From 1b820de08a05070909a267e17f033fcf58ac8710 Mon Sep 17 00:00:00 2001 From: NotAPenguin Date: Mon, 2 Sep 2024 23:17:17 +0200 Subject: The Great Renaming (#3014) * move kekztech to a single root dir * move detrav to a single root dir * move gtnh-lanthanides to a single root dir * move tectech and delete some gross reflection in gt++ * remove more reflection inside gt5u * delete more reflection in gt++ * fix imports * move bartworks and bwcrossmod * fix proxies * move galactigreg and ggfab * move gtneioreplugin * try to fix gt++ bee loader * apply the rename rules to BW * apply rename rules to bwcrossmod * apply rename rules to detrav scanner mod * apply rename rules to galacticgreg * apply rename rules to ggfab * apply rename rules to goodgenerator * apply rename rules to gtnh-lanthanides * apply rename rules to gt++ * apply rename rules to kekztech * apply rename rules to kubatech * apply rename rules to tectech * apply rename rules to gt apply the rename rules to gt * fix tt import * fix mui hopefully * fix coremod except intergalactic * rename assline recipe class * fix a class name i stumbled on * rename StructureUtility to GTStructureUtility to prevent conflict with structurelib * temporary rename of GTTooltipDataCache to old name * fix gt client/server proxy names --- src/main/java/bartworks/API/APIConfigValues.java | 20 + src/main/java/bartworks/API/BioObjectAdder.java | 196 + src/main/java/bartworks/API/BioVatLogicAdder.java | 237 + src/main/java/bartworks/API/BorosilicateGlass.java | 211 + src/main/java/bartworks/API/GlassTier.java | 78 + src/main/java/bartworks/API/INoiseGen.java | 29 + src/main/java/bartworks/API/IRadMaterial.java | 39 + .../java/bartworks/API/ITileAddsInformation.java | 19 + src/main/java/bartworks/API/ITileDropsContent.java | 23 + .../API/ITileHasDifferentTextureSides.java | 39 + src/main/java/bartworks/API/SideReference.java | 39 + .../java/bartworks/API/VoidMinerDropAdder.java | 24 + src/main/java/bartworks/API/WerkstoffAPI.java | 35 + .../java/bartworks/API/WerkstoffAdderRegistry.java | 31 + .../java/bartworks/API/modularUI/BWUITextures.java | 68 + .../API/recipe/BWNBTDependantCraftingRecipe.java | 76 + .../bartworks/API/recipe/BacterialVatFrontend.java | 92 + .../bartworks/API/recipe/BartWorksRecipeMaps.java | 89 + .../java/bartworks/API/recipe/DynamicGTRecipe.java | 33 + .../bartworks/API/recipe/RadioHatchFrontend.java | 45 + .../ASM/BWCoreStaticReplacementMethodes.java | 112 + src/main/java/bartworks/GuiHandler.java | 34 + src/main/java/bartworks/MainMod.java | 214 + .../ClientEventHandler/TooltipEventHandler.java | 36 + .../client/creativetabs/BartWorksTab.java | 31 + .../java/bartworks/client/creativetabs/BioTab.java | 32 + .../java/bartworks/client/creativetabs/GT2Tab.java | 31 + .../client/gui/GuiContainerRotorBlock.java | 89 + .../client/renderer/BWBlockOreRenderer.java | 159 + .../bartworks/client/renderer/BWItemRenderer.java | 136 + .../client/renderer/BWVanillaTexture.java | 56 + .../client/renderer/EICPistonVisualizer.java | 112 + .../client/renderer/RendererGlassBlock.java | 112 + .../renderer/RendererSwitchingColorFluid.java | 333 + .../client/textures/PrefixTextureLinker.java | 91 + .../java/bartworks/common/blocks/BWBlocks.java | 134 + .../bartworks/common/blocks/BWBlocksGlass.java | 187 + .../bartworks/common/blocks/BWBlocksGlass2.java | 179 + .../common/blocks/BWMachineBlockContainer.java | 43 + .../blocks/BWMultipleTileEntityContainer.java | 164 + .../common/blocks/BWTileEntityContainer.java | 204 + .../bartworks/common/blocks/BlockBioFluid.java | 92 + .../bartworks/common/commands/ChangeConfig.java | 72 + .../common/commands/ClearCraftingCache.java | 39 + .../common/commands/GetWorkingDirectory.java | 37 + .../common/commands/PrintRecipeListToFile.java | 62 + src/main/java/bartworks/common/commands/RunGC.java | 38 + .../java/bartworks/common/commands/SummonRuin.java | 46 + .../bartworks/common/configs/ConfigHandler.java | 301 + .../java/bartworks/common/items/BWItemBlocks.java | 84 + .../common/items/ItemCircuitProgrammer.java | 236 + .../java/bartworks/common/items/ItemLabModule.java | 41 + .../java/bartworks/common/items/ItemLabParts.java | 150 + .../bartworks/common/items/ItemRockCutter.java | 183 + .../common/items/ItemSimpleWindMeter.java | 76 + .../bartworks/common/items/ItemStonageRotors.java | 162 + .../bartworks/common/items/ItemTeslaStaff.java | 141 + .../bartworks/common/items/SimpleIconItem.java | 35 + .../bartworks/common/items/SimpleSubItemClass.java | 69 + .../common/loaders/ArtificialMicaLine.java | 191 + .../bartworks/common/loaders/BioCultureLoader.java | 104 + .../java/bartworks/common/loaders/BioItemList.java | 106 + .../bartworks/common/loaders/BioLabLoader.java | 23 + .../bartworks/common/loaders/BioRecipeLoader.java | 211 + .../ElectricImplosionCompressorRecipes.java | 229 + .../java/bartworks/common/loaders/FluidLoader.java | 145 + .../bartworks/common/loaders/ItemRegistry.java | 654 + .../common/loaders/LocalisationLoader.java | 62 + .../common/loaders/RadioHatchMaterialLoader.java | 365 + .../bartworks/common/loaders/RecipeLoader.java | 59 + .../common/loaders/RegisterGlassTiers.java | 118 + .../common/loaders/RegisterServerCommands.java | 34 + .../common/loaders/StaticRecipeChangeLoaders.java | 562 + .../common/loaders/recipes/Assembler.java | 270 + .../common/loaders/recipes/AssemblyLine.java | 81 + .../common/loaders/recipes/Autoclave.java | 40 + .../common/loaders/recipes/Centrifuge.java | 141 + .../common/loaders/recipes/ChemicalBath.java | 83 + .../common/loaders/recipes/ChemicalReactor.java | 28 + .../common/loaders/recipes/CraftingRecipes.java | 468 + .../common/loaders/recipes/Electrolyzer.java | 151 + .../common/loaders/recipes/Extractor.java | 44 + .../common/loaders/recipes/FakeRecipes.java | 11 + .../common/loaders/recipes/FluidHeater.java | 26 + .../common/loaders/recipes/FluidSolidifier.java | 102 + .../common/loaders/recipes/FormingPress.java | 76 + .../common/loaders/recipes/LaserEngraver.java | 27 + .../bartworks/common/loaders/recipes/Mixer.java | 62 + .../common/loaders/recipes/Pulverizer.java | 97 + .../common/loaders/recipes/PyrolyseOven.java | 27 + src/main/java/bartworks/common/net/BWNetwork.java | 170 + .../common/net/CircuitProgrammerPacket.java | 88 + src/main/java/bartworks/common/net/EICPacket.java | 60 + .../java/bartworks/common/net/MetaBlockPacket.java | 108 + .../bartworks/common/net/OreDictCachePacket.java | 71 + .../java/bartworks/common/net/RendererPacket.java | 99 + .../bartworks/common/net/ServerJoinedPacket.java | 61 + .../classic/TileEntityDimIDBridge.java | 24 + .../classic/TileEntityHeatedWaterPump.java | 375 + .../tileentities/classic/TileEntityRotorBlock.java | 41 + .../tileentities/debug/MTECreativeScanner.java | 70 + .../common/tileentities/multis/MTEBioVat.java | 834 ++ .../multis/MTECircuitAssemblyLine.java | 672 + .../multis/MTEDeepEarthHeatingPump.java | 336 + .../multis/MTEElectricImplosionCompressor.java | 565 + .../multis/MTEHighTempGasCooledReactor.java | 619 + .../common/tileentities/multis/MTELESU.java | 590 + .../common/tileentities/multis/MTEManualTrafo.java | 363 + .../multis/MTEThoriumHighTempReactor.java | 416 + .../common/tileentities/multis/MTEWindmill.java | 637 + .../multis/mega/MTEMegaBlastFurnace.java | 430 + .../multis/mega/MTEMegaChemicalReactor.java | 278 + .../multis/mega/MTEMegaDistillTower.java | 446 + .../multis/mega/MTEMegaOilCracker.java | 465 + .../multis/mega/MTEMegaVacuumFreezer.java | 533 + .../multis/mega/MegaMultiBlockBase.java | 212 + .../tiered/GT_MetaTileEntity_RadioHatch.java | 494 + .../tileentities/tiered/MTEAcidGenerator.java | 155 + .../common/tileentities/tiered/MTEBioLab.java | 405 + .../tiered/MTECompressedFluidHatch.java | 57 + .../common/tileentities/tiered/MTEDiode.java | 125 + .../tileentities/tiered/MTEEnergyDistributor.java | 72 + .../tileentities/tiered/MTEGiantOutputHatch.java | 41 + .../tiered/MTEHumongousInputHatch.java | 41 + .../java/bartworks/neiHandler/BWNEIConfig.java | 96 + .../bartworks/neiHandler/BioLabNEIHandler.java | 70 + .../bartworks/neiHandler/BioVatNEIHandler.java | 71 + .../java/bartworks/neiHandler/OreNEIHandler.java | 249 + .../server/EventHandler/ServerEventHandler.java | 94 + .../system/material/BWGTMaterialReference.java | 523 + .../system/material/BWItemMetaGeneratedBlock.java | 94 + .../system/material/BWMetaGeneratedBlocks.java | 130 + .../material/BWMetaGeneratedBlocksCasing.java | 121 + .../system/material/BWMetaGeneratedFrames.java | 144 + .../system/material/BWMetaGeneratedItems.java | 258 + .../system/material/BWMetaGeneratedOres.java | 133 + .../system/material/BWMetaGeneratedSmallOres.java | 76 + .../material/BWMetaGeneratedWerkstoffBlocks.java | 65 + .../system/material/BWNonMetaMaterialItems.java | 167 + .../BWTileEntityMetaGeneratedBlocksCasing.java | 50 + ...ileEntityMetaGeneratedBlocksCasingAdvanced.java | 50 + .../material/BWTileEntityMetaGeneratedOre.java | 116 + .../BWTileEntityMetaGeneratedSmallOre.java | 125 + .../BWTileEntityMetaGeneratedWerkstoffBlock.java | 49 + .../CircuitGeneration/BWCircuitsLoader.java | 25 + .../material/CircuitGeneration/BWMetaItems.java | 327 + .../material/CircuitGeneration/CircuitData.java | 76 + .../CircuitGeneration/CircuitImprintLoader.java | 367 + .../CircuitGeneration/CircuitPartLoader.java | 265 + .../material/TileEntityMetaGeneratedBlock.java | 71 + .../java/bartworks/system/material/Werkstoff.java | 1263 ++ .../bartworks/system/material/WerkstoffLoader.java | 2105 +++ .../material/gtenhancement/BWGTMetaItems.java | 207 + .../material/gtenhancement/GTMetaItemEnhancer.java | 150 + .../gtenhancement/PlatinumSludgeOverHaul.java | 1102 ++ .../material/processingLoaders/AddSomeRecipes.java | 95 + .../processingLoaders/AdditionalRecipes.java | 537 + .../material/processingLoaders/DownTierLoader.java | 47 + .../processingLoaders/LoadItemContainers.java | 76 + .../werkstoff_loaders/IWerkstoffRunnable.java | 21 + .../werkstoff_loaders/recipe/AspectLoader.java | 57 + .../werkstoff_loaders/recipe/BlockLoader.java | 73 + .../werkstoff_loaders/recipe/CasingLoader.java | 77 + .../werkstoff_loaders/recipe/CellLoader.java | 330 + .../recipe/CraftingMaterialLoader.java | 295 + .../werkstoff_loaders/recipe/CrushedLoader.java | 301 + .../werkstoff_loaders/recipe/DustLoader.java | 528 + .../werkstoff_loaders/recipe/GemLoader.java | 294 + .../werkstoff_loaders/recipe/MetalLoader.java | 65 + .../werkstoff_loaders/recipe/MoltenCellLoader.java | 376 + .../recipe/MultipleMetalLoader.java | 68 + .../werkstoff_loaders/recipe/OreLoader.java | 65 + .../werkstoff_loaders/recipe/RawOreLoader.java | 65 + .../recipe/SimpleMetalLoader.java | 249 + .../werkstoff_loaders/recipe/ToolLoader.java | 600 + .../registration/AssociationLoader.java | 41 + .../registration/BridgeMaterialsLoader.java | 171 + .../registration/CasingRegistrator.java | 39 + .../bartworks/system/oredict/OreDictAdder.java | 42 + .../bartworks/system/oredict/OreDictHandler.java | 94 + .../java/bartworks/system/oregen/BWOreLayer.java | 273 + .../bartworks/system/oregen/BWWordGenerator.java | 140 + .../system/oregen/BWWorldGenRoss128b.java | 174 + .../system/oregen/BWWorldGenRoss128ba.java | 162 + .../bartworks/system/worldgen/BWWorldGenUtil.java | 48 + .../bartworks/system/worldgen/MapGenRuins.java | 501 + src/main/java/bartworks/util/BWColorUtil.java | 216 + src/main/java/bartworks/util/BWRecipes.java | 71 + .../java/bartworks/util/BWTooltipReference.java | 45 + src/main/java/bartworks/util/BWUtil.java | 784 ++ src/main/java/bartworks/util/BioCulture.java | 253 + src/main/java/bartworks/util/BioDNA.java | 51 + src/main/java/bartworks/util/BioData.java | 173 + src/main/java/bartworks/util/BioPlasmid.java | 51 + .../java/bartworks/util/CachedReflectionUtils.java | 31 + .../bartworks/util/ConnectedBlocksChecker.java | 187 + .../util/ConnectedBlocksCheckerIteration.java | 146 + src/main/java/bartworks/util/Coords.java | 79 + src/main/java/bartworks/util/EnumUtils.java | 50 + src/main/java/bartworks/util/MathUtils.java | 116 + src/main/java/bartworks/util/MurmurHash3.java | 306 + .../java/bartworks/util/NoiseUtil/BartsNoise.java | 171 + .../bartworks/util/NoiseUtil/SimplexNoise.java | 396 + .../java/bartworks/util/NonNullWrappedHashMap.java | 56 + .../java/bartworks/util/NonNullWrappedHashSet.java | 51 + src/main/java/bartworks/util/Pair.java | 81 + .../java/bartworks/util/ResultWrongSievert.java | 97 + src/main/java/bartworks/util/StreamUtils.java | 38 + .../accessprioritylist/AccessPriorityList.java | 388 + .../AccessPriorityListIterators.java | 163 + .../accessprioritylist/AccessPriorityListNode.java | 72 + .../java/bartworks/util/flowerset/FlowerSet.java | 146 + src/main/java/bartworks/util/log/DebugLog.java | 65 + .../galacticgreg/GT_TileEntity_Ores_Space.java | 144 - .../GT_Worldgen_GT_Ore_Layer_Space.java | 323 - .../GT_Worldgen_GT_Ore_SmallPieces_Space.java | 116 - .../galacticgreg/GT_Worldgenerator_Space.java | 565 - .../java/bloodasp/galacticgreg/GalacticGreg.java | 113 - .../bloodasp/galacticgreg/SpaceDimRegisterer.java | 179 - .../java/bloodasp/galacticgreg/WorldGenGaGT.java | 28 - .../galacticgreg/api/AsteroidBlockComb.java | 77 - .../bloodasp/galacticgreg/api/BlockMetaComb.java | 50 - src/main/java/bloodasp/galacticgreg/api/Enums.java | 51 - .../java/bloodasp/galacticgreg/api/GTOreTypes.java | 66 - .../galacticgreg/api/ISpaceObjectGenerator.java | 58 - .../bloodasp/galacticgreg/api/ModContainer.java | 85 - .../java/bloodasp/galacticgreg/api/ModDBMDef.java | 161 - .../bloodasp/galacticgreg/api/ModDimensionDef.java | 466 - .../galacticgreg/api/SpecialBlockComb.java | 71 - .../galacticgreg/api/StructureInformation.java | 59 - .../enums/DimensionBlockMetaDefinitionList.java | 57 - .../galacticgreg/api/enums/DimensionDef.java | 228 - .../galacticgreg/api/enums/ModContainers.java | 19 - .../enums/properties/AsteroidPropertyBuilder.java | 105 - .../api/enums/properties/Asteroids.java | 78 - .../galacticgreg/auxiliary/ConfigManager.java | 79 - .../galacticgreg/auxiliary/GTOreGroup.java | 19 - .../galacticgreg/auxiliary/GalacticGregConfig.java | 141 - .../bloodasp/galacticgreg/auxiliary/LogHelper.java | 267 - .../galacticgreg/auxiliary/PlayerChatHelper.java | 106 - .../galacticgreg/auxiliary/ProfilingStorage.java | 74 - .../galacticgreg/command/AEStorageCommand.java | 180 - .../galacticgreg/command/ProfilingCommand.java | 99 - .../dynconfig/DynamicDimensionConfig.java | 160 - .../galacticgreg/generators/GenEllipsoid.java | 126 - .../registry/GalacticGregRegistry.java | 183 - .../galacticgreg/schematics/SpaceSchematic.java | 100 - .../schematics/SpaceSchematicFactory.java | 33 - .../schematics/SpaceSchematicHandler.java | 182 - .../schematics/SpaceSchematicWrapper.java | 104 - src/main/java/bwcrossmod/BartWorksCrossmod.java | 89 + .../bwcrossmod/GTpp/loader/RadioHatchCompat.java | 284 + src/main/java/bwcrossmod/cls/CLSCompat.java | 104 + .../bwcrossmod/galacticgreg/MTEVoidMinerBase.java | 309 + .../bwcrossmod/galacticgreg/MTEVoidMiners.java | 115 + .../bwcrossmod/galacticgreg/VoidMinerUtility.java | 275 + .../bwcrossmod/galacticraft/GalacticraftProxy.java | 82 + .../galacticraft/PlanetsHelperClass.java | 33 + .../galacticraft/UniversalTeleportType.java | 78 + .../atmosphere/BWAtmosphereManager.java | 121 + .../planets/AbstractWorldProviderSpace.java | 37 + .../planets/ross128b/ChunkProviderRoss128b.java | 185 + .../planets/ross128b/SkyProviderRoss128b.java | 25 + .../planets/ross128b/WorldProviderRoss128b.java | 154 + .../planets/ross128ba/ChunkProviderRoss128ba.java | 107 + .../planets/ross128ba/WorldProviderRoss128ba.java | 112 + .../solarsystems/Ross128SolarSystem.java | 91 + .../bwcrossmod/openComputers/GTNBTDataBase.java | 97 + .../openComputers/TileEntityGTDataServer.java | 202 + .../bwcrossmod/tectech/TecTechResearchLoader.java | 88 + .../tectech/tileentites/tiered/LowPowerLaser.java | 120 + .../tileentites/tiered/LowPowerLaserBase.java | 155 + .../tileentites/tiered/MTELowPowerLaserBox.java | 171 + .../tileentites/tiered/MTELowPowerLaserDynamo.java | 76 + .../tileentites/tiered/MTELowPowerLaserHatch.java | 60 + .../tileentites/tiered/MTELowPowerLaserPipe.java | 162 + .../bwcrossmod/tgregworks/MaterialsInjector.java | 81 + .../thaumcraft/util/ThaumcraftHandler.java | 58 + src/main/java/client/ClientProxy.java | 19 - src/main/java/client/gui/KT_UITextures.java | 21 - src/main/java/com/detrav/DetravScannerMod.java | 75 - .../com/detrav/Detrav_AfterGTPreload_Loader.java | 21 - .../com/detrav/commands/DetravScannerCommand.java | 158 - .../java/com/detrav/enums/DetravToolDictNames.java | 9 - src/main/java/com/detrav/enums/Textures01.java | 17 - .../com/detrav/events/DetravLoginEventHandler.java | 24 - src/main/java/com/detrav/gui/DetravScannerGUI.java | 121 - src/main/java/com/detrav/gui/OresList.java | 66 - .../com/detrav/gui/textures/DetravMapTexture.java | 145 - .../detrav/items/DetravMetaGeneratedTool01.java | 360 - .../BehaviourDetravToolElectricProspector.java | 253 - .../behaviours/BehaviourDetravToolProspector.java | 421 - .../processing/ProcessingDetravToolProspector.java | 131 - .../com/detrav/items/tools/DetravProspector.java | 35 - .../items/tools/DetravToolElectricProspector.java | 34 - .../tools/DetravToolElectricProspectorBase.java | 201 - src/main/java/com/detrav/net/DetravNetwork.java | 83 - src/main/java/com/detrav/net/DetravPacket.java | 16 - .../java/com/detrav/net/ProspectingPacket.java | 191 - src/main/java/com/detrav/proxies/ClientProxy.java | 49 - src/main/java/com/detrav/proxies/CommonProxy.java | 55 - src/main/java/com/detrav/proxies/ServerProxy.java | 22 - .../java/com/detrav/utils/BartWorksHelper.java | 23 - .../java/com/detrav/utils/DetravCreativeTab.java | 52 - src/main/java/com/detrav/utils/FluidColors.java | 135 - src/main/java/com/detrav/utils/GTppHelper.java | 67 - .../java/com/elisis/gtnhlanth/GTNHLanthanides.java | 83 - src/main/java/com/elisis/gtnhlanth/Tags.java | 11 - .../api/recipe/LanthanidesRecipeMaps.java | 25 - .../com/elisis/gtnhlanth/client/ClientProxy.java | 6 - .../com/elisis/gtnhlanth/common/CommonProxy.java | 14 - .../gtnhlanth/common/beamline/BeamInformation.java | 51 - .../gtnhlanth/common/beamline/BeamLinePacket.java | 51 - .../common/beamline/IConnectsToBeamline.java | 14 - .../elisis/gtnhlanth/common/beamline/Particle.java | 71 - .../gtnhlanth/common/beamline/TileBeamline.java | 256 - .../gtnhlanth/common/block/AntennaCasing.java | 15 - .../com/elisis/gtnhlanth/common/block/Casing.java | 80 - .../gtnhlanth/common/block/ShieldedAccGlass.java | 74 - .../gtnhlanth/common/hatch/TileBusInputFocus.java | 85 - .../common/hatch/TileHatchBeamlineConnector.java | 136 - .../common/hatch/TileHatchInputBeamline.java | 131 - .../common/hatch/TileHatchOutputBeamline.java | 138 - .../elisis/gtnhlanth/common/item/ICanFocus.java | 5 - .../elisis/gtnhlanth/common/item/LanthItem.java | 15 - .../com/elisis/gtnhlanth/common/item/MaskList.java | 162 - .../elisis/gtnhlanth/common/item/ParticleItem.java | 124 - .../common/item/PhotolithographicMask.java | 42 - .../common/register/BotWerkstoffMaterialPool.java | 88 - .../gtnhlanth/common/register/LanthItemList.java | 172 - .../common/register/WerkstoffMaterialPool.java | 2033 --- .../gtnhlanth/common/tileentity/Digester.java | 241 - .../common/tileentity/DissolutionTank.java | 264 - .../elisis/gtnhlanth/common/tileentity/LINAC.java | 749 - .../gtnhlanth/common/tileentity/SourceChamber.java | 410 - .../gtnhlanth/common/tileentity/Synchrotron.java | 1078 -- .../gtnhlanth/common/tileentity/TargetChamber.java | 481 - .../recipe/beamline/BeamlineRecipeAdder2.java | 166 - .../recipe/beamline/BeamlineRecipeLoader.java | 194 - .../tileentity/recipe/beamline/RecipeSC.java | 53 - .../tileentity/recipe/beamline/RecipeTC.java | 72 - .../recipe/beamline/SourceChamberFrontend.java | 24 - .../recipe/beamline/TargetChamberFrontend.java | 109 - .../com/elisis/gtnhlanth/loader/BotRecipes.java | 263 - .../gtnhlanth/loader/MetaTileEntity_Loader.java | 4 - .../com/elisis/gtnhlanth/loader/RecipeLoader.java | 4508 ------ .../elisis/gtnhlanth/loader/ZPMRubberChanges.java | 409 - .../gtnhlanth/util/DescTextLocalization.java | 24 - src/main/java/com/elisis/gtnhlanth/util/Util.java | 55 - .../com/elisis/gtnhlanth/xmod/nei/NEI_Config.java | 27 - .../bartworks/API/API_ConfigValues.java | 20 - .../bartworks/API/BioObjectAdder.java | 197 - .../bartworks/API/BioVatLogicAdder.java | 238 - .../bartworks/API/BorosilicateGlass.java | 211 - .../bartimaeusnek/bartworks/API/GlassTier.java | 78 - .../bartimaeusnek/bartworks/API/INoiseGen.java | 29 - .../bartimaeusnek/bartworks/API/IRadMaterial.java | 39 - .../bartworks/API/ITileAddsInformation.java | 19 - .../bartworks/API/ITileDropsContent.java | 23 - .../API/ITileHasDifferentTextureSides.java | 39 - .../bartimaeusnek/bartworks/API/SideReference.java | 39 - .../bartworks/API/VoidMinerDropAdder.java | 25 - .../bartimaeusnek/bartworks/API/WerkstoffAPI.java | 35 - .../bartworks/API/WerkstoffAdderRegistry.java | 31 - .../bartworks/API/modularUI/BW_UITextures.java | 61 - .../API/recipe/BWNBTDependantCraftingRecipe.java | 76 - .../bartworks/API/recipe/BacterialVatFrontend.java | 92 - .../bartworks/API/recipe/BartWorksRecipeMaps.java | 91 - .../bartworks/API/recipe/DynamicGTRecipe.java | 34 - .../bartworks/API/recipe/RadioHatchFrontend.java | 45 - .../ASM/BWCoreStaticReplacementMethodes.java | 112 - .../github/bartimaeusnek/bartworks/GuiHandler.java | 35 - .../github/bartimaeusnek/bartworks/MainMod.java | 215 - .../ClientEventHandler/TooltipEventHandler.java | 37 - .../bartworks/client/creativetabs/BioTab.java | 32 - .../bartworks/client/creativetabs/GT2Tab.java | 31 - .../client/creativetabs/bartworksTab.java | 31 - .../client/gui/BW_GUIContainer_RotorBlock.java | 90 - .../client/renderer/BW_EICPistonVisualizer.java | 112 - .../client/renderer/BW_GT_ItemRenderer.java | 137 - .../client/renderer/BW_GT_Vanilla_Texture.java | 56 - .../client/renderer/BW_Renderer_Block_Ores.java | 159 - .../client/renderer/RendererGlasBlock.java | 112 - .../renderer/RendererSwitchingColorFluid.java | 333 - .../client/textures/PrefixTextureLinker.java | 92 - .../bartworks/common/blocks/BW_Blocks.java | 135 - .../bartworks/common/blocks/BW_GlasBlocks.java | 188 - .../bartworks/common/blocks/BW_GlasBlocks2.java | 180 - .../common/blocks/BW_TileEntityContainer.java | 204 - .../BW_TileEntityContainer_MachineBlock.java | 44 - .../blocks/BW_TileEntityContainer_Multiple.java | 164 - .../bartworks/common/blocks/BioFluidBlock.java | 93 - .../bartworks/common/commands/ChangeConfig.java | 72 - .../common/commands/ClearCraftingCache.java | 39 - .../common/commands/GetWorkingDirectory.java | 37 - .../common/commands/PrintRecipeListToFile.java | 62 - .../bartworks/common/commands/RunGC.java | 38 - .../bartworks/common/commands/SummonRuin.java | 46 - .../bartworks/common/configs/ConfigHandler.java | 301 - .../bartworks/common/items/BW_ItemBlocks.java | 85 - .../bartworks/common/items/BW_SimpleWindMeter.java | 77 - .../bartworks/common/items/BW_Stonage_Rotors.java | 163 - .../bartworks/common/items/Circuit_Programmer.java | 236 - .../bartworks/common/items/GT_Rockcutter_Item.java | 183 - .../bartworks/common/items/GT_Teslastaff_Item.java | 141 - .../bartworks/common/items/LabModule.java | 41 - .../bartworks/common/items/LabParts.java | 154 - .../bartworks/common/items/SimpleIconItem.java | 35 - .../bartworks/common/items/SimpleSubItemClass.java | 70 - .../common/loaders/ArtificialMicaLine.java | 192 - .../bartworks/common/loaders/BioCultureLoader.java | 104 - .../bartworks/common/loaders/BioItemList.java | 107 - .../bartworks/common/loaders/BioLabLoader.java | 23 - .../bartworks/common/loaders/BioRecipeLoader.java | 213 - .../ElectricImplosionCompressorRecipes.java | 229 - .../bartworks/common/loaders/FluidLoader.java | 146 - .../bartworks/common/loaders/ItemRegistry.java | 659 - .../common/loaders/LocalisationLoader.java | 62 - .../common/loaders/RadioHatchMaterialLoader.java | 366 - .../bartworks/common/loaders/RecipeLoader.java | 60 - .../common/loaders/RegisterGlassTiers.java | 118 - .../common/loaders/RegisterServerCommands.java | 35 - .../common/loaders/StaticRecipeChangeLoaders.java | 564 - .../common/loaders/recipes/Assembler.java | 271 - .../common/loaders/recipes/AssemblyLine.java | 82 - .../common/loaders/recipes/Autoclave.java | 41 - .../common/loaders/recipes/Centrifuge.java | 144 - .../common/loaders/recipes/ChemicalBath.java | 84 - .../common/loaders/recipes/ChemicalReactor.java | 29 - .../common/loaders/recipes/CraftingRecipes.java | 477 - .../common/loaders/recipes/Electrolyzer.java | 152 - .../common/loaders/recipes/Extractor.java | 45 - .../common/loaders/recipes/FakeRecipes.java | 11 - .../common/loaders/recipes/FluidHeater.java | 27 - .../common/loaders/recipes/FluidSolidifier.java | 103 - .../common/loaders/recipes/FormingPress.java | 77 - .../common/loaders/recipes/LaserEngraver.java | 28 - .../bartworks/common/loaders/recipes/Mixer.java | 65 - .../common/loaders/recipes/Pulverizer.java | 98 - .../common/loaders/recipes/PyrolyseOven.java | 28 - .../bartworks/common/net/BW_Network.java | 171 - .../common/net/CircuitProgrammerPacket.java | 88 - .../bartworks/common/net/EICPacket.java | 60 - .../bartworks/common/net/MetaBlockPacket.java | 108 - .../bartworks/common/net/OreDictCachePacket.java | 71 - .../bartworks/common/net/RendererPacket.java | 99 - .../bartworks/common/net/ServerJoinedPackage.java | 61 - .../classic/BWTileEntityDimIDBridge.java | 24 - .../common/tileentities/classic/BW_RotorBlock.java | 42 - .../classic/BW_TileEntity_HeatedWaterPump.java | 375 - .../common/tileentities/debug/CreativeScanner.java | 71 - .../tileentities/multis/GT_TileEntity_BioVat.java | 836 -- .../multis/GT_TileEntity_CircuitAssemblyLine.java | 672 - .../tileentities/multis/GT_TileEntity_DEHP.java | 337 - .../GT_TileEntity_ElectricImplosionCompressor.java | 566 - .../tileentities/multis/GT_TileEntity_HTGR.java | 614 - .../tileentities/multis/GT_TileEntity_LESU.java | 590 - .../multis/GT_TileEntity_ManualTrafo.java | 365 - .../tileentities/multis/GT_TileEntity_THTR.java | 413 - .../multis/GT_TileEntity_Windmill.java | 638 - .../mega/GT_TileEntity_MegaBlastFurnace.java | 433 - .../mega/GT_TileEntity_MegaChemicalReactor.java | 279 - .../mega/GT_TileEntity_MegaDistillTower.java | 451 - .../mega/GT_TileEntity_MegaMultiBlockBase.java | 213 - .../multis/mega/GT_TileEntity_MegaOilCracker.java | 471 - .../mega/GT_TileEntity_MegaVacuumFreezer.java | 535 - .../tiered/GT_MetaTileEntity_AcidGenerator.java | 157 - .../tiered/GT_MetaTileEntity_BioLab.java | 412 - .../GT_MetaTileEntity_CompressedFluidHatch.java | 62 - .../tiered/GT_MetaTileEntity_Diode.java | 125 - .../GT_MetaTileEntity_EnergyDistributor.java | 73 - .../tiered/GT_MetaTileEntity_GiantOutputHatch.java | 42 - .../GT_MetaTileEntity_HumongousInputHatch.java | 46 - .../tiered/GT_MetaTileEntity_RadioHatch.java | 495 - .../bartworks/neiHandler/BW_NEI_BioLabHandler.java | 71 - .../bartworks/neiHandler/BW_NEI_BioVatHandler.java | 72 - .../bartworks/neiHandler/BW_NEI_OreHandler.java | 250 - .../bartworks/neiHandler/NEI_BW_Config.java | 97 - .../server/EventHandler/ServerEventHandler.java | 95 - .../system/material/BW_GT_MaterialReference.java | 194 - .../material/BW_MetaGeneratedBlock_Item.java | 97 - .../material/BW_MetaGeneratedBlocks_Casing.java | 121 - .../BW_MetaGeneratedBlocks_CasingAdvanced_TE.java | 51 - .../material/BW_MetaGeneratedBlocks_Casing_TE.java | 51 - .../system/material/BW_MetaGeneratedFrames.java | 144 - .../system/material/BW_MetaGeneratedOreTE.java | 116 - .../material/BW_MetaGeneratedSmallOreTE.java | 128 - .../system/material/BW_MetaGenerated_Block_TE.java | 73 - .../system/material/BW_MetaGenerated_Blocks.java | 131 - .../system/material/BW_MetaGenerated_Items.java | 262 - .../system/material/BW_MetaGenerated_Ores.java | 134 - .../material/BW_MetaGenerated_SmallOres.java | 76 - .../BW_MetaGenerated_WerkstoffBlock_TE.java | 50 - .../material/BW_MetaGenerated_WerkstoffBlocks.java | 65 - .../system/material/BW_NonMeta_MaterialItems.java | 167 - .../CircuitGeneration/BW_CircuitsLoader.java | 25 - .../material/CircuitGeneration/BW_Meta_Items.java | 328 - .../material/CircuitGeneration/CircuitData.java | 76 - .../CircuitGeneration/CircuitImprintLoader.java | 368 - .../CircuitGeneration/CircuitPartLoader.java | 266 - .../material/GT_Enhancement/BWGTMetaItems.java | 211 - .../GT_Enhancement/GTMetaItemEnhancer.java | 150 - .../GT_Enhancement/PlatinumSludgeOverHaul.java | 1109 -- .../bartworks/system/material/Werkstoff.java | 1264 -- .../bartworks/system/material/WerkstoffLoader.java | 2101 --- .../material/processingLoaders/AddSomeRecipes.java | 96 - .../processingLoaders/AdditionalRecipes.java | 538 - .../material/processingLoaders/DownTierLoader.java | 48 - .../processingLoaders/LoadItemContainers.java | 77 - .../werkstoff_loaders/IWerkstoffRunnable.java | 21 - .../werkstoff_loaders/recipe/AspectLoader.java | 58 - .../werkstoff_loaders/recipe/BlockLoader.java | 74 - .../werkstoff_loaders/recipe/CasingLoader.java | 78 - .../werkstoff_loaders/recipe/CellLoader.java | 331 - .../recipe/CraftingMaterialLoader.java | 296 - .../werkstoff_loaders/recipe/CrushedLoader.java | 302 - .../werkstoff_loaders/recipe/DustLoader.java | 529 - .../werkstoff_loaders/recipe/GemLoader.java | 296 - .../werkstoff_loaders/recipe/MetalLoader.java | 66 - .../werkstoff_loaders/recipe/MoltenCellLoader.java | 377 - .../recipe/MultipleMetalLoader.java | 69 - .../werkstoff_loaders/recipe/OreLoader.java | 66 - .../werkstoff_loaders/recipe/RawOreLoader.java | 66 - .../recipe/SimpleMetalLoader.java | 250 - .../werkstoff_loaders/recipe/ToolLoader.java | 603 - .../registration/AssociationLoader.java | 42 - .../registration/BridgeMaterialsLoader.java | 173 - .../registration/CasingRegistrator.java | 40 - .../bartworks/system/oredict/OreDictAdder.java | 43 - .../bartworks/system/oredict/OreDictHandler.java | 95 - .../bartworks/system/oregen/BW_OreLayer.java | 273 - .../bartworks/system/oregen/BW_WordGenerator.java | 140 - .../system/oregen/BW_WorldGenRoss128b.java | 197 - .../system/oregen/BW_WorldGenRoss128ba.java | 181 - .../bartworks/system/worldgen/GT_WorldgenUtil.java | 49 - .../bartworks/system/worldgen/MapGenRuins.java | 502 - .../bartimaeusnek/bartworks/util/BWRecipes.java | 73 - .../bartimaeusnek/bartworks/util/BW_ColorUtil.java | 216 - .../bartworks/util/BW_Tooltip_Reference.java | 45 - .../bartimaeusnek/bartworks/util/BW_Util.java | 784 -- .../bartimaeusnek/bartworks/util/BioCulture.java | 253 - .../bartimaeusnek/bartworks/util/BioDNA.java | 51 - .../bartimaeusnek/bartworks/util/BioData.java | 173 - .../bartimaeusnek/bartworks/util/BioPlasmid.java | 51 - .../bartworks/util/CachedReflectionUtils.java | 31 - .../bartworks/util/ConnectedBlocksChecker.java | 187 - .../util/ConnectedBlocksCheckerIteration.java | 146 - .../bartimaeusnek/bartworks/util/Coords.java | 79 - .../bartimaeusnek/bartworks/util/EnumUtils.java | 50 - .../bartimaeusnek/bartworks/util/MathUtils.java | 116 - .../bartimaeusnek/bartworks/util/MurmurHash3.java | 306 - .../bartworks/util/NoiseUtil/BartsNoise.java | 172 - .../bartworks/util/NoiseUtil/SimplexNoise.java | 396 - .../bartworks/util/NonNullWrappedHashMap.java | 56 - .../bartworks/util/NonNullWrappedHashSet.java | 51 - .../github/bartimaeusnek/bartworks/util/Pair.java | 81 - .../bartworks/util/ResultWrongSievert.java | 97 - .../bartimaeusnek/bartworks/util/StreamUtils.java | 38 - .../accessprioritylist/AccessPriorityList.java | 388 - .../AccessPriorityListIterators.java | 163 - .../accessprioritylist/AccessPriorityListNode.java | 72 - .../bartworks/util/flowerset/FlowerSet.java | 146 - .../bartimaeusnek/bartworks/util/log/DebugLog.java | 65 - .../bartimaeusnek/crossmod/BartWorksCrossmod.java | 90 - .../crossmod/GTpp/loader/RadioHatchCompat.java | 285 - .../bartimaeusnek/crossmod/cls/CLSCompat.java | 104 - .../galacticgreg/GT_TileEntity_VoidMiner_Base.java | 309 - .../galacticgreg/GT_TileEntity_VoidMiners.java | 115 - .../crossmod/galacticgreg/VoidMinerUtility.java | 278 - .../crossmod/galacticraft/GalacticraftProxy.java | 83 - .../crossmod/galacticraft/PlanetsHelperClass.java | 34 - .../galacticraft/UniversalTeleportType.java | 78 - .../atmosphere/BWAtmosphereManager.java | 121 - .../planets/AbstractWorldProviderSpace.java | 37 - .../planets/ross128b/ChunkProviderRoss128b.java | 186 - .../planets/ross128b/SkyProviderRoss128b.java | 25 - .../planets/ross128b/WorldProviderRoss128b.java | 155 - .../planets/ross128ba/ChunkProviderRoss128ba.java | 108 - .../planets/ross128ba/WorldProviderRoss128ba.java | 113 - .../solarsystems/Ross128SolarSystem.java | 92 - .../crossmod/openComputers/GT_NBT_DataBase.java | 97 - .../openComputers/TileEntity_GTDataServer.java | 203 - .../crossmod/tectech/TecTechResearchLoader.java | 89 - .../tectech/tileentites/tiered/LowPowerLaser.java | 121 - .../tiered/TT_Abstract_LowPowerLaserThingy.java | 156 - .../tiered/TT_MetaTileEntity_LowPowerLaserBox.java | 177 - .../TT_MetaTileEntity_LowPowerLaserDynamo.java | 84 - .../TT_MetaTileEntity_LowPowerLaserHatch.java | 68 - .../TT_MetaTileEntity_Pipe_Energy_LowPower.java | 163 - .../crossmod/tgregworks/MaterialsInjector.java | 82 - .../thaumcraft/util/ThaumcraftHandler.java | 59 - .../java/com/github/technus/tectech/Reference.java | 16 - .../java/com/github/technus/tectech/TecTech.java | 121 - .../technus/tectech/TecTechEventHandlers.java | 24 - .../openComputers/AvrArchitecture.java | 307 - .../github/technus/tectech/loader/MainLoader.java | 207 - .../technus/tectech/loader/NetworkDispatcher.java | 25 - .../technus/tectech/loader/TecTechConfig.java | 271 - .../tectech/loader/gui/CreativeTabTecTech.java | 37 - .../technus/tectech/loader/recipe/Assembler.java | 3022 ---- .../tectech/loader/recipe/AssemblyLine.java | 168 - .../tectech/loader/recipe/BaseRecipeLoader.java | 49 - .../tectech/loader/recipe/CircuitAssembler.java | 55 - .../technus/tectech/loader/recipe/Crafting.java | 57 - .../technus/tectech/loader/recipe/Extractor.java | 68 - .../technus/tectech/loader/recipe/Godforge.java | 662 - .../loader/recipe/ResearchStationAssemblyLine.java | 3690 ----- .../technus/tectech/loader/thing/CoverLoader.java | 48 - .../tectech/loader/thing/MachineLoader.java | 2883 ---- .../technus/tectech/loader/thing/MuTeLoader.java | 21 - .../technus/tectech/loader/thing/ThingsLoader.java | 96 - .../mechanics/dataTransport/DataPacket.java | 104 - .../dataTransport/InventoryDataPacket.java | 62 - .../mechanics/dataTransport/QuantumDataPacket.java | 50 - .../enderStorage/EnderFluidContainer.java | 134 - .../mechanics/enderStorage/EnderLinkTag.java | 39 - .../mechanics/enderStorage/EnderLinkTank.java | 47 - .../enderStorage/EnderWorldSavedData.java | 145 - .../tectech/mechanics/pipe/IActivePipe.java | 12 - .../mechanics/pipe/IConnectsToDataPipe.java | 17 - .../mechanics/pipe/IConnectsToEnergyTunnel.java | 11 - .../mechanics/pipe/PipeActivityMessage.java | 136 - .../tectech/mechanics/spark/RendererMessage.java | 149 - .../tectech/mechanics/spark/ThaumSpark.java | 57 - .../tectech/mechanics/tesla/ITeslaConnectable.java | 183 - .../mechanics/tesla/ITeslaConnectableSimple.java | 24 - .../mechanics/tesla/TeslaCoverConnection.java | 81 - .../github/technus/tectech/proxy/ClientProxy.java | 185 - .../github/technus/tectech/proxy/CommonProxy.java | 94 - .../tectech/recipe/EyeOfHarmonyFrontend.java | 206 - .../technus/tectech/recipe/EyeOfHarmonyRecipe.java | 467 - .../tectech/recipe/EyeOfHarmonyRecipeStorage.java | 186 - .../tectech/recipe/GodforgeExoticFrontend.java | 82 - .../tectech/recipe/GodforgePlasmaFrontend.java | 79 - .../tectech/recipe/ResearchStationFrontend.java | 101 - .../technus/tectech/recipe/TT_recipeAdder.java | 252 - .../technus/tectech/recipe/TecTechRecipeMaps.java | 78 - .../tectech/rendering/EOH/EOH_ItemRenderer.java | 98 - .../tectech/rendering/EOH/EOH_RenderingUtils.java | 270 - .../technus/tectech/rendering/EOH/EOH_TESR.java | 91 - .../technus/tectech/thing/CustomItemList.java | 629 - .../tectech/thing/block/EOH_RenderBlock.java | 79 - .../tectech/thing/block/ForgeOfGodsBlock.java | 72 - .../tectech/thing/block/GodforgeGlassBlock.java | 107 - .../tectech/thing/block/GodforgeGlassItem.java | 30 - .../tectech/thing/block/GodforgeGlassRender.java | 122 - .../tectech/thing/block/QuantumGlassBlock.java | 111 - .../tectech/thing/block/QuantumGlassItem.java | 33 - .../tectech/thing/block/QuantumGlassRender.java | 129 - .../tectech/thing/block/QuantumStuffBlock.java | 104 - .../tectech/thing/block/QuantumStuffRender.java | 104 - .../tectech/thing/block/ReactorSimBlock.java | 96 - .../tectech/thing/block/ReactorSimItem.java | 36 - .../tectech/thing/block/RenderForgeOfGods.java | 65 - .../tectech/thing/block/TileEyeOfHarmony.java | 200 - .../tectech/thing/block/TileForgeOfGods.java | 82 - .../tectech/thing/casing/GT_Block_CasingsBA0.java | 227 - .../tectech/thing/casing/GT_Block_CasingsNH.java | 64 - .../tectech/thing/casing/GT_Block_CasingsTT.java | 196 - .../tectech/thing/casing/GT_Item_CasingsBA0.java | 111 - .../tectech/thing/casing/GT_Item_CasingsNH.java | 15 - .../tectech/thing/casing/GT_Item_CasingsTT.java | 133 - .../thing/casing/GT_Item_Casings_Godforge.java | 126 - .../thing/casing/GT_Item_Casings_Spacetime.java | 56 - .../casing/GT_Item_Casings_Stabilisation.java | 47 - .../casing/GT_Item_Casings_TimeAcceleration.java | 46 - .../tectech/thing/casing/GodforgeCasings.java | 131 - .../casing/SpacetimeCompressionFieldCasing.java | 120 - .../thing/casing/StabilisationFieldCasing.java | 117 - .../tectech/thing/casing/TT_Container_Casings.java | 28 - .../thing/casing/TimeAccelerationFieldCasing.java | 120 - .../thing/cover/GT_Cover_TM_EnderFluidLink.java | 247 - .../thing/cover/GT_Cover_TM_PowerPassUpgrade.java | 53 - .../tectech/thing/cover/GT_Cover_TM_TeslaCoil.java | 87 - .../cover/GT_Cover_TM_TeslaCoil_Ultimate.java | 44 - .../tectech/thing/gui/TecTechUITextures.java | 192 - .../tectech/thing/item/AstralArrayFabricator.java | 53 - .../tectech/thing/item/EnderFluidLinkCover.java | 56 - .../technus/tectech/thing/item/EuMeterGT.java | 169 - .../tectech/thing/item/ParametrizerMemoryCard.java | 234 - .../tectech/thing/item/PowerPassUpgradeCover.java | 55 - .../tectech/thing/item/RenderForgeOfGodsItem.java | 59 - .../tectech/thing/item/TeslaCoilCapacitor.java | 108 - .../tectech/thing/item/TeslaCoilComponent.java | 72 - .../technus/tectech/thing/item/TeslaCoilCover.java | 87 - .../technus/tectech/thing/item/TeslaStaff.java | 54 - .../tectech/thing/metaTileEntity/Textures.java | 318 - .../hatch/GT_MetaTileEntity_Hatch_Capacitor.java | 263 - .../GT_MetaTileEntity_Hatch_CreativeData.java | 133 - ...T_MetaTileEntity_Hatch_CreativeMaintenance.java | 96 - ...T_MetaTileEntity_Hatch_CreativeUncertainty.java | 58 - .../GT_MetaTileEntity_Hatch_DataConnector.java | 202 - .../hatch/GT_MetaTileEntity_Hatch_DynamoMulti.java | 129 - .../GT_MetaTileEntity_Hatch_DynamoTunnel.java | 292 - .../hatch/GT_MetaTileEntity_Hatch_EnergyMulti.java | 135 - .../GT_MetaTileEntity_Hatch_EnergyTunnel.java | 206 - .../hatch/GT_MetaTileEntity_Hatch_Holder.java | 176 - .../hatch/GT_MetaTileEntity_Hatch_InputData.java | 102 - .../GT_MetaTileEntity_Hatch_InputDataItems.java | 259 - .../hatch/GT_MetaTileEntity_Hatch_OutputData.java | 116 - .../GT_MetaTileEntity_Hatch_OutputDataItems.java | 141 - .../hatch/GT_MetaTileEntity_Hatch_Param.java | 554 - .../hatch/GT_MetaTileEntity_Hatch_ParamText.java | 291 - .../hatch/GT_MetaTileEntity_Hatch_Rack.java | 414 - .../hatch/GT_MetaTileEntity_Hatch_Uncertainty.java | 469 - ...TileEntity_Hatch_WirelessComputation_Input.java | 134 - ...ileEntity_Hatch_WirelessComputation_Output.java | 61 - ...etaTileEntity_Hatch_WirelessInputDataItems.java | 146 - .../GT_MetaTileEntity_Hatch_WirelessMulti.java | 215 - ...taTileEntity_Hatch_WirelessOutputDataItems.java | 148 - .../multi/ForgeOfGodsRingsStructureString.java | 5105 ------- .../multi/ForgeOfGodsStructureString.java | 5435 -------- .../multi/GT_MetaTileEntity_EM_EyeOfHarmony.java | 1845 --- .../multi/GT_MetaTileEntity_EM_ForgeOfGods.java | 3061 ----- .../multi/GT_MetaTileEntity_EM_computer.java | 621 - .../multi/GT_MetaTileEntity_EM_dataBank.java | 384 - .../multi/GT_MetaTileEntity_EM_infuser.java | 315 - .../multi/GT_MetaTileEntity_EM_research.java | 691 - .../multi/GT_MetaTileEntity_EM_switch.java | 291 - .../multi/GT_MetaTileEntity_EM_transformer.java | 236 - .../multi/GT_MetaTileEntity_TM_microwave.java | 348 - .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 1010 -- .../base/GT_MetaTileEntity_MultiblockBase_EM.java | 2770 ---- .../metaTileEntity/multi/base/INameFunction.java | 6 - .../metaTileEntity/multi/base/IStatusFunction.java | 6 - .../thing/metaTileEntity/multi/base/LedStatus.java | 64 - .../metaTileEntity/multi/base/Parameters.java | 327 - .../thing/metaTileEntity/multi/base/SoundLoop.java | 59 - .../render/TT_RenderedExtendedFacingTexture.java | 25 - .../GT_MetaTileEntity_EM_BaseModule.java | 514 - .../GT_MetaTileEntity_EM_ExoticModule.java | 548 - .../GT_MetaTileEntity_EM_MoltenModule.java | 246 - .../GT_MetaTileEntity_EM_PlasmaModule.java | 246 - .../GT_MetaTileEntity_EM_SmeltingModule.java | 246 - .../pipe/GT_MetaTileEntity_PipeBlock_Data.java | 52 - .../pipe/GT_MetaTileEntity_PipeBlock_Energy.java | 52 - .../pipe/GT_MetaTileEntity_Pipe_Data.java | 313 - .../pipe/GT_MetaTileEntity_Pipe_Energy.java | 282 - .../pipe/GT_MetaTileEntity_Pipe_EnergyMirror.java | 224 - .../single/GT_MetaTileEntity_BuckConverter.java | 267 - .../single/GT_MetaTileEntity_DebugPollutor.java | 241 - .../GT_MetaTileEntity_DebugPowerGenerator.java | 387 - .../GT_MetaTileEntity_DebugStructureWriter.java | 295 - .../single/GT_MetaTileEntity_OwnerDetector.java | 239 - .../single/GT_MetaTileEntity_TT_Transformer.java | 73 - .../single/GT_MetaTileEntity_TeslaCoil.java | 404 - .../single/GT_MetaTileEntity_WetTransformer.java | 50 - .../tectech/thing/multiTileEntity/GodForge.java | 0 .../thing/tileEntity/ReactorSimTileEntity.java | 143 - .../github/technus/tectech/util/CommonValues.java | 28 - .../com/github/technus/tectech/util/Converter.java | 41 - .../technus/tectech/util/FluidStackLong.java | 29 - .../github/technus/tectech/util/GodforgeMath.java | 308 - .../github/technus/tectech/util/ItemStackLong.java | 28 - .../github/technus/tectech/util/TT_Utility.java | 188 - src/main/java/common/Blocks.java | 62 - src/main/java/common/CommonProxy.java | 47 - src/main/java/common/Recipes.java | 144 - src/main/java/common/Researches.java | 71 - src/main/java/common/TileEntities.java | 56 - .../java/common/blocks/BaseGTUpdateableBlock.java | 57 - src/main/java/common/blocks/Block_GDCUnit.java | 29 - src/main/java/common/blocks/Block_IchorJar.java | 230 - .../common/blocks/Block_LapotronicEnergyUnit.java | 173 - .../java/common/blocks/Block_LargeHexPlate.java | 65 - .../java/common/blocks/Block_TFFTStorageField.java | 92 - .../common/blocks/Block_ThaumiumReinforcedJar.java | 252 - src/main/java/common/blocks/Block_YSZUnit.java | 29 - src/main/java/common/itemBlocks/IB_IchorJar.java | 27 - .../common/itemBlocks/IB_LapotronicEnergyUnit.java | 190 - .../common/itemBlocks/IB_TFFTStorageField.java | 63 - .../itemBlocks/IB_ThaumiumReinforcedJar.java | 27 - src/main/java/common/items/ErrorItem.java | 48 - .../common/items/MetaItem_CraftingComponent.java | 89 - .../java/common/recipeLoaders/AlloySmelter.java | 29 - src/main/java/common/recipeLoaders/Assembler.java | 295 - .../java/common/recipeLoaders/AssemblyLine.java | 227 - .../java/common/recipeLoaders/ChemicalReactor.java | 30 - src/main/java/common/recipeLoaders/Crafting.java | 72 - .../java/common/recipeLoaders/FormingPress.java | 29 - src/main/java/common/recipeLoaders/Mixer.java | 48 - .../recipeLoaders/ResearchableAssemblyLine.java | 134 - src/main/java/common/recipeLoaders/Unpackager.java | 200 - .../GTMTE_LapotronicSuperCapacitor.java | 1214 -- .../common/tileentities/GTMTE_SOFuelCellMK1.java | 221 - .../common/tileentities/GTMTE_SOFuelCellMK2.java | 222 - src/main/java/common/tileentities/GTMTE_TFFT.java | 787 -- .../java/common/tileentities/GTMTE_TFFTHatch.java | 271 - src/main/java/common/tileentities/TE_IchorJar.java | 10 - .../java/common/tileentities/TE_IchorVoidJar.java | 10 - .../tileentities/TE_ThaumiumReinforcedJar.java | 10 - .../tileentities/TE_ThaumiumReinforcedVoidJar.java | 10 - .../java/detrav/DetravLoaderAfterGTPreload.java | 21 + src/main/java/detrav/DetravScannerMod.java | 74 + .../java/detrav/commands/DetravScannerCommand.java | 158 + .../java/detrav/enums/DetravToolDictNames.java | 9 + src/main/java/detrav/enums/Textures01.java | 17 + .../detrav/events/DetravLoginEventHandler.java | 24 + src/main/java/detrav/gui/DetravScannerGUI.java | 120 + src/main/java/detrav/gui/OresList.java | 66 + .../java/detrav/gui/textures/DetravMapTexture.java | 145 + .../detrav/items/DetravMetaGeneratedTool01.java | 359 + .../BehaviourDetravToolElectricProspector.java | 253 + .../behaviours/BehaviourDetravToolProspector.java | 420 + .../processing/ProcessingDetravToolProspector.java | 129 + .../java/detrav/items/tools/DetravProspector.java | 34 + .../items/tools/DetravToolElectricProspector.java | 33 + .../tools/DetravToolElectricProspectorBase.java | 200 + src/main/java/detrav/net/DetravNetwork.java | 83 + src/main/java/detrav/net/DetravPacket.java | 16 + src/main/java/detrav/net/ProspectingPacket.java | 191 + src/main/java/detrav/proxies/ClientProxy.java | 49 + src/main/java/detrav/proxies/CommonProxy.java | 54 + src/main/java/detrav/proxies/ServerProxy.java | 22 + src/main/java/detrav/utils/BartWorksHelper.java | 23 + src/main/java/detrav/utils/DetravCreativeTab.java | 51 + src/main/java/detrav/utils/FluidColors.java | 135 + src/main/java/detrav/utils/GTppHelper.java | 67 + src/main/java/galacticgreg/GalacticGreg.java | 113 + src/main/java/galacticgreg/SpaceDimRegisterer.java | 140 + .../java/galacticgreg/TileEntitySpaceOres.java | 144 + .../java/galacticgreg/WorldGeneratorSpace.java | 564 + src/main/java/galacticgreg/WorldgenGaGT.java | 28 + .../java/galacticgreg/WorldgenOreLayerSpace.java | 320 + .../java/galacticgreg/WorldgenOreSmallSpace.java | 116 + .../java/galacticgreg/api/AsteroidBlockComb.java | 77 + src/main/java/galacticgreg/api/BlockMetaComb.java | 50 + src/main/java/galacticgreg/api/Enums.java | 51 + src/main/java/galacticgreg/api/GTOreTypes.java | 66 + .../galacticgreg/api/ISpaceObjectGenerator.java | 58 + src/main/java/galacticgreg/api/ModContainer.java | 85 + src/main/java/galacticgreg/api/ModDBMDef.java | 159 + .../java/galacticgreg/api/ModDimensionDef.java | 461 + .../java/galacticgreg/api/SpecialBlockComb.java | 69 + .../galacticgreg/api/StructureInformation.java | 59 + .../enums/DimensionBlockMetaDefinitionList.java | 57 + .../java/galacticgreg/api/enums/DimensionDef.java | 228 + .../java/galacticgreg/api/enums/ModContainers.java | 19 + .../enums/properties/AsteroidPropertyBuilder.java | 105 + .../api/enums/properties/Asteroids.java | 78 + .../java/galacticgreg/auxiliary/ConfigManager.java | 79 + .../java/galacticgreg/auxiliary/GTOreGroup.java | 19 + .../galacticgreg/auxiliary/GalacticGregConfig.java | 141 + .../java/galacticgreg/auxiliary/LogHelper.java | 267 + .../galacticgreg/auxiliary/PlayerChatHelper.java | 106 + .../galacticgreg/auxiliary/ProfilingStorage.java | 74 + .../galacticgreg/command/AEStorageCommand.java | 180 + .../galacticgreg/command/ProfilingCommand.java | 99 + .../dynconfig/DynamicDimensionConfig.java | 160 + .../java/galacticgreg/generators/GenEllipsoid.java | 126 + .../registry/GalacticGregRegistry.java | 183 + .../galacticgreg/schematics/SpaceSchematic.java | 100 + .../schematics/SpaceSchematicFactory.java | 33 + .../schematics/SpaceSchematicHandler.java | 182 + .../schematics/SpaceSchematicWrapper.java | 104 + src/main/java/ggfab/BlockIcons.java | 45 + src/main/java/ggfab/ComponentRecipeLoader.java | 57 + src/main/java/ggfab/ConfigurationHandler.java | 52 + src/main/java/ggfab/GGConstants.java | 16 + src/main/java/ggfab/GGItemList.java | 205 + src/main/java/ggfab/GigaGramFab.java | 185 + src/main/java/ggfab/SingleUseToolRecipeLoader.java | 102 + src/main/java/ggfab/api/GGFabRecipeMaps.java | 64 + src/main/java/ggfab/api/GigaGramFabAPI.java | 30 + src/main/java/ggfab/items/GGMetaItemDumbItems.java | 153 + src/main/java/ggfab/mte/MTEAdvAssLine.java | 1106 ++ src/main/java/ggfab/mte/MTELinkedInputBus.java | 683 + src/main/java/ggfab/mui/ClickableTextWidget.java | 58 + src/main/java/ggfab/util/GGUtils.java | 78 + src/main/java/ggfab/util/OverclockHelper.java | 75 + .../api/recipe/ExtremeHeatExchangerBackend.java | 4 +- .../api/recipe/ExtremeHeatExchangerFrontend.java | 8 +- .../api/recipe/ExtremeHeatExchangerRecipe.java | 4 +- .../api/recipe/GoodGeneratorRecipeMaps.java | 24 +- .../blocks/myFluids/FluidsBuilder.java | 32 +- .../blocks/regularBlock/BlockCasing.java | 124 + .../regularBlock/BlockComplexTextureCasing.java | 58 + .../blocks/regularBlock/BlockFrame.java | 37 + .../blocks/regularBlock/BlockTEContainer.java | 207 + .../blocks/regularBlock/BlockTurbineCasing.java | 103 + .../goodgenerator/blocks/regularBlock/Casing.java | 124 - .../blocks/regularBlock/ComplexTextureCasing.java | 58 - .../goodgenerator/blocks/regularBlock/Frame.java | 37 - .../goodgenerator/blocks/regularBlock/TEBlock.java | 207 - .../blocks/regularBlock/TurbineCasing.java | 103 - .../blocks/tileEntity/ComponentAssemblyLine.java | 416 - .../blocks/tileEntity/CoolantTower.java | 211 - .../blocks/tileEntity/EssentiaHatch.java | 244 - .../blocks/tileEntity/EssentiaOutputHatch.java | 179 - .../blocks/tileEntity/EssentiaOutputHatch_ME.java | 150 - .../blocks/tileEntity/ExtremeHeatExchanger.java | 416 - .../blocks/tileEntity/FuelRefineFactory.java | 377 - .../GTMetaTileEntity/DieselGenerator.java | 213 - .../GTMetaTileEntity/MTEDieselGenerator.java | 213 + .../GTMetaTileEntity/MTENeutronAccelerator.java | 48 + .../GTMetaTileEntity/MTENeutronSensor.java | 272 + .../tileEntity/GTMetaTileEntity/MTEYOTTAHatch.java | 469 + .../GTMetaTileEntity/NeutronAccelerator.java | 48 - .../tileEntity/GTMetaTileEntity/NeutronSensor.java | 272 - .../tileEntity/GTMetaTileEntity/YOTTAHatch.java | 469 - .../blocks/tileEntity/LargeEssentiaGenerator.java | 512 - .../blocks/tileEntity/LargeEssentiaSmeltery.java | 590 - .../blocks/tileEntity/LargeFusionComputer1.java | 170 - .../blocks/tileEntity/LargeFusionComputer2.java | 171 - .../blocks/tileEntity/LargeFusionComputer3.java | 172 - .../blocks/tileEntity/LargeFusionComputer4.java | 227 - .../blocks/tileEntity/LargeFusionComputer5.java | 231 - .../tileEntity/MTEComponentAssemblyLine.java | 416 + .../blocks/tileEntity/MTECoolantTower.java | 212 + .../blocks/tileEntity/MTEEssentiaHatch.java | 244 + .../blocks/tileEntity/MTEEssentiaOutputHatch.java | 179 + .../tileEntity/MTEEssentiaOutputHatchME.java | 150 + .../blocks/tileEntity/MTEExtremeHeatExchanger.java | 420 + .../blocks/tileEntity/MTEFuelRefineFactory.java | 376 + .../tileEntity/MTELargeEssentiaGenerator.java | 512 + .../tileEntity/MTELargeEssentiaSmeltery.java | 588 + .../blocks/tileEntity/MTELargeFusionComputer1.java | 169 + .../blocks/tileEntity/MTELargeFusionComputer2.java | 170 + .../blocks/tileEntity/MTELargeFusionComputer3.java | 171 + .../blocks/tileEntity/MTELargeFusionComputer4.java | 226 + .../blocks/tileEntity/MTELargeFusionComputer5.java | 230 + .../blocks/tileEntity/MTEMultiNqGenerator.java | 466 + .../blocks/tileEntity/MTENeutronActivator.java | 516 + .../blocks/tileEntity/MTEPreciseAssembler.java | 529 + .../tileEntity/MTESupercriticalFluidTurbine.java | 186 + .../tileEntity/MTEUniversalChemicalFuelEngine.java | 389 + .../blocks/tileEntity/MTEYottaFluidTank.java | 729 + .../blocks/tileEntity/MultiNqGenerator.java | 468 - .../blocks/tileEntity/NeutronActivator.java | 515 - .../blocks/tileEntity/PreciseAssembler.java | 529 - .../tileEntity/SupercriticalFluidTurbine.java | 186 - .../tileEntity/UniversalChemicalFuelEngine.java | 390 - .../blocks/tileEntity/YottaFluidTank.java | 731 - .../base/GT_MetaTileEntity_LargeTurbineBase.java | 345 - ...GT_MetaTileEntity_TooltipMultiBlockBase_EM.java | 62 - .../tileEntity/base/LargeFusionComputer.java | 747 - .../tileEntity/base/LargeFusionComputerPP.java | 53 - .../tileEntity/base/MTELargeFusionComputer.java | 748 + .../tileEntity/base/MTELargeFusionComputerPP.java | 52 + .../tileEntity/base/MTELargeTurbineBase.java | 341 + .../base/MTETooltipMultiBlockBaseEM.java | 60 + .../goodgenerator/client/GUI/GGUITextures.java | 22 + .../goodgenerator/client/GUI/GG_UITextures.java | 22 - .../client/render/BlockRenderHandler.java | 6 +- .../java/goodgenerator/crossmod/nei/NEIConfig.java | 38 + .../goodgenerator/crossmod/nei/NEI_Config.java | 38 - .../crossmod/thaumcraft/Research.java | 443 +- .../java/goodgenerator/items/DepletedFuelRod.java | 54 - src/main/java/goodgenerator/items/FuelRod.java | 215 - src/main/java/goodgenerator/items/GGItem.java | 127 + .../java/goodgenerator/items/GGItemBlocks.java | 105 + src/main/java/goodgenerator/items/GGMaterial.java | 1526 +++ .../goodgenerator/items/ItemDepletedFuelRod.java | 54 + src/main/java/goodgenerator/items/ItemFuelRod.java | 216 + .../java/goodgenerator/items/MyItemBlocks.java | 105 - src/main/java/goodgenerator/items/MyItems.java | 127 - src/main/java/goodgenerator/items/MyMaterial.java | 1527 --- .../java/goodgenerator/items/RadioactiveItem.java | 6 +- .../loader/ComponentAssemblyLineMiscRecipes.java | 207 +- .../loader/ComponentAssemblyLineRecipeLoader.java | 84 +- .../goodgenerator/loader/FuelRecipeLoader.java | 163 +- .../java/goodgenerator/loader/FuelRodLoader.java | 52 +- src/main/java/goodgenerator/loader/Loaders.java | 295 +- .../loader/NaquadahReworkRecipeLoader.java | 497 +- .../loader/NeutronActivatorLoader.java | 34 +- .../java/goodgenerator/loader/RecipeLoader.java | 1057 +- .../java/goodgenerator/loader/RecipeLoader2.java | 1879 +++ .../java/goodgenerator/loader/RecipeLoader_02.java | 1878 --- .../java/goodgenerator/main/GGConfigLoader.java | 118 + .../java/goodgenerator/main/GG_Config_Loader.java | 118 - .../java/goodgenerator/main/GoodGenerator.java | 9 +- .../java/goodgenerator/network/MessageMTEBase.java | 3 +- .../java/goodgenerator/util/CrackRecipeAdder.java | 211 +- src/main/java/goodgenerator/util/ItemRefer.java | 4 +- src/main/java/goodgenerator/util/MaterialFix.java | 129 +- src/main/java/goodgenerator/util/StackUtils.java | 38 +- .../java/goodgenerator/util/StructureHelper.java | 10 +- src/main/java/gregtech/GTMod.java | 886 ++ src/main/java/gregtech/GT_Mod.java | 886 -- src/main/java/gregtech/api/GregTechAPI.java | 982 ++ src/main/java/gregtech/api/GregTech_API.java | 999 -- .../api/damagesources/GTDamageSources.java | 119 + .../api/damagesources/GT_DamageSources.java | 119 - .../api/enchants/EnchantmentEnderDamage.java | 72 + .../gregtech/api/enchants/EnchantmentHazmat.java | 56 + .../api/enchants/EnchantmentRadioactivity.java | 68 + .../api/enchants/Enchantment_EnderDamage.java | 72 - .../gregtech/api/enchants/Enchantment_Hazmat.java | 56 - .../api/enchants/Enchantment_Radioactivity.java | 68 - src/main/java/gregtech/api/enums/Dyes.java | 8 +- .../gregtech/api/enums/GTNH_ExtraMaterials.java | 626 - src/main/java/gregtech/api/enums/GTStones.java | 88 +- src/main/java/gregtech/api/enums/GTValues.java | 721 + .../java/gregtech/api/enums/GTVoltageIndex.java | 22 - .../java/gregtech/api/enums/GT_HatchElement.java | 112 - src/main/java/gregtech/api/enums/GT_Values.java | 720 - src/main/java/gregtech/api/enums/HatchElement.java | 110 + .../java/gregtech/api/enums/HeatingCoilLevel.java | 4 +- src/main/java/gregtech/api/enums/ItemList.java | 72 +- .../java/gregtech/api/enums/MaterialBuilder.java | 4 +- src/main/java/gregtech/api/enums/Materials.java | 142 +- .../java/gregtech/api/enums/MaterialsBotania.java | 46 +- .../java/gregtech/api/enums/MaterialsGTNH.java | 626 + .../java/gregtech/api/enums/MaterialsKevlar.java | 64 +- .../java/gregtech/api/enums/MaterialsUEVplus.java | 20 +- .../java/gregtech/api/enums/MetaTileEntityIDs.java | 8 +- src/main/java/gregtech/api/enums/OreMixes.java | 16 +- src/main/java/gregtech/api/enums/OrePrefixes.java | 66 +- src/main/java/gregtech/api/enums/SmallOres.java | 72 +- .../java/gregtech/api/enums/SoundResource.java | 4 +- src/main/java/gregtech/api/enums/TAE.java | 30 +- src/main/java/gregtech/api/enums/TCAspects.java | 112 + src/main/java/gregtech/api/enums/TC_Aspects.java | 112 - src/main/java/gregtech/api/enums/Textures.java | 32 +- src/main/java/gregtech/api/enums/Tier.java | 2 +- src/main/java/gregtech/api/enums/TierEU.java | 62 +- src/main/java/gregtech/api/enums/VoidingMode.java | 11 +- src/main/java/gregtech/api/enums/VoltageIndex.java | 22 + src/main/java/gregtech/api/fluid/FluidTankGT.java | 485 - .../java/gregtech/api/fluid/GTFluidFactory.java | 90 + src/main/java/gregtech/api/fluid/GTFluidTank.java | 485 + .../java/gregtech/api/fluid/GT_FluidFactory.java | 90 - .../java/gregtech/api/graphs/GenerateNodeMap.java | 2 +- .../gregtech/api/graphs/GenerateNodeMapPower.java | 9 +- .../api/graphs/consumers/NodeEnergyReceiver.java | 24 +- .../gregtech/api/graphs/paths/PowerNodePath.java | 14 +- .../java/gregtech/api/gui/GT_GUIColorOverride.java | 93 - .../java/gregtech/api/gui/GUIColorOverride.java | 93 + .../api/gui/modularui/CoverUIBuildContext.java | 74 + .../java/gregtech/api/gui/modularui/GTUIInfos.java | 188 + .../gregtech/api/gui/modularui/GTUITextures.java | 542 + .../api/gui/modularui/GT_CoverUIBuildContext.java | 74 - .../gregtech/api/gui/modularui/GT_UIInfos.java | 189 - .../gregtech/api/gui/modularui/GT_UITextures.java | 542 - .../gregtech/api/gui/modularui/GUITextureSet.java | 31 +- .../api/gui/widgets/CoverTickRateButton.java | 82 + .../api/gui/widgets/GT_CoverTickRateButton.java | 82 - .../gui/widgets/GT_LockedWhileActiveButton.java | 90 - .../api/gui/widgets/GT_PhantomItemButton.java | 92 - .../api/gui/widgets/LockedWhileActiveButton.java | 90 + .../api/gui/widgets/PhantomItemButton.java | 92 + .../api/interfaces/ICleanroomReceiver.java | 4 +- .../interfaces/IConfigurationCircuitSupport.java | 4 +- .../java/gregtech/api/interfaces/IFoodStat.java | 14 +- .../interfaces/IGT_ItemWithMaterialRenderer.java | 10 +- .../gregtech/api/interfaces/IHatchElement.java | 29 +- .../gregtech/api/interfaces/IIconContainer.java | 2 +- .../gregtech/api/interfaces/IItemBehaviour.java | 4 +- .../api/interfaces/INetworkUpdatableItem.java | 4 +- .../java/gregtech/api/interfaces/IRecipeMap.java | 18 +- .../api/interfaces/IRedstoneCircuitBlock.java | 4 +- .../java/gregtech/api/interfaces/IToolStats.java | 4 +- .../gregtech/api/interfaces/fluid/IGTFluid.java | 14 + .../api/interfaces/fluid/IGTFluidBuilder.java | 96 + .../api/interfaces/fluid/IGTRegisteredFluid.java | 60 + .../gregtech/api/interfaces/fluid/IGT_Fluid.java | 14 - .../api/interfaces/fluid/IGT_FluidBuilder.java | 96 - .../api/interfaces/fluid/IGT_RegisteredFluid.java | 60 - .../api/interfaces/internal/IGTCraftingRecipe.java | 8 + .../gregtech/api/interfaces/internal/IGTMod.java | 50 + .../api/interfaces/internal/IGTRecipeAdder.java | 8 + .../interfaces/internal/IGT_CraftingRecipe.java | 8 - .../gregtech/api/interfaces/internal/IGT_Mod.java | 50 - .../api/interfaces/internal/IGT_RecipeAdder.java | 8 - .../api/interfaces/internal/IThaumcraftCompat.java | 8 +- .../interfaces/metatileentity/IMetaTileEntity.java | 8 +- .../modularui/ControllerWithOptionalFeatures.java | 393 - .../modularui/IControllerWithOptionalFeatures.java | 393 + .../api/interfaces/modularui/IGetTitleColor.java | 4 +- .../interfaces/tileentity/IColoredTileEntity.java | 5 +- .../api/interfaces/tileentity/ICoverable.java | 8 +- .../interfaces/tileentity/IEnergyConnected.java | 14 +- .../interfaces/tileentity/IGregTechTileEntity.java | 4 +- .../gregtech/api/items/BlockLongDistancePipe.java | 125 + .../java/gregtech/api/items/GTGenericBlock.java | 22 + .../java/gregtech/api/items/GTGenericItem.java | 162 + .../api/items/GT_Block_LongDistancePipe.java | 125 - .../gregtech/api/items/GT_BreederCell_Item.java | 153 - .../gregtech/api/items/GT_CoolantCellIC_Item.java | 67 - .../gregtech/api/items/GT_CoolantCell_Item.java | 82 - .../gregtech/api/items/GT_EnergyArmor_Item.java | 332 - .../java/gregtech/api/items/GT_Generic_Block.java | 22 - .../java/gregtech/api/items/GT_Generic_Item.java | 162 - .../java/gregtech/api/items/GT_MetaBase_Item.java | 622 - .../gregtech/api/items/GT_MetaGenerated_Item.java | 415 - .../api/items/GT_MetaGenerated_Item_X01.java | 213 - .../api/items/GT_MetaGenerated_Item_X32.java | 225 - .../gregtech/api/items/GT_MetaGenerated_Tool.java | 1013 -- .../api/items/GT_RadioactiveCellIC_Item.java | 219 - .../api/items/GT_RadioactiveCell_Item.java | 159 - src/main/java/gregtech/api/items/GT_Tool_Item.java | 41 - .../java/gregtech/api/items/ItemBreederCell.java | 153 + .../java/gregtech/api/items/ItemCoolantCell.java | 82 + .../java/gregtech/api/items/ItemCoolantCellIC.java | 67 + .../java/gregtech/api/items/ItemEnergyArmor.java | 331 + .../gregtech/api/items/ItemRadioactiveCell.java | 159 + .../gregtech/api/items/ItemRadioactiveCellIC.java | 219 + src/main/java/gregtech/api/items/ItemTool.java | 41 + src/main/java/gregtech/api/items/MetaBaseItem.java | 622 + .../java/gregtech/api/items/MetaGeneratedItem.java | 415 + .../gregtech/api/items/MetaGeneratedItemX01.java | 210 + .../gregtech/api/items/MetaGeneratedItemX32.java | 225 + .../java/gregtech/api/items/MetaGeneratedTool.java | 1013 ++ .../api/logic/AbstractProcessingLogic.java | 24 +- .../gregtech/api/logic/ItemInventoryLogic.java | 8 +- .../gregtech/api/logic/MuTEProcessingLogic.java | 24 +- src/main/java/gregtech/api/logic/PowerLogic.java | 10 +- .../java/gregtech/api/logic/ProcessingLogic.java | 24 +- .../api/metatileentity/BaseMetaPipeEntity.java | 130 +- .../api/metatileentity/BaseMetaTileEntity.java | 279 +- .../api/metatileentity/BaseTileEntity.java | 42 +- .../api/metatileentity/CommonMetaTileEntity.java | 30 +- .../api/metatileentity/CoverableTileEntity.java | 84 +- .../api/metatileentity/MetaPipeEntity.java | 62 +- .../api/metatileentity/MetaTileEntity.java | 83 +- .../api/metatileentity/TileIC2EnergySink.java | 10 +- .../implementations/GT_MetaPipeEntity_Cable.java | 649 - .../implementations/GT_MetaPipeEntity_Fluid.java | 979 -- .../implementations/GT_MetaPipeEntity_Frame.java | 119 - .../implementations/GT_MetaPipeEntity_Item.java | 530 - .../GT_MetaTileEntity_BasicBatteryBuffer.java | 436 - .../GT_MetaTileEntity_BasicGenerator.java | 339 - .../GT_MetaTileEntity_BasicHull.java | 175 - .../GT_MetaTileEntity_BasicHull_NonElectric.java | 78 - .../GT_MetaTileEntity_BasicMachine.java | 1563 --- .../GT_MetaTileEntity_BasicMachine_Bronze.java | 387 - .../GT_MetaTileEntity_BasicMachine_GT_Recipe.java | 818 -- .../GT_MetaTileEntity_BasicMachine_Steel.java | 150 - .../GT_MetaTileEntity_BasicTank.java | 331 - .../implementations/GT_MetaTileEntity_Buffer.java | 563 - .../GT_MetaTileEntity_CubicMultiBlockBase.java | 141 - .../GT_MetaTileEntity_EnhancedMultiBlockBase.java | 318 - ...MetaTileEntity_ExtendedPowerMultiBlockBase.java | 242 - .../GT_MetaTileEntity_FilterBase.java | 106 - .../implementations/GT_MetaTileEntity_Hatch.java | 252 - .../GT_MetaTileEntity_Hatch_DataAccess.java | 170 - .../GT_MetaTileEntity_Hatch_Dynamo.java | 110 - .../GT_MetaTileEntity_Hatch_Energy.java | 125 - .../GT_MetaTileEntity_Hatch_Input.java | 196 - .../GT_MetaTileEntity_Hatch_InputBus.java | 318 - .../GT_MetaTileEntity_Hatch_Maintenance.java | 459 - .../GT_MetaTileEntity_Hatch_Muffler.java | 208 - .../GT_MetaTileEntity_Hatch_MultiInput.java | 300 - .../GT_MetaTileEntity_Hatch_Output.java | 497 - .../GT_MetaTileEntity_Hatch_OutputBus.java | 323 - ...GT_MetaTileEntity_Hatch_QuadrupleHumongous.java | 27 - .../GT_MetaTileEntity_MagHatch.java | 103 - .../GT_MetaTileEntity_MultiBlockBase.java | 2754 ---- .../GT_MetaTileEntity_SpecialFilter.java | 134 - .../GT_MetaTileEntity_TieredMachineBlock.java | 119 - .../GT_MetaTileEntity_TooltipMultiBlockBase.java | 57 - .../GT_MetaTileEntity_Transformer.java | 326 - .../GT_MetaTileEntity_WetTransformer.java | 93 - .../GT_MetaTileEntity_Wireless_Dynamo.java | 146 - .../GT_MetaTileEntity_Wireless_Hatch.java | 168 - .../implementations/MTEBasicBatteryBuffer.java | 435 + .../implementations/MTEBasicGenerator.java | 338 + .../implementations/MTEBasicHull.java | 173 + .../implementations/MTEBasicHullNonElectric.java | 75 + .../implementations/MTEBasicMachine.java | 1563 +++ .../implementations/MTEBasicMachineBronze.java | 387 + .../implementations/MTEBasicMachineSteel.java | 149 + .../implementations/MTEBasicMachineWithRecipe.java | 817 ++ .../implementations/MTEBasicTank.java | 328 + .../metatileentity/implementations/MTEBuffer.java | 559 + .../metatileentity/implementations/MTECable.java | 649 + .../implementations/MTECubicMultiBlockBase.java | 141 + .../implementations/MTEEnhancedMultiBlockBase.java | 318 + .../MTEExtendedPowerMultiBlockBase.java | 242 + .../implementations/MTEFilterBase.java | 104 + .../metatileentity/implementations/MTEFluid.java | 971 ++ .../metatileentity/implementations/MTEFrame.java | 119 + .../metatileentity/implementations/MTEHatch.java | 250 + .../implementations/MTEHatchDataAccess.java | 169 + .../implementations/MTEHatchDynamo.java | 109 + .../implementations/MTEHatchEnergy.java | 123 + .../implementations/MTEHatchInput.java | 192 + .../implementations/MTEHatchInputBus.java | 315 + .../implementations/MTEHatchMagnet.java | 102 + .../implementations/MTEHatchMaintenance.java | 455 + .../implementations/MTEHatchMuffler.java | 208 + .../implementations/MTEHatchMultiInput.java | 299 + .../implementations/MTEHatchOutput.java | 493 + .../implementations/MTEHatchOutputBus.java | 320 + .../MTEHatchQuadrupleHumongous.java | 27 + .../metatileentity/implementations/MTEItem.java | 523 + .../implementations/MTEMultiBlockBase.java | 2742 ++++ .../implementations/MTESpecialFilter.java | 132 + .../implementations/MTETieredMachineBlock.java | 119 + .../implementations/MTETooltipMultiBlockBase.java | 56 + .../implementations/MTETransformer.java | 325 + .../implementations/MTEWetTransformer.java | 92 + .../implementations/MTEWirelessDynamo.java | 144 + .../implementations/MTEWirelessEnergy.java | 167 + .../api/multitileentity/MultiTileEntityBlock.java | 35 +- .../MultiTileEntityClassContainer.java | 12 +- .../api/multitileentity/MultiTileEntityItem.java | 6 +- .../multitileentity/MultiTileEntityRegistry.java | 27 +- .../api/multitileentity/base/MultiTileEntity.java | 126 +- .../base/NonTickableMultiTileEntity.java | 6 +- .../base/TickableMultiTileEntity.java | 18 +- .../multitileentity/enums/GT_MultiTileCasing.java | 4 +- .../enums/GT_MultiTileComponentCasing.java | 4 +- .../multitileentity/enums/GT_MultiTileMachine.java | 4 +- .../enums/GT_MultiTileUpgradeCasing.java | 4 +- .../interfaces/SyncedMultiTileEntity.java | 14 +- .../machine/MultiTileBasicMachine.java | 50 +- .../multiblock/base/ComplexParallelController.java | 10 +- .../multiblock/base/Controller.java | 44 +- .../multiblock/base/MultiBlockPart.java | 12 +- .../multiblock/casing/FunctionalCasing.java | 4 +- .../multiblock/casing/UpgradeCasing.java | 4 +- src/main/java/gregtech/api/net/GTPacket.java | 59 + .../java/gregtech/api/net/GTPacketBlockEvent.java | 63 + .../gregtech/api/net/GTPacketClientPreference.java | 58 + .../gregtech/api/net/GTPacketMultiTileEntity.java | 254 + .../gregtech/api/net/GTPacketMusicSystemData.java | 58 + src/main/java/gregtech/api/net/GTPacketNew.java | 30 + .../java/gregtech/api/net/GTPacketPollution.java | 47 + .../gregtech/api/net/GTPacketRequestCoverData.java | 113 + .../gregtech/api/net/GTPacketSendCoverData.java | 107 + .../api/net/GTPacketSendOregenPattern.java | 56 + .../api/net/GTPacketSetConfigurationCircuit.java | 110 + src/main/java/gregtech/api/net/GTPacketSound.java | 73 + .../java/gregtech/api/net/GTPacketTileEntity.java | 157 + .../gregtech/api/net/GTPacketToolSwitchMode.java | 52 + src/main/java/gregtech/api/net/GTPacketTypes.java | 64 + .../java/gregtech/api/net/GTPacketUpdateItem.java | 64 + src/main/java/gregtech/api/net/GT_Packet.java | 59 - src/main/java/gregtech/api/net/GT_PacketTypes.java | 64 - .../gregtech/api/net/GT_Packet_Block_Event.java | 63 - .../api/net/GT_Packet_ClientPreference.java | 62 - .../api/net/GT_Packet_MultiTileEntity.java | 254 - .../api/net/GT_Packet_MusicSystemData.java | 58 - src/main/java/gregtech/api/net/GT_Packet_New.java | 30 - .../java/gregtech/api/net/GT_Packet_Pollution.java | 47 - .../api/net/GT_Packet_RequestCoverData.java | 113 - .../gregtech/api/net/GT_Packet_SendCoverData.java | 107 - .../api/net/GT_Packet_SendOregenPattern.java | 56 - .../api/net/GT_Packet_SetConfigurationCircuit.java | 110 - .../java/gregtech/api/net/GT_Packet_Sound.java | 73 - .../gregtech/api/net/GT_Packet_TileEntity.java | 157 - .../gregtech/api/net/GT_Packet_ToolSwitchMode.java | 52 - .../gregtech/api/net/GT_Packet_UpdateItem.java | 64 - .../java/gregtech/api/net/IGT_NetworkHandler.java | 10 +- .../api/objects/AE2DigitalChestHandler.java | 6 +- .../java/gregtech/api/objects/GTArrayList.java | 73 + .../java/gregtech/api/objects/GTChunkManager.java | 204 + .../gregtech/api/objects/GTCopiedBlockTexture.java | 36 + .../java/gregtech/api/objects/GTCoverDefault.java | 81 + .../java/gregtech/api/objects/GTCoverNone.java | 237 + src/main/java/gregtech/api/objects/GTFluid.java | 36 + src/main/java/gregtech/api/objects/GTHashSet.java | 91 + .../java/gregtech/api/objects/GTItemStack.java | 107 + .../java/gregtech/api/objects/GTItemStack2.java | 41 + .../java/gregtech/api/objects/GTMultiTexture.java | 27 + .../gregtech/api/objects/GTRenderedTexture.java | 33 + .../java/gregtech/api/objects/GTSidedTexture.java | 48 + .../gregtech/api/objects/GTStdRenderedTexture.java | 46 + .../java/gregtech/api/objects/GTUODimension.java | 54 + .../gregtech/api/objects/GTUODimensionList.java | 648 + src/main/java/gregtech/api/objects/GTUOFluid.java | 69 + .../java/gregtech/api/objects/GT_ArrayList.java | 73 - .../java/gregtech/api/objects/GT_ChunkManager.java | 204 - .../api/objects/GT_CopiedBlockTexture.java | 35 - .../gregtech/api/objects/GT_Cover_Default.java | 81 - .../java/gregtech/api/objects/GT_Cover_None.java | 237 - src/main/java/gregtech/api/objects/GT_Fluid.java | 36 - src/main/java/gregtech/api/objects/GT_HashSet.java | 91 - .../java/gregtech/api/objects/GT_ItemStack.java | 107 - .../java/gregtech/api/objects/GT_ItemStack2.java | 41 - .../java/gregtech/api/objects/GT_MultiTexture.java | 26 - .../gregtech/api/objects/GT_RenderedTexture.java | 33 - .../java/gregtech/api/objects/GT_SidedTexture.java | 48 - .../api/objects/GT_StdRenderedTexture.java | 46 - .../java/gregtech/api/objects/GT_UO_Dimension.java | 54 - .../gregtech/api/objects/GT_UO_DimensionList.java | 648 - .../java/gregtech/api/objects/GT_UO_Fluid.java | 69 - src/main/java/gregtech/api/objects/ItemData.java | 2 +- .../java/gregtech/api/objects/MaterialStack.java | 4 +- .../overclockdescriber/EUNoOverclockDescriber.java | 38 +- .../overclockdescriber/EUOverclockDescriber.java | 34 +- .../FusionOverclockDescriber.java | 16 +- .../overclockdescriber/OverclockDescriber.java | 36 +- .../SteamOverclockDescriber.java | 20 +- .../api/recipe/BasicUIPropertiesBuilder.java | 4 +- .../java/gregtech/api/recipe/FindRecipeQuery.java | 18 +- .../gregtech/api/recipe/NEIRecipeProperties.java | 10 +- .../api/recipe/NEIRecipePropertiesBuilder.java | 6 +- src/main/java/gregtech/api/recipe/RecipeMap.java | 32 +- .../java/gregtech/api/recipe/RecipeMapBackend.java | 104 +- .../api/recipe/RecipeMapBackendProperties.java | 12 +- .../recipe/RecipeMapBackendPropertiesBuilder.java | 26 +- .../java/gregtech/api/recipe/RecipeMapBuilder.java | 30 +- .../gregtech/api/recipe/RecipeMapFrontend.java | 52 +- src/main/java/gregtech/api/recipe/RecipeMaps.java | 406 +- .../api/recipe/check/ResultInsufficientHeat.java | 4 +- .../check/ResultInsufficientMachineTier.java | 4 +- .../api/recipe/check/ResultInsufficientPower.java | 6 +- .../check/ResultInsufficientStartupPower.java | 4 +- .../ResultInsufficientStartupPowerBigInt.java | 2 +- .../api/recipe/check/SingleRecipeCheck.java | 59 +- .../gregtech/api/recipe/maps/AssemblerBackend.java | 4 +- .../api/recipe/maps/AssemblyLineFrontend.java | 8 +- .../api/recipe/maps/FluidCannerBackend.java | 24 +- .../api/recipe/maps/FormingPressBackend.java | 18 +- .../java/gregtech/api/recipe/maps/FuelBackend.java | 26 +- .../gregtech/api/recipe/maps/FurnaceBackend.java | 20 +- .../api/recipe/maps/LargeBoilerFuelBackend.java | 22 +- .../gregtech/api/recipe/maps/MicrowaveBackend.java | 83 +- .../gregtech/api/recipe/maps/NonGTBackend.java | 8 +- .../api/recipe/maps/OilCrackerBackend.java | 4 +- .../gregtech/api/recipe/maps/PrinterBackend.java | 32 +- .../maps/PurificationUnitClarifierFrontend.java | 12 +- .../maps/PurificationUnitFlocculatorFrontend.java | 27 +- .../recipe/maps/PurificationUnitLaserFrontend.java | 10 +- .../maps/PurificationUnitOzonationFrontend.java | 4 +- .../PurificationUnitParticleExtractorFrontend.java | 4 +- .../maps/PurificationUnitPhAdjustmentFrontend.java | 23 +- .../maps/PurificationUnitPlasmaHeaterFrontend.java | 14 +- .../gregtech/api/recipe/maps/RecyclerBackend.java | 22 +- .../api/recipe/maps/ReplicatorBackend.java | 36 +- .../api/recipe/maps/SpaceProjectFrontend.java | 18 +- .../maps/TranscendentPlasmaMixerFrontend.java | 8 +- .../api/recipe/maps/UnpackagerBackend.java | 12 +- .../api/recipe/metadata/CompressionTierKey.java | 2 +- .../api/recipe/metadata/PCBFactoryTierKey.java | 2 +- .../api/recipe/metadata/PCBFactoryUpgradeKey.java | 2 +- .../api/registries/LHECoolantRegistry.java | 8 +- .../java/gregtech/api/render/TextureFactory.java | 4 +- .../gregtech/api/task/tasks/PollutionTask.java | 4 +- .../api/threads/GT_Runnable_Cable_Update.java | 87 - .../threads/GT_Runnable_MachineBlockUpdate.java | 184 - .../gregtech/api/threads/GT_Runnable_Sound.java | 41 - .../gregtech/api/threads/RunnableCableUpdate.java | 87 + .../api/threads/RunnableMachineUpdate.java | 184 + .../java/gregtech/api/threads/RunnableSound.java | 41 + .../java/gregtech/api/util/AssemblyLineServer.java | 297 + .../java/gregtech/api/util/AssemblyLineUtils.java | 561 + .../gregtech/api/util/BlastFurnaceGasStat.java | 5 +- .../java/gregtech/api/util/CircuitryBehavior.java | 212 + .../gregtech/api/util/ColorsMetadataSection.java | 2 +- .../api/util/ColorsMetadataSectionSerializer.java | 12 +- src/main/java/gregtech/api/util/CoverBehavior.java | 402 + .../java/gregtech/api/util/CoverBehaviorBase.java | 839 ++ .../gregtech/api/util/ExoticEnergyInputHelper.java | 103 + .../java/gregtech/api/util/FishPondFakeRecipe.java | 8 +- .../java/gregtech/api/util/GTApiaryModifier.java | 24 + .../java/gregtech/api/util/GTApiaryUpgrade.java | 224 + src/main/java/gregtech/api/util/GTBaseCrop.java | 311 + src/main/java/gregtech/api/util/GTBlockMap.java | 134 + src/main/java/gregtech/api/util/GTBlockSet.java | 39 + src/main/java/gregtech/api/util/GTCLSCompat.java | 157 + .../gregtech/api/util/GTChunkAssociatedData.java | 494 + .../java/gregtech/api/util/GTClientPreference.java | 43 + src/main/java/gregtech/api/util/GTConfig.java | 162 + src/main/java/gregtech/api/util/GTCreativeTab.java | 26 + src/main/java/gregtech/api/util/GTFoodStat.java | 122 + .../java/gregtech/api/util/GTForestryCompat.java | 193 + src/main/java/gregtech/api/util/GTGCCompat.java | 52 + .../java/gregtech/api/util/GTIBoxableWrapper.java | 13 + .../api/util/GTItsNotMyFaultException.java | 18 + .../java/gregtech/api/util/GTLanguageManager.java | 603 + src/main/java/gregtech/api/util/GTLog.java | 45 + src/main/java/gregtech/api/util/GTModHandler.java | 2435 ++++ src/main/java/gregtech/api/util/GTMusicSystem.java | 667 + .../gregtech/api/util/GTOreDictUnificator.java | 578 + src/main/java/gregtech/api/util/GTPlayedSound.java | 31 + src/main/java/gregtech/api/util/GTRecipe.java | 1366 ++ .../java/gregtech/api/util/GTRecipeBuilder.java | 946 ++ .../java/gregtech/api/util/GTRecipeConstants.java | 691 + .../java/gregtech/api/util/GTRecipeMapUtil.java | 198 + .../gregtech/api/util/GTRecipeRegistrator.java | 872 ++ .../java/gregtech/api/util/GTRenderingWorld.java | 195 + .../java/gregtech/api/util/GTShapedRecipe.java | 100 + .../java/gregtech/api/util/GTShapelessRecipe.java | 100 + .../gregtech/api/util/GTSpawnEventHandler.java | 81 + src/main/java/gregtech/api/util/GTStreamUtil.java | 44 + .../java/gregtech/api/util/GTStructureUtility.java | 616 + .../gregtech/api/util/GTToolHarvestHelper.java | 71 + .../java/gregtech/api/util/GTTooltipDataCache.java | 104 + src/main/java/gregtech/api/util/GTUtil.java | 344 + src/main/java/gregtech/api/util/GTUtility.java | 4852 +++++++ .../java/gregtech/api/util/GTUtilityClient.java | 52 + src/main/java/gregtech/api/util/GTWaila.java | 23 + .../java/gregtech/api/util/GT_ApiaryModifier.java | 24 - .../java/gregtech/api/util/GT_ApiaryUpgrade.java | 225 - .../gregtech/api/util/GT_AssemblyLineUtils.java | 559 - .../gregtech/api/util/GT_Assemblyline_Server.java | 297 - src/main/java/gregtech/api/util/GT_BaseCrop.java | 311 - src/main/java/gregtech/api/util/GT_BlockMap.java | 134 - src/main/java/gregtech/api/util/GT_BlockSet.java | 39 - src/main/java/gregtech/api/util/GT_CLS_Compat.java | 157 - .../gregtech/api/util/GT_ChunkAssociatedData.java | 494 - .../gregtech/api/util/GT_CircuitryBehavior.java | 212 - .../gregtech/api/util/GT_ClientPreference.java | 43 - src/main/java/gregtech/api/util/GT_Config.java | 162 - .../java/gregtech/api/util/GT_CoverBehavior.java | 402 - .../gregtech/api/util/GT_CoverBehaviorBase.java | 839 -- .../java/gregtech/api/util/GT_CreativeTab.java | 26 - .../api/util/GT_ExoticEnergyInputHelper.java | 114 - src/main/java/gregtech/api/util/GT_FoodStat.java | 122 - .../java/gregtech/api/util/GT_Forestry_Compat.java | 193 - src/main/java/gregtech/api/util/GT_GC_Compat.java | 52 - .../gregtech/api/util/GT_HatchElementBuilder.java | 547 - .../java/gregtech/api/util/GT_IBoxableWrapper.java | 13 - .../api/util/GT_ItsNotMyFaultException.java | 18 - .../gregtech/api/util/GT_JubilanceMegaApiary.java | 23 - .../java/gregtech/api/util/GT_LanguageManager.java | 603 - src/main/java/gregtech/api/util/GT_Log.java | 45 - src/main/java/gregtech/api/util/GT_ModHandler.java | 2437 ---- .../api/util/GT_Multiblock_Tooltip_Builder.java | 735 - .../java/gregtech/api/util/GT_MusicSystem.java | 667 - .../gregtech/api/util/GT_OreDictUnificator.java | 578 - .../gregtech/api/util/GT_OverclockCalculator.java | 621 - .../gregtech/api/util/GT_PCBFactoryManager.java | 25 - .../java/gregtech/api/util/GT_ParallelHelper.java | 713 - .../java/gregtech/api/util/GT_PlayedSound.java | 31 - .../api/util/GT_ProcessingArray_Manager.java | 51 - src/main/java/gregtech/api/util/GT_Recipe.java | 1366 -- .../java/gregtech/api/util/GT_RecipeBuilder.java | 946 -- .../java/gregtech/api/util/GT_RecipeConstants.java | 692 - .../java/gregtech/api/util/GT_RecipeMapUtil.java | 198 - .../gregtech/api/util/GT_RecipeRegistrator.java | 872 -- .../java/gregtech/api/util/GT_RenderingWorld.java | 195 - .../java/gregtech/api/util/GT_Shaped_Recipe.java | 100 - .../gregtech/api/util/GT_Shapeless_Recipe.java | 100 - .../gregtech/api/util/GT_SpawnEventHandler.java | 81 - src/main/java/gregtech/api/util/GT_StreamUtil.java | 44 - .../gregtech/api/util/GT_StructureUtility.java | 618 - .../gregtech/api/util/GT_StructureUtilityMuTE.java | 8 +- .../gregtech/api/util/GT_ToolHarvestHelper.java | 71 - .../gregtech/api/util/GT_TooltipDataCache.java | 9 +- src/main/java/gregtech/api/util/GT_Util.java | 347 - src/main/java/gregtech/api/util/GT_Utility.java | 4859 ------- .../java/gregtech/api/util/GT_UtilityClient.java | 52 - src/main/java/gregtech/api/util/GT_Waila.java | 23 - .../gregtech/api/util/HatchElementBuilder.java | 546 + src/main/java/gregtech/api/util/IGTHatchAdder.java | 28 + .../java/gregtech/api/util/IGT_HatchAdder.java | 28 - .../gregtech/api/util/JubilanceMegaApiary.java | 23 + .../api/util/MultiblockTooltipBuilder.java | 735 + .../java/gregtech/api/util/OutputHatchWrapper.java | 6 +- .../gregtech/api/util/OverclockCalculator.java | 621 + .../java/gregtech/api/util/PCBFactoryManager.java | 25 + .../java/gregtech/api/util/ParallelHelper.java | 713 + .../gregtech/api/util/ProcessingArrayManager.java | 51 + .../gregtech/api/util/SemiFluidFuelHandler.java | 10 +- .../gregtech/api/util/VoidProtectionHelper.java | 2 +- .../java/gregtech/api/util/item/ItemHolder.java | 4 +- .../api/util/recipe/RecipeInputRequirements.java | 8 +- .../api/util/shutdown/ReasonOutOfFluid.java | 4 +- .../api/util/shutdown/ReasonOutOfItem.java | 2 +- .../api/util/shutdown/ReasonOutOfStuff.java | 2 +- .../api/util/shutdown/ShutDownReasonRegistry.java | 2 +- src/main/java/gregtech/api/world/GTWorldgen.java | 123 + src/main/java/gregtech/api/world/GT_Worldgen.java | 123 - src/main/java/gregtech/asm/GTCorePlugin.java | 17 +- .../java/gregtech/client/GTGUIClientConfig.java | 29 + src/main/java/gregtech/client/GTGuiFactory.java | 13 + src/main/java/gregtech/client/GTSoundLoop.java | 80 + .../java/gregtech/client/GTTooltipHandler.java | 195 + .../java/gregtech/client/GT_GUI_ClientConfig.java | 29 - src/main/java/gregtech/client/GT_GuiFactory.java | 13 - src/main/java/gregtech/client/GT_SoundLoop.java | 80 - .../java/gregtech/client/GT_TooltipHandler.java | 195 - src/main/java/gregtech/common/GTClient.java | 1073 ++ src/main/java/gregtech/common/GTDummyWorld.java | 138 + .../java/gregtech/common/GTIteratorRandom.java | 17 + src/main/java/gregtech/common/GTNetwork.java | 154 + .../gregtech/common/GTPlayerActivityLogger.java | 34 + src/main/java/gregtech/common/GTProxy.java | 2892 ++++ src/main/java/gregtech/common/GTServer.java | 36 + .../java/gregtech/common/GTThaumcraftCompat.java | 285 + .../java/gregtech/common/GTWorldgenerator.java | 686 + src/main/java/gregtech/common/GT_Client.java | 1073 -- src/main/java/gregtech/common/GT_DummyWorld.java | 138 - .../java/gregtech/common/GT_IteratorRandom.java | 17 - src/main/java/gregtech/common/GT_Network.java | 154 - .../gregtech/common/GT_PlayerActivityLogger.java | 34 - src/main/java/gregtech/common/GT_Pollution.java | 507 - src/main/java/gregtech/common/GT_Proxy.java | 2899 ---- src/main/java/gregtech/common/GT_RecipeAdder.java | 12 - src/main/java/gregtech/common/GT_Server.java | 36 - .../java/gregtech/common/GT_ThaumcraftCompat.java | 285 - .../java/gregtech/common/GT_UndergroundOil.java | 339 - .../gregtech/common/GT_Worldgen_GT_Ore_Layer.java | 442 - .../common/GT_Worldgen_GT_Ore_SmallPieces.java | 107 - .../java/gregtech/common/GT_Worldgen_Stone.java | 297 - .../java/gregtech/common/GT_Worldgenerator.java | 686 - src/main/java/gregtech/common/OreMixBuilder.java | 2 +- src/main/java/gregtech/common/Pollution.java | 507 + src/main/java/gregtech/common/RecipeAdder.java | 12 + src/main/java/gregtech/common/SmallOreBuilder.java | 2 +- src/main/java/gregtech/common/UndergroundOil.java | 339 + .../gregtech/common/WirelessComputationPacket.java | 2 +- .../java/gregtech/common/WorldgenGTOreLayer.java | 439 + .../gregtech/common/WorldgenGTOreSmallPieces.java | 107 + src/main/java/gregtech/common/WorldgenStone.java | 297 + .../gregtech/common/bees/GTAlleleBeeSpecies.java | 53 + .../java/gregtech/common/bees/GTAlleleHelper.java | 268 + .../java/gregtech/common/bees/GTBeeMutation.java | 85 + .../gregtech/common/bees/GT_AlleleBeeSpecies.java | 53 - .../java/gregtech/common/bees/GT_AlleleHelper.java | 268 - .../java/gregtech/common/bees/GT_Bee_Mutation.java | 85 - .../java/gregtech/common/blocks/BlockCasings1.java | 107 + .../gregtech/common/blocks/BlockCasings10.java | 76 + .../gregtech/common/blocks/BlockCasings11.java | 58 + .../java/gregtech/common/blocks/BlockCasings2.java | 102 + .../java/gregtech/common/blocks/BlockCasings3.java | 82 + .../java/gregtech/common/blocks/BlockCasings4.java | 239 + .../java/gregtech/common/blocks/BlockCasings5.java | 161 + .../java/gregtech/common/blocks/BlockCasings6.java | 94 + .../java/gregtech/common/blocks/BlockCasings8.java | 188 + .../java/gregtech/common/blocks/BlockCasings9.java | 96 + .../common/blocks/BlockCasingsAbstract.java | 143 + .../gregtech/common/blocks/BlockConcretes.java | 83 + .../common/blocks/BlockCyclotronCoils.java | 131 + .../java/gregtech/common/blocks/BlockDrone.java | 65 + .../java/gregtech/common/blocks/BlockFrameBox.java | 446 + .../java/gregtech/common/blocks/BlockGlass1.java | 107 + .../java/gregtech/common/blocks/BlockGranites.java | 77 + .../java/gregtech/common/blocks/BlockLaser.java | 104 + .../java/gregtech/common/blocks/BlockMachines.java | 703 + .../java/gregtech/common/blocks/BlockMetal.java | 68 + .../java/gregtech/common/blocks/BlockOres.java | 154 + .../gregtech/common/blocks/BlockOresAbstract.java | 324 + .../gregtech/common/blocks/BlockReinforced.java | 409 + .../java/gregtech/common/blocks/BlockStones.java | 62 + .../common/blocks/BlockStonesAbstract.java | 250 + .../java/gregtech/common/blocks/BlockStorage.java | 103 + .../common/blocks/BlockTintedIndustrialGlass.java | 98 + .../common/blocks/BlockWormholeRender.java | 75 + .../gregtech/common/blocks/GT_Block_Casings1.java | 108 - .../gregtech/common/blocks/GT_Block_Casings10.java | 76 - .../gregtech/common/blocks/GT_Block_Casings11.java | 58 - .../gregtech/common/blocks/GT_Block_Casings2.java | 102 - .../gregtech/common/blocks/GT_Block_Casings3.java | 82 - .../gregtech/common/blocks/GT_Block_Casings4.java | 239 - .../gregtech/common/blocks/GT_Block_Casings5.java | 161 - .../gregtech/common/blocks/GT_Block_Casings6.java | 94 - .../gregtech/common/blocks/GT_Block_Casings8.java | 188 - .../gregtech/common/blocks/GT_Block_Casings9.java | 96 - .../common/blocks/GT_Block_Casings_Abstract.java | 144 - .../gregtech/common/blocks/GT_Block_Concretes.java | 83 - .../gregtech/common/blocks/GT_Block_Drone.java | 65 - .../gregtech/common/blocks/GT_Block_FrameBox.java | 446 - .../gregtech/common/blocks/GT_Block_Glass1.java | 107 - .../gregtech/common/blocks/GT_Block_Granites.java | 77 - .../gregtech/common/blocks/GT_Block_Laser.java | 104 - .../gregtech/common/blocks/GT_Block_Machines.java | 703 - .../gregtech/common/blocks/GT_Block_Metal.java | 68 - .../java/gregtech/common/blocks/GT_Block_Ores.java | 154 - .../common/blocks/GT_Block_Ores_Abstract.java | 324 - .../common/blocks/GT_Block_Reinforced.java | 409 - .../gregtech/common/blocks/GT_Block_Stones.java | 62 - .../common/blocks/GT_Block_Stones_Abstract.java | 250 - .../gregtech/common/blocks/GT_Block_Storage.java | 103 - .../blocks/GT_Block_TintedIndustrialGlass.java | 98 - .../gregtech/common/blocks/GT_Cyclotron_Coils.java | 131 - .../common/blocks/GT_Cyclotron_Item_Casings.java | 10 - .../common/blocks/GT_Item_Block_Laser.java | 24 - .../gregtech/common/blocks/GT_Item_Casings1.java | 14 - .../gregtech/common/blocks/GT_Item_Casings10.java | 14 - .../gregtech/common/blocks/GT_Item_Casings11.java | 14 - .../gregtech/common/blocks/GT_Item_Casings2.java | 26 - .../gregtech/common/blocks/GT_Item_Casings3.java | 14 - .../gregtech/common/blocks/GT_Item_Casings4.java | 14 - .../gregtech/common/blocks/GT_Item_Casings5.java | 36 - .../gregtech/common/blocks/GT_Item_Casings6.java | 14 - .../gregtech/common/blocks/GT_Item_Casings8.java | 14 - .../gregtech/common/blocks/GT_Item_Casings9.java | 28 - .../common/blocks/GT_Item_Casings_Abstract.java | 63 - .../gregtech/common/blocks/GT_Item_Concretes.java | 25 - .../gregtech/common/blocks/GT_Item_Frames.java | 60 - .../gregtech/common/blocks/GT_Item_Glass1.java | 36 - .../gregtech/common/blocks/GT_Item_Granites.java | 10 - .../common/blocks/GT_Item_LongDistancePipe.java | 43 - .../gregtech/common/blocks/GT_Item_Machines.java | 430 - .../java/gregtech/common/blocks/GT_Item_Ores.java | 81 - .../common/blocks/GT_Item_Stones_Abstract.java | 42 - .../gregtech/common/blocks/GT_Item_Storage.java | 47 - .../blocks/GT_Item_TintedIndustrialGlass.java | 10 - .../common/blocks/GT_Material_Casings.java | 19 - .../common/blocks/GT_Material_Machines.java | 19 - .../common/blocks/GT_Material_Reinforced.java | 18 - .../gregtech/common/blocks/GT_Packet_Ores.java | 62 - .../gregtech/common/blocks/GT_TileEntity_Ores.java | 486 - .../common/blocks/GT_WormholeRenderBlock.java | 75 - .../gregtech/common/blocks/ItemBlockLaser.java | 24 + .../java/gregtech/common/blocks/ItemCasings1.java | 14 + .../java/gregtech/common/blocks/ItemCasings10.java | 14 + .../java/gregtech/common/blocks/ItemCasings11.java | 14 + .../java/gregtech/common/blocks/ItemCasings2.java | 26 + .../java/gregtech/common/blocks/ItemCasings3.java | 14 + .../java/gregtech/common/blocks/ItemCasings4.java | 14 + .../java/gregtech/common/blocks/ItemCasings5.java | 36 + .../java/gregtech/common/blocks/ItemCasings6.java | 14 + .../java/gregtech/common/blocks/ItemCasings8.java | 14 + .../java/gregtech/common/blocks/ItemCasings9.java | 28 + .../common/blocks/ItemCasingsAbstract.java | 63 + .../java/gregtech/common/blocks/ItemConcretes.java | 25 + .../common/blocks/ItemCyclotronCasings.java | 10 + .../java/gregtech/common/blocks/ItemFrames.java | 60 + .../java/gregtech/common/blocks/ItemGlass1.java | 36 + .../java/gregtech/common/blocks/ItemGranites.java | 10 + .../common/blocks/ItemLongDistancePipe.java | 43 + .../java/gregtech/common/blocks/ItemMachines.java | 430 + src/main/java/gregtech/common/blocks/ItemOres.java | 81 + .../gregtech/common/blocks/ItemStonesAbstract.java | 42 + .../java/gregtech/common/blocks/ItemStorage.java | 47 + .../common/blocks/ItemTintedIndustrialGlass.java | 10 + .../gregtech/common/blocks/MaterialCasings.java | 19 + .../gregtech/common/blocks/MaterialMachines.java | 19 + .../gregtech/common/blocks/MaterialReinforced.java | 18 + .../java/gregtech/common/blocks/PacketOres.java | 62 + .../gregtech/common/blocks/TileEntityOres.java | 482 + src/main/java/gregtech/common/covers/CoverArm.java | 431 + .../java/gregtech/common/covers/CoverChest.java | 274 + .../gregtech/common/covers/CoverControlsWork.java | 270 + .../java/gregtech/common/covers/CoverConveyor.java | 325 + .../java/gregtech/common/covers/CoverCrafting.java | 56 + .../java/gregtech/common/covers/CoverDoesWork.java | 252 + .../java/gregtech/common/covers/CoverDrain.java | 140 + .../java/gregtech/common/covers/CoverEUMeter.java | 408 + .../java/gregtech/common/covers/CoverFacadeAE.java | 31 + .../gregtech/common/covers/CoverFacadeBase.java | 396 + .../gregtech/common/covers/CoverFluidLimiter.java | 202 + .../common/covers/CoverFluidRegulator.java | 520 + .../common/covers/CoverFluidStorageMonitor.java | 507 + .../gregtech/common/covers/CoverFluidfilter.java | 414 + .../java/gregtech/common/covers/CoverInfo.java | 26 +- .../gregtech/common/covers/CoverItemFilter.java | 298 + .../gregtech/common/covers/CoverItemMeter.java | 384 + .../java/gregtech/common/covers/CoverLens.java | 28 + .../gregtech/common/covers/CoverLiquidMeter.java | 292 + .../common/covers/CoverMetricsTransmitter.java | 211 + .../common/covers/CoverNeedMaintainance.java | 297 + .../common/covers/CoverPlayerDetector.java | 202 + .../java/gregtech/common/covers/CoverPump.java | 331 + .../common/covers/CoverRedstoneConductor.java | 101 + .../covers/CoverRedstoneReceiverExternal.java | 41 + .../covers/CoverRedstoneReceiverInternal.java | 46 + .../common/covers/CoverRedstoneSignalizer.java | 98 + .../covers/CoverRedstoneTransmitterExternal.java | 53 + .../covers/CoverRedstoneTransmitterInternal.java | 43 + .../common/covers/CoverRedstoneWirelessBase.java | 222 + .../java/gregtech/common/covers/CoverScreen.java | 100 + .../java/gregtech/common/covers/CoverShutter.java | 195 + .../gregtech/common/covers/CoverSolarPanel.java | 139 + .../common/covers/CoverSteamRegulator.java | 18 + .../gregtech/common/covers/CoverSteamValve.java | 26 + .../java/gregtech/common/covers/CoverVent.java | 111 + .../java/gregtech/common/covers/GT_Cover_Arm.java | 431 - .../gregtech/common/covers/GT_Cover_Chest.java | 274 - .../common/covers/GT_Cover_ControlsWork.java | 270 - .../gregtech/common/covers/GT_Cover_Conveyor.java | 328 - .../gregtech/common/covers/GT_Cover_Crafting.java | 56 - .../gregtech/common/covers/GT_Cover_DoesWork.java | 252 - .../gregtech/common/covers/GT_Cover_Drain.java | 140 - .../gregtech/common/covers/GT_Cover_EUMeter.java | 410 - .../gregtech/common/covers/GT_Cover_FacadeAE.java | 31 - .../common/covers/GT_Cover_FacadeBase.java | 396 - .../common/covers/GT_Cover_FluidLimiter.java | 202 - .../common/covers/GT_Cover_FluidRegulator.java | 520 - .../covers/GT_Cover_FluidStorageMonitor.java | 507 - .../common/covers/GT_Cover_Fluidfilter.java | 417 - .../common/covers/GT_Cover_ItemFilter.java | 298 - .../gregtech/common/covers/GT_Cover_ItemMeter.java | 384 - .../java/gregtech/common/covers/GT_Cover_Lens.java | 28 - .../common/covers/GT_Cover_LiquidMeter.java | 292 - .../covers/GT_Cover_Metrics_Transmitter.java | 212 - .../common/covers/GT_Cover_NeedMaintainance.java | 298 - .../common/covers/GT_Cover_PlayerDetector.java | 202 - .../java/gregtech/common/covers/GT_Cover_Pump.java | 334 - .../common/covers/GT_Cover_RedstoneConductor.java | 101 - .../covers/GT_Cover_RedstoneReceiverExternal.java | 41 - .../covers/GT_Cover_RedstoneReceiverInternal.java | 46 - .../common/covers/GT_Cover_RedstoneSignalizer.java | 99 - .../GT_Cover_RedstoneTransmitterExternal.java | 53 - .../GT_Cover_RedstoneTransmitterInternal.java | 43 - .../covers/GT_Cover_RedstoneWirelessBase.java | 228 - .../gregtech/common/covers/GT_Cover_Screen.java | 100 - .../gregtech/common/covers/GT_Cover_Shutter.java | 196 - .../common/covers/GT_Cover_SolarPanel.java | 139 - .../common/covers/GT_Cover_SteamRegulator.java | 18 - .../common/covers/GT_Cover_SteamValve.java | 26 - .../java/gregtech/common/covers/GT_Cover_Vent.java | 111 - .../CoverAdvancedRedstoneReceiverBase.java | 202 + .../CoverAdvancedRedstoneReceiverExternal.java | 35 + .../CoverAdvancedRedstoneReceiverInternal.java | 42 + .../CoverAdvancedRedstoneTransmitterBase.java | 188 + .../CoverAdvancedRedstoneTransmitterExternal.java | 51 + .../CoverAdvancedRedstoneTransmitterInternal.java | 50 + .../CoverAdvancedWirelessRedstoneBase.java | 298 + .../redstone/CoverWirelessDoesWorkDetector.java | 244 + .../redstone/CoverWirelessFluidDetector.java | 186 + .../covers/redstone/CoverWirelessItemDetector.java | 262 + .../redstone/CoverWirelessMaintenanceDetector.java | 242 + .../GT_Cover_AdvancedRedstoneReceiverBase.java | 202 - .../GT_Cover_AdvancedRedstoneReceiverExternal.java | 35 - .../GT_Cover_AdvancedRedstoneReceiverInternal.java | 42 - .../GT_Cover_AdvancedRedstoneTransmitterBase.java | 188 - ..._Cover_AdvancedRedstoneTransmitterExternal.java | 51 - ..._Cover_AdvancedRedstoneTransmitterInternal.java | 50 - .../GT_Cover_AdvancedWirelessRedstoneBase.java | 298 - .../GT_Cover_WirelessDoesWorkDetector.java | 245 - .../redstone/GT_Cover_WirelessFluidDetector.java | 186 - .../redstone/GT_Cover_WirelessItemDetector.java | 262 - .../GT_Cover_WirelessMaintenanceDetector.java | 242 - .../common/entities/EntityFXPollution.java | 59 + .../common/entities/GT_EntityFXPollution.java | 59 - src/main/java/gregtech/common/fluid/GTFluid.java | 209 + .../java/gregtech/common/fluid/GTFluidBuilder.java | 146 + src/main/java/gregtech/common/fluid/GT_Fluid.java | 209 - .../gregtech/common/fluid/GT_FluidBuilder.java | 146 - .../gregtech/common/gui/MachineGUIProvider.java | 78 +- .../modularui/uifactory/SelectItemUIFactory.java | 20 +- .../modularui/widget/CoverCycleButtonWidget.java | 10 +- .../widget/CoverDataControllerWidget.java | 18 +- .../widget/CoverDataFollowerCycleButtonWidget.java | 39 + .../widget/CoverDataFollowerNumericWidget.java | 60 + .../widget/CoverDataFollowerSlotWidget.java | 101 + .../widget/CoverDataFollowerTextFieldWidget.java | 134 + .../CoverDataFollowerToggleButtonWidget.java | 86 + .../CoverDataFollower_CycleButtonWidget.java | 39 - .../widget/CoverDataFollower_NumericWidget.java | 60 - .../widget/CoverDataFollower_SlotWidget.java | 101 - .../widget/CoverDataFollower_TextFieldWidget.java | 134 - .../CoverDataFollower_ToggleButtonWidget.java | 86 - .../modularui/widget/ItemWatcherSlotWidget.java | 4 +- src/main/java/gregtech/common/items/CombType.java | 4 +- src/main/java/gregtech/common/items/DropType.java | 4 +- .../common/items/GT_AdvancedSensorCard_Item.java | 330 - .../common/items/GT_DepletetCell_Item.java | 49 - .../gregtech/common/items/GT_FluidDisplayItem.java | 181 - .../common/items/GT_IntegratedCircuit_Item.java | 328 - .../common/items/GT_MetaGenerated_Item_01.java | 4635 ------- .../common/items/GT_MetaGenerated_Item_02.java | 3115 ----- .../common/items/GT_MetaGenerated_Item_03.java | 1492 -- .../common/items/GT_MetaGenerated_Item_98.java | 352 - .../common/items/GT_MetaGenerated_Item_99.java | 214 - .../common/items/GT_MetaGenerated_Tool_01.java | 746 - .../common/items/GT_NeutronReflector_Item.java | 54 - .../gregtech/common/items/GT_SensorCard_Item.java | 111 - .../java/gregtech/common/items/GT_TierDrone.java | 18 - .../gregtech/common/items/GT_VolumetricFlask.java | 360 - .../common/items/GT_WirelessHeadphones.java | 118 - .../java/gregtech/common/items/IDMetaItem01.java | 433 + .../java/gregtech/common/items/IDMetaItem02.java | 208 + .../java/gregtech/common/items/IDMetaItem03.java | 242 + .../java/gregtech/common/items/IDMetaTool01.java | 73 + .../java/gregtech/common/items/ID_MetaItem_01.java | 433 - .../java/gregtech/common/items/ID_MetaItem_02.java | 208 - .../java/gregtech/common/items/ID_MetaItem_03.java | 242 - .../java/gregtech/common/items/ID_MetaTool_01.java | 73 - .../common/items/ItemAdvancedSensorCard.java | 330 + src/main/java/gregtech/common/items/ItemComb.java | 324 +- .../gregtech/common/items/ItemDepletedCell.java | 49 + src/main/java/gregtech/common/items/ItemDrop.java | 46 +- .../gregtech/common/items/ItemFluidDisplay.java | 181 + .../common/items/ItemIntegratedCircuit.java | 327 + .../common/items/ItemNeutronReflector.java | 54 + .../java/gregtech/common/items/ItemPropolis.java | 34 +- .../java/gregtech/common/items/ItemSensorCard.java | 111 + .../java/gregtech/common/items/ItemTierDrone.java | 18 + .../gregtech/common/items/ItemVolumetricFlask.java | 360 + .../common/items/ItemWirelessHeadphones.java | 118 + .../gregtech/common/items/MetaGeneratedItem01.java | 4624 +++++++ .../gregtech/common/items/MetaGeneratedItem02.java | 3107 +++++ .../gregtech/common/items/MetaGeneratedItem03.java | 1492 ++ .../gregtech/common/items/MetaGeneratedItem98.java | 352 + .../gregtech/common/items/MetaGeneratedItem99.java | 214 + .../gregtech/common/items/MetaGeneratedTool01.java | 738 + .../java/gregtech/common/items/PollenType.java | 4 +- .../java/gregtech/common/items/PropolisType.java | 4 +- .../common/items/behaviors/BehaviourCoverTool.java | 193 + .../common/items/behaviors/BehaviourCrowbar.java | 61 + .../common/items/behaviors/BehaviourDataOrb.java | 105 + .../common/items/behaviors/BehaviourDataStick.java | 52 + .../common/items/behaviors/BehaviourHoe.java | 72 + .../common/items/behaviors/BehaviourLighter.java | 139 + .../common/items/behaviors/BehaviourNone.java | 90 + .../items/behaviors/BehaviourPlungerEssentia.java | 54 + .../items/behaviors/BehaviourPlungerFluid.java | 75 + .../items/behaviors/BehaviourPlungerItem.java | 88 + .../items/behaviors/BehaviourPrintedPages.java | 39 + .../items/behaviors/BehaviourProspecting.java | 158 + .../common/items/behaviors/BehaviourScanner.java | 65 + .../common/items/behaviors/BehaviourScoop.java | 62 + .../items/behaviors/BehaviourScrewdriver.java | 52 + .../common/items/behaviors/BehaviourSense.java | 56 + .../common/items/behaviors/BehaviourSensorKit.java | 56 + .../items/behaviors/BehaviourSoftHammer.java | 123 + .../common/items/behaviors/BehaviourSonictron.java | 135 + .../items/behaviors/BehaviourSprayColor.java | 218 + .../behaviors/BehaviourSprayColorRemover.java | 48 + .../items/behaviors/BehaviourSwitchMetadata.java | 67 + .../items/behaviors/BehaviourSwitchMode.java | 53 + .../common/items/behaviors/BehaviourWrench.java | 278 + .../items/behaviors/BehaviourWrittenBook.java | 40 + .../items/behaviors/Behaviour_Cover_Tool.java | 193 - .../common/items/behaviors/Behaviour_Crowbar.java | 61 - .../common/items/behaviors/Behaviour_DataOrb.java | 105 - .../items/behaviors/Behaviour_DataStick.java | 52 - .../common/items/behaviors/Behaviour_Hoe.java | 72 - .../common/items/behaviors/Behaviour_Lighter.java | 140 - .../common/items/behaviors/Behaviour_None.java | 90 - .../behaviors/Behaviour_Plunger_Essentia.java | 54 - .../items/behaviors/Behaviour_Plunger_Fluid.java | 75 - .../items/behaviors/Behaviour_Plunger_Item.java | 88 - .../items/behaviors/Behaviour_PrintedPages.java | 39 - .../items/behaviors/Behaviour_Prospecting.java | 159 - .../common/items/behaviors/Behaviour_Scanner.java | 65 - .../common/items/behaviors/Behaviour_Scoop.java | 63 - .../items/behaviors/Behaviour_Screwdriver.java | 52 - .../common/items/behaviors/Behaviour_Sense.java | 56 - .../items/behaviors/Behaviour_SensorKit.java | 56 - .../items/behaviors/Behaviour_SoftHammer.java | 131 - .../items/behaviors/Behaviour_Sonictron.java | 135 - .../items/behaviors/Behaviour_Spray_Color.java | 218 - .../behaviors/Behaviour_Spray_Color_Remover.java | 48 - .../items/behaviors/Behaviour_Switch_Metadata.java | 67 - .../items/behaviors/Behaviour_Switch_Mode.java | 53 - .../common/items/behaviors/Behaviour_Wrench.java | 278 - .../items/behaviors/Behaviour_WrittenBook.java | 40 - .../common/misc/DrillingLogicDelegate.java | 266 + .../gregtech/common/misc/GTClientPollutionMap.java | 140 + src/main/java/gregtech/common/misc/GTCommand.java | 354 + .../common/misc/GT_ClientPollutionMap.java | 140 - src/main/java/gregtech/common/misc/GT_Command.java | 355 - .../common/misc/GT_DrillingLogicDelegate.java | 266 - .../misc/GT_IDrillingLogicDelegateOwner.java | 22 - .../common/misc/GlobalMetricsCoverDatabase.java | 20 +- .../common/misc/IDrillingLogicDelegateOwner.java | 22 + .../misc/spaceprojects/SpaceProjectManager.java | 4 +- .../misc/spaceprojects/base/SPRequirements.java | 74 + .../common/misc/spaceprojects/base/SPUpgrade.java | 362 + .../misc/spaceprojects/base/SP_Requirements.java | 74 - .../common/misc/spaceprojects/base/SP_Upgrade.java | 362 - .../misc/spaceprojects/base/SpaceProject.java | 2 +- .../misc/spaceprojects/commands/SPCommand.java | 166 + .../misc/spaceprojects/commands/SPMCommand.java | 288 + .../misc/spaceprojects/commands/SPM_Command.java | 288 - .../misc/spaceprojects/commands/SP_Command.java | 166 - .../commands/SpaceProjectCommand.java | 9 + .../commands/SpaceProject_Command.java | 9 - .../common/redstonecircuits/CircuitBasicLogic.java | 137 + .../common/redstonecircuits/CircuitBitAnd.java | 81 + .../redstonecircuits/CircuitCombinationLock.java | 109 + .../common/redstonecircuits/CircuitEquals.java | 73 + .../common/redstonecircuits/CircuitPulser.java | 92 + .../common/redstonecircuits/CircuitRandomizer.java | 86 + .../redstonecircuits/CircuitRedstoneMeter.java | 94 + .../common/redstonecircuits/CircuitRepeater.java | 86 + .../common/redstonecircuits/CircuitTimer.java | 108 + .../redstonecircuits/GT_Circuit_BasicLogic.java | 137 - .../common/redstonecircuits/GT_Circuit_BitAnd.java | 81 - .../GT_Circuit_CombinationLock.java | 109 - .../common/redstonecircuits/GT_Circuit_Equals.java | 73 - .../common/redstonecircuits/GT_Circuit_Pulser.java | 92 - .../redstonecircuits/GT_Circuit_Randomizer.java | 86 - .../redstonecircuits/GT_Circuit_RedstoneMeter.java | 94 - .../redstonecircuits/GT_Circuit_Repeater.java | 86 - .../common/redstonecircuits/GT_Circuit_Timer.java | 108 - .../java/gregtech/common/render/DroneRender.java | 93 + .../java/gregtech/common/render/FlaskRenderer.java | 71 + .../common/render/FluidDisplayStackRenderer.java | 98 + .../gregtech/common/render/GTCapeRenderer.java | 148 + .../common/render/GTCopiedBlockTextureRender.java | 112 + .../common/render/GTCopiedCTMBlockTexture.java | 118 + .../java/gregtech/common/render/GTIconFlipped.java | 91 + .../common/render/GTMultiTextureRender.java | 69 + .../java/gregtech/common/render/GTRenderUtil.java | 141 + .../gregtech/common/render/GTRenderedTexture.java | 395 + .../gregtech/common/render/GTRendererBlock.java | 779 ++ .../common/render/GTSidedTextureRender.java | 78 + .../java/gregtech/common/render/GTTextureBase.java | 31 + .../gregtech/common/render/GTTextureBuilder.java | 150 + .../gregtech/common/render/GT_CapeRenderer.java | 148 - .../common/render/GT_CopiedBlockTexture.java | 112 - .../common/render/GT_CopiedCTMBlockTexture.java | 118 - .../gregtech/common/render/GT_FlaskRenderer.java | 71 - .../render/GT_FluidDisplayStackRenderer.java | 98 - .../gregtech/common/render/GT_IconFlipped.java | 91 - .../gregtech/common/render/GT_LaserRenderer.java | 90 - .../render/GT_MetaGenerated_Tool_Renderer.java | 130 - .../gregtech/common/render/GT_MultiTexture.java | 69 - .../common/render/GT_MultiTile_Renderer.java | 179 - .../common/render/GT_PollutionRenderer.java | 251 - .../gregtech/common/render/GT_RenderDrone.java | 93 - .../java/gregtech/common/render/GT_RenderUtil.java | 141 - .../gregtech/common/render/GT_RenderedTexture.java | 395 - .../gregtech/common/render/GT_Renderer_Block.java | 779 -- .../gregtech/common/render/GT_SidedTexture.java | 78 - .../gregtech/common/render/GT_TextureBase.java | 31 - .../gregtech/common/render/GT_TextureBuilder.java | 151 - .../common/render/GT_WormholeRenderer.java | 79 - .../gregtech/common/render/IRenderedBlock.java | 12 +- .../java/gregtech/common/render/LaserRenderer.java | 91 + .../common/render/MetaGeneratedToolRenderer.java | 130 + .../gregtech/common/render/MultiTileRenderer.java | 179 + .../gregtech/common/render/PollutionRenderer.java | 251 + .../gregtech/common/render/WormholeRenderer.java | 79 + .../render/items/CosmicNeutroniumRenderer.java | 10 +- .../common/render/items/DataStickRenderer.java | 42 + .../common/render/items/GT_DataStick_Renderer.java | 42 - .../render/items/GT_GeneratedItem_Renderer.java | 166 - .../items/GT_GeneratedMaterial_Renderer.java | 130 - .../items/GT_MetaGenerated_Item_Renderer.java | 85 - .../common/render/items/GaiaSpiritRenderer.java | 12 +- .../common/render/items/GeneratedItemRenderer.java | 166 + .../render/items/GeneratedMaterialRenderer.java | 130 + .../common/render/items/GlitchEffectRenderer.java | 6 +- .../common/render/items/InfinityRenderer.java | 6 +- .../render/items/MetaGeneratedItemRenderer.java | 85 + .../render/items/TranscendentMetalRenderer.java | 10 +- .../common/render/items/UniversiumRenderer.java | 12 +- .../automation/GT_MetaTileEntity_ChestBuffer.java | 137 - .../automation/GT_MetaTileEntity_Filter.java | 144 - .../GT_MetaTileEntity_ItemDistributor.java | 204 - .../automation/GT_MetaTileEntity_RecipeFilter.java | 326 - .../automation/GT_MetaTileEntity_Regulator.java | 228 - .../automation/GT_MetaTileEntity_SuperBuffer.java | 105 - .../automation/GT_MetaTileEntity_TypeFilter.java | 213 - .../tileentities/automation/MTEChestBuffer.java | 135 + .../common/tileentities/automation/MTEFilter.java | 137 + .../automation/MTEItemDistributor.java | 204 + .../tileentities/automation/MTERecipeFilter.java | 325 + .../tileentities/automation/MTERegulator.java | 221 + .../tileentities/automation/MTESuperBuffer.java | 103 + .../tileentities/automation/MTETypeFilter.java | 211 + .../boilers/GT_MetaTileEntity_Boiler.java | 530 - .../boilers/GT_MetaTileEntity_Boiler_Bronze.java | 260 - .../boilers/GT_MetaTileEntity_Boiler_Lava.java | 474 - .../boilers/GT_MetaTileEntity_Boiler_Solar.java | 311 - .../GT_MetaTileEntity_Boiler_Solar_Steel.java | 71 - .../boilers/GT_MetaTileEntity_Boiler_Steel.java | 108 - .../common/tileentities/boilers/MTEBoiler.java | 527 + .../tileentities/boilers/MTEBoilerBronze.java | 259 + .../common/tileentities/boilers/MTEBoilerLava.java | 474 + .../tileentities/boilers/MTEBoilerSolar.java | 311 + .../tileentities/boilers/MTEBoilerSolarSteel.java | 69 + .../tileentities/boilers/MTEBoilerSteel.java | 108 + .../tileentities/casings/upgrade/Ampere.java | 8 +- .../tileentities/casings/upgrade/Inventory.java | 2 +- .../common/tileentities/casings/upgrade/Tank.java | 10 +- .../GT_MetaTileEntity_AdvDebugStructureWriter.java | 437 - .../debug/MTEAdvDebugStructureWriter.java | 434 + .../GT_MetaTileEntity_DieselGenerator.java | 278 - .../generators/GT_MetaTileEntity_GasTurbine.java | 207 - .../generators/GT_MetaTileEntity_LightningRod.java | 169 - .../GT_MetaTileEntity_MagicEnergyConverter.java | 173 - .../GT_MetaTileEntity_MagicalEnergyAbsorber.java | 805 -- .../GT_MetaTileEntity_NaquadahReactor.java | 201 - .../GT_MetaTileEntity_PlasmaGenerator.java | 142 - .../generators/GT_MetaTileEntity_SteamTurbine.java | 238 - .../generators/MTEDieselGenerator.java | 278 + .../tileentities/generators/MTEGasTurbine.java | 201 + .../tileentities/generators/MTELightningRod.java | 168 + .../generators/MTEMagicEnergyConverter.java | 167 + .../generators/MTEMagicalEnergyAbsorber.java | 803 ++ .../generators/MTENaquadahReactor.java | 200 + .../generators/MTEPlasmaGenerator.java | 142 + .../tileentities/generators/MTESteamTurbine.java | 238 + .../GT_MetaTileEntity_BasicHull_Bronze.java | 45 - .../GT_MetaTileEntity_BasicHull_BronzeBricks.java | 53 - .../GT_MetaTileEntity_BasicHull_Steel.java | 47 - .../GT_MetaTileEntity_BasicHull_SteelBricks.java | 53 - .../GT_MetaTileEntity_Hatch_CraftingInput_ME.java | 1040 -- ...T_MetaTileEntity_Hatch_CraftingInput_Slave.java | 262 - .../GT_MetaTileEntity_Hatch_InputBus_ME.java | 887 -- .../machines/GT_MetaTileEntity_Hatch_Input_ME.java | 949 -- .../GT_MetaTileEntity_Hatch_OutputBus_ME.java | 380 - .../GT_MetaTileEntity_Hatch_Output_ME.java | 443 - .../machines/IRecipeProcessingAwareHatch.java | 7 +- .../tileentities/machines/MTEBasicHullBronze.java | 43 + .../machines/MTEBasicHullBronzeBricks.java | 46 + .../tileentities/machines/MTEBasicHullSteel.java | 46 + .../machines/MTEBasicHullSteelBricks.java | 46 + .../machines/MTEHatchCraftingInputME.java | 1039 ++ .../machines/MTEHatchCraftingInputSlave.java | 260 + .../tileentities/machines/MTEHatchInputBusME.java | 886 ++ .../tileentities/machines/MTEHatchInputME.java | 949 ++ .../tileentities/machines/MTEHatchOutputBusME.java | 378 + .../tileentities/machines/MTEHatchOutputME.java | 443 + .../GT_MetaTileEntity_AdvSeismicProspector.java | 309 - .../basic/GT_MetaTileEntity_BetterJukebox.java | 702 - .../basic/GT_MetaTileEntity_Boxinator.java | 229 - .../machines/basic/GT_MetaTileEntity_Charger.java | 110 - .../basic/GT_MetaTileEntity_IndustrialApiary.java | 1555 --- .../basic/GT_MetaTileEntity_Massfabricator.java | 241 - ..._MetaTileEntity_MicrowaveEnergyTransmitter.java | 495 - .../machines/basic/GT_MetaTileEntity_Miner.java | 407 - .../basic/GT_MetaTileEntity_MonsterRepellent.java | 182 - .../basic/GT_MetaTileEntity_PotionBrewer.java | 225 - .../machines/basic/GT_MetaTileEntity_Pump.java | 846 -- .../basic/GT_MetaTileEntity_Replicator.java | 130 - .../basic/GT_MetaTileEntity_RockBreaker.java | 169 - .../machines/basic/GT_MetaTileEntity_Scanner.java | 425 - .../basic/GT_MetaTileEntity_Teleporter.java | 601 - .../basic/GT_MetaTileEntity_TurboCharger.java | 146 - .../basic/GT_MetaTileEntity_WorldAccelerator.java | 470 - .../machines/basic/MTEAdvSeismicProspector.java | 307 + .../machines/basic/MTEBetterJukebox.java | 701 + .../tileentities/machines/basic/MTEBoxinator.java | 231 + .../tileentities/machines/basic/MTECharger.java | 107 + .../machines/basic/MTEIndustrialApiary.java | 1554 +++ .../machines/basic/MTEMassfabricator.java | 241 + .../basic/MTEMicrowaveEnergyTransmitter.java | 474 + .../tileentities/machines/basic/MTEMiner.java | 406 + .../machines/basic/MTEMonsterRepellent.java | 182 + .../machines/basic/MTEPotionBrewer.java | 224 + .../tileentities/machines/basic/MTEPump.java | 846 ++ .../tileentities/machines/basic/MTEReplicator.java | 130 + .../machines/basic/MTERockBreaker.java | 169 + .../tileentities/machines/basic/MTEScanner.java | 425 + .../tileentities/machines/basic/MTETeleporter.java | 586 + .../machines/basic/MTETurboCharger.java | 145 + .../machines/basic/MTEWorldAccelerator.java | 470 + ...GT_MetaTileEntity_LongDistancePipelineBase.java | 415 - ...T_MetaTileEntity_LongDistancePipelineFluid.java | 125 - ...GT_MetaTileEntity_LongDistancePipelineItem.java | 214 - .../long_distance/MTELongDistancePipelineBase.java | 412 + .../MTELongDistancePipelineFluid.java | 124 + .../long_distance/MTELongDistancePipelineItem.java | 213 + .../GT_MetaTileEntity_AbstractMultiFurnace.java | 48 - .../multi/GT_MetaTileEntity_AssemblyLine.java | 495 - .../GT_MetaTileEntity_BrickedBlastFurnace.java | 155 - .../multi/GT_MetaTileEntity_Charcoal_Pit.java | 312 - .../multi/GT_MetaTileEntity_Cleanroom.java | 527 - .../GT_MetaTileEntity_ConcreteBackfiller1.java | 53 - .../GT_MetaTileEntity_ConcreteBackfiller2.java | 54 - .../GT_MetaTileEntity_ConcreteBackfillerBase.java | 265 - .../multi/GT_MetaTileEntity_DieselEngine.java | 416 - .../multi/GT_MetaTileEntity_DistillationTower.java | 369 - .../multi/GT_MetaTileEntity_DrillerBase.java | 952 -- .../GT_MetaTileEntity_ElectricBlastFurnace.java | 401 - .../GT_MetaTileEntity_ExtremeDieselEngine.java | 237 - .../multi/GT_MetaTileEntity_FusionComputer.java | 676 - .../multi/GT_MetaTileEntity_FusionComputer1.java | 103 - .../multi/GT_MetaTileEntity_FusionComputer2.java | 103 - .../multi/GT_MetaTileEntity_FusionComputer3.java | 103 - .../multi/GT_MetaTileEntity_HeatExchanger.java | 400 - .../GT_MetaTileEntity_ImplosionCompressor.java | 163 - ...eEntity_IndustrialElectromagneticSeparator.java | 467 - .../GT_MetaTileEntity_IndustrialExtractor.java | 293 - .../GT_MetaTileEntity_IndustrialLaserEngraver.java | 615 - .../GT_MetaTileEntity_IntegratedOreFactory.java | 829 -- .../multi/GT_MetaTileEntity_LargeBoiler.java | 504 - .../GT_MetaTileEntity_LargeBoiler_Bronze.java | 96 - .../multi/GT_MetaTileEntity_LargeBoiler_Steel.java | 96 - .../GT_MetaTileEntity_LargeBoiler_Titanium.java | 96 - ...T_MetaTileEntity_LargeBoiler_TungstenSteel.java | 96 - .../GT_MetaTileEntity_LargeChemicalReactor.java | 298 - .../GT_MetaTileEntity_LargeFluidExtractor.java | 419 - .../multi/GT_MetaTileEntity_LargeTurbine.java | 492 - .../multi/GT_MetaTileEntity_LargeTurbine_Gas.java | 220 - ...GT_MetaTileEntity_LargeTurbine_GasAdvanced.java | 219 - .../GT_MetaTileEntity_LargeTurbine_HPSteam.java | 232 - .../GT_MetaTileEntity_LargeTurbine_Plasma.java | 391 - .../GT_MetaTileEntity_LargeTurbine_Steam.java | 273 - .../multi/GT_MetaTileEntity_MultiAutoclave.java | 425 - .../multi/GT_MetaTileEntity_MultiCanner.java | 314 - .../multi/GT_MetaTileEntity_MultiFurnace.java | 377 - .../multi/GT_MetaTileEntity_MultiLathe.java | 377 - .../multi/GT_MetaTileEntity_NanoForge.java | 467 - .../multi/GT_MetaTileEntity_OilCracker.java | 423 - .../multi/GT_MetaTileEntity_OilDrill1.java | 53 - .../multi/GT_MetaTileEntity_OilDrill2.java | 55 - .../multi/GT_MetaTileEntity_OilDrill3.java | 55 - .../multi/GT_MetaTileEntity_OilDrill4.java | 55 - .../multi/GT_MetaTileEntity_OilDrillBase.java | 489 - .../multi/GT_MetaTileEntity_OilDrillInfinite.java | 87 - .../multi/GT_MetaTileEntity_OreDrillingPlant1.java | 60 - .../multi/GT_MetaTileEntity_OreDrillingPlant2.java | 60 - .../multi/GT_MetaTileEntity_OreDrillingPlant3.java | 60 - .../multi/GT_MetaTileEntity_OreDrillingPlant4.java | 60 - .../GT_MetaTileEntity_OreDrillingPlantBase.java | 794 -- .../multi/GT_MetaTileEntity_PCBFactory.java | 1290 -- .../multi/GT_MetaTileEntity_PlasmaForge.java | 1263 -- .../GT_MetaTileEntity_PrimitiveBlastFurnace.java | 521 - .../multi/GT_MetaTileEntity_ProcessingArray.java | 550 - .../multi/GT_MetaTileEntity_PyrolyseOven.java | 263 - .../GT_MetaTileEntity_TranscendentPlasmaMixer.java | 389 - .../multi/GT_MetaTileEntity_VacuumFreezer.java | 163 - .../multi/GT_MetaTileEntity_WormholeGenerator.java | 1119 -- .../machines/multi/MTEAbstractMultiFurnace.java | 48 + .../machines/multi/MTEAssemblyLine.java | 494 + .../machines/multi/MTEBrickedBlastFurnace.java | 154 + .../machines/multi/MTECharcoalPit.java | 311 + .../tileentities/machines/multi/MTECleanroom.java | 527 + .../machines/multi/MTEConcreteBackfiller1.java | 53 + .../machines/multi/MTEConcreteBackfiller2.java | 54 + .../machines/multi/MTEConcreteBackfillerBase.java | 264 + .../machines/multi/MTEDieselEngine.java | 415 + .../machines/multi/MTEDistillationTower.java | 360 + .../machines/multi/MTEDrillerBase.java | 951 ++ .../machines/multi/MTEElectricBlastFurnace.java | 397 + .../machines/multi/MTEExtremeDieselEngine.java | 237 + .../machines/multi/MTEFusionComputer.java | 673 + .../machines/multi/MTEFusionComputer1.java | 103 + .../machines/multi/MTEFusionComputer2.java | 103 + .../machines/multi/MTEFusionComputer3.java | 103 + .../machines/multi/MTEHeatExchanger.java | 396 + .../machines/multi/MTEImplosionCompressor.java | 162 + .../MTEIndustrialElectromagneticSeparator.java | 465 + .../machines/multi/MTEIndustrialExtractor.java | 289 + .../machines/multi/MTEIndustrialLaserEngraver.java | 605 + .../machines/multi/MTEIntegratedOreFactory.java | 827 ++ .../machines/multi/MTELargeBoiler.java | 503 + .../machines/multi/MTELargeBoilerBronze.java | 96 + .../machines/multi/MTELargeBoilerSteel.java | 96 + .../machines/multi/MTELargeBoilerTitanium.java | 96 + .../multi/MTELargeBoilerTungstenSteel.java | 96 + .../machines/multi/MTELargeChemicalReactor.java | 291 + .../machines/multi/MTELargeFluidExtractor.java | 418 + .../machines/multi/MTELargeTurbine.java | 490 + .../machines/multi/MTELargeTurbineGas.java | 220 + .../machines/multi/MTELargeTurbineGasAdvanced.java | 219 + .../machines/multi/MTELargeTurbineHPSteam.java | 232 + .../machines/multi/MTELargeTurbinePlasma.java | 389 + .../machines/multi/MTELargeTurbineSteam.java | 273 + .../machines/multi/MTEMultiAutoclave.java | 419 + .../machines/multi/MTEMultiCanner.java | 310 + .../machines/multi/MTEMultiFurnace.java | 373 + .../tileentities/machines/multi/MTEMultiLathe.java | 369 + .../tileentities/machines/multi/MTENanoForge.java | 466 + .../tileentities/machines/multi/MTEOilCracker.java | 413 + .../tileentities/machines/multi/MTEOilDrill1.java | 53 + .../tileentities/machines/multi/MTEOilDrill2.java | 55 + .../tileentities/machines/multi/MTEOilDrill3.java | 55 + .../tileentities/machines/multi/MTEOilDrill4.java | 55 + .../machines/multi/MTEOilDrillBase.java | 489 + .../machines/multi/MTEOilDrillInfinite.java | 87 + .../machines/multi/MTEOreDrillingPlant1.java | 60 + .../machines/multi/MTEOreDrillingPlant2.java | 60 + .../machines/multi/MTEOreDrillingPlant3.java | 60 + .../machines/multi/MTEOreDrillingPlant4.java | 60 + .../machines/multi/MTEOreDrillingPlantBase.java | 793 ++ .../tileentities/machines/multi/MTEPCBFactory.java | 1287 ++ .../machines/multi/MTEPlasmaForge.java | 1260 ++ .../machines/multi/MTEPrimitiveBlastFurnace.java | 521 + .../machines/multi/MTEProcessingArray.java | 549 + .../machines/multi/MTEPyrolyseOven.java | 259 + .../machines/multi/MTETranscendentPlasmaMixer.java | 387 + .../machines/multi/MTEVacuumFreezer.java | 162 + .../machines/multi/MTEWormholeGenerator.java | 1118 ++ .../GT_MetaTileEntity_BlackHoleCompressor.java | 539 - .../GT_MetaTileEntity_HIPCompressor.java | 525 - .../compressor/GT_MetaTileEntity_HeatSensor.java | 188 - .../GT_MetaTileEntity_IndustrialCompressor.java | 244 - .../GT_MetaTileEntity_NeutroniumCompressor.java | 261 - .../multi/compressor/MTEBlackHoleCompressor.java | 534 + .../multi/compressor/MTEHIPCompressor.java | 515 + .../machines/multi/compressor/MTEHeatSensor.java | 188 + .../multi/compressor/MTEIndustrialCompressor.java | 239 + .../multi/compressor/MTENeutroniumCompressor.java | 257 + .../machines/multi/drone/DroneConnection.java | 34 +- .../multi/drone/GT_MetaTileEntity_DroneCentre.java | 917 -- .../GT_MetaTileEntity_Hatch_DroneDownLink.java | 329 - .../machines/multi/drone/MTEDroneCentre.java | 913 ++ .../multi/drone/MTEHatchDroneDownLink.java | 324 + ...etaTileEntity_Hatch_DegasifierControlHatch.java | 122 - .../GT_MetaTileEntity_LensHousing.java | 52 - .../GT_MetaTileEntity_LensIndicator.java | 117 - .../GT_MetaTileEntity_PurificationPlant.java | 740 - .../GT_MetaTileEntity_PurificationUnitBase.java | 805 -- ...T_MetaTileEntity_PurificationUnitClarifier.java | 333 - ..._MetaTileEntity_PurificationUnitDegasifier.java | 832 -- ...etaTileEntity_PurificationUnitFlocculation.java | 489 - ...T_MetaTileEntity_PurificationUnitOzonation.java | 299 - ...leEntity_PurificationUnitParticleExtractor.java | 566 - ...etaTileEntity_PurificationUnitPhAdjustment.java | 611 - ...etaTileEntity_PurificationUnitPlasmaHeater.java | 566 - ...MetaTileEntity_PurificationUnitUVTreatment.java | 526 - .../purification/GT_MetaTileEntity_pHSensor.java | 192 - .../multi/purification/LinkedPurificationUnit.java | 15 +- .../purification/MTEHatchDegasifierControl.java | 121 + .../multi/purification/MTEHatchLensHousing.java | 52 + .../multi/purification/MTEHatchLensIndicator.java | 117 + .../multi/purification/MTEHatchPHSensor.java | 192 + .../multi/purification/MTEPurificationPlant.java | 739 + .../MTEPurificationUnitBaryonicPerfection.java | 565 + .../purification/MTEPurificationUnitBase.java | 805 ++ .../purification/MTEPurificationUnitClarifier.java | 332 + .../purification/MTEPurificationUnitDegasser.java | 830 ++ .../MTEPurificationUnitFlocculation.java | 488 + .../purification/MTEPurificationUnitOzonation.java | 298 + .../MTEPurificationUnitPhAdjustment.java | 608 + .../MTEPurificationUnitPlasmaHeater.java | 565 + .../MTEPurificationUnitUVTreatment.java | 521 + .../multi/purification/PurifiedWaterHelpers.java | 4 +- .../machines/multiblock/AdvChemicalProcessor.java | 38 +- .../tileentities/machines/multiblock/CokeOven.java | 14 +- .../machines/multiblock/DistillationTower.java | 22 +- .../machines/multiblock/LaserEngraver.java | 24 +- .../machines/multiblock/LayeredCokeBattery.java | 14 +- .../machines/multiblock/Macerator.java | 6 +- .../multiblock/logic/CokeOvenProcessingLogic.java | 16 +- .../GT_MetaTileEntity_AlloySmelter_Bronze.java | 139 - .../GT_MetaTileEntity_AlloySmelter_Steel.java | 139 - .../steam/GT_MetaTileEntity_Compressor_Bronze.java | 134 - .../steam/GT_MetaTileEntity_Compressor_Steel.java | 134 - .../steam/GT_MetaTileEntity_Extractor_Bronze.java | 134 - .../steam/GT_MetaTileEntity_Extractor_Steel.java | 134 - .../GT_MetaTileEntity_ForgeHammer_Bronze.java | 202 - .../steam/GT_MetaTileEntity_ForgeHammer_Steel.java | 202 - .../steam/GT_MetaTileEntity_Furnace_Bronze.java | 161 - .../steam/GT_MetaTileEntity_Furnace_Steel.java | 159 - .../steam/GT_MetaTileEntity_Macerator_Bronze.java | 189 - .../steam/GT_MetaTileEntity_Macerator_Steel.java | 188 - .../machines/steam/MTESteamAlloySmelterBronze.java | 139 + .../machines/steam/MTESteamAlloySmelterSteel.java | 139 + .../machines/steam/MTESteamCompressorBronze.java | 134 + .../machines/steam/MTESteamCompressorSteel.java | 134 + .../machines/steam/MTESteamExtractorBronze.java | 134 + .../machines/steam/MTESteamExtractorSteel.java | 134 + .../machines/steam/MTESteamForgeHammerBronze.java | 202 + .../machines/steam/MTESteamForgeHammerSteel.java | 202 + .../machines/steam/MTESteamFurnaceBronze.java | 161 + .../machines/steam/MTESteamFurnaceSteel.java | 159 + .../machines/steam/MTESteamMaceratorBronze.java | 189 + .../machines/steam/MTESteamMaceratorSteel.java | 188 + .../common/tileentities/render/TileDrone.java | 24 - .../tileentities/render/TileEntityDrone.java | 24 + .../tileentities/render/TileEntityLaser.java | 116 + .../tileentities/render/TileEntityWormhole.java | 87 + .../common/tileentities/render/TileLaser.java | 116 - .../common/tileentities/render/TileWormhole.java | 87 - .../GT_MetaTileEntity_DigitalChestBase.java | 559 - .../storage/GT_MetaTileEntity_DigitalTankBase.java | 694 - .../storage/GT_MetaTileEntity_Locker.java | 283 - .../storage/GT_MetaTileEntity_QuantumChest.java | 102 - .../storage/GT_MetaTileEntity_QuantumTank.java | 55 - .../storage/GT_MetaTileEntity_SuperChest.java | 30 - .../storage/GT_MetaTileEntity_SuperTank.java | 54 - .../tileentities/storage/MTEDigitalChestBase.java | 556 + .../tileentities/storage/MTEDigitalTankBase.java | 693 + .../common/tileentities/storage/MTELocker.java | 284 + .../tileentities/storage/MTEQuantumChest.java | 102 + .../tileentities/storage/MTEQuantumTank.java | 55 + .../common/tileentities/storage/MTESuperChest.java | 30 + .../common/tileentities/storage/MTESuperTank.java | 54 + src/main/java/gregtech/common/tools/GTTool.java | 196 + src/main/java/gregtech/common/tools/GT_Tool.java | 196 - .../java/gregtech/common/tools/GT_Tool_Axe.java | 175 - .../common/tools/GT_Tool_BranchCutter.java | 101 - .../common/tools/GT_Tool_ButcheryKnife.java | 104 - .../gregtech/common/tools/GT_Tool_BuzzSaw.java | 81 - .../gregtech/common/tools/GT_Tool_Chainsaw_HV.java | 57 - .../gregtech/common/tools/GT_Tool_Chainsaw_LV.java | 185 - .../gregtech/common/tools/GT_Tool_Chainsaw_MV.java | 57 - .../gregtech/common/tools/GT_Tool_Crowbar.java | 139 - .../gregtech/common/tools/GT_Tool_Drill_HV.java | 68 - .../gregtech/common/tools/GT_Tool_Drill_LV.java | 152 - .../gregtech/common/tools/GT_Tool_Drill_MV.java | 57 - .../java/gregtech/common/tools/GT_Tool_File.java | 124 - .../gregtech/common/tools/GT_Tool_HardHammer.java | 203 - .../java/gregtech/common/tools/GT_Tool_Hoe.java | 132 - .../gregtech/common/tools/GT_Tool_JackHammer.java | 128 - .../java/gregtech/common/tools/GT_Tool_Knife.java | 76 - .../java/gregtech/common/tools/GT_Tool_Mortar.java | 120 - .../gregtech/common/tools/GT_Tool_Pickaxe.java | 139 - .../java/gregtech/common/tools/GT_Tool_Plow.java | 110 - .../gregtech/common/tools/GT_Tool_Plunger.java | 92 - .../gregtech/common/tools/GT_Tool_RollingPin.java | 70 - .../java/gregtech/common/tools/GT_Tool_Saw.java | 149 - .../java/gregtech/common/tools/GT_Tool_Scoop.java | 130 - .../gregtech/common/tools/GT_Tool_Screwdriver.java | 160 - .../common/tools/GT_Tool_Screwdriver_LV.java | 34 - .../java/gregtech/common/tools/GT_Tool_Sense.java | 114 - .../java/gregtech/common/tools/GT_Tool_Shovel.java | 127 - .../gregtech/common/tools/GT_Tool_SoftHammer.java | 139 - .../common/tools/GT_Tool_Soldering_Iron.java | 153 - .../java/gregtech/common/tools/GT_Tool_Sword.java | 128 - .../gregtech/common/tools/GT_Tool_Turbine.java | 58 - .../common/tools/GT_Tool_Turbine_Huge.java | 27 - .../common/tools/GT_Tool_Turbine_Large.java | 27 - .../common/tools/GT_Tool_Turbine_Normal.java | 27 - .../common/tools/GT_Tool_Turbine_Small.java | 27 - .../common/tools/GT_Tool_UniversalSpade.java | 160 - .../gregtech/common/tools/GT_Tool_WireCutter.java | 117 - .../java/gregtech/common/tools/GT_Tool_Wrench.java | 279 - .../gregtech/common/tools/GT_Tool_Wrench_HV.java | 69 - .../gregtech/common/tools/GT_Tool_Wrench_LV.java | 77 - .../gregtech/common/tools/GT_Tool_Wrench_MV.java | 69 - src/main/java/gregtech/common/tools/ToolAxe.java | 175 + .../gregtech/common/tools/ToolBranchCutter.java | 101 + .../gregtech/common/tools/ToolButcheryKnife.java | 104 + .../java/gregtech/common/tools/ToolBuzzSaw.java | 81 + .../java/gregtech/common/tools/ToolChainsawHV.java | 58 + .../java/gregtech/common/tools/ToolChainsawLV.java | 185 + .../java/gregtech/common/tools/ToolChainsawMV.java | 58 + .../java/gregtech/common/tools/ToolCrowbar.java | 139 + .../java/gregtech/common/tools/ToolDrillHV.java | 69 + .../java/gregtech/common/tools/ToolDrillLV.java | 152 + .../java/gregtech/common/tools/ToolDrillMV.java | 58 + src/main/java/gregtech/common/tools/ToolFile.java | 124 + .../java/gregtech/common/tools/ToolHardHammer.java | 203 + src/main/java/gregtech/common/tools/ToolHoe.java | 132 + .../java/gregtech/common/tools/ToolJackHammer.java | 128 + src/main/java/gregtech/common/tools/ToolKnife.java | 76 + .../java/gregtech/common/tools/ToolMortar.java | 120 + .../java/gregtech/common/tools/ToolPickaxe.java | 139 + src/main/java/gregtech/common/tools/ToolPlow.java | 110 + .../java/gregtech/common/tools/ToolPlunger.java | 92 + .../java/gregtech/common/tools/ToolRollingPin.java | 70 + src/main/java/gregtech/common/tools/ToolSaw.java | 149 + src/main/java/gregtech/common/tools/ToolScoop.java | 130 + .../gregtech/common/tools/ToolScrewdriver.java | 160 + .../gregtech/common/tools/ToolScrewdriverLV.java | 34 + src/main/java/gregtech/common/tools/ToolSense.java | 114 + .../java/gregtech/common/tools/ToolShovel.java | 127 + .../java/gregtech/common/tools/ToolSoftHammer.java | 139 + .../gregtech/common/tools/ToolSolderingIron.java | 153 + src/main/java/gregtech/common/tools/ToolSword.java | 128 + .../java/gregtech/common/tools/ToolTurbine.java | 58 + .../gregtech/common/tools/ToolTurbineHuge.java | 27 + .../gregtech/common/tools/ToolTurbineLarge.java | 27 + .../gregtech/common/tools/ToolTurbineNormal.java | 27 + .../gregtech/common/tools/ToolTurbineSmall.java | 27 + .../gregtech/common/tools/ToolUniversalSpade.java | 160 + .../java/gregtech/common/tools/ToolWireCutter.java | 117 + .../java/gregtech/common/tools/ToolWrench.java | 279 + .../java/gregtech/common/tools/ToolWrenchHV.java | 69 + .../java/gregtech/common/tools/ToolWrenchLV.java | 77 + .../java/gregtech/common/tools/ToolWrenchMV.java | 69 + .../tools/pocket/GT_Tool_Pocket_BranchCutter.java | 39 - .../common/tools/pocket/GT_Tool_Pocket_File.java | 39 - .../common/tools/pocket/GT_Tool_Pocket_Knife.java | 39 - .../tools/pocket/GT_Tool_Pocket_Multitool.java | 50 - .../common/tools/pocket/GT_Tool_Pocket_Saw.java | 39 - .../tools/pocket/GT_Tool_Pocket_Screwdriver.java | 39 - .../tools/pocket/GT_Tool_Pocket_WireCutter.java | 39 - .../tools/pocket/ToolPocketBranchCutter.java | 39 + .../common/tools/pocket/ToolPocketFile.java | 39 + .../common/tools/pocket/ToolPocketKnife.java | 39 + .../common/tools/pocket/ToolPocketMultitool.java | 50 + .../common/tools/pocket/ToolPocketSaw.java | 39 + .../common/tools/pocket/ToolPocketScrewdriver.java | 39 + .../common/tools/pocket/ToolPocketWireCutter.java | 39 + .../crossmod/holoinventory/GTInventoryDecoder.java | 38 + .../holoinventory/GT_InventoryDecoder.java | 38 - .../crossmod/holoinventory/HoloInventory.java | 2 +- .../GT_VisualProspecting_Database.java | 25 - .../VisualProspectingDatabase.java | 25 + .../gregtech/loaders/load/CoverBehaviorLoader.java | 11 + .../java/gregtech/loaders/load/FuelLoader.java | 146 + .../java/gregtech/loaders/load/GTItemIterator.java | 306 + .../loaders/load/GT_CoverBehaviorLoader.java | 11 - .../java/gregtech/loaders/load/GT_FuelLoader.java | 146 - .../gregtech/loaders/load/GT_ItemIterator.java | 305 - .../load/GT_Loader_MetaTileEntities_Recipes.java | 4675 ------- .../gregtech/loaders/load/GT_SonictronLoader.java | 159 - .../gregtech/loaders/load/MTERecipeLoader.java | 4386 ++++++ .../gregtech/loaders/load/SonictronLoader.java | 159 + .../materialprocessing/ProcessingConfig.java | 6 +- .../gregtech/loaders/materials/MaterialsInit1.java | 536 +- .../java/gregtech/loaders/misc/CoverLoader.java | 42 + .../java/gregtech/loaders/misc/GTAchievements.java | 814 ++ .../gregtech/loaders/misc/GTBeeDefinition.java | 2818 ++++ src/main/java/gregtech/loaders/misc/GTBees.java | 231 + .../gregtech/loaders/misc/GTBranchDefinition.java | 207 + .../gregtech/loaders/misc/GT_Achievements.java | 822 -- .../gregtech/loaders/misc/GT_BeeDefinition.java | 2831 ---- src/main/java/gregtech/loaders/misc/GT_Bees.java | 231 - .../gregtech/loaders/misc/GT_BranchDefinition.java | 207 - .../java/gregtech/loaders/misc/GT_CoverLoader.java | 42 - .../gregtech/loaders/misc/bees/GTAlleleEffect.java | 57 + .../loaders/misc/bees/GTEffectMachineBoost.java | 61 + .../loaders/misc/bees/GTEffectTreeTwister.java | 87 + .../java/gregtech/loaders/misc/bees/GTFlowers.java | 135 + .../loaders/misc/bees/GT_AlleleEffect.java | 57 - .../loaders/misc/bees/GT_EffectMachineBoost.java | 61 - .../loaders/misc/bees/GT_EffectTreeTwister.java | 87 - .../gregtech/loaders/misc/bees/GT_Flowers.java | 135 - .../loaders/oreprocessing/ProcessingBeans.java | 14 +- .../loaders/oreprocessing/ProcessingBlock.java | 88 +- .../loaders/oreprocessing/ProcessingBolt.java | 12 +- .../loaders/oreprocessing/ProcessingCell.java | 244 +- .../loaders/oreprocessing/ProcessingCircuit.java | 12 +- .../oreprocessing/ProcessingCompressed.java | 8 +- .../loaders/oreprocessing/ProcessingCrafting.java | 264 +- .../loaders/oreprocessing/ProcessingCrop.java | 47 +- .../oreprocessing/ProcessingCrushedOre.java | 68 +- .../oreprocessing/ProcessingCrystallized.java | 24 +- .../loaders/oreprocessing/ProcessingDirty.java | 96 +- .../loaders/oreprocessing/ProcessingDust.java | 380 +- .../loaders/oreprocessing/ProcessingDye.java | 40 +- .../loaders/oreprocessing/ProcessingFineWire.java | 16 +- .../loaders/oreprocessing/ProcessingFoil.java | 20 +- .../loaders/oreprocessing/ProcessingFood.java | 46 +- .../loaders/oreprocessing/ProcessingGear.java | 62 +- .../loaders/oreprocessing/ProcessingGem.java | 428 +- .../loaders/oreprocessing/ProcessingIngot.java | 184 +- .../loaders/oreprocessing/ProcessingItem.java | 24 +- .../loaders/oreprocessing/ProcessingLens.java | 65 +- .../loaders/oreprocessing/ProcessingLog.java | 262 +- .../loaders/oreprocessing/ProcessingNugget.java | 54 +- .../loaders/oreprocessing/ProcessingOre.java | 130 +- .../loaders/oreprocessing/ProcessingOrePoor.java | 34 +- .../oreprocessing/ProcessingOreSmelting.java | 68 +- .../loaders/oreprocessing/ProcessingPipe.java | 84 +- .../loaders/oreprocessing/ProcessingPlank.java | 104 +- .../loaders/oreprocessing/ProcessingPlate.java | 324 +- .../loaders/oreprocessing/ProcessingPure.java | 26 +- .../loaders/oreprocessing/ProcessingRawOre.java | 126 +- .../loaders/oreprocessing/ProcessingRecycling.java | 24 +- .../loaders/oreprocessing/ProcessingRotor.java | 56 +- .../loaders/oreprocessing/ProcessingRound.java | 34 +- .../loaders/oreprocessing/ProcessingSand.java | 14 +- .../loaders/oreprocessing/ProcessingSaplings.java | 28 +- .../loaders/oreprocessing/ProcessingScrew.java | 28 +- .../loaders/oreprocessing/ProcessingShaping.java | 436 +- .../loaders/oreprocessing/ProcessingSlab.java | 10 +- .../loaders/oreprocessing/ProcessingStick.java | 88 +- .../loaders/oreprocessing/ProcessingStickLong.java | 70 +- .../loaders/oreprocessing/ProcessingStone.java | 240 +- .../oreprocessing/ProcessingStoneCobble.java | 10 +- .../loaders/oreprocessing/ProcessingToolHead.java | 962 +- .../loaders/oreprocessing/ProcessingToolOther.java | 108 +- .../oreprocessing/ProcessingTransforming.java | 116 +- .../loaders/oreprocessing/ProcessingWax.java | 16 +- .../loaders/oreprocessing/ProcessingWire.java | 282 +- .../loaders/postload/BlockResistanceLoader.java | 43 + .../loaders/postload/BookAndLootLoader.java | 337 + .../loaders/postload/CraftingRecipeLoader.java | 2011 +++ .../java/gregtech/loaders/postload/CropLoader.java | 1055 ++ .../loaders/postload/FakeRecipeLoader.java | 23 + .../java/gregtech/loaders/postload/GTPostLoad.java | 537 + .../loaders/postload/GTWorldgenloader.java | 33 + .../loaders/postload/GT_BlockResistanceLoader.java | 43 - .../loaders/postload/GT_BookAndLootLoader.java | 369 - .../loaders/postload/GT_CraftingRecipeLoader.java | 2013 --- .../gregtech/loaders/postload/GT_CropLoader.java | 1055 -- .../loaders/postload/GT_FakeRecipeLoader.java | 23 - .../postload/GT_ItemMaxStacksizeLoader.java | 138 - .../loaders/postload/GT_MachineRecipeLoader.java | 126 - .../loaders/postload/GT_MachineTooltipsLoader.java | 36 - .../loaders/postload/GT_MinableRegistrator.java | 16 - .../postload/GT_PCBFactoryMaterialLoader.java | 19 - .../gregtech/loaders/postload/GT_PostLoad.java | 542 - .../postload/GT_ProcessingArrayRecipeLoader.java | 168 - .../postload/GT_RecyclerBlacklistLoader.java | 107 - .../loaders/postload/GT_ScrapboxDropLoader.java | 100 - .../loaders/postload/GT_Worldgenloader.java | 33 - .../loaders/postload/ItemMaxStacksizeLoader.java | 138 + .../loaders/postload/MachineRecipeLoader.java | 126 + .../loaders/postload/MachineTooltipsLoader.java | 36 + .../loaders/postload/MinableRegistrator.java | 16 + .../loaders/postload/PCBFactoryMaterialLoader.java | 19 + .../gregtech/loaders/postload/PartP2PGTPower.java | 6 +- .../loaders/postload/PosteaTransformers.java | 16 +- .../postload/ProcessingArrayRecipeLoader.java | 156 + .../loaders/postload/RecyclerBlacklistLoader.java | 107 + .../loaders/postload/ScrapboxDropLoader.java | 100 + .../postload/chains/BauxiteRefineChain.java | 297 + .../postload/chains/GT_BauxiteRefineChain.java | 297 - .../loaders/postload/chains/GT_NaniteChain.java | 267 - .../postload/chains/GT_PCBFactoryRecipes.java | 694 - .../postload/chains/GT_PurifiedWaterRecipes.java | 324 - .../loaders/postload/chains/NaniteChain.java | 266 + .../loaders/postload/chains/PCBFactoryRecipes.java | 687 + .../postload/chains/PurifiedWaterRecipes.java | 320 + .../postload/recipes/AlloySmelterRecipes.java | 36 +- .../postload/recipes/ArcFurnaceRecipes.java | 292 +- .../loaders/postload/recipes/AssemblerRecipes.java | 4362 +++--- .../postload/recipes/AssemblyLineRecipes.java | 441 +- .../loaders/postload/recipes/AutoclaveRecipes.java | 118 +- .../loaders/postload/recipes/BenderRecipes.java | 228 +- .../postload/recipes/BlastFurnaceRecipes.java | 235 +- .../loaders/postload/recipes/BreweryRecipes.java | 208 +- .../loaders/postload/recipes/CannerRecipes.java | 118 +- .../postload/recipes/CentrifugeRecipes.java | 452 +- .../postload/recipes/ChemicalBathRecipes.java | 205 +- .../loaders/postload/recipes/ChemicalRecipes.java | 2659 ++-- .../postload/recipes/CircuitAssemblerRecipes.java | 198 +- .../postload/recipes/CompressorRecipes.java | 129 +- .../postload/recipes/CropProcessingRecipes.java | 28 +- .../loaders/postload/recipes/CuttingRecipes.java | 48 +- .../postload/recipes/DistilleryRecipes.java | 378 +- .../postload/recipes/ElectrolyzerRecipes.java | 194 +- .../recipes/ElectromagneticSeparatorRecipes.java | 8 +- .../loaders/postload/recipes/ExtractorRecipes.java | 72 +- .../loaders/postload/recipes/ExtruderRecipes.java | 10 +- .../loaders/postload/recipes/FermenterRecipes.java | 86 +- .../postload/recipes/FluidCannerRecipes.java | 22 +- .../postload/recipes/FluidExtractorRecipes.java | 188 +- .../postload/recipes/FluidHeaterRecipes.java | 46 +- .../postload/recipes/FluidSolidifierRecipes.java | 170 +- .../postload/recipes/ForgeHammerRecipes.java | 60 +- .../postload/recipes/FormingPressRecipes.java | 76 +- .../loaders/postload/recipes/FuelRecipes.java | 82 +- .../postload/recipes/FusionReactorRecipes.java | 82 +- .../recipes/ImplosionCompressorRecipes.java | 42 +- .../postload/recipes/LaserEngraverRecipes.java | 16 +- .../loaders/postload/recipes/LatheRecipes.java | 22 +- .../postload/recipes/MatterAmplifierRecipes.java | 8 +- .../loaders/postload/recipes/MixerRecipes.java | 1077 +- .../loaders/postload/recipes/NEIHiding.java | 4 +- .../postload/recipes/OreDictUnification.java | 6 +- .../loaders/postload/recipes/PackagerRecipes.java | 28 +- .../postload/recipes/PlasmaForgeRecipes.java | 26 +- .../loaders/postload/recipes/PrinterRecipes.java | 24 +- .../loaders/postload/recipes/Pulverizer.java | 340 +- .../loaders/postload/recipes/PyrolyseRecipes.java | 70 +- .../loaders/postload/recipes/RecipeRemover.java | 118 +- .../loaders/postload/recipes/SifterRecipes.java | 18 +- .../loaders/postload/recipes/SlicerRecipes.java | 14 +- .../loaders/postload/recipes/SmelterRecipes.java | 64 +- .../postload/recipes/ThaumcraftRecipes.java | 908 +- .../postload/recipes/ThermalCentrifugeRecipes.java | 58 +- .../recipes/TranscendentPlasmaMixerRecipes.java | 38 +- .../postload/recipes/VacuumFreezerRecipes.java | 250 +- .../loaders/postload/recipes/WiremillRecipes.java | 20 +- .../java/gregtech/loaders/preload/GTPreLoad.java | 654 + .../preload/GT_Loader_CircuitBehaviors.java | 31 - .../loaders/preload/GT_Loader_ItemData.java | 393 - .../preload/GT_Loader_Item_Block_And_Fluid.java | 2127 --- .../preload/GT_Loader_MetaTileEntities.java | 13703 ------------------- .../preload/GT_Loader_MultiTileEntities.java | 4 +- .../loaders/preload/GT_Loader_OreDictionary.java | 458 - .../loaders/preload/GT_Loader_OreProcessing.java | 111 - .../java/gregtech/loaders/preload/GT_PreLoad.java | 654 - .../loaders/preload/LoaderCircuitBehaviors.java | 31 + .../loaders/preload/LoaderGTBlockFluid.java | 2121 +++ .../gregtech/loaders/preload/LoaderGTItemData.java | 384 + .../loaders/preload/LoaderGTOreDictionary.java | 456 + .../loaders/preload/LoaderMetaTileEntities.java | 13128 ++++++++++++++++++ .../loaders/preload/LoaderOreProcessing.java | 111 + src/main/java/gregtech/mixin/Mixin.java | 3 +- src/main/java/gregtech/nei/GTNEIConfig.java | 183 + .../java/gregtech/nei/GTNEIDefaultHandler.java | 801 ++ .../java/gregtech/nei/GT_NEI_DefaultHandler.java | 801 -- src/main/java/gregtech/nei/NEI_GT_Config.java | 183 - src/main/java/gregtech/nei/RecipeDisplayInfo.java | 14 +- .../nei/dumper/BatchModeSupportDumper.java | 4 +- .../nei/dumper/InputSeparationSupportDumper.java | 4 +- .../java/gregtech/nei/dumper/MaterialDumper.java | 4 +- .../java/gregtech/nei/dumper/MetaItemDumper.java | 6 +- .../gregtech/nei/dumper/MetaTileEntityDumper.java | 6 +- .../nei/dumper/MultiBlockFeatureSupportDumper.java | 14 +- .../nei/dumper/RecipeLockingSupportDumper.java | 4 +- .../nei/dumper/VoidProtectionSupportDumper.java | 4 +- .../formatter/DefaultSpecialValueFormatter.java | 10 +- .../nei/formatter/FuelSpecialValueFormatter.java | 4 +- .../nei/formatter/FusionSpecialValueFormatter.java | 14 +- .../HeatingCoilSpecialValueFormatter.java | 4 +- .../nei/formatter/INEISpecialInfoFormatter.java | 3 +- .../nei/formatter/SimpleSpecialValueFormatter.java | 4 +- src/main/java/gtPlusPlus/GTplusplus.java | 63 +- src/main/java/gtPlusPlus/api/objects/Logger.java | 24 +- .../api/objects/minecraft/BTF_Inventory.java | 10 +- .../gtPlusPlus/api/objects/minecraft/FluidGT6.java | 8 +- .../api/objects/minecraft/ItemPackage.java | 8 +- .../api/objects/minecraft/SafeTexture.java | 8 +- .../api/recipe/ChemicalPlantFrontend.java | 6 +- .../java/gtPlusPlus/api/recipe/GTPPRecipeMaps.java | 56 +- .../gtPlusPlus/api/recipe/MillingFrontend.java | 6 +- .../recipe/QuantumForceTransformerFrontend.java | 12 +- .../java/gtPlusPlus/api/recipe/TGSFrontend.java | 18 +- src/main/java/gtPlusPlus/core/block/ModBlocks.java | 48 +- .../core/block/base/BasicTileBlockWithTooltip.java | 18 +- .../core/block/base/BlockBaseModular.java | 18 +- .../gtPlusPlus/core/block/base/BlockBaseOre.java | 18 +- .../core/block/general/BlockFluidTankInfinite.java | 141 + .../core/block/general/BlockHellFire.java | 535 + .../core/block/general/BlockLightGlass.java | 137 + .../core/block/general/BlockMiningExplosives.java | 193 + .../core/block/general/BlockSuperLight.java | 2 +- .../core/block/general/FluidTankInfinite.java | 141 - .../gtPlusPlus/core/block/general/HellFire.java | 535 - .../gtPlusPlus/core/block/general/LightGlass.java | 137 - .../core/block/general/MiningExplosives.java | 193 - .../core/block/machine/BlockCircuitProgrammer.java | 153 + .../core/block/machine/BlockDecayablesChest.java | 179 + .../core/block/machine/BlockFishTrap.java | 136 + .../core/block/machine/BlockFlaskSetter.java | 157 + .../core/block/machine/BlockPestKiller.java | 137 + .../core/block/machine/BlockPooCollector.java | 177 + .../core/block/machine/BlockProjectTable.java | 160 + .../core/block/machine/BlockSuperJukebox.java | 574 + .../core/block/machine/CircuitProgrammer.java | 153 - .../core/block/machine/DecayablesChest.java | 179 - .../gtPlusPlus/core/block/machine/FishTrap.java | 136 - .../core/block/machine/Machine_PestKiller.java | 137 - .../core/block/machine/Machine_PooCollector.java | 177 - .../core/block/machine/Machine_ProjectTable.java | 160 - .../core/block/machine/Machine_SuperJukebox.java | 574 - .../core/block/machine/VolumetricFlaskSetter.java | 157 - .../core/client/renderer/RenderDecayChest.java | 4 +- .../commands/CommandEnableDebugWhileRunning.java | 6 +- .../java/gtPlusPlus/core/commands/CommandMath.java | 4 +- .../java/gtPlusPlus/core/common/CommonProxy.java | 38 +- .../core/common/compat/COMPAT_Baubles.java | 58 - .../core/common/compat/COMPAT_ExtraUtils.java | 18 - .../core/common/compat/COMPAT_HarvestCraft.java | 14 - .../gtPlusPlus/core/common/compat/COMPAT_IC2.java | 58 - .../core/common/compat/COMPAT_Thaumcraft.java | 47 - .../core/common/compat/COMPAT_Witchery.java | 28 - .../core/common/compat/CompatBaubles.java | 58 + .../core/common/compat/CompatExtraUtils.java | 18 + .../core/common/compat/CompatHarvestCraft.java | 14 + .../gtPlusPlus/core/common/compat/CompatIC2.java | 58 + .../core/common/compat/CompatThaumcraft.java | 46 + .../core/common/compat/CompatWitchery.java | 28 + .../java/gtPlusPlus/core/config/ConfigHandler.java | 8 +- .../core/container/ContainerCircuitProgrammer.java | 176 + .../core/container/ContainerFishTrap.java | 134 + .../core/container/ContainerPestKiller.java | 234 + .../core/container/ContainerProjectTable.java | 196 + .../core/container/ContainerSuperJukebox.java | 232 + .../container/ContainerVolumetricFlaskSetter.java | 170 + .../container/Container_CircuitProgrammer.java | 176 - .../core/container/Container_FishTrap.java | 134 - .../core/container/Container_PestKiller.java | 234 - .../core/container/Container_ProjectTable.java | 196 - .../core/container/Container_SuperJukebox.java | 232 - .../container/Container_VolumetricFlaskSetter.java | 170 - .../gtPlusPlus/core/creative/AddToCreativeTab.java | 14 +- .../gtPlusPlus/core/gui/GUIBaseTileEntity.java | 14 + .../gtPlusPlus/core/gui/GUI_Base_Tile_Entity.java | 14 - .../gtPlusPlus/core/gui/beta/GUIIDRegistry.java | 47 + .../java/gtPlusPlus/core/gui/beta/GUITypes.java | 10 + .../gtPlusPlus/core/gui/beta/Gui_ID_Registry.java | 47 - .../java/gtPlusPlus/core/gui/beta/Gui_Types.java | 10 - .../java/gtPlusPlus/core/gui/beta/MUGuild.java | 28 + .../java/gtPlusPlus/core/gui/beta/MU_GuiId.java | 28 - .../core/gui/machine/GUICircuitProgrammer.java | 46 + .../gtPlusPlus/core/gui/machine/GUIFishTrap.java | 52 + .../gtPlusPlus/core/gui/machine/GUIPestKiller.java | 175 + .../core/gui/machine/GUIProjectTable.java | 58 + .../core/gui/machine/GUISuperJukebox.java | 88 + .../core/gui/machine/GUIVolumetricFlaskSetter.java | 228 + .../core/gui/machine/GUI_CircuitProgrammer.java | 46 - .../gtPlusPlus/core/gui/machine/GUI_FishTrap.java | 52 - .../core/gui/machine/GUI_PestKiller.java | 175 - .../core/gui/machine/GUI_ProjectTable.java | 58 - .../core/gui/machine/GUI_SuperJukebox.java | 88 - .../gui/machine/GUI_VolumetricFlaskSetter.java | 228 - .../gtPlusPlus/core/gui/widget/GuiValueField.java | 12 +- .../core/handler/AchievementHandler.java | 34 +- .../java/gtPlusPlus/core/handler/BookHandler.java | 36 +- .../core/handler/BurnableFuelHandler.java | 4 +- .../gtPlusPlus/core/handler/COMPAT_HANDLER.java | 311 - .../core/handler/COMPAT_IntermodStaging.java | 50 - .../gtPlusPlus/core/handler/CompatHandler.java | 311 + .../core/handler/CompatIntermodStaging.java | 50 + .../java/gtPlusPlus/core/handler/GuiHandler.java | 58 +- .../gtPlusPlus/core/handler/PacketHandler.java | 8 +- .../core/handler/Recipes/DecayableRecipe.java | 6 +- .../handler/Recipes/LateRegistrationHandler.java | 4 +- .../core/handler/Recipes/RegistrationHandler.java | 16 +- .../handler/events/EnderDragonDeathHandler.java | 17 +- .../handler/events/PlayerSleepEventHandler.java | 4 +- .../workbench/WorkbenchCraftingHandler.java | 161 + .../workbench/Workbench_CraftingHandler.java | 161 - .../core/inventories/InventoryDecayablesChest.java | 153 + .../core/inventories/InventoryEggBox.java | 157 + .../core/inventories/InventorySuperJukebox.java | 154 + .../InventoryVolumetricFlaskSetter.java | 156 + .../inventories/Inventory_DecayablesChest.java | 153 - .../core/inventories/Inventory_EggBox.java | 157 - .../core/inventories/Inventory_SuperJukebox.java | 154 - .../Inventory_VolumetricFlaskSetter.java | 156 - src/main/java/gtPlusPlus/core/item/ModItems.java | 449 +- .../core/item/base/BaseItemBurnable.java | 4 +- .../core/item/base/BaseItemColourable.java | 15 +- .../core/item/base/BaseItemComponent.java | 50 +- .../gtPlusPlus/core/item/base/BaseItemTCShard.java | 12 +- .../java/gtPlusPlus/core/item/base/CoreItem.java | 6 +- .../core/item/base/cell/BaseItemCell.java | 8 +- .../core/item/base/dusts/BaseItemDustUnique.java | 18 +- .../core/item/base/ingots/BaseItemIngotHot.java | 16 +- .../core/item/base/ingots/BaseItemIngotOld.java | 106 + .../core/item/base/ingots/BaseItemIngot_OLD.java | 106 - .../core/item/base/itemblock/ItemBlockGtBlock.java | 4 +- .../core/item/base/itemblock/ItemBlockOre.java | 4 +- .../core/item/base/misc/BaseItemMisc.java | 10 +- .../core/item/base/ore/BaseItemMilledOre.java | 24 +- .../core/item/base/ore/BaseOreComponent.java | 17 +- .../core/item/base/plates/BaseItemPlate_OLD.java | 8 +- .../gtPlusPlus/core/item/bauble/BaseBauble.java | 6 +- .../core/item/bauble/BatteryPackBaseBauble.java | 4 +- .../core/item/bauble/ElectricBaseBauble.java | 14 +- .../core/item/bauble/FireProtectionBauble.java | 4 +- .../core/item/chemistry/AgriculturalChem.java | 78 +- .../gtPlusPlus/core/item/chemistry/CoalTar.java | 84 +- .../core/item/chemistry/GenericChem.java | 180 +- .../core/item/chemistry/IonParticles.java | 10 +- .../core/item/chemistry/MilledOreProcessing.java | 198 +- .../core/item/chemistry/NuclearChem.java | 16 +- .../core/item/chemistry/RocketFuels.java | 84 +- .../chemistry/general/ItemGenericChemBase.java | 6 +- .../item/circuit/GTPPIntegratedCircuitItem.java | 213 + .../item/circuit/GTPP_IntegratedCircuit_Item.java | 213 - .../core/item/food/BaseItemMetaFood.java | 6 +- .../gtPlusPlus/core/item/general/BufferCore.java | 68 - .../core/item/general/ItemBufferCore.java | 68 + .../core/item/general/ItemCloakingDevice.java | 10 +- .../core/item/general/ItemGenericToken.java | 10 +- .../core/item/general/ItemHealingDevice.java | 24 +- .../item/general/chassis/ItemDehydratorCoil.java | 4 +- .../general/chassis/ItemDehydratorCoilWire.java | 4 +- .../core/item/materials/DustDecayable.java | 8 +- .../core/item/tool/misc/GregtechPump.java | 1320 -- .../core/item/tool/misc/ItemGregtechPump.java | 1323 ++ .../core/item/wearable/armour/ArmourLoader.java | 4 +- .../wearable/armour/tinfoil/ArmourTinFoilHat.java | 179 - .../armour/tinfoil/ItemArmourTinFoilHat.java | 179 + src/main/java/gtPlusPlus/core/lib/CORE.java | 239 - src/main/java/gtPlusPlus/core/lib/GTPPCore.java | 239 + src/main/java/gtPlusPlus/core/material/ALLOY.java | 888 -- .../java/gtPlusPlus/core/material/ELEMENT.java | 651 - .../gtPlusPlus/core/material/MISC_MATERIALS.java | 592 - .../java/gtPlusPlus/core/material/Material.java | 38 +- .../core/material/MaterialGenerator.java | 124 +- .../gtPlusPlus/core/material/MaterialMisc.java | 595 + .../gtPlusPlus/core/material/MaterialStack.java | 4 +- .../gtPlusPlus/core/material/MaterialsAlloy.java | 888 ++ .../core/material/MaterialsElements.java | 651 + .../gtPlusPlus/core/material/MaterialsOres.java | 778 ++ .../gtPlusPlus/core/material/MaterialsOther.java | 42 + .../java/gtPlusPlus/core/material/NONMATERIAL.java | 42 - src/main/java/gtPlusPlus/core/material/ORES.java | 701 - .../core/material/nuclear/FLUORIDES.java | 244 - .../core/material/nuclear/MaterialsFluorides.java | 245 + .../core/material/nuclear/MaterialsNuclides.java | 317 + .../gtPlusPlus/core/material/nuclear/NUCLIDE.java | 311 - .../network/packet/PacketVolumetricFlaskGui.java | 127 + .../network/packet/PacketVolumetricFlaskGui2.java | 126 + .../network/packet/Packet_VolumetricFlaskGui.java | 127 - .../network/packet/Packet_VolumetricFlaskGui2.java | 126 - .../java/gtPlusPlus/core/proxy/ClientProxy.java | 24 +- .../core/recipe/LOADER_Machine_Components.java | 114 - .../core/recipe/LoaderMachineComponents.java | 114 + .../gtPlusPlus/core/recipe/RECIPES_GREGTECH.java | 1897 --- .../gtPlusPlus/core/recipe/RECIPES_General.java | 476 - .../core/recipe/RECIPES_LaserEngraver.java | 135 - .../core/recipe/RECIPES_MachineComponents.java | 10 - .../gtPlusPlus/core/recipe/RECIPES_Machines.java | 3505 ----- .../core/recipe/RECIPES_RareEarthProcessing.java | 168 - .../core/recipe/RECIPES_SeleniumProcessing.java | 152 - .../java/gtPlusPlus/core/recipe/RECIPES_Tools.java | 118 - .../gtPlusPlus/core/recipe/RECIPE_Batteries.java | 62 - .../gtPlusPlus/core/recipe/RecipesBatteries.java | 62 + .../gtPlusPlus/core/recipe/RecipesGeneral.java | 477 + .../gtPlusPlus/core/recipe/RecipesGregTech.java | 1898 +++ .../core/recipe/RecipesLaserEngraver.java | 135 + .../core/recipe/RecipesMachineComponents.java | 10 + .../gtPlusPlus/core/recipe/RecipesMachines.java | 3505 +++++ .../core/recipe/RecipesRareEarthProcessing.java | 168 + .../core/recipe/RecipesSeleniumProcessing.java | 154 + .../java/gtPlusPlus/core/recipe/RecipesTools.java | 118 + .../java/gtPlusPlus/core/recipe/common/CI.java | 75 +- .../java/gtPlusPlus/core/slots/SlotDataStick.java | 6 +- .../core/slots/SlotIntegratedCircuit.java | 6 +- .../core/tileentities/ModTileEntities.java | 2 +- .../core/tileentities/base/TileEntityBase.java | 64 +- .../general/TileEntityCircuitProgrammer.java | 4 +- .../general/TileEntityDecayablesChest.java | 8 +- .../tileentities/general/TileEntityFishTrap.java | 4 +- .../general/TileEntityVolumetricFlaskSetter.java | 24 +- .../machines/TileEntityPestKiller.java | 12 +- .../machines/TileEntityProjectTable.java | 10 +- src/main/java/gtPlusPlus/core/util/Utils.java | 64 +- .../java/gtPlusPlus/core/util/math/MathUtils.java | 12 +- .../core/util/minecraft/EntityUtils.java | 10 +- .../gtPlusPlus/core/util/minecraft/FluidUtils.java | 14 +- .../gtPlusPlus/core/util/minecraft/ItemUtils.java | 122 +- .../core/util/minecraft/MaterialUtils.java | 8 +- .../core/util/minecraft/MiningUtils.java | 29 +- .../gtPlusPlus/core/util/minecraft/NBTUtils.java | 12 +- .../core/util/minecraft/PlayerUtils.java | 3 +- .../core/util/minecraft/RecipeUtils.java | 50 +- .../util/minecraft/gregtech/PollutionUtils.java | 40 +- .../gtPlusPlus/core/util/recipe/GTRecipeUtils.java | 95 + .../core/util/recipe/GT_RecipeUtils.java | 95 - .../core/util/recipe/RecipeHashStrat.java | 10 +- .../core/util/reflect/AddGregtechRecipe.java | 16 +- .../java/gtPlusPlus/everglades/GTPPEverglades.java | 193 + .../everglades/GTplusplus_Everglades.java | 194 - .../everglades/biome/BiomeEverglades.java | 84 + .../everglades/biome/BiomeGenerator_Custom.java | 361 - .../everglades/biome/Biome_Everglades.java | 84 - .../everglades/biome/CustomBiomeGenerator.java | 361 + .../everglades/biome/GenLayerBiomes.java | 2 +- .../everglades/block/BlockEvergladesPortal.java | 54 +- .../everglades/block/DarkWorldContentLoader.java | 12 +- .../everglades/chunk/ChunkProviderModded.java | 11 +- .../everglades/dimension/DimensionEverglades.java | 29 + .../everglades/dimension/Dimension_Everglades.java | 29 - .../everglades/gen/WorldGenMinableCustom.java | 90 + .../everglades/gen/WorldGenMinable_Custom.java | 90 - .../gtPlusPlus/everglades/gen/gt/WorldGen_GT.java | 6 +- .../everglades/gen/gt/WorldGen_GT_Base.java | 66 +- .../everglades/gen/gt/WorldGen_GT_Ore_Layer.java | 66 +- .../everglades/gen/gt/WorldGen_Ores.java | 158 +- .../item/ItemEvergladesPortalTrigger.java | 4 +- .../everglades/world/TeleporterDimensionMod.java | 20 +- .../everglades/world/WorldProviderMod.java | 4 +- .../gtPlusPlus/nei/DecayableRecipeHandler.java | 10 +- src/main/java/gtPlusPlus/nei/GTPPNEIConfig.java | 102 + .../java/gtPlusPlus/nei/GT_NEI_LFTR_Sparging.java | 502 - .../gtPlusPlus/nei/LFTRSpargingNEIHandler.java | 493 + src/main/java/gtPlusPlus/nei/NEI_GTPP_Config.java | 102 - .../gtPlusPlus/plugin/agrichem/AgrichemCore.java | 56 + .../gtPlusPlus/plugin/agrichem/BioRecipes.java | 230 +- .../gtPlusPlus/plugin/agrichem/Core_Agrichem.java | 56 - .../plugin/fixes/vanilla/Core_VanillaFixes.java | 101 - .../fixes/vanilla/VanillaBackgroundMusicFix.java | 10 +- .../plugin/fixes/vanilla/VanillaBedHeightFix.java | 4 +- .../plugin/fixes/vanilla/VanillaFixesCore.java | 101 + .../plugin/fixes/vanilla/music/MusicTocker.java | 4 +- .../gtPlusPlus/plugin/manager/CoreManager.java | 94 + .../gtPlusPlus/plugin/manager/Core_Manager.java | 94 - .../java/gtPlusPlus/preloader/CORE_Preloader.java | 33 - .../java/gtPlusPlus/preloader/PreloaderCore.java | 33 + .../gtPlusPlus/preloader/PreloaderGTOreDict.java | 97 + .../java/gtPlusPlus/preloader/PreloaderLogger.java | 50 + .../gtPlusPlus/preloader/Preloader_GT_OreDict.java | 103 - .../gtPlusPlus/preloader/Preloader_Logger.java | 50 - .../java/gtPlusPlus/preloader/asm/AsmConfig.java | 12 +- .../preloader/asm/PreloaderDummyContainer.java | 70 + .../preloader/asm/Preloader_DummyContainer.java | 70 - .../transformers/Preloader_ClassTransformer.java | 4 +- .../Preloader_Transformer_Handler.java | 20 +- .../gtPlusPlus/recipes/CokeAndPyrolyseOven.java | 38 +- .../java/gtPlusPlus/recipes/RecipeRemovals.java | 22 +- .../xmod/bartcrops/CropsPlusPlusHandler.java | 16 + .../xmod/bartcrops/HANDLER_CropsPlusPlus.java | 16 - .../bartcrops/abstracts/BaseAestheticCrop.java | 4 +- .../bartcrops/abstracts/BaseHarvestableCrop.java | 4 +- .../java/gtPlusPlus/xmod/bartworks/BWUtils.java | 16 + .../java/gtPlusPlus/xmod/bartworks/BW_Utils.java | 17 - .../gtPlusPlus/xmod/bop/BiomesOPlentyHandler.java | 178 + .../gtPlusPlus/xmod/bop/HANDLER_BiomesOPlenty.java | 178 - .../xmod/bop/blocks/BOPBlockRegistrator.java | 172 + .../xmod/bop/blocks/BOP_Block_Registrator.java | 173 - .../xmod/bop/blocks/pine/LeavesPineTree.java | 4 +- .../xmod/bop/blocks/pine/SaplingPineTree.java | 4 +- .../blocks/rainforest/LeavesRainforestTree.java | 4 +- .../blocks/rainforest/SaplingRainforestTree.java | 6 +- .../bop/world/features/trees/WorldGenPineTree.java | 84 +- .../gtPlusPlus/xmod/forestry/ForestryHandler.java | 24 + .../xmod/forestry/ForestryTreeHandler.java | 6 +- .../java/gtPlusPlus/xmod/forestry/HANDLER_FR.java | 24 - .../xmod/forestry/bees/custom/CustomCombs.java | 8 +- .../forestry/bees/custom/GTPPBeeDefinition.java | 604 + .../xmod/forestry/bees/custom/GTPPBees.java | 172 + .../forestry/bees/custom/GTPPBranchDefinition.java | 76 + .../forestry/bees/custom/GTPP_Bee_Definition.java | 604 - .../xmod/forestry/bees/custom/GTPP_Bees.java | 172 - .../bees/custom/GTPP_Branch_Definition.java | 76 - .../xmod/forestry/bees/custom/ItemCustomComb.java | 30 +- .../xmod/forestry/bees/handler/GTPPCombType.java | 62 + .../xmod/forestry/bees/handler/GTPPDropType.java | 61 + .../xmod/forestry/bees/handler/GTPPPollenType.java | 60 + .../forestry/bees/handler/GTPPPropolisType.java | 61 + .../xmod/forestry/bees/handler/GTPP_CombType.java | 62 - .../xmod/forestry/bees/handler/GTPP_DropType.java | 61 - .../forestry/bees/handler/GTPP_PollenType.java | 60 - .../forestry/bees/handler/GTPP_PropolisType.java | 61 - .../xmod/forestry/bees/items/FRItemRegistry.java | 120 + .../xmod/forestry/bees/items/FRStringUtil.java | 14 + .../xmod/forestry/bees/items/FR_ItemRegistry.java | 120 - .../xmod/forestry/bees/items/FR_StringUtil.java | 14 - .../xmod/forestry/bees/items/MBFrameType.java | 126 + .../xmod/forestry/bees/items/MBItemFrame.java | 142 + .../xmod/forestry/bees/items/MB_FrameType.java | 126 - .../xmod/forestry/bees/items/MB_ItemFrame.java | 142 - .../xmod/forestry/bees/items/output/GTPPComb.java | 131 + .../xmod/forestry/bees/items/output/GTPPDrop.java | 131 + .../forestry/bees/items/output/GTPPPollen.java | 92 + .../forestry/bees/items/output/GTPPPropolis.java | 110 + .../xmod/forestry/bees/items/output/GTPP_Comb.java | 131 - .../xmod/forestry/bees/items/output/GTPP_Drop.java | 131 - .../forestry/bees/items/output/GTPP_Pollen.java | 92 - .../forestry/bees/items/output/GTPP_Propolis.java | 110 - .../forestry/bees/recipe/FRGregTechRecipes.java | 134 + .../forestry/bees/recipe/FR_Gregtech_Recipes.java | 134 - .../bees/registry/GTPPAlleleBeeSpecies.java | 50 + .../forestry/bees/registry/GTPPBeeMutation.java | 85 + .../bees/registry/GTPP_AlleleBeeSpecies.java | 50 - .../forestry/bees/registry/GTPP_BeeDefinition.java | 49 +- .../forestry/bees/registry/GTPP_Bee_Mutation.java | 86 - .../xmod/forestry/bees/registry/GTPP_Bees.java | 61 +- .../java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java | 98 - .../java/gtPlusPlus/xmod/gregtech/HandlerGT.java | 98 + .../xmod/gregtech/api/enums/GregtechItemList.java | 90 +- .../gregtech/api/enums/GregtechOrePrefixes.java | 142 +- .../xmod/gregtech/api/gui/GTPPUITextures.java | 139 + .../xmod/gregtech/api/gui/GTPP_UITextures.java | 139 - .../api/gui/widget/ElectricSlotWidget.java | 4 +- .../api/interfaces/GregtechItemContainer.java | 40 - .../api/interfaces/IGregtechItemContainer.java | 40 + .../api/interfaces/internal/IItemBehaviour.java | 46 + .../interfaces/internal/IOreRecipeRegistrator.java | 24 + .../api/interfaces/internal/IToolStats.java | 201 + .../internal/Interface_ItemBehaviour.java | 46 - .../internal/Interface_OreRecipeRegistrator.java | 24 - .../interfaces/internal/Interface_ToolStats.java | 202 - .../xmod/gregtech/api/items/GTGenericItem.java | 204 + .../xmod/gregtech/api/items/GTMetaItem.java | 354 + .../xmod/gregtech/api/items/GTMetaItemBase.java | 733 + .../xmod/gregtech/api/items/GTMetaItemX32.java | 266 + .../xmod/gregtech/api/items/GTMetaTool.java | 690 + .../gregtech/api/items/Gregtech_Generic_Item.java | 204 - .../xmod/gregtech/api/items/Gregtech_MetaItem.java | 357 - .../gregtech/api/items/Gregtech_MetaItem_Base.java | 745 - .../gregtech/api/items/Gregtech_MetaItem_X32.java | 266 - .../xmod/gregtech/api/items/Gregtech_MetaTool.java | 692 - .../implementations/GTPPMTECable.java | 154 + .../implementations/GTPPMTEFluid.java | 117 + .../GT_MetaTileEntity_ChiselBus.java | 78 - .../GT_MetaTileEntity_Hatch_AirIntake.java | 128 - .../GT_MetaTileEntity_Hatch_AirIntake_Extreme.java | 37 - .../GT_MetaTileEntity_Hatch_DynamoBuffer.java | 67 - ...etaTileEntity_Hatch_ElementalDataOrbHolder.java | 224 - .../GT_MetaTileEntity_Hatch_FluidGenerator.java | 255 - .../GT_MetaTileEntity_Hatch_InputBattery.java | 230 - .../GT_MetaTileEntity_Hatch_Muffler_Adv.java | 364 - .../GT_MetaTileEntity_Hatch_Naquadah.java | 203 - .../GT_MetaTileEntity_Hatch_OutputBattery.java | 217 - .../GT_MetaTileEntity_Hatch_Reservoir.java | 75 - .../GT_MetaTileEntity_Hatch_Solidifier.java | 116 - .../GT_MetaTileEntity_Hatch_Steam_BusInput.java | 274 - .../GT_MetaTileEntity_Hatch_Steam_BusOutput.java | 210 - .../GT_MetaTileEntity_Hatch_Turbine.java | 430 - .../GT_MetaTileEntity_Hatch_TurbineProvider.java | 221 - .../GT_MetaTileEntity_SuperBus_Input.java | 65 - .../GT_MetaTileEntity_SuperBus_Output.java | 113 - .../GregtechMetaPipeEntityFluid.java | 117 - .../GregtechMetaPipeEntity_Cable.java | 156 - .../GregtechMetaTreeFarmerStructural.java | 49 - .../implementations/METHatchAirIntake.java | 127 + .../implementations/MTEHatchAirIntakeExtreme.java | 32 + .../implementations/MTEHatchChiselBus.java | 78 + .../implementations/MTEHatchDynamoBuffer.java | 66 + .../MTEHatchElementalDataOrbHolder.java | 221 + .../implementations/MTEHatchFluidGenerator.java | 254 + .../implementations/MTEHatchInputBattery.java | 229 + .../implementations/MTEHatchMufflerAdvanced.java | 363 + .../implementations/MTEHatchNaquadah.java | 202 + .../implementations/MTEHatchOutputBattery.java | 216 + .../implementations/MTEHatchReservoir.java | 74 + .../implementations/MTEHatchSolidifier.java | 115 + .../implementations/MTEHatchSteamBusOutput.java | 208 + .../implementations/MTEHatchSuperBusInput.java | 65 + .../implementations/MTEHatchTurbine.java | 428 + .../implementations/MTEHatchTurbineProvider.java | 216 + .../implementations/MTESuperBusOutput.java | 113 + .../implementations/MTETreeFarmerStructural.java | 48 + .../implementations/MteHatchSteamBusInput.java | 272 + .../implementations/base/GTPPMetaTileEntity.java | 74 + .../implementations/base/GTPPMultiBlockBase.java | 1663 +++ .../GT_MetaTileEntity_Hatch_CustomFluidBase.java | 210 - .../base/GregtechMetaTileEntity.java | 74 - .../base/GregtechMetaTransformerHiAmp.java | 117 - .../base/GregtechMeta_MultiBlockBase.java | 1689 --- .../base/GregtechMeta_SteamMultiBase.java | 449 - .../base/MTEHatchCustomFluidBase.java | 210 + .../implementations/base/MTESteamMultiBase.java | 447 + .../implementations/base/MTETransformerHiAmp.java | 118 + .../base/generators/GregtechMetaBoilerBase.java | 361 - .../generators/GregtechMetaSolarGenerator.java | 241 - .../GregtechRocketFuelGeneratorBase.java | 333 - .../base/generators/MTEBoilerBase.java | 360 + .../generators/MTERocketFuelGeneratorBase.java | 333 + .../base/generators/MTESolarGenerator.java | 241 + .../base/machines/GregtechMetaTreeFarmerBase.java | 180 - .../base/machines/MTETreeFarmerBase.java | 180 + .../GT_MetaTileEntity_Hatch_Catalysts.java | 71 - .../GT_MetaTileEntity_Hatch_MillingBalls.java | 71 - .../GT_MetaTileEntity_Hatch_NbtConsumable.java | 348 - .../nbthandlers/MTEHatchCatalysts.java | 71 + .../nbthandlers/MTEHatchMillingBalls.java | 71 + .../nbthandlers/MTEHatchNbtConsumable.java | 347 + .../api/objects/GTPPCopiedBlockTexture.java | 28 + .../gregtech/api/objects/GTPPRenderedTexture.java | 27 + .../api/objects/GTPP_CopiedBlockTexture.java | 28 - .../gregtech/api/objects/GTPP_RenderedTexture.java | 27 - .../gregtech/api/objects/GregtechItemData.java | 4 +- .../xmod/gregtech/api/util/GTPPConfig.java | 123 + .../xmod/gregtech/api/util/GTPP_Config.java | 123 - .../api/util/SpecialBehaviourTooltipHandler.java | 4 +- .../xmod/gregtech/common/MetaGTProxy.java | 96 + .../xmod/gregtech/common/Meta_GT_Proxy.java | 96 - .../common/blocks/GregtechMetaCasingBlocks.java | 43 +- .../common/blocks/GregtechMetaCasingBlocks2.java | 44 +- .../common/blocks/GregtechMetaCasingBlocks3.java | 53 +- .../common/blocks/GregtechMetaCasingBlocks4.java | 24 +- .../common/blocks/GregtechMetaCasingBlocks5.java | 63 +- .../common/blocks/GregtechMetaCasingBlocks6.java | 20 +- .../blocks/GregtechMetaCasingBlocksAbstract.java | 20 +- .../GregtechMetaCasingBlocksPipeGearbox.java | 73 +- .../blocks/GregtechMetaItemCasingsAbstract.java | 14 +- .../blocks/GregtechMetaSpecialMachineCasings.java | 19 +- .../blocks/GregtechMetaSpecialMultiCasings.java | 45 +- .../blocks/GregtechMetaSpecialMultiCasings2.java | 22 +- .../blocks/GregtechMetaTieredCasingBlocks1.java | 30 +- .../common/blocks/fluid/GregtechFluidHandler.java | 20 +- .../textures/TexturesCentrifugeMultiblock.java | 10 +- .../blocks/textures/TexturesGrinderMultiblock.java | 4 +- .../common/blocks/textures/TexturesGtBlock.java | 32 +- .../common/blocks/textures/TexturesGtTools.java | 8 +- .../turbine/LargeTurbineTextureHandler.java | 44 +- .../xmod/gregtech/common/covers/CoverOverflow.java | 198 + .../gregtech/common/covers/CoverToggleVisual.java | 184 + .../common/covers/GTPP_Cover_Overflow.java | 198 - .../common/covers/GTPP_Cover_ToggleVisual.java | 184 - .../gregtech/common/helpers/ChargingHelper.java | 68 +- .../common/helpers/FlotationRecipeHandler.java | 8 +- .../gregtech/common/helpers/GTMethodHelper.java | 19 + .../gregtech/common/helpers/GT_MethodHelper.java | 19 - .../common/helpers/VolumetricFlaskHelper.java | 8 +- .../common/helpers/tesseract/TesseractHelper.java | 76 +- .../items/Ids_MetaGeneratedGregtechItems.java | 47 - .../gregtech/common/items/MetaCustomCoverItem.java | 14 +- .../common/items/MetaGeneratedGregtechItems.java | 288 +- .../common/items/MetaGeneratedGregtechTools.java | 34 +- .../common/items/MetaGeneratedItemIDs.java | 47 + .../items/behaviours/Behaviour_Choocher.java | 24 +- .../behaviours/Behaviour_Electric_Lighter.java | 52 +- .../items/behaviours/Behaviour_Prospecting_Ex.java | 62 +- .../common/items/covers/MetaItemCoverCasings.java | 4 +- .../xmod/gregtech/common/render/CapeRenderer.java | 500 + .../xmod/gregtech/common/render/FlaskRenderer.java | 107 + .../gregtech/common/render/GTPP_CapeRenderer.java | 500 - .../gregtech/common/render/GTPP_FlaskRenderer.java | 107 - .../common/render/GTPP_Render_MachineBlock.java | 1250 -- .../common/render/MachineBlockRenderer.java | 1250 ++ .../GT_MetaTileEntity_ElectricAutoWorkbench.java | 868 -- .../GT_MetaTileEntity_TesseractGenerator.java | 833 -- .../GT_MetaTileEntity_TesseractTerminal.java | 643 - .../automation/MTEElectricAutoWorkbench.java | 864 ++ .../automation/MTETesseractGenerator.java | 832 ++ .../automation/MTETesseractTerminal.java | 642 + .../generators/GT_MetaTileEntity_Boiler_Base.java | 332 - .../generators/GT_MetaTileEntity_Boiler_HV.java | 51 - .../generators/GT_MetaTileEntity_Boiler_LV.java | 51 - .../generators/GT_MetaTileEntity_Boiler_MV.java | 51 - .../GT_MetaTileEntity_SemiFluidGenerator.java | 162 - .../GregtechMetaTileEntityGeothermalGenerator.java | 171 - .../GregtechMetaTileEntityRocketFuelGenerator.java | 145 - .../generators/GregtechMetaTileEntity_RTG.java | 379 - .../tileentities/generators/MTEBoilerBase.java | 332 + .../tileentities/generators/MTEBoilerHV.java | 51 + .../tileentities/generators/MTEBoilerLV.java | 51 + .../tileentities/generators/MTEBoilerMV.java | 51 + .../generators/MTEGeothermalGenerator.java | 166 + .../tileentities/generators/MTERTGenerator.java | 379 + .../generators/MTERocketFuelGenerator.java | 140 + .../generators/MTESemiFluidGenerator.java | 161 + .../basic/GT_MetaTileEntity_CropHarvestor.java | 706 - .../GregtechMetaAtmosphericReconditioner.java | 889 -- .../basic/GregtechMetaPollutionCreator.java | 458 - .../basic/GregtechMetaPollutionDetector.java | 502 - .../basic/GregtechMetaTileEntity_AutoChisel.java | 185 - .../basic/GregtechMetaWirelessCharger.java | 672 - .../basic/MTEAtmosphericReconditioner.java | 887 ++ .../tileentities/machines/basic/MTEAutoChisel.java | 184 + .../machines/basic/MTECropHarvestor.java | 706 + .../machines/basic/MTEPollutionCreator.java | 459 + .../machines/basic/MTEPollutionDetector.java | 503 + .../machines/basic/MTEWirelessCharger.java | 672 + .../machines/multi/misc/GMTE_AmazonPackager.java | 248 - .../machines/multi/misc/MTEAmazonPackager.java | 246 + ...gtechMetaTileEntity_IndustrialAlloySmelter.java | 223 - ...regtechMetaTileEntity_IndustrialArcFurnace.java | 359 - ...regtechMetaTileEntity_IndustrialCentrifuge.java | 228 - .../GregtechMetaTileEntity_IndustrialChisel.java | 342 - .../GregtechMetaTileEntity_IndustrialCokeOven.java | 209 - ...echMetaTileEntity_IndustrialCuttingMachine.java | 270 - ...regtechMetaTileEntity_IndustrialDehydrator.java | 278 - ...gtechMetaTileEntity_IndustrialElectrolyzer.java | 169 - .../GregtechMetaTileEntity_IndustrialExtruder.java | 194 - ...egtechMetaTileEntity_IndustrialFluidHeater.java | 204 - ...egtechMetaTileEntity_IndustrialForgeHammer.java | 244 - ...GregtechMetaTileEntity_IndustrialMacerator.java | 390 - .../GregtechMetaTileEntity_IndustrialMixer.java | 211 - ...aTileEntity_IndustrialMolecularTransformer.java | 241 - ...gtechMetaTileEntity_IndustrialMultiMachine.java | 541 - ...regtechMetaTileEntity_IndustrialPlatePress.java | 262 - .../GregtechMetaTileEntity_IndustrialSifter.java | 209 - ...MetaTileEntity_IndustrialThermalCentrifuge.java | 184 - ...techMetaTileEntity_IndustrialVacuumFreezer.java | 256 - ...GregtechMetaTileEntity_IndustrialWashPlant.java | 425 - .../GregtechMetaTileEntity_IndustrialWireMill.java | 213 - .../processing/GregtechMetaTileEntity_IsaMill.java | 529 - ...hMetaTileEntity_NuclearSaltProcessingPlant.java | 224 - .../GregtechMetaTileEntity_SpargeTower.java | 507 - .../processing/MTEIndustrialAlloySmelter.java | 221 + .../multi/processing/MTEIndustrialArcFurnace.java | 359 + .../multi/processing/MTEIndustrialCentrifuge.java | 228 + .../multi/processing/MTEIndustrialChisel.java | 340 + .../multi/processing/MTEIndustrialCokeOven.java | 208 + .../processing/MTEIndustrialCuttingMachine.java | 269 + .../multi/processing/MTEIndustrialDehydrator.java | 274 + .../multi/processing/MTEIndustrialExtruder.java | 193 + .../multi/processing/MTEIndustrialFluidHeater.java | 204 + .../multi/processing/MTEIndustrialForgeHammer.java | 244 + .../multi/processing/MTEIndustrialMacerator.java | 389 + .../multi/processing/MTEIndustrialMixer.java | 210 + .../MTEIndustrialMolecularTransformer.java | 239 + .../processing/MTEIndustrialMultiMachine.java | 540 + .../multi/processing/MTEIndustrialPlatePress.java | 262 + .../multi/processing/MTEIndustrialSifter.java | 208 + .../processing/MTEIndustrialThermalCentrifuge.java | 183 + .../processing/MTEIndustrialVacuumFreezer.java | 254 + .../multi/processing/MTEIndustrialWashPlant.java | 425 + .../multi/processing/MTEIndustrialWireMill.java | 212 + .../machines/multi/processing/MTEIsaMill.java | 527 + .../processing/MTENuclearSaltProcessingPlant.java | 222 + .../machines/multi/processing/MTESpargeTower.java | 498 + .../multi/processing/MTEndustrialElectrolyzer.java | 168 + ...egtechMetaTileEntity_Adv_DistillationTower.java | 519 - .../advanced/GregtechMetaTileEntity_Adv_EBF.java | 328 - .../GregtechMetaTileEntity_Adv_Fusion_MK4.java | 200 - .../GregtechMetaTileEntity_Adv_Fusion_MK5.java | 200 - .../GregtechMetaTileEntity_Adv_HeatExchanger.java | 409 - .../GregtechMetaTileEntity_Adv_Implosion.java | 177 - .../advanced/MTEAdvDistillationTower.java | 504 + .../multi/processing/advanced/MTEAdvEBF.java | 323 + .../multi/processing/advanced/MTEAdvFusionMk4.java | 200 + .../multi/processing/advanced/MTEAdvFusionMk5.java | 200 + .../processing/advanced/MTEAdvHeatExchanger.java | 396 + .../advanced/MTEAdvImplosionCompressor.java | 176 + .../GregtechMetaTileEntity_SteamCentrifuge.java | 419 - .../GregtechMetaTileEntity_SteamCompressor.java | 352 - .../GregtechMetaTileEntity_SteamForgeHammer.java | 409 - .../GregtechMetaTileEntity_SteamMacerator.java | 354 - .../steam/GregtechMetaTileEntity_SteamMixer.java | 458 - .../steam/GregtechMetaTileEntity_SteamWasher.java | 552 - .../GregtechMetaTileEntity_SteamWaterPump.java | 374 - .../multi/processing/steam/MTESteamCentrifuge.java | 418 + .../multi/processing/steam/MTESteamCompressor.java | 351 + .../processing/steam/MTESteamForgeHammer.java | 408 + .../multi/processing/steam/MTESteamMacerator.java | 353 + .../multi/processing/steam/MTESteamMixer.java | 457 + .../multi/processing/steam/MTESteamWasher.java | 551 + .../multi/processing/steam/MTESteamWaterPump.java | 373 + .../multi/production/GT4Entity_AutoCrafter.java | 196 - .../multi/production/GT4Entity_ThermalBoiler.java | 353 - .../GregtechMTE_ElementalDuplicator.java | 352 - .../production/GregtechMTE_FrothFlotationCell.java | 287 - .../production/GregtechMTE_NuclearReactor.java | 525 - .../production/GregtechMetaTileEntityTreeFarm.java | 823 -- .../GregtechMetaTileEntity_AlloyBlastSmelter.java | 233 - .../GregtechMetaTileEntity_Cyclotron.java | 338 - ...egtechMetaTileEntity_IndustrialFishingPond.java | 488 - ...egtechMetaTileEntity_IndustrialRockBreaker.java | 366 - .../GregtechMetaTileEntity_LargeRocketEngine.java | 524 - ...techMetaTileEntity_LargeSemifluidGenerator.java | 332 - .../GregtechMetaTileEntity_MassFabricator.java | 361 - ...techMetaTileEntity_QuantumForceTransformer.java | 945 -- .../GregtechMetaTileEntity_Refinery.java | 220 - .../GregtechMetaTileEntity_SolarTower.java | 675 - .../multi/production/MTEAlloyBlastSmelter.java | 232 + .../machines/multi/production/MTEAutoCrafter.java | 195 + .../machines/multi/production/MTECyclotron.java | 337 + .../multi/production/MTEElementalDuplicator.java | 352 + .../multi/production/MTEFrothFlotationCell.java | 286 + .../multi/production/MTEIndustrialFishingPond.java | 488 + .../multi/production/MTEIndustrialRockBreaker.java | 366 + .../multi/production/MTELargeRocketEngine.java | 523 + .../production/MTELargeSemifluidGenerator.java | 331 + .../multi/production/MTEMassFabricator.java | 360 + .../multi/production/MTENuclearReactor.java | 521 + .../production/MTEQuantumForceTransformer.java | 939 ++ .../machines/multi/production/MTERefinery.java | 218 + .../machines/multi/production/MTESolarTower.java | 672 + .../multi/production/MTEThermalBoiler.java | 352 + .../machines/multi/production/MTETreeFarm.java | 823 ++ .../algae/GregtechMTE_AlgaePondBase.java | 393 - .../multi/production/algae/MTEAlgaePondBase.java | 392 + .../chemplant/GregtechMTE_ChemicalPlant.java | 676 - .../production/chemplant/MTEChemicalPlant.java | 670 + ...egTechMetaTileEntity_MegaAlloyBlastSmelter.java | 497 - .../production/mega/MTEMegaAlloyBlastSmelter.java | 494 + .../turbines/GT_MTE_LargeTurbine_Gas.java | 208 - .../turbines/GT_MTE_LargeTurbine_Plasma.java | 314 - .../turbines/GT_MTE_LargeTurbine_SCSteam.java | 126 - .../turbines/GT_MTE_LargeTurbine_SHSteam.java | 204 - .../turbines/GT_MTE_LargeTurbine_Steam.java | 215 - .../GregtechMetaTileEntity_LargerTurbineBase.java | 886 -- .../production/turbines/MTELargeTurbineGas.java | 208 + .../production/turbines/MTELargeTurbinePlasma.java | 315 + .../turbines/MTELargeTurbineSCSteam.java | 126 + .../turbines/MTELargeTurbineSHSteam.java | 204 + .../production/turbines/MTELargeTurbineSteam.java | 215 + .../production/turbines/MTELargerTurbineBase.java | 884 ++ ...chMetaTileEntity_PowerSubStationController.java | 100 +- .../common/tileentities/misc/MTESolarHeater.java | 343 + .../tileentities/misc/TileEntitySolarHeater.java | 343 - .../redstone/GT_MetaTileEntity_RedstoneBase.java | 111 - .../GT_MetaTileEntity_RedstoneButtonPanel.java | 205 - .../GT_MetaTileEntity_RedstoneCircuitBlock.java | 654 - .../redstone/GT_MetaTileEntity_RedstoneLamp.java | 73 - .../GT_MetaTileEntity_RedstoneStrengthDisplay.java | 139 - .../GT_MetaTileEntity_RedstoneStrengthScale.java | 54 - .../tileentities/redstone/MTERedstoneBase.java | 111 + .../redstone/MTERedstoneButtonPanel.java | 204 + .../redstone/MTERedstoneCircuitBlock.java | 652 + .../tileentities/redstone/MTERedstoneLamp.java | 73 + .../redstone/MTERedstoneStrengthDisplay.java | 138 + .../redstone/MTERedstoneStrengthScale.java | 53 + .../storage/GT_MetaTileEntity_TieredChest.java | 245 - .../storage/GT_MetaTileEntity_TieredTank.java | 189 - .../storage/GregtechMetaEnergyBuffer.java | 439 - .../tileentities/storage/MTEEnergyBuffer.java | 434 + .../tileentities/storage/MTETieredChest.java | 245 + .../common/tileentities/storage/MTETieredTank.java | 188 + .../GT_MetaTileEntity_InfiniteItemHolder.java | 92 - .../storage/creative/MTEInfiniteItemHolder.java | 91 + .../common/tools/TOOL_Gregtech_AngleGrinder.java | 175 - .../common/tools/TOOL_Gregtech_ElectricSnips.java | 96 - .../gregtech/common/tools/ToolAngleGrinder.java | 175 + .../gregtech/common/tools/ToolElectricSnips.java | 96 + .../xmod/gregtech/loaders/GTPPBlocks.java | 34 + .../xmod/gregtech/loaders/Gregtech_Blocks.java | 34 - .../gregtech/loaders/ProcessingAngleGrinder.java | 30 +- .../gregtech/loaders/ProcessingElectricSnips.java | 32 +- .../gregtech/loaders/RecipeGenAlloySmelter.java | 69 + .../xmod/gregtech/loaders/RecipeGenAssembler.java | 85 + .../xmod/gregtech/loaders/RecipeGenBase.java | 15 + .../gregtech/loaders/RecipeGenBlastSmelter.java | 308 + .../loaders/RecipeGenBlastSmelterGTNH.java | 252 + .../gregtech/loaders/RecipeGenDustGeneration.java | 471 + .../xmod/gregtech/loaders/RecipeGenExtruder.java | 159 + .../gregtech/loaders/RecipeGenFluidCanning.java | 222 + .../xmod/gregtech/loaders/RecipeGenFluids.java | 209 + .../xmod/gregtech/loaders/RecipeGenFluorite.java | 271 + .../loaders/RecipeGenMaterialProcessing.java | 313 + .../gregtech/loaders/RecipeGenMetalRecipe.java | 121 + .../RecipeGenMultisUsingFluidInsteadOfCells.java | 187 + .../xmod/gregtech/loaders/RecipeGenOre.java | 725 + .../xmod/gregtech/loaders/RecipeGenPlasma.java | 90 + .../xmod/gregtech/loaders/RecipeGenPlates.java | 180 + .../xmod/gregtech/loaders/RecipeGenRecycling.java | 375 + .../gregtech/loaders/RecipeGenShapedCrafting.java | 210 + .../gregtech/loaders/RecipeGen_AlloySmelter.java | 69 - .../xmod/gregtech/loaders/RecipeGen_Assembler.java | 85 - .../xmod/gregtech/loaders/RecipeGen_Base.java | 15 - .../gregtech/loaders/RecipeGen_BlastSmelter.java | 307 - .../loaders/RecipeGen_BlastSmelterGT_GTNH.java | 252 - .../gregtech/loaders/RecipeGen_DustGeneration.java | 471 - .../xmod/gregtech/loaders/RecipeGen_Extruder.java | 159 - .../gregtech/loaders/RecipeGen_FluidCanning.java | 222 - .../xmod/gregtech/loaders/RecipeGen_Fluids.java | 209 - .../xmod/gregtech/loaders/RecipeGen_Fluorite.java | 271 - .../loaders/RecipeGen_MaterialProcessing.java | 313 - .../gregtech/loaders/RecipeGen_MetalRecipe.java | 121 - .../RecipeGen_MultisUsingFluidInsteadOfCells.java | 187 - .../xmod/gregtech/loaders/RecipeGen_Ore.java | 725 - .../xmod/gregtech/loaders/RecipeGen_Plasma.java | 90 - .../xmod/gregtech/loaders/RecipeGen_Plates.java | 180 - .../xmod/gregtech/loaders/RecipeGen_Recycling.java | 375 - .../gregtech/loaders/RecipeGen_ShapedCrafting.java | 222 - .../loaders/misc/AddCustomMachineToPA.java | 4 +- .../loaders/recipe/RecipeLoaderAlgaeFarm.java | 192 + .../loaders/recipe/RecipeLoaderChemicalSkips.java | 822 ++ .../gregtech/loaders/recipe/RecipeLoaderGTNH.java | 56 + .../loaders/recipe/RecipeLoaderGlueLine.java | 424 + .../gregtech/loaders/recipe/RecipeLoaderLFTR.java | 133 + .../recipe/RecipeLoaderMolecularTransformer.java | 88 + .../loaders/recipe/RecipeLoaderNuclear.java | 763 ++ .../recipe/RecipeLoaderNuclearFuelProcessing.java | 261 + .../loaders/recipe/RecipeLoaderTreeFarm.java | 632 + .../loaders/recipe/RecipeLoader_AlgaeFarm.java | 192 - .../loaders/recipe/RecipeLoader_ChemicalSkips.java | 818 -- .../gregtech/loaders/recipe/RecipeLoader_GTNH.java | 56 - .../loaders/recipe/RecipeLoader_GlueLine.java | 426 - .../gregtech/loaders/recipe/RecipeLoader_LFTR.java | 133 - .../recipe/RecipeLoader_MolecularTransformer.java | 88 - .../loaders/recipe/RecipeLoader_Nuclear.java | 761 - .../recipe/RecipeLoader_NuclearFuelProcessing.java | 255 - .../loaders/recipe/RecipeLoader_TreeFarm.java | 632 - .../registration/gregtech/Gregtech4Content.java | 106 +- .../gregtech/GregtechAdvancedBoilers.java | 78 +- .../gregtech/GregtechAlgaeContent.java | 33 +- .../gregtech/GregtechAmazonWarehouse.java | 4 +- .../gregtech/GregtechBufferDynamos.java | 44 +- .../registration/gregtech/GregtechConduits.java | 352 +- .../gregtech/GregtechCustomHatches.java | 106 +- .../registration/gregtech/GregtechCyclotron.java | 9 +- .../registration/gregtech/GregtechDehydrator.java | 80 +- .../gregtech/GregtechEnergyBuffer.java | 117 +- .../GregtechFactoryGradeReplacementMultis.java | 31 +- .../GregtechGeothermalThermalGenerator.java | 46 +- .../gregtech/GregtechHiAmpTransformer.java | 54 +- .../gregtech/GregtechIndustrialAlloySmelter.java | 4 +- .../gregtech/GregtechIndustrialArcFurnace.java | 4 +- .../gregtech/GregtechIndustrialBlastSmelter.java | 12 +- .../gregtech/GregtechIndustrialCentrifuge.java | 8 +- .../gregtech/GregtechIndustrialChisel.java | 21 +- .../gregtech/GregtechIndustrialCokeOven.java | 8 +- .../gregtech/GregtechIndustrialCuttingFactory.java | 8 +- .../gregtech/GregtechIndustrialElectrolyzer.java | 8 +- .../GregtechIndustrialElementDuplicator.java | 8 +- .../gregtech/GregtechIndustrialExtruder.java | 8 +- .../gregtech/GregtechIndustrialFishPond.java | 4 +- .../gregtech/GregtechIndustrialFluidHeater.java | 4 +- .../gregtech/GregtechIndustrialForgeHammer.java | 4 +- .../gregtech/GregtechIndustrialFuelRefinery.java | 8 +- .../gregtech/GregtechIndustrialMacerator.java | 8 +- .../gregtech/GregtechIndustrialMassFabricator.java | 40 +- .../gregtech/GregtechIndustrialMixer.java | 8 +- .../gregtech/GregtechIndustrialMultiMachine.java | 8 +- .../gregtech/GregtechIndustrialPlatePress.java | 8 +- .../gregtech/GregtechIndustrialRockBreaker.java | 4 +- .../gregtech/GregtechIndustrialSifter.java | 8 +- .../GregtechIndustrialThermalCentrifuge.java | 8 +- .../gregtech/GregtechIndustrialTreeFarm.java | 12 +- .../gregtech/GregtechIndustrialWashPlant.java | 8 +- .../gregtech/GregtechIndustrialWiremill.java | 8 +- .../registration/gregtech/GregtechIsaMill.java | 19 +- .../registration/gregtech/GregtechLFTR.java | 36 +- .../GregtechLargeTurbinesAndHeatExchanger.java | 39 +- .../gregtech/GregtechMolecularTransformer.java | 4 +- .../GregtechNuclearSaltProcessingPlant.java | 8 +- .../gregtech/GregtechPollutionDevices.java | 32 +- .../gregtech/GregtechPowerSubStation.java | 36 +- .../gregtech/GregtechQuantumForceTransformer.java | 8 +- .../registration/gregtech/GregtechRTG.java | 9 +- .../gregtech/GregtechRedstoneButtonPanel.java | 8 +- .../gregtech/GregtechRedstoneCircuitBlock.java | 9 +- .../gregtech/GregtechRedstoneLamp.java | 8 +- .../gregtech/GregtechRedstoneStrengthDisplay.java | 8 +- .../gregtech/GregtechRedstoneStrengthScale.java | 9 +- .../gregtech/GregtechRocketFuelGenerator.java | 58 +- .../gregtech/GregtechSemiFluidgenerators.java | 16 +- .../gregtech/GregtechSimpleWasher.java | 36 +- .../registration/gregtech/GregtechSolarTower.java | 22 +- .../registration/gregtech/GregtechSteamMultis.java | 45 +- .../registration/gregtech/GregtechSuperChests.java | 37 +- .../gregtech/GregtechThaumcraftDevices.java | 4 +- .../gregtech/GregtechThreadedBuffers.java | 9 +- .../gregtech/GregtechTieredFluidTanks.java | 36 +- .../gregtech/GregtechTreeFarmerTE.java | 8 +- .../registration/gregtech/GregtechWaterPump.java | 7 +- .../gregtech/GregtechWirelessChargers.java | 20 +- src/main/java/gtPlusPlus/xmod/ic2/HANDLER_IC2.java | 15 - src/main/java/gtPlusPlus/xmod/ic2/HandlerIC2.java | 15 + .../java/gtPlusPlus/xmod/ic2/item/IC2Items.java | 77 + .../java/gtPlusPlus/xmod/ic2/item/IC2_Items.java | 77 - .../gtPlusPlus/xmod/ic2/recipe/RECIPE_IC2.java | 357 - .../java/gtPlusPlus/xmod/ic2/recipe/RecipeIC2.java | 349 + .../xmod/pamsharvest/fishtrap/FishTrapHandler.java | 18 +- .../xmod/railcraft/HANDLER_Railcraft.java | 218 - .../xmod/railcraft/HandlerRailcraft.java | 218 + .../xmod/thermalfoundation/HANDLER_TF.java | 36 - .../xmod/thermalfoundation/HandlerTF.java | 36 + .../block/TFBlockFluidCryotheum.java | 178 + .../thermalfoundation/block/TFBlockFluidEnder.java | 61 + .../block/TFBlockFluidPyrotheum.java | 192 + .../xmod/thermalfoundation/block/TFBlocks.java | 23 + .../block/TF_Block_Fluid_Cryotheum.java | 178 - .../block/TF_Block_Fluid_Ender.java | 61 - .../block/TF_Block_Fluid_Pyrotheum.java | 192 - .../xmod/thermalfoundation/block/TF_Blocks.java | 23 - .../xmod/thermalfoundation/fluid/TFFluids.java | 29 + .../xmod/thermalfoundation/fluid/TF_Fluids.java | 29 - .../xmod/thermalfoundation/item/TFItems.java | 75 + .../xmod/thermalfoundation/item/TF_Items.java | 75 - .../recipe/TFGregtechRecipes.java | 93 + .../recipe/TF_Gregtech_Recipes.java | 93 - .../gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java | 30 - .../gtPlusPlus/xmod/tinkers/HandlerTinkers.java | 30 + .../xmod/tinkers/material/BaseTinkersMaterial.java | 4 +- .../xmod/tinkers/util/TinkersDryingRecipe.java | 8 +- src/main/java/gtneioreplugin/Config.java | 28 + src/main/java/gtneioreplugin/GTNEIOrePlugin.java | 84 + src/main/java/gtneioreplugin/plugin/IMCForNEI.java | 52 + .../gtneioreplugin/plugin/NEIPluginConfig.java | 35 + .../java/gtneioreplugin/plugin/PluginBase.java | 52 + .../plugin/block/BlockDimensionDisplay.java | 47 + .../gtneioreplugin/plugin/block/ModBlocks.java | 27 + .../plugin/gregtech5/PluginGT5Base.java | 65 + .../plugin/gregtech5/PluginGT5SmallOreStat.java | 208 + .../gregtech5/PluginGT5UndergroundFluid.java | 168 + .../plugin/gregtech5/PluginGT5VeinStat.java | 212 + .../plugin/item/ItemDimensionDisplay.java | 55 + .../renderer/ItemDimensionDisplayRenderer.java | 78 + src/main/java/gtneioreplugin/util/CSVMaker.java | 119 + .../java/gtneioreplugin/util/DimensionHelper.java | 351 + .../gtneioreplugin/util/GT5OreLayerHelper.java | 123 + .../gtneioreplugin/util/GT5OreSmallHelper.java | 197 + .../util/GT5UndergroundFluidHelper.java | 147 + .../java/gtneioreplugin/util/OreVeinLayer.java | 18 + src/main/java/gtneioreplugin/util/Oremix.java | 120 + src/main/java/gtneioreplugin/util/SmallOre.java | 82 + .../gtneioreplugin/util/StringPaddingHack.java | 131 + src/main/java/gtnhlanth/GTNHLanthanides.java | 80 + src/main/java/gtnhlanth/Tags.java | 11 + .../api/recipe/LanthanidesRecipeMaps.java | 25 + src/main/java/gtnhlanth/client/ClientProxy.java | 6 + src/main/java/gtnhlanth/common/CommonProxy.java | 14 + .../gtnhlanth/common/beamline/BeamInformation.java | 51 + .../gtnhlanth/common/beamline/BeamLinePacket.java | 51 + .../common/beamline/IConnectsToBeamline.java | 14 + .../gtnhlanth/common/beamline/MTEBeamlinePipe.java | 256 + .../java/gtnhlanth/common/beamline/Particle.java | 71 + .../gtnhlanth/common/block/BlockAntennaCasing.java | 15 + .../java/gtnhlanth/common/block/BlockCasing.java | 79 + .../common/block/BlockShieldedAccGlass.java | 73 + .../gtnhlanth/common/hatch/MTEBusInputFocus.java | 84 + .../common/hatch/MTEHatchBeamlineConnector.java | 134 + .../common/hatch/MTEHatchInputBeamline.java | 130 + .../common/hatch/MTEHatchOutputBeamline.java | 137 + src/main/java/gtnhlanth/common/item/ICanFocus.java | 5 + src/main/java/gtnhlanth/common/item/ItemLanth.java | 15 + .../java/gtnhlanth/common/item/ItemParticle.java | 123 + .../common/item/ItemPhotolithographicMask.java | 42 + src/main/java/gtnhlanth/common/item/MaskList.java | 162 + .../common/register/BotWerkstoffMaterialPool.java | 88 + .../gtnhlanth/common/register/LanthItemList.java | 174 + .../common/register/WerkstoffMaterialPool.java | 2032 +++ .../gtnhlanth/common/tileentity/MTEDigester.java | 240 + .../common/tileentity/MTEDissolutionTank.java | 264 + .../java/gtnhlanth/common/tileentity/MTELINAC.java | 749 + .../common/tileentity/MTESourceChamber.java | 409 + .../common/tileentity/MTESynchrotron.java | 1077 ++ .../common/tileentity/MTETargetChamber.java | 480 + .../recipe/beamline/BeamlineRecipeAdder2.java | 165 + .../recipe/beamline/BeamlineRecipeLoader.java | 193 + .../tileentity/recipe/beamline/RecipeSC.java | 52 + .../tileentity/recipe/beamline/RecipeTC.java | 71 + .../recipe/beamline/SourceChamberFrontend.java | 24 + .../recipe/beamline/TargetChamberFrontend.java | 109 + src/main/java/gtnhlanth/loader/BotRecipes.java | 262 + src/main/java/gtnhlanth/loader/MTELoader.java | 4 + src/main/java/gtnhlanth/loader/RecipeLoader.java | 4503 ++++++ .../java/gtnhlanth/loader/ZPMRubberChanges.java | 408 + .../java/gtnhlanth/util/DescTextLocalization.java | 24 + src/main/java/gtnhlanth/util/Util.java | 55 + src/main/java/gtnhlanth/xmod/nei/NEIConfig.java | 26 + src/main/java/kekztech/Items.java | 9 +- src/main/java/kekztech/KekzCore.java | 4 +- src/main/java/kekztech/ServerProxy.java | 2 +- src/main/java/kekztech/client/ClientProxy.java | 18 + .../java/kekztech/client/gui/KTUITextures.java | 21 + src/main/java/kekztech/common/Blocks.java | 61 + src/main/java/kekztech/common/CommonProxy.java | 46 + src/main/java/kekztech/common/Recipes.java | 143 + src/main/java/kekztech/common/Researches.java | 71 + src/main/java/kekztech/common/TileEntities.java | 56 + .../common/blocks/BaseGTUpdateableBlock.java | 57 + .../java/kekztech/common/blocks/BlockGDCUnit.java | 29 + .../java/kekztech/common/blocks/BlockIchorJar.java | 229 + .../common/blocks/BlockLapotronicEnergyUnit.java | 172 + .../kekztech/common/blocks/BlockLargeHexPlate.java | 65 + .../common/blocks/BlockTFFTStorageField.java | 91 + .../common/blocks/BlockThaumiumReinforcedJar.java | 251 + .../java/kekztech/common/blocks/BlockYSZUnit.java | 29 + .../common/itemBlocks/ItemBlockIchorJar.java | 27 + .../itemBlocks/ItemBlockLapotronicEnergyUnit.java | 190 + .../itemBlocks/ItemBlockTFFTStorageField.java | 63 + .../itemBlocks/ItemBlockThaumiumReinforcedJar.java | 27 + src/main/java/kekztech/common/items/ErrorItem.java | 48 + .../common/items/MetaItemCraftingComponent.java | 89 + .../common/recipeLoaders/AlloySmelter.java | 28 + .../kekztech/common/recipeLoaders/Assembler.java | 294 + .../common/recipeLoaders/AssemblyLine.java | 226 + .../common/recipeLoaders/ChemicalReactor.java | 29 + .../kekztech/common/recipeLoaders/Crafting.java | 71 + .../common/recipeLoaders/FormingPress.java | 28 + .../java/kekztech/common/recipeLoaders/Mixer.java | 47 + .../recipeLoaders/ResearchableAssemblyLine.java | 133 + .../kekztech/common/recipeLoaders/Unpackager.java | 199 + .../kekztech/common/tileentities/MTEHatchTFFT.java | 271 + .../tileentities/MTELapotronicSuperCapacitor.java | 1213 ++ .../common/tileentities/MTESOFuelCellMK1.java | 221 + .../common/tileentities/MTESOFuelCellMK2.java | 222 + .../kekztech/common/tileentities/MTETankTFFT.java | 787 ++ .../common/tileentities/TileEntityIchorJar.java | 10 + .../tileentities/TileEntityIchorVoidJar.java | 10 + .../TileEntityThaumiumReinforcedJar.java | 10 + .../TileEntityThaumiumReinforcedVoidJar.java | 10 + src/main/java/kekztech/util/Util.java | 93 + src/main/java/kubatech/api/eig/EIGBucket.java | 12 +- src/main/java/kubatech/api/eig/EIGMode.java | 14 +- .../java/kubatech/api/eig/IEIGBucketFactory.java | 4 +- src/main/java/kubatech/api/enums/EIGModes.java | 4 +- src/main/java/kubatech/api/enums/ItemList.java | 60 +- src/main/java/kubatech/api/helpers/GTHelper.java | 12 +- .../implementations/KubaTechGTMultiBlockBase.java | 30 +- src/main/java/kubatech/api/utils/StringUtils.java | 4 +- src/main/java/kubatech/loaders/BlockLoader.java | 12 +- src/main/java/kubatech/loaders/DEFCRecipes.java | 166 +- src/main/java/kubatech/loaders/ItemLoader.java | 86 +- .../java/kubatech/loaders/MobHandlerLoader.java | 14 +- src/main/java/kubatech/loaders/RecipeLoader.java | 103 +- src/main/java/kubatech/loaders/TCLoader.java | 6 +- .../loaders/block/defc/BlockDEFCCasing.java | 63 + .../loaders/block/defc/DEFCCasingBlock.java | 63 - .../loaders/block/defc/DEFCCasingItemBlock.java | 36 - .../loaders/block/defc/ItemBlockDEFCCasing.java | 36 + .../block/kubablock/blocks/BlockTeaAcceptor.java | 64 + .../block/kubablock/blocks/BlockTeaStorage.java | 66 + .../block/kubablock/blocks/TeaAcceptor.java | 64 - .../loaders/block/kubablock/blocks/TeaStorage.java | 66 - .../java/kubatech/loaders/item/items/ItemTea.java | 72 + .../loaders/item/items/ItemTeaCollection.java | 209 + .../loaders/item/items/ItemTeaIngredient.java | 41 + .../loaders/item/items/ItemTeaUltimate.java | 216 + src/main/java/kubatech/loaders/item/items/Tea.java | 72 - .../kubatech/loaders/item/items/TeaCollection.java | 209 - .../kubatech/loaders/item/items/TeaIngredient.java | 41 - .../kubatech/loaders/item/items/TeaUltimate.java | 216 - src/main/java/kubatech/nei/NEIConfig.java | 69 + src/main/java/kubatech/nei/NEI_Config.java | 69 - .../GT_MetaTileEntity_DEFusionCrafter.java | 281 - .../GT_MetaTileEntity_ExtremeEntityCrusher.java | 820 -- ...MetaTileEntity_ExtremeIndustrialGreenhouse.java | 1282 -- .../GT_MetaTileEntity_MegaIndustrialApiary.java | 1175 -- .../gregtech/multiblock/MTEDEFusionCrafter.java | 280 + .../multiblock/MTEExtremeEntityCrusher.java | 817 ++ .../multiblock/MTEExtremeIndustrialGreenhouse.java | 1274 ++ .../multiblock/MTEMegaIndustrialApiary.java | 1173 ++ .../multiblock/eigbuckets/EIGFlowerBucket.java | 6 +- .../multiblock/eigbuckets/EIGIC2Bucket.java | 48 +- .../eigbuckets/EIGRainbowCactusBucket.java | 6 +- .../multiblock/eigbuckets/EIGSeedBucket.java | 18 +- .../multiblock/eigbuckets/EIGStemBucket.java | 10 +- .../gregtech/multiblock/eigmodes/EIGIC2Mode.java | 12 +- .../multiblock/eigmodes/EIGNormalMode.java | 8 +- src/main/java/net/glease/ggfab/BlockIcons.java | 45 - .../net/glease/ggfab/ComponentRecipeLoader.java | 57 - .../net/glease/ggfab/ConfigurationHandler.java | 52 - src/main/java/net/glease/ggfab/GGConstants.java | 16 - src/main/java/net/glease/ggfab/GGItemList.java | 205 - src/main/java/net/glease/ggfab/GigaGramFab.java | 191 - .../glease/ggfab/SingleUseToolRecipeLoader.java | 103 - .../java/net/glease/ggfab/api/GGFabRecipeMaps.java | 64 - .../java/net/glease/ggfab/api/GigaGramFabAPI.java | 30 - .../glease/ggfab/items/GGMetaItem_DumbItems.java | 153 - .../java/net/glease/ggfab/mte/MTE_AdvAssLine.java | 1107 -- .../net/glease/ggfab/mte/MTE_LinkedInputBus.java | 684 - .../net/glease/ggfab/mui/ClickableTextWidget.java | 58 - src/main/java/net/glease/ggfab/util/GGUtils.java | 78 - .../net/glease/ggfab/util/OverclockHelper.java | 75 - .../java/pers/gwyog/gtneioreplugin/Config.java | 28 - .../pers/gwyog/gtneioreplugin/GTNEIOrePlugin.java | 84 - .../gwyog/gtneioreplugin/plugin/IMCForNEI.java | 64 - .../gtneioreplugin/plugin/NEIPluginConfig.java | 35 - .../gwyog/gtneioreplugin/plugin/PluginBase.java | 52 - .../plugin/block/BlockDimensionDisplay.java | 47 - .../gtneioreplugin/plugin/block/ModBlocks.java | 27 - .../plugin/gregtech5/PluginGT5Base.java | 65 - .../plugin/gregtech5/PluginGT5SmallOreStat.java | 208 - .../gregtech5/PluginGT5UndergroundFluid.java | 168 - .../plugin/gregtech5/PluginGT5VeinStat.java | 209 - .../plugin/item/ItemDimensionDisplay.java | 57 - .../renderer/ItemDimensionDisplayRenderer.java | 78 - .../pers/gwyog/gtneioreplugin/util/CSVMaker.java | 121 - .../gwyog/gtneioreplugin/util/DimensionHelper.java | 351 - .../gtneioreplugin/util/GT5OreLayerHelper.java | 125 - .../gtneioreplugin/util/GT5OreSmallHelper.java | 200 - .../util/GT5UndergroundFluidHelper.java | 149 - .../gwyog/gtneioreplugin/util/OreVeinLayer.java | 18 - .../pers/gwyog/gtneioreplugin/util/Oremix.java | 121 - .../pers/gwyog/gtneioreplugin/util/SmallOre.java | 82 - .../gtneioreplugin/util/StringPaddingHack.java | 131 - src/main/java/tectech/Reference.java | 16 + src/main/java/tectech/TecTech.java | 119 + src/main/java/tectech/TecTechEventHandlers.java | 23 + .../openComputers/AvrArchitecture.java | 307 + src/main/java/tectech/loader/MainLoader.java | 206 + .../java/tectech/loader/NetworkDispatcher.java | 25 + src/main/java/tectech/loader/TecTechConfig.java | 271 + .../tectech/loader/gui/CreativeTabTecTech.java | 36 + src/main/java/tectech/loader/recipe/Assembler.java | 3091 +++++ .../java/tectech/loader/recipe/AssemblyLine.java | 169 + .../tectech/loader/recipe/BaseRecipeLoader.java | 49 + .../tectech/loader/recipe/CircuitAssembler.java | 54 + src/main/java/tectech/loader/recipe/Crafting.java | 57 + src/main/java/tectech/loader/recipe/Extractor.java | 67 + src/main/java/tectech/loader/recipe/Godforge.java | 675 + .../loader/recipe/ResearchStationAssemblyLine.java | 3709 +++++ .../java/tectech/loader/thing/CoverLoader.java | 47 + .../java/tectech/loader/thing/MachineLoader.java | 2532 ++++ src/main/java/tectech/loader/thing/MuTeLoader.java | 21 + .../java/tectech/loader/thing/ThingsLoader.java | 93 + .../mechanics/dataTransport/DataPacket.java | 104 + .../dataTransport/InventoryDataPacket.java | 62 + .../mechanics/dataTransport/QuantumDataPacket.java | 50 + .../enderStorage/EnderFluidContainer.java | 134 + .../mechanics/enderStorage/EnderLinkTag.java | 39 + .../mechanics/enderStorage/EnderLinkTank.java | 47 + .../enderStorage/EnderWorldSavedData.java | 144 + .../java/tectech/mechanics/pipe/IActivePipe.java | 12 + .../mechanics/pipe/IConnectsToDataPipe.java | 17 + .../mechanics/pipe/IConnectsToEnergyTunnel.java | 11 + .../mechanics/pipe/PipeActivityMessage.java | 136 + .../tectech/mechanics/spark/RendererMessage.java | 148 + .../java/tectech/mechanics/spark/ThaumSpark.java | 57 + .../tectech/mechanics/tesla/ITeslaConnectable.java | 184 + .../mechanics/tesla/ITeslaConnectableSimple.java | 24 + .../mechanics/tesla/TeslaCoverConnection.java | 81 + src/main/java/tectech/proxy/ClientProxy.java | 185 + src/main/java/tectech/proxy/CommonProxy.java | 94 + .../java/tectech/recipe/EyeOfHarmonyFrontend.java | 206 + .../java/tectech/recipe/EyeOfHarmonyRecipe.java | 465 + .../tectech/recipe/EyeOfHarmonyRecipeStorage.java | 186 + .../tectech/recipe/GodforgeExoticFrontend.java | 82 + .../tectech/recipe/GodforgePlasmaFrontend.java | 79 + .../tectech/recipe/ResearchStationFrontend.java | 101 + src/main/java/tectech/recipe/TTRecipeAdder.java | 251 + .../java/tectech/recipe/TecTechRecipeMaps.java | 78 + .../tectech/rendering/EOH/EOHItemRenderer.java | 94 + .../tectech/rendering/EOH/EOHRenderingUtils.java | 270 + .../tectech/rendering/EOH/EOHTileEntitySR.java | 92 + src/main/java/tectech/thing/CustomItemList.java | 629 + .../java/tectech/thing/block/BlockEOHRender.java | 78 + .../java/tectech/thing/block/BlockForgeOfGods.java | 71 + .../tectech/thing/block/BlockGodforgeGlass.java | 106 + .../tectech/thing/block/BlockQuantumGlass.java | 110 + .../tectech/thing/block/BlockQuantumStuff.java | 103 + .../java/tectech/thing/block/BlockReactorSim.java | 94 + .../tectech/thing/block/ItemGodForgeGlass.java | 31 + .../java/tectech/thing/block/ItemQuantumGlass.java | 34 + .../java/tectech/thing/block/ItemReactorSim.java | 37 + .../tectech/thing/block/RenderForgeOfGods.java | 65 + .../tectech/thing/block/RenderGodforgeGlass.java | 122 + .../tectech/thing/block/RenderQuantumGlass.java | 129 + .../tectech/thing/block/RenderQuantumStuff.java | 103 + .../thing/block/TileEntityEyeOfHarmony.java | 200 + .../tectech/thing/block/TileEntityForgeOfGods.java | 82 + .../tectech/thing/casing/BlockGTCasingsBA0.java | 224 + .../tectech/thing/casing/BlockGTCasingsNH.java | 59 + .../tectech/thing/casing/BlockGTCasingsTT.java | 193 + .../tectech/thing/casing/BlockGodforgeCasings.java | 130 + .../java/tectech/thing/casing/ItemCasingsBA0.java | 110 + .../tectech/thing/casing/ItemCasingsGodforge.java | 124 + .../java/tectech/thing/casing/ItemCasingsNH.java | 15 + .../tectech/thing/casing/ItemCasingsSpacetime.java | 56 + .../thing/casing/ItemCasingsStabilisation.java | 47 + .../java/tectech/thing/casing/ItemCasingsTT.java | 132 + .../thing/casing/ItemCasingsTimeAcceleration.java | 46 + .../casing/SpacetimeCompressionFieldCasing.java | 116 + .../thing/casing/StabilisationFieldCasing.java | 116 + .../tectech/thing/casing/TTCasingsContainer.java | 28 + .../thing/casing/TimeAccelerationFieldCasing.java | 116 + .../tectech/thing/cover/CoverEnderFluidLink.java | 245 + .../tectech/thing/cover/CoverPowerPassUpgrade.java | 52 + .../java/tectech/thing/cover/CoverTeslaCoil.java | 85 + .../thing/cover/CoverTeslaCoilUltimate.java | 44 + .../java/tectech/thing/gui/TecTechUITextures.java | 192 + .../thing/item/ItemAstralArrayFabricator.java | 53 + .../thing/item/ItemEnderFluidLinkCover.java | 55 + .../java/tectech/thing/item/ItemEuMeterGT.java | 167 + .../thing/item/ItemParametrizerMemoryCard.java | 233 + .../thing/item/ItemPowerPassUpgradeCover.java | 54 + .../tectech/thing/item/ItemRenderForgeOfGods.java | 59 + .../tectech/thing/item/ItemTeslaCoilCapacitor.java | 107 + .../tectech/thing/item/ItemTeslaCoilComponent.java | 71 + .../tectech/thing/item/ItemTeslaCoilCover.java | 86 + .../java/tectech/thing/item/ItemTeslaStaff.java | 52 + .../tectech/thing/metaTileEntity/Textures.java | 318 + .../metaTileEntity/hatch/MTEHatchCapacitor.java | 241 + .../metaTileEntity/hatch/MTEHatchCreativeData.java | 129 + .../hatch/MTEHatchCreativeMaintenance.java | 90 + .../hatch/MTEHatchCreativeUncertainty.java | 56 + .../hatch/MTEHatchDataConnector.java | 198 + .../metaTileEntity/hatch/MTEHatchDataInput.java | 101 + .../hatch/MTEHatchDataItemsInput.java | 255 + .../hatch/MTEHatchDataItemsOutput.java | 133 + .../metaTileEntity/hatch/MTEHatchDataOutput.java | 113 + .../metaTileEntity/hatch/MTEHatchDynamoMulti.java | 127 + .../metaTileEntity/hatch/MTEHatchDynamoTunnel.java | 286 + .../metaTileEntity/hatch/MTEHatchEnergyMulti.java | 133 + .../metaTileEntity/hatch/MTEHatchEnergyTunnel.java | 203 + .../metaTileEntity/hatch/MTEHatchObjectHolder.java | 176 + .../thing/metaTileEntity/hatch/MTEHatchParam.java | 554 + .../metaTileEntity/hatch/MTEHatchParamText.java | 291 + .../thing/metaTileEntity/hatch/MTEHatchRack.java | 412 + .../metaTileEntity/hatch/MTEHatchUncertainty.java | 467 + .../hatch/MTEHatchWirelessComputationInput.java | 132 + .../hatch/MTEHatchWirelessComputationOutput.java | 60 + .../hatch/MTEHatchWirelessDataItemsInput.java | 139 + .../hatch/MTEHatchWirelessDataItemsOutput.java | 142 + .../hatch/MTEHatchWirelessMulti.java | 209 + .../multi/ForgeOfGodsRingsStructureString.java | 5105 +++++++ .../multi/ForgeOfGodsStructureString.java | 5435 ++++++++ .../metaTileEntity/multi/MTEActiveTransformer.java | 231 + .../thing/metaTileEntity/multi/MTEDataBank.java | 382 + .../metaTileEntity/multi/MTEEnergyInfuser.java | 315 + .../metaTileEntity/multi/MTEEyeOfHarmony.java | 1845 +++ .../thing/metaTileEntity/multi/MTEForgeOfGods.java | 3059 +++++ .../thing/metaTileEntity/multi/MTEMicrowave.java | 342 + .../metaTileEntity/multi/MTENetworkSwitch.java | 283 + .../metaTileEntity/multi/MTEQuantumComputer.java | 618 + .../metaTileEntity/multi/MTEResearchStation.java | 687 + .../thing/metaTileEntity/multi/MTETeslaTower.java | 991 ++ .../metaTileEntity/multi/base/INameFunction.java | 6 + .../metaTileEntity/multi/base/IStatusFunction.java | 6 + .../thing/metaTileEntity/multi/base/LedStatus.java | 64 + .../metaTileEntity/multi/base/Parameters.java | 327 + .../thing/metaTileEntity/multi/base/SoundLoop.java | 59 + .../multi/base/TTMultiblockBase.java | 2760 ++++ .../render/TTRenderedExtendedFacingTexture.java | 25 + .../multi/godforge_modules/MTEBaseModule.java | 510 + .../multi/godforge_modules/MTEExoticModule.java | 547 + .../multi/godforge_modules/MTEMoltenModule.java | 244 + .../multi/godforge_modules/MTEPlasmaModule.java | 245 + .../multi/godforge_modules/MTESmeltingModule.java | 245 + .../metaTileEntity/pipe/MTEPipeBlockData.java | 52 + .../metaTileEntity/pipe/MTEPipeBlockEnergy.java | 52 + .../thing/metaTileEntity/pipe/MTEPipeData.java | 312 + .../thing/metaTileEntity/pipe/MTEPipeEnergy.java | 281 + .../metaTileEntity/pipe/MTEPipeEnergyMirror.java | 223 + .../metaTileEntity/single/MTEBuckConverter.java | 265 + .../metaTileEntity/single/MTEDebugPollutor.java | 217 + .../single/MTEDebugPowerGenerator.java | 383 + .../single/MTEDebugStructureWriter.java | 292 + .../metaTileEntity/single/MTEOwnerDetector.java | 237 + .../thing/metaTileEntity/single/MTETeslaCoil.java | 396 + .../metaTileEntity/single/MTETransformerTT.java | 68 + .../metaTileEntity/single/MTEWetTransformer.java | 49 + .../tectech/thing/multiTileEntity/GodForge.java | 0 .../thing/tileEntity/TileEntityReactorSim.java | 142 + src/main/java/tectech/util/CommonValues.java | 28 + src/main/java/tectech/util/Converter.java | 41 + src/main/java/tectech/util/FluidStackLong.java | 29 + src/main/java/tectech/util/GodforgeMath.java | 299 + src/main/java/tectech/util/ItemStackLong.java | 28 + src/main/java/tectech/util/TTUtility.java | 188 + src/main/java/util/Util.java | 93 - 3730 files changed, 427765 insertions(+), 430050 deletions(-) create mode 100644 src/main/java/bartworks/API/APIConfigValues.java create mode 100644 src/main/java/bartworks/API/BioObjectAdder.java create mode 100644 src/main/java/bartworks/API/BioVatLogicAdder.java create mode 100644 src/main/java/bartworks/API/BorosilicateGlass.java create mode 100644 src/main/java/bartworks/API/GlassTier.java create mode 100644 src/main/java/bartworks/API/INoiseGen.java create mode 100644 src/main/java/bartworks/API/IRadMaterial.java create mode 100644 src/main/java/bartworks/API/ITileAddsInformation.java create mode 100644 src/main/java/bartworks/API/ITileDropsContent.java create mode 100644 src/main/java/bartworks/API/ITileHasDifferentTextureSides.java create mode 100644 src/main/java/bartworks/API/SideReference.java create mode 100644 src/main/java/bartworks/API/VoidMinerDropAdder.java create mode 100644 src/main/java/bartworks/API/WerkstoffAPI.java create mode 100644 src/main/java/bartworks/API/WerkstoffAdderRegistry.java create mode 100644 src/main/java/bartworks/API/modularUI/BWUITextures.java create mode 100644 src/main/java/bartworks/API/recipe/BWNBTDependantCraftingRecipe.java create mode 100644 src/main/java/bartworks/API/recipe/BacterialVatFrontend.java create mode 100644 src/main/java/bartworks/API/recipe/BartWorksRecipeMaps.java create mode 100644 src/main/java/bartworks/API/recipe/DynamicGTRecipe.java create mode 100644 src/main/java/bartworks/API/recipe/RadioHatchFrontend.java create mode 100644 src/main/java/bartworks/ASM/BWCoreStaticReplacementMethodes.java create mode 100644 src/main/java/bartworks/GuiHandler.java create mode 100644 src/main/java/bartworks/MainMod.java create mode 100644 src/main/java/bartworks/client/ClientEventHandler/TooltipEventHandler.java create mode 100644 src/main/java/bartworks/client/creativetabs/BartWorksTab.java create mode 100644 src/main/java/bartworks/client/creativetabs/BioTab.java create mode 100644 src/main/java/bartworks/client/creativetabs/GT2Tab.java create mode 100644 src/main/java/bartworks/client/gui/GuiContainerRotorBlock.java create mode 100644 src/main/java/bartworks/client/renderer/BWBlockOreRenderer.java create mode 100644 src/main/java/bartworks/client/renderer/BWItemRenderer.java create mode 100644 src/main/java/bartworks/client/renderer/BWVanillaTexture.java create mode 100644 src/main/java/bartworks/client/renderer/EICPistonVisualizer.java create mode 100644 src/main/java/bartworks/client/renderer/RendererGlassBlock.java create mode 100644 src/main/java/bartworks/client/renderer/RendererSwitchingColorFluid.java create mode 100644 src/main/java/bartworks/client/textures/PrefixTextureLinker.java create mode 100644 src/main/java/bartworks/common/blocks/BWBlocks.java create mode 100644 src/main/java/bartworks/common/blocks/BWBlocksGlass.java create mode 100644 src/main/java/bartworks/common/blocks/BWBlocksGlass2.java create mode 100644 src/main/java/bartworks/common/blocks/BWMachineBlockContainer.java create mode 100644 src/main/java/bartworks/common/blocks/BWMultipleTileEntityContainer.java create mode 100644 src/main/java/bartworks/common/blocks/BWTileEntityContainer.java create mode 100644 src/main/java/bartworks/common/blocks/BlockBioFluid.java create mode 100644 src/main/java/bartworks/common/commands/ChangeConfig.java create mode 100644 src/main/java/bartworks/common/commands/ClearCraftingCache.java create mode 100644 src/main/java/bartworks/common/commands/GetWorkingDirectory.java create mode 100644 src/main/java/bartworks/common/commands/PrintRecipeListToFile.java create mode 100644 src/main/java/bartworks/common/commands/RunGC.java create mode 100644 src/main/java/bartworks/common/commands/SummonRuin.java create mode 100644 src/main/java/bartworks/common/configs/ConfigHandler.java create mode 100644 src/main/java/bartworks/common/items/BWItemBlocks.java create mode 100644 src/main/java/bartworks/common/items/ItemCircuitProgrammer.java create mode 100644 src/main/java/bartworks/common/items/ItemLabModule.java create mode 100644 src/main/java/bartworks/common/items/ItemLabParts.java create mode 100644 src/main/java/bartworks/common/items/ItemRockCutter.java create mode 100644 src/main/java/bartworks/common/items/ItemSimpleWindMeter.java create mode 100644 src/main/java/bartworks/common/items/ItemStonageRotors.java create mode 100644 src/main/java/bartworks/common/items/ItemTeslaStaff.java create mode 100644 src/main/java/bartworks/common/items/SimpleIconItem.java create mode 100644 src/main/java/bartworks/common/items/SimpleSubItemClass.java create mode 100644 src/main/java/bartworks/common/loaders/ArtificialMicaLine.java create mode 100644 src/main/java/bartworks/common/loaders/BioCultureLoader.java create mode 100644 src/main/java/bartworks/common/loaders/BioItemList.java create mode 100644 src/main/java/bartworks/common/loaders/BioLabLoader.java create mode 100644 src/main/java/bartworks/common/loaders/BioRecipeLoader.java create mode 100644 src/main/java/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java create mode 100644 src/main/java/bartworks/common/loaders/FluidLoader.java create mode 100644 src/main/java/bartworks/common/loaders/ItemRegistry.java create mode 100644 src/main/java/bartworks/common/loaders/LocalisationLoader.java create mode 100644 src/main/java/bartworks/common/loaders/RadioHatchMaterialLoader.java create mode 100644 src/main/java/bartworks/common/loaders/RecipeLoader.java create mode 100644 src/main/java/bartworks/common/loaders/RegisterGlassTiers.java create mode 100644 src/main/java/bartworks/common/loaders/RegisterServerCommands.java create mode 100644 src/main/java/bartworks/common/loaders/StaticRecipeChangeLoaders.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/Assembler.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/AssemblyLine.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/Autoclave.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/Centrifuge.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/ChemicalBath.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/ChemicalReactor.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/Electrolyzer.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/Extractor.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/FakeRecipes.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/FluidHeater.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/FluidSolidifier.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/FormingPress.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/LaserEngraver.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/Mixer.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/Pulverizer.java create mode 100644 src/main/java/bartworks/common/loaders/recipes/PyrolyseOven.java create mode 100644 src/main/java/bartworks/common/net/BWNetwork.java create mode 100644 src/main/java/bartworks/common/net/CircuitProgrammerPacket.java create mode 100644 src/main/java/bartworks/common/net/EICPacket.java create mode 100644 src/main/java/bartworks/common/net/MetaBlockPacket.java create mode 100644 src/main/java/bartworks/common/net/OreDictCachePacket.java create mode 100644 src/main/java/bartworks/common/net/RendererPacket.java create mode 100644 src/main/java/bartworks/common/net/ServerJoinedPacket.java create mode 100644 src/main/java/bartworks/common/tileentities/classic/TileEntityDimIDBridge.java create mode 100644 src/main/java/bartworks/common/tileentities/classic/TileEntityHeatedWaterPump.java create mode 100644 src/main/java/bartworks/common/tileentities/classic/TileEntityRotorBlock.java create mode 100644 src/main/java/bartworks/common/tileentities/debug/MTECreativeScanner.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/MTEBioVat.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/MTEElectricImplosionCompressor.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/MTEHighTempGasCooledReactor.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/MTELESU.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/MTEManualTrafo.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/MTEThoriumHighTempReactor.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/MTEWindmill.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaBlastFurnace.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaChemicalReactor.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaOilCracker.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaVacuumFreezer.java create mode 100644 src/main/java/bartworks/common/tileentities/multis/mega/MegaMultiBlockBase.java create mode 100644 src/main/java/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java create mode 100644 src/main/java/bartworks/common/tileentities/tiered/MTEAcidGenerator.java create mode 100644 src/main/java/bartworks/common/tileentities/tiered/MTEBioLab.java create mode 100644 src/main/java/bartworks/common/tileentities/tiered/MTECompressedFluidHatch.java create mode 100644 src/main/java/bartworks/common/tileentities/tiered/MTEDiode.java create mode 100644 src/main/java/bartworks/common/tileentities/tiered/MTEEnergyDistributor.java create mode 100644 src/main/java/bartworks/common/tileentities/tiered/MTEGiantOutputHatch.java create mode 100644 src/main/java/bartworks/common/tileentities/tiered/MTEHumongousInputHatch.java create mode 100644 src/main/java/bartworks/neiHandler/BWNEIConfig.java create mode 100644 src/main/java/bartworks/neiHandler/BioLabNEIHandler.java create mode 100644 src/main/java/bartworks/neiHandler/BioVatNEIHandler.java create mode 100644 src/main/java/bartworks/neiHandler/OreNEIHandler.java create mode 100644 src/main/java/bartworks/server/EventHandler/ServerEventHandler.java create mode 100644 src/main/java/bartworks/system/material/BWGTMaterialReference.java create mode 100644 src/main/java/bartworks/system/material/BWItemMetaGeneratedBlock.java create mode 100644 src/main/java/bartworks/system/material/BWMetaGeneratedBlocks.java create mode 100644 src/main/java/bartworks/system/material/BWMetaGeneratedBlocksCasing.java create mode 100644 src/main/java/bartworks/system/material/BWMetaGeneratedFrames.java create mode 100644 src/main/java/bartworks/system/material/BWMetaGeneratedItems.java create mode 100644 src/main/java/bartworks/system/material/BWMetaGeneratedOres.java create mode 100644 src/main/java/bartworks/system/material/BWMetaGeneratedSmallOres.java create mode 100644 src/main/java/bartworks/system/material/BWMetaGeneratedWerkstoffBlocks.java create mode 100644 src/main/java/bartworks/system/material/BWNonMetaMaterialItems.java create mode 100644 src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedBlocksCasing.java create mode 100644 src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedBlocksCasingAdvanced.java create mode 100644 src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedOre.java create mode 100644 src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedSmallOre.java create mode 100644 src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedWerkstoffBlock.java create mode 100644 src/main/java/bartworks/system/material/CircuitGeneration/BWCircuitsLoader.java create mode 100644 src/main/java/bartworks/system/material/CircuitGeneration/BWMetaItems.java create mode 100644 src/main/java/bartworks/system/material/CircuitGeneration/CircuitData.java create mode 100644 src/main/java/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java create mode 100644 src/main/java/bartworks/system/material/CircuitGeneration/CircuitPartLoader.java create mode 100644 src/main/java/bartworks/system/material/TileEntityMetaGeneratedBlock.java create mode 100644 src/main/java/bartworks/system/material/Werkstoff.java create mode 100644 src/main/java/bartworks/system/material/WerkstoffLoader.java create mode 100644 src/main/java/bartworks/system/material/gtenhancement/BWGTMetaItems.java create mode 100644 src/main/java/bartworks/system/material/gtenhancement/GTMetaItemEnhancer.java create mode 100644 src/main/java/bartworks/system/material/gtenhancement/PlatinumSludgeOverHaul.java create mode 100644 src/main/java/bartworks/system/material/processingLoaders/AddSomeRecipes.java create mode 100644 src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java create mode 100644 src/main/java/bartworks/system/material/processingLoaders/DownTierLoader.java create mode 100644 src/main/java/bartworks/system/material/processingLoaders/LoadItemContainers.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/IWerkstoffRunnable.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/AspectLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/BlockLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CasingLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CellLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CraftingMaterialLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CrushedLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/DustLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/GemLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MetalLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MoltenCellLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MultipleMetalLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/OreLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/RawOreLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/SimpleMetalLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/recipe/ToolLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/registration/AssociationLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java create mode 100644 src/main/java/bartworks/system/material/werkstoff_loaders/registration/CasingRegistrator.java create mode 100644 src/main/java/bartworks/system/oredict/OreDictAdder.java create mode 100644 src/main/java/bartworks/system/oredict/OreDictHandler.java create mode 100644 src/main/java/bartworks/system/oregen/BWOreLayer.java create mode 100644 src/main/java/bartworks/system/oregen/BWWordGenerator.java create mode 100644 src/main/java/bartworks/system/oregen/BWWorldGenRoss128b.java create mode 100644 src/main/java/bartworks/system/oregen/BWWorldGenRoss128ba.java create mode 100644 src/main/java/bartworks/system/worldgen/BWWorldGenUtil.java create mode 100644 src/main/java/bartworks/system/worldgen/MapGenRuins.java create mode 100644 src/main/java/bartworks/util/BWColorUtil.java create mode 100644 src/main/java/bartworks/util/BWRecipes.java create mode 100644 src/main/java/bartworks/util/BWTooltipReference.java create mode 100644 src/main/java/bartworks/util/BWUtil.java create mode 100644 src/main/java/bartworks/util/BioCulture.java create mode 100644 src/main/java/bartworks/util/BioDNA.java create mode 100644 src/main/java/bartworks/util/BioData.java create mode 100644 src/main/java/bartworks/util/BioPlasmid.java create mode 100644 src/main/java/bartworks/util/CachedReflectionUtils.java create mode 100644 src/main/java/bartworks/util/ConnectedBlocksChecker.java create mode 100644 src/main/java/bartworks/util/ConnectedBlocksCheckerIteration.java create mode 100644 src/main/java/bartworks/util/Coords.java create mode 100644 src/main/java/bartworks/util/EnumUtils.java create mode 100644 src/main/java/bartworks/util/MathUtils.java create mode 100644 src/main/java/bartworks/util/MurmurHash3.java create mode 100644 src/main/java/bartworks/util/NoiseUtil/BartsNoise.java create mode 100644 src/main/java/bartworks/util/NoiseUtil/SimplexNoise.java create mode 100644 src/main/java/bartworks/util/NonNullWrappedHashMap.java create mode 100644 src/main/java/bartworks/util/NonNullWrappedHashSet.java create mode 100644 src/main/java/bartworks/util/Pair.java create mode 100644 src/main/java/bartworks/util/ResultWrongSievert.java create mode 100644 src/main/java/bartworks/util/StreamUtils.java create mode 100644 src/main/java/bartworks/util/accessprioritylist/AccessPriorityList.java create mode 100644 src/main/java/bartworks/util/accessprioritylist/AccessPriorityListIterators.java create mode 100644 src/main/java/bartworks/util/accessprioritylist/AccessPriorityListNode.java create mode 100644 src/main/java/bartworks/util/flowerset/FlowerSet.java create mode 100644 src/main/java/bartworks/util/log/DebugLog.java delete mode 100644 src/main/java/bloodasp/galacticgreg/GT_TileEntity_Ores_Space.java delete mode 100644 src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_Layer_Space.java delete mode 100644 src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_SmallPieces_Space.java delete mode 100644 src/main/java/bloodasp/galacticgreg/GT_Worldgenerator_Space.java delete mode 100644 src/main/java/bloodasp/galacticgreg/GalacticGreg.java delete mode 100644 src/main/java/bloodasp/galacticgreg/SpaceDimRegisterer.java delete mode 100644 src/main/java/bloodasp/galacticgreg/WorldGenGaGT.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/AsteroidBlockComb.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/BlockMetaComb.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/Enums.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/GTOreTypes.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/ISpaceObjectGenerator.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/ModContainer.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/ModDBMDef.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/ModDimensionDef.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/SpecialBlockComb.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/StructureInformation.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/enums/DimensionBlockMetaDefinitionList.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/enums/DimensionDef.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/enums/ModContainers.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/enums/properties/AsteroidPropertyBuilder.java delete mode 100644 src/main/java/bloodasp/galacticgreg/api/enums/properties/Asteroids.java delete mode 100644 src/main/java/bloodasp/galacticgreg/auxiliary/ConfigManager.java delete mode 100644 src/main/java/bloodasp/galacticgreg/auxiliary/GTOreGroup.java delete mode 100644 src/main/java/bloodasp/galacticgreg/auxiliary/GalacticGregConfig.java delete mode 100644 src/main/java/bloodasp/galacticgreg/auxiliary/LogHelper.java delete mode 100644 src/main/java/bloodasp/galacticgreg/auxiliary/PlayerChatHelper.java delete mode 100644 src/main/java/bloodasp/galacticgreg/auxiliary/ProfilingStorage.java delete mode 100644 src/main/java/bloodasp/galacticgreg/command/AEStorageCommand.java delete mode 100644 src/main/java/bloodasp/galacticgreg/command/ProfilingCommand.java delete mode 100644 src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java delete mode 100644 src/main/java/bloodasp/galacticgreg/generators/GenEllipsoid.java delete mode 100644 src/main/java/bloodasp/galacticgreg/registry/GalacticGregRegistry.java delete mode 100644 src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematic.java delete mode 100644 src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicFactory.java delete mode 100644 src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicHandler.java delete mode 100644 src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicWrapper.java create mode 100644 src/main/java/bwcrossmod/BartWorksCrossmod.java create mode 100644 src/main/java/bwcrossmod/GTpp/loader/RadioHatchCompat.java create mode 100644 src/main/java/bwcrossmod/cls/CLSCompat.java create mode 100644 src/main/java/bwcrossmod/galacticgreg/MTEVoidMinerBase.java create mode 100644 src/main/java/bwcrossmod/galacticgreg/MTEVoidMiners.java create mode 100644 src/main/java/bwcrossmod/galacticgreg/VoidMinerUtility.java create mode 100644 src/main/java/bwcrossmod/galacticraft/GalacticraftProxy.java create mode 100644 src/main/java/bwcrossmod/galacticraft/PlanetsHelperClass.java create mode 100644 src/main/java/bwcrossmod/galacticraft/UniversalTeleportType.java create mode 100644 src/main/java/bwcrossmod/galacticraft/atmosphere/BWAtmosphereManager.java create mode 100644 src/main/java/bwcrossmod/galacticraft/planets/AbstractWorldProviderSpace.java create mode 100644 src/main/java/bwcrossmod/galacticraft/planets/ross128b/ChunkProviderRoss128b.java create mode 100644 src/main/java/bwcrossmod/galacticraft/planets/ross128b/SkyProviderRoss128b.java create mode 100644 src/main/java/bwcrossmod/galacticraft/planets/ross128b/WorldProviderRoss128b.java create mode 100644 src/main/java/bwcrossmod/galacticraft/planets/ross128ba/ChunkProviderRoss128ba.java create mode 100644 src/main/java/bwcrossmod/galacticraft/planets/ross128ba/WorldProviderRoss128ba.java create mode 100644 src/main/java/bwcrossmod/galacticraft/solarsystems/Ross128SolarSystem.java create mode 100644 src/main/java/bwcrossmod/openComputers/GTNBTDataBase.java create mode 100644 src/main/java/bwcrossmod/openComputers/TileEntityGTDataServer.java create mode 100644 src/main/java/bwcrossmod/tectech/TecTechResearchLoader.java create mode 100644 src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaser.java create mode 100644 src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaserBase.java create mode 100644 src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserBox.java create mode 100644 src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserDynamo.java create mode 100644 src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserHatch.java create mode 100644 src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserPipe.java create mode 100644 src/main/java/bwcrossmod/tgregworks/MaterialsInjector.java create mode 100644 src/main/java/bwcrossmod/thaumcraft/util/ThaumcraftHandler.java delete mode 100644 src/main/java/client/ClientProxy.java delete mode 100644 src/main/java/client/gui/KT_UITextures.java delete mode 100644 src/main/java/com/detrav/DetravScannerMod.java delete mode 100644 src/main/java/com/detrav/Detrav_AfterGTPreload_Loader.java delete mode 100644 src/main/java/com/detrav/commands/DetravScannerCommand.java delete mode 100644 src/main/java/com/detrav/enums/DetravToolDictNames.java delete mode 100644 src/main/java/com/detrav/enums/Textures01.java delete mode 100644 src/main/java/com/detrav/events/DetravLoginEventHandler.java delete mode 100644 src/main/java/com/detrav/gui/DetravScannerGUI.java delete mode 100644 src/main/java/com/detrav/gui/OresList.java delete mode 100644 src/main/java/com/detrav/gui/textures/DetravMapTexture.java delete mode 100644 src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java delete mode 100644 src/main/java/com/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java delete mode 100644 src/main/java/com/detrav/items/behaviours/BehaviourDetravToolProspector.java delete mode 100644 src/main/java/com/detrav/items/processing/ProcessingDetravToolProspector.java delete mode 100644 src/main/java/com/detrav/items/tools/DetravProspector.java delete mode 100644 src/main/java/com/detrav/items/tools/DetravToolElectricProspector.java delete mode 100644 src/main/java/com/detrav/items/tools/DetravToolElectricProspectorBase.java delete mode 100644 src/main/java/com/detrav/net/DetravNetwork.java delete mode 100644 src/main/java/com/detrav/net/DetravPacket.java delete mode 100644 src/main/java/com/detrav/net/ProspectingPacket.java delete mode 100644 src/main/java/com/detrav/proxies/ClientProxy.java delete mode 100644 src/main/java/com/detrav/proxies/CommonProxy.java delete mode 100644 src/main/java/com/detrav/proxies/ServerProxy.java delete mode 100644 src/main/java/com/detrav/utils/BartWorksHelper.java delete mode 100644 src/main/java/com/detrav/utils/DetravCreativeTab.java delete mode 100644 src/main/java/com/detrav/utils/FluidColors.java delete mode 100644 src/main/java/com/detrav/utils/GTppHelper.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/GTNHLanthanides.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/Tags.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/api/recipe/LanthanidesRecipeMaps.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/client/ClientProxy.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/CommonProxy.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/beamline/BeamInformation.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/beamline/BeamLinePacket.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/beamline/IConnectsToBeamline.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/beamline/Particle.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/beamline/TileBeamline.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/block/AntennaCasing.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/block/Casing.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/block/ShieldedAccGlass.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/hatch/TileBusInputFocus.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchBeamlineConnector.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchInputBeamline.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchOutputBeamline.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/item/ICanFocus.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/item/LanthItem.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/item/MaskList.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/item/ParticleItem.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/item/PhotolithographicMask.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/register/BotWerkstoffMaterialPool.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/register/LanthItemList.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/register/WerkstoffMaterialPool.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/Digester.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/DissolutionTank.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/LINAC.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/SourceChamber.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/Synchrotron.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/TargetChamber.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeAdder2.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/RecipeSC.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/RecipeTC.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/SourceChamberFrontend.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/TargetChamberFrontend.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/loader/BotRecipes.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/loader/MetaTileEntity_Loader.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/loader/RecipeLoader.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/loader/ZPMRubberChanges.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/util/DescTextLocalization.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/util/Util.java delete mode 100644 src/main/java/com/elisis/gtnhlanth/xmod/nei/NEI_Config.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/API_ConfigValues.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/BioObjectAdder.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/BioVatLogicAdder.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/BorosilicateGlass.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/GlassTier.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/INoiseGen.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/IRadMaterial.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/ITileAddsInformation.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/ITileDropsContent.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/ITileHasDifferentTextureSides.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/SideReference.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/VoidMinerDropAdder.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/WerkstoffAPI.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/WerkstoffAdderRegistry.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/modularUI/BW_UITextures.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BWNBTDependantCraftingRecipe.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BacterialVatFrontend.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BartWorksRecipeMaps.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/DynamicGTRecipe.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/RadioHatchFrontend.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/ASM/BWCoreStaticReplacementMethodes.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/GuiHandler.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/MainMod.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/ClientEventHandler/TooltipEventHandler.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/BioTab.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/GT2Tab.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/bartworksTab.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/gui/BW_GUIContainer_RotorBlock.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_EICPistonVisualizer.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_GT_ItemRenderer.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_GT_Vanilla_Texture.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_Renderer_Block_Ores.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/RendererGlasBlock.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/RendererSwitchingColorFluid.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/client/textures/PrefixTextureLinker.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_Blocks.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_GlasBlocks.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_GlasBlocks2.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer_MachineBlock.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer_Multiple.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BioFluidBlock.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/commands/ChangeConfig.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/commands/ClearCraftingCache.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/commands/GetWorkingDirectory.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/commands/PrintRecipeListToFile.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/commands/RunGC.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/commands/SummonRuin.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/configs/ConfigHandler.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_ItemBlocks.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_SimpleWindMeter.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_Stonage_Rotors.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/items/Circuit_Programmer.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/items/GT_Rockcutter_Item.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/items/GT_Teslastaff_Item.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/items/LabModule.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/items/LabParts.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/items/SimpleIconItem.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/items/SimpleSubItemClass.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ArtificialMicaLine.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioCultureLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioItemList.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioLabLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioRecipeLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/FluidLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ItemRegistry.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/LocalisationLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RadioHatchMaterialLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RecipeLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RegisterGlassTiers.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RegisterServerCommands.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/StaticRecipeChangeLoaders.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Assembler.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/AssemblyLine.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Autoclave.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Centrifuge.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/ChemicalBath.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/ChemicalReactor.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/CraftingRecipes.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Electrolyzer.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Extractor.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FakeRecipes.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FluidHeater.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FluidSolidifier.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FormingPress.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/LaserEngraver.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Mixer.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Pulverizer.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/PyrolyseOven.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/net/BW_Network.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/net/CircuitProgrammerPacket.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/net/EICPacket.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/net/MetaBlockPacket.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/net/OreDictCachePacket.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/net/RendererPacket.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/net/ServerJoinedPackage.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BWTileEntityDimIDBridge.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BW_RotorBlock.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BW_TileEntity_HeatedWaterPump.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/debug/CreativeScanner.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_BioVat.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_CircuitAssemblyLine.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_DEHP.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_ElectricImplosionCompressor.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_HTGR.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_LESU.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_ManualTrafo.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_THTR.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaBlastFurnace.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaChemicalReactor.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaDistillTower.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaMultiBlockBase.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaOilCracker.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_AcidGenerator.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_BioLab.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_CompressedFluidHatch.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_Diode.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_EnergyDistributor.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_GiantOutputHatch.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_HumongousInputHatch.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioLabHandler.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioVatHandler.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_OreHandler.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/NEI_BW_Config.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/server/EventHandler/ServerEventHandler.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_GT_MaterialReference.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlock_Item.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_Casing.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_CasingAdvanced_TE.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_Casing_TE.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedFrames.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedOreTE.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedSmallOreTE.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Block_TE.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Blocks.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Items.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Ores.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_SmallOres.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_WerkstoffBlock_TE.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_WerkstoffBlocks.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_NonMeta_MaterialItems.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/BW_CircuitsLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/BW_Meta_Items.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitData.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitPartLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/BWGTMetaItems.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/GTMetaItemEnhancer.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/PlatinumSludgeOverHaul.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/Werkstoff.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/WerkstoffLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AddSomeRecipes.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AdditionalRecipes.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/DownTierLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/LoadItemContainers.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/IWerkstoffRunnable.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/AspectLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/BlockLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CasingLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CellLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CraftingMaterialLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CrushedLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/DustLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/GemLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MetalLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MoltenCellLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MultipleMetalLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/OreLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/RawOreLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/SimpleMetalLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/ToolLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/AssociationLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/CasingRegistrator.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/oredict/OreDictAdder.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/oredict/OreDictHandler.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_OreLayer.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WordGenerator.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WorldGenRoss128b.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WorldGenRoss128ba.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/worldgen/GT_WorldgenUtil.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/system/worldgen/MapGenRuins.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/BWRecipes.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/BW_ColorUtil.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Tooltip_Reference.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Util.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/BioCulture.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/BioDNA.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/BioData.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/BioPlasmid.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/CachedReflectionUtils.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/ConnectedBlocksChecker.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/ConnectedBlocksCheckerIteration.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/Coords.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/EnumUtils.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/MathUtils.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/MurmurHash3.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/NoiseUtil/BartsNoise.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/NoiseUtil/SimplexNoise.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/NonNullWrappedHashMap.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/NonNullWrappedHashSet.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/Pair.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/ResultWrongSievert.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/StreamUtils.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityList.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityListIterators.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityListNode.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/flowerset/FlowerSet.java delete mode 100644 src/main/java/com/github/bartimaeusnek/bartworks/util/log/DebugLog.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/BartWorksCrossmod.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/GTpp/loader/RadioHatchCompat.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/cls/CLSCompat.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/GT_TileEntity_VoidMiner_Base.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/GT_TileEntity_VoidMiners.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/VoidMinerUtility.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/GalacticraftProxy.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/PlanetsHelperClass.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/UniversalTeleportType.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/atmosphere/BWAtmosphereManager.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/AbstractWorldProviderSpace.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/ChunkProviderRoss128b.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/SkyProviderRoss128b.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/WorldProviderRoss128b.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128ba/ChunkProviderRoss128ba.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128ba/WorldProviderRoss128ba.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/solarsystems/Ross128SolarSystem.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/openComputers/GT_NBT_DataBase.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/openComputers/TileEntity_GTDataServer.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/tectech/TecTechResearchLoader.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/LowPowerLaser.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_Abstract_LowPowerLaserThingy.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserBox.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserDynamo.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserHatch.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_Pipe_Energy_LowPower.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/tgregworks/MaterialsInjector.java delete mode 100644 src/main/java/com/github/bartimaeusnek/crossmod/thaumcraft/util/ThaumcraftHandler.java delete mode 100644 src/main/java/com/github/technus/tectech/Reference.java delete mode 100644 src/main/java/com/github/technus/tectech/TecTech.java delete mode 100644 src/main/java/com/github/technus/tectech/TecTechEventHandlers.java delete mode 100644 src/main/java/com/github/technus/tectech/compatibility/openComputers/AvrArchitecture.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/MainLoader.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/TecTechConfig.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/gui/CreativeTabTecTech.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/recipe/Assembler.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/recipe/AssemblyLine.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/recipe/BaseRecipeLoader.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/recipe/CircuitAssembler.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/recipe/Crafting.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/recipe/Extractor.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/recipe/Godforge.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/thing/CoverLoader.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/thing/MuTeLoader.java delete mode 100644 src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/dataTransport/DataPacket.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/dataTransport/InventoryDataPacket.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/dataTransport/QuantumDataPacket.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTag.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTank.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderWorldSavedData.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/pipe/IActivePipe.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToDataPipe.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/pipe/PipeActivityMessage.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectableSimple.java delete mode 100644 src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java delete mode 100644 src/main/java/com/github/technus/tectech/proxy/ClientProxy.java delete mode 100644 src/main/java/com/github/technus/tectech/proxy/CommonProxy.java delete mode 100644 src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyFrontend.java delete mode 100644 src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java delete mode 100644 src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java delete mode 100644 src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java delete mode 100644 src/main/java/com/github/technus/tectech/recipe/GodforgePlasmaFrontend.java delete mode 100644 src/main/java/com/github/technus/tectech/recipe/ResearchStationFrontend.java delete mode 100644 src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java delete mode 100644 src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java delete mode 100644 src/main/java/com/github/technus/tectech/rendering/EOH/EOH_ItemRenderer.java delete mode 100644 src/main/java/com/github/technus/tectech/rendering/EOH/EOH_RenderingUtils.java delete mode 100644 src/main/java/com/github/technus/tectech/rendering/EOH/EOH_TESR.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/CustomItemList.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/EOH_RenderBlock.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/ForgeOfGodsBlock.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassBlock.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassItem.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassRender.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/QuantumGlassBlock.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/QuantumGlassItem.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/QuantumGlassRender.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/QuantumStuffBlock.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/QuantumStuffRender.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/ReactorSimBlock.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/ReactorSimItem.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/RenderForgeOfGods.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/TileEyeOfHarmony.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/block/TileForgeOfGods.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsNH.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsTT.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsNH.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Godforge.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Spacetime.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Stabilisation.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_TimeAcceleration.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/GodforgeCasings.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/SpacetimeCompressionFieldCasing.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/StabilisationFieldCasing.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/TT_Container_Casings.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/casing/TimeAccelerationFieldCasing.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_PowerPassUpgrade.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/gui/TecTechUITextures.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/item/AstralArrayFabricator.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/item/EnderFluidLinkCover.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/item/ParametrizerMemoryCard.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/item/PowerPassUpgradeCover.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/item/RenderForgeOfGodsItem.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/item/TeslaCoilComponent.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCover.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/item/TeslaStaff.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/Textures.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeData.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeMaintenance.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeUncertainty.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoMulti.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyMulti.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Holder.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputData.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputData.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputDataItems.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ParamText.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Rack.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Uncertainty.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Input.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Output.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessInputDataItems.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessMulti.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessOutputDataItems.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_ForgeOfGods.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/INameFunction.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IStatusFunction.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/LedStatus.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/Parameters.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/SoundLoop.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_BaseModule.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_ExoticModule.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_MoltenModule.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_PlasmaModule.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_PipeBlock_Data.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_PipeBlock_Energy.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EnergyMirror.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_WetTransformer.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/multiTileEntity/GodForge.java delete mode 100644 src/main/java/com/github/technus/tectech/thing/tileEntity/ReactorSimTileEntity.java delete mode 100644 src/main/java/com/github/technus/tectech/util/CommonValues.java delete mode 100644 src/main/java/com/github/technus/tectech/util/Converter.java delete mode 100644 src/main/java/com/github/technus/tectech/util/FluidStackLong.java delete mode 100644 src/main/java/com/github/technus/tectech/util/GodforgeMath.java delete mode 100644 src/main/java/com/github/technus/tectech/util/ItemStackLong.java delete mode 100644 src/main/java/com/github/technus/tectech/util/TT_Utility.java delete mode 100644 src/main/java/common/Blocks.java delete mode 100644 src/main/java/common/CommonProxy.java delete mode 100644 src/main/java/common/Recipes.java delete mode 100644 src/main/java/common/Researches.java delete mode 100644 src/main/java/common/TileEntities.java delete mode 100644 src/main/java/common/blocks/BaseGTUpdateableBlock.java delete mode 100644 src/main/java/common/blocks/Block_GDCUnit.java delete mode 100644 src/main/java/common/blocks/Block_IchorJar.java delete mode 100644 src/main/java/common/blocks/Block_LapotronicEnergyUnit.java delete mode 100644 src/main/java/common/blocks/Block_LargeHexPlate.java delete mode 100644 src/main/java/common/blocks/Block_TFFTStorageField.java delete mode 100644 src/main/java/common/blocks/Block_ThaumiumReinforcedJar.java delete mode 100644 src/main/java/common/blocks/Block_YSZUnit.java delete mode 100644 src/main/java/common/itemBlocks/IB_IchorJar.java delete mode 100644 src/main/java/common/itemBlocks/IB_LapotronicEnergyUnit.java delete mode 100644 src/main/java/common/itemBlocks/IB_TFFTStorageField.java delete mode 100644 src/main/java/common/itemBlocks/IB_ThaumiumReinforcedJar.java delete mode 100644 src/main/java/common/items/ErrorItem.java delete mode 100644 src/main/java/common/items/MetaItem_CraftingComponent.java delete mode 100644 src/main/java/common/recipeLoaders/AlloySmelter.java delete mode 100644 src/main/java/common/recipeLoaders/Assembler.java delete mode 100644 src/main/java/common/recipeLoaders/AssemblyLine.java delete mode 100644 src/main/java/common/recipeLoaders/ChemicalReactor.java delete mode 100644 src/main/java/common/recipeLoaders/Crafting.java delete mode 100644 src/main/java/common/recipeLoaders/FormingPress.java delete mode 100644 src/main/java/common/recipeLoaders/Mixer.java delete mode 100644 src/main/java/common/recipeLoaders/ResearchableAssemblyLine.java delete mode 100644 src/main/java/common/recipeLoaders/Unpackager.java delete mode 100644 src/main/java/common/tileentities/GTMTE_LapotronicSuperCapacitor.java delete mode 100644 src/main/java/common/tileentities/GTMTE_SOFuelCellMK1.java delete mode 100644 src/main/java/common/tileentities/GTMTE_SOFuelCellMK2.java delete mode 100644 src/main/java/common/tileentities/GTMTE_TFFT.java delete mode 100644 src/main/java/common/tileentities/GTMTE_TFFTHatch.java delete mode 100644 src/main/java/common/tileentities/TE_IchorJar.java delete mode 100644 src/main/java/common/tileentities/TE_IchorVoidJar.java delete mode 100644 src/main/java/common/tileentities/TE_ThaumiumReinforcedJar.java delete mode 100644 src/main/java/common/tileentities/TE_ThaumiumReinforcedVoidJar.java create mode 100644 src/main/java/detrav/DetravLoaderAfterGTPreload.java create mode 100644 src/main/java/detrav/DetravScannerMod.java create mode 100644 src/main/java/detrav/commands/DetravScannerCommand.java create mode 100644 src/main/java/detrav/enums/DetravToolDictNames.java create mode 100644 src/main/java/detrav/enums/Textures01.java create mode 100644 src/main/java/detrav/events/DetravLoginEventHandler.java create mode 100644 src/main/java/detrav/gui/DetravScannerGUI.java create mode 100644 src/main/java/detrav/gui/OresList.java create mode 100644 src/main/java/detrav/gui/textures/DetravMapTexture.java create mode 100644 src/main/java/detrav/items/DetravMetaGeneratedTool01.java create mode 100644 src/main/java/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java create mode 100644 src/main/java/detrav/items/behaviours/BehaviourDetravToolProspector.java create mode 100644 src/main/java/detrav/items/processing/ProcessingDetravToolProspector.java create mode 100644 src/main/java/detrav/items/tools/DetravProspector.java create mode 100644 src/main/java/detrav/items/tools/DetravToolElectricProspector.java create mode 100644 src/main/java/detrav/items/tools/DetravToolElectricProspectorBase.java create mode 100644 src/main/java/detrav/net/DetravNetwork.java create mode 100644 src/main/java/detrav/net/DetravPacket.java create mode 100644 src/main/java/detrav/net/ProspectingPacket.java create mode 100644 src/main/java/detrav/proxies/ClientProxy.java create mode 100644 src/main/java/detrav/proxies/CommonProxy.java create mode 100644 src/main/java/detrav/proxies/ServerProxy.java create mode 100644 src/main/java/detrav/utils/BartWorksHelper.java create mode 100644 src/main/java/detrav/utils/DetravCreativeTab.java create mode 100644 src/main/java/detrav/utils/FluidColors.java create mode 100644 src/main/java/detrav/utils/GTppHelper.java create mode 100644 src/main/java/galacticgreg/GalacticGreg.java create mode 100644 src/main/java/galacticgreg/SpaceDimRegisterer.java create mode 100644 src/main/java/galacticgreg/TileEntitySpaceOres.java create mode 100644 src/main/java/galacticgreg/WorldGeneratorSpace.java create mode 100644 src/main/java/galacticgreg/WorldgenGaGT.java create mode 100644 src/main/java/galacticgreg/WorldgenOreLayerSpace.java create mode 100644 src/main/java/galacticgreg/WorldgenOreSmallSpace.java create mode 100644 src/main/java/galacticgreg/api/AsteroidBlockComb.java create mode 100644 src/main/java/galacticgreg/api/BlockMetaComb.java create mode 100644 src/main/java/galacticgreg/api/Enums.java create mode 100644 src/main/java/galacticgreg/api/GTOreTypes.java create mode 100644 src/main/java/galacticgreg/api/ISpaceObjectGenerator.java create mode 100644 src/main/java/galacticgreg/api/ModContainer.java create mode 100644 src/main/java/galacticgreg/api/ModDBMDef.java create mode 100644 src/main/java/galacticgreg/api/ModDimensionDef.java create mode 100644 src/main/java/galacticgreg/api/SpecialBlockComb.java create mode 100644 src/main/java/galacticgreg/api/StructureInformation.java create mode 100644 src/main/java/galacticgreg/api/enums/DimensionBlockMetaDefinitionList.java create mode 100644 src/main/java/galacticgreg/api/enums/DimensionDef.java create mode 100644 src/main/java/galacticgreg/api/enums/ModContainers.java create mode 100644 src/main/java/galacticgreg/api/enums/properties/AsteroidPropertyBuilder.java create mode 100644 src/main/java/galacticgreg/api/enums/properties/Asteroids.java create mode 100644 src/main/java/galacticgreg/auxiliary/ConfigManager.java create mode 100644 src/main/java/galacticgreg/auxiliary/GTOreGroup.java create mode 100644 src/main/java/galacticgreg/auxiliary/GalacticGregConfig.java create mode 100644 src/main/java/galacticgreg/auxiliary/LogHelper.java create mode 100644 src/main/java/galacticgreg/auxiliary/PlayerChatHelper.java create mode 100644 src/main/java/galacticgreg/auxiliary/ProfilingStorage.java create mode 100644 src/main/java/galacticgreg/command/AEStorageCommand.java create mode 100644 src/main/java/galacticgreg/command/ProfilingCommand.java create mode 100644 src/main/java/galacticgreg/dynconfig/DynamicDimensionConfig.java create mode 100644 src/main/java/galacticgreg/generators/GenEllipsoid.java create mode 100644 src/main/java/galacticgreg/registry/GalacticGregRegistry.java create mode 100644 src/main/java/galacticgreg/schematics/SpaceSchematic.java create mode 100644 src/main/java/galacticgreg/schematics/SpaceSchematicFactory.java create mode 100644 src/main/java/galacticgreg/schematics/SpaceSchematicHandler.java create mode 100644 src/main/java/galacticgreg/schematics/SpaceSchematicWrapper.java create mode 100644 src/main/java/ggfab/BlockIcons.java create mode 100644 src/main/java/ggfab/ComponentRecipeLoader.java create mode 100644 src/main/java/ggfab/ConfigurationHandler.java create mode 100644 src/main/java/ggfab/GGConstants.java create mode 100644 src/main/java/ggfab/GGItemList.java create mode 100644 src/main/java/ggfab/GigaGramFab.java create mode 100644 src/main/java/ggfab/SingleUseToolRecipeLoader.java create mode 100644 src/main/java/ggfab/api/GGFabRecipeMaps.java create mode 100644 src/main/java/ggfab/api/GigaGramFabAPI.java create mode 100644 src/main/java/ggfab/items/GGMetaItemDumbItems.java create mode 100644 src/main/java/ggfab/mte/MTEAdvAssLine.java create mode 100644 src/main/java/ggfab/mte/MTELinkedInputBus.java create mode 100644 src/main/java/ggfab/mui/ClickableTextWidget.java create mode 100644 src/main/java/ggfab/util/GGUtils.java create mode 100644 src/main/java/ggfab/util/OverclockHelper.java create mode 100644 src/main/java/goodgenerator/blocks/regularBlock/BlockCasing.java create mode 100644 src/main/java/goodgenerator/blocks/regularBlock/BlockComplexTextureCasing.java create mode 100644 src/main/java/goodgenerator/blocks/regularBlock/BlockFrame.java create mode 100644 src/main/java/goodgenerator/blocks/regularBlock/BlockTEContainer.java create mode 100644 src/main/java/goodgenerator/blocks/regularBlock/BlockTurbineCasing.java delete mode 100644 src/main/java/goodgenerator/blocks/regularBlock/Casing.java delete mode 100644 src/main/java/goodgenerator/blocks/regularBlock/ComplexTextureCasing.java delete mode 100644 src/main/java/goodgenerator/blocks/regularBlock/Frame.java delete mode 100644 src/main/java/goodgenerator/blocks/regularBlock/TEBlock.java delete mode 100644 src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch_ME.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/DieselGenerator.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTEDieselGenerator.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronAccelerator.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronSensor.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTEYOTTAHatch.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronAccelerator.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronSensor.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/YOTTAHatch.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer5.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTECoolantTower.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaHatch.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaOutputHatch.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaOutputHatchME.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTEExtremeHeatExchanger.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTEFuelRefineFactory.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaGenerator.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer1.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer2.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer3.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer4.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer5.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTEMultiNqGenerator.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/SupercriticalFluidTurbine.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_TooltipMultiBlockBase_EM.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java delete mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputerPP.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeTurbineBase.java create mode 100644 src/main/java/goodgenerator/blocks/tileEntity/base/MTETooltipMultiBlockBaseEM.java create mode 100644 src/main/java/goodgenerator/client/GUI/GGUITextures.java delete mode 100644 src/main/java/goodgenerator/client/GUI/GG_UITextures.java create mode 100644 src/main/java/goodgenerator/crossmod/nei/NEIConfig.java delete mode 100644 src/main/java/goodgenerator/crossmod/nei/NEI_Config.java delete mode 100644 src/main/java/goodgenerator/items/DepletedFuelRod.java delete mode 100644 src/main/java/goodgenerator/items/FuelRod.java create mode 100644 src/main/java/goodgenerator/items/GGItem.java create mode 100644 src/main/java/goodgenerator/items/GGItemBlocks.java create mode 100644 src/main/java/goodgenerator/items/GGMaterial.java create mode 100644 src/main/java/goodgenerator/items/ItemDepletedFuelRod.java create mode 100644 src/main/java/goodgenerator/items/ItemFuelRod.java delete mode 100644 src/main/java/goodgenerator/items/MyItemBlocks.java delete mode 100644 src/main/java/goodgenerator/items/MyItems.java delete mode 100644 src/main/java/goodgenerator/items/MyMaterial.java create mode 100644 src/main/java/goodgenerator/loader/RecipeLoader2.java delete mode 100644 src/main/java/goodgenerator/loader/RecipeLoader_02.java create mode 100644 src/main/java/goodgenerator/main/GGConfigLoader.java delete mode 100644 src/main/java/goodgenerator/main/GG_Config_Loader.java create mode 100644 src/main/java/gregtech/GTMod.java delete mode 100644 src/main/java/gregtech/GT_Mod.java create mode 100644 src/main/java/gregtech/api/GregTechAPI.java delete mode 100644 src/main/java/gregtech/api/GregTech_API.java create mode 100644 src/main/java/gregtech/api/damagesources/GTDamageSources.java delete mode 100644 src/main/java/gregtech/api/damagesources/GT_DamageSources.java create mode 100644 src/main/java/gregtech/api/enchants/EnchantmentEnderDamage.java create mode 100644 src/main/java/gregtech/api/enchants/EnchantmentHazmat.java create mode 100644 src/main/java/gregtech/api/enchants/EnchantmentRadioactivity.java delete mode 100644 src/main/java/gregtech/api/enchants/Enchantment_EnderDamage.java delete mode 100644 src/main/java/gregtech/api/enchants/Enchantment_Hazmat.java delete mode 100644 src/main/java/gregtech/api/enchants/Enchantment_Radioactivity.java delete mode 100644 src/main/java/gregtech/api/enums/GTNH_ExtraMaterials.java create mode 100644 src/main/java/gregtech/api/enums/GTValues.java delete mode 100644 src/main/java/gregtech/api/enums/GTVoltageIndex.java delete mode 100644 src/main/java/gregtech/api/enums/GT_HatchElement.java delete mode 100644 src/main/java/gregtech/api/enums/GT_Values.java create mode 100644 src/main/java/gregtech/api/enums/HatchElement.java create mode 100644 src/main/java/gregtech/api/enums/MaterialsGTNH.java create mode 100644 src/main/java/gregtech/api/enums/TCAspects.java delete mode 100644 src/main/java/gregtech/api/enums/TC_Aspects.java create mode 100644 src/main/java/gregtech/api/enums/VoltageIndex.java delete mode 100644 src/main/java/gregtech/api/fluid/FluidTankGT.java create mode 100644 src/main/java/gregtech/api/fluid/GTFluidFactory.java create mode 100644 src/main/java/gregtech/api/fluid/GTFluidTank.java delete mode 100644 src/main/java/gregtech/api/fluid/GT_FluidFactory.java delete mode 100644 src/main/java/gregtech/api/gui/GT_GUIColorOverride.java create mode 100644 src/main/java/gregtech/api/gui/GUIColorOverride.java create mode 100644 src/main/java/gregtech/api/gui/modularui/CoverUIBuildContext.java create mode 100644 src/main/java/gregtech/api/gui/modularui/GTUIInfos.java create mode 100644 src/main/java/gregtech/api/gui/modularui/GTUITextures.java delete mode 100644 src/main/java/gregtech/api/gui/modularui/GT_CoverUIBuildContext.java delete mode 100644 src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java delete mode 100644 src/main/java/gregtech/api/gui/modularui/GT_UITextures.java create mode 100644 src/main/java/gregtech/api/gui/widgets/CoverTickRateButton.java delete mode 100644 src/main/java/gregtech/api/gui/widgets/GT_CoverTickRateButton.java delete mode 100644 src/main/java/gregtech/api/gui/widgets/GT_LockedWhileActiveButton.java delete mode 100644 src/main/java/gregtech/api/gui/widgets/GT_PhantomItemButton.java create mode 100644 src/main/java/gregtech/api/gui/widgets/LockedWhileActiveButton.java create mode 100644 src/main/java/gregtech/api/gui/widgets/PhantomItemButton.java create mode 100644 src/main/java/gregtech/api/interfaces/fluid/IGTFluid.java create mode 100644 src/main/java/gregtech/api/interfaces/fluid/IGTFluidBuilder.java create mode 100644 src/main/java/gregtech/api/interfaces/fluid/IGTRegisteredFluid.java delete mode 100644 src/main/java/gregtech/api/interfaces/fluid/IGT_Fluid.java delete mode 100644 src/main/java/gregtech/api/interfaces/fluid/IGT_FluidBuilder.java delete mode 100644 src/main/java/gregtech/api/interfaces/fluid/IGT_RegisteredFluid.java create mode 100644 src/main/java/gregtech/api/interfaces/internal/IGTCraftingRecipe.java create mode 100644 src/main/java/gregtech/api/interfaces/internal/IGTMod.java create mode 100644 src/main/java/gregtech/api/interfaces/internal/IGTRecipeAdder.java delete mode 100644 src/main/java/gregtech/api/interfaces/internal/IGT_CraftingRecipe.java delete mode 100644 src/main/java/gregtech/api/interfaces/internal/IGT_Mod.java delete mode 100644 src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java delete mode 100644 src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java create mode 100644 src/main/java/gregtech/api/interfaces/modularui/IControllerWithOptionalFeatures.java create mode 100644 src/main/java/gregtech/api/items/BlockLongDistancePipe.java create mode 100644 src/main/java/gregtech/api/items/GTGenericBlock.java create mode 100644 src/main/java/gregtech/api/items/GTGenericItem.java delete mode 100644 src/main/java/gregtech/api/items/GT_Block_LongDistancePipe.java delete mode 100644 src/main/java/gregtech/api/items/GT_BreederCell_Item.java delete mode 100644 src/main/java/gregtech/api/items/GT_CoolantCellIC_Item.java delete mode 100644 src/main/java/gregtech/api/items/GT_CoolantCell_Item.java delete mode 100644 src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java delete mode 100644 src/main/java/gregtech/api/items/GT_Generic_Block.java delete mode 100644 src/main/java/gregtech/api/items/GT_Generic_Item.java delete mode 100644 src/main/java/gregtech/api/items/GT_MetaBase_Item.java delete mode 100644 src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java delete mode 100644 src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X01.java delete mode 100644 src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X32.java delete mode 100644 src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java delete mode 100644 src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java delete mode 100644 src/main/java/gregtech/api/items/GT_RadioactiveCell_Item.java delete mode 100644 src/main/java/gregtech/api/items/GT_Tool_Item.java create mode 100644 src/main/java/gregtech/api/items/ItemBreederCell.java create mode 100644 src/main/java/gregtech/api/items/ItemCoolantCell.java create mode 100644 src/main/java/gregtech/api/items/ItemCoolantCellIC.java create mode 100644 src/main/java/gregtech/api/items/ItemEnergyArmor.java create mode 100644 src/main/java/gregtech/api/items/ItemRadioactiveCell.java create mode 100644 src/main/java/gregtech/api/items/ItemRadioactiveCellIC.java create mode 100644 src/main/java/gregtech/api/items/ItemTool.java create mode 100644 src/main/java/gregtech/api/items/MetaBaseItem.java create mode 100644 src/main/java/gregtech/api/items/MetaGeneratedItem.java create mode 100644 src/main/java/gregtech/api/items/MetaGeneratedItemX01.java create mode 100644 src/main/java/gregtech/api/items/MetaGeneratedItemX32.java create mode 100644 src/main/java/gregtech/api/items/MetaGeneratedTool.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Frame.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicBatteryBuffer.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicGenerator.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull_NonElectric.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Steel.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_CubicMultiBlockBase.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_FilterBase.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_DataAccess.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Dynamo.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_MultiInput.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBus.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_QuadrupleHumongous.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MagHatch.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SpecialFilter.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TieredMachineBlock.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TooltipMultiBlockBase.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_WetTransformer.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Dynamo.java delete mode 100644 src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEBasicBatteryBuffer.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEBasicGenerator.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEBasicHull.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEBasicHullNonElectric.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachine.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineBronze.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineSteel.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineWithRecipe.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEBasicTank.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEBuffer.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTECable.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTECubicMultiBlockBase.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEEnhancedMultiBlockBase.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEExtendedPowerMultiBlockBase.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEFilterBase.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEFluid.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatch.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchDataAccess.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchDynamo.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchEnergy.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchInput.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchInputBus.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMagnet.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMaintenance.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMuffler.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMultiInput.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchOutput.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchOutputBus.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEHatchQuadrupleHumongous.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEItem.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTESpecialFilter.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTETieredMachineBlock.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTETooltipMultiBlockBase.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTETransformer.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEWetTransformer.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEWirelessDynamo.java create mode 100644 src/main/java/gregtech/api/metatileentity/implementations/MTEWirelessEnergy.java create mode 100644 src/main/java/gregtech/api/net/GTPacket.java create mode 100644 src/main/java/gregtech/api/net/GTPacketBlockEvent.java create mode 100644 src/main/java/gregtech/api/net/GTPacketClientPreference.java create mode 100644 src/main/java/gregtech/api/net/GTPacketMultiTileEntity.java create mode 100644 src/main/java/gregtech/api/net/GTPacketMusicSystemData.java create mode 100644 src/main/java/gregtech/api/net/GTPacketNew.java create mode 100644 src/main/java/gregtech/api/net/GTPacketPollution.java create mode 100644 src/main/java/gregtech/api/net/GTPacketRequestCoverData.java create mode 100644 src/main/java/gregtech/api/net/GTPacketSendCoverData.java create mode 100644 src/main/java/gregtech/api/net/GTPacketSendOregenPattern.java create mode 100644 src/main/java/gregtech/api/net/GTPacketSetConfigurationCircuit.java create mode 100644 src/main/java/gregtech/api/net/GTPacketSound.java create mode 100644 src/main/java/gregtech/api/net/GTPacketTileEntity.java create mode 100644 src/main/java/gregtech/api/net/GTPacketToolSwitchMode.java create mode 100644 src/main/java/gregtech/api/net/GTPacketTypes.java create mode 100644 src/main/java/gregtech/api/net/GTPacketUpdateItem.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet.java delete mode 100644 src/main/java/gregtech/api/net/GT_PacketTypes.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_Block_Event.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_ClientPreference.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_MusicSystemData.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_New.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_Pollution.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_SendOregenPattern.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_Sound.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_TileEntity.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_ToolSwitchMode.java delete mode 100644 src/main/java/gregtech/api/net/GT_Packet_UpdateItem.java create mode 100644 src/main/java/gregtech/api/objects/GTArrayList.java create mode 100644 src/main/java/gregtech/api/objects/GTChunkManager.java create mode 100644 src/main/java/gregtech/api/objects/GTCopiedBlockTexture.java create mode 100644 src/main/java/gregtech/api/objects/GTCoverDefault.java create mode 100644 src/main/java/gregtech/api/objects/GTCoverNone.java create mode 100644 src/main/java/gregtech/api/objects/GTFluid.java create mode 100644 src/main/java/gregtech/api/objects/GTHashSet.java create mode 100644 src/main/java/gregtech/api/objects/GTItemStack.java create mode 100644 src/main/java/gregtech/api/objects/GTItemStack2.java create mode 100644 src/main/java/gregtech/api/objects/GTMultiTexture.java create mode 100644 src/main/java/gregtech/api/objects/GTRenderedTexture.java create mode 100644 src/main/java/gregtech/api/objects/GTSidedTexture.java create mode 100644 src/main/java/gregtech/api/objects/GTStdRenderedTexture.java create mode 100644 src/main/java/gregtech/api/objects/GTUODimension.java create mode 100644 src/main/java/gregtech/api/objects/GTUODimensionList.java create mode 100644 src/main/java/gregtech/api/objects/GTUOFluid.java delete mode 100644 src/main/java/gregtech/api/objects/GT_ArrayList.java delete mode 100644 src/main/java/gregtech/api/objects/GT_ChunkManager.java delete mode 100644 src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java delete mode 100644 src/main/java/gregtech/api/objects/GT_Cover_Default.java delete mode 100644 src/main/java/gregtech/api/objects/GT_Cover_None.java delete mode 100644 src/main/java/gregtech/api/objects/GT_Fluid.java delete mode 100644 src/main/java/gregtech/api/objects/GT_HashSet.java delete mode 100644 src/main/java/gregtech/api/objects/GT_ItemStack.java delete mode 100644 src/main/java/gregtech/api/objects/GT_ItemStack2.java delete mode 100644 src/main/java/gregtech/api/objects/GT_MultiTexture.java delete mode 100644 src/main/java/gregtech/api/objects/GT_RenderedTexture.java delete mode 100644 src/main/java/gregtech/api/objects/GT_SidedTexture.java delete mode 100644 src/main/java/gregtech/api/objects/GT_StdRenderedTexture.java delete mode 100644 src/main/java/gregtech/api/objects/GT_UO_Dimension.java delete mode 100644 src/main/java/gregtech/api/objects/GT_UO_DimensionList.java delete mode 100644 src/main/java/gregtech/api/objects/GT_UO_Fluid.java delete mode 100644 src/main/java/gregtech/api/threads/GT_Runnable_Cable_Update.java delete mode 100644 src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java delete mode 100644 src/main/java/gregtech/api/threads/GT_Runnable_Sound.java create mode 100644 src/main/java/gregtech/api/threads/RunnableCableUpdate.java create mode 100644 src/main/java/gregtech/api/threads/RunnableMachineUpdate.java create mode 100644 src/main/java/gregtech/api/threads/RunnableSound.java create mode 100644 src/main/java/gregtech/api/util/AssemblyLineServer.java create mode 100644 src/main/java/gregtech/api/util/AssemblyLineUtils.java create mode 100644 src/main/java/gregtech/api/util/CircuitryBehavior.java create mode 100644 src/main/java/gregtech/api/util/CoverBehavior.java create mode 100644 src/main/java/gregtech/api/util/CoverBehaviorBase.java create mode 100644 src/main/java/gregtech/api/util/ExoticEnergyInputHelper.java create mode 100644 src/main/java/gregtech/api/util/GTApiaryModifier.java create mode 100644 src/main/java/gregtech/api/util/GTApiaryUpgrade.java create mode 100644 src/main/java/gregtech/api/util/GTBaseCrop.java create mode 100644 src/main/java/gregtech/api/util/GTBlockMap.java create mode 100644 src/main/java/gregtech/api/util/GTBlockSet.java create mode 100644 src/main/java/gregtech/api/util/GTCLSCompat.java create mode 100644 src/main/java/gregtech/api/util/GTChunkAssociatedData.java create mode 100644 src/main/java/gregtech/api/util/GTClientPreference.java create mode 100644 src/main/java/gregtech/api/util/GTConfig.java create mode 100644 src/main/java/gregtech/api/util/GTCreativeTab.java create mode 100644 src/main/java/gregtech/api/util/GTFoodStat.java create mode 100644 src/main/java/gregtech/api/util/GTForestryCompat.java create mode 100644 src/main/java/gregtech/api/util/GTGCCompat.java create mode 100644 src/main/java/gregtech/api/util/GTIBoxableWrapper.java create mode 100644 src/main/java/gregtech/api/util/GTItsNotMyFaultException.java create mode 100644 src/main/java/gregtech/api/util/GTLanguageManager.java create mode 100644 src/main/java/gregtech/api/util/GTLog.java create mode 100644 src/main/java/gregtech/api/util/GTModHandler.java create mode 100644 src/main/java/gregtech/api/util/GTMusicSystem.java create mode 100644 src/main/java/gregtech/api/util/GTOreDictUnificator.java create mode 100644 src/main/java/gregtech/api/util/GTPlayedSound.java create mode 100644 src/main/java/gregtech/api/util/GTRecipe.java create mode 100644 src/main/java/gregtech/api/util/GTRecipeBuilder.java create mode 100644 src/main/java/gregtech/api/util/GTRecipeConstants.java create mode 100644 src/main/java/gregtech/api/util/GTRecipeMapUtil.java create mode 100644 src/main/java/gregtech/api/util/GTRecipeRegistrator.java create mode 100644 src/main/java/gregtech/api/util/GTRenderingWorld.java create mode 100644 src/main/java/gregtech/api/util/GTShapedRecipe.java create mode 100644 src/main/java/gregtech/api/util/GTShapelessRecipe.java create mode 100644 src/main/java/gregtech/api/util/GTSpawnEventHandler.java create mode 100644 src/main/java/gregtech/api/util/GTStreamUtil.java create mode 100644 src/main/java/gregtech/api/util/GTStructureUtility.java create mode 100644 src/main/java/gregtech/api/util/GTToolHarvestHelper.java create mode 100644 src/main/java/gregtech/api/util/GTTooltipDataCache.java create mode 100644 src/main/java/gregtech/api/util/GTUtil.java create mode 100644 src/main/java/gregtech/api/util/GTUtility.java create mode 100644 src/main/java/gregtech/api/util/GTUtilityClient.java create mode 100644 src/main/java/gregtech/api/util/GTWaila.java delete mode 100644 src/main/java/gregtech/api/util/GT_ApiaryModifier.java delete mode 100644 src/main/java/gregtech/api/util/GT_ApiaryUpgrade.java delete mode 100644 src/main/java/gregtech/api/util/GT_AssemblyLineUtils.java delete mode 100644 src/main/java/gregtech/api/util/GT_Assemblyline_Server.java delete mode 100644 src/main/java/gregtech/api/util/GT_BaseCrop.java delete mode 100644 src/main/java/gregtech/api/util/GT_BlockMap.java delete mode 100644 src/main/java/gregtech/api/util/GT_BlockSet.java delete mode 100644 src/main/java/gregtech/api/util/GT_CLS_Compat.java delete mode 100644 src/main/java/gregtech/api/util/GT_ChunkAssociatedData.java delete mode 100644 src/main/java/gregtech/api/util/GT_CircuitryBehavior.java delete mode 100644 src/main/java/gregtech/api/util/GT_ClientPreference.java delete mode 100644 src/main/java/gregtech/api/util/GT_Config.java delete mode 100644 src/main/java/gregtech/api/util/GT_CoverBehavior.java delete mode 100644 src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java delete mode 100644 src/main/java/gregtech/api/util/GT_CreativeTab.java delete mode 100644 src/main/java/gregtech/api/util/GT_ExoticEnergyInputHelper.java delete mode 100644 src/main/java/gregtech/api/util/GT_FoodStat.java delete mode 100644 src/main/java/gregtech/api/util/GT_Forestry_Compat.java delete mode 100644 src/main/java/gregtech/api/util/GT_GC_Compat.java delete mode 100644 src/main/java/gregtech/api/util/GT_HatchElementBuilder.java delete mode 100644 src/main/java/gregtech/api/util/GT_IBoxableWrapper.java delete mode 100644 src/main/java/gregtech/api/util/GT_ItsNotMyFaultException.java delete mode 100644 src/main/java/gregtech/api/util/GT_JubilanceMegaApiary.java delete mode 100644 src/main/java/gregtech/api/util/GT_LanguageManager.java delete mode 100644 src/main/java/gregtech/api/util/GT_Log.java delete mode 100644 src/main/java/gregtech/api/util/GT_ModHandler.java delete mode 100644 src/main/java/gregtech/api/util/GT_Multiblock_Tooltip_Builder.java delete mode 100644 src/main/java/gregtech/api/util/GT_MusicSystem.java delete mode 100644 src/main/java/gregtech/api/util/GT_OreDictUnificator.java delete mode 100644 src/main/java/gregtech/api/util/GT_OverclockCalculator.java delete mode 100644 src/main/java/gregtech/api/util/GT_PCBFactoryManager.java delete mode 100644 src/main/java/gregtech/api/util/GT_ParallelHelper.java delete mode 100644 src/main/java/gregtech/api/util/GT_PlayedSound.java delete mode 100644 src/main/java/gregtech/api/util/GT_ProcessingArray_Manager.java delete mode 100644 src/main/java/gregtech/api/util/GT_Recipe.java delete mode 100644 src/main/java/gregtech/api/util/GT_RecipeBuilder.java delete mode 100644 src/main/java/gregtech/api/util/GT_RecipeConstants.java delete mode 100644 src/main/java/gregtech/api/util/GT_RecipeMapUtil.java delete mode 100644 src/main/java/gregtech/api/util/GT_RecipeRegistrator.java delete mode 100644 src/main/java/gregtech/api/util/GT_RenderingWorld.java delete mode 100644 src/main/java/gregtech/api/util/GT_Shaped_Recipe.java delete mode 100644 src/main/java/gregtech/api/util/GT_Shapeless_Recipe.java delete mode 100644 src/main/java/gregtech/api/util/GT_SpawnEventHandler.java delete mode 100644 src/main/java/gregtech/api/util/GT_StreamUtil.java delete mode 100644 src/main/java/gregtech/api/util/GT_StructureUtility.java delete mode 100644 src/main/java/gregtech/api/util/GT_ToolHarvestHelper.java delete mode 100644 src/main/java/gregtech/api/util/GT_Util.java delete mode 100644 src/main/java/gregtech/api/util/GT_Utility.java delete mode 100644 src/main/java/gregtech/api/util/GT_UtilityClient.java delete mode 100644 src/main/java/gregtech/api/util/GT_Waila.java create mode 100644 src/main/java/gregtech/api/util/HatchElementBuilder.java create mode 100644 src/main/java/gregtech/api/util/IGTHatchAdder.java delete mode 100644 src/main/java/gregtech/api/util/IGT_HatchAdder.java create mode 100644 src/main/java/gregtech/api/util/JubilanceMegaApiary.java create mode 100644 src/main/java/gregtech/api/util/MultiblockTooltipBuilder.java create mode 100644 src/main/java/gregtech/api/util/OverclockCalculator.java create mode 100644 src/main/java/gregtech/api/util/PCBFactoryManager.java create mode 100644 src/main/java/gregtech/api/util/ParallelHelper.java create mode 100644 src/main/java/gregtech/api/util/ProcessingArrayManager.java create mode 100644 src/main/java/gregtech/api/world/GTWorldgen.java delete mode 100644 src/main/java/gregtech/api/world/GT_Worldgen.java create mode 100644 src/main/java/gregtech/client/GTGUIClientConfig.java create mode 100644 src/main/java/gregtech/client/GTGuiFactory.java create mode 100644 src/main/java/gregtech/client/GTSoundLoop.java create mode 100644 src/main/java/gregtech/client/GTTooltipHandler.java delete mode 100644 src/main/java/gregtech/client/GT_GUI_ClientConfig.java delete mode 100644 src/main/java/gregtech/client/GT_GuiFactory.java delete mode 100644 src/main/java/gregtech/client/GT_SoundLoop.java delete mode 100644 src/main/java/gregtech/client/GT_TooltipHandler.java create mode 100644 src/main/java/gregtech/common/GTClient.java create mode 100644 src/main/java/gregtech/common/GTDummyWorld.java create mode 100644 src/main/java/gregtech/common/GTIteratorRandom.java create mode 100644 src/main/java/gregtech/common/GTNetwork.java create mode 100644 src/main/java/gregtech/common/GTPlayerActivityLogger.java create mode 100644 src/main/java/gregtech/common/GTProxy.java create mode 100644 src/main/java/gregtech/common/GTServer.java create mode 100644 src/main/java/gregtech/common/GTThaumcraftCompat.java create mode 100644 src/main/java/gregtech/common/GTWorldgenerator.java delete mode 100644 src/main/java/gregtech/common/GT_Client.java delete mode 100644 src/main/java/gregtech/common/GT_DummyWorld.java delete mode 100644 src/main/java/gregtech/common/GT_IteratorRandom.java delete mode 100644 src/main/java/gregtech/common/GT_Network.java delete mode 100644 src/main/java/gregtech/common/GT_PlayerActivityLogger.java delete mode 100644 src/main/java/gregtech/common/GT_Pollution.java delete mode 100644 src/main/java/gregtech/common/GT_Proxy.java delete mode 100644 src/main/java/gregtech/common/GT_RecipeAdder.java delete mode 100644 src/main/java/gregtech/common/GT_Server.java delete mode 100644 src/main/java/gregtech/common/GT_ThaumcraftCompat.java delete mode 100644 src/main/java/gregtech/common/GT_UndergroundOil.java delete mode 100644 src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java delete mode 100644 src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java delete mode 100644 src/main/java/gregtech/common/GT_Worldgen_Stone.java delete mode 100644 src/main/java/gregtech/common/GT_Worldgenerator.java create mode 100644 src/main/java/gregtech/common/Pollution.java create mode 100644 src/main/java/gregtech/common/RecipeAdder.java create mode 100644 src/main/java/gregtech/common/UndergroundOil.java create mode 100644 src/main/java/gregtech/common/WorldgenGTOreLayer.java create mode 100644 src/main/java/gregtech/common/WorldgenGTOreSmallPieces.java create mode 100644 src/main/java/gregtech/common/WorldgenStone.java create mode 100644 src/main/java/gregtech/common/bees/GTAlleleBeeSpecies.java create mode 100644 src/main/java/gregtech/common/bees/GTAlleleHelper.java create mode 100644 src/main/java/gregtech/common/bees/GTBeeMutation.java delete mode 100644 src/main/java/gregtech/common/bees/GT_AlleleBeeSpecies.java delete mode 100644 src/main/java/gregtech/common/bees/GT_AlleleHelper.java delete mode 100644 src/main/java/gregtech/common/bees/GT_Bee_Mutation.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCasings1.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCasings10.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCasings11.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCasings2.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCasings3.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCasings4.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCasings5.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCasings6.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCasings8.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCasings9.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCasingsAbstract.java create mode 100644 src/main/java/gregtech/common/blocks/BlockConcretes.java create mode 100644 src/main/java/gregtech/common/blocks/BlockCyclotronCoils.java create mode 100644 src/main/java/gregtech/common/blocks/BlockDrone.java create mode 100644 src/main/java/gregtech/common/blocks/BlockFrameBox.java create mode 100644 src/main/java/gregtech/common/blocks/BlockGlass1.java create mode 100644 src/main/java/gregtech/common/blocks/BlockGranites.java create mode 100644 src/main/java/gregtech/common/blocks/BlockLaser.java create mode 100644 src/main/java/gregtech/common/blocks/BlockMachines.java create mode 100644 src/main/java/gregtech/common/blocks/BlockMetal.java create mode 100644 src/main/java/gregtech/common/blocks/BlockOres.java create mode 100644 src/main/java/gregtech/common/blocks/BlockOresAbstract.java create mode 100644 src/main/java/gregtech/common/blocks/BlockReinforced.java create mode 100644 src/main/java/gregtech/common/blocks/BlockStones.java create mode 100644 src/main/java/gregtech/common/blocks/BlockStonesAbstract.java create mode 100644 src/main/java/gregtech/common/blocks/BlockStorage.java create mode 100644 src/main/java/gregtech/common/blocks/BlockTintedIndustrialGlass.java create mode 100644 src/main/java/gregtech/common/blocks/BlockWormholeRender.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Casings1.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Casings10.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Casings11.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Casings2.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Casings3.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Casings4.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Casings5.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Casings6.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Casings8.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Casings9.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Casings_Abstract.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Concretes.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Drone.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_FrameBox.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Glass1.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Granites.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Laser.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Machines.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Metal.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Ores.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Ores_Abstract.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Reinforced.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Stones.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_Storage.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Block_TintedIndustrialGlass.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Cyclotron_Coils.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Cyclotron_Item_Casings.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Block_Laser.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Casings1.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Casings10.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Casings11.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Casings2.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Casings3.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Casings4.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Casings5.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Casings6.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Casings8.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Casings9.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Casings_Abstract.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Concretes.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Frames.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Glass1.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Granites.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_LongDistancePipe.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Machines.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Ores.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Stones_Abstract.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_Storage.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Item_TintedIndustrialGlass.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Material_Casings.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Material_Machines.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Material_Reinforced.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_Packet_Ores.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java delete mode 100644 src/main/java/gregtech/common/blocks/GT_WormholeRenderBlock.java create mode 100644 src/main/java/gregtech/common/blocks/ItemBlockLaser.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCasings1.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCasings10.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCasings11.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCasings2.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCasings3.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCasings4.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCasings5.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCasings6.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCasings8.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCasings9.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCasingsAbstract.java create mode 100644 src/main/java/gregtech/common/blocks/ItemConcretes.java create mode 100644 src/main/java/gregtech/common/blocks/ItemCyclotronCasings.java create mode 100644 src/main/java/gregtech/common/blocks/ItemFrames.java create mode 100644 src/main/java/gregtech/common/blocks/ItemGlass1.java create mode 100644 src/main/java/gregtech/common/blocks/ItemGranites.java create mode 100644 src/main/java/gregtech/common/blocks/ItemLongDistancePipe.java create mode 100644 src/main/java/gregtech/common/blocks/ItemMachines.java create mode 100644 src/main/java/gregtech/common/blocks/ItemOres.java create mode 100644 src/main/java/gregtech/common/blocks/ItemStonesAbstract.java create mode 100644 src/main/java/gregtech/common/blocks/ItemStorage.java create mode 100644 src/main/java/gregtech/common/blocks/ItemTintedIndustrialGlass.java create mode 100644 src/main/java/gregtech/common/blocks/MaterialCasings.java create mode 100644 src/main/java/gregtech/common/blocks/MaterialMachines.java create mode 100644 src/main/java/gregtech/common/blocks/MaterialReinforced.java create mode 100644 src/main/java/gregtech/common/blocks/PacketOres.java create mode 100644 src/main/java/gregtech/common/blocks/TileEntityOres.java create mode 100644 src/main/java/gregtech/common/covers/CoverArm.java create mode 100644 src/main/java/gregtech/common/covers/CoverChest.java create mode 100644 src/main/java/gregtech/common/covers/CoverControlsWork.java create mode 100644 src/main/java/gregtech/common/covers/CoverConveyor.java create mode 100644 src/main/java/gregtech/common/covers/CoverCrafting.java create mode 100644 src/main/java/gregtech/common/covers/CoverDoesWork.java create mode 100644 src/main/java/gregtech/common/covers/CoverDrain.java create mode 100644 src/main/java/gregtech/common/covers/CoverEUMeter.java create mode 100644 src/main/java/gregtech/common/covers/CoverFacadeAE.java create mode 100644 src/main/java/gregtech/common/covers/CoverFacadeBase.java create mode 100644 src/main/java/gregtech/common/covers/CoverFluidLimiter.java create mode 100644 src/main/java/gregtech/common/covers/CoverFluidRegulator.java create mode 100644 src/main/java/gregtech/common/covers/CoverFluidStorageMonitor.java create mode 100644 src/main/java/gregtech/common/covers/CoverFluidfilter.java create mode 100644 src/main/java/gregtech/common/covers/CoverItemFilter.java create mode 100644 src/main/java/gregtech/common/covers/CoverItemMeter.java create mode 100644 src/main/java/gregtech/common/covers/CoverLens.java create mode 100644 src/main/java/gregtech/common/covers/CoverLiquidMeter.java create mode 100644 src/main/java/gregtech/common/covers/CoverMetricsTransmitter.java create mode 100644 src/main/java/gregtech/common/covers/CoverNeedMaintainance.java create mode 100644 src/main/java/gregtech/common/covers/CoverPlayerDetector.java create mode 100644 src/main/java/gregtech/common/covers/CoverPump.java create mode 100644 src/main/java/gregtech/common/covers/CoverRedstoneConductor.java create mode 100644 src/main/java/gregtech/common/covers/CoverRedstoneReceiverExternal.java create mode 100644 src/main/java/gregtech/common/covers/CoverRedstoneReceiverInternal.java create mode 100644 src/main/java/gregtech/common/covers/CoverRedstoneSignalizer.java create mode 100644 src/main/java/gregtech/common/covers/CoverRedstoneTransmitterExternal.java create mode 100644 src/main/java/gregtech/common/covers/CoverRedstoneTransmitterInternal.java create mode 100644 src/main/java/gregtech/common/covers/CoverRedstoneWirelessBase.java create mode 100644 src/main/java/gregtech/common/covers/CoverScreen.java create mode 100644 src/main/java/gregtech/common/covers/CoverShutter.java create mode 100644 src/main/java/gregtech/common/covers/CoverSolarPanel.java create mode 100644 src/main/java/gregtech/common/covers/CoverSteamRegulator.java create mode 100644 src/main/java/gregtech/common/covers/CoverSteamValve.java create mode 100644 src/main/java/gregtech/common/covers/CoverVent.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Arm.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Chest.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Crafting.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Drain.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_FacadeAE.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_FluidStorageMonitor.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Lens.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Metrics_Transmitter.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Pump.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_RedstoneConductor.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverExternal.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverInternal.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_RedstoneSignalizer.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterInternal.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Screen.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Shutter.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_SolarPanel.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_SteamRegulator.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_SteamValve.java delete mode 100644 src/main/java/gregtech/common/covers/GT_Cover_Vent.java create mode 100644 src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverBase.java create mode 100644 src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverExternal.java create mode 100644 src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverInternal.java create mode 100644 src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterBase.java create mode 100644 src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterExternal.java create mode 100644 src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterInternal.java create mode 100644 src/main/java/gregtech/common/covers/redstone/CoverAdvancedWirelessRedstoneBase.java create mode 100644 src/main/java/gregtech/common/covers/redstone/CoverWirelessDoesWorkDetector.java create mode 100644 src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java create mode 100644 src/main/java/gregtech/common/covers/redstone/CoverWirelessItemDetector.java create mode 100644 src/main/java/gregtech/common/covers/redstone/CoverWirelessMaintenanceDetector.java delete mode 100644 src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java delete mode 100644 src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java delete mode 100644 src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java delete mode 100644 src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java delete mode 100644 src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java delete mode 100644 src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java delete mode 100644 src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java delete mode 100644 src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessDoesWorkDetector.java delete mode 100644 src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java delete mode 100644 src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java delete mode 100644 src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java create mode 100644 src/main/java/gregtech/common/entities/EntityFXPollution.java delete mode 100644 src/main/java/gregtech/common/entities/GT_EntityFXPollution.java create mode 100644 src/main/java/gregtech/common/fluid/GTFluid.java create mode 100644 src/main/java/gregtech/common/fluid/GTFluidBuilder.java delete mode 100644 src/main/java/gregtech/common/fluid/GT_Fluid.java delete mode 100644 src/main/java/gregtech/common/fluid/GT_FluidBuilder.java create mode 100644 src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerCycleButtonWidget.java create mode 100644 src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerNumericWidget.java create mode 100644 src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerSlotWidget.java create mode 100644 src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerTextFieldWidget.java create mode 100644 src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerToggleButtonWidget.java delete mode 100644 src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_CycleButtonWidget.java delete mode 100644 src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_NumericWidget.java delete mode 100644 src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_SlotWidget.java delete mode 100644 src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java delete mode 100644 src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_ToggleButtonWidget.java delete mode 100644 src/main/java/gregtech/common/items/GT_AdvancedSensorCard_Item.java delete mode 100644 src/main/java/gregtech/common/items/GT_DepletetCell_Item.java delete mode 100644 src/main/java/gregtech/common/items/GT_FluidDisplayItem.java delete mode 100644 src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java delete mode 100644 src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java delete mode 100644 src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java delete mode 100644 src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java delete mode 100644 src/main/java/gregtech/common/items/GT_MetaGenerated_Item_98.java delete mode 100644 src/main/java/gregtech/common/items/GT_MetaGenerated_Item_99.java delete mode 100644 src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java delete mode 100644 src/main/java/gregtech/common/items/GT_NeutronReflector_Item.java delete mode 100644 src/main/java/gregtech/common/items/GT_SensorCard_Item.java delete mode 100644 src/main/java/gregtech/common/items/GT_TierDrone.java delete mode 100644 src/main/java/gregtech/common/items/GT_VolumetricFlask.java delete mode 100644 src/main/java/gregtech/common/items/GT_WirelessHeadphones.java create mode 100644 src/main/java/gregtech/common/items/IDMetaItem01.java create mode 100644 src/main/java/gregtech/common/items/IDMetaItem02.java create mode 100644 src/main/java/gregtech/common/items/IDMetaItem03.java create mode 100644 src/main/java/gregtech/common/items/IDMetaTool01.java delete mode 100644 src/main/java/gregtech/common/items/ID_MetaItem_01.java delete mode 100644 src/main/java/gregtech/common/items/ID_MetaItem_02.java delete mode 100644 src/main/java/gregtech/common/items/ID_MetaItem_03.java delete mode 100644 src/main/java/gregtech/common/items/ID_MetaTool_01.java create mode 100644 src/main/java/gregtech/common/items/ItemAdvancedSensorCard.java create mode 100644 src/main/java/gregtech/common/items/ItemDepletedCell.java create mode 100644 src/main/java/gregtech/common/items/ItemFluidDisplay.java create mode 100644 src/main/java/gregtech/common/items/ItemIntegratedCircuit.java create mode 100644 src/main/java/gregtech/common/items/ItemNeutronReflector.java create mode 100644 src/main/java/gregtech/common/items/ItemSensorCard.java create mode 100644 src/main/java/gregtech/common/items/ItemTierDrone.java create mode 100644 src/main/java/gregtech/common/items/ItemVolumetricFlask.java create mode 100644 src/main/java/gregtech/common/items/ItemWirelessHeadphones.java create mode 100644 src/main/java/gregtech/common/items/MetaGeneratedItem01.java create mode 100644 src/main/java/gregtech/common/items/MetaGeneratedItem02.java create mode 100644 src/main/java/gregtech/common/items/MetaGeneratedItem03.java create mode 100644 src/main/java/gregtech/common/items/MetaGeneratedItem98.java create mode 100644 src/main/java/gregtech/common/items/MetaGeneratedItem99.java create mode 100644 src/main/java/gregtech/common/items/MetaGeneratedTool01.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourCrowbar.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourDataOrb.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourDataStick.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourHoe.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourLighter.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourNone.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourPlungerEssentia.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourPlungerFluid.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourPlungerItem.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourPrintedPages.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourProspecting.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourScanner.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourScoop.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourScrewdriver.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourSense.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourSensorKit.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourSoftHammer.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourSonictron.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourSprayColor.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorRemover.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourSwitchMetadata.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourSwitchMode.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourWrench.java create mode 100644 src/main/java/gregtech/common/items/behaviors/BehaviourWrittenBook.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Crowbar.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_DataOrb.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_DataStick.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Hoe.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Lighter.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_None.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Essentia.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Fluid.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Item.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_PrintedPages.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Prospecting.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Scanner.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Scoop.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Screwdriver.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Sense.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_SensorKit.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_SoftHammer.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Sonictron.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color_Remover.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Metadata.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Mode.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_Wrench.java delete mode 100644 src/main/java/gregtech/common/items/behaviors/Behaviour_WrittenBook.java create mode 100644 src/main/java/gregtech/common/misc/DrillingLogicDelegate.java create mode 100644 src/main/java/gregtech/common/misc/GTClientPollutionMap.java create mode 100644 src/main/java/gregtech/common/misc/GTCommand.java delete mode 100644 src/main/java/gregtech/common/misc/GT_ClientPollutionMap.java delete mode 100644 src/main/java/gregtech/common/misc/GT_Command.java delete mode 100644 src/main/java/gregtech/common/misc/GT_DrillingLogicDelegate.java delete mode 100644 src/main/java/gregtech/common/misc/GT_IDrillingLogicDelegateOwner.java create mode 100644 src/main/java/gregtech/common/misc/IDrillingLogicDelegateOwner.java create mode 100644 src/main/java/gregtech/common/misc/spaceprojects/base/SPRequirements.java create mode 100644 src/main/java/gregtech/common/misc/spaceprojects/base/SPUpgrade.java delete mode 100644 src/main/java/gregtech/common/misc/spaceprojects/base/SP_Requirements.java delete mode 100644 src/main/java/gregtech/common/misc/spaceprojects/base/SP_Upgrade.java create mode 100644 src/main/java/gregtech/common/misc/spaceprojects/commands/SPCommand.java create mode 100644 src/main/java/gregtech/common/misc/spaceprojects/commands/SPMCommand.java delete mode 100644 src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java delete mode 100644 src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java create mode 100644 src/main/java/gregtech/common/misc/spaceprojects/commands/SpaceProjectCommand.java delete mode 100644 src/main/java/gregtech/common/misc/spaceprojects/commands/SpaceProject_Command.java create mode 100644 src/main/java/gregtech/common/redstonecircuits/CircuitBasicLogic.java create mode 100644 src/main/java/gregtech/common/redstonecircuits/CircuitBitAnd.java create mode 100644 src/main/java/gregtech/common/redstonecircuits/CircuitCombinationLock.java create mode 100644 src/main/java/gregtech/common/redstonecircuits/CircuitEquals.java create mode 100644 src/main/java/gregtech/common/redstonecircuits/CircuitPulser.java create mode 100644 src/main/java/gregtech/common/redstonecircuits/CircuitRandomizer.java create mode 100644 src/main/java/gregtech/common/redstonecircuits/CircuitRedstoneMeter.java create mode 100644 src/main/java/gregtech/common/redstonecircuits/CircuitRepeater.java create mode 100644 src/main/java/gregtech/common/redstonecircuits/CircuitTimer.java delete mode 100644 src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BasicLogic.java delete mode 100644 src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BitAnd.java delete mode 100644 src/main/java/gregtech/common/redstonecircuits/GT_Circuit_CombinationLock.java delete mode 100644 src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Equals.java delete mode 100644 src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Pulser.java delete mode 100644 src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Randomizer.java delete mode 100644 src/main/java/gregtech/common/redstonecircuits/GT_Circuit_RedstoneMeter.java delete mode 100644 src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Repeater.java delete mode 100644 src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Timer.java create mode 100644 src/main/java/gregtech/common/render/DroneRender.java create mode 100644 src/main/java/gregtech/common/render/FlaskRenderer.java create mode 100644 src/main/java/gregtech/common/render/FluidDisplayStackRenderer.java create mode 100644 src/main/java/gregtech/common/render/GTCapeRenderer.java create mode 100644 src/main/java/gregtech/common/render/GTCopiedBlockTextureRender.java create mode 100644 src/main/java/gregtech/common/render/GTCopiedCTMBlockTexture.java create mode 100644 src/main/java/gregtech/common/render/GTIconFlipped.java create mode 100644 src/main/java/gregtech/common/render/GTMultiTextureRender.java create mode 100644 src/main/java/gregtech/common/render/GTRenderUtil.java create mode 100644 src/main/java/gregtech/common/render/GTRenderedTexture.java create mode 100644 src/main/java/gregtech/common/render/GTRendererBlock.java create mode 100644 src/main/java/gregtech/common/render/GTSidedTextureRender.java create mode 100644 src/main/java/gregtech/common/render/GTTextureBase.java create mode 100644 src/main/java/gregtech/common/render/GTTextureBuilder.java delete mode 100644 src/main/java/gregtech/common/render/GT_CapeRenderer.java delete mode 100644 src/main/java/gregtech/common/render/GT_CopiedBlockTexture.java delete mode 100644 src/main/java/gregtech/common/render/GT_CopiedCTMBlockTexture.java delete mode 100644 src/main/java/gregtech/common/render/GT_FlaskRenderer.java delete mode 100644 src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java delete mode 100644 src/main/java/gregtech/common/render/GT_IconFlipped.java delete mode 100644 src/main/java/gregtech/common/render/GT_LaserRenderer.java delete mode 100644 src/main/java/gregtech/common/render/GT_MetaGenerated_Tool_Renderer.java delete mode 100644 src/main/java/gregtech/common/render/GT_MultiTexture.java delete mode 100644 src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java delete mode 100644 src/main/java/gregtech/common/render/GT_PollutionRenderer.java delete mode 100644 src/main/java/gregtech/common/render/GT_RenderDrone.java delete mode 100644 src/main/java/gregtech/common/render/GT_RenderUtil.java delete mode 100644 src/main/java/gregtech/common/render/GT_RenderedTexture.java delete mode 100644 src/main/java/gregtech/common/render/GT_Renderer_Block.java delete mode 100644 src/main/java/gregtech/common/render/GT_SidedTexture.java delete mode 100644 src/main/java/gregtech/common/render/GT_TextureBase.java delete mode 100644 src/main/java/gregtech/common/render/GT_TextureBuilder.java delete mode 100644 src/main/java/gregtech/common/render/GT_WormholeRenderer.java create mode 100644 src/main/java/gregtech/common/render/LaserRenderer.java create mode 100644 src/main/java/gregtech/common/render/MetaGeneratedToolRenderer.java create mode 100644 src/main/java/gregtech/common/render/MultiTileRenderer.java create mode 100644 src/main/java/gregtech/common/render/PollutionRenderer.java create mode 100644 src/main/java/gregtech/common/render/WormholeRenderer.java create mode 100644 src/main/java/gregtech/common/render/items/DataStickRenderer.java delete mode 100644 src/main/java/gregtech/common/render/items/GT_DataStick_Renderer.java delete mode 100644 src/main/java/gregtech/common/render/items/GT_GeneratedItem_Renderer.java delete mode 100644 src/main/java/gregtech/common/render/items/GT_GeneratedMaterial_Renderer.java delete mode 100644 src/main/java/gregtech/common/render/items/GT_MetaGenerated_Item_Renderer.java create mode 100644 src/main/java/gregtech/common/render/items/GeneratedItemRenderer.java create mode 100644 src/main/java/gregtech/common/render/items/GeneratedMaterialRenderer.java create mode 100644 src/main/java/gregtech/common/render/items/MetaGeneratedItemRenderer.java delete mode 100644 src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java delete mode 100644 src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java delete mode 100644 src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java delete mode 100644 src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java delete mode 100644 src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java delete mode 100644 src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java delete mode 100644 src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java create mode 100644 src/main/java/gregtech/common/tileentities/automation/MTEChestBuffer.java create mode 100644 src/main/java/gregtech/common/tileentities/automation/MTEFilter.java create mode 100644 src/main/java/gregtech/common/tileentities/automation/MTEItemDistributor.java create mode 100644 src/main/java/gregtech/common/tileentities/automation/MTERecipeFilter.java create mode 100644 src/main/java/gregtech/common/tileentities/automation/MTERegulator.java create mode 100644 src/main/java/gregtech/common/tileentities/automation/MTESuperBuffer.java create mode 100644 src/main/java/gregtech/common/tileentities/automation/MTETypeFilter.java delete mode 100644 src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java delete mode 100644 src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java delete mode 100644 src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java delete mode 100644 src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java delete mode 100644 src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java delete mode 100644 src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java create mode 100644 src/main/java/gregtech/common/tileentities/boilers/MTEBoiler.java create mode 100644 src/main/java/gregtech/common/tileentities/boilers/MTEBoilerBronze.java create mode 100644 src/main/java/gregtech/common/tileentities/boilers/MTEBoilerLava.java create mode 100644 src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSolar.java create mode 100644 src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSolarSteel.java create mode 100644 src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSteel.java delete mode 100644 src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java create mode 100644 src/main/java/gregtech/common/tileentities/debug/MTEAdvDebugStructureWriter.java delete mode 100644 src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_DieselGenerator.java delete mode 100644 src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_GasTurbine.java delete mode 100644 src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_LightningRod.java delete mode 100644 src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicEnergyConverter.java delete mode 100644 src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java delete mode 100644 src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_NaquadahReactor.java delete mode 100644 src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_PlasmaGenerator.java delete mode 100644 src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SteamTurbine.java create mode 100644 src/main/java/gregtech/common/tileentities/generators/MTEDieselGenerator.java create mode 100644 src/main/java/gregtech/common/tileentities/generators/MTEGasTurbine.java create mode 100644 src/main/java/gregtech/common/tileentities/generators/MTELightningRod.java create mode 100644 src/main/java/gregtech/common/tileentities/generators/MTEMagicEnergyConverter.java create mode 100644 src/main/java/gregtech/common/tileentities/generators/MTEMagicalEnergyAbsorber.java create mode 100644 src/main/java/gregtech/common/tileentities/generators/MTENaquadahReactor.java create mode 100644 src/main/java/gregtech/common/tileentities/generators/MTEPlasmaGenerator.java create mode 100644 src/main/java/gregtech/common/tileentities/generators/MTESteamTurbine.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Bronze.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_BronzeBricks.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Steel.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_SteelBricks.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_ME.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_Slave.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/MTEBasicHullBronze.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/MTEBasicHullBronzeBricks.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/MTEBasicHullSteel.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/MTEBasicHullSteelBricks.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputME.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputSlave.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/MTEHatchInputBusME.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/MTEHatchInputME.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputBusME.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_AdvSeismicProspector.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_BetterJukebox.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Boxinator.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Charger.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Massfabricator.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MonsterRepellent.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_PotionBrewer.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Replicator.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_RockBreaker.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_TurboCharger.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_WorldAccelerator.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEAdvSeismicProspector.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEBetterJukebox.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEBoxinator.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTECharger.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEIndustrialApiary.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEMassfabricator.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEMicrowaveEnergyTransmitter.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEMiner.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEMonsterRepellent.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEPotionBrewer.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEPump.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEReplicator.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTERockBreaker.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEScanner.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTETeleporter.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTETurboCharger.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/basic/MTEWorldAccelerator.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineBase.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineFluid.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineItem.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineBase.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineFluid.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineItem.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AbstractMultiFurnace.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BrickedBlastFurnace.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Charcoal_Pit.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfiller1.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfiller2.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DieselEngine.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DrillerBase.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ExtremeDieselEngine.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer1.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer2.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer3.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialElectromagneticSeparator.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialExtractor.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialLaserEngraver.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IntegratedOreFactory.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Bronze.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Steel.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Titanium.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_TungstenSteel.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeFluidExtractor.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Gas.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_GasAdvanced.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_HPSteam.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Plasma.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiAutoclave.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiCanner.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiLathe.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill1.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill2.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill3.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill4.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillInfinite.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant1.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant2.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant3.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant4.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PrimitiveBlastFurnace.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_WormholeGenerator.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEAbstractMultiFurnace.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEBrickedBlastFurnace.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTECharcoalPit.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTECleanroom.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfiller1.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfiller2.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfillerBase.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEDieselEngine.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEDrillerBase.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEElectricBlastFurnace.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEExtremeDieselEngine.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer1.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer2.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer3.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEHeatExchanger.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEImplosionCompressor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialExtractor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoiler.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerBronze.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerSteel.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTitanium.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTungstenSteel.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeChemicalReactor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeFluidExtractor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineHPSteam.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbinePlasma.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiAutoclave.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiCanner.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiFurnace.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTENanoForge.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOilCracker.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill1.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill2.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill3.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill4.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillInfinite.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant1.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant2.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant3.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant4.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlantBase.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEPCBFactory.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEPrimitiveBlastFurnace.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEProcessingArray.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEPyrolyseOven.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEVacuumFreezer.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_BlackHoleCompressor.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_HIPCompressor.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_HeatSensor.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_IndustrialCompressor.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_NeutroniumCompressor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHeatSensor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTENeutroniumCompressor.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/drone/GT_MetaTileEntity_DroneCentre.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/drone/GT_MetaTileEntity_Hatch_DroneDownLink.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/drone/MTEDroneCentre.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/drone/MTEHatchDroneDownLink.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_Hatch_DegasifierControlHatch.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_LensHousing.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_LensIndicator.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationPlant.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitBase.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitClarifier.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitDegasifier.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitFlocculation.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitOzonation.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitParticleExtractor.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitPhAdjustment.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitPlasmaHeater.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitUVTreatment.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_pHSensor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchDegasifierControl.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchLensHousing.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchLensIndicator.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchPHSensor.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationPlant.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBaryonicPerfection.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBase.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitClarifier.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitDegasser.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitFlocculation.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitOzonation.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitPhAdjustment.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitPlasmaHeater.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitUVTreatment.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Bronze.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java delete mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamAlloySmelterBronze.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamAlloySmelterSteel.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamCompressorBronze.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamCompressorSteel.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamExtractorBronze.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamExtractorSteel.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamForgeHammerBronze.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamForgeHammerSteel.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamFurnaceBronze.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamFurnaceSteel.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamMaceratorBronze.java create mode 100644 src/main/java/gregtech/common/tileentities/machines/steam/MTESteamMaceratorSteel.java delete mode 100644 src/main/java/gregtech/common/tileentities/render/TileDrone.java create mode 100644 src/main/java/gregtech/common/tileentities/render/TileEntityDrone.java create mode 100644 src/main/java/gregtech/common/tileentities/render/TileEntityLaser.java create mode 100644 src/main/java/gregtech/common/tileentities/render/TileEntityWormhole.java delete mode 100644 src/main/java/gregtech/common/tileentities/render/TileLaser.java delete mode 100644 src/main/java/gregtech/common/tileentities/render/TileWormhole.java delete mode 100644 src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java delete mode 100644 src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java delete mode 100644 src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_Locker.java delete mode 100644 src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumChest.java delete mode 100644 src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumTank.java delete mode 100644 src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_SuperChest.java delete mode 100644 src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_SuperTank.java create mode 100644 src/main/java/gregtech/common/tileentities/storage/MTEDigitalChestBase.java create mode 100644 src/main/java/gregtech/common/tileentities/storage/MTEDigitalTankBase.java create mode 100644 src/main/java/gregtech/common/tileentities/storage/MTELocker.java create mode 100644 src/main/java/gregtech/common/tileentities/storage/MTEQuantumChest.java create mode 100644 src/main/java/gregtech/common/tileentities/storage/MTEQuantumTank.java create mode 100644 src/main/java/gregtech/common/tileentities/storage/MTESuperChest.java create mode 100644 src/main/java/gregtech/common/tileentities/storage/MTESuperTank.java create mode 100644 src/main/java/gregtech/common/tools/GTTool.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Axe.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_HV.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_LV.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_MV.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Crowbar.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Drill_HV.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Drill_LV.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Drill_MV.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_File.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_HardHammer.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Hoe.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_JackHammer.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Knife.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Mortar.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Pickaxe.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Plow.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Plunger.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_RollingPin.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Saw.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Scoop.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Screwdriver.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Screwdriver_LV.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Sense.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Shovel.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_SoftHammer.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Soldering_Iron.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Sword.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Turbine.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Turbine_Huge.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Turbine_Large.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Turbine_Normal.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Turbine_Small.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_UniversalSpade.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_WireCutter.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Wrench.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Wrench_HV.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Wrench_LV.java delete mode 100644 src/main/java/gregtech/common/tools/GT_Tool_Wrench_MV.java create mode 100644 src/main/java/gregtech/common/tools/ToolAxe.java create mode 100644 src/main/java/gregtech/common/tools/ToolBranchCutter.java create mode 100644 src/main/java/gregtech/common/tools/ToolButcheryKnife.java create mode 100644 src/main/java/gregtech/common/tools/ToolBuzzSaw.java create mode 100644 src/main/java/gregtech/common/tools/ToolChainsawHV.java create mode 100644 src/main/java/gregtech/common/tools/ToolChainsawLV.java create mode 100644 src/main/java/gregtech/common/tools/ToolChainsawMV.java create mode 100644 src/main/java/gregtech/common/tools/ToolCrowbar.java create mode 100644 src/main/java/gregtech/common/tools/ToolDrillHV.java create mode 100644 src/main/java/gregtech/common/tools/ToolDrillLV.java create mode 100644 src/main/java/gregtech/common/tools/ToolDrillMV.java create mode 100644 src/main/java/gregtech/common/tools/ToolFile.java create mode 100644 src/main/java/gregtech/common/tools/ToolHardHammer.java create mode 100644 src/main/java/gregtech/common/tools/ToolHoe.java create mode 100644 src/main/java/gregtech/common/tools/ToolJackHammer.java create mode 100644 src/main/java/gregtech/common/tools/ToolKnife.java create mode 100644 src/main/java/gregtech/common/tools/ToolMortar.java create mode 100644 src/main/java/gregtech/common/tools/ToolPickaxe.java create mode 100644 src/main/java/gregtech/common/tools/ToolPlow.java create mode 100644 src/main/java/gregtech/common/tools/ToolPlunger.java create mode 100644 src/main/java/gregtech/common/tools/ToolRollingPin.java create mode 100644 src/main/java/gregtech/common/tools/ToolSaw.java create mode 100644 src/main/java/gregtech/common/tools/ToolScoop.java create mode 100644 src/main/java/gregtech/common/tools/ToolScrewdriver.java create mode 100644 src/main/java/gregtech/common/tools/ToolScrewdriverLV.java create mode 100644 src/main/java/gregtech/common/tools/ToolSense.java create mode 100644 src/main/java/gregtech/common/tools/ToolShovel.java create mode 100644 src/main/java/gregtech/common/tools/ToolSoftHammer.java create mode 100644 src/main/java/gregtech/common/tools/ToolSolderingIron.java create mode 100644 src/main/java/gregtech/common/tools/ToolSword.java create mode 100644 src/main/java/gregtech/common/tools/ToolTurbine.java create mode 100644 src/main/java/gregtech/common/tools/ToolTurbineHuge.java create mode 100644 src/main/java/gregtech/common/tools/ToolTurbineLarge.java create mode 100644 src/main/java/gregtech/common/tools/ToolTurbineNormal.java create mode 100644 src/main/java/gregtech/common/tools/ToolTurbineSmall.java create mode 100644 src/main/java/gregtech/common/tools/ToolUniversalSpade.java create mode 100644 src/main/java/gregtech/common/tools/ToolWireCutter.java create mode 100644 src/main/java/gregtech/common/tools/ToolWrench.java create mode 100644 src/main/java/gregtech/common/tools/ToolWrenchHV.java create mode 100644 src/main/java/gregtech/common/tools/ToolWrenchLV.java create mode 100644 src/main/java/gregtech/common/tools/ToolWrenchMV.java delete mode 100644 src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_BranchCutter.java delete mode 100644 src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_File.java delete mode 100644 src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Knife.java delete mode 100644 src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Multitool.java delete mode 100644 src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Saw.java delete mode 100644 src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Screwdriver.java delete mode 100644 src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_WireCutter.java create mode 100644 src/main/java/gregtech/common/tools/pocket/ToolPocketBranchCutter.java create mode 100644 src/main/java/gregtech/common/tools/pocket/ToolPocketFile.java create mode 100644 src/main/java/gregtech/common/tools/pocket/ToolPocketKnife.java create mode 100644 src/main/java/gregtech/common/tools/pocket/ToolPocketMultitool.java create mode 100644 src/main/java/gregtech/common/tools/pocket/ToolPocketSaw.java create mode 100644 src/main/java/gregtech/common/tools/pocket/ToolPocketScrewdriver.java create mode 100644 src/main/java/gregtech/common/tools/pocket/ToolPocketWireCutter.java create mode 100644 src/main/java/gregtech/crossmod/holoinventory/GTInventoryDecoder.java delete mode 100644 src/main/java/gregtech/crossmod/holoinventory/GT_InventoryDecoder.java delete mode 100644 src/main/java/gregtech/crossmod/visualprospecting/GT_VisualProspecting_Database.java create mode 100644 src/main/java/gregtech/crossmod/visualprospecting/VisualProspectingDatabase.java create mode 100644 src/main/java/gregtech/loaders/load/CoverBehaviorLoader.java create mode 100644 src/main/java/gregtech/loaders/load/FuelLoader.java create mode 100644 src/main/java/gregtech/loaders/load/GTItemIterator.java delete mode 100644 src/main/java/gregtech/loaders/load/GT_CoverBehaviorLoader.java delete mode 100644 src/main/java/gregtech/loaders/load/GT_FuelLoader.java delete mode 100644 src/main/java/gregtech/loaders/load/GT_ItemIterator.java delete mode 100644 src/main/java/gregtech/loaders/load/GT_Loader_MetaTileEntities_Recipes.java delete mode 100644 src/main/java/gregtech/loaders/load/GT_SonictronLoader.java create mode 100644 src/main/java/gregtech/loaders/load/MTERecipeLoader.java create mode 100644 src/main/java/gregtech/loaders/load/SonictronLoader.java create mode 100644 src/main/java/gregtech/loaders/misc/CoverLoader.java create mode 100644 src/main/java/gregtech/loaders/misc/GTAchievements.java create mode 100644 src/main/java/gregtech/loaders/misc/GTBeeDefinition.java create mode 100644 src/main/java/gregtech/loaders/misc/GTBees.java create mode 100644 src/main/java/gregtech/loaders/misc/GTBranchDefinition.java delete mode 100644 src/main/java/gregtech/loaders/misc/GT_Achievements.java delete mode 100644 src/main/java/gregtech/loaders/misc/GT_BeeDefinition.java delete mode 100644 src/main/java/gregtech/loaders/misc/GT_Bees.java delete mode 100644 src/main/java/gregtech/loaders/misc/GT_BranchDefinition.java delete mode 100644 src/main/java/gregtech/loaders/misc/GT_CoverLoader.java create mode 100644 src/main/java/gregtech/loaders/misc/bees/GTAlleleEffect.java create mode 100644 src/main/java/gregtech/loaders/misc/bees/GTEffectMachineBoost.java create mode 100644 src/main/java/gregtech/loaders/misc/bees/GTEffectTreeTwister.java create mode 100644 src/main/java/gregtech/loaders/misc/bees/GTFlowers.java delete mode 100644 src/main/java/gregtech/loaders/misc/bees/GT_AlleleEffect.java delete mode 100644 src/main/java/gregtech/loaders/misc/bees/GT_EffectMachineBoost.java delete mode 100644 src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java delete mode 100644 src/main/java/gregtech/loaders/misc/bees/GT_Flowers.java create mode 100644 src/main/java/gregtech/loaders/postload/BlockResistanceLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/BookAndLootLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/CraftingRecipeLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/CropLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/FakeRecipeLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/GTPostLoad.java create mode 100644 src/main/java/gregtech/loaders/postload/GTWorldgenloader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_BlockResistanceLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_BookAndLootLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_CraftingRecipeLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_CropLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_FakeRecipeLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_ItemMaxStacksizeLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_MachineTooltipsLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_MinableRegistrator.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_PCBFactoryMaterialLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_PostLoad.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_ProcessingArrayRecipeLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_RecyclerBlacklistLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_ScrapboxDropLoader.java delete mode 100644 src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java create mode 100644 src/main/java/gregtech/loaders/postload/ItemMaxStacksizeLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/MachineRecipeLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/MachineTooltipsLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/MinableRegistrator.java create mode 100644 src/main/java/gregtech/loaders/postload/PCBFactoryMaterialLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/ProcessingArrayRecipeLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/RecyclerBlacklistLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/ScrapboxDropLoader.java create mode 100644 src/main/java/gregtech/loaders/postload/chains/BauxiteRefineChain.java delete mode 100644 src/main/java/gregtech/loaders/postload/chains/GT_BauxiteRefineChain.java delete mode 100644 src/main/java/gregtech/loaders/postload/chains/GT_NaniteChain.java delete mode 100644 src/main/java/gregtech/loaders/postload/chains/GT_PCBFactoryRecipes.java delete mode 100644 src/main/java/gregtech/loaders/postload/chains/GT_PurifiedWaterRecipes.java create mode 100644 src/main/java/gregtech/loaders/postload/chains/NaniteChain.java create mode 100644 src/main/java/gregtech/loaders/postload/chains/PCBFactoryRecipes.java create mode 100644 src/main/java/gregtech/loaders/postload/chains/PurifiedWaterRecipes.java create mode 100644 src/main/java/gregtech/loaders/preload/GTPreLoad.java delete mode 100644 src/main/java/gregtech/loaders/preload/GT_Loader_CircuitBehaviors.java delete mode 100644 src/main/java/gregtech/loaders/preload/GT_Loader_ItemData.java delete mode 100644 src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java delete mode 100644 src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java delete mode 100644 src/main/java/gregtech/loaders/preload/GT_Loader_OreDictionary.java delete mode 100644 src/main/java/gregtech/loaders/preload/GT_Loader_OreProcessing.java delete mode 100644 src/main/java/gregtech/loaders/preload/GT_PreLoad.java create mode 100644 src/main/java/gregtech/loaders/preload/LoaderCircuitBehaviors.java create mode 100644 src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java create mode 100644 src/main/java/gregtech/loaders/preload/LoaderGTItemData.java create mode 100644 src/main/java/gregtech/loaders/preload/LoaderGTOreDictionary.java create mode 100644 src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java create mode 100644 src/main/java/gregtech/loaders/preload/LoaderOreProcessing.java create mode 100644 src/main/java/gregtech/nei/GTNEIConfig.java create mode 100644 src/main/java/gregtech/nei/GTNEIDefaultHandler.java delete mode 100644 src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java delete mode 100644 src/main/java/gregtech/nei/NEI_GT_Config.java create mode 100644 src/main/java/gtPlusPlus/core/block/general/BlockFluidTankInfinite.java create mode 100644 src/main/java/gtPlusPlus/core/block/general/BlockHellFire.java create mode 100644 src/main/java/gtPlusPlus/core/block/general/BlockLightGlass.java create mode 100644 src/main/java/gtPlusPlus/core/block/general/BlockMiningExplosives.java delete mode 100644 src/main/java/gtPlusPlus/core/block/general/FluidTankInfinite.java delete mode 100644 src/main/java/gtPlusPlus/core/block/general/HellFire.java delete mode 100644 src/main/java/gtPlusPlus/core/block/general/LightGlass.java delete mode 100644 src/main/java/gtPlusPlus/core/block/general/MiningExplosives.java create mode 100644 src/main/java/gtPlusPlus/core/block/machine/BlockCircuitProgrammer.java create mode 100644 src/main/java/gtPlusPlus/core/block/machine/BlockDecayablesChest.java create mode 100644 src/main/java/gtPlusPlus/core/block/machine/BlockFishTrap.java create mode 100644 src/main/java/gtPlusPlus/core/block/machine/BlockFlaskSetter.java create mode 100644 src/main/java/gtPlusPlus/core/block/machine/BlockPestKiller.java create mode 100644 src/main/java/gtPlusPlus/core/block/machine/BlockPooCollector.java create mode 100644 src/main/java/gtPlusPlus/core/block/machine/BlockProjectTable.java create mode 100644 src/main/java/gtPlusPlus/core/block/machine/BlockSuperJukebox.java delete mode 100644 src/main/java/gtPlusPlus/core/block/machine/CircuitProgrammer.java delete mode 100644 src/main/java/gtPlusPlus/core/block/machine/DecayablesChest.java delete mode 100644 src/main/java/gtPlusPlus/core/block/machine/FishTrap.java delete mode 100644 src/main/java/gtPlusPlus/core/block/machine/Machine_PestKiller.java delete mode 100644 src/main/java/gtPlusPlus/core/block/machine/Machine_PooCollector.java delete mode 100644 src/main/java/gtPlusPlus/core/block/machine/Machine_ProjectTable.java delete mode 100644 src/main/java/gtPlusPlus/core/block/machine/Machine_SuperJukebox.java delete mode 100644 src/main/java/gtPlusPlus/core/block/machine/VolumetricFlaskSetter.java delete mode 100644 src/main/java/gtPlusPlus/core/common/compat/COMPAT_Baubles.java delete mode 100644 src/main/java/gtPlusPlus/core/common/compat/COMPAT_ExtraUtils.java delete mode 100644 src/main/java/gtPlusPlus/core/common/compat/COMPAT_HarvestCraft.java delete mode 100644 src/main/java/gtPlusPlus/core/common/compat/COMPAT_IC2.java delete mode 100644 src/main/java/gtPlusPlus/core/common/compat/COMPAT_Thaumcraft.java delete mode 100644 src/main/java/gtPlusPlus/core/common/compat/COMPAT_Witchery.java create mode 100644 src/main/java/gtPlusPlus/core/common/compat/CompatBaubles.java create mode 100644 src/main/java/gtPlusPlus/core/common/compat/CompatExtraUtils.java create mode 100644 src/main/java/gtPlusPlus/core/common/compat/CompatHarvestCraft.java create mode 100644 src/main/java/gtPlusPlus/core/common/compat/CompatIC2.java create mode 100644 src/main/java/gtPlusPlus/core/common/compat/CompatThaumcraft.java create mode 100644 src/main/java/gtPlusPlus/core/common/compat/CompatWitchery.java create mode 100644 src/main/java/gtPlusPlus/core/container/ContainerCircuitProgrammer.java create mode 100644 src/main/java/gtPlusPlus/core/container/ContainerFishTrap.java create mode 100644 src/main/java/gtPlusPlus/core/container/ContainerPestKiller.java create mode 100644 src/main/java/gtPlusPlus/core/container/ContainerProjectTable.java create mode 100644 src/main/java/gtPlusPlus/core/container/ContainerSuperJukebox.java create mode 100644 src/main/java/gtPlusPlus/core/container/ContainerVolumetricFlaskSetter.java delete mode 100644 src/main/java/gtPlusPlus/core/container/Container_CircuitProgrammer.java delete mode 100644 src/main/java/gtPlusPlus/core/container/Container_FishTrap.java delete mode 100644 src/main/java/gtPlusPlus/core/container/Container_PestKiller.java delete mode 100644 src/main/java/gtPlusPlus/core/container/Container_ProjectTable.java delete mode 100644 src/main/java/gtPlusPlus/core/container/Container_SuperJukebox.java delete mode 100644 src/main/java/gtPlusPlus/core/container/Container_VolumetricFlaskSetter.java create mode 100644 src/main/java/gtPlusPlus/core/gui/GUIBaseTileEntity.java delete mode 100644 src/main/java/gtPlusPlus/core/gui/GUI_Base_Tile_Entity.java create mode 100644 src/main/java/gtPlusPlus/core/gui/beta/GUIIDRegistry.java create mode 100644 src/main/java/gtPlusPlus/core/gui/beta/GUITypes.java delete mode 100644 src/main/java/gtPlusPlus/core/gui/beta/Gui_ID_Registry.java delete mode 100644 src/main/java/gtPlusPlus/core/gui/beta/Gui_Types.java create mode 100644 src/main/java/gtPlusPlus/core/gui/beta/MUGuild.java delete mode 100644 src/main/java/gtPlusPlus/core/gui/beta/MU_GuiId.java create mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUICircuitProgrammer.java create mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUIFishTrap.java create mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUIPestKiller.java create mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUIProjectTable.java create mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUISuperJukebox.java create mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUIVolumetricFlaskSetter.java delete mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUI_CircuitProgrammer.java delete mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUI_FishTrap.java delete mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUI_PestKiller.java delete mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUI_ProjectTable.java delete mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUI_SuperJukebox.java delete mode 100644 src/main/java/gtPlusPlus/core/gui/machine/GUI_VolumetricFlaskSetter.java delete mode 100644 src/main/java/gtPlusPlus/core/handler/COMPAT_HANDLER.java delete mode 100644 src/main/java/gtPlusPlus/core/handler/COMPAT_IntermodStaging.java create mode 100644 src/main/java/gtPlusPlus/core/handler/CompatHandler.java create mode 100644 src/main/java/gtPlusPlus/core/handler/CompatIntermodStaging.java create mode 100644 src/main/java/gtPlusPlus/core/handler/workbench/WorkbenchCraftingHandler.java delete mode 100644 src/main/java/gtPlusPlus/core/handler/workbench/Workbench_CraftingHandler.java create mode 100644 src/main/java/gtPlusPlus/core/inventories/InventoryDecayablesChest.java create mode 100644 src/main/java/gtPlusPlus/core/inventories/InventoryEggBox.java create mode 100644 src/main/java/gtPlusPlus/core/inventories/InventorySuperJukebox.java create mode 100644 src/main/java/gtPlusPlus/core/inventories/InventoryVolumetricFlaskSetter.java delete mode 100644 src/main/java/gtPlusPlus/core/inventories/Inventory_DecayablesChest.java delete mode 100644 src/main/java/gtPlusPlus/core/inventories/Inventory_EggBox.java delete mode 100644 src/main/java/gtPlusPlus/core/inventories/Inventory_SuperJukebox.java delete mode 100644 src/main/java/gtPlusPlus/core/inventories/Inventory_VolumetricFlaskSetter.java create mode 100644 src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngotOld.java delete mode 100644 src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngot_OLD.java create mode 100644 src/main/java/gtPlusPlus/core/item/circuit/GTPPIntegratedCircuitItem.java delete mode 100644 src/main/java/gtPlusPlus/core/item/circuit/GTPP_IntegratedCircuit_Item.java delete mode 100644 src/main/java/gtPlusPlus/core/item/general/BufferCore.java create mode 100644 src/main/java/gtPlusPlus/core/item/general/ItemBufferCore.java delete mode 100644 src/main/java/gtPlusPlus/core/item/tool/misc/GregtechPump.java create mode 100644 src/main/java/gtPlusPlus/core/item/tool/misc/ItemGregtechPump.java delete mode 100644 src/main/java/gtPlusPlus/core/item/wearable/armour/tinfoil/ArmourTinFoilHat.java create mode 100644 src/main/java/gtPlusPlus/core/item/wearable/armour/tinfoil/ItemArmourTinFoilHat.java delete mode 100644 src/main/java/gtPlusPlus/core/lib/CORE.java create mode 100644 src/main/java/gtPlusPlus/core/lib/GTPPCore.java delete mode 100644 src/main/java/gtPlusPlus/core/material/ALLOY.java delete mode 100644 src/main/java/gtPlusPlus/core/material/ELEMENT.java delete mode 100644 src/main/java/gtPlusPlus/core/material/MISC_MATERIALS.java create mode 100644 src/main/java/gtPlusPlus/core/material/MaterialMisc.java create mode 100644 src/main/java/gtPlusPlus/core/material/MaterialsAlloy.java create mode 100644 src/main/java/gtPlusPlus/core/material/MaterialsElements.java create mode 100644 src/main/java/gtPlusPlus/core/material/MaterialsOres.java create mode 100644 src/main/java/gtPlusPlus/core/material/MaterialsOther.java delete mode 100644 src/main/java/gtPlusPlus/core/material/NONMATERIAL.java delete mode 100644 src/main/java/gtPlusPlus/core/material/ORES.java delete mode 100644 src/main/java/gtPlusPlus/core/material/nuclear/FLUORIDES.java create mode 100644 src/main/java/gtPlusPlus/core/material/nuclear/MaterialsFluorides.java create mode 100644 src/main/java/gtPlusPlus/core/material/nuclear/MaterialsNuclides.java delete mode 100644 src/main/java/gtPlusPlus/core/material/nuclear/NUCLIDE.java create mode 100644 src/main/java/gtPlusPlus/core/network/packet/PacketVolumetricFlaskGui.java create mode 100644 src/main/java/gtPlusPlus/core/network/packet/PacketVolumetricFlaskGui2.java delete mode 100644 src/main/java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui.java delete mode 100644 src/main/java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui2.java delete mode 100644 src/main/java/gtPlusPlus/core/recipe/LOADER_Machine_Components.java create mode 100644 src/main/java/gtPlusPlus/core/recipe/LoaderMachineComponents.java delete mode 100644 src/main/java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java delete mode 100644 src/main/java/gtPlusPlus/core/recipe/RECIPES_General.java delete mode 100644 src/main/java/gtPlusPlus/core/recipe/RECIPES_LaserEngraver.java delete mode 100644 src/main/java/gtPlusPlus/core/recipe/RECIPES_MachineComponents.java delete mode 100644 src/main/java/gtPlusPlus/core/recipe/RECIPES_Machines.java delete mode 100644 src/main/java/gtPlusPlus/core/recipe/RECIPES_RareEarthProcessing.java delete mode 100644 src/main/java/gtPlusPlus/core/recipe/RECIPES_SeleniumProcessing.java delete mode 100644 src/main/java/gtPlusPlus/core/recipe/RECIPES_Tools.java delete mode 100644 src/main/java/gtPlusPlus/core/recipe/RECIPE_Batteries.java create mode 100644 src/main/java/gtPlusPlus/core/recipe/RecipesBatteries.java create mode 100644 src/main/java/gtPlusPlus/core/recipe/RecipesGeneral.java create mode 100644 src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java create mode 100644 src/main/java/gtPlusPlus/core/recipe/RecipesLaserEngraver.java create mode 100644 src/main/java/gtPlusPlus/core/recipe/RecipesMachineComponents.java create mode 100644 src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java create mode 100644 src/main/java/gtPlusPlus/core/recipe/RecipesRareEarthProcessing.java create mode 100644 src/main/java/gtPlusPlus/core/recipe/RecipesSeleniumProcessing.java create mode 100644 src/main/java/gtPlusPlus/core/recipe/RecipesTools.java create mode 100644 src/main/java/gtPlusPlus/core/util/recipe/GTRecipeUtils.java delete mode 100644 src/main/java/gtPlusPlus/core/util/recipe/GT_RecipeUtils.java create mode 100644 src/main/java/gtPlusPlus/everglades/GTPPEverglades.java delete mode 100644 src/main/java/gtPlusPlus/everglades/GTplusplus_Everglades.java create mode 100644 src/main/java/gtPlusPlus/everglades/biome/BiomeEverglades.java delete mode 100644 src/main/java/gtPlusPlus/everglades/biome/BiomeGenerator_Custom.java delete mode 100644 src/main/java/gtPlusPlus/everglades/biome/Biome_Everglades.java create mode 100644 src/main/java/gtPlusPlus/everglades/biome/CustomBiomeGenerator.java create mode 100644 src/main/java/gtPlusPlus/everglades/dimension/DimensionEverglades.java delete mode 100644 src/main/java/gtPlusPlus/everglades/dimension/Dimension_Everglades.java create mode 100644 src/main/java/gtPlusPlus/everglades/gen/WorldGenMinableCustom.java delete mode 100644 src/main/java/gtPlusPlus/everglades/gen/WorldGenMinable_Custom.java create mode 100644 src/main/java/gtPlusPlus/nei/GTPPNEIConfig.java delete mode 100644 src/main/java/gtPlusPlus/nei/GT_NEI_LFTR_Sparging.java create mode 100644 src/main/java/gtPlusPlus/nei/LFTRSpargingNEIHandler.java delete mode 100644 src/main/java/gtPlusPlus/nei/NEI_GTPP_Config.java create mode 100644 src/main/java/gtPlusPlus/plugin/agrichem/AgrichemCore.java delete mode 100644 src/main/java/gtPlusPlus/plugin/agrichem/Core_Agrichem.java delete mode 100644 src/main/java/gtPlusPlus/plugin/fixes/vanilla/Core_VanillaFixes.java create mode 100644 src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaFixesCore.java create mode 100644 src/main/java/gtPlusPlus/plugin/manager/CoreManager.java delete mode 100644 src/main/java/gtPlusPlus/plugin/manager/Core_Manager.java delete mode 100644 src/main/java/gtPlusPlus/preloader/CORE_Preloader.java create mode 100644 src/main/java/gtPlusPlus/preloader/PreloaderCore.java create mode 100644 src/main/java/gtPlusPlus/preloader/PreloaderGTOreDict.java create mode 100644 src/main/java/gtPlusPlus/preloader/PreloaderLogger.java delete mode 100644 src/main/java/gtPlusPlus/preloader/Preloader_GT_OreDict.java delete mode 100644 src/main/java/gtPlusPlus/preloader/Preloader_Logger.java create mode 100644 src/main/java/gtPlusPlus/preloader/asm/PreloaderDummyContainer.java delete mode 100644 src/main/java/gtPlusPlus/preloader/asm/Preloader_DummyContainer.java create mode 100644 src/main/java/gtPlusPlus/xmod/bartcrops/CropsPlusPlusHandler.java delete mode 100644 src/main/java/gtPlusPlus/xmod/bartcrops/HANDLER_CropsPlusPlus.java create mode 100644 src/main/java/gtPlusPlus/xmod/bartworks/BWUtils.java delete mode 100644 src/main/java/gtPlusPlus/xmod/bartworks/BW_Utils.java create mode 100644 src/main/java/gtPlusPlus/xmod/bop/BiomesOPlentyHandler.java delete mode 100644 src/main/java/gtPlusPlus/xmod/bop/HANDLER_BiomesOPlenty.java create mode 100644 src/main/java/gtPlusPlus/xmod/bop/blocks/BOPBlockRegistrator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/bop/blocks/BOP_Block_Registrator.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/ForestryHandler.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/HANDLER_FR.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBeeDefinition.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBees.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBranchDefinition.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bee_Definition.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bees.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Branch_Definition.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPCombType.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPDropType.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPPollenType.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPPropolisType.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_CombType.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_DropType.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_PollenType.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_PropolisType.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/FRItemRegistry.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/FRStringUtil.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/FR_ItemRegistry.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/FR_StringUtil.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/MBFrameType.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/MBItemFrame.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/MB_FrameType.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/MB_ItemFrame.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPComb.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPDrop.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPPollen.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPPropolis.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Comb.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Drop.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Pollen.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Propolis.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/recipe/FRGregTechRecipes.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/recipe/FR_Gregtech_Recipes.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPPAlleleBeeSpecies.java create mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPPBeeMutation.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_AlleleBeeSpecies.java delete mode 100644 src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_Bee_Mutation.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/HandlerGT.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/gui/GTPPUITextures.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/gui/GTPP_UITextures.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/GregtechItemContainer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/IGregtechItemContainer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IItemBehaviour.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IOreRecipeRegistrator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IToolStats.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_ItemBehaviour.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_OreRecipeRegistrator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_ToolStats.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTGenericItem.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItem.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItemBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItemX32.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaTool.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_Generic_Item.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_Base.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_X32.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaTool.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GTPPMTECable.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GTPPMTEFluid.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ChiselBus.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake_Extreme.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_DynamoBuffer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_ElementalDataOrbHolder.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_FluidGenerator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBattery.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler_Adv.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Naquadah.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBattery.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Reservoir.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Solidifier.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusInput.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusOutput.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Turbine.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_TurbineProvider.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SuperBus_Input.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SuperBus_Output.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaPipeEntityFluid.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaPipeEntity_Cable.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaTreeFarmerStructural.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/METHatchAirIntake.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchAirIntakeExtreme.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchChiselBus.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchDynamoBuffer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchElementalDataOrbHolder.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchFluidGenerator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchInputBattery.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchMufflerAdvanced.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchNaquadah.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchOutputBattery.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchReservoir.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSolidifier.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSteamBusOutput.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSuperBusInput.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchTurbine.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchTurbineProvider.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTESuperBusOutput.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTETreeFarmerStructural.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MteHatchSteamBusInput.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GTPPMetaTileEntity.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GTPPMultiBlockBase.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GT_MetaTileEntity_Hatch_CustomFluidBase.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMetaTileEntity.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMetaTransformerHiAmp.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_SteamMultiBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTEHatchCustomFluidBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTESteamMultiBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTETransformerHiAmp.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechMetaBoilerBase.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechMetaSolarGenerator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechRocketFuelGeneratorBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTEBoilerBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTERocketFuelGeneratorBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTESolarGenerator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/machines/GregtechMetaTreeFarmerBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/machines/MTETreeFarmerBase.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_Catalysts.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_MillingBalls.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_NbtConsumable.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchCatalysts.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchMillingBalls.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchNbtConsumable.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPPCopiedBlockTexture.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPPRenderedTexture.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPP_CopiedBlockTexture.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPP_RenderedTexture.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/util/GTPPConfig.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/api/util/GTPP_Config.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/MetaGTProxy.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/Meta_GT_Proxy.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/covers/CoverOverflow.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/covers/CoverToggleVisual.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_Overflow.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_ToggleVisual.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/GTMethodHelper.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/GT_MethodHelper.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/items/Ids_MetaGeneratedGregtechItems.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedItemIDs.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/render/CapeRenderer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/render/FlaskRenderer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_CapeRenderer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_FlaskRenderer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_Render_MachineBlock.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/render/MachineBlockRenderer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_ElectricAutoWorkbench.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_TesseractGenerator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_TesseractTerminal.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTEElectricAutoWorkbench.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTETesseractGenerator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTETesseractTerminal.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_Base.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_HV.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_LV.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_MV.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_SemiFluidGenerator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntityGeothermalGenerator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntityRocketFuelGenerator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntity_RTG.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerHV.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerLV.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerMV.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEGeothermalGenerator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTERTGenerator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTERocketFuelGenerator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTESemiFluidGenerator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_CropHarvestor.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaAtmosphericReconditioner.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionCreator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionDetector.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaTileEntity_AutoChisel.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaWirelessCharger.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEAtmosphericReconditioner.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEAutoChisel.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTECropHarvestor.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEPollutionCreator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEPollutionDetector.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEWirelessCharger.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/MTEAmazonPackager.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialAlloySmelter.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialArcFurnace.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCentrifuge.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialChisel.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCokeOven.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCuttingMachine.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialDehydrator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialElectrolyzer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialExtruder.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialFluidHeater.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialForgeHammer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMacerator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMixer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMolecularTransformer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMultiMachine.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialPlatePress.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialSifter.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialThermalCentrifuge.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialWashPlant.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialWireMill.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IsaMill.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_NuclearSaltProcessingPlant.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_SpargeTower.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialAlloySmelter.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialArcFurnace.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCentrifuge.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialChisel.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCokeOven.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCuttingMachine.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialDehydrator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialExtruder.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialFluidHeater.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialForgeHammer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMacerator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMixer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMolecularTransformer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMultiMachine.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialPlatePress.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialSifter.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialThermalCentrifuge.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialVacuumFreezer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialWashPlant.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialWireMill.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIsaMill.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTENuclearSaltProcessingPlant.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTESpargeTower.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEndustrialElectrolyzer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_DistillationTower.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_EBF.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK4.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK5.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_HeatExchanger.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Implosion.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvEBF.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvFusionMk4.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvFusionMk5.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvHeatExchanger.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvImplosionCompressor.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamCentrifuge.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamCompressor.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamForgeHammer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMacerator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMixer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWasher.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWaterPump.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCentrifuge.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamForgeHammer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMacerator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMixer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWasher.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWaterPump.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_AutoCrafter.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_ThermalBoiler.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_ElementalDuplicator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_FrothFlotationCell.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_NuclearReactor.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_AlloyBlastSmelter.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Cyclotron.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_IndustrialFishingPond.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_IndustrialRockBreaker.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_LargeRocketEngine.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_LargeSemifluidGenerator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_MassFabricator.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_QuantumForceTransformer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Refinery.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_SolarTower.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEAlloyBlastSmelter.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEAutoCrafter.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTECyclotron.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEElementalDuplicator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEFrothFlotationCell.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialFishingPond.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialRockBreaker.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTELargeRocketEngine.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTELargeSemifluidGenerator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEMassFabricator.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTENuclearReactor.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEQuantumForceTransformer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTERefinery.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTESolarTower.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEThermalBoiler.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTETreeFarm.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/GregtechMTE_AlgaePondBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/MTEAlgaePondBase.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/GregtechMTE_ChemicalPlant.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/MTEChemicalPlant.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/GregTechMetaTileEntity_MegaAlloyBlastSmelter.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/MTEMegaAlloyBlastSmelter.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SCSteam.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineGas.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbinePlasma.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSCSteam.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSHSteam.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSteam.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbineBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/MTESolarHeater.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/TileEntitySolarHeater.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneBase.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneButtonPanel.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneCircuitBlock.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneLamp.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneStrengthDisplay.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneStrengthScale.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneButtonPanel.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneCircuitBlock.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneLamp.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneStrengthDisplay.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneStrengthScale.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredChest.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredTank.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GregtechMetaEnergyBuffer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTEEnergyBuffer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTETieredChest.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTETieredTank.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/creative/GT_MetaTileEntity_InfiniteItemHolder.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/creative/MTEInfiniteItemHolder.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tools/TOOL_Gregtech_AngleGrinder.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tools/TOOL_Gregtech_ElectricSnips.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tools/ToolAngleGrinder.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/common/tools/ToolElectricSnips.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/GTPPBlocks.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/Gregtech_Blocks.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenAlloySmelter.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenAssembler.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBase.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBlastSmelter.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBlastSmelterGTNH.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenDustGeneration.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenExtruder.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluidCanning.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluids.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluorite.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMaterialProcessing.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMetalRecipe.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMultisUsingFluidInsteadOfCells.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenOre.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenPlasma.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenPlates.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenRecycling.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenShapedCrafting.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_AlloySmelter.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Assembler.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Base.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelter.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelterGT_GTNH.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_DustGeneration.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Extruder.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_FluidCanning.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluids.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluorite.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MaterialProcessing.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MetalRecipe.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MultisUsingFluidInsteadOfCells.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Plasma.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Plates.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Recycling.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_ShapedCrafting.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderAlgaeFarm.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderChemicalSkips.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderGTNH.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderGlueLine.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderLFTR.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderMolecularTransformer.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderNuclear.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderNuclearFuelProcessing.java create mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderTreeFarm.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_AlgaeFarm.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_ChemicalSkips.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_GTNH.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_GlueLine.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_LFTR.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_MolecularTransformer.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_Nuclear.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_NuclearFuelProcessing.java delete mode 100644 src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_TreeFarm.java delete mode 100644 src/main/java/gtPlusPlus/xmod/ic2/HANDLER_IC2.java create mode 100644 src/main/java/gtPlusPlus/xmod/ic2/HandlerIC2.java create mode 100644 src/main/java/gtPlusPlus/xmod/ic2/item/IC2Items.java delete mode 100644 src/main/java/gtPlusPlus/xmod/ic2/item/IC2_Items.java delete mode 100644 src/main/java/gtPlusPlus/xmod/ic2/recipe/RECIPE_IC2.java create mode 100644 src/main/java/gtPlusPlus/xmod/ic2/recipe/RecipeIC2.java delete mode 100644 src/main/java/gtPlusPlus/xmod/railcraft/HANDLER_Railcraft.java create mode 100644 src/main/java/gtPlusPlus/xmod/railcraft/HandlerRailcraft.java delete mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/HANDLER_TF.java create mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/HandlerTF.java create mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidCryotheum.java create mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidEnder.java create mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidPyrotheum.java create mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlocks.java delete mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Cryotheum.java delete mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Ender.java delete mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Pyrotheum.java delete mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Blocks.java create mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/fluid/TFFluids.java delete mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/fluid/TF_Fluids.java create mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/item/TFItems.java delete mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/item/TF_Items.java create mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/recipe/TFGregtechRecipes.java delete mode 100644 src/main/java/gtPlusPlus/xmod/thermalfoundation/recipe/TF_Gregtech_Recipes.java delete mode 100644 src/main/java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java create mode 100644 src/main/java/gtPlusPlus/xmod/tinkers/HandlerTinkers.java create mode 100644 src/main/java/gtneioreplugin/Config.java create mode 100644 src/main/java/gtneioreplugin/GTNEIOrePlugin.java create mode 100644 src/main/java/gtneioreplugin/plugin/IMCForNEI.java create mode 100644 src/main/java/gtneioreplugin/plugin/NEIPluginConfig.java create mode 100644 src/main/java/gtneioreplugin/plugin/PluginBase.java create mode 100644 src/main/java/gtneioreplugin/plugin/block/BlockDimensionDisplay.java create mode 100644 src/main/java/gtneioreplugin/plugin/block/ModBlocks.java create mode 100644 src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5Base.java create mode 100644 src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5SmallOreStat.java create mode 100644 src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5UndergroundFluid.java create mode 100644 src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5VeinStat.java create mode 100644 src/main/java/gtneioreplugin/plugin/item/ItemDimensionDisplay.java create mode 100644 src/main/java/gtneioreplugin/plugin/renderer/ItemDimensionDisplayRenderer.java create mode 100644 src/main/java/gtneioreplugin/util/CSVMaker.java create mode 100644 src/main/java/gtneioreplugin/util/DimensionHelper.java create mode 100644 src/main/java/gtneioreplugin/util/GT5OreLayerHelper.java create mode 100644 src/main/java/gtneioreplugin/util/GT5OreSmallHelper.java create mode 100644 src/main/java/gtneioreplugin/util/GT5UndergroundFluidHelper.java create mode 100644 src/main/java/gtneioreplugin/util/OreVeinLayer.java create mode 100644 src/main/java/gtneioreplugin/util/Oremix.java create mode 100644 src/main/java/gtneioreplugin/util/SmallOre.java create mode 100644 src/main/java/gtneioreplugin/util/StringPaddingHack.java create mode 100644 src/main/java/gtnhlanth/GTNHLanthanides.java create mode 100644 src/main/java/gtnhlanth/Tags.java create mode 100644 src/main/java/gtnhlanth/api/recipe/LanthanidesRecipeMaps.java create mode 100644 src/main/java/gtnhlanth/client/ClientProxy.java create mode 100644 src/main/java/gtnhlanth/common/CommonProxy.java create mode 100644 src/main/java/gtnhlanth/common/beamline/BeamInformation.java create mode 100644 src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java create mode 100644 src/main/java/gtnhlanth/common/beamline/IConnectsToBeamline.java create mode 100644 src/main/java/gtnhlanth/common/beamline/MTEBeamlinePipe.java create mode 100644 src/main/java/gtnhlanth/common/beamline/Particle.java create mode 100644 src/main/java/gtnhlanth/common/block/BlockAntennaCasing.java create mode 100644 src/main/java/gtnhlanth/common/block/BlockCasing.java create mode 100644 src/main/java/gtnhlanth/common/block/BlockShieldedAccGlass.java create mode 100644 src/main/java/gtnhlanth/common/hatch/MTEBusInputFocus.java create mode 100644 src/main/java/gtnhlanth/common/hatch/MTEHatchBeamlineConnector.java create mode 100644 src/main/java/gtnhlanth/common/hatch/MTEHatchInputBeamline.java create mode 100644 src/main/java/gtnhlanth/common/hatch/MTEHatchOutputBeamline.java create mode 100644 src/main/java/gtnhlanth/common/item/ICanFocus.java create mode 100644 src/main/java/gtnhlanth/common/item/ItemLanth.java create mode 100644 src/main/java/gtnhlanth/common/item/ItemParticle.java create mode 100644 src/main/java/gtnhlanth/common/item/ItemPhotolithographicMask.java create mode 100644 src/main/java/gtnhlanth/common/item/MaskList.java create mode 100644 src/main/java/gtnhlanth/common/register/BotWerkstoffMaterialPool.java create mode 100644 src/main/java/gtnhlanth/common/register/LanthItemList.java create mode 100644 src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/MTEDigester.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/MTEDissolutionTank.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/MTELINAC.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/MTESourceChamber.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/MTESynchrotron.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/MTETargetChamber.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeAdder2.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/recipe/beamline/RecipeSC.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/recipe/beamline/RecipeTC.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/recipe/beamline/SourceChamberFrontend.java create mode 100644 src/main/java/gtnhlanth/common/tileentity/recipe/beamline/TargetChamberFrontend.java create mode 100644 src/main/java/gtnhlanth/loader/BotRecipes.java create mode 100644 src/main/java/gtnhlanth/loader/MTELoader.java create mode 100644 src/main/java/gtnhlanth/loader/RecipeLoader.java create mode 100644 src/main/java/gtnhlanth/loader/ZPMRubberChanges.java create mode 100644 src/main/java/gtnhlanth/util/DescTextLocalization.java create mode 100644 src/main/java/gtnhlanth/util/Util.java create mode 100644 src/main/java/gtnhlanth/xmod/nei/NEIConfig.java create mode 100644 src/main/java/kekztech/client/ClientProxy.java create mode 100644 src/main/java/kekztech/client/gui/KTUITextures.java create mode 100644 src/main/java/kekztech/common/Blocks.java create mode 100644 src/main/java/kekztech/common/CommonProxy.java create mode 100644 src/main/java/kekztech/common/Recipes.java create mode 100644 src/main/java/kekztech/common/Researches.java create mode 100644 src/main/java/kekztech/common/TileEntities.java create mode 100644 src/main/java/kekztech/common/blocks/BaseGTUpdateableBlock.java create mode 100644 src/main/java/kekztech/common/blocks/BlockGDCUnit.java create mode 100644 src/main/java/kekztech/common/blocks/BlockIchorJar.java create mode 100644 src/main/java/kekztech/common/blocks/BlockLapotronicEnergyUnit.java create mode 100644 src/main/java/kekztech/common/blocks/BlockLargeHexPlate.java create mode 100644 src/main/java/kekztech/common/blocks/BlockTFFTStorageField.java create mode 100644 src/main/java/kekztech/common/blocks/BlockThaumiumReinforcedJar.java create mode 100644 src/main/java/kekztech/common/blocks/BlockYSZUnit.java create mode 100644 src/main/java/kekztech/common/itemBlocks/ItemBlockIchorJar.java create mode 100644 src/main/java/kekztech/common/itemBlocks/ItemBlockLapotronicEnergyUnit.java create mode 100644 src/main/java/kekztech/common/itemBlocks/ItemBlockTFFTStorageField.java create mode 100644 src/main/java/kekztech/common/itemBlocks/ItemBlockThaumiumReinforcedJar.java create mode 100644 src/main/java/kekztech/common/items/ErrorItem.java create mode 100644 src/main/java/kekztech/common/items/MetaItemCraftingComponent.java create mode 100644 src/main/java/kekztech/common/recipeLoaders/AlloySmelter.java create mode 100644 src/main/java/kekztech/common/recipeLoaders/Assembler.java create mode 100644 src/main/java/kekztech/common/recipeLoaders/AssemblyLine.java create mode 100644 src/main/java/kekztech/common/recipeLoaders/ChemicalReactor.java create mode 100644 src/main/java/kekztech/common/recipeLoaders/Crafting.java create mode 100644 src/main/java/kekztech/common/recipeLoaders/FormingPress.java create mode 100644 src/main/java/kekztech/common/recipeLoaders/Mixer.java create mode 100644 src/main/java/kekztech/common/recipeLoaders/ResearchableAssemblyLine.java create mode 100644 src/main/java/kekztech/common/recipeLoaders/Unpackager.java create mode 100644 src/main/java/kekztech/common/tileentities/MTEHatchTFFT.java create mode 100644 src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java create mode 100644 src/main/java/kekztech/common/tileentities/MTESOFuelCellMK1.java create mode 100644 src/main/java/kekztech/common/tileentities/MTESOFuelCellMK2.java create mode 100644 src/main/java/kekztech/common/tileentities/MTETankTFFT.java create mode 100644 src/main/java/kekztech/common/tileentities/TileEntityIchorJar.java create mode 100644 src/main/java/kekztech/common/tileentities/TileEntityIchorVoidJar.java create mode 100644 src/main/java/kekztech/common/tileentities/TileEntityThaumiumReinforcedJar.java create mode 100644 src/main/java/kekztech/common/tileentities/TileEntityThaumiumReinforcedVoidJar.java create mode 100644 src/main/java/kekztech/util/Util.java create mode 100644 src/main/java/kubatech/loaders/block/defc/BlockDEFCCasing.java delete mode 100644 src/main/java/kubatech/loaders/block/defc/DEFCCasingBlock.java delete mode 100644 src/main/java/kubatech/loaders/block/defc/DEFCCasingItemBlock.java create mode 100644 src/main/java/kubatech/loaders/block/defc/ItemBlockDEFCCasing.java create mode 100644 src/main/java/kubatech/loaders/block/kubablock/blocks/BlockTeaAcceptor.java create mode 100644 src/main/java/kubatech/loaders/block/kubablock/blocks/BlockTeaStorage.java delete mode 100644 src/main/java/kubatech/loaders/block/kubablock/blocks/TeaAcceptor.java delete mode 100644 src/main/java/kubatech/loaders/block/kubablock/blocks/TeaStorage.java create mode 100644 src/main/java/kubatech/loaders/item/items/ItemTea.java create mode 100644 src/main/java/kubatech/loaders/item/items/ItemTeaCollection.java create mode 100644 src/main/java/kubatech/loaders/item/items/ItemTeaIngredient.java create mode 100644 src/main/java/kubatech/loaders/item/items/ItemTeaUltimate.java delete mode 100644 src/main/java/kubatech/loaders/item/items/Tea.java delete mode 100644 src/main/java/kubatech/loaders/item/items/TeaCollection.java delete mode 100644 src/main/java/kubatech/loaders/item/items/TeaIngredient.java delete mode 100644 src/main/java/kubatech/loaders/item/items/TeaUltimate.java create mode 100644 src/main/java/kubatech/nei/NEIConfig.java delete mode 100644 src/main/java/kubatech/nei/NEI_Config.java delete mode 100644 src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java delete mode 100644 src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeEntityCrusher.java delete mode 100644 src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java delete mode 100644 src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java create mode 100644 src/main/java/kubatech/tileentity/gregtech/multiblock/MTEDEFusionCrafter.java create mode 100644 src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeEntityCrusher.java create mode 100644 src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java create mode 100644 src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java delete mode 100644 src/main/java/net/glease/ggfab/BlockIcons.java delete mode 100644 src/main/java/net/glease/ggfab/ComponentRecipeLoader.java delete mode 100644 src/main/java/net/glease/ggfab/ConfigurationHandler.java delete mode 100644 src/main/java/net/glease/ggfab/GGConstants.java delete mode 100644 src/main/java/net/glease/ggfab/GGItemList.java delete mode 100644 src/main/java/net/glease/ggfab/GigaGramFab.java delete mode 100644 src/main/java/net/glease/ggfab/SingleUseToolRecipeLoader.java delete mode 100644 src/main/java/net/glease/ggfab/api/GGFabRecipeMaps.java delete mode 100644 src/main/java/net/glease/ggfab/api/GigaGramFabAPI.java delete mode 100644 src/main/java/net/glease/ggfab/items/GGMetaItem_DumbItems.java delete mode 100644 src/main/java/net/glease/ggfab/mte/MTE_AdvAssLine.java delete mode 100644 src/main/java/net/glease/ggfab/mte/MTE_LinkedInputBus.java delete mode 100644 src/main/java/net/glease/ggfab/mui/ClickableTextWidget.java delete mode 100644 src/main/java/net/glease/ggfab/util/GGUtils.java delete mode 100644 src/main/java/net/glease/ggfab/util/OverclockHelper.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/Config.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/GTNEIOrePlugin.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/plugin/IMCForNEI.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/plugin/NEIPluginConfig.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/plugin/PluginBase.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/plugin/block/BlockDimensionDisplay.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/plugin/block/ModBlocks.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5Base.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5SmallOreStat.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5UndergroundFluid.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5VeinStat.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/plugin/item/ItemDimensionDisplay.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/plugin/renderer/ItemDimensionDisplayRenderer.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/util/CSVMaker.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/util/DimensionHelper.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/util/GT5OreLayerHelper.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/util/GT5OreSmallHelper.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/util/GT5UndergroundFluidHelper.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/util/OreVeinLayer.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/util/Oremix.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/util/SmallOre.java delete mode 100644 src/main/java/pers/gwyog/gtneioreplugin/util/StringPaddingHack.java create mode 100644 src/main/java/tectech/Reference.java create mode 100644 src/main/java/tectech/TecTech.java create mode 100644 src/main/java/tectech/TecTechEventHandlers.java create mode 100644 src/main/java/tectech/compatibility/openComputers/AvrArchitecture.java create mode 100644 src/main/java/tectech/loader/MainLoader.java create mode 100644 src/main/java/tectech/loader/NetworkDispatcher.java create mode 100644 src/main/java/tectech/loader/TecTechConfig.java create mode 100644 src/main/java/tectech/loader/gui/CreativeTabTecTech.java create mode 100644 src/main/java/tectech/loader/recipe/Assembler.java create mode 100644 src/main/java/tectech/loader/recipe/AssemblyLine.java create mode 100644 src/main/java/tectech/loader/recipe/BaseRecipeLoader.java create mode 100644 src/main/java/tectech/loader/recipe/CircuitAssembler.java create mode 100644 src/main/java/tectech/loader/recipe/Crafting.java create mode 100644 src/main/java/tectech/loader/recipe/Extractor.java create mode 100644 src/main/java/tectech/loader/recipe/Godforge.java create mode 100644 src/main/java/tectech/loader/recipe/ResearchStationAssemblyLine.java create mode 100644 src/main/java/tectech/loader/thing/CoverLoader.java create mode 100644 src/main/java/tectech/loader/thing/MachineLoader.java create mode 100644 src/main/java/tectech/loader/thing/MuTeLoader.java create mode 100644 src/main/java/tectech/loader/thing/ThingsLoader.java create mode 100644 src/main/java/tectech/mechanics/dataTransport/DataPacket.java create mode 100644 src/main/java/tectech/mechanics/dataTransport/InventoryDataPacket.java create mode 100644 src/main/java/tectech/mechanics/dataTransport/QuantumDataPacket.java create mode 100644 src/main/java/tectech/mechanics/enderStorage/EnderFluidContainer.java create mode 100644 src/main/java/tectech/mechanics/enderStorage/EnderLinkTag.java create mode 100644 src/main/java/tectech/mechanics/enderStorage/EnderLinkTank.java create mode 100644 src/main/java/tectech/mechanics/enderStorage/EnderWorldSavedData.java create mode 100644 src/main/java/tectech/mechanics/pipe/IActivePipe.java create mode 100644 src/main/java/tectech/mechanics/pipe/IConnectsToDataPipe.java create mode 100644 src/main/java/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java create mode 100644 src/main/java/tectech/mechanics/pipe/PipeActivityMessage.java create mode 100644 src/main/java/tectech/mechanics/spark/RendererMessage.java create mode 100644 src/main/java/tectech/mechanics/spark/ThaumSpark.java create mode 100644 src/main/java/tectech/mechanics/tesla/ITeslaConnectable.java create mode 100644 src/main/java/tectech/mechanics/tesla/ITeslaConnectableSimple.java create mode 100644 src/main/java/tectech/mechanics/tesla/TeslaCoverConnection.java create mode 100644 src/main/java/tectech/proxy/ClientProxy.java create mode 100644 src/main/java/tectech/proxy/CommonProxy.java create mode 100644 src/main/java/tectech/recipe/EyeOfHarmonyFrontend.java create mode 100644 src/main/java/tectech/recipe/EyeOfHarmonyRecipe.java create mode 100644 src/main/java/tectech/recipe/EyeOfHarmonyRecipeStorage.java create mode 100644 src/main/java/tectech/recipe/GodforgeExoticFrontend.java create mode 100644 src/main/java/tectech/recipe/GodforgePlasmaFrontend.java create mode 100644 src/main/java/tectech/recipe/ResearchStationFrontend.java create mode 100644 src/main/java/tectech/recipe/TTRecipeAdder.java create mode 100644 src/main/java/tectech/recipe/TecTechRecipeMaps.java create mode 100644 src/main/java/tectech/rendering/EOH/EOHItemRenderer.java create mode 100644 src/main/java/tectech/rendering/EOH/EOHRenderingUtils.java create mode 100644 src/main/java/tectech/rendering/EOH/EOHTileEntitySR.java create mode 100644 src/main/java/tectech/thing/CustomItemList.java create mode 100644 src/main/java/tectech/thing/block/BlockEOHRender.java create mode 100644 src/main/java/tectech/thing/block/BlockForgeOfGods.java create mode 100644 src/main/java/tectech/thing/block/BlockGodforgeGlass.java create mode 100644 src/main/java/tectech/thing/block/BlockQuantumGlass.java create mode 100644 src/main/java/tectech/thing/block/BlockQuantumStuff.java create mode 100644 src/main/java/tectech/thing/block/BlockReactorSim.java create mode 100644 src/main/java/tectech/thing/block/ItemGodForgeGlass.java create mode 100644 src/main/java/tectech/thing/block/ItemQuantumGlass.java create mode 100644 src/main/java/tectech/thing/block/ItemReactorSim.java create mode 100644 src/main/java/tectech/thing/block/RenderForgeOfGods.java create mode 100644 src/main/java/tectech/thing/block/RenderGodforgeGlass.java create mode 100644 src/main/java/tectech/thing/block/RenderQuantumGlass.java create mode 100644 src/main/java/tectech/thing/block/RenderQuantumStuff.java create mode 100644 src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java create mode 100644 src/main/java/tectech/thing/block/TileEntityForgeOfGods.java create mode 100644 src/main/java/tectech/thing/casing/BlockGTCasingsBA0.java create mode 100644 src/main/java/tectech/thing/casing/BlockGTCasingsNH.java create mode 100644 src/main/java/tectech/thing/casing/BlockGTCasingsTT.java create mode 100644 src/main/java/tectech/thing/casing/BlockGodforgeCasings.java create mode 100644 src/main/java/tectech/thing/casing/ItemCasingsBA0.java create mode 100644 src/main/java/tectech/thing/casing/ItemCasingsGodforge.java create mode 100644 src/main/java/tectech/thing/casing/ItemCasingsNH.java create mode 100644 src/main/java/tectech/thing/casing/ItemCasingsSpacetime.java create mode 100644 src/main/java/tectech/thing/casing/ItemCasingsStabilisation.java create mode 100644 src/main/java/tectech/thing/casing/ItemCasingsTT.java create mode 100644 src/main/java/tectech/thing/casing/ItemCasingsTimeAcceleration.java create mode 100644 src/main/java/tectech/thing/casing/SpacetimeCompressionFieldCasing.java create mode 100644 src/main/java/tectech/thing/casing/StabilisationFieldCasing.java create mode 100644 src/main/java/tectech/thing/casing/TTCasingsContainer.java create mode 100644 src/main/java/tectech/thing/casing/TimeAccelerationFieldCasing.java create mode 100644 src/main/java/tectech/thing/cover/CoverEnderFluidLink.java create mode 100644 src/main/java/tectech/thing/cover/CoverPowerPassUpgrade.java create mode 100644 src/main/java/tectech/thing/cover/CoverTeslaCoil.java create mode 100644 src/main/java/tectech/thing/cover/CoverTeslaCoilUltimate.java create mode 100644 src/main/java/tectech/thing/gui/TecTechUITextures.java create mode 100644 src/main/java/tectech/thing/item/ItemAstralArrayFabricator.java create mode 100644 src/main/java/tectech/thing/item/ItemEnderFluidLinkCover.java create mode 100644 src/main/java/tectech/thing/item/ItemEuMeterGT.java create mode 100644 src/main/java/tectech/thing/item/ItemParametrizerMemoryCard.java create mode 100644 src/main/java/tectech/thing/item/ItemPowerPassUpgradeCover.java create mode 100644 src/main/java/tectech/thing/item/ItemRenderForgeOfGods.java create mode 100644 src/main/java/tectech/thing/item/ItemTeslaCoilCapacitor.java create mode 100644 src/main/java/tectech/thing/item/ItemTeslaCoilComponent.java create mode 100644 src/main/java/tectech/thing/item/ItemTeslaCoilCover.java create mode 100644 src/main/java/tectech/thing/item/ItemTeslaStaff.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/Textures.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCapacitor.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeData.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeMaintenance.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeUncertainty.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataConnector.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataInput.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataItemsInput.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataItemsOutput.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataOutput.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDynamoMulti.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDynamoTunnel.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchEnergyMulti.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchEnergyTunnel.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchObjectHolder.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchParam.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchParamText.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchRack.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchUncertainty.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessComputationInput.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessComputationOutput.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessDataItemsInput.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessDataItemsOutput.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessMulti.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/MTEActiveTransformer.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/MTEDataBank.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/MTEEnergyInfuser.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/MTEEyeOfHarmony.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/MTEForgeOfGods.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/MTEMicrowave.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/MTENetworkSwitch.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/MTEQuantumComputer.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/MTETeslaTower.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/base/INameFunction.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/base/IStatusFunction.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/base/LedStatus.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/base/Parameters.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/base/SoundLoop.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/base/TTMultiblockBase.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/base/render/TTRenderedExtendedFacingTexture.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEExoticModule.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEMoltenModule.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEPlasmaModule.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTESmeltingModule.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeBlockData.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeBlockEnergy.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeData.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergy.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergyMirror.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/single/MTEBuckConverter.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/single/MTEDebugPollutor.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/single/MTEDebugPowerGenerator.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/single/MTEDebugStructureWriter.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/single/MTEOwnerDetector.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/single/MTETeslaCoil.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/single/MTETransformerTT.java create mode 100644 src/main/java/tectech/thing/metaTileEntity/single/MTEWetTransformer.java create mode 100644 src/main/java/tectech/thing/multiTileEntity/GodForge.java create mode 100644 src/main/java/tectech/thing/tileEntity/TileEntityReactorSim.java create mode 100644 src/main/java/tectech/util/CommonValues.java create mode 100644 src/main/java/tectech/util/Converter.java create mode 100644 src/main/java/tectech/util/FluidStackLong.java create mode 100644 src/main/java/tectech/util/GodforgeMath.java create mode 100644 src/main/java/tectech/util/ItemStackLong.java create mode 100644 src/main/java/tectech/util/TTUtility.java delete mode 100644 src/main/java/util/Util.java (limited to 'src/main') diff --git a/src/main/java/bartworks/API/APIConfigValues.java b/src/main/java/bartworks/API/APIConfigValues.java new file mode 100644 index 0000000000..7ab0326802 --- /dev/null +++ b/src/main/java/bartworks/API/APIConfigValues.java @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +public class APIConfigValues { + + // One-Side-Only + public static boolean debugLog = true; +} diff --git a/src/main/java/bartworks/API/BioObjectAdder.java b/src/main/java/bartworks/API/BioObjectAdder.java new file mode 100644 index 0000000000..d82124ac57 --- /dev/null +++ b/src/main/java/bartworks/API/BioObjectAdder.java @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +import static gregtech.api.enums.Mods.Gendustry; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import java.awt.Color; + +import net.minecraft.item.EnumRarity; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.util.BioCulture; +import bartworks.util.BioDNA; +import bartworks.util.BioData; +import bartworks.util.BioPlasmid; +import gregtech.api.enums.FluidState; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gregtech.api.fluid.GTFluidFactory; +import gregtech.api.util.GTUtility; + +public final class BioObjectAdder { + + /** + * @param color the color of the Culture + * @param name the name of the Culture + * @param plasmid the cultures plasmid, get it from createAndRegisterBioPlasmid + * @param dna the cultures dna, get it from createAndRegisterBioDNA + * @param breedable if the culture can be inserted into the BacterialVat + * @param rarity visual + * @return + */ + public static BioCulture createAndRegisterBioCulture(Color color, String name, BioPlasmid plasmid, BioDNA dna, + EnumRarity rarity, boolean breedable) { + if (BioCulture.BIO_CULTURE_ARRAY_LIST.size() > 1) + return BioCulture.createAndRegisterBioCulture(color, name, plasmid, dna, rarity, breedable); + new Exception( + "Too Early to register a BioCulture! You MUST run this either after:bartworks OR in the init Phase!") + .printStackTrace(); + return null; + } + + /** + * rarity inherits from dna + * + * @param color the color of the Culture + * @param name the name of the Culture + * @param plasmid the cultures plasmid, get it from createAndRegisterBioPlasmid + * @param dna the cultures dna, get it from createAndRegisterBioDNA + * @param breedable if the culture can be inserted into the BacterialVat + * @return + */ + public static BioCulture createAndRegisterBioCulture(Color color, String name, BioPlasmid plasmid, BioDNA dna, + boolean breedable) { + if (BioCulture.BIO_CULTURE_ARRAY_LIST.size() > 1) + return BioCulture.createAndRegisterBioCulture(color, name, plasmid, dna, breedable); + new Exception( + "Too Early to register a BioCulture! You MUST run this either after:bartworks OR in the init Phase!") + .printStackTrace(); + return null; + } + + /** + * unspecific Biodata that can be converted into DNA and Plasmid with the propper methodes + * + * @param aName the name of the Biodata + * @param rarity visual only + * @param chance the chanche to extract this BioData + * @param tier the tier of this BioData 0=HV, 1=EV etc. + * @return + */ + public static BioData createAndRegisterBioData(String aName, EnumRarity rarity, int chance, int tier) { + if (BioData.BIO_DATA_ARRAY_LIST.size() > 1) + return BioData.createAndRegisterBioData(aName, rarity, chance, tier); + new Exception("Too Early to register a BioData! You MUST run this either after:bartworks OR in the init Phase!") + .printStackTrace(); + return null; + } + + /** + * Default Constructor for HV Tier DNA with 75% extraction rate + * + * @param aName Name of the DNA String + * @param rarity visual + * @return + */ + public static BioDNA createAndRegisterBioDNA(String aName, EnumRarity rarity) { + if (BioData.BIO_DATA_ARRAY_LIST.size() > 1) return BioDNA.createAndRegisterBioDNA(aName, rarity); + new Exception("Too Early to register a BioData! You MUST run this either after:bartworks OR in the init Phase!") + .printStackTrace(); + return null; + } + + /** + * Default Constructor for HV Tier Plasmid with 75% extraction rate + * + * @param aName Name of the Plasmid + * @param rarity visual + * @return + */ + public static BioPlasmid createAndRegisterBioPlasmid(String aName, EnumRarity rarity) { + if (BioData.BIO_DATA_ARRAY_LIST.size() > 1) return BioPlasmid.createAndRegisterBioPlasmid(aName, rarity); + new Exception("Too Early to register a BioData! You MUST run this either after:bartworks OR in the init Phase!") + .printStackTrace(); + return null; + } + + /** + * @param aName Name of the DNA String + * @param rarity visual + * @param chance chanche of extracting + * @param tier tier needed to extract 0=HV, 1=EV etc. + * @return + */ + public static BioDNA createAndRegisterBioDNA(String aName, EnumRarity rarity, int chance, int tier) { + if (BioData.BIO_DATA_ARRAY_LIST.size() > 1) return BioDNA.createAndRegisterBioDNA(aName, rarity, chance, tier); + new Exception("Too Early to register a BioData! You MUST run this either after:bartworks OR in the init Phase!") + .printStackTrace(); + return null; + } + + /** + * @param aName Name of the Plasmid + * @param rarity visual + * @param chance chanche of extracting + * @param tier tier needed to extract 0=HV, 1=EV etc. + * @return + */ + public static BioPlasmid createAndRegisterBioPlasmid(String aName, EnumRarity rarity, int chance, int tier) { + if (BioData.BIO_DATA_ARRAY_LIST.size() > 1) + return BioPlasmid.createAndRegisterBioPlasmid(aName, rarity, chance, tier); + new Exception("Too Early to register a BioData! You MUST run this either after:bartworks OR in the init Phase!") + .printStackTrace(); + return null; + } + + /** + * @param voltageTier (i.e. 6 for LuV, 7 for ZPM, only intresting for LuV+) + * @return the propper Bacteria Tier (at least 0) + */ + public static int getBacteriaTierFromVoltageTier(int voltageTier) { + return Math.max(voltageTier - 6, 0); + } + + /** + * If you get NPE's related to BioCultures (most likely because of Load Order or creating BioCultures after the + * postinit Phase) execute this. + */ + public static void regenerateBioFluids() { + FluidStack dnaFluid = Gendustry.isModLoaded() ? FluidRegistry.getFluidStack("liquiddna", 100) + : Materials.Biomass.getFluid(100L); + for (BioCulture B : BioCulture.BIO_CULTURE_ARRAY_LIST) { + if (B.getFluidNotSet()) { + B.setFluid( + GTFluidFactory.builder( + B.getName() + .replace(" ", "") + .toLowerCase() + "fluid") + .withTextureName("molten.autogenerated") + .withColorRGBA( + new short[] { (short) B.getColor() + .getRed(), + (short) B.getColor() + .getBlue(), + (short) B.getColor() + .getGreen() }) + .withStateAndTemperature(FluidState.LIQUID, 300) + .buildAndRegister() + .asFluid()); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(10)) + .fluidInputs(new FluidStack(B.getFluid(), 1000)) + .fluidOutputs(dnaFluid) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(centrifugeRecipes); + } + } + } +} diff --git a/src/main/java/bartworks/API/BioVatLogicAdder.java b/src/main/java/bartworks/API/BioVatLogicAdder.java new file mode 100644 index 0000000000..26e612c407 --- /dev/null +++ b/src/main/java/bartworks/API/BioVatLogicAdder.java @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +import static gregtech.api.enums.Mods.IndustrialCraft2; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Objects; + +import net.minecraft.item.ItemStack; + +import bartworks.system.material.BWNonMetaMaterialItems; +import bartworks.system.material.WerkstoffLoader; +import bartworks.util.BWUtil; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.util.GTModHandler; + +public final class BioVatLogicAdder { + + public static class RadioHatch { + + public static void runBasicItemIntegration() { + giveItemStackRadioHatchAbilites(ItemList.ThoriumCell_1.get(1), Materials.Thorium, 3); + giveItemStackRadioHatchAbilites(ItemList.ThoriumCell_2.get(1), Materials.Thorium, 6); + giveItemStackRadioHatchAbilites(ItemList.ThoriumCell_4.get(1), Materials.Thorium, 12); + + giveItemStackRadioHatchAbilites(ItemList.NaquadahCell_1.get(1), Materials.Naquadah, 3); + giveItemStackRadioHatchAbilites(ItemList.NaquadahCell_2.get(1), Materials.Naquadah, 6); + giveItemStackRadioHatchAbilites(ItemList.NaquadahCell_4.get(1), Materials.Naquadah, 12); + + giveItemStackRadioHatchAbilites(ItemList.Moxcell_1.get(1), Materials.Plutonium, 3); + giveItemStackRadioHatchAbilites(ItemList.Moxcell_2.get(1), Materials.Plutonium, 6); + giveItemStackRadioHatchAbilites(ItemList.Moxcell_4.get(1), Materials.Plutonium, 12); + + giveItemStackRadioHatchAbilites(ItemList.Uraniumcell_1.get(1), Materials.Uranium, 3); + giveItemStackRadioHatchAbilites(ItemList.Uraniumcell_2.get(1), Materials.Uranium, 6); + giveItemStackRadioHatchAbilites(ItemList.Uraniumcell_4.get(1), Materials.Uranium, 12); + + giveItemStackRadioHatchAbilites( + BWNonMetaMaterialItems.TiberiumCell_1.get(1), + WerkstoffLoader.Tiberium.getBridgeMaterial(), + 3); + giveItemStackRadioHatchAbilites( + BWNonMetaMaterialItems.TiberiumCell_2.get(1), + WerkstoffLoader.Tiberium.getBridgeMaterial(), + 6); + giveItemStackRadioHatchAbilites( + BWNonMetaMaterialItems.TiberiumCell_4.get(1), + WerkstoffLoader.Tiberium.getBridgeMaterial(), + 12); + + giveItemStackRadioHatchAbilites(BWNonMetaMaterialItems.TheCoreCell.get(1), Materials.Naquadah, 96); + + giveItemStackRadioHatchAbilites(ItemList.Depleted_Thorium_1.get(1), Materials.Thorium, 3, 10); + giveItemStackRadioHatchAbilites(ItemList.Depleted_Thorium_2.get(1), Materials.Thorium, 6, 10); + giveItemStackRadioHatchAbilites(ItemList.Depleted_Thorium_4.get(1), Materials.Thorium, 12, 10); + + giveItemStackRadioHatchAbilites(ItemList.Depleted_Naquadah_1.get(1), Materials.Naquadah, 3, 10); + giveItemStackRadioHatchAbilites(ItemList.Depleted_Naquadah_2.get(1), Materials.Naquadah, 6, 10); + giveItemStackRadioHatchAbilites(ItemList.Depleted_Naquadah_4.get(1), Materials.Naquadah, 12, 10); + + giveItemStackRadioHatchAbilites( + GTModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXSimpledepleted", 1), + Materials.Plutonium, + 3, + 10); + giveItemStackRadioHatchAbilites( + GTModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXDualdepleted", 1), + Materials.Plutonium, + 6, + 10); + giveItemStackRadioHatchAbilites( + GTModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXQuaddepleted", 1), + Materials.Plutonium, + 12, + 10); + + giveItemStackRadioHatchAbilites( + GTModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumSimpledepleted", 1), + Materials.Uranium, + 3, + 10); + giveItemStackRadioHatchAbilites( + GTModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumDualdepleted", 1), + Materials.Uranium, + 6, + 10); + giveItemStackRadioHatchAbilites( + GTModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumQuaddepleted", 1), + Materials.Uranium, + 12, + 10); + + giveItemStackRadioHatchAbilites( + BWNonMetaMaterialItems.Depleted_Tiberium_1.get(1), + WerkstoffLoader.Tiberium.getBridgeMaterial(), + 3, + 10); + giveItemStackRadioHatchAbilites( + BWNonMetaMaterialItems.Depleted_Tiberium_2.get(1), + WerkstoffLoader.Tiberium.getBridgeMaterial(), + 6, + 10); + giveItemStackRadioHatchAbilites( + BWNonMetaMaterialItems.Depleted_Tiberium_4.get(1), + WerkstoffLoader.Tiberium.getBridgeMaterial(), + 12, + 10); + + giveItemStackRadioHatchAbilites( + BWNonMetaMaterialItems.Depleted_TheCoreCell.get(1), + Materials.Naquadah, + 96, + 10); + + giveItemStackRadioHatchAbilites(ItemList.MNqCell_1.get(1), Materials.Naquadria, 3); + giveItemStackRadioHatchAbilites(ItemList.MNqCell_2.get(1), Materials.Naquadria, 6); + giveItemStackRadioHatchAbilites(ItemList.MNqCell_4.get(1), Materials.Naquadria, 12); + giveItemStackRadioHatchAbilites(ItemList.Depleted_MNq_1.get(1), Materials.Naquadria, 3, 10); + giveItemStackRadioHatchAbilites(ItemList.Depleted_MNq_2.get(1), Materials.Naquadria, 6, 10); + giveItemStackRadioHatchAbilites(ItemList.Depleted_MNq_4.get(1), Materials.Naquadria, 12, 10); + } + + private static final HashSet MaSv = new HashSet<>(); + private static final HashMap IsSv = new HashMap<>(); + private static final HashMap IsKg = new HashMap<>(); + private static final HashMap IsColor = new HashMap<>(); + + public static HashSet getMaSv() { + return RadioHatch.MaSv; + } + + public static HashMap getIsKg() { + return IsKg; + } + + public static HashMap getIsSv() { + return RadioHatch.IsSv; + } + + public static HashMap getIsColor() { + return IsColor; + } + + public static void setOverrideSvForMaterial(Materials m, int sv) { + MaSv.add(new BioVatLogicAdder.MaterialSvPair(m, sv)); + } + + public static void giveItemStackRadioHatchAbilites(ItemStack stack, int sv) { + IsSv.put(stack, sv); + } + + public static void giveItemStackRadioHatchAbilites(ItemStack stack, Materials materials) { + IsSv.put(stack, BWUtil.calculateSv(materials)); + } + + public static void giveItemStackRadioHatchAbilites(ItemStack stack, int sv, int kg) { + IsSv.put(stack, sv); + IsKg.put(stack, kg); + } + + public static void giveItemStackRadioHatchAbilites(ItemStack stack, Materials materials, int kg) { + giveItemStackRadioHatchAbilites(stack, BWUtil.calculateSv(materials), kg); + IsColor.put(stack, materials.getRGBA()); + } + + public static void giveItemStackRadioHatchAbilites(ItemStack stack, Materials materials, int kg, int divider) { + giveItemStackRadioHatchAbilites(stack, BWUtil.calculateSv(materials) / divider, kg); + IsColor.put(stack, materials.getRGBA()); + } + + public static void giveItemStackRadioHatchAbilites(ItemStack stack, int sv, int kg, short[] color) { + giveItemStackRadioHatchAbilites(stack, sv, kg); + IsColor.put(stack, color); + } + + public static int MaxSV = 150; + + public static int getMaxSv() { + int ret = MaxSV; + for (MaterialSvPair pair : RadioHatch.getMaSv()) { + if (pair.getSievert() > ret) ret = pair.getSievert(); + } + for (ItemStack is : RadioHatch.IsSv.keySet()) { + if (RadioHatch.IsSv.get(is) > ret) ret = RadioHatch.IsSv.get(is); + } + return ret; + } + } + + public static class MaterialSvPair { + + final Materials materials; + final Integer sievert; + + public MaterialSvPair(Materials materials, Integer sievert) { + this.materials = materials; + this.sievert = sievert; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || this.getClass() != o.getClass()) return false; + BioVatLogicAdder.MaterialSvPair that = (BioVatLogicAdder.MaterialSvPair) o; + return Objects.equals(this.getMaterials(), that.getMaterials()) + && Objects.equals(this.getSievert(), that.getSievert()); + } + + @Override + public int hashCode() { + return Objects.hash(this.getMaterials(), this.getSievert()); + } + + public Materials getMaterials() { + return this.materials; + } + + public Integer getSievert() { + return this.sievert; + } + } + +} diff --git a/src/main/java/bartworks/API/BorosilicateGlass.java b/src/main/java/bartworks/API/BorosilicateGlass.java new file mode 100644 index 0000000000..cc61ec1337 --- /dev/null +++ b/src/main/java/bartworks/API/BorosilicateGlass.java @@ -0,0 +1,211 @@ +package bartworks.API; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAdder; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; + +import java.util.ArrayList; +import java.util.List; +import java.util.PriorityQueue; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.stream.Collectors; + +import net.minecraft.block.Block; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.collect.HashBasedTable; +import com.google.common.collect.LinkedHashMultimap; +import com.google.common.collect.SetMultimap; +import com.google.common.collect.Table; +import com.gtnewhorizon.structurelib.structure.IStructureElement; + +import bartworks.common.loaders.ItemRegistry; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.LoaderState; + +/** + * API for bartworks borosilicate glass. + *

+ * You might have noticed this API does not expose any Block instance, but only IStructureElements. This is in case we + * add more glass blocks later, and we run out of meta id for only one block. + *

+ * IStructureElements returned from this class SHOULD NOT have its methods called before post init, or else you + * might end up with wrong autoplace hints. + */ +public class BorosilicateGlass { + + private static List> representatives; + private static SetMultimap> allLevels; + private static final Table allLevelsReverse = HashBasedTable.create(); + + private static boolean isValidTier(int tier) { + return tier > 0 && tier <= Byte.MAX_VALUE; + } + + public static Block getGlassBlock() { + return ItemRegistry.bw_realglas; + } + + public static Block getGlassBlock2() { + return ItemRegistry.bw_realglas; + } + + private static void doRegister(byte level, Block block, int meta, + SetMultimap> allLevels) { + allLevels.put(level, Pair.of(block, meta)); + allLevelsReverse.put(block, meta, level); + } + + private static SetMultimap> getAllLevels() { + if (allLevels == null) { + SetMultimap> ret = LinkedHashMultimap.create(); + Block block = getGlassBlock(); + doRegister((byte) 3, block, 0, ret); + doRegister((byte) 4, block, 1, ret); + doRegister((byte) 5, block, 12, ret); + doRegister((byte) 5, block, 2, ret); + doRegister((byte) 6, block, 3, ret); + doRegister((byte) 7, block, 4, ret); + doRegister((byte) 8, block, 5, ret); + for (int i = 6; i < 12; i++) { + doRegister((byte) 3, block, i, ret); + } + doRegister((byte) 9, block, 13, ret); + doRegister((byte) 10, block, 14, ret); + doRegister((byte) 11, block, 15, ret); + block = getGlassBlock2(); + doRegister((byte) 12, block, 0, ret); + allLevels = ret; + } + return allLevels; + } + + private static List> getRepresentatives() { + if (representatives == null) { + SetMultimap> allLevels = getAllLevels(); + ArrayList> ret = new ArrayList<>(); + for (Byte level : new PriorityQueue<>(allLevels.keySet())) { + ret.add( + allLevels.get(level) + .iterator() + .next()); + } + representatives = ret; + } + return representatives; + } + + private static Byte checkWithinBound(byte val, byte lo, byte hi) { + return val > hi || val < lo ? null : val; + } + + /** + * ONLY registers borosilicate glass. Without this, {@link #getTier} won't work properly in environments that don't + * have the coremod. + */ + public static void registerBorosilicateGlass() { + getAllLevels(); + } + + /** + * Register a new block as valid borosilicate glass with given tier (even if it doesn't contain boron at all) + * + * Does not support matching by more complex stuff like tile entity! + * + * Can only be called at INIT stage. + */ + public static void registerGlass(Block block, int meta, byte tier) { + if (Loader.instance() + .hasReachedState(LoaderState.POSTINITIALIZATION)) throw new IllegalStateException("register too late!"); + if (!Loader.instance() + .hasReachedState(LoaderState.INITIALIZATION)) throw new IllegalStateException("register too early!"); + if (!isValidTier(tier)) throw new IllegalArgumentException("not a valid tier: " + tier); + doRegister(tier, block, meta, getAllLevels()); + } + + /** + * Check if there is at least one type of boroglass in that tier. + */ + public static boolean hasGlassInTier(int tier) { + return getAllLevels().containsKey((byte) tier); + } + + /** + * Get a structure element for a certain tier of borosilicate glass. DOES NOT accept other glass like + * reinforced glass, magic mirror, vanilla glass, etc. unless these glass are explicitly registered as a + * borosilicate glass. + *

+ * Use this if you just want boroglass here and doesn't care what tier it is. + */ + public static IStructureElement ofBoroGlass(int tier) { + if (!hasGlassInTier(tier)) throw new IllegalArgumentException(); + return lazy(t -> { + Pair pair = getRepresentatives().get(tier - 3); + return ofBlockAdder((t1, block1, meta) -> getTier(block1, meta) == tier, pair.getKey(), pair.getValue()); + }); + } + + /** + * Get a structure element for any kind of borosilicate glass. DOES NOT accept other glass like reinforced + * glass, magic mirror, vanilla glass, etc. unless these glass are explicitly registered as a borosilicate glass. + *

+ * Use this if you just want boroglass here and doesn't care what tier it is. + */ + public static IStructureElement ofBoroGlassAnyTier() { + return lazy(t -> ofBlockAnyMeta(getGlassBlock())); + } + + /** + * Get a structure element for borosilicate glass. DOES NOT accept other glass like reinforced glass, magic + * mirror, vanilla glass, etc. unless these glass are explicitly registered as a borosilicate glass. + *

+ * This assumes you want all glass used to be of the same tier. + *

+ * NOTE: This will accept the basic boron glass (HV tier) as well. You might not want this. Use the other overload + * to filter this out. + * + * @param initialValue the value set before structure check started + */ + public static IStructureElement ofBoroGlass(byte initialValue, BiConsumer setter, + Function getter) { + return lazy( + t -> ofBlocksTiered(BorosilicateGlass::getTier, getRepresentatives(), initialValue, setter, getter)); + } + + /** + * Get a structure element for borosilicate glass. DOES NOT accept other glass like reinforced glass, magic + * mirror, vanilla glass, etc. unless these glass are explicitly registered as a borosilicate glass. + * + * @param initialValue the value set before structure check started + * @param minTier minimal accepted tier. inclusive. must be greater than 0. + * @param maxTier maximal accepted tier. inclusive. + */ + public static IStructureElement ofBoroGlass(byte initialValue, byte minTier, byte maxTier, + BiConsumer setter, Function getter) { + if (minTier > maxTier || minTier < 0) throw new IllegalArgumentException(); + return lazy( + t -> ofBlocksTiered( + (block1, meta) -> checkWithinBound(getTier(block1, meta), minTier, maxTier), + getRepresentatives().stream() + .skip(Math.max(minTier - 3, 0)) + .limit(maxTier - minTier + 1) + .collect(Collectors.toList()), + initialValue, + setter, + getter)); + } + + /** + * Get the tier of this borosilicate glass. DOES NOT consider other glass like reinforced glass, magic + * mirror, vanilla glass, etc. unless these glass are explicitly registered as a borosilicate glass. + * + * @return glass tier, or -1 if is not a borosilicate glass + */ + public static byte getTier(Block block, int meta) { + Byte ret = allLevelsReverse.get(block, meta); + return ret == null ? -1 : ret; + } +} diff --git a/src/main/java/bartworks/API/GlassTier.java b/src/main/java/bartworks/API/GlassTier.java new file mode 100644 index 0000000000..381dae28e1 --- /dev/null +++ b/src/main/java/bartworks/API/GlassTier.java @@ -0,0 +1,78 @@ +package bartworks.API; + +import static cpw.mods.fml.common.registry.GameRegistry.findBlock; + +import java.util.HashMap; +import java.util.Objects; + +import net.minecraft.block.Block; + +import org.jetbrains.annotations.NotNull; + +public class GlassTier { + + private static final HashMap glasses = new HashMap<>(); + + /** + * @param modname The modid owning the block + * @param unlocalisedBlockName The name of the block itself + * @param meta The meta of the block + * @param tier the glasses Tier = Voltage tier (MIN 3) + */ + public static void addCustomGlass(String modname, String unlocalisedBlockName, int meta, int tier) { + Block block = findBlock(modname, unlocalisedBlockName); + if (block != null) { + addCustomGlass(block, meta, tier); + } else { + new IllegalArgumentException( + "Block: " + unlocalisedBlockName + + " of the Mod: " + + modname + + " was NOT found when attempting to register a glass!").printStackTrace(); + } + } + + public static void addCustomGlass(@NotNull Block block, int meta, int tier) { + GlassTier.glasses.put(new BlockMetaPair(block, (byte) meta), tier); + } + + public static HashMap getGlassMap() { + return glasses; + } + + public static int getGlassTier(Block block, int meta) { + return glasses.getOrDefault(new BlockMetaPair(block, (byte) meta), 0); + } + + public static class BlockMetaPair { + + private final Block block; + private final int meta; + + public BlockMetaPair(Block block, int aByte) { + this.block = block; + this.meta = aByte; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || this.getClass() != o.getClass()) return false; + BlockMetaPair that = (BlockMetaPair) o; + return Objects.equals(this.getBlock(), that.getBlock()) && Objects.equals(this.getMeta(), that.getMeta()); + } + + @Override + public int hashCode() { + return Objects.hash(this.getBlock(), this.getMeta()); + } + + public Block getBlock() { + return this.block; + } + + public int getMeta() { + return this.meta; + } + } +} diff --git a/src/main/java/bartworks/API/INoiseGen.java b/src/main/java/bartworks/API/INoiseGen.java new file mode 100644 index 0000000000..6048b8e45a --- /dev/null +++ b/src/main/java/bartworks/API/INoiseGen.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +public interface INoiseGen { + + double getNoise(int x, int z); + + double[][] getNoiseForRegion(int xStart, int zStart, int xEnd, int zEnd); + + void setOctaves(int octaves); + + void setFrequency(double freq); + + void setSeed(long seed); + + void setAmplitude(double amplitude); +} diff --git a/src/main/java/bartworks/API/IRadMaterial.java b/src/main/java/bartworks/API/IRadMaterial.java new file mode 100644 index 0000000000..498f56cc6f --- /dev/null +++ b/src/main/java/bartworks/API/IRadMaterial.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +import net.minecraft.item.ItemStack; + +public interface IRadMaterial { + + /** + * @return the amount of Radiation (0-150, commonly, higher values are possible but not recommended!) + */ + int getRadiationLevel(ItemStack aStack); + + /** + * @return 1 for stick, 2 for long rods, 3 for fuel rods + */ + byte getAmountOfMaterial(ItemStack aStack); + + /** + * @return the color of the material for display purposes + */ + short[] getColorForGUI(ItemStack aStack); + + /** + * @return the name of the material for display purposes + */ + String getNameForGUI(ItemStack aStack); +} diff --git a/src/main/java/bartworks/API/ITileAddsInformation.java b/src/main/java/bartworks/API/ITileAddsInformation.java new file mode 100644 index 0000000000..ad3c9bbb7c --- /dev/null +++ b/src/main/java/bartworks/API/ITileAddsInformation.java @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +public interface ITileAddsInformation { + + String[] getInfoData(); +} diff --git a/src/main/java/bartworks/API/ITileDropsContent.java b/src/main/java/bartworks/API/ITileDropsContent.java new file mode 100644 index 0000000000..c7a2b05afc --- /dev/null +++ b/src/main/java/bartworks/API/ITileDropsContent.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +import net.minecraft.inventory.ISidedInventory; + +public interface ITileDropsContent extends ISidedInventory { + + default int[] getDropSlots() { + return new int[] { 0 }; + } +} diff --git a/src/main/java/bartworks/API/ITileHasDifferentTextureSides.java b/src/main/java/bartworks/API/ITileHasDifferentTextureSides.java new file mode 100644 index 0000000000..649129ebcc --- /dev/null +++ b/src/main/java/bartworks/API/ITileHasDifferentTextureSides.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public interface ITileHasDifferentTextureSides { + + IIcon[] texture = new IIcon[7]; + + @SideOnly(Side.CLIENT) + default IIcon getTextureForSide(ForgeDirection side, int meta) { + return texture[side.ordinal()]; + } + + @SideOnly(Side.CLIENT) + default IIcon getTextureForSide(int side, int meta) { + return this.getTextureForSide(ForgeDirection.values()[side], meta); + } + + @SideOnly(Side.CLIENT) + void registerBlockIcons(IIconRegister par1IconRegister); +} diff --git a/src/main/java/bartworks/API/SideReference.java b/src/main/java/bartworks/API/SideReference.java new file mode 100644 index 0000000000..83d083741a --- /dev/null +++ b/src/main/java/bartworks/API/SideReference.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +import cpw.mods.fml.common.FMLCommonHandler; + +public class SideReference { + + public static class EffectiveSide { + + public static final boolean Server = FMLCommonHandler.instance() + .getEffectiveSide() + .isServer(); + public static final boolean Client = FMLCommonHandler.instance() + .getEffectiveSide() + .isClient(); + } + + public static class Side { + + public static final boolean Server = FMLCommonHandler.instance() + .getSide() + .isServer(); + public static final boolean Client = FMLCommonHandler.instance() + .getSide() + .isClient(); + } +} diff --git a/src/main/java/bartworks/API/VoidMinerDropAdder.java b/src/main/java/bartworks/API/VoidMinerDropAdder.java new file mode 100644 index 0000000000..de55ade363 --- /dev/null +++ b/src/main/java/bartworks/API/VoidMinerDropAdder.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +import bwcrossmod.galacticgreg.VoidMinerUtility; +import gregtech.api.interfaces.ISubTagContainer; + +public class VoidMinerDropAdder { + + public static void addDropsToDim(int dimID, ISubTagContainer material, float chance) { + VoidMinerUtility.addMaterialToDimensionList(dimID, material, chance); + } +} diff --git a/src/main/java/bartworks/API/WerkstoffAPI.java b/src/main/java/bartworks/API/WerkstoffAPI.java new file mode 100644 index 0000000000..d23ef1b75c --- /dev/null +++ b/src/main/java/bartworks/API/WerkstoffAPI.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +import bartworks.system.material.Werkstoff; + +public final class WerkstoffAPI { + + @SuppressWarnings("rawtypes") + static Class w; + + static { + try { + w = Class.forName("bartworks.system.material.WerkstoffLoader"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + + public static Werkstoff getWerkstoff(String aName) throws NoSuchFieldException, IllegalAccessException { + return (Werkstoff) w.getField(aName) + .get(null); + } +} diff --git a/src/main/java/bartworks/API/WerkstoffAdderRegistry.java b/src/main/java/bartworks/API/WerkstoffAdderRegistry.java new file mode 100644 index 0000000000..1e122c0c3d --- /dev/null +++ b/src/main/java/bartworks/API/WerkstoffAdderRegistry.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.API; + +import java.util.HashSet; + +public final class WerkstoffAdderRegistry { + + private static final HashSet toRun = new HashSet<>(); + + private WerkstoffAdderRegistry() {} + + public static void addWerkstoffAdder(Runnable adder) { + toRun.add(adder); + } + + public static void run() { + for (Runnable r : toRun) r.run(); + } +} diff --git a/src/main/java/bartworks/API/modularUI/BWUITextures.java b/src/main/java/bartworks/API/modularUI/BWUITextures.java new file mode 100644 index 0000000000..86043e697d --- /dev/null +++ b/src/main/java/bartworks/API/modularUI/BWUITextures.java @@ -0,0 +1,68 @@ +package bartworks.API.modularUI; + +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import com.gtnewhorizons.modularui.api.drawable.AdaptableUITexture; +import com.gtnewhorizons.modularui.api.drawable.UITexture; + +import bartworks.MainMod; + +public class BWUITextures { + + public static final AdaptableUITexture BACKGROUND_BROWN = AdaptableUITexture + .of(MainMod.MOD_ID, "GUI/background/brown", 176, 166, 3); + public static final UITexture BACKGROUND_CIRCUIT_PROGRAMMER = UITexture + .fullImage(MainMod.MOD_ID, "GUI/background/circuit_programmer"); + + public static final AdaptableUITexture SLOT_BROWN = AdaptableUITexture + .of(MainMod.MOD_ID, "GUI/slot/brown", 18, 18, 1); + + public static final UITexture OVERLAY_SLOT_DISH = UITexture.fullImage(MainMod.MOD_ID, "GUI/overlay_slot/dish"); + public static final UITexture OVERLAY_SLOT_DNA_FLASK = UITexture + .fullImage(MainMod.MOD_ID, "GUI/overlay_slot/dna_flask"); + public static final UITexture OVERLAY_SLOT_MODULE = UITexture.fullImage(MainMod.MOD_ID, "GUI/overlay_slot/module"); + public static final UITexture OVERLAY_SLOT_ROD = UITexture.fullImage(MainMod.MOD_ID, "GUI/overlay_slot/rod"); + public static final UITexture OVERLAY_SLOT_CROSS = UITexture.fullImage(MainMod.MOD_ID, "GUI/overlay_slot/cross"); + + public static final UITexture PROGRESSBAR_SIEVERT = UITexture.fullImage(MainMod.MOD_ID, "GUI/progressbar/sievert"); + public static final UITexture PROGRESSBAR_STORED_EU_116 = UITexture + .fullImage(MainMod.MOD_ID, "GUI/progressbar/stored_eu_116"); + public static final UITexture PROGRESSBAR_FUEL = UITexture.fullImage(MainMod.MOD_ID, "GUI/progressbar/fuel"); + + public static final UITexture PICTURE_BW_LOGO_47X21 = UITexture + .fullImage(MainMod.MOD_ID, "GUI/picture/bw_logo_47x21"); + public static final UITexture PICTURE_SIEVERT_CONTAINER = UITexture + .fullImage(MainMod.MOD_ID, "GUI/picture/sievert_container"); + public static final UITexture PICTURE_DECAY_TIME_CONTAINER = UITexture + .fullImage(MainMod.MOD_ID, "GUI/picture/decay_time_container"); + public static final UITexture PICTURE_DECAY_TIME_INSIDE = UITexture + .fullImage(MainMod.MOD_ID, "GUI/picture/decay_time_inside"); + public static final UITexture PICTURE_RADIATION = UITexture.fullImage(MainMod.MOD_ID, "GUI/picture/radiation"); + public static final UITexture PICTURE_WINDMILL_EMPTY = UITexture + .fullImage(MainMod.MOD_ID, "GUI/picture/windmill_empty"); + public static final UITexture[] PICTURE_WINDMILL_ROTATING = IntStream.range(0, 4) + .mapToObj( + i -> UITexture + .partly(MainMod.MOD_ID, "GUI/picture/windmill_rotating", 32, 128, 0, i * 32, 32, (i + 1) * 32)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + public static final UITexture PICTURE_STORED_EU_FRAME = UITexture + .fullImage(MainMod.MOD_ID, "GUI/picture/stored_eu_frame"); + public static final UITexture PICTURE_RADIATION_SHUTTER_FRAME = UITexture + .fullImage(MainMod.MOD_ID, "GUI/picture/radiation_shutter_frame"); + public static final AdaptableUITexture PICTURE_RADIATION_SHUTTER_INSIDE = AdaptableUITexture + .of(MainMod.MOD_ID, "GUI/picture/radiation_shutter_inside", 51, 48, 1); + + public static final AdaptableUITexture TAB_TITLE_BROWN = AdaptableUITexture + .of(MainMod.MOD_ID, "GUI/tab/title_brown", 28, 28, 4); + public static final AdaptableUITexture TAB_TITLE_DARK_BROWN = AdaptableUITexture + .of(MainMod.MOD_ID, "GUI/tab/title_dark_brown", 28, 28, 4); + public static final AdaptableUITexture TAB_TITLE_ANGULAR_BROWN = AdaptableUITexture + .of(MainMod.MOD_ID, "GUI/tab/title_angular_brown", 28, 28, 4); + + public static final UITexture OVERLAY_BUTTON_ASSEMBLER_MODE = UITexture + .fullImage(MainMod.MOD_ID, "GUI/overlay_button/assembler_mode"); + public static final UITexture OVERLAY_BUTTON_LINE_MODE = UITexture + .fullImage(MainMod.MOD_ID, "GUI/overlay_button/line_mode"); +} diff --git a/src/main/java/bartworks/API/recipe/BWNBTDependantCraftingRecipe.java b/src/main/java/bartworks/API/recipe/BWNBTDependantCraftingRecipe.java new file mode 100644 index 0000000000..9d7e8ca38c --- /dev/null +++ b/src/main/java/bartworks/API/recipe/BWNBTDependantCraftingRecipe.java @@ -0,0 +1,76 @@ +package bartworks.API.recipe; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; + +import bartworks.util.BWUtil; + +public class BWNBTDependantCraftingRecipe implements IRecipe { + + ItemStack result; + Map charToStackMap = new HashMap<>(9, 1); + String[] shape; + + @SuppressWarnings({ "SuspiciousSystemArraycopy" }) + public BWNBTDependantCraftingRecipe(ItemStack result, Object... recipe) { + this.result = result; + this.shape = new String[3]; + System.arraycopy(recipe, 0, this.shape, 0, 3); + this.charToStackMap.put(' ', null); + for (int i = 3; i < recipe.length; i += 2) { + this.charToStackMap.put((char) recipe[i], ((ItemStack) recipe[i + 1]).copy()); + } + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof BWNBTDependantCraftingRecipe that)) return false; + + if (!Objects.equals(this.result, that.result) || !Objects.equals(this.charToStackMap, that.charToStackMap)) + return false; + // Probably incorrect - comparing Object[] arrays with Arrays.equals + return Arrays.equals(this.shape, that.shape); + } + + @Override + public int hashCode() { + int result1 = this.result != null ? this.result.hashCode() : 0; + result1 = 31 * result1 + (this.charToStackMap != null ? this.charToStackMap.hashCode() : 0); + return 31 * result1 + Arrays.hashCode(this.shape); + } + + @Override + public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_) { + for (int x = 0; x < 3; x++) { + for (int y = 0; y < 3; y++) { + ItemStack toCheck = p_77569_1_.getStackInRowAndColumn(y, x); + ItemStack ref = this.charToStackMap.get(this.shape[x].toCharArray()[y]); + if (!BWUtil.areStacksEqualOrNull(toCheck, ref)) return false; + } + } + return true; + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting p_77572_1_) { + return this.result.copy(); + } + + @Override + public int getRecipeSize() { + return 10; + } + + @Override + public ItemStack getRecipeOutput() { + return this.result; + } +} diff --git a/src/main/java/bartworks/API/recipe/BacterialVatFrontend.java b/src/main/java/bartworks/API/recipe/BacterialVatFrontend.java new file mode 100644 index 0000000000..afca4274d9 --- /dev/null +++ b/src/main/java/bartworks/API/recipe/BacterialVatFrontend.java @@ -0,0 +1,92 @@ +package bartworks.API.recipe; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; + +import com.gtnewhorizons.modularui.api.math.Alignment; + +import bartworks.common.tileentities.multis.MTEBioVat; +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.nei.GTNEIDefaultHandler; +import gregtech.nei.RecipeDisplayInfo; +import gregtech.nei.formatter.INEISpecialInfoFormatter; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class BacterialVatFrontend extends RecipeMapFrontend { + + public BacterialVatFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super( + uiPropertiesBuilder, + neiPropertiesBuilder.neiSpecialInfoFormatter(new BacterialVatSpecialValueFormatter())); + } + + @Override + protected List handleNEIItemInputTooltip(List currentTip, + GTNEIDefaultHandler.FixedPositionedStack pStack) { + if (pStack.isFluid()) { + currentTip.add(EnumChatFormatting.GRAY + StatCollector.translateToLocal("nei.biovat.input.tooltip")); + return currentTip; + } + return super.handleNEIItemInputTooltip(currentTip, pStack); + } + + @Override + protected List handleNEIItemOutputTooltip(List currentTip, + GTNEIDefaultHandler.FixedPositionedStack pStack) { + if (pStack.isFluid()) { + currentTip.add(EnumChatFormatting.GRAY + StatCollector.translateToLocal("nei.biovat.output.tooltip")); + return currentTip; + } + return super.handleNEIItemOutputTooltip(currentTip, pStack); + } + + @Override + protected void drawNEIOverlayForInput(GTNEIDefaultHandler.FixedPositionedStack stack) { + drawFluidOverlay(stack); + } + + @Override + protected void drawNEIOverlayForOutput(GTNEIDefaultHandler.FixedPositionedStack stack) { + drawFluidOverlay(stack); + } + + private void drawFluidOverlay(GTNEIDefaultHandler.FixedPositionedStack stack) { + if (stack.isFluid()) { + drawNEIOverlayText( + "+", + stack, + colorOverride.getTextColorOrDefault("nei_overlay_yellow", 0xFDD835), + 0.5f, + true, + Alignment.TopRight); + return; + } + super.drawNEIOverlayForOutput(stack); + } + + private static class BacterialVatSpecialValueFormatter implements INEISpecialInfoFormatter { + + @Override + public List format(RecipeDisplayInfo recipeInfo) { + int[] tSpecialA = MTEBioVat.specialValueUnpack(recipeInfo.recipe.mSpecialValue); + String glassTier = StatCollector.translateToLocalFormatted("nei.biovat.0.name", tSpecialA[0]); + String sievert; + if (tSpecialA[2] == 1) { + sievert = StatCollector.translateToLocalFormatted("nei.biovat.1.name", tSpecialA[3]); + } else { + sievert = StatCollector.translateToLocalFormatted("nei.biovat.2.name", tSpecialA[3]); + } + return Arrays.asList(glassTier, sievert); + } + } +} diff --git a/src/main/java/bartworks/API/recipe/BartWorksRecipeMaps.java b/src/main/java/bartworks/API/recipe/BartWorksRecipeMaps.java new file mode 100644 index 0000000000..a367cca300 --- /dev/null +++ b/src/main/java/bartworks/API/recipe/BartWorksRecipeMaps.java @@ -0,0 +1,89 @@ +package bartworks.API.recipe; + +import bartworks.API.modularUI.BWUITextures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMapBackend; +import gregtech.api.recipe.RecipeMapBuilder; +import gregtech.api.recipe.maps.FuelBackend; +import gregtech.nei.formatter.FuelSpecialValueFormatter; + +public class BartWorksRecipeMaps { + + public static final RecipeMap bioLabRecipes = RecipeMapBuilder.of("bw.recipe.biolab") + .maxIO(6, 2, 1, 0) + .minInputs(1, 1) + .useSpecialSlot() + .slotOverlays((index, isFluid, isOutput, isSpecial) -> { + if (isSpecial) { + return BWUITextures.OVERLAY_SLOT_MODULE; + } + if (isFluid) { + return GTUITextures.OVERLAY_SLOT_VIAL_2; + } + if (!isOutput) { + switch (index) { + case 0: + return BWUITextures.OVERLAY_SLOT_DISH; + case 1: + return BWUITextures.OVERLAY_SLOT_DNA_FLASK; + case 2: + return GTUITextures.OVERLAY_SLOT_CIRCUIT; + case 3: + return GTUITextures.OVERLAY_SLOT_MOLECULAR_1; + case 4: + return GTUITextures.OVERLAY_SLOT_MOLECULAR_2; + case 5: + return GTUITextures.OVERLAY_SLOT_DATA_ORB; + } + } + return null; + }) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) + .logo(BWUITextures.PICTURE_BW_LOGO_47X21) + .logoSize(47, 21) + .logoPos(125, 3) + .disableRegisterNEI() + .build(); + public static final RecipeMap bacterialVatRecipes = RecipeMapBuilder.of("bw.recipe.BacteriaVat") + .maxIO(6, 2, 1, 1) + .minInputs(0, 1) + .useSpecialSlot() + .specialSlotSensitive() + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) + .frontend(BacterialVatFrontend::new) + .disableRegisterNEI() + .build(); + public static final RecipeMap acidGenFuels = RecipeMapBuilder.of("bw.fuels.acidgens", FuelBackend::new) + .maxIO(1, 1, 0, 0) + .neiSpecialInfoFormatter(FuelSpecialValueFormatter.INSTANCE) + .build(); + public static final RecipeMap circuitAssemblyLineRecipes = RecipeMapBuilder.of("bw.recipe.cal") + .maxIO(6, 1, 1, 0) + .minInputs(1, 1) + .useSpecialSlot() + .specialSlotSensitive() + .progressBar(GTUITextures.PROGRESSBAR_CIRCUIT_ASSEMBLER) + .build(); + public static final RecipeMap radioHatchRecipes = RecipeMapBuilder.of("bw.recipe.radhatch") + .maxIO(1, 0, 0, 0) + .minInputs(1, 0) + .slotOverlays((index, isFluid, isOutput, isSpecial) -> BWUITextures.OVERLAY_SLOT_ROD) + .logo(BWUITextures.PICTURE_BW_LOGO_47X21) + .logoSize(47, 21) + .logoPos(118, 55) + .dontUseProgressBar() + .addSpecialTexture(74, 20, 29, 27, BWUITextures.PICTURE_RADIATION) + .frontend(RadioHatchFrontend::new) + .build(); + public static final RecipeMap electricImplosionCompressorRecipes = RecipeMapBuilder + .of("gt.recipe.electricimplosioncompressor") + .maxIO(6, 2, 1, 1) + .slotOverlays( + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_IMPLOSION : null) + .progressBar(GTUITextures.PROGRESSBAR_COMPRESS) + .build(); + public static final RecipeMap htgrFakeRecipes = RecipeMapBuilder.of("bw.recipe.htgr") + .maxIO(1, 1, 0, 0) + .build(); +} diff --git a/src/main/java/bartworks/API/recipe/DynamicGTRecipe.java b/src/main/java/bartworks/API/recipe/DynamicGTRecipe.java new file mode 100644 index 0000000000..3739c28042 --- /dev/null +++ b/src/main/java/bartworks/API/recipe/DynamicGTRecipe.java @@ -0,0 +1,33 @@ +package bartworks.API.recipe; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.MainMod; +import gregtech.api.util.GTRecipe; + +public class DynamicGTRecipe extends GTRecipe { + + public DynamicGTRecipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, + int[] aChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, + int aSpecialValue, GTRecipe originalRecipe) { + super( + aOptimize, + aInputs, + aOutputs, + aSpecialItems, + aChances, + aFluidInputs, + aFluidOutputs, + aDuration, + aEUt, + aSpecialValue); + if (originalRecipe != null) { + this.owners = new ArrayList<>(originalRecipe.owners); + this.stackTraces = new ArrayList<>(originalRecipe.stackTraces); + this.setOwner(MainMod.MOD_ID); + } + } +} diff --git a/src/main/java/bartworks/API/recipe/RadioHatchFrontend.java b/src/main/java/bartworks/API/recipe/RadioHatchFrontend.java new file mode 100644 index 0000000000..1335323f4e --- /dev/null +++ b/src/main/java/bartworks/API/recipe/RadioHatchFrontend.java @@ -0,0 +1,45 @@ +package bartworks.API.recipe; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.util.StatCollector; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.nei.RecipeDisplayInfo; +import gregtech.nei.formatter.INEISpecialInfoFormatter; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class RadioHatchFrontend extends RecipeMapFrontend { + + public RadioHatchFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder.neiSpecialInfoFormatter(new RadioHatchSpecialInfoFormatter())); + } + + @Override + protected void drawEnergyInfo(RecipeDisplayInfo recipeInfo) {} + + @Override + protected void drawDurationInfo(RecipeDisplayInfo recipeInfo) {} + + private static class RadioHatchSpecialInfoFormatter implements INEISpecialInfoFormatter { + + @Override + public List format(RecipeDisplayInfo recipeInfo) { + int radioLevel = recipeInfo.recipe.mEUt; + int amount = recipeInfo.recipe.mDuration; + long time = recipeInfo.recipe.mSpecialValue; + return Arrays.asList( + StatCollector.translateToLocalFormatted("BW.NEI.display.radhatch.0", radioLevel), + StatCollector.translateToLocalFormatted("BW.NEI.display.radhatch.1", amount), + StatCollector.translateToLocalFormatted("BW.NEI.display.radhatch.2", time * amount / 20.0)); + } + } +} diff --git a/src/main/java/bartworks/ASM/BWCoreStaticReplacementMethodes.java b/src/main/java/bartworks/ASM/BWCoreStaticReplacementMethodes.java new file mode 100644 index 0000000000..8a20495472 --- /dev/null +++ b/src/main/java/bartworks/ASM/BWCoreStaticReplacementMethodes.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.ASM; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; + +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; + +import bartworks.util.NonNullWrappedHashSet; +import bartworks.util.accessprioritylist.AccessPriorityList; +import bartworks.util.accessprioritylist.AccessPriorityListNode; + +public class BWCoreStaticReplacementMethodes { + + private static ThreadLocal> RECENTLYUSEDRECIPES = ThreadLocal + .withInitial(AccessPriorityList::new); + + public static void clearRecentlyUsedRecipes() { + // the easiest way to ensure the cache is flushed without causing synchronization overhead + // is to just replace the whole ThreadLocal instance. + RECENTLYUSEDRECIPES = ThreadLocal.withInitial(AccessPriorityList::new); + } + + public static ItemStack findCachedMatchingRecipe(InventoryCrafting inventoryCrafting, World world) { + int i = 0; + ItemStack itemstack = null; + ItemStack itemstack1 = null; + int j; + + for (j = 0; j < inventoryCrafting.getSizeInventory(); ++j) { + ItemStack itemstack2 = inventoryCrafting.getStackInSlot(j); + + if (itemstack2 != null) { + if (i == 0) itemstack = itemstack2; + + if (i == 1) itemstack1 = itemstack2; + + ++i; + } + } + + if (i == 2 && itemstack.getItem() == itemstack1.getItem() + && itemstack.stackSize == 1 + && itemstack1.stackSize == 1 + && itemstack.getItem() + .isRepairable()) { + Item item = itemstack.getItem(); + int j1 = item.getMaxDamage() - itemstack.getItemDamageForDisplay(); + int k = item.getMaxDamage() - itemstack1.getItemDamageForDisplay(); + int l = j1 + k + item.getMaxDamage() * 5 / 100; + int i1 = item.getMaxDamage() - l; + + if (i1 < 0) i1 = 0; + + return new ItemStack(itemstack.getItem(), 1, i1); + + } + IRecipe iPossibleRecipe = null; + AccessPriorityList cache = RECENTLYUSEDRECIPES.get(); + Iterator> it = cache.nodeIterator(); + + while (it.hasNext()) { + AccessPriorityListNode recipeNode = it.next(); + iPossibleRecipe = recipeNode.getELEMENT(); + + if (!iPossibleRecipe.matches(inventoryCrafting, world)) continue; + + cache.addPrioToNode(recipeNode); + return iPossibleRecipe.getCraftingResult(inventoryCrafting); + } + + HashSet recipeSet = new NonNullWrappedHashSet<>(); + List recipeList = CraftingManager.getInstance() + .getRecipeList(); + + for (IRecipe r : recipeList) { + if (r.matches(inventoryCrafting, world)) recipeSet.add(r); + } + + Object[] arr = recipeSet.toArray(); + + if (arr.length == 0) return null; + + IRecipe recipe = (IRecipe) arr[0]; + ItemStack stack = recipe.getCraftingResult(inventoryCrafting); + + if (arr.length != 1) return stack; + + if (stack != null) cache.addLast(recipe); + + return stack; + } + +} diff --git a/src/main/java/bartworks/GuiHandler.java b/src/main/java/bartworks/GuiHandler.java new file mode 100644 index 0000000000..2e89e0e7a2 --- /dev/null +++ b/src/main/java/bartworks/GuiHandler.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +import bartworks.API.SideReference; +import cpw.mods.fml.common.network.IGuiHandler; + +public class GuiHandler implements IGuiHandler { + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + return null; + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + if (!SideReference.Side.Client) return this.getServerGuiElement(ID, player, world, x, y, z); + return null; + } +} diff --git a/src/main/java/bartworks/MainMod.java b/src/main/java/bartworks/MainMod.java new file mode 100644 index 0000000000..7356fa9cc8 --- /dev/null +++ b/src/main/java/bartworks/MainMod.java @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks; + +import static bartworks.common.loaders.BioRecipeLoader.runOnServerStarted; +import static bartworks.system.material.WerkstoffLoader.removeIC2Recipes; +import static gregtech.api.enums.Mods.BartWorks; + +import java.io.IOException; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraftforge.common.MinecraftForge; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import bartworks.API.APIConfigValues; +import bartworks.API.BioObjectAdder; +import bartworks.API.BioVatLogicAdder; +import bartworks.API.SideReference; +import bartworks.client.ClientEventHandler.TooltipEventHandler; +import bartworks.client.creativetabs.BartWorksTab; +import bartworks.client.creativetabs.BioTab; +import bartworks.client.creativetabs.GT2Tab; +import bartworks.client.textures.PrefixTextureLinker; +import bartworks.common.configs.ConfigHandler; +import bartworks.common.items.BWItemBlocks; +import bartworks.common.loaders.ArtificialMicaLine; +import bartworks.common.loaders.BioCultureLoader; +import bartworks.common.loaders.BioLabLoader; +import bartworks.common.loaders.ItemRegistry; +import bartworks.common.loaders.LocalisationLoader; +import bartworks.common.loaders.RadioHatchMaterialLoader; +import bartworks.common.loaders.RecipeLoader; +import bartworks.common.loaders.RegisterGlassTiers; +import bartworks.common.loaders.RegisterServerCommands; +import bartworks.common.loaders.StaticRecipeChangeLoaders; +import bartworks.common.net.BWNetwork; +import bartworks.server.EventHandler.ServerEventHandler; +import bartworks.system.material.CircuitGeneration.CircuitImprintLoader; +import bartworks.system.material.CircuitGeneration.CircuitPartLoader; +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.gtenhancement.PlatinumSludgeOverHaul; +import bartworks.system.material.processingLoaders.DownTierLoader; +import bartworks.system.oredict.OreDictHandler; +import bartworks.util.ResultWrongSievert; +import bartworks.util.log.DebugLog; +import bwcrossmod.galacticgreg.VoidMinerUtility; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.Mod; +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.FMLServerStartedEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; +import cpw.mods.fml.common.network.IGuiHandler; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.GT_Version; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Mods; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; + +@Mod(modid = MainMod.MOD_ID, name = MainMod.NAME, version = GT_Version.VERSION, dependencies = """ + required-after:IC2;\ + required-after:gregtech;\ + after:berriespp;\ + after:tectech;\ + after:GalacticraftMars;\ + after:GalacticraftCore;\ + after:Forestry;\ + after:ProjRed|Illumination;\ + after:RandomThings;\ + before:miscutils;""") +public final class MainMod { + + public static final String NAME = "BartWorks"; + public static final String MOD_ID = Mods.Names.BART_WORKS; + public static final String APIVERSION = "11"; + public static final Logger LOGGER = LogManager.getLogger(MainMod.NAME); + public static final CreativeTabs GT2 = new GT2Tab("GT2C"); + public static final CreativeTabs BIO_TAB = new BioTab("BioTab"); + public static final CreativeTabs BWT = new BartWorksTab(BartWorks.ID); + public static final IGuiHandler GH = new GuiHandler(); + + @Mod.Instance(MainMod.MOD_ID) + public static MainMod instance; + + public static BWNetwork BW_Network_instance = new BWNetwork(); + + public MainMod() { + + } + + @Mod.EventHandler + public void preInit(FMLPreInitializationEvent preinit) { + MainMod.LOGGER.info("Found GT++, continuing"); + + GameRegistry.registerBlock(ItemRegistry.bw_glasses[0], BWItemBlocks.class, "BW_GlasBlocks"); + GameRegistry.registerBlock(ItemRegistry.bw_glasses[1], BWItemBlocks.class, "BW_GlasBlocks2"); + + if (APIConfigValues.debugLog) { + try { + DebugLog.initDebugLog(preinit); + } catch (IOException e) { + MainMod.LOGGER.catching(e); + } + } + + WerkstoffLoader.setUp(); + + BioCultureLoader.run(); + + Werkstoff.init(); + GregTechAPI.sAfterGTPostload.add(new CircuitPartLoader()); + if (SideReference.Side.Client) { + GregTechAPI.sBeforeGTLoad.add(new PrefixTextureLinker()); + } + + RegisterGlassTiers.run(); + } + + @Mod.EventHandler + public void init(FMLInitializationEvent init) { + if (SideReference.Side.Client && ConfigHandler.tooltips) + MinecraftForge.EVENT_BUS.register(new TooltipEventHandler()); + ServerEventHandler serverEventHandler = new ServerEventHandler(); + if (SideReference.Side.Server) { + MinecraftForge.EVENT_BUS.register(serverEventHandler); + } + FMLCommonHandler.instance() + .bus() + .register(serverEventHandler); + BioLabLoader.run(); + + WerkstoffLoader.runInit(); + + ItemRegistry.run(); + } + + @Mod.EventHandler + public void postInit(FMLPostInitializationEvent postinit) { + + RecipeLoader.run(); + + NetworkRegistry.INSTANCE.registerGuiHandler(MainMod.instance, MainMod.GH); + + ArtificialMicaLine.runArtificialMicaRecipe(); + BioObjectAdder.regenerateBioFluids(); + + WerkstoffLoader.run(); + LocalisationLoader.localiseAll(); + + CheckRecipeResultRegistry.register(new ResultWrongSievert(0, ResultWrongSievert.NeededSievertType.EXACTLY)); + + RadioHatchMaterialLoader.run(); + } + + @Mod.EventHandler + public void onServerStarting(FMLServerStartingEvent event) { + RegisterServerCommands.registerAll(event); + } + + @Mod.EventHandler + public void onServerStarted(FMLServerStartedEvent event) { + MainMod.runOnPlayerJoined(ConfigHandler.classicMode, ConfigHandler.disableExtraGassesForEBF); + } + + @Mod.EventHandler + public void onModLoadingComplete(FMLLoadCompleteEvent event) { + removeIC2Recipes(); + StaticRecipeChangeLoaders.addElectricImplosionCompressorRecipes(); + PlatinumSludgeOverHaul.replacePureElements(); + + runOnServerStarted(); + StaticRecipeChangeLoaders.unificationRecipeEnforcer(); + VoidMinerUtility.generateDropMaps(); + } + + private static boolean recipesAdded; + + public static void runOnPlayerJoined(boolean classicMode, boolean disableExtraGasRecipes) { + OreDictHandler.adaptCacheForWorld(); + CircuitImprintLoader.run(); + BioVatLogicAdder.RadioHatch.runBasicItemIntegration(); + if (!recipesAdded) { + if (!disableExtraGasRecipes) StaticRecipeChangeLoaders.addEBFGasRecipes(); + + if (classicMode) DownTierLoader.run(); + + recipesAdded = true; + } + + // Accept recipe map changes into Buffers + RecipeMap.ALL_RECIPE_MAPS.values() + .forEach( + map -> map.getBackend() + .reInit()); + } +} diff --git a/src/main/java/bartworks/client/ClientEventHandler/TooltipEventHandler.java b/src/main/java/bartworks/client/ClientEventHandler/TooltipEventHandler.java new file mode 100644 index 0000000000..554bcd8ba8 --- /dev/null +++ b/src/main/java/bartworks/client/ClientEventHandler/TooltipEventHandler.java @@ -0,0 +1,36 @@ +package bartworks.client.ClientEventHandler; + +import static gregtech.api.util.GTUtility.getColoredTierNameFromTier; + +import net.minecraft.block.Block; +import net.minecraft.util.StatCollector; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; + +import bartworks.API.GlassTier; +import cpw.mods.fml.common.eventhandler.EventPriority; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class TooltipEventHandler { + + @SideOnly(Side.CLIENT) + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void getTooltip(ItemTooltipEvent event) { + + if (event == null || event.itemStack == null || event.itemStack.getItem() == null) return; + + final Block block = Block.getBlockFromItem(event.itemStack.getItem()); + final int meta = event.itemStack.getItemDamage(); + + int tier = GlassTier.getGlassTier(block, meta); + + if (tier == 0) return; + + event.toolTip.add( + StatCollector.translateToLocal("tooltip.glass_tier.0.name") + " " + + getColoredTierNameFromTier((byte) tier)); + + } +} diff --git a/src/main/java/bartworks/client/creativetabs/BartWorksTab.java b/src/main/java/bartworks/client/creativetabs/BartWorksTab.java new file mode 100644 index 0000000000..435e4f8e73 --- /dev/null +++ b/src/main/java/bartworks/client/creativetabs/BartWorksTab.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.client.creativetabs; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +import bartworks.common.loaders.ItemRegistry; + +public class BartWorksTab extends CreativeTabs { + + public BartWorksTab(String lable) { + super(lable); + } + + @Override + public Item getTabIconItem() { + return ItemRegistry.ROCKCUTTER_HV; + } +} diff --git a/src/main/java/bartworks/client/creativetabs/BioTab.java b/src/main/java/bartworks/client/creativetabs/BioTab.java new file mode 100644 index 0000000000..633402412e --- /dev/null +++ b/src/main/java/bartworks/client/creativetabs/BioTab.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.client.creativetabs; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +import bartworks.common.loaders.BioItemList; + +public class BioTab extends CreativeTabs { + + public BioTab(String lable) { + super(lable); + } + + @Override + public Item getTabIconItem() { + return BioItemList.getPetriDish(null) + .getItem(); + } +} diff --git a/src/main/java/bartworks/client/creativetabs/GT2Tab.java b/src/main/java/bartworks/client/creativetabs/GT2Tab.java new file mode 100644 index 0000000000..d5095c96f6 --- /dev/null +++ b/src/main/java/bartworks/client/creativetabs/GT2Tab.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.client.creativetabs; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +import bartworks.common.loaders.ItemRegistry; + +public class GT2Tab extends CreativeTabs { + + public GT2Tab(String lable) { + super(lable); + } + + @Override + public Item getTabIconItem() { + return ItemRegistry.TAB; + } +} diff --git a/src/main/java/bartworks/client/gui/GuiContainerRotorBlock.java b/src/main/java/bartworks/client/gui/GuiContainerRotorBlock.java new file mode 100644 index 0000000000..cb819b8cb6 --- /dev/null +++ b/src/main/java/bartworks/client/gui/GuiContainerRotorBlock.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.client.gui; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; + +import org.lwjgl.opengl.GL11; + +import bartworks.MainMod; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ic2.core.block.kineticgenerator.container.ContainerWindKineticGenerator; +import ic2.core.block.kineticgenerator.gui.GuiWindKineticGenerator; +import ic2.core.util.GuiTooltipHelper; + +@SideOnly(Side.CLIENT) +public class GuiContainerRotorBlock extends GuiWindKineticGenerator { + + public ContainerWindKineticGenerator container; + public String name; + + public GuiContainerRotorBlock(ContainerWindKineticGenerator container1) { + super(container1); + this.container = container1; + this.name = StatCollector.translateToLocal("tile.BWRotorBlock.0.name"); + } + + @Override + protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { + this.fontRendererObj + .drawString(this.name, (this.xSize - this.fontRendererObj.getStringWidth(this.name)) / 2, 6, 2157374); + if (this.container.base.checkrotor()) { + if (!this.container.base.rotorspace()) { + this.fontRendererObj.drawString( + StatCollector.translateToLocal("ic2.WindKineticGenerator.gui.rotorspace"), + 27, + 52, + 2157374); + } else if (this.container.base.checkrotor() && !this.container.base.guiisminWindStrength()) { + this.fontRendererObj.drawString( + StatCollector.translateToLocal("ic2.WindKineticGenerator.gui.windweak1"), + 27, + 52, + 2157374); + } else { + this.fontRendererObj.drawString(this.container.base.getRotorhealth() + " %", 46, 52, 2157374); + if (this.container.base.guiisoverload()) { + GuiTooltipHelper.drawAreaTooltip( + mouseX - this.guiLeft, + mouseY - this.guiTop, + StatCollector.translateToLocal("ic2.WindKineticGenerator.error.overload"), + 44, + 27, + 79, + 52); + } + } + } else { + this.fontRendererObj + .drawString(StatCollector.translateToLocal("ic2.WindKineticGenerator.gui.rotormiss"), 27, 52, 2157374); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float f, int x, int y) { + GL11.glColor3f(0.5f, 0.25f, 0.07f); + this.mc.getTextureManager() + .bindTexture(new ResourceLocation(MainMod.MOD_ID, "textures/GUI/GUIPrimitiveKUBox.png")); + int j = (this.width - this.xSize) / 2; + int k = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(j, k, 0, 0, this.xSize, this.ySize); + if (this.container.base.guiisoverload() && this.container.base.checkrotor()) { + this.drawTexturedModalRect(j + 44, k + 20, 176, 0, 30, 26); + this.drawTexturedModalRect(j + 102, k + 20, 176, 0, 30, 26); + } + } +} diff --git a/src/main/java/bartworks/client/renderer/BWBlockOreRenderer.java b/src/main/java/bartworks/client/renderer/BWBlockOreRenderer.java new file mode 100644 index 0000000000..781ead228e --- /dev/null +++ b/src/main/java/bartworks/client/renderer/BWBlockOreRenderer.java @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.client.renderer; + +import static gregtech.common.render.GTRendererBlock.renderNegativeXFacing; +import static gregtech.common.render.GTRendererBlock.renderNegativeYFacing; +import static gregtech.common.render.GTRendererBlock.renderNegativeZFacing; +import static gregtech.common.render.GTRendererBlock.renderPositiveXFacing; +import static gregtech.common.render.GTRendererBlock.renderPositiveYFacing; +import static gregtech.common.render.GTRendererBlock.renderPositiveZFacing; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + +import bartworks.system.material.BWMetaGeneratedBlocks; +import bartworks.system.material.TileEntityMetaGeneratedBlock; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; +import gregtech.GTMod; + +@ThreadSafeISBRH(perThread = true) +public class BWBlockOreRenderer implements ISimpleBlockRenderingHandler { + + public static BWBlockOreRenderer INSTANCE; + public static int renderID; + public static final float blockMin = 0.0F; + public static final float blockMax = 1.0F; + + public static void register() { + renderID = RenderingRegistry.getNextAvailableRenderId(); + INSTANCE = new BWBlockOreRenderer(); + RenderingRegistry.registerBlockHandler(INSTANCE); + } + + @Override + public void renderInventoryBlock(Block aBlock, int aMeta, int modelId, RenderBlocks aRenderer) { + TileEntityMetaGeneratedBlock tTileEntity = ((BWMetaGeneratedBlocks) aBlock).getProperTileEntityForRendering(); + tTileEntity.mMetaData = (short) aMeta; + aRenderer.enableAO = false; + aRenderer.useInventoryTint = true; + aBlock.setBlockBoundsForItemRender(); + aRenderer.setRenderBoundsFromBlock(aBlock); + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + renderNegativeYFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + tTileEntity.getTexture(aBlock, ForgeDirection.DOWN), + true); + renderPositiveYFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + tTileEntity.getTexture(aBlock, ForgeDirection.UP), + true); + renderNegativeZFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + tTileEntity.getTexture(aBlock, ForgeDirection.NORTH), + true); + renderPositiveZFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + tTileEntity.getTexture(aBlock, ForgeDirection.SOUTH), + true); + renderNegativeXFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + tTileEntity.getTexture(aBlock, ForgeDirection.WEST), + true); + renderPositiveXFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + tTileEntity.getTexture(aBlock, ForgeDirection.EAST), + true); + aRenderer.setRenderBoundsFromBlock(aBlock); + aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + aRenderer.useInventoryTint = false; + } + + // spotless:off + @Override + public boolean renderWorldBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, int modelId, RenderBlocks aRenderer) { + BWMetaGeneratedBlocks tBlock = (BWMetaGeneratedBlocks) aBlock; + if(tBlock == null) return false; + + TileEntityMetaGeneratedBlock fakeTileEntity = tBlock.getProperTileEntityForRendering(); // meh + if(fakeTileEntity == null) return false; + + TileEntityMetaGeneratedBlock actualTileEntity = (TileEntityMetaGeneratedBlock) aWorld.getTileEntity(aX, aY, aZ); + if(actualTileEntity == null) return false; + + fakeTileEntity.mMetaData = actualTileEntity.mMetaData; + aRenderer.useInventoryTint = false; + aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); + aRenderer.enableAO = Minecraft.isAmbientOcclusionEnabled() && GTMod.gregtechproxy.mRenderTileAmbientOcclusion; + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.DOWN), true); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.UP), true); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.NORTH), true); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.SOUTH), true); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.WEST), true); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.EAST), true); + return true; + } + // spotless:on + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return renderID; + } +} diff --git a/src/main/java/bartworks/client/renderer/BWItemRenderer.java b/src/main/java/bartworks/client/renderer/BWItemRenderer.java new file mode 100644 index 0000000000..590ffd163c --- /dev/null +++ b/src/main/java/bartworks/client/renderer/BWItemRenderer.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.client.renderer; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderItem; +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 org.lwjgl.opengl.GL11; + +import bartworks.system.material.CircuitGeneration.BWMetaItems; +import bartworks.system.material.CircuitGeneration.CircuitImprintLoader; +import bartworks.util.BWUtil; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.util.GTUtility; +import gregtech.common.render.GTRenderUtil; + +@SideOnly(Side.CLIENT) +public class BWItemRenderer implements IItemRenderer { + + public BWItemRenderer() { + for (BWMetaItems.BW_GT_MetaGen_Item_Hook tItem : BWMetaItems.BW_GT_MetaGen_Item_Hook.sInstances) { + MinecraftForgeClient.registerItemRenderer(tItem, this); + } + } + + @Override + public boolean handleRenderType(ItemStack aStack, IItemRenderer.ItemRenderType aType) { + if (!GTUtility.isStackInvalid(aStack) && aStack.getItemDamage() >= 0) { + return aType == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON + || aType == IItemRenderer.ItemRenderType.INVENTORY + || aType == IItemRenderer.ItemRenderType.EQUIPPED + || aType == IItemRenderer.ItemRenderType.ENTITY; + } + return false; + } + + @Override + public boolean shouldUseRenderHelper(IItemRenderer.ItemRenderType aType, ItemStack aStack, + IItemRenderer.ItemRendererHelper aHelper) { + if (GTUtility.isStackInvalid(aStack)) { + return false; + } + return aType == IItemRenderer.ItemRenderType.ENTITY; + } + + @Override + public void renderItem(IItemRenderer.ItemRenderType type, ItemStack aStack, Object... data) { + if (!GTUtility.isStackInvalid(aStack)) { + short aMetaData = (short) aStack.getItemDamage(); + if (aMetaData >= 0) { + BWMetaItems.BW_GT_MetaGen_Item_Hook aItem = (BWMetaItems.BW_GT_MetaGen_Item_Hook) aStack.getItem(); + GL11.glEnable(3042); + if (type == IItemRenderer.ItemRenderType.ENTITY) { + if (RenderItem.renderInFrame) { + GL11.glScalef(0.85F, 0.85F, 0.85F); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + } + GL11.glTranslated(-0.5D, -0.42D, 0.0D); + } + + GL11.glColor3f(1.0F, 1.0F, 1.0F); + IIcon tIcon = (IIcon) BWUtil.get2DCoordFrom1DArray(aMetaData, 0, 2, aItem.mIconList); + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + GL11.glBlendFunc(770, 771); + if (IItemRenderer.ItemRenderType.INVENTORY.equals(type)) { + if (aMetaData < CircuitImprintLoader.reverseIDs) + GTRenderUtil.renderItemIcon(tIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); + else { + for (int i = 0; i < 4; i++) { + GTRenderUtil.renderItemIcon( + tIcon, + 0.0D + i * 2D, + 0.0D + i * 2D, + 10.0D + i * 2D, + 10.0D + i * 2D, + 0.001D, + 0.0F, + 0.0F, + -1.0F); + } + } + } else if (aMetaData < CircuitImprintLoader.reverseIDs) ItemRenderer.renderItemIn2D( + Tessellator.instance, + tIcon.getMaxU(), + tIcon.getMinV(), + tIcon.getMinU(), + tIcon.getMaxV(), + tIcon.getIconWidth(), + tIcon.getIconHeight(), + 0.0625F); + + IIcon tOverlay = (IIcon) BWUtil.get2DCoordFrom1DArray(aMetaData, 1, 2, aItem.mIconList); + GL11.glColor3f(1.0F, 1.0F, 1.0F); + if (tOverlay != null) { + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + GL11.glBlendFunc(770, 771); + if (IItemRenderer.ItemRenderType.INVENTORY.equals(type)) { + GTRenderUtil.renderItemIcon(tOverlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); + } else { + ItemRenderer.renderItemIn2D( + Tessellator.instance, + tOverlay.getMaxU(), + tOverlay.getMinV(), + tOverlay.getMinU(), + tOverlay.getMaxV(), + tOverlay.getIconWidth(), + tOverlay.getIconHeight(), + 0.0625F); + } + } + } + + GL11.glDisable(3042); + } + } +} diff --git a/src/main/java/bartworks/client/renderer/BWVanillaTexture.java b/src/main/java/bartworks/client/renderer/BWVanillaTexture.java new file mode 100644 index 0000000000..5b5e119f5b --- /dev/null +++ b/src/main/java/bartworks/client/renderer/BWVanillaTexture.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.client.renderer; + +import net.minecraft.block.Block; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.interfaces.IIconContainer; + +@SideOnly(Side.CLIENT) +public class BWVanillaTexture implements IIconContainer { + + IIcon packed; + + public BWVanillaTexture(Block block, ForgeDirection side) { + this.packed = block.getBlockTextureFromSide(side.flag); + } + + public BWVanillaTexture(Block block, int side) { + this.packed = block.getBlockTextureFromSide(side); + } + + public BWVanillaTexture(IIcon packed) { + this.packed = packed; + } + + @Override + public IIcon getIcon() { + return this.packed; + } + + @Override + public IIcon getOverlayIcon() { + return null; + } + + @Override + public ResourceLocation getTextureFile() { + return new ResourceLocation(this.packed.getIconName()); + } +} diff --git a/src/main/java/bartworks/client/renderer/EICPistonVisualizer.java b/src/main/java/bartworks/client/renderer/EICPistonVisualizer.java new file mode 100644 index 0000000000..f56a12d718 --- /dev/null +++ b/src/main/java/bartworks/client/renderer/EICPistonVisualizer.java @@ -0,0 +1,112 @@ +package bartworks.client.renderer; + +import net.minecraft.block.Block; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import org.apache.commons.lang3.tuple.Pair; +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; + +@SideOnly(Side.CLIENT) +public class EICPistonVisualizer extends EntityFX { + + public EICPistonVisualizer(World world, int x, int y, int z, int age) { + super(world, x, y, z); + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.particleMaxAge = age; + } + + @Override + public void onUpdate() { + if (this.particleAge++ >= this.particleMaxAge) this.setDead(); + } + + @Override + public void renderParticle(Tessellator p_70539_1_, float p_70539_2_, float p_70539_3_, float p_70539_4_, + float p_70539_5_, float p_70539_6_, float p_70539_7_) { + Tessellator tessellator = Tessellator.instance; + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDepthMask(false); + + RenderBlocks.getInstance().blockAccess = this.worldObj; + RenderBlocks.getInstance() + .setRenderFromInside(false); + + // Look at nearby block for correct tiered block to use + Pair tieredBlock; + if (this.worldObj != null) { + int nX = (int) this.posX; + int nY = (int) this.posY + 1; + int nZ = (int) this.posZ; + Block neighborBlock = this.worldObj.getBlock(nX, nY, nZ); + int neighborMeta = this.worldObj.getBlockMetadata(nX, nY, nZ); + tieredBlock = Pair.of(neighborBlock, neighborMeta); + } else { + tieredBlock = Pair.of(GregTechAPI.sBlockMetal5, 2); + } + + IIcon icon = tieredBlock.getKey() + .getIcon(0, tieredBlock.getValue()); + + double x = this.posX + 1; + double z = this.posZ; + + double f11 = x - interpPosX; + double f12 = this.posY - interpPosY; + double f13 = z - interpPosZ; + tessellator.setTranslation(f11 - x, f12 - this.posY, f13 - z); + RenderBlocks.getInstance() + .renderBlockUsingTexture(tieredBlock.getKey(), (int) x, (int) this.posY, (int) z, icon); + + x = this.posX - 1; + z = this.posZ; + + f11 = x - interpPosX; + f13 = z - interpPosZ; + tessellator.setTranslation(f11 - x, f12 - this.posY, f13 - z); + RenderBlocks.getInstance() + .renderBlockUsingTexture(tieredBlock.getKey(), (int) x, (int) this.posY, (int) z, icon); + + x = this.posX; + z = this.posZ + 1; + + f11 = x - interpPosX; + f13 = z - interpPosZ; + tessellator.setTranslation(f11 - x, f12 - this.posY, f13 - z); + RenderBlocks.getInstance() + .renderBlockUsingTexture(tieredBlock.getKey(), (int) x, (int) this.posY, (int) z, icon); + + x = this.posX; + z = this.posZ - 1; + + f11 = x - interpPosX; + f13 = z - interpPosZ; + tessellator.setTranslation(f11 - x, f12 - this.posY, f13 - z); + RenderBlocks.getInstance() + .renderBlockUsingTexture(tieredBlock.getKey(), (int) x, (int) this.posY, (int) z, icon); + + tessellator.setTranslation(0d, 0d, 0d); + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDepthMask(true); + } + + @Override + public int getFXLayer() { + return 1; + } + + @Override + public boolean shouldRenderInPass(int pass) { + return pass == 2; + } +} diff --git a/src/main/java/bartworks/client/renderer/RendererGlassBlock.java b/src/main/java/bartworks/client/renderer/RendererGlassBlock.java new file mode 100644 index 0000000000..1af553ff59 --- /dev/null +++ b/src/main/java/bartworks/client/renderer/RendererGlassBlock.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.client.renderer; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.world.IBlockAccess; + +import org.lwjgl.opengl.GL11; + +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + +import bartworks.common.blocks.BWBlocksGlass; +import bartworks.common.blocks.BWBlocksGlass2; +import bartworks.common.loaders.ItemRegistry; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +@ThreadSafeISBRH(perThread = false) +public class RendererGlassBlock implements ISimpleBlockRenderingHandler { + + public static int renderID; + public static RendererGlassBlock INSTANCE; + + public static void register() { + renderID = RenderingRegistry.getNextAvailableRenderId(); + INSTANCE = new RendererGlassBlock(); + RenderingRegistry.registerBlockHandler(INSTANCE); + } + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + Tessellator tessellator = Tessellator.instance; + block.setBlockBoundsForItemRender(); + renderer.setRenderBoundsFromBlock(block); + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, -1.0F, 0.0F); + renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 0, metadata)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 1, metadata)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 0.0F, -1.0F); + renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 2, metadata)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 0.0F, 1.0F); + renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 3, metadata)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(-1.0F, 0.0F, 0.0F); + renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 4, metadata)); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(1.0F, 0.0F, 0.0F); + renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 5, metadata)); + tessellator.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + + // spotless:off + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, + RenderBlocks renderer) { + boolean flag = false; + if (block instanceof BWBlocksGlass) { + flag |= renderer.renderStandardBlock(ItemRegistry.bw_fake_glasses, x, y, z); + flag |= renderer.renderStandardBlockWithColorMultiplier(block, x, y, z, + ((BWBlocksGlass) block).getColor(world.getBlockMetadata(x, y, z))[0] / 255f, + ((BWBlocksGlass) block).getColor(world.getBlockMetadata(x, y, z))[1] / 255f, + ((BWBlocksGlass) block).getColor(world.getBlockMetadata(x, y, z))[2] / 255f); + } + if (block instanceof BWBlocksGlass2) { + flag |= renderer.renderStandardBlock(ItemRegistry.bw_fake_glasses2, x, y, z); + flag |= renderer.renderStandardBlockWithColorMultiplier(block, x, y, z, + ((BWBlocksGlass2) block).getColor(world.getBlockMetadata(x, y, z))[0] / 255f, + ((BWBlocksGlass2) block).getColor(world.getBlockMetadata(x, y, z))[1] / 255f, + ((BWBlocksGlass2) block).getColor(world.getBlockMetadata(x, y, z))[2] / 255f); + } + return flag; + } + // spotless:on + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return RendererGlassBlock.renderID; + } +} diff --git a/src/main/java/bartworks/client/renderer/RendererSwitchingColorFluid.java b/src/main/java/bartworks/client/renderer/RendererSwitchingColorFluid.java new file mode 100644 index 0000000000..ba565cc2aa --- /dev/null +++ b/src/main/java/bartworks/client/renderer/RendererSwitchingColorFluid.java @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.client.renderer; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.fluids.BlockFluidBase; +import net.minecraftforge.fluids.IFluidBlock; + +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + +import bartworks.common.blocks.BlockBioFluid; +import bartworks.common.loaders.FluidLoader; +import bartworks.common.tileentities.multis.MTEBioVat; +import bartworks.util.Coords; +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +@ThreadSafeISBRH(perThread = false) +public class RendererSwitchingColorFluid implements ISimpleBlockRenderingHandler { + + private static final float LIGHT_Y_NEG = 0.5f; + private static final float LIGHT_Y_POS = 1f; + private static final float LIGHT_XZ_NEG = 0.8f; + private static final float LIGHT_XZ_POS = 0.6f; + private static final float THREE_QUARTERS_FILLED = 0.875f; + private static final double RENDER_OFFSET = 0.0010000000474974513; + + public static RendererSwitchingColorFluid instance; + + public static void register() { + instance = new RendererSwitchingColorFluid(); + } + + private float getFluidHeightAverage(float[] flow) { + float total = 0.0f; + int count = 0; + float end = 0.0f; + for (float aFlow : flow) { + if (aFlow >= RendererSwitchingColorFluid.THREE_QUARTERS_FILLED + && end != RendererSwitchingColorFluid.LIGHT_Y_POS) { + end = aFlow; + } + if (aFlow >= 0.0f) { + total += aFlow; + ++count; + } + } + if (end == 0.0f && count != 0) { + end = total / count; + } + return end; + } + + private float getFluidHeightForRender(IBlockAccess world, int x, int y, int z, BlockFluidBase block) { + + if (world.getBlock(x, y, z) == block) { + Block vOrigin = world.getBlock(x, y + 1, z); + if (vOrigin.getMaterial() + .isLiquid() || vOrigin instanceof IFluidBlock) { + return RendererSwitchingColorFluid.LIGHT_Y_POS; + } + if (world.getBlockMetadata(x, y, z) == block.getMaxRenderHeightMeta()) { + return RendererSwitchingColorFluid.THREE_QUARTERS_FILLED; + } + } + return !world.getBlock(x, y, z) + .getMaterial() + .isSolid() && world.getBlock(x, y + 1, z) == block ? RendererSwitchingColorFluid.LIGHT_Y_POS + : block.getQuantaPercentage(world, x, y, z) * RendererSwitchingColorFluid.THREE_QUARTERS_FILLED; + } + + public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) {} + + @SideOnly(Side.CLIENT) + public boolean renderWorldBlock(IBlockAccess iBlockAccess, int x, int y, int z, Block block, int modelId, + RenderBlocks renderer) { + if (!(block instanceof BlockBioFluid)) return false; + Tessellator tessellator = Tessellator.instance; + Coords blockat = new Coords( + x, + y, + z, + iBlockAccess.getTileEntity(x, y, z) + .getWorldObj().provider.dimensionId); + Integer rgb = MTEBioVat.staticColorMap.get(blockat); + + int r, g, b; + + if (rgb != null) { + r = rgb >> 16 & 0xFF; + g = rgb >> 8 & 0xFF; + b = rgb & 0xFF; + } else { + r = 0; + g = 0; + b = 255; + } + float red = r / 255f, green = g / 255f, blue = b / 255f; + + BlockFluidBase blockFluidBase = (BlockFluidBase) block; + boolean renderTop = iBlockAccess.getBlock(x, y + 1, z) != blockFluidBase; + boolean renderBottom = block.shouldSideBeRendered(iBlockAccess, x, y - 1, z, 0) + && iBlockAccess.getBlock(x, y - 1, z) != blockFluidBase; + boolean[] renderSides = { block.shouldSideBeRendered(iBlockAccess, x, y, z - 1, 2), + block.shouldSideBeRendered(iBlockAccess, x, y, z + 1, 3), + block.shouldSideBeRendered(iBlockAccess, x - 1, y, z, 4), + block.shouldSideBeRendered(iBlockAccess, x + 1, y, z, 5) }; + if (!renderTop && !renderBottom && !renderSides[0] && !renderSides[1] && !renderSides[2] && !renderSides[3]) { + return false; + } + boolean rendered = false; + float fluidHeightForRender = this.getFluidHeightForRender(iBlockAccess, x, y, z, blockFluidBase); + double heightNW, heightSW, heightSE, heightNE; + + if (fluidHeightForRender != RendererSwitchingColorFluid.LIGHT_Y_POS) { + float fluidHeightForRender1 = this.getFluidHeightForRender(iBlockAccess, x - 1, y, z - 1, blockFluidBase); + float fluidHeightForRender2 = this.getFluidHeightForRender(iBlockAccess, x - 1, y, z, blockFluidBase); + float fluidHeightForRender3 = this.getFluidHeightForRender(iBlockAccess, x - 1, y, z + 1, blockFluidBase); + float fluidHeightForRender4 = this.getFluidHeightForRender(iBlockAccess, x, y, z - 1, blockFluidBase); + float fluidHeightForRender5 = this.getFluidHeightForRender(iBlockAccess, x, y, z + 1, blockFluidBase); + float fluidHeightForRender6 = this.getFluidHeightForRender(iBlockAccess, x + 1, y, z - 1, blockFluidBase); + float fluidHeightForRender7 = this.getFluidHeightForRender(iBlockAccess, x + 1, y, z, blockFluidBase); + float fluidHeightForRender8 = this.getFluidHeightForRender(iBlockAccess, x + 1, y, z + 1, blockFluidBase); + heightNW = this.getFluidHeightAverage( + new float[] { fluidHeightForRender1, fluidHeightForRender2, fluidHeightForRender4, + fluidHeightForRender }); + heightSW = this.getFluidHeightAverage( + new float[] { fluidHeightForRender2, fluidHeightForRender3, fluidHeightForRender5, + fluidHeightForRender }); + heightSE = this.getFluidHeightAverage( + new float[] { fluidHeightForRender5, fluidHeightForRender7, fluidHeightForRender8, + fluidHeightForRender }); + heightNE = this.getFluidHeightAverage( + new float[] { fluidHeightForRender4, fluidHeightForRender6, fluidHeightForRender7, + fluidHeightForRender }); + } else { + heightNW = fluidHeightForRender; + heightSW = fluidHeightForRender; + heightSE = fluidHeightForRender; + heightNE = fluidHeightForRender; + } + + if (renderer.renderAllFaces || renderTop) { + rendered = true; + IIcon iconStill = this.getNullCheckedIiconOrFallbackTexture(); + float flowDir = (float) BlockFluidBase.getFlowDirection(iBlockAccess, x, y, z); + + heightNW -= RendererSwitchingColorFluid.RENDER_OFFSET; + heightSW -= RendererSwitchingColorFluid.RENDER_OFFSET; + heightSE -= RendererSwitchingColorFluid.RENDER_OFFSET; + heightNE -= RendererSwitchingColorFluid.RENDER_OFFSET; + + double dInterpolatedU, dInterpolatedV, dInterpolatedU2, dInterpolatedV2, dInterpolatedU3, dInterpolatedV3, + dInterpolatedU4, dInterpolatedV4; + + if (flowDir < -999.0f) { + dInterpolatedU = iconStill.getInterpolatedU(0.0); + dInterpolatedV = iconStill.getInterpolatedV(0.0); + dInterpolatedU2 = dInterpolatedU; + dInterpolatedV2 = iconStill.getInterpolatedV(16.0); + dInterpolatedU3 = iconStill.getInterpolatedU(16.0); + dInterpolatedV3 = dInterpolatedV2; + dInterpolatedU4 = dInterpolatedU3; + dInterpolatedV4 = dInterpolatedV; + } else { + float xFlow = MathHelper.sin(flowDir) * 0.25f, zFlow = MathHelper.cos(flowDir) * 0.25f; + dInterpolatedU = iconStill.getInterpolatedU(8.0f + (-zFlow - xFlow) * 16.0f); + dInterpolatedV = iconStill.getInterpolatedV(8.0f + (-zFlow + xFlow) * 16.0f); + dInterpolatedU2 = iconStill.getInterpolatedU(8.0f + (-zFlow + xFlow) * 16.0f); + dInterpolatedV2 = iconStill.getInterpolatedV(8.0f + (zFlow + xFlow) * 16.0f); + dInterpolatedU3 = iconStill.getInterpolatedU(8.0f + (zFlow + xFlow) * 16.0f); + dInterpolatedV3 = iconStill.getInterpolatedV(8.0f + (zFlow - xFlow) * 16.0f); + dInterpolatedU4 = iconStill.getInterpolatedU(8.0f + (zFlow - xFlow) * 16.0f); + dInterpolatedV4 = iconStill.getInterpolatedV(8.0f + (-zFlow - xFlow) * 16.0f); + } + + tessellator.setBrightness(block.getMixedBrightnessForBlock(iBlockAccess, x, y, z)); + tessellator.setColorOpaque_F( + RendererSwitchingColorFluid.LIGHT_Y_POS * red, + RendererSwitchingColorFluid.LIGHT_Y_POS * green, + RendererSwitchingColorFluid.LIGHT_Y_POS * blue); + + tessellator.addVertexWithUV(x, y + heightNW, z, dInterpolatedU, dInterpolatedV); + tessellator.addVertexWithUV(x, y + heightSW, z + 1, dInterpolatedU2, dInterpolatedV2); + tessellator.addVertexWithUV(x + 1, y + heightSE, z + 1, dInterpolatedU3, dInterpolatedV3); + tessellator.addVertexWithUV(x + 1, y + heightNE, z, dInterpolatedU4, dInterpolatedV4); + tessellator.addVertexWithUV(x, y + heightNW, z, dInterpolatedU, dInterpolatedV); + tessellator.addVertexWithUV(x + 1, y + heightNE, z, dInterpolatedU4, dInterpolatedV4); + tessellator.addVertexWithUV(x + 1, y + heightSE, z + 1, dInterpolatedU3, dInterpolatedV3); + tessellator.addVertexWithUV(x, y + heightSW, z + 1, dInterpolatedU2, dInterpolatedV2); + } + + if (renderer.renderAllFaces || renderBottom) { + rendered = true; + tessellator.setBrightness(block.getMixedBrightnessForBlock(iBlockAccess, x, y - 1, z)); + tessellator.setColorOpaque_F( + RendererSwitchingColorFluid.LIGHT_Y_NEG * red, + RendererSwitchingColorFluid.LIGHT_Y_NEG * green, + RendererSwitchingColorFluid.LIGHT_Y_NEG * blue); + renderer.renderFaceYNeg( + block, + x, + y + RendererSwitchingColorFluid.RENDER_OFFSET, + z, + this.getNullCheckedIiconOrFallbackTexture()); + } + + for (int side = 0; side < 4; ++side) { + int x2 = x, z2 = z; + + switch (side) { + case 0: + --z2; + break; + case 1: + ++z2; + break; + case 2: + --x2; + break; + case 3: + ++x2; + break; + default: + break; + } + + IIcon iconFlow = this.getNullCheckedIiconOrFallbackTexture(); + + if (renderer.renderAllFaces || renderSides[side]) { + rendered = true; + double dHeight1, dHeight2, dXcoord1, dXcoord2, dZcoord1, dZcoord2; + dZcoord2 = switch (side) { + case 0 -> { + dHeight1 = heightNW; + dHeight2 = heightNE; + dXcoord1 = x; + dXcoord2 = x + 1; + dZcoord1 = z + RendererSwitchingColorFluid.RENDER_OFFSET; + yield z + RendererSwitchingColorFluid.RENDER_OFFSET; + } + case 1 -> { + dHeight1 = heightSE; + dHeight2 = heightSW; + dXcoord1 = x + 1; + dXcoord2 = x; + dZcoord1 = z + 1 - RendererSwitchingColorFluid.RENDER_OFFSET; + yield z + 1 - RendererSwitchingColorFluid.RENDER_OFFSET; + } + case 2 -> { + dHeight1 = heightSW; + dHeight2 = heightNW; + dXcoord1 = x + RendererSwitchingColorFluid.RENDER_OFFSET; + dXcoord2 = x + RendererSwitchingColorFluid.RENDER_OFFSET; + dZcoord1 = z + 1; + yield z; + } + default -> { + dHeight1 = heightNE; + dHeight2 = heightSE; + dXcoord1 = x + 1 - RendererSwitchingColorFluid.RENDER_OFFSET; + dXcoord2 = x + 1 - RendererSwitchingColorFluid.RENDER_OFFSET; + dZcoord1 = z; + yield z + 1; + } + }; + float u1Flow = iconFlow.getInterpolatedU(0.0); + float u2Flow = iconFlow.getInterpolatedU(8.0); + float v1Flow = iconFlow.getInterpolatedV((1.0 - dHeight1) * 16.0 * 0.5); + float v2Flow = iconFlow.getInterpolatedV((1.0 - dHeight2) * 16.0 * 0.5); + float v3Flow = iconFlow.getInterpolatedV(8.0); + tessellator.setBrightness(block.getMixedBrightnessForBlock(iBlockAccess, x2, y, z2)); + float sideLighting; + if (side < 2) { + sideLighting = RendererSwitchingColorFluid.LIGHT_XZ_NEG; + } else { + sideLighting = RendererSwitchingColorFluid.LIGHT_XZ_POS; + } + tessellator.setColorOpaque_F( + RendererSwitchingColorFluid.LIGHT_Y_POS * sideLighting * red, + RendererSwitchingColorFluid.LIGHT_Y_POS * sideLighting * green, + RendererSwitchingColorFluid.LIGHT_Y_POS * sideLighting * blue); + + tessellator.addVertexWithUV(dXcoord1, y + dHeight1, dZcoord1, u1Flow, v1Flow); + tessellator.addVertexWithUV(dXcoord2, y + dHeight2, dZcoord2, u2Flow, v2Flow); + tessellator.addVertexWithUV(dXcoord2, y, dZcoord2, u2Flow, v3Flow); + tessellator.addVertexWithUV(dXcoord1, y, dZcoord1, u1Flow, v3Flow); + tessellator.addVertexWithUV(dXcoord1, y + dHeight1, dZcoord1, u1Flow, v1Flow); + tessellator.addVertexWithUV(dXcoord1, y, dZcoord1, u1Flow, v3Flow); + tessellator.addVertexWithUV(dXcoord2, y, dZcoord2, u2Flow, v3Flow); + tessellator.addVertexWithUV(dXcoord2, y + dHeight2, dZcoord2, u2Flow, v2Flow); + } + } + renderer.renderMinY = 0.0; + renderer.renderMaxY = 1.0; + return rendered; + } + + public boolean shouldRender3DInInventory(int modelId) { + return false; + } + + public int getRenderId() { + return FluidLoader.renderID; + } + + private IIcon getNullCheckedIiconOrFallbackTexture() { + return FluidLoader.autogenIIcon != null ? FluidLoader.autogenIIcon + : ((TextureMap) Minecraft.getMinecraft() + .getTextureManager() + .getTexture(TextureMap.locationBlocksTexture)).getAtlasSprite("missingno"); + } +} diff --git a/src/main/java/bartworks/client/textures/PrefixTextureLinker.java b/src/main/java/bartworks/client/textures/PrefixTextureLinker.java new file mode 100644 index 0000000000..d406a994e4 --- /dev/null +++ b/src/main/java/bartworks/client/textures/PrefixTextureLinker.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.client.textures; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Stream; + +import bartworks.system.material.Werkstoff; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TextureSet; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; + +@SideOnly(Side.CLIENT) +public class PrefixTextureLinker implements Runnable { + + public static Map> texMap = new HashMap<>(); + public static Map> texMapBlocks = new HashMap<>(); + public static Map blockTexMap = new HashMap<>(); + + private static void fillBlockTexMap() { + blockTexMap.put(TextureSet.SET_QUARTZ, TextureSet.INDEX_block4); + Stream.of(OrePrefixes.blockCasing, OrePrefixes.blockCasingAdvanced) + .forEach(prefixes -> { + HashMap curr = new HashMap<>(); + Arrays.stream(TextureSet.class.getFields()) + .filter( + field -> field.getName() + .contains("SET")) + .forEach(SET -> { + try { + curr.put( + (TextureSet) SET.get(null), + new Textures.BlockIcons.CustomIcon( + "materialicons/" + SET.getName() + .substring(4) + "/" + prefixes)); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + }); + texMapBlocks.put(prefixes, curr); + }); + } + + private static void fillItemTexMap() { + Arrays.stream(OrePrefixes.values()) + .filter( + prefixes -> prefixes != OrePrefixes.rod && prefixes.mTextureIndex == -1 + && Werkstoff.GenerationFeatures.getPrefixDataRaw(prefixes) != 0) + .forEach(prefixes -> { + HashMap curr = new HashMap<>(); + Arrays.stream(TextureSet.class.getFields()) + .filter( + field -> field.getName() + .contains("SET")) + .forEach(SET -> { + try { + curr.put( + (TextureSet) SET.get(null), + new Textures.ItemIcons.CustomIcon( + "materialicons/" + SET.getName() + .substring(4) + "/" + prefixes)); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + }); + texMap.put(prefixes, curr); + }); + } + + @Override + public void run() { + fillItemTexMap(); + fillBlockTexMap(); + } +} diff --git a/src/main/java/bartworks/common/blocks/BWBlocks.java b/src/main/java/bartworks/common/blocks/BWBlocks.java new file mode 100644 index 0000000000..84d4a2f942 --- /dev/null +++ b/src/main/java/bartworks/common/blocks/BWBlocks.java @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import bartworks.MainMod; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; + +public class BWBlocks extends Block { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture; + + String[] textureNames; + protected String name; + + public BWBlocks(String name, String[] texture) { + super(Material.anvil); + this.setHardness(15.0F); + this.setResistance(30.0F); + this.name = name; + this.textureNames = texture; + this.setCreativeTab(MainMod.GT2); + GregTechAPI.registerMachineBlock(this, -1); + } + + public BWBlocks(String name, String[] texture, CreativeTabs tabs) { + super(Material.anvil); + this.setHardness(15.0F); + this.setResistance(30.0F); + this.name = name; + this.textureNames = texture; + this.setCreativeTab(tabs); + GregTechAPI.registerMachineBlock(this, -1); + } + + public BWBlocks(String name, String[] texture, CreativeTabs tabs, Material material) { + super(material); + this.setHardness(15.0F); + this.setResistance(30.0F); + this.name = name; + this.textureNames = texture; + this.setCreativeTab(tabs); + GregTechAPI.registerMachineBlock(this, -1); + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < this.textureNames.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + } + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTechAPI.isMachineBlock(this, aMetaData)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public String getUnlocalizedName() { + return this.name; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return false; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } +} diff --git a/src/main/java/bartworks/common/blocks/BWBlocksGlass.java b/src/main/java/bartworks/common/blocks/BWBlocksGlass.java new file mode 100644 index 0000000000..be3ffbf07e --- /dev/null +++ b/src/main/java/bartworks/common/blocks/BWBlocksGlass.java @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.blocks; + +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import bartworks.API.SideReference; +import bartworks.client.renderer.RendererGlassBlock; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BWBlocksGlass extends BWBlocks { + + @SideOnly(Side.CLIENT) + private IIcon[] connectedTexture; + + private final boolean connectedTex; + private boolean fake; + private short[][] color = new short[this.textureNames.length][3]; + + public BWBlocksGlass(String name, String[] texture, CreativeTabs tabs) { + super(name, texture, tabs, Material.glass); + this.connectedTex = false; + } + + public BWBlocksGlass(String name, String[] texture, short[][] color, CreativeTabs tabs, boolean connectedTex, + boolean fake) { + super(name, texture, tabs, Material.glass); + this.connectedTex = connectedTex; + this.color = color; + this.fake = fake; + } + + public short[] getColor(int meta) { + return meta < this.texture.length ? this.color[meta] : this.color[0]; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { + if (worldClient.getBlock(xCoord, yCoord, zCoord) instanceof BWBlocksGlass) return false; + return super.shouldSideBeRendered(worldClient, xCoord, yCoord, zCoord, aSide); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + if (!this.connectedTex) { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + } + return; + } + this.texture = new IIcon[this.textureNames.length]; + this.connectedTexture = new IIcon[16]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + String[] splitname = this.textureNames[0].split(":"); + for (int j = 0; j < 16; j++) { + this.connectedTexture[j] = par1IconRegister + .registerIcon(splitname[0] + ":connectedTex/" + splitname[1] + '/' + splitname[1] + '_' + j); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { + if (!this.connectedTex) return super.getIcon(worldClient, xCoord, yCoord, zCoord, aSide); + + ForgeDirection dir = ForgeDirection.getOrientation(aSide); + byte sides = 0; + switch (dir) { + case UP: + case DOWN: { + if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0001); + if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0010); + if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0100); + if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b1000); + break; + } + case EAST: { + if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0001); + if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0010); + if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0100); + if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b1000); + break; + } + case WEST: { + if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0001); + if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0010); + if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0100); + if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b1000); + break; + } + case NORTH: { + if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0001); + if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0010); + if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0100); + if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b1000); + break; + } + case SOUTH: { + if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0001); + if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0010); + if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b0100); + if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BWBlocksGlass) + sides = (byte) (sides | 0b1000); + break; + } + case UNKNOWN: + default: { + break; + } + } + return this.connectedTexture[sides]; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public int getRenderType() { + if (!this.fake && SideReference.Side.Client) return RendererGlassBlock.renderID; + return 0; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + protected boolean canSilkHarvest() { + return false; + } +} diff --git a/src/main/java/bartworks/common/blocks/BWBlocksGlass2.java b/src/main/java/bartworks/common/blocks/BWBlocksGlass2.java new file mode 100644 index 0000000000..4c0d928049 --- /dev/null +++ b/src/main/java/bartworks/common/blocks/BWBlocksGlass2.java @@ -0,0 +1,179 @@ +package bartworks.common.blocks; + +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import bartworks.API.SideReference; +import bartworks.client.renderer.RendererGlassBlock; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BWBlocksGlass2 extends BWBlocks { + + @SideOnly(Side.CLIENT) + private IIcon[] connectedTexture; + + private final boolean connectedTex; + private boolean fake; + private short[][] color = new short[this.textureNames.length][3]; + + public BWBlocksGlass2(String name, String[] texture, CreativeTabs tabs) { + super(name, texture, tabs, Material.glass); + this.connectedTex = false; + } + + public BWBlocksGlass2(String name, String[] texture, short[][] color, CreativeTabs tabs, boolean connectedTex, + boolean fake) { + super(name, texture, tabs, Material.glass); + this.connectedTex = connectedTex; + this.color = color; + this.fake = fake; + } + + public short[] getColor(int meta) { + return meta < this.texture.length ? this.color[meta] : this.color[0]; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { + if (worldClient.getBlock(xCoord, yCoord, zCoord) instanceof BWBlocksGlass2) return false; + return super.shouldSideBeRendered(worldClient, xCoord, yCoord, zCoord, aSide); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + if (!this.connectedTex) { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + } + return; + } + this.texture = new IIcon[this.textureNames.length]; + this.connectedTexture = new IIcon[16]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + String[] splitname = this.textureNames[0].split(":"); + for (int j = 0; j < 16; j++) { + this.connectedTexture[j] = par1IconRegister.registerIcon( + splitname[0] + ":connectedTex/" + + "BoronSilicateGlassBlock" + + '/' + + "BoronSilicateGlassBlock" + + '_' + + j); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { + if (!this.connectedTex) return super.getIcon(worldClient, xCoord, yCoord, zCoord, aSide); + + ForgeDirection dir = ForgeDirection.getOrientation(aSide); + byte sides = 0; + switch (dir) { + case UP: + case DOWN: { + if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0001); + if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0010); + if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0100); + if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b1000); + break; + } + case EAST: { + if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0001); + if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0010); + if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0100); + if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b1000); + break; + } + case WEST: { + if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0001); + if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0010); + if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0100); + if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b1000); + break; + } + case NORTH: { + if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0001); + if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0010); + if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0100); + if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b1000); + break; + } + case SOUTH: { + if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0001); + if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0010); + if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b0100); + if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BWBlocksGlass2) + sides = (byte) (sides | 0b1000); + break; + } + case UNKNOWN: + default: { + break; + } + } + return this.connectedTexture[sides]; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public int getRenderType() { + if (!this.fake && SideReference.Side.Client) return RendererGlassBlock.renderID; + return 0; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + protected boolean canSilkHarvest() { + return false; + } +} diff --git a/src/main/java/bartworks/common/blocks/BWMachineBlockContainer.java b/src/main/java/bartworks/common/blocks/BWMachineBlockContainer.java new file mode 100644 index 0000000000..1c652a0984 --- /dev/null +++ b/src/main/java/bartworks/common/blocks/BWMachineBlockContainer.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import gregtech.api.GregTechAPI; + +public class BWMachineBlockContainer extends BWTileEntityContainer { + + public BWMachineBlockContainer(Material p_i45386_1_, Class tileEntity, String blockName) { + super(p_i45386_1_, tileEntity, blockName); + GregTechAPI.registerMachineBlock(this, -1); + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTechAPI.isMachineBlock(this, aMetaData)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } +} diff --git a/src/main/java/bartworks/common/blocks/BWMultipleTileEntityContainer.java b/src/main/java/bartworks/common/blocks/BWMultipleTileEntityContainer.java new file mode 100644 index 0000000000..ad7bbcf5c9 --- /dev/null +++ b/src/main/java/bartworks/common/blocks/BWMultipleTileEntityContainer.java @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.blocks; + +import java.util.List; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +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.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import com.gtnewhorizons.modularui.api.UIInfos; +import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; + +import bartworks.MainMod; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ic2.api.tile.IWrenchable; +import ic2.core.IC2; +import ic2.core.IHasGui; + +public class BWMultipleTileEntityContainer extends BlockContainer { + + protected final String[] textureNames; + protected final String name; + protected final Class[] tileEntityArray; + + @SideOnly(Side.CLIENT) + protected IIcon[] texture; + + public BWMultipleTileEntityContainer(Material p_i45386_1_, Class[] tileEntity, + String blockName, String[] textureNames, CreativeTabs tabs) { + super(p_i45386_1_); + this.setHardness(15.0F); + this.setResistance(30.0F); + this.tileEntityArray = tileEntity; + this.name = blockName; + this.textureNames = textureNames; + this.setCreativeTab(tabs); + this.setBlockName(blockName); + this.setBlockTextureName(MainMod.MOD_ID + ":" + blockName); + } + + @Override + public boolean onBlockActivated(World worldObj, int x, int y, int z, EntityPlayer player, int side, float subX, + float subY, float subZ) { + if (worldObj.isRemote) { + return true; + } + if (!player.isSneaking()) { + TileEntity tile = worldObj.getTileEntity(x, y, z); + if (tile instanceof IHasGui) { + return worldObj.isRemote || IC2.platform.launchGui(player, (IHasGui) tile); + } + if (tile instanceof ITileWithModularUI && !worldObj.isRemote) { + UIInfos.TILE_MODULAR_UI.open(player, worldObj, x, y, z); + } + } + + return false; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack itemStack) { + TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof IWrenchable tile2 && itemStack != null) { + int meta = itemStack.getItemDamage(); + world.setBlockMetadataWithNotify(x, y, z, meta, 2); + if (entity != null) { + int face = MathHelper.floor_double(entity.rotationYaw * 4.0f / 360.0f + 0.5) & 0x3; + switch (face) { + case 0: + tile2.setFacing((short) 2); + break; + case 1: + tile2.setFacing((short) 5); + break; + case 2: + tile2.setFacing((short) 3); + break; + case 3: + tile2.setFacing((short) 4); + break; + } + } + } + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < this.textureNames.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + } + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return false; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + try { + return this.tileEntityArray[meta].getConstructor() + .newInstance(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/src/main/java/bartworks/common/blocks/BWTileEntityContainer.java b/src/main/java/bartworks/common/blocks/BWTileEntityContainer.java new file mode 100644 index 0000000000..2a699f8340 --- /dev/null +++ b/src/main/java/bartworks/common/blocks/BWTileEntityContainer.java @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.blocks; + +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.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fluids.IFluidContainerItem; + +import com.gtnewhorizons.modularui.api.UIInfos; +import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; + +import bartworks.API.ITileAddsInformation; +import bartworks.API.ITileDropsContent; +import bartworks.API.ITileHasDifferentTextureSides; +import bartworks.MainMod; +import bartworks.common.tileentities.classic.TileEntityHeatedWaterPump; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ic2.api.tile.IWrenchable; +import ic2.core.IC2; +import ic2.core.IHasGui; + +public class BWTileEntityContainer extends BlockContainer implements ITileAddsInformation { + + protected Class tileEntity; + + public BWTileEntityContainer(Material p_i45386_1_, Class tileEntity, String blockName) { + super(p_i45386_1_); + this.tileEntity = tileEntity; + this.setHardness(15.0F); + this.setResistance(30.0F); + this.setCreativeTab(MainMod.BWT); + this.setBlockName(blockName); + this.setBlockTextureName(MainMod.MOD_ID + ":" + blockName); + } + + @Override + public boolean onBlockActivated(World worldObj, int x, int y, int z, EntityPlayer player, int side, float subX, + float subY, float subZ) { + if (worldObj.isRemote) { + return false; + } + TileEntity tile = worldObj.getTileEntity(x, y, z); + if (tile instanceof TileEntityHeatedWaterPump) { + if (player.getHeldItem() != null && (player.getHeldItem() + .getItem() + .equals(Items.bucket) + || player.getHeldItem() + .getItem() instanceof IFluidContainerItem) + && ((TileEntityHeatedWaterPump) tile).drain(1000, false) != null) + if (player.getHeldItem() + .getItem() + .equals(Items.bucket) && ((TileEntityHeatedWaterPump) tile).drain(1000, false).amount == 1000) { + ((TileEntityHeatedWaterPump) tile).drain(1000, true); + player.getHeldItem().stackSize--; + if (player.getHeldItem().stackSize <= 0) + player.inventory.setInventorySlotContents(player.inventory.currentItem, null); + player.inventory.addItemStackToInventory(new ItemStack(Items.water_bucket)); + return true; + } + } + if (!player.isSneaking()) { + if (tile instanceof IHasGui) { + return worldObj.isRemote || IC2.platform.launchGui(player, (IHasGui) tile); + } + if (tile instanceof ITileWithModularUI) { + if (!worldObj.isRemote) { + UIInfos.TILE_MODULAR_UI.open(player, worldObj, x, y, z); + } + return true; + } + } + return false; + } + + @Override + public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack itemStack) { + TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof IWrenchable tile2 && itemStack != null) { + int meta = itemStack.getItemDamage(); + world.setBlockMetadataWithNotify(x, y, z, meta, 2); + if (entity != null) { + int face = MathHelper.floor_double(entity.rotationYaw * 4.0f / 360.0f + 0.5) & 0x3; + switch (face) { + case 0: + tile2.setFacing((short) 2); + break; + case 1: + tile2.setFacing((short) 5); + break; + case 2: + tile2.setFacing((short) 3); + break; + case 3: + tile2.setFacing((short) 4); + break; + } + } + } + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + TileEntity t = world.getTileEntity(x, y, z); + if (t instanceof ITileDropsContent) { + int[] dropSlots = ((ITileDropsContent) t).getDropSlots(); + for (int dropSlot : dropSlots) { + if (((ITileDropsContent) t).getStackInSlot(dropSlot) != null) world.spawnEntityInWorld( + new EntityItem(world, x, y, z, ((TileEntityHeatedWaterPump) t).getStackInSlot(dropSlot))); + } + } + super.breakBlock(world, x, y, z, block, meta); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + if (!ITileHasDifferentTextureSides.class.isAssignableFrom(this.tileEntity)) return super.getIcon(side, meta); + try { + return ((ITileHasDifferentTextureSides) this.tileEntity.getConstructor() + .newInstance()).getTextureForSide(side, meta); + } catch (Exception e) { + e.printStackTrace(); + return super.getIcon(side, meta); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + if (ITileHasDifferentTextureSides.class.isAssignableFrom(this.tileEntity)) { + try { + ((ITileHasDifferentTextureSides) this.tileEntity.getConstructor() + .newInstance()).registerBlockIcons(par1IconRegister); + } catch (Exception e) { + e.printStackTrace(); + } + } else super.registerBlockIcons(par1IconRegister); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + try { + return this.tileEntity.getConstructor() + .newInstance(); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return false; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public String[] getInfoData() { + if (ITileAddsInformation.class.isAssignableFrom(this.tileEntity)) { + try { + return ((ITileAddsInformation) this.tileEntity.getConstructor() + .newInstance()).getInfoData(); + } catch (Exception e) { + e.printStackTrace(); + } + } + return new String[0]; + } +} diff --git a/src/main/java/bartworks/common/blocks/BlockBioFluid.java b/src/main/java/bartworks/common/blocks/BlockBioFluid.java new file mode 100644 index 0000000000..df18ed4a9d --- /dev/null +++ b/src/main/java/bartworks/common/blocks/BlockBioFluid.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.blocks; + +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.fluids.BlockFluidBase; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.common.loaders.FluidLoader; +import bartworks.common.tileentities.classic.TileEntityDimIDBridge; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BlockBioFluid extends BlockFluidBase implements ITileEntityProvider { + + public BlockBioFluid() { + super(FluidLoader.ff, Material.water); + this.setBlockName("BioFluidBlock"); + // this.setCreativeTab(MainMod.BioTab); + this.textureName = "gregtech:fluids/fluid.molten.autogenerated"; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + FluidLoader.autogenIIcon = this.blockIcon = reg.registerIcon(this.getTextureName()); + } + + @Override + public int getQuantaValue(IBlockAccess world, int x, int y, int z) { + return 0; + } + + @Override + public boolean canCollideCheck(int meta, boolean fullHit) { + return false; + } + + @Override + public int getMaxRenderHeightMeta() { + return 0; + } + + @Override + public int getRenderType() { + return FluidLoader.renderID; + } + + @Override + public FluidStack drain(World world, int x, int y, int z, boolean doDrain) { + return null; + } + + @Override + public boolean canDrain(World world, int x, int y, int z) { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess worldIn, int x, int y, int z, int side) { + return FluidLoader.autogenIIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return FluidLoader.autogenIIcon; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + return new TileEntityDimIDBridge(); + } +} diff --git a/src/main/java/bartworks/common/commands/ChangeConfig.java b/src/main/java/bartworks/common/commands/ChangeConfig.java new file mode 100644 index 0000000000..8e7edc765f --- /dev/null +++ b/src/main/java/bartworks/common/commands/ChangeConfig.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.commands; + +import java.lang.reflect.Field; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; + +import bartworks.common.configs.ConfigHandler; + +public class ChangeConfig extends CommandBase { + + @Override + public String getCommandName() { + return "bwcfg"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "bwcfg "; + } + + @Override + @SuppressWarnings("rawtypes") + public void processCommand(ICommandSender sender, String[] args) { + try { + Field f = ConfigHandler.class.getField(args[0]); + Class c = f.getType(); + if (c.equals(int.class)) { + int l; + try { + l = Integer.parseInt(args[1]); + } catch (NumberFormatException e) { + sender.addChatMessage(new ChatComponentText("you need to enter a number!")); + return; + } + f.setInt(null, l); + } else if (c.equals(long.class)) { + long l; + try { + l = Long.parseLong(args[1]); + } catch (NumberFormatException e) { + sender.addChatMessage(new ChatComponentText("you need to enter a number!")); + return; + } + f.setLong(null, l); + } else if (c.equals(boolean.class)) { + if ("true".equalsIgnoreCase(args[1]) || "1".equalsIgnoreCase(args[1])) f.setBoolean(null, true); + else if ("false".equalsIgnoreCase(args[1]) || "0".equalsIgnoreCase(args[1])) f.setBoolean(null, false); + else { + sender.addChatMessage(new ChatComponentText("booleans need to be set to true or false")); + } + } + sender.addChatMessage(new ChatComponentText("Set " + args[0] + " to " + args[1])); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/bartworks/common/commands/ClearCraftingCache.java b/src/main/java/bartworks/common/commands/ClearCraftingCache.java new file mode 100644 index 0000000000..9e164d12f7 --- /dev/null +++ b/src/main/java/bartworks/common/commands/ClearCraftingCache.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.commands; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; + +import bartworks.ASM.BWCoreStaticReplacementMethodes; + +public class ClearCraftingCache extends CommandBase { + + @Override + public String getCommandName() { + return "bwclr"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "bwclr"; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + BWCoreStaticReplacementMethodes.clearRecentlyUsedRecipes(); + sender.addChatMessage(new ChatComponentText("Recipe Cache cleared ")); + } +} diff --git a/src/main/java/bartworks/common/commands/GetWorkingDirectory.java b/src/main/java/bartworks/common/commands/GetWorkingDirectory.java new file mode 100644 index 0000000000..b52e067dea --- /dev/null +++ b/src/main/java/bartworks/common/commands/GetWorkingDirectory.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.commands; + +import net.minecraft.client.Minecraft; +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; + +public class GetWorkingDirectory extends CommandBase { + + @Override + public String getCommandName() { + return "bwgwd"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "bwgwd"; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + sender.addChatMessage(new ChatComponentText(Minecraft.getMinecraft().mcDataDir.getAbsolutePath())); + } +} diff --git a/src/main/java/bartworks/common/commands/PrintRecipeListToFile.java b/src/main/java/bartworks/common/commands/PrintRecipeListToFile.java new file mode 100644 index 0000000000..05ed514cbf --- /dev/null +++ b/src/main/java/bartworks/common/commands/PrintRecipeListToFile.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.commands; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.item.crafting.CraftingManager; + +public class PrintRecipeListToFile extends CommandBase { + + @Override + public String getCommandName() { + return "prltf"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "prltf "; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + File file = new File(args[0]); + try { + + BufferedWriter fw = new BufferedWriter(new FileWriter(file)); + CraftingManager.getInstance() + .getRecipeList() + .forEach(e -> { + try { + fw.write( + e.toString() + " = " + + e.getRecipeOutput() + .getDisplayName() + + "\n"); + } catch (IOException ex) { + ex.printStackTrace(); + } + }); + fw.flush(); + fw.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/bartworks/common/commands/RunGC.java b/src/main/java/bartworks/common/commands/RunGC.java new file mode 100644 index 0000000000..079e4083d8 --- /dev/null +++ b/src/main/java/bartworks/common/commands/RunGC.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.commands; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; + +public class RunGC extends CommandBase { + + @Override + public String getCommandName() { + return "bwgc"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "bwgc"; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + Runtime.getRuntime() + .gc(); + sender.addChatMessage(new ChatComponentText("Ran GC!")); + } +} diff --git a/src/main/java/bartworks/common/commands/SummonRuin.java b/src/main/java/bartworks/common/commands/SummonRuin.java new file mode 100644 index 0000000000..c531c8f1f4 --- /dev/null +++ b/src/main/java/bartworks/common/commands/SummonRuin.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.commands; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; + +import bartworks.system.worldgen.MapGenRuins; + +public class SummonRuin extends CommandBase { + + @Override + public String getCommandName() { + return "SummonRuin"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "SummonRuin "; + } + + @Override + public void processCommand(ICommandSender iCommandSender, String[] args) { + try { + new MapGenRuins.RuinsBase().generate( + iCommandSender.getEntityWorld(), + iCommandSender.getEntityWorld().rand, + Integer.parseInt(args[0]), + 256, + Integer.parseInt(args[1])); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/bartworks/common/configs/ConfigHandler.java b/src/main/java/bartworks/common/configs/ConfigHandler.java new file mode 100644 index 0000000000..e378819ad1 --- /dev/null +++ b/src/main/java/bartworks/common/configs/ConfigHandler.java @@ -0,0 +1,301 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.configs; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import net.minecraftforge.common.config.Configuration; + +import bartworks.API.APIConfigValues; + +public class ConfigHandler { + + public static Configuration c; + + public static int megaMachinesMax = 256; + public static int mbWaterperSec = 150; + public static int ross128BID = -64; + public static int ross128BAID = -63; + public static int ross128btier = 3; + public static int ross128batier = 3; + public static int landerType = 3; + public static int ross128bRuinChance = 512; + public static int bioVatMaxParallelBonus = 1000; + public static int cutoffTier = 5; + public static int[][][] metasForTiers; + + public static long energyPerCell = 1000000L; + + public static boolean Ross128Enabled = true; + + public static boolean disableExtraGassesForEBF; + public static boolean disableMagicalForest; + public static boolean DEHPDirectSteam; + public static boolean teslastaff; + public static boolean classicMode; + + public static boolean GTppLogDisabler; + public static boolean tooltips = true; + public static boolean sharedItemStackTooltip = true; + public static boolean[] enabledPatches; + + public static byte maxTierRoss; + + public static boolean disableBoltedBlocksCasing = false; + public static boolean disableReboltedBlocksCasing = false; + + public static int pollutionHeatedWaterPumpSecond = 5; + public static int basePollutionMBFSecond = 400; + + public static Set voidMinerBlacklist = Collections.unmodifiableSet(new HashSet<>()); + + public static boolean disablePistonInEIC = false; + + private static final int[][] METAFORTIERS_ENERGY = { { 100, 101, 102, 105 }, { 1110, 1115, 1120, 1127 }, + { 1111, 12726, 1116, 1121, 1128 }, { 1112, 12727, 1117, 1122, 1129 }, { 12728, 1190, 1130, 12685 }, + { 1191, 1174, 695, 12686 }, }; + private static final int[][] METAFORTIERS_BUFFER = { { 5133, 5123 }, { 161, 171, 181, 191 }, { 162, 172, 182, 192 }, + { 163, 173, 183, 193 }, { 164, 174, 184, 194 }, { 165, 175, 185, 195 }, }; + private static final int[][] METAFORTIERS_CABLE = { { 5133, 5123 }, { 1210, 1230, 1250, 1270, 1290 }, + { 1310, 1330, 1350, 1370, 1390 }, { 1410, 1430, 1450, 1470, 1490 }, { 1510, 1530, 1550, 1570, 1590 }, + { 1650, 1670, 1690 }, }; + private static final int[][] METAFORTIERS_MACHINE = { + { 103, 104, 106, 107, 109, 110, 112, 113, 115, 116, 118, 119 }, + { 201, 211, 221, 231, 241, 251, 261, 271, 281, 291, 301, 311, 321, 331, 341, 351, 361, 371, 381, 391, 401, 411, + 421, 431, 441, 451, 461, 471, 481, 491, 501, 511, 521, 531, 541, 551, 561, 571, 581, 591, 601, 611, 621, + 631, 641, 651, 661, 671 }, + { 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 302, 312, 322, 332, 342, 352, 362, 372, 382, 392, 402, 412, + 422, 432, 442, 452, 462, 472, 482, 492, 502, 512, 522, 532, 542, 552, 562, 572, 582, 592, 602, 612, 622, + 632, 642, 652, 662, 672 }, + { 203, 213, 223, 233, 243, 253, 263, 273, 283, 293, 303, 313, 323, 333, 343, 353, 363, 373, 383, 393, 403, 413, + 423, 433, 443, 453, 463, 473, 483, 493, 503, 513, 523, 533, 543, 553, 563, 573, 583, 593, 603, 613, 623, + 633, 643, 653, 663, 673 }, + { 204, 214, 224, 234, 244, 254, 264, 274, 284, 294, 304, 314, 324, 334, 344, 354, 364, 374, 384, 394, 404, 414, + 424, 434, 444, 454, 464, 474, 484, 494, 504, 514, 524, 534, 544, 554, 564, 574, 584, 594, 604, 614, 624, + 634, 644, 654, 664, 674 }, + { 205, 215, 225, 235, 245, 255, 265, 275, 285, 295, 305, 315, 325, 335, 345, 355, 365, 375, 385, 395, 405, 415, + 425, 435, 445, 455, 465, 475, 485, 495, 505, 515, 525, 535, 545, 555, 565, 575, 585, 595, 605, 615, 625, + 635, 645, 655, 665, 675 }, }; + private static int[][][] defaultMetasForTiers = { METAFORTIERS_ENERGY, METAFORTIERS_BUFFER, METAFORTIERS_CABLE, + METAFORTIERS_MACHINE }; + private static final String[] VOLTAGE_NAMES = { "High Pressure Steam", "Low Voltage", "Medium Voltage", + "High Voltage", "Extreme Voltage", "Insane Voltage", "Ludicrous Voltage", "ZPM Voltage", "Ultimate Voltage", + "Ultimate High Voltage", "Ultimate Extreme Voltage", "Ultimate Insane Voltage", "Ultimate Mega Voltage", + "Ultimate Extended Mega Voltage", "Overpowered Voltage", "Maximum Voltage" }; + private static final String[] names = { "Generators", "Buffers", "Cables", "Machines" }; + + public static final String[] ASM_TRANSFORMER_DESCRIPTIONS = { "REMOVING RAIN FROM LAST MILLENNIUM (EXU)", + "REMOVING CREATURES FROM LAST MILLENNIUM (EXU)", "PATCHING THAUMCRAFT WAND PEDESTAL TO PREVENT VIS DUPLICATION", + "PATCHING CRAFTING MANAGER FOR CACHING RECIPES" }; + public static final String[] ASM_TRANSFORMER_CLASSES = { + "com.rwtema.extrautils.worldgen.endoftime.WorldProviderEndOfTime", + "com.rwtema.extrautils.worldgen.endoftime.ChunkProviderEndOfTime", "thaumcraft.common.tiles.TileWandPedestal", + "net.minecraft.item.crafting.CraftingManager" }; + + public ConfigHandler(Configuration C) { + ConfigHandler.c = C; + ConfigHandler.classicMode = ConfigHandler.c + .get( + "System", + "Enable Classic Mode", + false, + "Enables the classic Mode (all recipes in normal machines are doable in MV") + .getBoolean(false); + + ConfigHandler.tooltips = ConfigHandler.c + .get("System", "BartWorksToolTips", true, "If you wish to enable extra tooltips") + .getBoolean(true); + ConfigHandler.sharedItemStackTooltip = ConfigHandler.c + .get( + "System", + "BartWorksSharedItemStackToolTips", + true, + "If you wish to enable \"Shared Item Stack\" tooltips") + .getBoolean(true); + + ConfigHandler.teslastaff = ConfigHandler.c + .get( + "System", + "Enable Teslastaff", + false, + "Enables the Teslastaff, an Item used to destroy Electric Armors") + .getBoolean(false); + + ConfigHandler.cutoffTier = ConfigHandler.c + .get( + "System", + "Tier to nerf circuits", + 5, + "This switch sets the lowest unnerfed Circuit Recipe Tier. -1 to disable it completely.", + -1, + VOLTAGE_NAMES.length) + .getInt(5); + ConfigHandler.cutoffTier = ConfigHandler.cutoffTier == -1 ? VOLTAGE_NAMES.length : ConfigHandler.cutoffTier; + ConfigHandler.disableExtraGassesForEBF = ConfigHandler.c + .get( + "System", + "Disable Extra Gases for EBF", + false, + "This switch disables extra gas recipes for the EBF, i.e. Xenon instead of Nitrogen") + .getBoolean(false); + ConfigHandler.disableBoltedBlocksCasing = ConfigHandler.c + .get("System", "Disable Bolted Casings", false, "This switch disable the generation of bolted casings") + .getBoolean(false); + ConfigHandler.disableReboltedBlocksCasing = ConfigHandler.c + .get("System", "Disable Rebolted Casings", false, "This switch disable the generation of rebolted casings") + .getBoolean(false); + + ConfigHandler.mbWaterperSec = ConfigHandler.c.get("Singleblocks", "mL Water per Sec for the StirlingPump", 150) + .getInt(150); + + ConfigHandler.energyPerCell = ConfigHandler.c + .get( + "Multiblocks", + "energyPerLESUCell", + 1000000, + "This will set Up the Energy per LESU Cell", + 1000000, + Integer.MAX_VALUE) + .getInt(1000000); + ConfigHandler.DEHPDirectSteam = ConfigHandler.c.get( + "Multiblocks", + "DEHP Direct Steam Mode", + false, + "This switch enables the Direct Steam Mode of the DEHP. If enabled it will take in Waterand output steam. If disabled it will Input IC2Coolant and output hot coolant") + .getBoolean(false); + ConfigHandler.megaMachinesMax = ConfigHandler.c + .get( + "Multiblocks", + "Mega Machines Maximum Recipes per Operation", + 256, + "This changes the Maximum Recipes per Operation to the specified Valure") + .getInt(256); + ConfigHandler.bioVatMaxParallelBonus = ConfigHandler.c + .get( + "Multiblocks", + "BioVat Maximum Bonus on Recipes", + 1000, + "This are the maximum parallel Operations the BioVat can do, when the output is half full.") + .getInt(1000); + ConfigHandler.voidMinerBlacklist = Collections.unmodifiableSet( + new HashSet<>( + Arrays.asList( + ConfigHandler.c.get( + "Multiblocks", + "Void Miner Blacklist", + new String[0], + "This is a blacklist for the Void Miner, blacklisted ores will not enter the drop prize pool. Please fill in the Unique Identifier of Ore and connect Damage with a colon, For example: gregtech:gt.blockores:32") + .getStringList()))); + ConfigHandler.disablePistonInEIC = ConfigHandler.c + .get( + "Multiblocks", + "Disable Electric Implosion Compressor piston", + false, + "This switch completely disables piston animation in Electric Implosion Compressor multiblock") + .getBoolean(false); + + ConfigHandler.pollutionHeatedWaterPumpSecond = ConfigHandler.c + .get( + "Pollution", + "Pollution produced per second by the water pump", + ConfigHandler.pollutionHeatedWaterPumpSecond, + "How much should the Simple Stirling Water Pump produce pollution per second") + .getInt(ConfigHandler.pollutionHeatedWaterPumpSecond); + ConfigHandler.basePollutionMBFSecond = ConfigHandler.c.get( + "Pollution", + "Pollution produced per tick by the MBF per ingot", + ConfigHandler.basePollutionMBFSecond, + "How much should the MBF produce pollution per tick per ingot. Then it'll be multiplied by the amount of ingots done in parallel") + .getInt(ConfigHandler.basePollutionMBFSecond); + + ConfigHandler.GTppLogDisabler = ConfigHandler.c + .get("System", "Disable GT++ Logging", false, "Enables or Disables GT++ Logging.") + .getBoolean(false); + APIConfigValues.debugLog = ConfigHandler.c + .get("System", "Enable Debug Log", false, "Enables or Disables the debug log.") + .getBoolean(false); + + ConfigHandler.enabledPatches = new boolean[ASM_TRANSFORMER_CLASSES.length]; + for (int i = 0; i < ASM_TRANSFORMER_CLASSES.length; i++) ConfigHandler.enabledPatches[i] = ConfigHandler.c + .get("ASM fixes", ASM_TRANSFORMER_DESCRIPTIONS[i] + " in class: " + ASM_TRANSFORMER_CLASSES[i], true) + .getBoolean(true); + + ConfigHandler.ross128BID = ConfigHandler.c + .get("CrossMod Interactions", "DimID - Ross128b", -64, "The Dim ID for Ross128b") + .getInt(-64); + ConfigHandler.ross128BAID = ConfigHandler.c + .get("CrossMod Interactions", "DimID - Ross128ba", -63, "The Dim ID for Ross128ba (Ross128b's Moon)") + .getInt(-63); + ConfigHandler.ross128btier = ConfigHandler.c + .get("CrossMod Interactions", "Rocket Tier - Ross128b", 3, "The Rocket Tier for Ross128b") + .getInt(3); + ConfigHandler.ross128batier = ConfigHandler.c + .get("CrossMod Interactions", "Rocket Tier - Ross128ba", 3, "The Rocket Tier for Ross128a") + .getInt(3); + ConfigHandler.ross128bRuinChance = ConfigHandler.c + .get("CrossMod Interactions", "Ruin Chance - Ross128b", 512, "Higher Values mean lesser Ruins.") + .getInt(512); + ConfigHandler.Ross128Enabled = ConfigHandler.c + .get( + "CrossMod Interactions", + "Galacticraft - Activate Ross128 System", + true, + "If the Ross128 System should be activated, DO NOT CHANGE AFTER WORLD GENERATION") + .getBoolean(true); + ConfigHandler.landerType = ConfigHandler.c + .get("CrossMod Interactions", "LanderType", 3, "1 = Moon Lander, 2 = Landing Balloons, 3 = Asteroid Lander") + .getInt(3); + ConfigHandler.disableMagicalForest = ConfigHandler.c + .get( + "CrossMod Interactions", + "Disable Magical Forest - Ross128b", + false, + "True disables the magical Forest Biome on Ross for more performance during World generation.") + .getBoolean(false); + + ConfigHandler.maxTierRoss = (byte) ConfigHandler.c + .get("Ross Ruin Metas", "A_Ruin Machine Tiers", 6, "", 0, VOLTAGE_NAMES.length) + .getInt(6); + ConfigHandler.metasForTiers = new int[4][maxTierRoss][]; + + for (int i = 0; i < 4; i++) { + if (maxTierRoss > ConfigHandler.defaultMetasForTiers[i].length) + ConfigHandler.defaultMetasForTiers[i] = new int[maxTierRoss][0]; + for (int j = 0; j < maxTierRoss; j++) ConfigHandler.metasForTiers[i][j] = ConfigHandler.c + .get( + "Ross Ruin Metas", + j + "_Ruin " + names[i] + " Tier " + VOLTAGE_NAMES[j], + ConfigHandler.defaultMetasForTiers[i][j]) + .getIntList(); + } + + ConfigHandler.setUpComments(); + + if (ConfigHandler.c.hasChanged()) ConfigHandler.c.save(); + } + + private static void setUpComments() { + ConfigHandler.c.addCustomCategoryComment("ASM fixes", "Disable ASM fixes here."); + ConfigHandler.c.addCustomCategoryComment("Singleblocks", "Singleblock Options can be set here."); + ConfigHandler.c.addCustomCategoryComment("Multiblocks", "Multiblock Options can be set here."); + ConfigHandler.c.addCustomCategoryComment("System", "Different System Settings can be set here."); + ConfigHandler.c.addCustomCategoryComment( + "CrossMod Interactions", + "CrossMod Interaction Settings can be set here. For Underground Fluid settings change the Gregtech.cfg!"); + ConfigHandler.c.addCustomCategoryComment("Ross Ruin Metas", "Ruin Metas and Tiers can be set here."); + } +} diff --git a/src/main/java/bartworks/common/items/BWItemBlocks.java b/src/main/java/bartworks/common/items/BWItemBlocks.java new file mode 100644 index 0000000000..e540093bf8 --- /dev/null +++ b/src/main/java/bartworks/common/items/BWItemBlocks.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.items; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import bartworks.API.ITileAddsInformation; +import bartworks.MainMod; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.util.GTLanguageManager; + +public class BWItemBlocks extends ItemBlock { + + private final String mNoMobsToolTip = GTLanguageManager + .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); + private final String mNoTileEntityToolTip = GTLanguageManager + .addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!"); + + public BWItemBlocks(Block par1) { + super(par1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setCreativeTab(MainMod.GT2); + } + + @Override + public int getMetadata(int aMeta) { + return aMeta; + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return this.field_150939_a.getUnlocalizedName() + "." + this.getDamage(aStack); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + + if (this.field_150939_a instanceof ITileAddsInformation) { + aList.addAll(Arrays.asList(((ITileAddsInformation) this.field_150939_a).getInfoData())); + } + aList.add(this.mNoMobsToolTip); + if (!(this.field_150939_a instanceof ITileEntityProvider)) aList.add(this.mNoTileEntityToolTip); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(ItemStack stack, int pass) { + return this.field_150939_a.getIcon(0, stack.getItemDamage()); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { + return this.getIcon(stack, renderPass); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamageForRenderPass(int p_77618_1_, int p_77618_2_) { + return this.field_150939_a.getIcon(0, p_77618_2_); + } +} diff --git a/src/main/java/bartworks/common/items/ItemCircuitProgrammer.java b/src/main/java/bartworks/common/items/ItemCircuitProgrammer.java new file mode 100644 index 0000000000..c7150451a1 --- /dev/null +++ b/src/main/java/bartworks/common/items/ItemCircuitProgrammer.java @@ -0,0 +1,236 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.items; + +import java.util.List; + +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.StatCollector; +import net.minecraft.world.World; + +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.IItemWithModularUI; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import bartworks.API.modularUI.BWUITextures; +import bartworks.MainMod; +import bartworks.util.BWUtil; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.items.GTGenericItem; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; + +public class ItemCircuitProgrammer extends GTGenericItem implements IElectricItem, IItemWithModularUI { + + private static final int COST_PER_USE = 100; + + public ItemCircuitProgrammer() { + super("BWCircuitProgrammer", "Circuit Programmer", "Programs Integrated Circuits"); + this.setMaxStackSize(1); + this.setNoRepair(); + this.setHasSubtypes(false); + this.setCreativeTab(MainMod.BWT); + GregTechAPI.registerCircuitProgrammer( + s -> s.getItem() instanceof ItemCircuitProgrammer && ElectricItem.manager.canUse(s, COST_PER_USE), + (s, p) -> { + ElectricItem.manager.use(s, COST_PER_USE, p); + return s; + }); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + super.addInformation(aStack, aPlayer, aList, aF3_H); + if (aStack != null && aStack.getTagCompound() != null) aList.add( + StatCollector.translateToLocal("tooltip.cp.0.name") + " " + + (aStack.getTagCompound() + .getBoolean("HasChip") ? StatCollector.translateToLocal("tooltip.bw.yes.name") + : StatCollector.translateToLocal("tooltip.bw.no.name"))); + } + + @Override + public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + if (ElectricItem.manager.use(aStack, COST_PER_USE, aPlayer)) { + GTUIInfos.openPlayerHeldItemUI(aPlayer); + } + return aStack; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item p_150895_1_, CreativeTabs p_150895_2_, List itemList) { + ItemStack itemStack = new ItemStack(this, 1); + if (this.getChargedItem(itemStack) == this) { + ItemStack charged = new ItemStack(this, 1); + ElectricItem.manager.charge(charged, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false); + itemList.add(charged); + } + if (this.getEmptyItem(itemStack) == this) { + itemList.add(new ItemStack(this, 1, this.getMaxDamage())); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aIconRegister) { + this.mIcon = aIconRegister.registerIcon("bartworks:CircuitProgrammer"); + } + + @Override + public int getTier(ItemStack var1) { + return 1; + } + + @Override + public boolean canProvideEnergy(ItemStack itemStack) { + return false; + } + + @Override + public Item getChargedItem(ItemStack itemStack) { + return this; + } + + @Override + public Item getEmptyItem(ItemStack itemStack) { + return this; + } + + @Override + public double getMaxCharge(ItemStack itemStack) { + return 10000; + } + + @Override + public double getTransferLimit(ItemStack itemStack) { + return GTValues.V[1]; + } + + private static final String NBT_KEY_HAS_CHIP = "HasChip"; + private static final String NBT_KEY_CHIP_CONFIG = "ChipConfig"; + + @Override + public ModularWindow createWindow(UIBuildContext buildContext, ItemStack heldStack) { + ModularWindow.Builder builder = ModularWindow.builder(256, 166); + builder.setBackground(BWUITextures.BACKGROUND_CIRCUIT_PROGRAMMER); + builder.bindPlayerInventory(buildContext.getPlayer(), new Pos2d(86, 83), ModularUITextures.ITEM_SLOT); + + ItemStackHandler inventoryHandler = new ItemStackHandler(1) { + + @Override + public int getSlotLimit(int slot) { + return 1; + } + }; + SlotWidget circuitSlotWidget = new SlotWidget(new BaseSlot(inventoryHandler, 0) { + + @Override + public void putStack(ItemStack stack) { + if (ItemCircuitProgrammer.this.isLVCircuit(stack)) { + stack = ItemCircuitProgrammer.this.createRealCircuit(0); + } + ((IItemHandlerModifiable) this.getItemHandler()).setStackInSlot(this.getSlotIndex(), stack); + this.onSlotChanged(); + } + }); + + ItemStack initialStack = null; + NBTTagCompound tag = heldStack.getTagCompound(); + if (tag != null && tag.getBoolean(NBT_KEY_HAS_CHIP)) { + initialStack = this.createRealCircuit(tag.getByte(NBT_KEY_CHIP_CONFIG)); + } + circuitSlotWidget.getMcSlot() + .putStack(initialStack); + + builder.widget(circuitSlotWidget.setChangeListener(widget -> { + ItemStack stack = widget.getMcSlot() + .getStack(); + ItemStack heldItem = widget.getContext() + .getPlayer() + .getHeldItem(); + NBTTagCompound tag2 = heldItem.getTagCompound(); + if (tag2 == null) { + tag2 = new NBTTagCompound(); + } + + if (stack != null) { + tag2.setBoolean(NBT_KEY_HAS_CHIP, true); + tag2.setByte(NBT_KEY_CHIP_CONFIG, (byte) stack.getItemDamage()); + } else { + tag2.setBoolean(NBT_KEY_HAS_CHIP, false); + } + heldItem.setTagCompound(tag2); + }) + .setFilter(stack -> this.isProgrammedCircuit(stack) || this.isLVCircuit(stack)) + .setBackground(ModularUITextures.ITEM_SLOT, GTUITextures.OVERLAY_SLOT_INT_CIRCUIT) + .setPos(122, 60)); + + for (int i = 0; i < 24; i++) { + final int index = i; + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (circuitSlotWidget.getMcSlot() + .getHasStack() + && this.isProgrammedCircuit( + circuitSlotWidget.getMcSlot() + .getStack())) { + circuitSlotWidget.getMcSlot() + .putStack(this.createRealCircuit(index + 1)); + } + }) + .setPos(32 + i % 12 * 18, 21 + i / 12 * 18) + .setSize(18, 18)); + } + + return builder.build(); + } + + private ItemStack createRealCircuit(int config) { + return ItemList.Circuit_Integrated.getWithDamage(1, config); + } + + private boolean isProgrammedCircuit(ItemStack stack) { + return stack.getItem() + .equals( + GTUtility.getIntegratedCircuit(0) + .getItem()); + } + + private boolean isLVCircuit(ItemStack stack) { + return BWUtil.checkStackAndPrefix(stack) + && OrePrefixes.circuit.equals(GTOreDictUnificator.getAssociation(stack).mPrefix) + && GTOreDictUnificator.getAssociation(stack).mMaterial.mMaterial.equals(Materials.LV); + } +} diff --git a/src/main/java/bartworks/common/items/ItemLabModule.java b/src/main/java/bartworks/common/items/ItemLabModule.java new file mode 100644 index 0000000000..65931c4181 --- /dev/null +++ b/src/main/java/bartworks/common/items/ItemLabModule.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.items; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import bartworks.MainMod; + +public class ItemLabModule extends SimpleSubItemClass { + + public ItemLabModule(String[] tex) { + super(tex); + this.setCreativeTab(MainMod.BIO_TAB); + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return "labModule." + super.getUnlocalizedName(stack); + } + + @Override + public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List aList, boolean p_77624_4_) { + aList.add(StatCollector.translateToLocal("tooltip.labmodule.0.name")); + super.addInformation(p_77624_1_, p_77624_2_, aList, p_77624_4_); + } +} diff --git a/src/main/java/bartworks/common/items/ItemLabParts.java b/src/main/java/bartworks/common/items/ItemLabParts.java new file mode 100644 index 0000000000..4a45a7915f --- /dev/null +++ b/src/main/java/bartworks/common/items/ItemLabParts.java @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.items; + +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import bartworks.MainMod; +import bartworks.common.loaders.BioItemList; +import bartworks.util.BWColorUtil; +import bartworks.util.BWUtil; +import bartworks.util.BioCulture; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class ItemLabParts extends SimpleSubItemClass { + + public ItemLabParts(String[] tex) { + super(tex); + this.setCreativeTab(MainMod.BIO_TAB); + } + + @Override + public EnumRarity getRarity(ItemStack itemStack) { + + if (itemStack == null || itemStack.getTagCompound() == null) return EnumRarity.common; + + return switch (itemStack.getItemDamage()) { + case 0 -> BWUtil.getRarityFromByte( + itemStack.getTagCompound() + .getCompoundTag("DNA") + .getByte("Rarity")); + case 1, 2 -> BWUtil.getRarityFromByte( + itemStack.getTagCompound() + .getByte("Rarity")); + default -> EnumRarity.common; + }; + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack stack, int p_82790_2_) { + if (stack.getItemDamage() == 0 && stack.getTagCompound() != null + && stack.getTagCompound() + .getIntArray("Color") != null + && stack.getTagCompound() + .getIntArray("Color").length > 0) { + int[] rgb = stack.getTagCompound() + .getIntArray("Color"); + return BWColorUtil.getColorFromRGBArray(rgb); + } + return super.getColorFromItemStack(stack, p_82790_2_); + } + + @Override + public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean b) { + if (itemStack == null) return; + + if (itemStack.getTagCompound() == null) { + switch (itemStack.getItemDamage()) { + case 0: + list.add(StatCollector.translateToLocal("tooltip.labparts.0.name")); + break; + case 1: + list.add(StatCollector.translateToLocal("tooltip.labparts.1.name")); + break; + case 2: + list.add(StatCollector.translateToLocal("tooltip.labparts.2.name")); + break; + case 3: + list.add(StatCollector.translateToLocal("tooltip.labparts.3.name")); + break; + case 4: + list.add(StatCollector.translateToLocal("tooltip.labparts.4.name")); + break; + default: + break; + } + super.addInformation(itemStack, entityPlayer, list, b); + return; + } + + BioCulture culture = BioCulture.getBioCulture( + itemStack.getTagCompound() + .getString("Name")); + + switch (itemStack.getItemDamage()) { + case 0: + list.add( + StatCollector.translateToLocal("tooltip.labparts.5.name") + " " + + itemStack.getTagCompound() + .getString("Name") + + (culture != null ? " (" + culture.getLocalisedName() + ")" : "")); + if (!itemStack.getTagCompound() + .getBoolean("Breedable")) { + list.add(StatCollector.translateToLocal("tooltip.labparts.6.name")); + } + break; + case 1: + list.add( + StatCollector.translateToLocal("tooltip.labparts.7.name") + " " + + itemStack.getTagCompound() + .getString("Name") + + (culture != null ? " (" + culture.getLocalisedName() + ")" : "")); + break; + case 2: + list.add( + StatCollector.translateToLocal("tooltip.labparts.8.name") + " " + + itemStack.getTagCompound() + .getString("Name") + + (culture != null ? " (" + culture.getLocalisedName() + ")" : "")); + break; + default: + break; + } + super.addInformation(itemStack, entityPlayer, list, b); + } + + @Override + public void getSubItems(Item item, CreativeTabs creativeTabs, List list) { + list.addAll(BioItemList.getAllPetriDishes()); + list.addAll(BioItemList.getAllDNASampleFlasks()); + list.addAll(BioItemList.getAllPlasmidCells()); + super.getSubItems(item, creativeTabs, list); + } + + @Override + public String getUnlocalizedName(ItemStack itemStack) { + if (itemStack.getItemDamage() == 0 && itemStack.getTagCompound() != null) + return "filled.item." + this.tex[itemStack.getItemDamage()].replace('/', '.'); + return super.getUnlocalizedName(itemStack); + } +} diff --git a/src/main/java/bartworks/common/items/ItemRockCutter.java b/src/main/java/bartworks/common/items/ItemRockCutter.java new file mode 100644 index 0000000000..45682fc457 --- /dev/null +++ b/src/main/java/bartworks/common/items/ItemRockCutter.java @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.items; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import com.google.common.collect.Sets; + +import bartworks.MainMod; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.GTValues; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; + +public class ItemRockCutter extends ItemTool implements IElectricItem { + + private static Set mineableBlocks = Sets + .newHashSet(Blocks.stone, Blocks.cobblestone, Blocks.sand, Blocks.clay); + private final int mCharge; + private final int mTransfer; + public int mTier; + + @SideOnly(Side.CLIENT) + private IIcon icon; + + private final int multi; + + public ItemRockCutter(int aTier) { + super(2 * aTier, Item.ToolMaterial.EMERALD, ItemRockCutter.mineableBlocks); + this.mTier = aTier; + this.multi = (int) Math.pow(10, this.mTier - 1); + ItemRockCutter.mineableBlocks = new HashSet<>(); + this.maxStackSize = 1; + this.mCharge = 10000 * this.multi; + this.mTransfer = (int) GTValues.V[this.mTier]; + this.efficiencyOnProperMaterial = 2.0f * this.mTier; + this.setCreativeTab(MainMod.GT2); + this.setMaxDamage(27 + 10 * this.multi); + this.setNoRepair(); + this.setUnlocalizedName("GT_Rockcutter_Item_" + GTValues.VN[this.mTier]); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + aList.add(StatCollector.translateToLocal("tooltip.bw.tier.name") + " " + GTValues.VN[this.mTier]); + } + + @Override + public void onUpdate(ItemStack aStack, World worldIn, Entity entityIn, int p_77663_4_, boolean p_77663_5_) { + if (!ElectricItem.manager.canUse(aStack, 500 * this.multi)) { + if (aStack.isItemEnchanted()) { + aStack.getTagCompound() + .removeTag("ench"); + } + } else if (!aStack.isItemEnchanted()) { + aStack.addEnchantment(Enchantment.silkTouch, 3); + } + } + + @Override + public boolean onItemUse(ItemStack aStack, EntityPlayer aPlayer, World p_77648_3_, int p_77648_4_, int p_77648_5_, + int p_77648_6_, int p_77648_7_, float p_77648_8_, float p_77648_9_, float p_77648_10_) { + ElectricItem.manager.use(aStack, 0, aPlayer); + return false; + } + + @Override + public boolean onBlockDestroyed(ItemStack var1, World var2, Block var3, int var4, int var5, int var6, + EntityLivingBase var7) { + ElectricItem.manager.use(var1, 0, var7); + if (ElectricItem.manager.canUse(var1, 500 * this.multi)) { + ElectricItem.manager.use(var1, 500 * this.multi, var7); + } else { + ElectricItem.manager.discharge(var1, Integer.MAX_VALUE, Integer.MAX_VALUE, true, true, false); + } + return true; + } + + @Override + public boolean canHarvestBlock(Block par1Block, ItemStack itemStack) { + return par1Block.getMaterial() + .equals(Material.glass) + || par1Block.getMaterial() + .equals(Material.clay) + || par1Block.getMaterial() + .equals(Material.packedIce) + || par1Block.getMaterial() + .equals(Material.ice) + || par1Block.getMaterial() + .equals(Material.sand) + || par1Block.getMaterial() + .equals(Material.ground) + || par1Block.getMaterial() + .equals(Material.rock) + || mineableBlocks.contains(par1Block); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item p_150895_1_, CreativeTabs p_150895_2_, List itemList) { + ItemStack itemStack = new ItemStack(this, 1); + if (this.getChargedItem(itemStack) == this) { + ItemStack charged = new ItemStack(this, 1); + ElectricItem.manager.charge(charged, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false); + itemList.add(charged); + } + if (this.getEmptyItem(itemStack) == this) { + itemList.add(new ItemStack(this, 1, this.getMaxDamage())); + } + } + + @Override + public boolean canProvideEnergy(ItemStack itemStack) { + return false; + } + + @Override + public Item getChargedItem(ItemStack itemStack) { + return this; + } + + @Override + public Item getEmptyItem(ItemStack itemStack) { + return this; + } + + @Override + public double getMaxCharge(ItemStack itemStack) { + return this.mCharge; + } + + @Override + public int getTier(ItemStack itemStack) { + return this.mTier; + } + + @Override + public double getTransferLimit(ItemStack itemStack) { + return this.mTransfer; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + this.icon = iconRegister.registerIcon("bartworks:GT_Rockcutter"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int par1) { + return this.icon; + } +} diff --git a/src/main/java/bartworks/common/items/ItemSimpleWindMeter.java b/src/main/java/bartworks/common/items/ItemSimpleWindMeter.java new file mode 100644 index 0000000000..a477fbf37c --- /dev/null +++ b/src/main/java/bartworks/common/items/ItemSimpleWindMeter.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.items; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import bartworks.MainMod; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ic2.core.WorldData; + +public class ItemSimpleWindMeter extends Item { + + public ItemSimpleWindMeter() { + this.maxStackSize = 1; + this.setMaxDamage(15); + this.setCreativeTab(MainMod.BWT); + this.hasSubtypes = false; + this.setUnlocalizedName("BW_SimpleWindMeter"); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister register) { + this.itemIcon = register.registerIcon(MainMod.MOD_ID + ":BW_SimpleWindMeter"); + } + + @Override + public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean p_77624_4_) { + super.addInformation(itemStack, entityPlayer, list, p_77624_4_); + list.add(StatCollector.translateToLocal("tooltip.windmeter.0.name")); + list.add( + StatCollector.translateToLocal("tooltip.windmeter.1.name") + " " + + (this.getMaxDamage() - this.getDamage(itemStack)) + + "/" + + this.getMaxDamage()); + } + + @Override + public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer entityPlayer) { + if (entityPlayer.worldObj.isRemote || world == null + || WorldData.get(world) == null + || WorldData.get(world).windSim == null) return itemStack; + + float windStrength = (float) WorldData.get(world).windSim.getWindAt(entityPlayer.posY); + String windS = windStrength < 1f ? StatCollector.translateToLocal("tooltip.windmeter.2.name") + : windStrength < 10f ? StatCollector.translateToLocal("tooltip.windmeter.3.name") + : windStrength < 20f ? StatCollector.translateToLocal("tooltip.windmeter.4.name") + : windStrength < 30f ? StatCollector.translateToLocal("tooltip.windmeter.5.name") + : windStrength < 50f ? StatCollector.translateToLocal("tooltip.windmeter.6.name") + : StatCollector.translateToLocal("tooltip.windmeter.7.name"); + entityPlayer.addChatMessage( + new ChatComponentText(StatCollector.translateToLocal("tooltip.windmeter.8.name") + " " + windS + ".")); + itemStack.damageItem(1, entityPlayer); + return itemStack; + } +} diff --git a/src/main/java/bartworks/common/items/ItemStonageRotors.java b/src/main/java/bartworks/common/items/ItemStonageRotors.java new file mode 100644 index 0000000000..913c7c4fd4 --- /dev/null +++ b/src/main/java/bartworks/common/items/ItemStonageRotors.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.items; + +import static ic2.api.item.IKineticRotor.GearboxType.WATER; +import static ic2.api.item.IKineticRotor.GearboxType.WIND; + +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.IIconRegister; +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.ResourceLocation; +import net.minecraft.util.StatCollector; + +import bartworks.MainMod; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ic2.api.item.IKineticRotor; +import ic2.core.block.kineticgenerator.gui.GuiWaterKineticGenerator; +import ic2.core.block.kineticgenerator.gui.GuiWindKineticGenerator; +import ic2.core.util.StackUtil; + +public class ItemStonageRotors extends Item implements IKineticRotor { + + private final int[] DiaMinMax = new int[3]; + private final float eff; + private final IKineticRotor.GearboxType type; + private final ResourceLocation tex; + private final String itemTex; + private final int speed; + private final float mRotor; + private final int maxDamageEx; + private int dura; + + public ItemStonageRotors(int diameter, float eff, int speed, float mRotor, int min, int max, int durability, + IKineticRotor.GearboxType type, ResourceLocation tex, String Name, String itemTex) { + this.DiaMinMax[0] = diameter; + this.DiaMinMax[1] = min; + this.DiaMinMax[2] = max; + this.eff = eff; + this.mRotor = mRotor; + this.speed = speed; + this.type = type; + this.tex = tex; + this.setMaxDamage(30000); + this.maxDamageEx = durability; + this.setUnlocalizedName(Name); + this.setCreativeTab(MainMod.BWT); + this.itemTex = itemTex; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + this.itemIcon = iconRegister.registerIcon(MainMod.MOD_ID + ":" + this.itemTex); + } + + @Override + public void addInformation(ItemStack itemStack, EntityPlayer player, List info, boolean b) { + info.add( + StatCollector.translateToLocalFormatted("ic2.itemrotor.wind.info", this.DiaMinMax[1], this.DiaMinMax[2])); + IKineticRotor.GearboxType type = null; + if (Minecraft.getMinecraft().currentScreen instanceof GuiWaterKineticGenerator) { + type = WATER; + } else if (Minecraft.getMinecraft().currentScreen instanceof GuiWindKineticGenerator) { + type = WIND; + } + info.add(StatCollector.translateToLocal("tooltip.rotor.0.name") + " " + this.DiaMinMax[0]); + info.add( + StatCollector.translateToLocal("tooltip.rotor.1.name") + " " + + (this.getMaxDamageEx() - this.getDamageOfStack(itemStack)) / 100 + + "/" + + this.getMaxDamageEx() / 100); + info.add(StatCollector.translateToLocal("tooltip.rotor.2.name") + " " + this.eff); + info.add(StatCollector.translateToLocal("tooltip.rotor.3.name") + " " + this.speed); + info.add(StatCollector.translateToLocal("tooltip.rotor.4.name") + " " + this.mRotor); + if (type != null) { + info.add(StatCollector.translateToLocal("ic2.itemrotor.fitsin." + this.isAcceptedType(itemStack, type))); + } + } + + @Override + public int getDiameter(ItemStack itemStack) { + return this.DiaMinMax[0]; + } + + @Override + public ResourceLocation getRotorRenderTexture(ItemStack itemStack) { + return this.tex; + } + + @Override + public float getEfficiency(ItemStack itemStack) { + return this.eff; + } + + @Override + public int getMinWindStrength(ItemStack itemStack) { + return this.DiaMinMax[1]; + } + + @Override + public int getMaxWindStrength(ItemStack itemStack) { + return this.DiaMinMax[2]; + } + + @Override + public boolean isAcceptedType(ItemStack itemStack, IKineticRotor.GearboxType gearboxType) { + return gearboxType.equals(this.type); + } + + public int getSpeed() { + return this.speed; + } + + public float getmRotor() { + return this.mRotor; + } + + public void setDamageForStack(ItemStack stack, int advDmg) { + NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); + nbtData.setInteger("DmgEx", advDmg); + if (this.maxDamageEx > 0) { + double p = (double) advDmg / (double) this.maxDamageEx; + int newDmg = (int) (stack.getMaxDamage() * p); + if (newDmg >= stack.getMaxDamage()) { + newDmg = stack.getMaxDamage() - 1; + } + stack.setItemDamage(newDmg); + this.dura = newDmg; + } + } + + public int getDamageOfStack(ItemStack stack) { + NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); + this.dura = nbtData.getInteger("DmgEx"); + return this.dura; + } + + public int getMaxDamageEx() { + return this.maxDamageEx; + } + + public void damageItemStack(ItemStack stack, int Dmg) { + this.setDamageForStack(stack, this.getDamageOfStack(stack) + Dmg); + } +} diff --git a/src/main/java/bartworks/common/items/ItemTeslaStaff.java b/src/main/java/bartworks/common/items/ItemTeslaStaff.java new file mode 100644 index 0000000000..292a48cd91 --- /dev/null +++ b/src/main/java/bartworks/common/items/ItemTeslaStaff.java @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.items; + +import java.util.List; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.ItemTool; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; + +import com.google.common.collect.Sets; + +import bartworks.MainMod; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; + +public class ItemTeslaStaff extends ItemTool implements IElectricItem { + + private static final Set effective = Sets.newHashSet(Blocks.web); + private final double mCharge; + private final double mTransfer; + public int mTier; + + @SideOnly(Side.CLIENT) + private IIcon icon; + + public ItemTeslaStaff() { + super(0, Item.ToolMaterial.GOLD, ItemTeslaStaff.effective); + this.setCreativeTab(MainMod.GT2); + this.setNoRepair(); + this.mCharge = 10000000D; + this.mTransfer = 8192D; + this.mTier = 4; + this.setMaxStackSize(1); + this.setMaxDamage(27); + this.setUnlocalizedName("GT_Teslastaff_Item"); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + aList.add(StatCollector.translateToLocal("tooltip.teslastaff.0.name")); + } + + @Override + public boolean hitEntity(ItemStack aStack, EntityLivingBase aTarget, EntityLivingBase aPlayer) { + if (aTarget instanceof EntityLiving tTarget && ElectricItem.manager.canUse(aStack, 9000000)) { + ElectricItem.manager.use(aStack, 9000000, aPlayer); + for (int i = 1; i < 5; ++i) { + if (tTarget.getEquipmentInSlot(i) != null && tTarget.getEquipmentInSlot(i) + .getItem() instanceof IElectricItem) { + tTarget.setCurrentItemOrArmor(i, null); + } + } + } + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item p_150895_1_, CreativeTabs p_150895_2_, List itemList) { + ItemStack itemStack = new ItemStack(this, 1); + if (this.getChargedItem(itemStack) == this) { + ItemStack charged = new ItemStack(this, 1); + ElectricItem.manager.charge(charged, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false); + itemList.add(charged); + } + if (this.getEmptyItem(itemStack) == this) { + itemList.add(new ItemStack(this, 1, this.getMaxDamage())); + } + } + + @Override + public boolean canProvideEnergy(ItemStack itemStack) { + return false; + } + + @Override + public Item getChargedItem(ItemStack itemStack) { + return this; + } + + @Override + public Item getEmptyItem(ItemStack itemStack) { + return this; + } + + @Override + public double getMaxCharge(ItemStack itemStack) { + return this.mCharge; + } + + @Override + public boolean isRepairable() { + return false; + } + + @Override + public int getTier(ItemStack itemStack) { + return this.mTier; + } + + @Override + public double getTransferLimit(ItemStack itemStack) { + return this.mTransfer; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + this.icon = iconRegister.registerIcon("bartworks:GT_Teslastaff"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int par1) { + return this.icon; + } +} diff --git a/src/main/java/bartworks/common/items/SimpleIconItem.java b/src/main/java/bartworks/common/items/SimpleIconItem.java new file mode 100644 index 0000000000..bf5a2c9ee0 --- /dev/null +++ b/src/main/java/bartworks/common/items/SimpleIconItem.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.items; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class SimpleIconItem extends Item { + + private final String tex; + + public SimpleIconItem(String tex) { + this.tex = tex; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + this.itemIcon = iconRegister.registerIcon("bartworks:" + this.tex); + } +} diff --git a/src/main/java/bartworks/common/items/SimpleSubItemClass.java b/src/main/java/bartworks/common/items/SimpleSubItemClass.java new file mode 100644 index 0000000000..4240aa1b83 --- /dev/null +++ b/src/main/java/bartworks/common/items/SimpleSubItemClass.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.items; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import bartworks.MainMod; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class SimpleSubItemClass extends Item { + + @SideOnly(Side.CLIENT) + protected IIcon[] itemIcon; + + String[] tex; + + public SimpleSubItemClass(String... tex) { + this.tex = tex; + this.hasSubtypes = true; + this.setCreativeTab(MainMod.BWT); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + this.itemIcon = new IIcon[this.tex.length]; + for (int i = 0; i < this.tex.length; i++) { + this.itemIcon[i] = iconRegister.registerIcon(MainMod.MOD_ID + ":" + this.tex[i]); + } + } + + @Override + public void getSubItems(Item p_150895_1_, CreativeTabs p_150895_2_, List p_150895_3_) { + for (int i = 0; i < this.tex.length; i++) { + p_150895_3_.add(new ItemStack(p_150895_1_, 1, i)); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int p_77617_1_) { + if (p_77617_1_ < this.tex.length) return this.itemIcon[p_77617_1_]; + return this.itemIcon[0]; + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + if (stack.getItemDamage() < this.tex.length) return "item." + this.tex[stack.getItemDamage()].replace('/', '.'); + return "WrongDamageItemDestroyIt"; + } +} diff --git a/src/main/java/bartworks/common/loaders/ArtificialMicaLine.java b/src/main/java/bartworks/common/loaders/ArtificialMicaLine.java new file mode 100644 index 0000000000..4ec5f2edf8 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/ArtificialMicaLine.java @@ -0,0 +1,191 @@ +package bartworks.common.loaders; + +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.recipe.RecipeMaps.benderRecipes; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; + +import bartworks.system.material.BWGTMaterialReference; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +public class ArtificialMicaLine { + + public static void runArtificialMicaRecipe() { + // Mg + O = MgO + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Magnesium.getDust(1)) + .itemOutputs(Materials.Magnesia.getDust(2)) + .fluidInputs(Materials.Oxygen.getGas(1000)) + .duration(2 * SECONDS) + .eut(8) + .addTo(UniversalChemical); + // Si + 6HF = H2SiF6 + 4H + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Silicon.getDust(1), Materials.Empty.getCells(4)) + .itemOutputs(Materials.Hydrogen.getCells(4)) + .fluidInputs(Materials.HydrofluoricAcid.getFluid(6000)) + .fluidOutputs(WerkstoffLoader.HexafluorosilicicAcid.getFluidOrGas(1000)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(UniversalChemical); + // K + Cl = KCl + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Potassium.getDust(1), GTUtility.getIntegratedCircuit(2)) + .itemOutputs(Materials.RockSalt.getDust(2)) + .fluidInputs(Materials.Chlorine.getGas(1000)) + .duration(20 * TICKS) + .eut(8) + .addTo(UniversalChemical); + + // 2KCl + H2SiF6 = 2HCl + K2SiF6 + GTValues.RA.stdBuilder() + .itemInputs(Materials.RockSalt.getDust(4)) + .itemOutputs(WerkstoffLoader.Potassiumfluorosilicate.get(OrePrefixes.dust, 9)) + .fluidInputs(WerkstoffLoader.HexafluorosilicicAcid.getFluidOrGas(1000)) + .fluidOutputs(Materials.HydrochloricAcid.getFluid(2000)) + .duration(1 * SECONDS) + .eut(8) + .addTo(mixerRecipes); + + // 2K + CO2 + O = K2CO3 + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Potassium.getDust(2), Materials.CarbonDioxide.getCells(1)) + .itemOutputs(WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 6), Materials.Empty.getCells(1)) + .fluidInputs(Materials.Oxygen.getGas(1000)) + .duration(2 * SECONDS) + .eut(8) + .addTo(UniversalChemical); + // K2O + CO2 = K2CO3 + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Potash.getDust(3), Materials.CarbonDioxide.getCells(1)) + .itemOutputs(WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 6), Materials.Empty.getCells(1)) + .duration(2 * SECONDS) + .eut(8) + .addTo(UniversalChemical); + + // 55Quartz Dust + 20K2SiF6 + 12Al2O3 + 4K2CO3 = 91Raw Fluorophlogopite Dust + GTValues.RA.stdBuilder() + .itemInputs( + Materials.QuartzSand.getDust(55), + WerkstoffLoader.Potassiumfluorosilicate.get(OrePrefixes.dust, 20), + WerkstoffLoader.Alumina.get(OrePrefixes.dust, 12), + WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 4), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs( + WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), + WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 27)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + // 55Quartzite/Nether Quartz Dust + 20K2SiF6 + 57Al2O3 + 4K2CO3 = 136Raw Fluorophlogopite Dust + GTValues.RA.stdBuilder() + .itemInputs( + Materials.Quartzite.getDust(55), + WerkstoffLoader.Potassiumfluorosilicate.get(OrePrefixes.dust, 20), + WerkstoffLoader.Alumina.get(OrePrefixes.dust, 57), + WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 4), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs( + WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), + WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), + WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 8)) + .fluidInputs() + .fluidOutputs() + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + Materials.NetherQuartz.getDust(55), + WerkstoffLoader.Potassiumfluorosilicate.get(OrePrefixes.dust, 20), + WerkstoffLoader.Alumina.get(OrePrefixes.dust, 57), + WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 4), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs( + WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), + WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), + WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 8)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + // 62Certus Quartz Dust + 10K2SiF6 + 12Al2O3 + 7K2CO3 = 91Raw Fluorophlogopite Dust + GTValues.RA.stdBuilder() + .itemInputs( + Materials.CertusQuartz.getDust(62), + WerkstoffLoader.Potassiumfluorosilicate.get(OrePrefixes.dust, 10), + WerkstoffLoader.Alumina.get(OrePrefixes.dust, 12), + WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 7), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs( + WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), + WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 27)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + // MgO(s) = MgO(l) + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Magnesia.getDust(1)) + .fluidOutputs(Materials.Magnesia.getMolten(144)) + .duration(20 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(fluidExtractionRecipes); + + // 27Raw Fluorophlogopite Dust + 720MgO(l) = 4608Fluorophlogopite(l) + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 27)) + .itemOutputs(Materials.Glass.getDust(1)) + .fluidInputs(BWGTMaterialReference.Magnesia.getMolten(720)) + .fluidOutputs(WerkstoffLoader.HotFluorophlogopite.getFluidOrGas(4608)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 1700) + .addTo(blastFurnaceRecipes); + + // 144Fluorophlogopite(l) = Fluorophlogopite + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Plate.get(0)) + .itemOutputs(WerkstoffLoader.Fluorophlogopite.get(OrePrefixes.plate, 1)) + .fluidInputs(WerkstoffLoader.HotFluorophlogopite.getFluidOrGas(144)) + .duration(10 * TICKS) + .eut(TierEU.RECIPE_MV) + .noOptimize() + .addTo(vacuumFreezerRecipes); + + // Fluorophlogopite = 4Insulator Foil + if (NewHorizonsCoreMod.isModLoaded()) { + + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffLoader.Fluorophlogopite.get(OrePrefixes.plate, 1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 4)) + .duration(10 * TICKS) + .eut(600) + .addTo(benderRecipes); + + } + } +} diff --git a/src/main/java/bartworks/common/loaders/BioCultureLoader.java b/src/main/java/bartworks/common/loaders/BioCultureLoader.java new file mode 100644 index 0000000000..f97f23347f --- /dev/null +++ b/src/main/java/bartworks/common/loaders/BioCultureLoader.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.loaders; + +import java.awt.Color; + +import net.minecraft.item.EnumRarity; + +import bartworks.util.BioCulture; +import bartworks.util.BioDNA; +import bartworks.util.BioData; +import bartworks.util.BioPlasmid; + +public class BioCultureLoader { + + public static final BioData BIO_DATA_BETA_LACMATASE = BioData + .createAndRegisterBioData("beta-Lactamase", EnumRarity.uncommon, 10000, 0); + private static final BioData BIO_DATA_YEAST = BioData + .createAndRegisterBioData("Saccharomyces cerevisiae", EnumRarity.common); + private static final BioDNA BIO_DNA_WHINE_YEAST = BioDNA + .createAndRegisterBioDNA("Saccharomyces cerevisiae var bayanus", EnumRarity.uncommon); + private static final BioDNA BIO_DNA_BEER_YEAST = BioDNA + .createAndRegisterBioDNA("Saccharomyces cerevisiae var cerevisiae", EnumRarity.uncommon); + private static final BioData eColiData = BioData + .createAndRegisterBioData("Escherichia koli", EnumRarity.uncommon, 10000, 0); + private static final BioDNA BIO_DNA_ANAEROBIC_OIL = BioDNA + .createAndRegisterBioDNA("Pseudomonas Veronii", EnumRarity.uncommon); + private static final BioData BIO_DATA_ANAEROBIC_OIL = BioData + .createAndRegisterBioData("Pseudomonas Veronii", EnumRarity.uncommon, 5000, 1); + public static BioCulture CommonYeast; + public static BioCulture WhineYeast; + public static BioCulture BeerYeast; + public static BioCulture rottenFleshBacteria; + public static BioCulture eColi; + public static BioCulture anaerobicOil; + public static BioCulture generalPurposeFermentingBacteria; + + public static void run() { + BioCultureLoader.CommonYeast = BioCulture.createAndRegisterBioCulture( + new Color(255, 248, 200), + "Saccharomyces cerevisiae", + BioPlasmid.convertDataToPlasmid(BioCultureLoader.BIO_DATA_YEAST), + BioDNA.convertDataToDNA(BioCultureLoader.BIO_DATA_YEAST), + true); + BioCultureLoader.WhineYeast = BioCulture.createAndRegisterBioCulture( + new Color(255, 248, 200), + "Saccharomyces cerevisiae var bayanus", + BioPlasmid.convertDataToPlasmid(BioCultureLoader.BIO_DNA_WHINE_YEAST), + BioCultureLoader.BIO_DNA_WHINE_YEAST, + EnumRarity.uncommon, + true); + BioCultureLoader.BeerYeast = BioCulture.createAndRegisterBioCulture( + new Color(255, 248, 200), + "Saccharomyces cerevisiae var cerevisiae", + BioPlasmid.convertDataToPlasmid(BioCultureLoader.BIO_DNA_BEER_YEAST), + BioCultureLoader.BIO_DNA_BEER_YEAST, + EnumRarity.uncommon, + true); + BioCultureLoader.rottenFleshBacteria = BioCulture.createAndRegisterBioCulture( + new Color(110, 40, 25), + "Escherichia cadaver", + BioPlasmid.convertDataToPlasmid(BioCultureLoader.BIO_DATA_BETA_LACMATASE), + BioDNA.convertDataToDNA(BioCultureLoader.BIO_DATA_BETA_LACMATASE), + false); + BioCultureLoader.eColi = BioCulture.createAndRegisterBioCulture( + new Color(149, 132, 75), + "Escherichia koli", + BioPlasmid.convertDataToPlasmid(BioCultureLoader.eColiData), + BioDNA.convertDataToDNA(BioCultureLoader.eColiData), + true); + BioCultureLoader.anaerobicOil = BioCulture.createAndRegisterBioCulture( + new Color(0, 0, 0), + "Pseudomonas Veronii", + BioPlasmid.convertDataToPlasmid(BioCultureLoader.BIO_DNA_ANAEROBIC_OIL), + BioDNA.convertDataToDNA(BioCultureLoader.BIO_DATA_ANAEROBIC_OIL), + true); + BioCultureLoader.generalPurposeFermentingBacteria = BioCulture.createAndRegisterBioCulture( + new Color(127, 69, 26), + "Saccharomyces escherichia", + BioCultureLoader.CommonYeast.getPlasmid(), + BioCultureLoader.eColi.getdDNA(), + EnumRarity.epic, + true); + + BioCultureLoader.CommonYeast.setLocalisedName("Common Yeast"); + BioCultureLoader.WhineYeast.setLocalisedName("Whine Yeast"); + BioCultureLoader.BeerYeast.setLocalisedName("Beer Yeast"); + BioCultureLoader.rottenFleshBacteria.setLocalisedName("Rotten Flesh Bacteria"); + BioCultureLoader.eColi.setLocalisedName("eColi Bacteria"); + BioCultureLoader.anaerobicOil.setLocalisedName("Anaerobic Oil Bacteria"); + BioCultureLoader.generalPurposeFermentingBacteria.setLocalisedName("General Purpose Fermenting Bacteria"); + } +} diff --git a/src/main/java/bartworks/common/loaders/BioItemList.java b/src/main/java/bartworks/common/loaders/BioItemList.java new file mode 100644 index 0000000000..d845c5048d --- /dev/null +++ b/src/main/java/bartworks/common/loaders/BioItemList.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.loaders; + +import java.util.Collection; +import java.util.HashSet; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import bartworks.common.items.ItemLabModule; +import bartworks.common.items.ItemLabParts; +import bartworks.util.BioCulture; +import bartworks.util.BioDNA; +import bartworks.util.BioData; +import bartworks.util.BioPlasmid; +import cpw.mods.fml.common.registry.GameRegistry; + +public class BioItemList { + + private BioItemList() {} + + private static final Item mItemBioLabParts = new ItemLabModule( + new String[] { "DNAExtractionModule", "PCRThermoclyclingModule", "PlasmidSynthesisModule", + "TransformationModule", "ClonalCellularSynthesisModule" }); + public static final ItemStack[] mBioLabParts = { new ItemStack(BioItemList.mItemBioLabParts), + new ItemStack(BioItemList.mItemBioLabParts, 1, 1), new ItemStack(BioItemList.mItemBioLabParts, 1, 2), + new ItemStack(BioItemList.mItemBioLabParts, 1, 3), new ItemStack(BioItemList.mItemBioLabParts, 1, 4) }; + private static final Item vanillaBioLabParts = new ItemLabParts( + new String[] { "petriDish", "DNASampleFlask", "PlasmidCell", "DetergentPowder", "Agarose", "IncubationModule", + "PlasmaMembrane" }); + + public static void registerBioItems() { + GameRegistry.registerItem(BioItemList.mItemBioLabParts, "BioLabModules"); + GameRegistry.registerItem(BioItemList.vanillaBioLabParts, "BioLabParts"); + } + + public static Collection getAllPetriDishes() { + HashSet ret = new HashSet<>(); + for (BioCulture Culture : BioCulture.BIO_CULTURE_ARRAY_LIST) { + ret.add(BioItemList.getPetriDish(Culture)); + } + return ret; + } + + public static Collection getAllDNASampleFlasks() { + HashSet ret = new HashSet<>(); + for (BioData dna : BioData.BIO_DATA_ARRAY_LIST) { + ret.add(BioItemList.getDNASampleFlask(BioDNA.convertDataToDNA(dna))); + } + return ret; + } + + public static Collection getAllPlasmidCells() { + HashSet ret = new HashSet<>(); + for (BioData dna : BioData.BIO_DATA_ARRAY_LIST) { + ret.add(BioItemList.getPlasmidCell(BioPlasmid.convertDataToPlasmid(dna))); + } + return ret; + } + + public static ItemStack getPetriDish(BioCulture Culture) { + if (Culture == null) return new ItemStack(BioItemList.vanillaBioLabParts); + ItemStack ret = new ItemStack(BioItemList.vanillaBioLabParts); + ret.setTagCompound(BioCulture.getNBTTagFromCulture(Culture)); + return ret; + } + + public static ItemStack getDNASampleFlask(BioDNA dna) { + if (dna == null) return new ItemStack(BioItemList.vanillaBioLabParts, 1, 1); + + ItemStack ret = new ItemStack(BioItemList.vanillaBioLabParts, 1, 1); + ret.setTagCompound(BioData.getNBTTagFromBioData(dna)); + return ret; + } + + public static ItemStack getPlasmidCell(BioPlasmid plasmid) { + if (plasmid == null) return new ItemStack(BioItemList.vanillaBioLabParts, 1, 2); + ItemStack ret = new ItemStack(BioItemList.vanillaBioLabParts, 1, 2); + ret.setTagCompound(BioData.getNBTTagFromBioData(plasmid)); + return ret; + } + + /** + * 1 - Detergent Powder 2 - Agarose 3 - Incubation Module 4 - Plasma Membrane others are null + * + * @param selection see above + * @return the selected Item + */ + public static ItemStack getOther(int selection) { + if (selection < 1 || selection > 4) return null; + + return new ItemStack(BioItemList.vanillaBioLabParts, 1, 2 + selection); + } +} diff --git a/src/main/java/bartworks/common/loaders/BioLabLoader.java b/src/main/java/bartworks/common/loaders/BioLabLoader.java new file mode 100644 index 0000000000..4a625ea33c --- /dev/null +++ b/src/main/java/bartworks/common/loaders/BioLabLoader.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.loaders; + +public class BioLabLoader { + + public static void run() { + FluidLoader.run(); + BioItemList.registerBioItems(); + BioRecipeLoader.run(); + } +} diff --git a/src/main/java/bartworks/common/loaders/BioRecipeLoader.java b/src/main/java/bartworks/common/loaders/BioRecipeLoader.java new file mode 100644 index 0000000000..77ae6b8c2c --- /dev/null +++ b/src/main/java/bartworks/common/loaders/BioRecipeLoader.java @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.loaders; + +import static bartworks.API.recipe.BartWorksRecipeMaps.bacterialVatRecipes; +import static bartworks.API.recipe.BartWorksRecipeMaps.bioLabRecipes; +import static gregtech.api.enums.Mods.CropsPlusPlus; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.SIEVERTS; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class BioRecipeLoader { + + public static void run() { + registerWaterBasedBioLabIncubations(); + registerBacterialVatRecipes(); + } + + public static void registerWaterBasedBioLabIncubations() { + FluidStack[] easyFluids = { Materials.Water.getFluid(1000L), + FluidRegistry.getFluidStack("ic2distilledwater", 1000) }; + for (FluidStack fluidStack : easyFluids) { + + GTValues.RA.stdBuilder() + .itemInputs(BioItemList.getPetriDish(null), new ItemStack(Items.rotten_flesh)) + .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.rottenFleshBacteria)) + .outputChances(33_00) + .fluidInputs(fluidStack) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(bioLabRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(BioItemList.getPetriDish(null), new ItemStack(Items.fermented_spider_eye)) + .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.eColi)) + .outputChances(45_00) + .fluidInputs(fluidStack) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(bioLabRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(BioItemList.getPetriDish(null), ItemList.Food_Dough.get(1L)) + .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.CommonYeast)) + .outputChances(75_00) + .fluidInputs(fluidStack) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(bioLabRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(BioItemList.getPetriDish(null), ItemList.Food_Dough_Sugar.get(1L)) + .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.WhineYeast)) + .outputChances(25_00) + .fluidInputs(fluidStack) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(bioLabRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(BioItemList.getPetriDish(null), ItemList.Bottle_Wine.get(1L)) + .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.WhineYeast)) + .outputChances(33_00) + .fluidInputs(fluidStack) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(bioLabRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(BioItemList.getPetriDish(null), ItemList.Bottle_Beer.get(1L)) + .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.BeerYeast)) + .outputChances(25_00) + .fluidInputs(fluidStack) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(bioLabRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(BioItemList.getPetriDish(null), ItemList.Bottle_Dark_Beer.get(1L)) + .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.BeerYeast)) + .outputChances(33_00) + .fluidInputs(fluidStack) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(bioLabRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(BioItemList.getPetriDish(null), new ItemStack(Blocks.dirt)) + .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.anaerobicOil)) + .outputChances(100) + .fluidInputs(fluidStack) + .duration(1 * MINUTES + 15 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(bioLabRecipes); + } + } + + public static void registerWaterBasedBacterialVatRecipes() { + FluidStack[] easyFluids = { Materials.Water.getFluid(1000L), + FluidRegistry.getFluidStack("ic2distilledwater", 1000) }; + for (FluidStack fluidStack : easyFluids) { + if (CropsPlusPlus.isModLoaded()) { + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(2), new ItemStack(Items.sugar, 64)) + .special(BioItemList.getPetriDish(BioCultureLoader.CommonYeast)) + .fluidInputs(new FluidStack(fluidStack, 100)) + .fluidOutputs(FluidRegistry.getFluidStack("potion.ghp", 1)) + .duration(17 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_EV) + .noOptimize() + .addTo(bacterialVatRecipes); + } + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Grapes.get(16)) + .special(BioItemList.getPetriDish(BioCultureLoader.WhineYeast)) + .fluidInputs(new FluidStack(fluidStack, 100)) + .fluidOutputs(FluidRegistry.getFluidStack("potion.wine", 12)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .noOptimize() + .addTo(bacterialVatRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(Items.sugar, 4), + ItemList.IC2_Hops.get(16L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 8L)) + .special(BioItemList.getPetriDish(BioCultureLoader.BeerYeast)) + .fluidInputs(new FluidStack(fluidStack, 100)) + .fluidOutputs(FluidRegistry.getFluidStack("potion.beer", 5)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .noOptimize() + .addTo(bacterialVatRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.IC2_Hops.get(32L), GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 16L)) + .special(BioItemList.getPetriDish(BioCultureLoader.BeerYeast)) + .fluidInputs(new FluidStack(fluidStack, 100)) + .fluidOutputs(FluidRegistry.getFluidStack("potion.darkbeer", 10)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .noOptimize() + .addTo(bacterialVatRecipes); + } + } + + public static void registerBacterialVatRecipes() { + registerWaterBasedBacterialVatRecipes(); + + GTValues.RA.stdBuilder() + .special(BioItemList.getPetriDish(BioCultureLoader.WhineYeast)) + .fluidInputs(FluidRegistry.getFluidStack("potion.grapejuice", 100)) + .fluidOutputs(FluidRegistry.getFluidStack("potion.wine", 12)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .noOptimize() + .addTo(bacterialVatRecipes); + + GTValues.RA.stdBuilder() + .special(BioItemList.getPetriDish(BioCultureLoader.anaerobicOil)) + .fluidInputs(Materials.FermentedBiomass.getFluid(10000)) + .fluidOutputs(new FluidStack(FluidLoader.fulvicAcid, 1000)) + .duration(2 * MINUTES + 17 * SECONDS + 8 * TICKS) + .eut(TierEU.RECIPE_LV) + .noOptimize() + .addTo(bacterialVatRecipes); + } + + public static void runOnServerStarted() { + RecipeMaps.fermentingRecipes.getAllRecipes() + .forEach( + recipe -> GTValues.RA.stdBuilder() + .special(BioItemList.getPetriDish(BioCultureLoader.generalPurposeFermentingBacteria)) + .fluidInputs(recipe.mFluidInputs) + .fluidOutputs(recipe.mFluidOutputs) + .duration(recipe.mDuration) + .eut(recipe.mEUt) + .metadata(SIEVERTS, (int) GTUtility.getTier(recipe.mEUt)) + .addTo(bacterialVatRecipes)); + + } +} diff --git a/src/main/java/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java b/src/main/java/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java new file mode 100644 index 0000000000..9e1d896272 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java @@ -0,0 +1,229 @@ +package bartworks.common.loaders; + +import static bartworks.API.recipe.BartWorksRecipeMaps.electricImplosionCompressorRecipes; +import static goodgenerator.loader.Loaders.highDensityPlutonium; +import static goodgenerator.loader.Loaders.highDensityPlutoniumNugget; +import static goodgenerator.loader.Loaders.highDensityThorium; +import static goodgenerator.loader.Loaders.highDensityThoriumNugget; +import static goodgenerator.loader.Loaders.highDensityUranium; +import static goodgenerator.loader.Loaders.highDensityUraniumNugget; +import static gregtech.api.enums.GTValues.M; +import static gregtech.api.enums.Mods.Avaritia; +import static gregtech.api.enums.Mods.EternalSingularity; +import static gregtech.api.enums.Mods.OpenComputers; +import static gregtech.api.enums.Mods.SuperSolarPanels; +import static gregtech.api.enums.Mods.UniversalSingularities; +import static gregtech.api.util.GTModHandler.getModItem; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class ElectricImplosionCompressorRecipes implements Runnable { + + @Override + public void run() { + // Custom electric implosion compressor recipes. Cannot be overclocked. + + if (EternalSingularity.isModLoaded()) { + + GTValues.RA.stdBuilder() + .itemOutputs(getModItem(EternalSingularity.ID, "eternal_singularity", 1L)) + .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(72L)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + + if (UniversalSingularities.isModLoaded()) { + // Raw Exposed Optical Chip + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Circuit_Silicon_Wafer7.get(1L), + // Fluxed Electrum Singularity. + getModItem(UniversalSingularities.ID, "universal.general.singularity", 1L, 20)) + .itemOutputs(ItemList.Circuit_Chip_Optical.get(16L)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + // fluxed electrum singularity + getModItem(UniversalSingularities.ID, "universal.general.singularity", 1L, 20)) + .fluidInputs(MaterialsUEVplus.Mellion.getMolten(4 * 144L)) + // spaghettic singularity + .itemOutputs(getModItem(EternalSingularity.ID, "combined_singularity", 1L, 2)) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(electricImplosionCompressorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + // iron singularity + getModItem(Avaritia.ID, "Singularity", 1L, 0)) + .fluidInputs(MaterialsUEVplus.Creon.getMolten(4 * 144L)) + // cryptic singularity + .itemOutputs(getModItem(EternalSingularity.ID, "combined_singularity", 1L, 4)) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(electricImplosionCompressorRecipes); + } + } + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(highDensityPlutoniumNugget, 5)) + .itemOutputs(new ItemStack(highDensityPlutonium, 1)) + .fluidInputs(Materials.Neutronium.getMolten(72L)) + .duration(1) + .eut(TierEU.RECIPE_UEV) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(highDensityUraniumNugget, 5)) + .itemOutputs(new ItemStack(highDensityUranium, 1)) + .fluidInputs(Materials.Neutronium.getMolten(72L)) + .duration(1) + .eut(TierEU.RECIPE_UEV) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(highDensityThoriumNugget, 5)) + .itemOutputs(new ItemStack(highDensityThorium, 1)) + .fluidInputs(Materials.Neutronium.getMolten(72L)) + .duration(1) + .eut(TierEU.RECIPE_UEV) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + + // Magneto material recipe for base fluid. + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.WhiteDwarfMatter, 1L), + GTOreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.Universium, 1L), + GTOreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.BlackDwarfMatter, 1L)) + .fluidInputs(MaterialsUEVplus.RawStarMatter.getFluid(64 * 144L)) + .fluidOutputs(MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(16 * 144L)) + .duration(4 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + + // Infinity Catalyst + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfinityCatalyst, 64L)) + .itemOutputs(getModItem(Avaritia.ID, "Resource", 1L, 5)) + .duration(1) + .eut(TierEU.RECIPE_UIV) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + + if (UniversalSingularities.isModLoaded()) { + // Fluxed Singularity + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.block, Materials.ElectrumFlux, 16L)) + .itemOutputs(getModItem(UniversalSingularities.ID, "universal.general.singularity", 1L, 20)) + .duration(1) + .eut(TierEU.RECIPE_UIV) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + + // Iron Singularity + GTValues.RA.stdBuilder() + .itemOutputs(getModItem(Avaritia.ID, "Singularity", 1L, 0)) + .fluidInputs(Materials.Iron.getMolten(7296 * 9 * 144L)) + .duration(1) + .eut(TierEU.RECIPE_UIV) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + + // Copper Singularity + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Copper.getMolten(3648 * 9 * 144L)) + .itemOutputs(getModItem(Avaritia.ID, "Singularity", 1L, 5)) + .duration(1 * TICKS) + .eut(TierEU.RECIPE_UIV) + .addTo(electricImplosionCompressorRecipes); + + ItemStack diamondBlocks = GTUtility + .copyAmountUnsafe(729, GTOreDictUnificator.get(OrePrefixes.block, Materials.Diamond, 1L)); + // Diamond Singularity + GTValues.RA.stdBuilder() + .itemInputs(diamondBlocks) + .itemOutputs(getModItem(UniversalSingularities.ID, "universal.vanilla.singularity", 1L, 2)) + .duration(1 * TICKS) + .eut(TierEU.RECIPE_UIV) + .addTo(electricImplosionCompressorRecipes); + } + // MHDCSM V2 + GTValues.RA.stdBuilder() + .itemInputs(MaterialsUEVplus.Eternity.getNanite(1), MaterialsUEVplus.Universium.getNanite(1)) + .fluidInputs(MaterialsUEVplus.RawStarMatter.getFluid(128 * 144L)) + .fluidOutputs(MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(32 * 144L)) + .duration(4 * SECONDS) + .eut(TierEU.RECIPE_MAX) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + + this.addMagnetohydrodynamicallyConstrainedStarMatterPartRecipes(); + } + + private void addMagnetohydrodynamicallyConstrainedStarMatterPartRecipes() { + + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.frameGt, 1, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.nugget, 9, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.ingot, 1, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.plate, 1, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.plateDense, 1, 3); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.stick, 2, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.round, 8, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.bolt, 8, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.screw, 8, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.ring, 4, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.foil, 8, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.itemCasing, 2, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.gearGtSmall, 1, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.rotor, 1, 2); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.stickLong, 1, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.springSmall, 2, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.spring, 1, 1); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.gearGt, 1, 2); + this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.wireFine, 8, 1); + } + + private void addWhiteDwarfMagnetoEICRecipe(final OrePrefixes part, final int multiplier, + final int circuitMultiplier) { + + final int partFraction = (int) (144 * part.mMaterialAmount / M); + + GTValues.RA.stdBuilder() + .itemInputs( + new Object[] { OrePrefixes.circuit.get(Materials.UHV), circuitMultiplier }, + getModItem(SuperSolarPanels.ID, "solarsplitter", 1, 0), + getModItem(OpenComputers.ID, "hologram2", circuitMultiplier, 0), + GTOreDictUnificator.get(part, MaterialsUEVplus.Eternity, multiplier)) + .itemOutputs( + GTOreDictUnificator + .get(part, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, multiplier)) + .fluidInputs( + MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter + .getMolten((long) partFraction * multiplier)) + .duration((int) (multiplier * (20 * partFraction / 144.0))) + .eut(TierEU.RECIPE_UXV) + .noOptimize() + .addTo(electricImplosionCompressorRecipes); + } +} diff --git a/src/main/java/bartworks/common/loaders/FluidLoader.java b/src/main/java/bartworks/common/loaders/FluidLoader.java new file mode 100644 index 0000000000..b5f8283aa0 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/FluidLoader.java @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.loaders; + +import static gregtech.api.enums.Mods.Gendustry; +import static gregtech.api.enums.Mods.GregTech; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import java.awt.Color; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.API.SideReference; +import bartworks.client.renderer.RendererGlassBlock; +import bartworks.client.renderer.RendererSwitchingColorFluid; +import bartworks.common.blocks.BlockBioFluid; +import bartworks.common.tileentities.classic.TileEntityDimIDBridge; +import bartworks.util.BioCulture; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.FluidState; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gregtech.api.fluid.GTFluidFactory; +import gregtech.api.util.GTUtility; +import gregtech.common.items.MetaGeneratedItem98; + +public class FluidLoader { + + public static IIcon autogenIIcon; + public static Fluid ff; + public static int renderID; + public static Block bioFluidBlock; + public static Fluid[] BioLabFluidMaterials; + public static ItemStack[] BioLabFluidCells; + + // OilProcessing chain + public static Fluid fulvicAcid, heatedfulvicAcid, Kerogen; + + public static void run() { + renderID = RenderingRegistry.getNextAvailableRenderId(); + ff = new Fluid("BWfakeFluid"); + GregTechAPI.sGTBlockIconload.add( + () -> ff.setIcons( + GregTechAPI.sBlockIcons + .registerIcon(GregTech.getResourcePath("fluids", "fluid.molten.autogenerated")))); + fulvicAcid = createAndRegisterFluid("Fulvic Acid", new Color(20, 20, 20)); + heatedfulvicAcid = createAndRegisterFluid("Heated Fulvic Acid", new Color(40, 20, 20), 720); + Kerogen = createAndRegisterFluid("Kerogen", new Color(85, 85, 85)); + BioLabFluidMaterials = new Fluid[] { createAndRegisterFluid("FluorecentdDNA", new Color(125, 50, 170)), + createAndRegisterFluid("EnzymesSollution", new Color(240, 200, 125)), + createAndRegisterFluid("Penicillin", new Color(255, 255, 255)), + createAndRegisterFluid("Polymerase", new Color(110, 180, 110)) }; + + BioLabFluidCells = new ItemStack[BioLabFluidMaterials.length]; + + MetaGeneratedItem98.FluidCell[] fluidCells = { MetaGeneratedItem98.FluidCell.FLUORESCENT_DNA, + MetaGeneratedItem98.FluidCell.ENZYME_SOLUTION, MetaGeneratedItem98.FluidCell.PENICILLIN, + MetaGeneratedItem98.FluidCell.POLYMERASE, }; + for (int i = 0; i < fluidCells.length; i++) { + BioLabFluidCells[i] = fluidCells[i].get(); + } + + FluidStack dnaFluid = Gendustry.isModLoaded() ? FluidRegistry.getFluidStack("liquiddna", 100) + : Materials.Biomass.getFluid(100L); + for (BioCulture B : BioCulture.BIO_CULTURE_ARRAY_LIST) { + if (B.isBreedable()) { + B.setFluid( + GTFluidFactory.builder( + B.getName() + .replace(" ", "") + .toLowerCase() + "fluid") + .withTextureName("molten.autogenerated") + .withColorRGBA( + new short[] { (short) B.getColor() + .getRed(), + (short) B.getColor() + .getBlue(), + (short) B.getColor() + .getGreen() }) + .withLocalizedName(B.getLocalisedName() + " Fluid") + .withStateAndTemperature(FluidState.LIQUID, 300) + .buildAndRegister() + .asFluid()); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(10)) + .fluidInputs(new FluidStack(B.getFluid(), 1000)) + .fluidOutputs(dnaFluid) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(centrifugeRecipes); + } + } + + bioFluidBlock = new BlockBioFluid(); + GameRegistry.registerBlock(bioFluidBlock, "coloredFluidBlock"); + GameRegistry.registerTileEntity(TileEntityDimIDBridge.class, "bwTEDimIDBridge"); + if (SideReference.Side.Client) { + RendererSwitchingColorFluid.register(); + RendererGlassBlock.register(); + } + } + + public static Fluid createAndRegisterFluid(String Name, Color color) { + return GTFluidFactory.builder(Name) + .withTextureName("molten.autogenerated") + .withColorRGBA( + new short[] { (short) color.getRed(), (short) color.getGreen(), (short) color.getBlue(), + (short) color.getAlpha() }) + .withStateAndTemperature(FluidState.LIQUID, 300) + .buildAndRegister() + .asFluid(); + } + + public static Fluid createAndRegisterFluid(String Name, Color color, int temperature) { + return GTFluidFactory.builder(Name) + .withTextureName("molten.autogenerated") + .withColorRGBA( + new short[] { (short) color.getRed(), (short) color.getGreen(), (short) color.getBlue(), + (short) color.getAlpha() }) + .withStateAndTemperature(FluidState.LIQUID, temperature) + .buildAndRegister() + .asFluid(); + } +} diff --git a/src/main/java/bartworks/common/loaders/ItemRegistry.java b/src/main/java/bartworks/common/loaders/ItemRegistry.java new file mode 100644 index 0000000000..4cf95866a1 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/ItemRegistry.java @@ -0,0 +1,654 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.loaders; + +import static gregtech.api.enums.MetaTileEntityIDs.AcidGeneratorEV; +import static gregtech.api.enums.MetaTileEntityIDs.AcidGeneratorHV; +import static gregtech.api.enums.MetaTileEntityIDs.AcidGeneratorLV; +import static gregtech.api.enums.MetaTileEntityIDs.AcidGeneratorMV; +import static gregtech.api.enums.MetaTileEntityIDs.CircuitAssemblyLine; +import static gregtech.api.enums.MetaTileEntityIDs.CompressedFluidHatch; +import static gregtech.api.enums.MetaTileEntityIDs.DeepEarthHeatingPump; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_HV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_LV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_MV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_HV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_LV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_MV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_HV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_LV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_MV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_HV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_LV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_MV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_HV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_LV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_MV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.ElectricImplosionCompressor; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_EV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_HV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_IV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_LV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_MV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.GiantOutputHatch; +import static gregtech.api.enums.MetaTileEntityIDs.HighTemperatureGasCooledReactor; +import static gregtech.api.enums.MetaTileEntityIDs.HumongousInputHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter128A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter128A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter128A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter128A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter32A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter32A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter32A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter32A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter64A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter64A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter64A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter64A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter96A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter96A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter96A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter96A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserPipe; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch128A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch128A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch128A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch128A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch32A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch32A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch32A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch32A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch64A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch64A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch64A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch64A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch96A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch96A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch96A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch96A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch128A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch128A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch128A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch128A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch32A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch32A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch32A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch32A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch64A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch64A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch64A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch64A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch96A_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch96A_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch96A_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch96A_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.MegaBlastFurnace; +import static gregtech.api.enums.MetaTileEntityIDs.MegaChemicalReactor; +import static gregtech.api.enums.MetaTileEntityIDs.MegaDistillationTower; +import static gregtech.api.enums.MetaTileEntityIDs.MegaOilCracker; +import static gregtech.api.enums.MetaTileEntityIDs.MegaVacuumFreezer; +import static gregtech.api.enums.MetaTileEntityIDs.ThoriumHighTemperatureReactor; +import static gregtech.api.enums.MetaTileEntityIDs.VoidMinerI; +import static gregtech.api.enums.MetaTileEntityIDs.VoidMinerII; +import static gregtech.api.enums.MetaTileEntityIDs.VoidMinerIII; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; + +import bartworks.API.BorosilicateGlass; +import bartworks.MainMod; +import bartworks.common.blocks.BWBlocks; +import bartworks.common.blocks.BWBlocksGlass; +import bartworks.common.blocks.BWBlocksGlass2; +import bartworks.common.blocks.BWMachineBlockContainer; +import bartworks.common.blocks.BWTileEntityContainer; +import bartworks.common.configs.ConfigHandler; +import bartworks.common.items.BWItemBlocks; +import bartworks.common.items.ItemCircuitProgrammer; +import bartworks.common.items.ItemRockCutter; +import bartworks.common.items.ItemSimpleWindMeter; +import bartworks.common.items.ItemStonageRotors; +import bartworks.common.items.ItemTeslaStaff; +import bartworks.common.items.SimpleIconItem; +import bartworks.common.items.SimpleSubItemClass; +import bartworks.common.tileentities.classic.TileEntityHeatedWaterPump; +import bartworks.common.tileentities.classic.TileEntityRotorBlock; +import bartworks.common.tileentities.debug.MTECreativeScanner; +import bartworks.common.tileentities.multis.MTECircuitAssemblyLine; +import bartworks.common.tileentities.multis.MTEDeepEarthHeatingPump; +import bartworks.common.tileentities.multis.MTEElectricImplosionCompressor; +import bartworks.common.tileentities.multis.MTEHighTempGasCooledReactor; +import bartworks.common.tileentities.multis.MTEThoriumHighTempReactor; +import bartworks.common.tileentities.multis.mega.MTEMegaBlastFurnace; +import bartworks.common.tileentities.multis.mega.MTEMegaChemicalReactor; +import bartworks.common.tileentities.multis.mega.MTEMegaDistillTower; +import bartworks.common.tileentities.multis.mega.MTEMegaOilCracker; +import bartworks.common.tileentities.multis.mega.MTEMegaVacuumFreezer; +import bartworks.common.tileentities.tiered.MTEAcidGenerator; +import bartworks.common.tileentities.tiered.MTECompressedFluidHatch; +import bartworks.common.tileentities.tiered.MTEDiode; +import bartworks.common.tileentities.tiered.MTEEnergyDistributor; +import bartworks.common.tileentities.tiered.MTEGiantOutputHatch; +import bartworks.common.tileentities.tiered.MTEHumongousInputHatch; +import bartworks.system.material.WerkstoffLoader; +import bwcrossmod.galacticgreg.MTEVoidMiners; +import bwcrossmod.tectech.tileentites.tiered.MTELowPowerLaserBox; +import bwcrossmod.tectech.tileentites.tiered.MTELowPowerLaserDynamo; +import bwcrossmod.tectech.tileentites.tiered.MTELowPowerLaserHatch; +import bwcrossmod.tectech.tileentites.tiered.MTELowPowerLaserPipe; +import cpw.mods.fml.common.registry.GameRegistry; +import fox.spiteful.avaritia.blocks.LudicrousBlocks; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MetaTileEntityIDs; +import gregtech.api.enums.Mods; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; +import ic2.api.item.IKineticRotor; + +public class ItemRegistry { + + public static final Item TESLASTAFF = new ItemTeslaStaff(); + public static final Item ROCKCUTTER_LV = new ItemRockCutter(1); + public static final Item ROCKCUTTER_MV = new ItemRockCutter(2); + public static final Item ROCKCUTTER_HV = new ItemRockCutter(3); + public static final Item CIRCUIT_PROGRAMMER = new ItemCircuitProgrammer(); + public static final Block ROTORBLOCK = new BWMachineBlockContainer( + Material.wood, + TileEntityRotorBlock.class, + "BWRotorBlock"); + public static final Item LEATHER_ROTOR = new ItemStonageRotors( + 7, + 0.15f, + 5, + 1.15f, + 1, + 50, + 10000000, + IKineticRotor.GearboxType.WIND, + new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorLeather.png"), + "BW_LeatherRotor", + "rotors/itemRotorLeather"); + public static final Item WOOL_ROTOR = new ItemStonageRotors( + 7, + 0.18f, + 3, + 1.35f, + 1, + 50, + 9000000, + IKineticRotor.GearboxType.WIND, + new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorWool.png"), + "BW_WoolRotor", + "rotors/itemRotorWool"); + public static final Item PAPER_ROTOR = new ItemStonageRotors( + 7, + 0.2f, + 12, + 0.9f, + 1, + 50, + 800000, + IKineticRotor.GearboxType.WIND, + new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorPaper.png"), + "BW_PaperRotor", + "rotors/itemRotorPaper"); + public static final Item COMBINED_ROTOR = new ItemStonageRotors( + 9, + 0.22f, + 7, + 1.05f, + 1, + 50, + 6000000, + IKineticRotor.GearboxType.WIND, + new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorCombined.png"), + "BW_CombinedRotor", + "rotors/itemRotorCombined"); + public static final Item CRAFTING_PARTS = new SimpleSubItemClass( + "grindstone_top", + "grindstone_bottom", + "completed_grindstone", + "rotors/leatherParts", + "rotors/woolParts", + "rotors/paperParts", + "rotors/combinedParts"); + public static final Item TAB = new SimpleIconItem("GT2Coin"); + public static final Item WINDMETER = new ItemSimpleWindMeter(); + public static final Block PUMPBLOCK = new BWTileEntityContainer( + Material.anvil, + TileEntityHeatedWaterPump.class, + "BWHeatedWaterPump"); + public static final Item PUMPPARTS = new SimpleSubItemClass("BWrawtube", "BWmotor"); + + public static final Block bw_realglas = new BWBlocksGlass( + "BW_GlasBlocks", + new String[] { MainMod.MOD_ID + ":BoronSilicateGlassBlock", + MainMod.MOD_ID + ":TitaniumReinforcedBoronSilicateGlassBlock", + MainMod.MOD_ID + ":TungstenSteelReinforcedBoronSilicateGlassBlock", + MainMod.MOD_ID + ":LuVTierMaterialReinforcedBoronSilicateGlassBlock", + MainMod.MOD_ID + ":IridiumReinforcedBoronSilicateGlassBlock", + MainMod.MOD_ID + ":OsmiumReinforcedBoronSilicateGlassBlock", + MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock1", MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock2", + MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock3", MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock4", + MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock5", MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock6", + MainMod.MOD_ID + ":ThoriumYttriumGlass", MainMod.MOD_ID + ":NeutroniumReinforcedBoronSilicateGlassBlock", + MainMod.MOD_ID + ":CosmicNeutroniumReinforcedBoronSilicateGlassBlock", + MainMod.MOD_ID + ":InfinityReinforcedBoronSilicateGlassBlock", }, + new short[][] { Materials.BorosilicateGlass.getRGBA(), Materials.Titanium.getRGBA(), + Materials.TungstenSteel.getRGBA(), Materials.Chrome.getRGBA(), Materials.Iridium.getRGBA(), + Materials.Osmium.getRGBA(), new short[] { 0xff, 0, 0 }, new short[] { 0, 0xff, 0 }, + new short[] { 0x80, 0, 0xff }, new short[] { 0xff, 0xff, 0 }, new short[] { 0, 0xff, 0x80 }, + new short[] { 0x80, 0x33, 0 }, WerkstoffLoader.YttriumOxide.getRGBA(), Materials.Neutronium.getRGBA(), + Materials.CosmicNeutronium.getRGBA(), new short[] { 0xda, 0xeb, 0xff }, }, + MainMod.BIO_TAB, + true, + false); + public static final Block bw_realglas2 = new BWBlocksGlass2( + "BW_GlasBlocks2", + new String[] { MainMod.MOD_ID + ":TranscendentallyReinforcedBoronSilicateGlassBlock" }, + new short[][] { new short[] { 50, 50, 50 } }, + MainMod.BIO_TAB, + true, + false); + + public static final Block[] bw_glasses = { bw_realglas, bw_realglas2 }; + public static final Block bw_fake_glasses = new BWBlocksGlass( + "BW_GlasBlocks", + new String[] { MainMod.MOD_ID + ":BoronSilicateGlassBlockRandlos" }, + null, + null, + true, + true); + public static final Block bw_fake_glasses2 = new BWBlocksGlass2( + "BW_GlasBlocks2", + new String[] { MainMod.MOD_ID + ":BoronSilicateGlassBlockRandlos" }, + null, + null, + true, + true); + public static final Block[] BW_BLOCKS = { + new BWBlocks( + "BW_ItemBlocks", + new String[] { MainMod.MOD_ID + ":EtchedLapisCell", MainMod.MOD_ID + ":PlatedLapisCell", }, + MainMod.GT2), + new BWBlocks("GT_LESU_CASING", new String[] { MainMod.MOD_ID + ":LESU_CELL", }, MainMod.GT2), + new BWBlocks( + "BW_Machinery_Casings", + new String[] { MainMod.MOD_ID + ":NickelFerriteBlocks", MainMod.MOD_ID + ":TransformerCoil", + // MainMod.MOD_ID+":DEHP_Casing", + // MainMod.MOD_ID+":DEHP_Casing_Base" + }, + MainMod.BWT), }; + + public static ItemStack[] diode2A = new ItemStack[GTValues.VN.length]; + public static ItemStack[] diode4A = new ItemStack[GTValues.VN.length]; + public static ItemStack[] diode8A = new ItemStack[GTValues.VN.length]; + public static ItemStack[] diode12A = new ItemStack[GTValues.VN.length]; + public static ItemStack[] diode16A = new ItemStack[GTValues.VN.length]; + public static ItemStack[] energyDistributor = new ItemStack[GTValues.VN.length]; + public static ItemStack[] acidGens = new ItemStack[3]; + public static ItemStack acidGensLV; + public static ItemStack[] megaMachines = new ItemStack[5]; + public static ItemStack dehp; + public static ItemStack[] voidminer = new ItemStack[3]; + public static ItemStack THTR; + public static ItemStack HTGR; + public static ItemStack eic; + public static ItemStack cal; + public static ItemStack compressedHatch; + public static ItemStack giantOutputHatch; + public static ItemStack humongousInputHatch; + + public static ItemStack[][][] TecTechLaserAdditions = new ItemStack[3][4][4]; + public static ItemStack TecTechPipeEnergyLowPower; + + public static void run() { + GameRegistry.registerBlock(ItemRegistry.bw_fake_glasses, "BW_FakeGlasBlock"); + GameRegistry.registerBlock(ItemRegistry.bw_fake_glasses2, "BW_FakeGlasBlocks2"); + BorosilicateGlass.registerBorosilicateGlass(); + + GameRegistry.registerBlock(ItemRegistry.BW_BLOCKS[2], BWItemBlocks.class, "BW_Machinery_Casings"); + GameRegistry.registerItem(ItemRegistry.LEATHER_ROTOR, "BW_LeatherRotor"); + GameRegistry.registerItem(ItemRegistry.WOOL_ROTOR, "BW_WoolRotor"); + GameRegistry.registerItem(ItemRegistry.PAPER_ROTOR, "BW_PaperRotor"); + GameRegistry.registerItem(ItemRegistry.COMBINED_ROTOR, "BW_CombinedRotor"); + GameRegistry.registerItem(ItemRegistry.CRAFTING_PARTS, "craftingParts"); + GameRegistry.registerTileEntity(TileEntityRotorBlock.class, "BWRotorBlockTE"); + GameRegistry.registerBlock(ItemRegistry.ROTORBLOCK, BWItemBlocks.class, "BWRotorBlock"); + GameRegistry.registerTileEntity(TileEntityHeatedWaterPump.class, "BWHeatedWaterPumpTE"); + GameRegistry.registerBlock(ItemRegistry.PUMPBLOCK, BWItemBlocks.class, "BWHeatedWaterPumpBlock"); + GameRegistry.registerItem(ItemRegistry.PUMPPARTS, "BWPumpParts"); + GameRegistry.registerItem(ItemRegistry.WINDMETER, "BW_SimpleWindMeter"); + + // GT2 stuff + GameRegistry.registerBlock(ItemRegistry.BW_BLOCKS[0], BWItemBlocks.class, "BW_ItemBlocks"); + GameRegistry.registerBlock(ItemRegistry.BW_BLOCKS[1], BWItemBlocks.class, "GT_LESU_CASING"); + if (ConfigHandler.teslastaff) + GameRegistry.registerItem(ItemRegistry.TESLASTAFF, ItemRegistry.TESLASTAFF.getUnlocalizedName()); + + GameRegistry.registerItem(ItemRegistry.ROCKCUTTER_LV, ItemRegistry.ROCKCUTTER_LV.getUnlocalizedName()); + GameRegistry.registerItem(ItemRegistry.ROCKCUTTER_MV, ItemRegistry.ROCKCUTTER_MV.getUnlocalizedName()); + GameRegistry.registerItem(ItemRegistry.ROCKCUTTER_HV, ItemRegistry.ROCKCUTTER_HV.getUnlocalizedName()); + GameRegistry.registerItem(ItemRegistry.TAB, "tabIconGT2"); + + new MTECreativeScanner( + MetaTileEntityIDs.CreativeScanner.ID, + "Creative Debug Scanner", + "Creative Debug Scanner", + 14); + ItemRegistry.eic = new MTEElectricImplosionCompressor( + ElectricImplosionCompressor.ID, + "ElectricImplosionCompressor", + "Electric Implosion Compressor").getStackForm(1L); + + // EIC depend on neutronium block to pass on structure updates + int bitmask = GregTechAPI.sMachineIDs.getOrDefault(GregTechAPI.sBlockMetal5, 0) | 1 << 2; + GregTechAPI.registerMachineBlock(GregTechAPI.sBlockMetal5, bitmask); + + // Also spacetime, transcendent metal, and universium + bitmask = GregTechAPI.sMachineIDs.getOrDefault(GregTechAPI.sBlockMetal9, 0) | 1 << 3 | 1 << 4 | 1 << 8; + GregTechAPI.registerMachineBlock(GregTechAPI.sBlockMetal9, bitmask); + + if (Mods.Avaritia.isModLoaded()) { + // Also infinity + bitmask = GregTechAPI.sMachineIDs.getOrDefault(LudicrousBlocks.resource_block, 0) | 1 << 1; + GregTechAPI.registerMachineBlock(LudicrousBlocks.resource_block, bitmask); + } + + ItemRegistry.THTR = new MTEThoriumHighTempReactor( + ThoriumHighTemperatureReactor.ID, + "THTR", + "Thorium High Temperature Reactor").getStackForm(1L); + MTEThoriumHighTempReactor.THTRMaterials.registeraTHR_Materials(); + ItemRegistry.HTGR = new MTEHighTempGasCooledReactor( + HighTemperatureGasCooledReactor.ID, + "HTGR", + "High Temperature Gas-cooled Reactor").getStackForm(1L); + MTEHighTempGasCooledReactor.HTGRMaterials.registeraTHR_Materials(); + + // ID 12728 + 15 + 49 IS TAKEN !!! (12792) + + GTOreDictUnificator + .add(OrePrefixes.block, Materials.BorosilicateGlass, new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)); + GTOreDictUnificator + .registerOre(OrePrefixes.block, Materials.NickelZincFerrite, new ItemStack(ItemRegistry.BW_BLOCKS[2])); + + int[] Diode2A = new int[] { Diode2A_ULV.ID, Diode2A_LV.ID, Diode2A_MV.ID, Diode2A_HV.ID, Diode2A_EV.ID, + Diode2A_IV.ID, Diode2A_LuV.ID, Diode2A_ZPM.ID, Diode2A_UV.ID, Diode2A_UHV.ID, Diode2A_UEV.ID, + Diode2A_UIV.ID, Diode2A_UMV.ID, Diode2A_UXV.ID, Diode2A_MAX.ID }; + int[] Diode4A = new int[] { Diode4A_ULV.ID, Diode4A_LV.ID, Diode4A_MV.ID, Diode4A_HV.ID, Diode4A_EV.ID, + Diode4A_IV.ID, Diode4A_LuV.ID, Diode4A_ZPM.ID, Diode4A_UV.ID, Diode4A_UHV.ID, Diode4A_UEV.ID, + Diode4A_UIV.ID, Diode4A_UMV.ID, Diode4A_UXV.ID, Diode4A_MAX.ID }; + int[] Diode8A = new int[] { Diode8A_ULV.ID, Diode8A_LV.ID, Diode8A_MV.ID, Diode8A_HV.ID, Diode8A_EV.ID, + Diode8A_IV.ID, Diode8A_LuV.ID, Diode8A_ZPM.ID, Diode8A_UV.ID, Diode8A_UHV.ID, Diode8A_UEV.ID, + Diode8A_UIV.ID, Diode8A_UMV.ID, Diode8A_UXV.ID, Diode8A_MAX.ID }; + int[] Diode12A = new int[] { Diode12A_ULV.ID, Diode12A_LV.ID, Diode12A_MV.ID, Diode12A_HV.ID, Diode12A_EV.ID, + Diode12A_IV.ID, Diode12A_LuV.ID, Diode12A_ZPM.ID, Diode12A_UV.ID, Diode12A_UHV.ID, Diode12A_UEV.ID, + Diode12A_UIV.ID, Diode12A_UMV.ID, Diode12A_UXV.ID, Diode12A_MAX.ID }; + int[] Diode16A = new int[] { Diode16A_ULV.ID, Diode16A_LV.ID, Diode16A_MV.ID, Diode16A_HV.ID, Diode16A_EV.ID, + Diode16A_IV.ID, Diode16A_LuV.ID, Diode16A_ZPM.ID, Diode16A_UV.ID, Diode16A_UHV.ID, Diode16A_UEV.ID, + Diode16A_UIV.ID, Diode16A_UMV.ID, Diode16A_UXV.ID, Diode16A_MAX.ID }; + int[] EnergyDistributors = new int[] { EnergyDistributor_ULV.ID, EnergyDistributor_LV.ID, + EnergyDistributor_MV.ID, EnergyDistributor_HV.ID, EnergyDistributor_EV.ID, EnergyDistributor_IV.ID, + EnergyDistributor_LuV.ID, EnergyDistributor_ZPM.ID, EnergyDistributor_UV.ID, EnergyDistributor_UHV.ID, + EnergyDistributor_UEV.ID, EnergyDistributor_UIV.ID, EnergyDistributor_UMV.ID, EnergyDistributor_UXV.ID, + EnergyDistributor_MAX.ID }; + + for (int i = 0; i < GTValues.VN.length - 1; i++) { + ItemRegistry.diode2A[i] = new MTEDiode( + Diode2A[i], + "diode" + "2A" + GTValues.VN[i], + StatCollector.translateToLocal("tile.diode.name") + " 2A " + GTValues.VN[i], + i).getStackForm(1L); + ItemRegistry.diode4A[i] = new MTEDiode( + Diode4A[i], + "diode" + "4A" + GTValues.VN[i], + StatCollector.translateToLocal("tile.diode.name") + " 4A " + GTValues.VN[i], + i).getStackForm(1L); + ItemRegistry.diode8A[i] = new MTEDiode( + Diode8A[i], + "diode" + "8A" + GTValues.VN[i], + StatCollector.translateToLocal("tile.diode.name") + " 8A " + GTValues.VN[i], + i).getStackForm(1L); + ItemRegistry.diode12A[i] = new MTEDiode( + Diode12A[i], + "diode" + "12A" + GTValues.VN[i], + StatCollector.translateToLocal("tile.diode.name") + " 12A " + GTValues.VN[i], + i).getStackForm(1L); + ItemRegistry.diode16A[i] = new MTEDiode( + Diode16A[i], + "diode" + "16A" + GTValues.VN[i], + StatCollector.translateToLocal("tile.diode.name") + " 16A " + GTValues.VN[i], + i).getStackForm(1L); + ItemRegistry.energyDistributor[i] = new MTEEnergyDistributor( + EnergyDistributors[i], + "energydistributor" + GTValues.VN[i], + StatCollector.translateToLocal("tile.energydistributor.name") + " " + GTValues.VN[i], + i).getStackForm(1L); + } + + ItemRegistry.acidGens[0] = new MTEAcidGenerator( + AcidGeneratorMV.ID, + "acidgenerator" + GTValues.VN[2], + StatCollector.translateToLocal("tile.acidgenerator.name") + " " + GTValues.VN[2], + 2).getStackForm(1); + ItemRegistry.acidGens[1] = new MTEAcidGenerator( + AcidGeneratorHV.ID, + "acidgenerator" + GTValues.VN[3], + StatCollector.translateToLocal("tile.acidgenerator.name") + " " + GTValues.VN[3], + 3).getStackForm(1); + ItemRegistry.acidGens[2] = new MTEAcidGenerator( + AcidGeneratorEV.ID, + "acidgenerator" + GTValues.VN[4], + StatCollector.translateToLocal("tile.acidgenerator.name") + " " + GTValues.VN[4], + 4).getStackForm(1); + + ItemRegistry.acidGensLV = new MTEAcidGenerator( + AcidGeneratorLV.ID, + "acidgenerator" + GTValues.VN[1], + StatCollector.translateToLocal("tile.acidgenerator.name") + " " + GTValues.VN[1], + +1).getStackForm(1L); + + ItemRegistry.dehp = new MTEDeepEarthHeatingPump(DeepEarthHeatingPump.ID, 1, "DEHP", "Deep Earth Heating Pump") + .getStackForm(1L); + ItemRegistry.megaMachines[0] = new MTEMegaBlastFurnace( + MegaBlastFurnace.ID, + "MegaBlastFurnace", + StatCollector.translateToLocal("tile.bw.mbf.name")).getStackForm(1L); + ItemRegistry.megaMachines[1] = new MTEMegaVacuumFreezer( + MegaVacuumFreezer.ID, + "MegaVacuumFreezer", + StatCollector.translateToLocal("tile.bw.mvf.name")).getStackForm(1L); + ItemRegistry.cal = new MTECircuitAssemblyLine( + CircuitAssemblyLine.ID, + "CircuitAssemblyLine", + "Circuit Assembly Line").getStackForm(1L); + ItemRegistry.compressedHatch = new MTECompressedFluidHatch( + CompressedFluidHatch.ID, + "CompressedFluidHatch", + "Liquid Air Fluid Hatch").getStackForm(1L); + ItemRegistry.giantOutputHatch = new MTEGiantOutputHatch( + GiantOutputHatch.ID, + "GiantOutputHatch", + "Giant Output Hatch").getStackForm(1L); + ItemRegistry.humongousInputHatch = new MTEHumongousInputHatch( + HumongousInputHatch.ID, + "HumongousInputHatch", + "Humongous Input Hatch").getStackForm(1L); + ItemRegistry.megaMachines[2] = new MTEMegaDistillTower( + MegaDistillationTower.ID, + "MegaDistillationTower", + "Mega Distillation Tower").getStackForm(1L); + ItemRegistry.megaMachines[3] = new MTEMegaChemicalReactor( + MegaChemicalReactor.ID, + "MegaChemicalReactor", + "Mega Chemical Reactor").getStackForm(1L); + ItemRegistry.megaMachines[4] = new MTEMegaOilCracker(MegaOilCracker.ID, "MegaOilCracker", "Mega Oil Cracker") + .getStackForm(1L); + + ItemRegistry.voidminer[2] = new MTEVoidMiners.VMUV(VoidMinerIII.ID, "VoidMiner3", "Void Miner III") + .getStackForm(1L); + ItemRegistry.voidminer[1] = new MTEVoidMiners.VMZPM(VoidMinerII.ID, "VoidMiner2", "Void Miner II") + .getStackForm(1L); + ItemRegistry.voidminer[0] = new MTEVoidMiners.VMLUV(VoidMinerI.ID, "VoidMiner1", "Void Miner I") + .getStackForm(1L); + + TecTechPipeEnergyLowPower = new MTELowPowerLaserPipe( + LowPowerLaserPipe.ID, + "pipe.lowpowerlaser", + "Low Power Laser Pipe").getStackForm(1L); + + int[] LowPowerLaserConverter32A = new int[] { LowPowerLaserConverter32A_EV.ID, LowPowerLaserConverter32A_IV.ID, + LowPowerLaserConverter32A_LuV.ID, LowPowerLaserConverter32A_ZPM.ID }; + int[] LowPowerLaserConverter64A = new int[] { LowPowerLaserConverter64A_EV.ID, LowPowerLaserConverter64A_IV.ID, + LowPowerLaserConverter64A_LuV.ID, LowPowerLaserConverter64A_ZPM.ID }; + int[] LowPowerLaserConverter96A = new int[] { LowPowerLaserConverter96A_EV.ID, LowPowerLaserConverter96A_IV.ID, + LowPowerLaserConverter96A_LuV.ID, LowPowerLaserConverter96A_ZPM.ID }; + int[] LowPowerLaserConverter128A = new int[] { LowPowerLaserConverter128A_EV.ID, + LowPowerLaserConverter128A_IV.ID, LowPowerLaserConverter128A_LuV.ID, LowPowerLaserConverter128A_ZPM.ID }; + int[][] LowPowerLaserConverter = new int[][] { LowPowerLaserConverter32A, LowPowerLaserConverter64A, + LowPowerLaserConverter96A, LowPowerLaserConverter128A }; + + for (int amps = 32; amps <= 128; amps += 32) { + for (int tier = 4; tier < 8; tier++) { + TecTechLaserAdditions[0][amps / 32 - 1][tier - 4] = new MTELowPowerLaserBox( + LowPowerLaserConverter[amps / 32 - 1][tier - 4], + GTValues.VN[tier] + "_LPLaser_Converter_" + amps, + GTValues.VN[tier] + " " + amps + "A" + " Low Power Laser Converter", + tier, + amps).getStackForm(1L); + } + } + + int[] LowPowerLaserTargetHatch32A = new int[] { LowPowerLaserTargetHatch32A_EV.ID, + LowPowerLaserTargetHatch32A_IV.ID, LowPowerLaserTargetHatch32A_LuV.ID, LowPowerLaserTargetHatch32A_ZPM.ID }; + int[] LowPowerLaserTargetHatch64A = new int[] { LowPowerLaserTargetHatch64A_EV.ID, + LowPowerLaserTargetHatch64A_IV.ID, LowPowerLaserTargetHatch64A_LuV.ID, LowPowerLaserTargetHatch64A_ZPM.ID }; + int[] LowPowerLaserTargetHatch96A = new int[] { LowPowerLaserTargetHatch96A_EV.ID, + LowPowerLaserTargetHatch96A_IV.ID, LowPowerLaserTargetHatch96A_LuV.ID, LowPowerLaserTargetHatch96A_ZPM.ID }; + int[] LowPowerLaserTargetHatch128A = new int[] { LowPowerLaserTargetHatch128A_EV.ID, + LowPowerLaserTargetHatch128A_IV.ID, LowPowerLaserTargetHatch128A_LuV.ID, + LowPowerLaserTargetHatch128A_ZPM.ID }; + int[][] LowPowerLaserTargetHatch = new int[][] { LowPowerLaserTargetHatch32A, LowPowerLaserTargetHatch64A, + LowPowerLaserTargetHatch96A, LowPowerLaserTargetHatch128A }; + for (int amps = 32; amps <= 128; amps += 32) { + for (int tier = 4; tier < 8; tier++) { + TecTechLaserAdditions[1][amps / 32 - 1][tier - 4] = new MTELowPowerLaserHatch( + LowPowerLaserTargetHatch[amps / 32 - 1][tier - 4], + GTValues.VN[tier] + "_LPLaser_Hatch_" + amps, + GTValues.VN[tier] + " " + amps + "A" + " Low Power Laser Target Hatch", + tier, + amps).getStackForm(1L); + } + } + + int[] LowPowerLaserSourceHatch32A = new int[] { LowPowerLaserSourceHatch32A_EV.ID, + LowPowerLaserSourceHatch32A_IV.ID, LowPowerLaserSourceHatch32A_LuV.ID, LowPowerLaserSourceHatch32A_ZPM.ID }; + int[] LowPowerLaserSourceHatch64A = new int[] { LowPowerLaserSourceHatch64A_EV.ID, + LowPowerLaserSourceHatch64A_IV.ID, LowPowerLaserSourceHatch64A_LuV.ID, LowPowerLaserSourceHatch64A_ZPM.ID }; + int[] LowPowerLaserSourceHatch96A = new int[] { LowPowerLaserSourceHatch96A_EV.ID, + LowPowerLaserSourceHatch96A_IV.ID, LowPowerLaserSourceHatch96A_LuV.ID, LowPowerLaserSourceHatch96A_ZPM.ID }; + int[] LowPowerLaserSourceHatch128A = new int[] { LowPowerLaserSourceHatch128A_EV.ID, + LowPowerLaserSourceHatch128A_IV.ID, LowPowerLaserSourceHatch128A_LuV.ID, + LowPowerLaserSourceHatch128A_ZPM.ID }; + int[][] LowPowerLaserSourceHatch = new int[][] { LowPowerLaserSourceHatch32A, LowPowerLaserSourceHatch64A, + LowPowerLaserSourceHatch96A, LowPowerLaserSourceHatch128A }; + for (int amps = 32; amps <= 128; amps += 32) { + for (int tier = 4; tier < 8; tier++) { + TecTechLaserAdditions[2][amps / 32 - 1][tier - 4] = new MTELowPowerLaserDynamo( + LowPowerLaserSourceHatch[amps / 32 - 1][tier - 4], + GTValues.VN[tier] + "_LPLaser_Dynamo_" + amps, + GTValues.VN[tier] + " " + amps + "A" + " Low Power Laser Source Hatch", + tier, + amps).getStackForm(1L); + } + } + } +} diff --git a/src/main/java/bartworks/common/loaders/LocalisationLoader.java b/src/main/java/bartworks/common/loaders/LocalisationLoader.java new file mode 100644 index 0000000000..1015b5ff18 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/LocalisationLoader.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.loaders; + +import gregtech.api.util.GTLanguageManager; + +public class LocalisationLoader { + + private LocalisationLoader() {} + + private static void localiseTooltips() { + GTLanguageManager + .addStringLocalization("metaitem.01.tooltip.purify.2", "Throw into Cauldron to get clean crushed Ore"); + GTLanguageManager + .addStringLocalization("metaitem.01.tooltip.nqgen", "Can be used as Enriched Naquadah Fuel Substitute"); + } + + private static void localiseAchivements() { + GTLanguageManager + .addStringLocalization("achievement.gt.blockmachines.electricimplosioncompressor", "Electric Implosions?"); + GTLanguageManager.addStringLocalization( + "achievement.gt.blockmachines.electricimplosioncompressor.desc", + "Basically a giant Hammer that presses Stuff - No more TNT!"); + GTLanguageManager.addStringLocalization("achievement.gt.blockmachines.dehp", "Heat from below!"); + GTLanguageManager + .addStringLocalization("achievement.gt.blockmachines.dehp.desc", "Get ALL the thermal energy!"); + GTLanguageManager + .addStringLocalization("achievement.gt.blockmachines.circuitassemblyline", "Cheaper Circuits?"); + GTLanguageManager.addStringLocalization( + "achievement.gt.blockmachines.circuitassemblyline.desc", + "Well, yes, but actually no..."); + GTLanguageManager.addStringLocalization("achievement.gt.blockmachines.voidminer1", "Ores from deep below!"); + GTLanguageManager + .addStringLocalization("achievement.gt.blockmachines.voidminer1.desc", "Is this some kind of Ex-Nihilo?"); + GTLanguageManager.addStringLocalization( + "achievement.gt.blockmachines.voidminer2", + "Ores from deep below 2! Electric Boogaloo!"); + GTLanguageManager + .addStringLocalization("achievement.gt.blockmachines.voidminer2.desc", "Ex-Nihilo, but faster!"); + GTLanguageManager.addStringLocalization( + "achievement.gt.blockmachines.voidminer3", + "Ores from deep below 3! Trinity Ex-Nihilo"); + GTLanguageManager + .addStringLocalization("achievement.gt.blockmachines.voidminer3.desc", "3x the trouble, 3x the fun!"); + } + + public static void localiseAll() { + localiseAchivements(); + localiseTooltips(); + } +} diff --git a/src/main/java/bartworks/common/loaders/RadioHatchMaterialLoader.java b/src/main/java/bartworks/common/loaders/RadioHatchMaterialLoader.java new file mode 100644 index 0000000000..79419c5649 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/RadioHatchMaterialLoader.java @@ -0,0 +1,365 @@ +package bartworks.common.loaders; + +import static bartworks.API.recipe.BartWorksRecipeMaps.radioHatchRecipes; +import static bartworks.util.BWRecipes.calcDecayTicks; +import static gregtech.api.enums.Mods.IndustrialCraft2; +import static gregtech.api.util.GTRecipeConstants.DECAY_TICKS; + +import bartworks.system.material.BWNonMetaMaterialItems; +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; + +// cursed way of using a recipe map... +public class RadioHatchMaterialLoader { + + public static void run() { + + for (Werkstoff material : Werkstoff.werkstoffHashSet) { + if (material == null || !material.getStats() + .isRadioactive()) { + continue; + } + + int level = (int) material.getStats() + .getProtons(); + if (material.hasItemType(OrePrefixes.stick)) GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick)) + .duration(1) + .eut(level) + .metadata(DECAY_TICKS, (int) calcDecayTicks(level)) + .noOptimize() + .addTo(radioHatchRecipes); + if (material.hasItemType(OrePrefixes.stickLong)) GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stickLong)) + .duration(2) + .eut(level) + .metadata(DECAY_TICKS, (int) calcDecayTicks(level)) + .noOptimize() + .addTo(radioHatchRecipes); + } + + for (Materials material : Materials.getAll()) { + if (material == null || material.mElement == null) continue; + boolean validProton = material.getProtons() >= 83 && !material.equals(Materials.Tritanium) // No Tritanium + && !material.equals(Materials.Naquadah); // Naquadah needs spacial value + if (validProton) { + int level = (int) material.getProtons(); + if (GTOreDictUnificator.get(OrePrefixes.stick, material, 1) != null) { + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.stick, material, 1)) + .duration(1) + .eut(level) + .metadata(DECAY_TICKS, (int) calcDecayTicks(level)) + .noOptimize() + .addTo(radioHatchRecipes); + } + if (GTOreDictUnificator.get(OrePrefixes.stickLong, material, 1) != null) { + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.stickLong, material, 1)) + .duration(2) + .eut(level) + .metadata(DECAY_TICKS, (int) calcDecayTicks(level)) + .noOptimize() + .addTo(radioHatchRecipes); + } + } + } + + Materials[] spacialMaterial = { Materials.Naquadah, Materials.NaquadahEnriched, Materials.Naquadria }; + int[] spacialValue = { 130, 140, 150 }; + + for (int i = 0; i < spacialMaterial.length; i++) { + if (GTOreDictUnificator.get(OrePrefixes.stick, spacialMaterial[i], 1) != null) { + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.stick, spacialMaterial[i], 1)) + .duration(1) + .eut(spacialValue[i]) + .metadata(DECAY_TICKS, (int) calcDecayTicks(spacialValue[i])) + .noOptimize() + .addTo(radioHatchRecipes); + } + + if (GTOreDictUnificator.get(OrePrefixes.stickLong, spacialMaterial[i], 1) != null) { + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.stickLong, spacialMaterial[i], 1)) + .duration(2) + .eut(spacialValue[i]) + .metadata(DECAY_TICKS, (int) calcDecayTicks(spacialValue[i])) + .noOptimize() + .addTo(radioHatchRecipes); + } + } + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.ThoriumCell_1.get(1)) + .duration(3) + .eut((int) Materials.Thorium.getProtons()) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.ThoriumCell_2.get(1)) + .duration(6) + .eut((int) Materials.Thorium.getProtons()) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.ThoriumCell_4.get(1)) + .duration(12) + .eut((int) Materials.Thorium.getProtons()) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.NaquadahCell_1.get(1)) + .duration(3) + .eut(140) + .metadata(DECAY_TICKS, (int) calcDecayTicks(140)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.NaquadahCell_2.get(1)) + .duration(6) + .eut(140) + .metadata(DECAY_TICKS, (int) calcDecayTicks(140)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.NaquadahCell_4.get(1)) + .duration(12) + .eut(140) + .metadata(DECAY_TICKS, (int) calcDecayTicks(140)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Moxcell_1.get(1)) + .duration(3) + .eut((int) Materials.Plutonium.getProtons()) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Moxcell_2.get(1)) + .duration(6) + .eut((int) Materials.Plutonium.getProtons()) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Moxcell_4.get(1)) + .duration(12) + .eut((int) Materials.Plutonium.getProtons()) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Uraniumcell_1.get(1)) + .duration(3) + .eut((int) Materials.Uranium.getProtons()) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Uraniumcell_2.get(1)) + .duration(6) + .eut((int) Materials.Uranium.getProtons()) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Uraniumcell_4.get(1)) + .duration(12) + .eut((int) Materials.Uranium.getProtons()) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.TiberiumCell_1.get(1)) + .duration(3) + .eut( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons()) + .metadata( + DECAY_TICKS, + (int) calcDecayTicks( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.TiberiumCell_2.get(1)) + .duration(6) + .eut( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons()) + .metadata( + DECAY_TICKS, + (int) calcDecayTicks( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.TiberiumCell_4.get(1)) + .duration(12) + .eut( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons()) + .metadata( + DECAY_TICKS, + (int) calcDecayTicks( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons())) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.TheCoreCell.get(1)) + .duration(96) + .eut(140) + .metadata(DECAY_TICKS, (int) calcDecayTicks(140)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Thorium_1.get(1)) + .duration(3) + .eut((int) Materials.Thorium.getProtons() / 10) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Thorium_2.get(1)) + .duration(6) + .eut((int) Materials.Thorium.getProtons() / 10) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Thorium_4.get(1)) + .duration(12) + .eut((int) Materials.Thorium.getProtons() / 10) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Naquadah_1.get(1)) + .duration(3) + .eut(14) + .metadata(DECAY_TICKS, (int) calcDecayTicks(14)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Naquadah_2.get(1)) + .duration(6) + .eut(14) + .metadata(DECAY_TICKS, (int) calcDecayTicks(14)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Naquadah_4.get(1)) + .duration(12) + .eut(14) + .metadata(DECAY_TICKS, (int) calcDecayTicks(14)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXSimpledepleted", 1)) + .duration(3) + .eut((int) Materials.Plutonium.getProtons() / 10) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXDualdepleted", 1)) + .duration(6) + .eut((int) Materials.Plutonium.getProtons() / 10) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXQuaddepleted", 1)) + .duration(12) + .eut((int) Materials.Plutonium.getProtons() / 10) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumSimpledepleted", 1)) + .duration(3) + .eut((int) Materials.Uranium.getProtons() / 10) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumDualdepleted", 1)) + .duration(6) + .eut((int) Materials.Uranium.getProtons() / 10) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumQuaddepleted", 1)) + .duration(12) + .eut((int) Materials.Uranium.getProtons() / 10) + .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.Depleted_Tiberium_1.get(1)) + .duration(3) + .eut( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons() / 10) + .metadata( + DECAY_TICKS, + (int) calcDecayTicks( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.Depleted_Tiberium_2.get(1)) + .duration(6) + .eut( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons() / 10) + .metadata( + DECAY_TICKS, + (int) calcDecayTicks( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.Depleted_Tiberium_4.get(1)) + .duration(12) + .eut( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons() / 10) + .metadata( + DECAY_TICKS, + (int) calcDecayTicks( + (int) WerkstoffLoader.Tiberium.getBridgeMaterial() + .getProtons() / 10)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.Depleted_TheCoreCell.get(1)) + .duration(96) + .eut(13) + .metadata(DECAY_TICKS, (int) calcDecayTicks(13)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.MNqCell_1.get(1)) + .duration(3) + .eut(150) + .metadata(DECAY_TICKS, (int) calcDecayTicks(150)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.MNqCell_2.get(1)) + .duration(6) + .eut(150) + .metadata(DECAY_TICKS, (int) calcDecayTicks(150)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.MNqCell_4.get(1)) + .duration(12) + .eut(150) + .metadata(DECAY_TICKS, (int) calcDecayTicks(150)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_MNq_1.get(1)) + .duration(3) + .eut(15) + .metadata(DECAY_TICKS, (int) calcDecayTicks(15)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_MNq_2.get(1)) + .duration(6) + .eut(15) + .metadata(DECAY_TICKS, (int) calcDecayTicks(15)) + .addTo(radioHatchRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_MNq_4.get(1)) + .duration(12) + .eut(15) + .metadata(DECAY_TICKS, (int) calcDecayTicks(15)) + .addTo(radioHatchRecipes); + + } +} diff --git a/src/main/java/bartworks/common/loaders/RecipeLoader.java b/src/main/java/bartworks/common/loaders/RecipeLoader.java new file mode 100644 index 0000000000..b6f0992c64 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/RecipeLoader.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.loaders; + +import bartworks.common.loaders.recipes.Assembler; +import bartworks.common.loaders.recipes.AssemblyLine; +import bartworks.common.loaders.recipes.Autoclave; +import bartworks.common.loaders.recipes.Centrifuge; +import bartworks.common.loaders.recipes.ChemicalBath; +import bartworks.common.loaders.recipes.ChemicalReactor; +import bartworks.common.loaders.recipes.CraftingRecipes; +import bartworks.common.loaders.recipes.Electrolyzer; +import bartworks.common.loaders.recipes.Extractor; +import bartworks.common.loaders.recipes.FakeRecipes; +import bartworks.common.loaders.recipes.FluidHeater; +import bartworks.common.loaders.recipes.FluidSolidifier; +import bartworks.common.loaders.recipes.FormingPress; +import bartworks.common.loaders.recipes.LaserEngraver; +import bartworks.common.loaders.recipes.Mixer; +import bartworks.common.loaders.recipes.Pulverizer; +import bartworks.common.loaders.recipes.PyrolyseOven; +import gregtech.api.util.GTModHandler; + +public class RecipeLoader { + + public static final long BITSD = GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE; + + public static void run() { + new Assembler().run(); + new AssemblyLine().run(); + new Autoclave().run(); + new Centrifuge().run(); + new ChemicalBath().run(); + new ChemicalReactor().run(); + new CraftingRecipes().run(); + new Electrolyzer().run(); + new Extractor().run(); + new FakeRecipes().run(); + new FluidHeater().run(); + new FluidSolidifier().run(); + new FormingPress().run(); + new LaserEngraver().run(); + new Mixer().run(); + new Pulverizer().run(); + new PyrolyseOven().run(); + } +} diff --git a/src/main/java/bartworks/common/loaders/RegisterGlassTiers.java b/src/main/java/bartworks/common/loaders/RegisterGlassTiers.java new file mode 100644 index 0000000000..fec9077e62 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/RegisterGlassTiers.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.loaders; + +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.Mods.BloodArsenal; +import static gregtech.api.enums.Mods.Botania; +import static gregtech.api.enums.Mods.EnderIO; +import static gregtech.api.enums.Mods.IndustrialCraft2; +import static gregtech.api.enums.Mods.Railcraft; +import static gregtech.api.enums.Mods.Thaumcraft; + +import java.util.Map; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +import bartworks.API.BorosilicateGlass; +import bartworks.API.GlassTier; +import tectech.thing.block.BlockQuantumGlass; + +// Register all your glasses here. +public class RegisterGlassTiers { + + public static void run() { + registerGlassAsTiered(); + registerGlassOreDicts(); + } + + private static void registerGlassAsTiered() { + + // --------------------------------------------------------------------- + // Register glass. + // --------------------------------------------------------------------- + + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 0, 3); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 1, 4); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 2, 5); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 3, 6); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 4, 7); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 5, 8); + + // Stained boro glass + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 6, 3); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 7, 3); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 8, 3); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 9, 3); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 10, 3); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 11, 3); + + // Incrementing tiers + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 12, 5); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 13, 9); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 14, 10); + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 15, 11); + + // Glass block 2 for transcendent (Really?) + GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock2(), 0, 12); + + // Other mods. + GlassTier.addCustomGlass(IndustrialCraft2.ID, "blockAlloyGlass", 0, 4); + GlassTier.addCustomGlass(BlockQuantumGlass.INSTANCE, 0, 8); + + if (EnderIO.isModLoaded()) { + for (int i = 0; i < 6; ++i) { + GlassTier.addCustomGlass(EnderIO.ID, "blockFusedQuartz", i, 3); + } + } + + if (Railcraft.isModLoaded()) { + for (int i = 0; i < 16; i++) { + GlassTier.addCustomGlass(Railcraft.ID, "glass", i, 3); + } + } + + // Magic alternatives. + if (BloodArsenal.isModLoaded()) { + GlassTier.addCustomGlass(BloodArsenal.ID, "blood_stained_glass", 0, 4); + } + + if (Botania.isModLoaded()) { + GlassTier.addCustomGlass(Botania.ID, "manaGlass", 0, 4); + GlassTier.addCustomGlass(Botania.ID, "elfGlass", 0, 5); + } + + if (Thaumcraft.isModLoaded()) { + // Warded glass + GlassTier.addCustomGlass(Thaumcraft.ID, "blockCosmeticOpaque", 2, 3); + } + } + + private static void registerGlassOreDicts() { + + // Register glass ore dict entries. + for (Map.Entry pair : GlassTier.getGlassMap() + .entrySet()) { + String oreName = "blockGlass" + VN[pair.getValue()]; + ItemStack itemStack = new ItemStack( + pair.getKey() + .getBlock(), + 1, + pair.getKey() + .getMeta()); + OreDictionary.registerOre(oreName, itemStack); + } + } +} diff --git a/src/main/java/bartworks/common/loaders/RegisterServerCommands.java b/src/main/java/bartworks/common/loaders/RegisterServerCommands.java new file mode 100644 index 0000000000..f0bc69491a --- /dev/null +++ b/src/main/java/bartworks/common/loaders/RegisterServerCommands.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.loaders; + +import bartworks.common.commands.ChangeConfig; +import bartworks.common.commands.ClearCraftingCache; +import bartworks.common.commands.GetWorkingDirectory; +import bartworks.common.commands.PrintRecipeListToFile; +import bartworks.common.commands.RunGC; +import bartworks.common.commands.SummonRuin; +import cpw.mods.fml.common.event.FMLServerStartingEvent; + +public class RegisterServerCommands { + + public static void registerAll(FMLServerStartingEvent event) { + event.registerServerCommand(new SummonRuin()); + event.registerServerCommand(new ChangeConfig()); + event.registerServerCommand(new PrintRecipeListToFile()); + event.registerServerCommand(new ClearCraftingCache()); + event.registerServerCommand(new GetWorkingDirectory()); + event.registerServerCommand(new RunGC()); + } +} diff --git a/src/main/java/bartworks/common/loaders/StaticRecipeChangeLoaders.java b/src/main/java/bartworks/common/loaders/StaticRecipeChangeLoaders.java new file mode 100644 index 0000000000..1baa5ac7f5 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/StaticRecipeChangeLoaders.java @@ -0,0 +1,562 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.loaders; + +import static bartworks.API.recipe.BartWorksRecipeMaps.electricImplosionCompressorRecipes; +import static gregtech.api.enums.Mods.TinkerConstruct; +import static gregtech.api.enums.TickTime.TICK; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import org.apache.commons.lang3.StringUtils; + +import com.google.common.collect.ArrayListMultimap; + +import bartworks.API.recipe.DynamicGTRecipe; +import bartworks.MainMod; +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.util.BWUtil; +import bartworks.util.log.DebugLog; +import bwcrossmod.BartWorksCrossmod; +import cpw.mods.fml.common.registry.GameRegistry; +import gnu.trove.map.hash.TObjectDoubleHashMap; +import gregtech.api.enums.Element; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TierEU; +import gregtech.api.objects.GTItemStack; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; + +public class StaticRecipeChangeLoaders { + + private static TObjectDoubleHashMap gtEbfGasRecipeTimeMultipliers = null; + private static TObjectDoubleHashMap gtEbfGasRecipeConsumptionMultipliers = null; + + public static final List whitelistForEBFNoGasRecipeDontCheckItemData = Arrays + .asList(GTModHandler.getModItem(TinkerConstruct.ID, "materials", 1L, 12) // Raw Aluminum -> Aluminium Ingot + // (coremod) + ); + + private StaticRecipeChangeLoaders() {} + + public static void addEBFGasRecipes() { + if (gtEbfGasRecipeTimeMultipliers == null) { + // For Werkstoff gases, use Werkstoff.Stats.setEbfGasRecipeTimeMultiplier + gtEbfGasRecipeTimeMultipliers = new TObjectDoubleHashMap<>(10, 0.5F, -1.0D); // keep default value as -1 + // Example to make Argon cut recipe times into a third of the original: + // gtEbfGasRecipeTimeMultipliers.put(Materials.Argon, 1.0D / 3.0D); + + gtEbfGasRecipeTimeMultipliers.put(Materials.Nitrogen, 1.0D); + gtEbfGasRecipeTimeMultipliers.put(Materials.Helium, 0.9D); + gtEbfGasRecipeTimeMultipliers.put(Materials.Argon, 0.8D); + gtEbfGasRecipeTimeMultipliers.put(Materials.Radon, 0.7D); + } + if (gtEbfGasRecipeConsumptionMultipliers == null) { + // For Werkstoff gases, use Werkstoff.Stats.setEbfGasRecipeConsumedAmountMultiplier + gtEbfGasRecipeConsumptionMultipliers = new TObjectDoubleHashMap<>(10, 0.5F, 1.0D); // keep default value as + // 1 + // Example to make Argon recipes use half the gas amount of the primary recipe (1000L->500L, 2000L->1000L + // etc.): + // gtEbfGasRecipeConsumptionMultipliers.put(Materials.Argon, 1.0D / 2.0D); + gtEbfGasRecipeConsumptionMultipliers.put(Materials.Nitrogen, 1.0D); + gtEbfGasRecipeConsumptionMultipliers.put(Materials.Helium, 1.0D); + gtEbfGasRecipeConsumptionMultipliers.put(Materials.Argon, 0.85D); + gtEbfGasRecipeConsumptionMultipliers.put(Materials.Radon, 0.7D); + } + ArrayListMultimap toChange = getRecipesToChange( + WerkstoffLoader.NOBLE_GAS, + WerkstoffLoader.ANAEROBE_GAS); + editRecipes(toChange, getNoGasItems(toChange)); + } + + public static void unificationRecipeEnforcer() { + List toRemove = new ArrayList<>(); + for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { + StaticRecipeChangeLoaders.runMaterialLinker(werkstoff); + if (werkstoff.getGenerationFeatures().enforceUnification) { + HashSet oreDictNames = new HashSet<>(werkstoff.getADDITIONAL_OREDICT()); + oreDictNames.add(werkstoff.getVarName()); + StaticRecipeChangeLoaders.runMoltenUnificationEnfocement(werkstoff); + StaticRecipeChangeLoaders.runUnficationDeleter(werkstoff); + for (String s : oreDictNames) for (OrePrefixes prefixes : OrePrefixes.values()) { + if (!werkstoff.hasItemType(prefixes)) continue; + String fullOreName = prefixes + s; + List ores = OreDictionary.getOres(fullOreName, false); + if (ores.size() <= 1) // empty or one entry, i.e. no unification needed + continue; + for (ItemStack toReplace : ores) { + ItemStack replacement = werkstoff.get(prefixes); + if (toReplace == null || GTUtility.areStacksEqual(toReplace, replacement) + || replacement == null + || replacement.getItem() == null) continue; + for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { + toRemove.clear(); + nextRecipe: for (GTRecipe recipe : map.getAllRecipes()) { + boolean removal = map.equals(RecipeMaps.fluidExtractionRecipes) + || map.equals(RecipeMaps.fluidSolidifierRecipes); + for (int i = 0; i < recipe.mInputs.length; i++) { + if (!GTUtility.areStacksEqual(recipe.mInputs[i], toReplace)) continue; + if (removal) { + toRemove.add(recipe); + continue nextRecipe; + } + recipe.mInputs[i] = GTUtility.copyAmount(recipe.mInputs[i].stackSize, replacement); + } + for (int i = 0; i < recipe.mOutputs.length; i++) { + if (!GTUtility.areStacksEqual(recipe.mOutputs[i], toReplace)) continue; + if (removal) { + toRemove.add(recipe); + continue nextRecipe; + } + recipe.mOutputs[i] = GTUtility + .copyAmount(recipe.mOutputs[i].stackSize, replacement); + } + if (recipe.mSpecialItems instanceof ItemStack specialItemStack) { + if (!GTUtility.areStacksEqual(specialItemStack, toReplace)) continue; + if (removal) { + toRemove.add(recipe); + continue nextRecipe; + } + recipe.mSpecialItems = GTUtility + .copyAmount(specialItemStack.stackSize, replacement); + } + } + map.getBackend() + .removeRecipes(toRemove); + } + } + } + } + } + } + + private static void runMoltenUnificationEnfocement(Werkstoff werkstoff) { + if (werkstoff.getGenerationFeatures().enforceUnification && werkstoff.hasItemType(OrePrefixes.cellMolten)) { + try { + FluidContainerRegistry.FluidContainerData data = new FluidContainerRegistry.FluidContainerData( + new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(werkstoff)), 144), + werkstoff.get(OrePrefixes.cellMolten), + Materials.Empty.getCells(1)); + Field f = GTUtility.class.getDeclaredField("sFilledContainerToData"); + f.setAccessible(true); + @SuppressWarnings("unchecked") + Map sFilledContainerToData = (Map) f + .get(null); + Set> toremFilledContainerToData = new HashSet<>(); + ItemStack toReplace = null; + for (Map.Entry entry : sFilledContainerToData + .entrySet()) { + final String MODID = GameRegistry.findUniqueIdentifierFor(data.filledContainer.getItem()).modId; + if (MainMod.MOD_ID.equals(MODID) || BartWorksCrossmod.MOD_ID.equals(MODID)) continue; + if (entry.getValue().fluid.equals(data.fluid) + && !entry.getValue().filledContainer.equals(data.filledContainer)) { + toReplace = entry.getValue().filledContainer; + toremFilledContainerToData.add(entry); + } + } + sFilledContainerToData.entrySet() + .removeAll(toremFilledContainerToData); + Set toremRecipeList = new HashSet<>(); + if (toReplace != null) { + for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { + toremRecipeList.clear(); + for (GTRecipe recipe : map.getAllRecipes()) { + for (ItemStack mInput : recipe.mInputs) { + if (GTUtility.areStacksEqual(mInput, toReplace)) { + toremRecipeList.add(recipe); + // recipe.mInputs[i] = data.filledContainer; + } + } + for (ItemStack mOutput : recipe.mOutputs) { + if (GTUtility.areStacksEqual(mOutput, toReplace)) { + toremRecipeList.add(recipe); + // recipe.mOutputs[i] = data.filledContainer; + if (map == RecipeMaps.fluidCannerRecipes + && GTUtility.areStacksEqual(mOutput, data.filledContainer) + && !recipe.mFluidInputs[0].equals(data.fluid)) { + toremRecipeList.add(recipe); + // recipe.mOutputs[i] = data.filledContainer; + } + } + } + if (recipe.mSpecialItems instanceof ItemStack + && GTUtility.areStacksEqual((ItemStack) recipe.mSpecialItems, toReplace)) { + toremRecipeList.add(recipe); + // recipe.mSpecialItems = data.filledContainer; + } + } + map.getBackend() + .removeRecipes(toremRecipeList); + } + } + GTUtility.addFluidContainerData(data); + } catch (NoSuchFieldException | IllegalAccessException | ClassCastException e) { + e.printStackTrace(); + } + } + } + + private static void runUnficationDeleter(Werkstoff werkstoff) { + if (werkstoff.getType() == Werkstoff.Types.ELEMENT && werkstoff.getBridgeMaterial() != null + && Element.get(werkstoff.getToolTip()) != Element._NULL) { + werkstoff.getBridgeMaterial().mElement = Element.get(werkstoff.getToolTip()); + Element.get(werkstoff.getToolTip()).mLinkedMaterials = new ArrayList<>(); + Element.get(werkstoff.getToolTip()).mLinkedMaterials.add(werkstoff.getBridgeMaterial()); + } + + for (OrePrefixes prefixes : OrePrefixes.values()) if (werkstoff.hasItemType(prefixes)) { + GTOreDictUnificator.set(prefixes, werkstoff.getBridgeMaterial(), werkstoff.get(prefixes), true, true); + for (ItemStack stack : OreDictionary.getOres(prefixes + werkstoff.getVarName())) { + GTOreDictUnificator.addAssociation(prefixes, werkstoff.getBridgeMaterial(), stack, false); + GTOreDictUnificator.getAssociation(stack).mUnificationTarget = werkstoff.get(prefixes); + } + } + } + + private static void runMaterialLinker(Werkstoff werkstoff) { + if (werkstoff.getType() == Werkstoff.Types.ELEMENT && werkstoff.getBridgeMaterial() != null + && Element.get(werkstoff.getToolTip()) != Element._NULL) { + werkstoff.getBridgeMaterial().mElement = Element.get(werkstoff.getToolTip()); + Element.get(werkstoff.getToolTip()).mLinkedMaterials = new ArrayList<>(); + Element.get(werkstoff.getToolTip()).mLinkedMaterials.add(werkstoff.getBridgeMaterial()); + } + + for (OrePrefixes prefixes : OrePrefixes.values()) + if (werkstoff.hasItemType(prefixes) && werkstoff.getBridgeMaterial() != null) { + GTOreDictUnificator.set(prefixes, werkstoff.getBridgeMaterial(), werkstoff.get(prefixes), true, true); + for (ItemStack stack : OreDictionary.getOres(prefixes + werkstoff.getVarName())) { + GTOreDictUnificator.addAssociation(prefixes, werkstoff.getBridgeMaterial(), stack, false); + } + } + } + + /** + * Constructs a list of recipes to change by scanning all EBF recipes for uses of noble gases. + * + * @param GasTags list of gas tags to look out for in EBF recipes + * @return A multimap from the gas tag (noble and/or anaerobic) to all the recipes containing a gas with that tag + */ + private static ArrayListMultimap getRecipesToChange(SubTag... GasTags) { + ArrayListMultimap toAdd = ArrayListMultimap.create(); + for (GTRecipe recipe : RecipeMaps.blastFurnaceRecipes.getAllRecipes()) { + if (recipe.mFluidInputs != null && recipe.mFluidInputs.length > 0) { + Materials mat = getMaterialFromInputFluid(recipe); + if (mat != Materials._NULL) { + for (SubTag tag : GasTags) { + if (mat.contains(tag)) { + DebugLog.log( + "Found EBF Recipe to change, Output:" + + BWUtil.translateGTItemStack(recipe.mOutputs[0])); + toAdd.put(tag, recipe); + } + } + } + } + } + return toAdd; + } + + /** + * Scans EBF recipes for no-gas variants of the recipes present in base. Adds these recipes to the base multimap. + * + * @param base The recipe multimap to scan and modify + * @return Set of item outputs (recipe.mOutputs[0]) of the no-gas recipes + */ + private static HashSet getNoGasItems(ArrayListMultimap base) { + HashSet toAdd = new HashSet<>(); + ArrayListMultimap repToAdd = ArrayListMultimap.create(); + for (GTRecipe recipe : RecipeMaps.blastFurnaceRecipes.getAllRecipes()) { + for (SubTag tag : base.keySet()) recipeLoop: for (GTRecipe baseRe : base.get(tag)) { + if (recipe.mInputs.length == baseRe.mInputs.length && recipe.mOutputs.length == baseRe.mOutputs.length) + for (int i = 0; i < recipe.mInputs.length; i++) { + ItemStack tmpInput = recipe.mInputs[i]; + if ((recipe.mFluidInputs == null || recipe.mFluidInputs.length == 0) + && (whitelistForEBFNoGasRecipeDontCheckItemData.stream() + .anyMatch(s -> GTUtility.areStacksEqual(s, tmpInput)) + || BWUtil.checkStackAndPrefix(recipe.mInputs[i]) + && BWUtil.checkStackAndPrefix(baseRe.mInputs[i]) + && GTOreDictUnificator.getAssociation(recipe.mInputs[i]).mMaterial.mMaterial.equals( + GTOreDictUnificator.getAssociation(baseRe.mInputs[i]).mMaterial.mMaterial) + && GTUtility.areStacksEqual(recipe.mOutputs[0], baseRe.mOutputs[0]))) { + toAdd.add(recipe.mOutputs[0]); + repToAdd.put(tag, recipe); + continue recipeLoop; + } + } + } + } + base.putAll(repToAdd); + return toAdd; + } + + private static int transformEBFGasRecipeTime(int originalDuration, long originalGasProtons, long newGasProtons) { + double protonTerm = originalGasProtons * (newGasProtons >= originalGasProtons ? 1.0D : 2.75D) - newGasProtons; + return Math.max(1, (int) (originalDuration / 200D * Math.max(200D + protonTerm, 1D))); + } + + private static int transformEBFGasRecipeTime(GTRecipe recipe, Materials originalGas, Materials newGas) { + double newEbfMul = gtEbfGasRecipeTimeMultipliers.get(newGas); + double originalEbfMul = gtEbfGasRecipeTimeMultipliers.get(originalGas); + if (newEbfMul < 0.0D || originalEbfMul < 0.0D) { + return transformEBFGasRecipeTime(recipe.mDuration, originalGas.getProtons(), newGas.getProtons()); + } + return Math.max(1, (int) (recipe.mDuration * newEbfMul / originalEbfMul)); + } + + private static int transformEBFGasRecipeTime(GTRecipe recipe, Materials originalGas, Werkstoff newGas) { + double newEbfMul = newGas.getStats() + .getEbfGasRecipeTimeMultiplier(); + double originalEbfMul = gtEbfGasRecipeTimeMultipliers.get(originalGas); + if (newEbfMul < 0.0D || originalEbfMul < 0.0D) { + return transformEBFGasRecipeTime( + recipe.mDuration, + originalGas.getProtons(), + newGas.getStats() + .getProtons()); + } + return Math.max(1, (int) (recipe.mDuration * newEbfMul / originalEbfMul)); + } + + private static int transformEBFNoGasRecipeTime(GTRecipe recipe, Materials originalGas) { + return transformEBFGasRecipeTime(recipe.mDuration, originalGas.getProtons(), 0); + } + + private static void editEBFMaterialRecipes(SubTag GasTag, GTRecipe recipe, Materials originalGas, + HashSet toAdd) { + for (Materials newGas : Materials.values()) { + if (newGas.contains(GasTag)) { + int time = transformEBFGasRecipeTime(recipe, originalGas, newGas); + int gasAmount = Math.max( + 1, + (int) Math.round(recipe.mFluidInputs[0].amount * gtEbfGasRecipeConsumptionMultipliers.get(newGas))); + if (recipe.mFluidInputs != null && recipe.mFluidInputs.length == 1 + && recipe.mFluidInputs[0].isFluidEqual(newGas.getGas(0))) { + // preserve original recipe owner + toAdd.add( + new DynamicGTRecipe( + false, + recipe.mInputs, + recipe.mOutputs, + recipe.mSpecialItems, + recipe.mChances, + new FluidStack[] { newGas.getGas(gasAmount) }, + recipe.mFluidOutputs, + time, + recipe.mEUt, + recipe.mSpecialValue, + recipe)); + } else { + // new recipe + toAdd.add( + new GTRecipe( + false, + recipe.mInputs, + recipe.mOutputs, + recipe.mSpecialItems, + recipe.mChances, + new FluidStack[] { newGas.getGas(gasAmount) }, + recipe.mFluidOutputs, + time, + recipe.mEUt, + recipe.mSpecialValue)); + } + } + } + } + + private static void editEBFWerkstoffRecipes(SubTag GasTag, GTRecipe recipe, Materials originalGas, + HashSet toAdd) { + for (Werkstoff newGas : Werkstoff.werkstoffHashMap.values()) { + if (newGas.contains(GasTag)) { + int time = transformEBFGasRecipeTime(recipe, originalGas, newGas); + int gasAmount = Math.max( + 1, + (int) Math.round( + recipe.mFluidInputs[0].amount * newGas.getStats() + .getEbfGasRecipeConsumedAmountMultiplier())); + if (recipe.mFluidInputs != null && recipe.mFluidInputs.length == 1 + && recipe.mFluidInputs[0] + .isFluidEqual(new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(newGas)), 0))) { + // preserve original recipe owner + toAdd.add( + new DynamicGTRecipe( + false, + recipe.mInputs, + recipe.mOutputs, + recipe.mSpecialItems, + recipe.mChances, + new FluidStack[] { + new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(newGas)), gasAmount) }, + recipe.mFluidOutputs, + time, + recipe.mEUt, + recipe.mSpecialValue, + recipe)); + } else { + // new recipe + toAdd.add( + new GTRecipe( + false, + recipe.mInputs, + recipe.mOutputs, + recipe.mSpecialItems, + recipe.mChances, + new FluidStack[] { + new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(newGas)), gasAmount) }, + recipe.mFluidOutputs, + time, + recipe.mEUt, + recipe.mSpecialValue)); + } + } + } + } + + private static void editEBFNoGasRecipes(GTRecipe recipe, Materials originalGas, HashSet toAdd, + HashSet noGas) { + for (ItemStack is : noGas) { + byte circuitConfiguration = 1; + if (GTUtility.areStacksEqual(is, recipe.mOutputs[0])) { + ArrayList inputs = new ArrayList<>(recipe.mInputs.length); + for (ItemStack stack : recipe.mInputs) + if (!GTUtility.areStacksEqual(GTUtility.getIntegratedCircuit(11), stack) + && !GTUtility.areStacksEqual(GTUtility.getIntegratedCircuit(14), stack) + && !GTUtility.areStacksEqual(GTUtility.getIntegratedCircuit(19), stack)) { + if (BWUtil.checkStackAndPrefix(stack)) circuitConfiguration = (byte) (OrePrefixes.dustSmall + .equals(GTOreDictUnificator.getAssociation(stack).mPrefix) ? 4 + : OrePrefixes.dustTiny.equals(GTOreDictUnificator.getAssociation(stack).mPrefix) ? 9 + : 1); + inputs.add(stack); + } + inputs.add(GTUtility.getIntegratedCircuit(circuitConfiguration)); + toAdd.add( + new DynamicGTRecipe( + false, + inputs.toArray(new ItemStack[0]), + recipe.mOutputs, + recipe.mSpecialItems, + recipe.mChances, + null, + recipe.mFluidOutputs, + transformEBFNoGasRecipeTime(recipe, originalGas), + recipe.mEUt, + recipe.mSpecialValue, + recipe)); + break; + } + } + } + + private static void removeDuplicateGasRecipes(HashSet toAdd) { + HashSet duplicates = new HashSet<>(); + for (GTRecipe recipe : toAdd) { + for (GTRecipe recipe2 : toAdd) { + if (recipe.mEUt != recipe2.mEUt || recipe.mDuration != recipe2.mDuration + || recipe.mSpecialValue != recipe2.mSpecialValue + || recipe == recipe2 + || recipe.mInputs.length != recipe2.mInputs.length + || recipe.mFluidInputs.length != recipe2.mFluidInputs.length) continue; + boolean isSame = true; + for (int i = 0; i < recipe.mInputs.length; i++) { + if (!GTUtility.areStacksEqual(recipe.mInputs[i], recipe2.mInputs[i])) isSame = false; + } + for (int i = 0; i < recipe.mFluidInputs.length; i++) { + if (!GTUtility.areFluidsEqual(recipe.mFluidInputs[i], recipe2.mFluidInputs[i])) isSame = false; + } + if (isSame) duplicates.add(recipe2); + } + } + toAdd.removeAll(duplicates); + } + + private static Materials getMaterialFromInputFluid(GTRecipe recipe) { + String materialString = recipe.mFluidInputs[0].getFluid() + .getName(); + materialString = StringUtils.removeStart(materialString, "molten"); + materialString = StringUtils.removeStart(materialString, "fluid"); + materialString = StringUtils.capitalize(materialString); + return Materials.get(materialString); + } + + private static void editRecipes(ArrayListMultimap base, HashSet noGas) { + HashSet toAdd = new HashSet<>(); + + for (SubTag gasTag : base.keySet()) { + for (GTRecipe recipe : base.get(gasTag)) { + if (recipe.mFluidInputs != null && recipe.mFluidInputs.length > 0) { + Materials originalGas = getMaterialFromInputFluid(recipe); + if (originalGas != Materials._NULL) { + editEBFWerkstoffRecipes(gasTag, recipe, originalGas, toAdd); + editEBFMaterialRecipes(gasTag, recipe, originalGas, toAdd); + editEBFNoGasRecipes(recipe, originalGas, toAdd, noGas); + } + } + } + RecipeMaps.blastFurnaceRecipes.getBackend() + .removeRecipes(base.get(gasTag)); + } + + removeDuplicateGasRecipes(toAdd); + toAdd.forEach(RecipeMaps.blastFurnaceRecipes::add); + } + + public static void addElectricImplosionCompressorRecipes() { + RecipeMaps.implosionRecipes.getAllRecipes() + .stream() + .filter(e -> e.mInputs != null) + .forEach( + recipe -> GTValues.RA.stdBuilder() + .itemInputs( + Arrays.stream(recipe.mInputs) + .filter(e -> !StaticRecipeChangeLoaders.checkForExplosives(e)) + .distinct() + .toArray(ItemStack[]::new)) + .itemOutputs(recipe.mOutputs) + .duration(1 * TICK) + .eut(TierEU.RECIPE_UEV) + .addTo(electricImplosionCompressorRecipes)); + + // Custom EIC recipes. + new ElectricImplosionCompressorRecipes().run(); + } + + private static boolean checkForExplosives(ItemStack input) { + return GTUtility.areStacksEqual(input, new ItemStack(Blocks.tnt)) + || GTUtility.areStacksEqual(input, GTModHandler.getIC2Item("industrialTnt", 1L)) + || GTUtility.areStacksEqual(input, GTModHandler.getIC2Item("dynamite", 1L)) + || GTUtility.areStacksEqual(input, ItemList.Block_Powderbarrel.get(1L)); + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/Assembler.java b/src/main/java/bartworks/common/loaders/recipes/Assembler.java new file mode 100644 index 0000000000..912b0f8c9a --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/Assembler.java @@ -0,0 +1,270 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; + +import bartworks.common.loaders.ItemRegistry; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class Assembler implements Runnable { + + @Override + public void run() { + Materials[] cables = { // Cable material used in the acid gen, diode and energy distributor below + Materials.Lead, // ULV + Materials.Tin, // LV + Materials.AnnealedCopper, // MV + Materials.Gold, // HV + Materials.Aluminium, // EV + Materials.Tungsten, // IV + Materials.VanadiumGallium, // LuV + Materials.Naquadah, // ZPM + Materials.NaquadahAlloy, // UV + Materials.SuperconductorUV // UHV + }; + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(ItemRegistry.BW_BLOCKS[0], 1, 0), + Materials.Lapis.getPlates(9), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2L), + GTUtility.getIntegratedCircuit(17)) + .itemOutputs(new ItemStack(ItemRegistry.BW_BLOCKS[0], 1, 1)) + .fluidInputs(FluidRegistry.getFluidStack("ic2coolant", 1000)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(ItemRegistry.BW_BLOCKS[0], 1, 1), + Materials.Lapis.getBlocks(8), + GTUtility.getIntegratedCircuit(17)) + .itemOutputs(new ItemStack(ItemRegistry.BW_BLOCKS[1])) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Machine_Multi_BlastFurnace.get(64), GTUtility.getIntegratedCircuit(17)) + .itemOutputs(ItemRegistry.megaMachines[0]) + .fluidInputs(Materials.SolderingAlloy.getMolten(9216)) + .duration(1 * HOURS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Machine_Multi_VacuumFreezer.get(64), GTUtility.getIntegratedCircuit(17)) + .itemOutputs(ItemRegistry.megaMachines[1]) + .fluidInputs(Materials.SolderingAlloy.getMolten(9216)) + .duration(1 * HOURS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Distillation_Tower.get(64), GTUtility.getIntegratedCircuit(17)) + .itemOutputs(ItemRegistry.megaMachines[2]) + .fluidInputs(Materials.SolderingAlloy.getMolten(9216)) + .duration(1 * HOURS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Machine_Multi_LargeChemicalReactor.get(64), GTUtility.getIntegratedCircuit(17)) + .itemOutputs(ItemRegistry.megaMachines[3]) + .fluidInputs(Materials.SolderingAlloy.getMolten(9216)) + .duration(1 * HOURS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.OilCracker.get(64), GTUtility.getIntegratedCircuit(17)) + .itemOutputs(ItemRegistry.megaMachines[4]) + .fluidInputs(Materials.SolderingAlloy.getMolten(9216)) + .duration(1 * HOURS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.AnnealedCopper, 64L), + GTUtility.getIntegratedCircuit(17)) + .itemOutputs(new ItemStack(ItemRegistry.BW_BLOCKS[2], 1, 1)) + .fluidInputs(Materials.Plastic.getMolten(1152L)) + .duration(1 * TICKS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1L), + Materials.Aluminium.getPlates(1), + ItemList.Circuit_Board_Plastic.get(1L), + ItemList.Battery_RE_LV_Lithium.get(1L)) + .itemOutputs(new ItemStack(ItemRegistry.CIRCUIT_PROGRAMMER)) + .fluidInputs(Materials.SolderingAlloy.getMolten(288L)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Circuit_Parts_GlassFiber.get(32), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, 8), + WerkstoffLoader.CubicZirconia.get(OrePrefixes.gemExquisite, 2)) + .itemOutputs( + new ItemStack( + ItemRegistry.TecTechPipeEnergyLowPower.getItem(), + 1, + ItemRegistry.TecTechPipeEnergyLowPower.getItemDamage())) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(72)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + ItemStack[][] converters = ItemRegistry.TecTechLaserAdditions[0]; + ItemStack[][] input = ItemRegistry.TecTechLaserAdditions[1]; + ItemStack[][] dynamo = ItemRegistry.TecTechLaserAdditions[2]; + + ItemList[] emitters = { ItemList.Emitter_EV, ItemList.Emitter_IV, ItemList.Emitter_LuV, ItemList.Emitter_ZPM }; + + ItemList[] sensors = { ItemList.Sensor_EV, ItemList.Sensor_IV, ItemList.Sensor_LuV, ItemList.Sensor_ZPM }; + + OrePrefixes[] prefixes = { OrePrefixes.cableGt04, OrePrefixes.cableGt08, OrePrefixes.cableGt12, + OrePrefixes.cableGt16 }; + + for (int j = 0; j < 4; j++) { + for (int i = 0; i < 4; i++) { + ItemStack converter = converters[j][i]; + ItemStack eInput = input[j][i]; + ItemStack eDynamo = dynamo[j][i]; + long recipeConsumption = switch (i) { + case 0 -> TierEU.RECIPE_EV; + case 1 -> TierEU.RECIPE_IV; + case 2 -> TierEU.RECIPE_LuV; + case 3 -> TierEU.RECIPE_ZPM; + default -> TierEU.RECIPE_EV; + }; + + int solderingAmount = Math.max(144 * i, 72) * (j + 1); + + GTValues.RA.stdBuilder() + .itemInputs( + + new ItemStack( + ItemRegistry.TecTechPipeEnergyLowPower.getItem(), + ((j + 1) * 16), + ItemRegistry.TecTechPipeEnergyLowPower.getItemDamage()), + WerkstoffLoader.CubicZirconia.get(OrePrefixes.lens), + GTOreDictUnificator.get(prefixes[j], cables[i + 4], 8), + emitters[i].get(2 * (j + 1)), + sensors[i].get(2 * (j + 1)), + ItemList.TRANSFORMERS[4 + i].get(2 * (j + 1))) + .itemOutputs(converter) + .fluidInputs(Materials.SolderingAlloy.getMolten(solderingAmount)) + .duration((10 * (j + 1)) * SECONDS) + .eut(recipeConsumption) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack( + ItemRegistry.TecTechPipeEnergyLowPower.getItem(), + ((j + 1) * 16), + ItemRegistry.TecTechPipeEnergyLowPower.getItemDamage()), + WerkstoffLoader.CubicZirconia.get(OrePrefixes.lens), + GTOreDictUnificator.get(prefixes[j], cables[i + 4], 8), + emitters[i].get(2 * (j + 1)), + sensors[i].get(2 * (j + 1)), + ItemList.TRANSFORMERS[4 + i].get(2 * (j + 1))) + .itemOutputs(converter) + .fluidInputs(Materials.SolderingAlloy.getMolten(solderingAmount)) + .duration((10 * (j + 1)) * SECONDS) + .eut(recipeConsumption) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack( + ItemRegistry.TecTechPipeEnergyLowPower.getItem(), + (j + 1) * 16, + ItemRegistry.TecTechPipeEnergyLowPower.getItemDamage()), + WerkstoffLoader.CubicZirconia.get(OrePrefixes.lens), + GTOreDictUnificator.get(prefixes[j], cables[i + 4], 8), + sensors[i].get(2 * (j + 1)), + ItemList.HATCHES_ENERGY[4 + i].get(2 * (j + 1))) + .itemOutputs(eInput) + .fluidInputs(Materials.SolderingAlloy.getMolten(solderingAmount)) + .duration((10 * (j + 1)) * SECONDS) + .eut(recipeConsumption) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack( + ItemRegistry.TecTechPipeEnergyLowPower.getItem(), + (j + 1) * 16, + ItemRegistry.TecTechPipeEnergyLowPower.getItemDamage()), + WerkstoffLoader.CubicZirconia.get(OrePrefixes.lens), + GTOreDictUnificator.get(prefixes[j], cables[i + 4], 8), + emitters[i].get(2 * (j + 1)), + ItemList.HATCHES_DYNAMO[4 + i].get(2 * (j + 1))) + .itemOutputs(eDynamo) + .fluidInputs(Materials.SolderingAlloy.getMolten(solderingAmount)) + .duration((10 * (j + 1) * SECONDS)) + .eut(recipeConsumption) + .addTo(assemblerRecipes); + } + } + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Input_HV.get(64), + Materials.LiquidAir.getCells(1), + GTUtility.getIntegratedCircuit(17)) + .itemOutputs(ItemRegistry.compressedHatch.copy()) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Hatch_Output_HV.get(64), GTUtility.getIntegratedCircuit(17)) + .itemOutputs(ItemRegistry.giantOutputHatch.copy()) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 6), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1)) + .itemOutputs(new ItemStack(GregTechAPI.sBlockCasings3, 1, 12)) + .fluidInputs(Materials.Concrete.getMolten(1296)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(GregTechAPI.sBlockCasings3, 1, 12), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Europium, 6), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Europium, 24)) + .itemOutputs(new ItemStack(GregTechAPI.sBlockCasings8, 1, 5)) + .fluidInputs(Materials.Lead.getMolten(864)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/AssemblyLine.java b/src/main/java/bartworks/common/loaders/recipes/AssemblyLine.java new file mode 100644 index 0000000000..650bb02918 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/AssemblyLine.java @@ -0,0 +1,81 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.AssemblyLine; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.common.loaders.ItemRegistry; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; + +public class AssemblyLine implements Runnable { + + @Override + public void run() { + Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null + ? FluidRegistry.getFluid("molten.indalloy140") + : FluidRegistry.getFluid("molten.solderingalloy"); + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemList.Pump_IV.get(1L)) + .metadata(RESEARCH_TIME, 1 * HOURS) + .itemInputs( + ItemList.Pump_IV.get(16), + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Ultimate, 32L), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.HSSE, 16L), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.HSSE, 16L), + ItemList.Field_Generator_LuV.get(8)) + .fluidInputs( + new FluidStack(solderIndalloy, 32 * 144), + Materials.Polytetrafluoroethylene.getMolten(32 * 144)) + .itemOutputs(ItemRegistry.dehp) + .eut(TierEU.RECIPE_LuV) + .duration(4 * MINUTES + 10 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemList.OreDrill4.get(1L)) + .metadata(RESEARCH_TIME, 25 * MINUTES + 36 * SECONDS) + .itemInputs( + ItemList.OreDrill4.get(1L), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Tritanium, 9L), + Materials.Europium.getPlates(3), + ItemList.Electric_Motor_LuV.get(9L), + ItemList.Sensor_LuV.get(9L), + ItemList.Field_Generator_LuV.get(9L), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Europium, 36L)) + .fluidInputs(new FluidStack(solderIndalloy, 1440), WerkstoffLoader.Neon.getFluidOrGas(20000)) + .itemOutputs(ItemRegistry.voidminer[0].copy()) + .eut(TierEU.RECIPE_LuV) + .duration(5 * MINUTES) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemList.Machine_LuV_CircuitAssembler.get(1L)) + .metadata(RESEARCH_TIME, 20 * MINUTES) + .itemInputs( + ItemList.Machine_LuV_CircuitAssembler.get(1L), + ItemList.Robot_Arm_LuV.get(4L), + ItemList.Electric_Motor_LuV.get(4L), + ItemList.Field_Generator_LuV.get(1L), + ItemList.Emitter_LuV.get(1L), + ItemList.Sensor_LuV.get(1L), + WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.plate, 8)) + .fluidInputs(new FluidStack(solderIndalloy, 1440)) + .itemOutputs(ItemRegistry.cal.copy()) + .eut(TierEU.RECIPE_LuV) + .duration(20 * MINUTES) + .addTo(AssemblyLine); + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/Autoclave.java b/src/main/java/bartworks/common/loaders/recipes/Autoclave.java new file mode 100644 index 0000000000..12140611f7 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/Autoclave.java @@ -0,0 +1,40 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import bartworks.common.loaders.BioItemList; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; + +public class Autoclave implements Runnable { + + @Override + public void run() { + Materials[] sterilizers = { Materials.Ammonia, Materials.Chlorine, Materials.Ethanol, Materials.Methanol }; + for (Materials used : sterilizers) { + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Circuit_Parts_PetriDish.get(1L)) + .itemOutputs(BioItemList.getPetriDish(null)) + .fluidInputs(used.getGas(10L) != null ? used.getGas(8L) : used.getFluid(16L)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(autoclaveRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Items.glass_bottle)) + .itemOutputs(BioItemList.getDNASampleFlask(null)) + .fluidInputs(used.getGas(10L) != null ? used.getGas(8L) : used.getFluid(16L)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(autoclaveRecipes); + + } + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/Centrifuge.java b/src/main/java/bartworks/common/loaders/recipes/Centrifuge.java new file mode 100644 index 0000000000..a689d39ce8 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/Centrifuge.java @@ -0,0 +1,141 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import java.util.Arrays; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.common.loaders.BioCultureLoader; +import bartworks.common.loaders.BioItemList; +import bartworks.common.loaders.FluidLoader; +import bartworks.common.tileentities.multis.MTEHighTempGasCooledReactor; +import bartworks.common.tileentities.multis.MTEThoriumHighTempReactor; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTUtility; + +public class Centrifuge implements Runnable { + + @Override + public void run() { + GTValues.RA.stdBuilder() + .itemInputs(Materials.Thorium.getDust(1)) + .itemOutputs( + Materials.Thorium.getDust(1), + Materials.Thorium.getDust(1), + WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 1), + WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 1), + WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 1)) + .outputChances(800, 375, 22, 22, 5) + .duration(8 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + ItemStack[] pellets = new ItemStack[6]; + Arrays.fill(pellets, new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials, 64, 4)); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials, 1, 3), + GTUtility.getIntegratedCircuit(17)) + .itemOutputs(pellets) + .duration(40 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials, 1, 5), + GTUtility.getIntegratedCircuit(17)) + .itemOutputs(new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials, 64, 6)) + .duration(40 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials, 1, 6)) + .itemOutputs(Materials.Lead.getDust(1)) + .outputChances(300) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(centrifugeRecipes); + + int i = 0; + for (MTEHighTempGasCooledReactor.HTGRMaterials.Fuel_ fuel : MTEHighTempGasCooledReactor.HTGRMaterials.sHTGR_Fuel) { + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 1, i + 3), + GTUtility.getIntegratedCircuit(17)) + .itemOutputs( + new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 64, i + 4), + new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 64, i + 4), + new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 64, i + 4), + new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 64, i + 4)) + .duration(10 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 1, i + 5), + GTUtility.getIntegratedCircuit(17)) + .itemOutputs(new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 64, i + 6)) + .duration(2 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(centrifugeRecipes); + + GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 1, i + 6)) + .itemOutputs( + fuel.recycledItems[0], + fuel.recycledItems[1], + fuel.recycledItems[2], + fuel.recycledItems[3], + fuel.recycledItems[4]) + .outputChances(fuel.recycleChances); + if (fuel.recycledFluid != null) { + recipeBuilder.fluidOutputs(fuel.recycledFluid); + } + recipeBuilder.duration(1 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(centrifugeRecipes); + + i += MTEHighTempGasCooledReactor.HTGRMaterials.MATERIALS_PER_FUEL; + } + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(17)) + .itemOutputs(BioItemList.getOther(4)) + .fluidInputs(new FluidStack(BioCultureLoader.eColi.getFluid(), 1000)) + .fluidOutputs(new FluidStack(FluidLoader.BioLabFluidMaterials[1], 10)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(17)) + .fluidInputs(new FluidStack(FluidLoader.BioLabFluidMaterials[1], 1000)) + .fluidOutputs(new FluidStack(FluidLoader.BioLabFluidMaterials[3], 250)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(17)) + .fluidInputs(new FluidStack(BioCultureLoader.CommonYeast.getFluid(), 1000)) + .fluidOutputs(new FluidStack(FluidLoader.BioLabFluidMaterials[2], 10)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(centrifugeRecipes); + + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/ChemicalBath.java b/src/main/java/bartworks/common/loaders/recipes/ChemicalBath.java new file mode 100644 index 0000000000..478acdb81f --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/ChemicalBath.java @@ -0,0 +1,83 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import net.minecraft.item.ItemStack; + +import bartworks.common.loaders.ItemRegistry; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; + +public class ChemicalBath implements Runnable { + + @Override + public void run() { + + for (int i = 0; i < Dyes.dyeBrown.getSizeOfFluidList(); ++i) { + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 6)) + .fluidInputs(Dyes.dyeRed.getFluidDye(i, 36)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(2) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 7)) + .fluidInputs(Dyes.dyeGreen.getFluidDye(i, 36)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(2) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 8)) + .fluidInputs(Dyes.dyePurple.getFluidDye(i, 36)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(2) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 9)) + .fluidInputs(Dyes.dyeYellow.getFluidDye(i, 36)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(2) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 10)) + .fluidInputs(Dyes.dyeLime.getFluidDye(i, 36)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(2) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 11)) + .fluidInputs(Dyes.dyeBrown.getFluidDye(i, 36)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(2) + .addTo(chemicalBathRecipes); + + } + + for (int i = 6; i < 11; i++) { + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, i)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .fluidInputs(Materials.Chlorine.getGas(50)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(2) + .addTo(chemicalBathRecipes); + + } + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/ChemicalReactor.java b/src/main/java/bartworks/common/loaders/recipes/ChemicalReactor.java new file mode 100644 index 0000000000..0270a31355 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/ChemicalReactor.java @@ -0,0 +1,28 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; + +import net.minecraftforge.fluids.FluidStack; + +import bartworks.common.loaders.FluidLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTUtility; + +public class ChemicalReactor implements Runnable { + + @Override + public void run() { + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(10)) + .fluidInputs(new FluidStack(FluidLoader.heatedfulvicAcid, 1000)) + .fluidOutputs(new FluidStack(FluidLoader.Kerogen, 1000)) + .duration(3 * SECONDS + 15 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(UniversalChemical); + + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java b/src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java new file mode 100644 index 0000000000..2cb768ec70 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/CraftingRecipes.java @@ -0,0 +1,468 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_EV; +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_HV; +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_IV; +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UV; +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.BioLab_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.BioVat; +import static gregtech.api.enums.MetaTileEntityIDs.LESU; +import static gregtech.api.enums.MetaTileEntityIDs.ManualTrafo; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_EV; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_HV; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_IV; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UV; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.Windmill; +import static gregtech.api.enums.Mods.IndustrialCraft2; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraftforge.oredict.OreDictionary; + +import bartworks.common.configs.ConfigHandler; +import bartworks.common.loaders.BioItemList; +import bartworks.common.loaders.ItemRegistry; +import bartworks.common.loaders.RecipeLoader; +import bartworks.common.tileentities.multis.MTEBioVat; +import bartworks.common.tileentities.multis.MTELESU; +import bartworks.common.tileentities.multis.MTEManualTrafo; +import bartworks.common.tileentities.multis.MTEWindmill; +import bartworks.common.tileentities.tiered.GT_MetaTileEntity_RadioHatch; +import bartworks.common.tileentities.tiered.MTEBioLab; +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ISubTagContainer; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import ic2.core.Ic2Items; + +public class CraftingRecipes implements Runnable { + + @Override + public void run() { + + Materials[] cables = { // Cable material used in the acid gen, diode and energy distributor below + Materials.Lead, // ULV + Materials.Tin, // LV + Materials.AnnealedCopper, // MV + Materials.Gold, // HV + Materials.Aluminium, // EV + Materials.Tungsten, // IV + Materials.VanadiumGallium, // LuV + Materials.Naquadah, // ZPM + Materials.NaquadahAlloy, // UV + Materials.SuperconductorUV // UHV + }; + + ISubTagContainer[] hulls = { // Plate material used in the acid gen, diode and energy distributor below + Materials.WroughtIron, // ULV + Materials.Steel, // LV + Materials.Aluminium, // MV + Materials.StainlessSteel, // HV + Materials.Titanium, // EV + Materials.TungstenSteel, // IV + WerkstoffLoader.LuVTierMaterial, // LuV + Materials.Iridium, // ZPM + Materials.Osmium, // UV + Materials.Naquadah // UHV + }; + + ItemStack[] bats = { ItemList.Battery_Hull_LV.get(1L), ItemList.Battery_Hull_MV.get(1L), + ItemList.Battery_Hull_HV.get(1L) }; + ItemStack[] chreac = { ItemList.Machine_MV_ChemicalReactor.get(1L), ItemList.Machine_HV_ChemicalReactor.get(1L), + ItemList.Machine_EV_ChemicalReactor.get(1L) }; + + GTModHandler.addCraftingRecipe( + new MTELESU(LESU.ID, "LESU", "L.E.S.U.").getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "CDC", "SBS", "CFC", 'C', "circuitAdvanced", 'D', ItemList.Cover_Screen.get(1L), 'S', + GTOreDictUnificator.get(OrePrefixes.cableGt12, Materials.Platinum, 1L), 'B', + new ItemStack(ItemRegistry.BW_BLOCKS[1]), 'F', ItemList.Field_Generator_HV.get(1L) }); + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.ROCKCUTTER_MV), + RecipeLoader.BITSD, + new Object[] { "DS ", "DP ", "DCB", 'D', GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1L), + 'S', GTOreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 1L), 'C', "circuitGood", 'B', + ItemList.IC2_AdvBattery.get(1L) }); + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.ROCKCUTTER_LV), + RecipeLoader.BITSD, + new Object[] { "DS ", "DP ", "DCB", 'D', GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1L), + 'S', GTOreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1L), 'C', "circuitBasic", 'B', + ItemList.IC2_ReBattery.get(1L) }); + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.ROCKCUTTER_HV), + RecipeLoader.BITSD, + new Object[] { "DS ", "DP ", "DCB", 'D', GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1L), + 'S', GTOreDictUnificator.get(OrePrefixes.stick, Materials.Iridium, 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1L), 'C', "circuitAdvanced", 'B', + ItemList.IC2_EnergyCrystal.get(1L) }); + + if (ConfigHandler.teslastaff) { + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.TESLASTAFF), + RecipeLoader.BITSD, + new Object[] { "BO ", "OP ", " P", 'O', + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 1L), 'B', + ItemList.Energy_LapotronicOrb.get(1L), 'P', "plateAlloyIridium", }); + } + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.PUMPPARTS, 1, 0), // tube + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " fG", " G ", "G ", 'G', ItemList.Circuit_Parts_Glass_Tube.get(1L) }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.PUMPPARTS, 1, 1), // motor + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "GLP", "LSd", "PfT", 'G', + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Steel, 1L), 'L', + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Steel, 1L), 'S', + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 1L), 'P', new ItemStack(Blocks.piston), 'T', + new ItemStack(ItemRegistry.PUMPPARTS, 1, 0) }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.PUMPBLOCK, 1, 0), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "IPI", "PMP", "ISI", 'I', GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), + 'P', GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Wood, 1L), 'M', + new ItemStack(ItemRegistry.PUMPPARTS, 1, 1), 'S', Ic2Items.ironFurnace }); + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.WINDMETER), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "SWF", "Sf ", "Ss ", 'S', "stickWood", 'W', new ItemStack(Blocks.wool, 1, Short.MAX_VALUE), + 'F', new ItemStack(Items.string), }); + + for (int i = 0; i < 3; i++) { + Materials cable = cables[i + 2]; + ItemStack machinehull = ItemList.MACHINE_HULLS[i + 2].get(1L); + GTModHandler.addCraftingRecipe( + ItemRegistry.acidGens[i], + RecipeLoader.BITSD, + new Object[] { "HRH", "HCH", "HKH", 'H', bats[i], 'K', + GTOreDictUnificator.get(OrePrefixes.cableGt01, cable, 1L), 'C', machinehull, 'R', chreac[i] }); + } + + GTModHandler.addCraftingRecipe( + ItemRegistry.acidGensLV, + RecipeLoader.BITSD, + new Object[] { "HRH", "KCK", "HKH", 'H', ItemList.Battery_Hull_LV.get(1L), 'K', + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 1L), 'C', ItemList.Hull_LV.get(1L), 'R', + ItemList.Machine_LV_ChemicalReactor.get(1L), }); + + for (int i = 0; i < 9; i++) { + try { + Materials cable = cables[i]; + ItemStack hull = hulls[i] instanceof Materials + ? GTOreDictUnificator.get(OrePrefixes.plate, hulls[i], 1L) + : ((Werkstoff) hulls[i]).get(OrePrefixes.plate); + ItemStack machinehull = ItemList.MACHINE_HULLS[i].get(1L); + + GTModHandler.addCraftingRecipe( + ItemRegistry.energyDistributor[i], + RecipeLoader.BITSD, + new Object[] { "PWP", "WCW", "PWP", 'W', GTOreDictUnificator.get(OrePrefixes.wireGt16, cable, 1L), + 'P', hull, 'C', machinehull }); + GTModHandler.addCraftingRecipe( + ItemRegistry.diode12A[i], + RecipeLoader.BITSD, + new Object[] { "WDW", "DCD", "PDP", 'D', OrePrefixes.componentCircuit.get(Materials.Diode), 'W', + GTOreDictUnificator.get(OrePrefixes.cableGt12, cable, 1L), 'P', hull, 'C', machinehull }); + GTModHandler.addCraftingRecipe( + ItemRegistry.diode8A[i], + RecipeLoader.BITSD, + new Object[] { "WDW", "DCD", "PDP", 'D', OrePrefixes.componentCircuit.get(Materials.Diode), 'W', + GTOreDictUnificator.get(OrePrefixes.cableGt08, cable, 1L), 'P', hull, 'C', machinehull }); + GTModHandler.addCraftingRecipe( + ItemRegistry.diode4A[i], + RecipeLoader.BITSD, + new Object[] { "WDW", "DCD", "PDP", 'D', OrePrefixes.componentCircuit.get(Materials.Diode), 'W', + GTOreDictUnificator.get(OrePrefixes.cableGt04, cable, 1L), 'P', hull, 'C', machinehull }); + GTModHandler.addCraftingRecipe( + ItemRegistry.diode2A[i], + RecipeLoader.BITSD, + new Object[] { "WDW", "DCD", "PDP", 'D', OrePrefixes.componentCircuit.get(Materials.Diode), 'W', + GTOreDictUnificator.get(OrePrefixes.cableGt02, cable, 1L), 'P', hull, 'C', machinehull }); + GTModHandler.addCraftingRecipe( + ItemRegistry.diode16A[i], + RecipeLoader.BITSD, + new Object[] { "WHW", "DCD", "PDP", 'H', OrePrefixes.componentCircuit.get(Materials.Inductor), 'D', + OrePrefixes.componentCircuit.get(Materials.Diode), 'W', + GTOreDictUnificator.get(OrePrefixes.wireGt16, cable, 1L), 'P', hull, 'C', machinehull }); + + } catch (ArrayIndexOutOfBoundsException ignored) { + + } + + } + + String[] stones = { "stone", "stoneSmooth" }; + String[] granites = { "blockGranite", "stoneGranite", "Granite", "granite" }; + for (String granite : granites) { + for (String stone : stones) { + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 0), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "SSS", "DfD", " h ", 'S', stone, 'D', + new ItemStack(GregTechAPI.sBlockGranites, 1, OreDictionary.WILDCARD_VALUE), }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 1), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "hDf", "SSS", 'S', stone, 'D', + new ItemStack(GregTechAPI.sBlockGranites, 1, OreDictionary.WILDCARD_VALUE), }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 0), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "SSS", "DfD", " h ", 'S', stone, 'D', granite, }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 1), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "hDf", "SSS", 'S', stone, 'D', granite, }); + } + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 2), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "STS", "h f", "SBS", 'S', granite, 'T', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 0), + 'B', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 1), }); + } + + GTModHandler.addCraftingRecipe( + new MTEManualTrafo(ManualTrafo.ID, "bw.manualtrafo", StatCollector.translateToLocal("tile.manutrafo.name")) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "SCS", "CHC", "ZCZ", 'S', GTOreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 1L), + 'C', new ItemStack(ItemRegistry.BW_BLOCKS[2]), 'H', ItemList.Hull_HV.get(1L), 'Z', "circuitAdvanced" }); + + GTModHandler.addCraftingRecipe( + new MTEWindmill(Windmill.ID, "bw.windmill", StatCollector.translateToLocal("tile.bw.windmill.name")) + .getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "BHB", "WGW", "BWB", 'B', new ItemStack(Blocks.brick_block), 'W', + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), 'H', new ItemStack(Blocks.hopper), 'G', + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 2), }); + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 2), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "STS", "h f", "SBS", 'S', + new ItemStack(GregTechAPI.sBlockGranites, 1, OreDictionary.WILDCARD_VALUE), 'T', + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 0), 'B', + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 1), }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "WLs", "WLh", "WLf", 'L', new ItemStack(Items.leather), 'W', "logWood", }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "WLs", "WLh", "WLf", 'L', new ItemStack(Blocks.carpet), 'W', "logWood", }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "WLs", "WLh", "WLf", 'L', new ItemStack(Items.paper), 'W', "logWood", }); + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "WEs", "WZh", "WDf", 'E', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'Z', + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'D', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), + 'W', "logWood", }); + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "WEs", "WZh", "WDf", 'Z', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'E', + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'D', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), + 'W', "logWood", }); + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "WEs", "WZh", "WDf", 'D', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'Z', + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'E', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), + 'W', "logWood", }); + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "WEs", "WZh", "WDf", 'E', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'D', + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'Z', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), + 'W', "logWood", }); + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "WEs", "WZh", "WDf", 'Z', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'D', + new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'E', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), + 'W', "logWood", }); + + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.LEATHER_ROTOR), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "hPf", "PWP", "sPr", 'P', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'W', + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.WOOL_ROTOR), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "hPf", "PWP", "sPr", 'P', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'W', + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.PAPER_ROTOR), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "hPf", "PWP", "sPr", 'P', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), 'W', + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.COMBINED_ROTOR), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "hPf", "PWP", "sPr", 'P', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), 'W', + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), }); + GTModHandler.addCraftingRecipe( + new ItemStack(ItemRegistry.ROTORBLOCK), + RecipeLoader.BITSD, + new Object[] { "WRW", "RGR", "WRW", 'R', GTOreDictUnificator.get(OrePrefixes.ring, Materials.Iron, 1L), 'W', + "plankWood", 'G', GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), }); + + GTModHandler.addCraftingRecipe( + ItemRegistry.THTR, + RecipeLoader.BITSD, + new Object[] { "BZB", "BRB", "BZB", 'B', new ItemStack(GregTechAPI.sBlockCasings3, 1, 12), 'R', + GTModHandler.getModItem(IndustrialCraft2.ID, "blockGenerator", 1, 5), 'Z', "circuitUltimate" }); + + GTModHandler.addCraftingRecipe( + ItemRegistry.HTGR, + RecipeLoader.BITSD, + new Object[] { "BZB", "BRB", "BZB", 'B', new ItemStack(GregTechAPI.sBlockCasings8, 1, 5), 'R', + GTModHandler.getModItem(IndustrialCraft2.ID, "blockGenerator", 1, 5), 'Z', "circuitSuperconductor" }); + + // DNAExtractionModule + GTModHandler.addCraftingRecipe( + BioItemList.mBioLabParts[0], + RecipeLoader.BITSD, + new Object[] { "TET", "CFC", "TST", 'T', GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1L), + 'E', ItemList.Emitter_EV.get(1L), 'C', + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Aluminium, 1L), 'S', + ItemList.Sensor_EV.get(1L), 'F', ItemList.Field_Generator_EV.get(1L) }); + + // PCRThermoclyclingModule + GTModHandler.addCraftingRecipe( + BioItemList.mBioLabParts[1], + RecipeLoader.BITSD, + new Object[] { "NEN", "CFC", "NSN", 'N', + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Nichrome, 1L), 'E', ItemList.Emitter_EV.get(1L), + 'C', GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Aluminium, 1L), 'S', + ItemList.Sensor_EV.get(1L), 'F', ItemList.Field_Generator_EV.get(1L) }); + + // PlasmidSynthesisModule + GTModHandler.addCraftingRecipe( + BioItemList.mBioLabParts[2], + RecipeLoader.BITSD, + new Object[] { "SFE", "CPC", "NFN", 'N', + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Nichrome, 1L), 'C', "circuit" + Materials.EV, + 'F', ItemList.Field_Generator_EV.get(1L), 'E', ItemList.Emitter_EV.get(1L), 'S', + ItemList.Sensor_EV.get(1L), 'P', GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1L), }); + // TransformationModule + GTModHandler.addCraftingRecipe( + BioItemList.mBioLabParts[3], + RecipeLoader.BITSD, + new Object[] { "SFE", "CPC", "NFN", 'N', + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 1L), 'C', "circuit" + Materials.LuV, + 'F', ItemList.Field_Generator_LuV.get(1L), 'E', ItemList.Emitter_LuV.get(1L), 'S', + ItemList.Sensor_LuV.get(1L), 'P', WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.plate, 1), }); + + // ClonalCellularSynthesisModule + GTModHandler.addCraftingRecipe( + BioItemList.mBioLabParts[4], + RecipeLoader.BITSD, + new Object[] { "FEF", "CPC", "FSF", 'N', + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 1L), 'C', "circuit" + Materials.LuV, + 'F', ItemList.Field_Generator_LuV.get(1L), 'E', ItemList.Emitter_LuV.get(1L), 'S', + ItemList.Sensor_LuV.get(1L), 'P', WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.plate, 1), }); + + GTModHandler.addCraftingRecipe( + new MTEBioVat(BioVat.ID, "bw.biovat", StatCollector.translateToLocal("tile.biovat.name")).getStackForm(1L), + RecipeLoader.BITSD, + new Object[] { "GCG", "KHK", "GCG", 'G', new ItemStack(ItemRegistry.bw_glasses[0], 1, 1), 'C', + "circuit" + Materials.EV, 'K', GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Silver, 1L), 'H', + ItemList.MACHINE_HULLS[3].get(1L) }); + + ItemStack[] Pistons2 = { ItemList.Electric_Piston_HV.get(1L), ItemList.Electric_Piston_EV.get(1L), + ItemList.Electric_Piston_IV.get(1L), ItemList.Electric_Piston_LuV.get(1L), + ItemList.Electric_Piston_ZPM.get(1L), ItemList.Electric_Piston_UV.get(1L) }; + ItemStack[] BioLab2 = new ItemStack[GTValues.VN.length - 3]; + ItemStack[] RadioHatch2 = new ItemStack[GTValues.VN.length - 3]; + Materials[] cables2 = { Materials.Gold, Materials.Aluminium, Materials.Tungsten, Materials.VanadiumGallium, + Materials.Naquadah, Materials.NaquadahAlloy, Materials.SuperconductorUHV }; + Materials[] hulls2 = { Materials.StainlessSteel, Materials.Titanium, Materials.TungstenSteel, Materials.Chrome, + Materials.Iridium, Materials.Osmium, Materials.Naquadah }; + Materials[] wireMat2 = { Materials.Kanthal, Materials.Nichrome, Materials.TungstenSteel, Materials.Naquadah, + Materials.NaquadahAlloy, Materials.SuperconductorUHV }; + Materials[] circuits2 = { Materials.HV, Materials.EV, Materials.IV, Materials.LuV, Materials.ZPM, + Materials.UV }; + + int[] BioLab = new int[] { BioLab_HV.ID, BioLab_EV.ID, BioLab_IV.ID, BioLab_LuV.ID, BioLab_ZPM.ID, BioLab_UV.ID, + BioLab_UHV.ID, BioLab_UEV.ID, BioLab_UIV.ID, BioLab_UMV.ID, BioLab_UXV.ID, BioLab_MAX.ID }; + int[] RadioHatch = new int[] { RadioHatch_HV.ID, RadioHatch_EV.ID, RadioHatch_IV.ID, RadioHatch_LuV.ID, + RadioHatch_ZPM.ID, RadioHatch_UV.ID, RadioHatch_UHV.ID, RadioHatch_UEV.ID, RadioHatch_UIV.ID, + RadioHatch_UMV.ID, RadioHatch_UXV.ID, RadioHatch_MAX.ID }; + + for (int i = 3; i < GTValues.VN.length - 1; i++) { + BioLab2[i - 3] = new MTEBioLab( + BioLab[i - 3], + "bw.biolab" + GTValues.VN[i], + GTValues.VN[i] + " " + StatCollector.translateToLocal("tile.biolab.name"), + i).getStackForm(1L); + RadioHatch2[i - 3] = new GT_MetaTileEntity_RadioHatch( + RadioHatch[i - 3], + "bw.radiohatch" + GTValues.VN[i], + GTValues.VN[i] + " " + StatCollector.translateToLocal("tile.radiohatch.name"), + i).getStackForm(1L); + try { + ItemStack machinehull = ItemList.MACHINE_HULLS[i].get(1L); + GTModHandler.addCraftingRecipe( + BioLab2[i - 3], + RecipeLoader.BITSD, + new Object[] { "PFP", "WCW", "OGO", 'F', + GTOreDictUnificator.get(OrePrefixes.frameGt, hulls2[i - 3], 1L), 'W', + GTOreDictUnificator.get(OrePrefixes.wireGt01, wireMat2[i - 3], 1L), 'P', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', + "circuit" + circuits2[i - 3], 'C', machinehull }); + GTModHandler.addCraftingRecipe( + RadioHatch2[i - 3], + RecipeLoader.BITSD, + new Object[] { "DPD", "DCD", "DKD", 'D', + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1L), 'C', machinehull, 'K', + GTOreDictUnificator.get(OrePrefixes.cableGt08, cables2[i - 3], 1L), 'P', Pistons2[i - 3] }); + } catch (ArrayIndexOutOfBoundsException ignored) { + + } + } + + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/Electrolyzer.java b/src/main/java/bartworks/common/loaders/recipes/Electrolyzer.java new file mode 100644 index 0000000000..26653743fc --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/Electrolyzer.java @@ -0,0 +1,151 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; + +public class Electrolyzer implements Runnable { + + // TODO: fix the chemical balance issues there are below + @Override + public void run() { + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Forsterit.get(OrePrefixes.dust, 7)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L)) + .fluidOutputs(Materials.Oxygen.getGas(2000L)) + .duration(10 * SECONDS) + .eut(90) + .addTo(electrolyzerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.RedZircon.get(OrePrefixes.dust, 6)) + .itemOutputs( + WerkstoffLoader.Zirconium.get(OrePrefixes.dust, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L)) + .fluidOutputs(Materials.Oxygen.getGas(2000L)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(90) + .addTo(electrolyzerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Fayalit.get(OrePrefixes.dust, 7)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L)) + .fluidOutputs(Materials.Oxygen.getGas(2000L)) + .duration(16 * SECONDS) + .eut(90) + .addTo(electrolyzerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Prasiolite.get(OrePrefixes.dust, 16)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 5L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L)) + .duration(29 * SECONDS) + .eut(90) + .addTo(electrolyzerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Hedenbergit.get(OrePrefixes.dust, 10)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 2L)) + .fluidOutputs(Materials.Oxygen.getGas(2000L)) + .duration(15 * SECONDS) + .eut(90) + .addTo(electrolyzerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.FuchsitAL.get(OrePrefixes.dust, 21), ItemList.Cell_Empty.get(2)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 3L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3L), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2)) + .fluidOutputs(Materials.Oxygen.getGas(2000L)) + .duration(19 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(electrolyzerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.FuchsitCR.get(OrePrefixes.dust, 21), ItemList.Cell_Empty.get(2)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 3L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3L), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2)) + .fluidOutputs(Materials.Oxygen.getGas(2000L)) + .duration(23 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(electrolyzerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.VanadioOxyDravit.get(OrePrefixes.dust, 53), ItemList.Cell_Empty.get(3)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 3L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnalium, 6L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 6), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 3), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 3)) + .fluidOutputs(Materials.Oxygen.getGas(19000L)) + .duration(35 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(electrolyzerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.ChromoAluminoPovondrait.get(OrePrefixes.dust, 53), ItemList.Cell_Empty.get(3)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 3L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnalium, 6L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 6), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 3), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 3)) + .fluidOutputs(Materials.Oxygen.getGas(19000L)) + .duration(36 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(electrolyzerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.FluorBuergerit.get(OrePrefixes.dust, 50), ItemList.Cell_Empty.get(3)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 3L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 6L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 6), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 3), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Fluorine, 3)) + .fluidOutputs(Materials.Oxygen.getGas(6000L)) + .duration(36 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(electrolyzerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Olenit.get(OrePrefixes.dust, 51), ItemList.Cell_Empty.get(1)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 9L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 6L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 3), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1)) + .fluidOutputs(Materials.Oxygen.getGas(1000L)) + .duration(39 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(electrolyzerRecipes); + + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/Extractor.java b/src/main/java/bartworks/common/loaders/recipes/Extractor.java new file mode 100644 index 0000000000..1e99259b3f --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/Extractor.java @@ -0,0 +1,44 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.enums.Mods.CropLoadCore; +import static gregtech.api.recipe.RecipeMaps.extractorRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +import bartworks.common.loaders.BioItemList; +import bartworks.util.BWUtil; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.TierEU; + +public class Extractor implements Runnable { + + @Override + public void run() { + List oreCropVine = OreDictionary.getOres("cropVine", false); + if (CropLoadCore.isModLoaded() && !oreCropVine.isEmpty()) { + for (ItemStack stack : oreCropVine) { + + GTValues.RA.stdBuilder() + .itemInputs(BWUtil.setStackSize(stack, 12)) + .itemOutputs(BioItemList.getOther(1)) + .duration(25 * SECONDS) + .eut((int) TierEU.RECIPE_HV) + .addTo(extractorRecipes); + + } + } + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Circuit_Chip_Stemcell.get(1L)) + .itemOutputs(BioItemList.getOther(4)) + .duration(25 * SECONDS) + .eut((int) TierEU.RECIPE_LuV) + .addTo(extractorRecipes); + + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/FakeRecipes.java b/src/main/java/bartworks/common/loaders/recipes/FakeRecipes.java new file mode 100644 index 0000000000..372100c187 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/FakeRecipes.java @@ -0,0 +1,11 @@ +package bartworks.common.loaders.recipes; + +import bartworks.common.tileentities.multis.MTEHighTempGasCooledReactor; + +public class FakeRecipes implements Runnable { + + @Override + public void run() { + MTEHighTempGasCooledReactor.HTGRMaterials.register_fake_THR_Recipes(); + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/FluidHeater.java b/src/main/java/bartworks/common/loaders/recipes/FluidHeater.java new file mode 100644 index 0000000000..cc8e3cb64a --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/FluidHeater.java @@ -0,0 +1,26 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import net.minecraftforge.fluids.FluidStack; + +import bartworks.common.loaders.FluidLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTUtility; + +public class FluidHeater implements Runnable { + + @Override + public void run() { + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(10)) + .fluidInputs(new FluidStack(FluidLoader.fulvicAcid, 1000)) + .fluidOutputs(new FluidStack(FluidLoader.heatedfulvicAcid, 1000)) + .duration(4 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(fluidHeaterRecipes); + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/FluidSolidifier.java b/src/main/java/bartworks/common/loaders/recipes/FluidSolidifier.java new file mode 100644 index 0000000000..22ed73dae2 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/FluidSolidifier.java @@ -0,0 +1,102 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; + +import bartworks.common.loaders.ItemRegistry; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.TierEU; + +public class FluidSolidifier implements Runnable { + + @Override + public void run() { + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.lapis_block)) + .itemOutputs(new ItemStack(ItemRegistry.BW_BLOCKS[0], 1, 0)) + .fluidInputs(Materials.Iron.getMolten(1296L)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 1)) + .fluidInputs(Materials.Titanium.getMolten(1152)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 2)) + .fluidInputs(Materials.TungstenSteel.getMolten(1152)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 3)) + .fluidInputs(WerkstoffLoader.LuVTierMaterial.getMolten(1152)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 4)) + .fluidInputs(Materials.Iridium.getMolten(1152)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 5)) + .fluidInputs(Materials.Osmium.getMolten(1152)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 13)) + .fluidInputs(Materials.Neutronium.getMolten(1152)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 14)) + .fluidInputs(Materials.CosmicNeutronium.getMolten(1152)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 15)) + .fluidInputs(Materials.Infinity.getMolten(1152)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[1], 1, 0)) + .fluidInputs(MaterialsUEVplus.TranscendentMetal.getMolten(1152)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(fluidSolidifierRecipes); + + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/FormingPress.java b/src/main/java/bartworks/common/loaders/recipes/FormingPress.java new file mode 100644 index 0000000000..447f77e7df --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/FormingPress.java @@ -0,0 +1,76 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.recipe.RecipeMaps.formingPressRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.item.ItemStack; + +import bartworks.common.tileentities.multis.MTEHighTempGasCooledReactor; +import bartworks.common.tileentities.multis.MTEThoriumHighTempReactor; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; + +public class FormingPress implements Runnable { + + @Override + public void run() { + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials), + Materials.Graphite.getDust(64)) + .itemOutputs(new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials, 1, 1)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(formingPressRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials, 1, 1), + Materials.Silicon.getDust(64)) + .itemOutputs(new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials, 1, 2)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(formingPressRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials, 1, 2), + Materials.Graphite.getDust(64)) + .itemOutputs(new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials, 1, 3)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(formingPressRecipes); + + int i = 0; + for (MTEHighTempGasCooledReactor.HTGRMaterials.Fuel_ fuel : MTEHighTempGasCooledReactor.HTGRMaterials.sHTGR_Fuel) { + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 1, i), + Materials.Carbon.getDust(64)) + .itemOutputs(new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 1, i + 1)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(formingPressRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 1, i + 1), + Materials.Silicon.getDust(64)) + .itemOutputs(new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 1, i + 2)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(formingPressRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 1, i + 2), + Materials.Graphite.getDust(64)) + .itemOutputs(new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 1, i + 3)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(formingPressRecipes); + i += MTEHighTempGasCooledReactor.HTGRMaterials.MATERIALS_PER_FUEL; + } + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/LaserEngraver.java b/src/main/java/bartworks/common/loaders/recipes/LaserEngraver.java new file mode 100644 index 0000000000..1983232704 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/LaserEngraver.java @@ -0,0 +1,27 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import bartworks.common.loaders.BioItemList; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTUtility; + +public class LaserEngraver implements Runnable { + + @Override + public void run() { + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Items.emerald), GTUtility.getIntegratedCircuit(17)) + .itemOutputs(BioItemList.getPlasmidCell(null)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(laserEngraverRecipes); + + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/Mixer.java b/src/main/java/bartworks/common/loaders/recipes/Mixer.java new file mode 100644 index 0000000000..6f15c3773f --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/Mixer.java @@ -0,0 +1,62 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.enums.Mods.Gendustry; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.common.loaders.FluidLoader; +import bartworks.common.tileentities.multis.MTEHighTempGasCooledReactor; +import bartworks.common.tileentities.multis.MTEThoriumHighTempReactor; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class Mixer implements Runnable { + + @Override + public void run() { + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 10), + Materials.Uranium235.getDust(1), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(new ItemStack(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + + int i = 0; + for (MTEHighTempGasCooledReactor.HTGRMaterials.Fuel_ fuel : MTEHighTempGasCooledReactor.HTGRMaterials.sHTGR_Fuel) { + GTValues.RA.stdBuilder() + .itemInputs(fuel.mainItem, fuel.secondaryItem, GTUtility.getIntegratedCircuit(1)) + .itemOutputs(new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 1, i)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + + i += MTEHighTempGasCooledReactor.HTGRMaterials.MATERIALS_PER_FUEL; + } + + if (Gendustry.isModLoaded()) { + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(17), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Radon, 1L)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(FluidRegistry.getFluidStack("liquiddna", 1000)) + .fluidOutputs(new FluidStack(FluidLoader.BioLabFluidMaterials[0], 2000)) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(mixerRecipes); + } + + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/Pulverizer.java b/src/main/java/bartworks/common/loaders/recipes/Pulverizer.java new file mode 100644 index 0000000000..0d0bf316a6 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/Pulverizer.java @@ -0,0 +1,97 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.item.ItemStack; + +import bartworks.common.loaders.ItemRegistry; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; + +public class Pulverizer implements Runnable { + + @Override + public void run() { + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 1)) + .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.Titanium.getDust(8)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 2)) + .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.TungstenSteel.getDust(8)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 3)) + .itemOutputs( + Materials.BorosilicateGlass.getDust(9), + WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.dust, 8)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 4)) + .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.Iridium.getDust(8)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 5)) + .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.Osmium.getDust(8)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 13)) + .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.Neutronium.getDust(8)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 14)) + .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.CosmicNeutronium.getDust(8)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 15)) + .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.Infinity.getDust(8)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[1], 1, 0)) + .itemOutputs(Materials.BorosilicateGlass.getDust(9), MaterialsUEVplus.TranscendentMetal.getDust(8)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(maceratorRecipes); + + for (int i = 6; i < 11; i++) { + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, i)) + .itemOutputs(Materials.BorosilicateGlass.getDust(9)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(maceratorRecipes); + + } + } +} diff --git a/src/main/java/bartworks/common/loaders/recipes/PyrolyseOven.java b/src/main/java/bartworks/common/loaders/recipes/PyrolyseOven.java new file mode 100644 index 0000000000..4e457ab021 --- /dev/null +++ b/src/main/java/bartworks/common/loaders/recipes/PyrolyseOven.java @@ -0,0 +1,27 @@ +package bartworks.common.loaders.recipes; + +import static gregtech.api.recipe.RecipeMaps.pyrolyseRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import net.minecraftforge.fluids.FluidStack; + +import bartworks.common.loaders.FluidLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTUtility; + +public class PyrolyseOven implements Runnable { + + @Override + public void run() { + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(10), Materials.Wood.getDust(10)) + .fluidInputs(new FluidStack(FluidLoader.Kerogen, 1000)) + .fluidOutputs(Materials.Oil.getFluid(1000)) + .duration(5 * SECONDS + 5 * TICKS) + .eut(TierEU.RECIPE_HV) + .addTo(pyrolyseRecipes); + } +} diff --git a/src/main/java/bartworks/common/net/BWNetwork.java b/src/main/java/bartworks/common/net/BWNetwork.java new file mode 100644 index 0000000000..78ab09e367 --- /dev/null +++ b/src/main/java/bartworks/common/net/BWNetwork.java @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.net; + +import java.util.EnumMap; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteStreams; + +import cpw.mods.fml.common.network.FMLEmbeddedChannel; +import cpw.mods.fml.common.network.FMLOutboundHandler; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.network.internal.FMLProxyPacket; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.server.FMLServerHandler; +import gregtech.api.enums.GTValues; +import gregtech.api.net.GTPacket; +import gregtech.api.net.GTPacketNew; +import gregtech.api.net.IGT_NetworkHandler; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.codec.MessageToMessageCodec; + +/* + * Original GT File slightly Modified + */ +@SuppressWarnings("deprecation") +@ChannelHandler.Sharable +public class BWNetwork extends MessageToMessageCodec implements IGT_NetworkHandler { + + private final EnumMap mChannel; + private final GTPacketNew[] mSubChannels; + + public BWNetwork() { + this.mChannel = NetworkRegistry.INSTANCE.newChannel("BartWorks", this, new BWNetwork.HandlerShared()); + this.mSubChannels = new GTPacketNew[] { new RendererPacket(), new CircuitProgrammerPacket(), + new MetaBlockPacket(), new OreDictCachePacket(), new ServerJoinedPacket(), new EICPacket() }; + } + + @Override + protected void encode(ChannelHandlerContext aContext, GTPacketNew aPacket, List aOutput) throws Exception { + aOutput.add( + new FMLProxyPacket( + Unpooled.buffer() + .writeByte(aPacket.getPacketID()) + .writeBytes(aPacket.encode()) + .copy(), + aContext.channel() + .attr(NetworkRegistry.FML_CHANNEL) + .get())); + } + + @Override + protected void decode(ChannelHandlerContext aContext, FMLProxyPacket aPacket, List aOutput) + throws Exception { + ByteArrayDataInput aData = ByteStreams.newDataInput( + aPacket.payload() + .array()); + aOutput.add(this.mSubChannels[aData.readByte()].decode(aData)); + } + + @Override + public void sendToPlayer(@Nonnull GTPacket aPacket, @Nonnull EntityPlayerMP aPlayer) { + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGET) + .set(FMLOutboundHandler.OutboundTarget.PLAYER); + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) + .set(aPlayer); + this.mChannel.get(Side.SERVER) + .writeAndFlush(aPacket); + } + + public void sendToAllPlayersinWorld(@Nonnull GTPacket aPacket, World world) { + for (String name : FMLServerHandler.instance() + .getServer() + .getAllUsernames()) { + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGET) + .set(FMLOutboundHandler.OutboundTarget.PLAYER); + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) + .set(world.getPlayerEntityByName(name)); + this.mChannel.get(Side.SERVER) + .writeAndFlush(aPacket); + } + } + + @Override + public void sendToAllAround(@Nonnull GTPacket aPacket, NetworkRegistry.TargetPoint aPosition) { + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGET) + .set(FMLOutboundHandler.OutboundTarget.ALLAROUNDPOINT); + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) + .set(aPosition); + this.mChannel.get(Side.SERVER) + .writeAndFlush(aPacket); + } + + @Override + public void sendToAll(@Nonnull GTPacket aPacket) { + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGET) + .set(FMLOutboundHandler.OutboundTarget.ALL); + this.mChannel.get(Side.SERVER) + .writeAndFlush(aPacket); + } + + @Override + public void sendToServer(@Nonnull GTPacket aPacket) { + this.mChannel.get(Side.CLIENT) + .attr(FMLOutboundHandler.FML_MESSAGETARGET) + .set(FMLOutboundHandler.OutboundTarget.TOSERVER); + this.mChannel.get(Side.CLIENT) + .writeAndFlush(aPacket); + } + + @Override + public void sendPacketToAllPlayersInRange(World aWorld, @Nonnull GTPacket aPacket, int aX, int aZ) { + if (!aWorld.isRemote) { + + for (Object tObject : aWorld.playerEntities) { + if (!(tObject instanceof EntityPlayerMP tPlayer)) { + break; + } + + Chunk tChunk = aWorld.getChunkFromBlockCoords(aX, aZ); + if (tPlayer.getServerForPlayer() + .getPlayerManager() + .isPlayerWatchingChunk(tPlayer, tChunk.xPosition, tChunk.zPosition)) { + this.sendToPlayer(aPacket, tPlayer); + } + } + } + } + + @Sharable + static final class HandlerShared extends SimpleChannelInboundHandler { + + HandlerShared() {} + + @Override + protected void channelRead0(ChannelHandlerContext ctx, GTPacketNew aPacket) throws Exception { + EntityPlayer aPlayer = GTValues.GT.getThePlayer(); + aPacket.process(aPlayer == null ? null : GTValues.GT.getThePlayer().worldObj); + } + } +} diff --git a/src/main/java/bartworks/common/net/CircuitProgrammerPacket.java b/src/main/java/bartworks/common/net/CircuitProgrammerPacket.java new file mode 100644 index 0000000000..998d10cbfa --- /dev/null +++ b/src/main/java/bartworks/common/net/CircuitProgrammerPacket.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.net; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +import com.google.common.io.ByteArrayDataInput; + +import bartworks.common.items.ItemCircuitProgrammer; +import gregtech.api.net.GTPacketNew; +import io.netty.buffer.ByteBuf; + +public class CircuitProgrammerPacket extends GTPacketNew { + + private int dimID, playerID; + private byte chipCfg; + private boolean hasChip; + + public CircuitProgrammerPacket() { + super(true); + } + + public CircuitProgrammerPacket(int dimID, int playerID, boolean hasChip, byte chipCfg) { + super(false); + this.dimID = dimID; + this.playerID = playerID; + this.hasChip = hasChip; + this.chipCfg = chipCfg; + } + + @Override + public byte getPacketID() { + return 1; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(this.dimID) + .writeInt(this.playerID) + .writeByte(this.hasChip ? this.chipCfg : -1); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput byteArrayDataInput) { + return new CircuitProgrammerPacket( + byteArrayDataInput.readInt(), + byteArrayDataInput.readInt(), + byteArrayDataInput.readByte() > -1, + byteArrayDataInput.readByte()); + } + + @Override + public void process(IBlockAccess iBlockAccess) { + World w = DimensionManager.getWorld(this.dimID); + if (w != null && w.getEntityByID(this.playerID) instanceof EntityPlayer) { + ItemStack stack = ((EntityPlayer) w.getEntityByID(this.playerID)).getHeldItem(); + if (stack != null && stack.stackSize > 0) { + Item item = stack.getItem(); + if (item instanceof ItemCircuitProgrammer) { + NBTTagCompound nbt = stack.getTagCompound(); + nbt.setBoolean("HasChip", this.hasChip); + if (this.hasChip) nbt.setByte("ChipConfig", this.chipCfg); + stack.setTagCompound(nbt); + ((EntityPlayer) w.getEntityByID(this.playerID)).inventory.setInventorySlotContents( + ((EntityPlayer) w.getEntityByID(this.playerID)).inventory.currentItem, + stack); + } + } + } + } +} diff --git a/src/main/java/bartworks/common/net/EICPacket.java b/src/main/java/bartworks/common/net/EICPacket.java new file mode 100644 index 0000000000..9d2414a0e0 --- /dev/null +++ b/src/main/java/bartworks/common/net/EICPacket.java @@ -0,0 +1,60 @@ +package bartworks.common.net; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import bartworks.API.SideReference; +import bartworks.common.tileentities.multis.MTEElectricImplosionCompressor; +import bartworks.util.Coords; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.net.GTPacketNew; +import io.netty.buffer.ByteBuf; + +public class EICPacket extends GTPacketNew { + + private Coords coords; + private boolean bool; + + public EICPacket() { + super(true); + } + + public EICPacket(Coords coords, boolean bool) { + super(false); + this.coords = coords; + this.bool = bool; + } + + @Override + public byte getPacketID() { + return 5; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(this.coords.x); + aOut.writeInt(this.coords.y); + aOut.writeInt(this.coords.z); + aOut.writeBoolean(this.bool); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + return new EICPacket(new Coords(aData.readInt(), aData.readInt(), aData.readInt()), aData.readBoolean()); + } + + @Override + public void process(IBlockAccess aWorld) { + if (SideReference.Side.Client) { + TileEntity te = aWorld.getTileEntity(this.coords.x, this.coords.y, this.coords.z); + if (!(te instanceof IGregTechTileEntity)) return; + IMetaTileEntity mte = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (!(mte instanceof MTEElectricImplosionCompressor)) return; + if (this.bool && !((IGregTechTileEntity) te).hasMufflerUpgrade()) + ((IGregTechTileEntity) te).addMufflerUpgrade(); + } + } +} diff --git a/src/main/java/bartworks/common/net/MetaBlockPacket.java b/src/main/java/bartworks/common/net/MetaBlockPacket.java new file mode 100644 index 0000000000..ee8ab8231a --- /dev/null +++ b/src/main/java/bartworks/common/net/MetaBlockPacket.java @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.net; + +import java.nio.ByteBuffer; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import com.google.common.io.ByteArrayDataInput; + +import bartworks.MainMod; +import bartworks.system.material.TileEntityMetaGeneratedBlock; +import bartworks.util.MurmurHash3; +import gregtech.api.net.GTPacketNew; +import io.netty.buffer.ByteBuf; + +public class MetaBlockPacket extends GTPacketNew { + + int x; + short y; + int z; + short meta; + + public MetaBlockPacket(int x, int y, int z, int meta) { + super(false); + this.x = x; + this.y = (short) y; + this.z = z; + this.meta = (short) meta; + } + + public MetaBlockPacket() { + super(true); + } + + @Override + public byte getPacketID() { + return 2; + } + + @Override + public void encode(ByteBuf aOut) { + int hash = MurmurHash3.murmurhash3_x86_32( + ByteBuffer.allocate(12) + .putInt(this.x) + .putInt(this.z) + .putShort(this.y) + .putShort(this.meta) + .array(), + 0, + 12, + 31); + aOut.writeInt(this.x) + .writeInt(this.z) + .writeShort(this.y) + .writeShort(this.meta) + .writeInt(hash); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput byteArrayDataInput) { + this.x = byteArrayDataInput.readInt(); + this.z = byteArrayDataInput.readInt(); + this.y = byteArrayDataInput.readShort(); + this.meta = byteArrayDataInput.readShort(); + MetaBlockPacket todecode = new MetaBlockPacket(this.x, this.y, this.z, this.meta); + if (byteArrayDataInput.readInt() != MurmurHash3.murmurhash3_x86_32( + ByteBuffer.allocate(12) + .putInt(this.x) + .putInt(this.z) + .putShort(this.y) + .putShort(this.meta) + .array(), + 0, + 12, + 31)) { + MainMod.LOGGER.error("PACKET HASH DOES NOT MATCH!"); + return null; + } + return todecode; + } + + @Override + public void process(IBlockAccess iBlockAccess) { + if (iBlockAccess != null) { + TileEntity tTileEntity = iBlockAccess.getTileEntity(this.x, this.y, this.z); + if (tTileEntity instanceof TileEntityMetaGeneratedBlock) { + ((TileEntityMetaGeneratedBlock) tTileEntity).mMetaData = this.meta; + } + if (iBlockAccess instanceof World && ((World) iBlockAccess).isRemote) { + ((World) iBlockAccess).markBlockForUpdate(this.x, this.y, this.z); + } + } + } +} diff --git a/src/main/java/bartworks/common/net/OreDictCachePacket.java b/src/main/java/bartworks/common/net/OreDictCachePacket.java new file mode 100644 index 0000000000..b8cda117ac --- /dev/null +++ b/src/main/java/bartworks/common/net/OreDictCachePacket.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.net; + +import java.util.HashSet; + +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import bartworks.system.oredict.OreDictHandler; +import bartworks.util.Pair; +import gregtech.api.net.GTPacketNew; +import io.netty.buffer.ByteBuf; + +public class OreDictCachePacket extends GTPacketNew { + + private HashSet> hashSet = new HashSet<>(); + + public OreDictCachePacket() { + super(true); + } + + public OreDictCachePacket(HashSet> set) { + super(false); + this.hashSet = set; + } + + @Override + public byte getPacketID() { + return 3; + } + + @Override + public void encode(ByteBuf aOut) { + int size = this.hashSet.size(); + aOut.writeInt(size); + for (Pair p : this.hashSet) { + aOut.writeInt(p.getKey()) + .writeShort(p.getValue()); + } + } + + @Override + public GTPacketNew decode(ByteArrayDataInput byteArrayDataInput) { + int size = byteArrayDataInput.readInt(); + for (int i = 0; i < size; i++) { + this.hashSet.add(new Pair<>(byteArrayDataInput.readInt(), byteArrayDataInput.readShort())); + } + return new OreDictCachePacket(this.hashSet); + } + + @Override + public void process(IBlockAccess iBlockAccess) { + OreDictHandler.getNonBWCache() + .clear(); + OreDictHandler.getNonBWCache() + .addAll(this.hashSet); + } +} diff --git a/src/main/java/bartworks/common/net/RendererPacket.java b/src/main/java/bartworks/common/net/RendererPacket.java new file mode 100644 index 0000000000..f4f03c3584 --- /dev/null +++ b/src/main/java/bartworks/common/net/RendererPacket.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.net; + +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import bartworks.API.SideReference; +import bartworks.MainMod; +import bartworks.common.tileentities.multis.MTEBioVat; +import bartworks.util.BWColorUtil; +import bartworks.util.Coords; +import gregtech.api.net.GTPacketNew; +import io.netty.buffer.ByteBuf; + +public class RendererPacket extends GTPacketNew { + + private Coords coords; + private int integer; + private byte removal; + + public RendererPacket() { + super(true); + } + + public RendererPacket(Coords coords, int integer, boolean removal) { + super(false); + this.coords = coords; + this.integer = integer; + this.removal = (byte) (removal ? 1 : 0); + } + + @Override + public byte getPacketID() { + return 0; + } + + @Override + public void encode(ByteBuf aOut) { + byte r = (byte) (this.integer >> 16 & 0xFF); + byte g = (byte) (this.integer >> 8 & 0xFF); + byte b = (byte) (this.integer & 0xFF); + byte checksum = (byte) (this.coords.x % 25 + this.coords.y % 25 + + this.coords.z % 25 + + this.coords.wID % 25 + + this.integer % 25 + + this.removal); + aOut.writeInt(this.coords.x) + .writeShort(this.coords.y) + .writeInt(this.coords.z) + .writeInt(this.coords.wID) + .writeByte(r) + .writeByte(g) + .writeByte(b) + .writeByte(this.removal) + .writeByte(checksum); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput dataInput) { + this.coords = new Coords(dataInput.readInt(), dataInput.readShort(), dataInput.readInt(), dataInput.readInt()); + this.integer = BWColorUtil + .getColorFromRGBArray(new int[] { dataInput.readByte(), dataInput.readByte(), dataInput.readByte() }); + this.removal = dataInput.readByte(); + + byte checksum = (byte) (this.coords.x % 25 + this.coords.y % 25 + + this.coords.z % 25 + + this.coords.wID % 25 + + this.integer % 25 + + this.removal); + + if (checksum != dataInput.readByte()) { + MainMod.LOGGER.error("BW Packet was corrupted or modified!"); + return null; + } + + return new RendererPacket(this.coords, this.integer, this.removal == 1); + } + + @Override + public void process(IBlockAccess iBlockAccess) { + if (SideReference.Side.Client) { + if (this.removal == 0) MTEBioVat.staticColorMap.put(this.coords, this.integer); + else MTEBioVat.staticColorMap.remove(this.coords); + } + } +} diff --git a/src/main/java/bartworks/common/net/ServerJoinedPacket.java b/src/main/java/bartworks/common/net/ServerJoinedPacket.java new file mode 100644 index 0000000000..e686d56182 --- /dev/null +++ b/src/main/java/bartworks/common/net/ServerJoinedPacket.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.net; + +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import bartworks.MainMod; +import bartworks.common.configs.ConfigHandler; +import gregtech.api.net.GTPacketNew; +import io.netty.buffer.ByteBuf; + +public class ServerJoinedPacket extends GTPacketNew { + + private byte config; + + ServerJoinedPacket() { + super(true); + } + + public ServerJoinedPacket(Object obj) { + super(false); + this.config = (byte) (ConfigHandler.classicMode && ConfigHandler.disableExtraGassesForEBF ? 3 + : ConfigHandler.classicMode ? 2 : ConfigHandler.disableExtraGassesForEBF ? 1 : 0); + } + + @Override + public byte getPacketID() { + return 4; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeByte(this.config); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput byteArrayDataInput) { + this.config = byteArrayDataInput.readByte(); + return this; + } + + @Override + public void process(IBlockAccess iBlockAccess) { + boolean gas = (this.config & 1) != 0; + boolean classic = (this.config & 0b10) != 0; + MainMod.runOnPlayerJoined(classic, gas); + } +} diff --git a/src/main/java/bartworks/common/tileentities/classic/TileEntityDimIDBridge.java b/src/main/java/bartworks/common/tileentities/classic/TileEntityDimIDBridge.java new file mode 100644 index 0000000000..6b00b65054 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/classic/TileEntityDimIDBridge.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.classic; + +import net.minecraft.tileentity.TileEntity; + +public class TileEntityDimIDBridge extends TileEntity { + + @Override + public boolean canUpdate() { + return false; + } +} diff --git a/src/main/java/bartworks/common/tileentities/classic/TileEntityHeatedWaterPump.java b/src/main/java/bartworks/common/tileentities/classic/TileEntityHeatedWaterPump.java new file mode 100644 index 0000000000..3f973e8eea --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/classic/TileEntityHeatedWaterPump.java @@ -0,0 +1,375 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.classic; + +import java.util.Arrays; +import java.util.Optional; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidEvent; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; +import net.minecraftforge.fluids.IFluidTank; + +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; +import com.gtnewhorizons.modularui.api.forge.InvWrapper; +import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import bartworks.API.ITileAddsInformation; +import bartworks.API.ITileDropsContent; +import bartworks.API.ITileHasDifferentTextureSides; +import bartworks.API.modularUI.BWUITextures; +import bartworks.MainMod; +import bartworks.common.configs.ConfigHandler; +import gregtech.api.util.GTUtility; +import gregtech.common.Pollution; + +public class TileEntityHeatedWaterPump extends TileEntity implements ITileDropsContent, IFluidHandler, IFluidTank, + ITileWithModularUI, ITileAddsInformation, ITileHasDifferentTextureSides { + + public static final int FUELSLOT = 0; + public static final Fluid WATER = FluidRegistry.WATER; + public ItemStack fuelstack; + public FluidStack outputstack = new FluidStack(FluidRegistry.WATER, 0); + public int fuel; + public byte tick; + public int maxfuel; + public ItemStack fakestack = new ItemStack(Blocks.water); + + @Override + public void writeToNBT(NBTTagCompound compound) { + NBTTagCompound subItemStack = new NBTTagCompound(); + if (this.fuelstack != null) { + this.fuelstack.writeToNBT(subItemStack); + } + compound.setTag("ItemStack", subItemStack); + NBTTagCompound subFluidStack = new NBTTagCompound(); + this.outputstack.writeToNBT(subFluidStack); + compound.setTag("FluidStack", subFluidStack); + compound.setInteger("fuel", this.fuel); + compound.setInteger("maxfuel", this.maxfuel); + compound.setByte("tick", this.tick); + super.writeToNBT(compound); + } + + @Override + public void readFromNBT(NBTTagCompound compound) { + this.tick = compound.getByte("tick"); + this.fuel = compound.getInteger("fuel"); + this.maxfuel = compound.getInteger("maxfuel"); + this.outputstack = FluidStack.loadFluidStackFromNBT(compound.getCompoundTag("FluidStack")); + if (!compound.getCompoundTag("ItemStack") + .equals(new NBTTagCompound())) + this.fuelstack = ItemStack.loadItemStackFromNBT(compound.getCompoundTag("ItemStack")); + super.readFromNBT(compound); + } + + private boolean checkPreUpdate() { + return (this.fuelstack == null || this.fuelstack.stackSize <= 0) && this.fuel <= 0; + } + + private void fixUnderlflow() { + if (this.fuel < 0) this.fuel = 0; + } + + private void handleRefuel() { + if (this.fuelstack != null && this.fuel == 0) { + this.fuel = this.maxfuel = TileEntityFurnace.getItemBurnTime(this.fuelstack); + --this.fuelstack.stackSize; + if (this.fuelstack.stackSize <= 0) this.fuelstack = fuelstack.getItem() + .getContainerItem(fuelstack); + } + } + + private void handleWaterGeneration() { + if (this.fuel > 0) { + ++this.tick; + --this.fuel; + if (this.tick % 20 == 0) { + if (this.outputstack.amount <= 8000 - ConfigHandler.mbWaterperSec) + this.outputstack.amount += ConfigHandler.mbWaterperSec; + this.tick = 0; + } + } + } + + @Override + public void updateEntity() { + if (this.worldObj.isRemote) return; + + this.pushWaterToAdjacentTiles(); + this.fakestack.setStackDisplayName(this.outputstack.amount + "L Water"); + if (this.checkPreUpdate()) return; + + this.fixUnderlflow(); + this.handleRefuel(); + this.handleWaterGeneration(); + this.causePollution(); + } + + private void pushWaterToAdjacentTiles() { + Arrays.stream(ForgeDirection.values(), 0, 6) // All but Unknown + .forEach( + direction -> Optional + .ofNullable( + this.worldObj.getTileEntity( + this.xCoord + direction.offsetX, + this.yCoord + direction.offsetY, + this.zCoord + direction.offsetZ)) + .ifPresent(te -> { + if (te instanceof IFluidHandler tank) { + if (tank.canFill(direction.getOpposite(), this.outputstack.getFluid())) { + int drainage = tank.fill(direction.getOpposite(), this.outputstack, false); + if (drainage > 0) { + tank.fill(direction.getOpposite(), this.outputstack, true); + this.drain(drainage, true); + } + } + } else if (te instanceof IFluidTank tank) { + int drainage = tank.fill(this.outputstack, false); + if (drainage > 0) { + tank.fill(this.outputstack, true); + this.drain(drainage, true); + } + } + })); + } + + private void causePollution() { + Optional.ofNullable(this.worldObj) + .ifPresent(e -> { + if (e.getTotalWorldTime() % 20 == 0) { + Optional.ofNullable(e.getChunkFromBlockCoords(this.xCoord, this.zCoord)) + .ifPresent(c -> Pollution.addPollution(c, ConfigHandler.pollutionHeatedWaterPumpSecond)); + } + }); + } + + @Override + public int[] getAccessibleSlotsFromSide(int side) { + return new int[] { 0 }; + } + + @Override + public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_) { + return TileEntityFurnace.getItemBurnTime(p_102007_2_) > 0; + } + + @Override + public boolean canExtractItem(int p_102008_1_, ItemStack p_102008_2_, int p_102008_3_) { + return false; + } + + @Override + public int getSizeInventory() { + return 2; + } + + @Override + public ItemStack getStackInSlot(int slotIn) { + if (slotIn == 0) return this.fuelstack; + return this.fakestack; + } + + @Override + public ItemStack decrStackSize(int slot, int ammount) { + if (slot != TileEntityHeatedWaterPump.FUELSLOT || this.fuelstack == null || ammount > this.fuelstack.stackSize) + return null; + + return this.fuelstack.splitStack(ammount); + } + + @Override + public ItemStack getStackInSlotOnClosing(int index) { + return null; + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) { + if (slot == TileEntityHeatedWaterPump.FUELSLOT) this.fuelstack = stack; + else this.fakestack = stack; + } + + @Override + public String getInventoryName() { + return null; + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 64; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return true; + } + + @Override + public void openInventory() {} + + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) { + return TileEntityFurnace.getItemBurnTime(stack) > 0 && index == TileEntityHeatedWaterPump.FUELSLOT; + } + + @Override + public FluidStack getFluid() { + return this.outputstack.amount > 0 ? this.outputstack : null; + } + + @Override + public int getFluidAmount() { + return this.outputstack.amount; + } + + @Override + public int getCapacity() { + return 8000; + } + + @Override + public FluidTankInfo getInfo() { + return new FluidTankInfo(this); + } + + @Override + public int fill(FluidStack resource, boolean doFill) { + return 0; + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) { + int actualdrain = maxDrain; + if (actualdrain > this.outputstack.amount) actualdrain = this.outputstack.amount; + FluidStack ret = new FluidStack(TileEntityHeatedWaterPump.WATER, actualdrain); + if (ret.amount == 0) ret = null; + if (doDrain) { + this.outputstack.amount -= actualdrain; + FluidEvent.fireEvent( + new FluidEvent.FluidDrainingEvent( + this.outputstack, + this.getWorldObj(), + this.xCoord, + this.yCoord, + this.zCoord, + this, + actualdrain)); + } + return ret; + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { + return 0; + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + if (resource != null && resource.getFluid() == TileEntityHeatedWaterPump.WATER + && this.drain(resource.amount, false) != null) return this.drain(resource.amount, doDrain); + return null; + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { + return this.drain(maxDrain, doDrain); + } + + @Override + public boolean canFill(ForgeDirection from, Fluid fluid) { + return false; + } + + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid) { + return fluid == null || fluid == TileEntityHeatedWaterPump.WATER; + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) { + return new FluidTankInfo[] { this.getInfo() }; + } + + @Override + public String[] getInfoData() { + return new String[] { + StatCollector.translateToLocal("tooltip.tile.waterpump.0.name") + " " + + GTUtility.formatNumbers(ConfigHandler.mbWaterperSec) + + String.format( + StatCollector.translateToLocal("tooltip.tile.waterpump.1.name"), + ConfigHandler.pollutionHeatedWaterPumpSecond), + StatCollector.translateToLocal("tooltip.tile.waterpump.2.name") }; + } + + @Override + public void registerBlockIcons(IIconRegister par1IconRegister) { + ITileHasDifferentTextureSides.texture[ForgeDirection.UP.ordinal()] = par1IconRegister + .registerIcon(MainMod.MOD_ID + ":heatedWaterPumpTop"); + ITileHasDifferentTextureSides.texture[ForgeDirection.DOWN.ordinal()] = par1IconRegister + .registerIcon(MainMod.MOD_ID + ":heatedWaterPumpDown"); + for (int i = 2; i < 7; i++) { + ITileHasDifferentTextureSides.texture[i] = par1IconRegister + .registerIcon(MainMod.MOD_ID + ":heatedWaterPumpSide"); + } + } + + @Override + public ModularWindow createWindow(UIBuildContext buildContext) { + ModularWindow.Builder builder = ModularWindow.builder(176, 166); + builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); + builder.bindPlayerInventory(buildContext.getPlayer()); + final IItemHandlerModifiable invWrapper = new InvWrapper(this); + + builder.widget( + new SlotWidget(invWrapper, 0).setFilter(stack -> TileEntityFurnace.getItemBurnTime(stack) > 0) + .setPos(55, 52)) + .widget( + SlotWidget.phantom(invWrapper, 1) + .disableInteraction() + .setPos(85, 32)) + .widget( + new ProgressBar().setProgress(() -> (float) this.fuel / this.maxfuel) + .setTexture(BWUITextures.PROGRESSBAR_FUEL, 14) + .setDirection(ProgressBar.Direction.UP) + .setPos(56, 36) + .setSize(14, 14)); + + return builder.build(); + } +} diff --git a/src/main/java/bartworks/common/tileentities/classic/TileEntityRotorBlock.java b/src/main/java/bartworks/common/tileentities/classic/TileEntityRotorBlock.java new file mode 100644 index 0000000000..78c7f34710 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/classic/TileEntityRotorBlock.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.classic; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; + +import bartworks.client.gui.GuiContainerRotorBlock; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ic2.core.block.kineticgenerator.container.ContainerWindKineticGenerator; +import ic2.core.block.kineticgenerator.tileentity.TileEntityWindKineticGenerator; + +public class TileEntityRotorBlock extends TileEntityWindKineticGenerator { + + public int getGrindPower() { + return super.getKuOutput(); + } + + @Override + public int getKuOutput() { + return 0; + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen getGui(EntityPlayer entityPlayer, boolean isAdmin) { + return new GuiContainerRotorBlock(new ContainerWindKineticGenerator(entityPlayer, this)); + } +} diff --git a/src/main/java/bartworks/common/tileentities/debug/MTECreativeScanner.java b/src/main/java/bartworks/common/tileentities/debug/MTECreativeScanner.java new file mode 100644 index 0000000000..a1ccd7d4e3 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/debug/MTECreativeScanner.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.debug; + +import net.minecraft.util.StatCollector; + +import org.apache.commons.lang3.ArrayUtils; + +import bartworks.util.BWTooltipReference; +import gregtech.api.enums.MachineType; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.common.tileentities.machines.basic.MTEScanner; + +public class MTECreativeScanner extends MTEScanner { + + public MTECreativeScanner(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTECreativeScanner(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTECreativeScanner(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll( + MachineType.SCANNER.tooltipDescription(), + StatCollector.translateToLocal("gt.blockmachines.creativeScanner.desc.1"), + BWTooltipReference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get()); + } + + @Override + public long maxEUStore() { + return 0; + } + + @Override + protected boolean hasEnoughEnergyToCheckRecipe() { + return true; + } + + @Override + protected boolean drainEnergyForProcess(long aEUt) { + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + this.mProgresstime = this.mMaxProgresstime; + super.onPostTick(aBaseMetaTileEntity, aTick); + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/MTEBioVat.java b/src/main/java/bartworks/common/tileentities/multis/MTEBioVat.java new file mode 100644 index 0000000000..b982c0d886 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/MTEBioVat.java @@ -0,0 +1,834 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis; + +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTWORKS; +import static bartworks.util.BWUtil.ofGlassTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.API.SideReference; +import bartworks.API.recipe.BartWorksRecipeMaps; +import bartworks.MainMod; +import bartworks.common.configs.ConfigHandler; +import bartworks.common.items.ItemLabParts; +import bartworks.common.loaders.FluidLoader; +import bartworks.common.net.RendererPacket; +import bartworks.common.tileentities.tiered.GT_MetaTileEntity_RadioHatch; +import bartworks.util.BWUtil; +import bartworks.util.BioCulture; +import bartworks.util.Coords; +import bartworks.util.MathUtils; +import bartworks.util.ResultWrongSievert; +import gregtech.api.GregTechAPI; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.ParallelHelper; + +public class MTEBioVat extends MTEEnhancedMultiBlockBase { + + public static final HashMap staticColorMap = new HashMap<>(); + + private static final byte TIMERDIVIDER = 20; + + private final HashSet playerMPHashSet = new HashSet<>(); + private final ArrayList mRadHatches = new ArrayList<>(); + private int height = 1; + private Fluid mFluid = FluidRegistry.LAVA; + private BioCulture mCulture; + private ItemStack mStack; + private boolean needsVisualUpdate = true; + private byte mGlassTier; + private int mSievert; + private int mNeededSievert; + private int mCasing = 0; + private int mExpectedMultiplier = 0; + private int mTimes = 0; + private boolean isVisibleFluid = false; + + public MTEBioVat(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEBioVat(String aName) { + super(aName); + } + + private static final int CASING_INDEX = 49; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { "ccccc", "ccccc", "ccccc", "ccccc", "ccccc" }, + { "ggggg", "gaaag", "gaaag", "gaaag", "ggggg" }, { "ggggg", "gaaag", "gaaag", "gaaag", "ggggg" }, + { "cc~cc", "ccccc", "ccccc", "ccccc", "ccccc" }, })) + .addElement( + 'c', + ofChain( + ofHatchAdder(MTEBioVat::addMaintenanceToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEBioVat::addOutputToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEBioVat::addInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEBioVat::addRadiationInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEBioVat::addEnergyInputToMachineList, CASING_INDEX, 1), + onElementPass(e -> e.mCasing++, ofBlock(GregTechAPI.sBlockCasings4, 1)))) + .addElement('a', ofChain(isAir(), ofBlockAnyMeta(FluidLoader.bioFluidBlock))) + .addElement( + 'g', + ofGlassTiered((byte) 1, (byte) 127, (byte) 0, (te, v) -> te.mGlassTier = v, te -> te.mGlassTier, 1)) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Bacterial Vat") + .addInfo("Controller block for the Bacterial Vat") + .addInfo("For maximum efficiency boost keep the Output Hatch always half filled!") + .addSeparator() + .beginStructureBlock(5, 4, 5, false) + .addController("Front bottom center") + .addCasingInfoMin("Clean Stainless Steel Casings", 19, false) + .addOtherStructurePart("Glass", "Hollow two middle layers", 2) + .addStructureInfo("The glass can be any glass, i.e. Tinkers Construct Clear Glass") + .addStructureInfo("Some Recipes need more advanced Glass Types") + .addMaintenanceHatch("Any casing", 1) + .addOtherStructurePart("Radio Hatch", "Any casing", 1) + .addInputBus("Any casing", 1) + .addOutputBus("Any casing", 1) + .addInputHatch("Any casing", 1) + .addOutputHatch("Any casing", 1) + .addEnergyHatch("Any casing", 1) + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); + return tt; + } + + public static int[] specialValueUnpack(int aSpecialValue) { + int[] ret = new int[4]; + ret[0] = aSpecialValue & 0xF; // = glass tier + ret[1] = aSpecialValue >>> 4 & 0b11; // = special value + ret[2] = aSpecialValue >>> 6 & 0b1; // boolean exact svt | 1 = true | 0 = false + ret[3] = aSpecialValue >>> 7 & Integer.MAX_VALUE; // = sievert + return ret; + } + + private int getInputCapacity() { + return this.mInputHatches.stream() + .mapToInt(MTEHatchInput::getCapacity) + .sum(); + } + + private int getOutputCapacity() { + return this.mOutputHatches.stream() + .mapToInt(MTEHatchOutput::getCapacity) + .sum(); + } + + @Override + public int getCapacity() { + int ret = 0; + ret += this.getInputCapacity(); + // ret += getOutputCapacity(); + return ret; + } + + @Override + public int fill(FluidStack resource, boolean doFill) { + return super.fill(resource, doFill); + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + @Override + public RecipeMap getRecipeMap() { + return BartWorksRecipeMaps.bacterialVatRecipes; + } + + /** + * Calculates the expected output multiplier based on the output hatch + * + * @param recipeFluidOutput the recipe fluid output + * @param needEqual if the recipeFluidOutput should be equal to the fluid in the output hatch + * @return the expected output multiplier + */ + private int getExpectedMultiplier(@Nullable FluidStack recipeFluidOutput, boolean needEqual) { + FluidStack storedFluidOutputs = this.getStoredFluidOutputs(); + if (storedFluidOutputs == null) return 1; + if (!needEqual || storedFluidOutputs.isFluidEqual(recipeFluidOutput)) { + return this.calcMod(storedFluidOutputs.amount) + 1; + } + return 1; + } + + private int calcMod(double x) { + double y = this.getOutputCapacity() / 2D, z = ConfigHandler.bioVatMaxParallelBonus; + + int ret = MathUtils.ceilInt((-1D / y * Math.pow(x - y, 2D) + y) / y * z); + return MathUtils.clamp(1, ret, ConfigHandler.bioVatMaxParallelBonus); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (!BWUtil.areStacksEqualOrNull((ItemStack) recipe.mSpecialItems, MTEBioVat.this.getControllerSlot())) + return CheckRecipeResultRegistry.NO_RECIPE; + int[] conditions = MTEBioVat.specialValueUnpack(recipe.mSpecialValue); + MTEBioVat.this.mNeededSievert = conditions[3]; + + if (MTEBioVat.this.mGlassTier < conditions[0]) { + return CheckRecipeResultRegistry.insufficientMachineTier(conditions[0]); + } + + if (conditions[2] == 0) { + if (MTEBioVat.this.mSievert < MTEBioVat.this.mNeededSievert) { + return ResultWrongSievert.insufficientSievert(MTEBioVat.this.mNeededSievert); + } + } else if (MTEBioVat.this.mSievert != conditions[3]) { + return ResultWrongSievert.wrongSievert(conditions[3]); + } + + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + protected ParallelHelper createParallelHelper(@NotNull GTRecipe recipe) { + return super.createParallelHelper(recipeWithMultiplier(recipe, inputFluids)); + } + }; + } + + protected GTRecipe recipeWithMultiplier(GTRecipe recipe, FluidStack[] fluidInputs) { + GTRecipe tRecipe = recipe.copy(); + int multiplier = getExpectedMultiplier(recipe.getFluidOutput(0), true); + mExpectedMultiplier = multiplier; + // Calculate max multiplier limited by input fluids + long fluidAmount = 0; + for (FluidStack fluid : fluidInputs) { + if (recipe.mFluidInputs[0].isFluidEqual(fluid)) { + fluidAmount += fluid.amount; + } + } + multiplier = (int) Math.min(multiplier, fluidAmount / recipe.mFluidInputs[0].amount); + // In case multiplier is 0 + multiplier = Math.max(multiplier, 1); + mTimes = multiplier; + tRecipe.mFluidInputs[0].amount *= multiplier; + tRecipe.mFluidOutputs[0].amount *= multiplier; + return tRecipe; + } + + @Override + protected void setupProcessingLogic(ProcessingLogic logic) { + super.setupProcessingLogic(logic); + logic.setSpecialSlotItem(this.getControllerSlot()); + } + + public FluidStack getStoredFluidOutputs() { + // Only one output Hatch + assert this.mOutputHatches.size() == 1; + return this.mOutputHatches.get(0) + .getFluid(); + } + + private boolean addRadiationInputToMachineList(IGregTechTileEntity aTileEntity, int CasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null || !(aMetaTileEntity instanceof GT_MetaTileEntity_RadioHatch)) { + return false; + } else { + ((GT_MetaTileEntity_RadioHatch) aMetaTileEntity).updateTexture(CasingIndex); + return this.mRadHatches.add((GT_MetaTileEntity_RadioHatch) aMetaTileEntity); + } + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { + this.mRadHatches.clear(); + this.mGlassTier = 0; + this.mCasing = 0; + + if (!this.checkPiece(STRUCTURE_PIECE_MAIN, 2, 3, 0)) return false; + + return this.mCasing >= 19 && this.mRadHatches.size() <= 1 + && this.mOutputHatches.size() == 1 + && this.mMaintenanceHatches.size() == 1 + && this.mInputHatches.size() > 0 + && this.mEnergyHatches.size() > 0; + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack itemStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + private void sendAllRequiredRendererPackets() { + int height = this.reCalculateHeight(); + if (this.mFluid != null && height > 1 && this.reCalculateFluidAmmount() > 0) { + for (int x = -1; x < 2; x++) for (int y = 1; y < height; y++) + for (int z = -1; z < 2; z++) this.sendPackagesOrRenewRenderer(x, y, z, this.mCulture); + } + } + + private void sendPackagesOrRenewRenderer(int x, int y, int z, BioCulture lCulture) { + int xDir = this.getXDir(); + int zDir = this.getZDir(); + + MTEBioVat.staticColorMap.remove( + new Coords( + xDir + x + + this.getBaseMetaTileEntity() + .getXCoord(), + y + this.getBaseMetaTileEntity() + .getYCoord(), + zDir + z + + this.getBaseMetaTileEntity() + .getZCoord(), + this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId)); + MTEBioVat.staticColorMap.put( + new Coords( + xDir + x + + this.getBaseMetaTileEntity() + .getXCoord(), + y + this.getBaseMetaTileEntity() + .getYCoord(), + zDir + z + + this.getBaseMetaTileEntity() + .getZCoord(), + this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId), + lCulture == null ? BioCulture.NULLCULTURE.getColorRGB() : lCulture.getColorRGB()); + + if (SideReference.Side.Server) { + MainMod.BW_Network_instance.sendPacketToAllPlayersInRange( + this.getBaseMetaTileEntity() + .getWorld(), + new RendererPacket( + new Coords( + xDir + x + + this.getBaseMetaTileEntity() + .getXCoord(), + y + this.getBaseMetaTileEntity() + .getYCoord(), + zDir + z + + this.getBaseMetaTileEntity() + .getZCoord(), + this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId), + lCulture == null ? BioCulture.NULLCULTURE.getColorRGB() : lCulture.getColorRGB(), + true), + this.getBaseMetaTileEntity() + .getXCoord(), + this.getBaseMetaTileEntity() + .getZCoord()); + MainMod.BW_Network_instance.sendPacketToAllPlayersInRange( + this.getBaseMetaTileEntity() + .getWorld(), + new RendererPacket( + new Coords( + xDir + x + + this.getBaseMetaTileEntity() + .getXCoord(), + y + this.getBaseMetaTileEntity() + .getYCoord(), + zDir + z + + this.getBaseMetaTileEntity() + .getZCoord(), + this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId), + lCulture == null ? BioCulture.NULLCULTURE.getColorRGB() : lCulture.getColorRGB(), + false), + this.getBaseMetaTileEntity() + .getXCoord(), + this.getBaseMetaTileEntity() + .getZCoord()); + } + this.needsVisualUpdate = true; + } + + private void check_Chunk() { + World aWorld = this.getBaseMetaTileEntity() + .getWorld(); + if (!aWorld.isRemote) { + + for (Object tObject : aWorld.playerEntities) { + if (!(tObject instanceof EntityPlayerMP tPlayer)) { + break; + } + Chunk tChunk = aWorld.getChunkFromBlockCoords( + this.getBaseMetaTileEntity() + .getXCoord(), + this.getBaseMetaTileEntity() + .getZCoord()); + if (tPlayer.getServerForPlayer() + .getPlayerManager() + .isPlayerWatchingChunk(tPlayer, tChunk.xPosition, tChunk.zPosition)) { + if (!this.playerMPHashSet.contains(tPlayer)) { + this.playerMPHashSet.add(tPlayer); + this.sendAllRequiredRendererPackets(); + } + } else { + this.playerMPHashSet.remove(tPlayer); + } + } + } + } + + private void placeFluid() { + this.isVisibleFluid = true; + int xDir = this.getXDir(); + int zDir = this.getZDir(); + this.height = this.reCalculateHeight(); + if (this.mFluid != null && this.height > 1 && this.reCalculateFluidAmmount() > 0) for (int x = -1; x < 2; x++) { + for (int y = 0; y < this.height; y++) { + for (int z = -1; z < 2; z++) { + if (this.getBaseMetaTileEntity() + .getWorld() + .getBlock( + xDir + x + + this.getBaseMetaTileEntity() + .getXCoord(), + y + this.getBaseMetaTileEntity() + .getYCoord(), + zDir + z + + this.getBaseMetaTileEntity() + .getZCoord()) + .equals(Blocks.air)) + this.getBaseMetaTileEntity() + .getWorld() + .setBlock( + xDir + x + + this.getBaseMetaTileEntity() + .getXCoord(), + y + this.getBaseMetaTileEntity() + .getYCoord(), + zDir + z + + this.getBaseMetaTileEntity() + .getZCoord(), + FluidLoader.bioFluidBlock); + } + } + } + } + + private void removeFluid(int xDir, int zDir) { + this.isVisibleFluid = false; + + for (int x = -1; x < 2; x++) { + for (int y = 1; y < 3; y++) { + for (int z = -1; z < 2; z++) { + if (this.getBaseMetaTileEntity() + .getWorld() + .getBlock( + xDir + x + + this.getBaseMetaTileEntity() + .getXCoord(), + y + this.getBaseMetaTileEntity() + .getYCoord(), + zDir + z + + this.getBaseMetaTileEntity() + .getZCoord()) + .equals(FluidLoader.bioFluidBlock)) + this.getBaseMetaTileEntity() + .getWorld() + .setBlockToAir( + xDir + x + + this.getBaseMetaTileEntity() + .getXCoord(), + y + this.getBaseMetaTileEntity() + .getYCoord(), + zDir + z + + this.getBaseMetaTileEntity() + .getZCoord()); + MTEBioVat.staticColorMap.remove( + new Coords( + xDir + x + + this.getBaseMetaTileEntity() + .getXCoord(), + y + this.getBaseMetaTileEntity() + .getYCoord(), + zDir + z + + this.getBaseMetaTileEntity() + .getZCoord()), + this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId); + } + } + } + } + + private int reCalculateFluidAmmount() { + return this.getStoredFluids() + .stream() + .mapToInt(fluidStack -> fluidStack.amount) + .sum(); + } + + private int reCalculateHeight() { + return this.reCalculateFluidAmmount() > this.getCapacity() / 4 - 1 + ? this.reCalculateFluidAmmount() >= this.getCapacity() / 2 ? 3 : 2 + : 1; + } + + public void doAllVisualThings() { + if (this.getBaseMetaTileEntity() + .isServerSide()) { + if (this.mMachine) { + ItemStack aStack = this.mInventory[1]; + BioCulture lCulture = null; + int xDir = this.getXDir(); + int zDir = this.getZDir(); + + if (this.getBaseMetaTileEntity() + .getTimer() % 200 == 0) { + this.check_Chunk(); + } + + if (this.needsVisualUpdate && this.getBaseMetaTileEntity() + .getTimer() % MTEBioVat.TIMERDIVIDER == 0) { + for (int x = -1; x < 2; x++) + for (int y = 1; y < 3; y++) for (int z = -1; z < 2; z++) this.getBaseMetaTileEntity() + .getWorld() + .setBlockToAir( + xDir + x + + this.getBaseMetaTileEntity() + .getXCoord(), + y + this.getBaseMetaTileEntity() + .getYCoord(), + zDir + z + + this.getBaseMetaTileEntity() + .getZCoord()); + } + + this.height = this.reCalculateHeight(); + if (this.mFluid != null && this.height > 1 && this.reCalculateFluidAmmount() > 0) { + if (!BWUtil.areStacksEqualOrNull(aStack, this.mStack) + || this.needsVisualUpdate && this.getBaseMetaTileEntity() + .getTimer() % MTEBioVat.TIMERDIVIDER == 1) { + for (int x = -1; x < 2; x++) { + for (int y = 1; y < this.height; y++) { + for (int z = -1; z < 2; z++) { + if (aStack == null + || aStack.getItem() instanceof ItemLabParts && aStack.getItemDamage() == 0) { + if (this.mCulture == null || aStack == null + || aStack.getTagCompound() == null + || this.mCulture.getID() != aStack.getTagCompound() + .getInteger("ID")) { + lCulture = aStack == null || aStack.getTagCompound() == null ? null + : BioCulture.getBioCulture( + aStack.getTagCompound() + .getString("Name")); + this.sendPackagesOrRenewRenderer(x, y, z, lCulture); + } + } + } + } + } + this.mStack = aStack; + this.mCulture = lCulture; + } + if (this.needsVisualUpdate && this.getBaseMetaTileEntity() + .getTimer() % MTEBioVat.TIMERDIVIDER == 1) { + if (this.getBaseMetaTileEntity() + .isClientSide()) new Throwable().printStackTrace(); + this.placeFluid(); + this.needsVisualUpdate = false; + } + } + } else { + this.onRemoval(); + } + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (this.height != this.reCalculateHeight()) this.needsVisualUpdate = true; + this.doAllVisualThings(); + if (this.getBaseMetaTileEntity() + .isServerSide() && this.mRadHatches.size() == 1) { + this.mSievert = this.mRadHatches.get(0) + .getSievert(); + if (this.getBaseMetaTileEntity() + .isActive() && this.mNeededSievert > this.mSievert) this.mOutputFluids = null; + } + if (aBaseMetaTileEntity.isServerSide() && this.mMaxProgresstime <= 0) { + this.mTimes = 0; + this.mMaxProgresstime = 0; + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mFluidHeight", this.height); + if (this.mCulture != null && !this.mCulture.getName() + .isEmpty()) aNBT.setString("mCulture", this.mCulture.getName()); + else if ((this.mCulture == null || this.mCulture.getName() + .isEmpty()) && !aNBT.getString("mCulture") + .isEmpty()) { + aNBT.removeTag("mCulture"); + } + if (this.mFluid != null) aNBT.setString("mFluid", this.mFluid.getName()); + aNBT.setInteger("mSievert", this.mSievert); + aNBT.setInteger("mNeededSievert", this.mNeededSievert); + aNBT.setBoolean("isVisibleFluid", this.isVisibleFluid); + super.saveNBTData(aNBT); + } + + @Override + public void onRemoval() { + if (this.isVisibleFluid) { + int xDir = this.getXDir(); + int zDir = this.getZDir(); + this.removeFluid(xDir, zDir); + this.sendRenderPackets(xDir, zDir); + } else if (this.getBaseMetaTileEntity() + .getWorld() + .getWorldTime() % 20 == 7) { + this.sendRenderPackets(); + } + + super.onRemoval(); + } + + private int getXDir() { + return this.getBaseMetaTileEntity() + .getBackFacing().offsetX * 2; + } + + private int getZDir() { + return this.getBaseMetaTileEntity() + .getBackFacing().offsetZ * 2; + } + + private void sendRenderPackets() { + int xDir = this.getXDir(); + int zDir = this.getZDir(); + this.sendRenderPackets(xDir, zDir); + } + + private void sendRenderPackets(int xDir, int zDir) { + if (SideReference.Side.Server) { + for (int x = -1; x < 2; x++) { + for (int y = 1; y < 3; y++) { + for (int z = -1; z < 2; z++) { + MainMod.BW_Network_instance.sendPacketToAllPlayersInRange( + this.getBaseMetaTileEntity() + .getWorld(), + new RendererPacket( + new Coords( + xDir + x + + this.getBaseMetaTileEntity() + .getXCoord(), + y + this.getBaseMetaTileEntity() + .getYCoord(), + zDir + z + + this.getBaseMetaTileEntity() + .getZCoord(), + this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId), + this.mCulture == null ? BioCulture.NULLCULTURE.getColorRGB() + : this.mCulture.getColorRGB(), + true), + this.getBaseMetaTileEntity() + .getXCoord(), + this.getBaseMetaTileEntity() + .getZCoord()); + } + } + } + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.height = aNBT.getInteger("mFluidHeight"); + this.mCulture = BioCulture.getBioCulture(aNBT.getString("mCulture")); + if (!aNBT.getString("mFluid") + .isEmpty()) this.mFluid = FluidRegistry.getFluid(aNBT.getString("mFluid")); + this.mSievert = aNBT.getInteger("mSievert"); + this.mNeededSievert = aNBT.getInteger("mNeededSievert"); + super.loadNBTData(aNBT); + this.isVisibleFluid = aNBT.getBoolean("isVisibleFluid"); + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEBioVat(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + this.buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 2, 3, 0); + } + + @Override + public String[] getInfoData() { + final String[] baseInfoData = super.getInfoData(); + final String[] infoData = new String[baseInfoData.length + 2]; + System.arraycopy(baseInfoData, 0, infoData, 0, baseInfoData.length); + // See https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/11923 + // here we must check the machine is well-formed as otherwise getExpectedMultiplier might error out! + infoData[infoData.length - 2] = StatCollector.translateToLocal("BW.infoData.BioVat.expectedProduction") + ": " + + EnumChatFormatting.GREEN + + (this.mMachine + ? (this.mMaxProgresstime <= 0 ? this.getExpectedMultiplier(null, false) : this.mExpectedMultiplier) + * 100 + : -1) + + EnumChatFormatting.RESET + + " %"; + infoData[infoData.length - 1] = StatCollector.translateToLocal("BW.infoData.BioVat.production") + ": " + + EnumChatFormatting.GREEN + + (this.mMaxProgresstime <= 0 ? 0 : this.mTimes) * 100 + + EnumChatFormatting.RESET + + " %"; + return infoData; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + batchMode = !batchMode; + if (batchMode) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } + return false; + } + +} diff --git a/src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java b/src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java new file mode 100644 index 0000000000..80f851167d --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/MTECircuitAssemblyLine.java @@ -0,0 +1,672 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis; + +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS; +import static bartworks.util.BWUtil.ofGlassTieredMixed; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.SoundResource.IC2_MACHINES_MAGNETIZER_LOOP; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_GLOW; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static gregtech.api.util.GTUtility.getColoredTierNameFromTier; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; + +import bartworks.API.modularUI.BWUITextures; +import bartworks.API.recipe.BartWorksRecipeMaps; +import bartworks.system.material.CircuitGeneration.BWMetaItems; +import bartworks.system.material.CircuitGeneration.CircuitImprintLoader; +import bartworks.util.BWTooltipReference; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTECircuitAssemblyLine extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable { + + private static final int CASING_INDEX = 16; + + private static final String STRUCTURE_PIECE_FIRST = "first"; + private static final String STRUCTURE_PIECE_NEXT = "next"; + private static final String STRUCTURE_PIECE_NEXT_HINT = "next_hint"; + private static final String STRUCTURE_PIECE_LAST = "last"; + + private static final int MINIMUM_CIRCUIT_ASSEMBLER_LENGTH = 5; + protected static final String IMPRINT_KEY = "Type"; + protected static final String LENGTH_KEY = "Length"; + protected static final String RUNNING_MODE_KEY = "RunningMode"; + + private int length; + private int mode; + private String imprintedItemName; + private ItemStack imprintedStack; + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_FIRST, + transpose(new String[][] { { "~", "G", "G" }, { "g", "l", "g" }, { "b", "i", "b" }, })) + .addShape( + STRUCTURE_PIECE_NEXT, + transpose(new String[][] { { "G", "G", "G" }, { "g", "l", "g" }, { "b", "I", "b" }, })) + .addShape( + STRUCTURE_PIECE_NEXT_HINT, + transpose(new String[][] { { "G", "G", "G" }, { "g", "l", "g" }, { "b", "i", "b" }, })) + .addShape( + STRUCTURE_PIECE_LAST, + transpose(new String[][] { { "G", "G", "G" }, { "g", "l", "g" }, { "b", "o", "b" }, })) + .addElement( + 'G', + buildHatchAdder(MTECircuitAssemblyLine.class).atLeast(Energy) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(GregTechAPI.sBlockCasings3, 10)) + .addElement('g', ofGlassTieredMixed((byte) 4, (byte) 127, 5)) + .addElement('l', ofBlock(GregTechAPI.sBlockCasings2, 5)) // assembling line casings + .addElement( + 'b', + buildHatchAdder(MTECircuitAssemblyLine.class).atLeast(InputHatch, Maintenance) + .casingIndex(CASING_INDEX) + .dot(2) + .disallowOnly(ForgeDirection.EAST, ForgeDirection.WEST) + .buildAndChain(GregTechAPI.sBlockCasings2, 0)) + .addElement('i', InputBus.newAny(CASING_INDEX, 3, ForgeDirection.DOWN)) + .addElement( + 'I', + buildHatchAdder(MTECircuitAssemblyLine.class).atLeast(InputHatch, InputBus, OutputBus) + .casingIndex(CASING_INDEX) + .dot(2) + .disallowOnly(ForgeDirection.EAST, ForgeDirection.WEST) + .buildAndChain(GregTechAPI.sBlockCasings2, 0)) + .addElement('o', OutputBus.newAny(CASING_INDEX, 2, ForgeDirection.DOWN)) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Circuit Assembler/Circuit Assembly Line") + .addInfo("Controller block for the Circuit Assembly Line") + .addInfo("Change Mode with Screwdriver") + .addInfo("Does not lose efficiency when overclocked") + .addInfo( + "--------- " + EnumChatFormatting.GOLD + + StatCollector.translateToLocal("chat.cal.mode.0") + + EnumChatFormatting.GRAY + + " --------") + .addInfo("Imprint this machine with a Circuit Imprint,") + .addInfo("by putting the imprint in the controller") + .addInfo("Every Circuit Assembly Line can only be imprinted ONCE") + .addInfo( + "--------- " + EnumChatFormatting.GOLD + + StatCollector.translateToLocal("chat.cal.mode.1") + + EnumChatFormatting.GRAY + + " --------") + .addInfo( + "Does Circuit Assembler recipes, Minimum Length: " + EnumChatFormatting.RED + + MINIMUM_CIRCUIT_ASSEMBLER_LENGTH + + EnumChatFormatting.GRAY) + .addInfo("Recipe tier in Circuit Assembler mode is at most Energy Hatch tier - 1.") + .addInfo("This mode supports Crafting Input Buffer/Bus and allows bus separation") + .addInfo("") + .addSeparator() + .addInfo(BWTooltipReference.TT_BLUEPRINT) + .beginVariableStructureBlock(2, 7, 3, 3, 3, 3, false) + .addStructureInfo("From Bottom to Top, Left to Right") + .addStructureInfo( + "Layer 1 - Solid Steel Machine Casing, Input bus (Last Output bus), Solid Steel Machine Casing") + .addStructureInfo( + "Layer 2 - " + getColoredTierNameFromTier((byte) 4) + + "+ Tier Glass, Assembling Line Casing, " + + getColoredTierNameFromTier((byte) 4) + + "+ Tier Glass") + .addStructureInfo("Layer 3 - Grate Machine Casing") + .addStructureInfo("Up to 7 repeating slices, last is Output Bus") + .addController("Layer 3 first slice front") + .addOtherStructurePart( + "1x " + StatCollector.translateToLocal("GT5U.MBTT.EnergyHatch"), + "Any layer 3 casing", + 1) + .addInputHatch("Any layer 1 casing", 2) + .addInputBus("As specified on layer 1", 3, 4) + .addOutputBus("As specified in final slice on layer 1", 4) + .addOtherStructurePart(getColoredTierNameFromTier((byte) 4) + "+ Tier Glass", "As specified on layer 2", 5) + .addMaintenanceHatch("Any layer 1 casing", 2) + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS); + return tt; + } + + public String getTypeForDisplay() { + + if (!isImprinted()) return ""; + return GTLanguageManager.getTranslation( + GTLanguageManager.getTranslateableItemStackName(CircuitImprintLoader.getStackFromTag(this.type))); + } + + private NBTTagCompound type = new NBTTagCompound(); + + public MTECircuitAssemblyLine(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + private MTECircuitAssemblyLine(String aName) { + super(aName); + } + + public boolean isImprinted() { + return !this.type.hasNoTags(); + } + + private boolean imprintMachine(ItemStack itemStack) { + if (isImprinted()) return true; + if (!GTUtility.isStackValid(itemStack)) return false; + if (itemStack.getItem() instanceof BWMetaItems.BW_GT_MetaGenCircuits && itemStack.getItemDamage() == 0 + && itemStack.getTagCompound() != null) { + this.type = itemStack.getTagCompound(); + itemStack.stackSize -= 1; + if (itemStack == getControllerSlot() && itemStack.stackSize <= 0) { + mInventory[getControllerSlotIndex()] = null; + } + this.getBaseMetaTileEntity() + .issueBlockUpdate(); + return true; + } + return false; + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 20) { + GTUtility.doSoundAtClient(IC2_MACHINES_MAGNETIZER_LOOP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.type = aNBT.getCompoundTag(IMPRINT_KEY); + this.imprintedItemName = this.type == null ? "" + : GTLanguageManager.getTranslateableItemStackName(ItemStack.loadItemStackFromNBT(this.type)); + mode = aNBT.getInteger(RUNNING_MODE_KEY); + if (aNBT.hasKey(LENGTH_KEY)) { + length = aNBT.getInteger(LENGTH_KEY); + } + super.loadNBTData(aNBT); + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + if (isImprinted()) aNBT.setTag(IMPRINT_KEY, this.type); + aNBT.setInteger(RUNNING_MODE_KEY, mode); + super.saveNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + if (isImprinted()) aNBT.setTag(IMPRINT_KEY, this.type); + aNBT.setInteger(RUNNING_MODE_KEY, mode); + aNBT.setInteger(LENGTH_KEY, length); + super.saveNBTData(aNBT); + } + + @Override + public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (mode == 0 && !isImprinted() && getBaseMetaTileEntity().isServerSide()) { + ItemStack heldItem = aPlayer.getHeldItem(); + if (imprintMachine(heldItem)) { + if (heldItem.stackSize <= 0) { + aPlayer.inventory.setInventorySlotContents(aPlayer.inventory.currentItem, null); + } + return; + } + } + super.onLeftclick(aBaseMetaTileEntity, aPlayer); + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (getBaseMetaTileEntity().isServerSide()) { + this.mode = (this.mode + 1) % 2; + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("chat.cal.mode." + this.mode)); + } + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + } + + @Override + public RecipeMap getRecipeMap() { + if (this.mode == 0) return BartWorksRecipeMaps.circuitAssemblyLineRecipes; + return RecipeMaps.circuitAssemblerRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(BartWorksRecipeMaps.circuitAssemblyLineRecipes, RecipeMaps.circuitAssemblerRecipes); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Override + @Nonnull + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + // limit CA mode recipes to hatch tier - 1 + if (MTECircuitAssemblyLine.this.mode == 1 + && recipe.mEUt > MTECircuitAssemblyLine.this.getMaxInputVoltage() / 4) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + }.enablePerfectOverclock(); + } + + @NotNull + @Override + public CheckRecipeResult checkProcessing() { + if (mode == 0) { + if (!isImprinted() && !this.imprintMachine(this.getControllerSlot())) + return SimpleCheckRecipeResult.ofFailure("no_imprint"); + if (this.imprintedItemName == null || this.imprintedStack == null) { + this.imprintedStack = new ItemStack(BWMetaItems.getCircuitParts(), 1, 0); + this.imprintedStack.setTagCompound(this.type); + this.imprintedItemName = GTLanguageManager.getTranslateableItemStackName(this.imprintedStack); + } + } else if (length < MINIMUM_CIRCUIT_ASSEMBLER_LENGTH) { + return SimpleCheckRecipeResult.ofFailure("not_enough_length"); + } + + return super.checkProcessing(); + } + + @Override + protected void setupProcessingLogic(ProcessingLogic logic) { + super.setupProcessingLogic(logic); + logic.setSpecialSlotItem(this.imprintedStack); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_MAGNETIZER_LOOP; + } + + @Override + public ArrayList getStoredInputs() { + if (mode == 0) { + ArrayList rList = new ArrayList<>(); + for (MTEHatchInputBus tHatch : filterValidMTEs(mInputBusses)) { + tHatch.mRecipeMap = this.getRecipeMap(); + for (int i = 0; i < tHatch.getBaseMetaTileEntity() + .getSizeInventory(); i++) { + if (tHatch.getBaseMetaTileEntity() + .getStackInSlot(i) != null) { + rList.add( + tHatch.getBaseMetaTileEntity() + .getStackInSlot(i)); + break; + } + } + } + return rList; + } + + return super.getStoredInputs(); + } + + @Override + public boolean addInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = this.getRecipeMap(); + return this.mInputHatches.add((MTEHatchInput) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchInputBus) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInputBus) aMetaTileEntity).mRecipeMap = this.getRecipeMap(); + return this.mInputBusses.add((MTEHatchInputBus) aMetaTileEntity); + } else { + return false; + } + } + + @Override + public boolean addInputHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null || !(aMetaTileEntity instanceof MTEHatchInput)) { + return false; + } else { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = this.getRecipeMap(); + return this.mInputHatches.add((MTEHatchInput) aMetaTileEntity); + } + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack itemStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTECircuitAssemblyLine(this.mName); + } + + private String[] infoDataBuffer; + + @Override + public String[] getInfoData() { + if (this.infoDataBuffer != null) return this.infoDataBuffer; + + String[] oldInfo = super.getInfoData(); + this.infoDataBuffer = new String[oldInfo.length + 1]; + System.arraycopy(oldInfo, 0, this.infoDataBuffer, 0, oldInfo.length); + this.infoDataBuffer[oldInfo.length] = StatCollector.translateToLocal("tooltip.cal.imprintedWith") + " " + + EnumChatFormatting.YELLOW + + this.getTypeForDisplay(); + return this.infoDataBuffer; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + if (!this.checkPiece(STRUCTURE_PIECE_FIRST, 0, 0, 0)) { + return false; + } + return this.checkMachine(true) || this.checkMachine(false); + } + + private boolean checkMachine(boolean leftToRight) { + + for (int i = 1; i < 7; ++i) { + if (!this.checkPiece(STRUCTURE_PIECE_NEXT, leftToRight ? -i : i, 0, 0)) { + return false; + } + length = i + 1; + + if (!this.mOutputBusses.isEmpty()) { + return this.mEnergyHatches.size() == 1 && this.mMaintenanceHatches.size() == 1; + } + } + + return false; + } + + public void construct(ItemStack stackSize, boolean hintsOnly) { + this.buildPiece(STRUCTURE_PIECE_FIRST, stackSize, hintsOnly, 0, 0, 0); + int tLength = Math.min(stackSize.stackSize + 1, 7); + + for (int i = 1; i < tLength; ++i) { + this.buildPiece(STRUCTURE_PIECE_NEXT, stackSize, hintsOnly, -i, 0, 0); + } + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (this.mMachine) return -1; + int built; + built = survivialBuildPiece(STRUCTURE_PIECE_FIRST, stackSize, 0, 0, 0, elementBudget, env, false, true); + if (built >= 0) return built; + int tLength = Math.min(stackSize.stackSize + 1, 7); + + for (int i = 1; i < tLength - 1; ++i) { + built = survivialBuildPiece( + STRUCTURE_PIECE_NEXT_HINT, + stackSize, + -i, + 0, + 0, + elementBudget, + env, + false, + true); + if (built >= 0) return built; + } + return survivialBuildPiece( + STRUCTURE_PIECE_LAST, + stackSize, + -(tLength - 1), + 0, + 0, + elementBudget, + env, + false, + true); + } + + @Override + public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { + if (stack.hasTagCompound() && stack.stackTagCompound.hasKey(IMPRINT_KEY)) { + tooltip.add( + StatCollector.translateToLocal("tooltip.cal.imprintedWith") + " " + + EnumChatFormatting.YELLOW + + StatCollector.translateToLocal( + GTLanguageManager.getTranslateableItemStackName( + ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("Type"))))); + } + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder + .widget(new FakeSyncWidget.StringSyncer(() -> this.imprintedItemName, val -> this.imprintedItemName = val)); + builder.widget( + new CycleButtonWidget().setToggle(() -> mode == 1, val -> mode = val ? 1 : 0) + .setTextureGetter( + state -> state == 1 ? BWUITextures.OVERLAY_BUTTON_ASSEMBLER_MODE + : BWUITextures.OVERLAY_BUTTON_LINE_MODE) + .setBackground(GTUITextures.BUTTON_STANDARD) + .setPos(80, 91) + .setSize(16, 16) + .dynamicTooltip( + () -> Collections.singletonList(StatCollector.translateToLocal("chat.cal.mode." + mode))) + .setUpdateTooltipEveryTick(true) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + protected boolean supportsSlotAutomation(int aSlot) { + return aSlot == getControllerSlotIndex(); + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (!aPlayer.isSneaking()) { + if (mode == 0) return false; + inputSeparation = !inputSeparation; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); + return true; + } else { + batchMode = !batchMode; + if (batchMode) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } + } + + @Override + public boolean supportsInputSeparation() { + return mode != 0; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + public boolean isInputSeparationEnabled() { + return mode == 1 && super.isInputSeparationEnabled(); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + currenttip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector.translateToLocal("chat.cal.mode." + tag.getInteger(RUNNING_MODE_KEY))); + if (tag.hasKey("ImprintedWith") && tag.getInteger(RUNNING_MODE_KEY) == 0) currenttip.add( + StatCollector.translateToLocal("tooltip.cal.imprintedWith") + " " + + EnumChatFormatting.YELLOW + + tag.getString("ImprintedWith")); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + String imprintedWith = this.getTypeForDisplay(); + if (!imprintedWith.isEmpty()) tag.setString("ImprintedWith", imprintedWith); + tag.setInteger(RUNNING_MODE_KEY, mode); + } + + @Override + protected boolean supportsCraftingMEBuffer() { + return mode != 0; + } + +} diff --git a/src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java b/src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java new file mode 100644 index 0000000000..fca10c20fd --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/MTEDeepEarthHeatingPump.java @@ -0,0 +1,336 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis; + +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS; +import static gregtech.api.enums.GTValues.VN; + +import java.lang.reflect.Field; +import java.util.Arrays; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import bartworks.common.configs.ConfigHandler; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.multi.MTEDrillerBase; +import ic2.core.block.reactor.tileentity.TileEntityNuclearReactorElectric; + +public class MTEDeepEarthHeatingPump extends MTEDrillerBase { + + private static float nulearHeatMod = 2f; + private byte mMode; + private byte mTier; + + public MTEDeepEarthHeatingPump(int aID, int tier, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + this.mTier = (byte) tier; + } + + public MTEDeepEarthHeatingPump(String aName, byte mTier) { + super(aName); + this.mTier = mTier; + } + + @Override + @SuppressWarnings("rawtypes") + public void onConfigLoad() { + try { + Class c = TileEntityNuclearReactorElectric.class; + Field f = c.getDeclaredField("huOutputModifier"); + f.setAccessible(true); + MTEDeepEarthHeatingPump.nulearHeatMod = f.getFloat(f); + } catch (SecurityException | IllegalArgumentException | ExceptionInInitializerError | NullPointerException + | IllegalAccessException | NoSuchFieldException e) { + e.printStackTrace(); + } + super.onConfigLoad(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setByte("mTier", this.mTier); + aNBT.setByte("mMode", this.mMode); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.mTier = aNBT.getByte("mTier"); + this.mMode = aNBT.getByte("mMode"); + super.loadNBTData(aNBT); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEDeepEarthHeatingPump(this.mName, this.mTier); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + String casings = this.getCasingBlockItem() + .get(0) + .getDisplayName(); + tt.addMachineType("Geothermal Heat Pump") + .addInfo("Consumes " + GTValues.V[this.mTier + 2] + "EU/t") + .addInfo("Has 4 Modes, use the Screwdriver to change them:"); + if (ConfigHandler.DEHPDirectSteam) { + tt.addInfo("0 Idle, 1 Steam, 2 Superheated Steam (requires Distilled Water), 3 Retract") + .addInfo("Explodes when it runs out of Water/Distilled Water") + .addInfo( + "Converts " + (long) (this.mTier * 1200 * 20) + + "L/s Water(minus 10% per Maintenance Problem) to Steam") + .addInfo( + "Converts " + (long) (this.mTier * 600 * 20) + + "L/s Distilled Water(minus 10% per Maintenance Problem) to SuperheatedSteam"); + + } else { + tt.addInfo("0 Idle, 1 & 2 Coolant Heating Mode (no Difference between them), 3 Retract") + .addInfo("Explodes when it runs out of Coolant") + .addInfo( + "Heats up " + (long) (this.mTier * 24 * (double) MTEDeepEarthHeatingPump.nulearHeatMod) * 20 + + "L/s Coolant(minus 10% per Maintenance Problem)"); + } + tt.addSeparator() + .beginStructureBlock(3, 7, 3, false) + .addController("Front bottom") + .addOtherStructurePart(casings, "form the 3x1x3 Base") + .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") + .addOtherStructurePart( + this.getFrameMaterial().mName + " Frame Boxes", + "Each pillar's side and 1x3x1 on top") + .addEnergyHatch(VN[this.getMinTier()] + "+, Any base casing") + .addMaintenanceHatch("Any base casing") + .addInputBus("Mining Pipes, optional, any base casing") + .addInputHatch("Any base casing") + .addOutputHatch("Any base casing") + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS); + return tt; + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_HeatProof; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.Tungsten; + } + + @Override + protected int getCasingTextureIndex() { + return 11; + } + + @Override + protected int getMinTier() { + return 2 + this.mTier; + } + + @Override + protected boolean checkHatches() { + return !this.mMaintenanceHatches.isEmpty() && !this.mOutputHatches.isEmpty() && !this.mInputHatches.isEmpty(); + } + + private long getFluidFromHatches(Fluid f) { + long ret = 0; + for (MTEHatchInput ih : this.mInputHatches) { + if (ih.getFluid() + .getFluid() + .equals(f)) ret += ih.getFluidAmount(); + } + return ret; + } + + private long getWaterFromHatches(boolean onlyDistilled) { + Fluid toConsume1 = FluidRegistry.WATER; + Fluid toConsume2 = GTModHandler.getDistilledWater(1L) + .getFluid(); + if (onlyDistilled) toConsume1 = toConsume2; + long ret = 0; + for (MTEHatchInput ih : this.mInputHatches) { + if (ih.getFluid() + .getFluid() + .equals(toConsume1) + || ih.getFluid() + .getFluid() + .equals(toConsume2)) + ret += ih.getFluidAmount(); + } + return ret; + } + + @Override + protected boolean workingUpward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, + int yHead, int oldYHead) { + if (this.mMode != 3) { + this.isPickingPipes = false; + try { + Field workState = this.getClass() + .getField("workState"); + workState.setInt(this, 0); + } catch (NoSuchFieldError | NoSuchFieldException | IllegalAccessException ignored) {} + return true; + } + return super.workingUpward(aStack, xDrill, yDrill, zDrill, xPipe, zPipe, yHead, oldYHead); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (this.getBaseMetaTileEntity() + .getWorld().isRemote) return; + ++this.mMode; + if (this.mMode >= 4) this.mMode = 0; + GTUtility.sendChatToPlayer(aPlayer, "Mode: " + this.mMode); + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + } + + @Override + protected boolean workingDownward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, + int yHead, int oldYHead) { + if (this.mMode == 3) { + this.isPickingPipes = true; + try { + Field workState = this.getClass() + .getSuperclass() + .getDeclaredField("workState"); + workState.setInt(this, 2); + } catch (NoSuchFieldError | NoSuchFieldException | IllegalAccessException ignored) {} + return true; + } + + if (this.tryLowerPipeState(false) == 0) { + return true; + } + if (this.waitForPipes()) { + return false; + } + if (this.mMode == 0) { + this.mMode = 1; + } + if (ConfigHandler.DEHPDirectSteam) { + if (this.mMode == 1) { + long steamProduced = this.mTier * 600 * 2L * this.mEfficiency / 10000L; + long waterConsume = (steamProduced + 160) / 160; + + if (this.getWaterFromHatches(false) - waterConsume > 0) { + this.consumeFluid(FluidRegistry.WATER, waterConsume); + this.addOutput(GTModHandler.getSteam(steamProduced)); + } else { + this.explodeMultiblock(); + return false; + } + } else if (this.mMode == 2) { + long steamProduced = this.mTier * 300 * 2L * this.mEfficiency / 10000L; + long waterConsume = (steamProduced + 160) / 160; + + if (this.getWaterFromHatches(true) - waterConsume > 0) { + this.consumeFluid( + GTModHandler.getDistilledWater(1) + .getFluid(), + waterConsume); + this.addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", (int) steamProduced)); + } else { + this.explodeMultiblock(); + return false; + } + } + } else if (this.mMode == 1 || this.mMode == 2) { + long coolantConverted = (long) (this.mTier * 24 + * (double) MTEDeepEarthHeatingPump.nulearHeatMod + * this.mEfficiency + / 10000L); + if (this.getFluidFromHatches(FluidRegistry.getFluid("ic2coolant")) - coolantConverted > 0) { + this.consumeFluid(FluidRegistry.getFluid("ic2coolant"), coolantConverted); + this.addOutput(FluidRegistry.getFluidStack("ic2hotcoolant", (int) coolantConverted)); + } else { + this.explodeMultiblock(); + return false; + } + } + return true; + } + + private boolean consumeFluid(Fluid fluid, long ammount) { + if (ammount > Integer.MAX_VALUE) { + int[] tmp = new int[(int) (ammount / Integer.MAX_VALUE)]; + Arrays.fill(tmp, (int) (ammount / Integer.MAX_VALUE)); + for (int i = 0; i < tmp.length; i++) { + for (MTEHatchInput ih : this.mInputHatches) { + if (fluid.equals(FluidRegistry.WATER) ? ih.getFluid() + .getFluid() + .equals(fluid) + || ih.getFluid() + .getFluid() + .equals( + GTModHandler.getDistilledWater(1) + .getFluid()) + : ih.getFluid() + .getFluid() + .equals(fluid)) + tmp[i] -= ih.drain((int) ammount, true).amount; + if (tmp[i] <= 0) break; + } + } + + return tmp[tmp.length - 1] <= 0; + } + + long tmp = ammount; + for (MTEHatchInput ih : this.mInputHatches) { + if (fluid.equals(FluidRegistry.WATER) ? ih.getFluid() + .getFluid() + .equals(fluid) + || ih.getFluid() + .getFluid() + .equals( + GTModHandler.getDistilledWater(1) + .getFluid()) + : ih.getFluid() + .getFluid() + .equals(fluid)) + tmp -= ih.drain((int) ammount, true).amount; + if (tmp <= 0) return true; + } + return false; + } + + @Override + protected void setElectricityStats() { + try { + this.mEUt = this.isPickingPipes ? 60 : Math.toIntExact(GTValues.V[this.getMinTier()]); + } catch (ArithmeticException e) { + e.printStackTrace(); + this.mEUt = Integer.MAX_VALUE - 7; + } + this.mProgresstime = 0; + this.mMaxProgresstime = 1; + this.mEfficiency = this.getCurrentEfficiency(null); + this.mEfficiencyIncrease = 10000; + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/MTEElectricImplosionCompressor.java b/src/main/java/bartworks/common/tileentities/multis/MTEElectricImplosionCompressor.java new file mode 100644 index 0000000000..4b99f97ec5 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/MTEElectricImplosionCompressor.java @@ -0,0 +1,565 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis; + +import static bartworks.common.loaders.ItemRegistry.BW_BLOCKS; +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTWORKS; +import static bartworks.util.BWTooltipReference.TT; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.ExoticEnergy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.ITierConverter; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureUtility; + +import bartworks.API.recipe.BartWorksRecipeMaps; +import bartworks.MainMod; +import bartworks.client.renderer.EICPistonVisualizer; +import bartworks.common.configs.ConfigHandler; +import bartworks.common.net.EICPacket; +import bartworks.util.Coords; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import fox.spiteful.avaritia.blocks.LudicrousBlocks; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Mods; +import gregtech.api.enums.SoundResource; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; + +public class MTEElectricImplosionCompressor extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final boolean pistonEnabled = !ConfigHandler.disablePistonInEIC; + private Boolean piston = true; + private static final SoundResource sound = SoundResource.RANDOM_EXPLODE; + private final ArrayList chunkCoordinates = new ArrayList<>(5); + private int mBlockTier = 0; + private int mCasing; + + public MTEElectricImplosionCompressor(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEElectricImplosionCompressor(String aName) { + super(aName); + } + + private static final int CASING_INDEX = 16; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { "ccc", "cec", "ccc" }, { "ttt", "tft", "ttt" }, { "ttt", "tft", "ttt" }, + { "nnn", "nnn", "nnn" }, { "nNn", "NNN", "nNn" }, { "nnn", "nnn", "nnn" }, { "t~t", "tft", "ttt" }, + { "ttt", "tft", "ttt" }, { "CCC", "CeC", "CCC" }, })) + .addElement('c', ofChain(ofBlock(GregTechAPI.sBlockCasings2, 0), ofBlock(GregTechAPI.sBlockCasings3, 4))) + .addElement('t', ofBlock(BW_BLOCKS[2], 1)) + .addElement('f', ofBlock(BW_BLOCKS[2], 0)) + .addElement( + 'n', + StructureUtility.ofBlocksTiered( + tieredBlockConverter(), + getAllBlockTiers(), + 0, + MTEElectricImplosionCompressor::setBlockTier, + MTEElectricImplosionCompressor::getBlockTier)) + .addElement( + 'C', + buildHatchAdder(MTEElectricImplosionCompressor.class) + .atLeast(InputBus, OutputBus, Maintenance, InputHatch, OutputHatch) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain( + onElementPass(x -> ++x.mCasing, ofBlock(GregTechAPI.sBlockCasings2, 0)), + onElementPass(x -> ++x.mCasing, ofBlock(GregTechAPI.sBlockCasings3, 4)))) + .addElement( + 'e', + buildHatchAdder(MTEElectricImplosionCompressor.class).atLeast(Energy.or(ExoticEnergy)) + .casingIndex(CASING_INDEX) + .dot(2) + .buildAndChain( + onElementPass(x -> ++x.mCasing, ofBlock(GregTechAPI.sBlockCasings2, 0)), + onElementPass(x -> ++x.mCasing, ofBlock(GregTechAPI.sBlockCasings3, 4)))) + .addElement('N', new IStructureElement<>() { + + // Much of this based on StructureUtility.ofBlocksTiered + private final List> tiers = getAllBlockTiers(); + + @Override + public boolean check(MTEElectricImplosionCompressor te, World world, int x, int y, int z) { + if (!te.piston && !world.isAirBlock(x, y, z)) return false; + if (te.piston) { + Block candidate = world.getBlock(x, y, z); + int candidateMeta = world.getBlockMetadata(x, y, z); + return getTierOfBlock(candidate, candidateMeta) != -1; + } + return true; + } + + private Pair getTier(ItemStack trigger) { + return this.tiers.get(Math.min(Math.max(trigger.stackSize, 1), this.tiers.size()) - 1); + } + + @Override + public boolean spawnHint(MTEElectricImplosionCompressor te, World world, int x, int y, int z, + ItemStack itemStack) { + Pair tier = this.getTier(itemStack); + if (te.piston) StructureLibAPI.hintParticle(world, x, y, z, tier.getKey(), tier.getValue()); + return true; + } + + @Override + public boolean placeBlock(MTEElectricImplosionCompressor te, World world, int x, int y, int z, + ItemStack itemStack) { + Pair tier = this.getTier(itemStack); + if (te.piston) world.setBlock(x, y, z, tier.getKey(), tier.getValue(), 3); + else world.setBlockToAir(x, y, z); + return true; + } + + @Override + public BlocksToPlace getBlocksToPlace(MTEElectricImplosionCompressor t, World world, int x, int y, int z, + ItemStack trigger, AutoPlaceEnvironment env) { + return BlocksToPlace.createEmpty(); + } + + @Override + public PlaceResult survivalPlaceBlock(MTEElectricImplosionCompressor t, World world, int x, int y, int z, + ItemStack trigger, AutoPlaceEnvironment env) { + return isAir().survivalPlaceBlock(t, world, x, y, z, trigger, env); + } + }) + .build(); + + public static List> getAllBlockTiers() { + return new ArrayList<>() { + + private static final long serialVersionUID = 8171991663102417651L; + + { + this.add(Pair.of(GregTechAPI.sBlockMetal5, 2)); + if (Mods.Avaritia.isModLoaded()) { + this.add(Pair.of(LudicrousBlocks.resource_block, 1)); + } + this.add(Pair.of(GregTechAPI.sBlockMetal9, 4)); + this.add(Pair.of(GregTechAPI.sBlockMetal9, 3)); + this.add(Pair.of(GregTechAPI.sBlockMetal9, 8)); + } + + }; + } + + public static ITierConverter tieredBlockConverter() { + return MTEElectricImplosionCompressor::getTierOfBlock; + } + + private static int getTierOfBlock(Block block, int meta) { + if (block == null) { + return -1; + } + if (block == GregTechAPI.sBlockMetal5 && meta == 2) { + return 1; // Neutronium + } + if (block == LudicrousBlocks.resource_block && meta == 1) { + return 2; // Infinity + } + if (block == GregTechAPI.sBlockMetal9) { + return switch (meta) { + case 4 -> 3; // Transcendent Metal + case 3 -> 4; // SpaceTime + case 8 -> 5; // Universium + default -> -1; + }; + } + return -1; + } + + private void setBlockTier(int tier) { + this.mBlockTier = tier; + } + + private int getBlockTier() { + return this.mBlockTier; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Implosion Compressor") + .addInfo("Explosions are fun") + .addInfo("Controller block for the Electric Implosion Compressor") + .addInfo("Uses electricity instead of Explosives") + .addInfo("Can parallel up to 4^(Tier - 1)") + .addInfo("Tier is determined by containment block") + .addInfo("Valid blocks: Neutronium, Infinity, Transcendent Metal, Spacetime, Universium") + .addInfo("Minimum allowed energy hatch tier is one below recipe tier") + .addInfo("Supports " + TT + " energy hatches") + .addSeparator() + .beginStructureBlock(3, 9, 3, false) + .addController("Front 3rd layer center") + .addCasingInfoMin("Solid Steel Machine Casing", 8, false) + .addStructureInfo("Casings can be replaced with Explosion Warning Signs") + .addOtherStructurePart("Transformer-Winding Blocks", "Outer layer 2,3,7,8") + .addOtherStructurePart("Nickel-Zinc-Ferrite Blocks", "Inner layer 2,3,7,8") + .addOtherStructurePart("Containment Blocks", "Layer 4,5,6") + .addMaintenanceHatch("Any bottom casing", 1) + .addInputBus("Any bottom casing", 1) + .addInputHatch("Any bottom casing", 1) + .addOutputBus("Any bottom casing", 1) + .addEnergyHatch("Bottom middle and/or top middle", 2) + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); + return tt; + } + + @Override + public RecipeMap getRecipeMap() { + return BartWorksRecipeMaps.electricImplosionCompressorRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + long voltage = MTEElectricImplosionCompressor.this.getAverageInputVoltage(); + // Only allow a minimum of T-1 energy hatch + if (recipe.mEUt > voltage * 4) { + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + // For overclocking we'll allow all power to be used + return super.createOverclockCalculator(recipe) + .setEUt(MTEElectricImplosionCompressor.this.getMaxInputEu()) + .setAmperage(1); + } + }.setMaxParallelSupplier(() -> (int) Math.pow(4, Math.max(this.mBlockTier - 1, 0))); + } + + private void updateChunkCoordinates() { + this.chunkCoordinates.clear(); + + for (int x = -1; x <= 1; x++) for (int z = -1; z <= 1; z++) { + if (Math.abs(x) != 1 || Math.abs(z) != 1) { + int[] abc = { x, -2, z + 1 }; + int[] xyz = { 0, 0, 0 }; + this.getExtendedFacing() + .getWorldOffset(abc, xyz); + xyz[0] += this.getBaseMetaTileEntity() + .getXCoord(); + xyz[1] += this.getBaseMetaTileEntity() + .getYCoord(); + xyz[2] += this.getBaseMetaTileEntity() + .getZCoord(); + this.chunkCoordinates.add(new ChunkCoordinates(xyz[0], xyz[1], xyz[2])); + } + } + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + this.updateChunkCoordinates(); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (pistonEnabled && aBaseMetaTileEntity.isActive() && aTick % 20 == 0) { + if (aBaseMetaTileEntity.isClientSide()) this.animatePiston(aBaseMetaTileEntity); + else if (aBaseMetaTileEntity.hasMufflerUpgrade()) MainMod.BW_Network_instance.sendPacketToAllPlayersInRange( + aBaseMetaTileEntity.getWorld(), + new EICPacket( + new Coords( + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord()), + true), + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getZCoord()); + } + } + + @Override + public void setExtendedFacing(ExtendedFacing newExtendedFacing) { + super.setExtendedFacing(newExtendedFacing); // Will call stopMachine + + this.updateChunkCoordinates(); + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + @Override + public void stopMachine() { + this.resetPiston(this.mBlockTier); + super.stopMachine(); + } + + private void resetPiston(int tier) { + if (!pistonEnabled) return; + IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); + if (!aBaseMetaTileEntity.isServerSide()) return; + if (!this.piston) { + List> tiers = getAllBlockTiers(); + Pair tieredBlock = tiers.get(Math.min(tier, tiers.size()) - 1); + this.chunkCoordinates.forEach(c -> { + // Don't replace real blocks in case user has placed something (e.g. tier upgrade) + if (aBaseMetaTileEntity.getWorld() + .isAirBlock(c.posX, c.posY, c.posZ)) { + aBaseMetaTileEntity.getWorld() + .setBlock(c.posX, c.posY, c.posZ, tieredBlock.getKey(), tieredBlock.getValue(), 3); + } + }); + this.piston = !this.piston; + } + } + + private void activatePiston() { + if (!pistonEnabled) return; + IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); + if (!aBaseMetaTileEntity.isServerSide()) return; + if (this.piston) { + this.chunkCoordinates.forEach( + c -> aBaseMetaTileEntity.getWorld() + .setBlockToAir(c.posX, c.posY, c.posZ)); + this.piston = !this.piston; + } + } + + private void animatePiston(IGregTechTileEntity aBaseMetaTileEntity) { + if (!aBaseMetaTileEntity.getWorld().isRemote) return; + + if (!this.getBaseMetaTileEntity() + .hasMufflerUpgrade()) + GTUtility.doSoundAtClient( + sound, + 10, + 1f, + 1f, + this.chunkCoordinates.get(0).posX, + this.chunkCoordinates.get(0).posY, + this.chunkCoordinates.get(0).posZ); + this.spawnVisualPistonBlocks( + aBaseMetaTileEntity.getWorld(), + this.chunkCoordinates.get(2).posX, + this.chunkCoordinates.get(2).posY, + this.chunkCoordinates.get(2).posZ, + 10); + } + + @SideOnly(Side.CLIENT) + private void spawnVisualPistonBlocks(World world, int x, int y, int z, int age) { + EICPistonVisualizer pistonVisualizer = new EICPistonVisualizer(world, x, y, z, age); + Minecraft.getMinecraft().effectRenderer.addEffect(pistonVisualizer); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("piston", this.piston); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("piston")) this.piston = aNBT.getBoolean("piston"); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { + int pistonTier = this.mBlockTier; + this.mCasing = 0; + int mMaxHatchTier = 0; + this.setBlockTier(0); + boolean isOK = this.checkPiece(STRUCTURE_PIECE_MAIN, 1, 6, 0); + + List energyHatches = this.getExoticAndNormalEnergyHatchList(); + for (MTEHatch hatch : energyHatches) { + mMaxHatchTier = Math.max(mMaxHatchTier, hatch.mTier); + } + + isOK = isOK && this.mMaintenanceHatches.size() == 1 && energyHatches.size() >= 1; + if (isOK) { + this.activatePiston(); + return true; + } + this.resetPiston(pistonTier); + return false; + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack itemStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEElectricImplosionCompressor(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + this.buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 1, 6, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (this.mMachine) return -1; + return this.survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 6, 0, elementBudget, env, false, true); + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + batchMode = !batchMode; + if (batchMode) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/MTEHighTempGasCooledReactor.java b/src/main/java/bartworks/common/tileentities/multis/MTEHighTempGasCooledReactor.java new file mode 100644 index 0000000000..73f6593d4f --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/MTEHighTempGasCooledReactor.java @@ -0,0 +1,619 @@ +/* + * Copyright (C) 2022 kuba6000 This program is free software: you can redistribute it and/or modify it under the terms + * of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. You should have received a copy of the GNU General Public License along with + * this program. If not, see . + */ + +package bartworks.common.tileentities.multis; + +import static bartworks.API.recipe.BartWorksRecipeMaps.htgrFakeRecipes; +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_VIA_BARTWORKS; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.AuthorKuba; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.common.items.SimpleSubItemClass; +import bartworks.system.material.WerkstoffLoader; +import bartworks.util.MathUtils; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEHighTempGasCooledReactor extends MTEEnhancedMultiBlockBase { + + private static final int BASECASINGINDEX = 181; + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { + { " BBBBBBB ", " BBBBBBBBB ", "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", + "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", " BBBBBBBBB ", " BBBBBBB " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " bbb~bbb ", " bbbbbbbbb ", "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", + "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", " bbbbbbbbb ", " bbbbbbb " }, })) + .addElement('c', onElementPass(x -> x.mCasing++, ofBlock(GregTechAPI.sBlockCasings8, 5))) + .addElement( + 'b', + ofChain( + ofHatchAdder(MTEHighTempGasCooledReactor::addOutputToMachineList, BASECASINGINDEX, 1), + ofHatchAdder(MTEHighTempGasCooledReactor::addMaintenanceToMachineList, BASECASINGINDEX, 1), + ofHatchAdder(MTEHighTempGasCooledReactor::addEnergyInputToMachineList, BASECASINGINDEX, 1), + onElementPass(x -> x.mCasing++, ofBlock(GregTechAPI.sBlockCasings8, 5)))) + .addElement( + 'B', + ofChain( + ofHatchAdder(MTEHighTempGasCooledReactor::addInputToMachineList, BASECASINGINDEX, 2), + onElementPass(x -> x.mCasing++, ofBlock(GregTechAPI.sBlockCasings8, 5)))) + // ofHatchAdderOptional(GT_TileEntity_HTGR::addInputToMachineList, BASECASINGINDEX, 2, + // GregTechAPI.sBlockCasings8, 5)) + .build(); + + private static final int HELIUM_NEEDED = 730000; + public static final int powerUsage = (int) TierEU.RECIPE_LuV; + private static final int maxcapacity = 720000; + private static final int mincapacity = maxcapacity / 10; + private int HeliumSupply; + private int fueltype = -1, fuelsupply = 0; + private boolean empty; + private int emptyticksnodiff = 0; + private int coolanttaking = 0; + private int mCasing = 0; + + public MTEHighTempGasCooledReactor(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + private MTEHighTempGasCooledReactor(String aName) { + super(aName); + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Breeder Reactor") + .addInfo("Controller block for the High Temperature Gas-cooled Reactor (HTGR)") + .addInfo(AuthorKuba) + .addInfo("You can clear internal buffer by changing the mode with a screwdriver") + .addInfo("Needs a constant supply of coolant while running") + .addInfo("Needs at least 72k Fuel pebbles to start operation (can hold up to 720k pebbles)") + .addInfo("Consumes up to 2.5% of total Fuel Pellets per Operation depending on efficiency") + .addInfo("Efficiency is calculated exponentially depending on the amount of pebbles in the internal buffer") + .addInfo("and affects total recipe time (at 100% eff, -50% total recipe time") + .addInfo( + "Reactor will take 4 000L/s of coolant multiplied by efficiency and by fuel coolant value (check tooltips)") + .addInfo("Uses " + GTUtility.formatNumbers(powerUsage) + " EU/t") + .addInfo("One Operation takes 1 hour") + .addSeparator() + .beginStructureBlock(11, 12, 11, true) + .addController("Front bottom center") + .addCasingInfoMin("Europium Reinforced Radiation Proof Casings", 500, false) + .addStructureInfo("Corners and the 2 touching blocks are air (cylindric)") + .addInputBus("Any top layer casing", 2) + .addInputHatch("Any top layer casing", 2) + .addOutputBus("Any bottom layer casing", 1) + .addOutputHatch("Any bottom layer casing", 1) + .addEnergyHatch("Any bottom layer casing", 1) + .addMaintenanceHatch("Any bottom layer casing", 1) + .toolTipFinisher(MULTIBLOCK_ADDED_VIA_BARTWORKS.apply(EnumChatFormatting.GOLD + "kuba6000")); + return tt; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + this.buildPiece("main", stackSize, hintsOnly, 5, 11, 0); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { + this.mCasing = 0; + return this.checkPiece("main", 5, 11, 0) && this.mCasing >= 500 + && this.mMaintenanceHatches.size() == 1 + && this.mInputHatches.size() > 0 + && this.mOutputHatches.size() > 0 + && this.mInputBusses.size() > 0 + && this.mOutputBusses.size() > 0 + && this.mEnergyHatches.size() > 0; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.HeliumSupply = aNBT.getInteger("HeliumSupply"); + this.fueltype = aNBT.getInteger("fueltype"); + this.fuelsupply = aNBT.getInteger("fuelsupply"); + this.empty = aNBT.getBoolean("EmptyMode"); + this.coolanttaking = aNBT.getInteger("coolanttaking"); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("HeliumSupply", this.HeliumSupply); + aNBT.setInteger("fueltype", this.fueltype); + aNBT.setInteger("fuelsupply", this.fuelsupply); + aNBT.setBoolean("EmptyMode", this.empty); + aNBT.setInteger("coolanttaking", this.coolanttaking); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && !this.empty) { + boolean updateneeded = false; + if (this.HeliumSupply < MTEHighTempGasCooledReactor.HELIUM_NEEDED) { + for (FluidStack fluidStack : this.getStoredFluids()) { + if (fluidStack.isFluidEqual(Materials.Helium.getGas(1))) { + int toget = Math + .min(MTEHighTempGasCooledReactor.HELIUM_NEEDED - this.HeliumSupply, fluidStack.amount); + fluidStack.amount -= toget; + this.HeliumSupply += toget; + updateneeded = true; + } + } + } + if (this.fuelsupply < maxcapacity) { + this.startRecipeProcessing(); + for (ItemStack itemStack : this.getStoredInputs()) { + int type = -1; + if (itemStack == null || itemStack.getItem() != HTGRMaterials.aHTGR_Materials) continue; + int damage = HTGRMaterials.aHTGR_Materials.getDamage(itemStack); + if ((damage + 1) % HTGRMaterials.MATERIALS_PER_FUEL != HTGRMaterials.USABLE_FUEL_INDEX + 1) + continue; // is fuel + type = damage / HTGRMaterials.MATERIALS_PER_FUEL; + if (this.fueltype == -1) this.fueltype = type; + if (this.fueltype != type) continue; + int toget = Math.min(maxcapacity - this.fuelsupply, itemStack.stackSize); + this.fuelsupply += toget; + itemStack.stackSize -= toget; + updateneeded = true; + } + this.endRecipeProcessing(); + } + if (updateneeded) this.updateSlots(); + } + } + + @Override + public RecipeMap getRecipeMap() { + // Only for visual + return htgrFakeRecipes; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + public boolean checkRecipe(ItemStack controllerStack) { + + if (this.empty) { + if (this.HeliumSupply > 0 || this.fuelsupply > 0) { + this.mEfficiency = 10000; + this.mMaxProgresstime = 100; + return true; + } + return false; + } + if (this.HeliumSupply < MTEHighTempGasCooledReactor.HELIUM_NEEDED || this.fuelsupply < mincapacity) + return false; + + double eff = Math.min(Math.pow((double) this.fuelsupply / (double) mincapacity, 2D), 100D) / 100D + - (this.getIdealStatus() - this.getRepairStatus()) / 10D; + + if (eff <= 0) return false; + + int toReduce = MathUtils.floorInt(this.fuelsupply * 0.025D * eff); + + final int originalToReduce = toReduce; + int burnedballs = toReduce / 64; + if (burnedballs > 0) toReduce -= burnedballs * 64; + + int meta = this.fueltype * HTGRMaterials.MATERIALS_PER_FUEL + HTGRMaterials.BURNED_OUT_FUEL_INDEX; + + ItemStack[] toOutput = { new ItemStack(HTGRMaterials.aHTGR_Materials, burnedballs, meta), + new ItemStack(HTGRMaterials.aHTGR_Materials, toReduce, meta + 1) }; + if (!this.canOutputAll(toOutput)) return false; + + this.fuelsupply -= originalToReduce; + this.mOutputItems = toOutput; + + // this.updateSlots(); // not needed ? + + this.coolanttaking = (int) (4000D * (this.fueltype * 0.5D + 1) * eff); + + this.mEfficiency = (int) (eff * 10000D); + this.mEfficiencyIncrease = 0; + this.mEUt = -powerUsage; + this.mMaxProgresstime = (int) (72000 * (1d - eff / 2d)); + return true; + } + + private int runningtick = 0; + + @Override + public boolean onRunningTick(ItemStack aStack) { + this.runningtick++; + + if (this.empty) { + if (this.emptyticksnodiff > 20 && this.emptyticksnodiff % 20 != 0) { + this.emptyticksnodiff++; + return true; + } + if (this.HeliumSupply > 0) { + this.addOutput(Materials.Helium.getGas(this.HeliumSupply)); + this.HeliumSupply = 0; + } + if (this.fuelsupply > 0) { + ItemStack iStack = new ItemStack( + HTGRMaterials.aHTGR_Materials, + this.fuelsupply, + HTGRMaterials.MATERIALS_PER_FUEL * this.fueltype + HTGRMaterials.USABLE_FUEL_INDEX); + boolean storedAll = false; + for (MTEHatchOutputBus tHatch : filterValidMTEs(mOutputBusses)) { + if (tHatch.storeAll(iStack)) { + storedAll = true; + break; + } + } + if (!storedAll) { + if (this.fuelsupply == iStack.stackSize) this.emptyticksnodiff++; + else { + this.fuelsupply = iStack.stackSize; + this.emptyticksnodiff = 0; + } + } else { + this.fuelsupply = 0; + this.fueltype = -1; + this.coolanttaking = 0; + } + } + return true; + } + // USE DA POWAH + if (!this.drainEnergyInput(-this.mEUt)) { + this.criticalStopMachine(); + return false; + } + + if (this.runningtick % 20 == 0) { + int takecoolant = this.coolanttaking; + int drainedamount = 0; + + for (MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) { + FluidStack tLiquid = tHatch.getFluid(); + if (tLiquid != null && tLiquid.isFluidEqual(FluidRegistry.getFluidStack("ic2coolant", 1))) { + FluidStack drained = tHatch.drain(takecoolant, true); + takecoolant -= drained.amount; + drainedamount += drained.amount; + if (takecoolant <= 0) break; + } + } + + if (drainedamount > 0) this.addOutput(FluidRegistry.getFluidStack("ic2hotcoolant", drainedamount)); + + this.updateSlots(); + + if (takecoolant > 0) this.stopMachine(); + } + + return true; + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack itemStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEHighTempGasCooledReactor(this.mName); + } + + @Override + public String[] getInfoData() { + return new String[] { "Mode:", this.empty ? "Emptying" : "Normal", "Progress:", + GTUtility.formatNumbers(this.mProgresstime / 20) + "s / " + + GTUtility.formatNumbers(this.mMaxProgresstime / 20) + + "s", + "Fuel type:", + this.fueltype == -1 ? "NONE" : "TRISO (" + HTGRMaterials.sHTGR_Fuel[this.fueltype].sEnglish + ")", + "Fuel amount:", GTUtility.formatNumbers(this.fuelsupply) + " pcs.", "Helium-Level:", + GTUtility.formatNumbers(this.HeliumSupply) + "L / " + + GTUtility.formatNumbers(MTEHighTempGasCooledReactor.HELIUM_NEEDED) + + "L", + "Coolant:", GTUtility.formatNumbers(this.coolanttaking) + "L/s", "Problems:", + String.valueOf(this.getIdealStatus() - this.getRepairStatus()) }; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, + ForgeDirection forgeDirection, int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == forgeDirection) { + if (aActive) return new ITexture[] { + Textures.BlockIcons.getCasingTextureForId(MTEHighTempGasCooledReactor.BASECASINGINDEX), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { + Textures.BlockIcons.getCasingTextureForId(MTEHighTempGasCooledReactor.BASECASINGINDEX), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { + Textures.BlockIcons.getCasingTextureForId(MTEHighTempGasCooledReactor.BASECASINGINDEX) }; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (this.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(aPlayer, "HTGR mode cannot be changed while the machine is running."); + return; + } + this.empty = !this.empty; + GTUtility.sendChatToPlayer( + aPlayer, + "HTGR is now running in " + (this.empty ? "emptying mode." : "normal Operation")); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + public static class HTGRMaterials { + + private static class CustomHTGRSimpleSubItemClass extends SimpleSubItemClass { + + HashMap tooltip = null; + + public CustomHTGRSimpleSubItemClass(HashMap tooltip, String... tex) { + super(tex); + this.tooltip = tooltip; + } + + @Override + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List aList, boolean p_77624_4_) { + if (this.tooltip.containsKey(this.getDamage(p_77624_1_))) + aList.add(this.tooltip.get(this.getDamage(p_77624_1_))); + aList.add("Material for High Temperature Gas-cooled Reactor"); + super.addInformation(p_77624_1_, p_77624_2_, aList, p_77624_4_); + } + } + + private static class Base_ { + + public String sName; + public String sEnglish; + + public Base_(String a, String b) { + this.sName = a; + this.sEnglish = b; + } + } + + public static class Fuel_ { + + public String sName; + public String sEnglish; + public ItemStack mainItem; + public ItemStack secondaryItem; + public ItemStack[] recycledItems = { GTValues.NI, GTValues.NI, GTValues.NI, GTValues.NI, GTValues.NI, + GTValues.NI }; + public FluidStack recycledFluid; + public int[] recycleChances; + public String tooltip; + + public Fuel_(String sName, String sEnglish, ItemStack mainItem, ItemStack secondaryItem, + FluidStack recycledFluid, ItemStack[] recycledItems, int[] recycleChances, String tooltip) { + this.sName = sName; + this.sEnglish = sEnglish; + this.mainItem = mainItem; + this.secondaryItem = secondaryItem; + this.recycledFluid = recycledFluid; + System.arraycopy(recycledItems, 0, this.recycledItems, 0, recycledItems.length); + this.recycleChances = recycleChances; + this.tooltip = tooltip; + } + } + + private static class LangEntry_ { + + public String sName; + public String sEnglish; + + public LangEntry_(String a, String b) { + this.sName = a; + this.sEnglish = b; + } + } + + public static final Base_[] sHTGR_Bases = { new Base_("HTGRFuelMixture", "HTGR fuel mixture"), + new Base_("BISOPebbleCompound", "BISO pebble compound"), + new Base_("TRISOPebbleCompound", "TRISO pebble compound"), new Base_("TRISOBall", "TRISO ball"), + new Base_("TRISOPebble", "TRISO pebble"), new Base_("BurnedOutTRISOBall", "Burned out TRISO Ball"), + new Base_("BurnedOutTRISOPebble", "Burned out TRISO Pebble"), }; + public static final int MATERIALS_PER_FUEL = sHTGR_Bases.length; + static final int USABLE_FUEL_INDEX = 4; + static final int BURNED_OUT_FUEL_INDEX = 5; + public static final Fuel_[] sHTGR_Fuel = { new Fuel_( + "Thorium", + "Thorium", + WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 64), + Materials.Uranium235.getDust(4), + GTValues.NF, + new ItemStack[] { Materials.Silicon.getDust(1), Materials.Graphite.getDust(1), Materials.Carbon.getDust(1), + Materials.Lutetium.getDust(1), WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 1) }, + new int[] { 9900 / 4, 9900 / 4, 9900 / 4, 9900 / 4, 162 / 4 }, + "Multiplies coolant by 1"), + new Fuel_( + "Uranium", + "Uranium", + Materials.Uranium.getDust(64), + Materials.Uranium235.getDust(8), + FluidRegistry.getFluidStack("krypton", 4), + new ItemStack[] { Materials.Silicon.getDust(1), Materials.Graphite.getDust(1), + Materials.Carbon.getDust(1), Materials.Lead.getDust(1), Materials.Uranium.getDust(1) }, + new int[] { 9900 / 4, 9900 / 4, 9900 / 4, 5000 / 4, 5000 / 4 }, + "Multiplies coolant by 1.5"), + new Fuel_( + "Plutonium", + "Plutonium", + Materials.Plutonium.getDust(64), + Materials.Plutonium241.getDust(4), + FluidRegistry.getFluidStack("xenon", 4), + new ItemStack[] { Materials.Silicon.getDust(1), Materials.Graphite.getDust(1), + Materials.Carbon.getDust(1), Materials.Lead.getDust(1), Materials.Plutonium.getDust(1) }, + new int[] { 9900 / 4, 9900 / 4, 9900 / 4, 5000 / 4, 5000 / 4 }, + "Multiplies coolant by 2"), }; + public static final CustomHTGRSimpleSubItemClass aHTGR_Materials; + static final ArrayList aHTGR_Localizations = new ArrayList<>(); + + static { + String[] sHTGR_Materials = new String[sHTGR_Bases.length * sHTGR_Fuel.length]; + HashMap tooltip = new HashMap<>(); + int i = 0; + for (Fuel_ fuel : sHTGR_Fuel) for (Base_ base : sHTGR_Bases) { + sHTGR_Materials[i] = "HTGR" + base.sName + fuel.sName; + aHTGR_Localizations.add( + new LangEntry_("item." + sHTGR_Materials[i] + ".name", base.sEnglish + " (" + fuel.sEnglish + ")")); + if ((i + 1) % MATERIALS_PER_FUEL == USABLE_FUEL_INDEX + 1 && fuel.tooltip != null + && !fuel.tooltip.isEmpty()) tooltip.put(i, fuel.tooltip); + i++; + } + aHTGR_Materials = new CustomHTGRSimpleSubItemClass(tooltip, sHTGR_Materials); + } + + public static void registeraTHR_Materials() { + for (LangEntry_ iName : aHTGR_Localizations) + GTLanguageManager.addStringLocalization(iName.sName, iName.sEnglish); + GameRegistry.registerItem(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, "bw.HTGRMaterials"); + } + + public static void register_fake_THR_Recipes() { + + int i = 0; + for (@SuppressWarnings("unused") + Fuel_ fuel : sHTGR_Fuel) { + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 64, i + 4)) + .itemOutputs(new ItemStack(MTEHighTempGasCooledReactor.HTGRMaterials.aHTGR_Materials, 1, i + 5)) + .duration(1 * HOURS) + .eut(powerUsage) + .ignoreCollision() + .noOptimize() + .fake() + .addTo(htgrFakeRecipes); + + i += MATERIALS_PER_FUEL; + } + } + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/MTELESU.java b/src/main/java/bartworks/common/tileentities/multis/MTELESU.java new file mode 100644 index 0000000000..a039aa593c --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/MTELESU.java @@ -0,0 +1,590 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.Collections; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import bartworks.API.modularUI.BWUITextures; +import bartworks.MainMod; +import bartworks.common.configs.ConfigHandler; +import bartworks.common.loaders.ItemRegistry; +import bartworks.util.BWTooltipReference; +import bartworks.util.ConnectedBlocksChecker; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTELESU extends MTEMultiBlockBase { + + private static final byte TEXID_SIDE = 0; + private static final byte TEXID_CHARGING = 1; + private static final byte TEXID_IDLE = 2; + private static final byte TEXID_EMPTY = 3; + private static final IIcon[] iIcons = new IIcon[4]; + private static final IIconContainer[] iIconContainers = new IIconContainer[4]; + private static final ITexture[][] iTextures = new ITexture[4][1]; + public ConnectedBlocksChecker connectedcells; + public final ItemStack[] circuits = new ItemStack[5]; + private final ItemStackHandler circuitsInventoryHandler = new ItemStackHandler(this.circuits) { + + @Override + public int getSlotLimit(int slot) { + return 1; + } + }; + private long mStorage; + + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + public MTELESU(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + this.mStorage = ConfigHandler.energyPerCell; + } + + public MTELESU(String aName) { + super(aName); + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public long maxEUStore() { + return this.mStorage >= Long.MAX_VALUE - 1 || this.mStorage < 0 ? Long.MAX_VALUE - 1 : this.mStorage; + } + + @Override + public long maxAmperesIn() { + int ret = 0; + for (int i = 0; i < 5; ++i) if (this.circuits[i] != null && this.circuits[i].getItem() + .equals( + GTUtility.getIntegratedCircuit(0) + .getItem())) + ret += this.circuits[i].getItemDamage(); + return ret > 0 ? ret : 1; + } + + @Override + public long maxAmperesOut() { + return this.maxAmperesIn(); + } + + @Override + public long maxEUInput() { + + for (int i = 1; i < GTValues.V.length; i++) { + if (this.maxEUOutput() <= GTValues.V[i] && this.maxEUOutput() > GTValues.V[i - 1]) + return Math.min(GTValues.V[i], 32768L); + } + + return 8; + } + + @Override + public long maxEUOutput() { + return Math.min(Math.max(this.mStorage / ConfigHandler.energyPerCell, 1L), 32768L); + } + + @Override + public int rechargerSlotStartIndex() { + return 0; + } + + @Override + public int rechargerSlotCount() { + return 1; + } + + @Override + public int dechargerSlotStartIndex() { + return 1; + } + + @Override + public int dechargerSlotCount() { + return 1; + } + + @Override + public boolean isTeleporterCompatible() { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTELESU(this.mName); + } + + @Override + public String[] getDescription() { + ArrayList e = new ArrayList<>(); + String[] dsc = StatCollector.translateToLocal("tooltip.tile.lesu.0.name") + .split(";"); + Collections.addAll(e, dsc); + e.add( + StatCollector.translateToLocal("tooltip.tile.lesu.1.name") + " " + + GTUtility.formatNumbers(ConfigHandler.energyPerCell) + + "EU"); + dsc = StatCollector.translateToLocal("tooltip.tile.lesu.2.name") + .split(";"); + Collections.addAll(e, dsc); + e.add(EnumChatFormatting.RED + StatCollector.translateToLocal("tooltip.tile.lesu.3.name")); + e.add(BWTooltipReference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get()); + return e.toArray(new String[0]); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + + for (int i = 0; i < MTELESU.iTextures.length; i++) { + MTELESU.iIcons[i] = aBlockIconRegister.registerIcon(MainMod.MOD_ID + ":LESU_CASING_" + i); + int finalI = i; + MTELESU.iIconContainers[i] = new IIconContainer() { + + @Override + public IIcon getIcon() { + return MTELESU.iIcons[finalI]; + } + + @Override + public IIcon getOverlayIcon() { + return MTELESU.iIcons[finalI]; + } + + @Override + public ResourceLocation getTextureFile() { + return new ResourceLocation(MainMod.MOD_ID + ":LESU_CASING_" + finalI); + } + }; + } + } + + public boolean isClientSide() { + if (this.getWorld() != null) return this.getWorld().isRemote ? FMLCommonHandler.instance() + .getSide() == Side.CLIENT + : FMLCommonHandler.instance() + .getEffectiveSide() == Side.CLIENT; + return FMLCommonHandler.instance() + .getEffectiveSide() == Side.CLIENT; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + + ITexture[] ret = {}; + + if (this.isClientSide()) { + + for (int i = 0; i < MTELESU.iTextures.length; i++) { + MTELESU.iTextures[i][0] = TextureFactory + .of(MTELESU.iIconContainers[i], Dyes.getModulation(0, Dyes.MACHINE_METAL.mRGBa)); + } + + if (side == facing && this.getBaseMetaTileEntity() + .getUniversalEnergyStored() <= 0) ret = MTELESU.iTextures[MTELESU.TEXID_EMPTY]; + else if (side == facing && !aActive) ret = MTELESU.iTextures[MTELESU.TEXID_IDLE]; + else if (side == facing && aActive) ret = MTELESU.iTextures[MTELESU.TEXID_CHARGING]; + else ret = MTELESU.iTextures[MTELESU.TEXID_SIDE]; + } + + return ret; + } + + @Override + public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_) { + return true; + } + + @Override + public boolean canExtractItem(int p_102008_1_, ItemStack p_102008_2_, int p_102008_3_) { + return true; + } + + @Override + public int getSizeInventory() { + return 6; + } + + @Override + public ItemStack getStackInSlot(int slotIn) { + if (slotIn > 1) return this.circuits[slotIn - 2]; + return this.mInventory[slotIn]; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) { + if (index < 2) this.mInventory[index] = stack; + else this.circuits[index - 2] = stack; + } + + @Override + public String getInventoryName() { + return "L.E.S.U."; + } + + @Override + public boolean hasCustomInventoryName() { + return true; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return true; + } + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) { + + return switch (index) { + case 0, 1 -> true; + default -> stack != null && stack.getItem() + .equals( + GTUtility.getIntegratedCircuit(0) + .getItem()); + }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + @Override + public boolean checkRecipe(ItemStack itemStack) { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side != this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + this.checkMachine(aBaseMetaTileEntity, null); + super.onFirstTick(aBaseMetaTileEntity); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + this.mMaxProgresstime = 1; + if (aTick % 20 == 0) this.checkMachine(aBaseMetaTileEntity, null); + } + } + + @Override + public long getMinimumStoredEU() { + return 0; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + this.mMaxProgresstime = 1; + return true; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setIntArray("customCircuitInv", GTUtility.stacksToIntArray(this.circuits)); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + int[] stacks = aNBT.getIntArray("customCircuitInv"); + for (int i = 0; i < stacks.length; i++) { + this.circuits[i] = GTUtility.intToStack(stacks[i]); + } + super.loadNBTData(aNBT); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { + long startingTime = System.nanoTime(); + this.connectedcells = new ConnectedBlocksChecker(); + this.connectedcells.get_connected( + aBaseMetaTileEntity.getWorld(), + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + ItemRegistry.BW_BLOCKS[1]); + + if (this.connectedcells.get_meta_of_sideblocks( + aBaseMetaTileEntity.getWorld(), + this.getBaseMetaTileEntity() + .getMetaTileID(), + new int[] { aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord() }, + true)) { + this.getBaseMetaTileEntity() + .disableWorking(); + this.getBaseMetaTileEntity() + .setActive(false); + this.mStorage = 0; + this.mMaxProgresstime = 0; + this.mProgresstime = 0; + return false; + } + + this.mEfficiency = this.getMaxEfficiency(null); + this.mStorage = ConfigHandler.energyPerCell * this.connectedcells.hashset.size() >= Long.MAX_VALUE - 1 + || ConfigHandler.energyPerCell * this.connectedcells.hashset.size() < 0 ? Long.MAX_VALUE - 1 + : ConfigHandler.energyPerCell * this.connectedcells.hashset.size(); + this.mMaxProgresstime = 1; + this.mProgresstime = 0; + + this.getBaseMetaTileEntity() + .enableWorking(); + this.getBaseMetaTileEntity() + .setActive(true); + + long finishedTime = System.nanoTime(); + // System.out.println("LESU LookUp: "+((finishedTime - startingTime) / 1000000)+"ms"); + if (finishedTime - startingTime > 5000000) MainMod.LOGGER.warn( + "LESU LookUp took longer than 5ms!(" + (finishedTime - startingTime) + + "ns / " + + (finishedTime - startingTime) / 1000000 + + "ms) Owner:" + + this.getBaseMetaTileEntity() + .getOwnerName() + + " Check at x:" + + this.getBaseMetaTileEntity() + .getXCoord() + + " y:" + + this.getBaseMetaTileEntity() + .getYCoord() + + " z:" + + this.getBaseMetaTileEntity() + .getZCoord() + + " DIM-ID: " + + this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId); + return true; + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack itemStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return false; + } + + public World getWorld() { + return this.getBaseMetaTileEntity() + .getWorld(); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY) + .setSize(17, 17) + .setPos(105, 51)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(7, 4) + .setSize(118, 67)) + .widget(new SlotWidget(new BaseSlot(this.inventoryHandler, 1) { + + @Override + public int getSlotStackLimit() { + return 1; + } + }).setBackground( + this.getGUITextureSet() + .getItemSlot(), + GTUITextures.OVERLAY_SLOT_IN) + .setPos(127, 13)) + .widget(new SlotWidget(new BaseSlot(this.inventoryHandler, 0) { + + @Override + public int getSlotStackLimit() { + return 1; + } + }).setBackground( + this.getGUITextureSet() + .getItemSlot(), + GTUITextures.OVERLAY_SLOT_CHARGER) + .setPos(127, 49)); + for (int i = 0; i < 4; i++) { + builder.widget( + new SlotWidget(this.circuitsInventoryHandler, i).setBackground( + this.getGUITextureSet() + .getItemSlot(), + GTUITextures.OVERLAY_SLOT_INT_CIRCUIT) + .setPos(151, 4 + i * 18)); + } + + final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); + this.drawTexts(screenElements); + builder.widget(screenElements); + + builder.widget( + new DrawableWidget().setDrawable(BWUITextures.PICTURE_STORED_EU_FRAME) + .setPos(7, 72) + .setSize(118, 7)) + .widget( + new ProgressBar().setProgress( + () -> (float) this.getBaseMetaTileEntity() + .getStoredEU() / this.getBaseMetaTileEntity() + .getEUCapacity()) + .setDirection(ProgressBar.Direction.RIGHT) + .setTexture(BWUITextures.PROGRESSBAR_STORED_EU_116, 116) + .setPos(8, 73) + .setSize(116, 5)); + } + + private long clientEU; + private long clientMaxEU; + private long clientMaxIn; + private long clientMaxOut; + private long clientAmps; + + private void drawTexts(DynamicPositionedColumn screenElements) { + screenElements.setSpace(0) + .setPos(11, 8); + + screenElements.widget( + new TextWidget().setStringSupplier(() -> "EU: " + numberFormat.format(this.clientEU)) + .setDefaultColor(this.COLOR_TEXT_WHITE.get())) + .widget( + new FakeSyncWidget.LongSyncer( + () -> this.getBaseMetaTileEntity() + .getStoredEU(), + val -> clientEU = val)) + .widget( + new TextWidget().setStringSupplier(() -> "MAX: " + numberFormat.format(clientMaxEU)) + .setDefaultColor(this.COLOR_TEXT_WHITE.get())) + .widget( + new FakeSyncWidget.LongSyncer( + () -> this.getBaseMetaTileEntity() + .isActive() + ? this.getBaseMetaTileEntity() + .getOutputVoltage() * ConfigHandler.energyPerCell + : 0, + val -> clientMaxEU = val)) + .widget( + new TextWidget().setStringSupplier(() -> "MAX EU/t IN: " + numberFormat.format(clientMaxIn)) + .setDefaultColor(this.COLOR_TEXT_WHITE.get())) + .widget( + new FakeSyncWidget.LongSyncer( + () -> this.getBaseMetaTileEntity() + .getInputVoltage(), + val -> clientMaxIn = val)) + .widget( + new TextWidget().setStringSupplier(() -> "EU/t OUT: " + numberFormat.format(clientMaxOut)) + .setDefaultColor(this.COLOR_TEXT_WHITE.get())) + .widget( + new FakeSyncWidget.LongSyncer( + () -> this.getBaseMetaTileEntity() + .getOutputVoltage(), + val -> clientMaxOut = val)) + .widget( + new TextWidget().setStringSupplier(() -> "AMP/t IN/OUT: " + numberFormat.format(clientAmps)) + .setDefaultColor(this.COLOR_TEXT_WHITE.get())) + .widget( + new FakeSyncWidget.LongSyncer( + () -> this.getBaseMetaTileEntity() + .getInputAmperage(), + val -> clientAmps = val)) + .widget( + new TextWidget(Text.localised("tooltip.LESU.0.name")).setDefaultColor(Color.YELLOW.getRGB()) + .setEnabled(widget -> this.maxEUStore() >= Long.MAX_VALUE - 1)) + .widget( + new TextWidget(Text.localised("tooltip.LESU.1.name")).setDefaultColor(Color.RED.getRGB()) + .setEnabled( + widget -> !this.getBaseMetaTileEntity() + .isActive())); + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/MTEManualTrafo.java b/src/main/java/bartworks/common/tileentities/multis/MTEManualTrafo.java new file mode 100644 index 0000000000..2533fd5213 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/MTEManualTrafo.java @@ -0,0 +1,363 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis; + +import static bartworks.common.loaders.ItemRegistry.BW_BLOCKS; +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTWORKS; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofHatchAdderOptional; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +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.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEManualTrafo extends MTEEnhancedMultiBlockBase { + + private byte mode; + private int mTiers; + private boolean upstep = true; + + public MTEManualTrafo(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEManualTrafo(String aName) { + super(aName); + } + + private static final int CASING_INDEX = 2; + private static final String STRUCTURE_PIECE_BASE = "base"; + private static final String STRUCTURE_PIECE_LAYER = "layer"; + private static final String STRUCTURE_PIECE_TOP = "top"; + private static final String STRUCTURE_PIECE_TAP_LAYER = "taplayer"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_BASE, transpose(new String[][] { { "b~b", "bbb", "bbb" } })) + .addShape(STRUCTURE_PIECE_LAYER, transpose(new String[][] { { "ttt", "tft", "ttt" } })) + .addShape(STRUCTURE_PIECE_TOP, transpose(new String[][] { { "ooo", "ooo", "ooo" } })) + .addShape( + STRUCTURE_PIECE_TAP_LAYER, + transpose(new String[][] { { " TTT ", "TtttT", "TtftT", "TtttT", " TTT " } })) + .addElement( + 'b', + ofChain( + ofHatchAdder(MTEManualTrafo::addEnergyInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEManualTrafo::addMaintenanceToMachineList, CASING_INDEX, 1), + ofBlock(GregTechAPI.sBlockCasings1, 2))) + .addElement( + 'o', + ofHatchAdderOptional( + MTEManualTrafo::addDynamoToMachineList, + CASING_INDEX, + 2, + GregTechAPI.sBlockCasings1, + 2)) + .addElement('t', ofBlock(BW_BLOCKS[2], 1)) + .addElement('f', ofBlock(BW_BLOCKS[2], 0)) + .addElement('T', new IStructureElementNoPlacement() { + + @Override + public boolean check(MTEManualTrafo te, World world, int x, int y, int z) { + if (world.isAirBlock(x, y, z)) return true; + TileEntity tileEntity = world.getTileEntity(x, y, z); + if (tileEntity == null || !(tileEntity instanceof IGregTechTileEntity)) return true; + IMetaTileEntity mte = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); + if (mte instanceof MTEHatchDynamo || mte instanceof MTEHatchEnergy) { + int intier = te.mEnergyHatches.get(0).mTier; + if (((MTETieredMachineBlock) mte).mTier == intier + (te.upstep ? te.mTiers : -te.mTiers)) { + te.addToMachineList((IGregTechTileEntity) tileEntity, CASING_INDEX); + return true; + } + return false; + } + return true; + } + + @Override + public boolean spawnHint(MTEManualTrafo te, World world, int x, int y, int z, ItemStack itemStack) { + StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 2 /* aDots: 3 */); + return true; + } + }) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Transformer") + .addInfo("Controller block for the Manual Trafo") + .addInfo("Operates in 4 diffrent modes:") + .addInfo("Mode 1: Circuit 0 in controller: Direct-Upstep") + .addInfo("Mode 2: Circuit 1 in controller: Direct-Downstep") + .addInfo("Mode 3: Circuit 2 in controller: Tapped-Upstep (currently disabled)") + .addInfo("Mode 4: Circuit 2 in controller: Tapped-Downstep (currently disabled)") + .addSeparator() + .beginVariableStructureBlock(3, 3, 3, 10, 3, 3, false) + .addController("Front bottom center") + .addCasingInfoMin("MV Machine Casing", 0, false) + .addOtherStructurePart("Transformer-Winding Blocks", "1 Layer for each tier transformed") + .addOtherStructurePart("Nickel-Zinc-Ferrite Blocks", "Middle of Transformer-Winding Blocks") + .addMaintenanceHatch("Any bottom layer casing", 1) + .addEnergyHatch("Any bottom layer casing", 1) + .addDynamoHatch("Any top layer casing", 2) + .addStructureInfo("---------TAPPED MODE---------") + .addEnergyHatch("Touching Transformer-Winding Blocks", 3) + .addDynamoHatch("Touching Transformer-Winding Blocks", 3) + .addStructureInfo("Hatches touching Transformer-Winding Blocks must be tiered from bottom to top") + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); + return tt; + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (!this.getBaseMetaTileEntity() + .isAllowedToWork()) this.stopMachine(); + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (!this.getBaseMetaTileEntity() + .isAllowedToWork()) { + this.stopMachine(); + return false; + } + + this.mProgresstime = 0; + this.mMaxProgresstime = 1; + + if (this.getBaseMetaTileEntity() + .getTimer() % 40 == 0) if (this.mEfficiency < this.getMaxEfficiency(null)) this.mEfficiency += 100; + else this.mEfficiency = this.getMaxEfficiency(null); + + if (this.mode > 1) { + return false; // this.onRunningTickTabbedMode(); Tapped mode is disable + } + + return this.drainEnergyInput(this.getInputTier() * 2 * this.mEnergyHatches.size()) && this.addEnergyOutput( + this.getInputTier() * 2 * this.mEnergyHatches.size() * this.mEfficiency / this.getMaxEfficiency(null)); + } + + public boolean onRunningTickTabbedMode() { + boolean ret = false; + for (MTEHatchDynamo E : this.mDynamoHatches) { + for (MTEHatchEnergy I : this.mEnergyHatches) { + + long vtt = I.getEUVar() >= V[E.mTier] / 2 && E.getEUVar() < E.maxEUStore() ? I.getEUVar() : 0; + + if (vtt == 0) continue; + + long vtp = E.getEUVar() + vtt; + long avt = Math.min(vtp, E.maxEUStore()); + E.setEUVar(avt); + I.setEUVar(I.getEUVar() - vtt); + ret = true; + } + } + return ret; + } + + @Override + public long getInputTier() { + if (this.mEnergyHatches.size() > 0) return GTUtility.getTier( + this.mEnergyHatches.get(0) + .getBaseMetaTileEntity() + .getInputVoltage()); + return 0L; + } + + @Override + public long getOutputTier() { + if (this.mDynamoHatches.size() > 0) return GTUtility.getTier( + this.mDynamoHatches.get(0) + .getBaseMetaTileEntity() + .getOutputVoltage()); + return 0L; + } + + @Override + public boolean checkRecipe(ItemStack itemStack) { + + if (!this.getBaseMetaTileEntity() + .isAllowedToWork()) { + this.stopMachine(); + return false; + } + if (itemStack == null || !itemStack.getUnlocalizedName() + .startsWith("gt.integrated_circuit")) this.mode = 0; + else this.mode = (byte) Math.min(3, itemStack.getItemDamage()); + this.upstep = this.mode % 2 == 0; + this.mProgresstime = 0; + this.mMaxProgresstime = 1; + this.mEfficiency = Math.max(this.mEfficiency, 100); + return this.upstep ? this.getOutputTier() - this.getInputTier() == this.mTiers + : this.getInputTier() - this.getOutputTier() == this.mTiers; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { + + if (itemStack == null || !itemStack.getUnlocalizedName() + .startsWith("gt.integrated_circuit")) this.mode = 0; + else this.mode = (byte) Math.min(3, itemStack.getItemDamage()); + + this.upstep = this.mode % 2 == 0; + boolean tapmode = this.mode > 1; + + if (!this.checkPiece(STRUCTURE_PIECE_BASE, 1, 0, 0) || this.mEnergyHatches.size() == 0) return false; + + byte intier = this.mEnergyHatches.get(0).mTier; + for (MTEHatchEnergy in : this.mEnergyHatches) if (in.mTier != intier) return false; + + int mHeight; + for (mHeight = 1; mHeight <= 8; mHeight++) { + if (tapmode) { + this.mTiers = mHeight; + if (!this.checkPiece(STRUCTURE_PIECE_TAP_LAYER, 2, mHeight, 1)) break; + } else if (!this.checkPiece(STRUCTURE_PIECE_LAYER, 1, mHeight, 0)) break; + } + if (!this.checkPiece(STRUCTURE_PIECE_TOP, 1, mHeight, 0)) return false; + this.mTiers = mHeight - 1; + + if (this.mDynamoHatches.size() == 0 || this.mMaintenanceHatches.size() != 1 || this.mTiers == 0) return false; + + byte outtier = this.mDynamoHatches.get(0).mTier; + for (MTEHatchDynamo out : this.mDynamoHatches) { + if (out.mTier != outtier) return false; + } + + return true; + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack itemStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEManualTrafo(this.mName); + } + + @Override + public void saveNBTData(NBTTagCompound ntag) { + super.saveNBTData(ntag); + ntag.setInteger("mTiers", this.mTiers); + ntag.setByte("mMode", this.mode); + ntag.setBoolean("upstep", this.upstep); + } + + @Override + public void loadNBTData(NBTTagCompound ntag) { + super.loadNBTData(ntag); + this.mTiers = ntag.getInteger("mTiers"); + this.mode = ntag.getByte("mMode"); + this.upstep = ntag.getBoolean("upstep"); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + if (this.mInventory[1] == null || !this.mInventory[1].getUnlocalizedName() + .startsWith("gt.integrated_circuit")) this.mode = 0; + else this.mode = (byte) Math.min(3, this.mInventory[1].getItemDamage()); + int mHeight = Math.min(itemStack.stackSize, 8); + boolean tapmode = this.mode > 1; + this.buildPiece(STRUCTURE_PIECE_BASE, itemStack, b, 1, 0, 0); + for (int i = 0; i < mHeight; i++) { + if (tapmode) this.buildPiece(STRUCTURE_PIECE_TAP_LAYER, itemStack, b, 2, i + 1, 1); + else this.buildPiece(STRUCTURE_PIECE_LAYER, itemStack, b, 1, i + 1, 0); + } + this.buildPiece(STRUCTURE_PIECE_TOP, itemStack, b, 1, mHeight + 1, 0); + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/MTEThoriumHighTempReactor.java b/src/main/java/bartworks/common/tileentities/multis/MTEThoriumHighTempReactor.java new file mode 100644 index 0000000000..064bc351fd --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/MTEThoriumHighTempReactor.java @@ -0,0 +1,416 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis; + +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTWORKS; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.common.items.SimpleSubItemClass; +import bartworks.util.MathUtils; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEThoriumHighTempReactor extends MTEEnhancedMultiBlockBase { + + private static final int BASECASINGINDEX = 44; + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { + { " BBBBBBB ", " BBBBBBBBB ", "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", + "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", " BBBBBBBBB ", " BBBBBBB " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", + "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, + { " bbb~bbb ", " bbbbbbbbb ", "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", + "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", " bbbbbbbbb ", " bbbbbbb " }, })) + .addElement('c', onElementPass(x -> x.mCasing++, ofBlock(GregTechAPI.sBlockCasings3, 12))) + .addElement( + 'b', + ofChain( + ofHatchAdder(MTEThoriumHighTempReactor::addOutputToMachineList, BASECASINGINDEX, 1), + ofHatchAdder(MTEThoriumHighTempReactor::addMaintenanceToMachineList, BASECASINGINDEX, 1), + ofHatchAdder(MTEThoriumHighTempReactor::addEnergyInputToMachineList, BASECASINGINDEX, 1), + onElementPass(x -> x.mCasing++, ofBlock(GregTechAPI.sBlockCasings3, 12)))) + .addElement( + 'B', + ofChain( + ofHatchAdder(MTEThoriumHighTempReactor::addInputToMachineList, BASECASINGINDEX, 2), + onElementPass(x -> x.mCasing++, ofBlock(GregTechAPI.sBlockCasings3, 12)))) + // ofHatchAdderOptional(GT_TileEntity_THTR::addInputToMachineList, BASECASINGINDEX, 2, + // GregTechAPI.sBlockCasings3, 12)) + .build(); + + private static final int HELIUM_NEEDED = 730000; + private static final int powerUsage = (int) TierEU.RECIPE_IV / 2; + private static final int maxcapacity = 675000; + private static final int mincapacity = 100000; + private int HeliumSupply; + private int fuelsupply; + private boolean empty; + private int coolanttaking = 0; + private int mCasing = 0; + + public MTEThoriumHighTempReactor(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + private MTEThoriumHighTempReactor(String aName) { + super(aName); + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("High Temperature Reactor") + .addInfo("Controller block for the Thorium High Temperature Reactor (THTR)") + .addInfo("Needs to be primed with " + GTUtility.formatNumbers(HELIUM_NEEDED) + " of helium") + .addInfo("Needs a constant supply of coolant while running") + .addInfo("Needs at least 100k Fuel pebbles to start operation (can hold up to 675k pebbles)") + .addInfo("Consumes up to 0.5% of total Fuel Pellets per Operation depending on efficiency") + .addInfo("Efficiency decreases exponentially if the internal buffer is not completely filled") + .addInfo("Reactor will take 4 800L/t of coolant multiplied by efficiency") + .addInfo("Uses " + GTUtility.formatNumbers(powerUsage) + " EU/t") + .addInfo("One Operation takes 9 hours") + .addSeparator() + .beginStructureBlock(11, 12, 11, true) + .addController("Front bottom center") + .addCasingInfoMin("Radiation Proof Casings", 500, false) + .addStructureInfo("Corners and the 2 touching blocks are air (cylindric)") + .addInputBus("Any top layer casing", 2) + .addInputHatch("Any top layer casing", 2) + .addOutputBus("Any bottom layer casing", 1) + .addOutputHatch("Any bottom layer casing", 1) + .addEnergyHatch("Any bottom layer casing", 1) + .addMaintenanceHatch("Any bottom layer casing", 1) + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); + return tt; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + this.buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 5, 11, 0); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { + this.mCasing = 0; + return this.checkPiece(STRUCTURE_PIECE_MAIN, 5, 11, 0) && this.mCasing >= 500 + && this.mMaintenanceHatches.size() == 1 + && this.mInputHatches.size() > 0 + && this.mOutputHatches.size() > 0 + && this.mInputBusses.size() > 0 + && this.mOutputBusses.size() > 0 + && this.mEnergyHatches.size() > 0; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.HeliumSupply = aNBT.getInteger("HeliumSupply"); + this.fuelsupply = aNBT.getInteger("fuelsupply"); + this.coolanttaking = aNBT.getInteger("coolanttaking"); + this.empty = aNBT.getBoolean("EmptyMode"); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("HeliumSupply", this.HeliumSupply); + aNBT.setInteger("fuelsupply", this.fuelsupply); + aNBT.setInteger("coolanttaking", this.coolanttaking); + aNBT.setBoolean("EmptyMode", this.empty); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && !this.empty) { + if (this.HeliumSupply < MTEThoriumHighTempReactor.HELIUM_NEEDED) { + for (FluidStack fluidStack : this.getStoredFluids()) { + if (fluidStack.isFluidEqual(Materials.Helium.getGas(1))) { + int toget = Math + .min(MTEThoriumHighTempReactor.HELIUM_NEEDED - this.HeliumSupply, fluidStack.amount); + fluidStack.amount -= toget; + this.HeliumSupply += toget; + if (MTEThoriumHighTempReactor.HELIUM_NEEDED == this.HeliumSupply && fluidStack.amount == 0) + fluidStack = null; + } + } + } + if (this.fuelsupply < maxcapacity) { + this.startRecipeProcessing(); + for (ItemStack itemStack : this.getStoredInputs()) { + if (GTUtility.areStacksEqual( + itemStack, + new ItemStack(THTRMaterials.aTHTR_Materials, 1, THTRMaterials.MATERIAL_FUEL_INDEX))) { + int toget = Math.min(maxcapacity - this.fuelsupply, itemStack.stackSize); + if (toget == 0) continue; + itemStack.stackSize -= toget; + this.fuelsupply += toget; + } + } + this.endRecipeProcessing(); + this.updateSlots(); + } + } + } + + @Override + public boolean checkRecipe(ItemStack controllerStack) { + + if (this.empty) { + if (this.HeliumSupply > 0 || this.fuelsupply > 0) { + this.mEfficiency = 10000; + this.mMaxProgresstime = 100; + return true; + } + return false; + } + if (this.HeliumSupply < MTEThoriumHighTempReactor.HELIUM_NEEDED || this.fuelsupply < mincapacity) return false; + + double eff = Math + .min(Math.pow((this.fuelsupply - mincapacity) / ((maxcapacity - mincapacity) / 10D), 2D) + 1, 100D) / 100D + - (this.getIdealStatus() - this.getRepairStatus()) / 10D; + if (eff <= 0D) return false; + + int toReduce = MathUtils.floorInt(this.fuelsupply * 0.005D * eff); + + final int originalToReduce = toReduce; + int burnedballs = toReduce / 64; + if (burnedballs > 0) toReduce -= burnedballs * 64; + + int meta = THTRMaterials.MATERIAL_USED_FUEL_INDEX; + + ItemStack[] toOutput = { new ItemStack(THTRMaterials.aTHTR_Materials, burnedballs, meta), + new ItemStack(THTRMaterials.aTHTR_Materials, toReduce, meta + 1) }; + if (!this.canOutputAll(toOutput)) return false; + + this.fuelsupply -= originalToReduce; + this.mOutputItems = toOutput; + + // this.updateSlots(); not needed ? + + this.coolanttaking = (int) (4800D * eff); + this.mEfficiency = (int) (eff * 10000D); + this.mEUt = -powerUsage; + this.mMaxProgresstime = 648000; + return true; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + + if (this.empty) { + this.addOutput(Materials.Helium.getGas(this.HeliumSupply)); + this.addOutput( + new ItemStack(THTRMaterials.aTHTR_Materials, this.fuelsupply, THTRMaterials.MATERIAL_FUEL_INDEX)); + this.HeliumSupply = 0; + this.fuelsupply = 0; + this.updateSlots(); + return true; + } + + if (!super.onRunningTick(aStack)) return false; + + int takecoolant = this.coolanttaking; + int drainedamount = 0; + + for (MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) { + FluidStack tLiquid = tHatch.getFluid(); + if (tLiquid != null && tLiquid.isFluidEqual(FluidRegistry.getFluidStack("ic2coolant", 1))) { + FluidStack drained = tHatch.drain(takecoolant, true); + takecoolant -= drained.amount; + drainedamount += drained.amount; + if (takecoolant <= 0) break; + } + } + + if (drainedamount > 0) this.addOutput(FluidRegistry.getFluidStack("ic2hotcoolant", drainedamount)); + + this.updateSlots(); + + return true; + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack itemStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEThoriumHighTempReactor(this.mName); + } + + @Override + public String[] getInfoData() { + return new String[] { "Progress:", + GTUtility.formatNumbers(this.mProgresstime / 20) + "secs /" + + GTUtility.formatNumbers(this.mMaxProgresstime / 20) + + "secs", + "TRISO-Pebbles:", + GTUtility.formatNumbers(this.fuelsupply) + "pcs. / " + GTUtility.formatNumbers(this.fuelsupply) + "psc.", + "Helium-Level:", + GTUtility.formatNumbers(this.HeliumSupply) + "L / " + + GTUtility.formatNumbers(MTEThoriumHighTempReactor.HELIUM_NEEDED) + + "L", + "Coolant/t:", GTUtility.formatNumbers(this.mProgresstime == 0 ? 0 : this.coolanttaking) + "L/t", + "Problems:", String.valueOf(this.getIdealStatus() - this.getRepairStatus()) }; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { + Textures.BlockIcons.getCasingTextureForId(MTEThoriumHighTempReactor.BASECASINGINDEX), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { + Textures.BlockIcons.getCasingTextureForId(MTEThoriumHighTempReactor.BASECASINGINDEX), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MTEThoriumHighTempReactor.BASECASINGINDEX) }; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (this.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(aPlayer, "THTR mode cannot be changed while the machine is running."); + return; + } + this.empty = !this.empty; + GTUtility.sendChatToPlayer( + aPlayer, + "THTR is now running in " + (this.empty ? "emptying mode." : "normal Operation")); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + public static class THTRMaterials { + + public static final SimpleSubItemClass aTHTR_Materials = new SimpleSubItemClass( + "BISOPelletCompound", // 0 + "BISOPelletBall", // 1 + "TRISOPelletCompound", // 2 + "TRISOPelletBall", // 3 + "TRISOPellet", // 4 + "BurnedOutTRISOPelletBall", // 5 + "BurnedOutTRISOPellet" // 6 + ); + public static final int MATERIAL_FUEL_INDEX = 4; + public static final int MATERIAL_USED_FUEL_INDEX = 5; + + public static void registeraTHR_Materials() { + GameRegistry.registerItem(MTEThoriumHighTempReactor.THTRMaterials.aTHTR_Materials, "bw.THTRMaterials"); + } + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/MTEWindmill.java b/src/main/java/bartworks/common/tileentities/multis/MTEWindmill.java new file mode 100644 index 0000000000..e60c147b70 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/MTEWindmill.java @@ -0,0 +1,637 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis; + +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTWORKS; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofTileAdder; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.V; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityDispenser; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import bartworks.API.modularUI.BWUITextures; +import bartworks.MainMod; +import bartworks.common.items.ItemStonageRotors; +import bartworks.common.loaders.ItemRegistry; +import bartworks.common.tileentities.classic.TileEntityRotorBlock; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IGetTitleColor; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.items.IDMetaTool01; +import gregtech.common.items.MetaGeneratedTool01; + +public class MTEWindmill extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable, IGetTitleColor { + + private static final IIcon[] iIcons = new IIcon[2]; + private static final IIconContainer[] iIconContainers = new IIconContainer[2]; + private static final ITexture[] iTextures = new ITexture[3]; + + private TileEntityRotorBlock rotorBlock; + private int mDoor = 0; + private int mHardenedClay = 0; + private int mMulti = 16; + + public MTEWindmill(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + private MTEWindmill(String aName) { + super(aName); + } + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { " ", " ", " ", " p ", " ", " ", " " }, + { " ", " ", " ppp ", " p p ", " ppp ", " ", " " }, + { " ", " ppppp ", " p p ", " p p ", " p p ", " ppppp ", " " }, + { " ppppp ", "p p", "p p", "p p", "p p", "p p", " ppppp " }, + { " ppspp ", "p p", "p p", "p p", "p p", "p p", " ppppp " }, + { " ppppp ", "p p", "p p", "p p", "p p", "p p", " ppppp " }, + { " ", " ppppp ", " p p ", " p p ", " p p ", " ppppp ", " " }, + { " ", " ccc ", " c c ", " c c ", " c c ", " ccc ", " " }, + { " ", " ccc ", " c c ", " c c ", " c c ", " ccc ", " " }, + { " ", " ccc ", " c c ", " c c ", " c c ", " ccc ", " " }, + { " ", " ccc ", " c c ", " c c ", " c c ", " ccc ", " " }, + { " bb~bb ", "bbbbbbb", "bbbbbbb", "bbbbbbb", "bbbbbbb", "bbbbbbb", " bbbbb " }, })) + .addElement('p', ofBlockAnyMeta(Blocks.planks)) + .addElement( + 'c', + ofChain( + onElementPass(t -> t.mHardenedClay++, ofBlock(Blocks.hardened_clay, 0)), + ofTileAdder(MTEWindmill::addDispenserToOutputSet, Blocks.hardened_clay, 0), + onElementPass(t -> t.mDoor++, new IStructureElementNoPlacement() { + + private final IStructureElement delegate = ofBlock(Blocks.wooden_door, 0); + + @Override + public boolean check(MTEWindmill gt_tileEntity_windmill, World world, int x, int y, int z) { + return this.delegate.check(gt_tileEntity_windmill, world, x, y, z); + } + + @Override + public boolean spawnHint(MTEWindmill gt_tileEntity_windmill, World world, int x, int y, int z, + ItemStack trigger) { + return this.delegate.spawnHint(gt_tileEntity_windmill, world, x, y, z, trigger); + } + }))) + .addElement('b', ofBlock(Blocks.brick_block, 0)) + .addElement('s', new IStructureElement() { + + @Override + public boolean check(MTEWindmill t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return t.setRotorBlock(tileEntity); + } + + @Override + public boolean spawnHint(MTEWindmill t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 0); + return true; + } + + @Override + public boolean placeBlock(MTEWindmill gt_tileEntity_windmill, World world, int x, int y, int z, + ItemStack trigger) { + return false; + } + + @Override + public BlocksToPlace getBlocksToPlace(MTEWindmill gt_tileEntity_windmill, World world, int x, int y, int z, + ItemStack trigger, AutoPlaceEnvironment env) { + return BlocksToPlace.create(new ItemStack(ItemRegistry.ROTORBLOCK)); + } + }) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Windmill") + .addInfo("Controller block for the Windmill") + .addInfo("A primitive Grinder powered by Kinetic energy") + .addInfo("Speed and output will be affected by wind speed, recipe and rotor") + .addInfo("Please use the Primitive Rotor") + .addInfo("Macerates 16 items at a time") + .addInfo("The structure is too complex!") + .addInfo("Follow the StructureLib hologram projector to build the main structure.") + .addSeparator() + .beginStructureBlock(7, 12, 7, false) + .addController("Front bottom center") + .addCasingInfoMin("Hardened Clay block", 40, false) + .addOtherStructurePart("Dispenser", "Any Hardened Clay block") + .addOtherStructurePart("0-1 Wooden door", "Any Hardened Clay block") + .addStructureHint("Primitive Kinetic Shaftbox", 1) + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); + return tt; + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + private final Set tileEntityDispensers = new HashSet<>(); + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (this.mMaxProgresstime > 0) this.mProgresstime += this.rotorBlock.getGrindPower(); + if (!this.rotorBlock.rotorSlot.isEmpty()) this.setRotorDamage(this.rotorBlock, this.rotorBlock.getGrindPower()); + return this.rotorBlock.getGrindPower() > 0; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return true; + } + + @Override + public boolean doRandomMaintenanceDamage() { + return true; + } + + private float[] multiplierRecipe(ItemStack itemStack) { + // will return max and min value of the multiplier, the average of these is used to calculate the multiplier. + final Item item = itemStack.getItem(); + if (item == Items.wheat) { + return new float[] { 1.13f, 1.5f }; + } + final Block block = Block.getBlockFromItem(item); + if (item == Items.bone || block == Blocks.glowstone || block == Blocks.pumpkin) { + return new float[] { 0.8f, 1f }; + } + if (block == Blocks.gravel || block == Blocks.cobblestone + || block == Blocks.stone + || block == Blocks.sandstone + || block == Blocks.clay + || block == Blocks.hardened_clay + || block == Blocks.stained_hardened_clay + || block == Blocks.wool + || block == Blocks.netherrack + || block == Blocks.log + || block == Blocks.log2) { + return new float[] { 1f, 1.5f }; + } + final ItemData association = GTOreDictUnificator.getAssociation(itemStack); + final OrePrefixes prefix = association == null ? null : association.mPrefix; + if (prefix == null || association.mMaterial == null + || association.mMaterial.mMaterial == null + || association.mMaterial.mMaterial.getDust(1) == null) { + return new float[] { 1f, 1f }; + } + if (OrePrefixes.ore == prefix || OrePrefixes.oreNetherrack == prefix + || OrePrefixes.oreEndstone == prefix + || OrePrefixes.oreBlackgranite == prefix + || OrePrefixes.oreRedgranite == prefix + || OrePrefixes.oreMarble == prefix + || OrePrefixes.oreBasalt == prefix) { + return new float[] { 0.5f, 1f }; + } + if (OrePrefixes.stone == prefix || OrePrefixes.stoneBricks == prefix + || OrePrefixes.stoneChiseled == prefix + || OrePrefixes.stoneCobble == prefix + || OrePrefixes.stoneCracked == prefix + || OrePrefixes.stoneMossy == prefix + || OrePrefixes.stoneMossyBricks == prefix + || OrePrefixes.stoneSmooth == prefix + || OrePrefixes.cobblestone == prefix) { + return new float[] { 1f, 1.5f }; + } + return new float[] { 1f, 1f }; + } + + @Override + public boolean checkRecipe(ItemStack itemStack) { + if (itemStack == null || itemStack.getItem() == null) return false; + + if (this.mOutputItems == null) this.mOutputItems = new ItemStack[2]; + + GTRecipe tRecipe = RecipeMaps.maceratorRecipes + .findRecipe(this.getBaseMetaTileEntity(), false, false, V[1], null, itemStack); + if (tRecipe == null) { + return false; + } + + if (tRecipe.getOutput(0) != null) { + // Decrease input stack by appropriate amount (Not always 1) + for (int i = 0; i < this.mMulti; i++) { + if (!tRecipe.isRecipeInputEqual(true, null, itemStack)) { + this.mMulti = i; + break; + } + } + this.updateSlots(); + this.mOutputItems[0] = tRecipe.getOutput(0); + float[] mRecipe = this.multiplierRecipe(itemStack); + float multiper = Math.min( + mRecipe[1], + Math.max( + mRecipe[0], + 2f * (float) Math.sqrt((float) 1 / (this.rotorBlock.getWindStrength() + 1)) + * this.OutputMultiplier(this.rotorBlock) + * (mRecipe[0] + mRecipe[1]))); + int amount = (int) Math.floor(multiper * (this.mOutputItems[0].stackSize * this.mMulti)); + + // Split ItemStack --by gtpp + List splitStacks = new ArrayList<>(); + while (amount > this.mOutputItems[0].getMaxStackSize()) { + ItemStack tmp = this.mOutputItems[0].copy(); + tmp.stackSize = this.mOutputItems[0].getMaxStackSize(); + amount -= this.mOutputItems[0].getMaxStackSize(); + splitStacks.add(tmp); + } + ItemStack tmp = this.mOutputItems[0].copy(); + tmp.stackSize = amount; + splitStacks.add(tmp); + this.mOutputItems = splitStacks.toArray(new ItemStack[splitStacks.size()]); + } + this.mMaxProgresstime = tRecipe.mDuration * 2 * 100 * this.mMulti / this.getSpeed(this.rotorBlock); + this.mMulti = 16; + return true; + } + + @Override + public void stopMachine() { + this.getBaseMetaTileEntity() + .disableWorking(); + } + + public boolean addDispenserToOutputSet(TileEntity aTileEntity) { + if (aTileEntity instanceof TileEntityDispenser) { + this.tileEntityDispensers.add((TileEntityDispenser) aTileEntity); + return true; + } + return false; + } + + public boolean setRotorBlock(TileEntity aTileEntity) { + if (aTileEntity instanceof TileEntityRotorBlock) { + this.rotorBlock = (TileEntityRotorBlock) aTileEntity; + return true; + } + return false; + } + + @Override + public boolean addOutput(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return false; + + for (TileEntityDispenser tHatch : this.tileEntityDispensers) { + for (int i = tHatch.getSizeInventory() - 1; i >= 0; i--) { + if (tHatch.getStackInSlot(i) == null || GTUtility.areStacksEqual(tHatch.getStackInSlot(i), aStack) + && aStack.stackSize + tHatch.getStackInSlot(i).stackSize <= 64) { + if (GTUtility.areStacksEqual(tHatch.getStackInSlot(i), aStack)) { + ItemStack merge = tHatch.getStackInSlot(i) + .copy(); + merge.stackSize = aStack.stackSize + tHatch.getStackInSlot(i).stackSize; + tHatch.setInventorySlotContents(i, merge); + } else { + tHatch.setInventorySlotContents(i, aStack.copy()); + } + + if (GTUtility.areStacksEqual(tHatch.getStackInSlot(i), aStack)) { + aStack = null; + return true; + } + tHatch.setInventorySlotContents(i, null); + aStack = null; + return false; + } + } + } + return false; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { + + this.tileEntityDispensers.clear(); + this.mDoor = 0; + this.mHardenedClay = 0; + + return this.checkPiece(STRUCTURE_PIECE_MAIN, 3, 11, 0) && !this.tileEntityDispensers.isEmpty() + && this.mDoor <= 2 + && this.mHardenedClay >= 40; + } + + @Override + public int getCurrentEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public void updateSlots() { + if (this.mInventory[1] != null && this.mInventory[1].stackSize <= 0) { + this.mInventory[1] = null; + } + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack itemStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEWindmill(this.mName); + } + + @Override + public String[] getInfoData() { + return new String[] { "Progress:", + this.mProgresstime + " Grindings of " + this.mMaxProgresstime + " needed Grindings", "GrindPower:", + this.rotorBlock.getGrindPower() + "KU/t" }; + } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(IIconRegister aBlockIconRegister) { + MTEWindmill.iIcons[0] = Blocks.brick_block.getIcon(0, 0); + MTEWindmill.iIconContainers[0] = new IIconContainer() { + + @Override + public IIcon getIcon() { + return MTEWindmill.iIcons[0]; + } + + @Override + public IIcon getOverlayIcon() { + return null; + } + + @Override + public ResourceLocation getTextureFile() { + return new ResourceLocation("brick"); + } + }; + + MTEWindmill.iIcons[1] = aBlockIconRegister.registerIcon(MainMod.MOD_ID + ":windmill_top"); + MTEWindmill.iIconContainers[1] = new IIconContainer() { + + @Override + public IIcon getIcon() { + return MTEWindmill.iIcons[1]; + } + + @Override + public IIcon getOverlayIcon() { + return null; + } + + @Override + public ResourceLocation getTextureFile() { + return new ResourceLocation(MainMod.MOD_ID + ":windmill_top"); + } + }; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + + ITexture[] ret = new ITexture[6]; + + if (this.isClientSide()) { + + if (facing == side || side == ForgeDirection.DOWN) { + MTEWindmill.iTextures[0] = TextureFactory.of(MTEWindmill.iIconContainers[0]); + Arrays.fill(ret, MTEWindmill.iTextures[0]); + } else if (side == ForgeDirection.UP) { + MTEWindmill.iTextures[1] = TextureFactory.of(MTEWindmill.iIconContainers[1]); + Arrays.fill(ret, MTEWindmill.iTextures[1]); + } else { + MTEWindmill.iTextures[2] = TextureFactory.of(Textures.BlockIcons.COVER_WOOD_PLATE); + Arrays.fill(ret, MTEWindmill.iTextures[2]); + } + } + return ret; + } + + public boolean isClientSide() { + if (this.getBaseMetaTileEntity() + .getWorld() != null) + return this.getBaseMetaTileEntity() + .getWorld().isRemote + ? FMLCommonHandler.instance() + .getSide() == Side.CLIENT + : FMLCommonHandler.instance() + .getEffectiveSide() == Side.CLIENT; + return FMLCommonHandler.instance() + .getEffectiveSide() == Side.CLIENT; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + this.buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 3, 11, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (this.mMachine) return -1; + return this.survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 11, 0, elementBudget, env, false, true); + } + + public float OutputMultiplier(TileEntityRotorBlock rotorBlock) { + try { + return ((ItemStonageRotors) rotorBlock.rotorSlot.get() + .getItem()).getmRotor(); + } catch (Exception e) { + return 1f; + } + } + + public int getSpeed(TileEntityRotorBlock rotorBlock) { + try { + return ((ItemStonageRotors) rotorBlock.rotorSlot.get() + .getItem()).getSpeed(); + } catch (Exception e) { + return 1; + } + } + + public void setRotorDamage(TileEntityRotorBlock rotorBlock, int damage) { + try { + ((ItemStonageRotors) rotorBlock.rotorSlot.get() + .getItem()).damageItemStack(rotorBlock.rotorSlot.get(), damage); + } catch (Exception e) { + rotorBlock.rotorSlot.damage(damage, false); + } + } + + @Override + public GUITextureSet getGUITextureSet() { + return new GUITextureSet().setMainBackground(BWUITextures.BACKGROUND_BROWN) + .setItemSlot(BWUITextures.SLOT_BROWN) + .setTitleTab( + BWUITextures.TAB_TITLE_BROWN, + BWUITextures.TAB_TITLE_DARK_BROWN, + BWUITextures.TAB_TITLE_ANGULAR_BROWN); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(BWUITextures.PICTURE_BW_LOGO_47X21) + .setSize(47, 21) + .setPos(123, 59)); + } + + @Override + public int getTitleColor() { + return this.COLOR_TITLE_WHITE.get(); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new SlotWidget(this.inventoryHandler, 1).setBackground( + this.getGUITextureSet() + .getItemSlot()) + .setPos(59, 35)) + .widget(new DrawableWidget() { + + private static final int DIVIDER = 125; + + @Override + public void onScreenUpdate() { + super.onScreenUpdate(); + if (MTEWindmill.this.mMaxProgresstime > 0) { + if (System.currentTimeMillis() / DIVIDER % 40 == 30) + this.setDrawable(BWUITextures.PICTURE_WINDMILL_ROTATING[3]); + else if (System.currentTimeMillis() / DIVIDER % 40 == 20) + this.setDrawable(BWUITextures.PICTURE_WINDMILL_ROTATING[2]); + else if (System.currentTimeMillis() / DIVIDER % 40 == 10) + this.setDrawable(BWUITextures.PICTURE_WINDMILL_ROTATING[1]); + else if (System.currentTimeMillis() / DIVIDER % 40 == 0) + this.setDrawable(BWUITextures.PICTURE_WINDMILL_ROTATING[0]); + } else { + this.setDrawable(BWUITextures.PICTURE_WINDMILL_EMPTY); + } + } + }.setDrawable(BWUITextures.PICTURE_WINDMILL_EMPTY) + .setPos(85, 27) + .setSize(32, 32)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> this.mMaxProgresstime, val -> this.mMaxProgresstime = val)) + .widget( + new ItemDrawable( + () -> this.mMachine && !this.getBaseMetaTileEntity() + .isActive() + ? MetaGeneratedTool01.INSTANCE + .getToolWithStats(IDMetaTool01.SOFTMALLET.ID, 1, null, null, null) + : null).asWidget() + .setPos(66, 66)) + .widget( + new FakeSyncWidget.BooleanSyncer( + () -> this.getBaseMetaTileEntity() + .isActive(), + val -> this.getBaseMetaTileEntity() + .setActive(val))) + .widget( + new TextWidget(GTUtility.trans("138", "Incomplete Structure.")) + .setDefaultColor(this.COLOR_TEXT_WHITE.get()) + .setMaxWidth(150) + .setEnabled(widget -> !this.mMachine) + .setPos(92, 22)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> this.mMachine, val -> this.mMachine = val)); + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaBlastFurnace.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaBlastFurnace.java new file mode 100644 index 0000000000..8d5ea073db --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaBlastFurnace.java @@ -0,0 +1,430 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis.mega; + +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.Arrays; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.API.BorosilicateGlass; +import bartworks.common.configs.ConfigHandler; +import bartworks.util.BWUtil; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; + +public class MTEMegaBlastFurnace extends MegaMultiBlockBase implements ISurvivalConstructable { + + private static final int CASING_INDEX = 11; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape("main", createShape()) + .addElement('=', StructureElementAirNoHint.getInstance()) + .addElement( + 't', + buildHatchAdder(MTEMegaBlastFurnace.class) + .atLeast( + OutputHatch.withAdder(MTEMegaBlastFurnace::addOutputHatchToTopList) + .withCount(t -> t.mPollutionOutputHatches.size())) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(GregTechAPI.sBlockCasings1, CASING_INDEX)) + .addElement('m', Muffler.newAny(CASING_INDEX, 2)) + .addElement( + 'C', + withChannel("coil", ofCoil(MTEMegaBlastFurnace::setCoilLevel, MTEMegaBlastFurnace::getCoilLevel))) + .addElement( + 'g', + withChannel( + "glass", + BorosilicateGlass + .ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier))) + .addElement( + 'b', + buildHatchAdder(MTEMegaBlastFurnace.class) + .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy.or(ExoticEnergy)) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(GregTechAPI.sBlockCasings1, CASING_INDEX)) + .build(); + + private static String[][] createShape() { + String[][] raw = new String[20][]; + + raw[0] = new String[15]; + String topCasing = "ttttttttttttttt"; + String middleTopCasing = "tttttttmttttttt"; + raw[0][0] = topCasing; + for (int i = 1; i < 15; i++) { + raw[0][i] = topCasing; + } + raw[0][7] = middleTopCasing; + + raw[1] = new String[15]; + String allGlass = "ggggggggggggggg"; + String allCoil = "gCCCCCCCCCCCCCg"; + String middleLine = "gC===========Cg"; + raw[1][0] = allGlass; + raw[1][1] = allCoil; + raw[1][13] = allCoil; + raw[1][14] = allGlass; + for (int i = 2; i < 13; i++) { + raw[1][i] = middleLine; + } + for (int i = 2; i < 19; i++) { + raw[i] = raw[1]; + } + String bottomCasing = "bbbbbbbbbbbbbbb"; + raw[19] = new String[15]; + for (int i = 0; i < 15; i++) { + raw[19][i] = bottomCasing; + } + + raw[17] = Arrays.copyOf(raw[17], raw[17].length); + raw[17][0] = "ggggggg~ggggggg"; + + return transpose(raw); + } + + private HeatingCoilLevel mCoilLevel; + protected final ArrayList mPollutionOutputHatches = new ArrayList<>(); + protected final FluidStack[] pollutionFluidStacks = { Materials.CarbonDioxide.getGas(1000), + Materials.CarbonMonoxide.getGas(1000), Materials.SulfurDioxide.getGas(1000) }; + private int mHeatingCapacity; + private byte glassTier; + private final static int polPtick = ConfigHandler.basePollutionMBFSecond / 20 * ConfigHandler.megaMachinesMax; + + public MTEMegaBlastFurnace(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMegaBlastFurnace(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEMegaBlastFurnace(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Blast Furnace") + .addInfo("Controller block for the Mega Blast Furnace") + .addInfo("You can use some fluids to reduce recipe time. Place the circuit in the Input Bus") + .addInfo("Each 900K over the min. Heat required reduces power consumption by 5% (multiplicatively)") + .addInfo("Each 1800K over the min. Heat allows for an overclock to be upgraded to a perfect overclock.") + .addInfo("That means the EBF will reduce recipe time by a factor 4 instead of 2 (giving 100% efficiency).") + .addInfo("Additionally gives +100K for every tier past MV") + .addInfo( + GTValues.TIER_COLORS[8] + GTValues.VN[8] + + EnumChatFormatting.GRAY + + "-tier glass required for " + + EnumChatFormatting.BLUE + + "Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Laser Hatches.") + .addPollutionAmount(20 * this.getPollutionPerTick(null)) + .addSeparator() + .beginStructureBlock(15, 20, 15, true) + .addController("3rd layer center") + .addCasingInfoRange("Heat Proof Machine Casing", 0, 279, false) + .addOtherStructurePart("864x Heating Coils", "Inner 13x18x13 (Hollow)") + .addOtherStructurePart("1007x Borosilicate Glass", "Outer 15x18x15") + .addStructureInfo("The glass tier limits the Energy Input tier") + .addEnergyHatch("Any bottom layer casing") + .addMaintenanceHatch("Any bottom layer casing") + .addMufflerHatch("Top middle") + .addInputBus("Any bottom layer casing") + .addInputHatch("Any bottom layer casing") + .addOutputBus("Any bottom layer casing") + .addOutputHatch("Gasses, Any top layer casing") + .addStructureInfo("Recovery amount scales with Muffler Hatch tier") + .addOutputHatch("Platline fluids, Any bottom layer casing") + .addStructureHint("This Mega Multiblock is too big to have its structure hologram displayed fully.") + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS); + return tt; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.glassTier = aNBT.getByte("glasTier"); + if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { + this.inputSeparation = aNBT.getBoolean("isBussesSeparate"); + } + if (!aNBT.hasKey(BATCH_MODE_NBT_KEY)) { + this.batchMode = aNBT.getBoolean("mUseMultiparallelMode"); + } + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (!aPlayer.isSneaking()) { + this.inputSeparation = !this.inputSeparation; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + this.inputSeparation); + return true; + } + this.batchMode = !this.batchMode; + if (this.batchMode) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByte("glasTier", this.glassTier); + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return polPtick; + } + + public boolean addOutputHatchToTopList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchOutput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mPollutionOutputHatches.add((MTEHatchOutput) aMetaTileEntity); + } + return false; + } + + @Override + protected String[] getExtendedInfoData() { + return new String[] { StatCollector.translateToLocal("GT5U.EBF.heat") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(this.mHeatingCapacity) + + EnumChatFormatting.RESET + + " K" }; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).setRecipeHeat(recipe.mSpecialValue) + .setMachineHeat(MTEMegaBlastFurnace.this.mHeatingCapacity) + .setHeatOC(true) + .setHeatDiscount(true); + } + + @Override + protected @Nonnull CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + return recipe.mSpecialValue <= MTEMegaBlastFurnace.this.mHeatingCapacity + ? CheckRecipeResultRegistry.SUCCESSFUL + : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); + } + }.setMaxParallel(ConfigHandler.megaMachinesMax); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + this.buildPiece("main", stackSize, hintsOnly, 7, 17, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (this.mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); + this.glassTier = 0; + this.setCoilLevel(HeatingCoilLevel.None); + return this.survivialBuildPiece("main", stackSize, 7, 17, 0, realBudget, source, actor, false, true); + } + + public void setCoilLevel(HeatingCoilLevel aCoilLevel) { + this.mCoilLevel = aCoilLevel; + } + + public HeatingCoilLevel getCoilLevel() { + return this.mCoilLevel; + } + + @Override + public boolean addOutput(FluidStack aLiquid) { + if (aLiquid == null) return false; + FluidStack tLiquid = aLiquid.copy(); + boolean isOutputPollution = false; + for (FluidStack pollutionFluidStack : this.pollutionFluidStacks) { + if (!tLiquid.isFluidEqual(pollutionFluidStack)) continue; + + isOutputPollution = true; + break; + } + ArrayList tOutputHatches; + if (isOutputPollution) { + tOutputHatches = this.mPollutionOutputHatches; + int pollutionReduction = 0; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + pollutionReduction = 100 - tHatch.calculatePollutionReduction(100); + break; + } + tLiquid.amount = tLiquid.amount * pollutionReduction / 100; + } else { + tOutputHatches = this.mOutputHatches; + } + return dumpFluid(tOutputHatches, tLiquid, true) || dumpFluid(tOutputHatches, tLiquid, false); + } + + @Override + public boolean checkMachine(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + this.mHeatingCapacity = 0; + this.glassTier = 0; + + this.setCoilLevel(HeatingCoilLevel.None); + + this.mPollutionOutputHatches.clear(); + + if (!this.checkPiece("main", 7, 17, 0) || this.getCoilLevel() == HeatingCoilLevel.None + || this.mMaintenanceHatches.size() != 1) return false; + + if (this.glassTier < 8) { + for (int i = 0; i < this.mExoticEnergyHatches.size(); ++i) { + MTEHatch hatch = this.mExoticEnergyHatches.get(i); + if (hatch.getConnectionType() == MTEHatch.ConnectionType.LASER) { + return false; + } + if (this.glassTier < hatch.mTier) { + return false; + } + } + for (int i = 0; i < this.mEnergyHatches.size(); ++i) { + if (this.glassTier < this.mEnergyHatches.get(i).mTier) { + return false; + } + } + } + + this.mHeatingCapacity = (int) this.getCoilLevel() + .getHeat() + 100 * (BWUtil.getTier(this.getMaxInputEu()) - 2); + + return true; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.blastFurnaceRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return -2; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaChemicalReactor.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaChemicalReactor.java new file mode 100644 index 0000000000..e1366cec7d --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaChemicalReactor.java @@ -0,0 +1,278 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis.mega; + +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTWORKS; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.API.BorosilicateGlass; +import bartworks.common.configs.ConfigHandler; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEMegaChemicalReactor extends MegaMultiBlockBase + implements ISurvivalConstructable { + + private byte glassTier; + + public MTEMegaChemicalReactor(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMegaChemicalReactor(String aName) { + super(aName); + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Chemical Reactor") + .addInfo("Controller block for the Chemical Reactor") + .addInfo("What molecule do you want to synthesize") + .addInfo("Or you want to replace something in this molecule") + .addInfo( + GTValues.TIER_COLORS[8] + GTValues.VN[8] + + EnumChatFormatting.GRAY + + "-tier glass required for " + + EnumChatFormatting.BLUE + + "Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Laser Hatches.") + .addInfo("The structure is too complex!") + .addInfo("Follow the Structure Lib hologram projector to build the main structure.") + .addSeparator() + .beginStructureBlock(5, 5, 9, false) + .addController("Front center") + .addStructureInfo("46x Chemically Inert Machine Casing (minimum)") + .addStructureInfo("7x Fusion Coil Block") + .addStructureInfo("28x PTFE Pipe Casing") + .addStructureInfo("64x Borosilicate Glass Block (any tier)") + .addStructureInfo("The glass tier limits the Energy Input tier") + .addEnergyHatch("Hint block ", 3) + .addMaintenanceHatch("Hint block ", 2) + .addInputHatch("Hint block ", 1) + .addInputBus("Hint block ", 1) + .addOutputBus("Hint block ", 1) + .addOutputHatch("Hint block ", 1) + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); + return tt; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMegaChemicalReactor(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { casingTexturePages[1][48], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[1][48], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[1][48] }; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.multiblockChemicalReactorRecipes; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (!aNBT.hasKey(BATCH_MODE_NBT_KEY)) { + this.batchMode = aNBT.getBoolean("mUseMultiparallelMode"); + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + inputSeparation = !inputSeparation; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + this.batchMode = !this.batchMode; + if (this.batchMode) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } + return false; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().enablePerfectOverclock() + .setMaxParallel(ConfigHandler.megaMachinesMax); + } + + @Override + public void construct(ItemStack aStack, boolean aHintsOnly) { + this.buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 2, 2, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (this.mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); + return this + .survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 2, 0, realBudget, source, actor, false, true); + } + // -------------- TEC TECH COMPAT ---------------- + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.glassTier = 0; + + if (!this.checkPiece(STRUCTURE_PIECE_MAIN, 2, 2, 0) || this.mMaintenanceHatches.size() != 1) return false; + + if (this.glassTier < 8) { + for (int i = 0; i < this.mExoticEnergyHatches.size(); ++i) { + MTEHatch hatch = this.mExoticEnergyHatches.get(i); + if (hatch.getConnectionType() == MTEHatch.ConnectionType.LASER) { + return false; + } + if (this.glassTier < hatch.mTier) { + return false; + } + } + for (int i = 0; i < this.mEnergyHatches.size(); ++i) { + if (this.glassTier < this.mEnergyHatches.get(i).mTier) { + return false; + } + } + } + + return true; + } + + private static final int CASING_INDEX = 176; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { "ttttt", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "ttttt" }, + { "tgggt", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", "teeet" }, + { "tg~gt", " gcg ", " gcg ", " gcg ", " gcg ", " gcg ", " gcg ", " gcg ", "teret" }, + { "tgggt", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", "teeet" }, + { "ttttt", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "ttttt" }, })) + .addElement('p', ofBlock(GregTechAPI.sBlockCasings8, 1)) + .addElement('t', ofBlock(GregTechAPI.sBlockCasings8, 0)) + .addElement( + 'd', + buildHatchAdder(MTEMegaChemicalReactor.class).atLeast(InputBus, InputHatch, OutputBus, OutputHatch) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(GregTechAPI.sBlockCasings8, 0)) + .addElement('r', Maintenance.newAny(CASING_INDEX, 2)) + .addElement( + 'e', + buildHatchAdder(MTEMegaChemicalReactor.class) + .atLeast(Energy.or(ExoticEnergy), InputHatch, InputBus, OutputHatch, OutputBus) + .casingIndex(CASING_INDEX) + .dot(3) + .buildAndChain(GregTechAPI.sBlockCasings8, 0)) + .addElement('c', ofChain(ofBlock(GregTechAPI.sBlockCasings4, 7), ofBlock(GregTechAPI.sBlockCasings5, 13))) + .addElement( + 'g', + BorosilicateGlass + .ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier)) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java new file mode 100644 index 0000000000..382b64fb47 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaDistillTower.java @@ -0,0 +1,446 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis.mega; + +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElementCheckOnly; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.common.configs.ConfigHandler; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.fluid.IFluidStore; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.MTEHatchOutputME; + +public class MTEMegaDistillTower extends MegaMultiBlockBase implements ISurvivalConstructable { + + protected static final int CASING_INDEX = 49; + protected static final String STRUCTURE_PIECE_BASE = "base"; + protected static final String STRUCTURE_PIECE_LAYER = "layer"; + protected static final String STRUCTURE_PIECE_TOP_HINT = "top"; + private static final IStructureDefinition STRUCTURE_DEFINITION; + + static { + IHatchElement layeredOutputHatch = OutputHatch + .withCount(MTEMegaDistillTower::getCurrentLayerOutputHatchCount) + .withAdder(MTEMegaDistillTower::addLayerOutputHatch); + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_BASE, + transpose( + new String[][] { { "bbbbbbb~bbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", + "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", + "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", + "bbbbbbbbbbbbbbb" }, })) + .addShape( + STRUCTURE_PIECE_LAYER, + transpose( + new String[][] { + { "lllllllllllllll", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", + "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", + "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", + "lcccccccccccccl", "lllllllllllllll" }, + { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "lllllllllllllll" }, + { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "lllllllllllllll" }, + { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "lllllllllllllll" }, + { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "lllllllllllllll" }, })) + .addShape( + STRUCTURE_PIECE_TOP_HINT, + transpose( + new String[][] { + { "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", + "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", + "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", + "lllllllllllllll", "lllllllllllllll" }, + { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "lllllllllllllll" }, + { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "lllllllllllllll" }, + { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "lllllllllllllll" }, + { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "l=============l", "l=============l", "l=============l", + "l=============l", "lllllllllllllll" }, })) + .addElement('=', StructureElementAirNoHint.getInstance()) + .addElement( + 'b', + buildHatchAdder(MTEMegaDistillTower.class) + .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy.or(ExoticEnergy)) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain( + onElementPass(MTEMegaDistillTower::onCasingFound, ofBlock(GregTechAPI.sBlockCasings4, 1)))) + .addElement( + 'l', + buildHatchAdder(MTEMegaDistillTower.class) + .atLeast(layeredOutputHatch, Maintenance, Energy.or(ExoticEnergy)) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain( + onElementPass(MTEMegaDistillTower::onCasingFound, ofBlock(GregTechAPI.sBlockCasings4, 1)))) + .addElement('c', (IStructureElementCheckOnly) (t, world, x, y, z) -> { + if (world.isAirBlock(x, y, z)) { + if (t.mTopState < 1) { + t.mTopState = 0; + return true; + } + // definitely top - cannot be air + return false; + } + // from here on we must be looking at a top layer, since it's not air + if (t.mTopState == 0) + // must be air but failed, so no + return false; + t.mTopState = 1; + // hatch adder + TileEntity tileEntity = world.getTileEntity(x, y, z); + if (tileEntity instanceof IGregTechTileEntity entity && t.addLayerOutputHatch(entity, CASING_INDEX)) { + t.onTopLayerFound(false); + return true; + } + // block adder + if (world.getBlock(x, y, z) == GregTechAPI.sBlockCasings4 && world.getBlockMetadata(x, y, z) == 1) { + t.onTopLayerFound(true); + return true; + } + return false; + }) + .build(); + } + + protected final List> mOutputHatchesByLayer = new ArrayList<>(); + protected int mHeight; + protected int mCasing; + protected boolean mTopLayerFound; + + // -1 => maybe top, maybe not, 0 => definitely not top, 1 => definitely top + private int mTopState = -1; + + public MTEMegaDistillTower(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + private MTEMegaDistillTower(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMegaDistillTower(this.mName); + } + + protected void onCasingFound() { + this.mCasing++; + } + + protected int getCurrentLayerOutputHatchCount() { + return this.mOutputHatchesByLayer.size() < this.mHeight || this.mHeight <= 0 ? 0 + : this.mOutputHatchesByLayer.get(this.mHeight - 1) + .size(); + } + + protected boolean addLayerOutputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null || aTileEntity.isDead() || !(aTileEntity.getMetaTileEntity() instanceof MTEHatchOutput)) + return false; + while (this.mOutputHatchesByLayer.size() < this.mHeight) this.mOutputHatchesByLayer.add(new ArrayList<>()); + MTEHatchOutput tHatch = (MTEHatchOutput) aTileEntity.getMetaTileEntity(); + tHatch.updateTexture(aBaseCasingIndex); + return this.mOutputHatchesByLayer.get(this.mHeight - 1) + .add(tHatch); + } + + protected void onTopLayerFound(boolean aIsCasing) { + this.mTopLayerFound = true; + if (aIsCasing) this.onCasingFound(); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.distillationTowerRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Distillery") + .addInfo("Controller block for the Distillation Tower") + .addInfo("Fluids are only put out at the correct height") + .addInfo("The correct height equals the slot number in the NEI recipe") + .addSeparator() + .beginVariableStructureBlock(15, 15, 16, 56, 15, 15, true) + .addController("Front bottom") + .addOtherStructurePart("Clean Stainless Steel Machine Casing", "15 x h - 5 (minimum)") + .addEnergyHatch("Any casing") + .addMaintenanceHatch("Any casing") + .addInputHatch("Any bottom layer casing") + .addOutputBus("Any bottom layer casing") + .addOutputHatch("2-11x Output Hatches (One per Output Layer except bottom layer)") + .addStructureInfo("An \"Output Layer\" consists of 5 layers!") + .addStructureHint("The interior of this Mega Multiblock's hologram is empty, it should be all air.") + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + // reset + this.mOutputHatchesByLayer.forEach(List::clear); + this.mHeight = 1; + this.mTopLayerFound = false; + this.mTopState = -1; + + // check base + if (!this.checkPiece(STRUCTURE_PIECE_BASE, 7, 0, 0)) return false; + + // check each layer + while (this.mHeight < 12) { + if (!checkPiece(STRUCTURE_PIECE_LAYER, 7, mHeight * 5, 0)) { + return false; + } + if (this.mOutputHatchesByLayer.size() < this.mHeight || this.mOutputHatchesByLayer.get(this.mHeight - 1) + .isEmpty()) + // layer without output hatch + return false; + if (mTopLayerFound) { + break; + } + this.mTopState = -1; + // not top + this.mHeight++; + } + + // validate final invariants... + return this.mCasing >= 75 * this.mHeight + 10 && this.mHeight >= 2 + && this.mTopLayerFound + && this.mMaintenanceHatches.size() == 1; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + this.buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 7, 0, 0); + int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height + for (int i = 1; i < tTotalHeight - 1; i++) { + this.buildPiece(STRUCTURE_PIECE_LAYER, stackSize, hintsOnly, 7, 5 * i, 0); + } + this.buildPiece(STRUCTURE_PIECE_TOP_HINT, stackSize, hintsOnly, 7, 5 * (tTotalHeight - 1), 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (this.mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); + this.mHeight = 0; + int built = this + .survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 7, 0, 0, realBudget, source, actor, false, true); + if (built >= 0) return built; + int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height + for (int i = 1; i < tTotalHeight - 1; i++) { + this.mHeight = i; + built = this.survivialBuildPiece( + STRUCTURE_PIECE_LAYER, + stackSize, + 7, + 5 * this.mHeight, + 0, + realBudget, + source, + actor, + false, + true); + if (built >= 0) return built; + } + this.mHeight = tTotalHeight - 1; + return this.survivialBuildPiece( + STRUCTURE_PIECE_TOP_HINT, + stackSize, + 7, + 5 * this.mHeight, + 0, + realBudget, + source, + actor, + false, + true); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (!aNBT.hasKey(BATCH_MODE_NBT_KEY)) { + this.batchMode = aNBT.getBoolean("mUseMultiparallelMode"); + } + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + this.batchMode = !this.batchMode; + if (this.batchMode) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } + return false; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setMaxParallel(ConfigHandler.megaMachinesMax); + } + + @Override + public boolean canDumpFluidToME() { + + // All fluids can be dumped to ME only if each layer contains a ME Output Hatch. + for (List tLayerOutputHatches : this.mOutputHatchesByLayer) { + + boolean foundMEHatch = false; + + for (IFluidStore tHatch : tLayerOutputHatches) { + if (tHatch instanceof MTEHatchOutputME tMEHatch) { + if (tMEHatch.canAcceptFluid()) { + foundMEHatch = true; + break; + } + } + } + + // Exit if we didn't find a valid hatch on this layer. + if (!foundMEHatch) { + return false; + } + } + + return true; + } + + @Override + protected void addFluidOutputs(FluidStack[] mOutputFluids2) { + for (int i = 0; i < mOutputFluids2.length && i < this.mOutputHatchesByLayer.size(); i++) { + FluidStack tStack = mOutputFluids2[i].copy(); + if (!dumpFluid(this.mOutputHatchesByLayer.get(i), tStack, true)) + dumpFluid(this.mOutputHatchesByLayer.get(i), tStack, false); + } + } + + @Override + public List getFluidOutputSlots(FluidStack[] toOutput) { + return this.getFluidOutputSlotsByLayer(toOutput, this.mOutputHatchesByLayer); + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaOilCracker.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaOilCracker.java new file mode 100644 index 0000000000..4720b0b37c --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaOilCracker.java @@ -0,0 +1,465 @@ +/* + * Copyright (c) 2022 SKYCATV587 Permission is hereby granted, free of charge, to any person obtaining a copy of this + * software and associated documentation files (the "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the + * Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The + * above copyright notice and this permission notice shall be included in all copies or substantial portions of the + * Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT + * LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF + * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis.mega; + +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTWORKS; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.API.BorosilicateGlass; +import bartworks.common.configs.ConfigHandler; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchMultiInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.maps.OilCrackerBackend; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.IRecipeProcessingAwareHatch; +import gregtech.common.tileentities.machines.MTEHatchInputME; + +public class MTEMegaOilCracker extends MegaMultiBlockBase implements ISurvivalConstructable { + + private static final int CASING_INDEX = 49; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { + { " p p ", "ppgggggggggpp", " pgggggggggp ", " pgggpppgggp ", " pgggpMpgggp ", + " pgggpppgggp ", " pgggggggggp ", "ppgggggggggpp", " p p " }, + { " p p ", "pgggggggggggp", " g c c c c g ", " g c c c c g ", " g c c c c g ", + " g c c c c g ", " g c c c c g ", "pgggggggggggp", " p p " }, + { " p p ", "pgggggggggggp", " g c c c c g ", " p c c p ", " p c c c c p ", + " p c c p ", " g c c c c g ", "pgggggggggggp", " p p " }, + { " p p ", "pgggggggggggp", " g c c c c g ", " p c c c c p ", " l c c c c r ", + " p c c c c p ", " g c c c c g ", "pgggggggggggp", " p p " }, + { " p p ", "pgggggggggggp", " g c c c c g ", " p c c p ", " p c c c c p ", + " p c c p ", " g c c c c g ", "pgggggggggggp", " p p " }, + { " p p ", "pgggggggggggp", " g c c c c g ", " g c c c c g ", " g c c c c g ", + " g c c c c g ", " g c c c c g ", "pgggggggggggp", " p p " }, + { "ppmmmm~mmmmpp", "ppppppppppppp", "ppppppppppppp", "ppppppppppppp", "ppppppppppppp", + "ppppppppppppp", "ppppppppppppp", "ppppppppppppp", "ppmmmmmmmmmpp" }, })) + .addElement('c', withChannel("coil", ofCoil(MTEMegaOilCracker::setCoilLevel, MTEMegaOilCracker::getCoilLevel))) + + .addElement('p', ofBlock(GregTechAPI.sBlockCasings4, 1)) + .addElement( + 'l', + InputHatch.withAdder(MTEMegaOilCracker::addLeftHatchToMachineList) + .newAny(CASING_INDEX, 2)) + .addElement( + 'r', + OutputHatch.withAdder(MTEMegaOilCracker::addRightHatchToMachineList) + .newAny(CASING_INDEX, 3)) + .addElement( + 'm', + buildHatchAdder(MTEMegaOilCracker.class).atLeast(Energy.or(ExoticEnergy), Maintenance, InputBus) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(GregTechAPI.sBlockCasings4, 1)) + .addElement( + 'M', + InputHatch.withAdder(MTEMegaOilCracker::addMiddleInputToMachineList) + .newAny(CASING_INDEX, 4)) + .addElement( + 'g', + withChannel( + "glass", + BorosilicateGlass + .ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier))) + .build(); + private byte glassTier; + private HeatingCoilLevel heatLevel; + protected final List mMiddleInputHatches = new ArrayList<>(); + protected int mInputOnSide = -1; + protected int mOutputOnSide = -1; + + public MTEMegaOilCracker(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMegaOilCracker(String aName) { + super(aName); + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Cracker") + .addInfo("Controller block for the Mega Oil Cracking") + .addInfo("Thermally cracks heavy hydrocarbons into lighter fractions") + .addInfo("More efficient than the Chemical Reactor") + .addInfo("Gives different benefits whether it hydro or steam-cracks:") + .addInfo("Hydro - Consumes 20% less Hydrogen and outputs 25% more cracked fluid") + .addInfo("Steam - Outputs 50% more cracked fluid") + .addInfo("(Values compared to cracking in the Chemical Reactor)") + .addInfo("Place the appropriate circuit in the controller or an input bus") + .addInfo( + GTValues.TIER_COLORS[8] + GTValues.VN[8] + + EnumChatFormatting.GRAY + + "-tier glass required for " + + EnumChatFormatting.BLUE + + "Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Laser Hatches.") + .addSeparator() + .beginStructureBlock(13, 7, 9, true) + .addController("Front bottom") + .addStructureInfo("The glass tier limits the Energy Input tier") + .addInfo("Gets 10% EU/t reduction per coil tier, up to a maximum of 50%") + .addEnergyHatch("Hint block", 1) + .addMaintenanceHatch("Hint block", 1) + .addInputHatch("Hint block", 2, 3) + .addOutputHatch("Hint block", 2, 3) + .addInputHatch("Steam/Hydrogen ONLY, Hint block", 4) + .addInputBus("Optional, for programmed circuit automation. Hint block", 1) + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); + return tt; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMegaOilCracker(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.crackingRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Override + @Nonnull + public CheckRecipeResult process() { + this.setEuModifier(1.0F - Math.min(0.1F * (MTEMegaOilCracker.this.heatLevel.getTier() + 1), 0.5F)); + return super.process(); + } + }.setMaxParallel(ConfigHandler.megaMachinesMax); + } + + public HeatingCoilLevel getCoilLevel() { + return this.heatLevel; + } + + public void setCoilLevel(HeatingCoilLevel aCoilLevel) { + this.heatLevel = aCoilLevel; + } + + @Override + public void construct(ItemStack aStack, boolean aHintsOnly) { + this.buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 6, 6, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (this.mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); + return this + .survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 6, 6, 0, realBudget, source, actor, false, true); + } + // -------------- TEC TECH COMPAT ---------------- + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.glassTier = 0; + this.mInputOnSide = -1; + this.mOutputOnSide = -1; + this.mMiddleInputHatches.clear(); + + if (!this.checkPiece(STRUCTURE_PIECE_MAIN, 6, 6, 0) || this.mMaintenanceHatches.size() != 1) return false; + + if (this.glassTier < 8) { + for (int i = 0; i < this.mExoticEnergyHatches.size(); ++i) { + MTEHatch hatch = this.mExoticEnergyHatches.get(i); + if (hatch.getConnectionType() == MTEHatch.ConnectionType.LASER) { + return false; + } + if (this.glassTier < hatch.mTier) { + return false; + } + } + for (int i = 0; i < this.mEnergyHatches.size(); ++i) { + if (this.glassTier < this.mEnergyHatches.get(i).mTier) { + return false; + } + } + } + + return true; + } + + private boolean addLeftHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchInput) { + if (this.mInputOnSide == 1) { + return false; + } + this.mInputOnSide = 0; + this.mOutputOnSide = 1; + MTEHatchInput tHatch = (MTEHatchInput) aMetaTileEntity; + tHatch.updateTexture(aBaseCasingIndex); + tHatch.mRecipeMap = this.getRecipeMap(); + return this.mInputHatches.add(tHatch); + } + if (aMetaTileEntity instanceof MTEHatchOutput) { + if (this.mOutputOnSide == 1) { + return false; + } + this.mInputOnSide = 1; + this.mOutputOnSide = 0; + MTEHatchOutput tHatch = (MTEHatchOutput) aMetaTileEntity; + tHatch.updateTexture(aBaseCasingIndex); + return this.mOutputHatches.add(tHatch); + } + return false; + } + + private boolean addRightHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchInput) { + if (this.mInputOnSide == 0) { + return false; + } + this.mInputOnSide = 1; + this.mOutputOnSide = 0; + MTEHatchInput tHatch = (MTEHatchInput) aMetaTileEntity; + tHatch.updateTexture(aBaseCasingIndex); + tHatch.mRecipeMap = this.getRecipeMap(); + return this.mInputHatches.add(tHatch); + } + if (aMetaTileEntity instanceof MTEHatchOutput) { + if (this.mOutputOnSide == 0) { + return false; + } + this.mInputOnSide = 0; + this.mOutputOnSide = 1; + MTEHatchOutput tHatch = (MTEHatchOutput) aMetaTileEntity; + tHatch.updateTexture(aBaseCasingIndex); + return this.mOutputHatches.add(tHatch); + } + return false; + } + + private boolean addMiddleInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchInput tHatch) { + tHatch.updateTexture(aBaseCasingIndex); + tHatch.mRecipeMap = this.getRecipeMap(); + return this.mMiddleInputHatches.add(tHatch); + } + return false; + } + + @Override + public ArrayList getStoredFluids() { + final ArrayList rList = new ArrayList<>(); + Map inputsFromME = new HashMap<>(); + for (final MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) { + tHatch.mRecipeMap = getRecipeMap(); + if (tHatch instanceof MTEHatchInputME meHatch) { + for (FluidStack tFluid : meHatch.getStoredFluids()) { + if (tFluid != null && !getRecipeMap().getBackend() + .isValidCatalystFluid(tFluid)) { + inputsFromME.put(tFluid.getFluid(), tFluid); + } + } + } else if (tHatch instanceof MTEHatchMultiInput) { + for (final FluidStack tFluid : ((MTEHatchMultiInput) tHatch).getStoredFluid()) { + if (tFluid != null && !getRecipeMap().getBackend() + .isValidCatalystFluid(tFluid)) { + rList.add(tFluid); + } + } + } else { + if (tHatch.getFillableStack() != null) { + if (!getRecipeMap().getBackend() + .isValidCatalystFluid(tHatch.getFillableStack())) rList.add(tHatch.getFillableStack()); + } + } + } + for (final MTEHatchInput tHatch : filterValidMTEs(mMiddleInputHatches)) { + tHatch.mRecipeMap = getRecipeMap(); + if (tHatch instanceof MTEHatchInputME meHatch) { + for (FluidStack tFluid : meHatch.getStoredFluids()) { + if (tFluid != null && getRecipeMap().getBackend() + .isValidCatalystFluid(tFluid)) { + inputsFromME.put(tFluid.getFluid(), tFluid); + } + } + } else if (tHatch instanceof MTEHatchMultiInput) { + for (final FluidStack tFluid : ((MTEHatchMultiInput) tHatch).getStoredFluid()) { + if (tFluid != null && getRecipeMap().getBackend() + .isValidCatalystFluid(tFluid)) { + rList.add(tFluid); + } + } + } else { + if (tHatch.getFillableStack() != null) { + final FluidStack tStack = tHatch.getFillableStack(); + if (getRecipeMap().getBackend() + .isValidCatalystFluid(tStack)) { + rList.add(tStack); + } + } + } + } + if (!inputsFromME.isEmpty()) { + rList.addAll(inputsFromME.values()); + } + return rList; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + batchMode = !batchMode; + if (batchMode) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + protected void startRecipeProcessing() { + for (MTEHatchInput hatch : filterValidMTEs(mMiddleInputHatches)) { + if (hatch instanceof IRecipeProcessingAwareHatch aware) { + aware.startRecipeProcessing(); + } + } + super.startRecipeProcessing(); + } + + @Override + protected void endRecipeProcessing() { + super.endRecipeProcessing(); + for (MTEHatchInput hatch : filterValidMTEs(mMiddleInputHatches)) { + if (hatch instanceof IRecipeProcessingAwareHatch aware) { + setResultIfFailure(aware.endRecipeProcessing(this)); + } + } + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaVacuumFreezer.java b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaVacuumFreezer.java new file mode 100644 index 0000000000..e47782d980 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MTEMegaVacuumFreezer.java @@ -0,0 +1,533 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.multis.mega; + +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTWORKS; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.HatchElement.ExoticEnergy; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Optional; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.common.configs.ConfigHandler; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.blocks.BlockCasingsAbstract; + +public class MTEMegaVacuumFreezer extends MegaMultiBlockBase implements ISurvivalConstructable { + + public MTEMegaVacuumFreezer(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMegaVacuumFreezer(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMegaVacuumFreezer(this.mName); + } + + private int mCasingFrostProof = 0; + private int mTier = 1; + + private static class SubspaceCoolingFluid { + + public Materials material; + public int perfectOverclocks; + // Consumption per second of runtime + public long amount; + + public SubspaceCoolingFluid(Materials material, int perfectOverclocks, long amount) { + this.material = material; + this.perfectOverclocks = perfectOverclocks; + this.amount = amount; + } + + public FluidStack getStack() { + FluidStack stack = material.getFluid(amount); + // FUCK THIS FUCK THIS FUCK THIS + if (stack == null) { + return material.getMolten(amount); + } + return stack; + } + } + + private static final ArrayList SUBSPACE_COOLING_FLUIDS = new ArrayList<>( + Arrays.asList( + new SubspaceCoolingFluid(MaterialsUEVplus.SpaceTime, 1, 7500), + new SubspaceCoolingFluid(MaterialsUEVplus.Space, 2, 5000), + new SubspaceCoolingFluid(MaterialsUEVplus.Eternity, 3, 2500))); + + private SubspaceCoolingFluid currentCoolingFluid = null; + + private static final int CASING_INDEX = 17; + private static final int CASING_INDEX_T2 = ((BlockCasingsAbstract) GregTechAPI.sBlockCasings8).getTextureIndex(14); + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final String STRUCTURE_PIECE_MAIN_T2 = "main_t2"; + + private static final String[][] structure = transpose( + new String[][] { + { "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", + "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", + "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAA~AAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", + "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", + "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA" } }); + private static final String[][] structure_tier2 = new String[][] { + { "AAAAAAAAAAAAAAA", "ABBBBBBBBBBBBBA", "ABAAAAAAAAAAABA", "ABABBBBBBBBBABA", "ABABAAAAAAABABA", + "ABABABBBBBABABA", "ABABABAAABABABA", "ABABABA~ABABABA", "ABABABAAABABABA", "ABABABBBBBABABA", + "ABABAAAAAAABABA", "ABABBBBBBBBBABA", "ABAAAAAAAAAAABA", "ABBBBBBBBBBBBBA", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "B B", "B B", "B B", + "B B", "B B", "B B", "B B", "B B", + "B B", "B B", "B B", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "B B", + "B B", "B B", "B B", "B B", "B B", + "B B", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", + "B B", "B B", "B B", "B B", "B B", + "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", + "B B", "A A", "A A", "A A", "B B", + "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", + "B B", "A A", "A A", "A A", "B B", + "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", + "B B", "A A", "A A", "A A", "B B", + "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", + "B B", "B B", "B B", "B B", "B B", + "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "B B", + "B B", "B B", "B B", "B B", "B B", + "B B", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "A A", "A A", "A A", + "A A", "A A", "A A", "A A", "A A", + "A A", "A A", "A A", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "B B", "B B", "B B", "B B", + "B B", "B B", "B B", "B B", "B B", + "B B", "B B", "B B", "B B", "AAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAA", "ABBBBBBBBBBBBBA", "ABAAAAAAAAAAABA", "ABABBBBBBBBBABA", "ABABAAAAAAABABA", + "ABABABBBBBABABA", "ABABABAAABABABA", "ABABABAAABABABA", "ABABABAAABABABA", "ABABABBBBBABABA", + "ABABAAAAAAABABA", "ABABBBBBBBBBABA", "ABAAAAAAAAAAABA", "ABBBBBBBBBBBBBA", "AAAAAAAAAAAAAAA" } }; + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, structure) + .addShape(STRUCTURE_PIECE_MAIN_T2, structure_tier2) + .addElement( + 'A', + buildHatchAdder(MTEMegaVacuumFreezer.class) + .atLeast(Energy.or(ExoticEnergy), InputHatch, InputBus, OutputHatch, OutputBus, Maintenance) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(onElementPass(x -> x.mCasingFrostProof++, ofBlock(GregTechAPI.sBlockCasings2, 1)))) + // Infinity Cooled Casing + .addElement('B', ofBlock(GregTechAPI.sBlockCasings8, 14)) + .build(); + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Vacuum Freezer") + .addInfo("Controller Block for the Mega Vacuum Freezer") + .addInfo("Cools hot ingots and cells") + .addSeparator() + .addInfo("Upgrade to Tier 2 to unlock " + EnumChatFormatting.LIGHT_PURPLE + "Subspace Cooling.") + .addInfo( + "To activate " + EnumChatFormatting.LIGHT_PURPLE + + "Subspace Cooling " + + EnumChatFormatting.GRAY + + "supply a coolant while running recipes.") + .addInfo( + EnumChatFormatting.RED + "7500 L/s " + + EnumChatFormatting.DARK_PURPLE + + "Molten SpaceTime" + + EnumChatFormatting.GRAY + + ": " + + EnumChatFormatting.RED + + "1" + + EnumChatFormatting.GRAY + + " perfect overclock.") + .addInfo( + EnumChatFormatting.RED + "5000 L/s " + + EnumChatFormatting.DARK_PURPLE + + "Spatially Enlarged Fluid" + + EnumChatFormatting.GRAY + + ": " + + EnumChatFormatting.RED + + "2" + + EnumChatFormatting.GRAY + + " perfect overclocks.") + .addInfo( + EnumChatFormatting.RED + "2500 L/s " + + EnumChatFormatting.DARK_PURPLE + + "Molten Eternity" + + EnumChatFormatting.GRAY + + ": " + + EnumChatFormatting.RED + + "3" + + EnumChatFormatting.GRAY + + " perfect overclocks.") + .addSeparator() + .addInfo( + EnumChatFormatting.LIGHT_PURPLE + "Reinforcing the structure allows the injection of exotic coolants,") + .addInfo( + EnumChatFormatting.LIGHT_PURPLE + + "enabling the capture of heat energy in miniature tears in spacetime,") + .addInfo(EnumChatFormatting.LIGHT_PURPLE + "massively increasing the efficiency of the cooling process.") + .addSeparator() + .beginStructureBlock(15, 15, 15, true) + .addController("Front center") + .addEnergyHatch("Any Frost Proof Machine Casing", 1) + .addMaintenanceHatch("Any Frost Proof Machine Casing", 1) + .addInputHatch("Any Frost Proof Machine Casing", 1) + .addOutputHatch("Any Frost Proof Machine Casing", 1) + .addInputBus("Any Frost Proof Machine Casing", 1) + .addOutputBus("Any Frost Proof Machine Casing", 1) + .addStructureInfo( + EnumChatFormatting.BLUE + "Base Multi (Tier " + + EnumChatFormatting.DARK_PURPLE + + 1 + + EnumChatFormatting.BLUE + + "):") + .addCasingInfoMinColored( + "Frost Proof Machine Casing", + EnumChatFormatting.GRAY, + 800, + EnumChatFormatting.GOLD, + false) + .addStructureInfo( + EnumChatFormatting.BLUE + "Tier " + + EnumChatFormatting.DARK_PURPLE + + 2 + + EnumChatFormatting.BLUE + + " (Upgrades from Tier " + + EnumChatFormatting.DARK_PURPLE + + 1 + + EnumChatFormatting.BLUE + + "):") + .addCasingInfoMinColored( + "Frost Proof Machine Casing", + EnumChatFormatting.GRAY, + 700, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Infinity Cooled Casing", + EnumChatFormatting.GRAY, + 384, + EnumChatFormatting.GOLD, + false) + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack aStack, boolean aHintsOnly) { + if (aStack.stackSize == 1) { + this.buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 7, 7, 0); + } else { + this.buildPiece(STRUCTURE_PIECE_MAIN_T2, aStack, aHintsOnly, 7, 7, 0); + } + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (this.mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); + if (stackSize.stackSize == 1) { + return this + .survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 7, 7, 0, realBudget, source, actor, false, true); + } else { + return this.survivialBuildPiece( + STRUCTURE_PIECE_MAIN_T2, + stackSize, + 7, + 7, + 0, + realBudget, + source, + actor, + false, + true); + } + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.vacuumFreezerRecipes; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (!aNBT.hasKey(BATCH_MODE_NBT_KEY)) { + this.batchMode = aNBT.getBoolean("mUseMultiparallelMode"); + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + this.batchMode = !this.batchMode; + if (this.batchMode) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } + return false; + } + + public SubspaceCoolingFluid findSubspaceCoolingFluid() { + // Loop over all hatches and find the first match with a valid fluid + for (MTEHatchInput hatch : mInputHatches) { + Optional fluid = SUBSPACE_COOLING_FLUIDS.stream() + .filter(candidate -> drain(hatch, candidate.getStack(), false)) + .findFirst(); + if (fluid.isPresent()) return fluid.get(); + } + return null; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + // Check if the freezer is T2 + if (mTier == 1) return super.createOverclockCalculator(recipe); + + // First try to detect the current fluid used for subspace cooling. + currentCoolingFluid = findSubspaceCoolingFluid(); + + return super.createOverclockCalculator(recipe) + .setMachineHeat(currentCoolingFluid == null ? 0 : currentCoolingFluid.perfectOverclocks * 1800) + .setRecipeHeat(0) + .setHeatOC(true) + .setHeatDiscount(false); + } + }.setMaxParallel(ConfigHandler.megaMachinesMax); + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.runMachine(aBaseMetaTileEntity, aTick); + // Every second while running, consume subspace coolant fluid + if (mMaxProgresstime > 0 && aTick % 20 == 0) { + // Subspace cooling only allowed for T2 freezer + if (mTier == 2) { + // Try to drain the coolant fluid if it exists. If failed, stop the machine with an error + if (this.currentCoolingFluid != null) { + FluidStack fluid = this.currentCoolingFluid.getStack(); + for (MTEHatchInput hatch : mInputHatches) { + if (drain(hatch, fluid, false)) { + drain(hatch, fluid, true); + return; + } + } + // If we exited this loop without returning from the function, no matching fluid was found, so + // stop the machine - we ran out of coolant + stopMachine(ShutDownReasonRegistry.outOfFluid(fluid)); + } + } + } + } + + // -------------- TEC TECH COMPAT ---------------- + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.mCasingFrostProof = 0; + this.mTier = 1; + // If check for T1 fails, also do a check for T2 structure + if (!this.checkPiece(STRUCTURE_PIECE_MAIN, 7, 7, 0)) { + // Reset mCasing in between checks, so they don't count again + this.mCasingFrostProof = 0; + if (!this.checkPiece(STRUCTURE_PIECE_MAIN_T2, 7, 7, 0)) { + return false; + } + // Structure is Tier 2 + this.mTier = 2; + } + return this.mMaintenanceHatches.size() == 1 && this.mCasingFrostProof >= 700; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + ITexture[] rTexture; + if (side == facing) { + if (aActive) { + rTexture = new ITexture[] { casingTexturePages[0][17], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { casingTexturePages[0][17], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_VACUUM_FREEZER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { casingTexturePages[0][17] }; + } + return rTexture; + } + + @Override + public String[] getInfoData() { + ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); + info.add("Tier: " + mTier); + if (mTier == 2) { + if (currentCoolingFluid != null) { + info.add( + "Subspace cooling: " + EnumChatFormatting.GREEN + + "Active (" + + currentCoolingFluid.getStack() + .getLocalizedName() + + ")"); + } else { + info.add("Subspace cooling: " + EnumChatFormatting.RED + "Inactive"); + } + } + return info.toArray(new String[] {}); + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } +} diff --git a/src/main/java/bartworks/common/tileentities/multis/mega/MegaMultiBlockBase.java b/src/main/java/bartworks/common/tileentities/multis/mega/MegaMultiBlockBase.java new file mode 100644 index 0000000000..bac811ede8 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/multis/mega/MegaMultiBlockBase.java @@ -0,0 +1,212 @@ +package bartworks.common.tileentities.multis.mega; + +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.Arrays; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IStructureElement; + +import bartworks.util.BWTooltipReference; +import bartworks.util.BWUtil; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.util.GTUtility; + +public abstract class MegaMultiBlockBase> extends MTEExtendedPowerMultiBlockBase { + + protected MegaMultiBlockBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MegaMultiBlockBase(String aName) { + super(aName); + } + + protected String[] getExtendedInfoData() { + return new String[0]; + } + + protected long[] getCurrentInfoData() { + long storedEnergy = 0, maxEnergy = 0; + for (MTEHatch hatch : this.getExoticAndNormalEnergyHatchList()) { + storedEnergy += hatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += hatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + return new long[] { storedEnergy, maxEnergy }; + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = 0; + + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); + } + + long[] ttHatches = this.getCurrentInfoData(); + long storedEnergy = ttHatches[0]; + long maxEnergy = ttHatches[1]; + + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + long nominalV = this.getMaxInputEu(); + String tName = BWUtil.getTierNameFromVoltage(nominalV); + if ("MAX+".equals(tName)) tName = EnumChatFormatting.OBFUSCATED + "MAX+"; + + String[] extendedInfo = this.getExtendedInfoData(); + + String[] baseInfo = { + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(this.mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(this.mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(-this.lEUt) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(this.getMaxInputVoltage()) + + EnumChatFormatting.RESET + + " EU/t(*" + + GTUtility.formatNumbers(this.getMaxInputAmps()) + + "A) = " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(nominalV) + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.machines.tier") + ": " + + EnumChatFormatting.YELLOW + + tName + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (this.getIdealStatus() - this.getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + this.mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %" }; + + String[] combinedInfo = Arrays.copyOf(baseInfo, baseInfo.length + extendedInfo.length + 1); + + System.arraycopy(extendedInfo, 0, combinedInfo, baseInfo.length, extendedInfo.length); + + combinedInfo[combinedInfo.length - 1] = BWTooltipReference.BW; + + return combinedInfo; + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return false; + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(this.getMaxInputEu()); + logic.setAvailableAmperage(1); + } + + protected static class StructureElementAirNoHint implements IStructureElement { + + private static final StructureElementAirNoHint INSTANCE = new StructureElementAirNoHint<>(); + + @SuppressWarnings("unchecked") + public static IStructureElement getInstance() { + return (IStructureElement) INSTANCE; + } + + private StructureElementAirNoHint() {} + + @Override + public boolean check(T o, World world, int x, int y, int z) { + return world.isAirBlock(x, y, z); + } + + @Override + public boolean spawnHint(T o, World world, int x, int y, int z, ItemStack trigger) { + if (world.blockExists(x, y, z) && !world.isAirBlock(x, y, z)) + // hint if this is obstructed. in case *someone* ever finish the transparent rendering + StructureLibAPI + .hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), StructureLibAPI.HINT_BLOCK_META_AIR); + return true; + } + + @Override + public boolean placeBlock(T o, World world, int x, int y, int z, ItemStack trigger) { + world.setBlockToAir(x, y, z); + return true; + } + + @Override + public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + return BlocksToPlace.createEmpty(); + } + + @Override + public PlaceResult survivalPlaceBlock(T o, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + if (this.check(o, world, x, y, z)) return PlaceResult.SKIP; + if (!StructureLibAPI.isBlockTriviallyReplaceable(world, x, y, z, env.getActor())) return PlaceResult.REJECT; + world.setBlock(x, y, z, Blocks.air, 0, 2); + return PlaceResult.ACCEPT; + } + } +} diff --git a/src/main/java/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java b/src/main/java/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java new file mode 100644 index 0000000000..8e752711ea --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java @@ -0,0 +1,494 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.tiered; + +import static gregtech.api.enums.GTValues.ticksBetweenSounds; + +import java.util.Collections; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; +import com.gtnewhorizons.modularui.api.drawable.shapes.Rectangle; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; +import com.gtnewhorizons.modularui.common.widget.ProgressBar.Direction; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import bartworks.API.modularUI.BWUITextures; +import bartworks.API.recipe.BartWorksRecipeMaps; +import bartworks.MainMod; +import bartworks.util.BWColorUtil; +import bartworks.util.BWTooltipReference; +import bartworks.util.MathUtils; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.RecipeMapWorkable; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.common.items.IDMetaTool01; +import gregtech.common.items.MetaGeneratedTool01; + +public class GT_MetaTileEntity_RadioHatch extends MTEHatch implements RecipeMapWorkable, IAddGregtechLogo { + + private final int cap; + public int sievert; + private long timer = 1; + private long decayTime = 1; + private short[] colorForGUI = { 0x02, 0x02, 0x02 }; + private byte mass; + private String material; + private byte coverage; + private ItemStack lastUsedItem = null; + private boolean lastFail = false; + private GTRecipe lastRecipe = null; + + public GT_MetaTileEntity_RadioHatch(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, + new String[] { StatCollector.translateToLocal("tooltip.tile.radhatch.0.name"), + StatCollector.translateToLocal("tooltip.tile.tiereddsc.3.name") + " " + + (aTier - 2) + + " " + + (aTier - 2 >= 2 ? StatCollector.translateToLocal("tooltip.bw.kg.1.name") + : StatCollector.translateToLocal("tooltip.bw.kg.0.name")), + StatCollector.translateToLocal("tooltip.tile.radhatch.1.name"), + BWTooltipReference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get() }); + this.cap = aTier - 2; + } + + public GT_MetaTileEntity_RadioHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures); + this.cap = aTier - 2; + } + + public int getSievert() { + return this.sievert - MathUtils.ceilInt(this.sievert / 100f * this.coverage); + } + + public short[] getColorForGUI() { + if (this.colorForGUI != null) return this.colorForGUI; + return this.colorForGUI = new short[] { 0xFA, 0xFA, 0xFF }; + } + + public byte getMass() { + return this.mass; + } + + public byte getCoverage() { + return this.coverage; + } + + public void setCoverage(short coverage) { + byte nu; + if (coverage > 100) nu = 100; + else if (coverage < 0) nu = 0; + else nu = (byte) coverage; + this.coverage = nu; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(Textures.BlockIcons.OVERLAY_PIPE_IN) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(Textures.BlockIcons.OVERLAY_PIPE_IN) }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new GT_MetaTileEntity_RadioHatch(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + public void updateSlots() { + if (this.mInventory[0] != null && this.mInventory[0].stackSize <= 0) this.mInventory[0] = null; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + BaseMetaTileEntity myMetaTileEntity = (BaseMetaTileEntity) this.getBaseMetaTileEntity(); + if (myMetaTileEntity.isServerSide()) { + + if (this.mass > 0) { + ++this.timer; + } + + if (this.mass > 0 && (this.decayTime == 0 || this.decayTime > 0 && this.timer % this.decayTime == 0)) { + this.mass--; + if (this.mass == 0) { + this.material = StatCollector.translateToLocal("tooltip.bw.empty.name"); + this.sievert = 0; + } + this.timer = 1; + } + + if (myMetaTileEntity.mTickTimer > myMetaTileEntity.mLastSoundTick + ticksBetweenSounds + && this.sievert > 0) { + this.sendLoopStart((byte) 1); + myMetaTileEntity.mLastSoundTick = myMetaTileEntity.mTickTimer; + } + + if (this.mass == 0) { + ItemStack lStack = this.mInventory[0]; + + if (lStack == null) { + this.colorForGUI = new short[] { 0x37, 0x37, 0x37 }; + return; + } + ItemData itemData = GTOreDictUnificator.getAssociation(lStack); + if (itemData != null) { + Materials mat = itemData.mMaterial.mMaterial; + this.colorForGUI = new short[] { mat.getRGBA()[0], mat.getRGBA()[1], mat.getRGBA()[2] }; + } else { + this.colorForGUI = new short[] { 0x37, 0x37, 0x37 }; + } + + if (this.lastFail && GTUtility.areStacksEqual(this.lastUsedItem, lStack, true)) { + return; + } + + if (!this.lastFail && this.lastUsedItem != null && this.lastRecipe != null) { + if (GTUtility.areStacksEqual(this.lastUsedItem, lStack, true)) { + this.mass = (byte) this.lastRecipe.mDuration; + this.decayTime = this.lastRecipe.mSpecialValue; + this.sievert = this.lastRecipe.mEUt; + this.material = this.lastUsedItem.getDisplayName(); + lStack.stackSize--; + this.updateSlots(); + } else { + this.lastRecipe = null; + } + } + + if (this.lastRecipe == null || this.lastFail) { + this.lastRecipe = BartWorksRecipeMaps.radioHatchRecipes.findRecipe( + this.getBaseMetaTileEntity(), + false, + Integer.MAX_VALUE - 7, + null, + this.mInventory[0]); + if (this.lastRecipe == null) { + this.lastFail = true; + this.lastUsedItem = this.mInventory[0] == null ? null : this.mInventory[0].copy(); + } else { + if (this.lastRecipe.mDuration > this.cap) { + this.lastFail = true; + this.lastUsedItem = this.mInventory[0].copy(); + return; + } + this.lastFail = false; + this.lastUsedItem = this.mInventory[0].copy(); + this.mass = (byte) this.lastRecipe.mDuration; + this.decayTime = this.lastRecipe.mSpecialValue; + this.sievert = this.lastRecipe.mEUt; + this.material = lStack.getDisplayName(); + lStack.stackSize--; + this.updateSlots(); + } + } + } + } + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + if (this.sievert != 0) return new String[] { + StatCollector.translateToLocal("tooltip.tile.radhatch.2.name") + " " + + StatCollector.translateToLocal(this.material), + StatCollector.translateToLocal("tooltip.tile.radhatch.3.name") + " " + this.sievert, + StatCollector.translateToLocal("tooltip.tile.radhatch.4.name") + " " + this.mass, + StatCollector.translateToLocal("tooltip.tile.radhatch.5.name") + " " + + (this.decayTime - this.timer % (this.decayTime * 60)) + + StatCollector.translateToLocal("tooltip.tile.radhatch.6.name") + + "/" + + (this.decayTime - this.timer % this.decayTime) / 20 + + StatCollector.translateToLocal("tooltip.tile.radhatch.7.name") + + "/" + + (this.decayTime - this.timer % this.decayTime) / 20 / 60 + + StatCollector.translateToLocal("tooltip.tile.radhatch.8.name") + + "/" + + (this.decayTime - this.timer % this.decayTime) / 20 / 60 / 60 + + StatCollector.translateToLocal("tooltip.tile.radhatch.9.name") }; + return new String[] { + StatCollector.translateToLocal("tooltip.tile.radhatch.2.name") + " " + + StatCollector.translateToLocal("tooltip.bw.empty.name"), + StatCollector.translateToLocal("tooltip.tile.radhatch.3.name") + " " + "0", + StatCollector.translateToLocal("tooltip.tile.radhatch.4.name") + " " + "0" }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == this.getBaseMetaTileEntity() + .getFrontFacing() && BartWorksRecipeMaps.radioHatchRecipes.containsInput(aStack); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setByte("mMass", this.mass); + aNBT.setByte("mSv", (byte) (this.sievert - 100)); + aNBT.setByte("mCoverage", this.coverage); + aNBT.setInteger("mTextColor", BWColorUtil.getColorFromRGBArray(this.getColorForGUI())); + if (this.material != null && !this.material.isEmpty()) aNBT.setString("mMaterial", this.material); + aNBT.setLong("timer", this.timer); + aNBT.setLong("decay", this.decayTime); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.timer = aNBT.getLong("timer"); + this.mass = aNBT.getByte("mMass"); + this.sievert = aNBT.getByte("mSv") + 100; + this.coverage = aNBT.getByte("mCoverage"); + this.colorForGUI = BWColorUtil.splitColorToRBGArray(aNBT.getInteger("mTextColor")); + this.material = aNBT.getString("mMaterial"); + this.decayTime = aNBT.getLong("decay"); + super.loadNBTData(aNBT); + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + ResourceLocation rl = new ResourceLocation(MainMod.MOD_ID, "hatch.RadOn"); + if (aIndex == 1) { + GTUtility.doSoundAtClient(rl, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public RecipeMap getRecipeMap() { + // Only for visual + return BartWorksRecipeMaps.radioHatchRecipes; + } + + private static final int RADIATION_SHUTTER_WINDOW_ID = 999; + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + buildContext.addSyncedWindow(RADIATION_SHUTTER_WINDOW_ID, this::createShutterWindow); + + this.getBaseMetaTileEntity() + .add1by1Slot(builder); + builder.widget( + new DrawableWidget().setBackground(BWUITextures.PICTURE_SIEVERT_CONTAINER) + .setPos(61, 9) + .setSize(56, 24)) + .widget( + new ProgressBar().setProgress(() -> this.getSievert() / 148f) + .setDirection(Direction.RIGHT) + .setTexture(BWUITextures.PROGRESSBAR_SIEVERT, 24) + .setPos(65, 13) + .setSize(48, 16)) + .widget( + new DrawableWidget().setBackground(BWUITextures.PICTURE_DECAY_TIME_INSIDE) + .setPos(124, 18) + .setSize(16, 48)) + .widget(new DrawableWidget() { + + @Override + public void draw(float partialTicks) { + if (GT_MetaTileEntity_RadioHatch.this.decayTime > 0) { + int height = MathUtils.ceilInt( + 48 * ((GT_MetaTileEntity_RadioHatch.this.decayTime + - GT_MetaTileEntity_RadioHatch.this.timer % GT_MetaTileEntity_RadioHatch.this.decayTime) + / (float) GT_MetaTileEntity_RadioHatch.this.decayTime)); + new Rectangle() + .setColor( + Color.argb( + GT_MetaTileEntity_RadioHatch.this.colorForGUI[0], + GT_MetaTileEntity_RadioHatch.this.colorForGUI[1], + GT_MetaTileEntity_RadioHatch.this.colorForGUI[2], + 255)) + .draw(new Pos2d(0, 48 - height), new Size(16, height), partialTicks); + } + } + }.dynamicTooltip( + () -> Collections.singletonList( + StatCollector.translateToLocalFormatted( + "tooltip.tile.radhatch.10.name", + this.timer <= 1 ? 0 : (this.decayTime - this.timer) / 20, + this.timer <= 1 ? 0 : this.decayTime / 20))) + .setPos(124, 18) + .setSize(16, 48) + .attachSyncer( + new FakeSyncWidget.LongSyncer(() -> this.decayTime, val -> this.decayTime = val), + builder, + (widget, val) -> widget.notifyTooltipChange()) + .attachSyncer( + new FakeSyncWidget.LongSyncer(() -> this.timer, val -> this.timer = val), + builder, + (widget, val) -> widget.notifyTooltipChange())) + .widget(new FakeSyncWidget.ShortSyncer(() -> this.colorForGUI[0], val -> this.colorForGUI[0] = val)) + .widget(new FakeSyncWidget.ShortSyncer(() -> this.colorForGUI[1], val -> this.colorForGUI[1] = val)) + .widget(new FakeSyncWidget.ShortSyncer(() -> this.colorForGUI[2], val -> this.colorForGUI[2] = val)) + .widget( + new DrawableWidget().setBackground(BWUITextures.PICTURE_DECAY_TIME_CONTAINER) + .setPos(120, 14) + .setSize(24, 56)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocalFormatted("BW.NEI.display.radhatch.1", this.mass)) + .setTextAlignment(Alignment.Center) + .setPos(65, 62)) + .widget(new FakeSyncWidget.ByteSyncer(() -> this.mass, val -> this.mass = val)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocalFormatted("BW.NEI.display.radhatch.0", this.getSievert())) + .setTextAlignment(Alignment.Center) + .setPos(60, 72)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> this.sievert, val -> this.sievert = val)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getContext() + .openSyncedWindow(RADIATION_SHUTTER_WINDOW_ID); + } + }) + .addTooltip("Radiation Shutter") + .setBackground(GTUITextures.BUTTON_STANDARD) + .setPos(153, 5) + .setSize(18, 18)) + .widget( + new ItemDrawable( + MetaGeneratedTool01.INSTANCE.getToolWithStats(IDMetaTool01.SCREWDRIVER.ID, 1, null, null, null)) + .asWidget() + .setPos(154, 6)); + } + + private ModularWindow createShutterWindow(EntityPlayer player) { + ModularWindow.Builder builder = ModularWindow.builder(176, 107); + builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); + builder.setGuiTint(this.getGUIColorization()); + + builder.widget( + new TextWidget("Radiation Shutter Control").setDefaultColor(this.COLOR_TITLE.get()) + .setPos(10, 9)) + .widget( + new DrawableWidget().setDrawable(BWUITextures.PICTURE_RADIATION_SHUTTER_FRAME) + .setPos(14, 27) + .setSize(55, 54)) + .widget( + new DrawableWidget() + .setDrawable(() -> this.coverage < 100 ? BWUITextures.PICTURE_RADIATION_SHUTTER_INSIDE : null) + .setPos(16, 29) + .setSize(51, 50) + .attachSyncer( + new FakeSyncWidget.ByteSyncer(this::getCoverage, this::setCoverage), + builder, + (widget, val) -> widget.setPos(16, 29 + this.coverage / 2) + .setSize(51, 50 - this.coverage / 2))) + .widget( + new NumericWidget().setSetter(val -> this.coverage = (byte) val) + .setGetter(() -> this.coverage) + .setBounds(0, 100) + .setScrollValues(1, 5, 50) + .setTextColor(Color.WHITE.dark(1)) + .setTextAlignment(Alignment.CenterLeft) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .setPos(86, 27) + .setSize(30, 12)) + .widget( + ButtonWidget.closeWindowButton(true) + .setPos(176 - 15, 3)); + + return builder.build(); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(BWUITextures.PICTURE_BW_LOGO_47X21) + .setSize(47, 21) + .setPos(10, 53)); + } + + @Override + public GUITextureSet getGUITextureSet() { + return new GUITextureSet().setMainBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT) + .setGregTechLogo(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT); + } +} diff --git a/src/main/java/bartworks/common/tileentities/tiered/MTEAcidGenerator.java b/src/main/java/bartworks/common/tileentities/tiered/MTEAcidGenerator.java new file mode 100644 index 0000000000..2713d3dee2 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/tiered/MTEAcidGenerator.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.tiered; + +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import bartworks.API.recipe.BartWorksRecipeMaps; +import bartworks.util.BWTooltipReference; +import gregtech.api.enums.GTValues; +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.MTEBasicGenerator; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; + +public class MTEAcidGenerator extends MTEBasicGenerator { + + public MTEAcidGenerator(int aID, String aName, String aNameRegional, int aTier, ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, new String[] {}, aTextures); + } + + public MTEAcidGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public int getPollution() { + return 0; + } + + @Override + public RecipeMap getRecipeMap() { + return BartWorksRecipeMaps.acidGenFuels; + } + + @Override + public int getEfficiency() { + return 100 - 3 * this.mTier; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEAcidGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL), + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL), + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_GLOW")) + .glow() + .build() }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL), + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL), + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_ACTIVE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_ACTIVE_GLOW")) + .glow() + .build() }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public String[] getDescription() { + return new String[] { StatCollector.translateToLocal("tooltip.tile.acidgen.0.name"), + StatCollector.translateToLocal("tooltip.tile.acidgen.1.name"), + StatCollector.translateToLocal("tooltip.tile.tiereddsc.0.name") + " " + + EnumChatFormatting.YELLOW + + GTValues.V[this.mTier], + StatCollector.translateToLocal("tooltip.rotor.2.name") + " " + + EnumChatFormatting.YELLOW + + this.getEfficiency(), + StatCollector.translateToLocal("tooltip.tile.tiereddsc.2.name") + " " + + EnumChatFormatting.YELLOW + + this.maxAmperesOut(), + BWTooltipReference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get() }; + } +} diff --git a/src/main/java/bartworks/common/tileentities/tiered/MTEBioLab.java b/src/main/java/bartworks/common/tileentities/tiered/MTEBioLab.java new file mode 100644 index 0000000000..992c7188fa --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/tiered/MTEBioLab.java @@ -0,0 +1,405 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.tiered; + +import static gregtech.api.enums.Mods.Gendustry; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.API.recipe.BartWorksRecipeMaps; +import bartworks.common.items.ItemLabModule; +import bartworks.common.items.ItemLabParts; +import bartworks.common.loaders.BioCultureLoader; +import bartworks.common.loaders.BioItemList; +import bartworks.common.loaders.FluidLoader; +import bartworks.util.BWTooltipReference; +import bartworks.util.BWUtil; +import bartworks.util.BioCulture; +import bartworks.util.BioDNA; +import bartworks.util.BioData; +import bartworks.util.BioPlasmid; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +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.MTEBasicMachine; +import gregtech.api.objects.XSTR; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.items.behaviors.BehaviourDataOrb; + +public class MTEBioLab extends MTEBasicMachine { + + private static final int DNA_EXTRACTION_MODULE = 0; + private static final int PCR_THERMOCYCLE_MODULE = 1; + private static final int PLASMID_SYNTHESIS_MODULE = 2; + private static final int TRANSFORMATION_MODULE = 3; + private static final int CLONAL_CELLULAR_SYNTHESIS_MODULE = 4; + private static final int INCUBATION_MODULE = 5; + + public MTEBioLab(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, + (String) null, + 6, + 2, + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/fluid_extractor/OVERLAY_SIDE_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon("basicmachines/fluid_extractor/OVERLAY_SIDE_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/fluid_extractor/OVERLAY_SIDE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/fluid_extractor/OVERLAY_SIDE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/microwave/OVERLAY_FRONT_ACTIVE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/microwave/OVERLAY_FRONT_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/microwave/OVERLAY_FRONT")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/microwave/OVERLAY_FRONT_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_ACTIVE_GLOW")) + .glow() + .build() /* this is topactive */), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_GLOW")) + .glow() + .build() /* this is top */), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/polarizer/OVERLAY_BOTTOM_ACTIVE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/polarizer/OVERLAY_BOTTOM_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/polarizer/OVERLAY_BOTTOM")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/polarizer/OVERLAY_BOTTOM_GLOW")) + .glow() + .build())); + } + + public MTEBioLab(String aName, int aTier, int aAmperage, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aAmperage, aDescription, aTextures, 6, 2); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEBioLab(this.mName, this.mTier, this.mAmperage, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return BartWorksRecipeMaps.bioLabRecipes; + } + + @Override + public int getCapacity() { + return this.mTier * 1000; + } + + @Override + public int checkRecipe(boolean skipOC) { + + int rTier = 3; + FluidStack dnaFluid = Gendustry.isModLoaded() ? FluidRegistry.getFluidStack("liquiddna", 1000) + : Materials.Biomass.getFluid(1000L); + + if (this.getSpecialSlot() != null && this.getSpecialSlot() + .getItem() instanceof ItemLabModule) { + int damage = this.getSpecialSlot() + .getItemDamage(); + switch (damage) { + case DNA_EXTRACTION_MODULE: + if (GTUtility.isStackValid(this.mInventory[this.getInputSlot()]) + && this.mInventory[this.getInputSlot()].getItem() instanceof ItemLabParts + && this.mInventory[this.getInputSlot()].getItemDamage() == 0 + && this.mInventory[this.getInputSlot()].getTagCompound() != null + && // checks if it is a Culture + GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 1]) + && this.mInventory[this.getInputSlot() + 1].getItem() instanceof ItemLabParts + && this.mInventory[this.getInputSlot() + 1].getItemDamage() == 1 + && this.mInventory[this.getInputSlot() + 1].getTagCompound() == null + && GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 2]) + && this.mInventory[this.getInputSlot() + 2].getItem() instanceof ItemLabParts + && this.mInventory[this.getInputSlot() + 2].getItemDamage() == 3 + && GTUtility + .areStacksEqual(this.mInventory[this.getInputSlot() + 3], Materials.Ethanol.getCells(1)) + && this.mFluid != null + && this.mFluid.isFluidEqual(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) + && this.mFluid.amount >= 1000) { + + NBTTagCompound DNABioDataTag = this.mInventory[this.getInputSlot()].getTagCompound() + .getCompoundTag("DNA"); + if (DNABioDataTag == null) return super.checkRecipe(skipOC); + BioData cultureDNABioData = BioData.getBioDataFromName( + this.mInventory[this.getInputSlot()].getTagCompound() + .getCompoundTag("DNA") + .getString("Name")); + if (cultureDNABioData == null) return super.checkRecipe(skipOC); + + if (this.mTier < rTier + cultureDNABioData.getTier()) + return MTEBasicMachine.FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + + for (int i = 0; i < 4; i++) { + if (this.mInventory[this.getInputSlot() + i] != null) + this.mInventory[this.getInputSlot() + i].stackSize--; + } + + this.mFluid.amount -= 1000; + + if (cultureDNABioData.getChance() > new XSTR().nextInt(10000)) { + this.mOutputItems[0] = BioItemList + .getDNASampleFlask(BioDNA.convertDataToDNA(cultureDNABioData)); + } + this.mOutputItems[1] = GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1L); + this.calculateOverclockedNess( + BWUtil.getMachineVoltageFromTier(rTier + cultureDNABioData.getTier()), + 500); + + return MTEBasicMachine.FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + break; + case PCR_THERMOCYCLE_MODULE: { + if (GTUtility.isStackValid(this.mInventory[this.getInputSlot()]) + && this.mInventory[this.getInputSlot()].getItem() instanceof ItemLabParts + && this.mInventory[this.getInputSlot()].getItemDamage() == 1 + && this.mInventory[this.getInputSlot()].getTagCompound() != null + && // checks if it is a Culture + GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 3]) + && GTUtility + .areStacksEqual(this.mInventory[this.getInputSlot() + 3], ItemList.Tool_DataOrb.get(1L)) + && GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 1]) + && GTUtility + .areStacksEqual(this.mInventory[this.getInputSlot() + 1], FluidLoader.BioLabFluidCells[0]) + && GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 2]) + && GTUtility + .areStacksEqual(this.mInventory[this.getInputSlot() + 2], FluidLoader.BioLabFluidCells[3]) + && this.mFluid != null + && this.mFluid.isFluidEqual(dnaFluid) + && this.mFluid.amount >= 1000) { + NBTTagCompound DNABioDataTag = this.mInventory[this.getInputSlot()].getTagCompound(); + if (DNABioDataTag == null) return super.checkRecipe(skipOC); + BioData cultureDNABioData = BioData.getBioDataFromName(DNABioDataTag.getString("Name")); + if (cultureDNABioData == null) return super.checkRecipe(skipOC); + + if (this.mTier < 1 + rTier + cultureDNABioData.getTier()) + return MTEBasicMachine.FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + + for (int i = 0; i < 4; i++) { + if (this.mInventory[this.getInputSlot() + i] != null) + this.mInventory[this.getInputSlot() + i].stackSize--; + } + + this.mFluid.amount -= 1000; + + ItemStack Outp = ItemList.Tool_DataOrb.get(1L); + BehaviourDataOrb.setDataTitle(Outp, "DNA Sample"); + BehaviourDataOrb.setDataName(Outp, cultureDNABioData.getName()); + + if (cultureDNABioData.getChance() > new XSTR().nextInt(10000)) { + this.mOutputItems[0] = Outp; + } else this.mOutputItems[0] = ItemList.Tool_DataOrb.get(1L); + this.mOutputItems[1] = ItemList.Cell_Empty.get(2L); + + this.calculateOverclockedNess( + BWUtil.getMachineVoltageFromTier(1 + rTier + cultureDNABioData.getTier()), + 500); + + return MTEBasicMachine.FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + } + break; + case PLASMID_SYNTHESIS_MODULE: { + ItemStack inp2 = ItemList.Tool_DataOrb.get(1L); + BehaviourDataOrb.setDataTitle(inp2, "DNA Sample"); + BehaviourDataOrb.setDataName(inp2, BioCultureLoader.BIO_DATA_BETA_LACMATASE.getName()); + if (GTUtility.isStackValid(this.mInventory[this.getInputSlot()]) + && GTUtility + .areStacksEqual(FluidLoader.BioLabFluidCells[1], this.mInventory[this.getInputSlot()]) + && // checks + // if + // it + // is + // a + // Culture + GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 1]) + && GTUtility + .areStacksEqual(this.mInventory[this.getInputSlot() + 1], BioItemList.getPlasmidCell(null)) + && GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 2]) + && GTUtility.areStacksEqual( + this.mInventory[this.getInputSlot() + 2], + ItemList.Tool_DataOrb.get(1L), + true) + && "DNA Sample".equals(BehaviourDataOrb.getDataTitle(this.mInventory[this.getInputSlot() + 2])) + && !BehaviourDataOrb.getDataName(this.mInventory[this.getInputSlot() + 2]) + .isEmpty() + && GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 3]) + && GTUtility.areStacksEqual(this.mInventory[this.getInputSlot() + 3], inp2) + && this.mFluid != null + && this.mFluid.isFluidEqual(dnaFluid) + && this.mFluid.amount >= 1000) { + BioData cultureDNABioData = BioData + .getBioDataFromName(BehaviourDataOrb.getDataName(this.mInventory[this.getInputSlot() + 2])); + if (cultureDNABioData == null) return super.checkRecipe(skipOC); + if (this.mTier < 1 + rTier + cultureDNABioData.getTier()) + return MTEBasicMachine.FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + for (int i = 0; i < 2; i++) { + if (this.mInventory[this.getInputSlot() + i] != null) + this.mInventory[this.getInputSlot() + i].stackSize--; + } + this.mFluid.amount -= 1000; + if (cultureDNABioData.getChance() > new XSTR().nextInt(10000)) { + this.mOutputItems[0] = BioItemList + .getPlasmidCell(BioPlasmid.convertDataToPlasmid(cultureDNABioData)); + } + this.mOutputItems[1] = ItemList.Cell_Empty.get(1L); + this.calculateOverclockedNess( + BWUtil.getMachineVoltageFromTier(1 + rTier + cultureDNABioData.getTier()), + 500); + return MTEBasicMachine.FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + } + break; + case TRANSFORMATION_MODULE: { + if (GTUtility.isStackValid(this.mInventory[this.getInputSlot()]) + && GTUtility + .areStacksEqual(this.mInventory[this.getInputSlot()], BioItemList.getPetriDish(null), true) + && this.mInventory[this.getInputSlot()].getTagCompound() != null + && GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 1]) + && GTUtility.areStacksEqual( + this.mInventory[this.getInputSlot() + 1], + BioItemList.getPlasmidCell(null), + true) + && this.mInventory[this.getInputSlot() + 1].getTagCompound() != null + && GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 2]) + && GTUtility + .areStacksEqual(this.mInventory[this.getInputSlot() + 2], FluidLoader.BioLabFluidCells[2]) + && this.mFluid != null + && this.mFluid.isFluidEqual(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) + && this.mFluid.amount >= 1000) { + BioData cultureDNABioData = BioData + .getBioDataFromNBTTag(this.mInventory[this.getInputSlot() + 1].getTagCompound()); + BioCulture bioCulture = BioCulture + .getBioCultureFromNBTTag(this.mInventory[this.getInputSlot()].getTagCompound()); + if (cultureDNABioData == null || bioCulture == null) return super.checkRecipe(skipOC); + if (this.mTier < 3 + rTier + cultureDNABioData.getTier()) + return MTEBasicMachine.FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + for (int i = 0; i < 3; i++) { + if (this.mInventory[this.getInputSlot() + i] != null) + this.mInventory[this.getInputSlot() + i].stackSize--; + } + this.mFluid.amount -= 1000; + bioCulture = bioCulture.setPlasmid(BioPlasmid.convertDataToPlasmid(cultureDNABioData)); + if (cultureDNABioData.getChance() > new XSTR().nextInt(10000)) { + this.mOutputItems[0] = BioItemList.getPetriDish(bioCulture); + } + this.mOutputItems[1] = ItemList.Cell_Empty.get(1L); + this.calculateOverclockedNess( + BWUtil.getMachineVoltageFromTier(3 + rTier + cultureDNABioData.getTier()), + 500); + return MTEBasicMachine.FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + } + break; + case CLONAL_CELLULAR_SYNTHESIS_MODULE: { + ItemStack Outp = ItemList.Tool_DataOrb.get(1L); + BehaviourDataOrb.setDataTitle(Outp, "DNA Sample"); + + if (GTUtility.isStackValid(this.mInventory[this.getInputSlot()]) + && GTUtility + .areStacksEqual(this.mInventory[this.getInputSlot()], BioItemList.getPetriDish(null)) + && GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 1]) + && GTUtility.areStacksEqual(this.mInventory[this.getInputSlot() + 1], BioItemList.getOther(4)) + && GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 2]) + && GTUtility.areStacksEqual( + this.mInventory[this.getInputSlot() + 2], + ItemList.Circuit_Chip_Stemcell.get(2L)) + && GTUtility.isStackValid(this.mInventory[this.getInputSlot() + 3]) + && GTUtility.areStacksEqual( + this.mInventory[this.getInputSlot() + 3], + ItemList.Tool_DataOrb.get(1L), + true) + && "DNA Sample".equals(BehaviourDataOrb.getDataTitle(this.mInventory[this.getInputSlot() + 3])) + && this.mFluid.isFluidEqual(dnaFluid) + && this.mFluid.amount >= 8000) { + + BioData cultureDNABioData = BioData + .getBioDataFromName(BehaviourDataOrb.getDataName(this.mInventory[this.getInputSlot() + 3])); + if (cultureDNABioData == null) return super.checkRecipe(skipOC); + if (this.mTier < 3 + rTier + cultureDNABioData.getTier()) + return MTEBasicMachine.FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + for (int i = 0; i < 3; i++) { + if (this.mInventory[this.getInputSlot() + i] != null) + this.mInventory[this.getInputSlot() + i].stackSize--; + } + this.mFluid.amount -= 8000; + if (cultureDNABioData.getChance() > new XSTR().nextInt(10000)) { + BioCulture out = BioCulture.getBioCulture(BioDNA.convertDataToDNA(cultureDNABioData)); + if (out == null) return MTEBasicMachine.DID_NOT_FIND_RECIPE; + out = out.setPlasmid(BioPlasmid.convertDataToPlasmid(cultureDNABioData)); + this.mOutputItems[0] = BioItemList.getPetriDish(out); + } + this.calculateOverclockedNess( + BWUtil.getMachineVoltageFromTier(3 + rTier + cultureDNABioData.getTier()), + 500); + return MTEBasicMachine.FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + } + break; + case INCUBATION_MODULE: + default: + break; + } + } + return super.checkRecipe(skipOC); + } + + @Override + public String[] getDescription() { + return new String[] { StatCollector.translateToLocal("tooltip.tile.biolab.0.name"), + BWTooltipReference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get() }; + } +} diff --git a/src/main/java/bartworks/common/tileentities/tiered/MTECompressedFluidHatch.java b/src/main/java/bartworks/common/tileentities/tiered/MTECompressedFluidHatch.java new file mode 100644 index 0000000000..89b21ae67e --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/tiered/MTECompressedFluidHatch.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.tiered; + +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; + +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.util.GTUtility; + +public class MTECompressedFluidHatch extends MTEHatchInput { + + public MTECompressedFluidHatch(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 0); + this.mDescriptionArray[1] = "Capacity: 100,000,000L"; + } + + public MTECompressedFluidHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public int getCapacity() { + return 100_000_000; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return GTUtility.areFluidsEqual(aFluid, Materials.LiquidAir.getFluid(1)); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTECompressedFluidHatch(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + protected FluidSlotWidget createFluidSlot() { + return super.createFluidSlot().setFilter(f -> f == Materials.LiquidAir.mFluid); + } +} diff --git a/src/main/java/bartworks/common/tileentities/tiered/MTEDiode.java b/src/main/java/bartworks/common/tileentities/tiered/MTEDiode.java new file mode 100644 index 0000000000..ad3a39320f --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/tiered/MTEDiode.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.tiered; + +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_ULV; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicHull; +import gregtech.api.util.GTUtility; + +public class MTEDiode extends MTEBasicHull { + + private long maxAmps; + private long aAmps; + + public MTEDiode(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, StatCollector.translateToLocal("tooltip.tile.diode.0.name")); + this.maxAmps = this.getAmpsfromMeta(aID); + this.aAmps = this.maxAmps; + } + + public MTEDiode(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + if (this.maxAmps == 0 && !this.getBaseMetaTileEntity() + .getWorld().isRemote) { + this.maxAmps = this.getAmpsfromMeta( + this.getBaseMetaTileEntity() + .getMetaTileID()); + this.aAmps = this.maxAmps; + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + + if (this.getBaseMetaTileEntity() + .getWorld().isRemote) return; + if (!aPlayer.isSneaking()) { + --this.aAmps; + if (this.aAmps < 0) this.aAmps = this.maxAmps; + } else { + ++this.aAmps; + if (this.aAmps > this.maxAmps) this.aAmps = 0; + } + GTUtility.sendChatToPlayer(aPlayer, "Max Amps: " + this.aAmps); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setLong("maxAmp", this.maxAmps); + aNBT.setLong("Amps", this.aAmps); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.maxAmps = aNBT.getLong("maxAmp"); + this.aAmps = aNBT.getLong("Amps"); + super.loadNBTData(aNBT); + } + + @Override + public long maxAmperesOut() { + return this.aAmps; + } + + @Override + public long maxAmperesIn() { + return this.aAmps; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEDiode(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + private long getAmpsfromMeta(int meta) { + if (meta >= Diode2A_ULV.ID && meta <= Diode2A_MAX.ID) return 2L; + if (meta >= Diode4A_ULV.ID && meta <= Diode4A_MAX.ID) return 4L; + if (meta >= Diode8A_ULV.ID && meta <= Diode8A_MAX.ID) return 8L; + if (meta >= Diode12A_ULV.ID && meta <= Diode12A_MAX.ID) return 12L; + if (meta >= Diode16A_ULV.ID && meta <= Diode16A_MAX.ID) return 16L; + return 0L; + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll(this.mDescriptionArray); + } +} diff --git a/src/main/java/bartworks/common/tileentities/tiered/MTEEnergyDistributor.java b/src/main/java/bartworks/common/tileentities/tiered/MTEEnergyDistributor.java new file mode 100644 index 0000000000..d361047699 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/tiered/MTEEnergyDistributor.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.tiered; + +import net.minecraft.util.StatCollector; + +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTETransformer; + +public class MTEEnergyDistributor extends MTETransformer { + + public MTEEnergyDistributor(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, null); + } + + public MTEEnergyDistributor(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEEnergyDistributor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEEnergyDistributor(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public long maxEUInput() { + return GTValues.V[this.mTier]; + } + + @Override + public long maxEUOutput() { + return GTValues.V[this.mTier]; + } + + @Override + public long maxAmperesOut() { + return 320; + } + + @Override + public long maxAmperesIn() { + return 320; + } + + @Override + public long maxEUStore() { + return 512L + GTValues.V[this.mTier] * 320L; + } + + @Override + public String[] getDescription() { + return new String[] { StatCollector.translateToLocal("tooltip.tile.energydistributor.0.name") }; + } +} diff --git a/src/main/java/bartworks/common/tileentities/tiered/MTEGiantOutputHatch.java b/src/main/java/bartworks/common/tileentities/tiered/MTEGiantOutputHatch.java new file mode 100644 index 0000000000..dc4b031f74 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/tiered/MTEGiantOutputHatch.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.tiered; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; + +public class MTEGiantOutputHatch extends MTEHatchOutput { + + public MTEGiantOutputHatch(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 0); + this.mDescriptionArray[1] = "Capacity: 100000000L"; + } + + public MTEGiantOutputHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEGiantOutputHatch(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public int getCapacity() { + return 100000000; + } +} diff --git a/src/main/java/bartworks/common/tileentities/tiered/MTEHumongousInputHatch.java b/src/main/java/bartworks/common/tileentities/tiered/MTEHumongousInputHatch.java new file mode 100644 index 0000000000..efe3614250 --- /dev/null +++ b/src/main/java/bartworks/common/tileentities/tiered/MTEHumongousInputHatch.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.common.tileentities.tiered; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInput; + +public class MTEHumongousInputHatch extends MTEHatchInput { + + public MTEHumongousInputHatch(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 13); + this.mDescriptionArray[1] = "Capacity: 2,000,000,000L"; + } + + public MTEHumongousInputHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public int getCapacity() { + return 2_000_000_000; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHumongousInputHatch(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } +} diff --git a/src/main/java/bartworks/neiHandler/BWNEIConfig.java b/src/main/java/bartworks/neiHandler/BWNEIConfig.java new file mode 100644 index 0000000000..6226613e91 --- /dev/null +++ b/src/main/java/bartworks/neiHandler/BWNEIConfig.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.neiHandler; + +import net.minecraft.item.ItemStack; + +import bartworks.API.recipe.BartWorksRecipeMaps; +import bartworks.MainMod; +import bartworks.common.loaders.FluidLoader; +import bartworks.common.loaders.ItemRegistry; +import bartworks.system.material.WerkstoffLoader; +import codechicken.nei.PositionedStack; +import codechicken.nei.api.API; +import codechicken.nei.api.IConfigureNEI; +import gregtech.api.enums.OrePrefixes; + +public class BWNEIConfig implements IConfigureNEI { + + static boolean sIsAdded = true; + + static boolean checkRecipe(ItemStack labPart, Iterable stacks) { + for (PositionedStack stack : stacks) { + for (ItemStack item : stack.items) { + if (labPart.getTagCompound() + .equals(item.getTagCompound())) { + return true; + } + } + } + return false; + } + + @Override + public void loadConfig() { + API.hideItem(new ItemStack(ItemRegistry.TAB)); + API.hideItem(new ItemStack(FluidLoader.bioFluidBlock)); + API.hideItem(new ItemStack(ItemRegistry.bw_fake_glasses)); + API.hideItem(new ItemStack(ItemRegistry.bw_fake_glasses2)); + ItemStack[] prefixesToHide = { + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.dustTiny, WerkstoffLoader.Bismutite) + .copy(), + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.dustSmall, WerkstoffLoader.Bismutite) + .copy(), + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.crushed, WerkstoffLoader.Bismutite) + .copy(), + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.crushedPurified, WerkstoffLoader.Bismutite) + .copy(), + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.crushedCentrifuged, WerkstoffLoader.Bismutite) + .copy(), + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.nugget, WerkstoffLoader.Bismutite) + .copy(), + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.gemChipped, WerkstoffLoader.Bismutite) + .copy(), + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.gemFlawed, WerkstoffLoader.Bismutite) + .copy(), + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.gemFlawless, WerkstoffLoader.Bismutite) + .copy(), + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.gemExquisite, WerkstoffLoader.Bismutite) + .copy(), + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.dustImpure, WerkstoffLoader.Bismutite) + .copy(), + WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.dustPure, WerkstoffLoader.Bismutite) + .copy(), }; + for (ItemStack stack : prefixesToHide) { + stack.setItemDamage(Short.MAX_VALUE); + API.hideItem(stack); + } + + BWNEIConfig.sIsAdded = false; + new OreNEIHandler(); + new BioVatNEIHandler(BartWorksRecipeMaps.bacterialVatRecipes.getDefaultRecipeCategory()); + new BioLabNEIHandler(BartWorksRecipeMaps.bioLabRecipes.getDefaultRecipeCategory()); + BWNEIConfig.sIsAdded = true; + } + + @Override + public String getName() { + return "BartWorks NEI Plugin"; + } + + @Override + public String getVersion() { + return MainMod.APIVERSION; + } +} diff --git a/src/main/java/bartworks/neiHandler/BioLabNEIHandler.java b/src/main/java/bartworks/neiHandler/BioLabNEIHandler.java new file mode 100644 index 0000000000..40c20e42d3 --- /dev/null +++ b/src/main/java/bartworks/neiHandler/BioLabNEIHandler.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.neiHandler; + +import net.minecraft.item.ItemStack; + +import bartworks.common.items.ItemLabParts; +import codechicken.nei.recipe.GuiCraftingRecipe; +import codechicken.nei.recipe.GuiUsageRecipe; +import codechicken.nei.recipe.TemplateRecipeHandler; +import cpw.mods.fml.common.event.FMLInterModComms; +import gregtech.api.enums.GTValues; +import gregtech.api.recipe.RecipeCategory; +import gregtech.nei.GTNEIDefaultHandler; + +public class BioLabNEIHandler extends GTNEIDefaultHandler { + + public BioLabNEIHandler(RecipeCategory recipeCategory) { + super(recipeCategory); + if (!BWNEIConfig.sIsAdded) { + FMLInterModComms.sendRuntimeMessage( + GTValues.GT, + "NEIPlugins", + "register-crafting-handler", + "gregtech@" + this.getRecipeName() + "@" + this.getOverlayIdentifier()); + GuiCraftingRecipe.craftinghandlers.add(this); + GuiUsageRecipe.usagehandlers.add(this); + } + } + + @Override + public TemplateRecipeHandler newInstance() { + return new BioLabNEIHandler(this.recipeCategory); + } + + @Override + public void loadCraftingRecipes(ItemStack aResult) { + if (aResult != null && aResult.getItem() instanceof ItemLabParts + && aResult.getItemDamage() < 3 + && aResult.getTagCompound() != null) { + for (CachedDefaultRecipe recipe : this.getCache()) + if (BWNEIConfig.checkRecipe(aResult, recipe.mOutputs)) this.arecipes.add(recipe); + } else { + super.loadCraftingRecipes(aResult); + } + } + + @Override + public void loadUsageRecipes(ItemStack aResult) { + if (aResult != null && aResult.getItem() instanceof ItemLabParts + && aResult.getItemDamage() < 3 + && aResult.getTagCompound() != null) { + for (CachedDefaultRecipe recipe : this.getCache()) + if (BWNEIConfig.checkRecipe(aResult, recipe.mInputs)) this.arecipes.add(recipe); + } else { + super.loadUsageRecipes(aResult); + } + } +} diff --git a/src/main/java/bartworks/neiHandler/BioVatNEIHandler.java b/src/main/java/bartworks/neiHandler/BioVatNEIHandler.java new file mode 100644 index 0000000000..08583a617d --- /dev/null +++ b/src/main/java/bartworks/neiHandler/BioVatNEIHandler.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.neiHandler; + +import java.util.Collections; + +import net.minecraft.item.ItemStack; + +import bartworks.common.items.ItemLabParts; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.GuiCraftingRecipe; +import codechicken.nei.recipe.GuiUsageRecipe; +import codechicken.nei.recipe.TemplateRecipeHandler; +import cpw.mods.fml.common.event.FMLInterModComms; +import gregtech.api.enums.GTValues; +import gregtech.api.recipe.RecipeCategory; +import gregtech.nei.GTNEIDefaultHandler; + +public class BioVatNEIHandler extends GTNEIDefaultHandler { + + public BioVatNEIHandler(RecipeCategory recipeCategory) { + super(recipeCategory); + if (!BWNEIConfig.sIsAdded) { + FMLInterModComms.sendRuntimeMessage( + GTValues.GT, + "NEIPlugins", + "register-crafting-handler", + "gregtech@" + this.getRecipeName() + "@" + this.getOverlayIdentifier()); + GuiCraftingRecipe.craftinghandlers.add(this); + GuiUsageRecipe.usagehandlers.add(this); + } + } + + @Override + public TemplateRecipeHandler newInstance() { + return new BioVatNEIHandler(this.recipeCategory); + } + + private void loadLabPartRecipes(ItemStack aResult) { + for (CachedDefaultRecipe recipe : this.getCache()) { + // dirty way of finding the special slot item + // see constructor of CachedDefaultRecipe on why relx==120 and rely==52 means special slot + for (PositionedStack stack : recipe.mInputs) { + if (stack.relx == 120 && stack.rely == 52 + && BWNEIConfig.checkRecipe(aResult, Collections.singletonList(stack))) this.arecipes.add(recipe); + } + } + } + + @Override + public void loadUsageRecipes(ItemStack aResult) { + if (aResult != null && aResult.getItem() instanceof ItemLabParts + && aResult.getItemDamage() < 3 + && aResult.getTagCompound() != null) { + this.loadLabPartRecipes(aResult); + } else { + super.loadUsageRecipes(aResult); + } + } +} diff --git a/src/main/java/bartworks/neiHandler/OreNEIHandler.java b/src/main/java/bartworks/neiHandler/OreNEIHandler.java new file mode 100644 index 0000000000..bbb6802a61 --- /dev/null +++ b/src/main/java/bartworks/neiHandler/OreNEIHandler.java @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.neiHandler; + +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import bartworks.MainMod; +import bartworks.system.material.BWMetaGeneratedOres; +import bartworks.system.material.BWMetaGeneratedSmallOres; +import bartworks.system.material.Werkstoff; +import bartworks.system.oregen.BWOreLayer; +import bartworks.system.oregen.BWWorldGenRoss128b; +import bartworks.system.oregen.BWWorldGenRoss128ba; +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.GuiCraftingRecipe; +import codechicken.nei.recipe.TemplateRecipeHandler; +import cpw.mods.fml.common.event.FMLInterModComms; +import gregtech.api.enums.OrePrefixes; + +public class OreNEIHandler extends TemplateRecipeHandler { + + public OreNEIHandler() { + if (!BWNEIConfig.sIsAdded) { + FMLInterModComms.sendRuntimeMessage( + MainMod.MOD_ID, + "NEIPlugins", + "register-crafting-handler", + MainMod.MOD_ID + "@" + this.getRecipeName() + "@" + this.getOverlayIdentifier()); + GuiCraftingRecipe.craftinghandlers.add(this); + } + } + + @Override + public void drawBackground(int recipe) { + GuiDraw.drawRect(0, 0, 166, 65, 0x888888); + } + + @Override + public void loadTransferRects() { + this.transferRects.add( + new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(0, 40, 40, 120), "quickanddirtyneihandler")); + } + + @Override + public int recipiesPerPage() { + return 1; + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if ("quickanddirtyneihandler".equalsIgnoreCase(outputId)) { + HashSet result = new HashSet<>(); + Werkstoff.werkstoffHashSet.stream() + .filter(w -> w.hasGenerationFeature(OrePrefixes.ore)) + .forEach(w -> result.add(w.get(OrePrefixes.ore))); + result.forEach(this::loadCraftingRecipes); + result.clear(); + Werkstoff.werkstoffHashSet.stream() + .filter(w -> w.hasGenerationFeature(OrePrefixes.ore)) + .forEach(w -> result.add(w.get(OrePrefixes.oreSmall))); + result.forEach(this::loadCraftingRecipes); + result.clear(); + HashSet hashSet = new HashSet<>(this.arecipes); + this.arecipes.clear(); + this.arecipes.addAll(hashSet); + } + if ("item".equals(outputId)) { + this.loadCraftingRecipes((ItemStack) results[0]); + HashSet hashSet = new HashSet<>(this.arecipes); + this.arecipes.clear(); + this.arecipes.addAll(hashSet); + } + } + + @Override + public void drawExtras(int recipe) { + if (recipe < this.arecipes.size() && this.arecipes.get(recipe) instanceof CachedOreRecipe) { + CachedOreRecipe cachedOreRecipe = (CachedOreRecipe) this.arecipes.get(recipe); + + if (cachedOreRecipe == null || cachedOreRecipe.getOtherStacks() == null + || cachedOreRecipe.getOtherStacks() + .size() == 0) + return; + + if (!cachedOreRecipe.small) { + if (cachedOreRecipe.getOtherStacks() + .get(0) == null + || cachedOreRecipe.getOtherStacks() + .get(0).item == null + || cachedOreRecipe.getOtherStacks() + .get(1) == null + || cachedOreRecipe.getOtherStacks() + .get(2) == null + || cachedOreRecipe.getOtherStacks() + .get(3) == null + || cachedOreRecipe.getOtherStacks() + .get(1).item == null + || cachedOreRecipe.getOtherStacks() + .get(2).item == null + || cachedOreRecipe.getOtherStacks() + .get(3).item == null) + return; + } else if (cachedOreRecipe.getOtherStacks() + .get(0) == null + || cachedOreRecipe.getOtherStacks() + .get(0).item == null) + return; + + if (cachedOreRecipe.worldGen != null) GuiDraw.drawString( + EnumChatFormatting.BOLD + "DIM: " + EnumChatFormatting.RESET + cachedOreRecipe.worldGen.getDimName(), + 0, + 40, + 0, + false); + + GuiDraw.drawString(EnumChatFormatting.BOLD + "Primary:", 0, 50, 0, false); + GuiDraw.drawString( + cachedOreRecipe.getOtherStacks() + .get(0).item.getDisplayName(), + 0, + 60, + 0, + false); + + if (!cachedOreRecipe.small) { + GuiDraw.drawString(EnumChatFormatting.BOLD + "Secondary:", 0, 70, 0, false); + GuiDraw.drawString( + cachedOreRecipe.getOtherStacks() + .get(1).item.getDisplayName(), + 0, + 80, + 0, + false); + GuiDraw.drawString(EnumChatFormatting.BOLD + "InBetween:", 0, 90, 0, false); + GuiDraw.drawString( + cachedOreRecipe.getOtherStacks() + .get(2).item.getDisplayName(), + 0, + 100, + 0, + false); + GuiDraw.drawString(EnumChatFormatting.BOLD + "Sporadic:", 0, 110, 0, false); + GuiDraw.drawString( + cachedOreRecipe.getOtherStacks() + .get(3).item.getDisplayName(), + 0, + 120, + 0, + false); + } else if (cachedOreRecipe.worldGen != null) { + GuiDraw.drawString(EnumChatFormatting.BOLD + "Amount per Chunk:", 0, 70, 0, false); + GuiDraw.drawString(cachedOreRecipe.worldGen.mDensity + "", 0, 80, 0, false); + } + } + super.drawExtras(recipe); + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + Block ore = Block.getBlockFromItem(result.getItem()); + if (ore instanceof BWMetaGeneratedOres) { + BWOreLayer.NEIMAP.get((short) result.getItemDamage()) + .stream() + .filter( + l -> !(ore instanceof BWMetaGeneratedSmallOres) || !l.getClass() + .equals(BWWorldGenRoss128b.class) + && !l.getClass() + .equals(BWWorldGenRoss128ba.class)) + .forEach( + l -> this.arecipes.add(new CachedOreRecipe(l, result, ore instanceof BWMetaGeneratedSmallOres))); + } + } + + @Override + public String getGuiTexture() { + return "textures/gui/container/brewing_stand.png"; + } + + @Override + public String getRecipeName() { + return "BartWorks Ores"; + } + + class CachedOreRecipe extends TemplateRecipeHandler.CachedRecipe { + + public CachedOreRecipe(BWOreLayer worldGen, ItemStack result, boolean smallOres) { + this.worldGen = worldGen; + this.stack = new PositionedStack(result, 0, 0); + this.small = smallOres; + } + + boolean small; + BWOreLayer worldGen; + PositionedStack stack; + + @Override + public PositionedStack getResult() { + return this.stack; + } + + @Override + public List getOtherStacks() { + List ret = new ArrayList<>(); + int x = 0; + for (int i = 0; i < (this.small ? 1 : 4); i++) { + x += 20; + ret.add( + new PositionedStack( + this.worldGen.getStacks() + .get(i), + x, + 12)); + } + return ret; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CachedOreRecipe that)) return false; + return Objects.equals(this.worldGen, that.worldGen); + } + + @Override + public int hashCode() { + return this.worldGen.hashCode(); + } + } +} diff --git a/src/main/java/bartworks/server/EventHandler/ServerEventHandler.java b/src/main/java/bartworks/server/EventHandler/ServerEventHandler.java new file mode 100644 index 0000000000..2a1ba2b626 --- /dev/null +++ b/src/main/java/bartworks/server/EventHandler/ServerEventHandler.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.server.EventHandler; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.oredict.OreDictionary; + +import bartworks.API.SideReference; +import bartworks.MainMod; +import bartworks.common.net.OreDictCachePacket; +import bartworks.common.net.ServerJoinedPacket; +import bartworks.system.material.Werkstoff; +import bartworks.system.oredict.OreDictHandler; +import cpw.mods.fml.common.eventhandler.EventPriority; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; + +public class ServerEventHandler { + + // MinecraftForge.EVENT_BUS + @SubscribeEvent(priority = EventPriority.LOWEST) + public void EntityJoinWorldEvent(EntityJoinWorldEvent event) { + if (event == null || !(event.entity instanceof EntityPlayerMP) || !SideReference.Side.Server) return; + MainMod.BW_Network_instance + .sendToPlayer(new OreDictCachePacket(OreDictHandler.getNonBWCache()), (EntityPlayerMP) event.entity); + MainMod.BW_Network_instance.sendToPlayer(new ServerJoinedPacket(null), (EntityPlayerMP) event.entity); + } + + // FMLCommonHandler.instance().bus() + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onPlayerTickEventServer(TickEvent.PlayerTickEvent event) { + if (event == null || !(event.player instanceof EntityPlayerMP) + || event.player.worldObj.getTotalWorldTime() % 20 != 0) return; + + boolean replace = false; + ItemStack toReplace = null; + for (int i = 0; i < event.player.inventory.mainInventory.length; i++) { + ItemStack stack = event.player.inventory.mainInventory[i]; + if (stack == null) continue; + int[] oreIDs = OreDictionary.getOreIDs(stack); + + if (oreIDs.length > 0) { + loop: for (int oreID : oreIDs) { + String oreDictName = OreDictionary.getOreName(oreID); + for (Werkstoff e : Werkstoff.werkstoffHashSet) { + replace = e.getGenerationFeatures().enforceUnification; + if (replace) { + if (oreDictName.contains(e.getVarName())) { + String prefix = oreDictName.replace(e.getVarName(), ""); + OrePrefixes prefixes = OrePrefixes.getPrefix(prefix); + if (prefixes == null) { + continue; + } + toReplace = GTOreDictUnificator.get(prefixes, e.getVarName(), stack.stackSize); + break loop; + } + for (String s : e.getADDITIONAL_OREDICT()) { + if (oreDictName.contains(s)) { + String prefix = oreDictName.replace(s, ""); + OrePrefixes prefixes = OrePrefixes.getPrefix(prefix); + if (prefixes == null) { + continue; + } + toReplace = GTOreDictUnificator.get(prefixes, e.getVarName(), stack.stackSize); + break loop; + } + } + } + replace = false; + } + } + } + if (replace && toReplace != null) { + event.player.inventory.setInventorySlotContents(i, toReplace); + replace = false; + } + } + } +} diff --git a/src/main/java/bartworks/system/material/BWGTMaterialReference.java b/src/main/java/bartworks/system/material/BWGTMaterialReference.java new file mode 100644 index 0000000000..50665464f4 --- /dev/null +++ b/src/main/java/bartworks/system/material/BWGTMaterialReference.java @@ -0,0 +1,523 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ +package bartworks.system.material; + +import bartworks.MainMod; +import gregtech.api.enums.Materials; + +public class BWGTMaterialReference { + + private static final Werkstoff.GenerationFeatures ADD_CASINGS_ONLY = new Werkstoff.GenerationFeatures().disable() + .addCasings(); + + public static Werkstoff Aluminium = new Werkstoff( + Materials.Aluminium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 19); + public static Werkstoff Americium = new Werkstoff( + Materials.Americium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 103); + public static Werkstoff Antimony = new Werkstoff( + Materials.Antimony, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 58); + public static Werkstoff Arsenic = new Werkstoff( + Materials.Arsenic, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 39); + public static Werkstoff Barium = new Werkstoff( + Materials.Barium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 63); + public static Werkstoff Beryllium = new Werkstoff( + Materials.Beryllium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 8); + public static Werkstoff Bismuth = new Werkstoff( + Materials.Bismuth, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 90); + public static Werkstoff Boron = new Werkstoff( + Materials.Boron, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 9); + public static Werkstoff Caesium = new Werkstoff( + Materials.Caesium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 62); + public static Werkstoff Carbon = new Werkstoff( + Materials.Carbon, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 10); + public static Werkstoff Cadmium = new Werkstoff( + Materials.Cadmium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 55); + public static Werkstoff Cerium = new Werkstoff( + Materials.Cerium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 65); + public static Werkstoff Chrome = new Werkstoff( + Materials.Chrome, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 30); + public static Werkstoff Cobalt = new Werkstoff( + Materials.Cobalt, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 33); + public static Werkstoff Copper = new Werkstoff( + Materials.Copper, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 35); + public static Werkstoff Dysprosium = new Werkstoff( + Materials.Dysprosium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 73); + public static Werkstoff Erbium = new Werkstoff( + Materials.Erbium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 75); + public static Werkstoff Europium = new Werkstoff( + Materials.Europium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 70); + public static Werkstoff Gadolinium = new Werkstoff( + Materials.Gadolinium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 71); + public static Werkstoff Gallium = new Werkstoff( + Materials.Gallium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 37); + public static Werkstoff Gold = new Werkstoff( + Materials.Gold, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 86); + public static Werkstoff Holmium = new Werkstoff( + Materials.Holmium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 74); + public static Werkstoff Indium = new Werkstoff( + Materials.Indium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 56); + public static Werkstoff Iridium = new Werkstoff( + Materials.Iridium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 84); + public static Werkstoff Iron = new Werkstoff( + Materials.Iron, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 32); + public static Werkstoff Lanthanum = new Werkstoff( + Materials.Lanthanum, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 64); + public static Werkstoff Lead = new Werkstoff( + Materials.Lead, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 89); + public static Werkstoff Lithium = new Werkstoff( + Materials.Lithium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 6); + public static Werkstoff Lutetium = new Werkstoff( + Materials.Lutetium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 78); + public static Werkstoff Magnesium = new Werkstoff( + Materials.Magnesium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 18); + public static Werkstoff Manganese = new Werkstoff( + Materials.Manganese, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 31); + public static Werkstoff Molybdenum = new Werkstoff( + Materials.Molybdenum, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 48); + public static Werkstoff Neodymium = new Werkstoff( + Materials.Neodymium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 67); + public static Werkstoff Neutronium = new Werkstoff( + Materials.Neutronium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 129); + public static Werkstoff Nickel = new Werkstoff( + Materials.Nickel, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 34); + public static Werkstoff Niobium = new Werkstoff( + Materials.Niobium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 47); + public static Werkstoff Osmium = new Werkstoff( + Materials.Osmium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 83); + public static Werkstoff Palladium = new Werkstoff( + Materials.Palladium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 52); + public static Werkstoff Phosphorus = new Werkstoff( + Materials.Phosphorus, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 21); + public static Werkstoff Platinum = new Werkstoff( + Materials.Platinum, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 85); + public static Werkstoff Plutonium241 = new Werkstoff( + Materials.Plutonium241, + ADD_CASINGS_ONLY, + Werkstoff.Types.ISOTOPE, + 31_766 + 101); + public static Werkstoff Potassium = new Werkstoff( + Materials.Potassium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 25); + public static Werkstoff Praseodymium = new Werkstoff( + Materials.Praseodymium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 66); + public static Werkstoff Promethium = new Werkstoff( + Materials.Promethium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 68); + public static Werkstoff Rubidium = new Werkstoff( + Materials.Rubidium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 43); + public static Werkstoff Samarium = new Werkstoff( + Materials.Samarium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 69); + public static Werkstoff Scandium = new Werkstoff( + Materials.Scandium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 27); + public static Werkstoff Silicon = new Werkstoff( + Materials.Silicon, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 20); + public static Werkstoff Silver = new Werkstoff( + Materials.Silver, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 54); + public static Werkstoff Sodium = new Werkstoff( + Materials.Sodium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 17); + public static Werkstoff Strontium = new Werkstoff( + Materials.Strontium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 44); + public static Werkstoff Sulfur = new Werkstoff( + Materials.Sulfur, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 22); + public static Werkstoff Tantalum = new Werkstoff( + Materials.Tantalum, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 80); + public static Werkstoff Terbium = new Werkstoff( + Materials.Terbium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 72); + public static Werkstoff Thorium = new Werkstoff( + Materials.Thorium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 96); + public static Werkstoff Thulium = new Werkstoff( + Materials.Thulium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 76); + public static Werkstoff Tin = new Werkstoff(Materials.Tin, ADD_CASINGS_ONLY, Werkstoff.Types.ELEMENT, 31_766 + 57); + public static Werkstoff Titanium = new Werkstoff( + Materials.Titanium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 28); + public static Werkstoff Tritanium = new Werkstoff( + Materials.Tritanium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 329); + public static Werkstoff Tritium = new Werkstoff( + Materials.Tritium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 3); + public static Werkstoff Tungsten = new Werkstoff( + Materials.Tungsten, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 81); + public static Werkstoff Uranium = new Werkstoff( + Materials.Uranium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 98); + public static Werkstoff Uranium235 = new Werkstoff( + Materials.Uranium235, + ADD_CASINGS_ONLY, + Werkstoff.Types.ISOTOPE, + 31_766 + 97); + public static Werkstoff Vanadium = new Werkstoff( + Materials.Vanadium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 29); + public static Werkstoff Ytterbium = new Werkstoff( + Materials.Ytterbium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 77); + public static Werkstoff Yttrium = new Werkstoff( + Materials.Yttrium, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 45); + public static Werkstoff Zinc = new Werkstoff( + Materials.Zinc, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 36); + public static Werkstoff Ardite = new Werkstoff( + Materials.Ardite, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 382); + public static Werkstoff Naquadah = new Werkstoff( + Materials.Naquadah, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 324); + public static Werkstoff NaquadahAlloy = new Werkstoff( + Materials.NaquadahAlloy, + ADD_CASINGS_ONLY, + Werkstoff.Types.COMPOUND, + 31_766 + 325); + public static Werkstoff NaquadahEnriched = new Werkstoff( + Materials.NaquadahEnriched, + ADD_CASINGS_ONLY, + Werkstoff.Types.ISOTOPE, + 31_766 + 326); + public static Werkstoff Naquadria = new Werkstoff( + Materials.Naquadria, + ADD_CASINGS_ONLY, + Werkstoff.Types.ELEMENT, + 31_766 + 327); + public static Werkstoff WroughtIron = new Werkstoff( + Materials.WroughtIron, + ADD_CASINGS_ONLY, + Werkstoff.Types.ISOTOPE, + 31_766 + 304); + public static Werkstoff AnnealedCopper = new Werkstoff( + Materials.AnnealedCopper, + ADD_CASINGS_ONLY, + Werkstoff.Types.ISOTOPE, + 31_766 + 345); + + public static Werkstoff Osmiridium = new Werkstoff( + Materials.Osmiridium, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 317); + public static Werkstoff SterlingSilver = new Werkstoff( + Materials.SterlingSilver, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 350); + public static Werkstoff RoseGold = new Werkstoff( + Materials.RoseGold, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 351); + public static Werkstoff BlackBronze = new Werkstoff( + Materials.BlackBronze, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 352); + public static Werkstoff BismuthBronze = new Werkstoff( + Materials.BismuthBronze, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 353); + public static Werkstoff BlackSteel = new Werkstoff( + Materials.BlackSteel, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 334); + public static Werkstoff RedSteel = new Werkstoff( + Materials.RedSteel, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 348); + public static Werkstoff BlueSteel = new Werkstoff( + Materials.BlueSteel, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 349); + public static Werkstoff DamascusSteel = new Werkstoff( + Materials.DamascusSteel, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 335); + public static Werkstoff TungstenSteel = new Werkstoff( + Materials.TungstenSteel, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 316); + public static Werkstoff Ultimet = new Werkstoff( + Materials.Ultimet, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 344); + public static Werkstoff TungstenCarbide = new Werkstoff( + Materials.TungstenCarbide, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 370); + public static Werkstoff VanadiumSteel = new Werkstoff( + Materials.VanadiumSteel, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 371); + public static Werkstoff HSSG = new Werkstoff( + Materials.HSSG, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 372); + public static Werkstoff HSSE = new Werkstoff( + Materials.HSSE, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 373); + public static Werkstoff HSSS = new Werkstoff( + Materials.HSSS, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 374); + public static Werkstoff StainlessSteel = new Werkstoff( + Materials.StainlessSteel, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 306); + public static Werkstoff Brass = new Werkstoff( + Materials.Brass, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 301); + public static Werkstoff Bronze = new Werkstoff( + Materials.Bronze, + ADD_CASINGS_ONLY, + Werkstoff.Types.MIXTURE, + 31_766 + 300); + + public static Werkstoff Wood = new Werkstoff( + Materials.Wood, + ADD_CASINGS_ONLY, + Werkstoff.Types.BIOLOGICAL, + 31_766 + 809); + + public static Werkstoff Steel = new Werkstoff( + Materials.Steel, + ADD_CASINGS_ONLY, + Werkstoff.Types.COMPOUND, + 31_766 + 305); + public static Werkstoff Polytetrafluoroethylene = new Werkstoff( + Materials.Polytetrafluoroethylene, + ADD_CASINGS_ONLY, + Werkstoff.Types.COMPOUND, + 31_766 + 473); + public static Werkstoff Plastic = new Werkstoff( + Materials.Plastic, + ADD_CASINGS_ONLY, + Werkstoff.Types.COMPOUND, + 31_766 + 874); + public static Werkstoff Epoxid = new Werkstoff( + Materials.Epoxid, + ADD_CASINGS_ONLY, + Werkstoff.Types.COMPOUND, + 31_766 + 470); + public static Werkstoff Magnesia = new Werkstoff( + Materials.Magnesia, + new Werkstoff.GenerationFeatures().disable() + .addMetalItems() + .addMolten(), + Werkstoff.Types.COMPOUND, + 31_766 + 471); + + public static void init() { + MainMod.LOGGER.info("Load Elements from GT"); + } +} diff --git a/src/main/java/bartworks/system/material/BWItemMetaGeneratedBlock.java b/src/main/java/bartworks/system/material/BWItemMetaGeneratedBlock.java new file mode 100644 index 0000000000..671b21e92b --- /dev/null +++ b/src/main/java/bartworks/system/material/BWItemMetaGeneratedBlock.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import bartworks.common.items.BWItemBlocks; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; + +public class BWItemMetaGeneratedBlock extends BWItemBlocks { + + public BWItemMetaGeneratedBlock(Block par1) { + super(par1); + } + + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, + float hitX, float hitY, float hitZ) { + return false; + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return this.field_150939_a.getUnlocalizedName() + "." + this.getDamage(aStack); + } + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + Block block = Block.getBlockFromItem(aStack.getItem()); + if (block instanceof BWMetaGeneratedBlocks metaBlock) { + int aMetaData = aStack.getItemDamage(); + Werkstoff werkstoff = Werkstoff.werkstoffHashMap.get((short) aMetaData); + if (werkstoff == null) werkstoff = Werkstoff.default_null_Werkstoff; + return metaBlock.blockTypeLocalizedName.replace("%material", werkstoff.getLocalizedName()); + } + return GTLanguageManager.getTranslation(this.getUnlocalizedName(aStack) + ".name"); + } + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + if (!GTUtility.isStackValid(aStack) || aPlayer == null || aStack.getItemDamage() <= 0) { + return; + } + if (aList == null) { + aList = new ArrayList<>(); + } + Werkstoff werkstoff = Werkstoff.werkstoffHashMap.get((short) aStack.getItemDamage()); + if (werkstoff != null) { + String tooltip = werkstoff.getLocalizedToolTip(); + if (!tooltip.isEmpty()) { + aList.add(tooltip); + } + } + } + + @Override + public boolean placeBlockAt(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int side, + float hitX, float hitY, float hitZ, int aMeta) { + short tDamage = (short) this.getDamage(aStack); + if (tDamage > 0) { + if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, tDamage, 3)) { + return false; + } + TileEntityMetaGeneratedBlock tTileEntity = (TileEntityMetaGeneratedBlock) aWorld.getTileEntity(aX, aY, aZ); + tTileEntity.mMetaData = tDamage; + } else if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, 0, 3)) return false; + if (aWorld.getBlock(aX, aY, aZ) == this.field_150939_a) { + this.field_150939_a.onBlockPlacedBy(aWorld, aX, aY, aZ, aPlayer, aStack); + this.field_150939_a.onPostBlockPlaced(aWorld, aX, aY, aZ, tDamage); + } + return true; + } +} diff --git a/src/main/java/bartworks/system/material/BWMetaGeneratedBlocks.java b/src/main/java/bartworks/system/material/BWMetaGeneratedBlocks.java new file mode 100644 index 0000000000..db838d059a --- /dev/null +++ b/src/main/java/bartworks/system/material/BWMetaGeneratedBlocks.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import static bartworks.system.material.BWMetaGeneratedItems.metaTab; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import bartworks.client.renderer.BWBlockOreRenderer; +import bartworks.common.blocks.BWTileEntityContainer; +import bartworks.util.BWUtil; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTLanguageManager; + +public abstract class BWMetaGeneratedBlocks extends BWTileEntityContainer { + + public static ThreadLocal mTemporaryTileEntity = new ThreadLocal<>(); + protected OrePrefixes _prefixes; + protected String blockTypeLocalizedName; + + public BWMetaGeneratedBlocks(Material p_i45386_1_, Class tileEntity, String blockName) { + this(p_i45386_1_, tileEntity, blockName, null); + } + + public BWMetaGeneratedBlocks(Material p_i45386_1_, Class tileEntity, String blockName, + OrePrefixes types) { + super(p_i45386_1_, tileEntity, blockName); + this.setHardness(5.0F); + this.setResistance(5.0F); + this.setBlockTextureName("stone"); + this.setCreativeTab(metaTab); + this._prefixes = types; + if (this._prefixes != null) { + this.blockTypeLocalizedName = GTLanguageManager.addStringLocalization( + "bw.blocktype." + this._prefixes, + this._prefixes.mLocalizedMaterialPre + "%material" + this._prefixes.mLocalizedMaterialPost); + } + Werkstoff.werkstoffHashSet.forEach(this::doRegistrationStuff); + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + super.onBlockAdded(aWorld, aX, aY, aZ); + // Waste some time to allow the TE to be set, do not use thread sleep here, it doesnt allow for nanoseconds. + // This will just waste a few cpu cycles to allow the TE to be set + BWUtil.shortSleep(0); + } + + @SideOnly(Side.CLIENT) + public final TileEntityMetaGeneratedBlock getProperTileEntityForRendering() { + return (TileEntityMetaGeneratedBlock) this.createNewTileEntity(null, 0); + } + + protected abstract void doRegistrationStuff(Werkstoff w); + + @Override + public String getHarvestTool(int metadata) { + return "pickaxe"; + } + + @Override + protected boolean canSilkHarvest() { + return false; + } + + @Override + public int getRenderType() { + if (BWBlockOreRenderer.INSTANCE == null) return super.getRenderType(); + return BWBlockOreRenderer.INSTANCE.renderID; + } + + @Override + public int getDamageValue(World aWorld, int aX, int aY, int aZ) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof TileEntityMetaGeneratedBlock metaTE) { + return metaTE.mMetaData; + } + return 0; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) { + return ((ITileEntityProvider) this).createNewTileEntity(world, metadata); + } + + @Override + public boolean hasTileEntity(int metadata) { + return true; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + TileEntity tTileEntity = world.getTileEntity(x, y, z); + if (tTileEntity instanceof TileEntityMetaGeneratedBlock metaTE) { + mTemporaryTileEntity.set(metaTE); + } + super.breakBlock(world, x, y, z, block, meta); + } + + @Override + public ArrayList getDrops(World aWorld, int aX, int aY, int aZ, int aMeta, int aFortune) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof TileEntityMetaGeneratedBlock metaTE) { + return metaTE.getDrops(aFortune); + } + return mTemporaryTileEntity.get() == null ? new ArrayList<>() + : mTemporaryTileEntity.get() + .getDrops(aFortune); + } +} diff --git a/src/main/java/bartworks/system/material/BWMetaGeneratedBlocksCasing.java b/src/main/java/bartworks/system/material/BWMetaGeneratedBlocksCasing.java new file mode 100644 index 0000000000..f8ed670092 --- /dev/null +++ b/src/main/java/bartworks/system/material/BWMetaGeneratedBlocksCasing.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import java.util.List; +import java.util.Optional; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.OrePrefixes; + +public class BWMetaGeneratedBlocksCasing extends BWMetaGeneratedBlocks + implements com.gtnewhorizon.structurelib.structure.ICustomBlockSetting { + + public BWMetaGeneratedBlocksCasing(Material p_i45386_1_, Class tileEntity, String blockName, + OrePrefixes prefixes) { + super(p_i45386_1_, tileEntity, blockName, prefixes); + } + + @Override + public String getHarvestTool(int aMeta) { + return "wrench"; + } + + @Override + public int getHarvestLevel(int aMeta) { + return 2; + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + return Blocks.iron_block.getBlockHardness(aWorld, aX, aY, aZ); + } + + @Override + public float getExplosionResistance(Entity aTNT) { + return Blocks.iron_block.getExplosionResistance(aTNT); + } + + @Override + protected boolean canSilkHarvest() { + return false; + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetaData); + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + super.onBlockAdded(aWorld, aX, aY, aZ); + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + + @Override + protected void doRegistrationStuff(Werkstoff tMaterial) { + GregTechAPI.registerMachineBlock(this, -1); + } + + @Override + public String getUnlocalizedName() { + if (this._prefixes == OrePrefixes.blockCasing) return "bw.werkstoffblockscasing.01"; + if (this._prefixes == OrePrefixes.blockCasingAdvanced) return "bw.werkstoffblockscasingadvanced.01"; + return ""; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) { + Werkstoff.werkstoffHashSet.stream() + .filter( + pMaterial -> Werkstoff.Types.BIOLOGICAL.equals(pMaterial.getType()) + && pMaterial.hasGenerationFeature(OrePrefixes.blockCasing) + || pMaterial.doesOreDictedItemExists(OrePrefixes.plate) + && pMaterial.doesOreDictedItemExists(OrePrefixes.screw) + && pMaterial.doesOreDictedItemExists(OrePrefixes.plateDouble) + && pMaterial.doesOreDictedItemExists(OrePrefixes.gearGt) + && pMaterial.doesOreDictedItemExists(OrePrefixes.gearGtSmall)) + .map(pMaterial -> new ItemStack(aItem, 1, pMaterial.getmID())) + .forEach(aList::add); + } + + /** + * ICustomBlockSetting setBlock override + */ + public void setBlock(World world, int x, int y, int z, int meta) { + world.setBlock(x, y, z, this, meta, 2); + try { + Thread.sleep(1); + // Fucking Minecraft TE settings. + } catch (InterruptedException ignored) {} + Optional.ofNullable(world.getTileEntity(x, y, z)) + .filter(te -> te instanceof TileEntityMetaGeneratedBlock) + .map(te -> (TileEntityMetaGeneratedBlock) te) + .ifPresent(te -> te.mMetaData = (short) meta); + } +} diff --git a/src/main/java/bartworks/system/material/BWMetaGeneratedFrames.java b/src/main/java/bartworks/system/material/BWMetaGeneratedFrames.java new file mode 100644 index 0000000000..092ccf038b --- /dev/null +++ b/src/main/java/bartworks/system/material/BWMetaGeneratedFrames.java @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTModHandler.RecipeBits; +import gregtech.api.util.GTOreDictUnificator; + +public class BWMetaGeneratedFrames extends MetaPipeEntity { + + public final Werkstoff mMaterial; + + public BWMetaGeneratedFrames(int aID, String aName, String aNameRegional, Werkstoff aMaterial) { + super(aID, aName, aNameRegional, 0); + this.mMaterial = aMaterial; + + GTOreDictUnificator.registerOre(OrePrefixes.frameGt, aMaterial, this.getStackForm(1)); + GTModHandler.addCraftingRecipe( + this.getStackForm(2), + RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SSS", "SwS", "SSS", 'S', this.mMaterial.get(OrePrefixes.stick) }); + + RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.getVarName(), 4), + ItemList.Circuit_Integrated.getWithDamage(0, 4)) + .itemOutputs(getStackForm(1)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(8) + .addTo(assemblerRecipes); + } + + private BWMetaGeneratedFrames(String aName, Werkstoff aMaterial) { + super(aName, 0); + this.mMaterial = aMaterial; + } + + @Override + public byte getTileEntityBaseType() { + return 4; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new BWMetaGeneratedFrames(this.mName, this.mMaterial); + } + + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, byte aConnections, + int aColorIndex, boolean aConnected, boolean aRedstone) { + return new ITexture[] { TextureFactory.of( + this.mMaterial.getTexSet().mTextures[OrePrefixes.frameGt.mTextureIndex], + Dyes.getModulation(aColorIndex, this.mMaterial.getRGBA())) }; + } + + @Override + public String[] getDescription() { + return new String[] { "Just something you can put a Cover or CFoam on." }; + } + + @Override + public final boolean isSimpleMachine() { + return true; + } + + @Override + public final boolean isFacingValid(ForgeDirection facing) { + return false; + } + + @Override + public final boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public final boolean renderInside(ForgeDirection side) { + return true; + } + + @Override + public final float getThickNess() { + return 1.0F; + } + + @Override + public final void saveNBTData(NBTTagCompound aNBT) { + /* Do nothing */ + } + + @Override + public final void loadNBTData(NBTTagCompound aNBT) { + /* Do nothing */ + } + + @Override + public final boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public final boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public int connect(ForgeDirection side) { + return 0; + } + + @Override + public void disconnect(ForgeDirection side) { + /* Do nothing */ + } +} diff --git a/src/main/java/bartworks/system/material/BWMetaGeneratedItems.java b/src/main/java/bartworks/system/material/BWMetaGeneratedItems.java new file mode 100644 index 0000000000..bdeab62cfd --- /dev/null +++ b/src/main/java/bartworks/system/material/BWMetaGeneratedItems.java @@ -0,0 +1,258 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +import bartworks.API.IRadMaterial; +import bartworks.API.SideReference; +import bartworks.client.textures.PrefixTextureLinker; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedItem; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import ic2.core.IC2Potion; + +public class BWMetaGeneratedItems extends MetaGeneratedItem implements IRadMaterial { + + public static final CreativeTabs metaTab = new CreativeTabs("bartworksMetaMaterials") { + + @Override + public Item getTabIconItem() { + return new ItemStack(Blocks.iron_ore).getItem(); + } + }; + + protected final OrePrefixes orePrefixes; + protected final String itemTypeLocalizedName; + + public BWMetaGeneratedItems(OrePrefixes orePrefixes, Object unused) { + super("bwMetaGeneratedGTEnhancement" + orePrefixes.name(), (short) 32766, (short) 0); + this.orePrefixes = orePrefixes; + this.itemTypeLocalizedName = GTLanguageManager.addStringLocalization( + "bw.itemtype." + orePrefixes, + orePrefixes.mLocalizedMaterialPre + "%material" + orePrefixes.mLocalizedMaterialPost); + } + + public BWMetaGeneratedItems(OrePrefixes orePrefixes) { + super("bwMetaGenerated" + orePrefixes.name(), (short) 32766, (short) 0); + this.orePrefixes = orePrefixes; + this.itemTypeLocalizedName = GTLanguageManager.addStringLocalization( + "bw.itemtype." + orePrefixes, + orePrefixes.mLocalizedMaterialPre + "%material" + orePrefixes.mLocalizedMaterialPost); + this.setCreativeTab(BWMetaGeneratedItems.metaTab); + for (Werkstoff w : Werkstoff.werkstoffHashSet) { + ItemStack tStack = new ItemStack(this, 1, w.getmID()); + if (!w.hasItemType(this.orePrefixes)) continue; + GTOreDictUnificator.registerOre(this.orePrefixes.name() + w.getVarName(), tStack); + } + } + + @Override + public boolean onEntityItemUpdate(EntityItem aItemEntity) { + if (this.orePrefixes == OrePrefixes.dustImpure || this.orePrefixes == OrePrefixes.dustPure + || this.orePrefixes == OrePrefixes.crushed) { + int aDamage = aItemEntity.getEntityItem() + .getItemDamage(); + if (aDamage >= 0 && !aItemEntity.worldObj.isRemote) { + Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get((short) aDamage); + if (aMaterial != null && aMaterial != Werkstoff.default_null_Werkstoff) { + int tX = MathHelper.floor_double(aItemEntity.posX); + int tY = MathHelper.floor_double(aItemEntity.posY); + int tZ = MathHelper.floor_double(aItemEntity.posZ); + Block tBlock = aItemEntity.worldObj.getBlock(tX, tY, tZ); + byte tMetaData = (byte) aItemEntity.worldObj.getBlockMetadata(tX, tY, tZ); + if (tBlock == Blocks.cauldron && tMetaData > 0) { + if (this.orePrefixes == OrePrefixes.dustImpure || this.orePrefixes == OrePrefixes.dustPure) { + aItemEntity.setEntityItemStack( + WerkstoffLoader.getCorrespondingItemStack( + OrePrefixes.dust, + aMaterial, + aItemEntity.getEntityItem().stackSize)); + aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3); + return true; + } else { + aItemEntity.setEntityItemStack( + WerkstoffLoader.getCorrespondingItemStack( + OrePrefixes.crushedPurified, + aMaterial, + aItemEntity.getEntityItem().stackSize)); + aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3); + return true; + } + } + } + } + } + return false; + } + + @Override + protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + if (this.orePrefixes == OrePrefixes.dustImpure || this.orePrefixes == OrePrefixes.dustPure) { + aList.add(GTLanguageManager.getTranslation("metaitem.01.tooltip.purify")); + } + if (this.orePrefixes == OrePrefixes.crushed) + aList.add(GTLanguageManager.getTranslation("metaitem.01.tooltip.purify.2")); + + if (aStack != null && aStack.getItem() instanceof BWMetaGeneratedItems + && aStack.getItemDamage() == WerkstoffLoader.Tiberium.getmID()) + aList.add(GTLanguageManager.getTranslation("metaitem.01.tooltip.nqgen")); + + Werkstoff werkstoff = Werkstoff.werkstoffHashMap.get((short) this.getDamage(aStack)); + if (werkstoff != null) { + String tooltip = werkstoff.getLocalizedToolTip(); + if (!tooltip.isEmpty()) { + aList.add(tooltip); + } + } + } + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + int aMetaData = aStack.getItemDamage(); + Werkstoff werkstoff = Werkstoff.werkstoffHashMap.get((short) aMetaData); + if (werkstoff == null) werkstoff = Werkstoff.default_null_Werkstoff; + return this.itemTypeLocalizedName.replace("%material", werkstoff.getLocalizedName()); + } + + @Override + public IIconContainer getIconContainer(int aMetaData) { + if (Werkstoff.werkstoffHashMap.get((short) aMetaData) == null) return null; + if (this.orePrefixes.mTextureIndex == -1) return this.getIconContainerBartWorks(aMetaData); + return Werkstoff.werkstoffHashMap.get((short) aMetaData) + .getTexSet().mTextures[this.orePrefixes.mTextureIndex]; + } + + protected IIconContainer getIconContainerBartWorks(int aMetaData) { + if (SideReference.Side.Client) return PrefixTextureLinker.texMap.get(this.orePrefixes) + .get( + Werkstoff.werkstoffHashMap.get((short) aMetaData) + .getTexSet()); + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) { + for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { + if (werkstoff != null && werkstoff.hasItemType(this.orePrefixes)) { + ItemStack tStack = new ItemStack(this, 1, werkstoff.getmID()); + aList.add(tStack); + } + } + // super.getSubItems(var1, aCreativeTab, aList); + } + + @Override + public short[] getRGBa(ItemStack aStack) { + Werkstoff werkstoff = Werkstoff.werkstoffHashMap.get((short) this.getDamage(aStack)); + return werkstoff == null ? Materials._NULL.mRGBa : werkstoff.getRGBA(); + } + + @Override + public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) { + super.onUpdate(aStack, aWorld, aPlayer, aTimer, aIsInHand); + if (aStack == null || aStack.getItem() == null || !(aPlayer instanceof EntityLivingBase)) return; + + EntityLivingBase bPlayer = (EntityPlayer) aPlayer; + Werkstoff w = Werkstoff.werkstoffHashMap.get((short) aStack.getItemDamage()); + if (w == null || w.getStats() == null) return; + + if (w.getStats() + .isToxic() && !GTUtility.isWearingFullBioHazmat(bPlayer)) { + bPlayer.addPotionEffect(new PotionEffect(Potion.poison.getId(), 80, 4)); + } + + if (w.getStats() + .isRadioactive() && !GTUtility.isWearingFullRadioHazmat(bPlayer)) { + bPlayer.addPotionEffect(new PotionEffect(IC2Potion.radiation.id, 80, 4)); + } + } + + @Override + public IIcon getIconFromDamage(int aMetaData) { + if (aMetaData < 0) return null; + Werkstoff tMaterial = Werkstoff.werkstoffHashMap.get((short) aMetaData); + if (tMaterial == null) return null; + IIconContainer tIcon = this.getIconContainer(aMetaData); + if (tIcon != null) return tIcon.getIcon(); + return null; + } + + @Override + public int getItemStackLimit(ItemStack aStack) { + return this.orePrefixes.mDefaultStackSize; + } + + @Override + public int getRadiationLevel(ItemStack aStack) { + Werkstoff w = Werkstoff.werkstoffHashMap.get((short) aStack.getItemDamage()); + return w.getStats() + .isRadioactive() + ? (int) w.getStats() + .getProtons() + : 0; + } + + @Override + public byte getAmountOfMaterial(ItemStack aStack) { + return (byte) (this.orePrefixes == OrePrefixes.stick ? 1 : this.orePrefixes == OrePrefixes.stickLong ? 2 : 0); + } + + @Override + public short[] getColorForGUI(ItemStack aStack) { + Werkstoff w = Werkstoff.werkstoffHashMap.get((short) aStack.getItemDamage()); + return w.getRGBA(); + } + + @Override + public String getNameForGUI(ItemStack aStack) { + Werkstoff w = Werkstoff.werkstoffHashMap.get((short) aStack.getItemDamage()); + return w.getDefaultName(); + } + + @Override + public int getCapacity(ItemStack aStack) { + return this.orePrefixes == OrePrefixes.capsule || this.orePrefixes == OrePrefixes.cell + || this.orePrefixes == OrePrefixes.cellPlasma ? 1000 + : this.orePrefixes == OrePrefixes.cellMolten || this.orePrefixes == OrePrefixes.capsuleMolten ? 144 : 0; + } + + @Override + public ItemStack getContainerItem(ItemStack aStack) { + return this.orePrefixes == OrePrefixes.cell || this.orePrefixes == OrePrefixes.cellPlasma + || this.orePrefixes == OrePrefixes.cellMolten ? Materials.Empty.getCells(1) : null; + } +} diff --git a/src/main/java/bartworks/system/material/BWMetaGeneratedOres.java b/src/main/java/bartworks/system/material/BWMetaGeneratedOres.java new file mode 100644 index 0000000000..c74c3f01cb --- /dev/null +++ b/src/main/java/bartworks/system/material/BWMetaGeneratedOres.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +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; +import net.minecraftforge.common.util.FakePlayer; + +import bartworks.util.MathUtils; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; + +public class BWMetaGeneratedOres extends BWMetaGeneratedBlocks { + + public BWMetaGeneratedOres(Material p_i45386_1_, Class tileEntity, String blockName) { + super(p_i45386_1_, tileEntity, blockName); + this.blockTypeLocalizedName = GTLanguageManager.addStringLocalization( + "bw.blocktype." + OrePrefixes.ore, + OrePrefixes.ore.mLocalizedMaterialPre + "%material" + OrePrefixes.ore.mLocalizedMaterialPost); + } + + @Override + protected void doRegistrationStuff(Werkstoff w) { + if (w != null) { + if (!w.hasItemType(OrePrefixes.ore) || (w.getGenerationFeatures().blacklist & 0b1000) != 0) return; + GTModHandler.addValuableOre(this, w.getmID(), 1); + } + } + + public static boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData, boolean air, Block block, + int[] aBlockMeta) { + if (!air) { + aY = MathUtils.clamp(aY, 1, aWorld.getActualHeight()); + } + + Block tBlock = aWorld.getBlock(aX, aY, aZ); + Block tOreBlock = WerkstoffLoader.BWOres; + if (aMetaData < 0 || tBlock == Blocks.air && !air + || Block.getIdFromBlock(tBlock) != Block.getIdFromBlock(block)) { + return false; + } + final int aaY = aY; + if (Arrays.stream(aBlockMeta) + .noneMatch(e -> e == aWorld.getBlockMetadata(aX, aaY, aZ))) { + return false; + } + + aWorld.setBlock(aX, aY, aZ, tOreBlock, aMetaData, 0); + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof BWTileEntityMetaGeneratedOre metaTE) { + metaTE.mMetaData = (short) aMetaData; + metaTE.mNatural = true; + } + + return true; + } + + @Override + public IIcon getIcon(int side, int meta) { + return Blocks.stone.getIcon(0, 0); + } + + @Override + public IIcon getIcon(IBlockAccess worldIn, int x, int y, int z, int side) { + return Blocks.stone.getIcon(0, 0); + } + + @Override + public int getHarvestLevel(int metadata) { + return 3; + } + + @Override + public String getUnlocalizedName() { + return "bw.blockores.01"; + } + + @Override + public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) { + for (Werkstoff tMaterial : Werkstoff.werkstoffHashSet) { + if (tMaterial != null && tMaterial.hasItemType(OrePrefixes.ore) + && (tMaterial.getGenerationFeatures().blacklist & 0x8) == 0) { + aList.add(new ItemStack(aItem, 1, tMaterial.getmID())); + } + } + } + + @Override + public void harvestBlock(World worldIn, EntityPlayer player, int x, int y, int z, int meta) { + if (EnchantmentHelper.getSilkTouchModifier(player)) { + BWTileEntityMetaGeneratedOre.shouldSilkTouch = true; + super.harvestBlock(worldIn, player, x, y, z, meta); + + if (BWTileEntityMetaGeneratedOre.shouldSilkTouch) { + BWTileEntityMetaGeneratedOre.shouldSilkTouch = false; + } + return; + } + + if (!(player instanceof FakePlayer)) { + BWTileEntityMetaGeneratedOre.shouldFortune = true; + } + super.harvestBlock(worldIn, player, x, y, z, meta); + if (BWTileEntityMetaGeneratedOre.shouldFortune) { + BWTileEntityMetaGeneratedOre.shouldFortune = false; + } + } +} diff --git a/src/main/java/bartworks/system/material/BWMetaGeneratedSmallOres.java b/src/main/java/bartworks/system/material/BWMetaGeneratedSmallOres.java new file mode 100644 index 0000000000..5025f4ac77 --- /dev/null +++ b/src/main/java/bartworks/system/material/BWMetaGeneratedSmallOres.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import java.util.Arrays; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; + +public class BWMetaGeneratedSmallOres extends BWMetaGeneratedOres { + + public BWMetaGeneratedSmallOres(Material p_i45386_1_, Class tileEntity, String blockName) { + super(p_i45386_1_, tileEntity, blockName); + this.blockTypeLocalizedName = GTLanguageManager.addStringLocalization( + "bw.blocktype." + OrePrefixes.oreSmall, + OrePrefixes.oreSmall.mLocalizedMaterialPre + "%material" + OrePrefixes.oreSmall.mLocalizedMaterialPost); + } + + @Override + protected void doRegistrationStuff(Werkstoff w) { + if (w != null) { + if (!w.hasItemType(OrePrefixes.ore) || (w.getGenerationFeatures().blacklist & 0b1000) != 0) return; + GTModHandler.addValuableOre(this, w.getmID(), 1); + } + } + + @Override + public String getUnlocalizedName() { + return "bw.blockores.02"; + } + + public static boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData, boolean air, Block block, + int[] aBlockMeta) { + if (!air) { + aY = Math.min(aWorld.getActualHeight(), Math.max(aY, 1)); + } + + Block tBlock = aWorld.getBlock(aX, aY, aZ); + Block tOreBlock = WerkstoffLoader.BWSmallOres; + if (aMetaData < 0 || tBlock == Blocks.air && !air + || Block.getIdFromBlock(tBlock) != Block.getIdFromBlock(block)) { + return false; + } + final int aaY = aY; + if (Arrays.stream(aBlockMeta) + .noneMatch(e -> e == aWorld.getBlockMetadata(aX, aaY, aZ))) { + return false; + } + + aWorld.setBlock(aX, aY, aZ, tOreBlock, aMetaData, 0); + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof BWTileEntityMetaGeneratedOre metaTE) { + metaTE.mMetaData = (short) aMetaData; + } + + return true; + } +} diff --git a/src/main/java/bartworks/system/material/BWMetaGeneratedWerkstoffBlocks.java b/src/main/java/bartworks/system/material/BWMetaGeneratedWerkstoffBlocks.java new file mode 100644 index 0000000000..b7c1e73927 --- /dev/null +++ b/src/main/java/bartworks/system/material/BWMetaGeneratedWerkstoffBlocks.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import java.util.List; + +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTLanguageManager; + +public class BWMetaGeneratedWerkstoffBlocks extends BWMetaGeneratedBlocks { + + public BWMetaGeneratedWerkstoffBlocks(Material p_i45386_1_, Class tileEntity, + String blockName) { + super(p_i45386_1_, tileEntity, blockName); + this.blockTypeLocalizedName = GTLanguageManager.addStringLocalization( + "bw.blocktype." + OrePrefixes.block, + OrePrefixes.block.mLocalizedMaterialPre + "%material" + OrePrefixes.block.mLocalizedMaterialPost); + } + + @Override + protected void doRegistrationStuff(Werkstoff tMaterial) {} + + @Override + public String getUnlocalizedName() { + return "bw.werkstoffblocks.01"; + } + + @Override + public IIcon getIcon(int side, int meta) { + return Blocks.iron_block.getIcon(0, 0); + } + + @Override + public IIcon getIcon(IBlockAccess worldIn, int x, int y, int z, int side) { + return Blocks.iron_block.getIcon(0, 0); + } + + @Override + public void getSubBlocks(Item aItem, CreativeTabs tab, List aList) { + Werkstoff.werkstoffHashSet.stream() + .filter(tMaterial -> tMaterial.hasItemType(OrePrefixes.gem) || tMaterial.hasItemType(OrePrefixes.ingot)) + .map(tMaterial -> new ItemStack(aItem, 1, tMaterial.getmID())) + .forEach(aList::add); + } +} diff --git a/src/main/java/bartworks/system/material/BWNonMetaMaterialItems.java b/src/main/java/bartworks/system/material/BWNonMetaMaterialItems.java new file mode 100644 index 0000000000..a8ddb5a3bf --- /dev/null +++ b/src/main/java/bartworks/system/material/BWNonMetaMaterialItems.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import static gregtech.api.enums.GTValues.W; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import gregtech.api.interfaces.IItemContainer; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public enum BWNonMetaMaterialItems implements IItemContainer { + + Depleted_Tiberium_1, + Depleted_Tiberium_2, + Depleted_Tiberium_4, + TiberiumCell_1, + TiberiumCell_2, + TiberiumCell_4, + TheCoreCell, + Depleted_TheCoreCell; + + private ItemStack mStack; + private boolean mHasNotBeenSet = true; + + @Override + public IItemContainer set(Item aItem) { + this.mHasNotBeenSet = false; + if (aItem == null) return this; + ItemStack aStack = new ItemStack(aItem, 1, 0); + this.mStack = GTUtility.copyAmount(1, aStack); + return this; + } + + @Override + public IItemContainer set(ItemStack aStack) { + this.mHasNotBeenSet = false; + this.mStack = GTUtility.copyAmount(1, aStack); + return this; + } + + @Override + public IItemContainer hidden() { + codechicken.nei.api.API.hideItem(get(1L)); + return this; + } + + @Override + public Item getItem() { + if (this.mHasNotBeenSet) + throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); + if (GTUtility.isStackInvalid(this.mStack)) return null; + return this.mStack.getItem(); + } + + @Override + public Block getBlock() { + if (this.mHasNotBeenSet) + throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); + return GTUtility.getBlockFromItem(this.getItem()); + } + + @Override + public final boolean hasBeenSet() { + return !this.mHasNotBeenSet; + } + + @Override + public boolean isStackEqual(Object aStack) { + return this.isStackEqual(aStack, false, false); + } + + @Override + public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT) { + if (GTUtility.isStackInvalid(aStack)) return false; + return GTUtility + .areUnificationsEqual((ItemStack) aStack, aWildcard ? this.getWildcard(1) : this.get(1), aIgnoreNBT); + } + + @Override + public ItemStack get(long aAmount, Object... aReplacements) { + if (this.mHasNotBeenSet) + throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); + if (GTUtility.isStackInvalid(this.mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmount(aAmount, GTOreDictUnificator.get(this.mStack)); + } + + @Override + public ItemStack getWildcard(long aAmount, Object... aReplacements) { + if (this.mHasNotBeenSet) + throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); + if (GTUtility.isStackInvalid(this.mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmountAndMetaData(aAmount, W, GTOreDictUnificator.get(this.mStack)); + } + + @Override + public ItemStack getUndamaged(long aAmount, Object... aReplacements) { + if (this.mHasNotBeenSet) + throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); + if (GTUtility.isStackInvalid(this.mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmountAndMetaData(aAmount, 0, GTOreDictUnificator.get(this.mStack)); + } + + @Override + public ItemStack getAlmostBroken(long aAmount, Object... aReplacements) { + if (this.mHasNotBeenSet) + throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); + if (GTUtility.isStackInvalid(this.mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility + .copyAmountAndMetaData(aAmount, this.mStack.getMaxDamage() - 1, GTOreDictUnificator.get(this.mStack)); + } + + @Override + public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements) { + ItemStack rStack = this.get(1, aReplacements); + if (GTUtility.isStackInvalid(rStack)) return null; + rStack.setStackDisplayName(aDisplayName); + return GTUtility.copyAmount(aAmount, rStack); + } + + @Override + public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements) { + ItemStack rStack = this.get(1, aReplacements); + if (GTUtility.isStackInvalid(rStack)) return null; + GTModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); + return GTUtility.copyAmount(aAmount, rStack); + } + + @Override + public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements) { + if (this.mHasNotBeenSet) + throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); + if (GTUtility.isStackInvalid(this.mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmountAndMetaData(aAmount, aMetaValue, GTOreDictUnificator.get(this.mStack)); + } + + @Override + public IItemContainer registerOre(Object... aOreNames) { + if (this.mHasNotBeenSet) + throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); + for (Object tOreName : aOreNames) GTOreDictUnificator.registerOre(tOreName, this.get(1)); + return this; + } + + @Override + public IItemContainer registerWildcardAsOre(Object... aOreNames) { + if (this.mHasNotBeenSet) + throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); + for (Object tOreName : aOreNames) GTOreDictUnificator.registerOre(tOreName, this.getWildcard(1)); + return this; + } +} diff --git a/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedBlocksCasing.java b/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedBlocksCasing.java new file mode 100644 index 0000000000..536bdccf60 --- /dev/null +++ b/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedBlocksCasing.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraftforge.common.util.ForgeDirection; + +import bartworks.API.SideReference; +import bartworks.client.textures.PrefixTextureLinker; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.render.TextureFactory; + +public class BWTileEntityMetaGeneratedBlocksCasing extends TileEntityMetaGeneratedBlock { + + @Override + protected Block GetProperBlock() { + return WerkstoffLoader.BWBlockCasings; + } + + @Override + public ITexture[] getTexture(Block aBlock, ForgeDirection side) { + if (SideReference.Side.Client) { + Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData); + if (aMaterial != null) { + TextureSet set = aMaterial.getTexSet(); + ITexture aIconSet = TextureFactory.of( + PrefixTextureLinker.texMapBlocks.get(OrePrefixes.blockCasing) + .getOrDefault(set, TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]), + aMaterial.getRGBA()); + return new ITexture[] { TextureFactory.of(Blocks.iron_block), aIconSet }; + } + } + return new ITexture[] { TextureFactory.of(Blocks.iron_block), + TextureFactory.of(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]) }; + } +} diff --git a/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedBlocksCasingAdvanced.java b/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedBlocksCasingAdvanced.java new file mode 100644 index 0000000000..57399a8f87 --- /dev/null +++ b/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedBlocksCasingAdvanced.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraftforge.common.util.ForgeDirection; + +import bartworks.API.SideReference; +import bartworks.client.textures.PrefixTextureLinker; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.render.TextureFactory; + +public class BWTileEntityMetaGeneratedBlocksCasingAdvanced extends TileEntityMetaGeneratedBlock { + + @Override + protected Block GetProperBlock() { + return WerkstoffLoader.BWBlockCasingsAdvanced; + } + + @Override + public ITexture[] getTexture(Block aBlock, ForgeDirection side) { + if (SideReference.Side.Client) { + Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData); + if (aMaterial != null) { + TextureSet set = aMaterial.getTexSet(); + ITexture aIconSet = TextureFactory.of( + PrefixTextureLinker.texMapBlocks.get(OrePrefixes.blockCasingAdvanced) + .getOrDefault(set, TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]), + aMaterial.getRGBA()); + return new ITexture[] { TextureFactory.of(Blocks.iron_block), aIconSet }; + } + } + return new ITexture[] { TextureFactory.of(Blocks.iron_block), + TextureFactory.of(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]) }; + } +} diff --git a/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedOre.java b/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedOre.java new file mode 100644 index 0000000000..7f7d0716f5 --- /dev/null +++ b/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedOre.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import java.util.ArrayList; +import java.util.Random; + +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 gregtech.GTMod; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; + +public class BWTileEntityMetaGeneratedOre extends TileEntityMetaGeneratedBlock { + + protected static boolean shouldFortune = false; + protected static boolean shouldSilkTouch = false; + public boolean mNatural = false; + + @Override + public void readFromNBT(NBTTagCompound aNBT) { + super.readFromNBT(aNBT); + this.mNatural = aNBT.getBoolean("n"); + } + + @Override + public void writeToNBT(NBTTagCompound aNBT) { + super.writeToNBT(aNBT); + aNBT.setBoolean("n", this.mNatural); + } + + @Override + public ITexture[] getTexture(Block aBlock, ForgeDirection side) { + Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData); + if (aMaterial != null) { + ITexture aIconSet = TextureFactory + .of(aMaterial.getTexSet().mTextures[OrePrefixes.ore.mTextureIndex], aMaterial.getRGBA()); + return new ITexture[] { TextureFactory.of(Blocks.stone), aIconSet }; + } + return new ITexture[] { TextureFactory.of(Blocks.stone), + TextureFactory.of(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.ore.mTextureIndex]) }; + } + + @Override + protected Block GetProperBlock() { + return WerkstoffLoader.BWOres; + } + + @Override + public ArrayList getDrops(int aFortune) { + ArrayList rList = new ArrayList<>(); + if (this.mMetaData <= 0) { + rList.add(new ItemStack(Blocks.cobblestone, 1, 0)); + return rList; + } + Materials aOreMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData) + .getBridgeMaterial(); + if (shouldSilkTouch) { + rList.add(new ItemStack(this.GetProperBlock(), 1, this.mMetaData)); + } else { + switch (GTMod.gregtechproxy.oreDropSystem) { + case Item -> { + rList.add(GTOreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, 1)); + } + case FortuneItem -> { + // if shouldFortune and isNatural then get fortune drops + // if not shouldFortune or not isNatural then get normal drops + // if not shouldFortune and isNatural then get normal drops + // if shouldFortune and not isNatural then get normal drops + if (shouldFortune && this.mNatural && aFortune > 0) { + int aMinAmount = 1; + // Max applicable fortune + if (aFortune > 3) aFortune = 3; + long amount = (long) new Random().nextInt(aFortune) + aMinAmount; + for (int i = 0; i < amount; i++) { + rList.add(GTOreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, 1)); + } + } else { + rList.add(GTOreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, 1)); + } + } + case UnifiedBlock -> { + // Unified ore + rList.add(new ItemStack(this.GetProperBlock(), 1, this.mMetaData)); + } + case PerDimBlock -> { + // Per Dimension ore + rList.add(new ItemStack(this.GetProperBlock(), 1, this.mMetaData)); + } + case Block -> { + // Regular ore + rList.add(new ItemStack(this.GetProperBlock(), 1, this.mMetaData)); + } + } + } + return rList; + } +} diff --git a/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedSmallOre.java b/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedSmallOre.java new file mode 100644 index 0000000000..8764c7891e --- /dev/null +++ b/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedSmallOre.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import java.util.ArrayList; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.objects.XSTR; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class BWTileEntityMetaGeneratedSmallOre extends BWTileEntityMetaGeneratedOre { + + @Override + public ArrayList getDrops(int aFortune) { + ArrayList rList = new ArrayList<>(); + Materials aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData) + .getBridgeMaterial(); + + if (aMaterial != null) { + Random tRandom = new XSTR(this.xCoord ^ this.yCoord ^ this.zCoord); + ArrayList tSelector = new ArrayList<>(); + + ItemStack tStack = GTOreDictUnificator + .get(OrePrefixes.gemExquisite, aMaterial, GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 1L); + if (tStack != null) { + for (int i = 0; i < 1; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator + .get(OrePrefixes.gemFlawless, aMaterial, GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 1L); + if (tStack != null) { + for (int i = 0; i < 2; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L); + if (tStack != null) { + for (int i = 0; i < 12; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator + .get(OrePrefixes.gemFlawed, aMaterial, GTOreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1L), 1L); + if (tStack != null) { + for (int i = 0; i < 5; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1L); + if (tStack != null) { + for (int i = 0; i < 10; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator.get( + OrePrefixes.gemChipped, + aMaterial, + GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L), + 1L); + if (tStack != null) { + for (int i = 0; i < 5; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L); + if (tStack != null) { + for (int i = 0; i < 10; i++) { + tSelector.add(tStack); + } + } + if (tSelector.size() > 0) { + int i = 0; + + for (int j = Math.max(1, aFortune > 0 ? tRandom.nextInt(1 + aFortune) : 0); i < j; ++i) { + rList.add(GTUtility.copyAmount(1L, tSelector.get(tRandom.nextInt(tSelector.size())))); + } + } + if (tRandom.nextInt(3 + aFortune) > 1) { + rList.add( + GTOreDictUnificator + .get(tRandom.nextInt(3) > 0 ? OrePrefixes.dustImpure : OrePrefixes.dust, Materials.Stone, 1L)); + } + } + return rList; + } + + @Override + public ITexture[] getTexture(Block aBlock, ForgeDirection side) { + Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData); + if (aMaterial != null) { + ITexture aIconSet = TextureFactory + .of(aMaterial.getTexSet().mTextures[OrePrefixes.oreSmall.mTextureIndex], aMaterial.getRGBA()); + return new ITexture[] { TextureFactory.of(Blocks.stone), aIconSet }; + } + return new ITexture[] { TextureFactory.of(Blocks.stone), + TextureFactory.of(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.oreSmall.mTextureIndex]) }; + } + + @Override + protected Block GetProperBlock() { + return WerkstoffLoader.BWSmallOres; + } +} diff --git a/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedWerkstoffBlock.java b/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedWerkstoffBlock.java new file mode 100644 index 0000000000..f1fd978909 --- /dev/null +++ b/src/main/java/bartworks/system/material/BWTileEntityMetaGeneratedWerkstoffBlock.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraftforge.common.util.ForgeDirection; + +import bartworks.API.SideReference; +import bartworks.client.textures.PrefixTextureLinker; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.render.TextureFactory; + +public class BWTileEntityMetaGeneratedWerkstoffBlock extends TileEntityMetaGeneratedBlock { + + @Override + public ITexture[] getTexture(Block aBlock, ForgeDirection side) { + if (SideReference.Side.Client) { + Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData); + if (aMaterial != null) { + TextureSet set = aMaterial.getTexSet(); + ITexture aIconSet = TextureFactory.of( + set.mTextures[PrefixTextureLinker.blockTexMap.getOrDefault(set, OrePrefixes.block.mTextureIndex)], + aMaterial.getRGBA()); + return new ITexture[] { TextureFactory.of(Blocks.iron_block), aIconSet }; + } + } + return new ITexture[] { TextureFactory.of(Blocks.iron_block), + TextureFactory.of(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]) }; + } + + @Override + protected Block GetProperBlock() { + return WerkstoffLoader.BWBlocks; + } +} diff --git a/src/main/java/bartworks/system/material/CircuitGeneration/BWCircuitsLoader.java b/src/main/java/bartworks/system/material/CircuitGeneration/BWCircuitsLoader.java new file mode 100644 index 0000000000..55b42a662d --- /dev/null +++ b/src/main/java/bartworks/system/material/CircuitGeneration/BWCircuitsLoader.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.CircuitGeneration; + +public class BWCircuitsLoader { + + private static final BWMetaItems NEW_CIRCUITS = new BWMetaItems(); + + private BWCircuitsLoader() {} + + public static void initNewCircuits() { + + } +} diff --git a/src/main/java/bartworks/system/material/CircuitGeneration/BWMetaItems.java b/src/main/java/bartworks/system/material/CircuitGeneration/BWMetaItems.java new file mode 100644 index 0000000000..bafecfa0cd --- /dev/null +++ b/src/main/java/bartworks/system/material/CircuitGeneration/BWMetaItems.java @@ -0,0 +1,327 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.CircuitGeneration; + +import static gregtech.api.recipe.RecipeMaps.formingPressRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import java.util.ArrayList; +import java.util.BitSet; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; + +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.IIcon; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.MainMod; +import bartworks.common.loaders.ItemRegistry; +import bartworks.system.material.WerkstoffLoader; +import bartworks.util.BWUtil; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TCAspects; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IItemBehaviour; +import gregtech.api.interfaces.IItemContainer; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; + +public class BWMetaItems { + + public static BWMetaItems.BW_GT_MetaGenCircuits getCircuitParts() { + return BWMetaItems.NEW_CIRCUIT_PARTS; + } + + private static final BWMetaItems.BW_GT_MetaGenCircuits NEW_CIRCUIT_PARTS = new BWMetaItems.BW_GT_MetaGenCircuits(); + + static { + BWMetaItems.NEW_CIRCUIT_PARTS.addItem(0, "Circuit Imprint", "", SubTag.NO_UNIFICATION, SubTag.NO_RECYCLING); + BWMetaItems.NEW_CIRCUIT_PARTS.addItem(1, "Sliced Circuit", "", SubTag.NO_UNIFICATION, SubTag.NO_RECYCLING); + BWMetaItems.NEW_CIRCUIT_PARTS + .addItem(2, "Raw Imprint supporting Board", "A Raw Board needed for Circuit Imprints"); + BWMetaItems.NEW_CIRCUIT_PARTS.addItem(3, "Imprint supporting Board", "A Board needed for Circuit Imprints"); + + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.dust, 1), + WerkstoffLoader.ArInGaPhoBiBoTe.get(OrePrefixes.dust, 4)) + .itemOutputs(BWMetaItems.NEW_CIRCUIT_PARTS.getStack(2)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(formingPressRecipes); + + RecipeMaps.autoclaveRecipes.add( + new GTRecipe( + false, + new ItemStack[] { BWMetaItems.NEW_CIRCUIT_PARTS.getStack(2) }, + new ItemStack[] { BWMetaItems.NEW_CIRCUIT_PARTS.getStack(3) }, + null, + new int[] { 7500 }, + new FluidStack[] { Materials.SolderingAlloy.getMolten(576) }, + null, + 300, + (int) TierEU.RECIPE_EV, + BWUtil.CLEANROOM)); + } + + public static class BW_GT_MetaGenCircuits extends BWMetaItems.BW_GT_MetaGen_Item_Hook { + + public BW_GT_MetaGenCircuits() { + super("bwMetaGeneratedItem0"); + } + + public final ItemStack getStack(int meta) { + return getStack(meta, 1); + } + + public final ItemStack getStack(int meta, int stackSize) { + return new ItemStack(this, stackSize, meta); + } + + public final ItemStack getStackWithNBT(NBTTagCompound tag, int meta, int stackSize) { + ItemStack itemStack = getStack(meta, stackSize); + itemStack.setTagCompound(tag); + return itemStack; + } + + @Override + public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) { + if (aCreativeTab == this.getCreativeTab()) + for (NBTTagCompound tag : CircuitImprintLoader.recipeTagMap.keySet()) { + ItemStack stack = new ItemStack(BWMetaItems.NEW_CIRCUIT_PARTS, 1, 0); + stack.setTagCompound(tag); + aList.add(stack); + } + super.getSubItems(var1, aCreativeTab, aList); + } + + @Override + @SideOnly(Side.CLIENT) + public final void registerIcons(IIconRegister aIconRegister) { + + for (short i = 0; i < CircuitImprintLoader.reverseIDs; ++i) { + if (this.mEnabledItems.get(i)) { + BWUtil.set2DCoordTo1DArray( + i, + 0, + 2, + aIconRegister.registerIcon("gregtech:" + this.getUnlocalizedName() + "/" + i), + this.mIconList); + } + } + + for (short i = CircuitImprintLoader.reverseIDs; i < Short.MAX_VALUE; i++) { + if (this.mEnabledItems.get(i)) { + BWUtil.set2DCoordTo1DArray( + i, + 0, + 2, + Objects.requireNonNull(CircuitImprintLoader.circuitIIconRefs.get(i)) + .get(1) + .getIconIndex(), + this.mIconList); + BWUtil.set2DCoordTo1DArray( + i, + 1, + 2, + aIconRegister.registerIcon(MainMod.MOD_ID + ":WrapOverlay"), + this.mIconList); + } + } + } + + @Override + protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + if (aStack.getTagCompound() != null) { + ItemStack tagStack = CircuitImprintLoader.getStackFromTag(aStack.getTagCompound()); + String itemName = tagStack != null + ? GTLanguageManager.getTranslation(GTLanguageManager.getTranslateableItemStackName(tagStack)) + : "a circuit"; + + if (aStack.getItemDamage() == 0) { + aList.add("An imprint for: " + itemName); + } else if (aStack.getItemDamage() == 1) { + aList.add("A sliced " + itemName); + } + } else { + if (aStack.getItemDamage() == 0) { + aList.add("An imprint for a Circuit"); + } else if (aStack.getItemDamage() == 1) { + aList.add("A sliced Circuit"); + } + } + + super.addAdditionalToolTips(aList, aStack, aPlayer); + } + + } + + public static class BW_GT_MetaGen_Item_Hook extends MetaBaseItem { + + public static final HashSet sInstances = new HashSet<>(); + public final IIcon[] mIconList; + public final BitSet mEnabledItems; + + { + this.mIconList = new IIcon[Short.MAX_VALUE * 2]; + this.mEnabledItems = new BitSet(Short.MAX_VALUE); + } + + private BW_GT_MetaGen_Item_Hook(String aUnlocalized) { + super(aUnlocalized); + + this.setCreativeTab(new CreativeTabs("bw.MetaItems.0") { + + @Override + public Item getTabIconItem() { + return ItemRegistry.TAB; + } + }); + this.setHasSubtypes(true); + this.setMaxDamage(0); + BWMetaItems.BW_GT_MetaGen_Item_Hook.sInstances.add(this); + } + + @Override + public Long[] getElectricStats(ItemStack itemStack) { + return null; + } + + @Override + public Long[] getFluidContainerStats(ItemStack itemStack) { + return null; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public final ItemStack addItem(int aID, String aEnglish, String aToolTip, Object... aRandomData) { + if (aToolTip == null) { + aToolTip = ""; + } + ItemStack rStack = new ItemStack(this, 1, aID); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName(rStack) + ".name", aEnglish); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName(rStack) + ".tooltip", aToolTip); + List tAspects = new ArrayList<>(); + this.mEnabledItems.set(aID); + Object[] var7 = aRandomData; + int var8 = aRandomData.length; + + int var9; + Object tRandomData; + for (var9 = 0; var9 < var8; ++var9) { + tRandomData = var7[var9]; + if (tRandomData instanceof SubTag && tRandomData == SubTag.NO_UNIFICATION) { + GTOreDictUnificator.addToBlacklist(rStack); + } + } + + var7 = aRandomData; + var8 = aRandomData.length; + + for (var9 = 0; var9 < var8; ++var9) { + tRandomData = var7[var9]; + if (tRandomData != null) { + boolean tUseOreDict = true; + + if (tRandomData instanceof IItemBehaviour) { + this.addItemBehavior(aID, (IItemBehaviour) tRandomData); + tUseOreDict = false; + } + + if (tRandomData instanceof IItemContainer) { + ((IItemContainer) tRandomData).set(rStack); + tUseOreDict = false; + } + + if (!(tRandomData instanceof SubTag)) { + if (tRandomData instanceof TCAspects.TC_AspectStack) { + ((TCAspects.TC_AspectStack) tRandomData).addToAspectList(tAspects); + } else if (tRandomData instanceof ItemData) { + if (GTUtility.isStringValid(tRandomData)) { + GTOreDictUnificator.registerOre(tRandomData, rStack); + } else { + GTOreDictUnificator.addItemData(rStack, (ItemData) tRandomData); + } + } else if (tUseOreDict) { + GTOreDictUnificator.registerOre(tRandomData, rStack); + } + } + } + } + + if (GregTechAPI.sThaumcraftCompat != null) { + GregTechAPI.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); + } + + return rStack; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) { + int j = this.mEnabledItems.length(); + + for (int i = 0; i < j; ++i) { + if (this.mEnabledItems.get(i)) { + ItemStack tStack = new ItemStack(this, 1, i); + this.isItemStackUsable(tStack); + aList.add(tStack); + } + } + } + + @Override + protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + super.addAdditionalToolTips(aList, aStack, aPlayer); + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return this.getUnlocalizedName() + "." + aStack.getItemDamage(); + } + + @Override + public IIcon getIconFromDamage(int i) { + if (this.mEnabledItems.get(i)) return (IIcon) BWUtil.get2DCoordFrom1DArray(i, 0, 2, this.mIconList); + return null; + } + + @Override + public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, + int useRemaining) { + return this.getIconFromDamage(stack.getItemDamage()); + } + + @Override + public IIcon getIcon(ItemStack stack, int pass) { + return this.getIconFromDamage(stack.getItemDamage()); + } + } +} diff --git a/src/main/java/bartworks/system/material/CircuitGeneration/CircuitData.java b/src/main/java/bartworks/system/material/CircuitGeneration/CircuitData.java new file mode 100644 index 0000000000..fbf8600257 --- /dev/null +++ b/src/main/java/bartworks/system/material/CircuitGeneration/CircuitData.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.CircuitGeneration; + +import java.nio.ByteBuffer; + +import bartworks.util.MurmurHash3; + +public class CircuitData { + + private long aVoltage; + private int aSpecial; + private byte aTier; + + public CircuitData(long aVoltage, int aSpecial, byte aTier) { + this.aVoltage = aVoltage; + this.aSpecial = aSpecial; + this.aTier = aTier; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof CircuitData that)) return false; + if (this.getaVoltage() != that.getaVoltage() || this.getaSpecial() != that.getaSpecial()) return false; + return this.getaTier() == that.getaTier(); + } + + @Override + public int hashCode() { + return MurmurHash3.murmurhash3_x86_32( + ByteBuffer.allocate(13) + .put(this.aTier) + .putInt(this.aSpecial) + .putLong(this.aVoltage) + .array(), + 0, + 13, + 31); + } + + public long getaVoltage() { + return this.aVoltage; + } + + public void setaVoltage(long aVoltage) { + this.aVoltage = aVoltage; + } + + public int getaSpecial() { + return this.aSpecial; + } + + public void setaSpecial(int aSpecial) { + this.aSpecial = aSpecial; + } + + public byte getaTier() { + return this.aTier; + } + + public void setaTier(byte aTier) { + this.aTier = aTier; + } +} diff --git a/src/main/java/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java b/src/main/java/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java new file mode 100644 index 0000000000..c81f62e2ab --- /dev/null +++ b/src/main/java/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java @@ -0,0 +1,367 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.CircuitGeneration; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.oredict.ShapedOreRecipe; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; + +import bartworks.API.recipe.BWNBTDependantCraftingRecipe; +import bartworks.API.recipe.BartWorksRecipeMaps; +import bartworks.ASM.BWCoreStaticReplacementMethodes; +import bartworks.common.configs.ConfigHandler; +import bartworks.system.material.WerkstoffLoader; +import bartworks.util.BWUtil; +import bartworks.util.Pair; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; + +public class CircuitImprintLoader { + + public static short reverseIDs = Short.MAX_VALUE - 1; + + public static final ArrayListMultimap recipeTagMap = ArrayListMultimap.create(); + public static final HashBiMap circuitIIconRefs = HashBiMap.create(20); + public static final HashSet blacklistSet = new HashSet<>(); + static final HashBiMap bwCircuitTagMap = HashBiMap.create(20); + private static final HashSet recipeWorldCache = new HashSet<>(); + private static final HashSet gtrecipeWorldCache = new HashSet<>(); + private static final HashSet ORIGINAL_CAL_RECIPES = new HashSet<>(); + private static final HashSet MODIFIED_CAL_RECIPES = new HashSet<>(); + + public static void run() { + HashSet toRem = new HashSet<>(); + HashSet toAdd = new HashSet<>(); + + deleteCALRecipesAndTags(); + rebuildCircuitAssemblerMap(toRem, toAdd); + exchangeRecipesInList(toRem, toAdd); + makeCircuitImprintRecipes(); + + toRem = null; + toAdd = null; + } + + private static void reAddOriginalRecipes() { + RecipeMaps.circuitAssemblerRecipes.getBackend() + .removeRecipes(MODIFIED_CAL_RECIPES); + ORIGINAL_CAL_RECIPES.forEach(RecipeMaps.circuitAssemblerRecipes::add); + ORIGINAL_CAL_RECIPES.clear(); + MODIFIED_CAL_RECIPES.clear(); + } + + private static void rebuildCircuitAssemblerMap(HashSet toRem, HashSet toAdd) { + reAddOriginalRecipes(); + RecipeMaps.circuitAssemblerRecipes.getAllRecipes() + .forEach(e -> CircuitImprintLoader.handleCircuitRecipeRebuilding(e, toRem, toAdd)); + } + + private static void handleCircuitRecipeRebuilding(GTRecipe circuitRecipe, HashSet toRem, + HashSet toAdd) { + ItemStack[] outputs = circuitRecipe.mOutputs; + boolean isOrePass = isCircuitOreDict(outputs[0]); + String unlocalizedName = outputs[0].getUnlocalizedName(); + if (isOrePass || unlocalizedName.contains("Circuit") || unlocalizedName.contains("circuit")) { + + CircuitImprintLoader.recipeTagMap + .put(CircuitImprintLoader.getTagFromStack(outputs[0]), circuitRecipe.copy()); + + Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null + ? FluidRegistry.getFluid("molten.indalloy140") + : FluidRegistry.getFluid("molten.solderingalloy"); + + Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null + ? FluidRegistry.getFluid("molten.mutatedlivingsolder") + : FluidRegistry.getFluid("molten.solderingalloy"); + + if (circuitRecipe.mFluidInputs[0].isFluidEqual(Materials.SolderingAlloy.getMolten(0)) + || circuitRecipe.mFluidInputs[0].isFluidEqual(new FluidStack(solderIndalloy, 0)) + || circuitRecipe.mFluidInputs[0].isFluidEqual(new FluidStack(solderUEV, 0))) { + GTRecipe newRecipe = CircuitImprintLoader.reBuildRecipe(circuitRecipe); + if (newRecipe != null) BartWorksRecipeMaps.circuitAssemblyLineRecipes.addRecipe(newRecipe); + addCutoffRecipeToSets(toRem, toAdd, circuitRecipe); + } else if (circuitRecipe.mEUt > BWUtil.getTierVoltage(ConfigHandler.cutoffTier)) toRem.add(circuitRecipe); + } + } + + private static boolean isCircuitOreDict(ItemStack item) { + return BWUtil.isTieredCircuit(item) || BWUtil.getOreNames(item) + .stream() + .anyMatch(s -> "circuitPrimitiveArray".equals(s)); + } + + private static void exchangeRecipesInList(HashSet toRem, HashSet toAdd) { + toAdd.forEach(RecipeMaps.circuitAssemblerRecipes::add); + RecipeMaps.circuitAssemblerRecipes.getBackend() + .removeRecipes(toRem); + ORIGINAL_CAL_RECIPES.addAll(toRem); + MODIFIED_CAL_RECIPES.addAll(toAdd); + } + + private static void addCutoffRecipeToSets(HashSet toRem, HashSet toAdd, + GTRecipe circuitRecipe) { + if (circuitRecipe.mEUt > BWUtil.getTierVoltage(ConfigHandler.cutoffTier)) { + toRem.add(circuitRecipe); + toAdd.add(CircuitImprintLoader.makeMoreExpensive(circuitRecipe)); + } + } + + @SuppressWarnings("deprecation") + public static GTRecipe makeMoreExpensive(GTRecipe original) { + GTRecipe newRecipe = original.copy(); + for (ItemStack is : newRecipe.mInputs) { + if (!BWUtil.isTieredCircuit(is)) { + is.stackSize = Math.min(is.stackSize * 6, 64); + if (is.stackSize > is.getItem() + .getItemStackLimit() || is.stackSize > is.getMaxStackSize()) is.stackSize = is.getMaxStackSize(); + } + } + newRecipe.mFluidInputs[0].amount *= 4; + newRecipe.mDuration *= 4; + return newRecipe; + } + + public static GTRecipe reBuildRecipe(GTRecipe original) { + ItemStack[] in = new ItemStack[6]; + BiMap inversed = CircuitImprintLoader.circuitIIconRefs.inverse(); + + for (int i = 0; i < 6; i++) { + try { + replaceCircuits(inversed, original, in, i); + replaceComponents(in, original, i); + } catch (ArrayIndexOutOfBoundsException e) { + break; + } catch (NullPointerException e) { + e.printStackTrace(); + } + } + + if (CircuitImprintLoader.checkForBlacklistedComponents(in)) { + return null; + } + + return new GTRecipe( + false, + in, + new ItemStack[] { getOutputMultiplied(original) }, + BWMetaItems.getCircuitParts() + .getStackWithNBT(CircuitImprintLoader.getTagFromStack(original.mOutputs[0]), 0, 0), + null, + original.mFluidInputs, + null, + original.mDuration * 12, + original.mEUt, + 0); + } + + private static ItemStack getOutputMultiplied(GTRecipe original) { + ItemStack out = original.copy() + .getOutput(0); + out.stackSize *= 16; + return out; + } + + private static void replaceCircuits(BiMap inversed, GTRecipe original, ItemStack[] in, int index) { + for (ItemList il : inversed.keySet()) { + if (GTUtility.areStacksEqual(il.get(1), replaceCircuitParts(original.mInputs[index]))) { + in[index] = BWMetaItems.getCircuitParts() + .getStack(inversed.get(il), original.mInputs[index].stackSize); + } + } + } + + private static final List> circuitPartsToReplace = Collections.unmodifiableList( + Arrays.asList( + new Pair<>(ItemList.Circuit_Parts_Resistor.get(1), ItemList.Circuit_Parts_ResistorSMD.get(1)), + new Pair<>(ItemList.Circuit_Parts_Diode.get(1), ItemList.Circuit_Parts_DiodeSMD.get(1)), + new Pair<>(ItemList.Circuit_Parts_Transistor.get(1), ItemList.Circuit_Parts_TransistorSMD.get(1)), + new Pair<>(ItemList.Circuit_Parts_Capacitor.get(1), ItemList.Circuit_Parts_CapacitorSMD.get(1)), + new Pair<>(ItemList.Circuit_Parts_Coil.get(1), ItemList.Circuit_Parts_InductorSMD.get(1)))); + + private static ItemStack replaceCircuitParts(ItemStack stack) { + for (Pair pair : circuitPartsToReplace) { + if (GTUtility.areStacksEqual(pair.getKey(), stack)) { + ItemStack newStack = pair.getValue(); + newStack.stackSize = stack.stackSize; + return newStack; + } + } + return stack; + } + + @SuppressWarnings("deprecation") + private static void replaceComponents(ItemStack[] in, GTRecipe original, int index) + throws ArrayIndexOutOfBoundsException { + if (original.mInputs[index] != null && in[index] == null) { + // big wires + if (BWUtil.checkStackAndPrefix(original.mInputs[index]) + && GTOreDictUnificator.getAssociation(original.mInputs[index]).mPrefix == OrePrefixes.wireGt01) { + in[index] = GTOreDictUnificator.get( + OrePrefixes.wireGt16, + GTOreDictUnificator.getAssociation(original.mInputs[index]).mMaterial.mMaterial, + original.mInputs[index].stackSize); + // fine wires + } else if (BWUtil.checkStackAndPrefix(original.mInputs[index]) + && GTOreDictUnificator.getAssociation(original.mInputs[index]).mPrefix == OrePrefixes.wireFine) { + in[index] = GTOreDictUnificator.get( + OrePrefixes.wireGt04, + GTOreDictUnificator.getAssociation(original.mInputs[index]).mMaterial.mMaterial, + original.mInputs[index].stackSize); + if (in[index] == null) { + in[index] = GTOreDictUnificator.get( + OrePrefixes.wireFine, + GTOreDictUnificator.getAssociation(original.mInputs[index]).mMaterial.mMaterial, + original.mInputs[index].stackSize * 16); + } + // other components + } else { + in[index] = original.mInputs[index].copy(); + in[index].stackSize *= 16; + if (in[index].stackSize > in[index].getItem() + .getItemStackLimit() || in[index].stackSize > in[index].getMaxStackSize()) + in[index].stackSize = in[index].getMaxStackSize(); + } + } + } + + private static void makeCircuitImprintRecipes() { + removeOldRecipesFromRegistries(); + CircuitImprintLoader.recipeTagMap.keySet() + .forEach(e -> { + makeAndAddSlicingRecipe(e); + makeAndAddCraftingRecipes(e); + }); + } + + private static boolean checkForBlacklistedComponents(ItemStack[] itemStacks) { + for (ItemStack is : itemStacks) { + for (ItemStack is2 : CircuitImprintLoader.blacklistSet) { + if (GTUtility.areStacksEqual(is, is2)) return true; + } + } + return false; + } + + private static void removeOldRecipesFromRegistries() { + recipeWorldCache.forEach( + CraftingManager.getInstance() + .getRecipeList()::remove); + BWCoreStaticReplacementMethodes.clearRecentlyUsedRecipes(); + RecipeMaps.slicerRecipes.getBackend() + .removeRecipes(gtrecipeWorldCache); + recipeWorldCache.forEach(r -> { + try { + BWUtil.getGTBufferedRecipeList() + .remove(r); + } catch (Exception e) { + e.printStackTrace(); + } + }); + recipeWorldCache.clear(); + gtrecipeWorldCache.clear(); + } + + private static void makeAndAddSlicingRecipe(NBTTagCompound tag) { + ItemStack stack = CircuitImprintLoader.getStackFromTag(tag); + int eut = Integer.MAX_VALUE; + + for (GTRecipe recipe : CircuitImprintLoader.recipeTagMap.get(tag)) { + eut = Math.min(eut, recipe.mEUt); + } + + eut = Math.min( + eut, + BWUtil.getMachineVoltageFromTier( + BWUtil.getCircuitTierFromOreDictName( + OreDictionary.getOreName( + OreDictionary.getOreIDs(stack) != null && OreDictionary.getOreIDs(stack).length > 0 + ? OreDictionary.getOreIDs(stack)[0] + : -1)))); + GTRecipe slicingRecipe = new GTRecipe( + true, + new ItemStack[] { stack, ItemList.Shape_Slicer_Flat.get(0) }, + new ItemStack[] { BWMetaItems.getCircuitParts() + .getStackWithNBT(tag, 1, 1) }, + null, + null, + null, + null, + 300, + eut, + BWUtil.CLEANROOM); + gtrecipeWorldCache.add(slicingRecipe); + RecipeMaps.slicerRecipes.add(slicingRecipe); + } + + private static void makeAndAddCraftingRecipes(NBTTagCompound tag) { + ItemStack circuit = BWMetaItems.getCircuitParts() + .getStackWithNBT(tag, 0, 1); + Object[] imprintRecipe = { " X ", "GPG", " X ", 'P', BWMetaItems.getCircuitParts() + .getStackWithNBT(tag, 1, 1), 'G', WerkstoffLoader.Prasiolite.get(OrePrefixes.gemExquisite, 1), 'X', + BWMetaItems.getCircuitParts() + .getStack(3) }; + + IRecipe bwrecipe = new BWNBTDependantCraftingRecipe(circuit, imprintRecipe); + ShapedOreRecipe gtrecipe = BWUtil.createGTCraftingRecipe( + circuit, + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.KEEPNBT + | GTModHandler.RecipeBits.BUFFERED, + imprintRecipe); + + // Adds the actual recipe + recipeWorldCache.add(bwrecipe); + GameRegistry.addRecipe(bwrecipe); + // Adds the NEI visual recipe + recipeWorldCache.add(gtrecipe); + GameRegistry.addRecipe(gtrecipe); + } + + public static NBTTagCompound getTagFromStack(ItemStack stack) { + if (GTUtility.isStackValid(stack)) return BWUtil.setStackSize(stack.copy(), 1) + .writeToNBT(new NBTTagCompound()); + return new NBTTagCompound(); + } + + public static ItemStack getStackFromTag(NBTTagCompound tagCompound) { + return ItemStack.loadItemStackFromNBT(tagCompound); + } + + private static void deleteCALRecipesAndTags() { + BartWorksRecipeMaps.circuitAssemblyLineRecipes.getBackend() + .clearRecipes(); + recipeTagMap.clear(); + } +} diff --git a/src/main/java/bartworks/system/material/CircuitGeneration/CircuitPartLoader.java b/src/main/java/bartworks/system/material/CircuitGeneration/CircuitPartLoader.java new file mode 100644 index 0000000000..ea4d222cac --- /dev/null +++ b/src/main/java/bartworks/system/material/CircuitGeneration/CircuitPartLoader.java @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.CircuitGeneration; + +import static gregtech.api.enums.ItemList.Circuit_Board_Advanced; +import static gregtech.api.enums.ItemList.Circuit_Board_Basic; +import static gregtech.api.enums.ItemList.Circuit_Board_Bio; +import static gregtech.api.enums.ItemList.Circuit_Board_Bio_Ultra; +import static gregtech.api.enums.ItemList.Circuit_Board_Coated; +import static gregtech.api.enums.ItemList.Circuit_Board_Coated_Basic; +import static gregtech.api.enums.ItemList.Circuit_Board_Elite; +import static gregtech.api.enums.ItemList.Circuit_Board_Epoxy; +import static gregtech.api.enums.ItemList.Circuit_Board_Epoxy_Advanced; +import static gregtech.api.enums.ItemList.Circuit_Board_Fiberglass; +import static gregtech.api.enums.ItemList.Circuit_Board_Fiberglass_Advanced; +import static gregtech.api.enums.ItemList.Circuit_Board_Multifiberglass; +import static gregtech.api.enums.ItemList.Circuit_Board_Multifiberglass_Elite; +import static gregtech.api.enums.ItemList.Circuit_Board_Optical; +import static gregtech.api.enums.ItemList.Circuit_Board_Phenolic; +import static gregtech.api.enums.ItemList.Circuit_Board_Phenolic_Good; +import static gregtech.api.enums.ItemList.Circuit_Board_Plastic; +import static gregtech.api.enums.ItemList.Circuit_Board_Plastic_Advanced; +import static gregtech.api.enums.ItemList.Circuit_Board_Wetware; +import static gregtech.api.enums.ItemList.Circuit_Board_Wetware_Extreme; +import static gregtech.api.enums.ItemList.Circuit_Chip_BioCPU; +import static gregtech.api.enums.ItemList.Circuit_Chip_Biocell; +import static gregtech.api.enums.ItemList.Circuit_Chip_CPU; +import static gregtech.api.enums.ItemList.Circuit_Chip_CrystalCPU; +import static gregtech.api.enums.ItemList.Circuit_Chip_CrystalSoC; +import static gregtech.api.enums.ItemList.Circuit_Chip_CrystalSoC2; +import static gregtech.api.enums.ItemList.Circuit_Chip_HPIC; +import static gregtech.api.enums.ItemList.Circuit_Chip_ILC; +import static gregtech.api.enums.ItemList.Circuit_Chip_LPIC; +import static gregtech.api.enums.ItemList.Circuit_Chip_NAND; +import static gregtech.api.enums.ItemList.Circuit_Chip_NOR; +import static gregtech.api.enums.ItemList.Circuit_Chip_NPIC; +import static gregtech.api.enums.ItemList.Circuit_Chip_NanoCPU; +import static gregtech.api.enums.ItemList.Circuit_Chip_NeuroCPU; +import static gregtech.api.enums.ItemList.Circuit_Chip_Optical; +import static gregtech.api.enums.ItemList.Circuit_Chip_PIC; +import static gregtech.api.enums.ItemList.Circuit_Chip_PPIC; +import static gregtech.api.enums.ItemList.Circuit_Chip_QPIC; +import static gregtech.api.enums.ItemList.Circuit_Chip_QuantumCPU; +import static gregtech.api.enums.ItemList.Circuit_Chip_Ram; +import static gregtech.api.enums.ItemList.Circuit_Chip_Simple_SoC; +import static gregtech.api.enums.ItemList.Circuit_Chip_SoC; +import static gregtech.api.enums.ItemList.Circuit_Chip_SoC2; +import static gregtech.api.enums.ItemList.Circuit_Chip_Stemcell; +import static gregtech.api.enums.ItemList.Circuit_Chip_UHPIC; +import static gregtech.api.enums.ItemList.Circuit_Chip_ULPIC; +import static gregtech.api.enums.ItemList.Circuit_Integrated; +import static gregtech.api.enums.ItemList.Circuit_Integrated_Good; +import static gregtech.api.enums.ItemList.Circuit_Parts_Advanced; +import static gregtech.api.enums.ItemList.Circuit_Parts_CapacitorASMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_CapacitorSMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_CapacitorXSMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_Chip_Bioware; +import static gregtech.api.enums.ItemList.Circuit_Parts_Crystal_Chip_Elite; +import static gregtech.api.enums.ItemList.Circuit_Parts_Crystal_Chip_Master; +import static gregtech.api.enums.ItemList.Circuit_Parts_Crystal_Chip_Wetware; +import static gregtech.api.enums.ItemList.Circuit_Parts_DiodeASMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_DiodeSMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_DiodeXSMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_GlassFiber; +import static gregtech.api.enums.ItemList.Circuit_Parts_InductorASMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_InductorSMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_InductorXSMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_PetriDish; +import static gregtech.api.enums.ItemList.Circuit_Parts_ResistorASMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_ResistorSMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_ResistorXSMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_TransistorASMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_TransistorSMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_TransistorXSMD; +import static gregtech.api.enums.ItemList.Circuit_Parts_Vacuum_Tube; +import static gregtech.api.enums.ItemList.Circuit_Parts_Wiring_Advanced; +import static gregtech.api.enums.ItemList.Circuit_Parts_Wiring_Basic; +import static gregtech.api.enums.ItemList.Circuit_Parts_Wiring_Elite; +import static gregtech.api.enums.ItemList.Optical_Cpu_Containment_Housing; +import static gregtech.api.enums.ItemList.Optically_Compatible_Memory; +import static gregtech.api.enums.ItemList.Optically_Perfected_CPU; +import static gregtech.api.enums.ItemList.values; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import net.minecraft.item.ItemStack; + +import bartworks.client.renderer.BWItemRenderer; +import cpw.mods.fml.common.FMLCommonHandler; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; + +public class CircuitPartLoader implements Runnable { + + @Override + public void run() { + CircuitPartLoader.makeCircuitParts(); + if (FMLCommonHandler.instance() + .getEffectiveSide() + .isClient()) new BWItemRenderer(); + } + + public static void makeCircuitParts() { + ItemList[] itemLists = values(); + for (ItemList single : itemLists) { + if (!single.hasBeenSet()) continue; + if (single.toString() + .contains("Wafer") + || single.toString() + .contains("Circuit_Silicon_Ingot") + || single.toString() + .contains("Raw") + || single.toString() + .contains("raw") + || single.toString() + .contains("Glass_Tube") + || single == Circuit_Parts_GlassFiber + || single == Circuit_Parts_Advanced + || single == Circuit_Parts_Wiring_Advanced + || single == Circuit_Parts_Wiring_Elite + || single == Circuit_Parts_Wiring_Basic + || single == Circuit_Integrated + || single == Circuit_Parts_PetriDish + || single == Circuit_Parts_Vacuum_Tube + || single == Circuit_Integrated_Good) { + + CircuitImprintLoader.blacklistSet.add(single.get(1)); + } + } + + for (ItemList single : CIRCUIT_PARTS) { + if (!single.hasBeenSet()) continue; + ItemStack itemStack = single.get(1); + if (!GTUtility.isStackValid(itemStack)) continue; + ArrayList toolTip = new ArrayList<>(); + if (FMLCommonHandler.instance() + .getEffectiveSide() + .isClient()) + single.getItem() + .addInformation( + single.get(1) + .copy(), + null, + toolTip, + true); + String tt = !toolTip.isEmpty() ? toolTip.get(0) : ""; + // tt += "Internal Name = "+single; + String localised = GTLanguageManager + .getTranslation(GTLanguageManager.getTranslateableItemStackName(itemStack)); + BWMetaItems.getCircuitParts() + .addItem(CircuitImprintLoader.reverseIDs, "Wrap of " + localised + "s", tt); + + GTValues.RA.stdBuilder() + .itemInputs( + single.get(16) + .copy(), + GTUtility.getIntegratedCircuit(16)) + .itemOutputs( + BWMetaItems.getCircuitParts() + .getStack(CircuitImprintLoader.reverseIDs)) + .fluidInputs(Materials.Plastic.getMolten(72)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + + CircuitImprintLoader.circuitIIconRefs.put(CircuitImprintLoader.reverseIDs, single); + CircuitImprintLoader.reverseIDs--; + } + } + + /** + * Contains all the circuit parts we want to generate wrapped version of. New entries MUST be placed at the END of + * this list, to prevent id shift. + */ + private static final List CIRCUIT_PARTS = Collections.unmodifiableList( + Arrays.asList( + Circuit_Board_Basic, + Circuit_Board_Advanced, + Circuit_Board_Elite, + Circuit_Parts_Crystal_Chip_Elite, + Circuit_Parts_Crystal_Chip_Master, + Circuit_Board_Coated, + Circuit_Board_Coated_Basic, + Circuit_Board_Phenolic, + Circuit_Board_Phenolic_Good, + Circuit_Board_Epoxy, + Circuit_Board_Epoxy_Advanced, + Circuit_Board_Fiberglass, + Circuit_Board_Fiberglass_Advanced, + Circuit_Board_Multifiberglass_Elite, + Circuit_Board_Multifiberglass, + Circuit_Board_Wetware, + Circuit_Board_Wetware_Extreme, + Circuit_Board_Plastic, + Circuit_Board_Plastic_Advanced, + Circuit_Board_Bio, + Circuit_Board_Bio_Ultra, + Circuit_Parts_ResistorSMD, + Circuit_Parts_InductorSMD, + Circuit_Parts_DiodeSMD, + Circuit_Parts_TransistorSMD, + Circuit_Parts_CapacitorSMD, + Circuit_Parts_ResistorASMD, + Circuit_Parts_DiodeASMD, + Circuit_Parts_TransistorASMD, + Circuit_Parts_CapacitorASMD, + Circuit_Chip_ILC, + Circuit_Chip_Ram, + Circuit_Chip_NAND, + Circuit_Chip_NOR, + Circuit_Chip_CPU, + Circuit_Chip_SoC, + Circuit_Chip_SoC2, + Circuit_Chip_PIC, + Circuit_Chip_Simple_SoC, + Circuit_Chip_HPIC, + Circuit_Chip_UHPIC, + Circuit_Chip_ULPIC, + Circuit_Chip_LPIC, + Circuit_Chip_NPIC, + Circuit_Chip_PPIC, + Circuit_Chip_QPIC, + Circuit_Chip_NanoCPU, + Circuit_Chip_QuantumCPU, + Circuit_Chip_CrystalCPU, + Circuit_Chip_CrystalSoC, + Circuit_Chip_CrystalSoC2, + Circuit_Chip_NeuroCPU, + Circuit_Chip_BioCPU, + Circuit_Chip_Stemcell, + Circuit_Chip_Biocell, + Circuit_Parts_ResistorXSMD, + Circuit_Parts_DiodeXSMD, + Circuit_Parts_TransistorXSMD, + Circuit_Parts_CapacitorXSMD, + Circuit_Parts_InductorASMD, + Circuit_Parts_InductorXSMD, + Circuit_Chip_Optical, + Circuit_Board_Optical, + Optically_Perfected_CPU, + Optical_Cpu_Containment_Housing, + Optically_Compatible_Memory, + Circuit_Parts_Crystal_Chip_Wetware, + Circuit_Parts_Chip_Bioware)); +} diff --git a/src/main/java/bartworks/system/material/TileEntityMetaGeneratedBlock.java b/src/main/java/bartworks/system/material/TileEntityMetaGeneratedBlock.java new file mode 100644 index 0000000000..c37613aa17 --- /dev/null +++ b/src/main/java/bartworks/system/material/TileEntityMetaGeneratedBlock.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.Packet; +import net.minecraft.tileentity.TileEntity; + +import bartworks.MainMod; +import bartworks.common.net.MetaBlockPacket; +import gregtech.api.interfaces.tileentity.ITexturedTileEntity; + +public abstract class TileEntityMetaGeneratedBlock extends TileEntity implements ITexturedTileEntity { + + public short mMetaData; + + @Override + public boolean canUpdate() { + return false; + } + + @Override + public void readFromNBT(NBTTagCompound aNBT) { + super.readFromNBT(aNBT); + this.mMetaData = aNBT.getShort("m"); + } + + @Override + public void writeToNBT(NBTTagCompound aNBT) { + super.writeToNBT(aNBT); + aNBT.setShort("m", this.mMetaData); + } + + @Override + public Packet getDescriptionPacket() { + if (!this.worldObj.isRemote) MainMod.BW_Network_instance.sendPacketToAllPlayersInRange( + this.worldObj, + new MetaBlockPacket(this.xCoord, (short) this.yCoord, this.zCoord, this.mMetaData), + this.xCoord, + this.zCoord); + return null; + } + + protected abstract Block GetProperBlock(); + + public ArrayList getDrops(int aFortune) { + ArrayList rList = new ArrayList<>(); + if (this.mMetaData <= 0) { + rList.add(new ItemStack(Blocks.cobblestone, 1, 0)); + return rList; + } + rList.add(new ItemStack(this.GetProperBlock(), 1, this.mMetaData)); + return rList; + } +} diff --git a/src/main/java/bartworks/system/material/Werkstoff.java b/src/main/java/bartworks/system/material/Werkstoff.java new file mode 100644 index 0000000000..1c29d52a92 --- /dev/null +++ b/src/main/java/bartworks/system/material/Werkstoff.java @@ -0,0 +1,1263 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import static gregtech.api.enums.Mods.GalaxySpace; +import static net.minecraft.util.EnumChatFormatting.DARK_PURPLE; +import static net.minecraft.util.EnumChatFormatting.GREEN; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.MainMod; +import bartworks.system.oredict.OreDictHandler; +import bartworks.util.BWColorUtil; +import bartworks.util.BWUtil; +import bartworks.util.MurmurHash3; +import bartworks.util.NonNullWrappedHashMap; +import bartworks.util.Pair; +import bwcrossmod.BartWorksCrossmod; +import bwcrossmod.tgregworks.MaterialsInjector; +import cpw.mods.fml.common.Loader; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.FluidState; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Mods; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TCAspects; +import gregtech.api.enums.TextureSet; +import gregtech.api.interfaces.IColorModulationContainer; +import gregtech.api.interfaces.ISubTagContainer; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; +import thaumcraft.api.aspects.Aspect; + +public class Werkstoff implements IColorModulationContainer, ISubTagContainer { + + public static final LinkedHashSet werkstoffHashSet = new LinkedHashSet<>(); + public static final LinkedHashMap werkstoffHashMap = new LinkedHashMap<>(); + public static final LinkedHashMap werkstoffNameHashMap = new LinkedHashMap<>(); + + public static final Map modNameOverrides = new HashMap<>() { + + private static final long serialVersionUID = 6399917619058898648L; + + { + this.put(GalaxySpace.ID, DARK_PURPLE + "GalaxySpace"); + } + }; + + private static final List BWModNames = Arrays + .asList(MainMod.NAME, BartWorksCrossmod.NAME, MaterialsInjector.NAME); + + private static final HashSet idHashSet = new HashSet<>(); + + private static final Werkstoff.Stats DEFAULT_NULL_STATS = new Werkstoff.Stats(); + private static final Werkstoff.GenerationFeatures DEFAULT_NULL_GENERATION_FEATURES = new Werkstoff.GenerationFeatures() + .disable(); + public static Werkstoff default_null_Werkstoff; + + private final HashSet ADDITIONAL_OREDICT = new HashSet<>(); + private final List mOreByProducts = new ArrayList<>(); + private final LinkedHashSet> CONTENTS = new LinkedHashSet<>(); + private final HashSet SUBTAGS = new HashSet<>(); + private byte[] rgb = new byte[3]; + private final String defaultName; + private String toolTip; + + private Werkstoff.Stats stats; + private final Werkstoff.Types type; + private final Werkstoff.GenerationFeatures generationFeatures; + private final short mID; + private final TextureSet texSet; + private Materials bridgeMaterial; + private final String owner; + + public Materials getBridgeMaterial() { + return this.bridgeMaterial; + } + + public void setBridgeMaterial(Materials bridgeMaterial) { + this.bridgeMaterial = bridgeMaterial; + } + + public static void init() { + Werkstoff.default_null_Werkstoff = new Werkstoff( + new short[3], + "_NULL", + "Default null Werkstoff", + Werkstoff.DEFAULT_NULL_STATS, + Werkstoff.Types.UNDEFINED, + Werkstoff.DEFAULT_NULL_GENERATION_FEATURES, + -1, + TextureSet.SET_NONE); + } + + /** + * GT Materials Bridge Constructor + * + * @param materials a GT Materials + * @param generationFeatures the new Types you want to add + * @param type - self explainatory + * @param mID > 31_766 && <= 32_767 + */ + public Werkstoff(Materials materials, Werkstoff.GenerationFeatures generationFeatures, Types type, int mID) { + this( + materials.mRGBa, + materials.mDefaultLocalName, + materials.getToolTip(), + type == null ? materials.mElement != null ? Types.ELEMENT : Types.UNDEFINED : type, + generationFeatures, + mID, + materials.mIconSet, + (List) materials.mOreByProducts, + new Pair<>(materials, 1)); + if (mID <= 31_766 || mID > 32_767) throw new IllegalArgumentException(); + this.stats.mass = materials.getMass(); + this.stats.protons = materials.getProtons(); + this.stats.meltingPoint = materials.mMeltingPoint; + this.stats.neutrons = materials.getNeutrons(); + this.stats.speedOverride = materials.mToolSpeed; + this.stats.durOverride = materials.mDurability; + this.stats.qualityOverride = materials.mToolQuality; + this.stats.setGas(materials.mHasGas); + this.stats.setRadioactive(materials.isRadioactive()); + this.stats.setBlastFurnace(materials.mBlastFurnaceRequired); + this.stats.setMeltingVoltage(120); + if (type == Types.COMPOUND) { + this.stats.setElektrolysis(true); + this.generationFeatures.addChemicalRecipes(); + } else if (type == Types.MIXTURE) { + this.stats.setCentrifuge(true); + this.generationFeatures.addMixerRecipes(); + } + } + + @SafeVarargs + public Werkstoff(short[] rgba, String defaultName, Werkstoff.Types type, int meltingpoint, + Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, + Pair... contents) { + this( + rgba, + defaultName, + Werkstoff.Types.getDefaultStatForType(type) + .setMeltingPoint(meltingpoint), + type, + generationFeatures, + mID, + texSet, + contents); + } + + @SafeVarargs + public Werkstoff(short[] rgba, String defaultName, Werkstoff.Types type, + Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, + Pair... contents) { + this( + rgba, + defaultName, + Werkstoff.Types.getDefaultStatForType(type), + type, + generationFeatures, + mID, + texSet, + contents); + } + + @SafeVarargs + public Werkstoff(short[] rgba, String defaultName, Werkstoff.Types type, int meltingpoint, + Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, + List oreByProduct, Pair... contents) { + this( + rgba, + defaultName, + Werkstoff.Types.getDefaultStatForType(type) + .setMeltingPoint(meltingpoint), + type, + generationFeatures, + mID, + texSet, + oreByProduct, + contents); + } + + @SafeVarargs + public Werkstoff(short[] rgba, String defaultName, Werkstoff.Types type, + Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, + List oreByProduct, Pair... contents) { + this( + rgba, + defaultName, + Werkstoff.Types.getDefaultStatForType(type), + type, + generationFeatures, + mID, + texSet, + oreByProduct, + contents); + } + + @SafeVarargs + public Werkstoff(short[] rgba, String toolTip, String defaultName, Werkstoff.Types type, + Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, + List oreByProduct, Pair... contents) { + this( + rgba, + toolTip, + defaultName, + Werkstoff.Types.getDefaultStatForType(type), + type, + generationFeatures, + mID, + texSet, + oreByProduct, + contents); + } + + @SafeVarargs + public Werkstoff(short[] rgba, String defaultName, Werkstoff.Stats stats, Werkstoff.Types type, + Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, + List oreByProduct, Pair... contents) { + this(rgba, defaultName, "", stats, type, generationFeatures, mID, texSet, contents); + this.mOreByProducts.clear(); + this.mOreByProducts.addAll(oreByProduct); + } + + @SafeVarargs + public Werkstoff(short[] rgba, String defaultName, Werkstoff.Stats stats, Werkstoff.Types type, + Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, + Pair... contents) { + this(rgba, defaultName, "", stats, type, generationFeatures, mID, texSet, contents); + } + + @SafeVarargs + public Werkstoff(short[] rgba, String defaultName, String toolTip, Werkstoff.Stats stats, Werkstoff.Types type, + Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, + List oreByProduct, Pair... contents) { + this(rgba, defaultName, toolTip, stats, type, generationFeatures, mID, texSet, contents); + this.mOreByProducts.clear(); + this.mOreByProducts.addAll(oreByProduct); + } + + @SafeVarargs + public Werkstoff(short[] rgba, String defaultName, String toolTip, Werkstoff.Stats stats, Werkstoff.Types type, + Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, + Pair... contents) { + + if (Werkstoff.idHashSet.contains((short) mID)) + throw new UnsupportedOperationException("ID (" + mID + ") is already in use!"); + Werkstoff.idHashSet.add((short) mID); + if (type == null) type = Werkstoff.Types.UNDEFINED; + + this.mID = (short) mID; + this.defaultName = defaultName; + // Ensure that localization key are written to the lang file + GregTechAPI.sAfterGTPreload.add(() -> { this.getLocalizedName(); }); + this.stats = stats; + this.type = type; + this.generationFeatures = generationFeatures; + this.setRgb(BWColorUtil.correctCorlorArray(rgba)); + this.CONTENTS.addAll(Arrays.asList(contents)); + this.toolTip = ""; + if (toolTip.isEmpty()) { + for (Pair p : contents) { + if (contents.length > 1) { + if (p.getKey() instanceof Materials) { + if (((Materials) p.getKey()).mMaterialList.size() > 1 && p.getValue() > 1) + this.toolTip += "(" + getFormula((Materials) p.getKey()) + + ")" + + BWUtil.subscriptNumber(p.getValue()); + else this.toolTip += getFormula((Materials) p.getKey()) + + (p.getValue() > 1 ? BWUtil.subscriptNumber(p.getValue()) : ""); + } + if (p.getKey() instanceof Werkstoff) { + if (((Werkstoff) p.getKey()).CONTENTS.size() > 1 && p.getValue() > 1) + this.toolTip += "(" + getFormula((Werkstoff) p.getKey()) + + ")" + + BWUtil.subscriptNumber(p.getValue()); + else this.toolTip += getFormula((Werkstoff) p.getKey()) + + (p.getValue() > 1 ? BWUtil.subscriptNumber(p.getValue()) : ""); + } + } else if (p.getKey() instanceof Materials) { + this.toolTip += getFormula((Materials) p.getKey()) + + (p.getValue() > 1 ? BWUtil.subscriptNumber(p.getValue()) : ""); + } else if (p.getKey() instanceof Werkstoff) this.toolTip += getFormula((Werkstoff) p.getKey()) + + (p.getValue() > 1 ? BWUtil.subscriptNumber(p.getValue()) : ""); + } + } else this.toolTip = toolTip; + + // if (this.toolTip.length() > 25) + // this.toolTip = "The formula is to long..."; + + // Ensure that localization key are written to the lang file + GregTechAPI.sAfterGTPreload.add(() -> { this.getLocalizedToolTip(); }); + + if (this.stats.protons == 0) { + long tmpprotons = 0; + for (Pair p : contents) { + if (p.getKey() instanceof Materials) { + tmpprotons += ((Materials) p.getKey()).getProtons() * p.getValue(); + } else if (p.getKey() instanceof Werkstoff) { + tmpprotons += ((Werkstoff) p.getKey()).getStats().protons * p.getValue(); + } + } + this.stats = stats.setProtons(tmpprotons); + } + if (this.stats.mass == 0) { + long tmpmass = 0; + int count = 0; + for (Pair p : contents) { + if (p.getKey() instanceof Materials) { + tmpmass += ((Materials) p.getKey()).getMass() * p.getValue(); + count += p.getValue(); + } else if (p.getKey() instanceof Werkstoff) { + tmpmass += ((Werkstoff) p.getKey()).getStats().mass * p.getValue(); + count += p.getValue(); + } + } + if (count > 0) this.stats = stats.setMass(tmpmass / count); + } + + if (this.stats.meltingPoint == 0) this.stats.meltingPoint = 1123; + + if (this.stats.meltingVoltage == 0) this.stats.meltingVoltage = 120; + + this.texSet = texSet; + + switch (this.mOreByProducts.size()) { + case 0: + this.mOreByProducts.add(this); + this.mOreByProducts.add(this); + this.mOreByProducts.add(this); + break; + case 1: + this.mOreByProducts.add(this); + this.mOreByProducts.add(this); + break; + case 2: + this.mOreByProducts.add(this); + break; + } + + Optional> firstContent; + if (this.CONTENTS.size() == 1 && (firstContent = this.CONTENTS.stream() + .findFirst()).isPresent()) { + ISubTagContainer firstContentSubTagContainer = firstContent.get() + .getKey(); + if (firstContent.get() + .getValue() == 1 && firstContentSubTagContainer instanceof Materials) this.getGenerationFeatures() + .setExtension(); + } + + Werkstoff.werkstoffHashSet.add(this); + Werkstoff.werkstoffHashMap.put(this.mID, this); + Werkstoff.werkstoffNameHashMap.put(this.defaultName, this); + + this.owner = this.getMaterialOwner(); + } + + private static String getFormula(Materials material) { + return material.mChemicalFormula.isEmpty() ? "?" : material.mChemicalFormula; + } + + private static String getFormula(Werkstoff material) { + return material.toolTip.isEmpty() ? "?" : material.toolTip; + } + + public Werkstoff addAdditionalOreDict(String s) { + this.ADDITIONAL_OREDICT.add(s); + return this; + } + + public HashSet getADDITIONAL_OREDICT() { + return this.ADDITIONAL_OREDICT; + } + + public void setTCAspects(Pair... pAspectsArr) { + this.stats.mTC_Aspects = pAspectsArr; + } + + @SuppressWarnings("unchecked") + public Pair[] getTCAspects(int ratio) { + if (this.stats.mTC_Aspects == null) { + HashSet tc_aspectStacks = new HashSet<>(); + HashSet> set = new HashSet<>(); + for (Pair p : this.getContents() + .getValue()) { + if (p.getKey() instanceof Materials) tc_aspectStacks.addAll(((Materials) p.getKey()).mAspects); + if (p.getKey() instanceof Werkstoff) set.addAll(Arrays.asList(((Werkstoff) p.getKey()).getTCAspects())); + } + tc_aspectStacks.forEach( + tc_aspectStack -> set.add(new Pair<>(tc_aspectStack.mAspect.mAspect, (int) tc_aspectStack.mAmount))); + this.stats.mTC_Aspects = set.toArray(new Pair[0]); + } + Pair[] ret = this.stats.mTC_Aspects.clone(); + for (int i = 0; i < ret.length; i++) { + ret[i] = ret[i].copyWithNewValue(ret[i].getValue() * ratio); + } + return ret; + } + + public List getGTWrappedTCAspects() { + final List ret = new ArrayList<>(); + Arrays.stream(this.getTCAspects()) + .forEach(objectIntegerPair -> { + new TCAspects.TC_AspectStack( + TCAspects.valueOf( + ((Aspect) objectIntegerPair.getKey()).getName() + .toUpperCase(Locale.US)), + objectIntegerPair.getValue()).addToAspectList(ret); + }); + return ret; + } + + public Pair[] getTCAspects() { + return this.getTCAspects(1); + } + + public Werkstoff.Types getType() { + return this.type; + } + + public boolean containsStuff(ISubTagContainer stuff) { + for (Pair pair : this.CONTENTS) { + if (pair.getKey() + .equals(stuff)) return true; + } + return false; + } + + public Pair>> getContents() { + int ret = 0; + switch (this.type) { + case COMPOUND: + case MIXTURE: + case BIOLOGICAL: { + for (int i = 0; i < this.CONTENTS.toArray().length; i++) { + ret += (int) this.CONTENTS.toArray(new Pair[0])[i].getValue(); + } + break; + } + default: + ret = 1; + break; + } + return new Pair<>(ret, this.CONTENTS); + } + + public int getNoOfByProducts() { + return this.mOreByProducts.size(); + } + + public ISubTagContainer getOreByProductRaw(int aNumber) { + if (this.mOreByProducts.size() == 0) return null; + if (aNumber < 0) aNumber = this.mOreByProducts.size() + aNumber; + while (aNumber >= this.mOreByProducts.size()) aNumber--; + ISubTagContainer o = this.mOreByProducts.get(aNumber); + if (o == null || o.equals(Werkstoff.default_null_Werkstoff) || o.equals(Materials._NULL)) return this; + return o; + } + + public ItemStack getOreByProduct(int aNumber, OrePrefixes prefixes) { + if (this.mOreByProducts.size() == 0) return null; + if (aNumber < 0) aNumber = this.mOreByProducts.size() + aNumber; + while (aNumber >= this.mOreByProducts.size()) aNumber--; + Object o = this.mOreByProducts.get(aNumber); + if (o == null || o.equals(Werkstoff.default_null_Werkstoff) || o.equals(Materials._NULL)) + return this.get(prefixes); + if (o instanceof Werkstoff) return WerkstoffLoader.getCorrespondingItemStack(prefixes, (Werkstoff) o); + if (o instanceof Materials) return GTOreDictUnificator.get(prefixes, o, 1L); + return null; + } + + public String getDefaultName() { + return this.defaultName; + } + + public String getLocalizedName() { + return GTLanguageManager.addStringLocalization( + String.format("bw.werkstoff.%05d.name", this.mID), + this.defaultName, + !GregTechAPI.sPostloadFinished); + } + + public String getVarName() { + return this.defaultName.replace(" ", ""); + } + + public String getToolTip() { + return this.toolTip; + } + + public String getLocalizedToolTip() { + return GTLanguageManager.addStringLocalization( + String.format("bw.werkstoff.%05d.tooltip", this.mID), + this.toolTip, + !GregTechAPI.sPostloadFinished); + } + + public Werkstoff.Stats getStats() { + return this.stats; + } + + public short getmID() { + return this.mID; + } + + public short getMixCircuit() { + return this.getGenerationFeatures().mixCircuit; + } + + public Werkstoff.GenerationFeatures getGenerationFeatures() { + return this.generationFeatures; + } + + public TextureSet getTexSet() { + return this.texSet; + } + + public void setRgb(short[] rgb) { + this.rgb = new byte[] { (byte) (rgb[0] - 128), (byte) (rgb[1] - 128), (byte) (rgb[2] - 128) }; + } + + @Override + public short[] getRGBA() { + return new short[] { (short) (this.rgb[0] + 128), (short) (this.rgb[1] + 128), (short) (this.rgb[2] + 128), 0 }; + } + + @Override + public boolean contains(SubTag subTag) { + if (!subTag.equals(WerkstoffLoader.NOBLE_GAS) && !subTag.equals(WerkstoffLoader.ANAEROBE_GAS) + && !subTag.equals(WerkstoffLoader.NO_BLAST)) + for (Pair p : this.CONTENTS) if (p.getKey() + .contains(subTag)) return true; + return this.SUBTAGS.contains(subTag); + } + + @Override + public ISubTagContainer add(SubTag... subTags) { + this.SUBTAGS.addAll(Arrays.asList(subTags)); + return this; + } + + @Override + public boolean remove(SubTag subTag) { + return this.SUBTAGS.remove(subTag); + } + + public void getAndAddToCollection(OrePrefixes prefixes, int amount, Collection stacks) { + stacks.add(this.get(prefixes, amount)); + } + + public ItemStack get(OrePrefixes prefixes) { + return WerkstoffLoader.getCorrespondingItemStack(prefixes, this); + } + + public FluidStack getFluidOrGas(int fluidAmount) { + return new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(this)), fluidAmount); + } + + public FluidStack getMolten(int fluidAmount) { + return new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(this)), fluidAmount); + } + + public ItemStack get(OrePrefixes prefixes, int amount) { + return WerkstoffLoader.getCorrespondingItemStack(prefixes, this, amount); + } + + public byte getToolQuality() { + return this.stats.getQualityOverride() > 0 ? this.stats.getQualityOverride() + : (byte) (15f * (this.getStats() + .getProtons() / 188f + + this.getStats() + .getMeltingPoint() / 10801f) + / (float) this.getContents() + .getKey()); + } + + public float getToolSpeed() { + return this.stats.getSpeedOverride() > 0f ? this.stats.getSpeedOverride() + : Math.max( + 1f, + 2f * (-this.getStats() + .getMass() + 0.1f + * this.getStats() + .getMeltingPoint() + + this.getStats() + .getProtons()) + * 0.1f + / (float) this.getContents() + .getKey() + * 0.1f + * this.getToolQuality()); + } + + public int getDurability() { + return this.stats.getDurOverride() > 0 ? this.stats.getDurOverride() + : (int) (this.stats.durMod * (0.01f * this.getStats() + .getMeltingPoint() + * this.getStats() + .getMass() + / (float) this.getContents() + .getKey())); + } + + /** + * Checks if the generation feature is enabled and if its not in the blacklist + */ + public boolean hasItemType(OrePrefixes prefixes) { + int unpacked = Werkstoff.GenerationFeatures.getPrefixDataRaw(prefixes); + return (this.getGenerationFeatures().toGenerate & unpacked) != 0 + && (this.getGenerationFeatures().blacklist & unpacked) == 0; + } + + /** + * DOES NOT CHECK BLACKLIST! + */ + public boolean hasGenerationFeature(OrePrefixes prefixes) { + int unpacked = Werkstoff.GenerationFeatures.getPrefixDataRaw(prefixes); + return (this.getGenerationFeatures().toGenerate & unpacked) != 0; + } + + /** + * Checks if the Actual Stack exists in the OreDict + */ + public boolean doesOreDictedItemExists(OrePrefixes prefixes) { + return OreDictHandler.getItemStack(this.getDefaultName(), prefixes, 1) != null; + } + + public String getOwner() { + return this.owner; + } + + private String getMaterialOwner() { + String modName = Loader.instance() + .activeModContainer() + .getName(); + if (modNameOverrides.get(modName) != null) { + return modNameOverrides.get(modName); + } + if (BWModNames.contains(modName)) { + return null; + } + return GREEN + modName; + } + + public enum Types { + + MATERIAL, + COMPOUND, + MIXTURE, + BIOLOGICAL, + ELEMENT, + ISOTOPE, + UNDEFINED; + + public static Werkstoff.Stats getDefaultStatForType(Werkstoff.Types T) { + return switch (T) { + case COMPOUND, BIOLOGICAL -> new Werkstoff.Stats().setElektrolysis(true); + case MIXTURE -> new Werkstoff.Stats().setCentrifuge(true); + default -> new Werkstoff.Stats(); + }; + } + } + + public static class GenerationFeatures { + + public static final GenerationFeatures DISABLED = new GenerationFeatures().disable(); + long toGenerate = 0b0001001; + // logic gate shit + /* + * dust 1 metal 10 (ingot, nugget) gem 100 ore 1000 cell 10000 plasma 100000 molten 1000000 crafting metal + * 10000000 (sticks, plates) meta crafting metal 100000000 (gears, screws, bolts, springs) multiple ingotWorth + * stuff 1000000000 (double, triple, quadruple, ingot/plates) + */ + private boolean isExtension; + private static final NonNullWrappedHashMap prefixLogic = new NonNullWrappedHashMap<>(0); + + public GenerationFeatures() {} + + public static void initPrefixLogic() { + Arrays.stream(OrePrefixes.values()) + .forEach(e -> prefixLogic.put(e, 0)); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.dust, 0b1); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.dustTiny, 0b1); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.dustSmall, 0b1); + + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingot, 0b10); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingotHot, 0b10); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.nugget, 0b10); + + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gem, 0b100); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gemFlawed, 0b100); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gemExquisite, 0b100); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gemChipped, 0b100); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gemFlawless, 0b100); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.lens, 0b100); + + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.block, 0b110); + + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ore, 0b1000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.dustImpure, 0b1000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.dustPure, 0b1000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.crushed, 0b1000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.crushedPurified, 0b1000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.crushedCentrifuged, 0b1000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.rawOre, 0b1000); + + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.cell, 0b10000); + if (Mods.Forestry.isModLoaded()) { + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.capsule, 0b10000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.capsuleMolten, 0b1000000); + } + // Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.bottle,0b10000); + + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.cellMolten, 0b1000000); + + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plate, 0b10000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.foil, 0b10000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.stick, 0b10000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.stickLong, 0b10000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.toolHeadHammer, 0b10000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.toolHeadWrench, 0b10000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.toolHeadSaw, 0b10000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.turbineBlade, 0b10000000); + + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.screw, 0b100000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gearGt, 0b100000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gearGtSmall, 0b100000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.bolt, 0b100000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ring, 0b100000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.spring, 0b100000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.springSmall, 0b100000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.rotor, 0b100000000); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.wireFine, 0b100000000); + + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plateDouble, 0x200); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plateTriple, 0x200); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plateQuadruple, 0x200); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plateQuintuple, 0x200); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plateDense, 0x200); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingotDouble, 0x200); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingotTriple, 0x200); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingotQuadruple, 0x200); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingotQuintuple, 0x200); + + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.blockCasing, 0x380); + Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.blockCasingAdvanced, 0x380); + } + + public void setExtension() { + this.isExtension = !this.isExtension; + } + + public static int getPrefixDataRaw(OrePrefixes prefixes) { + if (prefixes == null) throw new IllegalArgumentException("OrePrefixes is NULL!"); + return GenerationFeatures.prefixLogic.get(prefixes); + } + + public boolean isExtension() { + return this.isExtension; + } + + // public byte toGenerateSecondary = 0b0000000; + public byte blacklist; + + public boolean enforceUnification; + + /* + * Auto add Chemical Recipes 1 Auto add mixer Recipes 10 Auto add Sifter Recipe 100 Auto add + * MetalWorking(sticks, plates) Recipe 1000 Auto add MetalWorking(crafting components) Recipe 10000 + */ + public byte extraRecipes; + + /* + * Here so that new recipes don't fuck with existing functionality Auto add Crafting Metal Solidifier recipes 1 + * Auto add Meta Crafting Metal Solidifier recipes 10 Auto add Multiple Ingot Metal Solidifier recipes 100 + * (Unused) + */ + public byte extraRecipes2; + + public short mixCircuit = -1; + + public Werkstoff.GenerationFeatures setBlacklist(OrePrefixes p) { + this.blacklist |= getPrefixDataRaw(p); + return this; + } + + @Deprecated + public boolean hasDusts() { + return (this.toGenerate & 0b1) != 0; + } + + @Deprecated + public boolean hasGems() { + return (this.toGenerate & 0b100) != 0; + } + + @Deprecated + public boolean hasOres() { + return (this.toGenerate & 0b1000) != 0; + } + + public Werkstoff.GenerationFeatures enforceUnification() { + this.enforceUnification = true; + return this; + } + + @Deprecated + public Werkstoff.GenerationFeatures removeGems() { + if (this.hasGems()) this.toGenerate = this.toGenerate ^ 0b100; + return this; + } + + @Deprecated + public Werkstoff.GenerationFeatures removeDusts() { + if (this.hasDusts()) this.toGenerate = this.toGenerate ^ 0b1; + return this; + } + + @Deprecated + public Werkstoff.GenerationFeatures removeOres() { + if (this.hasOres()) this.toGenerate = this.toGenerate ^ 0b1000; + return this; + } + + public Werkstoff.GenerationFeatures addChemicalRecipes() { + this.extraRecipes = (byte) (this.extraRecipes | 1); + return this; + } + + public boolean hasChemicalRecipes() { + return (this.extraRecipes & 1) != 0; + } + + public Werkstoff.GenerationFeatures addMetalCraftingSolidifierRecipes() { + this.extraRecipes2 = (byte) (this.extraRecipes2 | 1); + return this; + } + + public boolean hasMetalCraftingSolidifierRecipes() { + return (this.extraRecipes2 & 1) != 0; + } + + public Werkstoff.GenerationFeatures addMetaSolidifierRecipes() { + this.extraRecipes2 = (byte) (this.extraRecipes2 | 10); + return this; + } + + public boolean hasMetaSolidifierRecipes() { + return (this.extraRecipes2 & 10) != 0; + } + + public Werkstoff.GenerationFeatures addMultipleMetalSolidifierRecipes() { + this.extraRecipes2 = (byte) (this.extraRecipes2 | 100); + return this; + } + + public boolean hasMultipleMetalSolidifierRecipes() { + return (this.extraRecipes2 & 100) != 0; + } + + public Werkstoff.GenerationFeatures addMixerRecipes() { + this.extraRecipes = (byte) (this.extraRecipes | 10); + return this; + } + + public Werkstoff.GenerationFeatures addMixerRecipes(short aCircuit) { + this.extraRecipes = (byte) (this.extraRecipes | 10); + if (aCircuit >= 1 && aCircuit <= 24) this.mixCircuit = aCircuit; + return this; + } + + public boolean hasMixerRecipes() { + return (this.extraRecipes & 10) != 0; + } + + public Werkstoff.GenerationFeatures addSifterRecipes() { + this.extraRecipes = (byte) (this.extraRecipes | 100); + return this; + } + + public boolean hasSifterRecipes() { + return (this.extraRecipes & 100) != 0; + } + + public Werkstoff.GenerationFeatures onlyDust() { + this.toGenerate = 0b1; + return this; + } + + /** + * Automatically adds Simple Metal Working Items + */ + public Werkstoff.GenerationFeatures addMetalItems() { + this.toGenerate = this.addSimpleMetalWorkingItems().toGenerate | 0b10; + return this; + } + + public Werkstoff.GenerationFeatures disable() { + this.toGenerate = 0; + return this; + } + + public Werkstoff.GenerationFeatures addCells() { + this.toGenerate = this.toGenerate | 0b10000; + return this; + } + + @Deprecated + public boolean hasCells() { + return (this.toGenerate & 0b10000) != 0; + } + + @Deprecated + public boolean hasMolten() { + return (this.toGenerate & 0b1000000) != 0; + } + + public Werkstoff.GenerationFeatures addMolten() { + this.toGenerate = this.toGenerate | 0b1000000; + return this; + } + + /** + * Automatically adds Simple Metal Working Items + */ + public Werkstoff.GenerationFeatures addGems() { + this.toGenerate = this.addSimpleMetalWorkingItems().toGenerate | 0x4; + return this; + } + + public Werkstoff.GenerationFeatures addSimpleMetalWorkingItems() { + this.toGenerate = this.toGenerate | 0b10000000; + return this; + } + + public Werkstoff.GenerationFeatures addCasings() { + this.toGenerate = this.toGenerate | 0x382; + return this; + } + + @Deprecated + public boolean hasSimpleMetalWorkingItems() { + return (this.toGenerate & 0b10000000) != 0; + } + + public Werkstoff.GenerationFeatures addCraftingMetalWorkingItems() { + this.toGenerate = this.toGenerate | 0x100; + return this; + } + + public Werkstoff.GenerationFeatures addMultipleIngotMetalWorkingItems() { + this.toGenerate = this.toGenerate | 0x200; + return this; + } + + public Werkstoff.GenerationFeatures addPrefix(OrePrefixes prefixes) { + this.toGenerate = this.toGenerate | getPrefixDataRaw(prefixes); + return this; + } + + public Werkstoff.GenerationFeatures removePrefix(OrePrefixes prefixes) { + this.toGenerate = this.toGenerate ^ getPrefixDataRaw(prefixes); + return this; + } + } + + public static class Stats { + + public static final int NULL_KELVIN = 0; + + int boilingPoint; + + public int getBoilingPoint() { + return this.boilingPoint; + } + + public Werkstoff.Stats setBoilingPoint(int boilingPoint) { + this.boilingPoint = boilingPoint; + return this; + } + + public long getMass() { + return this.mass; + } + + public long getProtons() { + return this.protons; + } + + public int getMeltingPoint() { + return this.meltingPoint; + } + + public Werkstoff.Stats setMeltingPoint(int meltingPoint) { + this.meltingPoint = meltingPoint; + return this; + } + + public double getEbfGasRecipeTimeMultiplier() { + return this.ebfGasRecipeTimeMultiplier; + } + + /** + * The generated EBF recipes using this gas will have their duration multiplied by this number. If set to a + * negative value, the default proton count-based logic is used. See also + * {@link gregtech.api.util.BlastFurnaceGasStat} + */ + public Werkstoff.Stats setEbfGasRecipeTimeMultiplier(double timeMultiplier) { + this.ebfGasRecipeTimeMultiplier = timeMultiplier; + return this; + } + + public double getEbfGasRecipeConsumedAmountMultiplier() { + return this.ebfGasRecipeConsumedAmountMultiplier; + } + + /** + * The generated EBF recipes using this gas will have the amount of gas consumed multiplied by this number. See + * also {@link gregtech.api.util.BlastFurnaceGasStat} + */ + public Werkstoff.Stats setEbfGasRecipeConsumedAmountMultiplier(double amountMultiplier) { + this.ebfGasRecipeConsumedAmountMultiplier = amountMultiplier; + return this; + } + + public int getDurOverride() { + return this.durOverride; + } + + public Werkstoff.Stats setDurOverride(int durOverride) { + this.durOverride = durOverride; + return this; + } + + public float getSpeedOverride() { + return this.speedOverride; + } + + public Werkstoff.Stats setSpeedOverride(float speedOverride) { + this.speedOverride = speedOverride; + return this; + } + + public byte getQualityOverride() { + return this.qualityOverride; + } + + public Werkstoff.Stats setQualityOverride(byte qualityOverride) { + this.qualityOverride = qualityOverride; + return this; + } + + private byte qualityOverride; + private int durOverride; + private float speedOverride; + private int meltingPoint; + private int meltingVoltage; + private long protons; + private long neutrons; + private long electrons; + private long mass; + private double ebfGasRecipeTimeMultiplier = -1.0; + private double ebfGasRecipeConsumedAmountMultiplier = 1.0; + + float durMod = 1f; + + public float getDurMod() { + return this.durMod; + } + + public void setDurMod(float durMod) { + this.durMod = durMod; + } + + private Pair[] mTC_Aspects; + // logic gate shit + byte quality = ~0b1111111; + + public Werkstoff.Stats setmTC_AspectsArray(Pair[] mTC_Aspects) { + this.mTC_Aspects = mTC_Aspects; + return this; + } + + @SafeVarargs + public final Werkstoff.Stats setmTC_AspectsVarArg(Pair... mTC_Aspects) { + this.mTC_Aspects = mTC_Aspects; + return this; + } + + Pair[] getmTC_Aspects() { + return this.mTC_Aspects; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Werkstoff.Stats that)) return false; + + if (this.boilingPoint != that.boilingPoint || this.meltingPoint != that.meltingPoint + || this.mass != that.mass + || this.protons != that.protons) return false; + if (this.neutrons != that.neutrons) return false; + if (this.electrons != that.electrons) return false; + if (Math.abs(this.ebfGasRecipeTimeMultiplier - that.ebfGasRecipeTimeMultiplier) > 1.0e-6D) return false; + if (Math.abs(this.ebfGasRecipeConsumedAmountMultiplier - that.ebfGasRecipeConsumedAmountMultiplier) + > 1.0e-6D) return false; + return this.quality == that.quality; + } + + @Override + public int hashCode() { + return MurmurHash3.murmurhash3_x86_32( + ByteBuffer.allocate(49) + .put(this.quality) + .putInt(this.boilingPoint) + .putInt(this.meltingPoint) + .putLong(this.protons) + .putLong(this.neutrons) + .putLong(this.electrons) + .putLong(this.mass) + .putDouble(this.ebfGasRecipeTimeMultiplier) + .putDouble(this.ebfGasRecipeConsumedAmountMultiplier) + .array(), + 0, + 49, + 31); + } + + public Werkstoff.Stats setMass(long mass) { + this.mass = mass; + return this; + } + + public Werkstoff.Stats setProtons(long protons) { + this.protons = protons; + return this; + } + + public boolean isSublimation() { + return (this.quality & 0b1) != 0; + } + + public Werkstoff.Stats setSublimation(boolean sublimation) { + if (sublimation) this.quality = (byte) (this.quality | 0b000001); + else this.quality = (byte) (this.quality & 0b1111110); + return this; + } + + public boolean isToxic() { + return (this.quality & 0b10) != 0; + } + + public Werkstoff.Stats setToxic(boolean toxic) { + if (toxic) this.quality = (byte) (this.quality | 0b000010); + else this.quality = (byte) (this.quality & 0b1111101); + return this; + } + + byte enchantmentlvl = 3; + + public byte getEnchantmentlvl() { + return this.enchantmentlvl; + } + + public Werkstoff.Stats setEnchantmentlvl(byte enchantmentlvl) { + this.enchantmentlvl = enchantmentlvl; + return this; + } + + public boolean isRadioactive() { + return (this.quality & 0b100) != 0; + } + + public Werkstoff.Stats setRadioactive(boolean radioactive) { + if (radioactive) this.quality = (byte) (this.quality | 0b000100); + else this.quality = (byte) (this.quality & 0b1111011); + return this; + } + + public boolean isBlastFurnace() { + return (this.quality & 0b1000) != 0; + } + + public Werkstoff.Stats setBlastFurnace(boolean blastFurnace) { + if (blastFurnace) this.quality = (byte) (this.quality | 0b001000); + else this.quality = (byte) (this.quality & 0b1110111); + return this; + } + + public Werkstoff.Stats setMeltingVoltage(int meltingVoltage) { + this.meltingVoltage = meltingVoltage; + return this; + } + + public int getMeltingVoltage() { + return this.meltingVoltage; + } + + public boolean isElektrolysis() { + return (this.quality & 0x10) != 0; + } + + public Werkstoff.Stats setElektrolysis(boolean elektrolysis) { + if (elektrolysis) this.quality = (byte) (this.quality | 0x10); + else this.quality = (byte) (this.quality & 0b1101111); + return this; + } + + public boolean isCentrifuge() { + return (this.quality & 0x20) != 0; + } + + public Werkstoff.Stats setCentrifuge(boolean centrifuge) { + if (centrifuge) this.quality = (byte) (this.quality | 0x20); + else this.quality = (byte) (this.quality & 0b1011111); + return this; + } + + public boolean isGas() { + return (this.quality & 0x40) != 0; + } + + public FluidState getFluidState() { + if ((this.quality & 0x40) != 0) { + return FluidState.GAS; + } + return FluidState.LIQUID; + } + + public Werkstoff.Stats setGas(boolean gas) { + if (gas) this.quality = (byte) (this.quality | 0x40); + else this.quality = (byte) (this.quality & 0b0111111); + return this; + } + } +} diff --git a/src/main/java/bartworks/system/material/WerkstoffLoader.java b/src/main/java/bartworks/system/material/WerkstoffLoader.java new file mode 100644 index 0000000000..d5c9337a7c --- /dev/null +++ b/src/main/java/bartworks/system/material/WerkstoffLoader.java @@ -0,0 +1,2105 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material; + +import static bartworks.util.BWUtil.subscriptNumbers; +import static bartworks.util.BWUtil.superscriptNumbers; +import static gregtech.api.enums.Mods.BetterLoadingScreen; +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.enums.OrePrefixes.block; +import static gregtech.api.enums.OrePrefixes.bolt; +import static gregtech.api.enums.OrePrefixes.bottle; +import static gregtech.api.enums.OrePrefixes.capsule; +import static gregtech.api.enums.OrePrefixes.cell; +import static gregtech.api.enums.OrePrefixes.cellPlasma; +import static gregtech.api.enums.OrePrefixes.crushed; +import static gregtech.api.enums.OrePrefixes.crushedCentrifuged; +import static gregtech.api.enums.OrePrefixes.crushedPurified; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.dustImpure; +import static gregtech.api.enums.OrePrefixes.dustPure; +import static gregtech.api.enums.OrePrefixes.dustSmall; +import static gregtech.api.enums.OrePrefixes.dustTiny; +import static gregtech.api.enums.OrePrefixes.foil; +import static gregtech.api.enums.OrePrefixes.gearGt; +import static gregtech.api.enums.OrePrefixes.gearGtSmall; +import static gregtech.api.enums.OrePrefixes.gem; +import static gregtech.api.enums.OrePrefixes.gemChipped; +import static gregtech.api.enums.OrePrefixes.gemExquisite; +import static gregtech.api.enums.OrePrefixes.gemFlawed; +import static gregtech.api.enums.OrePrefixes.gemFlawless; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.ingotDouble; +import static gregtech.api.enums.OrePrefixes.ingotHot; +import static gregtech.api.enums.OrePrefixes.ingotQuadruple; +import static gregtech.api.enums.OrePrefixes.ingotQuintuple; +import static gregtech.api.enums.OrePrefixes.ingotTriple; +import static gregtech.api.enums.OrePrefixes.lens; +import static gregtech.api.enums.OrePrefixes.nugget; +import static gregtech.api.enums.OrePrefixes.ore; +import static gregtech.api.enums.OrePrefixes.oreSmall; +import static gregtech.api.enums.OrePrefixes.plate; +import static gregtech.api.enums.OrePrefixes.plateDense; +import static gregtech.api.enums.OrePrefixes.plateDouble; +import static gregtech.api.enums.OrePrefixes.plateQuadruple; +import static gregtech.api.enums.OrePrefixes.plateQuintuple; +import static gregtech.api.enums.OrePrefixes.plateTriple; +import static gregtech.api.enums.OrePrefixes.rawOre; +import static gregtech.api.enums.OrePrefixes.ring; +import static gregtech.api.enums.OrePrefixes.rotor; +import static gregtech.api.enums.OrePrefixes.screw; +import static gregtech.api.enums.OrePrefixes.spring; +import static gregtech.api.enums.OrePrefixes.springSmall; +import static gregtech.api.enums.OrePrefixes.stick; +import static gregtech.api.enums.OrePrefixes.stickLong; +import static gregtech.api.enums.OrePrefixes.toolHeadHammer; +import static gregtech.api.enums.OrePrefixes.toolHeadSaw; +import static gregtech.api.enums.OrePrefixes.toolHeadWrench; +import static gregtech.api.enums.OrePrefixes.turbineBlade; +import static gregtech.api.enums.OrePrefixes.values; +import static gregtech.api.enums.OrePrefixes.wireFine; +import static gregtech.api.util.GTRecipeBuilder.WILDCARD; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.oredict.OreDictionary; + +import org.apache.logging.log4j.Level; + +import com.google.common.collect.HashBiMap; + +import bartworks.API.SideReference; +import bartworks.API.WerkstoffAdderRegistry; +import bartworks.MainMod; +import bartworks.client.renderer.BWBlockOreRenderer; +import bartworks.common.configs.ConfigHandler; +import bartworks.system.material.CircuitGeneration.BWCircuitsLoader; +import bartworks.system.material.gtenhancement.GTMetaItemEnhancer; +import bartworks.system.material.processingLoaders.AdditionalRecipes; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import bartworks.system.material.werkstoff_loaders.recipe.AspectLoader; +import bartworks.system.material.werkstoff_loaders.recipe.BlockLoader; +import bartworks.system.material.werkstoff_loaders.recipe.CasingLoader; +import bartworks.system.material.werkstoff_loaders.recipe.CellLoader; +import bartworks.system.material.werkstoff_loaders.recipe.CraftingMaterialLoader; +import bartworks.system.material.werkstoff_loaders.recipe.CrushedLoader; +import bartworks.system.material.werkstoff_loaders.recipe.DustLoader; +import bartworks.system.material.werkstoff_loaders.recipe.GemLoader; +import bartworks.system.material.werkstoff_loaders.recipe.MetalLoader; +import bartworks.system.material.werkstoff_loaders.recipe.MoltenCellLoader; +import bartworks.system.material.werkstoff_loaders.recipe.MultipleMetalLoader; +import bartworks.system.material.werkstoff_loaders.recipe.OreLoader; +import bartworks.system.material.werkstoff_loaders.recipe.RawOreLoader; +import bartworks.system.material.werkstoff_loaders.recipe.SimpleMetalLoader; +import bartworks.system.material.werkstoff_loaders.recipe.ToolLoader; +import bartworks.system.material.werkstoff_loaders.registration.AssociationLoader; +import bartworks.system.material.werkstoff_loaders.registration.BridgeMaterialsLoader; +import bartworks.system.material.werkstoff_loaders.registration.CasingRegistrator; +import bartworks.system.oredict.OreDictHandler; +import bartworks.util.BWColorUtil; +import bartworks.util.EnumUtils; +import bartworks.util.Pair; +import bartworks.util.log.DebugLog; +import bwcrossmod.cls.CLSCompat; +import codechicken.nei.api.API; +import cpw.mods.fml.common.ProgressManager; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.Element; +import gregtech.api.enums.FluidState; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TextureSet; +import gregtech.api.fluid.GTFluidFactory; +import gregtech.api.interfaces.ISubTagContainer; +import gregtech.api.util.GTOreDictUnificator; +import ic2.api.recipe.IRecipeInput; +import ic2.api.recipe.RecipeInputOreDict; +import ic2.api.recipe.RecipeOutput; +import ic2.api.recipe.Recipes; + +@SuppressWarnings("deprecation") +public class WerkstoffLoader { + + private WerkstoffLoader() {} + + public static final SubTag NOBLE_GAS = SubTag.getNewSubTag("NobleGas"); + public static final SubTag ANAEROBE_GAS = SubTag.getNewSubTag("AnaerobeGas"); + public static final SubTag ANAEROBE_SMELTING = SubTag.getNewSubTag("AnaerobeSmelting"); + public static final SubTag NOBLE_GAS_SMELTING = SubTag.getNewSubTag("NobleGasSmelting"); + public static final SubTag NO_BLAST = SubTag.getNewSubTag("NoBlast"); + public static ItemList rotorMold; + public static ItemList rotorShape; + public static ItemList smallGearShape; + public static ItemList ringMold; + public static ItemList boltMold; + + public static void setUp() { + + OrePrefixes.cellMolten.mMaterialGenerationBits = 0b1000000; + OrePrefixes.capsuleMolten.mMaterialGenerationBits = 0b1000000; + + try { + WerkstoffLoader.rotorMold = Enum.valueOf(ItemList.class, "Shape_Mold_Rotor"); + WerkstoffLoader.rotorShape = Enum.valueOf(ItemList.class, "Shape_Extruder_Rotor"); + WerkstoffLoader.smallGearShape = Enum.valueOf(ItemList.class, "Shape_Extruder_Small_Gear"); + WerkstoffLoader.ringMold = Enum.valueOf(ItemList.class, "Shape_Mold_Ring"); + WerkstoffLoader.boltMold = Enum.valueOf(ItemList.class, "Shape_Mold_Bolt"); + } catch (NullPointerException | IllegalArgumentException ignored) {} + + // add tiberium + EnumUtils.createNewElement("Tr", 123L, 203L, 0L, -1L, null, "Tiberium", false); + + bottle.mDefaultStackSize = 1; + Werkstoff.GenerationFeatures.initPrefixLogic(); + BWGTMaterialReference.init(); + } + + // TODO: + // FREE ID RANGE: 12_000-28_998 + // bartimaeusnek reserved 0-10_000 + // GlodBlock reserved range 10_001-10_999 + // Elisis reserved range 11_000-11_499 + // glowredman reserved range 11_500-11_999 + // bot reserved range 29_899-29_999 + // Tec & basdxz reserved range 30_000-31_000 + // GT Material range reserved on 31_767-32_767 + public static final Werkstoff Bismutite = new Werkstoff( + new short[] { 255, 233, 0, 0 }, + "Bismutite", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems(), + 1, + TextureSet.SET_FLINT, + Collections.singletonList(Materials.Bismuth), + new Pair<>(Materials.Bismuth, 2), + new Pair<>(Materials.Oxygen, 2), + new Pair<>(Materials.CarbonDioxide, 2)); + public static final Werkstoff Bismuthinit = new Werkstoff( + new short[] { 192, 192, 192, 0 }, + "Bismuthinite", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 2, + TextureSet.SET_METALLIC, + Arrays.asList(Materials.Bismuth, Materials.Sulfur), + new Pair<>(Materials.Bismuth, 2), + new Pair<>(Materials.Sulfur, 3)); + public static final Werkstoff Zirconium = new Werkstoff( + new short[] { 175, 175, 175, 0 }, + "Zirconium", + "Zr", + new Werkstoff.Stats().setProtons(40) + .setBlastFurnace(true) + .setMeltingPoint(2130) + .setMeltingVoltage(480), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMetalItems() + .enforceUnification(), + 3, + TextureSet.SET_METALLIC + // No Byproducts + ); + public static final Werkstoff CubicZirconia = new Werkstoff( + new short[] { 255, 255, 255, 0 }, + "Cubic Zirconia", + Werkstoff.Types.COMPOUND, + 3273, + new Werkstoff.GenerationFeatures().onlyDust() + .addGems() + .enforceUnification(), + 4, + TextureSet.SET_DIAMOND, + Collections.singletonList(WerkstoffLoader.Zirconium), + new Pair<>(WerkstoffLoader.Zirconium, 1), + new Pair<>(Materials.Oxygen, 2)); + public static final Werkstoff FluorBuergerit = new Werkstoff( + new short[] { 0x20, 0x20, 0x20, 0 }, + "Fluor-Buergerite", + subscriptNumbers("NaFe3Al6(Si6O18)(BO3)3O3F"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems(), + 5, + TextureSet.SET_RUBY, + Arrays.asList(Materials.Sodium, Materials.Boron, Materials.SiliconDioxide), + new Pair<>(Materials.Sodium, 1), + new Pair<>(Materials.Iron, 3), + new Pair<>(Materials.Aluminium, 6), + new Pair<>(Materials.Silicon, 6), + new Pair<>(Materials.Boron, 3), + new Pair<>(Materials.Oxygen, 30), + new Pair<>(Materials.Fluorine, 1)); + public static final Werkstoff YttriumOxide = new Werkstoff( + new short[] { 255, 255, 255, 0 }, + "Yttrium Oxide", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().onlyDust() + .enforceUnification(), // No autoadd here to gate this material + // by hand + 6, + TextureSet.SET_DULL, + new Pair<>(Materials.Yttrium, 2), + new Pair<>(Materials.Oxygen, 3)); + public static final Werkstoff ChromoAluminoPovondrait = new Werkstoff( + new short[] { 0, 0x79, 0x6A, 0 }, + "Chromo-Alumino-Povondraite", + subscriptNumbers("NaCr3(Al4Mg2)(Si6O18)(BO3)3(OH)3O"), + Werkstoff.Types.getDefaultStatForType(Werkstoff.Types.COMPOUND) + .setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems(), + 7, + TextureSet.SET_RUBY, + Arrays.asList(Materials.Sodium, Materials.Boron, Materials.SiliconDioxide), + new Pair<>(Materials.Sodium, 1), + new Pair<>(Materials.Chrome, 3), + new Pair<>(Materials.Magnalium, 6), + new Pair<>(Materials.Silicon, 6), + new Pair<>(Materials.Boron, 3), + new Pair<>(Materials.Oxygen, 31), + new Pair<>(Materials.Hydrogen, 3)); + public static final Werkstoff VanadioOxyDravit = new Werkstoff( + new short[] { 0x60, 0xA0, 0xA0, 0 }, + "Vanadio-Oxy-Dravite", + subscriptNumbers("NaV3(Al4Mg2)(Si6O18)(BO3)3(OH)3O"), + Werkstoff.Types.getDefaultStatForType(Werkstoff.Types.COMPOUND) + .setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems(), + 8, + TextureSet.SET_RUBY, + Arrays.asList(Materials.Sodium, Materials.Boron, Materials.SiliconDioxide), + new Pair<>(Materials.Sodium, 1), + new Pair<>(Materials.Vanadium, 3), + new Pair<>(Materials.Magnalium, 6), + new Pair<>(Materials.Silicon, 6), + new Pair<>(Materials.Boron, 3), + new Pair<>(Materials.Oxygen, 31), + new Pair<>(Materials.Hydrogen, 3)); + public static final Werkstoff Olenit = new Werkstoff( + new short[] { 210, 210, 210, 0 }, + "Olenite", + subscriptNumbers("NaAl3Al6(Si6O18)(BO3)3O3OH"), + Werkstoff.Types.getDefaultStatForType(Werkstoff.Types.COMPOUND) + .setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems(), + 9, + TextureSet.SET_RUBY, + Arrays.asList(Materials.Sodium, Materials.Boron, Materials.SiliconDioxide), + new Pair<>(Materials.Sodium, 1), + new Pair<>(Materials.Aluminium, 9), + new Pair<>(Materials.Silicon, 6), + new Pair<>(Materials.Boron, 3), + new Pair<>(Materials.Oxygen, 31), + new Pair<>(Materials.Hydrogen, 1)); + public static final Werkstoff Arsenopyrite = new Werkstoff( + new short[] { 0xB0, 0xB0, 0xB0, 0 }, + "Arsenopyrite", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 10, + TextureSet.SET_METALLIC, + Arrays.asList(Materials.Sulfur, Materials.Arsenic, Materials.Iron), + new Pair<>(Materials.Iron, 1), + new Pair<>(Materials.Arsenic, 1), + new Pair<>(Materials.Sulfur, 1)); + public static final Werkstoff Ferberite = new Werkstoff( + new short[] { 0xB0, 0xB0, 0xB0, 0 }, + "Ferberite", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 11, + TextureSet.SET_METALLIC, + Arrays.asList(Materials.Iron, Materials.Tungsten), + new Pair<>(Materials.Iron, 1), + new Pair<>(Materials.Tungsten, 1), + new Pair<>(Materials.Oxygen, 3)); + public static final Werkstoff Loellingit = new Werkstoff( + new short[] { 0xD0, 0xD0, 0xD0, 0 }, + "Loellingite", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 12, + TextureSet.SET_METALLIC, + Arrays.asList(Materials.Iron, Materials.Arsenic), + new Pair<>(Materials.Iron, 1), + new Pair<>(Materials.Arsenic, 2)); + public static final Werkstoff Roquesit = new Werkstoff( + new short[] { 0xA0, 0xA0, 0xA0, 0 }, + "Roquesite", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 13, + TextureSet.SET_METALLIC, + Arrays.asList(Materials.Copper, Materials.Sulfur), + new Pair<>(Materials.Copper, 1), + new Pair<>(Materials.Indium, 1), + new Pair<>(Materials.Sulfur, 2)); + public static final Werkstoff Bornite = new Werkstoff( + new short[] { 0x97, 0x66, 0x2B, 0 }, + "Bornite", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 14, + TextureSet.SET_METALLIC, + Arrays.asList(Materials.Copper, Materials.Iron, Materials.Sulfur), + new Pair<>(Materials.Copper, 5), + new Pair<>(Materials.Iron, 1), + new Pair<>(Materials.Sulfur, 4)); + public static final Werkstoff Wittichenit = new Werkstoff( + Materials.Copper.mRGBa, + "Wittichenite", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 15, + TextureSet.SET_METALLIC, + Arrays.asList(Materials.Copper, Materials.Bismuth, Materials.Sulfur), + new Pair<>(Materials.Copper, 5), + new Pair<>(Materials.Bismuth, 1), + new Pair<>(Materials.Sulfur, 4)); + public static final Werkstoff Djurleit = new Werkstoff( + new short[] { 0x60, 0x60, 0x60, 0 }, + "Djurleite", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 16, + TextureSet.SET_METALLIC, + Arrays.asList(Materials.Copper, Materials.Copper, Materials.Sulfur), + new Pair<>(Materials.Copper, 31), + new Pair<>(Materials.Sulfur, 16)); + public static final Werkstoff Huebnerit = new Werkstoff( + new short[] { 0x80, 0x60, 0x60, 0 }, + "Huebnerite", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 17, + TextureSet.SET_METALLIC, + Arrays.asList(Materials.Manganese, Materials.Tungsten), + new Pair<>(Materials.Manganese, 1), + new Pair<>(Materials.Tungsten, 1), + new Pair<>(Materials.Oxygen, 3)); + public static final Werkstoff Thorianit = new Werkstoff( + new short[] { 0x30, 0x30, 0x30, 0 }, + "Thorianite", + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 18, + TextureSet.SET_METALLIC, + Collections.singletonList(Materials.Thorium), + new Pair<>(Materials.Thorium, 1), + new Pair<>(Materials.Oxygen, 2)); + public static final Werkstoff RedZircon = new Werkstoff( + new short[] { 195, 19, 19, 0 }, + "Red Zircon", + new Werkstoff.Stats().setElektrolysis(false) + .setMeltingPoint(2130), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems(), + 19, + TextureSet.SET_GEM_VERTICAL, + Arrays.asList(WerkstoffLoader.Zirconium, Materials.SiliconDioxide), + new Pair<>(WerkstoffLoader.Zirconium, 1), + new Pair<>(Materials.Silicon, 1), + new Pair<>(Materials.Oxygen, 4)); + + // GT Enhancements + public static final Werkstoff Salt = new Werkstoff( + Materials.Salt.mRGBa, + "Salt", + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addGems() + .addSifterRecipes(), + 20, + TextureSet.SET_FLINT, + Arrays.asList(Materials.RockSalt, Materials.Borax), + new Pair<>(Materials.Salt, 1)); + public static final Werkstoff Spodumen = new Werkstoff( + Materials.Spodumene.mRGBa, + "Spodumene", + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addGems() + .addSifterRecipes(), + 21, + TextureSet.SET_FLINT, + Collections.singletonList(Materials.Spodumene), + new Pair<>(Materials.Spodumene, 1)); + public static final Werkstoff RockSalt = new Werkstoff( + Materials.RockSalt.mRGBa, + "Rock Salt", + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addGems() + .addSifterRecipes(), + 22, + TextureSet.SET_FLINT, + Arrays.asList(Materials.RockSalt, Materials.Borax), + new Pair<>(Materials.RockSalt, 1)); + + // More NonGT Stuff + public static final Werkstoff Fayalit = new Werkstoff( + new short[] { 50, 50, 50, 0 }, + "Fayalite", + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems(), + 23, + TextureSet.SET_QUARTZ, + Arrays.asList(Materials.Iron, Materials.SiliconDioxide), + new Pair<>(Materials.Iron, 2), + new Pair<>(Materials.Silicon, 1), + new Pair<>(Materials.Oxygen, 4)); + public static final Werkstoff Forsterit = new Werkstoff( + new short[] { 255, 255, 255, 0 }, + "Forsterite", + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems(), + 24, + TextureSet.SET_QUARTZ, + Arrays.asList(Materials.Magnesium, Materials.SiliconDioxide), + new Pair<>(Materials.Magnesium, 2), + new Pair<>(Materials.Silicon, 1), + new Pair<>(Materials.Oxygen, 4)); + public static final Werkstoff Hedenbergit = new Werkstoff( + new short[] { 100, 150, 100, 0 }, + "Hedenbergite", + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems(), + 25, + TextureSet.SET_QUARTZ, + Arrays.asList(Materials.Iron, Materials.Calcium, Materials.SiliconDioxide), + new Pair<>(Materials.Calcium, 1), + new Pair<>(Materials.Iron, 1), + new Pair<>(Materials.Silicon, 2), + new Pair<>(Materials.Oxygen, 6)); + public static final Werkstoff DescloiziteZNVO4 = new Werkstoff( + new short[] { 0xBF, 0x18, 0x0F, 0 }, + "Red Descloizite", // Pb(Zn,Cu)[OH|VO4 + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 26, + TextureSet.SET_QUARTZ, + Arrays.asList(Materials.Lead, Materials.Copper, Materials.Vanadium), + new Pair<>(Materials.Lead, 1), + new Pair<>(Materials.Zinc, 1), + new Pair<>(Materials.Vanadium, 1), + new Pair<>(Materials.Oxygen, 4)); + public static final Werkstoff DescloiziteCUVO4 = new Werkstoff( + new short[] { 0xf9, 0x6d, 0x18, 0 }, + "Orange Descloizite", // Pb(Zn,Cu)[OH|VO4 + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 27, + TextureSet.SET_QUARTZ, + Arrays.asList(Materials.Lead, Materials.Zinc, Materials.Vanadium), + new Pair<>(Materials.Lead, 1), + new Pair<>(Materials.Copper, 1), + new Pair<>(Materials.Vanadium, 1), + new Pair<>(Materials.Oxygen, 4)); + public static final Werkstoff FuchsitAL = new Werkstoff( + new short[] { 0x4D, 0x7F, 0x64, 0 }, + "Green Fuchsite", + subscriptNumbers("KAl3Si3O10(OH)2"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 28, + TextureSet.SET_METALLIC, + Arrays.asList(Materials.Potassium, Materials.Aluminiumoxide, Materials.SiliconDioxide), + new Pair<>(Materials.Potassium, 1), + new Pair<>(Materials.Aluminium, 3), + new Pair<>(Materials.Silicon, 3), + new Pair<>(Materials.Oxygen, 12), + new Pair<>(Materials.Hydrogen, 2)); + + public static final Werkstoff FuchsitCR = new Werkstoff( + new short[] { 128, 0, 0, 0 }, + "Red Fuchsite", + subscriptNumbers("KCr3Si3O10(OH)2"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 29, + TextureSet.SET_METALLIC, + Arrays.asList(Materials.Potassium, Materials.Chrome, Materials.SiliconDioxide), + new Pair<>(Materials.Potassium, 1), + new Pair<>(Materials.Chrome, 3), + new Pair<>(Materials.Silicon, 3), + new Pair<>(Materials.Oxygen, 12), + new Pair<>(Materials.Hydrogen, 2)); + + public static final Werkstoff Thorium232 = new Werkstoff( + new short[] { 0, 64, 0, 0 }, + "Thorium 232", + superscriptNumbers("Th232"), + new Werkstoff.Stats().setRadioactive(true) + .setBlastFurnace(true) + .setMass(232) + .setProtons(Element.Th.mProtons), + Werkstoff.Types.ISOTOPE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMetalItems() + .enforceUnification(), + 30, + TextureSet.SET_METALLIC + // No Byproducts + ); + public static final Werkstoff BismuthTellurite = new Werkstoff( + new short[] { 32, 72, 32, 0 }, + // Telluride is correct, tellurite is not. + // Only the display name gets renamed to avoid problems in other mods + "Bismuth Telluride", + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addChemicalRecipes(), + 31, + TextureSet.SET_METALLIC, + // No Byproducts + new Pair<>(Materials.Bismuth, 2), + new Pair<>(Materials.Tellurium, 3)); + public static final Werkstoff Tellurium = new Werkstoff( + new short[] { 0xff, 0xff, 0xff, 0 }, + "Tellurium", + new Werkstoff.Stats(), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().addMetalItems() + .removePrefix(ore), + 32, + TextureSet.SET_METALLIC, + // No Byproducts + new Pair<>(Materials.Tellurium, 1)); + public static final Werkstoff BismuthHydroBorat = new Werkstoff( + new short[] { 72, 144, 72, 0 }, + "Dibismuthhydroborat", + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addChemicalRecipes(), + 33, + TextureSet.SET_METALLIC, + // No Byproducts + new Pair<>(Materials.Bismuth, 2), + new Pair<>(Materials.Boron, 1), + new Pair<>(Materials.Hydrogen, 1)); + public static final Werkstoff ArInGaPhoBiBoTe = new Werkstoff( + new short[] { 36, 36, 36, 0 }, + "Circuit Compound MK3", + new Werkstoff.Stats().setCentrifuge(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMixerRecipes(), + 34, + TextureSet.SET_METALLIC, + // No Byproducts + new Pair<>(Materials.IndiumGalliumPhosphide, 1), + new Pair<>(WerkstoffLoader.BismuthHydroBorat, 3), + new Pair<>(WerkstoffLoader.BismuthTellurite, 2)); + + public static final Werkstoff Prasiolite = new Werkstoff( + new short[] { 0xD0, 0xDD, 0x95, 0 }, + "Prasiolite", + new Werkstoff.Stats().setElektrolysis(false) + .setMeltingPoint(1923), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems(), + 35, + TextureSet.SET_QUARTZ, + // No Byproducts + new Pair<>(Materials.Silicon, 5), + new Pair<>(Materials.Oxygen, 10), + new Pair<>(Materials.Iron, 1)); + + public static final Werkstoff MagnetoResonaticDust = new Werkstoff( + new short[] { 0xDD, 0x77, 0xDD, 0 }, + "Magneto Resonatic", + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().onlyDust() + .addMixerRecipes() + .addGems(), + 36, + TextureSet.SET_MAGNETIC, + // No Byproducts + new Pair<>(WerkstoffLoader.Prasiolite, 3), + new Pair<>(WerkstoffLoader.BismuthTellurite, 4), + new Pair<>(WerkstoffLoader.CubicZirconia, 1), + new Pair<>(Materials.SteelMagnetic, 1)); + public static final Werkstoff Xenon = new Werkstoff( + new short[] { 0x14, 0x39, 0x7F, 0 }, + "Xenon", + "Xe", + new Werkstoff.Stats().setProtons(54) + .setMass(131) + .setGas(true) + .setEbfGasRecipeTimeMultiplier(0.4d) + .setEbfGasRecipeConsumedAmountMultiplier(0.25d), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .addCells() + .enforceUnification(), + 37, + TextureSet.SET_FLUID + // No Byproducts + // No Ingredients + ); + public static final Werkstoff Oganesson = new Werkstoff( + new short[] { 0x14, 0x39, 0x7F, 0 }, + "Oganesson", + "Og", + new Werkstoff.Stats().setProtons(118) + .setMass(294) + .setGas(true) + .setEbfGasRecipeTimeMultiplier(0.3d) + .setEbfGasRecipeConsumedAmountMultiplier(0.1d), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 38, + TextureSet.SET_FLUID + // No Byproducts + // No Ingredients + ); + public static final Werkstoff Californium = new Werkstoff( + new short[] { 0xAA, 0xAA, 0xAA, 0 }, + "Californium", + "Cf", + new Werkstoff.Stats().setProtons(98) + .setMass(251) + .setBlastFurnace(true) + .setMeltingPoint(900), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMetalItems() + .addMolten() + .enforceUnification(), + 39, + TextureSet.SET_METALLIC + // No Byproducts + // No Ingredients + ); + public static final Werkstoff Calcium = new Werkstoff( + Materials.Calcium.mRGBa, + "Calcium", + "Ca", + new Werkstoff.Stats().setProtons(Element.Ca.mProtons) + .setMass(Element.Ca.getMass()) + .setBlastFurnace(true) + .setMeltingPoint(1115) + .setBoilingPoint(1757), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMetalItems() + .addMolten(), + 40, + Materials.Calcium.mIconSet, + // No Byproducts + new Pair<>(Materials.Calcium, 1)); + public static final Werkstoff Neon = new Werkstoff( + new short[] { 0xff, 0x07, 0x3a }, + "Neon", + "Ne", + new Werkstoff.Stats().setProtons(Element.Ne.mProtons) + .setMass(Element.Ne.getMass()) + .setGas(true) + .setEbfGasRecipeTimeMultiplier(0.6d) + .setEbfGasRecipeConsumedAmountMultiplier(0.55d), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .addCells() + .enforceUnification(), + 41, + TextureSet.SET_FLUID + // No Byproducts + // No Ingredients + ); + public static final Werkstoff Krypton = new Werkstoff( + new short[] { 0xb1, 0xff, 0x32 }, + "Krypton", + "Kr", + new Werkstoff.Stats().setProtons(Element.Kr.mProtons) + .setMass(Element.Kr.getMass()) + .setGas(true) + .setEbfGasRecipeTimeMultiplier(0.5d) + .setEbfGasRecipeConsumedAmountMultiplier(0.4d), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .addCells() + .enforceUnification(), + 42, + TextureSet.SET_FLUID + // No Byproducts + // No Ingredients + ); + public static final Werkstoff BArTiMaEuSNeK = new Werkstoff( + new short[] { 0x00, 0xff, 0x00 }, + "BArTiMaEuSNeK", + "Are you serious?", + new Werkstoff.Stats().setMeltingPoint(9001) + .setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingVoltage(1920), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems() + .addMetalItems() + .addMolten(), + 43, + TextureSet.SET_DIAMOND, + Arrays.asList(Materials.Boron, Materials.Titanium, Materials.Europium), + new Pair<>(Materials.Boron, 1), + new Pair<>(Materials.Argon, 1), + new Pair<>(Materials.Titanium, 1), + new Pair<>(Materials.Magic, 1), + new Pair<>(Materials.Europium, 1), + new Pair<>(Materials.Sulfur, 1), + new Pair<>(WerkstoffLoader.Neon, 1), + new Pair<>(Materials.Potassium, 1)); + public static final Werkstoff PTConcentrate = new Werkstoff( + Materials.Platinum.getRGBA(), + "Platinum Concentrate", + "", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 44, + TextureSet.SET_FLUID + // No Byproducts + // No Ingredients + ); + public static final Werkstoff PTSaltCrude = new Werkstoff( + Materials.Platinum.getRGBA(), + "Platinum Salt", + "", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 45, + TextureSet.SET_DULL + // No Byproducts + // No Ingredients + ); + public static final Werkstoff PTSaltRefined = new Werkstoff( + Materials.Platinum.getRGBA(), + "Refined Platinum Salt", + "", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 46, + TextureSet.SET_METALLIC + // No Byproducts + // No Ingredients + ); + public static final Werkstoff PTMetallicPowder = new Werkstoff( + Materials.Platinum.getRGBA(), + "Platinum Metallic Powder", + "??PtPdIrOsRhRu??", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + 47, + TextureSet.SET_METALLIC, + // No Byproducts + new Pair<>(Materials.Platinum, 1), + new Pair<>(Materials.Stone, 2)); + public static final Werkstoff AquaRegia = new Werkstoff( + new short[] { 0xff, 0xb1, 0x32 }, + "Aqua Regia", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 48, + TextureSet.SET_FLUID, + // No Byproducts + new Pair<>(Materials.DilutedSulfuricAcid, 1), + new Pair<>(Materials.NitricAcid, 1)); + public static final Werkstoff PTResidue = new Werkstoff( + new short[] { 0x64, 0x63, 0x2E }, + "Platinum Residue", + "??IrOsRhRu??", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 49, + TextureSet.SET_ROUGH + // No Byproducts + ); + public static final Werkstoff AmmoniumChloride = new Werkstoff( + new short[] { 0xff, 0xff, 0xff }, + "Ammonium Chloride", + subscriptNumbers("NH4Cl"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 50, + TextureSet.SET_FLUID, + // No Byproducts + new Pair<>(Materials.Ammonium, 1), + new Pair<>(Materials.HydrochloricAcid, 1)); + public static final Werkstoff PTRawPowder = new Werkstoff( + Materials.Platinum.getRGBA(), + "Reprecipitated Platinum", + "PtCl", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 51, + TextureSet.SET_METALLIC + // No Byproducts + ); + public static final Werkstoff PDAmmonia = new Werkstoff( + Materials.Palladium.getRGBA(), + "Palladium Enriched Ammonia", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 52, + TextureSet.SET_FLUID, + // No Byproducts + new Pair<>(Materials.Ammonium, 1), + new Pair<>(Materials.Palladium, 1)); + public static final Werkstoff PDMetallicPowder = new Werkstoff( + Materials.Palladium.getRGBA(), + "Palladium Metallic Powder", + "??Pd??", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + 53, + TextureSet.SET_METALLIC, + // No Byproducts + new Pair<>(Materials.Palladium, 1), + new Pair<>(Materials.Stone, 2)); + public static final Werkstoff PDRawPowder = new Werkstoff( + Materials.Palladium.getRGBA(), + "Reprecipitated Palladium", + subscriptNumbers("Pd2NH4"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 54, + TextureSet.SET_METALLIC + // No Byproducts + // No Ingredients + ); + public static final Werkstoff PDSalt = new Werkstoff( + Materials.Palladium.getRGBA(), + "Palladium Salt", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 55, + TextureSet.SET_METALLIC + // No Byproducts + // No Ingredients + ); + public static final Werkstoff Sodiumformate = new Werkstoff( + new short[] { 0xff, 0xaa, 0xaa }, + "Sodium Formate", + "HCOONa", + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 56, + TextureSet.SET_FLUID, + // No Byproducts + new Pair<>(Materials.SodiumHydroxide, 1), + new Pair<>(Materials.CarbonMonoxide, 1)); + public static final Werkstoff Sodiumsulfate = new Werkstoff( + new short[] { 0xff, 0xff, 0xff }, + "Sodium Sulfate", + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 57, + TextureSet.SET_FLUID, + // No Byproducts + new Pair<>(Materials.Sodium, 2), + new Pair<>(Materials.Sulfur, 1), + new Pair<>(Materials.Oxygen, 4)); + public static final Werkstoff FormicAcid = new Werkstoff( + new short[] { 0xff, 0xaa, 0x77 }, + "Formic Acid", + subscriptNumbers("CH2O2"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 58, + TextureSet.SET_FLUID, + // No Byproducts + new Pair<>(Materials.Carbon, 1), + new Pair<>(Materials.Hydrogen, 2), + new Pair<>(Materials.Oxygen, 2)); + public static final Werkstoff PotassiumDisulfate = new Werkstoff( + new short[] { 0xfb, 0xbb, 0x66 }, + "Potassium Disulfate", + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addChemicalRecipes(), + 59, + TextureSet.SET_DULL, + // No Byproducts + new Pair<>(Materials.Potassium, 2), + new Pair<>(Materials.Sulfur, 2), + new Pair<>(Materials.Oxygen, 7)); + public static final Werkstoff LeachResidue = new Werkstoff( + new short[] { 0x64, 0x46, 0x29 }, + "Leach Residue", + "??IrOsRu??", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + 60, + TextureSet.SET_ROUGH + // No Byproducts + ); + public static final Werkstoff RHSulfate = new Werkstoff( + new short[] { 0xee, 0xaa, 0x55 }, + "Rhodium Sulfate", + new Werkstoff.Stats().setGas(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 61, + TextureSet.SET_FLUID + // No Byproducts + ); + public static final Werkstoff RHSulfateSolution = new Werkstoff( + new short[] { 0xff, 0xbb, 0x66 }, + "Rhodium Sulfate Solution", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 62, + TextureSet.SET_FLUID + // No Byproducts + ); + public static final Werkstoff CalciumChloride = new Werkstoff( + new short[] { 0xff, 0xff, 0xff }, + "Calcium Chloride", + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addCells(), + 63, + TextureSet.SET_DULL, + new Pair<>(Materials.Calcium, 1), + new Pair<>(Materials.Chlorine, 2) + // No Byproducts + ); + public static final Werkstoff Ruthenium = new Werkstoff( + new short[] { 0x64, 0x64, 0x64 }, + "Ruthenium", + "Ru", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(2607) + .setMass(Element.Ru.getMass()) + .setProtons(Element.Ru.mProtons), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .enforceUnification(), + 64, + TextureSet.SET_METALLIC + // No Byproducts + ); + public static final Werkstoff SodiumRuthenate = new Werkstoff( + new short[] { 0x3a, 0x40, 0xcb }, + "Sodium Ruthenate", + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 65, + TextureSet.SET_SHINY, + new Pair<>(Materials.Sodium, 2), + new Pair<>(Ruthenium, 1), + new Pair<>(Materials.Oxygen, 3) + // No Byproducts + ); + public static final Werkstoff RutheniumTetroxide = new Werkstoff( + new short[] { 0xc7, 0xc7, 0xc7 }, + "Ruthenium Tetroxide", + new Werkstoff.Stats().setMeltingPoint(313), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addCells(), + 66, + TextureSet.SET_DULL, + new Pair<>(WerkstoffLoader.Ruthenium, 1), + new Pair<>(Materials.Oxygen, 4) + // No Byproducts + ); + public static final Werkstoff HotRutheniumTetroxideSollution = new Werkstoff( + new short[] { 0xc7, 0xc7, 0xc7 }, + "Hot Ruthenium Tetroxide Solution", + "???", + new Werkstoff.Stats().setGas(true) + .setMeltingPoint(700), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 67, + TextureSet.SET_FLUID, + new Pair<>(WerkstoffLoader.Ruthenium, 1), + new Pair<>(Materials.Oxygen, 4), + new Pair<>(Materials.Chlorine, 2), + new Pair<>(Materials.Sodium, 2), + new Pair<>(Materials.Water, 2) + // No Byproducts + ); + public static final Werkstoff RutheniumTetroxideSollution = new Werkstoff( + new short[] { 0xc7, 0xc7, 0xc7 }, + "Ruthenium Tetroxide Solution", + "???", + new Werkstoff.Stats().setMeltingPoint(313), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 68, + TextureSet.SET_FLUID, + new Pair<>(Ruthenium, 1), + new Pair<>(Materials.Oxygen, 4), + new Pair<>(Materials.Chlorine, 2), + new Pair<>(Materials.Sodium, 2), + new Pair<>(Materials.Water, 2) + // No Byproducts + ); + public static final Werkstoff IrOsLeachResidue = new Werkstoff( + new short[] { 0x64, 0x46, 0x29 }, + "Rarest Metal Residue", + "??OsIr??", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + 69, + TextureSet.SET_ROUGH, + // No Byproducts + new Pair<>(Materials.Osmiridium, 1), + new Pair<>(Materials.Stone, 2)); + public static final Werkstoff IrLeachResidue = new Werkstoff( + new short[] { 0x84, 0x66, 0x49 }, + "Iridium Metal Residue", + "??Ir??", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + 70, + TextureSet.SET_ROUGH, + new Pair<>(Materials.Iridium, 1), + new Pair<>(Materials.Stone, 2) + // No Byproducts + ); + public static final Werkstoff PGSDResidue = new Werkstoff( + new short[] { 0x84, 0x66, 0x49 }, + "Sludge Dust Residue", + new Werkstoff.Stats().setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 71, + TextureSet.SET_DULL, + new Pair<>(Materials.SiliconDioxide, 3), + new Pair<>(Materials.Gold, 2)); + public static final Werkstoff AcidicOsmiumSolution = new Werkstoff( + new short[] { 0x84, 0x66, 0x49 }, + "Acidic Osmium Solution", + "???", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 72, + TextureSet.SET_FLUID, + new Pair<>(Materials.Osmium, 1), + new Pair<>(Materials.HydrochloricAcid, 1)); + public static final Werkstoff IridiumDioxide = new Werkstoff( + new short[] { 0x84, 0x66, 0x49 }, + "Iridium Dioxide", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 73, + TextureSet.SET_FLUID, + new Pair<>(Materials.Iridium, 1), + new Pair<>(Materials.Oxygen, 2)); + public static final Werkstoff OsmiumSolution = new Werkstoff( + new short[] { 0x84, 0x66, 0x49 }, + "Osmium Solution", + "???", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 74, + TextureSet.SET_FLUID, + new Pair<>(Materials.Osmium, 1), + new Pair<>(Materials.Hydrogen, 1)); + public static final Werkstoff AcidicIridiumSolution = new Werkstoff( + new short[] { 0x84, 0x66, 0x49 }, + "Acidic Iridium Solution", + "???", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 75, + TextureSet.SET_FLUID, + new Pair<>(Materials.Iridium, 1), + new Pair<>(Materials.Hydrogen, 1)); + public static final Werkstoff IridiumChloride = new Werkstoff( + new short[] { 0x84, 0x66, 0x49 }, + "Iridium Chloride", + subscriptNumbers("IrCl3"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 76, + TextureSet.SET_LAPIS, + new Pair<>(Materials.Iridium, 1), + new Pair<>(Materials.Chlorine, 3)); + public static final Werkstoff PGSDResidue2 = new Werkstoff( + new short[] { 0x84, 0x66, 0x49 }, + "Metallic Sludge Dust Residue", + new Werkstoff.Stats().setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 77, + TextureSet.SET_DULL, + new Pair<>(Materials.Nickel, 1), + new Pair<>(Materials.Copper, 1)); + public static final Werkstoff Rhodium = new Werkstoff( + new short[] { 0xF4, 0xF4, 0xF4 }, + "Rhodium", + "Rh", + new Werkstoff.Stats().setProtons(Element.Rh.mProtons) + .setMass(Element.Rh.getMass()) + .setBlastFurnace(true) + .setMeltingPoint(2237), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMetalItems() + .addMolten() + .enforceUnification(), + 78, + TextureSet.SET_METALLIC); + public static final Werkstoff CrudeRhMetall = new Werkstoff( + new short[] { 0x66, 0x66, 0x66 }, + "Crude Rhodium Metal", + "??Rh??", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + 79, + TextureSet.SET_DULL, + new Pair<>(Rhodium, 1), + new Pair<>(Materials.Stone, 1)); + public static final Werkstoff RHSalt = new Werkstoff( + new short[] { 0x84, 0x84, 0x84 }, + "Rhodium Salt", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 80, + TextureSet.SET_GEM_VERTICAL); + public static final Werkstoff RHSaltSolution = new Werkstoff( + new short[] { 0x66, 0x77, 0x88 }, + "Rhodium Salt Solution", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 81, + TextureSet.SET_FLUID); + public static final Werkstoff SodiumNitrate = new Werkstoff( + new short[] { 0x84, 0x66, 0x84 }, + "Sodium Nitrate", + subscriptNumbers("NaNO3"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 82, + TextureSet.SET_ROUGH, + new Pair<>(Materials.Sodium, 1), + new Pair<>(Materials.Nitrogen, 1), + new Pair<>(Materials.Oxygen, 3)); + public static final Werkstoff RHNitrate = new Werkstoff( + new short[] { 0x77, 0x66, 0x49 }, + "Rhodium Nitrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 83, + TextureSet.SET_QUARTZ); + public static final Werkstoff ZincSulfate = new Werkstoff( + new short[] { 0x84, 0x66, 0x49 }, + "Zinc Sulfate", + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 84, + TextureSet.SET_QUARTZ, + new Pair<>(Materials.Zinc, 1), + new Pair<>(Materials.Sulfur, 1), + new Pair<>(Materials.Oxygen, 4)); + public static final Werkstoff RhFilterCake = new Werkstoff( + new short[] { 0x77, 0x66, 0x49 }, + "Rhodium Filter Cake", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 85, + TextureSet.SET_QUARTZ); + public static final Werkstoff RHFilterCakeSolution = new Werkstoff( + new short[] { 0x66, 0x77, 0x88 }, + "Rhodium Filter Cake Solution", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 86, + TextureSet.SET_FLUID); + public static final Werkstoff ReRh = new Werkstoff( + new short[] { 0x77, 0x66, 0x49 }, + "Reprecipitated Rhodium", + subscriptNumbers("Rh2NH4"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 87, + TextureSet.SET_QUARTZ); + public static final Werkstoff LuVTierMaterial = new Werkstoff( + Materials.Chrome.getRGBA(), + "Rhodium-Plated Palladium", + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(4500) + .setMeltingVoltage(480), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addMetalItems() + .addMixerRecipes((short) 1) + .addSimpleMetalWorkingItems() + .addCraftingMetalWorkingItems() + .addMultipleIngotMetalWorkingItems(), + 88, + TextureSet.SET_METALLIC, + new Pair<>(Materials.Palladium, 3), + new Pair<>(WerkstoffLoader.Rhodium, 1)); + public static final Werkstoff Tiberium = new Werkstoff( + new short[] { 0x22, 0xEE, 0x22 }, + "Tiberium", + "Tr", + new Werkstoff.Stats().setProtons(123) + .setMass(326) + .setBlastFurnace(true) + .setMeltingPoint(1800) + .setRadioactive(true) + .setToxic(true), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().addGems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems(), + 89, + TextureSet.SET_DIAMOND); + public static final Werkstoff Ruridit = new Werkstoff( + new short[] { 0xA4, 0xA4, 0xA4 }, + "Ruridit", + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(4500) + .setMeltingVoltage(480), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addMetalItems() + .addMixerRecipes((short) 1) + .addSimpleMetalWorkingItems() + .addCraftingMetalWorkingItems() + .addMultipleIngotMetalWorkingItems(), + 90, + TextureSet.SET_METALLIC, + new Pair<>(WerkstoffLoader.Ruthenium, 2), + new Pair<>(Materials.Iridium, 1)); + public static final Werkstoff Fluorspar = new Werkstoff( + new short[] { 185, 69, 251 }, + "Fluorspar", + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().addGems(), + 91, + TextureSet.SET_GEM_VERTICAL, + new Pair<>(Materials.Calcium, 1), + new Pair<>(Materials.Fluorine, 2)); + public static final Werkstoff HDCS = new Werkstoff( + new short[] { 0x33, 0x44, 0x33 }, + "High Durability Compound Steel", + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(9000) + .setMeltingVoltage(7680), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addMetalItems() + .addMixerRecipes() + .addSimpleMetalWorkingItems() + .addCraftingMetalWorkingItems() + .addMultipleIngotMetalWorkingItems(), + 92, + TextureSet.SET_SHINY, + new Pair<>(Materials.TungstenSteel, 12), + new Pair<>(Materials.HSSE, 9), + new Pair<>(Materials.HSSG, 6), + new Pair<>(WerkstoffLoader.Ruridit, 3), + new Pair<>(WerkstoffLoader.MagnetoResonaticDust, 2), + new Pair<>(Materials.Plutonium, 1)); + public static final Werkstoff Atheneite = new Werkstoff( + new short[] { 175, 175, 175 }, + "Atheneite", + subscriptNumbers("(Pd,Hg)3As"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 93, + TextureSet.SET_SHINY, + new Pair<>(WerkstoffLoader.PDMetallicPowder, 3), + new Pair<>(Materials.Mercury, 3), + new Pair<>(Materials.Arsenic, 1)); + public static final Werkstoff Temagamite = new Werkstoff( + new short[] { 245, 245, 245 }, + "Temagamite", + subscriptNumbers("Pd3HgTe"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 94, + TextureSet.SET_ROUGH, + new Pair<>(WerkstoffLoader.PDMetallicPowder, 3), + new Pair<>(Materials.Mercury, 1), + new Pair<>(Materials.Tellurium, 1)); + public static final Werkstoff Terlinguaite = new Werkstoff( + new short[] { 245, 245, 245 }, + "Terlinguaite", + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures(), + 95, + TextureSet.SET_GEM_HORIZONTAL, + new Pair<>(Materials.Mercury, 2), + new Pair<>(Materials.Chlorine, 1), + new Pair<>(Materials.Oxygen, 1)); + public static final Werkstoff AdemicSteel = new Werkstoff( + new short[] { 0xcc, 0xcc, 0xcc }, + "Ademic Steel", + "The break in the line", + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setDurOverride(6144) + .setMeltingPoint(1800) + .setSpeedOverride(12) + .setQualityOverride((byte) 4) + .setMeltingVoltage(1920), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMolten() + .addSimpleMetalWorkingItems() + .addMultipleIngotMetalWorkingItems(), + 96, + TextureSet.SET_METALLIC, + new Pair<>(Materials.Steel, 2), + new Pair<>(Materials.VanadiumSteel, 1), + new Pair<>(Materials.DamascusSteel, 1), + new Pair<>(Materials.Carbon, 4)); + public static final Werkstoff RawAdemicSteel = new Werkstoff( + new short[] { 0xed, 0xed, 0xed }, + "Raw Ademic Steel", + new Werkstoff.Stats().setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMixerRecipes(), + 97, + TextureSet.SET_ROUGH, + new Pair<>(Materials.Steel, 2), + new Pair<>(Materials.VanadiumSteel, 1), + new Pair<>(Materials.DamascusSteel, 1)); + public static final Werkstoff HexafluorosilicicAcid = new Werkstoff( + new short[] { 0x2c, 0x70, 0xb5 }, + "Hexafluorosilicic Acid", + subscriptNumbers("H2SiF6"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 98, + TextureSet.SET_FLUID, + new Pair<>(Materials.Hydrogen, 2), + new Pair<>(Materials.Silicon, 1), + new Pair<>(Materials.Fluorine, 6)); + public static final Werkstoff Potassiumfluorosilicate = new Werkstoff( + new short[] { 0x2e, 0x97, 0xb2 }, + "Potassiumfluorosilicate", + subscriptNumbers("K2SiF6"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 99, + TextureSet.SET_SHINY, + new Pair<>(Materials.Potassium, 2), + new Pair<>(Materials.Silicon, 1), + new Pair<>(Materials.Fluorine, 6)); + public static final Werkstoff Alumina = new Werkstoff( + new short[] { 0xa0, 0xad, 0xb1 }, + "Alumina", + subscriptNumbers("Al2O3"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 100, + TextureSet.SET_DULL); + public static final Werkstoff PotassiumCarbonate = new Werkstoff( + new short[] { 0x7b, 0x96, 0x4f }, + "Potassium Carbonate", + subscriptNumbers("K2CO3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 101, + TextureSet.SET_DULL, + new Pair<>(Materials.Potassium, 2), + new Pair<>(Materials.Carbon, 1), + new Pair<>(Materials.Oxygen, 3)); + public static final Werkstoff RawFluorophlogopite = new Werkstoff( + new short[] { 0x36, 0x51, 0x0b }, + "Raw Fluorophlogopite", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + 102, + TextureSet.SET_DULL); + public static final Werkstoff HotFluorophlogopite = new Werkstoff( + new short[] { 0xbf, 0xd3, 0x55 }, + "Unformed Fluorophlogopite", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 103, + TextureSet.SET_FLUID); + public static final Werkstoff Fluorophlogopite = new Werkstoff( + new short[] { 0xbf, 0xd3, 0x55 }, + "Fluorophlogopite", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMetalItems(), + 104, + TextureSet.SET_SHINY); + + public static HashMap items = new HashMap<>(); + public static HashBiMap fluids = HashBiMap.create(); + public static HashBiMap molten = HashBiMap.create(); + public static Block BWOres; + public static Block BWSmallOres; + public static Block BWBlocks; + public static Block BWBlockCasings; + public static Block BWBlockCasingsAdvanced; + public static boolean registered; + public static final HashSet ENABLED_ORE_PREFIXES = new HashSet<>(); + + public static Werkstoff getWerkstoff(String Name) { + try { + Field f = WerkstoffLoader.class.getField(Name); + return (Werkstoff) f.get(null); + } catch (IllegalAccessException | NoSuchFieldException | ClassCastException e) { + MainMod.LOGGER.catching(e); + } + return Werkstoff.default_null_Werkstoff; + } + + public static ItemStack getCorrespondingItemStack(OrePrefixes orePrefixes, Werkstoff werkstoff) { + return WerkstoffLoader.getCorrespondingItemStack(orePrefixes, werkstoff, 1); + } + + public static ItemStack getCorrespondingItemStackUnsafe(OrePrefixes orePrefixes, Werkstoff werkstoff, int amount) { + if (!werkstoff.getGenerationFeatures().enforceUnification) { + ItemStack ret = GTOreDictUnificator.get(orePrefixes, werkstoff.getBridgeMaterial(), amount); + if (ret != null) return ret; + ret = OreDictHandler.getItemStack(werkstoff.getVarName(), orePrefixes, amount); + if (ret != null) return ret; + } + if (orePrefixes == ore) return new ItemStack(WerkstoffLoader.BWOres, amount, werkstoff.getmID()); + if (orePrefixes == oreSmall) return new ItemStack(WerkstoffLoader.BWSmallOres, amount, werkstoff.getmID()); + else if (orePrefixes == block) return new ItemStack(WerkstoffLoader.BWBlocks, amount, werkstoff.getmID()); + else if (orePrefixes == OrePrefixes.blockCasing) + return new ItemStack(WerkstoffLoader.BWBlockCasings, amount, werkstoff.getmID()); + else if (orePrefixes == OrePrefixes.blockCasingAdvanced) + return new ItemStack(WerkstoffLoader.BWBlockCasingsAdvanced, amount, werkstoff.getmID()); + else if (WerkstoffLoader.items.get(orePrefixes) == null) return null; + return new ItemStack(WerkstoffLoader.items.get(orePrefixes), amount, werkstoff.getmID()).copy(); + } + + public static ItemStack getCorrespondingItemStack(OrePrefixes orePrefixes, Werkstoff werkstoff, int amount) { + ItemStack stack = getCorrespondingItemStackUnsafe(orePrefixes, werkstoff, amount); + if (stack != null) return stack; + MainMod.LOGGER.catching( + Level.ERROR, + new Exception( + "NO SUCH ITEM! " + orePrefixes + + werkstoff.getVarName() + + " If you encounter this as a user, make sure to contact the authors of the pack/the mods you're playing! " + + "If you are a Developer, you forgot to enable " + + orePrefixes + + " OrePrefix for Werkstoff " + + werkstoff.getDefaultName())); + return new ItemStack(WerkstoffLoader.items.get(orePrefixes), amount, werkstoff.getmID()).copy(); + } + + public static void runInit() { + MainMod.LOGGER.info("Making Meta Items for BW Materials"); + long timepre = System.nanoTime(); + WerkstoffAdderRegistry.run(); + addSubTags(); + addItemsForGeneration(); + addBridgeSubTags(); + runAdditionalOreDict(); + long timepost = System.nanoTime(); + MainMod.LOGGER.info( + "Making Meta Items for BW Materials took " + (timepost - timepre) + + "ns/" + + (timepost - timepre) / 1000000 + + "ms/" + + (timepost - timepre) / 1000000000 + + "s!"); + } + + public static void run() { + if (!registered) { + MainMod.LOGGER.info("Loading Processing Recipes for BW Materials"); + long timepre = System.nanoTime(); + ProgressManager.ProgressBar progressBar = ProgressManager + .push("Register BW Materials", Werkstoff.werkstoffHashSet.size() + 1); + DebugLog.log("Loading Recipes" + (System.nanoTime() - timepre)); + Integer[] clsArr = {}; + int size = 0; + if (BetterLoadingScreen.isModLoaded()) clsArr = CLSCompat.initCls(); + + IWerkstoffRunnable[] werkstoffRunnables = { new ToolLoader(), new DustLoader(), new GemLoader(), + new SimpleMetalLoader(), new CasingLoader(), new AspectLoader(), new OreLoader(), new RawOreLoader(), + new CrushedLoader(), new CraftingMaterialLoader(), new CellLoader(), new MoltenCellLoader(), + new MultipleMetalLoader(), new MetalLoader(), new BlockLoader() }; + + long timepreone = 0; + for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { + timepreone = System.nanoTime(); + DebugLog.log( + "Werkstoff is null or id < 0 ? " + (werkstoff == null || werkstoff.getmID() < 0) + + " " + + (System.nanoTime() - timepreone)); + if (werkstoff == null || werkstoff.getmID() < 0) { + progressBar.step(""); + continue; + } + if (BetterLoadingScreen.isModLoaded()) size = CLSCompat.invokeStepSize(werkstoff, clsArr, size); + DebugLog.log("Werkstoff: " + werkstoff.getDefaultName() + " " + (System.nanoTime() - timepreone)); + for (IWerkstoffRunnable runnable : werkstoffRunnables) { + String loaderName = runnable.getClass() + .getSimpleName(); + DebugLog.log(loaderName + " started " + (System.nanoTime() - timepreone)); + runnable.run(werkstoff); + DebugLog.log(loaderName + " done " + (System.nanoTime() - timepreone)); + } + DebugLog.log("Done" + " " + (System.nanoTime() - timepreone)); + progressBar.step(werkstoff.getDefaultName()); + } + DebugLog.log("Loading New Circuits" + " " + (System.nanoTime() - timepreone)); + BWCircuitsLoader.initNewCircuits(); + + if (BetterLoadingScreen.isModLoaded()) { + CLSCompat.disableCls(); + } + + progressBar.step("Load Additional Recipes"); + AdditionalRecipes.run(); + ProgressManager.pop(progressBar); + long timepost = System.nanoTime(); + MainMod.LOGGER.info( + "Loading Processing Recipes for BW Materials took " + (timepost - timepre) + + "ns/" + + (timepost - timepre) / 1000000 + + "ms/" + + (timepost - timepre) / 1000000000 + + "s!"); + registered = true; + } + } + + @SuppressWarnings("unchecked") + private static void addSubTags() { + WerkstoffLoader.CubicZirconia.getStats() + .setDurOverride(Materials.Diamond.mDurability); + WerkstoffLoader.HDCS.getStats() + .setSpeedOverride(Materials.HSSS.mToolSpeed); + WerkstoffLoader.HDCS.getStats() + .setDurMod(10f); + Materials.Helium.add(WerkstoffLoader.NOBLE_GAS); + WerkstoffLoader.Neon.add(WerkstoffLoader.NOBLE_GAS); + Materials.Argon.add(WerkstoffLoader.NOBLE_GAS); + WerkstoffLoader.Krypton.add(WerkstoffLoader.NOBLE_GAS); + WerkstoffLoader.Xenon.add(WerkstoffLoader.NOBLE_GAS, WerkstoffLoader.ANAEROBE_GAS); + Materials.Radon.add(WerkstoffLoader.NOBLE_GAS); + WerkstoffLoader.Oganesson.add(WerkstoffLoader.NOBLE_GAS, WerkstoffLoader.ANAEROBE_GAS); + + Materials.Nitrogen.add(WerkstoffLoader.ANAEROBE_GAS); + + WerkstoffLoader.Calcium.add(WerkstoffLoader.ANAEROBE_SMELTING); + + WerkstoffLoader.LuVTierMaterial.add(WerkstoffLoader.NOBLE_GAS_SMELTING); + WerkstoffLoader.Ruridit.add(WerkstoffLoader.NOBLE_GAS_SMELTING); + WerkstoffLoader.AdemicSteel.add(WerkstoffLoader.NOBLE_GAS_SMELTING); + + WerkstoffLoader.MagnetoResonaticDust.add(WerkstoffLoader.NO_BLAST); + + // Calcium Smelting block + Materials.Calcium.mBlastFurnaceRequired = true; + + Materials.Salt.mDurability = WerkstoffLoader.Salt.getDurability(); + Materials.Spodumene.mDurability = WerkstoffLoader.Spodumen.getDurability(); + Materials.RockSalt.mDurability = WerkstoffLoader.RockSalt.getDurability(); + Materials.Calcium.mDurability = WerkstoffLoader.Calcium.getDurability(); + + Materials.Salt.mToolSpeed = WerkstoffLoader.Salt.getToolSpeed(); + Materials.Spodumene.mToolSpeed = WerkstoffLoader.Spodumen.getToolSpeed(); + Materials.RockSalt.mToolSpeed = WerkstoffLoader.RockSalt.getToolSpeed(); + Materials.Calcium.mToolSpeed = WerkstoffLoader.Calcium.getToolSpeed(); + + Materials.Salt.mToolQuality = WerkstoffLoader.Salt.getToolQuality(); + Materials.Spodumene.mToolQuality = WerkstoffLoader.Spodumen.getToolQuality(); + Materials.RockSalt.mToolQuality = WerkstoffLoader.RockSalt.getToolQuality(); + Materials.Calcium.mToolQuality = WerkstoffLoader.Calcium.getToolQuality(); + + for (Werkstoff W : Werkstoff.werkstoffHashSet) { + for (Pair pair : W.getContents() + .getValue() + .toArray(new Pair[0])) { + + if (pair.getKey() instanceof Materials && pair.getKey() == Materials.Neodymium) { + W.add(SubTag.ELECTROMAGNETIC_SEPERATION_NEODYMIUM); + break; + } + if (pair.getKey() instanceof Materials && pair.getKey() == Materials.Iron) { + W.add(SubTag.ELECTROMAGNETIC_SEPERATION_IRON); + break; + } else if (pair.getKey() instanceof Materials && pair.getKey() == Materials.Gold) { + W.add(SubTag.ELECTROMAGNETIC_SEPERATION_GOLD); + break; + } + } + if (W.hasItemType(gem)) { + W.add(SubTag.CRYSTAL); + W.add(SubTag.CRYSTALLISABLE); + } + } + } + + private static void addBridgeSubTags() { + // add specific GT materials subtags to various werkstoff bridgematerials + + SubTag.METAL.addTo(LuVTierMaterial.getBridgeMaterial()); + } + + public static long toGenerateGlobal; + + private static void addItemsForGeneration() { + for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { + if (werkstoff.hasItemType(cell)) { + if (!FluidRegistry.isFluidRegistered(werkstoff.getDefaultName())) { + DebugLog.log("Adding new Fluid: " + werkstoff.getDefaultName()); + Fluid fluid = GTFluidFactory.builder(werkstoff.getDefaultName()) + .withLocalizedName(werkstoff.getDefaultName()) + .withStateAndTemperature( + werkstoff.getStats() + .getFluidState(), + 300) + .withColorRGBA(werkstoff.getRGBA()) + .withTextureName("autogenerated") + .buildAndRegister() + .asFluid(); + WerkstoffLoader.fluids.put(werkstoff, fluid); + } else { + WerkstoffLoader.fluids.put(werkstoff, FluidRegistry.getFluid(werkstoff.getDefaultName())); + } + } + if (werkstoff.hasItemType(OrePrefixes.cellMolten)) { + if (!FluidRegistry.isFluidRegistered("molten." + werkstoff.getDefaultName())) { + DebugLog.log("Adding new Molten: " + werkstoff.getDefaultName()); + Fluid fluid = GTFluidFactory.builder("molten." + werkstoff.getDefaultName()) + .withLocalizedName("Molten " + werkstoff.getDefaultName()) + .withStateAndTemperature( + FluidState.MOLTEN, + werkstoff.getStats() + .getMeltingPoint() > 0 ? werkstoff.getStats() + .getMeltingPoint() : 300) + .withColorRGBA(werkstoff.getRGBA()) + .withTextureName("molten.autogenerated") + .buildAndRegister() + .asFluid(); + WerkstoffLoader.molten.put(werkstoff, fluid); + } else { + WerkstoffLoader.molten.put(werkstoff, FluidRegistry.getFluid(werkstoff.getDefaultName())); + } + } + for (OrePrefixes p : values()) if (Materials.get(werkstoff.getDefaultName()) != null + && Materials.get(werkstoff.getDefaultName()).mMetaItemSubID != -1 + && (werkstoff.getGenerationFeatures().toGenerate & p.mMaterialGenerationBits) != 0 + && OreDictHandler.getItemStack(werkstoff.getDefaultName(), p, 1) != null) { + DebugLog.log( + "Found: " + p + + werkstoff.getVarName() + + " in GT material system, disable and reroute my Items to that, also add a Tooltip."); + werkstoff.getGenerationFeatures() + .setBlacklist(p); + } + WerkstoffLoader.toGenerateGlobal = WerkstoffLoader.toGenerateGlobal + | werkstoff.getGenerationFeatures().toGenerate; + } + DebugLog.log("GlobalGeneration: " + WerkstoffLoader.toGenerateGlobal); + if ((WerkstoffLoader.toGenerateGlobal & 0b1) != 0) { + WerkstoffLoader.items.put(dust, new BWMetaGeneratedItems(dust)); + WerkstoffLoader.items.put(dustTiny, new BWMetaGeneratedItems(dustTiny)); + WerkstoffLoader.items.put(dustSmall, new BWMetaGeneratedItems(dustSmall)); + } + if ((WerkstoffLoader.toGenerateGlobal & 0b10) != 0) { + WerkstoffLoader.items.put(ingot, new BWMetaGeneratedItems(ingot)); + WerkstoffLoader.items.put(ingotHot, new BWMetaGeneratedItems(ingotHot)); // 1750 + WerkstoffLoader.items.put(nugget, new BWMetaGeneratedItems(nugget)); + } + if ((WerkstoffLoader.toGenerateGlobal & 0b100) != 0) { + WerkstoffLoader.items.put(gem, new BWMetaGeneratedItems(gem)); + WerkstoffLoader.items.put(gemChipped, new BWMetaGeneratedItems(gemChipped)); + WerkstoffLoader.items.put(gemExquisite, new BWMetaGeneratedItems(gemExquisite)); + WerkstoffLoader.items.put(gemFlawed, new BWMetaGeneratedItems(gemFlawed)); + WerkstoffLoader.items.put(gemFlawless, new BWMetaGeneratedItems(gemFlawless)); + WerkstoffLoader.items.put(lens, new BWMetaGeneratedItems(lens)); + } + if ((WerkstoffLoader.toGenerateGlobal & 0b1000) != 0) { + gameRegistryHandler(); + WerkstoffLoader.items.put(crushed, new BWMetaGeneratedItems(crushed)); + WerkstoffLoader.items.put(crushedPurified, new BWMetaGeneratedItems(crushedPurified)); + WerkstoffLoader.items.put(crushedCentrifuged, new BWMetaGeneratedItems(crushedCentrifuged)); + WerkstoffLoader.items.put(dustPure, new BWMetaGeneratedItems(dustPure)); + WerkstoffLoader.items.put(dustImpure, new BWMetaGeneratedItems(dustImpure)); + WerkstoffLoader.items.put(rawOre, new BWMetaGeneratedItems(rawOre)); + } + if ((WerkstoffLoader.toGenerateGlobal & 0b10000) != 0) { + WerkstoffLoader.items.put(cell, new BWMetaGeneratedItems(cell)); + if (Forestry.isModLoaded()) { + BWMetaGeneratedItems capsuleClass = new BWMetaGeneratedItems(capsule); + API.hideItem(new ItemStack(capsuleClass, 1, WILDCARD)); + WerkstoffLoader.items.put(capsule, capsuleClass); + } + } + if ((WerkstoffLoader.toGenerateGlobal & 0b100000) != 0) { + WerkstoffLoader.items.put(cellPlasma, new BWMetaGeneratedItems(cellPlasma)); + } + if ((WerkstoffLoader.toGenerateGlobal & 0b1000000) != 0) { + WerkstoffLoader.items.put(OrePrefixes.cellMolten, new BWMetaGeneratedItems(OrePrefixes.cellMolten)); + if (Forestry.isModLoaded()) { + BWMetaGeneratedItems capsuleMoltenClass = new BWMetaGeneratedItems(OrePrefixes.capsuleMolten); + API.hideItem(new ItemStack(capsuleMoltenClass, 1, WILDCARD)); + WerkstoffLoader.items.put(OrePrefixes.capsuleMolten, capsuleMoltenClass); + } + } + if ((WerkstoffLoader.toGenerateGlobal & 0b10000000) != 0) { + WerkstoffLoader.items.put(plate, new BWMetaGeneratedItems(plate)); + WerkstoffLoader.items.put(foil, new BWMetaGeneratedItems(foil)); + WerkstoffLoader.items.put(stick, new BWMetaGeneratedItems(stick)); + WerkstoffLoader.items.put(stickLong, new BWMetaGeneratedItems(stickLong)); + WerkstoffLoader.items.put(toolHeadWrench, new BWMetaGeneratedItems(toolHeadWrench)); + WerkstoffLoader.items.put(toolHeadHammer, new BWMetaGeneratedItems(toolHeadHammer)); + WerkstoffLoader.items.put(toolHeadSaw, new BWMetaGeneratedItems(toolHeadSaw)); + WerkstoffLoader.items.put(turbineBlade, new BWMetaGeneratedItems(turbineBlade)); + } + if ((WerkstoffLoader.toGenerateGlobal & 0b100000000) != 0) { + WerkstoffLoader.items.put(gearGt, new BWMetaGeneratedItems(gearGt)); + WerkstoffLoader.items.put(gearGtSmall, new BWMetaGeneratedItems(gearGtSmall)); + WerkstoffLoader.items.put(bolt, new BWMetaGeneratedItems(bolt)); + WerkstoffLoader.items.put(screw, new BWMetaGeneratedItems(screw)); + WerkstoffLoader.items.put(ring, new BWMetaGeneratedItems(ring)); + WerkstoffLoader.items.put(spring, new BWMetaGeneratedItems(spring)); + WerkstoffLoader.items.put(springSmall, new BWMetaGeneratedItems(springSmall)); + WerkstoffLoader.items.put(rotor, new BWMetaGeneratedItems(rotor)); + WerkstoffLoader.items.put(wireFine, new BWMetaGeneratedItems(wireFine)); + } + if ((WerkstoffLoader.toGenerateGlobal & 0b1000000000) != 0) { + WerkstoffLoader.items.put(plateDouble, new BWMetaGeneratedItems(plateDouble)); + WerkstoffLoader.items.put(plateTriple, new BWMetaGeneratedItems(plateTriple)); + WerkstoffLoader.items.put(plateQuadruple, new BWMetaGeneratedItems(plateQuadruple)); + WerkstoffLoader.items.put(plateQuintuple, new BWMetaGeneratedItems(plateQuintuple)); + WerkstoffLoader.items.put(plateDense, new BWMetaGeneratedItems(plateDense)); + WerkstoffLoader.items.put(ingotDouble, new BWMetaGeneratedItems(ingotDouble)); + WerkstoffLoader.items.put(ingotTriple, new BWMetaGeneratedItems(ingotTriple)); + WerkstoffLoader.items.put(ingotQuadruple, new BWMetaGeneratedItems(ingotQuadruple)); + WerkstoffLoader.items.put(ingotQuintuple, new BWMetaGeneratedItems(ingotQuintuple)); + } + ENABLED_ORE_PREFIXES.addAll(WerkstoffLoader.items.keySet()); + ENABLED_ORE_PREFIXES.add(ore); + ENABLED_ORE_PREFIXES.add(oreSmall); + WerkstoffLoader.runGTItemDataRegistrator(); + } + + static void gameRegistryHandler() { + if (SideReference.Side.Client) BWBlockOreRenderer.register(); + + GameRegistry.registerTileEntity(BWTileEntityMetaGeneratedOre.class, "bw.blockoresTE"); + GameRegistry.registerTileEntity(BWTileEntityMetaGeneratedSmallOre.class, "bw.blockoresSmallTE"); + GameRegistry.registerTileEntity(BWTileEntityMetaGeneratedWerkstoffBlock.class, "bw.werkstoffblockTE"); + GameRegistry.registerTileEntity(BWTileEntityMetaGeneratedBlocksCasing.class, "bw.werkstoffblockcasingTE"); + GameRegistry.registerTileEntity( + BWTileEntityMetaGeneratedBlocksCasingAdvanced.class, + "bw.werkstoffblockscasingadvancedTE"); + + WerkstoffLoader.BWOres = new BWMetaGeneratedOres( + Material.rock, + BWTileEntityMetaGeneratedOre.class, + "bw.blockores"); + WerkstoffLoader.BWSmallOres = new BWMetaGeneratedSmallOres( + Material.rock, + BWTileEntityMetaGeneratedSmallOre.class, + "bw.blockoresSmall"); + WerkstoffLoader.BWBlocks = new BWMetaGeneratedWerkstoffBlocks( + Material.iron, + BWTileEntityMetaGeneratedWerkstoffBlock.class, + "bw.werkstoffblocks"); + WerkstoffLoader.BWBlockCasings = new BWMetaGeneratedBlocksCasing( + Material.iron, + BWTileEntityMetaGeneratedBlocksCasing.class, + "bw.werkstoffblockscasing", + OrePrefixes.blockCasing); + WerkstoffLoader.BWBlockCasingsAdvanced = new BWMetaGeneratedBlocksCasing( + Material.iron, + BWTileEntityMetaGeneratedBlocksCasingAdvanced.class, + "bw.werkstoffblockscasingadvanced", + OrePrefixes.blockCasingAdvanced); + + GameRegistry.registerBlock(WerkstoffLoader.BWOres, BWItemMetaGeneratedBlock.class, "bw.blockores.01"); + GameRegistry.registerBlock(WerkstoffLoader.BWSmallOres, BWItemMetaGeneratedBlock.class, "bw.blockores.02"); + GameRegistry.registerBlock(WerkstoffLoader.BWBlocks, BWItemMetaGeneratedBlock.class, "bw.werkstoffblocks.01"); + if (!ConfigHandler.disableBoltedBlocksCasing) GameRegistry.registerBlock( + WerkstoffLoader.BWBlockCasings, + BWItemMetaGeneratedBlock.class, + "bw.werkstoffblockscasing.01"); + if (!ConfigHandler.disableReboltedBlocksCasing) GameRegistry.registerBlock( + WerkstoffLoader.BWBlockCasingsAdvanced, + BWItemMetaGeneratedBlock.class, + "bw.werkstoffblockscasingadvanced.01"); + + GTMetaItemEnhancer.addAdditionalOreDictToForestry(); + GTMetaItemEnhancer.init(); + } + + private static void runGTItemDataRegistrator() { + IWerkstoffRunnable[] registrations = { new BridgeMaterialsLoader(), new AssociationLoader(), + new CasingRegistrator() }; + for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { + for (IWerkstoffRunnable registration : registrations) { + registration.run(werkstoff); + } + } + addFakeItemDataToInWorldBlocksAndCleanUpFakeData(); + addVanillaCasingsToGTOreDictUnificator(); + } + + public static void addVanillaCasingsToGTOreDictUnificator() { + GTOreDictUnificator + .addAssociation(OrePrefixes.blockCasing, Materials.Aluminium, ItemList.Casing_FrostProof.get(1L), false); + GTOreDictUnificator + .addAssociation(OrePrefixes.blockCasing, Materials.Nickel, ItemList.Casing_HeatProof.get(1L), false); + GTOreDictUnificator + .addAssociation(OrePrefixes.blockCasing, Materials.Lead, ItemList.Casing_RadiationProof.get(1L), false); + GTOreDictUnificator + .addAssociation(OrePrefixes.blockCasing, Materials.Steel, ItemList.Casing_SolidSteel.get(1L), false); + GTOreDictUnificator.addAssociation( + OrePrefixes.blockCasing, + Materials.TungstenSteel, + ItemList.Casing_RobustTungstenSteel.get(1L), + false); + GTOreDictUnificator.addAssociation( + OrePrefixes.blockCasing, + Materials.Polytetrafluoroethylene, + ItemList.Casing_Chemically_Inert.get(1L), + false); + } + + /** + * very hacky way to make my ores/blocks/smallores detectable by gt assosication in world, well at least the prefix. + * used for the miners mostly removing this hacky material from the materials map instantly. we only need the item + * data. + */ + @SuppressWarnings("unchecked") + private static void addFakeItemDataToInWorldBlocksAndCleanUpFakeData() { + + Map MATERIALS_MAP = null; + + try { + Field f = Materials.class.getDeclaredField("MATERIALS_MAP"); + f.setAccessible(true); + MATERIALS_MAP = (Map) f.get(null); + } catch (NoSuchFieldException | IllegalAccessException | ClassCastException e) { + e.printStackTrace(); + } + + if (MATERIALS_MAP == null) throw new NullPointerException("MATERIALS_MAP null!"); + + Materials oreMat = new Materials(-1, null, 0, 0, 0, false, "bwores", "bwores", null, true, null); + Materials smallOreMat = new Materials(-1, null, 0, 0, 0, false, "bwsmallores", "bwsmallores", null, true, null); + Materials blockMat = new Materials(-1, null, 0, 0, 0, false, "bwblocks", "bwblocks", null, true, null); + + for (int i = 0; i < 16; i++) { + GTOreDictUnificator.addAssociation(ore, oreMat, new ItemStack(BWOres, 1, i), true); + GTOreDictUnificator.addAssociation(oreSmall, smallOreMat, new ItemStack(BWSmallOres, 1, i), true); + GTOreDictUnificator.addAssociation(block, blockMat, new ItemStack(BWBlocks, 1, i), true); + } + + MATERIALS_MAP.remove("bwores"); + MATERIALS_MAP.remove("bwsmallores"); + MATERIALS_MAP.remove("bwblocks"); + } + + public static void removeIC2Recipes() { + try { + Set> remset = new HashSet<>(); + for (Map.Entry curr : Recipes.macerator.getRecipes() + .entrySet()) { + if (curr.getKey() instanceof RecipeInputOreDict) { + if ("oreNULL".equalsIgnoreCase(((RecipeInputOreDict) curr.getKey()).input)) { + remset.add(curr); + } + for (ItemStack stack : curr.getValue().items) { + if (stack.getItem() instanceof BWMetaGeneratedItems) remset.add(curr); + } + } + } + Recipes.macerator.getRecipes() + .entrySet() + .removeAll(remset); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static void runAdditionalOreDict() { + for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { + if (werkstoff.hasItemType(ore)) { + GTOreDictUnificator.registerOre(ore + werkstoff.getVarName(), werkstoff.get(ore)); + GTOreDictUnificator.registerOre(oreSmall + werkstoff.getVarName(), werkstoff.get(oreSmall)); + werkstoff.getADDITIONAL_OREDICT() + .forEach(e -> OreDictionary.registerOre(ore + e, werkstoff.get(ore))); + werkstoff.getADDITIONAL_OREDICT() + .forEach(e -> OreDictionary.registerOre(oreSmall + e, werkstoff.get(oreSmall))); + } + + if (werkstoff.hasItemType(gem)) OreDictionary.registerOre( + "craftingLens" + BWColorUtil.getDyeFromColor(werkstoff.getRGBA()).mName.replace(" ", ""), + werkstoff.get(lens)); + + if (werkstoff.hasItemType(gem) || werkstoff.hasItemType(ingot)) { + GTOreDictUnificator.registerOre(block + werkstoff.getVarName(), werkstoff.get(block)); + werkstoff.getADDITIONAL_OREDICT() + .forEach(e -> OreDictionary.registerOre(block + e, werkstoff.get(block))); + } + + werkstoff.getADDITIONAL_OREDICT() + .forEach( + s -> ENABLED_ORE_PREFIXES.stream() + .filter(o -> Objects.nonNull(werkstoff.get(o))) + .forEach(od -> OreDictionary.registerOre(od + s, werkstoff.get(od)))); + } + + GTOreDictUnificator.registerOre("craftingIndustrialDiamond", WerkstoffLoader.CubicZirconia.get(gemExquisite)); + } +} diff --git a/src/main/java/bartworks/system/material/gtenhancement/BWGTMetaItems.java b/src/main/java/bartworks/system/material/gtenhancement/BWGTMetaItems.java new file mode 100644 index 0000000000..b543150e35 --- /dev/null +++ b/src/main/java/bartworks/system/material/gtenhancement/BWGTMetaItems.java @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.gtenhancement; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.oredict.OreDictionary; + +import bartworks.API.SideReference; +import bartworks.client.textures.PrefixTextureLinker; +import bartworks.system.material.BWMetaGeneratedItems; +import bartworks.system.material.Werkstoff; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TextureSet; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.common.render.items.GeneratedMaterialRenderer; + +public class BWGTMetaItems extends BWMetaGeneratedItems { + + private boolean hasList; + private final Set hiddenThings = new HashSet<>(); + + public BWGTMetaItems(OrePrefixes orePrefixes, List noSubIDMaterials) { + super(orePrefixes, null); + // materialloop: + for (int i = 0; i < Materials.values().length; i++) { + ItemStack tStack = new ItemStack(this, 1, i); + Materials material = Materials.values()[i]; + if (material.getMolten(1) == null && orePrefixes == OrePrefixes.capsuleMolten + || material.getFluid(1) == null && material.getGas(1) == null + && (orePrefixes == OrePrefixes.capsule || orePrefixes == OrePrefixes.bottle)) + continue; + + if (OreDictionary.doesOreNameExist(this.orePrefixes.name() + material.mDefaultLocalName.replace(" ", ""))) { + this.hiddenThings.add(i); + continue; + } + GTOreDictUnificator + .registerOre(this.orePrefixes.name() + material.mDefaultLocalName.replace(" ", ""), tStack); + } + + if (noSubIDMaterials != null) { + this.hasList = true; + // materialloop: + for (int i = 0; i < noSubIDMaterials.size(); i++) { + ItemStack tStack = new ItemStack(this, 1, i + 1001); + Materials w = noSubIDMaterials.get(i); + if (w.getMolten(1) == null && orePrefixes == OrePrefixes.capsuleMolten + || w.getFluid(1) == null && w.getGas(1) == null + && (orePrefixes == OrePrefixes.capsule || orePrefixes == OrePrefixes.bottle)) + continue; + + if (OreDictionary.doesOreNameExist(this.orePrefixes.name() + w.mDefaultLocalName.replace(" ", ""))) { + this.hiddenThings.add(i); + continue; + } + GTOreDictUnificator.registerOre(this.orePrefixes.name() + w.mDefaultLocalName.replace(" ", ""), tStack); + } + } + } + + private Materials getMaterial(ItemStack is) { + if (is == null || is.getItem() != this) return null; + final int meta = is.getItemDamage(); + return this.getMaterialFromMeta(meta); + } + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + Materials material = this.getMaterial(aStack); + if (material == null) material = Materials._NULL; + return material.getLocalizedNameForItem(this.itemTypeLocalizedName); + } + + @Override + protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + Materials material = this.getMaterial(aStack); + if (material != null) { + String tooltip = material.getToolTip(); + if (tooltip != null && !tooltip.isEmpty()) { + aList.add(tooltip); + } + } + } + + @Override + public IIconContainer getIconContainer(int aMetaData) { + if (this.orePrefixes.mTextureIndex == -1) return this.getIconContainerBartWorks(aMetaData); + Materials material = this.getMaterialFromMeta(aMetaData); + if (material != null) { + return material.mIconSet.mTextures[this.orePrefixes.mTextureIndex]; + } + return null; + } + + @Override + protected IIconContainer getIconContainerBartWorks(int aMetaData) { + if (SideReference.Side.Server || PrefixTextureLinker.texMap == null) return null; + + HashMap iconLink = PrefixTextureLinker.texMap.get(this.orePrefixes); + + if (iconLink == null) return null; + + Materials material = this.getMaterialFromMeta(aMetaData); + + if (material == null || material.mIconSet == null) return null; + + return iconLink.getOrDefault(material.mIconSet, iconLink.get(TextureSet.SET_DULL)); + } + + @Override + public IIcon getIconFromDamage(int aMetaData) { + return this.getIcon(aMetaData, 0); + } + + @Override + public GeneratedMaterialRenderer getMaterialRenderer(int aMetaData) { + return this.getMaterialFromMeta(aMetaData).renderer; + } + + public Materials getMaterialFromMeta(int aMetaData) { + if (aMetaData > 1000 && this.hasList) { + return GTMetaItemEnhancer.NoMetaValue.get(aMetaData - 1001); + } + if (aMetaData < 0 || aMetaData >= Materials.values().length) { + return null; + } + return Materials.values()[aMetaData]; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) { + for (int i = 0; i < Materials.values().length; i++) { + Materials w = Materials.values()[i]; + if (w == null || (w.mTypes & Werkstoff.GenerationFeatures.getPrefixDataRaw(this.orePrefixes)) == 0 + && Werkstoff.GenerationFeatures.getPrefixDataRaw(this.orePrefixes) != 0) continue; + if (w.getMolten(1) == null && this.orePrefixes == OrePrefixes.capsuleMolten + || w.getFluid(1) == null && w.getGas(1) == null + && (this.orePrefixes == OrePrefixes.capsule || this.orePrefixes == OrePrefixes.bottle)) + continue; + else if (this.hiddenThings.contains(i)) continue; + aList.add(new ItemStack(this, 1, i)); + } + if (this.hasList) for (int i = 0; i < GTMetaItemEnhancer.NoMetaValue.size(); i++) { + Materials w = GTMetaItemEnhancer.NoMetaValue.get(i); + if (w == null || (w.mTypes & Werkstoff.GenerationFeatures.getPrefixDataRaw(this.orePrefixes)) == 0 + && Werkstoff.GenerationFeatures.getPrefixDataRaw(this.orePrefixes) != 0) continue; + if (w.getMolten(1) == null && this.orePrefixes == OrePrefixes.capsuleMolten + || w.getFluid(1) == null && w.getGas(1) == null + && (this.orePrefixes == OrePrefixes.capsule || this.orePrefixes == OrePrefixes.bottle)) + continue; + else if (this.hiddenThings.contains(i)) continue; + aList.add(new ItemStack(this, 1, i + 1001)); + } + } + + @Override + public short[] getColorForGUI(ItemStack aStack) { + return this.getMaterial(aStack).mRGBa; + } + + @Override + public String getNameForGUI(ItemStack aStack) { + return this.getMaterial(aStack).mDefaultLocalName; + } + + @Override + public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) {} + + @Override + public short[] getRGBa(ItemStack aStack) { + return this.getMaterial(aStack).mRGBa; + } + + @Override + public boolean onEntityItemUpdate(EntityItem aItemEntity) { + return false; + } +} diff --git a/src/main/java/bartworks/system/material/gtenhancement/GTMetaItemEnhancer.java b/src/main/java/bartworks/system/material/gtenhancement/GTMetaItemEnhancer.java new file mode 100644 index 0000000000..d3c1bb2ece --- /dev/null +++ b/src/main/java/bartworks/system/material/gtenhancement/GTMetaItemEnhancer.java @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.gtenhancement; + +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.WILDCARD; + +import java.util.List; +import java.util.stream.Collectors; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import codechicken.nei.api.API; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class GTMetaItemEnhancer { + + static List NoMetaValue; + + private GTMetaItemEnhancer() {} + + public static void init() { + if (!Forestry.isModLoaded()) { + return; + } + NoMetaValue = Materials.getMaterialsMap() + .values() + .stream() + .filter(m -> m.mMetaItemSubID == -1) + .collect(Collectors.toList()); + Item moltenCapsuls = new BWGTMetaItems(OrePrefixes.capsuleMolten, null); + Item capsuls = new BWGTMetaItems(OrePrefixes.capsule, NoMetaValue); + // Item bottles = new BWGTMetaItems(OrePrefixes.bottle, NoMetaValue); + + Materials[] values = Materials.values(); + for (int i = 0, valuesLength = values.length; i < valuesLength; i++) { + Materials m = values[i]; + if (m.mStandardMoltenFluid != null && GTOreDictUnificator.get(OrePrefixes.cellMolten, m, 1) != null) { + final FluidContainerRegistry.FluidContainerData emptyData = new FluidContainerRegistry.FluidContainerData( + m.getMolten(144), + new ItemStack(moltenCapsuls, 1, i), + GTModHandler.getModItem(Forestry.ID, "refractoryEmpty", 1)); + FluidContainerRegistry.registerFluidContainer(emptyData); + GTUtility.addFluidContainerData(emptyData); + + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(Forestry.ID, "refractoryEmpty", 1)) + .itemOutputs(new ItemStack(moltenCapsuls, 1, i)) + .fluidInputs(m.getMolten(144)) + .duration(2 * TICKS) + .eut(2) + .addTo(fluidCannerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(moltenCapsuls, 1, i)) + .fluidOutputs(m.getMolten(144)) + .duration(2 * TICKS) + .eut(2) + .addTo(fluidCannerRecipes); + + } + if (m.getFluid(1) == null && m.getGas(1) == null || OreDictionary.doesOreNameExist("capsule" + m.mName)) + continue; + addFluidData(m, GTModHandler.getModItem(Forestry.ID, "waxCapsule", 1), capsuls, 1000, i, true); + // addFluidData(m, new ItemStack(Items.glass_bottle), bottles, 250, i, false); + } + for (int i = 0, valuesLength = NoMetaValue.size(); i < valuesLength; i++) { + Materials m = NoMetaValue.get(i); + if (m.getFluid(1) == null && m.getGas(1) == null || OreDictionary.doesOreNameExist("capsule" + m.mName)) + continue; + addFluidData(m, GTModHandler.getModItem(Forestry.ID, "waxCapsule", 1), capsuls, 1000, i + 1001, true); + // addFluidData(m, new ItemStack(Items.glass_bottle), bottles, 250, i + 1001, false); + } + + API.hideItem(new ItemStack(capsuls, 1, WILDCARD)); + API.hideItem(new ItemStack(moltenCapsuls, 1, WILDCARD)); + } + + private static void addFluidData(Materials m, ItemStack container, Item filled, int amount, int it, boolean empty) { + Fluid f = m.getFluid(1) != null ? m.getFluid(1) + .getFluid() + : m.getGas(1) + .getFluid(); + final FluidContainerRegistry.FluidContainerData emptyData = new FluidContainerRegistry.FluidContainerData( + new FluidStack(f, amount), + new ItemStack(filled, 1, it), + container); + FluidContainerRegistry.registerFluidContainer(emptyData); + GTUtility.addFluidContainerData(emptyData); + + GTValues.RA.stdBuilder() + .itemInputs(container) + .itemOutputs(new ItemStack(filled, 1, it)) + .fluidInputs(new FluidStack(f, amount)) + .duration(amount / 62) + .eut(2) + .addTo(fluidCannerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(filled, 1, it)) + .fluidOutputs(new FluidStack(f, amount)) + .duration(amount / 62) + .eut(2) + .addTo(fluidCannerRecipes); + + } + + public static void addAdditionalOreDictToForestry() { + if (!Forestry.isModLoaded()) return; + OreDictionary.registerOre("capsuleWater", getForestryItem("waxCapsuleWater")); + OreDictionary.registerOre("capsuleIce", getForestryItem("waxCapsuleIce")); + OreDictionary.registerOre("capsuleHoney", getForestryItem("waxCapsuleHoney")); + OreDictionary.registerOre("capsuleJuice", getForestryItem("waxCapsuleJuice")); + OreDictionary.registerOre("capsuleSeedOil", getForestryItem("waxCapsuleSeedOil")); + OreDictionary.registerOre("capsuleEthanol", getForestryItem("waxCapsuleEthanol")); + OreDictionary.registerOre("capsuleBiomass", getForestryItem("waxCapsuleBiomass")); + OreDictionary.registerOre("capsuleShortMead", getForestryItem("waxCapsuleShortMead")); + OreDictionary.registerOre("capsuleMead", getForestryItem("waxCapsuleMead")); + OreDictionary.registerOre("capsuleFuel", getForestryItem("waxCapsuleFuel")); + OreDictionary.registerOre("capsuleOil", getForestryItem("waxCapsuleOil")); + OreDictionary.registerOre("capsuleLava", getForestryItem("refractoryLava")); + } + + private static ItemStack getForestryItem(String itemName) { + return GTModHandler.getModItem(Forestry.ID, itemName, 1); + } +} diff --git a/src/main/java/bartworks/system/material/gtenhancement/PlatinumSludgeOverHaul.java b/src/main/java/bartworks/system/material/gtenhancement/PlatinumSludgeOverHaul.java new file mode 100644 index 0000000000..a20996d463 --- /dev/null +++ b/src/main/java/bartworks/system/material/gtenhancement/PlatinumSludgeOverHaul.java @@ -0,0 +1,1102 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.gtenhancement; + +import static bartworks.system.material.WerkstoffLoader.AcidicIridiumSolution; +import static bartworks.system.material.WerkstoffLoader.AcidicOsmiumSolution; +import static bartworks.system.material.WerkstoffLoader.AmmoniumChloride; +import static bartworks.system.material.WerkstoffLoader.AquaRegia; +import static bartworks.system.material.WerkstoffLoader.CalciumChloride; +import static bartworks.system.material.WerkstoffLoader.CrudeRhMetall; +import static bartworks.system.material.WerkstoffLoader.FormicAcid; +import static bartworks.system.material.WerkstoffLoader.HotRutheniumTetroxideSollution; +import static bartworks.system.material.WerkstoffLoader.IrLeachResidue; +import static bartworks.system.material.WerkstoffLoader.IrOsLeachResidue; +import static bartworks.system.material.WerkstoffLoader.IridiumChloride; +import static bartworks.system.material.WerkstoffLoader.IridiumDioxide; +import static bartworks.system.material.WerkstoffLoader.LeachResidue; +import static bartworks.system.material.WerkstoffLoader.OsmiumSolution; +import static bartworks.system.material.WerkstoffLoader.PDAmmonia; +import static bartworks.system.material.WerkstoffLoader.PDMetallicPowder; +import static bartworks.system.material.WerkstoffLoader.PDRawPowder; +import static bartworks.system.material.WerkstoffLoader.PDSalt; +import static bartworks.system.material.WerkstoffLoader.PGSDResidue; +import static bartworks.system.material.WerkstoffLoader.PGSDResidue2; +import static bartworks.system.material.WerkstoffLoader.PTConcentrate; +import static bartworks.system.material.WerkstoffLoader.PTMetallicPowder; +import static bartworks.system.material.WerkstoffLoader.PTRawPowder; +import static bartworks.system.material.WerkstoffLoader.PTResidue; +import static bartworks.system.material.WerkstoffLoader.PTSaltCrude; +import static bartworks.system.material.WerkstoffLoader.PTSaltRefined; +import static bartworks.system.material.WerkstoffLoader.PotassiumDisulfate; +import static bartworks.system.material.WerkstoffLoader.RHFilterCakeSolution; +import static bartworks.system.material.WerkstoffLoader.RHNitrate; +import static bartworks.system.material.WerkstoffLoader.RHSalt; +import static bartworks.system.material.WerkstoffLoader.RHSaltSolution; +import static bartworks.system.material.WerkstoffLoader.RHSulfate; +import static bartworks.system.material.WerkstoffLoader.RHSulfateSolution; +import static bartworks.system.material.WerkstoffLoader.ReRh; +import static bartworks.system.material.WerkstoffLoader.RhFilterCake; +import static bartworks.system.material.WerkstoffLoader.Rhodium; +import static bartworks.system.material.WerkstoffLoader.Ruthenium; +import static bartworks.system.material.WerkstoffLoader.RutheniumTetroxide; +import static bartworks.system.material.WerkstoffLoader.RutheniumTetroxideSollution; +import static bartworks.system.material.WerkstoffLoader.SodiumNitrate; +import static bartworks.system.material.WerkstoffLoader.SodiumRuthenate; +import static bartworks.system.material.WerkstoffLoader.Sodiumformate; +import static bartworks.system.material.WerkstoffLoader.Sodiumsulfate; +import static bartworks.system.material.WerkstoffLoader.ZincSulfate; +import static gregtech.api.enums.Mods.GalaxySpace; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.enums.OrePrefixes.cell; +import static gregtech.api.enums.OrePrefixes.crushed; +import static gregtech.api.enums.OrePrefixes.crushedCentrifuged; +import static gregtech.api.enums.OrePrefixes.crushedPurified; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.dustImpure; +import static gregtech.api.enums.OrePrefixes.dustPure; +import static gregtech.api.enums.OrePrefixes.dustRefined; +import static gregtech.api.enums.OrePrefixes.dustSmall; +import static gregtech.api.enums.OrePrefixes.dustTiny; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.nugget; +import static gregtech.api.enums.OrePrefixes.rawOre; +import static gregtech.api.recipe.RecipeMaps.*; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; +import static gtPlusPlus.core.material.MaterialsAlloy.HELICOPTER; +import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.WHITE_METAL; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.IRecipe; + +import bartworks.MainMod; +import bartworks.system.material.BWMetaGeneratedItems; +import bartworks.system.material.Werkstoff; +import bartworks.util.BWUtil; +import bwcrossmod.BartWorksCrossmod; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IRecipeMutableAccess; +import gregtech.api.interfaces.ISubTagContainer; +import gregtech.api.items.GTGenericBlock; +import gregtech.api.items.GTGenericItem; +import gregtech.api.objects.ItemData; +import gregtech.api.objects.MaterialStack; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.BlockOresAbstract; + +public class PlatinumSludgeOverHaul { + + private static final Materials[] BLACKLIST = { Materials.HSSS, Materials.EnderiumBase, Materials.Osmiridium, + Materials.TPV, Materials.get("Uraniumtriplatinid"), Materials.get("Tetranaquadahdiindiumhexaplatiumosminid"), + Materials.get("Longasssuperconductornameforuvwire"), }; + private static final OrePrefixes[] OPBLACKLIST = { crushedCentrifuged, crushed, crushedPurified, dustPure, + dustImpure, dustRefined, dust, dustTiny, dustSmall }; + + private PlatinumSludgeOverHaul() {} + + private static void runHelperrecipes() { + // DilutedSulfuricAcid + // 2H2SO4 + H2O = 3H2SO4(d) + GTValues.RA.stdBuilder() + .itemInputs( + Materials.SulfuricAcid.getCells(2), + Materials.Water.getCells(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(Materials.DilutedSulfuricAcid.getCells(3)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Water.getCells(1), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(Materials.SulfuricAcid.getFluid(2000)) + .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(3000)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.SulfuricAcid.getCells(2), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(Materials.Empty.getCells(2)) + .fluidInputs(Materials.Water.getFluid(1000)) + .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(3000)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + // FormicAcid + // CO + NaOH = CHO2Na + GTValues.RA.stdBuilder() + .itemInputs(Materials.CarbonMonoxide.getCells(1), Materials.SodiumHydroxide.getDust(3)) + .itemOutputs(Sodiumformate.get(cell)) + .duration(15 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + // H2SO4 + 2CHO2Na = 2CH2O2 + Na2SO4 + + GTValues.RA.stdBuilder() + .itemInputs(Sodiumformate.get(cell, 2), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(FormicAcid.get(cell, 2), Sodiumsulfate.get(dust, 7)) + .fluidInputs(Materials.SulfuricAcid.getFluid(1000)) + .duration(15 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.SulfuricAcid.getCells(1), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(Materials.Empty.getCells(1), Sodiumsulfate.get(dust, 7)) + .fluidInputs(Sodiumformate.getFluidOrGas(2000)) + .fluidOutputs(FormicAcid.getFluidOrGas(2000)) + .duration(15 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // AquaRegia + GTValues.RA.stdBuilder() + .itemInputs( + Materials.DilutedSulfuricAcid.getCells(1), + Materials.NitricAcid.getCells(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(AquaRegia.get(cell, 2)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + Materials.DilutedSulfuricAcid.getCells(1), + Materials.NitricAcid.getCells(1), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(Materials.Empty.getCells(2)) + .fluidOutputs(AquaRegia.getFluidOrGas(2000)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.NitricAcid.getCells(1), GTUtility.getIntegratedCircuit(3)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(Materials.DilutedSulfuricAcid.getFluid(1000)) + .fluidOutputs(AquaRegia.getFluidOrGas(2000)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.DilutedSulfuricAcid.getCells(1), GTUtility.getIntegratedCircuit(4)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(Materials.NitricAcid.getFluid(1000)) + .fluidOutputs(AquaRegia.getFluidOrGas(2000)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + + // AmmoniumChloride + // NH3 + HCl = NH4Cl + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Ammonia.getCells(1), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(AmmoniumChloride.get(cell, 1)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(1000)) + .duration(15 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.HydrochloricAcid.getCells(1), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(Materials.Ammonia.getGas(1000)) + .fluidOutputs(AmmoniumChloride.getFluidOrGas(1000)) + .duration(15 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(9)) + .fluidInputs(Materials.Ammonia.getGas(64000), Materials.HydrochloricAcid.getFluid(64000)) + .fluidOutputs(AmmoniumChloride.getFluidOrGas(64000)) + .duration(3 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(multiblockChemicalReactorRecipes); + + // base solution + for (Werkstoff w : Werkstoff.werkstoffHashSet) if (w.containsStuff(Materials.Sulfur) + && (w.containsStuff(Materials.Copper) || w.containsStuff(Materials.Nickel))) { + + GTValues.RA.stdBuilder() + .itemInputs(w.get(crushedPurified), GTUtility.getIntegratedCircuit(1)) + .fluidInputs(AquaRegia.getFluidOrGas(150)) + .fluidOutputs(PTConcentrate.getFluidOrGas(150)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(w.get(crushedPurified, 9), GTUtility.getIntegratedCircuit(9)) + .fluidInputs(AquaRegia.getFluidOrGas(1350)) + .fluidOutputs(PTConcentrate.getFluidOrGas(1350)) + .duration(11 * SECONDS + 5 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(w.get(crushedPurified, 9), PTMetallicPowder.get(dust, 9)) + .itemOutputs(PTResidue.get(dust)) + .fluidInputs(AquaRegia.getFluidOrGas(10350)) + .fluidOutputs(PTConcentrate.getFluidOrGas(10350)) + .duration(1 * MINUTES + 52 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + } + for (Materials m : Materials.values()) if (PlatinumSludgeOverHaul.materialsContains(m, Materials.Sulfur) + && (PlatinumSludgeOverHaul.materialsContains(m, Materials.Copper) + || PlatinumSludgeOverHaul.materialsContains(m, Materials.Nickel))) { + + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(crushedPurified, m, 1), GTUtility.getIntegratedCircuit(1)) + .fluidInputs(AquaRegia.getFluidOrGas(150)) + .fluidOutputs(PTConcentrate.getFluidOrGas(150)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(crushedPurified, m, 9), GTUtility.getIntegratedCircuit(9)) + .fluidInputs(AquaRegia.getFluidOrGas(1350)) + .fluidOutputs(PTConcentrate.getFluidOrGas(1350)) + .duration(1 * MINUTES + 52 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(crushedPurified, m, 9), PTMetallicPowder.get(dust, 9)) + .itemOutputs(PTResidue.get(dust)) + .fluidInputs(AquaRegia.getFluidOrGas(10350)) + .fluidOutputs(PTConcentrate.getFluidOrGas(10350)) + .duration(1 * MINUTES + 52 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + } + // Pt + GTValues.RA.stdBuilder() + .itemInputs(PTMetallicPowder.get(dust, 3), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(Materials.Platinum.getNuggets(2)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, Materials.Platinum.mMeltingPoint) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(PTMetallicPowder.get(dust), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(PTResidue.get(dustTiny)) + .fluidInputs(AquaRegia.getFluidOrGas(1000)) + .fluidOutputs(PTConcentrate.getFluidOrGas(1000)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(PTMetallicPowder.get(dust, 9), GTUtility.getIntegratedCircuit(9)) + .itemOutputs(PTResidue.get(dust)) + .fluidInputs(AquaRegia.getFluidOrGas(9000)) + .fluidOutputs(PTConcentrate.getFluidOrGas(9000)) + .duration(1 * MINUTES + 52 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(PTConcentrate.get(cell, 2)) + .itemOutputs( + PTSaltCrude.get(dustTiny, 16), + PTRawPowder.get(dustTiny, 4), + Materials.NitrogenDioxide.getCells(1), + Materials.DilutedSulfuricAcid.getCells(1)) + .fluidInputs(AmmoniumChloride.getFluidOrGas(400)) + .fluidOutputs(PDAmmonia.getFluidOrGas(400)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .itemOutputs(PTSaltCrude.get(dustTiny, 16), PTRawPowder.get(dustTiny, 4)) + .fluidInputs(PTConcentrate.getFluidOrGas(2000), AmmoniumChloride.getFluidOrGas(400)) + .fluidOutputs( + PDAmmonia.getFluidOrGas(400), + Materials.NitrogenDioxide.getGas(1000), + Materials.DilutedSulfuricAcid.getFluid(1000)) + .duration(1200) + .eut(30) + .addTo(multiblockChemicalReactorRecipes); + // transitional recipe. to be removed in 2.8.0 and onwards + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(2)) + .itemOutputs(PTSaltCrude.get(dust, 16), PTRawPowder.get(dust, 4)) + .fluidInputs(PTConcentrate.getFluidOrGas(18000), AmmoniumChloride.getFluidOrGas(3600)) + .fluidOutputs( + PDAmmonia.getFluidOrGas(3600), + Materials.NitrogenDioxide.getGas(9000), + Materials.DilutedSulfuricAcid.getFluid(9000)) + .duration(1400) + .eut(240) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(3)) + .itemOutputs(PTSaltCrude.get(dust, 16), PTRawPowder.get(dust, 4)) + .fluidInputs(PTConcentrate.getFluidOrGas(18000), AmmoniumChloride.getFluidOrGas(3600)) + .fluidOutputs( + PDAmmonia.getFluidOrGas(3600), + Materials.NitrogenDioxide.getGas(9000), + Materials.DilutedSulfuricAcid.getFluid(9000)) + .duration(700) + .eut(480) + .addTo(multiblockChemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(PTSaltCrude.get(dust)) + .itemOutputs( + PTSaltRefined.get(dust), + PTSaltRefined.get(dust), + PTSaltRefined.get(dust), + PTSaltRefined.get(dust), + PTSaltRefined.get(dust), + PTSaltRefined.get(dust), + PTSaltRefined.get(dust), + PTSaltRefined.get(dust), + PTSaltRefined.get(dust)) + .outputChances(1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1500) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(sifterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(PTSaltRefined.get(dust), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(PTMetallicPowder.get(dust)) + .fluidOutputs(Materials.Chlorine.getGas(87)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 900) + .addTo(blastFurnaceRecipes); + + // 2PtCl + Ca = 2Pt + CaCl2 + + GTValues.RA.stdBuilder() + .itemInputs(PTRawPowder.get(dust, 4), Materials.Calcium.getDust(1)) + .itemOutputs(Materials.Platinum.getDust(2), CalciumChloride.get(dust, 3)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + // Pd + + GTValues.RA.stdBuilder() + .itemInputs(PDMetallicPowder.get(dust), GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Ammonia.getGas(1000)) + .fluidOutputs(PDAmmonia.getFluidOrGas(1000)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(PDMetallicPowder.get(dust), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(PDSalt.get(dustTiny, 16), PDRawPowder.get(dustTiny, 2)) + .fluidInputs(PDAmmonia.getFluidOrGas(1000)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(PDMetallicPowder.get(dust, 9), GTUtility.getIntegratedCircuit(9)) + .itemOutputs(PDSalt.get(dust, 16), PDRawPowder.get(dust, 2)) + .fluidInputs(PDAmmonia.getFluidOrGas(9000)) + .duration(1 * MINUTES + 52 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(2)) + .itemOutputs(PDSalt.get(dust)) + .fluidInputs(PDAmmonia.getFluidOrGas(1000)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(PDSalt.get(dust)) + .itemOutputs( + PDMetallicPowder.get(dust), + PDMetallicPowder.get(dust), + PDMetallicPowder.get(dust), + PDMetallicPowder.get(dust), + PDMetallicPowder.get(dust), + PDMetallicPowder.get(dust), + PDMetallicPowder.get(dust), + PDMetallicPowder.get(dust), + PDMetallicPowder.get(dust)) + .outputChances(1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1500) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(sifterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(PDRawPowder.get(dust, 4), Materials.Empty.getCells(1)) + .itemOutputs(Materials.Palladium.getDust(2), Materials.Ethylene.getCells(1)) + .fluidInputs(FormicAcid.getFluidOrGas(4000)) + .fluidOutputs(Materials.Ammonia.getGas(4000)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(chemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(PDRawPowder.get(dust, 4)) + .itemOutputs(Materials.Palladium.getDust(2)) + .fluidInputs(FormicAcid.getFluidOrGas(4000)) + .fluidOutputs( + Materials.Ammonia.getGas(4000), + Materials.Ethylene.getGas(1000), + Materials.Water.getFluid(1000)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(multiblockChemicalReactorRecipes); + + // Na2SO4 + 2H = 2Na + H2SO4 + + GTValues.RA.stdBuilder() + .itemInputs(Sodiumsulfate.get(dust, 7), Materials.Hydrogen.getCells(2)) + .itemOutputs(Materials.Sodium.getDust(2), Materials.Empty.getCells(2)) + .fluidOutputs(Materials.SulfuricAcid.getFluid(1000)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Rh/Os/Ir/Ru + GTValues.RA.stdBuilder() + .itemInputs(PTResidue.get(dust), GTUtility.getIntegratedCircuit(11)) + .itemOutputs(LeachResidue.get(dust)) + .fluidInputs(PotassiumDisulfate.getMolten(360)) + .fluidOutputs(RHSulfate.getFluidOrGas(360)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 775) + .addTo(blastFurnaceRecipes); + + // Ru + GTValues.RA.stdBuilder() + .itemInputs(LeachResidue.get(dust, 10), Materials.Saltpeter.getDust(10)) + .itemOutputs(SodiumRuthenate.get(dust, 3), IrOsLeachResidue.get(dust, 6)) + .fluidInputs(Materials.SaltWater.getFluid(1000)) + .fluidOutputs(GTModHandler.getSteam(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 775) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(SodiumRuthenate.get(dust, 6), Materials.Chlorine.getCells(3)) + .itemOutputs(Materials.Empty.getCells(3)) + .fluidOutputs(RutheniumTetroxideSollution.getFluidOrGas(9000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(RutheniumTetroxideSollution.getFluidOrGas(1000)) + .fluidOutputs(HotRutheniumTetroxideSollution.getFluidOrGas(2000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .noOptimize() + .addTo(fluidHeaterRecipes); + + GTValues.RA.stdBuilder() + .itemOutputs(Materials.Salt.getDust(6)) + .fluidInputs(HotRutheniumTetroxideSollution.getFluidOrGas(9000)) + .fluidOutputs(Materials.Water.getFluid(1800), RutheniumTetroxide.getFluidOrGas(7200)) + .duration(1 * MINUTES + 15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(distillationTowerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(RutheniumTetroxide.get(dust, 1), Materials.HydrochloricAcid.getCells(6)) + .itemOutputs(Ruthenium.get(dust), Materials.Chlorine.getCells(6)) + .fluidOutputs(Materials.Water.getFluid(2000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Os + GTValues.RA.stdBuilder() + .itemInputs(IrOsLeachResidue.get(dust, 4), GTUtility.getIntegratedCircuit(11)) + .itemOutputs(IrLeachResidue.get(dust, 2)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(1000)) + .fluidOutputs(AcidicOsmiumSolution.getFluidOrGas(2000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 775) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(AcidicOsmiumSolution.getFluidOrGas(1000)) + .fluidOutputs(OsmiumSolution.getFluidOrGas(100), Materials.Water.getFluid(900)) + .duration(7 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_IV) + .addTo(distillationTowerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(OsmiumSolution.get(cell), Materials.HydrochloricAcid.getCells(6)) + .itemOutputs(Materials.Osmium.getDust(1), Materials.Chlorine.getCells(7)) + .fluidOutputs(Materials.Water.getFluid(2000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Ir + GTValues.RA.stdBuilder() + .itemInputs(IrLeachResidue.get(dust), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(PGSDResidue.get(dust), IridiumDioxide.get(dust)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 775) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(IridiumDioxide.get(dust), Materials.HydrochloricAcid.getCells(1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidOutputs(AcidicIridiumSolution.getFluidOrGas(1000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(AcidicIridiumSolution.get(cell), AmmoniumChloride.get(cell, 3)) + .itemOutputs(Materials.Empty.getCells(4), IridiumChloride.get(dust)) + .fluidOutputs(Materials.Ammonia.getGas(3000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(IridiumChloride.get(dust), Materials.Calcium.getDust(1)) + .itemOutputs(PGSDResidue2.get(dust), Materials.Iridium.getDust(1)) + .fluidOutputs(CalciumChloride.getFluidOrGas(3000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(UniversalChemical); + // Rh + + GTValues.RA.stdBuilder() + .itemInputs(RHSulfate.get(cell, 11), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RHSulfateSolution.get(cell, 11), LeachResidue.get(dustTiny, 10)) + .fluidInputs(Materials.Water.getFluid(10000)) + .fluidOutputs(Materials.Potassium.getMolten(2000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(3)) + .itemOutputs(LeachResidue.get(dust, 4)) + .fluidInputs(Materials.Water.getFluid(36000), RHSulfate.getFluidOrGas(39600)) + .fluidOutputs(Materials.Potassium.getMolten(7200), RHSulfateSolution.getFluidOrGas(39600)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(multiblockChemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Zinc.getDust(1)) + .itemOutputs(ZincSulfate.get(dust, 6), CrudeRhMetall.get(dust)) + .fluidInputs(RHSulfateSolution.getFluidOrGas(1000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(CrudeRhMetall.get(dust), Materials.Salt.getDust(1)) + .itemOutputs(RHSalt.get(dust, 3)) + .fluidInputs(Materials.Chlorine.getGas(1000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 600) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(RHSalt.get(dust, 10)) + .fluidInputs(Materials.Water.getFluid(2000)) + .fluidOutputs(RHSaltSolution.getFluidOrGas(2000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(SodiumNitrate.get(dust, 5), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RHNitrate.get(dust), Materials.Salt.getDust(2)) + .fluidInputs(RHSaltSolution.getFluidOrGas(1000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + // Na + HNO3 = NaNO3 + H + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Sodium.getDust(1)) + .itemOutputs(SodiumNitrate.get(dust, 5)) + .fluidInputs(Materials.NitricAcid.getFluid(1000)) + .fluidOutputs(Materials.Hydrogen.getGas(1000)) + .duration(8 * TICKS) + .eut(60) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(RHNitrate.get(dust)) + .itemOutputs( + RhFilterCake.get(dust), + RhFilterCake.get(dust), + RhFilterCake.get(dust), + RhFilterCake.get(dust), + RhFilterCake.get(dust), + RhFilterCake.get(dust), + RhFilterCake.get(dust), + RhFilterCake.get(dust), + RhFilterCake.get(dust)) + .outputChances(1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1500) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(sifterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(RhFilterCake.get(dust)) + .fluidInputs(Materials.Water.getFluid(1000)) + .fluidOutputs(RHFilterCakeSolution.getFluidOrGas(1000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ReRh.get(dust)) + .fluidInputs(RHFilterCakeSolution.getFluidOrGas(1000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(ReRh.get(dust), Materials.Empty.getCells(1)) + .itemOutputs(Rhodium.get(dust), Materials.Ammonia.getCells(1)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(1000)) + .fluidOutputs(Materials.Chlorine.getGas(1000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + } + + private static boolean materialsContains(Materials one, ISubTagContainer other) { + if (one == null || one.mMaterialList == null || one.mMaterialList.isEmpty()) return false; + for (MaterialStack stack : one.mMaterialList) if (stack.mMaterial.equals(other)) return true; + return false; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static void replacePureElements() { + // furnace + for (Object entry : FurnaceRecipes.smelting() + .getSmeltingList() + .entrySet()) { + Map.Entry realEntry = (Map.Entry) entry; + if (GTUtility.isStackValid(realEntry.getKey()) + && BWUtil.checkStackAndPrefix((ItemStack) realEntry.getKey())) { + ItemData association = GTOreDictUnificator.getAssociation((ItemStack) realEntry.getKey()); + if (!dust.equals(association.mPrefix) && !dustTiny.equals(association.mPrefix) + || !association.mMaterial.mMaterial.equals(Materials.Platinum)) + if (GTUtility.isStackValid(realEntry.getValue()) + && BWUtil.checkStackAndPrefix((ItemStack) realEntry.getValue())) { + ItemData ass = GTOreDictUnificator.getAssociation((ItemStack) realEntry.getValue()); + if (ass.mMaterial.mMaterial.equals(Materials.Platinum)) + if (!PlatinumSludgeOverHaul.isInBlackList((ItemStack) realEntry.getKey())) + realEntry.setValue( + PTMetallicPowder.get( + ass.mPrefix == nugget ? dustTiny : dust, + ((ItemStack) realEntry.getValue()).stackSize * 2)); + else if (ass.mMaterial.mMaterial.equals(Materials.Palladium)) + if (!PlatinumSludgeOverHaul.isInBlackList((ItemStack) realEntry.getKey())) + realEntry.setValue( + PDMetallicPowder.get( + ass.mPrefix == nugget ? dustTiny : dust, + ((ItemStack) realEntry.getValue()).stackSize * 2)); + } + } + } + // vanilla crafting + CraftingManager.getInstance() + .getRecipeList() + .forEach(PlatinumSludgeOverHaul::setnewMaterialInRecipe); + // gt crafting + GTModHandler.sBufferRecipeList.forEach(PlatinumSludgeOverHaul::setnewMaterialInRecipe); + // gt machines + maploop: for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { + if (map == fusionRecipes || map == unpackagerRecipes + || map == packagerRecipes + || map == replicatorRecipes + || "gt.recipe.eyeofharmony".equals(map.unlocalizedName) + || "gtpp.recipe.quantumforcesmelter".equals(map.unlocalizedName)) continue; + HashSet toDel = new HashSet<>(); + recipeloop: for (GTRecipe recipe : map.getAllRecipes()) { + if (recipe.mFakeRecipe) continue maploop; + + for (int i = 0; i < recipe.mFluidOutputs.length; i++) { + if (map.equals(fluidExtractionRecipes)) continue maploop; + if ("gtpp.recipe.alloyblastsmelter".equals(map.unlocalizedName)) continue maploop; + if (map.equals(multiblockChemicalReactorRecipes) || map.equals(chemicalReactorRecipes)) { + if (GTUtility.areFluidsEqual(Ruthenium.getMolten(1), recipe.mFluidOutputs[i]) + || GTUtility.areFluidsEqual(Rhodium.getMolten(1), recipe.mFluidOutputs[i])) + toDel.add(recipe); + else if (GTUtility.areFluidsEqual(Materials.Iridium.getMolten(1), recipe.mFluidOutputs[i])) { + recipe.mFluidOutputs[i] = AcidicIridiumSolution.getFluidOrGas(1000); + recipe.reloadOwner(); + } else if (GTUtility.areFluidsEqual(Materials.Platinum.getMolten(1), recipe.mFluidOutputs[i])) { + recipe.mFluidOutputs[i] = PTConcentrate.getFluidOrGas(1000); + recipe.reloadOwner(); + } else if (GTUtility.areFluidsEqual(Materials.Osmium.getMolten(1), recipe.mFluidOutputs[i])) { + recipe.mFluidOutputs[i] = AcidicOsmiumSolution.getFluidOrGas(1000); + recipe.reloadOwner(); + } + } else if (GTUtility.areFluidsEqual(Ruthenium.getMolten(1), recipe.mFluidOutputs[i]) + || GTUtility.areFluidsEqual(Rhodium.getMolten(1), recipe.mFluidOutputs[i]) + || GTUtility.areFluidsEqual(Materials.Iridium.getMolten(1), recipe.mFluidOutputs[i]) + || GTUtility.areFluidsEqual(Materials.Platinum.getMolten(1), recipe.mFluidOutputs[i])) + toDel.add(recipe); + else if (GTUtility.areFluidsEqual(Materials.Osmium.getMolten(1), recipe.mFluidOutputs[i])) + toDel.add(recipe); + } + for (int i = 0; i < recipe.mOutputs.length; i++) { + if (!GTUtility.isStackValid(recipe.mOutputs[i])) continue; + if ((BWUtil.areStacksEqualOrNull(Ruthenium.get(dust), recipe.mOutputs[i]) + || BWUtil.areStacksEqualOrNull(Ruthenium.get(dustImpure), recipe.mOutputs[i]) + || BWUtil.areStacksEqualOrNull(Ruthenium.get(dustPure), recipe.mOutputs[i])) + && !BWUtil.areStacksEqualOrNull(Ruthenium.get(ingot), recipe.mInputs[0])) { + for (ItemStack mInput : recipe.mInputs) + if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; + int amount = recipe.mOutputs[i].stackSize * 2; + recipe.mOutputs[i] = LeachResidue.get(dust, amount); + recipe.reloadOwner(); + } + if ((BWUtil.areStacksEqualOrNull(Rhodium.get(dust), recipe.mOutputs[i]) + || BWUtil.areStacksEqualOrNull(Rhodium.get(dustImpure), recipe.mOutputs[i]) + || BWUtil.areStacksEqualOrNull(Rhodium.get(dustPure), recipe.mOutputs[i])) + && !BWUtil.areStacksEqualOrNull(Rhodium.get(ingot), recipe.mInputs[0])) { + for (ItemStack mInput : recipe.mInputs) + if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; + int amount = recipe.mOutputs[i].stackSize * 2; + recipe.mOutputs[i] = CrudeRhMetall.get(dust, amount); + recipe.reloadOwner(); + } + if (!BWUtil.checkStackAndPrefix(recipe.mOutputs[i])) continue; + // Pt + if (GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mMaterial.mMaterial + .equals(Materials.Platinum)) { + for (ItemStack mInput : recipe.mInputs) { + if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; + } + if (dust.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) + || dustImpure.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) + || dustPure.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil.setStackSize(PTMetallicPowder.get(dust), amount * 2); + recipe.reloadOwner(); + } else if (dustSmall.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil.setStackSize(PTMetallicPowder.get(dustSmall), amount * 2); + recipe.reloadOwner(); + } else if (dustTiny.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil.setStackSize(PTMetallicPowder.get(dustTiny), amount * 2); + recipe.reloadOwner(); + } + } else if (GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mMaterial.mMaterial + .equals(Materials.Palladium)) { + for (ItemStack mInput : recipe.mInputs) { + if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; + } + if (dust.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) + || dustImpure.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) + || dustPure.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil.setStackSize(PDMetallicPowder.get(dust), amount * 4); + recipe.reloadOwner(); + } else + if (dustSmall.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil + .setStackSize(PDMetallicPowder.get(dustSmall), amount * 4); + recipe.reloadOwner(); + } else if (dustTiny + .equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil + .setStackSize(PDMetallicPowder.get(dustTiny), amount * 4); + recipe.reloadOwner(); + } + } else if (GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mMaterial.mMaterial + .equals(Materials.Osmium)) { + for (ItemStack mInput : recipe.mInputs) { + if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; + } + if (dust.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) + || dustImpure.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) + || dustPure + .equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil.setStackSize(IrOsLeachResidue.get(dust), amount); + recipe.reloadOwner(); + } else if (dustSmall + .equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil + .setStackSize(IrOsLeachResidue.get(dustSmall), amount); + recipe.reloadOwner(); + } else if (dustTiny + .equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil + .setStackSize(IrOsLeachResidue.get(dustTiny), amount); + recipe.reloadOwner(); + } + } else if (GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mMaterial.mMaterial + .equals(Materials.Iridium)) { + for (ItemStack mInput : recipe.mInputs) { + if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; + } + if (dust.equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) + || dustImpure + .equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) + || dustPure + .equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil.setStackSize(IrLeachResidue.get(dust), amount); + recipe.reloadOwner(); + } else if (dustSmall + .equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil + .setStackSize(IrLeachResidue.get(dustSmall), amount); + recipe.reloadOwner(); + } else if (dustTiny + .equals(GTOreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { + int amount = recipe.mOutputs[i].stackSize; + recipe.mOutputs[i] = BWUtil + .setStackSize(IrLeachResidue.get(dustTiny), amount); + recipe.reloadOwner(); + } + } + } + } + map.getBackend() + .removeRecipes(toDel); + } + // TODO: remove EnderIO recipes + + // fix HV tier + PlatinumSludgeOverHaul.replaceHVCircuitMaterials(); + // add new recipes + PlatinumSludgeOverHaul.runHelperrecipes(); + } + + @SuppressWarnings("deprecation") + private static void replaceHVCircuitMaterials() { + GTValues.RA.stdBuilder() + .itemInputs(Materials.Redstone.getDust(1), Materials.Electrum.getDust(1), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(Materials.Electrotine.getDust(8)) + .duration(1 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + for (GTRecipe recipe : circuitAssemblerRecipes.getAllRecipes()) { + if (recipe.mEUt > 512) continue; + if (BWUtil.checkStackAndPrefix(recipe.mOutputs[0])) { + for (int i = 0; i < recipe.mInputs.length; i++) { + ItemStack stack = recipe.mInputs[i]; + ItemData ass = GTOreDictUnificator.getAssociation(stack); + if (BWUtil.checkStackAndPrefix(stack) && ass.mMaterial.mMaterial.equals(Materials.Platinum)) { + recipe.mInputs[i] = GTOreDictUnificator.get(ass.mPrefix, Materials.BlueAlloy, stack.stackSize); + recipe.reloadOwner(); + } + } + } + } + } + + private static void setnewMaterialInRecipe(IRecipe recipe) { + ItemStack otpt = recipe.getRecipeOutput(); + + if (!(recipe instanceof IRecipeMutableAccess mutableRecipe)) { + return; + } + + Object input = mutableRecipe.gt5u$getRecipeInputs(); + + if (input == null) { + return; + } + + if (GTUtility.areStacksEqual(otpt, Materials.Platinum.getDust(1), true)) { + if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Platinum)) return; + mutableRecipe.gt5u$setRecipeOutputItem(PTMetallicPowder.get(dust, otpt.stackSize * 2)); + } else if (GTUtility.areStacksEqual(otpt, Materials.Palladium.getDust(1), true)) { + if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Palladium)) return; + mutableRecipe.gt5u$setRecipeOutputItem(PDMetallicPowder.get(dust, otpt.stackSize * 2)); + } else if (GTUtility.areStacksEqual(otpt, Materials.Iridium.getDust(1), true)) { + if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Iridium)) return; + mutableRecipe.gt5u$setRecipeOutputItem(IrLeachResidue.get(dust, otpt.stackSize)); + } else if (GTUtility.areStacksEqual(otpt, Materials.Osmium.getDust(1), true)) { + if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Osmium)) return; + mutableRecipe.gt5u$setRecipeOutputItem(IrOsLeachResidue.get(dust, otpt.stackSize)); + } + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public static boolean checkRecipe(Object input, Materials mat) { + if (input instanceof List || input instanceof Object[]) { + Set lists = new HashSet(), stacks = new HashSet(); + List ip = input instanceof List ? (List) input : new ArrayList(); + Object[] ip2 = input instanceof Object[] ? (Object[]) input : new Object[0]; + + for (Object o : ip) { + if (o instanceof List) lists.add(o); + else if (o instanceof ItemStack) stacks.add(o); + } + for (Object o : ip2) { + if (o instanceof List) lists.add(o); + else if (o instanceof ItemStack) stacks.add(o); + } + + for (Object o : lists) { + if (!((List) o).isEmpty()) stacks.add(((List) o).get(0)); + } + + boolean allSame = false; + for (Object stack : stacks) { + if (!(stack instanceof ItemStack)) { + allSame = false; + break; + } + allSame = BWUtil.checkStackAndPrefix((ItemStack) stack) + && GTOreDictUnificator.getAssociation((ItemStack) stack).mMaterial.mMaterial.equals(mat); + if (!allSame) break; + } + return allSame; + } + return false; + } + + private static boolean isInBlackList(ItemStack stack) { + if (stack == null || stack.getItem() instanceof BWMetaGeneratedItems + || MainMod.MOD_ID.equals(GameRegistry.findUniqueIdentifierFor(stack.getItem()).modId) + || BartWorksCrossmod.MOD_ID.equals(GameRegistry.findUniqueIdentifierFor(stack.getItem()).modId)) + return true; + + if (GameRegistry.findUniqueIdentifierFor(stack.getItem()).modId.equals(NewHorizonsCoreMod.ID) + && !stack.getUnlocalizedName() + .contains("dust") + && !stack.getUnlocalizedName() + .contains("Dust")) + return true; + + if (Block.getBlockFromItem(stack.getItem()) instanceof GTGenericBlock + && !(Block.getBlockFromItem(stack.getItem()) instanceof BlockOresAbstract)) return true; + + if (Arrays.stream(ItemList.values()) + .filter(ItemList::hasBeenSet) + .anyMatch(e -> !BWUtil.checkStackAndPrefix(stack) && GTUtility.areStacksEqual(e.get(1), stack, true))) + return true; + + if (stack.getItem() instanceof GTGenericItem) { + if (!BWUtil.checkStackAndPrefix(stack)) return false; + if (GTOreDictUnificator.getAssociation(stack).mPrefix != rawOre) { + return !Arrays.asList(PlatinumSludgeOverHaul.OPBLACKLIST) + .contains(GTOreDictUnificator.getAssociation(stack).mPrefix) + || Arrays.asList(PlatinumSludgeOverHaul.BLACKLIST) + .contains(GTOreDictUnificator.getAssociation(stack).mMaterial.mMaterial); + } + } + + try { + if (Class.forName("gtPlusPlus.core.item.base.BaseItemComponent") + .isAssignableFrom( + stack.getItem() + .getClass()) + && !stack.getUnlocalizedName() + .contains("dust") + && !stack.getUnlocalizedName() + .contains("Dust")) { + return true; + } + if (Class.forName("gtPlusPlus.core.block.base.BlockBaseModular") + .isAssignableFrom( + Block.getBlockFromItem(stack.getItem()) + .getClass())) { + return true; + } + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + if (stack.getItem() == HELICOPTER.getDust(1) + .getItem()) { + return true; + } + if (stack.getItem() == WHITE_METAL.getDust(1) + .getItem()) { + return true; + } + if (GalaxySpace.isModLoaded()) { + if (stack.getItem() == GTModHandler.getModItem(GalaxySpace.ID, "metalsblock", 1L, 7) + .getItem()) { + return true; + } + } + if (NewHorizonsCoreMod.isModLoaded()) { + if (stack.getItem() == GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.IndustryFrame", 1L) + .getItem()) { + return true; + } + } + if (!BWUtil.checkStackAndPrefix(stack)) { + return false; + } + return Arrays.asList(PlatinumSludgeOverHaul.BLACKLIST) + .contains(GTOreDictUnificator.getAssociation(stack).mMaterial.mMaterial); + } +} diff --git a/src/main/java/bartworks/system/material/processingLoaders/AddSomeRecipes.java b/src/main/java/bartworks/system/material/processingLoaders/AddSomeRecipes.java new file mode 100644 index 0000000000..d1a4b2d2cf --- /dev/null +++ b/src/main/java/bartworks/system/material/processingLoaders/AddSomeRecipes.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.processingLoaders; + +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.dustSmall; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import bartworks.system.material.BWNonMetaMaterialItems; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; + +public class AddSomeRecipes implements Runnable { + + public void run() { + + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.Depleted_Tiberium_1.get(1)) + .itemOutputs( + WerkstoffLoader.Zirconium.get(dust), + WerkstoffLoader.Zirconium.get(dust), + WerkstoffLoader.Tiberium.get(dustSmall, 2), + WerkstoffLoader.Zirconium.get(dust, 2), + GTOreDictUnificator.get(dust, Materials.TungstenSteel, 8L), + GTOreDictUnificator.get(dust, Materials.Platinum, 1L)) + .outputChances(100_00, 50_00, 50_00, 25_00, 100_00, 100_00) + .fluidOutputs(WerkstoffLoader.Xenon.getFluidOrGas(1)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.Depleted_Tiberium_2.get(1)) + .itemOutputs( + WerkstoffLoader.Zirconium.get(dust, 2), + WerkstoffLoader.Zirconium.get(dust, 2), + WerkstoffLoader.Tiberium.get(dust), + WerkstoffLoader.Zirconium.get(dust, 4), + GTOreDictUnificator.get(dust, Materials.TungstenSteel, 18L), + GTOreDictUnificator.get(dust, Materials.Platinum, 2L)) + .outputChances(100_00, 50_00, 50_00, 25_00, 100_00, 100_00) + .fluidOutputs(WerkstoffLoader.Xenon.getFluidOrGas(2)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.Depleted_Tiberium_4.get(1)) + .itemOutputs( + WerkstoffLoader.Zirconium.get(dust, 4), + WerkstoffLoader.Zirconium.get(dust, 4), + WerkstoffLoader.Tiberium.get(dust, 2), + WerkstoffLoader.Zirconium.get(dust, 8), + GTOreDictUnificator.get(dust, Materials.TungstenSteel, 38L), + GTOreDictUnificator.get(dust, Materials.Platinum, 4L)) + .outputChances(100_00, 50_00, 50_00, 25_00, 100_00, 100_00) + .fluidOutputs(WerkstoffLoader.Xenon.getFluidOrGas(4)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(BWNonMetaMaterialItems.Depleted_TheCoreCell.get(1)) + .itemOutputs( + ItemList.Depleted_Naquadah_4.get(8), + WerkstoffLoader.Zirconium.get(dust, 64), + WerkstoffLoader.Zirconium.get(dust, 64), + GTOreDictUnificator.get(dust, Materials.TungstenSteel, 64L), + GTOreDictUnificator.get(dust, Materials.TungstenSteel, 64L), + GTOreDictUnificator.get(dust, Materials.TungstenSteel, 48L)) + .outputChances(100_00, 50_00, 50_00, 100_00, 100_00, 100_00) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + } +} diff --git a/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java b/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java new file mode 100644 index 0000000000..416b12dbf7 --- /dev/null +++ b/src/main/java/bartworks/system/material/processingLoaders/AdditionalRecipes.java @@ -0,0 +1,537 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.processingLoaders; + +import static bartworks.API.recipe.BartWorksRecipeMaps.bacterialVatRecipes; +import static bartworks.API.recipe.BartWorksRecipeMaps.bioLabRecipes; +import static gregtech.api.enums.Mods.Gendustry; +import static gregtech.api.enums.OrePrefixes.bolt; +import static gregtech.api.enums.OrePrefixes.crushed; +import static gregtech.api.enums.OrePrefixes.crushedPurified; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.dustSmall; +import static gregtech.api.enums.OrePrefixes.gem; +import static gregtech.api.enums.OrePrefixes.gemChipped; +import static gregtech.api.enums.OrePrefixes.gemFlawed; +import static gregtech.api.enums.OrePrefixes.stick; +import static gregtech.api.enums.OrePrefixes.stickLong; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.cannerRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; +import static gregtech.api.recipe.RecipeMaps.extremeNaquadahReactorFuels; +import static gregtech.api.recipe.RecipeMaps.fusionRecipes; +import static gregtech.api.recipe.RecipeMaps.hugeNaquadahReactorFuels; +import static gregtech.api.recipe.RecipeMaps.implosionRecipes; +import static gregtech.api.recipe.RecipeMaps.largeNaquadahReactorFuels; +import static gregtech.api.recipe.RecipeMaps.primitiveBlastRecipes; +import static gregtech.api.recipe.RecipeMaps.sifterRecipes; +import static gregtech.api.recipe.RecipeMaps.smallNaquadahReactorFuels; +import static gregtech.api.recipe.RecipeMaps.ultraHugeNaquadahReactorFuels; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.ADDITIVE_AMOUNT; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; +import static gregtech.api.util.GTRecipeConstants.FUSION_THRESHOLD; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; + +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.tuple.ImmutablePair; +import org.apache.commons.lang3.tuple.Pair; + +import bartworks.API.recipe.BartWorksRecipeMaps; +import bartworks.common.loaders.BioCultureLoader; +import bartworks.common.loaders.BioItemList; +import bartworks.common.loaders.FluidLoader; +import bartworks.common.loaders.ItemRegistry; +import bartworks.system.material.BWNonMetaMaterialItems; +import bartworks.system.material.WerkstoffLoader; +import bartworks.util.BioCulture; +import bartworks.util.BioDNA; +import bartworks.util.BioData; +import bartworks.util.BioPlasmid; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.items.behaviors.BehaviourDataOrb; + +public class AdditionalRecipes { + + private static void runBWRecipes() { + + FluidStack[] dnaFluid = { Gendustry.isModLoaded() ? FluidRegistry.getFluidStack("liquiddna", 1000) + : Materials.Biomass.getFluid(1000L) }; + + for (ItemStack stack : BioItemList.getAllPetriDishes()) { + BioData DNA = BioData.getBioDataFromNBTTag( + stack.getTagCompound() + .getCompoundTag("DNA")); + if (DNA != null) { + ItemStack Detergent = BioItemList.getOther(1); + ItemStack DNAFlask = BioItemList.getDNASampleFlask(null); + ItemStack EthanolCell = Materials.Ethanol.getCells(1); + GTValues.RA.stdBuilder() + .itemInputs(stack, DNAFlask, Detergent, EthanolCell) + .itemOutputs( + BioItemList.getDNASampleFlask(BioDNA.convertDataToDNA(DNA)), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1L)) + .outputChances(DNA.getChance(), 100_00) + .fluidInputs(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) + .special(BioItemList.mBioLabParts[0]) + .duration(25 * SECONDS) + .eut(GTValues.VP[3 + DNA.getTier()]) + .ignoreCollision() + .fake() + .addTo(bioLabRecipes); + } + + } + + for (ItemStack stack : BioItemList.getAllDNASampleFlasks()) { + BioData DNA = BioData.getBioDataFromNBTTag(stack.getTagCompound()); + + if (DNA != null) { + ItemStack Outp = ItemList.Tool_DataOrb.get(1L); + BehaviourDataOrb.setDataTitle(Outp, "DNA Sample"); + BehaviourDataOrb.setDataName(Outp, DNA.getName()); + + GTValues.RA.stdBuilder() + .itemInputs( + stack, + FluidLoader.BioLabFluidCells[0], + FluidLoader.BioLabFluidCells[3], + ItemList.Tool_DataOrb.get(1L)) + .itemOutputs(Outp, ItemList.Cell_Empty.get(2L)) + .outputChances(DNA.getChance(), 100_00) + .fluidInputs(dnaFluid) + .special(BioItemList.mBioLabParts[1]) + .duration(25 * SECONDS) + .eut(GTValues.VP[4 + DNA.getTier()]) + .ignoreCollision() + .fake() + .addTo(bioLabRecipes); + } + } + + for (ItemStack stack : BioItemList.getAllPlasmidCells()) { + BioData DNA = BioData.getBioDataFromNBTTag(stack.getTagCompound()); + + if (DNA != null) { + ItemStack inp = ItemList.Tool_DataOrb.get(0L); + BehaviourDataOrb.setDataTitle(inp, "DNA Sample"); + BehaviourDataOrb.setDataName(inp, DNA.getName()); + ItemStack inp2 = ItemList.Tool_DataOrb.get(0L); + BehaviourDataOrb.setDataTitle(inp2, "DNA Sample"); + BehaviourDataOrb.setDataName(inp2, BioCultureLoader.BIO_DATA_BETA_LACMATASE.getName()); + + GTValues.RA.stdBuilder() + .itemInputs(FluidLoader.BioLabFluidCells[1], BioItemList.getPlasmidCell(null), inp, inp2) + .itemOutputs(stack, ItemList.Cell_Empty.get(1L)) + .outputChances(DNA.getChance(), 100_00) + .fluidInputs(dnaFluid) + .special(BioItemList.mBioLabParts[2]) + .duration(25 * SECONDS) + .eut(GTValues.VP[4 + DNA.getTier()]) + .ignoreCollision() + .fake() + .addTo(bioLabRecipes); + } + } + + for (ItemStack stack : BioItemList.getAllPetriDishes()) { + BioData DNA = BioData.getBioDataFromNBTTag( + stack.getTagCompound() + .getCompoundTag("DNA")); + BioData Plasmid = BioData.getBioDataFromNBTTag( + stack.getTagCompound() + .getCompoundTag("Plasmid")); + if (!Objects.equals(DNA.getName(), Plasmid.getName())) { + GTValues.RA.stdBuilder() + .itemInputs( + BioItemList.getPetriDish(BioCulture.getBioCulture(DNA.getName())), + BioItemList.getPlasmidCell(BioPlasmid.convertDataToPlasmid(Plasmid)), + FluidLoader.BioLabFluidCells[2]) + .itemOutputs(stack, ItemList.Cell_Empty.get(1L)) + .outputChances(Plasmid.getChance(), 100_00) + .fluidInputs(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) + .special(BioItemList.mBioLabParts[3]) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .ignoreCollision() + .fake() + .addTo(bioLabRecipes); + } + } + + ItemStack Outp = ItemList.Tool_DataOrb.get(1L); + BehaviourDataOrb.setDataTitle(Outp, "DNA Sample"); + BehaviourDataOrb.setDataName(Outp, "Any DNA"); + // Clonal Cellular Synthesis- [Liquid DNA] + Medium Petri Dish + Plasma Membrane + Stem Cells + Genome Data + GTValues.RA.stdBuilder() + .itemInputs( + BioItemList.getPetriDish(null), + BioItemList.getOther(4), + ItemList.Circuit_Chip_Stemcell.get(2L), + Outp) + .itemOutputs( + BioItemList.getPetriDish(null) + .setStackDisplayName("The Culture made from DNA")) + .outputChances(75_00) + .fluidInputs(new FluidStack(dnaFluid[0].getFluid(), 8000)) + .special(BioItemList.mBioLabParts[4]) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .ignoreCollision() + .fake() + .addTo(bioLabRecipes); + + FluidStack[] easyFluids = { Materials.Water.getFluid(1000L), + FluidRegistry.getFluidStack("ic2distilledwater", 1000) }; + for (FluidStack fluidStack : easyFluids) { + for (BioCulture bioCulture : BioCulture.BIO_CULTURE_ARRAY_LIST) { + if (bioCulture.isBreedable() && bioCulture.getTier() == 0) { + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1), new ItemStack(Items.sugar, 64)) + .special(BioItemList.getPetriDish(bioCulture)) + .fluidInputs(fluidStack) + .fluidOutputs(new FluidStack(bioCulture.getFluid(), 10)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(bacterialVatRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + BioItemList.getPetriDish(null), + fluidStack.equals(Materials.Water.getFluid(1000L)) ? Materials.Water.getCells(1) + : GTUtility.getContainersFromFluid(GTModHandler.getDistilledWater(1000)) + .get(0)) + .itemOutputs(BioItemList.getPetriDish(bioCulture), Materials.Empty.getCells(1)) + .outputChances(bioCulture.getChance(), 100_00) + .fluidInputs(new FluidStack(bioCulture.getFluid(), 1000)) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_HV) + .ignoreCollision() + .fake() + .addTo(bioLabRecipes); + } + } + } + + List> liquidFuels = Arrays.asList( + ImmutablePair.of(Materials.PhosphoricAcid, 36), + ImmutablePair.of(Materials.DilutedHydrochloricAcid, 14), + ImmutablePair.of(Materials.HypochlorousAcid, 30), + ImmutablePair.of(Materials.HydrofluoricAcid, 40), + ImmutablePair.of(Materials.HydrochloricAcid, 28), + ImmutablePair.of(Materials.NitricAcid, 24), + ImmutablePair.of(Materials.Mercury, 32), + ImmutablePair.of(Materials.DilutedSulfuricAcid, 9), + ImmutablePair.of(Materials.SulfuricAcid, 18), + ImmutablePair.of(Materials.AceticAcid, 11), + ImmutablePair.of(WerkstoffLoader.FormicAcid.getBridgeMaterial(), 40)); + for (Pair fuel : liquidFuels) { + GTValues.RA.stdBuilder() + .itemInputs( + fuel.getLeft() + .getCells(1)) + .itemOutputs(Materials.Empty.getCells(1)) + .metadata(FUEL_VALUE, fuel.getRight()) + .addTo(BartWorksRecipeMaps.acidGenFuels); + } + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Redstone, 1)) + .itemOutputs(Materials.Empty.getCells(1)) + .metadata(FUEL_VALUE, 10) + .addTo(BartWorksRecipeMaps.acidGenFuels); + } + + @SuppressWarnings("deprecation") + public static void run() { + runBWRecipes(); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.RawAdemicSteel.get(dust)) + .itemOutputs(WerkstoffLoader.AdemicSteel.get(dust)) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_LV) + .metadata(ADDITIVE_AMOUNT, 4) + .addTo(implosionRecipes); + + // Thorium/Yttrium Glas + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.YttriumOxide.get(dustSmall, 2), WerkstoffLoader.Thorianit.get(dustSmall, 2)) + .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 12)) + .fluidInputs(Materials.Glass.getMolten(144)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_IV) + .metadata(COIL_HEAT, 3663) + .addTo(blastFurnaceRecipes); + + // Thorianite recipes + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Thorianit.get(crushedPurified)) + .itemOutputs( + WerkstoffLoader.Thorianit.get(dust), + WerkstoffLoader.Thorianit.get(dust), + WerkstoffLoader.Thorianit.get(dust), + Materials.Thorium.getDust(1), + Materials.Thorium.getDust(1), + WerkstoffLoader.Thorium232.get(dust)) + .outputChances(7000, 1300, 700, 600, 300, 100) + .duration(20 * SECONDS) + .eut((int) TierEU.RECIPE_IV) + .addTo(sifterRecipes); + + // 3ThO2 + 4Al = 3Th + 2Al2O3 + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Thorianit.get(dust, 9), Materials.Aluminium.getDust(4)) + .itemOutputs(Materials.Thorium.getDust(3), Materials.Aluminiumoxide.getDust(10)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // ThO2 + 2Mg = Th + 2MgO + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Thorianit.get(dust, 3), Materials.Magnesium.getDust(2)) + .itemOutputs(Materials.Thorium.getDust(1), Materials.Magnesia.getDust(4)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Thorianit.get(crushed), ItemList.Crop_Drop_Thorium.get(9)) + .itemOutputs(WerkstoffLoader.Thorianit.get(crushedPurified, 4)) + .fluidInputs(Materials.Water.getFluid(1000)) + .fluidOutputs(Materials.Thorium.getMolten(144)) + .duration(4 * SECONDS + 16 * TICKS) + .eut(24) + .addTo(UniversalChemical); + + // Prasiolite + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(dust, Materials.Quartzite, 40L), Materials.Amethyst.getDust(10)) + .itemOutputs(WerkstoffLoader.Prasiolite.get(OrePrefixes.gemFlawed, 20)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 500) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(dust, Materials.Quartzite, 40L)) + .itemOutputs(Materials.Amethyst.getDust(10)) + .duration(40 * SECONDS) + .eut(0) + .metadata(ADDITIVE_AMOUNT, 6) + .addTo(primitiveBlastRecipes); + + // Cubic Circonia + // 2Y + 3O = Y2O3 + GTValues.RA.stdBuilder() + .itemInputs(Materials.Yttrium.getDust(2), GTUtility.getIntegratedCircuit(5)) + .itemOutputs(WerkstoffLoader.YttriumOxide.get(dust, 5)) + .fluidInputs(Materials.Oxygen.getGas(3000)) + .duration(3 * MINUTES + 24 * SECONDS + 16 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Zr + 2O =Y22O3= ZrO2 + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Zirconium.get(dust, 10), WerkstoffLoader.YttriumOxide.get(dust, 0)) + .itemOutputs(WerkstoffLoader.CubicZirconia.get(gemFlawed, 40)) + .fluidInputs(Materials.Oxygen.getGas(20000)) + .duration(48 * MINUTES) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 2953) + .noOptimize() + .addTo(blastFurnaceRecipes); + + // Tellurium + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(crushed, Materials.Lead, 10L), GTUtility.getIntegratedCircuit(17)) + .itemOutputs(Materials.Lead.getIngots(10), Materials.Tellurium.getNuggets(20)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 722) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Plutonium.getMolten(48), Materials.Beryllium.getMolten(48)) + .fluidOutputs(WerkstoffLoader.Californium.getMolten(48)) + .duration(12 * SECONDS) + .eut(49152) + .metadata(FUSION_THRESHOLD, 480_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(WerkstoffLoader.Californium.getMolten(32), WerkstoffLoader.Calcium.getMolten(720)) + .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(720)) + .duration(24 * SECONDS) + .eut(49152) + .metadata(FUSION_THRESHOLD, 600_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(Materials.LiquidAir.getFluid(100000000)) + .fluidOutputs( + Materials.Nitrogen.getGas(78084000), + Materials.Oxygen.getGas(20946000), + Materials.Argon.getGas(934000), + Materials.CarbonDioxide.getGas(40700), + WerkstoffLoader.Neon.getFluidOrGas(1818), + Materials.Helium.getGas(524), + Materials.Methane.getGas(180), + WerkstoffLoader.Krypton.getFluidOrGas(114), + Materials.Hydrogen.getGas(55), + WerkstoffLoader.Xenon.getFluidOrGas(9)) + .duration(6 * MINUTES + 15 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(distillationTowerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.MagnetoResonaticDust.get(dust)) + .itemOutputs(WerkstoffLoader.MagnetoResonaticDust.get(gemChipped, 9)) + .outputChances(90_00) + .fluidInputs(WerkstoffLoader.Neon.getFluidOrGas(1000)) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(autoclaveRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.MagnetoResonaticDust.get(dust)) + .itemOutputs(WerkstoffLoader.MagnetoResonaticDust.get(gem)) + .fluidInputs(WerkstoffLoader.Krypton.getFluidOrGas(1000)) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(autoclaveRecipes); + + // Milk + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .itemOutputs( + Materials.Sugar.getDustSmall(21), + Materials.Calcium.getDustTiny(1), + Materials.Magnesium.getDustTiny(1), + Materials.Potassium.getDustTiny(1), + Materials.Sodium.getDustTiny(4), + Materials.Phosphorus.getDustTiny(1)) + .outputChances(100_00, 100_00, 10_00, 100_00, 10_00, 10_00) + .fluidInputs(Materials.Milk.getFluid(10000)) + .fluidOutputs(Materials.Water.getFluid(8832)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Tiberium.get(bolt)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 12_500) + .addTo(smallNaquadahReactorFuels); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Tiberium.get(stick)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 62_500) + .addTo(largeNaquadahReactorFuels); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Tiberium.get(stickLong)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 125_000) + .addTo(hugeNaquadahReactorFuels); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Tiberium.get(stick)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 31_250) + .addTo(extremeNaquadahReactorFuels); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Tiberium.get(stickLong)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 125_000) + .addTo(ultraHugeNaquadahReactorFuels); + + LoadItemContainers.run(); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Large_Fluid_Cell_TungstenSteel.get(1L), WerkstoffLoader.Tiberium.get(dust, 3)) + .itemOutputs(BWNonMetaMaterialItems.TiberiumCell_1.get(1L)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(cannerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + BWNonMetaMaterialItems.TiberiumCell_1.get(2L), + GTOreDictUnificator.get(stick, Materials.TungstenSteel, 4L)) + .itemOutputs(BWNonMetaMaterialItems.TiberiumCell_2.get(1L)) + .duration(5 * SECONDS) + .eut(400) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + BWNonMetaMaterialItems.TiberiumCell_1.get(4L), + GTOreDictUnificator.get(stickLong, Materials.TungstenSteel, 6L)) + .itemOutputs(BWNonMetaMaterialItems.TiberiumCell_4.get(1L)) + .duration(7 * SECONDS + 10 * TICKS) + .eut(400) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + BWNonMetaMaterialItems.TiberiumCell_2.get(2L), + GTOreDictUnificator.get(stick, Materials.TungstenSteel, 4L)) + .itemOutputs(BWNonMetaMaterialItems.TiberiumCell_4.get(1L)) + .duration(5 * SECONDS) + .eut(400) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.NaquadahCell_1.get(32L), + GTOreDictUnificator.get(stickLong, Materials.TungstenSteel, 64L), + GTOreDictUnificator.get(stickLong, Materials.TungstenSteel, 64L), + GTOreDictUnificator.get(stickLong, Materials.TungstenSteel, 64L), + WerkstoffLoader.Tiberium.get(dust, 64), + WerkstoffLoader.Tiberium.get(dust, 64)) + .itemOutputs(BWNonMetaMaterialItems.TheCoreCell.get(1L)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + GregTechAPI.sAfterGTPostload.add(new AddSomeRecipes()); + } +} diff --git a/src/main/java/bartworks/system/material/processingLoaders/DownTierLoader.java b/src/main/java/bartworks/system/material/processingLoaders/DownTierLoader.java new file mode 100644 index 0000000000..7be8b72bf0 --- /dev/null +++ b/src/main/java/bartworks/system/material/processingLoaders/DownTierLoader.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.processingLoaders; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +import bartworks.util.BWUtil; +import bartworks.util.StreamUtils; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTRecipe; + +public class DownTierLoader { + + public static void run() { + RecipeMap.ALL_RECIPE_MAPS.values() + .stream() + .filter(map -> StreamUtils.filterVisualMaps(map) && map != RecipeMaps.fusionRecipes) + .forEach(map -> { + Set newRecipes = new HashSet<>(); + Set toRem = new HashSet<>(); + map.getAllRecipes() + .stream() + .filter(recipe -> Objects.nonNull(recipe) && recipe.mEUt > 128) + .forEach(recipe -> { + toRem.add(recipe); + newRecipes.add(BWUtil.copyAndSetTierToNewRecipe(recipe, (byte) 2)); + }); + map.getBackend() + .removeRecipes(toRem); + newRecipes.forEach(map::add); + }); + } +} diff --git a/src/main/java/bartworks/system/material/processingLoaders/LoadItemContainers.java b/src/main/java/bartworks/system/material/processingLoaders/LoadItemContainers.java new file mode 100644 index 0000000000..2e43490a25 --- /dev/null +++ b/src/main/java/bartworks/system/material/processingLoaders/LoadItemContainers.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.processingLoaders; + +import bartworks.system.material.BWNonMetaMaterialItems; +import gregtech.api.items.ItemRadioactiveCellIC; +import gregtech.common.items.ItemDepletedCell; + +public class LoadItemContainers { + + public static void run() { + BWNonMetaMaterialItems.Depleted_Tiberium_1 + .set(new ItemDepletedCell("TiberiumcellDep", "Fuel Rod (Depleted Tiberium)", 1)); + BWNonMetaMaterialItems.Depleted_Tiberium_2 + .set(new ItemDepletedCell("Double_TiberiumcellDep", "Dual Fuel Rod (Depleted Tiberium)", 1)); + BWNonMetaMaterialItems.Depleted_Tiberium_4 + .set(new ItemDepletedCell("Quad_TiberiumcellDep", "Quad Fuel Rod (Depleted Tiberium)", 1)); + BWNonMetaMaterialItems.TiberiumCell_1.set( + new ItemRadioactiveCellIC( + "Tiberiumcell", + "Fuel Rod (Tiberium)", + 1, + 50000, + 2F, + 1, + 0.5F, + BWNonMetaMaterialItems.Depleted_Tiberium_1.get(1), + false)); + BWNonMetaMaterialItems.TiberiumCell_2.set( + new ItemRadioactiveCellIC( + "Double_Tiberiumcell", + "Dual Fuel Rod (Tiberium)", + 2, + 50000, + 2F, + 1, + 0.5F, + BWNonMetaMaterialItems.Depleted_Tiberium_2.get(1), + false)); + BWNonMetaMaterialItems.TiberiumCell_4.set( + new ItemRadioactiveCellIC( + "Quad_Tiberiumcell", + "Quad Fuel Rod (Tiberium)", + 4, + 50000, + 2F, + 1, + 0.5F, + BWNonMetaMaterialItems.Depleted_Tiberium_4.get(1), + false)); + BWNonMetaMaterialItems.Depleted_TheCoreCell + .set(new ItemDepletedCell("Core_Reactor_CellDep", "Depleted \"The Core\" Cell", 32)); + BWNonMetaMaterialItems.TheCoreCell.set( + new ItemRadioactiveCellIC( + "Core_Reactor_Cell", + "\"The Core\" Cell", + 32, + 100000, + 8F, + 32, + 1F, + BWNonMetaMaterialItems.Depleted_TheCoreCell.get(1), + false)); + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/IWerkstoffRunnable.java b/src/main/java/bartworks/system/material/werkstoff_loaders/IWerkstoffRunnable.java new file mode 100644 index 0000000000..8399091f8b --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/IWerkstoffRunnable.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders; + +import bartworks.system.material.Werkstoff; + +public interface IWerkstoffRunnable { + + void run(Werkstoff werkstoff); +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/AspectLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/AspectLoader.java new file mode 100644 index 0000000000..6635db3b3b --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/AspectLoader.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.Mods.Thaumcraft; + +import java.util.Objects; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import bartworks.util.Pair; +import bartworks.util.log.DebugLog; +import bwcrossmod.thaumcraft.util.ThaumcraftHandler; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TCAspects; + +public class AspectLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (!Thaumcraft.isModLoaded()) { + return; + } + + for (OrePrefixes enabledOrePrefixes : WerkstoffLoader.ENABLED_ORE_PREFIXES) { + if (werkstoff.hasItemType(enabledOrePrefixes)) { + if (enabledOrePrefixes.mMaterialAmount >= 3628800L || enabledOrePrefixes == OrePrefixes.ore) { + DebugLog.log( + "OrePrefix: " + enabledOrePrefixes.name() + + " mMaterialAmount: " + + enabledOrePrefixes.mMaterialAmount / 3628800L); + if (Objects.nonNull(WerkstoffLoader.items.get(enabledOrePrefixes))) + ThaumcraftHandler.AspectAdder.addAspectViaBW( + werkstoff.get(enabledOrePrefixes), + werkstoff.getTCAspects( + enabledOrePrefixes == OrePrefixes.ore ? 1 + : (int) (enabledOrePrefixes.mMaterialAmount / 3628800L))); + } else if (enabledOrePrefixes.mMaterialAmount >= 0L + && Objects.nonNull(WerkstoffLoader.items.get(enabledOrePrefixes))) + ThaumcraftHandler.AspectAdder + .addAspectViaBW(werkstoff.get(enabledOrePrefixes), new Pair<>(TCAspects.PERDITIO.mAspect, 1)); + } + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/BlockLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/BlockLoader.java new file mode 100644 index 0000000000..3637385328 --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/BlockLoader.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.OrePrefixes.block; +import static gregtech.api.enums.OrePrefixes.cellMolten; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.plate; +import static gregtech.api.recipe.RecipeMaps.cutterRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.UniversalArcFurnace; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.TierEU; +import gregtech.api.recipe.RecipeCategories; +import gregtech.api.util.GTRecipeConstants; + +public class BlockLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (!werkstoff.hasItemType(block)) return; + if (werkstoff.hasItemType(ingot)) { + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(block)) + .itemOutputs(werkstoff.get(ingot, 9)) + .duration(16 * TICKS) + .eut(90) + .metadata(GTRecipeConstants.RECYCLE, true) + .addTo(UniversalArcFurnace); + } + if (werkstoff.hasItemType(cellMolten)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(block)) + .fluidOutputs(werkstoff.getMolten(1296)) + .recipeCategory(RecipeCategories.fluidExtractorRecycling) + .duration(14 * SECONDS + 8 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + + } + if (werkstoff.hasItemType(plate)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(block)) + .itemOutputs(werkstoff.get(plate, 9)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 10L, + 1L)) + .eut(TierEU.RECIPE_LV) + .addTo(cutterRecipes); + + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CasingLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CasingLoader.java new file mode 100644 index 0000000000..06bda56804 --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CasingLoader.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.OrePrefixes.blockCasing; +import static gregtech.api.enums.OrePrefixes.blockCasingAdvanced; +import static gregtech.api.enums.OrePrefixes.gearGt; +import static gregtech.api.enums.OrePrefixes.gearGtSmall; +import static gregtech.api.enums.OrePrefixes.plank; +import static gregtech.api.enums.OrePrefixes.plate; +import static gregtech.api.enums.OrePrefixes.plateDouble; +import static gregtech.api.enums.OrePrefixes.screw; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import bartworks.system.material.BWGTMaterialReference; +import bartworks.system.material.Werkstoff; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; + +public class CasingLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (werkstoff == BWGTMaterialReference.Wood /* || werkstoff == BW_GT_MaterialReference.WoodSealed */) { + addCasingRecipes(werkstoff, plank); + } else { + if (!werkstoff.hasGenerationFeature(blockCasing) || !werkstoff.doesOreDictedItemExists(plate) + || !werkstoff.doesOreDictedItemExists(screw) + || !werkstoff.doesOreDictedItemExists(gearGtSmall) + || !werkstoff.doesOreDictedItemExists(gearGt) + || !werkstoff.doesOreDictedItemExists(plateDouble)) return; + + addCasingRecipes(werkstoff, plateDouble); + } + } + + private static void addCasingRecipes(Werkstoff werkstoff, OrePrefixes reboltedCasingsOuterStuff) { + GTModHandler.addCraftingRecipe( + werkstoff.get(blockCasing), + new Object[] { "PSP", "PGP", "PSP", 'P', werkstoff.get(plate), 'S', werkstoff.get(screw), 'G', + werkstoff.get(gearGtSmall) }); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(plate, 6), werkstoff.get(screw, 2), werkstoff.get(gearGtSmall)) + .itemOutputs(werkstoff.get(blockCasing)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + + GTModHandler.addCraftingRecipe( + werkstoff.get(blockCasingAdvanced), + new Object[] { "PSP", "PGP", "PSP", 'P', werkstoff.get(reboltedCasingsOuterStuff), 'S', + werkstoff.get(screw), 'G', werkstoff.get(gearGt) }); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(reboltedCasingsOuterStuff, 6), werkstoff.get(screw, 2), werkstoff.get(gearGt)) + .itemOutputs(werkstoff.get(blockCasingAdvanced)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CellLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CellLoader.java new file mode 100644 index 0000000000..5458d24244 --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CellLoader.java @@ -0,0 +1,330 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.enums.OrePrefixes.capsule; +import static gregtech.api.enums.OrePrefixes.cell; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Objects; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import bartworks.util.Pair; +import gregtech.api.enums.Element; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TextureSet; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.ISubTagContainer; +import gregtech.api.recipe.RecipeCategories; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.common.items.behaviors.BehaviourDataOrb; + +public class CellLoader implements IWerkstoffRunnable { + + @Override + @SuppressWarnings("unchecked") + public void run(Werkstoff werkstoff) { + if (!werkstoff.hasItemType(cell)) return; + + if ((werkstoff.getStats() + .isElektrolysis() + || werkstoff.getStats() + .isCentrifuge()) + && !werkstoff.hasItemType(dust)) { + List flOutputs = new ArrayList<>(); + List stOutputs = new ArrayList<>(); + HashMap> tracker = new HashMap<>(); + int cells = 0; + for (Pair container : werkstoff.getContents() + .getValue() + .toArray(new Pair[0])) { + if (container.getKey() instanceof Materials) { + if ((((Materials) container.getKey()).hasCorrespondingGas() + || ((Materials) container.getKey()).hasCorrespondingFluid() + || ((Materials) container.getKey()).mIconSet == TextureSet.SET_FLUID) + && ((Materials) container.getKey()).getDust(0) == null) { + FluidStack tmpFl = ((Materials) container.getKey()).getGas(1000L * container.getValue()); + if (tmpFl == null || tmpFl.getFluid() == null) { + tmpFl = ((Materials) container.getKey()).getFluid(1000L * container.getValue()); + } + flOutputs.add(tmpFl); + if (flOutputs.size() > 1) { + if (!tracker.containsKey(container.getKey())) { + stOutputs.add(((Materials) container.getKey()).getCells(container.getValue())); + tracker.put(container.getKey(), new Pair<>(container.getValue(), stOutputs.size() - 1)); + } else { + stOutputs.add( + ((Materials) container.getKey()).getCells( + tracker.get(container.getKey()) + .getKey() + container.getValue())); + stOutputs.remove( + tracker.get(container.getKey()) + .getValue() + 1); + } + cells += container.getValue(); + } + } else { + if (((Materials) container.getKey()).getDust(container.getValue()) == null) continue; + if (!tracker.containsKey(container.getKey())) { + stOutputs.add(((Materials) container.getKey()).getDust(container.getValue())); + tracker.put(container.getKey(), new Pair<>(container.getValue(), stOutputs.size() - 1)); + } else { + stOutputs.add( + ((Materials) container.getKey()).getDust( + tracker.get(container.getKey()) + .getKey() + container.getValue())); + stOutputs.remove( + tracker.get(container.getKey()) + .getValue() + 1); + } + } + } else if (container.getKey() instanceof Werkstoff) { + if (((Werkstoff) container.getKey()).getStats() + .isGas() || ((Werkstoff) container.getKey()).hasItemType(cell)) { + FluidStack tmpFl = ((Werkstoff) container.getKey()).getFluidOrGas(1000 * container.getValue()); + if (tmpFl == null || tmpFl.getFluid() == null) { + tmpFl = ((Werkstoff) container.getKey()).getFluidOrGas(1000 * container.getValue()); + } + flOutputs.add(tmpFl); + if (flOutputs.size() > 1) { + if (!tracker.containsKey(container.getKey())) { + stOutputs.add(((Werkstoff) container.getKey()).get(cell, container.getValue())); + tracker.put(container.getKey(), new Pair<>(container.getValue(), stOutputs.size() - 1)); + } else { + stOutputs.add( + ((Werkstoff) container.getKey()).get( + cell, + tracker.get(container.getKey()) + .getKey() + container.getValue())); + stOutputs.remove( + tracker.get(container.getKey()) + .getValue() + 1); + } + cells += container.getValue(); + } + } else { + if (!((Werkstoff) container.getKey()).hasItemType(dust)) continue; + if (!tracker.containsKey(container.getKey())) { + stOutputs.add(((Werkstoff) container.getKey()).get(dust, container.getValue())); + tracker.put(container.getKey(), new Pair<>(container.getValue(), stOutputs.size() - 1)); + } else { + stOutputs.add( + ((Werkstoff) container.getKey()).get( + dust, + tracker.get(container.getKey()) + .getKey() + container.getValue())); + stOutputs.remove( + tracker.get(container.getKey()) + .getValue() + 1); + } + } + } + } + ItemStack input = werkstoff.get(cell); + input.stackSize = 1; + + int cellEmpty = cells - 1; + + stOutputs.add(Materials.Empty.getCells(-cellEmpty)); + if (werkstoff.getStats() + .isElektrolysis()) + RecipeMaps.electrolyzerRecipes.add( + new GTRecipe( + true, + new ItemStack[] { input, cellEmpty > 0 ? Materials.Empty.getCells(cellEmpty) : null }, + stOutputs.toArray(new ItemStack[0]), + null, + null, + new FluidStack[] { null }, + new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, + (int) Math.max( + 1L, + Math.abs( + werkstoff.getStats() + .getProtons() + * werkstoff.getContents() + .getValue() + .size())), + Math.min( + 4, + werkstoff.getContents() + .getValue() + .size()) + * 30, + 0)); + if (werkstoff.getStats() + .isCentrifuge()) + RecipeMaps.centrifugeRecipes.add( + new GTRecipe( + true, + new ItemStack[] { input, cellEmpty > 0 ? Materials.Empty.getCells(cellEmpty) : null }, + stOutputs.toArray(new ItemStack[0]), + null, + null, + new FluidStack[] { null }, + new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, + (int) Math.max( + 1L, + Math.abs( + werkstoff.getStats() + .getMass() + * werkstoff.getContents() + .getValue() + .size())), + Math.min( + 4, + werkstoff.getContents() + .getValue() + .size()) + * 5, + 0)); + } + + // Tank "Recipe" + GTUtility.addFluidContainerData( + new FluidContainerRegistry.FluidContainerData( + new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(werkstoff)), 1000), + werkstoff.get(cell), + Materials.Empty.getCells(1))); + FluidContainerRegistry.registerFluidContainer( + werkstoff.getFluidOrGas(1) + .getFluid(), + werkstoff.get(cell), + Materials.Empty.getCells(1)); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(1)) + .itemOutputs(werkstoff.get(cell)) + .fluidInputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(werkstoff)), 1000)) + .duration(16 * TICKS) + .eut(2) + .addTo(fluidCannerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(cell)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidOutputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(werkstoff)), 1000)) + .duration(16 * TICKS) + .eut(2) + .addTo(fluidCannerRecipes); + + if (Forestry.isModLoaded()) { + FluidContainerRegistry.FluidContainerData emptyData = new FluidContainerRegistry.FluidContainerData( + new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(werkstoff)), 1000), + werkstoff.get(capsule), + GTModHandler.getModItem(Forestry.ID, "waxCapsule", 1), + true); + GTUtility.addFluidContainerData(emptyData); + FluidContainerRegistry.registerFluidContainer(emptyData); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(capsule)) + .fluidOutputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(werkstoff)), 1000)) + .duration(16 * TICKS) + .eut(2) + .addTo(fluidCannerRecipes); + } + + if (werkstoff.hasItemType(dust)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dust)) + .fluidOutputs(werkstoff.getFluidOrGas(1000)) + .duration( + werkstoff.getStats() + .getMass()) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .recipeCategory(RecipeCategories.fluidExtractorRecycling) + .addTo(fluidExtractionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .itemOutputs(werkstoff.get(dust)) + .fluidInputs(werkstoff.getFluidOrGas(1000)) + .duration( + (int) werkstoff.getStats() + .getMass()) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + } + + if (Werkstoff.Types.ELEMENT.equals(werkstoff.getType())) { + Materials werkstoffBridgeMaterial = null; + boolean ElementSet = false; + for (Element e : Element.values()) { + if (e.toString() + .equals(werkstoff.getToolTip())) { + werkstoffBridgeMaterial = werkstoff.getBridgeMaterial() != null ? werkstoff.getBridgeMaterial() + : new Materials( + -1, + werkstoff.getTexSet(), + 0, + 0, + 0, + false, + werkstoff.getDefaultName(), + werkstoff.getDefaultName()); + werkstoffBridgeMaterial.mElement = e; + e.mLinkedMaterials.add(werkstoffBridgeMaterial); + ElementSet = true; + werkstoff.setBridgeMaterial(werkstoffBridgeMaterial); + break; + } + } + if (!ElementSet) return; + + GTOreDictUnificator.addAssociation(cell, werkstoffBridgeMaterial, werkstoff.get(cell), false); + + ItemStack scannerOutput = ItemList.Tool_DataOrb.get(1L); + BehaviourDataOrb.setDataTitle(scannerOutput, "Elemental-Scan"); + BehaviourDataOrb.setDataName(scannerOutput, werkstoff.getToolTip()); + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(cell)) + .itemOutputs(scannerOutput) + .special(ItemList.Tool_DataOrb.get(1L)) + .duration(werkstoffBridgeMaterial.getMass() * 8192) + .eut(TierEU.RECIPE_LV) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(scannerFakeRecipes); + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CraftingMaterialLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CraftingMaterialLoader.java new file mode 100644 index 0000000000..022cf4c3e6 --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CraftingMaterialLoader.java @@ -0,0 +1,295 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.OrePrefixes.bolt; +import static gregtech.api.enums.OrePrefixes.cellMolten; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.dustSmall; +import static gregtech.api.enums.OrePrefixes.dustTiny; +import static gregtech.api.enums.OrePrefixes.gearGt; +import static gregtech.api.enums.OrePrefixes.gearGtSmall; +import static gregtech.api.enums.OrePrefixes.gem; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.plate; +import static gregtech.api.enums.OrePrefixes.ring; +import static gregtech.api.enums.OrePrefixes.rotor; +import static gregtech.api.enums.OrePrefixes.screw; +import static gregtech.api.enums.OrePrefixes.stick; +import static gregtech.api.enums.OrePrefixes.wireFine; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.cutterRecipes; +import static gregtech.api.recipe.RecipeMaps.extruderRecipes; +import static gregtech.api.recipe.RecipeMaps.latheRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.wiremillRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.common.GTProxy; + +public class CraftingMaterialLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (werkstoff.hasItemType(screw)) { + int tVoltageMultiplier = werkstoff.getStats() + .getMeltingPoint() >= 2800 ? 60 : 15; + + // bolt + + GTValues.RA.stdBuilder() + .itemInputs( + werkstoff.hasItemType(gem) ? werkstoff.get(gem) : werkstoff.get(ingot), + ItemList.Shape_Extruder_Bolt.get(0L)) + .itemOutputs(werkstoff.get(bolt, 8)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 2L, + 1)) + .eut(8 * tVoltageMultiplier) + .addTo(extruderRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(stick)) + .itemOutputs(werkstoff.get(bolt, 4)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 2L, + 1L)) + .eut(4) + .addTo(cutterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(bolt)) + .itemOutputs(werkstoff.get(dustTiny, 1)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + // screw + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(bolt)) + .itemOutputs(werkstoff.get(screw)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() / 8L, + 1L)) + .eut(4) + .addTo(latheRecipes); + + GTModHandler.addCraftingRecipe( + werkstoff.get(screw), + GTProxy.tBits, + new Object[] { "fX", "X ", 'X', werkstoff.get(bolt) }); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(screw)) + .itemOutputs(werkstoff.get(dustTiny, 1)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + if (werkstoff.hasItemType(gem)) return; + + // ring + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot), ItemList.Shape_Extruder_Ring.get(0L)) + .itemOutputs(werkstoff.get(ring, 4)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 2L, + 1)) + .eut(6 * tVoltageMultiplier) + .addTo(extruderRecipes); + + GTModHandler.addCraftingRecipe( + werkstoff.get(ring), + GTProxy.tBits, + new Object[] { "h ", "fX", 'X', werkstoff.get(stick) }); + + // Gear + GTModHandler.addCraftingRecipe( + werkstoff.get(gearGt), + GTProxy.tBits, + new Object[] { "SPS", "PwP", "SPS", 'P', werkstoff.get(plate), 'S', werkstoff.get(stick) }); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot, 4), ItemList.Shape_Extruder_Gear.get(0L)) + .itemOutputs(werkstoff.get(gearGt)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 5L, + 1)) + .eut(8 * tVoltageMultiplier) + .addTo(extruderRecipes); + // wireFine + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot), ItemList.Shape_Extruder_Wire.get(0L)) + .itemOutputs(werkstoff.get(wireFine, 8)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 1.5F, + 1F)) + .eut(8 * tVoltageMultiplier) + .addTo(extruderRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot), GTUtility.getIntegratedCircuit(3)) + .itemOutputs(werkstoff.get(wireFine, 8)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass(), + 1)) + .eut(8 * tVoltageMultiplier) + .addTo(wiremillRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(stick), GTUtility.getIntegratedCircuit(3)) + .itemOutputs(werkstoff.get(wireFine, 4)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 0.5F, + 1F)) + .eut(8 * tVoltageMultiplier) + .addTo(wiremillRecipes); + + // smallGear + if (WerkstoffLoader.smallGearShape != null) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot), WerkstoffLoader.smallGearShape.get(0L)) + .itemOutputs(werkstoff.get(gearGtSmall)) + .duration( + (int) werkstoff.getStats() + .getMass()) + .eut(8 * tVoltageMultiplier) + .addTo(extruderRecipes); + + } + + GTModHandler.addCraftingRecipe( + werkstoff.get(gearGtSmall), + GTProxy.tBits, + new Object[] { " S ", "hPx", " S ", 'S', werkstoff.get(stick), 'P', werkstoff.get(plate) }); + + // Rotor + GTModHandler.addCraftingRecipe( + werkstoff.get(rotor), + GTProxy.tBits, + new Object[] { "PhP", "SRf", "PdP", 'P', werkstoff.get(plate), 'R', werkstoff.get(ring), 'S', + werkstoff.get(screw) }); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(plate, 4), werkstoff.get(ring)) + .itemOutputs(werkstoff.get(rotor)) + .fluidInputs(Materials.Tin.getMolten(32)) + .duration(12 * SECONDS) + .eut(24) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(plate, 4), werkstoff.get(ring)) + .itemOutputs(werkstoff.get(rotor)) + .fluidInputs(Materials.Lead.getMolten(48)) + .duration(12 * SECONDS) + .eut(24) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(plate, 4), werkstoff.get(ring)) + .itemOutputs(werkstoff.get(rotor)) + .fluidInputs(Materials.SolderingAlloy.getMolten(16)) + .duration(12 * SECONDS) + .eut(24) + .addTo(assemblerRecipes); + + if (WerkstoffLoader.rotorShape != null) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot, 5), WerkstoffLoader.rotorShape.get(0L)) + .itemOutputs(werkstoff.get(rotor)) + .duration(10 * SECONDS) + .eut(60) + .addTo(extruderRecipes); + + } + + // molten -> metal + if (werkstoff.hasItemType(cellMolten)) { + + /* + * !! No more hardcoded gear, etc. recipe gen, now must go through GenerationFeatures() !! + * GT_Values.RA.addFluidSolidifierRecipe( ItemList.Shape_Mold_Gear.get(0L), werkstoff.getMolten(576), + * werkstoff.get(gearGt), 128, 8); GT_Values.RA.addFluidSolidifierRecipe( + * ItemList.Shape_Mold_Gear_Small.get(0L), werkstoff.getMolten(144), werkstoff.get(gearGtSmall), 16, 8); + * if (WerkstoffLoader.ringMold != null) GT_Values.RA.addFluidSolidifierRecipe( + * WerkstoffLoader.ringMold.get(0L), werkstoff.getMolten(36), werkstoff.get(ring), 100, 4 * + * tVoltageMultiplier); if (WerkstoffLoader.boltMold != null) GT_Values.RA.addFluidSolidifierRecipe( + * WerkstoffLoader.boltMold.get(0L), werkstoff.getMolten(18), werkstoff.get(bolt), 50, 2 * + * tVoltageMultiplier); if (WerkstoffLoader.rotorMold != null) GT_Values.RA.addFluidSolidifierRecipe( + * WerkstoffLoader.rotorMold.get(0L), werkstoff.getMolten(612), werkstoff.get(rotor), 100, 60); + */ + } + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gearGt)) + .itemOutputs(werkstoff.get(dust, 4)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gearGtSmall)) + .itemOutputs(werkstoff.get(dust, 1)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(rotor)) + .itemOutputs(werkstoff.get(dust, 4), werkstoff.get(dustSmall)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ring)) + .itemOutputs(werkstoff.get(dustSmall, 1)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CrushedLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CrushedLoader.java new file mode 100644 index 0000000000..ab3874f6bc --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/CrushedLoader.java @@ -0,0 +1,301 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.enums.OrePrefixes.crushed; +import static gregtech.api.enums.OrePrefixes.crushedCentrifuged; +import static gregtech.api.enums.OrePrefixes.crushedPurified; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.dustImpure; +import static gregtech.api.enums.OrePrefixes.dustPure; +import static gregtech.api.enums.OrePrefixes.dustSmall; +import static gregtech.api.enums.OrePrefixes.gem; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.nugget; +import static gregtech.api.enums.OrePrefixes.ore; +import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; +import static gregtech.api.recipe.RecipeMaps.electroMagneticSeparatorRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.oreWasherRecipes; +import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SubTag; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; + +public class CrushedLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (!werkstoff.hasItemType(ore) || !werkstoff.hasItemType(dust)) return; + + if (werkstoff.hasItemType(ingot) && !werkstoff.getStats() + .isBlastFurnace()) { + if (Werkstoff.Types.ELEMENT.equals(werkstoff.getType())) { + GTModHandler.addSmeltingRecipe(werkstoff.get(crushed), werkstoff.get(nugget, 10)); + GTModHandler.addSmeltingRecipe(werkstoff.get(crushedPurified), werkstoff.get(nugget, 10)); + GTModHandler.addSmeltingRecipe(werkstoff.get(crushedCentrifuged), werkstoff.get(nugget, 10)); + } else { + GTModHandler.addSmeltingRecipe(werkstoff.get(crushed), werkstoff.get(ingot)); + GTModHandler.addSmeltingRecipe(werkstoff.get(crushedPurified), werkstoff.get(ingot)); + GTModHandler.addSmeltingRecipe(werkstoff.get(crushedCentrifuged), werkstoff.get(ingot)); + } + GTModHandler.addSmeltingRecipe(werkstoff.get(dustImpure), werkstoff.get(ingot)); + GTModHandler.addSmeltingRecipe(werkstoff.get(dustPure), werkstoff.get(ingot)); + GTModHandler.addSmeltingRecipe(werkstoff.get(dust), werkstoff.get(ingot)); + } + + GTModHandler + .addCraftingRecipe(werkstoff.get(dustImpure), new Object[] { "h ", "W ", 'W', werkstoff.get(crushed) }); + GTModHandler.addCraftingRecipe( + werkstoff.get(dustPure), + new Object[] { "h ", "W ", 'W', werkstoff.get(crushedPurified) }); + GTModHandler.addCraftingRecipe( + werkstoff.get(dust), + new Object[] { "h ", "W ", 'W', werkstoff.get(crushedCentrifuged) }); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(crushed)) + .itemOutputs(werkstoff.get(dustImpure)) + .duration(10 * TICKS) + .eut(16) + .addTo(hammerRecipes); + + RA.stdBuilder() + .itemInputs(werkstoff.get(crushed)) + .itemOutputs(werkstoff.get(dustImpure), werkstoff.getOreByProduct(0, dust)) + .outputChances(100_00, 10_00) + .eut(2) + .duration(20 * SECONDS) + .addTo(maceratorRecipes); + + RA.stdBuilder() + .itemInputs(werkstoff.get(crushed)) + .itemOutputs( + werkstoff.get(crushedPurified), + werkstoff.getOreByProduct(0, dust), + GTOreDictUnificator.get(dust, Materials.Stone, 1L)) + .outputChances(100_00, 11_11, 100_00) + .fluidInputs(GTModHandler.getWater(1000)) + .duration(25 * SECONDS) + .eut(16) + .addTo(oreWasherRecipes); + + RA.stdBuilder() + .itemInputs(werkstoff.get(crushed)) + .itemOutputs( + werkstoff.get(crushedPurified), + werkstoff.getOreByProduct(0, dust), + GTOreDictUnificator.get(dust, Materials.Stone, 1L)) + .outputChances(100_00, 11_11, 100_00) + .fluidInputs(GTModHandler.getDistilledWater(200)) + .duration(15 * SECONDS) + .eut(16) + .addTo(oreWasherRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(crushed)) + .itemOutputs( + werkstoff.get(crushedCentrifuged), + werkstoff.getOreByProduct(1, dust), + GTOreDictUnificator.get(dust, Materials.Stone, 1L)) + .outputChances(100_00, 11_11, 100_00) + .duration(25 * SECONDS) + .eut(48) + .addTo(thermalCentrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(crushedPurified)) + .itemOutputs(werkstoff.get(dustPure)) + .duration(10 * TICKS) + .eut(16) + .addTo(hammerRecipes); + + RA.stdBuilder() + .itemInputs(werkstoff.get(crushedPurified)) + .itemOutputs(werkstoff.get(dustPure), werkstoff.getOreByProduct(1, dust)) + .outputChances(100_00, 10_00) + .eut(2) + .duration(20 * SECONDS) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(crushedPurified)) + .itemOutputs(werkstoff.get(crushedCentrifuged), werkstoff.getOreByProduct(1, dust)) + .outputChances(100_00, 11_11) + .duration(25 * SECONDS) + .eut(48) + .addTo(thermalCentrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(crushedCentrifuged)) + .itemOutputs(werkstoff.get(dust)) + .duration(10 * TICKS) + .eut(16) + .addTo(hammerRecipes); + + RA.stdBuilder() + .itemInputs(werkstoff.get(crushedCentrifuged)) + .itemOutputs(werkstoff.get(dust), werkstoff.getOreByProduct(2, dust)) + .outputChances(100_00, 10_00) + .eut(2) + .duration(20 * SECONDS) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustImpure)) + .itemOutputs(werkstoff.get(dust), werkstoff.getOreByProduct(0, dust)) + .outputChances(100_00, 11_11) + .duration( + Math.max( + 1L, + werkstoff.getStats() + .getMass() * 8L)) + .eut(5) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustPure)) + .itemOutputs(werkstoff.get(dust), werkstoff.getOreByProduct(1, dust)) + .outputChances(100_00, 11_11) + .duration( + Math.max( + 1L, + werkstoff.getStats() + .getMass() * 8L)) + .eut(5) + .addTo(centrifugeRecipes); + + if (werkstoff.contains(SubTag.CRYSTALLISABLE)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustPure)) + .itemOutputs(werkstoff.get(gem)) + .outputChances(9000) + .fluidInputs(Materials.Water.getFluid(200L)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(24) + .addTo(autoclaveRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustImpure)) + .itemOutputs(werkstoff.get(gem)) + .outputChances(9000) + .fluidInputs(Materials.Water.getFluid(200L)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(24) + .addTo(autoclaveRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustPure)) + .itemOutputs(werkstoff.get(gem)) + .outputChances(9500) + .fluidInputs(GTModHandler.getDistilledWater(200L)) + .duration(1 * MINUTES + 15 * SECONDS) + .eut(24) + .addTo(autoclaveRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustImpure)) + .itemOutputs(werkstoff.get(gem)) + .outputChances(9500) + .fluidInputs(GTModHandler.getDistilledWater(200L)) + .duration(1 * MINUTES + 15 * SECONDS) + .eut(24) + .addTo(autoclaveRecipes); + + } + if (werkstoff.contains(SubTag.WASHING_MERCURY)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(crushed)) + .itemOutputs( + werkstoff.get(crushedPurified), + werkstoff.getOreByProduct(1, dust), + GTOreDictUnificator.get(dust, Materials.Stone, 1L)) + .outputChances(10000, 7000, 4000) + .fluidInputs(Materials.Mercury.getFluid(1000L)) + .duration(40 * SECONDS) + .eut(8) + .addTo(chemicalBathRecipes); + + } + if (werkstoff.contains(SubTag.WASHING_SODIUMPERSULFATE)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(crushed)) + .itemOutputs( + werkstoff.get(crushedPurified), + werkstoff.getOreByProduct(1, dust), + GTOreDictUnificator.get(dust, Materials.Stone, 1L)) + .outputChances(10000, 7000, 4000) + .fluidInputs(Materials.SodiumPersulfate.getFluid(100L)) + .duration(40 * SECONDS) + .eut(8) + .addTo(chemicalBathRecipes); + + } + if (werkstoff.contains(SubTag.ELECTROMAGNETIC_SEPERATION_GOLD)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustPure)) + .itemOutputs( + werkstoff.get(dust), + GTOreDictUnificator.get(dustSmall, Materials.Gold, 1L), + GTOreDictUnificator.get(nugget, Materials.Gold, 1L)) + .outputChances(10000, 4000, 2000) + .duration(20 * SECONDS) + .eut(24) + .addTo(electroMagneticSeparatorRecipes); + + } else if (werkstoff.contains(SubTag.ELECTROMAGNETIC_SEPERATION_IRON)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustPure)) + .itemOutputs( + werkstoff.get(dust), + GTOreDictUnificator.get(dustSmall, Materials.Iron, 1L), + GTOreDictUnificator.get(nugget, Materials.Iron, 1L)) + .outputChances(10000, 4000, 2000) + .duration(20 * SECONDS) + .eut(24) + .addTo(electroMagneticSeparatorRecipes); + + } else if (werkstoff.contains(SubTag.ELECTROMAGNETIC_SEPERATION_NEODYMIUM)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustPure)) + .itemOutputs( + werkstoff.get(dust), + GTOreDictUnificator.get(dustSmall, Materials.Neodymium, 1L), + GTOreDictUnificator.get(nugget, Materials.Neodymium, 1L)) + .outputChances(10000, 4000, 2000) + .duration(20 * SECONDS) + .eut(24) + .addTo(electroMagneticSeparatorRecipes); + + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/DustLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/DustLoader.java new file mode 100644 index 0000000000..53da59aceb --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/DustLoader.java @@ -0,0 +1,528 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.OrePrefixes.block; +import static gregtech.api.enums.OrePrefixes.cell; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.dustSmall; +import static gregtech.api.enums.OrePrefixes.dustTiny; +import static gregtech.api.enums.OrePrefixes.gem; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.ingotHot; +import static gregtech.api.enums.OrePrefixes.nugget; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.packagerRecipes; +import static gregtech.api.recipe.RecipeMaps.primitiveBlastRecipes; +import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.ADDITIVE_AMOUNT; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import bartworks.util.Pair; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TextureSet; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.ISubTagContainer; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeConstants; +import gregtech.api.util.GTUtility; + +public class DustLoader implements IWerkstoffRunnable { + + @Override + @SuppressWarnings("unchecked") + public void run(Werkstoff werkstoff) { + if (werkstoff.hasItemType(dust)) { + List flOutputs = new ArrayList<>(); + List stOutputs = new ArrayList<>(); + HashMap> tracker = new HashMap<>(); + int cells = 0; + + if (werkstoff.getGenerationFeatures() + .hasMixerRecipes() + || werkstoff.getStats() + .isElektrolysis() + || werkstoff.getStats() + .isCentrifuge() + || werkstoff.getGenerationFeatures() + .hasChemicalRecipes()) { + for (Pair container : werkstoff.getContents() + .getValue() + .toArray(new Pair[0])) { + final ISubTagContainer key = container.getKey(); + final int value = container.getValue(); + if (key instanceof Materials materialKey) { + if ((materialKey.getGas(0) != null || materialKey.getFluid(0) != null + || materialKey.mIconSet == TextureSet.SET_FLUID) && materialKey.getDust(0) == null) { + FluidStack tmpFl = materialKey.getGas(1000L * value); + if (tmpFl == null || tmpFl.getFluid() == null) { + tmpFl = materialKey.getFluid(1000L * value); + } + flOutputs.add(tmpFl); + if (flOutputs.size() > 1) { + if (!tracker.containsKey(key)) { + stOutputs.add(materialKey.getCells(value)); + tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); + } else { + stOutputs.add( + materialKey.getCells( + tracker.get(key) + .getKey() + value)); + stOutputs.remove( + tracker.get(key) + .getValue() + 1); + } + cells += value; + } + } else { + if (materialKey.getDust(value) == null) { + if (materialKey.getCells(value) == null + || materialKey.getMolten(0) == null && materialKey.getSolid(0) == null) continue; + FluidStack tmpFl = materialKey.getMolten(1000L * value); + if (tmpFl == null || tmpFl.getFluid() == null) { + tmpFl = materialKey.getSolid(1000L * value); + } + flOutputs.add(tmpFl); + if (flOutputs.size() > 1) { + if (!tracker.containsKey(key)) { + stOutputs.add(materialKey.getCells(value)); + tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); + } else { + stOutputs.add( + materialKey.getCells( + tracker.get(key) + .getKey() + value)); + stOutputs.remove( + tracker.get(key) + .getValue() + 1); + } + cells += value; + } + } + if (!tracker.containsKey(key)) { + stOutputs.add(materialKey.getDust(value)); + tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); + } else { + stOutputs.add( + materialKey.getDust( + tracker.get(key) + .getKey() + value)); + stOutputs.remove( + tracker.get(key) + .getValue() + 1); + } + } + } else if (key instanceof Werkstoff werkstoffKey) { + if (werkstoffKey.getStats() + .isGas() || werkstoffKey.hasItemType(cell)) { + FluidStack tmpFl = werkstoffKey.getFluidOrGas(1000 * value); + if (tmpFl == null || tmpFl.getFluid() == null) { + tmpFl = werkstoffKey.getFluidOrGas(1000 * value); + } + flOutputs.add(tmpFl); + if (flOutputs.size() > 1) { + if (!tracker.containsKey(key)) { + stOutputs.add(werkstoffKey.get(cell, value)); + tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); + } else { + stOutputs.add( + werkstoffKey.get( + cell, + tracker.get(key) + .getKey() + value)); + stOutputs.remove( + tracker.get(key) + .getValue() + 1); + } + cells += value; + } + } else { + if (!werkstoffKey.hasItemType(dust)) continue; + if (!tracker.containsKey(key)) { + stOutputs.add(werkstoffKey.get(dust, value)); + tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); + } else { + stOutputs.add( + werkstoffKey.get( + dust, + tracker.get(key) + .getKey() + value)); + stOutputs.remove( + tracker.get(key) + .getValue() + 1); + } + } + } + } + ItemStack input = werkstoff.get(dust); + input.stackSize = werkstoff.getContents() + .getKey(); + if (werkstoff.getStats() + .isElektrolysis()) { + GTRecipe tRecipe = new GTRecipe( + true, + new ItemStack[] { input, cells > 0 ? Materials.Empty.getCells(cells) : null }, + stOutputs.toArray(new ItemStack[0]), + null, + null, + new FluidStack[] { null }, + new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, + (int) Math.max( + 1L, + Math.abs( + werkstoff.getStats() + .getProtons() + / werkstoff.getContents() + .getValue() + .size())), + Math.min( + 4, + werkstoff.getContents() + .getValue() + .size()) + * 30, + 0); + RecipeMaps.electrolyzerRecipes.add(tRecipe); + RecipeMaps.electrolyzerNonCellRecipes.add(tRecipe); + } + if (werkstoff.getStats() + .isCentrifuge()) { + RecipeMaps.centrifugeRecipes.add( + new GTRecipe( + true, + new ItemStack[] { input, cells > 0 ? Materials.Empty.getCells(cells) : null }, + stOutputs.toArray(new ItemStack[0]), + null, + null, + new FluidStack[] { null }, + new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, + (int) Math.max( + 1L, + Math.abs( + werkstoff.getStats() + .getMass() + / werkstoff.getContents() + .getValue() + .size())), + Math.min( + 4, + werkstoff.getContents() + .getValue() + .size()) + * 5, + 0)); + GTRecipe tRecipe = new GTRecipe( + false, + stOutputs.toArray(new ItemStack[0]), + new ItemStack[] { input }, + null, + null, + new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, + null, + (int) Math.max( + 1L, + Math.abs( + werkstoff.getStats() + .getProtons() + / werkstoff.getContents() + .getValue() + .size())), + Math.min( + 4, + werkstoff.getContents() + .getValue() + .size()) + * 30, + 0); + RecipeMaps.centrifugeNonCellRecipes.add(tRecipe); + } + if (werkstoff.getGenerationFeatures() + .hasChemicalRecipes()) { + if (cells > 0) stOutputs.add(Materials.Empty.getCells(cells)); + GTValues.RA.stdBuilder() + .itemInputs(stOutputs.toArray(new ItemStack[0])) + .itemOutputs(input) + .fluidInputs(flOutputs.toArray(new FluidStack[0])) + .duration( + (int) Math.max( + 1L, + Math.abs( + werkstoff.getStats() + .getProtons() + / werkstoff.getContents() + .getValue() + .size()))) + .eut( + Math.min( + 4, + werkstoff.getContents() + .getValue() + .size()) + * 30) + .addTo(GTRecipeConstants.UniversalChemical); + } + if (werkstoff.getGenerationFeatures() + .hasMixerRecipes()) { + if (cells > 0) stOutputs.add(Materials.Empty.getCells(cells)); + short circuitID = werkstoff.getMixCircuit(); + ItemStack circuit = circuitID == -1 ? null : GTUtility.getIntegratedCircuit(circuitID); + if (circuit != null) stOutputs.add(circuit); + RecipeMaps.mixerRecipes.add( + new GTRecipe( + true, + stOutputs.toArray(new ItemStack[0]), + new ItemStack[] { input }, + null, + null, + new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, + null, + (int) Math.max( + 1L, + Math.abs( + werkstoff.getStats() + .getMass() + / werkstoff.getContents() + .getValue() + .size())), + Math.min( + 4, + werkstoff.getContents() + .getValue() + .size()) + * 5, + 0)); + GTRecipe tRecipe = new GTRecipe( + false, + stOutputs.toArray(new ItemStack[0]), + new ItemStack[] { input }, + null, + null, + new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, + null, + (int) Math.max( + 1L, + Math.abs( + werkstoff.getStats() + .getProtons() + / werkstoff.getContents() + .getValue() + .size())), + Math.min( + 4, + werkstoff.getContents() + .getValue() + .size()) + * 30, + 0); + RecipeMaps.mixerNonCellRecipes.add(tRecipe); + } + } + + GTModHandler.addCraftingRecipe( + werkstoff.get(dust), + new Object[] { "TTT", "TTT", "TTT", 'T', werkstoff.get(dustTiny) }); + GTModHandler.addCraftingRecipe( + werkstoff.get(dust), + new Object[] { "TT ", "TT ", 'T', WerkstoffLoader.getCorrespondingItemStack(dustSmall, werkstoff) }); + GTModHandler.addCraftingRecipe( + WerkstoffLoader.getCorrespondingItemStack(dustSmall, werkstoff, 4), + new Object[] { " T ", 'T', werkstoff.get(dust) }); + GTModHandler.addCraftingRecipe( + WerkstoffLoader.getCorrespondingItemStack(dustTiny, werkstoff, 9), + new Object[] { "T ", 'T', werkstoff.get(dust) }); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustTiny, 9), ItemList.Schematic_Dust.get(0L)) + .itemOutputs(werkstoff.get(dust)) + .duration(5 * SECONDS) + .eut(4) + .addTo(packagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustSmall, 4), ItemList.Schematic_Dust.get(0L)) + .itemOutputs(werkstoff.get(dust)) + .duration(5 * SECONDS) + .eut(4) + .addTo(packagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustTiny, 9), ItemList.Schematic_3by3.get(0L)) + .itemOutputs(werkstoff.get(dust)) + .duration(5 * SECONDS) + .eut(4) + .addTo(packagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustSmall, 4), ItemList.Schematic_2by2.get(0L)) + .itemOutputs(werkstoff.get(dust)) + .duration(5 * SECONDS) + .eut(4) + .addTo(packagerRecipes); + + if (werkstoff.hasItemType(ingot) && !werkstoff.getStats() + .isBlastFurnace()) { + GTModHandler.addSmeltingRecipe(werkstoff.get(dust), werkstoff.get(ingot)); + GTModHandler.addSmeltingRecipe(werkstoff.get(dustTiny), werkstoff.get(nugget)); + } else if (werkstoff.hasItemType(ingot) && werkstoff.getStats() + .isBlastFurnace() + && werkstoff.getStats() + .getMeltingPoint() != 0) { + if (werkstoff.contains(WerkstoffLoader.ANAEROBE_SMELTING)) { + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dust), GTUtility.getIntegratedCircuit(11)) + .itemOutputs( + werkstoff.getStats() + .getMeltingPoint() < 1750 ? werkstoff.get(ingot) : werkstoff.get(ingotHot)) + .fluidInputs(Materials.Nitrogen.getGas(1000)) + .duration( + Math.max( + werkstoff.getStats() + .getMass() / 40L, + 1L) + * werkstoff.getStats() + .getMeltingPoint()) + .eut( + werkstoff.getStats() + .getMeltingVoltage()) + .metadata( + COIL_HEAT, + werkstoff.getStats() + .getMeltingPoint()) + .addTo(blastFurnaceRecipes); + + } else if (werkstoff.contains(WerkstoffLoader.NOBLE_GAS_SMELTING)) { + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dust), GTUtility.getIntegratedCircuit(11)) + .itemOutputs( + werkstoff.getStats() + .getMeltingPoint() < 1750 ? werkstoff.get(ingot) : werkstoff.get(ingotHot)) + .fluidInputs(Materials.Argon.getGas(1000)) + .duration( + Math.max( + werkstoff.getStats() + .getMass() / 40L, + 1L) + * werkstoff.getStats() + .getMeltingPoint()) + .eut( + werkstoff.getStats() + .getMeltingVoltage()) + .metadata( + COIL_HEAT, + werkstoff.getStats() + .getMeltingPoint()) + .addTo(blastFurnaceRecipes); + + } else { + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dust), GTUtility.getIntegratedCircuit(1)) + .itemOutputs( + werkstoff.getStats() + .getMeltingPoint() < 1750 ? werkstoff.get(ingot) : werkstoff.get(ingotHot)) + .duration( + Math.max( + werkstoff.getStats() + .getMass() / 40L, + 1L) + * werkstoff.getStats() + .getMeltingPoint()) + .eut( + werkstoff.getStats() + .getMeltingVoltage()) + .metadata( + COIL_HEAT, + werkstoff.getStats() + .getMeltingPoint()) + .addTo(blastFurnaceRecipes); + + if (werkstoff.getStats() + .getMeltingPoint() <= 1000) { + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dust)) + .itemOutputs(werkstoff.get(ingot)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() / 40L, + 1L) * werkstoff.getStats() + .getMeltingPoint()) + .eut(0) + .metadata(ADDITIVE_AMOUNT, 9) + .addTo(primitiveBlastRecipes); + } + } + } + + if (werkstoff.getStats() + .isBlastFurnace() + && werkstoff.getStats() + .getMeltingPoint() > 1750) { + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingotHot)) + .itemOutputs(werkstoff.get(ingot)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 3L, + 1L)) + .eut(TierEU.RECIPE_MV) + .addTo(vacuumFreezerRecipes); + } + + if (werkstoff.hasItemType(ingot)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot)) + .itemOutputs(werkstoff.get(dust)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(nugget)) + .itemOutputs(werkstoff.get(dustTiny)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + } + if (werkstoff.hasItemType(ingot) || werkstoff.hasItemType(gem)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(block)) + .itemOutputs(werkstoff.get(dust, 9)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + } + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/GemLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/GemLoader.java new file mode 100644 index 0000000000..cc21110a14 --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/GemLoader.java @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.OrePrefixes.block; +import static gregtech.api.enums.OrePrefixes.crushedPurified; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.dustSmall; +import static gregtech.api.enums.OrePrefixes.dustTiny; +import static gregtech.api.enums.OrePrefixes.gem; +import static gregtech.api.enums.OrePrefixes.gemChipped; +import static gregtech.api.enums.OrePrefixes.gemExquisite; +import static gregtech.api.enums.OrePrefixes.gemFlawed; +import static gregtech.api.enums.OrePrefixes.gemFlawless; +import static gregtech.api.enums.OrePrefixes.lens; +import static gregtech.api.enums.OrePrefixes.ore; +import static gregtech.api.enums.OrePrefixes.plate; +import static gregtech.api.recipe.RecipeMaps.compressorRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.implosionRecipes; +import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; +import static gregtech.api.recipe.RecipeMaps.latheRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.sifterRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.ADDITIVE_AMOUNT; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import bartworks.util.BWColorUtil; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.ITexture; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.common.covers.CoverLens; + +public class GemLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (werkstoff.hasItemType(gem)) { + if (werkstoff.getGenerationFeatures() + .hasSifterRecipes() || werkstoff.hasItemType(ore) && werkstoff.hasItemType(dust)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gem, 9)) + .itemOutputs(werkstoff.get(block)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(block)) + .itemOutputs(werkstoff.get(gem, 9)) + .duration(5 * SECONDS) + .eut(24) + .addTo(hammerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(crushedPurified)) + .itemOutputs( + werkstoff.get(gemExquisite), + werkstoff.get(gemFlawless), + werkstoff.get(gem), + werkstoff.get(gemFlawed), + werkstoff.get(gemChipped), + werkstoff.get(dust)) + .outputChances(200, 1000, 2500, 2000, 4000, 5000) + .duration(40 * SECONDS) + .eut(16) + .addTo(sifterRecipes); + + } + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemExquisite)) + .itemOutputs(werkstoff.get(dust, 4)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemFlawless)) + .itemOutputs(werkstoff.get(dust, 2)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gem)) + .itemOutputs(werkstoff.get(dust)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemFlawed)) + .itemOutputs(werkstoff.get(dustSmall, 2)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemChipped)) + .itemOutputs(werkstoff.get(dustSmall)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GTModHandler.addCraftingRecipe( + werkstoff.get(gemFlawless, 2), + 0, + new Object[] { "h ", "W ", 'W', werkstoff.get(gemExquisite) }); + GTModHandler.addCraftingRecipe( + werkstoff.get(gem, 2), + 0, + new Object[] { "h ", "W ", 'W', werkstoff.get(gemFlawless) }); + GTModHandler.addCraftingRecipe( + werkstoff.get(gemFlawed, 2), + 0, + new Object[] { "h ", "W ", 'W', werkstoff.get(gem) }); + GTModHandler.addCraftingRecipe( + werkstoff.get(gemChipped, 2), + 0, + new Object[] { "h ", "W ", 'W', werkstoff.get(gemFlawed) }); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemExquisite)) + .itemOutputs(werkstoff.get(gemFlawless, 2)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(16) + .addTo(hammerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemFlawless)) + .itemOutputs(werkstoff.get(gem, 2)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(16) + .addTo(hammerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gem)) + .itemOutputs(werkstoff.get(gemFlawed, 2)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(16) + .addTo(hammerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemFlawed)) + .itemOutputs(werkstoff.get(gemChipped, 2)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(16) + .addTo(hammerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemChipped)) + .itemOutputs(werkstoff.get(dustTiny)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(16) + .addTo(hammerRecipes); + + if (!werkstoff.contains(WerkstoffLoader.NO_BLAST)) { + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemFlawless, 3)) + .itemOutputs(werkstoff.get(gemExquisite), GTOreDictUnificator.get(dustTiny, Materials.DarkAsh, 2)) + .duration(20 * TICKS) + .eut(TierEU.RECIPE_LV) + .metadata(ADDITIVE_AMOUNT, 8) + .addTo(implosionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gem, 3)) + .itemOutputs(werkstoff.get(gemFlawless), GTOreDictUnificator.get(dustTiny, Materials.DarkAsh, 2)) + .duration(20 * TICKS) + .eut(TierEU.RECIPE_LV) + .metadata(ADDITIVE_AMOUNT, 8) + .addTo(implosionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemFlawed, 3)) + .itemOutputs(werkstoff.get(gem), GTOreDictUnificator.get(dustTiny, Materials.DarkAsh, 2)) + .duration(20 * TICKS) + .eut(TierEU.RECIPE_LV) + .metadata(ADDITIVE_AMOUNT, 8) + .addTo(implosionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemChipped, 3)) + .itemOutputs(werkstoff.get(gemFlawed), GTOreDictUnificator.get(dustTiny, Materials.DarkAsh, 2)) + .duration(20 * TICKS) + .eut(TierEU.RECIPE_LV) + .metadata(ADDITIVE_AMOUNT, 8) + .addTo(implosionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dust, 4)) + .itemOutputs(werkstoff.get(gem, 3), GTOreDictUnificator.get(dustTiny, Materials.DarkAsh, 8)) + .duration(20 * TICKS) + .eut(TierEU.RECIPE_LV) + .metadata(ADDITIVE_AMOUNT, 24) + .addTo(implosionRecipes); + } + + if (werkstoff.hasItemType(plate)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(plate)) + .itemOutputs(werkstoff.get(lens), werkstoff.get(dustSmall)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(latheRecipes); + + } + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemExquisite)) + .itemOutputs(werkstoff.get(lens), werkstoff.get(dust, 2)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(latheRecipes); + + final ITexture texture = TextureFactory.of( + Textures.BlockIcons.MACHINE_CASINGS[2][0], + TextureFactory.of(Textures.BlockIcons.OVERLAY_LENS, werkstoff.getRGBA(), false)); + GregTechAPI.registerCover( + werkstoff.get(lens), + texture, + new CoverLens(BWColorUtil.getDyeFromColor(werkstoff.getRGBA()).mIndex, texture)); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(lens)) + .itemOutputs(werkstoff.get(dustSmall, 3)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + for (ItemStack is : OreDictionary + .getOres("craftingLens" + BWColorUtil.getDyeFromColor(werkstoff.getRGBA()).mName.replace(" ", ""))) { + is.stackSize = 0; + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemChipped, 3), is) + .itemOutputs(werkstoff.get(gemFlawed, 1)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(laserEngraverRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemFlawed, 3), is) + .itemOutputs(werkstoff.get(gem, 1)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(laserEngraverRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gem, 3), is) + .itemOutputs(werkstoff.get(gemFlawless, 1)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(laserEngraverRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gemFlawless, 3), is) + .itemOutputs(werkstoff.get(gemExquisite, 1)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(laserEngraverRecipes); + + } + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MetalLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MetalLoader.java new file mode 100644 index 0000000000..53c25b4ab0 --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MetalLoader.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.OrePrefixes.block; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.recipe.RecipeMaps.compressorRecipes; +import static gregtech.api.recipe.RecipeMaps.extruderRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.recipe.RecipeCategories; +import gregtech.api.recipe.RecipeMaps; + +public class MetalLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (werkstoff.hasItemType(ingot)) { + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot, 9)) + .itemOutputs(werkstoff.get(block)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot, 9), ItemList.Shape_Extruder_Block.get(0)) + .itemOutputs(werkstoff.get(block)) + .duration( + (int) werkstoff.getStats() + .getMass()) + .eut( + 8 * werkstoff.getStats() + .getMeltingPoint() >= 2800 ? 60 : 15) + .addTo(extruderRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot, 9), ItemList.Shape_Mold_Block.get(0L)) + .itemOutputs(werkstoff.get(block)) + .duration( + (int) (werkstoff.getStats() + .getMass() / 2)) + .eut( + 4 * werkstoff.getStats() + .getMeltingPoint() >= 2800 ? 60 : 15) + .recipeCategory(RecipeCategories.alloySmelterMolding) + .addTo(RecipeMaps.alloySmelterRecipes); + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MoltenCellLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MoltenCellLoader.java new file mode 100644 index 0000000000..8d639574cb --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MoltenCellLoader.java @@ -0,0 +1,376 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.enums.OrePrefixes.block; +import static gregtech.api.enums.OrePrefixes.bolt; +import static gregtech.api.enums.OrePrefixes.capsuleMolten; +import static gregtech.api.enums.OrePrefixes.cellMolten; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.dustSmall; +import static gregtech.api.enums.OrePrefixes.dustTiny; +import static gregtech.api.enums.OrePrefixes.gearGt; +import static gregtech.api.enums.OrePrefixes.gearGtSmall; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.nugget; +import static gregtech.api.enums.OrePrefixes.plate; +import static gregtech.api.enums.OrePrefixes.plateDouble; +import static gregtech.api.enums.OrePrefixes.ring; +import static gregtech.api.enums.OrePrefixes.rotor; +import static gregtech.api.enums.OrePrefixes.screw; +import static gregtech.api.enums.OrePrefixes.stick; +import static gregtech.api.enums.OrePrefixes.stickLong; +import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import java.util.Objects; + +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.recipe.RecipeCategories; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +public class MoltenCellLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (!werkstoff.hasItemType(cellMolten)) { + return; + } + + if (!werkstoff.hasItemType(ingot)) { + if (!werkstoff.hasItemType(dust)) { + return; + } + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dust)) + .fluidOutputs(werkstoff.getMolten(144)) + .duration(15 * SECONDS) + .eut(2) + .recipeCategory(RecipeCategories.fluidExtractorRecycling) + .addTo(fluidExtractionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustSmall)) + .fluidOutputs(werkstoff.getMolten(36)) + .duration(15 * SECONDS) + .eut(2) + .recipeCategory(RecipeCategories.fluidExtractorRecycling) + .addTo(fluidExtractionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(dustTiny)) + .fluidOutputs(werkstoff.getMolten(16)) + .duration(15 * SECONDS) + .eut(2) + .recipeCategory(RecipeCategories.fluidExtractorRecycling) + .addTo(fluidExtractionRecipes); + + } else { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot)) + .fluidOutputs(werkstoff.getMolten(144)) + .duration(15 * SECONDS) + .eut(2) + .recipeCategory(RecipeCategories.fluidExtractorRecycling) + .addTo(fluidExtractionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(nugget)) + .fluidOutputs(werkstoff.getMolten(16)) + .duration(15 * SECONDS) + .eut(2) + .recipeCategory(RecipeCategories.fluidExtractorRecycling) + .addTo(fluidExtractionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Ingot.get(0)) + .itemOutputs(werkstoff.get(ingot)) + .fluidInputs(werkstoff.getMolten(144)) + .duration( + (int) werkstoff.getStats() + .getMass()) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Nugget.get(0)) + .itemOutputs(werkstoff.get(nugget)) + .fluidInputs(werkstoff.getMolten(16)) + .duration( + (int) ((double) werkstoff.getStats() + .getMass() / 9D)) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Block.get(0)) + .itemOutputs(werkstoff.get(block)) + .fluidInputs(werkstoff.getMolten(1296)) + .duration( + (int) werkstoff.getStats() + .getMass() * 9) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + if (!werkstoff.hasItemType(plate)) { + return; + } + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(stickLong)) + .fluidOutputs(werkstoff.getMolten(144)) + .duration(15 * SECONDS) + .eut(2) + .recipeCategory(RecipeCategories.fluidExtractorRecycling) + .addTo(fluidExtractionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(plate)) + .fluidOutputs(werkstoff.getMolten(144)) + .duration(15 * SECONDS) + .eut(2) + .recipeCategory(RecipeCategories.fluidExtractorRecycling) + .addTo(fluidExtractionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(stick)) + .fluidOutputs(werkstoff.getMolten(72)) + .duration(15 * SECONDS) + .eut(2) + .recipeCategory(RecipeCategories.fluidExtractorRecycling) + .addTo(fluidExtractionRecipes); + } + + if (werkstoff.getGenerationFeatures() + .hasMetalCraftingSolidifierRecipes()) { + + if (!werkstoff.hasItemType(plate)) { + return; + } + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Rod_Long.get(0)) + .itemOutputs(werkstoff.get(stickLong)) + .fluidInputs(werkstoff.getMolten(144)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass(), + 1L)) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Rod.get(0)) + .itemOutputs(werkstoff.get(stick)) + .fluidInputs(werkstoff.getMolten(72)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() / 2, + 1L)) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Plate.get(0)) + .itemOutputs(werkstoff.get(plate)) + .fluidInputs(werkstoff.getMolten(144)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass(), + 1L)) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + } + + if (werkstoff.getGenerationFeatures() + .hasMetaSolidifierRecipes()) { + if (!werkstoff.hasItemType(screw)) { + return; + } + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Screw.get(0)) + .itemOutputs(werkstoff.get(screw)) + .fluidInputs(werkstoff.getMolten(18)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() / 8, + 1L)) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Gear.get(0)) + .itemOutputs(werkstoff.get(gearGt)) + .fluidInputs(werkstoff.getMolten(576)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() / 4, + 1L)) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Gear_Small.get(0)) + .itemOutputs(werkstoff.get(gearGtSmall)) + .fluidInputs(werkstoff.getMolten(144)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass(), + 1L)) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Bolt.get(0)) + .itemOutputs(werkstoff.get(bolt)) + .fluidInputs(werkstoff.getMolten(18)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() / 8, + 1L)) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Ring.get(0)) + .itemOutputs(werkstoff.get(ring)) + .fluidInputs(werkstoff.getMolten(36)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() / 4, + 1L)) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + // No Spring Molds + + if (WerkstoffLoader.rotorMold == null) { + return; + } + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Rotor.get(0)) + .itemOutputs(werkstoff.get(rotor)) + .fluidInputs(werkstoff.getMolten(612)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 4.25, + 1L)) + .eut( + werkstoff.getStats() + .getMass() > 128 ? 64 : 30) + .addTo(fluidSolidifierRecipes); + + } + + if (werkstoff.getGenerationFeatures() + .hasMultipleMetalSolidifierRecipes() && !werkstoff.hasItemType(plateDouble)) { + // No multiple plate molds + return; + } + + // Tank "Recipe" + final FluidContainerRegistry.FluidContainerData data = new FluidContainerRegistry.FluidContainerData( + new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(werkstoff)), 144), + werkstoff.get(cellMolten), + Materials.Empty.getCells(1)); + FluidContainerRegistry + .registerFluidContainer(werkstoff.getMolten(144), werkstoff.get(cellMolten), Materials.Empty.getCells(1)); + GTUtility.addFluidContainerData(data); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(1)) + .itemOutputs(werkstoff.get(cellMolten)) + .fluidInputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(werkstoff)), 144)) + .duration(2 * TICKS) + .eut(2) + .addTo(fluidCannerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(cellMolten)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidOutputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(werkstoff)), 144)) + .duration(2 * TICKS) + .eut(2) + .addTo(fluidCannerRecipes); + + if (!Forestry.isModLoaded()) return; + + final FluidContainerRegistry.FluidContainerData emptyData = new FluidContainerRegistry.FluidContainerData( + new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(werkstoff)), 144), + werkstoff.get(capsuleMolten), + GTModHandler.getModItem(Forestry.ID, "refractoryEmpty", 1)); + FluidContainerRegistry.registerFluidContainer( + werkstoff.getMolten(144), + werkstoff.get(capsuleMolten), + GTModHandler.getModItem(Forestry.ID, "refractoryEmpty", 1)); + GTUtility.addFluidContainerData(emptyData); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(capsuleMolten)) + .fluidOutputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(werkstoff)), 144)) + .duration(2 * TICKS) + .eut(2) + .addTo(fluidCannerRecipes); + + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MultipleMetalLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MultipleMetalLoader.java new file mode 100644 index 0000000000..25e49b0666 --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/MultipleMetalLoader.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.plateDense; +import static gregtech.api.enums.OrePrefixes.plateDouble; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import net.minecraft.item.ItemStack; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; + +public class MultipleMetalLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (werkstoff.hasItemType(plateDense)) { + RecipeMaps.benderRecipes.add( + new GTRecipe( + true, + new ItemStack[] { werkstoff.get(ingot, 2), GTUtility.getIntegratedCircuit(2) }, + new ItemStack[] { werkstoff.get(plateDouble) }, + null, + null, + null, + null, + (int) Math.max( + werkstoff.getStats() + .getMass() * 2, + 1L), + 60, + 0)); + GregTechAPI.registerCover( + werkstoff.get(plateDouble), + TextureFactory.of(werkstoff.getTexSet().mTextures[72], werkstoff.getRGBA(), false), + null); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(plateDouble)) + .itemOutputs(werkstoff.get(dust, 2)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/OreLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/OreLoader.java new file mode 100644 index 0000000000..cd5effd0f0 --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/OreLoader.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.enums.OrePrefixes.crushed; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.gem; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.ore; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SubTag; +import gregtech.api.util.GTModHandler; + +public class OreLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (werkstoff.hasItemType(ore) && werkstoff.hasItemType(ingot) + && !werkstoff.getStats() + .isBlastFurnace()) + GTModHandler + .addSmeltingRecipe(WerkstoffLoader.getCorrespondingItemStack(ore, werkstoff), werkstoff.get(ingot)); + + if (werkstoff.hasItemType(ore)) { + + RA.stdBuilder() + .itemInputs(werkstoff.get(ore)) + .itemOutputs(werkstoff.hasItemType(gem) ? werkstoff.get(gem) : werkstoff.get(crushed)) + .duration(16 * TICKS) + .eut(10) + .addTo(hammerRecipes); + + RA.stdBuilder() + .itemInputs(werkstoff.get(ore)) + .itemOutputs( + werkstoff.get(crushed, 2), + werkstoff.contains(SubTag.CRYSTAL) ? werkstoff.get(gem) : werkstoff.getOreByProduct(0, dust), + Materials.Stone.getDust(1)) + .outputChances(100_00, 10_00, 50_00) + .eut(2) + .duration(20 * SECONDS) + .addTo(maceratorRecipes); + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/RawOreLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/RawOreLoader.java new file mode 100644 index 0000000000..8c9c3c1f5f --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/RawOreLoader.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.enums.OrePrefixes.crushed; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.gem; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.rawOre; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SubTag; +import gregtech.api.util.GTModHandler; + +public class RawOreLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (werkstoff.hasItemType(rawOre) && werkstoff.hasItemType(ingot) + && !werkstoff.getStats() + .isBlastFurnace()) + GTModHandler + .addSmeltingRecipe(WerkstoffLoader.getCorrespondingItemStack(rawOre, werkstoff), werkstoff.get(ingot)); + + if (werkstoff.hasItemType(rawOre)) { + + RA.stdBuilder() + .itemInputs(werkstoff.get(rawOre)) + .itemOutputs(werkstoff.hasItemType(gem) ? werkstoff.get(gem) : werkstoff.get(crushed)) + .duration(16 * TICKS) + .eut(10) + .addTo(hammerRecipes); + + RA.stdBuilder() + .itemInputs(werkstoff.get(rawOre)) + .itemOutputs( + werkstoff.get(crushed, 2), + werkstoff.contains(SubTag.CRYSTAL) ? werkstoff.get(gem) : werkstoff.getOreByProduct(0, dust), + Materials.Stone.getDust(1)) + .outputChances(100_00, werkstoff.getNoOfByProducts() > 0 ? 5_00 : 10_00, 50_00) + .eut(2) + .duration(20 * SECONDS) + .addTo(maceratorRecipes); + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/SimpleMetalLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/SimpleMetalLoader.java new file mode 100644 index 0000000000..1fa51359d9 --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/SimpleMetalLoader.java @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.OrePrefixes.block; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.dustSmall; +import static gregtech.api.enums.OrePrefixes.foil; +import static gregtech.api.enums.OrePrefixes.gem; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.plate; +import static gregtech.api.enums.OrePrefixes.stick; +import static gregtech.api.enums.OrePrefixes.stickLong; +import static gregtech.api.recipe.RecipeMaps.benderRecipes; +import static gregtech.api.recipe.RecipeMaps.extruderRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.latheRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import net.minecraft.item.ItemStack; + +import bartworks.API.SideReference; +import bartworks.client.textures.PrefixTextureLinker; +import bartworks.system.material.Werkstoff; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.TextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.common.GTProxy; + +public class SimpleMetalLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + if (werkstoff.hasItemType(plate)) { + if (werkstoff.hasItemType(gem)) { + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(gem)) + .itemOutputs(werkstoff.get(stick), werkstoff.get(dustSmall, 2)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 5L, + 1L)) + .eut(16) + .addTo(latheRecipes); + + GTModHandler.addCraftingRecipe( + werkstoff.get(stick, 2), + GTProxy.tBits, + new Object[] { "s", "X", 'X', werkstoff.get(stickLong) }); + GTModHandler.addCraftingRecipe( + werkstoff.get(stick), + GTProxy.tBits, + new Object[] { "f ", " X", 'X', werkstoff.get(gem) }); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(stick, 2)) + .itemOutputs(werkstoff.get(stickLong)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass(), + 1L)) + .eut(16) + .addTo(hammerRecipes); + + TextureSet texSet = werkstoff.getTexSet(); + ITexture texture = SideReference.Side.Client ? TextureFactory.of( + texSet.mTextures[PrefixTextureLinker.blockTexMap.getOrDefault(texSet, block.mTextureIndex)], + werkstoff.getRGBA(), + false) : TextureFactory.of(texSet.mTextures[block.mTextureIndex], werkstoff.getRGBA(), false); + GregTechAPI.registerCover(werkstoff.get(plate), texture, null); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(plate)) + .itemOutputs(werkstoff.get(dust)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + return; + } + + GTModHandler.addCraftingRecipe( + werkstoff.get(stick, 2), + GTProxy.tBits, + new Object[] { "s", "X", 'X', werkstoff.get(stickLong) }); + GTModHandler.addCraftingRecipe( + werkstoff.get(stick), + GTProxy.tBits, + new Object[] { "f ", " X", 'X', werkstoff.get(ingot) }); + GTModHandler.addCraftingRecipe( + werkstoff.get(plate), + GTProxy.tBits, + new Object[] { "h", "X", "X", 'X', werkstoff.get(ingot) }); + GTModHandler.addCraftingRecipe( + werkstoff.get(foil, 2), + GTProxy.tBits, + new Object[] { "hX", 'X', werkstoff.get(plate) }); + + benderRecipes.add( + new GTRecipe( + true, + new ItemStack[] { werkstoff.get(ingot), GTUtility.getIntegratedCircuit(1) }, + new ItemStack[] { werkstoff.get(plate) }, + null, + null, + null, + null, + (int) Math.max( + werkstoff.getStats() + .getMass(), + 1L), + 24, + 0)); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot, 3)) + .itemOutputs(werkstoff.get(plate, 2)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass(), + 1L)) + .eut(16) + .addTo(hammerRecipes); + + GregTechAPI.registerCover( + werkstoff.get(plate), + TextureFactory.of(werkstoff.getTexSet().mTextures[71], werkstoff.getRGBA(), false), + null); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot)) + .itemOutputs(werkstoff.get(stick), werkstoff.get(dustSmall, 2)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 5L, + 1L)) + .eut(16) + .addTo(latheRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(plate), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(werkstoff.get(foil, 4)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 1L, + 1L)) + .eut(24) + .addTo(benderRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot), GTUtility.getIntegratedCircuit(10)) + .itemOutputs(werkstoff.get(foil, 4)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 2L, + 1L)) + .eut(24) + .addTo(benderRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(stick, 2)) + .itemOutputs(werkstoff.get(stickLong)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass(), + 1L)) + .eut(16) + .addTo(hammerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot), ItemList.Shape_Extruder_Plate.get(0)) + .itemOutputs(werkstoff.get(plate)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 2L, + 1L)) + .eut(45) + .addTo(extruderRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot), ItemList.Shape_Extruder_Rod.get(0)) + .itemOutputs(werkstoff.get(stick, 2)) + .duration( + (int) Math.max( + werkstoff.getStats() + .getMass() * 2L, + 1L)) + .eut(45) + .addTo(extruderRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot)) + .itemOutputs(werkstoff.get(dust)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(plate)) + .itemOutputs(werkstoff.get(dust)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(stickLong)) + .itemOutputs(werkstoff.get(dust)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(stick)) + .itemOutputs(werkstoff.get(dustSmall, 2)) + .duration(2 * TICKS) + .eut(8) + .addTo(maceratorRecipes); + + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/ToolLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/ToolLoader.java new file mode 100644 index 0000000000..4110ec25eb --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/recipe/ToolLoader.java @@ -0,0 +1,600 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.recipe; + +import static gregtech.api.enums.OrePrefixes.bolt; +import static gregtech.api.enums.OrePrefixes.cellMolten; +import static gregtech.api.enums.OrePrefixes.gearGtSmall; +import static gregtech.api.enums.OrePrefixes.gem; +import static gregtech.api.enums.OrePrefixes.ingot; +import static gregtech.api.enums.OrePrefixes.plate; +import static gregtech.api.enums.OrePrefixes.plateDouble; +import static gregtech.api.enums.OrePrefixes.ring; +import static gregtech.api.enums.OrePrefixes.screw; +import static gregtech.api.enums.OrePrefixes.stick; +import static gregtech.api.enums.OrePrefixes.stickLong; +import static gregtech.api.enums.OrePrefixes.toolHeadHammer; +import static gregtech.api.enums.OrePrefixes.toolHeadSaw; +import static gregtech.api.enums.OrePrefixes.toolHeadWrench; +import static gregtech.api.enums.OrePrefixes.turbineBlade; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.extruderRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.recipe.RecipeMaps.formingPressRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.common.GTProxy; +import gregtech.common.items.IDMetaTool01; +import gregtech.common.items.MetaGeneratedTool01; + +public class ToolLoader implements IWerkstoffRunnable { + + // GTNH-Specific + public static final short SCREWDRIVER_MV = 152; + public static final short SCREWDRIVER_HV = 154; + public static final short SOLDERING_IRON_MV = 162; + public static final short SOLDERING_IRON_HV = 164; + + public void run(Werkstoff werkstoff) { + if (werkstoff.getBridgeMaterial().mDurability == 0) return; + + if (werkstoff.hasItemType(gem)) { + if (!werkstoff.getGenerationFeatures() + .isExtension()) + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.HARDHAMMER.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial().mHandleMaterial, + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "XX ", "XXS", "XX ", 'X', gem.get(werkstoff.getBridgeMaterial()), 'S', + stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(toolHeadSaw, werkstoff.getBridgeMaterial(), 1L), + GTProxy.tBits, + new Object[] { "GGf", 'G', gem.get(werkstoff.getBridgeMaterial()) }); + } + + if (!werkstoff.hasItemType(plate)) return; + + // Disable recipe gen with handle Material for GT Materials + if (!werkstoff.getGenerationFeatures() + .isExtension()) { + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.SCREWDRIVER.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial().mHandleMaterial, + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { " fS", " Sh", "W ", 'S', stick.get(werkstoff.getBridgeMaterial()), 'W', + stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(toolHeadWrench, werkstoff.getBridgeMaterial(), 1L), + GTProxy.tBits, + new Object[] { "hXW", "XRX", "WXd", 'X', plate.get(werkstoff.getBridgeMaterial()), 'S', + plate.get(werkstoff.getBridgeMaterial().mHandleMaterial), 'R', + ring.get(werkstoff.getBridgeMaterial().mHandleMaterial), 'W', + screw.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); + GTModHandler.addShapelessCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.HARDHAMMER.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial().mHandleMaterial, + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { toolHeadHammer.get(werkstoff.getBridgeMaterial()), + stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.FILE.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial().mHandleMaterial, + null), + GTModHandler.RecipeBits.MIRRORED | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "P", "P", "S", 'P', plate.get(werkstoff.getBridgeMaterial()), 'S', + stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); + GTModHandler.addShapelessCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.SAW.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial().mHandleMaterial, + null), + new Object[] { toolHeadSaw.get(werkstoff.getBridgeMaterial()), + stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.SOLDERING_IRON_LV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Rubber, + new long[] { 100000L, 32L, 1L, -1L }), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "LBf", "Sd ", "P ", 'B', bolt.get(werkstoff.getBridgeMaterial()), 'P', + plate.get(Materials.AnyRubber), 'S', stick.get(werkstoff.getBridgeMaterial().mHandleMaterial), 'L', + ItemList.Battery_RE_LV_Lithium.get(1L) }); + + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + SOLDERING_IRON_MV, + 1, + werkstoff.getBridgeMaterial(), + Materials.Rubber, + new long[] { 400000L, 128L, 2L, -1L }), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "LBf", "Sd ", "P ", 'B', bolt.get(werkstoff.getBridgeMaterial()), 'P', + plate.get(Materials.AnyRubber), 'S', stick.get(werkstoff.getBridgeMaterial().mHandleMaterial), 'L', + ItemList.Battery_RE_MV_Lithium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + SOLDERING_IRON_HV, + 1, + werkstoff.getBridgeMaterial(), + Materials.StyreneButadieneRubber, + new long[] { 1600000L, 512L, 3L, -1L }), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "LBf", "Sd ", "P ", 'B', bolt.get(werkstoff.getBridgeMaterial()), 'P', + plate.get(Materials.StyreneButadieneRubber), 'S', + stick.get(werkstoff.getBridgeMaterial().mHandleMaterial), 'L', + ItemList.Battery_RE_HV_Lithium.get(1L) }); + + if (!werkstoff.hasItemType(gem)) { + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.HARDHAMMER.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial().mHandleMaterial, + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "XX ", "XXS", "XX ", 'X', ingot.get(werkstoff.getBridgeMaterial()), 'S', + stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); + } + } + + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.PLUNGER.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial(), + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "xRR", " SR", "S f", 'S', stick.get(werkstoff.getBridgeMaterial()), 'R', + plate.get(Materials.AnyRubber) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.WRENCH.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial(), + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "IhI", "III", " I ", 'I', ingot.get(werkstoff.getBridgeMaterial()) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.CROWBAR.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial(), + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "hDS", "DSD", "SDf", 'S', stick.get(werkstoff.getBridgeMaterial()), 'D', Dyes.dyeBlue }); + + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.WIRECUTTER.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial(), + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PfP", "hPd", "STS", 'S', stick.get(werkstoff.getBridgeMaterial()), 'P', + plate.get(werkstoff.getBridgeMaterial()), 'T', screw.get(werkstoff.getBridgeMaterial()) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.SCOOP.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial(), + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SWS", "SSS", "xSh", 'S', stick.get(werkstoff.getBridgeMaterial()), 'W', + new ItemStack(Blocks.wool, 1, 32767) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.BRANCHCUTTER.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial(), + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PfP", "PdP", "STS", 'S', stick.get(werkstoff.getBridgeMaterial()), 'P', + plate.get(werkstoff.getBridgeMaterial()), 'T', screw.get(werkstoff.getBridgeMaterial()) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.KNIFE.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial(), + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "fPh", " S ", 'S', stick.get(werkstoff.getBridgeMaterial()), 'P', + plate.get(werkstoff.getBridgeMaterial()) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.BUTCHERYKNIFE.ID, + 1, + werkstoff.getBridgeMaterial(), + werkstoff.getBridgeMaterial(), + null), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PPf", "PP ", "Sh ", 'S', stick.get(werkstoff.getBridgeMaterial()), 'P', + plate.get(werkstoff.getBridgeMaterial()) }); + + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.WRENCH_LV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Steel, + new long[] { 100000L, 32L, 1L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), + 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Lithium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.WRENCH_LV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Steel, + new long[] { 75000L, 32L, 1L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), + 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Cadmium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.WRENCH_LV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Steel, + new long[] { 50000L, 32L, 1L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), + 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Sodium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.WRENCH_MV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Aluminium, + new long[] { 400000L, 128L, 2L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', + plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Aluminium), 'B', + ItemList.Battery_RE_MV_Lithium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.WRENCH_MV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Aluminium, + new long[] { 300000L, 128L, 2L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', + plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Aluminium), 'B', + ItemList.Battery_RE_MV_Cadmium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.WRENCH_MV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Aluminium, + new long[] { 200000L, 128L, 2L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', + plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Aluminium), 'B', + ItemList.Battery_RE_MV_Sodium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.WRENCH_HV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.StainlessSteel, + new long[] { 1600000L, 512L, 3L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', + plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', + ItemList.Battery_RE_HV_Lithium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.WRENCH_HV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.StainlessSteel, + new long[] { 1200000L, 512L, 3L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', + plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', + ItemList.Battery_RE_HV_Cadmium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.WRENCH_HV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.StainlessSteel, + new long[] { 800000L, 512L, 3L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', + plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', + ItemList.Battery_RE_HV_Sodium.get(1L) }); + + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.SCREWDRIVER_LV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Steel, + new long[] { 100000L, 32L, 1L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), + 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Lithium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.SCREWDRIVER_LV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Steel, + new long[] { 75000L, 32L, 1L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), + 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Cadmium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.SCREWDRIVER_LV.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Steel, + new long[] { 50000L, 32L, 1L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), + 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Sodium.get(1L) }); + + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(toolHeadHammer, werkstoff.getBridgeMaterial(), 1L), + GTProxy.tBits, + new Object[] { "II ", "IIh", "II ", 'P', plate.get(werkstoff.getBridgeMaterial()), 'I', + ingot.get(werkstoff.getBridgeMaterial()) }); + if (werkstoff.hasItemType(plateDouble) && werkstoff.hasItemType(cellMolten)) { + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(turbineBlade, werkstoff.getBridgeMaterial(), 1L), + GTProxy.tBits, + new Object[] { "fPd", "SPS", " P ", 'P', plateDouble.get(werkstoff.getBridgeMaterial()), 'S', + screw.get(werkstoff.getBridgeMaterial()) }); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(ingot, 6), ItemList.Shape_Extruder_Turbine_Blade.get(0)) + .itemOutputs(werkstoff.get(turbineBlade, 1)) + .duration( + (int) werkstoff.getStats() + .getMass() / 2 * 20) + .eut(TierEU.RECIPE_MV) + .addTo(extruderRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Turbine_Blade.get(0)) + .itemOutputs(werkstoff.get(turbineBlade, 1)) + .fluidInputs(werkstoff.getMolten(864)) + .duration( + (int) werkstoff.getStats() + .getMass() * 20) + .eut(TierEU.RECIPE_MV) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(plateDouble, 3), werkstoff.get(screw, 2)) + .itemOutputs(werkstoff.get(turbineBlade, 1)) + .duration( + (werkstoff.getStats() + .getMass() / 4) * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(formingPressRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(turbineBlade, 4), GTOreDictUnificator.get(stickLong, Materials.Magnalium, 1)) + .itemOutputs( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.TURBINE_SMALL.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Magnalium, + null)) + .duration(8 * SECONDS) + .eut(100) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(turbineBlade, 8), GTOreDictUnificator.get(stickLong, Materials.Titanium, 1)) + .itemOutputs( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.TURBINE.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Titanium, + null)) + .duration(16 * SECONDS) + .eut(400) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + werkstoff.get(turbineBlade, 12), + GTOreDictUnificator.get(stickLong, Materials.TungstenSteel, 1)) + .itemOutputs( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.TURBINE_LARGE.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.TungstenSteel, + null)) + .duration(32 * SECONDS) + .eut(1600) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(werkstoff.get(turbineBlade, 16), GTOreDictUnificator.get(stickLong, Materials.Americium, 1)) + .itemOutputs( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + IDMetaTool01.TURBINE_HUGE.ID, + 1, + werkstoff.getBridgeMaterial(), + Materials.Americium, + null)) + .duration(1 * MINUTES + 4 * SECONDS) + .eut(6400) + .addTo(assemblerRecipes); + } + + if (!werkstoff.hasItemType(gem)) { + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(toolHeadSaw, werkstoff.getBridgeMaterial(), 1L), + GTProxy.tBits, + new Object[] { "PP ", "fh ", 'P', plate.get(werkstoff.getBridgeMaterial()), 'I', + ingot.get(werkstoff.getBridgeMaterial()) }); + } + + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + SCREWDRIVER_MV, + 1, + werkstoff.getBridgeMaterial(), + Materials.Aluminium, + new long[] { 400000L, 128L, 2L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', + plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Titanium), 'B', + ItemList.Battery_RE_MV_Lithium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + SCREWDRIVER_MV, + 1, + werkstoff.getBridgeMaterial(), + Materials.Aluminium, + new long[] { 300000L, 128L, 2L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', + plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Titanium), 'B', + ItemList.Battery_RE_MV_Cadmium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + SCREWDRIVER_MV, + 1, + werkstoff.getBridgeMaterial(), + Materials.Aluminium, + new long[] { 200000L, 128L, 2L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', + plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Titanium), 'B', + ItemList.Battery_RE_MV_Sodium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + SCREWDRIVER_HV, + 1, + werkstoff.getBridgeMaterial(), + Materials.StainlessSteel, + new long[] { 1600000L, 512L, 3L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', + plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', + ItemList.Battery_RE_HV_Lithium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + SCREWDRIVER_HV, + 1, + werkstoff.getBridgeMaterial(), + Materials.StainlessSteel, + new long[] { 1200000L, 512L, 3L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', + plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', + ItemList.Battery_RE_HV_Cadmium.get(1L) }); + GTModHandler.addCraftingRecipe( + MetaGeneratedTool01.INSTANCE.getToolWithStats( + SCREWDRIVER_HV, + 1, + werkstoff.getBridgeMaterial(), + Materials.StainlessSteel, + new long[] { 800000L, 512L, 3L, -1L }), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', + ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', + plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', + ItemList.Battery_RE_HV_Sodium.get(1L) }); + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/registration/AssociationLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/registration/AssociationLoader.java new file mode 100644 index 0000000000..3cf224e777 --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/registration/AssociationLoader.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.registration; + +import net.minecraft.item.ItemStack; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; + +public class AssociationLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + for (OrePrefixes prefixes : OrePrefixes.values()) { + if (!werkstoff.hasItemType(prefixes)) continue; + + Materials werkstoffBridgeMaterial = werkstoff.getBridgeMaterial(); + ItemStack stack = WerkstoffLoader.getCorrespondingItemStackUnsafe(prefixes, werkstoff, 1); + + if (stack != null && stack.getItem() != null) { + GTOreDictUnificator.addAssociation(prefixes, werkstoffBridgeMaterial, stack, false); + GTOreDictUnificator.set(prefixes, werkstoffBridgeMaterial, stack, true, true); + } + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java b/src/main/java/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java new file mode 100644 index 0000000000..2bf712ed7a --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.registration; + +import static gregtech.api.enums.Mods.Thaumcraft; +import static gregtech.api.enums.OrePrefixes.cell; +import static gregtech.api.enums.OrePrefixes.cellMolten; +import static gregtech.api.enums.OrePrefixes.dust; +import static gregtech.api.enums.OrePrefixes.values; + +import java.util.ArrayList; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enchants.EnchantmentRadioactivity; +import gregtech.api.enums.Element; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; + +public class BridgeMaterialsLoader implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + // int aMetaItemSubID, TextureSet aIconSet, float aToolSpeed, int aDurability, int aToolQuality, int aTypes, int + // aR, int aG, int aB, int aA, String aName, String aDefaultLocalName, int aFuelType, int aFuelPower, int + // aMeltingPoint, int aBlastFurnaceTemp, boolean aBlastFurnaceRequired, boolean aTransparent, int aOreValue, int + // aDensityMultiplier, int aDensityDivider, Dyes aColor, String aConfigSection, boolean aCustomOre, String + // aCustomID + Materials werkstoffBridgeMaterial = werkstoff.getBridgeMaterial() != null ? werkstoff.getBridgeMaterial() + : Materials.get(werkstoff.getVarName()) != Materials._NULL ? Materials.get(werkstoff.getVarName()) + : new Materials( + -1, + werkstoff.getTexSet(), + werkstoff.getToolSpeed(), + werkstoff.getDurability(), + werkstoff.getToolQuality(), + 0, + werkstoff.getRGBA()[0], + werkstoff.getRGBA()[1], + werkstoff.getRGBA()[2], + werkstoff.getRGBA()[3], + werkstoff.getVarName(), + werkstoff.getDefaultName(), + 0, + 0, + werkstoff.getStats() + .getMeltingPoint(), + werkstoff.getStats() + .getMeltingPoint(), + werkstoff.getStats() + .isBlastFurnace(), + false, + 0, + 1, + 1, + null); + for (OrePrefixes prefixes : values()) { + if (prefixes != cell || !Werkstoff.Types.ELEMENT.equals(werkstoff.getType())) { + if (prefixes == dust && Werkstoff.Types.ELEMENT.equals(werkstoff.getType()) + && Werkstoff.Types.ELEMENT.equals(werkstoff.getType())) { + boolean ElementSet = false; + for (Element e : Element.values()) { + if (e.toString() + .equals(werkstoff.getToolTip())) { + if (!e.mLinkedMaterials.isEmpty()) break; + werkstoffBridgeMaterial = werkstoff.getBridgeMaterial() != null + ? werkstoff.getBridgeMaterial() + : Materials.get(werkstoff.getVarName()) != Materials._NULL + ? Materials.get(werkstoff.getVarName()) + : new Materials( + -1, + werkstoff.getTexSet(), + werkstoff.getToolSpeed(), + werkstoff.getDurability(), + werkstoff.getToolQuality(), + 0, + werkstoff.getRGBA()[0], + werkstoff.getRGBA()[1], + werkstoff.getRGBA()[2], + werkstoff.getRGBA()[3], + werkstoff.getVarName(), + werkstoff.getDefaultName(), + 0, + 0, + werkstoff.getStats() + .getMeltingPoint(), + werkstoff.getStats() + .getMeltingPoint(), + werkstoff.getStats() + .isBlastFurnace(), + false, + 0, + 1, + 1, + null); + werkstoffBridgeMaterial.mElement = e; + e.mLinkedMaterials = new ArrayList<>(); + e.mLinkedMaterials.add(werkstoffBridgeMaterial); + if (werkstoff.hasItemType(dust)) { + GTOreDictUnificator + .addAssociation(dust, werkstoffBridgeMaterial, werkstoff.get(dust), false); + GTOreDictUnificator.set(dust, werkstoffBridgeMaterial, werkstoff.get(dust), true, true); + } + ElementSet = true; + break; + } + } + if (!ElementSet) { + continue; + } + } + + if (werkstoff.hasItemType(cell)) { + werkstoffBridgeMaterial.setHasCorrespondingFluid(true); + werkstoffBridgeMaterial.setHasCorrespondingGas(true); + werkstoffBridgeMaterial.mFluid = werkstoff.getFluidOrGas(1) + .getFluid(); + werkstoffBridgeMaterial.mGas = werkstoff.getFluidOrGas(1) + .getFluid(); + } + + if (werkstoff.hasItemType(cellMolten)) { + werkstoffBridgeMaterial.mStandardMoltenFluid = werkstoff.getMolten(1) + .getFluid(); + } + werkstoffBridgeMaterial.mName = werkstoff.getVarName(); + werkstoffBridgeMaterial.mDefaultLocalName = werkstoff.getDefaultName(); + werkstoffBridgeMaterial.mChemicalFormula = werkstoff.getToolTip(); + if ("null".equals(werkstoffBridgeMaterial.mLocalizedName)) + // only reload from lang file if not localized already + werkstoffBridgeMaterial.mLocalizedName = GTLanguageManager.addStringLocalization( + "Material." + werkstoffBridgeMaterial.mName.toLowerCase(), + werkstoffBridgeMaterial.mDefaultLocalName); + if (Thaumcraft.isModLoaded()) { + werkstoffBridgeMaterial.mAspects = werkstoff.getGTWrappedTCAspects(); + } + werkstoffBridgeMaterial.mMaterialInto = werkstoffBridgeMaterial; + werkstoffBridgeMaterial.mHandleMaterial = werkstoff.contains(SubTag.BURNING) ? Materials.Blaze + : werkstoff.contains(SubTag.MAGICAL) ? Materials.Thaumium + : werkstoffBridgeMaterial.mDurability > 5120 ? Materials.TungstenSteel + : werkstoffBridgeMaterial.mDurability > 1280 ? Materials.Steel : Materials.Wood; + if (werkstoff.getStats() + .isRadioactive()) { + werkstoffBridgeMaterial.setEnchantmentForArmors( + EnchantmentRadioactivity.INSTANCE, + werkstoff.getStats() + .getEnchantmentlvl()); + werkstoffBridgeMaterial.setEnchantmentForTools( + EnchantmentRadioactivity.INSTANCE, + werkstoff.getStats() + .getEnchantmentlvl()); + } + werkstoff.setBridgeMaterial(werkstoffBridgeMaterial); + } + } + } +} diff --git a/src/main/java/bartworks/system/material/werkstoff_loaders/registration/CasingRegistrator.java b/src/main/java/bartworks/system/material/werkstoff_loaders/registration/CasingRegistrator.java new file mode 100644 index 0000000000..87d89f29af --- /dev/null +++ b/src/main/java/bartworks/system/material/werkstoff_loaders/registration/CasingRegistrator.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.material.werkstoff_loaders.registration; + +import net.minecraft.item.ItemStack; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; + +public class CasingRegistrator implements IWerkstoffRunnable { + + @Override + public void run(Werkstoff werkstoff) { + GTOreDictUnificator.addAssociation( + OrePrefixes.blockCasing, + werkstoff.getBridgeMaterial(), + new ItemStack(WerkstoffLoader.BWBlockCasings, 1, werkstoff.getmID()), + false); + GTOreDictUnificator.addAssociation( + OrePrefixes.blockCasingAdvanced, + werkstoff.getBridgeMaterial(), + new ItemStack(WerkstoffLoader.BWBlockCasingsAdvanced, 1, werkstoff.getmID()), + false); + } +} diff --git a/src/main/java/bartworks/system/oredict/OreDictAdder.java b/src/main/java/bartworks/system/oredict/OreDictAdder.java new file mode 100644 index 0000000000..7c07dbb274 --- /dev/null +++ b/src/main/java/bartworks/system/oredict/OreDictAdder.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.oredict; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.item.ItemStack; + +import bartworks.util.Pair; +import gregtech.api.util.GTOreDictUnificator; + +public class OreDictAdder { + + private static final ConcurrentHashMap toAddMap = new ConcurrentHashMap<>(); + + public static synchronized void addToMap(Pair element) { + OreDictAdder.toAddMap.put(element.getKey(), element.getValue()); + } + + @SafeVarargs + public static synchronized void addToMap(Pair... elements) { + for (Pair p : elements) OreDictAdder.toAddMap.put(p.getKey(), p.getValue()); + } + + public static void addToOreDict() { + for (Map.Entry entry : OreDictAdder.toAddMap.entrySet()) { + GTOreDictUnificator.registerOre(entry.getKey(), entry.getValue()); + } + } +} diff --git a/src/main/java/bartworks/system/oredict/OreDictHandler.java b/src/main/java/bartworks/system/oredict/OreDictHandler.java new file mode 100644 index 0000000000..5faa23f0b2 --- /dev/null +++ b/src/main/java/bartworks/system/oredict/OreDictHandler.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.oredict; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +import bartworks.MainMod; +import bartworks.util.Pair; +import bwcrossmod.BartWorksCrossmod; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; + +public class OreDictHandler { + + private static final HashMap> cache = new HashMap<>(); + private static final HashSet> cacheNonBW = new HashSet<>(); + + public static HashMap> getCache() { + return OreDictHandler.cache; + } + + public static HashSet> getNonBWCache() { + return OreDictHandler.cacheNonBW; + } + + public static void adaptCacheForWorld() { + Set used = new HashSet<>(OreDictHandler.cache.keySet()); + OreDictHandler.cache.clear(); + OreDictHandler.cacheNonBW.clear(); + for (String s : used) { + if (!OreDictionary.getOres(s) + .isEmpty()) { + ItemStack tmpstack = OreDictionary.getOres(s) + .get(0) + .copy(); + Pair p = new Pair<>( + Item.getIdFromItem(tmpstack.getItem()), + (short) tmpstack.getItemDamage()); + OreDictHandler.cache.put(s, p); + for (ItemStack tmp : OreDictionary.getOres(s)) { + Pair p2 = new Pair<>( + Item.getIdFromItem(tmp.getItem()), + (short) tmp.getItemDamage()); + GameRegistry.UniqueIdentifier UI = GameRegistry.findUniqueIdentifierFor(tmp.getItem()); + if (UI == null) UI = GameRegistry.findUniqueIdentifierFor(Block.getBlockFromItem(tmp.getItem())); + if (!MainMod.MOD_ID.equals(UI.modId) && !BartWorksCrossmod.MOD_ID.equals(UI.modId) + && !"BWCore".equals(UI.modId)) { + OreDictHandler.cacheNonBW.add(p2); + } + } + } + } + } + + public static ItemStack getItemStack(String elementName, OrePrefixes prefixes, int amount) { + if (OreDictHandler.cache.get(prefixes + elementName.replace(" ", "")) != null) { + Pair p = OreDictHandler.cache.get(prefixes + elementName.replace(" ", "")); + return new ItemStack(Item.getItemById(p.getKey()), amount, p.getValue()); + } + if (!OreDictionary.getOres(prefixes + elementName.replace(" ", "")) + .isEmpty()) { + ItemStack tmp = GTOreDictUnificator.get( + OreDictionary.getOres(prefixes + elementName.replace(" ", "")) + .get(0) + .copy()) + .copy(); + OreDictHandler.cache.put( + prefixes + elementName.replace(" ", ""), + new Pair<>(Item.getIdFromItem(tmp.getItem()), (short) tmp.getItemDamage())); + tmp.stackSize = amount; + return tmp; + } + return null; + } +} diff --git a/src/main/java/bartworks/system/oregen/BWOreLayer.java b/src/main/java/bartworks/system/oregen/BWOreLayer.java new file mode 100644 index 0000000000..5f9688e68c --- /dev/null +++ b/src/main/java/bartworks/system/oregen/BWOreLayer.java @@ -0,0 +1,273 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.oregen; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; + +import com.google.common.collect.ArrayListMultimap; + +import bartworks.MainMod; +import bartworks.system.material.BWMetaGeneratedOres; +import bartworks.system.material.BWMetaGeneratedSmallOres; +import bartworks.system.material.BWTileEntityMetaGeneratedOre; +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.util.MurmurHash3; +import bartworks.util.Pair; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ISubTagContainer; +import gregtech.api.world.GTWorldgen; +import gregtech.common.blocks.TileEntityOres; + +/** + * Original GT File Stripped and adjusted to work with this mod + */ +public abstract class BWOreLayer extends GTWorldgen { + + public static final List sList = new ArrayList<>(); + public static final ArrayListMultimap NEIMAP = ArrayListMultimap.create(); + private static final boolean logOregenRoss128 = false; + public static int sWeight; + public byte bwOres; + public int mMinY, mWeight, mDensity, mSize, mMaxY, mPrimaryMeta, mSecondaryMeta, mBetweenMeta, mSporadicMeta; + + public abstract Block getDefaultBlockToReplace(); + + public abstract int[] getDefaultDamageToReplace(); + + public abstract String getDimName(); + + public BWOreLayer(String aName, boolean aDefault, int aMinY, int aMaxY, int aWeight, int aDensity, int aSize, + ISubTagContainer top, ISubTagContainer bottom, ISubTagContainer between, ISubTagContainer sprinkled) { + super(aName, BWOreLayer.sList, aDefault); + this.mMinY = (short) aMinY; + this.mMaxY = (short) aMaxY; + this.mWeight = (short) aWeight; + this.mDensity = (short) aDensity; + this.mSize = (short) Math.max(1, aSize); + + if (this.mEnabled) BWOreLayer.sWeight += this.mWeight; + + if (top instanceof Werkstoff) this.bwOres = (byte) (this.bwOres | 0b1000); + if (bottom instanceof Werkstoff) this.bwOres = (byte) (this.bwOres | 0b0100); + if (between instanceof Werkstoff) this.bwOres = (byte) (this.bwOres | 0b0010); + if (sprinkled instanceof Werkstoff) this.bwOres = (byte) (this.bwOres | 0b0001); + + short aPrimary = top instanceof Materials ? (short) ((Materials) top).mMetaItemSubID + : top instanceof Werkstoff ? ((Werkstoff) top).getmID() : 0; + short aSecondary = bottom instanceof Materials ? (short) ((Materials) bottom).mMetaItemSubID + : bottom instanceof Werkstoff ? ((Werkstoff) bottom).getmID() : 0; + short aBetween = between instanceof Materials ? (short) ((Materials) between).mMetaItemSubID + : between instanceof Werkstoff ? ((Werkstoff) between).getmID() : 0; + short aSporadic = sprinkled instanceof Materials ? (short) ((Materials) sprinkled).mMetaItemSubID + : sprinkled instanceof Werkstoff ? ((Werkstoff) sprinkled).getmID() : 0; + this.mPrimaryMeta = aPrimary; + this.mSecondaryMeta = aSecondary; + this.mBetweenMeta = aBetween; + this.mSporadicMeta = aSporadic; + NEIMAP.put((short) this.mPrimaryMeta, this); + NEIMAP.put((short) this.mSecondaryMeta, this); + NEIMAP.put((short) this.mBetweenMeta, this); + NEIMAP.put((short) this.mSporadicMeta, this); + } + + public List getStacks() { + ArrayList ret = new ArrayList<>(); + ret.add( + (this.bwOres & 0b1000) != 0 ? new ItemStack(WerkstoffLoader.BWOres, 1, this.mPrimaryMeta) + : new ItemStack(GregTechAPI.sBlockOres1, 1, this.mPrimaryMeta)); + ret.add( + (this.bwOres & 0b0100) != 0 ? new ItemStack(WerkstoffLoader.BWOres, 1, this.mSecondaryMeta) + : new ItemStack(GregTechAPI.sBlockOres1, 1, this.mSecondaryMeta)); + ret.add( + (this.bwOres & 0b0010) != 0 ? new ItemStack(WerkstoffLoader.BWOres, 1, this.mBetweenMeta) + : new ItemStack(GregTechAPI.sBlockOres1, 1, this.mBetweenMeta)); + ret.add( + (this.bwOres & 0b0001) != 0 ? new ItemStack(WerkstoffLoader.BWOres, 1, this.mSporadicMeta) + : new ItemStack(GregTechAPI.sBlockOres1, 1, this.mSporadicMeta)); + return ret; + } + + public List> getStacksRawData() { + ArrayList> ret = new ArrayList<>(); + ret.add(new Pair<>(this.mPrimaryMeta, (this.bwOres & 0b1000) != 0)); + ret.add(new Pair<>(this.mSecondaryMeta, (this.bwOres & 0b0100) != 0)); + ret.add(new Pair<>(this.mBetweenMeta, (this.bwOres & 0b0010) != 0)); + ret.add(new Pair<>(this.mSporadicMeta, (this.bwOres & 0b0001) != 0)); + return ret; + } + + @Override + public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, + int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { + { + int tMinY = this.mMinY + aRandom.nextInt(this.mMaxY - this.mMinY - 5); + int cX = aChunkX - aRandom.nextInt(this.mSize); + int eX = aChunkX + 16 + aRandom.nextInt(this.mSize); + + boolean wasPlaced = false; + + for (int tX = cX; tX <= eX; ++tX) { + int cZ = aChunkZ - aRandom.nextInt(this.mSize); + int eZ = aChunkZ + 16 + aRandom.nextInt(this.mSize); + + for (int tZ = cZ; tZ <= eZ; ++tZ) { + int i; + if (this.mSecondaryMeta > 0) { + for (i = tMinY - 1; i < tMinY + 2; ++i) { + if (this.shouldPlace(aRandom, cX, eX, tX, cZ, eZ, tZ)) { + wasPlaced = this.setOreBlock(aWorld, tX, i, tZ, this.mSecondaryMeta, false); + } + } + } + + if (this.mBetweenMeta > 0 && this.shouldPlace(aRandom, cX, eX, tX, cZ, eZ, tZ)) { + wasPlaced = this + .setOreBlock(aWorld, tX, tMinY + 2 + aRandom.nextInt(2), tZ, this.mBetweenMeta, false); + } + + if (this.mPrimaryMeta > 0) { + for (i = tMinY + 3; i < tMinY + 6; ++i) { + if (this.shouldPlace(aRandom, cX, eX, tX, cZ, eZ, tZ)) { + wasPlaced = this.setOreBlock(aWorld, tX, i, tZ, this.mPrimaryMeta, false); + } + } + } + + if (this.mSporadicMeta > 0 && this.shouldPlace(aRandom, cX, eX, tX, cZ, eZ, tZ)) { + wasPlaced = this + .setOreBlock(aWorld, tX, tMinY - 1 + aRandom.nextInt(7), tZ, this.mSporadicMeta, false); + } + } + } + + if (BWOreLayer.logOregenRoss128) { + MainMod.LOGGER.info("Generated Orevein: " + this.mWorldGenName + " " + aChunkX + " " + aChunkZ); + } + + return wasPlaced; + } + } + + private boolean shouldPlace(Random aRandom, int cX, int eX, int tX, int cZ, int eZ, int tZ) { + if (aRandom.nextInt( + Math.max(1, Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ)) / this.mDensity)) == 0 + || aRandom.nextInt( + Math.max(1, Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX)) / this.mDensity)) == 0) + return true; + return false; + } + + public boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData, boolean isSmallOre) { + // security stuff to prevent crashes with 2 TileEntites on the same Spot + TileEntity te = aWorld.getTileEntity(aX, aY, aZ); + if (te instanceof BWTileEntityMetaGeneratedOre || te instanceof TileEntityOres) return true; + + if (aMetaData == this.mSporadicMeta && (this.bwOres & 0b0001) != 0 + || aMetaData == this.mBetweenMeta && (this.bwOres & 0b0010) != 0 + || aMetaData == this.mPrimaryMeta && (this.bwOres & 0b1000) != 0 + || aMetaData == this.mSecondaryMeta && (this.bwOres & 0b0100) != 0) { + return isSmallOre + ? BWMetaGeneratedSmallOres.setOreBlock( + aWorld, + aX, + aY, + aZ, + aMetaData, + false, + this.getDefaultBlockToReplace(), + this.getDefaultDamageToReplace()) + : BWMetaGeneratedOres.setOreBlock( + aWorld, + aX, + aY, + aZ, + aMetaData, + false, + this.getDefaultBlockToReplace(), + this.getDefaultDamageToReplace()); + } + + return this.setGTOreBlockSpace(aWorld, aX, aY, aZ, aMetaData, this.getDefaultBlockToReplace()); + } + + public boolean setGTOreBlockSpace(World aWorld, int aX, int aY, int aZ, int aMetaData, Block block) { + if (TileEntityOres.setOreBlock(aWorld, aX, aY, aZ, aMetaData, false, false)) return true; + aY = Math.min(aWorld.getActualHeight(), Math.max(aY, 1)); + Block tBlock = aWorld.getBlock(aX, aY, aZ); + Block tOreBlock = GregTechAPI.sBlockOres1; + if (aMetaData < 0 || tBlock == Blocks.air) { + return false; + } else { + if (!tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, block)) { + return false; + } + aMetaData += 5000; + aWorld.setBlock(aX, aY, aZ, tOreBlock, aMetaData, 0); + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof TileEntityOres ore) { + ore.mMetaData = (short) aMetaData; + } + return true; + } + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof BWOreLayer that)) return false; + + if (this.bwOres != that.bwOres || this.mMinY != that.mMinY + || this.mWeight != that.mWeight + || this.mDensity != that.mDensity) return false; + if (this.mSize != that.mSize) return false; + if (this.mMaxY != that.mMaxY) return false; + if (this.mPrimaryMeta != that.mPrimaryMeta) return false; + if (this.mSecondaryMeta != that.mSecondaryMeta) return false; + if (this.mBetweenMeta != that.mBetweenMeta) return false; + return this.mSporadicMeta == that.mSporadicMeta; + } + + @Override + public int hashCode() { + return MurmurHash3.murmurhash3_x86_32( + ByteBuffer.allocate(37) + .put(this.bwOres) + .putInt(this.mMinY) + .putInt(this.mWeight) + .putInt(this.mDensity) + .putInt(this.mSize) + .putInt(this.mMaxY) + .putInt(this.mPrimaryMeta) + .putInt(this.mSecondaryMeta) + .putInt(this.mBetweenMeta) + .putInt(this.mSporadicMeta) + .array(), + 0, + 37, + 31); + } +} diff --git a/src/main/java/bartworks/system/oregen/BWWordGenerator.java b/src/main/java/bartworks/system/oregen/BWWordGenerator.java new file mode 100644 index 0000000000..10a3c862af --- /dev/null +++ b/src/main/java/bartworks/system/oregen/BWWordGenerator.java @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.oregen; + +import java.util.HashSet; +import java.util.Random; + +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.IChunkProvider; + +import cpw.mods.fml.common.IWorldGenerator; +import gregtech.api.objects.XSTR; +import gregtech.api.util.GTLog; + +/** + * Original GT File Stripped and adjusted to work with this mod + */ +public class BWWordGenerator implements IWorldGenerator { + + public BWWordGenerator() { + // GT_NH Override... wont be actually registered to force its generation directly in the ChunkProvider + // GameRegistry.registerWorldGenerator(this, 1073741823); + } + + public synchronized void generate(Random aRandom, int aX, int aZ, World aWorld, IChunkProvider aChunkGenerator, + IChunkProvider aChunkProvider) { + new BWWordGenerator.WorldGenContainer( + aX * 16, + aZ * 16, + aWorld.provider, + aWorld, + aChunkGenerator, + aChunkProvider).run(); + } + + public static class WorldGenContainer implements Runnable { + + public static HashSet mGenerated = new HashSet<>(2000); + public final WorldProvider mWorldProvider; + public final World mWorld; + public final IChunkProvider mChunkGenerator; + public final IChunkProvider mChunkProvider; + public int mX; + public int mZ; + + public WorldGenContainer(int aX, int aZ, WorldProvider aWorldProvider, World aWorld, + IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { + this.mX = aX; + this.mZ = aZ; + this.mWorldProvider = aWorldProvider; + this.mWorld = aWorld; + this.mChunkGenerator = aChunkGenerator; + this.mChunkProvider = aChunkProvider; + } + + // returns a coordinate of a center chunk of 3x3 square; the argument belongs to this square + public int getVeinCenterCoordinate(int c) { + c += c < 0 ? 1 : 3; + return c - c % 3 - 2; + } + + public boolean surroundingChunksLoaded(int xCenter, int zCenter) { + return this.mWorld.checkChunksExist(xCenter - 16, 0, zCenter - 16, xCenter + 16, 0, zCenter + 16); + } + + public XSTR getRandom(int xChunk, int zChunk) { + long worldSeed = this.mWorld.getSeed(); + XSTR fmlRandom = new XSTR(worldSeed); + long xSeed = fmlRandom.nextLong() >> 2 + 1L; + long zSeed = fmlRandom.nextLong() >> 2 + 1L; + long chunkSeed = xSeed * xChunk + zSeed * zChunk ^ worldSeed; + fmlRandom.setSeed(chunkSeed); + return new XSTR(fmlRandom.nextInt()); + } + + public void run() { + int xCenter = this.getVeinCenterCoordinate(this.mX >> 4); + int zCenter = this.getVeinCenterCoordinate(this.mZ >> 4); + Random random = this.getRandom(xCenter, zCenter); + xCenter <<= 4; + zCenter <<= 4; + ChunkCoordIntPair centerChunk = new ChunkCoordIntPair(xCenter, zCenter); + if (!BWWordGenerator.WorldGenContainer.mGenerated.contains(centerChunk) + && this.surroundingChunksLoaded(xCenter, zCenter)) { + BWWordGenerator.WorldGenContainer.mGenerated.add(centerChunk); + if (BWOreLayer.sWeight > 0 && BWOreLayer.sList.size() > 0) { + boolean temp = true; + int tRandomWeight; + for (int i = 0; i < 256 && temp; i++) { + tRandomWeight = random.nextInt(BWOreLayer.sWeight); + for (BWOreLayer tWorldGen : BWOreLayer.sList) { + if (!tWorldGen.isGenerationAllowed(this.mWorld, mWorldProvider.getClass())) continue; + tRandomWeight -= tWorldGen.mWeight; + if (tRandomWeight <= 0) { + try { + boolean placed; + int attempts = 0; + do { + placed = tWorldGen.executeWorldgen( + this.mWorld, + random, + "", + this.mWorldProvider.dimensionId, + xCenter, + zCenter, + this.mChunkGenerator, + this.mChunkProvider); + ++attempts; + } while (!placed && attempts < 25); + temp = false; + break; + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + } + } + } + } + Chunk tChunk = this.mWorld.getChunkFromBlockCoords(this.mX, this.mZ); + if (tChunk != null) { + tChunk.isModified = true; + } + } + } +} diff --git a/src/main/java/bartworks/system/oregen/BWWorldGenRoss128b.java b/src/main/java/bartworks/system/oregen/BWWorldGenRoss128b.java new file mode 100644 index 0000000000..0af1a4a993 --- /dev/null +++ b/src/main/java/bartworks/system/oregen/BWWorldGenRoss128b.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.oregen; + +import static gregtech.api.enums.Materials.Bismuth; +import static gregtech.api.enums.Materials.Coal; +import static gregtech.api.enums.Materials.Diamond; +import static gregtech.api.enums.Materials.Graphite; +import static gregtech.api.enums.Materials.Lepidolite; +import static gregtech.api.enums.Materials.Scheelite; +import static gregtech.api.enums.Materials.Spodumene; +import static gregtech.api.enums.Materials.Stibnite; +import static gregtech.api.enums.Materials.Tetrahedrite; +import static gregtech.api.enums.Materials.Uraninite; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.util.StatCollector; + +import bartworks.common.configs.ConfigHandler; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.interfaces.ISubTagContainer; + +public class BWWorldGenRoss128b extends BWOreLayer { + + @Override + public Block getDefaultBlockToReplace() { + return Blocks.stone; + } + + @Override + public int[] getDefaultDamageToReplace() { + return new int[] { 0 }; + } + + @Override + public String getDimName() { + return StatCollector.translateToLocal("planet.Ross128b"); + } + + public BWWorldGenRoss128b(String aName, boolean aDefault, int aMinY, int aMaxY, int aWeight, int aDensity, + int aSize, ISubTagContainer top, ISubTagContainer bottom, ISubTagContainer between, + ISubTagContainer sprinkled) { + super(aName, aDefault, aMinY, aMaxY, aWeight, aDensity, aSize, top, bottom, between, sprinkled); + } + + public static void initOres() { + new BWWorldGenRoss128b( + "ore.mix.ross128.Thorianit", + true, + 30, + 60, + 17, + 1, + 16, + WerkstoffLoader.Thorianit, + Uraninite, + Lepidolite, + Spodumene); + new BWWorldGenRoss128b("ore.mix.ross128.carbon", true, 5, 25, 5, 4, 12, Graphite, Diamond, Coal, Graphite); + new BWWorldGenRoss128b( + "ore.mix.ross128.bismuth", + true, + 5, + 80, + 30, + 1, + 16, + WerkstoffLoader.Bismuthinit, + Stibnite, + Bismuth, + WerkstoffLoader.Bismutite); + new BWWorldGenRoss128b( + "ore.mix.ross128.TurmalinAlkali", + true, + 5, + 80, + 15, + 4, + 48, + WerkstoffLoader.Olenit, + WerkstoffLoader.FluorBuergerit, + WerkstoffLoader.ChromoAluminoPovondrait, + WerkstoffLoader.VanadioOxyDravit); + new BWWorldGenRoss128b( + "ore.mix.ross128.Roquesit", + true, + 30, + 50, + 3, + 1, + 12, + WerkstoffLoader.Arsenopyrite, + WerkstoffLoader.Ferberite, + WerkstoffLoader.Loellingit, + WerkstoffLoader.Roquesit); + new BWWorldGenRoss128b( + "ore.mix.ross128.Tungstate", + true, + 5, + 40, + 10, + 4, + 14, + WerkstoffLoader.Ferberite, + WerkstoffLoader.Huebnerit, + WerkstoffLoader.Loellingit, + Scheelite); + new BWWorldGenRoss128b( + "ore.mix.ross128.CopperSulfits", + true, + 40, + 70, + 80, + 3, + 24, + WerkstoffLoader.Djurleit, + WerkstoffLoader.Bornite, + WerkstoffLoader.Wittichenit, + Tetrahedrite); + new BWWorldGenRoss128b( + "ore.mix.ross128.Forsterit", + true, + 20, + 90, + 50, + 2, + 32, + WerkstoffLoader.Forsterit, + WerkstoffLoader.Fayalit, + WerkstoffLoader.DescloiziteCUVO4, + WerkstoffLoader.DescloiziteZNVO4); + new BWWorldGenRoss128b( + "ore.mix.ross128.Hedenbergit", + true, + 20, + 90, + 50, + 2, + 32, + WerkstoffLoader.Hedenbergit, + WerkstoffLoader.Fayalit, + WerkstoffLoader.DescloiziteCUVO4, + WerkstoffLoader.DescloiziteZNVO4); + new BWWorldGenRoss128b( + "ore.mix.ross128.RedZircon", + true, + 10, + 80, + 40, + 3, + 24, + WerkstoffLoader.Fayalit, + WerkstoffLoader.FuchsitAL, + WerkstoffLoader.RedZircon, + WerkstoffLoader.FuchsitCR); + } + + @Override + public boolean isGenerationAllowed(String aDimName, int aDimensionType, int aAllowedDimensionType) { + return aDimensionType == ConfigHandler.ross128BID; + } +} diff --git a/src/main/java/bartworks/system/oregen/BWWorldGenRoss128ba.java b/src/main/java/bartworks/system/oregen/BWWorldGenRoss128ba.java new file mode 100644 index 0000000000..3a032af822 --- /dev/null +++ b/src/main/java/bartworks/system/oregen/BWWorldGenRoss128ba.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.oregen; + +import static gregtech.api.enums.Materials.Amethyst; +import static gregtech.api.enums.Materials.Barite; +import static gregtech.api.enums.Materials.Galena; +import static gregtech.api.enums.Materials.NaquadahEnriched; +import static gregtech.api.enums.Materials.Olivine; +import static gregtech.api.enums.Materials.Scheelite; +import static gregtech.api.enums.Materials.Sphalerite; +import static gregtech.api.enums.Materials.Tetrahedrite; + +import net.minecraft.block.Block; +import net.minecraft.util.StatCollector; + +import bartworks.common.configs.ConfigHandler; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.interfaces.ISubTagContainer; + +public class BWWorldGenRoss128ba extends BWOreLayer { + + public BWWorldGenRoss128ba(String aName, boolean aDefault, int aMinY, int aMaxY, int aWeight, int aDensity, + int aSize, ISubTagContainer top, ISubTagContainer bottom, ISubTagContainer between, + ISubTagContainer sprinkled) { + super(aName, aDefault, aMinY, aMaxY, aWeight, aDensity, aSize, top, bottom, between, sprinkled); + } + + @Override + public Block getDefaultBlockToReplace() { + return Block.getBlockFromName("GalacticraftCore:tile.moonBlock"); + } + + @Override + public int[] getDefaultDamageToReplace() { + int[] ret = new int[12]; + for (int i = 0; i < 12; i++) { + if (i != 5 && i != 3) ret[i] = i; + } + return ret; + } + + @Override + public String getDimName() { + return StatCollector.translateToLocal("moon.Ross128ba"); + } + + public static void init_Ores() { + new BWWorldGenRoss128ba( + "ore.mix.ross128ba.tib", + true, + 30, + 60, + 6, + 1, + 16, + WerkstoffLoader.Tiberium, + WerkstoffLoader.Tiberium, + NaquadahEnriched, + NaquadahEnriched); + new BWWorldGenRoss128ba( + "ore.mix.ross128ba.Tungstate", + true, + 5, + 40, + 60, + 4, + 14, + WerkstoffLoader.Ferberite, + WerkstoffLoader.Huebnerit, + WerkstoffLoader.Loellingit, + Scheelite); + new BWWorldGenRoss128ba( + "ore.mix.ross128ba.bart", + true, + 30, + 60, + 1, + 1, + 1, + WerkstoffLoader.BArTiMaEuSNeK, + WerkstoffLoader.BArTiMaEuSNeK, + WerkstoffLoader.BArTiMaEuSNeK, + WerkstoffLoader.BArTiMaEuSNeK); + new BWWorldGenRoss128ba( + "ore.mix.ross128ba.TurmalinAlkali", + true, + 5, + 80, + 60, + 4, + 48, + WerkstoffLoader.Olenit, + WerkstoffLoader.FluorBuergerit, + WerkstoffLoader.ChromoAluminoPovondrait, + WerkstoffLoader.VanadioOxyDravit); + new BWWorldGenRoss128ba( + "ore.mix.ross128ba.Amethyst", + true, + 5, + 80, + 35, + 2, + 8, + Amethyst, + Olivine, + WerkstoffLoader.Prasiolite, + WerkstoffLoader.Hedenbergit); + new BWWorldGenRoss128ba( + "ore.mix.ross128ba.CopperSulfits", + true, + 40, + 70, + 80, + 3, + 24, + WerkstoffLoader.Djurleit, + WerkstoffLoader.Bornite, + WerkstoffLoader.Wittichenit, + Tetrahedrite); + new BWWorldGenRoss128ba( + "ore.mix.ross128ba.RedZircon", + true, + 10, + 80, + 40, + 3, + 24, + WerkstoffLoader.Fayalit, + WerkstoffLoader.FuchsitAL, + WerkstoffLoader.RedZircon, + WerkstoffLoader.FuchsitCR); + new BWWorldGenRoss128ba( + "ore.mix.ross128ba.Fluorspar", + true, + 10, + 80, + 35, + 4, + 8, + Galena, + Sphalerite, + WerkstoffLoader.Fluorspar, + Barite); + } + + @Override + public boolean isGenerationAllowed(String aDimName, int aDimensionType, int aAllowedDimensionType) { + return aDimensionType == ConfigHandler.ross128BAID; + } +} diff --git a/src/main/java/bartworks/system/worldgen/BWWorldGenUtil.java b/src/main/java/bartworks/system/worldgen/BWWorldGenUtil.java new file mode 100644 index 0000000000..db32462ca4 --- /dev/null +++ b/src/main/java/bartworks/system/worldgen/BWWorldGenUtil.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.worldgen; + +import java.util.Random; + +import net.minecraft.block.Block; + +import bartworks.common.configs.ConfigHandler; +import gregtech.api.GregTechAPI; + +public class BWWorldGenUtil { + + private BWWorldGenUtil() {} + + public static final Block GT_TILES = GregTechAPI.sBlockMachines; + + public static short getGenerator(Random rand, int tier) { + int meta = ConfigHandler.metasForTiers[0][tier][rand.nextInt(ConfigHandler.metasForTiers[0][tier].length)]; + return GregTechAPI.METATILEENTITIES[meta] != null ? (short) meta : BWWorldGenUtil.getGenerator(rand, tier); + } + + public static short getBuffer(Random rand, int tier) { + int meta = ConfigHandler.metasForTiers[1][tier][rand.nextInt(ConfigHandler.metasForTiers[1][tier].length)]; + return GregTechAPI.METATILEENTITIES[meta] != null ? (short) meta : BWWorldGenUtil.getBuffer(rand, tier); + } + + public static short getCable(Random rand, int tier) { + int meta = ConfigHandler.metasForTiers[2][tier][rand.nextInt(ConfigHandler.metasForTiers[2][tier].length)]; + return GregTechAPI.METATILEENTITIES[meta] != null ? (short) meta : BWWorldGenUtil.getCable(rand, tier); + } + + public static short getMachine(Random rand, int tier) { + int meta = ConfigHandler.metasForTiers[3][tier][rand.nextInt(ConfigHandler.metasForTiers[3][tier].length)]; + return GregTechAPI.METATILEENTITIES[meta] != null ? (short) meta : BWWorldGenUtil.getMachine(rand, tier); + } +} diff --git a/src/main/java/bartworks/system/worldgen/MapGenRuins.java b/src/main/java/bartworks/system/worldgen/MapGenRuins.java new file mode 100644 index 0000000000..a5668fb7ed --- /dev/null +++ b/src/main/java/bartworks/system/worldgen/MapGenRuins.java @@ -0,0 +1,501 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.system.worldgen; + +import static bartworks.common.configs.ConfigHandler.maxTierRoss; +import static net.minecraftforge.common.ChestGenHooks.PYRAMID_JUNGLE_CHEST; + +import java.security.SecureRandom; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.IInventory; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.WeightedRandomChestContent; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.ChestGenHooks; +import net.minecraftforge.common.util.ForgeDirection; + +import bartworks.util.Pair; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.api.objects.XSTR; +import gregtech.api.threads.RunnableMachineUpdate; + +public abstract class MapGenRuins extends WorldGenerator { + + @SuppressWarnings("unchecked") + protected Pair[][] ToBuildWith = new Pair[4][0]; + + @Override + public boolean generate(World p_76484_1_, Random p_76484_2_, int p_76484_3_, int p_76484_4_, int p_76484_5_) { + return false; + } + + @SuppressWarnings("unchecked") + protected void setFloorBlocks(int[] metas, Block... blocks) { + this.ToBuildWith[0] = new Pair[metas.length]; + for (int i = 0; i < metas.length; i++) { + this.ToBuildWith[0][i] = new Pair<>(blocks[i % blocks.length], metas[i]); + } + } + + @SuppressWarnings("unchecked") + protected void setWallBlocks(int[] metas, Block... blocks) { + this.ToBuildWith[1] = new Pair[metas.length]; + for (int i = 0; i < metas.length; i++) { + this.ToBuildWith[1][i] = new Pair<>(blocks[i % blocks.length], metas[i]); + } + } + + @SuppressWarnings("unchecked") + protected void setRoofBlocks(int[] metas, Block... blocks) { + this.ToBuildWith[2] = new Pair[metas.length]; + for (int i = 0; i < metas.length; i++) { + this.ToBuildWith[2][i] = new Pair<>(blocks[i % blocks.length], metas[i]); + } + } + + @SuppressWarnings("unchecked") + protected void setMiscBlocks(int[] metas, Block... blocks) { + this.ToBuildWith[3] = new Pair[metas.length]; + for (int i = 0; i < metas.length; i++) { + this.ToBuildWith[3][i] = new Pair<>(blocks[i % blocks.length], metas[i]); + } + } + + int[] statBlocks = new int[4]; + + protected void setRandomBlockWAirChance(World worldObj, int x, int y, int z, Random rand, int airchance, + Pair... blocks) { + if (rand.nextInt(100) > airchance) this.setRandomBlock(worldObj, x, y, z, rand, blocks); + else this.setBlock(worldObj, x, y, z, Blocks.air, 0); + } + + protected void setRandomBlock(World worldObj, int x, int y, int z, Random rand, Pair... blocks) { + Block toSet = blocks[rand.nextInt(blocks.length)].getKey(); + int meta = blocks[rand.nextInt(blocks.length)].getValue(); + this.setBlock(worldObj, x, y, z, toSet, meta); + } + + protected void setBlock(World worldObj, int x, int y, int z, Block block, int meta) { + this.setBlockAndNotifyAdequately(worldObj, x, y, z, block, meta); + } + + protected void setBlock(World worldObj, int x, int y, int z, Pair pair) { + this.setBlockAndNotifyAdequately(worldObj, x, y, z, pair.getKey(), pair.getValue()); + } + + private TileEntity setGTMachineBlock(World worldObj, int x, int y, int z, int meta) { + boolean isEnabled = true; + try { + isEnabled = RunnableMachineUpdate.isEnabled(); + } catch (Throwable ignored) { + isEnabled = false; + } + if (isEnabled) + throw new IllegalStateException("Machine Block Runnable needs to be disabled while creating world!"); + this.setBlockAndNotifyAdequately( + worldObj, + x, + y, + z, + BWWorldGenUtil.GT_TILES, + GregTechAPI.METATILEENTITIES[meta].getTileEntityBaseType()); + TileEntity tile = worldObj.getTileEntity(x, y, z); + ((IGregTechTileEntity) tile).setInitialValuesAsNBT(null, (short) meta); + return tile; + } + + protected TileEntity reSetGTTileEntity(IGregTechTileEntity bte, World worldObj, int x, int y, int z, int meta) { + worldObj.removeTileEntity(x, y, z); + this.setBlock(worldObj, x, y, z, Blocks.air, 0); + return this.setGTMachineBlock(worldObj, x, y, z, meta); + } + + protected void setGTMachineBlockWChance(World worldObj, int x, int y, int z, Random rand, int airchance, int meta) { + if (rand.nextInt(100) > airchance) { + this.setGTMachineBlock(worldObj, x, y, z, meta); + } else this.setBlock(worldObj, x, y, z, Blocks.air, 0); + } + + protected void setGTCablekWChance(World worldObj, int x, int y, int z, Random rand, int airchance, int meta) { + if (rand.nextInt(100) > airchance) { + this.setGTCable(worldObj, x, y, z, meta); + } else this.setBlock(worldObj, x, y, z, Blocks.air, 0); + } + + protected void setGTMachine(World worldObj, int x, int y, int z, int meta, String ownerName, + ForgeDirection facing) { + try { + RunnableMachineUpdate.setDisabled(); + } catch (Throwable ignored) {} + this.setGTMachineBlock(worldObj, x, y, z, meta); + BaseMetaTileEntity BTE = (BaseMetaTileEntity) worldObj.getTileEntity(x, y, z); + BTE.setOwnerName(ownerName); + BTE.setFrontFacing(facing); + BTE = (BaseMetaTileEntity) worldObj.getTileEntity(x, y, z); + this.checkTile(BTE, worldObj, x, y, z, meta, ownerName, facing, 0); + try { + RunnableMachineUpdate.setEnabled(); + } catch (Throwable ignored) {} + } + + private void checkTile(BaseMetaTileEntity BTE, World worldObj, int x, int y, int z, int meta, String ownerName, + ForgeDirection facing, int depth) { + if (depth < 25) { + if (BTE.getMetaTileID() != meta || worldObj.getTileEntity(x, y, z) != BTE || BTE.isInvalid()) { + this.redoTile(BTE, worldObj, x, y, z, meta, ownerName, facing); + this.checkTile(BTE, worldObj, x, y, z, meta, ownerName, facing, depth); + depth++; + } + } else { + worldObj.removeTileEntity(x, y, z); + worldObj.setBlockToAir(x, y, z); + } + } + + private void redoTile(BaseMetaTileEntity BTE, World worldObj, int x, int y, int z, int meta, String ownerName, + ForgeDirection facing) { + this.reSetGTTileEntity(BTE, worldObj, x, y, z, meta); + BTE = (BaseMetaTileEntity) worldObj.getTileEntity(x, y, z); + BTE.setOwnerName(ownerName); + BTE.setFrontFacing(facing); + } + + protected void setGTCable(World worldObj, int x, int y, int z, int meta) { + try { + RunnableMachineUpdate.setDisabled(); + } catch (Throwable ignored) {} + BaseMetaPipeEntity BTE = (BaseMetaPipeEntity) this.setGTMachineBlock(worldObj, x, y, z, meta); + MetaPipeEntity MPE = (MetaPipeEntity) BTE.getMetaTileEntity(); + BTE.mConnections |= (byte) (1 << (byte) 4); + BTE.mConnections |= (byte) (1 << ForgeDirection.getOrientation(4) + .getOpposite() + .ordinal()); + BaseMetaTileEntity BPE = (BaseMetaTileEntity) worldObj.getTileEntity(x, y, z - 1); + if (BPE != null) { + BTE.mConnections |= (byte) (1 << (byte) 2); + } + MPE.mConnections = BTE.mConnections; + try { + RunnableMachineUpdate.setEnabled(); + } catch (Throwable ignored) {} + } + + public static class RuinsBase extends MapGenRuins { + + private static final String owner = "Ancient Cultures"; + + @Override + public boolean generate(World worldObj, Random rand1, int x, int y, int z) { + + for (int i = 0; i < rand1.nextInt(144); i++) { + rand1.nextLong(); + } + + Random rand = new XSTR(rand1.nextLong()); + SecureRandom secureRandom = new SecureRandom(); + + if (worldObj.getBlock(x, y, z) == Blocks.air) { + while (worldObj.getBlock(x, y, z) == Blocks.air) { + y--; + } + } + + this.setFloorBlocks(new int[] { 0, 0, 0 }, Blocks.brick_block, Blocks.double_stone_slab, Blocks.stonebrick); + this.setWallBlocks(new int[] { 0, 1, 2, 1, 1 }, Blocks.stonebrick); + this.setRoofBlocks(new int[] { 9 }, Blocks.log); + this.setMiscBlocks(new int[] { 1 }, Blocks.log); + this.statBlocks = new int[] { rand.nextInt(this.ToBuildWith[0].length) }; + int colored = rand.nextInt(15); + int tier = secureRandom.nextInt(maxTierRoss); + boolean useColor = rand.nextBoolean(); + byte set = 0; + byte toSet = (byte) (rand.nextInt(maxTierRoss - tier) + 1); + short cablemeta = BWWorldGenUtil.getCable(secureRandom, tier); + byte treeinaRow = 0; + boolean lastset = rand.nextBoolean(); + for (int dx = -6; dx <= 6; dx++) { + for (int dy = 0; dy <= 8; dy++) { + for (int dz = -6; dz <= 6; dz++) { + this.setBlock(worldObj, x + dx, y + dy, z + dz, Blocks.air, 0); + if (dy == 0) { + Pair floor = this.ToBuildWith[0][this.statBlocks[0]]; + this.setBlock(worldObj, x + dx, y + 0, z + dz, floor.getKey(), floor.getValue()); + } else if (dy > 0 && dy < 4) { + if (Math.abs(dx) == 5 && Math.abs(dz) == 5) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + dy, + z + dz, + rand, + 5, + this.ToBuildWith[3][0]); + } else if (dx == 0 && dz == -5 && (dy == 1 || dy == 2)) { + if (dy == 1) { + this.setBlock(worldObj, x + dx, y + 1, z + -5, Blocks.iron_door, 1); + } + if (dy == 2) { + this.setBlock(worldObj, x + dx, y + 2, z + dz, Blocks.iron_door, 8); + } + } else if (Math.abs(dx) == 5 && Math.abs(dz) < 5 || Math.abs(dz) == 5 && Math.abs(dx) < 5) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + dy, + z + dz, + rand, + 25, + this.ToBuildWith[1]); + if (dy == 2 && rand.nextInt(100) < 12) { + if (useColor) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + 2, + z + dz, + rand, + 25, + new Pair<>(Blocks.stained_glass_pane, colored)); + } + } else { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + dy, + z + dz, + rand, + 25, + new Pair<>(Blocks.glass_pane, 0)); + } + } + + if (dy == 3 && Math.abs(dx) == 6) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + 3, + z + dz, + rand, + 25, + this.ToBuildWith[2]); + } + + if (dy == 1) { + if (dx == 3 && dz == -3) { + this.setBlock(worldObj, x + 3, y + 1, z + dz, Blocks.crafting_table, 0); + } + if (dx == -3 && (dz == -3 || dz == -2)) { + this.setBlock(worldObj, x + -3, y + dy, z + dz, Blocks.chest, 5); + IInventory chest = (IInventory) worldObj.getTileEntity(x + dx, y + dy, z + dz); + if (chest != null) { + WeightedRandomChestContent.generateChestContents( + secureRandom, + ChestGenHooks.getItems(PYRAMID_JUNGLE_CHEST, rand), + chest, + ChestGenHooks.getCount(PYRAMID_JUNGLE_CHEST, rand)); + } + } + + if (dx == 4 && dz == 4) { + short meta = BWWorldGenUtil.getGenerator(secureRandom, tier); + this.setGTMachine( + worldObj, + x + dx, + y + dy, + z + dz, + meta, + owner, + tier > 0 ? ForgeDirection.WEST : ForgeDirection.UP); + } else if (dx == 3 && dz == 4) { + if (tier > 0) { + short meta = BWWorldGenUtil.getBuffer(secureRandom, tier); + this.setGTMachine( + worldObj, + x + dx, + y + dy, + z + dz, + meta, + owner, + ForgeDirection.WEST); + } else { + this.setGTCablekWChance(worldObj, x + dx, y + dy, z + dz, rand, 33, cablemeta); + } + } else if (dx < 3 && dx > -5 && dz == 4) { + this.setGTCablekWChance(worldObj, x + dx, y + dy, z + dz, rand, 33, cablemeta); + } else if (dx < 3 && dx > -5 && dz == 3 && set < toSet) { + if (!lastset || treeinaRow > 2) { + short meta = BWWorldGenUtil.getMachine(secureRandom, tier); + this.setGTMachine( + worldObj, + x + dx, + y + dy, + z + dz, + meta, + owner, + ForgeDirection.UP); + + set++; + treeinaRow = 0; + lastset = true; + } else { + lastset = rand.nextBoolean(); + if (lastset) treeinaRow++; + } + } + } + } else switch (dy) { + case 4: + if (Math.abs(dx) == 5) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + 4, + z + dz, + rand, + 25, + this.ToBuildWith[2]); + break; + } + if (Math.abs(dz) == 5 && Math.abs(dx) < 5) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + dy, + z + dz, + rand, + 25, + this.ToBuildWith[1]); + } + break; + case 5: + if (Math.abs(dx) == 4) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + 5, + z + dz, + rand, + 25, + this.ToBuildWith[2]); + break; + } + if (Math.abs(dz) == 5 && Math.abs(dx) < 4) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + dy, + z + dz, + rand, + 25, + this.ToBuildWith[1]); + } + break; + case 6: + if (Math.abs(dx) == 3) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + 6, + z + dz, + rand, + 25, + this.ToBuildWith[2]); + break; + } + if (Math.abs(dz) == 5 && Math.abs(dx) < 3) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + dy, + z + dz, + rand, + 25, + this.ToBuildWith[1]); + } + break; + case 7: + if (Math.abs(dx) == 2) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + 7, + z + dz, + rand, + 25, + this.ToBuildWith[2]); + break; + } + if (Math.abs(dz) == 5 && Math.abs(dx) < 2) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + dy, + z + dz, + rand, + 25, + this.ToBuildWith[1]); + } + break; + case 8: + if (Math.abs(dx) == 1 || Math.abs(dx) == 0) { + this.setRandomBlockWAirChance( + worldObj, + x + dx, + y + 8, + z + dz, + rand, + 25, + this.ToBuildWith[2]); + } + break; + default: + break; + } + } + } + } + tosetloop: while (set < toSet) { + int dy = 1; + int dz = 3; + for (int dx = 2; dx > -5; dx--) { + if (set >= toSet) { + break tosetloop; + } + if (!lastset || treeinaRow > 2 && worldObj.getTileEntity(x + dx, y + dy, z + dz) == null) { + short meta = BWWorldGenUtil.getMachine(secureRandom, tier); + this.setGTMachine(worldObj, x + dx, y + dy, z + dz, meta, owner, ForgeDirection.UP); + + set++; + treeinaRow = 0; + lastset = true; + } else { + lastset = rand.nextBoolean(); + if (lastset) { + treeinaRow++; + } + } + } + } + return true; + } + } +} diff --git a/src/main/java/bartworks/util/BWColorUtil.java b/src/main/java/bartworks/util/BWColorUtil.java new file mode 100644 index 0000000000..b9453b9963 --- /dev/null +++ b/src/main/java/bartworks/util/BWColorUtil.java @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import java.util.Arrays; + +import gregtech.api.enums.Dyes; + +@SuppressWarnings("unused") +public class BWColorUtil { + + private BWColorUtil() {} + + public static byte getDarknessFromColor(short[] rgba, int index) { + int g = rgba[index]; + if (g >= 0 && g < 64) return 0; + if (g >= 64 && g < 160) return 1; + else if (g >= 160 && g < 223) return 2; + else if (g >= 233 && g <= 255) return 3; + return 4; + } + + public static Dyes getDyeFromColor(short[] rgba) { + rgba = correctCorlorArray(rgba); + if (isGrayScale(rgba, 2)) { + switch (getDarknessFromColor(rgba, 0)) { + case 0: + return Dyes.dyeBlack; + case 1: + return Dyes.dyeGray; + case 2: + return Dyes.dyeLightGray; + case 3: + return Dyes.dyeWhite; + } + } else { + short[] tmp = roundColor(rgba, 2); + if (isRedScale(tmp)) { + if (isPurpleScale(tmp)) { + switch (getDarknessFromColor(rgba, 0)) { + case 0: + case 1: + if (rgba[3] - 50 > rgba[0]) return Dyes.dyePurple; + else return Dyes.dyeRed; + case 2: + case 3: + if (rgba[3] - 50 > rgba[0]) return Dyes.dyeMagenta; + else if (rgba[0] > 200 && rgba[2] > 140) return Dyes.dyePink; + else if (rgba[0] > rgba[1] + rgba[1] / 10 && rgba[0] > rgba[2] + rgba[2] / 10 + && rgba[1] >> 4 == rgba[2] >> 4 + && rgba[1] + 50 > rgba[0]) { + return Dyes.dyeBrown; + } else return Dyes.dyeRed; + case 4: + return Dyes._NULL; + } + } + if (isYellowScale(tmp)) switch (getDarknessFromColor(rgba, 0)) { + case 0: + case 1: + return Dyes.dyeBrown; + case 2: + case 3: { + if (rgba[0] >> 5 > rgba[1] >> 5) return Dyes.dyeOrange; + else return Dyes.dyeYellow; + } + case 4: + return Dyes._NULL; + } + return Dyes.dyePink; + } + if (isGrenScale(tmp)) { + if (isCyanScale(tmp)) { + if (rgba[2] + 40 < rgba[1]) switch (getDarknessFromColor(rgba, 0)) { + case 0: + case 1: + return Dyes.dyeGreen; + case 2: + case 3: + return Dyes.dyeLime; + } + return Dyes.dyeCyan; + } + if (isYellowScale(tmp)) switch (getDarknessFromColor(rgba, 0)) { + case 0: + case 1: + return Dyes.dyeBrown; + case 2: + case 3: { + if (rgba[0] >> 5 > rgba[1] >> 5) return Dyes.dyeOrange; + else return Dyes.dyeYellow; + } + } + switch (getDarknessFromColor(rgba, 0)) { + case 0: + case 1: + return Dyes.dyeGreen; + case 2: + case 3: + return Dyes.dyeLime; + } + } else if (isBlueScale(tmp)) { + if (isPurpleScale(tmp)) { + switch (getDarknessFromColor(rgba, 0)) { + case 0: + case 1: + return Dyes.dyePurple; + case 2: + case 3: + return Dyes.dyeMagenta; + } + } else if (isCyanScale(tmp)) { + return Dyes.dyeCyan; + } + switch (getDarknessFromColor(rgba, 0)) { + case 0: + case 1: + return Dyes.dyeBlue; + case 2: + case 3: + return Dyes.dyeLightBlue; + } + } + } + return Dyes._NULL; + } + + public static boolean isCyanScale(short[] rgba) { + return !isRedScale(rgba); + } + + public static boolean isPurpleScale(short[] rgba) { + return !isGrenScale(rgba); + } + + public static boolean isYellowScale(short[] rgba) { + return !isBlueScale(rgba); + } + + public static boolean isBlueScale(short[] rgba) { + rgba = correctCorlorArray(rgba); + return rgba[2] * 2 >= rgba[1] + rgba[0]; + } + + public static boolean isGrenScale(short[] rgba) { + rgba = correctCorlorArray(rgba); + return rgba[1] * 2 >= rgba[0] + rgba[2]; + } + + public static boolean isRedScale(short[] rgba) { + rgba = correctCorlorArray(rgba); + return rgba[0] * 2 >= rgba[1] + rgba[2]; + } + + public static boolean isGrayScale(short[] rgba, int magin) { + rgba = correctCorlorArray(rgba); + return rgba[0] >> magin == rgba[1] >> magin && rgba[1] >> magin == rgba[2] >> magin; + } + + public static short[] roundColor(short[] rgba, int magin) { + short[] tmp = Arrays.copyOf(rgba, 4); + tmp[0] = (short) (rgba[0] >> magin); + tmp[1] = (short) (rgba[1] >> magin); + tmp[2] = (short) (rgba[2] >> magin); + return tmp; + } + + public static boolean isGrayScale(short[] rgba) { + rgba = correctCorlorArray(rgba); + return rgba[0] == rgba[1] && rgba[1] == rgba[2]; + } + + public static short[] correctCorlorArray(short[] rgba) { + if (rgba.length > 4) { + rgba = Arrays.copyOfRange(rgba, 0, 4); + } + if (rgba.length < 4) { + short[] tmp = Arrays.copyOf(rgba, 4); + Arrays.fill(tmp, rgba.length, 4, (short) 0); + rgba = tmp; + } + if (rgba[0] > 255) rgba[0] = 255; + if (rgba[1] > 255) rgba[1] = 255; + if (rgba[2] > 255) rgba[2] = 255; + if (rgba[3] > 255) rgba[3] = 255; + if (rgba[0] < 0) rgba[0] = 0; + if (rgba[1] < 0) rgba[1] = 0; + if (rgba[2] < 0) rgba[2] = 0; + if (rgba[3] < 0) rgba[3] = 0; + return rgba; + } + + public static short[] splitColorToRBGArray(int rgb) { + return new short[] { (short) (rgb >> 16 & 0xFF), (short) (rgb >> 8 & 0xFF), (short) (rgb & 0xFF) }; + } + + public static int getColorFromRGBArray(short[] color) { + return (color[0] & 0x0ff) << 16 | (color[1] & 0x0ff) << 8 | color[2] & 0x0ff; + } + + public static int getColorFromRGBArray(int[] color) { + return (color[0] & 0x0ff) << 16 | (color[1] & 0x0ff) << 8 | color[2] & 0x0ff; + } + +} diff --git a/src/main/java/bartworks/util/BWRecipes.java b/src/main/java/bartworks/util/BWRecipes.java new file mode 100644 index 0000000000..1d6cd56c00 --- /dev/null +++ b/src/main/java/bartworks/util/BWRecipes.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import gregtech.api.enums.Materials; + +public class BWRecipes { + + public static long calcDecayTicks(int x) { + long ret; + if (x == 43) ret = 5000; + else if (x == 61) ret = 4500; + else if (x <= 100) ret = MathUtils.ceilLong((8000D * Math.tanh(-x / 20D) + 8000D) * 1000D); + else ret = MathUtils.ceilLong(8000D * Math.tanh(-x / 65D) + 8000D); + return ret; + } + + public static int computeSieverts(int givenSievert, int glassTier, boolean requiresExactSieverts, boolean cleanroom, + boolean lowGravity) { + byte specialValue = 0; + if (cleanroom && lowGravity) { + specialValue = 3; + } else if (cleanroom) { + specialValue = 2; + } else if (lowGravity) { + specialValue = 1; + } + int sievertValue = 0; + if (givenSievert >= 83 || givenSievert == 61 || givenSievert == 43) sievertValue += givenSievert; + sievertValue = sievertValue << 1; + sievertValue = sievertValue | (requiresExactSieverts ? 1 : 0); + sievertValue = sievertValue << 2; + sievertValue = sievertValue | specialValue; + sievertValue = sievertValue << 4; + sievertValue = sievertValue | glassTier; + return sievertValue; + } + + public static int computeSieverts(Materials material, int glassTier, boolean requiresExactSieverts, + boolean cleanroom, boolean lowGravity) { + byte specialValue = 0; + if (cleanroom && lowGravity) { + specialValue = 3; + } else if (cleanroom) { + specialValue = 2; + } else if (lowGravity) { + specialValue = 1; + } + int aSievert = 0; + if (material.getProtons() >= 83 || material.getProtons() == 61 || material.getProtons() == 43) + aSievert += BWUtil.calculateSv(material); + aSievert = aSievert << 1; + aSievert = aSievert | (requiresExactSieverts ? 1 : 0); + aSievert = aSievert << 2; + aSievert = aSievert | specialValue; + aSievert = aSievert << 4; + aSievert = aSievert | glassTier; + return aSievert; + } +} diff --git a/src/main/java/bartworks/util/BWTooltipReference.java b/src/main/java/bartworks/util/BWTooltipReference.java new file mode 100644 index 0000000000..1c9e32e5e6 --- /dev/null +++ b/src/main/java/bartworks/util/BWTooltipReference.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import static net.minecraft.util.EnumChatFormatting.BLUE; +import static net.minecraft.util.EnumChatFormatting.DARK_BLUE; +import static net.minecraft.util.EnumChatFormatting.GRAY; +import static net.minecraft.util.EnumChatFormatting.GREEN; + +import java.util.function.Function; +import java.util.function.Supplier; + +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; + +public class BWTooltipReference { + + public static final String BW_NO_RESET = EnumChatFormatting.DARK_GREEN + "BartWorks"; + public static final String TT_NO_RESET = BLUE + "Tec" + DARK_BLUE + "Tech"; + public static final String BW = BW_NO_RESET + GRAY; + public static final String TT = TT_NO_RESET + GRAY; + + public static final Supplier ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS = () -> StatCollector.translateToLocal( + "tooltip.bw.1.name") + " " + BW; + + public static final String MULTIBLOCK_ADDED_BY_BARTWORKS = BW; + public static final Function MULTIBLOCK_ADDED_VIA_BARTWORKS = owner -> String + .format(StatCollector.translateToLocal("tooltip.bw.mb_via.name"), owner); + public static final String MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS = MULTIBLOCK_ADDED_VIA_BARTWORKS + .apply(GREEN + "bartimaeusnek"); + + public static final String TT_BLUEPRINT = "To see the structure, use a " + TT + " Blueprint on the Controller!"; + +} diff --git a/src/main/java/bartworks/util/BWUtil.java b/src/main/java/bartworks/util/BWUtil.java new file mode 100644 index 0000000000..5f740af40f --- /dev/null +++ b/src/main/java/bartworks/util/BWUtil.java @@ -0,0 +1,784 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import static gregtech.api.enums.GTValues.D1; +import static gregtech.api.enums.GTValues.E; +import static gregtech.api.enums.GTValues.M; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.GTValues.W; + +import java.lang.reflect.Array; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.function.BiConsumer; +import java.util.function.Function; +import java.util.stream.Collectors; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.init.Items; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.oredict.ShapedOreRecipe; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IStructureElement; + +import bartworks.API.BioVatLogicAdder; +import bartworks.API.BorosilicateGlass; +import bartworks.API.GlassTier; +import bartworks.MainMod; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OreDictNames; +import gregtech.api.enums.ToolDictNames; +import gregtech.api.interfaces.IItemContainer; +import gregtech.api.objects.ItemData; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTShapedRecipe; +import gregtech.api.util.GTUtility; + +public class BWUtil { + + @Deprecated + public static final int STANDART = 0; + @Deprecated + public static final int LOWGRAVITY = -100; + @Deprecated + public static final int CLEANROOM = -200; + + public static String translateGTItemStack(ItemStack itemStack) { + if (!GTUtility.isStackValid(itemStack)) return "Not a Valid ItemStack:" + itemStack; + String ret = GTLanguageManager.getTranslation(GTLanguageManager.getTranslateableItemStackName(itemStack)); + if (!ret.contains("%material")) return ret; + String matname = ""; + if (BWUtil.checkStackAndPrefix(itemStack)) + matname = GTOreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial.mDefaultLocalName; + return ret.replace("%material", matname); + } + + public static void set2DCoordTo1DArray(int indexX, int indexY, int sizeY, Object value, Object[] array) { + int index = indexX * sizeY + indexY; + array[index] = value; + } + + public static Object get2DCoordFrom1DArray(int indexX, int indexY, int sizeY, Object[] array) { + int index = indexX * sizeY + indexY; + return array[index]; + } + + public static GTRecipe copyAndSetTierToNewRecipe(GTRecipe recipe, byte tier) { + byte oldTier = GTUtility.getTier(recipe.mEUt); + int newTime = recipe.mDuration; + int newVoltage = recipe.mEUt; + if (tier < oldTier) { + newTime <<= oldTier - tier; + newVoltage >>= 2 * (oldTier - tier); + } else { + newTime >>= tier - oldTier; + newVoltage <<= 2 * (tier - oldTier); + } + recipe.mEUt = newVoltage; + recipe.mDuration = newTime; + return recipe; + } + + public static String subscriptNumbers(String b) { + char[] chars = b.toCharArray(); + char[] nu = new char[chars.length]; + for (int i = 0; i < chars.length; i++) { + nu[i] = switch (chars[i]) { + case '0' -> '\u2080'; + case '1' -> '\u2081'; + case '2' -> '\u2082'; + case '3' -> '\u2083'; + case '4' -> '\u2084'; + case '5' -> '\u2085'; + case '6' -> '\u2086'; + case '7' -> '\u2087'; + case '8' -> '\u2088'; + case '9' -> '\u2089'; + default -> chars[i]; + }; + } + return new String(nu); + } + + public static String subscriptNumber(Number b) { + char[] chars = Long.toString(b.longValue()) + .toCharArray(); + char[] nu = new char[chars.length]; + for (int i = 0; i < chars.length; i++) { + nu[i] = switch (chars[i]) { + case '0' -> '\u2080'; + case '1' -> '\u2081'; + case '2' -> '\u2082'; + case '3' -> '\u2083'; + case '4' -> '\u2084'; + case '5' -> '\u2085'; + case '6' -> '\u2086'; + case '7' -> '\u2087'; + case '8' -> '\u2088'; + case '9' -> '\u2089'; + default -> chars[i]; + }; + } + return new String(nu); + } + + public static String superscriptNumbers(String b) { + char[] chars = b.toCharArray(); + char[] nu = new char[chars.length]; + for (int i = 0; i < chars.length; i++) { + nu[i] = switch (chars[i]) { + case '0' -> '\u2070'; + case '1' -> '\u2071'; + case '2' -> '\u00B2'; + case '3' -> '\u00B3'; + case '4' -> '\u2074'; + case '5' -> '\u2075'; + case '6' -> '\u2076'; + case '7' -> '\u2077'; + case '8' -> '\u2078'; + case '9' -> '\u2079'; + default -> chars[i]; + }; + } + return new String(nu); + } + + public static String superscriptNumber(Number b) { + char[] chars = Long.toString(b.longValue()) + .toCharArray(); + char[] nu = new char[chars.length]; + for (int i = 0; i < chars.length; i++) { + nu[i] = switch (chars[i]) { + case '0' -> '\u2070'; + case '1' -> '\u2071'; + case '2' -> '\u00B2'; + case '3' -> '\u00B3'; + case '4' -> '\u2074'; + case '5' -> '\u2075'; + case '6' -> '\u2076'; + case '7' -> '\u2077'; + case '8' -> '\u2078'; + case '9' -> '\u2079'; + default -> chars[i]; + }; + } + return new String(nu); + } + + public static byte specialToByte(int aSpecialValue) { + byte special = 0; + switch (aSpecialValue) { + case LOWGRAVITY: + special = 1; + break; + case CLEANROOM: + special = 2; + break; + case LOWGRAVITY | CLEANROOM: + special = 3; + break; + default: + break; + } + return special; + } + + public static int calculateSv(Materials materials) { + for (BioVatLogicAdder.MaterialSvPair pair : BioVatLogicAdder.RadioHatch.getMaSv()) { + if (pair.getMaterials() + .equals(materials)) return pair.getSievert(); + } + return (int) (materials.getProtons() == 43L + ? materials.equals(Materials.NaquadahEnriched) ? 140 + : materials.equals(Materials.Naquadria) ? 150 : materials.equals(Materials.Naquadah) ? 130 : 43 + : materials.getProtons()); + } + + public static ItemStack setStackSize(ItemStack stack, int size) { + if (stack != null) stack.stackSize = size; + return stack; + } + + public static boolean checkStackAndPrefix(ItemStack itemStack) { + return itemStack != null && GTOreDictUnificator.getAssociation(itemStack) != null + && GTOreDictUnificator.getAssociation(itemStack).mPrefix != null + && GTOreDictUnificator.getAssociation(itemStack).mMaterial != null + && GTOreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial != null; + } + + public static int abstractHashGTRecipe(GTRecipe recipe) { + int hash = 31; + hash += recipe.mDuration / 20 * 31; + hash += GTUtility.getTier(recipe.mEUt) * 31; + hash += BWUtil.specialToByte(recipe.mSpecialValue) * 31; + hash += recipe.mInputs.length * 31; + for (ItemStack mInput : recipe.mInputs) { + if (mInput != null) { + hash += mInput.stackSize * 31; + hash += Item.getIdFromItem(mInput.getItem()) * 31; + } + } + hash += recipe.mOutputs.length * 31; + for (ItemStack mOutput : recipe.mOutputs) { + if (mOutput != null) { + hash += mOutput.stackSize * 31; + hash += Item.getIdFromItem(mOutput.getItem()) * 31; + } + } + hash += recipe.mFluidInputs.length * 31; + for (FluidStack mInput : recipe.mFluidInputs) { + if (mInput != null) { + hash += mInput.amount * 31; + hash += mInput.getFluidID() * 31; + } + } + hash += recipe.mFluidOutputs.length * 31; + for (FluidStack mOutput : recipe.mFluidOutputs) { + if (mOutput != null) { + hash += mOutput.amount * 31; + hash += mOutput.getFluidID() * 31; + } + } + return hash; + } + + @SuppressWarnings({ "unchecked" }) + public static T[] copyAndRemoveNulls(T[] input, Class clazz) { + List ret = Arrays.stream(input) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + if (ret.size() <= 0) return (T[]) Array.newInstance(clazz, 0); + + T[] retArr = (T[]) Array.newInstance(clazz, ret.size()); + + for (int i = 0; i < ret.size(); i++) retArr[i] = ret.get(i); + + return retArr; + } + + @Deprecated + public static int getMachineVoltageFromTier(int tier) { + return (int) (30 * Math.pow(4, tier - 1)); + } + + public static long getTierVoltage(int tier) { + return getTierVoltage((byte) tier); + } + + public static long getTierVoltage(byte tier) { + return 8L << 2 * tier; + } + + public static byte getTier(long voltage) { + if (voltage <= Integer.MAX_VALUE - 7) return GTUtility.getTier(voltage); + byte t = 0; + while (voltage > 8L) { + voltage >>= 2; + t++; + } + return t; + } + + public static String getTierName(byte tier) { + if (VN.length - 1 <= tier) return "MAX+"; + return VN[tier]; + } + + public static String getTierNameFromVoltage(long voltage) { + return getTierName(getTier(voltage)); + } + + public static boolean areStacksEqualOrNull(ItemStack aStack1, ItemStack aStack2) { + return aStack1 == null && aStack2 == null || GTUtility.areStacksEqual(aStack1, aStack2); + } + + public static boolean areStacksEqualOrEachNull(ItemStack aStack1, ItemStack aStack2) { + return aStack1 == null || aStack2 == null || GTUtility.areStacksEqual(aStack1, aStack2); + } + + public static byte getByteFromRarity(EnumRarity rarity) { + if (EnumRarity.uncommon.equals(rarity)) return 1; + if (EnumRarity.epic.equals(rarity)) return 2; + else if (EnumRarity.rare.equals(rarity)) return 3; + return 0; + } + + /** + * @deprecated Use stuff in {@link BorosilicateGlass} instead + */ + @Deprecated + public static byte getTierFromGlasMeta(int meta) { + return switch (meta) { + case 1 -> 4; + case 2, 12 -> 5; + case 3 -> 6; + case 4 -> 7; + case 5 -> 8; + case 13 -> 9; + case 14 -> 10; + default -> 3; + }; + } + + public static EnumRarity getRarityFromByte(byte b) { + return switch (b) { + case 1 -> EnumRarity.uncommon; + case 2 -> EnumRarity.rare; + case 3 -> EnumRarity.epic; + default -> EnumRarity.common; + }; + } + + public static byte getCircuitTierFromOreDictName(String name) { + return switch (name) { + case "circuitPrimitive" -> 0; + case "circuitBasic" -> 1; + case "circuitGood" -> 2; + case "circuitAdvanced" -> 3; + case "circuitData" -> 4; + case "circuitElite" -> 5; + case "circuitMaster" -> 6; + case "circuitUltimate" -> 7; + case "circuitSuperconductor" -> 8; + case "circuitInfinite" -> 9; + case "circuitBio" -> 10; + case "circuitNano", "circuitOptical" -> 11; + case "circuitPiko", "circuitExotic" -> 12; + case "circuitQuantum", "circuitCosmic" -> 13; + case "circuitTranscendent" -> 14; + default -> -1; + }; + } + + public static byte getCircuitTierFromItemStack(ItemStack stack) { + for (String oreName : getOreNames(stack)) { + byte tier = getCircuitTierFromOreDictName(oreName); + if (tier != -1) { + return tier; + } + } + return -1; + } + + public static boolean isTieredCircuit(ItemStack stack) { + return getCircuitTierFromItemStack(stack) != -1; + } + + public static List getOreNames(ItemStack stack) { + List ret = new ArrayList<>(); + for (int oreID : OreDictionary.getOreIDs(stack)) { + ret.add(OreDictionary.getOreName(oreID)); + } + return ret; + } + + public static IStructureElement ofGlassTiered(byte mintier, byte maxtier, byte notset, + BiConsumer setter, Function getter, int aDots) { + return new IStructureElement<>() { + + private final IStructureElement placementDelegate = BorosilicateGlass + .ofBoroGlass(notset, mintier, maxtier, setter, getter); + + @Override + public boolean check(T te, World world, int x, int y, int z) { + if (world.isAirBlock(x, y, z)) return false; + Block block = world.getBlock(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + + int glassTier = GlassTier.getGlassTier(block, meta); + + // If it is not a glass, the tier will be 0. + if (glassTier == 0 || glassTier == notset || glassTier < mintier || glassTier > maxtier) return false; + + if (getter.apply(te) == notset) setter.accept(te, (byte) glassTier); + return getter.apply(te) == glassTier; + } + + @Override + public boolean spawnHint(T te, World world, int x, int y, int z, ItemStack itemStack) { + StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), aDots - 1); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return this.placementDelegate.placeBlock(t, world, x, y, z, trigger); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + return this.placementDelegate.survivalPlaceBlock(t, world, x, y, z, trigger, env); + } + }; + } + + public static IStructureElement ofGlassTieredMixed(byte mintier, byte maxtier, int aDots) { + return new IStructureElement<>() { + + private final IStructureElement placementDelegate = BorosilicateGlass + .ofBoroGlass((byte) 0, mintier, maxtier, (v1, v2) -> {}, v1 -> (byte) 0); + + @Override + public boolean check(T te, World world, int x, int y, int z) { + if (world.isAirBlock(x, y, z)) return false; + Block block = world.getBlock(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + int glassTier = GlassTier.getGlassTier(block, meta); + + if (glassTier == 0) return false; // Not a glass. + return glassTier >= mintier && glassTier <= maxtier; + } + + @Override + public boolean spawnHint(T te, World world, int x, int y, int z, ItemStack itemStack) { + StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), aDots - 1); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return this.placementDelegate.placeBlock(t, world, x, y, z, trigger); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + return this.placementDelegate.survivalPlaceBlock(t, world, x, y, z, trigger, env); + } + }; + } + + private static Field sBufferedRecipeList; + + @SuppressWarnings("unchecked") + public static List getGTBufferedRecipeList() + throws SecurityException, IllegalArgumentException, IllegalAccessException { + if (sBufferedRecipeList == null) { + sBufferedRecipeList = FieldUtils.getDeclaredField(GTModHandler.class, "sBufferRecipeList", true); + } + if (sBufferedRecipeList == null) { + sBufferedRecipeList = FieldUtils.getField(GTModHandler.class, "sBufferRecipeList", true); + } + return (List) sBufferedRecipeList.get(null); + } + + public static ShapedOreRecipe createGTCraftingRecipe(ItemStack aResult, long aBitMask, Object[] aRecipe) { + return createGTCraftingRecipe( + aResult, + new Enchantment[0], + new int[0], + (aBitMask & GTModHandler.RecipeBits.MIRRORED) != 0L, + (aBitMask & GTModHandler.RecipeBits.BUFFERED) != 0L, + (aBitMask & GTModHandler.RecipeBits.KEEPNBT) != 0L, + (aBitMask & GTModHandler.RecipeBits.DISMANTLEABLE) != 0L, + (aBitMask & GTModHandler.RecipeBits.NOT_REMOVABLE) == 0L, + (aBitMask & GTModHandler.RecipeBits.REVERSIBLE) != 0L, + (aBitMask & GTModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES) != 0L, + (aBitMask & GTModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES_IF_SAME_NBT) != 0L, + (aBitMask & GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES) != 0L, + (aBitMask & GTModHandler.RecipeBits.DELETE_ALL_OTHER_NATIVE_RECIPES) != 0L, + (aBitMask & GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS) == 0L, + (aBitMask & GTModHandler.RecipeBits.ONLY_ADD_IF_THERE_IS_ANOTHER_RECIPE_FOR_IT) != 0L, + (aBitMask & GTModHandler.RecipeBits.ONLY_ADD_IF_RESULT_IS_NOT_NULL) != 0L, + aRecipe); + } + + public static ShapedOreRecipe createGTCraftingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, + int[] aEnchantmentLevelsAdded, boolean aMirrored, boolean aBuffered, boolean aKeepNBT, boolean aDismantleable, + boolean aRemovable, boolean aReversible, boolean aRemoveAllOthersWithSameOutput, + boolean aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT, boolean aRemoveAllOtherShapedsWithSameOutput, + boolean aRemoveAllOtherNativeRecipes, boolean aCheckForCollisions, + boolean aOnlyAddIfThereIsAnyRecipeOutputtingThis, boolean aOnlyAddIfResultIsNotNull, Object[] aRecipe) { + aResult = GTOreDictUnificator.get(true, aResult); + if (aOnlyAddIfResultIsNotNull && aResult == null) return null; + if (aResult != null && Items.feather.getDamage(aResult) == W) Items.feather.setDamage(aResult, 0); + if (aRecipe == null || aRecipe.length <= 0) return null; + + boolean tThereWasARecipe = false; + + for (byte i = 0; i < aRecipe.length; i++) { + if (aRecipe[i] instanceof IItemContainer itemContainer) { + aRecipe[i] = itemContainer.get(1); + continue; + } + if (aRecipe[i] instanceof Enumenum_) { + aRecipe[i] = enum_.name(); + continue; + } + if (aRecipe[i] != null && !(aRecipe[i] instanceof ItemStack) + && !(aRecipe[i] instanceof ItemData) + && !(aRecipe[i] instanceof String) + && !(aRecipe[i] instanceof Character)) { + aRecipe[i] = aRecipe[i].toString(); + } + } + + try { + StringBuilder shape = new StringBuilder(E); + int idx = 0; + if (aRecipe[idx] instanceof Boolean) { + throw new IllegalArgumentException(); + } + + ArrayList tRecipeList = new ArrayList<>(Arrays.asList(aRecipe)); + + while (aRecipe[idx] instanceof String string) { + StringBuilder s = new StringBuilder(string); + idx++; + shape.append(s); + while (s.length() < 3) s.append(" "); + if (s.length() > 3) throw new IllegalArgumentException(); + + for (char c : s.toString() + .toCharArray()) { + switch (c) { + case 'b': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolBlade.name()); + break; + case 'c': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolCrowbar.name()); + break; + case 'd': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolScrewdriver.name()); + break; + case 'f': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolFile.name()); + break; + case 'h': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolHardHammer.name()); + break; + case 'i': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolSolderingIron.name()); + break; + case 'j': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolSolderingMetal.name()); + break; + case 'k': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolKnife.name()); + break; + case 'm': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolMortar.name()); + break; + case 'p': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolDrawplate.name()); + break; + case 'r': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolSoftHammer.name()); + break; + case 's': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolSaw.name()); + break; + case 'w': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolWrench.name()); + break; + case 'x': + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolWireCutter.name()); + break; + } + } + } + + aRecipe = tRecipeList.toArray(); + + if (aRecipe[idx] instanceof Boolean) { + idx++; + } + Map tItemStackMap = new HashMap<>(); + Map tItemDataMap = new HashMap<>(); + tItemStackMap.put(' ', null); + + boolean tRemoveRecipe = true; + + for (; idx < aRecipe.length; idx += 2) { + if (aRecipe[idx] == null || aRecipe[idx + 1] == null) { + if (D1) { + GTLog.err.println( + "WARNING: Missing Item for shaped Recipe: " + + (aResult == null ? "null" : aResult.getDisplayName())); + for (Object tContent : aRecipe) GTLog.err.println(tContent); + } + return null; + } + Character chr = (Character) aRecipe[idx]; + Object in = aRecipe[idx + 1]; + if (in instanceof ItemStack) { + tItemStackMap.put(chr, GTUtility.copy(in)); + tItemDataMap.put(chr, GTOreDictUnificator.getItemData((ItemStack) in)); + } else if (in instanceof ItemData) { + String tString = in.toString(); + switch (tString) { + case "plankWood": + tItemDataMap.put(chr, new ItemData(Materials.Wood, M)); + break; + case "stoneNetherrack": + tItemDataMap.put(chr, new ItemData(Materials.Netherrack, M)); + break; + case "stoneObsidian": + tItemDataMap.put(chr, new ItemData(Materials.Obsidian, M)); + break; + case "stoneEndstone": + tItemDataMap.put(chr, new ItemData(Materials.Endstone, M)); + break; + default: + tItemDataMap.put(chr, (ItemData) in); + break; + } + ItemStack tStack = GTOreDictUnificator.getFirstOre(in, 1); + if (tStack == null) tRemoveRecipe = false; + else tItemStackMap.put(chr, tStack); + aRecipe[idx + 1] = in.toString(); + } else if (in instanceof String) { + if (in.equals(OreDictNames.craftingChest.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Wood, M * 8)); + else if (in.equals(OreDictNames.craftingBook.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Paper, M * 3)); + else if (in.equals(OreDictNames.craftingPiston.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Stone, M * 4, Materials.Wood, M * 3)); + else if (in.equals(OreDictNames.craftingFurnace.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Stone, M * 8)); + else if (in.equals(OreDictNames.craftingIndustrialDiamond.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Diamond, M)); + else if (in.equals(OreDictNames.craftingAnvil.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Iron, M * 10)); + ItemStack tStack = GTOreDictUnificator.getFirstOre(in, 1); + if (tStack == null) tRemoveRecipe = false; + else tItemStackMap.put(chr, tStack); + } else { + throw new IllegalArgumentException(); + } + } + + if (aReversible && aResult != null) { + ItemData[] tData = new ItemData[9]; + int x = -1; + for (char chr : shape.toString() + .toCharArray()) { + x++; + tData[x] = tItemDataMap.get(chr); + } + if (GTUtility.arrayContainsNonNull(tData)) + GTOreDictUnificator.addItemData(aResult, new ItemData(tData)); + } + + if (aCheckForCollisions && tRemoveRecipe) { + ItemStack[] tRecipe = new ItemStack[9]; + int x = -1; + for (char chr : shape.toString() + .toCharArray()) { + x++; + tRecipe[x] = tItemStackMap.get(chr); + if (tRecipe[x] != null && Items.feather.getDamage(tRecipe[x]) == W) + Items.feather.setDamage(tRecipe[x], 0); + } + tThereWasARecipe = GTModHandler.removeRecipe(tRecipe) != null; + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + + if (aResult == null || aResult.stackSize <= 0) return null; + + if (aRemoveAllOthersWithSameOutput || aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT + || aRemoveAllOtherShapedsWithSameOutput + || aRemoveAllOtherNativeRecipes) + tThereWasARecipe = GTModHandler.removeRecipeByOutput( + aResult, + !aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT, + aRemoveAllOtherShapedsWithSameOutput, + aRemoveAllOtherNativeRecipes) || tThereWasARecipe; + + if (aOnlyAddIfThereIsAnyRecipeOutputtingThis && !tThereWasARecipe) { + ArrayList tList = (ArrayList) CraftingManager.getInstance() + .getRecipeList(); + int tList_sS = tList.size(); + for (int i = 0; i < tList_sS && !tThereWasARecipe; i++) { + IRecipe tRecipe = tList.get(i); + if (GTModHandler.sSpecialRecipeClasses.contains( + tRecipe.getClass() + .getName())) + continue; + if (GTUtility.areStacksEqual(GTOreDictUnificator.get(tRecipe.getRecipeOutput()), aResult, true)) { + tList.remove(i); + i--; + tList_sS = tList.size(); + tThereWasARecipe = true; + } + } + } + + if (Items.feather.getDamage(aResult) == W || Items.feather.getDamage(aResult) < 0) + Items.feather.setDamage(aResult, 0); + + GTUtility.updateItemStack(aResult); + + return new GTShapedRecipe( + GTUtility.copy(aResult), + aDismantleable, + aRemovable, + aKeepNBT, + aEnchantmentsAdded, + aEnchantmentLevelsAdded, + aRecipe).setMirrored(aMirrored); + } + + public static void shortSleep(long nanos) { + try { + long start = System.nanoTime(); + long end; + do { + end = System.nanoTime(); + } while (start + nanos >= end); + } catch (Exception e) { + MainMod.LOGGER.catching(e); + } + } +} diff --git a/src/main/java/bartworks/util/BioCulture.java b/src/main/java/bartworks/util/BioCulture.java new file mode 100644 index 0000000000..3e4f64fd77 --- /dev/null +++ b/src/main/java/bartworks/util/BioCulture.java @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import java.awt.Color; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Objects; + +import net.minecraft.item.EnumRarity; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import gregtech.api.interfaces.IColorModulationContainer; +import gregtech.api.util.GTLanguageManager; + +public class BioCulture extends BioData implements IColorModulationContainer { + + public static final ArrayList BIO_CULTURE_ARRAY_LIST = new ArrayList<>(); + public static final BioCulture NULLCULTURE = BioCulture + .createAndRegisterBioCulture(Color.BLUE, "", BioPlasmid.NULLPLASMID, BioDNA.NULLDNA, false); // fallback + // NULL + // culture, + // also Blue =) + + public String getLocalisedName() { + return GTLanguageManager.getTranslation(this.getName()); + } + + public void setLocalisedName(String localisedName) { + GTLanguageManager.addStringLocalization(this.getName(), localisedName); + } + + Color color; + BioPlasmid plasmid; + BioDNA dDNA; + boolean bBreedable; + Fluid mFluid; + + protected BioCulture(Color color, String name, int ID, BioPlasmid plasmid, BioDNA dDNA, EnumRarity rarity, + boolean bBreedable) { + super(name, ID, rarity); + this.color = color; + this.plasmid = plasmid; + this.dDNA = dDNA; + this.bBreedable = bBreedable; + } + + protected BioCulture(Color color, String name, int ID, BioPlasmid plasmid, BioDNA dDNA) { + super(name, ID, dDNA.getRarity()); + this.color = color; + this.plasmid = plasmid; + this.dDNA = dDNA; + } + + public static BioCulture createAndRegisterBioCulture(Color color, String name, BioPlasmid plasmid, BioDNA dna, + EnumRarity rarity, boolean breedable) { + BioCulture ret = new BioCulture(color, name, BIO_CULTURE_ARRAY_LIST.size(), plasmid, dna, rarity, breedable); + BIO_CULTURE_ARRAY_LIST.add(ret); + return ret; + } + + public static BioCulture createAndRegisterBioCulture(Color color, String name, BioPlasmid plasmid, BioDNA dna, + boolean breedable) { + BioCulture ret = new BioCulture( + color, + name, + BIO_CULTURE_ARRAY_LIST.size(), + plasmid, + dna, + dna.getRarity(), + breedable); + BIO_CULTURE_ARRAY_LIST.add(ret); + return ret; + } + + public static NBTTagCompound getNBTTagFromCulture(BioCulture bioCulture) { + if (bioCulture == null) return new NBTTagCompound(); + NBTTagCompound ret = new NBTTagCompound(); + ret.setString("Name", bioCulture.name); + // ret.setInteger("ID", bioCulture.ID); + ret.setIntArray( + "Color", + new int[] { bioCulture.color.getRed(), bioCulture.color.getGreen(), bioCulture.color.getBlue() }); + ret.setTag("Plasmid", BioData.getNBTTagFromBioData(BioData.convertBioPlasmidToBioData(bioCulture.plasmid))); + ret.setTag("DNA", BioData.getNBTTagFromBioData(BioData.convertBioDNAToBioData(bioCulture.dDNA))); + ret.setBoolean("Breedable", bioCulture.bBreedable); + ret.setByte("Rarety", BWUtil.getByteFromRarity(bioCulture.rarity)); + if (bioCulture.bBreedable) ret.setString( + "Fluid", + bioCulture.getFluid() + .getName()); + return ret; + } + + public static BioCulture getBioCultureFromNBTTag(NBTTagCompound tag) { + if (tag == null || tag.getIntArray("Color").length == 0) return null; + BioCulture ret = getBioCulture(tag.getString("Name")); + + if (ret == null) ret = createAndRegisterBioCulture( + new Color(tag.getIntArray("Color")[0], tag.getIntArray("Color")[1], tag.getIntArray("Color")[2]), + tag.getString("Name"), + BioPlasmid.convertDataToPlasmid(getBioDataFromNBTTag(tag.getCompoundTag("Plasmid"))), + BioDNA.convertDataToDNA(getBioDataFromNBTTag(tag.getCompoundTag("DNA"))), + BWUtil.getRarityFromByte(tag.getByte("Rarety")), + tag.getBoolean("Breedable")); + if (ret.bBreedable) ret.setFluid(FluidRegistry.getFluid(tag.getString("Fluid"))); + if (ret.getFluidNotSet()) // should never happen, but better safe than sorry + ret.setbBreedable(false); + return ret; + } + + public static BioCulture getBioCulture(String Name) { + if (Name == null || Name.isEmpty()) return null; + for (BioCulture b : BIO_CULTURE_ARRAY_LIST) if (b.name.equals(Name)) return b; + return null; + } + + public static BioCulture getBioCulture(BioDNA DNA) { + for (BioCulture b : BIO_CULTURE_ARRAY_LIST) if (b.getdDNA() + .equals(DNA)) return b; + return null; + } + + public Fluid getFluid() { + if (this.mFluid == null) + throw new IllegalStateException("Fluid has not been set yet! The issuring Culture is: " + this.name); + return this.mFluid; + } + + public void setFluid(Fluid mFluid) { + this.mFluid = mFluid; + } + + public boolean getFluidNotSet() { + return this.mFluid == null && this.isBreedable(); + } + + public boolean isBreedable() { + return this.bBreedable; + } + + public void setbBreedable(boolean bBreedable) { + this.bBreedable = bBreedable; + } + + public int getColorRGB() { + return BWColorUtil + .getColorFromRGBArray(new int[] { this.color.getRed(), this.color.getGreen(), this.color.getBlue() }); + } + + public Color getColor() { + return this.color; + } + + public void setColor(Color color) { + this.color = color; + } + + public BioPlasmid getPlasmid() { + return this.plasmid; + } + + public BioCulture setPlasmid(BioPlasmid plasmid) { + return this.checkForExisting( + new BioCulture(this.color, this.name, this.ID, plasmid, this.dDNA, this.rarity, this.bBreedable)); + } + + private BioCulture checkForExisting(BioCulture culture) { + if (culture == null) return null; + for (BioCulture bc : BioCulture.BIO_CULTURE_ARRAY_LIST) if (culture.getdDNA() + .equals(bc.getdDNA()) + && culture.getPlasmid() + .equals(bc.getPlasmid())) + return bc; + return culture; + } + + public BioCulture setPlasmidUnsafe(BioPlasmid plasmid) { + this.plasmid = plasmid; + return this; + } + + public BioDNA getdDNA() { + return this.dDNA; + } + + public BioCulture setdDNA(BioDNA dDNA) { + return this.checkForExisting( + new BioCulture(this.color, this.name, this.ID, this.plasmid, dDNA, this.rarity, this.bBreedable)); + } + + public BioCulture setdDNAUnsafe(BioDNA dDNA) { + this.dDNA = dDNA; + return this; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || this.getClass() != o.getClass() || !super.equals(o)) return false; + BioCulture culture = (BioCulture) o; + return this.isBreedable() == culture.isBreedable() && Objects.equals(this.getColor(), culture.getColor()) + && Objects.equals(this.getPlasmid(), culture.getPlasmid()) + && Objects.equals(this.getdDNA(), culture.getdDNA()) + && Objects.equals(this.mFluid, culture.mFluid); + } + + @Override + public int hashCode() { + return MurmurHash3.murmurhash3_x86_32( + ByteBuffer.allocate(17) + .putInt( + MurmurHash3.murmurhash3_x86_32( + this.getName(), + 0, + this.getName() + .length(), + 31)) + .putInt(this.getColorRGB()) + .putInt(this.getPlasmid().ID) + .putInt(this.getdDNA().ID) + .put((byte) (this.isBreedable() ? 1 : 0)) + .array(), + 0, + 17, + 31); + } + + @Override + public short[] getRGBA() { + return new short[] { (short) this.getColor() + .getRed(), + (short) this.getColor() + .getGreen(), + (short) this.getColor() + .getBlue(), + (short) this.getColor() + .getAlpha() }; + } +} diff --git a/src/main/java/bartworks/util/BioDNA.java b/src/main/java/bartworks/util/BioDNA.java new file mode 100644 index 0000000000..6233218e67 --- /dev/null +++ b/src/main/java/bartworks/util/BioDNA.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import net.minecraft.item.EnumRarity; + +public class BioDNA extends BioData { + + public static final BioDNA NULLDNA = createAndRegisterBioDNA("", EnumRarity.epic); + + protected BioDNA(String name, int ID, EnumRarity rarity) { + super(name, ID, rarity); + } + + protected BioDNA(BioData bioData) { + super(bioData); + this.name = bioData.name; + this.ID = bioData.ID; + this.rarity = bioData.rarity; + } + + public static BioDNA convertDataToDNA(BioData bioData) { + return new BioDNA(bioData); + } + + public static BioDNA createAndRegisterBioDNA(String aName, EnumRarity rarity) { + BioData ret = BioData.createAndRegisterBioData(aName, rarity); + return new BioDNA(ret); + } + + public static BioDNA createAndRegisterBioDNA(String aName, EnumRarity rarity, int chance, int tier) { + BioData ret = BioData.createAndRegisterBioData(aName, rarity, chance, tier); + return new BioDNA(ret); + } + + @Override + public String toString() { + return "BioDNA{" + "name='" + this.name + '\'' + ", ID=" + this.ID + '}'; + } +} diff --git a/src/main/java/bartworks/util/BioData.java b/src/main/java/bartworks/util/BioData.java new file mode 100644 index 0000000000..6622476ca5 --- /dev/null +++ b/src/main/java/bartworks/util/BioData.java @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.Objects; + +import net.minecraft.item.EnumRarity; +import net.minecraft.nbt.NBTTagCompound; + +public class BioData { + + public static final ArrayList BIO_DATA_ARRAY_LIST = new ArrayList<>(); + + protected String name; + protected int ID; + protected EnumRarity rarity; + protected int chance; + protected int tier; + + protected BioData(String name, int ID, EnumRarity rarity, int chance, int tier) { + this.name = name; + this.ID = ID; + this.rarity = rarity; + this.chance = chance; + this.tier = tier; + } + + protected BioData(String name, int ID, EnumRarity rarity) { + this.name = name; + this.ID = ID; + this.rarity = rarity; + this.chance = 7500; + this.tier = 0; + } + + protected BioData(BioData bioData) { + this.rarity = bioData.rarity; + this.name = bioData.name; + this.ID = bioData.ID; + this.chance = bioData.chance; + this.tier = bioData.tier; + } + + public static BioData convertBioPlasmidToBioData(BioPlasmid bioPlasmid) { + return new BioData(bioPlasmid.name, bioPlasmid.ID, bioPlasmid.rarity, bioPlasmid.chance, bioPlasmid.tier); + } + + public static BioData convertBioDNAToBioData(BioDNA bioDNA) { + return new BioData(bioDNA.name, bioDNA.ID, bioDNA.rarity, bioDNA.chance, bioDNA.tier); + } + + public static BioData createAndRegisterBioData(String aName, EnumRarity rarity, int chance, int tier) { + BioData ret = new BioData(aName, BIO_DATA_ARRAY_LIST.size(), rarity, chance, tier); + BIO_DATA_ARRAY_LIST.add(ret); + return ret; + } + + public static BioData createAndRegisterBioData(String aName, EnumRarity rarity) { + BioData ret = new BioData(aName, BIO_DATA_ARRAY_LIST.size(), rarity); + BIO_DATA_ARRAY_LIST.add(ret); + return ret; + } + + public static NBTTagCompound getNBTTagFromBioData(BioData bioData) { + NBTTagCompound ret = new NBTTagCompound(); + ret.setByte("Rarity", BWUtil.getByteFromRarity(bioData.rarity)); + ret.setString("Name", bioData.name); + // ret.setInteger("ID", bioData.ID); buggy when load Order changes + ret.setInteger("Chance", bioData.chance); + ret.setInteger("Tier", bioData.tier); + return ret; + } + + public static BioData getBioDataFromNBTTag(NBTTagCompound tag) { + if (tag == null) return null; + return getBioDataFromName(tag.getString("Name")); + } + + public static BioData getBioDataFromName(String Name) { + for (BioData bd : BIO_DATA_ARRAY_LIST) if (bd.name.equals(Name)) return bd; + return null; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || this.getClass() != o.getClass()) return false; + BioData bioData = (BioData) o; + return this.getID() == bioData.getID() + || this.getChance() == bioData.getChance() && this.getTier() == bioData.getTier() + && Objects.equals(this.getName(), bioData.getName()) + && this.getRarity() == bioData.getRarity(); + } + + @Override + public int hashCode() { + return MurmurHash3.murmurhash3_x86_32( + ByteBuffer.allocate(13) + .putInt( + MurmurHash3.murmurhash3_x86_32( + this.getName(), + 0, + this.getName() + .length(), + 31)) + .put(BWUtil.getByteFromRarity(this.getRarity())) + .putInt(this.getChance()) + .putInt(this.getTier()) + .array(), + 0, + 13, + 31); + } + + public int getTier() { + return this.tier; + } + + public void setTier(int tier) { + this.tier = tier; + } + + @Override + public String toString() { + return "BioData{" + "name='" + this.name + '\'' + ", ID=" + this.ID + '}'; + } + + public EnumRarity getRarity() { + return this.rarity; + } + + public void setRarity(EnumRarity rarity) { + this.rarity = rarity; + } + + public int getChance() { + return this.chance; + } + + public void setChance(int chance) { + this.chance = chance; + } + + public String getName() { + return this.name; + } + + public void setName(String name) { + this.name = name; + } + + /** + * DO NOT USE GET ID TO GET THE OBJECT! THIS SHOULD ONLY BE USED FOR COMPARISON! + * + * @return the position in the loading list + */ + public int getID() { + return this.ID; + } +} diff --git a/src/main/java/bartworks/util/BioPlasmid.java b/src/main/java/bartworks/util/BioPlasmid.java new file mode 100644 index 0000000000..0ab26b3d3c --- /dev/null +++ b/src/main/java/bartworks/util/BioPlasmid.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import net.minecraft.item.EnumRarity; + +public class BioPlasmid extends BioData { + + public static final BioPlasmid NULLPLASMID = convertDataToPlasmid(BioData.convertBioDNAToBioData(BioDNA.NULLDNA)); + + private BioPlasmid(String name, int ID, EnumRarity rarity) { + super(name, ID, rarity); + } + + protected BioPlasmid(BioData bioData) { + super(bioData); + this.name = bioData.name; + this.ID = bioData.ID; + this.rarity = bioData.rarity; + } + + public static BioPlasmid convertDataToPlasmid(BioData bioData) { + return new BioPlasmid(bioData); + } + + public static BioPlasmid createAndRegisterBioPlasmid(String aName, EnumRarity rarity) { + BioData ret = BioData.createAndRegisterBioData(aName, rarity); + return new BioPlasmid(ret); + } + + public static BioPlasmid createAndRegisterBioPlasmid(String aName, EnumRarity rarity, int chance, int tier) { + BioData ret = BioData.createAndRegisterBioData(aName, rarity, chance, tier); + return new BioPlasmid(ret); + } + + @Override + public String toString() { + return "BioPlasmid{" + "name='" + this.name + '\'' + ", ID=" + this.ID + '}'; + } +} diff --git a/src/main/java/bartworks/util/CachedReflectionUtils.java b/src/main/java/bartworks/util/CachedReflectionUtils.java new file mode 100644 index 0000000000..a02b644b4a --- /dev/null +++ b/src/main/java/bartworks/util/CachedReflectionUtils.java @@ -0,0 +1,31 @@ +package bartworks.util; + +import java.lang.reflect.Field; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import org.apache.commons.lang3.reflect.FieldUtils; + +public class CachedReflectionUtils { + + private static final ClassValue> fields = new ConcurrentMapClassValue(); + private static final ClassValue> declaredFields = new ConcurrentMapClassValue(); + + public static Field getField(final Class cls, final String fieldName) { + return fields.get(cls) + .computeIfAbsent(fieldName, f -> FieldUtils.getField(cls, f, true)); + } + + public static Field getDeclaredField(final Class cls, final String fieldName) { + return declaredFields.get(cls) + .computeIfAbsent(fieldName, f -> FieldUtils.getDeclaredField(cls, f, true)); + } + + private static class ConcurrentMapClassValue extends ClassValue> { + + @Override + protected Map computeValue(Class type) { + return new ConcurrentHashMap<>(); + } + } +} diff --git a/src/main/java/bartworks/util/ConnectedBlocksChecker.java b/src/main/java/bartworks/util/ConnectedBlocksChecker.java new file mode 100644 index 0000000000..e89d2b7df7 --- /dev/null +++ b/src/main/java/bartworks/util/ConnectedBlocksChecker.java @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import java.util.HashSet; + +import net.minecraft.block.Block; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class ConnectedBlocksChecker { + + public final HashSet hashset = new HashSet<>(2048); + + public static byte check_sourroundings(Coords C, Block b) { + byte ret = 0; + World w = DimensionManager.getWorld(C.wID); + int x = C.x, y = C.y, z = C.z; + + if (w.getBlock(x + 1, y, z) + .equals(b)) ret = (byte) (ret | 0b000100); + + if (w.getBlock(x - 1, y, z) + .equals(b)) ret = (byte) (ret | 0b001000); + + if (w.getBlock(x, y, z + 1) + .equals(b)) ret = (byte) (ret | 0b010000); + + if (w.getBlock(x, y, z - 1) + .equals(b)) ret = (byte) (ret | 0b100000); + + if (w.getBlock(x, y + 1, z) + .equals(b)) ret = (byte) (ret | 0b000001); + + if (w.getBlock(x, y - 1, z) + .equals(b)) ret = (byte) (ret | 0b000010); + + return ret; + } + + public int get_connected(World w, int x, int y, int z, Block b) { + int ret = 0; + + int wID = w.provider.dimensionId; + + byte sides = this.check_sourroundings(w, x, y, z, b); + + if ((sides | 0b111011) == 0b111111 && !this.hashset.contains(new Coords(x + 1, y, z, wID))) { + ret++; + ret += this.get_connected(w, x + 1, y, z, b); + } + + if ((sides | 0b110111) == 0b111111 && !this.hashset.contains(new Coords(x - 1, y, z, wID))) { + ret++; + ret += this.get_connected(w, x - 1, y, z, b); + } + + if ((sides | 0b101111) == 0b111111 && !this.hashset.contains(new Coords(x, y, z + 1, wID))) { + ret++; + ret += this.get_connected(w, x, y, z + 1, b); + } + + if ((sides | 0b011111) == 0b111111 && !this.hashset.contains(new Coords(x, y, z - 1, wID))) { + ret++; + ret += this.get_connected(w, x, y, z - 1, b); + } + + if ((sides | 0b111110) == 0b111111 && !this.hashset.contains(new Coords(x, y + 1, z, wID))) { + ret++; + ret += this.get_connected(w, x, y + 1, z, b); + } + + if ((sides | 0b111101) == 0b111111 && !this.hashset.contains(new Coords(x, y - 1, z, wID))) { + ret++; + ret += this.get_connected(w, x, y - 1, z, b); + } + + return ret; + } + + public byte check_sourroundings(World w, int x, int y, int z, Block b) { + + byte ret = 0; + int wID = w.provider.dimensionId; + + if (this.hashset.contains(new Coords(x, y, z, wID))) return ret; + + this.hashset.add(new Coords(x, y, z, wID)); + + if (w.getBlock(x + 1, y, z) + .equals(b)) ret = (byte) (ret | 0b000100); + + if (w.getBlock(x - 1, y, z) + .equals(b)) ret = (byte) (ret | 0b001000); + + if (w.getBlock(x, y, z + 1) + .equals(b)) ret = (byte) (ret | 0b010000); + + if (w.getBlock(x, y, z - 1) + .equals(b)) ret = (byte) (ret | 0b100000); + + if (w.getBlock(x, y + 1, z) + .equals(b)) ret = (byte) (ret | 0b000001); + + if (w.getBlock(x, y - 1, z) + .equals(b)) ret = (byte) (ret | 0b000010); + + return ret; + } + + public boolean get_meta_of_sideblocks(World w, int n, int[] xyz, boolean GT) { + + int wID = w.provider.dimensionId; + Coords Controller = new Coords(xyz[0], xyz[1], xyz[2], wID); + + for (Coords C : this.hashset) { + if (GT) { + if (!new Coords(C.x, C.y + 1, C.z, wID).equals(Controller) + && w.getTileEntity(C.x, C.y + 1, C.z) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + if (!new Coords(C.x, C.y - 1, C.z, wID).equals(Controller) + && w.getTileEntity(C.x, C.y - 1, C.z) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + if (!new Coords(C.x + 1, C.y, C.z, wID).equals(Controller) + && w.getTileEntity(C.x + 1, C.y, C.z) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + if (!new Coords(C.x - 1, C.y, C.z, wID).equals(Controller) + && w.getTileEntity(C.x - 1, C.y, C.z) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + if (!new Coords(C.x, C.y, C.z + 1, wID).equals(Controller) + && w.getTileEntity(C.x, C.y, C.z + 1) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + if (!new Coords(C.x, C.y, C.z - 1, wID).equals(Controller) + && w.getTileEntity(C.x, C.y, C.z - 1) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + } else { + if (n == w.getBlockMetadata(C.x, C.y + 1, C.z) && !new Coords(C.x, C.y + 1, C.z, wID).equals(Controller) + || n == w.getBlockMetadata(C.x, C.y - 1, C.z) + && !new Coords(C.x, C.y - 1, C.z, wID).equals(Controller)) { + return true; + } + if (n == w.getBlockMetadata(C.x + 1, C.y, C.z) + && !new Coords(C.x + 1, C.y, C.z, wID).equals(Controller)) { + return true; + } + if (n == w.getBlockMetadata(C.x - 1, C.y, C.z) + && !new Coords(C.x - 1, C.y, C.z, wID).equals(Controller)) { + return true; + } + if (n == w.getBlockMetadata(C.x, C.y, C.z + 1) + && !new Coords(C.x, C.y, C.z + 1, wID).equals(Controller)) { + return true; + } + if (n == w.getBlockMetadata(C.x, C.y, C.z - 1) + && !new Coords(C.x, C.y, C.z - 1, wID).equals(Controller)) { + return true; + } + } + } + return false; + } +} diff --git a/src/main/java/bartworks/util/ConnectedBlocksCheckerIteration.java b/src/main/java/bartworks/util/ConnectedBlocksCheckerIteration.java new file mode 100644 index 0000000000..a0c9d95b70 --- /dev/null +++ b/src/main/java/bartworks/util/ConnectedBlocksCheckerIteration.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.Queue; + +import net.minecraft.block.Block; +import net.minecraft.world.World; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +/** + * This implementation is for some reason slower than the Recursive Check.... For ~3400 blocks this takes 8ms, the + * Recursive Check 5ms. + */ +public class ConnectedBlocksCheckerIteration { + + public final HashSet hashset = new HashSet<>(2048); + public final HashSet checked = new HashSet<>(4096); + private final Queue kwoe = new LinkedList<>(); + + public long get_connected(World w, int x, int y, int z, Block b) { + this.kwoe.add(new Coords(x, y, z, w.provider.dimensionId)); + this.hashset.add(new Coords(x, y, z, w.provider.dimensionId)); + while (!this.kwoe.isEmpty()) { + Coords tocheck = this.kwoe.poll(); + int wID = w.provider.dimensionId; + this.checked.add(tocheck); + Coords c; + if (!this.checked.contains(c = new Coords(tocheck.x + 1, tocheck.y, tocheck.z, wID)) + && w.getBlock(tocheck.x + 1, tocheck.y, tocheck.z) + .equals(b)) { + this.kwoe.add(c); + this.hashset.add(c); + } + if (!this.checked.contains(c = new Coords(tocheck.x - 1, tocheck.y, tocheck.z, wID)) + && w.getBlock(tocheck.x - 1, tocheck.y, tocheck.z) + .equals(b)) { + this.kwoe.add(c); + this.hashset.add(c); + } + if (!this.checked.contains(c = new Coords(tocheck.x, tocheck.y, tocheck.z + 1, wID)) + && w.getBlock(tocheck.x, tocheck.y, tocheck.z + 1) + .equals(b)) { + this.kwoe.add(c); + this.hashset.add(c); + } + if (!this.checked.contains(c = new Coords(tocheck.x, tocheck.y, tocheck.z - 1, wID)) + && w.getBlock(tocheck.x, tocheck.y, tocheck.z - 1) + .equals(b)) { + this.kwoe.add(c); + this.hashset.add(c); + } + if (!this.checked.contains(c = new Coords(tocheck.x, tocheck.y + 1, tocheck.z, wID)) + && w.getBlock(tocheck.x, tocheck.y + 1, tocheck.z) + .equals(b)) { + this.kwoe.add(c); + this.hashset.add(c); + } + if (!this.checked.contains(c = new Coords(tocheck.x, tocheck.y - 1, tocheck.z, wID)) + && w.getBlock(tocheck.x, tocheck.y - 1, tocheck.z) + .equals(b)) { + this.kwoe.add(c); + this.hashset.add(c); + } + } + return this.hashset.size(); + } + + public boolean get_meta_of_sideblocks(World w, int n, int[] xyz, boolean GT) { + + int wID = w.provider.dimensionId; + Coords Controller = new Coords(xyz[0], xyz[1], xyz[2], wID); + + for (Coords C : this.hashset) { + if (GT) { + if (!new Coords(C.x, C.y + 1, C.z, wID).equals(Controller) + && w.getTileEntity(C.x, C.y + 1, C.z) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + if (!new Coords(C.x, C.y - 1, C.z, wID).equals(Controller) + && w.getTileEntity(C.x, C.y - 1, C.z) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + if (!new Coords(C.x + 1, C.y, C.z, wID).equals(Controller) + && w.getTileEntity(C.x + 1, C.y, C.z) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + if (!new Coords(C.x - 1, C.y, C.z, wID).equals(Controller) + && w.getTileEntity(C.x - 1, C.y, C.z) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + if (!new Coords(C.x, C.y, C.z + 1, wID).equals(Controller) + && w.getTileEntity(C.x, C.y, C.z + 1) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + if (!new Coords(C.x, C.y, C.z - 1, wID).equals(Controller) + && w.getTileEntity(C.x, C.y, C.z - 1) instanceof IGregTechTileEntity gtTE + && gtTE.getMetaTileID() == n) { + return true; + } + } else { + if (n == w.getBlockMetadata(C.x, C.y + 1, C.z) && !new Coords(C.x, C.y + 1, C.z, wID).equals(Controller) + || n == w.getBlockMetadata(C.x, C.y - 1, C.z) + && !new Coords(C.x, C.y - 1, C.z, wID).equals(Controller)) { + return true; + } + if (n == w.getBlockMetadata(C.x + 1, C.y, C.z) + && !new Coords(C.x + 1, C.y, C.z, wID).equals(Controller)) { + return true; + } + if (n == w.getBlockMetadata(C.x - 1, C.y, C.z) + && !new Coords(C.x - 1, C.y, C.z, wID).equals(Controller)) { + return true; + } + if (n == w.getBlockMetadata(C.x, C.y, C.z + 1) + && !new Coords(C.x, C.y, C.z + 1, wID).equals(Controller)) { + return true; + } + if (n == w.getBlockMetadata(C.x, C.y, C.z - 1) + && !new Coords(C.x, C.y, C.z - 1, wID).equals(Controller)) { + return true; + } + } + } + return false; + } +} diff --git a/src/main/java/bartworks/util/Coords.java b/src/main/java/bartworks/util/Coords.java new file mode 100644 index 0000000000..7458c6f4e6 --- /dev/null +++ b/src/main/java/bartworks/util/Coords.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import net.minecraftforge.common.util.ForgeDirection; + +public class Coords { + + public int x, z, wID; + public short y; + + public Coords(int x, int y, int z, int wID) { + this(x, y, z); + this.wID = wID; + } + + public Coords(int x, int y, int z) { + this.x = x; + this.y = (short) y; + this.z = z; + this.wID = 0; + } + + public Coords getCoordsFromSide(ForgeDirection direction) { + return switch (direction) { + case UP -> new Coords(this.x, this.y + 1, this.z, this.wID); + case DOWN -> new Coords(this.x, this.y - 1, this.z, this.wID); + case WEST -> new Coords(this.x - 1, this.y, this.z, this.wID); + case EAST -> new Coords(this.x + 1, this.y, this.z, this.wID); + case NORTH -> new Coords(this.x, this.y, this.z - 1, this.wID); + case SOUTH -> new Coords(this.x, this.y, this.z + 1, this.wID); + default -> throw new UnsupportedOperationException("This is impossible."); + }; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || this.getClass() != o.getClass()) return false; + Coords coords = (Coords) o; + return this.x == coords.x && this.y == coords.y && this.z == coords.z && this.wID == coords.wID; + } + + @Override + public int hashCode() { + byte[] data = new byte[14]; + data[0] = (byte) (this.x & 0xff); + data[1] = (byte) (this.x >> 4 & 0xff); + data[2] = (byte) (this.x >> 8 & 0xff); + data[3] = (byte) (this.x >> 12 & 0xff); + data[4] = (byte) (this.y & 0xff); + data[5] = (byte) (this.y >> 4 & 0xff); + data[6] = (byte) (this.z & 0xff); + data[7] = (byte) (this.z >> 4 & 0xff); + data[8] = (byte) (this.z >> 8 & 0xff); + data[9] = (byte) (this.z >> 12 & 0xff); + data[10] = (byte) (this.wID & 0xff); + data[11] = (byte) (this.wID >> 4 & 0xff); + data[12] = (byte) (this.wID >> 8 & 0xff); + data[13] = (byte) (this.wID >> 12 & 0xff); + return MurmurHash3.murmurhash3_x86_32(data, 0, 14, 31); + } + + @Override + public String toString() { + return this.x + "," + this.y + "," + this.z + "," + this.wID; + } +} diff --git a/src/main/java/bartworks/util/EnumUtils.java b/src/main/java/bartworks/util/EnumUtils.java new file mode 100644 index 0000000000..e443e38d65 --- /dev/null +++ b/src/main/java/bartworks/util/EnumUtils.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import net.minecraftforge.common.util.EnumHelper; + +import gregtech.api.enums.Element; +import gregtech.api.enums.OrePrefixes; + +public class EnumUtils { + + private EnumUtils() {} + + public static OrePrefixes addNewOrePrefix(String enumName, String aRegularLocalName, String aLocalizedMaterialPre, + String aLocalizedMaterialPost, boolean aIsUnificatable, boolean aIsMaterialBased, boolean aIsSelfReferencing, + boolean aIsContainer, boolean aDontUnificateActively, boolean aIsUsedForBlocks, boolean aAllowNormalRecycling, + boolean aGenerateDefaultItem, boolean aIsEnchantable, boolean aIsUsedForOreProcessing, + int aMaterialGenerationBits, long aMaterialAmount, int aDefaultStackSize, int aTextureindex) { + return EnumHelper.addEnum( + OrePrefixes.class, + enumName, + new Class[] { String.class, String.class, String.class, boolean.class, boolean.class, boolean.class, + boolean.class, boolean.class, boolean.class, boolean.class, boolean.class, boolean.class, boolean.class, + int.class, long.class, int.class, int.class }, + new Object[] { aRegularLocalName, aLocalizedMaterialPre, aLocalizedMaterialPost, aIsUnificatable, + aIsMaterialBased, aIsSelfReferencing, aIsContainer, aDontUnificateActively, aIsUsedForBlocks, + aAllowNormalRecycling, aGenerateDefaultItem, aIsEnchantable, aIsUsedForOreProcessing, + aMaterialGenerationBits, aMaterialAmount, aDefaultStackSize, aTextureindex }); + } + + public static Element createNewElement(String enumName, long aProtons, long aNeutrons, long aAdditionalMass, + long aHalfLifeSeconds, String aDecayTo, String aName, boolean aIsIsotope) { + return EnumHelper.addEnum( + Element.class, + enumName, + new Class[] { long.class, long.class, long.class, long.class, String.class, String.class, boolean.class }, + new Object[] { aProtons, aNeutrons, aAdditionalMass, aHalfLifeSeconds, aDecayTo, aName, aIsIsotope }); + } +} diff --git a/src/main/java/bartworks/util/MathUtils.java b/src/main/java/bartworks/util/MathUtils.java new file mode 100644 index 0000000000..5c677dd437 --- /dev/null +++ b/src/main/java/bartworks/util/MathUtils.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +/* + * Faster implementations for Math stuff + */ +@SuppressWarnings("unused") +public class MathUtils { + + public static long floorLong(double x) { + if (Double.isInfinite(x) || Double.isNaN(x)) return (long) x; + long xi = (long) x; + return x < xi ? xi - 1 : xi; + } + + public static long ceilLong(double x) { + if (Double.isInfinite(x) || Double.isNaN(x)) return (long) x; + long xi = (long) x; + return x > xi ? xi + 1 : xi; + } + + public static int floorInt(double x) { + if (Double.isInfinite(x) || Double.isNaN(x)) return (int) x; + int xi = (int) x; + return x < xi ? xi - 1 : xi; + } + + public static int ceilInt(float x) { + if (Float.isInfinite(x) || Float.isNaN(x)) return (int) x; + int xi = (int) x; + return x > xi ? xi + 1 : xi; + } + + public static int ceilInt(double x) { + if (Double.isInfinite(x) || Double.isNaN(x)) return (int) x; + int xi = (int) x; + return x > xi ? xi + 1 : xi; + } + + public static double floor(double x) { + if (Double.isInfinite(x) || Double.isNaN(x)) return x; + int xi = (int) x; + return x < xi ? xi - 1 : xi; + } + + public static double ceil(double x) { + if (Double.isInfinite(x) || Double.isNaN(x)) return x; + int xi = (int) x; + return x > xi ? xi + 1 : xi; + } + + public static byte clamp(byte amount, byte min, byte max) { + byte inner = amount <= max ? amount : max; + return min >= inner ? min : inner; + } + + public static short clamp(short amount, short min, short max) { + short inner = amount <= max ? amount : max; + return min >= inner ? min : inner; + } + + public static int clamp(int amount, int min, int max) { + return Math.max(min, Math.min(amount, max)); + } + + public static long clamp(long amount, long min, long max) { + return Math.max(min, Math.min(amount, max)); + } + + public static float clamp(float amount, float min, float max) { + return Math.max(min, Math.min(amount, max)); + } + + public static double clamp(double amount, double min, double max) { + return Math.max(min, Math.min(amount, max)); + } + + public static > T clamp(T val, T min, T max) { + return val.compareTo(min) < 0 ? min : val.compareTo(max) > 0 ? max : val; + } + + public static int wrap(int input, int bound) { + return (input % bound + bound) % bound; + } + + public static long wrap(long input, long bound) { + return (input % bound + bound) % bound; + } + + public static double wrap(double input, double bound) { + return (input % bound + bound) % bound; + } + + public static float wrap(float input, float bound) { + return (input % bound + bound) % bound; + } + + public static float tanh(float x) { + float x2 = x * x; + float a = x * (135135.0f + x2 * (17325.0f + x2 * (378.0f + x2))); + float b = 135135.0f + x2 * (62370.0f + x2 * (3150.0f + x2 * 28.0f)); + return clamp(a / b, -1, 1); + } +} diff --git a/src/main/java/bartworks/util/MurmurHash3.java b/src/main/java/bartworks/util/MurmurHash3.java new file mode 100644 index 0000000000..825c83cca2 --- /dev/null +++ b/src/main/java/bartworks/util/MurmurHash3.java @@ -0,0 +1,306 @@ +/* + * The MurmurHash3 algorithm was created by Austin Appleby and placed in the public domain. This java port was authored + * by Yonik Seeley and also placed into the public domain. The author hereby disclaims copyright to this source code. + *

This produces exactly the same hash values as the final C++ version of MurmurHash3 and is thus suitable for + * producing the same hash values across platforms.

The 32 bit x86 version of this hash should be the fastest + * variant for relatively short keys like ids. murmurhash3_x64_128 is a good choice for longer strings or if you need + * more than 32 bits of hash.

Note - The x86 and x64 versions do _not_ produce the same results, as the algorithms + * are optimized for their respective platforms.

See http://github.com/yonik/java_util for future updates to this + * file. Special Thanks to Austin Appleby and Yonik Seeley for placing this in the public domain and therefore allowing + * me to use it! + */ +package bartworks.util; + +public final class MurmurHash3 { + + public static int fmix32(int h) { + h ^= h >>> 16; + h *= 0x85ebca6b; + h ^= h >>> 13; + h *= 0xc2b2ae35; + h ^= h >>> 16; + return h; + } + + public static long fmix64(long k) { + k ^= k >>> 33; + k *= 0xff51afd7ed558ccdL; + k ^= k >>> 33; + k *= 0xc4ceb9fe1a85ec53L; + k ^= k >>> 33; + return k; + } + + /** + * Gets a long from a byte buffer in little endian byte order. + */ + public static long getLongLittleEndian(byte[] buf, int offset) { + return (long) buf[offset + 7] << 56 // no mask needed + | (buf[offset + 6] & 0xffL) << 48 + | (buf[offset + 5] & 0xffL) << 40 + | (buf[offset + 4] & 0xffL) << 32 + | (buf[offset + 3] & 0xffL) << 24 + | (buf[offset + 2] & 0xffL) << 16 + | (buf[offset + 1] & 0xffL) << 8 + | buf[offset] & 0xffL; // no shift needed + } + + /** + * Returns the MurmurHash3_x86_32 hash. + */ + public static int murmurhash3_x86_32(byte[] data, int offset, int len, int seed) { + + final int c1 = 0xcc9e2d51; + final int c2 = 0x1b873593; + + int h1 = seed; + int roundedEnd = offset + (len & 0xfffffffc); // round down to 4 byte block + + for (int i = offset; i < roundedEnd; i += 4) { + // little endian load order + int k1 = data[i] & 0xff | (data[i + 1] & 0xff) << 8 | (data[i + 2] & 0xff) << 16 | data[i + 3] << 24; + k1 *= c1; + k1 = k1 << 15 | k1 >>> 17; // ROTL32(k1,15); + k1 *= c2; + + h1 ^= k1; + h1 = h1 << 13 | h1 >>> 19; // ROTL32(h1,13); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail + int k1 = 0; + + switch (len & 0x03) { + case 3: + k1 = (data[roundedEnd + 2] & 0xff) << 16; + // fallthrough + case 2: + k1 |= (data[roundedEnd + 1] & 0xff) << 8; + // fallthrough + case 1: + k1 |= data[roundedEnd] & 0xff; + k1 *= c1; + k1 = k1 << 15 | k1 >>> 17; // ROTL32(k1,15); + k1 *= c2; + h1 ^= k1; + } + + // finalization + h1 ^= len; + + // fmix(h1); + h1 ^= h1 >>> 16; + h1 *= 0x85ebca6b; + h1 ^= h1 >>> 13; + h1 *= 0xc2b2ae35; + h1 ^= h1 >>> 16; + + return h1; + } + + /** + * Returns the MurmurHash3_x86_32 hash of the UTF-8 bytes of the String without actually encoding the string to a + * temporary buffer. This is more than 2x faster than hashing the result of String.getBytes(). + */ + public static int murmurhash3_x86_32(CharSequence data, int offset, int len, int seed) { + + final int c1 = 0xcc9e2d51; + final int c2 = 0x1b873593; + + int h1 = seed; + + int pos = offset; + int end = offset + len; + int k1 = 0; + int k2 = 0; + int shift = 0; + int bits = 0; + int nBytes = 0; // length in UTF8 bytes + + while (pos < end) { + int code = data.charAt(pos); + pos++; + if (code < 0x80) { + k2 = code; + bits = 8; + + /*** + * // optimized ascii implementation (currently slower!!! code size?) if (shift == 24) { k1 = k1 | (code + * << 24); + * + * k1 *= c1; k1 = (k1 << 15) | (k1 >>> 17); // ROTL32(k1,15); k1 *= c2; + * + * h1 ^= k1; h1 = (h1 << 13) | (h1 >>> 19); // ROTL32(h1,13); h1 = h1*5+0xe6546b64; + * + * shift = 0; nBytes += 4; k1 = 0; } else { k1 |= code << shift; shift += 8; } continue; + ***/ + } else if (code < 0x800) { + k2 = 0xC0 | code >> 6 | (0x80 | code & 0x3F) << 8; + bits = 16; + } else if (code < 0xD800 || code > 0xDFFF || pos >= end) { + // we check for pos>=end to encode an unpaired surrogate as 3 bytes. + k2 = 0xE0 | code >> 12 | (0x80 | code >> 6 & 0x3F) << 8 | (0x80 | code & 0x3F) << 16; + bits = 24; + } else { + // surrogate pair + // int utf32 = pos < end ? (int) data.charAt(pos++) : 0; + int utf32 = data.charAt(pos++); + utf32 = (code - 0xD7C0 << 10) + (utf32 & 0x3FF); + k2 = 0xff & (0xF0 | utf32 >> 18) | (0x80 | utf32 >> 12 & 0x3F) << 8 + | (0x80 | utf32 >> 6 & 0x3F) << 16 + | (0x80 | utf32 & 0x3F) << 24; + bits = 32; + } + + k1 |= k2 << shift; + + shift += bits; + if (shift >= 32) { + // mix after we have a complete word + + k1 *= c1; + k1 = k1 << 15 | k1 >>> 17; // ROTL32(k1,15); + k1 *= c2; + + h1 ^= k1; + h1 = h1 << 13 | h1 >>> 19; // ROTL32(h1,13); + h1 = h1 * 5 + 0xe6546b64; + + shift -= 32; + // unfortunately, java won't let you shift 32 bits off, so we need to check for 0 + if (shift != 0) { + k1 = k2 >>> bits - shift; // bits used == bits - newshift + } else { + k1 = 0; + } + nBytes += 4; + } + } // inner + + // handle tail + if (shift > 0) { + nBytes += shift >> 3; + k1 *= c1; + k1 = k1 << 15 | k1 >>> 17; // ROTL32(k1,15); + k1 *= c2; + h1 ^= k1; + } + + // finalization + h1 ^= nBytes; + + // fmix(h1); + h1 ^= h1 >>> 16; + h1 *= 0x85ebca6b; + h1 ^= h1 >>> 13; + h1 *= 0xc2b2ae35; + h1 ^= h1 >>> 16; + + return h1; + } + + /** + * Returns the MurmurHash3_x64_128 hash, placing the result in "out". + */ + public static void murmurhash3_x64_128(byte[] key, int offset, int len, int seed, LongPair out) { + // The original algorithm does have a 32 bit unsigned seed. + // We have to mask to match the behavior of the unsigned types and prevent sign extension. + long h1 = seed & 0x00000000FFFFFFFFL; + long h2 = seed & 0x00000000FFFFFFFFL; + + final long c1 = 0x87c37b91114253d5L; + final long c2 = 0x4cf5ad432745937fL; + + int roundedEnd = offset + (len & 0xFFFFFFF0); // round down to 16 byte block + for (int i = offset; i < roundedEnd; i += 16) { + long k1 = getLongLittleEndian(key, i); + long k2 = getLongLittleEndian(key, i + 8); + k1 *= c1; + k1 = Long.rotateLeft(k1, 31); + k1 *= c2; + h1 ^= k1; + h1 = Long.rotateLeft(h1, 27); + h1 += h2; + h1 = h1 * 5 + 0x52dce729; + k2 *= c2; + k2 = Long.rotateLeft(k2, 33); + k2 *= c1; + h2 ^= k2; + h2 = Long.rotateLeft(h2, 31); + h2 += h1; + h2 = h2 * 5 + 0x38495ab5; + } + + long k1 = 0; + long k2 = 0; + + switch (len & 15) { + case 15: + k2 = (key[roundedEnd + 14] & 0xffL) << 48; + case 14: + k2 |= (key[roundedEnd + 13] & 0xffL) << 40; + case 13: + k2 |= (key[roundedEnd + 12] & 0xffL) << 32; + case 12: + k2 |= (key[roundedEnd + 11] & 0xffL) << 24; + case 11: + k2 |= (key[roundedEnd + 10] & 0xffL) << 16; + case 10: + k2 |= (key[roundedEnd + 9] & 0xffL) << 8; + case 9: + k2 |= key[roundedEnd + 8] & 0xffL; + k2 *= c2; + k2 = Long.rotateLeft(k2, 33); + k2 *= c1; + h2 ^= k2; + case 8: + k1 = (long) key[roundedEnd + 7] << 56; + case 7: + k1 |= (key[roundedEnd + 6] & 0xffL) << 48; + case 6: + k1 |= (key[roundedEnd + 5] & 0xffL) << 40; + case 5: + k1 |= (key[roundedEnd + 4] & 0xffL) << 32; + case 4: + k1 |= (key[roundedEnd + 3] & 0xffL) << 24; + case 3: + k1 |= (key[roundedEnd + 2] & 0xffL) << 16; + case 2: + k1 |= (key[roundedEnd + 1] & 0xffL) << 8; + case 1: + k1 |= key[roundedEnd] & 0xffL; + k1 *= c1; + k1 = Long.rotateLeft(k1, 31); + k1 *= c2; + h1 ^= k1; + } + + // ---------- + // finalization + + h1 ^= len; + h2 ^= len; + + h1 += h2; + h2 += h1; + + h1 = fmix64(h1); + h2 = fmix64(h2); + + h1 += h2; + h2 += h1; + + out.val1 = h1; + out.val2 = h2; + } + + /** + * 128 bits of state + */ + public static final class LongPair { + + public long val1; + public long val2; + } +} diff --git a/src/main/java/bartworks/util/NoiseUtil/BartsNoise.java b/src/main/java/bartworks/util/NoiseUtil/BartsNoise.java new file mode 100644 index 0000000000..2130f27ccd --- /dev/null +++ b/src/main/java/bartworks/util/NoiseUtil/BartsNoise.java @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util.NoiseUtil; + +import java.util.Random; + +import bartworks.API.INoiseGen; +import bartworks.util.MathUtils; +import gregtech.api.objects.XSTR; + +public class BartsNoise implements INoiseGen { + + public void setUsePhase(boolean usePhase) { + this.usePhase = usePhase; + } + + public void setRandom(Random random) { + this.random = random; + } + + boolean usePhase; + int octaves; + double frequency; + double amplitude; + long seed; + Random random; + + public enum NoiseColor { + + Red(-1), + Pink(-0.5), + White(0), + Blue(0.5), + Violet(1); + + NoiseColor(double num) { + this.ampl = num; + } + + double ampl; + + public BartsNoise getColoredNoise() { + BartsNoise noise = new BartsNoise(); + noise.setAmplitude(this.ampl); + return noise; + } + } + + public BartsNoise(int octaves, double frequency, double amplitude, long seed) { + this.octaves = octaves; + this.frequency = frequency; + this.amplitude = amplitude; + this.seed = seed; + this.random = new XSTR(seed); + } + + public BartsNoise() { + this.seed = new XSTR().nextLong(); + this.random = new XSTR(this.seed); + this.octaves = 1; + this.frequency = this.random.nextGaussian(); + this.amplitude = this.random.nextGaussian(); + } + + public BartsNoise(long seed) { + this.seed = seed; + this.random = new XSTR(seed); + this.octaves = 1; + this.frequency = this.random.nextGaussian(); + this.amplitude = this.random.nextGaussian(); + } + + public BartsNoise copy() { + return new BartsNoise(this.octaves, this.frequency, this.amplitude, this.seed); + } + + public BartsNoise copy(long seed) { + return new BartsNoise(this.octaves, this.frequency, this.amplitude, seed); + } + + public double getCosNoise(double x, double y) { + double pr = x * this.frequency; + double r1 = Math.cos(pr); + if (r1 < 0) r1 = Math.abs(r1); + double result = Math.pow(r1, this.amplitude); + double pr2 = y * this.frequency; + double r2 = Math.cos(pr2); + if (r2 < 0) r2 = Math.abs(r2); + double result2 = Math.pow(r2, this.amplitude); + result *= result2; + if (result == Double.POSITIVE_INFINITY) result = Double.MAX_VALUE; + if (result == Double.NEGATIVE_INFINITY) result = Double.MIN_VALUE; + return MathUtils.wrap(result, 1D); + } + + double getNonOctavedNoise(double x, double y) { + double phase = SimplexNoise + .noise(Math.pow(x * this.frequency, this.amplitude), Math.pow(y * this.frequency, this.amplitude)); + return MathUtils.wrap(phase, 1); + } + + public double getNeighbouringNoise(int x, int y) { + return (this.getNoiseSingle(x - 1, y - 1) + this.getNoiseSingle(x, y - 1) + + this.getNoiseSingle(x - 1, y) + + this.getNoiseSingle(x + 1, y) + + this.getNoiseSingle(x, y + 1) + + this.getNoiseSingle(x + 1, y + 1) + + this.getNoiseSingle(x - 1, y + 1) + + this.getNoiseSingle(x + 1, y - 1)) / 8; + } + + public double getNoiseSingle(int x, int y) { + double result = 0; + for (double i = 1; i <= this.octaves; i++) { + result += 1d / i * this.getNonOctavedNoise(i * x, i * y); + } + return result; + } + + @Override + public double getNoise(int x, int y) { + double result = 0; + for (double i = 1; i <= this.octaves; i++) { + result += 1d / i * this.getNonOctavedNoise(i * x, y); + } + // result = (this.getNeighbouringNoise(x,y)+result)/2; + return MathUtils.wrap(result, 1D); + } + + @Override + public double[][] getNoiseForRegion(int xStart, int zStart, int xEnd, int zEnd) { + // double[][] results = new double[Math.abs(xEnd)-Math.abs(xStart)][Math.abs(zEnd)-Math.abs(zStart)]; + // for (int i = xStart; i < xEnd; i++) { + // for (int j = zStart; j < zEnd; j++) { + // results + // } + // } + return new double[0][0]; + } + + @Override + public void setAmplitude(double amplitude) { + this.amplitude = amplitude; + } + + @Override + public void setOctaves(int octaves) { + this.octaves = octaves; + } + + @Override + public void setFrequency(double freq) { + this.frequency = freq; + } + + @Override + public void setSeed(long seed) { + this.seed = seed; + } +} diff --git a/src/main/java/bartworks/util/NoiseUtil/SimplexNoise.java b/src/main/java/bartworks/util/NoiseUtil/SimplexNoise.java new file mode 100644 index 0000000000..ea2e571910 --- /dev/null +++ b/src/main/java/bartworks/util/NoiseUtil/SimplexNoise.java @@ -0,0 +1,396 @@ +package bartworks.util.NoiseUtil; +/* + * A speed-improved simplex noise algorithm for 2D, 3D and 4D in Java. Based on example code by Stefan Gustavson + * (stegu@itn.liu.se). Optimisations by Peter Eastman (peastman@drizzle.stanford.edu). Better rank ordering method by + * Stefan Gustavson in 2012. This could be speeded up even further, but it's useful as it is. Version 2012-03-09 This + * code was placed in the public domain by its original author, Stefan Gustavson. You may use it as you see fit, but + * attribution is appreciated. + */ + +import bartworks.util.MathUtils; + +public class SimplexNoise { // Simplex noise in 2D, 3D and 4D + + private static Grad[] grad3 = { new Grad(1, 1, 0), new Grad(-1, 1, 0), new Grad(1, -1, 0), new Grad(-1, -1, 0), + new Grad(1, 0, 1), new Grad(-1, 0, 1), new Grad(1, 0, -1), new Grad(-1, 0, -1), new Grad(0, 1, 1), + new Grad(0, -1, 1), new Grad(0, 1, -1), new Grad(0, -1, -1) }; + + private static Grad[] grad4 = { new Grad(0, 1, 1, 1), new Grad(0, 1, 1, -1), new Grad(0, 1, -1, 1), + new Grad(0, 1, -1, -1), new Grad(0, -1, 1, 1), new Grad(0, -1, 1, -1), new Grad(0, -1, -1, 1), + new Grad(0, -1, -1, -1), new Grad(1, 0, 1, 1), new Grad(1, 0, 1, -1), new Grad(1, 0, -1, 1), + new Grad(1, 0, -1, -1), new Grad(-1, 0, 1, 1), new Grad(-1, 0, 1, -1), new Grad(-1, 0, -1, 1), + new Grad(-1, 0, -1, -1), new Grad(1, 1, 0, 1), new Grad(1, 1, 0, -1), new Grad(1, -1, 0, 1), + new Grad(1, -1, 0, -1), new Grad(-1, 1, 0, 1), new Grad(-1, 1, 0, -1), new Grad(-1, -1, 0, 1), + new Grad(-1, -1, 0, -1), new Grad(1, 1, 1, 0), new Grad(1, 1, -1, 0), new Grad(1, -1, 1, 0), + new Grad(1, -1, -1, 0), new Grad(-1, 1, 1, 0), new Grad(-1, 1, -1, 0), new Grad(-1, -1, 1, 0), + new Grad(-1, -1, -1, 0) }; + + private static short[] p = { 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, + 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, + 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, + 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, + 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, + 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, + 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, + 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, + 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, + 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, + 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 }; + // To remove the need for index wrapping, double the permutation table length + private static short[] perm = new short[512]; + private static short[] permMod12 = new short[512]; + + static { + for (int i = 0; i < 512; i++) { + perm[i] = p[i & 255]; + permMod12[i] = (short) (perm[i] % 12); + } + } + + // Skewing and unskewing factors for 2, 3, and 4 dimensions + private static final double F2 = 0.5 * (Math.sqrt(3.0) - 1.0); + private static final double G2 = (3.0 - Math.sqrt(3.0)) / 6.0; + private static final double F3 = 1.0 / 3.0; + private static final double G3 = 1.0 / 6.0; + private static final double F4 = (Math.sqrt(5.0) - 1.0) / 4.0; + private static final double G4 = (5.0 - Math.sqrt(5.0)) / 20.0; + + // This method is a *lot* faster than using (int)Math.floor(x) + private static int fastfloor(double x) { + return MathUtils.floorInt(x); + } + + private static double dot(Grad g, double x, double y) { + return g.x * x + g.y * y; + } + + private static double dot(Grad g, double x, double y, double z) { + return g.x * x + g.y * y + g.z * z; + } + + private static double dot(Grad g, double x, double y, double z, double w) { + return g.x * x + g.y * y + g.z * z + g.w * w; + } + + // 2D simplex noise + public static double noise(double xin, double yin) { + double n0, n1, n2; // Noise contributions from the three corners + // Skew the input space to determine which simplex cell we're in + double s = (xin + yin) * F2; // Hairy factor for 2D + int i = fastfloor(xin + s); + int j = fastfloor(yin + s); + double t = (i + j) * G2; + double X0 = i - t; // Unskew the cell origin back to (x,y) space + double Y0 = j - t; + double x0 = xin - X0; // The x,y distances from the cell origin + double y0 = yin - Y0; + // For the 2D case, the simplex shape is an equilateral triangle. + // Determine which simplex we are in. + int i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords + if (x0 > y0) { + i1 = 1; + j1 = 0; + } // lower triangle, XY order: (0,0)->(1,0)->(1,1) + else { + i1 = 0; + j1 = 1; + } // upper triangle, YX order: (0,0)->(0,1)->(1,1) + // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and + // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where + // c = (3-sqrt(3))/6 + double x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords + double y1 = y0 - j1 + G2; + double x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords + double y2 = y0 - 1.0 + 2.0 * G2; + // Work out the hashed gradient indices of the three simplex corners + int ii = i & 255; + int jj = j & 255; + int gi0 = permMod12[ii + perm[jj]]; + int gi1 = permMod12[ii + i1 + perm[jj + j1]]; + int gi2 = permMod12[ii + 1 + perm[jj + 1]]; + // Calculate the contribution from the three corners + double t0 = 0.5 - x0 * x0 - y0 * y0; + if (t0 < 0) n0 = 0.0; + else { + t0 *= t0; + n0 = t0 * t0 * dot(grad3[gi0], x0, y0); // (x,y) of grad3 used for 2D gradient + } + double t1 = 0.5 - x1 * x1 - y1 * y1; + if (t1 < 0) n1 = 0.0; + else { + t1 *= t1; + n1 = t1 * t1 * dot(grad3[gi1], x1, y1); + } + double t2 = 0.5 - x2 * x2 - y2 * y2; + if (t2 < 0) n2 = 0.0; + else { + t2 *= t2; + n2 = t2 * t2 * dot(grad3[gi2], x2, y2); + } + // Add contributions from each corner to get the final noise value. + // The result is scaled to return values in the interval [-1,1]. + return 70.0 * (n0 + n1 + n2); + } + + // 3D simplex noise + public static double noise(double xin, double yin, double zin) { + double n0, n1, n2, n3; // Noise contributions from the four corners + // Skew the input space to determine which simplex cell we're in + double s = (xin + yin + zin) * F3; // Very nice and simple skew factor for 3D + int i = fastfloor(xin + s); + int j = fastfloor(yin + s); + int k = fastfloor(zin + s); + double t = (i + j + k) * G3; + double X0 = i - t; // Unskew the cell origin back to (x,y,z) space + double Y0 = j - t; + double Z0 = k - t; + double x0 = xin - X0; // The x,y,z distances from the cell origin + double y0 = yin - Y0; + double z0 = zin - Z0; + // For the 3D case, the simplex shape is a slightly irregular tetrahedron. + // Determine which simplex we are in. + int i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords + int i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords + if (x0 >= y0) { + if (y0 >= z0) { + i1 = 1; + j1 = 0; + k1 = 0; + i2 = 1; + j2 = 1; + k2 = 0; + } // X Y Z order + else { + if (x0 >= z0) { + i1 = 1; + j1 = 0; + k1 = 0; + } // X Z Y order + else { + i1 = 0; + j1 = 0; + k1 = 1; + } + i2 = 1; + j2 = 0; + k2 = 1; + } // Z X Y order + } else if (y0 < z0) { + i1 = 0; + j1 = 0; + k1 = 1; + i2 = 0; + j2 = 1; + k2 = 1; + } // Z Y X order + else if (x0 < z0) { + i1 = 0; + j1 = 1; + k1 = 0; + i2 = 0; + j2 = 1; + k2 = 1; + } // Y Z X order + else { + i1 = 0; + j1 = 1; + k1 = 0; + i2 = 1; + j2 = 1; + k2 = 0; + } // Y X Z order + // A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z), + // a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and + // a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where + // c = 1/6. + double x1 = x0 - i1 + G3; // Offsets for second corner in (x,y,z) coords + double y1 = y0 - j1 + G3; + double z1 = z0 - k1 + G3; + double x2 = x0 - i2 + 2.0 * G3; // Offsets for third corner in (x,y,z) coords + double y2 = y0 - j2 + 2.0 * G3; + double z2 = z0 - k2 + 2.0 * G3; + double x3 = x0 - 1.0 + 3.0 * G3; // Offsets for last corner in (x,y,z) coords + double y3 = y0 - 1.0 + 3.0 * G3; + double z3 = z0 - 1.0 + 3.0 * G3; + // Work out the hashed gradient indices of the four simplex corners + int ii = i & 255; + int jj = j & 255; + int kk = k & 255; + int gi0 = permMod12[ii + perm[jj + perm[kk]]]; + int gi1 = permMod12[ii + i1 + perm[jj + j1 + perm[kk + k1]]]; + int gi2 = permMod12[ii + i2 + perm[jj + j2 + perm[kk + k2]]]; + int gi3 = permMod12[ii + 1 + perm[jj + 1 + perm[kk + 1]]]; + // Calculate the contribution from the four corners + double t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0; + if (t0 < 0) n0 = 0.0; + else { + t0 *= t0; + n0 = t0 * t0 * dot(grad3[gi0], x0, y0, z0); + } + double t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1; + if (t1 < 0) n1 = 0.0; + else { + t1 *= t1; + n1 = t1 * t1 * dot(grad3[gi1], x1, y1, z1); + } + double t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2; + if (t2 < 0) n2 = 0.0; + else { + t2 *= t2; + n2 = t2 * t2 * dot(grad3[gi2], x2, y2, z2); + } + double t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3; + if (t3 < 0) n3 = 0.0; + else { + t3 *= t3; + n3 = t3 * t3 * dot(grad3[gi3], x3, y3, z3); + } + // Add contributions from each corner to get the final noise value. + // The result is scaled to stay just inside [-1,1] + return 32.0 * (n0 + n1 + n2 + n3); + } + + // 4D simplex noise, better simplex rank ordering method 2012-03-09 + public static double noise(double x, double y, double z, double w) { + + double n0, n1, n2, n3, n4; // Noise contributions from the five corners + // Skew the (x,y,z,w) space to determine which cell of 24 simplices we're in + double s = (x + y + z + w) * F4; // Factor for 4D skewing + int i = fastfloor(x + s); + int j = fastfloor(y + s); + int k = fastfloor(z + s); + int l = fastfloor(w + s); + double t = (i + j + k + l) * G4; // Factor for 4D unskewing + double X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space + double Y0 = j - t; + double Z0 = k - t; + double W0 = l - t; + double x0 = x - X0; // The x,y,z,w distances from the cell origin + double y0 = y - Y0; + double z0 = z - Z0; + double w0 = w - W0; + // For the 4D case, the simplex is a 4D shape I won't even try to describe. + // To find out which of the 24 possible simplices we're in, we need to + // determine the magnitude ordering of x0, y0, z0 and w0. + // Six pair-wise comparisons are performed between each possible pair + // of the four coordinates, and the results are used to rank the numbers. + int rankx = 0; + int ranky = 0; + int rankz = 0; + int rankw = 0; + if (x0 > y0) rankx++; + else ranky++; + if (x0 > z0) rankx++; + else rankz++; + if (x0 > w0) rankx++; + else rankw++; + if (y0 > z0) ranky++; + else rankz++; + if (y0 > w0) ranky++; + else rankw++; + if (z0 > w0) rankz++; + else rankw++; + int i1, j1, k1, l1; // The integer offsets for the second simplex corner + int i2, j2, k2, l2; // The integer offsets for the third simplex corner + int i3, j3, k3, l3; // The integer offsets for the fourth simplex corner + // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order. + // Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0; + j1 = ranky >= 3 ? 1 : 0; + k1 = rankz >= 3 ? 1 : 0; + l1 = rankw >= 3 ? 1 : 0; + // Rank 2 denotes the second largest coordinate. + i2 = rankx >= 2 ? 1 : 0; + j2 = ranky >= 2 ? 1 : 0; + k2 = rankz >= 2 ? 1 : 0; + l2 = rankw >= 2 ? 1 : 0; + // Rank 1 denotes the second smallest coordinate. + i3 = rankx >= 1 ? 1 : 0; + j3 = ranky >= 1 ? 1 : 0; + k3 = rankz >= 1 ? 1 : 0; + l3 = rankw >= 1 ? 1 : 0; + // The fifth corner has all coordinate offsets = 1, so no need to compute that. + double x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords + double y1 = y0 - j1 + G4; + double z1 = z0 - k1 + G4; + double w1 = w0 - l1 + G4; + double x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords + double y2 = y0 - j2 + 2.0 * G4; + double z2 = z0 - k2 + 2.0 * G4; + double w2 = w0 - l2 + 2.0 * G4; + double x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords + double y3 = y0 - j3 + 3.0 * G4; + double z3 = z0 - k3 + 3.0 * G4; + double w3 = w0 - l3 + 3.0 * G4; + double x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords + double y4 = y0 - 1.0 + 4.0 * G4; + double z4 = z0 - 1.0 + 4.0 * G4; + double w4 = w0 - 1.0 + 4.0 * G4; + // Work out the hashed gradient indices of the five simplex corners + int ii = i & 255; + int jj = j & 255; + int kk = k & 255; + int ll = l & 255; + int gi0 = perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32; + int gi1 = perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32; + int gi2 = perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32; + int gi3 = perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32; + int gi4 = perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32; + // Calculate the contribution from the five corners + double t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0; + if (t0 < 0) n0 = 0.0; + else { + t0 *= t0; + n0 = t0 * t0 * dot(grad4[gi0], x0, y0, z0, w0); + } + double t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1; + if (t1 < 0) n1 = 0.0; + else { + t1 *= t1; + n1 = t1 * t1 * dot(grad4[gi1], x1, y1, z1, w1); + } + double t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2; + if (t2 < 0) n2 = 0.0; + else { + t2 *= t2; + n2 = t2 * t2 * dot(grad4[gi2], x2, y2, z2, w2); + } + double t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3; + if (t3 < 0) n3 = 0.0; + else { + t3 *= t3; + n3 = t3 * t3 * dot(grad4[gi3], x3, y3, z3, w3); + } + double t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4; + if (t4 < 0) n4 = 0.0; + else { + t4 *= t4; + n4 = t4 * t4 * dot(grad4[gi4], x4, y4, z4, w4); + } + // Sum up and scale the result to cover the range [-1,1] + return 27.0 * (n0 + n1 + n2 + n3 + n4); + } + + // Inner class to speed upp gradient computations + // (array access is a lot slower than member access) + private static class Grad { + + double x, y, z, w; + + Grad(double x, double y, double z) { + this.x = x; + this.y = y; + this.z = z; + } + + Grad(double x, double y, double z, double w) { + this.x = x; + this.y = y; + this.z = z; + this.w = w; + } + } +} diff --git a/src/main/java/bartworks/util/NonNullWrappedHashMap.java b/src/main/java/bartworks/util/NonNullWrappedHashMap.java new file mode 100644 index 0000000000..a11cb6a6af --- /dev/null +++ b/src/main/java/bartworks/util/NonNullWrappedHashMap.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +public class NonNullWrappedHashMap extends HashMap { + + private static final long serialVersionUID = 46345163103910175L; + private V defaultValue; + + public NonNullWrappedHashMap(int initialCapacity, float loadFactor, V defaultValue) { + super(initialCapacity, loadFactor); + this.defaultValue = Objects.requireNonNull(defaultValue); + } + + public NonNullWrappedHashMap(int initialCapacity, V defaultValue) { + super(initialCapacity); + this.defaultValue = Objects.requireNonNull(defaultValue); + } + + public NonNullWrappedHashMap(V defaultValue) { + this.defaultValue = Objects.requireNonNull(defaultValue); + } + + public NonNullWrappedHashMap(Map m, V defaultValue) { + super(m); + this.defaultValue = Objects.requireNonNull(defaultValue); + } + + @Override + public V get(Object key) { + return this.getOrDefault(key, this.defaultValue); + } + + @Override + public V getOrDefault(Object key, V defaultValue) { + return Objects.requireNonNull( + Optional.ofNullable(super.getOrDefault(key, defaultValue)) + .orElse(this.defaultValue)); + } +} diff --git a/src/main/java/bartworks/util/NonNullWrappedHashSet.java b/src/main/java/bartworks/util/NonNullWrappedHashSet.java new file mode 100644 index 0000000000..c9ad90a616 --- /dev/null +++ b/src/main/java/bartworks/util/NonNullWrappedHashSet.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import java.util.Collection; +import java.util.HashSet; + +public class NonNullWrappedHashSet extends HashSet { + + private static final long serialVersionUID = 8377161849188229010L; + + public NonNullWrappedHashSet() {} + + public NonNullWrappedHashSet(Collection c) { + this.addAll(c); + } + + public NonNullWrappedHashSet(int initialCapacity, float loadFactor) { + super(initialCapacity, loadFactor); + } + + public NonNullWrappedHashSet(int initialCapacity) { + super(initialCapacity); + } + + @Override + public boolean add(E e) { + if (e != null) return super.add(e); + return false; + } + + @Override + public boolean addAll(Collection c) { + boolean wasChanged = false; + for (E element : c) { + if (element != null) wasChanged |= this.add(element); + } + return wasChanged; + } +} diff --git a/src/main/java/bartworks/util/Pair.java b/src/main/java/bartworks/util/Pair.java new file mode 100644 index 0000000000..1361460e31 --- /dev/null +++ b/src/main/java/bartworks/util/Pair.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import java.nio.ByteBuffer; +import java.util.Arrays; +import java.util.Map; + +@SuppressWarnings("unchecked") +public class Pair implements Map.Entry { + + Object[] pair = new Object[2]; + + public Pair(Object[] pair) { + this.pair = pair; + } + + public Pair(A k, B v) { + this.pair[0] = k; + this.pair[1] = v; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Pair)) return false; + + Pair pair1 = (Pair) o; + + // Probably incorrect - comparing Object[] arrays with Arrays.equals + return Arrays.equals(this.pair, pair1.pair); + } + + @Override + public int hashCode() { + return MurmurHash3.murmurhash3_x86_32( + ByteBuffer.allocate(8) + .putInt(this.pair[0].hashCode()) + .putInt(this.pair[1].hashCode()) + .array(), + 0, + 8, + 31); + } + + @Override + public A getKey() { + return (A) this.pair[0]; + } + + @Override + public B getValue() { + return (B) this.pair[1]; + } + + @Override + public B setValue(Object value) { + this.pair[1] = value; + return (B) this.pair[1]; + } + + public Pair copyWithNewValue(B value) { + return new Pair<>((A) this.pair[0], value); + } + + public Pair replaceValue(B value) { + this.setValue(value); + return this; + } +} diff --git a/src/main/java/bartworks/util/ResultWrongSievert.java b/src/main/java/bartworks/util/ResultWrongSievert.java new file mode 100644 index 0000000000..fd1f7ce25b --- /dev/null +++ b/src/main/java/bartworks/util/ResultWrongSievert.java @@ -0,0 +1,97 @@ +package bartworks.util; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import net.minecraft.util.StatCollector; + +import org.jetbrains.annotations.NotNull; + +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.util.GTUtility; + +public class ResultWrongSievert implements CheckRecipeResult { + + public enum NeededSievertType { + EXACTLY, + MINIMUM + } + + private NeededSievertType type; + private int required; + + public ResultWrongSievert(int required, NeededSievertType type) { + this.required = required; + this.type = type; + } + + public @NotNull String getID() { + return "wrong_sievert"; + } + + @Override + public boolean wasSuccessful() { + return false; + } + + @Override + public @NotNull String getDisplayString() { + return switch (this.type) { + case EXACTLY -> StatCollector.translateToLocalFormatted( + "GT5U.gui.text.wrong_sievert_exactly", + GTUtility.formatNumbers(this.required)); + case MINIMUM -> StatCollector + .translateToLocalFormatted("GT5U.gui.text.wrong_sievert_min", GTUtility.formatNumbers(this.required)); + }; + } + + @Override + public @NotNull NBTTagCompound writeToNBT(@NotNull NBTTagCompound tag) { + tag.setInteger("required", required); + tag.setInteger("type", type.ordinal()); + return tag; + } + + @Override + public void readFromNBT(@NotNull NBTTagCompound tag) { + required = tag.getInteger("required"); + } + + @Override + public @NotNull CheckRecipeResult newInstance() { + return new ResultWrongSievert(0, NeededSievertType.EXACTLY); + } + + @Override + public void encode(@NotNull PacketBuffer buffer) { + buffer.writeVarIntToBuffer(this.required); + buffer.writeVarIntToBuffer(this.type.ordinal()); + } + + @Override + public void decode(PacketBuffer buffer) { + this.required = buffer.readVarIntFromBuffer(); + this.type = NeededSievertType.values()[buffer.readVarIntFromBuffer()]; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || this.getClass() != o.getClass()) return false; + ResultWrongSievert that = (ResultWrongSievert) o; + return this.required == that.required; + } + + /** + * Cannot process recipe because the machine doesn't have the minimum amount of sievert + */ + public static CheckRecipeResult insufficientSievert(int required) { + return new ResultWrongSievert(required, NeededSievertType.MINIMUM); + } + + /** + * Cannot process recipe because the machine doesn't have the exact amount of sievert + */ + public static CheckRecipeResult wrongSievert(int required) { + return new ResultWrongSievert(required, NeededSievertType.EXACTLY); + } +} diff --git a/src/main/java/bartworks/util/StreamUtils.java b/src/main/java/bartworks/util/StreamUtils.java new file mode 100644 index 0000000000..d26d2eb40d --- /dev/null +++ b/src/main/java/bartworks/util/StreamUtils.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util; + +import java.util.Optional; +import java.util.function.Predicate; + +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTRecipe; + +public class StreamUtils { + + private StreamUtils() {} + + public static Predicate> filterVisualMaps() { + return recipeMap -> { + Optional op = recipeMap.getAllRecipes() + .stream() + .findAny(); + return op.isPresent() && !op.get().mFakeRecipe; + }; + } + + public static boolean filterVisualMaps(RecipeMap recipeMap) { + return filterVisualMaps().test(recipeMap); + } +} diff --git a/src/main/java/bartworks/util/accessprioritylist/AccessPriorityList.java b/src/main/java/bartworks/util/accessprioritylist/AccessPriorityList.java new file mode 100644 index 0000000000..7a41b712b5 --- /dev/null +++ b/src/main/java/bartworks/util/accessprioritylist/AccessPriorityList.java @@ -0,0 +1,388 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util.accessprioritylist; + +import java.util.Collection; +import java.util.Deque; +import java.util.Iterator; +import java.util.List; +import java.util.ListIterator; +import java.util.Set; +import java.util.Spliterator; + +import org.apache.commons.lang3.NotImplementedException; + +public class AccessPriorityList implements List, Deque, Set { + + transient int size = 0; + transient AccessPriorityListNode head; + transient AccessPriorityListNode tail; + + public static AccessPriorityList create() { + return new AccessPriorityList<>(); + } + + public AccessPriorityList() {} + + @Override + public void addFirst(E t) { + final AccessPriorityListNode first = this.head; + final AccessPriorityListNode newNode = new AccessPriorityListNode<>(null, t, first); + this.head = newNode; + if (first == null) this.tail = newNode; + else first.setBefore(newNode); + this.size++; + } + + @Override + public void addLast(E t) { + final AccessPriorityListNode last = this.tail; + final AccessPriorityListNode newNode = new AccessPriorityListNode<>(last, t, null); + this.tail = newNode; + if (last == null) this.head = newNode; + else last.setNext(newNode); + this.size++; + } + + @Override + public boolean offerFirst(E e) { + throw new NotImplementedException(""); + } + + @Override + public boolean offerLast(E e) { + throw new NotImplementedException(""); + } + + @Override + public E removeFirst() { + E first = this.head.getELEMENT(); + AccessPriorityListNode node = this.head; + this.head = node.getNext(); + this.head.setBefore(null); + node.destroy(); + node = null; + this.size--; + return first; + } + + @Override + public E removeLast() { + E last = this.tail.getELEMENT(); + AccessPriorityListNode node = this.tail; + this.tail = node.getBefore(); + this.tail.setNext(null); + node.destroy(); + node = null; + this.size--; + return last; + } + + @Override + public E pollFirst() { + throw new NotImplementedException(""); + } + + @Override + public E pollLast() { + throw new NotImplementedException(""); + } + + @Override + public E getFirst() { + return this.peekFirst(); + } + + @Override + public E getLast() { + return this.peekLast(); + } + + @Override + public E peekFirst() { + return this.head != null ? this.head.getELEMENT() : null; + } + + @Override + public E peekLast() { + return this.tail != null ? this.tail.getELEMENT() : null; + } + + @Override + public boolean removeFirstOccurrence(Object o) { + throw new NotImplementedException(""); + } + + @Override + public boolean removeLastOccurrence(Object o) { + throw new NotImplementedException(""); + } + + @Override + public int size() { + return this.size; + } + + @Override + public boolean isEmpty() { + return this.size == 0; + } + + @Override + public boolean contains(Object o) { + throw new NotImplementedException(""); + } + + @Override + public Iterator iterator() { + return new AccessPriorityListIterators.AccessPriorityListIterator<>(this.head); + } + + public Iterator> nodeIterator() { + return new AccessPriorityListIterators.AccessPriorityListNodeIterator<>(this.head); + } + + @Override + public Iterator descendingIterator() { + return new AccessPriorityListIterators.AccessPriorityListReverseIterator<>(this.tail); + } + + @Override + public Object[] toArray() { + Object[] ret = new Object[this.size]; + int index = 0; + for (Iterator it = this.iterator(); it.hasNext(); index++) ret[index] = it.next(); + return ret; + } + + @Override + public T[] toArray(T[] a) { + T[] ret = (T[]) new Object[this.size]; + int index = 0; + for (Iterator it = (Iterator) this.iterator(); it.hasNext(); index++) ret[index] = it.next(); + return ret; + } + + @Override + public boolean add(E e) { + this.addLast(e); + return true; + } + + private void moveNodeUp(AccessPriorityListNode node) { + if (node == this.head || node.getBefore() == null) return; + final AccessPriorityListNode before = node.getBefore(); + final AccessPriorityListNode beforeBefore = before.getBefore(); + final AccessPriorityListNode next = node.getNext(); + + // <0,1,2> <1,2,3> N<2,3,4> <3,4,5> + + node.setBefore(beforeBefore); + // <0,1,2> <1,2,3> N<0,3,4> <3,4,5> + + if (beforeBefore != null) beforeBefore.setNext(node); + else this.head = node; + // <0,1,3> <1,2,3> N<0,3,4> <3,4,5> + + before.setBefore(node); + // <0,1,3> <3,2,3> N<0,3,4> <3,4,5> + + before.setNext(next); + // <0,1,3> <3,2,4> N<0,3,4> <3,4,5> + + if (next != null) next.setBefore(before); + else this.tail = before; + // <0,1,3> N<0,3,4> <3,2,4> <2,4,5> + + node.setNext(before); + // <0,1,3> N<0,3,2> <3,2,4> <2,4,5> + } + + AccessPriorityListNode getNode(int index) { + if (index <= this.size / 2) { + AccessPriorityListNode x = this.head; + for (int i = 0; i < index; i++) x = x.getNext(); + return x; + } + AccessPriorityListNode x = this.tail; + for (int i = this.size - 1; i > index; i--) x = x.getBefore(); + return x; + } + + @Override + public boolean offer(E e) { + throw new NotImplementedException(""); + } + + private boolean isValidIndex(int index) { + if (index >= 0 && index < this.size) return true; + throw new ArrayIndexOutOfBoundsException("NOT A VAILD INDEX!"); + } + + @Override + public E remove() { + throw new NotImplementedException(""); + } + + @Override + public E poll() { + return this.removeFirst(); + } + + @Override + public E element() { + throw new NotImplementedException(""); + } + + @Override + public E peek() { + return this.getFirst(); + } + + @Override + public void push(E e) { + this.addFirst(e); + } + + @Override + public E pop() { + return this.removeFirst(); + } + + @Override + public boolean remove(Object o) { + throw new NotImplementedException(""); + } + + @Override + public boolean containsAll(Collection c) { + throw new NotImplementedException(""); + } + + @Override + public boolean addAll(Collection c) { + if (c == null) return false; + c.forEach(this::addLast); + return true; + } + + @Override + public boolean addAll(int index, Collection c) { + throw new NotImplementedException(""); + } + + @Override + public boolean removeAll(Collection c) { + throw new NotImplementedException(""); + } + + @Override + public boolean retainAll(Collection c) { + throw new NotImplementedException(""); + } + + @Override + public void clear() { + if (this.tail != null) { + AccessPriorityListNode node = this.tail; + while (node.getBefore() != null) { + node.setNext(null); + node.setPriority(0L); + node = node.getBefore(); + node.getNext() + .setBefore(null); + } + this.size = 0; + this.head = null; + this.tail = null; + } + } + + public void addPrioToNode(AccessPriorityListNode node) { + this.addPrioToNode(node, 1L); + } + + public void addPrioToNode(AccessPriorityListNode node, long prio) { + long current = node.getPriority(); + if (current == Long.MAX_VALUE || current > 0 && prio > 0 && prio + current < 0) + node.setPriority(Long.MAX_VALUE); + else node.setPriority(current + prio); + while (node.getBefore() != null && node.getPriority() >= node.getBefore() + .getPriority()) { + this.moveNodeUp(node); + } + } + + public void addPrioToNode(int index, long prio) { + if (!this.isValidIndex(index)) return; + AccessPriorityListNode node = this.getNode(index); + this.addPrioToNode(node, prio); + } + + public void addPrioToNode(int index) { + this.addPrioToNode(index, 1L); + } + + @Override + public E get(int index) { + if (!this.isValidIndex(index)) return null; + AccessPriorityListNode node = this.getNode(index); + return node.getELEMENT(); + } + + @Override + public E set(int index, E element) { + throw new NotImplementedException(""); + } + + @Override + public void add(int index, E element) { + throw new NotImplementedException(""); + } + + @Override + public E remove(int index) { + throw new NotImplementedException(""); + } + + @Override + public int indexOf(Object o) { + throw new NotImplementedException(""); + } + + @Override + public int lastIndexOf(Object o) { + throw new NotImplementedException(""); + } + + @Override + public ListIterator listIterator() { + return new AccessPriorityListIterators.AccessPriorityListListIterator<>(this.head, this.tail, false); + } + + @Override + public ListIterator listIterator(int index) { + return new AccessPriorityListIterators.AccessPriorityListListIterator<>(this, index); + } + + @Override + public List subList(int fromIndex, int toIndex) { + throw new NotImplementedException(""); + } + + @Override + public Spliterator spliterator() { + throw new NotImplementedException(""); + } +} diff --git a/src/main/java/bartworks/util/accessprioritylist/AccessPriorityListIterators.java b/src/main/java/bartworks/util/accessprioritylist/AccessPriorityListIterators.java new file mode 100644 index 0000000000..ebdda6b302 --- /dev/null +++ b/src/main/java/bartworks/util/accessprioritylist/AccessPriorityListIterators.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util.accessprioritylist; + +import java.util.Iterator; +import java.util.ListIterator; + +import org.apache.commons.lang3.NotImplementedException; + +public class AccessPriorityListIterators { + + public static class AccessPriorityListListIterator implements ListIterator { + + final AccessPriorityListNode head; + final AccessPriorityListNode tail; + AccessPriorityListNode current; + int counter = 0; + boolean reverse; + + public AccessPriorityListListIterator(AccessPriorityListNode head, AccessPriorityListNode tail, + boolean reverse) { + this.head = head; + this.tail = tail; + this.current = reverse ? tail : head; + this.reverse = reverse; + } + + public AccessPriorityListListIterator(AccessPriorityList list, int index) { + this.head = list.head; + this.tail = list.tail; + this.current = list.getNode(index); + this.counter = index; + } + + @Override + public boolean hasNext() { + return this.reverse ? this.head != this.current : this.tail != this.current; + } + + @Override + public E next() { + this.counter++; + E ret = this.current.getELEMENT(); + this.current = this.current.getNext(); + return ret; + } + + @Override + public boolean hasPrevious() { + return !this.reverse ? this.head != this.current : this.tail != this.current; + } + + @Override + public E previous() { + this.counter--; + E ret = this.current.getELEMENT(); + this.current = this.current.getBefore(); + return ret; + } + + @Override + public int nextIndex() { + return this.counter + 1; + } + + @Override + public int previousIndex() { + return this.counter - 1; + } + + @Override + public void remove() { + throw new NotImplementedException("Not Implemented"); + } + + @Override + public void set(E e) { + throw new NotImplementedException("Not Implemented"); + } + + @Override + public void add(E e) { + throw new NotImplementedException("Not Implemented"); + } + } + + public static class AccessPriorityListIterator implements Iterator { + + final AccessPriorityListNode head; + AccessPriorityListNode current; + + public AccessPriorityListIterator(AccessPriorityListNode head) { + this.head = this.current = head; + } + + @Override + public boolean hasNext() { + return this.current != null; + } + + @Override + public E next() { + E ret = this.current.getELEMENT(); + this.current = this.current.getNext(); + return ret; + } + } + + public static class AccessPriorityListReverseIterator implements Iterator { + + final AccessPriorityListNode tail; + AccessPriorityListNode current; + + public AccessPriorityListReverseIterator(AccessPriorityListNode tail) { + this.tail = this.current = tail; + } + + @Override + public boolean hasNext() { + return this.current != null; + } + + @Override + public E next() { + E ret = this.current.getELEMENT(); + this.current = this.current.getBefore(); + return ret; + } + } + + public static class AccessPriorityListNodeIterator implements Iterator> { + + final AccessPriorityListNode head; + AccessPriorityListNode current; + + public AccessPriorityListNodeIterator(AccessPriorityListNode head) { + this.head = this.current = head; + } + + @Override + public boolean hasNext() { + return this.current != null; + } + + @Override + public AccessPriorityListNode next() { + AccessPriorityListNode ret = this.current; + this.current = this.current.getNext(); + return ret; + } + } +} diff --git a/src/main/java/bartworks/util/accessprioritylist/AccessPriorityListNode.java b/src/main/java/bartworks/util/accessprioritylist/AccessPriorityListNode.java new file mode 100644 index 0000000000..12788c82c8 --- /dev/null +++ b/src/main/java/bartworks/util/accessprioritylist/AccessPriorityListNode.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util.accessprioritylist; + +public class AccessPriorityListNode { + + public static final AccessPriorityListNode EMPTY_NODE = new AccessPriorityListNode<>(null); + + private final E ELEMENT; + private long priority = Long.MIN_VALUE; + private AccessPriorityListNode next; + private AccessPriorityListNode before; + + public AccessPriorityListNode(E element) { + this.ELEMENT = element; + } + + public AccessPriorityListNode(AccessPriorityListNode before, E element, AccessPriorityListNode next) { + this.ELEMENT = element; + this.connect(next, before); + } + + public void connect(AccessPriorityListNode next, AccessPriorityListNode before) { + this.setNext(next); + this.setBefore(before); + } + + public E getELEMENT() { + return this.ELEMENT; + } + + public long getPriority() { + return this.priority; + } + + public void setPriority(long priority) { + this.priority = priority; + } + + public AccessPriorityListNode getNext() { + return this.next; + } + + public void setNext(AccessPriorityListNode next) { + this.next = next; + } + + public AccessPriorityListNode getBefore() { + return this.before; + } + + public void setBefore(AccessPriorityListNode before) { + this.before = before; + } + + void destroy() { + this.before = null; + this.next = null; + this.priority = 0L; + } +} diff --git a/src/main/java/bartworks/util/flowerset/FlowerSet.java b/src/main/java/bartworks/util/flowerset/FlowerSet.java new file mode 100644 index 0000000000..99954d1860 --- /dev/null +++ b/src/main/java/bartworks/util/flowerset/FlowerSet.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util.flowerset; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Set; +import java.util.function.Function; + +public class FlowerSet implements Set { + + public FlowerSet(int petals, Function, Integer> comparerison) { + this.petals = petals; + this.comparerison = comparerison; + } + + final int petals; + final Function, Integer> comparerison; + + public static FlowerSet createBase64(Function, Integer> comparerison) { + return new FlowerSet<>(64, comparerison); + } + + public static FlowerSet createHexflower(Function, Integer> comparerison) { + return new FlowerSet<>(16, comparerison); + } + + @Override + public int size() { + return 0; + } + + @Override + public boolean isEmpty() { + return false; + } + + @Override + public boolean contains(Object o) { + return false; + } + + @Override + public Iterator iterator() { + return null; + } + + @Override + public Object[] toArray() { + return new Object[0]; + } + + @Override + public T1[] toArray(T1[] a) { + return null; + } + + @Override + public boolean add(T t) { + return false; + } + + @Override + public boolean remove(Object o) { + return false; + } + + @Override + public boolean containsAll(Collection c) { + return false; + } + + @Override + public boolean addAll(Collection c) { + return false; + } + + @Override + public boolean retainAll(Collection c) { + return false; + } + + @Override + public boolean removeAll(Collection c) { + return false; + } + + @Override + public void clear() {} + + static class FlowerNode { + + private final FlowerSet map; + final V value; + final FlowerNode[] links; + + @SuppressWarnings("unchecked") + public FlowerNode(V value, FlowerSet map) { + this.value = value; + this.map = map; + this.links = new FlowerNode[map.petals]; + } + + private static final int DEPTH = 20480; + + public void TryToSetSingleNode(FlowerNode node, FlowerNode toset, int place, int depth) { + if (depth > DEPTH) throw new IllegalStateException("Recursive Call went too deep."); + if (node.links[place] == null) node.links[place] = toset; + else { + this.TryToSetSingleNode(node.links[place], toset, place, depth); + depth++; + } + } + + public void TryToSetSingleNode(FlowerNode node, FlowerNode toset, int place) { + if (node.links[place] == null) node.links[place] = toset; + else this.TryToSetSingleNode(node.links[place], toset, place, 0); + } + + @SafeVarargs + public final void SetUpLinks(FlowerNode... links) { + for (FlowerNode node : links) { + int place = this.map.comparerison.apply(node); + this.TryToSetSingleNode(this, node, place); + } + } + } + + static class Functions { + + public static Function, Integer> HashBasedFunction() { + return function -> function.hashCode() % function.map.petals; + } + } +} diff --git a/src/main/java/bartworks/util/log/DebugLog.java b/src/main/java/bartworks/util/log/DebugLog.java new file mode 100644 index 0000000000..76d6a70ea7 --- /dev/null +++ b/src/main/java/bartworks/util/log/DebugLog.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bartworks.util.log; + +import java.io.File; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.GregorianCalendar; +import java.util.logging.FileHandler; +import java.util.logging.Formatter; +import java.util.logging.LogRecord; +import java.util.logging.Logger; + +import cpw.mods.fml.common.event.FMLPreInitializationEvent; + +public class DebugLog { + + private static boolean init; + static FileHandler fh; + private static Logger utilLog; + + public static void initDebugLog(FMLPreInitializationEvent event) throws IOException { + if (DebugLog.init) return; + DebugLog.fh = new FileHandler( + new File( + new File( + event.getModConfigurationDirectory() + .getParentFile(), + "logs"), + "BWLog.log").toString()); + DebugLog.utilLog = Logger.getLogger("DebugLog"); + DebugLog.utilLog.setUseParentHandlers(false); + DebugLog.utilLog.addHandler(DebugLog.fh); + Formatter formatter = new Formatter() { + + @Override + public String format(LogRecord record) { + SimpleDateFormat logTime = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); + Calendar cal = new GregorianCalendar(); + cal.setTimeInMillis(record.getMillis()); + return "Level: " + record + .getLevel() + " at " + logTime.format(cal.getTime()) + " " + record.getMessage() + "\n"; + } + }; + DebugLog.fh.setFormatter(formatter); + DebugLog.init = true; + } + + public static void log(String record) { + if (!DebugLog.init) return; + DebugLog.utilLog.info(record); + } +} diff --git a/src/main/java/bloodasp/galacticgreg/GT_TileEntity_Ores_Space.java b/src/main/java/bloodasp/galacticgreg/GT_TileEntity_Ores_Space.java deleted file mode 100644 index dfa1307bce..0000000000 --- a/src/main/java/bloodasp/galacticgreg/GT_TileEntity_Ores_Space.java +++ /dev/null @@ -1,144 +0,0 @@ -package bloodasp.galacticgreg; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import bloodasp.galacticgreg.api.Enums.ReplaceState; -import bloodasp.galacticgreg.api.ModDimensionDef; -import gregtech.api.GregTech_API; -import gregtech.api.util.GT_Log; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_TileEntity_Ores; - -public class GT_TileEntity_Ores_Space { - - // Renamed function to prevent function shadowing with base GT-code - public static boolean setOuterSpaceOreBlock(ModDimensionDef pDimensionDef, World pWorld, int pX, int pY, int pZ, - int pMetaData) { - return setOuterSpaceOreBlock(pDimensionDef, pWorld, pX, pY, pZ, pMetaData, false, -1); - } - - public static boolean setOuterSpaceOreBlock(ModDimensionDef pDimensionDef, World pWorld, int pX, int pY, int pZ, - int pMetaData, boolean pAir) { - return setOuterSpaceOreBlock(pDimensionDef, pWorld, pX, pY, pZ, pMetaData, pAir, -1); - } - - /** - * Check if the block at given position may be replaced by an ore - * - * @param pWorld the world in question - * @param pX X-Cord - * @param pY Y-Cord - * @param pZ Z-Cord - * @return - */ - private static ReplaceState CheckForReplaceableBlock(World pWorld, int pX, int pY, int pZ, - ModDimensionDef pDimDef) { - try { - ReplaceState tFlag = ReplaceState.Unknown; - - Block targetBlock = pWorld.getBlock(pX, pY, pZ); - int targetBlockMeta = pWorld.getBlockMetadata(pX, pY, pZ); - - if (targetBlock == Blocks.air) tFlag = ReplaceState.Airblock; - else tFlag = pDimDef.getReplaceStateForBlock(targetBlock, targetBlockMeta); - - return tFlag; - } catch (Exception e) { - e.printStackTrace(GT_Log.err); - GalacticGreg.Logger.error("Error while processing CheckForReplaceableBlock(), defaulting to UNKNOWN"); - return ReplaceState.Unknown; - } - } - - /** - * Actually set the OreBlock - * - * @param pWorld the world in question - * @param pX - * @param pY - * @param pZ - * @param pMetaData GT-Ore metadata - * @param pAir - * @return - */ - public static boolean setOuterSpaceOreBlock(ModDimensionDef pDimensionDef, World pWorld, int pX, int pY, int pZ, - int pMetaData, boolean pAir, int pCustomGTOreOffset) { - if (!pAir) pY = Math.min(pWorld.getActualHeight(), Math.max(pY, 1)); - - if (pDimensionDef == null) { - GalacticGreg.Logger - .warn("Unknown DimensionID: %d. Will not set anything here", pWorld.provider.dimensionId); - return false; - } - try { - Block tBlock = pWorld.getBlock(pX, pY, pZ); - // If the meta is non-zero, and the target block is either non-air or the air-override is active - if ((pMetaData > 0) && ((tBlock != Blocks.air) || pAir)) { - // make sure we're either going with normal ore-metas, or small ores. - // Probably should do another check for <= 1700 - if (pMetaData < 1000 || pMetaData >= 16000) { - ReplaceState tRS = CheckForReplaceableBlock(pWorld, pX, pY, pZ, pDimensionDef); - - // Unable to lookup replacement state. Means: The block is unknown, and shall not be replaced - if (tRS == ReplaceState.Unknown) { - GalacticGreg.Logger.trace("Not placing ore Meta %d, as target block is unknown", pMetaData); - return false; - } else if (tRS == ReplaceState.Airblock && !pAir) { - GalacticGreg.Logger.trace("Not placing ore Meta %d in midair, as AIR is FALSE", pMetaData); - return false; - } - if (tRS == ReplaceState.CannotReplace) { - // wrong metaData ID for target block - GalacticGreg.Logger.trace("Not placing ore Meta %d, as the state is CANNOTREPLACE", pMetaData); - return false; - } - - if (pCustomGTOreOffset == -1) pMetaData += pDimensionDef.getStoneType() - .getOffset(); - else pMetaData += pCustomGTOreOffset; - // This fix seems like cargo cult coding...The Abstract class just returns 0 for the harvest level. - // But it aligns with the GT5U method, so yay? - pWorld.setBlock( - pX, - pY, - pZ, - GregTech_API.sBlockOres1, - GT_TileEntity_Ores.getHarvestData( - (short) pMetaData, - ((GT_Block_Ores_Abstract) GregTech_API.sBlockOres1) - .getBaseBlockHarvestLevel(pMetaData % 16000 / 1000)), - 0); - TileEntity tTileEntity = pWorld.getTileEntity(pX, pY, pZ); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - ((GT_TileEntity_Ores) tTileEntity).mMetaData = ((short) pMetaData); - ((GT_TileEntity_Ores) tTileEntity).mNatural = true; - } else { - // This is somehow triggered randomly, and most times the target block is air, which should - // never happen as we check for air... - // That's why I put this behind a debug config option. If you ever find the reason for it, - // please tell me what caused this - if (GalacticGreg.GalacticConfig.ReportOreGenFailures) GalacticGreg.Logger.warn( - "Something went wrong while placing GT OreTileEntity. Meta: %d X [%d] Y [%d] Z [%d]", - pMetaData, - pX, - pY, - pZ); - } - - return true; - } else GalacticGreg.Logger.warn( - "Not replacing block at pos %d %d %d due unexpected metaData for OreBlock: %d", - pX, - pY, - pZ, - pMetaData); - } - } catch (Exception e) { - if (GalacticGreg.GalacticConfig.ReportOreGenFailures) e.printStackTrace(); - } - return false; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_Layer_Space.java b/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_Layer_Space.java deleted file mode 100644 index 9dc8d2c070..0000000000 --- a/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_Layer_Space.java +++ /dev/null @@ -1,323 +0,0 @@ -package bloodasp.galacticgreg; - -import static gregtech.api.enums.GT_Values.oreveinPlacerOres; -import static gregtech.api.enums.GT_Values.oreveinPlacerOresMultiplier; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraft.world.chunk.IChunkProvider; - -import bloodasp.galacticgreg.api.ModContainer; -import bloodasp.galacticgreg.api.ModDimensionDef; -import bloodasp.galacticgreg.auxiliary.GTOreGroup; -import bloodasp.galacticgreg.registry.GalacticGregRegistry; -import gregtech.api.util.GT_Log; -import gregtech.api.world.GT_Worldgen; -import gregtech.common.OreMixBuilder; - -public class GT_Worldgen_GT_Ore_Layer_Space extends GT_Worldgen { - - public static int sWeight = 0; - public final short mMinY; - public final short mMaxY; - public final short mWeight; - public final short mDensity; - public final short mSize; - public final short mPrimaryMeta; - public final short mSecondaryMeta; - public final short mBetweenMeta; - public final short mSporadicMeta; - - private long mProfilingStart; - private long mProfilingEnd; - private Map allowedDims; - - public GT_Worldgen_GT_Ore_Layer_Space(OreMixBuilder mix) { - super(mix.oreMixName, GalacticGreg.oreVeinWorldgenList, mix.enabledByDefault); - - mMinY = (short) mix.minY; - mMaxY = (short) Math.max(this.mMinY + 5, mix.maxY); - mWeight = (short) mix.weight; - mDensity = (short) mix.density; - mSize = (short) Math.max(1, mix.size); - mPrimaryMeta = (short) mix.primary.mMetaItemSubID; - mSecondaryMeta = (short) mix.secondary.mMetaItemSubID; - mBetweenMeta = (short) mix.between.mMetaItemSubID; - mSporadicMeta = (short) mix.sporadic.mMetaItemSubID; - - allowedDims = new HashMap<>(); - - for (ModContainer mc : GalacticGregRegistry.getModContainers()) { - if (!mc.getEnabled()) continue; - - for (ModDimensionDef mdd : mc.getDimensionList()) { - String tDimIdentifier = mdd.getDimIdentifier(); - if (allowedDims.containsKey(tDimIdentifier)) GalacticGreg.Logger.error( - "Found 2 Dimensions with the same Identifier: %s Dimension will not generate Ores", - tDimIdentifier); - else { - boolean tFlag = mix.dimsEnabled.getOrDefault(mdd.getDimensionName(), false); - allowedDims.put(tDimIdentifier, tFlag); - } - } - } - - GalacticGreg.Logger.trace("Initialized new OreLayer: %s", mix.oreMixName); - if (mEnabled) sWeight += this.mWeight; - } - - /** - * Check if *this* orelayer is enabled for pDimensionDef - * - * @param pDimensionDef the ChunkProvider in question - * @return - */ - public boolean isEnabledForDim(ModDimensionDef pDimensionDef) { - return allowedDims.getOrDefault(pDimensionDef.getDimIdentifier(), false); - } - - private static Map> _mBufferedVeinList = new HashMap<>(); - - /** - * Get a List of all Veins which are enabled for given Dim. Query is buffered - * - * @param pDimensionDef - * @return null if nothing is found or error - */ - private static List getOreMixIDsForDim(ModDimensionDef pDimensionDef) { - List tReturn; - - if (_mBufferedVeinList.containsKey(pDimensionDef.getDimIdentifier())) - tReturn = _mBufferedVeinList.get(pDimensionDef.getDimIdentifier()); - else { - tReturn = new ArrayList<>(); - for (GT_Worldgen tWorldGen : GalacticGreg.oreVeinWorldgenList) - if (tWorldGen instanceof GT_Worldgen_GT_Ore_Layer_Space - && ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).isEnabledForDim(pDimensionDef)) - tReturn.add(tWorldGen.mWorldGenName); - - _mBufferedVeinList.put(pDimensionDef.getDimIdentifier(), tReturn); - } - - return tReturn; - } - - /** - * Select a random ore-vein from the list - * - * @param pDimensionDef - * @param pRandom - * @return - */ - public static GTOreGroup getRandomOreGroup(ModDimensionDef pDimensionDef, Random pRandom, boolean pIgnoreWeight) { - short primaryMeta = 0; - short secondaryMeta = 0; - short betweenMeta = 0; - short sporadicMeta = 0; - - if (pIgnoreWeight) { - List tEnabledVeins = getOreMixIDsForDim(pDimensionDef); - int tRnd = pRandom.nextInt(tEnabledVeins.size()); - String tVeinName = tEnabledVeins.get(tRnd); - - GT_Worldgen tGen = null; - for (GT_Worldgen tWorldGen : GalacticGreg.oreVeinWorldgenList) - if (tWorldGen instanceof GT_Worldgen_GT_Ore_Layer_Space - && ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mWorldGenName.equals(tVeinName)) tGen = tWorldGen; - - if (tGen != null) { - // GT_Worldgen_GT_Ore_Layer_Space tGen = GalacticGreg.oreVeinWorldgenList.get(tRndMix); - GalacticGreg.Logger.trace("Using Oremix %s for asteroid", tGen.mWorldGenName); - primaryMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tGen).mPrimaryMeta; - secondaryMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tGen).mSecondaryMeta; - betweenMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tGen).mBetweenMeta; - sporadicMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tGen).mSporadicMeta; - } - } else { - if ((GT_Worldgen_GT_Ore_Layer_Space.sWeight > 0) && (GalacticGreg.oreVeinWorldgenList.size() > 0)) { - GalacticGreg.Logger.trace("About to select oremix"); - boolean temp = true; - int tRandomWeight; - for (int i = 0; (i < 256) && (temp); i++) { - tRandomWeight = pRandom.nextInt(GT_Worldgen_GT_Ore_Layer_Space.sWeight); - for (GT_Worldgen tWorldGen : GalacticGreg.oreVeinWorldgenList) { - if (!(tWorldGen instanceof GT_Worldgen_GT_Ore_Layer_Space)) continue; - - tRandomWeight -= ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mWeight; - if (tRandomWeight <= 0) { - try { - if (((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).isEnabledForDim(pDimensionDef)) { - GalacticGreg.Logger.trace("Using Oremix %s for asteroid", tWorldGen.mWorldGenName); - primaryMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mPrimaryMeta; - secondaryMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mSecondaryMeta; - betweenMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mBetweenMeta; - sporadicMeta = ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mSporadicMeta; - - temp = false; - break; - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - } - } - } - } - if (primaryMeta != 0 || secondaryMeta != 0 || betweenMeta != 0 || sporadicMeta != 0) - return new GTOreGroup(primaryMeta, secondaryMeta, betweenMeta, sporadicMeta); - else return null; - } - - @Override - public boolean executeWorldgen(World pWorld, Random pRandom, String pBiome, int pDimensionType, int pChunkX, - int pChunkZ, IChunkProvider pChunkGenerator, IChunkProvider pChunkProvider) { - GalacticGreg.Logger.trace("Entering executeWorldgen for [%s]", mWorldGenName); - ModDimensionDef tMDD = GalacticGregRegistry.getDimensionTypeByChunkGenerator(pChunkGenerator); - if (tMDD == null) { - GalacticGreg.Logger - .trace("Can't find dimension definition for ChunkProvider %s, skipping", pChunkGenerator.toString()); - return false; - } - - if (!isEnabledForDim(tMDD)) { - GalacticGreg.Logger - .trace("OreGen for %s is disallowed in dimension %s, skipping", mWorldGenName, tMDD.getDimensionName()); - return false; - } - - if (GalacticGreg.GalacticConfig.ProfileOreGen) mProfilingStart = System.currentTimeMillis(); - // --------------------------- - int tMinY = this.mMinY + pRandom.nextInt(this.mMaxY - this.mMinY - 7); - - int cX = pChunkX - pRandom.nextInt(this.mSize); - int eX = pChunkX + 16 + pRandom.nextInt(this.mSize); - int cZ = pChunkZ - pRandom.nextInt(this.mSize); - int eZ = pChunkZ + 16 + pRandom.nextInt(this.mSize); - for (int tX = cX; tX <= eX; tX++) { - for (int tZ = cZ; tZ <= eZ; tZ++) { - if (this.mSecondaryMeta > 0) { - for (int i = tMinY - 1; i < tMinY + 3; i++) { - int placeX = Math.max( - 1, - Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX)) - / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); - int placeZ = Math.max( - 1, - Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ)) - / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); - if ((pRandom.nextInt(placeZ) == 0) || (pRandom.nextInt(placeX) == 0)) { - GT_TileEntity_Ores_Space - .setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mSecondaryMeta); - } - } - } - if (this.mBetweenMeta > 0) { - for (int i = tMinY + 2; i < tMinY + 6; i++) { - int placeX = Math.max( - 1, - Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX)) - / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); - int placeZ = Math.max( - 1, - Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ)) - / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); - if (((pRandom.nextInt(placeZ) == 0) || (pRandom.nextInt(placeX) == 0)) - && (pRandom.nextInt(2) == 0)) { - GT_TileEntity_Ores_Space.setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mBetweenMeta); - } - } - - } - if (this.mPrimaryMeta > 0) { - for (int i = tMinY + 4; i < tMinY + 8; i++) { - int placeX = Math.max( - 1, - Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX)) - / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); - int placeZ = Math.max( - 1, - Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ)) - / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); - if ((pRandom.nextInt(placeZ) == 0) || (pRandom.nextInt(placeX) == 0)) { - GT_TileEntity_Ores_Space.setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mPrimaryMeta); - } - } - } - if (this.mSporadicMeta > 0) { - for (int i = tMinY - 1; i < tMinY + 8; i++) { - int placeX = Math.max( - 1, - Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX)) - / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); - int placeZ = Math.max( - 1, - Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ)) - / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); - if (((pRandom.nextInt(placeX) == 0) || (pRandom.nextInt(placeZ) == 0)) - && (pRandom.nextInt(7) == 0)) { - GT_TileEntity_Ores_Space.setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mSporadicMeta); - } - } - } - } - } - - if (oreveinPlacerOres) { - int nSmallOres = (cX - eX) * (cZ - eZ) * this.mDensity / 10 * oreveinPlacerOresMultiplier; - for (int nSmallOresCount = 0; nSmallOresCount < nSmallOres; nSmallOresCount++) { - int tX = pRandom.nextInt(16) + pChunkX + 2; - int tZ = pRandom.nextInt(16) + pChunkZ + 2; - int tY = pRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. - if (this.mPrimaryMeta > 0) - GT_TileEntity_Ores_Space.setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mPrimaryMeta + 16000); - tX = pRandom.nextInt(16) + pChunkX + 2; - tZ = pRandom.nextInt(16) + pChunkZ + 2; - tY = pRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. - if (this.mSecondaryMeta > 0) GT_TileEntity_Ores_Space - .setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mSecondaryMeta + 16000); - tX = pRandom.nextInt(16) + pChunkX + 2; - tZ = pRandom.nextInt(16) + pChunkZ + 2; - tY = pRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. - if (this.mBetweenMeta > 0) - GT_TileEntity_Ores_Space.setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mBetweenMeta + 16000); - tX = pRandom.nextInt(16) + pChunkX + 2; - tZ = pRandom.nextInt(16) + pChunkZ + 2; - tY = pRandom.nextInt(190) + 10; // Y height can vary from 10 to 200 for small ores. - if (this.mSporadicMeta > 0) GT_TileEntity_Ores_Space - .setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mSporadicMeta + 16000); - } - } - - // --------------------------- - if (GalacticGreg.GalacticConfig.ProfileOreGen) { - try { - mProfilingEnd = System.currentTimeMillis(); - long tTotalTime = mProfilingEnd - mProfilingStart; - GalacticGreg.Profiler.AddTimeToList(tMDD, tTotalTime); - GalacticGreg.Logger.debug( - "Done with OreLayer-Worldgen in DimensionType %s. Generation took %d ms", - tMDD.getDimensionName(), - tTotalTime); - } catch (Exception ignored) {} // Silently ignore errors - } - - GalacticGreg.Logger.trace("Leaving executeWorldgen"); - return true; - } - - public int getDensityFromPos(int aX, int aZ, int aSeedX, int aSeedZ) { - if (aX < 0) aX -= 16; - if (aZ < 0) aZ -= 16; - return Math.max( - 1, - this.mDensity - / ((int) Math.sqrt(2 + Math.pow(aX / 16 - aSeedX / 16, 2) + Math.pow(aZ / 16 - aSeedZ / 16, 2)))); - } -} diff --git a/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_SmallPieces_Space.java b/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_SmallPieces_Space.java deleted file mode 100644 index f5def8e0fd..0000000000 --- a/src/main/java/bloodasp/galacticgreg/GT_Worldgen_GT_Ore_SmallPieces_Space.java +++ /dev/null @@ -1,116 +0,0 @@ -package bloodasp.galacticgreg; - -import java.util.HashMap; -import java.util.Map; -import java.util.Random; - -import net.minecraft.world.World; -import net.minecraft.world.chunk.IChunkProvider; - -import bloodasp.galacticgreg.api.ModContainer; -import bloodasp.galacticgreg.api.ModDimensionDef; -import bloodasp.galacticgreg.registry.GalacticGregRegistry; -import gregtech.api.world.GT_Worldgen; -import gregtech.common.SmallOreBuilder; - -public class GT_Worldgen_GT_Ore_SmallPieces_Space extends GT_Worldgen { - - public final short mMinY; - public final short mMaxY; - public final short mAmount; - public final short mMeta; - - private long mProfilingStart; - private long mProfilingEnd; - private Map allowedDims; - - public GT_Worldgen_GT_Ore_SmallPieces_Space(SmallOreBuilder ore) { - super(ore.smallOreName, GalacticGreg.smallOreWorldgenList, ore.enabledByDefault); - - mMinY = (short) ore.minY; - mMaxY = (short) Math.max(this.mMinY + 1, ore.maxY); - mAmount = (short) Math.max(1, ore.amount); - mMeta = (short) ore.ore.mMetaItemSubID; - - allowedDims = new HashMap<>(); - for (ModContainer mc : GalacticGregRegistry.getModContainers()) { - if (!mc.getEnabled()) continue; - - for (ModDimensionDef mdd : mc.getDimensionList()) { - String tDimIdentifier = mdd.getDimIdentifier(); - if (allowedDims.containsKey(tDimIdentifier)) GalacticGreg.Logger.error( - "Found 2 Dimensions with the same Identifier: %s Dimension will not generate Ores", - tDimIdentifier); - else { - boolean tFlag = ore.dimsEnabled.getOrDefault(mdd.getDimensionName(), false); - allowedDims.put(tDimIdentifier, tFlag); - } - } - } - - GalacticGreg.Logger.trace("Initialized new OreLayer: %s", ore.smallOreName); - } - - /** - * Check if *this* orelayer is enabled for pDimensionDef - * - * @param pDimensionDef the ChunkProvider in question - * @return - */ - public boolean isEnabledForDim(ModDimensionDef pDimensionDef) { - return allowedDims.getOrDefault(pDimensionDef.getDimIdentifier(), false); - } - - @Override - public boolean executeWorldgen(World pWorld, Random pRandom, String pBiome, int pDimensionType, int pChunkX, - int pChunkZ, IChunkProvider pChunkGenerator, IChunkProvider pChunkProvider) { - GalacticGreg.Logger.trace("Entering executeWorldgen for [%s]", mWorldGenName); - ModDimensionDef tMDD = GalacticGregRegistry.getDimensionTypeByChunkGenerator(pChunkGenerator); - if (tMDD == null) { - GalacticGreg.Logger - .trace("Can't find dimension definition for ChunkProvider %s, skipping", pChunkGenerator.toString()); - return false; - } - - if (!isEnabledForDim(tMDD)) { - GalacticGreg.Logger - .trace("OreGen for %s is disallowed in dimension %s, skipping", mWorldGenName, tMDD.getDimensionName()); - return false; - } - - if (GalacticGreg.GalacticConfig.ProfileOreGen) mProfilingStart = System.currentTimeMillis(); - // --------------------------- - - if (this.mMeta > 0) { - int i = 0; - for (int j = Math.max(1, this.mAmount / 2 + pRandom.nextInt(this.mAmount) / 2); i < j; i++) { - GT_TileEntity_Ores_Space.setOuterSpaceOreBlock( - tMDD, - pWorld, - pChunkX + pRandom.nextInt(16), - this.mMinY + pRandom.nextInt(Math.max(1, this.mMaxY - this.mMinY)), - pChunkZ + pRandom.nextInt(16), - this.mMeta + 16000); - } - } - // --------------------------- - if (GalacticGreg.GalacticConfig.ProfileOreGen) { - try { - mProfilingEnd = System.currentTimeMillis(); - long tTotalTime = mProfilingEnd - mProfilingStart; - GalacticGreg.Profiler.AddTimeToList(tMDD, tTotalTime); - GalacticGreg.Logger.debug( - "Done with SmallOre-Worldgen in DimensionType %s. Generation took %d ms", - tMDD.getDimensionName(), - tTotalTime); - } catch (Exception ignored) {} // Silently ignore errors - } - - GalacticGreg.Logger.trace("Leaving executeWorldgen"); - return true; - } - - public boolean isAllowedForHeight(int pTargetHeight) { - return (pTargetHeight >= mMinY && pTargetHeight <= mMaxY); - } -} diff --git a/src/main/java/bloodasp/galacticgreg/GT_Worldgenerator_Space.java b/src/main/java/bloodasp/galacticgreg/GT_Worldgenerator_Space.java deleted file mode 100644 index e76bc9bbcc..0000000000 --- a/src/main/java/bloodasp/galacticgreg/GT_Worldgenerator_Space.java +++ /dev/null @@ -1,565 +0,0 @@ -package bloodasp.galacticgreg; - -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.inventory.IInventory; -import net.minecraft.util.Vec3; -import net.minecraft.util.WeightedRandomChestContent; -import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.IChunkProvider; -import net.minecraftforge.common.ChestGenHooks; - -import bloodasp.galacticgreg.api.AsteroidBlockComb; -import bloodasp.galacticgreg.api.BlockMetaComb; -import bloodasp.galacticgreg.api.Enums.DimensionType; -import bloodasp.galacticgreg.api.Enums.SpaceObjectType; -import bloodasp.galacticgreg.api.Enums.TargetBlockPosition; -import bloodasp.galacticgreg.api.GTOreTypes; -import bloodasp.galacticgreg.api.ISpaceObjectGenerator; -import bloodasp.galacticgreg.api.ModDimensionDef; -import bloodasp.galacticgreg.api.SpecialBlockComb; -import bloodasp.galacticgreg.api.StructureInformation; -import bloodasp.galacticgreg.auxiliary.GTOreGroup; -import bloodasp.galacticgreg.dynconfig.DynamicDimensionConfig; -import bloodasp.galacticgreg.dynconfig.DynamicDimensionConfig.AsteroidConfig; -import bloodasp.galacticgreg.registry.GalacticGregRegistry; -import cpw.mods.fml.common.IWorldGenerator; -import cpw.mods.fml.common.eventhandler.EventBus; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.util.GT_Log; -import gregtech.api.world.GT_Worldgen; -import gregtech.common.GT_Worldgenerator; - -public class GT_Worldgenerator_Space implements IWorldGenerator { - - public static boolean sAsteroids = true; - private final EventBus eventBus = new EventBus(); - private World worldObj; - - private int chunkX; - private int chunkZ; - private int mSize = 100; - - private long mProfilingStart; - private long mProfilingEnd; - - public GT_Worldgenerator_Space() { - GameRegistry.registerWorldGenerator(this, Integer.MAX_VALUE); - } - - public void generate(Random pRandom, int pX, int pZ, World pWorld, IChunkProvider pChunkGenerator, - IChunkProvider pChunkProvider) { - pX *= 16; - pZ *= 16; - - String tBiome = pWorld.getBiomeGenForCoords(pX + 8, pZ + 8).biomeName; - pRandom = new Random(pRandom.nextInt()); - if (tBiome == null) { - tBiome = BiomeGenBase.plains.biomeName; - } - GalacticGreg.Logger - .trace("Triggered generate: [ChunkGenerator %s] [Biome %s]", pChunkGenerator.toString(), tBiome); - - ModDimensionDef tDimDef = GalacticGregRegistry.getDimensionTypeByChunkGenerator(pChunkGenerator); - - if (tDimDef == null) { - GalacticGreg.Logger.trace( - "Ignoring ChunkGenerator type %s as there is no definition for it in the registry", - pChunkGenerator.toString()); - return; - } else { - GalacticGreg.Logger.trace("Selected DimDef: [%s]", tDimDef.getDimIdentifier()); - } - - /* - * In some later addons maybe, not for now. Ignoring Biome-based worldgen String tBiome = - * pWorld.getBiomeGenForCoords(pX + 8, pZ + 8).biomeName; pRandom = new Random(pRandom.nextInt()); if (tBiome == - * null) { tBiome = BiomeGenBase.plains.biomeName; } - */ - - if (tDimDef.getDimensionType() != DimensionType.Planet) { - if (tDimDef.getRandomAsteroidMaterial() == null) GalacticGreg.Logger.error( - "Dimension [%s] is set to Asteroids, but no asteroid material is specified! Nothing will generate", - tDimDef.getDimensionName()); - else Generate_Asteroids(tDimDef, pRandom, pWorld, pX, pZ); - } else if (tDimDef.getDimensionType() != DimensionType.Asteroid) { - Generate_OreVeins(tDimDef, pRandom, pWorld, pX, pZ, "", pChunkGenerator, pChunkProvider); - } - - Chunk tChunk = pWorld.getChunkFromBlockCoords(pX, pZ); - if (tChunk != null) { - tChunk.isModified = true; - } - } - - private void Generate_Asteroids(ModDimensionDef pDimensionDef, Random pRandom, World pWorld, int pX, int pZ) { - GalacticGreg.Logger.trace("Running asteroid-gen in Dim %s", pDimensionDef.getDimIdentifier()); - - AsteroidConfig tAConf = DynamicDimensionConfig.getAsteroidConfig(pDimensionDef); - if (tAConf == null) { - GalacticGreg.Logger.error( - "Dimension %s is set to asteroid, but no config object can be found. Skipping!", - pDimensionDef.getDimIdentifier()); - return; - } else { - GalacticGreg.Logger.trace("Asteroid probability: %d", tAConf.Probability); - } - - if ((tAConf.Probability <= 1) || (pRandom.nextInt(tAConf.Probability) == 0)) { - GalacticGreg.Logger.trace("Generating asteroid NOW"); - // --------------------------- - if (GalacticGreg.GalacticConfig.ProfileOreGen) mProfilingStart = System.currentTimeMillis(); - // ----------------------------- - - // Get Random position - int tX = pX + pRandom.nextInt(16); - int tY = 50 + pRandom.nextInt(200 - 50); - int tZ = pZ + pRandom.nextInt(16); - - // Check if position is free - if ((pWorld.getBlock(tX, tY, tZ) - .isAir(pWorld, tX, tY, tZ))) { - - int tCustomAsteroidOffset = -1; - int tGraniteMeta = 0; - - // Select Random OreGroup and Asteroid Material - GTOreGroup tOreGroup = GT_Worldgen_GT_Ore_Layer_Space.getRandomOreGroup(pDimensionDef, pRandom, true); - AsteroidBlockComb tABComb = pDimensionDef.getRandomAsteroidMaterial(); - if (tABComb == null) return; - - // Fill Vars for random Asteroid - Block tFinalAsteroidBlock = tABComb.getBlock(); - int tFinalAsteroidBlockMeta = tABComb.getMeta(); - int tFinalOreOffset = tABComb.getOreMaterial() - .getOffset(); - int tFinalUpdateMode = tABComb.getOreMaterial() - .getUpdateMode(); - GalacticGreg.Logger.debug( - "Asteroid will be build with: Block: [%s] OreType: [%s]", - Block.blockRegistry.getNameForObject(tABComb.getBlock()), - tABComb.getOreMaterial() - .toString()); - - // get random Ore-asteroid generator from the list of registered generators - ISpaceObjectGenerator aGen = pDimensionDef.getRandomSOGenerator(SpaceObjectType.OreAsteroid); - if (aGen == null) { - GalacticGreg.Logger.ot_error( - "GalacticGreg.Generate_Asteroids.NoSOGenFound", - "No SpaceObjectGenerator has been registered for type ORE_ASTEROID in Dimension %s. Nothing will generate", - pDimensionDef.getDimensionName()); - return; - } - - aGen.reset(); - aGen.setCenterPoint(tX, tY, tZ); - aGen.randomize(tAConf.MinSize, tAConf.MaxSize); // Initialize random values and set size - aGen.calculate(); // Calculate structure - - // Random loot-chest somewhere in the asteroid - Vec3 tChestPosition = Vec3.createVectorHelper(0, 0, 0); - boolean tDoLootChest = false; - int tNumLootItems = 0; - if (tAConf.LootChestChance > 0) { - GalacticGreg.Logger.trace("Random loot chest enabled, flipping the coin"); - int tChance = pRandom.nextInt(100); // Loot chest is 1 in 100 (Was: 1:1000 which actually never - // happend) - if (tAConf.LootChestChance >= tChance) { - GalacticGreg.Logger.debug("We got a match. Preparing to generate the loot chest"); - // Get amount of items for the loot chests, randomize it (1-num) if enabled - if (tAConf.RandomizeNumLootItems) tNumLootItems = pRandom.nextInt(tAConf.NumLootItems - 1) + 1; - else tNumLootItems = tAConf.NumLootItems; - - GalacticGreg.Logger - .debug(String.format("Loot chest random item count will be: %d", tNumLootItems)); - - // try to find any block that is not on the asteroids outer-shell - GalacticGreg.Logger.trace("Starting lookup for valid asteroid-block for the chest"); - for (int x = 0; x < 64; x++) // 64 enough? Should be - { - int tRndBlock = pRandom.nextInt( - aGen.getStructure() - .size()); - StructureInformation tChestSI = aGen.getStructure() - .get(tRndBlock); - if (tChestSI.getBlockPosition() != TargetBlockPosition.AsteroidShell) { - GalacticGreg.Logger.debug( - String.format( - "Chest position found [x:%d y:%d z:%d]", - tChestSI.getX(), - tChestSI.getY(), - tChestSI.getZ())); - // Found valid position "Somewhere" in the asteroid, set position... - tChestPosition = Vec3 - .createVectorHelper(tChestSI.getX(), tChestSI.getY(), tChestSI.getZ()); - // .. and set CreateFlag to true - tDoLootChest = true; - break; - } - } - } - } - - // Now build the structure - GalacticGreg.Logger.trace("Now generating Space-Structure"); - for (StructureInformation si : aGen.getStructure()) { - // Only replace airblocks - if (pWorld.isAirBlock(si.getX(), si.getY(), si.getZ())) { - // === Loot-chest generator >> - if (tDoLootChest) // If gen-lootchest enabled... - { - // Check if current x/y/z is the location where the chest shall be created - if ((int) tChestPosition.xCoord == si.getX() && (int) tChestPosition.yCoord == si.getY() - && (int) tChestPosition.zCoord == si.getZ()) { - GalacticGreg.Logger.trace("Now generating LootChest and contents"); - // Get items for the configured loot-table - WeightedRandomChestContent[] tRandomLoot = ChestGenHooks - .getItems(DynamicDimensionConfig.getLootChestTable(tAConf), pRandom); - - // Get chest-block to spawn - BlockMetaComb tTargetChestType = GalacticGreg.GalacticConfig.CustomLootChest; - - // Place down the chest - if (tTargetChestType.getMeta() > 0) pWorld.setBlock( - si.getX(), - si.getY(), - si.getZ(), - tTargetChestType.getBlock(), - tTargetChestType.getMeta(), - 2); - else pWorld.setBlock(si.getX(), si.getY(), si.getZ(), tTargetChestType.getBlock()); - - // Retrieve the TEs IInventory that should've been created - IInventory entityChestInventory = (IInventory) pWorld - .getTileEntity(si.getX(), si.getY(), si.getZ()); - // If it's not null... - if (entityChestInventory != null) { - // and if we're on the server... - if (!pWorld.isRemote) { - // Fill the chest with stuffz! - WeightedRandomChestContent.generateChestContents( - pRandom, - tRandomLoot, - entityChestInventory, - tNumLootItems); - GalacticGreg.Logger.trace("Loot chest successfully generated"); - } - } else { - // Something made a boo.. - GalacticGreg.Logger.warn( - "Could not create lootchest at X[%d] Y[%d] Z[%d]. getTileEntity() returned null", - si.getX(), - si.getY(), - si.getZ()); - } - // Make sure we never compare coordinates again (for this asteroid/Structure) - tDoLootChest = false; - // Do some debug logging - GalacticGreg.Logger - .debug("Generated LootChest at X[%d] Y[%d] Z[%d]", si.getX(), si.getY(), si.getZ()); - // And skip the rest of this function - continue; - } - } - // << Loot-chest generator === - - // === Ore generator >> - boolean tPlacedOreBlock = false; - // If a valid oregroup has been selected (more than 0 ore-veins are enabled for this dim) - if (tOreGroup != null) { - // GalacticGreg.Logger.trace("tOreGoup is populated, continuing"); - // Choose a number between 0 and 100 - int ranOre = pRandom.nextInt(100); - int tFinalOreMeta = 0; - - // If choosen number is below the configured orechance, do random between and sporadic - if (ranOre < tAConf.OreChance) { - if (pRandom.nextBoolean()) { - // Only take as final value if meta is not zero - if (tOreGroup.SporadicBetweenMeta > 0) - tFinalOreMeta = tOreGroup.SporadicBetweenMeta; - } else { - // Only take as final value if meta is not zero - if (tOreGroup.SporadicAroundMeta > 0) tFinalOreMeta = tOreGroup.SporadicAroundMeta; - } - } - // If choosen number is below the configured orechance, do random primary and secondary - // We use an offset here, so this part is always higher than the first check. - else if (ranOre < tAConf.OreChance + tAConf.OrePrimaryOffset) { - if (pRandom.nextBoolean()) { - // Only take as final value if meta is not zero - if (tOreGroup.PrimaryMeta > 0) tFinalOreMeta = tOreGroup.PrimaryMeta; - } else { - // Only take as final value if meta is not zero - if (tOreGroup.SecondaryMeta > 0) tFinalOreMeta = tOreGroup.SecondaryMeta; - } - } - - // if the final oreMeta has been found... - // GalacticGreg.Logger.info("tFinalOreMeta is %d", tFinalOreMeta); - if (tFinalOreMeta > 0) { - // make sure we obey the configured "HiddenOres" setting (No ores on the shell) - if (tAConf.HiddenOres && (si.getBlockPosition() == TargetBlockPosition.AsteroidShell)) { - // Ore would be placed around the shell, which is disabled (hiddenores) - GalacticGreg.Logger.trace( - "Skipping ore-placement event (HiddenOres=true; TargetBlockPosition=AsteroidShell)"); - } else { - // try to place the ore block. The result is stored in tPlacedOreBlock - tPlacedOreBlock = GT_TileEntity_Ores_Space.setOuterSpaceOreBlock( - pDimensionDef, - pWorld, - si.getX(), - si.getY(), - si.getZ(), - tOreGroup.SecondaryMeta, - true, - tFinalOreOffset); - } - } - } - // << Ore generator === - - // === Additional special blocks >> - // If no ore-block has been placed yet... - if (!tPlacedOreBlock) { - // try to spawn special blocks - boolean tFlag = doGenerateSpecialBlocks( - pDimensionDef, - pRandom, - pWorld, - tAConf, - si.getX(), - si.getY(), - si.getZ(), - si.getBlockPosition()); - - // No special block placed? Try smallores - if (tFlag) tFlag = doGenerateSmallOreBlock( - pDimensionDef, - pRandom, - pWorld, - tAConf, - si.getX(), - si.getY(), - si.getZ(), - tFinalOreOffset); - - // no smallores either? do normal block - if (tFlag) pWorld.setBlock( - si.getX(), - si.getY(), - si.getZ(), - tFinalAsteroidBlock, - tFinalAsteroidBlockMeta, - tFinalUpdateMode); - - } - // << Additional special blocks === - } - } - } - // --------------------------- - // OreGen profiler stuff - if (GalacticGreg.GalacticConfig.ProfileOreGen) { - try { - mProfilingEnd = System.currentTimeMillis(); - long tTotalTime = mProfilingEnd - mProfilingStart; - GalacticGreg.Profiler.AddTimeToList(pDimensionDef, tTotalTime); - GalacticGreg.Logger.debug( - "Done with Asteroid-Worldgen in DimensionType %s. Generation took %d ms", - pDimensionDef.getDimensionName(), - tTotalTime); - } catch (Exception ignored) {} // Silently ignore errors - } - // --------------------------- - } - GalacticGreg.Logger.trace("Leaving asteroid-gen for Dim %s", pDimensionDef.getDimIdentifier()); - } - - /** - * Generate Special Blocks in asteroids if enabled - * - * @param pDimensionDef - * @param pRandom - * @param pWorld - * @param tAConf - * @param eX - * @param eY - * @param eZ - * @return - */ - private boolean doGenerateSpecialBlocks(ModDimensionDef pDimensionDef, Random pRandom, World pWorld, - AsteroidConfig tAConf, int eX, int eY, int eZ, TargetBlockPosition pBlockPosition) { - - boolean tFlag = true; - // Handler to generate special BlockTypes randomly if activated - if (tAConf.SpecialBlockChance > 0) { - if (pRandom.nextInt(100) < tAConf.SpecialBlockChance) { - SpecialBlockComb bmc = pDimensionDef.getRandomSpecialAsteroidBlock(); - if (bmc != null) { - boolean tIsAllowed = false; - - switch (bmc.getBlockPosition()) { - case AsteroidCore: - if (pBlockPosition == TargetBlockPosition.AsteroidCore) tIsAllowed = true; - break; - case AsteroidCoreAndShell: - if (pBlockPosition == TargetBlockPosition.AsteroidCore - || pBlockPosition == TargetBlockPosition.AsteroidShell) tIsAllowed = true; - break; - case AsteroidShell: - if (pBlockPosition == TargetBlockPosition.AsteroidShell) tIsAllowed = true; - break; - case AsteroidInnerCore: - if (pBlockPosition == TargetBlockPosition.AsteroidInnerCore) tIsAllowed = true; - break; - default: - break; - } - - if (tIsAllowed) { - pWorld.setBlock(eX, eY, eZ, bmc.getBlock(), bmc.getMeta(), 2); - tFlag = false; - } - } - } - } - return tFlag; - } - - /** - * Pick a random small-ore block from the list of enabled small ores for this dim - * - * @param pDimDef - * @param pRandom - * @return - */ - private boolean doGenerateSmallOreBlock(ModDimensionDef pDimDef, Random pRandom, World pWorld, - AsteroidConfig pAConf, int pX, int pY, int pZ, int pTargetBlockOffset) { - boolean tFlag = true; - // If smallores are enabled... - if (pAConf.SmallOreChance > 0) { - // ... and we hit the random-chance ... - if (pRandom.nextInt(100) < pAConf.SmallOreChance) { - // Do small ores. - int tRandomWeight; - boolean continueSearch = true; - int tFoundOreMeta = -1; - // First find a small ore... - for (int i = 0; (i < 256) && (continueSearch); i++) { - tRandomWeight = pRandom.nextInt(GT_Worldgen_GT_Ore_Layer_Space.sWeight); - for (GT_Worldgen tWorldGen : GalacticGreg.smallOreWorldgenList) { - - if (!(tWorldGen instanceof GT_Worldgen_GT_Ore_SmallPieces_Space)) { - continue; - } - // That is enabled for *this* dim... - if (!((GT_Worldgen_GT_Ore_SmallPieces_Space) tWorldGen).isEnabledForDim(pDimDef)) continue; - - // And in the correct y-level, of ObeyLimits is true... - if (pAConf.ObeyHeightLimits - && !((GT_Worldgen_GT_Ore_SmallPieces_Space) tWorldGen).isAllowedForHeight(pY)) continue; - - // Care about weight - tRandomWeight -= ((GT_Worldgen_GT_Ore_SmallPieces_Space) tWorldGen).mAmount; - if (tRandomWeight <= 0) { - // And return found ore meta - tFoundOreMeta = ((GT_Worldgen_GT_Ore_SmallPieces_Space) tWorldGen).mMeta; - continueSearch = false; - } - } - } - if (tFoundOreMeta > -1) { - // Make the oreID a small ore with correct type - int tCustomOffset = (GTOreTypes.SmallOres.getOffset() + pTargetBlockOffset); - - // Set the smallOre block - GT_TileEntity_Ores_Space - .setOuterSpaceOreBlock(pDimDef, pWorld, pX, pY, pZ, tFoundOreMeta, true, tCustomOffset); - tFlag = false; - } - } - } - return tFlag; - } - - /** - * Untested! But should work... Comments are todo - * - * @param pDimensionDef - * @param pRandom - * @param pWorld - * @param pX - * @param pZ - * @param pBiome - * @param pChunkGenerator - * @param pChunkProvider - */ - private void Generate_OreVeins(ModDimensionDef pDimensionDef, Random pRandom, World pWorld, int pX, int pZ, - String pBiome, IChunkProvider pChunkGenerator, IChunkProvider pChunkProvider) { - GalacticGreg.Logger.trace("Running orevein-gen in Dim %s", pDimensionDef.getDimIdentifier()); - - if (GT_Worldgenerator.isOreChunk(pX / 16, pZ / 16)) { - if ((GT_Worldgen_GT_Ore_Layer_Space.sWeight > 0) && (GalacticGreg.oreVeinWorldgenList.size() > 0)) { - - boolean temp = true; - int tRandomWeight; - for (int i = 0; (i < 256) && (temp); i++) { - tRandomWeight = pRandom.nextInt(GT_Worldgen_GT_Ore_Layer_Space.sWeight); - for (GT_Worldgen tWorldGen : GalacticGreg.oreVeinWorldgenList) { - if (tWorldGen instanceof GT_Worldgen_GT_Ore_Layer_Space) - tRandomWeight -= ((GT_Worldgen_GT_Ore_Layer_Space) tWorldGen).mWeight; - - if (tRandomWeight <= 0) { - try { - if (tWorldGen.executeWorldgen( - pWorld, - pRandom, - pBiome, - Integer.MIN_VALUE, - pX, - pZ, - pChunkGenerator, - pChunkProvider)) { - temp = false; - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - break; - } - } - } - } - // Generate Small Ores - - int i = 0; - for (int tX = pX - 16; i < 3; tX += 16) { - int j = 0; - for (int tZ = pZ - 16; j < 3; tZ += 16) { - for (GT_Worldgen tWorldGen : GalacticGreg.smallOreWorldgenList) { - try { - tWorldGen.executeWorldgen( - pWorld, - pRandom, - "", - Integer.MIN_VALUE, - tX, - tZ, - pChunkGenerator, - pChunkProvider); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - j++; - } - i++; - } - } - GalacticGreg.Logger.trace("Leaving orevein-gen for Dim %s", pDimensionDef.getDimIdentifier()); - } -} diff --git a/src/main/java/bloodasp/galacticgreg/GalacticGreg.java b/src/main/java/bloodasp/galacticgreg/GalacticGreg.java deleted file mode 100644 index 2e566dca1d..0000000000 --- a/src/main/java/bloodasp/galacticgreg/GalacticGreg.java +++ /dev/null @@ -1,113 +0,0 @@ -package bloodasp.galacticgreg; - -import static gregtech.api.enums.Mods.AppliedEnergistics2; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import bloodasp.galacticgreg.auxiliary.GalacticGregConfig; -import bloodasp.galacticgreg.auxiliary.LogHelper; -import bloodasp.galacticgreg.auxiliary.ProfilingStorage; -import bloodasp.galacticgreg.command.AEStorageCommand; -import bloodasp.galacticgreg.command.ProfilingCommand; -import bloodasp.galacticgreg.registry.GalacticGregRegistry; -import bloodasp.galacticgreg.schematics.SpaceSchematicHandler; -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.Mod.EventHandler; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.event.FMLServerStartingEvent; -import gregtech.GT_Version; -import gregtech.api.world.GT_Worldgen; - -@Mod( - modid = GalacticGreg.MODID, - name = GalacticGreg.MODNAME, - version = GalacticGreg.VERSION, - dependencies = "after:GalacticraftCore; required-after:gregtech@5.09.32.30;", - acceptableRemoteVersions = "*") -public class GalacticGreg { - - public static final List smallOreWorldgenList = new ArrayList<>(); - public static final List oreVeinWorldgenList = new ArrayList<>(); - - public static final String NICE_MODID = "GalacticGreg"; - public static final String MODID = "galacticgreg"; - public static final String MODNAME = "Galactic Greg"; - - public static final String VERSION = GT_Version.VERSION; - - public static final LogHelper Logger = new LogHelper(NICE_MODID); - public static ProfilingStorage Profiler = new ProfilingStorage(); - public static SpaceSchematicHandler SchematicHandler; - - public static Random GalacticRandom = null; - - public static GalacticGregConfig GalacticConfig = null; - - /** - * Preload phase. Read config values and set various features.. n stuff... - * - * @param aEvent - */ - @EventHandler - public void onPreLoad(FMLPreInitializationEvent aEvent) { - GalacticConfig = new GalacticGregConfig(aEvent.getModConfigurationDirectory(), NICE_MODID, NICE_MODID); - if (!GalacticConfig.LoadConfig()) GalacticGreg.Logger - .warn("Something went wrong while reading GalacticGregs config file. Things will be wonky.."); - - GalacticRandom = new Random(System.currentTimeMillis()); - - if (GalacticConfig.SchematicsEnabled) - SchematicHandler = new SpaceSchematicHandler(aEvent.getModConfigurationDirectory()); - - Logger.trace("Leaving PRELOAD"); - } - - public static final ArrayList ADDITIONALVEINREGISTER = new ArrayList<>(); - - /** - * Postload phase. Mods can add their custom definition to our api in their own PreLoad or Init-phase Once - * GalacticGregRegistry.InitRegistry() is called, no changes are accepted. (Well you can with reflection, but on a - * "normal" way it's not possible) - * - * @param aEvent - */ - @EventHandler - public void onPostLoad(FMLPostInitializationEvent aEvent) { - Logger.trace("Entering POSTLOAD"); - - if (!GalacticGregRegistry.InitRegistry()) throw new RuntimeException( - "GalacticGreg registry has been finalized from a 3rd-party mod, this is forbidden!"); - - for (Runnable r : ADDITIONALVEINREGISTER) { - try { - r.run(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - GalacticConfig.serverPostInit(); - - Logger.trace("Leaving POSTLOAD"); - } - - /** - * If oregen profiling is enabled, then register the command - * - * @param pEvent - */ - @EventHandler - public void serverLoad(FMLServerStartingEvent pEvent) { - Logger.trace("Entering SERVERLOAD"); - - if (GalacticConfig.ProfileOreGen) pEvent.registerServerCommand(new ProfilingCommand()); - - if (AppliedEnergistics2.isModLoaded() && GalacticConfig.EnableAEExportCommand - && GalacticConfig.SchematicsEnabled) pEvent.registerServerCommand(new AEStorageCommand()); - - Logger.trace("Leaving SERVERLOAD"); - } -} diff --git a/src/main/java/bloodasp/galacticgreg/SpaceDimRegisterer.java b/src/main/java/bloodasp/galacticgreg/SpaceDimRegisterer.java deleted file mode 100644 index 360d7f1bda..0000000000 --- a/src/main/java/bloodasp/galacticgreg/SpaceDimRegisterer.java +++ /dev/null @@ -1,179 +0,0 @@ -package bloodasp.galacticgreg; - -import static bloodasp.galacticgreg.api.enums.DimensionDef.Anubis; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Asteroids; -import static bloodasp.galacticgreg.api.enums.DimensionDef.BarnardC; -import static bloodasp.galacticgreg.api.enums.DimensionDef.BarnardE; -import static bloodasp.galacticgreg.api.enums.DimensionDef.BarnardF; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Callisto; -import static bloodasp.galacticgreg.api.enums.DimensionDef.CentauriAlpha; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Ceres; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Deimos; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Enceladus; -import static bloodasp.galacticgreg.api.enums.DimensionDef.EndAsteroids; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Europa; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Ganymede; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Haumea; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Horus; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Io; -import static bloodasp.galacticgreg.api.enums.DimensionDef.KuiperBelt; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Maahes; -import static bloodasp.galacticgreg.api.enums.DimensionDef.MakeMake; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Mars; -import static bloodasp.galacticgreg.api.enums.DimensionDef.MehenBelt; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Mercury; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Miranda; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Moon; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Neper; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Oberon; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Phobos; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Pluto; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Proteus; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Seth; -import static bloodasp.galacticgreg.api.enums.DimensionDef.TcetiE; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Titan; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Triton; -import static bloodasp.galacticgreg.api.enums.DimensionDef.VegaB; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Venus; -import static bloodasp.galacticgreg.api.enums.ModContainers.AmunRa; -import static bloodasp.galacticgreg.api.enums.ModContainers.GalactiCraftCore; -import static bloodasp.galacticgreg.api.enums.ModContainers.GalacticraftMars; -import static bloodasp.galacticgreg.api.enums.ModContainers.GalaxySpace; -import static bloodasp.galacticgreg.api.enums.ModContainers.Vanilla; - -import net.minecraft.init.Blocks; - -import bloodasp.galacticgreg.api.AsteroidBlockComb; -import bloodasp.galacticgreg.api.Enums; -import bloodasp.galacticgreg.api.GTOreTypes; -import bloodasp.galacticgreg.api.ModContainer; -import bloodasp.galacticgreg.api.SpecialBlockComb; -import bloodasp.galacticgreg.registry.GalacticGregRegistry; - -/** - * In this class, you'll find everything you need in order to tell GGreg what to do and where. Everything is done in - * here. If you're trying to use anything else, you're probably doing something wrong (Or I forgot to add it. In that - * case, find me on github and create an issue please) - */ -public class SpaceDimRegisterer { - - public static void register() { - GalacticGregRegistry.registerModContainer(setupVanilla()); - GalacticGregRegistry.registerModContainer(setupGalactiCraftCore()); - GalacticGregRegistry.registerModContainer(setupGalactiCraftPlanets()); - GalacticGregRegistry.registerModContainer(setupGalaxySpace()); - GalacticGregRegistry.registerModContainer(setupAmunRa()); - } - - /** - * Vanilla MC (End Asteroids) - */ - private static ModContainer setupVanilla() { - - // If you happen to have an asteroid dim, just skip the blocklist, and setDimensionType() to - // DimensionType.Asteroid - // also don't forget to add at least one asteroid type, or nothing will generate! - EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.Netherrack)); - EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.RedGranite)); - EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.BlackGranite)); - EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.EndStone)); - - // These Blocks will randomly be generated - EndAsteroids.modDimensionDef.addSpecialAsteroidBlock(new SpecialBlockComb(Blocks.glowstone)); - EndAsteroids.modDimensionDef - .addSpecialAsteroidBlock(new SpecialBlockComb(Blocks.lava, Enums.AllowedBlockPosition.AsteroidCore)); - - Vanilla.modContainer.addDimensionDef(EndAsteroids.modDimensionDef); - - return Vanilla.modContainer; - } - - /** - * Mod GalactiCraft - */ - private static ModContainer setupGalactiCraftCore() { - GalactiCraftCore.modContainer.addDimensionDef(Moon.modDimensionDef); - return GalactiCraftCore.modContainer; - } - - /** - * As GalactiCraftPlanets is an optional mod, don't hardlink it here - */ - private static ModContainer setupGalactiCraftPlanets() { - // Overwrite ore blocks on mars with red granite ones. This will default to regular stone if not set - Mars.modDimensionDef.setStoneType(GTOreTypes.RedGranite); - GalacticraftMars.modContainer.addDimensionDef(Mars.modDimensionDef); - - Asteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.BlackGranite)); - Asteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.RedGranite)); - Asteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.Netherrack)); - GalacticraftMars.modContainer.addDimensionDef(Asteroids.modDimensionDef); - - return GalacticraftMars.modContainer; - } - - /** - * Mod GalaxySpace by BlesseNtumble - */ - private static ModContainer setupGalaxySpace() { - // First, we create a mod-container that will be populated with dimensions later. - // The Name must match your ID, as it is checked if this mod is loaded, in order - // to enable/disable the parsing/registering of dimensions - // See enum ModContainers - - // Now lets first define a block here for our dimension. You can add the ID, but you don't have to. - // It will automatically add the mods name that is defined in the modcontainer. - // See enum DimensionBlockMetaDefinitionList - - // Now define the available dimensions, and their chunkprovider. - // Same as above, to not have any dependency in your code, you can just give it a string. - // But it's better to use the actual ChunkProvider class. The Name is used for the GalacticGreg config file. - // The resulting config setting will be: __false = false - // make sure to never change this name once you've generated your config files, as it will overwrite everything! - - // 30.11.2016 GSpace v1.1.3 Stable - GalaxySpace.modContainer.addDimensionDef(Pluto.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Triton.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Proteus.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Oberon.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Titan.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Callisto.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Ganymede.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Ceres.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Deimos.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Enceladus.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Io.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Europa.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Phobos.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Venus.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Mercury.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(MakeMake.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Haumea.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(CentauriAlpha.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(VegaB.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(BarnardC.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(BarnardE.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(BarnardF.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(TcetiE.modDimensionDef); - GalaxySpace.modContainer.addDimensionDef(Miranda.modDimensionDef); - KuiperBelt.modDimensionDef.setDimensionType(Enums.DimensionType.Asteroid); - KuiperBelt.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.RedGranite)); - KuiperBelt.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.BlackGranite)); - GalaxySpace.modContainer.addDimensionDef(KuiperBelt.modDimensionDef); - return GalaxySpace.modContainer; - } - - /** - * Mod Amun-Ra - */ - private static ModContainer setupAmunRa() { - AmunRa.modContainer.addDimensionDef(Neper.modDimensionDef); - AmunRa.modContainer.addDimensionDef(Maahes.modDimensionDef); - AmunRa.modContainer.addDimensionDef(Anubis.modDimensionDef); - AmunRa.modContainer.addDimensionDef(Horus.modDimensionDef); - AmunRa.modContainer.addDimensionDef(Seth.modDimensionDef); - MehenBelt.modDimensionDef.addAsteroidMaterial(GTOreTypes.BlackGranite); - AmunRa.modContainer.addDimensionDef(MehenBelt.modDimensionDef); - return AmunRa.modContainer; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/WorldGenGaGT.java b/src/main/java/bloodasp/galacticgreg/WorldGenGaGT.java deleted file mode 100644 index f5577c9295..0000000000 --- a/src/main/java/bloodasp/galacticgreg/WorldGenGaGT.java +++ /dev/null @@ -1,28 +0,0 @@ -package bloodasp.galacticgreg; - -import gregtech.api.enums.OreMixes; -import gregtech.api.enums.SmallOres; - -public class WorldGenGaGT implements Runnable { - - @Override - public void run() { - new GT_Worldgenerator_Space(); - - /* - * This part here enables every GT Small Ore for Space Dims. - */ - for (SmallOres ore : SmallOres.values()) { - ore.addGaGregSmallOre(); - } - - /* - * This part here enables every GT Ore for Space Dims. - */ - - for (OreMixes mix : OreMixes.values()) { - mix.addGaGregOreLayer(); - } - } - -} diff --git a/src/main/java/bloodasp/galacticgreg/api/AsteroidBlockComb.java b/src/main/java/bloodasp/galacticgreg/api/AsteroidBlockComb.java deleted file mode 100644 index 7976eadc0a..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/AsteroidBlockComb.java +++ /dev/null @@ -1,77 +0,0 @@ -package bloodasp.galacticgreg.api; - -import net.minecraft.block.Block; - -/** - * Class for a bit more advanced combinations for Asteroids, which supports Custom Blocks as base material and Values - * required to generate Gregtech ores - */ -public class AsteroidBlockComb extends BlockMetaComb { - - private final GTOreTypes _mGTOreMaterial; - - /** - * Create an advanced definition which uses the GregTech-OreType values for ores, and your own definition of Block - * for the asteroid material - * - * @param pOreType The GregTech oreType - * @param pBlock Your block - */ - public AsteroidBlockComb(GTOreTypes pOreType, Block pBlock) { - super(pBlock, 0); - _mGTOreMaterial = pOreType; - } - - /** - * Create an advanced definition which uses the GregTech-OreType values for ores, and your own definition of Block - * for the asteroid material - * - * @param pOreType The GregTech oreType - * @param pBlock Your block - * @param pMeta The metavalue for your block (If required) - */ - public AsteroidBlockComb(GTOreTypes pOreType, Block pBlock, int pMeta) { - super(pBlock, pMeta); - _mGTOreMaterial = pOreType; - } - - /** - * Create a simple definition which uses the GregTech-OreType values for both asteroidStone and ores - * - * @param pOreType The GregTech oreType - */ - public AsteroidBlockComb(GTOreTypes pOreType) { - super(pOreType.getBlock(), pOreType.getMeta()); - _mGTOreMaterial = pOreType; - } - - /** - * Internal function - * - * @return The GT Material for the oregen - */ - public GTOreTypes getOreMaterial() { - return _mGTOreMaterial; - } - - @Override - public boolean equals(Object other) { - if (other == null) return false; - if (other == this) return true; - if (!(other instanceof AsteroidBlockComb)) return false; - AsteroidBlockComb otherObj = (AsteroidBlockComb) other; - - boolean tFlag = true; - String otherName = Block.blockRegistry.getNameForObject(otherObj.getBlock()); - String thisName = Block.blockRegistry.getNameForObject(this.getBlock()); - if (otherName != null && thisName != null) { - if (!otherName.equals(thisName)) tFlag = false; - - if (!(otherObj.getMeta() == this.getMeta())) tFlag = false; - - if (!(otherObj.getOreMaterial() == this.getOreMaterial())) tFlag = false; - } else tFlag = false; - - return tFlag; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/api/BlockMetaComb.java b/src/main/java/bloodasp/galacticgreg/api/BlockMetaComb.java deleted file mode 100644 index 7bf504d144..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/BlockMetaComb.java +++ /dev/null @@ -1,50 +0,0 @@ -package bloodasp.galacticgreg.api; - -import net.minecraft.block.Block; - -/** - * Class used for Simple Block - Meta constructs - */ -public class BlockMetaComb { - - private int mMeta; - private Block mBlock; - - /** - * Creates a simple instance for a block that has no meta value - * - * @param pBlock The Block in question. 0 is used as meta - */ - public BlockMetaComb(Block pBlock) { - this(pBlock, 0); - } - - /** - * Creates a simple instance for a block with a meta value - * - * @param pBlock The Block in question - * @param pMeta The MetaValue in question ([block]:[meta]) - */ - public BlockMetaComb(Block pBlock, int pMeta) { - mMeta = pMeta; - mBlock = pBlock; - } - - /** - * Internal function - * - * @return The metadata for this block - */ - public int getMeta() { - return mMeta; - } - - /** - * Internal function - * - * @return The block - */ - public Block getBlock() { - return mBlock; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/api/Enums.java b/src/main/java/bloodasp/galacticgreg/api/Enums.java deleted file mode 100644 index 0d864e54c9..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/Enums.java +++ /dev/null @@ -1,51 +0,0 @@ -package bloodasp.galacticgreg.api; - -public class Enums { - - public enum SpaceObjectType { - OreAsteroid, - NonOreSchematic - } - - public enum TargetBlockPosition { - Invalid, - AsteroidInnerCore, - AsteroidCore, - AsteroidShell, - StructureBlock - } - - public enum AllowedBlockPosition { - AsteroidInnerCore, - AsteroidCore, - AsteroidShell, - AsteroidCoreAndShell - } - - public enum AirReplaceRule { - NeverReplaceAir, - AllowReplaceAir, - OnlyReplaceAir - } - - public enum ReplaceState { - Unknown, - Airblock, - CanReplace, - CannotReplace - } - - public enum DimensionType { - /** - * The Dimension is a void dimension and asteroids shall be generated. They will randomly spawn bewteen 0 and - * 250 Additional config values will be generated in worldconfig - */ - Asteroid, - - /** - * The Dimension is a planet, and only ores shall be generated in the ground - */ - Planet, - } - -} diff --git a/src/main/java/bloodasp/galacticgreg/api/GTOreTypes.java b/src/main/java/bloodasp/galacticgreg/api/GTOreTypes.java deleted file mode 100644 index dedbc8f5cc..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/GTOreTypes.java +++ /dev/null @@ -1,66 +0,0 @@ -package bloodasp.galacticgreg.api; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; - -import gregtech.api.GregTech_API; - -/** - * Representation of the various GregTech ores, with their counterpart in VanillaBlocks, and the OreOffset that is - * required to generate the proper ores - */ -public enum GTOreTypes { - - /** - * The Definition for Gregtech's RedGranite - **/ - RedGranite(4000, GregTech_API.sBlockGranites, 8, 3), - /** - * The Definition for Gregtech's BlackGranite - */ - BlackGranite(3000, GregTech_API.sBlockGranites, 0, 3), - /** - * The Definition for EndStone - */ - EndStone(2000, Blocks.end_stone, 0, 0), - /** - * The Definition for Netherrack - */ - Netherrack(1000, Blocks.netherrack, 0, 0), // Unsure about blockupdate value! - /** - * The Definition for SmallOres (And BlockType Stone) - */ - SmallOres(16000, Blocks.stone, 0, 0), // Unsure about blockupdate value! - /** - * The Definition for Ores (And BlockType Stone) - */ - NormalOres(0, Blocks.stone, 0, 0); // Unsure about blockupdate value! - - private int _mOffset; - private Block _mStoneBlock; - private int _mBlockMeta; - private int _mUpdateMode; - - GTOreTypes(int pOffset, Block pBlock, int pMeta, int pUpdateMode) { - _mOffset = pOffset; - _mStoneBlock = pBlock; - _mBlockMeta = pMeta; - _mUpdateMode = pUpdateMode; - } - - public Block getBlock() { - return _mStoneBlock; - } - - public int getMeta() { - return _mBlockMeta; - } - - public int getOffset() { - return _mOffset; - } - - public int getUpdateMode() { - return _mUpdateMode; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/api/ISpaceObjectGenerator.java b/src/main/java/bloodasp/galacticgreg/api/ISpaceObjectGenerator.java deleted file mode 100644 index 881efa08eb..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/ISpaceObjectGenerator.java +++ /dev/null @@ -1,58 +0,0 @@ -package bloodasp.galacticgreg.api; - -import java.util.List; - -import net.minecraft.util.Vec3; - -import bloodasp.galacticgreg.api.Enums.SpaceObjectType; - -public interface ISpaceObjectGenerator { - - Vec3 getCenterPoint(); - - /** - * Set the center-point of the object to generate, by providing X, Y and Z directly - * - * @param pX - * @param pY - * @param pZ - */ - void setCenterPoint(int pX, int pY, int pZ); - - /** - * Set the center-point of the object to generate, by providing a Vec3 instance - * - * @param pCenter - */ - void setCenterPoint(Vec3 pCenter); - - List getStructure(); - - /** - * Calculate the structure Called after randomize() - */ - void calculate(); - - /** - * Randomize the structure. Called before calculate() - * - * @param pSizeMin The minimum size for the structure. It is up to you how you handle this value. it's what the user - * sets in his config file - * @param pSizeMax The maximum size for the structure. It is up to you how you handle this value. it's what the user - * sets in his config file - */ - void randomize(int pSizeMin, int pSizeMax); - - /** - * Define the type of the generator. OreAsteroid will be used to spawn ores at given coordinates, where - * NonOreSchematic will use the Blocks provided in the structural information to generate your structure - * - * @return - */ - SpaceObjectType getType(); - - /** - * This function is called every time the generator shall be reset in order to generate a blank, new structure - */ - void reset(); -} diff --git a/src/main/java/bloodasp/galacticgreg/api/ModContainer.java b/src/main/java/bloodasp/galacticgreg/api/ModContainer.java deleted file mode 100644 index b5416b164f..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/ModContainer.java +++ /dev/null @@ -1,85 +0,0 @@ -package bloodasp.galacticgreg.api; - -import java.util.ArrayList; -import java.util.List; - -/** - * Defines a Mod where this Generator shall be active. Note: This will only work (obviously) for Dimensions where - * either: - Gregtech has a hook in the OreGen or - For mods which are addons to GalactiCraft - * - */ -public class ModContainer { - - private String _mModName; - private List _mDimensionLookup; - private boolean _mEnabled = false; - - /** - * Internal function - * - * @return The state if the Registry could find the mod or not - */ - public boolean getEnabled() { - return _mEnabled; - } - - /** - * Internal function - * - * Never set this to true. This is an internal marker which is set by the registry if the mod could be found or not - * - * @param pEnabled - */ - public void setEnabled(boolean pEnabled) { - _mEnabled = pEnabled; - } - - /** - * Define a new Mod where GT OreGen shall be enabled - * - * @param pModName The modID. Make sure to use the proper mod-id, or it won't load correctly - */ - public ModContainer(String pModName) { - _mModName = pModName; - _mDimensionLookup = new ArrayList<>(); - } - - /** - * Internal function - * - * @return The mods name - */ - public String getModName() { - return _mModName; - } - - /** - * Internal function - * - * @return The list of attached dimensions for this mod - */ - public List getDimensionList() { - return _mDimensionLookup; - } - - /** - * Adds a new dimension to this modcontainer. Make sure you've added all blocks there first - * - * @param pDimDef The dimension definition to be added - * @return true if it could be added, false if not - */ - public boolean addDimensionDef(ModDimensionDef pDimDef) { - for (ModDimensionDef mdd : _mDimensionLookup) { - if (mdd.getChunkProviderName() - .equals(pDimDef.getChunkProviderName())) { - // Cannot add DimensionDefinition; The Given chunk-provider name is already taken! - return false; - } - } - - // Set the parent modName of this dimension. This will finalize it - pDimDef.setParentModName(_mModName); - _mDimensionLookup.add(pDimDef); - return true; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/api/ModDBMDef.java b/src/main/java/bloodasp/galacticgreg/api/ModDBMDef.java deleted file mode 100644 index 674c1dd799..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/ModDBMDef.java +++ /dev/null @@ -1,161 +0,0 @@ -package bloodasp.galacticgreg.api; - -import net.minecraft.block.Block; - -import bloodasp.galacticgreg.api.Enums.ReplaceState; - -/** - * Mod "Dimension Block Meta Definition" Defines the Block-Meta combination for Blocks that can be replaced by the - * oregen. - * - */ -public class ModDBMDef { - - private String _targetBlockName; - private int _targetMeta; - private boolean _canAlwaysReplace; - - public String getBlockName() { - return _targetBlockName; - } - - public int getMeta() { - return _targetMeta; - } - - public boolean getCanAlwaysReplace() { - return _canAlwaysReplace; - } - - /** - * Internal function - * - * Check if the given Block is equal to the block in this instance - * - * @param pBlock the Block in question - * @return - */ - public ReplaceState blockEquals(Block pBlock) { - if (pBlock == null) return ReplaceState.Unknown; - - if (Block.blockRegistry.getNameForObject(pBlock) - .equals(_targetBlockName)) return ReplaceState.CanReplace; - else return ReplaceState.CannotReplace; - } - - /** - * Internal function - * - * Check if the given Block is equal to the block in this instance and matches the metadata - * - * @param pBlock the block in question - * @param pMeta the metadata in question - * @return - */ - public ReplaceState blockEquals(Block pBlock, int pMeta) { - ReplaceState tFlag = ReplaceState.Unknown; - if (blockEquals(pBlock) == ReplaceState.CanReplace) { - if (pMeta == _targetMeta || _canAlwaysReplace) tFlag = ReplaceState.CanReplace; - else tFlag = ReplaceState.CannotReplace; - } - - return tFlag; - } - - @Override - public boolean equals(Object other) { - if (other == null) return false; - if (other == this) return true; - if (!(other instanceof ModDBMDef)) return false; - ModDBMDef otherModDBMDef = (ModDBMDef) other; - return (otherModDBMDef._targetBlockName.equals(_targetBlockName) && otherModDBMDef._targetMeta == _targetMeta); - } - - /** - * Create a new "Block that can be replaced by ores" definition. Meta defaults to 0 here - * - * @param pTargetBlockName The unlocalizedName of the block - */ - public ModDBMDef(String pTargetBlockName) { - this(pTargetBlockName, 0, false); - } - - /** - * Create a new "Block that can be replaced by ores" definition - * - * @param pTargetBlockName The unlocalizedName of the block - * @param pMetaData The blocks metadata - */ - public ModDBMDef(String pTargetBlockName, int pMetaData) { - this(pTargetBlockName, pMetaData, false); - } - - /** - * Create a new "Block that can be replaced by ores" definition - * - * @param pTargetBlock The instance of the block that can be replaced - * @param pMetaData The blocks metadata - */ - public ModDBMDef(Block pTargetBlock, int pMetaData) { - this(Block.blockRegistry.getNameForObject(pTargetBlock), pMetaData, false); - } - - /** - * Create a new "Block that can be replaced by ores" definition. Meta defaults to 0 here - * - * @param pTargetBlock The instance of the block that can be replaced - */ - public ModDBMDef(Block pTargetBlock) { - this(Block.blockRegistry.getNameForObject(pTargetBlock), 0, false); - } - - /** - * Create a new "Block that can be replaced by ores" definition - * - * @param pTargetBlock - * @param pCanAlwaysReplace set to true if this block can always be replaced, regardless of it's metavalue. Like: - * [block]:* - */ - public ModDBMDef(Block pTargetBlock, boolean pCanAlwaysReplace) { - this(Block.blockRegistry.getNameForObject(pTargetBlock), -1, pCanAlwaysReplace); - } - - /** - * Create a new "Block that can be replaced by ores" definition - * - * @param pTargetBlockName The unlocalizedName of the block - * @param pCanAlwaysReplace set to true if this block can always be replaced, regardless of it's metavalue. Like: - * [block]:* - */ - public ModDBMDef(String pTargetBlockName, boolean pCanAlwaysReplace) { - this(pTargetBlockName, -1, false); - } - - /** - * Create a new "Block that can be replaced by ores" definition - * - * @param pTargetBlockName The unlocalizedName of the block - * @param pMetaData The blocks metadata - * @param pCanAlwaysReplace set to true if this block can always be replaced, regardless of it's metavalue. Like: - * [block]:* - */ - public ModDBMDef(String pTargetBlockName, int pMetaData, boolean pCanAlwaysReplace) { - _targetBlockName = pTargetBlockName; - _targetMeta = pMetaData; - _canAlwaysReplace = pCanAlwaysReplace; - } - - /** - * Internal function Never run this function. It is used to update the blocks name when GalacticGreg is initializing - * its internal structures - * - * @param pParentModName The modname to be attached to the block-name - */ - public void updateBlockName(String pParentModName) { - // Do we already have a FQBN? then do nothing - if (_targetBlockName.contains(":")) { - return; - } - _targetBlockName = String.format("%s:%s", pParentModName, _targetBlockName); - } -} diff --git a/src/main/java/bloodasp/galacticgreg/api/ModDimensionDef.java b/src/main/java/bloodasp/galacticgreg/api/ModDimensionDef.java deleted file mode 100644 index 92b291f089..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/ModDimensionDef.java +++ /dev/null @@ -1,466 +0,0 @@ -package bloodasp.galacticgreg.api; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.world.chunk.IChunkProvider; - -import bloodasp.galacticgreg.api.Enums.AirReplaceRule; -import bloodasp.galacticgreg.api.Enums.DimensionType; -import bloodasp.galacticgreg.api.Enums.ReplaceState; -import bloodasp.galacticgreg.api.Enums.SpaceObjectType; - -// import bloodasp.galacticgreg.GalacticGreg; - -/** - * Class to define a Dimension. Supposed to be added to a ModContainer - */ -public class ModDimensionDef { - - private static final String STR_NOTDEFINED = "iiznotdefined"; - private String _mDimensionName; - private String _mInternalDimIdentifier; - private String _mChunkProvider; - private AirReplaceRule _mDimAirSetting; - private ArrayList _mReplaceableBlocks; - private DimensionType _mDimensionType; - - private List _mSpaceObjectsGenerators; - private List _mSpaceStructureGenerators; - - // Special Planets config settings - private int _mGroundOreMaxY = 64; - private int _mFloatingAsteroidsMinY = 128; - // ------ - - // Override for stonetype - private GTOreTypes _mStoneType; - - // Asteroid stuff - private List _mValidAsteroidMaterials; - private List _mSpecialBlocksForAsteroids; - - private Random _mRandom = new Random(System.currentTimeMillis()); - - /** - * Internal function - * - * @return A list of possible asteroid-mixes that shall be generated - */ - public List getValidAsteroidMaterials() { - return _mValidAsteroidMaterials; - } - - // ================================================= - /** - * Internal function The only purpose of this functions is to get a default config value for this dim, that can be - * altered by the mod author which adds the dimension definition to his mod, but also provide the - * modpack-author/serveradmin to change these values aswell - */ - public int getPreConfiguratedGroundOreMaxY() { - return _mGroundOreMaxY; - } - - /** - * Internal function The only purpose of this functions is to get a default config value for this dim, that can be - * altered by the mod author which adds the dimension definition to his mod, but also provide the - * modpack-author/serveradmin to change these values aswell - */ - public int getPreConfiguratedFloatingAsteroidMinY() { - return _mFloatingAsteroidsMinY; - } - - /** - * Register new generator for objects in space. You can register as many as you want. If you don't register - * anything, no structures will generate and the default Asteroid-Generator will be used - * - * @param pSpaceObjectGenerator An instance of your own object generator - */ - public void registerSpaceObjectGenerator(ISpaceObjectGenerator pSpaceObjectGenerator) { - SpaceObjectType tType = pSpaceObjectGenerator.getType(); - switch (tType) { - case NonOreSchematic: - _mSpaceStructureGenerators.add(pSpaceObjectGenerator); - break; - case OreAsteroid: - _mSpaceObjectsGenerators.add(pSpaceObjectGenerator); - break; - default: - // GalacticGreg.Logger.error("registerSpaceObjectGenerator() found unhandled generator type %s. Please - // report asap, the author was lazy!", tType.toString()); - break; - - } - } - - /** - * Internal function Return a random generator for space objects - */ - public ISpaceObjectGenerator getRandomSOGenerator(SpaceObjectType pTargetType) { - ISpaceObjectGenerator tGen = null; - List tLst = null; - try { - switch (pTargetType) { - case NonOreSchematic: - tLst = _mSpaceStructureGenerators; - break; - case OreAsteroid: - tLst = _mSpaceObjectsGenerators; - break; - default: - break; - } - - if (tLst != null) { - if (tLst.size() == 1) tGen = tLst.get(0); - else if (tLst.size() > 1) tGen = tLst.get(_mRandom.nextInt(tLst.size())); - } - } catch (Exception e) { - e.printStackTrace(); - } - return tGen; - } - - /** - * Define the default values for the floating asteroids and the oregen here. As both generators run in the same - * dimension, and you probably don't want to have asteroids stuck in the ground, both generators are separated from - * each other. Basically, you can go with the default values. If you want to change them, make sure that pOregenMaxY - * is lower than pAsteroidMinY - * - * @param pOregenMaxY The maximum Y-height where ores will be allowed to spawn. Default: 64 - * @param pAsteroidMinY The minimum Y-height that has to be reached before asteroids will spawn. Default: 128 - * @throws IllegalArgumentException if the limits are invalid - * - */ - public void setAsteroidAndPlanetLimits(int pOregenMaxY, int pAsteroidMinY) { - if (pOregenMaxY >= pAsteroidMinY) - throw new IllegalArgumentException("pOregenMaxY must be LOWER than pAsteroidMinY!"); - - _mFloatingAsteroidsMinY = pAsteroidMinY; - _mGroundOreMaxY = pOregenMaxY; - } - // ================================================= - - /** - * Internal function - * - * @return A list of all special blocks that shall be used to generate the asteroids. - */ - public List getSpecialBlocksForAsteroids() { - return _mSpecialBlocksForAsteroids; - } - - public List getSpaceObjectGenerators() { - return _mSpaceObjectsGenerators; - } - - /** - * Internal function - * - * @return The type for this dimension - */ - public DimensionType getDimensionType() { - return _mDimensionType; - } - - /** - * Set whether this DimensionDefinition defines an void-dimension that shall spawn asteroids instead of ores in - * stone - * - * @param pType The dimensiontype to be used - */ - public void setDimensionType(DimensionType pType) { - _mDimensionType = pType; - } - - /** - * Internal function - * - * @return The configuration for AirBlocks - */ - public AirReplaceRule getAirSetting() { - return _mDimAirSetting; - } - - /** - * Define how the oregen shall handle air-blocks. These settings should be pretty self-explandatory, but anyways: - * NeverReplaceAir: No matter what, if there is an Air-Block found, it will not replace it. AllowReplaceAir: This - * will generate Ores in Stones (defined by addBlockDefinition()) and air if found OnlyReplaceAir : This will not - * generate Ores in solid blocks, but only in air - * - * Note that "OnlyReplaceAir" is a special setting if you have a dimension that is not defined as "Asteroids" but - * you still need/want to generate ores in midair. - * - * @param pSetting - */ - public void setAirSetting(AirReplaceRule pSetting) { - _mDimAirSetting = pSetting; - } - - /** - * Internal function - * - * @return The dimension identifier that is used internally to identify the dimension - */ - public String getDimIdentifier() { - return _mInternalDimIdentifier; - } - - /** - * Set a manual override for ores that shall be generated. This setting is ignored if getIsAsteroidDimension() - * returns true - * - * For example, on GalactiCraft Mars, this value is set to GTOreTypes.RedGranite, because it matches the color - * better. If you don't set anything here, it will generate regular stone-ores. - * - * @param pStoneType - */ - public void setStoneType(GTOreTypes pStoneType) { - _mStoneType = pStoneType; - } - - /** - * Internal function - * - * @return The stone override for gregtech ores - */ - public GTOreTypes getStoneType() { - return _mStoneType; - } - - /** - * Internal function - * - * @return The attached chunk-provider for this dimension - */ - public String getChunkProviderName() { - return _mChunkProvider; - } - - /** - * Adds a new blockdefinition to this dimension. This block will then later be replaced by ores. You can add as many - * blocks as you want. Just don't add Blocks.Air, as there is another setting for allowing Air-Replacement - * - * @param pBlockDef - * @return - */ - public boolean addBlockDefinition(ModDBMDef pBlockDef) { - if (_mReplaceableBlocks.contains(pBlockDef)) { - return false; - } else { - _mReplaceableBlocks.add(pBlockDef); - return true; - } - } - - /** - * Internal function - * - * @return The DimensionName in a Human-readable format - */ - public String getDimensionName() { - return _mDimensionName; - } - - /** - * Internal function - * - * @return A list of all defined Blocks that can be replaced while generating ores - */ - public ArrayList getReplaceableBlocks() { - return _mReplaceableBlocks; - } - - /** - * Define a new dimension - * - * @param pDimensionName The human-readable. Spaces will be removed - * @param pChunkProvider The chunkprovider class that shall be observed for the oregen - */ - public ModDimensionDef(String pDimensionName, Class pChunkProvider, - DimensionType pDimType) { - this( - pDimensionName, - pChunkProvider.toString() - .substring(6), - pDimType, - null); - } - - /** - * Define a new dimension - * - * @param pDimensionName The human-readable. Spaces will be removed - * @param pChunkProvider The chunkprovider class that shall be observed for the oregen - * @param pBlockDefinitions The list of predefined blocks to be replaced by ores - */ - public ModDimensionDef(String pDimensionName, Class pChunkProvider, - DimensionType pDimType, List pBlockDefinitions) { - this( - pDimensionName, - pChunkProvider.toString() - .substring(6), - pDimType, - pBlockDefinitions); - } - - /** - * Define a new dimension - * - * @param pDimensionName The human-readable DimensionName. Spaces will be removed - * @param pChunkProviderName The human-readable, full-qualified classname for the chunkprovider - */ - public ModDimensionDef(String pDimensionName, String pChunkProviderName, DimensionType pDimType) { - this(pDimensionName, pChunkProviderName, pDimType, null); - } - - /** - * Define a new dimension - * - * @param pDimensionName The human-readable DimensionName. Spaces will be removed - * @param pChunkProviderName The human-readable, full-qualified classname for the chunkprovider - * @param pBlockDefinitions The list of predefined blocks to be replaced by ores - */ - public ModDimensionDef(String pDimensionName, String pChunkProviderName, DimensionType pDimType, - List pBlockDefinitions) { - _mInternalDimIdentifier = STR_NOTDEFINED; - _mDimensionName = pDimensionName; - _mChunkProvider = pChunkProviderName; - _mDimensionType = pDimType; - - _mReplaceableBlocks = new ArrayList<>(); - if (pBlockDefinitions != null) _mReplaceableBlocks.addAll(pBlockDefinitions); - - _mValidAsteroidMaterials = new ArrayList<>(); - _mSpecialBlocksForAsteroids = new ArrayList<>(); - _mSpaceObjectsGenerators = new ArrayList<>(); - _mSpaceStructureGenerators = new ArrayList<>(); - } - - /** - * Internal function - * - * Do not call this function by yourself. Ever. It will cause explosions, water to blood, death of firstborn,... - * Seriously, don't do it. - */ - protected void setParentModName(String pModName) { - if (_mInternalDimIdentifier.equals(STR_NOTDEFINED)) { - _mInternalDimIdentifier = String.format("%s_%s", pModName, _mDimensionName); - } - - // Else Don't update, we're already set - - } - - /** - * Internal function - * - * Check if pBlock can be replaced by an ore - * - * @param pBlock - * @param pMeta - * @return - */ - public ReplaceState getReplaceStateForBlock(Block pBlock, int pMeta) { - ReplaceState tFlag = ReplaceState.Unknown; - - for (ModDBMDef pDef : _mReplaceableBlocks) { - ReplaceState tResult = pDef.blockEquals(pBlock, pMeta); - if (tResult == ReplaceState.Unknown) continue; - - if (tResult == ReplaceState.CanReplace) { - // GalacticGreg.Logger.trace("Targetblock found and metadata match. Replacement allowed"); - tFlag = ReplaceState.CanReplace; - } else if (tResult == ReplaceState.CannotReplace) { - // GalacticGreg.Logger.trace("Targetblock found but metadata mismatch. Replacement denied"); - tFlag = ReplaceState.CannotReplace; - } - break; - } - - return tFlag; - } - - /** - * Internal function - * - * Randomly select one material out of all defined materials - * - * @return - */ - public AsteroidBlockComb getRandomAsteroidMaterial() { - if (_mValidAsteroidMaterials.size() == 0) return null; - - if (_mValidAsteroidMaterials.size() == 1) return _mValidAsteroidMaterials.get(0); - else { - return _mValidAsteroidMaterials.get(_mRandom.nextInt(_mValidAsteroidMaterials.size())); - } - } - - /** - * Internal function - * - * Randomly select one special block to be placed in the asteroids - * - * @return - */ - public SpecialBlockComb getRandomSpecialAsteroidBlock() { - if (_mSpecialBlocksForAsteroids.size() == 0) return null; - - if (_mSpecialBlocksForAsteroids.size() == 1) return _mSpecialBlocksForAsteroids.get(0); - else { - return _mSpecialBlocksForAsteroids.get(_mRandom.nextInt(_mSpecialBlocksForAsteroids.size())); - } - } - - /** - * Define the material the asteroid shall be made of. Limited to GT-Based Ores and their stones - * - * @param pMaterial - */ - public void addAsteroidMaterial(GTOreTypes pMaterial) { - addAsteroidMaterial(new AsteroidBlockComb(pMaterial)); - } - - /** - * Define the material the asteroid shall be made of, more advanced option to specify your own blocks - * - * @param pBlockComb - */ - public void addAsteroidMaterial(AsteroidBlockComb pBlockComb) { - if (!_mValidAsteroidMaterials.contains(pBlockComb)) { - _mValidAsteroidMaterials.add(pBlockComb); - } - } - - /** - * Adds a new material for asteroid generation. These will spawn randomly in asteroids if enabled. You can basically - * add every block you can imagine. Be warned though, if you use Liquids (Water / Lava / ..), it can affect - * performance if the liquid is flowing down to the void. So make sure you define "AsteroidCore" as position - * - * @param pBlock Block-Meta Combination that shall be used - */ - public void addSpecialAsteroidBlock(SpecialBlockComb pBlock) { - if (!_mSpecialBlocksForAsteroids.contains(pBlock)) { - _mSpecialBlocksForAsteroids.add(pBlock); - } - } - - /** - * Internal function Called when GalacticGreg will finalize all its internal structures. You should never call this - * yourself - */ - public void finalizeReplaceableBlocks(String pParentModName) { - for (ModDBMDef rpb : _mReplaceableBlocks) { - try { - rpb.updateBlockName(pParentModName); - if (_mStoneType == null) _mStoneType = GTOreTypes.NormalOres; - } catch (Exception e) { - // GalacticGreg.Logger.error("Unable to finalize replaceable block with modname for block %s. Dimension - // %s will probably have problems generating ores", rpb.getBlockName(), _mDimensionName); - } - } - } -} diff --git a/src/main/java/bloodasp/galacticgreg/api/SpecialBlockComb.java b/src/main/java/bloodasp/galacticgreg/api/SpecialBlockComb.java deleted file mode 100644 index d5f6feb1ca..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/SpecialBlockComb.java +++ /dev/null @@ -1,71 +0,0 @@ -package bloodasp.galacticgreg.api; - -import net.minecraft.block.Block; - -import bloodasp.galacticgreg.api.Enums.AllowedBlockPosition; - -public class SpecialBlockComb extends BlockMetaComb { - - private AllowedBlockPosition _mBlockPosition; - - /** - * Creates a simple instance for a block that has a meta value and a block position it is allowed to spawn - * - * @param pBlock The Block in question - * @param pMeta The meta value of the block - * @param pBlockPosition The position this block is allowed to generate - */ - public SpecialBlockComb(Block pBlock, int pMeta, AllowedBlockPosition pBlockPosition) { - super(pBlock, pMeta); - _mBlockPosition = pBlockPosition; - } - - /** - * Creates a simple instance for a block that has no meta value but a position it is allowed to spawn - * - * @param pBlock The Block in question. 0 is used as meta - * @param pBlockPosition The position this block is allowed to generate - */ - public SpecialBlockComb(Block pBlock, AllowedBlockPosition pBlockPosition) { - super(pBlock, 0); - _mBlockPosition = pBlockPosition; - } - - /** - * Creates a simple instance for a block that has no meta value and is allowed to spawn everywhere - * - * @param pBlock The Block in question. 0 is used as meta, and "CoreAndShell" is used as position - */ - public SpecialBlockComb(Block pBlock) { - super(pBlock, 0); - _mBlockPosition = AllowedBlockPosition.AsteroidCoreAndShell; - } - - /** - * Internal function - * - * @return The position the block is supposed to spawn at - */ - public AllowedBlockPosition getBlockPosition() { - return _mBlockPosition; - } - - @Override - public boolean equals(Object other) { - if (other == null) return false; - if (other == this) return true; - if (!(other instanceof SpecialBlockComb)) return false; - SpecialBlockComb otherObj = (SpecialBlockComb) other; - - boolean tFlag = true; - String otherName = Block.blockRegistry.getNameForObject(otherObj.getBlock()); - String thisName = Block.blockRegistry.getNameForObject(this.getBlock()); - if (!otherName.equals(thisName)) tFlag = false; - - if (!(otherObj.getMeta() == this.getMeta())) tFlag = false; - - if (!(otherObj.getBlockPosition() == this.getBlockPosition())) tFlag = false; - - return tFlag; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/api/StructureInformation.java b/src/main/java/bloodasp/galacticgreg/api/StructureInformation.java deleted file mode 100644 index db205e3ef7..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/StructureInformation.java +++ /dev/null @@ -1,59 +0,0 @@ -package bloodasp.galacticgreg.api; - -import net.minecraft.util.Vec3; - -import bloodasp.galacticgreg.api.Enums.TargetBlockPosition; - -/** - * Structural information container. Holds X/Y/Z and block/meta information - */ -public class StructureInformation { - - private Vec3 _mCoordinates; - private TargetBlockPosition _mBlockPosition; - private BlockMetaComb _mBlockMetaComb; - - public TargetBlockPosition getBlockPosition() { - return _mBlockPosition; - } - - public int getX() { - return (int) Math.round(_mCoordinates.xCoord); - } - - public int getY() { - return (int) Math.round(_mCoordinates.yCoord); - } - - public int getZ() { - return (int) Math.round(_mCoordinates.zCoord); - } - - public BlockMetaComb getBlock() { - return _mBlockMetaComb; - } - - /** - * Init StructureInfo only with Coords and block position - * - * @param pCoordinates The coords in question - * @param pPosition The position-enum value - */ - public StructureInformation(Vec3 pCoordinates, TargetBlockPosition pPosition) { - this(pCoordinates, pPosition, null); - } - - /** - * Init StructureInfo with Coords, block position and a populated block/meta info - * - * @param pCoordinates The coords in question - * @param pPosition The position-enum value - * @param pTargetBlock The target block in question - */ - public StructureInformation(Vec3 pCoordinates, TargetBlockPosition pPosition, BlockMetaComb pTargetBlock) { - _mCoordinates = pCoordinates; - _mBlockPosition = pPosition; - _mBlockMetaComb = pTargetBlock; - } - -} diff --git a/src/main/java/bloodasp/galacticgreg/api/enums/DimensionBlockMetaDefinitionList.java b/src/main/java/bloodasp/galacticgreg/api/enums/DimensionBlockMetaDefinitionList.java deleted file mode 100644 index 279360d2d9..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/enums/DimensionBlockMetaDefinitionList.java +++ /dev/null @@ -1,57 +0,0 @@ -package bloodasp.galacticgreg.api.enums; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.init.Blocks; - -import bloodasp.galacticgreg.api.ModDBMDef; - -public enum DimensionBlockMetaDefinitionList { - - Moon(new ModDBMDef("tile.moonBlock", 4)), - Mars(new ModDBMDef("tile.mars", 9)), - Phobos(new ModDBMDef("phobosblocks", 2)), - Deimos(new ModDBMDef("deimosblocks", 1)), - Ceres(new ModDBMDef("ceresblocks", 1)), - Io(new ModDBMDef("ioblocks", 2)), - Ganymede(new ModDBMDef("ganymedeblocks", 1)), - Callisto(new ModDBMDef("callistoblocks", 1)), - Venus(new ModDBMDef("venusblocks", 1)), - Mercury(new ModDBMDef("mercuryblocks", 2)), - Enceladus(new ModDBMDef("enceladusblocks", 1)), - Titan(new ModDBMDef("titanblocks", 2)), - Oberon(new ModDBMDef("oberonblocks", 2)), - Proteus(new ModDBMDef("proteusblocks", 2)), - Triton(new ModDBMDef("tritonblocks", 2)), - Pluto(new ModDBMDef("plutoblocks", 5)), - MakeMake(new ModDBMDef("makemakegrunt", 1)), - Haumea(new ModDBMDef("haumeablocks")), - CentauriAlpha(new ModDBMDef("acentauribbsubgrunt")), - VegaB(new ModDBMDef("vegabsubgrunt")), - BarnardaC(new ModDBMDef("barnardaCdirt"), new ModDBMDef(Blocks.stone)), - BarnardaE(new ModDBMDef("barnardaEsubgrunt")), - BarnardaF(new ModDBMDef("barnardaFsubgrunt")), - TcetiE(new ModDBMDef("tcetieblocks", 2)), - Miranda(new ModDBMDef("mirandablocks", 2)), - Europa( - // Europa top layer turned off bc ores are too easy to spot - new ModDBMDef("europagrunt", 1), // Europa Ice Layer ~55-65 without top layer - new ModDBMDef(Blocks.water), new ModDBMDef(Blocks.flowing_water), new ModDBMDef(Blocks.ice), // Generates - // directly over - // bedrock - new ModDBMDef(Blocks.packed_ice), // Generates directly over bedrock - new ModDBMDef("europaunderwatergeyser") // Generates directly over bedrock - ), - Neper(new ModDBMDef(Blocks.stone), new ModDBMDef("tile.baseBlockRock", 10)), - Maahes(new ModDBMDef("tile.baseBlockRock", 1)), - Anubis(new ModDBMDef("tile.baseBlockRock", 1)), - Horus(new ModDBMDef(Blocks.obsidian)), - Seth(new ModDBMDef(Blocks.hardened_clay)); - - public final List DBMDefList; - - private DimensionBlockMetaDefinitionList(ModDBMDef... DBMDefArray) { - DBMDefList = Arrays.asList(DBMDefArray); - } -} diff --git a/src/main/java/bloodasp/galacticgreg/api/enums/DimensionDef.java b/src/main/java/bloodasp/galacticgreg/api/enums/DimensionDef.java deleted file mode 100644 index d5e766b9f7..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/enums/DimensionDef.java +++ /dev/null @@ -1,228 +0,0 @@ -package bloodasp.galacticgreg.api.enums; - -import net.minecraft.world.gen.ChunkProviderEnd; - -import bloodasp.galacticgreg.api.Enums; -import bloodasp.galacticgreg.api.ModDimensionDef; - -public enum DimensionDef { - - EndAsteroids(new ModDimensionDef(DimNames.ENDASTEROIDS, ChunkProviderEnd.class, Enums.DimensionType.Asteroid)), - Moon(new ModDimensionDef( - DimNames.MOON, - "micdoodle8.mods.galacticraft.core.world.gen.ChunkProviderMoon", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Moon.DBMDefList)), - Mars(new ModDimensionDef( - DimNames.MARS, - "micdoodle8.mods.galacticraft.planets.mars.world.gen.ChunkProviderMars", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Mars.DBMDefList)), - Asteroids(new ModDimensionDef( - DimNames.ASTEROIDS, - "micdoodle8.mods.galacticraft.planets.asteroids.world.gen.ChunkProviderAsteroids", - Enums.DimensionType.Asteroid)), - Pluto(new ModDimensionDef( - DimNames.PLUTO, - "galaxyspace.SolarSystem.planets.pluto.dimension.ChunkProviderPluto", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Pluto.DBMDefList)), - Triton(new ModDimensionDef( - DimNames.TRITON, - "galaxyspace.SolarSystem.moons.triton.dimension.ChunkProviderTriton", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Triton.DBMDefList)), - Proteus(new ModDimensionDef( - DimNames.PROTEUS, - "galaxyspace.SolarSystem.moons.proteus.dimension.ChunkProviderProteus", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Proteus.DBMDefList)), - Oberon(new ModDimensionDef( - DimNames.OBERON, - "galaxyspace.SolarSystem.moons.oberon.dimension.ChunkProviderOberon", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Oberon.DBMDefList)), - Titan(new ModDimensionDef( - DimNames.TITAN, - "galaxyspace.SolarSystem.moons.titan.dimension.ChunkProviderTitan", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Titan.DBMDefList)), - Callisto(new ModDimensionDef( - DimNames.CALLISTO, - "galaxyspace.SolarSystem.moons.callisto.dimension.ChunkProviderCallisto", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Callisto.DBMDefList)), - Ganymede(new ModDimensionDef( - DimNames.GANYMEDE, - "galaxyspace.SolarSystem.moons.ganymede.dimension.ChunkProviderGanymede", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Ganymede.DBMDefList)), - Ceres(new ModDimensionDef( - DimNames.CERES, - "galaxyspace.SolarSystem.planets.ceres.dimension.ChunkProviderCeres", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Ceres.DBMDefList)), - Deimos(new ModDimensionDef( - DimNames.DEIMOS, - "galaxyspace.SolarSystem.moons.deimos.dimension.ChunkProviderDeimos", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Deimos.DBMDefList)), - Enceladus(new ModDimensionDef( - DimNames.ENCELADUS, - "galaxyspace.SolarSystem.moons.enceladus.dimension.ChunkProviderEnceladus", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Enceladus.DBMDefList)), - Io(new ModDimensionDef( - DimNames.IO, - "galaxyspace.SolarSystem.moons.io.dimension.ChunkProviderIo", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Io.DBMDefList)), - Europa(new ModDimensionDef( - DimNames.EUROPA, - "galaxyspace.SolarSystem.moons.europa.dimension.ChunkProviderEuropa", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Europa.DBMDefList)), - Phobos(new ModDimensionDef( - DimNames.PHOBOS, - "galaxyspace.SolarSystem.moons.phobos.dimension.ChunkProviderPhobos", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Phobos.DBMDefList)), - Venus(new ModDimensionDef( - DimNames.VENUS, - "galaxyspace.SolarSystem.planets.venus.dimension.ChunkProviderVenus", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Venus.DBMDefList)), - Mercury(new ModDimensionDef( - DimNames.MERCURY, - "galaxyspace.SolarSystem.planets.mercury.dimension.ChunkProviderMercury", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Mercury.DBMDefList)), - MakeMake(new ModDimensionDef( - DimNames.MAKEMAKE, - "galaxyspace.SolarSystem.planets.makemake.dimension.ChunkProviderMakemake", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.MakeMake.DBMDefList)), - Haumea(new ModDimensionDef( - DimNames.HAUMEA, - "galaxyspace.SolarSystem.planets.haumea.dimension.ChunkProviderHaumea", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Haumea.DBMDefList)), - CentauriAlpha(new ModDimensionDef( - DimNames.CENTAURIA, - "galaxyspace.ACentauriSystem.planets.aCentauriBb.dimension.ChunkProviderACentauri", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.CentauriAlpha.DBMDefList)), - VegaB(new ModDimensionDef( - DimNames.VEGAB, - "galaxyspace.VegaSystem.planets.vegaB.dimension.ChunkProviderVegaB", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.VegaB.DBMDefList)), - BarnardC(new ModDimensionDef( - DimNames.BARNARDC, - "galaxyspace.BarnardsSystem.planets.barnardaC.dimension.ChunkProviderBarnardaC", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.BarnardaC.DBMDefList)), - BarnardE(new ModDimensionDef( - DimNames.BARNARDE, - "galaxyspace.BarnardsSystem.planets.barnardaE.dimension.ChunkProviderBarnardaE", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.BarnardaE.DBMDefList)), - BarnardF(new ModDimensionDef( - DimNames.BARNARDF, - "galaxyspace.BarnardsSystem.planets.barnardaF.dimension.ChunkProviderBarnardaF", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.BarnardaF.DBMDefList)), - TcetiE(new ModDimensionDef( - DimNames.TCETIE, - "galaxyspace.TCetiSystem.planets.tcetiE.dimension.ChunkProviderTCetiE", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.TcetiE.DBMDefList)), - Miranda(new ModDimensionDef( - DimNames.MIRANDA, - "galaxyspace.SolarSystem.moons.miranda.dimension.ChunkProviderMiranda", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Miranda.DBMDefList)), - KuiperBelt(new ModDimensionDef( - DimNames.KUIPERBELT, - "galaxyspace.SolarSystem.planets.kuiperbelt.dimension.ChunkProviderKuiper", - Enums.DimensionType.Asteroid)), - - Neper(new ModDimensionDef( - DimNames.NEPER, - "de.katzenpapst.amunra.world.neper.NeperChunkProvider", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Neper.DBMDefList)), - Maahes(new ModDimensionDef( - DimNames.MAAHES, - "de.katzenpapst.amunra.world.maahes.MaahesChunkProvider", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Maahes.DBMDefList)), - Anubis(new ModDimensionDef( - DimNames.ANUBIS, - "de.katzenpapst.amunra.world.anubis.AnubisChunkProvider", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Anubis.DBMDefList)), - Horus(new ModDimensionDef( - DimNames.HORUS, - "de.katzenpapst.amunra.world.horus.HorusChunkProvider", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Horus.DBMDefList)), - Seth(new ModDimensionDef( - DimNames.SETH, - "de.katzenpapst.amunra.world.seth.SethChunkProvider", - Enums.DimensionType.Planet, - DimensionBlockMetaDefinitionList.Seth.DBMDefList)), - MehenBelt(new ModDimensionDef( - DimNames.MEHENBELT, - "de.katzenpapst.amunra.world.mehen.MehenChunkProvider", - Enums.DimensionType.Asteroid)); - - public static class DimNames { - - public static final String ENDASTEROIDS = "EndAsteroids"; - public static final String MOON = "Moon"; - public static final String MARS = "Mars"; - public static final String ASTEROIDS = "Asteroids"; - public static final String PLUTO = "Pluto"; - public static final String TRITON = "Triton"; - public static final String PROTEUS = "Proteus"; - public static final String OBERON = "Oberon"; - public static final String TITAN = "Titan"; - public static final String ROSS128B = "Ross128b"; - public static final String ROSS128BA = "Ross128ba"; - public static final String CALLISTO = "Callisto"; - public static final String GANYMEDE = "Ganymede"; - public static final String CERES = "Ceres"; - public static final String DEIMOS = "Deimos"; - public static final String ENCELADUS = "Enceladus"; - public static final String IO = "Io"; - public static final String EUROPA = "Europa"; - public static final String PHOBOS = "Phobos"; - public static final String VENUS = "Venus"; - public static final String MERCURY = "Mercury"; - public static final String MAKEMAKE = "MakeMake"; - public static final String HAUMEA = "Haumea"; - public static final String CENTAURIA = "CentauriA"; - public static final String VEGAB = "VegaB"; - public static final String BARNARDC = "BarnardC"; - public static final String BARNARDE = "BarnardE"; - public static final String BARNARDF = "BarnardF"; - public static final String TCETIE = "TcetiE"; - public static final String MIRANDA = "Miranda"; - public static final String KUIPERBELT = "Kuiperbelt"; - public static final String NEPER = "Neper"; - public static final String MAAHES = "Maahes"; - public static final String ANUBIS = "Anubis"; - public static final String HORUS = "Horus"; - public static final String SETH = "Seth"; - public static final String MEHENBELT = "MehenBelt"; - public static final String DEEPDARK = "Underdark"; - - } - - public final ModDimensionDef modDimensionDef; - - private DimensionDef(ModDimensionDef modDimDef) { - this.modDimensionDef = modDimDef; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/api/enums/ModContainers.java b/src/main/java/bloodasp/galacticgreg/api/enums/ModContainers.java deleted file mode 100644 index ed81f56f04..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/enums/ModContainers.java +++ /dev/null @@ -1,19 +0,0 @@ -package bloodasp.galacticgreg.api.enums; - -import bloodasp.galacticgreg.api.ModContainer; -import gregtech.api.enums.Mods; - -public enum ModContainers { - - GalactiCraftCore(new ModContainer(Mods.GalacticraftCore.ID)), - GalacticraftMars(new ModContainer(Mods.GalacticraftMars.ID)), - GalaxySpace(new ModContainer(Mods.GalaxySpace.ID)), - AmunRa(new ModContainer("GalacticraftAmunRa")), - Vanilla(new ModContainer("Vanilla")); - - public final ModContainer modContainer; - - private ModContainers(ModContainer modContainer) { - this.modContainer = modContainer; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/api/enums/properties/AsteroidPropertyBuilder.java b/src/main/java/bloodasp/galacticgreg/api/enums/properties/AsteroidPropertyBuilder.java deleted file mode 100644 index 82d8b99b41..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/enums/properties/AsteroidPropertyBuilder.java +++ /dev/null @@ -1,105 +0,0 @@ -package bloodasp.galacticgreg.api.enums.properties; - -public class AsteroidPropertyBuilder { - - public int probability; - public int sizeMin, sizeMax; - public int specialBlockChance; - public OreSpawnPropertyBuilder oreSpawn; - public LootPropertyBuilder loot; - - public static class OreSpawnPropertyBuilder { - - public int baseOreChance; - public boolean obeyHeighLimits; - public boolean oresOnlyInsideAsteroids; - public int primaryToRareOreOffset; - public int smallOreChance; - - public OreSpawnPropertyBuilder baseOreChance(int baseOreChance) { - this.baseOreChance = baseOreChance; - return this; - } - - public OreSpawnPropertyBuilder doesObeyingHeightLimits(boolean obeyHeighLimits) { - this.obeyHeighLimits = obeyHeighLimits; - return this; - } - - public OreSpawnPropertyBuilder AreOresOnlyInsideAsteroids(boolean oresOnlyInsideAsteroids) { - this.oresOnlyInsideAsteroids = oresOnlyInsideAsteroids; - return this; - } - - public OreSpawnPropertyBuilder primaryToRareOreOffset(int primaryToRareOreOffset) { - this.primaryToRareOreOffset = primaryToRareOreOffset; - return this; - } - - public OreSpawnPropertyBuilder smallOreChance(int smallOreChance) { - this.smallOreChance = smallOreChance; - return this; - } - - } - - public static class LootPropertyBuilder { - - public int lootChestChance; - public int lootChestItemCount; - public int lootChestTable; - public boolean randomizeLootItemCount; - - public LootPropertyBuilder lootChestChance(int lootChestChance) { - this.lootChestChance = lootChestChance; - return this; - } - - public LootPropertyBuilder lootChestItemCount(int lootChestItemCount) { - this.lootChestItemCount = lootChestItemCount; - return this; - } - - public LootPropertyBuilder lootChestTable(int lootChestTable) { - this.lootChestTable = lootChestTable; - return this; - } - - public LootPropertyBuilder isLootItemCountRandomized(boolean randomizeLootItemCount) { - this.randomizeLootItemCount = randomizeLootItemCount; - return this; - } - - } - - public AsteroidPropertyBuilder() { - oreSpawn = new OreSpawnPropertyBuilder(); - loot = new LootPropertyBuilder(); - } - - public AsteroidPropertyBuilder probability(int probability) { - this.probability = probability; - return this; - } - - public AsteroidPropertyBuilder sizeRange(int sizeMin, int sizeMax) { - this.sizeMin = sizeMin; - this.sizeMax = sizeMax; - return this; - } - - public AsteroidPropertyBuilder specialBlockChance(int specialBlockChance) { - this.specialBlockChance = specialBlockChance; - return this; - } - - public AsteroidPropertyBuilder oreSpawn(OreSpawnPropertyBuilder oreSpawnPropertyBuilder) { - this.oreSpawn = oreSpawnPropertyBuilder; - return this; - } - - public AsteroidPropertyBuilder loot(LootPropertyBuilder lootPropertyBuilder) { - this.loot = lootPropertyBuilder; - return this; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/api/enums/properties/Asteroids.java b/src/main/java/bloodasp/galacticgreg/api/enums/properties/Asteroids.java deleted file mode 100644 index 6a305407cd..0000000000 --- a/src/main/java/bloodasp/galacticgreg/api/enums/properties/Asteroids.java +++ /dev/null @@ -1,78 +0,0 @@ -package bloodasp.galacticgreg.api.enums.properties; - -import bloodasp.galacticgreg.api.enums.DimensionDef; -import bloodasp.galacticgreg.api.enums.ModContainers; - -public enum Asteroids { - - // spotless : off - EndAsteroids(ModContainers.Vanilla, DimensionDef.EndAsteroids, new AsteroidPropertyBuilder().probability(200) - .sizeRange(5, 15) - .specialBlockChance(5) - .oreSpawn( - new AsteroidPropertyBuilder.OreSpawnPropertyBuilder().baseOreChance(5) - .doesObeyingHeightLimits(false) - .AreOresOnlyInsideAsteroids(false) - .primaryToRareOreOffset(5) - .smallOreChance(10)) - .loot( - new AsteroidPropertyBuilder.LootPropertyBuilder().lootChestChance(1) - .lootChestItemCount(10) - .lootChestTable(3) - .isLootItemCountRandomized(true))), - KuiperBelt(ModContainers.GalaxySpace, DimensionDef.KuiperBelt, new AsteroidPropertyBuilder().probability(200) - .sizeRange(5, 15) - .specialBlockChance(5) - .oreSpawn( - new AsteroidPropertyBuilder.OreSpawnPropertyBuilder().baseOreChance(5) - .doesObeyingHeightLimits(false) - .AreOresOnlyInsideAsteroids(false) - .primaryToRareOreOffset(5) - .smallOreChance(10)) - .loot( - new AsteroidPropertyBuilder.LootPropertyBuilder().lootChestChance(1) - .lootChestItemCount(10) - .lootChestTable(3) - .isLootItemCountRandomized(true))), - MehenBelt(ModContainers.AmunRa, DimensionDef.MehenBelt, new AsteroidPropertyBuilder().probability(200) - .sizeRange(5, 15) - .specialBlockChance(5) - .oreSpawn( - new AsteroidPropertyBuilder.OreSpawnPropertyBuilder().baseOreChance(5) - .doesObeyingHeightLimits(false) - .AreOresOnlyInsideAsteroids(false) - .primaryToRareOreOffset(5) - .smallOreChance(10)) - .loot( - new AsteroidPropertyBuilder.LootPropertyBuilder().lootChestChance(1) - .lootChestItemCount(10) - .lootChestTable(3) - .isLootItemCountRandomized(true))), - Asteroids(ModContainers.GalacticraftMars, DimensionDef.Asteroids, new AsteroidPropertyBuilder().probability(200) - .sizeRange(5, 15) - .specialBlockChance(5) - .oreSpawn( - new AsteroidPropertyBuilder.OreSpawnPropertyBuilder().baseOreChance(5) - .doesObeyingHeightLimits(false) - .AreOresOnlyInsideAsteroids(false) - .primaryToRareOreOffset(5) - .smallOreChance(10)) - .loot( - new AsteroidPropertyBuilder.LootPropertyBuilder().lootChestChance(1) - .lootChestItemCount(10) - .lootChestTable(3) - .isLootItemCountRandomized(true))),; - - // spotless : on - - public ModContainers modContainers; - public DimensionDef dimensionDef; - public AsteroidPropertyBuilder asteroidPropertyBuilder; - - private Asteroids(ModContainers modContainers, DimensionDef dimensionDef, - AsteroidPropertyBuilder asteroidPropertyBuilder) { - this.modContainers = modContainers; - this.dimensionDef = dimensionDef; - this.asteroidPropertyBuilder = asteroidPropertyBuilder; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/auxiliary/ConfigManager.java b/src/main/java/bloodasp/galacticgreg/auxiliary/ConfigManager.java deleted file mode 100644 index 34f7a5cc8b..0000000000 --- a/src/main/java/bloodasp/galacticgreg/auxiliary/ConfigManager.java +++ /dev/null @@ -1,79 +0,0 @@ -package bloodasp.galacticgreg.auxiliary; - -import java.io.File; - -import net.minecraftforge.common.config.Configuration; - -import bloodasp.galacticgreg.GalacticGreg; - -/** - * config class to read/setup config files and folders - * - * @author Namikon - */ -public abstract class ConfigManager { - - private File _mainconfigDir = null; - private File _blocksconfigDir = null; - private String _mModCollection = ""; - private String _mModID = ""; - - protected Configuration _mainConfig = null; - - protected File _mConfigBaseDirectory; - public boolean DoDebugMessages = false; - - protected abstract void PreInit(); - - protected abstract void Init(); - - protected abstract void PostInit(); - - public ConfigManager(File pConfigBaseDirectory, String pModCollectionDirectory, String pModID) { - _mModCollection = pModCollectionDirectory; - _mModID = pModID; - _mConfigBaseDirectory = pConfigBaseDirectory; - } - - /** - * Load/init the config file - * - * @return true/false if the load/init was successful or not - */ - public boolean LoadConfig() { - try { - InitConfigDirs(); - if (_mainConfig == null) return false; - - PreInit(); - _mainConfig.load(); - Init(); - _mainConfig.save(); - PostInit(); - - return true; - } catch (Exception e) { - GalacticGreg.Logger.error("Unable to init config file"); - e.printStackTrace(); - return false; - } - } - - /** - * Search for required config-directory / file and create them if they can't be found - */ - private void InitConfigDirs() { - GalacticGreg.Logger.debug("Checking/creating config folders"); - - _mainconfigDir = new File(String.format("%s%s%s", _mConfigBaseDirectory, File.separator, _mModCollection)); - - if (!_mainconfigDir.exists()) { - GalacticGreg.Logger.info("Config folder not found. Creating..."); - _mainconfigDir.mkdir(); - } - - File tRealConfigFile = new File(String.format("%s%s%s%s", _mainconfigDir, File.separator, _mModID, ".cfg")); - - _mainConfig = new Configuration(tRealConfigFile); - } -} diff --git a/src/main/java/bloodasp/galacticgreg/auxiliary/GTOreGroup.java b/src/main/java/bloodasp/galacticgreg/auxiliary/GTOreGroup.java deleted file mode 100644 index 8361a2bda9..0000000000 --- a/src/main/java/bloodasp/galacticgreg/auxiliary/GTOreGroup.java +++ /dev/null @@ -1,19 +0,0 @@ -package bloodasp.galacticgreg.auxiliary; - -/** - * Just a simple container to wrap 4 GT Ore-Meta ids into one var - */ -public class GTOreGroup { - - public short PrimaryMeta; - public short SecondaryMeta; - public short SporadicBetweenMeta; - public short SporadicAroundMeta; - - public GTOreGroup(short pPrimaryMeta, short pSecondaryMeta, short pSporadicBetweenMeta, short pSporadicAroundMeta) { - PrimaryMeta = pPrimaryMeta; - SecondaryMeta = pSecondaryMeta; - SporadicBetweenMeta = pSporadicBetweenMeta; - SporadicAroundMeta = pSporadicAroundMeta; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/auxiliary/GalacticGregConfig.java b/src/main/java/bloodasp/galacticgreg/auxiliary/GalacticGregConfig.java deleted file mode 100644 index 156e620959..0000000000 --- a/src/main/java/bloodasp/galacticgreg/auxiliary/GalacticGregConfig.java +++ /dev/null @@ -1,141 +0,0 @@ -package bloodasp.galacticgreg.auxiliary; - -import java.io.File; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; - -import bloodasp.galacticgreg.GalacticGreg; -import bloodasp.galacticgreg.api.BlockMetaComb; -import cpw.mods.fml.common.registry.GameRegistry; - -public class GalacticGregConfig extends ConfigManager { - - public GalacticGregConfig(File pConfigBaseDirectory, String pModCollectionDirectory, String pModID) { - super(pConfigBaseDirectory, pModCollectionDirectory, pModID); - - } - - public boolean ProfileOreGen; - public boolean ReportOreGenFailures; - public boolean PrintDebugMessagesToFMLLog; - public boolean PrintTraceMessagesToFMLLog; - - public boolean LootChestsEnabled; - public boolean EnableAEExportCommand; - public boolean SchematicsEnabled; - public String LootChestItemOverride; - public boolean QuietMode; - - public BlockMetaComb CustomLootChest; - - @Override - protected void PreInit() { - ProfileOreGen = false; - ReportOreGenFailures = false; - PrintDebugMessagesToFMLLog = false; - PrintTraceMessagesToFMLLog = false; - - LootChestsEnabled = true; - - // Default false, as it is WiP - EnableAEExportCommand = false; - SchematicsEnabled = false; - - LootChestItemOverride = ""; - QuietMode = false; - } - - @Override - protected void Init() { - ProfileOreGen = _mainConfig.getBoolean( - "ProfileOreGen", - "Debug", - ProfileOreGen, - "Enable to profile oregen and register the ingame command ggregprofiler"); - ReportOreGenFailures = _mainConfig.getBoolean( - "ReportOreGenFailures", - "Debug", - ReportOreGenFailures, - "Report if a ore tileentity could not be placed"); - PrintDebugMessagesToFMLLog = _mainConfig.getBoolean( - "PrintDebugMessagesToFMLLog", - "Debug", - PrintDebugMessagesToFMLLog, - "Enable debug output, not recommended for servers"); - PrintTraceMessagesToFMLLog = _mainConfig.getBoolean( - "PrintTraceMessagesToFMLLog", - "Debug", - PrintTraceMessagesToFMLLog, - "Enable trace output. Warning: This will produce gazillions of log entries"); - QuietMode = _mainConfig.getBoolean( - "QuietMode", - "Debug", - QuietMode, - "In quiet-mode only errors, warnings and fatals will be printed to the logfile/console"); - - LootChestsEnabled = _mainConfig.getBoolean( - "LootChestsEnabled", - "Extras", - LootChestsEnabled, - "Enables/disables the dungeon-chest generator system for asteroids. New config values will be generated if set to true"); - EnableAEExportCommand = _mainConfig.getBoolean( - "EnableAEExportCommand", - "Extras", - EnableAEExportCommand, - "If set to true, you can export any structure stored on a AE2 spatial storage disk. (Can't be spawned yet, WiP). Requires SchematicsEnabled to be true"); - SchematicsEnabled = _mainConfig.getBoolean( - "SchematicsEnabled", - "Extras", - SchematicsEnabled, - "Enable the experimental Schematics-handler to spawn exported schematics in dimensions. This is WiP, use at own risk"); - LootChestItemOverride = _mainConfig.getString( - "CustomLootChest", - "Extras", - LootChestItemOverride, - "Define the chest you wish to use as LootChest. use the :: format or leave empty for the default Minecraft Chest"); - - GalacticGreg.Logger.setDebugOutput(PrintDebugMessagesToFMLLog); - GalacticGreg.Logger.setTraceOutput(PrintTraceMessagesToFMLLog); - GalacticGreg.Logger.setQuietMode(QuietMode); - } - - @Override - protected void PostInit() { - - } - - public boolean serverPostInit() { - CustomLootChest = new BlockMetaComb(Blocks.chest); - try { - if (LootChestItemOverride != "") { - String[] args = LootChestItemOverride.split(":"); - String tMod; - String tName; - int tMeta; - - if (args.length >= 2) { - tMod = args[0]; - tName = args[1]; - if (args.length == 3) tMeta = Integer.parseInt(args[2]); - else tMeta = 0; - - Block tBlock = GameRegistry.findBlock(tMod, tName); - if (tBlock != null) { - GalacticGreg.Logger - .debug("Found valid ChestOverride: %s. LootChest replaced", LootChestItemOverride); - CustomLootChest = new BlockMetaComb(tBlock, tMeta); - } - } - } - - return true; - } catch (Exception e) { - GalacticGreg.Logger.error( - "Unable to find custom chest override %s. Make sure item exists. Defaulting to Minecraft:chest", - LootChestItemOverride); - e.printStackTrace(); - return false; - } - } -} diff --git a/src/main/java/bloodasp/galacticgreg/auxiliary/LogHelper.java b/src/main/java/bloodasp/galacticgreg/auxiliary/LogHelper.java deleted file mode 100644 index c8b450c27a..0000000000 --- a/src/main/java/bloodasp/galacticgreg/auxiliary/LogHelper.java +++ /dev/null @@ -1,267 +0,0 @@ -package bloodasp.galacticgreg.auxiliary; - -import java.util.ArrayList; - -import org.apache.logging.log4j.Level; - -import cpw.mods.fml.common.FMLLog; - -/** - * Generic LogHelper to print stuff to the console - * - * @author Namikon - */ -public final class LogHelper { - - private ArrayList _mReportedCategories = new ArrayList<>(); - private boolean doDebugLogs = false; - private boolean doTraceLogs = false; - private boolean quietMode = false; - private String _mModID = ""; - - private final static String STR_NOCAT = "ihaznocathegory"; - private final static String STR_TOKEN_ONETIMEMESSAGE = " OTM"; - - public LogHelper(String pModID) { - _mModID = pModID; - } - - /** - * If true, only error/fatal/warn messages will be printed - * - * @param pEnabled - */ - public void setQuietMode(boolean pEnabled) { - quietMode = pEnabled; - } - - /** - * Enable/Disable debug logs - * - * @param pEnabled - */ - public void setDebugOutput(boolean pEnabled) { - doDebugLogs = pEnabled; - } - - /** - * Enable/Disable trace logs - * - * @param pEnabled - */ - public void setTraceOutput(boolean pEnabled) { - doTraceLogs = pEnabled; - } - - /** - * Resets all One-Time categories, so they will be displayed again - */ - public void ResetCategories() { - _mReportedCategories = new ArrayList<>(); - } - - /** - * Print a log-message with built-in String.format(x) support. This message will only appear once. usefull for - * error/warnings within loops - * - * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will - * never be displayed - * @param pLogLevel The logLevel for this message - * @param pMessage The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void log(String pCategory, Level pLogLevel, String pMessage, Object... args) { - if (pLogLevel == Level.DEBUG && !doDebugLogs) return; - - if (pLogLevel == Level.TRACE && !doTraceLogs) return; - - if (pLogLevel != Level.ERROR && pLogLevel != Level.FATAL && pLogLevel != Level.WARN) if (quietMode) return; - - String tt = ""; - if (!pCategory.equals(STR_NOCAT)) { - tt = STR_TOKEN_ONETIMEMESSAGE; - if (_mReportedCategories.contains(pCategory)) return; - else { - _mReportedCategories.add(pCategory); - } - } - - FMLLog.log(_mModID.toUpperCase() + tt, pLogLevel, pMessage, args); - } - - /** - * Prints a one-time message with Category ALL - * - * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will - * never be displayed - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void ot_all(String pCategory, String object, Object... args) { - log(pCategory, Level.ALL, object, args); - } - - /** - * Prints a one-time message with Category DEBUG - * - * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will - * never be displayed - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void ot_debug(String pCategory, String object, Object... args) { - log(pCategory, Level.DEBUG, object, args); - } - - /** - * Prints a one-time message with Category ERROR - * - * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will - * never be displayed - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void ot_error(String pCategory, String object, Object... args) { - log(pCategory, Level.ERROR, object, args); - } - - /** - * Prints a one-time message with Category FATAL - * - * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will - * never be displayed - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void ot_fatal(String pCategory, String object, Object... args) { - log(pCategory, Level.FATAL, object, args); - } - - /** - * Prints a one-time message with Category INFO - * - * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will - * never be displayed - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void ot_info(String pCategory, String object, Object... args) { - log(pCategory, Level.INFO, object, args); - } - - /** - * Prints a one-time message with Category OFF - * - * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will - * never be displayed - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void ot_off(String pCategory, String object, Object... args) { - log(pCategory, Level.OFF, object, args); - } - - /** - * Prints a one-time message with Category TRACE - * - * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will - * never be displayed - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void ot_trace(String pCategory, String object, Object... args) { - log(pCategory, Level.TRACE, object, args); - } - - /** - * Prints a one-time message with Category WARN - * - * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will - * never be displayed - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void ot_warn(String pCategory, String object, Object... args) { - log(pCategory, Level.WARN, object, args); - } - - /** - * Prints a message with Category ALL - * - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void all(String object, Object... args) { - log(STR_NOCAT, Level.ALL, object, args); - } - - /** - * Prints a message with Category DEBUG - * - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void debug(String object, Object... args) { - log(STR_NOCAT, Level.DEBUG, object, args); - } - - /** - * Prints a message with Category ERROR - * - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void error(String object, Object... args) { - log(STR_NOCAT, Level.ERROR, object, args); - } - - /** - * Prints a message with Category FATAL - * - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void fatal(String object, Object... args) { - log(STR_NOCAT, Level.FATAL, object, args); - } - - /** - * Prints a message with Category INFO - * - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void info(String object, Object... args) { - log(STR_NOCAT, Level.INFO, object, args); - } - - /** - * Prints a message with Category OFF - * - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void off(String object, Object... args) { - log(STR_NOCAT, Level.OFF, object, args); - } - - /** - * Prints a message with Category TRACE - * - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void trace(String object, Object... args) { - log(STR_NOCAT, Level.TRACE, object, args); - } - - /** - * Prints a message with Category WARN - * - * @param object The log message - * @param args Optional args, if you've used format-specifier in pMessage - */ - public void warn(String object, Object... args) { - log(STR_NOCAT, Level.WARN, object, args); - } -} diff --git a/src/main/java/bloodasp/galacticgreg/auxiliary/PlayerChatHelper.java b/src/main/java/bloodasp/galacticgreg/auxiliary/PlayerChatHelper.java deleted file mode 100644 index 409775ea1a..0000000000 --- a/src/main/java/bloodasp/galacticgreg/auxiliary/PlayerChatHelper.java +++ /dev/null @@ -1,106 +0,0 @@ -package bloodasp.galacticgreg.auxiliary; - -import net.minecraft.command.ICommandSender; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; - -/** - * Method to easily send chat-messages to EntityPlayer - * - * @author Namikon - * - */ -public class PlayerChatHelper { - - /** - * Meant for notifications that are being send to an admin/op Color will be GREEN - * - * @param pPlayer - * @param pMessage - */ - public static void SendInfo(ICommandSender pCommandSender, String pMessage) { - pCommandSender.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + pMessage)); - } - - /** - * Meant for notifications that are being send to an admin/op Color will be RED - * - * @param pPlayer - * @param pMessage - */ - public static void SendError(ICommandSender pCommandSender, String pMessage) { - pCommandSender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + pMessage)); - } - - /** - * Meant for notifications that are being send to an admin/op Color will be YELLOW - * - * @param pPlayer - * @param pMessage - */ - public static void SendWarn(ICommandSender pCommandSender, String pMessage) { - pCommandSender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + pMessage)); - } - - /** - * Meant for notifications that are being send to an admin/op Color will be GREEN - * - * @param pPlayer - * @param pMessage - */ - public static void SendInfo(EntityPlayer pPlayer, String pMessage) { - pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + pMessage)); - } - - /** - * Meant for notifications that are being send to an admin/op Color will be RED - * - * @param pPlayer - * @param pMessage - */ - public static void SendError(EntityPlayer pPlayer, String pMessage) { - pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + pMessage)); - } - - /** - * Meant for notifications that are being send to an admin/op Color will be YELLOW - * - * @param pPlayer - * @param pMessage - */ - public static void SendWarn(EntityPlayer pPlayer, String pMessage) { - pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + pMessage)); - } - - /** - * Meant for ingame notifications that are being send to a player, not an admin/op Color will be DARK_GREEN - * - * @param pPlayer - * @param pMessage - */ - public static void SendNotifyPositive(EntityPlayer pPlayer, String pMessage) { - pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.DARK_GREEN + pMessage)); - } - - /** - * Meant for ingame notifications that are being send to a player, not an admin/op Color will be AQUA - * - * @param pPlayer - * @param pMessage - */ - public static void SendNotifyNormal(EntityPlayer pPlayer, String pMessage) { - pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.AQUA + pMessage)); - } - - /** - * Meant for ingame notifications that are being send to a player, not an admin/op Color will be DARK_PURPLE - * - * @param pPlayer - * @param pMessage - */ - public static void SendNotifyWarning(EntityPlayer pPlayer, String pMessage) { - pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.DARK_PURPLE + pMessage)); - } - -} diff --git a/src/main/java/bloodasp/galacticgreg/auxiliary/ProfilingStorage.java b/src/main/java/bloodasp/galacticgreg/auxiliary/ProfilingStorage.java deleted file mode 100644 index 3510c31341..0000000000 --- a/src/main/java/bloodasp/galacticgreg/auxiliary/ProfilingStorage.java +++ /dev/null @@ -1,74 +0,0 @@ -package bloodasp.galacticgreg.auxiliary; - -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; - -import bloodasp.galacticgreg.api.ModDimensionDef; - -/** - * A simple FIFO-storage for Long-values Will keep 50 values for each dimension in memory Doesn't need to be changed - * when adding new planets/mods - */ -public class ProfilingStorage { - - private Map> mProfilingMap; - - public ProfilingStorage() { - mProfilingMap = new HashMap<>(); - } - - /** - * Add a new time to the list of pDimension. Will be ignored it tTotalTime == 0 - * - * @param pDimension - * @param pTotalTime - */ - public void AddTimeToList(ModDimensionDef pDimension, long pTotalTime) { - try { - if (pTotalTime == 0) return; - - if (!mProfilingMap.containsKey(pDimension.getDimIdentifier())) - mProfilingMap.put(pDimension.getDimIdentifier(), new LinkedList<>()); - - LinkedList ll = (LinkedList) mProfilingMap.get(pDimension.getDimIdentifier()); - - ll.addLast(pTotalTime); - - while (ll.size() > 50) ll.removeFirst(); - } catch (Exception e) { - // Just do nothing. profiling is for debug purposes only anyways... - } - } - - /** - * Return the average time required to execute the oregen in Dimension pDimension - * - * @param pDimension The DimensionType in question - * @return - */ - public long GetAverageTime(ModDimensionDef pDimension) { - try { - if (!mProfilingMap.containsKey(pDimension.getDimIdentifier())) return -1; - - int tTotalVal = 0; - long tAverage = 0; - long tReturnVal = 0; - - LinkedList ll = (LinkedList) mProfilingMap.get(pDimension.getDimIdentifier()); - - if (ll != null) { - for (Long aLong : ll) { - tAverage += aLong; - tTotalVal++; - } - - tReturnVal = (long) ((float) (tAverage / tTotalVal)); - } - return tReturnVal; - } catch (Exception e) { - return -1; - } - } -} diff --git a/src/main/java/bloodasp/galacticgreg/command/AEStorageCommand.java b/src/main/java/bloodasp/galacticgreg/command/AEStorageCommand.java deleted file mode 100644 index 6192603bcd..0000000000 --- a/src/main/java/bloodasp/galacticgreg/command/AEStorageCommand.java +++ /dev/null @@ -1,180 +0,0 @@ -package bloodasp.galacticgreg.command; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.server.MinecraftServer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import appeng.api.util.WorldCoord; -import appeng.items.storage.ItemSpatialStorageCell; -import bloodasp.galacticgreg.GalacticGreg; -import bloodasp.galacticgreg.auxiliary.PlayerChatHelper; -import bloodasp.galacticgreg.schematics.SpaceSchematic; -import bloodasp.galacticgreg.schematics.SpaceSchematicFactory; - -/** - * This command allows to export any structure that has been stored inside a spatial storage cell to a xml file that can - * later be enabled for spawning in dimensions. - */ -public class AEStorageCommand implements ICommand { - - private List aliases; - - public AEStorageCommand() { - this.aliases = new ArrayList<>(); - this.aliases.add("exportae"); - } - - @Override - public String getCommandName() { - return "exportae"; - } - - @Override - public String getCommandUsage(ICommandSender pCommandSender) { - return "exportae "; - } - - @Override - public List getCommandAliases() { - return this.aliases; - } - - @Override - public void processCommand(ICommandSender pCommandSender, String[] pArgs) { - try { - if (pCommandSender instanceof EntityPlayer) { - if (pArgs.length < 1) return; - - String tName = pArgs[0]; - - EntityPlayer tEP = (EntityPlayer) pCommandSender; - // Check if item in hand is a spatial storage cell - ItemStack tIS = tEP.inventory.getCurrentItem(); - if (tIS.getItem() instanceof ItemSpatialStorageCell) { - ItemSpatialStorageCell tCell = (ItemSpatialStorageCell) tIS.getItem(); - World tSpatialWorld = tCell.getWorld(tIS); - WorldCoord storedSize = tCell.getStoredSize(tIS); - - // Check if SSC is filled - if (storedSize.x == 0 || storedSize.y == 0 || storedSize.z == 0) { - PlayerChatHelper.SendError(pCommandSender, "Error: This spatial storage is empty"); - return; - } - - // Export structure - GalacticGreg.Logger.info( - "Creating Structure from Spatial AE drive. Dimensions: X [%d] Y [%d] Z [%d]", - storedSize.x, - storedSize.y, - storedSize.z); - SpaceSchematic tSchematic = SpaceSchematicFactory.createSchematic(tName); - boolean tTEWarningSend = false; - - // Loop all 3 dimensions - for (int lX = 1; lX <= storedSize.x; lX++) { - for (int lY = 65; lY < 65 + storedSize.y; lY++) { - for (int lZ = 1; lZ <= storedSize.z; lZ++) { - - // Get the block - Block b = tSpatialWorld.getBlock(lX, lY, lZ); - // Get the meta - int bm = tSpatialWorld.getBlockMetadata(lX, lY, lZ); - - // Search for the blocks name - String tBlockName = Block.blockRegistry.getNameForObject(b); - - // Check if block is a tileentity - TileEntity bTE = tSpatialWorld.getTileEntity(lX, lY, lZ); - - String tMsg = String.format("[X-%d][Y-%d][Z-%d] ", lX, lY, lZ); - String nbtComp = ""; - // If block could be found... - if (b != null) { - tMsg += tBlockName; - // If block is a TileEntity - if (bTE != null) { - // Print a warning on the console - tMsg += " TE"; - GalacticGreg.Logger.warn( - "Warning: Found TileEntity at X[%d] Y[%d] Z[%d]. NBT States are not exported!", - lX, - lY, - lZ); - if (!tTEWarningSend) { - // Send a warning ingame, once per export command - tTEWarningSend = true; - PlayerChatHelper - .SendWarn(pCommandSender, "TileEntity states are not exported!"); - } - - } - - // If the block is not air, add it to the structure - if (b != Blocks.air) tSchematic - .addStructureInfo(SpaceSchematicFactory.createStructureInfo(lX, lY, lZ, b, bm)); - } - } - } - } - - // Save structure to disk - if (!GalacticGreg.SchematicHandler.SaveSpaceStructure(tSchematic)) { - // Something went wrong... - PlayerChatHelper.SendError(pCommandSender, "Something went wrong. Structure not saved"); - } else { - // All good, xml exported. Notify player that he needs to edit the file - PlayerChatHelper.SendInfo( - pCommandSender, - "Structure has been exported to " + tSchematic.getName() - + ".xml. It contains " - + tSchematic.coordInfo() - .size() - + " Blocks"); - PlayerChatHelper - .SendInfo(pCommandSender, "You have to edit the file before a reload will accept it!"); - } - } else PlayerChatHelper - .SendError(pCommandSender, "Error: Item in your hand is not a spatial storage drive!"); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Override - public boolean canCommandSenderUseCommand(ICommandSender pCommandSender) { - // Command is only enabled for actual players and only if they are OP-ed - if (pCommandSender instanceof EntityPlayerMP) { - EntityPlayerMP tEP = (EntityPlayerMP) pCommandSender; - return MinecraftServer.getServer() - .getConfigurationManager() - .func_152596_g(tEP.getGameProfile()); - } else return false; - } - - @Override - public int compareTo(Object o) { - return 0; - } - - @SuppressWarnings("rawtypes") - @Override - public List addTabCompletionOptions(ICommandSender p_71516_1_, String[] p_71516_2_) { - return null; - } - - @Override - public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { - return false; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/command/ProfilingCommand.java b/src/main/java/bloodasp/galacticgreg/command/ProfilingCommand.java deleted file mode 100644 index be43da5a4c..0000000000 --- a/src/main/java/bloodasp/galacticgreg/command/ProfilingCommand.java +++ /dev/null @@ -1,99 +0,0 @@ -package bloodasp.galacticgreg.command; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.ChatComponentText; - -import bloodasp.galacticgreg.GalacticGreg; -import bloodasp.galacticgreg.api.ModContainer; -import bloodasp.galacticgreg.api.ModDimensionDef; -import bloodasp.galacticgreg.registry.GalacticGregRegistry; -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.relauncher.Side; - -/** - * Ingame command to get the average oregen time(s) for the active dimensions Doesn't need to be changed when adding new - * planets/mods - * - */ -public class ProfilingCommand implements ICommand { - - private List aliases; - - public ProfilingCommand() { - this.aliases = new ArrayList<>(); - this.aliases.add("ggregprofiler"); - } - - @Override - public String getCommandName() { - return "ggregprofiler"; - } - - @Override - public String getCommandUsage(ICommandSender pCommandSender) { - return "ggregprofiler"; - } - - @Override - public List getCommandAliases() { - return this.aliases; - } - - @Override - public void processCommand(ICommandSender pCommandSender, String[] pArgs) { - pCommandSender.addChatMessage(new ChatComponentText("Average OreGen times:")); - - for (ModContainer mc : GalacticGregRegistry.getModContainers()) { - String tModName = mc.getModName(); - for (ModDimensionDef mdd : mc.getDimensionList()) { - long tTime = GalacticGreg.Profiler.GetAverageTime(mdd); - String tInfo; - if (tTime == -1) tInfo = "N/A"; - else tInfo = String.format("%d ms", tTime); - pCommandSender.addChatMessage( - new ChatComponentText( - String.format("%s (%s): %s", mdd.getDimIdentifier(), mdd.getDimensionName(), tInfo))); - } - } - } - - @Override - public boolean canCommandSenderUseCommand(ICommandSender pCommandSender) { - if (FMLCommonHandler.instance() - .getEffectiveSide() == Side.SERVER - && !FMLCommonHandler.instance() - .getMinecraftServerInstance() - .isDedicatedServer()) - return true; - - if (pCommandSender instanceof EntityPlayerMP) { - EntityPlayerMP tEP = (EntityPlayerMP) pCommandSender; - return MinecraftServer.getServer() - .getConfigurationManager() - .func_152596_g(tEP.getGameProfile()); - } - return false; - } - - @Override - public int compareTo(Object o) { - return 0; - } - - @SuppressWarnings("rawtypes") - @Override - public List addTabCompletionOptions(ICommandSender p_71516_1_, String[] p_71516_2_) { - return null; - } - - @Override - public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { - return false; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java b/src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java deleted file mode 100644 index 0c57c961af..0000000000 --- a/src/main/java/bloodasp/galacticgreg/dynconfig/DynamicDimensionConfig.java +++ /dev/null @@ -1,160 +0,0 @@ -package bloodasp.galacticgreg.dynconfig; - -import java.util.HashMap; -import java.util.Map; - -import net.minecraftforge.common.ChestGenHooks; - -import bloodasp.galacticgreg.GalacticGreg; -import bloodasp.galacticgreg.api.Enums.DimensionType; -import bloodasp.galacticgreg.api.ModContainer; -import bloodasp.galacticgreg.api.ModDimensionDef; -import bloodasp.galacticgreg.api.enums.properties.Asteroids; -import bloodasp.galacticgreg.registry.GalacticGregRegistry; - -public class DynamicDimensionConfig { - - public static class AsteroidConfig { - - public int MinSize; - public int MaxSize; - public int Probability; - public int OreChance; - public int OrePrimaryOffset; - public int SpecialBlockChance; - public int SmallOreChance; - public boolean ObeyHeightLimits; - public boolean HiddenOres; - public int LootChestChance; - public int LootChestTable; - public int NumLootItems; - public boolean RandomizeNumLootItems; - } - - private static Map _mDynamicAsteroidMap = new HashMap<>(); - - public static AsteroidConfig getAsteroidConfig(ModDimensionDef pDimDef) { - return _mDynamicAsteroidMap.getOrDefault(pDimDef.getDimIdentifier(), null); - } - - public static boolean InitDynamicConfig() { - try { - for (ModContainer mc : GalacticGregRegistry.getModContainers()) { - if (!mc.getEnabled()) continue; - - for (ModDimensionDef mdd : mc.getDimensionList()) { - DimensionType dt = mdd.getDimensionType(); - if (dt != DimensionType.Asteroid) { - continue; - } - String tDimIdentifier = mdd.getDimIdentifier(); - if (_mDynamicAsteroidMap.containsKey(tDimIdentifier)) { - GalacticGreg.Logger.warn( - "Found 2 Dimensions with the same Identifier! This should never happen, and you should report this to me. Identifier in question: %s", - tDimIdentifier); - continue; - } - - Asteroids AsteroidProperties = null; - for (Asteroids asteroidsConfig : Asteroids.values()) { - if (!asteroidsConfig.modContainers.modContainer.getModName() - .equals(mc.getModName())) { - continue; - } - if (!asteroidsConfig.dimensionDef.modDimensionDef.getDimensionName() - .equals(mdd.getDimensionName())) { - continue; - } - AsteroidProperties = asteroidsConfig; - break; - } - if (AsteroidProperties == null) { - GalacticGreg.Logger.error( - "Something went wrong! no properties are existing for Asteroid dim: " - + mdd.getDimensionName() - + " from mod container " - + mc.getModName()); - continue; - } - - AsteroidConfig aConf = new AsteroidConfig(); - - aConf.MinSize = AsteroidProperties.asteroidPropertyBuilder.sizeMin; - aConf.MaxSize = AsteroidProperties.asteroidPropertyBuilder.sizeMax; - aConf.Probability = AsteroidProperties.asteroidPropertyBuilder.probability; - aConf.SpecialBlockChance = AsteroidProperties.asteroidPropertyBuilder.specialBlockChance; - - aConf.OreChance = AsteroidProperties.asteroidPropertyBuilder.oreSpawn.baseOreChance; - aConf.OrePrimaryOffset = AsteroidProperties.asteroidPropertyBuilder.oreSpawn.primaryToRareOreOffset; - aConf.SmallOreChance = AsteroidProperties.asteroidPropertyBuilder.oreSpawn.smallOreChance; - aConf.ObeyHeightLimits = AsteroidProperties.asteroidPropertyBuilder.oreSpawn.obeyHeighLimits; - aConf.HiddenOres = AsteroidProperties.asteroidPropertyBuilder.oreSpawn.oresOnlyInsideAsteroids; - - if (GalacticGreg.GalacticConfig.LootChestsEnabled) { - aConf.LootChestChance = AsteroidProperties.asteroidPropertyBuilder.loot.lootChestChance; - aConf.LootChestTable = AsteroidProperties.asteroidPropertyBuilder.loot.lootChestTable; - aConf.NumLootItems = AsteroidProperties.asteroidPropertyBuilder.loot.lootChestItemCount; - aConf.RandomizeNumLootItems = AsteroidProperties.asteroidPropertyBuilder.loot.randomizeLootItemCount; - } else { - aConf.LootChestChance = 0; - aConf.LootChestTable = 1; - aConf.NumLootItems = 0; - aConf.RandomizeNumLootItems = false; - } - - if (aConf.MaxSize > 50) GalacticGreg.Logger.warn( - "Asteroid-MaxSize for dimID [%s] is larger than 50. This might cause memory-problems, as the maximum asteroid size will be larger than 50*50*50 blocks", - tDimIdentifier); - _mDynamicAsteroidMap.put(tDimIdentifier, aConf); - - } - } - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * Convert numbers to actual loot-table entries - * - * @param pACfg - * @return - */ - public static String getLootChestTable(AsteroidConfig pACfg) { - String tLootTable = ChestGenHooks.MINESHAFT_CORRIDOR; - - switch (pACfg.LootChestTable) { - case 2: - tLootTable = ChestGenHooks.PYRAMID_DESERT_CHEST; - break; - case 3: - tLootTable = ChestGenHooks.PYRAMID_JUNGLE_CHEST; - break; - case 4: - tLootTable = ChestGenHooks.PYRAMID_JUNGLE_DISPENSER; - break; - case 5: - tLootTable = ChestGenHooks.STRONGHOLD_CORRIDOR; - break; - case 6: - tLootTable = ChestGenHooks.STRONGHOLD_LIBRARY; - break; - case 7: - tLootTable = ChestGenHooks.STRONGHOLD_CROSSING; - break; - case 8: - tLootTable = ChestGenHooks.VILLAGE_BLACKSMITH; - break; - case 9: - tLootTable = ChestGenHooks.BONUS_CHEST; - break; - case 10: - tLootTable = ChestGenHooks.DUNGEON_CHEST; - break; - } - - return tLootTable; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/generators/GenEllipsoid.java b/src/main/java/bloodasp/galacticgreg/generators/GenEllipsoid.java deleted file mode 100644 index 09d08a9923..0000000000 --- a/src/main/java/bloodasp/galacticgreg/generators/GenEllipsoid.java +++ /dev/null @@ -1,126 +0,0 @@ -package bloodasp.galacticgreg.generators; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import net.minecraft.util.MathHelper; -import net.minecraft.util.Vec3; - -import bloodasp.galacticgreg.api.Enums.SpaceObjectType; -import bloodasp.galacticgreg.api.Enums.TargetBlockPosition; -import bloodasp.galacticgreg.api.ISpaceObjectGenerator; -import bloodasp.galacticgreg.api.StructureInformation; - -/** - * Simple ellipsoid-generator. Based on the formular created by Chrysator. Thanks for the help! - * - * Generates a simple ellipsoid with dynamic rotation, random size-values, random noise for the surface, etc. Can - * probably be tweaked even more, but works for now... - */ -public class GenEllipsoid implements ISpaceObjectGenerator { - - private Vec3 _mEllipsoidCenter; - private Random _mRandom; - private List _mStructure; - - private double _mCoreDensity = 0.7D; - private double _mSineFactor = 0.05D; - private float _mRandomInfluence; - private float _mRandomAngleX; - private float _mRandomAngleY; - private float _mRandomAngleZ; - - private int _mSizeA; - private int _mSizeB; - private int _mSizeC; - - public GenEllipsoid() { - reset(); - } - - @Override - public SpaceObjectType getType() { - return SpaceObjectType.OreAsteroid; - } - - @Override - public void randomize(int pSizeMin, int pSizeMax) { - _mRandom = new Random(System.currentTimeMillis()); - _mRandomAngleX = (float) (_mRandom.nextFloat() * Math.PI); - _mRandomAngleY = (float) (_mRandom.nextFloat() * Math.PI); - _mRandomAngleZ = (float) (_mRandom.nextFloat() * Math.PI); - - _mRandomInfluence = _mRandom.nextFloat(); - - _mSizeA = pSizeMin + _mRandom.nextInt(pSizeMax - pSizeMin) + 10; - _mSizeB = pSizeMin + _mRandom.nextInt(pSizeMax - pSizeMin) + 10; - _mSizeC = pSizeMin + _mRandom.nextInt(pSizeMax - pSizeMin) + 10; - } - - @Override - public void setCenterPoint(int pX, int pY, int pZ) { - _mEllipsoidCenter = Vec3.createVectorHelper(pX, pY, pZ); - } - - @Override - public void setCenterPoint(Vec3 pCenter) { - _mEllipsoidCenter = pCenter; - } - - @Override - public Vec3 getCenterPoint() { - return _mEllipsoidCenter; - } - - @Override - public List getStructure() { - return _mStructure; - } - - @Override - public void calculate() { - int Xmin = (int) (_mEllipsoidCenter.xCoord - _mSizeA); - int Xmax = (int) (_mEllipsoidCenter.xCoord + _mSizeA); - int Ymin = (int) (_mEllipsoidCenter.yCoord - _mSizeB); - int Ymax = (int) (_mEllipsoidCenter.yCoord + _mSizeB); - int Zmin = (int) (_mEllipsoidCenter.zCoord - _mSizeC); - int Zmax = (int) (_mEllipsoidCenter.zCoord + _mSizeC); - - for (int iX = Xmin; iX <= Xmax; iX++) { - for (int iY = Ymin; iY <= Ymax; iY++) { - for (int iZ = Zmin; iZ <= Zmax; iZ++) { - double tmpX = Math.pow(_mEllipsoidCenter.xCoord - iX, 2) / Math.pow(_mSizeA, 2); - double tmpY = Math.pow(_mEllipsoidCenter.yCoord - iY, 2) / Math.pow(_mSizeB, 2); - double tmpZ = Math.pow(_mEllipsoidCenter.zCoord - iZ, 2) / Math.pow(_mSizeC, 2); - double val = (tmpX + tmpY + tmpZ); - - Vec3 tPoint = Vec3.createVectorHelper(iX, iY, iZ); - tPoint.rotateAroundX(_mRandomAngleX); - tPoint.rotateAroundY(_mRandomAngleY); - tPoint.rotateAroundZ(_mRandomAngleZ); - - TargetBlockPosition tbp = TargetBlockPosition.Invalid; - - if (val <= 0.01D) tbp = TargetBlockPosition.AsteroidInnerCore; - - else if (val > 0.01D && val < _mCoreDensity) tbp = TargetBlockPosition.AsteroidCore; - - else if (val >= _mCoreDensity && val <= (1.0D - - (_mSineFactor * MathHelper.sin((iZ + iX + iY - _mRandom.nextFloat() * _mRandomInfluence))))) - tbp = TargetBlockPosition.AsteroidShell; - - if (tbp != TargetBlockPosition.Invalid) - _mStructure.add(new StructureInformation(Vec3.createVectorHelper(iX, iY, iZ), tbp)); - - } - } - } - } - - @Override - public void reset() { - _mStructure = new ArrayList<>(); - _mEllipsoidCenter = Vec3.createVectorHelper(0, 0, 0); - } -} diff --git a/src/main/java/bloodasp/galacticgreg/registry/GalacticGregRegistry.java b/src/main/java/bloodasp/galacticgreg/registry/GalacticGregRegistry.java deleted file mode 100644 index cc0a8146ab..0000000000 --- a/src/main/java/bloodasp/galacticgreg/registry/GalacticGregRegistry.java +++ /dev/null @@ -1,183 +0,0 @@ -package bloodasp.galacticgreg.registry; - -import static bloodasp.galacticgreg.api.enums.ModContainers.Vanilla; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import net.minecraft.world.chunk.IChunkProvider; - -import bloodasp.galacticgreg.GalacticGreg; -import bloodasp.galacticgreg.api.Enums.DimensionType; -import bloodasp.galacticgreg.api.ModContainer; -import bloodasp.galacticgreg.api.ModDimensionDef; -import bloodasp.galacticgreg.dynconfig.DynamicDimensionConfig; -import bloodasp.galacticgreg.generators.GenEllipsoid; -import cpw.mods.fml.common.Loader; - -/** - * GalacticGregs registry - * - */ -public class GalacticGregRegistry { - - private static final Map _mModContainers = new HashMap<>(); - public static final String DIM_UNKNOWN = "GGREG_DIMENSION_UNKNOWN"; - private static boolean _mInitializationDone = false; - - /** - * Register new ModContainer in the registry. Call this after you've populated it with Dimensions and Blocks Must be - * called from your own PreInit or Init event - * - * @param pModContainer - * @return - */ - public static boolean registerModContainer(ModContainer pModContainer) { - if (_mInitializationDone) { - GalacticGreg.Logger.warn("Initialization is already done, you can't add more ModContainers!"); - return false; - } - - if (_mModContainers.containsKey(pModContainer.getModName())) { - GalacticGreg.Logger - .warn("There is already a mod registered with that name: [%s]", pModContainer.getModName()); - return false; - } else { - GalacticGreg.Logger.info( - "Registered new mod to generate ores: [%s] Dimensions provided: [%d]", - pModContainer.getModName(), - pModContainer.getDimensionList() - .size()); - _mModContainers.put(pModContainer.getModName(), pModContainer); - return true; - } - } - - /** - * Lookup the registered dimensions and try to find the DimensionDefinition that has the ChunkProvider that we have - * here - * - * @param pChunkProvider - * @return - */ - public static ModDimensionDef getDimensionTypeByChunkGenerator(IChunkProvider pChunkProvider) { - try { - if (!_mInitializationDone) return null; - - String tFQCPN = pChunkProvider.toString() - .split("@")[0]; - ModDimensionDef tReturnMDD = null; - - for (ModContainer mc : _mModContainers.values()) { - for (ModDimensionDef mdd : mc.getDimensionList()) { - if (mdd.getChunkProviderName() - .equals(tFQCPN)) { - tReturnMDD = mdd; - break; - } - } - } - - return tReturnMDD; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - /** - * Get all registered modcontainers. Can only be done after the initialization process is done - * - * @return - */ - public static Collection getModContainers() { - if (!_mInitializationDone) return null; - - return _mModContainers.values(); - } - - /** - * Initializes the Registry. Never do this in your code, GalacticGreg will crash if you do so - */ - public static boolean InitRegistry() { - if (_mInitializationDone) // never run init twice! - return false; - - InitModContainers(); - - DynamicDimensionConfig.InitDynamicConfig(); - return true; - } - - /** - * Parse modcontainers and search for loaded mods. Enable found mods for generation - */ - private static void InitModContainers() { - for (ModContainer mc : _mModContainers.values()) { - // todo: rename Vanilla mod container name from "Vanilla" to "minecraft" - if (!Loader.isModLoaded(mc.getModName()) && !mc.getModName() - .equals(Vanilla.modContainer.getModName())) { - GalacticGreg.Logger.warn( - "Ignoring ModRegistration for OreGen: [%s], because mod is not loaded. Did you misspell the name?", - mc.getModName()); - mc.setEnabled(false); - } else { - GalacticGreg.Logger.info("Mod [%s] is now enabled for OreGen by GalacticGreg", mc.getModName()); - mc.setEnabled(true); - for (ModDimensionDef md : mc.getDimensionList()) { - GalacticGreg.Logger.info( - "ModID: [%s] DimName: [%s] ValidBlocks: [%d] Identifier: [%s] Generators: [%d]", - mc.getModName(), - md.getDimensionName(), - md.getReplaceableBlocks() - .size(), - md.getDimIdentifier(), - md.getSpaceObjectGenerators() - .size()); - - // Register default generator if dimension is asteroid and no generator was added - if (md.getDimensionType() == DimensionType.Asteroid) { - if (md.getSpaceObjectGenerators() - .size() == 0) { - GalacticGreg.Logger.debug("No generators found, adding build-in ellipsoid generator"); - md.registerSpaceObjectGenerator(new GenEllipsoid()); - } - GalacticGreg.Logger.info( - "Asteroid-Enabled dimension. Registered Generators: [%d]", - md.getSpaceObjectGenerators() - .size()); - } - - md.finalizeReplaceableBlocks(mc.getModName()); - } - } - } - _mInitializationDone = true; - } - - /** - * Returns ModContainer for given DimensionDefinition - * - * @param pDimensionDefinition - * @return - */ - public static ModContainer getModContainerForDimension(ModDimensionDef pDimensionDefinition) { - if (!_mInitializationDone) return null; - - try { - for (ModContainer mc : _mModContainers.values()) { - for (ModDimensionDef md : mc.getDimensionList()) { - if (pDimensionDefinition.getDimIdentifier() - .equals(md.getDimIdentifier())) { - return mc; - } - } - } - return null; - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } -} diff --git a/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematic.java b/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematic.java deleted file mode 100644 index 222d786cb4..0000000000 --- a/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematic.java +++ /dev/null @@ -1,100 +0,0 @@ -package bloodasp.galacticgreg.schematics; - -import java.util.ArrayList; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlAttribute; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; -import javax.xml.bind.annotation.XmlRootElement; - -import net.minecraft.block.Block; -import net.minecraft.util.Vec3; - -import bloodasp.galacticgreg.api.StructureInformation; - -/** - * Class for XML Structure files. You only should edit/use this file/class if you want to add/fix stuff with - * GalacticGreg itself, and never if you're a mod developer and want to add support for GGreg to your mod. However, feel - * free to copy this code to your own mod to implement structures. If you have questions, find me on github and ask - */ -@XmlAccessorType(XmlAccessType.FIELD) -@XmlRootElement(name = "SpaceSchematic") -public class SpaceSchematic { - - @XmlAttribute(name = "enabled") - protected boolean _mStructureEnabled; - @XmlAttribute(name = "centerX") - protected int _mCenterX; - @XmlAttribute(name = "centerY") - protected int _mCenterY; - @XmlAttribute(name = "centerZ") - protected int _mCenterZ; - - @XmlElement(name = "StructureName") - protected String _mStructureName; - - @XmlElement(name = "Rarity") - protected int _mRarity; - - @XmlElementWrapper(name = "Coords") - @XmlElement(name = "block") - protected ArrayList mStructureInfoList; - - public boolean isEnabled() { - return _mStructureEnabled; - } - - public Vec3 getStructureCenter() { - return Vec3.createVectorHelper(_mCenterX, _mCenterY, _mCenterZ); - } - - public int getRarity() { - return _mRarity; - } - - public String getName() { - return _mStructureName; - } - - public ArrayList coordInfo() { - if (mStructureInfoList == null) mStructureInfoList = new ArrayList<>(); - - return mStructureInfoList; - } - - public void addStructureInfo(StructureInformation pStrucInfo) { - if (mStructureInfoList == null) mStructureInfoList = new ArrayList<>(); - mStructureInfoList.add(new BaseStructureInfo(pStrucInfo)); - } - - public static class BaseStructureInfo { - - @XmlAttribute(name = "X") - protected int posX; - @XmlAttribute(name = "Y") - protected int posY; - @XmlAttribute(name = "Z") - protected int posZ; - @XmlAttribute(name = "Block") - protected String blockName; - @XmlAttribute(name = "Meta") - protected int blockMeta; - - public BaseStructureInfo(StructureInformation pSI) { - posX = pSI.getX(); - posY = pSI.getY(); - posZ = pSI.getZ(); - blockName = Block.blockRegistry.getNameForObject( - pSI.getBlock() - .getBlock()); - blockMeta = pSI.getBlock() - .getMeta(); - } - - public Vec3 getVec3Pos() { - return Vec3.createVectorHelper(posX, posY, posZ); - } - } -} diff --git a/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicFactory.java b/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicFactory.java deleted file mode 100644 index 5c76904a80..0000000000 --- a/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicFactory.java +++ /dev/null @@ -1,33 +0,0 @@ -package bloodasp.galacticgreg.schematics; - -import net.minecraft.block.Block; -import net.minecraft.util.Vec3; - -import bloodasp.galacticgreg.api.Enums.AllowedBlockPosition; -import bloodasp.galacticgreg.api.Enums.TargetBlockPosition; -import bloodasp.galacticgreg.api.SpecialBlockComb; -import bloodasp.galacticgreg.api.StructureInformation; - -/** - * Class for XML Structure files. You only should edit/use this file/class if you want to add/fix stuff with - * GalacticGreg itself, and never if you're a mod developer and want to add support for GGreg to your mod. However, feel - * free to copy this code to your own mod to implement structures. If you have questions, find me on github and ask - */ -public class SpaceSchematicFactory { - - public static SpaceSchematic createSchematic(String pName) { - SpaceSchematic tSchem = new SpaceSchematic(); - tSchem._mStructureName = pName; - tSchem._mRarity = 100; - tSchem._mStructureEnabled = false; - - return tSchem; - } - - public static StructureInformation createStructureInfo(int pX, int pY, int pZ, Block pBlock, int pMeta) { - return new StructureInformation( - Vec3.createVectorHelper(pX, pY, pZ), - TargetBlockPosition.Invalid, - new SpecialBlockComb(pBlock, pMeta, AllowedBlockPosition.AsteroidCoreAndShell)); - } -} diff --git a/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicHandler.java b/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicHandler.java deleted file mode 100644 index 3300f98b92..0000000000 --- a/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicHandler.java +++ /dev/null @@ -1,182 +0,0 @@ -package bloodasp.galacticgreg.schematics; - -import java.io.File; -import java.io.FileOutputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.Marshaller; -import javax.xml.bind.Unmarshaller; - -import org.apache.commons.io.FileUtils; - -import bloodasp.galacticgreg.GalacticGreg; - -/** - * Class for XML Structure files. You only should edit/use this file/class if you want to add/fix stuff with - * GalacticGreg itself, and never if you're a mod developer and want to add support for GGreg to your mod. However, feel - * free to copy this code to your own mod to implement structures. If you have questions, find me on github and ask - */ -public class SpaceSchematicHandler { - - File _mConfigFolderName; - File _mSchematicsFolderName; - private List _mSpaceSchematics; - - @SuppressWarnings("ResultOfMethodCallIgnored") - public SpaceSchematicHandler(File pConfigFolder) { - _mConfigFolderName = new File(String.format("%s/%s", pConfigFolder.toString(), GalacticGreg.NICE_MODID)); - _mSchematicsFolderName = new File(String.format("%s/schematics", _mConfigFolderName)); - - _mSpaceSchematics = new ArrayList<>(); - - if (!_mSchematicsFolderName.exists()) _mSchematicsFolderName.mkdirs(); - } - - /** - * Get a random schematic to be placed. - * - * @return A schematic that can be spawned in space - */ - public SpaceSchematic getRandomSpaceSchematic() { - int tRandomChance = GalacticGreg.GalacticRandom.nextInt(100); - List tRandomIDs = new ArrayList<>(); - SpaceSchematic tChoosenSchematic = null; - - if (_mSpaceSchematics == null) return null; - - if (_mSpaceSchematics.size() == 0) return null; - - if (_mSpaceSchematics.size() == 1) { - tChoosenSchematic = _mSpaceSchematics.get(0); - if (tChoosenSchematic.getRarity() < tRandomChance) tChoosenSchematic = null; - } else { - for (int i = 0; i < _mSpaceSchematics.size(); i++) { - if (_mSpaceSchematics.get(i) - .getRarity() >= tRandomChance) tRandomIDs.add(i); - } - } - - if (tRandomIDs.size() > 0) { - int tRnd = GalacticGreg.GalacticRandom.nextInt(tRandomIDs.size()); - tChoosenSchematic = _mSpaceSchematics.get(tRandomIDs.get(tRnd)); - } - - return tChoosenSchematic; - } - - /** - * Try to reload the schematics. Will not change the list of currently loaded schematics if any errors are detected, - * except if you force it to do so - * - * @return - */ - public boolean reloadSchematics(boolean pForceReload) { - try { - Collection structureFiles = FileUtils - .listFiles(_mSchematicsFolderName, new String[] { "xml" }, false); - List tNewSpaceSchematics = new ArrayList<>(); - int tErrorsFound = 0; - - if (structureFiles.isEmpty()) return true; - - for (File tSchematic : structureFiles) { - try { - SpaceSchematic tSchematicObj = LoadSpaceSchematic(tSchematic); - if (tSchematicObj != null) tNewSpaceSchematics.add(tSchematicObj); - else { - GalacticGreg.Logger.warn("Could not load Schematic %s. Please check the syntax", tSchematic); - tErrorsFound++; - } - } catch (Exception e) { - GalacticGreg.Logger.error("Error while loading Schematic %s", tSchematic); - e.printStackTrace(); - } - - } - - GalacticGreg.Logger.info("Successfully loaded %d Schematics", tNewSpaceSchematics.size()); - boolean tDoReplace = true; - - if (tErrorsFound > 0) { - GalacticGreg.Logger.warn("Found %d errors while loading, not all schematics will be available"); - if (pForceReload) - GalacticGreg.Logger.info("Reload was forced, replacing currently active list with new one"); - else { - GalacticGreg.Logger.warn("Nothing was replaced. Fix any errors and reload again"); - tDoReplace = false; - } - } - - if (tDoReplace) _mSpaceSchematics = tNewSpaceSchematics; - - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * Saves the schematic to disk. The schematics name will be used as filename - * - * @param pSchematic - * @return - */ - public boolean SaveSpaceStructure(SpaceSchematic pSchematic) { - try { - if (pSchematic.getName() - .length() < 1) return false; - - JAXBContext tJaxbCtx = JAXBContext.newInstance(SpaceSchematic.class); - Marshaller jaxMarsh = tJaxbCtx.createMarshaller(); - jaxMarsh.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); - jaxMarsh.marshal( - pSchematic, - new FileOutputStream(String.format("%s/%s.xml", _mSchematicsFolderName, pSchematic.getName()), false)); - - return true; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - /** - * Load a schematic from disk by the schematic-name itself, without .xml or path - * - * @param pSchematicName - * @return - */ - public SpaceSchematic LoadSpaceSchematic(String pSchematicName) { - return LoadSpaceSchematic(new File(String.format("%s/%s.xml", _mSchematicsFolderName, pSchematicName))); - } - - /** - * Load a schematic file from disk by providing the actual file-object - * - * @param pName - * @return - */ - public SpaceSchematic LoadSpaceSchematic(File pName) { - SpaceSchematic tSchematic = null; - - try { - JAXBContext tJaxbCtx = JAXBContext.newInstance(SpaceSchematic.class); - if (!pName.exists()) { - GalacticGreg.Logger.error("SchematicFile %s could not be found", pName); - return null; - } - - Unmarshaller jaxUnmarsh = tJaxbCtx.createUnmarshaller(); - tSchematic = (SpaceSchematic) jaxUnmarsh.unmarshal(pName); - - } catch (Exception e) { - e.printStackTrace(); - } - - return tSchematic; - } -} diff --git a/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicWrapper.java b/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicWrapper.java deleted file mode 100644 index 406b66c0a1..0000000000 --- a/src/main/java/bloodasp/galacticgreg/schematics/SpaceSchematicWrapper.java +++ /dev/null @@ -1,104 +0,0 @@ -package bloodasp.galacticgreg.schematics; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.util.Vec3; - -import bloodasp.galacticgreg.GalacticGreg; -import bloodasp.galacticgreg.api.BlockMetaComb; -import bloodasp.galacticgreg.api.Enums.SpaceObjectType; -import bloodasp.galacticgreg.api.Enums.TargetBlockPosition; -import bloodasp.galacticgreg.api.ISpaceObjectGenerator; -import bloodasp.galacticgreg.api.StructureInformation; -import bloodasp.galacticgreg.schematics.SpaceSchematic.BaseStructureInfo; -import cpw.mods.fml.common.registry.GameRegistry; - -/** - * Class for XML Structure files. You only should edit/use this file/class if you want to add/fix stuff with - * GalacticGreg itself, and never if you're a mod developer and want to add support for GGreg to your mod. However, feel - * free to copy this code to your own mod to implement structures. If you have questions, find me on github and ask - */ -public class SpaceSchematicWrapper implements ISpaceObjectGenerator { - - private SpaceSchematic _mSchematic; - private Vec3 _mCenter = Vec3.createVectorHelper(0, 0, 0); - private List _mFinalizedStructure; - - public SpaceSchematicWrapper(SpaceSchematic pSchematic) { - _mSchematic = pSchematic; - } - - public boolean isCalculated() { - return _mFinalizedStructure != null && _mFinalizedStructure.size() > 0; - } - - /** - * Recalculate the Structures position, center it around _mCenter - */ - private void RecalculatePosition() { - _mFinalizedStructure = new ArrayList<>(); - - for (BaseStructureInfo bsi : _mSchematic.coordInfo()) { - try { - String tModID = bsi.blockName.split(":")[0]; - String tBlockName = bsi.blockName.split(":")[1]; - - Block tBlock = GameRegistry.findBlock(tModID, tBlockName); - if (tBlock != null) { - BlockMetaComb bmc = new BlockMetaComb(tBlock, bsi.blockMeta); - Vec3 tCenteredPos = _mCenter.addVector(bsi.posX, bsi.posY, bsi.posZ); - StructureInformation tnewSI = new StructureInformation( - tCenteredPos, - TargetBlockPosition.StructureBlock, - bmc); - _mFinalizedStructure.add(tnewSI); - } else GalacticGreg.Logger - .warn("Block %s:%s could not be found. Schematic will be incomplete!", tModID, tBlockName); - } catch (Exception e) { - e.printStackTrace(); - GalacticGreg.Logger.error("Error while recalculating blocks position"); - } - } - } - - @Override - public Vec3 getCenterPoint() { - return _mCenter; - } - - @Override - public void setCenterPoint(int pX, int pY, int pZ) { - _mCenter = Vec3.createVectorHelper(pX, pY, pZ); - } - - @Override - public void setCenterPoint(Vec3 pCenter) { - _mCenter = pCenter; - } - - @Override - public List getStructure() { - return _mFinalizedStructure; - } - - @Override - public void calculate() { - RecalculatePosition(); - } - - @Override - public void randomize(int pSizeMin, int pSizeMax) {} - - @Override - public SpaceObjectType getType() { - return SpaceObjectType.NonOreSchematic; - } - - @Override - public void reset() { - - } - -} diff --git a/src/main/java/bwcrossmod/BartWorksCrossmod.java b/src/main/java/bwcrossmod/BartWorksCrossmod.java new file mode 100644 index 0000000000..e7e2ca44ed --- /dev/null +++ b/src/main/java/bwcrossmod/BartWorksCrossmod.java @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod; + +import static gregtech.api.enums.Mods.GalacticraftCore; + +import java.io.StringReader; + +import net.minecraft.util.StringTranslate; + +import org.apache.commons.io.input.ReaderInputStream; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import bwcrossmod.GTpp.loader.RadioHatchCompat; +import bwcrossmod.galacticraft.GalacticraftProxy; +import bwcrossmod.tectech.TecTechResearchLoader; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; +import gregtech.GT_Version; + +@Mod( + modid = BartWorksCrossmod.MOD_ID, + name = BartWorksCrossmod.NAME, + version = BartWorksCrossmod.VERSION, + dependencies = """ + required-after:IC2;\ + required-after:gregtech;\ + required-after:bartworks;\ + after:GalacticraftMars;\ + after:GalacticraftCore;\ + after:Micdoodlecore;\ + after:miscutils;\ + after:EMT;\ + after:tectech;""") +public class BartWorksCrossmod { + + public static final String NAME = "BartWorks Mod Additions"; + public static final String VERSION = GT_Version.VERSION; + public static final String MOD_ID = "bartworkscrossmod"; + public static final Logger LOGGER = LogManager.getLogger(BartWorksCrossmod.NAME); + + @Mod.Instance(BartWorksCrossmod.MOD_ID) + public static BartWorksCrossmod instance; + + @Mod.EventHandler + public void preInit(FMLPreInitializationEvent preinit) { + if (GalacticraftCore.isModLoaded()) { + GalacticraftProxy.preInit(preinit); + } + } + + @Mod.EventHandler + public void init(FMLInitializationEvent init) { + if (GalacticraftCore.isModLoaded()) { + GalacticraftProxy.init(init); + } + } + + @Mod.EventHandler + public void postInit(FMLPostInitializationEvent init) { + if (GalacticraftCore.isModLoaded()) { + GalacticraftProxy.postInit(init); + } + RadioHatchCompat.run(); + TecTechResearchLoader.runResearches(); + } + + @Mod.EventHandler + public void onFMLServerStart(FMLServerStartingEvent event) { + for (Object s : RadioHatchCompat.TranslateSet) { + StringTranslate.inject(new ReaderInputStream(new StringReader((String) s))); + } + } +} diff --git a/src/main/java/bwcrossmod/GTpp/loader/RadioHatchCompat.java b/src/main/java/bwcrossmod/GTpp/loader/RadioHatchCompat.java new file mode 100644 index 0000000000..b410ec7e3e --- /dev/null +++ b/src/main/java/bwcrossmod/GTpp/loader/RadioHatchCompat.java @@ -0,0 +1,284 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.GTpp.loader; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Queue; +import java.util.Set; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.RegistryNamespaced; +import net.minecraftforge.oredict.OreDictionary; + +import bartworks.API.IRadMaterial; +import bartworks.util.log.DebugLog; +import bwcrossmod.BartWorksCrossmod; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.registry.GameData; +import cpw.mods.fml.common.registry.GameRegistry; + +public class RadioHatchCompat { + + private static Class intf; + private static Class materialClass; + private static Class enu; + private static Class materialStackClass; + + private static Field isRadioactive; + private static Field f; + private static Field componentType; + private static Field radlevel; + private static Field protons; + + private static Field vMaterialInput; + private static Field stackMaterial; + private static Field RGBA; + private static Field localizedName; + private static Field unlocalizedName; + + private static Object rod; + private static Object longRod; + + public static HashSet TranslateSet = new HashSet<>(); + + static { + try { + RadioHatchCompat.intf = Class.forName("gtPlusPlus.core.item.base.BaseItemComponent"); + RadioHatchCompat.enu = Class.forName("gtPlusPlus.core.item.base.BaseItemComponent$ComponentTypes"); + RadioHatchCompat.materialClass = Class.forName("gtPlusPlus.core.material.Material"); + RadioHatchCompat.materialStackClass = Class.forName("gtPlusPlus.core.material.MaterialStack"); + + RadioHatchCompat.f = RadioHatchCompat.intf.getField("componentMaterial"); + RadioHatchCompat.isRadioactive = RadioHatchCompat.materialClass.getField("isRadioactive"); + RadioHatchCompat.componentType = RadioHatchCompat.intf.getDeclaredField("componentType"); + RadioHatchCompat.radlevel = RadioHatchCompat.materialClass.getField("vRadiationLevel"); + + RadioHatchCompat.vMaterialInput = RadioHatchCompat.materialClass.getDeclaredField("vMaterialInput"); + RadioHatchCompat.stackMaterial = RadioHatchCompat.materialStackClass.getDeclaredField("stackMaterial"); + RadioHatchCompat.protons = RadioHatchCompat.materialClass.getDeclaredField("vProtons"); + RadioHatchCompat.RGBA = RadioHatchCompat.materialClass.getDeclaredField("RGBA"); + RadioHatchCompat.localizedName = RadioHatchCompat.materialClass.getDeclaredField("localizedName"); + RadioHatchCompat.unlocalizedName = RadioHatchCompat.materialClass.getDeclaredField("unlocalizedName"); + + RadioHatchCompat.vMaterialInput.setAccessible(true); + RadioHatchCompat.stackMaterial.setAccessible(true); + RadioHatchCompat.protons.setAccessible(true); + RadioHatchCompat.RGBA.setAccessible(true); + RadioHatchCompat.localizedName.setAccessible(true); + RadioHatchCompat.unlocalizedName.setAccessible(true); + + Object[] arr = RadioHatchCompat.enu.getEnumConstants(); + for (Object o : arr) { + if (RadioHatchCompat.rod != null && RadioHatchCompat.longRod != null) break; + if ("ROD".equalsIgnoreCase(o.toString())) RadioHatchCompat.rod = o; + else if ("RODLONG".equalsIgnoreCase(o.toString())) RadioHatchCompat.longRod = o; + } + + } catch (NoSuchFieldException | ClassNotFoundException e) { + e.printStackTrace(); + } + } + + @SuppressWarnings("unchecked") + public static void run() { + DebugLog.log("Starting Generation of missing GT++ rods/longrods"); + try { + Class rodclass = (Class) Class + .forName("gtPlusPlus.core.item.base.rods.BaseItemRod"); + Class longrodclass = (Class) Class + .forName("gtPlusPlus.core.item.base.rods.BaseItemRodLong"); + Constructor c1 = rodclass.getConstructor(RadioHatchCompat.materialClass); + Constructor c2 = longrodclass.getConstructor(RadioHatchCompat.materialClass); + Field cOwners = GameData.class.getDeclaredField("customOwners"); + cOwners.setAccessible(true); + Field map = RegistryNamespaced.class.getDeclaredField("field_148758_b"); + map.setAccessible(true); + Map UniqueIdentifierMap = (Map) map.get(GameData.getItemRegistry()); + + Map ownerItems = (Map) cOwners + .get(null); + ModContainer gtpp = null; + ModContainer bartworks = null; + + for (ModContainer container : Loader.instance() + .getModList()) { + if (gtpp != null && bartworks != null) break; + if (BartWorksCrossmod.MOD_ID.equalsIgnoreCase(container.getModId())) bartworks = container; + else if (container.getModId() + .equalsIgnoreCase(GTPlusPlus.ID)) gtpp = container; + } + + for (Object mats : (Set) RadioHatchCompat.materialClass.getField("mMaterialMap") + .get(null)) { + if (RadioHatchCompat.isRadioactive.getBoolean(mats)) { + + if (OreDictionary.getOres("stick" + RadioHatchCompat.unlocalizedName.get(mats)) + .isEmpty()) { + Item it = c1.newInstance(mats); + UniqueIdentifierMap.replace(it, "miscutils:" + it.getUnlocalizedName()); + GameRegistry.UniqueIdentifier ui = GameRegistry.findUniqueIdentifierFor(it); + ownerItems.replace(ui, bartworks, gtpp); + + String tanslate = it.getUnlocalizedName() + ".name=" + + RadioHatchCompat.localizedName.get(mats) + + " Rod"; + RadioHatchCompat.TranslateSet.add(tanslate); + + DebugLog.log(tanslate); + DebugLog.log("Generate: " + RadioHatchCompat.rod + RadioHatchCompat.unlocalizedName.get(mats)); + } + if (OreDictionary.getOres("stickLong" + RadioHatchCompat.unlocalizedName.get(mats)) + .isEmpty()) { + Item it2 = c2.newInstance(mats); + UniqueIdentifierMap.replace(it2, "miscutils:" + it2.getUnlocalizedName()); + GameRegistry.UniqueIdentifier ui2 = GameRegistry.findUniqueIdentifierFor(it2); + ownerItems.replace(ui2, bartworks, gtpp); + + DebugLog + .log("Generate: " + RadioHatchCompat.longRod + RadioHatchCompat.unlocalizedName.get(mats)); + } + } + } + } catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InvocationTargetException + | InstantiationException | ClassNotFoundException e) { + e.printStackTrace(); + } + } + + public static IRadMaterial GTppRadChecker(ItemStack lStack) { + try { + if (RadioHatchCompat.intf.isAssignableFrom( + lStack.getItem() + .getClass())) { + if (!RadioHatchCompat.isRadioactive.getBoolean(RadioHatchCompat.f.get(lStack.getItem()))) return null; + int amount = RadioHatchCompat.componentType.get(lStack.getItem()) + .equals(RadioHatchCompat.rod) ? 1 + : RadioHatchCompat.componentType.get(lStack.getItem()) + .equals(RadioHatchCompat.longRod) ? 2 : 0; + if (amount == 0) return null; + return new RadioHatchCompat.GTPPRadAdapter(amount, RadioHatchCompat.f.get(lStack.getItem())); + } + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } + + static class GTPPRadAdapter implements IRadMaterial { + + static final HashMap BUFFER = new HashMap<>(); + + GTPPRadAdapter(Object m) { + this.m = m; + } + + GTPPRadAdapter(int amount, Object m) { + this.amount = (byte) amount; + this.m = m; + } + + byte amount; + final Object m; + + private static ArrayList getMaterialInput(Object GTPPMaterial) throws IllegalAccessException { + Object ret = RadioHatchCompat.vMaterialInput.get(GTPPMaterial); + return ret instanceof ArrayList ? (ArrayList) ret : new ArrayList<>(); + } + + private static boolean isElement(Object GTPPMaterial) throws IllegalAccessException { + return RadioHatchCompat.GTPPRadAdapter.getMaterialInput(GTPPMaterial) + .isEmpty(); + } + + private static List getElemets(Object GTPPMaterial) throws IllegalAccessException { + ArrayList elements = new ArrayList<>(); + Queue toCheck = new LinkedList<>(); + ArrayList materialInputs = RadioHatchCompat.GTPPRadAdapter.getMaterialInput(GTPPMaterial); + if (materialInputs.isEmpty()) return Collections.singletonList(GTPPMaterial); + for (Object materialStack : materialInputs) { + if (!RadioHatchCompat.GTPPRadAdapter.isElement(RadioHatchCompat.stackMaterial.get(materialStack))) + toCheck.add(RadioHatchCompat.stackMaterial.get(materialStack)); + else elements.add(RadioHatchCompat.stackMaterial.get(materialStack)); + } + while (!toCheck.isEmpty()) { + elements.addAll(GTPPRadAdapter.getElemets(toCheck.poll())); + } + return elements; + } + + private static Integer calulateRad(Object m) { + int ret = 0; + try { + List pureElements = RadioHatchCompat.GTPPRadAdapter.getElemets(m); + for (Object materialObj : pureElements) if (RadioHatchCompat.isRadioactive.getBoolean(materialObj)) + ret += RadioHatchCompat.radlevel.getByte(m) + + RadioHatchCompat.GTPPRadAdapter.clampToZero(RadioHatchCompat.protons.getLong(materialObj)); + else ret += RadioHatchCompat.radlevel.getByte(m); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return ret; + } + + @Override + public int getRadiationLevel(ItemStack aStack) { + return RadioHatchCompat.GTPPRadAdapter.BUFFER + .computeIfAbsent(this.m, radlvl -> RadioHatchCompat.GTPPRadAdapter.calulateRad(this.m)); + } + + private static long clampToZero(long number) { + return number > 0 ? number : 0; + } + + @Override + public byte getAmountOfMaterial(ItemStack aStack) { + return this.amount; + } + + @Override + public short[] getColorForGUI(ItemStack aStack) { + short[] rgba = { 0, 0, 0, 0 }; + try { + rgba = (short[]) RadioHatchCompat.RGBA.get(this.m); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return rgba; + } + + @Override + public String getNameForGUI(ItemStack aStack) { + String ret = ""; + try { + ret = (String) RadioHatchCompat.localizedName.get(this.m); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return ret; + } + } +} diff --git a/src/main/java/bwcrossmod/cls/CLSCompat.java b/src/main/java/bwcrossmod/cls/CLSCompat.java new file mode 100644 index 0000000000..9cb9c6fc9c --- /dev/null +++ b/src/main/java/bwcrossmod/cls/CLSCompat.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.cls; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Optional; + +import bartworks.system.material.Werkstoff; + +@SuppressWarnings({ "rawtypes", "unchecked" }) +public class CLSCompat { + + private CLSCompat() {} + + private static final long MINIMAL_UPDATE_INTERVAL = 1000 / 30; // target 30 fps + private static long lastUpdate = 0; + private static Class alexiilMinecraftDisplayer; + private static Class alexiilProgressDisplayer; + private static Method displayProgress; + private static Field isRegisteringBartWorks; + + static { + try { + alexiilMinecraftDisplayer = Class.forName("alexiil.mods.load.MinecraftDisplayer"); + alexiilProgressDisplayer = Class.forName("alexiil.mods.load.ProgressDisplayer"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + + Optional.ofNullable(alexiilMinecraftDisplayer) + .ifPresent(e -> { + try { + isRegisteringBartWorks = e.getField("isRegisteringBartWorks"); + } catch (NoSuchFieldException ex) { + ex.printStackTrace(); + } + }); + + Optional.ofNullable(alexiilProgressDisplayer) + .ifPresent(e -> { + try { + displayProgress = e.getMethod("displayProgress", String.class, float.class); + } catch (NoSuchMethodException ex) { + ex.printStackTrace(); + } + }); + } + + public static Integer[] initCls() { + int sizeStep; + int sizeStep2 = 1; + + try { + isRegisteringBartWorks.set(null, true); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + + if (Werkstoff.werkstoffHashSet.size() >= 100) sizeStep = Werkstoff.werkstoffHashSet.size() / 100 - 1; + else sizeStep = sizeStep2 = Werkstoff.werkstoffHashSet.size(); + + return new Integer[] { sizeStep, sizeStep2, sizeStep }; + } + + public static int invokeStepSize(Werkstoff werkstoff, Integer[] steps, int size) { + --steps[0]; + + long time = System.currentTimeMillis(); + if (time - lastUpdate >= MINIMAL_UPDATE_INTERVAL) { + try { + displayProgress.invoke(null, werkstoff.getDefaultName(), (float) size / 10000); + } catch (IllegalAccessException | InvocationTargetException e) { + e.printStackTrace(); + } + lastUpdate = time; + } + + if (steps[0] == 0 && Werkstoff.werkstoffHashSet.size() >= 100) steps[0] = steps[2]; + + size += steps[1]; + return size; + } + + public static void disableCls() { + try { + isRegisteringBartWorks.set(null, false); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/bwcrossmod/galacticgreg/MTEVoidMinerBase.java b/src/main/java/bwcrossmod/galacticgreg/MTEVoidMinerBase.java new file mode 100644 index 0000000000..1eb6d8e312 --- /dev/null +++ b/src/main/java/bwcrossmod/galacticgreg/MTEVoidMinerBase.java @@ -0,0 +1,309 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticgreg; + +import static bartworks.util.BWTooltipReference.MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.gen.ChunkProviderServer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.google.common.collect.ImmutableList; + +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.objects.XSTR; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.tileentities.machines.multi.MTEDrillerBase; + +public abstract class MTEVoidMinerBase extends MTEDrillerBase { + + private VoidMinerUtility.DropMap dropMap = null; + private VoidMinerUtility.DropMap extraDropMap = null; + private float totalWeight; + private int multiplier = 1; + + protected final byte TIER_MULTIPLIER; + + private boolean mBlacklist = false; + + /** + * @Deprecated Use {@link VoidMinerUtility#addBlockToDimensionList} + */ + @Deprecated + public static void addBlockToDimensionList(int dimId, Block block, int meta, float weight) { + VoidMinerUtility.addBlockToDimensionList(dimId, block, meta, weight); + } + + public MTEVoidMinerBase(int aID, String aName, String aNameRegional, int tier) { + super(aID, aName, aNameRegional); + this.TIER_MULTIPLIER = (byte) Math.max(tier, 1); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("mBlacklist", this.mBlacklist); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.mBlacklist = aNBT.getBoolean("mBlacklist"); + } + + public MTEVoidMinerBase(String aName, int tier) { + super(aName); + this.TIER_MULTIPLIER = (byte) tier; + } + + @Override + protected int getMinTier() { + return this.TIER_MULTIPLIER + 5; // min tier = LuV + } + + @Override + protected boolean checkHatches() { + return true; + } + + @Override + protected void setElectricityStats() { + try { + this.mEUt = this.isPickingPipes ? 60 : Math.toIntExact(GTValues.V[this.getMinTier()]); + } catch (ArithmeticException e) { + e.printStackTrace(); + this.mEUt = Integer.MAX_VALUE - 7; + } + this.mOutputItems = new ItemStack[0]; + this.mProgresstime = 0; + this.mMaxProgresstime = 10; + this.mEfficiency = this.getCurrentEfficiency(null); + this.mEfficiencyIncrease = 10000; + this.mEUt = this.mEUt > 0 ? -this.mEUt : this.mEUt; + } + + @Override + protected boolean workingAtBottom(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, + int yHead, int oldYHead) { + // if the dropMap has never been initialised or if the dropMap is empty + if (this.dropMap == null || this.totalWeight == 0) this.calculateDropMap(); + + if (this.totalWeight != 0.f) { + this.handleFluidConsumption(); + this.handleOutputs(); + return true; + } else { + this.stopMachine(ShutDownReasonRegistry.NONE); + return false; + } + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + String casings = this.getCasingBlockItem() + .get(0) + .getDisplayName(); + + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Miner") + .addInfo("Controller Block for the Void Miner " + GTValues.VN[this.getMinTier()]) + .addInfo("Consumes " + GTValues.V[this.getMinTier()] + "EU/t") + .addInfo( + "Can be supplied with 2L/s of Neon(x4), Krypton(x8), Xenon(x16) or Oganesson(x64) for higher outputs.") + .addInfo( + "Will output " + 2 * this.TIER_MULTIPLIER + + " Ores per Second depending on the Dimension it is build in") + .addInfo("Put the Ore into the input bus to set the Whitelist/Blacklist") + .addInfo("Use a screwdriver to toggle Whitelist/Blacklist") + .addInfo( + "Blacklist or non Whitelist Ore will be " + EnumChatFormatting.DARK_RED + + "VOIDED" + + EnumChatFormatting.RESET + + ".") + .addSeparator() + .beginStructureBlock(3, 7, 3, false) + .addController("Front bottom") + .addOtherStructurePart(casings, "form the 3x1x3 Base") + .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") + .addOtherStructurePart( + this.getFrameMaterial().mName + " Frame Boxes", + "Each pillar's side and 1x3x1 on top") + .addEnergyHatch(VN[this.getMinTier()] + "+, Any base casing") + .addMaintenanceHatch("Any base casing") + .addInputBus("Mining Pipes or Ores, optional, any base casing") + .addInputHatch("Optional noble gas, any base casing") + .addOutputBus("Any base casing") + .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS); + return tt; + } + + @Override + protected List> getAllowedHatches() { + return ImmutableList.of(InputHatch, InputBus, OutputBus, Maintenance, Energy); + } + + /** + * method used to pick the next ore in the dropMap. + * + * @return the chosen ore + */ + private ItemStack nextOre() { + float currentWeight = 0.f; + while (true) { + float randomNumber = XSTR.XSTR_INSTANCE.nextFloat() * this.totalWeight; + for (Map.Entry entry : this.dropMap.getInternalMap() + .entrySet()) { + currentWeight += entry.getValue(); + if (randomNumber < currentWeight) return entry.getKey() + .getItemStack(); + } + for (Map.Entry entry : this.extraDropMap.getInternalMap() + .entrySet()) { + currentWeight += entry.getValue(); + if (randomNumber < currentWeight) return entry.getKey() + .getItemStack(); + } + } + } + + /** + * Method used to check the current gat and its corresponding multiplier + * + * @return the noble gas in the hatch. returns null if there is no noble gas found. + */ + private FluidStack getNobleGasInputAndSetMultiplier() { + for (FluidStack s : this.getStoredFluids()) { + for (int i = 0; i < VoidMinerUtility.NOBLE_GASSES.length; i++) { + FluidStack ng = VoidMinerUtility.NOBLE_GASSES[i]; + if (ng.isFluidEqual(s)) { + this.multiplier = this.TIER_MULTIPLIER * VoidMinerUtility.NOBEL_GASSES_MULTIPLIER[i]; + return s; + } + } + } + return null; + } + + /** + * method used to decrement the quantity of gas in the hatch + * + * @param gasToConsume the fluid stack in the hatch + * @return if yes or no it was able to decrement the quantity of the fluidStack + */ + private boolean consumeNobleGas(FluidStack gasToConsume) { + for (FluidStack s : this.getStoredFluids()) { + if (s.isFluidEqual(gasToConsume) && s.amount >= 1) { + s.amount -= 1; + this.updateSlots(); + return true; + } + } + return false; + } + + /** + * handler for the fluid consumption + */ + private void handleFluidConsumption() { + FluidStack storedNobleGas = this.getNobleGasInputAndSetMultiplier(); + if (storedNobleGas == null || !this.consumeNobleGas(storedNobleGas)) this.multiplier = this.TIER_MULTIPLIER; + } + + /** + * Handles the ores added manually with {@link VoidMinerUtility#addMaterialToDimensionList} + * + * @param id the specified dim id + */ + private void handleExtraDrops(int id) { + if (VoidMinerUtility.extraDropsDimMap.containsKey(id)) { + extraDropMap = VoidMinerUtility.extraDropsDimMap.get(id); + } + } + + /** + * Gets the DropMap of the dim for the specified dim id + * + * @param id the dim number + */ + private void handleModDimDef(int id) { + if (VoidMinerUtility.dropMapsByDimId.containsKey(id)) { + this.dropMap = VoidMinerUtility.dropMapsByDimId.get(id); + } else { + String chunkProviderName = ((ChunkProviderServer) this.getBaseMetaTileEntity() + .getWorld() + .getChunkProvider()).currentChunkProvider.getClass() + .getName(); + + if (VoidMinerUtility.dropMapsByChunkProviderName.containsKey(chunkProviderName)) { + this.dropMap = VoidMinerUtility.dropMapsByChunkProviderName.get(chunkProviderName); + } + } + } + + /** + * Computes first the ores related to the dim the VM is in, then the ores added manually, then it computes the + * totalWeight for normalisation + */ + private void calculateDropMap() { + this.dropMap = new VoidMinerUtility.DropMap(); + this.extraDropMap = new VoidMinerUtility.DropMap(); + int id = this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId; + this.handleModDimDef(id); + this.handleExtraDrops(id); + this.totalWeight = dropMap.getTotalWeight() + extraDropMap.getTotalWeight(); + } + + /** + * Output logic of the VM + */ + private void handleOutputs() { + final List inputOres = this.getStoredInputs() + .stream() + .filter(GTUtility::isOre) + .collect(Collectors.toList());; + final ItemStack output = this.nextOre(); + output.stackSize = multiplier; + if (inputOres.size() == 0 || this.mBlacklist && inputOres.stream() + .noneMatch(is -> GTUtility.areStacksEqual(is, output)) + || !this.mBlacklist && inputOres.stream() + .anyMatch(is -> GTUtility.areStacksEqual(is, output))) + this.addOutput(output); + this.updateSlots(); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + this.mBlacklist = !this.mBlacklist; + GTUtility.sendChatToPlayer(aPlayer, "Mode: " + (this.mBlacklist ? "Blacklist" : "Whitelist")); + } +} diff --git a/src/main/java/bwcrossmod/galacticgreg/MTEVoidMiners.java b/src/main/java/bwcrossmod/galacticgreg/MTEVoidMiners.java new file mode 100644 index 0000000000..03caf26a25 --- /dev/null +++ b/src/main/java/bwcrossmod/galacticgreg/MTEVoidMiners.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticgreg; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class MTEVoidMiners { + + public static class VMLUV extends MTEVoidMinerBase { + + public VMLUV(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 1); + } + + public VMLUV(String aName, int tier) { + super(aName, tier); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_UV; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.Europium; + } + + @Override + protected int getCasingTextureIndex() { + return 8; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new VMLUV(this.mName, this.TIER_MULTIPLIER); + } + } + + public static class VMZPM extends MTEVoidMinerBase { + + public VMZPM(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 2); + } + + public VMZPM(String aName, int tier) { + super(aName, tier); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_MiningBlackPlutonium; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.BlackPlutonium; + } + + @Override + protected int getCasingTextureIndex() { + return 179; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new VMZPM(this.mName, this.TIER_MULTIPLIER); + } + } + + public static class VMUV extends MTEVoidMinerBase { + + public VMUV(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 3); + } + + public VMUV(String aName, int tier) { + super(aName, tier); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_MiningNeutronium; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.Neutronium; + } + + @Override + protected int getCasingTextureIndex() { + return 178; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new VMUV(this.mName, this.TIER_MULTIPLIER); + } + } +} diff --git a/src/main/java/bwcrossmod/galacticgreg/VoidMinerUtility.java b/src/main/java/bwcrossmod/galacticgreg/VoidMinerUtility.java new file mode 100644 index 0000000000..b0782f91ae --- /dev/null +++ b/src/main/java/bwcrossmod/galacticgreg/VoidMinerUtility.java @@ -0,0 +1,275 @@ +package bwcrossmod.galacticgreg; + +import static galacticgreg.registry.GalacticGregRegistry.getModContainers; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Predicate; + +import net.minecraft.block.Block; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.common.configs.ConfigHandler; +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.oregen.BWOreLayer; +import cpw.mods.fml.common.registry.GameRegistry; +import galacticgreg.GalacticGreg; +import galacticgreg.WorldgenOreLayerSpace; +import galacticgreg.WorldgenOreSmallSpace; +import galacticgreg.api.ModContainer; +import galacticgreg.api.ModDimensionDef; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ISubTagContainer; +import gregtech.api.util.GTUtility; +import gregtech.common.WorldgenGTOreLayer; +import gregtech.common.WorldgenGTOreSmallPieces; + +public class VoidMinerUtility { + + public static final FluidStack[] NOBLE_GASSES = { WerkstoffLoader.Neon.getFluidOrGas(1), + WerkstoffLoader.Krypton.getFluidOrGas(1), WerkstoffLoader.Xenon.getFluidOrGas(1), + WerkstoffLoader.Oganesson.getFluidOrGas(1) }; + public static final int[] NOBEL_GASSES_MULTIPLIER = { 4, 8, 16, 64 }; + + public static class DropMap { + + private float totalWeight; + private final Map internalMap; + + public DropMap() { + internalMap = new HashMap<>(); + totalWeight = 0; + } + + /** + * Method used to add an ore to the DropMap + * + * @param weight the non normalised weight + * @param isBWOres true for BW ores, false for GT ores + */ + public void addDrop(int meta, float weight, boolean isBWOres) { + if (isBWOres) { + addDrop(WerkstoffLoader.BWOres, meta, weight); + } else { + addDrop(GregTechAPI.sBlockOres1, meta, weight); + } + } + + /** + * Method used to add any item to the DropMap. Will be blocked if blacklisted. + * + * @param weight the non normalised weight + */ + public void addDrop(Block block, int meta, float weight) { + if (ConfigHandler.voidMinerBlacklist.contains( + String.format( + "%s:%d", + GameRegistry.findUniqueIdentifierFor(block) + .toString(), + meta))) + return; + Item item = Item.getItemFromBlock(block); + addDrop(item, meta, weight); + } + + /** + * Method used to add any item to the DropMap. Will be blocked if blacklisted. + * + * @param weight the non normalised weight + */ + public void addDrop(ItemStack itemStack, float weight) { + Item item = itemStack.getItem(); + int meta = Items.feather.getDamage(itemStack); + if (ConfigHandler.voidMinerBlacklist.contains( + String.format( + "%s:%d", + GameRegistry.findUniqueIdentifierFor(Block.getBlockFromItem(item)) + .toString(), + meta))) + return; + addDrop(item, meta, weight); + } + + private void addDrop(Item item, int meta, float weight) { + GTUtility.ItemId ore = GTUtility.ItemId.createNoCopy(item, meta, null); + internalMap.merge(ore, weight, Float::sum); + totalWeight += weight; + } + + public float getTotalWeight() { + return totalWeight; + } + + public Map getInternalMap() { + return internalMap; + } + } + + public static final Map dropMapsByDimId = new HashMap<>(); + public static final Map dropMapsByChunkProviderName = new HashMap<>(); + public static final Map extraDropsDimMap = new HashMap<>(); + + // Adds tellurium to OW to ensure a way to get it, as it's used in Magneto Resonatic + // Dust and Circuit Compound MK3 Dust + static { + addMaterialToDimensionList(0, Materials.Tellurium, 8.0f); + } + + /** + * Computes the ores of the dims + */ + public static void generateDropMaps() { + // vanilla dims + dropMapsByDimId.put(-1, getDropMapVanilla(-1)); + dropMapsByDimId.put(0, getDropMapVanilla(0)); + dropMapsByDimId.put(1, getDropMapVanilla(1)); + // Twilight Forest + dropMapsByDimId.put(7, getDropMapVanilla(7)); + + // ross dims + dropMapsByDimId.put(ConfigHandler.ross128BID, getDropMapRoss(ConfigHandler.ross128BID)); + dropMapsByDimId.put(ConfigHandler.ross128BAID, getDropMapRoss(ConfigHandler.ross128BAID)); + + // other space dims + for (ModContainer modContainer : getModContainers()) { + for (ModDimensionDef dimDef : modContainer.getDimensionList()) { + dropMapsByChunkProviderName.put(dimDef.getChunkProviderName(), getDropMapSpace(dimDef)); + } + } + } + + /** + * Method to generate a DropMap that contains ores of a vanilla GT worldgen + */ + private static DropMap getDropMapVanilla(int dimId) { + DropMap dropMap = new DropMap(); + + // Ore Veins + Predicate oreLayerPredicate = makeOreLayerPredicate(dimId); + WorldgenGTOreLayer.sList.stream() + .filter(gt_worldgen -> gt_worldgen.mEnabled && oreLayerPredicate.test(gt_worldgen)) + .forEach(element -> { + dropMap.addDrop(element.mPrimaryMeta, element.mWeight, false); + dropMap.addDrop(element.mSecondaryMeta, element.mWeight, false); + dropMap.addDrop(element.mSporadicMeta, element.mWeight / 8f, false); + dropMap.addDrop(element.mBetweenMeta, element.mWeight / 8f, false); + }); + + // Small Ores + Predicate smallOresPredicate = makeSmallOresPredicate(dimId); + WorldgenGTOreSmallPieces.sList.stream() + .filter(gt_worldgen -> gt_worldgen.mEnabled && smallOresPredicate.test(gt_worldgen)) + .forEach(element -> dropMap.addDrop(element.mMeta, element.mAmount, false)); + return dropMap; + } + + /** + * Makes a predicate for the GT normal ore veins worldgen + * + * @return the predicate + */ + private static Predicate makeOreLayerPredicate(int dimensionId) { + return switch (dimensionId) { + case -1 -> gt_worldgen -> gt_worldgen.mNether; + case 0 -> gt_worldgen -> gt_worldgen.mOverworld; + case 1 -> gt_worldgen -> gt_worldgen.mEnd || gt_worldgen.mEndAsteroid; + case 7 -> gt_worldgen -> gt_worldgen.twilightForest; + default -> throw new IllegalStateException(); + }; + } + + /** + * Makes a predicate for the GT normal small ore worldgen + * + * @return the predicate + */ + private static Predicate makeSmallOresPredicate(int dimensionId) { + return switch (dimensionId) { + case -1 -> gt_worldgen -> gt_worldgen.mNether; + case 0 -> gt_worldgen -> gt_worldgen.mOverworld; + case 1 -> gt_worldgen -> gt_worldgen.mEnd; + case 7 -> gt_worldgen -> gt_worldgen.twilightForest; + default -> throw new IllegalStateException(); + }; + } + + /** + * Create a DropMap that contains ores of Ross dims + * + * @param aID dim id of Ross128b or Ross128ba + */ + private static DropMap getDropMapRoss(int aID) { + DropMap dropMap = new DropMap(); + for (BWOreLayer oreLayer : BWOreLayer.sList) { + if (oreLayer.mEnabled && oreLayer.isGenerationAllowed("", aID, 0)) { + List data = oreLayer.getStacks(); + dropMap.addDrop(data.get(0), oreLayer.mWeight); + dropMap.addDrop(data.get(1), oreLayer.mWeight); + dropMap.addDrop(data.get(2), oreLayer.mWeight / 8f); + dropMap.addDrop(data.get(3), oreLayer.mWeight / 8f); + } + } + return dropMap; + } + + /** + * Create a DropMap contains the ores from the galacticGreg space worldgen corresponding to the target dim + * + * @param finalDef ModDimensionDef corresponding to the target dim + */ + private static DropMap getDropMapSpace(ModDimensionDef finalDef) { + DropMap dropMap = new DropMap(); + + // Normal Ore Veins + GalacticGreg.oreVeinWorldgenList.stream() + .filter( + gt_worldgen -> gt_worldgen.mEnabled && gt_worldgen instanceof WorldgenOreLayerSpace oreLayerSpace + && oreLayerSpace.isEnabledForDim(finalDef)) + .map(gt_worldgen -> (WorldgenOreLayerSpace) gt_worldgen) + .forEach(element -> { + dropMap.addDrop(element.mPrimaryMeta, element.mWeight, false); + dropMap.addDrop(element.mSecondaryMeta, element.mWeight, false); + dropMap.addDrop(element.mSporadicMeta, element.mWeight / 8f, false); + dropMap.addDrop(element.mBetweenMeta, element.mWeight / 8f, false); + }); + + // Normal Small Ores + GalacticGreg.smallOreWorldgenList.stream() + .filter( + gt_worldgen -> gt_worldgen.mEnabled && gt_worldgen instanceof WorldgenOreSmallSpace oreSmallPiecesSpace + && oreSmallPiecesSpace.isEnabledForDim(finalDef)) + .map(gt_worldgen -> (WorldgenOreSmallSpace) gt_worldgen) + .forEach(element -> dropMap.addDrop(element.mMeta, element.mAmount, false)); + return dropMap; + } + + public static void addBlockToDimensionList(int dimId, Block block, int meta, float weight) { + if (!extraDropsDimMap.containsKey(dimId)) { + extraDropsDimMap.put(dimId, new DropMap()); + } + extraDropsDimMap.get(dimId) + .addDrop(block, meta, weight); + } + + /** + * Public method giving other mods the ability to add manually a material with an ore version into the external + * dropMap for a specified dim id + * + * @param DimensionID the dim id targeted + * @param Material the material with an ore version + * @param weight the non normalised version of the given weight + */ + public static void addMaterialToDimensionList(int DimensionID, ISubTagContainer Material, float weight) { + if (Material instanceof Materials gtMaterial) { + addBlockToDimensionList(DimensionID, GregTechAPI.sBlockOres1, gtMaterial.mMetaItemSubID, weight); + } else if (Material instanceof Werkstoff werkstoff) { + addBlockToDimensionList(DimensionID, WerkstoffLoader.BWOres, werkstoff.getmID(), weight); + } + } +} diff --git a/src/main/java/bwcrossmod/galacticraft/GalacticraftProxy.java b/src/main/java/bwcrossmod/galacticraft/GalacticraftProxy.java new file mode 100644 index 0000000000..d6ee41c48b --- /dev/null +++ b/src/main/java/bwcrossmod/galacticraft/GalacticraftProxy.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticraft; + +import net.minecraftforge.common.MinecraftForge; + +import bartworks.API.SideReference; +import bartworks.common.configs.ConfigHandler; +import bartworks.system.oregen.BWWorldGenRoss128b; +import bartworks.system.oregen.BWWorldGenRoss128ba; +import bwcrossmod.galacticraft.atmosphere.BWAtmosphereManager; +import bwcrossmod.galacticraft.solarsystems.Ross128SolarSystem; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; + +public class GalacticraftProxy { + + private GalacticraftProxy() {} + + public static void postInit(FMLPostInitializationEvent e) { + if (SideReference.Side.Server || SideReference.EffectiveSide.Server) { + GalacticraftProxy.serverPostInit(e); + } else { + GalacticraftProxy.clientPostInit(e); + } + GalacticraftProxy.commonPostInit(e); + } + + public static void preInit(FMLPreInitializationEvent e) { + if (SideReference.Side.Server || SideReference.EffectiveSide.Server) { + GalacticraftProxy.serverpreInit(e); + } else { + GalacticraftProxy.clientpreInit(e); + } + GalacticraftProxy.commonpreInit(e); + } + + private static void serverpreInit(FMLPreInitializationEvent e) {} + + private static void clientpreInit(FMLPreInitializationEvent e) {} + + private static void commonpreInit(FMLPreInitializationEvent e) { + BWWorldGenRoss128b.initOres(); + BWWorldGenRoss128ba.init_Ores(); + MinecraftForge.EVENT_BUS.register(BWAtmosphereManager.INSTANCE); + } + + public static void init(FMLInitializationEvent e) { + if (SideReference.Side.Server || SideReference.EffectiveSide.Server) { + GalacticraftProxy.serverInit(e); + } else { + GalacticraftProxy.clientInit(e); + } + GalacticraftProxy.commonInit(e); + } + + private static void serverInit(FMLInitializationEvent e) {} + + private static void clientInit(FMLInitializationEvent e) {} + + private static void commonInit(FMLInitializationEvent e) { + if (ConfigHandler.Ross128Enabled) Ross128SolarSystem.init(); + } + + private static void serverPostInit(FMLPostInitializationEvent e) {} + + private static void clientPostInit(FMLPostInitializationEvent e) {} + + private static void commonPostInit(FMLPostInitializationEvent e) {} +} diff --git a/src/main/java/bwcrossmod/galacticraft/PlanetsHelperClass.java b/src/main/java/bwcrossmod/galacticraft/PlanetsHelperClass.java new file mode 100644 index 0000000000..eecd5bd8fe --- /dev/null +++ b/src/main/java/bwcrossmod/galacticraft/PlanetsHelperClass.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticraft; + +import net.minecraft.entity.player.EntityPlayerMP; + +import bartworks.common.configs.ConfigHandler; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityEntryPod; +import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; + +public class PlanetsHelperClass { + + public static EntityLanderBase getLanderType(EntityPlayerMP player) { + return switch (ConfigHandler.landerType) { + case 1 -> new EntityLander(player); + case 2 -> new EntityLandingBalloons(player); + default -> new EntityEntryPod(player); + }; + } +} diff --git a/src/main/java/bwcrossmod/galacticraft/UniversalTeleportType.java b/src/main/java/bwcrossmod/galacticraft/UniversalTeleportType.java new file mode 100644 index 0000000000..4507cadca2 --- /dev/null +++ b/src/main/java/bwcrossmod/galacticraft/UniversalTeleportType.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticraft; + +import static gregtech.api.enums.Mods.GalacticraftMars; + +import java.util.Random; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; + +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.ITeleportType; +import micdoodle8.mods.galacticraft.core.entities.EntityLander; +import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; +import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; + +public class UniversalTeleportType implements ITeleportType { + + @Override + public boolean useParachute() { + return false; + } + + @Override + public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) { + return this.getEntitySpawnLocation(world, player); + } + + @Override + public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) { + if (entity instanceof EntityPlayerMP) { + GCPlayerStats stats = GCPlayerStats.get((EntityPlayerMP) entity); + return new Vector3(stats.coordsTeleportedFromX, 500D, stats.coordsTeleportedFromZ); + } + return new Vector3(entity.posX, 500D, entity.posZ); + } + + @Override + public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) { + return null; + } + + @Override + public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) { + if (ridingAutoRocket) return; + if (player != null && GCPlayerStats.get(player).teleportCooldown <= 0) { + if (player.capabilities.isFlying) { + player.capabilities.isFlying = false; + } + + EntityLanderBase elb; + if (GalacticraftMars.isModLoaded()) elb = PlanetsHelperClass.getLanderType(player); + else elb = new EntityLander(player); + + if (!newWorld.isRemote) { + newWorld.spawnEntityInWorld(elb); + } + GCPlayerStats.get(player).teleportCooldown = 10; + } + } + + @Override + public void setupAdventureSpawn(EntityPlayerMP player) {} +} diff --git a/src/main/java/bwcrossmod/galacticraft/atmosphere/BWAtmosphereManager.java b/src/main/java/bwcrossmod/galacticraft/atmosphere/BWAtmosphereManager.java new file mode 100644 index 0000000000..0bae6f4546 --- /dev/null +++ b/src/main/java/bwcrossmod/galacticraft/atmosphere/BWAtmosphereManager.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticraft.atmosphere; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import com.google.common.collect.ArrayListMultimap; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.util.Pair; +import bwcrossmod.BartWorksCrossmod; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ISubTagContainer; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.world.IAtmosphericGas; + +public final class BWAtmosphereManager { + + private static final Map COEFFICIENT_MAP = new HashMap<>(); + + private BWAtmosphereManager() { + BWAtmosphereManager.COEFFICIENT_MAP.put(1, new Integer[] { 100 }); + BWAtmosphereManager.COEFFICIENT_MAP.put(2, new Integer[] { 70, 30 }); + BWAtmosphereManager.COEFFICIENT_MAP.put(3, new Integer[] { 60, 25, 15 }); + BWAtmosphereManager.COEFFICIENT_MAP.put(4, new Integer[] { 50, 25, 15, 10 }); + BWAtmosphereManager.COEFFICIENT_MAP.put(5, new Integer[] { 45, 25, 15, 10, 5 }); + BWAtmosphereManager.COEFFICIENT_MAP.put(6, new Integer[] { 45, 20, 15, 10, 5, 5 }); + BWAtmosphereManager.COEFFICIENT_MAP.put(7, new Integer[] { 40, 20, 15, 10, 5, 5, 5 }); + BWAtmosphereManager.COEFFICIENT_MAP.put(8, new Integer[] { 35, 20, 15, 10, 5, 5, 5, 5 }); + BWAtmosphereManager.COEFFICIENT_MAP.put(9, new Integer[] { 35, 15, 15, 10, 5, 5, 5, 5, 5 }); + } + + public static final BWAtmosphereManager INSTANCE = new BWAtmosphereManager(); + + private static final ArrayListMultimap> gasConcentration = ArrayListMultimap + .create(); + + public static List> getGasFromWorldID(int worldID) { + return BWAtmosphereManager.gasConcentration.get(worldID); + } + + public static void removeGasFromWorld(int worldID, ISubTagContainer gas) { + for (Pair pair : BWAtmosphereManager.gasConcentration.get(worldID)) { + if (pair.getKey() + .equals(gas)) { + BWAtmosphereManager.gasConcentration.get(worldID) + .remove(pair); + return; + } + } + } + + public static void addGasToWorld(int worldID, ISubTagContainer gas, int amount) { + Pair toadd = new Pair<>(gas, amount); + BWAtmosphereManager.gasConcentration.put(worldID, toadd); + } + + public static void addGasToWorld(int worldID, Pair toPut) { + BWAtmosphereManager.gasConcentration.put(worldID, toPut); + } + + @SafeVarargs + public static void addGasToWorld(int worldID, Pair... toPut) { + Arrays.stream(toPut) + .forEach(toadd -> BWAtmosphereManager.gasConcentration.put(worldID, toadd)); + } + + private static boolean addGCGasToWorld(int worldID, IAtmosphericGas gas, int aNumber, int aMaxNumber) { + if (IAtmosphericGas.CO2.equals(gas)) { + BWAtmosphereManager.addGasToWorld( + worldID, + Materials.CarbonDioxide, + BWAtmosphereManager.COEFFICIENT_MAP.get(aMaxNumber)[aNumber]); + return true; + } + String name = gas.toString(); + name = name.charAt(0) + name.substring(1) + .toLowerCase(Locale.US); + ISubTagContainer mat = Materials.get(name); + if (mat == Materials._NULL) { + mat = WerkstoffLoader.getWerkstoff(name); + } + if (mat == Werkstoff.default_null_Werkstoff) { + return false; + } + BWAtmosphereManager.addGasToWorld(worldID, mat, BWAtmosphereManager.COEFFICIENT_MAP.get(aMaxNumber)[aNumber]); + return true; + } + + @SubscribeEvent + public void gcAutoRegister(GalaxyRegistry.PlanetRegisterEvent event) { + CelestialBody planet = GalaxyRegistry.getRegisteredPlanets() + .get(event.planetName); + for (int i = 0; i < planet.atmosphere.size(); i++) { + if (!BWAtmosphereManager + .addGCGasToWorld(planet.getDimensionID(), planet.atmosphere.get(i), i, planet.atmosphere.size())) + BartWorksCrossmod.LOGGER.warn( + "Unidentified Fluid (" + planet.atmosphere.get(i) + + ") in the Atmosphere of: " + + planet.getLocalizedName()); + } + } +} diff --git a/src/main/java/bwcrossmod/galacticraft/planets/AbstractWorldProviderSpace.java b/src/main/java/bwcrossmod/galacticraft/planets/AbstractWorldProviderSpace.java new file mode 100644 index 0000000000..7f69e87cfb --- /dev/null +++ b/src/main/java/bwcrossmod/galacticraft/planets/AbstractWorldProviderSpace.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticraft.planets; + +import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; +import micdoodle8.mods.galacticraft.api.world.IExitHeight; +import micdoodle8.mods.galacticraft.api.world.ISolarLevel; + +public abstract class AbstractWorldProviderSpace extends WorldProviderSpace implements IExitHeight, ISolarLevel { + + @Override + public boolean canRainOrSnow() { + return false; + } + + @Override + public String getDimensionName() { + return this.getCelestialBody() + .getLocalizedName(); + } + + @Override + public boolean hasSunset() { + return true; + } +} diff --git a/src/main/java/bwcrossmod/galacticraft/planets/ross128b/ChunkProviderRoss128b.java b/src/main/java/bwcrossmod/galacticraft/planets/ross128b/ChunkProviderRoss128b.java new file mode 100644 index 0000000000..7682e61d09 --- /dev/null +++ b/src/main/java/bwcrossmod/galacticraft/planets/ross128b/ChunkProviderRoss128b.java @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticraft.planets.ross128b; + +import static gregtech.api.enums.Mods.Thaumcraft; +import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.ICE; +import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAKE; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFalling; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.biome.BiomeGenBase.SpawnListEntry; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.gen.ChunkProviderGenerate; +import net.minecraft.world.gen.MapGenBase; +import net.minecraft.world.gen.MapGenCaves; +import net.minecraft.world.gen.MapGenRavine; +import net.minecraft.world.gen.feature.WorldGenLakes; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.terraingen.PopulateChunkEvent; +import net.minecraftforge.event.terraingen.TerrainGen; + +import bartworks.common.configs.ConfigHandler; +import bartworks.system.oregen.BWWordGenerator; +import bartworks.system.worldgen.MapGenRuins; +import bwcrossmod.thaumcraft.util.ThaumcraftHandler; +import gregtech.api.objects.XSTR; + +public class ChunkProviderRoss128b extends ChunkProviderGenerate { + + XSTR rand = new XSTR(); + private BiomeGenBase[] biomesForGeneration; + public static final BWWordGenerator BWOreGen = new BWWordGenerator(); + private final World worldObj; + private final MapGenBase caveGenerator = new MapGenCaves(); + private final MapGenBase ravineGenerator = new MapGenRavine(); + private final MapGenRuins.RuinsBase ruinsBase = new MapGenRuins.RuinsBase(); + + public ChunkProviderRoss128b(World par1World, long seed, boolean mapFeaturesEnabled) { + super(par1World, seed, mapFeaturesEnabled); + this.worldObj = par1World; + } + + @Override + public List getPossibleCreatures(EnumCreatureType p_73155_1_, int p_73155_2_, int p_73155_3_, + int p_73155_4_) { + return null; + } + + @Override + public Chunk provideChunk(int p_73154_1_, int p_73154_2_) { + this.rand.setSeed(p_73154_1_ * 341873128712L + p_73154_2_ * 132897987541L); + Block[] ablock = new Block[65536]; + byte[] abyte = new byte[65536]; + this.func_147424_a(p_73154_1_, p_73154_2_, ablock); + this.biomesForGeneration = this.worldObj.getWorldChunkManager() + .loadBlockGeneratorData(this.biomesForGeneration, p_73154_1_ * 16, p_73154_2_ * 16, 16, 16); + for (int i = 0; i < this.biomesForGeneration.length; i++) { + BiomeGenBase biomeGenBase = this.biomesForGeneration[i]; + if (biomeGenBase.biomeID == BiomeGenBase.mushroomIsland.biomeID) { + this.biomesForGeneration[i] = BiomeGenBase.taiga; + } else if (biomeGenBase.biomeID == BiomeGenBase.mushroomIslandShore.biomeID) { + this.biomesForGeneration[i] = BiomeGenBase.stoneBeach; + } + if (Thaumcraft.isModLoaded()) { + if (ThaumcraftHandler.isTaintBiome(biomeGenBase.biomeID)) + this.biomesForGeneration[i] = BiomeGenBase.taiga; + else if (ConfigHandler.disableMagicalForest + && ThaumcraftHandler.isMagicalForestBiome(biomeGenBase.biomeID)) + this.biomesForGeneration[i] = BiomeGenBase.birchForest; + } + } + this.replaceBlocksForBiome(p_73154_1_, p_73154_2_, ablock, abyte, this.biomesForGeneration); + this.caveGenerator.func_151539_a(this, this.worldObj, p_73154_1_, p_73154_2_, ablock); + this.ravineGenerator.func_151539_a(this, this.worldObj, p_73154_1_, p_73154_2_, ablock); + + Chunk chunk = new Chunk(this.worldObj, ablock, abyte, p_73154_1_, p_73154_2_); + byte[] abyte1 = chunk.getBiomeArray(); + + for (int k = 0; k < abyte1.length; ++k) { + abyte1[k] = (byte) this.biomesForGeneration[k].biomeID; + } + + chunk.generateSkylightMap(); + return chunk; + } + + @Override + public void populate(IChunkProvider p_73153_1_, int p_73153_2_, int p_73153_3_) { + BlockFalling.fallInstantly = true; + int k = p_73153_2_ * 16; + int l = p_73153_3_ * 16; + BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(k + 16, l + 16); + this.rand.setSeed(this.worldObj.getSeed()); + if (p_73153_2_ % 4 == 0 || p_73153_3_ % 4 == 0) { + long i1 = this.rand.nextLong() / 2L * 2L + 1L; + long j1 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed(p_73153_2_ * i1 + p_73153_3_ * j1 ^ this.worldObj.getSeed()); + } + + MinecraftForge.EVENT_BUS + .post(new PopulateChunkEvent.Pre(p_73153_1_, this.worldObj, this.rand, p_73153_2_, p_73153_3_, false)); + + int x1; + int y1; + int z1; + if (biomegenbase != BiomeGenBase.desert && biomegenbase != BiomeGenBase.desertHills + && TerrainGen.populate(p_73153_1_, this.worldObj, this.rand, p_73153_2_, p_73153_3_, false, LAKE)) { + x1 = k + this.rand.nextInt(16) + 8; + y1 = this.rand.nextInt(256); + z1 = l + this.rand.nextInt(16) + 8; + int rni = this.rand.nextInt(8); + if (rni == 0) new WorldGenLakes(Blocks.ice).generate(this.worldObj, this.rand, x1, y1, z1); + else if (rni == 4) new WorldGenLakes(Blocks.water).generate(this.worldObj, this.rand, x1, y1, z1); + } + if (biomegenbase != BiomeGenBase.ocean && biomegenbase != BiomeGenBase.deepOcean + && biomegenbase != BiomeGenBase.river + && biomegenbase != BiomeGenBase.frozenOcean + && biomegenbase != BiomeGenBase.frozenRiver + && this.rand.nextInt(ConfigHandler.ross128bRuinChance) == 0) { + x1 = k + this.rand.nextInt(16) + 3; + y1 = this.rand.nextInt(256); + z1 = l + this.rand.nextInt(16) + 3; + this.ruinsBase.generate(this.worldObj, this.rand, x1, y1, z1); + } + + biomegenbase.decorate(this.worldObj, this.rand, k, l); + + k += 8; + l += 8; + + boolean doGen = TerrainGen.populate(p_73153_1_, this.worldObj, this.rand, p_73153_2_, p_73153_3_, false, ICE); + for (x1 = 0; doGen && x1 < 16; ++x1) { + for (y1 = 0; y1 < 16; ++y1) { + z1 = this.worldObj.getPrecipitationHeight(k + x1, l + y1); + + if (this.worldObj.isBlockFreezable(x1 + k, z1 - 1, y1 + l)) { + this.worldObj.setBlock(x1 + k, z1 - 1, y1 + l, Blocks.ice, 0, 2); + } + + if (this.worldObj.func_147478_e(x1 + k, z1, y1 + l, true)) { + this.worldObj.setBlock(x1 + k, z1, y1 + l, Blocks.snow_layer, 0, 2); + } + } + } + + BWOreGen.generate(this.rand, p_73153_2_, p_73153_3_, this.worldObj, this, this); + MinecraftForge.EVENT_BUS + .post(new PopulateChunkEvent.Post(p_73153_1_, this.worldObj, this.rand, p_73153_2_, p_73153_3_, false)); + + BlockFalling.fallInstantly = false; + } + + @Override + public void recreateStructures(int p_82695_1_, int p_82695_2_) {} + + @Override + public void replaceBlocksForBiome(int p_147422_1_, int p_147422_2_, Block[] blocks, byte[] metas, + BiomeGenBase[] p_147422_5_) { + super.replaceBlocksForBiome(p_147422_1_, p_147422_2_, blocks, metas, p_147422_5_); + for (int i = 0; i < blocks.length; i++) { + if (blocks[i] == Blocks.grass) { + blocks[i] = Blocks.dirt; + metas[i] = 2; + } + } + } +} diff --git a/src/main/java/bwcrossmod/galacticraft/planets/ross128b/SkyProviderRoss128b.java b/src/main/java/bwcrossmod/galacticraft/planets/ross128b/SkyProviderRoss128b.java new file mode 100644 index 0000000000..9a4fe472b3 --- /dev/null +++ b/src/main/java/bwcrossmod/galacticraft/planets/ross128b/SkyProviderRoss128b.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticraft.planets.ross128b; + +import net.minecraft.util.ResourceLocation; + +import bwcrossmod.BartWorksCrossmod; + +public class SkyProviderRoss128b { + + // ASM enables this texture + public static final ResourceLocation sunTex = new ResourceLocation( + BartWorksCrossmod.MOD_ID + ":galacticraft/Ross128b/World/SunRoss128.png"); +} diff --git a/src/main/java/bwcrossmod/galacticraft/planets/ross128b/WorldProviderRoss128b.java b/src/main/java/bwcrossmod/galacticraft/planets/ross128b/WorldProviderRoss128b.java new file mode 100644 index 0000000000..a21cbd0cbf --- /dev/null +++ b/src/main/java/bwcrossmod/galacticraft/planets/ross128b/WorldProviderRoss128b.java @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticraft.planets.ross128b; + +import net.minecraft.util.MathHelper; +import net.minecraft.util.Vec3; +import net.minecraft.world.biome.WorldChunkManager; +import net.minecraft.world.chunk.IChunkProvider; + +import bwcrossmod.galacticraft.planets.AbstractWorldProviderSpace; +import bwcrossmod.galacticraft.solarsystems.Ross128SolarSystem; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.vector.Vector3; + +public class WorldProviderRoss128b extends AbstractWorldProviderSpace { + + @Override + public boolean canRespawnHere() { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public Vec3 getFogColor(float cy, float noidea) { + float angle = MathHelper.cos(cy * (float) Math.PI * 2.0F) * 2.0F + 0.5F; + + if (angle < 0.0F) { + angle = 0.0F; + } + + if (angle > 1.0F) { + angle = 1.0F; + } + + float red = 200 / 255f; + float green = 80 / 255f; + float blue = 0.0F; + red *= angle * 0.94F + 0.06F; + green *= angle * 0.94F + 0.06F; + return Vec3.createVectorHelper(red, green, blue); + } + + @Override + public Vector3 getFogColor() { + // unused + return null; + } + + @Override + public float getSunBrightness(float par1) { + return super.getSunBrightness(par1) * 0.975f; + } + + @Override + public float calculateCelestialAngle(long par1, float par3) { + return super.calculateCelestialAngle(par1, par3); + } + + @Override + public Vector3 getSkyColor() { + float red = 200 / 255f; + float green = 120 / 255f; + float blue = 0.0F; + return new Vector3(red, green, blue); + } + + @Override + public long getDayLength() { + return (long) (24000 * 9.9f); + } + + @Override + public Class getChunkProviderClass() { + return ChunkProviderRoss128b.class; + } + + @Override + public Class getWorldChunkManagerClass() { + return WorldChunkManager.class; + } + + @Override + public float getGravity() { + return -0.0035F; + } + + @Override + public double getMeteorFrequency() { + return 0D; + } + + @Override + public double getFuelUsageMultiplier() { + return 1.35D; + } + + @Override + public boolean canSpaceshipTierPass(int tier) { + return Ross128SolarSystem.Ross128b.getTierRequirement() <= tier; + } + + @Override + public float getFallDamageModifier() { + return 1.35F; + } + + @Override + public float getSoundVolReductionAmount() { + return 1F; + } + + @Override + public float getThermalLevelModifier() { + return 0.01f; + } + + @Override + public float getWindLevel() { + return 1.35f; + } + + @Override + public CelestialBody getCelestialBody() { + return Ross128SolarSystem.Ross128b; + } + + @Override + public double getYCoordinateToTeleport() { + return 500D; + } + + @Override + public double getSolarEnergyMultiplier() { + return 1.38D; + } + + @Override + public boolean hasBreathableAtmosphere() { + return true; + } +} diff --git a/src/main/java/bwcrossmod/galacticraft/planets/ross128ba/ChunkProviderRoss128ba.java b/src/main/java/bwcrossmod/galacticraft/planets/ross128ba/ChunkProviderRoss128ba.java new file mode 100644 index 0000000000..67b776f473 --- /dev/null +++ b/src/main/java/bwcrossmod/galacticraft/planets/ross128ba/ChunkProviderRoss128ba.java @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticraft.planets.ross128ba; + +import java.util.Arrays; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFalling; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.IChunkProvider; + +import bartworks.util.NoiseUtil.BartsNoise; +import bwcrossmod.galacticraft.planets.ross128b.ChunkProviderRoss128b; +import gregtech.api.objects.XSTR; +import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; +import micdoodle8.mods.galacticraft.core.blocks.GCBlocks; +import micdoodle8.mods.galacticraft.core.world.gen.BiomeGenBaseMoon; +import micdoodle8.mods.galacticraft.core.world.gen.ChunkProviderMoon; +import micdoodle8.mods.galacticraft.core.world.gen.MapGenCavesMoon; + +public class ChunkProviderRoss128ba extends ChunkProviderMoon { + + private final XSTR rand = new XSTR(); + private final World worldObj; + private BiomeGenBase[] biomesForGeneration; + private final MapGenBaseMeta caveGenerator; + + public ChunkProviderRoss128ba(World world, long seed, boolean mapFeaturesEnabled) { + super(world, seed, mapFeaturesEnabled); + this.biomesForGeneration = new BiomeGenBase[] { BiomeGenBaseMoon.moonFlat }; + this.caveGenerator = new MapGenCavesMoon(); + this.worldObj = world; + } + + @Override + public Chunk provideChunk(int cx, int cz) { + this.rand.setSeed(cx * 341873128712L + cz * 132897987541L); + Block[] ids = new Block[65536]; + byte[] meta = new byte[65536]; + Arrays.fill(ids, Blocks.air); + this.generateTerrain(cx, cz, ids, meta); + this.biomesForGeneration = this.worldObj.getWorldChunkManager() + .loadBlockGeneratorData(this.biomesForGeneration, cx * 16, cz * 16, 16, 16); + this.createCraters(cx, cz, ids, meta); + this.replaceBlocksForBiome(cx, cz, ids, meta, this.biomesForGeneration); + this.caveGenerator.generate(this, this.worldObj, cx, cz, ids, meta); + Chunk Chunk = new Chunk(this.worldObj, ids, meta, cx, cz); + Chunk.generateSkylightMap(); + return Chunk; + } + + @Override + public void decoratePlanet(World par1World, Random par2Random, int par3, int par4) {} + + @Override + public void populate(IChunkProvider par1IChunkProvider, int par2, int par3) { + super.populate(par1IChunkProvider, par2, par3); + BlockFalling.fallInstantly = true; + ChunkProviderRoss128b.BWOreGen.generate(this.rand, par2, par3, this.worldObj, this, this); + BlockFalling.fallInstantly = false; + } + + private int getIndex(int x, int y, int z) { + return (x * 16 + z) * 256 + y; + } + + final Block lowerBlockID = GCBlocks.blockMoon; + final BartsNoise noiseGen = new BartsNoise(2, 0.008F, 1D, System.nanoTime()); + final BartsNoise noiseGen2 = new BartsNoise(2, 0.01F, 1D, System.nanoTime()); + final BartsNoise noiseGen3 = new BartsNoise(2, 0.002F, 1D, System.nanoTime()); + + @Override + public void generateTerrain(int chunkX, int chunkZ, Block[] idArray, byte[] metaArray) { + for (int x = 0; x < 16; ++x) { + for (int z = 0; z < 16; ++z) { + double d = this.noiseGen.getNoise(x + chunkX * 16, z + chunkZ * 16); + double d2 = this.noiseGen2.getNoise(x + chunkX * 16, z + chunkZ * 16); + double d3 = this.noiseGen3.getCosNoise(x + chunkX * 16, z + chunkZ * 16); + + double yDev = d * 4 + d2 * 2 + d3; + + for (int y = 0; y < 128; ++y) { + if (y < 60.0D + yDev) { + idArray[this.getIndex(x, y, z)] = this.lowerBlockID; + int var10001 = this.getIndex(x, y, z); + metaArray[var10001] = 4; + } + } + } + } + } +} diff --git a/src/main/java/bwcrossmod/galacticraft/planets/ross128ba/WorldProviderRoss128ba.java b/src/main/java/bwcrossmod/galacticraft/planets/ross128ba/WorldProviderRoss128ba.java new file mode 100644 index 0000000000..8acb289c85 --- /dev/null +++ b/src/main/java/bwcrossmod/galacticraft/planets/ross128ba/WorldProviderRoss128ba.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticraft.planets.ross128ba; + +import net.minecraft.world.biome.WorldChunkManager; +import net.minecraft.world.chunk.IChunkProvider; + +import bartworks.util.MathUtils; +import bwcrossmod.galacticraft.planets.AbstractWorldProviderSpace; +import bwcrossmod.galacticraft.solarsystems.Ross128SolarSystem; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.core.world.gen.WorldChunkManagerMoon; + +public class WorldProviderRoss128ba extends AbstractWorldProviderSpace { + + @Override + public Vector3 getFogColor() { + return new Vector3(0, 0, 0); + } + + @Override + public Vector3 getSkyColor() { + return new Vector3(0, 0, 0); + } + + @Override + public long getDayLength() { + return MathUtils.floorLong(24000f * 9.9f / 100f); + } + + @Override + public boolean hasSunset() { + return false; + } + + @Override + public Class getChunkProviderClass() { + return ChunkProviderRoss128ba.class; + } + + @Override + public Class getWorldChunkManagerClass() { + return WorldChunkManagerMoon.class; + } + + @Override + public double getYCoordinateToTeleport() { + return 500; + } + + @Override + public float getGravity() { + return 0.060f; + } + + @Override + public double getMeteorFrequency() { + return 9D; + } + + @Override + public double getFuelUsageMultiplier() { + return 0.7D; + } + + @Override + public boolean canSpaceshipTierPass(int i) { + return i >= Ross128SolarSystem.Ross128ba.getTierRequirement(); + } + + @Override + public float getFallDamageModifier() { + return 0.2f; + } + + @Override + public float getSoundVolReductionAmount() { + return 20f; + } + + @Override + public float getThermalLevelModifier() { + return 0; + } + + @Override + public float getWindLevel() { + return 0; + } + + @Override + public CelestialBody getCelestialBody() { + return Ross128SolarSystem.Ross128ba; + } + + @Override + public double getSolarEnergyMultiplier() { + return 1.9D; + } +} diff --git a/src/main/java/bwcrossmod/galacticraft/solarsystems/Ross128SolarSystem.java b/src/main/java/bwcrossmod/galacticraft/solarsystems/Ross128SolarSystem.java new file mode 100644 index 0000000000..050c26b087 --- /dev/null +++ b/src/main/java/bwcrossmod/galacticraft/solarsystems/Ross128SolarSystem.java @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.galacticraft.solarsystems; + +import static gregtech.api.enums.Mods.GalaxySpace; + +import java.util.Arrays; + +import net.minecraft.util.ResourceLocation; + +import bartworks.common.configs.ConfigHandler; +import bwcrossmod.BartWorksCrossmod; +import bwcrossmod.galacticraft.UniversalTeleportType; +import bwcrossmod.galacticraft.planets.ross128b.WorldProviderRoss128b; +import bwcrossmod.galacticraft.planets.ross128ba.WorldProviderRoss128ba; +import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; +import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; +import micdoodle8.mods.galacticraft.api.galaxies.Moon; +import micdoodle8.mods.galacticraft.api.galaxies.Planet; +import micdoodle8.mods.galacticraft.api.galaxies.SolarSystem; +import micdoodle8.mods.galacticraft.api.galaxies.Star; +import micdoodle8.mods.galacticraft.api.vector.Vector3; +import micdoodle8.mods.galacticraft.api.world.IAtmosphericGas; +import micdoodle8.mods.galacticraft.core.GalacticraftCore; + +public class Ross128SolarSystem { + + public static SolarSystem Ross128System; + public static Star Ross128; + public static Planet Ross128b; + public static Moon Ross128ba; + + private Ross128SolarSystem() {} + + public static void init() { + + Ross128SolarSystem.Ross128System = new SolarSystem("Ross128System", "milkyWay") + .setMapPosition(new Vector3(-0.5D, 0.65D, 0.0D)); + Ross128SolarSystem.Ross128 = (Star) new Star("Ross128").setParentSolarSystem(Ross128SolarSystem.Ross128System) + .setTierRequired(-1); + Ross128SolarSystem.Ross128.setUnreachable(); + Ross128SolarSystem.Ross128 + .setBodyIcon(new ResourceLocation(BartWorksCrossmod.MOD_ID + ":galacticraft/Ross128b/MapObjs/Ross128.png")); + Ross128SolarSystem.Ross128System.setMainStar(Ross128SolarSystem.Ross128); + + Ross128SolarSystem.Ross128b = new Planet("Ross128b").setParentSolarSystem(Ross128SolarSystem.Ross128System); + Ross128SolarSystem.Ross128b.setRingColorRGB(0x9F / 255f, 0x8A / 255f, 0x79 / 255f); + Ross128SolarSystem.Ross128b.setPhaseShift(1.25F); + Ross128SolarSystem.Ross128b.setBodyIcon( + new ResourceLocation(BartWorksCrossmod.MOD_ID + ":galacticraft/Ross128b/MapObjs/Ross128b.png")); + Ross128SolarSystem.Ross128b.setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(0.75F, 1.75F)); + Ross128SolarSystem.Ross128b.setRelativeOrbitTime(0.65F); + Ross128SolarSystem.Ross128b.atmosphere + .addAll(Arrays.asList(IAtmosphericGas.OXYGEN, IAtmosphericGas.NITROGEN, IAtmosphericGas.ARGON)); + Ross128SolarSystem.Ross128b.setDimensionInfo(ConfigHandler.ross128BID, WorldProviderRoss128b.class); + Ross128SolarSystem.Ross128b.setTierRequired(ConfigHandler.ross128btier); + + Ross128SolarSystem.Ross128ba = new Moon("Ross128ba").setParentPlanet(Ross128SolarSystem.Ross128b); + Ross128SolarSystem.Ross128ba.setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(10f, 15f)) + .setRelativeOrbitTime(1 / 0.01F); + Ross128SolarSystem.Ross128ba.setBodyIcon( + new ResourceLocation(BartWorksCrossmod.MOD_ID + ":galacticraft/Ross128b/MapObjs/Ross128ba.png")); + Ross128SolarSystem.Ross128ba.setDimensionInfo(ConfigHandler.ross128BAID, WorldProviderRoss128ba.class); + Ross128SolarSystem.Ross128ba + .setTierRequired(GalaxySpace.isModLoaded() ? Math.min(ConfigHandler.ross128btier + 2, 8) : 3); + + GalaxyRegistry.registerSolarSystem(Ross128SolarSystem.Ross128System); + GalaxyRegistry.registerPlanet(Ross128SolarSystem.Ross128b); + GalaxyRegistry.registerMoon(Ross128SolarSystem.Ross128ba); + GalacticraftRegistry.registerRocketGui( + WorldProviderRoss128b.class, + new ResourceLocation(GalacticraftCore.ASSET_PREFIX, "textures/gui/overworldRocketGui.png")); + GalacticraftRegistry.registerRocketGui( + WorldProviderRoss128ba.class, + new ResourceLocation(GalacticraftCore.ASSET_PREFIX, "textures/gui/moonRocketGui.png")); + GalacticraftRegistry.registerTeleportType(WorldProviderRoss128b.class, new UniversalTeleportType()); + GalacticraftRegistry.registerTeleportType(WorldProviderRoss128ba.class, new UniversalTeleportType()); + } +} diff --git a/src/main/java/bwcrossmod/openComputers/GTNBTDataBase.java b/src/main/java/bwcrossmod/openComputers/GTNBTDataBase.java new file mode 100644 index 0000000000..b03b70b2ba --- /dev/null +++ b/src/main/java/bwcrossmod/openComputers/GTNBTDataBase.java @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.openComputers; + +import net.minecraft.nbt.NBTTagCompound; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; + +public class GTNBTDataBase { + + private static final BiMap tagIdBiMap = HashBiMap.create(); + private static final BiMap GTNBTBIMAP = HashBiMap.create(); + + private static long maxID = Long.MIN_VALUE + 1; + + private final NBTTagCompound tagCompound; + + private final String mDataName; + private final String mDataTitle; + private long id; + + GTNBTDataBase(String mDataName, String mDataTitle, NBTTagCompound tagCompound) { + this.mDataName = mDataName; + this.mDataTitle = mDataTitle; + this.tagCompound = tagCompound; + this.id = GTNBTDataBase.maxID; + GTNBTDataBase.tagIdBiMap.put(tagCompound, this.id); + GTNBTDataBase.GTNBTBIMAP.put(this, this.id); + ++GTNBTDataBase.maxID; + } + + static GTNBTDataBase getGTTagFromId(Long id) { + return GTNBTDataBase.GTNBTBIMAP.inverse() + .get(id); + } + + static Long getIdFromGTTag(GTNBTDataBase tagCompound) { + return GTNBTDataBase.GTNBTBIMAP.get(tagCompound); + } + + static NBTTagCompound getTagFromId(Long id) { + return GTNBTDataBase.tagIdBiMap.inverse() + .get(id); + } + + static Long getIdFromTag(NBTTagCompound tagCompound) { + return GTNBTDataBase.tagIdBiMap.get(tagCompound); + } + + public NBTTagCompound getTagCompound() { + return this.tagCompound; + } + + public String getmDataName() { + return this.mDataName; + } + + static long getMaxID() { + return GTNBTDataBase.maxID; + } + + public String getmDataTitle() { + return this.mDataTitle; + } + + public long getId() { + return this.id; + } + + public void setId(long id) { + this.id = id; + } + + private GTNBTDataBase(NBTTagCompound tagCompound, String mDataName, String mDataTitle, long id) { + this.tagCompound = tagCompound; + this.mDataName = mDataName; + this.mDataTitle = mDataTitle; + this.id = id; + } + + public static GTNBTDataBase makeNewWithoutRegister(String mDataName, String mDataTitle, + NBTTagCompound tagCompound) { + return new GTNBTDataBase(tagCompound, mDataName, mDataTitle, Long.MIN_VALUE); + } +} diff --git a/src/main/java/bwcrossmod/openComputers/TileEntityGTDataServer.java b/src/main/java/bwcrossmod/openComputers/TileEntityGTDataServer.java new file mode 100644 index 0000000000..c59ba39c12 --- /dev/null +++ b/src/main/java/bwcrossmod/openComputers/TileEntityGTDataServer.java @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.openComputers; + +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; + +import bartworks.API.ITileAddsInformation; +import bartworks.API.ITileHasDifferentTextureSides; +import bartworks.API.SideReference; +import cpw.mods.fml.common.Optional; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Mods; +import gregtech.api.util.GTUtility; +import gregtech.common.items.behaviors.BehaviourDataOrb; +import li.cil.oc.api.machine.Arguments; +import li.cil.oc.api.machine.Callback; +import li.cil.oc.api.machine.Context; +import li.cil.oc.api.network.SimpleComponent; + +@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = Mods.Names.OPEN_COMPUTERS) +public class TileEntityGTDataServer extends TileEntity + implements ISidedInventory, ITileAddsInformation, ITileHasDifferentTextureSides, SimpleComponent { + + private final BiMap OrbDataBase = HashBiMap.create(); + + private ItemStack[] mItems = new ItemStack[2]; + private byte TickTimer; + + @Optional.Method(modid = Mods.Names.OPEN_COMPUTERS) + public String getComponentName() { + return "GT-Data Server"; + } + + @Optional.Method(modid = Mods.Names.OPEN_COMPUTERS) + @Callback + public Object[] listData(Context context, Arguments args) { + Set ret = new HashSet<>(); + for (Map.Entry entry : this.OrbDataBase.entrySet()) { + ret.add( + entry.getValue() + .getId() + Long.MAX_VALUE + + ". " + + entry.getValue() + .getmDataTitle()); + } + return ret.toArray(new String[0]); + } + + @Optional.Method(modid = Mods.Names.OPEN_COMPUTERS) + @Callback + public Object[] imprintOrb(Context context, Arguments args) { + return new Object[] { false }; + } + + private boolean isServerSide() { + return !this.worldObj.isRemote || SideReference.Side.Server; + } + + @Override + public void updateEntity() { + if (this.TickTimer++ % 20 != 0) return; + + if (this.isServerSide()) { + if (GTUtility.areStacksEqual(this.mItems[0], ItemList.Tool_DataOrb.get(1)) + && this.mItems[0].hasTagCompound()) { + if (GTNBTDataBase.getIdFromTag(this.mItems[0].getTagCompound()) == null) { + this.OrbDataBase.put( + GTNBTDataBase.getMaxID(), + new GTNBTDataBase( + BehaviourDataOrb.getDataName(this.mItems[0]), + BehaviourDataOrb.getDataTitle(this.mItems[0]), + this.mItems[0].getTagCompound())); + } else { + long id = GTNBTDataBase.getIdFromTag(this.mItems[0].getTagCompound()); + this.OrbDataBase.put(id, GTNBTDataBase.getGTTagFromId(id)); + } + } + if (GTUtility.areStacksEqual(this.mItems[0], ItemList.Tool_DataStick.get(1)) + && this.mItems[0].hasTagCompound()) { + + String bookTitle = GTUtility.ItemNBT.getBookTitle(this.mItems[0]); + String punchcardData = GTUtility.ItemNBT.getPunchCardData(this.mItems[0]); + short mapID = GTUtility.ItemNBT.getMapID(this.mItems[0]); + byte data = (byte) (bookTitle.isEmpty() ? punchcardData.isEmpty() ? mapID != -1 ? 3 : -1 : 2 : 1); + + String title = data == 1 ? bookTitle + : data == 2 ? punchcardData : data == 3 ? "" + mapID : "Custom Data"; + String name = data == 1 ? "eBook" + : data == 2 ? "Punch Card Data" : data == 3 ? "Map Data" : "Custom Data"; + if (GTNBTDataBase.getIdFromTag(this.mItems[0].getTagCompound()) == null) { + this.OrbDataBase + .put(GTNBTDataBase.getMaxID(), new GTNBTDataBase(name, title, this.mItems[0].getTagCompound())); + } else { + long id = GTNBTDataBase.getIdFromTag(this.mItems[0].getTagCompound()); + this.OrbDataBase.put(id, GTNBTDataBase.getGTTagFromId(id)); + } + } + } + } + + @Override + public String[] getInfoData() { + return new String[0]; + } + + @Override + public void registerBlockIcons(IIconRegister par1IconRegister) {} + + @Override + public int[] getAccessibleSlotsFromSide(int p_94128_1_) { + return new int[0]; + } + + @Override + public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_) { + return false; + } + + @Override + public boolean canExtractItem(int p_102008_1_, ItemStack p_102008_2_, int p_102008_3_) { + return false; + } + + @Override + public int getSizeInventory() { + return this.mItems.length; + } + + @Override + public ItemStack getStackInSlot(int slotIn) { + return slotIn == 0 ? this.mItems[0] : this.mItems[1]; + } + + @Override + public ItemStack decrStackSize(int index, int count) { + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(int index) { + return null; + } + + @Override + public void setInventorySlotContents(int index, ItemStack stack) { + if (index > 1 || index < 0) return; + this.mItems[index] = stack; + } + + @Override + public String getInventoryName() { + return null; + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + return true; + } + + @Override + public void openInventory() {} + + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(int index, ItemStack stack) { + return index == 0; + } +} diff --git a/src/main/java/bwcrossmod/tectech/TecTechResearchLoader.java b/src/main/java/bwcrossmod/tectech/TecTechResearchLoader.java new file mode 100644 index 0000000000..2a1a66d6e0 --- /dev/null +++ b/src/main/java/bwcrossmod/tectech/TecTechResearchLoader.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.tectech; + +import static gregtech.api.util.GTRecipeBuilder.MINUTES; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.common.loaders.ItemRegistry; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; +import tectech.recipe.TTRecipeAdder; + +public class TecTechResearchLoader { + + public static void runResearches() { + Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null + ? FluidRegistry.getFluid("molten.indalloy140") + : FluidRegistry.getFluid("molten.solderingalloy"); + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemRegistry.voidminer[0].copy(), + 1024000, + 256, + (int) TierEU.RECIPE_ZPM, + 24, + new Object[] { ItemRegistry.voidminer[0].copy(), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackPlutonium, 9L), + Materials.BlackPlutonium.getPlates(3), ItemList.Electric_Motor_ZPM.get(9L), ItemList.Sensor_ZPM.get(9L), + ItemList.Field_Generator_ZPM.get(9L), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.BlackPlutonium, 36L) }, + new FluidStack[] { new FluidStack(solderIndalloy, 1440), WerkstoffLoader.Krypton.getFluidOrGas(20000) }, + ItemRegistry.voidminer[1].copy(), + 5 * MINUTES, + (int) TierEU.RECIPE_ZPM); + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemRegistry.voidminer[1].copy(), + 8192000, + 512, + (int) TierEU.RECIPE_UV, + 64, + new Object[] { ItemRegistry.voidminer[1].copy(), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 9L), + Materials.Neutronium.getPlates(3), ItemList.Electric_Motor_UV.get(9L), ItemList.Sensor_UV.get(9L), + ItemList.Field_Generator_UV.get(9L), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 36L) }, + new FluidStack[] { new FluidStack(solderIndalloy, 1440), WerkstoffLoader.Oganesson.getFluidOrGas(20000) }, + ItemRegistry.voidminer[2].copy(), + 5 * MINUTES, + (int) TierEU.RECIPE_UV); + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Machine_Multi_ImplosionCompressor.get(1L), + 64000, + 48, + (int) TierEU.RECIPE_UV, + 8, + new Object[] { ItemList.Machine_Multi_ImplosionCompressor.get(1L), Materials.Neutronium.getBlocks(5), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Osmium, 64), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.Osmium, 64), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 64), + ItemList.Electric_Piston_UV.get(64), }, + new FluidStack[] { new FluidStack(solderIndalloy, 1440), Materials.Osmium.getMolten(1440), + Materials.Neutronium.getMolten(1440) }, + ItemRegistry.eic.copy(), + 5 * MINUTES, + (int) TierEU.RECIPE_UV); + + } +} diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaser.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaser.java new file mode 100644 index 0000000000..7dc3eca2f8 --- /dev/null +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaser.java @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.tectech.tileentites.tiered; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import tectech.mechanics.pipe.IConnectsToEnergyTunnel; +import tectech.thing.metaTileEntity.pipe.MTEPipeEnergy; + +public interface LowPowerLaser extends IMetaTileEntity, IConnectsToEnergyTunnel { + + boolean isSender(); + + boolean isReceiver(); + + boolean isTunnel(); + + default boolean isConnectedCorrectly(ForgeDirection side) { + return false; + } + + default void setEUVar(long aEnergy) {} + + default long getAMPERES() { + return -1; + } + + default long maxEUInput() { + return -1; + } + + default long maxEUOutput() { + return -1; + } + + default long maxEUStore() { + return -1; + } + + default long getTotalPower() { + return this.getAMPERES() * Math.max(this.maxEUOutput(), this.maxEUInput()) - this.getAMPERES() / 20; + } + + default void moveAroundLowPower(IGregTechTileEntity aBaseMetaTileEntity) { + byte color = this.getBaseMetaTileEntity() + .getColorization(); + if (color >= 0) { + ForgeDirection front = aBaseMetaTileEntity.getFrontFacing(); + ForgeDirection opposite = front.getOpposite(); + + for (short dist = 1; dist < 250; ++dist) { + IGregTechTileEntity tGTTileEntity = aBaseMetaTileEntity + .getIGregTechTileEntityAtSideAndDistance(front, dist); + if (tGTTileEntity == null || tGTTileEntity.getColorization() != color) { + return; + } + + IMetaTileEntity aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return; + } + + if (aMetaTileEntity instanceof LowPowerLaser lowPowerLaser && lowPowerLaser.isReceiver() + && opposite == tGTTileEntity.getFrontFacing()) { + if (this.maxEUOutput() > lowPowerLaser.maxEUInput() + || this.getAMPERES() > lowPowerLaser.getAMPERES()) { + aMetaTileEntity.doExplosion(this.maxEUOutput()); + this.setEUVar(aBaseMetaTileEntity.getStoredEU() - this.maxEUOutput()); + return; + } + + if (this.maxEUOutput() == lowPowerLaser.maxEUInput()) { + long diff = Math.min( + this.getAMPERES() * 20L * this.maxEUOutput(), + Math.min( + lowPowerLaser.maxEUStore() - aMetaTileEntity.getBaseMetaTileEntity() + .getStoredEU(), + aBaseMetaTileEntity.getStoredEU())); + this.setEUVar(aBaseMetaTileEntity.getStoredEU() - diff); + lowPowerLaser.setEUVar( + aMetaTileEntity.getBaseMetaTileEntity() + .getStoredEU() + diff); + } + return; + } + + if ((!(aMetaTileEntity instanceof LowPowerLaser lowPowerLaser) || !lowPowerLaser.isTunnel()) + && !(aMetaTileEntity instanceof MTEPipeEnergy)) { + return; + } + + if (aMetaTileEntity instanceof MTEPipeEnergy tePipeEnergy) { + if (tePipeEnergy.connectionCount < 2) { + return; + } + tePipeEnergy.markUsed(); + return; + } + + if (aMetaTileEntity instanceof LowPowerLaser lowPowerLaser && lowPowerLaser.isTunnel() + && !lowPowerLaser.isConnectedCorrectly(front)) { + return; + } + } + } + } +} diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaserBase.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaserBase.java new file mode 100644 index 0000000000..a4e21be96f --- /dev/null +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/LowPowerLaserBase.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.tectech.tileentites.tiered; + +import java.util.Optional; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; + +public abstract class LowPowerLaserBase extends MTETieredMachineBlock implements LowPowerLaser { + + protected long AMPERES; + + public LowPowerLaserBase(int aID, String aName, String aNameRegional, int aTier, long aAmperes, int aInvSlotCount, + String aDescription, ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); + this.AMPERES = aAmperes; + } + + public LowPowerLaserBase(int aID, String aName, String aNameRegional, int aTier, long aAmperes, int aInvSlotCount, + String[] aDescription, ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); + this.AMPERES = aAmperes; + } + + public LowPowerLaserBase(String aName, int aTier, long aAmperes, int aInvSlotCount, String aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + this.AMPERES = aAmperes; + } + + public LowPowerLaserBase(String aName, int aTier, long aAmperes, int aInvSlotCount, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + this.AMPERES = aAmperes; + } + + @Override + public long getAMPERES() { + return this.AMPERES; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return true; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return true; + } + + @Override + public boolean shouldJoinIc2Enet() { + return true; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public void saveNBTData(NBTTagCompound nbtTagCompound) { + Optional.ofNullable(nbtTagCompound) + .ifPresent(tag -> tag.setLong("AMPERES", this.AMPERES)); + } + + @Override + public void loadNBTData(NBTTagCompound nbtTagCompound) { + if (nbtTagCompound != null && nbtTagCompound.hasKey("AMPERES")) { + this.AMPERES = nbtTagCompound.getLong("AMPERES"); + } + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return false; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public long maxEUInput() { + return GTValues.V[this.mTier]; + } + + @Override + public long maxEUOutput() { + return GTValues.V[this.mTier]; + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return GTValues.V[this.mTier + 1]; + } + + @Override + public long maxEUStore() { + return 512L + GTValues.V[this.mTier + 1] * 24L * this.AMPERES; + } +} diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserBox.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserBox.java new file mode 100644 index 0000000000..e4eba7d464 --- /dev/null +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserBox.java @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.tectech.tileentites.tiered; + +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import bartworks.util.BWTooltipReference; +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.util.GTUtility; + +public class MTELowPowerLaserBox extends LowPowerLaserBase { + + public MTELowPowerLaserBox(int aID, String aName, String aNameRegional, int aTier, long aAmperes, + ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aAmperes, 0, new String[0], aTextures); + } + + public MTELowPowerLaserBox(String aName, int aTier, long aAmperes, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aAmperes, 0, aDescription, aTextures); + } + + @Override + public boolean isSender() { + return this.getBaseMetaTileEntity() + .isAllowedToWork(); + } + + @Override + public boolean isReceiver() { + return !this.getBaseMetaTileEntity() + .isAllowedToWork(); + } + + @Override + public boolean isTunnel() { + return false; + } + + @Override + public long maxAmperesOut() { + return !this.getBaseMetaTileEntity() + .isAllowedToWork() ? this.AMPERES : 0; + } + + @Override + public long maxAmperesIn() { + return this.getBaseMetaTileEntity() + .isAllowedToWork() ? this.AMPERES + this.AMPERES / 4 : 0; + } + + @Override + public boolean hasAlternativeModeText() { + return true; + } + + @Override + public String getAlternativeModeText() { + return this.isReceiver() ? "Set to receiving mode" : "Set to sending mode"; + } + + @Override + public boolean isEnetInput() { + return this.getBaseMetaTileEntity() + .isAllowedToWork(); + } + + @Override + public boolean isEnetOutput() { + return !this.getBaseMetaTileEntity() + .isAllowedToWork(); + } + + @Override + public boolean canConnect(ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTELowPowerLaserBox(this.mName, this.mTier, this.AMPERES, this.mDescriptionArray, this.mTextures); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + aBaseMetaTileEntity.setActive(aBaseMetaTileEntity.isAllowedToWork()); + + byte Tick = (byte) (int) (aTick % 20L); + if (16 == Tick) { + if (aBaseMetaTileEntity.getStoredEU() > 0L) { + this.setEUVar(aBaseMetaTileEntity.getStoredEU() - this.AMPERES); + if (aBaseMetaTileEntity.getStoredEU() < 0L) { + this.setEUVar(0L); + } + } + if (this.getBaseMetaTileEntity() + .isAllowedToWork() && aBaseMetaTileEntity.getStoredEU() > this.getMinimumStoredEU()) { + this.moveAroundLowPower(aBaseMetaTileEntity); + } + } + } + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[12][17][]; + + for (byte i = -1; i < 16; ++i) { + rTextures[0][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[this.mTier] }; + rTextures[1][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[this.mTier] }; + rTextures[2][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[this.mTier] }; + rTextures[3][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_LASER_TT[this.mTier] }; + rTextures[4][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_LASER_TT[this.mTier] }; + rTextures[5][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_LASER_TT[this.mTier] }; + rTextures[6][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; + rTextures[7][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; + rTextures[8][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; + rTextures[9][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT[this.mTier] }; + rTextures[10][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT[this.mTier] }; + rTextures[11][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], + tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT[this.mTier] }; + } + + return rTextures; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + return this.mTextures[Math.min(2, side.ordinal()) + (side == facing ? 3 : 0) + (aActive ? 0 : 6)][aColorIndex + + 1]; + } + + @Override + public String[] getDescription() { + return new String[] { "Like a transformer... but for LASERS!", + "Transfer rate: " + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(this.getTotalPower()) + + EnumChatFormatting.WHITE + + " EU/t", + BWTooltipReference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get() }; + } +} diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserDynamo.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserDynamo.java new file mode 100644 index 0000000000..da3e3e4ac2 --- /dev/null +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserDynamo.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.tectech.tileentites.tiered; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoTunnel; + +public class MTELowPowerLaserDynamo extends MTEHatchDynamoTunnel implements LowPowerLaser { + + public MTELowPowerLaserDynamo(int aID, String aName, String aNameRegional, int aTier, int aAmp) { + super(aID, aName, aNameRegional, aTier, aAmp); + } + + public MTELowPowerLaserDynamo(String aName, int aTier, int aAmp, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aAmp, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELowPowerLaserDynamo(this.mName, this.mTier, this.Amperes, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean isSender() { + return true; + } + + @Override + public boolean isReceiver() { + return false; + } + + @Override + public boolean isTunnel() { + return false; + } + + @Override + public long getAMPERES() { + return this.Amperes; + } + + @Override + public String[] getDescription() { + return mDescriptionArray; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + byte Tick = (byte) (int) (aTick % 20L); + if (16 == Tick && aBaseMetaTileEntity.getStoredEU() > 0L) { + this.setEUVar(aBaseMetaTileEntity.getStoredEU() - this.Amperes); + if (aBaseMetaTileEntity.getStoredEU() < 0L) { + this.setEUVar(0L); + } + } + if (aBaseMetaTileEntity.getStoredEU() > this.getMinimumStoredEU()) { + this.moveAroundLowPower(aBaseMetaTileEntity); + } + } + } +} diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserHatch.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserHatch.java new file mode 100644 index 0000000000..b9fa9c14b6 --- /dev/null +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserHatch.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.tectech.tileentites.tiered; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyTunnel; + +public class MTELowPowerLaserHatch extends MTEHatchEnergyTunnel implements LowPowerLaser { + + public MTELowPowerLaserHatch(int aID, String aName, String aNameRegional, int aTier, int aAmp) { + super(aID, aName, aNameRegional, aTier, aAmp); + } + + public MTELowPowerLaserHatch(String aName, int aTier, int aAmp, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aAmp, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + return mDescriptionArray; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELowPowerLaserHatch(this.mName, this.mTier, this.Amperes, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean isSender() { + return false; + } + + @Override + public boolean isReceiver() { + return true; + } + + @Override + public boolean isTunnel() { + return false; + } + + @Override + public long getAMPERES() { + return this.Amperes; + } +} diff --git a/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserPipe.java b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserPipe.java new file mode 100644 index 0000000000..0a8ddb19d3 --- /dev/null +++ b/src/main/java/bwcrossmod/tectech/tileentites/tiered/MTELowPowerLaserPipe.java @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.tectech.tileentites.tiered; + +import java.util.ArrayList; +import java.util.HashSet; + +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import bartworks.util.BWTooltipReference; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTECable; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.CoverBehavior; +import gregtech.common.GTClient; +import ic2.core.Ic2Items; + +public class MTELowPowerLaserPipe extends MTECable implements LowPowerLaser { + + public MTELowPowerLaserPipe(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 0.25f, Materials.BorosilicateGlass, 0, 0, 0, false, false); + } + + public MTELowPowerLaserPipe(String aName, float aThickNess, Materials aMaterial, long aCableLossPerMeter, + long aAmperage, long aVoltage, boolean aInsulated, boolean aCanShock) { + super(aName, aThickNess, aMaterial, aCableLossPerMeter, aAmperage, aVoltage, aInsulated, aCanShock); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTELowPowerLaserPipe( + this.mName, + this.mThickNess, + this.mMaterial, + this.mCableLossPerMeter, + this.mAmperage, + this.mVoltage, + this.mInsulated, + this.mCanShock); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aTick % 20 == 13 && aBaseMetaTileEntity.isClientSide() && GTClient.changeDetected == 4) { + aBaseMetaTileEntity.issueTextureUpdate(); + } + } + + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection siide, byte aConnections, + int aColorIndex, boolean aConnected, boolean aRedstone) { + return new ITexture[] { TextureFactory.of( + Block.getBlockFromItem(Ic2Items.glassFiberCableBlock.getItem()), + Ic2Items.glassFiberCableBlock.getItemDamage(), + siide) }; + } + + @Override + public String[] getDescription() { + return new String[] { "Primitive Laser Cable intended for Low Power Applications", "Does not auto-connect", + "Does not turn or bend", + EnumChatFormatting.WHITE + "Must be " + + EnumChatFormatting.YELLOW + + "c" + + EnumChatFormatting.RED + + "o" + + EnumChatFormatting.BLUE + + "l" + + EnumChatFormatting.DARK_PURPLE + + "o" + + EnumChatFormatting.GOLD + + "r" + + EnumChatFormatting.DARK_RED + + "e" + + EnumChatFormatting.DARK_GREEN + + "d" + + EnumChatFormatting.WHITE + + " in order to work", + BWTooltipReference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get() }; + } + + @Override + public boolean isSender() { + return false; + } + + @Override + public boolean isReceiver() { + return false; + } + + @Override + public boolean isTunnel() { + return true; + } + + public boolean canConnect(ForgeDirection side) { + return true; + } + + @Override + public boolean isGivingInformation() { + return false; + } + + @Override + public boolean isConnectedCorrectly(ForgeDirection side) { + return this.isConnectedAtSide(side) && this.isConnectedAtSide(side.getOpposite()); + } + + @Override + public boolean shouldJoinIc2Enet() { + return false; + } + + @Override + public long injectEnergyUnits(ForgeDirection side, long aVoltage, long aAmperage) { + return 0L; + } + + @Override + @Deprecated + public long transferElectricity(ForgeDirection side, long aVoltage, long aAmperage, + ArrayList aAlreadyPassedTileEntityList) { + return 0L; + } + + @Override + public long transferElectricity(ForgeDirection side, long aVoltage, long aAmperage, + HashSet aAlreadyPassedSet) { + return 0L; + } + + @Override + public boolean letsIn(CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsOut(CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return true; + } +} diff --git a/src/main/java/bwcrossmod/tgregworks/MaterialsInjector.java b/src/main/java/bwcrossmod/tgregworks/MaterialsInjector.java new file mode 100644 index 0000000000..a8e65e51f2 --- /dev/null +++ b/src/main/java/bwcrossmod/tgregworks/MaterialsInjector.java @@ -0,0 +1,81 @@ +package bwcrossmod.tgregworks; + +import static gregtech.api.enums.Mods.TinkersGregworks; + +import net.minecraftforge.common.config.Property; + +import bartworks.MainMod; +import bartworks.system.material.Werkstoff; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import gregtech.GT_Version; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import vexatos.tgregworks.TGregworks; +import vexatos.tgregworks.item.ItemTGregPart; +import vexatos.tgregworks.reference.Config; + +@Mod( + modid = MaterialsInjector.MOD_ID, + name = MaterialsInjector.NAME, + version = MaterialsInjector.VERSION, + dependencies = """ + required-after:IC2;\ + required-after:gregtech;\ + required-after:bartworks;\ + before:TGregworks;\ + before:miscutils;""") +public class MaterialsInjector { + + public static final String NAME = "BartWorks Mod Additions - TGregworks Container"; + public static final String VERSION = GT_Version.VERSION; + public static final String MOD_ID = "bartworkscrossmodtgregworkscontainer"; + + @Mod.EventHandler + public void init(FMLInitializationEvent init) { + if (TinkersGregworks.isModLoaded()) { + MaterialsInjector.run(); + } + } + + public static void run() { + MainMod.LOGGER.info("Registering TGregworks - BartWorks tool parts."); + Werkstoff.werkstoffHashSet.stream() + .filter(x -> x.hasItemType(OrePrefixes.gem) || x.hasItemType(OrePrefixes.plate)) + .map(Werkstoff::getBridgeMaterial) + .filter(x -> x.mMetaItemSubID == -1) + .filter(x -> x.mDurability != 0) + .forEach(m -> { + setConfigProps(m); + registerParts(m); + }); + + TGregworks.registry.configProps.clear(); + TGregworks.registry.configIDs.clear(); + + ItemTGregPart.toolMaterialNames = TGregworks.registry.toolMaterialNames; + } + + private static void registerParts(Materials m) { + TGregworks.registry.toolMaterialNames.add(m.mDefaultLocalName); + int matID = TGregworks.registry.getMaterialID(m); + + TGregworks.registry.addToolMaterial(matID, m); + TGregworks.registry.addBowMaterial(matID, m); + TGregworks.registry.addArrowMaterial(matID, m); + + TGregworks.registry.matIDs.put(m, matID); + TGregworks.registry.materialIDMap.put(matID, m); + } + + private static void setConfigProps(Materials m) { + if (TGregworks.config.get(Config.Category.Enable, m.mName, true) + .getBoolean(true)) { + TGregworks.registry.toolMaterials.add(m); + Property configProp = TGregworks.config + .get(Config.onMaterial(Config.MaterialID), m.mName, 0, null, 0, 100000); + TGregworks.registry.configProps.put(m, configProp); + TGregworks.registry.configIDs.add(configProp.getInt()); + } + } +} diff --git a/src/main/java/bwcrossmod/thaumcraft/util/ThaumcraftHandler.java b/src/main/java/bwcrossmod/thaumcraft/util/ThaumcraftHandler.java new file mode 100644 index 0000000000..caaf8aea60 --- /dev/null +++ b/src/main/java/bwcrossmod/thaumcraft/util/ThaumcraftHandler.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following + * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial + * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, + * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +package bwcrossmod.thaumcraft.util; + +import net.minecraft.item.ItemStack; + +import bartworks.API.APIConfigValues; +import bartworks.util.Pair; +import bartworks.util.log.DebugLog; +import thaumcraft.api.ThaumcraftApi; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.common.lib.world.ThaumcraftWorldGenerator; + +public class ThaumcraftHandler { + + public static boolean isMagicalForestBiome(int biomeID) { + return biomeID == ThaumcraftWorldGenerator.biomeMagicalForest.biomeID; + } + + public static boolean isTaintBiome(int biomeID) { + return biomeID == ThaumcraftWorldGenerator.biomeTaint.biomeID; + } + + public static class AspectAdder { + + @SafeVarargs + public static void addAspectViaBW(ItemStack stack, Pair... aspectPair) { + if (stack == null || stack.getItem() == null || stack.getUnlocalizedName() == null) return; + AspectList aspectList = new AspectList(); + for (Pair a : aspectPair) { + Aspect aspect = (Aspect) a.getKey(); + int amount = a.getValue(); + if (APIConfigValues.debugLog) DebugLog.log( + "Stack:" + stack.getDisplayName() + + " Damage:" + + stack.getItemDamage() + + " aspectPair: " + + aspect.getName() + + " / " + + amount); + aspectList.add(aspect, amount); + } + ThaumcraftApi.registerObjectTag(stack, aspectList); + } + } +} diff --git a/src/main/java/client/ClientProxy.java b/src/main/java/client/ClientProxy.java deleted file mode 100644 index 9dfaea0d33..0000000000 --- a/src/main/java/client/ClientProxy.java +++ /dev/null @@ -1,19 +0,0 @@ -package client; - -import common.CommonProxy; - -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; - -public class ClientProxy extends CommonProxy { - - @Override - public void preInit(final FMLPreInitializationEvent e) { - super.preInit(e); - } - - @Override - public void init(final FMLInitializationEvent e) { - super.init(e); - } -} diff --git a/src/main/java/client/gui/KT_UITextures.java b/src/main/java/client/gui/KT_UITextures.java deleted file mode 100644 index ec324666fa..0000000000 --- a/src/main/java/client/gui/KT_UITextures.java +++ /dev/null @@ -1,21 +0,0 @@ -package client.gui; - -import com.gtnewhorizons.modularui.api.drawable.UITexture; - -import kekztech.KekzCore; - -public class KT_UITextures { - - public static final UITexture OVERLAY_BUTTON_WIRELESS_ON = UITexture - .fullImage(KekzCore.MODID, "gui/overlay_button/wireless_on"); - - public static final UITexture OVERLAY_BUTTON_WIRELESS_OFF = UITexture - .fullImage(KekzCore.MODID, "gui/overlay_button/wireless_off"); - - public static final UITexture OVERLAY_BUTTON_WIRELESS_OFF_DISABLED = UITexture - .fullImage(KekzCore.MODID, "gui/overlay_button/wireless_off_disabled"); - - public static final UITexture OVERLAY_BUTTON_WIRELESS_REBALANCE = UITexture - .fullImage(KekzCore.MODID, "gui/overlay_button/wireless_rebalance"); - -} diff --git a/src/main/java/com/detrav/DetravScannerMod.java b/src/main/java/com/detrav/DetravScannerMod.java deleted file mode 100644 index 99a9d9eab1..0000000000 --- a/src/main/java/com/detrav/DetravScannerMod.java +++ /dev/null @@ -1,75 +0,0 @@ -package com.detrav; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraftforge.common.config.Configuration; - -import com.detrav.net.DetravNetwork; -import com.detrav.proxies.CommonProxy; -import com.detrav.utils.DetravCreativeTab; -import com.detrav.utils.FluidColors; -import com.detrav.utils.GTppHelper; - -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.Mod.EventHandler; -import cpw.mods.fml.common.SidedProxy; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.network.NetworkRegistry; -import gregtech.GT_Version; -import gregtech.api.GregTech_API; - -@Mod( - modid = DetravScannerMod.MODID, - version = GT_Version.VERSION, - dependencies = "required-after:IC2;required-after:gregtech;after:miscutils;after:bartworks") -public class DetravScannerMod { - - public static final String MODID = "detravscannermod"; - public static final boolean DEBUG_ENABLED = Boolean.parseBoolean(System.getProperty("com.detrav.debug", "false")); - public static final CreativeTabs TAB_DETRAV = new DetravCreativeTab(); - public static boolean isDreamcraftLoaded = false; - public static boolean isBartWorksLoaded = false; - public static boolean isGTppLoaded = false; - - @SidedProxy(clientSide = "com.detrav.proxies.ClientProxy", serverSide = "com.detrav.proxies.ServerProxy") - public static CommonProxy proxy; - - @Mod.Instance(DetravScannerMod.MODID) - public static DetravScannerMod instance; - - public DetravScannerMod() { - GregTech_API.sAfterGTPreload.add(new Detrav_AfterGTPreload_Loader()); - isDreamcraftLoaded = Loader.isModLoaded("dreamcraft"); - isBartWorksLoaded = Loader.isModLoaded("bartworks"); - isGTppLoaded = Loader.isModLoaded("miscutils"); - - new DetravNetwork(); - } - - @EventHandler - public void preInit(FMLPreInitializationEvent event) { - Configuration Config = new Configuration(event.getSuggestedConfigurationFile()); - Config.load(); - - if (Config.hasChanged()) { - Config.save(); - } - - proxy.onPreInit(); - } - - @EventHandler - public void init(FMLInitializationEvent event) { - NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy); - proxy.onLoad(); - } - - @EventHandler - public void onPostLoad(FMLPostInitializationEvent aEvent) { - proxy.onPostLoad(); - if (isGTppLoaded) GTppHelper.generate_OreIDs(); - FluidColors.makeColors(); - } -} diff --git a/src/main/java/com/detrav/Detrav_AfterGTPreload_Loader.java b/src/main/java/com/detrav/Detrav_AfterGTPreload_Loader.java deleted file mode 100644 index 5cdb2bff88..0000000000 --- a/src/main/java/com/detrav/Detrav_AfterGTPreload_Loader.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.detrav; - -import com.detrav.items.DetravMetaGeneratedTool01; -import com.detrav.items.processing.ProcessingDetravToolProspector; - -/** - * Created by wital_000 on 18.03.2016. - */ -public class Detrav_AfterGTPreload_Loader implements Runnable { - - @Override - public void run() { - - // items - new DetravMetaGeneratedTool01(); - - // recipes and etc - new ProcessingDetravToolProspector(); - - } -} diff --git a/src/main/java/com/detrav/commands/DetravScannerCommand.java b/src/main/java/com/detrav/commands/DetravScannerCommand.java deleted file mode 100644 index decb661cb0..0000000000 --- a/src/main/java/com/detrav/commands/DetravScannerCommand.java +++ /dev/null @@ -1,158 +0,0 @@ -package com.detrav.commands; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.command.ICommand; -import net.minecraft.command.ICommandSender; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.world.chunk.Chunk; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_TileEntity_Ores; - -/** - * Created by wital_000 on 17.03.2016. - */ -public class DetravScannerCommand implements ICommand { - - private List aliases; - - public DetravScannerCommand() { - this.aliases = new ArrayList(); - this.aliases.add("DetravScanner"); - this.aliases.add("dscan"); - } - - @Override - public String getCommandName() { - return "DetravScanner"; - } - - @Override - public String getCommandUsage(ICommandSender sender) { - return "DetravScanner [\"Part of Greg ore name\"]"; - } - - @Override - public List getCommandAliases() { - return this.aliases; - } - - @Override - public void processCommand(ICommandSender sender, String[] args) { - int aX = 0; - int aZ = 0; - int aY = 0; - String name = null; - - ArrayList strs = new ArrayList<>(); - for (int i = 0; i < args.length; i++) { - strs.add(args[i]); - if (args[i].startsWith("\"")) { - for (i++; i < args.length; i++) { - String temp = (String) strs.get(strs.size() - 1); - temp = temp + " " + args[i]; - temp = temp.replace("\"", ""); - strs.set(strs.size() - 1, temp); - if (args[i].endsWith("\"")) break; - } - } - } - args = new String[strs.size()]; - args = strs.toArray(args); - - switch (args.length) { - case 0: - break; - case 1: - if (args[0].toLowerCase() == "help") { - sendHelpMessage(sender); - return; - } - name = args[0]; - break; - default: - sendHelpMessage(sender); - return; - } - ChunkCoordinates c = sender.getPlayerCoordinates(); - if (name != null) name = name.toLowerCase(); - process(sender, (int) Math.floor(c.posX / 16.0), (int) Math.floor(c.posZ / 16.0), name); - } - - private void process(ICommandSender sender, int aX, int aZ, String fName) { - Chunk c = sender.getEntityWorld() - .getChunkFromChunkCoords(aX, aZ); - if (c == null) sender.addChatMessage(new ChatComponentText("ERROR")); - HashMap ores = new HashMap<>(); - for (int x = 0; x < 16; x++) for (int z = 0; z < 16; z++) { - int ySize = c.getHeightValue(x, z); - for (int y = 1; y < ySize; y++) { - Block b = c.getBlock(x, y, z); - if (b == GregTech_API.sBlockOres1) { - TileEntity entity = c.getTileEntityUnsafe(x, y, z); - if (entity != null) { - GT_TileEntity_Ores gt_entity = (GT_TileEntity_Ores) entity; - short meta = gt_entity.getMetaData(); - String name = Materials.getLocalizedNameForItem( - GT_LanguageManager.getTranslation(b.getUnlocalizedName() + "." + meta + ".name"), - meta % 1000); - if (name.startsWith("Small")) continue; - if (fName == null || name.toLowerCase() - .contains(fName)) { - if (!ores.containsKey(name)) ores.put(name, 1); - else { - int val = ores.get(name); - ores.put(name, val + 1); - } - } - } - } - } - - } - sender.addChatMessage(new ChatComponentText("*** Detrav Scanner Begin")); - for (String key : ores.keySet()) { - sender.addChatMessage(new ChatComponentText(String.format("%s : %d", key, ores.get(key)))); - } - sender.addChatMessage(new ChatComponentText("*** Detrav Scanner End")); - } - - private void sendHelpMessage(ICommandSender sender) { - sender.addChatMessage(new ChatComponentText(getCommandUsage(sender))); - } - - @Override - public boolean canCommandSenderUseCommand(ICommandSender p_71519_1_) { - return true; - } - - @Override - public List addTabCompletionOptions(ICommandSender sender, String[] args) { - if (args.length != 1) return null; - if ("help".startsWith(args[0].toLowerCase())) { - List result = new ArrayList(); - result.add("help"); - sendHelpMessage(sender); - return result; - } - return null; - } - - @Override - public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { - return false; - } - - @Override - public int compareTo(Object o) { - return 0; - } -} diff --git a/src/main/java/com/detrav/enums/DetravToolDictNames.java b/src/main/java/com/detrav/enums/DetravToolDictNames.java deleted file mode 100644 index 128545360c..0000000000 --- a/src/main/java/com/detrav/enums/DetravToolDictNames.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.detrav.enums; - -/** - * Created by wital_000 on 19.03.2016. - */ -public enum DetravToolDictNames { - craftingToolElectricProspector, - craftingToolProspector, -} diff --git a/src/main/java/com/detrav/enums/Textures01.java b/src/main/java/com/detrav/enums/Textures01.java deleted file mode 100644 index 865d30e724..0000000000 --- a/src/main/java/com/detrav/enums/Textures01.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.detrav.enums; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; - -/** - * Created by wital_000 on 19.03.2016. - */ -public class Textures01 { - - public static final IIconContainer[] mTextures = new IIconContainer[] { - new Textures.ItemIcons.CustomIcon("gt.detrav.metatool.01/PRO_PICK_HEAD"), - new Textures.ItemIcons.CustomIcon("gt.detrav.metatool.01/ELECTRIC_LuV_PRO_PICK_HEAD"), - new Textures.ItemIcons.CustomIcon("gt.detrav.metatool.01/ELECTRIC_ZPM_PRO_PICK_HEAD"), - new Textures.ItemIcons.CustomIcon("gt.detrav.metatool.01/ELECTRIC_UV_PRO_PICK_HEAD"), - new Textures.ItemIcons.CustomIcon("gt.detrav.metatool.01/ELECTRIC_UHV_PRO_PICK_HEAD"), }; -} diff --git a/src/main/java/com/detrav/events/DetravLoginEventHandler.java b/src/main/java/com/detrav/events/DetravLoginEventHandler.java deleted file mode 100644 index f8e6fe31b4..0000000000 --- a/src/main/java/com/detrav/events/DetravLoginEventHandler.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.detrav.events; - -import net.minecraftforge.common.MinecraftForge; - -import cpw.mods.fml.common.FMLCommonHandler; - -/** - * Created by wital_000 on 18.04.2016. - */ -public class DetravLoginEventHandler { - - static boolean inited = false; - - public static void register() { - if (!inited) { - inited = true; - DetravLoginEventHandler handler = new DetravLoginEventHandler(); - MinecraftForge.EVENT_BUS.register(handler); - FMLCommonHandler.instance() - .bus() - .register(handler); - } - } -} diff --git a/src/main/java/com/detrav/gui/DetravScannerGUI.java b/src/main/java/com/detrav/gui/DetravScannerGUI.java deleted file mode 100644 index 14f3742c90..0000000000 --- a/src/main/java/com/detrav/gui/DetravScannerGUI.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.detrav.gui; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; - -import org.lwjgl.opengl.GL11; - -import com.detrav.gui.textures.DetravMapTexture; - -import gregtech.api.util.GT_Utility; - -/** - * Created by wital_000 on 21.03.2016. - */ -public class DetravScannerGUI extends GuiScreen { - - public static final int GUI_ID = 20; - private static DetravMapTexture map = null; - OresList oresList = null; - - private final static int minHeight = 128; - private final static int minWidth = 128; - private int prevW; - private int prevH; - - private static final ResourceLocation back = new ResourceLocation("gregtech:textures/gui/propick.png"); - - public DetravScannerGUI() { - - } - - public static void newMap(DetravMapTexture aMap) { - if (map != null) { - map.deleteGlTexture(); - map = null; - } - map = aMap; - map.loadTexture(null); - } - - @Override - public void drawScreen(int x, int y, float f) { - this.drawDefaultBackground(); - if (map == null) return; - int currentWidth = Math.max(map.width, minWidth); - int currentHeight = Math.max(map.height, minHeight); - int aX = (this.width - currentWidth - 100) / 2; - int aY = (this.height - currentHeight) / 2; - - if (oresList == null || (prevW != width || prevH != height)) { - oresList = new OresList( - this, - 100, - currentHeight, - aY, - aY + currentHeight, - aX + currentWidth, - 10, - map.packet.ores, - ((name, invert) -> { if (map != null) map.loadTexture(null, name, invert); })); - prevW = width; - prevH = height; - } - - // draw back for ores - drawRect(aX, aY, aX + currentWidth + 100, aY + currentHeight, 0xFFC6C6C6); - map.glBindTexture(); - map.draw(aX, aY); - oresList.drawScreen(x, y, f); - mc.getTextureManager() - .bindTexture(back); - GL11.glColor4f(0xFF, 0xFF, 0xFF, 0xFF); - - // draw corners - drawTexturedModalRect(aX - 5, aY - 5, 0, 0, 5, 5);// leftTop - drawTexturedModalRect(aX + currentWidth + 100, aY - 5, 171, 0, 5, 5);// RightTop - drawTexturedModalRect(aX - 5, aY + currentHeight, 0, 161, 5, 5);// leftDown - drawTexturedModalRect(aX + currentWidth + 100, aY + currentHeight, 171, 161, 5, 5);// RightDown - - // draw edges - for (int i = aX; i < aX + currentWidth + 100; i += 128) - drawTexturedModalRect(i, aY - 5, 5, 0, Math.min(128, aX + currentWidth + 100 - i), 5); // top - for (int i = aX; i < aX + currentWidth + 100; i += 128) - drawTexturedModalRect(i, aY + currentHeight, 5, 161, Math.min(128, aX + currentWidth + 100 - i), 5); // down - for (int i = aY; i < aY + currentHeight; i += 128) - drawTexturedModalRect(aX - 5, i, 0, 5, 5, Math.min(128, aY + currentHeight - i)); // left - for (int i = aY; i < aY + currentHeight; i += 128) - drawTexturedModalRect(aX + currentWidth + 100, i, 171, 5, 5, Math.min(128, aY + currentHeight - i)); // right - - if (map.packet.ptype == 2) { - HashMap[][] fluidInfo = map.packet.map; - int tX = x - aX; - int tY = y - aY; - if (tX >= 0 && tY >= 0 && tX < fluidInfo.length && tY < fluidInfo[0].length) { - List info = new ArrayList<>(); - if (fluidInfo[tX][tY] != null) { - short fluidId = fluidInfo[tX][tY].get((byte) 1); - short fluidAmount = fluidInfo[tX][tY].get((byte) 2); - if (fluidId != 0 && fluidAmount > 0) { - info.add( - StatCollector.translateToLocal("gui.detrav.scanner.tooltip.fluid_name") - + map.packet.metaMap.get(fluidId)); - info.add( - StatCollector.translateToLocal("gui.detrav.scanner.tooltip.fluid_amount") - + GT_Utility.formatNumbers(fluidAmount) - + " L"); - } else info.add(StatCollector.translateToLocal("gui.detrav.scanner.tooltip.no_fluid")); - } else { - info.add(StatCollector.translateToLocal("gui.detrav.scanner.tooltip.no_fluid")); - } - func_146283_a(info, x, y); - } - } - } - -} diff --git a/src/main/java/com/detrav/gui/OresList.java b/src/main/java/com/detrav/gui/OresList.java deleted file mode 100644 index cc8f9b1baa..0000000000 --- a/src/main/java/com/detrav/gui/OresList.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.detrav.gui; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.function.BiConsumer; - -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.client.renderer.Tessellator; - -import cpw.mods.fml.client.GuiScrollingList; - -class OresList extends GuiScrollingList { - - private final HashMap ores; - private final List keys; - private final GuiScreen parent; - private final BiConsumer onSelected; - private boolean invert = false; - - private int selected = -1; - - public OresList(GuiScreen parent, int width, int height, int top, int bottom, int left, int entryHeight, - HashMap aOres, BiConsumer onSelected) { - super(parent.mc, width, height, top, bottom, left, entryHeight); - this.parent = parent; - this.onSelected = onSelected; - ores = aOres; - keys = new ArrayList<>(ores.keySet()); - Collections.sort(keys); - if (keys.size() > 1) keys.add(0, "All"); - selected = 0; - } - - @Override - protected int getSize() { - return keys.size(); - } - - @Override - protected void elementClicked(int index, boolean doubleClick) { - selected = index; - if (doubleClick) this.invert = !this.invert; - - if (onSelected != null) onSelected.accept(keys.get(index), this.invert); - } - - @Override - protected boolean isSelected(int index) { - return selected == index; - } - - @Override - protected void drawBackground() {} - - @Override - protected void drawSlot(int slotIdx, int entryRight, int slotTop, int slotBuffer, Tessellator tess) { - parent.drawString( - parent.mc.fontRenderer, - parent.mc.fontRenderer.trimStringToWidth(keys.get(slotIdx), listWidth - 10), - this.left + 3, - slotTop - 1, - ores.getOrDefault(keys.get(slotIdx), 0x7d7b76)); - } -} diff --git a/src/main/java/com/detrav/gui/textures/DetravMapTexture.java b/src/main/java/com/detrav/gui/textures/DetravMapTexture.java deleted file mode 100644 index 1659b9bffc..0000000000 --- a/src/main/java/com/detrav/gui/textures/DetravMapTexture.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.detrav.gui.textures; - -import java.awt.Color; -import java.awt.image.BufferedImage; -import java.awt.image.WritableRaster; - -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.texture.AbstractTexture; -import net.minecraft.client.renderer.texture.TextureUtil; -import net.minecraft.client.resources.IResourceManager; - -import org.lwjgl.opengl.GL11; - -import com.detrav.net.ProspectingPacket; - -/** - * Created by wital_000 on 21.03.2016. - */ -public class DetravMapTexture extends AbstractTexture { - - public final ProspectingPacket packet; - private String selected = "All"; - public int width = -1; - public int height = -1; - public boolean invert = false; - - public DetravMapTexture(ProspectingPacket aPacket) { - packet = aPacket; - } - - private BufferedImage getImage() { - final int backgroundColor = invert ? Color.GRAY.getRGB() : Color.WHITE.getRGB(); - final int wh = (packet.size * 2 + 1) * 16; - - BufferedImage image = new BufferedImage(wh, wh, BufferedImage.TYPE_INT_ARGB); - WritableRaster raster = image.getRaster(); - - int playerI = packet.posX - (packet.chunkX - packet.size) * 16 - 1; // Correct player offset - int playerJ = packet.posZ - (packet.chunkZ - packet.size) * 16 - 1; - for (int i = 0; i < wh; i++) { - for (int j = 0; j < wh; j++) { - image.setRGB(i, j, backgroundColor); - if (packet.map[i][j] != null) { - if (packet.ptype == 0 || packet.ptype == 1) { - for (short meta : packet.map[i][j].values()) { - final String name = packet.metaMap.get(meta); - if (!selected.equals("All") && !selected.equals(name)) continue; - - image.setRGB(i, j, packet.ores.getOrDefault(name, Color.BLACK.getRGB()) | 0XFF000000); - break; - } - } else if (packet.ptype == 2) { - final short fluidId = packet.map[i][j].get((byte) 1), - fluidSize = packet.map[i][j].get((byte) 2); - final String name = packet.metaMap.get(fluidId); - - // Variables used to locate within a chunk. - final int k = (i % 16), l = (j % 16); - - if (((k + l * 16) * 3) < (fluidSize + 48) - && (selected.equals("All") || selected.equals(name))) { - image.setRGB(i, j, packet.ores.getOrDefault(name, Color.BLACK.getRGB()) | 0XFF000000); - } - } else if (packet.ptype == 3) { - final short meta = packet.map[i][j].get((byte) 1); - image.setRGB(i, j, ((meta & 0xFF) << 16) + ((meta & 0xFF) << 8) + ((meta & 0xFF)) | 0XFF000000); - } - } - // draw player pos - if (i == playerI || j == playerJ) { - raster.setSample(i, j, 0, (raster.getSample(i, j, 0) + 255) / 2); - raster.setSample(i, j, 1, raster.getSample(i, j, 1) / 2); - raster.setSample(i, j, 2, raster.getSample(i, j, 2) / 2); - } - // draw grid - if ((i) % 16 == 0 || (j) % 16 == 0) { - raster.setSample(i, j, 0, raster.getSample(i, j, 0) / 2); - raster.setSample(i, j, 1, raster.getSample(i, j, 1) / 2); - raster.setSample(i, j, 2, raster.getSample(i, j, 2) / 2); - } - - } - } - - return image; - } - - @Override - public void loadTexture(IResourceManager resourceManager) { - this.deleteGlTexture(); - if (packet != null) { - int tId = getGlTextureId(); - if (tId < 0) return; - TextureUtil.uploadTextureImageAllocate(this.getGlTextureId(), getImage(), false, false); - width = packet.getSize(); - height = packet.getSize(); - } - } - - public void loadTexture(IResourceManager resourceManager, boolean invert) { - this.invert = invert; - loadTexture(resourceManager); - } - - public void loadTexture(IResourceManager resourceManager, String selected, boolean invert) { - this.selected = selected; - loadTexture(resourceManager, invert); - } - - public int glBindTexture() { - if (this.glTextureId < 0) return this.glTextureId; - GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.getGlTextureId()); - return this.glTextureId; - } - - public void draw(int x, int y) { - float f = 1F / (float) width; - float f1 = 1F / (float) height; - int u = 0, v = 0; - Tessellator tessellator = Tessellator.instance; - tessellator.startDrawingQuads(); - tessellator.addVertexWithUV( - (double) (x), - (double) (y + height), - 0, - (double) ((float) (u) * f), - (double) ((float) (v + height) * f1)); - tessellator.addVertexWithUV( - (double) (x + width), - (double) (y + height), - 0, - (double) ((float) (u + width) * f), - (double) ((float) (v + height) * f1)); - tessellator.addVertexWithUV( - (double) (x + width), - (double) (y), - 0, - (double) ((float) (u + width) * f), - (double) ((float) (v) * f1)); - tessellator - .addVertexWithUV((double) (x), (double) (y), 0, (double) ((float) (u) * f), (double) ((float) (v) * f1)); - tessellator.draw(); - } - -} diff --git a/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java b/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java deleted file mode 100644 index 2aa01f4fab..0000000000 --- a/src/main/java/com/detrav/items/DetravMetaGeneratedTool01.java +++ /dev/null @@ -1,360 +0,0 @@ -package com.detrav.items; - -import java.util.List; - -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.StatCollector; - -import com.detrav.DetravScannerMod; -import com.detrav.enums.DetravToolDictNames; -import com.detrav.items.tools.DetravProspector; -import com.detrav.items.tools.DetravToolElectricProspector; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.interfaces.IToolStats; -import gregtech.api.items.GT_MetaGenerated_Tool; - -/** - * Created by wital_000 on 19.03.2016. - */ -public class DetravMetaGeneratedTool01 extends GT_MetaGenerated_Tool { - - public static DetravMetaGeneratedTool01 INSTANCE; - - public DetravMetaGeneratedTool01() { - super("detrav.metatool.01"); - INSTANCE = this; - addTool( - 0, - "Prospector's Scanner(ULV)", - "", - new DetravProspector(0), - DetravToolDictNames.craftingToolProspector.toString(), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - 2, - "Prospector's Scanner(LV)", - "", - new DetravProspector(1), - DetravToolDictNames.craftingToolProspector.toString(), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - 4, - "Prospector's Scanner(MV)", - "", - new DetravProspector(2), - DetravToolDictNames.craftingToolProspector.toString(), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - 6, - "Prospector's Scanner(HV)", - "", - new DetravProspector(3), - DetravToolDictNames.craftingToolProspector.toString(), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - 8, - "Prospector's Scanner(EV)", - "", - new DetravProspector(4), - DetravToolDictNames.craftingToolProspector.toString(), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - 10, - "Prospector's Scanner(IV)", - "", - new DetravProspector(5), - DetravToolDictNames.craftingToolProspector.toString(), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - 12, - "Prospector's Scanner(LuV)", - "", - new DetravProspector(6), - DetravToolDictNames.craftingToolProspector.toString(), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - 14, - "Prospector's Scanner(ZPM)", - "", - new DetravProspector(7), - DetravToolDictNames.craftingToolProspector.toString(), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - 16, - "Prospector's Scanner(UV)", - "", - new DetravProspector(8), - DetravToolDictNames.craftingToolProspector.toString(), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - 18, - "Prospector's Scanner(UHV)", - "", - new DetravProspector(9), - DetravToolDictNames.craftingToolProspector.toString(), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - - addTool( - 100, - "Electric Prospector's Scanner (LuV)", - "", - new DetravToolElectricProspector(6), - DetravToolDictNames.craftingToolElectricProspector, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L)); - addTool( - 102, - "Electric Prospector's Scanner (ZPM)", - "", - new DetravToolElectricProspector(7), - DetravToolDictNames.craftingToolElectricProspector, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L)); - addTool( - 104, - "Electric Prospector's Scanner (UV)", - "", - new DetravToolElectricProspector(8), - DetravToolDictNames.craftingToolElectricProspector, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L)); - addTool( - 106, - "Electric Prospector's Scanner (UHV)", - "", - new DetravToolElectricProspector(9), - DetravToolDictNames.craftingToolElectricProspector, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L)); - setCreativeTab(DetravScannerMod.TAB_DETRAV); - } - - @SuppressWarnings("unchecked") - public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - long tMaxDamage = getToolMaxDamage(aStack); - Materials tMaterial = getPrimaryMaterial(aStack); - IToolStats tStats = getToolStats(aStack); - int tOffset = aList.size(); - if (tStats == null) return; - - String name = aStack.getUnlocalizedName(); - String num = name.substring("gt.detrav.metatool.01.".length()); - int meta = Integer.parseInt(num); - int range = getHarvestLevel(aStack, "") / 2 + (meta / 4); - if ((range % 2) == 0) { - range += 1; - } - if (meta < 100) { - aList.add( - tOffset + 0, - EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.durability") - + EnumChatFormatting.GREEN - + Long.toString(tMaxDamage - getToolDamage(aStack)) - + " / " - + Long.toString(tMaxDamage) - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 1, - EnumChatFormatting.WHITE + tMaterial.getLocalizedNameForItem("%material") + EnumChatFormatting.GRAY); - aList.add( - tOffset + 2, - EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.range") - + Integer.toString(range) - + "x" - + Integer.toString(range) - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 3, - EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.0") - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 4, - EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.1") - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 5, - EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.success.chance") - + EnumChatFormatting.RESET - + Integer.toString(((((1 + meta) * 8) <= 100) ? ((1 + meta) * 8) : 100)) - + EnumChatFormatting.GRAY - + "%"); - aList.add( - tOffset + 6, - EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.distance.0")); - aList.add( - tOffset + 7, - EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.distance.1")); - - } else if (meta >= 100 && meta < 200) { - aList.add( - tOffset + 0, - EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.durability") - + EnumChatFormatting.GREEN - + (tMaxDamage - getToolDamage(aStack)) - + " / " - + tMaxDamage - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 1, - EnumChatFormatting.WHITE + tMaterial.getLocalizedNameForItem("%material") + EnumChatFormatting.GRAY); - aList.add( - tOffset + 2, - EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.range") - + EnumChatFormatting.YELLOW - + (getHarvestLevel(aStack, "") * 2 + 1) - + "x" - + (getHarvestLevel(aStack, "") * 2 + 1) - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 3, - EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.0")); - aList.add( - tOffset + 4, - EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.1")); - aList.add( - tOffset + 5, - EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.2")); - aList.add( - tOffset + 6, - EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.3")); - aList.add( - tOffset + 7, - EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.4")); - } - - } - - public Long getToolGTDetravData(ItemStack aStack) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if (aNBT != null) return aNBT.getLong("DetravData"); - } - return 0L; - } - - public boolean setToolGTDetravData(ItemStack aStack, long data) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if (aNBT != null) { - aNBT.setLong("DetravData", data); - return true; - } - } - return false; - } - - @SuppressWarnings("unchecked") - public void getDetravSubItems(Item item, CreativeTabs detravCreativeTab, List list) { - - ItemStack dStack; - if (DetravScannerMod.isDreamcraftLoaded) { - // Materials at tiers - list.add(getToolWithStats(0, 1, Materials.Polycaprolactam, Materials.Polycaprolactam, null)); - list.add(getToolWithStats(2, 1, Materials.Steel, Materials.Steel, null)); - list.add(getToolWithStats(2, 1, Materials.Bronze, Materials.Steel, null)); - list.add(getToolWithStats(4, 1, Materials.Manyullyn, Materials.Aluminium, null)); - list.add(getToolWithStats(6, 1, Materials.DamascusSteel, Materials.DamascusSteel, null)); - list.add(getToolWithStats(8, 1, Materials.Titanium, Materials.Titanium, null)); - list.add(getToolWithStats(10, 1, Materials.TungstenSteel, Materials.TungstenSteel, null)); - list.add(getToolWithStats(12, 1, Materials.Iridium, Materials.Iridium, null)); - list.add(getToolWithStats(12, 1, Materials.Osmium, Materials.Osmium, null)); - list.add(getToolWithStats(14, 1, Materials.Neutronium, Materials.Neutronium, null)); - list.add(getToolWithStats(16, 1, Materials.InfinityCatalyst, Materials.InfinityCatalyst, null)); - list.add(getToolWithStats(18, 1, Materials.Infinity, Materials.Infinity, null)); - } - - // Steel for comparison - list.add(getToolWithStats(0, 1, Materials.Steel, Materials.Steel, null)); - list.add(getToolWithStats(2, 1, Materials.Steel, Materials.Steel, null)); - list.add(getToolWithStats(4, 1, Materials.Steel, Materials.Steel, null)); - list.add(getToolWithStats(6, 1, Materials.Steel, Materials.Steel, null)); - list.add(getToolWithStats(8, 1, Materials.Steel, Materials.Steel, null)); - list.add(getToolWithStats(10, 1, Materials.Steel, Materials.Steel, null)); - list.add(getToolWithStats(12, 1, Materials.Steel, Materials.Steel, null)); - list.add(getToolWithStats(14, 1, Materials.Steel, Materials.Steel, null)); - list.add(getToolWithStats(16, 1, Materials.Steel, Materials.Steel, null)); - list.add(getToolWithStats(18, 1, Materials.Steel, Materials.Steel, null)); - - // Electric Scanners - dStack = getToolWithStats( - 100, - 1, - Materials.Iridium, - Materials.TungstenSteel, - new long[] { 102400000L, GT_Values.V[6], 6L, -1L }); - setCharge(dStack, 102400000L); - list.add(dStack); - - dStack = getToolWithStats( - 102, - 1, - Materials.Neutronium, - Materials.TungstenSteel, - new long[] { 409600000L, GT_Values.V[7], 7L, -1L }); - setCharge(dStack, 409600000L); - list.add(dStack); - - if (DetravScannerMod.isDreamcraftLoaded) { - dStack = getToolWithStats( - 104, - 1, - Materials.InfinityCatalyst, - Materials.TungstenSteel, - new long[] { 1638400000L, GT_Values.V[8], 8L, -1L }); - setCharge(dStack, 1638400000L); - list.add(dStack); - - dStack = getToolWithStats( - 106, - 1, - Materials.Infinity, - Materials.TungstenSteel, - new long[] { 6553600000L, GT_Values.V[9], 9L, -1L }); - setCharge(dStack, 6553600000L); - list.add(dStack); - } else { - dStack = getToolWithStats( - 106, - 1, - Materials.Neutronium, - Materials.TungstenSteel, - new long[] { 6553600000L, GT_Values.V[9], 9L, -1L }); - setCharge(dStack, 6553600000L); - list.add(dStack); - } - } -} diff --git a/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java b/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java deleted file mode 100644 index d99a8ceec6..0000000000 --- a/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java +++ /dev/null @@ -1,253 +0,0 @@ -package com.detrav.items.behaviours; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.fluids.FluidStack; - -import com.detrav.DetravScannerMod; -import com.detrav.items.DetravMetaGeneratedTool01; -import com.detrav.net.DetravNetwork; -import com.detrav.net.ProspectingPacket; -import com.detrav.utils.BartWorksHelper; -import com.detrav.utils.GTppHelper; -import com.sinthoras.visualprospecting.VisualProspecting_API; - -import cpw.mods.fml.common.Loader; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.common.GT_UndergroundOil; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_TileEntity_Ores; - -/** - * Created by wital_000 on 19.03.2016. - */ -public class BehaviourDetravToolElectricProspector extends BehaviourDetravToolProspector { - - public BehaviourDetravToolElectricProspector(int aCosts) { - super(aCosts); - } - - public ItemStack onItemRightClick(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - if (!aWorld.isRemote) { - int data = DetravMetaGeneratedTool01.INSTANCE.getToolGTDetravData(aStack) - .intValue(); - if (aPlayer.isSneaking()) { - data++; - if (data > 3) data = 0; - switch (data) { - case 0: - aPlayer.addChatMessage( - new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.0"))); - break; - case 1: - aPlayer.addChatMessage( - new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.1"))); - break; - case 2: - aPlayer.addChatMessage( - new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.2"))); - break; - case 3: - aPlayer.addChatMessage( - new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.3"))); - break; - default: - aPlayer.addChatMessage( - new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.error"))); - break; - } - DetravMetaGeneratedTool01.INSTANCE.setToolGTDetravData(aStack, (long) data); - return super.onItemRightClick(aItem, aStack, aWorld, aPlayer); - } - - final DetravMetaGeneratedTool01 tool = (DetravMetaGeneratedTool01) aItem; - final int cX = ((int) aPlayer.posX) >> 4; - final int cZ = ((int) aPlayer.posZ) >> 4; - int size = aItem.getHarvestLevel(aStack, "") + 1; - final List chunks = new ArrayList<>(); - aPlayer.addChatMessage(new ChatComponentText("Scanning...")); - - for (int i = -size; i <= size; i++) - for (int j = -size; j <= size; j++) if (i != -size && i != size && j != -size && j != size) - chunks.add(aWorld.getChunkFromChunkCoords(cX + i, cZ + j)); - size = size - 1; - - final ProspectingPacket packet = new ProspectingPacket( - cX, - cZ, - (int) aPlayer.posX, - (int) aPlayer.posZ, - size, - data); - final String small_ore_keyword = StatCollector.translateToLocal("detrav.scanner.small_ore.keyword"); - for (Chunk c : chunks) { - for (int x = 0; x < 16; x++) for (int z = 0; z < 16; z++) { - final int ySize = c.getHeightValue(x, z); - for (int y = 1; y < ySize; y++) { - switch (data) { - case 0: - case 1: - final Block tBlock = c.getBlock(x, y, z); - short tMetaID = (short) c.getBlockMetadata(x, y, z); - if (tBlock instanceof GT_Block_Ores_Abstract) { - TileEntity tTileEntity = c.getTileEntityUnsafe(x, y, z); - if ((tTileEntity instanceof GT_TileEntity_Ores) - && ((GT_TileEntity_Ores) tTileEntity).mNatural) { - tMetaID = (short) ((GT_TileEntity_Ores) tTileEntity).getMetaData(); - try { - String name = GT_LanguageManager - .getTranslation(tBlock.getUnlocalizedName() + "." + tMetaID + ".name"); - if (data != 1 && name.startsWith(small_ore_keyword)) continue; - packet.addBlock(c.xPosition * 16 + x, y, c.zPosition * 16 + z, tMetaID); - } catch (Exception e) { - String name = tBlock.getUnlocalizedName() + "."; - if (data != 1 && name.contains(".small.")) continue; - packet.addBlock(c.xPosition * 16 + x, y, c.zPosition * 16 + z, tMetaID); - } - } - } else if (DetravScannerMod.isGTppLoaded && GTppHelper.isGTppBlock(tBlock)) { - packet.addBlock( - c.xPosition * 16 + x, - y, - c.zPosition * 16 + z, - GTppHelper.getGTppMeta(tBlock)); - } else if (DetravScannerMod.isBartWorksLoaded && BartWorksHelper.isOre(tBlock)) { - if (data != 1 && BartWorksHelper.isSmallOre(tBlock)) continue; - packet.addBlock( - c.xPosition * 16 + x, - y, - c.zPosition * 16 + z, - BartWorksHelper.getMetaFromBlock(c, x, y, z, tBlock)); - } else if (data == 1) { - ItemData tAssotiation = GT_OreDictUnificator - .getAssociation(new ItemStack(tBlock, 1, tMetaID)); - if ((tAssotiation != null) && (tAssotiation.mPrefix.toString() - .startsWith("ore"))) { - packet.addBlock( - c.xPosition * 16 + x, - y, - c.zPosition * 16 + z, - (short) tAssotiation.mMaterial.mMaterial.mMetaItemSubID); - } - } - break; - case 2: - if ((x == 0) || (z == 0)) { // Skip doing the locations with the grid on them. - break; - } - FluidStack fStack = GT_UndergroundOil.undergroundOil( - aWorld.getChunkFromBlockCoords(c.xPosition * 16 + x, c.zPosition * 16 + z), - -1); - if (fStack.amount > 0) { - packet.addBlock( - c.xPosition * 16 + x, - 1, - c.zPosition * 16 + z, - (short) fStack.getFluidID()); - packet - .addBlock(c.xPosition * 16 + x, 2, c.zPosition * 16 + z, (short) fStack.amount); - } - break; - case 3: - float polution = (float) getPolution( - aWorld, - c.xPosition * 16 + x, - c.zPosition * 16 + z); - polution /= 2000000; - polution *= -0xFF; - if (polution > 0xFF) polution = 0xFF; - polution = 0xFF - polution; - packet.addBlock(c.xPosition * 16 + x, 1, c.zPosition * 16 + z, (short) polution); - break; - } - if (data > 1) break; - } - } - } - packet.level = ((DetravMetaGeneratedTool01) aItem).getHarvestLevel(aStack, ""); - DetravNetwork.INSTANCE.sendToPlayer(packet, (EntityPlayerMP) aPlayer); - if (!aPlayer.capabilities.isCreativeMode) tool.doDamage(aStack, this.mCosts * chunks.size()); - - if (Loader.isModLoaded("visualprospecting")) { - if (data == 0 || data == 1) { - VisualProspecting_API.LogicalServer.sendProspectionResultsToClient( - (EntityPlayerMP) aPlayer, - VisualProspecting_API.LogicalServer.prospectOreVeinsWithinRadius( - aWorld.provider.dimensionId, - (int) aPlayer.posX, - (int) aPlayer.posZ, - size * 16), - new ArrayList<>()); - } else if (data == 2) { - VisualProspecting_API.LogicalServer.sendProspectionResultsToClient( - (EntityPlayerMP) aPlayer, - new ArrayList<>(), - VisualProspecting_API.LogicalServer.prospectUndergroundFluidsWithingRadius( - aWorld, - (int) aPlayer.posX, - (int) aPlayer.posZ, - size * 16)); - } - } - } - return super.onItemRightClick(aItem, aStack, aWorld, aPlayer); - } - - void addChatMassageByValue(EntityPlayer aPlayer, int value, String name) { - if (value < 0) { - aPlayer.addChatMessage( - new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name)); - } else if (value < 1) { - aPlayer - .addChatMessage(new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6"))); - } else aPlayer.addChatMessage( - new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name + " " + value)); - } - - public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) { - long data = DetravMetaGeneratedTool01.INSTANCE.getToolGTDetravData(aStack); - if (data < 2) { - if (aWorld.getBlock(aX, aY, aZ) == Blocks.bedrock) { - if (!aWorld.isRemote) { - FluidStack fStack = GT_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1); - addChatMassageByValue(aPlayer, fStack.amount, fStack.getLocalizedName()); - if (!aPlayer.capabilities.isCreativeMode) - ((DetravMetaGeneratedTool01) aItem).doDamage(aStack, this.mCosts); - } - return true; - } else { - if (!aWorld.isRemote) { - prospectSingleChunk((DetravMetaGeneratedTool01) aItem, aStack, aPlayer, aWorld, aX, aY, aZ); - } - return true; - } - } - if (data < 3) if (!aWorld.isRemote) { - FluidStack fStack = GT_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1); - addChatMassageByValue(aPlayer, fStack.amount, fStack.getLocalizedName()); - if (!aPlayer.capabilities.isCreativeMode) ((DetravMetaGeneratedTool01) aItem).doDamage(aStack, this.mCosts); - return true; - } - if (!aWorld.isRemote) { - int polution = getPolution(aWorld, aX, aZ); - addChatMassageByValue(aPlayer, polution, "Pollution"); - } - return true; - } - -} diff --git a/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolProspector.java b/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolProspector.java deleted file mode 100644 index 66ef237593..0000000000 --- a/src/main/java/com/detrav/items/behaviours/BehaviourDetravToolProspector.java +++ /dev/null @@ -1,421 +0,0 @@ -package com.detrav.items.behaviours; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.SplittableRandom; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.fluids.FluidStack; - -import com.detrav.DetravScannerMod; -import com.detrav.items.DetravMetaGeneratedTool01; -import com.detrav.utils.BartWorksHelper; -import com.detrav.utils.GTppHelper; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.sinthoras.visualprospecting.VisualProspecting_API; - -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.registry.LanguageRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.common.GT_Pollution; -import gregtech.common.GT_UndergroundOil; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_TileEntity_Ores; -import gregtech.common.items.behaviors.Behaviour_None; - -/** - * Created by wital_000 on 19.03.2016. - */ -public class BehaviourDetravToolProspector extends Behaviour_None { - - static final int[] DISTANCEINTS = new int[] { 0, 4, 25, 64 }; - int distTextIndex; - - HashMap ores; - int badluck; - - protected final int mCosts; - - static final String CHAT_MSG_SEPARATOR = "--------------------"; - - public BehaviourDetravToolProspector(int aCosts) { - mCosts = aCosts; - } - - public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, int aSide, float hitX, float hitY, float hitZ) { - - SplittableRandom aRandom = new SplittableRandom(); - int chance = ((1 + aStack.getItemDamage()) * 8) > 100 ? 100 : (1 + aStack.getItemDamage()) * 8; - - if (aWorld.isRemote) return false; - - if (aWorld.getBlock(aX, aY, aZ) == Blocks.bedrock) { - if (!aWorld.isRemote && aRandom.nextInt(100) < chance) { - FluidStack fStack = GT_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1); - addChatMassageByValue(aPlayer, fStack.amount / 2, "a Fluid");// fStack.getLocalizedName()); - /* - * boolean fluid = GT_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1)!=null - * &>_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1).getFluid()!=null; if - * (fluid) aPlayer.addChatMessage(new - * ChatComponentText(EnumChatFormatting.GREEN+"You found some liquid.")); else - * aPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED+"You found no liquid.")); - */ - if (!aPlayer.capabilities.isCreativeMode) - ((DetravMetaGeneratedTool01) aItem).doDamage(aStack, this.mCosts); - - if (Loader.isModLoaded("visualprospecting")) { - VisualProspecting_API.LogicalServer.sendProspectionResultsToClient( - (EntityPlayerMP) aPlayer, - new ArrayList<>(), - VisualProspecting_API.LogicalServer - .prospectUndergroundFluidsWithingRadius(aWorld, (int) aPlayer.posX, (int) aPlayer.posZ, 0)); - } - } - return true; - } - if (aWorld.getBlock(aX, aY, aZ) - .getMaterial() == Material.rock - || aWorld.getBlock(aX, aY, aZ) - .getMaterial() == Material.ground - || aWorld.getBlock(aX, aY, aZ) == GregTech_API.sBlockOres1) { - if (!aWorld.isRemote) { - prospectChunks((DetravMetaGeneratedTool01) aItem, aStack, aPlayer, aWorld, aX, aY, aZ, aRandom, chance); - } - return true; - } - return false; - } - - protected void prospectChunks(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, SplittableRandom aRandom, int chance) { - int bX = aX; - int bZ = aZ; - - badluck = 0; - ores = new HashMap<>(); - - int range = ((DetravMetaGeneratedTool01) aItem).getHarvestLevel(aStack, "") / 2 + (aStack.getItemDamage() / 4); - if ((range % 2) == 0) { - range += 1; // kinda not needed here, divide takes it out, but we put it back in with the range+1 in the - // loop - } - range = range / 2; // Convert range from diameter to radius - - aPlayer.addChatMessage( - new ChatComponentText( - EnumChatFormatting.GOLD + GT_LanguageManager.sEnglishFile - .get("LanguageFile", "gt.scanner.prospecting", "Prospecting at ") - .getString() + EnumChatFormatting.BLUE + "(" + bX + ", " + bZ + ")")); - for (int x = -(range); x < (range + 1); ++x) { - aX = bX + (x * 16); - for (int z = -(range); z < (range + 1); ++z) { - - aZ = bZ + (z * 16); - int dist = x * x + z * z; - - for (distTextIndex = 0; distTextIndex < DISTANCEINTS.length; distTextIndex++) { - if (dist <= DISTANCEINTS[distTextIndex]) { - break; - } - } - if (DetravScannerMod.DEBUG_ENABLED) aPlayer.addChatMessage( - new ChatComponentText( - EnumChatFormatting.YELLOW + "Chunk at " - + aX - + "|" - + aZ - + " to " - + (aX + 16) - + "|" - + (aZ + 16) - + StatCollector.translateToLocal("detrav.scanner.distance.texts." + distTextIndex))); - processOreProspecting( - (DetravMetaGeneratedTool01) aItem, - aStack, - aPlayer, - aWorld.getChunkFromBlockCoords(aX, aZ), - aWorld.getTileEntity(aX, aY, aZ), - GT_OreDictUnificator.getAssociation( - new ItemStack(aWorld.getBlock(aX, aY, aZ), 1, aWorld.getBlockMetadata(aX, aY, aZ))), - aRandom, - chance); - } - } - - // List to hold unsorted scanner messages - List oreMessages = new ArrayList(); - - for (String key : ores.keySet()) { - int value = ores.get(key); - appendChatMessageByValue(oreMessages, aPlayer, value, key); - } - - // Define sort order by distance - List sortOrder = Arrays.asList( - StatCollector.translateToLocal("detrav.scanner.distance.texts.4"), - StatCollector.translateToLocal("detrav.scanner.distance.texts.3"), - StatCollector.translateToLocal("detrav.scanner.distance.texts.2"), - StatCollector.translateToLocal("detrav.scanner.distance.texts.1"), - StatCollector.translateToLocal("detrav.scanner.distance.texts.0")); - - List oreMessagesSorted = new ArrayList(); - oreMessagesSorted.add(new ChatComponentText(CHAT_MSG_SEPARATOR)); - - // Sort ore messages by distance, separated by ----- - for (String oreFrequency : sortOrder) { - for (ChatComponentText msg : oreMessages) { - if (msg.getChatComponentText_TextValue() - .contains(oreFrequency)) { - oreMessagesSorted.add(msg); - } - } - - // Only append ----- separator if text has been added - if (!oreMessagesSorted.get(oreMessagesSorted.size() - 1) - .getChatComponentText_TextValue() - .contains(CHAT_MSG_SEPARATOR)) { - oreMessagesSorted.add(new ChatComponentText(CHAT_MSG_SEPARATOR)); - } - } - - if (badluck == 0) { - oreMessages.add( - new ChatComponentText( - EnumChatFormatting.WHITE + StatCollector.translateToLocal("detrav.scanner.success"))); - } else { - oreMessages.add( - new ChatComponentText( - EnumChatFormatting.WHITE + StatCollector.translateToLocal("detrav.scanner.fail") - .replace("%badluck", Integer.toString(badluck)))); - } - - // Print the sorted messages - for (ChatComponentText msg : oreMessagesSorted) { - aPlayer.addChatMessage(msg); - } - - if (Loader.isModLoaded("visualprospecting")) { - VisualProspecting_API.LogicalServer.sendProspectionResultsToClient( - (EntityPlayerMP) aPlayer, - VisualProspecting_API.LogicalServer.prospectOreVeinsWithinRadius( - aWorld.provider.dimensionId, - (int) aPlayer.posX, - (int) aPlayer.posZ, - range * 16), - new ArrayList<>()); - } - } - - // Used by Electric scanner when scanning the chunk whacked by the scanner. 100% chance find rate - protected void prospectSingleChunk(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, - int aX, int aY, int aZ) { - ores = new HashMap<>(); - aPlayer.addChatMessage( - new ChatComponentText( - EnumChatFormatting.GOLD + StatCollector.translateToLocal( - "detrav.scanner.prospecting") + EnumChatFormatting.BLUE + "(" + aX + ", " + aZ + ")")); - processOreProspecting( - (DetravMetaGeneratedTool01) aItem, - aStack, - aPlayer, - aWorld.getChunkFromBlockCoords(aX, aZ), - aWorld.getTileEntity(aX, aY, aZ), - GT_OreDictUnificator - .getAssociation(new ItemStack(aWorld.getBlock(aX, aY, aZ), 1, aWorld.getBlockMetadata(aX, aY, aZ))), - new SplittableRandom(), - 1000); - - for (String key : ores.keySet()) { - int value = ores.get(key); - addChatMassageByValue(aPlayer, value, key); - } - - if (Loader.isModLoaded("visualprospecting")) { - VisualProspecting_API.LogicalServer.sendProspectionResultsToClient( - (EntityPlayerMP) aPlayer, - VisualProspecting_API.LogicalServer.prospectOreVeinsWithinRadius( - aWorld.provider.dimensionId, - (int) aPlayer.posX, - (int) aPlayer.posZ, - 0), - new ArrayList<>()); - } - } - - protected void processOreProspecting(DetravMetaGeneratedTool01 aItem, ItemStack aStack, EntityPlayer aPlayer, - Chunk aChunk, TileEntity aTileEntity, ItemData tAssotiation, SplittableRandom aRandom, int chance)// TileEntity - // aTileEntity) - { - if (aTileEntity != null) { - if (aTileEntity instanceof GT_TileEntity_Ores) { - GT_TileEntity_Ores gt_entity = (GT_TileEntity_Ores) aTileEntity; - short meta = gt_entity.getMetaData(); - String format = LanguageRegistry.instance() - .getStringLocalization("gt.blockores." + meta + ".name"); - String name = Materials.getLocalizedNameForItem(format, meta % 1000); - addOreToHashMap(name, aPlayer); - if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts); - return; - } - } else if (tAssotiation != null) { - try { - String name = tAssotiation.toString(); - addChatMassageByValue(aPlayer, -1, name); - if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts); - return; - } catch (Exception e) { - addChatMassageByValue(aPlayer, -1, "ERROR, lol ^_^"); - } - } else if (aRandom.nextInt(100) < chance) { - final int data = DetravMetaGeneratedTool01.INSTANCE.getToolGTDetravData(aStack) - .intValue(); - final String small_ore_keyword = StatCollector.translateToLocal("detrav.scanner.small_ore.keyword"); - for (int x = 0; x < 16; x++) for (int z = 0; z < 16; z++) { - int ySize = aChunk.getHeightValue(x, z); - for (int y = 1; y < ySize; y++) { - - Block tBlock = aChunk.getBlock(x, y, z); - short tMetaID = (short) aChunk.getBlockMetadata(x, y, z); - if (tBlock instanceof GT_Block_Ores_Abstract) { - TileEntity tTileEntity = aChunk.getTileEntityUnsafe(x, y, z); - if ((tTileEntity instanceof GT_TileEntity_Ores) - && ((GT_TileEntity_Ores) tTileEntity).mNatural) { - tMetaID = (short) ((GT_TileEntity_Ores) tTileEntity).getMetaData(); - try { - String format = LanguageRegistry.instance() - .getStringLocalization(tBlock.getUnlocalizedName() + "." + tMetaID + ".name"); - String name = Materials.getLocalizedNameForItem(format, tMetaID % 1000); - if (data != 1 && name.startsWith(small_ore_keyword)) continue; - addOreToHashMap(name, aPlayer); - } catch (Exception e) { - String name = tBlock.getUnlocalizedName() + "."; - if (data != 1 && name.contains(".small.")) continue; - addOreToHashMap(name, aPlayer); - } - } - } else if (DetravScannerMod.isGTppLoaded && GTppHelper.isGTppBlock(tBlock)) { - String name = GTppHelper.getGTppVeinName(tBlock); - if (!name.isEmpty()) addOreToHashMap(name, aPlayer); - } else if (DetravScannerMod.isBartWorksLoaded && BartWorksHelper.isOre(tBlock)) { - if (data != 1 && BartWorksHelper.isSmallOre(tBlock)) continue; - final Werkstoff werkstoff = Werkstoff.werkstoffHashMap.getOrDefault( - (short) ((BartWorksHelper.getMetaFromBlock(aChunk, x, y, z, tBlock)) * -1), - null); - String type = BartWorksHelper.isSmallOre(tBlock) ? "oreSmall" : "ore"; - String translated = GT_LanguageManager.getTranslation("bw.blocktype." + type); - addOreToHashMap(translated.replace("%material", werkstoff.getLocalizedName()), aPlayer); - } else if (data == 1) { - tAssotiation = GT_OreDictUnificator.getAssociation(new ItemStack(tBlock, 1, tMetaID)); - if ((tAssotiation != null) && (tAssotiation.mPrefix.toString() - .startsWith("ore"))) { - try { - try { - tMetaID = (short) tAssotiation.mMaterial.mMaterial.mMetaItemSubID; - String format = LanguageRegistry.instance() - .getStringLocalization("gt.blockores." + tMetaID + ".name"); - String name = Materials.getLocalizedNameForItem(format, tMetaID % 1000); - addOreToHashMap(name, aPlayer); - } catch (Exception e1) { - String name = tAssotiation.toString(); - addOreToHashMap(name, aPlayer); - } - } catch (Exception ignored) {} - } - } - - } - } - - if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts); - - return; - } else { - if (DetravScannerMod.DEBUG_ENABLED) - aPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + " Failed on this chunk")); - badluck++; - if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts / 4); - } - // addChatMassageByValue(aPlayer,0,null); - } - - void addOreToHashMap(String orename, EntityPlayer aPlayer) { - String oreDistance = orename + StatCollector.translateToLocal("detrav.scanner.distance.texts." + distTextIndex); // orename - // + - // the - // textual - // distance - // of - // the - // ore - if (!ores.containsKey(oreDistance)) { - if (DetravScannerMod.DEBUG_ENABLED) aPlayer - .addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + " Adding to oremap " + oreDistance)); - ores.put(oreDistance, 1); - } else { - int val = ores.get(oreDistance); - ores.put(oreDistance, val + 1); - } - } - - void addChatMassageByValue(EntityPlayer aPlayer, int value, String name) { - if (value < 0) { - aPlayer.addChatMessage( - new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name)); - } else if (value < 1) { - aPlayer - .addChatMessage(new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.0"))); - } else if (value < 10) aPlayer.addChatMessage( - new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.1"))); - else if (value < 30) aPlayer.addChatMessage( - new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.2"))); - else if (value < 60) aPlayer.addChatMessage( - new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.3"))); - else if (value < 100) aPlayer.addChatMessage( - new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.4"))); - else aPlayer.addChatMessage( - new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.5"))); - } - - // Same as addChatMassageByValue but appends to a list of chat messages and spelled correctly - void appendChatMessageByValue(List chatMessageList, EntityPlayer aPlayer, int value, - String name) { - if (value < 0) { - chatMessageList - .add(new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name)); - } else if (value < 1) { - chatMessageList.add(new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.0"))); - } else if (value < 10) chatMessageList - .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.1"))); - else if (value < 30) chatMessageList - .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.2"))); - else if (value < 60) chatMessageList - .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.3"))); - else if (value < 100) chatMessageList - .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.4"))); - else chatMessageList - .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.5"))); - } - - public static int getPolution(World aWorld, int aX, int aZ) { - return GT_Pollution.getPollution(aWorld.getChunkFromBlockCoords(aX, aZ)); - } -} diff --git a/src/main/java/com/detrav/items/processing/ProcessingDetravToolProspector.java b/src/main/java/com/detrav/items/processing/ProcessingDetravToolProspector.java deleted file mode 100644 index a08103afea..0000000000 --- a/src/main/java/com/detrav/items/processing/ProcessingDetravToolProspector.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.detrav.items.processing; - -import static com.detrav.DetravScannerMod.DEBUG_ENABLED; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.detrav.items.DetravMetaGeneratedTool01; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; - -/** - * Created by wital_000 on 18.03.2016. - */ -public class ProcessingDetravToolProspector implements gregtech.api.interfaces.IOreRecipeRegistrator { - - public ProcessingDetravToolProspector() { - OrePrefixes.toolHeadPickaxe.add(this); - } - - public void registerOre(OrePrefixes aPrefix, Materials material, String aOreDictName, String aModName, - ItemStack aStack) { - if (!aPrefix.doGenerateItem(material)) return; - if (DEBUG_ENABLED) return; - try { - // ULV disabled - // GT_ModHandler.addCraftingRecipe(DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(0, 1, aMaterial, - // Materials.Lead, null), GT_ModHandler.RecipeBits.DISMANTLEABLE | - // GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, new - // Object[]{"SHE","CPC","PXP",'E',OreDictionary.getOres("cellSulfuricAcid").get(0),'S',OreDictionary.getOres("cellHydroxide").get(0),'H',OrePrefixes.toolHeadDrill.get(aMaterial),'P',OrePrefixes.plate.get(aMaterial),'C',OrePrefixes.circuit.get(Materials.Primitive),'X',gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList.Sensor_ULV}); - GT_ModHandler.addCraftingRecipe( - DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(2, 1, material, Materials.Steel, null), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellSulfuricAcid") - .get(0), 'S', - OreDictionary.getOres("cellHydroxide") - .get(0), - 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', - OrePrefixes.circuit.get(Materials.Basic), 'X', ItemList.Sensor_LV }); - GT_ModHandler.addCraftingRecipe( - DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(4, 1, material, Materials.Steel, null), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellSulfuricAcid") - .get(0), 'S', - OreDictionary.getOres("cellHydroxide") - .get(0), - 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', - OrePrefixes.circuit.get(Materials.Good), 'X', ItemList.Sensor_MV }); - - GT_ModHandler.addCraftingRecipe( - DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(6, 1, material, Materials.Steel, null), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellNitricAcid") - .get(0), 'S', - OreDictionary.getOres("cellSodiumPersulfate") - .get(0), - 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', - OrePrefixes.circuit.get(Materials.Advanced), 'X', ItemList.Sensor_HV }); - GT_ModHandler.addCraftingRecipe( - DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(8, 1, material, Materials.Steel, null), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellNitricAcid") - .get(0), 'S', - OreDictionary.getOres("cellSodiumPersulfate") - .get(0), - 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', - OrePrefixes.circuit.get(Materials.Data), 'X', ItemList.Sensor_EV }); - GT_ModHandler.addCraftingRecipe( - DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(10, 1, material, Materials.Steel, null), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellNitricAcid") - .get(0), 'S', - OreDictionary.getOres("cellSodiumPersulfate") - .get(0), - 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', - OrePrefixes.circuit.get(Materials.Elite), 'X', ItemList.Sensor_IV }); - - GT_ModHandler.addCraftingRecipe( - DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(12, 1, material, Materials.Steel, null), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid") - .get(0), 'S', - OreDictionary.getOres("cellLithiumPeroxide") - .get(0), - 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', - OrePrefixes.circuit.get(Materials.Master), 'X', ItemList.Sensor_LuV }); - GT_ModHandler.addCraftingRecipe( - DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(14, 1, material, Materials.Steel, null), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid") - .get(0), 'S', - OreDictionary.getOres("cellLithiumPeroxide") - .get(0), - 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', - OrePrefixes.circuit.get(Materials.Ultimate), 'X', ItemList.Sensor_ZPM }); - GT_ModHandler.addCraftingRecipe( - DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(16, 1, material, Materials.Steel, null), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid") - .get(0), 'S', - OreDictionary.getOres("cellLithiumPeroxide") - .get(0), - 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', - OrePrefixes.circuit.get(Materials.SuperconductorUHV), 'X', ItemList.Sensor_UV }); - - GT_ModHandler.addCraftingRecipe( - DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(18, 1, material, Materials.Steel, null), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid") - .get(0), 'S', - OreDictionary.getOres("cellHydrogenPeroxide") - .get(0), - 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', - OrePrefixes.circuit.get(Materials.Infinite), 'X', ItemList.Sensor_UHV }); - - } catch (Exception ignored) {} - - } -} diff --git a/src/main/java/com/detrav/items/tools/DetravProspector.java b/src/main/java/com/detrav/items/tools/DetravProspector.java deleted file mode 100644 index e6328844c8..0000000000 --- a/src/main/java/com/detrav/items/tools/DetravProspector.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.detrav.items.tools; - -import net.minecraft.item.ItemStack; - -import com.detrav.enums.Textures01; -import com.detrav.items.behaviours.BehaviourDetravToolProspector; - -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public class DetravProspector extends DetravToolElectricProspectorBase { - - private final int tier; - - public DetravProspector(int tier) { - this.tier = tier; - } - - public int getBaseQuality() { - return tier; - } - - public float getMaxDurabilityMultiplier() { - double x = tier + 1; - return (float) (((float) 0.005D + Math.tanh(Math.pow(x, (x / 8D)) / 25D) * (x / 6D)) * 1.25); - } - - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return Textures01.mTextures[0]; - } - - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new BehaviourDetravToolProspector(15)); - } -} diff --git a/src/main/java/com/detrav/items/tools/DetravToolElectricProspector.java b/src/main/java/com/detrav/items/tools/DetravToolElectricProspector.java deleted file mode 100644 index 21eb432148..0000000000 --- a/src/main/java/com/detrav/items/tools/DetravToolElectricProspector.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.detrav.items.tools; - -import net.minecraft.item.ItemStack; - -import com.detrav.enums.Textures01; - -import gregtech.api.interfaces.IIconContainer; - -/** - * Created by wital_000 on 19.03.2016. - */ -public class DetravToolElectricProspector extends DetravToolElectricProspectorBase { - - private final int tier; - - public DetravToolElectricProspector(int tier) { - this.tier = tier; - } - - public int getBaseQuality() { - return tier - 6; - } - - public float getMaxDurabilityMultiplier() { - if (tier - 6 == 0) return (float) Math.pow(((float) ((tier - 6F) * 2F)), 0.0D); - else return (float) ((tier - 6F) * 2F); - } - - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - - if (tier <= 9 && tier >= 6) return Textures01.mTextures[tier - 5]; - else return Textures01.mTextures[1]; - } -} diff --git a/src/main/java/com/detrav/items/tools/DetravToolElectricProspectorBase.java b/src/main/java/com/detrav/items/tools/DetravToolElectricProspectorBase.java deleted file mode 100644 index d195068fe8..0000000000 --- a/src/main/java/com/detrav/items/tools/DetravToolElectricProspectorBase.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.detrav.items.tools; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.stats.AchievementList; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraft.world.World; -import net.minecraftforge.event.world.BlockEvent; - -import com.detrav.enums.Textures01; -import com.detrav.items.behaviours.BehaviourDetravToolElectricProspector; - -import gregtech.api.GregTech_API; -import gregtech.api.damagesources.GT_DamageSources; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.IToolStats; -import gregtech.api.items.GT_MetaGenerated_Tool; - -/** - * Created by wital_000 on 19.03.2016. modified by bartimaeusnek on 05.06.2018 - */ -public class DetravToolElectricProspectorBase implements IToolStats { - - public int getToolDamagePerBlockBreak() { - return 100; - } - - public int getToolDamagePerDropConversion() { - return 100; - } - - public int getToolDamagePerContainerCraft() { - return 100; - } - - public int getToolDamagePerEntityAttack() { - return 2000; - } - - public int getBaseQuality() { - return 0; - } - - public float getBaseDamage() { - return 1.0F; - } - - @Override - public int getHurtResistanceTime(int i, Entity entity) { - return i; - } - - public float getSpeedMultiplier() { - return 1.0F; - } - - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public DamageSource getDamageSource(EntityLivingBase aPlayer, Entity aEntity) { - return GT_DamageSources.getCombatDamage( - (aPlayer instanceof EntityPlayer) ? "player" : "mob", - aPlayer, - (aEntity instanceof EntityLivingBase) ? getDeathMessage(aPlayer, (EntityLivingBase) aEntity) : null); - } - - public String getCraftingSound() { - return null; - } - - public String getEntityHitSound() { - return null; - } - - public String getBreakingSound() { - return (String) GregTech_API.sSoundList.get(0); - } - - @Override - public Enchantment[] getEnchantments(ItemStack itemStack) { - return new Enchantment[0]; - } - - @Override - public int[] getEnchantmentLevels(ItemStack itemStack) { - return new int[0]; - } - - public String getMiningSound() { - return null; - } - - public boolean canBlock() { - return false; - } - - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isGrafter() { - return false; - } - - @Override - public boolean isChainsaw() { - return false; - } - - @Override - public boolean isWrench() { - return false; - } - - @Override - public boolean isWeapon() { - return false; - } - - @Override - public boolean isRangedWeapon() { - return false; - } - - @Override - public boolean isMiningTool() { - return false; - } - - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - - return false; - } - - @Override - public int convertBlockDrops(List list, ItemStack itemStack, EntityPlayer entityPlayer, Block block, - int i, int i1, int i2, byte b, int i3, boolean b1, BlockEvent.HarvestDropsEvent harvestDropsEvent) { - return 0; - } - - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public float getNormalDamageAgainstEntity(float v, Entity entity, ItemStack itemStack, EntityPlayer entityPlayer) { - return v; - } - - @Override - public float getMagicDamageAgainstEntity(float v, Entity entity, ItemStack itemStack, EntityPlayer entityPlayer) { - return v; - } - - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return Textures01.mTextures[0]; - } - - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new BehaviourDetravToolElectricProspector(getToolDamagePerBlockBreak())); - } - - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { - - aPlayer.triggerAchievement(AchievementList.openInventory); - aPlayer.triggerAchievement(AchievementList.mineWood); - aPlayer.triggerAchievement(AchievementList.buildWorkBench); - } - - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " got Pick Up'ed by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } - - public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World aWorld, - int aX, int aY, int aZ) { - return aDefault; - } -} diff --git a/src/main/java/com/detrav/net/DetravNetwork.java b/src/main/java/com/detrav/net/DetravNetwork.java deleted file mode 100644 index 0b4dbc1af4..0000000000 --- a/src/main/java/com/detrav/net/DetravNetwork.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.detrav.net; - -import java.util.EnumMap; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayerMP; - -import cpw.mods.fml.common.network.FMLEmbeddedChannel; -import cpw.mods.fml.common.network.FMLOutboundHandler; -import cpw.mods.fml.common.network.NetworkRegistry; -import cpw.mods.fml.common.network.internal.FMLProxyPacket; -import cpw.mods.fml.relauncher.Side; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufInputStream; -import io.netty.buffer.ByteBufOutputStream; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; -import io.netty.handler.codec.MessageToMessageCodec; - -/** - * Created by wital_000 on 20.03.2016. - */ -@ChannelHandler.Sharable -public class DetravNetwork extends MessageToMessageCodec { - - static public DetravNetwork INSTANCE; - private final EnumMap mChannel; - - public DetravNetwork() { - INSTANCE = this; - this.mChannel = NetworkRegistry.INSTANCE.newChannel("DetravScanner", this, new HandlerShared()); - } - - @Override - protected void encode(ChannelHandlerContext ctx, DetravPacket msg, List out) throws Exception { - ByteBuf buf = Unpooled.buffer(); - buf.writeByte(msg.getPacketID()); - msg.encode(new ByteBufOutputStream(buf)); - out.add( - new FMLProxyPacket( - buf, - ctx.channel() - .attr(NetworkRegistry.FML_CHANNEL) - .get())); - } - - @Override - protected void decode(ChannelHandlerContext ctx, FMLProxyPacket msg, List out) throws Exception { - ByteBuf payload = msg.payload(); - payload.readByte(); // Sub Channel - Ignore - out.add(ProspectingPacket.decode(new ByteBufInputStream(payload))); - } - - public void sendToPlayer(DetravPacket aPacket, EntityPlayerMP aPlayer) { - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGET) - .set(FMLOutboundHandler.OutboundTarget.PLAYER); - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) - .set(aPlayer); - this.mChannel.get(Side.SERVER) - .writeAndFlush(aPacket); - } - - public void sendToServer(DetravPacket aPacket) { - this.mChannel.get(Side.CLIENT) - .attr(FMLOutboundHandler.FML_MESSAGETARGET) - .set(FMLOutboundHandler.OutboundTarget.TOSERVER); - this.mChannel.get(Side.CLIENT) - .writeAndFlush(aPacket); - } - - @ChannelHandler.Sharable - static final class HandlerShared extends SimpleChannelInboundHandler { - - @Override - protected void channelRead0(ChannelHandlerContext ctx, DetravPacket aPacket) { - aPacket.process(); - } - } -} diff --git a/src/main/java/com/detrav/net/DetravPacket.java b/src/main/java/com/detrav/net/DetravPacket.java deleted file mode 100644 index 8659549045..0000000000 --- a/src/main/java/com/detrav/net/DetravPacket.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.detrav.net; - -import java.io.IOException; -import java.io.OutputStream; - -/** - * Created by wital_000 on 20.03.2016. - */ -public abstract class DetravPacket { - - public abstract int getPacketID(); - - public abstract void encode(OutputStream out) throws IOException; - - public abstract void process(); -} diff --git a/src/main/java/com/detrav/net/ProspectingPacket.java b/src/main/java/com/detrav/net/ProspectingPacket.java deleted file mode 100644 index 23e881f86a..0000000000 --- a/src/main/java/com/detrav/net/ProspectingPacket.java +++ /dev/null @@ -1,191 +0,0 @@ -package com.detrav.net; - -import java.io.DataInput; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.HashMap; -import java.util.zip.GZIPInputStream; -import java.util.zip.GZIPOutputStream; - -import net.minecraft.util.StatCollector; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.detrav.DetravScannerMod; -import com.detrav.gui.DetravScannerGUI; -import com.detrav.gui.textures.DetravMapTexture; -import com.detrav.utils.GTppHelper; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.google.common.base.Objects; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.util.GT_LanguageManager; - -/** - * Created by wital_000 on 20.03.2016. - */ -public class ProspectingPacket extends DetravPacket { - - public final int chunkX; - public final int chunkZ; - public final int posX; - public final int posZ; - public final int size; - public final int ptype; - public final HashMap[][] map; - public final HashMap ores; - public final HashMap metaMap; - public static final HashMap fluidColors = new HashMap<>(); - - public int level = -1; - - public ProspectingPacket(int chunkX, int chunkZ, int posX, int posZ, int size, int ptype) { - this.chunkX = chunkX; - this.chunkZ = chunkZ; - this.posX = posX; - this.posZ = posZ; - this.size = size; - this.ptype = ptype; - this.map = new HashMap[(size * 2 + 1) * 16][(size * 2 + 1) * 16]; - this.ores = new HashMap<>(); - this.metaMap = new HashMap<>(); - } - - private static void addOre(ProspectingPacket packet, byte y, int i, int j, short meta) { - final String name; - short[] rgba; - - try { - if (packet.ptype == 0 || packet.ptype == 1) { - // Ore or Small Ore - if (meta < 7000 || meta > 7500) { - if (meta > 0) { - Materials tMaterial = GregTech_API.sGeneratedMaterials[meta % 1000]; - rgba = tMaterial.getRGBA(); - name = tMaterial.getLocalizedNameForItem( - GT_LanguageManager.getTranslation("gt.blockores." + meta + ".name")); - } else { - final Werkstoff werkstoff = Werkstoff.werkstoffHashMap.getOrDefault((short) (meta * -1), null); - String translated = GT_LanguageManager.getTranslation("bw.blocktype.ore"); - name = translated.replace("%material", werkstoff.getLocalizedName()); - rgba = werkstoff != null ? werkstoff.getRGBA() : new short[] { 0, 0, 0, 0 }; - } - } else { - gtPlusPlus.core.material.Material pMaterial = GTppHelper.decodeoresGTpp.get((short) (meta - 7000)); - rgba = pMaterial.getRGBA(); - name = pMaterial.getLocalizedName() + " Ore"; - } - } else if (packet.ptype == 2) { - // Fluid - rgba = fluidColors.get((int) meta); - if (rgba == null) { - DetravScannerMod.proxy - .sendPlayerExeption("Unknown fluid ID = " + meta + " Please add to FluidColors.java!"); - rgba = new short[] { 0, 0, 0, 0 }; - } - - name = Objects.firstNonNull( - FluidRegistry.getFluid(meta) - .getLocalizedName(new FluidStack(FluidRegistry.getFluid(meta), 0)), - StatCollector.translateToLocal("gui.detrav.scanner.unknown_fluid")); - } else if (packet.ptype == 3) { - // Pollution - name = StatCollector.translateToLocal("gui.detrav.scanner.pollution"); - rgba = new short[] { 125, 123, 118, 0 }; - } else { - return; - } - } catch (Exception ignored) { - return; - } - packet.ores.put(name, ((rgba[0] & 0xFF) << 16) + ((rgba[1] & 0xFF) << 8) + ((rgba[2] & 0xFF))); - packet.metaMap.put(meta, name); - } - - public static Object decode(InputStream in) throws IOException { - DataInput aData = new DataInputStream(new GZIPInputStream(in)); - ProspectingPacket packet = new ProspectingPacket( - aData.readInt(), - aData.readInt(), - aData.readInt(), - aData.readInt(), - aData.readInt(), - aData.readInt()); - packet.level = aData.readInt(); - - int aSize = (packet.size * 2 + 1) * 16; - int checkOut = 0; - for (int i = 0; i < aSize; i++) for (int j = 0; j < aSize; j++) { - byte kSize = aData.readByte(); - if (kSize == 0) continue; - packet.map[i][j] = new HashMap<>(); - for (int k = 0; k < kSize; k++) { - final byte y = aData.readByte(); - final short meta = aData.readShort(); - packet.map[i][j].put(y, meta); - if (packet.ptype != 2 || y == 1) addOre(packet, y, i, j, meta); - checkOut++; - } - } - int checkOut2 = aData.readInt(); - if (checkOut != checkOut2) return null; - return packet; - } - - @Override - public int getPacketID() { - return 0; - } - - @Override - public void encode(OutputStream out) throws IOException { - DataOutputStream tOut = new DataOutputStream(new GZIPOutputStream(out)); - tOut.writeInt(chunkX); - tOut.writeInt(chunkZ); - tOut.writeInt(posX); - tOut.writeInt(posZ); - tOut.writeInt(size); - tOut.writeInt(ptype); - tOut.writeInt(level); - - int aSize = (size * 2 + 1) * 16; - int checkOut = 0; - for (int i = 0; i < aSize; i++) for (int j = 0; j < aSize; j++) { - HashMap data = map[i][j]; - if (data == null) tOut.writeByte(0); - else { - tOut.writeByte( - data.keySet() - .size()); - for (byte key : data.keySet()) { - tOut.writeByte(key); - tOut.writeShort(data.get(key)); - checkOut++; - } - } - } - tOut.writeInt(checkOut); - tOut.close(); - } - - @Override - public void process() { - DetravScannerGUI.newMap(new DetravMapTexture(this)); - DetravScannerMod.proxy.openProspectorGUI(); - } - - public void addBlock(int x, int y, int z, short metaData) { - int aX = x - (chunkX - size) * 16; - int aZ = z - (chunkZ - size) * 16; - if (map[aX][aZ] == null) map[aX][aZ] = new HashMap<>(); - map[aX][aZ].put((byte) y, metaData); - } - - public int getSize() { - return (size * 2 + 1) * 16; - } -} diff --git a/src/main/java/com/detrav/proxies/ClientProxy.java b/src/main/java/com/detrav/proxies/ClientProxy.java deleted file mode 100644 index bf1b745697..0000000000 --- a/src/main/java/com/detrav/proxies/ClientProxy.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.detrav.proxies; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; - -import com.detrav.DetravScannerMod; -import com.detrav.enums.Textures01; -import com.detrav.gui.DetravScannerGUI; - -/** - * Created by wital_000 on 19.03.2016. - */ -public class ClientProxy extends CommonProxy { - - public ClientProxy() { - int test = Textures01.mTextures.length; - } - - @Override - public void onPostLoad() { - super.onPostLoad(); - } - - @Override - public void onLoad() { - super.onLoad(); - } - - public void openProspectorGUI() { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - player.openGui( - DetravScannerMod.instance, - DetravScannerGUI.GUI_ID, - player.worldObj, - (int) player.posX, - (int) player.posY, - (int) player.posZ); - } - - @Override - public void onPreInit() { - super.onPreInit(); - } - - @Override - public void sendPlayerExeption(String s) { - Minecraft.getMinecraft().thePlayer.sendChatMessage("DetravScannerMod: " + s); - } -} diff --git a/src/main/java/com/detrav/proxies/CommonProxy.java b/src/main/java/com/detrav/proxies/CommonProxy.java deleted file mode 100644 index 62473ec4d7..0000000000 --- a/src/main/java/com/detrav/proxies/CommonProxy.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.detrav.proxies; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -import com.detrav.events.DetravLoginEventHandler; -import com.detrav.gui.DetravScannerGUI; - -import cpw.mods.fml.common.network.IGuiHandler; - -/** - * Created by wital_000 on 19.03.2016. - */ -public class CommonProxy implements IGuiHandler { - - public void onLoad() { - - } - - public void onPostLoad() { - DetravLoginEventHandler.register(); - } - - @Override - public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - switch (ID) { - case DetravScannerGUI.GUI_ID: - return null; - default: - return null; - } - } - - @Override - public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - switch (ID) { - case DetravScannerGUI.GUI_ID: - return new DetravScannerGUI(); - default: - return null; - } - } - - public void openProspectorGUI() { - // just Client code - } - - public void onPreInit() { - - } - - public void sendPlayerExeption(String s) { - - } -} diff --git a/src/main/java/com/detrav/proxies/ServerProxy.java b/src/main/java/com/detrav/proxies/ServerProxy.java deleted file mode 100644 index 46d58450d9..0000000000 --- a/src/main/java/com/detrav/proxies/ServerProxy.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.detrav.proxies; - -/** - * Created by wital_000 on 19.03.2016. - */ -public class ServerProxy extends CommonProxy { - - @Override - public void onPostLoad() { - super.onPostLoad(); - } - - @Override - public void onLoad() { - super.onLoad(); - } - - @Override - public void onPreInit() { - super.onPreInit(); - } -} diff --git a/src/main/java/com/detrav/utils/BartWorksHelper.java b/src/main/java/com/detrav/utils/BartWorksHelper.java deleted file mode 100644 index bac23893c1..0000000000 --- a/src/main/java/com/detrav/utils/BartWorksHelper.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.detrav.utils; - -import net.minecraft.block.Block; -import net.minecraft.world.chunk.Chunk; - -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_Ores; -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_SmallOres; - -public class BartWorksHelper { - - public static boolean isOre(Block tBlock) { - return tBlock instanceof BW_MetaGenerated_Ores; - } - - public static boolean isSmallOre(Block tBlock) { - return tBlock instanceof BW_MetaGenerated_SmallOres; - } - - public static short getMetaFromBlock(Chunk c, int x, int y, int z, Block tBlock) { - return (short) (tBlock.getDamageValue(c.worldObj, c.xPosition * 16 + x, y, c.zPosition * 16 + z) * -1); - } - -} diff --git a/src/main/java/com/detrav/utils/DetravCreativeTab.java b/src/main/java/com/detrav/utils/DetravCreativeTab.java deleted file mode 100644 index ba79c55ab2..0000000000 --- a/src/main/java/com/detrav/utils/DetravCreativeTab.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.detrav.utils; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.init.Items; -import net.minecraft.item.Item; - -import com.detrav.items.DetravMetaGeneratedTool01; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -/** - * Created by wital_000 on 19.03.2016. - */ -public class DetravCreativeTab extends CreativeTabs { - - public DetravCreativeTab() { - super("Detrav Scanner"); - } - - @Override - public Item getTabIconItem() { - return Items.stick; - } - - @Override - @SideOnly(Side.CLIENT) - public void displayAllReleventItems(List p_78018_1_) { - for (Object o : Item.itemRegistry) { - Item item = (Item) o; - - if (item == null) { - continue; - } - - for (CreativeTabs tab : item.getCreativeTabs()) { - if (tab == this) { - item.getSubItems(item, this, p_78018_1_); - if (item instanceof DetravMetaGeneratedTool01) { - ((DetravMetaGeneratedTool01) item).getDetravSubItems(item, this, p_78018_1_); - } - } - } - } - - if (this.func_111225_m() != null) { - this.addEnchantmentBooksToList(p_78018_1_, this.func_111225_m()); - } - } -} diff --git a/src/main/java/com/detrav/utils/FluidColors.java b/src/main/java/com/detrav/utils/FluidColors.java deleted file mode 100644 index 25611dbf3e..0000000000 --- a/src/main/java/com/detrav/utils/FluidColors.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.detrav.utils; - -import static com.detrav.net.ProspectingPacket.fluidColors; - -import java.util.Arrays; -import java.util.Objects; - -import net.minecraftforge.fluids.FluidRegistry; - -import gregtech.api.enums.Materials; - -public class FluidColors { - - public static void makeColors() { - - reFillFluidColors(); - - // ProgressManager.ProgressBar progressBar = ProgressManager.push("Making Fluid Colors", (int) - // (Materials.values().length + - // FluidRegistry.getRegisteredFluids().values().stream().filter(Objects::nonNull).count())); - Arrays.stream(Materials.values()) - .forEach(mat -> { - // progressBar.step(mat.mDefaultLocalName); - if (mat.getSolid(0) != null) fluidColors.putIfAbsent( - mat.getSolid(0) - .getFluidID(), - mat.mRGBa); - if (mat.getGas(0) != null) fluidColors.putIfAbsent( - mat.getGas(0) - .getFluidID(), - mat.mRGBa); - if (mat.getFluid(0) != null) fluidColors.putIfAbsent( - mat.getFluid(0) - .getFluidID(), - mat.mRGBa); - if (mat.getMolten(0) != null) fluidColors.putIfAbsent( - mat.getMolten(0) - .getFluidID(), - mat.mRGBa); - }); - FluidRegistry.getRegisteredFluids() - .values() - .stream() - .filter(Objects::nonNull) - .forEach(fluid -> { - // progressBar.step(fluid.getName()); - fluidColors.putIfAbsent(fluid.getID(), convertColorInt(fluid.getColor())); - }); - // ProgressManager.pop(progressBar); - } - - private static void reFillFluidColors() { - try { - // Should probably be put somewhere else, but I suck at Java - fluidColors.put(Materials.NatruralGas.mGas.getID(), new short[] { 0x00, 0xff, 0xff }); - fluidColors.put(Materials.OilLight.mFluid.getID(), new short[] { 0xff, 0xff, 0x00 }); - fluidColors.put(Materials.OilMedium.mFluid.getID(), new short[] { 0x00, 0xFF, 0x00 }); - fluidColors.put(Materials.OilHeavy.mFluid.getID(), new short[] { 0xFF, 0x00, 0xFF }); - fluidColors.put(Materials.Oil.mFluid.getID(), new short[] { 0x00, 0x00, 0x00 }); - fluidColors.put(Materials.Helium_3.mGas.getID(), new short[] { 0x80, 0x20, 0xe0 }); - fluidColors.put(Materials.SaltWater.mFluid.getID(), new short[] { 0x80, 0xff, 0x80 }); - // fluidColors.put(Materials.Naquadah.getMolten(0).getFluid().getID(), new short[]{0x20, 0x20, 0x20}); - // fluidColors.put(Materials.NaquadahEnriched.getMolten(0).getFluid().getID(), new short[]{0x60, 0x60, - // 0x60}); - fluidColors.put( - Materials.Lead.getMolten(0) - .getFluid() - .getID(), - new short[] { 0xd0, 0xd0, 0xd0 }); - fluidColors.put(Materials.Chlorobenzene.mFluid.getID(), new short[] { 0x40, 0x80, 0x40 }); - fluidColors.put( - FluidRegistry.getFluid("liquid_extra_heavy_oil") - .getID(), - new short[] { 0x00, 0x00, 0x50 }); - fluidColors.put(Materials.Oxygen.mGas.getID(), new short[] { 0x40, 0x40, 0xA0 }); - fluidColors.put(Materials.Nitrogen.mGas.getID(), new short[] { 0x00, 0x80, 0xd0 }); - fluidColors.put(Materials.Methane.mGas.getID(), new short[] { 0x80, 0x20, 0x20 }); - fluidColors.put(Materials.Ethane.mGas.getID(), new short[] { 0x40, 0x80, 0x20 }); - fluidColors.put(Materials.Ethylene.mGas.getID(), new short[] { 0xd0, 0xd0, 0xd0 }); - fluidColors.put(FluidRegistry.LAVA.getID(), new short[] { 0xFF, 0x00, 0x00 }); - fluidColors.put( - FluidRegistry.getFluid("unknowwater") - .getID(), - new short[] { 0x8A, 0x2B, 0xE2 }); - fluidColors.put(Materials.Hydrogen.mGas.getID(), new short[] { 0x32, 0x32, 0xD6 }); - fluidColors.put(Materials.SulfuricAcid.mFluid.getID(), new short[] { 0xFF, 0xB9, 0x0F }); - fluidColors.put(Materials.HydricSulfide.mFluid.getID(), new short[] { 0xFF, 0x8F, 0x43 }); - fluidColors.put(Materials.CarbonMonoxide.mGas.getID(), new short[] { 0x10, 0x4E, 0x8B }); - fluidColors.put(Materials.CarbonDioxide.mGas.getID(), new short[] { 0x69, 0x69, 0x69 }); - fluidColors.put( - FluidRegistry.getFluid("ic2distilledwater") - .getID(), - new short[] { 0x1E, 0x90, 0xFF }); - fluidColors.put(Materials.Deuterium.mGas.getID(), new short[] { 0xFF, 0xE3, 0x9F }); - fluidColors.put( - Materials.Iron.getMolten(0) - .getFluid() - .getID(), - new short[] { 0x8B, 0x88, 0x78 }); - fluidColors.put( - Materials.Tin.getMolten(0) - .getFluid() - .getID(), - new short[] { 0xE7, 0xE7, 0xE4 }); - fluidColors.put( - Materials.Copper.getMolten(0) - .getFluid() - .getID(), - new short[] { 0xFF, 0x7F, 0x24 }); - fluidColors.put( - FluidRegistry.getFluid("fluorine") - .getID(), - new short[] { 0x99, 0xC1, 0xAD }); - fluidColors.put( - FluidRegistry.getFluid("hydrofluoricacid") - .getID(), - new short[] { 0x00, 0xCE, 0xD1 }); - fluidColors.put(Materials.PhosphoricAcid.mFluid.getID(), new short[] { 0xEE, 0x76, 0x00 }); - - // possible nulls - fluidColors.put(Materials.LiquidAir.mFluid.getID(), new short[] { 0x99, 0x99, 0xEA }); - } catch (Exception ignored) {} - /* - * Set set = fluidColors.entrySet(); Iterator iterator = set.iterator(); System.out.println( - * "DETRAV SCANNER DEBUG" ); while(iterator.hasNext()) { Map.Entry mentry = (Map.Entry) iterator.next(); - * System.out.println( "key is: "+ (Integer)mentry.getKey() + " & Value is: " + ((short[])mentry.getValue())[0] - * + " " + ((short[])mentry.getValue())[1] + " " + ((short[])mentry.getValue())[2] ); } - */ - } - - private static short[] convertColorInt(int color) { - return new short[] { (short) (color << 16 & 0xff), (short) (color << 8 & 0xff), (short) (color & 0xff) }; - } - -} diff --git a/src/main/java/com/detrav/utils/GTppHelper.java b/src/main/java/com/detrav/utils/GTppHelper.java deleted file mode 100644 index dd86b3d9f6..0000000000 --- a/src/main/java/com/detrav/utils/GTppHelper.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.detrav.utils; - -import java.util.HashMap; - -import net.minecraft.block.Block; - -import gtPlusPlus.core.block.base.BlockBaseOre; -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.nuclear.FLUORIDES; - -/** - * Created by bartimaeusnek on 19.04.2018. - */ -public class GTppHelper { - - public static final HashMap decodeoresGTpp = new HashMap<>(); - public static final HashMap encodeoresGTpp = new HashMap<>(); - - public static void generate_OreIDs() { - short n = 0; - for (; n < gtPlusPlus.core.material.ORES.class.getFields().length; ++n) { - try { - Short i = (short) (n + 1); - Material m = ((Material) gtPlusPlus.core.material.ORES.class.getFields()[n] - .get(gtPlusPlus.core.material.ORES.class.getFields()[n])); - decodeoresGTpp.put(i, m); - encodeoresGTpp.put(m, i); - } catch (Exception ignored) {} - } - // Manually add ores from other places than the ore class - // Fluorite - decodeoresGTpp.put((short) (++n + 1), FLUORIDES.FLUORITE); - encodeoresGTpp.put(FLUORIDES.FLUORITE, (short) (n + 1)); - // Rare Earths - decodeoresGTpp.put((short) (++n + 1), MISC_MATERIALS.RARE_EARTH_LOW); - encodeoresGTpp.put(MISC_MATERIALS.RARE_EARTH_LOW, (short) (n + 1)); - decodeoresGTpp.put((short) (++n + 1), MISC_MATERIALS.RARE_EARTH_MID); - encodeoresGTpp.put(MISC_MATERIALS.RARE_EARTH_MID, (short) (n + 1)); - decodeoresGTpp.put((short) (++n + 1), MISC_MATERIALS.RARE_EARTH_HIGH); - encodeoresGTpp.put(MISC_MATERIALS.RARE_EARTH_HIGH, (short) (n + 1)); - // Koboldite - decodeoresGTpp.put((short) (++n + 1), ALLOY.KOBOLDITE); - encodeoresGTpp.put(ALLOY.KOBOLDITE, (short) (n + 1)); - // Runite - decodeoresGTpp.put((short) (++n + 1), ELEMENT.STANDALONE.RUNITE); - encodeoresGTpp.put(ELEMENT.STANDALONE.RUNITE, (short) (n + 1)); - // Ancient granite - decodeoresGTpp.put((short) (++n + 1), ELEMENT.STANDALONE.GRANITE); - encodeoresGTpp.put(ELEMENT.STANDALONE.GRANITE, (short) (n + 1)); - } - - public static boolean isGTppBlock(Block tBlock) { - return tBlock instanceof BlockBaseOre; - } - - public static short getGTppMeta(Block tBlock) { - return (short) (GTppHelper.encodeoresGTpp.get(((BlockBaseOre) tBlock).getMaterialEx()) + 7000); - } - - public static String getGTppVeinName(Block tBlock) { - return tBlock.getLocalizedName(); - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/GTNHLanthanides.java b/src/main/java/com/elisis/gtnhlanth/GTNHLanthanides.java deleted file mode 100644 index 1683ca3ea0..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/GTNHLanthanides.java +++ /dev/null @@ -1,83 +0,0 @@ -package com.elisis.gtnhlanth; - -import java.util.logging.Logger; - -import com.elisis.gtnhlanth.common.CommonProxy; -import com.elisis.gtnhlanth.common.register.BotWerkstoffMaterialPool; -import com.elisis.gtnhlanth.common.register.LanthItemList; -import com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool; -import com.elisis.gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeLoader; -import com.elisis.gtnhlanth.loader.BotRecipes; -import com.elisis.gtnhlanth.loader.RecipeLoader; -import com.github.bartimaeusnek.bartworks.API.WerkstoffAdderRegistry; - -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.Mod.EventHandler; -import cpw.mods.fml.common.SidedProxy; -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; - -@Mod( - modid = Tags.MODID, - version = Tags.VERSION, - name = Tags.MODNAME, - dependencies = "required-after:IC2; " + "required-after:gregtech; " - + "required-after:bartworks; " - + "required-after:GoodGenerator; " - + "before:miscutils; ") -public class GTNHLanthanides { - - public static Logger LOG = Logger.getLogger("GTNH:Lanthanides"); - - @Mod.Instance(Tags.MODID) - public static GTNHLanthanides instance; - - @SidedProxy( - clientSide = "com.elisis.gtnhlanth.client.ClientProxy", - serverSide = "com.elisis.gtnhlanth.common.CommonProxy") - public static CommonProxy proxy; - - @EventHandler - public static void preInit(FMLPreInitializationEvent e) { - - WerkstoffAdderRegistry.addWerkstoffAdder(new WerkstoffMaterialPool()); - WerkstoffAdderRegistry.addWerkstoffAdder(new BotWerkstoffMaterialPool()); - - LanthItemList.registerTypical(); - LanthItemList.registerGTMTE(); - - // GregTech_API.sAfterGTPostload.add(new ZPMRubberChanges()); - proxy.preInit(e); - } - - @EventHandler - public static void init(FMLInitializationEvent e) { - proxy.init(e); - WerkstoffMaterialPool.runInit(); - } - - @EventHandler - public static void postInit(FMLPostInitializationEvent e) { - - RecipeLoader.loadGeneral(); - RecipeLoader.loadLanthanideRecipes(); - RecipeLoader.addRandomChemCrafting(); - RecipeLoader.loadAccelerator(); - - BeamlineRecipeLoader.load(); - - BotRecipes.addGTRecipe(); - proxy.postInit(e); - - } - - @EventHandler - public static void onModLoadingComplete(FMLLoadCompleteEvent e) { - - BotRecipes.removeRecipes(); - RecipeLoader.removeCeriumSources(); - - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/Tags.java b/src/main/java/com/elisis/gtnhlanth/Tags.java deleted file mode 100644 index 461eac1db3..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/Tags.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.elisis.gtnhlanth; - -import gregtech.GT_Version; - -public class Tags { - - public static final String MODID = "gtnhlanth"; - public static final String MODNAME = "GTNH: Lanthanides"; - public static final String VERSION = GT_Version.VERSION; - public static final String GROUPNAME = "com.elisis.gtnhlanth"; -} diff --git a/src/main/java/com/elisis/gtnhlanth/api/recipe/LanthanidesRecipeMaps.java b/src/main/java/com/elisis/gtnhlanth/api/recipe/LanthanidesRecipeMaps.java deleted file mode 100644 index 4bf100b1d4..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/api/recipe/LanthanidesRecipeMaps.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.elisis.gtnhlanth.api.recipe; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMapBackend; -import gregtech.api.recipe.RecipeMapBuilder; -import gregtech.nei.formatter.HeatingCoilSpecialValueFormatter; -import gregtech.nei.formatter.SimpleSpecialValueFormatter; - -public class LanthanidesRecipeMaps { - - public static final RecipeMap digesterRecipes = RecipeMapBuilder.of("gtnhlanth.recipe.digester") - .maxIO(1, 1, 1, 1) - .minInputs(1, 1) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) - .neiSpecialInfoFormatter(HeatingCoilSpecialValueFormatter.INSTANCE) - .build(); - public static final RecipeMap dissolutionTankRecipes = RecipeMapBuilder - .of("gtnhlanth.recipe.disstank") - .maxIO(2, 3, 2, 1) - .minInputs(1, 1) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) - .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("value.disstank")) - .build(); -} diff --git a/src/main/java/com/elisis/gtnhlanth/client/ClientProxy.java b/src/main/java/com/elisis/gtnhlanth/client/ClientProxy.java deleted file mode 100644 index 4420975173..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/client/ClientProxy.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.elisis.gtnhlanth.client; - -import com.elisis.gtnhlanth.common.CommonProxy; - -public class ClientProxy extends CommonProxy { -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/CommonProxy.java b/src/main/java/com/elisis/gtnhlanth/common/CommonProxy.java deleted file mode 100644 index 6e77ba200f..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/CommonProxy.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.elisis.gtnhlanth.common; - -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; - -public class CommonProxy { - - public void preInit(FMLPreInitializationEvent e) {} - - public void init(FMLInitializationEvent e) {} - - public void postInit(FMLPostInitializationEvent e) {} -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/beamline/BeamInformation.java b/src/main/java/com/elisis/gtnhlanth/common/beamline/BeamInformation.java deleted file mode 100644 index 9c10703c2e..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/beamline/BeamInformation.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.elisis.gtnhlanth.common.beamline; - -public class BeamInformation { - - private float energy; // in keV - private int rate; - - private Particle particle; - private int particleId; - - private float focus; - - public BeamInformation(float energy, int rate, int particleId, float focus) { - this.energy = energy; - this.rate = rate; - this.particleId = particleId; - this.particle = Particle.values()[particleId]; - this.focus = focus; - } - - public float getEnergy() { - return this.energy; - } - - public int getRate() { - return this.rate; - } - - public Particle getParticle() { - return this.particle; - } - - public int getParticleId() { - return this.particleId; - } - - public float getFocus() { - return this.focus; - } - - @Override - public String toString() { - return "Energy=" + this.getEnergy() - + ",Rate=" - + this.getRate() - + ",Particle=" - + this.getParticleId() - + ",Focus=" - + this.getFocus(); - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/beamline/BeamLinePacket.java b/src/main/java/com/elisis/gtnhlanth/common/beamline/BeamLinePacket.java deleted file mode 100644 index bbd712a9b0..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/beamline/BeamLinePacket.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.elisis.gtnhlanth.common.beamline; - -import net.minecraft.nbt.NBTTagCompound; - -import com.github.technus.tectech.mechanics.dataTransport.DataPacket; - -public class BeamLinePacket extends DataPacket { - - public BeamLinePacket(BeamInformation content) { - super(content); - } - - public BeamLinePacket(NBTTagCompound compound) { - super(compound); - } - - @Override - protected BeamInformation contentFromNBT(NBTTagCompound nbt) { - /* - * NBTTagCompound compound = nbt.getCompoundTag("beamline"); - */ - return new BeamInformation( - nbt.getFloat("energy"), - nbt.getInteger("rate"), - nbt.getInteger("particleId"), - nbt.getInteger("focus")); - } - - @Override - protected NBTTagCompound contentToNBT() { - - NBTTagCompound compound = new NBTTagCompound(); - - compound.setFloat("energy", content.getEnergy()); - compound.setInteger("rate", content.getRate()); - compound.setInteger("particleId", content.getParticleId()); - compound.setFloat("focus", content.getFocus()); - - return compound; - } - - @Override - public boolean extraCheck() { - return true; - } - - @Override - protected BeamInformation unifyContentWith(BeamInformation arg0) { - throw new NoSuchMethodError("Unavailable to unify beam info data packet"); - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/beamline/IConnectsToBeamline.java b/src/main/java/com/elisis/gtnhlanth/common/beamline/IConnectsToBeamline.java deleted file mode 100644 index 763365647c..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/beamline/IConnectsToBeamline.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.elisis.gtnhlanth.common.beamline; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; - -public interface IConnectsToBeamline extends IMetaTileEntity { - - boolean canConnect(ForgeDirection side); - - IConnectsToBeamline getNext(IConnectsToBeamline source); - - boolean isDataInputFacing(ForgeDirection side); -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/beamline/Particle.java b/src/main/java/com/elisis/gtnhlanth/common/beamline/Particle.java deleted file mode 100644 index f6bc2517f4..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/beamline/Particle.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.elisis.gtnhlanth.common.beamline; - -import net.minecraft.util.StatCollector; - -public enum Particle { - - ELECTRON(true, 0, 0.511f, 5000, "electron", "e\u207B", -1, null), - PHOTON(false, 1, 0, 0, "photon", "\u03B3", 0, null), - NEUTRON(false, 2, 939.57f, 15000, "neutron", "n\u2070", 0, null), - PROTON(true, 3, 938.27f, 15000, "proton", "p\u207A", 1, null), - ALPHA(true, 4, 3727.38f, 8000, "alpha", "\u03B1", 2, null); - - private boolean canAcc; - - private float restMass; // in MeV - - private float maxSourceEnergy; // in keV - - private String name; - private String shortName; - - private float charge; // in multiples of elemental charge - - private String chargeSpecial; - - private Particle(boolean canAcc, int id, float restMass, float maxSourceEnergy, String name, String shortName, - float charge, String chargeSpecial) { // ID - // is - // symbolic - // only - this.canAcc = canAcc; - this.restMass = restMass; - this.maxSourceEnergy = maxSourceEnergy; - this.name = name; - this.shortName = shortName; - this.charge = charge; - this.chargeSpecial = chargeSpecial; - } - - public float getMass() { - return this.restMass; - } - - public float getCharge() { - return this.charge; - } - - public String getChargeSpecial() { - return this.chargeSpecial; - } - - public boolean canAccelerate() { - return this.canAcc; - } - - public float maxSourceEnergy() { - return this.maxSourceEnergy; - } - - public String getName() { - return this.name; - } - - public String getLocalisedName() { - return StatCollector.translateToLocal("particle." + this.name) + " (" + this.shortName + ")"; - } - - public static Particle getParticleFromId(int id) { - return Particle.values()[id]; - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/beamline/TileBeamline.java b/src/main/java/com/elisis/gtnhlanth/common/beamline/TileBeamline.java deleted file mode 100644 index 058234d2bb..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/beamline/TileBeamline.java +++ /dev/null @@ -1,256 +0,0 @@ -package com.elisis.gtnhlanth.common.beamline; - -import static gregtech.api.enums.Dyes.MACHINE_METAL; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.enums.Dyes; -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.BaseMetaPipeEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.common.GT_Client; -import gregtech.common.render.GT_TextureBuilder; - -public class TileBeamline extends MetaPipeEntity implements IConnectsToBeamline { - - private static Textures.BlockIcons.CustomIcon pipe; - - private byte connectionCount = 0; - - private boolean active; - - public TileBeamline(int id, String name, String nameRegional) { - super(id, name, nameRegional, 0); - } - - public TileBeamline(String name) { - super(name, 0); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if ((aTick & 31) == 31) { - mConnections = 0; - connectionCount = 0; - - for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { - ForgeDirection d1 = dir.getOpposite(); - TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(dir); - if (tTileEntity instanceof IConnectsToBeamline) { - if (((IConnectsToBeamline) tTileEntity).canConnect(d1)) { - mConnections |= 1 << dir.ordinal(); - connectionCount++; - } - } else if (tTileEntity instanceof IGregTechTileEntity) { - IMetaTileEntity meta = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); - if (meta instanceof IConnectsToBeamline) { - if (((IConnectsToBeamline) meta).canConnect(d1)) { - mConnections |= 1 << dir.ordinal(); - connectionCount++; - } - } - } - } - } - } else if (aBaseMetaTileEntity.isClientSide() && GT_Client.changeDetected == 4) { - aBaseMetaTileEntity.issueTextureUpdate(); - } - } - - @Override - public byte getTileEntityBaseType() { - return 7; - } - - @Override - public void loadNBTData(NBTTagCompound arg0) {} - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { - return new TileBeamline(mName); - } - - @Override - public void saveNBTData(NBTTagCompound arg0) {} - - @Override - public float getThickNess() { - if (GT_Mod.instance.isClientSide() && GT_Client.hideValue == 1) { - return 0.0625F; - } - return 0.5f; - } - - @Override - public boolean renderInside(ForgeDirection arg0) { - return false; - } - - @Override - public boolean canConnect(ForgeDirection side) { - return true; - } - - // Largely taken from Tec's DataPipe - - @Override - public IConnectsToBeamline getNext(IConnectsToBeamline source) { - - for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { - - if ((mConnections & 1 << dir.ordinal()) == 0) { - continue; - } - - TileEntity next = this.getBaseMetaTileEntity() - .getTileEntityAtSide(dir); - if (next instanceof IConnectsToBeamline && next != source) { - - if (((IConnectsToBeamline) next).isDataInputFacing(dir.getOpposite())) { - return (IConnectsToBeamline) next; - } - - } else if (next instanceof IGregTechTileEntity) { - - IMetaTileEntity meta = ((IGregTechTileEntity) next).getMetaTileEntity(); - if (meta instanceof IConnectsToBeamline && meta != source) { - - if (meta instanceof TileBeamline && (((TileBeamline) meta).connectionCount == 2)) { - - ((TileBeamline) meta).markUsed(); - return (IConnectsToBeamline) meta; - } - - if (((IConnectsToBeamline) meta).isDataInputFacing(dir.getOpposite())) { - - return (IConnectsToBeamline) meta; - } - } - } - } - - return null; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - pipe = new Textures.BlockIcons.CustomIcon("iconsets/pipe"); - super.registerIcons(aBlockIconRegister); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection aSide, int aConnections, - int aColorIndex, boolean aConnected, boolean aRedstone) { - return new ITexture[] { new GT_TextureBuilder().addIcon(pipe) - .build(), - new GT_TextureBuilder().addIcon(pipe) - .setRGBA(Dyes.getModulation((byte) aColorIndex, MACHINE_METAL.getRGBA())) - .build() }; - } - - public void markUsed() { - this.active = true; - } - - @Override - public boolean isDataInputFacing(ForgeDirection side) { - return true; - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - float tSpace = (1f - 0.375f) / 2; - float tSide0 = tSpace; - float tSide1 = 1f - tSpace; - float tSide2 = tSpace; - float tSide3 = 1f - tSpace; - float tSide4 = tSpace; - float tSide5 = 1f - tSpace; - - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.DOWN) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) { - tSide2 = tSide4 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide1 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) { - tSide0 = tSide4 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide1 = tSide3 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) { - tSide0 = tSide2 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - - byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; - if ((tConn & 1 << ForgeDirection.DOWN.ordinal()) != 0) { - tSide0 = 0f; - } - if ((tConn & 1 << ForgeDirection.UP.ordinal()) != 0) { - tSide1 = 1f; - } - if ((tConn & 1 << ForgeDirection.NORTH.ordinal()) != 0) { - tSide2 = 0f; - } - if ((tConn & 1 << ForgeDirection.SOUTH.ordinal()) != 0) { - tSide3 = 1f; - } - if ((tConn & 1 << ForgeDirection.WEST.ordinal()) != 0) { - tSide4 = 0f; - } - if ((tConn & 1 << ForgeDirection.EAST.ordinal()) != 0) { - tSide5 = 1f; - } - - return AxisAlignedBB - .getBoundingBox(aX + tSide4, aY + tSide0, aZ + tSide2, aX + tSide5, aY + tSide1, aZ + tSide3); - } - - @Override - public String[] getDescription() { - return new String[] { StatCollector.translateToLocal("beamline.pipe.desc.0"), // Beamline pipe - EnumChatFormatting.AQUA + StatCollector.translateToLocal("beamline.pipe.desc.1"), // Does not cross, split - // or turn - "Added by " + EnumChatFormatting.GREEN + "GTNH: Lanthanides" - - }; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/block/AntennaCasing.java b/src/main/java/com/elisis/gtnhlanth/common/block/AntennaCasing.java deleted file mode 100644 index ea7d8423df..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/block/AntennaCasing.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.elisis.gtnhlanth.common.block; - -public class AntennaCasing extends Casing { - - private int antennaTier; - - public AntennaCasing(int tier) { - super("antenna_t" + tier); - this.antennaTier = tier; - } - - public int getTier() { - return this.antennaTier; - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/block/Casing.java b/src/main/java/com/elisis/gtnhlanth/common/block/Casing.java deleted file mode 100644 index 71f581efbe..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/block/Casing.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.elisis.gtnhlanth.common.block; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.init.Blocks; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import com.elisis.gtnhlanth.Tags; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; - -public class Casing extends Block { - - @SideOnly(Side.CLIENT) - protected IIcon[] texture; - - private String name; - - public Casing(String name) { - super(Material.iron); - this.name = name; - this.setBlockTextureName(Tags.MODID + ":casing." + name); - GregTech_API.registerMachineBlock(this, -1); - } - - public Casing(String name, Material material) { - super(material); - this.name = name; - this.setBlockTextureName(Tags.MODID + ":casing." + name); - GregTech_API.registerMachineBlock(this, -1); - } - - @Override - public int damageDropped(int meta) { - return meta; - } - - @Override - public String getHarvestTool(int aMeta) { - return "wrench"; - } - - @Override - public int getHarvestLevel(int aMeta) { - return 2; - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - return Blocks.iron_block.getBlockHardness(aWorld, aX, aY, aZ); - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetaData); - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - super.onBlockAdded(aWorld, aX, aY, aZ); - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - - @Override - public String getUnlocalizedName() { - return "casing." + this.name; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/block/ShieldedAccGlass.java b/src/main/java/com/elisis/gtnhlanth/common/block/ShieldedAccGlass.java deleted file mode 100644 index bdc57f1e59..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/block/ShieldedAccGlass.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.elisis.gtnhlanth.common.block; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.init.Blocks; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import com.elisis.gtnhlanth.Tags; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; - -public class ShieldedAccGlass extends Block { - - private static final String name = "shielded_accelerator_glass"; - - public ShieldedAccGlass() { - super(Material.glass); - this.setBlockName("casing." + name); - this.setBlockTextureName(Tags.MODID + ":casing." + name); - GregTech_API.registerMachineBlock(this, -1); - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 1; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - if (GregTech_API.isMachineBlock(this, aMetaData)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - return Blocks.glass.getBlockHardness(aWorld, aX, aY, aZ); - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { - if (worldClient.getBlock(xCoord, yCoord, zCoord) instanceof ShieldedAccGlass) return false; - return super.shouldSideBeRendered(worldClient, xCoord, yCoord, zCoord, aSide); - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/hatch/TileBusInputFocus.java b/src/main/java/com/elisis/gtnhlanth/common/hatch/TileBusInputFocus.java deleted file mode 100644 index 43a6df9366..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/hatch/TileBusInputFocus.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.elisis.gtnhlanth.common.hatch; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.elisis.gtnhlanth.common.item.ICanFocus; -import com.elisis.gtnhlanth.util.Util; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.GT_MetaTileEntity_Hatch_NbtConsumable; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class TileBusInputFocus extends GT_MetaTileEntity_Hatch_NbtConsumable { - - private static final int INPUT_SLOTS = 4; - - public TileBusInputFocus(int id, String name, String nameRegional) { - super(id, name, nameRegional, 0, INPUT_SLOTS, "Input Bus for Foci", false); - } - - public TileBusInputFocus(String name, String[] descriptionArray, ITexture[][][] textures) { - super(name, 0, INPUT_SLOTS, descriptionArray, false, textures); - } - - @Override - public int getInputSlotCount() { - return INPUT_SLOTS; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public AutoMap getItemsValidForUsageSlots() { - return new AutoMap<>(); - } - - @Override - public boolean isItemValidForUsageSlot(ItemStack aStack) { - - if (this.getContentUsageSlots() - .size() == 0) { - return aStack.getItem() instanceof ICanFocus; - } else { - return false; - } - - } - - @Override - public String getNameGUI() { - return "Focus Input Bus"; - } - - public void depleteFocusDurability(int damage) { - - ItemStack stack = this.getContentUsageSlots() - .toArray()[0]; - - Util.depleteDurabilityOfStack(stack, damage); - - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Bus_Catalyst) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Bus_Catalyst) }; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new TileBusInputFocus(mName, mDescriptionArray, mTextures); - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchBeamlineConnector.java b/src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchBeamlineConnector.java deleted file mode 100644 index 0c9cb9ad51..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchBeamlineConnector.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.elisis.gtnhlanth.common.hatch; - -import static com.github.technus.tectech.util.CommonValues.MOVE_AT; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.elisis.gtnhlanth.common.beamline.IConnectsToBeamline; -import com.github.technus.tectech.mechanics.dataTransport.DataPacket; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; - -public abstract class TileHatchBeamlineConnector extends GT_MetaTileEntity_Hatch - implements IConnectsToBeamline { - - private String clientLocale = "en_US"; - - public T q; - - public short id = -1; - - protected TileHatchBeamlineConnector(int aID, String aName, String aNameRegional, int aTier, String descr) { - super(aID, aName, aNameRegional, aTier, 0, descr); - TT_Utility.setTier(aTier, this); - } - - protected TileHatchBeamlineConnector(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setShort("eID", id); - if (q != null) { - aNBT.setTag("eDATA", q.toNbt()); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - id = aNBT.getShort("eID"); - if (aNBT.hasKey("eDATA")) { - q = loadPacketFromNBT(aNBT.getCompoundTag("eDATA")); - } - } - - protected abstract T loadPacketFromNBT(NBTTagCompound nbt); - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (MOVE_AT == aTick % 20) { - if (q == null) { - getBaseMetaTileEntity().setActive(false); - } else { - getBaseMetaTileEntity().setActive(true); - moveAround(aBaseMetaTileEntity); - } - } - } - } - - public abstract void moveAround(IGregTechTileEntity aBaseMetaTileEntity); - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return false; - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - if (id > 0) { - return new String[] { - translateToLocalFormatted("tt.keyword.ID", clientLocale) + ": " + EnumChatFormatting.AQUA + id, - translateToLocalFormatted("tt.keyword.Content", clientLocale) + ": " - + EnumChatFormatting.AQUA - + (q != null ? q.getContentString() : 0), - translateToLocalFormatted("tt.keyword.PacketHistory", clientLocale) + ": " - + EnumChatFormatting.RED - + (q != null ? q.getTraceSize() : 0), }; - } - return new String[] { - translateToLocalFormatted("tt.keyword.Content", clientLocale) + ": " - + EnumChatFormatting.AQUA - + (q != null ? q.getContentString() : 0), - translateToLocalFormatted("tt.keyword.PacketHistory", clientLocale) + ": " - + EnumChatFormatting.RED - + (q != null ? q.getTraceSize() : 0), }; - } - - @Override - public String[] getDescription() { - return new String[] { "Text description shouldn't be seen, report to Tec", "High speed fibre optics connector.", - EnumChatFormatting.AQUA + "Must be painted to work" }; - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchInputBeamline.java b/src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchInputBeamline.java deleted file mode 100644 index ffa0ecf56c..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchInputBeamline.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.elisis.gtnhlanth.common.hatch; - -import static gregtech.api.enums.Dyes.MACHINE_METAL; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.elisis.gtnhlanth.common.beamline.BeamLinePacket; -import com.elisis.gtnhlanth.common.beamline.IConnectsToBeamline; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; - -public class TileHatchInputBeamline extends TileHatchBeamlineConnector { - - private boolean delay = true; - - private static final String activeIconPath = "iconsets/OVERLAY_BI_ACTIVE"; - private static final String sideIconPath = "iconsets/OVERLAY_BI_SIDES"; - private static final String connIconPath = "iconsets/BI_CONN"; - - private static final Textures.BlockIcons.CustomIcon activeIcon = new Textures.BlockIcons.CustomIcon(activeIconPath); - private static final Textures.BlockIcons.CustomIcon sideIcon = new Textures.BlockIcons.CustomIcon(sideIconPath); - private static final Textures.BlockIcons.CustomIcon connIcon = new Textures.BlockIcons.CustomIcon(connIconPath); - - public TileHatchInputBeamline(int id, String name, String nameRegional, int tier) { - - super(id, name, nameRegional, tier, ""); - TT_Utility.setTier(tier, this); - } - - public TileHatchInputBeamline(String name, int tier, String[] desc, ITexture[][][] textures) { - super(name, tier, desc, textures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - activeIcon, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(connIcon) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - sideIcon, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(connIcon) }; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity tile) { - return new TileHatchInputBeamline(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - protected BeamLinePacket loadPacketFromNBT(NBTTagCompound tag) { - return new BeamLinePacket(tag); - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isDataInputFacing(ForgeDirection side) { - return isInputFacing(side); - } - - @Override - public boolean isOutputFacing(ForgeDirection aSide) { - return false; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean canConnect(ForgeDirection side) { - return isInputFacing(side); - } - - @Override - public IConnectsToBeamline getNext(IConnectsToBeamline source) { - return null; - } - - @Override - public String[] getDescription() { - return null; - } - - public void setContents(BeamLinePacket in) { - if (in == null) { - this.q = null; - } else { - if (in.getContent() - .getRate() > 0) { - this.q = in; - delay = true; - } else { - this.q = null; - } - } - } - - @Override - public void moveAround(IGregTechTileEntity tile) { - if (delay) { - delay = false; - } else { - this.setContents(null); - } - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchOutputBeamline.java b/src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchOutputBeamline.java deleted file mode 100644 index 31a18ea58d..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/hatch/TileHatchOutputBeamline.java +++ /dev/null @@ -1,138 +0,0 @@ -package com.elisis.gtnhlanth.common.hatch; - -import static gregtech.api.enums.Dyes.MACHINE_METAL; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.elisis.gtnhlanth.common.beamline.BeamLinePacket; -import com.elisis.gtnhlanth.common.beamline.IConnectsToBeamline; -import com.elisis.gtnhlanth.common.beamline.TileBeamline; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.enums.Dyes; -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.objects.GT_RenderedTexture; - -public class TileHatchOutputBeamline extends TileHatchBeamlineConnector implements IConnectsToBeamline { - - private static final String activeIconPath = "iconsets/OVERLAY_BO_ACTIVE"; - private static final String sideIconPath = "iconsets/OVERLAY_BO_SIDES"; - private static final String connIconPath = "iconsets/BO_CONN"; - - private static final Textures.BlockIcons.CustomIcon activeIcon = new Textures.BlockIcons.CustomIcon(activeIconPath); - private static final Textures.BlockIcons.CustomIcon sideIcon = new Textures.BlockIcons.CustomIcon(sideIconPath); - private static final Textures.BlockIcons.CustomIcon connIcon = new Textures.BlockIcons.CustomIcon(connIconPath); - - public TileHatchOutputBeamline(int id, String name, String nameRegional, int tier) { - super(id, name, nameRegional, tier, ""); - TT_Utility.setTier(tier, this); - } - - public TileHatchOutputBeamline(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - activeIcon, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(connIcon) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - sideIcon, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(connIcon) }; - } - - @Override - public IConnectsToBeamline getNext(IConnectsToBeamline source) { - - IGregTechTileEntity base = this.getBaseMetaTileEntity(); - IGregTechTileEntity next = base.getIGregTechTileEntityAtSide(base.getFrontFacing()); - - if (next == null) { - return null; - } - - IMetaTileEntity meta = next.getMetaTileEntity(); - if (meta instanceof TileBeamline) { - - ((TileBeamline) meta).markUsed(); - return (IConnectsToBeamline) meta; - - } else if (meta instanceof TileHatchInputBeamline && ((TileHatchInputBeamline) meta).canConnect( - base.getFrontFacing() - .getOpposite())) { - - return (IConnectsToBeamline) meta; - } - - return null; - } - - @Override - public void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { - IConnectsToBeamline current = this, source = this, next; - int range = 0; - while ((next = current.getNext(source)) != null && range++ < 100) { - if (next instanceof TileHatchInputBeamline) { - ((TileHatchInputBeamline) next).setContents(q); - break; - } - source = current; - current = next; - } - q = null; - } - - @Override - protected BeamLinePacket loadPacketFromNBT(NBTTagCompound nbt) { - return new BeamLinePacket(nbt); - } - - @Override - public boolean canConnect(ForgeDirection side) { - return this.isOutputFacing(side); - } - - @Override - public boolean isDataInputFacing(ForgeDirection side) { - return this.isInputFacing(side); - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection aSide) { - return false; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public String[] getDescription() { - return null; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { - return new TileHatchOutputBeamline(mName, mTier, mDescriptionArray, mTextures); - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/item/ICanFocus.java b/src/main/java/com/elisis/gtnhlanth/common/item/ICanFocus.java deleted file mode 100644 index 21cdb636c5..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/item/ICanFocus.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.elisis.gtnhlanth.common.item; - -public interface ICanFocus { - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/item/LanthItem.java b/src/main/java/com/elisis/gtnhlanth/common/item/LanthItem.java deleted file mode 100644 index 062b9b1a91..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/item/LanthItem.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.elisis.gtnhlanth.common.item; - -import net.minecraft.item.Item; - -import com.elisis.gtnhlanth.Tags; - -public class LanthItem extends Item { - - public LanthItem(String name) { - super(); - this.setUnlocalizedName(name); - this.setTextureName(Tags.MODID + ":" + name); - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/item/MaskList.java b/src/main/java/com/elisis/gtnhlanth/common/item/MaskList.java deleted file mode 100644 index 18423565ca..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/item/MaskList.java +++ /dev/null @@ -1,162 +0,0 @@ -package com.elisis.gtnhlanth.common.item; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.TierEU; - -public enum MaskList { - - // There are absolutely better ways of doing this than a GT Materials-esque Enum, some method of automatically - // scraping the wafer types would be preferable in particular - // Use Dyes._NULL to indicate a wafer's lack of a dedicated lens instead of null, if the wafer's mask is to be - // generated - // Ignore last argument if using all wafers - ERROR("error", "ERROR", 0, "", null, null, 0, 0, 0, 0, 0, null), - BLANK1("blank1", "T1 Blank", 0, "VISIBLE", null, null, 0, 0, 0, 0, 0, null), - BLANK2("blank2", "T2 Blank", 0, "UV", null, null, 0, 0, 0, 0, 0, null), - BLANK3("blank3", "T3 Blank", 0, "X-RAY", null, null, 0, 0, 0, 0, 0, null), - ILC("ilc", "Integrated Logic Circuit", 100, "", BLANK1, Dyes.dyeRed, TierEU.RECIPE_MV, 0.5e-3f, 4e-3f, 35, 1, - ItemList.Circuit_Wafer_ILC.get(1)), - RAM("ram", "Random Access Memory", 200, "", BLANK1, Dyes.dyeCyan, TierEU.RECIPE_MV, 2e-3f, 4e-3f, 40, 2, - ItemList.Circuit_Wafer_Ram.get(1), ItemList.Circuit_Silicon_Wafer), - NAND("nand", "NAND", 200, "", BLANK2, Dyes._NULL, TierEU.RECIPE_HV, 7e-3f, 12e-3f, 40, 1, - ItemList.Circuit_Wafer_NAND.get(1), ItemList.Circuit_Silicon_Wafer), // NAND uses only Ender Pearl lens, don't - // ask me why - NOR("nor", "NOR", 100, "", BLANK2, Dyes._NULL, TierEU.RECIPE_LuV, 8e-3f, 10e-3f, 40, 1, - ItemList.Circuit_Wafer_NOR.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2), // Same as - // above, - // but with - // ender - // eye - CPU("cpu", "Central Processing Unit", 10, "", BLANK2, Dyes.dyeWhite, TierEU.RECIPE_MV, 6e-3f, 12e-3f, 45, 2, - ItemList.Circuit_Wafer_CPU.get(1)), - SOC("soc", "SoC", 150, "", BLANK2, Dyes.dyeYellow, TierEU.RECIPE_EV, 3e-3f, 10e-3f, 45, 2, - ItemList.Circuit_Wafer_SoC.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2), - ASOC("asoc", "Advanced SoC", 120, "", BLANK2, Dyes.dyeGreen, TierEU.RECIPE_EV, 100e-3f, 200e-3f, 50, 2, - ItemList.Circuit_Wafer_SoC2.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2), - PIC("pic", "Power IC", 100, "", BLANK2, Dyes.dyeBlue, TierEU.RECIPE_HV, 5e-3f, 10e-3f, 50, 4, - ItemList.Circuit_Wafer_PIC.get(1), ItemList.Circuit_Silicon_Wafer), - HPIC("hpic", "High Power IC", 80, "", BLANK3, null, TierEU.RECIPE_IV, 100e-3f, 200e-3f, 50, 6, - ItemList.Circuit_Wafer_HPIC.get(1), ItemList.Circuit_Silicon_Wafer), // Different, made in chemical reactor. - // Figure out something for - // this later? - NCPU("ncpu", "NanoCPU", 60, "", BLANK2, null, TierEU.RECIPE_EV, 5e-3f, 10e-3f, 50, 4, - ItemList.Circuit_Wafer_NanoCPU.get(1), ItemList.Circuit_Silicon_Wafer), // Same as above - QBIT("qbit", "QBit", 50, "", BLANK2, null, TierEU.RECIPE_EV, 3e-3f, 10e-3f, 50, 4, - ItemList.Circuit_Wafer_QuantumCPU.get(1), ItemList.Circuit_Silicon_Wafer), // ^ - UHPIC("uhpic", "Ultra High Power IC", 60, "", BLANK3, null, TierEU.RECIPE_LuV, 200e-3f, 400e-3f, 50, 8, - ItemList.Circuit_Wafer_UHPIC.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2), // You - // get - // the - // gist - SSOC("ssoc", "Simple SoC", 150, "", BLANK1, Dyes.dyeOrange, TierEU.RECIPE_MV, 2e-3f, 4e-3f, 25, 1, - ItemList.Circuit_Wafer_Simple_SoC.get(1)), - ULPIC("ulpic", "Ultra Low Power IC", 200, "", BLANK1, Dyes.dyeGreen, TierEU.RECIPE_LV, 2e-3f, 4e-3f, 30, 1, - ItemList.Circuit_Wafer_ULPIC.get(1)), // Can use green for this as well as asoc, given - // the latter uses a different base mask - LPIC("lpic", "Low Power IC", 150, "", BLANK1, Dyes.dyeYellow, TierEU.RECIPE_MV, 2e-3f, 4e-3f, 30, 2, - ItemList.Circuit_Wafer_LPIC.get(1)), // Same as above, except for yellow - NPIC("npic", "Nano Power IC", 70, "", BLANK3, Dyes.dyeRed, TierEU.RECIPE_LuV, 1, 100000, 50, 4, - ItemList.Circuit_Wafer_NPIC.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2, - ItemList.Circuit_Silicon_Wafer3), // Same - PPIC("ppic", "PPIC", 50, "", BLANK3, null, TierEU.RECIPE_ZPM, 10, 15, 50, 6, ItemList.Circuit_Wafer_PPIC.get(1), - ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2, ItemList.Circuit_Silicon_Wafer3), // CR - // recipe - QPIC("qpic", "QPIC", 50, "", BLANK3, Dyes.dyeBlue, TierEU.RECIPE_UV, 5, 9, 50, 6, - ItemList.Circuit_Wafer_QPIC.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2, - ItemList.Circuit_Silicon_Wafer3, ItemList.Circuit_Silicon_Wafer4); // Different base mask to PIC - - String name; - String englishName; - String spectrum; - - int maxDamage; - - MaskList precursor; - Dyes lensColour; - - long engraverEUt; - - float minEnergy; - float maxEnergy; - - float minFocus; - int baselineAmount; - - ItemStack producedItem; - - ItemList[] forbiddenWafers; - - MaskList(String name, String englishName, int maxDamage, String spectrum, MaskList precursor, Dyes lensColour, - long engraverEUt, float minEnergy, float maxEnergy, float minFocus, int baselineAmount, ItemStack producedItem, - ItemList... forbiddenWafers) { - this.name = name; - this.englishName = englishName; - this.spectrum = spectrum; - this.maxDamage = maxDamage; - this.precursor = precursor; - this.lensColour = lensColour; - this.engraverEUt = engraverEUt; - this.minFocus = minFocus; - this.minEnergy = minEnergy; - this.maxEnergy = maxEnergy; - this.baselineAmount = baselineAmount; - this.producedItem = producedItem; - this.forbiddenWafers = forbiddenWafers; - } - - public String getName() { - return this.name; - } - - public String getEnglishName() { - return this.englishName; - } - - public String getSpectrum() { - return this.spectrum; - } - - public int getDamage() { - return this.maxDamage; - } - - public MaskList getPrecursor() { - return this.precursor; - } - - public Dyes getLensColour() { - return this.lensColour; - } - - public long getEngraverEUt() { - return this.engraverEUt; - } - - public float getMinEnergy() { - return this.minEnergy; - } - - public float getMaxEnergy() { - return this.maxEnergy; - } - - public float getMinFocus() { - return this.minFocus; - } - - public int getBaselineAmount() { - return this.baselineAmount; - } - - public ItemStack getProducedItem() { - return this.producedItem; - } - - public ItemList[] getForbiddenWafers() { - return this.forbiddenWafers; - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/item/ParticleItem.java b/src/main/java/com/elisis/gtnhlanth/common/item/ParticleItem.java deleted file mode 100644 index b6484b93a5..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/item/ParticleItem.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.elisis.gtnhlanth.common.item; - -import java.util.List; - -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.util.IIcon; -import net.minecraft.util.MathHelper; - -import com.elisis.gtnhlanth.Tags; -import com.elisis.gtnhlanth.common.beamline.Particle; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class ParticleItem extends Item { - - public static final int NUMBER_OF_SUBTYPES = Particle.values().length; - - private static String[] names = new String[NUMBER_OF_SUBTYPES]; - - static { - populateNamesArray(); - } - - @SideOnly(Side.CLIENT) - private IIcon[] iconArray; - - public ParticleItem() { - - this.setHasSubtypes(true); - this.setMaxDamage(0); - - } - - @SideOnly(Side.CLIENT) - @Override - public IIcon getIconFromDamage(int damage) { - int j = MathHelper.clamp_int(damage, 0, NUMBER_OF_SUBTYPES - 1); - return this.iconArray[j]; - } - - public String getUnlocalizedName(ItemStack stack) { - int i = MathHelper.clamp_int(stack.getItemDamage(), 0, NUMBER_OF_SUBTYPES - 1); - return super.getUnlocalizedName() + "." + names[i]; - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - @SideOnly(Side.CLIENT) - @Override - public void getSubItems(Item item, CreativeTabs tab, List list) { - for (int i = 0; i < NUMBER_OF_SUBTYPES; ++i) { - list.add(new ItemStack(item, 1, i)); - } - } - - @SideOnly(Side.CLIENT) - @Override - public void registerIcons(IIconRegister register) { - this.iconArray = new IIcon[NUMBER_OF_SUBTYPES]; - - for (int i = 0; i < NUMBER_OF_SUBTYPES; ++i) { - this.iconArray[i] = register.registerIcon(Tags.MODID + ":" + "particle/" + names[i]); - } - } - - @SideOnly(Side.CLIENT) - @Override - public String getItemStackDisplayName(ItemStack stack) { - - int i = MathHelper.clamp_int(stack.getItemDamage(), 0, NUMBER_OF_SUBTYPES - 1); - - Particle particle = Particle.values()[i]; - - return particle.getLocalisedName(); - - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { - - int i = MathHelper.clamp_int(stack.getItemDamage(), 0, NUMBER_OF_SUBTYPES - 1); - - Particle particle = Particle.values()[i]; - - float restMass = particle.getMass(); - - float charge = particle.getCharge(); - - String chargeSpecial = particle.getChargeSpecial(); - - String chargeStringToAppend; - if (chargeSpecial != null) { - - chargeStringToAppend = chargeSpecial; - - } else { - - if (charge > 0) chargeStringToAppend = "+" + charge; - else chargeStringToAppend = "" + charge; - } - - list.add("Rest Mass: " + restMass + " MeV"); - list.add("Charge: " + chargeStringToAppend + "e"); - - } - - private static void populateNamesArray() { - - for (int i = 0; i < NUMBER_OF_SUBTYPES; i++) { - - Particle particle = Particle.values()[i]; - - names[i] = particle.getName(); - - } - - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/item/PhotolithographicMask.java b/src/main/java/com/elisis/gtnhlanth/common/item/PhotolithographicMask.java deleted file mode 100644 index 239231ad3c..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/item/PhotolithographicMask.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.elisis.gtnhlanth.common.item; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import com.elisis.gtnhlanth.Tags; - -public class PhotolithographicMask extends Item implements ICanFocus { - - private String name; - private String descSpectrum; - - public PhotolithographicMask(String name, int maxDamage, String descSpectrum) { - super(); - this.name = name; - this.descSpectrum = descSpectrum; - this.setUnlocalizedName("photomask." + name); - this.setMaxStackSize(1); - this.setMaxDamage(maxDamage); - this.setTextureName(Tags.MODID + ":photomask/" + name); - } - - /* - * @Override public String getUnlocalizedName() { return "item.photomask." + this.name; } - */ - @SuppressWarnings({ "rawtypes", "unchecked" }) - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { - - if (!this.descSpectrum.isEmpty()) - list.add("Suitable for the " + this.descSpectrum + " segment of the electromagnetic spectrum and lower"); - - } - - public String getDescSpectrum() { - return descSpectrum; - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/register/BotWerkstoffMaterialPool.java b/src/main/java/com/elisis/gtnhlanth/common/register/BotWerkstoffMaterialPool.java deleted file mode 100644 index 41a9392274..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/register/BotWerkstoffMaterialPool.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.elisis.gtnhlanth.common.register; - -import static com.github.bartimaeusnek.bartworks.system.material.Werkstoff.Types.*; -import static com.github.bartimaeusnek.bartworks.util.BW_Util.subscriptNumbers; -import static gregtech.api.enums.Materials.*; -import static gregtech.api.enums.TextureSet.*; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.util.Pair; - -/* - * Originally authored by botn365 under the MIT License. See BotdustriesLICENSE - */ -@SuppressWarnings("unchecked") -public class BotWerkstoffMaterialPool implements Runnable { - - public static final Werkstoff TungsticAcid = new Werkstoff( - new short[] { 0xf5, 0xf1, 0x16 }, - "Tungstic Acid", - new Werkstoff.Stats(), - COMPOUND, - new Werkstoff.GenerationFeatures().onlyDust() - .enforceUnification(), - 29900, - SET_SHINY, - new Pair<>(Hydrogen, 2), - new Pair<>(Tungsten, 1), - new Pair<>(Oxygen, 4)); - public static final Werkstoff TungstenTrioxide = new Werkstoff( - new short[] { 0x0f, 0x5, 0x16 }, - "Tungsten Trioxide", - new Werkstoff.Stats(), - COMPOUND, - new Werkstoff.GenerationFeatures().onlyDust() - .enforceUnification(), - 29901, - SET_SHINY, - new Pair<>(Tungsten, 1), - new Pair<>(Oxygen, 3)); - public static final Werkstoff AmmoniumNitrate = new Werkstoff( - new short[] { 0x81, 0xcc, 0x00 }, - "Ammonium Nitrate", - new Werkstoff.Stats(), - COMPOUND, - new Werkstoff.GenerationFeatures().onlyDust(), - 29903, - SET_FINE, - new Pair<>(Nitrogen, 1), - new Pair<>(Hydrogen, 4), - new Pair<>(Nitrogen, 1), - new Pair<>(Oxygen, 3)); - public static final Werkstoff SodiumTungstate = new Werkstoff( - new short[] { 0xc, 0xed, 0xd7, 0 }, - "Sodium Tungstate", - subscriptNumbers("Na2WO4"), - new Werkstoff.Stats(), - COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 29904, - SET_FINE); - public static final Werkstoff Phosgene = new Werkstoff( - new short[] { 0x15, 0xa1, 0x1a }, - "Phosgene", - subscriptNumbers("COCl2"), - new Werkstoff.Stats(), - COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 29905, - SET_FINE); - public static final Werkstoff Nitromethane = new Werkstoff( - new short[] { 0x87, 0x7d, 0x60 }, - "Nitromethane", - subscriptNumbers("CH3NO2"), - new Werkstoff.Stats(), - COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 29914, - SET_METALLIC); - - @Override - public void run() { - // TODO Auto-generated method stub - - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/register/LanthItemList.java b/src/main/java/com/elisis/gtnhlanth/common/register/LanthItemList.java deleted file mode 100644 index 2d5d976fea..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/register/LanthItemList.java +++ /dev/null @@ -1,172 +0,0 @@ -package com.elisis.gtnhlanth.common.register; - -import java.util.HashMap; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import com.elisis.gtnhlanth.common.beamline.TileBeamline; -import com.elisis.gtnhlanth.common.block.AntennaCasing; -import com.elisis.gtnhlanth.common.block.Casing; -import com.elisis.gtnhlanth.common.block.ShieldedAccGlass; -import com.elisis.gtnhlanth.common.hatch.TileBusInputFocus; -import com.elisis.gtnhlanth.common.hatch.TileHatchInputBeamline; -import com.elisis.gtnhlanth.common.hatch.TileHatchOutputBeamline; -import com.elisis.gtnhlanth.common.item.LanthItem; -import com.elisis.gtnhlanth.common.item.MaskList; -import com.elisis.gtnhlanth.common.item.ParticleItem; -import com.elisis.gtnhlanth.common.item.PhotolithographicMask; -import com.elisis.gtnhlanth.common.tileentity.Digester; -import com.elisis.gtnhlanth.common.tileentity.DissolutionTank; -import com.elisis.gtnhlanth.common.tileentity.LINAC; -import com.elisis.gtnhlanth.common.tileentity.SourceChamber; -import com.elisis.gtnhlanth.common.tileentity.Synchrotron; -import com.elisis.gtnhlanth.common.tileentity.TargetChamber; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.util.GT_LanguageManager; - -public final class LanthItemList { - - public static ItemStack DIGESTER; - public static ItemStack DISSOLUTION_TANK; - - public static ItemStack LINAC; - public static ItemStack SOURCE_CHAMBER; - - public static ItemStack SYNCHROTRON; - - public static ItemStack TARGET_CHAMBER; - - public static ItemStack BEAMLINE_PIPE; - - public static ItemStack LUV_BEAMLINE_INPUT_HATCH; - public static ItemStack LUV_BEAMLINE_OUTPUT_HATCH; - - public static ItemStack BEAMLINE_FOCUS_INPUT_BUS; - - public static Item CAPILLARY_EXCHANGE = new LanthItem("capillary_exchange"); - - public static Item MM_LATTICE = new LanthItem("mm_lattice"); - - public static Item IRON_COATED_QUARTZ = new LanthItem("iron_quartz_plate"); - - public static Item SUBSTRATE_PRECURSOR = new LanthItem("substrate_precursor"); - - public static Item MASK_SUBSTRATE = new LanthItem("mask_substrate"); - - public static Item MASKED_MASK = new LanthItem("masked_mask_substrate"); - - public static Item ETCHED_MASK_1 = new LanthItem("etched_mask1"); - - public static Item SILICON_NITRIDE_MEMBRANE = new LanthItem("nitride_gold_membrane"); - - public static Item PARTICLE_ITEM = new ParticleItem().setUnlocalizedName("particle"); - - public static final Block SHIELDED_ACCELERATOR_CASING = new Casing("shielded_accelerator"); - public static final Block SHIELDED_ACCELERATOR_GLASS = new ShieldedAccGlass(); - - public static final Block ELECTRODE_CASING = new Casing("electrode"); - - public static final Block COOLANT_DELIVERY_CASING = new Casing("coolant_delivery"); - - // public static final Block ANTENNA_CASING_T1 = new Casing("antenna_t1"); - public static final Block ANTENNA_CASING_T1 = new AntennaCasing(1); - public static final Block ANTENNA_CASING_T2 = new AntennaCasing(2); - - public static final Block NIOBIUM_CAVITY_CASING = new Casing("niobium_cavity"); - - public static final Block FOCUS_MANIPULATION_CASING = new Casing("focus_manipulator"); - public static final Block FOCUS_HOLDER = new Casing("focus_holder"); - - public static final Block TARGET_RECEPTACLE_CASING = new Casing("target_receptacle"); - public static final Block TARGET_HOLDER = new Casing("target_holder"); - - public static HashMap maskMap = new HashMap<>(); - - public static void registerGTMTE() { - - DIGESTER = new Digester(10500, "Digester", "Digester").getStackForm(1L); - DISSOLUTION_TANK = new DissolutionTank(10501, "Dissolution Tank", "Dissolution Tank").getStackForm(1L); - - BEAMLINE_PIPE = new TileBeamline(10502, "Beamline Pipe", "Beamline Pipe").getStackForm(1L); - LUV_BEAMLINE_INPUT_HATCH = new TileHatchInputBeamline( - 10503, - "LuV Beamline Input Hatch", - "LuV Beamline Input Hatch", - 6).getStackForm(1L); - LUV_BEAMLINE_OUTPUT_HATCH = new TileHatchOutputBeamline( - 10504, - "LuV Beamline Output Hatch", - "LuV Beamline Output Hatch", - 6).getStackForm(1L); - - BEAMLINE_FOCUS_INPUT_BUS = new TileBusInputFocus(10509, "Focus Input Bus", "Focus Input Bus").getStackForm(1L); - - LINAC = new LINAC(10505, "Linear Accelerator", "Linear Accelerator").getStackForm(1L); - - SOURCE_CHAMBER = new SourceChamber(10506, "Source Chamber", "Source Chamber").getStackForm(1L); - - SYNCHROTRON = new Synchrotron(10507, "Synchrotron", "Synchrotron").getStackForm(1L); - - TARGET_CHAMBER = new TargetChamber(10508, "Target Chamber", "Target Chamber").getStackForm(1L); - } - - public static void registerTypical() { - - GameRegistry.registerItem(CAPILLARY_EXCHANGE, CAPILLARY_EXCHANGE.getUnlocalizedName()); - - GameRegistry.registerItem(MM_LATTICE, MM_LATTICE.getUnlocalizedName()); - - GameRegistry.registerItem(IRON_COATED_QUARTZ, IRON_COATED_QUARTZ.getUnlocalizedName()); - - GameRegistry.registerItem(MASK_SUBSTRATE, MASK_SUBSTRATE.getUnlocalizedName()); - - GameRegistry.registerItem(ETCHED_MASK_1, ETCHED_MASK_1.getUnlocalizedName()); - - GameRegistry.registerItem(SUBSTRATE_PRECURSOR, SUBSTRATE_PRECURSOR.getUnlocalizedName()); - - GameRegistry.registerItem(MASKED_MASK, MASKED_MASK.getUnlocalizedName()); - - GameRegistry.registerItem(PARTICLE_ITEM, "particle"); - - GameRegistry.registerBlock(SHIELDED_ACCELERATOR_CASING, SHIELDED_ACCELERATOR_CASING.getUnlocalizedName()); - - GameRegistry.registerBlock(ELECTRODE_CASING, ELECTRODE_CASING.getUnlocalizedName()); - - GameRegistry.registerBlock(COOLANT_DELIVERY_CASING, COOLANT_DELIVERY_CASING.getUnlocalizedName()); - - GameRegistry.registerBlock(SHIELDED_ACCELERATOR_GLASS, SHIELDED_ACCELERATOR_GLASS.getUnlocalizedName()); - - GameRegistry.registerBlock(ANTENNA_CASING_T1, ANTENNA_CASING_T1.getUnlocalizedName()); - - GameRegistry.registerBlock(ANTENNA_CASING_T2, ANTENNA_CASING_T2.getUnlocalizedName()); - - GameRegistry.registerBlock(NIOBIUM_CAVITY_CASING, NIOBIUM_CAVITY_CASING.getUnlocalizedName()); - - GameRegistry.registerBlock(FOCUS_MANIPULATION_CASING, FOCUS_MANIPULATION_CASING.getUnlocalizedName()); - - GameRegistry.registerBlock(FOCUS_HOLDER, FOCUS_HOLDER.getUnlocalizedName()); - - GameRegistry.registerBlock(TARGET_RECEPTACLE_CASING, TARGET_RECEPTACLE_CASING.getUnlocalizedName()); - - GameRegistry.registerBlock(TARGET_HOLDER, TARGET_HOLDER.getUnlocalizedName()); - - for (MaskList mask : MaskList.values()) { - - String english = mask.getEnglishName(); - - String descSpectrum = mask.getSpectrum(); - - PhotolithographicMask maskItem = new PhotolithographicMask(mask.getName(), mask.getDamage(), descSpectrum); - GameRegistry.registerItem(maskItem, maskItem.getUnlocalizedName()); - - GT_LanguageManager.addStringLocalization(maskItem.getUnlocalizedName() + ".name", "Mask (" + english + ")"); - - maskMap.put(mask, maskItem); - - } - - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/register/WerkstoffMaterialPool.java b/src/main/java/com/elisis/gtnhlanth/common/register/WerkstoffMaterialPool.java deleted file mode 100644 index 0a7a808d8d..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/register/WerkstoffMaterialPool.java +++ /dev/null @@ -1,2033 +0,0 @@ -package com.elisis.gtnhlanth.common.register; - -import static com.github.bartimaeusnek.bartworks.util.BW_Util.subscriptNumbers; -import static com.github.bartimaeusnek.bartworks.util.BW_Util.superscriptNumbers; - -import java.util.Arrays; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.util.Pair; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TextureSet; - -@SuppressWarnings({ "unchecked" }) -public class WerkstoffMaterialPool implements Runnable { - - // Current highest ID = 11_499 - - private static final int offsetID = 11_000; - private static final int offsetID2 = 11_100; - private static final int offsetID3 = 11_300; - private static final int offsetID3b = 11_350; - private static final int offsetID4 = 11_400; - private static final int offsetID5 = 11_460; - - /* - * public static final Werkstoff __ = new Werkstoff( new short[] {_, _, _}, "__", new Werkstoff.Stats(), - * Werkstoff.Types.MIXTURE, new Werkstoff.GenerationFeatures().disable(), offsetID_, TextureSet.SET_DULL ); - */ - - // Misc. - public static final Werkstoff Hafnium = new Werkstoff( - new short[] { 232, 224, 219 }, - "Hafnium", - subscriptNumbers("Hf"), - new Werkstoff.Stats(), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMetalItems() - .enforceUnification(), // Perhaps use - // hafnia - // liquid in - // elemental - // hafnium - // synthesis - offsetID, - TextureSet.SET_METALLIC); - - public static final Werkstoff LowPurityHafnium = new Werkstoff( - new short[] { 240, 223, 208 }, - "Low-Purity Hafnium", - subscriptNumbers("??Hf??"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 1, - TextureSet.SET_DULL); - - public static final Werkstoff Hafnia = new Werkstoff( - new short[] { 247, 223, 203 }, - "Hafnia", - subscriptNumbers("HfO2"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 2, - TextureSet.SET_DULL); - - public static final Werkstoff HafniumTetrachloride = new Werkstoff( - new short[] { 238, 247, 249 }, - "Hafnium Tetrachloride", - subscriptNumbers("HfCl4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 3, - TextureSet.SET_DULL); - - public static final Werkstoff HafniumTetrachlorideSolution = new Werkstoff( - new short[] { 238, 247, 249 }, - "Hafnium Tetrachloride Solution", - subscriptNumbers("HfCl4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID + 4, - TextureSet.SET_FLUID); - - public static final Werkstoff HafniumIodide = new Werkstoff( - new short[] { 216, 60, 1 }, - "Hafnium Iodide", - subscriptNumbers("HfI4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 5, - TextureSet.SET_DULL); - - public static final Werkstoff HafniumRunoff = new Werkstoff( - new short[] { 74, 65, 42 }, // Literally the statistically ugliest colour - "Hafnium Runoff", - subscriptNumbers("??????"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 6, - TextureSet.SET_DULL); - - public static final Werkstoff Zirconium = new Werkstoff( - new short[] { 225, 230, 225 }, - "Zirconium", - subscriptNumbers("Zr"), - new Werkstoff.Stats().setBlastFurnace(true), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMetalItems(), - // .enforceUnification(), - offsetID + 7, - TextureSet.SET_METALLIC); - - public static final Werkstoff Zirconia = new Werkstoff( - new short[] { 177, 152, 101 }, - "Zirconia", - subscriptNumbers("ZrO2"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 8, - TextureSet.SET_SHINY); - - public static final Werkstoff ZirconiumTetrachloride = new Werkstoff( - new short[] { 179, 164, 151 }, - "Zirconium Tetrachloride", - subscriptNumbers("ZrCl4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 9, - TextureSet.SET_DULL); - - public static final Werkstoff ZirconiumTetrachlorideSolution = new Werkstoff( - new short[] { 179, 164, 151 }, - "Zirconium Tetrachloride Solution", - subscriptNumbers("ZrCl4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), // Blast Furnace needs liquid input because it - // can't do 3 item inputs so have a shitty - // material - offsetID + 10, - TextureSet.SET_FLUID); - - public static final Werkstoff HafniaZirconiaBlend = new Werkstoff( - new short[] { 247, 223, 203 }, - "Hafnia-Zirconia Blend", // Maybe Hafnon?? - subscriptNumbers("??HfZr??"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 11, - TextureSet.SET_DULL); - - public static final Werkstoff Iodine = new Werkstoff( - new short[] { 171, 40, 175 }, - "Iodine", - subscriptNumbers("I"), - new Werkstoff.Stats().setProtons(53) - .setMass(127) - .setSublimation(true) - .setBoilingPoint(484) - .setGas(true), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addCells() - .enforceUnification(), - offsetID + 12, - TextureSet.SET_FLUID); - - // Lanthanide Line - public static final Werkstoff MuddyRareEarthMonaziteSolution = new Werkstoff( - new short[] { 111, 78, 55 }, - "Muddy Monazite Rare Earth Solution", - subscriptNumbers("??LaNdZr??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID + 14, - TextureSet.SET_FLUID); - - public static final Werkstoff DilutedRareEarthMonaziteMud = new Werkstoff( - new short[] { 160, 120, 90 }, - "Diluted Monazite Rare Earth Mud", - subscriptNumbers("??LaNdHf??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID + 15, - TextureSet.SET_FLUID); - - public static final Werkstoff DilutedMonaziteSulfate = new Werkstoff( - new short[] { 237, 201, 175 }, - "Diluted Monazite Sulfate", - subscriptNumbers("??LaNd??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID + 16, - TextureSet.SET_FLUID); - - public static final Werkstoff NitratedRareEarthMonaziteConcentrate = new Werkstoff( - new short[] { 250, 223, 173 }, - "Nitrogenated Monazite Rare Earth Concentrate", - subscriptNumbers("??LaNd??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID + 17, - TextureSet.SET_FLUID); - - public static final Werkstoff NitricMonaziteLeachedConcentrate = new Werkstoff( - new short[] { 244, 202, 22 }, - "Nitric Monazite Leached Concentrate", - subscriptNumbers("??LaNd??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID + 18, - TextureSet.SET_FLUID); - - public static final Werkstoff MonaziteSulfate = new Werkstoff( - new short[] { 152, 118, 84 }, - "Monazite Sulfate", - subscriptNumbers("??CeEu??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 19, - TextureSet.SET_DULL); - - public static final Werkstoff AcidicMonazitePowder = new Werkstoff( - new short[] { 50, 23, 77 }, - "Acidic Monazite Powder", - subscriptNumbers("????"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 20, - TextureSet.SET_DULL); - - public static final Werkstoff MonaziteRareEarthFiltrate = new Werkstoff( - new short[] { 72, 60, 50 }, - "Monazite Rare Earth Filtrate", - subscriptNumbers("????"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 21, - TextureSet.SET_DULL); - - public static final Werkstoff NeutralizedMonaziteRareEarthFiltrate = new Werkstoff( - new short[] { 50, 23, 77 }, - "Neutralized Monazite Rare Earth Filtrate", - subscriptNumbers("????"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 22, - TextureSet.SET_DULL); - - public static final Werkstoff MonaziteRareEarthHydroxideConcentrate = new Werkstoff( - new short[] { 193, 154, 107 }, - "Monazite Rare Earth Hydroxide Concentrate", - subscriptNumbers("????"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 23, - TextureSet.SET_DULL); - - public static final Werkstoff DriedMonaziteRareEarthConcentrate = new Werkstoff( - new short[] { 250, 214, 165 }, - "Dried Monazite Rare Earth Concentrate", - subscriptNumbers("????"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 24, - TextureSet.SET_DULL); - - public static final Werkstoff CeriumDioxide = new Werkstoff( - new short[] { 255, 255, 255 }, - "Cerium Dioxide", - subscriptNumbers("CeO2"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .enforceUnification(), - offsetID + 25, - TextureSet.SET_DULL); - - public static final Werkstoff CeriumChloride = new Werkstoff( - new short[] { 255, 255, 255 }, - "Cerium Chloride", - subscriptNumbers("CeCl3"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 26, - TextureSet.SET_DULL); - - public static final Werkstoff CeriumOxalate = new Werkstoff( - new short[] { 255, 255, 224 }, - "Cerium Oxalate", - subscriptNumbers("Ce2(C2O4)3"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 27, - TextureSet.SET_DULL); - - public static final Werkstoff CeriumIIIOxide = new Werkstoff( - new short[] { 255, 255, 102 }, - "Cerium (III) Oxide", - subscriptNumbers("Ce2O3"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 28, - TextureSet.SET_DULL, - Arrays.asList(Materials.Cerium, Materials.Oxygen), - new Pair<>(Materials.Cerium, 2), - new Pair<>(Materials.Oxygen, 3)); - - public static final Werkstoff CeriumRichMixture = new Werkstoff( - new short[] { 244, 164, 96 }, - "Cerium-Rich Mixture", - subscriptNumbers("??Ce??"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 29, - TextureSet.SET_DULL); - - public static final Werkstoff CooledMonaziteRareEarthConcentrate = new Werkstoff( - new short[] { 250, 214, 165 }, - "Cooled Monazite Rare Earth Concentrate", - subscriptNumbers("????"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 30, - TextureSet.SET_DULL); - - public static final Werkstoff MonaziteRarerEarthSediment = new Werkstoff( - new short[] { 250, 214, 165 }, - "MonaziteRarer Earth Sediment", - subscriptNumbers("????"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 31, - TextureSet.SET_DULL); - - public static final Werkstoff MonaziteHeterogenousHalogenicRareEarthMixture = new Werkstoff( - new short[] { 250, 214, 165 }, - "Heterogenous Halogenic Monazite Rare Earth Mixture", - subscriptNumbers("????"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 32, - TextureSet.SET_DULL); - - public static final Werkstoff SaturatedMonaziteRareEarthMixture = new Werkstoff( - new short[] { 250, 214, 165 }, - "Saturated Monazite Rare Earth", - subscriptNumbers("????"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 33, - TextureSet.SET_DULL); - - public static final Werkstoff SamaricResidue = new Werkstoff( - new short[] { 248, 243, 231 }, - "Samaric Residue", - subscriptNumbers("??SmGd??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 34, - TextureSet.SET_DULL); - - public static final Werkstoff AmmoniumNitrate = new Werkstoff( - new short[] { 255, 255, 255 }, - "Ammonium Nitrate Solution", - subscriptNumbers("NH4NO3"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID + 36, - TextureSet.SET_FLUID); - - public static final Werkstoff ThoriumPhosphateCake = new Werkstoff( - new short[] { 188, 143, 143 }, - "Thorium-Phosphate Cake", - subscriptNumbers("??ThP??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 37, - TextureSet.SET_DULL); - - public static final Werkstoff ThoriumPhosphateConcentrate = new Werkstoff( - new short[] { 217, 144, 88 }, - "Thorium-Phosphate Concentrate", - subscriptNumbers("??ThP??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 38, - TextureSet.SET_DULL); - - public static final Werkstoff UraniumFiltrate = new Werkstoff( - new short[] { 190, 240, 94 }, - "Uranium Filtrate", - subscriptNumbers("??U??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 39, - TextureSet.SET_DULL); - - public static final Werkstoff NeutralizedUraniumFiltrate = new Werkstoff( - new short[] { 217, 120, 88 }, - "Neutralized Uranium Filtrate", - subscriptNumbers("??U??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 40, - TextureSet.SET_DULL); - - public static final Werkstoff SeaweedAsh = new Werkstoff( - new short[] { 70, 75, 71 }, - "Seaweed Ash", - new Werkstoff.Stats(), - Werkstoff.Types.BIOLOGICAL, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 41, - TextureSet.SET_DULL); - - public static final Werkstoff SeaweedConcentrate = new Werkstoff( - new short[] { 70, 100, 71 }, - "Seaweed Concentrate", - subscriptNumbers("??I??"), - new Werkstoff.Stats(), - Werkstoff.Types.BIOLOGICAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID + 42, - TextureSet.SET_FLUID); - - public static final Werkstoff PotassiumPermanganate = new Werkstoff( - new short[] { 165, 50, 138 }, - "Potassium Permanganate", - subscriptNumbers("KMnO4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 43, - TextureSet.SET_DULL); - - public static final Werkstoff PotassiumPermanganateSolution = new Werkstoff( - new short[] { 165, 50, 138 }, - "Potassium Permanganate Solution", - subscriptNumbers("KMnO4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID + 44, - TextureSet.SET_FLUID); - - public static final Werkstoff SeaweedByproducts = new Werkstoff( - new short[] { 125, 50, 138 }, - "Seaweed Byproducts", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID + 45, - TextureSet.SET_FLUID); - - public static final Werkstoff NitricLeachedMonaziteMixture = new Werkstoff( - new short[] { 125, 50, 138 }, - "Nitric-Leached Monazite Mixture", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID + 46, - TextureSet.SET_FLUID); - - public static final Werkstoff EuropiumOxide = new Werkstoff( - new short[] { 255, 255, 255 }, - "Europium Oxide", - subscriptNumbers("EuO"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 47, - TextureSet.SET_DULL); - - public static final Werkstoff EuropiumSulfide = new Werkstoff( - new short[] { 5, 0, 5 }, - "Europium Sulfide", - subscriptNumbers("EuS"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 48, - TextureSet.SET_DULL); - - public static final Werkstoff UnknownBlend = new Werkstoff( - new short[] { 0, 0, 5 }, - "UnknownBlend", - subscriptNumbers("?????"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 49, - TextureSet.SET_DULL); - - public static final Werkstoff EuropiumIIIOxide = new Werkstoff( - new short[] { 255, 230, 255 }, - "Europium III Oxide", - subscriptNumbers("Eu2O3"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID + 50, - TextureSet.SET_DULL); - - // TODO - - // BASTNASITE - public static final Werkstoff MuddyRareEarthBastnasiteSolution = new Werkstoff( - new short[] { 205, 133, 63 }, - "Muddy Bastnasite Rare Earth Solution", - subscriptNumbers("??LaCeY??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID2, - TextureSet.SET_FLUID); - /* - * public static final Werkstoff FluorosilicicAcid = new Werkstoff( new short[] {205, 133, 63}, - * "Hexafluorosilicic Acid", subscriptNumbers("H2SiF6"), new Werkstoff.Stats(), Werkstoff.Types.COMPOUND, new - * Werkstoff.GenerationFeatures().disable().addCells(), offsetID2 + 1, TextureSet.SET_FLUID ); - */ - public static final Werkstoff SodiumFluorosilicate = new Werkstoff( - new short[] { 205, 133, 63 }, - "Sodiumfluorosilicate", - subscriptNumbers("Na2SiF6"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID2 + 2, - TextureSet.SET_FLUID); - - public static final Werkstoff SteamCrackedBasnasiteSolution = new Werkstoff( - new short[] { 205, 133, 63 }, - "Steam-Cracked Bastnasite Mud", - subscriptNumbers("??LaCeY??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID2 + 3, - TextureSet.SET_FLUID); - - public static final Werkstoff ConditionedBastnasiteMud = new Werkstoff( - new short[] { 205, 133, 63 }, - "Conditioned Bastnasite Mud", - subscriptNumbers("??LaCeY??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID2 + 4, - TextureSet.SET_FLUID); - - public static final Werkstoff DiltedRareEarthBastnasiteMud = new Werkstoff( - new short[] { 205, 133, 63 }, - "Diluted Bastnasite Mud", - subscriptNumbers("??LaCeY??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID2 + 5, - TextureSet.SET_FLUID); - - public static final Werkstoff FilteredBastnasiteMud = new Werkstoff( - new short[] { 205, 133, 63 }, - "Filtered Bastnasite Mud", - subscriptNumbers("??LaCeY??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID2 + 6, - TextureSet.SET_FLUID); - - public static final Werkstoff BastnasiteRareEarthOxidePowder = new Werkstoff( - new short[] { 205, 133, 63 }, - "Bastnasite Rare Earth Oxides", - subscriptNumbers("??LaCeY??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 7, - TextureSet.SET_DULL); - - public static final Werkstoff LeachedBastnasiteRareEarthOxides = new Werkstoff( - new short[] { 205, 133, 63 }, - "Acid-Leached Bastnasite Rare Earth Oxides", - subscriptNumbers("??LaCeY??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 8, - TextureSet.SET_DULL); - - public static final Werkstoff Gangue = new Werkstoff( - new short[] { 0, 0, 0 }, - "Gangue", - subscriptNumbers("Useless..."), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addPrefix(OrePrefixes.block) - .removePrefix(OrePrefixes.ingot) - .removePrefix(OrePrefixes.gem), - offsetID2 + 9, - TextureSet.SET_DULL); - // TODO: Deal with colouring - public static final Werkstoff RoastedRareEarthOxides = new Werkstoff( - new short[] { 160, 82, 45 }, - "Roasted Rare Earth Oxides", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 10, - TextureSet.SET_DULL); - - public static final Werkstoff WetRareEarthOxides = new Werkstoff( - new short[] { 160, 82, 49 }, - "Wet Rare Earth Oxides", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 11, - TextureSet.SET_DULL); - - public static final Werkstoff CeriumOxidisedRareEarthOxides = new Werkstoff( - new short[] { 160, 82, 49 }, - "Cerium-Oxidised Rare Earth Oxides", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 12, - TextureSet.SET_DULL); - - public static final Werkstoff BastnasiteRarerEarthOxides = new Werkstoff( - new short[] { 160, 82, 49 }, - "Bastnasite Rarer Earth Oxides", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 13, - TextureSet.SET_DULL); - - public static final Werkstoff NitratedBastnasiteRarerEarthOxides = new Werkstoff( - new short[] { 160, 90, 60 }, - "Nitrogenated Bastnasite Rarer Earth Oxides", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID2 + 14, - TextureSet.SET_DULL); - - public static final Werkstoff SaturatedBastnasiteRarerEarthOxides = new Werkstoff( - new short[] { 170, 90, 60 }, - "Bastnasite Rarer Earth Oxide Suspension", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID2 + 15, - TextureSet.SET_DULL); - - public static final Werkstoff SamaricRareEarthConcentrate = new Werkstoff( - new short[] { 170, 90, 60 }, - "Samaric Rare Earth Concentrate", - subscriptNumbers("??SmHoTb??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 16, - TextureSet.SET_DULL); - - public static final Werkstoff NeodymicRareEarthConcentrate = new Werkstoff( - new short[] { 170, 90, 60 }, - "Neodymium Rare Earth Concentrate", - subscriptNumbers("??LaNdPr??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 17, - TextureSet.SET_DULL); - public static final Werkstoff LanthaniumChloride = new Werkstoff( - new short[] { 82, 112, 102 }, - "Lanthanium Chloride", - subscriptNumbers("LaCl3"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 21, - TextureSet.SET_DULL, - Arrays.asList(Materials.Lanthanum, Materials.Chlorine), - new Pair<>(Materials.Lanthanum, 1), - new Pair<>(Materials.Chlorine, 3)); - - public static final Werkstoff NeodymiumOxide = new Werkstoff( - new short[] { 82, 112, 102 }, - "Neodymium Oxide", - subscriptNumbers("Nd2O3"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 22, - TextureSet.SET_DULL, - Arrays.asList(Materials.Neodymium, Materials.Oxygen), - new Pair<>(Materials.Neodymium, 2), - new Pair<>(Materials.Oxygen, 3)); - - public static final Werkstoff FluorinatedSamaricConcentrate = new Werkstoff( - new short[] { 255, 182, 193 }, - "Fluorinated Samaric Concentrate", - subscriptNumbers("??SmHo??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 23, - TextureSet.SET_DULL); - - public static final Werkstoff CalciumFluoride = new Werkstoff( - new short[] { 255, 250, 250 }, - "Calcium Fluoride", - subscriptNumbers("CaF2"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten() - .addCells(), - offsetID2 + 24, - TextureSet.SET_DULL, - Arrays.asList(Materials.Calcium, Materials.Fluorine), - new Pair<>(Materials.Calcium, 1), - new Pair<>(Materials.Fluorine, 2)); - - public static final Werkstoff SamariumTerbiumMixture = new Werkstoff( - new short[] { 223, 182, 193 }, - "Samarium-Terbium Mixture", - subscriptNumbers("??SmTb??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 25, - TextureSet.SET_DULL); - - public static final Werkstoff NitratedSamariumTerbiumMixture = new Werkstoff( - new short[] { 223, 182, 193 }, - "Nitrogenated Samarium-Terbium Mixture", - subscriptNumbers("??SmTb??NH4NO3"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 26, - TextureSet.SET_DULL); - - public static final Werkstoff TerbiumNitrate = new Werkstoff( - new short[] { 167, 252, 0 }, - "Terbium Nitrate", - subscriptNumbers("TbNO3"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 27, - TextureSet.SET_DULL, - Arrays.asList(Materials.Terbium, Materials.Nitrogen, Materials.Oxygen), - new Pair<>(Materials.Terbium, 1), - new Pair<>(Materials.Nitrogen, 1), - new Pair<>(Materials.Oxygen, 3)); - - public static final Werkstoff SamariumOreConcentrate = new Werkstoff( - new short[] { 255, 200, 230 }, - "Samarium Ore Concentrate", - subscriptNumbers("??Sm??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 28, - TextureSet.SET_DULL); - - public static final Werkstoff DephosphatedSamariumConcentrate = new Werkstoff( - new short[] { 255, 170, 220 }, - "Dephosphated Samarium Concentrate", - subscriptNumbers("??Sm??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID2 + 29, - TextureSet.SET_DULL); - - // Weird/Exciting Chemicals - public static final Werkstoff Tetrahydrofuran = new Werkstoff( - new short[] { 222, 165, 164 }, - "Tetrahydrofuran", - subscriptNumbers("(CH2)4O"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3, - TextureSet.SET_FLUID); - - // 1,4-Butanediol - public static final Werkstoff Butanediol = new Werkstoff( - new short[] { 185, 78, 72 }, - "1,4-Butanediol", - subscriptNumbers("HO(CH2)4OH"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3 + 1, - TextureSet.SET_FLUID); - - // Acidicised 1,4-Butanediol - public static final Werkstoff AcidicButanediol = new Werkstoff( - new short[] { 255, 239, 213 }, - "Acidicised 1,4-Butanediol", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3 + 2, - TextureSet.SET_FLUID); - - // Tellurium-Molybdenum-Oxide Catalyst - public static final Werkstoff MoTeOCatalyst = new Werkstoff( - new short[] { 238, 131, 238 }, - "Tellurium-Molybdenum-Oxide Catalyst", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID3 + 3, - TextureSet.SET_DULL); - - // Tellurium Oxide - public static final Werkstoff TelluriumIVOxide = new Werkstoff( - new short[] { 229, 199, 187 }, - "Tellurium (IV) Oxide", - subscriptNumbers("TeO2"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID3 + 4, - TextureSet.SET_DULL); - - public static final Werkstoff MolybdenumIVOxide = new Werkstoff( - new short[] { 52, 53, 57 }, - "Molybdenum (IV) Oxide", - subscriptNumbers("MoO2"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID3 + 5, - TextureSet.SET_DULL); - - public static final Werkstoff Polytetrahydrofuran = new Werkstoff( - new short[] { 192, 128, 129 }, - "Polytetrahydrofuran", - subscriptNumbers("(C4H8O)OH2"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addCells(), - offsetID3 + 6, - TextureSet.SET_DULL); - - public static final Werkstoff TungstophosphoricAcid = new Werkstoff( - new short[] { 223, 255, 0 }, - "Tungstophosphoric Acid", - subscriptNumbers("H3PW12O40"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3 + 7, - TextureSet.SET_FLUID); - - public static final Werkstoff TolueneDiisocyanate = new Werkstoff( - new short[] { 255, 255, 102 }, - "Toluene Diisocyanate", - subscriptNumbers("CH3C6H3(NCO)2"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3 + 8, - TextureSet.SET_FLUID); - - public static final Werkstoff Dinitrotoluene = new Werkstoff( - new short[] { 216, 191, 216 }, - "Dinitrotoluene", - subscriptNumbers("C7H6N2O4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3 + 9, - TextureSet.SET_FLUID); - - public static final Werkstoff Diaminotoluene = new Werkstoff( - new short[] { 227, 218, 201 }, - "Diaminotoluene", - subscriptNumbers("C6H3(NH2)2CH3"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3 + 10, - TextureSet.SET_FLUID); - - public static final Werkstoff TolueneTetramethylDiisocyanate = new Werkstoff( - new short[] { 255, 255, 255 }, - "Toluene Tetramethyl Diisocyanate", - subscriptNumbers("(CONH)2(C6H4)2CH2(C4O)"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3 + 11, - TextureSet.SET_FLUID); - - public static final Werkstoff PTMEGElastomer = new Werkstoff( - new short[] { 248, 248, 255 }, - "PTMEG Elastomer", - new Werkstoff.Stats().setMeltingPoint(600) - .setMeltingVoltage(64), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten() - .addMetalItems(), - offsetID3 + 12, - TextureSet.SET_DULL); - - public static final Werkstoff PotassiumChlorate = new Werkstoff( - new short[] { 240, 255, 255 }, - "Potassium Chlorate", - subscriptNumbers("KClO3"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten(), - offsetID3 + 14, - TextureSet.SET_DULL); - - public static final Werkstoff DilutedAcetone = new Werkstoff( - new short[] { 254, 254, 250 }, - "Diluted Acetone", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3 + 16, - TextureSet.SET_FLUID); - - public static final Werkstoff MolybdenumTrioxide = new Werkstoff( - new short[] { 236, 255, 248 }, - "Molybdenum Trioxide", - subscriptNumbers("MoO3"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID3 + 17, - TextureSet.SET_DULL); - - // TODO Samarium Processing Line Material regist - - public static final Werkstoff MuddySamariumRareEarthSolution = new Werkstoff( - new short[] { 226, 180, 108 }, - "Muddy Samarium Rare Earth Solution", - subscriptNumbers("???Sm???"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID5 + 1, - TextureSet.SET_FLUID); - - public static final Werkstoff SamariumRareEarthMud = new Werkstoff( - new short[] { 226, 180, 128 }, - "Samarium Rare Earth Mud", - subscriptNumbers("??Sm??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID5 + 2, - TextureSet.SET_FLUID); - - public static final Werkstoff DilutedSamariumRareEarthSolution = new Werkstoff( - new short[] { 226, 180, 148 }, - "Diluted Samarium Rare Earth Solution", - subscriptNumbers("?Sm?"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID5 + 3, - TextureSet.SET_FLUID); - - public static final Werkstoff SamariumOxalate = new Werkstoff( - new short[] { 248, 248, 180 }, - "Samarium(III) Oxalate", - subscriptNumbers("?Sm2(C2O4)3"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID5 + 4, - TextureSet.SET_DULL); - - public static final Werkstoff SamariumChloride = new Werkstoff( - new short[] { 248, 248, 120 }, - "Samarium(III)-Chloride", - subscriptNumbers("?SmCl3"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten(), - offsetID5 + 5, - TextureSet.SET_DULL); - - public static final Werkstoff SamariumChlorideSodiumChlorideBlend = new Werkstoff( - new short[] { 255, 200, 230 }, - "Samarium Chloride-Sodium Chloride Blend", - subscriptNumbers("?SmCl3NaCl"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID5 + 6, - TextureSet.SET_DULL); - - public static final Werkstoff ImpureLanthanumChloride = new Werkstoff( - new short[] { 90, 100, 30 }, - "Impure Lanthanum Chloride", - subscriptNumbers("?LaCl3"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID5 + 7, - TextureSet.SET_DULL); - - public static final Werkstoff SamariumOxide = new Werkstoff( - new short[] { 223, 182, 193 }, - "Samarium Oxide", - subscriptNumbers("Sm2O3"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID5 + 8, - TextureSet.SET_DULL, - Arrays.asList(Materials.Samarium, Materials.Oxygen), - new Pair<>(Materials.Samarium, 2), - new Pair<>(Materials.Oxygen, 3)); - - public static final Werkstoff ChlorinatedRareEarthConcentrate = new Werkstoff( - new short[] { 130, 80, 60 }, - "Chlorinated Rare Earth Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID5 + 9, - TextureSet.SET_FLUID); - - public static final Werkstoff ChlorinatedRareEarthEnrichedSolution = new Werkstoff( - new short[] { 130, 90, 60 }, - "Chlorinated Rare Earth Enriched Solution", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID5 + 10, - TextureSet.SET_FLUID); - - public static final Werkstoff ChlorinatedRareEarthDilutedSolution = new Werkstoff( - new short[] { 216, 180, 100 }, - "Chlorinated Rare Earth Diluted Solution", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID5 + 11, - TextureSet.SET_FLUID); - - public static final Werkstoff RarestEarthResidue = new Werkstoff( - new short[] { 224, 211, 211 }, - "Rarest Earth Residue", - subscriptNumbers("???"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID5 + 12, - TextureSet.SET_DULL); - - // TODO reg Lanth Ore Concentrate - /** - * Extracted Nano Resin Lanthanum1.2 Praseodymium3.4 Cerium5.6 Neodymium7.8 Promethium9.10 Samarium11.12 √ - * Europium13.14 Gadolinium15.16 Terbium17.18 Dysprosium19.20 Holmium21.22 Erbium23.24 Thulium25.26 Ytterbium27.28 - * Lutetium29.30 - */ - - public static final Werkstoff LanthanumExtractingNanoResin = new Werkstoff( - new short[] { 50, 80, 40 }, - "Lanthanum Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 1, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledLanthanumExtractingNanoResin = new Werkstoff( - new short[] { 128, 128, 80 }, - "Filled Lanthanum Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 2, - TextureSet.SET_FLUID); - - public static final Werkstoff PraseodymiumExtractingNanoResin = new Werkstoff( - new short[] { 80, 192, 130 }, - "Praseodymium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 3, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledPraseodymiumExtractingNanoResin = new Werkstoff( - new short[] { 140, 192, 130 }, - "Filled Praseodymium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 4, - TextureSet.SET_FLUID); - - public static final Werkstoff CeriumExtractingNanoResin = new Werkstoff( - new short[] { 80, 240, 160 }, - "Cerium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 5, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledCeriumExtractingNanoResin = new Werkstoff( - new short[] { 160, 240, 180 }, - "Filled Cerium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 6, - TextureSet.SET_FLUID); - - public static final Werkstoff NeodymiumExtractingNanoResin = new Werkstoff( - new short[] { 128, 140, 128 }, - "Neodymium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 7, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledNeodymiumExtractingNanoResin = new Werkstoff( - new short[] { 150, 150, 150 }, - "Filled Neodymium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 8, - TextureSet.SET_FLUID); - - public static final Werkstoff PromethiumExtractingNanoResin = new Werkstoff( - new short[] { 110, 255, 60 }, - "Promethium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 9, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledPromethiumExtractingNanoResin = new Werkstoff( - new short[] { 150, 255, 140 }, - "Filled Promethium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 10, - TextureSet.SET_FLUID); - - public static final Werkstoff SamariumExtractingNanoResin = new Werkstoff( - new short[] { 255, 240, 100 }, - "Samarium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 11, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledSamariumExtractingNanoResin = new Werkstoff( - new short[] { 255, 240, 196 }, - "Filled Samarium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 12, - TextureSet.SET_FLUID); - - public static final Werkstoff EuropiumExtractingNanoResin = new Werkstoff( - new short[] { 240, 160, 240 }, - "Europium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 13, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledEuropiumExtractingNanoResin = new Werkstoff( - new short[] { 240, 200, 240 }, - "Filled Europium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 14, - TextureSet.SET_FLUID); - - public static final Werkstoff GadoliniumExtractingNanoResin = new Werkstoff( - new short[] { 120, 255, 80 }, - "Gadolinium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 15, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledGadoliniumExtractingNanoResin = new Werkstoff( - new short[] { 160, 255, 140 }, - "Filled Gadolinium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 16, - TextureSet.SET_FLUID); - - public static final Werkstoff TerbiumExtractingNanoResin = new Werkstoff( - new short[] { 200, 200, 200 }, - "Terbium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 17, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledTerbiumExtractingNanoResin = new Werkstoff( - new short[] { 255, 255, 255 }, - "Filled Terbium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 18, - TextureSet.SET_FLUID); - - public static final Werkstoff DysprosiumExtractingNanoResin = new Werkstoff( - new short[] { 110, 240, 180 }, - "Dysprosium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 19, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledDysprosiumExtractingNanoResin = new Werkstoff( - new short[] { 150, 240, 180 }, - "Filled Dysprosium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 20, - TextureSet.SET_FLUID); - - public static final Werkstoff HolmiumExtractingNanoResin = new Werkstoff( - new short[] { 16, 16, 216 }, - "Holmium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 21, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledHolmiumExtractingNanoResin = new Werkstoff( - new short[] { 60, 90, 255 }, - "Filled Holmium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 22, - TextureSet.SET_FLUID); - - public static final Werkstoff ErbiumExtractingNanoResin = new Werkstoff( - new short[] { 200, 160, 80 }, - "Erbium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 23, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledErbiumExtractingNanoResin = new Werkstoff( - new short[] { 233, 170, 100 }, - "Filled Erbium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 24, - TextureSet.SET_FLUID); - - public static final Werkstoff ThuliumExtractingNanoResin = new Werkstoff( - new short[] { 128, 178, 255 }, - "Thulium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 25, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledThuliumExtractingNanoResin = new Werkstoff( - new short[] { 160, 200, 255 }, - "Filled Thulium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 26, - TextureSet.SET_FLUID); - - public static final Werkstoff YtterbiumExtractingNanoResin = new Werkstoff( - new short[] { 0, 255, 0 }, - "Ytterbium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 27, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledYtterbiumExtractingNanoResin = new Werkstoff( - new short[] { 100, 255, 100 }, - "Filled Ytterbium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 28, - TextureSet.SET_FLUID); - - public static final Werkstoff LutetiumExtractingNanoResin = new Werkstoff( - new short[] { 230, 16, 230 }, - "Lutetium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 29, - TextureSet.SET_FLUID); - - public static final Werkstoff FilledLutetiumExtractingNanoResin = new Werkstoff( - new short[] { 240, 100, 240 }, - "Filled Lutetium Extracting Nano Resin", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 30, - TextureSet.SET_FLUID); - - // Lanthanides Chloride Concentrate - // Lanthanum - public static final Werkstoff LanthanumChlorideConcentrate = new Werkstoff( - new short[] { 128, 128, 80 }, - "Lanthanum Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 31, - TextureSet.SET_FLUID); - - // Praseodymium - public static final Werkstoff PraseodymiumChlorideConcentrate = new Werkstoff( - new short[] { 140, 192, 130 }, - "Praseodymium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 32, - TextureSet.SET_FLUID); - - // Cerium - public static final Werkstoff CeriumChlorideConcentrate = new Werkstoff( - new short[] { 160, 240, 180 }, - "Cerium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 33, - TextureSet.SET_FLUID); - - // Neodymium - public static final Werkstoff NeodymiumChlorideConcentrate = new Werkstoff( - new short[] { 150, 150, 150 }, - "Neodymium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 34, - TextureSet.SET_FLUID); - - // - public static final Werkstoff PromethiumChlorideConcentrate = new Werkstoff( - new short[] { 150, 255, 140 }, - "Promethium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 35, - TextureSet.SET_FLUID); - - // - public static final Werkstoff SamariumChlorideConcentrate = new Werkstoff( - new short[] { 255, 240, 196 }, - "Samarium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 36, - TextureSet.SET_FLUID); - - // - public static final Werkstoff EuropiumChlorideConcentrate = new Werkstoff( - new short[] { 240, 200, 240 }, - "Europium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 37, - TextureSet.SET_FLUID); - - // - public static final Werkstoff GadoliniumChlorideConcentrate = new Werkstoff( - new short[] { 160, 255, 140 }, - "Gadolinium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 38, - TextureSet.SET_FLUID); - - // - public static final Werkstoff TerbiumChlorideConcentrate = new Werkstoff( - new short[] { 255, 255, 255 }, - "Terbium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 39, - TextureSet.SET_FLUID); - - // - public static final Werkstoff DysprosiumChlorideConcentrate = new Werkstoff( - new short[] { 150, 240, 180 }, - "Dysprosium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 40, - TextureSet.SET_FLUID); - - // - public static final Werkstoff HolmiumChlorideConcentrate = new Werkstoff( - new short[] { 60, 90, 255 }, - "Holmium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 41, - TextureSet.SET_FLUID); - - // - public static final Werkstoff ErbiumChlorideConcentrate = new Werkstoff( - new short[] { 233, 170, 100 }, - "Erbium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 42, - TextureSet.SET_FLUID); - - // - public static final Werkstoff ThuliumChlorideConcentrate = new Werkstoff( - new short[] { 160, 200, 255 }, - "Thulium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 43, - TextureSet.SET_FLUID); - - // - public static final Werkstoff YtterbiumChlorideConcentrate = new Werkstoff( - new short[] { 100, 255, 100 }, - "Ytterbium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 44, - TextureSet.SET_FLUID); - - // - public static final Werkstoff LutetiumChlorideConcentrate = new Werkstoff( - new short[] { 240, 100, 240 }, - "Lutetium Chloride Concentrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID4 + 45, - TextureSet.SET_FLUID); - - // Lanthanides Ore Concentrate - - // Lanthanum - public static final Werkstoff LanthanumOreConcentrate = new Werkstoff( - new short[] { 128, 128, 96 }, - "Lanthanum Ore Concentrate", - subscriptNumbers("??La??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 46, - TextureSet.SET_DULL); - - // Praseodymium - public static final Werkstoff PraseodymiumOreConcentrate = new Werkstoff( - new short[] { 140, 192, 130 }, - "Praseodymium Ore Concentrate", - subscriptNumbers("??Pr??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 47, - TextureSet.SET_DULL); - - // Cerium - public static final Werkstoff CeriumOreConcentrate = CeriumRichMixture; - - // Neodymium - public static final Werkstoff NeodymiumOreConcentrate = new Werkstoff( - new short[] { 128, 128, 128 }, - "Neodymium Ore Concentrate", - subscriptNumbers("??Nd??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 49, - TextureSet.SET_DULL); - - // Promethium - public static final Werkstoff PromethiumOreConcentrate = new Werkstoff( - new short[] { 150, 255, 140 }, - "Promethium Ore Concentrate", - subscriptNumbers("??Po??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 50, - TextureSet.SET_DULL); - - // Europium - public static final Werkstoff EuropiumOreConcentrate = new Werkstoff( - new short[] { 240, 200, 240 }, - "Europium Ore Concentrate", - subscriptNumbers("??Eu??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 51, - TextureSet.SET_DULL); - - // Gadolinium - public static final Werkstoff GadoliniumOreConcentrate = new Werkstoff( - new short[] { 160, 255, 140 }, - "Gadolinium Ore Concentrate", - subscriptNumbers("??Gd??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 52, - TextureSet.SET_DULL); - - // Terbium - public static final Werkstoff TerbiumOreConcentrate = new Werkstoff( - new short[] { 255, 255, 255 }, - "Terbium Ore Concentrate", - subscriptNumbers("??Tb??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 53, - TextureSet.SET_DULL); - - // Dysprosium - public static final Werkstoff DysprosiumOreConcentrate = new Werkstoff( - new short[] { 150, 240, 180 }, - "Dysprosium Ore Concentrate", - subscriptNumbers("??Dy??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 54, - TextureSet.SET_DULL); - - // Holmium - public static final Werkstoff HolmiumOreConcentrate = new Werkstoff( - new short[] { 60, 90, 255 }, - "Holmium Ore Concentrate", - subscriptNumbers("??Ho??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 55, - TextureSet.SET_DULL); - - // Erbium - public static final Werkstoff ErbiumOreConcentrate = new Werkstoff( - new short[] { 233, 170, 100 }, - "Erbium Ore Concentrate", - subscriptNumbers("??Er??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 56, - TextureSet.SET_DULL); - - // Thulium - public static final Werkstoff ThuliumOreConcentrate = new Werkstoff( - new short[] { 160, 200, 255 }, - "Thulium Ore Concentrate", - subscriptNumbers("??Tm??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 57, - TextureSet.SET_DULL); - - // Ytterbium - public static final Werkstoff YtterbiumOreConcentrate = new Werkstoff( - new short[] { 100, 255, 100 }, - "Ytterbium Ore Concentrate", - subscriptNumbers("??Yb??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 58, - TextureSet.SET_DULL); - - // Lutetium - public static final Werkstoff LutetiumOreConcentrate = new Werkstoff( - new short[] { 240, 100, 240 }, - "Lutetium Ore Concentrate", - subscriptNumbers("??Lu??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID4 + 59, - TextureSet.SET_DULL); - - // LuAG - public static final Werkstoff CeriumDopedLutetiumAluminiumOxygenBlend = new Werkstoff( - new short[] { 128, 192, 80 }, - "Cerium-doped Lutetium Aluminium Oxygen Blend", - subscriptNumbers("(Ce)Lu3Al5O12"), - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten(), - offsetID5 + 38, - TextureSet.SET_DULL); - - public static final Werkstoff CeriumDopedLutetiumAluminiumGarnet = new Werkstoff( - new short[] { 144, 255, 63 }, - "Cerium-doped Lutetium Aluminium Garnet (Ce:LuAG)", - subscriptNumbers("(Ce)Lu3Al5O12"), - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .addGems(), - offsetID5 + 39, - TextureSet.SET_GEM_VERTICAL); - - public static final Werkstoff Permalloy = new Werkstoff( - new short[] { 195, 230, 225 }, - "Permalloy", - subscriptNumbers("Ni4FeMo"), - new Werkstoff.Stats().setCentrifuge(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMetalItems() - .addMixerRecipes((short) 3) - .enforceUnification(), - offsetID3b, - TextureSet.SET_DULL, - new Pair<>(Materials.Nickel, 4), - new Pair<>(Materials.Iron, 1), - new Pair<>(Materials.Molybdenum, 1)); - - public static final Werkstoff MuMetal = new Werkstoff( - new short[] { 210, 230, 225 }, - "Mu-metal", - subscriptNumbers("?NiFeCuCrMo?"), - new Werkstoff.Stats().setBlastFurnace(true) - .setCentrifuge(true) - .setMass(180) - .setSpeedOverride(3), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMetalItems() - .addMultipleIngotMetalWorkingItems() - .addCraftingMetalWorkingItems() - .enforceUnification(), - offsetID3b + 1, - TextureSet.SET_METALLIC, - new Pair<>(WerkstoffMaterialPool.Permalloy, 9), - new Pair<>(Materials.Copper, 1), - new Pair<>(Materials.Chrome, 1)); - - public static final Werkstoff Thorium234 = new Werkstoff( - new short[] { 0, 40, 0 }, - "Thorium 234", - superscriptNumbers("Th234"), - new Werkstoff.Stats().setBlastFurnace(true) - .setRadioactive(true), - Werkstoff.Types.ISOTOPE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID3b + 2, - TextureSet.SET_DULL); - - public static final Werkstoff SiliconNitride = new Werkstoff( - new short[] { 132, 140, 120 }, - "Silicon Nitride", - subscriptNumbers("Si3N4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMetalItems() - .enforceUnification(), - offsetID3b + 3, - TextureSet.SET_DULL); - - public static final Werkstoff Fluoroform = new Werkstoff( - new short[] { 0, 0, 0 }, - "Fluoroform", - subscriptNumbers("CHF3"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3b + 4, - TextureSet.SET_FLUID, - new Pair<>(Materials.Carbon, 1), - new Pair<>(Materials.Hydrogen, 1), - new Pair<>(Materials.Fluorine, 3)); - - public static final Werkstoff FluoroformOxygenMix = new Werkstoff( - new short[] { 0, 0, 0 }, - "Reactive-Ion Etching Mixture", - subscriptNumbers("CHF3/O2"), - new Werkstoff.Stats().setCentrifuge(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3b + 5, - TextureSet.SET_FLUID); - - public static final Werkstoff BoronTrioxide = new Werkstoff( - new short[] { 238, 222, 209 }, - "Boron Trioxide", - subscriptNumbers("B2O3"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID3b + 6, - TextureSet.SET_DULL, - new Pair<>(Materials.Boron, 2), - new Pair<>(Materials.Oxygen, 3)); - - public static final Werkstoff BoronTrichloride = new Werkstoff( - new short[] { 154, 96, 208 }, - "Boron Trichloride", - subscriptNumbers("BCl3"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3b + 7, - TextureSet.SET_FLUID, - new Pair<>(Materials.Boron, 1), - new Pair<>(Materials.Chlorine, 3)); - - public static final Werkstoff LanthanumHexaboride = new Werkstoff( - new short[] { 140, 110, 120 }, - "Lanthanum Hexaboride", - subscriptNumbers("LaB6"), - new Werkstoff.Stats().setMass(200), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addGems() - .addSimpleMetalWorkingItems(), - offsetID3b + 8, - TextureSet.SET_GEM_HORIZONTAL, - new Pair<>(Materials.Lanthanum, 1), - new Pair<>(Materials.Boron, 6)); - - public static final Werkstoff LanthanumOxide = new Werkstoff( - new short[] { 105, 209, 180 }, - "Lanthanum Oxide", - subscriptNumbers("La2O3"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - offsetID3b + 9, - TextureSet.SET_DULL); - - public static final Werkstoff NitrogenPlasmaSilaneMix = new Werkstoff( - new short[] { 140, 125, 220 }, - "Silane-Nitrogen Plasma Mixture", - subscriptNumbers("SiH4/N"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - offsetID3b + 10, - TextureSet.SET_FLUID); - - public static void runInit() { - addSubTags(); - } - - private static void addSubTags() { - - // WerkstoffMaterialPool.PTMEGElastomer.add(SubTag.BOUNCY, SubTag.STRETCHY); - - } - - @Override - public void run() {} -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/Digester.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/Digester.java deleted file mode 100644 index 239be6a3ea..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/Digester.java +++ /dev/null @@ -1,241 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity; - -import static com.elisis.gtnhlanth.util.DescTextLocalization.BLUEPRINT_INFO; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; - -import javax.annotation.Nonnull; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.elisis.gtnhlanth.api.recipe.LanthanidesRecipeMaps; -import com.elisis.gtnhlanth.util.DescTextLocalization; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; - -public class Digester extends GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - protected int casingAmount = 0; - protected int height = 0; - - private HeatingCoilLevel heatLevel; - - private final IStructureDefinition multiDefinition = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { " ", " ttttt ", " t---t ", " t---t ", " t---t ", " ttttt ", " " }, - { " ttt ", " t---t ", "t-----t", "t-----t", "t-----t", " t---t ", " ttt " }, - { " tccct ", "tc---ct", "c-----c", "c-----c", "c-----c", "tc---ct", " tccct " }, - { " tt~tt ", "thhhhht", "thsssht", "thsssht", "thsssht", "thhhhht", " ttttt " }, })) - - .addElement( - 't', - buildHatchAdder(Digester.class) - .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(47) - .dot(1) - .buildAndChain(GregTech_API.sBlockCasings4, 0)) - .addElement('h', ofBlock(GregTech_API.sBlockCasings1, 11)) - .addElement('s', ofBlock(GregTech_API.sBlockCasings4, 1)) - .addElement('c', ofCoil(Digester::setCoilLevel, Digester::getCoilLevel)) - .build(); - - public Digester(String name) { - super(name); - } - - public Digester(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return checkPiece(mName, 3, 3, 0) && !mMufflerHatches.isEmpty() && mMaintenanceHatches.size() == 1; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - public HeatingCoilLevel getCoilLevel() { - return this.heatLevel; - } - - public void setCoilLevel(HeatingCoilLevel level) { - this.heatLevel = level; - } - - @Override - public RecipeMap getRecipeMap() { - return LanthanidesRecipeMaps.digesterRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).enablePerfectOC(); - } - - @Override - protected @Nonnull CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - return recipe.mSpecialValue <= Digester.this.getCoilLevel() - .getHeat() ? CheckRecipeResultRegistry.SUCCESSFUL - : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); - } - - }; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack aStack) { - return 20; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { - return new Digester(this.mName); - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - buildPiece(mName, itemStack, b, 3, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 3, 3, 0, elementBudget, env, false, true); - } - - @Override - public String[] getStructureDescription(ItemStack arg0) { - return DescTextLocalization.addText("Digester.hint", 6); - } - - public ITexture[] getTexture(IGregTechTileEntity te, ForgeDirection side, ForgeDirection facing, int colorIndex, - boolean active, boolean redstone) { - - // Oil Cracker textures cuz I'm lazy - - if (side == facing) { - if (active) return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][47] }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Digester") - .addInfo("Controller block for the Digester") - .addInfo("Input ores and fluid, output water.") - .addInfo(BLUEPRINT_INFO) - .addSeparator() - .addController("Front bottom") - .addInputHatch("Hint block with dot 1") - .addInputBus("Hint block with dot 1") - .addOutputHatch("Hint block with dot 1") - .addOutputBus("Hint block with dot 1") - .addMaintenanceHatch("Hint block with dot 1") - .addMufflerHatch("Hint block with dot 1") - .toolTipFinisher("GTNH: Lanthanides"); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return multiDefinition; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack arg0) { - // TODO Auto-generated method stub - return false; - } - - @Override - public int getDamageToComponent(ItemStack arg0) { - // TODO Auto-generated method stub - return 0; - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/DissolutionTank.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/DissolutionTank.java deleted file mode 100644 index e6a714fd00..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/DissolutionTank.java +++ /dev/null @@ -1,264 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity; - -import static com.elisis.gtnhlanth.util.DescTextLocalization.BLUEPRINT_INFO; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAdder; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.elisis.gtnhlanth.api.recipe.LanthanidesRecipeMaps; -import com.elisis.gtnhlanth.util.DescTextLocalization; -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ISecondaryDescribable; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; - -public class DissolutionTank extends GT_MetaTileEntity_EnhancedMultiBlockBase - implements ISurvivalConstructable, ISecondaryDescribable { - - private final IStructureDefinition multiDefinition = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { " sss ", "sssss", "sssss", "sssss", " sss " }, - { "sgggs", "g---g", "g---g", "g---g", "sgggs" }, { "sgggs", "g---g", "g---g", "g---g", "sgggs" }, - { "ss~ss", "shhhs", "shhhs", "shhhs", "sssss" }, { "s s", " ", " ", " ", "s s" } })) - .addElement( - 's', - buildHatchAdder(DissolutionTank.class) - .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy) - .casingIndex(49) - .dot(1) - .buildAndChain(GregTech_API.sBlockCasings4, 1)) - .addElement('h', ofBlock(GregTech_API.sBlockCasings1, 11)) - .addElement('g', ofBlockAdder(DissolutionTank::addGlass, ItemRegistry.bw_glasses[0], 1)) - .build(); - - public DissolutionTank(String name) { - super(name); - } - - public DissolutionTank(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return multiDefinition; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return checkPiece(mName, 2, 3, 0) && mMaintenanceHatches.size() == 1; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - private boolean addGlass(Block block, int meta) { - return block == ItemRegistry.bw_glasses[0]; - } - - @Override - public RecipeMap getRecipeMap() { - return LanthanidesRecipeMaps.dissolutionTankRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { - if (!checkRatio(recipe, Arrays.asList(inputFluids))) { - criticalStopMachine(); - return SimpleCheckRecipeResult.ofFailurePersistOnShutdown("dissolution_ratio"); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - }; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - private boolean checkRatio(GT_Recipe tRecipe, List tFluidInputs) { - FluidStack majorGenericFluid = tRecipe.mFluidInputs[0]; - FluidStack minorGenericFluid = tRecipe.mFluidInputs[1]; - - int majorAmount; - int minorAmount; - - FluidStack fluidInputOne = tFluidInputs.get(0); - FluidStack fluidInputTwo = tFluidInputs.get(1); - - if (fluidInputOne.getUnlocalizedName() - .equals(majorGenericFluid.getUnlocalizedName())) { - if (fluidInputTwo.getUnlocalizedName() - .equals(minorGenericFluid.getUnlocalizedName())) { - // majorInput = fluidInputOne; - majorAmount = fluidInputOne.amount; - // minorInput = fluidInputTwo; - minorAmount = fluidInputTwo.amount; - // GT_Log.out.print("in first IF"); - } else return false; // No valid other input - - } else if (fluidInputTwo.getUnlocalizedName() - .equals(majorGenericFluid.getUnlocalizedName())) { - if (fluidInputOne.getUnlocalizedName() - .equals(minorGenericFluid.getUnlocalizedName())) { - // majorInput = fluidInputTwo; - majorAmount = fluidInputTwo.amount; - // minorInput = fluidInputOne; - minorAmount = fluidInputOne.amount; - // GT_Log.out.print("in second if"); - } else return false; - - } else return false; - - return majorAmount / tRecipe.mSpecialValue == minorAmount; - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { - return new DissolutionTank(this.mName); - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - buildPiece(mName, itemStack, b, 2, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 2, 3, 0, elementBudget, env, false, true); - } - - @Override - public String[] getStructureDescription(ItemStack arg0) { - return DescTextLocalization.addText("DissolutionTank.hint", 4); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity te, ForgeDirection side, ForgeDirection facing, int colorIndex, - boolean active, boolean redstone) { - - if (side == facing) { - if (active) return new ITexture[] { casingTexturePages[0][49], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][49], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][49] }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Dissolution Tank") - .addInfo("Controller block for the Dissolution Tank") - .addInfo("Input Water and Fluid, output Fluid") - .addInfo("You must input the Fluids at the correct Ratio") - .addInfo(BLUEPRINT_INFO) - .addSeparator() - .addController("Front bottom") - .addInputHatch("Hint block with dot 1") - .addInputBus("Hint block with dot 1") - .addOutputHatch("Hint block with dot 1") - .addOutputBus("Hint block with dot 1") - .addMaintenanceHatch("Hint block with dot 1") - .toolTipFinisher("GTNH: Lanthanides"); - - return tt; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack arg0) { - return false; - } - - @Override - public int getDamageToComponent(ItemStack arg0) { - return 0; - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/LINAC.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/LINAC.java deleted file mode 100644 index 98b20becb7..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/LINAC.java +++ /dev/null @@ -1,749 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity; - -import static com.elisis.gtnhlanth.util.DescTextLocalization.addDotText; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Objects; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.elisis.gtnhlanth.common.beamline.BeamInformation; -import com.elisis.gtnhlanth.common.beamline.BeamLinePacket; -import com.elisis.gtnhlanth.common.beamline.Particle; -import com.elisis.gtnhlanth.common.hatch.TileHatchInputBeamline; -import com.elisis.gtnhlanth.common.hatch.TileHatchOutputBeamline; -import com.elisis.gtnhlanth.common.register.LanthItemList; -import com.elisis.gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeLoader; -import com.elisis.gtnhlanth.util.DescTextLocalization; -import com.elisis.gtnhlanth.util.Util; -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.gtnewhorizon.structurelib.StructureLib; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.TickTime; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.api.util.shutdown.SimpleShutDownReason; - -public class LINAC extends GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - private static final IStructureDefinition STRUCTURE_DEFINITION; - - protected static final String STRUCTURE_PIECE_BASE = "base"; - protected static final String STRUCTURE_PIECE_LAYER = "layer"; - protected static final String STRUCTURE_PIECE_END = "end"; - - private byte glassTier; - - private boolean onEndInnerLayer = false; - - private int machineTemp = 0; // Coolant temperature - - private ArrayList mInputBeamline = new ArrayList<>(); - private ArrayList mOutputBeamline = new ArrayList<>(); - - private static final int CASING_INDEX = GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings5, 14); - - private static final byte MIN_GLASS_TIER = 6; - - /* - * g: Grate Machine Casing b: Borosilicate glass c: Shielded accelerator casing v: Vacuum k: Shielded glass d: - * Coolant Delivery casing y: Superconducting coil - */ - - static { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - STRUCTURE_PIECE_BASE, - new String[][] { { "ggggggg", "gbbbbbg", "gbbbbbg", "gbbibbg", "gbbbbbg", "gbbbbbg", "ggg~ggg" }, - { "ggggggg", "gcccccg", "gcccccg", "gcc-ccg", "gcccccg", "gcccccg", "ggggggg" }, - { "ccccccc", "cvvvvvc", "kvvvvvk", "kvv-vvk", "kvvvvvk", "cvvvvvc", "jcccccj" }, - { "cckkkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "jcccccj" }, - { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "jcccccj" }, - { "cckkkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "jcccccj" }, - { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "jcccccj" }, - { "cckhkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "jcccccj" }, }) - .addShape( - STRUCTURE_PIECE_LAYER, - new String[][] { { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "ccccccc" }, - { "cckkkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "ccccccc" } }) - .addShape( - STRUCTURE_PIECE_END, - new String[][] { { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "ccccccc" }, - { "cckhkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "ccccccc" }, - { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "ccccccc" }, - { "cckkkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "ccccccc" }, - { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "ccccccc" }, - { "cckkkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "ccccccc" }, - { "ccccccc", "cvvvvvc", "kvvvvvk", "kvv-vvk", "kvvvvvk", "cvvvvvc", "ccccccc" }, - { "ccccccc", "ccccccc", "ccccccc", "ccc-ccc", "ccccccc", "ccccccc", "ccccccc" }, - { "ccccccc", "cbbbbbc", "cbbbbbc", "cbbobbc", "cbbbbbc", "cbbbbbc", "ccccccc" } }) - .addElement('c', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0)) - .addElement('g', ofBlock(GregTech_API.sBlockCasings3, 10)) // Grate Machine Casing - .addElement( - 'b', - BorosilicateGlass.ofBoroGlass( - (byte) 0, - MIN_GLASS_TIER, - Byte.MAX_VALUE, - (te, t) -> te.glassTier = t, - te -> te.glassTier)) - .addElement( - 'i', - buildHatchAdder(LINAC.class).hatchClass(TileHatchInputBeamline.class) - .casingIndex(CASING_INDEX) - .dot(3) - .adder(LINAC::addBeamLineInputHatch) - .build()) - .addElement( - 'o', - buildHatchAdder(LINAC.class).hatchClass(TileHatchOutputBeamline.class) - .casingIndex(CASING_INDEX) - .dot(4) - .adder(LINAC::addBeamLineOutputHatch) - .build()) - .addElement('v', ofBlock(LanthItemList.ELECTRODE_CASING, 0)) - .addElement('k', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_GLASS, 0)) - .addElement('d', ofBlock(LanthItemList.COOLANT_DELIVERY_CASING, 0)) - .addElement('y', ofBlock(GregTech_API.sBlockCasings1, 15)) // Superconducting coil - .addElement( - 'h', - buildHatchAdder(LINAC.class).atLeast(InputHatch, OutputHatch) - .casingIndex(CASING_INDEX) - .dot(2) - .build()) - - .addElement( - 'j', - buildHatchAdder(LINAC.class).atLeast(Maintenance, Energy) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0))) - - .build(); - } - - private float outputEnergy; - private int outputRate; - private int outputParticle; - private float outputFocus; - - private int length; - - public LINAC(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - public LINAC(String name) { - super(name); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity te) { - return new LINAC(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Particle Accelerator") - .addInfo("Controller block for the LINAC") - .addInfo("Accelerates charged particles to higher energies") - .addInfo("Increasing length increases output energy, but decreases focus") - .addInfo("Use a lower temperature coolant to improve focus") - // .addInfo("Extendable, with a minimum length of 18 blocks") - .addInfo(DescTextLocalization.BLUEPRINT_INFO) - .addInfo(DescTextLocalization.BEAMLINE_SCANNER_INFO) - .addInfo("Valid Coolants:"); - - // Valid coolant list - for (String fluidName : BeamlineRecipeLoader.coolantMap.keySet()) { - - tt.addInfo( - "- " + FluidRegistry.getFluid(fluidName) - .getLocalizedName(null)); - - } - - tt.addInfo("Requires (length + 1)kL/s of coolant") - .addSeparator() - .beginVariableStructureBlock(7, 7, 7, 7, 19, 83, false) - .addController("Front bottom") - .addCasingInfoRange(LanthItemList.SHIELDED_ACCELERATOR_CASING.getLocalizedName(), 325, 1285, false) - .addCasingInfoRange(LanthItemList.COOLANT_DELIVERY_CASING.getLocalizedName(), 148, 852, false) - .addCasingInfoRange(LanthItemList.SHIELDED_ACCELERATOR_GLASS.getLocalizedName(), 127, 703, false) - .addCasingInfoRange("Superconducting Coil Block", 56, 312, false) - .addCasingInfoRange(LanthItemList.ELECTRODE_CASING.getLocalizedName(), 156, 732, false) - .addCasingInfoExactly("Grate Machine Casing", 47, false) - .addCasingInfoExactly("Borosilicate Glass (LuV+)", 48, false) - .addEnergyHatch(addDotText(1)) - .addMaintenanceHatch(addDotText(1)) - .addInputHatch(addDotText(2)) - .addOutputHatch(addDotText(2)) - .addOtherStructurePart("Beamline Input Hatch", addDotText(3)) - .addOtherStructurePart("Beamline Output Hatch", addDotText(4)) - - .toolTipFinisher("GTNH: Lanthanides");; - return tt; - } - - private boolean addBeamLineInputHatch(IGregTechTileEntity te, int casingIndex) { - - if (te == null) return false; - - IMetaTileEntity mte = te.getMetaTileEntity(); - - if (mte == null) return false; - - if (mte instanceof TileHatchInputBeamline) { - return this.mInputBeamline.add((TileHatchInputBeamline) mte); - } - - return false; - } - - private boolean addBeamLineOutputHatch(IGregTechTileEntity te, int casingIndex) { - - if (te == null) return false; - - IMetaTileEntity mte = te.getMetaTileEntity(); - - if (mte == null) return false; - - if (mte instanceof TileHatchOutputBeamline) { - return this.mOutputBeamline.add((TileHatchOutputBeamline) mte); - } - - return false; - } - - @Override - public boolean checkRecipe(ItemStack itemStack) { - - float tempFactor = 0; - // Focus as determined by multi properties - float machineFocus = 0; - // Input particle focus - float inputFocus = 0; - - // Output focus to be set - outputFocus = 0; - - float voltageFactor = 0; - float inputEnergy = 0; - - machineTemp = 0; - - // Energy quantity determined by multi - float machineEnergy = 0; - outputEnergy = 0; - - int particleId = 0; - outputParticle = 0; - - int inputRate = 0; - outputRate = 0; - - ArrayList tFluidInputs = this.getStoredFluids(); - if (tFluidInputs.size() == 0) { - this.doRandomMaintenanceDamage(); // Penalise letting coolant run dry - this.stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.nocoolant")); - return false; - } - - // Coolant input - FluidStack primFluid = tFluidInputs.get(0); - - // 1b (1000L)/m/operation - final int fluidConsumed = 1000 * length; - - this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - - if (this.getInputInformation() == null) { - return false; - } - - if (this.getInputInformation() - .getEnergy() == 0) { - return false; - } - - particleId = this.getInputInformation() - .getParticleId(); - Particle inputParticle = Particle.getParticleFromId(particleId); - - if (!inputParticle.canAccelerate()) { - stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.noaccel")); - return false; - } - - mMaxProgresstime = 1 * TickTime.SECOND; - // Consume the input tier's corresponding practical voltage instead of the maximum suggested by the logic - mEUt = (int) -GT_Values.VP[(int) this.getInputVoltageTier()]; - - // Particle stays the same with this multiblock - outputParticle = particleId; - - if (primFluid.isFluidEqual(new FluidStack(FluidRegistry.getFluid("ic2coolant"), 1))) { - tempFactor = calculateTemperatureFactor(60); // Default temp of 300 is unreasonable - machineTemp = 60; // Solely for tricorder use - } else { - tempFactor = calculateTemperatureFactor( - primFluid.getFluid() - .getTemperature()); - machineTemp = primFluid.getFluid() - .getTemperature(); // Solely for tricorder use - } - - machineFocus = Math.max(((-0.9f) * this.length * tempFactor) + 110, 5); // Min of 5 - if (machineFocus > 90) { // Max of 90 - machineFocus = 90; - } - - inputFocus = this.getInputInformation() - .getFocus(); - - outputFocus = (inputFocus > machineFocus) ? ((inputFocus + machineFocus) / 2) - : inputFocus * (machineFocus / 100); // If input focus > machine focus, take the average of both, else - // weigh the former by the latter - - long voltage = this.getMaxInputVoltage(); - // voltageFactor = calculateVoltageFactor(voltage); - - // machineEnergy = Math.max(-((60) / this.length) * voltageFactor + 60_000, 2000); // Minimum of 2000keV - - machineEnergy = (float) Math.max(length / 4 * Math.pow(voltage, 1.0 / 3.0), 50); // Minimum of 50keV - - inputEnergy = this.getInputInformation() - .getEnergy(); - /* - * outputEnergy = Math.min( - * (1 + inputEnergy / Particle.getParticleFromId(outputParticle) - * .maxSourceEnergy()) * machineEnergy, - * 120_000); // TODO more complex calculation than just - * // addition - */ - - outputEnergy = (float) Math.pow( - 10, - 1 + inputEnergy / Particle.getParticleFromId(outputParticle) - .maxSourceEnergy()) - * machineEnergy; - - inputRate = this.getInputInformation() - .getRate(); - outputRate = inputRate; // Cannot increase rate with this multiblock - - if (Util.coolantFluidCheck(primFluid, fluidConsumed)) { - - this.stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.inscoolant")); - return false; - - } - - primFluid.amount -= fluidConsumed; - - Fluid fluidOutput = BeamlineRecipeLoader.coolantMap.get( - primFluid.getFluid() - .getName()); - - if (Objects.isNull(fluidOutput)) return false; - - FluidStack fluidOutputStack = new FluidStack(fluidOutput, fluidConsumed); - - if (Objects.isNull(fluidOutputStack)) return false; - - this.addFluidOutputs(new FluidStack[] { fluidOutputStack }); - - outputAfterRecipe(); - - return true; - } - - private void outputAfterRecipe() { - - if (!mOutputBeamline.isEmpty()) { - - BeamLinePacket packet = new BeamLinePacket( - new BeamInformation(outputEnergy, outputRate, outputParticle, outputFocus)); - - for (TileHatchOutputBeamline o : mOutputBeamline) { - - o.q = packet; - } - } - } - - @Override - public void stopMachine() { - - // GT_Log.out.print("Machine stopped"); - outputFocus = 0; - outputEnergy = 0; - outputParticle = 0; - outputRate = 0; - machineTemp = 0; - super.stopMachine(); - } - - @Override - public void stopMachine(ShutDownReason reason) { - - outputFocus = 0; - outputEnergy = 0; - outputParticle = 0; - outputRate = 0; - machineTemp = 0; - super.stopMachine(reason); - - } - - @Override - public String[] getInfoData() { - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) { - if (tHatch.isValid()) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - } - - BeamInformation information = this.getInputInformation(); - - return new String[] { - /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(getActualEnergyUsage()) - + EnumChatFormatting.RESET - + " EU/t", - /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getMaxInputVoltage()) - + EnumChatFormatting.RESET - + " EU/t(*2A) " - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + VN[GT_Utility.getTier(getMaxInputVoltage())] - + EnumChatFormatting.RESET, - /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + Float.toString(mEfficiency / 100.0F) - + EnumChatFormatting.RESET - + " %", - - /* 7 */ EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.info") - + ": " - + EnumChatFormatting.RESET, - - StatCollector.translateToLocal("beamline.temperature") + ": " // Temperature: - + EnumChatFormatting.DARK_RED - + machineTemp - + EnumChatFormatting.RESET - + " K", // e.g. "137 K" - - StatCollector.translateToLocal("beamline.coolusage") + ": " // Coolant usage: - + EnumChatFormatting.AQUA - + length - + EnumChatFormatting.RESET - + " kL/s", // e.g. "24 kL/s - - /* 8 */ EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.in_pre") - + ": " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.particle") + ": " // "Multiblock Beamline Input:" - + EnumChatFormatting.GOLD - + Particle.getParticleFromId(information.getParticleId()) - .getLocalisedName() // e.g. "Electron - // (e-)" - + " " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.energy") + ": " // "Energy:" - + EnumChatFormatting.DARK_RED - + information.getEnergy() - + EnumChatFormatting.RESET - + " keV", // e.g. "10240 keV" - StatCollector.translateToLocal("beamline.focus") + ": " // "Focus:" - + EnumChatFormatting.BLUE - + information.getFocus() - + " " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.amount") + ": " // "Amount:" - + EnumChatFormatting.LIGHT_PURPLE - + information.getRate(), - EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.out_pre") // "Multiblock Beamline - // Output:" - + ": " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.particle") + ": " - + EnumChatFormatting.GOLD - + Particle.getParticleFromId(this.outputParticle) - .getLocalisedName() - + " " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.energy") + ": " - + EnumChatFormatting.DARK_RED - + this.outputEnergy - + EnumChatFormatting.RESET - + " keV", - StatCollector.translateToLocal( - "beamline.focus") + ": " + EnumChatFormatting.BLUE + this.outputFocus + " " + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.amount") + ": " - + EnumChatFormatting.LIGHT_PURPLE - + this.outputRate, }; - } - - private BeamInformation getInputInformation() { - - for (TileHatchInputBeamline in : this.mInputBeamline) { // Easy way to find the desired input. Efficient? No. - // Will it matter? No :boubs_glasses: - - if (in.q == null) return new BeamInformation(0, 0, 0, 0); - // if (in.q == null) return new BeamInformation(10000, 10, 0, 90); // temporary for testing purposes - - return in.q.getContent(); - } - return null; - } - - private static float calculateTemperatureFactor(int fluidTemp) { - - float factor = (float) Math.pow(1.1, 0.2 * fluidTemp); - return factor; - } - - /* - * private static float calculateVoltageFactor(long voltage) { - * float factor = (float) Math.pow(1.00009, -(0.1 * voltage - 114000)); - * return factor; - * } - */ - - @Override - public String[] getStructureDescription(ItemStack arg0) { - return DescTextLocalization.addText("LINAC.hint", 11); - } - - @Override - public boolean checkMachine(IGregTechTileEntity mte, ItemStack stack) { - - mInputBeamline.clear(); - mOutputBeamline.clear(); - - this.outputEnergy = 0; - this.outputRate = 0; - this.outputParticle = 0; - this.outputFocus = 0; - - this.glassTier = 0; - - this.onEndInnerLayer = false; - - length = 8; // Base piece length - - if (!checkPiece(STRUCTURE_PIECE_BASE, 3, 6, 0)) return false; - - while (length < 128) { - - if (!checkPiece(STRUCTURE_PIECE_LAYER, 3, 6, -length)) { - if (!checkPiece(STRUCTURE_PIECE_END, 3, 6, -length)) { - return false; - } - break; - } ; - - length += 2; - } - - // if (!checkPiece(STRUCTURE_PIECE_END, 3, 6, -length)) return false; - - // Likely off by one or two, not visible to player however so doesn't particularly matter - length += 8; - - return this.mInputBeamline.size() == 1 && this.mOutputBeamline.size() == 1 - && this.mMaintenanceHatches.size() == 1 - && this.mEnergyHatches.size() <= 2 - && this.glassTier >= MIN_GLASS_TIER; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - - buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 3, 6, 0); - - int lLength = Math.max(stackSize.stackSize + 7, 8); // !! - - if (!(lLength % 2 == 0)) { - lLength++; // Otherwise you get gaps at the end - } - - for (int i = -8; i > -lLength - 1; i -= 2) { - - // GT_Log.out.print("Building inner piece! i = " + i); - - buildPiece(STRUCTURE_PIECE_LAYER, stackSize, hintsOnly, 3, 6, i); - } - - buildPiece(STRUCTURE_PIECE_END, stackSize, hintsOnly, 3, 6, -(lLength + 2)); - - StructureLib.addClientSideChatMessages("Length: " + (11 + lLength) + " blocks."); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - - elementBudget = 200; // Maybe make a config - - if (mMachine) return -1; - - int build = 0; - - build = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 3, 6, 0, elementBudget, env, false, true); - - if (build >= 0) return build; // Incomplete - - int lLength = Math.max(stackSize.stackSize + 7, 8); // !! - - if (!(lLength % 2 == 0)) { - lLength++; // Otherwise you get gaps at the end - } - - for (int i = -8; i > -lLength - 1; i -= 2) { - - build = survivialBuildPiece(STRUCTURE_PIECE_LAYER, stackSize, 3, 6, i, elementBudget, env, false, true); - - if (build >= 0) return build; - - } - - int finalOutput = survivialBuildPiece( - STRUCTURE_PIECE_END, - stackSize, - 3, - 6, - -(lLength + 2), - elementBudget, - env, - false, - true); - - return finalOutput; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean active, boolean aRedstone) { - - // Placeholder - if (side == facing) { - if (active) return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][47] }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - public boolean addInputHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - this.onEndInnerLayer = true; - return super.addInputHatchToMachineList(aTileEntity, aBaseCasingIndex); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/SourceChamber.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/SourceChamber.java deleted file mode 100644 index 0626118a25..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/SourceChamber.java +++ /dev/null @@ -1,410 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity; - -import static com.elisis.gtnhlanth.util.DescTextLocalization.BLUEPRINT_INFO; -import static com.elisis.gtnhlanth.util.DescTextLocalization.addDotText; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.elisis.gtnhlanth.common.beamline.BeamInformation; -import com.elisis.gtnhlanth.common.beamline.BeamLinePacket; -import com.elisis.gtnhlanth.common.beamline.Particle; -import com.elisis.gtnhlanth.common.hatch.TileHatchOutputBeamline; -import com.elisis.gtnhlanth.common.register.LanthItemList; -import com.elisis.gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeAdder2; -import com.elisis.gtnhlanth.common.tileentity.recipe.beamline.RecipeSC; -import com.elisis.gtnhlanth.util.DescTextLocalization; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.SimpleShutDownReason; - -public class SourceChamber extends GT_MetaTileEntity_EnhancedMultiBlockBase - implements ISurvivalConstructable { - - private static final IStructureDefinition STRUCTURE_DEFINITION; - - private ArrayList mOutputBeamline = new ArrayList<>(); - - private static final int CASING_INDEX = GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings5, 14); - - private float outputEnergy; - private int outputRate; - private int outputParticle; - private float outputFocus; - - static { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - "sc", - new String[][] { { "ccccc", "ckkkc", "ckikc", "ckkkc", "dd~dd" }, - { "ckkkc", "keeek", "ke-ek", "keeek", "ccocc" }, { "ckkkc", "k---k", "k---k", "k---k", "ccccc" }, - { "ckkkc", "k---k", "k---k", "k---k", "ccccc" }, { "ckkkc", "keeek", "ke-ek", "keeek", "ccccc" }, - { "ccccc", "ckkkc", "ckbkc", "ckkkc", "ccccc" } }) - .addElement('c', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0)) - .addElement('k', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_GLASS, 0)) - .addElement('e', ofBlock(LanthItemList.ELECTRODE_CASING, 0)) - .addElement( - 'b', - buildHatchAdder(SourceChamber.class).hatchClass(TileHatchOutputBeamline.class) - .casingIndex(CASING_INDEX) - .dot(4) - .adder(SourceChamber::addBeamLineOutputHatch) - .build()) - .addElement( - 'i', - buildHatchAdder(SourceChamber.class).atLeast(InputBus) - .casingIndex(CASING_INDEX) - .dot(1) - .build()) - .addElement( - 'o', - buildHatchAdder(SourceChamber.class).atLeast(OutputBus) - .casingIndex(CASING_INDEX) - .dot(2) - .build()) - .addElement( - 'd', - buildHatchAdder(SourceChamber.class).atLeast(Maintenance, Energy) - .casingIndex(CASING_INDEX) - .dot(3) - .buildAndChain(ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0))) - - .build(); - } - - public SourceChamber(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - public SourceChamber(String name) { - super(name); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece("sc", stackSize, 2, 4, 0, elementBudget, env, false, true); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity te) { - return new SourceChamber(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Particle Source") - .addInfo("Controller block for the Source Chamber") - .addInfo(BLUEPRINT_INFO) - .addInfo(DescTextLocalization.BEAMLINE_SCANNER_INFO) - .addSeparator() - .beginStructureBlock(5, 5, 6, true) - .addController("Front bottom") - .addCasingInfoExactly(LanthItemList.SHIELDED_ACCELERATOR_CASING.getLocalizedName(), 56, false) - .addCasingInfoExactly(LanthItemList.SHIELDED_ACCELERATOR_GLASS.getLocalizedName(), 52, false) - .addCasingInfoExactly(LanthItemList.ELECTRODE_CASING.getLocalizedName(), 16, false) - .addOtherStructurePart("Beamline Output Hatch", addDotText(4)) - .addEnergyHatch(addDotText(3)) - .addMaintenanceHatch(addDotText(3)) - .addInputBus(addDotText(1)) - .addOutputBus(addDotText(2)) - .toolTipFinisher("GTNH: Lanthanides"); - return tt; - } - - private boolean addBeamLineOutputHatch(IGregTechTileEntity te, int casingIndex) { - - if (te == null) return false; - - IMetaTileEntity mte = te.getMetaTileEntity(); - - if (mte == null) return false; - - if (mte instanceof TileHatchOutputBeamline) { - return this.mOutputBeamline.add((TileHatchOutputBeamline) mte); - } - - return false; - } - /* - * protected OverclockDescriber createOverclockDescriber() { return new EUNoTotalOverclockDescriber((byte) 4, 1); } - */ - - @Override - public boolean checkRecipe(ItemStack itemStack) { - - // GT_Log.out.print("In checkRecipe"); - - // No input particle, so no input quantities - - outputFocus = 0; - outputEnergy = 0; - outputParticle = 0; - outputRate = 0; - - ItemStack[] tItems = this.getStoredInputs() - .toArray(new ItemStack[0]); - // GT_Log.out.print(Arrays.toString(tItems)); - long tVoltageMaxTier = this.getMaxInputVoltage(); // Used to keep old math the same - long tVoltageActual = GT_Values.VP[(int) this.getInputVoltageTier()]; - - RecipeSC tRecipe = (RecipeSC) BeamlineRecipeAdder2.instance.SourceChamberRecipes - .findRecipe(this.getBaseMetaTileEntity(), false, tVoltageActual, new FluidStack[] {}, tItems); - - if (tRecipe == null || !tRecipe.isRecipeInputEqual(true, new FluidStack[] {}, tItems)) return false; // Consumes - // input - // item - - this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - - this.mMaxProgresstime = tRecipe.mDuration; - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && this.mEUt == Integer.MAX_VALUE - 1) return false; - - mEUt = (int) -tVoltageActual; - if (this.mEUt > 0) this.mEUt = (-this.mEUt); - - outputParticle = tRecipe.particleId; - float maxParticleEnergy = Particle.getParticleFromId(outputParticle) - .maxSourceEnergy(); // The maximum energy a - // particle can possess - // when produced by this - // multiblock - float maxMaterialEnergy = tRecipe.maxEnergy; // The maximum energy for the recipe processed - outputEnergy = (float) Math.min( - (-maxMaterialEnergy) * Math.pow(1.001, -(tRecipe.energyRatio) * (tVoltageMaxTier - tRecipe.mEUt)) - + maxMaterialEnergy, - maxParticleEnergy); - - if (outputEnergy <= 0) { - stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.scerror")); - return false; - } - - outputFocus = tRecipe.focus; - outputRate = tRecipe.rate; - - this.mOutputItems = tRecipe.mOutputs; - this.updateSlots(); - - outputAfterRecipe(); - - return true; - } - - @Override - public String[] getStructureDescription(ItemStack arg0) { - return DescTextLocalization.addText("SourceChamber.hint", 7); // Generate 7 localised hint strings in structure - // description - } - - private void outputAfterRecipe() { - - if (!mOutputBeamline.isEmpty()) { - - BeamLinePacket packet = new BeamLinePacket( - new BeamInformation(outputEnergy, outputRate, outputParticle, outputFocus)); - - for (TileHatchOutputBeamline o : mOutputBeamline) { - - o.q = packet; - } - } - } - - @Override - public void stopMachine() { - outputFocus = 0; - outputEnergy = 0; - outputParticle = 0; - outputRate = 0; - super.stopMachine(); - } - - @Override - public RecipeMap getRecipeMap() { - return BeamlineRecipeAdder2.instance.SourceChamberRecipes; - } - - @Override - public String[] getInfoData() { - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) { - if (tHatch.isValid()) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - } - - return new String[] { - /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(getActualEnergyUsage()) - + EnumChatFormatting.RESET - + " EU/t", - /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getMaxInputVoltage()) - + EnumChatFormatting.RESET - + " EU/t(*2A) " - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + VN[GT_Utility.getTier(getMaxInputVoltage())] - + EnumChatFormatting.RESET, - /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + Float.toString(mEfficiency / 100.0F) - + EnumChatFormatting.RESET - + " %", - EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.out_pre") - + ": " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.particle") + ": " - + EnumChatFormatting.GOLD - + Particle.getParticleFromId(this.outputParticle) - .getLocalisedName() - + " " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.energy") + ": " - + EnumChatFormatting.DARK_RED - + this.outputEnergy - + EnumChatFormatting.RESET - + " keV", - StatCollector.translateToLocal( - "beamline.focus") + ": " + EnumChatFormatting.BLUE + this.outputFocus + " " + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.amount") + ": " - + EnumChatFormatting.LIGHT_PURPLE - + this.outputRate, }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece("sc", stackSize, hintsOnly, 2, 4, 0); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - - this.mOutputBeamline.clear(); // Necessary due to the nature of the beamline hatch adder - - return checkPiece("sc", 2, 4, 0) && this.mMaintenanceHatches.size() == 1 - && this.mInputBusses.size() == 1 - && this.mOutputBusses.size() == 1 - && this.mOutputBeamline.size() == 1 - && this.mEnergyHatches.size() == 1; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean active, boolean redstoneLevel) { - - // Placeholder - if (side == facing) { - if (active) return new ITexture[] { casingTexturePages[1][14], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[1][14], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[1][14] }; - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/Synchrotron.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/Synchrotron.java deleted file mode 100644 index ee63bc8d20..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/Synchrotron.java +++ /dev/null @@ -1,1078 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity; - -import static com.elisis.gtnhlanth.util.DescTextLocalization.addDotText; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAdder; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Objects; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.elisis.gtnhlanth.common.beamline.BeamInformation; -import com.elisis.gtnhlanth.common.beamline.BeamLinePacket; -import com.elisis.gtnhlanth.common.beamline.Particle; -import com.elisis.gtnhlanth.common.block.AntennaCasing; -import com.elisis.gtnhlanth.common.hatch.TileHatchInputBeamline; -import com.elisis.gtnhlanth.common.hatch.TileHatchOutputBeamline; -import com.elisis.gtnhlanth.common.register.LanthItemList; -import com.elisis.gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeLoader; -import com.elisis.gtnhlanth.util.DescTextLocalization; -import com.elisis.gtnhlanth.util.Util; -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.google.common.collect.ImmutableMap; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.TickTime; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.api.util.shutdown.SimpleShutDownReason; - -public class Synchrotron extends GT_MetaTileEntity_EnhancedMultiBlockBase - implements ISurvivalConstructable { - - private static final IStructureDefinition STRUCTURE_DEFINITION; - - protected static final String STRUCTURE_PIECE_ENTRANCE = "entrance"; - protected static final String STRUCTURE_PIECE_BASE = "base"; - - public static final int CONSUMED_FLUID = 32_000; // Fluid consumed per processed recipe, maybe increase with EU - public static final int MIN_INPUT_FOCUS = 25; // Inclusive - - private ArrayList mInputBeamline = new ArrayList<>(); - private ArrayList mOutputBeamline = new ArrayList<>(); - - public ArrayList mAntennaCasings = new ArrayList<>(); - - private static final int CASING_INDEX = GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings5, 14); - - private static final byte MIN_GLASS_TIER = 6; - - private int energyHatchTier; - - private int antennaeTier; - - private Byte glassTier; - - /* - * c: Shielded accelerator casing v: Vacuum k: Superconducting coil d: Coolant Delivery casing - */ - - // TODO: E > 1200eV for x-ray lithography - // spotless:off - static { - - STRUCTURE_DEFINITION = StructureDefinition.builder().addShape( - STRUCTURE_PIECE_ENTRANCE, - - - - new String[][] { - { - " ", - " ccc ", - " cgggc ", - " cgvgc ", - " cgggc ", - " ccc " - } - }) - .addShape( - STRUCTURE_PIECE_BASE, - - new String[][] { - { - " ", - " ccc ", - " ccccc cjjjjjc ", - " cc-cc cjjc~cjjc ", - " ccccc cjjjjjc ", - " ccc ", - " " - }, - { - " ", - " ccc ccccccccccc ", - " c---c ccc-------ccc ", - " c---c ccc-------ccc ", - " c---c ccc-------ccc ", - " ccc ccccccccccc ", - " " - }, - { - " ccccccccccc ", - " ccc cc-----------cc ", - " c---c cc-------------cc ", - " c---c cc-------------cc ", - " c---c cc-------------cc ", - " ccc ccc---------ccc ", - " ccccccccccc " - }, - { - " ccccccccccccccc ", - " ccc cc---------------cc ", - " c---ccc-----------------c ", - " c---ccc-----------------cc ", - " c---ccc-----------------c ", - " ccc cc---------------cc ", - " ccccccccccccccc ", - - }, - { - " ccc ccccccccccccccccc ", - " ckkkccc-----------------cc ", - "ck---kc-------------------cc ", - "ck---kc--------------------c ", - "ck---kc-------------------cc ", - " ckkkccc-----------------cc ", - " ccc cccccccccccccccccc " - - }, - { - " cccccccccccc ccccccc ", - " cdddcc-------ccccc-------cc ", - "cd---d----------------------c ", - "cd---d----------------------c ", - "cd---d----------------------c ", - " cdddcc-------ccccc-------cc ", - " cccccccccccc ccccccc ", - }, - { - " ccccccccc ccccc ", - " ckkkc-----cccc cccc-----cc ", - "ck---k-------ccccccc--------c ", - "ck---k-------ccccccc---------c ", - "ck---k-------ccccccc--------c ", - " ckkkc-----cccc cccc-----cc ", - " ccccccccc ccccc " - }, - { - " cccccccc ccccc ", - " c--------cc cc-----cc ", - "c----------cc cc-------c ", - "c----------cc cc-------c ", - "c----------cc cc-------c ", - " c--------cc cc-----cc ", - " cccccccc ccccc " - - }, - { - " ccccccc ccccc ", - " c-------c c-----c ", - "c---------c c-------c ", - "c---------c c-------c ", - "c---------c c-------c ", - " c-------c c-----c ", - " ccccccc ccccc " - - }, - { - " cccccc ccccc ", - " c------c c-----c ", - "c--------c c------c ", - "c--------c c------c ", - "c--------c c------c ", - " c------c c-----c ", - " cccccc ccccc " - - }, - { - " ccccc cccc ", - " c-----c c----c ", - "c-------c c------c ", - "c-------c c------c ", - "c-------c c------c ", - " c-----c c----c ", - " ccccc cccc " - - }, - { - " cccc ccc ", - " c----cc cc---cc ", - "c------c c-----c ", - "c------c c-----c ", - "c------c c-----c ", - " c----cc cc---cc ", - " cccc ccc " - - }, - { - " cccc cccc ", - " c---cc c----c ", - "c------c c-----c ", - "c------c c-----cc ", - "c------c c-----c ", - " c---cc cc---c ", - " cccc cccc " - - }, - { - " cccc cccc ", - " c---cc c----c ", - "c-----c c----cc ", - "c-----c c----cc ", - "c-----c c----cc ", - " c---cc cc---c ", - " cccc cccc " - - }, - { - " ccc ccc ", - " ckkkcc cckkkc ", - "ck---kc ck---kc ", - "ck---kc ck---kc ", - "ck---kc ck---kc ", - " ckkkcc cckkkc ", - " ccc ccc " - - }, - { - " cec cec ", - " cnanc cnanc ", - "cn---nc cn---nc ", - "cn---nc cn---nc ", - "cn---nc cn---nc ", - " cnnnc cnnnc ", - " ccc ccc " - - }, - { - " cic cic ", - " cndnc cndnc ", - "cn---nc cn---nc ", - "cn---nc cn---nc ", - "cn---nc cn---nc ", - " cndnc cndnc ", - " coc coc " - - }, - { - " cec cec ", - " cnanc cnanc ", - "cn---nc cn---nc ", - "cn---nc cn---nc ", - "cn---nc cn---nc ", - " cnnnc cnnnc ", - " ccc ccc " - - }, - { - " ccc ccc ", - " ckkkcc cckkkc ", - "ck---kc ck---kc ", - "ck---kc ck---kc ", - "ck---kc ck---kc ", - " ckkkcc cckkkc ", - " ccc ccc " - - }, - { - " cccc cccc ", - " c----c c----c ", - "cc----c c----cc ", - "cc----c c----cc ", - "cc----c c----cc ", - " c---cc cc---c ", - " cccc cccc " - - }, - { - " cccc cccc ", - " c----c c----c ", - " c-----c c-----c ", - "cc-----c c-----cc ", - " c-----c c-----c ", - " c---cc cc---c ", - " cccc cccc " - - }, - { - " ccc ccc ", - " cc---cc cc---cc ", - " c-----c c-----c ", - " c-----c c-----c ", - " c-----c c-----c ", - " cc---cc cc---cc ", - " ccc ccc " - - }, - { - " cccc cccc ", - " c----c c----c ", - " c------c c------c ", - " c------c c------c ", - " c------c c------c ", - " c----c c----c ", - " cccc cccc " - - }, - { - " ccccc ccccc ", - " c-----c c-----c ", - " c------c c------c ", - " c------c c------c ", - " c------c c------c ", - " c-----c c-----c ", - " ccccc ccccc " - - }, - { - " ccccc ccccc ", - " c-----c c-----c ", - " c-------c c-------c ", - " c-------c c-------c ", - " c-------c c-------c ", - " c-----c c-----c ", - " ccccc ccccc " - - }, - { - " ccccc ccccc ", - " c-----cc cc-----c ", - " c-------cc cc-------cc ", - " c-------cc cc-------cc ", - " c-------cc cc-------cc ", - " c-----cc cc------c ", - " ccccc cccccc " - - }, - { - " ccccc ccccccc ", - " cc-----cccc cccc-----ccc ", - " c--------ccccccc--------cccc ", - " c--------ccccccc--------cccc ", - " c--------ccccccc--------cccc ", - " cc-----cccc cccc------cc ", - " ccccc cccccc " - - }, - { - " ccccccc cccccccccc ", - " cc-------ccccc--------cccc ", - " c---------kdkdk--------ccccccccc", - " c---------kdkdk--------ccccccccc", - " c---------kdkdk--------ccccccccc", - " cc-------ccccc--------cccc ", - " ccccccc cccccccc " - - }, - { - " cccccccccccccccccccc ", - " cc-------------------ccccccccc", - " cc---------------------------cg", - " c----------------------------cg", - " cc---------------------------cg", - " c-------------------ccccccccc", - " ccccccccccccccccccc " - - }, - { - " ccccccccccccccccccc ", - " cc-----------------cccccccccc", - " c--------------------------cg", - " cc---------------------------b", - " c--------------------------cg", - " c-----------------cccccccccc", - " ccccccccccccccccc " - - }, - { - " ccccccccccccccc ", - " ccc-------------ccccccccccc", - " cc------------------------cg", - " cc------------------------cg", - " cc------------------------cg", - " ccc-------------ccccccccccc", - " ccccccccccccc " - - }, - { - " ", - " cccccccccccccccccc ", - " ccc-kdkdk------ccccccccccc", - " cc--kdkdk------ccccccccccc", - " ccc-kdkdk------ccccccccccc", - " cccccccccccccccccc " - - }, - { - " ", - " ", - " cccccccccccccccc ", - " ccccccccccccccccc ", - " cccccccccccccccc ", - " ", - " " - - } - - } - - ).addElement('c', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0)) - .addElement('k', ofBlock(GregTech_API.sBlockCasings1, 15)) // Superconducting coils - .addElement('d', ofBlock(LanthItemList.COOLANT_DELIVERY_CASING, 0)) - .addElement('e', buildHatchAdder(Synchrotron.class).atLeast(ImmutableMap.of(Energy, 4)).dot(6).casingIndex(CASING_INDEX).build()) - .addElement('n', ofBlock(LanthItemList.NIOBIUM_CAVITY_CASING, 0)) - .addElement('a', ofBlockAdder(Synchrotron::addAntenna, LanthItemList.ANTENNA_CASING_T1, 0)) //Antenna Casings - .addElement('i', buildHatchAdder(Synchrotron.class).atLeast(ImmutableMap.of(InputHatch, 2)).dot(4).casingIndex(CASING_INDEX).build()) - .addElement('o', buildHatchAdder(Synchrotron.class).atLeast(ImmutableMap.of(OutputHatch, 2)).dot(5).casingIndex(CASING_INDEX).build()) - .addElement('v', buildHatchAdder(Synchrotron.class).hatchClass(TileHatchInputBeamline.class).casingIndex(CASING_INDEX) - .dot(1).adder(Synchrotron::addBeamlineInputHatch).build()) - .addElement('b', buildHatchAdder(Synchrotron.class).hatchClass(TileHatchOutputBeamline.class).casingIndex(CASING_INDEX) - .dot(2).adder(Synchrotron::addBeamlineOutputHatch).build()) - .addElement('g', BorosilicateGlass.ofBoroGlass((byte) 0, MIN_GLASS_TIER, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier)) - .addElement('j', - buildHatchAdder(Synchrotron.class).atLeast(Maintenance).dot(3).casingIndex(CASING_INDEX) - .buildAndChain(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0)) - - .build(); - - - - } - - // spotless:on - - /* - * v = pi * lorentz^2 * sfreq sfreq = sw / 2pi sw = e * B / mass(e) * c v = (e * B * l^2) / (2 * mass(e) * c) = - * 292.718624222 * l^2 * B - */ - - private float outputEnergy; - private int outputRate; - private int outputParticle; - private float outputFocus; - private float machineFocus; - - private int machineTemp; - - public Synchrotron(String aName) { - super(aName); - } - - public Synchrotron(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new Synchrotron(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Particle Accelerator") - .addInfo("Controller block for the Synchrotron") - .addInfo("Torus-shaped, accelerates electrons to produce high-energy electromagnetic radiation") - .addInfo(DescTextLocalization.BLUEPRINT_INFO) - .addInfo(DescTextLocalization.BEAMLINE_SCANNER_INFO) - .addInfo("Valid Coolants:"); - - // Valid coolant list - for (String fluidName : BeamlineRecipeLoader.coolantMap.keySet()) { - - tt.addInfo( - "- " + FluidRegistry.getFluid(fluidName) - .getLocalizedName(null)); - - } - - tt.addInfo("Requires 32 kL/s of coolant") - .addSeparator() - .beginStructureBlock(36, 7, 34, true) - .addController("Front middle") - .addCasingInfoExactly(LanthItemList.SHIELDED_ACCELERATOR_CASING.getLocalizedName(), 676, false) - .addCasingInfoExactly("Superconducting Coil Block", 90, false) - .addCasingInfoExactly("Niobium Cavity Casing", 64, false) - .addCasingInfoExactly(LanthItemList.COOLANT_DELIVERY_CASING.getLocalizedName(), 28, false) - .addCasingInfoExactly("Borosilicate Glass Block (LuV+)", 16, false) - .addCasingInfoExactly("Antenna Casing (must match)", 4, true) - .addOtherStructurePart("Beamline Input Hatch", addDotText(1)) - .addOtherStructurePart("Beamline Output Hatch", addDotText(2)) - .addMaintenanceHatch(addDotText(3)) - .addInputHatch(addDotText(4)) - .addOutputHatch(addDotText(5)) - .addEnergyHatch(addDotText(6)) - - .toolTipFinisher("GTNH: Lanthanides"); - return tt; - } - - private boolean addBeamlineInputHatch(IGregTechTileEntity te, int casingIndex) { - - if (te == null) return false; - - IMetaTileEntity mte = te.getMetaTileEntity(); - - if (mte == null) return false; - - if (mte instanceof TileHatchInputBeamline) { - return this.mInputBeamline.add((TileHatchInputBeamline) mte); - } - - return false; - - } - - private boolean addBeamlineOutputHatch(IGregTechTileEntity te, int casingIndex) { - - if (te == null) return false; - - IMetaTileEntity mte = te.getMetaTileEntity(); - - if (mte == null) return false; - - if (mte instanceof TileHatchOutputBeamline) { - return this.mOutputBeamline.add((TileHatchOutputBeamline) mte); - } - - return false; - - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean active, boolean aRedstone) { - // Placeholder - if (side == facing) { - if (active) return new ITexture[] { casingTexturePages[1][14], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[1][14], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[1][14] }; - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - elementBudget = 200; - - if (mMachine) return -1; - - int build = survivialBuildPiece(STRUCTURE_PIECE_ENTRANCE, stackSize, 16, 3, 1, elementBudget, env, false, true); - - if (build >= 0) return build; - - return survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 16, 3, 0, elementBudget, env, false, true); - - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_ENTRANCE, stackSize, hintsOnly, 16, 3, 1); - buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 16, 3, 0); - - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - public boolean addEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - - GT_MetaTileEntity_Hatch_Energy hatch = (GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity; - - // First energy hatch added - if (this.mEnergyHatches.size() == 0) this.energyHatchTier = hatch.mTier; - - // Disallow any hatches that don't match the tier of the first hatch added - if (hatch.mTier != this.energyHatchTier) return false; - - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - return mEnergyHatches.add(hatch); - } - return false; - } - - private boolean addAntenna(Block block, int meta) { - - if (block == null) return false; - - if (!(block instanceof AntennaCasing)) return false; - - AntennaCasing antennaBlock = (AntennaCasing) block; - - int antennaTier = antennaBlock.getTier(); - - // First antenna casing added - if (this.mAntennaCasings.size() == 0) this.antennaeTier = antennaTier; - - if (antennaTier != this.antennaeTier) return false; - - return mAntennaCasings.add(antennaBlock); - - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public boolean checkRecipe(ItemStack aStack) { - - float inputEnergy = 0; - float inputFocus = 0; - float inputRate = 0; - int inputParticleId = 0; - - machineFocus = 0; - machineTemp = 0; - - outputEnergy = 0; - outputFocus = 0; - outputRate = 0; - outputParticle = 0; - - float tempFactor = 0; - - float voltageFactor = 0; - - ArrayList fluidList = this.getStoredFluids(); - - if (fluidList.size() == 0) { - - this.stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.nocoolant")); - - return false; - } - - this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - - if (this.getInputInformation() == null) { - return false; - } - - if (this.getInputInformation() - .getEnergy() == 0) { // Only really applies if there's no input - return false; - } - - if (this.getInputInformation() - .getFocus() < MIN_INPUT_FOCUS) { - return false; - } - - inputParticleId = this.getInputInformation() - .getParticleId(); - - Particle inputParticle = Particle.getParticleFromId(inputParticleId); - - if (!inputParticle.canAccelerate()) { - stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.noaccel")); - return false; - } - - mMaxProgresstime = TickTime.SECOND; - - long voltage = this.getMaxInputVoltage(); - mEUt = (int) (-voltage / GT_Values.V[(int) this.getInputVoltageTier()] - * GT_Values.VP[(int) this.getInputVoltageTier()]); // Multiply VP by amps - - outputParticle = 1; // Photon - - FluidStack primaryFluid = fluidList.get(0); - - int fluidTemperature; - - if (primaryFluid.isFluidEqual(new FluidStack(FluidRegistry.getFluid("ic2coolant"), 1))) { - fluidTemperature = 60; // Default temp of 300 is unreasonable - } else { - fluidTemperature = primaryFluid.getFluid() - .getTemperature(); - } - - machineTemp = fluidTemperature; // Solely for tricorder info - - machineFocus = getMachineFocus(fluidTemperature); - - inputFocus = this.getInputInformation() - .getFocus(); - - outputFocus = (inputFocus > machineFocus) ? ((inputFocus + machineFocus) / 2.5f) - : inputFocus * (machineFocus / 100); // If input focus > machine focus, divide their sum by 2.5, else - // weigh the former by the latter. This punishes having too low a - // machine focus for low values of input focus - // E.g. An input focus of 50 requires a machine focus of 100 to get an - // output focus of 50, - // whereas an input focus of 60 only requires around 80 - // In general, as input focus increases, output scales better with - // machine focus - - voltageFactor = getVoltageFactor(voltage, this.antennaeTier); - - inputEnergy = this.getInputInformation() - .getEnergy(); - float mass = inputParticle.getMass(); - - // Perhaps divide by mass somehow here too - outputEnergy = (float) calculateOutputParticleEnergy(voltage, inputEnergy, this.antennaeTier); // maybe - // adjust - // behaviour here - - inputRate = this.getInputInformation() - .getRate(); - - outputRate = (int) (inputRate * getOutputRatetio(voltageFactor, this.antennaeTier)); - - if (outputRate == 0) { - stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.low_input_rate")); - return false; - } - - if (Util.coolantFluidCheck(primaryFluid, CONSUMED_FLUID)) { - - stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.inscoolant")); - return false; - - } - - primaryFluid.amount -= CONSUMED_FLUID; - - Fluid fluidOutput = BeamlineRecipeLoader.coolantMap.get( - primaryFluid.getFluid() - .getName()); - - if (Objects.isNull(fluidOutput)) return false; - - FluidStack fluidOutputStack = new FluidStack(fluidOutput, CONSUMED_FLUID); - - if (Objects.isNull(fluidOutputStack)) return false; - - this.addFluidOutputs(new FluidStack[] { fluidOutputStack }); - - outputAfterRecipe(); - - return true; - } - - private void outputAfterRecipe() { - - if (!mOutputBeamline.isEmpty()) { - - BeamLinePacket packet = new BeamLinePacket( - new BeamInformation(outputEnergy, outputRate, outputParticle, outputFocus)); - - for (TileHatchOutputBeamline o : mOutputBeamline) { - - o.q = packet; - } - } - } - - @Override - public void stopMachine() { - - outputFocus = 0; - outputEnergy = 0; - outputParticle = 0; - outputRate = 0; - machineFocus = 0; - machineTemp = 0; - super.stopMachine(); - - } - - @Override - public void stopMachine(ShutDownReason reason) { - - outputFocus = 0; - outputEnergy = 0; - outputParticle = 0; - outputRate = 0; - machineFocus = 0; - machineTemp = 0; - super.stopMachine(reason); - - } - - private BeamInformation getInputInformation() { - - for (TileHatchInputBeamline in : this.mInputBeamline) { - - if (in.q == null) return new BeamInformation(0, 0, 0, 0); - // if (in.q == null) return new BeamInformation(10000, 10, 0, 90); // TODO temporary for testing purposes - - return in.q.getContent(); - } - return null; - } - - private static float getVoltageFactor(long mEU, int antennaTier) { - - // float factor = (float) Math.pow(1.00004, -mEU * Math.pow(antennaTier, 1.0/3.0) + 80000); - float factor = (float) -Math.pow(1.1, -mEU / 2000 * Math.pow(antennaTier, 2.0 / 3.0)) + 1; // Strictly improves - // with higher tier - // antenna - return (float) Math.max(1.0, factor); - - } - - /* - * private static float getTemperatureFactor(int temperature) { float factor = (float) Math.pow(1.11, 0.18 * - * temperature); return factor; } - */ - private static double calculateOutputParticleEnergy(long voltage, double inputParticleEnergy, int antennaTier) { - - /* - * Energy in general increases as input energy increases, with the relationship between the machine EUt and - * energy being an negative exponential, with a maximum depending on both input particle energy and antenna - * tier. The extent to which the output depends on the former is determined by the cbrt of the latter, meaning - * that increases in antenna tier result in diminishing returns. In the same way, the curve of the output energy - * vs. machine voltage exponential depends on antenna tier, with an increase in antenna tier resulting in a more - * shallow curve up. The effect of this also increases with the tier. LaTeX: - * -\frac{l^{1.11t^{\frac{1}{3}}}}{40000000}\cdot\left(0.15^{\frac{2}{t^{\frac{3}{2}}}}\right)^{\frac{x}{60768}} - * \ +\ \frac{l^{1.11t^{\frac{1}{3}}}}{40000000} - */ - - double energy = (Math.pow(inputParticleEnergy, 1.13 * Math.pow(antennaTier, 4.0 / 9.0)) / 40_000_000) - * (-Math.pow(Math.pow(0.15, 2.0 / (Math.pow(antennaTier, 5.0 / 2.0))), voltage / 60768.0) + 1); // In - // keV - - return energy; - - } - - private static float getMachineFocus(int temperature) { - - return (float) Math.max(Math.min(Math.pow(1.5, -1.0 / 40.0 * (temperature - 480)), 90), 10); - } - - // Punny, right? - private static float getOutputRatetio(float voltageFactor, int antennaTier) { - return (float) (voltageFactor / (10 / Math.pow(2.5, antennaTier))); // Scale ratio with antenna tier, such a - // high - // exponential should be fine so long as - // there - // are only few antenna tiers - } - - @Override - public String[] getStructureDescription(ItemStack arg0) { - return DescTextLocalization.addText("Synchrotron.hint", 12); - } - - @Override - public String[] getInfoData() { - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) { - if (tHatch.isValid()) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - } - - BeamInformation information = this.getInputInformation(); - - return new String[] { - /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(getActualEnergyUsage()) - + EnumChatFormatting.RESET - + " EU/t", - /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getMaxInputVoltage()) - + EnumChatFormatting.RESET - + " EU/t(*2A) " - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + VN[GT_Utility.getTier(getMaxInputVoltage())] - + EnumChatFormatting.RESET, - /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + Float.toString(mEfficiency / 100.0F) - + EnumChatFormatting.RESET - + " %", - - /* 7 */ EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.info") - + ": " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.focus") + ": " // Machine Focus: - + EnumChatFormatting.BLUE - + machineFocus - + " " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.temperature") + ": " // Temperature: - + EnumChatFormatting.DARK_RED - + machineTemp - + EnumChatFormatting.RESET - + " K", // e.g. "137 K" - StatCollector.translateToLocal("beamline.coolusage") + ": " // Coolant Usage: - + EnumChatFormatting.AQUA - + 32_000 - + EnumChatFormatting.RESET - + " kL/s", // 32 kL/s - - /* 8 */ EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.in_pre") - + ": " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.particle") + ": " // "Multiblock Beamline Input:" - + EnumChatFormatting.GOLD - + Particle.getParticleFromId(information.getParticleId()) - .getLocalisedName() // e.g. "Electron - // (e-)" - + " " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.energy") + ": " // "Energy:" - + EnumChatFormatting.DARK_RED - + information.getEnergy() - + EnumChatFormatting.RESET - + " keV", // e.g. "10240 keV" - StatCollector.translateToLocal("beamline.focus") + ": " // "Focus:" - + EnumChatFormatting.BLUE - + information.getFocus() - + " " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.amount") + ": " // "Amount:" - + EnumChatFormatting.LIGHT_PURPLE - + information.getRate(), - EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.out_pre") // "Multiblock Beamline - // Output:" - + ": " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.particle") + ": " - + EnumChatFormatting.GOLD - + Particle.getParticleFromId(this.outputParticle) - .getLocalisedName() - + " " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.energy") + ": " - + EnumChatFormatting.DARK_RED - + this.outputEnergy * 1000 - + EnumChatFormatting.RESET - + " eV", - StatCollector.translateToLocal( - "beamline.focus") + ": " + EnumChatFormatting.BLUE + this.outputFocus + " " + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.amount") + ": " - + EnumChatFormatting.LIGHT_PURPLE - + this.outputRate, }; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - - this.mInputBeamline.clear(); - this.mOutputBeamline.clear(); - - this.mAntennaCasings.clear(); - - this.mEnergyHatches.clear(); - this.energyHatchTier = 0; - this.antennaeTier = 0; - - this.glassTier = 0; - - this.outputEnergy = 0; - this.outputRate = 0; - this.outputFocus = 0; - this.outputParticle = 0; - - if (!checkPiece(STRUCTURE_PIECE_ENTRANCE, 16, 3, 1)) return false; - if (!checkPiece(STRUCTURE_PIECE_BASE, 16, 3, 0)) return false; - - return this.mInputBeamline.size() == 1 && this.mOutputBeamline.size() == 1 - && this.mMaintenanceHatches.size() == 1 - && this.mEnergyHatches.size() == 4 - && this.glassTier >= MIN_GLASS_TIER; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/TargetChamber.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/TargetChamber.java deleted file mode 100644 index ad696f8fd3..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/TargetChamber.java +++ /dev/null @@ -1,481 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity; - -import static com.elisis.gtnhlanth.util.DescTextLocalization.BLUEPRINT_INFO; -import static com.elisis.gtnhlanth.util.DescTextLocalization.addDotText; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAdder; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.elisis.gtnhlanth.common.beamline.BeamInformation; -import com.elisis.gtnhlanth.common.beamline.Particle; -import com.elisis.gtnhlanth.common.hatch.TileBusInputFocus; -import com.elisis.gtnhlanth.common.hatch.TileHatchInputBeamline; -import com.elisis.gtnhlanth.common.register.LanthItemList; -import com.elisis.gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeAdder2; -import com.elisis.gtnhlanth.common.tileentity.recipe.beamline.RecipeTC; -import com.elisis.gtnhlanth.util.DescTextLocalization; -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.TickTime; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class TargetChamber extends GT_MetaTileEntity_EnhancedMultiBlockBase - implements ISurvivalConstructable { - - private static final IStructureDefinition STRUCTURE_DEFINITION; - - private ArrayList mInputBeamline = new ArrayList<>(); - - private ArrayList mInputFocus = new ArrayList<>(); - - private static final int CASING_INDEX_FRONT = GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings3, 10); // Grate - private static final int CASING_INDEX_CENTRE = GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings5, 14); // Shielded - // Acc. - - private float inputEnergy; - private float inputRate; - private int inputParticle; - private float inputFocus; - - // spotless:off - static { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - "base", - new String[][] { - {"ggggg", "gjjjg", "gjbjg", "gjjjg", "ff~ff"}, - {"cslsc", "s-r-s", "srhrs", "s-r-s", "ccccc"}, - {"csssc", "s---s", "s---s", "s---s", "ccccc"}, - {"csssc", "s---s", "s---s", "s---s", "ccccc"}, - {"cstsc", "s-u-s", "suius", "s-u-s", "ccccc"}, - {"ggggg", "gjjjg", "gjojg", "gjjjg", "ggggg"}}) - - .addElement('g', ofBlock(GregTech_API.sBlockCasings3, 10)) //Grate casing - .addElement( - 'f', - buildHatchAdder(TargetChamber.class).atLeast(Maintenance, Energy) - .casingIndex(CASING_INDEX_FRONT).dot(2).buildAndChain(ofBlock(GregTech_API.sBlockCasings3, 10))) - - .addElement('j', ofBlockAdder(TargetChamber::addGlass, ItemRegistry.bw_glasses[0], 1)) - .addElement('b', buildHatchAdder(TargetChamber.class).hatchClass(TileHatchInputBeamline.class).casingIndex(CASING_INDEX_CENTRE).dot(5).adder(TargetChamber::addBeamLineInputHatch).build()) - .addElement('c', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0)) - - .addElement('l', buildHatchAdder(TargetChamber.class).hatchClass(TileBusInputFocus.class).casingIndex(CASING_INDEX_CENTRE).dot(1).adder(TargetChamber::addFocusInputHatch).build()) - - .addElement('t', buildHatchAdder(TargetChamber.class).atLeast(InputBus).casingIndex(CASING_INDEX_CENTRE).dot(3).build()) - .addElement('s', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_GLASS, 0)) - .addElement('r', ofBlock(LanthItemList.FOCUS_MANIPULATION_CASING, 0)) - .addElement('h', ofBlock(LanthItemList.FOCUS_HOLDER, 0)) - .addElement('u', ofBlock(LanthItemList.TARGET_RECEPTACLE_CASING, 0)) - .addElement('i', ofBlock(LanthItemList.TARGET_HOLDER, 0)) - .addElement('o', buildHatchAdder(TargetChamber.class).atLeast(OutputBus).casingIndex(CASING_INDEX_CENTRE).dot(4).build()) - - .build(); - } - //spotless:on - - private boolean addGlass(Block block, int meta) { - return block == ItemRegistry.bw_glasses[0]; - } - - private boolean addBeamLineInputHatch(IGregTechTileEntity te, int casingIndex) { - - if (te == null) return false; - - IMetaTileEntity mte = te.getMetaTileEntity(); - - if (mte == null) return false; - - if (mte instanceof TileHatchInputBeamline) { - return this.mInputBeamline.add((TileHatchInputBeamline) mte); - } - - return false; - } - - private boolean addFocusInputHatch(IGregTechTileEntity te, int casingIndex) { - - if (te == null) return false; - - IMetaTileEntity mte = te.getMetaTileEntity(); - - if (mte == null) return false; - - if (mte instanceof TileBusInputFocus) { - return this.mInputFocus.add((TileBusInputFocus) mte); - } - - return false; - } - - public TargetChamber(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - public TargetChamber(String name) { - super(name); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity te) { - return new TargetChamber(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean active, boolean redstoneLevel) { - // Placeholder - if (side == facing) { - if (active) return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][47] }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Collision Chamber") - .addInfo("Controller block for the Target Chamber") - .addInfo("Hitting things with other things") - - .addInfo(BLUEPRINT_INFO) - .addInfo(DescTextLocalization.BEAMLINE_SCANNER_INFO) - .addSeparator() - .beginStructureBlock(5, 5, 6, true) - .addController("Front bottom") - .addCasingInfoExactly("Grate Machine Casing", 29, false) - .addCasingInfoExactly("Shielded Accelerator Casing", 28, false) - .addCasingInfoExactly("Borosilicate Glass", 16, true) - .addCasingInfoExactly(LanthItemList.SHIELDED_ACCELERATOR_GLASS.getLocalizedName(), 34, false) - .addCasingInfoExactly(LanthItemList.TARGET_RECEPTACLE_CASING.getLocalizedName(), 4, false) - .addCasingInfoExactly(LanthItemList.FOCUS_MANIPULATION_CASING.getLocalizedName(), 4, false) - .addCasingInfoExactly(LanthItemList.FOCUS_HOLDER.getLocalizedName(), 1, false) - .addCasingInfoExactly(LanthItemList.TARGET_HOLDER.getLocalizedName(), 1, false) - .addOtherStructurePart("Focus Input Bus", addDotText(1)) - .addMaintenanceHatch(addDotText(2)) - .addEnergyHatch(addDotText(2)) - .addInputBus(addDotText(3)) - .addOutputBus(addDotText(4)) - .addOtherStructurePart("Beamline Input Hatch", addDotText(5)) - .toolTipFinisher("GTNH: Lanthanides"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece("base", stackSize, hintsOnly, 2, 4, 0); - - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece("base", stackSize, 2, 4, 0, elementBudget, env, false, true); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public RecipeMap getRecipeMap() { - return BeamlineRecipeAdder2.instance.TargetChamberRecipes; - } - - @Override - public boolean checkRecipe(ItemStack itemStack) { - - inputEnergy = 0; - inputRate = 0; - inputParticle = 0; - inputFocus = 0; - - ArrayList tItems = this.getStoredInputs(); - ItemStack tFocusItem = this.getFocusItemStack(); - - ItemStack tFocusItemZeroDamage = null; - - if (tFocusItem != null) { - - tFocusItemZeroDamage = tFocusItem.copy(); - tFocusItemZeroDamage.setItemDamage(0); - } - - ArrayList tItemsWithFocusItem = new ArrayList<>(); - tItemsWithFocusItem.add(tFocusItemZeroDamage); - tItemsWithFocusItem.addAll(tItems); - - long tVoltage = this.getMaxInputVoltage(); - - ItemStack[] tItemsArray = tItems.toArray(new ItemStack[0]); - - ItemStack[] tItemsWithFocusItemArray = tItemsWithFocusItem.toArray(new ItemStack[0]); - - RecipeTC tRecipe = (RecipeTC) BeamlineRecipeAdder2.instance.TargetChamberRecipes.findRecipeQuery() - .items(tItemsWithFocusItemArray) - .voltage(tVoltage) - .filter((GT_Recipe recipe) -> { - - RecipeTC recipeTc = (RecipeTC) recipe; - - BeamInformation inputInfo = this.getInputInformation(); - - int particle = recipeTc.particleId; - - return (particle == inputInfo.getParticleId() - && !(inputInfo.getEnergy() < recipeTc.minEnergy || inputInfo.getEnergy() > recipeTc.maxEnergy)); - - }) - .find(); - - if (tRecipe == null || !tRecipe.isRecipeInputEqual(true, new FluidStack[] {}, tItemsWithFocusItemArray)) - return false; - - if (tRecipe.focusItem != null) { - if (tRecipe.focusItem.getItem() != tFocusItem.getItem()) return false; - } - - this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - - BeamInformation inputInfo = this.getInputInformation(); - - if (inputInfo == null) return false; - - inputEnergy = inputInfo.getEnergy(); - inputRate = inputInfo.getRate(); - inputParticle = inputInfo.getParticleId(); - inputFocus = inputInfo.getFocus(); - - if (inputEnergy < tRecipe.minEnergy || inputEnergy > tRecipe.maxEnergy) return false; - - if (inputFocus < tRecipe.minFocus) return false; - - if (inputParticle != tRecipe.particleId) return false; - - this.mMaxProgresstime = Math.max(Math.round((tRecipe.amount / inputRate * 5 * TickTime.SECOND)), 1); // 5 - // seconds - // per - // integer multiple - // over the rate. E.g., 100a, 10r - // would equal 50 seconds - if (this.mMaxProgresstime == Integer.MAX_VALUE - 1 && this.mEUt == Integer.MAX_VALUE - 1) return false; - - mEUt = (int) -tVoltage; - if (this.mEUt > 0) this.mEUt = (-this.mEUt); - - this.mOutputItems = tRecipe.mOutputs; - - if (tRecipe.focusItem != null) // Recipe actually uses the mask, can also assume machine mask item is nonnull - // due to above conditions - mInputFocus.get(0) - .depleteFocusDurability(1); - - this.updateSlots(); - - return true; - } - - private BeamInformation getInputInformation() { - - for (TileHatchInputBeamline in : this.mInputBeamline) { - - if (in.q == null) return new BeamInformation(0, 0, 0, 0); - // if (in.q == null) return new BeamInformation(10, 10, Particle.PHOTON.ordinal(), 90); // temporary - // for - // testing purposes - - return in.q.getContent(); - } - return null; - } - - private ItemStack getFocusItemStack() { - - for (TileBusInputFocus hatch : this.mInputFocus) { - return hatch.getContentUsageSlots() - .get(0); - } - - return null; - - } - - @Override - public boolean checkMachine(IGregTechTileEntity arg0, ItemStack arg1) { - - mInputBeamline.clear(); - mInputFocus.clear(); - - if (!checkPiece("base", 2, 4, 0)) return false; - - return this.mInputBeamline.size() == 1 && this.mMaintenanceHatches.size() == 1 - && this.mInputBusses.size() == 1 - && this.mOutputBusses.size() == 1 - && this.mInputFocus.size() == 1; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack arg0) { - return false; - } - - @Override - public int getDamageToComponent(ItemStack arg0) { - return 0; - } - - @Override - public int getMaxEfficiency(ItemStack arg0) { - return 10000; - } - - @Override - public boolean isCorrectMachinePart(ItemStack arg0) { - return true; - } - - @Override - public String[] getStructureDescription(ItemStack arg0) { - return DescTextLocalization.addText("TargetChamber.hint", 13); - } - - @Override - public String[] getInfoData() { - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : mEnergyHatches) { - if (tHatch.isValid()) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - } - - BeamInformation information = this.getInputInformation(); - - return new String[] { - /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(getActualEnergyUsage()) - + EnumChatFormatting.RESET - + " EU/t", - /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getMaxInputVoltage()) - + EnumChatFormatting.RESET - + " EU/t(*2A) " - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + VN[GT_Utility.getTier(getMaxInputVoltage())] - + EnumChatFormatting.RESET, - /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + Float.toString(mEfficiency / 100.0F) - + EnumChatFormatting.RESET - + " %", - - /* 6 */ EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.in_pre") - + ": " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.particle") + ": " // "Multiblock Beamline Input:" - + EnumChatFormatting.GOLD - + Particle.getParticleFromId(information.getParticleId()) - .getLocalisedName() // e.g. "Electron - // (e-)" - + " " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.energy") + ": " // "Energy:" - + EnumChatFormatting.DARK_RED - + information.getEnergy() * 1000 // In line with the synchrotron's output - + EnumChatFormatting.RESET - + " eV", // e.g. "10240 eV" - StatCollector.translateToLocal("beamline.focus") + ": " // "Focus:" - + EnumChatFormatting.BLUE - + information.getFocus() - + " " - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("beamline.amount") + ": " // "Amount:" - + EnumChatFormatting.LIGHT_PURPLE - + information.getRate(), }; - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeAdder2.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeAdder2.java deleted file mode 100644 index 59c14940d6..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeAdder2.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity.recipe.beamline; - -import java.util.Arrays; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; - -import com.elisis.gtnhlanth.common.beamline.Particle; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMapBackend; -import gregtech.api.recipe.RecipeMapBuilder; -import gregtech.api.util.GT_Utility; - -public class BeamlineRecipeAdder2 { - - public static final BeamlineRecipeAdder2 instance = new BeamlineRecipeAdder2(); - - public final RecipeMap SourceChamberRecipes = RecipeMapBuilder.of("gtnhlanth.recipe.sc") - .minInputs(0, 0) - .maxIO(1, 2, 0, 0) - .amperage(1) - .frontend(SourceChamberFrontend::new) - .progressBar(GT_UITextures.PROGRESSBAR_ASSEMBLY_LINE_1) - .neiSpecialInfoFormatter((recipeInfo) -> { - - RecipeSC recipe = (RecipeSC) recipeInfo.recipe; - - float focus = recipe.focus; - float maxEnergy = recipe.maxEnergy; - - int amount = recipe.rate; - - Particle particle = Particle.getParticleFromId(recipe.particleId); - - return Arrays.asList( - - // StatCollector.translateToLocal("beamline.particle") + ": " + particle.getLocalisedName(), - - StatCollector.translateToLocal("beamline.energy") + ": <=" - + GT_Utility.formatNumbers(Math.min(maxEnergy, particle.maxSourceEnergy())) - + " keV", - - StatCollector.translateToLocal("beamline.focus") + ": " + GT_Utility.formatNumbers(focus), - - StatCollector.translateToLocal("beamline.rate") + ": " + GT_Utility.formatNumbers(amount) - - ); - }) - // .slotOverlays(null) - - .build(); - - public final RecipeMap TargetChamberRecipes = RecipeMapBuilder.of("gtnhlanth.recipe.tc") - .minInputs(0, 0) - .maxIO(3, 4, 0, 0) - .frontend(TargetChamberFrontend::new) - .neiSpecialInfoFormatter(((recipeInfo) -> { - - RecipeTC recipe = (RecipeTC) recipeInfo.recipe; - - float minEnergy = recipe.minEnergy; - float maxEnergy = recipe.maxEnergy; - - float minFocus = recipe.minFocus; - - float amount = recipe.amount; - - Particle particle = Particle.getParticleFromId(recipe.particleId); - - return Arrays.asList( - - // StatCollector.translateToLocal("beamline.particle") + ": " + particle.getLocalisedName(), - - StatCollector.translateToLocal("beamline.energy") + ": " - + GT_Utility.formatNumbers(minEnergy * 1000) - + "-" - + GT_Utility.formatNumbers(maxEnergy * 1000) - + " eV", // Note the eV unit - - StatCollector.translateToLocal("beamline.focus") + ": >=" + GT_Utility.formatNumbers(minFocus), - - StatCollector.translateToLocal("beamline.amount") + ": " + GT_Utility.formatNumbers(amount) - - ); - })) - // .slotOverlays(null) - .progressBar(GT_UITextures.PROGRESSBAR_ASSEMBLY_LINE_1) - .progressBarPos(108, 22) - .neiTransferRect(100, 22, 28, 18) - .build(); - - /*** - * - * @param itemInputs - duh - * @param itemOutputs - duh - * @param particleId - The ID of the {@link com.elisis.gtnhlanth.common.beamline.Particle} generated by the recipe. - * It is recommended to use Particle#ordinal() - * @param rate - The rate/amount of particles generated - * @param maxEnergy - The maximum energy particles generated by this recipe can possess (keV). Set this value >= - * max particle energy to limit it to the latter - * @param focus - Focus of the particle generated - * @param energyRatio - Set high for little-to-no EUt energy scaling, low for the opposite - * @param minEUt - Minimum EUt required for the recipe. ! May not output if input energy is equal to minimum ! - */ - public boolean addSourceChamberRecipe(ItemStack[] itemInputs, ItemStack[] itemOutputs, int particleId, int rate, - float maxEnergy, float focus, float energyRatio, int minEUt) { - - return (SourceChamberRecipes.addRecipe( - new RecipeSC( - false, - itemInputs, - itemOutputs, - null, - new int[] {}, - null, - null, - 20, - minEUt, - particleId, - rate, - maxEnergy, - focus, - energyRatio)) - != null); - } - - /*** - * - * @param itemInput - The item to be used as a target. Should have durability - * @param itemOutput - duh - * @param particleId - The ID of the {@link com.elisis.gtnhlanth.common.beamline.Particle} used by the recipe. It - * is recommended to use Particle#ordinal() - * @param amount - The total amount of particles required for the recipe to come to completion. The duration of - * the recipe will be determined by this and the input particle rate. - * @param minEnergy - The minimum energy amount required by this recipe in keV (inclusive) - * @param maxEnergy - The maximum energy amount allowed by this recipe in keV (inclusive) - * @param minFocus - Minimum focus allowed by the recipe - * @param energyRatio - Set high for little-to-no EUt energy scaling, low for the opposite - * @param minEUt - Minimum EUt required for the recipe to start - */ - - public boolean addTargetChamberRecipe(ItemStack itemInput, ItemStack itemOutput, ItemStack itemFocus, - int particleId, int amount, float minEnergy, float maxEnergy, float minFocus, float energyRatio, int minEUt) { - - return (TargetChamberRecipes.addRecipe( - new RecipeTC( - false, - itemInput, - itemOutput, - itemFocus, - particleId, - amount, - minEnergy, - maxEnergy, - minFocus, - energyRatio, - minEUt), - false, - false, - false) != null); - - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java deleted file mode 100644 index 2c5eef4ea0..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java +++ /dev/null @@ -1,194 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity.recipe.beamline; - -import java.util.Arrays; -import java.util.HashMap; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; - -import com.elisis.gtnhlanth.common.beamline.Particle; -import com.elisis.gtnhlanth.common.item.MaskList; -import com.elisis.gtnhlanth.common.register.LanthItemList; -import com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.material.ELEMENT; - -public class BeamlineRecipeLoader { - - public static final HashMap coolantMap = new HashMap<>(); - - private static final ItemList[] VIABLE_WAFERS = new ItemList[] { ItemList.Circuit_Silicon_Wafer, - ItemList.Circuit_Silicon_Wafer2, ItemList.Circuit_Silicon_Wafer3, ItemList.Circuit_Silicon_Wafer4, - ItemList.Circuit_Silicon_Wafer5, ItemList.Circuit_Silicon_Wafer6, ItemList.Circuit_Silicon_Wafer7 }; - - public static void load() { - - /* - * Coolant list - */ - - coolantMap.put( - Materials.LiquidNitrogen.getGas(1L) - .getFluid() - .getName(), - Materials.Nitrogen.getGas(1L) - .getFluid()); - coolantMap.put( - Materials.LiquidOxygen.getGas(1L) - .getFluid() - .getName(), - Materials.Oxygen.getGas(1L) - .getFluid()); - coolantMap.put("ic2coolant", FluidRegistry.getFluid("ic2hotcoolant")); - coolantMap.put( - Materials.SuperCoolant.getFluid(1L) - .getFluid() - .getName(), - Materials.Water.getFluid(1L) - .getFluid()); - - /* - * ELECTRON - */ - BeamlineRecipeAdder2.instance.addSourceChamberRecipe( - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Tungsten, 1) }, - null, - Particle.ELECTRON.ordinal(), - 20, - 1000, - 98, - 0.1f, - 7680); - - BeamlineRecipeAdder2.instance.addSourceChamberRecipe( - new ItemStack[] { WerkstoffMaterialPool.LanthanumHexaboride.get(OrePrefixes.stickLong, 1) }, - null, - Particle.ELECTRON.ordinal(), - 60, - 5000, - 99, - 0.3f, - 7680); - - /* - * NEUTRON - */ - BeamlineRecipeAdder2.instance.addSourceChamberRecipe( - new ItemStack[] { ELEMENT.getInstance().CALIFORNIUM.getDust(1) }, - null, - Particle.NEUTRON.ordinal(), - 10, - 9000, - 95, - 999, - 1920); - - /* - * ALPHA - */ - BeamlineRecipeAdder2.instance.addSourceChamberRecipe( - new ItemStack[] { Materials.Uranium.getDust(1) }, - new ItemStack[] { WerkstoffMaterialPool.Thorium234.get(OrePrefixes.dust, 1) }, - Particle.ALPHA.ordinal(), - 1, - 4270, - 90, - 999, - 480); - - /* - * TARGET CHAMBER - */ - - for (MaskList mask : MaskList.values()) { - - if (mask.getProducedItem() == null) // Blank or error - continue; - - int index = 0; - for (ItemList wafer : VIABLE_WAFERS) { - - index++; - - if (!Arrays.asList(mask.getForbiddenWafers()) - .contains(wafer)) { - - BeamlineRecipeAdder2.instance.addTargetChamberRecipe( - wafer.get(1), - GT_Utility.copyAmountUnsafe((int) Math.pow(2, index + 2), mask.getProducedItem()), - new ItemStack(LanthItemList.maskMap.get(mask), 0), - 1, - mask.getBaselineAmount() * (int) Math.pow(Math.sqrt(3), index - 1), // 3x recipe amount increase - // per 2 increases in wafer - // tier. This greatly - // incentivises the use of - // higher tier boule wafer - // recipes - mask.getMinEnergy(), - mask.getMaxEnergy(), - mask.getMinFocus(), - 1, - 1920); - - } - - } - - /* - * if (!Arrays.asList(MaskList.CPU.getForbiddenWafers()).contains(wafer)) { - * BeamlineRecipeAdder.instance.addTargetChamberRecipe( wafer.get(1), GT_Utility.copyAmountUnsafe((int) - * Math.pow(2, index + 2), ItemList.Circuit_Wafer_CPU.get(1)), //Varies new - * ItemStack(LanthItemList.maskMap.get(MaskList.CPU), 0), // Varies 0, 10 * (int) Math.pow(2, index - 1), // - * Varies 1, //Varies 10000000, //Varies 50, //Varies 1, 1920 ); } /* PPIC - */ - - /* - * if (!Arrays.asList(MaskList.PPIC.getForbiddenWafers()).contains(wafer)) { - * GT_Log.out.print("Adding recipe for PPIC with " + wafer.get(1).getUnlocalizedName() + " amount: " + 40 * - * (int) Math.pow(2, index - 1)); BeamlineRecipeAdder.instance.addTargetChamberRecipe( wafer.get(1), - * ItemList.Circuit_Wafer_PPIC.get((int) Math.pow(2, index + 2)), //Varies new - * ItemStack(LanthItemList.maskMap.get(MaskList.PPIC), 0), // Varies 0, 40 * (int) Math.pow(2, index - 1), - * // Varies 1, //Varies 10000000, //Varies 50, //Varies 1, 1920 ); } - */ - - } - /* - * BeamlineRecipeAdder2.instance.addTargetChamberRecipe( new ItemStack(Items.coal, 1), new - * ItemStack(Items.diamond, 1), null, 1, 20, 100, 1000, 60, 1, 1920); - * BeamlineRecipeAdder2.instance.addTargetChamberRecipe( new ItemStack(Items.coal, 1), new - * ItemStack(Items.cooked_chicken, 1), null, 1, 20, 1, 10, 60, 1, 1920); - */ - - BeamlineRecipeAdder2.instance.addTargetChamberRecipe( - new ItemStack(Items.chicken, 1), - new ItemStack(Items.cooked_chicken), - null, - Particle.PHOTON.ordinal(), - 400, - 5, - 20, - 80, - 1, - 7864320); - - BeamlineRecipeAdder2.instance.addTargetChamberRecipe( - new ItemStack(Items.chicken, 1), - new ItemStack(Items.egg), - null, - Particle.PHOTON.ordinal(), - 400, - 21, - 600, - 80, - 1, - 7864320); - - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/RecipeSC.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/RecipeSC.java deleted file mode 100644 index 0d65421e67..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/RecipeSC.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity.recipe.beamline; - -import java.util.ArrayList; -import java.util.Arrays; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.elisis.gtnhlanth.common.register.LanthItemList; - -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class RecipeSC extends GT_Recipe { - - public int particleId; - public int rate; - public float maxEnergy; - public float focus; - public float energyRatio; - - public RecipeSC(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, int[] aChances, - FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int particleId, int rate, - float maxEnergy, float focus, float energyRatio) { - - super(aOptimize, aInputs, aOutputs, null, aChances, null, null, aDuration, aEUt, 0); - - this.particleId = particleId; - this.rate = rate; - this.maxEnergy = maxEnergy; - this.focus = focus; - this.energyRatio = energyRatio; - } - - @Override - public ItemStack getRepresentativeOutput(int aIndex) { - - ArrayList mOutputsWithParticle = new ArrayList<>(); - - ItemStack particleStack = new ItemStack(LanthItemList.PARTICLE_ITEM); - - Items.ender_pearl.setDamage(particleStack, this.particleId); - - mOutputsWithParticle.addAll(Arrays.asList(mOutputs)); - mOutputsWithParticle.add(particleStack); - - ItemStack[] mOutputsWithParticleArray = mOutputsWithParticle.toArray(new ItemStack[0]); - - if (aIndex < 0 || aIndex >= mOutputsWithParticleArray.length) return null; - return GT_Utility.copyOrNull(mOutputsWithParticleArray[aIndex]); - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/RecipeTC.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/RecipeTC.java deleted file mode 100644 index 49a5b64e1d..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/RecipeTC.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity.recipe.beamline; - -import java.util.ArrayList; -import java.util.Arrays; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import com.elisis.gtnhlanth.common.register.LanthItemList; - -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class RecipeTC extends GT_Recipe { - - public int particleId; - public int amount; - - public float minEnergy; - public float maxEnergy; - - public float minFocus; - public float energyRatio; - - public ItemStack focusItem; - - public RecipeTC(boolean aOptimize, ItemStack aInput, ItemStack aOutput, ItemStack aFocusItem, int particleId, - int amount, float minEnergy, float maxEnergy, float minFocus, float energyRatio, int aEUt) { - - super( - aOptimize, - new ItemStack[] { aFocusItem, aInput }, - new ItemStack[] { aOutput }, - null, - null, - null, - null, - 1, - aEUt, - 0); - - this.particleId = particleId; - this.amount = amount; - - this.minEnergy = minEnergy; - this.maxEnergy = maxEnergy; - - this.minFocus = minFocus; - - this.energyRatio = energyRatio; - - this.focusItem = aFocusItem; - } - - @Override - public ItemStack getRepresentativeInput(int aIndex) { - - ArrayList mInputsWithParticle = new ArrayList<>(); - - ItemStack particleStack = new ItemStack(LanthItemList.PARTICLE_ITEM); - Items.ender_pearl.setDamage(particleStack, this.particleId); - - mInputsWithParticle.add(particleStack); - mInputsWithParticle.addAll(Arrays.asList(mInputs)); - - ItemStack[] mInputsWithParticleArray = mInputsWithParticle.toArray(new ItemStack[0]); - - if (aIndex < 0 || aIndex >= mInputsWithParticleArray.length) return null; - return GT_Utility.copyOrNull(mInputsWithParticleArray[aIndex]); - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/SourceChamberFrontend.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/SourceChamberFrontend.java deleted file mode 100644 index 24282e54c6..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/SourceChamberFrontend.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity.recipe.beamline; - -import gregtech.api.recipe.BasicUIPropertiesBuilder; -import gregtech.api.recipe.NEIRecipePropertiesBuilder; -import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.nei.RecipeDisplayInfo; - -public class SourceChamberFrontend extends RecipeMapFrontend { - - public SourceChamberFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, - NEIRecipePropertiesBuilder neiPropertiesBuilder) { - super(uiPropertiesBuilder, neiPropertiesBuilder); - } - - @Override - public void drawDescription(RecipeDisplayInfo recipeInfo) { - drawEnergyInfo(recipeInfo); - // drawDurationInfo(recipeInfo); Unnecessary and misleading - drawSpecialInfo(recipeInfo); - drawMetadataInfo(recipeInfo); - drawRecipeOwnerInfo(recipeInfo); - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/TargetChamberFrontend.java b/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/TargetChamberFrontend.java deleted file mode 100644 index 58b73fb58d..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/common/tileentity/recipe/beamline/TargetChamberFrontend.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.elisis.gtnhlanth.common.tileentity.recipe.beamline; - -import static gregtech.api.util.GT_Utility.trans; - -import java.util.List; - -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -import com.elisis.gtnhlanth.util.Util; -import com.gtnewhorizons.modularui.api.math.Pos2d; - -import gregtech.api.recipe.BasicUIPropertiesBuilder; -import gregtech.api.recipe.NEIRecipePropertiesBuilder; -import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Utility; -import gregtech.common.gui.modularui.UIHelper; -import gregtech.nei.GT_NEI_DefaultHandler; -import gregtech.nei.RecipeDisplayInfo; - -public class TargetChamberFrontend extends RecipeMapFrontend { - - public TargetChamberFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, - NEIRecipePropertiesBuilder neiPropertiesBuilder) { - super(uiPropertiesBuilder, neiPropertiesBuilder); - } - - public void drawDescription(RecipeDisplayInfo recipeInfo) { - drawEnergyInfo(recipeInfo); - // drawDurationInfo(recipeInfo); - drawSpecialInfo(recipeInfo); - drawMetadataInfo(recipeInfo); - drawRecipeOwnerInfo(recipeInfo); - } - - @Override - protected void drawNEIOverlayForInput(GT_NEI_DefaultHandler.FixedPositionedStack stack) { - if (stack.isNotConsumed()) { // The stack actually takes damage, but is technically still not considered to be - // consumed by the code - drawNEIOverlayText("PC", stack); - } - } - - @Override - protected List handleNEIItemInputTooltip(List currentTip, - GT_NEI_DefaultHandler.FixedPositionedStack pStack) { - if (pStack.isNotConsumed()) { // See above - currentTip.add(EnumChatFormatting.GRAY + StatCollector.translateToLocal("gtnhlanth.tt.pc")); // Partially - // consumed: - // Takes damage - // in the - // process - } - return currentTip; - } - - @Override - public void drawEnergyInfo(RecipeDisplayInfo recipeInfo) { - if (recipeInfo.calculator.getConsumption() <= 0) return; - - // recipeInfo.drawText(trans("152", "Total: ") + getTotalPowerString(recipeInfo.calculator)); - - recipeInfo.drawText(trans("153", "Usage: ") + getEUtDisplay(recipeInfo.calculator)); - recipeInfo.drawText(trans("154", "Voltage: ") + getVoltageString(recipeInfo.calculator)); - recipeInfo.drawText(trans("155", "Amperage: ") + getAmperageString(recipeInfo.calculator)); - - } - - @Override - public List getItemOutputPositions(int itemOutputCount) { - return UIHelper.getGridPositions(itemOutputCount, 128, 24, 1, 3); // Make output items display vertically, not - // in a square - } - - @Override - public List getItemInputPositions(int itemInputCount) { - - /* - * Pos2d posParticle = new Pos2d(8, 28); // Particle item ArrayList posList = new ArrayList<>(); - * posList.add(posParticle); posList.addAll(UIHelper.getGridPositions(itemInputCount - 1, 36, 28, 3)); - */ - - List posList = Util.getGridPositions(itemInputCount, 8, 20, 3, 1, 20); - return posList; - } - - private String getEUtDisplay(GT_OverclockCalculator calculator) { - return getEUtWithoutTier(calculator); - } - - private String getEUtWithoutTier(GT_OverclockCalculator calculator) { - return GT_Utility.formatNumbers(calculator.getConsumption()) + " EU/t"; - } - - private String getVoltageString(GT_OverclockCalculator calculator) { - long voltage = computeVoltageForEURate(calculator.getConsumption()); - return GT_Utility.formatNumbers(voltage) + " EU/t" + GT_Utility.getTierNameWithParentheses(voltage); - } - - private long computeVoltageForEURate(long euPerTick) { - return euPerTick; - } - - private String getAmperageString(GT_OverclockCalculator calculator) { - return GT_Utility.formatNumbers(1); - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/loader/BotRecipes.java b/src/main/java/com/elisis/gtnhlanth/loader/BotRecipes.java deleted file mode 100644 index 0b4f5e4472..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/loader/BotRecipes.java +++ /dev/null @@ -1,263 +0,0 @@ -package com.elisis.gtnhlanth.loader; - -import static com.elisis.gtnhlanth.common.register.BotWerkstoffMaterialPool.*; -import static gregtech.api.enums.OrePrefixes.*; -import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; -import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.chemicalReactorRecipes; -import static gregtech.api.recipe.RecipeMaps.crackingRecipes; -import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; -import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; -import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; - -import java.util.HashSet; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.elisis.gtnhlanth.common.register.BotWerkstoffMaterialPool; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -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 ic2.core.Ic2Items; - -/* - * Originally authored by botn365 under the MIT License. See BotdustriesLICENSE - */ - -public class BotRecipes { - - public static void addGTRecipe() { - ItemStack C1 = GT_Utility.getIntegratedCircuit(1); - ItemStack C2 = GT_Utility.getIntegratedCircuit(2); - ItemStack C24 = GT_Utility.getIntegratedCircuit(24); - - // CaCO3 + 2HCl = H2O + CO2 + CaCl2 - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(1)) - .itemOutputs(Materials.CarbonDioxide.getCells(1), WerkstoffLoader.CalciumChloride.get(dust, 3)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(2000)) - .fluidOutputs(Materials.Water.getFluid(1000)) - .duration(4 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(UniversalChemical); - - // tungsten chain - FluidStack sodiumTungsten = SodiumTungstate.getFluidOrGas(1000); - ItemStack scheelite = Materials.Scheelite.getDust(6); - - // Li2WO4 + 2Na = Na2WO4 + 2Li - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Tungstate.getDust(7), Materials.Sodium.getDust(2)) - .itemOutputs(Materials.Lithium.getDust(2)) - .fluidInputs(Materials.Water.getFluid(4000)) - .fluidOutputs(sodiumTungsten) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(autoclaveRecipes); - - // MnWO4 + 2Na = Na2WO4 + Mn - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Huebnerit.get(dust, 6), Materials.Sodium.getDust(2)) - .itemOutputs(Materials.Manganese.getDust(1)) - .fluidInputs(Materials.Water.getFluid(4000)) - .fluidOutputs(sodiumTungsten) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(autoclaveRecipes); - - // FeWO4 + 2Na = Na2WO4 + Fe - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Ferberite.get(dust, 6), Materials.Sodium.getDust(2)) - .itemOutputs(Materials.Iron.getDust(1)) - .fluidInputs(Materials.Water.getFluid(4000)) - .fluidOutputs(sodiumTungsten) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(autoclaveRecipes); - - // CaCl2 + Na2WO4 = 2NaCl + CaWO4 - ItemStack Ca2Cl = WerkstoffLoader.CalciumChloride.get(dust, 3); - GT_Values.RA.stdBuilder() - .itemInputs(Ca2Cl) - .itemOutputs(scheelite, Materials.Salt.getDust(4)) - .fluidInputs(sodiumTungsten) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - ItemStack H2WO4 = TungsticAcid.get(dust, 7); - // CaWO4 + 2HCl = H2WO4 + CaCl2 - GT_Values.RA.stdBuilder() - .itemInputs(scheelite) - .itemOutputs(H2WO4, Ca2Cl) - .fluidInputs(Materials.HydrochloricAcid.getFluid(2000)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_EV) - .addTo(UniversalChemical); - - ItemStack WO3 = TungstenTrioxide.get(dust, 4); - // H2WO4 = WO3 + H2O - GT_Values.RA.stdBuilder() - .itemInputs(H2WO4) - .itemOutputs(WO3) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(COIL_HEAT, 1200) - .addTo(blastFurnaceRecipes); - - // WO3 + 6H = W + 3H2O - GT_Values.RA.stdBuilder() - .itemInputs(WO3, C2) - .itemOutputs(Materials.Tungsten.getDust(1)) - .fluidInputs(Materials.Hydrogen.getGas(6000)) - .fluidOutputs(GT_ModHandler.getSteam(3000)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(COIL_HEAT, 1000) - .addTo(blastFurnaceRecipes); - - WO3.stackSize = 8; - // 2WO3 + 3C = 2W + 3CO2 - GT_Values.RA.stdBuilder() - .itemInputs(WO3, Materials.Carbon.getDust(3)) - .itemOutputs(GT_OreDictUnificator.get(ingotHot, Materials.Tungsten, 2L)) - .fluidOutputs(Materials.CarbonDioxide.getGas(3000)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_EV) - .metadata(COIL_HEAT, 3000) - .addTo(blastFurnaceRecipes); - - // rocket fuels - // LMP103S - // 2Cl + CO = COCl2 - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.CarbonMonoxide.getCells(1), GT_Utility.getIntegratedCircuit(12)) - .itemOutputs(Phosgene.get(cell, 1)) - .fluidInputs(Materials.Chlorine.getGas(2000)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_HV) - .addTo(chemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(12)) - .itemOutputs(Phosgene.get(cell, 1), Materials.Empty.getCells(1)) - .fluidInputs(Materials.CarbonMonoxide.getGas(1000)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_HV) - .addTo(chemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(Materials.CarbonMonoxide.getCells(1), Materials.Chlorine.getCells(2)) - .itemOutputs(Phosgene.get(cell, 1), Materials.Empty.getCells(2)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_HV) - .addTo(chemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(Materials.Empty.getCells(2)) - .fluidInputs(Materials.CarbonMonoxide.getGas(1000)) - .fluidOutputs(BotWerkstoffMaterialPool.Phosgene.getFluidOrGas(1000)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - // H3PO4 = P + H2O - GT_Values.RA.stdBuilder() - .itemInputs(C2) - .itemOutputs(Materials.Phosphorus.getDust(1)) - .fluidInputs(Materials.PhosphoricAcid.getFluid(1000)) - .fluidOutputs(Materials.Water.getFluid(500)) - .eut(TierEU.RECIPE_HV) - .duration(1 * SECONDS) - .addTo(distilleryRecipes); - - ItemStack cells = Ic2Items.cell.copy(); - cells.stackSize = 1; - // NH4Cl = HCl + NH3 - GT_Values.RA.stdBuilder() - .itemInputs(cells) - .itemOutputs(Materials.Ammonia.getCells(1)) - .fluidInputs(WerkstoffLoader.AmmoniumChloride.getFluidOrGas(1000)) - .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000)) - .eut(TierEU.RECIPE_MV) - .duration(2 * SECONDS + 10 * TICKS) - .addTo(distilleryRecipes); - - // N2H4O3 + NaOH = NaNO3 + NH3 + H2O - GT_Values.RA.stdBuilder() - .itemInputs(AmmoniumNitrate.get(dust, 9), Materials.SodiumHydroxide.getDust(3)) - .itemOutputs(WerkstoffLoader.SodiumNitrate.get(dust, 5)) - .fluidOutputs(Materials.Ammonia.getGas(1000)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(chemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(AmmoniumNitrate.get(dust, 9), Materials.SodiumHydroxide.getDust(3), C2) - .itemOutputs(WerkstoffLoader.SodiumNitrate.get(dust, 5)) - .fluidOutputs(Materials.Ammonia.getGas(1000), Materials.Water.getFluid(1000)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(multiblockChemicalReactorRecipes); - - // N2H4O3 + NaOH + H =H2SO4= NH3 + HNO3 + Na + H2O - GT_Values.RA.stdBuilder() - .itemInputs(C24, AmmoniumNitrate.get(dust, 9), Materials.SodiumHydroxide.getDust(3)) - .itemOutputs(Materials.Sodium.getDust(1)) - .fluidInputs(Materials.SulfuricAcid.getFluid(1000), Materials.Hydrogen.getGas(1000)) - .fluidOutputs( - Materials.Ammonia.getGas(1000), - Materials.NitricAcid.getFluid(1000), - Materials.DilutedSulfuricAcid.getFluid(1000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(multiblockChemicalReactorRecipes); - - // 2HNO3 + C3H8 = 2CH3NO2 + 2H2O + C - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(2)) - .fluidInputs(Materials.Propane.getGas(1000), Materials.NitricAcid.getFluid(2000)) - .fluidOutputs(Nitromethane.getFluidOrGas(2000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(crackingRecipes); - } - - public static void removeRecipes() { - BotRecipes.removeTungstenElectro(); - } - - public static void removeTungstenElectro() { - HashSet toDel = new HashSet<>(); - ItemStack[] toRemove = { Materials.Scheelite.getDust(1), Materials.Tungstate.getDust(1), - WerkstoffLoader.Ferberite.get(dust, 1), WerkstoffLoader.Huebnerit.get(dust, 1) }; - for (GT_Recipe tRecipe : electrolyzerRecipes.getAllRecipes()) { - if (tRecipe.mFakeRecipe) continue; - for (int i = 0; i < tRecipe.mInputs.length; i++) { - ItemStack tItem = tRecipe.mInputs[i]; - if (item == null || !GT_Utility.isStackValid(tItem)) continue; - for (ItemStack tStack : toRemove) { - if (GT_Utility.areStacksEqual(tItem, tStack)) { - toDel.add(tRecipe); - continue; - } - } - } - } - electrolyzerRecipes.getBackend() - .removeRecipes(toDel); - electrolyzerRecipes.getBackend() - .reInit(); - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/loader/MetaTileEntity_Loader.java b/src/main/java/com/elisis/gtnhlanth/loader/MetaTileEntity_Loader.java deleted file mode 100644 index e24034c663..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/loader/MetaTileEntity_Loader.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.elisis.gtnhlanth.loader; - -public class MetaTileEntity_Loader { -} diff --git a/src/main/java/com/elisis/gtnhlanth/loader/RecipeLoader.java b/src/main/java/com/elisis/gtnhlanth/loader/RecipeLoader.java deleted file mode 100644 index 57e58e9501..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/loader/RecipeLoader.java +++ /dev/null @@ -1,4508 +0,0 @@ -package com.elisis.gtnhlanth.loader; - -import static com.elisis.gtnhlanth.api.recipe.LanthanidesRecipeMaps.digesterRecipes; -import static com.elisis.gtnhlanth.api.recipe.LanthanidesRecipeMaps.dissolutionTankRecipes; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.CeriumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.CeriumDioxide; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.CeriumDopedLutetiumAluminiumGarnet; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.CeriumDopedLutetiumAluminiumOxygenBlend; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.CeriumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.CeriumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.ChlorinatedRareEarthConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.ChlorinatedRareEarthDilutedSolution; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.ChlorinatedRareEarthEnrichedSolution; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.DephosphatedSamariumConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.DilutedSamariumRareEarthSolution; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.DysprosiumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.DysprosiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.DysprosiumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.ErbiumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.ErbiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.ErbiumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.EuropiumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.EuropiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.EuropiumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledCeriumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledDysprosiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledErbiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledEuropiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledGadoliniumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledHolmiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledLanthanumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledLutetiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledNeodymiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledPraseodymiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledPromethiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledSamariumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledTerbiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledThuliumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.FilledYtterbiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.GadoliniumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.GadoliniumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.GadoliniumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.Gangue; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.HolmiumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.HolmiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.HolmiumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.ImpureLanthanumChloride; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.LanthaniumChloride; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.LanthanumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.LanthanumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.LanthanumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.LutetiumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.LutetiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.LutetiumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.MuddySamariumRareEarthSolution; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.NeodymicRareEarthConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.NeodymiumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.NeodymiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.NeodymiumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.PraseodymiumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.PraseodymiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.PraseodymiumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.PromethiumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.PromethiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.PromethiumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.RarestEarthResidue; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.SamariumChloride; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.SamariumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.SamariumChlorideSodiumChlorideBlend; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.SamariumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.SamariumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.SamariumOxalate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.SamariumOxide; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.SamariumRareEarthMud; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.TerbiumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.TerbiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.TerbiumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.ThoriumPhosphateConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.ThuliumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.ThuliumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.ThuliumOreConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.YtterbiumChlorideConcentrate; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.YtterbiumExtractingNanoResin; -import static com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool.YtterbiumOreConcentrate; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.enums.Mods.PamsHarvestCraft; -import static gregtech.api.enums.OrePrefixes.blockCasingAdvanced; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; -import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.centrifugeNonCellRecipes; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; -import static gregtech.api.recipe.RecipeMaps.chemicalReactorRecipes; -import static gregtech.api.recipe.RecipeMaps.crackingRecipes; -import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; -import static gregtech.api.recipe.RecipeMaps.electroMagneticSeparatorRecipes; -import static gregtech.api.recipe.RecipeMaps.electrolyzerNonCellRecipes; -import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.mixerNonCellRecipes; -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; -import static gregtech.api.recipe.RecipeMaps.oreWasherRecipes; -import static gregtech.api.recipe.RecipeMaps.sifterRecipes; -import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.DISSOLUTION_TANK_RATIO; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; -import static gregtech.api.util.GT_RecipeConstants.WaferEngravingRecipes; -import static gregtech.common.items.GT_MetaGenerated_Item_01.registerCauldronCleaningFor; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.simpleWasherRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.vacuumFurnaceRecipes; - -import java.util.HashSet; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.elisis.gtnhlanth.Tags; -import com.elisis.gtnhlanth.common.item.MaskList; -import com.elisis.gtnhlanth.common.register.BotWerkstoffMaterialPool; -import com.elisis.gtnhlanth.common.register.LanthItemList; -import com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool; -import com.github.bartimaeusnek.bartworks.system.material.BW_GT_MaterialReference; -import com.github.bartimaeusnek.bartworks.system.material.GT_Enhancement.PlatinumSludgeOverHaul; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import cpw.mods.fml.common.registry.GameRegistry; -import goodgenerator.items.MyMaterial; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IRecipeMutableAccess; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_RecipeConstants; -import gregtech.api.util.GT_Utility; -import ic2.core.Ic2Items; - -public class RecipeLoader { - - public static void loadAccelerator() { - - /* Actual Beamline Multiblocks */ - - // SC - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.SolderingAlloy.getMolten(288)) - .itemInputs( - ItemList.Hull_LuV.get(1), - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 8), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 4), - ItemList.Conveyor_Module_LuV.get(4), - GT_Utility.copyAmount(2, LanthItemList.BEAMLINE_PIPE), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 2), - GT_Utility.getIntegratedCircuit(16) - - ) - .itemOutputs(LanthItemList.SOURCE_CHAMBER) - .duration(30 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - // LINAC - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.SolderingAlloy.getMolten(288)) - .itemInputs( - ItemList.Hull_LuV.get(1), - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 8), - ItemList.Casing_Coil_Superconductor.get(2), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 8), - ItemList.Electric_Pump_LuV.get(2), - GT_Utility.copyAmount(2, LanthItemList.BEAMLINE_PIPE), - GT_OreDictUnificator.get(OrePrefixes.cableGt08, Materials.VanadiumGallium, 2), - GT_Utility.getIntegratedCircuit(16) - - ) - .itemOutputs(LanthItemList.LINAC) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - // TC - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.SolderingAlloy.getMolten(288)) - .itemInputs( - ItemList.Hull_LuV.get(1), - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 8), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 4), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 4), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UV, 2), - GT_Utility.copyAmount(2, LanthItemList.BEAMLINE_PIPE), - GT_OreDictUnificator.get(OrePrefixes.cableGt02, Materials.VanadiumGallium, 1), - GT_Utility.getIntegratedCircuit(16) - - ) - .itemOutputs(LanthItemList.TARGET_CHAMBER) - .duration(30 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - // Synchrotron - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.SolderingAlloy.getMolten(6000)) - .itemInputs( - ItemList.Hull_LuV.get(1), - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 8), - ItemList.Casing_Coil_Superconductor.get(12), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 8), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UV, 8), - GT_Utility.copyAmount(8, LanthItemList.BEAMLINE_PIPE), - GT_OreDictUnificator.get(OrePrefixes.cableGt08, Materials.NiobiumTitanium, 8), - GT_Utility.getIntegratedCircuit(16)) - .itemOutputs(LanthItemList.SYNCHROTRON) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - /* - * //Permalloy GT_Values.RA.addMixerRecipe( GT_Utility.getIntegratedCircuit(4), Materials.Nickel.getDust(4), - * Materials.Iron.getDust(1), Materials.Molybdenum.getDust(1), null, null, - * WerkstoffMaterialPool.Permalloy.get(OrePrefixes.dust, 6), 1920, 200 ); - */ - // Mu-metal - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(2), - WerkstoffMaterialPool.Permalloy.get(OrePrefixes.dust, 9), - Materials.Copper.getDust(1), - Materials.Chrome.getDust(1)) - .itemOutputs(WerkstoffMaterialPool.MuMetal.get(OrePrefixes.ingot, 11)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .specialValue(4500) - .addTo(blastFurnaceRecipes); - - // Shielded Accelerator Casing -- Maybe assline recipe - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_RadiationProof.get(1L), - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 6), - GT_Utility.getIntegratedCircuit(6)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .itemOutputs(new ItemStack(LanthItemList.SHIELDED_ACCELERATOR_CASING, 1)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - // Accelerator Electrode Casing - GT_Values.RA.stdBuilder() - .itemInputs( - BW_GT_MaterialReference.Silver.get(blockCasingAdvanced, 1), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Silver, 12), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Gold, 6), - GT_Utility.getIntegratedCircuit(6)) - .fluidInputs(Materials.SolderingAlloy.getMolten(288)) - .itemOutputs(new ItemStack(LanthItemList.ELECTRODE_CASING, 1)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - ItemStack insulator = GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorSheet", 1); - - // Coolant Delivery Casing - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1), - Materials.Copper.getPlates(6), - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Naquadah, 2), - ItemList.Electric_Pump_LuV.get(3L), - new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 1), - new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 1), - new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 1), - GT_Utility.copyAmount(2, insulator), - GT_Utility.copyAmount(2, insulator), - GT_Utility.copyAmount(2, insulator), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tungsten, 1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(288), Materials.Lubricant.getFluid(1152)) - .itemOutputs(new ItemStack(LanthItemList.COOLANT_DELIVERY_CASING)) - .metadata(GT_RecipeConstants.RESEARCH_ITEM, ItemList.Casing_Pipe_TungstenSteel.get(1L)) - .metadata(GT_RecipeConstants.RESEARCH_TIME, 72000) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(AssemblyLine); - - // T1 Antenna Casing - GT_Values.RA.stdBuilder() - .fluidInputs( - Materials.SolderingAlloy.getMolten(6000), - Materials.Gold.getMolten(4000), - WerkstoffLoader.Xenon.getFluidOrGas(2000)) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Tungsten, 1), - Materials.Copper.getPlates(4), - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plate, 5), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorLuV, 4), - new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 4 }, - ItemList.Emitter_LuV.get(6), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 32), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Electrum, 6)) - .itemOutputs(new ItemStack(LanthItemList.ANTENNA_CASING_T1)) - - .metadata(GT_RecipeConstants.RESEARCH_ITEM, Materials.Niobium.getBlocks(1)) - .metadata(GT_RecipeConstants.RESEARCH_TIME, 30 * GT_RecipeBuilder.MINUTES) - - .duration(30 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(AssemblyLine); - - // T2 Antenna Casing - GT_Values.RA.stdBuilder() - .fluidInputs( - Materials.SolderingAlloy.getMolten(12000), - Materials.Gold.getMolten(6000), - WerkstoffLoader.Xenon.getFluidOrGas(2000)) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenCarbide, 1), - Materials.Copper.getPlates(4), - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plate, 5), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorZPM, 4), - new Object[] { OrePrefixes.circuit.get(Materials.UV), 4 }, - ItemList.Emitter_ZPM.get(6), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 64), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Electrum, 6)) - .itemOutputs(new ItemStack(LanthItemList.ANTENNA_CASING_T2)) - .metadata(GT_RecipeConstants.RESEARCH_ITEM, new ItemStack(LanthItemList.ANTENNA_CASING_T1)) - .metadata(GT_RecipeConstants.RESEARCH_TIME, 40 * GT_RecipeBuilder.MINUTES) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(AssemblyLine); - - // Niobium Cavity Casing - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Niobium, 1), - Materials.Niobium.getPlates(6)) - .fluidInputs(Materials.Helium.getGas(2000)) - .itemOutputs(new ItemStack(LanthItemList.NIOBIUM_CAVITY_CASING, 1)) - .duration(12 * GT_RecipeBuilder.SECONDS) - .eut(7680) - .addTo(assemblerRecipes); - - // Focus Manipulator - GT_Values.RA.stdBuilder() - .fluidInputs( - Materials.SolderingAlloy.getMolten(8000), - Materials.Gold.getMolten(2000), - Materials.Argon.getGas(1000)) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1), - - new Object[] { OrePrefixes.circuit.get(Materials.IV), 4 }, - ItemList.Robot_Arm_LuV.get(2), - ItemList.Robot_Arm_LuV.get(2), - ItemList.Conveyor_Module_LuV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tungsten, 2)) - .itemOutputs(new ItemStack(LanthItemList.FOCUS_MANIPULATION_CASING)) - .metadata(GT_RecipeConstants.RESEARCH_ITEM, new ItemStack(LanthItemList.maskMap.get(MaskList.BLANK1))) - .metadata(GT_RecipeConstants.RESEARCH_TIME, 20 * GT_RecipeBuilder.MINUTES) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(AssemblyLine); - - // Target Holder - GameRegistry.addShapedRecipe( - new ItemStack(LanthItemList.TARGET_HOLDER), - new Object[] { "MCM", "MHM", "MCM", 'M', WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 1), 'H', - ItemList.Hull_LuV.get(1), 'C', ItemList.Conveyor_Module_LuV.get(1) }); - - GameRegistry.addShapedRecipe( - - new ItemStack(LanthItemList.FOCUS_HOLDER), - new Object[] { "MCM", "R R", "MHM", 'M', WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 1), 'C', - ItemList.Conveyor_Module_LuV.get(1), 'R', ItemList.Robot_Arm_LuV.get(1), 'H', - ItemList.Hull_LuV.get(1) }); - - // Focus Input Bus - GameRegistry.addShapedRecipe( - LanthItemList.BEAMLINE_FOCUS_INPUT_BUS, - "MCM", - "McM", - "RCR", - 'M', - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 1), - 'C', - ItemList.Conveyor_Module_HV.get(1), - 'R', - ItemList.Robot_Arm_HV.get(1), - 'c', - new ItemStack(Blocks.chest, 1, 32767)); - - // Target Receptacle, same thing as Focus Manipulator basically - GT_Values.RA.stdBuilder() - .fluidInputs( - Materials.SolderingAlloy.getMolten(8000), - Materials.Gold.getMolten(2000), - Materials.Argon.getGas(1000)) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1), - new Object[] { OrePrefixes.circuit.get(Materials.IV), 4 }, - ItemList.Robot_Arm_LuV.get(2), - ItemList.Robot_Arm_LuV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tungsten, 2)) - .itemOutputs(new ItemStack(LanthItemList.TARGET_RECEPTACLE_CASING)) - .metadata(GT_RecipeConstants.RESEARCH_ITEM, ItemList.Circuit_Silicon_Wafer.get(1)) - .metadata(GT_RecipeConstants.RESEARCH_TIME, 20 * GT_RecipeBuilder.MINUTES) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(AssemblyLine); - - // Capillary Exchange - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.TungstenSteel, 8), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Copper, 2), - Materials.Titanium.getPlates(6), - GT_Utility.copyAmount(4, insulator), - ItemList.Electric_Pump_LuV.get(1), - Materials.Silver.getDust(2)) - .fluidInputs(Materials.Silicone.getMolten(288L)) - .itemOutputs(new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 1)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - // Mu-metal lattice - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.wireFine, 12), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 4)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .itemOutputs(new ItemStack(LanthItemList.MM_LATTICE, 1)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - // Shielded Accelerator Glass - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(LanthItemList.MM_LATTICE, 4)) - .fluidInputs(Materials.BorosilicateGlass.getMolten(144)) - .itemOutputs(new ItemStack(LanthItemList.SHIELDED_ACCELERATOR_GLASS, 1)) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(fluidSolidifierRecipes); - - // Beamline Pipe - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plate, 4), - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenCarbide, 4), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenCarbide, 8), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Osmiridium, 4), - GT_Utility.getIntegratedCircuit(7)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .itemOutputs(LanthItemList.BEAMLINE_PIPE) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - // Beamline Input Hatch - GT_Values.RA.stdBuilder() - .fluidInputs( - Materials.SolderingAlloy.getMolten(6000), - Materials.Argon.getGas(1000), - Materials.Helium.getGas(2000) - - ) - .itemInputs( - ItemList.Hull_LuV.get(1), - new Object[] { OrePrefixes.circuit.get(Materials.LuV), 2 }, - new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 2), - ItemList.Electric_Pump_LuV.get(1), - LanthItemList.BEAMLINE_PIPE, - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plate, 4) - - ) - .itemOutputs(LanthItemList.LUV_BEAMLINE_INPUT_HATCH) - .metadata(GT_RecipeConstants.RESEARCH_ITEM, ItemList.Hatch_Input_LuV.get(1)) - .metadata(GT_RecipeConstants.RESEARCH_TIME, 30 * GT_RecipeBuilder.MINUTES) - .duration(2 * GT_RecipeBuilder.MINUTES) - .eut(TierEU.RECIPE_LuV) - .addTo(AssemblyLine); - - // Beamline Output Hatch - GT_Values.RA.stdBuilder() - .fluidInputs( - Materials.SolderingAlloy.getMolten(8000), - Materials.Argon.getGas(1000), - Materials.Helium.getGas(6000) - - ) - .itemInputs( - ItemList.Hull_LuV.get(1), - new Object[] { OrePrefixes.circuit.get(Materials.LuV), 6 }, - new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 4), - ItemList.Electric_Pump_LuV.get(2), - ItemList.Electric_Motor_LuV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 8), - LanthItemList.BEAMLINE_PIPE, - WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plate, 8) - - ) - .itemOutputs(LanthItemList.LUV_BEAMLINE_OUTPUT_HATCH) - .metadata(GT_RecipeConstants.RESEARCH_ITEM, ItemList.Hatch_Output_LuV.get(1)) - .metadata(GT_RecipeConstants.RESEARCH_TIME, 40 * GT_RecipeBuilder.MINUTES) - .duration(4 * GT_RecipeBuilder.MINUTES) - .eut(TierEU.RECIPE_LuV) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Chloroform.getFluid(1000), Materials.HydrofluoricAcid.getFluid(3000)) - .fluidOutputs( - WerkstoffMaterialPool.Fluoroform.getFluidOrGas(1000), - Materials.HydrochloricAcid.getFluid(3000)) - .duration(15 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(multiblockChemicalReactorRecipes); - - /* - * GT_Values.RA.stdBuilder() - * .fluidInputs(Materials.Nitrogen.getPlasma(4000), Materials.Silane.getFluid(2000)) - * .fluidOutputs(WerkstoffMaterialPool.NitrogenPlasmaSilaneMix.getFluidOrGas(6000)) - * .duration(20 * GT_RecipeBuilder.SECONDS) - * .eut(7680) - * .addTo(mixerNonCellRecipes); - */ - - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Nitrogen.getPlasma(4000)) - .itemInputs(Materials.Silane.getCells(2)) - .fluidOutputs(WerkstoffMaterialPool.NitrogenPlasmaSilaneMix.getFluidOrGas(6000)) - .duration(20 * GT_RecipeBuilder.SECONDS) - .eut(7680) - .noOptimize() - .addTo(mixerRecipes); - - // NB: http://www.smfl.rit.edu/pdf/process/process_nitride_etch_paper.pdf - // Reactive Ion Etchant - GT_Values.RA.stdBuilder() - .fluidInputs(WerkstoffMaterialPool.Fluoroform.getFluidOrGas(3000)) - .itemInputs(Materials.Oxygen.getCells(4)) - .fluidOutputs(WerkstoffMaterialPool.FluoroformOxygenMix.getFluidOrGas(5000)) - .itemOutputs(Materials.Empty.getCells(4)) - .duration(15 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Iron.getDust(2), Materials.NetherQuartz.getPlates(1)) - .itemOutputs(new ItemStack(LanthItemList.IRON_COATED_QUARTZ)) - .duration(10 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - // Masks - // Quartz + Fe2O3 T1 - // " + Cr T2 - // - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(LanthItemList.IRON_COATED_QUARTZ)) - .fluidInputs(Materials.Oxygen.getGas(1000)) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.BLANK1))) - .outputChances(10000) - .requiresCleanRoom() - .duration(144 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(autoclaveRecipes); - - /* - * Unsure what was intended with this recipe? - * GT_Values.RA.stdBuilder() - * .itemInputs(new ItemStack(LanthItemList.IRON_COATED_QUARTZ), Materials.Chrome.getDust(1)) - * .fluidInputs(Materials.Oxygen.getGas(1000)) - * .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.BLANK2))) - * .outputChances(10000).requiresCleanRoom().duration(12 * SECONDS).eut(7980).addTo(autoclaveRecipes); - */ - - // Grow the first silicon - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Glass.getPlates(1)) - .fluidInputs(Materials.Silane.getGas(4000)) - .itemOutputs(new ItemStack(LanthItemList.SUBSTRATE_PRECURSOR)) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_LuV) - .requiresCleanRoom() - .addTo(autoclaveRecipes); - - // Now to deposit nitride - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(LanthItemList.SUBSTRATE_PRECURSOR)) - .fluidInputs(WerkstoffMaterialPool.NitrogenPlasmaSilaneMix.getFluidOrGas(4000)) - .fluidOutputs(Materials.Nitrogen.getGas(3000)) - .itemOutputs(new ItemStack(LanthItemList.MASK_SUBSTRATE), Materials.Empty.getCells(2)) - .duration(30 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_LuV) - .specialValue(3200) - .requiresCleanRoom() - .addTo(blastFurnaceRecipes); - - /* - * GT_Values.RA.stdBuilder().itemInputs(GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicon, 1)) - * .fluidInputs(Materials.SiliconTetrachloride.getFluid(3000), Materials.Ammonia.getFluid(4000)) - * .fluidOutputs(Materials.HydrochloricAcid.getFluid(12000)) - * .itemOutputs(WerkstoffMaterialPool.SiliconNitride.get(OrePrefixes.plate)) .duration(GT_RecipeBuilder.SECONDS - * * 30) .eut(TierEU.EV) .addTo(GT_Recipe.GT_Recipe_Map.sPlasmaArcFurnaceRecipes); - */ - - for (ItemStack lens : OreDictionary.getOres("craftingLensYellow")) { - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(0, lens), new ItemStack(LanthItemList.MASK_SUBSTRATE)) - .itemOutputs(new ItemStack(LanthItemList.MASKED_MASK)) - .duration(30 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_IV) - .requiresCleanRoom() - .addTo(WaferEngravingRecipes); - - } - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(LanthItemList.MASKED_MASK)) - .fluidInputs(WerkstoffMaterialPool.FluoroformOxygenMix.getFluidOrGas(4000)) - .itemOutputs(new ItemStack(LanthItemList.ETCHED_MASK_1)) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_LuV) - .requiresCleanRoom() - .addTo(autoclaveRecipes); - - // Etch pt. 2 with LiCl - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Argon.getGas(1000)) - .itemInputs( - new ItemStack(LanthItemList.MASKED_MASK), - MyMaterial.lithiumChloride.get(OrePrefixes.dust, 2), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PotassiumHydroxideDust", 4)) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.BLANK2))) - .duration(80 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_ZPM) - .specialValue(2400) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(LanthItemList.ETCHED_MASK_1), - Materials.Sodium.getDust(1), - Materials.Chrome.getPlates(1), - Materials.Gold.getPlates(2)) - .fluidInputs(Materials.Hydrogen.getGas(1000)) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.BLANK3))) - .duration(2 * GT_RecipeBuilder.MINUTES) - .eut(TierEU.RECIPE_ZPM) - .specialValue(3600) - .addTo(blastFurnaceRecipes); - - for (MaskList mask : MaskList.values()) { - - MaskList maskIngredient = mask.getPrecursor(); - Dyes lensColour = mask.getLensColour(); - - if (maskIngredient == null) continue; - - if (mask.getLensColour() == null) { // CR Recipe - - if (mask == MaskList.PPIC) { - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(LanthItemList.maskMap.get(MaskList.NPIC)), - Materials.IndiumGalliumPhosphide.getDust(64)) - .fluidInputs(Materials.Sunnarium.getMolten(1440L)) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.PPIC))) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(mask.getEngraverEUt()) - .requiresCleanRoom() - .addTo(UniversalChemical); // This is incredibly boring and doesn't make much sense, fix at some - // point. Maybe engrave again from precursor? - - } else if (mask == MaskList.HPIC) { - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(LanthItemList.maskMap.get(MaskList.PIC)), - Materials.IndiumGalliumPhosphide.getDust(2)) - .fluidInputs(Materials.VanadiumGallium.getMolten(288L)) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.HPIC))) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(mask.getEngraverEUt()) - .requiresCleanRoom() - .addTo(UniversalChemical); - - } else if (mask == MaskList.UHPIC) { - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(LanthItemList.maskMap.get(MaskList.HPIC)), - Materials.IndiumGalliumPhosphide.getDust(8)) - .fluidInputs(Materials.Naquadah.getMolten(576L)) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.UHPIC))) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(mask.getEngraverEUt()) - .requiresCleanRoom() - .addTo(UniversalChemical); - - } else if (mask == MaskList.NCPU) { - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(LanthItemList.maskMap.get(MaskList.CPU)), - GT_Utility.copyAmount(16, Ic2Items.carbonFiber)) - .fluidInputs(Materials.Glowstone.getMolten(576L)) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.NCPU))) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(mask.getEngraverEUt()) - .requiresCleanRoom() - .addTo(UniversalChemical); - - } else if (mask == MaskList.QBIT) { - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(LanthItemList.maskMap.get(MaskList.NCPU)), - Materials.IndiumGalliumPhosphide.getDust(1)) - .fluidInputs(Materials.Radon.getGas(50L)) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.QBIT))) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(mask.getEngraverEUt()) - .requiresCleanRoom() - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(LanthItemList.maskMap.get(MaskList.NCPU)), ItemList.QuantumEye.get(2)) - .fluidInputs(Materials.GalliumArsenide.getMolten(288L)) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.QBIT))) - .duration(45 * GT_RecipeBuilder.SECONDS) - .eut(mask.getEngraverEUt()) - .requiresCleanRoom() - .addTo(UniversalChemical); - - } - - continue; - - } - - if (mask == MaskList.NAND) { - - // Very copy-paste heavy, could possibly offload most of this into one case and just assign an - // otherIngredient variable or something, wouldn't save much space though. Plus: lazy - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(LanthItemList.maskMap.get(maskIngredient)), - GT_Utility.copyAmount(0, GT_OreDictUnificator.get(OrePrefixes.lens, Materials.EnderPearl, 1))) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(mask))) - .requiresCleanRoom() - .duration(120 * SECONDS) - .eut(mask.getEngraverEUt()) - .addTo(WaferEngravingRecipes); - - } else if (mask == MaskList.NOR) { - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(LanthItemList.maskMap.get(maskIngredient)), - GT_Utility.copyAmount(0, GT_OreDictUnificator.get(OrePrefixes.lens, Materials.EnderEye, 1))) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(mask))) - .requiresCleanRoom() - .duration(120 * SECONDS) - .eut(mask.getEngraverEUt()) - .addTo(WaferEngravingRecipes); - - } - - else { - - for (ItemStack lens : OreDictionary.getOres("craftingLens" + lensColour.mName.replace(" ", ""))) { - - if (lens == null) continue; - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(LanthItemList.maskMap.get(maskIngredient)), - GT_Utility.copyAmount(0, lens)) - .itemOutputs(new ItemStack(LanthItemList.maskMap.get(mask))) - .requiresCleanRoom() - .duration(120 * SECONDS) - .eut(mask.getEngraverEUt()) - .addTo(WaferEngravingRecipes); - - } - } - } - - } - - public static void loadGeneral() { - - /* ZIRCONIUM */ - // ZrCl4 - // ZrO2 + 4HCl = ZrCl4 + 2H2O - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1), WerkstoffMaterialPool.Zirconia.get(OrePrefixes.dust, 3)) - .itemOutputs(WerkstoffMaterialPool.ZirconiumTetrachloride.get(OrePrefixes.dust, 5)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(4000)) - .fluidOutputs(Materials.Water.getFluid(2000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // ZrCl4-H2O - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(1), - WerkstoffMaterialPool.ZirconiumTetrachloride.get(OrePrefixes.dust, 5)) - .fluidInputs(Materials.Water.getFluid(1000)) - .fluidOutputs(WerkstoffMaterialPool.ZirconiumTetrachlorideSolution.getFluidOrGas(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Zr - // ZrCl4·H2O + 2Mg = Zr + 2MgCl2 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(2), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2)) - .itemOutputs( - WerkstoffMaterialPool.Zirconium.get(OrePrefixes.ingotHot, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesiumchloride, 6)) - .fluidInputs(WerkstoffMaterialPool.ZirconiumTetrachlorideSolution.getFluidOrGas(1000)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_EV) - .metadata(COIL_HEAT, 4500) - .addTo(blastFurnaceRecipes); - - /* HAFNIUM */ - // HfCl4 - // HfO2 + 4HCl = HfCl4 + 2H2O - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1), WerkstoffMaterialPool.Hafnia.get(OrePrefixes.dust, 3)) - .itemOutputs(WerkstoffMaterialPool.HafniumTetrachloride.get(OrePrefixes.dust, 5)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(4000)) - .fluidOutputs(Materials.Water.getFluid(2000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // HfCl4-H2O - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(1), - WerkstoffMaterialPool.HafniumTetrachloride.get(OrePrefixes.dust, 5)) - .fluidInputs(Materials.Water.getFluid(1000)) - .fluidOutputs(WerkstoffMaterialPool.HafniumTetrachlorideSolution.getFluidOrGas(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // LP-Hf - // HfCl4 + 2Mg = ??Hf?? + 2MgCl2 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(2), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2)) - .itemOutputs( - WerkstoffMaterialPool.LowPurityHafnium.get(OrePrefixes.dust, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesiumchloride, 6)) - .fluidInputs(WerkstoffMaterialPool.HafniumTetrachlorideSolution.getFluidOrGas(1000)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_EV) - .metadata(COIL_HEAT, 2700) - .addTo(blastFurnaceRecipes); - - // HfI4 - // ??Hf?? + 4I = HfI4 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(1), - WerkstoffMaterialPool.LowPurityHafnium.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.HafniumIodide.get(OrePrefixes.dust, 5)) - .fluidInputs(WerkstoffMaterialPool.Iodine.getFluidOrGas(4000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.LowPurityHafnium.get(OrePrefixes.dust, 1), - WerkstoffMaterialPool.Iodine.get(OrePrefixes.dust, 4)) - .itemOutputs(WerkstoffMaterialPool.HafniumIodide.get(OrePrefixes.dust, 5)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Hf - // HfI4 = Hf + 4I - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(12), - WerkstoffMaterialPool.HafniumIodide.get(OrePrefixes.dust, 5)) - .itemOutputs( - WerkstoffMaterialPool.Hafnium.get(OrePrefixes.ingotHot, 1), - WerkstoffMaterialPool.HafniumRunoff.get(OrePrefixes.dustTiny, 1)) - .fluidOutputs(WerkstoffMaterialPool.Iodine.getFluidOrGas(4000)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(COIL_HEAT, 3400) - .addTo(blastFurnaceRecipes); - - // Hf * 9 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(13), - WerkstoffMaterialPool.HafniumIodide.get(OrePrefixes.dust, 45)) - .itemOutputs( - WerkstoffMaterialPool.Hafnium.get(OrePrefixes.ingotHot, 9), - WerkstoffMaterialPool.HafniumRunoff.get(OrePrefixes.dust, 1)) - .fluidOutputs(WerkstoffMaterialPool.Iodine.getFluidOrGas(36000)) - .duration(4 * MINUTES + 30 * TICKS) - .eut(TierEU.RECIPE_HV) - .metadata(COIL_HEAT, 3400) - .addTo(blastFurnaceRecipes); - - // Zirconia-Hafnia - // ??HfZr?? = HfO2 + ZrO2 - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.HafniaZirconiaBlend.get(OrePrefixes.dust, 1)) - .itemOutputs( - WerkstoffMaterialPool.Hafnia.get(OrePrefixes.dust, 3), - WerkstoffMaterialPool.Zirconia.get(OrePrefixes.dust, 3)) - .eut(TierEU.RECIPE_EV) - .duration(30 * SECONDS) - .addTo(centrifugeRecipes); - - // Ammonium Nitrate - // HNO3 + NH3 = NH4NO3 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(12), Materials.NitricAcid.getCells(1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(Materials.Ammonia.getGas(1000)) - .fluidOutputs(WerkstoffMaterialPool.AmmoniumNitrate.getFluidOrGas(1000)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(400) - .addTo(chemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(12)) - .fluidInputs(Materials.NitricAcid.getFluid(1000), Materials.Ammonia.getGas(1000)) - .fluidOutputs(WerkstoffMaterialPool.AmmoniumNitrate.getFluidOrGas(1000)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(400) - .addTo(multiblockChemicalReactorRecipes); - - // IODINE-START - // SeaweedAsh - GT_ModHandler.addSmeltingRecipe( - GT_ModHandler.getModItem(PamsHarvestCraft.ID, "seaweedItem", 1), - WerkstoffMaterialPool.SeaweedAsh.get(OrePrefixes.dustSmall, 1)); - - // SeaweedConcentrate - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.SeaweedAsh.get(OrePrefixes.dust, 2)) - .itemOutputs(Materials.Calcite.getDust(1)) - .fluidInputs(Materials.DilutedSulfuricAcid.getFluid(1200)) - .fluidOutputs(WerkstoffMaterialPool.SeaweedConcentrate.getFluidOrGas(1200)) - .duration(30 * SECONDS) - .eut(240) - .addTo(mixerRecipes); - // SeaweedConcentrate * 4 - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.SeaweedAsh.get(OrePrefixes.dust, 4)) - .itemOutputs(Materials.Calcite.getDust(2)) - .fluidInputs(Materials.DilutedSulfuricAcid.getFluid(2400)) - .fluidOutputs(WerkstoffMaterialPool.SeaweedConcentrate.getFluidOrGas(2400)) - .duration(60 * SECONDS) - .eut(240) - .addTo(mixerRecipes); - - // Iodine - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Benzene.getCells(1)) - .fluidInputs(WerkstoffMaterialPool.SeaweedConcentrate.getFluidOrGas(2000)) - .fluidOutputs(WerkstoffMaterialPool.SeaweedByproducts.getFluidOrGas(200)) - .eut(TierEU.RECIPE_HV) - .duration(38 * SECONDS) - .addTo(centrifugeRecipes); - - // IODINE-END - - // 2MnO2 + 2KOH + KClO3 = 2KMnO4 + H2O + KCl - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Pyrolusite.getDust(6), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PotassiumHydroxideDust", 6), - WerkstoffMaterialPool.PotassiumChlorate.get(OrePrefixes.dust, 5)) - .itemOutputs( - WerkstoffMaterialPool.PotassiumPermanganate.get(OrePrefixes.dust, 12), - Materials.RockSalt.getDust(2)) - .fluidOutputs(Materials.Water.getFluid(1000)) - .duration(7 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_HV) - .metadata(COIL_HEAT, 1200) - .addTo(blastFurnaceRecipes); - - // Mn + 2O = MnO2 - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Manganese.getDust(1), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(Materials.Pyrolusite.getDust(3)) - .fluidInputs(Materials.Oxygen.getGas(2000)) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // 6KOH + 6Cl = KClO3 + 5KCl + 3H2O - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PotassiumHydroxideDust", 18), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs( - Materials.RockSalt.getDust(10), - WerkstoffMaterialPool.PotassiumChlorate.get(OrePrefixes.dust, 5)) - .fluidInputs(Materials.Chlorine.getGas(6000)) - .fluidOutputs(Materials.Water.getFluid(3000)) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Sodium Fluorosilicate - // 2NaCl + H2SiF6 = 2HCl + Na2SiF6 - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2), Materials.Salt.getDust(4)) - .itemOutputs(Materials.HydrochloricAcid.getCells(2)) - .fluidInputs(WerkstoffLoader.HexafluorosilicicAcid.getFluidOrGas(1000)) - .fluidOutputs(WerkstoffMaterialPool.SodiumFluorosilicate.getFluidOrGas(1000)) - .duration(30 * SECONDS) - .eut(450) - .addTo(UniversalChemical); - - // La + 6HCl = LaCl3 + 3H - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Lanthanum.getDust(1), GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(3000)) - .itemOutputs(WerkstoffMaterialPool.LanthaniumChloride.get(OrePrefixes.dust, 4)) - .fluidOutputs(Materials.Hydrogen.getGas(3000)) - .duration(10 * SECONDS) - .eut(480) - .addTo(UniversalChemical); - - // Lanthanum Oxide - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Water.getFluid(3000)) - .fluidOutputs(Materials.HydrochloricAcid.getFluid(6000)) - .itemInputs(WerkstoffMaterialPool.LanthaniumChloride.get(OrePrefixes.dust, 4)) - .itemOutputs(WerkstoffMaterialPool.LanthanumOxide.get(OrePrefixes.dust, 1)) - .duration(10 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - // Boron Trioxide - GT_Values.RA.stdBuilder() - .fluidInputs(FluidRegistry.getFluidStack("boricacid", 2000)) - .fluidOutputs(new FluidStack(FluidRegistry.WATER, 3000)) - .itemOutputs(WerkstoffMaterialPool.BoronTrioxide.get(OrePrefixes.dust, 1)) - .duration(15 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(UniversalChemical); - - // Boron Trichloride - GT_Values.RA.stdBuilder() - .fluidInputs(BotWerkstoffMaterialPool.Phosgene.getFluidOrGas(3000)) - .fluidOutputs(WerkstoffMaterialPool.BoronTrichloride.getFluidOrGas(2000)) - .itemInputs(WerkstoffMaterialPool.BoronTrioxide.get(OrePrefixes.dust, 1), Materials.Empty.getCells(3)) - .itemOutputs(Materials.CarbonMonoxide.getCells(3)) - .duration(10 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - // Lanthanum Hexaboride - GT_Values.RA.stdBuilder() - .fluidInputs(WerkstoffMaterialPool.BoronTrichloride.getFluidOrGas(8000)) - .fluidOutputs(FluidRegistry.getFluidStack("boricacid", 1000)) - .itemInputs(WerkstoffMaterialPool.LanthanumOxide.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.LanthanumHexaboride.get(OrePrefixes.gemFlawless)) - .duration(60 * GT_RecipeBuilder.SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(autoclaveRecipes); - } - - public static void loadLanthanideRecipes() { - // Methanol - // CH4O + CO + 3O =V2O5= H2C2O4 + H2O - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.vanadiumPentoxide.get(OrePrefixes.dustTiny, 1)) - .fluidInputs( - Materials.Methanol.getFluid(1000), - Materials.CarbonMonoxide.getGas(1000), - Materials.Oxygen.getGas(3000)) - .fluidOutputs(MyMaterial.oxalate.getFluidOrGas(1000), Materials.Water.getFluid(1000)) - .duration(22 * SECONDS + 10 * TICKS) - .eut(240) - .addTo(multiblockChemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(9), MyMaterial.vanadiumPentoxide.get(OrePrefixes.dust, 1)) - .fluidInputs( - Materials.Methanol.getFluid(9000), - Materials.CarbonMonoxide.getGas(9000), - Materials.Oxygen.getGas(27000)) - .fluidOutputs(MyMaterial.oxalate.getFluidOrGas(9000), Materials.Water.getFluid(9000)) - .duration(3 * MINUTES + 22 * SECONDS + 10 * TICKS) - .eut(240) - .addTo(multiblockChemicalReactorRecipes); - - // Ethanol - // C2H6O + 5O =V2O5= H2C2O4 + 2H2O - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.vanadiumPentoxide.get(OrePrefixes.dustTiny, 1)) - .itemOutputs() - .fluidInputs(Materials.Ethanol.getFluid(1000), Materials.Oxygen.getGas(5000)) - .fluidOutputs(MyMaterial.oxalate.getFluidOrGas(1000), Materials.Water.getFluid(2000)) - .duration(22 * SECONDS + 10 * TICKS) - .eut(240) - .addTo(multiblockChemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(9), MyMaterial.vanadiumPentoxide.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.Ethanol.getFluid(9000), Materials.Oxygen.getGas(45000)) - .fluidOutputs(MyMaterial.oxalate.getFluidOrGas(9000), Materials.Water.getFluid(18000)) - .duration(3 * MINUTES + 22 * SECONDS + 10 * TICKS) - .eut(240) - .addTo(multiblockChemicalReactorRecipes); - - // Cerium Oxalate - // 2CeCl3 + 3H2C2O4 = 6HCl + Ce2(C2O4)3 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(1), - WerkstoffMaterialPool.CeriumChloride.get(OrePrefixes.dust, 8)) - .itemOutputs(WerkstoffMaterialPool.CeriumOxalate.get(OrePrefixes.dust, 5)) - .fluidInputs(MyMaterial.oxalate.getFluidOrGas(3000)) - .fluidOutputs(Materials.HydrochloricAcid.getFluid(6000)) - .duration(15 * SECONDS) - .eut(450) - .addTo(UniversalChemical); - - // Cerium - // Ce2O3 = 2Ce + 3O - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.CeriumIIIOxide.get(OrePrefixes.dust, 5)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cerium, 2)) - .fluidOutputs(Materials.Oxygen.getGas(3000)) - .duration(7 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_MV) - .addTo(electrolyzerRecipes); - - // CHAIN BEGIN - // MONAZITE - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.NitricAcid.getFluid(700)) - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Monazite, 2)) - .fluidOutputs(WerkstoffMaterialPool.MuddyRareEarthMonaziteSolution.getFluidOrGas(400)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .eut(1920) - .duration(400) - .metadata(COIL_HEAT, 800) - .addTo(digesterRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs( - Materials.Water.getFluid(10000), - WerkstoffMaterialPool.MuddyRareEarthMonaziteSolution.getFluidOrGas(1000)) - .itemInputs(GT_Utility.getIntegratedCircuit(1), Materials.Saltpeter.getDust(1)) - .fluidOutputs(WerkstoffMaterialPool.DilutedRareEarthMonaziteMud.getFluidOrGas(11000)) - .itemOutputs( - WerkstoffMaterialPool.HafniaZirconiaBlend.get(OrePrefixes.dustTiny, 4), - WerkstoffLoader.Thorianit.get(OrePrefixes.dust, 1), - Materials.Monazite.getDustTiny(2)) - .eut(TierEU.RECIPE_HV) - .duration(900) - .metadata(DISSOLUTION_TANK_RATIO, 10) - .noOptimize() - .addTo(dissolutionTankRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs( - Materials.Water.getFluid(90000), - WerkstoffMaterialPool.MuddyRareEarthMonaziteSolution.getFluidOrGas(9000)) - .itemInputs(GT_Utility.getIntegratedCircuit(9), Materials.Saltpeter.getDust(9)) - .fluidOutputs(WerkstoffMaterialPool.DilutedRareEarthMonaziteMud.getFluidOrGas(99000)) - .itemOutputs( - WerkstoffMaterialPool.HafniaZirconiaBlend.get(OrePrefixes.dust, 4), - WerkstoffLoader.Thorianit.get(OrePrefixes.dust, 9), - Materials.Monazite.getDust(2)) - .eut(TierEU.RECIPE_HV) - .duration(8100) - .metadata(DISSOLUTION_TANK_RATIO, 10) - .noOptimize() - .addTo(dissolutionTankRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(WerkstoffMaterialPool.DilutedRareEarthMonaziteMud.getFluidOrGas(1000)) - .itemOutputs( - WerkstoffMaterialPool.MonaziteSulfate.get(OrePrefixes.dust, 1), - Materials.SiliconDioxide.getDust(1), - Materials.Rutile.getDust(1), - WerkstoffLoader.RedZircon.get(OrePrefixes.dust, 1), - Materials.Ilmenite.getDust(1)) - .outputChances(90_00, 75_00, 20_00, 5_00, 20_00) - .duration(20 * SECONDS) - .eut(240) - .noOptimize() - .addTo(sifterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.MonaziteSulfate.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.Water.getFluid(6000)) - .fluidOutputs(WerkstoffMaterialPool.DilutedMonaziteSulfate.getFluidOrGas(7000)) - .duration(24 * SECONDS) - .eut(400) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(13)) - .itemOutputs(WerkstoffMaterialPool.AcidicMonazitePowder.get(OrePrefixes.dustTiny, 3)) - .fluidInputs( - WerkstoffMaterialPool.DilutedMonaziteSulfate.getFluidOrGas(1000), - WerkstoffMaterialPool.AmmoniumNitrate.getFluidOrGas(200)) - .duration(24 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(multiblockChemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(14)) - .itemOutputs(WerkstoffMaterialPool.AcidicMonazitePowder.get(OrePrefixes.dust, 3)) - .fluidInputs( - WerkstoffMaterialPool.DilutedMonaziteSulfate.getFluidOrGas(9000), - WerkstoffMaterialPool.AmmoniumNitrate.getFluidOrGas(1800)) - .duration(3 * MINUTES + 36 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(multiblockChemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.AcidicMonazitePowder.get(OrePrefixes.dust, 1)) - .itemOutputs( - WerkstoffMaterialPool.MonaziteRareEarthFiltrate.get(OrePrefixes.dust, 1), - WerkstoffMaterialPool.ThoriumPhosphateCake.get(OrePrefixes.dust, 1)) - .outputChances(9000, 7000) - .duration(30 * SECONDS) - .eut(256) - .addTo(sifterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.ThoriumPhosphateCake.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.ThoriumPhosphateConcentrate.get(OrePrefixes.dust, 1)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, 1500) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.ThoriumPhosphateConcentrate.get(OrePrefixes.dust)) - .itemOutputs(Materials.Thorium.getDust(1), Materials.Phosphate.getDust(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(thermalCentrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.MonaziteRareEarthFiltrate.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.NeutralizedMonaziteRareEarthFiltrate.get(OrePrefixes.dust, 1)) - .fluidInputs(WerkstoffMaterialPool.AmmoniumNitrate.getFluidOrGas(320)) - .duration(6 * SECONDS) - .eut(240) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.NeutralizedMonaziteRareEarthFiltrate.get(OrePrefixes.dust, 1)) - .itemOutputs( - WerkstoffMaterialPool.MonaziteRareEarthHydroxideConcentrate.get(OrePrefixes.dust, 1), - WerkstoffMaterialPool.UraniumFiltrate.get(OrePrefixes.dust, 1), - WerkstoffMaterialPool.UraniumFiltrate.get(OrePrefixes.dust, 1)) - .outputChances(9000, 5000, 4000) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(sifterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.UraniumFiltrate.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.NeutralizedUraniumFiltrate.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.HydrofluoricAcid.getFluid(100)) - .duration(18 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.NeutralizedUraniumFiltrate.get(OrePrefixes.dust, 1)) - .itemOutputs( - Materials.Uranium.getDust(1), - Materials.Uranium.getDust(1), - Materials.Uranium.getDust(1), - Materials.Uranium235.getDust(1), - Materials.Uranium235.getDust(1)) - .outputChances(4500, 4000, 3000, 3000, 2000) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(sifterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.MonaziteRareEarthHydroxideConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.DriedMonaziteRareEarthConcentrate.get(OrePrefixes.dust, 1)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, 1200) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.DriedMonaziteRareEarthConcentrate.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.NitricAcid.getFluid(500)) - .fluidOutputs(WerkstoffMaterialPool.NitratedRareEarthMonaziteConcentrate.getFluidOrGas(1000)) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Water.getCells(1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(WerkstoffMaterialPool.NitratedRareEarthMonaziteConcentrate.getFluidOrGas(1000)) - .fluidOutputs(WerkstoffMaterialPool.NitricLeachedMonaziteMixture.getFluidOrGas(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 3)) - .fluidInputs(WerkstoffMaterialPool.NitratedRareEarthMonaziteConcentrate.getFluidOrGas(1000)) - .fluidOutputs(WerkstoffMaterialPool.NitricLeachedMonaziteMixture.getFluidOrGas(2000)) - .duration(11 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(WerkstoffMaterialPool.NitricLeachedMonaziteMixture.getFluidOrGas(1000)) - .itemOutputs(WerkstoffMaterialPool.CeriumDioxide.get(OrePrefixes.dust, 1)) - .outputChances(11_11) - .fluidOutputs(WerkstoffMaterialPool.NitricMonaziteLeachedConcentrate.getFluidOrGas(1000)) - .duration(20 * SECONDS) - .eut(240) - .noOptimize() - .addTo(sifterRecipes); - - // BEGIN Cerium - // Cerium-rich mixture + 3HCl = CeCl3 + Monazite (to allow cerium processing without bastnazite/monazite) - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 15)) - .itemOutputs(WerkstoffMaterialPool.CeriumChloride.get(OrePrefixes.dust, 1), Materials.Monazite.getDust(1)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(750)) - .fluidOutputs(Materials.Water.getFluid(750)) - .duration(25 * SECONDS) - .eut(450) - .addTo(UniversalChemical); - - // CeO2 + 3NH4Cl + H = 3NH3 + CeCl3 + 2H2O - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.CeriumDioxide.get(OrePrefixes.dust, 3), - WerkstoffLoader.AmmoniumChloride.get(OrePrefixes.cell, 3)) - .itemOutputs(WerkstoffMaterialPool.CeriumChloride.get(OrePrefixes.dust, 4), Materials.Ammonia.getCells(3)) - .fluidInputs(Materials.Hydrogen.getGas(1000)) - .fluidOutputs(Materials.Water.getGas(2000)) - .duration(15 * SECONDS) - .eut(450) - .addTo(UniversalChemical); - - // Ce2(C2O4)3 + 3C = Ce2O3 + 9CO - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.CeriumOxalate.get(OrePrefixes.dust, 5), Materials.Carbon.getDust(3)) - .itemOutputs(WerkstoffMaterialPool.CeriumIIIOxide.get(OrePrefixes.dust, 5)) - .fluidOutputs(Materials.CarbonMonoxide.getGas(9000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(COIL_HEAT, 800) - .addTo(blastFurnaceRecipes); - - // END Cerium (NMLC) - - GT_Values.RA.stdBuilder() - .itemOutputs(WerkstoffMaterialPool.CooledMonaziteRareEarthConcentrate.get(OrePrefixes.dust, 1)) - .fluidInputs(WerkstoffMaterialPool.NitricMonaziteLeachedConcentrate.getFluidOrGas(1000)) - .duration(5 * SECONDS) - .eut(240) - .noOptimize() - .addTo(vacuumFreezerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.CooledMonaziteRareEarthConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs( - WerkstoffMaterialPool.MonaziteRarerEarthSediment.get(OrePrefixes.dust, 1), - WerkstoffMaterialPool.EuropiumIIIOxide.get(OrePrefixes.dust, 5)) - .outputChances(9000, 500) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(electroMagneticSeparatorRecipes); - - // 5Eu2O3 + Eu = 4EuO - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.EuropiumIIIOxide.get(OrePrefixes.dust, 5), Materials.Europium.getDust(1)) - .itemOutputs(WerkstoffMaterialPool.EuropiumOxide.get(OrePrefixes.dust, 6)) - .duration(15 * SECONDS) - .eut(8400) - .addTo(UniversalChemical); - - // 4 EuO = 2 Eu + 2O2 - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.EuropiumOxide.get(OrePrefixes.dust, 2)) - .itemOutputs(Materials.Europium.getDust(1)) - .fluidOutputs(Materials.Oxygen.getGas(1000L)) - .duration(15 * SECONDS) - .eut(33_000) - .addTo(electrolyzerRecipes); - - // EuS = Eu + S - // TODO old recipe. for compat only. remove material and recipe half a year later, i.e. after September 2023. - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.EuropiumSulfide.get(OrePrefixes.dust, 2)) - .itemOutputs(Materials.Europium.getDust(1), Materials.Sulfur.getDust(1)) - .duration(30 * SECONDS) - .eut(33_000) - .addTo(electrolyzerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.MonaziteRarerEarthSediment.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.MonaziteHeterogenousHalogenicRareEarthMixture.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.Chlorine.getGas(1000)) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(COIL_HEAT, 1200) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Salt.getDust(1), - WerkstoffMaterialPool.MonaziteHeterogenousHalogenicRareEarthMixture.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.SaturatedMonaziteRareEarthMixture.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.Acetone.getFluid(1000)) - .duration(10 * SECONDS) - .eut(240) - .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.MonaziteHeterogenousHalogenicRareEarthMixture.get(OrePrefixes.dust, 1), - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 2)) - .itemOutputs(WerkstoffMaterialPool.SaturatedMonaziteRareEarthMixture.get(OrePrefixes.dust, 3)) - .fluidInputs(Materials.Acetone.getFluid(1000)) - .duration(20 * SECONDS) - .eut(240) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(4), - WerkstoffMaterialPool.SaturatedMonaziteRareEarthMixture.get(OrePrefixes.dust, 8)) - .itemOutputs(WerkstoffMaterialPool.SamaricResidue.get(OrePrefixes.dust, 6)) - .fluidOutputs(Materials.Chloromethane.getGas(800)) - .eut(TierEU.RECIPE_EV) - .duration(5 * MINUTES + 15 * SECONDS) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.SamaricResidue.get(OrePrefixes.dust, 9)) - .itemOutputs(Materials.Samarium.getDust(6), Materials.Gadolinium.getDust(3)) - .outputChances(10000, 10000) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(sifterRecipes); - - // BASTNASITE (god help me) - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.NitricAcid.getFluid(700)) - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Bastnasite, 2)) - .fluidOutputs(WerkstoffMaterialPool.MuddyRareEarthBastnasiteSolution.getFluidOrGas(400)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .eut(TierEU.RECIPE_EV) - .duration(400) - .metadata(COIL_HEAT, 800) - .addTo(digesterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs( - WerkstoffMaterialPool.MuddyRareEarthBastnasiteSolution.getFluidOrGas(1000), - GT_ModHandler.getSteam(1000)) - .fluidOutputs(WerkstoffMaterialPool.SteamCrackedBasnasiteSolution.getFluidOrGas(2000)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(crackingRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - WerkstoffMaterialPool.SteamCrackedBasnasiteSolution.get(OrePrefixes.cell, 1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(WerkstoffMaterialPool.SodiumFluorosilicate.getFluidOrGas(320)) - .fluidOutputs(WerkstoffMaterialPool.ConditionedBastnasiteMud.getFluidOrGas(1320)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs( - Materials.Water.getFluid(10000), - WerkstoffMaterialPool.ConditionedBastnasiteMud.getFluidOrGas(1000)) - .itemInputs(Materials.Saltpeter.getDust(1)) - .fluidOutputs(WerkstoffMaterialPool.DiltedRareEarthBastnasiteMud.getFluidOrGas(11000)) - .itemOutputs(Gangue.get(OrePrefixes.dust, 1)) - .eut(TierEU.RECIPE_EV) - .duration(1000) - .metadata(DISSOLUTION_TANK_RATIO, 10) - .noOptimize() - .addTo(dissolutionTankRecipes); - - GT_Values.RA.stdBuilder() - .itemOutputs( - Materials.SiliconDioxide.getDust(1), - Materials.Rutile.getDust(1), - WerkstoffLoader.RedZircon.get(OrePrefixes.dust, 1), - Materials.Ilmenite.getDust(1)) - .outputChances(90_00, 75_00, 10_00, 5_00) - .fluidInputs(WerkstoffMaterialPool.DiltedRareEarthBastnasiteMud.getFluidOrGas(1000)) - .fluidOutputs(WerkstoffMaterialPool.FilteredBastnasiteMud.getFluidOrGas(400)) - .eut(240) - .duration(20 * SECONDS) - .noOptimize() - .addTo(sifterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(WerkstoffMaterialPool.BastnasiteRareEarthOxidePowder.get(OrePrefixes.dust, 1)) - .fluidInputs(WerkstoffMaterialPool.FilteredBastnasiteMud.getFluidOrGas(1000)) - .duration(25 * SECONDS) - .eut(600) - .metadata(COIL_HEAT, 1400) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.BastnasiteRareEarthOxidePowder.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.LeachedBastnasiteRareEarthOxides.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(500)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(1), - WerkstoffMaterialPool.LeachedBastnasiteRareEarthOxides.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.RoastedRareEarthOxides.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.Oxygen.getGas(1000)) - .fluidOutputs(Materials.Fluorine.getGas(13)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, 1200) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(7), - WerkstoffMaterialPool.RoastedRareEarthOxides.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.WetRareEarthOxides.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.Water.getFluid(200)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.WetRareEarthOxides.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.CeriumOxidisedRareEarthOxides.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.Fluorine.getGas(4000)) - .fluidOutputs(Materials.HydrofluoricAcid.getFluid(4000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.CeriumOxidisedRareEarthOxides.get(OrePrefixes.dust, 1)) - .itemOutputs( - WerkstoffMaterialPool.BastnasiteRarerEarthOxides.get(OrePrefixes.dust, 1), - WerkstoffMaterialPool.CeriumDioxide.get(OrePrefixes.dust, 1)) - .outputChances(100_00, 90_00) - .eut(TierEU.RECIPE_HV) - .duration(30 * SECONDS) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.BastnasiteRarerEarthOxides.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.NitricAcid.getFluid(400)) - .fluidOutputs(WerkstoffMaterialPool.NitratedBastnasiteRarerEarthOxides.getFluidOrGas(1000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.NitratedBastnasiteRarerEarthOxides.get(OrePrefixes.cell, 1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(Materials.Acetone.getFluid(1000)) - .fluidOutputs(WerkstoffMaterialPool.SaturatedBastnasiteRarerEarthOxides.getFluidOrGas(1000)) - .duration(35 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemOutputs( - WerkstoffMaterialPool.NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 1), - WerkstoffMaterialPool.SamaricRareEarthConcentrate.get(OrePrefixes.dust, 1)) - .outputChances(80_00, 50_00) - .fluidInputs(WerkstoffMaterialPool.SaturatedBastnasiteRarerEarthOxides.getFluidOrGas(1000)) - .fluidOutputs(WerkstoffMaterialPool.DilutedAcetone.getFluidOrGas(750)) - .eut(TierEU.RECIPE_HV) - .duration(45 * SECONDS) - .addTo(centrifugeRecipes); - - // Nd RE - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 2)) - .itemOutputs( - WerkstoffMaterialPool.LanthaniumChloride.get(OrePrefixes.dust, 1), - WerkstoffMaterialPool.NeodymiumOxide.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(2000)) - .duration(45 * SECONDS) - .eut(800) - .addTo(UniversalChemical); - - // Sm RE - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.SamaricRareEarthConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.FluorinatedSamaricConcentrate.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.HydrofluoricAcid.getFluid(2000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.SamaricRareEarthConcentrate.get(OrePrefixes.dust, 1), - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.FluorinatedSamaricConcentrate.get(OrePrefixes.dust, 2)) - .fluidInputs(Materials.HydrofluoricAcid.getFluid(2000)) - .duration(17 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.FluorinatedSamaricConcentrate.get(OrePrefixes.dust, 8), - Materials.Calcium.getDust(4)) - .itemOutputs( - Materials.Holmium.getDust(1), - WerkstoffMaterialPool.SamariumTerbiumMixture.get(OrePrefixes.dust, 4)) - .fluidOutputs(WerkstoffMaterialPool.CalciumFluoride.getFluidOrGas(12000)) - .duration(1 * MINUTES + 20 * TICKS) - .eut(TierEU.RECIPE_EV) - .metadata(COIL_HEAT, 1200) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.SamariumTerbiumMixture.get(OrePrefixes.dust, 1), - BotWerkstoffMaterialPool.AmmoniumNitrate.get(OrePrefixes.dust, 9)) - .itemOutputs(WerkstoffMaterialPool.NitratedSamariumTerbiumMixture.get(OrePrefixes.dust, 1)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.NitratedSamariumTerbiumMixture.get(OrePrefixes.dust, 4), - Materials.Copper.getDust(1)) - .itemOutputs( - WerkstoffMaterialPool.TerbiumNitrate.get(OrePrefixes.dust, 2), - WerkstoffMaterialPool.SamaricResidue.get(OrePrefixes.dust, 2) // Potentially make only Samarium - ) - .duration(2 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 2), - Materials.Calcium.getDust(3)) - .itemOutputs( - WerkstoffMaterialPool.DephosphatedSamariumConcentrate.get(OrePrefixes.dust, 1), - Materials.TricalciumPhosphate.getDust(5)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.DephosphatedSamariumConcentrate.get(OrePrefixes.dust, 6)) - .itemOutputs(Materials.Samarium.getDust(1), WerkstoffLoader.Thorianit.get(OrePrefixes.dust, 2)) - .outputChances(90_00, 80_00) - .eut(TierEU.RECIPE_EV) - .duration(10 * SECONDS) - .addTo(centrifugeRecipes); - - // TODO UV Tier Ion Extracting Method - - // Lanthanum Part - // Digester to produce Lanthanum Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Lanthanum, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(LanthanumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(LanthanumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(LanthanumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - LanthanumExtractingNanoResin.getFluidOrGas(1000), - LanthanumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledLanthanumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Praseodymium Part - // Digester to produce Praseodymium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Praseodymium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(PraseodymiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(PraseodymiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(PraseodymiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - PraseodymiumExtractingNanoResin.getFluidOrGas(1000), - PraseodymiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledPraseodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Cerium Part - // Digester to produce Cerium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Cerium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(CeriumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(CeriumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(CeriumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs(CeriumExtractingNanoResin.getFluidOrGas(1000), CeriumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledCeriumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Neodymium Part - // Digester to produce Neodymium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Neodymium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(NeodymiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(NeodymiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(NeodymiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - NeodymiumExtractingNanoResin.getFluidOrGas(1000), - NeodymiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Neodymium Part - // Digester to produce Neodymium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Neodymium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(NeodymiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(NeodymiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(NeodymiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - NeodymiumExtractingNanoResin.getFluidOrGas(1000), - NeodymiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Promethium Part - // Digester to produce Neodymium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Promethium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(PromethiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(PromethiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(PromethiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - PromethiumExtractingNanoResin.getFluidOrGas(1000), - PromethiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledPromethiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Promethium Part - // Digester to produce Promethium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Promethium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(PromethiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(PromethiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(PromethiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - PromethiumExtractingNanoResin.getFluidOrGas(1000), - PromethiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledPromethiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Samarium Part - // Digester to produce Samarium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Samarium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(SamariumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(SamariumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(SamariumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - SamariumExtractingNanoResin.getFluidOrGas(1000), - SamariumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledSamariumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Europium Part - // Digester to produce Europium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Europium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(EuropiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(EuropiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(EuropiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - EuropiumExtractingNanoResin.getFluidOrGas(1000), - EuropiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledEuropiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Gadolinium Part - // Digester to produce Gadolinium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Gadolinium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(GadoliniumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GadoliniumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(GadoliniumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - GadoliniumExtractingNanoResin.getFluidOrGas(1000), - GadoliniumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledGadoliniumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Terbium Part - // Digester to produce Terbium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Terbium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(TerbiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(TerbiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(TerbiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs(TerbiumExtractingNanoResin.getFluidOrGas(1000), TerbiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledTerbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Dysprosium Part - // Digester to produce Dysprosium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Dysprosium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(DysprosiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(DysprosiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(DysprosiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - DysprosiumExtractingNanoResin.getFluidOrGas(1000), - DysprosiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledDysprosiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Holmium Part - // Digester to produce Holmium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Holmium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(HolmiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(HolmiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(HolmiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs(HolmiumExtractingNanoResin.getFluidOrGas(1000), HolmiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledHolmiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Erbium Part - // Digester to produce Erbium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Erbium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(ErbiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ErbiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(ErbiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs(ErbiumExtractingNanoResin.getFluidOrGas(1000), ErbiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledErbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Thulium Part - // Digester to produce Thulium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Thulium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(ThuliumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ThuliumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(ThuliumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs(ThuliumExtractingNanoResin.getFluidOrGas(1000), ThuliumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledThuliumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Ytterbium Part - // Digester to produce Ytterbium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Ytterbium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(YtterbiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(YtterbiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(YtterbiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - YtterbiumExtractingNanoResin.getFluidOrGas(1000), - YtterbiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledYtterbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Lutetium Part - // Digester to produce Lutetium Chloride Concentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Lutetium, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(3)) - .fluidInputs(Materials.Chlorine.getGas(36000)) - .fluidOutputs(LutetiumChlorideConcentrate.getFluidOrGas(3000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(LutetiumOreConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(Materials.SiliconDioxide.getDust(1)) - .fluidInputs(Materials.Chlorine.getGas(12000)) - .fluidOutputs(LutetiumChlorideConcentrate.getFluidOrGas(1000)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_ZPM) - .duration(2 * SECONDS) - .addTo(digesterRecipes); - // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal - GT_Values.RA.stdBuilder() - .fluidInputs( - LutetiumExtractingNanoResin.getFluidOrGas(1000), - LutetiumChlorideConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledLutetiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Ion Extracting Process to produce Rare Earth Element (example Samarium) by Nano Resin - // Get Extracting Nano Resin - - // Lanthanum - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Lanthanum.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(LanthanumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Praseodymium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Praseodymium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(PraseodymiumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Cerium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Cerium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(CeriumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Neodymium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Neodymium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(NeodymiumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Promethium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Promethium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(PromethiumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Sm - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Samarium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(SamariumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Europium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Europium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(EuropiumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Gadolinium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Gadolinium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(GadoliniumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Terbium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Terbium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(TerbiumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Dysprosium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Dysprosium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(DysprosiumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Holmium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Holmium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(HolmiumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Erbium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Erbium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(ErbiumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Thulium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Thulium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(ThuliumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Ytterbium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Ytterbium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(YtterbiumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // Lutetium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), - Materials.Lutetium.getDust(1), - Materials.Carbon.getNanite(1)) - .fluidInputs(MyMaterial.P507.getFluidOrGas(4000)) - .fluidOutputs(LutetiumExtractingNanoResin.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(10 * SECONDS) - .addTo(laserEngraverRecipes); - - // TODO Electrolyzer recycle Nano Resin and produce molten rare earth metal, - - // La - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledLanthanumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - LanthanumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Lanthanum, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Pr - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledPraseodymiumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - PraseodymiumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Praseodymium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Ce - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledCeriumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - CeriumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Cerium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Nd - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - NeodymiumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Neodymium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Po - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledPromethiumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - PromethiumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Promethium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Sm - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledSamariumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - SamariumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Samarium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Eu - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledEuropiumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - EuropiumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Europium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Ga - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledGadoliniumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - GadoliniumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Gadolinium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Tb - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledTerbiumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - TerbiumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Terbium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Dy - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledDysprosiumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - DysprosiumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Dysprosium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Ho - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledHolmiumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - HolmiumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Holmium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Er - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledErbiumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - ErbiumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Erbium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Tm - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledThuliumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - ThuliumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Thulium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Yb - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledYtterbiumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - YtterbiumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Ytterbium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // Lu - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(2)) - .fluidInputs(FilledLutetiumExtractingNanoResin.getFluidOrGas(1000)) - .itemOutputs( - LutetiumExtractingNanoResin.get(OrePrefixes.cell, 1), - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Lutetium, 1)) - .fluidOutputs(Materials.Chlorine.getGas(3000)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(electrolyzerRecipes); - - // TODO ChlorinitedRareEarthConcentrate process with every 15 Rare Earth Extracting Nano Resin - - // La - GT_Values.RA.stdBuilder() - .fluidInputs( - LanthanumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledLanthanumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - LanthanumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledLanthanumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - LanthanumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledLanthanumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Pr - GT_Values.RA.stdBuilder() - .fluidInputs( - PraseodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledPraseodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - PraseodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledPraseodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - PraseodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledPraseodymiumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Ce - GT_Values.RA.stdBuilder() - .fluidInputs( - CeriumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledCeriumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - CeriumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledCeriumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - CeriumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledCeriumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Nd - GT_Values.RA.stdBuilder() - .fluidInputs( - NeodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - NeodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - NeodymiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Pm - GT_Values.RA.stdBuilder() - .fluidInputs( - PromethiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledPromethiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - PromethiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledPromethiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - PromethiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledPromethiumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Sm - GT_Values.RA.stdBuilder() - .fluidInputs( - SamariumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledSamariumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - SamariumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledSamariumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - SamariumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledSamariumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Eu - GT_Values.RA.stdBuilder() - .fluidInputs( - EuropiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledEuropiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - EuropiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledEuropiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - EuropiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledEuropiumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Ga - GT_Values.RA.stdBuilder() - .fluidInputs( - GadoliniumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledGadoliniumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - GadoliniumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledGadoliniumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - GadoliniumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledGadoliniumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Tb - GT_Values.RA.stdBuilder() - .fluidInputs( - TerbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledTerbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - TerbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledTerbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - TerbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledTerbiumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Dy - GT_Values.RA.stdBuilder() - .fluidInputs( - DysprosiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledDysprosiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - DysprosiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledDysprosiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - DysprosiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledDysprosiumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Ho - GT_Values.RA.stdBuilder() - .fluidInputs( - HolmiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledHolmiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - HolmiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledHolmiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - HolmiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledHolmiumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Er - GT_Values.RA.stdBuilder() - .fluidInputs( - ErbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledErbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - ErbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledErbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - ErbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledErbiumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Tm - GT_Values.RA.stdBuilder() - .fluidInputs( - ThuliumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledThuliumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - ThuliumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledThuliumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - ThuliumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledThuliumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Yb - GT_Values.RA.stdBuilder() - .fluidInputs( - YtterbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledYtterbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - YtterbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledYtterbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - YtterbiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledYtterbiumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // Lu - GT_Values.RA.stdBuilder() - .fluidInputs( - LutetiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) - .fluidOutputs( - FilledLutetiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - LutetiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledLutetiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs( - LutetiumExtractingNanoResin.getFluidOrGas(1000), - ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) - .fluidOutputs( - FilledLutetiumExtractingNanoResin.getFluidOrGas(1000), - MyMaterial.wasteLiquid.getFluidOrGas(1000)) - .eut(TierEU.RECIPE_UV) - .duration(1 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // TODO Samarium Ore Concentrate Dust Processing Line Start - - // 16 SmOreDust + 200L NitricAcid =EV@10s= 800L MuddySamariumRareEarthSolution + 1 ?ThP?ConcentrateDust - GT_Values.RA.stdBuilder() - .itemInputs(SamariumOreConcentrate.get(OrePrefixes.dust, 16)) - .fluidInputs(Materials.NitricAcid.getFluid(200)) - .itemOutputs(ThoriumPhosphateConcentrate.get(OrePrefixes.dust, 1)) - .fluidOutputs(MuddySamariumRareEarthSolution.getFluidOrGas(800)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_EV) - .duration(10 * SECONDS) - .addTo(digesterRecipes); - - // 1 CrushedSamariumOre = 3 SamariumOreConcentrate in process - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Samarium, 8)) - .fluidInputs(Materials.NitricAcid.getFluid(300)) - .itemOutputs(ThoriumPhosphateConcentrate.get(OrePrefixes.dust, 3)) - .fluidOutputs(MuddySamariumRareEarthSolution.getFluidOrGas(1200)) - .metadata(COIL_HEAT, 800) - .eut(TierEU.RECIPE_EV) - .duration(10 * SECONDS) - .addTo(digesterRecipes); - - // 1B MuddySmSolution + 1B NitricAcid =EV@10s= 2B SamariumRareEarthMud + 0.8 CeriumDioxide + 0.6 - // CeriumRichMixture(CeriumOreConcentrate) - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.NitricAcid.getFluid(1000), MuddySamariumRareEarthSolution.getFluidOrGas(1000)) - .itemOutputs(CeriumDioxide.get(OrePrefixes.dust, 1), CeriumOreConcentrate.get(OrePrefixes.dust, 1)) - .fluidOutputs(SamariumRareEarthMud.getFluidOrGas(2000)) - .metadata(DISSOLUTION_TANK_RATIO, 1) - .outputChances(8000, 6000) - .noOptimize() - .eut(TierEU.RECIPE_EV) - .duration(10 * SECONDS) - .addTo(dissolutionTankRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(9)) - .fluidInputs(Materials.NitricAcid.getFluid(9000), MuddySamariumRareEarthSolution.getFluidOrGas(9000)) - .itemOutputs(CeriumDioxide.get(OrePrefixes.dust, 9), CeriumOreConcentrate.get(OrePrefixes.dust, 9)) - .fluidOutputs(SamariumRareEarthMud.getFluidOrGas(18000)) - .metadata(DISSOLUTION_TANK_RATIO, 1) - .outputChances(8000, 6000) - .noOptimize() - .eut(TierEU.RECIPE_IV) - .duration(300) - .addTo(dissolutionTankRecipes); - // Low Efficiency method in LCR - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.NitricAcid.getFluid(1000), MuddySamariumRareEarthSolution.getFluidOrGas(1000)) - .itemOutputs(CeriumDioxide.get(OrePrefixes.dust, 1)) - .fluidOutputs(SamariumRareEarthMud.getFluidOrGas(1000)) - .outputChances(5000) - .eut(TierEU.RECIPE_EV) - .duration(300) - .addTo(multiblockChemicalReactorRecipes); - - // 1B SamariumRareEarthMud + 9B water =EV@30s= 10B DilutedSamariumRareEarthSolution - // + (90% + 60%) NeodymiumREConcentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.Water.getFluid(9000), SamariumRareEarthMud.getFluidOrGas(1000)) - .itemOutputs( - NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 1), - NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 1)) - .fluidOutputs(DilutedSamariumRareEarthSolution.getFluidOrGas(10000)) - .metadata(DISSOLUTION_TANK_RATIO, 9) - .outputChances(9000, 6000) - .noOptimize() - .eut(TierEU.RECIPE_EV) - .duration(600) - .addTo(dissolutionTankRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(9)) - .fluidInputs(Materials.Water.getFluid(81000), SamariumRareEarthMud.getFluidOrGas(9000)) - .itemOutputs( - NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 9), - NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 9)) - .fluidOutputs(DilutedSamariumRareEarthSolution.getFluidOrGas(90000)) - .metadata(DISSOLUTION_TANK_RATIO, 9) - .outputChances(9000, 6000) - .noOptimize() - .eut(TierEU.RECIPE_IV) - .duration(900) - .addTo(dissolutionTankRecipes); - // Low Efficiency method in LCR - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(SamariumRareEarthMud.getFluidOrGas(1000), Materials.Water.getFluid(16000)) - .fluidOutputs(DilutedSamariumRareEarthSolution.getFluidOrGas(8000)) - .eut(TierEU.RECIPE_EV) - .duration(1200) - .addTo(multiblockChemicalReactorRecipes); - - // 2B DilutedSamariumRareEarthSolution + 3B Oxalate - // =EV@10s= - // 5 ImpureSamariumOxalate + 50L MuddySamariumRareEarthSolution + 0.1*2 LepersonniteDust - // LepersonniteDust -> DephosphatedSamariumConcentrate - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(13)) - .fluidInputs(DilutedSamariumRareEarthSolution.getFluidOrGas(2000), MyMaterial.oxalate.getFluidOrGas(3000)) - .itemOutputs( - SamariumOxalate.get(OrePrefixes.dust, 5), - DephosphatedSamariumConcentrate.get(OrePrefixes.dust, 3)) - .fluidOutputs(MuddySamariumRareEarthSolution.getFluidOrGas(50)) - .outputChances(10000, 1000) - .eut(TierEU.RECIPE_EV) - .duration(10 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - // 5 ImpureSamariumOxalate + 6B HCL = 8 ImpureSamariumChloride + 6B CO - GT_Values.RA.stdBuilder() - .itemInputs(SamariumOxalate.get(OrePrefixes.dust, 5)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(6000)) - .itemOutputs(SamariumChloride.get(OrePrefixes.dust, 8)) - .fluidOutputs(Materials.CarbonMonoxide.getGas(6000)) - .eut(960) - .duration(10 * SECONDS) - .addTo(multiblockChemicalReactorRecipes); - - /** - * ImpureSamariumChloride has 2 method to process 1. In IV-LuV, fix with NcCL then use electrolyzer to process - * the mixture, get Samarium dust & Chlorine & Sodium. 2. In ZPM, put molten ImpureSamariumChloride and - * LanthanumDust in Distillation Tower to get molten Samarium and impure Lanthanum Chloride. - */ - - // 2 ImpureSamariumChloride + 1 NaCl =LV@5s= 3 SamariumChlorideSodiumChlorideBlend - GT_Values.RA.stdBuilder() - .itemInputs(SamariumChloride.get(OrePrefixes.dust, 2), Materials.Salt.getDust(1)) - .itemOutputs(SamariumChlorideSodiumChlorideBlend.get(OrePrefixes.dust, 3)) - .eut(TierEU.RECIPE_LV) - .duration(5 * SECONDS) - .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(SamariumChloride.get(OrePrefixes.dust, 2), Materials.Sodium.getDust(1)) - .itemOutputs(SamariumChlorideSodiumChlorideBlend.get(OrePrefixes.dust, 3)) - .eut(TierEU.RECIPE_LV) - .duration(5 * SECONDS) - .addTo(mixerNonCellRecipes); - - // 6 SamariumChlorideSodiumChlorideBlend =IV@1s= 1 SamariumDust + 1 SodiumDust + 2/9 RarestEarthResidue + 4B - // Chlorine - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(1), - SamariumChlorideSodiumChlorideBlend.get(OrePrefixes.dust, 6)) - .itemOutputs( - Materials.Samarium.getDust(1), - Materials.Sodium.getDust(1), - RarestEarthResidue.get(OrePrefixes.dustTiny, 2)) - .fluidOutputs(Materials.Chlorine.getGas(4000)) - .eut(TierEU.RECIPE_IV) - .duration(1 * SECONDS) - .addTo(electrolyzerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(9), - SamariumChlorideSodiumChlorideBlend.get(OrePrefixes.dust, 54)) - .itemOutputs( - Materials.Samarium.getDust(9), - Materials.Sodium.getDust(9), - RarestEarthResidue.get(OrePrefixes.dust, 2)) - .fluidOutputs(Materials.Chlorine.getGas(36000)) - .eut(TierEU.RECIPE_LuV) - .duration(2 * SECONDS) - .addTo(electrolyzerRecipes); - - // ZPM molten distilling method - - // melt ImpureSamariumChloride - GT_Values.RA.stdBuilder() - .itemInputs(SamariumChloride.get(OrePrefixes.dust, 1)) - .fluidOutputs(SamariumChloride.getMolten(144)) - .eut(TierEU.RECIPE_EV) - .duration(24) - .addTo(fluidExtractionRecipes); - - // distill with LanthanumDust 36*144L moltenSmCl3 = 16*144L moltenSm + 27B Cl - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Lanthanum.getDust(9)) - .itemOutputs(ImpureLanthanumChloride.get(OrePrefixes.dust, 36)) - .fluidInputs(SamariumChloride.getMolten(5184)) - .fluidOutputs(Materials.Samarium.getMolten(2304)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * SECONDS) - .noOptimize() - .addTo(distillationTowerRecipes); - - // Centrifuge ImpureLanthanumChlorideDust - GT_Values.RA.stdBuilder() - .itemInputs(ImpureLanthanumChloride.get(OrePrefixes.dust, 36)) - .itemOutputs(LanthaniumChloride.get(OrePrefixes.dust, 36), RarestEarthResidue.get(OrePrefixes.dust, 5)) - .eut(TierEU.RECIPE_EV) - .duration(5 * SECONDS) - .addTo(centrifugeRecipes); - - /** - * DephosphatedSamariumConcentrate has a simple and not shit process. Just burn in furnace, then use - * electolyzer. - */ - GameRegistry.addSmelting( - DephosphatedSamariumConcentrate.get(OrePrefixes.dust, 1), - SamariumOxide.get(OrePrefixes.dustTiny, 2), - 114); - GT_Values.RA.stdBuilder() - .itemInputs(DephosphatedSamariumConcentrate.get(OrePrefixes.dust, 1)) - .itemOutputs(SamariumOxide.get(OrePrefixes.dust, 1)) - .metadata(COIL_HEAT, 1200) - .eut(514) - .duration(2 * SECONDS) - .addTo(blastFurnaceRecipes); - - } - - public static void addRandomChemCrafting() { - - // PTMEG Elastomer - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.Butanediol.get(OrePrefixes.cell, 1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(WerkstoffMaterialPool.TolueneTetramethylDiisocyanate.getFluidOrGas(4000)) - .fluidOutputs(WerkstoffMaterialPool.PTMEGElastomer.getMolten(4000)) - .duration(1 * MINUTES + 15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - // Toluene Tetramethyl Diisocyanate - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.TolueneDiisocyanate.get(OrePrefixes.cell, 3), - Materials.Hydrogen.getCells(2)) - .itemOutputs(Materials.Empty.getCells(5)) - .fluidInputs(WerkstoffMaterialPool.Polytetrahydrofuran.getFluidOrGas(1000)) - .fluidOutputs(WerkstoffMaterialPool.TolueneTetramethylDiisocyanate.getFluidOrGas(2000)) - .duration(1 * MINUTES) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - // PTHF - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.TungstophosphoricAcid.get(OrePrefixes.cell, 1), - Materials.Oxygen.getCells(1)) - .itemOutputs(Materials.Empty.getCells(2)) - .fluidInputs(WerkstoffMaterialPool.Tetrahydrofuran.getFluidOrGas(144)) - .fluidOutputs(WerkstoffMaterialPool.Polytetrahydrofuran.getFluidOrGas(432)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(UniversalChemical); - - // THF - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.AcidicButanediol.get(OrePrefixes.cell, 1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(Materials.Ethanol.getFluid(1000)) - .fluidOutputs(WerkstoffMaterialPool.Tetrahydrofuran.getFluidOrGas(1000)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - // Acidicised Butanediol - GT_Values.RA.stdBuilder() - .itemInputs(Materials.SulfuricAcid.getCells(1)) - .itemOutputs(Materials.Water.getCells(1)) - .fluidInputs(WerkstoffMaterialPool.Butanediol.getFluidOrGas(1000)) - .fluidOutputs(WerkstoffMaterialPool.AcidicButanediol.getFluidOrGas(1000)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(mixerRecipes); - - // Butanediol - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.MoTeOCatalyst.get(OrePrefixes.dustTiny, 1)) - .fluidInputs(Materials.Butane.getGas(1000)) - .fluidOutputs(WerkstoffMaterialPool.Butanediol.getFluidOrGas(1000)) - .duration(45 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(9), - WerkstoffMaterialPool.MoTeOCatalyst.get(OrePrefixes.dust, 1)) - .fluidInputs(Materials.Butane.getGas(9000)) - .fluidOutputs(WerkstoffMaterialPool.Butanediol.getFluidOrGas(9000)) - .duration(6 * MINUTES + 45 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(multiblockChemicalReactorRecipes); - - // Moly-Te-Oxide Catalyst - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.MolybdenumIVOxide.get(OrePrefixes.dust, 1), - WerkstoffMaterialPool.TelluriumIVOxide.get(OrePrefixes.dust, 1)) - .itemOutputs(WerkstoffMaterialPool.MoTeOCatalyst.get(OrePrefixes.dust, 2)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - // Tungstophosphoric Acid - GT_Values.RA.stdBuilder() - .itemInputs(Materials.PhosphoricAcid.getCells(1), Materials.HydrochloricAcid.getCells(24)) - .itemOutputs(Materials.Salt.getDust(24), Materials.Empty.getCells(25)) - .fluidInputs(BotWerkstoffMaterialPool.SodiumTungstate.getFluidOrGas(12000)) - .fluidOutputs(WerkstoffMaterialPool.TungstophosphoricAcid.getFluidOrGas(1000)) - .duration(25 * SECONDS) - .eut(1024) - .addTo(UniversalChemical); - - // Toluene Diisocyanate - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffMaterialPool.Diaminotoluene.get(OrePrefixes.cell, 1), Materials.Empty.getCells(3)) - .itemOutputs() - .fluidInputs(BotWerkstoffMaterialPool.Phosgene.getFluidOrGas(2000)) - .fluidOutputs(WerkstoffMaterialPool.TolueneDiisocyanate.getFluidOrGas(1000)) - .duration(45 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - // Diaminotoluene - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Hydrogen.getCells(4)) - .itemOutputs() - .fluidInputs(WerkstoffMaterialPool.Dinitrotoluene.getFluidOrGas(1000)) - .fluidOutputs(WerkstoffMaterialPool.Diaminotoluene.getFluidOrGas(1000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - // Dinitrotoluene - GT_Values.RA.stdBuilder() - .itemInputs(Materials.NitricAcid.getCells(2)) - .itemOutputs(Materials.Empty.getCells(2)) - .fluidInputs(Materials.Toluene.getFluid(1000)) - .fluidOutputs(WerkstoffMaterialPool.Dinitrotoluene.getFluidOrGas(1000)) - .duration(45 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(UniversalChemical); - - // Digester Control Block - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_IV.get(1L), - ItemList.Super_Tank_EV.get(2L), - ItemList.Electric_Motor_IV.get(4L), - ItemList.Electric_Pump_IV.get(4L), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Desh, 4L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 4L), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(LanthItemList.DIGESTER) - .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1440)) - .duration(30 * SECONDS) - .eut(4096) - .addTo(assemblerRecipes); - // Dissolution Tank - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_EV.get(1L), - ItemList.Super_Tank_HV.get(2L), - ItemList.Electric_Motor_EV.get(4L), - ItemList.Electric_Pump_EV.get(2L), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.VibrantAlloy, 4L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 4L), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(LanthItemList.DISSOLUTION_TANK) - .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(720)) - .duration(20 * SECONDS) - .eut(960) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(WerkstoffMaterialPool.DilutedAcetone.getFluidOrGas(250)) - .fluidOutputs(Materials.Acetone.getFluid(150)) - .duration(6 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(vacuumFreezerRecipes); - - // PTMEG Manipulation - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Ingot.get(0L)) - .itemOutputs(WerkstoffMaterialPool.PTMEGElastomer.get(OrePrefixes.ingot, 1)) - .fluidInputs(WerkstoffMaterialPool.PTMEGElastomer.getMolten(144)) - .duration(2 * SECONDS) - .eut(64) - .addTo(fluidSolidifierRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Plate.get(0L)) - .itemOutputs(WerkstoffMaterialPool.PTMEGElastomer.get(OrePrefixes.plate, 1)) - .fluidInputs(WerkstoffMaterialPool.PTMEGElastomer.getMolten(144)) - .duration(2 * SECONDS) - .eut(64) - .addTo(fluidSolidifierRecipes); - - // TODO Cerium-doped Lutetium Aluminium Garnet (Ce:LuAG) - /** - * 1/9 Ce + 3 Lu + 5 Sapphire = 8 LuAG Blend 1/9 Ce + 3 Lu + 10 Green Sapphire = 8 LuAG Blend 2/9 Ce + 6 Lu + 25 - * Alumina + 9 Oxygen = 12 LuAG Blend - * - * 1 Ce + 60 Lu + 100 Sapphire = 160 LuAG Blend 1 Ce + 60 Lu +200 Green Sapphire = 160 LuAG Blend - * - */ - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(4), - Materials.Cerium.getDustTiny(1), - Materials.Lutetium.getDust(3), - Materials.Sapphire.getDust(5)) - .itemOutputs(CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 8)) - .eut(TierEU.RECIPE_UV) - .duration(5 * SECONDS) - .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(4), - Materials.Cerium.getDustTiny(1), - Materials.Lutetium.getDust(3), - Materials.GreenSapphire.getDust(10)) - .itemOutputs(CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 8)) - .eut(TierEU.RECIPE_UV) - .duration(5 * SECONDS) - .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(4), - Materials.Cerium.getDustTiny(2), - Materials.Lutetium.getDust(6), - Materials.Aluminiumoxide.getDust(25)) - .itemOutputs(CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 12)) - .fluidInputs(Materials.Oxygen.getGas(9000)) - .eut(TierEU.RECIPE_UV) - .duration(400) - .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(5), - Materials.Cerium.getDust(1), - Materials.Lutetium.getDust(60), - Materials.Sapphire.getDust(64), - Materials.Sapphire.getDust(36)) - .itemOutputs( - CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 64), - CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 64), - CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 32)) - .eut(TierEU.RECIPE_UV) - .duration(1800) - .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(5), - Materials.Cerium.getDust(1), - Materials.Lutetium.getDust(60), - Materials.GreenSapphire.getDust(64), - Materials.GreenSapphire.getDust(64), - Materials.GreenSapphire.getDust(64), - Materials.GreenSapphire.getDust(8)) - .itemOutputs( - CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 64), - CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 64), - CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 32)) - .eut(TierEU.RECIPE_UV) - .duration(1800) - .addTo(mixerRecipes); - - // Get LuAG Crystal seed - GT_Values.RA.stdBuilder() - .itemInputs(CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1)) - .itemOutputs(CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gem, 1)) - .fluidInputs(Materials.Lutetium.getMolten(144 * 8)) - .outputChances(514) - .eut(TierEU.RECIPE_UV) - .duration(500) - .addTo(autoclaveRecipes); - - // 1 LuAG Blend = 1.1(Og) 1.0(Xe) 0.99(Kr) LuAG in Autoclave - GT_Values.RA.stdBuilder() - .itemInputs( - CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1), - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gem, 1)) - .itemOutputs( - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1), - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) - .fluidInputs(WerkstoffLoader.Krypton.getFluidOrGas(40)) - .outputChances(8000, 1900) - .eut(TierEU.RECIPE_UHV) - .duration(512) - .addTo(autoclaveRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1), - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gem, 1)) - .itemOutputs( - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1), - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) - .fluidInputs(WerkstoffLoader.Xenon.getFluidOrGas(25)) - .outputChances(9000, 1000) - .eut(TierEU.RECIPE_UHV) - .duration(256) - .addTo(autoclaveRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(1), - CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1)) - .itemOutputs( - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1), - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) - .fluidInputs(WerkstoffLoader.Oganesson.getFluidOrGas(10)) - .outputChances(10000, 100) - .eut(TierEU.RECIPE_UHV) - .duration(128) - .addTo(autoclaveRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1), - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gem, 1)) - .itemOutputs( - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1), - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 2)) - .fluidInputs(WerkstoffLoader.Oganesson.getFluidOrGas(10)) - .outputChances(10000, 2000) - .eut(TierEU.RECIPE_UHV) - .duration(128) - .addTo(autoclaveRecipes); - - // 1 LuAG Blend = 1 LuAG in Vacuum Furnace - GT_Values.RA.stdBuilder() - .itemInputs(CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.dust, 1)) - .itemOutputs(CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) - .fluidInputs(CeriumDopedLutetiumAluminiumOxygenBlend.getMolten(108)) - .metadata(COIL_HEAT, 9100) - .eut(TierEU.RECIPE_UHV) - .duration(5 * SECONDS) - .addTo(vacuumFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1)) - .fluidOutputs(CeriumDopedLutetiumAluminiumOxygenBlend.getMolten(144)) - .eut(TierEU.RECIPE_LuV) - .duration(1 * SECONDS) - .addTo(fluidExtractionRecipes); - - // 16 Adv Crystal SoC - for (ItemStack itemStack : OreDictionary.getOres("craftingLensBlue")) { - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.copyAmount(0, itemStack), - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) - .itemOutputs(ItemList.Circuit_Chip_CrystalSoC2.get(16)) - .requiresCleanRoom() - .eut(160000) - .duration(40 * SECONDS) - .addTo(laserEngraverRecipes); - } - - // 16 Crystal SoC - for (ItemStack itemStack : OreDictionary.getOres("craftingLensGreen")) { - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.copyAmount(0, itemStack), - CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) - .itemOutputs(ItemList.Circuit_Chip_CrystalSoC.get(16)) - .requiresCleanRoom() - .eut(160000) - .duration(40 * SECONDS) - .addTo(laserEngraverRecipes); - } - - } - - public static void removeCeriumMacerator() { - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); - - GT_Log.out.print(Tags.MODID + ": processing macerator recipes"); - for (GT_Recipe recipe : maceratorRecipes.getAllRecipes()) { - ItemStack input = recipe.mInputs[0]; - if (!GT_Utility.isStackValid(input)) { - continue; - } - - int[] oreDict = OreDictionary.getOreIDs(input); - for (int oreDictID : oreDict) { - final String oreName = OreDictionary.getOreName(oreDictID); - if (!(oreName.startsWith("ore") || oreName.startsWith("rawOre") || oreName.startsWith("crushed"))) { - continue; - } - - GT_Recipe tRecipe = recipe.copy(); - boolean modified = false; - for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; - - if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); - modified = true; - GT_Log.out.println( - "in the recipe of '" + recipe.mInputs[0].getDisplayName() - + "', replacing Cerium dust by Cerium Rich Mixture dust"); - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); - modified = true; - GT_Log.out.println( - "in the recipe of '" + recipe.mInputs[0].getDisplayName() - + "', replacing Samarium dust by Samarium Ore Concentrate dust"); - } - } - if (modified) { - reAdd.add(tRecipe); - remove.add(recipe); - } - break; - - } - - } - maceratorRecipes.getBackend() - .removeRecipes(remove); - reAdd.forEach(maceratorRecipes::add); - maceratorRecipes.getBackend() - .reInit(); - - remove.clear(); - reAdd.clear(); - - GT_Log.out.print(Tags.MODID + ": macerator recipes done!"); - } - - public static void removeCeriumWasher() { - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); - - GT_Log.out.println(Tags.MODID + ": processing orewasher recipes"); - for (GT_Recipe recipe : oreWasherRecipes.getAllRecipes()) { - ItemStack input = recipe.mInputs[0]; - if (!GT_Utility.isStackValid(input)) { - continue; - } - int[] oreDict = OreDictionary.getOreIDs(input); - for (int oreDictID : oreDict) { - if (!OreDictionary.getOreName(oreDictID) - .startsWith("crushed")) { - continue; - } - - GT_Recipe tRecipe = recipe.copy(); - boolean modified = false; - for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; - if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input: " - + input.getDisplayName() - + " get Cerium dust turned into Cerium Rich Mixture dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input: " - + input.getDisplayName() - + " get Samarium dust turned into Samarium Ore Concentrate dust."); - modified = true; - } - } - if (modified) { - reAdd.add(tRecipe); - remove.add(recipe); - } - break; - } - } - - GT_Log.out.println(Tags.MODID + ": regenerating ore washer recipes"); - oreWasherRecipes.getBackend() - .removeRecipes(remove); - reAdd.forEach(oreWasherRecipes::add); - oreWasherRecipes.getBackend() - .reInit(); - - remove.clear(); - reAdd.clear(); - - GT_Log.out.println(Tags.MODID + ": ore washer recipes done!"); - } - - public static void removeCeriumThermalCentrifuge() { - - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); - - GT_Log.out.println(Tags.MODID + ": processing thermal centrifuge recipes"); - for (GT_Recipe recipe : thermalCentrifugeRecipes.getAllRecipes()) { - ItemStack input = recipe.mInputs[0]; - if (!GT_Utility.isStackValid(input)) { - continue; - } - int[] oreDict = OreDictionary.getOreIDs(input); - for (int oreDictID : oreDict) { - if (!(OreDictionary.getOreName(oreDictID) - .startsWith("crushed") - || OreDictionary.getOreName(oreDictID) - .startsWith("purified"))) { - continue; - } - - GT_Recipe tRecipe = recipe.copy(); - boolean modified = false; - for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; - if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input " - + input.getDisplayName() - + " get Cerium dust turned into Cerium Rich Mixture dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input " - + input.getDisplayName() - + " get Samarium dust turned into Samarium Ore Concentrate dust."); - modified = true; - } - } - if (modified) { - reAdd.add(tRecipe); - remove.add(recipe); - } - break; - } - } - - GT_Log.out.println(Tags.MODID + ": regenerating thermal centrifuge recipes"); - thermalCentrifugeRecipes.getBackend() - .removeRecipes(remove); - reAdd.forEach(thermalCentrifugeRecipes::add); - thermalCentrifugeRecipes.getBackend() - .reInit(); - - remove.clear(); - reAdd.clear(); - - GT_Log.out.println(Tags.MODID + ": thermal centrifuge recipes done!"); - } - - public static void removeCeriumCentrifuge() { - - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); - GT_Log.out.println(Tags.MODID + ": processing centrifuge recipes"); - for (GT_Recipe recipe : centrifugeRecipes.getAllRecipes()) { - ItemStack input = null; - if (recipe.mInputs.length > 0) input = recipe.mInputs[0]; - if (!GT_Utility.isStackValid(input)) { - continue; - } - int[] oreDict = OreDictionary.getOreIDs(input); - for (int oreDictID : oreDict) { - final String oreName = OreDictionary.getOreName(oreDictID); - if (!(oreName.startsWith("dust") && (!oreName.contains("Dephosphated")))) { - continue; - } - GT_Recipe tRecipe = recipe.copy(); - boolean modified = false; - for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; - if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dustTiny, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Cerium tiny dust turned into Cerium Rich Mixture tiny dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Cerium dust turned into Cerium Rich Mixture dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDustSmall(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dustSmall, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Cerium small dust turned into Cerium Rich Mixture small dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dustTiny, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Samarium dust turned into Samarium Ore Concentrate tiny dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Samarium dust turned into Samarium Ore Concentrate dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDustSmall(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dustSmall, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Samarium dust turned into Samarium Ore Concentrate small dust."); - modified = true; - } - } - if (modified) { - reAdd.add(tRecipe); - remove.add(recipe); - } - break; - } - } - - GT_Log.out.println(Tags.MODID + ": regenerating centrifuge recipes"); - centrifugeRecipes.getBackend() - .removeRecipes(remove); - reAdd.forEach(centrifugeRecipes::add); - centrifugeRecipes.getBackend() - .reInit(); - - remove.clear(); - reAdd.clear(); - - GT_Log.out.println(Tags.MODID + ": centrifuge recipes done!"); - } - - public static void removeCeriumCentrifugeNonCell() { - - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); - GT_Log.out.println(Tags.MODID + ": processing centrifuge non cell recipes"); - - for (GT_Recipe recipe : centrifugeNonCellRecipes.getAllRecipes()) { - ItemStack input = null; - if (recipe.mInputs.length > 0) input = recipe.mInputs[0]; - if (!GT_Utility.isStackValid(input)) { - continue; - } - int[] oreDict = OreDictionary.getOreIDs(input); - for (int oreDictID : oreDict) { - final String oreName = OreDictionary.getOreName(oreDictID); - if (!((oreName.startsWith("dust") && (!oreName.contains("Dephosphated"))))) { - continue; - } - GT_Recipe tRecipe = recipe.copy(); - boolean modified = false; - for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; - if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dustTiny, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Cerium tiny dust turned into Cerium Rich Mixture tiny dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Cerium dust turned into Cerium Rich Mixture dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDustSmall(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dustSmall, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Cerium small dust turned into Cerium Rich Mixture small dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dustTiny, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Samarium tiny dust turned into Samarium Ore Concentrate tiny dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Samarium dust turned into Samarium Ore Concentrate dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDustSmall(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dustSmall, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Samarium small dust turned into Samarium Ore Concentrate small dust."); - modified = true; - } - } - if (modified) { - reAdd.add(tRecipe); - remove.add(recipe); - } - break; - } - } - - GT_Log.out.println(Tags.MODID + ": regenerating centrifuge non cell recipes"); - centrifugeNonCellRecipes.getBackend() - .removeRecipes(remove); - reAdd.forEach(centrifugeNonCellRecipes::add); - centrifugeNonCellRecipes.getBackend() - .reInit(); - - remove.clear(); - reAdd.clear(); - - GT_Log.out.println(Tags.MODID + ": centrifuge non cell recipes done!"); - } - - public static void removeCeriumHammer() { - - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); - - GT_Log.out.println(Tags.MODID + ": processing forge hammer recipes"); - - for (GT_Recipe recipe : hammerRecipes.getAllRecipes()) { - ItemStack input = recipe.mInputs[0]; - if (!GT_Utility.isStackValid(input)) { - continue; - } - int[] oreDict = OreDictionary.getOreIDs(input); - for (int oreDictID : oreDict) { - final String oreName = OreDictionary.getOreName(oreDictID); - if (!oreName.startsWith("crushed")) { - continue; - } - - GT_Recipe tRecipe = recipe.copy(); - boolean modified = false; - for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; - if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Cerium dust turned into Cerium Rich Mixture dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize * 2, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Samarium dust turned into Samarium Ore Concentrate dust."); - modified = true; - } - } - if (modified) { - reAdd.add(tRecipe); - remove.add(recipe); - } - break; - } - } - - GT_Log.out.println(Tags.MODID + ": regenerating forge hammer recipes"); - hammerRecipes.getBackend() - .removeRecipes(remove); - reAdd.forEach(hammerRecipes::add); - hammerRecipes.getBackend() - .reInit(); - - remove.clear(); - reAdd.clear(); - - GT_Log.out.println(Tags.MODID + ": forge hammer recipes done!"); - } - - public static void removeCeriumElectrolyzer() { - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); - GT_Log.out.println(Tags.MODID + ": Processing electrolyzer recipes"); - for (GT_Recipe recipe : electrolyzerRecipes.getAllRecipes()) { - for (ItemStack input : recipe.mInputs) { - if (!GT_Utility.isStackValid(input)) { - continue; - } - - int[] oreDict = OreDictionary.getOreIDs(input); - for (int oreDictID : oreDict) { - final String oreName = OreDictionary.getOreName(oreDictID); - if (!(oreName.startsWith("dust") - && (oreName.equals("dustHibonite") || oreName.equals("dustLanthaniteCe") - || oreName.equals("dustZirconolite") - || oreName.equals("dustYttrocerite") - || oreName.equals("dustXenotime") - || oreName.equals("dustBastnasite") - || oreName.equals("dustFlorencite")))) { - continue; - } - - GT_Recipe tRecipe = recipe.copy(); - boolean modified = false; - for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; - if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Cerium dust turned into Cerium Rich Mixture dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Samarium dust turned into Samarium Ore Concentrate dust."); - modified = true; - } - } - if (modified) { - reAdd.add(tRecipe); - remove.add(recipe); - } - break; - } - } - } - - GT_Log.out.println(Tags.MODID + ": regenerating electrolyzer recipes"); - electrolyzerRecipes.getBackend() - .removeRecipes(remove); - reAdd.forEach(electrolyzerRecipes::add); - electrolyzerRecipes.getBackend() - .reInit(); - - remove.clear(); - reAdd.clear(); - - GT_Log.out.println(Tags.MODID + ": Electrolyzer recipe done!"); - } - - public static void removeCeriumElectrolyzerNonCell() { - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); - GT_Log.out.println(Tags.MODID + ": processing electrolyzer non cell recipes"); - for (GT_Recipe recipe : electrolyzerNonCellRecipes.getAllRecipes()) { - for (ItemStack input : recipe.mInputs) { - if (!GT_Utility.isStackValid(input)) { - continue; - } - int[] oreDict = OreDictionary.getOreIDs(input); - for (int oreDictID : oreDict) { - final String oreName = OreDictionary.getOreName(oreDictID); - if (!(oreName.startsWith("dust") - && (oreName.equals("dustHibonite") || oreName.equals("dustLanthaniteCe") - || oreName.equals("dustZirconolite") - || oreName.equals("dustYttrocerite") - || oreName.equals("dustXenotime") - || oreName.equals("dustBastnasite") - || oreName.equals("dustFlorencite")))) { - continue; - } - - GT_Recipe tRecipe = recipe.copy(); - boolean modified = false; - for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; - if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Cerium dust turned into Cerium Rich Mixture dust."); - modified = true; - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Samarium dust turned into Samarium Ore Concentrate dust."); - modified = true; - } - } - if (modified) { - reAdd.add(tRecipe); - remove.add(recipe); - } - break; - } - } - } - - GT_Log.out.println(Tags.MODID + ": regenerating electrolyzer non cell recipes"); - electrolyzerNonCellRecipes.getBackend() - .removeRecipes(remove); - reAdd.forEach(electrolyzerNonCellRecipes::add); - electrolyzerNonCellRecipes.getBackend() - .reInit(); - - remove.clear(); - reAdd.clear(); - - GT_Log.out.println(Tags.MODID + ": Electrolyzer non cell recipes done!"); - } - - public static void removeCeriumSimpleWasher() { - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); - GT_Log.out.println(Tags.MODID + ": processing simple washer recipes."); - for (GT_Recipe recipe : simpleWasherRecipes.getAllRecipes()) { - ItemStack input = recipe.mInputs[0]; - if (!GT_Utility.isStackValid(input)) { - continue; - } - - int[] oreDict = OreDictionary.getOreIDs(input); - for (int oreDictID : oreDict) { - final String oreName = OreDictionary.getOreName(oreDictID); - - if (!(oreName.startsWith("dustImpureCerium") || oreName.startsWith("dustImpureSamarium") - || oreName.startsWith("dustPureSamarium") - || oreName.startsWith("dustPureCerium"))) { - continue; - } - - GT_Recipe tRecipe = recipe.copy(); - for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; - if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize, - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Cerium dust turned into Cerium Rich Mixture dust."); - } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize, - WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Samarium dust turned into Samarium Ore Concentrate dust."); - } - } - if (!tRecipe.equals(recipe)) { - reAdd.add(tRecipe); - remove.add(recipe); - } - break; - } - } - - GT_Log.out.println(Tags.MODID + ": regenerating simple washer recipes"); - simpleWasherRecipes.getBackend() - .removeRecipes(remove); - reAdd.forEach(simpleWasherRecipes::add); - simpleWasherRecipes.getBackend() - .reInit(); - - remove.clear(); - reAdd.clear(); - - GT_Log.out.println(Tags.MODID + ": Simple washer recipes done!"); - } - - public static void removeCeriumDehydrator() { - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); - GT_Log.out.println(Tags.MODID + ": processing chemical dehydrator recipes."); - - for (GT_Recipe recipe : chemicalDehydratorRecipes.getAllRecipes()) { - if (recipe.mInputs.length == 0) { - continue; - } - ItemStack input = recipe.mInputs[0]; - - if (!GT_Utility.isStackValid(input)) { - continue; - } - int[] oreDict = OreDictionary.getOreIDs(input); - for (int oreDictID : oreDict) { - final String oreName = OreDictionary.getOreName(oreDictID); - if (!oreName.startsWith("dust")) { - continue; - } - if (!(oreName.equals("dustCerite") || oreName.equals("dustFluorcaphite") - || oreName.equals("dustZirkelite") - || oreName.equals("dustGadoliniteCe") - || oreName.equals("dustGadoliniteY") - || oreName.equals("dustPolycrase") - || oreName.equals("dustBastnasite"))) { - continue; - } - - GT_Recipe tRecipe = recipe.copy(); - for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; - - if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( - tRecipe.mOutputs[i].stackSize, - WerkstoffMaterialPool.CeriumRichMixture - .get(OrePrefixes.dust, tRecipe.mOutputs[i].stackSize)); - GT_Log.out.println( - Tags.MODID + ": recipe with input oredict: " - + oreName - + " get Cerium dust turned into Cerium Rich Mixture dust."); - } - } - if (!tRecipe.equals(recipe)) { - reAdd.add(tRecipe); - remove.add(recipe); - } - break; - - } - - } - - GT_Log.out.println(Tags.MODID + ": regenerating chemical dehydrator recipes"); - chemicalDehydratorRecipes.getBackend() - .removeRecipes(remove); - reAdd.forEach(chemicalDehydratorRecipes::add); - chemicalDehydratorRecipes.getBackend() - .reInit(); - - GT_Log.out.print(Tags.MODID + ": Replace " + remove.size() + "! "); - - remove.clear(); - reAdd.clear(); - - GT_Log.out.println(Tags.MODID + ": chemical dehydrator recipes done!"); - - } - - public static void removeCeriumChemicalBath() { - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); - - GT_Log.out.println(Tags.MODID + ": marking recipes in chem bath for removal!"); - for (GT_Recipe recipe : chemicalBathRecipes.getAllRecipes()) { - for (ItemStack input : recipe.mInputs) { - if (!GT_Utility.isStackValid(input)) { - continue; - } - int[] oreDict = OreDictionary.getOreIDs(input); - for (int oreDictID : oreDict) { - String oreName = OreDictionary.getOreName(oreDictID); - if (oreName.equals("dustTin")) { - GT_Log.out.println(Tags.MODID + ": chem bath recipe with tin dust detected, removing it."); - remove.add(recipe); - break; - } - if (oreName.equals("dustRutile")) { - GT_Log.out.println(Tags.MODID + ": chem bath recipe with rutile dust detected, removing it."); - remove.add(recipe); - break; - } - } - } - } - - GT_Log.out.println(Tags.MODID + ": regenerating chem bath recipes"); - chemicalBathRecipes.getBackend() - .removeRecipes(remove); - reAdd.forEach(chemicalBathRecipes::add); - chemicalBathRecipes.getBackend() - .reInit(); - - remove.clear(); - reAdd.clear(); - - GT_Log.out.println("Chemical Bath done!"); - } - - public static void removeCeriumSources() { - - removeCeriumMacerator(); - removeCeriumWasher(); - removeCeriumThermalCentrifuge(); - removeCeriumCentrifuge(); - removeCeriumCentrifugeNonCell(); - removeCeriumHammer(); - removeCeriumElectrolyzer(); - removeCeriumElectrolyzerNonCell(); - removeCeriumSimpleWasher(); - removeCeriumDehydrator(); - removeCeriumChemicalBath(); - - // For Cauldron Wash - GT_Log.out.println(Tags.MODID + ": processing cauldron washing recipes to replace cerium sources"); - registerCauldronCleaningFor(Materials.Cerium, WerkstoffMaterialPool.CeriumRichMixture.getBridgeMaterial()); - registerCauldronCleaningFor( - Materials.Samarium, - WerkstoffMaterialPool.SamariumOreConcentrate.getBridgeMaterial()); - GT_Log.out.println(Tags.MODID + ": processing cauldron washing recipes done!"); - - // For Crafting Table - GT_Log.out.println(Tags.MODID + ": processing crafting recipes to replace cerium sources"); - CraftingManager.getInstance() - .getRecipeList() - .forEach(RecipeLoader::replaceInCraftTable); - GT_Log.out.println(Tags.MODID + ": processing crafting recipes done!"); - } - - public static void replaceInCraftTable(Object obj) { - IRecipe recipe = (IRecipe) obj; - ItemStack result = recipe.getRecipeOutput(); - if (!(recipe instanceof IRecipeMutableAccess mutableRecipe)) { - return; - } - - Object input = mutableRecipe.gt5u$getRecipeInputs(); - - if (GT_Utility.areStacksEqual(result, Materials.Cerium.getDust(1), true)) { - if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Cerium)) { - return; - } - GT_Log.out.println("replacing crafting recipe of Cerium dust by Cerium Rich Mixture"); - mutableRecipe.gt5u$setRecipeOutputItem(WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 2)); - } else if (GT_Utility.areStacksEqual(result, Materials.Samarium.getDust(1), true)) { - if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Samarium)) { - return; - } - mutableRecipe - .gt5u$setRecipeOutputItem(WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 2)); - GT_Log.out.println("replacing crafting recipe of Samarium dust by Samarium Ore Concentrate"); - } - } - -} diff --git a/src/main/java/com/elisis/gtnhlanth/loader/ZPMRubberChanges.java b/src/main/java/com/elisis/gtnhlanth/loader/ZPMRubberChanges.java deleted file mode 100644 index 52ab4f15d1..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/loader/ZPMRubberChanges.java +++ /dev/null @@ -1,409 +0,0 @@ -package com.elisis.gtnhlanth.loader; - -import static gregtech.api.enums.OrePrefixes.*; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Predicate; - -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.reflect.FieldUtils; -import org.apache.commons.lang3.reflect.MethodUtils; - -import com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.util.BW_Util; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Mods; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Recipe.GT_Recipe_AssemblyLine; -import gregtech.api.util.GT_Shaped_Recipe; -import gregtech.api.util.GT_Utility; - -public class ZPMRubberChanges implements Runnable { - - @SuppressWarnings("unchecked") - public void run() { - - List bufferedRecipeList = null; - - try { - bufferedRecipeList = (List) FieldUtils - .getDeclaredField(GT_ModHandler.class, "sBufferRecipeList", true) - .get(null); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - - HashSet ZPMPlusComponents = new HashSet<>(); - OrePrefixes[] RubberGenerated = { plate }; - - Arrays.stream(ItemList.values()) - .filter( - item -> (item.toString() - .contains("ZPM") - || item.toString() - .contains("UV") - || item.toString() - .contains("UHV") - || item.toString() - .contains("UEV")) - && item.hasBeenSet()) - .forEach(item -> ZPMPlusComponents.add(item.get(1))); - - if (Mods.NewHorizonsCoreMod.isModLoaded()) { - addDreamcraftItemListItems(ZPMPlusComponents); - } - - for (ItemStack component : ZPMPlusComponents) { - GT_Log.out.print(component.getDisplayName() + " "); - } - - replaceAllRecipes(ZPMPlusComponents, RubberGenerated, bufferedRecipeList); - } - - private static void replaceAllRecipes(Collection ZPMPlusComponents, OrePrefixes[] RubberGenerated, - List bufferedRecipeList) { - - for (GT_Recipe_AssemblyLine sAssemblylineRecipe : GT_Recipe_AssemblyLine.sAssemblylineRecipes) { - for (ItemStack stack : ZPMPlusComponents) { - rewriteAsslineRecipes(stack, RubberGenerated, sAssemblylineRecipe); - } - } - - for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { - for (GT_Recipe recipe : map.getAllRecipes()) { - for (ItemStack stack : ZPMPlusComponents) { - rewriteMachineRecipes(stack, RubberGenerated, recipe); - } - } - } - - for (ItemStack stack : ZPMPlusComponents) { - Predicate recipeFilter = obj -> obj instanceof GT_Shaped_Recipe - && GT_Utility.areStacksEqual(((GT_Shaped_Recipe) obj).getRecipeOutput(), stack, true); - rewriteCraftingRecipes(bufferedRecipeList, RubberGenerated, recipeFilter); - } - /* - * for (ItemStack stack : LuVMachines) { Predicate recipeFilter = obj -> obj instanceof GT_Shaped_Recipe && - * GT_Utility.areStacksEqual(((GT_Shaped_Recipe) obj).getRecipeOutput(), stack, true); - * rewriteCraftingRecipes(bufferedRecipeList, LuVMaterialsGenerated, recipeFilter); } - */ - } - - private static void addDreamcraftItemListItems(Collection ZPMPlusComponents) { - try { - Class customItemListClass = Class.forName("com.dreammaster.gthandler.CustomItemList"); - Method hasnotBeenSet = MethodUtils.getAccessibleMethod(customItemListClass, "hasBeenSet"); - Method get = MethodUtils.getAccessibleMethod(customItemListClass, "get", long.class, Object[].class); - for (Enum customItemList : (Enum[]) FieldUtils.getField(customItemListClass, "$VALUES", true) - .get(null)) { - if ((customItemList.toString() - .contains("ZPM") - || customItemList.toString() - .contains("UV") - || customItemList.toString() - .contains("UHV") - || customItemList.toString() - .contains("UEV")) - && (boolean) hasnotBeenSet.invoke(customItemList)) - ZPMPlusComponents.add((ItemStack) get.invoke(customItemList, 1, new Object[0])); - } - } catch (IllegalAccessException | ClassNotFoundException | InvocationTargetException e) { - e.printStackTrace(); - } - } - - private static void rewriteCraftingRecipes(List bufferedRecipeList, OrePrefixes[] RubberGenerated, - Predicate recipeFilter) { - for (OrePrefixes prefixes : RubberGenerated) { - - Consumer recipeAction = (obj) -> { - ZPMRubberChanges.doStacksCointainAndReplace( - ((GT_Shaped_Recipe) obj).getInput(), - GT_OreDictUnificator.get(prefixes, Materials.Silicone, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - ZPMRubberChanges.doStacksCointainAndReplace( - ((GT_Shaped_Recipe) obj).getInput(), - GT_OreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - }; - - /* - * || ZPMRubberChanges.doStacksCointainAndReplace(((GT_Shaped_Recipe) obj).getInput(), - * GT_OreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), true, - * WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - */ - - CraftingManager.getInstance() - .getRecipeList() - .stream() - .filter(recipeFilter) - .forEach(recipeAction); - bufferedRecipeList.stream() - .filter(recipeFilter) - .forEach(recipeAction); - } - } - - private static void rewriteMachineRecipes(ItemStack stack, OrePrefixes[] RubberGenerated, GT_Recipe recipe) { - if (ZPMRubberChanges.doStacksCointainAndReplace(recipe.mInputs, stack, false)) { - for (OrePrefixes prefixes : RubberGenerated) { - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mInputs, - GT_OreDictUnificator.get(prefixes, Materials.Silicone, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mOutputs, - GT_OreDictUnificator.get(prefixes, Materials.Silicon, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mInputs, - GT_OreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mOutputs, - GT_OreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - } - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mFluidInputs, - Materials.Silicone.getMolten(1), - true, - WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) - .getFluid()); - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mFluidOutputs, - Materials.Silicone.getMolten(1), - true, - WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) - .getFluid()); - - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mFluidInputs, - Materials.StyreneButadieneRubber.getMolten(1), - true, - WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) - .getFluid()); - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mFluidOutputs, - Materials.StyreneButadieneRubber.getMolten(1), - true, - WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) - .getFluid()); - } - if (ZPMRubberChanges.doStacksCointainAndReplace(recipe.mOutputs, stack, false)) { - for (OrePrefixes prefixes : RubberGenerated) { - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mInputs, - GT_OreDictUnificator.get(prefixes, Materials.Silicone, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mOutputs, - GT_OreDictUnificator.get(prefixes, Materials.Silicone, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mInputs, - GT_OreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mOutputs, - GT_OreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - } - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mFluidInputs, - Materials.Silicone.getMolten(1), - true, - WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) - .getFluid()); - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mFluidOutputs, - Materials.Silicone.getMolten(1), - true, - WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) - .getFluid()); - - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mFluidInputs, - Materials.StyreneButadieneRubber.getMolten(1), - true, - WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) - .getFluid()); - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mFluidOutputs, - Materials.StyreneButadieneRubber.getMolten(1), - true, - WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) - .getFluid()); - } - } - - private static void rewriteAsslineRecipes(ItemStack stack, OrePrefixes[] RubberGenerated, - GT_Recipe.GT_Recipe_AssemblyLine recipe) { - for (OrePrefixes prefixes : RubberGenerated) { - if (ZPMRubberChanges.doStacksCointainAndReplace(recipe.mInputs, stack, false)) { - - GT_Log.out.print(Arrays.toString(recipe.mInputs)); - - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mInputs, - GT_OreDictUnificator.get(prefixes, Materials.Silicone, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - ZPMRubberChanges.doStacksCointainAndReplace( - new Object[] { recipe.mOutput }, - GT_OreDictUnificator.get(prefixes, Materials.Silicone, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mInputs, - GT_OreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - ZPMRubberChanges.doStacksCointainAndReplace( - new Object[] { recipe.mOutput }, - GT_OreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - } - if (ZPMRubberChanges.doStacksCointainAndReplace(new Object[] { recipe.mOutput }, stack, false)) { - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mInputs, - GT_OreDictUnificator.get(prefixes, Materials.Silicone, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - ZPMRubberChanges.doStacksCointainAndReplace( - new Object[] { recipe.mOutput }, - GT_OreDictUnificator.get(prefixes, Materials.Silicone, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mInputs, - GT_OreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - ZPMRubberChanges.doStacksCointainAndReplace( - new Object[] { recipe.mOutput }, - GT_OreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), - true, - WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); - } - } - if (ZPMRubberChanges.doStacksCointainAndReplace(recipe.mInputs, stack, false)) { - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mFluidInputs, - Materials.Silicone.getMolten(1), - true, - WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) - .getFluid()); - - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mFluidInputs, - Materials.StyreneButadieneRubber.getMolten(1), - true, - WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) - .getFluid()); - } - if (ZPMRubberChanges.doStacksCointainAndReplace(new Object[] { recipe.mOutput }, stack, false)) { - ZPMRubberChanges.doStacksCointainAndReplace( - recipe.mFluidInputs, - Materials.StyreneButadieneRubber.getMolten(1), - true, - WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) - .getFluid()); - } - } - - private static ItemStack[] replaceArrayWith(ItemStack[] stackArray, Materials source, Werkstoff target) { - for (int i = 0; i < stackArray.length; i++) { - ItemStack stack = stackArray[i]; - if (!BW_Util.checkStackAndPrefix(stack)) continue; - stackArray[i] = replaceStackWith(stack, source, target); - } - return stackArray; - } - - private static ItemStack replaceStackWith(ItemStack stack, Materials source, Werkstoff target) { - ItemData ass = GT_OreDictUnificator.getAssociation(stack); - if (ass.mMaterial.mMaterial.equals(source)) - if (target.hasItemType(ass.mPrefix)) stack = target.get(ass.mPrefix, stack.stackSize); - return stack; - } - - private static boolean doStacksCointainAndReplace(FluidStack[] stacks, FluidStack stack, boolean replace, - Fluid... replacement) { - boolean replaced = false; - for (int i = 0; i < stacks.length; i++) { - if (GT_Utility.areFluidsEqual(stack, stacks[i])) if (!replace) return true; - else { - int amount = stacks[i].amount; - stacks[i] = new FluidStack(replacement[0], amount); - replaced = true; - } - } - return replaced; - } - - private static boolean doStacksCointainAndReplace(Object[] stacks, ItemStack stack, boolean replace, - ItemStack... replacement) { - // GT_Log.out.print("In doStacksCointainAndReplace!\n"); - boolean replaced = false; - for (int i = 0; i < stacks.length; i++) { - if (!GT_Utility.isStackValid(stacks[i])) { - if (stacks[i] instanceof ArrayList && ((ArrayList) stacks[i]).size() > 0) { - if (GT_Utility.areStacksEqual(stack, (ItemStack) ((ArrayList) stacks[i]).get(0), true)) - if (!replace) return true; - else { - int amount = ((ItemStack) ((ArrayList) stacks[i]).get(0)).stackSize; - stacks[i] = new ArrayList<>(); - ((ArrayList) stacks[i]).add(BW_Util.setStackSize(replacement[0], amount)); - replaced = true; - - GT_Log.out.print("Replaced recipe!: " + stack.getDisplayName() + " "); - } - - } else continue; - } else if (GT_Utility.areStacksEqual(stack, (ItemStack) stacks[i], true)) if (!replace) return true; - else { - int amount = ((ItemStack) stacks[i]).stackSize; - stacks[i] = BW_Util.setStackSize(replacement[0], amount); - replaced = true; - } - } - return replaced; - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/util/DescTextLocalization.java b/src/main/java/com/elisis/gtnhlanth/util/DescTextLocalization.java deleted file mode 100644 index f0c5509d59..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/util/DescTextLocalization.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.elisis.gtnhlanth.util; - -import net.minecraft.util.StatCollector; - -public class DescTextLocalization { - - public static final String BLUEPRINT_INFO = StatCollector.translateToLocal("gtnhlanth.tt.blueprint"); - - public static final String BEAMLINE_SCANNER_INFO = StatCollector.translateToLocal("gtnhlanth.tt.beaminfo"); - - public static String[] addText(String preFix, int length) { - String[] text = new String[length]; - for (int i = 0; i < length; i++) { - text[i] = StatCollector.translateToLocal(preFix + "." + i); - } - return text; - } - - public static String addDotText(int dotNum) { - - return StatCollector.translateToLocalFormatted("gtnhlanth.tt.hintdot", dotNum + ""); - - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/util/Util.java b/src/main/java/com/elisis/gtnhlanth/util/Util.java deleted file mode 100644 index 1a42396de0..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/util/Util.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.elisis.gtnhlanth.util; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizons.modularui.api.math.Pos2d; - -public class Util { - - public static void depleteDurabilityOfStack(ItemStack stack, int damage) { - - if (stack == null) return; - - if (stack.stackSize == 0) // Might happen, who knows - return; - - if (damage + stack.getItemDamage() > stack.getMaxDamage()) { - stack.stackSize--; - } else { - - stack.setItemDamage(stack.getItemDamage() + damage); - - } - - } - - public static List getGridPositions(int totalCount, int xOrigin, int yOrigin, int xDirMaxCount, - int yDirMaxCount, int distanceBetweenSlots) { - // 18 pixels to get to a new grid for placing an item tile since they are 16x16 and have 1 pixel buffers - // around them. - - int distance = 18 + distanceBetweenSlots; - - List results = new ArrayList<>(); - int count = 0; - loop: for (int j = 0; j < yDirMaxCount; j++) { - for (int i = 0; i < xDirMaxCount; i++) { - if (count >= totalCount) break loop; - results.add(new Pos2d(xOrigin + i * distance, yOrigin + j * distance)); - count++; - } - } - return results; - } - - public static boolean coolantFluidCheck(FluidStack inStack, int fluidToConsume) { - return (inStack.amount < fluidToConsume - || (!inStack.isFluidEqual(FluidRegistry.getFluidStack("ic2coolant", 1)) && inStack.getFluid() - .getTemperature() > 200)); - } -} diff --git a/src/main/java/com/elisis/gtnhlanth/xmod/nei/NEI_Config.java b/src/main/java/com/elisis/gtnhlanth/xmod/nei/NEI_Config.java deleted file mode 100644 index 0ed71e712f..0000000000 --- a/src/main/java/com/elisis/gtnhlanth/xmod/nei/NEI_Config.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.elisis.gtnhlanth.xmod.nei; - -import com.elisis.gtnhlanth.Tags; - -import codechicken.nei.api.IConfigureNEI; - -public class NEI_Config implements IConfigureNEI { - - public static boolean isAdded = true; - - @Override - public String getName() { - return "GTNH: Lanthanides NEI"; - } - - @Override - public String getVersion() { - return Tags.VERSION; - } - - @Override - public void loadConfig() { - isAdded = false; - - isAdded = true; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/API_ConfigValues.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/API_ConfigValues.java deleted file mode 100644 index 68a88b39ce..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/API_ConfigValues.java +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -public class API_ConfigValues { - - // One-Side-Only - public static boolean debugLog = true; -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/BioObjectAdder.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/BioObjectAdder.java deleted file mode 100644 index 2eee530a70..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/BioObjectAdder.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -import static gregtech.api.enums.Mods.Gendustry; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import java.awt.Color; - -import net.minecraft.item.EnumRarity; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.util.BioCulture; -import com.github.bartimaeusnek.bartworks.util.BioDNA; -import com.github.bartimaeusnek.bartworks.util.BioData; -import com.github.bartimaeusnek.bartworks.util.BioPlasmid; - -import gregtech.api.enums.FluidState; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -import gregtech.api.fluid.GT_FluidFactory; -import gregtech.api.util.GT_Utility; - -public final class BioObjectAdder { - - /** - * @param color the color of the Culture - * @param name the name of the Culture - * @param plasmid the cultures plasmid, get it from createAndRegisterBioPlasmid - * @param dna the cultures dna, get it from createAndRegisterBioDNA - * @param breedable if the culture can be inserted into the BacterialVat - * @param rarity visual - * @return - */ - public static BioCulture createAndRegisterBioCulture(Color color, String name, BioPlasmid plasmid, BioDNA dna, - EnumRarity rarity, boolean breedable) { - if (BioCulture.BIO_CULTURE_ARRAY_LIST.size() > 1) - return BioCulture.createAndRegisterBioCulture(color, name, plasmid, dna, rarity, breedable); - new Exception( - "Too Early to register a BioCulture! You MUST run this either after:bartworks OR in the init Phase!") - .printStackTrace(); - return null; - } - - /** - * rarity inherits from dna - * - * @param color the color of the Culture - * @param name the name of the Culture - * @param plasmid the cultures plasmid, get it from createAndRegisterBioPlasmid - * @param dna the cultures dna, get it from createAndRegisterBioDNA - * @param breedable if the culture can be inserted into the BacterialVat - * @return - */ - public static BioCulture createAndRegisterBioCulture(Color color, String name, BioPlasmid plasmid, BioDNA dna, - boolean breedable) { - if (BioCulture.BIO_CULTURE_ARRAY_LIST.size() > 1) - return BioCulture.createAndRegisterBioCulture(color, name, plasmid, dna, breedable); - new Exception( - "Too Early to register a BioCulture! You MUST run this either after:bartworks OR in the init Phase!") - .printStackTrace(); - return null; - } - - /** - * unspecific Biodata that can be converted into DNA and Plasmid with the propper methodes - * - * @param aName the name of the Biodata - * @param rarity visual only - * @param chance the chanche to extract this BioData - * @param tier the tier of this BioData 0=HV, 1=EV etc. - * @return - */ - public static BioData createAndRegisterBioData(String aName, EnumRarity rarity, int chance, int tier) { - if (BioData.BIO_DATA_ARRAY_LIST.size() > 1) - return BioData.createAndRegisterBioData(aName, rarity, chance, tier); - new Exception("Too Early to register a BioData! You MUST run this either after:bartworks OR in the init Phase!") - .printStackTrace(); - return null; - } - - /** - * Default Constructor for HV Tier DNA with 75% extraction rate - * - * @param aName Name of the DNA String - * @param rarity visual - * @return - */ - public static BioDNA createAndRegisterBioDNA(String aName, EnumRarity rarity) { - if (BioData.BIO_DATA_ARRAY_LIST.size() > 1) return BioDNA.createAndRegisterBioDNA(aName, rarity); - new Exception("Too Early to register a BioData! You MUST run this either after:bartworks OR in the init Phase!") - .printStackTrace(); - return null; - } - - /** - * Default Constructor for HV Tier Plasmid with 75% extraction rate - * - * @param aName Name of the Plasmid - * @param rarity visual - * @return - */ - public static BioPlasmid createAndRegisterBioPlasmid(String aName, EnumRarity rarity) { - if (BioData.BIO_DATA_ARRAY_LIST.size() > 1) return BioPlasmid.createAndRegisterBioPlasmid(aName, rarity); - new Exception("Too Early to register a BioData! You MUST run this either after:bartworks OR in the init Phase!") - .printStackTrace(); - return null; - } - - /** - * @param aName Name of the DNA String - * @param rarity visual - * @param chance chanche of extracting - * @param tier tier needed to extract 0=HV, 1=EV etc. - * @return - */ - public static BioDNA createAndRegisterBioDNA(String aName, EnumRarity rarity, int chance, int tier) { - if (BioData.BIO_DATA_ARRAY_LIST.size() > 1) return BioDNA.createAndRegisterBioDNA(aName, rarity, chance, tier); - new Exception("Too Early to register a BioData! You MUST run this either after:bartworks OR in the init Phase!") - .printStackTrace(); - return null; - } - - /** - * @param aName Name of the Plasmid - * @param rarity visual - * @param chance chanche of extracting - * @param tier tier needed to extract 0=HV, 1=EV etc. - * @return - */ - public static BioPlasmid createAndRegisterBioPlasmid(String aName, EnumRarity rarity, int chance, int tier) { - if (BioData.BIO_DATA_ARRAY_LIST.size() > 1) - return BioPlasmid.createAndRegisterBioPlasmid(aName, rarity, chance, tier); - new Exception("Too Early to register a BioData! You MUST run this either after:bartworks OR in the init Phase!") - .printStackTrace(); - return null; - } - - /** - * @param voltageTier (i.e. 6 for LuV, 7 for ZPM, only intresting for LuV+) - * @return the propper Bacteria Tier (at least 0) - */ - public static int getBacteriaTierFromVoltageTier(int voltageTier) { - return Math.max(voltageTier - 6, 0); - } - - /** - * If you get NPE's related to BioCultures (most likely because of Load Order or creating BioCultures after the - * postinit Phase) execute this. - */ - public static void regenerateBioFluids() { - FluidStack dnaFluid = Gendustry.isModLoaded() ? FluidRegistry.getFluidStack("liquiddna", 100) - : Materials.Biomass.getFluid(100L); - for (BioCulture B : BioCulture.BIO_CULTURE_ARRAY_LIST) { - if (B.getFluidNotSet()) { - B.setFluid( - GT_FluidFactory.builder( - B.getName() - .replace(" ", "") - .toLowerCase() + "fluid") - .withTextureName("molten.autogenerated") - .withColorRGBA( - new short[] { (short) B.getColor() - .getRed(), - (short) B.getColor() - .getBlue(), - (short) B.getColor() - .getGreen() }) - .withStateAndTemperature(FluidState.LIQUID, 300) - .buildAndRegister() - .asFluid()); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(10)) - .fluidInputs(new FluidStack(B.getFluid(), 1000)) - .fluidOutputs(dnaFluid) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(centrifugeRecipes); - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/BioVatLogicAdder.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/BioVatLogicAdder.java deleted file mode 100644 index 4e1728fccd..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/BioVatLogicAdder.java +++ /dev/null @@ -1,238 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -import static gregtech.api.enums.Mods.IndustrialCraft2; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Objects; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.system.material.BW_NonMeta_MaterialItems; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.util.BW_Util; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.util.GT_ModHandler; - -public final class BioVatLogicAdder { - - public static class RadioHatch { - - public static void runBasicItemIntegration() { - giveItemStackRadioHatchAbilites(ItemList.ThoriumCell_1.get(1), Materials.Thorium, 3); - giveItemStackRadioHatchAbilites(ItemList.ThoriumCell_2.get(1), Materials.Thorium, 6); - giveItemStackRadioHatchAbilites(ItemList.ThoriumCell_4.get(1), Materials.Thorium, 12); - - giveItemStackRadioHatchAbilites(ItemList.NaquadahCell_1.get(1), Materials.Naquadah, 3); - giveItemStackRadioHatchAbilites(ItemList.NaquadahCell_2.get(1), Materials.Naquadah, 6); - giveItemStackRadioHatchAbilites(ItemList.NaquadahCell_4.get(1), Materials.Naquadah, 12); - - giveItemStackRadioHatchAbilites(ItemList.Moxcell_1.get(1), Materials.Plutonium, 3); - giveItemStackRadioHatchAbilites(ItemList.Moxcell_2.get(1), Materials.Plutonium, 6); - giveItemStackRadioHatchAbilites(ItemList.Moxcell_4.get(1), Materials.Plutonium, 12); - - giveItemStackRadioHatchAbilites(ItemList.Uraniumcell_1.get(1), Materials.Uranium, 3); - giveItemStackRadioHatchAbilites(ItemList.Uraniumcell_2.get(1), Materials.Uranium, 6); - giveItemStackRadioHatchAbilites(ItemList.Uraniumcell_4.get(1), Materials.Uranium, 12); - - giveItemStackRadioHatchAbilites( - BW_NonMeta_MaterialItems.TiberiumCell_1.get(1), - WerkstoffLoader.Tiberium.getBridgeMaterial(), - 3); - giveItemStackRadioHatchAbilites( - BW_NonMeta_MaterialItems.TiberiumCell_2.get(1), - WerkstoffLoader.Tiberium.getBridgeMaterial(), - 6); - giveItemStackRadioHatchAbilites( - BW_NonMeta_MaterialItems.TiberiumCell_4.get(1), - WerkstoffLoader.Tiberium.getBridgeMaterial(), - 12); - - giveItemStackRadioHatchAbilites(BW_NonMeta_MaterialItems.TheCoreCell.get(1), Materials.Naquadah, 96); - - giveItemStackRadioHatchAbilites(ItemList.Depleted_Thorium_1.get(1), Materials.Thorium, 3, 10); - giveItemStackRadioHatchAbilites(ItemList.Depleted_Thorium_2.get(1), Materials.Thorium, 6, 10); - giveItemStackRadioHatchAbilites(ItemList.Depleted_Thorium_4.get(1), Materials.Thorium, 12, 10); - - giveItemStackRadioHatchAbilites(ItemList.Depleted_Naquadah_1.get(1), Materials.Naquadah, 3, 10); - giveItemStackRadioHatchAbilites(ItemList.Depleted_Naquadah_2.get(1), Materials.Naquadah, 6, 10); - giveItemStackRadioHatchAbilites(ItemList.Depleted_Naquadah_4.get(1), Materials.Naquadah, 12, 10); - - giveItemStackRadioHatchAbilites( - GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXSimpledepleted", 1), - Materials.Plutonium, - 3, - 10); - giveItemStackRadioHatchAbilites( - GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXDualdepleted", 1), - Materials.Plutonium, - 6, - 10); - giveItemStackRadioHatchAbilites( - GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXQuaddepleted", 1), - Materials.Plutonium, - 12, - 10); - - giveItemStackRadioHatchAbilites( - GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumSimpledepleted", 1), - Materials.Uranium, - 3, - 10); - giveItemStackRadioHatchAbilites( - GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumDualdepleted", 1), - Materials.Uranium, - 6, - 10); - giveItemStackRadioHatchAbilites( - GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumQuaddepleted", 1), - Materials.Uranium, - 12, - 10); - - giveItemStackRadioHatchAbilites( - BW_NonMeta_MaterialItems.Depleted_Tiberium_1.get(1), - WerkstoffLoader.Tiberium.getBridgeMaterial(), - 3, - 10); - giveItemStackRadioHatchAbilites( - BW_NonMeta_MaterialItems.Depleted_Tiberium_2.get(1), - WerkstoffLoader.Tiberium.getBridgeMaterial(), - 6, - 10); - giveItemStackRadioHatchAbilites( - BW_NonMeta_MaterialItems.Depleted_Tiberium_4.get(1), - WerkstoffLoader.Tiberium.getBridgeMaterial(), - 12, - 10); - - giveItemStackRadioHatchAbilites( - BW_NonMeta_MaterialItems.Depleted_TheCoreCell.get(1), - Materials.Naquadah, - 96, - 10); - - giveItemStackRadioHatchAbilites(ItemList.MNqCell_1.get(1), Materials.Naquadria, 3); - giveItemStackRadioHatchAbilites(ItemList.MNqCell_2.get(1), Materials.Naquadria, 6); - giveItemStackRadioHatchAbilites(ItemList.MNqCell_4.get(1), Materials.Naquadria, 12); - giveItemStackRadioHatchAbilites(ItemList.Depleted_MNq_1.get(1), Materials.Naquadria, 3, 10); - giveItemStackRadioHatchAbilites(ItemList.Depleted_MNq_2.get(1), Materials.Naquadria, 6, 10); - giveItemStackRadioHatchAbilites(ItemList.Depleted_MNq_4.get(1), Materials.Naquadria, 12, 10); - } - - private static final HashSet MaSv = new HashSet<>(); - private static final HashMap IsSv = new HashMap<>(); - private static final HashMap IsKg = new HashMap<>(); - private static final HashMap IsColor = new HashMap<>(); - - public static HashSet getMaSv() { - return RadioHatch.MaSv; - } - - public static HashMap getIsKg() { - return IsKg; - } - - public static HashMap getIsSv() { - return RadioHatch.IsSv; - } - - public static HashMap getIsColor() { - return IsColor; - } - - public static void setOverrideSvForMaterial(Materials m, int sv) { - MaSv.add(new BioVatLogicAdder.MaterialSvPair(m, sv)); - } - - public static void giveItemStackRadioHatchAbilites(ItemStack stack, int sv) { - IsSv.put(stack, sv); - } - - public static void giveItemStackRadioHatchAbilites(ItemStack stack, Materials materials) { - IsSv.put(stack, BW_Util.calculateSv(materials)); - } - - public static void giveItemStackRadioHatchAbilites(ItemStack stack, int sv, int kg) { - IsSv.put(stack, sv); - IsKg.put(stack, kg); - } - - public static void giveItemStackRadioHatchAbilites(ItemStack stack, Materials materials, int kg) { - giveItemStackRadioHatchAbilites(stack, BW_Util.calculateSv(materials), kg); - IsColor.put(stack, materials.getRGBA()); - } - - public static void giveItemStackRadioHatchAbilites(ItemStack stack, Materials materials, int kg, int divider) { - giveItemStackRadioHatchAbilites(stack, BW_Util.calculateSv(materials) / divider, kg); - IsColor.put(stack, materials.getRGBA()); - } - - public static void giveItemStackRadioHatchAbilites(ItemStack stack, int sv, int kg, short[] color) { - giveItemStackRadioHatchAbilites(stack, sv, kg); - IsColor.put(stack, color); - } - - public static int MaxSV = 150; - - public static int getMaxSv() { - int ret = MaxSV; - for (MaterialSvPair pair : RadioHatch.getMaSv()) { - if (pair.getSievert() > ret) ret = pair.getSievert(); - } - for (ItemStack is : RadioHatch.IsSv.keySet()) { - if (RadioHatch.IsSv.get(is) > ret) ret = RadioHatch.IsSv.get(is); - } - return ret; - } - } - - public static class MaterialSvPair { - - final Materials materials; - final Integer sievert; - - public MaterialSvPair(Materials materials, Integer sievert) { - this.materials = materials; - this.sievert = sievert; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || this.getClass() != o.getClass()) return false; - BioVatLogicAdder.MaterialSvPair that = (BioVatLogicAdder.MaterialSvPair) o; - return Objects.equals(this.getMaterials(), that.getMaterials()) - && Objects.equals(this.getSievert(), that.getSievert()); - } - - @Override - public int hashCode() { - return Objects.hash(this.getMaterials(), this.getSievert()); - } - - public Materials getMaterials() { - return this.materials; - } - - public Integer getSievert() { - return this.sievert; - } - } - -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/BorosilicateGlass.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/BorosilicateGlass.java deleted file mode 100644 index 3d2b33843c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/BorosilicateGlass.java +++ /dev/null @@ -1,211 +0,0 @@ -package com.github.bartimaeusnek.bartworks.API; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAdder; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; - -import java.util.ArrayList; -import java.util.List; -import java.util.PriorityQueue; -import java.util.function.BiConsumer; -import java.util.function.Function; -import java.util.stream.Collectors; - -import net.minecraft.block.Block; - -import org.apache.commons.lang3.tuple.Pair; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.google.common.collect.HashBasedTable; -import com.google.common.collect.LinkedHashMultimap; -import com.google.common.collect.SetMultimap; -import com.google.common.collect.Table; -import com.gtnewhorizon.structurelib.structure.IStructureElement; - -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.LoaderState; - -/** - * API for bartworks borosilicate glass. - *

- * You might have noticed this API does not expose any Block instance, but only IStructureElements. This is in case we - * add more glass blocks later, and we run out of meta id for only one block. - *

- * IStructureElements returned from this class SHOULD NOT have its methods called before post init, or else you - * might end up with wrong autoplace hints. - */ -public class BorosilicateGlass { - - private static List> representatives; - private static SetMultimap> allLevels; - private static final Table allLevelsReverse = HashBasedTable.create(); - - private static boolean isValidTier(int tier) { - return tier > 0 && tier <= Byte.MAX_VALUE; - } - - public static Block getGlassBlock() { - return ItemRegistry.bw_realglas; - } - - public static Block getGlassBlock2() { - return ItemRegistry.bw_realglas; - } - - private static void doRegister(byte level, Block block, int meta, - SetMultimap> allLevels) { - allLevels.put(level, Pair.of(block, meta)); - allLevelsReverse.put(block, meta, level); - } - - private static SetMultimap> getAllLevels() { - if (allLevels == null) { - SetMultimap> ret = LinkedHashMultimap.create(); - Block block = getGlassBlock(); - doRegister((byte) 3, block, 0, ret); - doRegister((byte) 4, block, 1, ret); - doRegister((byte) 5, block, 12, ret); - doRegister((byte) 5, block, 2, ret); - doRegister((byte) 6, block, 3, ret); - doRegister((byte) 7, block, 4, ret); - doRegister((byte) 8, block, 5, ret); - for (int i = 6; i < 12; i++) { - doRegister((byte) 3, block, i, ret); - } - doRegister((byte) 9, block, 13, ret); - doRegister((byte) 10, block, 14, ret); - doRegister((byte) 11, block, 15, ret); - block = getGlassBlock2(); - doRegister((byte) 12, block, 0, ret); - allLevels = ret; - } - return allLevels; - } - - private static List> getRepresentatives() { - if (representatives == null) { - SetMultimap> allLevels = getAllLevels(); - ArrayList> ret = new ArrayList<>(); - for (Byte level : new PriorityQueue<>(allLevels.keySet())) { - ret.add( - allLevels.get(level) - .iterator() - .next()); - } - representatives = ret; - } - return representatives; - } - - private static Byte checkWithinBound(byte val, byte lo, byte hi) { - return val > hi || val < lo ? null : val; - } - - /** - * ONLY registers borosilicate glass. Without this, {@link #getTier} won't work properly in environments that don't - * have the coremod. - */ - public static void registerBorosilicateGlass() { - getAllLevels(); - } - - /** - * Register a new block as valid borosilicate glass with given tier (even if it doesn't contain boron at all) - * - * Does not support matching by more complex stuff like tile entity! - * - * Can only be called at INIT stage. - */ - public static void registerGlass(Block block, int meta, byte tier) { - if (Loader.instance() - .hasReachedState(LoaderState.POSTINITIALIZATION)) throw new IllegalStateException("register too late!"); - if (!Loader.instance() - .hasReachedState(LoaderState.INITIALIZATION)) throw new IllegalStateException("register too early!"); - if (!isValidTier(tier)) throw new IllegalArgumentException("not a valid tier: " + tier); - doRegister(tier, block, meta, getAllLevels()); - } - - /** - * Check if there is at least one type of boroglass in that tier. - */ - public static boolean hasGlassInTier(int tier) { - return getAllLevels().containsKey((byte) tier); - } - - /** - * Get a structure element for a certain tier of borosilicate glass. DOES NOT accept other glass like - * reinforced glass, magic mirror, vanilla glass, etc. unless these glass are explicitly registered as a - * borosilicate glass. - *

- * Use this if you just want boroglass here and doesn't care what tier it is. - */ - public static IStructureElement ofBoroGlass(int tier) { - if (!hasGlassInTier(tier)) throw new IllegalArgumentException(); - return lazy(t -> { - Pair pair = getRepresentatives().get(tier - 3); - return ofBlockAdder((t1, block1, meta) -> getTier(block1, meta) == tier, pair.getKey(), pair.getValue()); - }); - } - - /** - * Get a structure element for any kind of borosilicate glass. DOES NOT accept other glass like reinforced - * glass, magic mirror, vanilla glass, etc. unless these glass are explicitly registered as a borosilicate glass. - *

- * Use this if you just want boroglass here and doesn't care what tier it is. - */ - public static IStructureElement ofBoroGlassAnyTier() { - return lazy(t -> ofBlockAnyMeta(getGlassBlock())); - } - - /** - * Get a structure element for borosilicate glass. DOES NOT accept other glass like reinforced glass, magic - * mirror, vanilla glass, etc. unless these glass are explicitly registered as a borosilicate glass. - *

- * This assumes you want all glass used to be of the same tier. - *

- * NOTE: This will accept the basic boron glass (HV tier) as well. You might not want this. Use the other overload - * to filter this out. - * - * @param initialValue the value set before structure check started - */ - public static IStructureElement ofBoroGlass(byte initialValue, BiConsumer setter, - Function getter) { - return lazy( - t -> ofBlocksTiered(BorosilicateGlass::getTier, getRepresentatives(), initialValue, setter, getter)); - } - - /** - * Get a structure element for borosilicate glass. DOES NOT accept other glass like reinforced glass, magic - * mirror, vanilla glass, etc. unless these glass are explicitly registered as a borosilicate glass. - * - * @param initialValue the value set before structure check started - * @param minTier minimal accepted tier. inclusive. must be greater than 0. - * @param maxTier maximal accepted tier. inclusive. - */ - public static IStructureElement ofBoroGlass(byte initialValue, byte minTier, byte maxTier, - BiConsumer setter, Function getter) { - if (minTier > maxTier || minTier < 0) throw new IllegalArgumentException(); - return lazy( - t -> ofBlocksTiered( - (block1, meta) -> checkWithinBound(getTier(block1, meta), minTier, maxTier), - getRepresentatives().stream() - .skip(Math.max(minTier - 3, 0)) - .limit(maxTier - minTier + 1) - .collect(Collectors.toList()), - initialValue, - setter, - getter)); - } - - /** - * Get the tier of this borosilicate glass. DOES NOT consider other glass like reinforced glass, magic - * mirror, vanilla glass, etc. unless these glass are explicitly registered as a borosilicate glass. - * - * @return glass tier, or -1 if is not a borosilicate glass - */ - public static byte getTier(Block block, int meta) { - Byte ret = allLevelsReverse.get(block, meta); - return ret == null ? -1 : ret; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/GlassTier.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/GlassTier.java deleted file mode 100644 index 7a9493914a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/GlassTier.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.github.bartimaeusnek.bartworks.API; - -import static cpw.mods.fml.common.registry.GameRegistry.findBlock; - -import java.util.HashMap; -import java.util.Objects; - -import net.minecraft.block.Block; - -import org.jetbrains.annotations.NotNull; - -public class GlassTier { - - private static final HashMap glasses = new HashMap<>(); - - /** - * @param modname The modid owning the block - * @param unlocalisedBlockName The name of the block itself - * @param meta The meta of the block - * @param tier the glasses Tier = Voltage tier (MIN 3) - */ - public static void addCustomGlass(String modname, String unlocalisedBlockName, int meta, int tier) { - Block block = findBlock(modname, unlocalisedBlockName); - if (block != null) { - addCustomGlass(block, meta, tier); - } else { - new IllegalArgumentException( - "Block: " + unlocalisedBlockName - + " of the Mod: " - + modname - + " was NOT found when attempting to register a glass!").printStackTrace(); - } - } - - public static void addCustomGlass(@NotNull Block block, int meta, int tier) { - GlassTier.glasses.put(new BlockMetaPair(block, (byte) meta), tier); - } - - public static HashMap getGlassMap() { - return glasses; - } - - public static int getGlassTier(Block block, int meta) { - return glasses.getOrDefault(new BlockMetaPair(block, (byte) meta), 0); - } - - public static class BlockMetaPair { - - private final Block block; - private final int meta; - - public BlockMetaPair(Block block, int aByte) { - this.block = block; - this.meta = aByte; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || this.getClass() != o.getClass()) return false; - BlockMetaPair that = (BlockMetaPair) o; - return Objects.equals(this.getBlock(), that.getBlock()) && Objects.equals(this.getMeta(), that.getMeta()); - } - - @Override - public int hashCode() { - return Objects.hash(this.getBlock(), this.getMeta()); - } - - public Block getBlock() { - return this.block; - } - - public int getMeta() { - return this.meta; - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/INoiseGen.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/INoiseGen.java deleted file mode 100644 index 4a85029994..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/INoiseGen.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -public interface INoiseGen { - - double getNoise(int x, int z); - - double[][] getNoiseForRegion(int xStart, int zStart, int xEnd, int zEnd); - - void setOctaves(int octaves); - - void setFrequency(double freq); - - void setSeed(long seed); - - void setAmplitude(double amplitude); -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/IRadMaterial.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/IRadMaterial.java deleted file mode 100644 index 9d2e2d7829..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/IRadMaterial.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -import net.minecraft.item.ItemStack; - -public interface IRadMaterial { - - /** - * @return the amount of Radiation (0-150, commonly, higher values are possible but not recommended!) - */ - int getRadiationLevel(ItemStack aStack); - - /** - * @return 1 for stick, 2 for long rods, 3 for fuel rods - */ - byte getAmountOfMaterial(ItemStack aStack); - - /** - * @return the color of the material for display purposes - */ - short[] getColorForGUI(ItemStack aStack); - - /** - * @return the name of the material for display purposes - */ - String getNameForGUI(ItemStack aStack); -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/ITileAddsInformation.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/ITileAddsInformation.java deleted file mode 100644 index d74263115b..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/ITileAddsInformation.java +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -public interface ITileAddsInformation { - - String[] getInfoData(); -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/ITileDropsContent.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/ITileDropsContent.java deleted file mode 100644 index 1f75115752..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/ITileDropsContent.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -import net.minecraft.inventory.ISidedInventory; - -public interface ITileDropsContent extends ISidedInventory { - - default int[] getDropSlots() { - return new int[] { 0 }; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/ITileHasDifferentTextureSides.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/ITileHasDifferentTextureSides.java deleted file mode 100644 index 698c28fbf7..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/ITileHasDifferentTextureSides.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.util.IIcon; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public interface ITileHasDifferentTextureSides { - - IIcon[] texture = new IIcon[7]; - - @SideOnly(Side.CLIENT) - default IIcon getTextureForSide(ForgeDirection side, int meta) { - return texture[side.ordinal()]; - } - - @SideOnly(Side.CLIENT) - default IIcon getTextureForSide(int side, int meta) { - return this.getTextureForSide(ForgeDirection.values()[side], meta); - } - - @SideOnly(Side.CLIENT) - void registerBlockIcons(IIconRegister par1IconRegister); -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/SideReference.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/SideReference.java deleted file mode 100644 index 88ae5bf5c0..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/SideReference.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -import cpw.mods.fml.common.FMLCommonHandler; - -public class SideReference { - - public static class EffectiveSide { - - public static final boolean Server = FMLCommonHandler.instance() - .getEffectiveSide() - .isServer(); - public static final boolean Client = FMLCommonHandler.instance() - .getEffectiveSide() - .isClient(); - } - - public static class Side { - - public static final boolean Server = FMLCommonHandler.instance() - .getSide() - .isServer(); - public static final boolean Client = FMLCommonHandler.instance() - .getSide() - .isClient(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/VoidMinerDropAdder.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/VoidMinerDropAdder.java deleted file mode 100644 index b83ce7d128..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/VoidMinerDropAdder.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -import com.github.bartimaeusnek.crossmod.galacticgreg.VoidMinerUtility; - -import gregtech.api.interfaces.ISubTagContainer; - -public class VoidMinerDropAdder { - - public static void addDropsToDim(int dimID, ISubTagContainer material, float chance) { - VoidMinerUtility.addMaterialToDimensionList(dimID, material, chance); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/WerkstoffAPI.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/WerkstoffAPI.java deleted file mode 100644 index 01c172382f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/WerkstoffAPI.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; - -public final class WerkstoffAPI { - - @SuppressWarnings("rawtypes") - static Class w; - - static { - try { - w = Class.forName("com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - } - - public static Werkstoff getWerkstoff(String aName) throws NoSuchFieldException, IllegalAccessException { - return (Werkstoff) w.getField(aName) - .get(null); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/WerkstoffAdderRegistry.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/WerkstoffAdderRegistry.java deleted file mode 100644 index 2cd29281f4..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/WerkstoffAdderRegistry.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.API; - -import java.util.HashSet; - -public final class WerkstoffAdderRegistry { - - private static final HashSet toRun = new HashSet<>(); - - private WerkstoffAdderRegistry() {} - - public static void addWerkstoffAdder(Runnable adder) { - toRun.add(adder); - } - - public static void run() { - for (Runnable r : toRun) r.run(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/modularUI/BW_UITextures.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/modularUI/BW_UITextures.java deleted file mode 100644 index 620e9d65af..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/modularUI/BW_UITextures.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.github.bartimaeusnek.bartworks.API.modularUI; - -import static com.github.bartimaeusnek.bartworks.MainMod.MOD_ID; - -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import com.gtnewhorizons.modularui.api.drawable.AdaptableUITexture; -import com.gtnewhorizons.modularui.api.drawable.UITexture; - -public class BW_UITextures { - - public static final AdaptableUITexture BACKGROUND_BROWN = AdaptableUITexture - .of(MOD_ID, "GUI/background/brown", 176, 166, 3); - public static final UITexture BACKGROUND_CIRCUIT_PROGRAMMER = UITexture - .fullImage(MOD_ID, "GUI/background/circuit_programmer"); - - public static final AdaptableUITexture SLOT_BROWN = AdaptableUITexture.of(MOD_ID, "GUI/slot/brown", 18, 18, 1); - - public static final UITexture OVERLAY_SLOT_DISH = UITexture.fullImage(MOD_ID, "GUI/overlay_slot/dish"); - public static final UITexture OVERLAY_SLOT_DNA_FLASK = UITexture.fullImage(MOD_ID, "GUI/overlay_slot/dna_flask"); - public static final UITexture OVERLAY_SLOT_MODULE = UITexture.fullImage(MOD_ID, "GUI/overlay_slot/module"); - public static final UITexture OVERLAY_SLOT_ROD = UITexture.fullImage(MOD_ID, "GUI/overlay_slot/rod"); - public static final UITexture OVERLAY_SLOT_CROSS = UITexture.fullImage(MOD_ID, "GUI/overlay_slot/cross"); - - public static final UITexture PROGRESSBAR_SIEVERT = UITexture.fullImage(MOD_ID, "GUI/progressbar/sievert"); - public static final UITexture PROGRESSBAR_STORED_EU_116 = UITexture - .fullImage(MOD_ID, "GUI/progressbar/stored_eu_116"); - public static final UITexture PROGRESSBAR_FUEL = UITexture.fullImage(MOD_ID, "GUI/progressbar/fuel"); - - public static final UITexture PICTURE_BW_LOGO_47X21 = UITexture.fullImage(MOD_ID, "GUI/picture/bw_logo_47x21"); - public static final UITexture PICTURE_SIEVERT_CONTAINER = UITexture - .fullImage(MOD_ID, "GUI/picture/sievert_container"); - public static final UITexture PICTURE_DECAY_TIME_CONTAINER = UITexture - .fullImage(MOD_ID, "GUI/picture/decay_time_container"); - public static final UITexture PICTURE_DECAY_TIME_INSIDE = UITexture - .fullImage(MOD_ID, "GUI/picture/decay_time_inside"); - public static final UITexture PICTURE_RADIATION = UITexture.fullImage(MOD_ID, "GUI/picture/radiation"); - public static final UITexture PICTURE_WINDMILL_EMPTY = UITexture.fullImage(MOD_ID, "GUI/picture/windmill_empty"); - public static final UITexture[] PICTURE_WINDMILL_ROTATING = IntStream.range(0, 4) - .mapToObj(i -> UITexture.partly(MOD_ID, "GUI/picture/windmill_rotating", 32, 128, 0, i * 32, 32, (i + 1) * 32)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - public static final UITexture PICTURE_STORED_EU_FRAME = UITexture.fullImage(MOD_ID, "GUI/picture/stored_eu_frame"); - public static final UITexture PICTURE_RADIATION_SHUTTER_FRAME = UITexture - .fullImage(MOD_ID, "GUI/picture/radiation_shutter_frame"); - public static final AdaptableUITexture PICTURE_RADIATION_SHUTTER_INSIDE = AdaptableUITexture - .of(MOD_ID, "GUI/picture/radiation_shutter_inside", 51, 48, 1); - - public static final AdaptableUITexture TAB_TITLE_BROWN = AdaptableUITexture - .of(MOD_ID, "GUI/tab/title_brown", 28, 28, 4); - public static final AdaptableUITexture TAB_TITLE_DARK_BROWN = AdaptableUITexture - .of(MOD_ID, "GUI/tab/title_dark_brown", 28, 28, 4); - public static final AdaptableUITexture TAB_TITLE_ANGULAR_BROWN = AdaptableUITexture - .of(MOD_ID, "GUI/tab/title_angular_brown", 28, 28, 4); - - public static final UITexture OVERLAY_BUTTON_ASSEMBLER_MODE = UITexture - .fullImage(MOD_ID, "GUI/overlay_button/assembler_mode"); - public static final UITexture OVERLAY_BUTTON_LINE_MODE = UITexture - .fullImage(MOD_ID, "GUI/overlay_button/line_mode"); -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BWNBTDependantCraftingRecipe.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BWNBTDependantCraftingRecipe.java deleted file mode 100644 index dfcf94115a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BWNBTDependantCraftingRecipe.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.github.bartimaeusnek.bartworks.API.recipe; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.util.BW_Util; - -public class BWNBTDependantCraftingRecipe implements IRecipe { - - ItemStack result; - Map charToStackMap = new HashMap<>(9, 1); - String[] shape; - - @SuppressWarnings({ "SuspiciousSystemArraycopy" }) - public BWNBTDependantCraftingRecipe(ItemStack result, Object... recipe) { - this.result = result; - this.shape = new String[3]; - System.arraycopy(recipe, 0, this.shape, 0, 3); - this.charToStackMap.put(' ', null); - for (int i = 3; i < recipe.length; i += 2) { - this.charToStackMap.put((char) recipe[i], ((ItemStack) recipe[i + 1]).copy()); - } - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof BWNBTDependantCraftingRecipe that)) return false; - - if (!Objects.equals(this.result, that.result) || !Objects.equals(this.charToStackMap, that.charToStackMap)) - return false; - // Probably incorrect - comparing Object[] arrays with Arrays.equals - return Arrays.equals(this.shape, that.shape); - } - - @Override - public int hashCode() { - int result1 = this.result != null ? this.result.hashCode() : 0; - result1 = 31 * result1 + (this.charToStackMap != null ? this.charToStackMap.hashCode() : 0); - return 31 * result1 + Arrays.hashCode(this.shape); - } - - @Override - public boolean matches(InventoryCrafting p_77569_1_, World p_77569_2_) { - for (int x = 0; x < 3; x++) { - for (int y = 0; y < 3; y++) { - ItemStack toCheck = p_77569_1_.getStackInRowAndColumn(y, x); - ItemStack ref = this.charToStackMap.get(this.shape[x].toCharArray()[y]); - if (!BW_Util.areStacksEqualOrNull(toCheck, ref)) return false; - } - } - return true; - } - - @Override - public ItemStack getCraftingResult(InventoryCrafting p_77572_1_) { - return this.result.copy(); - } - - @Override - public int getRecipeSize() { - return 10; - } - - @Override - public ItemStack getRecipeOutput() { - return this.result; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BacterialVatFrontend.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BacterialVatFrontend.java deleted file mode 100644 index 01cf2ecd32..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BacterialVatFrontend.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.github.bartimaeusnek.bartworks.API.recipe; - -import java.util.Arrays; -import java.util.List; - -import javax.annotation.ParametersAreNonnullByDefault; - -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_BioVat; -import com.gtnewhorizons.modularui.api.math.Alignment; - -import gregtech.api.recipe.BasicUIPropertiesBuilder; -import gregtech.api.recipe.NEIRecipePropertiesBuilder; -import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.nei.GT_NEI_DefaultHandler; -import gregtech.nei.RecipeDisplayInfo; -import gregtech.nei.formatter.INEISpecialInfoFormatter; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -public class BacterialVatFrontend extends RecipeMapFrontend { - - public BacterialVatFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, - NEIRecipePropertiesBuilder neiPropertiesBuilder) { - super( - uiPropertiesBuilder, - neiPropertiesBuilder.neiSpecialInfoFormatter(new BacterialVatSpecialValueFormatter())); - } - - @Override - protected List handleNEIItemInputTooltip(List currentTip, - GT_NEI_DefaultHandler.FixedPositionedStack pStack) { - if (pStack.isFluid()) { - currentTip.add(EnumChatFormatting.GRAY + StatCollector.translateToLocal("nei.biovat.input.tooltip")); - return currentTip; - } - return super.handleNEIItemInputTooltip(currentTip, pStack); - } - - @Override - protected List handleNEIItemOutputTooltip(List currentTip, - GT_NEI_DefaultHandler.FixedPositionedStack pStack) { - if (pStack.isFluid()) { - currentTip.add(EnumChatFormatting.GRAY + StatCollector.translateToLocal("nei.biovat.output.tooltip")); - return currentTip; - } - return super.handleNEIItemOutputTooltip(currentTip, pStack); - } - - @Override - protected void drawNEIOverlayForInput(GT_NEI_DefaultHandler.FixedPositionedStack stack) { - drawFluidOverlay(stack); - } - - @Override - protected void drawNEIOverlayForOutput(GT_NEI_DefaultHandler.FixedPositionedStack stack) { - drawFluidOverlay(stack); - } - - private void drawFluidOverlay(GT_NEI_DefaultHandler.FixedPositionedStack stack) { - if (stack.isFluid()) { - drawNEIOverlayText( - "+", - stack, - colorOverride.getTextColorOrDefault("nei_overlay_yellow", 0xFDD835), - 0.5f, - true, - Alignment.TopRight); - return; - } - super.drawNEIOverlayForOutput(stack); - } - - private static class BacterialVatSpecialValueFormatter implements INEISpecialInfoFormatter { - - @Override - public List format(RecipeDisplayInfo recipeInfo) { - int[] tSpecialA = GT_TileEntity_BioVat.specialValueUnpack(recipeInfo.recipe.mSpecialValue); - String glassTier = StatCollector.translateToLocalFormatted("nei.biovat.0.name", tSpecialA[0]); - String sievert; - if (tSpecialA[2] == 1) { - sievert = StatCollector.translateToLocalFormatted("nei.biovat.1.name", tSpecialA[3]); - } else { - sievert = StatCollector.translateToLocalFormatted("nei.biovat.2.name", tSpecialA[3]); - } - return Arrays.asList(glassTier, sievert); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BartWorksRecipeMaps.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BartWorksRecipeMaps.java deleted file mode 100644 index 281184893c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/BartWorksRecipeMaps.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.github.bartimaeusnek.bartworks.API.recipe; - -import com.github.bartimaeusnek.bartworks.API.modularUI.BW_UITextures; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMapBackend; -import gregtech.api.recipe.RecipeMapBuilder; -import gregtech.api.recipe.maps.FuelBackend; -import gregtech.nei.formatter.FuelSpecialValueFormatter; - -public class BartWorksRecipeMaps { - - public static final RecipeMap bioLabRecipes = RecipeMapBuilder.of("bw.recipe.biolab") - .maxIO(6, 2, 1, 0) - .minInputs(1, 1) - .useSpecialSlot() - .slotOverlays((index, isFluid, isOutput, isSpecial) -> { - if (isSpecial) { - return BW_UITextures.OVERLAY_SLOT_MODULE; - } - if (isFluid) { - return GT_UITextures.OVERLAY_SLOT_VIAL_2; - } - if (!isOutput) { - switch (index) { - case 0: - return BW_UITextures.OVERLAY_SLOT_DISH; - case 1: - return BW_UITextures.OVERLAY_SLOT_DNA_FLASK; - case 2: - return GT_UITextures.OVERLAY_SLOT_CIRCUIT; - case 3: - return GT_UITextures.OVERLAY_SLOT_MOLECULAR_1; - case 4: - return GT_UITextures.OVERLAY_SLOT_MOLECULAR_2; - case 5: - return GT_UITextures.OVERLAY_SLOT_DATA_ORB; - } - } - return null; - }) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) - .logo(BW_UITextures.PICTURE_BW_LOGO_47X21) - .logoSize(47, 21) - .logoPos(125, 3) - .disableRegisterNEI() - .build(); - public static final RecipeMap bacterialVatRecipes = RecipeMapBuilder.of("bw.recipe.BacteriaVat") - .maxIO(6, 2, 1, 1) - .minInputs(0, 1) - .useSpecialSlot() - .specialSlotSensitive() - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) - .frontend(BacterialVatFrontend::new) - .disableRegisterNEI() - .build(); - public static final RecipeMap acidGenFuels = RecipeMapBuilder.of("bw.fuels.acidgens", FuelBackend::new) - .maxIO(1, 1, 0, 0) - .neiSpecialInfoFormatter(FuelSpecialValueFormatter.INSTANCE) - .build(); - public static final RecipeMap circuitAssemblyLineRecipes = RecipeMapBuilder.of("bw.recipe.cal") - .maxIO(6, 1, 1, 0) - .minInputs(1, 1) - .useSpecialSlot() - .specialSlotSensitive() - .progressBar(GT_UITextures.PROGRESSBAR_CIRCUIT_ASSEMBLER) - .build(); - public static final RecipeMap radioHatchRecipes = RecipeMapBuilder.of("bw.recipe.radhatch") - .maxIO(1, 0, 0, 0) - .minInputs(1, 0) - .slotOverlays((index, isFluid, isOutput, isSpecial) -> BW_UITextures.OVERLAY_SLOT_ROD) - .logo(BW_UITextures.PICTURE_BW_LOGO_47X21) - .logoSize(47, 21) - .logoPos(118, 55) - .dontUseProgressBar() - .addSpecialTexture(74, 20, 29, 27, BW_UITextures.PICTURE_RADIATION) - .frontend(RadioHatchFrontend::new) - .build(); - public static final RecipeMap electricImplosionCompressorRecipes = RecipeMapBuilder - .of("gt.recipe.electricimplosioncompressor") - .maxIO(6, 2, 1, 1) - .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_IMPLOSION - : null) - .progressBar(GT_UITextures.PROGRESSBAR_COMPRESS) - .build(); - public static final RecipeMap htgrFakeRecipes = RecipeMapBuilder.of("bw.recipe.htgr") - .maxIO(1, 1, 0, 0) - .build(); -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/DynamicGTRecipe.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/DynamicGTRecipe.java deleted file mode 100644 index d409d3ab26..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/DynamicGTRecipe.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.github.bartimaeusnek.bartworks.API.recipe; - -import java.util.ArrayList; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.MainMod; - -import gregtech.api.util.GT_Recipe; - -public class DynamicGTRecipe extends GT_Recipe { - - public DynamicGTRecipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, - int[] aChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, - int aSpecialValue, GT_Recipe originalRecipe) { - super( - aOptimize, - aInputs, - aOutputs, - aSpecialItems, - aChances, - aFluidInputs, - aFluidOutputs, - aDuration, - aEUt, - aSpecialValue); - if (originalRecipe != null) { - this.owners = new ArrayList<>(originalRecipe.owners); - this.stackTraces = new ArrayList<>(originalRecipe.stackTraces); - this.setOwner(MainMod.MOD_ID); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/RadioHatchFrontend.java b/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/RadioHatchFrontend.java deleted file mode 100644 index a6cf4b180e..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/API/recipe/RadioHatchFrontend.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.github.bartimaeusnek.bartworks.API.recipe; - -import java.util.Arrays; -import java.util.List; - -import javax.annotation.ParametersAreNonnullByDefault; - -import net.minecraft.util.StatCollector; - -import gregtech.api.recipe.BasicUIPropertiesBuilder; -import gregtech.api.recipe.NEIRecipePropertiesBuilder; -import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.nei.RecipeDisplayInfo; -import gregtech.nei.formatter.INEISpecialInfoFormatter; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -public class RadioHatchFrontend extends RecipeMapFrontend { - - public RadioHatchFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, - NEIRecipePropertiesBuilder neiPropertiesBuilder) { - super(uiPropertiesBuilder, neiPropertiesBuilder.neiSpecialInfoFormatter(new RadioHatchSpecialInfoFormatter())); - } - - @Override - protected void drawEnergyInfo(RecipeDisplayInfo recipeInfo) {} - - @Override - protected void drawDurationInfo(RecipeDisplayInfo recipeInfo) {} - - private static class RadioHatchSpecialInfoFormatter implements INEISpecialInfoFormatter { - - @Override - public List format(RecipeDisplayInfo recipeInfo) { - int radioLevel = recipeInfo.recipe.mEUt; - int amount = recipeInfo.recipe.mDuration; - long time = recipeInfo.recipe.mSpecialValue; - return Arrays.asList( - StatCollector.translateToLocalFormatted("BW.NEI.display.radhatch.0", radioLevel), - StatCollector.translateToLocalFormatted("BW.NEI.display.radhatch.1", amount), - StatCollector.translateToLocalFormatted("BW.NEI.display.radhatch.2", time * amount / 20.0)); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/ASM/BWCoreStaticReplacementMethodes.java b/src/main/java/com/github/bartimaeusnek/bartworks/ASM/BWCoreStaticReplacementMethodes.java deleted file mode 100644 index 8802105563..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/ASM/BWCoreStaticReplacementMethodes.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.ASM; - -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; - -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.util.NonNullWrappedHashSet; -import com.github.bartimaeusnek.bartworks.util.accessprioritylist.AccessPriorityList; -import com.github.bartimaeusnek.bartworks.util.accessprioritylist.AccessPriorityListNode; - -public class BWCoreStaticReplacementMethodes { - - private static ThreadLocal> RECENTLYUSEDRECIPES = ThreadLocal - .withInitial(AccessPriorityList::new); - - public static void clearRecentlyUsedRecipes() { - // the easiest way to ensure the cache is flushed without causing synchronization overhead - // is to just replace the whole ThreadLocal instance. - RECENTLYUSEDRECIPES = ThreadLocal.withInitial(AccessPriorityList::new); - } - - public static ItemStack findCachedMatchingRecipe(InventoryCrafting inventoryCrafting, World world) { - int i = 0; - ItemStack itemstack = null; - ItemStack itemstack1 = null; - int j; - - for (j = 0; j < inventoryCrafting.getSizeInventory(); ++j) { - ItemStack itemstack2 = inventoryCrafting.getStackInSlot(j); - - if (itemstack2 != null) { - if (i == 0) itemstack = itemstack2; - - if (i == 1) itemstack1 = itemstack2; - - ++i; - } - } - - if (i == 2 && itemstack.getItem() == itemstack1.getItem() - && itemstack.stackSize == 1 - && itemstack1.stackSize == 1 - && itemstack.getItem() - .isRepairable()) { - Item item = itemstack.getItem(); - int j1 = item.getMaxDamage() - itemstack.getItemDamageForDisplay(); - int k = item.getMaxDamage() - itemstack1.getItemDamageForDisplay(); - int l = j1 + k + item.getMaxDamage() * 5 / 100; - int i1 = item.getMaxDamage() - l; - - if (i1 < 0) i1 = 0; - - return new ItemStack(itemstack.getItem(), 1, i1); - - } - IRecipe iPossibleRecipe = null; - AccessPriorityList cache = RECENTLYUSEDRECIPES.get(); - Iterator> it = cache.nodeIterator(); - - while (it.hasNext()) { - AccessPriorityListNode recipeNode = it.next(); - iPossibleRecipe = recipeNode.getELEMENT(); - - if (!iPossibleRecipe.matches(inventoryCrafting, world)) continue; - - cache.addPrioToNode(recipeNode); - return iPossibleRecipe.getCraftingResult(inventoryCrafting); - } - - HashSet recipeSet = new NonNullWrappedHashSet<>(); - List recipeList = CraftingManager.getInstance() - .getRecipeList(); - - for (IRecipe r : recipeList) { - if (r.matches(inventoryCrafting, world)) recipeSet.add(r); - } - - Object[] arr = recipeSet.toArray(); - - if (arr.length == 0) return null; - - IRecipe recipe = (IRecipe) arr[0]; - ItemStack stack = recipe.getCraftingResult(inventoryCrafting); - - if (arr.length != 1) return stack; - - if (stack != null) cache.addLast(recipe); - - return stack; - } - -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/GuiHandler.java b/src/main/java/com/github/bartimaeusnek/bartworks/GuiHandler.java deleted file mode 100644 index c104d09f3a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/GuiHandler.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.API.SideReference; - -import cpw.mods.fml.common.network.IGuiHandler; - -public class GuiHandler implements IGuiHandler { - - @Override - public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - return null; - } - - @Override - public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - if (!SideReference.Side.Client) return this.getServerGuiElement(ID, player, world, x, y, z); - return null; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/MainMod.java b/src/main/java/com/github/bartimaeusnek/bartworks/MainMod.java deleted file mode 100644 index 6526eafe4b..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/MainMod.java +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks; - -import static com.github.bartimaeusnek.bartworks.common.loaders.BioRecipeLoader.runOnServerStarted; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.removeIC2Recipes; -import static gregtech.api.enums.Mods.BartWorks; - -import java.io.IOException; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraftforge.common.MinecraftForge; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import com.github.bartimaeusnek.bartworks.API.API_ConfigValues; -import com.github.bartimaeusnek.bartworks.API.BioObjectAdder; -import com.github.bartimaeusnek.bartworks.API.BioVatLogicAdder; -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.client.ClientEventHandler.TooltipEventHandler; -import com.github.bartimaeusnek.bartworks.client.creativetabs.BioTab; -import com.github.bartimaeusnek.bartworks.client.creativetabs.GT2Tab; -import com.github.bartimaeusnek.bartworks.client.creativetabs.bartworksTab; -import com.github.bartimaeusnek.bartworks.client.textures.PrefixTextureLinker; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.common.items.BW_ItemBlocks; -import com.github.bartimaeusnek.bartworks.common.loaders.ArtificialMicaLine; -import com.github.bartimaeusnek.bartworks.common.loaders.BioCultureLoader; -import com.github.bartimaeusnek.bartworks.common.loaders.BioLabLoader; -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.common.loaders.LocalisationLoader; -import com.github.bartimaeusnek.bartworks.common.loaders.RadioHatchMaterialLoader; -import com.github.bartimaeusnek.bartworks.common.loaders.RecipeLoader; -import com.github.bartimaeusnek.bartworks.common.loaders.RegisterGlassTiers; -import com.github.bartimaeusnek.bartworks.common.loaders.RegisterServerCommands; -import com.github.bartimaeusnek.bartworks.common.loaders.StaticRecipeChangeLoaders; -import com.github.bartimaeusnek.bartworks.common.net.BW_Network; -import com.github.bartimaeusnek.bartworks.server.EventHandler.ServerEventHandler; -import com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration.CircuitImprintLoader; -import com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration.CircuitPartLoader; -import com.github.bartimaeusnek.bartworks.system.material.GT_Enhancement.PlatinumSludgeOverHaul; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.material.processingLoaders.DownTierLoader; -import com.github.bartimaeusnek.bartworks.system.oredict.OreDictHandler; -import com.github.bartimaeusnek.bartworks.util.ResultWrongSievert; -import com.github.bartimaeusnek.bartworks.util.log.DebugLog; -import com.github.bartimaeusnek.crossmod.galacticgreg.VoidMinerUtility; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.Mod; -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.FMLServerStartedEvent; -import cpw.mods.fml.common.event.FMLServerStartingEvent; -import cpw.mods.fml.common.network.IGuiHandler; -import cpw.mods.fml.common.network.NetworkRegistry; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.GT_Version; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Mods; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; - -@Mod(modid = MainMod.MOD_ID, name = MainMod.NAME, version = GT_Version.VERSION, dependencies = """ - required-after:IC2;\ - required-after:gregtech;\ - after:berriespp;\ - after:tectech;\ - after:GalacticraftMars;\ - after:GalacticraftCore;\ - after:Forestry;\ - after:ProjRed|Illumination;\ - after:RandomThings;\ - before:miscutils;""") -public final class MainMod { - - public static final String NAME = "BartWorks"; - public static final String MOD_ID = Mods.Names.BART_WORKS; - public static final String APIVERSION = "11"; - public static final Logger LOGGER = LogManager.getLogger(MainMod.NAME); - public static final CreativeTabs GT2 = new GT2Tab("GT2C"); - public static final CreativeTabs BIO_TAB = new BioTab("BioTab"); - public static final CreativeTabs BWT = new bartworksTab(BartWorks.ID); - public static final IGuiHandler GH = new GuiHandler(); - - @Mod.Instance(MainMod.MOD_ID) - public static MainMod instance; - - public static BW_Network BW_Network_instance = new BW_Network(); - - public MainMod() { - - } - - @Mod.EventHandler - public void preInit(FMLPreInitializationEvent preinit) { - MainMod.LOGGER.info("Found GT++, continuing"); - - GameRegistry.registerBlock(ItemRegistry.bw_glasses[0], BW_ItemBlocks.class, "BW_GlasBlocks"); - GameRegistry.registerBlock(ItemRegistry.bw_glasses[1], BW_ItemBlocks.class, "BW_GlasBlocks2"); - - if (API_ConfigValues.debugLog) { - try { - DebugLog.initDebugLog(preinit); - } catch (IOException e) { - MainMod.LOGGER.catching(e); - } - } - - WerkstoffLoader.setUp(); - - BioCultureLoader.run(); - - Werkstoff.init(); - GregTech_API.sAfterGTPostload.add(new CircuitPartLoader()); - if (SideReference.Side.Client) { - GregTech_API.sBeforeGTLoad.add(new PrefixTextureLinker()); - } - - RegisterGlassTiers.run(); - } - - @Mod.EventHandler - public void init(FMLInitializationEvent init) { - if (SideReference.Side.Client && ConfigHandler.tooltips) - MinecraftForge.EVENT_BUS.register(new TooltipEventHandler()); - ServerEventHandler serverEventHandler = new ServerEventHandler(); - if (SideReference.Side.Server) { - MinecraftForge.EVENT_BUS.register(serverEventHandler); - } - FMLCommonHandler.instance() - .bus() - .register(serverEventHandler); - BioLabLoader.run(); - - WerkstoffLoader.runInit(); - - ItemRegistry.run(); - } - - @Mod.EventHandler - public void postInit(FMLPostInitializationEvent postinit) { - - RecipeLoader.run(); - - NetworkRegistry.INSTANCE.registerGuiHandler(MainMod.instance, MainMod.GH); - - ArtificialMicaLine.runArtificialMicaRecipe(); - BioObjectAdder.regenerateBioFluids(); - - WerkstoffLoader.run(); - LocalisationLoader.localiseAll(); - - CheckRecipeResultRegistry.register(new ResultWrongSievert(0, ResultWrongSievert.NeededSievertType.EXACTLY)); - - RadioHatchMaterialLoader.run(); - } - - @Mod.EventHandler - public void onServerStarting(FMLServerStartingEvent event) { - RegisterServerCommands.registerAll(event); - } - - @Mod.EventHandler - public void onServerStarted(FMLServerStartedEvent event) { - MainMod.runOnPlayerJoined(ConfigHandler.classicMode, ConfigHandler.disableExtraGassesForEBF); - } - - @Mod.EventHandler - public void onModLoadingComplete(FMLLoadCompleteEvent event) { - removeIC2Recipes(); - StaticRecipeChangeLoaders.addElectricImplosionCompressorRecipes(); - PlatinumSludgeOverHaul.replacePureElements(); - - runOnServerStarted(); - StaticRecipeChangeLoaders.unificationRecipeEnforcer(); - VoidMinerUtility.generateDropMaps(); - } - - private static boolean recipesAdded; - - public static void runOnPlayerJoined(boolean classicMode, boolean disableExtraGasRecipes) { - OreDictHandler.adaptCacheForWorld(); - CircuitImprintLoader.run(); - BioVatLogicAdder.RadioHatch.runBasicItemIntegration(); - if (!recipesAdded) { - if (!disableExtraGasRecipes) StaticRecipeChangeLoaders.addEBFGasRecipes(); - - if (classicMode) DownTierLoader.run(); - - recipesAdded = true; - } - - // Accept recipe map changes into Buffers - RecipeMap.ALL_RECIPE_MAPS.values() - .forEach( - map -> map.getBackend() - .reInit()); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/ClientEventHandler/TooltipEventHandler.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/ClientEventHandler/TooltipEventHandler.java deleted file mode 100644 index edf9b7f07f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/ClientEventHandler/TooltipEventHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.github.bartimaeusnek.bartworks.client.ClientEventHandler; - -import static gregtech.api.util.GT_Utility.getColoredTierNameFromTier; - -import net.minecraft.block.Block; -import net.minecraft.util.StatCollector; -import net.minecraftforge.event.entity.player.ItemTooltipEvent; - -import com.github.bartimaeusnek.bartworks.API.GlassTier; - -import cpw.mods.fml.common.eventhandler.EventPriority; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class TooltipEventHandler { - - @SideOnly(Side.CLIENT) - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void getTooltip(ItemTooltipEvent event) { - - if (event == null || event.itemStack == null || event.itemStack.getItem() == null) return; - - final Block block = Block.getBlockFromItem(event.itemStack.getItem()); - final int meta = event.itemStack.getItemDamage(); - - int tier = GlassTier.getGlassTier(block, meta); - - if (tier == 0) return; - - event.toolTip.add( - StatCollector.translateToLocal("tooltip.glass_tier.0.name") + " " - + getColoredTierNameFromTier((byte) tier)); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/BioTab.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/BioTab.java deleted file mode 100644 index 8d3d457e06..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/BioTab.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.client.creativetabs; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; - -import com.github.bartimaeusnek.bartworks.common.loaders.BioItemList; - -public class BioTab extends CreativeTabs { - - public BioTab(String lable) { - super(lable); - } - - @Override - public Item getTabIconItem() { - return BioItemList.getPetriDish(null) - .getItem(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/GT2Tab.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/GT2Tab.java deleted file mode 100644 index 5a42164597..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/GT2Tab.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.client.creativetabs; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; - -public class GT2Tab extends CreativeTabs { - - public GT2Tab(String lable) { - super(lable); - } - - @Override - public Item getTabIconItem() { - return ItemRegistry.TAB; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/bartworksTab.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/bartworksTab.java deleted file mode 100644 index 53be7436ce..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/creativetabs/bartworksTab.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.client.creativetabs; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; - -public class bartworksTab extends CreativeTabs { - - public bartworksTab(String lable) { - super(lable); - } - - @Override - public Item getTabIconItem() { - return ItemRegistry.ROCKCUTTER_HV; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/gui/BW_GUIContainer_RotorBlock.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/gui/BW_GUIContainer_RotorBlock.java deleted file mode 100644 index e2bb68b290..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/gui/BW_GUIContainer_RotorBlock.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.client.gui; - -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; - -import org.lwjgl.opengl.GL11; - -import com.github.bartimaeusnek.bartworks.MainMod; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.core.block.kineticgenerator.container.ContainerWindKineticGenerator; -import ic2.core.block.kineticgenerator.gui.GuiWindKineticGenerator; -import ic2.core.util.GuiTooltipHelper; - -@SideOnly(Side.CLIENT) -public class BW_GUIContainer_RotorBlock extends GuiWindKineticGenerator { - - public ContainerWindKineticGenerator container; - public String name; - - public BW_GUIContainer_RotorBlock(ContainerWindKineticGenerator container1) { - super(container1); - this.container = container1; - this.name = StatCollector.translateToLocal("tile.BWRotorBlock.0.name"); - } - - @Override - protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { - this.fontRendererObj - .drawString(this.name, (this.xSize - this.fontRendererObj.getStringWidth(this.name)) / 2, 6, 2157374); - if (this.container.base.checkrotor()) { - if (!this.container.base.rotorspace()) { - this.fontRendererObj.drawString( - StatCollector.translateToLocal("ic2.WindKineticGenerator.gui.rotorspace"), - 27, - 52, - 2157374); - } else if (this.container.base.checkrotor() && !this.container.base.guiisminWindStrength()) { - this.fontRendererObj.drawString( - StatCollector.translateToLocal("ic2.WindKineticGenerator.gui.windweak1"), - 27, - 52, - 2157374); - } else { - this.fontRendererObj.drawString(this.container.base.getRotorhealth() + " %", 46, 52, 2157374); - if (this.container.base.guiisoverload()) { - GuiTooltipHelper.drawAreaTooltip( - mouseX - this.guiLeft, - mouseY - this.guiTop, - StatCollector.translateToLocal("ic2.WindKineticGenerator.error.overload"), - 44, - 27, - 79, - 52); - } - } - } else { - this.fontRendererObj - .drawString(StatCollector.translateToLocal("ic2.WindKineticGenerator.gui.rotormiss"), 27, 52, 2157374); - } - } - - @Override - protected void drawGuiContainerBackgroundLayer(float f, int x, int y) { - GL11.glColor3f(0.5f, 0.25f, 0.07f); - this.mc.getTextureManager() - .bindTexture(new ResourceLocation(MainMod.MOD_ID, "textures/GUI/GUIPrimitiveKUBox.png")); - int j = (this.width - this.xSize) / 2; - int k = (this.height - this.ySize) / 2; - this.drawTexturedModalRect(j, k, 0, 0, this.xSize, this.ySize); - if (this.container.base.guiisoverload() && this.container.base.checkrotor()) { - this.drawTexturedModalRect(j + 44, k + 20, 176, 0, 30, 26); - this.drawTexturedModalRect(j + 102, k + 20, 176, 0, 30, 26); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_EICPistonVisualizer.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_EICPistonVisualizer.java deleted file mode 100644 index 6bf5fd3fe1..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_EICPistonVisualizer.java +++ /dev/null @@ -1,112 +0,0 @@ -package com.github.bartimaeusnek.bartworks.client.renderer; - -import net.minecraft.block.Block; -import net.minecraft.client.particle.EntityFX; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import org.apache.commons.lang3.tuple.Pair; -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; - -@SideOnly(Side.CLIENT) -public class BW_EICPistonVisualizer extends EntityFX { - - public BW_EICPistonVisualizer(World world, int x, int y, int z, int age) { - super(world, x, y, z); - this.prevPosX = this.posX; - this.prevPosY = this.posY; - this.prevPosZ = this.posZ; - this.particleMaxAge = age; - } - - @Override - public void onUpdate() { - if (this.particleAge++ >= this.particleMaxAge) this.setDead(); - } - - @Override - public void renderParticle(Tessellator p_70539_1_, float p_70539_2_, float p_70539_3_, float p_70539_4_, - float p_70539_5_, float p_70539_6_, float p_70539_7_) { - Tessellator tessellator = Tessellator.instance; - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glDepthMask(false); - - RenderBlocks.getInstance().blockAccess = this.worldObj; - RenderBlocks.getInstance() - .setRenderFromInside(false); - - // Look at nearby block for correct tiered block to use - Pair tieredBlock; - if (this.worldObj != null) { - int nX = (int) this.posX; - int nY = (int) this.posY + 1; - int nZ = (int) this.posZ; - Block neighborBlock = this.worldObj.getBlock(nX, nY, nZ); - int neighborMeta = this.worldObj.getBlockMetadata(nX, nY, nZ); - tieredBlock = Pair.of(neighborBlock, neighborMeta); - } else { - tieredBlock = Pair.of(GregTech_API.sBlockMetal5, 2); - } - - IIcon icon = tieredBlock.getKey() - .getIcon(0, tieredBlock.getValue()); - - double x = this.posX + 1; - double z = this.posZ; - - double f11 = x - interpPosX; - double f12 = this.posY - interpPosY; - double f13 = z - interpPosZ; - tessellator.setTranslation(f11 - x, f12 - this.posY, f13 - z); - RenderBlocks.getInstance() - .renderBlockUsingTexture(tieredBlock.getKey(), (int) x, (int) this.posY, (int) z, icon); - - x = this.posX - 1; - z = this.posZ; - - f11 = x - interpPosX; - f13 = z - interpPosZ; - tessellator.setTranslation(f11 - x, f12 - this.posY, f13 - z); - RenderBlocks.getInstance() - .renderBlockUsingTexture(tieredBlock.getKey(), (int) x, (int) this.posY, (int) z, icon); - - x = this.posX; - z = this.posZ + 1; - - f11 = x - interpPosX; - f13 = z - interpPosZ; - tessellator.setTranslation(f11 - x, f12 - this.posY, f13 - z); - RenderBlocks.getInstance() - .renderBlockUsingTexture(tieredBlock.getKey(), (int) x, (int) this.posY, (int) z, icon); - - x = this.posX; - z = this.posZ - 1; - - f11 = x - interpPosX; - f13 = z - interpPosZ; - tessellator.setTranslation(f11 - x, f12 - this.posY, f13 - z); - RenderBlocks.getInstance() - .renderBlockUsingTexture(tieredBlock.getKey(), (int) x, (int) this.posY, (int) z, icon); - - tessellator.setTranslation(0d, 0d, 0d); - - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glDepthMask(true); - } - - @Override - public int getFXLayer() { - return 1; - } - - @Override - public boolean shouldRenderInPass(int pass) { - return pass == 2; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_GT_ItemRenderer.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_GT_ItemRenderer.java deleted file mode 100644 index 4c27a2a3f9..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_GT_ItemRenderer.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.client.renderer; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.entity.RenderItem; -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 org.lwjgl.opengl.GL11; - -import com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration.BW_Meta_Items; -import com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration.CircuitImprintLoader; -import com.github.bartimaeusnek.bartworks.util.BW_Util; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.util.GT_Utility; -import gregtech.common.render.GT_RenderUtil; - -@SideOnly(Side.CLIENT) -public class BW_GT_ItemRenderer implements IItemRenderer { - - public BW_GT_ItemRenderer() { - for (BW_Meta_Items.BW_GT_MetaGen_Item_Hook tItem : BW_Meta_Items.BW_GT_MetaGen_Item_Hook.sInstances) { - MinecraftForgeClient.registerItemRenderer(tItem, this); - } - } - - @Override - public boolean handleRenderType(ItemStack aStack, IItemRenderer.ItemRenderType aType) { - if (!GT_Utility.isStackInvalid(aStack) && aStack.getItemDamage() >= 0) { - return aType == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON - || aType == IItemRenderer.ItemRenderType.INVENTORY - || aType == IItemRenderer.ItemRenderType.EQUIPPED - || aType == IItemRenderer.ItemRenderType.ENTITY; - } - return false; - } - - @Override - public boolean shouldUseRenderHelper(IItemRenderer.ItemRenderType aType, ItemStack aStack, - IItemRenderer.ItemRendererHelper aHelper) { - if (GT_Utility.isStackInvalid(aStack)) { - return false; - } - return aType == IItemRenderer.ItemRenderType.ENTITY; - } - - @Override - public void renderItem(IItemRenderer.ItemRenderType type, ItemStack aStack, Object... data) { - if (!GT_Utility.isStackInvalid(aStack)) { - short aMetaData = (short) aStack.getItemDamage(); - if (aMetaData >= 0) { - BW_Meta_Items.BW_GT_MetaGen_Item_Hook aItem = (BW_Meta_Items.BW_GT_MetaGen_Item_Hook) aStack.getItem(); - GL11.glEnable(3042); - if (type == IItemRenderer.ItemRenderType.ENTITY) { - if (RenderItem.renderInFrame) { - GL11.glScalef(0.85F, 0.85F, 0.85F); - GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); - } - GL11.glTranslated(-0.5D, -0.42D, 0.0D); - } - - GL11.glColor3f(1.0F, 1.0F, 1.0F); - IIcon tIcon = (IIcon) BW_Util.get2DCoordFrom1DArray(aMetaData, 0, 2, aItem.mIconList); - - Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); - GL11.glBlendFunc(770, 771); - if (IItemRenderer.ItemRenderType.INVENTORY.equals(type)) { - if (aMetaData < CircuitImprintLoader.reverseIDs) - GT_RenderUtil.renderItemIcon(tIcon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); - else { - for (int i = 0; i < 4; i++) { - GT_RenderUtil.renderItemIcon( - tIcon, - 0.0D + i * 2D, - 0.0D + i * 2D, - 10.0D + i * 2D, - 10.0D + i * 2D, - 0.001D, - 0.0F, - 0.0F, - -1.0F); - } - } - } else if (aMetaData < CircuitImprintLoader.reverseIDs) ItemRenderer.renderItemIn2D( - Tessellator.instance, - tIcon.getMaxU(), - tIcon.getMinV(), - tIcon.getMinU(), - tIcon.getMaxV(), - tIcon.getIconWidth(), - tIcon.getIconHeight(), - 0.0625F); - - IIcon tOverlay = (IIcon) BW_Util.get2DCoordFrom1DArray(aMetaData, 1, 2, aItem.mIconList); - GL11.glColor3f(1.0F, 1.0F, 1.0F); - if (tOverlay != null) { - Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); - GL11.glBlendFunc(770, 771); - if (IItemRenderer.ItemRenderType.INVENTORY.equals(type)) { - GT_RenderUtil.renderItemIcon(tOverlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); - } else { - ItemRenderer.renderItemIn2D( - Tessellator.instance, - tOverlay.getMaxU(), - tOverlay.getMinV(), - tOverlay.getMinU(), - tOverlay.getMaxV(), - tOverlay.getIconWidth(), - tOverlay.getIconHeight(), - 0.0625F); - } - } - } - - GL11.glDisable(3042); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_GT_Vanilla_Texture.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_GT_Vanilla_Texture.java deleted file mode 100644 index a082a44d31..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_GT_Vanilla_Texture.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.client.renderer; - -import net.minecraft.block.Block; -import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.interfaces.IIconContainer; - -@SideOnly(Side.CLIENT) -public class BW_GT_Vanilla_Texture implements IIconContainer { - - IIcon packed; - - public BW_GT_Vanilla_Texture(Block block, ForgeDirection side) { - this.packed = block.getBlockTextureFromSide(side.flag); - } - - public BW_GT_Vanilla_Texture(Block block, int side) { - this.packed = block.getBlockTextureFromSide(side); - } - - public BW_GT_Vanilla_Texture(IIcon packed) { - this.packed = packed; - } - - @Override - public IIcon getIcon() { - return this.packed; - } - - @Override - public IIcon getOverlayIcon() { - return null; - } - - @Override - public ResourceLocation getTextureFile() { - return new ResourceLocation(this.packed.getIconName()); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_Renderer_Block_Ores.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_Renderer_Block_Ores.java deleted file mode 100644 index 7bb04e0c39..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/BW_Renderer_Block_Ores.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.client.renderer; - -import static gregtech.common.render.GT_Renderer_Block.renderNegativeXFacing; -import static gregtech.common.render.GT_Renderer_Block.renderNegativeYFacing; -import static gregtech.common.render.GT_Renderer_Block.renderNegativeZFacing; -import static gregtech.common.render.GT_Renderer_Block.renderPositiveXFacing; -import static gregtech.common.render.GT_Renderer_Block.renderPositiveYFacing; -import static gregtech.common.render.GT_Renderer_Block.renderPositiveZFacing; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; - -import org.lwjgl.opengl.GL11; - -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_Block_TE; -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_Blocks; -import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; -import gregtech.GT_Mod; - -@ThreadSafeISBRH(perThread = true) -public class BW_Renderer_Block_Ores implements ISimpleBlockRenderingHandler { - - public static BW_Renderer_Block_Ores INSTANCE; - public static int renderID; - public static final float blockMin = 0.0F; - public static final float blockMax = 1.0F; - - public static void register() { - renderID = RenderingRegistry.getNextAvailableRenderId(); - INSTANCE = new BW_Renderer_Block_Ores(); - RenderingRegistry.registerBlockHandler(INSTANCE); - } - - @Override - public void renderInventoryBlock(Block aBlock, int aMeta, int modelId, RenderBlocks aRenderer) { - BW_MetaGenerated_Block_TE tTileEntity = ((BW_MetaGenerated_Blocks) aBlock).getProperTileEntityForRendering(); - tTileEntity.mMetaData = (short) aMeta; - aRenderer.enableAO = false; - aRenderer.useInventoryTint = true; - aBlock.setBlockBoundsForItemRender(); - aRenderer.setRenderBoundsFromBlock(aBlock); - GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - renderNegativeYFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - tTileEntity.getTexture(aBlock, ForgeDirection.DOWN), - true); - renderPositiveYFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - tTileEntity.getTexture(aBlock, ForgeDirection.UP), - true); - renderNegativeZFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - tTileEntity.getTexture(aBlock, ForgeDirection.NORTH), - true); - renderPositiveZFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - tTileEntity.getTexture(aBlock, ForgeDirection.SOUTH), - true); - renderNegativeXFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - tTileEntity.getTexture(aBlock, ForgeDirection.WEST), - true); - renderPositiveXFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - tTileEntity.getTexture(aBlock, ForgeDirection.EAST), - true); - aRenderer.setRenderBoundsFromBlock(aBlock); - aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); - GL11.glTranslatef(0.5F, 0.5F, 0.5F); - aRenderer.useInventoryTint = false; - } - - // spotless:off - @Override - public boolean renderWorldBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, int modelId, RenderBlocks aRenderer) { - BW_MetaGenerated_Blocks tBlock = (BW_MetaGenerated_Blocks) aBlock; - if(tBlock == null) return false; - - BW_MetaGenerated_Block_TE fakeTileEntity = tBlock.getProperTileEntityForRendering(); // meh - if(fakeTileEntity == null) return false; - - BW_MetaGenerated_Block_TE actualTileEntity = (BW_MetaGenerated_Block_TE) aWorld.getTileEntity(aX, aY, aZ); - if(actualTileEntity == null) return false; - - fakeTileEntity.mMetaData = actualTileEntity.mMetaData; - aRenderer.useInventoryTint = false; - aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); - aRenderer.enableAO = Minecraft.isAmbientOcclusionEnabled() && GT_Mod.gregtechproxy.mRenderTileAmbientOcclusion; - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.DOWN), true); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.UP), true); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.NORTH), true); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.SOUTH), true); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.WEST), true); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, fakeTileEntity.getTexture(aBlock, ForgeDirection.EAST), true); - return true; - } - // spotless:on - - @Override - public boolean shouldRender3DInInventory(int modelId) { - return true; - } - - @Override - public int getRenderId() { - return renderID; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/RendererGlasBlock.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/RendererGlasBlock.java deleted file mode 100644 index 3beeb8d2ea..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/RendererGlasBlock.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.client.renderer; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.world.IBlockAccess; - -import org.lwjgl.opengl.GL11; - -import com.github.bartimaeusnek.bartworks.common.blocks.BW_GlasBlocks; -import com.github.bartimaeusnek.bartworks.common.blocks.BW_GlasBlocks2; -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -@ThreadSafeISBRH(perThread = false) -public class RendererGlasBlock implements ISimpleBlockRenderingHandler { - - public static int renderID; - public static RendererGlasBlock INSTANCE; - - public static void register() { - renderID = RenderingRegistry.getNextAvailableRenderId(); - INSTANCE = new RendererGlasBlock(); - RenderingRegistry.registerBlockHandler(INSTANCE); - } - - @Override - public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { - Tessellator tessellator = Tessellator.instance; - block.setBlockBoundsForItemRender(); - renderer.setRenderBoundsFromBlock(block); - GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, -1.0F, 0.0F); - renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 0, metadata)); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, 1.0F, 0.0F); - renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 1, metadata)); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, 0.0F, -1.0F); - renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 2, metadata)); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, 0.0F, 1.0F); - renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 3, metadata)); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(-1.0F, 0.0F, 0.0F); - renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 4, metadata)); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(1.0F, 0.0F, 0.0F); - renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, renderer.getBlockIconFromSideAndMetadata(block, 5, metadata)); - tessellator.draw(); - GL11.glTranslatef(0.5F, 0.5F, 0.5F); - } - - // spotless:off - @Override - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, - RenderBlocks renderer) { - boolean flag = false; - if (block instanceof BW_GlasBlocks) { - flag |= renderer.renderStandardBlock(ItemRegistry.bw_fake_glasses, x, y, z); - flag |= renderer.renderStandardBlockWithColorMultiplier(block, x, y, z, - ((BW_GlasBlocks) block).getColor(world.getBlockMetadata(x, y, z))[0] / 255f, - ((BW_GlasBlocks) block).getColor(world.getBlockMetadata(x, y, z))[1] / 255f, - ((BW_GlasBlocks) block).getColor(world.getBlockMetadata(x, y, z))[2] / 255f); - } - if (block instanceof BW_GlasBlocks2) { - flag |= renderer.renderStandardBlock(ItemRegistry.bw_fake_glasses2, x, y, z); - flag |= renderer.renderStandardBlockWithColorMultiplier(block, x, y, z, - ((BW_GlasBlocks2) block).getColor(world.getBlockMetadata(x, y, z))[0] / 255f, - ((BW_GlasBlocks2) block).getColor(world.getBlockMetadata(x, y, z))[1] / 255f, - ((BW_GlasBlocks2) block).getColor(world.getBlockMetadata(x, y, z))[2] / 255f); - } - return flag; - } - // spotless:on - - @Override - public boolean shouldRender3DInInventory(int modelId) { - return true; - } - - @Override - public int getRenderId() { - return RendererGlasBlock.renderID; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/RendererSwitchingColorFluid.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/RendererSwitchingColorFluid.java deleted file mode 100644 index 7a12074e02..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/renderer/RendererSwitchingColorFluid.java +++ /dev/null @@ -1,333 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.client.renderer; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.fluids.BlockFluidBase; -import net.minecraftforge.fluids.IFluidBlock; - -import com.github.bartimaeusnek.bartworks.common.blocks.BioFluidBlock; -import com.github.bartimaeusnek.bartworks.common.loaders.FluidLoader; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_BioVat; -import com.github.bartimaeusnek.bartworks.util.Coords; -import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -@ThreadSafeISBRH(perThread = false) -public class RendererSwitchingColorFluid implements ISimpleBlockRenderingHandler { - - private static final float LIGHT_Y_NEG = 0.5f; - private static final float LIGHT_Y_POS = 1f; - private static final float LIGHT_XZ_NEG = 0.8f; - private static final float LIGHT_XZ_POS = 0.6f; - private static final float THREE_QUARTERS_FILLED = 0.875f; - private static final double RENDER_OFFSET = 0.0010000000474974513; - - public static RendererSwitchingColorFluid instance; - - public static void register() { - instance = new RendererSwitchingColorFluid(); - } - - private float getFluidHeightAverage(float[] flow) { - float total = 0.0f; - int count = 0; - float end = 0.0f; - for (float aFlow : flow) { - if (aFlow >= RendererSwitchingColorFluid.THREE_QUARTERS_FILLED - && end != RendererSwitchingColorFluid.LIGHT_Y_POS) { - end = aFlow; - } - if (aFlow >= 0.0f) { - total += aFlow; - ++count; - } - } - if (end == 0.0f && count != 0) { - end = total / count; - } - return end; - } - - private float getFluidHeightForRender(IBlockAccess world, int x, int y, int z, BlockFluidBase block) { - - if (world.getBlock(x, y, z) == block) { - Block vOrigin = world.getBlock(x, y + 1, z); - if (vOrigin.getMaterial() - .isLiquid() || vOrigin instanceof IFluidBlock) { - return RendererSwitchingColorFluid.LIGHT_Y_POS; - } - if (world.getBlockMetadata(x, y, z) == block.getMaxRenderHeightMeta()) { - return RendererSwitchingColorFluid.THREE_QUARTERS_FILLED; - } - } - return !world.getBlock(x, y, z) - .getMaterial() - .isSolid() && world.getBlock(x, y + 1, z) == block ? RendererSwitchingColorFluid.LIGHT_Y_POS - : block.getQuantaPercentage(world, x, y, z) * RendererSwitchingColorFluid.THREE_QUARTERS_FILLED; - } - - public void renderInventoryBlock(Block block, int metadata, int modelID, RenderBlocks renderer) {} - - @SideOnly(Side.CLIENT) - public boolean renderWorldBlock(IBlockAccess iBlockAccess, int x, int y, int z, Block block, int modelId, - RenderBlocks renderer) { - if (!(block instanceof BioFluidBlock)) return false; - Tessellator tessellator = Tessellator.instance; - Coords blockat = new Coords( - x, - y, - z, - iBlockAccess.getTileEntity(x, y, z) - .getWorldObj().provider.dimensionId); - Integer rgb = GT_TileEntity_BioVat.staticColorMap.get(blockat); - - int r, g, b; - - if (rgb != null) { - r = rgb >> 16 & 0xFF; - g = rgb >> 8 & 0xFF; - b = rgb & 0xFF; - } else { - r = 0; - g = 0; - b = 255; - } - float red = r / 255f, green = g / 255f, blue = b / 255f; - - BlockFluidBase blockFluidBase = (BlockFluidBase) block; - boolean renderTop = iBlockAccess.getBlock(x, y + 1, z) != blockFluidBase; - boolean renderBottom = block.shouldSideBeRendered(iBlockAccess, x, y - 1, z, 0) - && iBlockAccess.getBlock(x, y - 1, z) != blockFluidBase; - boolean[] renderSides = { block.shouldSideBeRendered(iBlockAccess, x, y, z - 1, 2), - block.shouldSideBeRendered(iBlockAccess, x, y, z + 1, 3), - block.shouldSideBeRendered(iBlockAccess, x - 1, y, z, 4), - block.shouldSideBeRendered(iBlockAccess, x + 1, y, z, 5) }; - if (!renderTop && !renderBottom && !renderSides[0] && !renderSides[1] && !renderSides[2] && !renderSides[3]) { - return false; - } - boolean rendered = false; - float fluidHeightForRender = this.getFluidHeightForRender(iBlockAccess, x, y, z, blockFluidBase); - double heightNW, heightSW, heightSE, heightNE; - - if (fluidHeightForRender != RendererSwitchingColorFluid.LIGHT_Y_POS) { - float fluidHeightForRender1 = this.getFluidHeightForRender(iBlockAccess, x - 1, y, z - 1, blockFluidBase); - float fluidHeightForRender2 = this.getFluidHeightForRender(iBlockAccess, x - 1, y, z, blockFluidBase); - float fluidHeightForRender3 = this.getFluidHeightForRender(iBlockAccess, x - 1, y, z + 1, blockFluidBase); - float fluidHeightForRender4 = this.getFluidHeightForRender(iBlockAccess, x, y, z - 1, blockFluidBase); - float fluidHeightForRender5 = this.getFluidHeightForRender(iBlockAccess, x, y, z + 1, blockFluidBase); - float fluidHeightForRender6 = this.getFluidHeightForRender(iBlockAccess, x + 1, y, z - 1, blockFluidBase); - float fluidHeightForRender7 = this.getFluidHeightForRender(iBlockAccess, x + 1, y, z, blockFluidBase); - float fluidHeightForRender8 = this.getFluidHeightForRender(iBlockAccess, x + 1, y, z + 1, blockFluidBase); - heightNW = this.getFluidHeightAverage( - new float[] { fluidHeightForRender1, fluidHeightForRender2, fluidHeightForRender4, - fluidHeightForRender }); - heightSW = this.getFluidHeightAverage( - new float[] { fluidHeightForRender2, fluidHeightForRender3, fluidHeightForRender5, - fluidHeightForRender }); - heightSE = this.getFluidHeightAverage( - new float[] { fluidHeightForRender5, fluidHeightForRender7, fluidHeightForRender8, - fluidHeightForRender }); - heightNE = this.getFluidHeightAverage( - new float[] { fluidHeightForRender4, fluidHeightForRender6, fluidHeightForRender7, - fluidHeightForRender }); - } else { - heightNW = fluidHeightForRender; - heightSW = fluidHeightForRender; - heightSE = fluidHeightForRender; - heightNE = fluidHeightForRender; - } - - if (renderer.renderAllFaces || renderTop) { - rendered = true; - IIcon iconStill = this.getNullCheckedIiconOrFallbackTexture(); - float flowDir = (float) BlockFluidBase.getFlowDirection(iBlockAccess, x, y, z); - - heightNW -= RendererSwitchingColorFluid.RENDER_OFFSET; - heightSW -= RendererSwitchingColorFluid.RENDER_OFFSET; - heightSE -= RendererSwitchingColorFluid.RENDER_OFFSET; - heightNE -= RendererSwitchingColorFluid.RENDER_OFFSET; - - double dInterpolatedU, dInterpolatedV, dInterpolatedU2, dInterpolatedV2, dInterpolatedU3, dInterpolatedV3, - dInterpolatedU4, dInterpolatedV4; - - if (flowDir < -999.0f) { - dInterpolatedU = iconStill.getInterpolatedU(0.0); - dInterpolatedV = iconStill.getInterpolatedV(0.0); - dInterpolatedU2 = dInterpolatedU; - dInterpolatedV2 = iconStill.getInterpolatedV(16.0); - dInterpolatedU3 = iconStill.getInterpolatedU(16.0); - dInterpolatedV3 = dInterpolatedV2; - dInterpolatedU4 = dInterpolatedU3; - dInterpolatedV4 = dInterpolatedV; - } else { - float xFlow = MathHelper.sin(flowDir) * 0.25f, zFlow = MathHelper.cos(flowDir) * 0.25f; - dInterpolatedU = iconStill.getInterpolatedU(8.0f + (-zFlow - xFlow) * 16.0f); - dInterpolatedV = iconStill.getInterpolatedV(8.0f + (-zFlow + xFlow) * 16.0f); - dInterpolatedU2 = iconStill.getInterpolatedU(8.0f + (-zFlow + xFlow) * 16.0f); - dInterpolatedV2 = iconStill.getInterpolatedV(8.0f + (zFlow + xFlow) * 16.0f); - dInterpolatedU3 = iconStill.getInterpolatedU(8.0f + (zFlow + xFlow) * 16.0f); - dInterpolatedV3 = iconStill.getInterpolatedV(8.0f + (zFlow - xFlow) * 16.0f); - dInterpolatedU4 = iconStill.getInterpolatedU(8.0f + (zFlow - xFlow) * 16.0f); - dInterpolatedV4 = iconStill.getInterpolatedV(8.0f + (-zFlow - xFlow) * 16.0f); - } - - tessellator.setBrightness(block.getMixedBrightnessForBlock(iBlockAccess, x, y, z)); - tessellator.setColorOpaque_F( - RendererSwitchingColorFluid.LIGHT_Y_POS * red, - RendererSwitchingColorFluid.LIGHT_Y_POS * green, - RendererSwitchingColorFluid.LIGHT_Y_POS * blue); - - tessellator.addVertexWithUV(x, y + heightNW, z, dInterpolatedU, dInterpolatedV); - tessellator.addVertexWithUV(x, y + heightSW, z + 1, dInterpolatedU2, dInterpolatedV2); - tessellator.addVertexWithUV(x + 1, y + heightSE, z + 1, dInterpolatedU3, dInterpolatedV3); - tessellator.addVertexWithUV(x + 1, y + heightNE, z, dInterpolatedU4, dInterpolatedV4); - tessellator.addVertexWithUV(x, y + heightNW, z, dInterpolatedU, dInterpolatedV); - tessellator.addVertexWithUV(x + 1, y + heightNE, z, dInterpolatedU4, dInterpolatedV4); - tessellator.addVertexWithUV(x + 1, y + heightSE, z + 1, dInterpolatedU3, dInterpolatedV3); - tessellator.addVertexWithUV(x, y + heightSW, z + 1, dInterpolatedU2, dInterpolatedV2); - } - - if (renderer.renderAllFaces || renderBottom) { - rendered = true; - tessellator.setBrightness(block.getMixedBrightnessForBlock(iBlockAccess, x, y - 1, z)); - tessellator.setColorOpaque_F( - RendererSwitchingColorFluid.LIGHT_Y_NEG * red, - RendererSwitchingColorFluid.LIGHT_Y_NEG * green, - RendererSwitchingColorFluid.LIGHT_Y_NEG * blue); - renderer.renderFaceYNeg( - block, - x, - y + RendererSwitchingColorFluid.RENDER_OFFSET, - z, - this.getNullCheckedIiconOrFallbackTexture()); - } - - for (int side = 0; side < 4; ++side) { - int x2 = x, z2 = z; - - switch (side) { - case 0: - --z2; - break; - case 1: - ++z2; - break; - case 2: - --x2; - break; - case 3: - ++x2; - break; - default: - break; - } - - IIcon iconFlow = this.getNullCheckedIiconOrFallbackTexture(); - - if (renderer.renderAllFaces || renderSides[side]) { - rendered = true; - double dHeight1, dHeight2, dXcoord1, dXcoord2, dZcoord1, dZcoord2; - dZcoord2 = switch (side) { - case 0 -> { - dHeight1 = heightNW; - dHeight2 = heightNE; - dXcoord1 = x; - dXcoord2 = x + 1; - dZcoord1 = z + RendererSwitchingColorFluid.RENDER_OFFSET; - yield z + RendererSwitchingColorFluid.RENDER_OFFSET; - } - case 1 -> { - dHeight1 = heightSE; - dHeight2 = heightSW; - dXcoord1 = x + 1; - dXcoord2 = x; - dZcoord1 = z + 1 - RendererSwitchingColorFluid.RENDER_OFFSET; - yield z + 1 - RendererSwitchingColorFluid.RENDER_OFFSET; - } - case 2 -> { - dHeight1 = heightSW; - dHeight2 = heightNW; - dXcoord1 = x + RendererSwitchingColorFluid.RENDER_OFFSET; - dXcoord2 = x + RendererSwitchingColorFluid.RENDER_OFFSET; - dZcoord1 = z + 1; - yield z; - } - default -> { - dHeight1 = heightNE; - dHeight2 = heightSE; - dXcoord1 = x + 1 - RendererSwitchingColorFluid.RENDER_OFFSET; - dXcoord2 = x + 1 - RendererSwitchingColorFluid.RENDER_OFFSET; - dZcoord1 = z; - yield z + 1; - } - }; - float u1Flow = iconFlow.getInterpolatedU(0.0); - float u2Flow = iconFlow.getInterpolatedU(8.0); - float v1Flow = iconFlow.getInterpolatedV((1.0 - dHeight1) * 16.0 * 0.5); - float v2Flow = iconFlow.getInterpolatedV((1.0 - dHeight2) * 16.0 * 0.5); - float v3Flow = iconFlow.getInterpolatedV(8.0); - tessellator.setBrightness(block.getMixedBrightnessForBlock(iBlockAccess, x2, y, z2)); - float sideLighting; - if (side < 2) { - sideLighting = RendererSwitchingColorFluid.LIGHT_XZ_NEG; - } else { - sideLighting = RendererSwitchingColorFluid.LIGHT_XZ_POS; - } - tessellator.setColorOpaque_F( - RendererSwitchingColorFluid.LIGHT_Y_POS * sideLighting * red, - RendererSwitchingColorFluid.LIGHT_Y_POS * sideLighting * green, - RendererSwitchingColorFluid.LIGHT_Y_POS * sideLighting * blue); - - tessellator.addVertexWithUV(dXcoord1, y + dHeight1, dZcoord1, u1Flow, v1Flow); - tessellator.addVertexWithUV(dXcoord2, y + dHeight2, dZcoord2, u2Flow, v2Flow); - tessellator.addVertexWithUV(dXcoord2, y, dZcoord2, u2Flow, v3Flow); - tessellator.addVertexWithUV(dXcoord1, y, dZcoord1, u1Flow, v3Flow); - tessellator.addVertexWithUV(dXcoord1, y + dHeight1, dZcoord1, u1Flow, v1Flow); - tessellator.addVertexWithUV(dXcoord1, y, dZcoord1, u1Flow, v3Flow); - tessellator.addVertexWithUV(dXcoord2, y, dZcoord2, u2Flow, v3Flow); - tessellator.addVertexWithUV(dXcoord2, y + dHeight2, dZcoord2, u2Flow, v2Flow); - } - } - renderer.renderMinY = 0.0; - renderer.renderMaxY = 1.0; - return rendered; - } - - public boolean shouldRender3DInInventory(int modelId) { - return false; - } - - public int getRenderId() { - return FluidLoader.renderID; - } - - private IIcon getNullCheckedIiconOrFallbackTexture() { - return FluidLoader.autogenIIcon != null ? FluidLoader.autogenIIcon - : ((TextureMap) Minecraft.getMinecraft() - .getTextureManager() - .getTexture(TextureMap.locationBlocksTexture)).getAtlasSprite("missingno"); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/client/textures/PrefixTextureLinker.java b/src/main/java/com/github/bartimaeusnek/bartworks/client/textures/PrefixTextureLinker.java deleted file mode 100644 index 09df8f98f8..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/client/textures/PrefixTextureLinker.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.client.textures; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.stream.Stream; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TextureSet; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; - -@SideOnly(Side.CLIENT) -public class PrefixTextureLinker implements Runnable { - - public static Map> texMap = new HashMap<>(); - public static Map> texMapBlocks = new HashMap<>(); - public static Map blockTexMap = new HashMap<>(); - - private static void fillBlockTexMap() { - blockTexMap.put(TextureSet.SET_QUARTZ, TextureSet.INDEX_block4); - Stream.of(OrePrefixes.blockCasing, OrePrefixes.blockCasingAdvanced) - .forEach(prefixes -> { - HashMap curr = new HashMap<>(); - Arrays.stream(TextureSet.class.getFields()) - .filter( - field -> field.getName() - .contains("SET")) - .forEach(SET -> { - try { - curr.put( - (TextureSet) SET.get(null), - new Textures.BlockIcons.CustomIcon( - "materialicons/" + SET.getName() - .substring(4) + "/" + prefixes)); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - }); - texMapBlocks.put(prefixes, curr); - }); - } - - private static void fillItemTexMap() { - Arrays.stream(OrePrefixes.values()) - .filter( - prefixes -> prefixes != OrePrefixes.rod && prefixes.mTextureIndex == -1 - && Werkstoff.GenerationFeatures.getPrefixDataRaw(prefixes) != 0) - .forEach(prefixes -> { - HashMap curr = new HashMap<>(); - Arrays.stream(TextureSet.class.getFields()) - .filter( - field -> field.getName() - .contains("SET")) - .forEach(SET -> { - try { - curr.put( - (TextureSet) SET.get(null), - new Textures.ItemIcons.CustomIcon( - "materialicons/" + SET.getName() - .substring(4) + "/" + prefixes)); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - }); - texMap.put(prefixes, curr); - }); - } - - @Override - public void run() { - fillItemTexMap(); - fillBlockTexMap(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_Blocks.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_Blocks.java deleted file mode 100644 index b881f47cfa..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_Blocks.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.MainMod; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; - -public class BW_Blocks extends Block { - - @SideOnly(Side.CLIENT) - protected IIcon[] texture; - - String[] textureNames; - protected String name; - - public BW_Blocks(String name, String[] texture) { - super(Material.anvil); - this.setHardness(15.0F); - this.setResistance(30.0F); - this.name = name; - this.textureNames = texture; - this.setCreativeTab(MainMod.GT2); - GregTech_API.registerMachineBlock(this, -1); - } - - public BW_Blocks(String name, String[] texture, CreativeTabs tabs) { - super(Material.anvil); - this.setHardness(15.0F); - this.setResistance(30.0F); - this.name = name; - this.textureNames = texture; - this.setCreativeTab(tabs); - GregTech_API.registerMachineBlock(this, -1); - } - - public BW_Blocks(String name, String[] texture, CreativeTabs tabs, Material material) { - super(material); - this.setHardness(15.0F); - this.setResistance(30.0F); - this.name = name; - this.textureNames = texture; - this.setCreativeTab(tabs); - GregTech_API.registerMachineBlock(this, -1); - } - - @Override - public int damageDropped(int meta) { - return meta; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item item, CreativeTabs tab, List list) { - for (int i = 0; i < this.textureNames.length; i++) { - list.add(new ItemStack(item, 1, i)); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - return meta < this.texture.length ? this.texture[meta] : this.texture[0]; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister par1IconRegister) { - this.texture = new IIcon[this.textureNames.length]; - for (int i = 0; i < this.textureNames.length; i++) { - this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); - } - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - if (GregTech_API.isMachineBlock(this, aMetaData)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public String getUnlocalizedName() { - return this.name; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { - return false; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_GlasBlocks.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_GlasBlocks.java deleted file mode 100644 index c60f63129a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_GlasBlocks.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.blocks; - -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.client.renderer.RendererGlasBlock; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class BW_GlasBlocks extends BW_Blocks { - - @SideOnly(Side.CLIENT) - private IIcon[] connectedTexture; - - private final boolean connectedTex; - private boolean fake; - private short[][] color = new short[this.textureNames.length][3]; - - public BW_GlasBlocks(String name, String[] texture, CreativeTabs tabs) { - super(name, texture, tabs, Material.glass); - this.connectedTex = false; - } - - public BW_GlasBlocks(String name, String[] texture, short[][] color, CreativeTabs tabs, boolean connectedTex, - boolean fake) { - super(name, texture, tabs, Material.glass); - this.connectedTex = connectedTex; - this.color = color; - this.fake = fake; - } - - public short[] getColor(int meta) { - return meta < this.texture.length ? this.color[meta] : this.color[0]; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { - if (worldClient.getBlock(xCoord, yCoord, zCoord) instanceof BW_GlasBlocks) return false; - return super.shouldSideBeRendered(worldClient, xCoord, yCoord, zCoord, aSide); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - return meta < this.texture.length ? this.texture[meta] : this.texture[0]; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister par1IconRegister) { - if (!this.connectedTex) { - this.texture = new IIcon[this.textureNames.length]; - for (int i = 0; i < this.textureNames.length; i++) { - this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); - } - return; - } - this.texture = new IIcon[this.textureNames.length]; - this.connectedTexture = new IIcon[16]; - for (int i = 0; i < this.textureNames.length; i++) { - this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); - String[] splitname = this.textureNames[0].split(":"); - for (int j = 0; j < 16; j++) { - this.connectedTexture[j] = par1IconRegister - .registerIcon(splitname[0] + ":connectedTex/" + splitname[1] + '/' + splitname[1] + '_' + j); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { - if (!this.connectedTex) return super.getIcon(worldClient, xCoord, yCoord, zCoord, aSide); - - ForgeDirection dir = ForgeDirection.getOrientation(aSide); - byte sides = 0; - switch (dir) { - case UP: - case DOWN: { - if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0001); - if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0010); - if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0100); - if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b1000); - break; - } - case EAST: { - if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0001); - if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0010); - if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0100); - if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b1000); - break; - } - case WEST: { - if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0001); - if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0010); - if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0100); - if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b1000); - break; - } - case NORTH: { - if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0001); - if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0010); - if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0100); - if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b1000); - break; - } - case SOUTH: { - if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0001); - if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0010); - if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b0100); - if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BW_GlasBlocks) - sides = (byte) (sides | 0b1000); - break; - } - case UNKNOWN: - default: { - break; - } - } - return this.connectedTexture[sides]; - } - - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 1; - } - - @Override - public int getRenderType() { - if (!this.fake && SideReference.Side.Client) return RendererGlasBlock.renderID; - return 0; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - protected boolean canSilkHarvest() { - return false; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_GlasBlocks2.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_GlasBlocks2.java deleted file mode 100644 index 4ef12dc30b..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_GlasBlocks2.java +++ /dev/null @@ -1,180 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.blocks; - -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.client.renderer.RendererGlasBlock; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class BW_GlasBlocks2 extends BW_Blocks { - - @SideOnly(Side.CLIENT) - private IIcon[] connectedTexture; - - private final boolean connectedTex; - private boolean fake; - private short[][] color = new short[this.textureNames.length][3]; - - public BW_GlasBlocks2(String name, String[] texture, CreativeTabs tabs) { - super(name, texture, tabs, Material.glass); - this.connectedTex = false; - } - - public BW_GlasBlocks2(String name, String[] texture, short[][] color, CreativeTabs tabs, boolean connectedTex, - boolean fake) { - super(name, texture, tabs, Material.glass); - this.connectedTex = connectedTex; - this.color = color; - this.fake = fake; - } - - public short[] getColor(int meta) { - return meta < this.texture.length ? this.color[meta] : this.color[0]; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { - if (worldClient.getBlock(xCoord, yCoord, zCoord) instanceof BW_GlasBlocks2) return false; - return super.shouldSideBeRendered(worldClient, xCoord, yCoord, zCoord, aSide); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - return meta < this.texture.length ? this.texture[meta] : this.texture[0]; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister par1IconRegister) { - if (!this.connectedTex) { - this.texture = new IIcon[this.textureNames.length]; - for (int i = 0; i < this.textureNames.length; i++) { - this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); - } - return; - } - this.texture = new IIcon[this.textureNames.length]; - this.connectedTexture = new IIcon[16]; - for (int i = 0; i < this.textureNames.length; i++) { - this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); - String[] splitname = this.textureNames[0].split(":"); - for (int j = 0; j < 16; j++) { - this.connectedTexture[j] = par1IconRegister.registerIcon( - splitname[0] + ":connectedTex/" - + "BoronSilicateGlassBlock" - + '/' - + "BoronSilicateGlassBlock" - + '_' - + j); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { - if (!this.connectedTex) return super.getIcon(worldClient, xCoord, yCoord, zCoord, aSide); - - ForgeDirection dir = ForgeDirection.getOrientation(aSide); - byte sides = 0; - switch (dir) { - case UP: - case DOWN: { - if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0001); - if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0010); - if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0100); - if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b1000); - break; - } - case EAST: { - if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0001); - if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0010); - if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0100); - if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b1000); - break; - } - case WEST: { - if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0001); - if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0010); - if (worldClient.getBlock(xCoord, yCoord, zCoord - 1) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0100); - if (worldClient.getBlock(xCoord, yCoord, zCoord + 1) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b1000); - break; - } - case NORTH: { - if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0001); - if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0010); - if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0100); - if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b1000); - break; - } - case SOUTH: { - if (worldClient.getBlock(xCoord, yCoord + 1, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0001); - if (worldClient.getBlock(xCoord, yCoord - 1, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0010); - if (worldClient.getBlock(xCoord - 1, yCoord, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b0100); - if (worldClient.getBlock(xCoord + 1, yCoord, zCoord) instanceof BW_GlasBlocks2) - sides = (byte) (sides | 0b1000); - break; - } - case UNKNOWN: - default: { - break; - } - } - return this.connectedTexture[sides]; - } - - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 1; - } - - @Override - public int getRenderType() { - if (!this.fake && SideReference.Side.Client) return RendererGlasBlock.renderID; - return 0; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - protected boolean canSilkHarvest() { - return false; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer.java deleted file mode 100644 index fb8e163ad1..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.blocks; - -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.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fluids.IFluidContainerItem; - -import com.github.bartimaeusnek.bartworks.API.ITileAddsInformation; -import com.github.bartimaeusnek.bartworks.API.ITileDropsContent; -import com.github.bartimaeusnek.bartworks.API.ITileHasDifferentTextureSides; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.common.tileentities.classic.BW_TileEntity_HeatedWaterPump; -import com.gtnewhorizons.modularui.api.UIInfos; -import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.api.tile.IWrenchable; -import ic2.core.IC2; -import ic2.core.IHasGui; - -public class BW_TileEntityContainer extends BlockContainer implements ITileAddsInformation { - - protected Class tileEntity; - - public BW_TileEntityContainer(Material p_i45386_1_, Class tileEntity, String blockName) { - super(p_i45386_1_); - this.tileEntity = tileEntity; - this.setHardness(15.0F); - this.setResistance(30.0F); - this.setCreativeTab(MainMod.BWT); - this.setBlockName(blockName); - this.setBlockTextureName(MainMod.MOD_ID + ":" + blockName); - } - - @Override - public boolean onBlockActivated(World worldObj, int x, int y, int z, EntityPlayer player, int side, float subX, - float subY, float subZ) { - if (worldObj.isRemote) { - return false; - } - TileEntity tile = worldObj.getTileEntity(x, y, z); - if (tile instanceof BW_TileEntity_HeatedWaterPump) { - if (player.getHeldItem() != null && (player.getHeldItem() - .getItem() - .equals(Items.bucket) - || player.getHeldItem() - .getItem() instanceof IFluidContainerItem) - && ((BW_TileEntity_HeatedWaterPump) tile).drain(1000, false) != null) - if (player.getHeldItem() - .getItem() - .equals(Items.bucket) && ((BW_TileEntity_HeatedWaterPump) tile).drain(1000, false).amount == 1000) { - ((BW_TileEntity_HeatedWaterPump) tile).drain(1000, true); - player.getHeldItem().stackSize--; - if (player.getHeldItem().stackSize <= 0) - player.inventory.setInventorySlotContents(player.inventory.currentItem, null); - player.inventory.addItemStackToInventory(new ItemStack(Items.water_bucket)); - return true; - } - } - if (!player.isSneaking()) { - if (tile instanceof IHasGui) { - return worldObj.isRemote || IC2.platform.launchGui(player, (IHasGui) tile); - } - if (tile instanceof ITileWithModularUI) { - if (!worldObj.isRemote) { - UIInfos.TILE_MODULAR_UI.open(player, worldObj, x, y, z); - } - return true; - } - } - return false; - } - - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack itemStack) { - TileEntity tile = world.getTileEntity(x, y, z); - if (tile instanceof IWrenchable tile2 && itemStack != null) { - int meta = itemStack.getItemDamage(); - world.setBlockMetadataWithNotify(x, y, z, meta, 2); - if (entity != null) { - int face = MathHelper.floor_double(entity.rotationYaw * 4.0f / 360.0f + 0.5) & 0x3; - switch (face) { - case 0: - tile2.setFacing((short) 2); - break; - case 1: - tile2.setFacing((short) 5); - break; - case 2: - tile2.setFacing((short) 3); - break; - case 3: - tile2.setFacing((short) 4); - break; - } - } - } - } - - @Override - public void breakBlock(World world, int x, int y, int z, Block block, int meta) { - TileEntity t = world.getTileEntity(x, y, z); - if (t instanceof ITileDropsContent) { - int[] dropSlots = ((ITileDropsContent) t).getDropSlots(); - for (int dropSlot : dropSlots) { - if (((ITileDropsContent) t).getStackInSlot(dropSlot) != null) world.spawnEntityInWorld( - new EntityItem(world, x, y, z, ((BW_TileEntity_HeatedWaterPump) t).getStackInSlot(dropSlot))); - } - } - super.breakBlock(world, x, y, z, block, meta); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - if (!ITileHasDifferentTextureSides.class.isAssignableFrom(this.tileEntity)) return super.getIcon(side, meta); - try { - return ((ITileHasDifferentTextureSides) this.tileEntity.getConstructor() - .newInstance()).getTextureForSide(side, meta); - } catch (Exception e) { - e.printStackTrace(); - return super.getIcon(side, meta); - } - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister par1IconRegister) { - if (ITileHasDifferentTextureSides.class.isAssignableFrom(this.tileEntity)) { - try { - ((ITileHasDifferentTextureSides) this.tileEntity.getConstructor() - .newInstance()).registerBlockIcons(par1IconRegister); - } catch (Exception e) { - e.printStackTrace(); - } - } else super.registerBlockIcons(par1IconRegister); - } - - @Override - public TileEntity createNewTileEntity(World worldIn, int meta) { - try { - return this.tileEntity.getConstructor() - .newInstance(); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { - return false; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public String[] getInfoData() { - if (ITileAddsInformation.class.isAssignableFrom(this.tileEntity)) { - try { - return ((ITileAddsInformation) this.tileEntity.getConstructor() - .newInstance()).getInfoData(); - } catch (Exception e) { - e.printStackTrace(); - } - } - return new String[0]; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer_MachineBlock.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer_MachineBlock.java deleted file mode 100644 index e7abd0e6ce..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer_MachineBlock.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import gregtech.api.GregTech_API; - -public class BW_TileEntityContainer_MachineBlock extends BW_TileEntityContainer { - - public BW_TileEntityContainer_MachineBlock(Material p_i45386_1_, Class tileEntity, - String blockName) { - super(p_i45386_1_, tileEntity, blockName); - GregTech_API.registerMachineBlock(this, -1); - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - if (GregTech_API.isMachineBlock(this, aMetaData)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer_Multiple.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer_Multiple.java deleted file mode 100644 index 852d8370ad..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BW_TileEntityContainer_Multiple.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.blocks; - -import java.util.List; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -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.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.gtnewhorizons.modularui.api.UIInfos; -import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.api.tile.IWrenchable; -import ic2.core.IC2; -import ic2.core.IHasGui; - -public class BW_TileEntityContainer_Multiple extends BlockContainer { - - protected final String[] textureNames; - protected final String name; - protected final Class[] tileEntityArray; - - @SideOnly(Side.CLIENT) - protected IIcon[] texture; - - public BW_TileEntityContainer_Multiple(Material p_i45386_1_, Class[] tileEntity, - String blockName, String[] textureNames, CreativeTabs tabs) { - super(p_i45386_1_); - this.setHardness(15.0F); - this.setResistance(30.0F); - this.tileEntityArray = tileEntity; - this.name = blockName; - this.textureNames = textureNames; - this.setCreativeTab(tabs); - this.setBlockName(blockName); - this.setBlockTextureName(MainMod.MOD_ID + ":" + blockName); - } - - @Override - public boolean onBlockActivated(World worldObj, int x, int y, int z, EntityPlayer player, int side, float subX, - float subY, float subZ) { - if (worldObj.isRemote) { - return true; - } - if (!player.isSneaking()) { - TileEntity tile = worldObj.getTileEntity(x, y, z); - if (tile instanceof IHasGui) { - return worldObj.isRemote || IC2.platform.launchGui(player, (IHasGui) tile); - } - if (tile instanceof ITileWithModularUI && !worldObj.isRemote) { - UIInfos.TILE_MODULAR_UI.open(player, worldObj, x, y, z); - } - } - - return false; - } - - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack itemStack) { - TileEntity tile = world.getTileEntity(x, y, z); - if (tile instanceof IWrenchable tile2 && itemStack != null) { - int meta = itemStack.getItemDamage(); - world.setBlockMetadataWithNotify(x, y, z, meta, 2); - if (entity != null) { - int face = MathHelper.floor_double(entity.rotationYaw * 4.0f / 360.0f + 0.5) & 0x3; - switch (face) { - case 0: - tile2.setFacing((short) 2); - break; - case 1: - tile2.setFacing((short) 5); - break; - case 2: - tile2.setFacing((short) 3); - break; - case 3: - tile2.setFacing((short) 4); - break; - } - } - } - } - - @Override - public int damageDropped(int meta) { - return meta; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item item, CreativeTabs tab, List list) { - for (int i = 0; i < this.textureNames.length; i++) { - list.add(new ItemStack(item, 1, i)); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - return meta < this.texture.length ? this.texture[meta] : this.texture[0]; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister par1IconRegister) { - this.texture = new IIcon[this.textureNames.length]; - for (int i = 0; i < this.textureNames.length; i++) { - this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); - } - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { - return false; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public TileEntity createNewTileEntity(World worldIn, int meta) { - try { - return this.tileEntityArray[meta].getConstructor() - .newInstance(); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BioFluidBlock.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BioFluidBlock.java deleted file mode 100644 index a5ad7625f9..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/blocks/BioFluidBlock.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.blocks; - -import net.minecraft.block.ITileEntityProvider; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.fluids.BlockFluidBase; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.FluidLoader; -import com.github.bartimaeusnek.bartworks.common.tileentities.classic.BWTileEntityDimIDBridge; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class BioFluidBlock extends BlockFluidBase implements ITileEntityProvider { - - public BioFluidBlock() { - super(FluidLoader.ff, Material.water); - this.setBlockName("BioFluidBlock"); - // this.setCreativeTab(MainMod.BioTab); - this.textureName = "gregtech:fluids/fluid.molten.autogenerated"; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister reg) { - FluidLoader.autogenIIcon = this.blockIcon = reg.registerIcon(this.getTextureName()); - } - - @Override - public int getQuantaValue(IBlockAccess world, int x, int y, int z) { - return 0; - } - - @Override - public boolean canCollideCheck(int meta, boolean fullHit) { - return false; - } - - @Override - public int getMaxRenderHeightMeta() { - return 0; - } - - @Override - public int getRenderType() { - return FluidLoader.renderID; - } - - @Override - public FluidStack drain(World world, int x, int y, int z, boolean doDrain) { - return null; - } - - @Override - public boolean canDrain(World world, int x, int y, int z) { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess worldIn, int x, int y, int z, int side) { - return FluidLoader.autogenIIcon; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - return FluidLoader.autogenIIcon; - } - - @Override - public TileEntity createNewTileEntity(World worldIn, int meta) { - return new BWTileEntityDimIDBridge(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/ChangeConfig.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/ChangeConfig.java deleted file mode 100644 index 0434a5d974..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/ChangeConfig.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.commands; - -import java.lang.reflect.Field; - -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; -import net.minecraft.util.ChatComponentText; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; - -public class ChangeConfig extends CommandBase { - - @Override - public String getCommandName() { - return "bwcfg"; - } - - @Override - public String getCommandUsage(ICommandSender sender) { - return "bwcfg "; - } - - @Override - @SuppressWarnings("rawtypes") - public void processCommand(ICommandSender sender, String[] args) { - try { - Field f = ConfigHandler.class.getField(args[0]); - Class c = f.getType(); - if (c.equals(int.class)) { - int l; - try { - l = Integer.parseInt(args[1]); - } catch (NumberFormatException e) { - sender.addChatMessage(new ChatComponentText("you need to enter a number!")); - return; - } - f.setInt(null, l); - } else if (c.equals(long.class)) { - long l; - try { - l = Long.parseLong(args[1]); - } catch (NumberFormatException e) { - sender.addChatMessage(new ChatComponentText("you need to enter a number!")); - return; - } - f.setLong(null, l); - } else if (c.equals(boolean.class)) { - if ("true".equalsIgnoreCase(args[1]) || "1".equalsIgnoreCase(args[1])) f.setBoolean(null, true); - else if ("false".equalsIgnoreCase(args[1]) || "0".equalsIgnoreCase(args[1])) f.setBoolean(null, false); - else { - sender.addChatMessage(new ChatComponentText("booleans need to be set to true or false")); - } - } - sender.addChatMessage(new ChatComponentText("Set " + args[0] + " to " + args[1])); - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/ClearCraftingCache.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/ClearCraftingCache.java deleted file mode 100644 index 7afe07beb0..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/ClearCraftingCache.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.commands; - -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; -import net.minecraft.util.ChatComponentText; - -import com.github.bartimaeusnek.bartworks.ASM.BWCoreStaticReplacementMethodes; - -public class ClearCraftingCache extends CommandBase { - - @Override - public String getCommandName() { - return "bwclr"; - } - - @Override - public String getCommandUsage(ICommandSender sender) { - return "bwclr"; - } - - @Override - public void processCommand(ICommandSender sender, String[] args) { - BWCoreStaticReplacementMethodes.clearRecentlyUsedRecipes(); - sender.addChatMessage(new ChatComponentText("Recipe Cache cleared ")); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/GetWorkingDirectory.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/GetWorkingDirectory.java deleted file mode 100644 index 341044c498..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/GetWorkingDirectory.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.commands; - -import net.minecraft.client.Minecraft; -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; -import net.minecraft.util.ChatComponentText; - -public class GetWorkingDirectory extends CommandBase { - - @Override - public String getCommandName() { - return "bwgwd"; - } - - @Override - public String getCommandUsage(ICommandSender sender) { - return "bwgwd"; - } - - @Override - public void processCommand(ICommandSender sender, String[] args) { - sender.addChatMessage(new ChatComponentText(Minecraft.getMinecraft().mcDataDir.getAbsolutePath())); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/PrintRecipeListToFile.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/PrintRecipeListToFile.java deleted file mode 100644 index dcd7caee97..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/PrintRecipeListToFile.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.commands; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; - -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; -import net.minecraft.item.crafting.CraftingManager; - -public class PrintRecipeListToFile extends CommandBase { - - @Override - public String getCommandName() { - return "prltf"; - } - - @Override - public String getCommandUsage(ICommandSender sender) { - return "prltf "; - } - - @Override - public void processCommand(ICommandSender sender, String[] args) { - File file = new File(args[0]); - try { - - BufferedWriter fw = new BufferedWriter(new FileWriter(file)); - CraftingManager.getInstance() - .getRecipeList() - .forEach(e -> { - try { - fw.write( - e.toString() + " = " - + e.getRecipeOutput() - .getDisplayName() - + "\n"); - } catch (IOException ex) { - ex.printStackTrace(); - } - }); - fw.flush(); - fw.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/RunGC.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/RunGC.java deleted file mode 100644 index 5b76d6a163..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/RunGC.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.commands; - -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; -import net.minecraft.util.ChatComponentText; - -public class RunGC extends CommandBase { - - @Override - public String getCommandName() { - return "bwgc"; - } - - @Override - public String getCommandUsage(ICommandSender sender) { - return "bwgc"; - } - - @Override - public void processCommand(ICommandSender sender, String[] args) { - Runtime.getRuntime() - .gc(); - sender.addChatMessage(new ChatComponentText("Ran GC!")); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/SummonRuin.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/SummonRuin.java deleted file mode 100644 index 5b37a98e7e..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/commands/SummonRuin.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.commands; - -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; - -import com.github.bartimaeusnek.bartworks.system.worldgen.MapGenRuins; - -public class SummonRuin extends CommandBase { - - @Override - public String getCommandName() { - return "SummonRuin"; - } - - @Override - public String getCommandUsage(ICommandSender sender) { - return "SummonRuin "; - } - - @Override - public void processCommand(ICommandSender iCommandSender, String[] args) { - try { - new MapGenRuins.RuinsBase().generate( - iCommandSender.getEntityWorld(), - iCommandSender.getEntityWorld().rand, - Integer.parseInt(args[0]), - 256, - Integer.parseInt(args[1])); - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/configs/ConfigHandler.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/configs/ConfigHandler.java deleted file mode 100644 index 0b6a131341..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/configs/ConfigHandler.java +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.configs; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; - -import net.minecraftforge.common.config.Configuration; - -import com.github.bartimaeusnek.bartworks.API.API_ConfigValues; - -public class ConfigHandler { - - public static Configuration c; - - public static int megaMachinesMax = 256; - public static int mbWaterperSec = 150; - public static int ross128BID = -64; - public static int ross128BAID = -63; - public static int ross128btier = 3; - public static int ross128batier = 3; - public static int landerType = 3; - public static int ross128bRuinChance = 512; - public static int bioVatMaxParallelBonus = 1000; - public static int cutoffTier = 5; - public static int[][][] metasForTiers; - - public static long energyPerCell = 1000000L; - - public static boolean Ross128Enabled = true; - - public static boolean disableExtraGassesForEBF; - public static boolean disableMagicalForest; - public static boolean DEHPDirectSteam; - public static boolean teslastaff; - public static boolean classicMode; - - public static boolean GTppLogDisabler; - public static boolean tooltips = true; - public static boolean sharedItemStackTooltip = true; - public static boolean[] enabledPatches; - - public static byte maxTierRoss; - - public static boolean disableBoltedBlocksCasing = false; - public static boolean disableReboltedBlocksCasing = false; - - public static int pollutionHeatedWaterPumpSecond = 5; - public static int basePollutionMBFSecond = 400; - - public static Set voidMinerBlacklist = Collections.unmodifiableSet(new HashSet<>()); - - public static boolean disablePistonInEIC = false; - - private static final int[][] METAFORTIERS_ENERGY = { { 100, 101, 102, 105 }, { 1110, 1115, 1120, 1127 }, - { 1111, 12726, 1116, 1121, 1128 }, { 1112, 12727, 1117, 1122, 1129 }, { 12728, 1190, 1130, 12685 }, - { 1191, 1174, 695, 12686 }, }; - private static final int[][] METAFORTIERS_BUFFER = { { 5133, 5123 }, { 161, 171, 181, 191 }, { 162, 172, 182, 192 }, - { 163, 173, 183, 193 }, { 164, 174, 184, 194 }, { 165, 175, 185, 195 }, }; - private static final int[][] METAFORTIERS_CABLE = { { 5133, 5123 }, { 1210, 1230, 1250, 1270, 1290 }, - { 1310, 1330, 1350, 1370, 1390 }, { 1410, 1430, 1450, 1470, 1490 }, { 1510, 1530, 1550, 1570, 1590 }, - { 1650, 1670, 1690 }, }; - private static final int[][] METAFORTIERS_MACHINE = { - { 103, 104, 106, 107, 109, 110, 112, 113, 115, 116, 118, 119 }, - { 201, 211, 221, 231, 241, 251, 261, 271, 281, 291, 301, 311, 321, 331, 341, 351, 361, 371, 381, 391, 401, 411, - 421, 431, 441, 451, 461, 471, 481, 491, 501, 511, 521, 531, 541, 551, 561, 571, 581, 591, 601, 611, 621, - 631, 641, 651, 661, 671 }, - { 202, 212, 222, 232, 242, 252, 262, 272, 282, 292, 302, 312, 322, 332, 342, 352, 362, 372, 382, 392, 402, 412, - 422, 432, 442, 452, 462, 472, 482, 492, 502, 512, 522, 532, 542, 552, 562, 572, 582, 592, 602, 612, 622, - 632, 642, 652, 662, 672 }, - { 203, 213, 223, 233, 243, 253, 263, 273, 283, 293, 303, 313, 323, 333, 343, 353, 363, 373, 383, 393, 403, 413, - 423, 433, 443, 453, 463, 473, 483, 493, 503, 513, 523, 533, 543, 553, 563, 573, 583, 593, 603, 613, 623, - 633, 643, 653, 663, 673 }, - { 204, 214, 224, 234, 244, 254, 264, 274, 284, 294, 304, 314, 324, 334, 344, 354, 364, 374, 384, 394, 404, 414, - 424, 434, 444, 454, 464, 474, 484, 494, 504, 514, 524, 534, 544, 554, 564, 574, 584, 594, 604, 614, 624, - 634, 644, 654, 664, 674 }, - { 205, 215, 225, 235, 245, 255, 265, 275, 285, 295, 305, 315, 325, 335, 345, 355, 365, 375, 385, 395, 405, 415, - 425, 435, 445, 455, 465, 475, 485, 495, 505, 515, 525, 535, 545, 555, 565, 575, 585, 595, 605, 615, 625, - 635, 645, 655, 665, 675 }, }; - private static int[][][] defaultMetasForTiers = { METAFORTIERS_ENERGY, METAFORTIERS_BUFFER, METAFORTIERS_CABLE, - METAFORTIERS_MACHINE }; - private static final String[] VOLTAGE_NAMES = { "High Pressure Steam", "Low Voltage", "Medium Voltage", - "High Voltage", "Extreme Voltage", "Insane Voltage", "Ludicrous Voltage", "ZPM Voltage", "Ultimate Voltage", - "Ultimate High Voltage", "Ultimate Extreme Voltage", "Ultimate Insane Voltage", "Ultimate Mega Voltage", - "Ultimate Extended Mega Voltage", "Overpowered Voltage", "Maximum Voltage" }; - private static final String[] names = { "Generators", "Buffers", "Cables", "Machines" }; - - public static final String[] ASM_TRANSFORMER_DESCRIPTIONS = { "REMOVING RAIN FROM LAST MILLENNIUM (EXU)", - "REMOVING CREATURES FROM LAST MILLENNIUM (EXU)", "PATCHING THAUMCRAFT WAND PEDESTAL TO PREVENT VIS DUPLICATION", - "PATCHING CRAFTING MANAGER FOR CACHING RECIPES" }; - public static final String[] ASM_TRANSFORMER_CLASSES = { - "com.rwtema.extrautils.worldgen.endoftime.WorldProviderEndOfTime", - "com.rwtema.extrautils.worldgen.endoftime.ChunkProviderEndOfTime", "thaumcraft.common.tiles.TileWandPedestal", - "net.minecraft.item.crafting.CraftingManager" }; - - public ConfigHandler(Configuration C) { - ConfigHandler.c = C; - ConfigHandler.classicMode = ConfigHandler.c - .get( - "System", - "Enable Classic Mode", - false, - "Enables the classic Mode (all recipes in normal machines are doable in MV") - .getBoolean(false); - - ConfigHandler.tooltips = ConfigHandler.c - .get("System", "BartWorksToolTips", true, "If you wish to enable extra tooltips") - .getBoolean(true); - ConfigHandler.sharedItemStackTooltip = ConfigHandler.c - .get( - "System", - "BartWorksSharedItemStackToolTips", - true, - "If you wish to enable \"Shared Item Stack\" tooltips") - .getBoolean(true); - - ConfigHandler.teslastaff = ConfigHandler.c - .get( - "System", - "Enable Teslastaff", - false, - "Enables the Teslastaff, an Item used to destroy Electric Armors") - .getBoolean(false); - - ConfigHandler.cutoffTier = ConfigHandler.c - .get( - "System", - "Tier to nerf circuits", - 5, - "This switch sets the lowest unnerfed Circuit Recipe Tier. -1 to disable it completely.", - -1, - VOLTAGE_NAMES.length) - .getInt(5); - ConfigHandler.cutoffTier = ConfigHandler.cutoffTier == -1 ? VOLTAGE_NAMES.length : ConfigHandler.cutoffTier; - ConfigHandler.disableExtraGassesForEBF = ConfigHandler.c - .get( - "System", - "Disable Extra Gases for EBF", - false, - "This switch disables extra gas recipes for the EBF, i.e. Xenon instead of Nitrogen") - .getBoolean(false); - ConfigHandler.disableBoltedBlocksCasing = ConfigHandler.c - .get("System", "Disable Bolted Casings", false, "This switch disable the generation of bolted casings") - .getBoolean(false); - ConfigHandler.disableReboltedBlocksCasing = ConfigHandler.c - .get("System", "Disable Rebolted Casings", false, "This switch disable the generation of rebolted casings") - .getBoolean(false); - - ConfigHandler.mbWaterperSec = ConfigHandler.c.get("Singleblocks", "mL Water per Sec for the StirlingPump", 150) - .getInt(150); - - ConfigHandler.energyPerCell = ConfigHandler.c - .get( - "Multiblocks", - "energyPerLESUCell", - 1000000, - "This will set Up the Energy per LESU Cell", - 1000000, - Integer.MAX_VALUE) - .getInt(1000000); - ConfigHandler.DEHPDirectSteam = ConfigHandler.c.get( - "Multiblocks", - "DEHP Direct Steam Mode", - false, - "This switch enables the Direct Steam Mode of the DEHP. If enabled it will take in Waterand output steam. If disabled it will Input IC2Coolant and output hot coolant") - .getBoolean(false); - ConfigHandler.megaMachinesMax = ConfigHandler.c - .get( - "Multiblocks", - "Mega Machines Maximum Recipes per Operation", - 256, - "This changes the Maximum Recipes per Operation to the specified Valure") - .getInt(256); - ConfigHandler.bioVatMaxParallelBonus = ConfigHandler.c - .get( - "Multiblocks", - "BioVat Maximum Bonus on Recipes", - 1000, - "This are the maximum parallel Operations the BioVat can do, when the output is half full.") - .getInt(1000); - ConfigHandler.voidMinerBlacklist = Collections.unmodifiableSet( - new HashSet<>( - Arrays.asList( - ConfigHandler.c.get( - "Multiblocks", - "Void Miner Blacklist", - new String[0], - "This is a blacklist for the Void Miner, blacklisted ores will not enter the drop prize pool. Please fill in the Unique Identifier of Ore and connect Damage with a colon, For example: gregtech:gt.blockores:32") - .getStringList()))); - ConfigHandler.disablePistonInEIC = ConfigHandler.c - .get( - "Multiblocks", - "Disable Electric Implosion Compressor piston", - false, - "This switch completely disables piston animation in Electric Implosion Compressor multiblock") - .getBoolean(false); - - ConfigHandler.pollutionHeatedWaterPumpSecond = ConfigHandler.c - .get( - "Pollution", - "Pollution produced per second by the water pump", - ConfigHandler.pollutionHeatedWaterPumpSecond, - "How much should the Simple Stirling Water Pump produce pollution per second") - .getInt(ConfigHandler.pollutionHeatedWaterPumpSecond); - ConfigHandler.basePollutionMBFSecond = ConfigHandler.c.get( - "Pollution", - "Pollution produced per tick by the MBF per ingot", - ConfigHandler.basePollutionMBFSecond, - "How much should the MBF produce pollution per tick per ingot. Then it'll be multiplied by the amount of ingots done in parallel") - .getInt(ConfigHandler.basePollutionMBFSecond); - - ConfigHandler.GTppLogDisabler = ConfigHandler.c - .get("System", "Disable GT++ Logging", false, "Enables or Disables GT++ Logging.") - .getBoolean(false); - API_ConfigValues.debugLog = ConfigHandler.c - .get("System", "Enable Debug Log", false, "Enables or Disables the debug log.") - .getBoolean(false); - - ConfigHandler.enabledPatches = new boolean[ASM_TRANSFORMER_CLASSES.length]; - for (int i = 0; i < ASM_TRANSFORMER_CLASSES.length; i++) ConfigHandler.enabledPatches[i] = ConfigHandler.c - .get("ASM fixes", ASM_TRANSFORMER_DESCRIPTIONS[i] + " in class: " + ASM_TRANSFORMER_CLASSES[i], true) - .getBoolean(true); - - ConfigHandler.ross128BID = ConfigHandler.c - .get("CrossMod Interactions", "DimID - Ross128b", -64, "The Dim ID for Ross128b") - .getInt(-64); - ConfigHandler.ross128BAID = ConfigHandler.c - .get("CrossMod Interactions", "DimID - Ross128ba", -63, "The Dim ID for Ross128ba (Ross128b's Moon)") - .getInt(-63); - ConfigHandler.ross128btier = ConfigHandler.c - .get("CrossMod Interactions", "Rocket Tier - Ross128b", 3, "The Rocket Tier for Ross128b") - .getInt(3); - ConfigHandler.ross128batier = ConfigHandler.c - .get("CrossMod Interactions", "Rocket Tier - Ross128ba", 3, "The Rocket Tier for Ross128a") - .getInt(3); - ConfigHandler.ross128bRuinChance = ConfigHandler.c - .get("CrossMod Interactions", "Ruin Chance - Ross128b", 512, "Higher Values mean lesser Ruins.") - .getInt(512); - ConfigHandler.Ross128Enabled = ConfigHandler.c - .get( - "CrossMod Interactions", - "Galacticraft - Activate Ross128 System", - true, - "If the Ross128 System should be activated, DO NOT CHANGE AFTER WORLD GENERATION") - .getBoolean(true); - ConfigHandler.landerType = ConfigHandler.c - .get("CrossMod Interactions", "LanderType", 3, "1 = Moon Lander, 2 = Landing Balloons, 3 = Asteroid Lander") - .getInt(3); - ConfigHandler.disableMagicalForest = ConfigHandler.c - .get( - "CrossMod Interactions", - "Disable Magical Forest - Ross128b", - false, - "True disables the magical Forest Biome on Ross for more performance during World generation.") - .getBoolean(false); - - ConfigHandler.maxTierRoss = (byte) ConfigHandler.c - .get("Ross Ruin Metas", "A_Ruin Machine Tiers", 6, "", 0, VOLTAGE_NAMES.length) - .getInt(6); - ConfigHandler.metasForTiers = new int[4][maxTierRoss][]; - - for (int i = 0; i < 4; i++) { - if (maxTierRoss > ConfigHandler.defaultMetasForTiers[i].length) - ConfigHandler.defaultMetasForTiers[i] = new int[maxTierRoss][0]; - for (int j = 0; j < maxTierRoss; j++) ConfigHandler.metasForTiers[i][j] = ConfigHandler.c - .get( - "Ross Ruin Metas", - j + "_Ruin " + names[i] + " Tier " + VOLTAGE_NAMES[j], - ConfigHandler.defaultMetasForTiers[i][j]) - .getIntList(); - } - - ConfigHandler.setUpComments(); - - if (ConfigHandler.c.hasChanged()) ConfigHandler.c.save(); - } - - private static void setUpComments() { - ConfigHandler.c.addCustomCategoryComment("ASM fixes", "Disable ASM fixes here."); - ConfigHandler.c.addCustomCategoryComment("Singleblocks", "Singleblock Options can be set here."); - ConfigHandler.c.addCustomCategoryComment("Multiblocks", "Multiblock Options can be set here."); - ConfigHandler.c.addCustomCategoryComment("System", "Different System Settings can be set here."); - ConfigHandler.c.addCustomCategoryComment( - "CrossMod Interactions", - "CrossMod Interaction Settings can be set here. For Underground Fluid settings change the Gregtech.cfg!"); - ConfigHandler.c.addCustomCategoryComment("Ross Ruin Metas", "Ruin Metas and Tiers can be set here."); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_ItemBlocks.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_ItemBlocks.java deleted file mode 100644 index e575dfb269..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_ItemBlocks.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.items; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.ITileEntityProvider; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import com.github.bartimaeusnek.bartworks.API.ITileAddsInformation; -import com.github.bartimaeusnek.bartworks.MainMod; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.util.GT_LanguageManager; - -public class BW_ItemBlocks extends ItemBlock { - - private final String mNoMobsToolTip = GT_LanguageManager - .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); - private final String mNoTileEntityToolTip = GT_LanguageManager - .addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!"); - - public BW_ItemBlocks(Block par1) { - super(par1); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setCreativeTab(MainMod.GT2); - } - - @Override - public int getMetadata(int aMeta) { - return aMeta; - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return this.field_150939_a.getUnlocalizedName() + "." + this.getDamage(aStack); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - - if (this.field_150939_a instanceof ITileAddsInformation) { - aList.addAll(Arrays.asList(((ITileAddsInformation) this.field_150939_a).getInfoData())); - } - aList.add(this.mNoMobsToolTip); - if (!(this.field_150939_a instanceof ITileEntityProvider)) aList.add(this.mNoTileEntityToolTip); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(ItemStack stack, int pass) { - return this.field_150939_a.getIcon(0, stack.getItemDamage()); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { - return this.getIcon(stack, renderPass); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIconFromDamageForRenderPass(int p_77618_1_, int p_77618_2_) { - return this.field_150939_a.getIcon(0, p_77618_2_); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_SimpleWindMeter.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_SimpleWindMeter.java deleted file mode 100644 index 32c521117b..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_SimpleWindMeter.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.items; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.MainMod; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.core.WorldData; - -public class BW_SimpleWindMeter extends Item { - - public BW_SimpleWindMeter() { - this.maxStackSize = 1; - this.setMaxDamage(15); - this.setCreativeTab(MainMod.BWT); - this.hasSubtypes = false; - this.setUnlocalizedName("BW_SimpleWindMeter"); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister register) { - this.itemIcon = register.registerIcon(MainMod.MOD_ID + ":BW_SimpleWindMeter"); - } - - @Override - public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean p_77624_4_) { - super.addInformation(itemStack, entityPlayer, list, p_77624_4_); - list.add(StatCollector.translateToLocal("tooltip.windmeter.0.name")); - list.add( - StatCollector.translateToLocal("tooltip.windmeter.1.name") + " " - + (this.getMaxDamage() - this.getDamage(itemStack)) - + "/" - + this.getMaxDamage()); - } - - @Override - public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer entityPlayer) { - if (entityPlayer.worldObj.isRemote || world == null - || WorldData.get(world) == null - || WorldData.get(world).windSim == null) return itemStack; - - float windStrength = (float) WorldData.get(world).windSim.getWindAt(entityPlayer.posY); - String windS = windStrength < 1f ? StatCollector.translateToLocal("tooltip.windmeter.2.name") - : windStrength < 10f ? StatCollector.translateToLocal("tooltip.windmeter.3.name") - : windStrength < 20f ? StatCollector.translateToLocal("tooltip.windmeter.4.name") - : windStrength < 30f ? StatCollector.translateToLocal("tooltip.windmeter.5.name") - : windStrength < 50f ? StatCollector.translateToLocal("tooltip.windmeter.6.name") - : StatCollector.translateToLocal("tooltip.windmeter.7.name"); - entityPlayer.addChatMessage( - new ChatComponentText(StatCollector.translateToLocal("tooltip.windmeter.8.name") + " " + windS + ".")); - itemStack.damageItem(1, entityPlayer); - return itemStack; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_Stonage_Rotors.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_Stonage_Rotors.java deleted file mode 100644 index eb3b251706..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/BW_Stonage_Rotors.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.items; - -import static ic2.api.item.IKineticRotor.GearboxType.WATER; -import static ic2.api.item.IKineticRotor.GearboxType.WIND; - -import java.util.List; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.texture.IIconRegister; -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.ResourceLocation; -import net.minecraft.util.StatCollector; - -import com.github.bartimaeusnek.bartworks.MainMod; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.api.item.IKineticRotor; -import ic2.core.block.kineticgenerator.gui.GuiWaterKineticGenerator; -import ic2.core.block.kineticgenerator.gui.GuiWindKineticGenerator; -import ic2.core.util.StackUtil; - -public class BW_Stonage_Rotors extends Item implements IKineticRotor { - - private final int[] DiaMinMax = new int[3]; - private final float eff; - private final IKineticRotor.GearboxType type; - private final ResourceLocation tex; - private final String itemTex; - private final int speed; - private final float mRotor; - private final int maxDamageEx; - private int dura; - - public BW_Stonage_Rotors(int diameter, float eff, int speed, float mRotor, int min, int max, int durability, - IKineticRotor.GearboxType type, ResourceLocation tex, String Name, String itemTex) { - this.DiaMinMax[0] = diameter; - this.DiaMinMax[1] = min; - this.DiaMinMax[2] = max; - this.eff = eff; - this.mRotor = mRotor; - this.speed = speed; - this.type = type; - this.tex = tex; - this.setMaxDamage(30000); - this.maxDamageEx = durability; - this.setUnlocalizedName(Name); - this.setCreativeTab(MainMod.BWT); - this.itemTex = itemTex; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - this.itemIcon = iconRegister.registerIcon(MainMod.MOD_ID + ":" + this.itemTex); - } - - @Override - public void addInformation(ItemStack itemStack, EntityPlayer player, List info, boolean b) { - info.add( - StatCollector.translateToLocalFormatted("ic2.itemrotor.wind.info", this.DiaMinMax[1], this.DiaMinMax[2])); - IKineticRotor.GearboxType type = null; - if (Minecraft.getMinecraft().currentScreen instanceof GuiWaterKineticGenerator) { - type = WATER; - } else if (Minecraft.getMinecraft().currentScreen instanceof GuiWindKineticGenerator) { - type = WIND; - } - info.add(StatCollector.translateToLocal("tooltip.rotor.0.name") + " " + this.DiaMinMax[0]); - info.add( - StatCollector.translateToLocal("tooltip.rotor.1.name") + " " - + (this.getMaxDamageEx() - this.getDamageOfStack(itemStack)) / 100 - + "/" - + this.getMaxDamageEx() / 100); - info.add(StatCollector.translateToLocal("tooltip.rotor.2.name") + " " + this.eff); - info.add(StatCollector.translateToLocal("tooltip.rotor.3.name") + " " + this.speed); - info.add(StatCollector.translateToLocal("tooltip.rotor.4.name") + " " + this.mRotor); - if (type != null) { - info.add(StatCollector.translateToLocal("ic2.itemrotor.fitsin." + this.isAcceptedType(itemStack, type))); - } - } - - @Override - public int getDiameter(ItemStack itemStack) { - return this.DiaMinMax[0]; - } - - @Override - public ResourceLocation getRotorRenderTexture(ItemStack itemStack) { - return this.tex; - } - - @Override - public float getEfficiency(ItemStack itemStack) { - return this.eff; - } - - @Override - public int getMinWindStrength(ItemStack itemStack) { - return this.DiaMinMax[1]; - } - - @Override - public int getMaxWindStrength(ItemStack itemStack) { - return this.DiaMinMax[2]; - } - - @Override - public boolean isAcceptedType(ItemStack itemStack, IKineticRotor.GearboxType gearboxType) { - return gearboxType.equals(this.type); - } - - public int getSpeed() { - return this.speed; - } - - public float getmRotor() { - return this.mRotor; - } - - public void setDamageForStack(ItemStack stack, int advDmg) { - NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); - nbtData.setInteger("DmgEx", advDmg); - if (this.maxDamageEx > 0) { - double p = (double) advDmg / (double) this.maxDamageEx; - int newDmg = (int) (stack.getMaxDamage() * p); - if (newDmg >= stack.getMaxDamage()) { - newDmg = stack.getMaxDamage() - 1; - } - stack.setItemDamage(newDmg); - this.dura = newDmg; - } - } - - public int getDamageOfStack(ItemStack stack) { - NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); - this.dura = nbtData.getInteger("DmgEx"); - return this.dura; - } - - public int getMaxDamageEx() { - return this.maxDamageEx; - } - - public void damageItemStack(ItemStack stack, int Dmg) { - this.setDamageForStack(stack, this.getDamageOfStack(stack) + Dmg); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/Circuit_Programmer.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/Circuit_Programmer.java deleted file mode 100644 index fd36b603d2..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/Circuit_Programmer.java +++ /dev/null @@ -1,236 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.items; - -import java.util.List; - -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.StatCollector; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.API.modularUI.BW_UITextures; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.IItemWithModularUI; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -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.OrePrefixes; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.items.GT_Generic_Item; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import ic2.api.item.ElectricItem; -import ic2.api.item.IElectricItem; - -public class Circuit_Programmer extends GT_Generic_Item implements IElectricItem, IItemWithModularUI { - - private static final int COST_PER_USE = 100; - - public Circuit_Programmer() { - super("BWCircuitProgrammer", "Circuit Programmer", "Programs Integrated Circuits"); - this.setMaxStackSize(1); - this.setNoRepair(); - this.setHasSubtypes(false); - this.setCreativeTab(MainMod.BWT); - GregTech_API.registerCircuitProgrammer( - s -> s.getItem() instanceof Circuit_Programmer && ElectricItem.manager.canUse(s, COST_PER_USE), - (s, p) -> { - ElectricItem.manager.use(s, COST_PER_USE, p); - return s; - }); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - super.addInformation(aStack, aPlayer, aList, aF3_H); - if (aStack != null && aStack.getTagCompound() != null) aList.add( - StatCollector.translateToLocal("tooltip.cp.0.name") + " " - + (aStack.getTagCompound() - .getBoolean("HasChip") ? StatCollector.translateToLocal("tooltip.bw.yes.name") - : StatCollector.translateToLocal("tooltip.bw.no.name"))); - } - - @Override - public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - if (ElectricItem.manager.use(aStack, COST_PER_USE, aPlayer)) { - GT_UIInfos.openPlayerHeldItemUI(aPlayer); - } - return aStack; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item p_150895_1_, CreativeTabs p_150895_2_, List itemList) { - ItemStack itemStack = new ItemStack(this, 1); - if (this.getChargedItem(itemStack) == this) { - ItemStack charged = new ItemStack(this, 1); - ElectricItem.manager.charge(charged, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false); - itemList.add(charged); - } - if (this.getEmptyItem(itemStack) == this) { - itemList.add(new ItemStack(this, 1, this.getMaxDamage())); - } - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aIconRegister) { - this.mIcon = aIconRegister.registerIcon("bartworks:CircuitProgrammer"); - } - - @Override - public int getTier(ItemStack var1) { - return 1; - } - - @Override - public boolean canProvideEnergy(ItemStack itemStack) { - return false; - } - - @Override - public Item getChargedItem(ItemStack itemStack) { - return this; - } - - @Override - public Item getEmptyItem(ItemStack itemStack) { - return this; - } - - @Override - public double getMaxCharge(ItemStack itemStack) { - return 10000; - } - - @Override - public double getTransferLimit(ItemStack itemStack) { - return GT_Values.V[1]; - } - - private static final String NBT_KEY_HAS_CHIP = "HasChip"; - private static final String NBT_KEY_CHIP_CONFIG = "ChipConfig"; - - @Override - public ModularWindow createWindow(UIBuildContext buildContext, ItemStack heldStack) { - ModularWindow.Builder builder = ModularWindow.builder(256, 166); - builder.setBackground(BW_UITextures.BACKGROUND_CIRCUIT_PROGRAMMER); - builder.bindPlayerInventory(buildContext.getPlayer(), new Pos2d(86, 83), ModularUITextures.ITEM_SLOT); - - ItemStackHandler inventoryHandler = new ItemStackHandler(1) { - - @Override - public int getSlotLimit(int slot) { - return 1; - } - }; - SlotWidget circuitSlotWidget = new SlotWidget(new BaseSlot(inventoryHandler, 0) { - - @Override - public void putStack(ItemStack stack) { - if (Circuit_Programmer.this.isLVCircuit(stack)) { - stack = Circuit_Programmer.this.createRealCircuit(0); - } - ((IItemHandlerModifiable) this.getItemHandler()).setStackInSlot(this.getSlotIndex(), stack); - this.onSlotChanged(); - } - }); - - ItemStack initialStack = null; - NBTTagCompound tag = heldStack.getTagCompound(); - if (tag != null && tag.getBoolean(NBT_KEY_HAS_CHIP)) { - initialStack = this.createRealCircuit(tag.getByte(NBT_KEY_CHIP_CONFIG)); - } - circuitSlotWidget.getMcSlot() - .putStack(initialStack); - - builder.widget(circuitSlotWidget.setChangeListener(widget -> { - ItemStack stack = widget.getMcSlot() - .getStack(); - ItemStack heldItem = widget.getContext() - .getPlayer() - .getHeldItem(); - NBTTagCompound tag2 = heldItem.getTagCompound(); - if (tag2 == null) { - tag2 = new NBTTagCompound(); - } - - if (stack != null) { - tag2.setBoolean(NBT_KEY_HAS_CHIP, true); - tag2.setByte(NBT_KEY_CHIP_CONFIG, (byte) stack.getItemDamage()); - } else { - tag2.setBoolean(NBT_KEY_HAS_CHIP, false); - } - heldItem.setTagCompound(tag2); - }) - .setFilter(stack -> this.isProgrammedCircuit(stack) || this.isLVCircuit(stack)) - .setBackground(ModularUITextures.ITEM_SLOT, GT_UITextures.OVERLAY_SLOT_INT_CIRCUIT) - .setPos(122, 60)); - - for (int i = 0; i < 24; i++) { - final int index = i; - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (circuitSlotWidget.getMcSlot() - .getHasStack() - && this.isProgrammedCircuit( - circuitSlotWidget.getMcSlot() - .getStack())) { - circuitSlotWidget.getMcSlot() - .putStack(this.createRealCircuit(index + 1)); - } - }) - .setPos(32 + i % 12 * 18, 21 + i / 12 * 18) - .setSize(18, 18)); - } - - return builder.build(); - } - - private ItemStack createRealCircuit(int config) { - return ItemList.Circuit_Integrated.getWithDamage(1, config); - } - - private boolean isProgrammedCircuit(ItemStack stack) { - return stack.getItem() - .equals( - GT_Utility.getIntegratedCircuit(0) - .getItem()); - } - - private boolean isLVCircuit(ItemStack stack) { - return BW_Util.checkStackAndPrefix(stack) - && OrePrefixes.circuit.equals(GT_OreDictUnificator.getAssociation(stack).mPrefix) - && GT_OreDictUnificator.getAssociation(stack).mMaterial.mMaterial.equals(Materials.LV); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/GT_Rockcutter_Item.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/GT_Rockcutter_Item.java deleted file mode 100644 index 1fb3e42910..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/GT_Rockcutter_Item.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.items; - -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemTool; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.google.common.collect.Sets; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.GT_Values; -import ic2.api.item.ElectricItem; -import ic2.api.item.IElectricItem; - -public class GT_Rockcutter_Item extends ItemTool implements IElectricItem { - - private static Set mineableBlocks = Sets - .newHashSet(Blocks.stone, Blocks.cobblestone, Blocks.sand, Blocks.clay); - private final int mCharge; - private final int mTransfer; - public int mTier; - - @SideOnly(Side.CLIENT) - private IIcon icon; - - private final int multi; - - public GT_Rockcutter_Item(int aTier) { - super(2 * aTier, Item.ToolMaterial.EMERALD, GT_Rockcutter_Item.mineableBlocks); - this.mTier = aTier; - this.multi = (int) Math.pow(10, this.mTier - 1); - GT_Rockcutter_Item.mineableBlocks = new HashSet<>(); - this.maxStackSize = 1; - this.mCharge = 10000 * this.multi; - this.mTransfer = (int) GT_Values.V[this.mTier]; - this.efficiencyOnProperMaterial = 2.0f * this.mTier; - this.setCreativeTab(MainMod.GT2); - this.setMaxDamage(27 + 10 * this.multi); - this.setNoRepair(); - this.setUnlocalizedName("GT_Rockcutter_Item_" + GT_Values.VN[this.mTier]); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - aList.add(StatCollector.translateToLocal("tooltip.bw.tier.name") + " " + GT_Values.VN[this.mTier]); - } - - @Override - public void onUpdate(ItemStack aStack, World worldIn, Entity entityIn, int p_77663_4_, boolean p_77663_5_) { - if (!ElectricItem.manager.canUse(aStack, 500 * this.multi)) { - if (aStack.isItemEnchanted()) { - aStack.getTagCompound() - .removeTag("ench"); - } - } else if (!aStack.isItemEnchanted()) { - aStack.addEnchantment(Enchantment.silkTouch, 3); - } - } - - @Override - public boolean onItemUse(ItemStack aStack, EntityPlayer aPlayer, World p_77648_3_, int p_77648_4_, int p_77648_5_, - int p_77648_6_, int p_77648_7_, float p_77648_8_, float p_77648_9_, float p_77648_10_) { - ElectricItem.manager.use(aStack, 0, aPlayer); - return false; - } - - @Override - public boolean onBlockDestroyed(ItemStack var1, World var2, Block var3, int var4, int var5, int var6, - EntityLivingBase var7) { - ElectricItem.manager.use(var1, 0, var7); - if (ElectricItem.manager.canUse(var1, 500 * this.multi)) { - ElectricItem.manager.use(var1, 500 * this.multi, var7); - } else { - ElectricItem.manager.discharge(var1, Integer.MAX_VALUE, Integer.MAX_VALUE, true, true, false); - } - return true; - } - - @Override - public boolean canHarvestBlock(Block par1Block, ItemStack itemStack) { - return par1Block.getMaterial() - .equals(Material.glass) - || par1Block.getMaterial() - .equals(Material.clay) - || par1Block.getMaterial() - .equals(Material.packedIce) - || par1Block.getMaterial() - .equals(Material.ice) - || par1Block.getMaterial() - .equals(Material.sand) - || par1Block.getMaterial() - .equals(Material.ground) - || par1Block.getMaterial() - .equals(Material.rock) - || mineableBlocks.contains(par1Block); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item p_150895_1_, CreativeTabs p_150895_2_, List itemList) { - ItemStack itemStack = new ItemStack(this, 1); - if (this.getChargedItem(itemStack) == this) { - ItemStack charged = new ItemStack(this, 1); - ElectricItem.manager.charge(charged, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false); - itemList.add(charged); - } - if (this.getEmptyItem(itemStack) == this) { - itemList.add(new ItemStack(this, 1, this.getMaxDamage())); - } - } - - @Override - public boolean canProvideEnergy(ItemStack itemStack) { - return false; - } - - @Override - public Item getChargedItem(ItemStack itemStack) { - return this; - } - - @Override - public Item getEmptyItem(ItemStack itemStack) { - return this; - } - - @Override - public double getMaxCharge(ItemStack itemStack) { - return this.mCharge; - } - - @Override - public int getTier(ItemStack itemStack) { - return this.mTier; - } - - @Override - public double getTransferLimit(ItemStack itemStack) { - return this.mTransfer; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - this.icon = iconRegister.registerIcon("bartworks:GT_Rockcutter"); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIconFromDamage(int par1) { - return this.icon; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/GT_Teslastaff_Item.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/GT_Teslastaff_Item.java deleted file mode 100644 index 9c68f093d7..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/GT_Teslastaff_Item.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.items; - -import java.util.List; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemTool; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.google.common.collect.Sets; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.api.item.ElectricItem; -import ic2.api.item.IElectricItem; - -public class GT_Teslastaff_Item extends ItemTool implements IElectricItem { - - private static final Set effective = Sets.newHashSet(Blocks.web); - private final double mCharge; - private final double mTransfer; - public int mTier; - - @SideOnly(Side.CLIENT) - private IIcon icon; - - public GT_Teslastaff_Item() { - super(0, Item.ToolMaterial.GOLD, GT_Teslastaff_Item.effective); - this.setCreativeTab(MainMod.GT2); - this.setNoRepair(); - this.mCharge = 10000000D; - this.mTransfer = 8192D; - this.mTier = 4; - this.setMaxStackSize(1); - this.setMaxDamage(27); - this.setUnlocalizedName("GT_Teslastaff_Item"); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - aList.add(StatCollector.translateToLocal("tooltip.teslastaff.0.name")); - } - - @Override - public boolean hitEntity(ItemStack aStack, EntityLivingBase aTarget, EntityLivingBase aPlayer) { - if (aTarget instanceof EntityLiving tTarget && ElectricItem.manager.canUse(aStack, 9000000)) { - ElectricItem.manager.use(aStack, 9000000, aPlayer); - for (int i = 1; i < 5; ++i) { - if (tTarget.getEquipmentInSlot(i) != null && tTarget.getEquipmentInSlot(i) - .getItem() instanceof IElectricItem) { - tTarget.setCurrentItemOrArmor(i, null); - } - } - } - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item p_150895_1_, CreativeTabs p_150895_2_, List itemList) { - ItemStack itemStack = new ItemStack(this, 1); - if (this.getChargedItem(itemStack) == this) { - ItemStack charged = new ItemStack(this, 1); - ElectricItem.manager.charge(charged, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false); - itemList.add(charged); - } - if (this.getEmptyItem(itemStack) == this) { - itemList.add(new ItemStack(this, 1, this.getMaxDamage())); - } - } - - @Override - public boolean canProvideEnergy(ItemStack itemStack) { - return false; - } - - @Override - public Item getChargedItem(ItemStack itemStack) { - return this; - } - - @Override - public Item getEmptyItem(ItemStack itemStack) { - return this; - } - - @Override - public double getMaxCharge(ItemStack itemStack) { - return this.mCharge; - } - - @Override - public boolean isRepairable() { - return false; - } - - @Override - public int getTier(ItemStack itemStack) { - return this.mTier; - } - - @Override - public double getTransferLimit(ItemStack itemStack) { - return this.mTransfer; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - this.icon = iconRegister.registerIcon("bartworks:GT_Teslastaff"); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIconFromDamage(int par1) { - return this.icon; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/LabModule.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/LabModule.java deleted file mode 100644 index a4712dc36a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/LabModule.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; - -import com.github.bartimaeusnek.bartworks.MainMod; - -public class LabModule extends SimpleSubItemClass { - - public LabModule(String[] tex) { - super(tex); - this.setCreativeTab(MainMod.BIO_TAB); - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return "labModule." + super.getUnlocalizedName(stack); - } - - @Override - public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List aList, boolean p_77624_4_) { - aList.add(StatCollector.translateToLocal("tooltip.labmodule.0.name")); - super.addInformation(p_77624_1_, p_77624_2_, aList, p_77624_4_); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/LabParts.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/LabParts.java deleted file mode 100644 index cb5a65c13b..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/LabParts.java +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.items; - -import static com.github.bartimaeusnek.bartworks.common.loaders.BioItemList.getAllDNASampleFlasks; -import static com.github.bartimaeusnek.bartworks.common.loaders.BioItemList.getAllPetriDishes; -import static com.github.bartimaeusnek.bartworks.common.loaders.BioItemList.getAllPlasmidCells; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.util.BW_ColorUtil; -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.github.bartimaeusnek.bartworks.util.BioCulture; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class LabParts extends SimpleSubItemClass { - - public LabParts(String[] tex) { - super(tex); - this.setCreativeTab(MainMod.BIO_TAB); - } - - @Override - public EnumRarity getRarity(ItemStack itemStack) { - - if (itemStack == null || itemStack.getTagCompound() == null) return EnumRarity.common; - - return switch (itemStack.getItemDamage()) { - case 0 -> BW_Util.getRarityFromByte( - itemStack.getTagCompound() - .getCompoundTag("DNA") - .getByte("Rarity")); - case 1, 2 -> BW_Util.getRarityFromByte( - itemStack.getTagCompound() - .getByte("Rarity")); - default -> EnumRarity.common; - }; - } - - @Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int p_82790_2_) { - if (stack.getItemDamage() == 0 && stack.getTagCompound() != null - && stack.getTagCompound() - .getIntArray("Color") != null - && stack.getTagCompound() - .getIntArray("Color").length > 0) { - int[] rgb = stack.getTagCompound() - .getIntArray("Color"); - return BW_ColorUtil.getColorFromRGBArray(rgb); - } - return super.getColorFromItemStack(stack, p_82790_2_); - } - - @Override - public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean b) { - if (itemStack == null) return; - - if (itemStack.getTagCompound() == null) { - switch (itemStack.getItemDamage()) { - case 0: - list.add(StatCollector.translateToLocal("tooltip.labparts.0.name")); - break; - case 1: - list.add(StatCollector.translateToLocal("tooltip.labparts.1.name")); - break; - case 2: - list.add(StatCollector.translateToLocal("tooltip.labparts.2.name")); - break; - case 3: - list.add(StatCollector.translateToLocal("tooltip.labparts.3.name")); - break; - case 4: - list.add(StatCollector.translateToLocal("tooltip.labparts.4.name")); - break; - default: - break; - } - super.addInformation(itemStack, entityPlayer, list, b); - return; - } - - BioCulture culture = BioCulture.getBioCulture( - itemStack.getTagCompound() - .getString("Name")); - - switch (itemStack.getItemDamage()) { - case 0: - list.add( - StatCollector.translateToLocal("tooltip.labparts.5.name") + " " - + itemStack.getTagCompound() - .getString("Name") - + (culture != null ? " (" + culture.getLocalisedName() + ")" : "")); - if (!itemStack.getTagCompound() - .getBoolean("Breedable")) { - list.add(StatCollector.translateToLocal("tooltip.labparts.6.name")); - } - break; - case 1: - list.add( - StatCollector.translateToLocal("tooltip.labparts.7.name") + " " - + itemStack.getTagCompound() - .getString("Name") - + (culture != null ? " (" + culture.getLocalisedName() + ")" : "")); - break; - case 2: - list.add( - StatCollector.translateToLocal("tooltip.labparts.8.name") + " " - + itemStack.getTagCompound() - .getString("Name") - + (culture != null ? " (" + culture.getLocalisedName() + ")" : "")); - break; - default: - break; - } - super.addInformation(itemStack, entityPlayer, list, b); - } - - @Override - public void getSubItems(Item item, CreativeTabs creativeTabs, List list) { - list.addAll(getAllPetriDishes()); - list.addAll(getAllDNASampleFlasks()); - list.addAll(getAllPlasmidCells()); - super.getSubItems(item, creativeTabs, list); - } - - @Override - public String getUnlocalizedName(ItemStack itemStack) { - if (itemStack.getItemDamage() == 0 && itemStack.getTagCompound() != null) - return "filled.item." + this.tex[itemStack.getItemDamage()].replace('/', '.'); - return super.getUnlocalizedName(itemStack); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/SimpleIconItem.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/SimpleIconItem.java deleted file mode 100644 index e31e23d47c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/SimpleIconItem.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.items; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.Item; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class SimpleIconItem extends Item { - - private final String tex; - - public SimpleIconItem(String tex) { - this.tex = tex; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - this.itemIcon = iconRegister.registerIcon("bartworks:" + this.tex); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/SimpleSubItemClass.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/items/SimpleSubItemClass.java deleted file mode 100644 index b482d14f1a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/items/SimpleSubItemClass.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.items; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import com.github.bartimaeusnek.bartworks.MainMod; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class SimpleSubItemClass extends Item { - - @SideOnly(Side.CLIENT) - protected IIcon[] itemIcon; - - String[] tex; - - public SimpleSubItemClass(String... tex) { - this.tex = tex; - this.hasSubtypes = true; - this.setCreativeTab(MainMod.BWT); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - this.itemIcon = new IIcon[this.tex.length]; - for (int i = 0; i < this.tex.length; i++) { - this.itemIcon[i] = iconRegister.registerIcon(MainMod.MOD_ID + ":" + this.tex[i]); - } - } - - @Override - public void getSubItems(Item p_150895_1_, CreativeTabs p_150895_2_, List p_150895_3_) { - for (int i = 0; i < this.tex.length; i++) { - p_150895_3_.add(new ItemStack(p_150895_1_, 1, i)); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIconFromDamage(int p_77617_1_) { - if (p_77617_1_ < this.tex.length) return this.itemIcon[p_77617_1_]; - return this.itemIcon[0]; - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - if (stack.getItemDamage() < this.tex.length) return "item." + this.tex[stack.getItemDamage()].replace('/', '.'); - return "WrongDamageItemDestroyIt"; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ArtificialMicaLine.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ArtificialMicaLine.java deleted file mode 100644 index 0074ee2c67..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ArtificialMicaLine.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders; - -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.recipe.RecipeMaps.benderRecipes; -import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; - -import com.github.bartimaeusnek.bartworks.system.material.BW_GT_MaterialReference; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -public class ArtificialMicaLine { - - public static void runArtificialMicaRecipe() { - // Mg + O = MgO - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Magnesium.getDust(1)) - .itemOutputs(Materials.Magnesia.getDust(2)) - .fluidInputs(Materials.Oxygen.getGas(1000)) - .duration(2 * SECONDS) - .eut(8) - .addTo(UniversalChemical); - // Si + 6HF = H2SiF6 + 4H - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Silicon.getDust(1), Materials.Empty.getCells(4)) - .itemOutputs(Materials.Hydrogen.getCells(4)) - .fluidInputs(Materials.HydrofluoricAcid.getFluid(6000)) - .fluidOutputs(WerkstoffLoader.HexafluorosilicicAcid.getFluidOrGas(1000)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(UniversalChemical); - // K + Cl = KCl - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Potassium.getDust(1), GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(Materials.RockSalt.getDust(2)) - .fluidInputs(Materials.Chlorine.getGas(1000)) - .duration(20 * TICKS) - .eut(8) - .addTo(UniversalChemical); - - // 2KCl + H2SiF6 = 2HCl + K2SiF6 - GT_Values.RA.stdBuilder() - .itemInputs(Materials.RockSalt.getDust(4)) - .itemOutputs(WerkstoffLoader.Potassiumfluorosilicate.get(OrePrefixes.dust, 9)) - .fluidInputs(WerkstoffLoader.HexafluorosilicicAcid.getFluidOrGas(1000)) - .fluidOutputs(Materials.HydrochloricAcid.getFluid(2000)) - .duration(1 * SECONDS) - .eut(8) - .addTo(mixerRecipes); - - // 2K + CO2 + O = K2CO3 - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Potassium.getDust(2), Materials.CarbonDioxide.getCells(1)) - .itemOutputs(WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 6), Materials.Empty.getCells(1)) - .fluidInputs(Materials.Oxygen.getGas(1000)) - .duration(2 * SECONDS) - .eut(8) - .addTo(UniversalChemical); - // K2O + CO2 = K2CO3 - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Potash.getDust(3), Materials.CarbonDioxide.getCells(1)) - .itemOutputs(WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 6), Materials.Empty.getCells(1)) - .duration(2 * SECONDS) - .eut(8) - .addTo(UniversalChemical); - - // 55Quartz Dust + 20K2SiF6 + 12Al2O3 + 4K2CO3 = 91Raw Fluorophlogopite Dust - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.QuartzSand.getDust(55), - WerkstoffLoader.Potassiumfluorosilicate.get(OrePrefixes.dust, 20), - WerkstoffLoader.Alumina.get(OrePrefixes.dust, 12), - WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 4), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs( - WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), - WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 27)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - // 55Quartzite/Nether Quartz Dust + 20K2SiF6 + 57Al2O3 + 4K2CO3 = 136Raw Fluorophlogopite Dust - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Quartzite.getDust(55), - WerkstoffLoader.Potassiumfluorosilicate.get(OrePrefixes.dust, 20), - WerkstoffLoader.Alumina.get(OrePrefixes.dust, 57), - WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 4), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs( - WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), - WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), - WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 8)) - .fluidInputs() - .fluidOutputs() - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.NetherQuartz.getDust(55), - WerkstoffLoader.Potassiumfluorosilicate.get(OrePrefixes.dust, 20), - WerkstoffLoader.Alumina.get(OrePrefixes.dust, 57), - WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 4), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs( - WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), - WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), - WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 8)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - // 62Certus Quartz Dust + 10K2SiF6 + 12Al2O3 + 7K2CO3 = 91Raw Fluorophlogopite Dust - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.CertusQuartz.getDust(62), - WerkstoffLoader.Potassiumfluorosilicate.get(OrePrefixes.dust, 10), - WerkstoffLoader.Alumina.get(OrePrefixes.dust, 12), - WerkstoffLoader.PotassiumCarbonate.get(OrePrefixes.dust, 7), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs( - WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 64), - WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 27)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - // MgO(s) = MgO(l) - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Magnesia.getDust(1)) - .fluidOutputs(Materials.Magnesia.getMolten(144)) - .duration(20 * TICKS) - .eut(TierEU.RECIPE_MV) - .addTo(fluidExtractionRecipes); - - // 27Raw Fluorophlogopite Dust + 720MgO(l) = 4608Fluorophlogopite(l) - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.RawFluorophlogopite.get(OrePrefixes.dust, 27)) - .itemOutputs(Materials.Glass.getDust(1)) - .fluidInputs(BW_GT_MaterialReference.Magnesia.getMolten(720)) - .fluidOutputs(WerkstoffLoader.HotFluorophlogopite.getFluidOrGas(4608)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(COIL_HEAT, 1700) - .addTo(blastFurnaceRecipes); - - // 144Fluorophlogopite(l) = Fluorophlogopite - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Plate.get(0)) - .itemOutputs(WerkstoffLoader.Fluorophlogopite.get(OrePrefixes.plate, 1)) - .fluidInputs(WerkstoffLoader.HotFluorophlogopite.getFluidOrGas(144)) - .duration(10 * TICKS) - .eut(TierEU.RECIPE_MV) - .noOptimize() - .addTo(vacuumFreezerRecipes); - - // Fluorophlogopite = 4Insulator Foil - if (NewHorizonsCoreMod.isModLoaded()) { - - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffLoader.Fluorophlogopite.get(OrePrefixes.plate, 1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 4)) - .duration(10 * TICKS) - .eut(600) - .addTo(benderRecipes); - - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioCultureLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioCultureLoader.java deleted file mode 100644 index 5bf9ff8185..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioCultureLoader.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.loaders; - -import java.awt.Color; - -import net.minecraft.item.EnumRarity; - -import com.github.bartimaeusnek.bartworks.util.BioCulture; -import com.github.bartimaeusnek.bartworks.util.BioDNA; -import com.github.bartimaeusnek.bartworks.util.BioData; -import com.github.bartimaeusnek.bartworks.util.BioPlasmid; - -public class BioCultureLoader { - - public static final BioData BIO_DATA_BETA_LACMATASE = BioData - .createAndRegisterBioData("beta-Lactamase", EnumRarity.uncommon, 10000, 0); - private static final BioData BIO_DATA_YEAST = BioData - .createAndRegisterBioData("Saccharomyces cerevisiae", EnumRarity.common); - private static final BioDNA BIO_DNA_WHINE_YEAST = BioDNA - .createAndRegisterBioDNA("Saccharomyces cerevisiae var bayanus", EnumRarity.uncommon); - private static final BioDNA BIO_DNA_BEER_YEAST = BioDNA - .createAndRegisterBioDNA("Saccharomyces cerevisiae var cerevisiae", EnumRarity.uncommon); - private static final BioData eColiData = BioData - .createAndRegisterBioData("Escherichia koli", EnumRarity.uncommon, 10000, 0); - private static final BioDNA BIO_DNA_ANAEROBIC_OIL = BioDNA - .createAndRegisterBioDNA("Pseudomonas Veronii", EnumRarity.uncommon); - private static final BioData BIO_DATA_ANAEROBIC_OIL = BioData - .createAndRegisterBioData("Pseudomonas Veronii", EnumRarity.uncommon, 5000, 1); - public static BioCulture CommonYeast; - public static BioCulture WhineYeast; - public static BioCulture BeerYeast; - public static BioCulture rottenFleshBacteria; - public static BioCulture eColi; - public static BioCulture anaerobicOil; - public static BioCulture generalPurposeFermentingBacteria; - - public static void run() { - BioCultureLoader.CommonYeast = BioCulture.createAndRegisterBioCulture( - new Color(255, 248, 200), - "Saccharomyces cerevisiae", - BioPlasmid.convertDataToPlasmid(BioCultureLoader.BIO_DATA_YEAST), - BioDNA.convertDataToDNA(BioCultureLoader.BIO_DATA_YEAST), - true); - BioCultureLoader.WhineYeast = BioCulture.createAndRegisterBioCulture( - new Color(255, 248, 200), - "Saccharomyces cerevisiae var bayanus", - BioPlasmid.convertDataToPlasmid(BioCultureLoader.BIO_DNA_WHINE_YEAST), - BioCultureLoader.BIO_DNA_WHINE_YEAST, - EnumRarity.uncommon, - true); - BioCultureLoader.BeerYeast = BioCulture.createAndRegisterBioCulture( - new Color(255, 248, 200), - "Saccharomyces cerevisiae var cerevisiae", - BioPlasmid.convertDataToPlasmid(BioCultureLoader.BIO_DNA_BEER_YEAST), - BioCultureLoader.BIO_DNA_BEER_YEAST, - EnumRarity.uncommon, - true); - BioCultureLoader.rottenFleshBacteria = BioCulture.createAndRegisterBioCulture( - new Color(110, 40, 25), - "Escherichia cadaver", - BioPlasmid.convertDataToPlasmid(BioCultureLoader.BIO_DATA_BETA_LACMATASE), - BioDNA.convertDataToDNA(BioCultureLoader.BIO_DATA_BETA_LACMATASE), - false); - BioCultureLoader.eColi = BioCulture.createAndRegisterBioCulture( - new Color(149, 132, 75), - "Escherichia koli", - BioPlasmid.convertDataToPlasmid(BioCultureLoader.eColiData), - BioDNA.convertDataToDNA(BioCultureLoader.eColiData), - true); - BioCultureLoader.anaerobicOil = BioCulture.createAndRegisterBioCulture( - new Color(0, 0, 0), - "Pseudomonas Veronii", - BioPlasmid.convertDataToPlasmid(BioCultureLoader.BIO_DNA_ANAEROBIC_OIL), - BioDNA.convertDataToDNA(BioCultureLoader.BIO_DATA_ANAEROBIC_OIL), - true); - BioCultureLoader.generalPurposeFermentingBacteria = BioCulture.createAndRegisterBioCulture( - new Color(127, 69, 26), - "Saccharomyces escherichia", - BioCultureLoader.CommonYeast.getPlasmid(), - BioCultureLoader.eColi.getdDNA(), - EnumRarity.epic, - true); - - BioCultureLoader.CommonYeast.setLocalisedName("Common Yeast"); - BioCultureLoader.WhineYeast.setLocalisedName("Whine Yeast"); - BioCultureLoader.BeerYeast.setLocalisedName("Beer Yeast"); - BioCultureLoader.rottenFleshBacteria.setLocalisedName("Rotten Flesh Bacteria"); - BioCultureLoader.eColi.setLocalisedName("eColi Bacteria"); - BioCultureLoader.anaerobicOil.setLocalisedName("Anaerobic Oil Bacteria"); - BioCultureLoader.generalPurposeFermentingBacteria.setLocalisedName("General Purpose Fermenting Bacteria"); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioItemList.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioItemList.java deleted file mode 100644 index 8b86d4cd93..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioItemList.java +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.loaders; - -import java.util.Collection; -import java.util.HashSet; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.common.items.LabModule; -import com.github.bartimaeusnek.bartworks.common.items.LabParts; -import com.github.bartimaeusnek.bartworks.util.BioCulture; -import com.github.bartimaeusnek.bartworks.util.BioDNA; -import com.github.bartimaeusnek.bartworks.util.BioData; -import com.github.bartimaeusnek.bartworks.util.BioPlasmid; - -import cpw.mods.fml.common.registry.GameRegistry; - -public class BioItemList { - - private BioItemList() {} - - private static final Item mItemBioLabParts = new LabModule( - new String[] { "DNAExtractionModule", "PCRThermoclyclingModule", "PlasmidSynthesisModule", - "TransformationModule", "ClonalCellularSynthesisModule" }); - public static final ItemStack[] mBioLabParts = { new ItemStack(BioItemList.mItemBioLabParts), - new ItemStack(BioItemList.mItemBioLabParts, 1, 1), new ItemStack(BioItemList.mItemBioLabParts, 1, 2), - new ItemStack(BioItemList.mItemBioLabParts, 1, 3), new ItemStack(BioItemList.mItemBioLabParts, 1, 4) }; - private static final Item vanillaBioLabParts = new LabParts( - new String[] { "petriDish", "DNASampleFlask", "PlasmidCell", "DetergentPowder", "Agarose", "IncubationModule", - "PlasmaMembrane" }); - - public static void registerBioItems() { - GameRegistry.registerItem(BioItemList.mItemBioLabParts, "BioLabModules"); - GameRegistry.registerItem(BioItemList.vanillaBioLabParts, "BioLabParts"); - } - - public static Collection getAllPetriDishes() { - HashSet ret = new HashSet<>(); - for (BioCulture Culture : BioCulture.BIO_CULTURE_ARRAY_LIST) { - ret.add(BioItemList.getPetriDish(Culture)); - } - return ret; - } - - public static Collection getAllDNASampleFlasks() { - HashSet ret = new HashSet<>(); - for (BioData dna : BioData.BIO_DATA_ARRAY_LIST) { - ret.add(BioItemList.getDNASampleFlask(BioDNA.convertDataToDNA(dna))); - } - return ret; - } - - public static Collection getAllPlasmidCells() { - HashSet ret = new HashSet<>(); - for (BioData dna : BioData.BIO_DATA_ARRAY_LIST) { - ret.add(BioItemList.getPlasmidCell(BioPlasmid.convertDataToPlasmid(dna))); - } - return ret; - } - - public static ItemStack getPetriDish(BioCulture Culture) { - if (Culture == null) return new ItemStack(BioItemList.vanillaBioLabParts); - ItemStack ret = new ItemStack(BioItemList.vanillaBioLabParts); - ret.setTagCompound(BioCulture.getNBTTagFromCulture(Culture)); - return ret; - } - - public static ItemStack getDNASampleFlask(BioDNA dna) { - if (dna == null) return new ItemStack(BioItemList.vanillaBioLabParts, 1, 1); - - ItemStack ret = new ItemStack(BioItemList.vanillaBioLabParts, 1, 1); - ret.setTagCompound(BioData.getNBTTagFromBioData(dna)); - return ret; - } - - public static ItemStack getPlasmidCell(BioPlasmid plasmid) { - if (plasmid == null) return new ItemStack(BioItemList.vanillaBioLabParts, 1, 2); - ItemStack ret = new ItemStack(BioItemList.vanillaBioLabParts, 1, 2); - ret.setTagCompound(BioData.getNBTTagFromBioData(plasmid)); - return ret; - } - - /** - * 1 - Detergent Powder 2 - Agarose 3 - Incubation Module 4 - Plasma Membrane others are null - * - * @param selection see above - * @return the selected Item - */ - public static ItemStack getOther(int selection) { - if (selection < 1 || selection > 4) return null; - - return new ItemStack(BioItemList.vanillaBioLabParts, 1, 2 + selection); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioLabLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioLabLoader.java deleted file mode 100644 index 28ad279e28..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioLabLoader.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.loaders; - -public class BioLabLoader { - - public static void run() { - FluidLoader.run(); - BioItemList.registerBioItems(); - BioRecipeLoader.run(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioRecipeLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioRecipeLoader.java deleted file mode 100644 index e922f76b8f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/BioRecipeLoader.java +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.loaders; - -import static com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps.bacterialVatRecipes; -import static com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps.bioLabRecipes; -import static gregtech.api.enums.Mods.CropsPlusPlus; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.SIEVERTS; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class BioRecipeLoader { - - public static void run() { - registerWaterBasedBioLabIncubations(); - registerBacterialVatRecipes(); - } - - public static void registerWaterBasedBioLabIncubations() { - FluidStack[] easyFluids = { Materials.Water.getFluid(1000L), - FluidRegistry.getFluidStack("ic2distilledwater", 1000) }; - for (FluidStack fluidStack : easyFluids) { - - GT_Values.RA.stdBuilder() - .itemInputs(BioItemList.getPetriDish(null), new ItemStack(Items.rotten_flesh)) - .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.rottenFleshBacteria)) - .outputChances(33_00) - .fluidInputs(fluidStack) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(bioLabRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(BioItemList.getPetriDish(null), new ItemStack(Items.fermented_spider_eye)) - .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.eColi)) - .outputChances(45_00) - .fluidInputs(fluidStack) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(bioLabRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(BioItemList.getPetriDish(null), ItemList.Food_Dough.get(1L)) - .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.CommonYeast)) - .outputChances(75_00) - .fluidInputs(fluidStack) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(bioLabRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(BioItemList.getPetriDish(null), ItemList.Food_Dough_Sugar.get(1L)) - .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.WhineYeast)) - .outputChances(25_00) - .fluidInputs(fluidStack) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(bioLabRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(BioItemList.getPetriDish(null), ItemList.Bottle_Wine.get(1L)) - .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.WhineYeast)) - .outputChances(33_00) - .fluidInputs(fluidStack) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(bioLabRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(BioItemList.getPetriDish(null), ItemList.Bottle_Beer.get(1L)) - .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.BeerYeast)) - .outputChances(25_00) - .fluidInputs(fluidStack) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(bioLabRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(BioItemList.getPetriDish(null), ItemList.Bottle_Dark_Beer.get(1L)) - .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.BeerYeast)) - .outputChances(33_00) - .fluidInputs(fluidStack) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(bioLabRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(BioItemList.getPetriDish(null), new ItemStack(Blocks.dirt)) - .itemOutputs(BioItemList.getPetriDish(BioCultureLoader.anaerobicOil)) - .outputChances(100) - .fluidInputs(fluidStack) - .duration(1 * MINUTES + 15 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(bioLabRecipes); - } - } - - public static void registerWaterBasedBacterialVatRecipes() { - FluidStack[] easyFluids = { Materials.Water.getFluid(1000L), - FluidRegistry.getFluidStack("ic2distilledwater", 1000) }; - for (FluidStack fluidStack : easyFluids) { - if (CropsPlusPlus.isModLoaded()) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(2), new ItemStack(Items.sugar, 64)) - .special(BioItemList.getPetriDish(BioCultureLoader.CommonYeast)) - .fluidInputs(new FluidStack(fluidStack, 100)) - .fluidOutputs(FluidRegistry.getFluidStack("potion.ghp", 1)) - .duration(17 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_EV) - .noOptimize() - .addTo(bacterialVatRecipes); - } - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Grapes.get(16)) - .special(BioItemList.getPetriDish(BioCultureLoader.WhineYeast)) - .fluidInputs(new FluidStack(fluidStack, 100)) - .fluidOutputs(FluidRegistry.getFluidStack("potion.wine", 12)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .noOptimize() - .addTo(bacterialVatRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(Items.sugar, 4), - ItemList.IC2_Hops.get(16L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 8L)) - .special(BioItemList.getPetriDish(BioCultureLoader.BeerYeast)) - .fluidInputs(new FluidStack(fluidStack, 100)) - .fluidOutputs(FluidRegistry.getFluidStack("potion.beer", 5)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .noOptimize() - .addTo(bacterialVatRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.IC2_Hops.get(32L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 16L)) - .special(BioItemList.getPetriDish(BioCultureLoader.BeerYeast)) - .fluidInputs(new FluidStack(fluidStack, 100)) - .fluidOutputs(FluidRegistry.getFluidStack("potion.darkbeer", 10)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .noOptimize() - .addTo(bacterialVatRecipes); - } - } - - public static void registerBacterialVatRecipes() { - registerWaterBasedBacterialVatRecipes(); - - GT_Values.RA.stdBuilder() - .special(BioItemList.getPetriDish(BioCultureLoader.WhineYeast)) - .fluidInputs(FluidRegistry.getFluidStack("potion.grapejuice", 100)) - .fluidOutputs(FluidRegistry.getFluidStack("potion.wine", 12)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .noOptimize() - .addTo(bacterialVatRecipes); - - GT_Values.RA.stdBuilder() - .special(BioItemList.getPetriDish(BioCultureLoader.anaerobicOil)) - .fluidInputs(Materials.FermentedBiomass.getFluid(10000)) - .fluidOutputs(new FluidStack(FluidLoader.fulvicAcid, 1000)) - .duration(2 * MINUTES + 17 * SECONDS + 8 * TICKS) - .eut(TierEU.RECIPE_LV) - .noOptimize() - .addTo(bacterialVatRecipes); - } - - public static void runOnServerStarted() { - RecipeMaps.fermentingRecipes.getAllRecipes() - .forEach( - recipe -> GT_Values.RA.stdBuilder() - .special(BioItemList.getPetriDish(BioCultureLoader.generalPurposeFermentingBacteria)) - .fluidInputs(recipe.mFluidInputs) - .fluidOutputs(recipe.mFluidOutputs) - .duration(recipe.mDuration) - .eut(recipe.mEUt) - .metadata(SIEVERTS, (int) GT_Utility.getTier(recipe.mEUt)) - .addTo(bacterialVatRecipes)); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java deleted file mode 100644 index d616829fbd..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ElectricImplosionCompressorRecipes.java +++ /dev/null @@ -1,229 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders; - -import static com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps.electricImplosionCompressorRecipes; -import static goodgenerator.loader.Loaders.highDensityPlutonium; -import static goodgenerator.loader.Loaders.highDensityPlutoniumNugget; -import static goodgenerator.loader.Loaders.highDensityThorium; -import static goodgenerator.loader.Loaders.highDensityThoriumNugget; -import static goodgenerator.loader.Loaders.highDensityUranium; -import static goodgenerator.loader.Loaders.highDensityUraniumNugget; -import static gregtech.api.enums.GT_Values.M; -import static gregtech.api.enums.Mods.Avaritia; -import static gregtech.api.enums.Mods.EternalSingularity; -import static gregtech.api.enums.Mods.OpenComputers; -import static gregtech.api.enums.Mods.SuperSolarPanels; -import static gregtech.api.enums.Mods.UniversalSingularities; -import static gregtech.api.util.GT_ModHandler.getModItem; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class ElectricImplosionCompressorRecipes implements Runnable { - - @Override - public void run() { - // Custom electric implosion compressor recipes. Cannot be overclocked. - - if (EternalSingularity.isModLoaded()) { - - GT_Values.RA.stdBuilder() - .itemOutputs(getModItem(EternalSingularity.ID, "eternal_singularity", 1L)) - .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(72L)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .noOptimize() - .addTo(electricImplosionCompressorRecipes); - - if (UniversalSingularities.isModLoaded()) { - // Raw Exposed Optical Chip - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Circuit_Silicon_Wafer7.get(1L), - // Fluxed Electrum Singularity. - getModItem(UniversalSingularities.ID, "universal.general.singularity", 1L, 20)) - .itemOutputs(ItemList.Circuit_Chip_Optical.get(16L)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .noOptimize() - .addTo(electricImplosionCompressorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - // fluxed electrum singularity - getModItem(UniversalSingularities.ID, "universal.general.singularity", 1L, 20)) - .fluidInputs(MaterialsUEVplus.Mellion.getMolten(4 * 144L)) - // spaghettic singularity - .itemOutputs(getModItem(EternalSingularity.ID, "combined_singularity", 1L, 2)) - .duration(1 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(electricImplosionCompressorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - // iron singularity - getModItem(Avaritia.ID, "Singularity", 1L, 0)) - .fluidInputs(MaterialsUEVplus.Creon.getMolten(4 * 144L)) - // cryptic singularity - .itemOutputs(getModItem(EternalSingularity.ID, "combined_singularity", 1L, 4)) - .duration(1 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(electricImplosionCompressorRecipes); - } - } - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(highDensityPlutoniumNugget, 5)) - .itemOutputs(new ItemStack(highDensityPlutonium, 1)) - .fluidInputs(Materials.Neutronium.getMolten(72L)) - .duration(1) - .eut(TierEU.RECIPE_UEV) - .noOptimize() - .addTo(electricImplosionCompressorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(highDensityUraniumNugget, 5)) - .itemOutputs(new ItemStack(highDensityUranium, 1)) - .fluidInputs(Materials.Neutronium.getMolten(72L)) - .duration(1) - .eut(TierEU.RECIPE_UEV) - .noOptimize() - .addTo(electricImplosionCompressorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(highDensityThoriumNugget, 5)) - .itemOutputs(new ItemStack(highDensityThorium, 1)) - .fluidInputs(Materials.Neutronium.getMolten(72L)) - .duration(1) - .eut(TierEU.RECIPE_UEV) - .noOptimize() - .addTo(electricImplosionCompressorRecipes); - - // Magneto material recipe for base fluid. - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.WhiteDwarfMatter, 1L), - GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.Universium, 1L), - GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.BlackDwarfMatter, 1L)) - .fluidInputs(MaterialsUEVplus.RawStarMatter.getFluid(64 * 144L)) - .fluidOutputs(MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(16 * 144L)) - .duration(4 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .noOptimize() - .addTo(electricImplosionCompressorRecipes); - - // Infinity Catalyst - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfinityCatalyst, 64L)) - .itemOutputs(getModItem(Avaritia.ID, "Resource", 1L, 5)) - .duration(1) - .eut(TierEU.RECIPE_UIV) - .noOptimize() - .addTo(electricImplosionCompressorRecipes); - - if (UniversalSingularities.isModLoaded()) { - // Fluxed Singularity - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.block, Materials.ElectrumFlux, 16L)) - .itemOutputs(getModItem(UniversalSingularities.ID, "universal.general.singularity", 1L, 20)) - .duration(1) - .eut(TierEU.RECIPE_UIV) - .noOptimize() - .addTo(electricImplosionCompressorRecipes); - - // Iron Singularity - GT_Values.RA.stdBuilder() - .itemOutputs(getModItem(Avaritia.ID, "Singularity", 1L, 0)) - .fluidInputs(Materials.Iron.getMolten(7296 * 9 * 144L)) - .duration(1) - .eut(TierEU.RECIPE_UIV) - .noOptimize() - .addTo(electricImplosionCompressorRecipes); - - // Copper Singularity - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Copper.getMolten(3648 * 9 * 144L)) - .itemOutputs(getModItem(Avaritia.ID, "Singularity", 1L, 5)) - .duration(1 * TICKS) - .eut(TierEU.RECIPE_UIV) - .addTo(electricImplosionCompressorRecipes); - - ItemStack diamondBlocks = GT_Utility - .copyAmountUnsafe(729, GT_OreDictUnificator.get(OrePrefixes.block, Materials.Diamond, 1L)); - // Diamond Singularity - GT_Values.RA.stdBuilder() - .itemInputs(diamondBlocks) - .itemOutputs(getModItem(UniversalSingularities.ID, "universal.vanilla.singularity", 1L, 2)) - .duration(1 * TICKS) - .eut(TierEU.RECIPE_UIV) - .addTo(electricImplosionCompressorRecipes); - } - // MHDCSM V2 - GT_Values.RA.stdBuilder() - .itemInputs(MaterialsUEVplus.Eternity.getNanite(1), MaterialsUEVplus.Universium.getNanite(1)) - .fluidInputs(MaterialsUEVplus.RawStarMatter.getFluid(128 * 144L)) - .fluidOutputs(MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(32 * 144L)) - .duration(4 * SECONDS) - .eut(TierEU.RECIPE_MAX) - .noOptimize() - .addTo(electricImplosionCompressorRecipes); - - this.addMagnetohydrodynamicallyConstrainedStarMatterPartRecipes(); - } - - private void addMagnetohydrodynamicallyConstrainedStarMatterPartRecipes() { - - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.frameGt, 1, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.nugget, 9, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.ingot, 1, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.plate, 1, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.plateDense, 1, 3); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.stick, 2, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.round, 8, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.bolt, 8, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.screw, 8, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.ring, 4, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.foil, 8, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.itemCasing, 2, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.gearGtSmall, 1, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.rotor, 1, 2); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.stickLong, 1, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.springSmall, 2, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.spring, 1, 1); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.gearGt, 1, 2); - this.addWhiteDwarfMagnetoEICRecipe(OrePrefixes.wireFine, 8, 1); - } - - private void addWhiteDwarfMagnetoEICRecipe(final OrePrefixes part, final int multiplier, - final int circuitMultiplier) { - - final int partFraction = (int) (144 * part.mMaterialAmount / M); - - GT_Values.RA.stdBuilder() - .itemInputs( - new Object[] { OrePrefixes.circuit.get(Materials.UHV), circuitMultiplier }, - getModItem(SuperSolarPanels.ID, "solarsplitter", 1, 0), - getModItem(OpenComputers.ID, "hologram2", circuitMultiplier, 0), - GT_OreDictUnificator.get(part, MaterialsUEVplus.Eternity, multiplier)) - .itemOutputs( - GT_OreDictUnificator - .get(part, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, multiplier)) - .fluidInputs( - MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter - .getMolten((long) partFraction * multiplier)) - .duration((int) (multiplier * (20 * partFraction / 144.0))) - .eut(TierEU.RECIPE_UXV) - .noOptimize() - .addTo(electricImplosionCompressorRecipes); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/FluidLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/FluidLoader.java deleted file mode 100644 index 809e52e6d1..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/FluidLoader.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.loaders; - -import static gregtech.api.enums.Mods.Gendustry; -import static gregtech.api.enums.Mods.GregTech; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import java.awt.Color; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.client.renderer.RendererGlasBlock; -import com.github.bartimaeusnek.bartworks.client.renderer.RendererSwitchingColorFluid; -import com.github.bartimaeusnek.bartworks.common.blocks.BioFluidBlock; -import com.github.bartimaeusnek.bartworks.common.tileentities.classic.BWTileEntityDimIDBridge; -import com.github.bartimaeusnek.bartworks.util.BioCulture; - -import cpw.mods.fml.client.registry.RenderingRegistry; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.FluidState; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -import gregtech.api.fluid.GT_FluidFactory; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.GT_MetaGenerated_Item_98; - -public class FluidLoader { - - public static IIcon autogenIIcon; - public static Fluid ff; - public static int renderID; - public static Block bioFluidBlock; - public static Fluid[] BioLabFluidMaterials; - public static ItemStack[] BioLabFluidCells; - - // OilProcessing chain - public static Fluid fulvicAcid, heatedfulvicAcid, Kerogen; - - public static void run() { - renderID = RenderingRegistry.getNextAvailableRenderId(); - ff = new Fluid("BWfakeFluid"); - GregTech_API.sGTBlockIconload.add( - () -> ff.setIcons( - GregTech_API.sBlockIcons - .registerIcon(GregTech.getResourcePath("fluids", "fluid.molten.autogenerated")))); - fulvicAcid = createAndRegisterFluid("Fulvic Acid", new Color(20, 20, 20)); - heatedfulvicAcid = createAndRegisterFluid("Heated Fulvic Acid", new Color(40, 20, 20), 720); - Kerogen = createAndRegisterFluid("Kerogen", new Color(85, 85, 85)); - BioLabFluidMaterials = new Fluid[] { createAndRegisterFluid("FluorecentdDNA", new Color(125, 50, 170)), - createAndRegisterFluid("EnzymesSollution", new Color(240, 200, 125)), - createAndRegisterFluid("Penicillin", new Color(255, 255, 255)), - createAndRegisterFluid("Polymerase", new Color(110, 180, 110)) }; - - BioLabFluidCells = new ItemStack[BioLabFluidMaterials.length]; - - GT_MetaGenerated_Item_98.FluidCell[] fluidCells = { GT_MetaGenerated_Item_98.FluidCell.FLUORESCENT_DNA, - GT_MetaGenerated_Item_98.FluidCell.ENZYME_SOLUTION, GT_MetaGenerated_Item_98.FluidCell.PENICILLIN, - GT_MetaGenerated_Item_98.FluidCell.POLYMERASE, }; - for (int i = 0; i < fluidCells.length; i++) { - BioLabFluidCells[i] = fluidCells[i].get(); - } - - FluidStack dnaFluid = Gendustry.isModLoaded() ? FluidRegistry.getFluidStack("liquiddna", 100) - : Materials.Biomass.getFluid(100L); - for (BioCulture B : BioCulture.BIO_CULTURE_ARRAY_LIST) { - if (B.isBreedable()) { - B.setFluid( - GT_FluidFactory.builder( - B.getName() - .replace(" ", "") - .toLowerCase() + "fluid") - .withTextureName("molten.autogenerated") - .withColorRGBA( - new short[] { (short) B.getColor() - .getRed(), - (short) B.getColor() - .getBlue(), - (short) B.getColor() - .getGreen() }) - .withLocalizedName(B.getLocalisedName() + " Fluid") - .withStateAndTemperature(FluidState.LIQUID, 300) - .buildAndRegister() - .asFluid()); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(10)) - .fluidInputs(new FluidStack(B.getFluid(), 1000)) - .fluidOutputs(dnaFluid) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(centrifugeRecipes); - } - } - - bioFluidBlock = new BioFluidBlock(); - GameRegistry.registerBlock(bioFluidBlock, "coloredFluidBlock"); - GameRegistry.registerTileEntity(BWTileEntityDimIDBridge.class, "bwTEDimIDBridge"); - if (SideReference.Side.Client) { - RendererSwitchingColorFluid.register(); - RendererGlasBlock.register(); - } - } - - public static Fluid createAndRegisterFluid(String Name, Color color) { - return GT_FluidFactory.builder(Name) - .withTextureName("molten.autogenerated") - .withColorRGBA( - new short[] { (short) color.getRed(), (short) color.getGreen(), (short) color.getBlue(), - (short) color.getAlpha() }) - .withStateAndTemperature(FluidState.LIQUID, 300) - .buildAndRegister() - .asFluid(); - } - - public static Fluid createAndRegisterFluid(String Name, Color color, int temperature) { - return GT_FluidFactory.builder(Name) - .withTextureName("molten.autogenerated") - .withColorRGBA( - new short[] { (short) color.getRed(), (short) color.getGreen(), (short) color.getBlue(), - (short) color.getAlpha() }) - .withStateAndTemperature(FluidState.LIQUID, temperature) - .buildAndRegister() - .asFluid(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ItemRegistry.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ItemRegistry.java deleted file mode 100644 index c7d3ed9070..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/ItemRegistry.java +++ /dev/null @@ -1,659 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.loaders; - -import static com.github.bartimaeusnek.bartworks.MainMod.BWT; -import static com.github.bartimaeusnek.bartworks.MainMod.GT2; -import static gregtech.api.enums.MetaTileEntityIDs.AcidGeneratorEV; -import static gregtech.api.enums.MetaTileEntityIDs.AcidGeneratorHV; -import static gregtech.api.enums.MetaTileEntityIDs.AcidGeneratorLV; -import static gregtech.api.enums.MetaTileEntityIDs.AcidGeneratorMV; -import static gregtech.api.enums.MetaTileEntityIDs.CircuitAssemblyLine; -import static gregtech.api.enums.MetaTileEntityIDs.CompressedFluidHatch; -import static gregtech.api.enums.MetaTileEntityIDs.DeepEarthHeatingPump; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_HV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_LV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_MV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_HV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_LV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_MV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_HV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_LV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_MV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_HV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_LV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_MV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_HV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_LV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_MV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.ElectricImplosionCompressor; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_EV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_HV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_IV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_LV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_MV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyDistributor_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.GiantOutputHatch; -import static gregtech.api.enums.MetaTileEntityIDs.HighTemperatureGasCooledReactor; -import static gregtech.api.enums.MetaTileEntityIDs.HumongousInputHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter128A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter128A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter128A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter128A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter32A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter32A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter32A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter32A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter64A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter64A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter64A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter64A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter96A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter96A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter96A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserConverter96A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserPipe; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch128A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch128A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch128A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch128A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch32A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch32A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch32A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch32A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch64A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch64A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch64A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch64A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch96A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch96A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch96A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserSourceHatch96A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch128A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch128A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch128A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch128A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch32A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch32A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch32A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch32A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch64A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch64A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch64A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch64A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch96A_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch96A_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch96A_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LowPowerLaserTargetHatch96A_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.MegaBlastFurnace; -import static gregtech.api.enums.MetaTileEntityIDs.MegaChemicalReactor; -import static gregtech.api.enums.MetaTileEntityIDs.MegaDistillationTower; -import static gregtech.api.enums.MetaTileEntityIDs.MegaOilCracker; -import static gregtech.api.enums.MetaTileEntityIDs.MegaVacuumFreezer; -import static gregtech.api.enums.MetaTileEntityIDs.ThoriumHighTemperatureReactor; -import static gregtech.api.enums.MetaTileEntityIDs.VoidMinerI; -import static gregtech.api.enums.MetaTileEntityIDs.VoidMinerII; -import static gregtech.api.enums.MetaTileEntityIDs.VoidMinerIII; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.common.blocks.BW_Blocks; -import com.github.bartimaeusnek.bartworks.common.blocks.BW_GlasBlocks; -import com.github.bartimaeusnek.bartworks.common.blocks.BW_GlasBlocks2; -import com.github.bartimaeusnek.bartworks.common.blocks.BW_TileEntityContainer; -import com.github.bartimaeusnek.bartworks.common.blocks.BW_TileEntityContainer_MachineBlock; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.common.items.BW_ItemBlocks; -import com.github.bartimaeusnek.bartworks.common.items.BW_SimpleWindMeter; -import com.github.bartimaeusnek.bartworks.common.items.BW_Stonage_Rotors; -import com.github.bartimaeusnek.bartworks.common.items.Circuit_Programmer; -import com.github.bartimaeusnek.bartworks.common.items.GT_Rockcutter_Item; -import com.github.bartimaeusnek.bartworks.common.items.GT_Teslastaff_Item; -import com.github.bartimaeusnek.bartworks.common.items.SimpleIconItem; -import com.github.bartimaeusnek.bartworks.common.items.SimpleSubItemClass; -import com.github.bartimaeusnek.bartworks.common.tileentities.classic.BW_RotorBlock; -import com.github.bartimaeusnek.bartworks.common.tileentities.classic.BW_TileEntity_HeatedWaterPump; -import com.github.bartimaeusnek.bartworks.common.tileentities.debug.CreativeScanner; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_CircuitAssemblyLine; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_DEHP; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_ElectricImplosionCompressor; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_HTGR; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_THTR; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega.GT_TileEntity_MegaBlastFurnace; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega.GT_TileEntity_MegaChemicalReactor; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega.GT_TileEntity_MegaDistillTower; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega.GT_TileEntity_MegaOilCracker; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega.GT_TileEntity_MegaVacuumFreezer; -import com.github.bartimaeusnek.bartworks.common.tileentities.tiered.GT_MetaTileEntity_AcidGenerator; -import com.github.bartimaeusnek.bartworks.common.tileentities.tiered.GT_MetaTileEntity_CompressedFluidHatch; -import com.github.bartimaeusnek.bartworks.common.tileentities.tiered.GT_MetaTileEntity_Diode; -import com.github.bartimaeusnek.bartworks.common.tileentities.tiered.GT_MetaTileEntity_EnergyDistributor; -import com.github.bartimaeusnek.bartworks.common.tileentities.tiered.GT_MetaTileEntity_GiantOutputHatch; -import com.github.bartimaeusnek.bartworks.common.tileentities.tiered.GT_MetaTileEntity_HumongousInputHatch; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.crossmod.galacticgreg.GT_TileEntity_VoidMiners; -import com.github.bartimaeusnek.crossmod.tectech.tileentites.tiered.TT_MetaTileEntity_LowPowerLaserBox; -import com.github.bartimaeusnek.crossmod.tectech.tileentites.tiered.TT_MetaTileEntity_LowPowerLaserDynamo; -import com.github.bartimaeusnek.crossmod.tectech.tileentites.tiered.TT_MetaTileEntity_LowPowerLaserHatch; -import com.github.bartimaeusnek.crossmod.tectech.tileentites.tiered.TT_MetaTileEntity_Pipe_Energy_LowPower; - -import cpw.mods.fml.common.registry.GameRegistry; -import fox.spiteful.avaritia.blocks.LudicrousBlocks; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MetaTileEntityIDs; -import gregtech.api.enums.Mods; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; -import ic2.api.item.IKineticRotor; - -public class ItemRegistry { - - public static final Item TESLASTAFF = new GT_Teslastaff_Item(); - public static final Item ROCKCUTTER_LV = new GT_Rockcutter_Item(1); - public static final Item ROCKCUTTER_MV = new GT_Rockcutter_Item(2); - public static final Item ROCKCUTTER_HV = new GT_Rockcutter_Item(3); - public static final Item CIRCUIT_PROGRAMMER = new Circuit_Programmer(); - public static final Block ROTORBLOCK = new BW_TileEntityContainer_MachineBlock( - Material.wood, - BW_RotorBlock.class, - "BWRotorBlock"); - public static final Item LEATHER_ROTOR = new BW_Stonage_Rotors( - 7, - 0.15f, - 5, - 1.15f, - 1, - 50, - 10000000, - IKineticRotor.GearboxType.WIND, - new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorLeather.png"), - "BW_LeatherRotor", - "rotors/itemRotorLeather"); - public static final Item WOOL_ROTOR = new BW_Stonage_Rotors( - 7, - 0.18f, - 3, - 1.35f, - 1, - 50, - 9000000, - IKineticRotor.GearboxType.WIND, - new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorWool.png"), - "BW_WoolRotor", - "rotors/itemRotorWool"); - public static final Item PAPER_ROTOR = new BW_Stonage_Rotors( - 7, - 0.2f, - 12, - 0.9f, - 1, - 50, - 800000, - IKineticRotor.GearboxType.WIND, - new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorPaper.png"), - "BW_PaperRotor", - "rotors/itemRotorPaper"); - public static final Item COMBINED_ROTOR = new BW_Stonage_Rotors( - 9, - 0.22f, - 7, - 1.05f, - 1, - 50, - 6000000, - IKineticRotor.GearboxType.WIND, - new ResourceLocation(MainMod.MOD_ID, "textures/items/rotors/rotorCombined.png"), - "BW_CombinedRotor", - "rotors/itemRotorCombined"); - public static final Item CRAFTING_PARTS = new SimpleSubItemClass( - "grindstone_top", - "grindstone_bottom", - "completed_grindstone", - "rotors/leatherParts", - "rotors/woolParts", - "rotors/paperParts", - "rotors/combinedParts"); - public static final Item TAB = new SimpleIconItem("GT2Coin"); - public static final Item WINDMETER = new BW_SimpleWindMeter(); - public static final Block PUMPBLOCK = new BW_TileEntityContainer( - Material.anvil, - BW_TileEntity_HeatedWaterPump.class, - "BWHeatedWaterPump"); - public static final Item PUMPPARTS = new SimpleSubItemClass("BWrawtube", "BWmotor"); - - public static final Block bw_realglas = new BW_GlasBlocks( - "BW_GlasBlocks", - new String[] { MainMod.MOD_ID + ":BoronSilicateGlassBlock", - MainMod.MOD_ID + ":TitaniumReinforcedBoronSilicateGlassBlock", - MainMod.MOD_ID + ":TungstenSteelReinforcedBoronSilicateGlassBlock", - MainMod.MOD_ID + ":LuVTierMaterialReinforcedBoronSilicateGlassBlock", - MainMod.MOD_ID + ":IridiumReinforcedBoronSilicateGlassBlock", - MainMod.MOD_ID + ":OsmiumReinforcedBoronSilicateGlassBlock", - MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock1", MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock2", - MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock3", MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock4", - MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock5", MainMod.MOD_ID + ":ColoredBoronSilicateGlassBlock6", - MainMod.MOD_ID + ":ThoriumYttriumGlass", MainMod.MOD_ID + ":NeutroniumReinforcedBoronSilicateGlassBlock", - MainMod.MOD_ID + ":CosmicNeutroniumReinforcedBoronSilicateGlassBlock", - MainMod.MOD_ID + ":InfinityReinforcedBoronSilicateGlassBlock", }, - new short[][] { Materials.BorosilicateGlass.getRGBA(), Materials.Titanium.getRGBA(), - Materials.TungstenSteel.getRGBA(), Materials.Chrome.getRGBA(), Materials.Iridium.getRGBA(), - Materials.Osmium.getRGBA(), new short[] { 0xff, 0, 0 }, new short[] { 0, 0xff, 0 }, - new short[] { 0x80, 0, 0xff }, new short[] { 0xff, 0xff, 0 }, new short[] { 0, 0xff, 0x80 }, - new short[] { 0x80, 0x33, 0 }, WerkstoffLoader.YttriumOxide.getRGBA(), Materials.Neutronium.getRGBA(), - Materials.CosmicNeutronium.getRGBA(), new short[] { 0xda, 0xeb, 0xff }, }, - MainMod.BIO_TAB, - true, - false); - public static final Block bw_realglas2 = new BW_GlasBlocks2( - "BW_GlasBlocks2", - new String[] { MainMod.MOD_ID + ":TranscendentallyReinforcedBoronSilicateGlassBlock" }, - new short[][] { new short[] { 50, 50, 50 } }, - MainMod.BIO_TAB, - true, - false); - - public static final Block[] bw_glasses = { bw_realglas, bw_realglas2 }; - public static final Block bw_fake_glasses = new BW_GlasBlocks( - "BW_GlasBlocks", - new String[] { MainMod.MOD_ID + ":BoronSilicateGlassBlockRandlos" }, - null, - null, - true, - true); - public static final Block bw_fake_glasses2 = new BW_GlasBlocks2( - "BW_GlasBlocks2", - new String[] { MainMod.MOD_ID + ":BoronSilicateGlassBlockRandlos" }, - null, - null, - true, - true); - public static final Block[] BW_BLOCKS = { - new BW_Blocks( - "BW_ItemBlocks", - new String[] { MainMod.MOD_ID + ":EtchedLapisCell", MainMod.MOD_ID + ":PlatedLapisCell", }, - GT2), - new BW_Blocks("GT_LESU_CASING", new String[] { MainMod.MOD_ID + ":LESU_CELL", }, GT2), - new BW_Blocks( - "BW_Machinery_Casings", - new String[] { MainMod.MOD_ID + ":NickelFerriteBlocks", MainMod.MOD_ID + ":TransformerCoil", - // MainMod.MOD_ID+":DEHP_Casing", - // MainMod.MOD_ID+":DEHP_Casing_Base" - }, - BWT), }; - - public static ItemStack[] diode2A = new ItemStack[GT_Values.VN.length]; - public static ItemStack[] diode4A = new ItemStack[GT_Values.VN.length]; - public static ItemStack[] diode8A = new ItemStack[GT_Values.VN.length]; - public static ItemStack[] diode12A = new ItemStack[GT_Values.VN.length]; - public static ItemStack[] diode16A = new ItemStack[GT_Values.VN.length]; - public static ItemStack[] energyDistributor = new ItemStack[GT_Values.VN.length]; - public static ItemStack[] acidGens = new ItemStack[3]; - public static ItemStack acidGensLV; - public static ItemStack[] megaMachines = new ItemStack[5]; - public static ItemStack dehp; - public static ItemStack[] voidminer = new ItemStack[3]; - public static ItemStack THTR; - public static ItemStack HTGR; - public static ItemStack eic; - public static ItemStack cal; - public static ItemStack compressedHatch; - public static ItemStack giantOutputHatch; - public static ItemStack humongousInputHatch; - - public static ItemStack[][][] TecTechLaserAdditions = new ItemStack[3][4][4]; - public static ItemStack TecTechPipeEnergyLowPower; - - public static void run() { - GameRegistry.registerBlock(ItemRegistry.bw_fake_glasses, "BW_FakeGlasBlock"); - GameRegistry.registerBlock(ItemRegistry.bw_fake_glasses2, "BW_FakeGlasBlocks2"); - BorosilicateGlass.registerBorosilicateGlass(); - - GameRegistry.registerBlock(ItemRegistry.BW_BLOCKS[2], BW_ItemBlocks.class, "BW_Machinery_Casings"); - GameRegistry.registerItem(ItemRegistry.LEATHER_ROTOR, "BW_LeatherRotor"); - GameRegistry.registerItem(ItemRegistry.WOOL_ROTOR, "BW_WoolRotor"); - GameRegistry.registerItem(ItemRegistry.PAPER_ROTOR, "BW_PaperRotor"); - GameRegistry.registerItem(ItemRegistry.COMBINED_ROTOR, "BW_CombinedRotor"); - GameRegistry.registerItem(ItemRegistry.CRAFTING_PARTS, "craftingParts"); - GameRegistry.registerTileEntity(BW_RotorBlock.class, "BWRotorBlockTE"); - GameRegistry.registerBlock(ItemRegistry.ROTORBLOCK, BW_ItemBlocks.class, "BWRotorBlock"); - GameRegistry.registerTileEntity(BW_TileEntity_HeatedWaterPump.class, "BWHeatedWaterPumpTE"); - GameRegistry.registerBlock(ItemRegistry.PUMPBLOCK, BW_ItemBlocks.class, "BWHeatedWaterPumpBlock"); - GameRegistry.registerItem(ItemRegistry.PUMPPARTS, "BWPumpParts"); - GameRegistry.registerItem(ItemRegistry.WINDMETER, "BW_SimpleWindMeter"); - - // GT2 stuff - GameRegistry.registerBlock(ItemRegistry.BW_BLOCKS[0], BW_ItemBlocks.class, "BW_ItemBlocks"); - GameRegistry.registerBlock(ItemRegistry.BW_BLOCKS[1], BW_ItemBlocks.class, "GT_LESU_CASING"); - if (ConfigHandler.teslastaff) - GameRegistry.registerItem(ItemRegistry.TESLASTAFF, ItemRegistry.TESLASTAFF.getUnlocalizedName()); - - GameRegistry.registerItem(ItemRegistry.ROCKCUTTER_LV, ItemRegistry.ROCKCUTTER_LV.getUnlocalizedName()); - GameRegistry.registerItem(ItemRegistry.ROCKCUTTER_MV, ItemRegistry.ROCKCUTTER_MV.getUnlocalizedName()); - GameRegistry.registerItem(ItemRegistry.ROCKCUTTER_HV, ItemRegistry.ROCKCUTTER_HV.getUnlocalizedName()); - GameRegistry.registerItem(ItemRegistry.TAB, "tabIconGT2"); - - new CreativeScanner( - MetaTileEntityIDs.CreativeScanner.ID, - "Creative Debug Scanner", - "Creative Debug Scanner", - 14); - ItemRegistry.eic = new GT_TileEntity_ElectricImplosionCompressor( - ElectricImplosionCompressor.ID, - "ElectricImplosionCompressor", - "Electric Implosion Compressor").getStackForm(1L); - - // EIC depend on neutronium block to pass on structure updates - int bitmask = GregTech_API.sMachineIDs.getOrDefault(GregTech_API.sBlockMetal5, 0) | 1 << 2; - GregTech_API.registerMachineBlock(GregTech_API.sBlockMetal5, bitmask); - - // Also spacetime, transcendent metal, and universium - bitmask = GregTech_API.sMachineIDs.getOrDefault(GregTech_API.sBlockMetal9, 0) | 1 << 3 | 1 << 4 | 1 << 8; - GregTech_API.registerMachineBlock(GregTech_API.sBlockMetal9, bitmask); - - if (Mods.Avaritia.isModLoaded()) { - // Also infinity - bitmask = GregTech_API.sMachineIDs.getOrDefault(LudicrousBlocks.resource_block, 0) | 1 << 1; - GregTech_API.registerMachineBlock(LudicrousBlocks.resource_block, bitmask); - } - - ItemRegistry.THTR = new GT_TileEntity_THTR( - ThoriumHighTemperatureReactor.ID, - "THTR", - "Thorium High Temperature Reactor").getStackForm(1L); - GT_TileEntity_THTR.THTRMaterials.registeraTHR_Materials(); - ItemRegistry.HTGR = new GT_TileEntity_HTGR( - HighTemperatureGasCooledReactor.ID, - "HTGR", - "High Temperature Gas-cooled Reactor").getStackForm(1L); - GT_TileEntity_HTGR.HTGRMaterials.registeraTHR_Materials(); - - // ID 12728 + 15 + 49 IS TAKEN !!! (12792) - - GT_OreDictUnificator - .add(OrePrefixes.block, Materials.BorosilicateGlass, new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)); - GT_OreDictUnificator - .registerOre(OrePrefixes.block, Materials.NickelZincFerrite, new ItemStack(ItemRegistry.BW_BLOCKS[2])); - - int[] Diode2A = new int[] { Diode2A_ULV.ID, Diode2A_LV.ID, Diode2A_MV.ID, Diode2A_HV.ID, Diode2A_EV.ID, - Diode2A_IV.ID, Diode2A_LuV.ID, Diode2A_ZPM.ID, Diode2A_UV.ID, Diode2A_UHV.ID, Diode2A_UEV.ID, - Diode2A_UIV.ID, Diode2A_UMV.ID, Diode2A_UXV.ID, Diode2A_MAX.ID }; - int[] Diode4A = new int[] { Diode4A_ULV.ID, Diode4A_LV.ID, Diode4A_MV.ID, Diode4A_HV.ID, Diode4A_EV.ID, - Diode4A_IV.ID, Diode4A_LuV.ID, Diode4A_ZPM.ID, Diode4A_UV.ID, Diode4A_UHV.ID, Diode4A_UEV.ID, - Diode4A_UIV.ID, Diode4A_UMV.ID, Diode4A_UXV.ID, Diode4A_MAX.ID }; - int[] Diode8A = new int[] { Diode8A_ULV.ID, Diode8A_LV.ID, Diode8A_MV.ID, Diode8A_HV.ID, Diode8A_EV.ID, - Diode8A_IV.ID, Diode8A_LuV.ID, Diode8A_ZPM.ID, Diode8A_UV.ID, Diode8A_UHV.ID, Diode8A_UEV.ID, - Diode8A_UIV.ID, Diode8A_UMV.ID, Diode8A_UXV.ID, Diode8A_MAX.ID }; - int[] Diode12A = new int[] { Diode12A_ULV.ID, Diode12A_LV.ID, Diode12A_MV.ID, Diode12A_HV.ID, Diode12A_EV.ID, - Diode12A_IV.ID, Diode12A_LuV.ID, Diode12A_ZPM.ID, Diode12A_UV.ID, Diode12A_UHV.ID, Diode12A_UEV.ID, - Diode12A_UIV.ID, Diode12A_UMV.ID, Diode12A_UXV.ID, Diode12A_MAX.ID }; - int[] Diode16A = new int[] { Diode16A_ULV.ID, Diode16A_LV.ID, Diode16A_MV.ID, Diode16A_HV.ID, Diode16A_EV.ID, - Diode16A_IV.ID, Diode16A_LuV.ID, Diode16A_ZPM.ID, Diode16A_UV.ID, Diode16A_UHV.ID, Diode16A_UEV.ID, - Diode16A_UIV.ID, Diode16A_UMV.ID, Diode16A_UXV.ID, Diode16A_MAX.ID }; - int[] EnergyDistributors = new int[] { EnergyDistributor_ULV.ID, EnergyDistributor_LV.ID, - EnergyDistributor_MV.ID, EnergyDistributor_HV.ID, EnergyDistributor_EV.ID, EnergyDistributor_IV.ID, - EnergyDistributor_LuV.ID, EnergyDistributor_ZPM.ID, EnergyDistributor_UV.ID, EnergyDistributor_UHV.ID, - EnergyDistributor_UEV.ID, EnergyDistributor_UIV.ID, EnergyDistributor_UMV.ID, EnergyDistributor_UXV.ID, - EnergyDistributor_MAX.ID }; - - for (int i = 0; i < GT_Values.VN.length - 1; i++) { - ItemRegistry.diode2A[i] = new GT_MetaTileEntity_Diode( - Diode2A[i], - "diode" + "2A" + GT_Values.VN[i], - StatCollector.translateToLocal("tile.diode.name") + " 2A " + GT_Values.VN[i], - i).getStackForm(1L); - ItemRegistry.diode4A[i] = new GT_MetaTileEntity_Diode( - Diode4A[i], - "diode" + "4A" + GT_Values.VN[i], - StatCollector.translateToLocal("tile.diode.name") + " 4A " + GT_Values.VN[i], - i).getStackForm(1L); - ItemRegistry.diode8A[i] = new GT_MetaTileEntity_Diode( - Diode8A[i], - "diode" + "8A" + GT_Values.VN[i], - StatCollector.translateToLocal("tile.diode.name") + " 8A " + GT_Values.VN[i], - i).getStackForm(1L); - ItemRegistry.diode12A[i] = new GT_MetaTileEntity_Diode( - Diode12A[i], - "diode" + "12A" + GT_Values.VN[i], - StatCollector.translateToLocal("tile.diode.name") + " 12A " + GT_Values.VN[i], - i).getStackForm(1L); - ItemRegistry.diode16A[i] = new GT_MetaTileEntity_Diode( - Diode16A[i], - "diode" + "16A" + GT_Values.VN[i], - StatCollector.translateToLocal("tile.diode.name") + " 16A " + GT_Values.VN[i], - i).getStackForm(1L); - ItemRegistry.energyDistributor[i] = new GT_MetaTileEntity_EnergyDistributor( - EnergyDistributors[i], - "energydistributor" + GT_Values.VN[i], - StatCollector.translateToLocal("tile.energydistributor.name") + " " + GT_Values.VN[i], - i).getStackForm(1L); - } - - ItemRegistry.acidGens[0] = new GT_MetaTileEntity_AcidGenerator( - AcidGeneratorMV.ID, - "acidgenerator" + GT_Values.VN[2], - StatCollector.translateToLocal("tile.acidgenerator.name") + " " + GT_Values.VN[2], - 2).getStackForm(1); - ItemRegistry.acidGens[1] = new GT_MetaTileEntity_AcidGenerator( - AcidGeneratorHV.ID, - "acidgenerator" + GT_Values.VN[3], - StatCollector.translateToLocal("tile.acidgenerator.name") + " " + GT_Values.VN[3], - 3).getStackForm(1); - ItemRegistry.acidGens[2] = new GT_MetaTileEntity_AcidGenerator( - AcidGeneratorEV.ID, - "acidgenerator" + GT_Values.VN[4], - StatCollector.translateToLocal("tile.acidgenerator.name") + " " + GT_Values.VN[4], - 4).getStackForm(1); - - ItemRegistry.acidGensLV = new GT_MetaTileEntity_AcidGenerator( - AcidGeneratorLV.ID, - "acidgenerator" + GT_Values.VN[1], - StatCollector.translateToLocal("tile.acidgenerator.name") + " " + GT_Values.VN[1], - +1).getStackForm(1L); - - ItemRegistry.dehp = new GT_TileEntity_DEHP(DeepEarthHeatingPump.ID, 1, "DEHP", "Deep Earth Heating Pump") - .getStackForm(1L); - ItemRegistry.megaMachines[0] = new GT_TileEntity_MegaBlastFurnace( - MegaBlastFurnace.ID, - "MegaBlastFurnace", - StatCollector.translateToLocal("tile.bw.mbf.name")).getStackForm(1L); - ItemRegistry.megaMachines[1] = new GT_TileEntity_MegaVacuumFreezer( - MegaVacuumFreezer.ID, - "MegaVacuumFreezer", - StatCollector.translateToLocal("tile.bw.mvf.name")).getStackForm(1L); - ItemRegistry.cal = new GT_TileEntity_CircuitAssemblyLine( - CircuitAssemblyLine.ID, - "CircuitAssemblyLine", - "Circuit Assembly Line").getStackForm(1L); - ItemRegistry.compressedHatch = new GT_MetaTileEntity_CompressedFluidHatch( - CompressedFluidHatch.ID, - "CompressedFluidHatch", - "Liquid Air Fluid Hatch").getStackForm(1L); - ItemRegistry.giantOutputHatch = new GT_MetaTileEntity_GiantOutputHatch( - GiantOutputHatch.ID, - "GiantOutputHatch", - "Giant Output Hatch").getStackForm(1L); - ItemRegistry.humongousInputHatch = new GT_MetaTileEntity_HumongousInputHatch( - HumongousInputHatch.ID, - "HumongousInputHatch", - "Humongous Input Hatch").getStackForm(1L); - ItemRegistry.megaMachines[2] = new GT_TileEntity_MegaDistillTower( - MegaDistillationTower.ID, - "MegaDistillationTower", - "Mega Distillation Tower").getStackForm(1L); - ItemRegistry.megaMachines[3] = new GT_TileEntity_MegaChemicalReactor( - MegaChemicalReactor.ID, - "MegaChemicalReactor", - "Mega Chemical Reactor").getStackForm(1L); - ItemRegistry.megaMachines[4] = new GT_TileEntity_MegaOilCracker( - MegaOilCracker.ID, - "MegaOilCracker", - "Mega Oil Cracker").getStackForm(1L); - - ItemRegistry.voidminer[2] = new GT_TileEntity_VoidMiners.VMUV(VoidMinerIII.ID, "VoidMiner3", "Void Miner III") - .getStackForm(1L); - ItemRegistry.voidminer[1] = new GT_TileEntity_VoidMiners.VMZPM(VoidMinerII.ID, "VoidMiner2", "Void Miner II") - .getStackForm(1L); - ItemRegistry.voidminer[0] = new GT_TileEntity_VoidMiners.VMLUV(VoidMinerI.ID, "VoidMiner1", "Void Miner I") - .getStackForm(1L); - - TecTechPipeEnergyLowPower = new TT_MetaTileEntity_Pipe_Energy_LowPower( - LowPowerLaserPipe.ID, - "pipe.lowpowerlaser", - "Low Power Laser Pipe").getStackForm(1L); - - int[] LowPowerLaserConverter32A = new int[] { LowPowerLaserConverter32A_EV.ID, LowPowerLaserConverter32A_IV.ID, - LowPowerLaserConverter32A_LuV.ID, LowPowerLaserConverter32A_ZPM.ID }; - int[] LowPowerLaserConverter64A = new int[] { LowPowerLaserConverter64A_EV.ID, LowPowerLaserConverter64A_IV.ID, - LowPowerLaserConverter64A_LuV.ID, LowPowerLaserConverter64A_ZPM.ID }; - int[] LowPowerLaserConverter96A = new int[] { LowPowerLaserConverter96A_EV.ID, LowPowerLaserConverter96A_IV.ID, - LowPowerLaserConverter96A_LuV.ID, LowPowerLaserConverter96A_ZPM.ID }; - int[] LowPowerLaserConverter128A = new int[] { LowPowerLaserConverter128A_EV.ID, - LowPowerLaserConverter128A_IV.ID, LowPowerLaserConverter128A_LuV.ID, LowPowerLaserConverter128A_ZPM.ID }; - int[][] LowPowerLaserConverter = new int[][] { LowPowerLaserConverter32A, LowPowerLaserConverter64A, - LowPowerLaserConverter96A, LowPowerLaserConverter128A }; - - for (int amps = 32; amps <= 128; amps += 32) { - for (int tier = 4; tier < 8; tier++) { - TecTechLaserAdditions[0][amps / 32 - 1][tier - 4] = new TT_MetaTileEntity_LowPowerLaserBox( - LowPowerLaserConverter[amps / 32 - 1][tier - 4], - GT_Values.VN[tier] + "_LPLaser_Converter_" + amps, - GT_Values.VN[tier] + " " + amps + "A" + " Low Power Laser Converter", - tier, - amps).getStackForm(1L); - } - } - - int[] LowPowerLaserTargetHatch32A = new int[] { LowPowerLaserTargetHatch32A_EV.ID, - LowPowerLaserTargetHatch32A_IV.ID, LowPowerLaserTargetHatch32A_LuV.ID, LowPowerLaserTargetHatch32A_ZPM.ID }; - int[] LowPowerLaserTargetHatch64A = new int[] { LowPowerLaserTargetHatch64A_EV.ID, - LowPowerLaserTargetHatch64A_IV.ID, LowPowerLaserTargetHatch64A_LuV.ID, LowPowerLaserTargetHatch64A_ZPM.ID }; - int[] LowPowerLaserTargetHatch96A = new int[] { LowPowerLaserTargetHatch96A_EV.ID, - LowPowerLaserTargetHatch96A_IV.ID, LowPowerLaserTargetHatch96A_LuV.ID, LowPowerLaserTargetHatch96A_ZPM.ID }; - int[] LowPowerLaserTargetHatch128A = new int[] { LowPowerLaserTargetHatch128A_EV.ID, - LowPowerLaserTargetHatch128A_IV.ID, LowPowerLaserTargetHatch128A_LuV.ID, - LowPowerLaserTargetHatch128A_ZPM.ID }; - int[][] LowPowerLaserTargetHatch = new int[][] { LowPowerLaserTargetHatch32A, LowPowerLaserTargetHatch64A, - LowPowerLaserTargetHatch96A, LowPowerLaserTargetHatch128A }; - for (int amps = 32; amps <= 128; amps += 32) { - for (int tier = 4; tier < 8; tier++) { - TecTechLaserAdditions[1][amps / 32 - 1][tier - 4] = new TT_MetaTileEntity_LowPowerLaserHatch( - LowPowerLaserTargetHatch[amps / 32 - 1][tier - 4], - GT_Values.VN[tier] + "_LPLaser_Hatch_" + amps, - GT_Values.VN[tier] + " " + amps + "A" + " Low Power Laser Target Hatch", - tier, - amps).getStackForm(1L); - } - } - - int[] LowPowerLaserSourceHatch32A = new int[] { LowPowerLaserSourceHatch32A_EV.ID, - LowPowerLaserSourceHatch32A_IV.ID, LowPowerLaserSourceHatch32A_LuV.ID, LowPowerLaserSourceHatch32A_ZPM.ID }; - int[] LowPowerLaserSourceHatch64A = new int[] { LowPowerLaserSourceHatch64A_EV.ID, - LowPowerLaserSourceHatch64A_IV.ID, LowPowerLaserSourceHatch64A_LuV.ID, LowPowerLaserSourceHatch64A_ZPM.ID }; - int[] LowPowerLaserSourceHatch96A = new int[] { LowPowerLaserSourceHatch96A_EV.ID, - LowPowerLaserSourceHatch96A_IV.ID, LowPowerLaserSourceHatch96A_LuV.ID, LowPowerLaserSourceHatch96A_ZPM.ID }; - int[] LowPowerLaserSourceHatch128A = new int[] { LowPowerLaserSourceHatch128A_EV.ID, - LowPowerLaserSourceHatch128A_IV.ID, LowPowerLaserSourceHatch128A_LuV.ID, - LowPowerLaserSourceHatch128A_ZPM.ID }; - int[][] LowPowerLaserSourceHatch = new int[][] { LowPowerLaserSourceHatch32A, LowPowerLaserSourceHatch64A, - LowPowerLaserSourceHatch96A, LowPowerLaserSourceHatch128A }; - for (int amps = 32; amps <= 128; amps += 32) { - for (int tier = 4; tier < 8; tier++) { - TecTechLaserAdditions[2][amps / 32 - 1][tier - 4] = new TT_MetaTileEntity_LowPowerLaserDynamo( - LowPowerLaserSourceHatch[amps / 32 - 1][tier - 4], - GT_Values.VN[tier] + "_LPLaser_Dynamo_" + amps, - GT_Values.VN[tier] + " " + amps + "A" + " Low Power Laser Source Hatch", - tier, - amps).getStackForm(1L); - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/LocalisationLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/LocalisationLoader.java deleted file mode 100644 index 020f89e703..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/LocalisationLoader.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.loaders; - -import gregtech.api.util.GT_LanguageManager; - -public class LocalisationLoader { - - private LocalisationLoader() {} - - private static void localiseTooltips() { - GT_LanguageManager - .addStringLocalization("metaitem.01.tooltip.purify.2", "Throw into Cauldron to get clean crushed Ore"); - GT_LanguageManager - .addStringLocalization("metaitem.01.tooltip.nqgen", "Can be used as Enriched Naquadah Fuel Substitute"); - } - - private static void localiseAchivements() { - GT_LanguageManager - .addStringLocalization("achievement.gt.blockmachines.electricimplosioncompressor", "Electric Implosions?"); - GT_LanguageManager.addStringLocalization( - "achievement.gt.blockmachines.electricimplosioncompressor.desc", - "Basically a giant Hammer that presses Stuff - No more TNT!"); - GT_LanguageManager.addStringLocalization("achievement.gt.blockmachines.dehp", "Heat from below!"); - GT_LanguageManager - .addStringLocalization("achievement.gt.blockmachines.dehp.desc", "Get ALL the thermal energy!"); - GT_LanguageManager - .addStringLocalization("achievement.gt.blockmachines.circuitassemblyline", "Cheaper Circuits?"); - GT_LanguageManager.addStringLocalization( - "achievement.gt.blockmachines.circuitassemblyline.desc", - "Well, yes, but actually no..."); - GT_LanguageManager.addStringLocalization("achievement.gt.blockmachines.voidminer1", "Ores from deep below!"); - GT_LanguageManager - .addStringLocalization("achievement.gt.blockmachines.voidminer1.desc", "Is this some kind of Ex-Nihilo?"); - GT_LanguageManager.addStringLocalization( - "achievement.gt.blockmachines.voidminer2", - "Ores from deep below 2! Electric Boogaloo!"); - GT_LanguageManager - .addStringLocalization("achievement.gt.blockmachines.voidminer2.desc", "Ex-Nihilo, but faster!"); - GT_LanguageManager.addStringLocalization( - "achievement.gt.blockmachines.voidminer3", - "Ores from deep below 3! Trinity Ex-Nihilo"); - GT_LanguageManager - .addStringLocalization("achievement.gt.blockmachines.voidminer3.desc", "3x the trouble, 3x the fun!"); - } - - public static void localiseAll() { - localiseAchivements(); - localiseTooltips(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RadioHatchMaterialLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RadioHatchMaterialLoader.java deleted file mode 100644 index 3a5cd2c9cc..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RadioHatchMaterialLoader.java +++ /dev/null @@ -1,366 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders; - -import static com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps.radioHatchRecipes; -import static com.github.bartimaeusnek.bartworks.util.BWRecipes.calcDecayTicks; -import static gregtech.api.enums.Mods.IndustrialCraft2; -import static gregtech.api.util.GT_RecipeConstants.DECAY_TICKS; - -import com.github.bartimaeusnek.bartworks.system.material.BW_NonMeta_MaterialItems; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; - -// cursed way of using a recipe map... -public class RadioHatchMaterialLoader { - - public static void run() { - - for (Werkstoff material : Werkstoff.werkstoffHashSet) { - if (material == null || !material.getStats() - .isRadioactive()) { - continue; - } - - int level = (int) material.getStats() - .getProtons(); - if (material.hasItemType(OrePrefixes.stick)) GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.stick)) - .duration(1) - .eut(level) - .metadata(DECAY_TICKS, (int) calcDecayTicks(level)) - .noOptimize() - .addTo(radioHatchRecipes); - if (material.hasItemType(OrePrefixes.stickLong)) GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.stickLong)) - .duration(2) - .eut(level) - .metadata(DECAY_TICKS, (int) calcDecayTicks(level)) - .noOptimize() - .addTo(radioHatchRecipes); - } - - for (Materials material : Materials.getAll()) { - if (material == null || material.mElement == null) continue; - boolean validProton = material.getProtons() >= 83 && !material.equals(Materials.Tritanium) // No Tritanium - && !material.equals(Materials.Naquadah); // Naquadah needs spacial value - if (validProton) { - int level = (int) material.getProtons(); - if (GT_OreDictUnificator.get(OrePrefixes.stick, material, 1) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.stick, material, 1)) - .duration(1) - .eut(level) - .metadata(DECAY_TICKS, (int) calcDecayTicks(level)) - .noOptimize() - .addTo(radioHatchRecipes); - } - if (GT_OreDictUnificator.get(OrePrefixes.stickLong, material, 1) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.stickLong, material, 1)) - .duration(2) - .eut(level) - .metadata(DECAY_TICKS, (int) calcDecayTicks(level)) - .noOptimize() - .addTo(radioHatchRecipes); - } - } - } - - Materials[] spacialMaterial = { Materials.Naquadah, Materials.NaquadahEnriched, Materials.Naquadria }; - int[] spacialValue = { 130, 140, 150 }; - - for (int i = 0; i < spacialMaterial.length; i++) { - if (GT_OreDictUnificator.get(OrePrefixes.stick, spacialMaterial[i], 1) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.stick, spacialMaterial[i], 1)) - .duration(1) - .eut(spacialValue[i]) - .metadata(DECAY_TICKS, (int) calcDecayTicks(spacialValue[i])) - .noOptimize() - .addTo(radioHatchRecipes); - } - - if (GT_OreDictUnificator.get(OrePrefixes.stickLong, spacialMaterial[i], 1) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.stickLong, spacialMaterial[i], 1)) - .duration(2) - .eut(spacialValue[i]) - .metadata(DECAY_TICKS, (int) calcDecayTicks(spacialValue[i])) - .noOptimize() - .addTo(radioHatchRecipes); - } - } - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.ThoriumCell_1.get(1)) - .duration(3) - .eut((int) Materials.Thorium.getProtons()) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.ThoriumCell_2.get(1)) - .duration(6) - .eut((int) Materials.Thorium.getProtons()) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.ThoriumCell_4.get(1)) - .duration(12) - .eut((int) Materials.Thorium.getProtons()) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.NaquadahCell_1.get(1)) - .duration(3) - .eut(140) - .metadata(DECAY_TICKS, (int) calcDecayTicks(140)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.NaquadahCell_2.get(1)) - .duration(6) - .eut(140) - .metadata(DECAY_TICKS, (int) calcDecayTicks(140)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.NaquadahCell_4.get(1)) - .duration(12) - .eut(140) - .metadata(DECAY_TICKS, (int) calcDecayTicks(140)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Moxcell_1.get(1)) - .duration(3) - .eut((int) Materials.Plutonium.getProtons()) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Moxcell_2.get(1)) - .duration(6) - .eut((int) Materials.Plutonium.getProtons()) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Moxcell_4.get(1)) - .duration(12) - .eut((int) Materials.Plutonium.getProtons()) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Uraniumcell_1.get(1)) - .duration(3) - .eut((int) Materials.Uranium.getProtons()) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Uraniumcell_2.get(1)) - .duration(6) - .eut((int) Materials.Uranium.getProtons()) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Uraniumcell_4.get(1)) - .duration(12) - .eut((int) Materials.Uranium.getProtons()) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.TiberiumCell_1.get(1)) - .duration(3) - .eut( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons()) - .metadata( - DECAY_TICKS, - (int) calcDecayTicks( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.TiberiumCell_2.get(1)) - .duration(6) - .eut( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons()) - .metadata( - DECAY_TICKS, - (int) calcDecayTicks( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.TiberiumCell_4.get(1)) - .duration(12) - .eut( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons()) - .metadata( - DECAY_TICKS, - (int) calcDecayTicks( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons())) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.TheCoreCell.get(1)) - .duration(96) - .eut(140) - .metadata(DECAY_TICKS, (int) calcDecayTicks(140)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Thorium_1.get(1)) - .duration(3) - .eut((int) Materials.Thorium.getProtons() / 10) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Thorium_2.get(1)) - .duration(6) - .eut((int) Materials.Thorium.getProtons() / 10) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Thorium_4.get(1)) - .duration(12) - .eut((int) Materials.Thorium.getProtons() / 10) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Thorium.getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Naquadah_1.get(1)) - .duration(3) - .eut(14) - .metadata(DECAY_TICKS, (int) calcDecayTicks(14)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Naquadah_2.get(1)) - .duration(6) - .eut(14) - .metadata(DECAY_TICKS, (int) calcDecayTicks(14)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Naquadah_4.get(1)) - .duration(12) - .eut(14) - .metadata(DECAY_TICKS, (int) calcDecayTicks(14)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXSimpledepleted", 1)) - .duration(3) - .eut((int) Materials.Plutonium.getProtons() / 10) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXDualdepleted", 1)) - .duration(6) - .eut((int) Materials.Plutonium.getProtons() / 10) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorMOXQuaddepleted", 1)) - .duration(12) - .eut((int) Materials.Plutonium.getProtons() / 10) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Plutonium.getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumSimpledepleted", 1)) - .duration(3) - .eut((int) Materials.Uranium.getProtons() / 10) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumDualdepleted", 1)) - .duration(6) - .eut((int) Materials.Uranium.getProtons() / 10) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(IndustrialCraft2.ID, "reactorUraniumQuaddepleted", 1)) - .duration(12) - .eut((int) Materials.Uranium.getProtons() / 10) - .metadata(DECAY_TICKS, (int) calcDecayTicks((int) Materials.Uranium.getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.Depleted_Tiberium_1.get(1)) - .duration(3) - .eut( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons() / 10) - .metadata( - DECAY_TICKS, - (int) calcDecayTicks( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.Depleted_Tiberium_2.get(1)) - .duration(6) - .eut( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons() / 10) - .metadata( - DECAY_TICKS, - (int) calcDecayTicks( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.Depleted_Tiberium_4.get(1)) - .duration(12) - .eut( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons() / 10) - .metadata( - DECAY_TICKS, - (int) calcDecayTicks( - (int) WerkstoffLoader.Tiberium.getBridgeMaterial() - .getProtons() / 10)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.Depleted_TheCoreCell.get(1)) - .duration(96) - .eut(13) - .metadata(DECAY_TICKS, (int) calcDecayTicks(13)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.MNqCell_1.get(1)) - .duration(3) - .eut(150) - .metadata(DECAY_TICKS, (int) calcDecayTicks(150)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.MNqCell_2.get(1)) - .duration(6) - .eut(150) - .metadata(DECAY_TICKS, (int) calcDecayTicks(150)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.MNqCell_4.get(1)) - .duration(12) - .eut(150) - .metadata(DECAY_TICKS, (int) calcDecayTicks(150)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_MNq_1.get(1)) - .duration(3) - .eut(15) - .metadata(DECAY_TICKS, (int) calcDecayTicks(15)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_MNq_2.get(1)) - .duration(6) - .eut(15) - .metadata(DECAY_TICKS, (int) calcDecayTicks(15)) - .addTo(radioHatchRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_MNq_4.get(1)) - .duration(12) - .eut(15) - .metadata(DECAY_TICKS, (int) calcDecayTicks(15)) - .addTo(radioHatchRecipes); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RecipeLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RecipeLoader.java deleted file mode 100644 index c55561687b..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RecipeLoader.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.loaders; - -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.Assembler; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.AssemblyLine; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.Autoclave; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.Centrifuge; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.ChemicalBath; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.ChemicalReactor; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.CraftingRecipes; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.Electrolyzer; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.Extractor; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.FakeRecipes; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.FluidHeater; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.FluidSolidifier; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.FormingPress; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.LaserEngraver; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.Mixer; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.Pulverizer; -import com.github.bartimaeusnek.bartworks.common.loaders.recipes.PyrolyseOven; - -import gregtech.api.util.GT_ModHandler; - -public class RecipeLoader { - - public static final long BITSD = GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE; - - public static void run() { - new Assembler().run(); - new AssemblyLine().run(); - new Autoclave().run(); - new Centrifuge().run(); - new ChemicalBath().run(); - new ChemicalReactor().run(); - new CraftingRecipes().run(); - new Electrolyzer().run(); - new Extractor().run(); - new FakeRecipes().run(); - new FluidHeater().run(); - new FluidSolidifier().run(); - new FormingPress().run(); - new LaserEngraver().run(); - new Mixer().run(); - new Pulverizer().run(); - new PyrolyseOven().run(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RegisterGlassTiers.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RegisterGlassTiers.java deleted file mode 100644 index aa2e0bbc2b..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RegisterGlassTiers.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.loaders; - -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Mods.BloodArsenal; -import static gregtech.api.enums.Mods.Botania; -import static gregtech.api.enums.Mods.EnderIO; -import static gregtech.api.enums.Mods.IndustrialCraft2; -import static gregtech.api.enums.Mods.Railcraft; -import static gregtech.api.enums.Mods.Thaumcraft; - -import java.util.Map; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.github.bartimaeusnek.bartworks.API.GlassTier; -import com.github.technus.tectech.thing.block.QuantumGlassBlock; - -// Register all your glasses here. -public class RegisterGlassTiers { - - public static void run() { - registerGlassAsTiered(); - registerGlassOreDicts(); - } - - private static void registerGlassAsTiered() { - - // --------------------------------------------------------------------- - // Register glass. - // --------------------------------------------------------------------- - - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 0, 3); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 1, 4); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 2, 5); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 3, 6); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 4, 7); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 5, 8); - - // Stained boro glass - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 6, 3); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 7, 3); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 8, 3); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 9, 3); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 10, 3); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 11, 3); - - // Incrementing tiers - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 12, 5); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 13, 9); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 14, 10); - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock(), 15, 11); - - // Glass block 2 for transcendent (Really?) - GlassTier.addCustomGlass(BorosilicateGlass.getGlassBlock2(), 0, 12); - - // Other mods. - GlassTier.addCustomGlass(IndustrialCraft2.ID, "blockAlloyGlass", 0, 4); - GlassTier.addCustomGlass(QuantumGlassBlock.INSTANCE, 0, 8); - - if (EnderIO.isModLoaded()) { - for (int i = 0; i < 6; ++i) { - GlassTier.addCustomGlass(EnderIO.ID, "blockFusedQuartz", i, 3); - } - } - - if (Railcraft.isModLoaded()) { - for (int i = 0; i < 16; i++) { - GlassTier.addCustomGlass(Railcraft.ID, "glass", i, 3); - } - } - - // Magic alternatives. - if (BloodArsenal.isModLoaded()) { - GlassTier.addCustomGlass(BloodArsenal.ID, "blood_stained_glass", 0, 4); - } - - if (Botania.isModLoaded()) { - GlassTier.addCustomGlass(Botania.ID, "manaGlass", 0, 4); - GlassTier.addCustomGlass(Botania.ID, "elfGlass", 0, 5); - } - - if (Thaumcraft.isModLoaded()) { - // Warded glass - GlassTier.addCustomGlass(Thaumcraft.ID, "blockCosmeticOpaque", 2, 3); - } - } - - private static void registerGlassOreDicts() { - - // Register glass ore dict entries. - for (Map.Entry pair : GlassTier.getGlassMap() - .entrySet()) { - String oreName = "blockGlass" + VN[pair.getValue()]; - ItemStack itemStack = new ItemStack( - pair.getKey() - .getBlock(), - 1, - pair.getKey() - .getMeta()); - OreDictionary.registerOre(oreName, itemStack); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RegisterServerCommands.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RegisterServerCommands.java deleted file mode 100644 index 615eed0c43..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/RegisterServerCommands.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.loaders; - -import com.github.bartimaeusnek.bartworks.common.commands.ChangeConfig; -import com.github.bartimaeusnek.bartworks.common.commands.ClearCraftingCache; -import com.github.bartimaeusnek.bartworks.common.commands.GetWorkingDirectory; -import com.github.bartimaeusnek.bartworks.common.commands.PrintRecipeListToFile; -import com.github.bartimaeusnek.bartworks.common.commands.RunGC; -import com.github.bartimaeusnek.bartworks.common.commands.SummonRuin; - -import cpw.mods.fml.common.event.FMLServerStartingEvent; - -public class RegisterServerCommands { - - public static void registerAll(FMLServerStartingEvent event) { - event.registerServerCommand(new SummonRuin()); - event.registerServerCommand(new ChangeConfig()); - event.registerServerCommand(new PrintRecipeListToFile()); - event.registerServerCommand(new ClearCraftingCache()); - event.registerServerCommand(new GetWorkingDirectory()); - event.registerServerCommand(new RunGC()); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/StaticRecipeChangeLoaders.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/StaticRecipeChangeLoaders.java deleted file mode 100644 index 9d9de87173..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/StaticRecipeChangeLoaders.java +++ /dev/null @@ -1,564 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.loaders; - -import static com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps.electricImplosionCompressorRecipes; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.ANAEROBE_GAS; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.NOBLE_GAS; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.fluids; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.molten; -import static gregtech.api.enums.Mods.TinkerConstruct; -import static gregtech.api.enums.TickTime.TICK; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import org.apache.commons.lang3.StringUtils; - -import com.github.bartimaeusnek.bartworks.API.recipe.DynamicGTRecipe; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.github.bartimaeusnek.bartworks.util.log.DebugLog; -import com.github.bartimaeusnek.crossmod.BartWorksCrossmod; -import com.google.common.collect.ArrayListMultimap; - -import cpw.mods.fml.common.registry.GameRegistry; -import gnu.trove.map.hash.TObjectDoubleHashMap; -import gregtech.api.enums.Element; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TierEU; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class StaticRecipeChangeLoaders { - - private static TObjectDoubleHashMap gtEbfGasRecipeTimeMultipliers = null; - private static TObjectDoubleHashMap gtEbfGasRecipeConsumptionMultipliers = null; - - public static final List whitelistForEBFNoGasRecipeDontCheckItemData = Arrays - .asList(GT_ModHandler.getModItem(TinkerConstruct.ID, "materials", 1L, 12) // Raw Aluminum -> Aluminium Ingot - // (coremod) - ); - - private StaticRecipeChangeLoaders() {} - - public static void addEBFGasRecipes() { - if (gtEbfGasRecipeTimeMultipliers == null) { - // For Werkstoff gases, use Werkstoff.Stats.setEbfGasRecipeTimeMultiplier - gtEbfGasRecipeTimeMultipliers = new TObjectDoubleHashMap<>(10, 0.5F, -1.0D); // keep default value as -1 - // Example to make Argon cut recipe times into a third of the original: - // gtEbfGasRecipeTimeMultipliers.put(Materials.Argon, 1.0D / 3.0D); - - gtEbfGasRecipeTimeMultipliers.put(Materials.Nitrogen, 1.0D); - gtEbfGasRecipeTimeMultipliers.put(Materials.Helium, 0.9D); - gtEbfGasRecipeTimeMultipliers.put(Materials.Argon, 0.8D); - gtEbfGasRecipeTimeMultipliers.put(Materials.Radon, 0.7D); - } - if (gtEbfGasRecipeConsumptionMultipliers == null) { - // For Werkstoff gases, use Werkstoff.Stats.setEbfGasRecipeConsumedAmountMultiplier - gtEbfGasRecipeConsumptionMultipliers = new TObjectDoubleHashMap<>(10, 0.5F, 1.0D); // keep default value as - // 1 - // Example to make Argon recipes use half the gas amount of the primary recipe (1000L->500L, 2000L->1000L - // etc.): - // gtEbfGasRecipeConsumptionMultipliers.put(Materials.Argon, 1.0D / 2.0D); - gtEbfGasRecipeConsumptionMultipliers.put(Materials.Nitrogen, 1.0D); - gtEbfGasRecipeConsumptionMultipliers.put(Materials.Helium, 1.0D); - gtEbfGasRecipeConsumptionMultipliers.put(Materials.Argon, 0.85D); - gtEbfGasRecipeConsumptionMultipliers.put(Materials.Radon, 0.7D); - } - ArrayListMultimap toChange = getRecipesToChange(NOBLE_GAS, ANAEROBE_GAS); - editRecipes(toChange, getNoGasItems(toChange)); - } - - public static void unificationRecipeEnforcer() { - List toRemove = new ArrayList<>(); - for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { - StaticRecipeChangeLoaders.runMaterialLinker(werkstoff); - if (werkstoff.getGenerationFeatures().enforceUnification) { - HashSet oreDictNames = new HashSet<>(werkstoff.getADDITIONAL_OREDICT()); - oreDictNames.add(werkstoff.getVarName()); - StaticRecipeChangeLoaders.runMoltenUnificationEnfocement(werkstoff); - StaticRecipeChangeLoaders.runUnficationDeleter(werkstoff); - for (String s : oreDictNames) for (OrePrefixes prefixes : OrePrefixes.values()) { - if (!werkstoff.hasItemType(prefixes)) continue; - String fullOreName = prefixes + s; - List ores = OreDictionary.getOres(fullOreName, false); - if (ores.size() <= 1) // empty or one entry, i.e. no unification needed - continue; - for (ItemStack toReplace : ores) { - ItemStack replacement = werkstoff.get(prefixes); - if (toReplace == null || GT_Utility.areStacksEqual(toReplace, replacement) - || replacement == null - || replacement.getItem() == null) continue; - for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { - toRemove.clear(); - nextRecipe: for (GT_Recipe recipe : map.getAllRecipes()) { - boolean removal = map.equals(RecipeMaps.fluidExtractionRecipes) - || map.equals(RecipeMaps.fluidSolidifierRecipes); - for (int i = 0; i < recipe.mInputs.length; i++) { - if (!GT_Utility.areStacksEqual(recipe.mInputs[i], toReplace)) continue; - if (removal) { - toRemove.add(recipe); - continue nextRecipe; - } - recipe.mInputs[i] = GT_Utility.copyAmount(recipe.mInputs[i].stackSize, replacement); - } - for (int i = 0; i < recipe.mOutputs.length; i++) { - if (!GT_Utility.areStacksEqual(recipe.mOutputs[i], toReplace)) continue; - if (removal) { - toRemove.add(recipe); - continue nextRecipe; - } - recipe.mOutputs[i] = GT_Utility - .copyAmount(recipe.mOutputs[i].stackSize, replacement); - } - if (recipe.mSpecialItems instanceof ItemStack specialItemStack) { - if (!GT_Utility.areStacksEqual(specialItemStack, toReplace)) continue; - if (removal) { - toRemove.add(recipe); - continue nextRecipe; - } - recipe.mSpecialItems = GT_Utility - .copyAmount(specialItemStack.stackSize, replacement); - } - } - map.getBackend() - .removeRecipes(toRemove); - } - } - } - } - } - } - - private static void runMoltenUnificationEnfocement(Werkstoff werkstoff) { - if (werkstoff.getGenerationFeatures().enforceUnification && werkstoff.hasItemType(OrePrefixes.cellMolten)) { - try { - FluidContainerRegistry.FluidContainerData data = new FluidContainerRegistry.FluidContainerData( - new FluidStack(Objects.requireNonNull(molten.get(werkstoff)), 144), - werkstoff.get(OrePrefixes.cellMolten), - Materials.Empty.getCells(1)); - Field f = GT_Utility.class.getDeclaredField("sFilledContainerToData"); - f.setAccessible(true); - @SuppressWarnings("unchecked") - Map sFilledContainerToData = (Map) f - .get(null); - Set> toremFilledContainerToData = new HashSet<>(); - ItemStack toReplace = null; - for (Map.Entry entry : sFilledContainerToData - .entrySet()) { - final String MODID = GameRegistry.findUniqueIdentifierFor(data.filledContainer.getItem()).modId; - if (MainMod.MOD_ID.equals(MODID) || BartWorksCrossmod.MOD_ID.equals(MODID)) continue; - if (entry.getValue().fluid.equals(data.fluid) - && !entry.getValue().filledContainer.equals(data.filledContainer)) { - toReplace = entry.getValue().filledContainer; - toremFilledContainerToData.add(entry); - } - } - sFilledContainerToData.entrySet() - .removeAll(toremFilledContainerToData); - Set toremRecipeList = new HashSet<>(); - if (toReplace != null) { - for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { - toremRecipeList.clear(); - for (GT_Recipe recipe : map.getAllRecipes()) { - for (ItemStack mInput : recipe.mInputs) { - if (GT_Utility.areStacksEqual(mInput, toReplace)) { - toremRecipeList.add(recipe); - // recipe.mInputs[i] = data.filledContainer; - } - } - for (ItemStack mOutput : recipe.mOutputs) { - if (GT_Utility.areStacksEqual(mOutput, toReplace)) { - toremRecipeList.add(recipe); - // recipe.mOutputs[i] = data.filledContainer; - if (map == RecipeMaps.fluidCannerRecipes - && GT_Utility.areStacksEqual(mOutput, data.filledContainer) - && !recipe.mFluidInputs[0].equals(data.fluid)) { - toremRecipeList.add(recipe); - // recipe.mOutputs[i] = data.filledContainer; - } - } - } - if (recipe.mSpecialItems instanceof ItemStack - && GT_Utility.areStacksEqual((ItemStack) recipe.mSpecialItems, toReplace)) { - toremRecipeList.add(recipe); - // recipe.mSpecialItems = data.filledContainer; - } - } - map.getBackend() - .removeRecipes(toremRecipeList); - } - } - GT_Utility.addFluidContainerData(data); - } catch (NoSuchFieldException | IllegalAccessException | ClassCastException e) { - e.printStackTrace(); - } - } - } - - private static void runUnficationDeleter(Werkstoff werkstoff) { - if (werkstoff.getType() == Werkstoff.Types.ELEMENT && werkstoff.getBridgeMaterial() != null - && Element.get(werkstoff.getToolTip()) != Element._NULL) { - werkstoff.getBridgeMaterial().mElement = Element.get(werkstoff.getToolTip()); - Element.get(werkstoff.getToolTip()).mLinkedMaterials = new ArrayList<>(); - Element.get(werkstoff.getToolTip()).mLinkedMaterials.add(werkstoff.getBridgeMaterial()); - } - - for (OrePrefixes prefixes : OrePrefixes.values()) if (werkstoff.hasItemType(prefixes)) { - GT_OreDictUnificator.set(prefixes, werkstoff.getBridgeMaterial(), werkstoff.get(prefixes), true, true); - for (ItemStack stack : OreDictionary.getOres(prefixes + werkstoff.getVarName())) { - GT_OreDictUnificator.addAssociation(prefixes, werkstoff.getBridgeMaterial(), stack, false); - GT_OreDictUnificator.getAssociation(stack).mUnificationTarget = werkstoff.get(prefixes); - } - } - } - - private static void runMaterialLinker(Werkstoff werkstoff) { - if (werkstoff.getType() == Werkstoff.Types.ELEMENT && werkstoff.getBridgeMaterial() != null - && Element.get(werkstoff.getToolTip()) != Element._NULL) { - werkstoff.getBridgeMaterial().mElement = Element.get(werkstoff.getToolTip()); - Element.get(werkstoff.getToolTip()).mLinkedMaterials = new ArrayList<>(); - Element.get(werkstoff.getToolTip()).mLinkedMaterials.add(werkstoff.getBridgeMaterial()); - } - - for (OrePrefixes prefixes : OrePrefixes.values()) - if (werkstoff.hasItemType(prefixes) && werkstoff.getBridgeMaterial() != null) { - GT_OreDictUnificator.set(prefixes, werkstoff.getBridgeMaterial(), werkstoff.get(prefixes), true, true); - for (ItemStack stack : OreDictionary.getOres(prefixes + werkstoff.getVarName())) { - GT_OreDictUnificator.addAssociation(prefixes, werkstoff.getBridgeMaterial(), stack, false); - } - } - } - - /** - * Constructs a list of recipes to change by scanning all EBF recipes for uses of noble gases. - * - * @param GasTags list of gas tags to look out for in EBF recipes - * @return A multimap from the gas tag (noble and/or anaerobic) to all the recipes containing a gas with that tag - */ - private static ArrayListMultimap getRecipesToChange(SubTag... GasTags) { - ArrayListMultimap toAdd = ArrayListMultimap.create(); - for (GT_Recipe recipe : RecipeMaps.blastFurnaceRecipes.getAllRecipes()) { - if (recipe.mFluidInputs != null && recipe.mFluidInputs.length > 0) { - Materials mat = getMaterialFromInputFluid(recipe); - if (mat != Materials._NULL) { - for (SubTag tag : GasTags) { - if (mat.contains(tag)) { - DebugLog.log( - "Found EBF Recipe to change, Output:" - + BW_Util.translateGTItemStack(recipe.mOutputs[0])); - toAdd.put(tag, recipe); - } - } - } - } - } - return toAdd; - } - - /** - * Scans EBF recipes for no-gas variants of the recipes present in base. Adds these recipes to the base multimap. - * - * @param base The recipe multimap to scan and modify - * @return Set of item outputs (recipe.mOutputs[0]) of the no-gas recipes - */ - private static HashSet getNoGasItems(ArrayListMultimap base) { - HashSet toAdd = new HashSet<>(); - ArrayListMultimap repToAdd = ArrayListMultimap.create(); - for (GT_Recipe recipe : RecipeMaps.blastFurnaceRecipes.getAllRecipes()) { - for (SubTag tag : base.keySet()) recipeLoop: for (GT_Recipe baseRe : base.get(tag)) { - if (recipe.mInputs.length == baseRe.mInputs.length && recipe.mOutputs.length == baseRe.mOutputs.length) - for (int i = 0; i < recipe.mInputs.length; i++) { - ItemStack tmpInput = recipe.mInputs[i]; - if ((recipe.mFluidInputs == null || recipe.mFluidInputs.length == 0) - && (whitelistForEBFNoGasRecipeDontCheckItemData.stream() - .anyMatch(s -> GT_Utility.areStacksEqual(s, tmpInput)) - || BW_Util.checkStackAndPrefix(recipe.mInputs[i]) - && BW_Util.checkStackAndPrefix(baseRe.mInputs[i]) - && GT_OreDictUnificator.getAssociation(recipe.mInputs[i]).mMaterial.mMaterial - .equals( - GT_OreDictUnificator.getAssociation(baseRe.mInputs[i]).mMaterial.mMaterial) - && GT_Utility.areStacksEqual(recipe.mOutputs[0], baseRe.mOutputs[0]))) { - toAdd.add(recipe.mOutputs[0]); - repToAdd.put(tag, recipe); - continue recipeLoop; - } - } - } - } - base.putAll(repToAdd); - return toAdd; - } - - private static int transformEBFGasRecipeTime(int originalDuration, long originalGasProtons, long newGasProtons) { - double protonTerm = originalGasProtons * (newGasProtons >= originalGasProtons ? 1.0D : 2.75D) - newGasProtons; - return Math.max(1, (int) (originalDuration / 200D * Math.max(200D + protonTerm, 1D))); - } - - private static int transformEBFGasRecipeTime(GT_Recipe recipe, Materials originalGas, Materials newGas) { - double newEbfMul = gtEbfGasRecipeTimeMultipliers.get(newGas); - double originalEbfMul = gtEbfGasRecipeTimeMultipliers.get(originalGas); - if (newEbfMul < 0.0D || originalEbfMul < 0.0D) { - return transformEBFGasRecipeTime(recipe.mDuration, originalGas.getProtons(), newGas.getProtons()); - } - return Math.max(1, (int) (recipe.mDuration * newEbfMul / originalEbfMul)); - } - - private static int transformEBFGasRecipeTime(GT_Recipe recipe, Materials originalGas, Werkstoff newGas) { - double newEbfMul = newGas.getStats() - .getEbfGasRecipeTimeMultiplier(); - double originalEbfMul = gtEbfGasRecipeTimeMultipliers.get(originalGas); - if (newEbfMul < 0.0D || originalEbfMul < 0.0D) { - return transformEBFGasRecipeTime( - recipe.mDuration, - originalGas.getProtons(), - newGas.getStats() - .getProtons()); - } - return Math.max(1, (int) (recipe.mDuration * newEbfMul / originalEbfMul)); - } - - private static int transformEBFNoGasRecipeTime(GT_Recipe recipe, Materials originalGas) { - return transformEBFGasRecipeTime(recipe.mDuration, originalGas.getProtons(), 0); - } - - private static void editEBFMaterialRecipes(SubTag GasTag, GT_Recipe recipe, Materials originalGas, - HashSet toAdd) { - for (Materials newGas : Materials.values()) { - if (newGas.contains(GasTag)) { - int time = transformEBFGasRecipeTime(recipe, originalGas, newGas); - int gasAmount = Math.max( - 1, - (int) Math.round(recipe.mFluidInputs[0].amount * gtEbfGasRecipeConsumptionMultipliers.get(newGas))); - if (recipe.mFluidInputs != null && recipe.mFluidInputs.length == 1 - && recipe.mFluidInputs[0].isFluidEqual(newGas.getGas(0))) { - // preserve original recipe owner - toAdd.add( - new DynamicGTRecipe( - false, - recipe.mInputs, - recipe.mOutputs, - recipe.mSpecialItems, - recipe.mChances, - new FluidStack[] { newGas.getGas(gasAmount) }, - recipe.mFluidOutputs, - time, - recipe.mEUt, - recipe.mSpecialValue, - recipe)); - } else { - // new recipe - toAdd.add( - new GT_Recipe( - false, - recipe.mInputs, - recipe.mOutputs, - recipe.mSpecialItems, - recipe.mChances, - new FluidStack[] { newGas.getGas(gasAmount) }, - recipe.mFluidOutputs, - time, - recipe.mEUt, - recipe.mSpecialValue)); - } - } - } - } - - private static void editEBFWerkstoffRecipes(SubTag GasTag, GT_Recipe recipe, Materials originalGas, - HashSet toAdd) { - for (Werkstoff newGas : Werkstoff.werkstoffHashMap.values()) { - if (newGas.contains(GasTag)) { - int time = transformEBFGasRecipeTime(recipe, originalGas, newGas); - int gasAmount = Math.max( - 1, - (int) Math.round( - recipe.mFluidInputs[0].amount * newGas.getStats() - .getEbfGasRecipeConsumedAmountMultiplier())); - if (recipe.mFluidInputs != null && recipe.mFluidInputs.length == 1 - && recipe.mFluidInputs[0] - .isFluidEqual(new FluidStack(Objects.requireNonNull(fluids.get(newGas)), 0))) { - // preserve original recipe owner - toAdd.add( - new DynamicGTRecipe( - false, - recipe.mInputs, - recipe.mOutputs, - recipe.mSpecialItems, - recipe.mChances, - new FluidStack[] { new FluidStack(Objects.requireNonNull(fluids.get(newGas)), gasAmount) }, - recipe.mFluidOutputs, - time, - recipe.mEUt, - recipe.mSpecialValue, - recipe)); - } else { - // new recipe - toAdd.add( - new GT_Recipe( - false, - recipe.mInputs, - recipe.mOutputs, - recipe.mSpecialItems, - recipe.mChances, - new FluidStack[] { new FluidStack(Objects.requireNonNull(fluids.get(newGas)), gasAmount) }, - recipe.mFluidOutputs, - time, - recipe.mEUt, - recipe.mSpecialValue)); - } - } - } - } - - private static void editEBFNoGasRecipes(GT_Recipe recipe, Materials originalGas, HashSet toAdd, - HashSet noGas) { - for (ItemStack is : noGas) { - byte circuitConfiguration = 1; - if (GT_Utility.areStacksEqual(is, recipe.mOutputs[0])) { - ArrayList inputs = new ArrayList<>(recipe.mInputs.length); - for (ItemStack stack : recipe.mInputs) - if (!GT_Utility.areStacksEqual(GT_Utility.getIntegratedCircuit(11), stack) - && !GT_Utility.areStacksEqual(GT_Utility.getIntegratedCircuit(14), stack) - && !GT_Utility.areStacksEqual(GT_Utility.getIntegratedCircuit(19), stack)) { - if (BW_Util.checkStackAndPrefix(stack)) circuitConfiguration = (byte) (OrePrefixes.dustSmall - .equals(GT_OreDictUnificator.getAssociation(stack).mPrefix) - ? 4 - : OrePrefixes.dustTiny.equals(GT_OreDictUnificator.getAssociation(stack).mPrefix) - ? 9 - : 1); - inputs.add(stack); - } - inputs.add(GT_Utility.getIntegratedCircuit(circuitConfiguration)); - toAdd.add( - new DynamicGTRecipe( - false, - inputs.toArray(new ItemStack[0]), - recipe.mOutputs, - recipe.mSpecialItems, - recipe.mChances, - null, - recipe.mFluidOutputs, - transformEBFNoGasRecipeTime(recipe, originalGas), - recipe.mEUt, - recipe.mSpecialValue, - recipe)); - break; - } - } - } - - private static void removeDuplicateGasRecipes(HashSet toAdd) { - HashSet duplicates = new HashSet<>(); - for (GT_Recipe recipe : toAdd) { - for (GT_Recipe recipe2 : toAdd) { - if (recipe.mEUt != recipe2.mEUt || recipe.mDuration != recipe2.mDuration - || recipe.mSpecialValue != recipe2.mSpecialValue - || recipe == recipe2 - || recipe.mInputs.length != recipe2.mInputs.length - || recipe.mFluidInputs.length != recipe2.mFluidInputs.length) continue; - boolean isSame = true; - for (int i = 0; i < recipe.mInputs.length; i++) { - if (!GT_Utility.areStacksEqual(recipe.mInputs[i], recipe2.mInputs[i])) isSame = false; - } - for (int i = 0; i < recipe.mFluidInputs.length; i++) { - if (!GT_Utility.areFluidsEqual(recipe.mFluidInputs[i], recipe2.mFluidInputs[i])) isSame = false; - } - if (isSame) duplicates.add(recipe2); - } - } - toAdd.removeAll(duplicates); - } - - private static Materials getMaterialFromInputFluid(GT_Recipe recipe) { - String materialString = recipe.mFluidInputs[0].getFluid() - .getName(); - materialString = StringUtils.removeStart(materialString, "molten"); - materialString = StringUtils.removeStart(materialString, "fluid"); - materialString = StringUtils.capitalize(materialString); - return Materials.get(materialString); - } - - private static void editRecipes(ArrayListMultimap base, HashSet noGas) { - HashSet toAdd = new HashSet<>(); - - for (SubTag gasTag : base.keySet()) { - for (GT_Recipe recipe : base.get(gasTag)) { - if (recipe.mFluidInputs != null && recipe.mFluidInputs.length > 0) { - Materials originalGas = getMaterialFromInputFluid(recipe); - if (originalGas != Materials._NULL) { - editEBFWerkstoffRecipes(gasTag, recipe, originalGas, toAdd); - editEBFMaterialRecipes(gasTag, recipe, originalGas, toAdd); - editEBFNoGasRecipes(recipe, originalGas, toAdd, noGas); - } - } - } - RecipeMaps.blastFurnaceRecipes.getBackend() - .removeRecipes(base.get(gasTag)); - } - - removeDuplicateGasRecipes(toAdd); - toAdd.forEach(RecipeMaps.blastFurnaceRecipes::add); - } - - public static void addElectricImplosionCompressorRecipes() { - RecipeMaps.implosionRecipes.getAllRecipes() - .stream() - .filter(e -> e.mInputs != null) - .forEach( - recipe -> GT_Values.RA.stdBuilder() - .itemInputs( - Arrays.stream(recipe.mInputs) - .filter(e -> !StaticRecipeChangeLoaders.checkForExplosives(e)) - .distinct() - .toArray(ItemStack[]::new)) - .itemOutputs(recipe.mOutputs) - .duration(1 * TICK) - .eut(TierEU.RECIPE_UEV) - .addTo(electricImplosionCompressorRecipes)); - - // Custom EIC recipes. - new ElectricImplosionCompressorRecipes().run(); - } - - private static boolean checkForExplosives(ItemStack input) { - return GT_Utility.areStacksEqual(input, new ItemStack(Blocks.tnt)) - || GT_Utility.areStacksEqual(input, GT_ModHandler.getIC2Item("industrialTnt", 1L)) - || GT_Utility.areStacksEqual(input, GT_ModHandler.getIC2Item("dynamite", 1L)) - || GT_Utility.areStacksEqual(input, ItemList.Block_Powderbarrel.get(1L)); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Assembler.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Assembler.java deleted file mode 100644 index 9d244e5eba..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Assembler.java +++ /dev/null @@ -1,271 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -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.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class Assembler implements Runnable { - - @Override - public void run() { - Materials[] cables = { // Cable material used in the acid gen, diode and energy distributor below - Materials.Lead, // ULV - Materials.Tin, // LV - Materials.AnnealedCopper, // MV - Materials.Gold, // HV - Materials.Aluminium, // EV - Materials.Tungsten, // IV - Materials.VanadiumGallium, // LuV - Materials.Naquadah, // ZPM - Materials.NaquadahAlloy, // UV - Materials.SuperconductorUV // UHV - }; - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(ItemRegistry.BW_BLOCKS[0], 1, 0), - Materials.Lapis.getPlates(9), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2L), - GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(new ItemStack(ItemRegistry.BW_BLOCKS[0], 1, 1)) - .fluidInputs(FluidRegistry.getFluidStack("ic2coolant", 1000)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(ItemRegistry.BW_BLOCKS[0], 1, 1), - Materials.Lapis.getBlocks(8), - GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(new ItemStack(ItemRegistry.BW_BLOCKS[1])) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Machine_Multi_BlastFurnace.get(64), GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(ItemRegistry.megaMachines[0]) - .fluidInputs(Materials.SolderingAlloy.getMolten(9216)) - .duration(1 * HOURS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Machine_Multi_VacuumFreezer.get(64), GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(ItemRegistry.megaMachines[1]) - .fluidInputs(Materials.SolderingAlloy.getMolten(9216)) - .duration(1 * HOURS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Distillation_Tower.get(64), GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(ItemRegistry.megaMachines[2]) - .fluidInputs(Materials.SolderingAlloy.getMolten(9216)) - .duration(1 * HOURS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Machine_Multi_LargeChemicalReactor.get(64), GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(ItemRegistry.megaMachines[3]) - .fluidInputs(Materials.SolderingAlloy.getMolten(9216)) - .duration(1 * HOURS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.OilCracker.get(64), GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(ItemRegistry.megaMachines[4]) - .fluidInputs(Materials.SolderingAlloy.getMolten(9216)) - .duration(1 * HOURS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.AnnealedCopper, 64L), - GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(new ItemStack(ItemRegistry.BW_BLOCKS[2], 1, 1)) - .fluidInputs(Materials.Plastic.getMolten(1152L)) - .duration(1 * TICKS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1L), - Materials.Aluminium.getPlates(1), - ItemList.Circuit_Board_Plastic.get(1L), - ItemList.Battery_RE_LV_Lithium.get(1L)) - .itemOutputs(new ItemStack(ItemRegistry.CIRCUIT_PROGRAMMER)) - .fluidInputs(Materials.SolderingAlloy.getMolten(288L)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Circuit_Parts_GlassFiber.get(32), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, 8), - WerkstoffLoader.CubicZirconia.get(OrePrefixes.gemExquisite, 2)) - .itemOutputs( - new ItemStack( - ItemRegistry.TecTechPipeEnergyLowPower.getItem(), - 1, - ItemRegistry.TecTechPipeEnergyLowPower.getItemDamage())) - .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(72)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - ItemStack[][] converters = ItemRegistry.TecTechLaserAdditions[0]; - ItemStack[][] input = ItemRegistry.TecTechLaserAdditions[1]; - ItemStack[][] dynamo = ItemRegistry.TecTechLaserAdditions[2]; - - ItemList[] emitters = { ItemList.Emitter_EV, ItemList.Emitter_IV, ItemList.Emitter_LuV, ItemList.Emitter_ZPM }; - - ItemList[] sensors = { ItemList.Sensor_EV, ItemList.Sensor_IV, ItemList.Sensor_LuV, ItemList.Sensor_ZPM }; - - OrePrefixes[] prefixes = { OrePrefixes.cableGt04, OrePrefixes.cableGt08, OrePrefixes.cableGt12, - OrePrefixes.cableGt16 }; - - for (int j = 0; j < 4; j++) { - for (int i = 0; i < 4; i++) { - ItemStack converter = converters[j][i]; - ItemStack eInput = input[j][i]; - ItemStack eDynamo = dynamo[j][i]; - long recipeConsumption = switch (i) { - case 0 -> TierEU.RECIPE_EV; - case 1 -> TierEU.RECIPE_IV; - case 2 -> TierEU.RECIPE_LuV; - case 3 -> TierEU.RECIPE_ZPM; - default -> TierEU.RECIPE_EV; - }; - - int solderingAmount = Math.max(144 * i, 72) * (j + 1); - - GT_Values.RA.stdBuilder() - .itemInputs( - - new ItemStack( - ItemRegistry.TecTechPipeEnergyLowPower.getItem(), - ((j + 1) * 16), - ItemRegistry.TecTechPipeEnergyLowPower.getItemDamage()), - WerkstoffLoader.CubicZirconia.get(OrePrefixes.lens), - GT_OreDictUnificator.get(prefixes[j], cables[i + 4], 8), - emitters[i].get(2 * (j + 1)), - sensors[i].get(2 * (j + 1)), - ItemList.TRANSFORMERS[4 + i].get(2 * (j + 1))) - .itemOutputs(converter) - .fluidInputs(Materials.SolderingAlloy.getMolten(solderingAmount)) - .duration((10 * (j + 1)) * SECONDS) - .eut(recipeConsumption) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack( - ItemRegistry.TecTechPipeEnergyLowPower.getItem(), - ((j + 1) * 16), - ItemRegistry.TecTechPipeEnergyLowPower.getItemDamage()), - WerkstoffLoader.CubicZirconia.get(OrePrefixes.lens), - GT_OreDictUnificator.get(prefixes[j], cables[i + 4], 8), - emitters[i].get(2 * (j + 1)), - sensors[i].get(2 * (j + 1)), - ItemList.TRANSFORMERS[4 + i].get(2 * (j + 1))) - .itemOutputs(converter) - .fluidInputs(Materials.SolderingAlloy.getMolten(solderingAmount)) - .duration((10 * (j + 1)) * SECONDS) - .eut(recipeConsumption) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack( - ItemRegistry.TecTechPipeEnergyLowPower.getItem(), - (j + 1) * 16, - ItemRegistry.TecTechPipeEnergyLowPower.getItemDamage()), - WerkstoffLoader.CubicZirconia.get(OrePrefixes.lens), - GT_OreDictUnificator.get(prefixes[j], cables[i + 4], 8), - sensors[i].get(2 * (j + 1)), - ItemList.HATCHES_ENERGY[4 + i].get(2 * (j + 1))) - .itemOutputs(eInput) - .fluidInputs(Materials.SolderingAlloy.getMolten(solderingAmount)) - .duration((10 * (j + 1)) * SECONDS) - .eut(recipeConsumption) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack( - ItemRegistry.TecTechPipeEnergyLowPower.getItem(), - (j + 1) * 16, - ItemRegistry.TecTechPipeEnergyLowPower.getItemDamage()), - WerkstoffLoader.CubicZirconia.get(OrePrefixes.lens), - GT_OreDictUnificator.get(prefixes[j], cables[i + 4], 8), - emitters[i].get(2 * (j + 1)), - ItemList.HATCHES_DYNAMO[4 + i].get(2 * (j + 1))) - .itemOutputs(eDynamo) - .fluidInputs(Materials.SolderingAlloy.getMolten(solderingAmount)) - .duration((10 * (j + 1) * SECONDS)) - .eut(recipeConsumption) - .addTo(assemblerRecipes); - } - } - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Input_HV.get(64), - Materials.LiquidAir.getCells(1), - GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(ItemRegistry.compressedHatch.copy()) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Hatch_Output_HV.get(64), GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(ItemRegistry.giantOutputHatch.copy()) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 6), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1)) - .itemOutputs(new ItemStack(GregTech_API.sBlockCasings3, 1, 12)) - .fluidInputs(Materials.Concrete.getMolten(1296)) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(GregTech_API.sBlockCasings3, 1, 12), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Europium, 6), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Europium, 24)) - .itemOutputs(new ItemStack(GregTech_API.sBlockCasings8, 1, 5)) - .fluidInputs(Materials.Lead.getMolten(864)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/AssemblyLine.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/AssemblyLine.java deleted file mode 100644 index fd320173a4..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/AssemblyLine.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; - -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; - -public class AssemblyLine implements Runnable { - - @Override - public void run() { - Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null - ? FluidRegistry.getFluid("molten.indalloy140") - : FluidRegistry.getFluid("molten.solderingalloy"); - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemList.Pump_IV.get(1L)) - .metadata(RESEARCH_TIME, 1 * HOURS) - .itemInputs( - ItemList.Pump_IV.get(16), - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Ultimate, 32L), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.HSSE, 16L), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.HSSE, 16L), - ItemList.Field_Generator_LuV.get(8)) - .fluidInputs( - new FluidStack(solderIndalloy, 32 * 144), - Materials.Polytetrafluoroethylene.getMolten(32 * 144)) - .itemOutputs(ItemRegistry.dehp) - .eut(TierEU.RECIPE_LuV) - .duration(4 * MINUTES + 10 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemList.OreDrill4.get(1L)) - .metadata(RESEARCH_TIME, 25 * MINUTES + 36 * SECONDS) - .itemInputs( - ItemList.OreDrill4.get(1L), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Tritanium, 9L), - Materials.Europium.getPlates(3), - ItemList.Electric_Motor_LuV.get(9L), - ItemList.Sensor_LuV.get(9L), - ItemList.Field_Generator_LuV.get(9L), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Europium, 36L)) - .fluidInputs(new FluidStack(solderIndalloy, 1440), WerkstoffLoader.Neon.getFluidOrGas(20000)) - .itemOutputs(ItemRegistry.voidminer[0].copy()) - .eut(TierEU.RECIPE_LuV) - .duration(5 * MINUTES) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemList.Machine_LuV_CircuitAssembler.get(1L)) - .metadata(RESEARCH_TIME, 20 * MINUTES) - .itemInputs( - ItemList.Machine_LuV_CircuitAssembler.get(1L), - ItemList.Robot_Arm_LuV.get(4L), - ItemList.Electric_Motor_LuV.get(4L), - ItemList.Field_Generator_LuV.get(1L), - ItemList.Emitter_LuV.get(1L), - ItemList.Sensor_LuV.get(1L), - WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.plate, 8)) - .fluidInputs(new FluidStack(solderIndalloy, 1440)) - .itemOutputs(ItemRegistry.cal.copy()) - .eut(TierEU.RECIPE_LuV) - .duration(20 * MINUTES) - .addTo(AssemblyLine); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Autoclave.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Autoclave.java deleted file mode 100644 index 1793877df3..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Autoclave.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.BioItemList; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; - -public class Autoclave implements Runnable { - - @Override - public void run() { - Materials[] sterilizers = { Materials.Ammonia, Materials.Chlorine, Materials.Ethanol, Materials.Methanol }; - for (Materials used : sterilizers) { - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Circuit_Parts_PetriDish.get(1L)) - .itemOutputs(BioItemList.getPetriDish(null)) - .fluidInputs(used.getGas(10L) != null ? used.getGas(8L) : used.getFluid(16L)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(autoclaveRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Items.glass_bottle)) - .itemOutputs(BioItemList.getDNASampleFlask(null)) - .fluidInputs(used.getGas(10L) != null ? used.getGas(8L) : used.getFluid(16L)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(autoclaveRecipes); - - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Centrifuge.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Centrifuge.java deleted file mode 100644 index e148376b01..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Centrifuge.java +++ /dev/null @@ -1,144 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_HTGR.HTGRMaterials.MATERIALS_PER_FUEL; -import static com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_HTGR.HTGRMaterials.sHTGR_Fuel; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import java.util.Arrays; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.BioCultureLoader; -import com.github.bartimaeusnek.bartworks.common.loaders.BioItemList; -import com.github.bartimaeusnek.bartworks.common.loaders.FluidLoader; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_HTGR; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_THTR; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_Utility; - -public class Centrifuge implements Runnable { - - @Override - public void run() { - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Thorium.getDust(1)) - .itemOutputs( - Materials.Thorium.getDust(1), - Materials.Thorium.getDust(1), - WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 1), - WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 1), - WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 1)) - .outputChances(800, 375, 22, 22, 5) - .duration(8 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - ItemStack[] pellets = new ItemStack[6]; - Arrays.fill(pellets, new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials, 64, 4)); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials, 1, 3), - GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(pellets) - .duration(40 * MINUTES) - .eut(TierEU.RECIPE_LV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials, 1, 5), - GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials, 64, 6)) - .duration(40 * MINUTES) - .eut(TierEU.RECIPE_LV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials, 1, 6)) - .itemOutputs(Materials.Lead.getDust(1)) - .outputChances(300) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(centrifugeRecipes); - - int i = 0; - for (GT_TileEntity_HTGR.HTGRMaterials.Fuel_ fuel : sHTGR_Fuel) { - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 1, i + 3), - GT_Utility.getIntegratedCircuit(17)) - .itemOutputs( - new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 64, i + 4), - new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 64, i + 4), - new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 64, i + 4), - new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 64, i + 4)) - .duration(10 * MINUTES) - .eut(TierEU.RECIPE_LV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 1, i + 5), - GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 64, i + 6)) - .duration(2 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(centrifugeRecipes); - - GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 1, i + 6)) - .itemOutputs( - fuel.recycledItems[0], - fuel.recycledItems[1], - fuel.recycledItems[2], - fuel.recycledItems[3], - fuel.recycledItems[4]) - .outputChances(fuel.recycleChances); - if (fuel.recycledFluid != null) { - recipeBuilder.fluidOutputs(fuel.recycledFluid); - } - recipeBuilder.duration(1 * MINUTES) - .eut(TierEU.RECIPE_LV) - .addTo(centrifugeRecipes); - - i += MATERIALS_PER_FUEL; - } - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(BioItemList.getOther(4)) - .fluidInputs(new FluidStack(BioCultureLoader.eColi.getFluid(), 1000)) - .fluidOutputs(new FluidStack(FluidLoader.BioLabFluidMaterials[1], 10)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(17)) - .fluidInputs(new FluidStack(FluidLoader.BioLabFluidMaterials[1], 1000)) - .fluidOutputs(new FluidStack(FluidLoader.BioLabFluidMaterials[3], 250)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(17)) - .fluidInputs(new FluidStack(BioCultureLoader.CommonYeast.getFluid(), 1000)) - .fluidOutputs(new FluidStack(FluidLoader.BioLabFluidMaterials[2], 10)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(centrifugeRecipes); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/ChemicalBath.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/ChemicalBath.java deleted file mode 100644 index f1d9ddd236..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/ChemicalBath.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; - -public class ChemicalBath implements Runnable { - - @Override - public void run() { - - for (int i = 0; i < Dyes.dyeBrown.getSizeOfFluidList(); ++i) { - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 6)) - .fluidInputs(Dyes.dyeRed.getFluidDye(i, 36)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(2) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 7)) - .fluidInputs(Dyes.dyeGreen.getFluidDye(i, 36)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(2) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 8)) - .fluidInputs(Dyes.dyePurple.getFluidDye(i, 36)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(2) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 9)) - .fluidInputs(Dyes.dyeYellow.getFluidDye(i, 36)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(2) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 10)) - .fluidInputs(Dyes.dyeLime.getFluidDye(i, 36)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(2) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 11)) - .fluidInputs(Dyes.dyeBrown.getFluidDye(i, 36)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(2) - .addTo(chemicalBathRecipes); - - } - - for (int i = 6; i < 11; i++) { - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, i)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .fluidInputs(Materials.Chlorine.getGas(50)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(2) - .addTo(chemicalBathRecipes); - - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/ChemicalReactor.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/ChemicalReactor.java deleted file mode 100644 index 87aaf91f71..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/ChemicalReactor.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; - -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.FluidLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_Utility; - -public class ChemicalReactor implements Runnable { - - @Override - public void run() { - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(10)) - .fluidInputs(new FluidStack(FluidLoader.heatedfulvicAcid, 1000)) - .fluidOutputs(new FluidStack(FluidLoader.Kerogen, 1000)) - .duration(3 * SECONDS + 15 * TICKS) - .eut(TierEU.RECIPE_MV) - .addTo(UniversalChemical); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/CraftingRecipes.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/CraftingRecipes.java deleted file mode 100644 index ae0e77c2f8..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/CraftingRecipes.java +++ /dev/null @@ -1,477 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_EV; -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_HV; -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_IV; -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UV; -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.BioLab_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.BioVat; -import static gregtech.api.enums.MetaTileEntityIDs.LESU; -import static gregtech.api.enums.MetaTileEntityIDs.ManualTrafo; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_EV; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_HV; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_IV; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UV; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.RadioHatch_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.Windmill; -import static gregtech.api.enums.Mods.IndustrialCraft2; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; -import net.minecraftforge.oredict.OreDictionary; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.common.loaders.BioItemList; -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.common.loaders.RecipeLoader; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_BioVat; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_LESU; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_ManualTrafo; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_Windmill; -import com.github.bartimaeusnek.bartworks.common.tileentities.tiered.GT_MetaTileEntity_BioLab; -import com.github.bartimaeusnek.bartworks.common.tileentities.tiered.GT_MetaTileEntity_RadioHatch; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -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.OrePrefixes; -import gregtech.api.interfaces.ISubTagContainer; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import ic2.core.Ic2Items; - -public class CraftingRecipes implements Runnable { - - @Override - public void run() { - - Materials[] cables = { // Cable material used in the acid gen, diode and energy distributor below - Materials.Lead, // ULV - Materials.Tin, // LV - Materials.AnnealedCopper, // MV - Materials.Gold, // HV - Materials.Aluminium, // EV - Materials.Tungsten, // IV - Materials.VanadiumGallium, // LuV - Materials.Naquadah, // ZPM - Materials.NaquadahAlloy, // UV - Materials.SuperconductorUV // UHV - }; - - ISubTagContainer[] hulls = { // Plate material used in the acid gen, diode and energy distributor below - Materials.WroughtIron, // ULV - Materials.Steel, // LV - Materials.Aluminium, // MV - Materials.StainlessSteel, // HV - Materials.Titanium, // EV - Materials.TungstenSteel, // IV - WerkstoffLoader.LuVTierMaterial, // LuV - Materials.Iridium, // ZPM - Materials.Osmium, // UV - Materials.Naquadah // UHV - }; - - ItemStack[] bats = { ItemList.Battery_Hull_LV.get(1L), ItemList.Battery_Hull_MV.get(1L), - ItemList.Battery_Hull_HV.get(1L) }; - ItemStack[] chreac = { ItemList.Machine_MV_ChemicalReactor.get(1L), ItemList.Machine_HV_ChemicalReactor.get(1L), - ItemList.Machine_EV_ChemicalReactor.get(1L) }; - - GT_ModHandler.addCraftingRecipe( - new GT_TileEntity_LESU(LESU.ID, "LESU", "L.E.S.U.").getStackForm(1L), - RecipeLoader.BITSD, - new Object[] { "CDC", "SBS", "CFC", 'C', "circuitAdvanced", 'D', ItemList.Cover_Screen.get(1L), 'S', - GT_OreDictUnificator.get(OrePrefixes.cableGt12, Materials.Platinum, 1L), 'B', - new ItemStack(ItemRegistry.BW_BLOCKS[1]), 'F', ItemList.Field_Generator_HV.get(1L) }); - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.ROCKCUTTER_MV), - RecipeLoader.BITSD, - new Object[] { "DS ", "DP ", "DCB", 'D', GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1L), - 'S', GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 1L), 'P', - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 1L), 'C', "circuitGood", 'B', - ItemList.IC2_AdvBattery.get(1L) }); - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.ROCKCUTTER_LV), - RecipeLoader.BITSD, - new Object[] { "DS ", "DP ", "DCB", 'D', GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1L), - 'S', GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 1L), 'P', - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1L), 'C', "circuitBasic", 'B', - ItemList.IC2_ReBattery.get(1L) }); - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.ROCKCUTTER_HV), - RecipeLoader.BITSD, - new Object[] { "DS ", "DP ", "DCB", 'D', GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1L), - 'S', GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iridium, 1L), 'P', - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1L), 'C', "circuitAdvanced", 'B', - ItemList.IC2_EnergyCrystal.get(1L) }); - - if (ConfigHandler.teslastaff) { - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.TESLASTAFF), - RecipeLoader.BITSD, - new Object[] { "BO ", "OP ", " P", 'O', - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 1L), 'B', - ItemList.Energy_LapotronicOrb.get(1L), 'P', "plateAlloyIridium", }); - } - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.PUMPPARTS, 1, 0), // tube - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " fG", " G ", "G ", 'G', ItemList.Circuit_Parts_Glass_Tube.get(1L) }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.PUMPPARTS, 1, 1), // motor - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "GLP", "LSd", "PfT", 'G', - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Steel, 1L), 'L', - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Steel, 1L), 'S', - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 1L), 'P', new ItemStack(Blocks.piston), - 'T', new ItemStack(ItemRegistry.PUMPPARTS, 1, 0) }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.PUMPBLOCK, 1, 0), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "IPI", "PMP", "ISI", 'I', GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L), - 'P', GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Wood, 1L), 'M', - new ItemStack(ItemRegistry.PUMPPARTS, 1, 1), 'S', Ic2Items.ironFurnace }); - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.WINDMETER), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "SWF", "Sf ", "Ss ", 'S', "stickWood", 'W', new ItemStack(Blocks.wool, 1, Short.MAX_VALUE), - 'F', new ItemStack(Items.string), }); - - for (int i = 0; i < 3; i++) { - Materials cable = cables[i + 2]; - ItemStack machinehull = ItemList.MACHINE_HULLS[i + 2].get(1L); - GT_ModHandler.addCraftingRecipe( - ItemRegistry.acidGens[i], - RecipeLoader.BITSD, - new Object[] { "HRH", "HCH", "HKH", 'H', bats[i], 'K', - GT_OreDictUnificator.get(OrePrefixes.cableGt01, cable, 1L), 'C', machinehull, 'R', chreac[i] }); - } - - GT_ModHandler.addCraftingRecipe( - ItemRegistry.acidGensLV, - RecipeLoader.BITSD, - new Object[] { "HRH", "KCK", "HKH", 'H', ItemList.Battery_Hull_LV.get(1L), 'K', - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 1L), 'C', ItemList.Hull_LV.get(1L), 'R', - ItemList.Machine_LV_ChemicalReactor.get(1L), }); - - for (int i = 0; i < 9; i++) { - try { - Materials cable = cables[i]; - ItemStack hull = hulls[i] instanceof Materials - ? GT_OreDictUnificator.get(OrePrefixes.plate, hulls[i], 1L) - : ((Werkstoff) hulls[i]).get(OrePrefixes.plate); - ItemStack machinehull = ItemList.MACHINE_HULLS[i].get(1L); - - GT_ModHandler.addCraftingRecipe( - ItemRegistry.energyDistributor[i], - RecipeLoader.BITSD, - new Object[] { "PWP", "WCW", "PWP", 'W', GT_OreDictUnificator.get(OrePrefixes.wireGt16, cable, 1L), - 'P', hull, 'C', machinehull }); - GT_ModHandler.addCraftingRecipe( - ItemRegistry.diode12A[i], - RecipeLoader.BITSD, - new Object[] { "WDW", "DCD", "PDP", 'D', OrePrefixes.componentCircuit.get(Materials.Diode), 'W', - GT_OreDictUnificator.get(OrePrefixes.cableGt12, cable, 1L), 'P', hull, 'C', machinehull }); - GT_ModHandler.addCraftingRecipe( - ItemRegistry.diode8A[i], - RecipeLoader.BITSD, - new Object[] { "WDW", "DCD", "PDP", 'D', OrePrefixes.componentCircuit.get(Materials.Diode), 'W', - GT_OreDictUnificator.get(OrePrefixes.cableGt08, cable, 1L), 'P', hull, 'C', machinehull }); - GT_ModHandler.addCraftingRecipe( - ItemRegistry.diode4A[i], - RecipeLoader.BITSD, - new Object[] { "WDW", "DCD", "PDP", 'D', OrePrefixes.componentCircuit.get(Materials.Diode), 'W', - GT_OreDictUnificator.get(OrePrefixes.cableGt04, cable, 1L), 'P', hull, 'C', machinehull }); - GT_ModHandler.addCraftingRecipe( - ItemRegistry.diode2A[i], - RecipeLoader.BITSD, - new Object[] { "WDW", "DCD", "PDP", 'D', OrePrefixes.componentCircuit.get(Materials.Diode), 'W', - GT_OreDictUnificator.get(OrePrefixes.cableGt02, cable, 1L), 'P', hull, 'C', machinehull }); - GT_ModHandler.addCraftingRecipe( - ItemRegistry.diode16A[i], - RecipeLoader.BITSD, - new Object[] { "WHW", "DCD", "PDP", 'H', OrePrefixes.componentCircuit.get(Materials.Inductor), 'D', - OrePrefixes.componentCircuit.get(Materials.Diode), 'W', - GT_OreDictUnificator.get(OrePrefixes.wireGt16, cable, 1L), 'P', hull, 'C', machinehull }); - - } catch (ArrayIndexOutOfBoundsException ignored) { - - } - - } - - String[] stones = { "stone", "stoneSmooth" }; - String[] granites = { "blockGranite", "stoneGranite", "Granite", "granite" }; - for (String granite : granites) { - for (String stone : stones) { - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 0), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "SSS", "DfD", " h ", 'S', stone, 'D', - new ItemStack(GregTech_API.sBlockGranites, 1, OreDictionary.WILDCARD_VALUE), }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 1), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "hDf", "SSS", 'S', stone, 'D', - new ItemStack(GregTech_API.sBlockGranites, 1, OreDictionary.WILDCARD_VALUE), }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 0), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "SSS", "DfD", " h ", 'S', stone, 'D', granite, }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 1), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "hDf", "SSS", 'S', stone, 'D', granite, }); - } - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 2), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "STS", "h f", "SBS", 'S', granite, 'T', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 0), - 'B', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 1), }); - } - - GT_ModHandler.addCraftingRecipe( - new GT_TileEntity_ManualTrafo( - ManualTrafo.ID, - "bw.manualtrafo", - StatCollector.translateToLocal("tile.manutrafo.name")).getStackForm(1L), - RecipeLoader.BITSD, - new Object[] { "SCS", "CHC", "ZCZ", 'S', - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 1L), 'C', - new ItemStack(ItemRegistry.BW_BLOCKS[2]), 'H', ItemList.Hull_HV.get(1L), 'Z', "circuitAdvanced" }); - - GT_ModHandler.addCraftingRecipe( - new GT_TileEntity_Windmill( - Windmill.ID, - "bw.windmill", - StatCollector.translateToLocal("tile.bw.windmill.name")).getStackForm(1L), - RecipeLoader.BITSD, - new Object[] { "BHB", "WGW", "BWB", 'B', new ItemStack(Blocks.brick_block), 'W', - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), 'H', new ItemStack(Blocks.hopper), - 'G', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 2), }); - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 2), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "STS", "h f", "SBS", 'S', - new ItemStack(GregTech_API.sBlockGranites, 1, OreDictionary.WILDCARD_VALUE), 'T', - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 0), 'B', - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 1), }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "WLs", "WLh", "WLf", 'L', new ItemStack(Items.leather), 'W', "logWood", }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "WLs", "WLh", "WLf", 'L', new ItemStack(Blocks.carpet), 'W', "logWood", }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "WLs", "WLh", "WLf", 'L', new ItemStack(Items.paper), 'W', "logWood", }); - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "WEs", "WZh", "WDf", 'E', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'Z', - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'D', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), - 'W', "logWood", }); - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "WEs", "WZh", "WDf", 'Z', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'E', - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'D', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), - 'W', "logWood", }); - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "WEs", "WZh", "WDf", 'D', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'Z', - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'E', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), - 'W', "logWood", }); - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "WEs", "WZh", "WDf", 'E', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'D', - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'Z', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), - 'W', "logWood", }); - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "WEs", "WZh", "WDf", 'Z', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'D', - new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'E', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), - 'W', "logWood", }); - - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.LEATHER_ROTOR), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "hPf", "PWP", "sPr", 'P', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 3), 'W', - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.WOOL_ROTOR), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "hPf", "PWP", "sPr", 'P', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 4), 'W', - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.PAPER_ROTOR), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "hPf", "PWP", "sPr", 'P', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 5), 'W', - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.COMBINED_ROTOR), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "hPf", "PWP", "sPr", 'P', new ItemStack(ItemRegistry.CRAFTING_PARTS, 1, 6), 'W', - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(ItemRegistry.ROTORBLOCK), - RecipeLoader.BITSD, - new Object[] { "WRW", "RGR", "WRW", 'R', GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Iron, 1L), - 'W', "plankWood", 'G', GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Iron, 1L), }); - - GT_ModHandler.addCraftingRecipe( - ItemRegistry.THTR, - RecipeLoader.BITSD, - new Object[] { "BZB", "BRB", "BZB", 'B', new ItemStack(GregTech_API.sBlockCasings3, 1, 12), 'R', - GT_ModHandler.getModItem(IndustrialCraft2.ID, "blockGenerator", 1, 5), 'Z', "circuitUltimate" }); - - GT_ModHandler.addCraftingRecipe( - ItemRegistry.HTGR, - RecipeLoader.BITSD, - new Object[] { "BZB", "BRB", "BZB", 'B', new ItemStack(GregTech_API.sBlockCasings8, 1, 5), 'R', - GT_ModHandler.getModItem(IndustrialCraft2.ID, "blockGenerator", 1, 5), 'Z', "circuitSuperconductor" }); - - // DNAExtractionModule - GT_ModHandler.addCraftingRecipe( - BioItemList.mBioLabParts[0], - RecipeLoader.BITSD, - new Object[] { "TET", "CFC", "TST", 'T', - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1L), 'E', ItemList.Emitter_EV.get(1L), - 'C', GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Aluminium, 1L), 'S', - ItemList.Sensor_EV.get(1L), 'F', ItemList.Field_Generator_EV.get(1L) }); - - // PCRThermoclyclingModule - GT_ModHandler.addCraftingRecipe( - BioItemList.mBioLabParts[1], - RecipeLoader.BITSD, - new Object[] { "NEN", "CFC", "NSN", 'N', - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Nichrome, 1L), 'E', - ItemList.Emitter_EV.get(1L), 'C', - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Aluminium, 1L), 'S', - ItemList.Sensor_EV.get(1L), 'F', ItemList.Field_Generator_EV.get(1L) }); - - // PlasmidSynthesisModule - GT_ModHandler.addCraftingRecipe( - BioItemList.mBioLabParts[2], - RecipeLoader.BITSD, - new Object[] { "SFE", "CPC", "NFN", 'N', - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Nichrome, 1L), 'C', "circuit" + Materials.EV, - 'F', ItemList.Field_Generator_EV.get(1L), 'E', ItemList.Emitter_EV.get(1L), 'S', - ItemList.Sensor_EV.get(1L), 'P', - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1L), }); - // TransformationModule - GT_ModHandler.addCraftingRecipe( - BioItemList.mBioLabParts[3], - RecipeLoader.BITSD, - new Object[] { "SFE", "CPC", "NFN", 'N', - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 1L), 'C', "circuit" + Materials.LuV, - 'F', ItemList.Field_Generator_LuV.get(1L), 'E', ItemList.Emitter_LuV.get(1L), 'S', - ItemList.Sensor_LuV.get(1L), 'P', WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.plate, 1), }); - - // ClonalCellularSynthesisModule - GT_ModHandler.addCraftingRecipe( - BioItemList.mBioLabParts[4], - RecipeLoader.BITSD, - new Object[] { "FEF", "CPC", "FSF", 'N', - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 1L), 'C', "circuit" + Materials.LuV, - 'F', ItemList.Field_Generator_LuV.get(1L), 'E', ItemList.Emitter_LuV.get(1L), 'S', - ItemList.Sensor_LuV.get(1L), 'P', WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.plate, 1), }); - - GT_ModHandler.addCraftingRecipe( - new GT_TileEntity_BioVat(BioVat.ID, "bw.biovat", StatCollector.translateToLocal("tile.biovat.name")) - .getStackForm(1L), - RecipeLoader.BITSD, - new Object[] { "GCG", "KHK", "GCG", 'G', new ItemStack(ItemRegistry.bw_glasses[0], 1, 1), 'C', - "circuit" + Materials.EV, 'K', GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Silver, 1L), - 'H', ItemList.MACHINE_HULLS[3].get(1L) }); - - ItemStack[] Pistons2 = { ItemList.Electric_Piston_HV.get(1L), ItemList.Electric_Piston_EV.get(1L), - ItemList.Electric_Piston_IV.get(1L), ItemList.Electric_Piston_LuV.get(1L), - ItemList.Electric_Piston_ZPM.get(1L), ItemList.Electric_Piston_UV.get(1L) }; - ItemStack[] BioLab2 = new ItemStack[GT_Values.VN.length - 3]; - ItemStack[] RadioHatch2 = new ItemStack[GT_Values.VN.length - 3]; - Materials[] cables2 = { Materials.Gold, Materials.Aluminium, Materials.Tungsten, Materials.VanadiumGallium, - Materials.Naquadah, Materials.NaquadahAlloy, Materials.SuperconductorUHV }; - Materials[] hulls2 = { Materials.StainlessSteel, Materials.Titanium, Materials.TungstenSteel, Materials.Chrome, - Materials.Iridium, Materials.Osmium, Materials.Naquadah }; - Materials[] wireMat2 = { Materials.Kanthal, Materials.Nichrome, Materials.TungstenSteel, Materials.Naquadah, - Materials.NaquadahAlloy, Materials.SuperconductorUHV }; - Materials[] circuits2 = { Materials.HV, Materials.EV, Materials.IV, Materials.LuV, Materials.ZPM, - Materials.UV }; - - int[] BioLab = new int[] { BioLab_HV.ID, BioLab_EV.ID, BioLab_IV.ID, BioLab_LuV.ID, BioLab_ZPM.ID, BioLab_UV.ID, - BioLab_UHV.ID, BioLab_UEV.ID, BioLab_UIV.ID, BioLab_UMV.ID, BioLab_UXV.ID, BioLab_MAX.ID }; - int[] RadioHatch = new int[] { RadioHatch_HV.ID, RadioHatch_EV.ID, RadioHatch_IV.ID, RadioHatch_LuV.ID, - RadioHatch_ZPM.ID, RadioHatch_UV.ID, RadioHatch_UHV.ID, RadioHatch_UEV.ID, RadioHatch_UIV.ID, - RadioHatch_UMV.ID, RadioHatch_UXV.ID, RadioHatch_MAX.ID }; - - for (int i = 3; i < GT_Values.VN.length - 1; i++) { - BioLab2[i - 3] = new GT_MetaTileEntity_BioLab( - BioLab[i - 3], - "bw.biolab" + GT_Values.VN[i], - GT_Values.VN[i] + " " + StatCollector.translateToLocal("tile.biolab.name"), - i).getStackForm(1L); - RadioHatch2[i - 3] = new GT_MetaTileEntity_RadioHatch( - RadioHatch[i - 3], - "bw.radiohatch" + GT_Values.VN[i], - GT_Values.VN[i] + " " + StatCollector.translateToLocal("tile.radiohatch.name"), - i).getStackForm(1L); - try { - ItemStack machinehull = ItemList.MACHINE_HULLS[i].get(1L); - GT_ModHandler.addCraftingRecipe( - BioLab2[i - 3], - RecipeLoader.BITSD, - new Object[] { "PFP", "WCW", "OGO", 'F', - GT_OreDictUnificator.get(OrePrefixes.frameGt, hulls2[i - 3], 1L), 'W', - GT_OreDictUnificator.get(OrePrefixes.wireGt01, wireMat2[i - 3], 1L), 'P', - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L), 'O', - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Polystyrene, 1L), 'G', - "circuit" + circuits2[i - 3], 'C', machinehull }); - GT_ModHandler.addCraftingRecipe( - RadioHatch2[i - 3], - RecipeLoader.BITSD, - new Object[] { "DPD", "DCD", "DKD", 'D', - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1L), 'C', machinehull, 'K', - GT_OreDictUnificator.get(OrePrefixes.cableGt08, cables2[i - 3], 1L), 'P', Pistons2[i - 3] }); - } catch (ArrayIndexOutOfBoundsException ignored) { - - } - } - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Electrolyzer.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Electrolyzer.java deleted file mode 100644 index 9502d4eff3..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Electrolyzer.java +++ /dev/null @@ -1,152 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; - -public class Electrolyzer implements Runnable { - - // TODO: fix the chemical balance issues there are below - @Override - public void run() { - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Forsterit.get(OrePrefixes.dust, 7)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L)) - .fluidOutputs(Materials.Oxygen.getGas(2000L)) - .duration(10 * SECONDS) - .eut(90) - .addTo(electrolyzerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.RedZircon.get(OrePrefixes.dust, 6)) - .itemOutputs( - WerkstoffLoader.Zirconium.get(OrePrefixes.dust, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L)) - .fluidOutputs(Materials.Oxygen.getGas(2000L)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(90) - .addTo(electrolyzerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Fayalit.get(OrePrefixes.dust, 7)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L)) - .fluidOutputs(Materials.Oxygen.getGas(2000L)) - .duration(16 * SECONDS) - .eut(90) - .addTo(electrolyzerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Prasiolite.get(OrePrefixes.dust, 16)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 5L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L)) - .duration(29 * SECONDS) - .eut(90) - .addTo(electrolyzerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Hedenbergit.get(OrePrefixes.dust, 10)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 2L)) - .fluidOutputs(Materials.Oxygen.getGas(2000L)) - .duration(15 * SECONDS) - .eut(90) - .addTo(electrolyzerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.FuchsitAL.get(OrePrefixes.dust, 21), ItemList.Cell_Empty.get(2)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 3L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3L), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2)) - .fluidOutputs(Materials.Oxygen.getGas(2000L)) - .duration(19 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_MV) - .addTo(electrolyzerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.FuchsitCR.get(OrePrefixes.dust, 21), ItemList.Cell_Empty.get(2)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 3L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3L), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2)) - .fluidOutputs(Materials.Oxygen.getGas(2000L)) - .duration(23 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(electrolyzerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.VanadioOxyDravit.get(OrePrefixes.dust, 53), ItemList.Cell_Empty.get(3)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 3L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnalium, 6L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 6), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 3), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 3)) - .fluidOutputs(Materials.Oxygen.getGas(19000L)) - .duration(35 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_MV) - .addTo(electrolyzerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.ChromoAluminoPovondrait.get(OrePrefixes.dust, 53), ItemList.Cell_Empty.get(3)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 3L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnalium, 6L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 6), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 3), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 3)) - .fluidOutputs(Materials.Oxygen.getGas(19000L)) - .duration(36 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(electrolyzerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.FluorBuergerit.get(OrePrefixes.dust, 50), ItemList.Cell_Empty.get(3)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 3L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 6L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 6), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 3), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Fluorine, 3)) - .fluidOutputs(Materials.Oxygen.getGas(6000L)) - .duration(36 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_MV) - .addTo(electrolyzerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Olenit.get(OrePrefixes.dust, 51), ItemList.Cell_Empty.get(1)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 9L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 6L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 3), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1)) - .fluidOutputs(Materials.Oxygen.getGas(1000L)) - .duration(39 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_MV) - .addTo(electrolyzerRecipes); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Extractor.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Extractor.java deleted file mode 100644 index 9b304de837..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Extractor.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.enums.Mods.CropLoadCore; -import static gregtech.api.recipe.RecipeMaps.extractorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.github.bartimaeusnek.bartworks.common.loaders.BioItemList; -import com.github.bartimaeusnek.bartworks.util.BW_Util; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.TierEU; - -public class Extractor implements Runnable { - - @Override - public void run() { - List oreCropVine = OreDictionary.getOres("cropVine", false); - if (CropLoadCore.isModLoaded() && !oreCropVine.isEmpty()) { - for (ItemStack stack : oreCropVine) { - - GT_Values.RA.stdBuilder() - .itemInputs(BW_Util.setStackSize(stack, 12)) - .itemOutputs(BioItemList.getOther(1)) - .duration(25 * SECONDS) - .eut((int) TierEU.RECIPE_HV) - .addTo(extractorRecipes); - - } - } - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Circuit_Chip_Stemcell.get(1L)) - .itemOutputs(BioItemList.getOther(4)) - .duration(25 * SECONDS) - .eut((int) TierEU.RECIPE_LuV) - .addTo(extractorRecipes); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FakeRecipes.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FakeRecipes.java deleted file mode 100644 index 1df03d10f2..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FakeRecipes.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_HTGR; - -public class FakeRecipes implements Runnable { - - @Override - public void run() { - GT_TileEntity_HTGR.HTGRMaterials.register_fake_THR_Recipes(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FluidHeater.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FluidHeater.java deleted file mode 100644 index 3d27c55038..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FluidHeater.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.FluidLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_Utility; - -public class FluidHeater implements Runnable { - - @Override - public void run() { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(10)) - .fluidInputs(new FluidStack(FluidLoader.fulvicAcid, 1000)) - .fluidOutputs(new FluidStack(FluidLoader.heatedfulvicAcid, 1000)) - .duration(4 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_MV) - .addTo(fluidHeaterRecipes); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FluidSolidifier.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FluidSolidifier.java deleted file mode 100644 index 4991370f44..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FluidSolidifier.java +++ /dev/null @@ -1,103 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.TierEU; - -public class FluidSolidifier implements Runnable { - - @Override - public void run() { - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.lapis_block)) - .itemOutputs(new ItemStack(ItemRegistry.BW_BLOCKS[0], 1, 0)) - .fluidInputs(Materials.Iron.getMolten(1296L)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 1)) - .fluidInputs(Materials.Titanium.getMolten(1152)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 2)) - .fluidInputs(Materials.TungstenSteel.getMolten(1152)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 3)) - .fluidInputs(WerkstoffLoader.LuVTierMaterial.getMolten(1152)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 4)) - .fluidInputs(Materials.Iridium.getMolten(1152)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 5)) - .fluidInputs(Materials.Osmium.getMolten(1152)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 13)) - .fluidInputs(Materials.Neutronium.getMolten(1152)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 14)) - .fluidInputs(Materials.CosmicNeutronium.getMolten(1152)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 15)) - .fluidInputs(Materials.Infinity.getMolten(1152)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 0)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[1], 1, 0)) - .fluidInputs(MaterialsUEVplus.TranscendentMetal.getMolten(1152)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(fluidSolidifierRecipes); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FormingPress.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FormingPress.java deleted file mode 100644 index bdeb24af9e..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/FormingPress.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_HTGR.HTGRMaterials.MATERIALS_PER_FUEL; -import static com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_HTGR.HTGRMaterials.sHTGR_Fuel; -import static gregtech.api.recipe.RecipeMaps.formingPressRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_HTGR; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_THTR; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; - -public class FormingPress implements Runnable { - - @Override - public void run() { - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials), Materials.Graphite.getDust(64)) - .itemOutputs(new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials, 1, 1)) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(formingPressRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials, 1, 1), - Materials.Silicon.getDust(64)) - .itemOutputs(new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials, 1, 2)) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(formingPressRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials, 1, 2), - Materials.Graphite.getDust(64)) - .itemOutputs(new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials, 1, 3)) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(formingPressRecipes); - - int i = 0; - for (GT_TileEntity_HTGR.HTGRMaterials.Fuel_ fuel : sHTGR_Fuel) { - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 1, i), - Materials.Carbon.getDust(64)) - .itemOutputs(new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 1, i + 1)) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(formingPressRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 1, i + 1), - Materials.Silicon.getDust(64)) - .itemOutputs(new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 1, i + 2)) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(formingPressRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 1, i + 2), - Materials.Graphite.getDust(64)) - .itemOutputs(new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 1, i + 3)) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(formingPressRecipes); - i += MATERIALS_PER_FUEL; - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/LaserEngraver.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/LaserEngraver.java deleted file mode 100644 index 59c84d0f7c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/LaserEngraver.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.BioItemList; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_Utility; - -public class LaserEngraver implements Runnable { - - @Override - public void run() { - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Items.emerald), GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(BioItemList.getPlasmidCell(null)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(laserEngraverRecipes); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Mixer.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Mixer.java deleted file mode 100644 index d69b4278ef..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Mixer.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_HTGR.HTGRMaterials.MATERIALS_PER_FUEL; -import static com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_HTGR.HTGRMaterials.sHTGR_Fuel; -import static gregtech.api.enums.Mods.Gendustry; -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.FluidLoader; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_HTGR; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_THTR; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class Mixer implements Runnable { - - @Override - public void run() { - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 10), - Materials.Uranium235.getDust(1), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(new ItemStack(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - - int i = 0; - for (GT_TileEntity_HTGR.HTGRMaterials.Fuel_ fuel : sHTGR_Fuel) { - GT_Values.RA.stdBuilder() - .itemInputs(fuel.mainItem, fuel.secondaryItem, GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 1, i)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - - i += MATERIALS_PER_FUEL; - } - - if (Gendustry.isModLoaded()) { - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(17), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Radon, 1L)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(FluidRegistry.getFluidStack("liquiddna", 1000)) - .fluidOutputs(new FluidStack(FluidLoader.BioLabFluidMaterials[0], 2000)) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(mixerRecipes); - } - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Pulverizer.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Pulverizer.java deleted file mode 100644 index 4dbcc45708..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/Pulverizer.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; - -public class Pulverizer implements Runnable { - - @Override - public void run() { - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 1)) - .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.Titanium.getDust(8)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 2)) - .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.TungstenSteel.getDust(8)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 3)) - .itemOutputs( - Materials.BorosilicateGlass.getDust(9), - WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.dust, 8)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 4)) - .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.Iridium.getDust(8)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 5)) - .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.Osmium.getDust(8)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 13)) - .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.Neutronium.getDust(8)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 14)) - .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.CosmicNeutronium.getDust(8)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 15)) - .itemOutputs(Materials.BorosilicateGlass.getDust(9), Materials.Infinity.getDust(8)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[1], 1, 0)) - .itemOutputs(Materials.BorosilicateGlass.getDust(9), MaterialsUEVplus.TranscendentMetal.getDust(8)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(maceratorRecipes); - - for (int i = 6; i < 11; i++) { - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, i)) - .itemOutputs(Materials.BorosilicateGlass.getDust(9)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(maceratorRecipes); - - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/PyrolyseOven.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/PyrolyseOven.java deleted file mode 100644 index 4e27052f4e..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/loaders/recipes/PyrolyseOven.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.loaders.recipes; - -import static gregtech.api.recipe.RecipeMaps.pyrolyseRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.FluidLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_Utility; - -public class PyrolyseOven implements Runnable { - - @Override - public void run() { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(10), Materials.Wood.getDust(10)) - .fluidInputs(new FluidStack(FluidLoader.Kerogen, 1000)) - .fluidOutputs(Materials.Oil.getFluid(1000)) - .duration(5 * SECONDS + 5 * TICKS) - .eut(TierEU.RECIPE_HV) - .addTo(pyrolyseRecipes); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/BW_Network.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/net/BW_Network.java deleted file mode 100644 index 01085e2b31..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/BW_Network.java +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.net; - -import java.util.EnumMap; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; - -import com.google.common.io.ByteArrayDataInput; -import com.google.common.io.ByteStreams; - -import cpw.mods.fml.common.network.FMLEmbeddedChannel; -import cpw.mods.fml.common.network.FMLOutboundHandler; -import cpw.mods.fml.common.network.NetworkRegistry; -import cpw.mods.fml.common.network.internal.FMLProxyPacket; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.server.FMLServerHandler; -import gregtech.api.enums.GT_Values; -import gregtech.api.net.GT_Packet; -import gregtech.api.net.GT_Packet_New; -import gregtech.api.net.IGT_NetworkHandler; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; -import io.netty.handler.codec.MessageToMessageCodec; - -/* - * Original GT File slightly Modified - */ -@SuppressWarnings("deprecation") -@ChannelHandler.Sharable -public class BW_Network extends MessageToMessageCodec implements IGT_NetworkHandler { - - private final EnumMap mChannel; - private final GT_Packet_New[] mSubChannels; - - public BW_Network() { - this.mChannel = NetworkRegistry.INSTANCE.newChannel("BartWorks", this, new BW_Network.HandlerShared()); - this.mSubChannels = new GT_Packet_New[] { new RendererPacket(), new CircuitProgrammerPacket(), - new MetaBlockPacket(), new OreDictCachePacket(), new ServerJoinedPackage(), new EICPacket() }; - } - - @Override - protected void encode(ChannelHandlerContext aContext, GT_Packet_New aPacket, List aOutput) - throws Exception { - aOutput.add( - new FMLProxyPacket( - Unpooled.buffer() - .writeByte(aPacket.getPacketID()) - .writeBytes(aPacket.encode()) - .copy(), - aContext.channel() - .attr(NetworkRegistry.FML_CHANNEL) - .get())); - } - - @Override - protected void decode(ChannelHandlerContext aContext, FMLProxyPacket aPacket, List aOutput) - throws Exception { - ByteArrayDataInput aData = ByteStreams.newDataInput( - aPacket.payload() - .array()); - aOutput.add(this.mSubChannels[aData.readByte()].decode(aData)); - } - - @Override - public void sendToPlayer(@Nonnull GT_Packet aPacket, @Nonnull EntityPlayerMP aPlayer) { - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGET) - .set(FMLOutboundHandler.OutboundTarget.PLAYER); - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) - .set(aPlayer); - this.mChannel.get(Side.SERVER) - .writeAndFlush(aPacket); - } - - public void sendToAllPlayersinWorld(@Nonnull GT_Packet aPacket, World world) { - for (String name : FMLServerHandler.instance() - .getServer() - .getAllUsernames()) { - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGET) - .set(FMLOutboundHandler.OutboundTarget.PLAYER); - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) - .set(world.getPlayerEntityByName(name)); - this.mChannel.get(Side.SERVER) - .writeAndFlush(aPacket); - } - } - - @Override - public void sendToAllAround(@Nonnull GT_Packet aPacket, NetworkRegistry.TargetPoint aPosition) { - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGET) - .set(FMLOutboundHandler.OutboundTarget.ALLAROUNDPOINT); - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) - .set(aPosition); - this.mChannel.get(Side.SERVER) - .writeAndFlush(aPacket); - } - - @Override - public void sendToAll(@Nonnull GT_Packet aPacket) { - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGET) - .set(FMLOutboundHandler.OutboundTarget.ALL); - this.mChannel.get(Side.SERVER) - .writeAndFlush(aPacket); - } - - @Override - public void sendToServer(@Nonnull GT_Packet aPacket) { - this.mChannel.get(Side.CLIENT) - .attr(FMLOutboundHandler.FML_MESSAGETARGET) - .set(FMLOutboundHandler.OutboundTarget.TOSERVER); - this.mChannel.get(Side.CLIENT) - .writeAndFlush(aPacket); - } - - @Override - public void sendPacketToAllPlayersInRange(World aWorld, @Nonnull GT_Packet aPacket, int aX, int aZ) { - if (!aWorld.isRemote) { - - for (Object tObject : aWorld.playerEntities) { - if (!(tObject instanceof EntityPlayerMP tPlayer)) { - break; - } - - Chunk tChunk = aWorld.getChunkFromBlockCoords(aX, aZ); - if (tPlayer.getServerForPlayer() - .getPlayerManager() - .isPlayerWatchingChunk(tPlayer, tChunk.xPosition, tChunk.zPosition)) { - this.sendToPlayer(aPacket, tPlayer); - } - } - } - } - - @Sharable - static final class HandlerShared extends SimpleChannelInboundHandler { - - HandlerShared() {} - - @Override - protected void channelRead0(ChannelHandlerContext ctx, GT_Packet_New aPacket) throws Exception { - EntityPlayer aPlayer = GT_Values.GT.getThePlayer(); - aPacket.process(aPlayer == null ? null : GT_Values.GT.getThePlayer().worldObj); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/CircuitProgrammerPacket.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/net/CircuitProgrammerPacket.java deleted file mode 100644 index c47b834157..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/CircuitProgrammerPacket.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.net; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; - -import com.github.bartimaeusnek.bartworks.common.items.Circuit_Programmer; -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.net.GT_Packet_New; -import io.netty.buffer.ByteBuf; - -public class CircuitProgrammerPacket extends GT_Packet_New { - - private int dimID, playerID; - private byte chipCfg; - private boolean hasChip; - - public CircuitProgrammerPacket() { - super(true); - } - - public CircuitProgrammerPacket(int dimID, int playerID, boolean hasChip, byte chipCfg) { - super(false); - this.dimID = dimID; - this.playerID = playerID; - this.hasChip = hasChip; - this.chipCfg = chipCfg; - } - - @Override - public byte getPacketID() { - return 1; - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeInt(this.dimID) - .writeInt(this.playerID) - .writeByte(this.hasChip ? this.chipCfg : -1); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput byteArrayDataInput) { - return new CircuitProgrammerPacket( - byteArrayDataInput.readInt(), - byteArrayDataInput.readInt(), - byteArrayDataInput.readByte() > -1, - byteArrayDataInput.readByte()); - } - - @Override - public void process(IBlockAccess iBlockAccess) { - World w = DimensionManager.getWorld(this.dimID); - if (w != null && w.getEntityByID(this.playerID) instanceof EntityPlayer) { - ItemStack stack = ((EntityPlayer) w.getEntityByID(this.playerID)).getHeldItem(); - if (stack != null && stack.stackSize > 0) { - Item item = stack.getItem(); - if (item instanceof Circuit_Programmer) { - NBTTagCompound nbt = stack.getTagCompound(); - nbt.setBoolean("HasChip", this.hasChip); - if (this.hasChip) nbt.setByte("ChipConfig", this.chipCfg); - stack.setTagCompound(nbt); - ((EntityPlayer) w.getEntityByID(this.playerID)).inventory.setInventorySlotContents( - ((EntityPlayer) w.getEntityByID(this.playerID)).inventory.currentItem, - stack); - } - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/EICPacket.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/net/EICPacket.java deleted file mode 100644 index 621cc3fe4f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/EICPacket.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.net; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_ElectricImplosionCompressor; -import com.github.bartimaeusnek.bartworks.util.Coords; -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.net.GT_Packet_New; -import io.netty.buffer.ByteBuf; - -public class EICPacket extends GT_Packet_New { - - private Coords coords; - private boolean bool; - - public EICPacket() { - super(true); - } - - public EICPacket(Coords coords, boolean bool) { - super(false); - this.coords = coords; - this.bool = bool; - } - - @Override - public byte getPacketID() { - return 5; - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeInt(this.coords.x); - aOut.writeInt(this.coords.y); - aOut.writeInt(this.coords.z); - aOut.writeBoolean(this.bool); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new EICPacket(new Coords(aData.readInt(), aData.readInt(), aData.readInt()), aData.readBoolean()); - } - - @Override - public void process(IBlockAccess aWorld) { - if (SideReference.Side.Client) { - TileEntity te = aWorld.getTileEntity(this.coords.x, this.coords.y, this.coords.z); - if (!(te instanceof IGregTechTileEntity)) return; - IMetaTileEntity mte = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (!(mte instanceof GT_TileEntity_ElectricImplosionCompressor)) return; - if (this.bool && !((IGregTechTileEntity) te).hasMufflerUpgrade()) - ((IGregTechTileEntity) te).addMufflerUpgrade(); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/MetaBlockPacket.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/net/MetaBlockPacket.java deleted file mode 100644 index 6b555014ed..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/MetaBlockPacket.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.net; - -import java.nio.ByteBuffer; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_Block_TE; -import com.github.bartimaeusnek.bartworks.util.MurmurHash3; -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.net.GT_Packet_New; -import io.netty.buffer.ByteBuf; - -public class MetaBlockPacket extends GT_Packet_New { - - int x; - short y; - int z; - short meta; - - public MetaBlockPacket(int x, int y, int z, int meta) { - super(false); - this.x = x; - this.y = (short) y; - this.z = z; - this.meta = (short) meta; - } - - public MetaBlockPacket() { - super(true); - } - - @Override - public byte getPacketID() { - return 2; - } - - @Override - public void encode(ByteBuf aOut) { - int hash = MurmurHash3.murmurhash3_x86_32( - ByteBuffer.allocate(12) - .putInt(this.x) - .putInt(this.z) - .putShort(this.y) - .putShort(this.meta) - .array(), - 0, - 12, - 31); - aOut.writeInt(this.x) - .writeInt(this.z) - .writeShort(this.y) - .writeShort(this.meta) - .writeInt(hash); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput byteArrayDataInput) { - this.x = byteArrayDataInput.readInt(); - this.z = byteArrayDataInput.readInt(); - this.y = byteArrayDataInput.readShort(); - this.meta = byteArrayDataInput.readShort(); - MetaBlockPacket todecode = new MetaBlockPacket(this.x, this.y, this.z, this.meta); - if (byteArrayDataInput.readInt() != MurmurHash3.murmurhash3_x86_32( - ByteBuffer.allocate(12) - .putInt(this.x) - .putInt(this.z) - .putShort(this.y) - .putShort(this.meta) - .array(), - 0, - 12, - 31)) { - MainMod.LOGGER.error("PACKET HASH DOES NOT MATCH!"); - return null; - } - return todecode; - } - - @Override - public void process(IBlockAccess iBlockAccess) { - if (iBlockAccess != null) { - TileEntity tTileEntity = iBlockAccess.getTileEntity(this.x, this.y, this.z); - if (tTileEntity instanceof BW_MetaGenerated_Block_TE) { - ((BW_MetaGenerated_Block_TE) tTileEntity).mMetaData = this.meta; - } - if (iBlockAccess instanceof World && ((World) iBlockAccess).isRemote) { - ((World) iBlockAccess).markBlockForUpdate(this.x, this.y, this.z); - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/OreDictCachePacket.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/net/OreDictCachePacket.java deleted file mode 100644 index c488273d73..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/OreDictCachePacket.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.net; - -import java.util.HashSet; - -import net.minecraft.world.IBlockAccess; - -import com.github.bartimaeusnek.bartworks.system.oredict.OreDictHandler; -import com.github.bartimaeusnek.bartworks.util.Pair; -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.net.GT_Packet_New; -import io.netty.buffer.ByteBuf; - -public class OreDictCachePacket extends GT_Packet_New { - - private HashSet> hashSet = new HashSet<>(); - - public OreDictCachePacket() { - super(true); - } - - public OreDictCachePacket(HashSet> set) { - super(false); - this.hashSet = set; - } - - @Override - public byte getPacketID() { - return 3; - } - - @Override - public void encode(ByteBuf aOut) { - int size = this.hashSet.size(); - aOut.writeInt(size); - for (Pair p : this.hashSet) { - aOut.writeInt(p.getKey()) - .writeShort(p.getValue()); - } - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput byteArrayDataInput) { - int size = byteArrayDataInput.readInt(); - for (int i = 0; i < size; i++) { - this.hashSet.add(new Pair<>(byteArrayDataInput.readInt(), byteArrayDataInput.readShort())); - } - return new OreDictCachePacket(this.hashSet); - } - - @Override - public void process(IBlockAccess iBlockAccess) { - OreDictHandler.getNonBWCache() - .clear(); - OreDictHandler.getNonBWCache() - .addAll(this.hashSet); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/RendererPacket.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/net/RendererPacket.java deleted file mode 100644 index 436413fa14..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/RendererPacket.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.net; - -import net.minecraft.world.IBlockAccess; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.common.tileentities.multis.GT_TileEntity_BioVat; -import com.github.bartimaeusnek.bartworks.util.BW_ColorUtil; -import com.github.bartimaeusnek.bartworks.util.Coords; -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.net.GT_Packet_New; -import io.netty.buffer.ByteBuf; - -public class RendererPacket extends GT_Packet_New { - - private Coords coords; - private int integer; - private byte removal; - - public RendererPacket() { - super(true); - } - - public RendererPacket(Coords coords, int integer, boolean removal) { - super(false); - this.coords = coords; - this.integer = integer; - this.removal = (byte) (removal ? 1 : 0); - } - - @Override - public byte getPacketID() { - return 0; - } - - @Override - public void encode(ByteBuf aOut) { - byte r = (byte) (this.integer >> 16 & 0xFF); - byte g = (byte) (this.integer >> 8 & 0xFF); - byte b = (byte) (this.integer & 0xFF); - byte checksum = (byte) (this.coords.x % 25 + this.coords.y % 25 - + this.coords.z % 25 - + this.coords.wID % 25 - + this.integer % 25 - + this.removal); - aOut.writeInt(this.coords.x) - .writeShort(this.coords.y) - .writeInt(this.coords.z) - .writeInt(this.coords.wID) - .writeByte(r) - .writeByte(g) - .writeByte(b) - .writeByte(this.removal) - .writeByte(checksum); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput dataInput) { - this.coords = new Coords(dataInput.readInt(), dataInput.readShort(), dataInput.readInt(), dataInput.readInt()); - this.integer = BW_ColorUtil - .getColorFromRGBArray(new int[] { dataInput.readByte(), dataInput.readByte(), dataInput.readByte() }); - this.removal = dataInput.readByte(); - - byte checksum = (byte) (this.coords.x % 25 + this.coords.y % 25 - + this.coords.z % 25 - + this.coords.wID % 25 - + this.integer % 25 - + this.removal); - - if (checksum != dataInput.readByte()) { - MainMod.LOGGER.error("BW Packet was corrupted or modified!"); - return null; - } - - return new RendererPacket(this.coords, this.integer, this.removal == 1); - } - - @Override - public void process(IBlockAccess iBlockAccess) { - if (SideReference.Side.Client) { - if (this.removal == 0) GT_TileEntity_BioVat.staticColorMap.put(this.coords, this.integer); - else GT_TileEntity_BioVat.staticColorMap.remove(this.coords); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/ServerJoinedPackage.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/net/ServerJoinedPackage.java deleted file mode 100644 index 091802683d..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/net/ServerJoinedPackage.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.net; - -import net.minecraft.world.IBlockAccess; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.net.GT_Packet_New; -import io.netty.buffer.ByteBuf; - -public class ServerJoinedPackage extends GT_Packet_New { - - private byte config; - - ServerJoinedPackage() { - super(true); - } - - public ServerJoinedPackage(Object obj) { - super(false); - this.config = (byte) (ConfigHandler.classicMode && ConfigHandler.disableExtraGassesForEBF ? 3 - : ConfigHandler.classicMode ? 2 : ConfigHandler.disableExtraGassesForEBF ? 1 : 0); - } - - @Override - public byte getPacketID() { - return 4; - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeByte(this.config); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput byteArrayDataInput) { - this.config = byteArrayDataInput.readByte(); - return this; - } - - @Override - public void process(IBlockAccess iBlockAccess) { - boolean gas = (this.config & 1) != 0; - boolean classic = (this.config & 0b10) != 0; - MainMod.runOnPlayerJoined(classic, gas); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BWTileEntityDimIDBridge.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BWTileEntityDimIDBridge.java deleted file mode 100644 index bb0c0cf319..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BWTileEntityDimIDBridge.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.classic; - -import net.minecraft.tileentity.TileEntity; - -public class BWTileEntityDimIDBridge extends TileEntity { - - @Override - public boolean canUpdate() { - return false; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BW_RotorBlock.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BW_RotorBlock.java deleted file mode 100644 index 5db8989d0c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BW_RotorBlock.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.classic; - -import net.minecraft.client.gui.GuiScreen; -import net.minecraft.entity.player.EntityPlayer; - -import com.github.bartimaeusnek.bartworks.client.gui.BW_GUIContainer_RotorBlock; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.core.block.kineticgenerator.container.ContainerWindKineticGenerator; -import ic2.core.block.kineticgenerator.tileentity.TileEntityWindKineticGenerator; - -public class BW_RotorBlock extends TileEntityWindKineticGenerator { - - public int getGrindPower() { - return super.getKuOutput(); - } - - @Override - public int getKuOutput() { - return 0; - } - - @Override - @SideOnly(Side.CLIENT) - public GuiScreen getGui(EntityPlayer entityPlayer, boolean isAdmin) { - return new BW_GUIContainer_RotorBlock(new ContainerWindKineticGenerator(entityPlayer, this)); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BW_TileEntity_HeatedWaterPump.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BW_TileEntity_HeatedWaterPump.java deleted file mode 100644 index 5cbbc7988c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/classic/BW_TileEntity_HeatedWaterPump.java +++ /dev/null @@ -1,375 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.classic; - -import java.util.Arrays; -import java.util.Optional; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityFurnace; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidEvent; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; -import net.minecraftforge.fluids.IFluidTank; - -import com.github.bartimaeusnek.bartworks.API.ITileAddsInformation; -import com.github.bartimaeusnek.bartworks.API.ITileDropsContent; -import com.github.bartimaeusnek.bartworks.API.ITileHasDifferentTextureSides; -import com.github.bartimaeusnek.bartworks.API.modularUI.BW_UITextures; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; -import com.gtnewhorizons.modularui.api.forge.InvWrapper; -import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.util.GT_Utility; -import gregtech.common.GT_Pollution; - -public class BW_TileEntity_HeatedWaterPump extends TileEntity implements ITileDropsContent, IFluidHandler, IFluidTank, - ITileWithModularUI, ITileAddsInformation, ITileHasDifferentTextureSides { - - public static final int FUELSLOT = 0; - public static final Fluid WATER = FluidRegistry.WATER; - public ItemStack fuelstack; - public FluidStack outputstack = new FluidStack(FluidRegistry.WATER, 0); - public int fuel; - public byte tick; - public int maxfuel; - public ItemStack fakestack = new ItemStack(Blocks.water); - - @Override - public void writeToNBT(NBTTagCompound compound) { - NBTTagCompound subItemStack = new NBTTagCompound(); - if (this.fuelstack != null) { - this.fuelstack.writeToNBT(subItemStack); - } - compound.setTag("ItemStack", subItemStack); - NBTTagCompound subFluidStack = new NBTTagCompound(); - this.outputstack.writeToNBT(subFluidStack); - compound.setTag("FluidStack", subFluidStack); - compound.setInteger("fuel", this.fuel); - compound.setInteger("maxfuel", this.maxfuel); - compound.setByte("tick", this.tick); - super.writeToNBT(compound); - } - - @Override - public void readFromNBT(NBTTagCompound compound) { - this.tick = compound.getByte("tick"); - this.fuel = compound.getInteger("fuel"); - this.maxfuel = compound.getInteger("maxfuel"); - this.outputstack = FluidStack.loadFluidStackFromNBT(compound.getCompoundTag("FluidStack")); - if (!compound.getCompoundTag("ItemStack") - .equals(new NBTTagCompound())) - this.fuelstack = ItemStack.loadItemStackFromNBT(compound.getCompoundTag("ItemStack")); - super.readFromNBT(compound); - } - - private boolean checkPreUpdate() { - return (this.fuelstack == null || this.fuelstack.stackSize <= 0) && this.fuel <= 0; - } - - private void fixUnderlflow() { - if (this.fuel < 0) this.fuel = 0; - } - - private void handleRefuel() { - if (this.fuelstack != null && this.fuel == 0) { - this.fuel = this.maxfuel = TileEntityFurnace.getItemBurnTime(this.fuelstack); - --this.fuelstack.stackSize; - if (this.fuelstack.stackSize <= 0) this.fuelstack = fuelstack.getItem() - .getContainerItem(fuelstack); - } - } - - private void handleWaterGeneration() { - if (this.fuel > 0) { - ++this.tick; - --this.fuel; - if (this.tick % 20 == 0) { - if (this.outputstack.amount <= 8000 - ConfigHandler.mbWaterperSec) - this.outputstack.amount += ConfigHandler.mbWaterperSec; - this.tick = 0; - } - } - } - - @Override - public void updateEntity() { - if (this.worldObj.isRemote) return; - - this.pushWaterToAdjacentTiles(); - this.fakestack.setStackDisplayName(this.outputstack.amount + "L Water"); - if (this.checkPreUpdate()) return; - - this.fixUnderlflow(); - this.handleRefuel(); - this.handleWaterGeneration(); - this.causePollution(); - } - - private void pushWaterToAdjacentTiles() { - Arrays.stream(ForgeDirection.values(), 0, 6) // All but Unknown - .forEach( - direction -> Optional - .ofNullable( - this.worldObj.getTileEntity( - this.xCoord + direction.offsetX, - this.yCoord + direction.offsetY, - this.zCoord + direction.offsetZ)) - .ifPresent(te -> { - if (te instanceof IFluidHandler tank) { - if (tank.canFill(direction.getOpposite(), this.outputstack.getFluid())) { - int drainage = tank.fill(direction.getOpposite(), this.outputstack, false); - if (drainage > 0) { - tank.fill(direction.getOpposite(), this.outputstack, true); - this.drain(drainage, true); - } - } - } else if (te instanceof IFluidTank tank) { - int drainage = tank.fill(this.outputstack, false); - if (drainage > 0) { - tank.fill(this.outputstack, true); - this.drain(drainage, true); - } - } - })); - } - - private void causePollution() { - Optional.ofNullable(this.worldObj) - .ifPresent(e -> { - if (e.getTotalWorldTime() % 20 == 0) { - Optional.ofNullable(e.getChunkFromBlockCoords(this.xCoord, this.zCoord)) - .ifPresent(c -> GT_Pollution.addPollution(c, ConfigHandler.pollutionHeatedWaterPumpSecond)); - } - }); - } - - @Override - public int[] getAccessibleSlotsFromSide(int side) { - return new int[] { 0 }; - } - - @Override - public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_) { - return TileEntityFurnace.getItemBurnTime(p_102007_2_) > 0; - } - - @Override - public boolean canExtractItem(int p_102008_1_, ItemStack p_102008_2_, int p_102008_3_) { - return false; - } - - @Override - public int getSizeInventory() { - return 2; - } - - @Override - public ItemStack getStackInSlot(int slotIn) { - if (slotIn == 0) return this.fuelstack; - return this.fakestack; - } - - @Override - public ItemStack decrStackSize(int slot, int ammount) { - if (slot != BW_TileEntity_HeatedWaterPump.FUELSLOT || this.fuelstack == null - || ammount > this.fuelstack.stackSize) return null; - - return this.fuelstack.splitStack(ammount); - } - - @Override - public ItemStack getStackInSlotOnClosing(int index) { - return null; - } - - @Override - public void setInventorySlotContents(int slot, ItemStack stack) { - if (slot == BW_TileEntity_HeatedWaterPump.FUELSLOT) this.fuelstack = stack; - else this.fakestack = stack; - } - - @Override - public String getInventoryName() { - return null; - } - - @Override - public boolean hasCustomInventoryName() { - return false; - } - - @Override - public int getInventoryStackLimit() { - return 64; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer player) { - return true; - } - - @Override - public void openInventory() {} - - @Override - public void closeInventory() {} - - @Override - public boolean isItemValidForSlot(int index, ItemStack stack) { - return TileEntityFurnace.getItemBurnTime(stack) > 0 && index == BW_TileEntity_HeatedWaterPump.FUELSLOT; - } - - @Override - public FluidStack getFluid() { - return this.outputstack.amount > 0 ? this.outputstack : null; - } - - @Override - public int getFluidAmount() { - return this.outputstack.amount; - } - - @Override - public int getCapacity() { - return 8000; - } - - @Override - public FluidTankInfo getInfo() { - return new FluidTankInfo(this); - } - - @Override - public int fill(FluidStack resource, boolean doFill) { - return 0; - } - - @Override - public FluidStack drain(int maxDrain, boolean doDrain) { - int actualdrain = maxDrain; - if (actualdrain > this.outputstack.amount) actualdrain = this.outputstack.amount; - FluidStack ret = new FluidStack(BW_TileEntity_HeatedWaterPump.WATER, actualdrain); - if (ret.amount == 0) ret = null; - if (doDrain) { - this.outputstack.amount -= actualdrain; - FluidEvent.fireEvent( - new FluidEvent.FluidDrainingEvent( - this.outputstack, - this.getWorldObj(), - this.xCoord, - this.yCoord, - this.zCoord, - this, - actualdrain)); - } - return ret; - } - - @Override - public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { - return 0; - } - - @Override - public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { - if (resource != null && resource.getFluid() == BW_TileEntity_HeatedWaterPump.WATER - && this.drain(resource.amount, false) != null) return this.drain(resource.amount, doDrain); - return null; - } - - @Override - public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { - return this.drain(maxDrain, doDrain); - } - - @Override - public boolean canFill(ForgeDirection from, Fluid fluid) { - return false; - } - - @Override - public boolean canDrain(ForgeDirection from, Fluid fluid) { - return fluid == null || fluid == BW_TileEntity_HeatedWaterPump.WATER; - } - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection from) { - return new FluidTankInfo[] { this.getInfo() }; - } - - @Override - public String[] getInfoData() { - return new String[] { - StatCollector.translateToLocal("tooltip.tile.waterpump.0.name") + " " - + GT_Utility.formatNumbers(ConfigHandler.mbWaterperSec) - + String.format( - StatCollector.translateToLocal("tooltip.tile.waterpump.1.name"), - ConfigHandler.pollutionHeatedWaterPumpSecond), - StatCollector.translateToLocal("tooltip.tile.waterpump.2.name") }; - } - - @Override - public void registerBlockIcons(IIconRegister par1IconRegister) { - ITileHasDifferentTextureSides.texture[ForgeDirection.UP.ordinal()] = par1IconRegister - .registerIcon(MainMod.MOD_ID + ":heatedWaterPumpTop"); - ITileHasDifferentTextureSides.texture[ForgeDirection.DOWN.ordinal()] = par1IconRegister - .registerIcon(MainMod.MOD_ID + ":heatedWaterPumpDown"); - for (int i = 2; i < 7; i++) { - ITileHasDifferentTextureSides.texture[i] = par1IconRegister - .registerIcon(MainMod.MOD_ID + ":heatedWaterPumpSide"); - } - } - - @Override - public ModularWindow createWindow(UIBuildContext buildContext) { - ModularWindow.Builder builder = ModularWindow.builder(176, 166); - builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); - builder.bindPlayerInventory(buildContext.getPlayer()); - final IItemHandlerModifiable invWrapper = new InvWrapper(this); - - builder.widget( - new SlotWidget(invWrapper, 0).setFilter(stack -> TileEntityFurnace.getItemBurnTime(stack) > 0) - .setPos(55, 52)) - .widget( - SlotWidget.phantom(invWrapper, 1) - .disableInteraction() - .setPos(85, 32)) - .widget( - new ProgressBar().setProgress(() -> (float) this.fuel / this.maxfuel) - .setTexture(BW_UITextures.PROGRESSBAR_FUEL, 14) - .setDirection(ProgressBar.Direction.UP) - .setPos(56, 36) - .setSize(14, 14)); - - return builder.build(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/debug/CreativeScanner.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/debug/CreativeScanner.java deleted file mode 100644 index b6f58ebd0f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/debug/CreativeScanner.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.debug; - -import net.minecraft.util.StatCollector; - -import org.apache.commons.lang3.ArrayUtils; - -import com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference; - -import gregtech.api.enums.MachineType; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Scanner; - -public class CreativeScanner extends GT_MetaTileEntity_Scanner { - - public CreativeScanner(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public CreativeScanner(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new CreativeScanner(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll( - MachineType.SCANNER.tooltipDescription(), - StatCollector.translateToLocal("gt.blockmachines.creativeScanner.desc.1"), - BW_Tooltip_Reference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get()); - } - - @Override - public long maxEUStore() { - return 0; - } - - @Override - protected boolean hasEnoughEnergyToCheckRecipe() { - return true; - } - - @Override - protected boolean drainEnergyForProcess(long aEUt) { - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - this.mProgresstime = this.mMaxProgresstime; - super.onPostTick(aBaseMetaTileEntity, aTick); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_BioVat.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_BioVat.java deleted file mode 100644 index a7d8ea9db8..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_BioVat.java +++ /dev/null @@ -1,836 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis; - -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTWORKS; -import static com.github.bartimaeusnek.bartworks.util.BW_Util.ofGlassTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; - -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.common.items.LabParts; -import com.github.bartimaeusnek.bartworks.common.loaders.FluidLoader; -import com.github.bartimaeusnek.bartworks.common.net.RendererPacket; -import com.github.bartimaeusnek.bartworks.common.tileentities.tiered.GT_MetaTileEntity_RadioHatch; -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.github.bartimaeusnek.bartworks.util.BioCulture; -import com.github.bartimaeusnek.bartworks.util.Coords; -import com.github.bartimaeusnek.bartworks.util.MathUtils; -import com.github.bartimaeusnek.bartworks.util.ResultWrongSievert; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_TileEntity_BioVat extends GT_MetaTileEntity_EnhancedMultiBlockBase { - - public static final HashMap staticColorMap = new HashMap<>(); - - private static final byte TIMERDIVIDER = 20; - - private final HashSet playerMPHashSet = new HashSet<>(); - private final ArrayList mRadHatches = new ArrayList<>(); - private int height = 1; - private Fluid mFluid = FluidRegistry.LAVA; - private BioCulture mCulture; - private ItemStack mStack; - private boolean needsVisualUpdate = true; - private byte mGlassTier; - private int mSievert; - private int mNeededSievert; - private int mCasing = 0; - private int mExpectedMultiplier = 0; - private int mTimes = 0; - private boolean isVisibleFluid = false; - - public GT_TileEntity_BioVat(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_TileEntity_BioVat(String aName) { - super(aName); - } - - private static final int CASING_INDEX = 49; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { "ccccc", "ccccc", "ccccc", "ccccc", "ccccc" }, - { "ggggg", "gaaag", "gaaag", "gaaag", "ggggg" }, { "ggggg", "gaaag", "gaaag", "gaaag", "ggggg" }, - { "cc~cc", "ccccc", "ccccc", "ccccc", "ccccc" }, })) - .addElement( - 'c', - ofChain( - ofHatchAdder(GT_TileEntity_BioVat::addMaintenanceToMachineList, CASING_INDEX, 1), - ofHatchAdder(GT_TileEntity_BioVat::addOutputToMachineList, CASING_INDEX, 1), - ofHatchAdder(GT_TileEntity_BioVat::addInputToMachineList, CASING_INDEX, 1), - ofHatchAdder(GT_TileEntity_BioVat::addRadiationInputToMachineList, CASING_INDEX, 1), - ofHatchAdder(GT_TileEntity_BioVat::addEnergyInputToMachineList, CASING_INDEX, 1), - onElementPass(e -> e.mCasing++, ofBlock(GregTech_API.sBlockCasings4, 1)))) - .addElement('a', ofChain(isAir(), ofBlockAnyMeta(FluidLoader.bioFluidBlock))) - .addElement( - 'g', - ofGlassTiered((byte) 1, (byte) 127, (byte) 0, (te, v) -> te.mGlassTier = v, te -> te.mGlassTier, 1)) - .build(); - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Bacterial Vat") - .addInfo("Controller block for the Bacterial Vat") - .addInfo("For maximum efficiency boost keep the Output Hatch always half filled!") - .addSeparator() - .beginStructureBlock(5, 4, 5, false) - .addController("Front bottom center") - .addCasingInfoMin("Clean Stainless Steel Casings", 19, false) - .addOtherStructurePart("Glass", "Hollow two middle layers", 2) - .addStructureInfo("The glass can be any glass, i.e. Tinkers Construct Clear Glass") - .addStructureInfo("Some Recipes need more advanced Glass Types") - .addMaintenanceHatch("Any casing", 1) - .addOtherStructurePart("Radio Hatch", "Any casing", 1) - .addInputBus("Any casing", 1) - .addOutputBus("Any casing", 1) - .addInputHatch("Any casing", 1) - .addOutputHatch("Any casing", 1) - .addEnergyHatch("Any casing", 1) - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); - return tt; - } - - public static int[] specialValueUnpack(int aSpecialValue) { - int[] ret = new int[4]; - ret[0] = aSpecialValue & 0xF; // = glass tier - ret[1] = aSpecialValue >>> 4 & 0b11; // = special value - ret[2] = aSpecialValue >>> 6 & 0b1; // boolean exact svt | 1 = true | 0 = false - ret[3] = aSpecialValue >>> 7 & Integer.MAX_VALUE; // = sievert - return ret; - } - - private int getInputCapacity() { - return this.mInputHatches.stream() - .mapToInt(GT_MetaTileEntity_Hatch_Input::getCapacity) - .sum(); - } - - private int getOutputCapacity() { - return this.mOutputHatches.stream() - .mapToInt(GT_MetaTileEntity_Hatch_Output::getCapacity) - .sum(); - } - - @Override - public int getCapacity() { - int ret = 0; - ret += this.getInputCapacity(); - // ret += getOutputCapacity(); - return ret; - } - - @Override - public int fill(FluidStack resource, boolean doFill) { - return super.fill(resource, doFill); - } - - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - @Override - public RecipeMap getRecipeMap() { - return BartWorksRecipeMaps.bacterialVatRecipes; - } - - /** - * Calculates the expected output multiplier based on the output hatch - * - * @param recipeFluidOutput the recipe fluid output - * @param needEqual if the recipeFluidOutput should be equal to the fluid in the output hatch - * @return the expected output multiplier - */ - private int getExpectedMultiplier(@Nullable FluidStack recipeFluidOutput, boolean needEqual) { - FluidStack storedFluidOutputs = this.getStoredFluidOutputs(); - if (storedFluidOutputs == null) return 1; - if (!needEqual || storedFluidOutputs.isFluidEqual(recipeFluidOutput)) { - return this.calcMod(storedFluidOutputs.amount) + 1; - } - return 1; - } - - private int calcMod(double x) { - double y = this.getOutputCapacity() / 2D, z = ConfigHandler.bioVatMaxParallelBonus; - - int ret = MathUtils.ceilInt((-1D / y * Math.pow(x - y, 2D) + y) / y * z); - return MathUtils.clamp(1, ret, ConfigHandler.bioVatMaxParallelBonus); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (!BW_Util.areStacksEqualOrNull( - (ItemStack) recipe.mSpecialItems, - GT_TileEntity_BioVat.this.getControllerSlot())) return CheckRecipeResultRegistry.NO_RECIPE; - int[] conditions = GT_TileEntity_BioVat.specialValueUnpack(recipe.mSpecialValue); - GT_TileEntity_BioVat.this.mNeededSievert = conditions[3]; - - if (GT_TileEntity_BioVat.this.mGlassTier < conditions[0]) { - return CheckRecipeResultRegistry.insufficientMachineTier(conditions[0]); - } - - if (conditions[2] == 0) { - if (GT_TileEntity_BioVat.this.mSievert < GT_TileEntity_BioVat.this.mNeededSievert) { - return ResultWrongSievert.insufficientSievert(GT_TileEntity_BioVat.this.mNeededSievert); - } - } else if (GT_TileEntity_BioVat.this.mSievert != conditions[3]) { - return ResultWrongSievert.wrongSievert(conditions[3]); - } - - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - protected GT_ParallelHelper createParallelHelper(@NotNull GT_Recipe recipe) { - return super.createParallelHelper(recipeWithMultiplier(recipe, inputFluids)); - } - }; - } - - protected GT_Recipe recipeWithMultiplier(GT_Recipe recipe, FluidStack[] fluidInputs) { - GT_Recipe tRecipe = recipe.copy(); - int multiplier = getExpectedMultiplier(recipe.getFluidOutput(0), true); - mExpectedMultiplier = multiplier; - // Calculate max multiplier limited by input fluids - long fluidAmount = 0; - for (FluidStack fluid : fluidInputs) { - if (recipe.mFluidInputs[0].isFluidEqual(fluid)) { - fluidAmount += fluid.amount; - } - } - multiplier = (int) Math.min(multiplier, fluidAmount / recipe.mFluidInputs[0].amount); - // In case multiplier is 0 - multiplier = Math.max(multiplier, 1); - mTimes = multiplier; - tRecipe.mFluidInputs[0].amount *= multiplier; - tRecipe.mFluidOutputs[0].amount *= multiplier; - return tRecipe; - } - - @Override - protected void setupProcessingLogic(ProcessingLogic logic) { - super.setupProcessingLogic(logic); - logic.setSpecialSlotItem(this.getControllerSlot()); - } - - public FluidStack getStoredFluidOutputs() { - // Only one output Hatch - assert this.mOutputHatches.size() == 1; - return this.mOutputHatches.get(0) - .getFluid(); - } - - private boolean addRadiationInputToMachineList(IGregTechTileEntity aTileEntity, int CasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null || !(aMetaTileEntity instanceof GT_MetaTileEntity_RadioHatch)) { - return false; - } else { - ((GT_MetaTileEntity_RadioHatch) aMetaTileEntity).updateTexture(CasingIndex); - return this.mRadHatches.add((GT_MetaTileEntity_RadioHatch) aMetaTileEntity); - } - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { - this.mRadHatches.clear(); - this.mGlassTier = 0; - this.mCasing = 0; - - if (!this.checkPiece(STRUCTURE_PIECE_MAIN, 2, 3, 0)) return false; - - return this.mCasing >= 19 && this.mRadHatches.size() <= 1 - && this.mOutputHatches.size() == 1 - && this.mMaintenanceHatches.size() == 1 - && this.mInputHatches.size() > 0 - && this.mEnergyHatches.size() > 0; - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack itemStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - private void sendAllRequiredRendererPackets() { - int height = this.reCalculateHeight(); - if (this.mFluid != null && height > 1 && this.reCalculateFluidAmmount() > 0) { - for (int x = -1; x < 2; x++) for (int y = 1; y < height; y++) - for (int z = -1; z < 2; z++) this.sendPackagesOrRenewRenderer(x, y, z, this.mCulture); - } - } - - private void sendPackagesOrRenewRenderer(int x, int y, int z, BioCulture lCulture) { - int xDir = this.getXDir(); - int zDir = this.getZDir(); - - GT_TileEntity_BioVat.staticColorMap.remove( - new Coords( - xDir + x - + this.getBaseMetaTileEntity() - .getXCoord(), - y + this.getBaseMetaTileEntity() - .getYCoord(), - zDir + z - + this.getBaseMetaTileEntity() - .getZCoord(), - this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId)); - GT_TileEntity_BioVat.staticColorMap.put( - new Coords( - xDir + x - + this.getBaseMetaTileEntity() - .getXCoord(), - y + this.getBaseMetaTileEntity() - .getYCoord(), - zDir + z - + this.getBaseMetaTileEntity() - .getZCoord(), - this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId), - lCulture == null ? BioCulture.NULLCULTURE.getColorRGB() : lCulture.getColorRGB()); - - if (SideReference.Side.Server) { - MainMod.BW_Network_instance.sendPacketToAllPlayersInRange( - this.getBaseMetaTileEntity() - .getWorld(), - new RendererPacket( - new Coords( - xDir + x - + this.getBaseMetaTileEntity() - .getXCoord(), - y + this.getBaseMetaTileEntity() - .getYCoord(), - zDir + z - + this.getBaseMetaTileEntity() - .getZCoord(), - this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId), - lCulture == null ? BioCulture.NULLCULTURE.getColorRGB() : lCulture.getColorRGB(), - true), - this.getBaseMetaTileEntity() - .getXCoord(), - this.getBaseMetaTileEntity() - .getZCoord()); - MainMod.BW_Network_instance.sendPacketToAllPlayersInRange( - this.getBaseMetaTileEntity() - .getWorld(), - new RendererPacket( - new Coords( - xDir + x - + this.getBaseMetaTileEntity() - .getXCoord(), - y + this.getBaseMetaTileEntity() - .getYCoord(), - zDir + z - + this.getBaseMetaTileEntity() - .getZCoord(), - this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId), - lCulture == null ? BioCulture.NULLCULTURE.getColorRGB() : lCulture.getColorRGB(), - false), - this.getBaseMetaTileEntity() - .getXCoord(), - this.getBaseMetaTileEntity() - .getZCoord()); - } - this.needsVisualUpdate = true; - } - - private void check_Chunk() { - World aWorld = this.getBaseMetaTileEntity() - .getWorld(); - if (!aWorld.isRemote) { - - for (Object tObject : aWorld.playerEntities) { - if (!(tObject instanceof EntityPlayerMP tPlayer)) { - break; - } - Chunk tChunk = aWorld.getChunkFromBlockCoords( - this.getBaseMetaTileEntity() - .getXCoord(), - this.getBaseMetaTileEntity() - .getZCoord()); - if (tPlayer.getServerForPlayer() - .getPlayerManager() - .isPlayerWatchingChunk(tPlayer, tChunk.xPosition, tChunk.zPosition)) { - if (!this.playerMPHashSet.contains(tPlayer)) { - this.playerMPHashSet.add(tPlayer); - this.sendAllRequiredRendererPackets(); - } - } else { - this.playerMPHashSet.remove(tPlayer); - } - } - } - } - - private void placeFluid() { - this.isVisibleFluid = true; - int xDir = this.getXDir(); - int zDir = this.getZDir(); - this.height = this.reCalculateHeight(); - if (this.mFluid != null && this.height > 1 && this.reCalculateFluidAmmount() > 0) for (int x = -1; x < 2; x++) { - for (int y = 0; y < this.height; y++) { - for (int z = -1; z < 2; z++) { - if (this.getBaseMetaTileEntity() - .getWorld() - .getBlock( - xDir + x - + this.getBaseMetaTileEntity() - .getXCoord(), - y + this.getBaseMetaTileEntity() - .getYCoord(), - zDir + z - + this.getBaseMetaTileEntity() - .getZCoord()) - .equals(Blocks.air)) - this.getBaseMetaTileEntity() - .getWorld() - .setBlock( - xDir + x - + this.getBaseMetaTileEntity() - .getXCoord(), - y + this.getBaseMetaTileEntity() - .getYCoord(), - zDir + z - + this.getBaseMetaTileEntity() - .getZCoord(), - FluidLoader.bioFluidBlock); - } - } - } - } - - private void removeFluid(int xDir, int zDir) { - this.isVisibleFluid = false; - - for (int x = -1; x < 2; x++) { - for (int y = 1; y < 3; y++) { - for (int z = -1; z < 2; z++) { - if (this.getBaseMetaTileEntity() - .getWorld() - .getBlock( - xDir + x - + this.getBaseMetaTileEntity() - .getXCoord(), - y + this.getBaseMetaTileEntity() - .getYCoord(), - zDir + z - + this.getBaseMetaTileEntity() - .getZCoord()) - .equals(FluidLoader.bioFluidBlock)) - this.getBaseMetaTileEntity() - .getWorld() - .setBlockToAir( - xDir + x - + this.getBaseMetaTileEntity() - .getXCoord(), - y + this.getBaseMetaTileEntity() - .getYCoord(), - zDir + z - + this.getBaseMetaTileEntity() - .getZCoord()); - GT_TileEntity_BioVat.staticColorMap.remove( - new Coords( - xDir + x - + this.getBaseMetaTileEntity() - .getXCoord(), - y + this.getBaseMetaTileEntity() - .getYCoord(), - zDir + z - + this.getBaseMetaTileEntity() - .getZCoord()), - this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId); - } - } - } - } - - private int reCalculateFluidAmmount() { - return this.getStoredFluids() - .stream() - .mapToInt(fluidStack -> fluidStack.amount) - .sum(); - } - - private int reCalculateHeight() { - return this.reCalculateFluidAmmount() > this.getCapacity() / 4 - 1 - ? this.reCalculateFluidAmmount() >= this.getCapacity() / 2 ? 3 : 2 - : 1; - } - - public void doAllVisualThings() { - if (this.getBaseMetaTileEntity() - .isServerSide()) { - if (this.mMachine) { - ItemStack aStack = this.mInventory[1]; - BioCulture lCulture = null; - int xDir = this.getXDir(); - int zDir = this.getZDir(); - - if (this.getBaseMetaTileEntity() - .getTimer() % 200 == 0) { - this.check_Chunk(); - } - - if (this.needsVisualUpdate && this.getBaseMetaTileEntity() - .getTimer() % GT_TileEntity_BioVat.TIMERDIVIDER == 0) { - for (int x = -1; x < 2; x++) - for (int y = 1; y < 3; y++) for (int z = -1; z < 2; z++) this.getBaseMetaTileEntity() - .getWorld() - .setBlockToAir( - xDir + x - + this.getBaseMetaTileEntity() - .getXCoord(), - y + this.getBaseMetaTileEntity() - .getYCoord(), - zDir + z - + this.getBaseMetaTileEntity() - .getZCoord()); - } - - this.height = this.reCalculateHeight(); - if (this.mFluid != null && this.height > 1 && this.reCalculateFluidAmmount() > 0) { - if (!BW_Util.areStacksEqualOrNull(aStack, this.mStack) - || this.needsVisualUpdate && this.getBaseMetaTileEntity() - .getTimer() % GT_TileEntity_BioVat.TIMERDIVIDER == 1) { - for (int x = -1; x < 2; x++) { - for (int y = 1; y < this.height; y++) { - for (int z = -1; z < 2; z++) { - if (aStack == null - || aStack.getItem() instanceof LabParts && aStack.getItemDamage() == 0) { - if (this.mCulture == null || aStack == null - || aStack.getTagCompound() == null - || this.mCulture.getID() != aStack.getTagCompound() - .getInteger("ID")) { - lCulture = aStack == null || aStack.getTagCompound() == null ? null - : BioCulture.getBioCulture( - aStack.getTagCompound() - .getString("Name")); - this.sendPackagesOrRenewRenderer(x, y, z, lCulture); - } - } - } - } - } - this.mStack = aStack; - this.mCulture = lCulture; - } - if (this.needsVisualUpdate && this.getBaseMetaTileEntity() - .getTimer() % GT_TileEntity_BioVat.TIMERDIVIDER == 1) { - if (this.getBaseMetaTileEntity() - .isClientSide()) new Throwable().printStackTrace(); - this.placeFluid(); - this.needsVisualUpdate = false; - } - } - } else { - this.onRemoval(); - } - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (this.height != this.reCalculateHeight()) this.needsVisualUpdate = true; - this.doAllVisualThings(); - if (this.getBaseMetaTileEntity() - .isServerSide() && this.mRadHatches.size() == 1) { - this.mSievert = this.mRadHatches.get(0) - .getSievert(); - if (this.getBaseMetaTileEntity() - .isActive() && this.mNeededSievert > this.mSievert) this.mOutputFluids = null; - } - if (aBaseMetaTileEntity.isServerSide() && this.mMaxProgresstime <= 0) { - this.mTimes = 0; - this.mMaxProgresstime = 0; - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mFluidHeight", this.height); - if (this.mCulture != null && !this.mCulture.getName() - .isEmpty()) aNBT.setString("mCulture", this.mCulture.getName()); - else if ((this.mCulture == null || this.mCulture.getName() - .isEmpty()) && !aNBT.getString("mCulture") - .isEmpty()) { - aNBT.removeTag("mCulture"); - } - if (this.mFluid != null) aNBT.setString("mFluid", this.mFluid.getName()); - aNBT.setInteger("mSievert", this.mSievert); - aNBT.setInteger("mNeededSievert", this.mNeededSievert); - aNBT.setBoolean("isVisibleFluid", this.isVisibleFluid); - super.saveNBTData(aNBT); - } - - @Override - public void onRemoval() { - if (this.isVisibleFluid) { - int xDir = this.getXDir(); - int zDir = this.getZDir(); - this.removeFluid(xDir, zDir); - this.sendRenderPackets(xDir, zDir); - } else if (this.getBaseMetaTileEntity() - .getWorld() - .getWorldTime() % 20 == 7) { - this.sendRenderPackets(); - } - - super.onRemoval(); - } - - private int getXDir() { - return this.getBaseMetaTileEntity() - .getBackFacing().offsetX * 2; - } - - private int getZDir() { - return this.getBaseMetaTileEntity() - .getBackFacing().offsetZ * 2; - } - - private void sendRenderPackets() { - int xDir = this.getXDir(); - int zDir = this.getZDir(); - this.sendRenderPackets(xDir, zDir); - } - - private void sendRenderPackets(int xDir, int zDir) { - if (SideReference.Side.Server) { - for (int x = -1; x < 2; x++) { - for (int y = 1; y < 3; y++) { - for (int z = -1; z < 2; z++) { - MainMod.BW_Network_instance.sendPacketToAllPlayersInRange( - this.getBaseMetaTileEntity() - .getWorld(), - new RendererPacket( - new Coords( - xDir + x - + this.getBaseMetaTileEntity() - .getXCoord(), - y + this.getBaseMetaTileEntity() - .getYCoord(), - zDir + z - + this.getBaseMetaTileEntity() - .getZCoord(), - this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId), - this.mCulture == null ? BioCulture.NULLCULTURE.getColorRGB() - : this.mCulture.getColorRGB(), - true), - this.getBaseMetaTileEntity() - .getXCoord(), - this.getBaseMetaTileEntity() - .getZCoord()); - } - } - } - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.height = aNBT.getInteger("mFluidHeight"); - this.mCulture = BioCulture.getBioCulture(aNBT.getString("mCulture")); - if (!aNBT.getString("mFluid") - .isEmpty()) this.mFluid = FluidRegistry.getFluid(aNBT.getString("mFluid")); - this.mSievert = aNBT.getInteger("mSievert"); - this.mNeededSievert = aNBT.getInteger("mNeededSievert"); - super.loadNBTData(aNBT); - this.isVisibleFluid = aNBT.getBoolean("isVisibleFluid"); - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_TileEntity_BioVat(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - this.buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 2, 3, 0); - } - - @Override - public String[] getInfoData() { - final String[] baseInfoData = super.getInfoData(); - final String[] infoData = new String[baseInfoData.length + 2]; - System.arraycopy(baseInfoData, 0, infoData, 0, baseInfoData.length); - // See https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues/11923 - // here we must check the machine is well-formed as otherwise getExpectedMultiplier might error out! - infoData[infoData.length - 2] = StatCollector.translateToLocal("BW.infoData.BioVat.expectedProduction") + ": " - + EnumChatFormatting.GREEN - + (this.mMachine - ? (this.mMaxProgresstime <= 0 ? this.getExpectedMultiplier(null, false) : this.mExpectedMultiplier) - * 100 - : -1) - + EnumChatFormatting.RESET - + " %"; - infoData[infoData.length - 1] = StatCollector.translateToLocal("BW.infoData.BioVat.production") + ": " - + EnumChatFormatting.GREEN - + (this.mMaxProgresstime <= 0 ? 0 : this.mTimes) * 100 - + EnumChatFormatting.RESET - + " %"; - return infoData; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - batchMode = !batchMode; - if (batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); - } - return true; - } - return false; - } - -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_CircuitAssemblyLine.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_CircuitAssemblyLine.java deleted file mode 100644 index 3a81a89386..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_CircuitAssemblyLine.java +++ /dev/null @@ -1,672 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis; - -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS; -import static com.github.bartimaeusnek.bartworks.util.BW_Util.ofGlassTieredMixed; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.SoundResource.IC2_MACHINES_MAGNETIZER_LOOP; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_GLOW; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static gregtech.api.util.GT_Utility.getColoredTierNameFromTier; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.API.modularUI.BW_UITextures; -import com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps; -import com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration.BW_Meta_Items; -import com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration.CircuitImprintLoader; -import com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_TileEntity_CircuitAssemblyLine extends - GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - private static final int CASING_INDEX = 16; - - private static final String STRUCTURE_PIECE_FIRST = "first"; - private static final String STRUCTURE_PIECE_NEXT = "next"; - private static final String STRUCTURE_PIECE_NEXT_HINT = "next_hint"; - private static final String STRUCTURE_PIECE_LAST = "last"; - - private static final int MINIMUM_CIRCUIT_ASSEMBLER_LENGTH = 5; - protected static final String IMPRINT_KEY = "Type"; - protected static final String LENGTH_KEY = "Length"; - protected static final String RUNNING_MODE_KEY = "RunningMode"; - - private int length; - private int mode; - private String imprintedItemName; - private ItemStack imprintedStack; - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_FIRST, - transpose(new String[][] { { "~", "G", "G" }, { "g", "l", "g" }, { "b", "i", "b" }, })) - .addShape( - STRUCTURE_PIECE_NEXT, - transpose(new String[][] { { "G", "G", "G" }, { "g", "l", "g" }, { "b", "I", "b" }, })) - .addShape( - STRUCTURE_PIECE_NEXT_HINT, - transpose(new String[][] { { "G", "G", "G" }, { "g", "l", "g" }, { "b", "i", "b" }, })) - .addShape( - STRUCTURE_PIECE_LAST, - transpose(new String[][] { { "G", "G", "G" }, { "g", "l", "g" }, { "b", "o", "b" }, })) - .addElement( - 'G', - buildHatchAdder(GT_TileEntity_CircuitAssemblyLine.class).atLeast(Energy) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(GregTech_API.sBlockCasings3, 10)) - .addElement('g', ofGlassTieredMixed((byte) 4, (byte) 127, 5)) - .addElement('l', ofBlock(GregTech_API.sBlockCasings2, 5)) // assembling line casings - .addElement( - 'b', - buildHatchAdder(GT_TileEntity_CircuitAssemblyLine.class).atLeast(InputHatch, Maintenance) - .casingIndex(CASING_INDEX) - .dot(2) - .disallowOnly(ForgeDirection.EAST, ForgeDirection.WEST) - .buildAndChain(GregTech_API.sBlockCasings2, 0)) - .addElement('i', InputBus.newAny(CASING_INDEX, 3, ForgeDirection.DOWN)) - .addElement( - 'I', - buildHatchAdder(GT_TileEntity_CircuitAssemblyLine.class).atLeast(InputHatch, InputBus, OutputBus) - .casingIndex(CASING_INDEX) - .dot(2) - .disallowOnly(ForgeDirection.EAST, ForgeDirection.WEST) - .buildAndChain(GregTech_API.sBlockCasings2, 0)) - .addElement('o', OutputBus.newAny(CASING_INDEX, 2, ForgeDirection.DOWN)) - .build(); - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Circuit Assembler/Circuit Assembly Line") - .addInfo("Controller block for the Circuit Assembly Line") - .addInfo("Change Mode with Screwdriver") - .addInfo("Does not lose efficiency when overclocked") - .addInfo( - "--------- " + EnumChatFormatting.GOLD - + StatCollector.translateToLocal("chat.cal.mode.0") - + EnumChatFormatting.GRAY - + " --------") - .addInfo("Imprint this machine with a Circuit Imprint,") - .addInfo("by putting the imprint in the controller") - .addInfo("Every Circuit Assembly Line can only be imprinted ONCE") - .addInfo( - "--------- " + EnumChatFormatting.GOLD - + StatCollector.translateToLocal("chat.cal.mode.1") - + EnumChatFormatting.GRAY - + " --------") - .addInfo( - "Does Circuit Assembler recipes, Minimum Length: " + EnumChatFormatting.RED - + MINIMUM_CIRCUIT_ASSEMBLER_LENGTH - + EnumChatFormatting.GRAY) - .addInfo("Recipe tier in Circuit Assembler mode is at most Energy Hatch tier - 1.") - .addInfo("This mode supports Crafting Input Buffer/Bus and allows bus separation") - .addInfo("") - .addSeparator() - .addInfo(BW_Tooltip_Reference.TT_BLUEPRINT) - .beginVariableStructureBlock(2, 7, 3, 3, 3, 3, false) - .addStructureInfo("From Bottom to Top, Left to Right") - .addStructureInfo( - "Layer 1 - Solid Steel Machine Casing, Input bus (Last Output bus), Solid Steel Machine Casing") - .addStructureInfo( - "Layer 2 - " + getColoredTierNameFromTier((byte) 4) - + "+ Tier Glass, Assembling Line Casing, " - + getColoredTierNameFromTier((byte) 4) - + "+ Tier Glass") - .addStructureInfo("Layer 3 - Grate Machine Casing") - .addStructureInfo("Up to 7 repeating slices, last is Output Bus") - .addController("Layer 3 first slice front") - .addOtherStructurePart( - "1x " + StatCollector.translateToLocal("GT5U.MBTT.EnergyHatch"), - "Any layer 3 casing", - 1) - .addInputHatch("Any layer 1 casing", 2) - .addInputBus("As specified on layer 1", 3, 4) - .addOutputBus("As specified in final slice on layer 1", 4) - .addOtherStructurePart(getColoredTierNameFromTier((byte) 4) + "+ Tier Glass", "As specified on layer 2", 5) - .addMaintenanceHatch("Any layer 1 casing", 2) - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS); - return tt; - } - - public String getTypeForDisplay() { - - if (!isImprinted()) return ""; - return GT_LanguageManager.getTranslation( - GT_LanguageManager.getTranslateableItemStackName(CircuitImprintLoader.getStackFromTag(this.type))); - } - - private NBTTagCompound type = new NBTTagCompound(); - - public GT_TileEntity_CircuitAssemblyLine(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - private GT_TileEntity_CircuitAssemblyLine(String aName) { - super(aName); - } - - public boolean isImprinted() { - return !this.type.hasNoTags(); - } - - private boolean imprintMachine(ItemStack itemStack) { - if (isImprinted()) return true; - if (!GT_Utility.isStackValid(itemStack)) return false; - if (itemStack.getItem() instanceof BW_Meta_Items.BW_GT_MetaGenCircuits && itemStack.getItemDamage() == 0 - && itemStack.getTagCompound() != null) { - this.type = itemStack.getTagCompound(); - itemStack.stackSize -= 1; - if (itemStack == getControllerSlot() && itemStack.stackSize <= 0) { - mInventory[getControllerSlotIndex()] = null; - } - this.getBaseMetaTileEntity() - .issueBlockUpdate(); - return true; - } - return false; - } - - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 20) { - GT_Utility.doSoundAtClient(IC2_MACHINES_MAGNETIZER_LOOP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.type = aNBT.getCompoundTag(IMPRINT_KEY); - this.imprintedItemName = this.type == null ? "" - : GT_LanguageManager.getTranslateableItemStackName(ItemStack.loadItemStackFromNBT(this.type)); - mode = aNBT.getInteger(RUNNING_MODE_KEY); - if (aNBT.hasKey(LENGTH_KEY)) { - length = aNBT.getInteger(LENGTH_KEY); - } - super.loadNBTData(aNBT); - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - if (isImprinted()) aNBT.setTag(IMPRINT_KEY, this.type); - aNBT.setInteger(RUNNING_MODE_KEY, mode); - super.saveNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - if (isImprinted()) aNBT.setTag(IMPRINT_KEY, this.type); - aNBT.setInteger(RUNNING_MODE_KEY, mode); - aNBT.setInteger(LENGTH_KEY, length); - super.saveNBTData(aNBT); - } - - @Override - public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (mode == 0 && !isImprinted() && getBaseMetaTileEntity().isServerSide()) { - ItemStack heldItem = aPlayer.getHeldItem(); - if (imprintMachine(heldItem)) { - if (heldItem.stackSize <= 0) { - aPlayer.inventory.setInventorySlotContents(aPlayer.inventory.currentItem, null); - } - return; - } - } - super.onLeftclick(aBaseMetaTileEntity, aPlayer); - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (getBaseMetaTileEntity().isServerSide()) { - this.mode = (this.mode + 1) % 2; - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("chat.cal.mode." + this.mode)); - } - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - } - - @Override - public RecipeMap getRecipeMap() { - if (this.mode == 0) return BartWorksRecipeMaps.circuitAssemblyLineRecipes; - return RecipeMaps.circuitAssemblerRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(BartWorksRecipeMaps.circuitAssemblyLineRecipes, RecipeMaps.circuitAssemblerRecipes); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Override - @Nonnull - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - // limit CA mode recipes to hatch tier - 1 - if (GT_TileEntity_CircuitAssemblyLine.this.mode == 1 - && recipe.mEUt > GT_TileEntity_CircuitAssemblyLine.this.getMaxInputVoltage() / 4) { - return CheckRecipeResultRegistry.NO_RECIPE; - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - }.enablePerfectOverclock(); - } - - @NotNull - @Override - public CheckRecipeResult checkProcessing() { - if (mode == 0) { - if (!isImprinted() && !this.imprintMachine(this.getControllerSlot())) - return SimpleCheckRecipeResult.ofFailure("no_imprint"); - if (this.imprintedItemName == null || this.imprintedStack == null) { - this.imprintedStack = new ItemStack(BW_Meta_Items.getCircuitParts(), 1, 0); - this.imprintedStack.setTagCompound(this.type); - this.imprintedItemName = GT_LanguageManager.getTranslateableItemStackName(this.imprintedStack); - } - } else if (length < MINIMUM_CIRCUIT_ASSEMBLER_LENGTH) { - return SimpleCheckRecipeResult.ofFailure("not_enough_length"); - } - - return super.checkProcessing(); - } - - @Override - protected void setupProcessingLogic(ProcessingLogic logic) { - super.setupProcessingLogic(logic); - logic.setSpecialSlotItem(this.imprintedStack); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_MAGNETIZER_LOOP; - } - - @Override - public ArrayList getStoredInputs() { - if (mode == 0) { - ArrayList rList = new ArrayList<>(); - for (GT_MetaTileEntity_Hatch_InputBus tHatch : filterValidMTEs(mInputBusses)) { - tHatch.mRecipeMap = this.getRecipeMap(); - for (int i = 0; i < tHatch.getBaseMetaTileEntity() - .getSizeInventory(); i++) { - if (tHatch.getBaseMetaTileEntity() - .getStackInSlot(i) != null) { - rList.add( - tHatch.getBaseMetaTileEntity() - .getStackInSlot(i)); - break; - } - } - } - return rList; - } - - return super.getStoredInputs(); - } - - @Override - public boolean addInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = this.getRecipeMap(); - return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity).mRecipeMap = this.getRecipeMap(); - return this.mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); - } else { - return false; - } - } - - @Override - public boolean addInputHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null || !(aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input)) { - return false; - } else { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = this.getRecipeMap(); - return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack itemStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_TileEntity_CircuitAssemblyLine(this.mName); - } - - private String[] infoDataBuffer; - - @Override - public String[] getInfoData() { - if (this.infoDataBuffer != null) return this.infoDataBuffer; - - String[] oldInfo = super.getInfoData(); - this.infoDataBuffer = new String[oldInfo.length + 1]; - System.arraycopy(oldInfo, 0, this.infoDataBuffer, 0, oldInfo.length); - this.infoDataBuffer[oldInfo.length] = StatCollector.translateToLocal("tooltip.cal.imprintedWith") + " " - + EnumChatFormatting.YELLOW - + this.getTypeForDisplay(); - return this.infoDataBuffer; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - if (!this.checkPiece(STRUCTURE_PIECE_FIRST, 0, 0, 0)) { - return false; - } - return this.checkMachine(true) || this.checkMachine(false); - } - - private boolean checkMachine(boolean leftToRight) { - - for (int i = 1; i < 7; ++i) { - if (!this.checkPiece(STRUCTURE_PIECE_NEXT, leftToRight ? -i : i, 0, 0)) { - return false; - } - length = i + 1; - - if (!this.mOutputBusses.isEmpty()) { - return this.mEnergyHatches.size() == 1 && this.mMaintenanceHatches.size() == 1; - } - } - - return false; - } - - public void construct(ItemStack stackSize, boolean hintsOnly) { - this.buildPiece(STRUCTURE_PIECE_FIRST, stackSize, hintsOnly, 0, 0, 0); - int tLength = Math.min(stackSize.stackSize + 1, 7); - - for (int i = 1; i < tLength; ++i) { - this.buildPiece(STRUCTURE_PIECE_NEXT, stackSize, hintsOnly, -i, 0, 0); - } - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (this.mMachine) return -1; - int built; - built = survivialBuildPiece(STRUCTURE_PIECE_FIRST, stackSize, 0, 0, 0, elementBudget, env, false, true); - if (built >= 0) return built; - int tLength = Math.min(stackSize.stackSize + 1, 7); - - for (int i = 1; i < tLength - 1; ++i) { - built = survivialBuildPiece( - STRUCTURE_PIECE_NEXT_HINT, - stackSize, - -i, - 0, - 0, - elementBudget, - env, - false, - true); - if (built >= 0) return built; - } - return survivialBuildPiece( - STRUCTURE_PIECE_LAST, - stackSize, - -(tLength - 1), - 0, - 0, - elementBudget, - env, - false, - true); - } - - @Override - public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { - if (stack.hasTagCompound() && stack.stackTagCompound.hasKey(IMPRINT_KEY)) { - tooltip.add( - StatCollector.translateToLocal("tooltip.cal.imprintedWith") + " " - + EnumChatFormatting.YELLOW - + StatCollector.translateToLocal( - GT_LanguageManager.getTranslateableItemStackName( - ItemStack.loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("Type"))))); - } - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - builder - .widget(new FakeSyncWidget.StringSyncer(() -> this.imprintedItemName, val -> this.imprintedItemName = val)); - builder.widget( - new CycleButtonWidget().setToggle(() -> mode == 1, val -> mode = val ? 1 : 0) - .setTextureGetter( - state -> state == 1 ? BW_UITextures.OVERLAY_BUTTON_ASSEMBLER_MODE - : BW_UITextures.OVERLAY_BUTTON_LINE_MODE) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .setPos(80, 91) - .setSize(16, 16) - .dynamicTooltip( - () -> Collections.singletonList(StatCollector.translateToLocal("chat.cal.mode." + mode))) - .setUpdateTooltipEveryTick(true) - .setTooltipShowUpDelay(TOOLTIP_DELAY)); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - protected boolean supportsSlotAutomation(int aSlot) { - return aSlot == getControllerSlotIndex(); - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (!aPlayer.isSneaking()) { - if (mode == 0) return false; - inputSeparation = !inputSeparation; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); - return true; - } else { - batchMode = !batchMode; - if (batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); - } - return true; - } - } - - @Override - public boolean supportsInputSeparation() { - return mode != 0; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - public boolean isInputSeparationEnabled() { - return mode == 1 && super.isInputSeparationEnabled(); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - currenttip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector.translateToLocal("chat.cal.mode." + tag.getInteger(RUNNING_MODE_KEY))); - if (tag.hasKey("ImprintedWith") && tag.getInteger(RUNNING_MODE_KEY) == 0) currenttip.add( - StatCollector.translateToLocal("tooltip.cal.imprintedWith") + " " - + EnumChatFormatting.YELLOW - + tag.getString("ImprintedWith")); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - String imprintedWith = this.getTypeForDisplay(); - if (!imprintedWith.isEmpty()) tag.setString("ImprintedWith", imprintedWith); - tag.setInteger(RUNNING_MODE_KEY, mode); - } - - @Override - protected boolean supportsCraftingMEBuffer() { - return mode != 0; - } - -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_DEHP.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_DEHP.java deleted file mode 100644 index 015d736321..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_DEHP.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis; - -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS; -import static gregtech.api.enums.GT_Values.VN; - -import java.lang.reflect.Field; -import java.util.Arrays; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_DrillerBase; -import ic2.core.block.reactor.tileentity.TileEntityNuclearReactorElectric; - -public class GT_TileEntity_DEHP extends GT_MetaTileEntity_DrillerBase { - - private static float nulearHeatMod = 2f; - private byte mMode; - private byte mTier; - - public GT_TileEntity_DEHP(int aID, int tier, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - this.mTier = (byte) tier; - } - - public GT_TileEntity_DEHP(String aName, byte mTier) { - super(aName); - this.mTier = mTier; - } - - @Override - @SuppressWarnings("rawtypes") - public void onConfigLoad() { - try { - Class c = TileEntityNuclearReactorElectric.class; - Field f = c.getDeclaredField("huOutputModifier"); - f.setAccessible(true); - GT_TileEntity_DEHP.nulearHeatMod = f.getFloat(f); - } catch (SecurityException | IllegalArgumentException | ExceptionInInitializerError | NullPointerException - | IllegalAccessException | NoSuchFieldException e) { - e.printStackTrace(); - } - super.onConfigLoad(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setByte("mTier", this.mTier); - aNBT.setByte("mMode", this.mMode); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.mTier = aNBT.getByte("mTier"); - this.mMode = aNBT.getByte("mMode"); - super.loadNBTData(aNBT); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_TileEntity_DEHP(this.mName, this.mTier); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - String casings = this.getCasingBlockItem() - .get(0) - .getDisplayName(); - tt.addMachineType("Geothermal Heat Pump") - .addInfo("Consumes " + GT_Values.V[this.mTier + 2] + "EU/t") - .addInfo("Has 4 Modes, use the Screwdriver to change them:"); - if (ConfigHandler.DEHPDirectSteam) { - tt.addInfo("0 Idle, 1 Steam, 2 Superheated Steam (requires Distilled Water), 3 Retract") - .addInfo("Explodes when it runs out of Water/Distilled Water") - .addInfo( - "Converts " + (long) (this.mTier * 1200 * 20) - + "L/s Water(minus 10% per Maintenance Problem) to Steam") - .addInfo( - "Converts " + (long) (this.mTier * 600 * 20) - + "L/s Distilled Water(minus 10% per Maintenance Problem) to SuperheatedSteam"); - - } else { - tt.addInfo("0 Idle, 1 & 2 Coolant Heating Mode (no Difference between them), 3 Retract") - .addInfo("Explodes when it runs out of Coolant") - .addInfo( - "Heats up " + (long) (this.mTier * 24 * (double) GT_TileEntity_DEHP.nulearHeatMod) * 20 - + "L/s Coolant(minus 10% per Maintenance Problem)"); - } - tt.addSeparator() - .beginStructureBlock(3, 7, 3, false) - .addController("Front bottom") - .addOtherStructurePart(casings, "form the 3x1x3 Base") - .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") - .addOtherStructurePart( - this.getFrameMaterial().mName + " Frame Boxes", - "Each pillar's side and 1x3x1 on top") - .addEnergyHatch(VN[this.getMinTier()] + "+, Any base casing") - .addMaintenanceHatch("Any base casing") - .addInputBus("Mining Pipes, optional, any base casing") - .addInputHatch("Any base casing") - .addOutputHatch("Any base casing") - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS); - return tt; - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_HeatProof; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.Tungsten; - } - - @Override - protected int getCasingTextureIndex() { - return 11; - } - - @Override - protected int getMinTier() { - return 2 + this.mTier; - } - - @Override - protected boolean checkHatches() { - return !this.mMaintenanceHatches.isEmpty() && !this.mOutputHatches.isEmpty() && !this.mInputHatches.isEmpty(); - } - - private long getFluidFromHatches(Fluid f) { - long ret = 0; - for (GT_MetaTileEntity_Hatch_Input ih : this.mInputHatches) { - if (ih.getFluid() - .getFluid() - .equals(f)) ret += ih.getFluidAmount(); - } - return ret; - } - - private long getWaterFromHatches(boolean onlyDistilled) { - Fluid toConsume1 = FluidRegistry.WATER; - Fluid toConsume2 = GT_ModHandler.getDistilledWater(1L) - .getFluid(); - if (onlyDistilled) toConsume1 = toConsume2; - long ret = 0; - for (GT_MetaTileEntity_Hatch_Input ih : this.mInputHatches) { - if (ih.getFluid() - .getFluid() - .equals(toConsume1) - || ih.getFluid() - .getFluid() - .equals(toConsume2)) - ret += ih.getFluidAmount(); - } - return ret; - } - - @Override - protected boolean workingUpward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, - int yHead, int oldYHead) { - if (this.mMode != 3) { - this.isPickingPipes = false; - try { - Field workState = this.getClass() - .getField("workState"); - workState.setInt(this, 0); - } catch (NoSuchFieldError | NoSuchFieldException | IllegalAccessException ignored) {} - return true; - } - return super.workingUpward(aStack, xDrill, yDrill, zDrill, xPipe, zPipe, yHead, oldYHead); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (this.getBaseMetaTileEntity() - .getWorld().isRemote) return; - ++this.mMode; - if (this.mMode >= 4) this.mMode = 0; - GT_Utility.sendChatToPlayer(aPlayer, "Mode: " + this.mMode); - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - } - - @Override - protected boolean workingDownward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, - int yHead, int oldYHead) { - if (this.mMode == 3) { - this.isPickingPipes = true; - try { - Field workState = this.getClass() - .getSuperclass() - .getDeclaredField("workState"); - workState.setInt(this, 2); - } catch (NoSuchFieldError | NoSuchFieldException | IllegalAccessException ignored) {} - return true; - } - - if (this.tryLowerPipeState(false) == 0) { - return true; - } - if (this.waitForPipes()) { - return false; - } - if (this.mMode == 0) { - this.mMode = 1; - } - if (ConfigHandler.DEHPDirectSteam) { - if (this.mMode == 1) { - long steamProduced = this.mTier * 600 * 2L * this.mEfficiency / 10000L; - long waterConsume = (steamProduced + 160) / 160; - - if (this.getWaterFromHatches(false) - waterConsume > 0) { - this.consumeFluid(FluidRegistry.WATER, waterConsume); - this.addOutput(GT_ModHandler.getSteam(steamProduced)); - } else { - this.explodeMultiblock(); - return false; - } - } else if (this.mMode == 2) { - long steamProduced = this.mTier * 300 * 2L * this.mEfficiency / 10000L; - long waterConsume = (steamProduced + 160) / 160; - - if (this.getWaterFromHatches(true) - waterConsume > 0) { - this.consumeFluid( - GT_ModHandler.getDistilledWater(1) - .getFluid(), - waterConsume); - this.addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", (int) steamProduced)); - } else { - this.explodeMultiblock(); - return false; - } - } - } else if (this.mMode == 1 || this.mMode == 2) { - long coolantConverted = (long) (this.mTier * 24 - * (double) GT_TileEntity_DEHP.nulearHeatMod - * this.mEfficiency - / 10000L); - if (this.getFluidFromHatches(FluidRegistry.getFluid("ic2coolant")) - coolantConverted > 0) { - this.consumeFluid(FluidRegistry.getFluid("ic2coolant"), coolantConverted); - this.addOutput(FluidRegistry.getFluidStack("ic2hotcoolant", (int) coolantConverted)); - } else { - this.explodeMultiblock(); - return false; - } - } - return true; - } - - private boolean consumeFluid(Fluid fluid, long ammount) { - if (ammount > Integer.MAX_VALUE) { - int[] tmp = new int[(int) (ammount / Integer.MAX_VALUE)]; - Arrays.fill(tmp, (int) (ammount / Integer.MAX_VALUE)); - for (int i = 0; i < tmp.length; i++) { - for (GT_MetaTileEntity_Hatch_Input ih : this.mInputHatches) { - if (fluid.equals(FluidRegistry.WATER) ? ih.getFluid() - .getFluid() - .equals(fluid) - || ih.getFluid() - .getFluid() - .equals( - GT_ModHandler.getDistilledWater(1) - .getFluid()) - : ih.getFluid() - .getFluid() - .equals(fluid)) - tmp[i] -= ih.drain((int) ammount, true).amount; - if (tmp[i] <= 0) break; - } - } - - return tmp[tmp.length - 1] <= 0; - } - - long tmp = ammount; - for (GT_MetaTileEntity_Hatch_Input ih : this.mInputHatches) { - if (fluid.equals(FluidRegistry.WATER) ? ih.getFluid() - .getFluid() - .equals(fluid) - || ih.getFluid() - .getFluid() - .equals( - GT_ModHandler.getDistilledWater(1) - .getFluid()) - : ih.getFluid() - .getFluid() - .equals(fluid)) - tmp -= ih.drain((int) ammount, true).amount; - if (tmp <= 0) return true; - } - return false; - } - - @Override - protected void setElectricityStats() { - try { - this.mEUt = this.isPickingPipes ? 60 : Math.toIntExact(GT_Values.V[this.getMinTier()]); - } catch (ArithmeticException e) { - e.printStackTrace(); - this.mEUt = Integer.MAX_VALUE - 7; - } - this.mProgresstime = 0; - this.mMaxProgresstime = 1; - this.mEfficiency = this.getCurrentEfficiency(null); - this.mEfficiencyIncrease = 10000; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_ElectricImplosionCompressor.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_ElectricImplosionCompressor.java deleted file mode 100644 index 14b6b5e172..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_ElectricImplosionCompressor.java +++ /dev/null @@ -1,566 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis; - -import static com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry.BW_BLOCKS; -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTWORKS; -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.TT; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.ExoticEnergy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.client.renderer.BW_EICPistonVisualizer; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.common.net.EICPacket; -import com.github.bartimaeusnek.bartworks.util.Coords; -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; -import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.ITierConverter; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureUtility; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import fox.spiteful.avaritia.blocks.LudicrousBlocks; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Mods; -import gregtech.api.enums.SoundResource; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_TileEntity_ElectricImplosionCompressor - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private static final boolean pistonEnabled = !ConfigHandler.disablePistonInEIC; - private Boolean piston = true; - private static final SoundResource sound = SoundResource.RANDOM_EXPLODE; - private final ArrayList chunkCoordinates = new ArrayList<>(5); - private int mBlockTier = 0; - private int mCasing; - - public GT_TileEntity_ElectricImplosionCompressor(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_TileEntity_ElectricImplosionCompressor(String aName) { - super(aName); - } - - private static final int CASING_INDEX = 16; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { "ccc", "cec", "ccc" }, { "ttt", "tft", "ttt" }, { "ttt", "tft", "ttt" }, - { "nnn", "nnn", "nnn" }, { "nNn", "NNN", "nNn" }, { "nnn", "nnn", "nnn" }, { "t~t", "tft", "ttt" }, - { "ttt", "tft", "ttt" }, { "CCC", "CeC", "CCC" }, })) - .addElement('c', ofChain(ofBlock(GregTech_API.sBlockCasings2, 0), ofBlock(GregTech_API.sBlockCasings3, 4))) - .addElement('t', ofBlock(BW_BLOCKS[2], 1)) - .addElement('f', ofBlock(BW_BLOCKS[2], 0)) - .addElement( - 'n', - StructureUtility.ofBlocksTiered( - tieredBlockConverter(), - getAllBlockTiers(), - 0, - GT_TileEntity_ElectricImplosionCompressor::setBlockTier, - GT_TileEntity_ElectricImplosionCompressor::getBlockTier)) - .addElement( - 'C', - buildHatchAdder(GT_TileEntity_ElectricImplosionCompressor.class) - .atLeast(InputBus, OutputBus, Maintenance, InputHatch, OutputHatch) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain( - onElementPass(x -> ++x.mCasing, ofBlock(GregTech_API.sBlockCasings2, 0)), - onElementPass(x -> ++x.mCasing, ofBlock(GregTech_API.sBlockCasings3, 4)))) - .addElement( - 'e', - buildHatchAdder(GT_TileEntity_ElectricImplosionCompressor.class).atLeast(Energy.or(ExoticEnergy)) - .casingIndex(CASING_INDEX) - .dot(2) - .buildAndChain( - onElementPass(x -> ++x.mCasing, ofBlock(GregTech_API.sBlockCasings2, 0)), - onElementPass(x -> ++x.mCasing, ofBlock(GregTech_API.sBlockCasings3, 4)))) - .addElement('N', new IStructureElement<>() { - - // Much of this based on StructureUtility.ofBlocksTiered - private final List> tiers = getAllBlockTiers(); - - @Override - public boolean check(GT_TileEntity_ElectricImplosionCompressor te, World world, int x, int y, int z) { - if (!te.piston && !world.isAirBlock(x, y, z)) return false; - if (te.piston) { - Block candidate = world.getBlock(x, y, z); - int candidateMeta = world.getBlockMetadata(x, y, z); - return getTierOfBlock(candidate, candidateMeta) != -1; - } - return true; - } - - private Pair getTier(ItemStack trigger) { - return this.tiers.get(Math.min(Math.max(trigger.stackSize, 1), this.tiers.size()) - 1); - } - - @Override - public boolean spawnHint(GT_TileEntity_ElectricImplosionCompressor te, World world, int x, int y, int z, - ItemStack itemStack) { - Pair tier = this.getTier(itemStack); - if (te.piston) StructureLibAPI.hintParticle(world, x, y, z, tier.getKey(), tier.getValue()); - return true; - } - - @Override - public boolean placeBlock(GT_TileEntity_ElectricImplosionCompressor te, World world, int x, int y, int z, - ItemStack itemStack) { - Pair tier = this.getTier(itemStack); - if (te.piston) world.setBlock(x, y, z, tier.getKey(), tier.getValue(), 3); - else world.setBlockToAir(x, y, z); - return true; - } - - @Override - public BlocksToPlace getBlocksToPlace(GT_TileEntity_ElectricImplosionCompressor t, World world, int x, - int y, int z, ItemStack trigger, AutoPlaceEnvironment env) { - return BlocksToPlace.createEmpty(); - } - - @Override - public PlaceResult survivalPlaceBlock(GT_TileEntity_ElectricImplosionCompressor t, World world, int x, - int y, int z, ItemStack trigger, AutoPlaceEnvironment env) { - return isAir().survivalPlaceBlock(t, world, x, y, z, trigger, env); - } - }) - .build(); - - public static List> getAllBlockTiers() { - return new ArrayList<>() { - - private static final long serialVersionUID = 8171991663102417651L; - - { - this.add(Pair.of(GregTech_API.sBlockMetal5, 2)); - if (Mods.Avaritia.isModLoaded()) { - this.add(Pair.of(LudicrousBlocks.resource_block, 1)); - } - this.add(Pair.of(GregTech_API.sBlockMetal9, 4)); - this.add(Pair.of(GregTech_API.sBlockMetal9, 3)); - this.add(Pair.of(GregTech_API.sBlockMetal9, 8)); - } - - }; - } - - public static ITierConverter tieredBlockConverter() { - return GT_TileEntity_ElectricImplosionCompressor::getTierOfBlock; - } - - private static int getTierOfBlock(Block block, int meta) { - if (block == null) { - return -1; - } - if (block == GregTech_API.sBlockMetal5 && meta == 2) { - return 1; // Neutronium - } - if (block == LudicrousBlocks.resource_block && meta == 1) { - return 2; // Infinity - } - if (block == GregTech_API.sBlockMetal9) { - return switch (meta) { - case 4 -> 3; // Transcendent Metal - case 3 -> 4; // SpaceTime - case 8 -> 5; // Universium - default -> -1; - }; - } - return -1; - } - - private void setBlockTier(int tier) { - this.mBlockTier = tier; - } - - private int getBlockTier() { - return this.mBlockTier; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Implosion Compressor") - .addInfo("Explosions are fun") - .addInfo("Controller block for the Electric Implosion Compressor") - .addInfo("Uses electricity instead of Explosives") - .addInfo("Can parallel up to 4^(Tier - 1)") - .addInfo("Tier is determined by containment block") - .addInfo("Valid blocks: Neutronium, Infinity, Transcendent Metal, Spacetime, Universium") - .addInfo("Minimum allowed energy hatch tier is one below recipe tier") - .addInfo("Supports " + TT + " energy hatches") - .addSeparator() - .beginStructureBlock(3, 9, 3, false) - .addController("Front 3rd layer center") - .addCasingInfoMin("Solid Steel Machine Casing", 8, false) - .addStructureInfo("Casings can be replaced with Explosion Warning Signs") - .addOtherStructurePart("Transformer-Winding Blocks", "Outer layer 2,3,7,8") - .addOtherStructurePart("Nickel-Zinc-Ferrite Blocks", "Inner layer 2,3,7,8") - .addOtherStructurePart("Containment Blocks", "Layer 4,5,6") - .addMaintenanceHatch("Any bottom casing", 1) - .addInputBus("Any bottom casing", 1) - .addInputHatch("Any bottom casing", 1) - .addOutputBus("Any bottom casing", 1) - .addEnergyHatch("Bottom middle and/or top middle", 2) - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); - return tt; - } - - @Override - public RecipeMap getRecipeMap() { - return BartWorksRecipeMaps.electricImplosionCompressorRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - long voltage = GT_TileEntity_ElectricImplosionCompressor.this.getAverageInputVoltage(); - // Only allow a minimum of T-1 energy hatch - if (recipe.mEUt > voltage * 4) { - return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - // For overclocking we'll allow all power to be used - return super.createOverclockCalculator(recipe) - .setEUt(GT_TileEntity_ElectricImplosionCompressor.this.getMaxInputEu()) - .setAmperage(1); - } - }.setMaxParallelSupplier(() -> (int) Math.pow(4, Math.max(this.mBlockTier - 1, 0))); - } - - private void updateChunkCoordinates() { - this.chunkCoordinates.clear(); - - for (int x = -1; x <= 1; x++) for (int z = -1; z <= 1; z++) { - if (Math.abs(x) != 1 || Math.abs(z) != 1) { - int[] abc = { x, -2, z + 1 }; - int[] xyz = { 0, 0, 0 }; - this.getExtendedFacing() - .getWorldOffset(abc, xyz); - xyz[0] += this.getBaseMetaTileEntity() - .getXCoord(); - xyz[1] += this.getBaseMetaTileEntity() - .getYCoord(); - xyz[2] += this.getBaseMetaTileEntity() - .getZCoord(); - this.chunkCoordinates.add(new ChunkCoordinates(xyz[0], xyz[1], xyz[2])); - } - } - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - this.updateChunkCoordinates(); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (pistonEnabled && aBaseMetaTileEntity.isActive() && aTick % 20 == 0) { - if (aBaseMetaTileEntity.isClientSide()) this.animatePiston(aBaseMetaTileEntity); - else if (aBaseMetaTileEntity.hasMufflerUpgrade()) MainMod.BW_Network_instance.sendPacketToAllPlayersInRange( - aBaseMetaTileEntity.getWorld(), - new EICPacket( - new Coords( - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord()), - true), - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getZCoord()); - } - } - - @Override - public void setExtendedFacing(ExtendedFacing newExtendedFacing) { - super.setExtendedFacing(newExtendedFacing); // Will call stopMachine - - this.updateChunkCoordinates(); - } - - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - @Override - public void stopMachine() { - this.resetPiston(this.mBlockTier); - super.stopMachine(); - } - - private void resetPiston(int tier) { - if (!pistonEnabled) return; - IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); - if (!aBaseMetaTileEntity.isServerSide()) return; - if (!this.piston) { - List> tiers = getAllBlockTiers(); - Pair tieredBlock = tiers.get(Math.min(tier, tiers.size()) - 1); - this.chunkCoordinates.forEach(c -> { - // Don't replace real blocks in case user has placed something (e.g. tier upgrade) - if (aBaseMetaTileEntity.getWorld() - .isAirBlock(c.posX, c.posY, c.posZ)) { - aBaseMetaTileEntity.getWorld() - .setBlock(c.posX, c.posY, c.posZ, tieredBlock.getKey(), tieredBlock.getValue(), 3); - } - }); - this.piston = !this.piston; - } - } - - private void activatePiston() { - if (!pistonEnabled) return; - IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); - if (!aBaseMetaTileEntity.isServerSide()) return; - if (this.piston) { - this.chunkCoordinates.forEach( - c -> aBaseMetaTileEntity.getWorld() - .setBlockToAir(c.posX, c.posY, c.posZ)); - this.piston = !this.piston; - } - } - - private void animatePiston(IGregTechTileEntity aBaseMetaTileEntity) { - if (!aBaseMetaTileEntity.getWorld().isRemote) return; - - if (!this.getBaseMetaTileEntity() - .hasMufflerUpgrade()) - GT_Utility.doSoundAtClient( - sound, - 10, - 1f, - 1f, - this.chunkCoordinates.get(0).posX, - this.chunkCoordinates.get(0).posY, - this.chunkCoordinates.get(0).posZ); - this.spawnVisualPistonBlocks( - aBaseMetaTileEntity.getWorld(), - this.chunkCoordinates.get(2).posX, - this.chunkCoordinates.get(2).posY, - this.chunkCoordinates.get(2).posZ, - 10); - } - - @SideOnly(Side.CLIENT) - private void spawnVisualPistonBlocks(World world, int x, int y, int z, int age) { - BW_EICPistonVisualizer pistonVisualizer = new BW_EICPistonVisualizer(world, x, y, z, age); - Minecraft.getMinecraft().effectRenderer.addEffect(pistonVisualizer); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("piston", this.piston); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("piston")) this.piston = aNBT.getBoolean("piston"); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { - int pistonTier = this.mBlockTier; - this.mCasing = 0; - int mMaxHatchTier = 0; - this.setBlockTier(0); - boolean isOK = this.checkPiece(STRUCTURE_PIECE_MAIN, 1, 6, 0); - - List energyHatches = this.getExoticAndNormalEnergyHatchList(); - for (GT_MetaTileEntity_Hatch hatch : energyHatches) { - mMaxHatchTier = Math.max(mMaxHatchTier, hatch.mTier); - } - - isOK = isOK && this.mMaintenanceHatches.size() == 1 && energyHatches.size() >= 1; - if (isOK) { - this.activatePiston(); - return true; - } - this.resetPiston(pistonTier); - return false; - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack itemStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_TileEntity_ElectricImplosionCompressor(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - this.buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 1, 6, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (this.mMachine) return -1; - return this.survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 6, 0, elementBudget, env, false, true); - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - batchMode = !batchMode; - if (batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); - } - return true; - } - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_HTGR.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_HTGR.java deleted file mode 100644 index 455625b77a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_HTGR.java +++ /dev/null @@ -1,614 +0,0 @@ -/* - * Copyright (C) 2022 kuba6000 This program is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY - * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. You should have received a copy of the GNU General Public License along with - * this program. If not, see . - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis; - -import static com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps.htgrFakeRecipes; -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_VIA_BARTWORKS; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_Values.AuthorKuba; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.items.SimpleSubItemClass; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.util.MathUtils; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_TileEntity_HTGR extends GT_MetaTileEntity_EnhancedMultiBlockBase { - - private static final int BASECASINGINDEX = 181; - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { - { " BBBBBBB ", " BBBBBBBBB ", "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", - "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", " BBBBBBBBB ", " BBBBBBB " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " bbb~bbb ", " bbbbbbbbb ", "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", - "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", " bbbbbbbbb ", " bbbbbbb " }, })) - .addElement('c', onElementPass(x -> x.mCasing++, ofBlock(GregTech_API.sBlockCasings8, 5))) - .addElement( - 'b', - ofChain( - ofHatchAdder(GT_TileEntity_HTGR::addOutputToMachineList, BASECASINGINDEX, 1), - ofHatchAdder(GT_TileEntity_HTGR::addMaintenanceToMachineList, BASECASINGINDEX, 1), - ofHatchAdder(GT_TileEntity_HTGR::addEnergyInputToMachineList, BASECASINGINDEX, 1), - onElementPass(x -> x.mCasing++, ofBlock(GregTech_API.sBlockCasings8, 5)))) - .addElement( - 'B', - ofChain( - ofHatchAdder(GT_TileEntity_HTGR::addInputToMachineList, BASECASINGINDEX, 2), - onElementPass(x -> x.mCasing++, ofBlock(GregTech_API.sBlockCasings8, 5)))) - // ofHatchAdderOptional(GT_TileEntity_HTGR::addInputToMachineList, BASECASINGINDEX, 2, - // GregTech_API.sBlockCasings8, 5)) - .build(); - - private static final int HELIUM_NEEDED = 730000; - public static final int powerUsage = (int) TierEU.RECIPE_LuV; - private static final int maxcapacity = 720000; - private static final int mincapacity = maxcapacity / 10; - private int HeliumSupply; - private int fueltype = -1, fuelsupply = 0; - private boolean empty; - private int emptyticksnodiff = 0; - private int coolanttaking = 0; - private int mCasing = 0; - - public GT_TileEntity_HTGR(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - private GT_TileEntity_HTGR(String aName) { - super(aName); - } - - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Breeder Reactor") - .addInfo("Controller block for the High Temperature Gas-cooled Reactor (HTGR)") - .addInfo(AuthorKuba) - .addInfo("You can clear internal buffer by changing the mode with a screwdriver") - .addInfo("Needs a constant supply of coolant while running") - .addInfo("Needs at least 72k Fuel pebbles to start operation (can hold up to 720k pebbles)") - .addInfo("Consumes up to 2.5% of total Fuel Pellets per Operation depending on efficiency") - .addInfo("Efficiency is calculated exponentially depending on the amount of pebbles in the internal buffer") - .addInfo("and affects total recipe time (at 100% eff, -50% total recipe time") - .addInfo( - "Reactor will take 4 000L/s of coolant multiplied by efficiency and by fuel coolant value (check tooltips)") - .addInfo("Uses " + GT_Utility.formatNumbers(powerUsage) + " EU/t") - .addInfo("One Operation takes 1 hour") - .addSeparator() - .beginStructureBlock(11, 12, 11, true) - .addController("Front bottom center") - .addCasingInfoMin("Europium Reinforced Radiation Proof Casings", 500, false) - .addStructureInfo("Corners and the 2 touching blocks are air (cylindric)") - .addInputBus("Any top layer casing", 2) - .addInputHatch("Any top layer casing", 2) - .addOutputBus("Any bottom layer casing", 1) - .addOutputHatch("Any bottom layer casing", 1) - .addEnergyHatch("Any bottom layer casing", 1) - .addMaintenanceHatch("Any bottom layer casing", 1) - .toolTipFinisher(MULTIBLOCK_ADDED_VIA_BARTWORKS.apply(EnumChatFormatting.GOLD + "kuba6000")); - return tt; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - this.buildPiece("main", stackSize, hintsOnly, 5, 11, 0); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { - this.mCasing = 0; - return this.checkPiece("main", 5, 11, 0) && this.mCasing >= 500 - && this.mMaintenanceHatches.size() == 1 - && this.mInputHatches.size() > 0 - && this.mOutputHatches.size() > 0 - && this.mInputBusses.size() > 0 - && this.mOutputBusses.size() > 0 - && this.mEnergyHatches.size() > 0; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.HeliumSupply = aNBT.getInteger("HeliumSupply"); - this.fueltype = aNBT.getInteger("fueltype"); - this.fuelsupply = aNBT.getInteger("fuelsupply"); - this.empty = aNBT.getBoolean("EmptyMode"); - this.coolanttaking = aNBT.getInteger("coolanttaking"); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("HeliumSupply", this.HeliumSupply); - aNBT.setInteger("fueltype", this.fueltype); - aNBT.setInteger("fuelsupply", this.fuelsupply); - aNBT.setBoolean("EmptyMode", this.empty); - aNBT.setInteger("coolanttaking", this.coolanttaking); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && !this.empty) { - boolean updateneeded = false; - if (this.HeliumSupply < GT_TileEntity_HTGR.HELIUM_NEEDED) { - for (FluidStack fluidStack : this.getStoredFluids()) { - if (fluidStack.isFluidEqual(Materials.Helium.getGas(1))) { - int toget = Math.min(GT_TileEntity_HTGR.HELIUM_NEEDED - this.HeliumSupply, fluidStack.amount); - fluidStack.amount -= toget; - this.HeliumSupply += toget; - updateneeded = true; - } - } - } - if (this.fuelsupply < maxcapacity) { - this.startRecipeProcessing(); - for (ItemStack itemStack : this.getStoredInputs()) { - int type = -1; - if (itemStack == null || itemStack.getItem() != HTGRMaterials.aHTGR_Materials) continue; - int damage = HTGRMaterials.aHTGR_Materials.getDamage(itemStack); - if ((damage + 1) % HTGRMaterials.MATERIALS_PER_FUEL != HTGRMaterials.USABLE_FUEL_INDEX + 1) - continue; // is fuel - type = damage / HTGRMaterials.MATERIALS_PER_FUEL; - if (this.fueltype == -1) this.fueltype = type; - if (this.fueltype != type) continue; - int toget = Math.min(maxcapacity - this.fuelsupply, itemStack.stackSize); - this.fuelsupply += toget; - itemStack.stackSize -= toget; - updateneeded = true; - } - this.endRecipeProcessing(); - } - if (updateneeded) this.updateSlots(); - } - } - - @Override - public RecipeMap getRecipeMap() { - // Only for visual - return htgrFakeRecipes; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - @Override - public boolean checkRecipe(ItemStack controllerStack) { - - if (this.empty) { - if (this.HeliumSupply > 0 || this.fuelsupply > 0) { - this.mEfficiency = 10000; - this.mMaxProgresstime = 100; - return true; - } - return false; - } - if (this.HeliumSupply < GT_TileEntity_HTGR.HELIUM_NEEDED || this.fuelsupply < mincapacity) return false; - - double eff = Math.min(Math.pow((double) this.fuelsupply / (double) mincapacity, 2D), 100D) / 100D - - (this.getIdealStatus() - this.getRepairStatus()) / 10D; - - if (eff <= 0) return false; - - int toReduce = MathUtils.floorInt(this.fuelsupply * 0.025D * eff); - - final int originalToReduce = toReduce; - int burnedballs = toReduce / 64; - if (burnedballs > 0) toReduce -= burnedballs * 64; - - int meta = this.fueltype * HTGRMaterials.MATERIALS_PER_FUEL + HTGRMaterials.BURNED_OUT_FUEL_INDEX; - - ItemStack[] toOutput = { new ItemStack(HTGRMaterials.aHTGR_Materials, burnedballs, meta), - new ItemStack(HTGRMaterials.aHTGR_Materials, toReduce, meta + 1) }; - if (!this.canOutputAll(toOutput)) return false; - - this.fuelsupply -= originalToReduce; - this.mOutputItems = toOutput; - - // this.updateSlots(); // not needed ? - - this.coolanttaking = (int) (4000D * (this.fueltype * 0.5D + 1) * eff); - - this.mEfficiency = (int) (eff * 10000D); - this.mEfficiencyIncrease = 0; - this.mEUt = -powerUsage; - this.mMaxProgresstime = (int) (72000 * (1d - eff / 2d)); - return true; - } - - private int runningtick = 0; - - @Override - public boolean onRunningTick(ItemStack aStack) { - this.runningtick++; - - if (this.empty) { - if (this.emptyticksnodiff > 20 && this.emptyticksnodiff % 20 != 0) { - this.emptyticksnodiff++; - return true; - } - if (this.HeliumSupply > 0) { - this.addOutput(Materials.Helium.getGas(this.HeliumSupply)); - this.HeliumSupply = 0; - } - if (this.fuelsupply > 0) { - ItemStack iStack = new ItemStack( - HTGRMaterials.aHTGR_Materials, - this.fuelsupply, - HTGRMaterials.MATERIALS_PER_FUEL * this.fueltype + HTGRMaterials.USABLE_FUEL_INDEX); - boolean storedAll = false; - for (GT_MetaTileEntity_Hatch_OutputBus tHatch : filterValidMTEs(mOutputBusses)) { - if (tHatch.storeAll(iStack)) { - storedAll = true; - break; - } - } - if (!storedAll) { - if (this.fuelsupply == iStack.stackSize) this.emptyticksnodiff++; - else { - this.fuelsupply = iStack.stackSize; - this.emptyticksnodiff = 0; - } - } else { - this.fuelsupply = 0; - this.fueltype = -1; - this.coolanttaking = 0; - } - } - return true; - } - // USE DA POWAH - if (!this.drainEnergyInput(-this.mEUt)) { - this.criticalStopMachine(); - return false; - } - - if (this.runningtick % 20 == 0) { - int takecoolant = this.coolanttaking; - int drainedamount = 0; - - for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) { - FluidStack tLiquid = tHatch.getFluid(); - if (tLiquid != null && tLiquid.isFluidEqual(FluidRegistry.getFluidStack("ic2coolant", 1))) { - FluidStack drained = tHatch.drain(takecoolant, true); - takecoolant -= drained.amount; - drainedamount += drained.amount; - if (takecoolant <= 0) break; - } - } - - if (drainedamount > 0) this.addOutput(FluidRegistry.getFluidStack("ic2hotcoolant", drainedamount)); - - this.updateSlots(); - - if (takecoolant > 0) this.stopMachine(); - } - - return true; - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack itemStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_TileEntity_HTGR(this.mName); - } - - @Override - public String[] getInfoData() { - return new String[] { "Mode:", this.empty ? "Emptying" : "Normal", "Progress:", - GT_Utility.formatNumbers(this.mProgresstime / 20) + "s / " - + GT_Utility.formatNumbers(this.mMaxProgresstime / 20) - + "s", - "Fuel type:", - this.fueltype == -1 ? "NONE" : "TRISO (" + HTGRMaterials.sHTGR_Fuel[this.fueltype].sEnglish + ")", - "Fuel amount:", GT_Utility.formatNumbers(this.fuelsupply) + " pcs.", "Helium-Level:", - GT_Utility.formatNumbers(this.HeliumSupply) + "L / " - + GT_Utility.formatNumbers(GT_TileEntity_HTGR.HELIUM_NEEDED) - + "L", - "Coolant:", GT_Utility.formatNumbers(this.coolanttaking) + "L/s", "Problems:", - String.valueOf(this.getIdealStatus() - this.getRepairStatus()) }; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, - ForgeDirection forgeDirection, int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == forgeDirection) { - if (aActive) return new ITexture[] { - Textures.BlockIcons.getCasingTextureForId(GT_TileEntity_HTGR.BASECASINGINDEX), TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(GT_TileEntity_HTGR.BASECASINGINDEX), - TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(GT_TileEntity_HTGR.BASECASINGINDEX) }; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (this.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(aPlayer, "HTGR mode cannot be changed while the machine is running."); - return; - } - this.empty = !this.empty; - GT_Utility.sendChatToPlayer( - aPlayer, - "HTGR is now running in " + (this.empty ? "emptying mode." : "normal Operation")); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - public static class HTGRMaterials { - - private static class CustomHTGRSimpleSubItemClass extends SimpleSubItemClass { - - HashMap tooltip = null; - - public CustomHTGRSimpleSubItemClass(HashMap tooltip, String... tex) { - super(tex); - this.tooltip = tooltip; - } - - @Override - @SuppressWarnings({ "unchecked", "rawtypes" }) - public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List aList, boolean p_77624_4_) { - if (this.tooltip.containsKey(this.getDamage(p_77624_1_))) - aList.add(this.tooltip.get(this.getDamage(p_77624_1_))); - aList.add("Material for High Temperature Gas-cooled Reactor"); - super.addInformation(p_77624_1_, p_77624_2_, aList, p_77624_4_); - } - } - - private static class Base_ { - - public String sName; - public String sEnglish; - - public Base_(String a, String b) { - this.sName = a; - this.sEnglish = b; - } - } - - public static class Fuel_ { - - public String sName; - public String sEnglish; - public ItemStack mainItem; - public ItemStack secondaryItem; - public ItemStack[] recycledItems = { GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Values.NI, - GT_Values.NI }; - public FluidStack recycledFluid; - public int[] recycleChances; - public String tooltip; - - public Fuel_(String sName, String sEnglish, ItemStack mainItem, ItemStack secondaryItem, - FluidStack recycledFluid, ItemStack[] recycledItems, int[] recycleChances, String tooltip) { - this.sName = sName; - this.sEnglish = sEnglish; - this.mainItem = mainItem; - this.secondaryItem = secondaryItem; - this.recycledFluid = recycledFluid; - System.arraycopy(recycledItems, 0, this.recycledItems, 0, recycledItems.length); - this.recycleChances = recycleChances; - this.tooltip = tooltip; - } - } - - private static class LangEntry_ { - - public String sName; - public String sEnglish; - - public LangEntry_(String a, String b) { - this.sName = a; - this.sEnglish = b; - } - } - - public static final Base_[] sHTGR_Bases = { new Base_("HTGRFuelMixture", "HTGR fuel mixture"), - new Base_("BISOPebbleCompound", "BISO pebble compound"), - new Base_("TRISOPebbleCompound", "TRISO pebble compound"), new Base_("TRISOBall", "TRISO ball"), - new Base_("TRISOPebble", "TRISO pebble"), new Base_("BurnedOutTRISOBall", "Burned out TRISO Ball"), - new Base_("BurnedOutTRISOPebble", "Burned out TRISO Pebble"), }; - public static final int MATERIALS_PER_FUEL = sHTGR_Bases.length; - static final int USABLE_FUEL_INDEX = 4; - static final int BURNED_OUT_FUEL_INDEX = 5; - public static final Fuel_[] sHTGR_Fuel = { new Fuel_( - "Thorium", - "Thorium", - WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 64), - Materials.Uranium235.getDust(4), - GT_Values.NF, - new ItemStack[] { Materials.Silicon.getDust(1), Materials.Graphite.getDust(1), Materials.Carbon.getDust(1), - Materials.Lutetium.getDust(1), WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 1) }, - new int[] { 9900 / 4, 9900 / 4, 9900 / 4, 9900 / 4, 162 / 4 }, - "Multiplies coolant by 1"), - new Fuel_( - "Uranium", - "Uranium", - Materials.Uranium.getDust(64), - Materials.Uranium235.getDust(8), - FluidRegistry.getFluidStack("krypton", 4), - new ItemStack[] { Materials.Silicon.getDust(1), Materials.Graphite.getDust(1), - Materials.Carbon.getDust(1), Materials.Lead.getDust(1), Materials.Uranium.getDust(1) }, - new int[] { 9900 / 4, 9900 / 4, 9900 / 4, 5000 / 4, 5000 / 4 }, - "Multiplies coolant by 1.5"), - new Fuel_( - "Plutonium", - "Plutonium", - Materials.Plutonium.getDust(64), - Materials.Plutonium241.getDust(4), - FluidRegistry.getFluidStack("xenon", 4), - new ItemStack[] { Materials.Silicon.getDust(1), Materials.Graphite.getDust(1), - Materials.Carbon.getDust(1), Materials.Lead.getDust(1), Materials.Plutonium.getDust(1) }, - new int[] { 9900 / 4, 9900 / 4, 9900 / 4, 5000 / 4, 5000 / 4 }, - "Multiplies coolant by 2"), }; - public static final CustomHTGRSimpleSubItemClass aHTGR_Materials; - static final ArrayList aHTGR_Localizations = new ArrayList<>(); - - static { - String[] sHTGR_Materials = new String[sHTGR_Bases.length * sHTGR_Fuel.length]; - HashMap tooltip = new HashMap<>(); - int i = 0; - for (Fuel_ fuel : sHTGR_Fuel) for (Base_ base : sHTGR_Bases) { - sHTGR_Materials[i] = "HTGR" + base.sName + fuel.sName; - aHTGR_Localizations.add( - new LangEntry_("item." + sHTGR_Materials[i] + ".name", base.sEnglish + " (" + fuel.sEnglish + ")")); - if ((i + 1) % MATERIALS_PER_FUEL == USABLE_FUEL_INDEX + 1 && fuel.tooltip != null - && !fuel.tooltip.isEmpty()) tooltip.put(i, fuel.tooltip); - i++; - } - aHTGR_Materials = new CustomHTGRSimpleSubItemClass(tooltip, sHTGR_Materials); - } - - public static void registeraTHR_Materials() { - for (LangEntry_ iName : aHTGR_Localizations) - GT_LanguageManager.addStringLocalization(iName.sName, iName.sEnglish); - GameRegistry.registerItem(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, "bw.HTGRMaterials"); - } - - public static void register_fake_THR_Recipes() { - - int i = 0; - for (@SuppressWarnings("unused") - Fuel_ fuel : sHTGR_Fuel) { - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 64, i + 4)) - .itemOutputs(new ItemStack(GT_TileEntity_HTGR.HTGRMaterials.aHTGR_Materials, 1, i + 5)) - .duration(1 * HOURS) - .eut(powerUsage) - .ignoreCollision() - .noOptimize() - .fake() - .addTo(htgrFakeRecipes); - - i += MATERIALS_PER_FUEL; - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_LESU.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_LESU.java deleted file mode 100644 index e5c6031c8e..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_LESU.java +++ /dev/null @@ -1,590 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis; - -import java.awt.Color; -import java.util.ArrayList; -import java.util.Collections; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.modularUI.BW_UITextures; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference; -import com.github.bartimaeusnek.bartworks.util.ConnectedBlocksChecker; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_TileEntity_LESU extends GT_MetaTileEntity_MultiBlockBase { - - private static final byte TEXID_SIDE = 0; - private static final byte TEXID_CHARGING = 1; - private static final byte TEXID_IDLE = 2; - private static final byte TEXID_EMPTY = 3; - private static final IIcon[] iIcons = new IIcon[4]; - private static final IIconContainer[] iIconContainers = new IIconContainer[4]; - private static final ITexture[][] iTextures = new ITexture[4][1]; - public ConnectedBlocksChecker connectedcells; - public final ItemStack[] circuits = new ItemStack[5]; - private final ItemStackHandler circuitsInventoryHandler = new ItemStackHandler(this.circuits) { - - @Override - public int getSlotLimit(int slot) { - return 1; - } - }; - private long mStorage; - - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - public GT_TileEntity_LESU(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - this.mStorage = ConfigHandler.energyPerCell; - } - - public GT_TileEntity_LESU(String aName) { - super(aName); - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public long maxEUStore() { - return this.mStorage >= Long.MAX_VALUE - 1 || this.mStorage < 0 ? Long.MAX_VALUE - 1 : this.mStorage; - } - - @Override - public long maxAmperesIn() { - int ret = 0; - for (int i = 0; i < 5; ++i) if (this.circuits[i] != null && this.circuits[i].getItem() - .equals( - GT_Utility.getIntegratedCircuit(0) - .getItem())) - ret += this.circuits[i].getItemDamage(); - return ret > 0 ? ret : 1; - } - - @Override - public long maxAmperesOut() { - return this.maxAmperesIn(); - } - - @Override - public long maxEUInput() { - - for (int i = 1; i < GT_Values.V.length; i++) { - if (this.maxEUOutput() <= GT_Values.V[i] && this.maxEUOutput() > GT_Values.V[i - 1]) - return Math.min(GT_Values.V[i], 32768L); - } - - return 8; - } - - @Override - public long maxEUOutput() { - return Math.min(Math.max(this.mStorage / ConfigHandler.energyPerCell, 1L), 32768L); - } - - @Override - public int rechargerSlotStartIndex() { - return 0; - } - - @Override - public int rechargerSlotCount() { - return 1; - } - - @Override - public int dechargerSlotStartIndex() { - return 1; - } - - @Override - public int dechargerSlotCount() { - return 1; - } - - @Override - public boolean isTeleporterCompatible() { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_TileEntity_LESU(this.mName); - } - - @Override - public String[] getDescription() { - ArrayList e = new ArrayList<>(); - String[] dsc = StatCollector.translateToLocal("tooltip.tile.lesu.0.name") - .split(";"); - Collections.addAll(e, dsc); - e.add( - StatCollector.translateToLocal("tooltip.tile.lesu.1.name") + " " - + GT_Utility.formatNumbers(ConfigHandler.energyPerCell) - + "EU"); - dsc = StatCollector.translateToLocal("tooltip.tile.lesu.2.name") - .split(";"); - Collections.addAll(e, dsc); - e.add(EnumChatFormatting.RED + StatCollector.translateToLocal("tooltip.tile.lesu.3.name")); - e.add(BW_Tooltip_Reference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get()); - return e.toArray(new String[0]); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - - for (int i = 0; i < GT_TileEntity_LESU.iTextures.length; i++) { - GT_TileEntity_LESU.iIcons[i] = aBlockIconRegister.registerIcon(MainMod.MOD_ID + ":LESU_CASING_" + i); - int finalI = i; - GT_TileEntity_LESU.iIconContainers[i] = new IIconContainer() { - - @Override - public IIcon getIcon() { - return GT_TileEntity_LESU.iIcons[finalI]; - } - - @Override - public IIcon getOverlayIcon() { - return GT_TileEntity_LESU.iIcons[finalI]; - } - - @Override - public ResourceLocation getTextureFile() { - return new ResourceLocation(MainMod.MOD_ID + ":LESU_CASING_" + finalI); - } - }; - } - } - - public boolean isClientSide() { - if (this.getWorld() != null) return this.getWorld().isRemote ? FMLCommonHandler.instance() - .getSide() == Side.CLIENT - : FMLCommonHandler.instance() - .getEffectiveSide() == Side.CLIENT; - return FMLCommonHandler.instance() - .getEffectiveSide() == Side.CLIENT; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - - ITexture[] ret = {}; - - if (this.isClientSide()) { - - for (int i = 0; i < GT_TileEntity_LESU.iTextures.length; i++) { - GT_TileEntity_LESU.iTextures[i][0] = TextureFactory - .of(GT_TileEntity_LESU.iIconContainers[i], Dyes.getModulation(0, Dyes.MACHINE_METAL.mRGBa)); - } - - if (side == facing && this.getBaseMetaTileEntity() - .getUniversalEnergyStored() <= 0) ret = GT_TileEntity_LESU.iTextures[GT_TileEntity_LESU.TEXID_EMPTY]; - else if (side == facing && !aActive) ret = GT_TileEntity_LESU.iTextures[GT_TileEntity_LESU.TEXID_IDLE]; - else if (side == facing && aActive) ret = GT_TileEntity_LESU.iTextures[GT_TileEntity_LESU.TEXID_CHARGING]; - else ret = GT_TileEntity_LESU.iTextures[GT_TileEntity_LESU.TEXID_SIDE]; - } - - return ret; - } - - @Override - public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_) { - return true; - } - - @Override - public boolean canExtractItem(int p_102008_1_, ItemStack p_102008_2_, int p_102008_3_) { - return true; - } - - @Override - public int getSizeInventory() { - return 6; - } - - @Override - public ItemStack getStackInSlot(int slotIn) { - if (slotIn > 1) return this.circuits[slotIn - 2]; - return this.mInventory[slotIn]; - } - - @Override - public void setInventorySlotContents(int index, ItemStack stack) { - if (index < 2) this.mInventory[index] = stack; - else this.circuits[index - 2] = stack; - } - - @Override - public String getInventoryName() { - return "L.E.S.U."; - } - - @Override - public boolean hasCustomInventoryName() { - return true; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer player) { - return true; - } - - @Override - public boolean isItemValidForSlot(int index, ItemStack stack) { - - return switch (index) { - case 0, 1 -> true; - default -> stack != null && stack.getItem() - .equals( - GT_Utility.getIntegratedCircuit(0) - .getItem()); - }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - @Override - public boolean checkRecipe(ItemStack itemStack) { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side != this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - this.checkMachine(aBaseMetaTileEntity, null); - super.onFirstTick(aBaseMetaTileEntity); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - this.mMaxProgresstime = 1; - if (aTick % 20 == 0) this.checkMachine(aBaseMetaTileEntity, null); - } - } - - @Override - public long getMinimumStoredEU() { - return 0; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - this.mMaxProgresstime = 1; - return true; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setIntArray("customCircuitInv", GT_Utility.stacksToIntArray(this.circuits)); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - int[] stacks = aNBT.getIntArray("customCircuitInv"); - for (int i = 0; i < stacks.length; i++) { - this.circuits[i] = GT_Utility.intToStack(stacks[i]); - } - super.loadNBTData(aNBT); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { - long startingTime = System.nanoTime(); - this.connectedcells = new ConnectedBlocksChecker(); - this.connectedcells.get_connected( - aBaseMetaTileEntity.getWorld(), - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - ItemRegistry.BW_BLOCKS[1]); - - if (this.connectedcells.get_meta_of_sideblocks( - aBaseMetaTileEntity.getWorld(), - this.getBaseMetaTileEntity() - .getMetaTileID(), - new int[] { aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord() }, - true)) { - this.getBaseMetaTileEntity() - .disableWorking(); - this.getBaseMetaTileEntity() - .setActive(false); - this.mStorage = 0; - this.mMaxProgresstime = 0; - this.mProgresstime = 0; - return false; - } - - this.mEfficiency = this.getMaxEfficiency(null); - this.mStorage = ConfigHandler.energyPerCell * this.connectedcells.hashset.size() >= Long.MAX_VALUE - 1 - || ConfigHandler.energyPerCell * this.connectedcells.hashset.size() < 0 ? Long.MAX_VALUE - 1 - : ConfigHandler.energyPerCell * this.connectedcells.hashset.size(); - this.mMaxProgresstime = 1; - this.mProgresstime = 0; - - this.getBaseMetaTileEntity() - .enableWorking(); - this.getBaseMetaTileEntity() - .setActive(true); - - long finishedTime = System.nanoTime(); - // System.out.println("LESU LookUp: "+((finishedTime - startingTime) / 1000000)+"ms"); - if (finishedTime - startingTime > 5000000) MainMod.LOGGER.warn( - "LESU LookUp took longer than 5ms!(" + (finishedTime - startingTime) - + "ns / " - + (finishedTime - startingTime) / 1000000 - + "ms) Owner:" - + this.getBaseMetaTileEntity() - .getOwnerName() - + " Check at x:" - + this.getBaseMetaTileEntity() - .getXCoord() - + " y:" - + this.getBaseMetaTileEntity() - .getYCoord() - + " z:" - + this.getBaseMetaTileEntity() - .getZCoord() - + " DIM-ID: " - + this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId); - return true; - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack itemStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return false; - } - - public World getWorld() { - return this.getBaseMetaTileEntity() - .getWorld(); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY) - .setSize(17, 17) - .setPos(105, 51)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(7, 4) - .setSize(118, 67)) - .widget(new SlotWidget(new BaseSlot(this.inventoryHandler, 1) { - - @Override - public int getSlotStackLimit() { - return 1; - } - }).setBackground( - this.getGUITextureSet() - .getItemSlot(), - GT_UITextures.OVERLAY_SLOT_IN) - .setPos(127, 13)) - .widget(new SlotWidget(new BaseSlot(this.inventoryHandler, 0) { - - @Override - public int getSlotStackLimit() { - return 1; - } - }).setBackground( - this.getGUITextureSet() - .getItemSlot(), - GT_UITextures.OVERLAY_SLOT_CHARGER) - .setPos(127, 49)); - for (int i = 0; i < 4; i++) { - builder.widget( - new SlotWidget(this.circuitsInventoryHandler, i).setBackground( - this.getGUITextureSet() - .getItemSlot(), - GT_UITextures.OVERLAY_SLOT_INT_CIRCUIT) - .setPos(151, 4 + i * 18)); - } - - final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); - this.drawTexts(screenElements); - builder.widget(screenElements); - - builder.widget( - new DrawableWidget().setDrawable(BW_UITextures.PICTURE_STORED_EU_FRAME) - .setPos(7, 72) - .setSize(118, 7)) - .widget( - new ProgressBar().setProgress( - () -> (float) this.getBaseMetaTileEntity() - .getStoredEU() / this.getBaseMetaTileEntity() - .getEUCapacity()) - .setDirection(ProgressBar.Direction.RIGHT) - .setTexture(BW_UITextures.PROGRESSBAR_STORED_EU_116, 116) - .setPos(8, 73) - .setSize(116, 5)); - } - - private long clientEU; - private long clientMaxEU; - private long clientMaxIn; - private long clientMaxOut; - private long clientAmps; - - private void drawTexts(DynamicPositionedColumn screenElements) { - screenElements.setSpace(0) - .setPos(11, 8); - - screenElements.widget( - new TextWidget().setStringSupplier(() -> "EU: " + numberFormat.format(this.clientEU)) - .setDefaultColor(this.COLOR_TEXT_WHITE.get())) - .widget( - new FakeSyncWidget.LongSyncer( - () -> this.getBaseMetaTileEntity() - .getStoredEU(), - val -> clientEU = val)) - .widget( - new TextWidget().setStringSupplier(() -> "MAX: " + numberFormat.format(clientMaxEU)) - .setDefaultColor(this.COLOR_TEXT_WHITE.get())) - .widget( - new FakeSyncWidget.LongSyncer( - () -> this.getBaseMetaTileEntity() - .isActive() - ? this.getBaseMetaTileEntity() - .getOutputVoltage() * ConfigHandler.energyPerCell - : 0, - val -> clientMaxEU = val)) - .widget( - new TextWidget().setStringSupplier(() -> "MAX EU/t IN: " + numberFormat.format(clientMaxIn)) - .setDefaultColor(this.COLOR_TEXT_WHITE.get())) - .widget( - new FakeSyncWidget.LongSyncer( - () -> this.getBaseMetaTileEntity() - .getInputVoltage(), - val -> clientMaxIn = val)) - .widget( - new TextWidget().setStringSupplier(() -> "EU/t OUT: " + numberFormat.format(clientMaxOut)) - .setDefaultColor(this.COLOR_TEXT_WHITE.get())) - .widget( - new FakeSyncWidget.LongSyncer( - () -> this.getBaseMetaTileEntity() - .getOutputVoltage(), - val -> clientMaxOut = val)) - .widget( - new TextWidget().setStringSupplier(() -> "AMP/t IN/OUT: " + numberFormat.format(clientAmps)) - .setDefaultColor(this.COLOR_TEXT_WHITE.get())) - .widget( - new FakeSyncWidget.LongSyncer( - () -> this.getBaseMetaTileEntity() - .getInputAmperage(), - val -> clientAmps = val)) - .widget( - new TextWidget(Text.localised("tooltip.LESU.0.name")).setDefaultColor(Color.YELLOW.getRGB()) - .setEnabled(widget -> this.maxEUStore() >= Long.MAX_VALUE - 1)) - .widget( - new TextWidget(Text.localised("tooltip.LESU.1.name")).setDefaultColor(Color.RED.getRGB()) - .setEnabled( - widget -> !this.getBaseMetaTileEntity() - .isActive())); - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_ManualTrafo.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_ManualTrafo.java deleted file mode 100644 index b481429411..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_ManualTrafo.java +++ /dev/null @@ -1,365 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis; - -import static com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry.BW_BLOCKS; -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTWORKS; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -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_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_TileEntity_ManualTrafo extends GT_MetaTileEntity_EnhancedMultiBlockBase { - - private byte mode; - private int mTiers; - private boolean upstep = true; - - public GT_TileEntity_ManualTrafo(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_TileEntity_ManualTrafo(String aName) { - super(aName); - } - - private static final int CASING_INDEX = 2; - private static final String STRUCTURE_PIECE_BASE = "base"; - private static final String STRUCTURE_PIECE_LAYER = "layer"; - private static final String STRUCTURE_PIECE_TOP = "top"; - private static final String STRUCTURE_PIECE_TAP_LAYER = "taplayer"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_BASE, transpose(new String[][] { { "b~b", "bbb", "bbb" } })) - .addShape(STRUCTURE_PIECE_LAYER, transpose(new String[][] { { "ttt", "tft", "ttt" } })) - .addShape(STRUCTURE_PIECE_TOP, transpose(new String[][] { { "ooo", "ooo", "ooo" } })) - .addShape( - STRUCTURE_PIECE_TAP_LAYER, - transpose(new String[][] { { " TTT ", "TtttT", "TtftT", "TtttT", " TTT " } })) - .addElement( - 'b', - ofChain( - ofHatchAdder(GT_TileEntity_ManualTrafo::addEnergyInputToMachineList, CASING_INDEX, 1), - ofHatchAdder(GT_TileEntity_ManualTrafo::addMaintenanceToMachineList, CASING_INDEX, 1), - ofBlock(GregTech_API.sBlockCasings1, 2))) - .addElement( - 'o', - ofHatchAdderOptional( - GT_TileEntity_ManualTrafo::addDynamoToMachineList, - CASING_INDEX, - 2, - GregTech_API.sBlockCasings1, - 2)) - .addElement('t', ofBlock(BW_BLOCKS[2], 1)) - .addElement('f', ofBlock(BW_BLOCKS[2], 0)) - .addElement('T', new IStructureElementNoPlacement() { - - @Override - public boolean check(GT_TileEntity_ManualTrafo te, World world, int x, int y, int z) { - if (world.isAirBlock(x, y, z)) return true; - TileEntity tileEntity = world.getTileEntity(x, y, z); - if (tileEntity == null || !(tileEntity instanceof IGregTechTileEntity)) return true; - IMetaTileEntity mte = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); - if (mte instanceof GT_MetaTileEntity_Hatch_Dynamo || mte instanceof GT_MetaTileEntity_Hatch_Energy) { - int intier = te.mEnergyHatches.get(0).mTier; - if (((GT_MetaTileEntity_TieredMachineBlock) mte).mTier - == intier + (te.upstep ? te.mTiers : -te.mTiers)) { - te.addToMachineList((IGregTechTileEntity) tileEntity, CASING_INDEX); - return true; - } - return false; - } - return true; - } - - @Override - public boolean spawnHint(GT_TileEntity_ManualTrafo te, World world, int x, int y, int z, - ItemStack itemStack) { - StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 2 /* aDots: 3 */); - return true; - } - }) - .build(); - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Transformer") - .addInfo("Controller block for the Manual Trafo") - .addInfo("Operates in 4 diffrent modes:") - .addInfo("Mode 1: Circuit 0 in controller: Direct-Upstep") - .addInfo("Mode 2: Circuit 1 in controller: Direct-Downstep") - .addInfo("Mode 3: Circuit 2 in controller: Tapped-Upstep (currently disabled)") - .addInfo("Mode 4: Circuit 2 in controller: Tapped-Downstep (currently disabled)") - .addSeparator() - .beginVariableStructureBlock(3, 3, 3, 10, 3, 3, false) - .addController("Front bottom center") - .addCasingInfoMin("MV Machine Casing", 0, false) - .addOtherStructurePart("Transformer-Winding Blocks", "1 Layer for each tier transformed") - .addOtherStructurePart("Nickel-Zinc-Ferrite Blocks", "Middle of Transformer-Winding Blocks") - .addMaintenanceHatch("Any bottom layer casing", 1) - .addEnergyHatch("Any bottom layer casing", 1) - .addDynamoHatch("Any top layer casing", 2) - .addStructureInfo("---------TAPPED MODE---------") - .addEnergyHatch("Touching Transformer-Winding Blocks", 3) - .addDynamoHatch("Touching Transformer-Winding Blocks", 3) - .addStructureInfo("Hatches touching Transformer-Winding Blocks must be tiered from bottom to top") - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); - return tt; - } - - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (!this.getBaseMetaTileEntity() - .isAllowedToWork()) this.stopMachine(); - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (!this.getBaseMetaTileEntity() - .isAllowedToWork()) { - this.stopMachine(); - return false; - } - - this.mProgresstime = 0; - this.mMaxProgresstime = 1; - - if (this.getBaseMetaTileEntity() - .getTimer() % 40 == 0) if (this.mEfficiency < this.getMaxEfficiency(null)) this.mEfficiency += 100; - else this.mEfficiency = this.getMaxEfficiency(null); - - if (this.mode > 1) { - return false; // this.onRunningTickTabbedMode(); Tapped mode is disable - } - - return this.drainEnergyInput(this.getInputTier() * 2 * this.mEnergyHatches.size()) && this.addEnergyOutput( - this.getInputTier() * 2 * this.mEnergyHatches.size() * this.mEfficiency / this.getMaxEfficiency(null)); - } - - public boolean onRunningTickTabbedMode() { - boolean ret = false; - for (GT_MetaTileEntity_Hatch_Dynamo E : this.mDynamoHatches) { - for (GT_MetaTileEntity_Hatch_Energy I : this.mEnergyHatches) { - - long vtt = I.getEUVar() >= V[E.mTier] / 2 && E.getEUVar() < E.maxEUStore() ? I.getEUVar() : 0; - - if (vtt == 0) continue; - - long vtp = E.getEUVar() + vtt; - long avt = Math.min(vtp, E.maxEUStore()); - E.setEUVar(avt); - I.setEUVar(I.getEUVar() - vtt); - ret = true; - } - } - return ret; - } - - @Override - public long getInputTier() { - if (this.mEnergyHatches.size() > 0) return GT_Utility.getTier( - this.mEnergyHatches.get(0) - .getBaseMetaTileEntity() - .getInputVoltage()); - return 0L; - } - - @Override - public long getOutputTier() { - if (this.mDynamoHatches.size() > 0) return GT_Utility.getTier( - this.mDynamoHatches.get(0) - .getBaseMetaTileEntity() - .getOutputVoltage()); - return 0L; - } - - @Override - public boolean checkRecipe(ItemStack itemStack) { - - if (!this.getBaseMetaTileEntity() - .isAllowedToWork()) { - this.stopMachine(); - return false; - } - if (itemStack == null || !itemStack.getUnlocalizedName() - .startsWith("gt.integrated_circuit")) this.mode = 0; - else this.mode = (byte) Math.min(3, itemStack.getItemDamage()); - this.upstep = this.mode % 2 == 0; - this.mProgresstime = 0; - this.mMaxProgresstime = 1; - this.mEfficiency = Math.max(this.mEfficiency, 100); - return this.upstep ? this.getOutputTier() - this.getInputTier() == this.mTiers - : this.getInputTier() - this.getOutputTier() == this.mTiers; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { - - if (itemStack == null || !itemStack.getUnlocalizedName() - .startsWith("gt.integrated_circuit")) this.mode = 0; - else this.mode = (byte) Math.min(3, itemStack.getItemDamage()); - - this.upstep = this.mode % 2 == 0; - boolean tapmode = this.mode > 1; - - if (!this.checkPiece(STRUCTURE_PIECE_BASE, 1, 0, 0) || this.mEnergyHatches.size() == 0) return false; - - byte intier = this.mEnergyHatches.get(0).mTier; - for (GT_MetaTileEntity_Hatch_Energy in : this.mEnergyHatches) if (in.mTier != intier) return false; - - int mHeight; - for (mHeight = 1; mHeight <= 8; mHeight++) { - if (tapmode) { - this.mTiers = mHeight; - if (!this.checkPiece(STRUCTURE_PIECE_TAP_LAYER, 2, mHeight, 1)) break; - } else if (!this.checkPiece(STRUCTURE_PIECE_LAYER, 1, mHeight, 0)) break; - } - if (!this.checkPiece(STRUCTURE_PIECE_TOP, 1, mHeight, 0)) return false; - this.mTiers = mHeight - 1; - - if (this.mDynamoHatches.size() == 0 || this.mMaintenanceHatches.size() != 1 || this.mTiers == 0) return false; - - byte outtier = this.mDynamoHatches.get(0).mTier; - for (GT_MetaTileEntity_Hatch_Dynamo out : this.mDynamoHatches) { - if (out.mTier != outtier) return false; - } - - return true; - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack itemStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_TileEntity_ManualTrafo(this.mName); - } - - @Override - public void saveNBTData(NBTTagCompound ntag) { - super.saveNBTData(ntag); - ntag.setInteger("mTiers", this.mTiers); - ntag.setByte("mMode", this.mode); - ntag.setBoolean("upstep", this.upstep); - } - - @Override - public void loadNBTData(NBTTagCompound ntag) { - super.loadNBTData(ntag); - this.mTiers = ntag.getInteger("mTiers"); - this.mode = ntag.getByte("mMode"); - this.upstep = ntag.getBoolean("upstep"); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - if (this.mInventory[1] == null || !this.mInventory[1].getUnlocalizedName() - .startsWith("gt.integrated_circuit")) this.mode = 0; - else this.mode = (byte) Math.min(3, this.mInventory[1].getItemDamage()); - int mHeight = Math.min(itemStack.stackSize, 8); - boolean tapmode = this.mode > 1; - this.buildPiece(STRUCTURE_PIECE_BASE, itemStack, b, 1, 0, 0); - for (int i = 0; i < mHeight; i++) { - if (tapmode) this.buildPiece(STRUCTURE_PIECE_TAP_LAYER, itemStack, b, 2, i + 1, 1); - else this.buildPiece(STRUCTURE_PIECE_LAYER, itemStack, b, 1, i + 1, 0); - } - this.buildPiece(STRUCTURE_PIECE_TOP, itemStack, b, 1, mHeight + 1, 0); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_THTR.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_THTR.java deleted file mode 100644 index e7a2b090c9..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_THTR.java +++ /dev/null @@ -1,413 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis; - -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTWORKS; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.items.SimpleSubItemClass; -import com.github.bartimaeusnek.bartworks.util.MathUtils; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_TileEntity_THTR extends GT_MetaTileEntity_EnhancedMultiBlockBase { - - private static final int BASECASINGINDEX = 44; - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { - { " BBBBBBB ", " BBBBBBBBB ", "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", - "BBBBBBBBBBB", "BBBBBBBBBBB", "BBBBBBBBBBB", " BBBBBBBBB ", " BBBBBBB " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " ccccccc ", " c-------c ", "c---------c", "c---------c", "c---------c", "c---------c", - "c---------c", "c---------c", "c---------c", " c-------c ", " ccccccc " }, - { " bbb~bbb ", " bbbbbbbbb ", "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", - "bbbbbbbbbbb", "bbbbbbbbbbb", "bbbbbbbbbbb", " bbbbbbbbb ", " bbbbbbb " }, })) - .addElement('c', onElementPass(x -> x.mCasing++, ofBlock(GregTech_API.sBlockCasings3, 12))) - .addElement( - 'b', - ofChain( - ofHatchAdder(GT_TileEntity_THTR::addOutputToMachineList, BASECASINGINDEX, 1), - ofHatchAdder(GT_TileEntity_THTR::addMaintenanceToMachineList, BASECASINGINDEX, 1), - ofHatchAdder(GT_TileEntity_THTR::addEnergyInputToMachineList, BASECASINGINDEX, 1), - onElementPass(x -> x.mCasing++, ofBlock(GregTech_API.sBlockCasings3, 12)))) - .addElement( - 'B', - ofChain( - ofHatchAdder(GT_TileEntity_THTR::addInputToMachineList, BASECASINGINDEX, 2), - onElementPass(x -> x.mCasing++, ofBlock(GregTech_API.sBlockCasings3, 12)))) - // ofHatchAdderOptional(GT_TileEntity_THTR::addInputToMachineList, BASECASINGINDEX, 2, - // GregTech_API.sBlockCasings3, 12)) - .build(); - - private static final int HELIUM_NEEDED = 730000; - private static final int powerUsage = (int) TierEU.RECIPE_IV / 2; - private static final int maxcapacity = 675000; - private static final int mincapacity = 100000; - private int HeliumSupply; - private int fuelsupply; - private boolean empty; - private int coolanttaking = 0; - private int mCasing = 0; - - public GT_TileEntity_THTR(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - private GT_TileEntity_THTR(String aName) { - super(aName); - } - - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("High Temperature Reactor") - .addInfo("Controller block for the Thorium High Temperature Reactor (THTR)") - .addInfo("Needs to be primed with " + GT_Utility.formatNumbers(HELIUM_NEEDED) + " of helium") - .addInfo("Needs a constant supply of coolant while running") - .addInfo("Needs at least 100k Fuel pebbles to start operation (can hold up to 675k pebbles)") - .addInfo("Consumes up to 0.5% of total Fuel Pellets per Operation depending on efficiency") - .addInfo("Efficiency decreases exponentially if the internal buffer is not completely filled") - .addInfo("Reactor will take 4 800L/t of coolant multiplied by efficiency") - .addInfo("Uses " + GT_Utility.formatNumbers(powerUsage) + " EU/t") - .addInfo("One Operation takes 9 hours") - .addSeparator() - .beginStructureBlock(11, 12, 11, true) - .addController("Front bottom center") - .addCasingInfoMin("Radiation Proof Casings", 500, false) - .addStructureInfo("Corners and the 2 touching blocks are air (cylindric)") - .addInputBus("Any top layer casing", 2) - .addInputHatch("Any top layer casing", 2) - .addOutputBus("Any bottom layer casing", 1) - .addOutputHatch("Any bottom layer casing", 1) - .addEnergyHatch("Any bottom layer casing", 1) - .addMaintenanceHatch("Any bottom layer casing", 1) - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); - return tt; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - this.buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 5, 11, 0); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { - this.mCasing = 0; - return this.checkPiece(STRUCTURE_PIECE_MAIN, 5, 11, 0) && this.mCasing >= 500 - && this.mMaintenanceHatches.size() == 1 - && this.mInputHatches.size() > 0 - && this.mOutputHatches.size() > 0 - && this.mInputBusses.size() > 0 - && this.mOutputBusses.size() > 0 - && this.mEnergyHatches.size() > 0; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.HeliumSupply = aNBT.getInteger("HeliumSupply"); - this.fuelsupply = aNBT.getInteger("fuelsupply"); - this.coolanttaking = aNBT.getInteger("coolanttaking"); - this.empty = aNBT.getBoolean("EmptyMode"); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("HeliumSupply", this.HeliumSupply); - aNBT.setInteger("fuelsupply", this.fuelsupply); - aNBT.setInteger("coolanttaking", this.coolanttaking); - aNBT.setBoolean("EmptyMode", this.empty); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && !this.empty) { - if (this.HeliumSupply < GT_TileEntity_THTR.HELIUM_NEEDED) { - for (FluidStack fluidStack : this.getStoredFluids()) { - if (fluidStack.isFluidEqual(Materials.Helium.getGas(1))) { - int toget = Math.min(GT_TileEntity_THTR.HELIUM_NEEDED - this.HeliumSupply, fluidStack.amount); - fluidStack.amount -= toget; - this.HeliumSupply += toget; - if (GT_TileEntity_THTR.HELIUM_NEEDED == this.HeliumSupply && fluidStack.amount == 0) - fluidStack = null; - } - } - } - if (this.fuelsupply < maxcapacity) { - this.startRecipeProcessing(); - for (ItemStack itemStack : this.getStoredInputs()) { - if (GT_Utility.areStacksEqual( - itemStack, - new ItemStack(THTRMaterials.aTHTR_Materials, 1, THTRMaterials.MATERIAL_FUEL_INDEX))) { - int toget = Math.min(maxcapacity - this.fuelsupply, itemStack.stackSize); - if (toget == 0) continue; - itemStack.stackSize -= toget; - this.fuelsupply += toget; - } - } - this.endRecipeProcessing(); - this.updateSlots(); - } - } - } - - @Override - public boolean checkRecipe(ItemStack controllerStack) { - - if (this.empty) { - if (this.HeliumSupply > 0 || this.fuelsupply > 0) { - this.mEfficiency = 10000; - this.mMaxProgresstime = 100; - return true; - } - return false; - } - if (this.HeliumSupply < GT_TileEntity_THTR.HELIUM_NEEDED || this.fuelsupply < mincapacity) return false; - - double eff = Math - .min(Math.pow((this.fuelsupply - mincapacity) / ((maxcapacity - mincapacity) / 10D), 2D) + 1, 100D) / 100D - - (this.getIdealStatus() - this.getRepairStatus()) / 10D; - if (eff <= 0D) return false; - - int toReduce = MathUtils.floorInt(this.fuelsupply * 0.005D * eff); - - final int originalToReduce = toReduce; - int burnedballs = toReduce / 64; - if (burnedballs > 0) toReduce -= burnedballs * 64; - - int meta = THTRMaterials.MATERIAL_USED_FUEL_INDEX; - - ItemStack[] toOutput = { new ItemStack(THTRMaterials.aTHTR_Materials, burnedballs, meta), - new ItemStack(THTRMaterials.aTHTR_Materials, toReduce, meta + 1) }; - if (!this.canOutputAll(toOutput)) return false; - - this.fuelsupply -= originalToReduce; - this.mOutputItems = toOutput; - - // this.updateSlots(); not needed ? - - this.coolanttaking = (int) (4800D * eff); - this.mEfficiency = (int) (eff * 10000D); - this.mEUt = -powerUsage; - this.mMaxProgresstime = 648000; - return true; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - - if (this.empty) { - this.addOutput(Materials.Helium.getGas(this.HeliumSupply)); - this.addOutput( - new ItemStack(THTRMaterials.aTHTR_Materials, this.fuelsupply, THTRMaterials.MATERIAL_FUEL_INDEX)); - this.HeliumSupply = 0; - this.fuelsupply = 0; - this.updateSlots(); - return true; - } - - if (!super.onRunningTick(aStack)) return false; - - int takecoolant = this.coolanttaking; - int drainedamount = 0; - - for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) { - FluidStack tLiquid = tHatch.getFluid(); - if (tLiquid != null && tLiquid.isFluidEqual(FluidRegistry.getFluidStack("ic2coolant", 1))) { - FluidStack drained = tHatch.drain(takecoolant, true); - takecoolant -= drained.amount; - drainedamount += drained.amount; - if (takecoolant <= 0) break; - } - } - - if (drainedamount > 0) this.addOutput(FluidRegistry.getFluidStack("ic2hotcoolant", drainedamount)); - - this.updateSlots(); - - return true; - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack itemStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_TileEntity_THTR(this.mName); - } - - @Override - public String[] getInfoData() { - return new String[] { "Progress:", - GT_Utility.formatNumbers(this.mProgresstime / 20) + "secs /" - + GT_Utility.formatNumbers(this.mMaxProgresstime / 20) - + "secs", - "TRISO-Pebbles:", - GT_Utility.formatNumbers(this.fuelsupply) + "pcs. / " + GT_Utility.formatNumbers(this.fuelsupply) + "psc.", - "Helium-Level:", - GT_Utility.formatNumbers(this.HeliumSupply) + "L / " - + GT_Utility.formatNumbers(GT_TileEntity_THTR.HELIUM_NEEDED) - + "L", - "Coolant/t:", GT_Utility.formatNumbers(this.mProgresstime == 0 ? 0 : this.coolanttaking) + "L/t", - "Problems:", String.valueOf(this.getIdealStatus() - this.getRepairStatus()) }; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { - Textures.BlockIcons.getCasingTextureForId(GT_TileEntity_THTR.BASECASINGINDEX), TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(GT_TileEntity_THTR.BASECASINGINDEX), - TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(GT_TileEntity_THTR.BASECASINGINDEX) }; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (this.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(aPlayer, "THTR mode cannot be changed while the machine is running."); - return; - } - this.empty = !this.empty; - GT_Utility.sendChatToPlayer( - aPlayer, - "THTR is now running in " + (this.empty ? "emptying mode." : "normal Operation")); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - public static class THTRMaterials { - - public static final SimpleSubItemClass aTHTR_Materials = new SimpleSubItemClass( - "BISOPelletCompound", // 0 - "BISOPelletBall", // 1 - "TRISOPelletCompound", // 2 - "TRISOPelletBall", // 3 - "TRISOPellet", // 4 - "BurnedOutTRISOPelletBall", // 5 - "BurnedOutTRISOPellet" // 6 - ); - public static final int MATERIAL_FUEL_INDEX = 4; - public static final int MATERIAL_USED_FUEL_INDEX = 5; - - public static void registeraTHR_Materials() { - GameRegistry.registerItem(GT_TileEntity_THTR.THTRMaterials.aTHTR_Materials, "bw.THTRMaterials"); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java deleted file mode 100644 index 84e2001b38..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/GT_TileEntity_Windmill.java +++ /dev/null @@ -1,638 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis; - -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTWORKS; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofTileAdder; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_Values.V; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityDispenser; -import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.modularUI.BW_UITextures; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.common.items.BW_Stonage_Rotors; -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.common.tileentities.classic.BW_RotorBlock; -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IGetTitleColor; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.items.ID_MetaTool_01; - -public class GT_TileEntity_Windmill extends GT_MetaTileEntity_EnhancedMultiBlockBase - implements ISurvivalConstructable, IGetTitleColor { - - private static final IIcon[] iIcons = new IIcon[2]; - private static final IIconContainer[] iIconContainers = new IIconContainer[2]; - private static final ITexture[] iTextures = new ITexture[3]; - - private BW_RotorBlock rotorBlock; - private int mDoor = 0; - private int mHardenedClay = 0; - private int mMulti = 16; - - public GT_TileEntity_Windmill(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - private GT_TileEntity_Windmill(String aName) { - super(aName); - } - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { " ", " ", " ", " p ", " ", " ", " " }, - { " ", " ", " ppp ", " p p ", " ppp ", " ", " " }, - { " ", " ppppp ", " p p ", " p p ", " p p ", " ppppp ", " " }, - { " ppppp ", "p p", "p p", "p p", "p p", "p p", " ppppp " }, - { " ppspp ", "p p", "p p", "p p", "p p", "p p", " ppppp " }, - { " ppppp ", "p p", "p p", "p p", "p p", "p p", " ppppp " }, - { " ", " ppppp ", " p p ", " p p ", " p p ", " ppppp ", " " }, - { " ", " ccc ", " c c ", " c c ", " c c ", " ccc ", " " }, - { " ", " ccc ", " c c ", " c c ", " c c ", " ccc ", " " }, - { " ", " ccc ", " c c ", " c c ", " c c ", " ccc ", " " }, - { " ", " ccc ", " c c ", " c c ", " c c ", " ccc ", " " }, - { " bb~bb ", "bbbbbbb", "bbbbbbb", "bbbbbbb", "bbbbbbb", "bbbbbbb", " bbbbb " }, })) - .addElement('p', ofBlockAnyMeta(Blocks.planks)) - .addElement( - 'c', - ofChain( - onElementPass(t -> t.mHardenedClay++, ofBlock(Blocks.hardened_clay, 0)), - ofTileAdder(GT_TileEntity_Windmill::addDispenserToOutputSet, Blocks.hardened_clay, 0), - onElementPass(t -> t.mDoor++, new IStructureElementNoPlacement() { - - private final IStructureElement delegate = ofBlock(Blocks.wooden_door, 0); - - @Override - public boolean check(GT_TileEntity_Windmill gt_tileEntity_windmill, World world, int x, int y, - int z) { - return this.delegate.check(gt_tileEntity_windmill, world, x, y, z); - } - - @Override - public boolean spawnHint(GT_TileEntity_Windmill gt_tileEntity_windmill, World world, int x, int y, - int z, ItemStack trigger) { - return this.delegate.spawnHint(gt_tileEntity_windmill, world, x, y, z, trigger); - } - }))) - .addElement('b', ofBlock(Blocks.brick_block, 0)) - .addElement('s', new IStructureElement() { - - @Override - public boolean check(GT_TileEntity_Windmill t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return t.setRotorBlock(tileEntity); - } - - @Override - public boolean spawnHint(GT_TileEntity_Windmill t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 0); - return true; - } - - @Override - public boolean placeBlock(GT_TileEntity_Windmill gt_tileEntity_windmill, World world, int x, int y, int z, - ItemStack trigger) { - return false; - } - - @Override - public BlocksToPlace getBlocksToPlace(GT_TileEntity_Windmill gt_tileEntity_windmill, World world, int x, - int y, int z, ItemStack trigger, AutoPlaceEnvironment env) { - return BlocksToPlace.create(new ItemStack(ItemRegistry.ROTORBLOCK)); - } - }) - .build(); - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Windmill") - .addInfo("Controller block for the Windmill") - .addInfo("A primitive Grinder powered by Kinetic energy") - .addInfo("Speed and output will be affected by wind speed, recipe and rotor") - .addInfo("Please use the Primitive Rotor") - .addInfo("Macerates 16 items at a time") - .addInfo("The structure is too complex!") - .addInfo("Follow the StructureLib hologram projector to build the main structure.") - .addSeparator() - .beginStructureBlock(7, 12, 7, false) - .addController("Front bottom center") - .addCasingInfoMin("Hardened Clay block", 40, false) - .addOtherStructurePart("Dispenser", "Any Hardened Clay block") - .addOtherStructurePart("0-1 Wooden door", "Any Hardened Clay block") - .addStructureHint("Primitive Kinetic Shaftbox", 1) - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); - return tt; - } - - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - private final Set tileEntityDispensers = new HashSet<>(); - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (this.mMaxProgresstime > 0) this.mProgresstime += this.rotorBlock.getGrindPower(); - if (!this.rotorBlock.rotorSlot.isEmpty()) this.setRotorDamage(this.rotorBlock, this.rotorBlock.getGrindPower()); - return this.rotorBlock.getGrindPower() > 0; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return true; - } - - @Override - public boolean doRandomMaintenanceDamage() { - return true; - } - - private float[] multiplierRecipe(ItemStack itemStack) { - // will return max and min value of the multiplier, the average of these is used to calculate the multiplier. - final Item item = itemStack.getItem(); - if (item == Items.wheat) { - return new float[] { 1.13f, 1.5f }; - } - final Block block = Block.getBlockFromItem(item); - if (item == Items.bone || block == Blocks.glowstone || block == Blocks.pumpkin) { - return new float[] { 0.8f, 1f }; - } - if (block == Blocks.gravel || block == Blocks.cobblestone - || block == Blocks.stone - || block == Blocks.sandstone - || block == Blocks.clay - || block == Blocks.hardened_clay - || block == Blocks.stained_hardened_clay - || block == Blocks.wool - || block == Blocks.netherrack - || block == Blocks.log - || block == Blocks.log2) { - return new float[] { 1f, 1.5f }; - } - final ItemData association = GT_OreDictUnificator.getAssociation(itemStack); - final OrePrefixes prefix = association == null ? null : association.mPrefix; - if (prefix == null || association.mMaterial == null - || association.mMaterial.mMaterial == null - || association.mMaterial.mMaterial.getDust(1) == null) { - return new float[] { 1f, 1f }; - } - if (OrePrefixes.ore == prefix || OrePrefixes.oreNetherrack == prefix - || OrePrefixes.oreEndstone == prefix - || OrePrefixes.oreBlackgranite == prefix - || OrePrefixes.oreRedgranite == prefix - || OrePrefixes.oreMarble == prefix - || OrePrefixes.oreBasalt == prefix) { - return new float[] { 0.5f, 1f }; - } - if (OrePrefixes.stone == prefix || OrePrefixes.stoneBricks == prefix - || OrePrefixes.stoneChiseled == prefix - || OrePrefixes.stoneCobble == prefix - || OrePrefixes.stoneCracked == prefix - || OrePrefixes.stoneMossy == prefix - || OrePrefixes.stoneMossyBricks == prefix - || OrePrefixes.stoneSmooth == prefix - || OrePrefixes.cobblestone == prefix) { - return new float[] { 1f, 1.5f }; - } - return new float[] { 1f, 1f }; - } - - @Override - public boolean checkRecipe(ItemStack itemStack) { - if (itemStack == null || itemStack.getItem() == null) return false; - - if (this.mOutputItems == null) this.mOutputItems = new ItemStack[2]; - - GT_Recipe tRecipe = RecipeMaps.maceratorRecipes - .findRecipe(this.getBaseMetaTileEntity(), false, false, V[1], null, itemStack); - if (tRecipe == null) { - return false; - } - - if (tRecipe.getOutput(0) != null) { - // Decrease input stack by appropriate amount (Not always 1) - for (int i = 0; i < this.mMulti; i++) { - if (!tRecipe.isRecipeInputEqual(true, null, itemStack)) { - this.mMulti = i; - break; - } - } - this.updateSlots(); - this.mOutputItems[0] = tRecipe.getOutput(0); - float[] mRecipe = this.multiplierRecipe(itemStack); - float multiper = Math.min( - mRecipe[1], - Math.max( - mRecipe[0], - 2f * (float) Math.sqrt((float) 1 / (this.rotorBlock.getWindStrength() + 1)) - * this.OutputMultiplier(this.rotorBlock) - * (mRecipe[0] + mRecipe[1]))); - int amount = (int) Math.floor(multiper * (this.mOutputItems[0].stackSize * this.mMulti)); - - // Split ItemStack --by gtpp - List splitStacks = new ArrayList<>(); - while (amount > this.mOutputItems[0].getMaxStackSize()) { - ItemStack tmp = this.mOutputItems[0].copy(); - tmp.stackSize = this.mOutputItems[0].getMaxStackSize(); - amount -= this.mOutputItems[0].getMaxStackSize(); - splitStacks.add(tmp); - } - ItemStack tmp = this.mOutputItems[0].copy(); - tmp.stackSize = amount; - splitStacks.add(tmp); - this.mOutputItems = splitStacks.toArray(new ItemStack[splitStacks.size()]); - } - this.mMaxProgresstime = tRecipe.mDuration * 2 * 100 * this.mMulti / this.getSpeed(this.rotorBlock); - this.mMulti = 16; - return true; - } - - @Override - public void stopMachine() { - this.getBaseMetaTileEntity() - .disableWorking(); - } - - public boolean addDispenserToOutputSet(TileEntity aTileEntity) { - if (aTileEntity instanceof TileEntityDispenser) { - this.tileEntityDispensers.add((TileEntityDispenser) aTileEntity); - return true; - } - return false; - } - - public boolean setRotorBlock(TileEntity aTileEntity) { - if (aTileEntity instanceof BW_RotorBlock) { - this.rotorBlock = (BW_RotorBlock) aTileEntity; - return true; - } - return false; - } - - @Override - public boolean addOutput(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return false; - - for (TileEntityDispenser tHatch : this.tileEntityDispensers) { - for (int i = tHatch.getSizeInventory() - 1; i >= 0; i--) { - if (tHatch.getStackInSlot(i) == null || GT_Utility.areStacksEqual(tHatch.getStackInSlot(i), aStack) - && aStack.stackSize + tHatch.getStackInSlot(i).stackSize <= 64) { - if (GT_Utility.areStacksEqual(tHatch.getStackInSlot(i), aStack)) { - ItemStack merge = tHatch.getStackInSlot(i) - .copy(); - merge.stackSize = aStack.stackSize + tHatch.getStackInSlot(i).stackSize; - tHatch.setInventorySlotContents(i, merge); - } else { - tHatch.setInventorySlotContents(i, aStack.copy()); - } - - if (GT_Utility.areStacksEqual(tHatch.getStackInSlot(i), aStack)) { - aStack = null; - return true; - } - tHatch.setInventorySlotContents(i, null); - aStack = null; - return false; - } - } - } - return false; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack itemStack) { - - this.tileEntityDispensers.clear(); - this.mDoor = 0; - this.mHardenedClay = 0; - - return this.checkPiece(STRUCTURE_PIECE_MAIN, 3, 11, 0) && !this.tileEntityDispensers.isEmpty() - && this.mDoor <= 2 - && this.mHardenedClay >= 40; - } - - @Override - public int getCurrentEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public void updateSlots() { - if (this.mInventory[1] != null && this.mInventory[1].stackSize <= 0) { - this.mInventory[1] = null; - } - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack itemStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_TileEntity_Windmill(this.mName); - } - - @Override - public String[] getInfoData() { - return new String[] { "Progress:", - this.mProgresstime + " Grindings of " + this.mMaxProgresstime + " needed Grindings", "GrindPower:", - this.rotorBlock.getGrindPower() + "KU/t" }; - } - - @SideOnly(Side.CLIENT) - @Override - public void registerIcons(IIconRegister aBlockIconRegister) { - GT_TileEntity_Windmill.iIcons[0] = Blocks.brick_block.getIcon(0, 0); - GT_TileEntity_Windmill.iIconContainers[0] = new IIconContainer() { - - @Override - public IIcon getIcon() { - return GT_TileEntity_Windmill.iIcons[0]; - } - - @Override - public IIcon getOverlayIcon() { - return null; - } - - @Override - public ResourceLocation getTextureFile() { - return new ResourceLocation("brick"); - } - }; - - GT_TileEntity_Windmill.iIcons[1] = aBlockIconRegister.registerIcon(MainMod.MOD_ID + ":windmill_top"); - GT_TileEntity_Windmill.iIconContainers[1] = new IIconContainer() { - - @Override - public IIcon getIcon() { - return GT_TileEntity_Windmill.iIcons[1]; - } - - @Override - public IIcon getOverlayIcon() { - return null; - } - - @Override - public ResourceLocation getTextureFile() { - return new ResourceLocation(MainMod.MOD_ID + ":windmill_top"); - } - }; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - - ITexture[] ret = new ITexture[6]; - - if (this.isClientSide()) { - - if (facing == side || side == ForgeDirection.DOWN) { - GT_TileEntity_Windmill.iTextures[0] = TextureFactory.of(GT_TileEntity_Windmill.iIconContainers[0]); - Arrays.fill(ret, GT_TileEntity_Windmill.iTextures[0]); - } else if (side == ForgeDirection.UP) { - GT_TileEntity_Windmill.iTextures[1] = TextureFactory.of(GT_TileEntity_Windmill.iIconContainers[1]); - Arrays.fill(ret, GT_TileEntity_Windmill.iTextures[1]); - } else { - GT_TileEntity_Windmill.iTextures[2] = TextureFactory.of(Textures.BlockIcons.COVER_WOOD_PLATE); - Arrays.fill(ret, GT_TileEntity_Windmill.iTextures[2]); - } - } - return ret; - } - - public boolean isClientSide() { - if (this.getBaseMetaTileEntity() - .getWorld() != null) - return this.getBaseMetaTileEntity() - .getWorld().isRemote - ? FMLCommonHandler.instance() - .getSide() == Side.CLIENT - : FMLCommonHandler.instance() - .getEffectiveSide() == Side.CLIENT; - return FMLCommonHandler.instance() - .getEffectiveSide() == Side.CLIENT; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - this.buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 3, 11, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (this.mMachine) return -1; - return this.survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 11, 0, elementBudget, env, false, true); - } - - public float OutputMultiplier(BW_RotorBlock rotorBlock) { - try { - return ((BW_Stonage_Rotors) rotorBlock.rotorSlot.get() - .getItem()).getmRotor(); - } catch (Exception e) { - return 1f; - } - } - - public int getSpeed(BW_RotorBlock rotorBlock) { - try { - return ((BW_Stonage_Rotors) rotorBlock.rotorSlot.get() - .getItem()).getSpeed(); - } catch (Exception e) { - return 1; - } - } - - public void setRotorDamage(BW_RotorBlock rotorBlock, int damage) { - try { - ((BW_Stonage_Rotors) rotorBlock.rotorSlot.get() - .getItem()).damageItemStack(rotorBlock.rotorSlot.get(), damage); - } catch (Exception e) { - rotorBlock.rotorSlot.damage(damage, false); - } - } - - @Override - public GUITextureSet getGUITextureSet() { - return new GUITextureSet().setMainBackground(BW_UITextures.BACKGROUND_BROWN) - .setItemSlot(BW_UITextures.SLOT_BROWN) - .setTitleTab( - BW_UITextures.TAB_TITLE_BROWN, - BW_UITextures.TAB_TITLE_DARK_BROWN, - BW_UITextures.TAB_TITLE_ANGULAR_BROWN); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(BW_UITextures.PICTURE_BW_LOGO_47X21) - .setSize(47, 21) - .setPos(123, 59)); - } - - @Override - public int getTitleColor() { - return this.COLOR_TITLE_WHITE.get(); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new SlotWidget(this.inventoryHandler, 1).setBackground( - this.getGUITextureSet() - .getItemSlot()) - .setPos(59, 35)) - .widget(new DrawableWidget() { - - private static final int DIVIDER = 125; - - @Override - public void onScreenUpdate() { - super.onScreenUpdate(); - if (GT_TileEntity_Windmill.this.mMaxProgresstime > 0) { - if (System.currentTimeMillis() / DIVIDER % 40 == 30) - this.setDrawable(BW_UITextures.PICTURE_WINDMILL_ROTATING[3]); - else if (System.currentTimeMillis() / DIVIDER % 40 == 20) - this.setDrawable(BW_UITextures.PICTURE_WINDMILL_ROTATING[2]); - else if (System.currentTimeMillis() / DIVIDER % 40 == 10) - this.setDrawable(BW_UITextures.PICTURE_WINDMILL_ROTATING[1]); - else if (System.currentTimeMillis() / DIVIDER % 40 == 0) - this.setDrawable(BW_UITextures.PICTURE_WINDMILL_ROTATING[0]); - } else { - this.setDrawable(BW_UITextures.PICTURE_WINDMILL_EMPTY); - } - } - }.setDrawable(BW_UITextures.PICTURE_WINDMILL_EMPTY) - .setPos(85, 27) - .setSize(32, 32)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> this.mMaxProgresstime, val -> this.mMaxProgresstime = val)) - .widget( - new ItemDrawable( - () -> this.mMachine && !this.getBaseMetaTileEntity() - .isActive() - ? GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.SOFTMALLET.ID, 1, null, null, null) - : null).asWidget() - .setPos(66, 66)) - .widget( - new FakeSyncWidget.BooleanSyncer( - () -> this.getBaseMetaTileEntity() - .isActive(), - val -> this.getBaseMetaTileEntity() - .setActive(val))) - .widget( - new TextWidget(GT_Utility.trans("138", "Incomplete Structure.")) - .setDefaultColor(this.COLOR_TEXT_WHITE.get()) - .setMaxWidth(150) - .setEnabled(widget -> !this.mMachine) - .setPos(92, 22)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> this.mMachine, val -> this.mMachine = val)); - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaBlastFurnace.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaBlastFurnace.java deleted file mode 100644 index 97d9bbaac3..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaBlastFurnace.java +++ /dev/null @@ -1,433 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega; - -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.Arrays; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_TileEntity_MegaBlastFurnace extends GT_TileEntity_MegaMultiBlockBase - implements ISurvivalConstructable { - - private static final int CASING_INDEX = 11; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape("main", createShape()) - .addElement('=', StructureElementAirNoHint.getInstance()) - .addElement( - 't', - buildHatchAdder(GT_TileEntity_MegaBlastFurnace.class) - .atLeast( - OutputHatch.withAdder(GT_TileEntity_MegaBlastFurnace::addOutputHatchToTopList) - .withCount(t -> t.mPollutionOutputHatches.size())) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(GregTech_API.sBlockCasings1, CASING_INDEX)) - .addElement('m', Muffler.newAny(CASING_INDEX, 2)) - .addElement( - 'C', - withChannel( - "coil", - ofCoil(GT_TileEntity_MegaBlastFurnace::setCoilLevel, GT_TileEntity_MegaBlastFurnace::getCoilLevel))) - .addElement( - 'g', - withChannel( - "glass", - BorosilicateGlass - .ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier))) - .addElement( - 'b', - buildHatchAdder(GT_TileEntity_MegaBlastFurnace.class) - .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy.or(ExoticEnergy)) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(GregTech_API.sBlockCasings1, CASING_INDEX)) - .build(); - - private static String[][] createShape() { - String[][] raw = new String[20][]; - - raw[0] = new String[15]; - String topCasing = "ttttttttttttttt"; - String middleTopCasing = "tttttttmttttttt"; - raw[0][0] = topCasing; - for (int i = 1; i < 15; i++) { - raw[0][i] = topCasing; - } - raw[0][7] = middleTopCasing; - - raw[1] = new String[15]; - String allGlass = "ggggggggggggggg"; - String allCoil = "gCCCCCCCCCCCCCg"; - String middleLine = "gC===========Cg"; - raw[1][0] = allGlass; - raw[1][1] = allCoil; - raw[1][13] = allCoil; - raw[1][14] = allGlass; - for (int i = 2; i < 13; i++) { - raw[1][i] = middleLine; - } - for (int i = 2; i < 19; i++) { - raw[i] = raw[1]; - } - String bottomCasing = "bbbbbbbbbbbbbbb"; - raw[19] = new String[15]; - for (int i = 0; i < 15; i++) { - raw[19][i] = bottomCasing; - } - - raw[17] = Arrays.copyOf(raw[17], raw[17].length); - raw[17][0] = "ggggggg~ggggggg"; - - return transpose(raw); - } - - private HeatingCoilLevel mCoilLevel; - protected final ArrayList mPollutionOutputHatches = new ArrayList<>(); - protected final FluidStack[] pollutionFluidStacks = { Materials.CarbonDioxide.getGas(1000), - Materials.CarbonMonoxide.getGas(1000), Materials.SulfurDioxide.getGas(1000) }; - private int mHeatingCapacity; - private byte glassTier; - private final static int polPtick = ConfigHandler.basePollutionMBFSecond / 20 * ConfigHandler.megaMachinesMax; - - public GT_TileEntity_MegaBlastFurnace(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_TileEntity_MegaBlastFurnace(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_TileEntity_MegaBlastFurnace(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Blast Furnace") - .addInfo("Controller block for the Mega Blast Furnace") - .addInfo("You can use some fluids to reduce recipe time. Place the circuit in the Input Bus") - .addInfo("Each 900K over the min. Heat required reduces power consumption by 5% (multiplicatively)") - .addInfo("Each 1800K over the min. Heat allows for an overclock to be upgraded to a perfect overclock.") - .addInfo("That means the EBF will reduce recipe time by a factor 4 instead of 2 (giving 100% efficiency).") - .addInfo("Additionally gives +100K for every tier past MV") - .addInfo( - GT_Values.TIER_COLORS[8] + GT_Values.VN[8] - + EnumChatFormatting.GRAY - + "-tier glass required for " - + EnumChatFormatting.BLUE - + "Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.GRAY - + " Laser Hatches.") - .addPollutionAmount(20 * this.getPollutionPerTick(null)) - .addSeparator() - .beginStructureBlock(15, 20, 15, true) - .addController("3rd layer center") - .addCasingInfoRange("Heat Proof Machine Casing", 0, 279, false) - .addOtherStructurePart("864x Heating Coils", "Inner 13x18x13 (Hollow)") - .addOtherStructurePart("1007x Borosilicate Glass", "Outer 15x18x15") - .addStructureInfo("The glass tier limits the Energy Input tier") - .addEnergyHatch("Any bottom layer casing") - .addMaintenanceHatch("Any bottom layer casing") - .addMufflerHatch("Top middle") - .addInputBus("Any bottom layer casing") - .addInputHatch("Any bottom layer casing") - .addOutputBus("Any bottom layer casing") - .addOutputHatch("Gasses, Any top layer casing") - .addStructureInfo("Recovery amount scales with Muffler Hatch tier") - .addOutputHatch("Platline fluids, Any bottom layer casing") - .addStructureHint("This Mega Multiblock is too big to have its structure hologram displayed fully.") - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS); - return tt; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.glassTier = aNBT.getByte("glasTier"); - if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { - this.inputSeparation = aNBT.getBoolean("isBussesSeparate"); - } - if (!aNBT.hasKey(BATCH_MODE_NBT_KEY)) { - this.batchMode = aNBT.getBoolean("mUseMultiparallelMode"); - } - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (!aPlayer.isSneaking()) { - this.inputSeparation = !this.inputSeparation; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + this.inputSeparation); - return true; - } - this.batchMode = !this.batchMode; - if (this.batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); - } - return true; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setByte("glasTier", this.glassTier); - } - - @Override - public int getPollutionPerTick(ItemStack aStack) { - return polPtick; - } - - public boolean addOutputHatchToTopList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.mPollutionOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } - return false; - } - - @Override - protected String[] getExtendedInfoData() { - return new String[] { StatCollector.translateToLocal("GT5U.EBF.heat") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(this.mHeatingCapacity) - + EnumChatFormatting.RESET - + " K" }; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setRecipeHeat(recipe.mSpecialValue) - .setMachineHeat(GT_TileEntity_MegaBlastFurnace.this.mHeatingCapacity) - .setHeatOC(true) - .setHeatDiscount(true); - } - - @Override - protected @Nonnull CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - return recipe.mSpecialValue <= GT_TileEntity_MegaBlastFurnace.this.mHeatingCapacity - ? CheckRecipeResultRegistry.SUCCESSFUL - : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); - } - }.setMaxParallel(ConfigHandler.megaMachinesMax); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - this.buildPiece("main", stackSize, hintsOnly, 7, 17, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (this.mMachine) return -1; - int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); - this.glassTier = 0; - this.setCoilLevel(HeatingCoilLevel.None); - return this.survivialBuildPiece("main", stackSize, 7, 17, 0, realBudget, source, actor, false, true); - } - - public void setCoilLevel(HeatingCoilLevel aCoilLevel) { - this.mCoilLevel = aCoilLevel; - } - - public HeatingCoilLevel getCoilLevel() { - return this.mCoilLevel; - } - - @Override - public boolean addOutput(FluidStack aLiquid) { - if (aLiquid == null) return false; - FluidStack tLiquid = aLiquid.copy(); - boolean isOutputPollution = false; - for (FluidStack pollutionFluidStack : this.pollutionFluidStacks) { - if (!tLiquid.isFluidEqual(pollutionFluidStack)) continue; - - isOutputPollution = true; - break; - } - ArrayList tOutputHatches; - if (isOutputPollution) { - tOutputHatches = this.mPollutionOutputHatches; - int pollutionReduction = 0; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - pollutionReduction = 100 - tHatch.calculatePollutionReduction(100); - break; - } - tLiquid.amount = tLiquid.amount * pollutionReduction / 100; - } else { - tOutputHatches = this.mOutputHatches; - } - return dumpFluid(tOutputHatches, tLiquid, true) || dumpFluid(tOutputHatches, tLiquid, false); - } - - @Override - public boolean checkMachine(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - this.mHeatingCapacity = 0; - this.glassTier = 0; - - this.setCoilLevel(HeatingCoilLevel.None); - - this.mPollutionOutputHatches.clear(); - - if (!this.checkPiece("main", 7, 17, 0) || this.getCoilLevel() == HeatingCoilLevel.None - || this.mMaintenanceHatches.size() != 1) return false; - - if (this.glassTier < 8) { - for (int i = 0; i < this.mExoticEnergyHatches.size(); ++i) { - GT_MetaTileEntity_Hatch hatch = this.mExoticEnergyHatches.get(i); - if (hatch.getConnectionType() == GT_MetaTileEntity_Hatch.ConnectionType.LASER) { - return false; - } - if (this.glassTier < hatch.mTier) { - return false; - } - } - for (int i = 0; i < this.mEnergyHatches.size(); ++i) { - if (this.glassTier < this.mEnergyHatches.get(i).mTier) { - return false; - } - } - } - - this.mHeatingCapacity = (int) this.getCoilLevel() - .getHeat() + 100 * (BW_Util.getTier(this.getMaxInputEu()) - 2); - - return true; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.blastFurnaceRecipes; - } - - @Override - public int getRecipeCatalystPriority() { - return -2; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaChemicalReactor.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaChemicalReactor.java deleted file mode 100644 index af96d9dfe6..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaChemicalReactor.java +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega; - -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTWORKS; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_TileEntity_MegaChemicalReactor - extends GT_TileEntity_MegaMultiBlockBase implements ISurvivalConstructable { - - private byte glassTier; - - public GT_TileEntity_MegaChemicalReactor(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_TileEntity_MegaChemicalReactor(String aName) { - super(aName); - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Chemical Reactor") - .addInfo("Controller block for the Chemical Reactor") - .addInfo("What molecule do you want to synthesize") - .addInfo("Or you want to replace something in this molecule") - .addInfo( - GT_Values.TIER_COLORS[8] + GT_Values.VN[8] - + EnumChatFormatting.GRAY - + "-tier glass required for " - + EnumChatFormatting.BLUE - + "Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.GRAY - + " Laser Hatches.") - .addInfo("The structure is too complex!") - .addInfo("Follow the Structure Lib hologram projector to build the main structure.") - .addSeparator() - .beginStructureBlock(5, 5, 9, false) - .addController("Front center") - .addStructureInfo("46x Chemically Inert Machine Casing (minimum)") - .addStructureInfo("7x Fusion Coil Block") - .addStructureInfo("28x PTFE Pipe Casing") - .addStructureInfo("64x Borosilicate Glass Block (any tier)") - .addStructureInfo("The glass tier limits the Energy Input tier") - .addEnergyHatch("Hint block ", 3) - .addMaintenanceHatch("Hint block ", 2) - .addInputHatch("Hint block ", 1) - .addInputBus("Hint block ", 1) - .addOutputBus("Hint block ", 1) - .addOutputHatch("Hint block ", 1) - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); - return tt; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_TileEntity_MegaChemicalReactor(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { casingTexturePages[1][48], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[1][48], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[1][48] }; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.multiblockChemicalReactorRecipes; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (!aNBT.hasKey(BATCH_MODE_NBT_KEY)) { - this.batchMode = aNBT.getBoolean("mUseMultiparallelMode"); - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - inputSeparation = !inputSeparation; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - this.batchMode = !this.batchMode; - if (this.batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); - } - return true; - } - return false; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().enablePerfectOverclock() - .setMaxParallel(ConfigHandler.megaMachinesMax); - } - - @Override - public void construct(ItemStack aStack, boolean aHintsOnly) { - this.buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 2, 2, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (this.mMachine) return -1; - int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); - return this - .survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 2, 0, realBudget, source, actor, false, true); - } - // -------------- TEC TECH COMPAT ---------------- - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.glassTier = 0; - - if (!this.checkPiece(STRUCTURE_PIECE_MAIN, 2, 2, 0) || this.mMaintenanceHatches.size() != 1) return false; - - if (this.glassTier < 8) { - for (int i = 0; i < this.mExoticEnergyHatches.size(); ++i) { - GT_MetaTileEntity_Hatch hatch = this.mExoticEnergyHatches.get(i); - if (hatch.getConnectionType() == GT_MetaTileEntity_Hatch.ConnectionType.LASER) { - return false; - } - if (this.glassTier < hatch.mTier) { - return false; - } - } - for (int i = 0; i < this.mEnergyHatches.size(); ++i) { - if (this.glassTier < this.mEnergyHatches.get(i).mTier) { - return false; - } - } - } - - return true; - } - - private static final int CASING_INDEX = 176; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { "ttttt", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "ttttt" }, - { "tgggt", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", "teeet" }, - { "tg~gt", " gcg ", " gcg ", " gcg ", " gcg ", " gcg ", " gcg ", " gcg ", "teret" }, - { "tgggt", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", " ggg ", "teeet" }, - { "ttttt", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "dptpd", "ttttt" }, })) - .addElement('p', ofBlock(GregTech_API.sBlockCasings8, 1)) - .addElement('t', ofBlock(GregTech_API.sBlockCasings8, 0)) - .addElement( - 'd', - buildHatchAdder(GT_TileEntity_MegaChemicalReactor.class) - .atLeast(InputBus, InputHatch, OutputBus, OutputHatch) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(GregTech_API.sBlockCasings8, 0)) - .addElement('r', Maintenance.newAny(CASING_INDEX, 2)) - .addElement( - 'e', - buildHatchAdder(GT_TileEntity_MegaChemicalReactor.class) - .atLeast(Energy.or(ExoticEnergy), InputHatch, InputBus, OutputHatch, OutputBus) - .casingIndex(CASING_INDEX) - .dot(3) - .buildAndChain(GregTech_API.sBlockCasings8, 0)) - .addElement('c', ofChain(ofBlock(GregTech_API.sBlockCasings4, 7), ofBlock(GregTech_API.sBlockCasings5, 13))) - .addElement( - 'g', - BorosilicateGlass - .ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier)) - .build(); - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaDistillTower.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaDistillTower.java deleted file mode 100644 index 48896ba418..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaDistillTower.java +++ /dev/null @@ -1,451 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega; - -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElementCheckOnly; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.fluid.IFluidStore; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Output_ME; - -public class GT_TileEntity_MegaDistillTower extends GT_TileEntity_MegaMultiBlockBase - implements ISurvivalConstructable { - - protected static final int CASING_INDEX = 49; - protected static final String STRUCTURE_PIECE_BASE = "base"; - protected static final String STRUCTURE_PIECE_LAYER = "layer"; - protected static final String STRUCTURE_PIECE_TOP_HINT = "top"; - private static final IStructureDefinition STRUCTURE_DEFINITION; - - static { - IHatchElement layeredOutputHatch = OutputHatch - .withCount(GT_TileEntity_MegaDistillTower::getCurrentLayerOutputHatchCount) - .withAdder(GT_TileEntity_MegaDistillTower::addLayerOutputHatch); - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - STRUCTURE_PIECE_BASE, - transpose( - new String[][] { { "bbbbbbb~bbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", - "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", - "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", "bbbbbbbbbbbbbbb", - "bbbbbbbbbbbbbbb" }, })) - .addShape( - STRUCTURE_PIECE_LAYER, - transpose( - new String[][] { - { "lllllllllllllll", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", - "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", - "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", "lcccccccccccccl", - "lcccccccccccccl", "lllllllllllllll" }, - { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "lllllllllllllll" }, - { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "lllllllllllllll" }, - { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "lllllllllllllll" }, - { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "lllllllllllllll" }, })) - .addShape( - STRUCTURE_PIECE_TOP_HINT, - transpose( - new String[][] { - { "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", - "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", - "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", "lllllllllllllll", - "lllllllllllllll", "lllllllllllllll" }, - { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "lllllllllllllll" }, - { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "lllllllllllllll" }, - { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "lllllllllllllll" }, - { "lllllllllllllll", "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "l=============l", "l=============l", "l=============l", - "l=============l", "lllllllllllllll" }, })) - .addElement('=', StructureElementAirNoHint.getInstance()) - .addElement( - 'b', - buildHatchAdder(GT_TileEntity_MegaDistillTower.class) - .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy.or(ExoticEnergy)) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain( - onElementPass( - GT_TileEntity_MegaDistillTower::onCasingFound, - ofBlock(GregTech_API.sBlockCasings4, 1)))) - .addElement( - 'l', - buildHatchAdder(GT_TileEntity_MegaDistillTower.class) - .atLeast(layeredOutputHatch, Maintenance, Energy.or(ExoticEnergy)) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain( - onElementPass( - GT_TileEntity_MegaDistillTower::onCasingFound, - ofBlock(GregTech_API.sBlockCasings4, 1)))) - .addElement('c', (IStructureElementCheckOnly) (t, world, x, y, z) -> { - if (world.isAirBlock(x, y, z)) { - if (t.mTopState < 1) { - t.mTopState = 0; - return true; - } - // definitely top - cannot be air - return false; - } - // from here on we must be looking at a top layer, since it's not air - if (t.mTopState == 0) - // must be air but failed, so no - return false; - t.mTopState = 1; - // hatch adder - TileEntity tileEntity = world.getTileEntity(x, y, z); - if (tileEntity instanceof IGregTechTileEntity entity && t.addLayerOutputHatch(entity, CASING_INDEX)) { - t.onTopLayerFound(false); - return true; - } - // block adder - if (world.getBlock(x, y, z) == GregTech_API.sBlockCasings4 && world.getBlockMetadata(x, y, z) == 1) { - t.onTopLayerFound(true); - return true; - } - return false; - }) - .build(); - } - - protected final List> mOutputHatchesByLayer = new ArrayList<>(); - protected int mHeight; - protected int mCasing; - protected boolean mTopLayerFound; - - // -1 => maybe top, maybe not, 0 => definitely not top, 1 => definitely top - private int mTopState = -1; - - public GT_TileEntity_MegaDistillTower(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - private GT_TileEntity_MegaDistillTower(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_TileEntity_MegaDistillTower(this.mName); - } - - protected void onCasingFound() { - this.mCasing++; - } - - protected int getCurrentLayerOutputHatchCount() { - return this.mOutputHatchesByLayer.size() < this.mHeight || this.mHeight <= 0 ? 0 - : this.mOutputHatchesByLayer.get(this.mHeight - 1) - .size(); - } - - protected boolean addLayerOutputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null || aTileEntity.isDead() - || !(aTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_Hatch_Output)) return false; - while (this.mOutputHatchesByLayer.size() < this.mHeight) this.mOutputHatchesByLayer.add(new ArrayList<>()); - GT_MetaTileEntity_Hatch_Output tHatch = (GT_MetaTileEntity_Hatch_Output) aTileEntity.getMetaTileEntity(); - tHatch.updateTexture(aBaseCasingIndex); - return this.mOutputHatchesByLayer.get(this.mHeight - 1) - .add(tHatch); - } - - protected void onTopLayerFound(boolean aIsCasing) { - this.mTopLayerFound = true; - if (aIsCasing) this.onCasingFound(); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.distillationTowerRecipes; - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Distillery") - .addInfo("Controller block for the Distillation Tower") - .addInfo("Fluids are only put out at the correct height") - .addInfo("The correct height equals the slot number in the NEI recipe") - .addSeparator() - .beginVariableStructureBlock(15, 15, 16, 56, 15, 15, true) - .addController("Front bottom") - .addOtherStructurePart("Clean Stainless Steel Machine Casing", "15 x h - 5 (minimum)") - .addEnergyHatch("Any casing") - .addMaintenanceHatch("Any casing") - .addInputHatch("Any bottom layer casing") - .addOutputBus("Any bottom layer casing") - .addOutputHatch("2-11x Output Hatches (One per Output Layer except bottom layer)") - .addStructureInfo("An \"Output Layer\" consists of 5 layers!") - .addStructureHint("The interior of this Mega Multiblock's hologram is empty, it should be all air.") - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - // reset - this.mOutputHatchesByLayer.forEach(List::clear); - this.mHeight = 1; - this.mTopLayerFound = false; - this.mTopState = -1; - - // check base - if (!this.checkPiece(STRUCTURE_PIECE_BASE, 7, 0, 0)) return false; - - // check each layer - while (this.mHeight < 12) { - if (!checkPiece(STRUCTURE_PIECE_LAYER, 7, mHeight * 5, 0)) { - return false; - } - if (this.mOutputHatchesByLayer.size() < this.mHeight || this.mOutputHatchesByLayer.get(this.mHeight - 1) - .isEmpty()) - // layer without output hatch - return false; - if (mTopLayerFound) { - break; - } - this.mTopState = -1; - // not top - this.mHeight++; - } - - // validate final invariants... - return this.mCasing >= 75 * this.mHeight + 10 && this.mHeight >= 2 - && this.mTopLayerFound - && this.mMaintenanceHatches.size() == 1; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - this.buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 7, 0, 0); - int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height - for (int i = 1; i < tTotalHeight - 1; i++) { - this.buildPiece(STRUCTURE_PIECE_LAYER, stackSize, hintsOnly, 7, 5 * i, 0); - } - this.buildPiece(STRUCTURE_PIECE_TOP_HINT, stackSize, hintsOnly, 7, 5 * (tTotalHeight - 1), 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (this.mMachine) return -1; - int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); - this.mHeight = 0; - int built = this - .survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 7, 0, 0, realBudget, source, actor, false, true); - if (built >= 0) return built; - int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height - for (int i = 1; i < tTotalHeight - 1; i++) { - this.mHeight = i; - built = this.survivialBuildPiece( - STRUCTURE_PIECE_LAYER, - stackSize, - 7, - 5 * this.mHeight, - 0, - realBudget, - source, - actor, - false, - true); - if (built >= 0) return built; - } - this.mHeight = tTotalHeight - 1; - return this.survivialBuildPiece( - STRUCTURE_PIECE_TOP_HINT, - stackSize, - 7, - 5 * this.mHeight, - 0, - realBudget, - source, - actor, - false, - true); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (!aNBT.hasKey(BATCH_MODE_NBT_KEY)) { - this.batchMode = aNBT.getBoolean("mUseMultiparallelMode"); - } - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - this.batchMode = !this.batchMode; - if (this.batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); - } - return true; - } - return false; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setMaxParallel(ConfigHandler.megaMachinesMax); - } - - @Override - public boolean canDumpFluidToME() { - - // All fluids can be dumped to ME only if each layer contains a ME Output Hatch. - for (List tLayerOutputHatches : this.mOutputHatchesByLayer) { - - boolean foundMEHatch = false; - - for (IFluidStore tHatch : tLayerOutputHatches) { - if (tHatch instanceof GT_MetaTileEntity_Hatch_Output_ME tMEHatch) { - if (tMEHatch.canAcceptFluid()) { - foundMEHatch = true; - break; - } - } - } - - // Exit if we didn't find a valid hatch on this layer. - if (!foundMEHatch) { - return false; - } - } - - return true; - } - - @Override - protected void addFluidOutputs(FluidStack[] mOutputFluids2) { - for (int i = 0; i < mOutputFluids2.length && i < this.mOutputHatchesByLayer.size(); i++) { - FluidStack tStack = mOutputFluids2[i].copy(); - if (!dumpFluid(this.mOutputHatchesByLayer.get(i), tStack, true)) - dumpFluid(this.mOutputHatchesByLayer.get(i), tStack, false); - } - } - - @Override - public List getFluidOutputSlots(FluidStack[] toOutput) { - return this.getFluidOutputSlotsByLayer(toOutput, this.mOutputHatchesByLayer); - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaMultiBlockBase.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaMultiBlockBase.java deleted file mode 100644 index 55f37f6712..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaMultiBlockBase.java +++ /dev/null @@ -1,213 +0,0 @@ -package com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega; - -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.Arrays; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference; -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; -import com.gtnewhorizon.structurelib.structure.IStructureElement; - -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.util.GT_Utility; - -public abstract class GT_TileEntity_MegaMultiBlockBase> - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase { - - protected GT_TileEntity_MegaMultiBlockBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_TileEntity_MegaMultiBlockBase(String aName) { - super(aName); - } - - protected String[] getExtendedInfoData() { - return new String[0]; - } - - protected long[] getCurrentInfoData() { - long storedEnergy = 0, maxEnergy = 0; - for (GT_MetaTileEntity_Hatch hatch : this.getExoticAndNormalEnergyHatchList()) { - storedEnergy += hatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += hatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - return new long[] { storedEnergy, maxEnergy }; - } - - @Override - public String[] getInfoData() { - int mPollutionReduction = 0; - - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); - } - - long[] ttHatches = this.getCurrentInfoData(); - long storedEnergy = ttHatches[0]; - long maxEnergy = ttHatches[1]; - - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - - long nominalV = this.getMaxInputEu(); - String tName = BW_Util.getTierNameFromVoltage(nominalV); - if ("MAX+".equals(tName)) tName = EnumChatFormatting.OBFUSCATED + "MAX+"; - - String[] extendedInfo = this.getExtendedInfoData(); - - String[] baseInfo = { - StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(this.mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(-this.lEUt) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.getMaxInputVoltage()) - + EnumChatFormatting.RESET - + " EU/t(*" - + GT_Utility.formatNumbers(this.getMaxInputAmps()) - + "A) = " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(nominalV) - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.machines.tier") + ": " - + EnumChatFormatting.YELLOW - + tName - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (this.getIdealStatus() - this.getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + this.mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %" }; - - String[] combinedInfo = Arrays.copyOf(baseInfo, baseInfo.length + extendedInfo.length + 1); - - System.arraycopy(extendedInfo, 0, combinedInfo, baseInfo.length, extendedInfo.length); - - combinedInfo[combinedInfo.length - 1] = BW_Tooltip_Reference.BW; - - return combinedInfo; - } - - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return false; - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(this.getMaxInputEu()); - logic.setAvailableAmperage(1); - } - - protected static class StructureElementAirNoHint implements IStructureElement { - - private static final StructureElementAirNoHint INSTANCE = new StructureElementAirNoHint<>(); - - @SuppressWarnings("unchecked") - public static IStructureElement getInstance() { - return (IStructureElement) INSTANCE; - } - - private StructureElementAirNoHint() {} - - @Override - public boolean check(T o, World world, int x, int y, int z) { - return world.isAirBlock(x, y, z); - } - - @Override - public boolean spawnHint(T o, World world, int x, int y, int z, ItemStack trigger) { - if (world.blockExists(x, y, z) && !world.isAirBlock(x, y, z)) - // hint if this is obstructed. in case *someone* ever finish the transparent rendering - StructureLibAPI - .hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), StructureLibAPI.HINT_BLOCK_META_AIR); - return true; - } - - @Override - public boolean placeBlock(T o, World world, int x, int y, int z, ItemStack trigger) { - world.setBlockToAir(x, y, z); - return true; - } - - @Override - public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - return BlocksToPlace.createEmpty(); - } - - @Override - public PlaceResult survivalPlaceBlock(T o, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - if (this.check(o, world, x, y, z)) return PlaceResult.SKIP; - if (!StructureLibAPI.isBlockTriviallyReplaceable(world, x, y, z, env.getActor())) return PlaceResult.REJECT; - world.setBlock(x, y, z, Blocks.air, 0, 2); - return PlaceResult.ACCEPT; - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaOilCracker.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaOilCracker.java deleted file mode 100644 index ed5787867c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaOilCracker.java +++ /dev/null @@ -1,471 +0,0 @@ -/* - * Copyright (c) 2022 SKYCATV587 Permission is hereby granted, free of charge, to any person obtaining a copy of this - * software and associated documentation files (the "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the - * Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The - * above copyright notice and this permission notice shall be included in all copies or substantial portions of the - * Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT - * LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega; - -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTWORKS; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.maps.OilCrackerBackend; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Input_ME; -import gregtech.common.tileentities.machines.IRecipeProcessingAwareHatch; - -public class GT_TileEntity_MegaOilCracker extends GT_TileEntity_MegaMultiBlockBase - implements ISurvivalConstructable { - - private static final int CASING_INDEX = 49; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { - { " p p ", "ppgggggggggpp", " pgggggggggp ", " pgggpppgggp ", " pgggpMpgggp ", - " pgggpppgggp ", " pgggggggggp ", "ppgggggggggpp", " p p " }, - { " p p ", "pgggggggggggp", " g c c c c g ", " g c c c c g ", " g c c c c g ", - " g c c c c g ", " g c c c c g ", "pgggggggggggp", " p p " }, - { " p p ", "pgggggggggggp", " g c c c c g ", " p c c p ", " p c c c c p ", - " p c c p ", " g c c c c g ", "pgggggggggggp", " p p " }, - { " p p ", "pgggggggggggp", " g c c c c g ", " p c c c c p ", " l c c c c r ", - " p c c c c p ", " g c c c c g ", "pgggggggggggp", " p p " }, - { " p p ", "pgggggggggggp", " g c c c c g ", " p c c p ", " p c c c c p ", - " p c c p ", " g c c c c g ", "pgggggggggggp", " p p " }, - { " p p ", "pgggggggggggp", " g c c c c g ", " g c c c c g ", " g c c c c g ", - " g c c c c g ", " g c c c c g ", "pgggggggggggp", " p p " }, - { "ppmmmm~mmmmpp", "ppppppppppppp", "ppppppppppppp", "ppppppppppppp", "ppppppppppppp", - "ppppppppppppp", "ppppppppppppp", "ppppppppppppp", "ppmmmmmmmmmpp" }, })) - .addElement( - 'c', - withChannel( - "coil", - ofCoil(GT_TileEntity_MegaOilCracker::setCoilLevel, GT_TileEntity_MegaOilCracker::getCoilLevel))) - - .addElement('p', ofBlock(GregTech_API.sBlockCasings4, 1)) - .addElement( - 'l', - InputHatch.withAdder(GT_TileEntity_MegaOilCracker::addLeftHatchToMachineList) - .newAny(CASING_INDEX, 2)) - .addElement( - 'r', - OutputHatch.withAdder(GT_TileEntity_MegaOilCracker::addRightHatchToMachineList) - .newAny(CASING_INDEX, 3)) - .addElement( - 'm', - buildHatchAdder(GT_TileEntity_MegaOilCracker.class).atLeast(Energy.or(ExoticEnergy), Maintenance, InputBus) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(GregTech_API.sBlockCasings4, 1)) - .addElement( - 'M', - InputHatch.withAdder(GT_TileEntity_MegaOilCracker::addMiddleInputToMachineList) - .newAny(CASING_INDEX, 4)) - .addElement( - 'g', - withChannel( - "glass", - BorosilicateGlass - .ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier))) - .build(); - private byte glassTier; - private HeatingCoilLevel heatLevel; - protected final List mMiddleInputHatches = new ArrayList<>(); - protected int mInputOnSide = -1; - protected int mOutputOnSide = -1; - - public GT_TileEntity_MegaOilCracker(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_TileEntity_MegaOilCracker(String aName) { - super(aName); - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Cracker") - .addInfo("Controller block for the Mega Oil Cracking") - .addInfo("Thermally cracks heavy hydrocarbons into lighter fractions") - .addInfo("More efficient than the Chemical Reactor") - .addInfo("Gives different benefits whether it hydro or steam-cracks:") - .addInfo("Hydro - Consumes 20% less Hydrogen and outputs 25% more cracked fluid") - .addInfo("Steam - Outputs 50% more cracked fluid") - .addInfo("(Values compared to cracking in the Chemical Reactor)") - .addInfo("Place the appropriate circuit in the controller or an input bus") - .addInfo( - GT_Values.TIER_COLORS[8] + GT_Values.VN[8] - + EnumChatFormatting.GRAY - + "-tier glass required for " - + EnumChatFormatting.BLUE - + "Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.GRAY - + " Laser Hatches.") - .addSeparator() - .beginStructureBlock(13, 7, 9, true) - .addController("Front bottom") - .addStructureInfo("The glass tier limits the Energy Input tier") - .addInfo("Gets 10% EU/t reduction per coil tier, up to a maximum of 50%") - .addEnergyHatch("Hint block", 1) - .addMaintenanceHatch("Hint block", 1) - .addInputHatch("Hint block", 2, 3) - .addOutputHatch("Hint block", 2, 3) - .addInputHatch("Steam/Hydrogen ONLY, Hint block", 4) - .addInputBus("Optional, for programmed circuit automation. Hint block", 1) - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); - return tt; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_TileEntity_MegaOilCracker(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.crackingRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Override - @Nonnull - public CheckRecipeResult process() { - this.setEuModifier( - 1.0F - Math.min(0.1F * (GT_TileEntity_MegaOilCracker.this.heatLevel.getTier() + 1), 0.5F)); - return super.process(); - } - }.setMaxParallel(ConfigHandler.megaMachinesMax); - } - - public HeatingCoilLevel getCoilLevel() { - return this.heatLevel; - } - - public void setCoilLevel(HeatingCoilLevel aCoilLevel) { - this.heatLevel = aCoilLevel; - } - - @Override - public void construct(ItemStack aStack, boolean aHintsOnly) { - this.buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 6, 6, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (this.mMachine) return -1; - int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); - return this - .survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 6, 6, 0, realBudget, source, actor, false, true); - } - // -------------- TEC TECH COMPAT ---------------- - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.glassTier = 0; - this.mInputOnSide = -1; - this.mOutputOnSide = -1; - this.mMiddleInputHatches.clear(); - - if (!this.checkPiece(STRUCTURE_PIECE_MAIN, 6, 6, 0) || this.mMaintenanceHatches.size() != 1) return false; - - if (this.glassTier < 8) { - for (int i = 0; i < this.mExoticEnergyHatches.size(); ++i) { - GT_MetaTileEntity_Hatch hatch = this.mExoticEnergyHatches.get(i); - if (hatch.getConnectionType() == GT_MetaTileEntity_Hatch.ConnectionType.LASER) { - return false; - } - if (this.glassTier < hatch.mTier) { - return false; - } - } - for (int i = 0; i < this.mEnergyHatches.size(); ++i) { - if (this.glassTier < this.mEnergyHatches.get(i).mTier) { - return false; - } - } - } - - return true; - } - - private boolean addLeftHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - if (this.mInputOnSide == 1) { - return false; - } - this.mInputOnSide = 0; - this.mOutputOnSide = 1; - GT_MetaTileEntity_Hatch_Input tHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - tHatch.updateTexture(aBaseCasingIndex); - tHatch.mRecipeMap = this.getRecipeMap(); - return this.mInputHatches.add(tHatch); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - if (this.mOutputOnSide == 1) { - return false; - } - this.mInputOnSide = 1; - this.mOutputOnSide = 0; - GT_MetaTileEntity_Hatch_Output tHatch = (GT_MetaTileEntity_Hatch_Output) aMetaTileEntity; - tHatch.updateTexture(aBaseCasingIndex); - return this.mOutputHatches.add(tHatch); - } - return false; - } - - private boolean addRightHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - if (this.mInputOnSide == 0) { - return false; - } - this.mInputOnSide = 1; - this.mOutputOnSide = 0; - GT_MetaTileEntity_Hatch_Input tHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - tHatch.updateTexture(aBaseCasingIndex); - tHatch.mRecipeMap = this.getRecipeMap(); - return this.mInputHatches.add(tHatch); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - if (this.mOutputOnSide == 0) { - return false; - } - this.mInputOnSide = 0; - this.mOutputOnSide = 1; - GT_MetaTileEntity_Hatch_Output tHatch = (GT_MetaTileEntity_Hatch_Output) aMetaTileEntity; - tHatch.updateTexture(aBaseCasingIndex); - return this.mOutputHatches.add(tHatch); - } - return false; - } - - private boolean addMiddleInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input tHatch) { - tHatch.updateTexture(aBaseCasingIndex); - tHatch.mRecipeMap = this.getRecipeMap(); - return this.mMiddleInputHatches.add(tHatch); - } - return false; - } - - @Override - public ArrayList getStoredFluids() { - final ArrayList rList = new ArrayList<>(); - Map inputsFromME = new HashMap<>(); - for (final GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) { - tHatch.mRecipeMap = getRecipeMap(); - if (tHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { - for (FluidStack tFluid : meHatch.getStoredFluids()) { - if (tFluid != null && !getRecipeMap().getBackend() - .isValidCatalystFluid(tFluid)) { - inputsFromME.put(tFluid.getFluid(), tFluid); - } - } - } else if (tHatch instanceof GT_MetaTileEntity_Hatch_MultiInput) { - for (final FluidStack tFluid : ((GT_MetaTileEntity_Hatch_MultiInput) tHatch).getStoredFluid()) { - if (tFluid != null && !getRecipeMap().getBackend() - .isValidCatalystFluid(tFluid)) { - rList.add(tFluid); - } - } - } else { - if (tHatch.getFillableStack() != null) { - if (!getRecipeMap().getBackend() - .isValidCatalystFluid(tHatch.getFillableStack())) rList.add(tHatch.getFillableStack()); - } - } - } - for (final GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mMiddleInputHatches)) { - tHatch.mRecipeMap = getRecipeMap(); - if (tHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { - for (FluidStack tFluid : meHatch.getStoredFluids()) { - if (tFluid != null && getRecipeMap().getBackend() - .isValidCatalystFluid(tFluid)) { - inputsFromME.put(tFluid.getFluid(), tFluid); - } - } - } else if (tHatch instanceof GT_MetaTileEntity_Hatch_MultiInput) { - for (final FluidStack tFluid : ((GT_MetaTileEntity_Hatch_MultiInput) tHatch).getStoredFluid()) { - if (tFluid != null && getRecipeMap().getBackend() - .isValidCatalystFluid(tFluid)) { - rList.add(tFluid); - } - } - } else { - if (tHatch.getFillableStack() != null) { - final FluidStack tStack = tHatch.getFillableStack(); - if (getRecipeMap().getBackend() - .isValidCatalystFluid(tStack)) { - rList.add(tStack); - } - } - } - } - if (!inputsFromME.isEmpty()) { - rList.addAll(inputsFromME.values()); - } - return rList; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - batchMode = !batchMode; - if (batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); - } - return true; - } - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - protected void startRecipeProcessing() { - for (GT_MetaTileEntity_Hatch_Input hatch : filterValidMTEs(mMiddleInputHatches)) { - if (hatch instanceof IRecipeProcessingAwareHatch aware) { - aware.startRecipeProcessing(); - } - } - super.startRecipeProcessing(); - } - - @Override - protected void endRecipeProcessing() { - super.endRecipeProcessing(); - for (GT_MetaTileEntity_Hatch_Input hatch : filterValidMTEs(mMiddleInputHatches)) { - if (hatch instanceof IRecipeProcessingAwareHatch aware) { - setResultIfFailure(aware.endRecipeProcessing(this)); - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java deleted file mode 100644 index c5c4b09d13..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/multis/mega/GT_TileEntity_MegaVacuumFreezer.java +++ /dev/null @@ -1,535 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.multis.mega; - -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTWORKS; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.GT_HatchElement.ExoticEnergy; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Optional; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.blocks.GT_Block_Casings_Abstract; - -public class GT_TileEntity_MegaVacuumFreezer extends GT_TileEntity_MegaMultiBlockBase - implements ISurvivalConstructable { - - public GT_TileEntity_MegaVacuumFreezer(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_TileEntity_MegaVacuumFreezer(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_TileEntity_MegaVacuumFreezer(this.mName); - } - - private int mCasingFrostProof = 0; - private int mTier = 1; - - private static class SubspaceCoolingFluid { - - public Materials material; - public int perfectOverclocks; - // Consumption per second of runtime - public long amount; - - public SubspaceCoolingFluid(Materials material, int perfectOverclocks, long amount) { - this.material = material; - this.perfectOverclocks = perfectOverclocks; - this.amount = amount; - } - - public FluidStack getStack() { - FluidStack stack = material.getFluid(amount); - // FUCK THIS FUCK THIS FUCK THIS - if (stack == null) { - return material.getMolten(amount); - } - return stack; - } - } - - private static final ArrayList SUBSPACE_COOLING_FLUIDS = new ArrayList<>( - Arrays.asList( - new SubspaceCoolingFluid(MaterialsUEVplus.SpaceTime, 1, 7500), - new SubspaceCoolingFluid(MaterialsUEVplus.Space, 2, 5000), - new SubspaceCoolingFluid(MaterialsUEVplus.Eternity, 3, 2500))); - - private SubspaceCoolingFluid currentCoolingFluid = null; - - private static final int CASING_INDEX = 17; - private static final int CASING_INDEX_T2 = ((GT_Block_Casings_Abstract) GregTech_API.sBlockCasings8) - .getTextureIndex(14); - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final String STRUCTURE_PIECE_MAIN_T2 = "main_t2"; - - private static final String[][] structure = transpose( - new String[][] { - { "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", - "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", - "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAA~AAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", - "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", - "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA", "AAAAAAAAAAAAAAA" } }); - private static final String[][] structure_tier2 = new String[][] { - { "AAAAAAAAAAAAAAA", "ABBBBBBBBBBBBBA", "ABAAAAAAAAAAABA", "ABABBBBBBBBBABA", "ABABAAAAAAABABA", - "ABABABBBBBABABA", "ABABABAAABABABA", "ABABABA~ABABABA", "ABABABAAABABABA", "ABABABBBBBABABA", - "ABABAAAAAAABABA", "ABABBBBBBBBBABA", "ABAAAAAAAAAAABA", "ABBBBBBBBBBBBBA", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "B B", "B B", "B B", - "B B", "B B", "B B", "B B", "B B", - "B B", "B B", "B B", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "B B", - "B B", "B B", "B B", "B B", "B B", - "B B", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", - "B B", "B B", "B B", "B B", "B B", - "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", - "B B", "A A", "A A", "A A", "B B", - "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", - "B B", "A A", "A A", "A A", "B B", - "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", - "B B", "A A", "A A", "A A", "B B", - "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", - "B B", "B B", "B B", "B B", "B B", - "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "A A", "B B", "B B", - "B B", "B B", "B B", "B B", "B B", - "B B", "B B", "A A", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "A A", "A A", "A A", - "A A", "A A", "A A", "A A", "A A", - "A A", "A A", "A A", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "B B", "B B", "B B", "B B", - "B B", "B B", "B B", "B B", "B B", - "B B", "B B", "B B", "B B", "AAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAA", "ABBBBBBBBBBBBBA", "ABAAAAAAAAAAABA", "ABABBBBBBBBBABA", "ABABAAAAAAABABA", - "ABABABBBBBABABA", "ABABABAAABABABA", "ABABABAAABABABA", "ABABABAAABABABA", "ABABABBBBBABABA", - "ABABAAAAAAABABA", "ABABBBBBBBBBABA", "ABAAAAAAAAAAABA", "ABBBBBBBBBBBBBA", "AAAAAAAAAAAAAAA" } }; - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, structure) - .addShape(STRUCTURE_PIECE_MAIN_T2, structure_tier2) - .addElement( - 'A', - buildHatchAdder(GT_TileEntity_MegaVacuumFreezer.class) - .atLeast(Energy.or(ExoticEnergy), InputHatch, InputBus, OutputHatch, OutputBus, Maintenance) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(onElementPass(x -> x.mCasingFrostProof++, ofBlock(GregTech_API.sBlockCasings2, 1)))) - // Infinity Cooled Casing - .addElement('B', ofBlock(GregTech_API.sBlockCasings8, 14)) - .build(); - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Vacuum Freezer") - .addInfo("Controller Block for the Mega Vacuum Freezer") - .addInfo("Cools hot ingots and cells") - .addSeparator() - .addInfo("Upgrade to Tier 2 to unlock " + EnumChatFormatting.LIGHT_PURPLE + "Subspace Cooling.") - .addInfo( - "To activate " + EnumChatFormatting.LIGHT_PURPLE - + "Subspace Cooling " - + EnumChatFormatting.GRAY - + "supply a coolant while running recipes.") - .addInfo( - EnumChatFormatting.RED + "7500 L/s " - + EnumChatFormatting.DARK_PURPLE - + "Molten SpaceTime" - + EnumChatFormatting.GRAY - + ": " - + EnumChatFormatting.RED - + "1" - + EnumChatFormatting.GRAY - + " perfect overclock.") - .addInfo( - EnumChatFormatting.RED + "5000 L/s " - + EnumChatFormatting.DARK_PURPLE - + "Spatially Enlarged Fluid" - + EnumChatFormatting.GRAY - + ": " - + EnumChatFormatting.RED - + "2" - + EnumChatFormatting.GRAY - + " perfect overclocks.") - .addInfo( - EnumChatFormatting.RED + "2500 L/s " - + EnumChatFormatting.DARK_PURPLE - + "Molten Eternity" - + EnumChatFormatting.GRAY - + ": " - + EnumChatFormatting.RED - + "3" - + EnumChatFormatting.GRAY - + " perfect overclocks.") - .addSeparator() - .addInfo( - EnumChatFormatting.LIGHT_PURPLE + "Reinforcing the structure allows the injection of exotic coolants,") - .addInfo( - EnumChatFormatting.LIGHT_PURPLE - + "enabling the capture of heat energy in miniature tears in spacetime,") - .addInfo(EnumChatFormatting.LIGHT_PURPLE + "massively increasing the efficiency of the cooling process.") - .addSeparator() - .beginStructureBlock(15, 15, 15, true) - .addController("Front center") - .addEnergyHatch("Any Frost Proof Machine Casing", 1) - .addMaintenanceHatch("Any Frost Proof Machine Casing", 1) - .addInputHatch("Any Frost Proof Machine Casing", 1) - .addOutputHatch("Any Frost Proof Machine Casing", 1) - .addInputBus("Any Frost Proof Machine Casing", 1) - .addOutputBus("Any Frost Proof Machine Casing", 1) - .addStructureInfo( - EnumChatFormatting.BLUE + "Base Multi (Tier " - + EnumChatFormatting.DARK_PURPLE - + 1 - + EnumChatFormatting.BLUE - + "):") - .addCasingInfoMinColored( - "Frost Proof Machine Casing", - EnumChatFormatting.GRAY, - 800, - EnumChatFormatting.GOLD, - false) - .addStructureInfo( - EnumChatFormatting.BLUE + "Tier " - + EnumChatFormatting.DARK_PURPLE - + 2 - + EnumChatFormatting.BLUE - + " (Upgrades from Tier " - + EnumChatFormatting.DARK_PURPLE - + 1 - + EnumChatFormatting.BLUE - + "):") - .addCasingInfoMinColored( - "Frost Proof Machine Casing", - EnumChatFormatting.GRAY, - 700, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Infinity Cooled Casing", - EnumChatFormatting.GRAY, - 384, - EnumChatFormatting.GOLD, - false) - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTWORKS); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack aStack, boolean aHintsOnly) { - if (aStack.stackSize == 1) { - this.buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 7, 7, 0); - } else { - this.buildPiece(STRUCTURE_PIECE_MAIN_T2, aStack, aHintsOnly, 7, 7, 0); - } - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (this.mMachine) return -1; - int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); - if (stackSize.stackSize == 1) { - return this - .survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 7, 7, 0, realBudget, source, actor, false, true); - } else { - return this.survivialBuildPiece( - STRUCTURE_PIECE_MAIN_T2, - stackSize, - 7, - 7, - 0, - realBudget, - source, - actor, - false, - true); - } - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.vacuumFreezerRecipes; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (!aNBT.hasKey(BATCH_MODE_NBT_KEY)) { - this.batchMode = aNBT.getBoolean("mUseMultiparallelMode"); - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - this.batchMode = !this.batchMode; - if (this.batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); - } - return true; - } - return false; - } - - public SubspaceCoolingFluid findSubspaceCoolingFluid() { - // Loop over all hatches and find the first match with a valid fluid - for (GT_MetaTileEntity_Hatch_Input hatch : mInputHatches) { - Optional fluid = SUBSPACE_COOLING_FLUIDS.stream() - .filter(candidate -> drain(hatch, candidate.getStack(), false)) - .findFirst(); - if (fluid.isPresent()) return fluid.get(); - } - return null; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - // Check if the freezer is T2 - if (mTier == 1) return super.createOverclockCalculator(recipe); - - // First try to detect the current fluid used for subspace cooling. - currentCoolingFluid = findSubspaceCoolingFluid(); - - return super.createOverclockCalculator(recipe) - .setMachineHeat(currentCoolingFluid == null ? 0 : currentCoolingFluid.perfectOverclocks * 1800) - .setRecipeHeat(0) - .setHeatOC(true) - .setHeatDiscount(false); - } - }.setMaxParallel(ConfigHandler.megaMachinesMax); - } - - @Override - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.runMachine(aBaseMetaTileEntity, aTick); - // Every second while running, consume subspace coolant fluid - if (mMaxProgresstime > 0 && aTick % 20 == 0) { - // Subspace cooling only allowed for T2 freezer - if (mTier == 2) { - // Try to drain the coolant fluid if it exists. If failed, stop the machine with an error - if (this.currentCoolingFluid != null) { - FluidStack fluid = this.currentCoolingFluid.getStack(); - for (GT_MetaTileEntity_Hatch_Input hatch : mInputHatches) { - if (drain(hatch, fluid, false)) { - drain(hatch, fluid, true); - return; - } - } - // If we exited this loop without returning from the function, no matching fluid was found, so - // stop the machine - we ran out of coolant - stopMachine(ShutDownReasonRegistry.outOfFluid(fluid)); - } - } - } - } - - // -------------- TEC TECH COMPAT ---------------- - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.mCasingFrostProof = 0; - this.mTier = 1; - // If check for T1 fails, also do a check for T2 structure - if (!this.checkPiece(STRUCTURE_PIECE_MAIN, 7, 7, 0)) { - // Reset mCasing in between checks, so they don't count again - this.mCasingFrostProof = 0; - if (!this.checkPiece(STRUCTURE_PIECE_MAIN_T2, 7, 7, 0)) { - return false; - } - // Structure is Tier 2 - this.mTier = 2; - } - return this.mMaintenanceHatches.size() == 1 && this.mCasingFrostProof >= 700; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - ITexture[] rTexture; - if (side == facing) { - if (aActive) { - rTexture = new ITexture[] { casingTexturePages[0][17], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { casingTexturePages[0][17], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_VACUUM_FREEZER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { casingTexturePages[0][17] }; - } - return rTexture; - } - - @Override - public String[] getInfoData() { - ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add("Tier: " + mTier); - if (mTier == 2) { - if (currentCoolingFluid != null) { - info.add( - "Subspace cooling: " + EnumChatFormatting.GREEN - + "Active (" - + currentCoolingFluid.getStack() - .getLocalizedName() - + ")"); - } else { - info.add("Subspace cooling: " + EnumChatFormatting.RED + "Inactive"); - } - } - return info.toArray(new String[] {}); - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_AcidGenerator.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_AcidGenerator.java deleted file mode 100644 index 5dc2ccdde5..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_AcidGenerator.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.tiered; - -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps; -import com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference; - -import gregtech.api.enums.GT_Values; -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_BasicGenerator; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_AcidGenerator extends GT_MetaTileEntity_BasicGenerator { - - public GT_MetaTileEntity_AcidGenerator(int aID, String aName, String aNameRegional, int aTier, - ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, new String[] {}, aTextures); - } - - public GT_MetaTileEntity_AcidGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public int getPollution() { - return 0; - } - - @Override - public RecipeMap getRecipeMap() { - return BartWorksRecipeMaps.acidGenFuels; - } - - @Override - public int getEfficiency() { - return 100 - 3 * this.mTier; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_AcidGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public ITexture[] getFront(byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL), - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBack(byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; - } - - @Override - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; - } - - @Override - public ITexture[] getTop(byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL), - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_GLOW")) - .glow() - .build() }; - } - - @Override - public ITexture[] getSides(byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; - } - - @Override - public ITexture[] getFrontActive(byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL), - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBackActive(byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; - } - - @Override - public ITexture[] getBottomActive(byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; - } - - @Override - public ITexture[] getTopActive(byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL), - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_ACTIVE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_ACTIVE_GLOW")) - .glow() - .build() }; - } - - @Override - public ITexture[] getSidesActive(byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD) }; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public String[] getDescription() { - return new String[] { StatCollector.translateToLocal("tooltip.tile.acidgen.0.name"), - StatCollector.translateToLocal("tooltip.tile.acidgen.1.name"), - StatCollector.translateToLocal("tooltip.tile.tiereddsc.0.name") + " " - + EnumChatFormatting.YELLOW - + GT_Values.V[this.mTier], - StatCollector.translateToLocal("tooltip.rotor.2.name") + " " - + EnumChatFormatting.YELLOW - + this.getEfficiency(), - StatCollector.translateToLocal("tooltip.tile.tiereddsc.2.name") + " " - + EnumChatFormatting.YELLOW - + this.maxAmperesOut(), - BW_Tooltip_Reference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get() }; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_BioLab.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_BioLab.java deleted file mode 100644 index d2ef329066..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_BioLab.java +++ /dev/null @@ -1,412 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.tiered; - -import static gregtech.api.enums.Mods.Gendustry; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps; -import com.github.bartimaeusnek.bartworks.common.items.LabModule; -import com.github.bartimaeusnek.bartworks.common.items.LabParts; -import com.github.bartimaeusnek.bartworks.common.loaders.BioCultureLoader; -import com.github.bartimaeusnek.bartworks.common.loaders.BioItemList; -import com.github.bartimaeusnek.bartworks.common.loaders.FluidLoader; -import com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference; -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.github.bartimaeusnek.bartworks.util.BioCulture; -import com.github.bartimaeusnek.bartworks.util.BioDNA; -import com.github.bartimaeusnek.bartworks.util.BioData; -import com.github.bartimaeusnek.bartworks.util.BioPlasmid; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -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_BasicMachine; -import gregtech.api.objects.XSTR; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.behaviors.Behaviour_DataOrb; - -public class GT_MetaTileEntity_BioLab extends GT_MetaTileEntity_BasicMachine { - - private static final int DNA_EXTRACTION_MODULE = 0; - private static final int PCR_THERMOCYCLE_MODULE = 1; - private static final int PLASMID_SYNTHESIS_MODULE = 2; - private static final int TRANSFORMATION_MODULE = 3; - private static final int CLONAL_CELLULAR_SYNTHESIS_MODULE = 4; - private static final int INCUBATION_MODULE = 5; - - public GT_MetaTileEntity_BioLab(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, - (String) null, - 6, - 2, - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/fluid_extractor/OVERLAY_SIDE_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon("basicmachines/fluid_extractor/OVERLAY_SIDE_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/fluid_extractor/OVERLAY_SIDE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/fluid_extractor/OVERLAY_SIDE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/microwave/OVERLAY_FRONT_ACTIVE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/microwave/OVERLAY_FRONT_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/microwave/OVERLAY_FRONT")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/microwave/OVERLAY_FRONT_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_ACTIVE_GLOW")) - .glow() - .build() /* this is topactive */), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/chemical_reactor/OVERLAY_FRONT_GLOW")) - .glow() - .build() /* this is top */), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/polarizer/OVERLAY_BOTTOM_ACTIVE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/polarizer/OVERLAY_BOTTOM_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/polarizer/OVERLAY_BOTTOM")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/polarizer/OVERLAY_BOTTOM_GLOW")) - .glow() - .build())); - } - - public GT_MetaTileEntity_BioLab(String aName, int aTier, int aAmperage, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aAmperage, aDescription, aTextures, 6, 2); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_BioLab( - this.mName, - this.mTier, - this.mAmperage, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return BartWorksRecipeMaps.bioLabRecipes; - } - - @Override - public int getCapacity() { - return this.mTier * 1000; - } - - @Override - public int checkRecipe(boolean skipOC) { - - int rTier = 3; - FluidStack dnaFluid = Gendustry.isModLoaded() ? FluidRegistry.getFluidStack("liquiddna", 1000) - : Materials.Biomass.getFluid(1000L); - - if (this.getSpecialSlot() != null && this.getSpecialSlot() - .getItem() instanceof LabModule) { - int damage = this.getSpecialSlot() - .getItemDamage(); - switch (damage) { - case DNA_EXTRACTION_MODULE: - if (GT_Utility.isStackValid(this.mInventory[this.getInputSlot()]) - && this.mInventory[this.getInputSlot()].getItem() instanceof LabParts - && this.mInventory[this.getInputSlot()].getItemDamage() == 0 - && this.mInventory[this.getInputSlot()].getTagCompound() != null - && // checks if it is a Culture - GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 1]) - && this.mInventory[this.getInputSlot() + 1].getItem() instanceof LabParts - && this.mInventory[this.getInputSlot() + 1].getItemDamage() == 1 - && this.mInventory[this.getInputSlot() + 1].getTagCompound() == null - && GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 2]) - && this.mInventory[this.getInputSlot() + 2].getItem() instanceof LabParts - && this.mInventory[this.getInputSlot() + 2].getItemDamage() == 3 - && GT_Utility - .areStacksEqual(this.mInventory[this.getInputSlot() + 3], Materials.Ethanol.getCells(1)) - && this.mFluid != null - && this.mFluid.isFluidEqual(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) - && this.mFluid.amount >= 1000) { - - NBTTagCompound DNABioDataTag = this.mInventory[this.getInputSlot()].getTagCompound() - .getCompoundTag("DNA"); - if (DNABioDataTag == null) return super.checkRecipe(skipOC); - BioData cultureDNABioData = BioData.getBioDataFromName( - this.mInventory[this.getInputSlot()].getTagCompound() - .getCompoundTag("DNA") - .getString("Name")); - if (cultureDNABioData == null) return super.checkRecipe(skipOC); - - if (this.mTier < rTier + cultureDNABioData.getTier()) - return GT_MetaTileEntity_BasicMachine.FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - - for (int i = 0; i < 4; i++) { - if (this.mInventory[this.getInputSlot() + i] != null) - this.mInventory[this.getInputSlot() + i].stackSize--; - } - - this.mFluid.amount -= 1000; - - if (cultureDNABioData.getChance() > new XSTR().nextInt(10000)) { - this.mOutputItems[0] = BioItemList - .getDNASampleFlask(BioDNA.convertDataToDNA(cultureDNABioData)); - } - this.mOutputItems[1] = GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1L); - this.calculateOverclockedNess( - BW_Util.getMachineVoltageFromTier(rTier + cultureDNABioData.getTier()), - 500); - - return GT_MetaTileEntity_BasicMachine.FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - break; - case PCR_THERMOCYCLE_MODULE: { - if (GT_Utility.isStackValid(this.mInventory[this.getInputSlot()]) - && this.mInventory[this.getInputSlot()].getItem() instanceof LabParts - && this.mInventory[this.getInputSlot()].getItemDamage() == 1 - && this.mInventory[this.getInputSlot()].getTagCompound() != null - && // checks if it is a Culture - GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 3]) - && GT_Utility - .areStacksEqual(this.mInventory[this.getInputSlot() + 3], ItemList.Tool_DataOrb.get(1L)) - && GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 1]) - && GT_Utility - .areStacksEqual(this.mInventory[this.getInputSlot() + 1], FluidLoader.BioLabFluidCells[0]) - && GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 2]) - && GT_Utility - .areStacksEqual(this.mInventory[this.getInputSlot() + 2], FluidLoader.BioLabFluidCells[3]) - && this.mFluid != null - && this.mFluid.isFluidEqual(dnaFluid) - && this.mFluid.amount >= 1000) { - NBTTagCompound DNABioDataTag = this.mInventory[this.getInputSlot()].getTagCompound(); - if (DNABioDataTag == null) return super.checkRecipe(skipOC); - BioData cultureDNABioData = BioData.getBioDataFromName(DNABioDataTag.getString("Name")); - if (cultureDNABioData == null) return super.checkRecipe(skipOC); - - if (this.mTier < 1 + rTier + cultureDNABioData.getTier()) - return GT_MetaTileEntity_BasicMachine.FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - - for (int i = 0; i < 4; i++) { - if (this.mInventory[this.getInputSlot() + i] != null) - this.mInventory[this.getInputSlot() + i].stackSize--; - } - - this.mFluid.amount -= 1000; - - ItemStack Outp = ItemList.Tool_DataOrb.get(1L); - Behaviour_DataOrb.setDataTitle(Outp, "DNA Sample"); - Behaviour_DataOrb.setDataName(Outp, cultureDNABioData.getName()); - - if (cultureDNABioData.getChance() > new XSTR().nextInt(10000)) { - this.mOutputItems[0] = Outp; - } else this.mOutputItems[0] = ItemList.Tool_DataOrb.get(1L); - this.mOutputItems[1] = ItemList.Cell_Empty.get(2L); - - this.calculateOverclockedNess( - BW_Util.getMachineVoltageFromTier(1 + rTier + cultureDNABioData.getTier()), - 500); - - return GT_MetaTileEntity_BasicMachine.FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - } - break; - case PLASMID_SYNTHESIS_MODULE: { - ItemStack inp2 = ItemList.Tool_DataOrb.get(1L); - Behaviour_DataOrb.setDataTitle(inp2, "DNA Sample"); - Behaviour_DataOrb.setDataName(inp2, BioCultureLoader.BIO_DATA_BETA_LACMATASE.getName()); - if (GT_Utility.isStackValid(this.mInventory[this.getInputSlot()]) - && GT_Utility - .areStacksEqual(FluidLoader.BioLabFluidCells[1], this.mInventory[this.getInputSlot()]) - && // checks - // if - // it - // is - // a - // Culture - GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 1]) - && GT_Utility - .areStacksEqual(this.mInventory[this.getInputSlot() + 1], BioItemList.getPlasmidCell(null)) - && GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 2]) - && GT_Utility.areStacksEqual( - this.mInventory[this.getInputSlot() + 2], - ItemList.Tool_DataOrb.get(1L), - true) - && "DNA Sample".equals(Behaviour_DataOrb.getDataTitle(this.mInventory[this.getInputSlot() + 2])) - && !Behaviour_DataOrb.getDataName(this.mInventory[this.getInputSlot() + 2]) - .isEmpty() - && GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 3]) - && GT_Utility.areStacksEqual(this.mInventory[this.getInputSlot() + 3], inp2) - && this.mFluid != null - && this.mFluid.isFluidEqual(dnaFluid) - && this.mFluid.amount >= 1000) { - BioData cultureDNABioData = BioData.getBioDataFromName( - Behaviour_DataOrb.getDataName(this.mInventory[this.getInputSlot() + 2])); - if (cultureDNABioData == null) return super.checkRecipe(skipOC); - if (this.mTier < 1 + rTier + cultureDNABioData.getTier()) - return GT_MetaTileEntity_BasicMachine.FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - for (int i = 0; i < 2; i++) { - if (this.mInventory[this.getInputSlot() + i] != null) - this.mInventory[this.getInputSlot() + i].stackSize--; - } - this.mFluid.amount -= 1000; - if (cultureDNABioData.getChance() > new XSTR().nextInt(10000)) { - this.mOutputItems[0] = BioItemList - .getPlasmidCell(BioPlasmid.convertDataToPlasmid(cultureDNABioData)); - } - this.mOutputItems[1] = ItemList.Cell_Empty.get(1L); - this.calculateOverclockedNess( - BW_Util.getMachineVoltageFromTier(1 + rTier + cultureDNABioData.getTier()), - 500); - return GT_MetaTileEntity_BasicMachine.FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - } - break; - case TRANSFORMATION_MODULE: { - if (GT_Utility.isStackValid(this.mInventory[this.getInputSlot()]) - && GT_Utility - .areStacksEqual(this.mInventory[this.getInputSlot()], BioItemList.getPetriDish(null), true) - && this.mInventory[this.getInputSlot()].getTagCompound() != null - && GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 1]) - && GT_Utility.areStacksEqual( - this.mInventory[this.getInputSlot() + 1], - BioItemList.getPlasmidCell(null), - true) - && this.mInventory[this.getInputSlot() + 1].getTagCompound() != null - && GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 2]) - && GT_Utility - .areStacksEqual(this.mInventory[this.getInputSlot() + 2], FluidLoader.BioLabFluidCells[2]) - && this.mFluid != null - && this.mFluid.isFluidEqual(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) - && this.mFluid.amount >= 1000) { - BioData cultureDNABioData = BioData - .getBioDataFromNBTTag(this.mInventory[this.getInputSlot() + 1].getTagCompound()); - BioCulture bioCulture = BioCulture - .getBioCultureFromNBTTag(this.mInventory[this.getInputSlot()].getTagCompound()); - if (cultureDNABioData == null || bioCulture == null) return super.checkRecipe(skipOC); - if (this.mTier < 3 + rTier + cultureDNABioData.getTier()) - return GT_MetaTileEntity_BasicMachine.FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - for (int i = 0; i < 3; i++) { - if (this.mInventory[this.getInputSlot() + i] != null) - this.mInventory[this.getInputSlot() + i].stackSize--; - } - this.mFluid.amount -= 1000; - bioCulture = bioCulture.setPlasmid(BioPlasmid.convertDataToPlasmid(cultureDNABioData)); - if (cultureDNABioData.getChance() > new XSTR().nextInt(10000)) { - this.mOutputItems[0] = BioItemList.getPetriDish(bioCulture); - } - this.mOutputItems[1] = ItemList.Cell_Empty.get(1L); - this.calculateOverclockedNess( - BW_Util.getMachineVoltageFromTier(3 + rTier + cultureDNABioData.getTier()), - 500); - return GT_MetaTileEntity_BasicMachine.FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - } - break; - case CLONAL_CELLULAR_SYNTHESIS_MODULE: { - ItemStack Outp = ItemList.Tool_DataOrb.get(1L); - Behaviour_DataOrb.setDataTitle(Outp, "DNA Sample"); - - if (GT_Utility.isStackValid(this.mInventory[this.getInputSlot()]) - && GT_Utility - .areStacksEqual(this.mInventory[this.getInputSlot()], BioItemList.getPetriDish(null)) - && GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 1]) - && GT_Utility.areStacksEqual(this.mInventory[this.getInputSlot() + 1], BioItemList.getOther(4)) - && GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 2]) - && GT_Utility.areStacksEqual( - this.mInventory[this.getInputSlot() + 2], - ItemList.Circuit_Chip_Stemcell.get(2L)) - && GT_Utility.isStackValid(this.mInventory[this.getInputSlot() + 3]) - && GT_Utility.areStacksEqual( - this.mInventory[this.getInputSlot() + 3], - ItemList.Tool_DataOrb.get(1L), - true) - && "DNA Sample".equals(Behaviour_DataOrb.getDataTitle(this.mInventory[this.getInputSlot() + 3])) - && this.mFluid.isFluidEqual(dnaFluid) - && this.mFluid.amount >= 8000) { - - BioData cultureDNABioData = BioData.getBioDataFromName( - Behaviour_DataOrb.getDataName(this.mInventory[this.getInputSlot() + 3])); - if (cultureDNABioData == null) return super.checkRecipe(skipOC); - if (this.mTier < 3 + rTier + cultureDNABioData.getTier()) - return GT_MetaTileEntity_BasicMachine.FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - for (int i = 0; i < 3; i++) { - if (this.mInventory[this.getInputSlot() + i] != null) - this.mInventory[this.getInputSlot() + i].stackSize--; - } - this.mFluid.amount -= 8000; - if (cultureDNABioData.getChance() > new XSTR().nextInt(10000)) { - BioCulture out = BioCulture.getBioCulture(BioDNA.convertDataToDNA(cultureDNABioData)); - if (out == null) return GT_MetaTileEntity_BasicMachine.DID_NOT_FIND_RECIPE; - out = out.setPlasmid(BioPlasmid.convertDataToPlasmid(cultureDNABioData)); - this.mOutputItems[0] = BioItemList.getPetriDish(out); - } - this.calculateOverclockedNess( - BW_Util.getMachineVoltageFromTier(3 + rTier + cultureDNABioData.getTier()), - 500); - return GT_MetaTileEntity_BasicMachine.FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - } - break; - case INCUBATION_MODULE: - default: - break; - } - } - return super.checkRecipe(skipOC); - } - - @Override - public String[] getDescription() { - return new String[] { StatCollector.translateToLocal("tooltip.tile.biolab.0.name"), - BW_Tooltip_Reference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get() }; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_CompressedFluidHatch.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_CompressedFluidHatch.java deleted file mode 100644 index e0903ce93c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_CompressedFluidHatch.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.tiered; - -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; - -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_CompressedFluidHatch extends GT_MetaTileEntity_Hatch_Input { - - public GT_MetaTileEntity_CompressedFluidHatch(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 0); - this.mDescriptionArray[1] = "Capacity: 100,000,000L"; - } - - public GT_MetaTileEntity_CompressedFluidHatch(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public int getCapacity() { - return 100_000_000; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return GT_Utility.areFluidsEqual(aFluid, Materials.LiquidAir.getFluid(1)); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_CompressedFluidHatch( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - protected FluidSlotWidget createFluidSlot() { - return super.createFluidSlot().setFilter(f -> f == Materials.LiquidAir.mFluid); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_Diode.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_Diode.java deleted file mode 100644 index 9d807abfa4..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_Diode.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.tiered; - -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.Diode12A_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.Diode16A_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.Diode2A_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.Diode4A_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.Diode8A_ULV; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicHull; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Diode extends GT_MetaTileEntity_BasicHull { - - private long maxAmps; - private long aAmps; - - public GT_MetaTileEntity_Diode(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, StatCollector.translateToLocal("tooltip.tile.diode.0.name")); - this.maxAmps = this.getAmpsfromMeta(aID); - this.aAmps = this.maxAmps; - } - - public GT_MetaTileEntity_Diode(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - if (this.maxAmps == 0 && !this.getBaseMetaTileEntity() - .getWorld().isRemote) { - this.maxAmps = this.getAmpsfromMeta( - this.getBaseMetaTileEntity() - .getMetaTileID()); - this.aAmps = this.maxAmps; - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - - if (this.getBaseMetaTileEntity() - .getWorld().isRemote) return; - if (!aPlayer.isSneaking()) { - --this.aAmps; - if (this.aAmps < 0) this.aAmps = this.maxAmps; - } else { - ++this.aAmps; - if (this.aAmps > this.maxAmps) this.aAmps = 0; - } - GT_Utility.sendChatToPlayer(aPlayer, "Max Amps: " + this.aAmps); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setLong("maxAmp", this.maxAmps); - aNBT.setLong("Amps", this.aAmps); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.maxAmps = aNBT.getLong("maxAmp"); - this.aAmps = aNBT.getLong("Amps"); - super.loadNBTData(aNBT); - } - - @Override - public long maxAmperesOut() { - return this.aAmps; - } - - @Override - public long maxAmperesIn() { - return this.aAmps; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Diode(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - private long getAmpsfromMeta(int meta) { - if (meta >= Diode2A_ULV.ID && meta <= Diode2A_MAX.ID) return 2L; - if (meta >= Diode4A_ULV.ID && meta <= Diode4A_MAX.ID) return 4L; - if (meta >= Diode8A_ULV.ID && meta <= Diode8A_MAX.ID) return 8L; - if (meta >= Diode12A_ULV.ID && meta <= Diode12A_MAX.ID) return 12L; - if (meta >= Diode16A_ULV.ID && meta <= Diode16A_MAX.ID) return 16L; - return 0L; - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll(this.mDescriptionArray); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_EnergyDistributor.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_EnergyDistributor.java deleted file mode 100644 index 0622789fa7..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_EnergyDistributor.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.tiered; - -import net.minecraft.util.StatCollector; - -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Transformer; - -public class GT_MetaTileEntity_EnergyDistributor extends GT_MetaTileEntity_Transformer { - - public GT_MetaTileEntity_EnergyDistributor(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, null); - } - - public GT_MetaTileEntity_EnergyDistributor(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_EnergyDistributor(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EnergyDistributor(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public long maxEUInput() { - return GT_Values.V[this.mTier]; - } - - @Override - public long maxEUOutput() { - return GT_Values.V[this.mTier]; - } - - @Override - public long maxAmperesOut() { - return 320; - } - - @Override - public long maxAmperesIn() { - return 320; - } - - @Override - public long maxEUStore() { - return 512L + GT_Values.V[this.mTier] * 320L; - } - - @Override - public String[] getDescription() { - return new String[] { StatCollector.translateToLocal("tooltip.tile.energydistributor.0.name") }; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_GiantOutputHatch.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_GiantOutputHatch.java deleted file mode 100644 index 8d5a756cb5..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_GiantOutputHatch.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.tiered; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; - -public class GT_MetaTileEntity_GiantOutputHatch extends GT_MetaTileEntity_Hatch_Output { - - public GT_MetaTileEntity_GiantOutputHatch(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 0); - this.mDescriptionArray[1] = "Capacity: 100000000L"; - } - - public GT_MetaTileEntity_GiantOutputHatch(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_GiantOutputHatch(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public int getCapacity() { - return 100000000; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_HumongousInputHatch.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_HumongousInputHatch.java deleted file mode 100644 index e9db8ac2d5..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_HumongousInputHatch.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.tiered; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; - -public class GT_MetaTileEntity_HumongousInputHatch extends GT_MetaTileEntity_Hatch_Input { - - public GT_MetaTileEntity_HumongousInputHatch(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 13); - this.mDescriptionArray[1] = "Capacity: 2,000,000,000L"; - } - - public GT_MetaTileEntity_HumongousInputHatch(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public int getCapacity() { - return 2_000_000_000; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_HumongousInputHatch( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java b/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java deleted file mode 100644 index 2644138bf3..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/common/tileentities/tiered/GT_MetaTileEntity_RadioHatch.java +++ /dev/null @@ -1,495 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.common.tileentities.tiered; - -import static gregtech.api.enums.GT_Values.ticksBetweenSounds; - -import java.util.Collections; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.modularUI.BW_UITextures; -import com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.util.BW_ColorUtil; -import com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference; -import com.github.bartimaeusnek.bartworks.util.MathUtils; -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; -import com.gtnewhorizons.modularui.api.drawable.shapes.Rectangle; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import com.gtnewhorizons.modularui.common.widget.ProgressBar.Direction; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.RecipeMapWorkable; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.items.ID_MetaTool_01; - -public class GT_MetaTileEntity_RadioHatch extends GT_MetaTileEntity_Hatch - implements RecipeMapWorkable, IAddGregtechLogo { - - private final int cap; - public int sievert; - private long timer = 1; - private long decayTime = 1; - private short[] colorForGUI = { 0x02, 0x02, 0x02 }; - private byte mass; - private String material; - private byte coverage; - private ItemStack lastUsedItem = null; - private boolean lastFail = false; - private GT_Recipe lastRecipe = null; - - public GT_MetaTileEntity_RadioHatch(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, - new String[] { StatCollector.translateToLocal("tooltip.tile.radhatch.0.name"), - StatCollector.translateToLocal("tooltip.tile.tiereddsc.3.name") + " " - + (aTier - 2) - + " " - + (aTier - 2 >= 2 ? StatCollector.translateToLocal("tooltip.bw.kg.1.name") - : StatCollector.translateToLocal("tooltip.bw.kg.0.name")), - StatCollector.translateToLocal("tooltip.tile.radhatch.1.name"), - BW_Tooltip_Reference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get() }); - this.cap = aTier - 2; - } - - public GT_MetaTileEntity_RadioHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures); - this.cap = aTier - 2; - } - - public int getSievert() { - return this.sievert - MathUtils.ceilInt(this.sievert / 100f * this.coverage); - } - - public short[] getColorForGUI() { - if (this.colorForGUI != null) return this.colorForGUI; - return this.colorForGUI = new short[] { 0xFA, 0xFA, 0xFF }; - } - - public byte getMass() { - return this.mass; - } - - public byte getCoverage() { - return this.coverage; - } - - public void setCoverage(short coverage) { - byte nu; - if (coverage > 100) nu = 100; - else if (coverage < 0) nu = 0; - else nu = (byte) coverage; - this.coverage = nu; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(Textures.BlockIcons.OVERLAY_PIPE_IN) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(Textures.BlockIcons.OVERLAY_PIPE_IN) }; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_RadioHatch(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - public void updateSlots() { - if (this.mInventory[0] != null && this.mInventory[0].stackSize <= 0) this.mInventory[0] = null; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - BaseMetaTileEntity myMetaTileEntity = (BaseMetaTileEntity) this.getBaseMetaTileEntity(); - if (myMetaTileEntity.isServerSide()) { - - if (this.mass > 0) { - ++this.timer; - } - - if (this.mass > 0 && (this.decayTime == 0 || this.decayTime > 0 && this.timer % this.decayTime == 0)) { - this.mass--; - if (this.mass == 0) { - this.material = StatCollector.translateToLocal("tooltip.bw.empty.name"); - this.sievert = 0; - } - this.timer = 1; - } - - if (myMetaTileEntity.mTickTimer > myMetaTileEntity.mLastSoundTick + ticksBetweenSounds - && this.sievert > 0) { - this.sendLoopStart((byte) 1); - myMetaTileEntity.mLastSoundTick = myMetaTileEntity.mTickTimer; - } - - if (this.mass == 0) { - ItemStack lStack = this.mInventory[0]; - - if (lStack == null) { - this.colorForGUI = new short[] { 0x37, 0x37, 0x37 }; - return; - } - ItemData itemData = GT_OreDictUnificator.getAssociation(lStack); - if (itemData != null) { - Materials mat = itemData.mMaterial.mMaterial; - this.colorForGUI = new short[] { mat.getRGBA()[0], mat.getRGBA()[1], mat.getRGBA()[2] }; - } else { - this.colorForGUI = new short[] { 0x37, 0x37, 0x37 }; - } - - if (this.lastFail && GT_Utility.areStacksEqual(this.lastUsedItem, lStack, true)) { - return; - } - - if (!this.lastFail && this.lastUsedItem != null && this.lastRecipe != null) { - if (GT_Utility.areStacksEqual(this.lastUsedItem, lStack, true)) { - this.mass = (byte) this.lastRecipe.mDuration; - this.decayTime = this.lastRecipe.mSpecialValue; - this.sievert = this.lastRecipe.mEUt; - this.material = this.lastUsedItem.getDisplayName(); - lStack.stackSize--; - this.updateSlots(); - } else { - this.lastRecipe = null; - } - } - - if (this.lastRecipe == null || this.lastFail) { - this.lastRecipe = BartWorksRecipeMaps.radioHatchRecipes.findRecipe( - this.getBaseMetaTileEntity(), - false, - Integer.MAX_VALUE - 7, - null, - this.mInventory[0]); - if (this.lastRecipe == null) { - this.lastFail = true; - this.lastUsedItem = this.mInventory[0] == null ? null : this.mInventory[0].copy(); - } else { - if (this.lastRecipe.mDuration > this.cap) { - this.lastFail = true; - this.lastUsedItem = this.mInventory[0].copy(); - return; - } - this.lastFail = false; - this.lastUsedItem = this.mInventory[0].copy(); - this.mass = (byte) this.lastRecipe.mDuration; - this.decayTime = this.lastRecipe.mSpecialValue; - this.sievert = this.lastRecipe.mEUt; - this.material = lStack.getDisplayName(); - lStack.stackSize--; - this.updateSlots(); - } - } - } - } - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - if (this.sievert != 0) return new String[] { - StatCollector.translateToLocal("tooltip.tile.radhatch.2.name") + " " - + StatCollector.translateToLocal(this.material), - StatCollector.translateToLocal("tooltip.tile.radhatch.3.name") + " " + this.sievert, - StatCollector.translateToLocal("tooltip.tile.radhatch.4.name") + " " + this.mass, - StatCollector.translateToLocal("tooltip.tile.radhatch.5.name") + " " - + (this.decayTime - this.timer % (this.decayTime * 60)) - + StatCollector.translateToLocal("tooltip.tile.radhatch.6.name") - + "/" - + (this.decayTime - this.timer % this.decayTime) / 20 - + StatCollector.translateToLocal("tooltip.tile.radhatch.7.name") - + "/" - + (this.decayTime - this.timer % this.decayTime) / 20 / 60 - + StatCollector.translateToLocal("tooltip.tile.radhatch.8.name") - + "/" - + (this.decayTime - this.timer % this.decayTime) / 20 / 60 / 60 - + StatCollector.translateToLocal("tooltip.tile.radhatch.9.name") }; - return new String[] { - StatCollector.translateToLocal("tooltip.tile.radhatch.2.name") + " " - + StatCollector.translateToLocal("tooltip.bw.empty.name"), - StatCollector.translateToLocal("tooltip.tile.radhatch.3.name") + " " + "0", - StatCollector.translateToLocal("tooltip.tile.radhatch.4.name") + " " + "0" }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == this.getBaseMetaTileEntity() - .getFrontFacing() && BartWorksRecipeMaps.radioHatchRecipes.containsInput(aStack); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setByte("mMass", this.mass); - aNBT.setByte("mSv", (byte) (this.sievert - 100)); - aNBT.setByte("mCoverage", this.coverage); - aNBT.setInteger("mTextColor", BW_ColorUtil.getColorFromRGBArray(this.getColorForGUI())); - if (this.material != null && !this.material.isEmpty()) aNBT.setString("mMaterial", this.material); - aNBT.setLong("timer", this.timer); - aNBT.setLong("decay", this.decayTime); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.timer = aNBT.getLong("timer"); - this.mass = aNBT.getByte("mMass"); - this.sievert = aNBT.getByte("mSv") + 100; - this.coverage = aNBT.getByte("mCoverage"); - this.colorForGUI = BW_ColorUtil.splitColorToRBGArray(aNBT.getInteger("mTextColor")); - this.material = aNBT.getString("mMaterial"); - this.decayTime = aNBT.getLong("decay"); - super.loadNBTData(aNBT); - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - ResourceLocation rl = new ResourceLocation(MainMod.MOD_ID, "hatch.RadOn"); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(rl, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public RecipeMap getRecipeMap() { - // Only for visual - return BartWorksRecipeMaps.radioHatchRecipes; - } - - private static final int RADIATION_SHUTTER_WINDOW_ID = 999; - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - buildContext.addSyncedWindow(RADIATION_SHUTTER_WINDOW_ID, this::createShutterWindow); - - this.getBaseMetaTileEntity() - .add1by1Slot(builder); - builder.widget( - new DrawableWidget().setBackground(BW_UITextures.PICTURE_SIEVERT_CONTAINER) - .setPos(61, 9) - .setSize(56, 24)) - .widget( - new ProgressBar().setProgress(() -> this.getSievert() / 148f) - .setDirection(Direction.RIGHT) - .setTexture(BW_UITextures.PROGRESSBAR_SIEVERT, 24) - .setPos(65, 13) - .setSize(48, 16)) - .widget( - new DrawableWidget().setBackground(BW_UITextures.PICTURE_DECAY_TIME_INSIDE) - .setPos(124, 18) - .setSize(16, 48)) - .widget(new DrawableWidget() { - - @Override - public void draw(float partialTicks) { - if (GT_MetaTileEntity_RadioHatch.this.decayTime > 0) { - int height = MathUtils.ceilInt( - 48 * ((GT_MetaTileEntity_RadioHatch.this.decayTime - - GT_MetaTileEntity_RadioHatch.this.timer % GT_MetaTileEntity_RadioHatch.this.decayTime) - / (float) GT_MetaTileEntity_RadioHatch.this.decayTime)); - new Rectangle() - .setColor( - Color.argb( - GT_MetaTileEntity_RadioHatch.this.colorForGUI[0], - GT_MetaTileEntity_RadioHatch.this.colorForGUI[1], - GT_MetaTileEntity_RadioHatch.this.colorForGUI[2], - 255)) - .draw(new Pos2d(0, 48 - height), new Size(16, height), partialTicks); - } - } - }.dynamicTooltip( - () -> Collections.singletonList( - StatCollector.translateToLocalFormatted( - "tooltip.tile.radhatch.10.name", - this.timer <= 1 ? 0 : (this.decayTime - this.timer) / 20, - this.timer <= 1 ? 0 : this.decayTime / 20))) - .setPos(124, 18) - .setSize(16, 48) - .attachSyncer( - new FakeSyncWidget.LongSyncer(() -> this.decayTime, val -> this.decayTime = val), - builder, - (widget, val) -> widget.notifyTooltipChange()) - .attachSyncer( - new FakeSyncWidget.LongSyncer(() -> this.timer, val -> this.timer = val), - builder, - (widget, val) -> widget.notifyTooltipChange())) - .widget(new FakeSyncWidget.ShortSyncer(() -> this.colorForGUI[0], val -> this.colorForGUI[0] = val)) - .widget(new FakeSyncWidget.ShortSyncer(() -> this.colorForGUI[1], val -> this.colorForGUI[1] = val)) - .widget(new FakeSyncWidget.ShortSyncer(() -> this.colorForGUI[2], val -> this.colorForGUI[2] = val)) - .widget( - new DrawableWidget().setBackground(BW_UITextures.PICTURE_DECAY_TIME_CONTAINER) - .setPos(120, 14) - .setSize(24, 56)) - .widget( - new TextWidget() - .setStringSupplier( - () -> StatCollector.translateToLocalFormatted("BW.NEI.display.radhatch.1", this.mass)) - .setTextAlignment(Alignment.Center) - .setPos(65, 62)) - .widget(new FakeSyncWidget.ByteSyncer(() -> this.mass, val -> this.mass = val)) - .widget( - new TextWidget() - .setStringSupplier( - () -> StatCollector.translateToLocalFormatted("BW.NEI.display.radhatch.0", this.getSievert())) - .setTextAlignment(Alignment.Center) - .setPos(60, 72)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> this.sievert, val -> this.sievert = val)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient()) { - widget.getContext() - .openSyncedWindow(RADIATION_SHUTTER_WINDOW_ID); - } - }) - .addTooltip("Radiation Shutter") - .setBackground(GT_UITextures.BUTTON_STANDARD) - .setPos(153, 5) - .setSize(18, 18)) - .widget( - new ItemDrawable( - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.SCREWDRIVER.ID, 1, null, null, null)).asWidget() - .setPos(154, 6)); - } - - private ModularWindow createShutterWindow(EntityPlayer player) { - ModularWindow.Builder builder = ModularWindow.builder(176, 107); - builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); - builder.setGuiTint(this.getGUIColorization()); - - builder.widget( - new TextWidget("Radiation Shutter Control").setDefaultColor(this.COLOR_TITLE.get()) - .setPos(10, 9)) - .widget( - new DrawableWidget().setDrawable(BW_UITextures.PICTURE_RADIATION_SHUTTER_FRAME) - .setPos(14, 27) - .setSize(55, 54)) - .widget( - new DrawableWidget() - .setDrawable(() -> this.coverage < 100 ? BW_UITextures.PICTURE_RADIATION_SHUTTER_INSIDE : null) - .setPos(16, 29) - .setSize(51, 50) - .attachSyncer( - new FakeSyncWidget.ByteSyncer(this::getCoverage, this::setCoverage), - builder, - (widget, val) -> widget.setPos(16, 29 + this.coverage / 2) - .setSize(51, 50 - this.coverage / 2))) - .widget( - new NumericWidget().setSetter(val -> this.coverage = (byte) val) - .setGetter(() -> this.coverage) - .setBounds(0, 100) - .setScrollValues(1, 5, 50) - .setTextColor(Color.WHITE.dark(1)) - .setTextAlignment(Alignment.CenterLeft) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) - .setPos(86, 27) - .setSize(30, 12)) - .widget( - ButtonWidget.closeWindowButton(true) - .setPos(176 - 15, 3)); - - return builder.build(); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(BW_UITextures.PICTURE_BW_LOGO_47X21) - .setSize(47, 21) - .setPos(10, 53)); - } - - @Override - public GUITextureSet getGUITextureSet() { - return new GUITextureSet().setMainBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT) - .setGregTechLogo(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioLabHandler.java b/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioLabHandler.java deleted file mode 100644 index 40233912e6..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioLabHandler.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.neiHandler; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.common.items.LabParts; - -import codechicken.nei.recipe.GuiCraftingRecipe; -import codechicken.nei.recipe.GuiUsageRecipe; -import codechicken.nei.recipe.TemplateRecipeHandler; -import cpw.mods.fml.common.event.FMLInterModComms; -import gregtech.api.enums.GT_Values; -import gregtech.api.recipe.RecipeCategory; -import gregtech.nei.GT_NEI_DefaultHandler; - -public class BW_NEI_BioLabHandler extends GT_NEI_DefaultHandler { - - public BW_NEI_BioLabHandler(RecipeCategory recipeCategory) { - super(recipeCategory); - if (!NEI_BW_Config.sIsAdded) { - FMLInterModComms.sendRuntimeMessage( - GT_Values.GT, - "NEIPlugins", - "register-crafting-handler", - "gregtech@" + this.getRecipeName() + "@" + this.getOverlayIdentifier()); - GuiCraftingRecipe.craftinghandlers.add(this); - GuiUsageRecipe.usagehandlers.add(this); - } - } - - @Override - public TemplateRecipeHandler newInstance() { - return new BW_NEI_BioLabHandler(this.recipeCategory); - } - - @Override - public void loadCraftingRecipes(ItemStack aResult) { - if (aResult != null && aResult.getItem() instanceof LabParts - && aResult.getItemDamage() < 3 - && aResult.getTagCompound() != null) { - for (CachedDefaultRecipe recipe : this.getCache()) - if (NEI_BW_Config.checkRecipe(aResult, recipe.mOutputs)) this.arecipes.add(recipe); - } else { - super.loadCraftingRecipes(aResult); - } - } - - @Override - public void loadUsageRecipes(ItemStack aResult) { - if (aResult != null && aResult.getItem() instanceof LabParts - && aResult.getItemDamage() < 3 - && aResult.getTagCompound() != null) { - for (CachedDefaultRecipe recipe : this.getCache()) - if (NEI_BW_Config.checkRecipe(aResult, recipe.mInputs)) this.arecipes.add(recipe); - } else { - super.loadUsageRecipes(aResult); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioVatHandler.java b/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioVatHandler.java deleted file mode 100644 index cddb16c6c8..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_BioVatHandler.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.neiHandler; - -import java.util.Collections; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.common.items.LabParts; - -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.GuiCraftingRecipe; -import codechicken.nei.recipe.GuiUsageRecipe; -import codechicken.nei.recipe.TemplateRecipeHandler; -import cpw.mods.fml.common.event.FMLInterModComms; -import gregtech.api.enums.GT_Values; -import gregtech.api.recipe.RecipeCategory; -import gregtech.nei.GT_NEI_DefaultHandler; - -public class BW_NEI_BioVatHandler extends GT_NEI_DefaultHandler { - - public BW_NEI_BioVatHandler(RecipeCategory recipeCategory) { - super(recipeCategory); - if (!NEI_BW_Config.sIsAdded) { - FMLInterModComms.sendRuntimeMessage( - GT_Values.GT, - "NEIPlugins", - "register-crafting-handler", - "gregtech@" + this.getRecipeName() + "@" + this.getOverlayIdentifier()); - GuiCraftingRecipe.craftinghandlers.add(this); - GuiUsageRecipe.usagehandlers.add(this); - } - } - - @Override - public TemplateRecipeHandler newInstance() { - return new BW_NEI_BioVatHandler(this.recipeCategory); - } - - private void loadLabPartRecipes(ItemStack aResult) { - for (CachedDefaultRecipe recipe : this.getCache()) { - // dirty way of finding the special slot item - // see constructor of CachedDefaultRecipe on why relx==120 and rely==52 means special slot - for (PositionedStack stack : recipe.mInputs) { - if (stack.relx == 120 && stack.rely == 52 - && NEI_BW_Config.checkRecipe(aResult, Collections.singletonList(stack))) this.arecipes.add(recipe); - } - } - } - - @Override - public void loadUsageRecipes(ItemStack aResult) { - if (aResult != null && aResult.getItem() instanceof LabParts - && aResult.getItemDamage() < 3 - && aResult.getTagCompound() != null) { - this.loadLabPartRecipes(aResult); - } else { - super.loadUsageRecipes(aResult); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_OreHandler.java b/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_OreHandler.java deleted file mode 100644 index 6664a5b65e..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/BW_NEI_OreHandler.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.neiHandler; - -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_Ores; -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_SmallOres; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.oregen.BW_OreLayer; -import com.github.bartimaeusnek.bartworks.system.oregen.BW_WorldGenRoss128b; -import com.github.bartimaeusnek.bartworks.system.oregen.BW_WorldGenRoss128ba; - -import codechicken.lib.gui.GuiDraw; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.GuiCraftingRecipe; -import codechicken.nei.recipe.TemplateRecipeHandler; -import cpw.mods.fml.common.event.FMLInterModComms; -import gregtech.api.enums.OrePrefixes; - -public class BW_NEI_OreHandler extends TemplateRecipeHandler { - - public BW_NEI_OreHandler() { - if (!NEI_BW_Config.sIsAdded) { - FMLInterModComms.sendRuntimeMessage( - MainMod.MOD_ID, - "NEIPlugins", - "register-crafting-handler", - MainMod.MOD_ID + "@" + this.getRecipeName() + "@" + this.getOverlayIdentifier()); - GuiCraftingRecipe.craftinghandlers.add(this); - } - } - - @Override - public void drawBackground(int recipe) { - GuiDraw.drawRect(0, 0, 166, 65, 0x888888); - } - - @Override - public void loadTransferRects() { - this.transferRects.add( - new TemplateRecipeHandler.RecipeTransferRect(new Rectangle(0, 40, 40, 120), "quickanddirtyneihandler")); - } - - @Override - public int recipiesPerPage() { - return 1; - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if ("quickanddirtyneihandler".equalsIgnoreCase(outputId)) { - HashSet result = new HashSet<>(); - Werkstoff.werkstoffHashSet.stream() - .filter(w -> w.hasGenerationFeature(OrePrefixes.ore)) - .forEach(w -> result.add(w.get(OrePrefixes.ore))); - result.forEach(this::loadCraftingRecipes); - result.clear(); - Werkstoff.werkstoffHashSet.stream() - .filter(w -> w.hasGenerationFeature(OrePrefixes.ore)) - .forEach(w -> result.add(w.get(OrePrefixes.oreSmall))); - result.forEach(this::loadCraftingRecipes); - result.clear(); - HashSet hashSet = new HashSet<>(this.arecipes); - this.arecipes.clear(); - this.arecipes.addAll(hashSet); - } - if ("item".equals(outputId)) { - this.loadCraftingRecipes((ItemStack) results[0]); - HashSet hashSet = new HashSet<>(this.arecipes); - this.arecipes.clear(); - this.arecipes.addAll(hashSet); - } - } - - @Override - public void drawExtras(int recipe) { - if (recipe < this.arecipes.size() && this.arecipes.get(recipe) instanceof CachedOreRecipe) { - CachedOreRecipe cachedOreRecipe = (CachedOreRecipe) this.arecipes.get(recipe); - - if (cachedOreRecipe == null || cachedOreRecipe.getOtherStacks() == null - || cachedOreRecipe.getOtherStacks() - .size() == 0) - return; - - if (!cachedOreRecipe.small) { - if (cachedOreRecipe.getOtherStacks() - .get(0) == null - || cachedOreRecipe.getOtherStacks() - .get(0).item == null - || cachedOreRecipe.getOtherStacks() - .get(1) == null - || cachedOreRecipe.getOtherStacks() - .get(2) == null - || cachedOreRecipe.getOtherStacks() - .get(3) == null - || cachedOreRecipe.getOtherStacks() - .get(1).item == null - || cachedOreRecipe.getOtherStacks() - .get(2).item == null - || cachedOreRecipe.getOtherStacks() - .get(3).item == null) - return; - } else if (cachedOreRecipe.getOtherStacks() - .get(0) == null - || cachedOreRecipe.getOtherStacks() - .get(0).item == null) - return; - - if (cachedOreRecipe.worldGen != null) GuiDraw.drawString( - EnumChatFormatting.BOLD + "DIM: " + EnumChatFormatting.RESET + cachedOreRecipe.worldGen.getDimName(), - 0, - 40, - 0, - false); - - GuiDraw.drawString(EnumChatFormatting.BOLD + "Primary:", 0, 50, 0, false); - GuiDraw.drawString( - cachedOreRecipe.getOtherStacks() - .get(0).item.getDisplayName(), - 0, - 60, - 0, - false); - - if (!cachedOreRecipe.small) { - GuiDraw.drawString(EnumChatFormatting.BOLD + "Secondary:", 0, 70, 0, false); - GuiDraw.drawString( - cachedOreRecipe.getOtherStacks() - .get(1).item.getDisplayName(), - 0, - 80, - 0, - false); - GuiDraw.drawString(EnumChatFormatting.BOLD + "InBetween:", 0, 90, 0, false); - GuiDraw.drawString( - cachedOreRecipe.getOtherStacks() - .get(2).item.getDisplayName(), - 0, - 100, - 0, - false); - GuiDraw.drawString(EnumChatFormatting.BOLD + "Sporadic:", 0, 110, 0, false); - GuiDraw.drawString( - cachedOreRecipe.getOtherStacks() - .get(3).item.getDisplayName(), - 0, - 120, - 0, - false); - } else if (cachedOreRecipe.worldGen != null) { - GuiDraw.drawString(EnumChatFormatting.BOLD + "Amount per Chunk:", 0, 70, 0, false); - GuiDraw.drawString(cachedOreRecipe.worldGen.mDensity + "", 0, 80, 0, false); - } - } - super.drawExtras(recipe); - } - - @Override - public void loadCraftingRecipes(ItemStack result) { - Block ore = Block.getBlockFromItem(result.getItem()); - if (ore instanceof BW_MetaGenerated_Ores) { - BW_OreLayer.NEIMAP.get((short) result.getItemDamage()) - .stream() - .filter( - l -> !(ore instanceof BW_MetaGenerated_SmallOres) || !l.getClass() - .equals(BW_WorldGenRoss128b.class) - && !l.getClass() - .equals(BW_WorldGenRoss128ba.class)) - .forEach( - l -> this.arecipes.add(new CachedOreRecipe(l, result, ore instanceof BW_MetaGenerated_SmallOres))); - } - } - - @Override - public String getGuiTexture() { - return "textures/gui/container/brewing_stand.png"; - } - - @Override - public String getRecipeName() { - return "BartWorks Ores"; - } - - class CachedOreRecipe extends TemplateRecipeHandler.CachedRecipe { - - public CachedOreRecipe(BW_OreLayer worldGen, ItemStack result, boolean smallOres) { - this.worldGen = worldGen; - this.stack = new PositionedStack(result, 0, 0); - this.small = smallOres; - } - - boolean small; - BW_OreLayer worldGen; - PositionedStack stack; - - @Override - public PositionedStack getResult() { - return this.stack; - } - - @Override - public List getOtherStacks() { - List ret = new ArrayList<>(); - int x = 0; - for (int i = 0; i < (this.small ? 1 : 4); i++) { - x += 20; - ret.add( - new PositionedStack( - this.worldGen.getStacks() - .get(i), - x, - 12)); - } - return ret; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof CachedOreRecipe that)) return false; - return Objects.equals(this.worldGen, that.worldGen); - } - - @Override - public int hashCode() { - return this.worldGen.hashCode(); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/NEI_BW_Config.java b/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/NEI_BW_Config.java deleted file mode 100644 index a6efebeb83..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/neiHandler/NEI_BW_Config.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.neiHandler; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.common.loaders.FluidLoader; -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import codechicken.nei.PositionedStack; -import codechicken.nei.api.API; -import codechicken.nei.api.IConfigureNEI; -import gregtech.api.enums.OrePrefixes; - -public class NEI_BW_Config implements IConfigureNEI { - - static boolean sIsAdded = true; - - static boolean checkRecipe(ItemStack labPart, Iterable stacks) { - for (PositionedStack stack : stacks) { - for (ItemStack item : stack.items) { - if (labPart.getTagCompound() - .equals(item.getTagCompound())) { - return true; - } - } - } - return false; - } - - @Override - public void loadConfig() { - API.hideItem(new ItemStack(ItemRegistry.TAB)); - API.hideItem(new ItemStack(FluidLoader.bioFluidBlock)); - API.hideItem(new ItemStack(ItemRegistry.bw_fake_glasses)); - API.hideItem(new ItemStack(ItemRegistry.bw_fake_glasses2)); - ItemStack[] prefixesToHide = { - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.dustTiny, WerkstoffLoader.Bismutite) - .copy(), - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.dustSmall, WerkstoffLoader.Bismutite) - .copy(), - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.crushed, WerkstoffLoader.Bismutite) - .copy(), - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.crushedPurified, WerkstoffLoader.Bismutite) - .copy(), - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.crushedCentrifuged, WerkstoffLoader.Bismutite) - .copy(), - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.nugget, WerkstoffLoader.Bismutite) - .copy(), - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.gemChipped, WerkstoffLoader.Bismutite) - .copy(), - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.gemFlawed, WerkstoffLoader.Bismutite) - .copy(), - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.gemFlawless, WerkstoffLoader.Bismutite) - .copy(), - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.gemExquisite, WerkstoffLoader.Bismutite) - .copy(), - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.dustImpure, WerkstoffLoader.Bismutite) - .copy(), - WerkstoffLoader.getCorrespondingItemStack(OrePrefixes.dustPure, WerkstoffLoader.Bismutite) - .copy(), }; - for (ItemStack stack : prefixesToHide) { - stack.setItemDamage(Short.MAX_VALUE); - API.hideItem(stack); - } - - NEI_BW_Config.sIsAdded = false; - new BW_NEI_OreHandler(); - new BW_NEI_BioVatHandler(BartWorksRecipeMaps.bacterialVatRecipes.getDefaultRecipeCategory()); - new BW_NEI_BioLabHandler(BartWorksRecipeMaps.bioLabRecipes.getDefaultRecipeCategory()); - NEI_BW_Config.sIsAdded = true; - } - - @Override - public String getName() { - return "BartWorks NEI Plugin"; - } - - @Override - public String getVersion() { - return MainMod.APIVERSION; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/server/EventHandler/ServerEventHandler.java b/src/main/java/com/github/bartimaeusnek/bartworks/server/EventHandler/ServerEventHandler.java deleted file mode 100644 index 3ea2f28cb9..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/server/EventHandler/ServerEventHandler.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.server.EventHandler; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; -import net.minecraftforge.oredict.OreDictionary; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.common.net.OreDictCachePacket; -import com.github.bartimaeusnek.bartworks.common.net.ServerJoinedPackage; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.oredict.OreDictHandler; - -import cpw.mods.fml.common.eventhandler.EventPriority; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; - -public class ServerEventHandler { - - // MinecraftForge.EVENT_BUS - @SubscribeEvent(priority = EventPriority.LOWEST) - public void EntityJoinWorldEvent(EntityJoinWorldEvent event) { - if (event == null || !(event.entity instanceof EntityPlayerMP) || !SideReference.Side.Server) return; - MainMod.BW_Network_instance - .sendToPlayer(new OreDictCachePacket(OreDictHandler.getNonBWCache()), (EntityPlayerMP) event.entity); - MainMod.BW_Network_instance.sendToPlayer(new ServerJoinedPackage(null), (EntityPlayerMP) event.entity); - } - - // FMLCommonHandler.instance().bus() - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onPlayerTickEventServer(TickEvent.PlayerTickEvent event) { - if (event == null || !(event.player instanceof EntityPlayerMP) - || event.player.worldObj.getTotalWorldTime() % 20 != 0) return; - - boolean replace = false; - ItemStack toReplace = null; - for (int i = 0; i < event.player.inventory.mainInventory.length; i++) { - ItemStack stack = event.player.inventory.mainInventory[i]; - if (stack == null) continue; - int[] oreIDs = OreDictionary.getOreIDs(stack); - - if (oreIDs.length > 0) { - loop: for (int oreID : oreIDs) { - String oreDictName = OreDictionary.getOreName(oreID); - for (Werkstoff e : Werkstoff.werkstoffHashSet) { - replace = e.getGenerationFeatures().enforceUnification; - if (replace) { - if (oreDictName.contains(e.getVarName())) { - String prefix = oreDictName.replace(e.getVarName(), ""); - OrePrefixes prefixes = OrePrefixes.getPrefix(prefix); - if (prefixes == null) { - continue; - } - toReplace = GT_OreDictUnificator.get(prefixes, e.getVarName(), stack.stackSize); - break loop; - } - for (String s : e.getADDITIONAL_OREDICT()) { - if (oreDictName.contains(s)) { - String prefix = oreDictName.replace(s, ""); - OrePrefixes prefixes = OrePrefixes.getPrefix(prefix); - if (prefixes == null) { - continue; - } - toReplace = GT_OreDictUnificator.get(prefixes, e.getVarName(), stack.stackSize); - break loop; - } - } - } - replace = false; - } - } - } - if (replace && toReplace != null) { - event.player.inventory.setInventorySlotContents(i, toReplace); - replace = false; - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_GT_MaterialReference.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_GT_MaterialReference.java deleted file mode 100644 index 87ee19833d..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_GT_MaterialReference.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ -package com.github.bartimaeusnek.bartworks.system.material; - -import static com.github.bartimaeusnek.bartworks.system.material.Werkstoff.Types.BIOLOGICAL; -import static com.github.bartimaeusnek.bartworks.system.material.Werkstoff.Types.COMPOUND; -import static com.github.bartimaeusnek.bartworks.system.material.Werkstoff.Types.ELEMENT; -import static com.github.bartimaeusnek.bartworks.system.material.Werkstoff.Types.ISOTOPE; -import static com.github.bartimaeusnek.bartworks.system.material.Werkstoff.Types.MIXTURE; - -import com.github.bartimaeusnek.bartworks.MainMod; - -import gregtech.api.enums.Materials; - -public class BW_GT_MaterialReference { - - private static final Werkstoff.GenerationFeatures ADD_CASINGS_ONLY = new Werkstoff.GenerationFeatures().disable() - .addCasings(); - - public static Werkstoff Aluminium = new Werkstoff(Materials.Aluminium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 19); - public static Werkstoff Americium = new Werkstoff(Materials.Americium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 103); - public static Werkstoff Antimony = new Werkstoff(Materials.Antimony, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 58); - public static Werkstoff Arsenic = new Werkstoff(Materials.Arsenic, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 39); - public static Werkstoff Barium = new Werkstoff(Materials.Barium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 63); - public static Werkstoff Beryllium = new Werkstoff(Materials.Beryllium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 8); - public static Werkstoff Bismuth = new Werkstoff(Materials.Bismuth, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 90); - public static Werkstoff Boron = new Werkstoff(Materials.Boron, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 9); - public static Werkstoff Caesium = new Werkstoff(Materials.Caesium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 62); - public static Werkstoff Carbon = new Werkstoff(Materials.Carbon, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 10); - public static Werkstoff Cadmium = new Werkstoff(Materials.Cadmium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 55); - public static Werkstoff Cerium = new Werkstoff(Materials.Cerium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 65); - public static Werkstoff Chrome = new Werkstoff(Materials.Chrome, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 30); - public static Werkstoff Cobalt = new Werkstoff(Materials.Cobalt, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 33); - public static Werkstoff Copper = new Werkstoff(Materials.Copper, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 35); - public static Werkstoff Dysprosium = new Werkstoff(Materials.Dysprosium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 73); - public static Werkstoff Erbium = new Werkstoff(Materials.Erbium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 75); - public static Werkstoff Europium = new Werkstoff(Materials.Europium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 70); - public static Werkstoff Gadolinium = new Werkstoff(Materials.Gadolinium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 71); - public static Werkstoff Gallium = new Werkstoff(Materials.Gallium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 37); - public static Werkstoff Gold = new Werkstoff(Materials.Gold, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 86); - public static Werkstoff Holmium = new Werkstoff(Materials.Holmium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 74); - public static Werkstoff Indium = new Werkstoff(Materials.Indium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 56); - public static Werkstoff Iridium = new Werkstoff(Materials.Iridium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 84); - public static Werkstoff Iron = new Werkstoff(Materials.Iron, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 32); - public static Werkstoff Lanthanum = new Werkstoff(Materials.Lanthanum, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 64); - public static Werkstoff Lead = new Werkstoff(Materials.Lead, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 89); - public static Werkstoff Lithium = new Werkstoff(Materials.Lithium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 6); - public static Werkstoff Lutetium = new Werkstoff(Materials.Lutetium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 78); - public static Werkstoff Magnesium = new Werkstoff(Materials.Magnesium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 18); - public static Werkstoff Manganese = new Werkstoff(Materials.Manganese, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 31); - public static Werkstoff Molybdenum = new Werkstoff(Materials.Molybdenum, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 48); - public static Werkstoff Neodymium = new Werkstoff(Materials.Neodymium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 67); - public static Werkstoff Neutronium = new Werkstoff(Materials.Neutronium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 129); - public static Werkstoff Nickel = new Werkstoff(Materials.Nickel, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 34); - public static Werkstoff Niobium = new Werkstoff(Materials.Niobium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 47); - public static Werkstoff Osmium = new Werkstoff(Materials.Osmium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 83); - public static Werkstoff Palladium = new Werkstoff(Materials.Palladium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 52); - public static Werkstoff Phosphorus = new Werkstoff(Materials.Phosphorus, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 21); - public static Werkstoff Platinum = new Werkstoff(Materials.Platinum, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 85); - public static Werkstoff Plutonium241 = new Werkstoff( - Materials.Plutonium241, - ADD_CASINGS_ONLY, - ISOTOPE, - 31_766 + 101); - public static Werkstoff Potassium = new Werkstoff(Materials.Potassium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 25); - public static Werkstoff Praseodymium = new Werkstoff( - Materials.Praseodymium, - ADD_CASINGS_ONLY, - ELEMENT, - 31_766 + 66); - public static Werkstoff Promethium = new Werkstoff(Materials.Promethium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 68); - public static Werkstoff Rubidium = new Werkstoff(Materials.Rubidium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 43); - public static Werkstoff Samarium = new Werkstoff(Materials.Samarium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 69); - public static Werkstoff Scandium = new Werkstoff(Materials.Scandium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 27); - public static Werkstoff Silicon = new Werkstoff(Materials.Silicon, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 20); - public static Werkstoff Silver = new Werkstoff(Materials.Silver, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 54); - public static Werkstoff Sodium = new Werkstoff(Materials.Sodium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 17); - public static Werkstoff Strontium = new Werkstoff(Materials.Strontium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 44); - public static Werkstoff Sulfur = new Werkstoff(Materials.Sulfur, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 22); - public static Werkstoff Tantalum = new Werkstoff(Materials.Tantalum, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 80); - public static Werkstoff Terbium = new Werkstoff(Materials.Terbium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 72); - public static Werkstoff Thorium = new Werkstoff(Materials.Thorium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 96); - public static Werkstoff Thulium = new Werkstoff(Materials.Thulium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 76); - public static Werkstoff Tin = new Werkstoff(Materials.Tin, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 57); - public static Werkstoff Titanium = new Werkstoff(Materials.Titanium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 28); - public static Werkstoff Tritanium = new Werkstoff(Materials.Tritanium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 329); - public static Werkstoff Tritium = new Werkstoff(Materials.Tritium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 3); - public static Werkstoff Tungsten = new Werkstoff(Materials.Tungsten, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 81); - public static Werkstoff Uranium = new Werkstoff(Materials.Uranium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 98); - public static Werkstoff Uranium235 = new Werkstoff(Materials.Uranium235, ADD_CASINGS_ONLY, ISOTOPE, 31_766 + 97); - public static Werkstoff Vanadium = new Werkstoff(Materials.Vanadium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 29); - public static Werkstoff Ytterbium = new Werkstoff(Materials.Ytterbium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 77); - public static Werkstoff Yttrium = new Werkstoff(Materials.Yttrium, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 45); - public static Werkstoff Zinc = new Werkstoff(Materials.Zinc, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 36); - public static Werkstoff Ardite = new Werkstoff(Materials.Ardite, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 382); - public static Werkstoff Naquadah = new Werkstoff(Materials.Naquadah, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 324); - public static Werkstoff NaquadahAlloy = new Werkstoff( - Materials.NaquadahAlloy, - ADD_CASINGS_ONLY, - COMPOUND, - 31_766 + 325); - public static Werkstoff NaquadahEnriched = new Werkstoff( - Materials.NaquadahEnriched, - ADD_CASINGS_ONLY, - ISOTOPE, - 31_766 + 326); - public static Werkstoff Naquadria = new Werkstoff(Materials.Naquadria, ADD_CASINGS_ONLY, ELEMENT, 31_766 + 327); - public static Werkstoff WroughtIron = new Werkstoff(Materials.WroughtIron, ADD_CASINGS_ONLY, ISOTOPE, 31_766 + 304); - public static Werkstoff AnnealedCopper = new Werkstoff( - Materials.AnnealedCopper, - ADD_CASINGS_ONLY, - ISOTOPE, - 31_766 + 345); - - public static Werkstoff Osmiridium = new Werkstoff(Materials.Osmiridium, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 317); - public static Werkstoff SterlingSilver = new Werkstoff( - Materials.SterlingSilver, - ADD_CASINGS_ONLY, - MIXTURE, - 31_766 + 350); - public static Werkstoff RoseGold = new Werkstoff(Materials.RoseGold, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 351); - public static Werkstoff BlackBronze = new Werkstoff(Materials.BlackBronze, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 352); - public static Werkstoff BismuthBronze = new Werkstoff( - Materials.BismuthBronze, - ADD_CASINGS_ONLY, - MIXTURE, - 31_766 + 353); - public static Werkstoff BlackSteel = new Werkstoff(Materials.BlackSteel, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 334); - public static Werkstoff RedSteel = new Werkstoff(Materials.RedSteel, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 348); - public static Werkstoff BlueSteel = new Werkstoff(Materials.BlueSteel, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 349); - public static Werkstoff DamascusSteel = new Werkstoff( - Materials.DamascusSteel, - ADD_CASINGS_ONLY, - MIXTURE, - 31_766 + 335); - public static Werkstoff TungstenSteel = new Werkstoff( - Materials.TungstenSteel, - ADD_CASINGS_ONLY, - MIXTURE, - 31_766 + 316); - public static Werkstoff Ultimet = new Werkstoff(Materials.Ultimet, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 344); - public static Werkstoff TungstenCarbide = new Werkstoff( - Materials.TungstenCarbide, - ADD_CASINGS_ONLY, - MIXTURE, - 31_766 + 370); - public static Werkstoff VanadiumSteel = new Werkstoff( - Materials.VanadiumSteel, - ADD_CASINGS_ONLY, - MIXTURE, - 31_766 + 371); - public static Werkstoff HSSG = new Werkstoff(Materials.HSSG, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 372); - public static Werkstoff HSSE = new Werkstoff(Materials.HSSE, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 373); - public static Werkstoff HSSS = new Werkstoff(Materials.HSSS, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 374); - public static Werkstoff StainlessSteel = new Werkstoff( - Materials.StainlessSteel, - ADD_CASINGS_ONLY, - MIXTURE, - 31_766 + 306); - public static Werkstoff Brass = new Werkstoff(Materials.Brass, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 301); - public static Werkstoff Bronze = new Werkstoff(Materials.Bronze, ADD_CASINGS_ONLY, MIXTURE, 31_766 + 300); - - public static Werkstoff Wood = new Werkstoff(Materials.Wood, ADD_CASINGS_ONLY, BIOLOGICAL, 31_766 + 809); - - public static Werkstoff Steel = new Werkstoff(Materials.Steel, ADD_CASINGS_ONLY, COMPOUND, 31_766 + 305); - public static Werkstoff Polytetrafluoroethylene = new Werkstoff( - Materials.Polytetrafluoroethylene, - ADD_CASINGS_ONLY, - COMPOUND, - 31_766 + 473); - public static Werkstoff Plastic = new Werkstoff(Materials.Plastic, ADD_CASINGS_ONLY, COMPOUND, 31_766 + 874); - public static Werkstoff Epoxid = new Werkstoff(Materials.Epoxid, ADD_CASINGS_ONLY, COMPOUND, 31_766 + 470); - public static Werkstoff Magnesia = new Werkstoff( - Materials.Magnesia, - new Werkstoff.GenerationFeatures().disable() - .addMetalItems() - .addMolten(), - COMPOUND, - 31_766 + 471); - - public static void init() { - MainMod.LOGGER.info("Load Elements from GT"); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlock_Item.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlock_Item.java deleted file mode 100644 index 9bd1206546..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlock_Item.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import static com.github.bartimaeusnek.bartworks.system.material.Werkstoff.werkstoffHashMap; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.common.items.BW_ItemBlocks; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; - -public class BW_MetaGeneratedBlock_Item extends BW_ItemBlocks { - - public BW_MetaGeneratedBlock_Item(Block par1) { - super(par1); - } - - @Override - public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, - float hitX, float hitY, float hitZ) { - return false; - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return this.field_150939_a.getUnlocalizedName() + "." + this.getDamage(aStack); - } - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - Block block = Block.getBlockFromItem(aStack.getItem()); - if (block instanceof BW_MetaGenerated_Blocks metaBlock) { - int aMetaData = aStack.getItemDamage(); - Werkstoff werkstoff = werkstoffHashMap.get((short) aMetaData); - if (werkstoff == null) werkstoff = Werkstoff.default_null_Werkstoff; - return metaBlock.blockTypeLocalizedName.replace("%material", werkstoff.getLocalizedName()); - } - return GT_LanguageManager.getTranslation(this.getUnlocalizedName(aStack) + ".name"); - } - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - if (!GT_Utility.isStackValid(aStack) || aPlayer == null || aStack.getItemDamage() <= 0) { - return; - } - if (aList == null) { - aList = new ArrayList<>(); - } - Werkstoff werkstoff = Werkstoff.werkstoffHashMap.get((short) aStack.getItemDamage()); - if (werkstoff != null) { - String tooltip = werkstoff.getLocalizedToolTip(); - if (!tooltip.isEmpty()) { - aList.add(tooltip); - } - } - } - - @Override - public boolean placeBlockAt(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int side, - float hitX, float hitY, float hitZ, int aMeta) { - short tDamage = (short) this.getDamage(aStack); - if (tDamage > 0) { - if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, tDamage, 3)) { - return false; - } - BW_MetaGenerated_Block_TE tTileEntity = (BW_MetaGenerated_Block_TE) aWorld.getTileEntity(aX, aY, aZ); - tTileEntity.mMetaData = tDamage; - } else if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, 0, 3)) return false; - if (aWorld.getBlock(aX, aY, aZ) == this.field_150939_a) { - this.field_150939_a.onBlockPlacedBy(aWorld, aX, aY, aZ, aPlayer, aStack); - this.field_150939_a.onPostBlockPlaced(aWorld, aX, aY, aZ, tDamage); - } - return true; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_Casing.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_Casing.java deleted file mode 100644 index 6fb1650c1f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_Casing.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import java.util.List; -import java.util.Optional; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.OrePrefixes; - -public class BW_MetaGeneratedBlocks_Casing extends BW_MetaGenerated_Blocks - implements com.gtnewhorizon.structurelib.structure.ICustomBlockSetting { - - public BW_MetaGeneratedBlocks_Casing(Material p_i45386_1_, Class tileEntity, String blockName, - OrePrefixes prefixes) { - super(p_i45386_1_, tileEntity, blockName, prefixes); - } - - @Override - public String getHarvestTool(int aMeta) { - return "wrench"; - } - - @Override - public int getHarvestLevel(int aMeta) { - return 2; - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - return Blocks.iron_block.getBlockHardness(aWorld, aX, aY, aZ); - } - - @Override - public float getExplosionResistance(Entity aTNT) { - return Blocks.iron_block.getExplosionResistance(aTNT); - } - - @Override - protected boolean canSilkHarvest() { - return false; - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetaData); - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - super.onBlockAdded(aWorld, aX, aY, aZ); - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - - @Override - protected void doRegistrationStuff(Werkstoff tMaterial) { - GregTech_API.registerMachineBlock(this, -1); - } - - @Override - public String getUnlocalizedName() { - if (this._prefixes == OrePrefixes.blockCasing) return "bw.werkstoffblockscasing.01"; - if (this._prefixes == OrePrefixes.blockCasingAdvanced) return "bw.werkstoffblockscasingadvanced.01"; - return ""; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) { - Werkstoff.werkstoffHashSet.stream() - .filter( - pMaterial -> Werkstoff.Types.BIOLOGICAL.equals(pMaterial.getType()) - && pMaterial.hasGenerationFeature(OrePrefixes.blockCasing) - || pMaterial.doesOreDictedItemExists(OrePrefixes.plate) - && pMaterial.doesOreDictedItemExists(OrePrefixes.screw) - && pMaterial.doesOreDictedItemExists(OrePrefixes.plateDouble) - && pMaterial.doesOreDictedItemExists(OrePrefixes.gearGt) - && pMaterial.doesOreDictedItemExists(OrePrefixes.gearGtSmall)) - .map(pMaterial -> new ItemStack(aItem, 1, pMaterial.getmID())) - .forEach(aList::add); - } - - /** - * ICustomBlockSetting setBlock override - */ - public void setBlock(World world, int x, int y, int z, int meta) { - world.setBlock(x, y, z, this, meta, 2); - try { - Thread.sleep(1); - // Fucking Minecraft TE settings. - } catch (InterruptedException ignored) {} - Optional.ofNullable(world.getTileEntity(x, y, z)) - .filter(te -> te instanceof BW_MetaGenerated_Block_TE) - .map(te -> (BW_MetaGenerated_Block_TE) te) - .ifPresent(te -> te.mMetaData = (short) meta); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_CasingAdvanced_TE.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_CasingAdvanced_TE.java deleted file mode 100644 index 02dd3c8f58..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_CasingAdvanced_TE.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.client.textures.PrefixTextureLinker; - -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.render.TextureFactory; - -public class BW_MetaGeneratedBlocks_CasingAdvanced_TE extends BW_MetaGenerated_Block_TE { - - @Override - protected Block GetProperBlock() { - return WerkstoffLoader.BWBlockCasingsAdvanced; - } - - @Override - public ITexture[] getTexture(Block aBlock, ForgeDirection side) { - if (SideReference.Side.Client) { - Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData); - if (aMaterial != null) { - TextureSet set = aMaterial.getTexSet(); - ITexture aIconSet = TextureFactory.of( - PrefixTextureLinker.texMapBlocks.get(OrePrefixes.blockCasingAdvanced) - .getOrDefault(set, TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]), - aMaterial.getRGBA()); - return new ITexture[] { TextureFactory.of(Blocks.iron_block), aIconSet }; - } - } - return new ITexture[] { TextureFactory.of(Blocks.iron_block), - TextureFactory.of(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]) }; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_Casing_TE.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_Casing_TE.java deleted file mode 100644 index af61e1a68a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedBlocks_Casing_TE.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.client.textures.PrefixTextureLinker; - -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.render.TextureFactory; - -public class BW_MetaGeneratedBlocks_Casing_TE extends BW_MetaGenerated_Block_TE { - - @Override - protected Block GetProperBlock() { - return WerkstoffLoader.BWBlockCasings; - } - - @Override - public ITexture[] getTexture(Block aBlock, ForgeDirection side) { - if (SideReference.Side.Client) { - Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData); - if (aMaterial != null) { - TextureSet set = aMaterial.getTexSet(); - ITexture aIconSet = TextureFactory.of( - PrefixTextureLinker.texMapBlocks.get(OrePrefixes.blockCasing) - .getOrDefault(set, TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]), - aMaterial.getRGBA()); - return new ITexture[] { TextureFactory.of(Blocks.iron_block), aIconSet }; - } - } - return new ITexture[] { TextureFactory.of(Blocks.iron_block), - TextureFactory.of(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]) }; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedFrames.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedFrames.java deleted file mode 100644 index ee5a0a1511..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedFrames.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_ModHandler.RecipeBits; -import gregtech.api.util.GT_OreDictUnificator; - -public class BW_MetaGeneratedFrames extends MetaPipeEntity { - - public final Werkstoff mMaterial; - - public BW_MetaGeneratedFrames(int aID, String aName, String aNameRegional, Werkstoff aMaterial) { - super(aID, aName, aNameRegional, 0); - this.mMaterial = aMaterial; - - GT_OreDictUnificator.registerOre(OrePrefixes.frameGt, aMaterial, this.getStackForm(1)); - GT_ModHandler.addCraftingRecipe( - this.getStackForm(2), - RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SSS", "SwS", "SSS", 'S', this.mMaterial.get(OrePrefixes.stick) }); - - RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.getVarName(), 4), - ItemList.Circuit_Integrated.getWithDamage(0, 4)) - .itemOutputs(getStackForm(1)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(8) - .addTo(assemblerRecipes); - } - - private BW_MetaGeneratedFrames(String aName, Werkstoff aMaterial) { - super(aName, 0); - this.mMaterial = aMaterial; - } - - @Override - public byte getTileEntityBaseType() { - return 4; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new BW_MetaGeneratedFrames(this.mName, this.mMaterial); - } - - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, byte aConnections, - int aColorIndex, boolean aConnected, boolean aRedstone) { - return new ITexture[] { TextureFactory.of( - this.mMaterial.getTexSet().mTextures[OrePrefixes.frameGt.mTextureIndex], - Dyes.getModulation(aColorIndex, this.mMaterial.getRGBA())) }; - } - - @Override - public String[] getDescription() { - return new String[] { "Just something you can put a Cover or CFoam on." }; - } - - @Override - public final boolean isSimpleMachine() { - return true; - } - - @Override - public final boolean isFacingValid(ForgeDirection facing) { - return false; - } - - @Override - public final boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public final boolean renderInside(ForgeDirection side) { - return true; - } - - @Override - public final float getThickNess() { - return 1.0F; - } - - @Override - public final void saveNBTData(NBTTagCompound aNBT) { - /* Do nothing */ - } - - @Override - public final void loadNBTData(NBTTagCompound aNBT) { - /* Do nothing */ - } - - @Override - public final boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public final boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public int connect(ForgeDirection side) { - return 0; - } - - @Override - public void disconnect(ForgeDirection side) { - /* Do nothing */ - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedOreTE.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedOreTE.java deleted file mode 100644 index 9b393dff0f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedOreTE.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import java.util.ArrayList; -import java.util.Random; - -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 gregtech.GT_Mod; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OreDictUnificator; - -public class BW_MetaGeneratedOreTE extends BW_MetaGenerated_Block_TE { - - protected static boolean shouldFortune = false; - protected static boolean shouldSilkTouch = false; - public boolean mNatural = false; - - @Override - public void readFromNBT(NBTTagCompound aNBT) { - super.readFromNBT(aNBT); - this.mNatural = aNBT.getBoolean("n"); - } - - @Override - public void writeToNBT(NBTTagCompound aNBT) { - super.writeToNBT(aNBT); - aNBT.setBoolean("n", this.mNatural); - } - - @Override - public ITexture[] getTexture(Block aBlock, ForgeDirection side) { - Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData); - if (aMaterial != null) { - ITexture aIconSet = TextureFactory - .of(aMaterial.getTexSet().mTextures[OrePrefixes.ore.mTextureIndex], aMaterial.getRGBA()); - return new ITexture[] { TextureFactory.of(Blocks.stone), aIconSet }; - } - return new ITexture[] { TextureFactory.of(Blocks.stone), - TextureFactory.of(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.ore.mTextureIndex]) }; - } - - @Override - protected Block GetProperBlock() { - return WerkstoffLoader.BWOres; - } - - @Override - public ArrayList getDrops(int aFortune) { - ArrayList rList = new ArrayList<>(); - if (this.mMetaData <= 0) { - rList.add(new ItemStack(Blocks.cobblestone, 1, 0)); - return rList; - } - Materials aOreMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData) - .getBridgeMaterial(); - if (shouldSilkTouch) { - rList.add(new ItemStack(this.GetProperBlock(), 1, this.mMetaData)); - } else { - switch (GT_Mod.gregtechproxy.oreDropSystem) { - case Item -> { - rList.add(GT_OreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, 1)); - } - case FortuneItem -> { - // if shouldFortune and isNatural then get fortune drops - // if not shouldFortune or not isNatural then get normal drops - // if not shouldFortune and isNatural then get normal drops - // if shouldFortune and not isNatural then get normal drops - if (shouldFortune && this.mNatural && aFortune > 0) { - int aMinAmount = 1; - // Max applicable fortune - if (aFortune > 3) aFortune = 3; - long amount = (long) new Random().nextInt(aFortune) + aMinAmount; - for (int i = 0; i < amount; i++) { - rList.add(GT_OreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, 1)); - } - } else { - rList.add(GT_OreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, 1)); - } - } - case UnifiedBlock -> { - // Unified ore - rList.add(new ItemStack(this.GetProperBlock(), 1, this.mMetaData)); - } - case PerDimBlock -> { - // Per Dimension ore - rList.add(new ItemStack(this.GetProperBlock(), 1, this.mMetaData)); - } - case Block -> { - // Regular ore - rList.add(new ItemStack(this.GetProperBlock(), 1, this.mMetaData)); - } - } - } - return rList; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedSmallOreTE.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedSmallOreTE.java deleted file mode 100644 index 110b17321f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGeneratedSmallOreTE.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import java.util.ArrayList; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.objects.XSTR; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class BW_MetaGeneratedSmallOreTE extends BW_MetaGeneratedOreTE { - - @Override - public ArrayList getDrops(int aFortune) { - ArrayList rList = new ArrayList<>(); - Materials aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData) - .getBridgeMaterial(); - - if (aMaterial != null) { - Random tRandom = new XSTR(this.xCoord ^ this.yCoord ^ this.zCoord); - ArrayList tSelector = new ArrayList<>(); - - ItemStack tStack = GT_OreDictUnificator - .get(OrePrefixes.gemExquisite, aMaterial, GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 1L); - if (tStack != null) { - for (int i = 0; i < 1; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator - .get(OrePrefixes.gemFlawless, aMaterial, GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 1L); - if (tStack != null) { - for (int i = 0; i < 2; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L); - if (tStack != null) { - for (int i = 0; i < 12; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator.get( - OrePrefixes.gemFlawed, - aMaterial, - GT_OreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1L), - 1L); - if (tStack != null) { - for (int i = 0; i < 5; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1L); - if (tStack != null) { - for (int i = 0; i < 10; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator.get( - OrePrefixes.gemChipped, - aMaterial, - GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L), - 1L); - if (tStack != null) { - for (int i = 0; i < 5; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L); - if (tStack != null) { - for (int i = 0; i < 10; i++) { - tSelector.add(tStack); - } - } - if (tSelector.size() > 0) { - int i = 0; - - for (int j = Math.max(1, aFortune > 0 ? tRandom.nextInt(1 + aFortune) : 0); i < j; ++i) { - rList.add(GT_Utility.copyAmount(1L, tSelector.get(tRandom.nextInt(tSelector.size())))); - } - } - if (tRandom.nextInt(3 + aFortune) > 1) { - rList.add( - GT_OreDictUnificator - .get(tRandom.nextInt(3) > 0 ? OrePrefixes.dustImpure : OrePrefixes.dust, Materials.Stone, 1L)); - } - } - return rList; - } - - @Override - public ITexture[] getTexture(Block aBlock, ForgeDirection side) { - Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData); - if (aMaterial != null) { - ITexture aIconSet = TextureFactory - .of(aMaterial.getTexSet().mTextures[OrePrefixes.oreSmall.mTextureIndex], aMaterial.getRGBA()); - return new ITexture[] { TextureFactory.of(Blocks.stone), aIconSet }; - } - return new ITexture[] { TextureFactory.of(Blocks.stone), - TextureFactory.of(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.oreSmall.mTextureIndex]) }; - } - - @Override - protected Block GetProperBlock() { - return WerkstoffLoader.BWSmallOres; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Block_TE.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Block_TE.java deleted file mode 100644 index 77d3c23fbc..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Block_TE.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import static com.github.bartimaeusnek.bartworks.MainMod.BW_Network_instance; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.Packet; -import net.minecraft.tileentity.TileEntity; - -import com.github.bartimaeusnek.bartworks.common.net.MetaBlockPacket; - -import gregtech.api.interfaces.tileentity.ITexturedTileEntity; - -public abstract class BW_MetaGenerated_Block_TE extends TileEntity implements ITexturedTileEntity { - - public short mMetaData; - - @Override - public boolean canUpdate() { - return false; - } - - @Override - public void readFromNBT(NBTTagCompound aNBT) { - super.readFromNBT(aNBT); - this.mMetaData = aNBT.getShort("m"); - } - - @Override - public void writeToNBT(NBTTagCompound aNBT) { - super.writeToNBT(aNBT); - aNBT.setShort("m", this.mMetaData); - } - - @Override - public Packet getDescriptionPacket() { - if (!this.worldObj.isRemote) BW_Network_instance.sendPacketToAllPlayersInRange( - this.worldObj, - new MetaBlockPacket(this.xCoord, (short) this.yCoord, this.zCoord, this.mMetaData), - this.xCoord, - this.zCoord); - return null; - } - - protected abstract Block GetProperBlock(); - - public ArrayList getDrops(int aFortune) { - ArrayList rList = new ArrayList<>(); - if (this.mMetaData <= 0) { - rList.add(new ItemStack(Blocks.cobblestone, 1, 0)); - return rList; - } - rList.add(new ItemStack(this.GetProperBlock(), 1, this.mMetaData)); - return rList; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Blocks.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Blocks.java deleted file mode 100644 index 84a498070a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Blocks.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import static com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_Items.metaTab; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.block.ITileEntityProvider; -import net.minecraft.block.material.Material; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.client.renderer.BW_Renderer_Block_Ores; -import com.github.bartimaeusnek.bartworks.common.blocks.BW_TileEntityContainer; -import com.github.bartimaeusnek.bartworks.util.BW_Util; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_LanguageManager; - -public abstract class BW_MetaGenerated_Blocks extends BW_TileEntityContainer { - - public static ThreadLocal mTemporaryTileEntity = new ThreadLocal<>(); - protected OrePrefixes _prefixes; - protected String blockTypeLocalizedName; - - public BW_MetaGenerated_Blocks(Material p_i45386_1_, Class tileEntity, String blockName) { - this(p_i45386_1_, tileEntity, blockName, null); - } - - public BW_MetaGenerated_Blocks(Material p_i45386_1_, Class tileEntity, String blockName, - OrePrefixes types) { - super(p_i45386_1_, tileEntity, blockName); - this.setHardness(5.0F); - this.setResistance(5.0F); - this.setBlockTextureName("stone"); - this.setCreativeTab(metaTab); - this._prefixes = types; - if (this._prefixes != null) { - this.blockTypeLocalizedName = GT_LanguageManager.addStringLocalization( - "bw.blocktype." + this._prefixes, - this._prefixes.mLocalizedMaterialPre + "%material" + this._prefixes.mLocalizedMaterialPost); - } - Werkstoff.werkstoffHashSet.forEach(this::doRegistrationStuff); - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - super.onBlockAdded(aWorld, aX, aY, aZ); - // Waste some time to allow the TE to be set, do not use thread sleep here, it doesnt allow for nanoseconds. - // This will just waste a few cpu cycles to allow the TE to be set - BW_Util.shortSleep(0); - } - - @SideOnly(Side.CLIENT) - public final BW_MetaGenerated_Block_TE getProperTileEntityForRendering() { - return (BW_MetaGenerated_Block_TE) this.createNewTileEntity(null, 0); - } - - protected abstract void doRegistrationStuff(Werkstoff w); - - @Override - public String getHarvestTool(int metadata) { - return "pickaxe"; - } - - @Override - protected boolean canSilkHarvest() { - return false; - } - - @Override - public int getRenderType() { - if (BW_Renderer_Block_Ores.INSTANCE == null) return super.getRenderType(); - return BW_Renderer_Block_Ores.INSTANCE.renderID; - } - - @Override - public int getDamageValue(World aWorld, int aX, int aY, int aZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof BW_MetaGenerated_Block_TE metaTE) { - return metaTE.mMetaData; - } - return 0; - } - - @Override - public TileEntity createTileEntity(World world, int metadata) { - return ((ITileEntityProvider) this).createNewTileEntity(world, metadata); - } - - @Override - public boolean hasTileEntity(int metadata) { - return true; - } - - @Override - public void breakBlock(World world, int x, int y, int z, Block block, int meta) { - TileEntity tTileEntity = world.getTileEntity(x, y, z); - if (tTileEntity instanceof BW_MetaGenerated_Block_TE metaTE) { - mTemporaryTileEntity.set(metaTE); - } - super.breakBlock(world, x, y, z, block, meta); - } - - @Override - public ArrayList getDrops(World aWorld, int aX, int aY, int aZ, int aMeta, int aFortune) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof BW_MetaGenerated_Block_TE metaTE) { - return metaTE.getDrops(aFortune); - } - return mTemporaryTileEntity.get() == null ? new ArrayList<>() - : mTemporaryTileEntity.get() - .getDrops(aFortune); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Items.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Items.java deleted file mode 100644 index 1ec9c7c008..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Items.java +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import static com.github.bartimaeusnek.bartworks.system.material.Werkstoff.werkstoffHashMap; -import static com.github.bartimaeusnek.bartworks.system.material.Werkstoff.werkstoffHashSet; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; - -import com.github.bartimaeusnek.bartworks.API.IRadMaterial; -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.client.textures.PrefixTextureLinker; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Item; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import ic2.core.IC2Potion; - -public class BW_MetaGenerated_Items extends GT_MetaGenerated_Item implements IRadMaterial { - - public static final CreativeTabs metaTab = new CreativeTabs("bartworksMetaMaterials") { - - @Override - public Item getTabIconItem() { - return new ItemStack(Blocks.iron_ore).getItem(); - } - }; - - protected final OrePrefixes orePrefixes; - protected final String itemTypeLocalizedName; - - public BW_MetaGenerated_Items(OrePrefixes orePrefixes, Object unused) { - super("bwMetaGeneratedGTEnhancement" + orePrefixes.name(), (short) 32766, (short) 0); - this.orePrefixes = orePrefixes; - this.itemTypeLocalizedName = GT_LanguageManager.addStringLocalization( - "bw.itemtype." + orePrefixes, - orePrefixes.mLocalizedMaterialPre + "%material" + orePrefixes.mLocalizedMaterialPost); - } - - public BW_MetaGenerated_Items(OrePrefixes orePrefixes) { - super("bwMetaGenerated" + orePrefixes.name(), (short) 32766, (short) 0); - this.orePrefixes = orePrefixes; - this.itemTypeLocalizedName = GT_LanguageManager.addStringLocalization( - "bw.itemtype." + orePrefixes, - orePrefixes.mLocalizedMaterialPre + "%material" + orePrefixes.mLocalizedMaterialPost); - this.setCreativeTab(BW_MetaGenerated_Items.metaTab); - for (Werkstoff w : werkstoffHashSet) { - ItemStack tStack = new ItemStack(this, 1, w.getmID()); - if (!w.hasItemType(this.orePrefixes)) continue; - GT_OreDictUnificator.registerOre(this.orePrefixes.name() + w.getVarName(), tStack); - } - } - - @Override - public boolean onEntityItemUpdate(EntityItem aItemEntity) { - if (this.orePrefixes == OrePrefixes.dustImpure || this.orePrefixes == OrePrefixes.dustPure - || this.orePrefixes == OrePrefixes.crushed) { - int aDamage = aItemEntity.getEntityItem() - .getItemDamage(); - if (aDamage >= 0 && !aItemEntity.worldObj.isRemote) { - Werkstoff aMaterial = werkstoffHashMap.get((short) aDamage); - if (aMaterial != null && aMaterial != Werkstoff.default_null_Werkstoff) { - int tX = MathHelper.floor_double(aItemEntity.posX); - int tY = MathHelper.floor_double(aItemEntity.posY); - int tZ = MathHelper.floor_double(aItemEntity.posZ); - Block tBlock = aItemEntity.worldObj.getBlock(tX, tY, tZ); - byte tMetaData = (byte) aItemEntity.worldObj.getBlockMetadata(tX, tY, tZ); - if (tBlock == Blocks.cauldron && tMetaData > 0) { - if (this.orePrefixes == OrePrefixes.dustImpure || this.orePrefixes == OrePrefixes.dustPure) { - aItemEntity.setEntityItemStack( - WerkstoffLoader.getCorrespondingItemStack( - OrePrefixes.dust, - aMaterial, - aItemEntity.getEntityItem().stackSize)); - aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3); - return true; - } else { - aItemEntity.setEntityItemStack( - WerkstoffLoader.getCorrespondingItemStack( - OrePrefixes.crushedPurified, - aMaterial, - aItemEntity.getEntityItem().stackSize)); - aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3); - return true; - } - } - } - } - } - return false; - } - - @Override - protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - if (this.orePrefixes == OrePrefixes.dustImpure || this.orePrefixes == OrePrefixes.dustPure) { - aList.add(GT_LanguageManager.getTranslation("metaitem.01.tooltip.purify")); - } - if (this.orePrefixes == OrePrefixes.crushed) - aList.add(GT_LanguageManager.getTranslation("metaitem.01.tooltip.purify.2")); - - if (aStack != null && aStack.getItem() instanceof BW_MetaGenerated_Items - && aStack.getItemDamage() == WerkstoffLoader.Tiberium.getmID()) - aList.add(GT_LanguageManager.getTranslation("metaitem.01.tooltip.nqgen")); - - Werkstoff werkstoff = werkstoffHashMap.get((short) this.getDamage(aStack)); - if (werkstoff != null) { - String tooltip = werkstoff.getLocalizedToolTip(); - if (!tooltip.isEmpty()) { - aList.add(tooltip); - } - } - } - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - int aMetaData = aStack.getItemDamage(); - Werkstoff werkstoff = werkstoffHashMap.get((short) aMetaData); - if (werkstoff == null) werkstoff = Werkstoff.default_null_Werkstoff; - return this.itemTypeLocalizedName.replace("%material", werkstoff.getLocalizedName()); - } - - @Override - public IIconContainer getIconContainer(int aMetaData) { - if (werkstoffHashMap.get((short) aMetaData) == null) return null; - if (this.orePrefixes.mTextureIndex == -1) return this.getIconContainerBartWorks(aMetaData); - return werkstoffHashMap.get((short) aMetaData) - .getTexSet().mTextures[this.orePrefixes.mTextureIndex]; - } - - protected IIconContainer getIconContainerBartWorks(int aMetaData) { - if (SideReference.Side.Client) return PrefixTextureLinker.texMap.get(this.orePrefixes) - .get( - werkstoffHashMap.get((short) aMetaData) - .getTexSet()); - return null; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) { - for (Werkstoff werkstoff : werkstoffHashSet) { - if (werkstoff != null && werkstoff.hasItemType(this.orePrefixes)) { - ItemStack tStack = new ItemStack(this, 1, werkstoff.getmID()); - aList.add(tStack); - } - } - // super.getSubItems(var1, aCreativeTab, aList); - } - - @Override - public short[] getRGBa(ItemStack aStack) { - Werkstoff werkstoff = werkstoffHashMap.get((short) this.getDamage(aStack)); - return werkstoff == null ? Materials._NULL.mRGBa : werkstoff.getRGBA(); - } - - @Override - public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) { - super.onUpdate(aStack, aWorld, aPlayer, aTimer, aIsInHand); - if (aStack == null || aStack.getItem() == null || !(aPlayer instanceof EntityLivingBase)) return; - - EntityLivingBase bPlayer = (EntityPlayer) aPlayer; - Werkstoff w = werkstoffHashMap.get((short) aStack.getItemDamage()); - if (w == null || w.getStats() == null) return; - - if (w.getStats() - .isToxic() && !GT_Utility.isWearingFullBioHazmat(bPlayer)) { - bPlayer.addPotionEffect(new PotionEffect(Potion.poison.getId(), 80, 4)); - } - - if (w.getStats() - .isRadioactive() && !GT_Utility.isWearingFullRadioHazmat(bPlayer)) { - bPlayer.addPotionEffect(new PotionEffect(IC2Potion.radiation.id, 80, 4)); - } - } - - @Override - public IIcon getIconFromDamage(int aMetaData) { - if (aMetaData < 0) return null; - Werkstoff tMaterial = werkstoffHashMap.get((short) aMetaData); - if (tMaterial == null) return null; - IIconContainer tIcon = this.getIconContainer(aMetaData); - if (tIcon != null) return tIcon.getIcon(); - return null; - } - - @Override - public int getItemStackLimit(ItemStack aStack) { - return this.orePrefixes.mDefaultStackSize; - } - - @Override - public int getRadiationLevel(ItemStack aStack) { - Werkstoff w = werkstoffHashMap.get((short) aStack.getItemDamage()); - return w.getStats() - .isRadioactive() - ? (int) w.getStats() - .getProtons() - : 0; - } - - @Override - public byte getAmountOfMaterial(ItemStack aStack) { - return (byte) (this.orePrefixes == OrePrefixes.stick ? 1 : this.orePrefixes == OrePrefixes.stickLong ? 2 : 0); - } - - @Override - public short[] getColorForGUI(ItemStack aStack) { - Werkstoff w = werkstoffHashMap.get((short) aStack.getItemDamage()); - return w.getRGBA(); - } - - @Override - public String getNameForGUI(ItemStack aStack) { - Werkstoff w = werkstoffHashMap.get((short) aStack.getItemDamage()); - return w.getDefaultName(); - } - - @Override - public int getCapacity(ItemStack aStack) { - return this.orePrefixes == OrePrefixes.capsule || this.orePrefixes == OrePrefixes.cell - || this.orePrefixes == OrePrefixes.cellPlasma ? 1000 - : this.orePrefixes == OrePrefixes.cellMolten || this.orePrefixes == OrePrefixes.capsuleMolten ? 144 : 0; - } - - @Override - public ItemStack getContainerItem(ItemStack aStack) { - return this.orePrefixes == OrePrefixes.cell || this.orePrefixes == OrePrefixes.cellPlasma - || this.orePrefixes == OrePrefixes.cellMolten ? Materials.Empty.getCells(1) : null; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Ores.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Ores.java deleted file mode 100644 index 2adb0d3d35..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_Ores.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -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; -import net.minecraftforge.common.util.FakePlayer; - -import com.github.bartimaeusnek.bartworks.util.MathUtils; - -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; - -public class BW_MetaGenerated_Ores extends BW_MetaGenerated_Blocks { - - public BW_MetaGenerated_Ores(Material p_i45386_1_, Class tileEntity, String blockName) { - super(p_i45386_1_, tileEntity, blockName); - this.blockTypeLocalizedName = GT_LanguageManager.addStringLocalization( - "bw.blocktype." + OrePrefixes.ore, - OrePrefixes.ore.mLocalizedMaterialPre + "%material" + OrePrefixes.ore.mLocalizedMaterialPost); - } - - @Override - protected void doRegistrationStuff(Werkstoff w) { - if (w != null) { - if (!w.hasItemType(OrePrefixes.ore) || (w.getGenerationFeatures().blacklist & 0b1000) != 0) return; - GT_ModHandler.addValuableOre(this, w.getmID(), 1); - } - } - - public static boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData, boolean air, Block block, - int[] aBlockMeta) { - if (!air) { - aY = MathUtils.clamp(aY, 1, aWorld.getActualHeight()); - } - - Block tBlock = aWorld.getBlock(aX, aY, aZ); - Block tOreBlock = WerkstoffLoader.BWOres; - if (aMetaData < 0 || tBlock == Blocks.air && !air - || Block.getIdFromBlock(tBlock) != Block.getIdFromBlock(block)) { - return false; - } - final int aaY = aY; - if (Arrays.stream(aBlockMeta) - .noneMatch(e -> e == aWorld.getBlockMetadata(aX, aaY, aZ))) { - return false; - } - - aWorld.setBlock(aX, aY, aZ, tOreBlock, aMetaData, 0); - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof BW_MetaGeneratedOreTE metaTE) { - metaTE.mMetaData = (short) aMetaData; - metaTE.mNatural = true; - } - - return true; - } - - @Override - public IIcon getIcon(int side, int meta) { - return Blocks.stone.getIcon(0, 0); - } - - @Override - public IIcon getIcon(IBlockAccess worldIn, int x, int y, int z, int side) { - return Blocks.stone.getIcon(0, 0); - } - - @Override - public int getHarvestLevel(int metadata) { - return 3; - } - - @Override - public String getUnlocalizedName() { - return "bw.blockores.01"; - } - - @Override - public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) { - for (Werkstoff tMaterial : Werkstoff.werkstoffHashSet) { - if (tMaterial != null && tMaterial.hasItemType(OrePrefixes.ore) - && (tMaterial.getGenerationFeatures().blacklist & 0x8) == 0) { - aList.add(new ItemStack(aItem, 1, tMaterial.getmID())); - } - } - } - - @Override - public void harvestBlock(World worldIn, EntityPlayer player, int x, int y, int z, int meta) { - if (EnchantmentHelper.getSilkTouchModifier(player)) { - BW_MetaGeneratedOreTE.shouldSilkTouch = true; - super.harvestBlock(worldIn, player, x, y, z, meta); - - if (BW_MetaGeneratedOreTE.shouldSilkTouch) { - BW_MetaGeneratedOreTE.shouldSilkTouch = false; - } - return; - } - - if (!(player instanceof FakePlayer)) { - BW_MetaGeneratedOreTE.shouldFortune = true; - } - super.harvestBlock(worldIn, player, x, y, z, meta); - if (BW_MetaGeneratedOreTE.shouldFortune) { - BW_MetaGeneratedOreTE.shouldFortune = false; - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_SmallOres.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_SmallOres.java deleted file mode 100644 index 0778645cb5..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_SmallOres.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import java.util.Arrays; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; - -public class BW_MetaGenerated_SmallOres extends BW_MetaGenerated_Ores { - - public BW_MetaGenerated_SmallOres(Material p_i45386_1_, Class tileEntity, String blockName) { - super(p_i45386_1_, tileEntity, blockName); - this.blockTypeLocalizedName = GT_LanguageManager.addStringLocalization( - "bw.blocktype." + OrePrefixes.oreSmall, - OrePrefixes.oreSmall.mLocalizedMaterialPre + "%material" + OrePrefixes.oreSmall.mLocalizedMaterialPost); - } - - @Override - protected void doRegistrationStuff(Werkstoff w) { - if (w != null) { - if (!w.hasItemType(OrePrefixes.ore) || (w.getGenerationFeatures().blacklist & 0b1000) != 0) return; - GT_ModHandler.addValuableOre(this, w.getmID(), 1); - } - } - - @Override - public String getUnlocalizedName() { - return "bw.blockores.02"; - } - - public static boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData, boolean air, Block block, - int[] aBlockMeta) { - if (!air) { - aY = Math.min(aWorld.getActualHeight(), Math.max(aY, 1)); - } - - Block tBlock = aWorld.getBlock(aX, aY, aZ); - Block tOreBlock = WerkstoffLoader.BWSmallOres; - if (aMetaData < 0 || tBlock == Blocks.air && !air - || Block.getIdFromBlock(tBlock) != Block.getIdFromBlock(block)) { - return false; - } - final int aaY = aY; - if (Arrays.stream(aBlockMeta) - .noneMatch(e -> e == aWorld.getBlockMetadata(aX, aaY, aZ))) { - return false; - } - - aWorld.setBlock(aX, aY, aZ, tOreBlock, aMetaData, 0); - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof BW_MetaGeneratedOreTE metaTE) { - metaTE.mMetaData = (short) aMetaData; - } - - return true; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_WerkstoffBlock_TE.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_WerkstoffBlock_TE.java deleted file mode 100644 index 4456a66535..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_WerkstoffBlock_TE.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.client.textures.PrefixTextureLinker; - -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.render.TextureFactory; - -public class BW_MetaGenerated_WerkstoffBlock_TE extends BW_MetaGenerated_Block_TE { - - @Override - public ITexture[] getTexture(Block aBlock, ForgeDirection side) { - if (SideReference.Side.Client) { - Werkstoff aMaterial = Werkstoff.werkstoffHashMap.get(this.mMetaData); - if (aMaterial != null) { - TextureSet set = aMaterial.getTexSet(); - ITexture aIconSet = TextureFactory.of( - set.mTextures[PrefixTextureLinker.blockTexMap.getOrDefault(set, OrePrefixes.block.mTextureIndex)], - aMaterial.getRGBA()); - return new ITexture[] { TextureFactory.of(Blocks.iron_block), aIconSet }; - } - } - return new ITexture[] { TextureFactory.of(Blocks.iron_block), - TextureFactory.of(gregtech.api.enums.TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex]) }; - } - - @Override - protected Block GetProperBlock() { - return WerkstoffLoader.BWBlocks; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_WerkstoffBlocks.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_WerkstoffBlocks.java deleted file mode 100644 index 648f9a0027..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_MetaGenerated_WerkstoffBlocks.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import java.util.List; - -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_LanguageManager; - -public class BW_MetaGenerated_WerkstoffBlocks extends BW_MetaGenerated_Blocks { - - public BW_MetaGenerated_WerkstoffBlocks(Material p_i45386_1_, Class tileEntity, - String blockName) { - super(p_i45386_1_, tileEntity, blockName); - this.blockTypeLocalizedName = GT_LanguageManager.addStringLocalization( - "bw.blocktype." + OrePrefixes.block, - OrePrefixes.block.mLocalizedMaterialPre + "%material" + OrePrefixes.block.mLocalizedMaterialPost); - } - - @Override - protected void doRegistrationStuff(Werkstoff tMaterial) {} - - @Override - public String getUnlocalizedName() { - return "bw.werkstoffblocks.01"; - } - - @Override - public IIcon getIcon(int side, int meta) { - return Blocks.iron_block.getIcon(0, 0); - } - - @Override - public IIcon getIcon(IBlockAccess worldIn, int x, int y, int z, int side) { - return Blocks.iron_block.getIcon(0, 0); - } - - @Override - public void getSubBlocks(Item aItem, CreativeTabs tab, List aList) { - Werkstoff.werkstoffHashSet.stream() - .filter(tMaterial -> tMaterial.hasItemType(OrePrefixes.gem) || tMaterial.hasItemType(OrePrefixes.ingot)) - .map(tMaterial -> new ItemStack(aItem, 1, tMaterial.getmID())) - .forEach(aList::add); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_NonMeta_MaterialItems.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_NonMeta_MaterialItems.java deleted file mode 100644 index 62c688f2ab..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/BW_NonMeta_MaterialItems.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import static gregtech.api.enums.GT_Values.W; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import gregtech.api.interfaces.IItemContainer; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public enum BW_NonMeta_MaterialItems implements IItemContainer { - - Depleted_Tiberium_1, - Depleted_Tiberium_2, - Depleted_Tiberium_4, - TiberiumCell_1, - TiberiumCell_2, - TiberiumCell_4, - TheCoreCell, - Depleted_TheCoreCell; - - private ItemStack mStack; - private boolean mHasNotBeenSet = true; - - @Override - public IItemContainer set(Item aItem) { - this.mHasNotBeenSet = false; - if (aItem == null) return this; - ItemStack aStack = new ItemStack(aItem, 1, 0); - this.mStack = GT_Utility.copyAmount(1, aStack); - return this; - } - - @Override - public IItemContainer set(ItemStack aStack) { - this.mHasNotBeenSet = false; - this.mStack = GT_Utility.copyAmount(1, aStack); - return this; - } - - @Override - public IItemContainer hidden() { - codechicken.nei.api.API.hideItem(get(1L)); - return this; - } - - @Override - public Item getItem() { - if (this.mHasNotBeenSet) - throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(this.mStack)) return null; - return this.mStack.getItem(); - } - - @Override - public Block getBlock() { - if (this.mHasNotBeenSet) - throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); - return GT_Utility.getBlockFromItem(this.getItem()); - } - - @Override - public final boolean hasBeenSet() { - return !this.mHasNotBeenSet; - } - - @Override - public boolean isStackEqual(Object aStack) { - return this.isStackEqual(aStack, false, false); - } - - @Override - public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT) { - if (GT_Utility.isStackInvalid(aStack)) return false; - return GT_Utility - .areUnificationsEqual((ItemStack) aStack, aWildcard ? this.getWildcard(1) : this.get(1), aIgnoreNBT); - } - - @Override - public ItemStack get(long aAmount, Object... aReplacements) { - if (this.mHasNotBeenSet) - throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(this.mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmount(aAmount, GT_OreDictUnificator.get(this.mStack)); - } - - @Override - public ItemStack getWildcard(long aAmount, Object... aReplacements) { - if (this.mHasNotBeenSet) - throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(this.mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmountAndMetaData(aAmount, W, GT_OreDictUnificator.get(this.mStack)); - } - - @Override - public ItemStack getUndamaged(long aAmount, Object... aReplacements) { - if (this.mHasNotBeenSet) - throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(this.mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmountAndMetaData(aAmount, 0, GT_OreDictUnificator.get(this.mStack)); - } - - @Override - public ItemStack getAlmostBroken(long aAmount, Object... aReplacements) { - if (this.mHasNotBeenSet) - throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(this.mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility - .copyAmountAndMetaData(aAmount, this.mStack.getMaxDamage() - 1, GT_OreDictUnificator.get(this.mStack)); - } - - @Override - public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements) { - ItemStack rStack = this.get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) return null; - rStack.setStackDisplayName(aDisplayName); - return GT_Utility.copyAmount(aAmount, rStack); - } - - @Override - public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements) { - ItemStack rStack = this.get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) return null; - GT_ModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); - return GT_Utility.copyAmount(aAmount, rStack); - } - - @Override - public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements) { - if (this.mHasNotBeenSet) - throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(this.mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmountAndMetaData(aAmount, aMetaValue, GT_OreDictUnificator.get(this.mStack)); - } - - @Override - public IItemContainer registerOre(Object... aOreNames) { - if (this.mHasNotBeenSet) - throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); - for (Object tOreName : aOreNames) GT_OreDictUnificator.registerOre(tOreName, this.get(1)); - return this; - } - - @Override - public IItemContainer registerWildcardAsOre(Object... aOreNames) { - if (this.mHasNotBeenSet) - throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); - for (Object tOreName : aOreNames) GT_OreDictUnificator.registerOre(tOreName, this.getWildcard(1)); - return this; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/BW_CircuitsLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/BW_CircuitsLoader.java deleted file mode 100644 index fc06128254..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/BW_CircuitsLoader.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration; - -public class BW_CircuitsLoader { - - private static final BW_Meta_Items NEW_CIRCUITS = new BW_Meta_Items(); - - private BW_CircuitsLoader() {} - - public static void initNewCircuits() { - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/BW_Meta_Items.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/BW_Meta_Items.java deleted file mode 100644 index 58d54a321d..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/BW_Meta_Items.java +++ /dev/null @@ -1,328 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration; - -import static gregtech.api.recipe.RecipeMaps.formingPressRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import java.util.ArrayList; -import java.util.BitSet; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; - -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.IIcon; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.util.BW_Util; - -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.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IItemBehaviour; -import gregtech.api.interfaces.IItemContainer; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class BW_Meta_Items { - - public static BW_Meta_Items.BW_GT_MetaGenCircuits getCircuitParts() { - return BW_Meta_Items.NEW_CIRCUIT_PARTS; - } - - private static final BW_Meta_Items.BW_GT_MetaGenCircuits NEW_CIRCUIT_PARTS = new BW_Meta_Items.BW_GT_MetaGenCircuits(); - - static { - BW_Meta_Items.NEW_CIRCUIT_PARTS.addItem(0, "Circuit Imprint", "", SubTag.NO_UNIFICATION, SubTag.NO_RECYCLING); - BW_Meta_Items.NEW_CIRCUIT_PARTS.addItem(1, "Sliced Circuit", "", SubTag.NO_UNIFICATION, SubTag.NO_RECYCLING); - BW_Meta_Items.NEW_CIRCUIT_PARTS - .addItem(2, "Raw Imprint supporting Board", "A Raw Board needed for Circuit Imprints"); - BW_Meta_Items.NEW_CIRCUIT_PARTS.addItem(3, "Imprint supporting Board", "A Board needed for Circuit Imprints"); - - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.dust, 1), - WerkstoffLoader.ArInGaPhoBiBoTe.get(OrePrefixes.dust, 4)) - .itemOutputs(BW_Meta_Items.NEW_CIRCUIT_PARTS.getStack(2)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(formingPressRecipes); - - RecipeMaps.autoclaveRecipes.add( - new GT_Recipe( - false, - new ItemStack[] { BW_Meta_Items.NEW_CIRCUIT_PARTS.getStack(2) }, - new ItemStack[] { BW_Meta_Items.NEW_CIRCUIT_PARTS.getStack(3) }, - null, - new int[] { 7500 }, - new FluidStack[] { Materials.SolderingAlloy.getMolten(576) }, - null, - 300, - (int) TierEU.RECIPE_EV, - BW_Util.CLEANROOM)); - } - - public static class BW_GT_MetaGenCircuits extends BW_Meta_Items.BW_GT_MetaGen_Item_Hook { - - public BW_GT_MetaGenCircuits() { - super("bwMetaGeneratedItem0"); - } - - public final ItemStack getStack(int meta) { - return getStack(meta, 1); - } - - public final ItemStack getStack(int meta, int stackSize) { - return new ItemStack(this, stackSize, meta); - } - - public final ItemStack getStackWithNBT(NBTTagCompound tag, int meta, int stackSize) { - ItemStack itemStack = getStack(meta, stackSize); - itemStack.setTagCompound(tag); - return itemStack; - } - - @Override - public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) { - if (aCreativeTab == this.getCreativeTab()) - for (NBTTagCompound tag : CircuitImprintLoader.recipeTagMap.keySet()) { - ItemStack stack = new ItemStack(BW_Meta_Items.NEW_CIRCUIT_PARTS, 1, 0); - stack.setTagCompound(tag); - aList.add(stack); - } - super.getSubItems(var1, aCreativeTab, aList); - } - - @Override - @SideOnly(Side.CLIENT) - public final void registerIcons(IIconRegister aIconRegister) { - - for (short i = 0; i < CircuitImprintLoader.reverseIDs; ++i) { - if (this.mEnabledItems.get(i)) { - BW_Util.set2DCoordTo1DArray( - i, - 0, - 2, - aIconRegister.registerIcon("gregtech:" + this.getUnlocalizedName() + "/" + i), - this.mIconList); - } - } - - for (short i = CircuitImprintLoader.reverseIDs; i < Short.MAX_VALUE; i++) { - if (this.mEnabledItems.get(i)) { - BW_Util.set2DCoordTo1DArray( - i, - 0, - 2, - Objects.requireNonNull(CircuitImprintLoader.circuitIIconRefs.get(i)) - .get(1) - .getIconIndex(), - this.mIconList); - BW_Util.set2DCoordTo1DArray( - i, - 1, - 2, - aIconRegister.registerIcon(MainMod.MOD_ID + ":WrapOverlay"), - this.mIconList); - } - } - } - - @Override - protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - if (aStack.getTagCompound() != null) { - ItemStack tagStack = CircuitImprintLoader.getStackFromTag(aStack.getTagCompound()); - String itemName = tagStack != null - ? GT_LanguageManager.getTranslation(GT_LanguageManager.getTranslateableItemStackName(tagStack)) - : "a circuit"; - - if (aStack.getItemDamage() == 0) { - aList.add("An imprint for: " + itemName); - } else if (aStack.getItemDamage() == 1) { - aList.add("A sliced " + itemName); - } - } else { - if (aStack.getItemDamage() == 0) { - aList.add("An imprint for a Circuit"); - } else if (aStack.getItemDamage() == 1) { - aList.add("A sliced Circuit"); - } - } - - super.addAdditionalToolTips(aList, aStack, aPlayer); - } - - } - - public static class BW_GT_MetaGen_Item_Hook extends GT_MetaBase_Item { - - public static final HashSet sInstances = new HashSet<>(); - public final IIcon[] mIconList; - public final BitSet mEnabledItems; - - { - this.mIconList = new IIcon[Short.MAX_VALUE * 2]; - this.mEnabledItems = new BitSet(Short.MAX_VALUE); - } - - private BW_GT_MetaGen_Item_Hook(String aUnlocalized) { - super(aUnlocalized); - - this.setCreativeTab(new CreativeTabs("bw.MetaItems.0") { - - @Override - public Item getTabIconItem() { - return ItemRegistry.TAB; - } - }); - this.setHasSubtypes(true); - this.setMaxDamage(0); - BW_Meta_Items.BW_GT_MetaGen_Item_Hook.sInstances.add(this); - } - - @Override - public Long[] getElectricStats(ItemStack itemStack) { - return null; - } - - @Override - public Long[] getFluidContainerStats(ItemStack itemStack) { - return null; - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - public final ItemStack addItem(int aID, String aEnglish, String aToolTip, Object... aRandomData) { - if (aToolTip == null) { - aToolTip = ""; - } - ItemStack rStack = new ItemStack(this, 1, aID); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName(rStack) + ".name", aEnglish); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName(rStack) + ".tooltip", aToolTip); - List tAspects = new ArrayList<>(); - this.mEnabledItems.set(aID); - Object[] var7 = aRandomData; - int var8 = aRandomData.length; - - int var9; - Object tRandomData; - for (var9 = 0; var9 < var8; ++var9) { - tRandomData = var7[var9]; - if (tRandomData instanceof SubTag && tRandomData == SubTag.NO_UNIFICATION) { - GT_OreDictUnificator.addToBlacklist(rStack); - } - } - - var7 = aRandomData; - var8 = aRandomData.length; - - for (var9 = 0; var9 < var8; ++var9) { - tRandomData = var7[var9]; - if (tRandomData != null) { - boolean tUseOreDict = true; - - if (tRandomData instanceof IItemBehaviour) { - this.addItemBehavior(aID, (IItemBehaviour) tRandomData); - tUseOreDict = false; - } - - if (tRandomData instanceof IItemContainer) { - ((IItemContainer) tRandomData).set(rStack); - tUseOreDict = false; - } - - if (!(tRandomData instanceof SubTag)) { - if (tRandomData instanceof TC_Aspects.TC_AspectStack) { - ((TC_Aspects.TC_AspectStack) tRandomData).addToAspectList(tAspects); - } else if (tRandomData instanceof ItemData) { - if (GT_Utility.isStringValid(tRandomData)) { - GT_OreDictUnificator.registerOre(tRandomData, rStack); - } else { - GT_OreDictUnificator.addItemData(rStack, (ItemData) tRandomData); - } - } else if (tUseOreDict) { - GT_OreDictUnificator.registerOre(tRandomData, rStack); - } - } - } - } - - if (GregTech_API.sThaumcraftCompat != null) { - GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); - } - - return rStack; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) { - int j = this.mEnabledItems.length(); - - for (int i = 0; i < j; ++i) { - if (this.mEnabledItems.get(i)) { - ItemStack tStack = new ItemStack(this, 1, i); - this.isItemStackUsable(tStack); - aList.add(tStack); - } - } - } - - @Override - protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - super.addAdditionalToolTips(aList, aStack, aPlayer); - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return this.getUnlocalizedName() + "." + aStack.getItemDamage(); - } - - @Override - public IIcon getIconFromDamage(int i) { - if (this.mEnabledItems.get(i)) return (IIcon) BW_Util.get2DCoordFrom1DArray(i, 0, 2, this.mIconList); - return null; - } - - @Override - public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, - int useRemaining) { - return this.getIconFromDamage(stack.getItemDamage()); - } - - @Override - public IIcon getIcon(ItemStack stack, int pass) { - return this.getIconFromDamage(stack.getItemDamage()); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitData.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitData.java deleted file mode 100644 index 874ae202f1..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitData.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration; - -import java.nio.ByteBuffer; - -import com.github.bartimaeusnek.bartworks.util.MurmurHash3; - -public class CircuitData { - - private long aVoltage; - private int aSpecial; - private byte aTier; - - public CircuitData(long aVoltage, int aSpecial, byte aTier) { - this.aVoltage = aVoltage; - this.aSpecial = aSpecial; - this.aTier = aTier; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof CircuitData that)) return false; - if (this.getaVoltage() != that.getaVoltage() || this.getaSpecial() != that.getaSpecial()) return false; - return this.getaTier() == that.getaTier(); - } - - @Override - public int hashCode() { - return MurmurHash3.murmurhash3_x86_32( - ByteBuffer.allocate(13) - .put(this.aTier) - .putInt(this.aSpecial) - .putLong(this.aVoltage) - .array(), - 0, - 13, - 31); - } - - public long getaVoltage() { - return this.aVoltage; - } - - public void setaVoltage(long aVoltage) { - this.aVoltage = aVoltage; - } - - public int getaSpecial() { - return this.aSpecial; - } - - public void setaSpecial(int aSpecial) { - this.aSpecial = aSpecial; - } - - public byte getaTier() { - return this.aTier; - } - - public void setaTier(byte aTier) { - this.aTier = aTier; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java deleted file mode 100644 index b6ad41e783..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitImprintLoader.java +++ /dev/null @@ -1,368 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; -import net.minecraftforge.oredict.ShapedOreRecipe; - -import com.github.bartimaeusnek.bartworks.API.recipe.BWNBTDependantCraftingRecipe; -import com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps; -import com.github.bartimaeusnek.bartworks.ASM.BWCoreStaticReplacementMethodes; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.github.bartimaeusnek.bartworks.util.Pair; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class CircuitImprintLoader { - - public static short reverseIDs = Short.MAX_VALUE - 1; - - public static final ArrayListMultimap recipeTagMap = ArrayListMultimap.create(); - public static final HashBiMap circuitIIconRefs = HashBiMap.create(20); - public static final HashSet blacklistSet = new HashSet<>(); - static final HashBiMap bwCircuitTagMap = HashBiMap.create(20); - private static final HashSet recipeWorldCache = new HashSet<>(); - private static final HashSet gtrecipeWorldCache = new HashSet<>(); - private static final HashSet ORIGINAL_CAL_RECIPES = new HashSet<>(); - private static final HashSet MODIFIED_CAL_RECIPES = new HashSet<>(); - - public static void run() { - HashSet toRem = new HashSet<>(); - HashSet toAdd = new HashSet<>(); - - deleteCALRecipesAndTags(); - rebuildCircuitAssemblerMap(toRem, toAdd); - exchangeRecipesInList(toRem, toAdd); - makeCircuitImprintRecipes(); - - toRem = null; - toAdd = null; - } - - private static void reAddOriginalRecipes() { - RecipeMaps.circuitAssemblerRecipes.getBackend() - .removeRecipes(MODIFIED_CAL_RECIPES); - ORIGINAL_CAL_RECIPES.forEach(RecipeMaps.circuitAssemblerRecipes::add); - ORIGINAL_CAL_RECIPES.clear(); - MODIFIED_CAL_RECIPES.clear(); - } - - private static void rebuildCircuitAssemblerMap(HashSet toRem, HashSet toAdd) { - reAddOriginalRecipes(); - RecipeMaps.circuitAssemblerRecipes.getAllRecipes() - .forEach(e -> CircuitImprintLoader.handleCircuitRecipeRebuilding(e, toRem, toAdd)); - } - - private static void handleCircuitRecipeRebuilding(GT_Recipe circuitRecipe, HashSet toRem, - HashSet toAdd) { - ItemStack[] outputs = circuitRecipe.mOutputs; - boolean isOrePass = isCircuitOreDict(outputs[0]); - String unlocalizedName = outputs[0].getUnlocalizedName(); - if (isOrePass || unlocalizedName.contains("Circuit") || unlocalizedName.contains("circuit")) { - - CircuitImprintLoader.recipeTagMap - .put(CircuitImprintLoader.getTagFromStack(outputs[0]), circuitRecipe.copy()); - - Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null - ? FluidRegistry.getFluid("molten.indalloy140") - : FluidRegistry.getFluid("molten.solderingalloy"); - - Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null - ? FluidRegistry.getFluid("molten.mutatedlivingsolder") - : FluidRegistry.getFluid("molten.solderingalloy"); - - if (circuitRecipe.mFluidInputs[0].isFluidEqual(Materials.SolderingAlloy.getMolten(0)) - || circuitRecipe.mFluidInputs[0].isFluidEqual(new FluidStack(solderIndalloy, 0)) - || circuitRecipe.mFluidInputs[0].isFluidEqual(new FluidStack(solderUEV, 0))) { - GT_Recipe newRecipe = CircuitImprintLoader.reBuildRecipe(circuitRecipe); - if (newRecipe != null) BartWorksRecipeMaps.circuitAssemblyLineRecipes.addRecipe(newRecipe); - addCutoffRecipeToSets(toRem, toAdd, circuitRecipe); - } else if (circuitRecipe.mEUt > BW_Util.getTierVoltage(ConfigHandler.cutoffTier)) toRem.add(circuitRecipe); - } - } - - private static boolean isCircuitOreDict(ItemStack item) { - return BW_Util.isTieredCircuit(item) || BW_Util.getOreNames(item) - .stream() - .anyMatch(s -> "circuitPrimitiveArray".equals(s)); - } - - private static void exchangeRecipesInList(HashSet toRem, HashSet toAdd) { - toAdd.forEach(RecipeMaps.circuitAssemblerRecipes::add); - RecipeMaps.circuitAssemblerRecipes.getBackend() - .removeRecipes(toRem); - ORIGINAL_CAL_RECIPES.addAll(toRem); - MODIFIED_CAL_RECIPES.addAll(toAdd); - } - - private static void addCutoffRecipeToSets(HashSet toRem, HashSet toAdd, - GT_Recipe circuitRecipe) { - if (circuitRecipe.mEUt > BW_Util.getTierVoltage(ConfigHandler.cutoffTier)) { - toRem.add(circuitRecipe); - toAdd.add(CircuitImprintLoader.makeMoreExpensive(circuitRecipe)); - } - } - - @SuppressWarnings("deprecation") - public static GT_Recipe makeMoreExpensive(GT_Recipe original) { - GT_Recipe newRecipe = original.copy(); - for (ItemStack is : newRecipe.mInputs) { - if (!BW_Util.isTieredCircuit(is)) { - is.stackSize = Math.min(is.stackSize * 6, 64); - if (is.stackSize > is.getItem() - .getItemStackLimit() || is.stackSize > is.getMaxStackSize()) is.stackSize = is.getMaxStackSize(); - } - } - newRecipe.mFluidInputs[0].amount *= 4; - newRecipe.mDuration *= 4; - return newRecipe; - } - - public static GT_Recipe reBuildRecipe(GT_Recipe original) { - ItemStack[] in = new ItemStack[6]; - BiMap inversed = CircuitImprintLoader.circuitIIconRefs.inverse(); - - for (int i = 0; i < 6; i++) { - try { - replaceCircuits(inversed, original, in, i); - replaceComponents(in, original, i); - } catch (ArrayIndexOutOfBoundsException e) { - break; - } catch (NullPointerException e) { - e.printStackTrace(); - } - } - - if (CircuitImprintLoader.checkForBlacklistedComponents(in)) { - return null; - } - - return new GT_Recipe( - false, - in, - new ItemStack[] { getOutputMultiplied(original) }, - BW_Meta_Items.getCircuitParts() - .getStackWithNBT(CircuitImprintLoader.getTagFromStack(original.mOutputs[0]), 0, 0), - null, - original.mFluidInputs, - null, - original.mDuration * 12, - original.mEUt, - 0); - } - - private static ItemStack getOutputMultiplied(GT_Recipe original) { - ItemStack out = original.copy() - .getOutput(0); - out.stackSize *= 16; - return out; - } - - private static void replaceCircuits(BiMap inversed, GT_Recipe original, ItemStack[] in, - int index) { - for (ItemList il : inversed.keySet()) { - if (GT_Utility.areStacksEqual(il.get(1), replaceCircuitParts(original.mInputs[index]))) { - in[index] = BW_Meta_Items.getCircuitParts() - .getStack(inversed.get(il), original.mInputs[index].stackSize); - } - } - } - - private static final List> circuitPartsToReplace = Collections.unmodifiableList( - Arrays.asList( - new Pair<>(ItemList.Circuit_Parts_Resistor.get(1), ItemList.Circuit_Parts_ResistorSMD.get(1)), - new Pair<>(ItemList.Circuit_Parts_Diode.get(1), ItemList.Circuit_Parts_DiodeSMD.get(1)), - new Pair<>(ItemList.Circuit_Parts_Transistor.get(1), ItemList.Circuit_Parts_TransistorSMD.get(1)), - new Pair<>(ItemList.Circuit_Parts_Capacitor.get(1), ItemList.Circuit_Parts_CapacitorSMD.get(1)), - new Pair<>(ItemList.Circuit_Parts_Coil.get(1), ItemList.Circuit_Parts_InductorSMD.get(1)))); - - private static ItemStack replaceCircuitParts(ItemStack stack) { - for (Pair pair : circuitPartsToReplace) { - if (GT_Utility.areStacksEqual(pair.getKey(), stack)) { - ItemStack newStack = pair.getValue(); - newStack.stackSize = stack.stackSize; - return newStack; - } - } - return stack; - } - - @SuppressWarnings("deprecation") - private static void replaceComponents(ItemStack[] in, GT_Recipe original, int index) - throws ArrayIndexOutOfBoundsException { - if (original.mInputs[index] != null && in[index] == null) { - // big wires - if (BW_Util.checkStackAndPrefix(original.mInputs[index]) - && GT_OreDictUnificator.getAssociation(original.mInputs[index]).mPrefix == OrePrefixes.wireGt01) { - in[index] = GT_OreDictUnificator.get( - OrePrefixes.wireGt16, - GT_OreDictUnificator.getAssociation(original.mInputs[index]).mMaterial.mMaterial, - original.mInputs[index].stackSize); - // fine wires - } else if (BW_Util.checkStackAndPrefix(original.mInputs[index]) - && GT_OreDictUnificator.getAssociation(original.mInputs[index]).mPrefix == OrePrefixes.wireFine) { - in[index] = GT_OreDictUnificator.get( - OrePrefixes.wireGt04, - GT_OreDictUnificator.getAssociation(original.mInputs[index]).mMaterial.mMaterial, - original.mInputs[index].stackSize); - if (in[index] == null) { - in[index] = GT_OreDictUnificator.get( - OrePrefixes.wireFine, - GT_OreDictUnificator.getAssociation(original.mInputs[index]).mMaterial.mMaterial, - original.mInputs[index].stackSize * 16); - } - // other components - } else { - in[index] = original.mInputs[index].copy(); - in[index].stackSize *= 16; - if (in[index].stackSize > in[index].getItem() - .getItemStackLimit() || in[index].stackSize > in[index].getMaxStackSize()) - in[index].stackSize = in[index].getMaxStackSize(); - } - } - } - - private static void makeCircuitImprintRecipes() { - removeOldRecipesFromRegistries(); - CircuitImprintLoader.recipeTagMap.keySet() - .forEach(e -> { - makeAndAddSlicingRecipe(e); - makeAndAddCraftingRecipes(e); - }); - } - - private static boolean checkForBlacklistedComponents(ItemStack[] itemStacks) { - for (ItemStack is : itemStacks) { - for (ItemStack is2 : CircuitImprintLoader.blacklistSet) { - if (GT_Utility.areStacksEqual(is, is2)) return true; - } - } - return false; - } - - private static void removeOldRecipesFromRegistries() { - recipeWorldCache.forEach( - CraftingManager.getInstance() - .getRecipeList()::remove); - BWCoreStaticReplacementMethodes.clearRecentlyUsedRecipes(); - RecipeMaps.slicerRecipes.getBackend() - .removeRecipes(gtrecipeWorldCache); - recipeWorldCache.forEach(r -> { - try { - BW_Util.getGTBufferedRecipeList() - .remove(r); - } catch (Exception e) { - e.printStackTrace(); - } - }); - recipeWorldCache.clear(); - gtrecipeWorldCache.clear(); - } - - private static void makeAndAddSlicingRecipe(NBTTagCompound tag) { - ItemStack stack = CircuitImprintLoader.getStackFromTag(tag); - int eut = Integer.MAX_VALUE; - - for (GT_Recipe recipe : CircuitImprintLoader.recipeTagMap.get(tag)) { - eut = Math.min(eut, recipe.mEUt); - } - - eut = Math.min( - eut, - BW_Util.getMachineVoltageFromTier( - BW_Util.getCircuitTierFromOreDictName( - OreDictionary.getOreName( - OreDictionary.getOreIDs(stack) != null && OreDictionary.getOreIDs(stack).length > 0 - ? OreDictionary.getOreIDs(stack)[0] - : -1)))); - GT_Recipe slicingRecipe = new GT_Recipe( - true, - new ItemStack[] { stack, ItemList.Shape_Slicer_Flat.get(0) }, - new ItemStack[] { BW_Meta_Items.getCircuitParts() - .getStackWithNBT(tag, 1, 1) }, - null, - null, - null, - null, - 300, - eut, - BW_Util.CLEANROOM); - gtrecipeWorldCache.add(slicingRecipe); - RecipeMaps.slicerRecipes.add(slicingRecipe); - } - - private static void makeAndAddCraftingRecipes(NBTTagCompound tag) { - ItemStack circuit = BW_Meta_Items.getCircuitParts() - .getStackWithNBT(tag, 0, 1); - Object[] imprintRecipe = { " X ", "GPG", " X ", 'P', BW_Meta_Items.getCircuitParts() - .getStackWithNBT(tag, 1, 1), 'G', WerkstoffLoader.Prasiolite.get(OrePrefixes.gemExquisite, 1), 'X', - BW_Meta_Items.getCircuitParts() - .getStack(3) }; - - IRecipe bwrecipe = new BWNBTDependantCraftingRecipe(circuit, imprintRecipe); - ShapedOreRecipe gtrecipe = BW_Util.createGTCraftingRecipe( - circuit, - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.KEEPNBT - | GT_ModHandler.RecipeBits.BUFFERED, - imprintRecipe); - - // Adds the actual recipe - recipeWorldCache.add(bwrecipe); - GameRegistry.addRecipe(bwrecipe); - // Adds the NEI visual recipe - recipeWorldCache.add(gtrecipe); - GameRegistry.addRecipe(gtrecipe); - } - - public static NBTTagCompound getTagFromStack(ItemStack stack) { - if (GT_Utility.isStackValid(stack)) return BW_Util.setStackSize(stack.copy(), 1) - .writeToNBT(new NBTTagCompound()); - return new NBTTagCompound(); - } - - public static ItemStack getStackFromTag(NBTTagCompound tagCompound) { - return ItemStack.loadItemStackFromNBT(tagCompound); - } - - private static void deleteCALRecipesAndTags() { - BartWorksRecipeMaps.circuitAssemblyLineRecipes.getBackend() - .clearRecipes(); - recipeTagMap.clear(); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitPartLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitPartLoader.java deleted file mode 100644 index b3bd4a4a4e..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/CircuitGeneration/CircuitPartLoader.java +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration; - -import static gregtech.api.enums.ItemList.Circuit_Board_Advanced; -import static gregtech.api.enums.ItemList.Circuit_Board_Basic; -import static gregtech.api.enums.ItemList.Circuit_Board_Bio; -import static gregtech.api.enums.ItemList.Circuit_Board_Bio_Ultra; -import static gregtech.api.enums.ItemList.Circuit_Board_Coated; -import static gregtech.api.enums.ItemList.Circuit_Board_Coated_Basic; -import static gregtech.api.enums.ItemList.Circuit_Board_Elite; -import static gregtech.api.enums.ItemList.Circuit_Board_Epoxy; -import static gregtech.api.enums.ItemList.Circuit_Board_Epoxy_Advanced; -import static gregtech.api.enums.ItemList.Circuit_Board_Fiberglass; -import static gregtech.api.enums.ItemList.Circuit_Board_Fiberglass_Advanced; -import static gregtech.api.enums.ItemList.Circuit_Board_Multifiberglass; -import static gregtech.api.enums.ItemList.Circuit_Board_Multifiberglass_Elite; -import static gregtech.api.enums.ItemList.Circuit_Board_Optical; -import static gregtech.api.enums.ItemList.Circuit_Board_Phenolic; -import static gregtech.api.enums.ItemList.Circuit_Board_Phenolic_Good; -import static gregtech.api.enums.ItemList.Circuit_Board_Plastic; -import static gregtech.api.enums.ItemList.Circuit_Board_Plastic_Advanced; -import static gregtech.api.enums.ItemList.Circuit_Board_Wetware; -import static gregtech.api.enums.ItemList.Circuit_Board_Wetware_Extreme; -import static gregtech.api.enums.ItemList.Circuit_Chip_BioCPU; -import static gregtech.api.enums.ItemList.Circuit_Chip_Biocell; -import static gregtech.api.enums.ItemList.Circuit_Chip_CPU; -import static gregtech.api.enums.ItemList.Circuit_Chip_CrystalCPU; -import static gregtech.api.enums.ItemList.Circuit_Chip_CrystalSoC; -import static gregtech.api.enums.ItemList.Circuit_Chip_CrystalSoC2; -import static gregtech.api.enums.ItemList.Circuit_Chip_HPIC; -import static gregtech.api.enums.ItemList.Circuit_Chip_ILC; -import static gregtech.api.enums.ItemList.Circuit_Chip_LPIC; -import static gregtech.api.enums.ItemList.Circuit_Chip_NAND; -import static gregtech.api.enums.ItemList.Circuit_Chip_NOR; -import static gregtech.api.enums.ItemList.Circuit_Chip_NPIC; -import static gregtech.api.enums.ItemList.Circuit_Chip_NanoCPU; -import static gregtech.api.enums.ItemList.Circuit_Chip_NeuroCPU; -import static gregtech.api.enums.ItemList.Circuit_Chip_Optical; -import static gregtech.api.enums.ItemList.Circuit_Chip_PIC; -import static gregtech.api.enums.ItemList.Circuit_Chip_PPIC; -import static gregtech.api.enums.ItemList.Circuit_Chip_QPIC; -import static gregtech.api.enums.ItemList.Circuit_Chip_QuantumCPU; -import static gregtech.api.enums.ItemList.Circuit_Chip_Ram; -import static gregtech.api.enums.ItemList.Circuit_Chip_Simple_SoC; -import static gregtech.api.enums.ItemList.Circuit_Chip_SoC; -import static gregtech.api.enums.ItemList.Circuit_Chip_SoC2; -import static gregtech.api.enums.ItemList.Circuit_Chip_Stemcell; -import static gregtech.api.enums.ItemList.Circuit_Chip_UHPIC; -import static gregtech.api.enums.ItemList.Circuit_Chip_ULPIC; -import static gregtech.api.enums.ItemList.Circuit_Integrated; -import static gregtech.api.enums.ItemList.Circuit_Integrated_Good; -import static gregtech.api.enums.ItemList.Circuit_Parts_Advanced; -import static gregtech.api.enums.ItemList.Circuit_Parts_CapacitorASMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_CapacitorSMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_CapacitorXSMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_Chip_Bioware; -import static gregtech.api.enums.ItemList.Circuit_Parts_Crystal_Chip_Elite; -import static gregtech.api.enums.ItemList.Circuit_Parts_Crystal_Chip_Master; -import static gregtech.api.enums.ItemList.Circuit_Parts_Crystal_Chip_Wetware; -import static gregtech.api.enums.ItemList.Circuit_Parts_DiodeASMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_DiodeSMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_DiodeXSMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_GlassFiber; -import static gregtech.api.enums.ItemList.Circuit_Parts_InductorASMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_InductorSMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_InductorXSMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_PetriDish; -import static gregtech.api.enums.ItemList.Circuit_Parts_ResistorASMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_ResistorSMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_ResistorXSMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_TransistorASMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_TransistorSMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_TransistorXSMD; -import static gregtech.api.enums.ItemList.Circuit_Parts_Vacuum_Tube; -import static gregtech.api.enums.ItemList.Circuit_Parts_Wiring_Advanced; -import static gregtech.api.enums.ItemList.Circuit_Parts_Wiring_Basic; -import static gregtech.api.enums.ItemList.Circuit_Parts_Wiring_Elite; -import static gregtech.api.enums.ItemList.Optical_Cpu_Containment_Housing; -import static gregtech.api.enums.ItemList.Optically_Compatible_Memory; -import static gregtech.api.enums.ItemList.Optically_Perfected_CPU; -import static gregtech.api.enums.ItemList.values; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.client.renderer.BW_GT_ItemRenderer; - -import cpw.mods.fml.common.FMLCommonHandler; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; - -public class CircuitPartLoader implements Runnable { - - @Override - public void run() { - CircuitPartLoader.makeCircuitParts(); - if (FMLCommonHandler.instance() - .getEffectiveSide() - .isClient()) new BW_GT_ItemRenderer(); - } - - public static void makeCircuitParts() { - ItemList[] itemLists = values(); - for (ItemList single : itemLists) { - if (!single.hasBeenSet()) continue; - if (single.toString() - .contains("Wafer") - || single.toString() - .contains("Circuit_Silicon_Ingot") - || single.toString() - .contains("Raw") - || single.toString() - .contains("raw") - || single.toString() - .contains("Glass_Tube") - || single == Circuit_Parts_GlassFiber - || single == Circuit_Parts_Advanced - || single == Circuit_Parts_Wiring_Advanced - || single == Circuit_Parts_Wiring_Elite - || single == Circuit_Parts_Wiring_Basic - || single == Circuit_Integrated - || single == Circuit_Parts_PetriDish - || single == Circuit_Parts_Vacuum_Tube - || single == Circuit_Integrated_Good) { - - CircuitImprintLoader.blacklistSet.add(single.get(1)); - } - } - - for (ItemList single : CIRCUIT_PARTS) { - if (!single.hasBeenSet()) continue; - ItemStack itemStack = single.get(1); - if (!GT_Utility.isStackValid(itemStack)) continue; - ArrayList toolTip = new ArrayList<>(); - if (FMLCommonHandler.instance() - .getEffectiveSide() - .isClient()) - single.getItem() - .addInformation( - single.get(1) - .copy(), - null, - toolTip, - true); - String tt = !toolTip.isEmpty() ? toolTip.get(0) : ""; - // tt += "Internal Name = "+single; - String localised = GT_LanguageManager - .getTranslation(GT_LanguageManager.getTranslateableItemStackName(itemStack)); - BW_Meta_Items.getCircuitParts() - .addItem(CircuitImprintLoader.reverseIDs, "Wrap of " + localised + "s", tt); - - GT_Values.RA.stdBuilder() - .itemInputs( - single.get(16) - .copy(), - GT_Utility.getIntegratedCircuit(16)) - .itemOutputs( - BW_Meta_Items.getCircuitParts() - .getStack(CircuitImprintLoader.reverseIDs)) - .fluidInputs(Materials.Plastic.getMolten(72)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - - CircuitImprintLoader.circuitIIconRefs.put(CircuitImprintLoader.reverseIDs, single); - CircuitImprintLoader.reverseIDs--; - } - } - - /** - * Contains all the circuit parts we want to generate wrapped version of. New entries MUST be placed at the END of - * this list, to prevent id shift. - */ - private static final List CIRCUIT_PARTS = Collections.unmodifiableList( - Arrays.asList( - Circuit_Board_Basic, - Circuit_Board_Advanced, - Circuit_Board_Elite, - Circuit_Parts_Crystal_Chip_Elite, - Circuit_Parts_Crystal_Chip_Master, - Circuit_Board_Coated, - Circuit_Board_Coated_Basic, - Circuit_Board_Phenolic, - Circuit_Board_Phenolic_Good, - Circuit_Board_Epoxy, - Circuit_Board_Epoxy_Advanced, - Circuit_Board_Fiberglass, - Circuit_Board_Fiberglass_Advanced, - Circuit_Board_Multifiberglass_Elite, - Circuit_Board_Multifiberglass, - Circuit_Board_Wetware, - Circuit_Board_Wetware_Extreme, - Circuit_Board_Plastic, - Circuit_Board_Plastic_Advanced, - Circuit_Board_Bio, - Circuit_Board_Bio_Ultra, - Circuit_Parts_ResistorSMD, - Circuit_Parts_InductorSMD, - Circuit_Parts_DiodeSMD, - Circuit_Parts_TransistorSMD, - Circuit_Parts_CapacitorSMD, - Circuit_Parts_ResistorASMD, - Circuit_Parts_DiodeASMD, - Circuit_Parts_TransistorASMD, - Circuit_Parts_CapacitorASMD, - Circuit_Chip_ILC, - Circuit_Chip_Ram, - Circuit_Chip_NAND, - Circuit_Chip_NOR, - Circuit_Chip_CPU, - Circuit_Chip_SoC, - Circuit_Chip_SoC2, - Circuit_Chip_PIC, - Circuit_Chip_Simple_SoC, - Circuit_Chip_HPIC, - Circuit_Chip_UHPIC, - Circuit_Chip_ULPIC, - Circuit_Chip_LPIC, - Circuit_Chip_NPIC, - Circuit_Chip_PPIC, - Circuit_Chip_QPIC, - Circuit_Chip_NanoCPU, - Circuit_Chip_QuantumCPU, - Circuit_Chip_CrystalCPU, - Circuit_Chip_CrystalSoC, - Circuit_Chip_CrystalSoC2, - Circuit_Chip_NeuroCPU, - Circuit_Chip_BioCPU, - Circuit_Chip_Stemcell, - Circuit_Chip_Biocell, - Circuit_Parts_ResistorXSMD, - Circuit_Parts_DiodeXSMD, - Circuit_Parts_TransistorXSMD, - Circuit_Parts_CapacitorXSMD, - Circuit_Parts_InductorASMD, - Circuit_Parts_InductorXSMD, - Circuit_Chip_Optical, - Circuit_Board_Optical, - Optically_Perfected_CPU, - Optical_Cpu_Containment_Housing, - Optically_Compatible_Memory, - Circuit_Parts_Crystal_Chip_Wetware, - Circuit_Parts_Chip_Bioware)); -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/BWGTMetaItems.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/BWGTMetaItems.java deleted file mode 100644 index e8e7572d33..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/BWGTMetaItems.java +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.GT_Enhancement; - -import static com.github.bartimaeusnek.bartworks.system.material.GT_Enhancement.GTMetaItemEnhancer.NoMetaValue; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.client.textures.PrefixTextureLinker; -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_Items; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TextureSet; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.common.render.items.GT_GeneratedMaterial_Renderer; - -public class BWGTMetaItems extends BW_MetaGenerated_Items { - - private boolean hasList; - private final Set hiddenThings = new HashSet<>(); - - public BWGTMetaItems(OrePrefixes orePrefixes, List noSubIDMaterials) { - super(orePrefixes, null); - // materialloop: - for (int i = 0; i < Materials.values().length; i++) { - ItemStack tStack = new ItemStack(this, 1, i); - Materials material = Materials.values()[i]; - if (material.getMolten(1) == null && orePrefixes == OrePrefixes.capsuleMolten - || material.getFluid(1) == null && material.getGas(1) == null - && (orePrefixes == OrePrefixes.capsule || orePrefixes == OrePrefixes.bottle)) - continue; - - if (OreDictionary.doesOreNameExist(this.orePrefixes.name() + material.mDefaultLocalName.replace(" ", ""))) { - this.hiddenThings.add(i); - continue; - } - GT_OreDictUnificator - .registerOre(this.orePrefixes.name() + material.mDefaultLocalName.replace(" ", ""), tStack); - } - - if (noSubIDMaterials != null) { - this.hasList = true; - // materialloop: - for (int i = 0; i < noSubIDMaterials.size(); i++) { - ItemStack tStack = new ItemStack(this, 1, i + 1001); - Materials w = noSubIDMaterials.get(i); - if (w.getMolten(1) == null && orePrefixes == OrePrefixes.capsuleMolten - || w.getFluid(1) == null && w.getGas(1) == null - && (orePrefixes == OrePrefixes.capsule || orePrefixes == OrePrefixes.bottle)) - continue; - - if (OreDictionary.doesOreNameExist(this.orePrefixes.name() + w.mDefaultLocalName.replace(" ", ""))) { - this.hiddenThings.add(i); - continue; - } - GT_OreDictUnificator - .registerOre(this.orePrefixes.name() + w.mDefaultLocalName.replace(" ", ""), tStack); - } - } - } - - private Materials getMaterial(ItemStack is) { - if (is == null || is.getItem() != this) return null; - final int meta = is.getItemDamage(); - return this.getMaterialFromMeta(meta); - } - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - Materials material = this.getMaterial(aStack); - if (material == null) material = Materials._NULL; - return material.getLocalizedNameForItem(this.itemTypeLocalizedName); - } - - @Override - protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - Materials material = this.getMaterial(aStack); - if (material != null) { - String tooltip = material.getToolTip(); - if (tooltip != null && !tooltip.isEmpty()) { - aList.add(tooltip); - } - } - } - - @Override - public IIconContainer getIconContainer(int aMetaData) { - if (this.orePrefixes.mTextureIndex == -1) return this.getIconContainerBartWorks(aMetaData); - Materials material = this.getMaterialFromMeta(aMetaData); - if (material != null) { - return material.mIconSet.mTextures[this.orePrefixes.mTextureIndex]; - } - return null; - } - - @Override - protected IIconContainer getIconContainerBartWorks(int aMetaData) { - if (SideReference.Side.Server || PrefixTextureLinker.texMap == null) return null; - - HashMap iconLink = PrefixTextureLinker.texMap.get(this.orePrefixes); - - if (iconLink == null) return null; - - Materials material = this.getMaterialFromMeta(aMetaData); - - if (material == null || material.mIconSet == null) return null; - - return iconLink.getOrDefault(material.mIconSet, iconLink.get(TextureSet.SET_DULL)); - } - - @Override - public IIcon getIconFromDamage(int aMetaData) { - return this.getIcon(aMetaData, 0); - } - - @Override - public GT_GeneratedMaterial_Renderer getMaterialRenderer(int aMetaData) { - return this.getMaterialFromMeta(aMetaData).renderer; - } - - public Materials getMaterialFromMeta(int aMetaData) { - if (aMetaData > 1000 && this.hasList) { - return NoMetaValue.get(aMetaData - 1001); - } - if (aMetaData < 0 || aMetaData >= Materials.values().length) { - return null; - } - return Materials.values()[aMetaData]; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item var1, CreativeTabs aCreativeTab, List aList) { - for (int i = 0; i < Materials.values().length; i++) { - Materials w = Materials.values()[i]; - if (w == null || (w.mTypes & Werkstoff.GenerationFeatures.getPrefixDataRaw(this.orePrefixes)) == 0 - && Werkstoff.GenerationFeatures.getPrefixDataRaw(this.orePrefixes) != 0) continue; - if (w.getMolten(1) == null && this.orePrefixes == OrePrefixes.capsuleMolten - || w.getFluid(1) == null && w.getGas(1) == null - && (this.orePrefixes == OrePrefixes.capsule || this.orePrefixes == OrePrefixes.bottle)) - continue; - else if (this.hiddenThings.contains(i)) continue; - aList.add(new ItemStack(this, 1, i)); - } - if (this.hasList) for (int i = 0; i < NoMetaValue.size(); i++) { - Materials w = NoMetaValue.get(i); - if (w == null || (w.mTypes & Werkstoff.GenerationFeatures.getPrefixDataRaw(this.orePrefixes)) == 0 - && Werkstoff.GenerationFeatures.getPrefixDataRaw(this.orePrefixes) != 0) continue; - if (w.getMolten(1) == null && this.orePrefixes == OrePrefixes.capsuleMolten - || w.getFluid(1) == null && w.getGas(1) == null - && (this.orePrefixes == OrePrefixes.capsule || this.orePrefixes == OrePrefixes.bottle)) - continue; - else if (this.hiddenThings.contains(i)) continue; - aList.add(new ItemStack(this, 1, i + 1001)); - } - } - - @Override - public short[] getColorForGUI(ItemStack aStack) { - return this.getMaterial(aStack).mRGBa; - } - - @Override - public String getNameForGUI(ItemStack aStack) { - return this.getMaterial(aStack).mDefaultLocalName; - } - - @Override - public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) {} - - @Override - public short[] getRGBa(ItemStack aStack) { - return this.getMaterial(aStack).mRGBa; - } - - @Override - public boolean onEntityItemUpdate(EntityItem aItemEntity) { - return false; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/GTMetaItemEnhancer.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/GTMetaItemEnhancer.java deleted file mode 100644 index 1f22cbc761..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/GTMetaItemEnhancer.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.GT_Enhancement; - -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeBuilder.WILDCARD; - -import java.util.List; -import java.util.stream.Collectors; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import codechicken.nei.api.API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class GTMetaItemEnhancer { - - static List NoMetaValue; - - private GTMetaItemEnhancer() {} - - public static void init() { - if (!Forestry.isModLoaded()) { - return; - } - NoMetaValue = Materials.getMaterialsMap() - .values() - .stream() - .filter(m -> m.mMetaItemSubID == -1) - .collect(Collectors.toList()); - Item moltenCapsuls = new BWGTMetaItems(OrePrefixes.capsuleMolten, null); - Item capsuls = new BWGTMetaItems(OrePrefixes.capsule, NoMetaValue); - // Item bottles = new BWGTMetaItems(OrePrefixes.bottle, NoMetaValue); - - Materials[] values = Materials.values(); - for (int i = 0, valuesLength = values.length; i < valuesLength; i++) { - Materials m = values[i]; - if (m.mStandardMoltenFluid != null && GT_OreDictUnificator.get(OrePrefixes.cellMolten, m, 1) != null) { - final FluidContainerRegistry.FluidContainerData emptyData = new FluidContainerRegistry.FluidContainerData( - m.getMolten(144), - new ItemStack(moltenCapsuls, 1, i), - GT_ModHandler.getModItem(Forestry.ID, "refractoryEmpty", 1)); - FluidContainerRegistry.registerFluidContainer(emptyData); - GT_Utility.addFluidContainerData(emptyData); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(Forestry.ID, "refractoryEmpty", 1)) - .itemOutputs(new ItemStack(moltenCapsuls, 1, i)) - .fluidInputs(m.getMolten(144)) - .duration(2 * TICKS) - .eut(2) - .addTo(fluidCannerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(moltenCapsuls, 1, i)) - .fluidOutputs(m.getMolten(144)) - .duration(2 * TICKS) - .eut(2) - .addTo(fluidCannerRecipes); - - } - if (m.getFluid(1) == null && m.getGas(1) == null || OreDictionary.doesOreNameExist("capsule" + m.mName)) - continue; - addFluidData(m, GT_ModHandler.getModItem(Forestry.ID, "waxCapsule", 1), capsuls, 1000, i, true); - // addFluidData(m, new ItemStack(Items.glass_bottle), bottles, 250, i, false); - } - for (int i = 0, valuesLength = NoMetaValue.size(); i < valuesLength; i++) { - Materials m = NoMetaValue.get(i); - if (m.getFluid(1) == null && m.getGas(1) == null || OreDictionary.doesOreNameExist("capsule" + m.mName)) - continue; - addFluidData(m, GT_ModHandler.getModItem(Forestry.ID, "waxCapsule", 1), capsuls, 1000, i + 1001, true); - // addFluidData(m, new ItemStack(Items.glass_bottle), bottles, 250, i + 1001, false); - } - - API.hideItem(new ItemStack(capsuls, 1, WILDCARD)); - API.hideItem(new ItemStack(moltenCapsuls, 1, WILDCARD)); - } - - private static void addFluidData(Materials m, ItemStack container, Item filled, int amount, int it, boolean empty) { - Fluid f = m.getFluid(1) != null ? m.getFluid(1) - .getFluid() - : m.getGas(1) - .getFluid(); - final FluidContainerRegistry.FluidContainerData emptyData = new FluidContainerRegistry.FluidContainerData( - new FluidStack(f, amount), - new ItemStack(filled, 1, it), - container); - FluidContainerRegistry.registerFluidContainer(emptyData); - GT_Utility.addFluidContainerData(emptyData); - - GT_Values.RA.stdBuilder() - .itemInputs(container) - .itemOutputs(new ItemStack(filled, 1, it)) - .fluidInputs(new FluidStack(f, amount)) - .duration(amount / 62) - .eut(2) - .addTo(fluidCannerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(filled, 1, it)) - .fluidOutputs(new FluidStack(f, amount)) - .duration(amount / 62) - .eut(2) - .addTo(fluidCannerRecipes); - - } - - public static void addAdditionalOreDictToForestry() { - if (!Forestry.isModLoaded()) return; - OreDictionary.registerOre("capsuleWater", getForestryItem("waxCapsuleWater")); - OreDictionary.registerOre("capsuleIce", getForestryItem("waxCapsuleIce")); - OreDictionary.registerOre("capsuleHoney", getForestryItem("waxCapsuleHoney")); - OreDictionary.registerOre("capsuleJuice", getForestryItem("waxCapsuleJuice")); - OreDictionary.registerOre("capsuleSeedOil", getForestryItem("waxCapsuleSeedOil")); - OreDictionary.registerOre("capsuleEthanol", getForestryItem("waxCapsuleEthanol")); - OreDictionary.registerOre("capsuleBiomass", getForestryItem("waxCapsuleBiomass")); - OreDictionary.registerOre("capsuleShortMead", getForestryItem("waxCapsuleShortMead")); - OreDictionary.registerOre("capsuleMead", getForestryItem("waxCapsuleMead")); - OreDictionary.registerOre("capsuleFuel", getForestryItem("waxCapsuleFuel")); - OreDictionary.registerOre("capsuleOil", getForestryItem("waxCapsuleOil")); - OreDictionary.registerOre("capsuleLava", getForestryItem("refractoryLava")); - } - - private static ItemStack getForestryItem(String itemName) { - return GT_ModHandler.getModItem(Forestry.ID, itemName, 1); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/PlatinumSludgeOverHaul.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/PlatinumSludgeOverHaul.java deleted file mode 100644 index 98e9feda15..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/GT_Enhancement/PlatinumSludgeOverHaul.java +++ /dev/null @@ -1,1109 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.GT_Enhancement; - -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.AcidicIridiumSolution; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.AcidicOsmiumSolution; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.AmmoniumChloride; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.AquaRegia; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.CalciumChloride; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.CrudeRhMetall; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.FormicAcid; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.HotRutheniumTetroxideSollution; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.IrLeachResidue; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.IrOsLeachResidue; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.IridiumChloride; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.IridiumDioxide; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.LeachResidue; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.OsmiumSolution; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PDAmmonia; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PDMetallicPowder; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PDRawPowder; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PDSalt; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PGSDResidue; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PGSDResidue2; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PTConcentrate; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PTMetallicPowder; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PTRawPowder; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PTResidue; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PTSaltCrude; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PTSaltRefined; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.PotassiumDisulfate; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.RHFilterCakeSolution; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.RHNitrate; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.RHSalt; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.RHSaltSolution; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.RHSulfate; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.RHSulfateSolution; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.ReRh; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.RhFilterCake; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Rhodium; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Ruthenium; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.RutheniumTetroxide; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.RutheniumTetroxideSollution; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.SodiumNitrate; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.SodiumRuthenate; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Sodiumformate; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Sodiumsulfate; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.ZincSulfate; -import static gregtech.api.enums.Mods.GalaxySpace; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.enums.OrePrefixes.cell; -import static gregtech.api.enums.OrePrefixes.crushed; -import static gregtech.api.enums.OrePrefixes.crushedCentrifuged; -import static gregtech.api.enums.OrePrefixes.crushedPurified; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.dustImpure; -import static gregtech.api.enums.OrePrefixes.dustPure; -import static gregtech.api.enums.OrePrefixes.dustRefined; -import static gregtech.api.enums.OrePrefixes.dustSmall; -import static gregtech.api.enums.OrePrefixes.dustTiny; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.nugget; -import static gregtech.api.enums.OrePrefixes.rawOre; -import static gregtech.api.recipe.RecipeMaps.*; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; -import static gtPlusPlus.core.material.ALLOY.HELICOPTER; -import static gtPlusPlus.core.material.ELEMENT.STANDALONE.WHITE_METAL; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.item.crafting.IRecipe; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_Items; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.github.bartimaeusnek.crossmod.BartWorksCrossmod; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IRecipeMutableAccess; -import gregtech.api.interfaces.ISubTagContainer; -import gregtech.api.items.GT_Generic_Block; -import gregtech.api.items.GT_Generic_Item; -import gregtech.api.objects.ItemData; -import gregtech.api.objects.MaterialStack; -import gregtech.api.recipe.RecipeMap; -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.common.blocks.GT_Block_Ores_Abstract; - -public class PlatinumSludgeOverHaul { - - private static final Materials[] BLACKLIST = { Materials.HSSS, Materials.EnderiumBase, Materials.Osmiridium, - Materials.TPV, Materials.get("Uraniumtriplatinid"), Materials.get("Tetranaquadahdiindiumhexaplatiumosminid"), - Materials.get("Longasssuperconductornameforuvwire"), }; - private static final OrePrefixes[] OPBLACKLIST = { crushedCentrifuged, crushed, crushedPurified, dustPure, - dustImpure, dustRefined, dust, dustTiny, dustSmall }; - - private PlatinumSludgeOverHaul() {} - - private static void runHelperrecipes() { - // DilutedSulfuricAcid - // 2H2SO4 + H2O = 3H2SO4(d) - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.SulfuricAcid.getCells(2), - Materials.Water.getCells(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(Materials.DilutedSulfuricAcid.getCells(3)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Water.getCells(1), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(Materials.SulfuricAcid.getFluid(2000)) - .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(3000)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.SulfuricAcid.getCells(2), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(Materials.Empty.getCells(2)) - .fluidInputs(Materials.Water.getFluid(1000)) - .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(3000)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - // FormicAcid - // CO + NaOH = CHO2Na - GT_Values.RA.stdBuilder() - .itemInputs(Materials.CarbonMonoxide.getCells(1), Materials.SodiumHydroxide.getDust(3)) - .itemOutputs(Sodiumformate.get(cell)) - .duration(15 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - // H2SO4 + 2CHO2Na = 2CH2O2 + Na2SO4 - - GT_Values.RA.stdBuilder() - .itemInputs(Sodiumformate.get(cell, 2), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(FormicAcid.get(cell, 2), Sodiumsulfate.get(dust, 7)) - .fluidInputs(Materials.SulfuricAcid.getFluid(1000)) - .duration(15 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.SulfuricAcid.getCells(1), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(Materials.Empty.getCells(1), Sodiumsulfate.get(dust, 7)) - .fluidInputs(Sodiumformate.getFluidOrGas(2000)) - .fluidOutputs(FormicAcid.getFluidOrGas(2000)) - .duration(15 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // AquaRegia - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.DilutedSulfuricAcid.getCells(1), - Materials.NitricAcid.getCells(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(AquaRegia.get(cell, 2)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.DilutedSulfuricAcid.getCells(1), - Materials.NitricAcid.getCells(1), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(Materials.Empty.getCells(2)) - .fluidOutputs(AquaRegia.getFluidOrGas(2000)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.NitricAcid.getCells(1), GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(Materials.DilutedSulfuricAcid.getFluid(1000)) - .fluidOutputs(AquaRegia.getFluidOrGas(2000)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.DilutedSulfuricAcid.getCells(1), GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(Materials.NitricAcid.getFluid(1000)) - .fluidOutputs(AquaRegia.getFluidOrGas(2000)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - - // AmmoniumChloride - // NH3 + HCl = NH4Cl - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Ammonia.getCells(1), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(AmmoniumChloride.get(cell, 1)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(1000)) - .duration(15 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.HydrochloricAcid.getCells(1), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(Materials.Ammonia.getGas(1000)) - .fluidOutputs(AmmoniumChloride.getFluidOrGas(1000)) - .duration(15 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(9)) - .fluidInputs(Materials.Ammonia.getGas(64000), Materials.HydrochloricAcid.getFluid(64000)) - .fluidOutputs(AmmoniumChloride.getFluidOrGas(64000)) - .duration(3 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(multiblockChemicalReactorRecipes); - - // base solution - for (Werkstoff w : Werkstoff.werkstoffHashSet) if (w.containsStuff(Materials.Sulfur) - && (w.containsStuff(Materials.Copper) || w.containsStuff(Materials.Nickel))) { - - GT_Values.RA.stdBuilder() - .itemInputs(w.get(crushedPurified), GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(AquaRegia.getFluidOrGas(150)) - .fluidOutputs(PTConcentrate.getFluidOrGas(150)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(w.get(crushedPurified, 9), GT_Utility.getIntegratedCircuit(9)) - .fluidInputs(AquaRegia.getFluidOrGas(1350)) - .fluidOutputs(PTConcentrate.getFluidOrGas(1350)) - .duration(11 * SECONDS + 5 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(w.get(crushedPurified, 9), PTMetallicPowder.get(dust, 9)) - .itemOutputs(PTResidue.get(dust)) - .fluidInputs(AquaRegia.getFluidOrGas(10350)) - .fluidOutputs(PTConcentrate.getFluidOrGas(10350)) - .duration(1 * MINUTES + 52 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - } - for (Materials m : Materials.values()) if (PlatinumSludgeOverHaul.materialsContains(m, Materials.Sulfur) - && (PlatinumSludgeOverHaul.materialsContains(m, Materials.Copper) - || PlatinumSludgeOverHaul.materialsContains(m, Materials.Nickel))) { - - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(crushedPurified, m, 1), GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(AquaRegia.getFluidOrGas(150)) - .fluidOutputs(PTConcentrate.getFluidOrGas(150)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(crushedPurified, m, 9), GT_Utility.getIntegratedCircuit(9)) - .fluidInputs(AquaRegia.getFluidOrGas(1350)) - .fluidOutputs(PTConcentrate.getFluidOrGas(1350)) - .duration(1 * MINUTES + 52 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(crushedPurified, m, 9), PTMetallicPowder.get(dust, 9)) - .itemOutputs(PTResidue.get(dust)) - .fluidInputs(AquaRegia.getFluidOrGas(10350)) - .fluidOutputs(PTConcentrate.getFluidOrGas(10350)) - .duration(1 * MINUTES + 52 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - } - // Pt - GT_Values.RA.stdBuilder() - .itemInputs(PTMetallicPowder.get(dust, 3), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(Materials.Platinum.getNuggets(2)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, Materials.Platinum.mMeltingPoint) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(PTMetallicPowder.get(dust), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(PTResidue.get(dustTiny)) - .fluidInputs(AquaRegia.getFluidOrGas(1000)) - .fluidOutputs(PTConcentrate.getFluidOrGas(1000)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(PTMetallicPowder.get(dust, 9), GT_Utility.getIntegratedCircuit(9)) - .itemOutputs(PTResidue.get(dust)) - .fluidInputs(AquaRegia.getFluidOrGas(9000)) - .fluidOutputs(PTConcentrate.getFluidOrGas(9000)) - .duration(1 * MINUTES + 52 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(PTConcentrate.get(cell, 2)) - .itemOutputs( - PTSaltCrude.get(dustTiny, 16), - PTRawPowder.get(dustTiny, 4), - Materials.NitrogenDioxide.getCells(1), - Materials.DilutedSulfuricAcid.getCells(1)) - .fluidInputs(AmmoniumChloride.getFluidOrGas(400)) - .fluidOutputs(PDAmmonia.getFluidOrGas(400)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(PTSaltCrude.get(dustTiny, 16), PTRawPowder.get(dustTiny, 4)) - .fluidInputs(PTConcentrate.getFluidOrGas(2000), AmmoniumChloride.getFluidOrGas(400)) - .fluidOutputs( - PDAmmonia.getFluidOrGas(400), - Materials.NitrogenDioxide.getGas(1000), - Materials.DilutedSulfuricAcid.getFluid(1000)) - .duration(1200) - .eut(30) - .addTo(multiblockChemicalReactorRecipes); - // transitional recipe. to be removed in 2.8.0 and onwards - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(PTSaltCrude.get(dust, 16), PTRawPowder.get(dust, 4)) - .fluidInputs(PTConcentrate.getFluidOrGas(18000), AmmoniumChloride.getFluidOrGas(3600)) - .fluidOutputs( - PDAmmonia.getFluidOrGas(3600), - Materials.NitrogenDioxide.getGas(9000), - Materials.DilutedSulfuricAcid.getFluid(9000)) - .duration(1400) - .eut(240) - .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(PTSaltCrude.get(dust, 16), PTRawPowder.get(dust, 4)) - .fluidInputs(PTConcentrate.getFluidOrGas(18000), AmmoniumChloride.getFluidOrGas(3600)) - .fluidOutputs( - PDAmmonia.getFluidOrGas(3600), - Materials.NitrogenDioxide.getGas(9000), - Materials.DilutedSulfuricAcid.getFluid(9000)) - .duration(700) - .eut(480) - .addTo(multiblockChemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(PTSaltCrude.get(dust)) - .itemOutputs( - PTSaltRefined.get(dust), - PTSaltRefined.get(dust), - PTSaltRefined.get(dust), - PTSaltRefined.get(dust), - PTSaltRefined.get(dust), - PTSaltRefined.get(dust), - PTSaltRefined.get(dust), - PTSaltRefined.get(dust), - PTSaltRefined.get(dust)) - .outputChances(1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1500) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(sifterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(PTSaltRefined.get(dust), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(PTMetallicPowder.get(dust)) - .fluidOutputs(Materials.Chlorine.getGas(87)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, 900) - .addTo(blastFurnaceRecipes); - - // 2PtCl + Ca = 2Pt + CaCl2 - - GT_Values.RA.stdBuilder() - .itemInputs(PTRawPowder.get(dust, 4), Materials.Calcium.getDust(1)) - .itemOutputs(Materials.Platinum.getDust(2), CalciumChloride.get(dust, 3)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - // Pd - - GT_Values.RA.stdBuilder() - .itemInputs(PDMetallicPowder.get(dust), GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.Ammonia.getGas(1000)) - .fluidOutputs(PDAmmonia.getFluidOrGas(1000)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(PDMetallicPowder.get(dust), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(PDSalt.get(dustTiny, 16), PDRawPowder.get(dustTiny, 2)) - .fluidInputs(PDAmmonia.getFluidOrGas(1000)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(PDMetallicPowder.get(dust, 9), GT_Utility.getIntegratedCircuit(9)) - .itemOutputs(PDSalt.get(dust, 16), PDRawPowder.get(dust, 2)) - .fluidInputs(PDAmmonia.getFluidOrGas(9000)) - .duration(1 * MINUTES + 52 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(PDSalt.get(dust)) - .fluidInputs(PDAmmonia.getFluidOrGas(1000)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(PDSalt.get(dust)) - .itemOutputs( - PDMetallicPowder.get(dust), - PDMetallicPowder.get(dust), - PDMetallicPowder.get(dust), - PDMetallicPowder.get(dust), - PDMetallicPowder.get(dust), - PDMetallicPowder.get(dust), - PDMetallicPowder.get(dust), - PDMetallicPowder.get(dust), - PDMetallicPowder.get(dust)) - .outputChances(1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1500) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(sifterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(PDRawPowder.get(dust, 4), Materials.Empty.getCells(1)) - .itemOutputs(Materials.Palladium.getDust(2), Materials.Ethylene.getCells(1)) - .fluidInputs(FormicAcid.getFluidOrGas(4000)) - .fluidOutputs(Materials.Ammonia.getGas(4000)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(chemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(PDRawPowder.get(dust, 4)) - .itemOutputs(Materials.Palladium.getDust(2)) - .fluidInputs(FormicAcid.getFluidOrGas(4000)) - .fluidOutputs( - Materials.Ammonia.getGas(4000), - Materials.Ethylene.getGas(1000), - Materials.Water.getFluid(1000)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(multiblockChemicalReactorRecipes); - - // Na2SO4 + 2H = 2Na + H2SO4 - - GT_Values.RA.stdBuilder() - .itemInputs(Sodiumsulfate.get(dust, 7), Materials.Hydrogen.getCells(2)) - .itemOutputs(Materials.Sodium.getDust(2), Materials.Empty.getCells(2)) - .fluidOutputs(Materials.SulfuricAcid.getFluid(1000)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Rh/Os/Ir/Ru - GT_Values.RA.stdBuilder() - .itemInputs(PTResidue.get(dust), GT_Utility.getIntegratedCircuit(11)) - .itemOutputs(LeachResidue.get(dust)) - .fluidInputs(PotassiumDisulfate.getMolten(360)) - .fluidOutputs(RHSulfate.getFluidOrGas(360)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, 775) - .addTo(blastFurnaceRecipes); - - // Ru - GT_Values.RA.stdBuilder() - .itemInputs(LeachResidue.get(dust, 10), Materials.Saltpeter.getDust(10)) - .itemOutputs(SodiumRuthenate.get(dust, 3), IrOsLeachResidue.get(dust, 6)) - .fluidInputs(Materials.SaltWater.getFluid(1000)) - .fluidOutputs(GT_ModHandler.getSteam(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, 775) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(SodiumRuthenate.get(dust, 6), Materials.Chlorine.getCells(3)) - .itemOutputs(Materials.Empty.getCells(3)) - .fluidOutputs(RutheniumTetroxideSollution.getFluidOrGas(9000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(RutheniumTetroxideSollution.getFluidOrGas(1000)) - .fluidOutputs(HotRutheniumTetroxideSollution.getFluidOrGas(2000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .noOptimize() - .addTo(fluidHeaterRecipes); - - GT_Values.RA.stdBuilder() - .itemOutputs(Materials.Salt.getDust(6)) - .fluidInputs(HotRutheniumTetroxideSollution.getFluidOrGas(9000)) - .fluidOutputs(Materials.Water.getFluid(1800), RutheniumTetroxide.getFluidOrGas(7200)) - .duration(1 * MINUTES + 15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(distillationTowerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(RutheniumTetroxide.get(dust, 1), Materials.HydrochloricAcid.getCells(6)) - .itemOutputs(Ruthenium.get(dust), Materials.Chlorine.getCells(6)) - .fluidOutputs(Materials.Water.getFluid(2000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Os - GT_Values.RA.stdBuilder() - .itemInputs(IrOsLeachResidue.get(dust, 4), GT_Utility.getIntegratedCircuit(11)) - .itemOutputs(IrLeachResidue.get(dust, 2)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(1000)) - .fluidOutputs(AcidicOsmiumSolution.getFluidOrGas(2000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, 775) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(AcidicOsmiumSolution.getFluidOrGas(1000)) - .fluidOutputs(OsmiumSolution.getFluidOrGas(100), Materials.Water.getFluid(900)) - .duration(7 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_IV) - .addTo(distillationTowerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(OsmiumSolution.get(cell), Materials.HydrochloricAcid.getCells(6)) - .itemOutputs(Materials.Osmium.getDust(1), Materials.Chlorine.getCells(7)) - .fluidOutputs(Materials.Water.getFluid(2000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Ir - GT_Values.RA.stdBuilder() - .itemInputs(IrLeachResidue.get(dust), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(PGSDResidue.get(dust), IridiumDioxide.get(dust)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, 775) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(IridiumDioxide.get(dust), Materials.HydrochloricAcid.getCells(1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidOutputs(AcidicIridiumSolution.getFluidOrGas(1000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(AcidicIridiumSolution.get(cell), AmmoniumChloride.get(cell, 3)) - .itemOutputs(Materials.Empty.getCells(4), IridiumChloride.get(dust)) - .fluidOutputs(Materials.Ammonia.getGas(3000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(IridiumChloride.get(dust), Materials.Calcium.getDust(1)) - .itemOutputs(PGSDResidue2.get(dust), Materials.Iridium.getDust(1)) - .fluidOutputs(CalciumChloride.getFluidOrGas(3000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(UniversalChemical); - // Rh - - GT_Values.RA.stdBuilder() - .itemInputs(RHSulfate.get(cell, 11), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RHSulfateSolution.get(cell, 11), LeachResidue.get(dustTiny, 10)) - .fluidInputs(Materials.Water.getFluid(10000)) - .fluidOutputs(Materials.Potassium.getMolten(2000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(LeachResidue.get(dust, 4)) - .fluidInputs(Materials.Water.getFluid(36000), RHSulfate.getFluidOrGas(39600)) - .fluidOutputs(Materials.Potassium.getMolten(7200), RHSulfateSolution.getFluidOrGas(39600)) - .duration(1 * MINUTES) - .eut(TierEU.RECIPE_LV) - .addTo(multiblockChemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Zinc.getDust(1)) - .itemOutputs(ZincSulfate.get(dust, 6), CrudeRhMetall.get(dust)) - .fluidInputs(RHSulfateSolution.getFluidOrGas(1000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(CrudeRhMetall.get(dust), Materials.Salt.getDust(1)) - .itemOutputs(RHSalt.get(dust, 3)) - .fluidInputs(Materials.Chlorine.getGas(1000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, 600) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(RHSalt.get(dust, 10)) - .fluidInputs(Materials.Water.getFluid(2000)) - .fluidOutputs(RHSaltSolution.getFluidOrGas(2000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(SodiumNitrate.get(dust, 5), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RHNitrate.get(dust), Materials.Salt.getDust(2)) - .fluidInputs(RHSaltSolution.getFluidOrGas(1000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - // Na + HNO3 = NaNO3 + H - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Sodium.getDust(1)) - .itemOutputs(SodiumNitrate.get(dust, 5)) - .fluidInputs(Materials.NitricAcid.getFluid(1000)) - .fluidOutputs(Materials.Hydrogen.getGas(1000)) - .duration(8 * TICKS) - .eut(60) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(RHNitrate.get(dust)) - .itemOutputs( - RhFilterCake.get(dust), - RhFilterCake.get(dust), - RhFilterCake.get(dust), - RhFilterCake.get(dust), - RhFilterCake.get(dust), - RhFilterCake.get(dust), - RhFilterCake.get(dust), - RhFilterCake.get(dust), - RhFilterCake.get(dust)) - .outputChances(1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1500) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(sifterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(RhFilterCake.get(dust)) - .fluidInputs(Materials.Water.getFluid(1000)) - .fluidOutputs(RHFilterCakeSolution.getFluidOrGas(1000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ReRh.get(dust)) - .fluidInputs(RHFilterCakeSolution.getFluidOrGas(1000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(ReRh.get(dust), Materials.Empty.getCells(1)) - .itemOutputs(Rhodium.get(dust), Materials.Ammonia.getCells(1)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(1000)) - .fluidOutputs(Materials.Chlorine.getGas(1000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - } - - private static boolean materialsContains(Materials one, ISubTagContainer other) { - if (one == null || one.mMaterialList == null || one.mMaterialList.isEmpty()) return false; - for (MaterialStack stack : one.mMaterialList) if (stack.mMaterial.equals(other)) return true; - return false; - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - public static void replacePureElements() { - // furnace - for (Object entry : FurnaceRecipes.smelting() - .getSmeltingList() - .entrySet()) { - Map.Entry realEntry = (Map.Entry) entry; - if (GT_Utility.isStackValid(realEntry.getKey()) - && BW_Util.checkStackAndPrefix((ItemStack) realEntry.getKey())) { - ItemData association = GT_OreDictUnificator.getAssociation((ItemStack) realEntry.getKey()); - if (!dust.equals(association.mPrefix) && !dustTiny.equals(association.mPrefix) - || !association.mMaterial.mMaterial.equals(Materials.Platinum)) - if (GT_Utility.isStackValid(realEntry.getValue()) - && BW_Util.checkStackAndPrefix((ItemStack) realEntry.getValue())) { - ItemData ass = GT_OreDictUnificator.getAssociation((ItemStack) realEntry.getValue()); - if (ass.mMaterial.mMaterial.equals(Materials.Platinum)) - if (!PlatinumSludgeOverHaul.isInBlackList((ItemStack) realEntry.getKey())) - realEntry.setValue( - PTMetallicPowder.get( - ass.mPrefix == nugget ? dustTiny : dust, - ((ItemStack) realEntry.getValue()).stackSize * 2)); - else if (ass.mMaterial.mMaterial.equals(Materials.Palladium)) - if (!PlatinumSludgeOverHaul.isInBlackList((ItemStack) realEntry.getKey())) - realEntry.setValue( - PDMetallicPowder.get( - ass.mPrefix == nugget ? dustTiny : dust, - ((ItemStack) realEntry.getValue()).stackSize * 2)); - } - } - } - // vanilla crafting - CraftingManager.getInstance() - .getRecipeList() - .forEach(PlatinumSludgeOverHaul::setnewMaterialInRecipe); - // gt crafting - GT_ModHandler.sBufferRecipeList.forEach(PlatinumSludgeOverHaul::setnewMaterialInRecipe); - // gt machines - maploop: for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { - if (map == fusionRecipes || map == unpackagerRecipes - || map == packagerRecipes - || map == replicatorRecipes - || "gt.recipe.eyeofharmony".equals(map.unlocalizedName) - || "gtpp.recipe.quantumforcesmelter".equals(map.unlocalizedName)) continue; - HashSet toDel = new HashSet<>(); - recipeloop: for (GT_Recipe recipe : map.getAllRecipes()) { - if (recipe.mFakeRecipe) continue maploop; - - for (int i = 0; i < recipe.mFluidOutputs.length; i++) { - if (map.equals(fluidExtractionRecipes)) continue maploop; - if ("gtpp.recipe.alloyblastsmelter".equals(map.unlocalizedName)) continue maploop; - if (map.equals(multiblockChemicalReactorRecipes) || map.equals(chemicalReactorRecipes)) { - if (GT_Utility.areFluidsEqual(Ruthenium.getMolten(1), recipe.mFluidOutputs[i]) - || GT_Utility.areFluidsEqual(Rhodium.getMolten(1), recipe.mFluidOutputs[i])) - toDel.add(recipe); - else if (GT_Utility.areFluidsEqual(Materials.Iridium.getMolten(1), recipe.mFluidOutputs[i])) { - recipe.mFluidOutputs[i] = AcidicIridiumSolution.getFluidOrGas(1000); - recipe.reloadOwner(); - } else - if (GT_Utility.areFluidsEqual(Materials.Platinum.getMolten(1), recipe.mFluidOutputs[i])) { - recipe.mFluidOutputs[i] = PTConcentrate.getFluidOrGas(1000); - recipe.reloadOwner(); - } else - if (GT_Utility.areFluidsEqual(Materials.Osmium.getMolten(1), recipe.mFluidOutputs[i])) { - recipe.mFluidOutputs[i] = AcidicOsmiumSolution.getFluidOrGas(1000); - recipe.reloadOwner(); - } - } else if (GT_Utility.areFluidsEqual(Ruthenium.getMolten(1), recipe.mFluidOutputs[i]) - || GT_Utility.areFluidsEqual(Rhodium.getMolten(1), recipe.mFluidOutputs[i]) - || GT_Utility.areFluidsEqual(Materials.Iridium.getMolten(1), recipe.mFluidOutputs[i]) - || GT_Utility.areFluidsEqual(Materials.Platinum.getMolten(1), recipe.mFluidOutputs[i])) - toDel.add(recipe); - else if (GT_Utility.areFluidsEqual(Materials.Osmium.getMolten(1), recipe.mFluidOutputs[i])) - toDel.add(recipe); - } - for (int i = 0; i < recipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(recipe.mOutputs[i])) continue; - if ((BW_Util.areStacksEqualOrNull(Ruthenium.get(dust), recipe.mOutputs[i]) - || BW_Util.areStacksEqualOrNull(Ruthenium.get(dustImpure), recipe.mOutputs[i]) - || BW_Util.areStacksEqualOrNull(Ruthenium.get(dustPure), recipe.mOutputs[i])) - && !BW_Util.areStacksEqualOrNull(Ruthenium.get(ingot), recipe.mInputs[0])) { - for (ItemStack mInput : recipe.mInputs) - if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; - int amount = recipe.mOutputs[i].stackSize * 2; - recipe.mOutputs[i] = LeachResidue.get(dust, amount); - recipe.reloadOwner(); - } - if ((BW_Util.areStacksEqualOrNull(Rhodium.get(dust), recipe.mOutputs[i]) - || BW_Util.areStacksEqualOrNull(Rhodium.get(dustImpure), recipe.mOutputs[i]) - || BW_Util.areStacksEqualOrNull(Rhodium.get(dustPure), recipe.mOutputs[i])) - && !BW_Util.areStacksEqualOrNull(Rhodium.get(ingot), recipe.mInputs[0])) { - for (ItemStack mInput : recipe.mInputs) - if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; - int amount = recipe.mOutputs[i].stackSize * 2; - recipe.mOutputs[i] = CrudeRhMetall.get(dust, amount); - recipe.reloadOwner(); - } - if (!BW_Util.checkStackAndPrefix(recipe.mOutputs[i])) continue; - // Pt - if (GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mMaterial.mMaterial - .equals(Materials.Platinum)) { - for (ItemStack mInput : recipe.mInputs) { - if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; - } - if (dust.equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) - || dustImpure.equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) - || dustPure.equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util.setStackSize(PTMetallicPowder.get(dust), amount * 2); - recipe.reloadOwner(); - } else if (dustSmall.equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util.setStackSize(PTMetallicPowder.get(dustSmall), amount * 2); - recipe.reloadOwner(); - } else if (dustTiny.equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util.setStackSize(PTMetallicPowder.get(dustTiny), amount * 2); - recipe.reloadOwner(); - } - } else if (GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mMaterial.mMaterial - .equals(Materials.Palladium)) { - for (ItemStack mInput : recipe.mInputs) { - if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; - } - if (dust.equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) - || dustImpure.equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) - || dustPure.equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util.setStackSize(PDMetallicPowder.get(dust), amount * 4); - recipe.reloadOwner(); - } else - if (dustSmall.equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util - .setStackSize(PDMetallicPowder.get(dustSmall), amount * 4); - recipe.reloadOwner(); - } else if (dustTiny - .equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util - .setStackSize(PDMetallicPowder.get(dustTiny), amount * 4); - recipe.reloadOwner(); - } - } else if (GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mMaterial.mMaterial - .equals(Materials.Osmium)) { - for (ItemStack mInput : recipe.mInputs) { - if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; - } - if (dust.equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) - || dustImpure - .equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) - || dustPure - .equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util.setStackSize(IrOsLeachResidue.get(dust), amount); - recipe.reloadOwner(); - } else if (dustSmall - .equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util - .setStackSize(IrOsLeachResidue.get(dustSmall), amount); - recipe.reloadOwner(); - } else if (dustTiny - .equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util - .setStackSize(IrOsLeachResidue.get(dustTiny), amount); - recipe.reloadOwner(); - } - } else if (GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mMaterial.mMaterial - .equals(Materials.Iridium)) { - for (ItemStack mInput : recipe.mInputs) { - if (PlatinumSludgeOverHaul.isInBlackList(mInput)) continue recipeloop; - } - if (dust.equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) - || dustImpure - .equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix) - || dustPure - .equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util.setStackSize(IrLeachResidue.get(dust), amount); - recipe.reloadOwner(); - } else if (dustSmall - .equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util - .setStackSize(IrLeachResidue.get(dustSmall), amount); - recipe.reloadOwner(); - } else if (dustTiny - .equals(GT_OreDictUnificator.getAssociation(recipe.mOutputs[i]).mPrefix)) { - int amount = recipe.mOutputs[i].stackSize; - recipe.mOutputs[i] = BW_Util - .setStackSize(IrLeachResidue.get(dustTiny), amount); - recipe.reloadOwner(); - } - } - } - } - map.getBackend() - .removeRecipes(toDel); - } - // TODO: remove EnderIO recipes - - // fix HV tier - PlatinumSludgeOverHaul.replaceHVCircuitMaterials(); - // add new recipes - PlatinumSludgeOverHaul.runHelperrecipes(); - } - - @SuppressWarnings("deprecation") - private static void replaceHVCircuitMaterials() { - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Redstone.getDust(1), - Materials.Electrum.getDust(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(Materials.Electrotine.getDust(8)) - .duration(1 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - for (GT_Recipe recipe : circuitAssemblerRecipes.getAllRecipes()) { - if (recipe.mEUt > 512) continue; - if (BW_Util.checkStackAndPrefix(recipe.mOutputs[0])) { - for (int i = 0; i < recipe.mInputs.length; i++) { - ItemStack stack = recipe.mInputs[i]; - ItemData ass = GT_OreDictUnificator.getAssociation(stack); - if (BW_Util.checkStackAndPrefix(stack) && ass.mMaterial.mMaterial.equals(Materials.Platinum)) { - recipe.mInputs[i] = GT_OreDictUnificator.get(ass.mPrefix, Materials.BlueAlloy, stack.stackSize); - recipe.reloadOwner(); - } - } - } - } - } - - private static void setnewMaterialInRecipe(IRecipe recipe) { - ItemStack otpt = recipe.getRecipeOutput(); - - if (!(recipe instanceof IRecipeMutableAccess mutableRecipe)) { - return; - } - - Object input = mutableRecipe.gt5u$getRecipeInputs(); - - if (input == null) { - return; - } - - if (GT_Utility.areStacksEqual(otpt, Materials.Platinum.getDust(1), true)) { - if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Platinum)) return; - mutableRecipe.gt5u$setRecipeOutputItem(PTMetallicPowder.get(dust, otpt.stackSize * 2)); - } else if (GT_Utility.areStacksEqual(otpt, Materials.Palladium.getDust(1), true)) { - if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Palladium)) return; - mutableRecipe.gt5u$setRecipeOutputItem(PDMetallicPowder.get(dust, otpt.stackSize * 2)); - } else if (GT_Utility.areStacksEqual(otpt, Materials.Iridium.getDust(1), true)) { - if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Iridium)) return; - mutableRecipe.gt5u$setRecipeOutputItem(IrLeachResidue.get(dust, otpt.stackSize)); - } else if (GT_Utility.areStacksEqual(otpt, Materials.Osmium.getDust(1), true)) { - if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Osmium)) return; - mutableRecipe.gt5u$setRecipeOutputItem(IrOsLeachResidue.get(dust, otpt.stackSize)); - } - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - public static boolean checkRecipe(Object input, Materials mat) { - if (input instanceof List || input instanceof Object[]) { - Set lists = new HashSet(), stacks = new HashSet(); - List ip = input instanceof List ? (List) input : new ArrayList(); - Object[] ip2 = input instanceof Object[] ? (Object[]) input : new Object[0]; - - for (Object o : ip) { - if (o instanceof List) lists.add(o); - else if (o instanceof ItemStack) stacks.add(o); - } - for (Object o : ip2) { - if (o instanceof List) lists.add(o); - else if (o instanceof ItemStack) stacks.add(o); - } - - for (Object o : lists) { - if (!((List) o).isEmpty()) stacks.add(((List) o).get(0)); - } - - boolean allSame = false; - for (Object stack : stacks) { - if (!(stack instanceof ItemStack)) { - allSame = false; - break; - } - allSame = BW_Util.checkStackAndPrefix((ItemStack) stack) - && GT_OreDictUnificator.getAssociation((ItemStack) stack).mMaterial.mMaterial.equals(mat); - if (!allSame) break; - } - return allSame; - } - return false; - } - - private static boolean isInBlackList(ItemStack stack) { - if (stack == null || stack.getItem() instanceof BW_MetaGenerated_Items - || MainMod.MOD_ID.equals(GameRegistry.findUniqueIdentifierFor(stack.getItem()).modId) - || BartWorksCrossmod.MOD_ID.equals(GameRegistry.findUniqueIdentifierFor(stack.getItem()).modId)) - return true; - - if (GameRegistry.findUniqueIdentifierFor(stack.getItem()).modId.equals(NewHorizonsCoreMod.ID) - && !stack.getUnlocalizedName() - .contains("dust") - && !stack.getUnlocalizedName() - .contains("Dust")) - return true; - - if (Block.getBlockFromItem(stack.getItem()) instanceof GT_Generic_Block - && !(Block.getBlockFromItem(stack.getItem()) instanceof GT_Block_Ores_Abstract)) return true; - - if (Arrays.stream(ItemList.values()) - .filter(ItemList::hasBeenSet) - .anyMatch(e -> !BW_Util.checkStackAndPrefix(stack) && GT_Utility.areStacksEqual(e.get(1), stack, true))) - return true; - - if (stack.getItem() instanceof GT_Generic_Item) { - if (!BW_Util.checkStackAndPrefix(stack)) return false; - if (GT_OreDictUnificator.getAssociation(stack).mPrefix != rawOre) { - return !Arrays.asList(PlatinumSludgeOverHaul.OPBLACKLIST) - .contains(GT_OreDictUnificator.getAssociation(stack).mPrefix) - || Arrays.asList(PlatinumSludgeOverHaul.BLACKLIST) - .contains(GT_OreDictUnificator.getAssociation(stack).mMaterial.mMaterial); - } - } - - try { - if (Class.forName("gtPlusPlus.core.item.base.BaseItemComponent") - .isAssignableFrom( - stack.getItem() - .getClass()) - && !stack.getUnlocalizedName() - .contains("dust") - && !stack.getUnlocalizedName() - .contains("Dust")) { - return true; - } - if (Class.forName("gtPlusPlus.core.block.base.BlockBaseModular") - .isAssignableFrom( - Block.getBlockFromItem(stack.getItem()) - .getClass())) { - return true; - } - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - if (stack.getItem() == HELICOPTER.getDust(1) - .getItem()) { - return true; - } - if (stack.getItem() == WHITE_METAL.getDust(1) - .getItem()) { - return true; - } - if (GalaxySpace.isModLoaded()) { - if (stack.getItem() == GT_ModHandler.getModItem(GalaxySpace.ID, "metalsblock", 1L, 7) - .getItem()) { - return true; - } - } - if (NewHorizonsCoreMod.isModLoaded()) { - if (stack.getItem() == GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.IndustryFrame", 1L) - .getItem()) { - return true; - } - } - if (!BW_Util.checkStackAndPrefix(stack)) { - return false; - } - return Arrays.asList(PlatinumSludgeOverHaul.BLACKLIST) - .contains(GT_OreDictUnificator.getAssociation(stack).mMaterial.mMaterial); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/Werkstoff.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/Werkstoff.java deleted file mode 100644 index 59bdef8cb5..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/Werkstoff.java +++ /dev/null @@ -1,1264 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import static gregtech.api.enums.Mods.GalaxySpace; -import static net.minecraft.util.EnumChatFormatting.DARK_PURPLE; -import static net.minecraft.util.EnumChatFormatting.GREEN; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.system.oredict.OreDictHandler; -import com.github.bartimaeusnek.bartworks.util.BW_ColorUtil; -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.github.bartimaeusnek.bartworks.util.MurmurHash3; -import com.github.bartimaeusnek.bartworks.util.NonNullWrappedHashMap; -import com.github.bartimaeusnek.bartworks.util.Pair; -import com.github.bartimaeusnek.crossmod.BartWorksCrossmod; -import com.github.bartimaeusnek.crossmod.tgregworks.MaterialsInjector; - -import cpw.mods.fml.common.Loader; -import gregtech.api.GregTech_API; -import gregtech.api.enums.FluidState; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Mods; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.enums.TextureSet; -import gregtech.api.interfaces.IColorModulationContainer; -import gregtech.api.interfaces.ISubTagContainer; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import thaumcraft.api.aspects.Aspect; - -public class Werkstoff implements IColorModulationContainer, ISubTagContainer { - - public static final LinkedHashSet werkstoffHashSet = new LinkedHashSet<>(); - public static final LinkedHashMap werkstoffHashMap = new LinkedHashMap<>(); - public static final LinkedHashMap werkstoffNameHashMap = new LinkedHashMap<>(); - - public static final Map modNameOverrides = new HashMap<>() { - - private static final long serialVersionUID = 6399917619058898648L; - - { - this.put(GalaxySpace.ID, DARK_PURPLE + "GalaxySpace"); - } - }; - - private static final List BWModNames = Arrays - .asList(MainMod.NAME, BartWorksCrossmod.NAME, MaterialsInjector.NAME); - - private static final HashSet idHashSet = new HashSet<>(); - - private static final Werkstoff.Stats DEFAULT_NULL_STATS = new Werkstoff.Stats(); - private static final Werkstoff.GenerationFeatures DEFAULT_NULL_GENERATION_FEATURES = new Werkstoff.GenerationFeatures() - .disable(); - public static Werkstoff default_null_Werkstoff; - - private final HashSet ADDITIONAL_OREDICT = new HashSet<>(); - private final List mOreByProducts = new ArrayList<>(); - private final LinkedHashSet> CONTENTS = new LinkedHashSet<>(); - private final HashSet SUBTAGS = new HashSet<>(); - private byte[] rgb = new byte[3]; - private final String defaultName; - private String toolTip; - - private Werkstoff.Stats stats; - private final Werkstoff.Types type; - private final Werkstoff.GenerationFeatures generationFeatures; - private final short mID; - private final TextureSet texSet; - private Materials bridgeMaterial; - private final String owner; - - public Materials getBridgeMaterial() { - return this.bridgeMaterial; - } - - public void setBridgeMaterial(Materials bridgeMaterial) { - this.bridgeMaterial = bridgeMaterial; - } - - public static void init() { - Werkstoff.default_null_Werkstoff = new Werkstoff( - new short[3], - "_NULL", - "Default null Werkstoff", - Werkstoff.DEFAULT_NULL_STATS, - Werkstoff.Types.UNDEFINED, - Werkstoff.DEFAULT_NULL_GENERATION_FEATURES, - -1, - TextureSet.SET_NONE); - } - - /** - * GT Materials Bridge Constructor - * - * @param materials a GT Materials - * @param generationFeatures the new Types you want to add - * @param type - self explainatory - * @param mID > 31_766 && <= 32_767 - */ - public Werkstoff(Materials materials, Werkstoff.GenerationFeatures generationFeatures, Types type, int mID) { - this( - materials.mRGBa, - materials.mDefaultLocalName, - materials.getToolTip(), - type == null ? materials.mElement != null ? Types.ELEMENT : Types.UNDEFINED : type, - generationFeatures, - mID, - materials.mIconSet, - (List) materials.mOreByProducts, - new Pair<>(materials, 1)); - if (mID <= 31_766 || mID > 32_767) throw new IllegalArgumentException(); - this.stats.mass = materials.getMass(); - this.stats.protons = materials.getProtons(); - this.stats.meltingPoint = materials.mMeltingPoint; - this.stats.neutrons = materials.getNeutrons(); - this.stats.speedOverride = materials.mToolSpeed; - this.stats.durOverride = materials.mDurability; - this.stats.qualityOverride = materials.mToolQuality; - this.stats.setGas(materials.mHasGas); - this.stats.setRadioactive(materials.isRadioactive()); - this.stats.setBlastFurnace(materials.mBlastFurnaceRequired); - this.stats.setMeltingVoltage(120); - if (type == Types.COMPOUND) { - this.stats.setElektrolysis(true); - this.generationFeatures.addChemicalRecipes(); - } else if (type == Types.MIXTURE) { - this.stats.setCentrifuge(true); - this.generationFeatures.addMixerRecipes(); - } - } - - @SafeVarargs - public Werkstoff(short[] rgba, String defaultName, Werkstoff.Types type, int meltingpoint, - Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, - Pair... contents) { - this( - rgba, - defaultName, - Werkstoff.Types.getDefaultStatForType(type) - .setMeltingPoint(meltingpoint), - type, - generationFeatures, - mID, - texSet, - contents); - } - - @SafeVarargs - public Werkstoff(short[] rgba, String defaultName, Werkstoff.Types type, - Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, - Pair... contents) { - this( - rgba, - defaultName, - Werkstoff.Types.getDefaultStatForType(type), - type, - generationFeatures, - mID, - texSet, - contents); - } - - @SafeVarargs - public Werkstoff(short[] rgba, String defaultName, Werkstoff.Types type, int meltingpoint, - Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, - List oreByProduct, Pair... contents) { - this( - rgba, - defaultName, - Werkstoff.Types.getDefaultStatForType(type) - .setMeltingPoint(meltingpoint), - type, - generationFeatures, - mID, - texSet, - oreByProduct, - contents); - } - - @SafeVarargs - public Werkstoff(short[] rgba, String defaultName, Werkstoff.Types type, - Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, - List oreByProduct, Pair... contents) { - this( - rgba, - defaultName, - Werkstoff.Types.getDefaultStatForType(type), - type, - generationFeatures, - mID, - texSet, - oreByProduct, - contents); - } - - @SafeVarargs - public Werkstoff(short[] rgba, String toolTip, String defaultName, Werkstoff.Types type, - Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, - List oreByProduct, Pair... contents) { - this( - rgba, - toolTip, - defaultName, - Werkstoff.Types.getDefaultStatForType(type), - type, - generationFeatures, - mID, - texSet, - oreByProduct, - contents); - } - - @SafeVarargs - public Werkstoff(short[] rgba, String defaultName, Werkstoff.Stats stats, Werkstoff.Types type, - Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, - List oreByProduct, Pair... contents) { - this(rgba, defaultName, "", stats, type, generationFeatures, mID, texSet, contents); - this.mOreByProducts.clear(); - this.mOreByProducts.addAll(oreByProduct); - } - - @SafeVarargs - public Werkstoff(short[] rgba, String defaultName, Werkstoff.Stats stats, Werkstoff.Types type, - Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, - Pair... contents) { - this(rgba, defaultName, "", stats, type, generationFeatures, mID, texSet, contents); - } - - @SafeVarargs - public Werkstoff(short[] rgba, String defaultName, String toolTip, Werkstoff.Stats stats, Werkstoff.Types type, - Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, - List oreByProduct, Pair... contents) { - this(rgba, defaultName, toolTip, stats, type, generationFeatures, mID, texSet, contents); - this.mOreByProducts.clear(); - this.mOreByProducts.addAll(oreByProduct); - } - - @SafeVarargs - public Werkstoff(short[] rgba, String defaultName, String toolTip, Werkstoff.Stats stats, Werkstoff.Types type, - Werkstoff.GenerationFeatures generationFeatures, int mID, TextureSet texSet, - Pair... contents) { - - if (Werkstoff.idHashSet.contains((short) mID)) - throw new UnsupportedOperationException("ID (" + mID + ") is already in use!"); - Werkstoff.idHashSet.add((short) mID); - if (type == null) type = Werkstoff.Types.UNDEFINED; - - this.mID = (short) mID; - this.defaultName = defaultName; - // Ensure that localization key are written to the lang file - GregTech_API.sAfterGTPreload.add(() -> { this.getLocalizedName(); }); - this.stats = stats; - this.type = type; - this.generationFeatures = generationFeatures; - this.setRgb(BW_ColorUtil.correctCorlorArray(rgba)); - this.CONTENTS.addAll(Arrays.asList(contents)); - this.toolTip = ""; - if (toolTip.isEmpty()) { - for (Pair p : contents) { - if (contents.length > 1) { - if (p.getKey() instanceof Materials) { - if (((Materials) p.getKey()).mMaterialList.size() > 1 && p.getValue() > 1) - this.toolTip += "(" + getFormula((Materials) p.getKey()) - + ")" - + BW_Util.subscriptNumber(p.getValue()); - else this.toolTip += getFormula((Materials) p.getKey()) - + (p.getValue() > 1 ? BW_Util.subscriptNumber(p.getValue()) : ""); - } - if (p.getKey() instanceof Werkstoff) { - if (((Werkstoff) p.getKey()).CONTENTS.size() > 1 && p.getValue() > 1) - this.toolTip += "(" + getFormula((Werkstoff) p.getKey()) - + ")" - + BW_Util.subscriptNumber(p.getValue()); - else this.toolTip += getFormula((Werkstoff) p.getKey()) - + (p.getValue() > 1 ? BW_Util.subscriptNumber(p.getValue()) : ""); - } - } else if (p.getKey() instanceof Materials) { - this.toolTip += getFormula((Materials) p.getKey()) - + (p.getValue() > 1 ? BW_Util.subscriptNumber(p.getValue()) : ""); - } else if (p.getKey() instanceof Werkstoff) this.toolTip += getFormula((Werkstoff) p.getKey()) - + (p.getValue() > 1 ? BW_Util.subscriptNumber(p.getValue()) : ""); - } - } else this.toolTip = toolTip; - - // if (this.toolTip.length() > 25) - // this.toolTip = "The formula is to long..."; - - // Ensure that localization key are written to the lang file - GregTech_API.sAfterGTPreload.add(() -> { this.getLocalizedToolTip(); }); - - if (this.stats.protons == 0) { - long tmpprotons = 0; - for (Pair p : contents) { - if (p.getKey() instanceof Materials) { - tmpprotons += ((Materials) p.getKey()).getProtons() * p.getValue(); - } else if (p.getKey() instanceof Werkstoff) { - tmpprotons += ((Werkstoff) p.getKey()).getStats().protons * p.getValue(); - } - } - this.stats = stats.setProtons(tmpprotons); - } - if (this.stats.mass == 0) { - long tmpmass = 0; - int count = 0; - for (Pair p : contents) { - if (p.getKey() instanceof Materials) { - tmpmass += ((Materials) p.getKey()).getMass() * p.getValue(); - count += p.getValue(); - } else if (p.getKey() instanceof Werkstoff) { - tmpmass += ((Werkstoff) p.getKey()).getStats().mass * p.getValue(); - count += p.getValue(); - } - } - if (count > 0) this.stats = stats.setMass(tmpmass / count); - } - - if (this.stats.meltingPoint == 0) this.stats.meltingPoint = 1123; - - if (this.stats.meltingVoltage == 0) this.stats.meltingVoltage = 120; - - this.texSet = texSet; - - switch (this.mOreByProducts.size()) { - case 0: - this.mOreByProducts.add(this); - this.mOreByProducts.add(this); - this.mOreByProducts.add(this); - break; - case 1: - this.mOreByProducts.add(this); - this.mOreByProducts.add(this); - break; - case 2: - this.mOreByProducts.add(this); - break; - } - - Optional> firstContent; - if (this.CONTENTS.size() == 1 && (firstContent = this.CONTENTS.stream() - .findFirst()).isPresent()) { - ISubTagContainer firstContentSubTagContainer = firstContent.get() - .getKey(); - if (firstContent.get() - .getValue() == 1 && firstContentSubTagContainer instanceof Materials) this.getGenerationFeatures() - .setExtension(); - } - - Werkstoff.werkstoffHashSet.add(this); - Werkstoff.werkstoffHashMap.put(this.mID, this); - Werkstoff.werkstoffNameHashMap.put(this.defaultName, this); - - this.owner = this.getMaterialOwner(); - } - - private static String getFormula(Materials material) { - return material.mChemicalFormula.isEmpty() ? "?" : material.mChemicalFormula; - } - - private static String getFormula(Werkstoff material) { - return material.toolTip.isEmpty() ? "?" : material.toolTip; - } - - public Werkstoff addAdditionalOreDict(String s) { - this.ADDITIONAL_OREDICT.add(s); - return this; - } - - public HashSet getADDITIONAL_OREDICT() { - return this.ADDITIONAL_OREDICT; - } - - public void setTCAspects(Pair... pAspectsArr) { - this.stats.mTC_Aspects = pAspectsArr; - } - - @SuppressWarnings("unchecked") - public Pair[] getTCAspects(int ratio) { - if (this.stats.mTC_Aspects == null) { - HashSet tc_aspectStacks = new HashSet<>(); - HashSet> set = new HashSet<>(); - for (Pair p : this.getContents() - .getValue()) { - if (p.getKey() instanceof Materials) tc_aspectStacks.addAll(((Materials) p.getKey()).mAspects); - if (p.getKey() instanceof Werkstoff) set.addAll(Arrays.asList(((Werkstoff) p.getKey()).getTCAspects())); - } - tc_aspectStacks.forEach( - tc_aspectStack -> set.add(new Pair<>(tc_aspectStack.mAspect.mAspect, (int) tc_aspectStack.mAmount))); - this.stats.mTC_Aspects = set.toArray(new Pair[0]); - } - Pair[] ret = this.stats.mTC_Aspects.clone(); - for (int i = 0; i < ret.length; i++) { - ret[i] = ret[i].copyWithNewValue(ret[i].getValue() * ratio); - } - return ret; - } - - public List getGTWrappedTCAspects() { - final List ret = new ArrayList<>(); - Arrays.stream(this.getTCAspects()) - .forEach(objectIntegerPair -> { - new TC_Aspects.TC_AspectStack( - TC_Aspects.valueOf( - ((Aspect) objectIntegerPair.getKey()).getName() - .toUpperCase(Locale.US)), - objectIntegerPair.getValue()).addToAspectList(ret); - }); - return ret; - } - - public Pair[] getTCAspects() { - return this.getTCAspects(1); - } - - public Werkstoff.Types getType() { - return this.type; - } - - public boolean containsStuff(ISubTagContainer stuff) { - for (Pair pair : this.CONTENTS) { - if (pair.getKey() - .equals(stuff)) return true; - } - return false; - } - - public Pair>> getContents() { - int ret = 0; - switch (this.type) { - case COMPOUND: - case MIXTURE: - case BIOLOGICAL: { - for (int i = 0; i < this.CONTENTS.toArray().length; i++) { - ret += (int) this.CONTENTS.toArray(new Pair[0])[i].getValue(); - } - break; - } - default: - ret = 1; - break; - } - return new Pair<>(ret, this.CONTENTS); - } - - public int getNoOfByProducts() { - return this.mOreByProducts.size(); - } - - public ISubTagContainer getOreByProductRaw(int aNumber) { - if (this.mOreByProducts.size() == 0) return null; - if (aNumber < 0) aNumber = this.mOreByProducts.size() + aNumber; - while (aNumber >= this.mOreByProducts.size()) aNumber--; - ISubTagContainer o = this.mOreByProducts.get(aNumber); - if (o == null || o.equals(Werkstoff.default_null_Werkstoff) || o.equals(Materials._NULL)) return this; - return o; - } - - public ItemStack getOreByProduct(int aNumber, OrePrefixes prefixes) { - if (this.mOreByProducts.size() == 0) return null; - if (aNumber < 0) aNumber = this.mOreByProducts.size() + aNumber; - while (aNumber >= this.mOreByProducts.size()) aNumber--; - Object o = this.mOreByProducts.get(aNumber); - if (o == null || o.equals(Werkstoff.default_null_Werkstoff) || o.equals(Materials._NULL)) - return this.get(prefixes); - if (o instanceof Werkstoff) return WerkstoffLoader.getCorrespondingItemStack(prefixes, (Werkstoff) o); - if (o instanceof Materials) return GT_OreDictUnificator.get(prefixes, o, 1L); - return null; - } - - public String getDefaultName() { - return this.defaultName; - } - - public String getLocalizedName() { - return GT_LanguageManager.addStringLocalization( - String.format("bw.werkstoff.%05d.name", this.mID), - this.defaultName, - !GregTech_API.sPostloadFinished); - } - - public String getVarName() { - return this.defaultName.replace(" ", ""); - } - - public String getToolTip() { - return this.toolTip; - } - - public String getLocalizedToolTip() { - return GT_LanguageManager.addStringLocalization( - String.format("bw.werkstoff.%05d.tooltip", this.mID), - this.toolTip, - !GregTech_API.sPostloadFinished); - } - - public Werkstoff.Stats getStats() { - return this.stats; - } - - public short getmID() { - return this.mID; - } - - public short getMixCircuit() { - return this.getGenerationFeatures().mixCircuit; - } - - public Werkstoff.GenerationFeatures getGenerationFeatures() { - return this.generationFeatures; - } - - public TextureSet getTexSet() { - return this.texSet; - } - - public void setRgb(short[] rgb) { - this.rgb = new byte[] { (byte) (rgb[0] - 128), (byte) (rgb[1] - 128), (byte) (rgb[2] - 128) }; - } - - @Override - public short[] getRGBA() { - return new short[] { (short) (this.rgb[0] + 128), (short) (this.rgb[1] + 128), (short) (this.rgb[2] + 128), 0 }; - } - - @Override - public boolean contains(SubTag subTag) { - if (!subTag.equals(WerkstoffLoader.NOBLE_GAS) && !subTag.equals(WerkstoffLoader.ANAEROBE_GAS) - && !subTag.equals(WerkstoffLoader.NO_BLAST)) - for (Pair p : this.CONTENTS) if (p.getKey() - .contains(subTag)) return true; - return this.SUBTAGS.contains(subTag); - } - - @Override - public ISubTagContainer add(SubTag... subTags) { - this.SUBTAGS.addAll(Arrays.asList(subTags)); - return this; - } - - @Override - public boolean remove(SubTag subTag) { - return this.SUBTAGS.remove(subTag); - } - - public void getAndAddToCollection(OrePrefixes prefixes, int amount, Collection stacks) { - stacks.add(this.get(prefixes, amount)); - } - - public ItemStack get(OrePrefixes prefixes) { - return WerkstoffLoader.getCorrespondingItemStack(prefixes, this); - } - - public FluidStack getFluidOrGas(int fluidAmount) { - return new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(this)), fluidAmount); - } - - public FluidStack getMolten(int fluidAmount) { - return new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(this)), fluidAmount); - } - - public ItemStack get(OrePrefixes prefixes, int amount) { - return WerkstoffLoader.getCorrespondingItemStack(prefixes, this, amount); - } - - public byte getToolQuality() { - return this.stats.getQualityOverride() > 0 ? this.stats.getQualityOverride() - : (byte) (15f * (this.getStats() - .getProtons() / 188f - + this.getStats() - .getMeltingPoint() / 10801f) - / (float) this.getContents() - .getKey()); - } - - public float getToolSpeed() { - return this.stats.getSpeedOverride() > 0f ? this.stats.getSpeedOverride() - : Math.max( - 1f, - 2f * (-this.getStats() - .getMass() + 0.1f - * this.getStats() - .getMeltingPoint() - + this.getStats() - .getProtons()) - * 0.1f - / (float) this.getContents() - .getKey() - * 0.1f - * this.getToolQuality()); - } - - public int getDurability() { - return this.stats.getDurOverride() > 0 ? this.stats.getDurOverride() - : (int) (this.stats.durMod * (0.01f * this.getStats() - .getMeltingPoint() - * this.getStats() - .getMass() - / (float) this.getContents() - .getKey())); - } - - /** - * Checks if the generation feature is enabled and if its not in the blacklist - */ - public boolean hasItemType(OrePrefixes prefixes) { - int unpacked = Werkstoff.GenerationFeatures.getPrefixDataRaw(prefixes); - return (this.getGenerationFeatures().toGenerate & unpacked) != 0 - && (this.getGenerationFeatures().blacklist & unpacked) == 0; - } - - /** - * DOES NOT CHECK BLACKLIST! - */ - public boolean hasGenerationFeature(OrePrefixes prefixes) { - int unpacked = Werkstoff.GenerationFeatures.getPrefixDataRaw(prefixes); - return (this.getGenerationFeatures().toGenerate & unpacked) != 0; - } - - /** - * Checks if the Actual Stack exists in the OreDict - */ - public boolean doesOreDictedItemExists(OrePrefixes prefixes) { - return OreDictHandler.getItemStack(this.getDefaultName(), prefixes, 1) != null; - } - - public String getOwner() { - return this.owner; - } - - private String getMaterialOwner() { - String modName = Loader.instance() - .activeModContainer() - .getName(); - if (modNameOverrides.get(modName) != null) { - return modNameOverrides.get(modName); - } - if (BWModNames.contains(modName)) { - return null; - } - return GREEN + modName; - } - - public enum Types { - - MATERIAL, - COMPOUND, - MIXTURE, - BIOLOGICAL, - ELEMENT, - ISOTOPE, - UNDEFINED; - - public static Werkstoff.Stats getDefaultStatForType(Werkstoff.Types T) { - return switch (T) { - case COMPOUND, BIOLOGICAL -> new Werkstoff.Stats().setElektrolysis(true); - case MIXTURE -> new Werkstoff.Stats().setCentrifuge(true); - default -> new Werkstoff.Stats(); - }; - } - } - - public static class GenerationFeatures { - - public static final GenerationFeatures DISABLED = new GenerationFeatures().disable(); - long toGenerate = 0b0001001; - // logic gate shit - /* - * dust 1 metal 10 (ingot, nugget) gem 100 ore 1000 cell 10000 plasma 100000 molten 1000000 crafting metal - * 10000000 (sticks, plates) meta crafting metal 100000000 (gears, screws, bolts, springs) multiple ingotWorth - * stuff 1000000000 (double, triple, quadruple, ingot/plates) - */ - private boolean isExtension; - private static final NonNullWrappedHashMap prefixLogic = new NonNullWrappedHashMap<>(0); - - public GenerationFeatures() {} - - public static void initPrefixLogic() { - Arrays.stream(OrePrefixes.values()) - .forEach(e -> prefixLogic.put(e, 0)); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.dust, 0b1); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.dustTiny, 0b1); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.dustSmall, 0b1); - - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingot, 0b10); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingotHot, 0b10); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.nugget, 0b10); - - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gem, 0b100); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gemFlawed, 0b100); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gemExquisite, 0b100); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gemChipped, 0b100); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gemFlawless, 0b100); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.lens, 0b100); - - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.block, 0b110); - - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ore, 0b1000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.dustImpure, 0b1000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.dustPure, 0b1000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.crushed, 0b1000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.crushedPurified, 0b1000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.crushedCentrifuged, 0b1000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.rawOre, 0b1000); - - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.cell, 0b10000); - if (Mods.Forestry.isModLoaded()) { - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.capsule, 0b10000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.capsuleMolten, 0b1000000); - } - // Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.bottle,0b10000); - - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.cellMolten, 0b1000000); - - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plate, 0b10000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.foil, 0b10000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.stick, 0b10000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.stickLong, 0b10000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.toolHeadHammer, 0b10000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.toolHeadWrench, 0b10000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.toolHeadSaw, 0b10000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.turbineBlade, 0b10000000); - - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.screw, 0b100000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gearGt, 0b100000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.gearGtSmall, 0b100000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.bolt, 0b100000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ring, 0b100000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.spring, 0b100000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.springSmall, 0b100000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.rotor, 0b100000000); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.wireFine, 0b100000000); - - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plateDouble, 0x200); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plateTriple, 0x200); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plateQuadruple, 0x200); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plateQuintuple, 0x200); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.plateDense, 0x200); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingotDouble, 0x200); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingotTriple, 0x200); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingotQuadruple, 0x200); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.ingotQuintuple, 0x200); - - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.blockCasing, 0x380); - Werkstoff.GenerationFeatures.prefixLogic.put(OrePrefixes.blockCasingAdvanced, 0x380); - } - - public void setExtension() { - this.isExtension = !this.isExtension; - } - - public static int getPrefixDataRaw(OrePrefixes prefixes) { - if (prefixes == null) throw new IllegalArgumentException("OrePrefixes is NULL!"); - return GenerationFeatures.prefixLogic.get(prefixes); - } - - public boolean isExtension() { - return this.isExtension; - } - - // public byte toGenerateSecondary = 0b0000000; - public byte blacklist; - - public boolean enforceUnification; - - /* - * Auto add Chemical Recipes 1 Auto add mixer Recipes 10 Auto add Sifter Recipe 100 Auto add - * MetalWorking(sticks, plates) Recipe 1000 Auto add MetalWorking(crafting components) Recipe 10000 - */ - public byte extraRecipes; - - /* - * Here so that new recipes don't fuck with existing functionality Auto add Crafting Metal Solidifier recipes 1 - * Auto add Meta Crafting Metal Solidifier recipes 10 Auto add Multiple Ingot Metal Solidifier recipes 100 - * (Unused) - */ - public byte extraRecipes2; - - public short mixCircuit = -1; - - public Werkstoff.GenerationFeatures setBlacklist(OrePrefixes p) { - this.blacklist |= getPrefixDataRaw(p); - return this; - } - - @Deprecated - public boolean hasDusts() { - return (this.toGenerate & 0b1) != 0; - } - - @Deprecated - public boolean hasGems() { - return (this.toGenerate & 0b100) != 0; - } - - @Deprecated - public boolean hasOres() { - return (this.toGenerate & 0b1000) != 0; - } - - public Werkstoff.GenerationFeatures enforceUnification() { - this.enforceUnification = true; - return this; - } - - @Deprecated - public Werkstoff.GenerationFeatures removeGems() { - if (this.hasGems()) this.toGenerate = this.toGenerate ^ 0b100; - return this; - } - - @Deprecated - public Werkstoff.GenerationFeatures removeDusts() { - if (this.hasDusts()) this.toGenerate = this.toGenerate ^ 0b1; - return this; - } - - @Deprecated - public Werkstoff.GenerationFeatures removeOres() { - if (this.hasOres()) this.toGenerate = this.toGenerate ^ 0b1000; - return this; - } - - public Werkstoff.GenerationFeatures addChemicalRecipes() { - this.extraRecipes = (byte) (this.extraRecipes | 1); - return this; - } - - public boolean hasChemicalRecipes() { - return (this.extraRecipes & 1) != 0; - } - - public Werkstoff.GenerationFeatures addMetalCraftingSolidifierRecipes() { - this.extraRecipes2 = (byte) (this.extraRecipes2 | 1); - return this; - } - - public boolean hasMetalCraftingSolidifierRecipes() { - return (this.extraRecipes2 & 1) != 0; - } - - public Werkstoff.GenerationFeatures addMetaSolidifierRecipes() { - this.extraRecipes2 = (byte) (this.extraRecipes2 | 10); - return this; - } - - public boolean hasMetaSolidifierRecipes() { - return (this.extraRecipes2 & 10) != 0; - } - - public Werkstoff.GenerationFeatures addMultipleMetalSolidifierRecipes() { - this.extraRecipes2 = (byte) (this.extraRecipes2 | 100); - return this; - } - - public boolean hasMultipleMetalSolidifierRecipes() { - return (this.extraRecipes2 & 100) != 0; - } - - public Werkstoff.GenerationFeatures addMixerRecipes() { - this.extraRecipes = (byte) (this.extraRecipes | 10); - return this; - } - - public Werkstoff.GenerationFeatures addMixerRecipes(short aCircuit) { - this.extraRecipes = (byte) (this.extraRecipes | 10); - if (aCircuit >= 1 && aCircuit <= 24) this.mixCircuit = aCircuit; - return this; - } - - public boolean hasMixerRecipes() { - return (this.extraRecipes & 10) != 0; - } - - public Werkstoff.GenerationFeatures addSifterRecipes() { - this.extraRecipes = (byte) (this.extraRecipes | 100); - return this; - } - - public boolean hasSifterRecipes() { - return (this.extraRecipes & 100) != 0; - } - - public Werkstoff.GenerationFeatures onlyDust() { - this.toGenerate = 0b1; - return this; - } - - /** - * Automatically adds Simple Metal Working Items - */ - public Werkstoff.GenerationFeatures addMetalItems() { - this.toGenerate = this.addSimpleMetalWorkingItems().toGenerate | 0b10; - return this; - } - - public Werkstoff.GenerationFeatures disable() { - this.toGenerate = 0; - return this; - } - - public Werkstoff.GenerationFeatures addCells() { - this.toGenerate = this.toGenerate | 0b10000; - return this; - } - - @Deprecated - public boolean hasCells() { - return (this.toGenerate & 0b10000) != 0; - } - - @Deprecated - public boolean hasMolten() { - return (this.toGenerate & 0b1000000) != 0; - } - - public Werkstoff.GenerationFeatures addMolten() { - this.toGenerate = this.toGenerate | 0b1000000; - return this; - } - - /** - * Automatically adds Simple Metal Working Items - */ - public Werkstoff.GenerationFeatures addGems() { - this.toGenerate = this.addSimpleMetalWorkingItems().toGenerate | 0x4; - return this; - } - - public Werkstoff.GenerationFeatures addSimpleMetalWorkingItems() { - this.toGenerate = this.toGenerate | 0b10000000; - return this; - } - - public Werkstoff.GenerationFeatures addCasings() { - this.toGenerate = this.toGenerate | 0x382; - return this; - } - - @Deprecated - public boolean hasSimpleMetalWorkingItems() { - return (this.toGenerate & 0b10000000) != 0; - } - - public Werkstoff.GenerationFeatures addCraftingMetalWorkingItems() { - this.toGenerate = this.toGenerate | 0x100; - return this; - } - - public Werkstoff.GenerationFeatures addMultipleIngotMetalWorkingItems() { - this.toGenerate = this.toGenerate | 0x200; - return this; - } - - public Werkstoff.GenerationFeatures addPrefix(OrePrefixes prefixes) { - this.toGenerate = this.toGenerate | getPrefixDataRaw(prefixes); - return this; - } - - public Werkstoff.GenerationFeatures removePrefix(OrePrefixes prefixes) { - this.toGenerate = this.toGenerate ^ getPrefixDataRaw(prefixes); - return this; - } - } - - public static class Stats { - - public static final int NULL_KELVIN = 0; - - int boilingPoint; - - public int getBoilingPoint() { - return this.boilingPoint; - } - - public Werkstoff.Stats setBoilingPoint(int boilingPoint) { - this.boilingPoint = boilingPoint; - return this; - } - - public long getMass() { - return this.mass; - } - - public long getProtons() { - return this.protons; - } - - public int getMeltingPoint() { - return this.meltingPoint; - } - - public Werkstoff.Stats setMeltingPoint(int meltingPoint) { - this.meltingPoint = meltingPoint; - return this; - } - - public double getEbfGasRecipeTimeMultiplier() { - return this.ebfGasRecipeTimeMultiplier; - } - - /** - * The generated EBF recipes using this gas will have their duration multiplied by this number. If set to a - * negative value, the default proton count-based logic is used. See also - * {@link gregtech.api.util.BlastFurnaceGasStat} - */ - public Werkstoff.Stats setEbfGasRecipeTimeMultiplier(double timeMultiplier) { - this.ebfGasRecipeTimeMultiplier = timeMultiplier; - return this; - } - - public double getEbfGasRecipeConsumedAmountMultiplier() { - return this.ebfGasRecipeConsumedAmountMultiplier; - } - - /** - * The generated EBF recipes using this gas will have the amount of gas consumed multiplied by this number. See - * also {@link gregtech.api.util.BlastFurnaceGasStat} - */ - public Werkstoff.Stats setEbfGasRecipeConsumedAmountMultiplier(double amountMultiplier) { - this.ebfGasRecipeConsumedAmountMultiplier = amountMultiplier; - return this; - } - - public int getDurOverride() { - return this.durOverride; - } - - public Werkstoff.Stats setDurOverride(int durOverride) { - this.durOverride = durOverride; - return this; - } - - public float getSpeedOverride() { - return this.speedOverride; - } - - public Werkstoff.Stats setSpeedOverride(float speedOverride) { - this.speedOverride = speedOverride; - return this; - } - - public byte getQualityOverride() { - return this.qualityOverride; - } - - public Werkstoff.Stats setQualityOverride(byte qualityOverride) { - this.qualityOverride = qualityOverride; - return this; - } - - private byte qualityOverride; - private int durOverride; - private float speedOverride; - private int meltingPoint; - private int meltingVoltage; - private long protons; - private long neutrons; - private long electrons; - private long mass; - private double ebfGasRecipeTimeMultiplier = -1.0; - private double ebfGasRecipeConsumedAmountMultiplier = 1.0; - - float durMod = 1f; - - public float getDurMod() { - return this.durMod; - } - - public void setDurMod(float durMod) { - this.durMod = durMod; - } - - private Pair[] mTC_Aspects; - // logic gate shit - byte quality = ~0b1111111; - - public Werkstoff.Stats setmTC_AspectsArray(Pair[] mTC_Aspects) { - this.mTC_Aspects = mTC_Aspects; - return this; - } - - @SafeVarargs - public final Werkstoff.Stats setmTC_AspectsVarArg(Pair... mTC_Aspects) { - this.mTC_Aspects = mTC_Aspects; - return this; - } - - Pair[] getmTC_Aspects() { - return this.mTC_Aspects; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Werkstoff.Stats that)) return false; - - if (this.boilingPoint != that.boilingPoint || this.meltingPoint != that.meltingPoint - || this.mass != that.mass - || this.protons != that.protons) return false; - if (this.neutrons != that.neutrons) return false; - if (this.electrons != that.electrons) return false; - if (Math.abs(this.ebfGasRecipeTimeMultiplier - that.ebfGasRecipeTimeMultiplier) > 1.0e-6D) return false; - if (Math.abs(this.ebfGasRecipeConsumedAmountMultiplier - that.ebfGasRecipeConsumedAmountMultiplier) - > 1.0e-6D) return false; - return this.quality == that.quality; - } - - @Override - public int hashCode() { - return MurmurHash3.murmurhash3_x86_32( - ByteBuffer.allocate(49) - .put(this.quality) - .putInt(this.boilingPoint) - .putInt(this.meltingPoint) - .putLong(this.protons) - .putLong(this.neutrons) - .putLong(this.electrons) - .putLong(this.mass) - .putDouble(this.ebfGasRecipeTimeMultiplier) - .putDouble(this.ebfGasRecipeConsumedAmountMultiplier) - .array(), - 0, - 49, - 31); - } - - public Werkstoff.Stats setMass(long mass) { - this.mass = mass; - return this; - } - - public Werkstoff.Stats setProtons(long protons) { - this.protons = protons; - return this; - } - - public boolean isSublimation() { - return (this.quality & 0b1) != 0; - } - - public Werkstoff.Stats setSublimation(boolean sublimation) { - if (sublimation) this.quality = (byte) (this.quality | 0b000001); - else this.quality = (byte) (this.quality & 0b1111110); - return this; - } - - public boolean isToxic() { - return (this.quality & 0b10) != 0; - } - - public Werkstoff.Stats setToxic(boolean toxic) { - if (toxic) this.quality = (byte) (this.quality | 0b000010); - else this.quality = (byte) (this.quality & 0b1111101); - return this; - } - - byte enchantmentlvl = 3; - - public byte getEnchantmentlvl() { - return this.enchantmentlvl; - } - - public Werkstoff.Stats setEnchantmentlvl(byte enchantmentlvl) { - this.enchantmentlvl = enchantmentlvl; - return this; - } - - public boolean isRadioactive() { - return (this.quality & 0b100) != 0; - } - - public Werkstoff.Stats setRadioactive(boolean radioactive) { - if (radioactive) this.quality = (byte) (this.quality | 0b000100); - else this.quality = (byte) (this.quality & 0b1111011); - return this; - } - - public boolean isBlastFurnace() { - return (this.quality & 0b1000) != 0; - } - - public Werkstoff.Stats setBlastFurnace(boolean blastFurnace) { - if (blastFurnace) this.quality = (byte) (this.quality | 0b001000); - else this.quality = (byte) (this.quality & 0b1110111); - return this; - } - - public Werkstoff.Stats setMeltingVoltage(int meltingVoltage) { - this.meltingVoltage = meltingVoltage; - return this; - } - - public int getMeltingVoltage() { - return this.meltingVoltage; - } - - public boolean isElektrolysis() { - return (this.quality & 0x10) != 0; - } - - public Werkstoff.Stats setElektrolysis(boolean elektrolysis) { - if (elektrolysis) this.quality = (byte) (this.quality | 0x10); - else this.quality = (byte) (this.quality & 0b1101111); - return this; - } - - public boolean isCentrifuge() { - return (this.quality & 0x20) != 0; - } - - public Werkstoff.Stats setCentrifuge(boolean centrifuge) { - if (centrifuge) this.quality = (byte) (this.quality | 0x20); - else this.quality = (byte) (this.quality & 0b1011111); - return this; - } - - public boolean isGas() { - return (this.quality & 0x40) != 0; - } - - public FluidState getFluidState() { - if ((this.quality & 0x40) != 0) { - return FluidState.GAS; - } - return FluidState.LIQUID; - } - - public Werkstoff.Stats setGas(boolean gas) { - if (gas) this.quality = (byte) (this.quality | 0x40); - else this.quality = (byte) (this.quality & 0b0111111); - return this; - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/WerkstoffLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/WerkstoffLoader.java deleted file mode 100644 index 2c032e0051..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/WerkstoffLoader.java +++ /dev/null @@ -1,2101 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material; - -import static com.github.bartimaeusnek.bartworks.util.BW_Util.subscriptNumbers; -import static com.github.bartimaeusnek.bartworks.util.BW_Util.superscriptNumbers; -import static gregtech.api.enums.Mods.BetterLoadingScreen; -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.enums.OrePrefixes.block; -import static gregtech.api.enums.OrePrefixes.bolt; -import static gregtech.api.enums.OrePrefixes.bottle; -import static gregtech.api.enums.OrePrefixes.capsule; -import static gregtech.api.enums.OrePrefixes.cell; -import static gregtech.api.enums.OrePrefixes.cellPlasma; -import static gregtech.api.enums.OrePrefixes.crushed; -import static gregtech.api.enums.OrePrefixes.crushedCentrifuged; -import static gregtech.api.enums.OrePrefixes.crushedPurified; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.dustImpure; -import static gregtech.api.enums.OrePrefixes.dustPure; -import static gregtech.api.enums.OrePrefixes.dustSmall; -import static gregtech.api.enums.OrePrefixes.dustTiny; -import static gregtech.api.enums.OrePrefixes.foil; -import static gregtech.api.enums.OrePrefixes.gearGt; -import static gregtech.api.enums.OrePrefixes.gearGtSmall; -import static gregtech.api.enums.OrePrefixes.gem; -import static gregtech.api.enums.OrePrefixes.gemChipped; -import static gregtech.api.enums.OrePrefixes.gemExquisite; -import static gregtech.api.enums.OrePrefixes.gemFlawed; -import static gregtech.api.enums.OrePrefixes.gemFlawless; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.ingotDouble; -import static gregtech.api.enums.OrePrefixes.ingotHot; -import static gregtech.api.enums.OrePrefixes.ingotQuadruple; -import static gregtech.api.enums.OrePrefixes.ingotQuintuple; -import static gregtech.api.enums.OrePrefixes.ingotTriple; -import static gregtech.api.enums.OrePrefixes.lens; -import static gregtech.api.enums.OrePrefixes.nugget; -import static gregtech.api.enums.OrePrefixes.ore; -import static gregtech.api.enums.OrePrefixes.oreSmall; -import static gregtech.api.enums.OrePrefixes.plate; -import static gregtech.api.enums.OrePrefixes.plateDense; -import static gregtech.api.enums.OrePrefixes.plateDouble; -import static gregtech.api.enums.OrePrefixes.plateQuadruple; -import static gregtech.api.enums.OrePrefixes.plateQuintuple; -import static gregtech.api.enums.OrePrefixes.plateTriple; -import static gregtech.api.enums.OrePrefixes.rawOre; -import static gregtech.api.enums.OrePrefixes.ring; -import static gregtech.api.enums.OrePrefixes.rotor; -import static gregtech.api.enums.OrePrefixes.screw; -import static gregtech.api.enums.OrePrefixes.spring; -import static gregtech.api.enums.OrePrefixes.springSmall; -import static gregtech.api.enums.OrePrefixes.stick; -import static gregtech.api.enums.OrePrefixes.stickLong; -import static gregtech.api.enums.OrePrefixes.toolHeadHammer; -import static gregtech.api.enums.OrePrefixes.toolHeadSaw; -import static gregtech.api.enums.OrePrefixes.toolHeadWrench; -import static gregtech.api.enums.OrePrefixes.turbineBlade; -import static gregtech.api.enums.OrePrefixes.values; -import static gregtech.api.enums.OrePrefixes.wireFine; -import static gregtech.api.util.GT_RecipeBuilder.WILDCARD; - -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.oredict.OreDictionary; - -import org.apache.logging.log4j.Level; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.API.WerkstoffAdderRegistry; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.client.renderer.BW_Renderer_Block_Ores; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.system.material.CircuitGeneration.BW_CircuitsLoader; -import com.github.bartimaeusnek.bartworks.system.material.GT_Enhancement.GTMetaItemEnhancer; -import com.github.bartimaeusnek.bartworks.system.material.processingLoaders.AdditionalRecipes; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.AspectLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.BlockLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.CasingLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.CellLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.CraftingMaterialLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.CrushedLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.DustLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.GemLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.MetalLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.MoltenCellLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.MultipleMetalLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.OreLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.RawOreLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.SimpleMetalLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe.ToolLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.registration.AssociationLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.registration.BridgeMaterialsLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.registration.CasingRegistrator; -import com.github.bartimaeusnek.bartworks.system.oredict.OreDictHandler; -import com.github.bartimaeusnek.bartworks.util.BW_ColorUtil; -import com.github.bartimaeusnek.bartworks.util.EnumUtils; -import com.github.bartimaeusnek.bartworks.util.Pair; -import com.github.bartimaeusnek.bartworks.util.log.DebugLog; -import com.github.bartimaeusnek.crossmod.cls.CLSCompat; -import com.google.common.collect.HashBiMap; - -import codechicken.nei.api.API; -import cpw.mods.fml.common.ProgressManager; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.Element; -import gregtech.api.enums.FluidState; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TextureSet; -import gregtech.api.fluid.GT_FluidFactory; -import gregtech.api.interfaces.ISubTagContainer; -import gregtech.api.util.GT_OreDictUnificator; -import ic2.api.recipe.IRecipeInput; -import ic2.api.recipe.RecipeInputOreDict; -import ic2.api.recipe.RecipeOutput; -import ic2.api.recipe.Recipes; - -@SuppressWarnings("deprecation") -public class WerkstoffLoader { - - private WerkstoffLoader() {} - - public static final SubTag NOBLE_GAS = SubTag.getNewSubTag("NobleGas"); - public static final SubTag ANAEROBE_GAS = SubTag.getNewSubTag("AnaerobeGas"); - public static final SubTag ANAEROBE_SMELTING = SubTag.getNewSubTag("AnaerobeSmelting"); - public static final SubTag NOBLE_GAS_SMELTING = SubTag.getNewSubTag("NobleGasSmelting"); - public static final SubTag NO_BLAST = SubTag.getNewSubTag("NoBlast"); - public static ItemList rotorMold; - public static ItemList rotorShape; - public static ItemList smallGearShape; - public static ItemList ringMold; - public static ItemList boltMold; - - public static void setUp() { - - OrePrefixes.cellMolten.mMaterialGenerationBits = 0b1000000; - OrePrefixes.capsuleMolten.mMaterialGenerationBits = 0b1000000; - - try { - WerkstoffLoader.rotorMold = Enum.valueOf(ItemList.class, "Shape_Mold_Rotor"); - WerkstoffLoader.rotorShape = Enum.valueOf(ItemList.class, "Shape_Extruder_Rotor"); - WerkstoffLoader.smallGearShape = Enum.valueOf(ItemList.class, "Shape_Extruder_Small_Gear"); - WerkstoffLoader.ringMold = Enum.valueOf(ItemList.class, "Shape_Mold_Ring"); - WerkstoffLoader.boltMold = Enum.valueOf(ItemList.class, "Shape_Mold_Bolt"); - } catch (NullPointerException | IllegalArgumentException ignored) {} - - // add tiberium - EnumUtils.createNewElement("Tr", 123L, 203L, 0L, -1L, null, "Tiberium", false); - - bottle.mDefaultStackSize = 1; - Werkstoff.GenerationFeatures.initPrefixLogic(); - BW_GT_MaterialReference.init(); - } - - // TODO: - // FREE ID RANGE: 12_000-28_998 - // bartimaeusnek reserved 0-10_000 - // GlodBlock reserved range 10_001-10_999 - // Elisis reserved range 11_000-11_499 - // glowredman reserved range 11_500-11_999 - // bot reserved range 29_899-29_999 - // Tec & basdxz reserved range 30_000-31_000 - // GT Material range reserved on 31_767-32_767 - public static final Werkstoff Bismutite = new Werkstoff( - new short[] { 255, 233, 0, 0 }, - "Bismutite", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems(), - 1, - TextureSet.SET_FLINT, - Collections.singletonList(Materials.Bismuth), - new Pair<>(Materials.Bismuth, 2), - new Pair<>(Materials.Oxygen, 2), - new Pair<>(Materials.CarbonDioxide, 2)); - public static final Werkstoff Bismuthinit = new Werkstoff( - new short[] { 192, 192, 192, 0 }, - "Bismuthinite", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 2, - TextureSet.SET_METALLIC, - Arrays.asList(Materials.Bismuth, Materials.Sulfur), - new Pair<>(Materials.Bismuth, 2), - new Pair<>(Materials.Sulfur, 3)); - public static final Werkstoff Zirconium = new Werkstoff( - new short[] { 175, 175, 175, 0 }, - "Zirconium", - "Zr", - new Werkstoff.Stats().setProtons(40) - .setBlastFurnace(true) - .setMeltingPoint(2130) - .setMeltingVoltage(480), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMetalItems() - .enforceUnification(), - 3, - TextureSet.SET_METALLIC - // No Byproducts - ); - public static final Werkstoff CubicZirconia = new Werkstoff( - new short[] { 255, 255, 255, 0 }, - "Cubic Zirconia", - Werkstoff.Types.COMPOUND, - 3273, - new Werkstoff.GenerationFeatures().onlyDust() - .addGems() - .enforceUnification(), - 4, - TextureSet.SET_DIAMOND, - Collections.singletonList(WerkstoffLoader.Zirconium), - new Pair<>(WerkstoffLoader.Zirconium, 1), - new Pair<>(Materials.Oxygen, 2)); - public static final Werkstoff FluorBuergerit = new Werkstoff( - new short[] { 0x20, 0x20, 0x20, 0 }, - "Fluor-Buergerite", - subscriptNumbers("NaFe3Al6(Si6O18)(BO3)3O3F"), - new Werkstoff.Stats().setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems(), - 5, - TextureSet.SET_RUBY, - Arrays.asList(Materials.Sodium, Materials.Boron, Materials.SiliconDioxide), - new Pair<>(Materials.Sodium, 1), - new Pair<>(Materials.Iron, 3), - new Pair<>(Materials.Aluminium, 6), - new Pair<>(Materials.Silicon, 6), - new Pair<>(Materials.Boron, 3), - new Pair<>(Materials.Oxygen, 30), - new Pair<>(Materials.Fluorine, 1)); - public static final Werkstoff YttriumOxide = new Werkstoff( - new short[] { 255, 255, 255, 0 }, - "Yttrium Oxide", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().onlyDust() - .enforceUnification(), // No autoadd here to gate this material - // by hand - 6, - TextureSet.SET_DULL, - new Pair<>(Materials.Yttrium, 2), - new Pair<>(Materials.Oxygen, 3)); - public static final Werkstoff ChromoAluminoPovondrait = new Werkstoff( - new short[] { 0, 0x79, 0x6A, 0 }, - "Chromo-Alumino-Povondraite", - subscriptNumbers("NaCr3(Al4Mg2)(Si6O18)(BO3)3(OH)3O"), - Werkstoff.Types.getDefaultStatForType(Werkstoff.Types.COMPOUND) - .setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems(), - 7, - TextureSet.SET_RUBY, - Arrays.asList(Materials.Sodium, Materials.Boron, Materials.SiliconDioxide), - new Pair<>(Materials.Sodium, 1), - new Pair<>(Materials.Chrome, 3), - new Pair<>(Materials.Magnalium, 6), - new Pair<>(Materials.Silicon, 6), - new Pair<>(Materials.Boron, 3), - new Pair<>(Materials.Oxygen, 31), - new Pair<>(Materials.Hydrogen, 3)); - public static final Werkstoff VanadioOxyDravit = new Werkstoff( - new short[] { 0x60, 0xA0, 0xA0, 0 }, - "Vanadio-Oxy-Dravite", - subscriptNumbers("NaV3(Al4Mg2)(Si6O18)(BO3)3(OH)3O"), - Werkstoff.Types.getDefaultStatForType(Werkstoff.Types.COMPOUND) - .setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems(), - 8, - TextureSet.SET_RUBY, - Arrays.asList(Materials.Sodium, Materials.Boron, Materials.SiliconDioxide), - new Pair<>(Materials.Sodium, 1), - new Pair<>(Materials.Vanadium, 3), - new Pair<>(Materials.Magnalium, 6), - new Pair<>(Materials.Silicon, 6), - new Pair<>(Materials.Boron, 3), - new Pair<>(Materials.Oxygen, 31), - new Pair<>(Materials.Hydrogen, 3)); - public static final Werkstoff Olenit = new Werkstoff( - new short[] { 210, 210, 210, 0 }, - "Olenite", - subscriptNumbers("NaAl3Al6(Si6O18)(BO3)3O3OH"), - Werkstoff.Types.getDefaultStatForType(Werkstoff.Types.COMPOUND) - .setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems(), - 9, - TextureSet.SET_RUBY, - Arrays.asList(Materials.Sodium, Materials.Boron, Materials.SiliconDioxide), - new Pair<>(Materials.Sodium, 1), - new Pair<>(Materials.Aluminium, 9), - new Pair<>(Materials.Silicon, 6), - new Pair<>(Materials.Boron, 3), - new Pair<>(Materials.Oxygen, 31), - new Pair<>(Materials.Hydrogen, 1)); - public static final Werkstoff Arsenopyrite = new Werkstoff( - new short[] { 0xB0, 0xB0, 0xB0, 0 }, - "Arsenopyrite", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 10, - TextureSet.SET_METALLIC, - Arrays.asList(Materials.Sulfur, Materials.Arsenic, Materials.Iron), - new Pair<>(Materials.Iron, 1), - new Pair<>(Materials.Arsenic, 1), - new Pair<>(Materials.Sulfur, 1)); - public static final Werkstoff Ferberite = new Werkstoff( - new short[] { 0xB0, 0xB0, 0xB0, 0 }, - "Ferberite", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 11, - TextureSet.SET_METALLIC, - Arrays.asList(Materials.Iron, Materials.Tungsten), - new Pair<>(Materials.Iron, 1), - new Pair<>(Materials.Tungsten, 1), - new Pair<>(Materials.Oxygen, 3)); - public static final Werkstoff Loellingit = new Werkstoff( - new short[] { 0xD0, 0xD0, 0xD0, 0 }, - "Loellingite", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 12, - TextureSet.SET_METALLIC, - Arrays.asList(Materials.Iron, Materials.Arsenic), - new Pair<>(Materials.Iron, 1), - new Pair<>(Materials.Arsenic, 2)); - public static final Werkstoff Roquesit = new Werkstoff( - new short[] { 0xA0, 0xA0, 0xA0, 0 }, - "Roquesite", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 13, - TextureSet.SET_METALLIC, - Arrays.asList(Materials.Copper, Materials.Sulfur), - new Pair<>(Materials.Copper, 1), - new Pair<>(Materials.Indium, 1), - new Pair<>(Materials.Sulfur, 2)); - public static final Werkstoff Bornite = new Werkstoff( - new short[] { 0x97, 0x66, 0x2B, 0 }, - "Bornite", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 14, - TextureSet.SET_METALLIC, - Arrays.asList(Materials.Copper, Materials.Iron, Materials.Sulfur), - new Pair<>(Materials.Copper, 5), - new Pair<>(Materials.Iron, 1), - new Pair<>(Materials.Sulfur, 4)); - public static final Werkstoff Wittichenit = new Werkstoff( - Materials.Copper.mRGBa, - "Wittichenite", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 15, - TextureSet.SET_METALLIC, - Arrays.asList(Materials.Copper, Materials.Bismuth, Materials.Sulfur), - new Pair<>(Materials.Copper, 5), - new Pair<>(Materials.Bismuth, 1), - new Pair<>(Materials.Sulfur, 4)); - public static final Werkstoff Djurleit = new Werkstoff( - new short[] { 0x60, 0x60, 0x60, 0 }, - "Djurleite", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 16, - TextureSet.SET_METALLIC, - Arrays.asList(Materials.Copper, Materials.Copper, Materials.Sulfur), - new Pair<>(Materials.Copper, 31), - new Pair<>(Materials.Sulfur, 16)); - public static final Werkstoff Huebnerit = new Werkstoff( - new short[] { 0x80, 0x60, 0x60, 0 }, - "Huebnerite", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 17, - TextureSet.SET_METALLIC, - Arrays.asList(Materials.Manganese, Materials.Tungsten), - new Pair<>(Materials.Manganese, 1), - new Pair<>(Materials.Tungsten, 1), - new Pair<>(Materials.Oxygen, 3)); - public static final Werkstoff Thorianit = new Werkstoff( - new short[] { 0x30, 0x30, 0x30, 0 }, - "Thorianite", - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 18, - TextureSet.SET_METALLIC, - Collections.singletonList(Materials.Thorium), - new Pair<>(Materials.Thorium, 1), - new Pair<>(Materials.Oxygen, 2)); - public static final Werkstoff RedZircon = new Werkstoff( - new short[] { 195, 19, 19, 0 }, - "Red Zircon", - new Werkstoff.Stats().setElektrolysis(false) - .setMeltingPoint(2130), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems(), - 19, - TextureSet.SET_GEM_VERTICAL, - Arrays.asList(WerkstoffLoader.Zirconium, Materials.SiliconDioxide), - new Pair<>(WerkstoffLoader.Zirconium, 1), - new Pair<>(Materials.Silicon, 1), - new Pair<>(Materials.Oxygen, 4)); - - // GT Enhancements - public static final Werkstoff Salt = new Werkstoff( - Materials.Salt.mRGBa, - "Salt", - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addGems() - .addSifterRecipes(), - 20, - TextureSet.SET_FLINT, - Arrays.asList(Materials.RockSalt, Materials.Borax), - new Pair<>(Materials.Salt, 1)); - public static final Werkstoff Spodumen = new Werkstoff( - Materials.Spodumene.mRGBa, - "Spodumene", - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addGems() - .addSifterRecipes(), - 21, - TextureSet.SET_FLINT, - Collections.singletonList(Materials.Spodumene), - new Pair<>(Materials.Spodumene, 1)); - public static final Werkstoff RockSalt = new Werkstoff( - Materials.RockSalt.mRGBa, - "Rock Salt", - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addGems() - .addSifterRecipes(), - 22, - TextureSet.SET_FLINT, - Arrays.asList(Materials.RockSalt, Materials.Borax), - new Pair<>(Materials.RockSalt, 1)); - - // More NonGT Stuff - public static final Werkstoff Fayalit = new Werkstoff( - new short[] { 50, 50, 50, 0 }, - "Fayalite", - new Werkstoff.Stats().setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems(), - 23, - TextureSet.SET_QUARTZ, - Arrays.asList(Materials.Iron, Materials.SiliconDioxide), - new Pair<>(Materials.Iron, 2), - new Pair<>(Materials.Silicon, 1), - new Pair<>(Materials.Oxygen, 4)); - public static final Werkstoff Forsterit = new Werkstoff( - new short[] { 255, 255, 255, 0 }, - "Forsterite", - new Werkstoff.Stats().setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems(), - 24, - TextureSet.SET_QUARTZ, - Arrays.asList(Materials.Magnesium, Materials.SiliconDioxide), - new Pair<>(Materials.Magnesium, 2), - new Pair<>(Materials.Silicon, 1), - new Pair<>(Materials.Oxygen, 4)); - public static final Werkstoff Hedenbergit = new Werkstoff( - new short[] { 100, 150, 100, 0 }, - "Hedenbergite", - new Werkstoff.Stats().setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems(), - 25, - TextureSet.SET_QUARTZ, - Arrays.asList(Materials.Iron, Materials.Calcium, Materials.SiliconDioxide), - new Pair<>(Materials.Calcium, 1), - new Pair<>(Materials.Iron, 1), - new Pair<>(Materials.Silicon, 2), - new Pair<>(Materials.Oxygen, 6)); - public static final Werkstoff DescloiziteZNVO4 = new Werkstoff( - new short[] { 0xBF, 0x18, 0x0F, 0 }, - "Red Descloizite", // Pb(Zn,Cu)[OH|VO4 - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 26, - TextureSet.SET_QUARTZ, - Arrays.asList(Materials.Lead, Materials.Copper, Materials.Vanadium), - new Pair<>(Materials.Lead, 1), - new Pair<>(Materials.Zinc, 1), - new Pair<>(Materials.Vanadium, 1), - new Pair<>(Materials.Oxygen, 4)); - public static final Werkstoff DescloiziteCUVO4 = new Werkstoff( - new short[] { 0xf9, 0x6d, 0x18, 0 }, - "Orange Descloizite", // Pb(Zn,Cu)[OH|VO4 - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 27, - TextureSet.SET_QUARTZ, - Arrays.asList(Materials.Lead, Materials.Zinc, Materials.Vanadium), - new Pair<>(Materials.Lead, 1), - new Pair<>(Materials.Copper, 1), - new Pair<>(Materials.Vanadium, 1), - new Pair<>(Materials.Oxygen, 4)); - public static final Werkstoff FuchsitAL = new Werkstoff( - new short[] { 0x4D, 0x7F, 0x64, 0 }, - "Green Fuchsite", - subscriptNumbers("KAl3Si3O10(OH)2"), - new Werkstoff.Stats().setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 28, - TextureSet.SET_METALLIC, - Arrays.asList(Materials.Potassium, Materials.Aluminiumoxide, Materials.SiliconDioxide), - new Pair<>(Materials.Potassium, 1), - new Pair<>(Materials.Aluminium, 3), - new Pair<>(Materials.Silicon, 3), - new Pair<>(Materials.Oxygen, 12), - new Pair<>(Materials.Hydrogen, 2)); - - public static final Werkstoff FuchsitCR = new Werkstoff( - new short[] { 128, 0, 0, 0 }, - "Red Fuchsite", - subscriptNumbers("KCr3Si3O10(OH)2"), - new Werkstoff.Stats().setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 29, - TextureSet.SET_METALLIC, - Arrays.asList(Materials.Potassium, Materials.Chrome, Materials.SiliconDioxide), - new Pair<>(Materials.Potassium, 1), - new Pair<>(Materials.Chrome, 3), - new Pair<>(Materials.Silicon, 3), - new Pair<>(Materials.Oxygen, 12), - new Pair<>(Materials.Hydrogen, 2)); - - public static final Werkstoff Thorium232 = new Werkstoff( - new short[] { 0, 64, 0, 0 }, - "Thorium 232", - superscriptNumbers("Th232"), - new Werkstoff.Stats().setRadioactive(true) - .setBlastFurnace(true) - .setMass(232) - .setProtons(Element.Th.mProtons), - Werkstoff.Types.ISOTOPE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMetalItems() - .enforceUnification(), - 30, - TextureSet.SET_METALLIC - // No Byproducts - ); - public static final Werkstoff BismuthTellurite = new Werkstoff( - new short[] { 32, 72, 32, 0 }, - // Telluride is correct, tellurite is not. - // Only the display name gets renamed to avoid problems in other mods - "Bismuth Telluride", - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addChemicalRecipes(), - 31, - TextureSet.SET_METALLIC, - // No Byproducts - new Pair<>(Materials.Bismuth, 2), - new Pair<>(Materials.Tellurium, 3)); - public static final Werkstoff Tellurium = new Werkstoff( - new short[] { 0xff, 0xff, 0xff, 0 }, - "Tellurium", - new Werkstoff.Stats(), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().addMetalItems() - .removePrefix(ore), - 32, - TextureSet.SET_METALLIC, - // No Byproducts - new Pair<>(Materials.Tellurium, 1)); - public static final Werkstoff BismuthHydroBorat = new Werkstoff( - new short[] { 72, 144, 72, 0 }, - "Dibismuthhydroborat", - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addChemicalRecipes(), - 33, - TextureSet.SET_METALLIC, - // No Byproducts - new Pair<>(Materials.Bismuth, 2), - new Pair<>(Materials.Boron, 1), - new Pair<>(Materials.Hydrogen, 1)); - public static final Werkstoff ArInGaPhoBiBoTe = new Werkstoff( - new short[] { 36, 36, 36, 0 }, - "Circuit Compound MK3", - new Werkstoff.Stats().setCentrifuge(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMixerRecipes(), - 34, - TextureSet.SET_METALLIC, - // No Byproducts - new Pair<>(Materials.IndiumGalliumPhosphide, 1), - new Pair<>(WerkstoffLoader.BismuthHydroBorat, 3), - new Pair<>(WerkstoffLoader.BismuthTellurite, 2)); - - public static final Werkstoff Prasiolite = new Werkstoff( - new short[] { 0xD0, 0xDD, 0x95, 0 }, - "Prasiolite", - new Werkstoff.Stats().setElektrolysis(false) - .setMeltingPoint(1923), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems(), - 35, - TextureSet.SET_QUARTZ, - // No Byproducts - new Pair<>(Materials.Silicon, 5), - new Pair<>(Materials.Oxygen, 10), - new Pair<>(Materials.Iron, 1)); - - public static final Werkstoff MagnetoResonaticDust = new Werkstoff( - new short[] { 0xDD, 0x77, 0xDD, 0 }, - "Magneto Resonatic", - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().onlyDust() - .addMixerRecipes() - .addGems(), - 36, - TextureSet.SET_MAGNETIC, - // No Byproducts - new Pair<>(WerkstoffLoader.Prasiolite, 3), - new Pair<>(WerkstoffLoader.BismuthTellurite, 4), - new Pair<>(WerkstoffLoader.CubicZirconia, 1), - new Pair<>(Materials.SteelMagnetic, 1)); - public static final Werkstoff Xenon = new Werkstoff( - new short[] { 0x14, 0x39, 0x7F, 0 }, - "Xenon", - "Xe", - new Werkstoff.Stats().setProtons(54) - .setMass(131) - .setGas(true) - .setEbfGasRecipeTimeMultiplier(0.4d) - .setEbfGasRecipeConsumedAmountMultiplier(0.25d), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .addCells() - .enforceUnification(), - 37, - TextureSet.SET_FLUID - // No Byproducts - // No Ingredients - ); - public static final Werkstoff Oganesson = new Werkstoff( - new short[] { 0x14, 0x39, 0x7F, 0 }, - "Oganesson", - "Og", - new Werkstoff.Stats().setProtons(118) - .setMass(294) - .setGas(true) - .setEbfGasRecipeTimeMultiplier(0.3d) - .setEbfGasRecipeConsumedAmountMultiplier(0.1d), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 38, - TextureSet.SET_FLUID - // No Byproducts - // No Ingredients - ); - public static final Werkstoff Californium = new Werkstoff( - new short[] { 0xAA, 0xAA, 0xAA, 0 }, - "Californium", - "Cf", - new Werkstoff.Stats().setProtons(98) - .setMass(251) - .setBlastFurnace(true) - .setMeltingPoint(900), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMetalItems() - .addMolten() - .enforceUnification(), - 39, - TextureSet.SET_METALLIC - // No Byproducts - // No Ingredients - ); - public static final Werkstoff Calcium = new Werkstoff( - Materials.Calcium.mRGBa, - "Calcium", - "Ca", - new Werkstoff.Stats().setProtons(Element.Ca.mProtons) - .setMass(Element.Ca.getMass()) - .setBlastFurnace(true) - .setMeltingPoint(1115) - .setBoilingPoint(1757), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMetalItems() - .addMolten(), - 40, - Materials.Calcium.mIconSet, - // No Byproducts - new Pair<>(Materials.Calcium, 1)); - public static final Werkstoff Neon = new Werkstoff( - new short[] { 0xff, 0x07, 0x3a }, - "Neon", - "Ne", - new Werkstoff.Stats().setProtons(Element.Ne.mProtons) - .setMass(Element.Ne.getMass()) - .setGas(true) - .setEbfGasRecipeTimeMultiplier(0.6d) - .setEbfGasRecipeConsumedAmountMultiplier(0.55d), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .addCells() - .enforceUnification(), - 41, - TextureSet.SET_FLUID - // No Byproducts - // No Ingredients - ); - public static final Werkstoff Krypton = new Werkstoff( - new short[] { 0xb1, 0xff, 0x32 }, - "Krypton", - "Kr", - new Werkstoff.Stats().setProtons(Element.Kr.mProtons) - .setMass(Element.Kr.getMass()) - .setGas(true) - .setEbfGasRecipeTimeMultiplier(0.5d) - .setEbfGasRecipeConsumedAmountMultiplier(0.4d), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .addCells() - .enforceUnification(), - 42, - TextureSet.SET_FLUID - // No Byproducts - // No Ingredients - ); - public static final Werkstoff BArTiMaEuSNeK = new Werkstoff( - new short[] { 0x00, 0xff, 0x00 }, - "BArTiMaEuSNeK", - "Are you serious?", - new Werkstoff.Stats().setMeltingPoint(9001) - .setCentrifuge(true) - .setBlastFurnace(true) - .setMeltingVoltage(1920), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems() - .addMetalItems() - .addMolten(), - 43, - TextureSet.SET_DIAMOND, - Arrays.asList(Materials.Boron, Materials.Titanium, Materials.Europium), - new Pair<>(Materials.Boron, 1), - new Pair<>(Materials.Argon, 1), - new Pair<>(Materials.Titanium, 1), - new Pair<>(Materials.Magic, 1), - new Pair<>(Materials.Europium, 1), - new Pair<>(Materials.Sulfur, 1), - new Pair<>(WerkstoffLoader.Neon, 1), - new Pair<>(Materials.Potassium, 1)); - public static final Werkstoff PTConcentrate = new Werkstoff( - Materials.Platinum.getRGBA(), - "Platinum Concentrate", - "", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 44, - TextureSet.SET_FLUID - // No Byproducts - // No Ingredients - ); - public static final Werkstoff PTSaltCrude = new Werkstoff( - Materials.Platinum.getRGBA(), - "Platinum Salt", - "", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 45, - TextureSet.SET_DULL - // No Byproducts - // No Ingredients - ); - public static final Werkstoff PTSaltRefined = new Werkstoff( - Materials.Platinum.getRGBA(), - "Refined Platinum Salt", - "", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 46, - TextureSet.SET_METALLIC - // No Byproducts - // No Ingredients - ); - public static final Werkstoff PTMetallicPowder = new Werkstoff( - Materials.Platinum.getRGBA(), - "Platinum Metallic Powder", - "??PtPdIrOsRhRu??", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures(), - 47, - TextureSet.SET_METALLIC, - // No Byproducts - new Pair<>(Materials.Platinum, 1), - new Pair<>(Materials.Stone, 2)); - public static final Werkstoff AquaRegia = new Werkstoff( - new short[] { 0xff, 0xb1, 0x32 }, - "Aqua Regia", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 48, - TextureSet.SET_FLUID, - // No Byproducts - new Pair<>(Materials.DilutedSulfuricAcid, 1), - new Pair<>(Materials.NitricAcid, 1)); - public static final Werkstoff PTResidue = new Werkstoff( - new short[] { 0x64, 0x63, 0x2E }, - "Platinum Residue", - "??IrOsRhRu??", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 49, - TextureSet.SET_ROUGH - // No Byproducts - ); - public static final Werkstoff AmmoniumChloride = new Werkstoff( - new short[] { 0xff, 0xff, 0xff }, - "Ammonium Chloride", - subscriptNumbers("NH4Cl"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 50, - TextureSet.SET_FLUID, - // No Byproducts - new Pair<>(Materials.Ammonium, 1), - new Pair<>(Materials.HydrochloricAcid, 1)); - public static final Werkstoff PTRawPowder = new Werkstoff( - Materials.Platinum.getRGBA(), - "Reprecipitated Platinum", - "PtCl", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 51, - TextureSet.SET_METALLIC - // No Byproducts - ); - public static final Werkstoff PDAmmonia = new Werkstoff( - Materials.Palladium.getRGBA(), - "Palladium Enriched Ammonia", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 52, - TextureSet.SET_FLUID, - // No Byproducts - new Pair<>(Materials.Ammonium, 1), - new Pair<>(Materials.Palladium, 1)); - public static final Werkstoff PDMetallicPowder = new Werkstoff( - Materials.Palladium.getRGBA(), - "Palladium Metallic Powder", - "??Pd??", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures(), - 53, - TextureSet.SET_METALLIC, - // No Byproducts - new Pair<>(Materials.Palladium, 1), - new Pair<>(Materials.Stone, 2)); - public static final Werkstoff PDRawPowder = new Werkstoff( - Materials.Palladium.getRGBA(), - "Reprecipitated Palladium", - subscriptNumbers("Pd2NH4"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 54, - TextureSet.SET_METALLIC - // No Byproducts - // No Ingredients - ); - public static final Werkstoff PDSalt = new Werkstoff( - Materials.Palladium.getRGBA(), - "Palladium Salt", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 55, - TextureSet.SET_METALLIC - // No Byproducts - // No Ingredients - ); - public static final Werkstoff Sodiumformate = new Werkstoff( - new short[] { 0xff, 0xaa, 0xaa }, - "Sodium Formate", - "HCOONa", - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 56, - TextureSet.SET_FLUID, - // No Byproducts - new Pair<>(Materials.SodiumHydroxide, 1), - new Pair<>(Materials.CarbonMonoxide, 1)); - public static final Werkstoff Sodiumsulfate = new Werkstoff( - new short[] { 0xff, 0xff, 0xff }, - "Sodium Sulfate", - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 57, - TextureSet.SET_FLUID, - // No Byproducts - new Pair<>(Materials.Sodium, 2), - new Pair<>(Materials.Sulfur, 1), - new Pair<>(Materials.Oxygen, 4)); - public static final Werkstoff FormicAcid = new Werkstoff( - new short[] { 0xff, 0xaa, 0x77 }, - "Formic Acid", - subscriptNumbers("CH2O2"), - new Werkstoff.Stats().setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 58, - TextureSet.SET_FLUID, - // No Byproducts - new Pair<>(Materials.Carbon, 1), - new Pair<>(Materials.Hydrogen, 2), - new Pair<>(Materials.Oxygen, 2)); - public static final Werkstoff PotassiumDisulfate = new Werkstoff( - new short[] { 0xfb, 0xbb, 0x66 }, - "Potassium Disulfate", - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten() - .addChemicalRecipes(), - 59, - TextureSet.SET_DULL, - // No Byproducts - new Pair<>(Materials.Potassium, 2), - new Pair<>(Materials.Sulfur, 2), - new Pair<>(Materials.Oxygen, 7)); - public static final Werkstoff LeachResidue = new Werkstoff( - new short[] { 0x64, 0x46, 0x29 }, - "Leach Residue", - "??IrOsRu??", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures(), - 60, - TextureSet.SET_ROUGH - // No Byproducts - ); - public static final Werkstoff RHSulfate = new Werkstoff( - new short[] { 0xee, 0xaa, 0x55 }, - "Rhodium Sulfate", - new Werkstoff.Stats().setGas(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 61, - TextureSet.SET_FLUID - // No Byproducts - ); - public static final Werkstoff RHSulfateSolution = new Werkstoff( - new short[] { 0xff, 0xbb, 0x66 }, - "Rhodium Sulfate Solution", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 62, - TextureSet.SET_FLUID - // No Byproducts - ); - public static final Werkstoff CalciumChloride = new Werkstoff( - new short[] { 0xff, 0xff, 0xff }, - "Calcium Chloride", - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addCells(), - 63, - TextureSet.SET_DULL, - new Pair<>(Materials.Calcium, 1), - new Pair<>(Materials.Chlorine, 2) - // No Byproducts - ); - public static final Werkstoff Ruthenium = new Werkstoff( - new short[] { 0x64, 0x64, 0x64 }, - "Ruthenium", - "Ru", - new Werkstoff.Stats().setBlastFurnace(true) - .setMeltingPoint(2607) - .setMass(Element.Ru.getMass()) - .setProtons(Element.Ru.mProtons), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .enforceUnification(), - 64, - TextureSet.SET_METALLIC - // No Byproducts - ); - public static final Werkstoff SodiumRuthenate = new Werkstoff( - new short[] { 0x3a, 0x40, 0xcb }, - "Sodium Ruthenate", - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 65, - TextureSet.SET_SHINY, - new Pair<>(Materials.Sodium, 2), - new Pair<>(Ruthenium, 1), - new Pair<>(Materials.Oxygen, 3) - // No Byproducts - ); - public static final Werkstoff RutheniumTetroxide = new Werkstoff( - new short[] { 0xc7, 0xc7, 0xc7 }, - "Ruthenium Tetroxide", - new Werkstoff.Stats().setMeltingPoint(313), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addCells(), - 66, - TextureSet.SET_DULL, - new Pair<>(WerkstoffLoader.Ruthenium, 1), - new Pair<>(Materials.Oxygen, 4) - // No Byproducts - ); - public static final Werkstoff HotRutheniumTetroxideSollution = new Werkstoff( - new short[] { 0xc7, 0xc7, 0xc7 }, - "Hot Ruthenium Tetroxide Solution", - "???", - new Werkstoff.Stats().setGas(true) - .setMeltingPoint(700), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 67, - TextureSet.SET_FLUID, - new Pair<>(WerkstoffLoader.Ruthenium, 1), - new Pair<>(Materials.Oxygen, 4), - new Pair<>(Materials.Chlorine, 2), - new Pair<>(Materials.Sodium, 2), - new Pair<>(Materials.Water, 2) - // No Byproducts - ); - public static final Werkstoff RutheniumTetroxideSollution = new Werkstoff( - new short[] { 0xc7, 0xc7, 0xc7 }, - "Ruthenium Tetroxide Solution", - "???", - new Werkstoff.Stats().setMeltingPoint(313), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 68, - TextureSet.SET_FLUID, - new Pair<>(Ruthenium, 1), - new Pair<>(Materials.Oxygen, 4), - new Pair<>(Materials.Chlorine, 2), - new Pair<>(Materials.Sodium, 2), - new Pair<>(Materials.Water, 2) - // No Byproducts - ); - public static final Werkstoff IrOsLeachResidue = new Werkstoff( - new short[] { 0x64, 0x46, 0x29 }, - "Rarest Metal Residue", - "??OsIr??", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures(), - 69, - TextureSet.SET_ROUGH, - // No Byproducts - new Pair<>(Materials.Osmiridium, 1), - new Pair<>(Materials.Stone, 2)); - public static final Werkstoff IrLeachResidue = new Werkstoff( - new short[] { 0x84, 0x66, 0x49 }, - "Iridium Metal Residue", - "??Ir??", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures(), - 70, - TextureSet.SET_ROUGH, - new Pair<>(Materials.Iridium, 1), - new Pair<>(Materials.Stone, 2) - // No Byproducts - ); - public static final Werkstoff PGSDResidue = new Werkstoff( - new short[] { 0x84, 0x66, 0x49 }, - "Sludge Dust Residue", - new Werkstoff.Stats().setCentrifuge(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 71, - TextureSet.SET_DULL, - new Pair<>(Materials.SiliconDioxide, 3), - new Pair<>(Materials.Gold, 2)); - public static final Werkstoff AcidicOsmiumSolution = new Werkstoff( - new short[] { 0x84, 0x66, 0x49 }, - "Acidic Osmium Solution", - "???", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 72, - TextureSet.SET_FLUID, - new Pair<>(Materials.Osmium, 1), - new Pair<>(Materials.HydrochloricAcid, 1)); - public static final Werkstoff IridiumDioxide = new Werkstoff( - new short[] { 0x84, 0x66, 0x49 }, - "Iridium Dioxide", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 73, - TextureSet.SET_FLUID, - new Pair<>(Materials.Iridium, 1), - new Pair<>(Materials.Oxygen, 2)); - public static final Werkstoff OsmiumSolution = new Werkstoff( - new short[] { 0x84, 0x66, 0x49 }, - "Osmium Solution", - "???", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 74, - TextureSet.SET_FLUID, - new Pair<>(Materials.Osmium, 1), - new Pair<>(Materials.Hydrogen, 1)); - public static final Werkstoff AcidicIridiumSolution = new Werkstoff( - new short[] { 0x84, 0x66, 0x49 }, - "Acidic Iridium Solution", - "???", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 75, - TextureSet.SET_FLUID, - new Pair<>(Materials.Iridium, 1), - new Pair<>(Materials.Hydrogen, 1)); - public static final Werkstoff IridiumChloride = new Werkstoff( - new short[] { 0x84, 0x66, 0x49 }, - "Iridium Chloride", - subscriptNumbers("IrCl3"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 76, - TextureSet.SET_LAPIS, - new Pair<>(Materials.Iridium, 1), - new Pair<>(Materials.Chlorine, 3)); - public static final Werkstoff PGSDResidue2 = new Werkstoff( - new short[] { 0x84, 0x66, 0x49 }, - "Metallic Sludge Dust Residue", - new Werkstoff.Stats().setCentrifuge(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 77, - TextureSet.SET_DULL, - new Pair<>(Materials.Nickel, 1), - new Pair<>(Materials.Copper, 1)); - public static final Werkstoff Rhodium = new Werkstoff( - new short[] { 0xF4, 0xF4, 0xF4 }, - "Rhodium", - "Rh", - new Werkstoff.Stats().setProtons(Element.Rh.mProtons) - .setMass(Element.Rh.getMass()) - .setBlastFurnace(true) - .setMeltingPoint(2237), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMetalItems() - .addMolten() - .enforceUnification(), - 78, - TextureSet.SET_METALLIC); - public static final Werkstoff CrudeRhMetall = new Werkstoff( - new short[] { 0x66, 0x66, 0x66 }, - "Crude Rhodium Metal", - "??Rh??", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures(), - 79, - TextureSet.SET_DULL, - new Pair<>(Rhodium, 1), - new Pair<>(Materials.Stone, 1)); - public static final Werkstoff RHSalt = new Werkstoff( - new short[] { 0x84, 0x84, 0x84 }, - "Rhodium Salt", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 80, - TextureSet.SET_GEM_VERTICAL); - public static final Werkstoff RHSaltSolution = new Werkstoff( - new short[] { 0x66, 0x77, 0x88 }, - "Rhodium Salt Solution", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 81, - TextureSet.SET_FLUID); - public static final Werkstoff SodiumNitrate = new Werkstoff( - new short[] { 0x84, 0x66, 0x84 }, - "Sodium Nitrate", - subscriptNumbers("NaNO3"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 82, - TextureSet.SET_ROUGH, - new Pair<>(Materials.Sodium, 1), - new Pair<>(Materials.Nitrogen, 1), - new Pair<>(Materials.Oxygen, 3)); - public static final Werkstoff RHNitrate = new Werkstoff( - new short[] { 0x77, 0x66, 0x49 }, - "Rhodium Nitrate", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 83, - TextureSet.SET_QUARTZ); - public static final Werkstoff ZincSulfate = new Werkstoff( - new short[] { 0x84, 0x66, 0x49 }, - "Zinc Sulfate", - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 84, - TextureSet.SET_QUARTZ, - new Pair<>(Materials.Zinc, 1), - new Pair<>(Materials.Sulfur, 1), - new Pair<>(Materials.Oxygen, 4)); - public static final Werkstoff RhFilterCake = new Werkstoff( - new short[] { 0x77, 0x66, 0x49 }, - "Rhodium Filter Cake", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 85, - TextureSet.SET_QUARTZ); - public static final Werkstoff RHFilterCakeSolution = new Werkstoff( - new short[] { 0x66, 0x77, 0x88 }, - "Rhodium Filter Cake Solution", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 86, - TextureSet.SET_FLUID); - public static final Werkstoff ReRh = new Werkstoff( - new short[] { 0x77, 0x66, 0x49 }, - "Reprecipitated Rhodium", - subscriptNumbers("Rh2NH4"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 87, - TextureSet.SET_QUARTZ); - public static final Werkstoff LuVTierMaterial = new Werkstoff( - Materials.Chrome.getRGBA(), - "Rhodium-Plated Palladium", - new Werkstoff.Stats().setCentrifuge(true) - .setBlastFurnace(true) - .setMeltingPoint(4500) - .setMeltingVoltage(480), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten() - .addMetalItems() - .addMixerRecipes((short) 1) - .addSimpleMetalWorkingItems() - .addCraftingMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), - 88, - TextureSet.SET_METALLIC, - new Pair<>(Materials.Palladium, 3), - new Pair<>(WerkstoffLoader.Rhodium, 1)); - public static final Werkstoff Tiberium = new Werkstoff( - new short[] { 0x22, 0xEE, 0x22 }, - "Tiberium", - "Tr", - new Werkstoff.Stats().setProtons(123) - .setMass(326) - .setBlastFurnace(true) - .setMeltingPoint(1800) - .setRadioactive(true) - .setToxic(true), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().addGems() - .addCraftingMetalWorkingItems() - .addSimpleMetalWorkingItems(), - 89, - TextureSet.SET_DIAMOND); - public static final Werkstoff Ruridit = new Werkstoff( - new short[] { 0xA4, 0xA4, 0xA4 }, - "Ruridit", - new Werkstoff.Stats().setCentrifuge(true) - .setBlastFurnace(true) - .setMeltingPoint(4500) - .setMeltingVoltage(480), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten() - .addMetalItems() - .addMixerRecipes((short) 1) - .addSimpleMetalWorkingItems() - .addCraftingMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), - 90, - TextureSet.SET_METALLIC, - new Pair<>(WerkstoffLoader.Ruthenium, 2), - new Pair<>(Materials.Iridium, 1)); - public static final Werkstoff Fluorspar = new Werkstoff( - new short[] { 185, 69, 251 }, - "Fluorspar", - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().addGems(), - 91, - TextureSet.SET_GEM_VERTICAL, - new Pair<>(Materials.Calcium, 1), - new Pair<>(Materials.Fluorine, 2)); - public static final Werkstoff HDCS = new Werkstoff( - new short[] { 0x33, 0x44, 0x33 }, - "High Durability Compound Steel", - new Werkstoff.Stats().setCentrifuge(true) - .setBlastFurnace(true) - .setMeltingPoint(9000) - .setMeltingVoltage(7680), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten() - .addMetalItems() - .addMixerRecipes() - .addSimpleMetalWorkingItems() - .addCraftingMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), - 92, - TextureSet.SET_SHINY, - new Pair<>(Materials.TungstenSteel, 12), - new Pair<>(Materials.HSSE, 9), - new Pair<>(Materials.HSSG, 6), - new Pair<>(WerkstoffLoader.Ruridit, 3), - new Pair<>(WerkstoffLoader.MagnetoResonaticDust, 2), - new Pair<>(Materials.Plutonium, 1)); - public static final Werkstoff Atheneite = new Werkstoff( - new short[] { 175, 175, 175 }, - "Atheneite", - subscriptNumbers("(Pd,Hg)3As"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 93, - TextureSet.SET_SHINY, - new Pair<>(WerkstoffLoader.PDMetallicPowder, 3), - new Pair<>(Materials.Mercury, 3), - new Pair<>(Materials.Arsenic, 1)); - public static final Werkstoff Temagamite = new Werkstoff( - new short[] { 245, 245, 245 }, - "Temagamite", - subscriptNumbers("Pd3HgTe"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 94, - TextureSet.SET_ROUGH, - new Pair<>(WerkstoffLoader.PDMetallicPowder, 3), - new Pair<>(Materials.Mercury, 1), - new Pair<>(Materials.Tellurium, 1)); - public static final Werkstoff Terlinguaite = new Werkstoff( - new short[] { 245, 245, 245 }, - "Terlinguaite", - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures(), - 95, - TextureSet.SET_GEM_HORIZONTAL, - new Pair<>(Materials.Mercury, 2), - new Pair<>(Materials.Chlorine, 1), - new Pair<>(Materials.Oxygen, 1)); - public static final Werkstoff AdemicSteel = new Werkstoff( - new short[] { 0xcc, 0xcc, 0xcc }, - "Ademic Steel", - "The break in the line", - new Werkstoff.Stats().setCentrifuge(true) - .setBlastFurnace(true) - .setDurOverride(6144) - .setMeltingPoint(1800) - .setSpeedOverride(12) - .setQualityOverride((byte) 4) - .setMeltingVoltage(1920), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addMolten() - .addSimpleMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), - 96, - TextureSet.SET_METALLIC, - new Pair<>(Materials.Steel, 2), - new Pair<>(Materials.VanadiumSteel, 1), - new Pair<>(Materials.DamascusSteel, 1), - new Pair<>(Materials.Carbon, 4)); - public static final Werkstoff RawAdemicSteel = new Werkstoff( - new short[] { 0xed, 0xed, 0xed }, - "Raw Ademic Steel", - new Werkstoff.Stats().setCentrifuge(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMixerRecipes(), - 97, - TextureSet.SET_ROUGH, - new Pair<>(Materials.Steel, 2), - new Pair<>(Materials.VanadiumSteel, 1), - new Pair<>(Materials.DamascusSteel, 1)); - public static final Werkstoff HexafluorosilicicAcid = new Werkstoff( - new short[] { 0x2c, 0x70, 0xb5 }, - "Hexafluorosilicic Acid", - subscriptNumbers("H2SiF6"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 98, - TextureSet.SET_FLUID, - new Pair<>(Materials.Hydrogen, 2), - new Pair<>(Materials.Silicon, 1), - new Pair<>(Materials.Fluorine, 6)); - public static final Werkstoff Potassiumfluorosilicate = new Werkstoff( - new short[] { 0x2e, 0x97, 0xb2 }, - "Potassiumfluorosilicate", - subscriptNumbers("K2SiF6"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 99, - TextureSet.SET_SHINY, - new Pair<>(Materials.Potassium, 2), - new Pair<>(Materials.Silicon, 1), - new Pair<>(Materials.Fluorine, 6)); - public static final Werkstoff Alumina = new Werkstoff( - new short[] { 0xa0, 0xad, 0xb1 }, - "Alumina", - subscriptNumbers("Al2O3"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 100, - TextureSet.SET_DULL); - public static final Werkstoff PotassiumCarbonate = new Werkstoff( - new short[] { 0x7b, 0x96, 0x4f }, - "Potassium Carbonate", - subscriptNumbers("K2CO3"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 101, - TextureSet.SET_DULL, - new Pair<>(Materials.Potassium, 2), - new Pair<>(Materials.Carbon, 1), - new Pair<>(Materials.Oxygen, 3)); - public static final Werkstoff RawFluorophlogopite = new Werkstoff( - new short[] { 0x36, 0x51, 0x0b }, - "Raw Fluorophlogopite", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - 102, - TextureSet.SET_DULL); - public static final Werkstoff HotFluorophlogopite = new Werkstoff( - new short[] { 0xbf, 0xd3, 0x55 }, - "Unformed Fluorophlogopite", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - 103, - TextureSet.SET_FLUID); - public static final Werkstoff Fluorophlogopite = new Werkstoff( - new short[] { 0xbf, 0xd3, 0x55 }, - "Fluorophlogopite", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMetalItems(), - 104, - TextureSet.SET_SHINY); - - public static HashMap items = new HashMap<>(); - public static HashBiMap fluids = HashBiMap.create(); - public static HashBiMap molten = HashBiMap.create(); - public static Block BWOres; - public static Block BWSmallOres; - public static Block BWBlocks; - public static Block BWBlockCasings; - public static Block BWBlockCasingsAdvanced; - public static boolean registered; - public static final HashSet ENABLED_ORE_PREFIXES = new HashSet<>(); - - public static Werkstoff getWerkstoff(String Name) { - try { - Field f = WerkstoffLoader.class.getField(Name); - return (Werkstoff) f.get(null); - } catch (IllegalAccessException | NoSuchFieldException | ClassCastException e) { - MainMod.LOGGER.catching(e); - } - return Werkstoff.default_null_Werkstoff; - } - - public static ItemStack getCorrespondingItemStack(OrePrefixes orePrefixes, Werkstoff werkstoff) { - return WerkstoffLoader.getCorrespondingItemStack(orePrefixes, werkstoff, 1); - } - - public static ItemStack getCorrespondingItemStackUnsafe(OrePrefixes orePrefixes, Werkstoff werkstoff, int amount) { - if (!werkstoff.getGenerationFeatures().enforceUnification) { - ItemStack ret = GT_OreDictUnificator.get(orePrefixes, werkstoff.getBridgeMaterial(), amount); - if (ret != null) return ret; - ret = OreDictHandler.getItemStack(werkstoff.getVarName(), orePrefixes, amount); - if (ret != null) return ret; - } - if (orePrefixes == ore) return new ItemStack(WerkstoffLoader.BWOres, amount, werkstoff.getmID()); - if (orePrefixes == oreSmall) return new ItemStack(WerkstoffLoader.BWSmallOres, amount, werkstoff.getmID()); - else if (orePrefixes == block) return new ItemStack(WerkstoffLoader.BWBlocks, amount, werkstoff.getmID()); - else if (orePrefixes == OrePrefixes.blockCasing) - return new ItemStack(WerkstoffLoader.BWBlockCasings, amount, werkstoff.getmID()); - else if (orePrefixes == OrePrefixes.blockCasingAdvanced) - return new ItemStack(WerkstoffLoader.BWBlockCasingsAdvanced, amount, werkstoff.getmID()); - else if (WerkstoffLoader.items.get(orePrefixes) == null) return null; - return new ItemStack(WerkstoffLoader.items.get(orePrefixes), amount, werkstoff.getmID()).copy(); - } - - public static ItemStack getCorrespondingItemStack(OrePrefixes orePrefixes, Werkstoff werkstoff, int amount) { - ItemStack stack = getCorrespondingItemStackUnsafe(orePrefixes, werkstoff, amount); - if (stack != null) return stack; - MainMod.LOGGER.catching( - Level.ERROR, - new Exception( - "NO SUCH ITEM! " + orePrefixes - + werkstoff.getVarName() - + " If you encounter this as a user, make sure to contact the authors of the pack/the mods you're playing! " - + "If you are a Developer, you forgot to enable " - + orePrefixes - + " OrePrefix for Werkstoff " - + werkstoff.getDefaultName())); - return new ItemStack(WerkstoffLoader.items.get(orePrefixes), amount, werkstoff.getmID()).copy(); - } - - public static void runInit() { - MainMod.LOGGER.info("Making Meta Items for BW Materials"); - long timepre = System.nanoTime(); - WerkstoffAdderRegistry.run(); - addSubTags(); - addItemsForGeneration(); - addBridgeSubTags(); - runAdditionalOreDict(); - long timepost = System.nanoTime(); - MainMod.LOGGER.info( - "Making Meta Items for BW Materials took " + (timepost - timepre) - + "ns/" - + (timepost - timepre) / 1000000 - + "ms/" - + (timepost - timepre) / 1000000000 - + "s!"); - } - - public static void run() { - if (!registered) { - MainMod.LOGGER.info("Loading Processing Recipes for BW Materials"); - long timepre = System.nanoTime(); - ProgressManager.ProgressBar progressBar = ProgressManager - .push("Register BW Materials", Werkstoff.werkstoffHashSet.size() + 1); - DebugLog.log("Loading Recipes" + (System.nanoTime() - timepre)); - Integer[] clsArr = {}; - int size = 0; - if (BetterLoadingScreen.isModLoaded()) clsArr = CLSCompat.initCls(); - - IWerkstoffRunnable[] werkstoffRunnables = { new ToolLoader(), new DustLoader(), new GemLoader(), - new SimpleMetalLoader(), new CasingLoader(), new AspectLoader(), new OreLoader(), new RawOreLoader(), - new CrushedLoader(), new CraftingMaterialLoader(), new CellLoader(), new MoltenCellLoader(), - new MultipleMetalLoader(), new MetalLoader(), new BlockLoader() }; - - long timepreone = 0; - for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { - timepreone = System.nanoTime(); - DebugLog.log( - "Werkstoff is null or id < 0 ? " + (werkstoff == null || werkstoff.getmID() < 0) - + " " - + (System.nanoTime() - timepreone)); - if (werkstoff == null || werkstoff.getmID() < 0) { - progressBar.step(""); - continue; - } - if (BetterLoadingScreen.isModLoaded()) size = CLSCompat.invokeStepSize(werkstoff, clsArr, size); - DebugLog.log("Werkstoff: " + werkstoff.getDefaultName() + " " + (System.nanoTime() - timepreone)); - for (IWerkstoffRunnable runnable : werkstoffRunnables) { - String loaderName = runnable.getClass() - .getSimpleName(); - DebugLog.log(loaderName + " started " + (System.nanoTime() - timepreone)); - runnable.run(werkstoff); - DebugLog.log(loaderName + " done " + (System.nanoTime() - timepreone)); - } - DebugLog.log("Done" + " " + (System.nanoTime() - timepreone)); - progressBar.step(werkstoff.getDefaultName()); - } - DebugLog.log("Loading New Circuits" + " " + (System.nanoTime() - timepreone)); - BW_CircuitsLoader.initNewCircuits(); - - if (BetterLoadingScreen.isModLoaded()) { - CLSCompat.disableCls(); - } - - progressBar.step("Load Additional Recipes"); - AdditionalRecipes.run(); - ProgressManager.pop(progressBar); - long timepost = System.nanoTime(); - MainMod.LOGGER.info( - "Loading Processing Recipes for BW Materials took " + (timepost - timepre) - + "ns/" - + (timepost - timepre) / 1000000 - + "ms/" - + (timepost - timepre) / 1000000000 - + "s!"); - registered = true; - } - } - - @SuppressWarnings("unchecked") - private static void addSubTags() { - WerkstoffLoader.CubicZirconia.getStats() - .setDurOverride(Materials.Diamond.mDurability); - WerkstoffLoader.HDCS.getStats() - .setSpeedOverride(Materials.HSSS.mToolSpeed); - WerkstoffLoader.HDCS.getStats() - .setDurMod(10f); - Materials.Helium.add(WerkstoffLoader.NOBLE_GAS); - WerkstoffLoader.Neon.add(WerkstoffLoader.NOBLE_GAS); - Materials.Argon.add(WerkstoffLoader.NOBLE_GAS); - WerkstoffLoader.Krypton.add(WerkstoffLoader.NOBLE_GAS); - WerkstoffLoader.Xenon.add(WerkstoffLoader.NOBLE_GAS, WerkstoffLoader.ANAEROBE_GAS); - Materials.Radon.add(WerkstoffLoader.NOBLE_GAS); - WerkstoffLoader.Oganesson.add(WerkstoffLoader.NOBLE_GAS, WerkstoffLoader.ANAEROBE_GAS); - - Materials.Nitrogen.add(WerkstoffLoader.ANAEROBE_GAS); - - WerkstoffLoader.Calcium.add(WerkstoffLoader.ANAEROBE_SMELTING); - - WerkstoffLoader.LuVTierMaterial.add(WerkstoffLoader.NOBLE_GAS_SMELTING); - WerkstoffLoader.Ruridit.add(WerkstoffLoader.NOBLE_GAS_SMELTING); - WerkstoffLoader.AdemicSteel.add(WerkstoffLoader.NOBLE_GAS_SMELTING); - - WerkstoffLoader.MagnetoResonaticDust.add(WerkstoffLoader.NO_BLAST); - - // Calcium Smelting block - Materials.Calcium.mBlastFurnaceRequired = true; - - Materials.Salt.mDurability = WerkstoffLoader.Salt.getDurability(); - Materials.Spodumene.mDurability = WerkstoffLoader.Spodumen.getDurability(); - Materials.RockSalt.mDurability = WerkstoffLoader.RockSalt.getDurability(); - Materials.Calcium.mDurability = WerkstoffLoader.Calcium.getDurability(); - - Materials.Salt.mToolSpeed = WerkstoffLoader.Salt.getToolSpeed(); - Materials.Spodumene.mToolSpeed = WerkstoffLoader.Spodumen.getToolSpeed(); - Materials.RockSalt.mToolSpeed = WerkstoffLoader.RockSalt.getToolSpeed(); - Materials.Calcium.mToolSpeed = WerkstoffLoader.Calcium.getToolSpeed(); - - Materials.Salt.mToolQuality = WerkstoffLoader.Salt.getToolQuality(); - Materials.Spodumene.mToolQuality = WerkstoffLoader.Spodumen.getToolQuality(); - Materials.RockSalt.mToolQuality = WerkstoffLoader.RockSalt.getToolQuality(); - Materials.Calcium.mToolQuality = WerkstoffLoader.Calcium.getToolQuality(); - - for (Werkstoff W : Werkstoff.werkstoffHashSet) { - for (Pair pair : W.getContents() - .getValue() - .toArray(new Pair[0])) { - - if (pair.getKey() instanceof Materials && pair.getKey() == Materials.Neodymium) { - W.add(SubTag.ELECTROMAGNETIC_SEPERATION_NEODYMIUM); - break; - } - if (pair.getKey() instanceof Materials && pair.getKey() == Materials.Iron) { - W.add(SubTag.ELECTROMAGNETIC_SEPERATION_IRON); - break; - } else if (pair.getKey() instanceof Materials && pair.getKey() == Materials.Gold) { - W.add(SubTag.ELECTROMAGNETIC_SEPERATION_GOLD); - break; - } - } - if (W.hasItemType(gem)) { - W.add(SubTag.CRYSTAL); - W.add(SubTag.CRYSTALLISABLE); - } - } - } - - private static void addBridgeSubTags() { - // add specific GT materials subtags to various werkstoff bridgematerials - - SubTag.METAL.addTo(LuVTierMaterial.getBridgeMaterial()); - } - - public static long toGenerateGlobal; - - private static void addItemsForGeneration() { - for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { - if (werkstoff.hasItemType(cell)) { - if (!FluidRegistry.isFluidRegistered(werkstoff.getDefaultName())) { - DebugLog.log("Adding new Fluid: " + werkstoff.getDefaultName()); - Fluid fluid = GT_FluidFactory.builder(werkstoff.getDefaultName()) - .withLocalizedName(werkstoff.getDefaultName()) - .withStateAndTemperature( - werkstoff.getStats() - .getFluidState(), - 300) - .withColorRGBA(werkstoff.getRGBA()) - .withTextureName("autogenerated") - .buildAndRegister() - .asFluid(); - WerkstoffLoader.fluids.put(werkstoff, fluid); - } else { - WerkstoffLoader.fluids.put(werkstoff, FluidRegistry.getFluid(werkstoff.getDefaultName())); - } - } - if (werkstoff.hasItemType(OrePrefixes.cellMolten)) { - if (!FluidRegistry.isFluidRegistered("molten." + werkstoff.getDefaultName())) { - DebugLog.log("Adding new Molten: " + werkstoff.getDefaultName()); - Fluid fluid = GT_FluidFactory.builder("molten." + werkstoff.getDefaultName()) - .withLocalizedName("Molten " + werkstoff.getDefaultName()) - .withStateAndTemperature( - FluidState.MOLTEN, - werkstoff.getStats() - .getMeltingPoint() > 0 ? werkstoff.getStats() - .getMeltingPoint() : 300) - .withColorRGBA(werkstoff.getRGBA()) - .withTextureName("molten.autogenerated") - .buildAndRegister() - .asFluid(); - WerkstoffLoader.molten.put(werkstoff, fluid); - } else { - WerkstoffLoader.molten.put(werkstoff, FluidRegistry.getFluid(werkstoff.getDefaultName())); - } - } - for (OrePrefixes p : values()) if (Materials.get(werkstoff.getDefaultName()) != null - && Materials.get(werkstoff.getDefaultName()).mMetaItemSubID != -1 - && (werkstoff.getGenerationFeatures().toGenerate & p.mMaterialGenerationBits) != 0 - && OreDictHandler.getItemStack(werkstoff.getDefaultName(), p, 1) != null) { - DebugLog.log( - "Found: " + p - + werkstoff.getVarName() - + " in GT material system, disable and reroute my Items to that, also add a Tooltip."); - werkstoff.getGenerationFeatures() - .setBlacklist(p); - } - WerkstoffLoader.toGenerateGlobal = WerkstoffLoader.toGenerateGlobal - | werkstoff.getGenerationFeatures().toGenerate; - } - DebugLog.log("GlobalGeneration: " + WerkstoffLoader.toGenerateGlobal); - if ((WerkstoffLoader.toGenerateGlobal & 0b1) != 0) { - WerkstoffLoader.items.put(dust, new BW_MetaGenerated_Items(dust)); - WerkstoffLoader.items.put(dustTiny, new BW_MetaGenerated_Items(dustTiny)); - WerkstoffLoader.items.put(dustSmall, new BW_MetaGenerated_Items(dustSmall)); - } - if ((WerkstoffLoader.toGenerateGlobal & 0b10) != 0) { - WerkstoffLoader.items.put(ingot, new BW_MetaGenerated_Items(ingot)); - WerkstoffLoader.items.put(ingotHot, new BW_MetaGenerated_Items(ingotHot)); // 1750 - WerkstoffLoader.items.put(nugget, new BW_MetaGenerated_Items(nugget)); - } - if ((WerkstoffLoader.toGenerateGlobal & 0b100) != 0) { - WerkstoffLoader.items.put(gem, new BW_MetaGenerated_Items(gem)); - WerkstoffLoader.items.put(gemChipped, new BW_MetaGenerated_Items(gemChipped)); - WerkstoffLoader.items.put(gemExquisite, new BW_MetaGenerated_Items(gemExquisite)); - WerkstoffLoader.items.put(gemFlawed, new BW_MetaGenerated_Items(gemFlawed)); - WerkstoffLoader.items.put(gemFlawless, new BW_MetaGenerated_Items(gemFlawless)); - WerkstoffLoader.items.put(lens, new BW_MetaGenerated_Items(lens)); - } - if ((WerkstoffLoader.toGenerateGlobal & 0b1000) != 0) { - gameRegistryHandler(); - WerkstoffLoader.items.put(crushed, new BW_MetaGenerated_Items(crushed)); - WerkstoffLoader.items.put(crushedPurified, new BW_MetaGenerated_Items(crushedPurified)); - WerkstoffLoader.items.put(crushedCentrifuged, new BW_MetaGenerated_Items(crushedCentrifuged)); - WerkstoffLoader.items.put(dustPure, new BW_MetaGenerated_Items(dustPure)); - WerkstoffLoader.items.put(dustImpure, new BW_MetaGenerated_Items(dustImpure)); - WerkstoffLoader.items.put(rawOre, new BW_MetaGenerated_Items(rawOre)); - } - if ((WerkstoffLoader.toGenerateGlobal & 0b10000) != 0) { - WerkstoffLoader.items.put(cell, new BW_MetaGenerated_Items(cell)); - if (Forestry.isModLoaded()) { - BW_MetaGenerated_Items capsuleClass = new BW_MetaGenerated_Items(capsule); - API.hideItem(new ItemStack(capsuleClass, 1, WILDCARD)); - WerkstoffLoader.items.put(capsule, capsuleClass); - } - } - if ((WerkstoffLoader.toGenerateGlobal & 0b100000) != 0) { - WerkstoffLoader.items.put(cellPlasma, new BW_MetaGenerated_Items(cellPlasma)); - } - if ((WerkstoffLoader.toGenerateGlobal & 0b1000000) != 0) { - WerkstoffLoader.items.put(OrePrefixes.cellMolten, new BW_MetaGenerated_Items(OrePrefixes.cellMolten)); - if (Forestry.isModLoaded()) { - BW_MetaGenerated_Items capsuleMoltenClass = new BW_MetaGenerated_Items(OrePrefixes.capsuleMolten); - API.hideItem(new ItemStack(capsuleMoltenClass, 1, WILDCARD)); - WerkstoffLoader.items.put(OrePrefixes.capsuleMolten, capsuleMoltenClass); - } - } - if ((WerkstoffLoader.toGenerateGlobal & 0b10000000) != 0) { - WerkstoffLoader.items.put(plate, new BW_MetaGenerated_Items(plate)); - WerkstoffLoader.items.put(foil, new BW_MetaGenerated_Items(foil)); - WerkstoffLoader.items.put(stick, new BW_MetaGenerated_Items(stick)); - WerkstoffLoader.items.put(stickLong, new BW_MetaGenerated_Items(stickLong)); - WerkstoffLoader.items.put(toolHeadWrench, new BW_MetaGenerated_Items(toolHeadWrench)); - WerkstoffLoader.items.put(toolHeadHammer, new BW_MetaGenerated_Items(toolHeadHammer)); - WerkstoffLoader.items.put(toolHeadSaw, new BW_MetaGenerated_Items(toolHeadSaw)); - WerkstoffLoader.items.put(turbineBlade, new BW_MetaGenerated_Items(turbineBlade)); - } - if ((WerkstoffLoader.toGenerateGlobal & 0b100000000) != 0) { - WerkstoffLoader.items.put(gearGt, new BW_MetaGenerated_Items(gearGt)); - WerkstoffLoader.items.put(gearGtSmall, new BW_MetaGenerated_Items(gearGtSmall)); - WerkstoffLoader.items.put(bolt, new BW_MetaGenerated_Items(bolt)); - WerkstoffLoader.items.put(screw, new BW_MetaGenerated_Items(screw)); - WerkstoffLoader.items.put(ring, new BW_MetaGenerated_Items(ring)); - WerkstoffLoader.items.put(spring, new BW_MetaGenerated_Items(spring)); - WerkstoffLoader.items.put(springSmall, new BW_MetaGenerated_Items(springSmall)); - WerkstoffLoader.items.put(rotor, new BW_MetaGenerated_Items(rotor)); - WerkstoffLoader.items.put(wireFine, new BW_MetaGenerated_Items(wireFine)); - } - if ((WerkstoffLoader.toGenerateGlobal & 0b1000000000) != 0) { - WerkstoffLoader.items.put(plateDouble, new BW_MetaGenerated_Items(plateDouble)); - WerkstoffLoader.items.put(plateTriple, new BW_MetaGenerated_Items(plateTriple)); - WerkstoffLoader.items.put(plateQuadruple, new BW_MetaGenerated_Items(plateQuadruple)); - WerkstoffLoader.items.put(plateQuintuple, new BW_MetaGenerated_Items(plateQuintuple)); - WerkstoffLoader.items.put(plateDense, new BW_MetaGenerated_Items(plateDense)); - WerkstoffLoader.items.put(ingotDouble, new BW_MetaGenerated_Items(ingotDouble)); - WerkstoffLoader.items.put(ingotTriple, new BW_MetaGenerated_Items(ingotTriple)); - WerkstoffLoader.items.put(ingotQuadruple, new BW_MetaGenerated_Items(ingotQuadruple)); - WerkstoffLoader.items.put(ingotQuintuple, new BW_MetaGenerated_Items(ingotQuintuple)); - } - ENABLED_ORE_PREFIXES.addAll(WerkstoffLoader.items.keySet()); - ENABLED_ORE_PREFIXES.add(ore); - ENABLED_ORE_PREFIXES.add(oreSmall); - WerkstoffLoader.runGTItemDataRegistrator(); - } - - static void gameRegistryHandler() { - if (SideReference.Side.Client) BW_Renderer_Block_Ores.register(); - - GameRegistry.registerTileEntity(BW_MetaGeneratedOreTE.class, "bw.blockoresTE"); - GameRegistry.registerTileEntity(BW_MetaGeneratedSmallOreTE.class, "bw.blockoresSmallTE"); - GameRegistry.registerTileEntity(BW_MetaGenerated_WerkstoffBlock_TE.class, "bw.werkstoffblockTE"); - GameRegistry.registerTileEntity(BW_MetaGeneratedBlocks_Casing_TE.class, "bw.werkstoffblockcasingTE"); - GameRegistry - .registerTileEntity(BW_MetaGeneratedBlocks_CasingAdvanced_TE.class, "bw.werkstoffblockscasingadvancedTE"); - - WerkstoffLoader.BWOres = new BW_MetaGenerated_Ores(Material.rock, BW_MetaGeneratedOreTE.class, "bw.blockores"); - WerkstoffLoader.BWSmallOres = new BW_MetaGenerated_SmallOres( - Material.rock, - BW_MetaGeneratedSmallOreTE.class, - "bw.blockoresSmall"); - WerkstoffLoader.BWBlocks = new BW_MetaGenerated_WerkstoffBlocks( - Material.iron, - BW_MetaGenerated_WerkstoffBlock_TE.class, - "bw.werkstoffblocks"); - WerkstoffLoader.BWBlockCasings = new BW_MetaGeneratedBlocks_Casing( - Material.iron, - BW_MetaGeneratedBlocks_Casing_TE.class, - "bw.werkstoffblockscasing", - OrePrefixes.blockCasing); - WerkstoffLoader.BWBlockCasingsAdvanced = new BW_MetaGeneratedBlocks_Casing( - Material.iron, - BW_MetaGeneratedBlocks_CasingAdvanced_TE.class, - "bw.werkstoffblockscasingadvanced", - OrePrefixes.blockCasingAdvanced); - - GameRegistry.registerBlock(WerkstoffLoader.BWOres, BW_MetaGeneratedBlock_Item.class, "bw.blockores.01"); - GameRegistry.registerBlock(WerkstoffLoader.BWSmallOres, BW_MetaGeneratedBlock_Item.class, "bw.blockores.02"); - GameRegistry.registerBlock(WerkstoffLoader.BWBlocks, BW_MetaGeneratedBlock_Item.class, "bw.werkstoffblocks.01"); - if (!ConfigHandler.disableBoltedBlocksCasing) GameRegistry.registerBlock( - WerkstoffLoader.BWBlockCasings, - BW_MetaGeneratedBlock_Item.class, - "bw.werkstoffblockscasing.01"); - if (!ConfigHandler.disableReboltedBlocksCasing) GameRegistry.registerBlock( - WerkstoffLoader.BWBlockCasingsAdvanced, - BW_MetaGeneratedBlock_Item.class, - "bw.werkstoffblockscasingadvanced.01"); - - GTMetaItemEnhancer.addAdditionalOreDictToForestry(); - GTMetaItemEnhancer.init(); - } - - private static void runGTItemDataRegistrator() { - IWerkstoffRunnable[] registrations = { new BridgeMaterialsLoader(), new AssociationLoader(), - new CasingRegistrator() }; - for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { - for (IWerkstoffRunnable registration : registrations) { - registration.run(werkstoff); - } - } - addFakeItemDataToInWorldBlocksAndCleanUpFakeData(); - addVanillaCasingsToGTOreDictUnificator(); - } - - public static void addVanillaCasingsToGTOreDictUnificator() { - GT_OreDictUnificator - .addAssociation(OrePrefixes.blockCasing, Materials.Aluminium, ItemList.Casing_FrostProof.get(1L), false); - GT_OreDictUnificator - .addAssociation(OrePrefixes.blockCasing, Materials.Nickel, ItemList.Casing_HeatProof.get(1L), false); - GT_OreDictUnificator - .addAssociation(OrePrefixes.blockCasing, Materials.Lead, ItemList.Casing_RadiationProof.get(1L), false); - GT_OreDictUnificator - .addAssociation(OrePrefixes.blockCasing, Materials.Steel, ItemList.Casing_SolidSteel.get(1L), false); - GT_OreDictUnificator.addAssociation( - OrePrefixes.blockCasing, - Materials.TungstenSteel, - ItemList.Casing_RobustTungstenSteel.get(1L), - false); - GT_OreDictUnificator.addAssociation( - OrePrefixes.blockCasing, - Materials.Polytetrafluoroethylene, - ItemList.Casing_Chemically_Inert.get(1L), - false); - } - - /** - * very hacky way to make my ores/blocks/smallores detectable by gt assosication in world, well at least the prefix. - * used for the miners mostly removing this hacky material from the materials map instantly. we only need the item - * data. - */ - @SuppressWarnings("unchecked") - private static void addFakeItemDataToInWorldBlocksAndCleanUpFakeData() { - - Map MATERIALS_MAP = null; - - try { - Field f = Materials.class.getDeclaredField("MATERIALS_MAP"); - f.setAccessible(true); - MATERIALS_MAP = (Map) f.get(null); - } catch (NoSuchFieldException | IllegalAccessException | ClassCastException e) { - e.printStackTrace(); - } - - if (MATERIALS_MAP == null) throw new NullPointerException("MATERIALS_MAP null!"); - - Materials oreMat = new Materials(-1, null, 0, 0, 0, false, "bwores", "bwores", null, true, null); - Materials smallOreMat = new Materials(-1, null, 0, 0, 0, false, "bwsmallores", "bwsmallores", null, true, null); - Materials blockMat = new Materials(-1, null, 0, 0, 0, false, "bwblocks", "bwblocks", null, true, null); - - for (int i = 0; i < 16; i++) { - GT_OreDictUnificator.addAssociation(ore, oreMat, new ItemStack(BWOres, 1, i), true); - GT_OreDictUnificator.addAssociation(oreSmall, smallOreMat, new ItemStack(BWSmallOres, 1, i), true); - GT_OreDictUnificator.addAssociation(block, blockMat, new ItemStack(BWBlocks, 1, i), true); - } - - MATERIALS_MAP.remove("bwores"); - MATERIALS_MAP.remove("bwsmallores"); - MATERIALS_MAP.remove("bwblocks"); - } - - public static void removeIC2Recipes() { - try { - Set> remset = new HashSet<>(); - for (Map.Entry curr : Recipes.macerator.getRecipes() - .entrySet()) { - if (curr.getKey() instanceof RecipeInputOreDict) { - if ("oreNULL".equalsIgnoreCase(((RecipeInputOreDict) curr.getKey()).input)) { - remset.add(curr); - } - for (ItemStack stack : curr.getValue().items) { - if (stack.getItem() instanceof BW_MetaGenerated_Items) remset.add(curr); - } - } - } - Recipes.macerator.getRecipes() - .entrySet() - .removeAll(remset); - } catch (Exception e) { - e.printStackTrace(); - } - } - - private static void runAdditionalOreDict() { - for (Werkstoff werkstoff : Werkstoff.werkstoffHashSet) { - if (werkstoff.hasItemType(ore)) { - GT_OreDictUnificator.registerOre(ore + werkstoff.getVarName(), werkstoff.get(ore)); - GT_OreDictUnificator.registerOre(oreSmall + werkstoff.getVarName(), werkstoff.get(oreSmall)); - werkstoff.getADDITIONAL_OREDICT() - .forEach(e -> OreDictionary.registerOre(ore + e, werkstoff.get(ore))); - werkstoff.getADDITIONAL_OREDICT() - .forEach(e -> OreDictionary.registerOre(oreSmall + e, werkstoff.get(oreSmall))); - } - - if (werkstoff.hasItemType(gem)) OreDictionary.registerOre( - "craftingLens" + BW_ColorUtil.getDyeFromColor(werkstoff.getRGBA()).mName.replace(" ", ""), - werkstoff.get(lens)); - - if (werkstoff.hasItemType(gem) || werkstoff.hasItemType(ingot)) { - GT_OreDictUnificator.registerOre(block + werkstoff.getVarName(), werkstoff.get(block)); - werkstoff.getADDITIONAL_OREDICT() - .forEach(e -> OreDictionary.registerOre(block + e, werkstoff.get(block))); - } - - werkstoff.getADDITIONAL_OREDICT() - .forEach( - s -> ENABLED_ORE_PREFIXES.stream() - .filter(o -> Objects.nonNull(werkstoff.get(o))) - .forEach(od -> OreDictionary.registerOre(od + s, werkstoff.get(od)))); - } - - GT_OreDictUnificator.registerOre("craftingIndustrialDiamond", WerkstoffLoader.CubicZirconia.get(gemExquisite)); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AddSomeRecipes.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AddSomeRecipes.java deleted file mode 100644 index c31013eb78..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AddSomeRecipes.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.processingLoaders; - -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.dustSmall; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import com.github.bartimaeusnek.bartworks.system.material.BW_NonMeta_MaterialItems; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; - -public class AddSomeRecipes implements Runnable { - - public void run() { - - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.Depleted_Tiberium_1.get(1)) - .itemOutputs( - WerkstoffLoader.Zirconium.get(dust), - WerkstoffLoader.Zirconium.get(dust), - WerkstoffLoader.Tiberium.get(dustSmall, 2), - WerkstoffLoader.Zirconium.get(dust, 2), - GT_OreDictUnificator.get(dust, Materials.TungstenSteel, 8L), - GT_OreDictUnificator.get(dust, Materials.Platinum, 1L)) - .outputChances(100_00, 50_00, 50_00, 25_00, 100_00, 100_00) - .fluidOutputs(WerkstoffLoader.Xenon.getFluidOrGas(1)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.Depleted_Tiberium_2.get(1)) - .itemOutputs( - WerkstoffLoader.Zirconium.get(dust, 2), - WerkstoffLoader.Zirconium.get(dust, 2), - WerkstoffLoader.Tiberium.get(dust), - WerkstoffLoader.Zirconium.get(dust, 4), - GT_OreDictUnificator.get(dust, Materials.TungstenSteel, 18L), - GT_OreDictUnificator.get(dust, Materials.Platinum, 2L)) - .outputChances(100_00, 50_00, 50_00, 25_00, 100_00, 100_00) - .fluidOutputs(WerkstoffLoader.Xenon.getFluidOrGas(2)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.Depleted_Tiberium_4.get(1)) - .itemOutputs( - WerkstoffLoader.Zirconium.get(dust, 4), - WerkstoffLoader.Zirconium.get(dust, 4), - WerkstoffLoader.Tiberium.get(dust, 2), - WerkstoffLoader.Zirconium.get(dust, 8), - GT_OreDictUnificator.get(dust, Materials.TungstenSteel, 38L), - GT_OreDictUnificator.get(dust, Materials.Platinum, 4L)) - .outputChances(100_00, 50_00, 50_00, 25_00, 100_00, 100_00) - .fluidOutputs(WerkstoffLoader.Xenon.getFluidOrGas(4)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(BW_NonMeta_MaterialItems.Depleted_TheCoreCell.get(1)) - .itemOutputs( - ItemList.Depleted_Naquadah_4.get(8), - WerkstoffLoader.Zirconium.get(dust, 64), - WerkstoffLoader.Zirconium.get(dust, 64), - GT_OreDictUnificator.get(dust, Materials.TungstenSteel, 64L), - GT_OreDictUnificator.get(dust, Materials.TungstenSteel, 64L), - GT_OreDictUnificator.get(dust, Materials.TungstenSteel, 48L)) - .outputChances(100_00, 50_00, 50_00, 100_00, 100_00, 100_00) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(centrifugeRecipes); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AdditionalRecipes.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AdditionalRecipes.java deleted file mode 100644 index 51398d2914..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/AdditionalRecipes.java +++ /dev/null @@ -1,538 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.processingLoaders; - -import static com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps.bacterialVatRecipes; -import static com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps.bioLabRecipes; -import static gregtech.api.enums.Mods.Gendustry; -import static gregtech.api.enums.OrePrefixes.bolt; -import static gregtech.api.enums.OrePrefixes.crushed; -import static gregtech.api.enums.OrePrefixes.crushedPurified; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.dustSmall; -import static gregtech.api.enums.OrePrefixes.gem; -import static gregtech.api.enums.OrePrefixes.gemChipped; -import static gregtech.api.enums.OrePrefixes.gemFlawed; -import static gregtech.api.enums.OrePrefixes.stick; -import static gregtech.api.enums.OrePrefixes.stickLong; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; -import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.cannerRecipes; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; -import static gregtech.api.recipe.RecipeMaps.extremeNaquadahReactorFuels; -import static gregtech.api.recipe.RecipeMaps.fusionRecipes; -import static gregtech.api.recipe.RecipeMaps.hugeNaquadahReactorFuels; -import static gregtech.api.recipe.RecipeMaps.implosionRecipes; -import static gregtech.api.recipe.RecipeMaps.largeNaquadahReactorFuels; -import static gregtech.api.recipe.RecipeMaps.primitiveBlastRecipes; -import static gregtech.api.recipe.RecipeMaps.sifterRecipes; -import static gregtech.api.recipe.RecipeMaps.smallNaquadahReactorFuels; -import static gregtech.api.recipe.RecipeMaps.ultraHugeNaquadahReactorFuels; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.ADDITIVE_AMOUNT; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; -import static gregtech.api.util.GT_RecipeConstants.FUSION_THRESHOLD; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; - -import java.util.Arrays; -import java.util.List; -import java.util.Objects; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.tuple.ImmutablePair; -import org.apache.commons.lang3.tuple.Pair; - -import com.github.bartimaeusnek.bartworks.API.recipe.BartWorksRecipeMaps; -import com.github.bartimaeusnek.bartworks.common.loaders.BioCultureLoader; -import com.github.bartimaeusnek.bartworks.common.loaders.BioItemList; -import com.github.bartimaeusnek.bartworks.common.loaders.FluidLoader; -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.system.material.BW_NonMeta_MaterialItems; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.util.BioCulture; -import com.github.bartimaeusnek.bartworks.util.BioDNA; -import com.github.bartimaeusnek.bartworks.util.BioData; -import com.github.bartimaeusnek.bartworks.util.BioPlasmid; - -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.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.behaviors.Behaviour_DataOrb; - -public class AdditionalRecipes { - - private static void runBWRecipes() { - - FluidStack[] dnaFluid = { Gendustry.isModLoaded() ? FluidRegistry.getFluidStack("liquiddna", 1000) - : Materials.Biomass.getFluid(1000L) }; - - for (ItemStack stack : BioItemList.getAllPetriDishes()) { - BioData DNA = BioData.getBioDataFromNBTTag( - stack.getTagCompound() - .getCompoundTag("DNA")); - if (DNA != null) { - ItemStack Detergent = BioItemList.getOther(1); - ItemStack DNAFlask = BioItemList.getDNASampleFlask(null); - ItemStack EthanolCell = Materials.Ethanol.getCells(1); - GT_Values.RA.stdBuilder() - .itemInputs(stack, DNAFlask, Detergent, EthanolCell) - .itemOutputs( - BioItemList.getDNASampleFlask(BioDNA.convertDataToDNA(DNA)), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1L)) - .outputChances(DNA.getChance(), 100_00) - .fluidInputs(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) - .special(BioItemList.mBioLabParts[0]) - .duration(25 * SECONDS) - .eut(GT_Values.VP[3 + DNA.getTier()]) - .ignoreCollision() - .fake() - .addTo(bioLabRecipes); - } - - } - - for (ItemStack stack : BioItemList.getAllDNASampleFlasks()) { - BioData DNA = BioData.getBioDataFromNBTTag(stack.getTagCompound()); - - if (DNA != null) { - ItemStack Outp = ItemList.Tool_DataOrb.get(1L); - Behaviour_DataOrb.setDataTitle(Outp, "DNA Sample"); - Behaviour_DataOrb.setDataName(Outp, DNA.getName()); - - GT_Values.RA.stdBuilder() - .itemInputs( - stack, - FluidLoader.BioLabFluidCells[0], - FluidLoader.BioLabFluidCells[3], - ItemList.Tool_DataOrb.get(1L)) - .itemOutputs(Outp, ItemList.Cell_Empty.get(2L)) - .outputChances(DNA.getChance(), 100_00) - .fluidInputs(dnaFluid) - .special(BioItemList.mBioLabParts[1]) - .duration(25 * SECONDS) - .eut(GT_Values.VP[4 + DNA.getTier()]) - .ignoreCollision() - .fake() - .addTo(bioLabRecipes); - } - } - - for (ItemStack stack : BioItemList.getAllPlasmidCells()) { - BioData DNA = BioData.getBioDataFromNBTTag(stack.getTagCompound()); - - if (DNA != null) { - ItemStack inp = ItemList.Tool_DataOrb.get(0L); - Behaviour_DataOrb.setDataTitle(inp, "DNA Sample"); - Behaviour_DataOrb.setDataName(inp, DNA.getName()); - ItemStack inp2 = ItemList.Tool_DataOrb.get(0L); - Behaviour_DataOrb.setDataTitle(inp2, "DNA Sample"); - Behaviour_DataOrb.setDataName(inp2, BioCultureLoader.BIO_DATA_BETA_LACMATASE.getName()); - - GT_Values.RA.stdBuilder() - .itemInputs(FluidLoader.BioLabFluidCells[1], BioItemList.getPlasmidCell(null), inp, inp2) - .itemOutputs(stack, ItemList.Cell_Empty.get(1L)) - .outputChances(DNA.getChance(), 100_00) - .fluidInputs(dnaFluid) - .special(BioItemList.mBioLabParts[2]) - .duration(25 * SECONDS) - .eut(GT_Values.VP[4 + DNA.getTier()]) - .ignoreCollision() - .fake() - .addTo(bioLabRecipes); - } - } - - for (ItemStack stack : BioItemList.getAllPetriDishes()) { - BioData DNA = BioData.getBioDataFromNBTTag( - stack.getTagCompound() - .getCompoundTag("DNA")); - BioData Plasmid = BioData.getBioDataFromNBTTag( - stack.getTagCompound() - .getCompoundTag("Plasmid")); - if (!Objects.equals(DNA.getName(), Plasmid.getName())) { - GT_Values.RA.stdBuilder() - .itemInputs( - BioItemList.getPetriDish(BioCulture.getBioCulture(DNA.getName())), - BioItemList.getPlasmidCell(BioPlasmid.convertDataToPlasmid(Plasmid)), - FluidLoader.BioLabFluidCells[2]) - .itemOutputs(stack, ItemList.Cell_Empty.get(1L)) - .outputChances(Plasmid.getChance(), 100_00) - .fluidInputs(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) - .special(BioItemList.mBioLabParts[3]) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .ignoreCollision() - .fake() - .addTo(bioLabRecipes); - } - } - - ItemStack Outp = ItemList.Tool_DataOrb.get(1L); - Behaviour_DataOrb.setDataTitle(Outp, "DNA Sample"); - Behaviour_DataOrb.setDataName(Outp, "Any DNA"); - // Clonal Cellular Synthesis- [Liquid DNA] + Medium Petri Dish + Plasma Membrane + Stem Cells + Genome Data - GT_Values.RA.stdBuilder() - .itemInputs( - BioItemList.getPetriDish(null), - BioItemList.getOther(4), - ItemList.Circuit_Chip_Stemcell.get(2L), - Outp) - .itemOutputs( - BioItemList.getPetriDish(null) - .setStackDisplayName("The Culture made from DNA")) - .outputChances(75_00) - .fluidInputs(new FluidStack(dnaFluid[0].getFluid(), 8000)) - .special(BioItemList.mBioLabParts[4]) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .ignoreCollision() - .fake() - .addTo(bioLabRecipes); - - FluidStack[] easyFluids = { Materials.Water.getFluid(1000L), - FluidRegistry.getFluidStack("ic2distilledwater", 1000) }; - for (FluidStack fluidStack : easyFluids) { - for (BioCulture bioCulture : BioCulture.BIO_CULTURE_ARRAY_LIST) { - if (bioCulture.isBreedable() && bioCulture.getTier() == 0) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1), new ItemStack(Items.sugar, 64)) - .special(BioItemList.getPetriDish(bioCulture)) - .fluidInputs(fluidStack) - .fluidOutputs(new FluidStack(bioCulture.getFluid(), 10)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(bacterialVatRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - BioItemList.getPetriDish(null), - fluidStack.equals(Materials.Water.getFluid(1000L)) ? Materials.Water.getCells(1) - : GT_Utility.getContainersFromFluid(GT_ModHandler.getDistilledWater(1000)) - .get(0)) - .itemOutputs(BioItemList.getPetriDish(bioCulture), Materials.Empty.getCells(1)) - .outputChances(bioCulture.getChance(), 100_00) - .fluidInputs(new FluidStack(bioCulture.getFluid(), 1000)) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_HV) - .ignoreCollision() - .fake() - .addTo(bioLabRecipes); - } - } - } - - List> liquidFuels = Arrays.asList( - ImmutablePair.of(Materials.PhosphoricAcid, 36), - ImmutablePair.of(Materials.DilutedHydrochloricAcid, 14), - ImmutablePair.of(Materials.HypochlorousAcid, 30), - ImmutablePair.of(Materials.HydrofluoricAcid, 40), - ImmutablePair.of(Materials.HydrochloricAcid, 28), - ImmutablePair.of(Materials.NitricAcid, 24), - ImmutablePair.of(Materials.Mercury, 32), - ImmutablePair.of(Materials.DilutedSulfuricAcid, 9), - ImmutablePair.of(Materials.SulfuricAcid, 18), - ImmutablePair.of(Materials.AceticAcid, 11), - ImmutablePair.of(WerkstoffLoader.FormicAcid.getBridgeMaterial(), 40)); - for (Pair fuel : liquidFuels) { - GT_Values.RA.stdBuilder() - .itemInputs( - fuel.getLeft() - .getCells(1)) - .itemOutputs(Materials.Empty.getCells(1)) - .metadata(FUEL_VALUE, fuel.getRight()) - .addTo(BartWorksRecipeMaps.acidGenFuels); - } - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Redstone, 1)) - .itemOutputs(Materials.Empty.getCells(1)) - .metadata(FUEL_VALUE, 10) - .addTo(BartWorksRecipeMaps.acidGenFuels); - } - - @SuppressWarnings("deprecation") - public static void run() { - runBWRecipes(); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.RawAdemicSteel.get(dust)) - .itemOutputs(WerkstoffLoader.AdemicSteel.get(dust)) - .duration(1 * SECONDS) - .eut(TierEU.RECIPE_LV) - .metadata(ADDITIVE_AMOUNT, 4) - .addTo(implosionRecipes); - - // Thorium/Yttrium Glas - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.YttriumOxide.get(dustSmall, 2), WerkstoffLoader.Thorianit.get(dustSmall, 2)) - .itemOutputs(new ItemStack(ItemRegistry.bw_glasses[0], 1, 12)) - .fluidInputs(Materials.Glass.getMolten(144)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_IV) - .metadata(COIL_HEAT, 3663) - .addTo(blastFurnaceRecipes); - - // Thorianite recipes - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Thorianit.get(crushedPurified)) - .itemOutputs( - WerkstoffLoader.Thorianit.get(dust), - WerkstoffLoader.Thorianit.get(dust), - WerkstoffLoader.Thorianit.get(dust), - Materials.Thorium.getDust(1), - Materials.Thorium.getDust(1), - WerkstoffLoader.Thorium232.get(dust)) - .outputChances(7000, 1300, 700, 600, 300, 100) - .duration(20 * SECONDS) - .eut((int) TierEU.RECIPE_IV) - .addTo(sifterRecipes); - - // 3ThO2 + 4Al = 3Th + 2Al2O3 - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Thorianit.get(dust, 9), Materials.Aluminium.getDust(4)) - .itemOutputs(Materials.Thorium.getDust(3), Materials.Aluminiumoxide.getDust(10)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // ThO2 + 2Mg = Th + 2MgO - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Thorianit.get(dust, 3), Materials.Magnesium.getDust(2)) - .itemOutputs(Materials.Thorium.getDust(1), Materials.Magnesia.getDust(4)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Thorianit.get(crushed), ItemList.Crop_Drop_Thorium.get(9)) - .itemOutputs(WerkstoffLoader.Thorianit.get(crushedPurified, 4)) - .fluidInputs(Materials.Water.getFluid(1000)) - .fluidOutputs(Materials.Thorium.getMolten(144)) - .duration(4 * SECONDS + 16 * TICKS) - .eut(24) - .addTo(UniversalChemical); - - // Prasiolite - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(dust, Materials.Quartzite, 40L), Materials.Amethyst.getDust(10)) - .itemOutputs(WerkstoffLoader.Prasiolite.get(OrePrefixes.gemFlawed, 20)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, 500) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(dust, Materials.Quartzite, 40L)) - .itemOutputs(Materials.Amethyst.getDust(10)) - .duration(40 * SECONDS) - .eut(0) - .metadata(ADDITIVE_AMOUNT, 6) - .addTo(primitiveBlastRecipes); - - // Cubic Circonia - // 2Y + 3O = Y2O3 - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Yttrium.getDust(2), GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(WerkstoffLoader.YttriumOxide.get(dust, 5)) - .fluidInputs(Materials.Oxygen.getGas(3000)) - .duration(3 * MINUTES + 24 * SECONDS + 16 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Zr + 2O =Y22O3= ZrO2 - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Zirconium.get(dust, 10), WerkstoffLoader.YttriumOxide.get(dust, 0)) - .itemOutputs(WerkstoffLoader.CubicZirconia.get(gemFlawed, 40)) - .fluidInputs(Materials.Oxygen.getGas(20000)) - .duration(48 * MINUTES) - .eut(TierEU.RECIPE_HV) - .metadata(COIL_HEAT, 2953) - .noOptimize() - .addTo(blastFurnaceRecipes); - - // Tellurium - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(crushed, Materials.Lead, 10L), GT_Utility.getIntegratedCircuit(17)) - .itemOutputs(Materials.Lead.getIngots(10), Materials.Tellurium.getNuggets(20)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_MV) - .metadata(COIL_HEAT, 722) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Plutonium.getMolten(48), Materials.Beryllium.getMolten(48)) - .fluidOutputs(WerkstoffLoader.Californium.getMolten(48)) - .duration(12 * SECONDS) - .eut(49152) - .metadata(FUSION_THRESHOLD, 480_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(WerkstoffLoader.Californium.getMolten(32), WerkstoffLoader.Calcium.getMolten(720)) - .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(720)) - .duration(24 * SECONDS) - .eut(49152) - .metadata(FUSION_THRESHOLD, 600_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.LiquidAir.getFluid(100000000)) - .fluidOutputs( - Materials.Nitrogen.getGas(78084000), - Materials.Oxygen.getGas(20946000), - Materials.Argon.getGas(934000), - Materials.CarbonDioxide.getGas(40700), - WerkstoffLoader.Neon.getFluidOrGas(1818), - Materials.Helium.getGas(524), - Materials.Methane.getGas(180), - WerkstoffLoader.Krypton.getFluidOrGas(114), - Materials.Hydrogen.getGas(55), - WerkstoffLoader.Xenon.getFluidOrGas(9)) - .duration(6 * MINUTES + 15 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(distillationTowerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.MagnetoResonaticDust.get(dust)) - .itemOutputs(WerkstoffLoader.MagnetoResonaticDust.get(gemChipped, 9)) - .outputChances(90_00) - .fluidInputs(WerkstoffLoader.Neon.getFluidOrGas(1000)) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(autoclaveRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.MagnetoResonaticDust.get(dust)) - .itemOutputs(WerkstoffLoader.MagnetoResonaticDust.get(gem)) - .fluidInputs(WerkstoffLoader.Krypton.getFluidOrGas(1000)) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(autoclaveRecipes); - - // Milk - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .itemOutputs( - Materials.Sugar.getDustSmall(21), - Materials.Calcium.getDustTiny(1), - Materials.Magnesium.getDustTiny(1), - Materials.Potassium.getDustTiny(1), - Materials.Sodium.getDustTiny(4), - Materials.Phosphorus.getDustTiny(1)) - .outputChances(100_00, 100_00, 10_00, 100_00, 10_00, 10_00) - .fluidInputs(Materials.Milk.getFluid(10000)) - .fluidOutputs(Materials.Water.getFluid(8832)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_MV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Tiberium.get(bolt)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 12_500) - .addTo(smallNaquadahReactorFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Tiberium.get(stick)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 62_500) - .addTo(largeNaquadahReactorFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Tiberium.get(stickLong)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 125_000) - .addTo(hugeNaquadahReactorFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Tiberium.get(stick)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 31_250) - .addTo(extremeNaquadahReactorFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Tiberium.get(stickLong)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 125_000) - .addTo(ultraHugeNaquadahReactorFuels); - - LoadItemContainers.run(); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Large_Fluid_Cell_TungstenSteel.get(1L), WerkstoffLoader.Tiberium.get(dust, 3)) - .itemOutputs(BW_NonMeta_MaterialItems.TiberiumCell_1.get(1L)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(cannerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - BW_NonMeta_MaterialItems.TiberiumCell_1.get(2L), - GT_OreDictUnificator.get(stick, Materials.TungstenSteel, 4L)) - .itemOutputs(BW_NonMeta_MaterialItems.TiberiumCell_2.get(1L)) - .duration(5 * SECONDS) - .eut(400) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - BW_NonMeta_MaterialItems.TiberiumCell_1.get(4L), - GT_OreDictUnificator.get(stickLong, Materials.TungstenSteel, 6L)) - .itemOutputs(BW_NonMeta_MaterialItems.TiberiumCell_4.get(1L)) - .duration(7 * SECONDS + 10 * TICKS) - .eut(400) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - BW_NonMeta_MaterialItems.TiberiumCell_2.get(2L), - GT_OreDictUnificator.get(stick, Materials.TungstenSteel, 4L)) - .itemOutputs(BW_NonMeta_MaterialItems.TiberiumCell_4.get(1L)) - .duration(5 * SECONDS) - .eut(400) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.NaquadahCell_1.get(32L), - GT_OreDictUnificator.get(stickLong, Materials.TungstenSteel, 64L), - GT_OreDictUnificator.get(stickLong, Materials.TungstenSteel, 64L), - GT_OreDictUnificator.get(stickLong, Materials.TungstenSteel, 64L), - WerkstoffLoader.Tiberium.get(dust, 64), - WerkstoffLoader.Tiberium.get(dust, 64)) - .itemOutputs(BW_NonMeta_MaterialItems.TheCoreCell.get(1L)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - - GregTech_API.sAfterGTPostload.add(new AddSomeRecipes()); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/DownTierLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/DownTierLoader.java deleted file mode 100644 index f07faa79a8..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/DownTierLoader.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.processingLoaders; - -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -import com.github.bartimaeusnek.bartworks.util.BW_Util; -import com.github.bartimaeusnek.bartworks.util.StreamUtils; - -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Recipe; - -public class DownTierLoader { - - public static void run() { - RecipeMap.ALL_RECIPE_MAPS.values() - .stream() - .filter(map -> StreamUtils.filterVisualMaps(map) && map != RecipeMaps.fusionRecipes) - .forEach(map -> { - Set newRecipes = new HashSet<>(); - Set toRem = new HashSet<>(); - map.getAllRecipes() - .stream() - .filter(recipe -> Objects.nonNull(recipe) && recipe.mEUt > 128) - .forEach(recipe -> { - toRem.add(recipe); - newRecipes.add(BW_Util.copyAndSetTierToNewRecipe(recipe, (byte) 2)); - }); - map.getBackend() - .removeRecipes(toRem); - newRecipes.forEach(map::add); - }); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/LoadItemContainers.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/LoadItemContainers.java deleted file mode 100644 index 67de5d5f5b..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/processingLoaders/LoadItemContainers.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.processingLoaders; - -import com.github.bartimaeusnek.bartworks.system.material.BW_NonMeta_MaterialItems; - -import gregtech.api.items.GT_RadioactiveCellIC_Item; -import gregtech.common.items.GT_DepletetCell_Item; - -public class LoadItemContainers { - - public static void run() { - BW_NonMeta_MaterialItems.Depleted_Tiberium_1 - .set(new GT_DepletetCell_Item("TiberiumcellDep", "Fuel Rod (Depleted Tiberium)", 1)); - BW_NonMeta_MaterialItems.Depleted_Tiberium_2 - .set(new GT_DepletetCell_Item("Double_TiberiumcellDep", "Dual Fuel Rod (Depleted Tiberium)", 1)); - BW_NonMeta_MaterialItems.Depleted_Tiberium_4 - .set(new GT_DepletetCell_Item("Quad_TiberiumcellDep", "Quad Fuel Rod (Depleted Tiberium)", 1)); - BW_NonMeta_MaterialItems.TiberiumCell_1.set( - new GT_RadioactiveCellIC_Item( - "Tiberiumcell", - "Fuel Rod (Tiberium)", - 1, - 50000, - 2F, - 1, - 0.5F, - BW_NonMeta_MaterialItems.Depleted_Tiberium_1.get(1), - false)); - BW_NonMeta_MaterialItems.TiberiumCell_2.set( - new GT_RadioactiveCellIC_Item( - "Double_Tiberiumcell", - "Dual Fuel Rod (Tiberium)", - 2, - 50000, - 2F, - 1, - 0.5F, - BW_NonMeta_MaterialItems.Depleted_Tiberium_2.get(1), - false)); - BW_NonMeta_MaterialItems.TiberiumCell_4.set( - new GT_RadioactiveCellIC_Item( - "Quad_Tiberiumcell", - "Quad Fuel Rod (Tiberium)", - 4, - 50000, - 2F, - 1, - 0.5F, - BW_NonMeta_MaterialItems.Depleted_Tiberium_4.get(1), - false)); - BW_NonMeta_MaterialItems.Depleted_TheCoreCell - .set(new GT_DepletetCell_Item("Core_Reactor_CellDep", "Depleted \"The Core\" Cell", 32)); - BW_NonMeta_MaterialItems.TheCoreCell.set( - new GT_RadioactiveCellIC_Item( - "Core_Reactor_Cell", - "\"The Core\" Cell", - 32, - 100000, - 8F, - 32, - 1F, - BW_NonMeta_MaterialItems.Depleted_TheCoreCell.get(1), - false)); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/IWerkstoffRunnable.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/IWerkstoffRunnable.java deleted file mode 100644 index d409084406..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/IWerkstoffRunnable.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; - -public interface IWerkstoffRunnable { - - void run(Werkstoff werkstoff); -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/AspectLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/AspectLoader.java deleted file mode 100644 index a61bc55d59..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/AspectLoader.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.Mods.Thaumcraft; - -import java.util.Objects; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; -import com.github.bartimaeusnek.bartworks.util.Pair; -import com.github.bartimaeusnek.bartworks.util.log.DebugLog; -import com.github.bartimaeusnek.crossmod.thaumcraft.util.ThaumcraftHandler; - -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TC_Aspects; - -public class AspectLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (!Thaumcraft.isModLoaded()) { - return; - } - - for (OrePrefixes enabledOrePrefixes : WerkstoffLoader.ENABLED_ORE_PREFIXES) { - if (werkstoff.hasItemType(enabledOrePrefixes)) { - if (enabledOrePrefixes.mMaterialAmount >= 3628800L || enabledOrePrefixes == OrePrefixes.ore) { - DebugLog.log( - "OrePrefix: " + enabledOrePrefixes.name() - + " mMaterialAmount: " - + enabledOrePrefixes.mMaterialAmount / 3628800L); - if (Objects.nonNull(WerkstoffLoader.items.get(enabledOrePrefixes))) - ThaumcraftHandler.AspectAdder.addAspectViaBW( - werkstoff.get(enabledOrePrefixes), - werkstoff.getTCAspects( - enabledOrePrefixes == OrePrefixes.ore ? 1 - : (int) (enabledOrePrefixes.mMaterialAmount / 3628800L))); - } else if (enabledOrePrefixes.mMaterialAmount >= 0L - && Objects.nonNull(WerkstoffLoader.items.get(enabledOrePrefixes))) - ThaumcraftHandler.AspectAdder - .addAspectViaBW(werkstoff.get(enabledOrePrefixes), new Pair<>(TC_Aspects.PERDITIO.mAspect, 1)); - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/BlockLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/BlockLoader.java deleted file mode 100644 index 1262ab2499..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/BlockLoader.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.OrePrefixes.block; -import static gregtech.api.enums.OrePrefixes.cellMolten; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.plate; -import static gregtech.api.recipe.RecipeMaps.cutterRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.UniversalArcFurnace; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.TierEU; -import gregtech.api.recipe.RecipeCategories; -import gregtech.api.util.GT_RecipeConstants; - -public class BlockLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (!werkstoff.hasItemType(block)) return; - if (werkstoff.hasItemType(ingot)) { - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(block)) - .itemOutputs(werkstoff.get(ingot, 9)) - .duration(16 * TICKS) - .eut(90) - .metadata(GT_RecipeConstants.RECYCLE, true) - .addTo(UniversalArcFurnace); - } - if (werkstoff.hasItemType(cellMolten)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(block)) - .fluidOutputs(werkstoff.getMolten(1296)) - .recipeCategory(RecipeCategories.fluidExtractorRecycling) - .duration(14 * SECONDS + 8 * TICKS) - .eut(8) - .addTo(fluidExtractionRecipes); - - } - if (werkstoff.hasItemType(plate)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(block)) - .itemOutputs(werkstoff.get(plate, 9)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 10L, - 1L)) - .eut(TierEU.RECIPE_LV) - .addTo(cutterRecipes); - - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CasingLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CasingLoader.java deleted file mode 100644 index 9ec4030943..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CasingLoader.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.OrePrefixes.blockCasing; -import static gregtech.api.enums.OrePrefixes.blockCasingAdvanced; -import static gregtech.api.enums.OrePrefixes.gearGt; -import static gregtech.api.enums.OrePrefixes.gearGtSmall; -import static gregtech.api.enums.OrePrefixes.plank; -import static gregtech.api.enums.OrePrefixes.plate; -import static gregtech.api.enums.OrePrefixes.plateDouble; -import static gregtech.api.enums.OrePrefixes.screw; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import com.github.bartimaeusnek.bartworks.system.material.BW_GT_MaterialReference; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; - -public class CasingLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (werkstoff == BW_GT_MaterialReference.Wood /* || werkstoff == BW_GT_MaterialReference.WoodSealed */) { - addCasingRecipes(werkstoff, plank); - } else { - if (!werkstoff.hasGenerationFeature(blockCasing) || !werkstoff.doesOreDictedItemExists(plate) - || !werkstoff.doesOreDictedItemExists(screw) - || !werkstoff.doesOreDictedItemExists(gearGtSmall) - || !werkstoff.doesOreDictedItemExists(gearGt) - || !werkstoff.doesOreDictedItemExists(plateDouble)) return; - - addCasingRecipes(werkstoff, plateDouble); - } - } - - private static void addCasingRecipes(Werkstoff werkstoff, OrePrefixes reboltedCasingsOuterStuff) { - GT_ModHandler.addCraftingRecipe( - werkstoff.get(blockCasing), - new Object[] { "PSP", "PGP", "PSP", 'P', werkstoff.get(plate), 'S', werkstoff.get(screw), 'G', - werkstoff.get(gearGtSmall) }); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(plate, 6), werkstoff.get(screw, 2), werkstoff.get(gearGtSmall)) - .itemOutputs(werkstoff.get(blockCasing)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - - GT_ModHandler.addCraftingRecipe( - werkstoff.get(blockCasingAdvanced), - new Object[] { "PSP", "PGP", "PSP", 'P', werkstoff.get(reboltedCasingsOuterStuff), 'S', - werkstoff.get(screw), 'G', werkstoff.get(gearGt) }); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(reboltedCasingsOuterStuff, 6), werkstoff.get(screw, 2), werkstoff.get(gearGt)) - .itemOutputs(werkstoff.get(blockCasingAdvanced)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CellLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CellLoader.java deleted file mode 100644 index 602e91a008..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CellLoader.java +++ /dev/null @@ -1,331 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.enums.OrePrefixes.capsule; -import static gregtech.api.enums.OrePrefixes.cell; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; -import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; -import com.github.bartimaeusnek.bartworks.util.Pair; - -import gregtech.api.enums.Element; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TextureSet; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.ISubTagContainer; -import gregtech.api.recipe.RecipeCategories; -import gregtech.api.recipe.RecipeMaps; -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.common.items.behaviors.Behaviour_DataOrb; - -public class CellLoader implements IWerkstoffRunnable { - - @Override - @SuppressWarnings("unchecked") - public void run(Werkstoff werkstoff) { - if (!werkstoff.hasItemType(cell)) return; - - if ((werkstoff.getStats() - .isElektrolysis() - || werkstoff.getStats() - .isCentrifuge()) - && !werkstoff.hasItemType(dust)) { - List flOutputs = new ArrayList<>(); - List stOutputs = new ArrayList<>(); - HashMap> tracker = new HashMap<>(); - int cells = 0; - for (Pair container : werkstoff.getContents() - .getValue() - .toArray(new Pair[0])) { - if (container.getKey() instanceof Materials) { - if ((((Materials) container.getKey()).hasCorrespondingGas() - || ((Materials) container.getKey()).hasCorrespondingFluid() - || ((Materials) container.getKey()).mIconSet == TextureSet.SET_FLUID) - && ((Materials) container.getKey()).getDust(0) == null) { - FluidStack tmpFl = ((Materials) container.getKey()).getGas(1000L * container.getValue()); - if (tmpFl == null || tmpFl.getFluid() == null) { - tmpFl = ((Materials) container.getKey()).getFluid(1000L * container.getValue()); - } - flOutputs.add(tmpFl); - if (flOutputs.size() > 1) { - if (!tracker.containsKey(container.getKey())) { - stOutputs.add(((Materials) container.getKey()).getCells(container.getValue())); - tracker.put(container.getKey(), new Pair<>(container.getValue(), stOutputs.size() - 1)); - } else { - stOutputs.add( - ((Materials) container.getKey()).getCells( - tracker.get(container.getKey()) - .getKey() + container.getValue())); - stOutputs.remove( - tracker.get(container.getKey()) - .getValue() + 1); - } - cells += container.getValue(); - } - } else { - if (((Materials) container.getKey()).getDust(container.getValue()) == null) continue; - if (!tracker.containsKey(container.getKey())) { - stOutputs.add(((Materials) container.getKey()).getDust(container.getValue())); - tracker.put(container.getKey(), new Pair<>(container.getValue(), stOutputs.size() - 1)); - } else { - stOutputs.add( - ((Materials) container.getKey()).getDust( - tracker.get(container.getKey()) - .getKey() + container.getValue())); - stOutputs.remove( - tracker.get(container.getKey()) - .getValue() + 1); - } - } - } else if (container.getKey() instanceof Werkstoff) { - if (((Werkstoff) container.getKey()).getStats() - .isGas() || ((Werkstoff) container.getKey()).hasItemType(cell)) { - FluidStack tmpFl = ((Werkstoff) container.getKey()).getFluidOrGas(1000 * container.getValue()); - if (tmpFl == null || tmpFl.getFluid() == null) { - tmpFl = ((Werkstoff) container.getKey()).getFluidOrGas(1000 * container.getValue()); - } - flOutputs.add(tmpFl); - if (flOutputs.size() > 1) { - if (!tracker.containsKey(container.getKey())) { - stOutputs.add(((Werkstoff) container.getKey()).get(cell, container.getValue())); - tracker.put(container.getKey(), new Pair<>(container.getValue(), stOutputs.size() - 1)); - } else { - stOutputs.add( - ((Werkstoff) container.getKey()).get( - cell, - tracker.get(container.getKey()) - .getKey() + container.getValue())); - stOutputs.remove( - tracker.get(container.getKey()) - .getValue() + 1); - } - cells += container.getValue(); - } - } else { - if (!((Werkstoff) container.getKey()).hasItemType(dust)) continue; - if (!tracker.containsKey(container.getKey())) { - stOutputs.add(((Werkstoff) container.getKey()).get(dust, container.getValue())); - tracker.put(container.getKey(), new Pair<>(container.getValue(), stOutputs.size() - 1)); - } else { - stOutputs.add( - ((Werkstoff) container.getKey()).get( - dust, - tracker.get(container.getKey()) - .getKey() + container.getValue())); - stOutputs.remove( - tracker.get(container.getKey()) - .getValue() + 1); - } - } - } - } - ItemStack input = werkstoff.get(cell); - input.stackSize = 1; - - int cellEmpty = cells - 1; - - stOutputs.add(Materials.Empty.getCells(-cellEmpty)); - if (werkstoff.getStats() - .isElektrolysis()) - RecipeMaps.electrolyzerRecipes.add( - new GT_Recipe( - true, - new ItemStack[] { input, cellEmpty > 0 ? Materials.Empty.getCells(cellEmpty) : null }, - stOutputs.toArray(new ItemStack[0]), - null, - null, - new FluidStack[] { null }, - new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, - (int) Math.max( - 1L, - Math.abs( - werkstoff.getStats() - .getProtons() - * werkstoff.getContents() - .getValue() - .size())), - Math.min( - 4, - werkstoff.getContents() - .getValue() - .size()) - * 30, - 0)); - if (werkstoff.getStats() - .isCentrifuge()) - RecipeMaps.centrifugeRecipes.add( - new GT_Recipe( - true, - new ItemStack[] { input, cellEmpty > 0 ? Materials.Empty.getCells(cellEmpty) : null }, - stOutputs.toArray(new ItemStack[0]), - null, - null, - new FluidStack[] { null }, - new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, - (int) Math.max( - 1L, - Math.abs( - werkstoff.getStats() - .getMass() - * werkstoff.getContents() - .getValue() - .size())), - Math.min( - 4, - werkstoff.getContents() - .getValue() - .size()) - * 5, - 0)); - } - - // Tank "Recipe" - GT_Utility.addFluidContainerData( - new FluidContainerRegistry.FluidContainerData( - new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(werkstoff)), 1000), - werkstoff.get(cell), - Materials.Empty.getCells(1))); - FluidContainerRegistry.registerFluidContainer( - werkstoff.getFluidOrGas(1) - .getFluid(), - werkstoff.get(cell), - Materials.Empty.getCells(1)); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(1)) - .itemOutputs(werkstoff.get(cell)) - .fluidInputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(werkstoff)), 1000)) - .duration(16 * TICKS) - .eut(2) - .addTo(fluidCannerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(cell)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidOutputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(werkstoff)), 1000)) - .duration(16 * TICKS) - .eut(2) - .addTo(fluidCannerRecipes); - - if (Forestry.isModLoaded()) { - FluidContainerRegistry.FluidContainerData emptyData = new FluidContainerRegistry.FluidContainerData( - new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(werkstoff)), 1000), - werkstoff.get(capsule), - GT_ModHandler.getModItem(Forestry.ID, "waxCapsule", 1), - true); - GT_Utility.addFluidContainerData(emptyData); - FluidContainerRegistry.registerFluidContainer(emptyData); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(capsule)) - .fluidOutputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.fluids.get(werkstoff)), 1000)) - .duration(16 * TICKS) - .eut(2) - .addTo(fluidCannerRecipes); - } - - if (werkstoff.hasItemType(dust)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dust)) - .fluidOutputs(werkstoff.getFluidOrGas(1000)) - .duration( - werkstoff.getStats() - .getMass()) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .recipeCategory(RecipeCategories.fluidExtractorRecycling) - .addTo(fluidExtractionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(werkstoff.get(dust)) - .fluidInputs(werkstoff.getFluidOrGas(1000)) - .duration( - (int) werkstoff.getStats() - .getMass()) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - } - - if (Werkstoff.Types.ELEMENT.equals(werkstoff.getType())) { - Materials werkstoffBridgeMaterial = null; - boolean ElementSet = false; - for (Element e : Element.values()) { - if (e.toString() - .equals(werkstoff.getToolTip())) { - werkstoffBridgeMaterial = werkstoff.getBridgeMaterial() != null ? werkstoff.getBridgeMaterial() - : new Materials( - -1, - werkstoff.getTexSet(), - 0, - 0, - 0, - false, - werkstoff.getDefaultName(), - werkstoff.getDefaultName()); - werkstoffBridgeMaterial.mElement = e; - e.mLinkedMaterials.add(werkstoffBridgeMaterial); - ElementSet = true; - werkstoff.setBridgeMaterial(werkstoffBridgeMaterial); - break; - } - } - if (!ElementSet) return; - - GT_OreDictUnificator.addAssociation(cell, werkstoffBridgeMaterial, werkstoff.get(cell), false); - - ItemStack scannerOutput = ItemList.Tool_DataOrb.get(1L); - Behaviour_DataOrb.setDataTitle(scannerOutput, "Elemental-Scan"); - Behaviour_DataOrb.setDataName(scannerOutput, werkstoff.getToolTip()); - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(cell)) - .itemOutputs(scannerOutput) - .special(ItemList.Tool_DataOrb.get(1L)) - .duration(werkstoffBridgeMaterial.getMass() * 8192) - .eut(TierEU.RECIPE_LV) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(scannerFakeRecipes); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CraftingMaterialLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CraftingMaterialLoader.java deleted file mode 100644 index 91fe34e89f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CraftingMaterialLoader.java +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.OrePrefixes.bolt; -import static gregtech.api.enums.OrePrefixes.cellMolten; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.dustSmall; -import static gregtech.api.enums.OrePrefixes.dustTiny; -import static gregtech.api.enums.OrePrefixes.gearGt; -import static gregtech.api.enums.OrePrefixes.gearGtSmall; -import static gregtech.api.enums.OrePrefixes.gem; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.plate; -import static gregtech.api.enums.OrePrefixes.ring; -import static gregtech.api.enums.OrePrefixes.rotor; -import static gregtech.api.enums.OrePrefixes.screw; -import static gregtech.api.enums.OrePrefixes.stick; -import static gregtech.api.enums.OrePrefixes.wireFine; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.cutterRecipes; -import static gregtech.api.recipe.RecipeMaps.extruderRecipes; -import static gregtech.api.recipe.RecipeMaps.latheRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.wiremillRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.common.GT_Proxy; - -public class CraftingMaterialLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (werkstoff.hasItemType(screw)) { - int tVoltageMultiplier = werkstoff.getStats() - .getMeltingPoint() >= 2800 ? 60 : 15; - - // bolt - - GT_Values.RA.stdBuilder() - .itemInputs( - werkstoff.hasItemType(gem) ? werkstoff.get(gem) : werkstoff.get(ingot), - ItemList.Shape_Extruder_Bolt.get(0L)) - .itemOutputs(werkstoff.get(bolt, 8)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 2L, - 1)) - .eut(8 * tVoltageMultiplier) - .addTo(extruderRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(stick)) - .itemOutputs(werkstoff.get(bolt, 4)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 2L, - 1L)) - .eut(4) - .addTo(cutterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(bolt)) - .itemOutputs(werkstoff.get(dustTiny, 1)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - // screw - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(bolt)) - .itemOutputs(werkstoff.get(screw)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() / 8L, - 1L)) - .eut(4) - .addTo(latheRecipes); - - GT_ModHandler.addCraftingRecipe( - werkstoff.get(screw), - GT_Proxy.tBits, - new Object[] { "fX", "X ", 'X', werkstoff.get(bolt) }); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(screw)) - .itemOutputs(werkstoff.get(dustTiny, 1)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - if (werkstoff.hasItemType(gem)) return; - - // ring - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot), ItemList.Shape_Extruder_Ring.get(0L)) - .itemOutputs(werkstoff.get(ring, 4)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 2L, - 1)) - .eut(6 * tVoltageMultiplier) - .addTo(extruderRecipes); - - GT_ModHandler.addCraftingRecipe( - werkstoff.get(ring), - GT_Proxy.tBits, - new Object[] { "h ", "fX", 'X', werkstoff.get(stick) }); - - // Gear - GT_ModHandler.addCraftingRecipe( - werkstoff.get(gearGt), - GT_Proxy.tBits, - new Object[] { "SPS", "PwP", "SPS", 'P', werkstoff.get(plate), 'S', werkstoff.get(stick) }); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot, 4), ItemList.Shape_Extruder_Gear.get(0L)) - .itemOutputs(werkstoff.get(gearGt)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 5L, - 1)) - .eut(8 * tVoltageMultiplier) - .addTo(extruderRecipes); - // wireFine - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot), ItemList.Shape_Extruder_Wire.get(0L)) - .itemOutputs(werkstoff.get(wireFine, 8)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 1.5F, - 1F)) - .eut(8 * tVoltageMultiplier) - .addTo(extruderRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot), GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(werkstoff.get(wireFine, 8)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass(), - 1)) - .eut(8 * tVoltageMultiplier) - .addTo(wiremillRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(stick), GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(werkstoff.get(wireFine, 4)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 0.5F, - 1F)) - .eut(8 * tVoltageMultiplier) - .addTo(wiremillRecipes); - - // smallGear - if (WerkstoffLoader.smallGearShape != null) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot), WerkstoffLoader.smallGearShape.get(0L)) - .itemOutputs(werkstoff.get(gearGtSmall)) - .duration( - (int) werkstoff.getStats() - .getMass()) - .eut(8 * tVoltageMultiplier) - .addTo(extruderRecipes); - - } - - GT_ModHandler.addCraftingRecipe( - werkstoff.get(gearGtSmall), - GT_Proxy.tBits, - new Object[] { " S ", "hPx", " S ", 'S', werkstoff.get(stick), 'P', werkstoff.get(plate) }); - - // Rotor - GT_ModHandler.addCraftingRecipe( - werkstoff.get(rotor), - GT_Proxy.tBits, - new Object[] { "PhP", "SRf", "PdP", 'P', werkstoff.get(plate), 'R', werkstoff.get(ring), 'S', - werkstoff.get(screw) }); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(plate, 4), werkstoff.get(ring)) - .itemOutputs(werkstoff.get(rotor)) - .fluidInputs(Materials.Tin.getMolten(32)) - .duration(12 * SECONDS) - .eut(24) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(plate, 4), werkstoff.get(ring)) - .itemOutputs(werkstoff.get(rotor)) - .fluidInputs(Materials.Lead.getMolten(48)) - .duration(12 * SECONDS) - .eut(24) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(plate, 4), werkstoff.get(ring)) - .itemOutputs(werkstoff.get(rotor)) - .fluidInputs(Materials.SolderingAlloy.getMolten(16)) - .duration(12 * SECONDS) - .eut(24) - .addTo(assemblerRecipes); - - if (WerkstoffLoader.rotorShape != null) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot, 5), WerkstoffLoader.rotorShape.get(0L)) - .itemOutputs(werkstoff.get(rotor)) - .duration(10 * SECONDS) - .eut(60) - .addTo(extruderRecipes); - - } - - // molten -> metal - if (werkstoff.hasItemType(cellMolten)) { - - /* - * !! No more hardcoded gear, etc. recipe gen, now must go through GenerationFeatures() !! - * GT_Values.RA.addFluidSolidifierRecipe( ItemList.Shape_Mold_Gear.get(0L), werkstoff.getMolten(576), - * werkstoff.get(gearGt), 128, 8); GT_Values.RA.addFluidSolidifierRecipe( - * ItemList.Shape_Mold_Gear_Small.get(0L), werkstoff.getMolten(144), werkstoff.get(gearGtSmall), 16, 8); - * if (WerkstoffLoader.ringMold != null) GT_Values.RA.addFluidSolidifierRecipe( - * WerkstoffLoader.ringMold.get(0L), werkstoff.getMolten(36), werkstoff.get(ring), 100, 4 * - * tVoltageMultiplier); if (WerkstoffLoader.boltMold != null) GT_Values.RA.addFluidSolidifierRecipe( - * WerkstoffLoader.boltMold.get(0L), werkstoff.getMolten(18), werkstoff.get(bolt), 50, 2 * - * tVoltageMultiplier); if (WerkstoffLoader.rotorMold != null) GT_Values.RA.addFluidSolidifierRecipe( - * WerkstoffLoader.rotorMold.get(0L), werkstoff.getMolten(612), werkstoff.get(rotor), 100, 60); - */ - } - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gearGt)) - .itemOutputs(werkstoff.get(dust, 4)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gearGtSmall)) - .itemOutputs(werkstoff.get(dust, 1)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(rotor)) - .itemOutputs(werkstoff.get(dust, 4), werkstoff.get(dustSmall)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ring)) - .itemOutputs(werkstoff.get(dustSmall, 1)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CrushedLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CrushedLoader.java deleted file mode 100644 index 44ba058954..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/CrushedLoader.java +++ /dev/null @@ -1,302 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.enums.OrePrefixes.crushed; -import static gregtech.api.enums.OrePrefixes.crushedCentrifuged; -import static gregtech.api.enums.OrePrefixes.crushedPurified; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.dustImpure; -import static gregtech.api.enums.OrePrefixes.dustPure; -import static gregtech.api.enums.OrePrefixes.dustSmall; -import static gregtech.api.enums.OrePrefixes.gem; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.nugget; -import static gregtech.api.enums.OrePrefixes.ore; -import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; -import static gregtech.api.recipe.RecipeMaps.electroMagneticSeparatorRecipes; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.oreWasherRecipes; -import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SubTag; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; - -public class CrushedLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (!werkstoff.hasItemType(ore) || !werkstoff.hasItemType(dust)) return; - - if (werkstoff.hasItemType(ingot) && !werkstoff.getStats() - .isBlastFurnace()) { - if (Werkstoff.Types.ELEMENT.equals(werkstoff.getType())) { - GT_ModHandler.addSmeltingRecipe(werkstoff.get(crushed), werkstoff.get(nugget, 10)); - GT_ModHandler.addSmeltingRecipe(werkstoff.get(crushedPurified), werkstoff.get(nugget, 10)); - GT_ModHandler.addSmeltingRecipe(werkstoff.get(crushedCentrifuged), werkstoff.get(nugget, 10)); - } else { - GT_ModHandler.addSmeltingRecipe(werkstoff.get(crushed), werkstoff.get(ingot)); - GT_ModHandler.addSmeltingRecipe(werkstoff.get(crushedPurified), werkstoff.get(ingot)); - GT_ModHandler.addSmeltingRecipe(werkstoff.get(crushedCentrifuged), werkstoff.get(ingot)); - } - GT_ModHandler.addSmeltingRecipe(werkstoff.get(dustImpure), werkstoff.get(ingot)); - GT_ModHandler.addSmeltingRecipe(werkstoff.get(dustPure), werkstoff.get(ingot)); - GT_ModHandler.addSmeltingRecipe(werkstoff.get(dust), werkstoff.get(ingot)); - } - - GT_ModHandler - .addCraftingRecipe(werkstoff.get(dustImpure), new Object[] { "h ", "W ", 'W', werkstoff.get(crushed) }); - GT_ModHandler.addCraftingRecipe( - werkstoff.get(dustPure), - new Object[] { "h ", "W ", 'W', werkstoff.get(crushedPurified) }); - GT_ModHandler.addCraftingRecipe( - werkstoff.get(dust), - new Object[] { "h ", "W ", 'W', werkstoff.get(crushedCentrifuged) }); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(crushed)) - .itemOutputs(werkstoff.get(dustImpure)) - .duration(10 * TICKS) - .eut(16) - .addTo(hammerRecipes); - - RA.stdBuilder() - .itemInputs(werkstoff.get(crushed)) - .itemOutputs(werkstoff.get(dustImpure), werkstoff.getOreByProduct(0, dust)) - .outputChances(100_00, 10_00) - .eut(2) - .duration(20 * SECONDS) - .addTo(maceratorRecipes); - - RA.stdBuilder() - .itemInputs(werkstoff.get(crushed)) - .itemOutputs( - werkstoff.get(crushedPurified), - werkstoff.getOreByProduct(0, dust), - GT_OreDictUnificator.get(dust, Materials.Stone, 1L)) - .outputChances(100_00, 11_11, 100_00) - .fluidInputs(GT_ModHandler.getWater(1000)) - .duration(25 * SECONDS) - .eut(16) - .addTo(oreWasherRecipes); - - RA.stdBuilder() - .itemInputs(werkstoff.get(crushed)) - .itemOutputs( - werkstoff.get(crushedPurified), - werkstoff.getOreByProduct(0, dust), - GT_OreDictUnificator.get(dust, Materials.Stone, 1L)) - .outputChances(100_00, 11_11, 100_00) - .fluidInputs(GT_ModHandler.getDistilledWater(200)) - .duration(15 * SECONDS) - .eut(16) - .addTo(oreWasherRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(crushed)) - .itemOutputs( - werkstoff.get(crushedCentrifuged), - werkstoff.getOreByProduct(1, dust), - GT_OreDictUnificator.get(dust, Materials.Stone, 1L)) - .outputChances(100_00, 11_11, 100_00) - .duration(25 * SECONDS) - .eut(48) - .addTo(thermalCentrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(crushedPurified)) - .itemOutputs(werkstoff.get(dustPure)) - .duration(10 * TICKS) - .eut(16) - .addTo(hammerRecipes); - - RA.stdBuilder() - .itemInputs(werkstoff.get(crushedPurified)) - .itemOutputs(werkstoff.get(dustPure), werkstoff.getOreByProduct(1, dust)) - .outputChances(100_00, 10_00) - .eut(2) - .duration(20 * SECONDS) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(crushedPurified)) - .itemOutputs(werkstoff.get(crushedCentrifuged), werkstoff.getOreByProduct(1, dust)) - .outputChances(100_00, 11_11) - .duration(25 * SECONDS) - .eut(48) - .addTo(thermalCentrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(crushedCentrifuged)) - .itemOutputs(werkstoff.get(dust)) - .duration(10 * TICKS) - .eut(16) - .addTo(hammerRecipes); - - RA.stdBuilder() - .itemInputs(werkstoff.get(crushedCentrifuged)) - .itemOutputs(werkstoff.get(dust), werkstoff.getOreByProduct(2, dust)) - .outputChances(100_00, 10_00) - .eut(2) - .duration(20 * SECONDS) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustImpure)) - .itemOutputs(werkstoff.get(dust), werkstoff.getOreByProduct(0, dust)) - .outputChances(100_00, 11_11) - .duration( - Math.max( - 1L, - werkstoff.getStats() - .getMass() * 8L)) - .eut(5) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustPure)) - .itemOutputs(werkstoff.get(dust), werkstoff.getOreByProduct(1, dust)) - .outputChances(100_00, 11_11) - .duration( - Math.max( - 1L, - werkstoff.getStats() - .getMass() * 8L)) - .eut(5) - .addTo(centrifugeRecipes); - - if (werkstoff.contains(SubTag.CRYSTALLISABLE)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustPure)) - .itemOutputs(werkstoff.get(gem)) - .outputChances(9000) - .fluidInputs(Materials.Water.getFluid(200L)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(24) - .addTo(autoclaveRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustImpure)) - .itemOutputs(werkstoff.get(gem)) - .outputChances(9000) - .fluidInputs(Materials.Water.getFluid(200L)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(24) - .addTo(autoclaveRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustPure)) - .itemOutputs(werkstoff.get(gem)) - .outputChances(9500) - .fluidInputs(gregtech.api.util.GT_ModHandler.getDistilledWater(200L)) - .duration(1 * MINUTES + 15 * SECONDS) - .eut(24) - .addTo(autoclaveRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustImpure)) - .itemOutputs(werkstoff.get(gem)) - .outputChances(9500) - .fluidInputs(gregtech.api.util.GT_ModHandler.getDistilledWater(200L)) - .duration(1 * MINUTES + 15 * SECONDS) - .eut(24) - .addTo(autoclaveRecipes); - - } - if (werkstoff.contains(SubTag.WASHING_MERCURY)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(crushed)) - .itemOutputs( - werkstoff.get(crushedPurified), - werkstoff.getOreByProduct(1, dust), - GT_OreDictUnificator.get(dust, Materials.Stone, 1L)) - .outputChances(10000, 7000, 4000) - .fluidInputs(Materials.Mercury.getFluid(1000L)) - .duration(40 * SECONDS) - .eut(8) - .addTo(chemicalBathRecipes); - - } - if (werkstoff.contains(SubTag.WASHING_SODIUMPERSULFATE)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(crushed)) - .itemOutputs( - werkstoff.get(crushedPurified), - werkstoff.getOreByProduct(1, dust), - GT_OreDictUnificator.get(dust, Materials.Stone, 1L)) - .outputChances(10000, 7000, 4000) - .fluidInputs(Materials.SodiumPersulfate.getFluid(100L)) - .duration(40 * SECONDS) - .eut(8) - .addTo(chemicalBathRecipes); - - } - if (werkstoff.contains(SubTag.ELECTROMAGNETIC_SEPERATION_GOLD)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustPure)) - .itemOutputs( - werkstoff.get(dust), - GT_OreDictUnificator.get(dustSmall, Materials.Gold, 1L), - GT_OreDictUnificator.get(nugget, Materials.Gold, 1L)) - .outputChances(10000, 4000, 2000) - .duration(20 * SECONDS) - .eut(24) - .addTo(electroMagneticSeparatorRecipes); - - } else if (werkstoff.contains(SubTag.ELECTROMAGNETIC_SEPERATION_IRON)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustPure)) - .itemOutputs( - werkstoff.get(dust), - GT_OreDictUnificator.get(dustSmall, Materials.Iron, 1L), - GT_OreDictUnificator.get(nugget, Materials.Iron, 1L)) - .outputChances(10000, 4000, 2000) - .duration(20 * SECONDS) - .eut(24) - .addTo(electroMagneticSeparatorRecipes); - - } else if (werkstoff.contains(SubTag.ELECTROMAGNETIC_SEPERATION_NEODYMIUM)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustPure)) - .itemOutputs( - werkstoff.get(dust), - GT_OreDictUnificator.get(dustSmall, Materials.Neodymium, 1L), - GT_OreDictUnificator.get(nugget, Materials.Neodymium, 1L)) - .outputChances(10000, 4000, 2000) - .duration(20 * SECONDS) - .eut(24) - .addTo(electroMagneticSeparatorRecipes); - - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/DustLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/DustLoader.java deleted file mode 100644 index 088c4bb55b..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/DustLoader.java +++ /dev/null @@ -1,529 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.OrePrefixes.block; -import static gregtech.api.enums.OrePrefixes.cell; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.dustSmall; -import static gregtech.api.enums.OrePrefixes.dustTiny; -import static gregtech.api.enums.OrePrefixes.gem; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.ingotHot; -import static gregtech.api.enums.OrePrefixes.nugget; -import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.packagerRecipes; -import static gregtech.api.recipe.RecipeMaps.primitiveBlastRecipes; -import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.ADDITIVE_AMOUNT; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; -import com.github.bartimaeusnek.bartworks.util.Pair; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TextureSet; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.ISubTagContainer; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeConstants; -import gregtech.api.util.GT_Utility; - -public class DustLoader implements IWerkstoffRunnable { - - @Override - @SuppressWarnings("unchecked") - public void run(Werkstoff werkstoff) { - if (werkstoff.hasItemType(dust)) { - List flOutputs = new ArrayList<>(); - List stOutputs = new ArrayList<>(); - HashMap> tracker = new HashMap<>(); - int cells = 0; - - if (werkstoff.getGenerationFeatures() - .hasMixerRecipes() - || werkstoff.getStats() - .isElektrolysis() - || werkstoff.getStats() - .isCentrifuge() - || werkstoff.getGenerationFeatures() - .hasChemicalRecipes()) { - for (Pair container : werkstoff.getContents() - .getValue() - .toArray(new Pair[0])) { - final ISubTagContainer key = container.getKey(); - final int value = container.getValue(); - if (key instanceof Materials materialKey) { - if ((materialKey.getGas(0) != null || materialKey.getFluid(0) != null - || materialKey.mIconSet == TextureSet.SET_FLUID) && materialKey.getDust(0) == null) { - FluidStack tmpFl = materialKey.getGas(1000L * value); - if (tmpFl == null || tmpFl.getFluid() == null) { - tmpFl = materialKey.getFluid(1000L * value); - } - flOutputs.add(tmpFl); - if (flOutputs.size() > 1) { - if (!tracker.containsKey(key)) { - stOutputs.add(materialKey.getCells(value)); - tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); - } else { - stOutputs.add( - materialKey.getCells( - tracker.get(key) - .getKey() + value)); - stOutputs.remove( - tracker.get(key) - .getValue() + 1); - } - cells += value; - } - } else { - if (materialKey.getDust(value) == null) { - if (materialKey.getCells(value) == null - || materialKey.getMolten(0) == null && materialKey.getSolid(0) == null) continue; - FluidStack tmpFl = materialKey.getMolten(1000L * value); - if (tmpFl == null || tmpFl.getFluid() == null) { - tmpFl = materialKey.getSolid(1000L * value); - } - flOutputs.add(tmpFl); - if (flOutputs.size() > 1) { - if (!tracker.containsKey(key)) { - stOutputs.add(materialKey.getCells(value)); - tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); - } else { - stOutputs.add( - materialKey.getCells( - tracker.get(key) - .getKey() + value)); - stOutputs.remove( - tracker.get(key) - .getValue() + 1); - } - cells += value; - } - } - if (!tracker.containsKey(key)) { - stOutputs.add(materialKey.getDust(value)); - tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); - } else { - stOutputs.add( - materialKey.getDust( - tracker.get(key) - .getKey() + value)); - stOutputs.remove( - tracker.get(key) - .getValue() + 1); - } - } - } else if (key instanceof Werkstoff werkstoffKey) { - if (werkstoffKey.getStats() - .isGas() || werkstoffKey.hasItemType(cell)) { - FluidStack tmpFl = werkstoffKey.getFluidOrGas(1000 * value); - if (tmpFl == null || tmpFl.getFluid() == null) { - tmpFl = werkstoffKey.getFluidOrGas(1000 * value); - } - flOutputs.add(tmpFl); - if (flOutputs.size() > 1) { - if (!tracker.containsKey(key)) { - stOutputs.add(werkstoffKey.get(cell, value)); - tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); - } else { - stOutputs.add( - werkstoffKey.get( - cell, - tracker.get(key) - .getKey() + value)); - stOutputs.remove( - tracker.get(key) - .getValue() + 1); - } - cells += value; - } - } else { - if (!werkstoffKey.hasItemType(dust)) continue; - if (!tracker.containsKey(key)) { - stOutputs.add(werkstoffKey.get(dust, value)); - tracker.put(key, new Pair<>(value, stOutputs.size() - 1)); - } else { - stOutputs.add( - werkstoffKey.get( - dust, - tracker.get(key) - .getKey() + value)); - stOutputs.remove( - tracker.get(key) - .getValue() + 1); - } - } - } - } - ItemStack input = werkstoff.get(dust); - input.stackSize = werkstoff.getContents() - .getKey(); - if (werkstoff.getStats() - .isElektrolysis()) { - GT_Recipe tRecipe = new GT_Recipe( - true, - new ItemStack[] { input, cells > 0 ? Materials.Empty.getCells(cells) : null }, - stOutputs.toArray(new ItemStack[0]), - null, - null, - new FluidStack[] { null }, - new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, - (int) Math.max( - 1L, - Math.abs( - werkstoff.getStats() - .getProtons() - / werkstoff.getContents() - .getValue() - .size())), - Math.min( - 4, - werkstoff.getContents() - .getValue() - .size()) - * 30, - 0); - RecipeMaps.electrolyzerRecipes.add(tRecipe); - RecipeMaps.electrolyzerNonCellRecipes.add(tRecipe); - } - if (werkstoff.getStats() - .isCentrifuge()) { - RecipeMaps.centrifugeRecipes.add( - new GT_Recipe( - true, - new ItemStack[] { input, cells > 0 ? Materials.Empty.getCells(cells) : null }, - stOutputs.toArray(new ItemStack[0]), - null, - null, - new FluidStack[] { null }, - new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, - (int) Math.max( - 1L, - Math.abs( - werkstoff.getStats() - .getMass() - / werkstoff.getContents() - .getValue() - .size())), - Math.min( - 4, - werkstoff.getContents() - .getValue() - .size()) - * 5, - 0)); - GT_Recipe tRecipe = new GT_Recipe( - false, - stOutputs.toArray(new ItemStack[0]), - new ItemStack[] { input }, - null, - null, - new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, - null, - (int) Math.max( - 1L, - Math.abs( - werkstoff.getStats() - .getProtons() - / werkstoff.getContents() - .getValue() - .size())), - Math.min( - 4, - werkstoff.getContents() - .getValue() - .size()) - * 30, - 0); - RecipeMaps.centrifugeNonCellRecipes.add(tRecipe); - } - if (werkstoff.getGenerationFeatures() - .hasChemicalRecipes()) { - if (cells > 0) stOutputs.add(Materials.Empty.getCells(cells)); - GT_Values.RA.stdBuilder() - .itemInputs(stOutputs.toArray(new ItemStack[0])) - .itemOutputs(input) - .fluidInputs(flOutputs.toArray(new FluidStack[0])) - .duration( - (int) Math.max( - 1L, - Math.abs( - werkstoff.getStats() - .getProtons() - / werkstoff.getContents() - .getValue() - .size()))) - .eut( - Math.min( - 4, - werkstoff.getContents() - .getValue() - .size()) - * 30) - .addTo(GT_RecipeConstants.UniversalChemical); - } - if (werkstoff.getGenerationFeatures() - .hasMixerRecipes()) { - if (cells > 0) stOutputs.add(Materials.Empty.getCells(cells)); - short circuitID = werkstoff.getMixCircuit(); - ItemStack circuit = circuitID == -1 ? null : GT_Utility.getIntegratedCircuit(circuitID); - if (circuit != null) stOutputs.add(circuit); - RecipeMaps.mixerRecipes.add( - new GT_Recipe( - true, - stOutputs.toArray(new ItemStack[0]), - new ItemStack[] { input }, - null, - null, - new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, - null, - (int) Math.max( - 1L, - Math.abs( - werkstoff.getStats() - .getMass() - / werkstoff.getContents() - .getValue() - .size())), - Math.min( - 4, - werkstoff.getContents() - .getValue() - .size()) - * 5, - 0)); - GT_Recipe tRecipe = new GT_Recipe( - false, - stOutputs.toArray(new ItemStack[0]), - new ItemStack[] { input }, - null, - null, - new FluidStack[] { flOutputs.size() > 0 ? flOutputs.get(0) : null }, - null, - (int) Math.max( - 1L, - Math.abs( - werkstoff.getStats() - .getProtons() - / werkstoff.getContents() - .getValue() - .size())), - Math.min( - 4, - werkstoff.getContents() - .getValue() - .size()) - * 30, - 0); - RecipeMaps.mixerNonCellRecipes.add(tRecipe); - } - } - - GT_ModHandler.addCraftingRecipe( - werkstoff.get(dust), - new Object[] { "TTT", "TTT", "TTT", 'T', werkstoff.get(dustTiny) }); - GT_ModHandler.addCraftingRecipe( - werkstoff.get(dust), - new Object[] { "TT ", "TT ", 'T', WerkstoffLoader.getCorrespondingItemStack(dustSmall, werkstoff) }); - GT_ModHandler.addCraftingRecipe( - WerkstoffLoader.getCorrespondingItemStack(dustSmall, werkstoff, 4), - new Object[] { " T ", 'T', werkstoff.get(dust) }); - GT_ModHandler.addCraftingRecipe( - WerkstoffLoader.getCorrespondingItemStack(dustTiny, werkstoff, 9), - new Object[] { "T ", 'T', werkstoff.get(dust) }); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustTiny, 9), ItemList.Schematic_Dust.get(0L)) - .itemOutputs(werkstoff.get(dust)) - .duration(5 * SECONDS) - .eut(4) - .addTo(packagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustSmall, 4), ItemList.Schematic_Dust.get(0L)) - .itemOutputs(werkstoff.get(dust)) - .duration(5 * SECONDS) - .eut(4) - .addTo(packagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustTiny, 9), ItemList.Schematic_3by3.get(0L)) - .itemOutputs(werkstoff.get(dust)) - .duration(5 * SECONDS) - .eut(4) - .addTo(packagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustSmall, 4), ItemList.Schematic_2by2.get(0L)) - .itemOutputs(werkstoff.get(dust)) - .duration(5 * SECONDS) - .eut(4) - .addTo(packagerRecipes); - - if (werkstoff.hasItemType(ingot) && !werkstoff.getStats() - .isBlastFurnace()) { - GT_ModHandler.addSmeltingRecipe(werkstoff.get(dust), werkstoff.get(ingot)); - GT_ModHandler.addSmeltingRecipe(werkstoff.get(dustTiny), werkstoff.get(nugget)); - } else if (werkstoff.hasItemType(ingot) && werkstoff.getStats() - .isBlastFurnace() - && werkstoff.getStats() - .getMeltingPoint() != 0) { - if (werkstoff.contains(WerkstoffLoader.ANAEROBE_SMELTING)) { - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dust), GT_Utility.getIntegratedCircuit(11)) - .itemOutputs( - werkstoff.getStats() - .getMeltingPoint() < 1750 ? werkstoff.get(ingot) : werkstoff.get(ingotHot)) - .fluidInputs(Materials.Nitrogen.getGas(1000)) - .duration( - Math.max( - werkstoff.getStats() - .getMass() / 40L, - 1L) - * werkstoff.getStats() - .getMeltingPoint()) - .eut( - werkstoff.getStats() - .getMeltingVoltage()) - .metadata( - COIL_HEAT, - werkstoff.getStats() - .getMeltingPoint()) - .addTo(blastFurnaceRecipes); - - } else if (werkstoff.contains(WerkstoffLoader.NOBLE_GAS_SMELTING)) { - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dust), GT_Utility.getIntegratedCircuit(11)) - .itemOutputs( - werkstoff.getStats() - .getMeltingPoint() < 1750 ? werkstoff.get(ingot) : werkstoff.get(ingotHot)) - .fluidInputs(Materials.Argon.getGas(1000)) - .duration( - Math.max( - werkstoff.getStats() - .getMass() / 40L, - 1L) - * werkstoff.getStats() - .getMeltingPoint()) - .eut( - werkstoff.getStats() - .getMeltingVoltage()) - .metadata( - COIL_HEAT, - werkstoff.getStats() - .getMeltingPoint()) - .addTo(blastFurnaceRecipes); - - } else { - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dust), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs( - werkstoff.getStats() - .getMeltingPoint() < 1750 ? werkstoff.get(ingot) : werkstoff.get(ingotHot)) - .duration( - Math.max( - werkstoff.getStats() - .getMass() / 40L, - 1L) - * werkstoff.getStats() - .getMeltingPoint()) - .eut( - werkstoff.getStats() - .getMeltingVoltage()) - .metadata( - COIL_HEAT, - werkstoff.getStats() - .getMeltingPoint()) - .addTo(blastFurnaceRecipes); - - if (werkstoff.getStats() - .getMeltingPoint() <= 1000) { - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dust)) - .itemOutputs(werkstoff.get(ingot)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() / 40L, - 1L) * werkstoff.getStats() - .getMeltingPoint()) - .eut(0) - .metadata(ADDITIVE_AMOUNT, 9) - .addTo(primitiveBlastRecipes); - } - } - } - - if (werkstoff.getStats() - .isBlastFurnace() - && werkstoff.getStats() - .getMeltingPoint() > 1750) { - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingotHot)) - .itemOutputs(werkstoff.get(ingot)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 3L, - 1L)) - .eut(TierEU.RECIPE_MV) - .addTo(vacuumFreezerRecipes); - } - - if (werkstoff.hasItemType(ingot)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot)) - .itemOutputs(werkstoff.get(dust)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(nugget)) - .itemOutputs(werkstoff.get(dustTiny)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - } - if (werkstoff.hasItemType(ingot) || werkstoff.hasItemType(gem)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(block)) - .itemOutputs(werkstoff.get(dust, 9)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/GemLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/GemLoader.java deleted file mode 100644 index 8c08160588..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/GemLoader.java +++ /dev/null @@ -1,296 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.OrePrefixes.block; -import static gregtech.api.enums.OrePrefixes.crushedPurified; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.dustSmall; -import static gregtech.api.enums.OrePrefixes.dustTiny; -import static gregtech.api.enums.OrePrefixes.gem; -import static gregtech.api.enums.OrePrefixes.gemChipped; -import static gregtech.api.enums.OrePrefixes.gemExquisite; -import static gregtech.api.enums.OrePrefixes.gemFlawed; -import static gregtech.api.enums.OrePrefixes.gemFlawless; -import static gregtech.api.enums.OrePrefixes.lens; -import static gregtech.api.enums.OrePrefixes.ore; -import static gregtech.api.enums.OrePrefixes.plate; -import static gregtech.api.recipe.RecipeMaps.compressorRecipes; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.implosionRecipes; -import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; -import static gregtech.api.recipe.RecipeMaps.latheRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.sifterRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.ADDITIVE_AMOUNT; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; -import com.github.bartimaeusnek.bartworks.util.BW_ColorUtil; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.ITexture; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; - -public class GemLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (werkstoff.hasItemType(gem)) { - if (werkstoff.getGenerationFeatures() - .hasSifterRecipes() || werkstoff.hasItemType(ore) && werkstoff.hasItemType(dust)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gem, 9)) - .itemOutputs(werkstoff.get(block)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(block)) - .itemOutputs(werkstoff.get(gem, 9)) - .duration(5 * SECONDS) - .eut(24) - .addTo(hammerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(crushedPurified)) - .itemOutputs( - werkstoff.get(gemExquisite), - werkstoff.get(gemFlawless), - werkstoff.get(gem), - werkstoff.get(gemFlawed), - werkstoff.get(gemChipped), - werkstoff.get(dust)) - .outputChances(200, 1000, 2500, 2000, 4000, 5000) - .duration(40 * SECONDS) - .eut(16) - .addTo(sifterRecipes); - - } - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemExquisite)) - .itemOutputs(werkstoff.get(dust, 4)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemFlawless)) - .itemOutputs(werkstoff.get(dust, 2)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gem)) - .itemOutputs(werkstoff.get(dust)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemFlawed)) - .itemOutputs(werkstoff.get(dustSmall, 2)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemChipped)) - .itemOutputs(werkstoff.get(dustSmall)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - GT_ModHandler.addCraftingRecipe( - werkstoff.get(gemFlawless, 2), - 0, - new Object[] { "h ", "W ", 'W', werkstoff.get(gemExquisite) }); - GT_ModHandler.addCraftingRecipe( - werkstoff.get(gem, 2), - 0, - new Object[] { "h ", "W ", 'W', werkstoff.get(gemFlawless) }); - GT_ModHandler.addCraftingRecipe( - werkstoff.get(gemFlawed, 2), - 0, - new Object[] { "h ", "W ", 'W', werkstoff.get(gem) }); - GT_ModHandler.addCraftingRecipe( - werkstoff.get(gemChipped, 2), - 0, - new Object[] { "h ", "W ", 'W', werkstoff.get(gemFlawed) }); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemExquisite)) - .itemOutputs(werkstoff.get(gemFlawless, 2)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(16) - .addTo(hammerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemFlawless)) - .itemOutputs(werkstoff.get(gem, 2)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(16) - .addTo(hammerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gem)) - .itemOutputs(werkstoff.get(gemFlawed, 2)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(16) - .addTo(hammerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemFlawed)) - .itemOutputs(werkstoff.get(gemChipped, 2)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(16) - .addTo(hammerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemChipped)) - .itemOutputs(werkstoff.get(dustTiny)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(16) - .addTo(hammerRecipes); - - if (!werkstoff.contains(WerkstoffLoader.NO_BLAST)) { - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemFlawless, 3)) - .itemOutputs(werkstoff.get(gemExquisite), GT_OreDictUnificator.get(dustTiny, Materials.DarkAsh, 2)) - .duration(20 * TICKS) - .eut(TierEU.RECIPE_LV) - .metadata(ADDITIVE_AMOUNT, 8) - .addTo(implosionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gem, 3)) - .itemOutputs(werkstoff.get(gemFlawless), GT_OreDictUnificator.get(dustTiny, Materials.DarkAsh, 2)) - .duration(20 * TICKS) - .eut(TierEU.RECIPE_LV) - .metadata(ADDITIVE_AMOUNT, 8) - .addTo(implosionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemFlawed, 3)) - .itemOutputs(werkstoff.get(gem), GT_OreDictUnificator.get(dustTiny, Materials.DarkAsh, 2)) - .duration(20 * TICKS) - .eut(TierEU.RECIPE_LV) - .metadata(ADDITIVE_AMOUNT, 8) - .addTo(implosionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemChipped, 3)) - .itemOutputs(werkstoff.get(gemFlawed), GT_OreDictUnificator.get(dustTiny, Materials.DarkAsh, 2)) - .duration(20 * TICKS) - .eut(TierEU.RECIPE_LV) - .metadata(ADDITIVE_AMOUNT, 8) - .addTo(implosionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dust, 4)) - .itemOutputs(werkstoff.get(gem, 3), GT_OreDictUnificator.get(dustTiny, Materials.DarkAsh, 8)) - .duration(20 * TICKS) - .eut(TierEU.RECIPE_LV) - .metadata(ADDITIVE_AMOUNT, 24) - .addTo(implosionRecipes); - } - - if (werkstoff.hasItemType(plate)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(plate)) - .itemOutputs(werkstoff.get(lens), werkstoff.get(dustSmall)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(latheRecipes); - - } - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemExquisite)) - .itemOutputs(werkstoff.get(lens), werkstoff.get(dust, 2)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_LV) - .addTo(latheRecipes); - - final ITexture texture = TextureFactory.of( - Textures.BlockIcons.MACHINE_CASINGS[2][0], - TextureFactory.of(Textures.BlockIcons.OVERLAY_LENS, werkstoff.getRGBA(), false)); - GregTech_API.registerCover( - werkstoff.get(lens), - texture, - new gregtech.common.covers.GT_Cover_Lens( - BW_ColorUtil.getDyeFromColor(werkstoff.getRGBA()).mIndex, - texture)); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(lens)) - .itemOutputs(werkstoff.get(dustSmall, 3)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - for (ItemStack is : OreDictionary - .getOres("craftingLens" + BW_ColorUtil.getDyeFromColor(werkstoff.getRGBA()).mName.replace(" ", ""))) { - is.stackSize = 0; - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemChipped, 3), is) - .itemOutputs(werkstoff.get(gemFlawed, 1)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(laserEngraverRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemFlawed, 3), is) - .itemOutputs(werkstoff.get(gem, 1)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(laserEngraverRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gem, 3), is) - .itemOutputs(werkstoff.get(gemFlawless, 1)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(laserEngraverRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gemFlawless, 3), is) - .itemOutputs(werkstoff.get(gemExquisite, 1)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(laserEngraverRecipes); - - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MetalLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MetalLoader.java deleted file mode 100644 index d969ff056f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MetalLoader.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.OrePrefixes.block; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.recipe.RecipeMaps.compressorRecipes; -import static gregtech.api.recipe.RecipeMaps.extruderRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.recipe.RecipeCategories; -import gregtech.api.recipe.RecipeMaps; - -public class MetalLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (werkstoff.hasItemType(ingot)) { - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot, 9)) - .itemOutputs(werkstoff.get(block)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot, 9), ItemList.Shape_Extruder_Block.get(0)) - .itemOutputs(werkstoff.get(block)) - .duration( - (int) werkstoff.getStats() - .getMass()) - .eut( - 8 * werkstoff.getStats() - .getMeltingPoint() >= 2800 ? 60 : 15) - .addTo(extruderRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot, 9), ItemList.Shape_Mold_Block.get(0L)) - .itemOutputs(werkstoff.get(block)) - .duration( - (int) (werkstoff.getStats() - .getMass() / 2)) - .eut( - 4 * werkstoff.getStats() - .getMeltingPoint() >= 2800 ? 60 : 15) - .recipeCategory(RecipeCategories.alloySmelterMolding) - .addTo(RecipeMaps.alloySmelterRecipes); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MoltenCellLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MoltenCellLoader.java deleted file mode 100644 index 86cc6aa732..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MoltenCellLoader.java +++ /dev/null @@ -1,377 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.enums.OrePrefixes.block; -import static gregtech.api.enums.OrePrefixes.bolt; -import static gregtech.api.enums.OrePrefixes.capsuleMolten; -import static gregtech.api.enums.OrePrefixes.cellMolten; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.dustSmall; -import static gregtech.api.enums.OrePrefixes.dustTiny; -import static gregtech.api.enums.OrePrefixes.gearGt; -import static gregtech.api.enums.OrePrefixes.gearGtSmall; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.nugget; -import static gregtech.api.enums.OrePrefixes.plate; -import static gregtech.api.enums.OrePrefixes.plateDouble; -import static gregtech.api.enums.OrePrefixes.ring; -import static gregtech.api.enums.OrePrefixes.rotor; -import static gregtech.api.enums.OrePrefixes.screw; -import static gregtech.api.enums.OrePrefixes.stick; -import static gregtech.api.enums.OrePrefixes.stickLong; -import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import java.util.Objects; - -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.recipe.RecipeCategories; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -public class MoltenCellLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (!werkstoff.hasItemType(cellMolten)) { - return; - } - - if (!werkstoff.hasItemType(ingot)) { - if (!werkstoff.hasItemType(dust)) { - return; - } - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dust)) - .fluidOutputs(werkstoff.getMolten(144)) - .duration(15 * SECONDS) - .eut(2) - .recipeCategory(RecipeCategories.fluidExtractorRecycling) - .addTo(fluidExtractionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustSmall)) - .fluidOutputs(werkstoff.getMolten(36)) - .duration(15 * SECONDS) - .eut(2) - .recipeCategory(RecipeCategories.fluidExtractorRecycling) - .addTo(fluidExtractionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(dustTiny)) - .fluidOutputs(werkstoff.getMolten(16)) - .duration(15 * SECONDS) - .eut(2) - .recipeCategory(RecipeCategories.fluidExtractorRecycling) - .addTo(fluidExtractionRecipes); - - } else { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot)) - .fluidOutputs(werkstoff.getMolten(144)) - .duration(15 * SECONDS) - .eut(2) - .recipeCategory(RecipeCategories.fluidExtractorRecycling) - .addTo(fluidExtractionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(nugget)) - .fluidOutputs(werkstoff.getMolten(16)) - .duration(15 * SECONDS) - .eut(2) - .recipeCategory(RecipeCategories.fluidExtractorRecycling) - .addTo(fluidExtractionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Ingot.get(0)) - .itemOutputs(werkstoff.get(ingot)) - .fluidInputs(werkstoff.getMolten(144)) - .duration( - (int) werkstoff.getStats() - .getMass()) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Nugget.get(0)) - .itemOutputs(werkstoff.get(nugget)) - .fluidInputs(werkstoff.getMolten(16)) - .duration( - (int) ((double) werkstoff.getStats() - .getMass() / 9D)) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Block.get(0)) - .itemOutputs(werkstoff.get(block)) - .fluidInputs(werkstoff.getMolten(1296)) - .duration( - (int) werkstoff.getStats() - .getMass() * 9) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - if (!werkstoff.hasItemType(plate)) { - return; - } - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(stickLong)) - .fluidOutputs(werkstoff.getMolten(144)) - .duration(15 * SECONDS) - .eut(2) - .recipeCategory(RecipeCategories.fluidExtractorRecycling) - .addTo(fluidExtractionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(plate)) - .fluidOutputs(werkstoff.getMolten(144)) - .duration(15 * SECONDS) - .eut(2) - .recipeCategory(RecipeCategories.fluidExtractorRecycling) - .addTo(fluidExtractionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(stick)) - .fluidOutputs(werkstoff.getMolten(72)) - .duration(15 * SECONDS) - .eut(2) - .recipeCategory(RecipeCategories.fluidExtractorRecycling) - .addTo(fluidExtractionRecipes); - } - - if (werkstoff.getGenerationFeatures() - .hasMetalCraftingSolidifierRecipes()) { - - if (!werkstoff.hasItemType(plate)) { - return; - } - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Rod_Long.get(0)) - .itemOutputs(werkstoff.get(stickLong)) - .fluidInputs(werkstoff.getMolten(144)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass(), - 1L)) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Rod.get(0)) - .itemOutputs(werkstoff.get(stick)) - .fluidInputs(werkstoff.getMolten(72)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() / 2, - 1L)) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Plate.get(0)) - .itemOutputs(werkstoff.get(plate)) - .fluidInputs(werkstoff.getMolten(144)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass(), - 1L)) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - } - - if (werkstoff.getGenerationFeatures() - .hasMetaSolidifierRecipes()) { - if (!werkstoff.hasItemType(screw)) { - return; - } - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Screw.get(0)) - .itemOutputs(werkstoff.get(screw)) - .fluidInputs(werkstoff.getMolten(18)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() / 8, - 1L)) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Gear.get(0)) - .itemOutputs(werkstoff.get(gearGt)) - .fluidInputs(werkstoff.getMolten(576)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() / 4, - 1L)) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Gear_Small.get(0)) - .itemOutputs(werkstoff.get(gearGtSmall)) - .fluidInputs(werkstoff.getMolten(144)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass(), - 1L)) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Bolt.get(0)) - .itemOutputs(werkstoff.get(bolt)) - .fluidInputs(werkstoff.getMolten(18)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() / 8, - 1L)) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Ring.get(0)) - .itemOutputs(werkstoff.get(ring)) - .fluidInputs(werkstoff.getMolten(36)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() / 4, - 1L)) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - // No Spring Molds - - if (WerkstoffLoader.rotorMold == null) { - return; - } - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Rotor.get(0)) - .itemOutputs(werkstoff.get(rotor)) - .fluidInputs(werkstoff.getMolten(612)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 4.25, - 1L)) - .eut( - werkstoff.getStats() - .getMass() > 128 ? 64 : 30) - .addTo(fluidSolidifierRecipes); - - } - - if (werkstoff.getGenerationFeatures() - .hasMultipleMetalSolidifierRecipes() && !werkstoff.hasItemType(plateDouble)) { - // No multiple plate molds - return; - } - - // Tank "Recipe" - final FluidContainerRegistry.FluidContainerData data = new FluidContainerRegistry.FluidContainerData( - new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(werkstoff)), 144), - werkstoff.get(cellMolten), - Materials.Empty.getCells(1)); - FluidContainerRegistry - .registerFluidContainer(werkstoff.getMolten(144), werkstoff.get(cellMolten), Materials.Empty.getCells(1)); - GT_Utility.addFluidContainerData(data); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(1)) - .itemOutputs(werkstoff.get(cellMolten)) - .fluidInputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(werkstoff)), 144)) - .duration(2 * TICKS) - .eut(2) - .addTo(fluidCannerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(cellMolten)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidOutputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(werkstoff)), 144)) - .duration(2 * TICKS) - .eut(2) - .addTo(fluidCannerRecipes); - - if (!Forestry.isModLoaded()) return; - - final FluidContainerRegistry.FluidContainerData emptyData = new FluidContainerRegistry.FluidContainerData( - new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(werkstoff)), 144), - werkstoff.get(capsuleMolten), - GT_ModHandler.getModItem(Forestry.ID, "refractoryEmpty", 1)); - FluidContainerRegistry.registerFluidContainer( - werkstoff.getMolten(144), - werkstoff.get(capsuleMolten), - GT_ModHandler.getModItem(Forestry.ID, "refractoryEmpty", 1)); - GT_Utility.addFluidContainerData(emptyData); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(capsuleMolten)) - .fluidOutputs(new FluidStack(Objects.requireNonNull(WerkstoffLoader.molten.get(werkstoff)), 144)) - .duration(2 * TICKS) - .eut(2) - .addTo(fluidCannerRecipes); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MultipleMetalLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MultipleMetalLoader.java deleted file mode 100644 index 5975b7b898..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/MultipleMetalLoader.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.plateDense; -import static gregtech.api.enums.OrePrefixes.plateDouble; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class MultipleMetalLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (werkstoff.hasItemType(plateDense)) { - RecipeMaps.benderRecipes.add( - new GT_Recipe( - true, - new ItemStack[] { werkstoff.get(ingot, 2), GT_Utility.getIntegratedCircuit(2) }, - new ItemStack[] { werkstoff.get(plateDouble) }, - null, - null, - null, - null, - (int) Math.max( - werkstoff.getStats() - .getMass() * 2, - 1L), - 60, - 0)); - GregTech_API.registerCover( - werkstoff.get(plateDouble), - TextureFactory.of(werkstoff.getTexSet().mTextures[72], werkstoff.getRGBA(), false), - null); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(plateDouble)) - .itemOutputs(werkstoff.get(dust, 2)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/OreLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/OreLoader.java deleted file mode 100644 index 8baf05ecdc..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/OreLoader.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.enums.OrePrefixes.crushed; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.gem; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.ore; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.SubTag; -import gregtech.api.util.GT_ModHandler; - -public class OreLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (werkstoff.hasItemType(ore) && werkstoff.hasItemType(ingot) - && !werkstoff.getStats() - .isBlastFurnace()) - GT_ModHandler - .addSmeltingRecipe(WerkstoffLoader.getCorrespondingItemStack(ore, werkstoff), werkstoff.get(ingot)); - - if (werkstoff.hasItemType(ore)) { - - RA.stdBuilder() - .itemInputs(werkstoff.get(ore)) - .itemOutputs(werkstoff.hasItemType(gem) ? werkstoff.get(gem) : werkstoff.get(crushed)) - .duration(16 * TICKS) - .eut(10) - .addTo(hammerRecipes); - - RA.stdBuilder() - .itemInputs(werkstoff.get(ore)) - .itemOutputs( - werkstoff.get(crushed, 2), - werkstoff.contains(SubTag.CRYSTAL) ? werkstoff.get(gem) : werkstoff.getOreByProduct(0, dust), - Materials.Stone.getDust(1)) - .outputChances(100_00, 10_00, 50_00) - .eut(2) - .duration(20 * SECONDS) - .addTo(maceratorRecipes); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/RawOreLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/RawOreLoader.java deleted file mode 100644 index 7e03a19d29..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/RawOreLoader.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.enums.OrePrefixes.crushed; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.gem; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.rawOre; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.SubTag; -import gregtech.api.util.GT_ModHandler; - -public class RawOreLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (werkstoff.hasItemType(rawOre) && werkstoff.hasItemType(ingot) - && !werkstoff.getStats() - .isBlastFurnace()) - GT_ModHandler - .addSmeltingRecipe(WerkstoffLoader.getCorrespondingItemStack(rawOre, werkstoff), werkstoff.get(ingot)); - - if (werkstoff.hasItemType(rawOre)) { - - RA.stdBuilder() - .itemInputs(werkstoff.get(rawOre)) - .itemOutputs(werkstoff.hasItemType(gem) ? werkstoff.get(gem) : werkstoff.get(crushed)) - .duration(16 * TICKS) - .eut(10) - .addTo(hammerRecipes); - - RA.stdBuilder() - .itemInputs(werkstoff.get(rawOre)) - .itemOutputs( - werkstoff.get(crushed, 2), - werkstoff.contains(SubTag.CRYSTAL) ? werkstoff.get(gem) : werkstoff.getOreByProduct(0, dust), - Materials.Stone.getDust(1)) - .outputChances(100_00, werkstoff.getNoOfByProducts() > 0 ? 5_00 : 10_00, 50_00) - .eut(2) - .duration(20 * SECONDS) - .addTo(maceratorRecipes); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/SimpleMetalLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/SimpleMetalLoader.java deleted file mode 100644 index 88bfac24ee..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/SimpleMetalLoader.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.OrePrefixes.block; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.dustSmall; -import static gregtech.api.enums.OrePrefixes.foil; -import static gregtech.api.enums.OrePrefixes.gem; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.plate; -import static gregtech.api.enums.OrePrefixes.stick; -import static gregtech.api.enums.OrePrefixes.stickLong; -import static gregtech.api.recipe.RecipeMaps.benderRecipes; -import static gregtech.api.recipe.RecipeMaps.extruderRecipes; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.latheRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.client.textures.PrefixTextureLinker; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.TextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.GT_Proxy; - -public class SimpleMetalLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - if (werkstoff.hasItemType(plate)) { - if (werkstoff.hasItemType(gem)) { - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(gem)) - .itemOutputs(werkstoff.get(stick), werkstoff.get(dustSmall, 2)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 5L, - 1L)) - .eut(16) - .addTo(latheRecipes); - - GT_ModHandler.addCraftingRecipe( - werkstoff.get(stick, 2), - GT_Proxy.tBits, - new Object[] { "s", "X", 'X', werkstoff.get(stickLong) }); - GT_ModHandler.addCraftingRecipe( - werkstoff.get(stick), - GT_Proxy.tBits, - new Object[] { "f ", " X", 'X', werkstoff.get(gem) }); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(stick, 2)) - .itemOutputs(werkstoff.get(stickLong)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass(), - 1L)) - .eut(16) - .addTo(hammerRecipes); - - TextureSet texSet = werkstoff.getTexSet(); - ITexture texture = SideReference.Side.Client ? TextureFactory.of( - texSet.mTextures[PrefixTextureLinker.blockTexMap.getOrDefault(texSet, block.mTextureIndex)], - werkstoff.getRGBA(), - false) : TextureFactory.of(texSet.mTextures[block.mTextureIndex], werkstoff.getRGBA(), false); - GregTech_API.registerCover(werkstoff.get(plate), texture, null); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(plate)) - .itemOutputs(werkstoff.get(dust)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - return; - } - - GT_ModHandler.addCraftingRecipe( - werkstoff.get(stick, 2), - GT_Proxy.tBits, - new Object[] { "s", "X", 'X', werkstoff.get(stickLong) }); - GT_ModHandler.addCraftingRecipe( - werkstoff.get(stick), - GT_Proxy.tBits, - new Object[] { "f ", " X", 'X', werkstoff.get(ingot) }); - GT_ModHandler.addCraftingRecipe( - werkstoff.get(plate), - GT_Proxy.tBits, - new Object[] { "h", "X", "X", 'X', werkstoff.get(ingot) }); - GT_ModHandler.addCraftingRecipe( - werkstoff.get(foil, 2), - GT_Proxy.tBits, - new Object[] { "hX", 'X', werkstoff.get(plate) }); - - benderRecipes.add( - new GT_Recipe( - true, - new ItemStack[] { werkstoff.get(ingot), GT_Utility.getIntegratedCircuit(1) }, - new ItemStack[] { werkstoff.get(plate) }, - null, - null, - null, - null, - (int) Math.max( - werkstoff.getStats() - .getMass(), - 1L), - 24, - 0)); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot, 3)) - .itemOutputs(werkstoff.get(plate, 2)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass(), - 1L)) - .eut(16) - .addTo(hammerRecipes); - - GregTech_API.registerCover( - werkstoff.get(plate), - TextureFactory.of(werkstoff.getTexSet().mTextures[71], werkstoff.getRGBA(), false), - null); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot)) - .itemOutputs(werkstoff.get(stick), werkstoff.get(dustSmall, 2)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 5L, - 1L)) - .eut(16) - .addTo(latheRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(plate), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(werkstoff.get(foil, 4)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 1L, - 1L)) - .eut(24) - .addTo(benderRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot), GT_Utility.getIntegratedCircuit(10)) - .itemOutputs(werkstoff.get(foil, 4)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 2L, - 1L)) - .eut(24) - .addTo(benderRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(stick, 2)) - .itemOutputs(werkstoff.get(stickLong)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass(), - 1L)) - .eut(16) - .addTo(hammerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot), ItemList.Shape_Extruder_Plate.get(0)) - .itemOutputs(werkstoff.get(plate)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 2L, - 1L)) - .eut(45) - .addTo(extruderRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot), ItemList.Shape_Extruder_Rod.get(0)) - .itemOutputs(werkstoff.get(stick, 2)) - .duration( - (int) Math.max( - werkstoff.getStats() - .getMass() * 2L, - 1L)) - .eut(45) - .addTo(extruderRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot)) - .itemOutputs(werkstoff.get(dust)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(plate)) - .itemOutputs(werkstoff.get(dust)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(stickLong)) - .itemOutputs(werkstoff.get(dust)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(stick)) - .itemOutputs(werkstoff.get(dustSmall, 2)) - .duration(2 * TICKS) - .eut(8) - .addTo(maceratorRecipes); - - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/ToolLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/ToolLoader.java deleted file mode 100644 index 8046d200ba..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/recipe/ToolLoader.java +++ /dev/null @@ -1,603 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.recipe; - -import static gregtech.api.enums.OrePrefixes.bolt; -import static gregtech.api.enums.OrePrefixes.cellMolten; -import static gregtech.api.enums.OrePrefixes.gearGtSmall; -import static gregtech.api.enums.OrePrefixes.gem; -import static gregtech.api.enums.OrePrefixes.ingot; -import static gregtech.api.enums.OrePrefixes.plate; -import static gregtech.api.enums.OrePrefixes.plateDouble; -import static gregtech.api.enums.OrePrefixes.ring; -import static gregtech.api.enums.OrePrefixes.screw; -import static gregtech.api.enums.OrePrefixes.stick; -import static gregtech.api.enums.OrePrefixes.stickLong; -import static gregtech.api.enums.OrePrefixes.toolHeadHammer; -import static gregtech.api.enums.OrePrefixes.toolHeadSaw; -import static gregtech.api.enums.OrePrefixes.toolHeadWrench; -import static gregtech.api.enums.OrePrefixes.turbineBlade; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.extruderRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; -import static gregtech.api.recipe.RecipeMaps.formingPressRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.common.GT_Proxy; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.items.ID_MetaTool_01; - -public class ToolLoader implements IWerkstoffRunnable { - - // GTNH-Specific - public static final short SCREWDRIVER_MV = 152; - public static final short SCREWDRIVER_HV = 154; - public static final short SOLDERING_IRON_MV = 162; - public static final short SOLDERING_IRON_HV = 164; - - public void run(Werkstoff werkstoff) { - if (werkstoff.getBridgeMaterial().mDurability == 0) return; - - if (werkstoff.hasItemType(gem)) { - if (!werkstoff.getGenerationFeatures() - .isExtension()) - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.HARDHAMMER.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial().mHandleMaterial, - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "XX ", "XXS", "XX ", 'X', gem.get(werkstoff.getBridgeMaterial()), 'S', - stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(toolHeadSaw, werkstoff.getBridgeMaterial(), 1L), - GT_Proxy.tBits, - new Object[] { "GGf", 'G', gem.get(werkstoff.getBridgeMaterial()) }); - } - - if (!werkstoff.hasItemType(plate)) return; - - // Disable recipe gen with handle Material for GT Materials - if (!werkstoff.getGenerationFeatures() - .isExtension()) { - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.SCREWDRIVER.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial().mHandleMaterial, - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { " fS", " Sh", "W ", 'S', stick.get(werkstoff.getBridgeMaterial()), 'W', - stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(toolHeadWrench, werkstoff.getBridgeMaterial(), 1L), - GT_Proxy.tBits, - new Object[] { "hXW", "XRX", "WXd", 'X', plate.get(werkstoff.getBridgeMaterial()), 'S', - plate.get(werkstoff.getBridgeMaterial().mHandleMaterial), 'R', - ring.get(werkstoff.getBridgeMaterial().mHandleMaterial), 'W', - screw.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); - GT_ModHandler.addShapelessCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.HARDHAMMER.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial().mHandleMaterial, - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { toolHeadHammer.get(werkstoff.getBridgeMaterial()), - stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.FILE.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial().mHandleMaterial, - null), - GT_ModHandler.RecipeBits.MIRRORED | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "P", "P", "S", 'P', plate.get(werkstoff.getBridgeMaterial()), 'S', - stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); - GT_ModHandler.addShapelessCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.SAW.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial().mHandleMaterial, - null), - new Object[] { toolHeadSaw.get(werkstoff.getBridgeMaterial()), - stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.SOLDERING_IRON_LV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Rubber, - new long[] { 100000L, 32L, 1L, -1L }), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "LBf", "Sd ", "P ", 'B', bolt.get(werkstoff.getBridgeMaterial()), 'P', - plate.get(Materials.AnyRubber), 'S', stick.get(werkstoff.getBridgeMaterial().mHandleMaterial), 'L', - ItemList.Battery_RE_LV_Lithium.get(1L) }); - - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - SOLDERING_IRON_MV, - 1, - werkstoff.getBridgeMaterial(), - Materials.Rubber, - new long[] { 400000L, 128L, 2L, -1L }), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "LBf", "Sd ", "P ", 'B', bolt.get(werkstoff.getBridgeMaterial()), 'P', - plate.get(Materials.AnyRubber), 'S', stick.get(werkstoff.getBridgeMaterial().mHandleMaterial), 'L', - ItemList.Battery_RE_MV_Lithium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - SOLDERING_IRON_HV, - 1, - werkstoff.getBridgeMaterial(), - Materials.StyreneButadieneRubber, - new long[] { 1600000L, 512L, 3L, -1L }), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "LBf", "Sd ", "P ", 'B', bolt.get(werkstoff.getBridgeMaterial()), 'P', - plate.get(Materials.StyreneButadieneRubber), 'S', - stick.get(werkstoff.getBridgeMaterial().mHandleMaterial), 'L', - ItemList.Battery_RE_HV_Lithium.get(1L) }); - - if (!werkstoff.hasItemType(gem)) { - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.HARDHAMMER.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial().mHandleMaterial, - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "XX ", "XXS", "XX ", 'X', ingot.get(werkstoff.getBridgeMaterial()), 'S', - stick.get(werkstoff.getBridgeMaterial().mHandleMaterial) }); - } - } - - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.PLUNGER.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial(), - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "xRR", " SR", "S f", 'S', stick.get(werkstoff.getBridgeMaterial()), 'R', - plate.get(Materials.AnyRubber) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.WRENCH.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial(), - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "IhI", "III", " I ", 'I', ingot.get(werkstoff.getBridgeMaterial()) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.CROWBAR.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial(), - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "hDS", "DSD", "SDf", 'S', stick.get(werkstoff.getBridgeMaterial()), 'D', Dyes.dyeBlue }); - - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.WIRECUTTER.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial(), - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PfP", "hPd", "STS", 'S', stick.get(werkstoff.getBridgeMaterial()), 'P', - plate.get(werkstoff.getBridgeMaterial()), 'T', screw.get(werkstoff.getBridgeMaterial()) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.SCOOP.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial(), - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SWS", "SSS", "xSh", 'S', stick.get(werkstoff.getBridgeMaterial()), 'W', - new ItemStack(Blocks.wool, 1, 32767) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.BRANCHCUTTER.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial(), - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PfP", "PdP", "STS", 'S', stick.get(werkstoff.getBridgeMaterial()), 'P', - plate.get(werkstoff.getBridgeMaterial()), 'T', screw.get(werkstoff.getBridgeMaterial()) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.KNIFE.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial(), - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "fPh", " S ", 'S', stick.get(werkstoff.getBridgeMaterial()), 'P', - plate.get(werkstoff.getBridgeMaterial()) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.BUTCHERYKNIFE.ID, - 1, - werkstoff.getBridgeMaterial(), - werkstoff.getBridgeMaterial(), - null), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PPf", "PP ", "Sh ", 'S', stick.get(werkstoff.getBridgeMaterial()), 'P', - plate.get(werkstoff.getBridgeMaterial()) }); - - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.WRENCH_LV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Steel, - new long[] { 100000L, 32L, 1L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), - 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Lithium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.WRENCH_LV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Steel, - new long[] { 75000L, 32L, 1L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), - 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Cadmium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.WRENCH_LV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Steel, - new long[] { 50000L, 32L, 1L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), - 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Sodium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.WRENCH_MV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Aluminium, - new long[] { 400000L, 128L, 2L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', - plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Aluminium), 'B', - ItemList.Battery_RE_MV_Lithium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.WRENCH_MV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Aluminium, - new long[] { 300000L, 128L, 2L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', - plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Aluminium), 'B', - ItemList.Battery_RE_MV_Cadmium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.WRENCH_MV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Aluminium, - new long[] { 200000L, 128L, 2L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', - plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Aluminium), 'B', - ItemList.Battery_RE_MV_Sodium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.WRENCH_HV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.StainlessSteel, - new long[] { 1600000L, 512L, 3L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', - plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', - ItemList.Battery_RE_HV_Lithium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.WRENCH_HV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.StainlessSteel, - new long[] { 1200000L, 512L, 3L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', - plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', - ItemList.Battery_RE_HV_Cadmium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.WRENCH_HV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.StainlessSteel, - new long[] { 800000L, 512L, 3L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SXd", "GMG", "PBP", 'X', toolHeadWrench.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', - plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', - ItemList.Battery_RE_HV_Sodium.get(1L) }); - - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.SCREWDRIVER_LV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Steel, - new long[] { 100000L, 32L, 1L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), - 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Lithium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.SCREWDRIVER_LV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Steel, - new long[] { 75000L, 32L, 1L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), - 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Cadmium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.SCREWDRIVER_LV.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Steel, - new long[] { 50000L, 32L, 1L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_LV.get(1L), 'S', screw.get(Materials.Steel), 'P', plate.get(Materials.Steel), - 'G', gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Sodium.get(1L) }); - - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(toolHeadHammer, werkstoff.getBridgeMaterial(), 1L), - GT_Proxy.tBits, - new Object[] { "II ", "IIh", "II ", 'P', plate.get(werkstoff.getBridgeMaterial()), 'I', - ingot.get(werkstoff.getBridgeMaterial()) }); - if (werkstoff.hasItemType(plateDouble) && werkstoff.hasItemType(cellMolten)) { - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(turbineBlade, werkstoff.getBridgeMaterial(), 1L), - GT_Proxy.tBits, - new Object[] { "fPd", "SPS", " P ", 'P', plateDouble.get(werkstoff.getBridgeMaterial()), 'S', - screw.get(werkstoff.getBridgeMaterial()) }); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(ingot, 6), ItemList.Shape_Extruder_Turbine_Blade.get(0)) - .itemOutputs(werkstoff.get(turbineBlade, 1)) - .duration( - (int) werkstoff.getStats() - .getMass() / 2 * 20) - .eut(TierEU.RECIPE_MV) - .addTo(extruderRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Turbine_Blade.get(0)) - .itemOutputs(werkstoff.get(turbineBlade, 1)) - .fluidInputs(werkstoff.getMolten(864)) - .duration( - (int) werkstoff.getStats() - .getMass() * 20) - .eut(TierEU.RECIPE_MV) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(plateDouble, 3), werkstoff.get(screw, 2)) - .itemOutputs(werkstoff.get(turbineBlade, 1)) - .duration( - (werkstoff.getStats() - .getMass() / 4) * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(formingPressRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(turbineBlade, 4), GT_OreDictUnificator.get(stickLong, Materials.Magnalium, 1)) - .itemOutputs( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.TURBINE_SMALL.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Magnalium, - null)) - .duration(8 * SECONDS) - .eut(100) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(werkstoff.get(turbineBlade, 8), GT_OreDictUnificator.get(stickLong, Materials.Titanium, 1)) - .itemOutputs( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.TURBINE.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Titanium, - null)) - .duration(16 * SECONDS) - .eut(400) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - werkstoff.get(turbineBlade, 12), - GT_OreDictUnificator.get(stickLong, Materials.TungstenSteel, 1)) - .itemOutputs( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.TURBINE_LARGE.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.TungstenSteel, - null)) - .duration(32 * SECONDS) - .eut(1600) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - werkstoff.get(turbineBlade, 16), - GT_OreDictUnificator.get(stickLong, Materials.Americium, 1)) - .itemOutputs( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - ID_MetaTool_01.TURBINE_HUGE.ID, - 1, - werkstoff.getBridgeMaterial(), - Materials.Americium, - null)) - .duration(1 * MINUTES + 4 * SECONDS) - .eut(6400) - .addTo(assemblerRecipes); - } - - if (!werkstoff.hasItemType(gem)) { - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(toolHeadSaw, werkstoff.getBridgeMaterial(), 1L), - GT_Proxy.tBits, - new Object[] { "PP ", "fh ", 'P', plate.get(werkstoff.getBridgeMaterial()), 'I', - ingot.get(werkstoff.getBridgeMaterial()) }); - } - - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - SCREWDRIVER_MV, - 1, - werkstoff.getBridgeMaterial(), - Materials.Aluminium, - new long[] { 400000L, 128L, 2L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', - plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Titanium), 'B', - ItemList.Battery_RE_MV_Lithium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - SCREWDRIVER_MV, - 1, - werkstoff.getBridgeMaterial(), - Materials.Aluminium, - new long[] { 300000L, 128L, 2L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', - plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Titanium), 'B', - ItemList.Battery_RE_MV_Cadmium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - SCREWDRIVER_MV, - 1, - werkstoff.getBridgeMaterial(), - Materials.Aluminium, - new long[] { 200000L, 128L, 2L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_MV.get(1L), 'S', screw.get(Materials.Aluminium), 'P', - plate.get(Materials.Aluminium), 'G', gearGtSmall.get(Materials.Titanium), 'B', - ItemList.Battery_RE_MV_Sodium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - SCREWDRIVER_HV, - 1, - werkstoff.getBridgeMaterial(), - Materials.StainlessSteel, - new long[] { 1600000L, 512L, 3L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', - plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', - ItemList.Battery_RE_HV_Lithium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - SCREWDRIVER_HV, - 1, - werkstoff.getBridgeMaterial(), - Materials.StainlessSteel, - new long[] { 1200000L, 512L, 3L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', - plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', - ItemList.Battery_RE_HV_Cadmium.get(1L) }); - GT_ModHandler.addCraftingRecipe( - GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats( - SCREWDRIVER_HV, - 1, - werkstoff.getBridgeMaterial(), - Materials.StainlessSteel, - new long[] { 800000L, 512L, 3L, -1L }), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PdX", "MGS", "GBP", 'X', stickLong.get(werkstoff.getBridgeMaterial()), 'M', - ItemList.Electric_Motor_HV.get(1L), 'S', screw.get(Materials.StainlessSteel), 'P', - plate.get(Materials.StainlessSteel), 'G', gearGtSmall.get(Materials.StainlessSteel), 'B', - ItemList.Battery_RE_HV_Sodium.get(1L) }); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/AssociationLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/AssociationLoader.java deleted file mode 100644 index c6eacb8ad2..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/AssociationLoader.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.registration; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; - -public class AssociationLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - for (OrePrefixes prefixes : OrePrefixes.values()) { - if (!werkstoff.hasItemType(prefixes)) continue; - - Materials werkstoffBridgeMaterial = werkstoff.getBridgeMaterial(); - ItemStack stack = WerkstoffLoader.getCorrespondingItemStackUnsafe(prefixes, werkstoff, 1); - - if (stack != null && stack.getItem() != null) { - GT_OreDictUnificator.addAssociation(prefixes, werkstoffBridgeMaterial, stack, false); - GT_OreDictUnificator.set(prefixes, werkstoffBridgeMaterial, stack, true, true); - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java deleted file mode 100644 index 5dafebb48e..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/BridgeMaterialsLoader.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.registration; - -import static gregtech.api.enums.Mods.Thaumcraft; -import static gregtech.api.enums.OrePrefixes.cell; -import static gregtech.api.enums.OrePrefixes.cellMolten; -import static gregtech.api.enums.OrePrefixes.dust; -import static gregtech.api.enums.OrePrefixes.values; - -import java.util.ArrayList; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enchants.Enchantment_Radioactivity; -import gregtech.api.enums.Element; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; - -public class BridgeMaterialsLoader implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - // int aMetaItemSubID, TextureSet aIconSet, float aToolSpeed, int aDurability, int aToolQuality, int aTypes, int - // aR, int aG, int aB, int aA, String aName, String aDefaultLocalName, int aFuelType, int aFuelPower, int - // aMeltingPoint, int aBlastFurnaceTemp, boolean aBlastFurnaceRequired, boolean aTransparent, int aOreValue, int - // aDensityMultiplier, int aDensityDivider, Dyes aColor, String aConfigSection, boolean aCustomOre, String - // aCustomID - Materials werkstoffBridgeMaterial = werkstoff.getBridgeMaterial() != null ? werkstoff.getBridgeMaterial() - : Materials.get(werkstoff.getVarName()) != Materials._NULL ? Materials.get(werkstoff.getVarName()) - : new Materials( - -1, - werkstoff.getTexSet(), - werkstoff.getToolSpeed(), - werkstoff.getDurability(), - werkstoff.getToolQuality(), - 0, - werkstoff.getRGBA()[0], - werkstoff.getRGBA()[1], - werkstoff.getRGBA()[2], - werkstoff.getRGBA()[3], - werkstoff.getVarName(), - werkstoff.getDefaultName(), - 0, - 0, - werkstoff.getStats() - .getMeltingPoint(), - werkstoff.getStats() - .getMeltingPoint(), - werkstoff.getStats() - .isBlastFurnace(), - false, - 0, - 1, - 1, - null); - for (OrePrefixes prefixes : values()) { - if (prefixes != cell || !Werkstoff.Types.ELEMENT.equals(werkstoff.getType())) { - if (prefixes == dust && Werkstoff.Types.ELEMENT.equals(werkstoff.getType()) - && Werkstoff.Types.ELEMENT.equals(werkstoff.getType())) { - boolean ElementSet = false; - for (Element e : Element.values()) { - if (e.toString() - .equals(werkstoff.getToolTip())) { - if (!e.mLinkedMaterials.isEmpty()) break; - werkstoffBridgeMaterial = werkstoff.getBridgeMaterial() != null - ? werkstoff.getBridgeMaterial() - : Materials.get(werkstoff.getVarName()) != Materials._NULL - ? Materials.get(werkstoff.getVarName()) - : new Materials( - -1, - werkstoff.getTexSet(), - werkstoff.getToolSpeed(), - werkstoff.getDurability(), - werkstoff.getToolQuality(), - 0, - werkstoff.getRGBA()[0], - werkstoff.getRGBA()[1], - werkstoff.getRGBA()[2], - werkstoff.getRGBA()[3], - werkstoff.getVarName(), - werkstoff.getDefaultName(), - 0, - 0, - werkstoff.getStats() - .getMeltingPoint(), - werkstoff.getStats() - .getMeltingPoint(), - werkstoff.getStats() - .isBlastFurnace(), - false, - 0, - 1, - 1, - null); - werkstoffBridgeMaterial.mElement = e; - e.mLinkedMaterials = new ArrayList<>(); - e.mLinkedMaterials.add(werkstoffBridgeMaterial); - if (werkstoff.hasItemType(dust)) { - GT_OreDictUnificator - .addAssociation(dust, werkstoffBridgeMaterial, werkstoff.get(dust), false); - GT_OreDictUnificator - .set(dust, werkstoffBridgeMaterial, werkstoff.get(dust), true, true); - } - ElementSet = true; - break; - } - } - if (!ElementSet) { - continue; - } - } - - if (werkstoff.hasItemType(cell)) { - werkstoffBridgeMaterial.setHasCorrespondingFluid(true); - werkstoffBridgeMaterial.setHasCorrespondingGas(true); - werkstoffBridgeMaterial.mFluid = werkstoff.getFluidOrGas(1) - .getFluid(); - werkstoffBridgeMaterial.mGas = werkstoff.getFluidOrGas(1) - .getFluid(); - } - - if (werkstoff.hasItemType(cellMolten)) { - werkstoffBridgeMaterial.mStandardMoltenFluid = werkstoff.getMolten(1) - .getFluid(); - } - werkstoffBridgeMaterial.mName = werkstoff.getVarName(); - werkstoffBridgeMaterial.mDefaultLocalName = werkstoff.getDefaultName(); - werkstoffBridgeMaterial.mChemicalFormula = werkstoff.getToolTip(); - if ("null".equals(werkstoffBridgeMaterial.mLocalizedName)) - // only reload from lang file if not localized already - werkstoffBridgeMaterial.mLocalizedName = GT_LanguageManager.addStringLocalization( - "Material." + werkstoffBridgeMaterial.mName.toLowerCase(), - werkstoffBridgeMaterial.mDefaultLocalName); - if (Thaumcraft.isModLoaded()) { - werkstoffBridgeMaterial.mAspects = werkstoff.getGTWrappedTCAspects(); - } - werkstoffBridgeMaterial.mMaterialInto = werkstoffBridgeMaterial; - werkstoffBridgeMaterial.mHandleMaterial = werkstoff.contains(SubTag.BURNING) ? Materials.Blaze - : werkstoff.contains(SubTag.MAGICAL) ? Materials.Thaumium - : werkstoffBridgeMaterial.mDurability > 5120 ? Materials.TungstenSteel - : werkstoffBridgeMaterial.mDurability > 1280 ? Materials.Steel : Materials.Wood; - if (werkstoff.getStats() - .isRadioactive()) { - werkstoffBridgeMaterial.setEnchantmentForArmors( - Enchantment_Radioactivity.INSTANCE, - werkstoff.getStats() - .getEnchantmentlvl()); - werkstoffBridgeMaterial.setEnchantmentForTools( - Enchantment_Radioactivity.INSTANCE, - werkstoff.getStats() - .getEnchantmentlvl()); - } - werkstoff.setBridgeMaterial(werkstoffBridgeMaterial); - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/CasingRegistrator.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/CasingRegistrator.java deleted file mode 100644 index b2287b48b5..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/material/werkstoff_loaders/registration/CasingRegistrator.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.registration; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.material.werkstoff_loaders.IWerkstoffRunnable; - -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; - -public class CasingRegistrator implements IWerkstoffRunnable { - - @Override - public void run(Werkstoff werkstoff) { - GT_OreDictUnificator.addAssociation( - OrePrefixes.blockCasing, - werkstoff.getBridgeMaterial(), - new ItemStack(WerkstoffLoader.BWBlockCasings, 1, werkstoff.getmID()), - false); - GT_OreDictUnificator.addAssociation( - OrePrefixes.blockCasingAdvanced, - werkstoff.getBridgeMaterial(), - new ItemStack(WerkstoffLoader.BWBlockCasingsAdvanced, 1, werkstoff.getmID()), - false); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/oredict/OreDictAdder.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/oredict/OreDictAdder.java deleted file mode 100644 index 85f56cb7a9..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/oredict/OreDictAdder.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.oredict; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.util.Pair; - -import gregtech.api.util.GT_OreDictUnificator; - -public class OreDictAdder { - - private static final ConcurrentHashMap toAddMap = new ConcurrentHashMap<>(); - - public static synchronized void addToMap(Pair element) { - OreDictAdder.toAddMap.put(element.getKey(), element.getValue()); - } - - @SafeVarargs - public static synchronized void addToMap(Pair... elements) { - for (Pair p : elements) OreDictAdder.toAddMap.put(p.getKey(), p.getValue()); - } - - public static void addToOreDict() { - for (Map.Entry entry : OreDictAdder.toAddMap.entrySet()) { - GT_OreDictUnificator.registerOre(entry.getKey(), entry.getValue()); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/oredict/OreDictHandler.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/oredict/OreDictHandler.java deleted file mode 100644 index 683b55b333..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/oredict/OreDictHandler.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.oredict; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.util.Pair; -import com.github.bartimaeusnek.crossmod.BartWorksCrossmod; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; - -public class OreDictHandler { - - private static final HashMap> cache = new HashMap<>(); - private static final HashSet> cacheNonBW = new HashSet<>(); - - public static HashMap> getCache() { - return OreDictHandler.cache; - } - - public static HashSet> getNonBWCache() { - return OreDictHandler.cacheNonBW; - } - - public static void adaptCacheForWorld() { - Set used = new HashSet<>(OreDictHandler.cache.keySet()); - OreDictHandler.cache.clear(); - OreDictHandler.cacheNonBW.clear(); - for (String s : used) { - if (!OreDictionary.getOres(s) - .isEmpty()) { - ItemStack tmpstack = OreDictionary.getOres(s) - .get(0) - .copy(); - Pair p = new Pair<>( - Item.getIdFromItem(tmpstack.getItem()), - (short) tmpstack.getItemDamage()); - OreDictHandler.cache.put(s, p); - for (ItemStack tmp : OreDictionary.getOres(s)) { - Pair p2 = new Pair<>( - Item.getIdFromItem(tmp.getItem()), - (short) tmp.getItemDamage()); - GameRegistry.UniqueIdentifier UI = GameRegistry.findUniqueIdentifierFor(tmp.getItem()); - if (UI == null) UI = GameRegistry.findUniqueIdentifierFor(Block.getBlockFromItem(tmp.getItem())); - if (!MainMod.MOD_ID.equals(UI.modId) && !BartWorksCrossmod.MOD_ID.equals(UI.modId) - && !"BWCore".equals(UI.modId)) { - OreDictHandler.cacheNonBW.add(p2); - } - } - } - } - } - - public static ItemStack getItemStack(String elementName, OrePrefixes prefixes, int amount) { - if (OreDictHandler.cache.get(prefixes + elementName.replace(" ", "")) != null) { - Pair p = OreDictHandler.cache.get(prefixes + elementName.replace(" ", "")); - return new ItemStack(Item.getItemById(p.getKey()), amount, p.getValue()); - } - if (!OreDictionary.getOres(prefixes + elementName.replace(" ", "")) - .isEmpty()) { - ItemStack tmp = GT_OreDictUnificator.get( - OreDictionary.getOres(prefixes + elementName.replace(" ", "")) - .get(0) - .copy()) - .copy(); - OreDictHandler.cache.put( - prefixes + elementName.replace(" ", ""), - new Pair<>(Item.getIdFromItem(tmp.getItem()), (short) tmp.getItemDamage())); - tmp.stackSize = amount; - return tmp; - } - return null; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_OreLayer.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_OreLayer.java deleted file mode 100644 index 3305741f27..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_OreLayer.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.oregen; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraft.world.chunk.IChunkProvider; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGeneratedOreTE; -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_Ores; -import com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_SmallOres; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.util.MurmurHash3; -import com.github.bartimaeusnek.bartworks.util.Pair; -import com.google.common.collect.ArrayListMultimap; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ISubTagContainer; -import gregtech.api.world.GT_Worldgen; -import gregtech.common.blocks.GT_TileEntity_Ores; - -/** - * Original GT File Stripped and adjusted to work with this mod - */ -public abstract class BW_OreLayer extends GT_Worldgen { - - public static final List sList = new ArrayList<>(); - public static final ArrayListMultimap NEIMAP = ArrayListMultimap.create(); - private static final boolean logOregenRoss128 = false; - public static int sWeight; - public byte bwOres; - public int mMinY, mWeight, mDensity, mSize, mMaxY, mPrimaryMeta, mSecondaryMeta, mBetweenMeta, mSporadicMeta; - - public abstract Block getDefaultBlockToReplace(); - - public abstract int[] getDefaultDamageToReplace(); - - public abstract String getDimName(); - - public BW_OreLayer(String aName, boolean aDefault, int aMinY, int aMaxY, int aWeight, int aDensity, int aSize, - ISubTagContainer top, ISubTagContainer bottom, ISubTagContainer between, ISubTagContainer sprinkled) { - super(aName, BW_OreLayer.sList, aDefault); - this.mMinY = (short) aMinY; - this.mMaxY = (short) aMaxY; - this.mWeight = (short) aWeight; - this.mDensity = (short) aDensity; - this.mSize = (short) Math.max(1, aSize); - - if (this.mEnabled) BW_OreLayer.sWeight += this.mWeight; - - if (top instanceof Werkstoff) this.bwOres = (byte) (this.bwOres | 0b1000); - if (bottom instanceof Werkstoff) this.bwOres = (byte) (this.bwOres | 0b0100); - if (between instanceof Werkstoff) this.bwOres = (byte) (this.bwOres | 0b0010); - if (sprinkled instanceof Werkstoff) this.bwOres = (byte) (this.bwOres | 0b0001); - - short aPrimary = top instanceof Materials ? (short) ((Materials) top).mMetaItemSubID - : top instanceof Werkstoff ? ((Werkstoff) top).getmID() : 0; - short aSecondary = bottom instanceof Materials ? (short) ((Materials) bottom).mMetaItemSubID - : bottom instanceof Werkstoff ? ((Werkstoff) bottom).getmID() : 0; - short aBetween = between instanceof Materials ? (short) ((Materials) between).mMetaItemSubID - : between instanceof Werkstoff ? ((Werkstoff) between).getmID() : 0; - short aSporadic = sprinkled instanceof Materials ? (short) ((Materials) sprinkled).mMetaItemSubID - : sprinkled instanceof Werkstoff ? ((Werkstoff) sprinkled).getmID() : 0; - this.mPrimaryMeta = aPrimary; - this.mSecondaryMeta = aSecondary; - this.mBetweenMeta = aBetween; - this.mSporadicMeta = aSporadic; - NEIMAP.put((short) this.mPrimaryMeta, this); - NEIMAP.put((short) this.mSecondaryMeta, this); - NEIMAP.put((short) this.mBetweenMeta, this); - NEIMAP.put((short) this.mSporadicMeta, this); - } - - public List getStacks() { - ArrayList ret = new ArrayList<>(); - ret.add( - (this.bwOres & 0b1000) != 0 ? new ItemStack(WerkstoffLoader.BWOres, 1, this.mPrimaryMeta) - : new ItemStack(GregTech_API.sBlockOres1, 1, this.mPrimaryMeta)); - ret.add( - (this.bwOres & 0b0100) != 0 ? new ItemStack(WerkstoffLoader.BWOres, 1, this.mSecondaryMeta) - : new ItemStack(GregTech_API.sBlockOres1, 1, this.mSecondaryMeta)); - ret.add( - (this.bwOres & 0b0010) != 0 ? new ItemStack(WerkstoffLoader.BWOres, 1, this.mBetweenMeta) - : new ItemStack(GregTech_API.sBlockOres1, 1, this.mBetweenMeta)); - ret.add( - (this.bwOres & 0b0001) != 0 ? new ItemStack(WerkstoffLoader.BWOres, 1, this.mSporadicMeta) - : new ItemStack(GregTech_API.sBlockOres1, 1, this.mSporadicMeta)); - return ret; - } - - public List> getStacksRawData() { - ArrayList> ret = new ArrayList<>(); - ret.add(new Pair<>(this.mPrimaryMeta, (this.bwOres & 0b1000) != 0)); - ret.add(new Pair<>(this.mSecondaryMeta, (this.bwOres & 0b0100) != 0)); - ret.add(new Pair<>(this.mBetweenMeta, (this.bwOres & 0b0010) != 0)); - ret.add(new Pair<>(this.mSporadicMeta, (this.bwOres & 0b0001) != 0)); - return ret; - } - - @Override - public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, - int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { - { - int tMinY = this.mMinY + aRandom.nextInt(this.mMaxY - this.mMinY - 5); - int cX = aChunkX - aRandom.nextInt(this.mSize); - int eX = aChunkX + 16 + aRandom.nextInt(this.mSize); - - boolean wasPlaced = false; - - for (int tX = cX; tX <= eX; ++tX) { - int cZ = aChunkZ - aRandom.nextInt(this.mSize); - int eZ = aChunkZ + 16 + aRandom.nextInt(this.mSize); - - for (int tZ = cZ; tZ <= eZ; ++tZ) { - int i; - if (this.mSecondaryMeta > 0) { - for (i = tMinY - 1; i < tMinY + 2; ++i) { - if (this.shouldPlace(aRandom, cX, eX, tX, cZ, eZ, tZ)) { - wasPlaced = this.setOreBlock(aWorld, tX, i, tZ, this.mSecondaryMeta, false); - } - } - } - - if (this.mBetweenMeta > 0 && this.shouldPlace(aRandom, cX, eX, tX, cZ, eZ, tZ)) { - wasPlaced = this - .setOreBlock(aWorld, tX, tMinY + 2 + aRandom.nextInt(2), tZ, this.mBetweenMeta, false); - } - - if (this.mPrimaryMeta > 0) { - for (i = tMinY + 3; i < tMinY + 6; ++i) { - if (this.shouldPlace(aRandom, cX, eX, tX, cZ, eZ, tZ)) { - wasPlaced = this.setOreBlock(aWorld, tX, i, tZ, this.mPrimaryMeta, false); - } - } - } - - if (this.mSporadicMeta > 0 && this.shouldPlace(aRandom, cX, eX, tX, cZ, eZ, tZ)) { - wasPlaced = this - .setOreBlock(aWorld, tX, tMinY - 1 + aRandom.nextInt(7), tZ, this.mSporadicMeta, false); - } - } - } - - if (BW_OreLayer.logOregenRoss128) { - MainMod.LOGGER.info("Generated Orevein: " + this.mWorldGenName + " " + aChunkX + " " + aChunkZ); - } - - return wasPlaced; - } - } - - private boolean shouldPlace(Random aRandom, int cX, int eX, int tX, int cZ, int eZ, int tZ) { - if (aRandom.nextInt( - Math.max(1, Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ)) / this.mDensity)) == 0 - || aRandom.nextInt( - Math.max(1, Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX)) / this.mDensity)) == 0) - return true; - return false; - } - - public boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData, boolean isSmallOre) { - // security stuff to prevent crashes with 2 TileEntites on the same Spot - TileEntity te = aWorld.getTileEntity(aX, aY, aZ); - if (te instanceof BW_MetaGeneratedOreTE || te instanceof GT_TileEntity_Ores) return true; - - if (aMetaData == this.mSporadicMeta && (this.bwOres & 0b0001) != 0 - || aMetaData == this.mBetweenMeta && (this.bwOres & 0b0010) != 0 - || aMetaData == this.mPrimaryMeta && (this.bwOres & 0b1000) != 0 - || aMetaData == this.mSecondaryMeta && (this.bwOres & 0b0100) != 0) { - return isSmallOre - ? BW_MetaGenerated_SmallOres.setOreBlock( - aWorld, - aX, - aY, - aZ, - aMetaData, - false, - this.getDefaultBlockToReplace(), - this.getDefaultDamageToReplace()) - : BW_MetaGenerated_Ores.setOreBlock( - aWorld, - aX, - aY, - aZ, - aMetaData, - false, - this.getDefaultBlockToReplace(), - this.getDefaultDamageToReplace()); - } - - return this.setGTOreBlockSpace(aWorld, aX, aY, aZ, aMetaData, this.getDefaultBlockToReplace()); - } - - public boolean setGTOreBlockSpace(World aWorld, int aX, int aY, int aZ, int aMetaData, Block block) { - if (GT_TileEntity_Ores.setOreBlock(aWorld, aX, aY, aZ, aMetaData, false, false)) return true; - aY = Math.min(aWorld.getActualHeight(), Math.max(aY, 1)); - Block tBlock = aWorld.getBlock(aX, aY, aZ); - Block tOreBlock = GregTech_API.sBlockOres1; - if (aMetaData < 0 || tBlock == Blocks.air) { - return false; - } else { - if (!tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, block)) { - return false; - } - aMetaData += 5000; - aWorld.setBlock(aX, aY, aZ, tOreBlock, aMetaData, 0); - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof GT_TileEntity_Ores ore) { - ore.mMetaData = (short) aMetaData; - } - return true; - } - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof BW_OreLayer that)) return false; - - if (this.bwOres != that.bwOres || this.mMinY != that.mMinY - || this.mWeight != that.mWeight - || this.mDensity != that.mDensity) return false; - if (this.mSize != that.mSize) return false; - if (this.mMaxY != that.mMaxY) return false; - if (this.mPrimaryMeta != that.mPrimaryMeta) return false; - if (this.mSecondaryMeta != that.mSecondaryMeta) return false; - if (this.mBetweenMeta != that.mBetweenMeta) return false; - return this.mSporadicMeta == that.mSporadicMeta; - } - - @Override - public int hashCode() { - return MurmurHash3.murmurhash3_x86_32( - ByteBuffer.allocate(37) - .put(this.bwOres) - .putInt(this.mMinY) - .putInt(this.mWeight) - .putInt(this.mDensity) - .putInt(this.mSize) - .putInt(this.mMaxY) - .putInt(this.mPrimaryMeta) - .putInt(this.mSecondaryMeta) - .putInt(this.mBetweenMeta) - .putInt(this.mSporadicMeta) - .array(), - 0, - 37, - 31); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WordGenerator.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WordGenerator.java deleted file mode 100644 index 56e67ab9e5..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WordGenerator.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.oregen; - -import java.util.HashSet; -import java.util.Random; - -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.World; -import net.minecraft.world.WorldProvider; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.IChunkProvider; - -import cpw.mods.fml.common.IWorldGenerator; -import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_Log; - -/** - * Original GT File Stripped and adjusted to work with this mod - */ -public class BW_WordGenerator implements IWorldGenerator { - - public BW_WordGenerator() { - // GT_NH Override... wont be actually registered to force its generation directly in the ChunkProvider - // GameRegistry.registerWorldGenerator(this, 1073741823); - } - - public synchronized void generate(Random aRandom, int aX, int aZ, World aWorld, IChunkProvider aChunkGenerator, - IChunkProvider aChunkProvider) { - new BW_WordGenerator.WorldGenContainer( - aX * 16, - aZ * 16, - aWorld.provider, - aWorld, - aChunkGenerator, - aChunkProvider).run(); - } - - public static class WorldGenContainer implements Runnable { - - public static HashSet mGenerated = new HashSet<>(2000); - public final WorldProvider mWorldProvider; - public final World mWorld; - public final IChunkProvider mChunkGenerator; - public final IChunkProvider mChunkProvider; - public int mX; - public int mZ; - - public WorldGenContainer(int aX, int aZ, WorldProvider aWorldProvider, World aWorld, - IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { - this.mX = aX; - this.mZ = aZ; - this.mWorldProvider = aWorldProvider; - this.mWorld = aWorld; - this.mChunkGenerator = aChunkGenerator; - this.mChunkProvider = aChunkProvider; - } - - // returns a coordinate of a center chunk of 3x3 square; the argument belongs to this square - public int getVeinCenterCoordinate(int c) { - c += c < 0 ? 1 : 3; - return c - c % 3 - 2; - } - - public boolean surroundingChunksLoaded(int xCenter, int zCenter) { - return this.mWorld.checkChunksExist(xCenter - 16, 0, zCenter - 16, xCenter + 16, 0, zCenter + 16); - } - - public XSTR getRandom(int xChunk, int zChunk) { - long worldSeed = this.mWorld.getSeed(); - XSTR fmlRandom = new XSTR(worldSeed); - long xSeed = fmlRandom.nextLong() >> 2 + 1L; - long zSeed = fmlRandom.nextLong() >> 2 + 1L; - long chunkSeed = xSeed * xChunk + zSeed * zChunk ^ worldSeed; - fmlRandom.setSeed(chunkSeed); - return new XSTR(fmlRandom.nextInt()); - } - - public void run() { - int xCenter = this.getVeinCenterCoordinate(this.mX >> 4); - int zCenter = this.getVeinCenterCoordinate(this.mZ >> 4); - Random random = this.getRandom(xCenter, zCenter); - xCenter <<= 4; - zCenter <<= 4; - ChunkCoordIntPair centerChunk = new ChunkCoordIntPair(xCenter, zCenter); - if (!BW_WordGenerator.WorldGenContainer.mGenerated.contains(centerChunk) - && this.surroundingChunksLoaded(xCenter, zCenter)) { - BW_WordGenerator.WorldGenContainer.mGenerated.add(centerChunk); - if (BW_OreLayer.sWeight > 0 && BW_OreLayer.sList.size() > 0) { - boolean temp = true; - int tRandomWeight; - for (int i = 0; i < 256 && temp; i++) { - tRandomWeight = random.nextInt(BW_OreLayer.sWeight); - for (BW_OreLayer tWorldGen : BW_OreLayer.sList) { - if (!tWorldGen.isGenerationAllowed(this.mWorld, mWorldProvider.getClass())) continue; - tRandomWeight -= tWorldGen.mWeight; - if (tRandomWeight <= 0) { - try { - boolean placed; - int attempts = 0; - do { - placed = tWorldGen.executeWorldgen( - this.mWorld, - random, - "", - this.mWorldProvider.dimensionId, - xCenter, - zCenter, - this.mChunkGenerator, - this.mChunkProvider); - ++attempts; - } while (!placed && attempts < 25); - temp = false; - break; - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - } - } - } - } - Chunk tChunk = this.mWorld.getChunkFromBlockCoords(this.mX, this.mZ); - if (tChunk != null) { - tChunk.isModified = true; - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WorldGenRoss128b.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WorldGenRoss128b.java deleted file mode 100644 index 7b70fedfbf..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WorldGenRoss128b.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.oregen; - -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Arsenopyrite; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Bismuthinit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Bismutite; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Bornite; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.ChromoAluminoPovondrait; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.DescloiziteCUVO4; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.DescloiziteZNVO4; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Djurleit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Fayalit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Ferberite; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.FluorBuergerit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Forsterit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.FuchsitAL; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.FuchsitCR; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Hedenbergit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Huebnerit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Loellingit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Olenit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.RedZircon; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Roquesit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Thorianit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.VanadioOxyDravit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Wittichenit; -import static gregtech.api.enums.Materials.Bismuth; -import static gregtech.api.enums.Materials.Coal; -import static gregtech.api.enums.Materials.Diamond; -import static gregtech.api.enums.Materials.Graphite; -import static gregtech.api.enums.Materials.Lepidolite; -import static gregtech.api.enums.Materials.Scheelite; -import static gregtech.api.enums.Materials.Spodumene; -import static gregtech.api.enums.Materials.Stibnite; -import static gregtech.api.enums.Materials.Tetrahedrite; -import static gregtech.api.enums.Materials.Uraninite; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.util.StatCollector; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; - -import gregtech.api.interfaces.ISubTagContainer; - -public class BW_WorldGenRoss128b extends BW_OreLayer { - - @Override - public Block getDefaultBlockToReplace() { - return Blocks.stone; - } - - @Override - public int[] getDefaultDamageToReplace() { - return new int[] { 0 }; - } - - @Override - public String getDimName() { - return StatCollector.translateToLocal("planet.Ross128b"); - } - - public BW_WorldGenRoss128b(String aName, boolean aDefault, int aMinY, int aMaxY, int aWeight, int aDensity, - int aSize, ISubTagContainer top, ISubTagContainer bottom, ISubTagContainer between, - ISubTagContainer sprinkled) { - super(aName, aDefault, aMinY, aMaxY, aWeight, aDensity, aSize, top, bottom, between, sprinkled); - } - - public static void initOres() { - new BW_WorldGenRoss128b( - "ore.mix.ross128.Thorianit", - true, - 30, - 60, - 17, - 1, - 16, - Thorianit, - Uraninite, - Lepidolite, - Spodumene); - new BW_WorldGenRoss128b("ore.mix.ross128.carbon", true, 5, 25, 5, 4, 12, Graphite, Diamond, Coal, Graphite); - new BW_WorldGenRoss128b( - "ore.mix.ross128.bismuth", - true, - 5, - 80, - 30, - 1, - 16, - Bismuthinit, - Stibnite, - Bismuth, - Bismutite); - new BW_WorldGenRoss128b( - "ore.mix.ross128.TurmalinAlkali", - true, - 5, - 80, - 15, - 4, - 48, - Olenit, - FluorBuergerit, - ChromoAluminoPovondrait, - VanadioOxyDravit); - new BW_WorldGenRoss128b( - "ore.mix.ross128.Roquesit", - true, - 30, - 50, - 3, - 1, - 12, - Arsenopyrite, - Ferberite, - Loellingit, - Roquesit); - new BW_WorldGenRoss128b( - "ore.mix.ross128.Tungstate", - true, - 5, - 40, - 10, - 4, - 14, - Ferberite, - Huebnerit, - Loellingit, - Scheelite); - new BW_WorldGenRoss128b( - "ore.mix.ross128.CopperSulfits", - true, - 40, - 70, - 80, - 3, - 24, - Djurleit, - Bornite, - Wittichenit, - Tetrahedrite); - new BW_WorldGenRoss128b( - "ore.mix.ross128.Forsterit", - true, - 20, - 90, - 50, - 2, - 32, - Forsterit, - Fayalit, - DescloiziteCUVO4, - DescloiziteZNVO4); - new BW_WorldGenRoss128b( - "ore.mix.ross128.Hedenbergit", - true, - 20, - 90, - 50, - 2, - 32, - Hedenbergit, - Fayalit, - DescloiziteCUVO4, - DescloiziteZNVO4); - new BW_WorldGenRoss128b( - "ore.mix.ross128.RedZircon", - true, - 10, - 80, - 40, - 3, - 24, - Fayalit, - FuchsitAL, - RedZircon, - FuchsitCR); - } - - @Override - public boolean isGenerationAllowed(String aDimName, int aDimensionType, int aAllowedDimensionType) { - return aDimensionType == ConfigHandler.ross128BID; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WorldGenRoss128ba.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WorldGenRoss128ba.java deleted file mode 100644 index b854f771ca..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/oregen/BW_WorldGenRoss128ba.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.oregen; - -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.BArTiMaEuSNeK; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Bornite; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.ChromoAluminoPovondrait; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Djurleit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Fayalit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Ferberite; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.FluorBuergerit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Fluorspar; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.FuchsitAL; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.FuchsitCR; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Hedenbergit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Huebnerit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Loellingit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Olenit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Prasiolite; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.RedZircon; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Tiberium; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.VanadioOxyDravit; -import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.Wittichenit; -import static gregtech.api.enums.Materials.Amethyst; -import static gregtech.api.enums.Materials.Barite; -import static gregtech.api.enums.Materials.Galena; -import static gregtech.api.enums.Materials.NaquadahEnriched; -import static gregtech.api.enums.Materials.Olivine; -import static gregtech.api.enums.Materials.Scheelite; -import static gregtech.api.enums.Materials.Sphalerite; -import static gregtech.api.enums.Materials.Tetrahedrite; - -import net.minecraft.block.Block; -import net.minecraft.util.StatCollector; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; - -import gregtech.api.interfaces.ISubTagContainer; - -public class BW_WorldGenRoss128ba extends BW_OreLayer { - - public BW_WorldGenRoss128ba(String aName, boolean aDefault, int aMinY, int aMaxY, int aWeight, int aDensity, - int aSize, ISubTagContainer top, ISubTagContainer bottom, ISubTagContainer between, - ISubTagContainer sprinkled) { - super(aName, aDefault, aMinY, aMaxY, aWeight, aDensity, aSize, top, bottom, between, sprinkled); - } - - @Override - public Block getDefaultBlockToReplace() { - return Block.getBlockFromName("GalacticraftCore:tile.moonBlock"); - } - - @Override - public int[] getDefaultDamageToReplace() { - int[] ret = new int[12]; - for (int i = 0; i < 12; i++) { - if (i != 5 && i != 3) ret[i] = i; - } - return ret; - } - - @Override - public String getDimName() { - return StatCollector.translateToLocal("moon.Ross128ba"); - } - - public static void init_Ores() { - new BW_WorldGenRoss128ba( - "ore.mix.ross128ba.tib", - true, - 30, - 60, - 6, - 1, - 16, - Tiberium, - Tiberium, - NaquadahEnriched, - NaquadahEnriched); - new BW_WorldGenRoss128ba( - "ore.mix.ross128ba.Tungstate", - true, - 5, - 40, - 60, - 4, - 14, - Ferberite, - Huebnerit, - Loellingit, - Scheelite); - new BW_WorldGenRoss128ba( - "ore.mix.ross128ba.bart", - true, - 30, - 60, - 1, - 1, - 1, - BArTiMaEuSNeK, - BArTiMaEuSNeK, - BArTiMaEuSNeK, - BArTiMaEuSNeK); - new BW_WorldGenRoss128ba( - "ore.mix.ross128ba.TurmalinAlkali", - true, - 5, - 80, - 60, - 4, - 48, - Olenit, - FluorBuergerit, - ChromoAluminoPovondrait, - VanadioOxyDravit); - new BW_WorldGenRoss128ba( - "ore.mix.ross128ba.Amethyst", - true, - 5, - 80, - 35, - 2, - 8, - Amethyst, - Olivine, - Prasiolite, - Hedenbergit); - new BW_WorldGenRoss128ba( - "ore.mix.ross128ba.CopperSulfits", - true, - 40, - 70, - 80, - 3, - 24, - Djurleit, - Bornite, - Wittichenit, - Tetrahedrite); - new BW_WorldGenRoss128ba( - "ore.mix.ross128ba.RedZircon", - true, - 10, - 80, - 40, - 3, - 24, - Fayalit, - FuchsitAL, - RedZircon, - FuchsitCR); - new BW_WorldGenRoss128ba( - "ore.mix.ross128ba.Fluorspar", - true, - 10, - 80, - 35, - 4, - 8, - Galena, - Sphalerite, - Fluorspar, - Barite); - } - - @Override - public boolean isGenerationAllowed(String aDimName, int aDimensionType, int aAllowedDimensionType) { - return aDimensionType == ConfigHandler.ross128BAID; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/worldgen/GT_WorldgenUtil.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/worldgen/GT_WorldgenUtil.java deleted file mode 100644 index 7d599b441a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/worldgen/GT_WorldgenUtil.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.worldgen; - -import java.util.Random; - -import net.minecraft.block.Block; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; - -import gregtech.api.GregTech_API; - -public class GT_WorldgenUtil { - - private GT_WorldgenUtil() {} - - public static final Block GT_TILES = GregTech_API.sBlockMachines; - - public static short getGenerator(Random rand, int tier) { - int meta = ConfigHandler.metasForTiers[0][tier][rand.nextInt(ConfigHandler.metasForTiers[0][tier].length)]; - return GregTech_API.METATILEENTITIES[meta] != null ? (short) meta : GT_WorldgenUtil.getGenerator(rand, tier); - } - - public static short getBuffer(Random rand, int tier) { - int meta = ConfigHandler.metasForTiers[1][tier][rand.nextInt(ConfigHandler.metasForTiers[1][tier].length)]; - return GregTech_API.METATILEENTITIES[meta] != null ? (short) meta : GT_WorldgenUtil.getBuffer(rand, tier); - } - - public static short getCable(Random rand, int tier) { - int meta = ConfigHandler.metasForTiers[2][tier][rand.nextInt(ConfigHandler.metasForTiers[2][tier].length)]; - return GregTech_API.METATILEENTITIES[meta] != null ? (short) meta : GT_WorldgenUtil.getCable(rand, tier); - } - - public static short getMachine(Random rand, int tier) { - int meta = ConfigHandler.metasForTiers[3][tier][rand.nextInt(ConfigHandler.metasForTiers[3][tier].length)]; - return GregTech_API.METATILEENTITIES[meta] != null ? (short) meta : GT_WorldgenUtil.getMachine(rand, tier); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/system/worldgen/MapGenRuins.java b/src/main/java/com/github/bartimaeusnek/bartworks/system/worldgen/MapGenRuins.java deleted file mode 100644 index ef6b88cc5a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/system/worldgen/MapGenRuins.java +++ /dev/null @@ -1,502 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.system.worldgen; - -import static com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler.maxTierRoss; -import static net.minecraftforge.common.ChestGenHooks.PYRAMID_JUNGLE_CHEST; - -import java.security.SecureRandom; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.IInventory; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.WeightedRandomChestContent; -import net.minecraft.world.World; -import net.minecraft.world.gen.feature.WorldGenerator; -import net.minecraftforge.common.ChestGenHooks; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.util.Pair; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.objects.XSTR; -import gregtech.api.threads.GT_Runnable_MachineBlockUpdate; - -public abstract class MapGenRuins extends WorldGenerator { - - @SuppressWarnings("unchecked") - protected Pair[][] ToBuildWith = new Pair[4][0]; - - @Override - public boolean generate(World p_76484_1_, Random p_76484_2_, int p_76484_3_, int p_76484_4_, int p_76484_5_) { - return false; - } - - @SuppressWarnings("unchecked") - protected void setFloorBlocks(int[] metas, Block... blocks) { - this.ToBuildWith[0] = new Pair[metas.length]; - for (int i = 0; i < metas.length; i++) { - this.ToBuildWith[0][i] = new Pair<>(blocks[i % blocks.length], metas[i]); - } - } - - @SuppressWarnings("unchecked") - protected void setWallBlocks(int[] metas, Block... blocks) { - this.ToBuildWith[1] = new Pair[metas.length]; - for (int i = 0; i < metas.length; i++) { - this.ToBuildWith[1][i] = new Pair<>(blocks[i % blocks.length], metas[i]); - } - } - - @SuppressWarnings("unchecked") - protected void setRoofBlocks(int[] metas, Block... blocks) { - this.ToBuildWith[2] = new Pair[metas.length]; - for (int i = 0; i < metas.length; i++) { - this.ToBuildWith[2][i] = new Pair<>(blocks[i % blocks.length], metas[i]); - } - } - - @SuppressWarnings("unchecked") - protected void setMiscBlocks(int[] metas, Block... blocks) { - this.ToBuildWith[3] = new Pair[metas.length]; - for (int i = 0; i < metas.length; i++) { - this.ToBuildWith[3][i] = new Pair<>(blocks[i % blocks.length], metas[i]); - } - } - - int[] statBlocks = new int[4]; - - protected void setRandomBlockWAirChance(World worldObj, int x, int y, int z, Random rand, int airchance, - Pair... blocks) { - if (rand.nextInt(100) > airchance) this.setRandomBlock(worldObj, x, y, z, rand, blocks); - else this.setBlock(worldObj, x, y, z, Blocks.air, 0); - } - - protected void setRandomBlock(World worldObj, int x, int y, int z, Random rand, Pair... blocks) { - Block toSet = blocks[rand.nextInt(blocks.length)].getKey(); - int meta = blocks[rand.nextInt(blocks.length)].getValue(); - this.setBlock(worldObj, x, y, z, toSet, meta); - } - - protected void setBlock(World worldObj, int x, int y, int z, Block block, int meta) { - this.setBlockAndNotifyAdequately(worldObj, x, y, z, block, meta); - } - - protected void setBlock(World worldObj, int x, int y, int z, Pair pair) { - this.setBlockAndNotifyAdequately(worldObj, x, y, z, pair.getKey(), pair.getValue()); - } - - private TileEntity setGTMachineBlock(World worldObj, int x, int y, int z, int meta) { - boolean isEnabled = true; - try { - isEnabled = GT_Runnable_MachineBlockUpdate.isEnabled(); - } catch (Throwable ignored) { - isEnabled = false; - } - if (isEnabled) - throw new IllegalStateException("Machine Block Runnable needs to be disabled while creating world!"); - this.setBlockAndNotifyAdequately( - worldObj, - x, - y, - z, - GT_WorldgenUtil.GT_TILES, - GregTech_API.METATILEENTITIES[meta].getTileEntityBaseType()); - TileEntity tile = worldObj.getTileEntity(x, y, z); - ((IGregTechTileEntity) tile).setInitialValuesAsNBT(null, (short) meta); - return tile; - } - - protected TileEntity reSetGTTileEntity(IGregTechTileEntity bte, World worldObj, int x, int y, int z, int meta) { - worldObj.removeTileEntity(x, y, z); - this.setBlock(worldObj, x, y, z, Blocks.air, 0); - return this.setGTMachineBlock(worldObj, x, y, z, meta); - } - - protected void setGTMachineBlockWChance(World worldObj, int x, int y, int z, Random rand, int airchance, int meta) { - if (rand.nextInt(100) > airchance) { - this.setGTMachineBlock(worldObj, x, y, z, meta); - } else this.setBlock(worldObj, x, y, z, Blocks.air, 0); - } - - protected void setGTCablekWChance(World worldObj, int x, int y, int z, Random rand, int airchance, int meta) { - if (rand.nextInt(100) > airchance) { - this.setGTCable(worldObj, x, y, z, meta); - } else this.setBlock(worldObj, x, y, z, Blocks.air, 0); - } - - protected void setGTMachine(World worldObj, int x, int y, int z, int meta, String ownerName, - ForgeDirection facing) { - try { - GT_Runnable_MachineBlockUpdate.setDisabled(); - } catch (Throwable ignored) {} - this.setGTMachineBlock(worldObj, x, y, z, meta); - BaseMetaTileEntity BTE = (BaseMetaTileEntity) worldObj.getTileEntity(x, y, z); - BTE.setOwnerName(ownerName); - BTE.setFrontFacing(facing); - BTE = (BaseMetaTileEntity) worldObj.getTileEntity(x, y, z); - this.checkTile(BTE, worldObj, x, y, z, meta, ownerName, facing, 0); - try { - GT_Runnable_MachineBlockUpdate.setEnabled(); - } catch (Throwable ignored) {} - } - - private void checkTile(BaseMetaTileEntity BTE, World worldObj, int x, int y, int z, int meta, String ownerName, - ForgeDirection facing, int depth) { - if (depth < 25) { - if (BTE.getMetaTileID() != meta || worldObj.getTileEntity(x, y, z) != BTE || BTE.isInvalid()) { - this.redoTile(BTE, worldObj, x, y, z, meta, ownerName, facing); - this.checkTile(BTE, worldObj, x, y, z, meta, ownerName, facing, depth); - depth++; - } - } else { - worldObj.removeTileEntity(x, y, z); - worldObj.setBlockToAir(x, y, z); - } - } - - private void redoTile(BaseMetaTileEntity BTE, World worldObj, int x, int y, int z, int meta, String ownerName, - ForgeDirection facing) { - this.reSetGTTileEntity(BTE, worldObj, x, y, z, meta); - BTE = (BaseMetaTileEntity) worldObj.getTileEntity(x, y, z); - BTE.setOwnerName(ownerName); - BTE.setFrontFacing(facing); - } - - protected void setGTCable(World worldObj, int x, int y, int z, int meta) { - try { - GT_Runnable_MachineBlockUpdate.setDisabled(); - } catch (Throwable ignored) {} - BaseMetaPipeEntity BTE = (BaseMetaPipeEntity) this.setGTMachineBlock(worldObj, x, y, z, meta); - MetaPipeEntity MPE = (MetaPipeEntity) BTE.getMetaTileEntity(); - BTE.mConnections |= (byte) (1 << (byte) 4); - BTE.mConnections |= (byte) (1 << ForgeDirection.getOrientation(4) - .getOpposite() - .ordinal()); - BaseMetaTileEntity BPE = (BaseMetaTileEntity) worldObj.getTileEntity(x, y, z - 1); - if (BPE != null) { - BTE.mConnections |= (byte) (1 << (byte) 2); - } - MPE.mConnections = BTE.mConnections; - try { - GT_Runnable_MachineBlockUpdate.setEnabled(); - } catch (Throwable ignored) {} - } - - public static class RuinsBase extends MapGenRuins { - - private static final String owner = "Ancient Cultures"; - - @Override - public boolean generate(World worldObj, Random rand1, int x, int y, int z) { - - for (int i = 0; i < rand1.nextInt(144); i++) { - rand1.nextLong(); - } - - Random rand = new XSTR(rand1.nextLong()); - SecureRandom secureRandom = new SecureRandom(); - - if (worldObj.getBlock(x, y, z) == Blocks.air) { - while (worldObj.getBlock(x, y, z) == Blocks.air) { - y--; - } - } - - this.setFloorBlocks(new int[] { 0, 0, 0 }, Blocks.brick_block, Blocks.double_stone_slab, Blocks.stonebrick); - this.setWallBlocks(new int[] { 0, 1, 2, 1, 1 }, Blocks.stonebrick); - this.setRoofBlocks(new int[] { 9 }, Blocks.log); - this.setMiscBlocks(new int[] { 1 }, Blocks.log); - this.statBlocks = new int[] { rand.nextInt(this.ToBuildWith[0].length) }; - int colored = rand.nextInt(15); - int tier = secureRandom.nextInt(maxTierRoss); - boolean useColor = rand.nextBoolean(); - byte set = 0; - byte toSet = (byte) (rand.nextInt(maxTierRoss - tier) + 1); - short cablemeta = GT_WorldgenUtil.getCable(secureRandom, tier); - byte treeinaRow = 0; - boolean lastset = rand.nextBoolean(); - for (int dx = -6; dx <= 6; dx++) { - for (int dy = 0; dy <= 8; dy++) { - for (int dz = -6; dz <= 6; dz++) { - this.setBlock(worldObj, x + dx, y + dy, z + dz, Blocks.air, 0); - if (dy == 0) { - Pair floor = this.ToBuildWith[0][this.statBlocks[0]]; - this.setBlock(worldObj, x + dx, y + 0, z + dz, floor.getKey(), floor.getValue()); - } else if (dy > 0 && dy < 4) { - if (Math.abs(dx) == 5 && Math.abs(dz) == 5) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + dy, - z + dz, - rand, - 5, - this.ToBuildWith[3][0]); - } else if (dx == 0 && dz == -5 && (dy == 1 || dy == 2)) { - if (dy == 1) { - this.setBlock(worldObj, x + dx, y + 1, z + -5, Blocks.iron_door, 1); - } - if (dy == 2) { - this.setBlock(worldObj, x + dx, y + 2, z + dz, Blocks.iron_door, 8); - } - } else if (Math.abs(dx) == 5 && Math.abs(dz) < 5 || Math.abs(dz) == 5 && Math.abs(dx) < 5) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + dy, - z + dz, - rand, - 25, - this.ToBuildWith[1]); - if (dy == 2 && rand.nextInt(100) < 12) { - if (useColor) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + 2, - z + dz, - rand, - 25, - new Pair<>(Blocks.stained_glass_pane, colored)); - } - } else { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + dy, - z + dz, - rand, - 25, - new Pair<>(Blocks.glass_pane, 0)); - } - } - - if (dy == 3 && Math.abs(dx) == 6) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + 3, - z + dz, - rand, - 25, - this.ToBuildWith[2]); - } - - if (dy == 1) { - if (dx == 3 && dz == -3) { - this.setBlock(worldObj, x + 3, y + 1, z + dz, Blocks.crafting_table, 0); - } - if (dx == -3 && (dz == -3 || dz == -2)) { - this.setBlock(worldObj, x + -3, y + dy, z + dz, Blocks.chest, 5); - IInventory chest = (IInventory) worldObj.getTileEntity(x + dx, y + dy, z + dz); - if (chest != null) { - WeightedRandomChestContent.generateChestContents( - secureRandom, - ChestGenHooks.getItems(PYRAMID_JUNGLE_CHEST, rand), - chest, - ChestGenHooks.getCount(PYRAMID_JUNGLE_CHEST, rand)); - } - } - - if (dx == 4 && dz == 4) { - short meta = GT_WorldgenUtil.getGenerator(secureRandom, tier); - this.setGTMachine( - worldObj, - x + dx, - y + dy, - z + dz, - meta, - owner, - tier > 0 ? ForgeDirection.WEST : ForgeDirection.UP); - } else if (dx == 3 && dz == 4) { - if (tier > 0) { - short meta = GT_WorldgenUtil.getBuffer(secureRandom, tier); - this.setGTMachine( - worldObj, - x + dx, - y + dy, - z + dz, - meta, - owner, - ForgeDirection.WEST); - } else { - this.setGTCablekWChance(worldObj, x + dx, y + dy, z + dz, rand, 33, cablemeta); - } - } else if (dx < 3 && dx > -5 && dz == 4) { - this.setGTCablekWChance(worldObj, x + dx, y + dy, z + dz, rand, 33, cablemeta); - } else if (dx < 3 && dx > -5 && dz == 3 && set < toSet) { - if (!lastset || treeinaRow > 2) { - short meta = GT_WorldgenUtil.getMachine(secureRandom, tier); - this.setGTMachine( - worldObj, - x + dx, - y + dy, - z + dz, - meta, - owner, - ForgeDirection.UP); - - set++; - treeinaRow = 0; - lastset = true; - } else { - lastset = rand.nextBoolean(); - if (lastset) treeinaRow++; - } - } - } - } else switch (dy) { - case 4: - if (Math.abs(dx) == 5) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + 4, - z + dz, - rand, - 25, - this.ToBuildWith[2]); - break; - } - if (Math.abs(dz) == 5 && Math.abs(dx) < 5) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + dy, - z + dz, - rand, - 25, - this.ToBuildWith[1]); - } - break; - case 5: - if (Math.abs(dx) == 4) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + 5, - z + dz, - rand, - 25, - this.ToBuildWith[2]); - break; - } - if (Math.abs(dz) == 5 && Math.abs(dx) < 4) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + dy, - z + dz, - rand, - 25, - this.ToBuildWith[1]); - } - break; - case 6: - if (Math.abs(dx) == 3) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + 6, - z + dz, - rand, - 25, - this.ToBuildWith[2]); - break; - } - if (Math.abs(dz) == 5 && Math.abs(dx) < 3) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + dy, - z + dz, - rand, - 25, - this.ToBuildWith[1]); - } - break; - case 7: - if (Math.abs(dx) == 2) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + 7, - z + dz, - rand, - 25, - this.ToBuildWith[2]); - break; - } - if (Math.abs(dz) == 5 && Math.abs(dx) < 2) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + dy, - z + dz, - rand, - 25, - this.ToBuildWith[1]); - } - break; - case 8: - if (Math.abs(dx) == 1 || Math.abs(dx) == 0) { - this.setRandomBlockWAirChance( - worldObj, - x + dx, - y + 8, - z + dz, - rand, - 25, - this.ToBuildWith[2]); - } - break; - default: - break; - } - } - } - } - tosetloop: while (set < toSet) { - int dy = 1; - int dz = 3; - for (int dx = 2; dx > -5; dx--) { - if (set >= toSet) { - break tosetloop; - } - if (!lastset || treeinaRow > 2 && worldObj.getTileEntity(x + dx, y + dy, z + dz) == null) { - short meta = GT_WorldgenUtil.getMachine(secureRandom, tier); - this.setGTMachine(worldObj, x + dx, y + dy, z + dz, meta, owner, ForgeDirection.UP); - - set++; - treeinaRow = 0; - lastset = true; - } else { - lastset = rand.nextBoolean(); - if (lastset) { - treeinaRow++; - } - } - } - } - return true; - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/BWRecipes.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/BWRecipes.java deleted file mode 100644 index 397042e76a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/BWRecipes.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import static com.github.bartimaeusnek.bartworks.util.BW_Util.calculateSv; - -import gregtech.api.enums.Materials; - -public class BWRecipes { - - public static long calcDecayTicks(int x) { - long ret; - if (x == 43) ret = 5000; - else if (x == 61) ret = 4500; - else if (x <= 100) ret = MathUtils.ceilLong((8000D * Math.tanh(-x / 20D) + 8000D) * 1000D); - else ret = MathUtils.ceilLong(8000D * Math.tanh(-x / 65D) + 8000D); - return ret; - } - - public static int computeSieverts(int givenSievert, int glassTier, boolean requiresExactSieverts, boolean cleanroom, - boolean lowGravity) { - byte specialValue = 0; - if (cleanroom && lowGravity) { - specialValue = 3; - } else if (cleanroom) { - specialValue = 2; - } else if (lowGravity) { - specialValue = 1; - } - int sievertValue = 0; - if (givenSievert >= 83 || givenSievert == 61 || givenSievert == 43) sievertValue += givenSievert; - sievertValue = sievertValue << 1; - sievertValue = sievertValue | (requiresExactSieverts ? 1 : 0); - sievertValue = sievertValue << 2; - sievertValue = sievertValue | specialValue; - sievertValue = sievertValue << 4; - sievertValue = sievertValue | glassTier; - return sievertValue; - } - - public static int computeSieverts(Materials material, int glassTier, boolean requiresExactSieverts, - boolean cleanroom, boolean lowGravity) { - byte specialValue = 0; - if (cleanroom && lowGravity) { - specialValue = 3; - } else if (cleanroom) { - specialValue = 2; - } else if (lowGravity) { - specialValue = 1; - } - int aSievert = 0; - if (material.getProtons() >= 83 || material.getProtons() == 61 || material.getProtons() == 43) - aSievert += calculateSv(material); - aSievert = aSievert << 1; - aSievert = aSievert | (requiresExactSieverts ? 1 : 0); - aSievert = aSievert << 2; - aSievert = aSievert | specialValue; - aSievert = aSievert << 4; - aSievert = aSievert | glassTier; - return aSievert; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_ColorUtil.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_ColorUtil.java deleted file mode 100644 index a3a1da4ee4..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_ColorUtil.java +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import java.util.Arrays; - -import gregtech.api.enums.Dyes; - -@SuppressWarnings("unused") -public class BW_ColorUtil { - - private BW_ColorUtil() {} - - public static byte getDarknessFromColor(short[] rgba, int index) { - int g = rgba[index]; - if (g >= 0 && g < 64) return 0; - if (g >= 64 && g < 160) return 1; - else if (g >= 160 && g < 223) return 2; - else if (g >= 233 && g <= 255) return 3; - return 4; - } - - public static Dyes getDyeFromColor(short[] rgba) { - rgba = correctCorlorArray(rgba); - if (isGrayScale(rgba, 2)) { - switch (getDarknessFromColor(rgba, 0)) { - case 0: - return Dyes.dyeBlack; - case 1: - return Dyes.dyeGray; - case 2: - return Dyes.dyeLightGray; - case 3: - return Dyes.dyeWhite; - } - } else { - short[] tmp = roundColor(rgba, 2); - if (isRedScale(tmp)) { - if (isPurpleScale(tmp)) { - switch (getDarknessFromColor(rgba, 0)) { - case 0: - case 1: - if (rgba[3] - 50 > rgba[0]) return Dyes.dyePurple; - else return Dyes.dyeRed; - case 2: - case 3: - if (rgba[3] - 50 > rgba[0]) return Dyes.dyeMagenta; - else if (rgba[0] > 200 && rgba[2] > 140) return Dyes.dyePink; - else if (rgba[0] > rgba[1] + rgba[1] / 10 && rgba[0] > rgba[2] + rgba[2] / 10 - && rgba[1] >> 4 == rgba[2] >> 4 - && rgba[1] + 50 > rgba[0]) { - return Dyes.dyeBrown; - } else return Dyes.dyeRed; - case 4: - return Dyes._NULL; - } - } - if (isYellowScale(tmp)) switch (getDarknessFromColor(rgba, 0)) { - case 0: - case 1: - return Dyes.dyeBrown; - case 2: - case 3: { - if (rgba[0] >> 5 > rgba[1] >> 5) return Dyes.dyeOrange; - else return Dyes.dyeYellow; - } - case 4: - return Dyes._NULL; - } - return Dyes.dyePink; - } - if (isGrenScale(tmp)) { - if (isCyanScale(tmp)) { - if (rgba[2] + 40 < rgba[1]) switch (getDarknessFromColor(rgba, 0)) { - case 0: - case 1: - return Dyes.dyeGreen; - case 2: - case 3: - return Dyes.dyeLime; - } - return Dyes.dyeCyan; - } - if (isYellowScale(tmp)) switch (getDarknessFromColor(rgba, 0)) { - case 0: - case 1: - return Dyes.dyeBrown; - case 2: - case 3: { - if (rgba[0] >> 5 > rgba[1] >> 5) return Dyes.dyeOrange; - else return Dyes.dyeYellow; - } - } - switch (getDarknessFromColor(rgba, 0)) { - case 0: - case 1: - return Dyes.dyeGreen; - case 2: - case 3: - return Dyes.dyeLime; - } - } else if (isBlueScale(tmp)) { - if (isPurpleScale(tmp)) { - switch (getDarknessFromColor(rgba, 0)) { - case 0: - case 1: - return Dyes.dyePurple; - case 2: - case 3: - return Dyes.dyeMagenta; - } - } else if (isCyanScale(tmp)) { - return Dyes.dyeCyan; - } - switch (getDarknessFromColor(rgba, 0)) { - case 0: - case 1: - return Dyes.dyeBlue; - case 2: - case 3: - return Dyes.dyeLightBlue; - } - } - } - return Dyes._NULL; - } - - public static boolean isCyanScale(short[] rgba) { - return !isRedScale(rgba); - } - - public static boolean isPurpleScale(short[] rgba) { - return !isGrenScale(rgba); - } - - public static boolean isYellowScale(short[] rgba) { - return !isBlueScale(rgba); - } - - public static boolean isBlueScale(short[] rgba) { - rgba = correctCorlorArray(rgba); - return rgba[2] * 2 >= rgba[1] + rgba[0]; - } - - public static boolean isGrenScale(short[] rgba) { - rgba = correctCorlorArray(rgba); - return rgba[1] * 2 >= rgba[0] + rgba[2]; - } - - public static boolean isRedScale(short[] rgba) { - rgba = correctCorlorArray(rgba); - return rgba[0] * 2 >= rgba[1] + rgba[2]; - } - - public static boolean isGrayScale(short[] rgba, int magin) { - rgba = correctCorlorArray(rgba); - return rgba[0] >> magin == rgba[1] >> magin && rgba[1] >> magin == rgba[2] >> magin; - } - - public static short[] roundColor(short[] rgba, int magin) { - short[] tmp = Arrays.copyOf(rgba, 4); - tmp[0] = (short) (rgba[0] >> magin); - tmp[1] = (short) (rgba[1] >> magin); - tmp[2] = (short) (rgba[2] >> magin); - return tmp; - } - - public static boolean isGrayScale(short[] rgba) { - rgba = correctCorlorArray(rgba); - return rgba[0] == rgba[1] && rgba[1] == rgba[2]; - } - - public static short[] correctCorlorArray(short[] rgba) { - if (rgba.length > 4) { - rgba = Arrays.copyOfRange(rgba, 0, 4); - } - if (rgba.length < 4) { - short[] tmp = Arrays.copyOf(rgba, 4); - Arrays.fill(tmp, rgba.length, 4, (short) 0); - rgba = tmp; - } - if (rgba[0] > 255) rgba[0] = 255; - if (rgba[1] > 255) rgba[1] = 255; - if (rgba[2] > 255) rgba[2] = 255; - if (rgba[3] > 255) rgba[3] = 255; - if (rgba[0] < 0) rgba[0] = 0; - if (rgba[1] < 0) rgba[1] = 0; - if (rgba[2] < 0) rgba[2] = 0; - if (rgba[3] < 0) rgba[3] = 0; - return rgba; - } - - public static short[] splitColorToRBGArray(int rgb) { - return new short[] { (short) (rgb >> 16 & 0xFF), (short) (rgb >> 8 & 0xFF), (short) (rgb & 0xFF) }; - } - - public static int getColorFromRGBArray(short[] color) { - return (color[0] & 0x0ff) << 16 | (color[1] & 0x0ff) << 8 | color[2] & 0x0ff; - } - - public static int getColorFromRGBArray(int[] color) { - return (color[0] & 0x0ff) << 16 | (color[1] & 0x0ff) << 8 | color[2] & 0x0ff; - } - -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Tooltip_Reference.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Tooltip_Reference.java deleted file mode 100644 index 8174b34b28..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Tooltip_Reference.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import static net.minecraft.util.EnumChatFormatting.BLUE; -import static net.minecraft.util.EnumChatFormatting.DARK_BLUE; -import static net.minecraft.util.EnumChatFormatting.GRAY; -import static net.minecraft.util.EnumChatFormatting.GREEN; - -import java.util.function.Function; -import java.util.function.Supplier; - -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -public class BW_Tooltip_Reference { - - public static final String BW_NO_RESET = EnumChatFormatting.DARK_GREEN + "BartWorks"; - public static final String TT_NO_RESET = BLUE + "Tec" + DARK_BLUE + "Tech"; - public static final String BW = BW_NO_RESET + GRAY; - public static final String TT = TT_NO_RESET + GRAY; - - public static final Supplier ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS = () -> StatCollector.translateToLocal( - "tooltip.bw.1.name") + " " + BW; - - public static final String MULTIBLOCK_ADDED_BY_BARTWORKS = BW; - public static final Function MULTIBLOCK_ADDED_VIA_BARTWORKS = owner -> String - .format(StatCollector.translateToLocal("tooltip.bw.mb_via.name"), owner); - public static final String MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS = MULTIBLOCK_ADDED_VIA_BARTWORKS - .apply(GREEN + "bartimaeusnek"); - - public static final String TT_BLUEPRINT = "To see the structure, use a " + TT + " Blueprint on the Controller!"; - -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Util.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Util.java deleted file mode 100644 index 27b04dbead..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/BW_Util.java +++ /dev/null @@ -1,784 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import static gregtech.api.enums.GT_Values.D1; -import static gregtech.api.enums.GT_Values.E; -import static gregtech.api.enums.GT_Values.M; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.GT_Values.W; - -import java.lang.reflect.Array; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.function.BiConsumer; -import java.util.function.Function; -import java.util.stream.Collectors; - -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.init.Items; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; -import net.minecraftforge.oredict.ShapedOreRecipe; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.bartimaeusnek.bartworks.API.BioVatLogicAdder; -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.github.bartimaeusnek.bartworks.API.GlassTier; -import com.github.bartimaeusnek.bartworks.MainMod; -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; -import com.gtnewhorizon.structurelib.structure.IStructureElement; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.OreDictNames; -import gregtech.api.enums.ToolDictNames; -import gregtech.api.interfaces.IItemContainer; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Shaped_Recipe; -import gregtech.api.util.GT_Utility; - -public class BW_Util { - - @Deprecated - public static final int STANDART = 0; - @Deprecated - public static final int LOWGRAVITY = -100; - @Deprecated - public static final int CLEANROOM = -200; - - public static String translateGTItemStack(ItemStack itemStack) { - if (!GT_Utility.isStackValid(itemStack)) return "Not a Valid ItemStack:" + itemStack; - String ret = GT_LanguageManager.getTranslation(GT_LanguageManager.getTranslateableItemStackName(itemStack)); - if (!ret.contains("%material")) return ret; - String matname = ""; - if (BW_Util.checkStackAndPrefix(itemStack)) - matname = GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial.mDefaultLocalName; - return ret.replace("%material", matname); - } - - public static void set2DCoordTo1DArray(int indexX, int indexY, int sizeY, Object value, Object[] array) { - int index = indexX * sizeY + indexY; - array[index] = value; - } - - public static Object get2DCoordFrom1DArray(int indexX, int indexY, int sizeY, Object[] array) { - int index = indexX * sizeY + indexY; - return array[index]; - } - - public static GT_Recipe copyAndSetTierToNewRecipe(GT_Recipe recipe, byte tier) { - byte oldTier = GT_Utility.getTier(recipe.mEUt); - int newTime = recipe.mDuration; - int newVoltage = recipe.mEUt; - if (tier < oldTier) { - newTime <<= oldTier - tier; - newVoltage >>= 2 * (oldTier - tier); - } else { - newTime >>= tier - oldTier; - newVoltage <<= 2 * (tier - oldTier); - } - recipe.mEUt = newVoltage; - recipe.mDuration = newTime; - return recipe; - } - - public static String subscriptNumbers(String b) { - char[] chars = b.toCharArray(); - char[] nu = new char[chars.length]; - for (int i = 0; i < chars.length; i++) { - nu[i] = switch (chars[i]) { - case '0' -> '\u2080'; - case '1' -> '\u2081'; - case '2' -> '\u2082'; - case '3' -> '\u2083'; - case '4' -> '\u2084'; - case '5' -> '\u2085'; - case '6' -> '\u2086'; - case '7' -> '\u2087'; - case '8' -> '\u2088'; - case '9' -> '\u2089'; - default -> chars[i]; - }; - } - return new String(nu); - } - - public static String subscriptNumber(Number b) { - char[] chars = Long.toString(b.longValue()) - .toCharArray(); - char[] nu = new char[chars.length]; - for (int i = 0; i < chars.length; i++) { - nu[i] = switch (chars[i]) { - case '0' -> '\u2080'; - case '1' -> '\u2081'; - case '2' -> '\u2082'; - case '3' -> '\u2083'; - case '4' -> '\u2084'; - case '5' -> '\u2085'; - case '6' -> '\u2086'; - case '7' -> '\u2087'; - case '8' -> '\u2088'; - case '9' -> '\u2089'; - default -> chars[i]; - }; - } - return new String(nu); - } - - public static String superscriptNumbers(String b) { - char[] chars = b.toCharArray(); - char[] nu = new char[chars.length]; - for (int i = 0; i < chars.length; i++) { - nu[i] = switch (chars[i]) { - case '0' -> '\u2070'; - case '1' -> '\u2071'; - case '2' -> '\u00B2'; - case '3' -> '\u00B3'; - case '4' -> '\u2074'; - case '5' -> '\u2075'; - case '6' -> '\u2076'; - case '7' -> '\u2077'; - case '8' -> '\u2078'; - case '9' -> '\u2079'; - default -> chars[i]; - }; - } - return new String(nu); - } - - public static String superscriptNumber(Number b) { - char[] chars = Long.toString(b.longValue()) - .toCharArray(); - char[] nu = new char[chars.length]; - for (int i = 0; i < chars.length; i++) { - nu[i] = switch (chars[i]) { - case '0' -> '\u2070'; - case '1' -> '\u2071'; - case '2' -> '\u00B2'; - case '3' -> '\u00B3'; - case '4' -> '\u2074'; - case '5' -> '\u2075'; - case '6' -> '\u2076'; - case '7' -> '\u2077'; - case '8' -> '\u2078'; - case '9' -> '\u2079'; - default -> chars[i]; - }; - } - return new String(nu); - } - - public static byte specialToByte(int aSpecialValue) { - byte special = 0; - switch (aSpecialValue) { - case LOWGRAVITY: - special = 1; - break; - case CLEANROOM: - special = 2; - break; - case LOWGRAVITY | CLEANROOM: - special = 3; - break; - default: - break; - } - return special; - } - - public static int calculateSv(Materials materials) { - for (BioVatLogicAdder.MaterialSvPair pair : BioVatLogicAdder.RadioHatch.getMaSv()) { - if (pair.getMaterials() - .equals(materials)) return pair.getSievert(); - } - return (int) (materials.getProtons() == 43L - ? materials.equals(Materials.NaquadahEnriched) ? 140 - : materials.equals(Materials.Naquadria) ? 150 : materials.equals(Materials.Naquadah) ? 130 : 43 - : materials.getProtons()); - } - - public static ItemStack setStackSize(ItemStack stack, int size) { - if (stack != null) stack.stackSize = size; - return stack; - } - - public static boolean checkStackAndPrefix(ItemStack itemStack) { - return itemStack != null && GT_OreDictUnificator.getAssociation(itemStack) != null - && GT_OreDictUnificator.getAssociation(itemStack).mPrefix != null - && GT_OreDictUnificator.getAssociation(itemStack).mMaterial != null - && GT_OreDictUnificator.getAssociation(itemStack).mMaterial.mMaterial != null; - } - - public static int abstractHashGTRecipe(GT_Recipe recipe) { - int hash = 31; - hash += recipe.mDuration / 20 * 31; - hash += GT_Utility.getTier(recipe.mEUt) * 31; - hash += BW_Util.specialToByte(recipe.mSpecialValue) * 31; - hash += recipe.mInputs.length * 31; - for (ItemStack mInput : recipe.mInputs) { - if (mInput != null) { - hash += mInput.stackSize * 31; - hash += Item.getIdFromItem(mInput.getItem()) * 31; - } - } - hash += recipe.mOutputs.length * 31; - for (ItemStack mOutput : recipe.mOutputs) { - if (mOutput != null) { - hash += mOutput.stackSize * 31; - hash += Item.getIdFromItem(mOutput.getItem()) * 31; - } - } - hash += recipe.mFluidInputs.length * 31; - for (FluidStack mInput : recipe.mFluidInputs) { - if (mInput != null) { - hash += mInput.amount * 31; - hash += mInput.getFluidID() * 31; - } - } - hash += recipe.mFluidOutputs.length * 31; - for (FluidStack mOutput : recipe.mFluidOutputs) { - if (mOutput != null) { - hash += mOutput.amount * 31; - hash += mOutput.getFluidID() * 31; - } - } - return hash; - } - - @SuppressWarnings({ "unchecked" }) - public static T[] copyAndRemoveNulls(T[] input, Class clazz) { - List ret = Arrays.stream(input) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - - if (ret.size() <= 0) return (T[]) Array.newInstance(clazz, 0); - - T[] retArr = (T[]) Array.newInstance(clazz, ret.size()); - - for (int i = 0; i < ret.size(); i++) retArr[i] = ret.get(i); - - return retArr; - } - - @Deprecated - public static int getMachineVoltageFromTier(int tier) { - return (int) (30 * Math.pow(4, tier - 1)); - } - - public static long getTierVoltage(int tier) { - return getTierVoltage((byte) tier); - } - - public static long getTierVoltage(byte tier) { - return 8L << 2 * tier; - } - - public static byte getTier(long voltage) { - if (voltage <= Integer.MAX_VALUE - 7) return GT_Utility.getTier(voltage); - byte t = 0; - while (voltage > 8L) { - voltage >>= 2; - t++; - } - return t; - } - - public static String getTierName(byte tier) { - if (VN.length - 1 <= tier) return "MAX+"; - return VN[tier]; - } - - public static String getTierNameFromVoltage(long voltage) { - return getTierName(getTier(voltage)); - } - - public static boolean areStacksEqualOrNull(ItemStack aStack1, ItemStack aStack2) { - return aStack1 == null && aStack2 == null || GT_Utility.areStacksEqual(aStack1, aStack2); - } - - public static boolean areStacksEqualOrEachNull(ItemStack aStack1, ItemStack aStack2) { - return aStack1 == null || aStack2 == null || GT_Utility.areStacksEqual(aStack1, aStack2); - } - - public static byte getByteFromRarity(EnumRarity rarity) { - if (EnumRarity.uncommon.equals(rarity)) return 1; - if (EnumRarity.epic.equals(rarity)) return 2; - else if (EnumRarity.rare.equals(rarity)) return 3; - return 0; - } - - /** - * @deprecated Use stuff in {@link com.github.bartimaeusnek.bartworks.API.BorosilicateGlass} instead - */ - @Deprecated - public static byte getTierFromGlasMeta(int meta) { - return switch (meta) { - case 1 -> 4; - case 2, 12 -> 5; - case 3 -> 6; - case 4 -> 7; - case 5 -> 8; - case 13 -> 9; - case 14 -> 10; - default -> 3; - }; - } - - public static EnumRarity getRarityFromByte(byte b) { - return switch (b) { - case 1 -> EnumRarity.uncommon; - case 2 -> EnumRarity.rare; - case 3 -> EnumRarity.epic; - default -> EnumRarity.common; - }; - } - - public static byte getCircuitTierFromOreDictName(String name) { - return switch (name) { - case "circuitPrimitive" -> 0; - case "circuitBasic" -> 1; - case "circuitGood" -> 2; - case "circuitAdvanced" -> 3; - case "circuitData" -> 4; - case "circuitElite" -> 5; - case "circuitMaster" -> 6; - case "circuitUltimate" -> 7; - case "circuitSuperconductor" -> 8; - case "circuitInfinite" -> 9; - case "circuitBio" -> 10; - case "circuitNano", "circuitOptical" -> 11; - case "circuitPiko", "circuitExotic" -> 12; - case "circuitQuantum", "circuitCosmic" -> 13; - case "circuitTranscendent" -> 14; - default -> -1; - }; - } - - public static byte getCircuitTierFromItemStack(ItemStack stack) { - for (String oreName : getOreNames(stack)) { - byte tier = getCircuitTierFromOreDictName(oreName); - if (tier != -1) { - return tier; - } - } - return -1; - } - - public static boolean isTieredCircuit(ItemStack stack) { - return getCircuitTierFromItemStack(stack) != -1; - } - - public static List getOreNames(ItemStack stack) { - List ret = new ArrayList<>(); - for (int oreID : OreDictionary.getOreIDs(stack)) { - ret.add(OreDictionary.getOreName(oreID)); - } - return ret; - } - - public static IStructureElement ofGlassTiered(byte mintier, byte maxtier, byte notset, - BiConsumer setter, Function getter, int aDots) { - return new IStructureElement<>() { - - private final IStructureElement placementDelegate = BorosilicateGlass - .ofBoroGlass(notset, mintier, maxtier, setter, getter); - - @Override - public boolean check(T te, World world, int x, int y, int z) { - if (world.isAirBlock(x, y, z)) return false; - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - - int glassTier = GlassTier.getGlassTier(block, meta); - - // If it is not a glass, the tier will be 0. - if (glassTier == 0 || glassTier == notset || glassTier < mintier || glassTier > maxtier) return false; - - if (getter.apply(te) == notset) setter.accept(te, (byte) glassTier); - return getter.apply(te) == glassTier; - } - - @Override - public boolean spawnHint(T te, World world, int x, int y, int z, ItemStack itemStack) { - StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), aDots - 1); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return this.placementDelegate.placeBlock(t, world, x, y, z, trigger); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - return this.placementDelegate.survivalPlaceBlock(t, world, x, y, z, trigger, env); - } - }; - } - - public static IStructureElement ofGlassTieredMixed(byte mintier, byte maxtier, int aDots) { - return new IStructureElement<>() { - - private final IStructureElement placementDelegate = BorosilicateGlass - .ofBoroGlass((byte) 0, mintier, maxtier, (v1, v2) -> {}, v1 -> (byte) 0); - - @Override - public boolean check(T te, World world, int x, int y, int z) { - if (world.isAirBlock(x, y, z)) return false; - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - int glassTier = GlassTier.getGlassTier(block, meta); - - if (glassTier == 0) return false; // Not a glass. - return glassTier >= mintier && glassTier <= maxtier; - } - - @Override - public boolean spawnHint(T te, World world, int x, int y, int z, ItemStack itemStack) { - StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), aDots - 1); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return this.placementDelegate.placeBlock(t, world, x, y, z, trigger); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - return this.placementDelegate.survivalPlaceBlock(t, world, x, y, z, trigger, env); - } - }; - } - - private static Field sBufferedRecipeList; - - @SuppressWarnings("unchecked") - public static List getGTBufferedRecipeList() - throws SecurityException, IllegalArgumentException, IllegalAccessException { - if (sBufferedRecipeList == null) { - sBufferedRecipeList = FieldUtils.getDeclaredField(GT_ModHandler.class, "sBufferRecipeList", true); - } - if (sBufferedRecipeList == null) { - sBufferedRecipeList = FieldUtils.getField(GT_ModHandler.class, "sBufferRecipeList", true); - } - return (List) sBufferedRecipeList.get(null); - } - - public static ShapedOreRecipe createGTCraftingRecipe(ItemStack aResult, long aBitMask, Object[] aRecipe) { - return createGTCraftingRecipe( - aResult, - new Enchantment[0], - new int[0], - (aBitMask & GT_ModHandler.RecipeBits.MIRRORED) != 0L, - (aBitMask & GT_ModHandler.RecipeBits.BUFFERED) != 0L, - (aBitMask & GT_ModHandler.RecipeBits.KEEPNBT) != 0L, - (aBitMask & GT_ModHandler.RecipeBits.DISMANTLEABLE) != 0L, - (aBitMask & GT_ModHandler.RecipeBits.NOT_REMOVABLE) == 0L, - (aBitMask & GT_ModHandler.RecipeBits.REVERSIBLE) != 0L, - (aBitMask & GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES) != 0L, - (aBitMask & GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES_IF_SAME_NBT) != 0L, - (aBitMask & GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES) != 0L, - (aBitMask & GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_NATIVE_RECIPES) != 0L, - (aBitMask & GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS) == 0L, - (aBitMask & GT_ModHandler.RecipeBits.ONLY_ADD_IF_THERE_IS_ANOTHER_RECIPE_FOR_IT) != 0L, - (aBitMask & GT_ModHandler.RecipeBits.ONLY_ADD_IF_RESULT_IS_NOT_NULL) != 0L, - aRecipe); - } - - public static ShapedOreRecipe createGTCraftingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, - int[] aEnchantmentLevelsAdded, boolean aMirrored, boolean aBuffered, boolean aKeepNBT, boolean aDismantleable, - boolean aRemovable, boolean aReversible, boolean aRemoveAllOthersWithSameOutput, - boolean aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT, boolean aRemoveAllOtherShapedsWithSameOutput, - boolean aRemoveAllOtherNativeRecipes, boolean aCheckForCollisions, - boolean aOnlyAddIfThereIsAnyRecipeOutputtingThis, boolean aOnlyAddIfResultIsNotNull, Object[] aRecipe) { - aResult = GT_OreDictUnificator.get(true, aResult); - if (aOnlyAddIfResultIsNotNull && aResult == null) return null; - if (aResult != null && Items.feather.getDamage(aResult) == W) Items.feather.setDamage(aResult, 0); - if (aRecipe == null || aRecipe.length <= 0) return null; - - boolean tThereWasARecipe = false; - - for (byte i = 0; i < aRecipe.length; i++) { - if (aRecipe[i] instanceof IItemContainer itemContainer) { - aRecipe[i] = itemContainer.get(1); - continue; - } - if (aRecipe[i] instanceof Enumenum_) { - aRecipe[i] = enum_.name(); - continue; - } - if (aRecipe[i] != null && !(aRecipe[i] instanceof ItemStack) - && !(aRecipe[i] instanceof ItemData) - && !(aRecipe[i] instanceof String) - && !(aRecipe[i] instanceof Character)) { - aRecipe[i] = aRecipe[i].toString(); - } - } - - try { - StringBuilder shape = new StringBuilder(E); - int idx = 0; - if (aRecipe[idx] instanceof Boolean) { - throw new IllegalArgumentException(); - } - - ArrayList tRecipeList = new ArrayList<>(Arrays.asList(aRecipe)); - - while (aRecipe[idx] instanceof String string) { - StringBuilder s = new StringBuilder(string); - idx++; - shape.append(s); - while (s.length() < 3) s.append(" "); - if (s.length() > 3) throw new IllegalArgumentException(); - - for (char c : s.toString() - .toCharArray()) { - switch (c) { - case 'b': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolBlade.name()); - break; - case 'c': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolCrowbar.name()); - break; - case 'd': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolScrewdriver.name()); - break; - case 'f': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolFile.name()); - break; - case 'h': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolHardHammer.name()); - break; - case 'i': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolSolderingIron.name()); - break; - case 'j': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolSolderingMetal.name()); - break; - case 'k': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolKnife.name()); - break; - case 'm': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolMortar.name()); - break; - case 'p': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolDrawplate.name()); - break; - case 'r': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolSoftHammer.name()); - break; - case 's': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolSaw.name()); - break; - case 'w': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolWrench.name()); - break; - case 'x': - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolWireCutter.name()); - break; - } - } - } - - aRecipe = tRecipeList.toArray(); - - if (aRecipe[idx] instanceof Boolean) { - idx++; - } - Map tItemStackMap = new HashMap<>(); - Map tItemDataMap = new HashMap<>(); - tItemStackMap.put(' ', null); - - boolean tRemoveRecipe = true; - - for (; idx < aRecipe.length; idx += 2) { - if (aRecipe[idx] == null || aRecipe[idx + 1] == null) { - if (D1) { - GT_Log.err.println( - "WARNING: Missing Item for shaped Recipe: " - + (aResult == null ? "null" : aResult.getDisplayName())); - for (Object tContent : aRecipe) GT_Log.err.println(tContent); - } - return null; - } - Character chr = (Character) aRecipe[idx]; - Object in = aRecipe[idx + 1]; - if (in instanceof ItemStack) { - tItemStackMap.put(chr, GT_Utility.copy(in)); - tItemDataMap.put(chr, GT_OreDictUnificator.getItemData((ItemStack) in)); - } else if (in instanceof ItemData) { - String tString = in.toString(); - switch (tString) { - case "plankWood": - tItemDataMap.put(chr, new ItemData(Materials.Wood, M)); - break; - case "stoneNetherrack": - tItemDataMap.put(chr, new ItemData(Materials.Netherrack, M)); - break; - case "stoneObsidian": - tItemDataMap.put(chr, new ItemData(Materials.Obsidian, M)); - break; - case "stoneEndstone": - tItemDataMap.put(chr, new ItemData(Materials.Endstone, M)); - break; - default: - tItemDataMap.put(chr, (ItemData) in); - break; - } - ItemStack tStack = GT_OreDictUnificator.getFirstOre(in, 1); - if (tStack == null) tRemoveRecipe = false; - else tItemStackMap.put(chr, tStack); - aRecipe[idx + 1] = in.toString(); - } else if (in instanceof String) { - if (in.equals(OreDictNames.craftingChest.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Wood, M * 8)); - else if (in.equals(OreDictNames.craftingBook.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Paper, M * 3)); - else if (in.equals(OreDictNames.craftingPiston.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Stone, M * 4, Materials.Wood, M * 3)); - else if (in.equals(OreDictNames.craftingFurnace.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Stone, M * 8)); - else if (in.equals(OreDictNames.craftingIndustrialDiamond.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Diamond, M)); - else if (in.equals(OreDictNames.craftingAnvil.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Iron, M * 10)); - ItemStack tStack = GT_OreDictUnificator.getFirstOre(in, 1); - if (tStack == null) tRemoveRecipe = false; - else tItemStackMap.put(chr, tStack); - } else { - throw new IllegalArgumentException(); - } - } - - if (aReversible && aResult != null) { - ItemData[] tData = new ItemData[9]; - int x = -1; - for (char chr : shape.toString() - .toCharArray()) { - x++; - tData[x] = tItemDataMap.get(chr); - } - if (GT_Utility.arrayContainsNonNull(tData)) - GT_OreDictUnificator.addItemData(aResult, new ItemData(tData)); - } - - if (aCheckForCollisions && tRemoveRecipe) { - ItemStack[] tRecipe = new ItemStack[9]; - int x = -1; - for (char chr : shape.toString() - .toCharArray()) { - x++; - tRecipe[x] = tItemStackMap.get(chr); - if (tRecipe[x] != null && Items.feather.getDamage(tRecipe[x]) == W) - Items.feather.setDamage(tRecipe[x], 0); - } - tThereWasARecipe = GT_ModHandler.removeRecipe(tRecipe) != null; - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - - if (aResult == null || aResult.stackSize <= 0) return null; - - if (aRemoveAllOthersWithSameOutput || aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT - || aRemoveAllOtherShapedsWithSameOutput - || aRemoveAllOtherNativeRecipes) - tThereWasARecipe = GT_ModHandler.removeRecipeByOutput( - aResult, - !aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT, - aRemoveAllOtherShapedsWithSameOutput, - aRemoveAllOtherNativeRecipes) || tThereWasARecipe; - - if (aOnlyAddIfThereIsAnyRecipeOutputtingThis && !tThereWasARecipe) { - ArrayList tList = (ArrayList) CraftingManager.getInstance() - .getRecipeList(); - int tList_sS = tList.size(); - for (int i = 0; i < tList_sS && !tThereWasARecipe; i++) { - IRecipe tRecipe = tList.get(i); - if (GT_ModHandler.sSpecialRecipeClasses.contains( - tRecipe.getClass() - .getName())) - continue; - if (GT_Utility.areStacksEqual(GT_OreDictUnificator.get(tRecipe.getRecipeOutput()), aResult, true)) { - tList.remove(i); - i--; - tList_sS = tList.size(); - tThereWasARecipe = true; - } - } - } - - if (Items.feather.getDamage(aResult) == W || Items.feather.getDamage(aResult) < 0) - Items.feather.setDamage(aResult, 0); - - GT_Utility.updateItemStack(aResult); - - return new GT_Shaped_Recipe( - GT_Utility.copy(aResult), - aDismantleable, - aRemovable, - aKeepNBT, - aEnchantmentsAdded, - aEnchantmentLevelsAdded, - aRecipe).setMirrored(aMirrored); - } - - public static void shortSleep(long nanos) { - try { - long start = System.nanoTime(); - long end; - do { - end = System.nanoTime(); - } while (start + nanos >= end); - } catch (Exception e) { - MainMod.LOGGER.catching(e); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/BioCulture.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/BioCulture.java deleted file mode 100644 index c4ff2f721c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/BioCulture.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import java.awt.Color; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Objects; - -import net.minecraft.item.EnumRarity; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; - -import gregtech.api.interfaces.IColorModulationContainer; -import gregtech.api.util.GT_LanguageManager; - -public class BioCulture extends BioData implements IColorModulationContainer { - - public static final ArrayList BIO_CULTURE_ARRAY_LIST = new ArrayList<>(); - public static final BioCulture NULLCULTURE = BioCulture - .createAndRegisterBioCulture(Color.BLUE, "", BioPlasmid.NULLPLASMID, BioDNA.NULLDNA, false); // fallback - // NULL - // culture, - // also Blue =) - - public String getLocalisedName() { - return GT_LanguageManager.getTranslation(this.getName()); - } - - public void setLocalisedName(String localisedName) { - GT_LanguageManager.addStringLocalization(this.getName(), localisedName); - } - - Color color; - BioPlasmid plasmid; - BioDNA dDNA; - boolean bBreedable; - Fluid mFluid; - - protected BioCulture(Color color, String name, int ID, BioPlasmid plasmid, BioDNA dDNA, EnumRarity rarity, - boolean bBreedable) { - super(name, ID, rarity); - this.color = color; - this.plasmid = plasmid; - this.dDNA = dDNA; - this.bBreedable = bBreedable; - } - - protected BioCulture(Color color, String name, int ID, BioPlasmid plasmid, BioDNA dDNA) { - super(name, ID, dDNA.getRarity()); - this.color = color; - this.plasmid = plasmid; - this.dDNA = dDNA; - } - - public static BioCulture createAndRegisterBioCulture(Color color, String name, BioPlasmid plasmid, BioDNA dna, - EnumRarity rarity, boolean breedable) { - BioCulture ret = new BioCulture(color, name, BIO_CULTURE_ARRAY_LIST.size(), plasmid, dna, rarity, breedable); - BIO_CULTURE_ARRAY_LIST.add(ret); - return ret; - } - - public static BioCulture createAndRegisterBioCulture(Color color, String name, BioPlasmid plasmid, BioDNA dna, - boolean breedable) { - BioCulture ret = new BioCulture( - color, - name, - BIO_CULTURE_ARRAY_LIST.size(), - plasmid, - dna, - dna.getRarity(), - breedable); - BIO_CULTURE_ARRAY_LIST.add(ret); - return ret; - } - - public static NBTTagCompound getNBTTagFromCulture(BioCulture bioCulture) { - if (bioCulture == null) return new NBTTagCompound(); - NBTTagCompound ret = new NBTTagCompound(); - ret.setString("Name", bioCulture.name); - // ret.setInteger("ID", bioCulture.ID); - ret.setIntArray( - "Color", - new int[] { bioCulture.color.getRed(), bioCulture.color.getGreen(), bioCulture.color.getBlue() }); - ret.setTag("Plasmid", BioData.getNBTTagFromBioData(BioData.convertBioPlasmidToBioData(bioCulture.plasmid))); - ret.setTag("DNA", BioData.getNBTTagFromBioData(BioData.convertBioDNAToBioData(bioCulture.dDNA))); - ret.setBoolean("Breedable", bioCulture.bBreedable); - ret.setByte("Rarety", BW_Util.getByteFromRarity(bioCulture.rarity)); - if (bioCulture.bBreedable) ret.setString( - "Fluid", - bioCulture.getFluid() - .getName()); - return ret; - } - - public static BioCulture getBioCultureFromNBTTag(NBTTagCompound tag) { - if (tag == null || tag.getIntArray("Color").length == 0) return null; - BioCulture ret = getBioCulture(tag.getString("Name")); - - if (ret == null) ret = createAndRegisterBioCulture( - new Color(tag.getIntArray("Color")[0], tag.getIntArray("Color")[1], tag.getIntArray("Color")[2]), - tag.getString("Name"), - BioPlasmid.convertDataToPlasmid(getBioDataFromNBTTag(tag.getCompoundTag("Plasmid"))), - BioDNA.convertDataToDNA(getBioDataFromNBTTag(tag.getCompoundTag("DNA"))), - BW_Util.getRarityFromByte(tag.getByte("Rarety")), - tag.getBoolean("Breedable")); - if (ret.bBreedable) ret.setFluid(FluidRegistry.getFluid(tag.getString("Fluid"))); - if (ret.getFluidNotSet()) // should never happen, but better safe than sorry - ret.setbBreedable(false); - return ret; - } - - public static BioCulture getBioCulture(String Name) { - if (Name == null || Name.isEmpty()) return null; - for (BioCulture b : BIO_CULTURE_ARRAY_LIST) if (b.name.equals(Name)) return b; - return null; - } - - public static BioCulture getBioCulture(BioDNA DNA) { - for (BioCulture b : BIO_CULTURE_ARRAY_LIST) if (b.getdDNA() - .equals(DNA)) return b; - return null; - } - - public Fluid getFluid() { - if (this.mFluid == null) - throw new IllegalStateException("Fluid has not been set yet! The issuring Culture is: " + this.name); - return this.mFluid; - } - - public void setFluid(Fluid mFluid) { - this.mFluid = mFluid; - } - - public boolean getFluidNotSet() { - return this.mFluid == null && this.isBreedable(); - } - - public boolean isBreedable() { - return this.bBreedable; - } - - public void setbBreedable(boolean bBreedable) { - this.bBreedable = bBreedable; - } - - public int getColorRGB() { - return BW_ColorUtil - .getColorFromRGBArray(new int[] { this.color.getRed(), this.color.getGreen(), this.color.getBlue() }); - } - - public Color getColor() { - return this.color; - } - - public void setColor(Color color) { - this.color = color; - } - - public BioPlasmid getPlasmid() { - return this.plasmid; - } - - public BioCulture setPlasmid(BioPlasmid plasmid) { - return this.checkForExisting( - new BioCulture(this.color, this.name, this.ID, plasmid, this.dDNA, this.rarity, this.bBreedable)); - } - - private BioCulture checkForExisting(BioCulture culture) { - if (culture == null) return null; - for (BioCulture bc : BioCulture.BIO_CULTURE_ARRAY_LIST) if (culture.getdDNA() - .equals(bc.getdDNA()) - && culture.getPlasmid() - .equals(bc.getPlasmid())) - return bc; - return culture; - } - - public BioCulture setPlasmidUnsafe(BioPlasmid plasmid) { - this.plasmid = plasmid; - return this; - } - - public BioDNA getdDNA() { - return this.dDNA; - } - - public BioCulture setdDNA(BioDNA dDNA) { - return this.checkForExisting( - new BioCulture(this.color, this.name, this.ID, this.plasmid, dDNA, this.rarity, this.bBreedable)); - } - - public BioCulture setdDNAUnsafe(BioDNA dDNA) { - this.dDNA = dDNA; - return this; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || this.getClass() != o.getClass() || !super.equals(o)) return false; - BioCulture culture = (BioCulture) o; - return this.isBreedable() == culture.isBreedable() && Objects.equals(this.getColor(), culture.getColor()) - && Objects.equals(this.getPlasmid(), culture.getPlasmid()) - && Objects.equals(this.getdDNA(), culture.getdDNA()) - && Objects.equals(this.mFluid, culture.mFluid); - } - - @Override - public int hashCode() { - return MurmurHash3.murmurhash3_x86_32( - ByteBuffer.allocate(17) - .putInt( - MurmurHash3.murmurhash3_x86_32( - this.getName(), - 0, - this.getName() - .length(), - 31)) - .putInt(this.getColorRGB()) - .putInt(this.getPlasmid().ID) - .putInt(this.getdDNA().ID) - .put((byte) (this.isBreedable() ? 1 : 0)) - .array(), - 0, - 17, - 31); - } - - @Override - public short[] getRGBA() { - return new short[] { (short) this.getColor() - .getRed(), - (short) this.getColor() - .getGreen(), - (short) this.getColor() - .getBlue(), - (short) this.getColor() - .getAlpha() }; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/BioDNA.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/BioDNA.java deleted file mode 100644 index 22edd60170..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/BioDNA.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import net.minecraft.item.EnumRarity; - -public class BioDNA extends BioData { - - public static final BioDNA NULLDNA = createAndRegisterBioDNA("", EnumRarity.epic); - - protected BioDNA(String name, int ID, EnumRarity rarity) { - super(name, ID, rarity); - } - - protected BioDNA(BioData bioData) { - super(bioData); - this.name = bioData.name; - this.ID = bioData.ID; - this.rarity = bioData.rarity; - } - - public static BioDNA convertDataToDNA(BioData bioData) { - return new BioDNA(bioData); - } - - public static BioDNA createAndRegisterBioDNA(String aName, EnumRarity rarity) { - BioData ret = BioData.createAndRegisterBioData(aName, rarity); - return new BioDNA(ret); - } - - public static BioDNA createAndRegisterBioDNA(String aName, EnumRarity rarity, int chance, int tier) { - BioData ret = BioData.createAndRegisterBioData(aName, rarity, chance, tier); - return new BioDNA(ret); - } - - @Override - public String toString() { - return "BioDNA{" + "name='" + this.name + '\'' + ", ID=" + this.ID + '}'; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/BioData.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/BioData.java deleted file mode 100644 index 7a4c87f7d2..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/BioData.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.Objects; - -import net.minecraft.item.EnumRarity; -import net.minecraft.nbt.NBTTagCompound; - -public class BioData { - - public static final ArrayList BIO_DATA_ARRAY_LIST = new ArrayList<>(); - - protected String name; - protected int ID; - protected EnumRarity rarity; - protected int chance; - protected int tier; - - protected BioData(String name, int ID, EnumRarity rarity, int chance, int tier) { - this.name = name; - this.ID = ID; - this.rarity = rarity; - this.chance = chance; - this.tier = tier; - } - - protected BioData(String name, int ID, EnumRarity rarity) { - this.name = name; - this.ID = ID; - this.rarity = rarity; - this.chance = 7500; - this.tier = 0; - } - - protected BioData(BioData bioData) { - this.rarity = bioData.rarity; - this.name = bioData.name; - this.ID = bioData.ID; - this.chance = bioData.chance; - this.tier = bioData.tier; - } - - public static BioData convertBioPlasmidToBioData(BioPlasmid bioPlasmid) { - return new BioData(bioPlasmid.name, bioPlasmid.ID, bioPlasmid.rarity, bioPlasmid.chance, bioPlasmid.tier); - } - - public static BioData convertBioDNAToBioData(BioDNA bioDNA) { - return new BioData(bioDNA.name, bioDNA.ID, bioDNA.rarity, bioDNA.chance, bioDNA.tier); - } - - public static BioData createAndRegisterBioData(String aName, EnumRarity rarity, int chance, int tier) { - BioData ret = new BioData(aName, BIO_DATA_ARRAY_LIST.size(), rarity, chance, tier); - BIO_DATA_ARRAY_LIST.add(ret); - return ret; - } - - public static BioData createAndRegisterBioData(String aName, EnumRarity rarity) { - BioData ret = new BioData(aName, BIO_DATA_ARRAY_LIST.size(), rarity); - BIO_DATA_ARRAY_LIST.add(ret); - return ret; - } - - public static NBTTagCompound getNBTTagFromBioData(BioData bioData) { - NBTTagCompound ret = new NBTTagCompound(); - ret.setByte("Rarity", BW_Util.getByteFromRarity(bioData.rarity)); - ret.setString("Name", bioData.name); - // ret.setInteger("ID", bioData.ID); buggy when load Order changes - ret.setInteger("Chance", bioData.chance); - ret.setInteger("Tier", bioData.tier); - return ret; - } - - public static BioData getBioDataFromNBTTag(NBTTagCompound tag) { - if (tag == null) return null; - return getBioDataFromName(tag.getString("Name")); - } - - public static BioData getBioDataFromName(String Name) { - for (BioData bd : BIO_DATA_ARRAY_LIST) if (bd.name.equals(Name)) return bd; - return null; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || this.getClass() != o.getClass()) return false; - BioData bioData = (BioData) o; - return this.getID() == bioData.getID() - || this.getChance() == bioData.getChance() && this.getTier() == bioData.getTier() - && Objects.equals(this.getName(), bioData.getName()) - && this.getRarity() == bioData.getRarity(); - } - - @Override - public int hashCode() { - return MurmurHash3.murmurhash3_x86_32( - ByteBuffer.allocate(13) - .putInt( - MurmurHash3.murmurhash3_x86_32( - this.getName(), - 0, - this.getName() - .length(), - 31)) - .put(BW_Util.getByteFromRarity(this.getRarity())) - .putInt(this.getChance()) - .putInt(this.getTier()) - .array(), - 0, - 13, - 31); - } - - public int getTier() { - return this.tier; - } - - public void setTier(int tier) { - this.tier = tier; - } - - @Override - public String toString() { - return "BioData{" + "name='" + this.name + '\'' + ", ID=" + this.ID + '}'; - } - - public EnumRarity getRarity() { - return this.rarity; - } - - public void setRarity(EnumRarity rarity) { - this.rarity = rarity; - } - - public int getChance() { - return this.chance; - } - - public void setChance(int chance) { - this.chance = chance; - } - - public String getName() { - return this.name; - } - - public void setName(String name) { - this.name = name; - } - - /** - * DO NOT USE GET ID TO GET THE OBJECT! THIS SHOULD ONLY BE USED FOR COMPARISON! - * - * @return the position in the loading list - */ - public int getID() { - return this.ID; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/BioPlasmid.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/BioPlasmid.java deleted file mode 100644 index 0d40d9deca..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/BioPlasmid.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import net.minecraft.item.EnumRarity; - -public class BioPlasmid extends BioData { - - public static final BioPlasmid NULLPLASMID = convertDataToPlasmid(BioData.convertBioDNAToBioData(BioDNA.NULLDNA)); - - private BioPlasmid(String name, int ID, EnumRarity rarity) { - super(name, ID, rarity); - } - - protected BioPlasmid(BioData bioData) { - super(bioData); - this.name = bioData.name; - this.ID = bioData.ID; - this.rarity = bioData.rarity; - } - - public static BioPlasmid convertDataToPlasmid(BioData bioData) { - return new BioPlasmid(bioData); - } - - public static BioPlasmid createAndRegisterBioPlasmid(String aName, EnumRarity rarity) { - BioData ret = BioData.createAndRegisterBioData(aName, rarity); - return new BioPlasmid(ret); - } - - public static BioPlasmid createAndRegisterBioPlasmid(String aName, EnumRarity rarity, int chance, int tier) { - BioData ret = BioData.createAndRegisterBioData(aName, rarity, chance, tier); - return new BioPlasmid(ret); - } - - @Override - public String toString() { - return "BioPlasmid{" + "name='" + this.name + '\'' + ", ID=" + this.ID + '}'; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/CachedReflectionUtils.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/CachedReflectionUtils.java deleted file mode 100644 index 063a310db8..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/CachedReflectionUtils.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.github.bartimaeusnek.bartworks.util; - -import java.lang.reflect.Field; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.apache.commons.lang3.reflect.FieldUtils; - -public class CachedReflectionUtils { - - private static final ClassValue> fields = new ConcurrentMapClassValue(); - private static final ClassValue> declaredFields = new ConcurrentMapClassValue(); - - public static Field getField(final Class cls, final String fieldName) { - return fields.get(cls) - .computeIfAbsent(fieldName, f -> FieldUtils.getField(cls, f, true)); - } - - public static Field getDeclaredField(final Class cls, final String fieldName) { - return declaredFields.get(cls) - .computeIfAbsent(fieldName, f -> FieldUtils.getDeclaredField(cls, f, true)); - } - - private static class ConcurrentMapClassValue extends ClassValue> { - - @Override - protected Map computeValue(Class type) { - return new ConcurrentHashMap<>(); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/ConnectedBlocksChecker.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/ConnectedBlocksChecker.java deleted file mode 100644 index 9feb344fa0..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/ConnectedBlocksChecker.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import java.util.HashSet; - -import net.minecraft.block.Block; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class ConnectedBlocksChecker { - - public final HashSet hashset = new HashSet<>(2048); - - public static byte check_sourroundings(Coords C, Block b) { - byte ret = 0; - World w = DimensionManager.getWorld(C.wID); - int x = C.x, y = C.y, z = C.z; - - if (w.getBlock(x + 1, y, z) - .equals(b)) ret = (byte) (ret | 0b000100); - - if (w.getBlock(x - 1, y, z) - .equals(b)) ret = (byte) (ret | 0b001000); - - if (w.getBlock(x, y, z + 1) - .equals(b)) ret = (byte) (ret | 0b010000); - - if (w.getBlock(x, y, z - 1) - .equals(b)) ret = (byte) (ret | 0b100000); - - if (w.getBlock(x, y + 1, z) - .equals(b)) ret = (byte) (ret | 0b000001); - - if (w.getBlock(x, y - 1, z) - .equals(b)) ret = (byte) (ret | 0b000010); - - return ret; - } - - public int get_connected(World w, int x, int y, int z, Block b) { - int ret = 0; - - int wID = w.provider.dimensionId; - - byte sides = this.check_sourroundings(w, x, y, z, b); - - if ((sides | 0b111011) == 0b111111 && !this.hashset.contains(new Coords(x + 1, y, z, wID))) { - ret++; - ret += this.get_connected(w, x + 1, y, z, b); - } - - if ((sides | 0b110111) == 0b111111 && !this.hashset.contains(new Coords(x - 1, y, z, wID))) { - ret++; - ret += this.get_connected(w, x - 1, y, z, b); - } - - if ((sides | 0b101111) == 0b111111 && !this.hashset.contains(new Coords(x, y, z + 1, wID))) { - ret++; - ret += this.get_connected(w, x, y, z + 1, b); - } - - if ((sides | 0b011111) == 0b111111 && !this.hashset.contains(new Coords(x, y, z - 1, wID))) { - ret++; - ret += this.get_connected(w, x, y, z - 1, b); - } - - if ((sides | 0b111110) == 0b111111 && !this.hashset.contains(new Coords(x, y + 1, z, wID))) { - ret++; - ret += this.get_connected(w, x, y + 1, z, b); - } - - if ((sides | 0b111101) == 0b111111 && !this.hashset.contains(new Coords(x, y - 1, z, wID))) { - ret++; - ret += this.get_connected(w, x, y - 1, z, b); - } - - return ret; - } - - public byte check_sourroundings(World w, int x, int y, int z, Block b) { - - byte ret = 0; - int wID = w.provider.dimensionId; - - if (this.hashset.contains(new Coords(x, y, z, wID))) return ret; - - this.hashset.add(new Coords(x, y, z, wID)); - - if (w.getBlock(x + 1, y, z) - .equals(b)) ret = (byte) (ret | 0b000100); - - if (w.getBlock(x - 1, y, z) - .equals(b)) ret = (byte) (ret | 0b001000); - - if (w.getBlock(x, y, z + 1) - .equals(b)) ret = (byte) (ret | 0b010000); - - if (w.getBlock(x, y, z - 1) - .equals(b)) ret = (byte) (ret | 0b100000); - - if (w.getBlock(x, y + 1, z) - .equals(b)) ret = (byte) (ret | 0b000001); - - if (w.getBlock(x, y - 1, z) - .equals(b)) ret = (byte) (ret | 0b000010); - - return ret; - } - - public boolean get_meta_of_sideblocks(World w, int n, int[] xyz, boolean GT) { - - int wID = w.provider.dimensionId; - Coords Controller = new Coords(xyz[0], xyz[1], xyz[2], wID); - - for (Coords C : this.hashset) { - if (GT) { - if (!new Coords(C.x, C.y + 1, C.z, wID).equals(Controller) - && w.getTileEntity(C.x, C.y + 1, C.z) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - if (!new Coords(C.x, C.y - 1, C.z, wID).equals(Controller) - && w.getTileEntity(C.x, C.y - 1, C.z) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - if (!new Coords(C.x + 1, C.y, C.z, wID).equals(Controller) - && w.getTileEntity(C.x + 1, C.y, C.z) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - if (!new Coords(C.x - 1, C.y, C.z, wID).equals(Controller) - && w.getTileEntity(C.x - 1, C.y, C.z) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - if (!new Coords(C.x, C.y, C.z + 1, wID).equals(Controller) - && w.getTileEntity(C.x, C.y, C.z + 1) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - if (!new Coords(C.x, C.y, C.z - 1, wID).equals(Controller) - && w.getTileEntity(C.x, C.y, C.z - 1) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - } else { - if (n == w.getBlockMetadata(C.x, C.y + 1, C.z) && !new Coords(C.x, C.y + 1, C.z, wID).equals(Controller) - || n == w.getBlockMetadata(C.x, C.y - 1, C.z) - && !new Coords(C.x, C.y - 1, C.z, wID).equals(Controller)) { - return true; - } - if (n == w.getBlockMetadata(C.x + 1, C.y, C.z) - && !new Coords(C.x + 1, C.y, C.z, wID).equals(Controller)) { - return true; - } - if (n == w.getBlockMetadata(C.x - 1, C.y, C.z) - && !new Coords(C.x - 1, C.y, C.z, wID).equals(Controller)) { - return true; - } - if (n == w.getBlockMetadata(C.x, C.y, C.z + 1) - && !new Coords(C.x, C.y, C.z + 1, wID).equals(Controller)) { - return true; - } - if (n == w.getBlockMetadata(C.x, C.y, C.z - 1) - && !new Coords(C.x, C.y, C.z - 1, wID).equals(Controller)) { - return true; - } - } - } - return false; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/ConnectedBlocksCheckerIteration.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/ConnectedBlocksCheckerIteration.java deleted file mode 100644 index cfd2c70d1d..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/ConnectedBlocksCheckerIteration.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import java.util.HashSet; -import java.util.LinkedList; -import java.util.Queue; - -import net.minecraft.block.Block; -import net.minecraft.world.World; - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -/** - * This implementation is for some reason slower than the Recursive Check.... For ~3400 blocks this takes 8ms, the - * Recursive Check 5ms. - */ -public class ConnectedBlocksCheckerIteration { - - public final HashSet hashset = new HashSet<>(2048); - public final HashSet checked = new HashSet<>(4096); - private final Queue kwoe = new LinkedList<>(); - - public long get_connected(World w, int x, int y, int z, Block b) { - this.kwoe.add(new Coords(x, y, z, w.provider.dimensionId)); - this.hashset.add(new Coords(x, y, z, w.provider.dimensionId)); - while (!this.kwoe.isEmpty()) { - Coords tocheck = this.kwoe.poll(); - int wID = w.provider.dimensionId; - this.checked.add(tocheck); - Coords c; - if (!this.checked.contains(c = new Coords(tocheck.x + 1, tocheck.y, tocheck.z, wID)) - && w.getBlock(tocheck.x + 1, tocheck.y, tocheck.z) - .equals(b)) { - this.kwoe.add(c); - this.hashset.add(c); - } - if (!this.checked.contains(c = new Coords(tocheck.x - 1, tocheck.y, tocheck.z, wID)) - && w.getBlock(tocheck.x - 1, tocheck.y, tocheck.z) - .equals(b)) { - this.kwoe.add(c); - this.hashset.add(c); - } - if (!this.checked.contains(c = new Coords(tocheck.x, tocheck.y, tocheck.z + 1, wID)) - && w.getBlock(tocheck.x, tocheck.y, tocheck.z + 1) - .equals(b)) { - this.kwoe.add(c); - this.hashset.add(c); - } - if (!this.checked.contains(c = new Coords(tocheck.x, tocheck.y, tocheck.z - 1, wID)) - && w.getBlock(tocheck.x, tocheck.y, tocheck.z - 1) - .equals(b)) { - this.kwoe.add(c); - this.hashset.add(c); - } - if (!this.checked.contains(c = new Coords(tocheck.x, tocheck.y + 1, tocheck.z, wID)) - && w.getBlock(tocheck.x, tocheck.y + 1, tocheck.z) - .equals(b)) { - this.kwoe.add(c); - this.hashset.add(c); - } - if (!this.checked.contains(c = new Coords(tocheck.x, tocheck.y - 1, tocheck.z, wID)) - && w.getBlock(tocheck.x, tocheck.y - 1, tocheck.z) - .equals(b)) { - this.kwoe.add(c); - this.hashset.add(c); - } - } - return this.hashset.size(); - } - - public boolean get_meta_of_sideblocks(World w, int n, int[] xyz, boolean GT) { - - int wID = w.provider.dimensionId; - Coords Controller = new Coords(xyz[0], xyz[1], xyz[2], wID); - - for (Coords C : this.hashset) { - if (GT) { - if (!new Coords(C.x, C.y + 1, C.z, wID).equals(Controller) - && w.getTileEntity(C.x, C.y + 1, C.z) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - if (!new Coords(C.x, C.y - 1, C.z, wID).equals(Controller) - && w.getTileEntity(C.x, C.y - 1, C.z) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - if (!new Coords(C.x + 1, C.y, C.z, wID).equals(Controller) - && w.getTileEntity(C.x + 1, C.y, C.z) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - if (!new Coords(C.x - 1, C.y, C.z, wID).equals(Controller) - && w.getTileEntity(C.x - 1, C.y, C.z) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - if (!new Coords(C.x, C.y, C.z + 1, wID).equals(Controller) - && w.getTileEntity(C.x, C.y, C.z + 1) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - if (!new Coords(C.x, C.y, C.z - 1, wID).equals(Controller) - && w.getTileEntity(C.x, C.y, C.z - 1) instanceof IGregTechTileEntity gtTE - && gtTE.getMetaTileID() == n) { - return true; - } - } else { - if (n == w.getBlockMetadata(C.x, C.y + 1, C.z) && !new Coords(C.x, C.y + 1, C.z, wID).equals(Controller) - || n == w.getBlockMetadata(C.x, C.y - 1, C.z) - && !new Coords(C.x, C.y - 1, C.z, wID).equals(Controller)) { - return true; - } - if (n == w.getBlockMetadata(C.x + 1, C.y, C.z) - && !new Coords(C.x + 1, C.y, C.z, wID).equals(Controller)) { - return true; - } - if (n == w.getBlockMetadata(C.x - 1, C.y, C.z) - && !new Coords(C.x - 1, C.y, C.z, wID).equals(Controller)) { - return true; - } - if (n == w.getBlockMetadata(C.x, C.y, C.z + 1) - && !new Coords(C.x, C.y, C.z + 1, wID).equals(Controller)) { - return true; - } - if (n == w.getBlockMetadata(C.x, C.y, C.z - 1) - && !new Coords(C.x, C.y, C.z - 1, wID).equals(Controller)) { - return true; - } - } - } - return false; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/Coords.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/Coords.java deleted file mode 100644 index f8c33dd8e9..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/Coords.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import net.minecraftforge.common.util.ForgeDirection; - -public class Coords { - - public int x, z, wID; - public short y; - - public Coords(int x, int y, int z, int wID) { - this(x, y, z); - this.wID = wID; - } - - public Coords(int x, int y, int z) { - this.x = x; - this.y = (short) y; - this.z = z; - this.wID = 0; - } - - public Coords getCoordsFromSide(ForgeDirection direction) { - return switch (direction) { - case UP -> new Coords(this.x, this.y + 1, this.z, this.wID); - case DOWN -> new Coords(this.x, this.y - 1, this.z, this.wID); - case WEST -> new Coords(this.x - 1, this.y, this.z, this.wID); - case EAST -> new Coords(this.x + 1, this.y, this.z, this.wID); - case NORTH -> new Coords(this.x, this.y, this.z - 1, this.wID); - case SOUTH -> new Coords(this.x, this.y, this.z + 1, this.wID); - default -> throw new UnsupportedOperationException("This is impossible."); - }; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || this.getClass() != o.getClass()) return false; - Coords coords = (Coords) o; - return this.x == coords.x && this.y == coords.y && this.z == coords.z && this.wID == coords.wID; - } - - @Override - public int hashCode() { - byte[] data = new byte[14]; - data[0] = (byte) (this.x & 0xff); - data[1] = (byte) (this.x >> 4 & 0xff); - data[2] = (byte) (this.x >> 8 & 0xff); - data[3] = (byte) (this.x >> 12 & 0xff); - data[4] = (byte) (this.y & 0xff); - data[5] = (byte) (this.y >> 4 & 0xff); - data[6] = (byte) (this.z & 0xff); - data[7] = (byte) (this.z >> 4 & 0xff); - data[8] = (byte) (this.z >> 8 & 0xff); - data[9] = (byte) (this.z >> 12 & 0xff); - data[10] = (byte) (this.wID & 0xff); - data[11] = (byte) (this.wID >> 4 & 0xff); - data[12] = (byte) (this.wID >> 8 & 0xff); - data[13] = (byte) (this.wID >> 12 & 0xff); - return MurmurHash3.murmurhash3_x86_32(data, 0, 14, 31); - } - - @Override - public String toString() { - return this.x + "," + this.y + "," + this.z + "," + this.wID; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/EnumUtils.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/EnumUtils.java deleted file mode 100644 index 678f8facba..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/EnumUtils.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import net.minecraftforge.common.util.EnumHelper; - -import gregtech.api.enums.Element; -import gregtech.api.enums.OrePrefixes; - -public class EnumUtils { - - private EnumUtils() {} - - public static OrePrefixes addNewOrePrefix(String enumName, String aRegularLocalName, String aLocalizedMaterialPre, - String aLocalizedMaterialPost, boolean aIsUnificatable, boolean aIsMaterialBased, boolean aIsSelfReferencing, - boolean aIsContainer, boolean aDontUnificateActively, boolean aIsUsedForBlocks, boolean aAllowNormalRecycling, - boolean aGenerateDefaultItem, boolean aIsEnchantable, boolean aIsUsedForOreProcessing, - int aMaterialGenerationBits, long aMaterialAmount, int aDefaultStackSize, int aTextureindex) { - return EnumHelper.addEnum( - OrePrefixes.class, - enumName, - new Class[] { String.class, String.class, String.class, boolean.class, boolean.class, boolean.class, - boolean.class, boolean.class, boolean.class, boolean.class, boolean.class, boolean.class, boolean.class, - int.class, long.class, int.class, int.class }, - new Object[] { aRegularLocalName, aLocalizedMaterialPre, aLocalizedMaterialPost, aIsUnificatable, - aIsMaterialBased, aIsSelfReferencing, aIsContainer, aDontUnificateActively, aIsUsedForBlocks, - aAllowNormalRecycling, aGenerateDefaultItem, aIsEnchantable, aIsUsedForOreProcessing, - aMaterialGenerationBits, aMaterialAmount, aDefaultStackSize, aTextureindex }); - } - - public static Element createNewElement(String enumName, long aProtons, long aNeutrons, long aAdditionalMass, - long aHalfLifeSeconds, String aDecayTo, String aName, boolean aIsIsotope) { - return EnumHelper.addEnum( - Element.class, - enumName, - new Class[] { long.class, long.class, long.class, long.class, String.class, String.class, boolean.class }, - new Object[] { aProtons, aNeutrons, aAdditionalMass, aHalfLifeSeconds, aDecayTo, aName, aIsIsotope }); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/MathUtils.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/MathUtils.java deleted file mode 100644 index e8f4330ed3..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/MathUtils.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -/* - * Faster implementations for Math stuff - */ -@SuppressWarnings("unused") -public class MathUtils { - - public static long floorLong(double x) { - if (Double.isInfinite(x) || Double.isNaN(x)) return (long) x; - long xi = (long) x; - return x < xi ? xi - 1 : xi; - } - - public static long ceilLong(double x) { - if (Double.isInfinite(x) || Double.isNaN(x)) return (long) x; - long xi = (long) x; - return x > xi ? xi + 1 : xi; - } - - public static int floorInt(double x) { - if (Double.isInfinite(x) || Double.isNaN(x)) return (int) x; - int xi = (int) x; - return x < xi ? xi - 1 : xi; - } - - public static int ceilInt(float x) { - if (Float.isInfinite(x) || Float.isNaN(x)) return (int) x; - int xi = (int) x; - return x > xi ? xi + 1 : xi; - } - - public static int ceilInt(double x) { - if (Double.isInfinite(x) || Double.isNaN(x)) return (int) x; - int xi = (int) x; - return x > xi ? xi + 1 : xi; - } - - public static double floor(double x) { - if (Double.isInfinite(x) || Double.isNaN(x)) return x; - int xi = (int) x; - return x < xi ? xi - 1 : xi; - } - - public static double ceil(double x) { - if (Double.isInfinite(x) || Double.isNaN(x)) return x; - int xi = (int) x; - return x > xi ? xi + 1 : xi; - } - - public static byte clamp(byte amount, byte min, byte max) { - byte inner = amount <= max ? amount : max; - return min >= inner ? min : inner; - } - - public static short clamp(short amount, short min, short max) { - short inner = amount <= max ? amount : max; - return min >= inner ? min : inner; - } - - public static int clamp(int amount, int min, int max) { - return Math.max(min, Math.min(amount, max)); - } - - public static long clamp(long amount, long min, long max) { - return Math.max(min, Math.min(amount, max)); - } - - public static float clamp(float amount, float min, float max) { - return Math.max(min, Math.min(amount, max)); - } - - public static double clamp(double amount, double min, double max) { - return Math.max(min, Math.min(amount, max)); - } - - public static > T clamp(T val, T min, T max) { - return val.compareTo(min) < 0 ? min : val.compareTo(max) > 0 ? max : val; - } - - public static int wrap(int input, int bound) { - return (input % bound + bound) % bound; - } - - public static long wrap(long input, long bound) { - return (input % bound + bound) % bound; - } - - public static double wrap(double input, double bound) { - return (input % bound + bound) % bound; - } - - public static float wrap(float input, float bound) { - return (input % bound + bound) % bound; - } - - public static float tanh(float x) { - float x2 = x * x; - float a = x * (135135.0f + x2 * (17325.0f + x2 * (378.0f + x2))); - float b = 135135.0f + x2 * (62370.0f + x2 * (3150.0f + x2 * 28.0f)); - return clamp(a / b, -1, 1); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/MurmurHash3.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/MurmurHash3.java deleted file mode 100644 index 88c9fa0285..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/MurmurHash3.java +++ /dev/null @@ -1,306 +0,0 @@ -/* - * The MurmurHash3 algorithm was created by Austin Appleby and placed in the public domain. This java port was authored - * by Yonik Seeley and also placed into the public domain. The author hereby disclaims copyright to this source code. - *

This produces exactly the same hash values as the final C++ version of MurmurHash3 and is thus suitable for - * producing the same hash values across platforms.

The 32 bit x86 version of this hash should be the fastest - * variant for relatively short keys like ids. murmurhash3_x64_128 is a good choice for longer strings or if you need - * more than 32 bits of hash.

Note - The x86 and x64 versions do _not_ produce the same results, as the algorithms - * are optimized for their respective platforms.

See http://github.com/yonik/java_util for future updates to this - * file. Special Thanks to Austin Appleby and Yonik Seeley for placing this in the public domain and therefore allowing - * me to use it! - */ -package com.github.bartimaeusnek.bartworks.util; - -public final class MurmurHash3 { - - public static int fmix32(int h) { - h ^= h >>> 16; - h *= 0x85ebca6b; - h ^= h >>> 13; - h *= 0xc2b2ae35; - h ^= h >>> 16; - return h; - } - - public static long fmix64(long k) { - k ^= k >>> 33; - k *= 0xff51afd7ed558ccdL; - k ^= k >>> 33; - k *= 0xc4ceb9fe1a85ec53L; - k ^= k >>> 33; - return k; - } - - /** - * Gets a long from a byte buffer in little endian byte order. - */ - public static long getLongLittleEndian(byte[] buf, int offset) { - return (long) buf[offset + 7] << 56 // no mask needed - | (buf[offset + 6] & 0xffL) << 48 - | (buf[offset + 5] & 0xffL) << 40 - | (buf[offset + 4] & 0xffL) << 32 - | (buf[offset + 3] & 0xffL) << 24 - | (buf[offset + 2] & 0xffL) << 16 - | (buf[offset + 1] & 0xffL) << 8 - | buf[offset] & 0xffL; // no shift needed - } - - /** - * Returns the MurmurHash3_x86_32 hash. - */ - public static int murmurhash3_x86_32(byte[] data, int offset, int len, int seed) { - - final int c1 = 0xcc9e2d51; - final int c2 = 0x1b873593; - - int h1 = seed; - int roundedEnd = offset + (len & 0xfffffffc); // round down to 4 byte block - - for (int i = offset; i < roundedEnd; i += 4) { - // little endian load order - int k1 = data[i] & 0xff | (data[i + 1] & 0xff) << 8 | (data[i + 2] & 0xff) << 16 | data[i + 3] << 24; - k1 *= c1; - k1 = k1 << 15 | k1 >>> 17; // ROTL32(k1,15); - k1 *= c2; - - h1 ^= k1; - h1 = h1 << 13 | h1 >>> 19; // ROTL32(h1,13); - h1 = h1 * 5 + 0xe6546b64; - } - - // tail - int k1 = 0; - - switch (len & 0x03) { - case 3: - k1 = (data[roundedEnd + 2] & 0xff) << 16; - // fallthrough - case 2: - k1 |= (data[roundedEnd + 1] & 0xff) << 8; - // fallthrough - case 1: - k1 |= data[roundedEnd] & 0xff; - k1 *= c1; - k1 = k1 << 15 | k1 >>> 17; // ROTL32(k1,15); - k1 *= c2; - h1 ^= k1; - } - - // finalization - h1 ^= len; - - // fmix(h1); - h1 ^= h1 >>> 16; - h1 *= 0x85ebca6b; - h1 ^= h1 >>> 13; - h1 *= 0xc2b2ae35; - h1 ^= h1 >>> 16; - - return h1; - } - - /** - * Returns the MurmurHash3_x86_32 hash of the UTF-8 bytes of the String without actually encoding the string to a - * temporary buffer. This is more than 2x faster than hashing the result of String.getBytes(). - */ - public static int murmurhash3_x86_32(CharSequence data, int offset, int len, int seed) { - - final int c1 = 0xcc9e2d51; - final int c2 = 0x1b873593; - - int h1 = seed; - - int pos = offset; - int end = offset + len; - int k1 = 0; - int k2 = 0; - int shift = 0; - int bits = 0; - int nBytes = 0; // length in UTF8 bytes - - while (pos < end) { - int code = data.charAt(pos); - pos++; - if (code < 0x80) { - k2 = code; - bits = 8; - - /*** - * // optimized ascii implementation (currently slower!!! code size?) if (shift == 24) { k1 = k1 | (code - * << 24); - * - * k1 *= c1; k1 = (k1 << 15) | (k1 >>> 17); // ROTL32(k1,15); k1 *= c2; - * - * h1 ^= k1; h1 = (h1 << 13) | (h1 >>> 19); // ROTL32(h1,13); h1 = h1*5+0xe6546b64; - * - * shift = 0; nBytes += 4; k1 = 0; } else { k1 |= code << shift; shift += 8; } continue; - ***/ - } else if (code < 0x800) { - k2 = 0xC0 | code >> 6 | (0x80 | code & 0x3F) << 8; - bits = 16; - } else if (code < 0xD800 || code > 0xDFFF || pos >= end) { - // we check for pos>=end to encode an unpaired surrogate as 3 bytes. - k2 = 0xE0 | code >> 12 | (0x80 | code >> 6 & 0x3F) << 8 | (0x80 | code & 0x3F) << 16; - bits = 24; - } else { - // surrogate pair - // int utf32 = pos < end ? (int) data.charAt(pos++) : 0; - int utf32 = data.charAt(pos++); - utf32 = (code - 0xD7C0 << 10) + (utf32 & 0x3FF); - k2 = 0xff & (0xF0 | utf32 >> 18) | (0x80 | utf32 >> 12 & 0x3F) << 8 - | (0x80 | utf32 >> 6 & 0x3F) << 16 - | (0x80 | utf32 & 0x3F) << 24; - bits = 32; - } - - k1 |= k2 << shift; - - shift += bits; - if (shift >= 32) { - // mix after we have a complete word - - k1 *= c1; - k1 = k1 << 15 | k1 >>> 17; // ROTL32(k1,15); - k1 *= c2; - - h1 ^= k1; - h1 = h1 << 13 | h1 >>> 19; // ROTL32(h1,13); - h1 = h1 * 5 + 0xe6546b64; - - shift -= 32; - // unfortunately, java won't let you shift 32 bits off, so we need to check for 0 - if (shift != 0) { - k1 = k2 >>> bits - shift; // bits used == bits - newshift - } else { - k1 = 0; - } - nBytes += 4; - } - } // inner - - // handle tail - if (shift > 0) { - nBytes += shift >> 3; - k1 *= c1; - k1 = k1 << 15 | k1 >>> 17; // ROTL32(k1,15); - k1 *= c2; - h1 ^= k1; - } - - // finalization - h1 ^= nBytes; - - // fmix(h1); - h1 ^= h1 >>> 16; - h1 *= 0x85ebca6b; - h1 ^= h1 >>> 13; - h1 *= 0xc2b2ae35; - h1 ^= h1 >>> 16; - - return h1; - } - - /** - * Returns the MurmurHash3_x64_128 hash, placing the result in "out". - */ - public static void murmurhash3_x64_128(byte[] key, int offset, int len, int seed, LongPair out) { - // The original algorithm does have a 32 bit unsigned seed. - // We have to mask to match the behavior of the unsigned types and prevent sign extension. - long h1 = seed & 0x00000000FFFFFFFFL; - long h2 = seed & 0x00000000FFFFFFFFL; - - final long c1 = 0x87c37b91114253d5L; - final long c2 = 0x4cf5ad432745937fL; - - int roundedEnd = offset + (len & 0xFFFFFFF0); // round down to 16 byte block - for (int i = offset; i < roundedEnd; i += 16) { - long k1 = getLongLittleEndian(key, i); - long k2 = getLongLittleEndian(key, i + 8); - k1 *= c1; - k1 = Long.rotateLeft(k1, 31); - k1 *= c2; - h1 ^= k1; - h1 = Long.rotateLeft(h1, 27); - h1 += h2; - h1 = h1 * 5 + 0x52dce729; - k2 *= c2; - k2 = Long.rotateLeft(k2, 33); - k2 *= c1; - h2 ^= k2; - h2 = Long.rotateLeft(h2, 31); - h2 += h1; - h2 = h2 * 5 + 0x38495ab5; - } - - long k1 = 0; - long k2 = 0; - - switch (len & 15) { - case 15: - k2 = (key[roundedEnd + 14] & 0xffL) << 48; - case 14: - k2 |= (key[roundedEnd + 13] & 0xffL) << 40; - case 13: - k2 |= (key[roundedEnd + 12] & 0xffL) << 32; - case 12: - k2 |= (key[roundedEnd + 11] & 0xffL) << 24; - case 11: - k2 |= (key[roundedEnd + 10] & 0xffL) << 16; - case 10: - k2 |= (key[roundedEnd + 9] & 0xffL) << 8; - case 9: - k2 |= key[roundedEnd + 8] & 0xffL; - k2 *= c2; - k2 = Long.rotateLeft(k2, 33); - k2 *= c1; - h2 ^= k2; - case 8: - k1 = (long) key[roundedEnd + 7] << 56; - case 7: - k1 |= (key[roundedEnd + 6] & 0xffL) << 48; - case 6: - k1 |= (key[roundedEnd + 5] & 0xffL) << 40; - case 5: - k1 |= (key[roundedEnd + 4] & 0xffL) << 32; - case 4: - k1 |= (key[roundedEnd + 3] & 0xffL) << 24; - case 3: - k1 |= (key[roundedEnd + 2] & 0xffL) << 16; - case 2: - k1 |= (key[roundedEnd + 1] & 0xffL) << 8; - case 1: - k1 |= key[roundedEnd] & 0xffL; - k1 *= c1; - k1 = Long.rotateLeft(k1, 31); - k1 *= c2; - h1 ^= k1; - } - - // ---------- - // finalization - - h1 ^= len; - h2 ^= len; - - h1 += h2; - h2 += h1; - - h1 = fmix64(h1); - h2 = fmix64(h2); - - h1 += h2; - h2 += h1; - - out.val1 = h1; - out.val2 = h2; - } - - /** - * 128 bits of state - */ - public static final class LongPair { - - public long val1; - public long val2; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/NoiseUtil/BartsNoise.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/NoiseUtil/BartsNoise.java deleted file mode 100644 index 753940f655..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/NoiseUtil/BartsNoise.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util.NoiseUtil; - -import java.util.Random; - -import com.github.bartimaeusnek.bartworks.API.INoiseGen; -import com.github.bartimaeusnek.bartworks.util.MathUtils; - -import gregtech.api.objects.XSTR; - -public class BartsNoise implements INoiseGen { - - public void setUsePhase(boolean usePhase) { - this.usePhase = usePhase; - } - - public void setRandom(Random random) { - this.random = random; - } - - boolean usePhase; - int octaves; - double frequency; - double amplitude; - long seed; - Random random; - - public enum NoiseColor { - - Red(-1), - Pink(-0.5), - White(0), - Blue(0.5), - Violet(1); - - NoiseColor(double num) { - this.ampl = num; - } - - double ampl; - - public BartsNoise getColoredNoise() { - BartsNoise noise = new BartsNoise(); - noise.setAmplitude(this.ampl); - return noise; - } - } - - public BartsNoise(int octaves, double frequency, double amplitude, long seed) { - this.octaves = octaves; - this.frequency = frequency; - this.amplitude = amplitude; - this.seed = seed; - this.random = new XSTR(seed); - } - - public BartsNoise() { - this.seed = new XSTR().nextLong(); - this.random = new XSTR(this.seed); - this.octaves = 1; - this.frequency = this.random.nextGaussian(); - this.amplitude = this.random.nextGaussian(); - } - - public BartsNoise(long seed) { - this.seed = seed; - this.random = new XSTR(seed); - this.octaves = 1; - this.frequency = this.random.nextGaussian(); - this.amplitude = this.random.nextGaussian(); - } - - public BartsNoise copy() { - return new BartsNoise(this.octaves, this.frequency, this.amplitude, this.seed); - } - - public BartsNoise copy(long seed) { - return new BartsNoise(this.octaves, this.frequency, this.amplitude, seed); - } - - public double getCosNoise(double x, double y) { - double pr = x * this.frequency; - double r1 = Math.cos(pr); - if (r1 < 0) r1 = Math.abs(r1); - double result = Math.pow(r1, this.amplitude); - double pr2 = y * this.frequency; - double r2 = Math.cos(pr2); - if (r2 < 0) r2 = Math.abs(r2); - double result2 = Math.pow(r2, this.amplitude); - result *= result2; - if (result == Double.POSITIVE_INFINITY) result = Double.MAX_VALUE; - if (result == Double.NEGATIVE_INFINITY) result = Double.MIN_VALUE; - return MathUtils.wrap(result, 1D); - } - - double getNonOctavedNoise(double x, double y) { - double phase = SimplexNoise - .noise(Math.pow(x * this.frequency, this.amplitude), Math.pow(y * this.frequency, this.amplitude)); - return MathUtils.wrap(phase, 1); - } - - public double getNeighbouringNoise(int x, int y) { - return (this.getNoiseSingle(x - 1, y - 1) + this.getNoiseSingle(x, y - 1) - + this.getNoiseSingle(x - 1, y) - + this.getNoiseSingle(x + 1, y) - + this.getNoiseSingle(x, y + 1) - + this.getNoiseSingle(x + 1, y + 1) - + this.getNoiseSingle(x - 1, y + 1) - + this.getNoiseSingle(x + 1, y - 1)) / 8; - } - - public double getNoiseSingle(int x, int y) { - double result = 0; - for (double i = 1; i <= this.octaves; i++) { - result += 1d / i * this.getNonOctavedNoise(i * x, i * y); - } - return result; - } - - @Override - public double getNoise(int x, int y) { - double result = 0; - for (double i = 1; i <= this.octaves; i++) { - result += 1d / i * this.getNonOctavedNoise(i * x, y); - } - // result = (this.getNeighbouringNoise(x,y)+result)/2; - return MathUtils.wrap(result, 1D); - } - - @Override - public double[][] getNoiseForRegion(int xStart, int zStart, int xEnd, int zEnd) { - // double[][] results = new double[Math.abs(xEnd)-Math.abs(xStart)][Math.abs(zEnd)-Math.abs(zStart)]; - // for (int i = xStart; i < xEnd; i++) { - // for (int j = zStart; j < zEnd; j++) { - // results - // } - // } - return new double[0][0]; - } - - @Override - public void setAmplitude(double amplitude) { - this.amplitude = amplitude; - } - - @Override - public void setOctaves(int octaves) { - this.octaves = octaves; - } - - @Override - public void setFrequency(double freq) { - this.frequency = freq; - } - - @Override - public void setSeed(long seed) { - this.seed = seed; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/NoiseUtil/SimplexNoise.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/NoiseUtil/SimplexNoise.java deleted file mode 100644 index ca318e17b9..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/NoiseUtil/SimplexNoise.java +++ /dev/null @@ -1,396 +0,0 @@ -package com.github.bartimaeusnek.bartworks.util.NoiseUtil; -/* - * A speed-improved simplex noise algorithm for 2D, 3D and 4D in Java. Based on example code by Stefan Gustavson - * (stegu@itn.liu.se). Optimisations by Peter Eastman (peastman@drizzle.stanford.edu). Better rank ordering method by - * Stefan Gustavson in 2012. This could be speeded up even further, but it's useful as it is. Version 2012-03-09 This - * code was placed in the public domain by its original author, Stefan Gustavson. You may use it as you see fit, but - * attribution is appreciated. - */ - -import com.github.bartimaeusnek.bartworks.util.MathUtils; - -public class SimplexNoise { // Simplex noise in 2D, 3D and 4D - - private static Grad[] grad3 = { new Grad(1, 1, 0), new Grad(-1, 1, 0), new Grad(1, -1, 0), new Grad(-1, -1, 0), - new Grad(1, 0, 1), new Grad(-1, 0, 1), new Grad(1, 0, -1), new Grad(-1, 0, -1), new Grad(0, 1, 1), - new Grad(0, -1, 1), new Grad(0, 1, -1), new Grad(0, -1, -1) }; - - private static Grad[] grad4 = { new Grad(0, 1, 1, 1), new Grad(0, 1, 1, -1), new Grad(0, 1, -1, 1), - new Grad(0, 1, -1, -1), new Grad(0, -1, 1, 1), new Grad(0, -1, 1, -1), new Grad(0, -1, -1, 1), - new Grad(0, -1, -1, -1), new Grad(1, 0, 1, 1), new Grad(1, 0, 1, -1), new Grad(1, 0, -1, 1), - new Grad(1, 0, -1, -1), new Grad(-1, 0, 1, 1), new Grad(-1, 0, 1, -1), new Grad(-1, 0, -1, 1), - new Grad(-1, 0, -1, -1), new Grad(1, 1, 0, 1), new Grad(1, 1, 0, -1), new Grad(1, -1, 0, 1), - new Grad(1, -1, 0, -1), new Grad(-1, 1, 0, 1), new Grad(-1, 1, 0, -1), new Grad(-1, -1, 0, 1), - new Grad(-1, -1, 0, -1), new Grad(1, 1, 1, 0), new Grad(1, 1, -1, 0), new Grad(1, -1, 1, 0), - new Grad(1, -1, -1, 0), new Grad(-1, 1, 1, 0), new Grad(-1, 1, -1, 0), new Grad(-1, -1, 1, 0), - new Grad(-1, -1, -1, 0) }; - - private static short[] p = { 151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, - 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, - 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, - 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, - 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, - 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, - 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, - 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, - 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, - 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, - 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180 }; - // To remove the need for index wrapping, double the permutation table length - private static short[] perm = new short[512]; - private static short[] permMod12 = new short[512]; - - static { - for (int i = 0; i < 512; i++) { - perm[i] = p[i & 255]; - permMod12[i] = (short) (perm[i] % 12); - } - } - - // Skewing and unskewing factors for 2, 3, and 4 dimensions - private static final double F2 = 0.5 * (Math.sqrt(3.0) - 1.0); - private static final double G2 = (3.0 - Math.sqrt(3.0)) / 6.0; - private static final double F3 = 1.0 / 3.0; - private static final double G3 = 1.0 / 6.0; - private static final double F4 = (Math.sqrt(5.0) - 1.0) / 4.0; - private static final double G4 = (5.0 - Math.sqrt(5.0)) / 20.0; - - // This method is a *lot* faster than using (int)Math.floor(x) - private static int fastfloor(double x) { - return MathUtils.floorInt(x); - } - - private static double dot(Grad g, double x, double y) { - return g.x * x + g.y * y; - } - - private static double dot(Grad g, double x, double y, double z) { - return g.x * x + g.y * y + g.z * z; - } - - private static double dot(Grad g, double x, double y, double z, double w) { - return g.x * x + g.y * y + g.z * z + g.w * w; - } - - // 2D simplex noise - public static double noise(double xin, double yin) { - double n0, n1, n2; // Noise contributions from the three corners - // Skew the input space to determine which simplex cell we're in - double s = (xin + yin) * F2; // Hairy factor for 2D - int i = fastfloor(xin + s); - int j = fastfloor(yin + s); - double t = (i + j) * G2; - double X0 = i - t; // Unskew the cell origin back to (x,y) space - double Y0 = j - t; - double x0 = xin - X0; // The x,y distances from the cell origin - double y0 = yin - Y0; - // For the 2D case, the simplex shape is an equilateral triangle. - // Determine which simplex we are in. - int i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords - if (x0 > y0) { - i1 = 1; - j1 = 0; - } // lower triangle, XY order: (0,0)->(1,0)->(1,1) - else { - i1 = 0; - j1 = 1; - } // upper triangle, YX order: (0,0)->(0,1)->(1,1) - // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and - // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where - // c = (3-sqrt(3))/6 - double x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords - double y1 = y0 - j1 + G2; - double x2 = x0 - 1.0 + 2.0 * G2; // Offsets for last corner in (x,y) unskewed coords - double y2 = y0 - 1.0 + 2.0 * G2; - // Work out the hashed gradient indices of the three simplex corners - int ii = i & 255; - int jj = j & 255; - int gi0 = permMod12[ii + perm[jj]]; - int gi1 = permMod12[ii + i1 + perm[jj + j1]]; - int gi2 = permMod12[ii + 1 + perm[jj + 1]]; - // Calculate the contribution from the three corners - double t0 = 0.5 - x0 * x0 - y0 * y0; - if (t0 < 0) n0 = 0.0; - else { - t0 *= t0; - n0 = t0 * t0 * dot(grad3[gi0], x0, y0); // (x,y) of grad3 used for 2D gradient - } - double t1 = 0.5 - x1 * x1 - y1 * y1; - if (t1 < 0) n1 = 0.0; - else { - t1 *= t1; - n1 = t1 * t1 * dot(grad3[gi1], x1, y1); - } - double t2 = 0.5 - x2 * x2 - y2 * y2; - if (t2 < 0) n2 = 0.0; - else { - t2 *= t2; - n2 = t2 * t2 * dot(grad3[gi2], x2, y2); - } - // Add contributions from each corner to get the final noise value. - // The result is scaled to return values in the interval [-1,1]. - return 70.0 * (n0 + n1 + n2); - } - - // 3D simplex noise - public static double noise(double xin, double yin, double zin) { - double n0, n1, n2, n3; // Noise contributions from the four corners - // Skew the input space to determine which simplex cell we're in - double s = (xin + yin + zin) * F3; // Very nice and simple skew factor for 3D - int i = fastfloor(xin + s); - int j = fastfloor(yin + s); - int k = fastfloor(zin + s); - double t = (i + j + k) * G3; - double X0 = i - t; // Unskew the cell origin back to (x,y,z) space - double Y0 = j - t; - double Z0 = k - t; - double x0 = xin - X0; // The x,y,z distances from the cell origin - double y0 = yin - Y0; - double z0 = zin - Z0; - // For the 3D case, the simplex shape is a slightly irregular tetrahedron. - // Determine which simplex we are in. - int i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords - int i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords - if (x0 >= y0) { - if (y0 >= z0) { - i1 = 1; - j1 = 0; - k1 = 0; - i2 = 1; - j2 = 1; - k2 = 0; - } // X Y Z order - else { - if (x0 >= z0) { - i1 = 1; - j1 = 0; - k1 = 0; - } // X Z Y order - else { - i1 = 0; - j1 = 0; - k1 = 1; - } - i2 = 1; - j2 = 0; - k2 = 1; - } // Z X Y order - } else if (y0 < z0) { - i1 = 0; - j1 = 0; - k1 = 1; - i2 = 0; - j2 = 1; - k2 = 1; - } // Z Y X order - else if (x0 < z0) { - i1 = 0; - j1 = 1; - k1 = 0; - i2 = 0; - j2 = 1; - k2 = 1; - } // Y Z X order - else { - i1 = 0; - j1 = 1; - k1 = 0; - i2 = 1; - j2 = 1; - k2 = 0; - } // Y X Z order - // A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z), - // a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and - // a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where - // c = 1/6. - double x1 = x0 - i1 + G3; // Offsets for second corner in (x,y,z) coords - double y1 = y0 - j1 + G3; - double z1 = z0 - k1 + G3; - double x2 = x0 - i2 + 2.0 * G3; // Offsets for third corner in (x,y,z) coords - double y2 = y0 - j2 + 2.0 * G3; - double z2 = z0 - k2 + 2.0 * G3; - double x3 = x0 - 1.0 + 3.0 * G3; // Offsets for last corner in (x,y,z) coords - double y3 = y0 - 1.0 + 3.0 * G3; - double z3 = z0 - 1.0 + 3.0 * G3; - // Work out the hashed gradient indices of the four simplex corners - int ii = i & 255; - int jj = j & 255; - int kk = k & 255; - int gi0 = permMod12[ii + perm[jj + perm[kk]]]; - int gi1 = permMod12[ii + i1 + perm[jj + j1 + perm[kk + k1]]]; - int gi2 = permMod12[ii + i2 + perm[jj + j2 + perm[kk + k2]]]; - int gi3 = permMod12[ii + 1 + perm[jj + 1 + perm[kk + 1]]]; - // Calculate the contribution from the four corners - double t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0; - if (t0 < 0) n0 = 0.0; - else { - t0 *= t0; - n0 = t0 * t0 * dot(grad3[gi0], x0, y0, z0); - } - double t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1; - if (t1 < 0) n1 = 0.0; - else { - t1 *= t1; - n1 = t1 * t1 * dot(grad3[gi1], x1, y1, z1); - } - double t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2; - if (t2 < 0) n2 = 0.0; - else { - t2 *= t2; - n2 = t2 * t2 * dot(grad3[gi2], x2, y2, z2); - } - double t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3; - if (t3 < 0) n3 = 0.0; - else { - t3 *= t3; - n3 = t3 * t3 * dot(grad3[gi3], x3, y3, z3); - } - // Add contributions from each corner to get the final noise value. - // The result is scaled to stay just inside [-1,1] - return 32.0 * (n0 + n1 + n2 + n3); - } - - // 4D simplex noise, better simplex rank ordering method 2012-03-09 - public static double noise(double x, double y, double z, double w) { - - double n0, n1, n2, n3, n4; // Noise contributions from the five corners - // Skew the (x,y,z,w) space to determine which cell of 24 simplices we're in - double s = (x + y + z + w) * F4; // Factor for 4D skewing - int i = fastfloor(x + s); - int j = fastfloor(y + s); - int k = fastfloor(z + s); - int l = fastfloor(w + s); - double t = (i + j + k + l) * G4; // Factor for 4D unskewing - double X0 = i - t; // Unskew the cell origin back to (x,y,z,w) space - double Y0 = j - t; - double Z0 = k - t; - double W0 = l - t; - double x0 = x - X0; // The x,y,z,w distances from the cell origin - double y0 = y - Y0; - double z0 = z - Z0; - double w0 = w - W0; - // For the 4D case, the simplex is a 4D shape I won't even try to describe. - // To find out which of the 24 possible simplices we're in, we need to - // determine the magnitude ordering of x0, y0, z0 and w0. - // Six pair-wise comparisons are performed between each possible pair - // of the four coordinates, and the results are used to rank the numbers. - int rankx = 0; - int ranky = 0; - int rankz = 0; - int rankw = 0; - if (x0 > y0) rankx++; - else ranky++; - if (x0 > z0) rankx++; - else rankz++; - if (x0 > w0) rankx++; - else rankw++; - if (y0 > z0) ranky++; - else rankz++; - if (y0 > w0) ranky++; - else rankw++; - if (z0 > w0) rankz++; - else rankw++; - int i1, j1, k1, l1; // The integer offsets for the second simplex corner - int i2, j2, k2, l2; // The integer offsets for the third simplex corner - int i3, j3, k3, l3; // The integer offsets for the fourth simplex corner - // simplex[c] is a 4-vector with the numbers 0, 1, 2 and 3 in some order. - // Many values of c will never occur, since e.g. x>y>z>w makes x= 3 ? 1 : 0; - j1 = ranky >= 3 ? 1 : 0; - k1 = rankz >= 3 ? 1 : 0; - l1 = rankw >= 3 ? 1 : 0; - // Rank 2 denotes the second largest coordinate. - i2 = rankx >= 2 ? 1 : 0; - j2 = ranky >= 2 ? 1 : 0; - k2 = rankz >= 2 ? 1 : 0; - l2 = rankw >= 2 ? 1 : 0; - // Rank 1 denotes the second smallest coordinate. - i3 = rankx >= 1 ? 1 : 0; - j3 = ranky >= 1 ? 1 : 0; - k3 = rankz >= 1 ? 1 : 0; - l3 = rankw >= 1 ? 1 : 0; - // The fifth corner has all coordinate offsets = 1, so no need to compute that. - double x1 = x0 - i1 + G4; // Offsets for second corner in (x,y,z,w) coords - double y1 = y0 - j1 + G4; - double z1 = z0 - k1 + G4; - double w1 = w0 - l1 + G4; - double x2 = x0 - i2 + 2.0 * G4; // Offsets for third corner in (x,y,z,w) coords - double y2 = y0 - j2 + 2.0 * G4; - double z2 = z0 - k2 + 2.0 * G4; - double w2 = w0 - l2 + 2.0 * G4; - double x3 = x0 - i3 + 3.0 * G4; // Offsets for fourth corner in (x,y,z,w) coords - double y3 = y0 - j3 + 3.0 * G4; - double z3 = z0 - k3 + 3.0 * G4; - double w3 = w0 - l3 + 3.0 * G4; - double x4 = x0 - 1.0 + 4.0 * G4; // Offsets for last corner in (x,y,z,w) coords - double y4 = y0 - 1.0 + 4.0 * G4; - double z4 = z0 - 1.0 + 4.0 * G4; - double w4 = w0 - 1.0 + 4.0 * G4; - // Work out the hashed gradient indices of the five simplex corners - int ii = i & 255; - int jj = j & 255; - int kk = k & 255; - int ll = l & 255; - int gi0 = perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32; - int gi1 = perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32; - int gi2 = perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32; - int gi3 = perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32; - int gi4 = perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32; - // Calculate the contribution from the five corners - double t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0; - if (t0 < 0) n0 = 0.0; - else { - t0 *= t0; - n0 = t0 * t0 * dot(grad4[gi0], x0, y0, z0, w0); - } - double t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1; - if (t1 < 0) n1 = 0.0; - else { - t1 *= t1; - n1 = t1 * t1 * dot(grad4[gi1], x1, y1, z1, w1); - } - double t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2; - if (t2 < 0) n2 = 0.0; - else { - t2 *= t2; - n2 = t2 * t2 * dot(grad4[gi2], x2, y2, z2, w2); - } - double t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3; - if (t3 < 0) n3 = 0.0; - else { - t3 *= t3; - n3 = t3 * t3 * dot(grad4[gi3], x3, y3, z3, w3); - } - double t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4; - if (t4 < 0) n4 = 0.0; - else { - t4 *= t4; - n4 = t4 * t4 * dot(grad4[gi4], x4, y4, z4, w4); - } - // Sum up and scale the result to cover the range [-1,1] - return 27.0 * (n0 + n1 + n2 + n3 + n4); - } - - // Inner class to speed upp gradient computations - // (array access is a lot slower than member access) - private static class Grad { - - double x, y, z, w; - - Grad(double x, double y, double z) { - this.x = x; - this.y = y; - this.z = z; - } - - Grad(double x, double y, double z, double w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/NonNullWrappedHashMap.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/NonNullWrappedHashMap.java deleted file mode 100644 index 33173d19f2..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/NonNullWrappedHashMap.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; - -public class NonNullWrappedHashMap extends HashMap { - - private static final long serialVersionUID = 46345163103910175L; - private V defaultValue; - - public NonNullWrappedHashMap(int initialCapacity, float loadFactor, V defaultValue) { - super(initialCapacity, loadFactor); - this.defaultValue = Objects.requireNonNull(defaultValue); - } - - public NonNullWrappedHashMap(int initialCapacity, V defaultValue) { - super(initialCapacity); - this.defaultValue = Objects.requireNonNull(defaultValue); - } - - public NonNullWrappedHashMap(V defaultValue) { - this.defaultValue = Objects.requireNonNull(defaultValue); - } - - public NonNullWrappedHashMap(Map m, V defaultValue) { - super(m); - this.defaultValue = Objects.requireNonNull(defaultValue); - } - - @Override - public V get(Object key) { - return this.getOrDefault(key, this.defaultValue); - } - - @Override - public V getOrDefault(Object key, V defaultValue) { - return Objects.requireNonNull( - Optional.ofNullable(super.getOrDefault(key, defaultValue)) - .orElse(this.defaultValue)); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/NonNullWrappedHashSet.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/NonNullWrappedHashSet.java deleted file mode 100644 index 5490c4bdaf..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/NonNullWrappedHashSet.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import java.util.Collection; -import java.util.HashSet; - -public class NonNullWrappedHashSet extends HashSet { - - private static final long serialVersionUID = 8377161849188229010L; - - public NonNullWrappedHashSet() {} - - public NonNullWrappedHashSet(Collection c) { - this.addAll(c); - } - - public NonNullWrappedHashSet(int initialCapacity, float loadFactor) { - super(initialCapacity, loadFactor); - } - - public NonNullWrappedHashSet(int initialCapacity) { - super(initialCapacity); - } - - @Override - public boolean add(E e) { - if (e != null) return super.add(e); - return false; - } - - @Override - public boolean addAll(Collection c) { - boolean wasChanged = false; - for (E element : c) { - if (element != null) wasChanged |= this.add(element); - } - return wasChanged; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/Pair.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/Pair.java deleted file mode 100644 index cd9bc1746e..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/Pair.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import java.nio.ByteBuffer; -import java.util.Arrays; -import java.util.Map; - -@SuppressWarnings("unchecked") -public class Pair implements Map.Entry { - - Object[] pair = new Object[2]; - - public Pair(Object[] pair) { - this.pair = pair; - } - - public Pair(A k, B v) { - this.pair[0] = k; - this.pair[1] = v; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof Pair)) return false; - - Pair pair1 = (Pair) o; - - // Probably incorrect - comparing Object[] arrays with Arrays.equals - return Arrays.equals(this.pair, pair1.pair); - } - - @Override - public int hashCode() { - return MurmurHash3.murmurhash3_x86_32( - ByteBuffer.allocate(8) - .putInt(this.pair[0].hashCode()) - .putInt(this.pair[1].hashCode()) - .array(), - 0, - 8, - 31); - } - - @Override - public A getKey() { - return (A) this.pair[0]; - } - - @Override - public B getValue() { - return (B) this.pair[1]; - } - - @Override - public B setValue(Object value) { - this.pair[1] = value; - return (B) this.pair[1]; - } - - public Pair copyWithNewValue(B value) { - return new Pair<>((A) this.pair[0], value); - } - - public Pair replaceValue(B value) { - this.setValue(value); - return this; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/ResultWrongSievert.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/ResultWrongSievert.java deleted file mode 100644 index 93d7318715..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/ResultWrongSievert.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.github.bartimaeusnek.bartworks.util; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.StatCollector; - -import org.jetbrains.annotations.NotNull; - -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.util.GT_Utility; - -public class ResultWrongSievert implements CheckRecipeResult { - - public enum NeededSievertType { - EXACTLY, - MINIMUM - } - - private NeededSievertType type; - private int required; - - public ResultWrongSievert(int required, NeededSievertType type) { - this.required = required; - this.type = type; - } - - public @NotNull String getID() { - return "wrong_sievert"; - } - - @Override - public boolean wasSuccessful() { - return false; - } - - @Override - public @NotNull String getDisplayString() { - return switch (this.type) { - case EXACTLY -> StatCollector.translateToLocalFormatted( - "GT5U.gui.text.wrong_sievert_exactly", - GT_Utility.formatNumbers(this.required)); - case MINIMUM -> StatCollector - .translateToLocalFormatted("GT5U.gui.text.wrong_sievert_min", GT_Utility.formatNumbers(this.required)); - }; - } - - @Override - public @NotNull NBTTagCompound writeToNBT(@NotNull NBTTagCompound tag) { - tag.setInteger("required", required); - tag.setInteger("type", type.ordinal()); - return tag; - } - - @Override - public void readFromNBT(@NotNull NBTTagCompound tag) { - required = tag.getInteger("required"); - } - - @Override - public @NotNull CheckRecipeResult newInstance() { - return new ResultWrongSievert(0, NeededSievertType.EXACTLY); - } - - @Override - public void encode(@NotNull PacketBuffer buffer) { - buffer.writeVarIntToBuffer(this.required); - buffer.writeVarIntToBuffer(this.type.ordinal()); - } - - @Override - public void decode(PacketBuffer buffer) { - this.required = buffer.readVarIntFromBuffer(); - this.type = NeededSievertType.values()[buffer.readVarIntFromBuffer()]; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || this.getClass() != o.getClass()) return false; - ResultWrongSievert that = (ResultWrongSievert) o; - return this.required == that.required; - } - - /** - * Cannot process recipe because the machine doesn't have the minimum amount of sievert - */ - public static CheckRecipeResult insufficientSievert(int required) { - return new ResultWrongSievert(required, NeededSievertType.MINIMUM); - } - - /** - * Cannot process recipe because the machine doesn't have the exact amount of sievert - */ - public static CheckRecipeResult wrongSievert(int required) { - return new ResultWrongSievert(required, NeededSievertType.EXACTLY); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/StreamUtils.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/StreamUtils.java deleted file mode 100644 index 4c1c82b9bf..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/StreamUtils.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util; - -import java.util.Optional; -import java.util.function.Predicate; - -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Recipe; - -public class StreamUtils { - - private StreamUtils() {} - - public static Predicate> filterVisualMaps() { - return recipeMap -> { - Optional op = recipeMap.getAllRecipes() - .stream() - .findAny(); - return op.isPresent() && !op.get().mFakeRecipe; - }; - } - - public static boolean filterVisualMaps(RecipeMap recipeMap) { - return filterVisualMaps().test(recipeMap); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityList.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityList.java deleted file mode 100644 index fd0dfbe9cf..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityList.java +++ /dev/null @@ -1,388 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util.accessprioritylist; - -import java.util.Collection; -import java.util.Deque; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; -import java.util.Set; -import java.util.Spliterator; - -import org.apache.commons.lang3.NotImplementedException; - -public class AccessPriorityList implements List, Deque, Set { - - transient int size = 0; - transient AccessPriorityListNode head; - transient AccessPriorityListNode tail; - - public static AccessPriorityList create() { - return new AccessPriorityList<>(); - } - - public AccessPriorityList() {} - - @Override - public void addFirst(E t) { - final AccessPriorityListNode first = this.head; - final AccessPriorityListNode newNode = new AccessPriorityListNode<>(null, t, first); - this.head = newNode; - if (first == null) this.tail = newNode; - else first.setBefore(newNode); - this.size++; - } - - @Override - public void addLast(E t) { - final AccessPriorityListNode last = this.tail; - final AccessPriorityListNode newNode = new AccessPriorityListNode<>(last, t, null); - this.tail = newNode; - if (last == null) this.head = newNode; - else last.setNext(newNode); - this.size++; - } - - @Override - public boolean offerFirst(E e) { - throw new NotImplementedException(""); - } - - @Override - public boolean offerLast(E e) { - throw new NotImplementedException(""); - } - - @Override - public E removeFirst() { - E first = this.head.getELEMENT(); - AccessPriorityListNode node = this.head; - this.head = node.getNext(); - this.head.setBefore(null); - node.destroy(); - node = null; - this.size--; - return first; - } - - @Override - public E removeLast() { - E last = this.tail.getELEMENT(); - AccessPriorityListNode node = this.tail; - this.tail = node.getBefore(); - this.tail.setNext(null); - node.destroy(); - node = null; - this.size--; - return last; - } - - @Override - public E pollFirst() { - throw new NotImplementedException(""); - } - - @Override - public E pollLast() { - throw new NotImplementedException(""); - } - - @Override - public E getFirst() { - return this.peekFirst(); - } - - @Override - public E getLast() { - return this.peekLast(); - } - - @Override - public E peekFirst() { - return this.head != null ? this.head.getELEMENT() : null; - } - - @Override - public E peekLast() { - return this.tail != null ? this.tail.getELEMENT() : null; - } - - @Override - public boolean removeFirstOccurrence(Object o) { - throw new NotImplementedException(""); - } - - @Override - public boolean removeLastOccurrence(Object o) { - throw new NotImplementedException(""); - } - - @Override - public int size() { - return this.size; - } - - @Override - public boolean isEmpty() { - return this.size == 0; - } - - @Override - public boolean contains(Object o) { - throw new NotImplementedException(""); - } - - @Override - public Iterator iterator() { - return new AccessPriorityListIterators.AccessPriorityListIterator<>(this.head); - } - - public Iterator> nodeIterator() { - return new AccessPriorityListIterators.AccessPriorityListNodeIterator<>(this.head); - } - - @Override - public Iterator descendingIterator() { - return new AccessPriorityListIterators.AccessPriorityListReverseIterator<>(this.tail); - } - - @Override - public Object[] toArray() { - Object[] ret = new Object[this.size]; - int index = 0; - for (Iterator it = this.iterator(); it.hasNext(); index++) ret[index] = it.next(); - return ret; - } - - @Override - public T[] toArray(T[] a) { - T[] ret = (T[]) new Object[this.size]; - int index = 0; - for (Iterator it = (Iterator) this.iterator(); it.hasNext(); index++) ret[index] = it.next(); - return ret; - } - - @Override - public boolean add(E e) { - this.addLast(e); - return true; - } - - private void moveNodeUp(AccessPriorityListNode node) { - if (node == this.head || node.getBefore() == null) return; - final AccessPriorityListNode before = node.getBefore(); - final AccessPriorityListNode beforeBefore = before.getBefore(); - final AccessPriorityListNode next = node.getNext(); - - // <0,1,2> <1,2,3> N<2,3,4> <3,4,5> - - node.setBefore(beforeBefore); - // <0,1,2> <1,2,3> N<0,3,4> <3,4,5> - - if (beforeBefore != null) beforeBefore.setNext(node); - else this.head = node; - // <0,1,3> <1,2,3> N<0,3,4> <3,4,5> - - before.setBefore(node); - // <0,1,3> <3,2,3> N<0,3,4> <3,4,5> - - before.setNext(next); - // <0,1,3> <3,2,4> N<0,3,4> <3,4,5> - - if (next != null) next.setBefore(before); - else this.tail = before; - // <0,1,3> N<0,3,4> <3,2,4> <2,4,5> - - node.setNext(before); - // <0,1,3> N<0,3,2> <3,2,4> <2,4,5> - } - - AccessPriorityListNode getNode(int index) { - if (index <= this.size / 2) { - AccessPriorityListNode x = this.head; - for (int i = 0; i < index; i++) x = x.getNext(); - return x; - } - AccessPriorityListNode x = this.tail; - for (int i = this.size - 1; i > index; i--) x = x.getBefore(); - return x; - } - - @Override - public boolean offer(E e) { - throw new NotImplementedException(""); - } - - private boolean isValidIndex(int index) { - if (index >= 0 && index < this.size) return true; - throw new ArrayIndexOutOfBoundsException("NOT A VAILD INDEX!"); - } - - @Override - public E remove() { - throw new NotImplementedException(""); - } - - @Override - public E poll() { - return this.removeFirst(); - } - - @Override - public E element() { - throw new NotImplementedException(""); - } - - @Override - public E peek() { - return this.getFirst(); - } - - @Override - public void push(E e) { - this.addFirst(e); - } - - @Override - public E pop() { - return this.removeFirst(); - } - - @Override - public boolean remove(Object o) { - throw new NotImplementedException(""); - } - - @Override - public boolean containsAll(Collection c) { - throw new NotImplementedException(""); - } - - @Override - public boolean addAll(Collection c) { - if (c == null) return false; - c.forEach(this::addLast); - return true; - } - - @Override - public boolean addAll(int index, Collection c) { - throw new NotImplementedException(""); - } - - @Override - public boolean removeAll(Collection c) { - throw new NotImplementedException(""); - } - - @Override - public boolean retainAll(Collection c) { - throw new NotImplementedException(""); - } - - @Override - public void clear() { - if (this.tail != null) { - AccessPriorityListNode node = this.tail; - while (node.getBefore() != null) { - node.setNext(null); - node.setPriority(0L); - node = node.getBefore(); - node.getNext() - .setBefore(null); - } - this.size = 0; - this.head = null; - this.tail = null; - } - } - - public void addPrioToNode(AccessPriorityListNode node) { - this.addPrioToNode(node, 1L); - } - - public void addPrioToNode(AccessPriorityListNode node, long prio) { - long current = node.getPriority(); - if (current == Long.MAX_VALUE || current > 0 && prio > 0 && prio + current < 0) - node.setPriority(Long.MAX_VALUE); - else node.setPriority(current + prio); - while (node.getBefore() != null && node.getPriority() >= node.getBefore() - .getPriority()) { - this.moveNodeUp(node); - } - } - - public void addPrioToNode(int index, long prio) { - if (!this.isValidIndex(index)) return; - AccessPriorityListNode node = this.getNode(index); - this.addPrioToNode(node, prio); - } - - public void addPrioToNode(int index) { - this.addPrioToNode(index, 1L); - } - - @Override - public E get(int index) { - if (!this.isValidIndex(index)) return null; - AccessPriorityListNode node = this.getNode(index); - return node.getELEMENT(); - } - - @Override - public E set(int index, E element) { - throw new NotImplementedException(""); - } - - @Override - public void add(int index, E element) { - throw new NotImplementedException(""); - } - - @Override - public E remove(int index) { - throw new NotImplementedException(""); - } - - @Override - public int indexOf(Object o) { - throw new NotImplementedException(""); - } - - @Override - public int lastIndexOf(Object o) { - throw new NotImplementedException(""); - } - - @Override - public ListIterator listIterator() { - return new AccessPriorityListIterators.AccessPriorityListListIterator<>(this.head, this.tail, false); - } - - @Override - public ListIterator listIterator(int index) { - return new AccessPriorityListIterators.AccessPriorityListListIterator<>(this, index); - } - - @Override - public List subList(int fromIndex, int toIndex) { - throw new NotImplementedException(""); - } - - @Override - public Spliterator spliterator() { - throw new NotImplementedException(""); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityListIterators.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityListIterators.java deleted file mode 100644 index f24105db17..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityListIterators.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util.accessprioritylist; - -import java.util.Iterator; -import java.util.ListIterator; - -import org.apache.commons.lang3.NotImplementedException; - -public class AccessPriorityListIterators { - - public static class AccessPriorityListListIterator implements ListIterator { - - final AccessPriorityListNode head; - final AccessPriorityListNode tail; - AccessPriorityListNode current; - int counter = 0; - boolean reverse; - - public AccessPriorityListListIterator(AccessPriorityListNode head, AccessPriorityListNode tail, - boolean reverse) { - this.head = head; - this.tail = tail; - this.current = reverse ? tail : head; - this.reverse = reverse; - } - - public AccessPriorityListListIterator(AccessPriorityList list, int index) { - this.head = list.head; - this.tail = list.tail; - this.current = list.getNode(index); - this.counter = index; - } - - @Override - public boolean hasNext() { - return this.reverse ? this.head != this.current : this.tail != this.current; - } - - @Override - public E next() { - this.counter++; - E ret = this.current.getELEMENT(); - this.current = this.current.getNext(); - return ret; - } - - @Override - public boolean hasPrevious() { - return !this.reverse ? this.head != this.current : this.tail != this.current; - } - - @Override - public E previous() { - this.counter--; - E ret = this.current.getELEMENT(); - this.current = this.current.getBefore(); - return ret; - } - - @Override - public int nextIndex() { - return this.counter + 1; - } - - @Override - public int previousIndex() { - return this.counter - 1; - } - - @Override - public void remove() { - throw new NotImplementedException("Not Implemented"); - } - - @Override - public void set(E e) { - throw new NotImplementedException("Not Implemented"); - } - - @Override - public void add(E e) { - throw new NotImplementedException("Not Implemented"); - } - } - - public static class AccessPriorityListIterator implements Iterator { - - final AccessPriorityListNode head; - AccessPriorityListNode current; - - public AccessPriorityListIterator(AccessPriorityListNode head) { - this.head = this.current = head; - } - - @Override - public boolean hasNext() { - return this.current != null; - } - - @Override - public E next() { - E ret = this.current.getELEMENT(); - this.current = this.current.getNext(); - return ret; - } - } - - public static class AccessPriorityListReverseIterator implements Iterator { - - final AccessPriorityListNode tail; - AccessPriorityListNode current; - - public AccessPriorityListReverseIterator(AccessPriorityListNode tail) { - this.tail = this.current = tail; - } - - @Override - public boolean hasNext() { - return this.current != null; - } - - @Override - public E next() { - E ret = this.current.getELEMENT(); - this.current = this.current.getBefore(); - return ret; - } - } - - public static class AccessPriorityListNodeIterator implements Iterator> { - - final AccessPriorityListNode head; - AccessPriorityListNode current; - - public AccessPriorityListNodeIterator(AccessPriorityListNode head) { - this.head = this.current = head; - } - - @Override - public boolean hasNext() { - return this.current != null; - } - - @Override - public AccessPriorityListNode next() { - AccessPriorityListNode ret = this.current; - this.current = this.current.getNext(); - return ret; - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityListNode.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityListNode.java deleted file mode 100644 index 72b266917f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/accessprioritylist/AccessPriorityListNode.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2018-2019 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util.accessprioritylist; - -public class AccessPriorityListNode { - - public static final AccessPriorityListNode EMPTY_NODE = new AccessPriorityListNode<>(null); - - private final E ELEMENT; - private long priority = Long.MIN_VALUE; - private AccessPriorityListNode next; - private AccessPriorityListNode before; - - public AccessPriorityListNode(E element) { - this.ELEMENT = element; - } - - public AccessPriorityListNode(AccessPriorityListNode before, E element, AccessPriorityListNode next) { - this.ELEMENT = element; - this.connect(next, before); - } - - public void connect(AccessPriorityListNode next, AccessPriorityListNode before) { - this.setNext(next); - this.setBefore(before); - } - - public E getELEMENT() { - return this.ELEMENT; - } - - public long getPriority() { - return this.priority; - } - - public void setPriority(long priority) { - this.priority = priority; - } - - public AccessPriorityListNode getNext() { - return this.next; - } - - public void setNext(AccessPriorityListNode next) { - this.next = next; - } - - public AccessPriorityListNode getBefore() { - return this.before; - } - - public void setBefore(AccessPriorityListNode before) { - this.before = before; - } - - void destroy() { - this.before = null; - this.next = null; - this.priority = 0L; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/flowerset/FlowerSet.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/flowerset/FlowerSet.java deleted file mode 100644 index d797e68d8a..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/flowerset/FlowerSet.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util.flowerset; - -import java.util.Collection; -import java.util.Iterator; -import java.util.Set; -import java.util.function.Function; - -public class FlowerSet implements Set { - - public FlowerSet(int petals, Function, Integer> comparerison) { - this.petals = petals; - this.comparerison = comparerison; - } - - final int petals; - final Function, Integer> comparerison; - - public static FlowerSet createBase64(Function, Integer> comparerison) { - return new FlowerSet<>(64, comparerison); - } - - public static FlowerSet createHexflower(Function, Integer> comparerison) { - return new FlowerSet<>(16, comparerison); - } - - @Override - public int size() { - return 0; - } - - @Override - public boolean isEmpty() { - return false; - } - - @Override - public boolean contains(Object o) { - return false; - } - - @Override - public Iterator iterator() { - return null; - } - - @Override - public Object[] toArray() { - return new Object[0]; - } - - @Override - public T1[] toArray(T1[] a) { - return null; - } - - @Override - public boolean add(T t) { - return false; - } - - @Override - public boolean remove(Object o) { - return false; - } - - @Override - public boolean containsAll(Collection c) { - return false; - } - - @Override - public boolean addAll(Collection c) { - return false; - } - - @Override - public boolean retainAll(Collection c) { - return false; - } - - @Override - public boolean removeAll(Collection c) { - return false; - } - - @Override - public void clear() {} - - static class FlowerNode { - - private final FlowerSet map; - final V value; - final FlowerNode[] links; - - @SuppressWarnings("unchecked") - public FlowerNode(V value, FlowerSet map) { - this.value = value; - this.map = map; - this.links = new FlowerNode[map.petals]; - } - - private static final int DEPTH = 20480; - - public void TryToSetSingleNode(FlowerNode node, FlowerNode toset, int place, int depth) { - if (depth > DEPTH) throw new IllegalStateException("Recursive Call went too deep."); - if (node.links[place] == null) node.links[place] = toset; - else { - this.TryToSetSingleNode(node.links[place], toset, place, depth); - depth++; - } - } - - public void TryToSetSingleNode(FlowerNode node, FlowerNode toset, int place) { - if (node.links[place] == null) node.links[place] = toset; - else this.TryToSetSingleNode(node.links[place], toset, place, 0); - } - - @SafeVarargs - public final void SetUpLinks(FlowerNode... links) { - for (FlowerNode node : links) { - int place = this.map.comparerison.apply(node); - this.TryToSetSingleNode(this, node, place); - } - } - } - - static class Functions { - - public static Function, Integer> HashBasedFunction() { - return function -> function.hashCode() % function.map.petals; - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/bartworks/util/log/DebugLog.java b/src/main/java/com/github/bartimaeusnek/bartworks/util/log/DebugLog.java deleted file mode 100644 index 6ead05ce96..0000000000 --- a/src/main/java/com/github/bartimaeusnek/bartworks/util/log/DebugLog.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.bartworks.util.log; - -import java.io.File; -import java.io.IOException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.logging.FileHandler; -import java.util.logging.Formatter; -import java.util.logging.LogRecord; -import java.util.logging.Logger; - -import cpw.mods.fml.common.event.FMLPreInitializationEvent; - -public class DebugLog { - - private static boolean init; - static FileHandler fh; - private static Logger utilLog; - - public static void initDebugLog(FMLPreInitializationEvent event) throws IOException { - if (DebugLog.init) return; - DebugLog.fh = new FileHandler( - new File( - new File( - event.getModConfigurationDirectory() - .getParentFile(), - "logs"), - "BWLog.log").toString()); - DebugLog.utilLog = Logger.getLogger("DebugLog"); - DebugLog.utilLog.setUseParentHandlers(false); - DebugLog.utilLog.addHandler(DebugLog.fh); - Formatter formatter = new Formatter() { - - @Override - public String format(LogRecord record) { - SimpleDateFormat logTime = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss"); - Calendar cal = new GregorianCalendar(); - cal.setTimeInMillis(record.getMillis()); - return "Level: " + record - .getLevel() + " at " + logTime.format(cal.getTime()) + " " + record.getMessage() + "\n"; - } - }; - DebugLog.fh.setFormatter(formatter); - DebugLog.init = true; - } - - public static void log(String record) { - if (!DebugLog.init) return; - DebugLog.utilLog.info(record); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/BartWorksCrossmod.java b/src/main/java/com/github/bartimaeusnek/crossmod/BartWorksCrossmod.java deleted file mode 100644 index 704b4ed8cb..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/BartWorksCrossmod.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod; - -import static gregtech.api.enums.Mods.GalacticraftCore; - -import java.io.StringReader; - -import net.minecraft.util.StringTranslate; - -import org.apache.commons.io.input.ReaderInputStream; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import com.github.bartimaeusnek.crossmod.GTpp.loader.RadioHatchCompat; -import com.github.bartimaeusnek.crossmod.galacticraft.GalacticraftProxy; -import com.github.bartimaeusnek.crossmod.tectech.TecTechResearchLoader; - -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.event.FMLServerStartingEvent; -import gregtech.GT_Version; - -@Mod( - modid = BartWorksCrossmod.MOD_ID, - name = BartWorksCrossmod.NAME, - version = BartWorksCrossmod.VERSION, - dependencies = """ - required-after:IC2;\ - required-after:gregtech;\ - required-after:bartworks;\ - after:GalacticraftMars;\ - after:GalacticraftCore;\ - after:Micdoodlecore;\ - after:miscutils;\ - after:EMT;\ - after:tectech;""") -public class BartWorksCrossmod { - - public static final String NAME = "BartWorks Mod Additions"; - public static final String VERSION = GT_Version.VERSION; - public static final String MOD_ID = "bartworkscrossmod"; - public static final Logger LOGGER = LogManager.getLogger(BartWorksCrossmod.NAME); - - @Mod.Instance(BartWorksCrossmod.MOD_ID) - public static BartWorksCrossmod instance; - - @Mod.EventHandler - public void preInit(FMLPreInitializationEvent preinit) { - if (GalacticraftCore.isModLoaded()) { - GalacticraftProxy.preInit(preinit); - } - } - - @Mod.EventHandler - public void init(FMLInitializationEvent init) { - if (GalacticraftCore.isModLoaded()) { - GalacticraftProxy.init(init); - } - } - - @Mod.EventHandler - public void postInit(FMLPostInitializationEvent init) { - if (GalacticraftCore.isModLoaded()) { - GalacticraftProxy.postInit(init); - } - RadioHatchCompat.run(); - TecTechResearchLoader.runResearches(); - } - - @Mod.EventHandler - public void onFMLServerStart(FMLServerStartingEvent event) { - for (Object s : RadioHatchCompat.TranslateSet) { - StringTranslate.inject(new ReaderInputStream(new StringReader((String) s))); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/GTpp/loader/RadioHatchCompat.java b/src/main/java/com/github/bartimaeusnek/crossmod/GTpp/loader/RadioHatchCompat.java deleted file mode 100644 index b8fcdb9135..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/GTpp/loader/RadioHatchCompat.java +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.GTpp.loader; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Queue; -import java.util.Set; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.RegistryNamespaced; -import net.minecraftforge.oredict.OreDictionary; - -import com.github.bartimaeusnek.bartworks.API.IRadMaterial; -import com.github.bartimaeusnek.bartworks.util.log.DebugLog; -import com.github.bartimaeusnek.crossmod.BartWorksCrossmod; - -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.ModContainer; -import cpw.mods.fml.common.registry.GameData; -import cpw.mods.fml.common.registry.GameRegistry; - -public class RadioHatchCompat { - - private static Class intf; - private static Class materialClass; - private static Class enu; - private static Class materialStackClass; - - private static Field isRadioactive; - private static Field f; - private static Field componentType; - private static Field radlevel; - private static Field protons; - - private static Field vMaterialInput; - private static Field stackMaterial; - private static Field RGBA; - private static Field localizedName; - private static Field unlocalizedName; - - private static Object rod; - private static Object longRod; - - public static HashSet TranslateSet = new HashSet<>(); - - static { - try { - RadioHatchCompat.intf = Class.forName("gtPlusPlus.core.item.base.BaseItemComponent"); - RadioHatchCompat.enu = Class.forName("gtPlusPlus.core.item.base.BaseItemComponent$ComponentTypes"); - RadioHatchCompat.materialClass = Class.forName("gtPlusPlus.core.material.Material"); - RadioHatchCompat.materialStackClass = Class.forName("gtPlusPlus.core.material.MaterialStack"); - - RadioHatchCompat.f = RadioHatchCompat.intf.getField("componentMaterial"); - RadioHatchCompat.isRadioactive = RadioHatchCompat.materialClass.getField("isRadioactive"); - RadioHatchCompat.componentType = RadioHatchCompat.intf.getDeclaredField("componentType"); - RadioHatchCompat.radlevel = RadioHatchCompat.materialClass.getField("vRadiationLevel"); - - RadioHatchCompat.vMaterialInput = RadioHatchCompat.materialClass.getDeclaredField("vMaterialInput"); - RadioHatchCompat.stackMaterial = RadioHatchCompat.materialStackClass.getDeclaredField("stackMaterial"); - RadioHatchCompat.protons = RadioHatchCompat.materialClass.getDeclaredField("vProtons"); - RadioHatchCompat.RGBA = RadioHatchCompat.materialClass.getDeclaredField("RGBA"); - RadioHatchCompat.localizedName = RadioHatchCompat.materialClass.getDeclaredField("localizedName"); - RadioHatchCompat.unlocalizedName = RadioHatchCompat.materialClass.getDeclaredField("unlocalizedName"); - - RadioHatchCompat.vMaterialInput.setAccessible(true); - RadioHatchCompat.stackMaterial.setAccessible(true); - RadioHatchCompat.protons.setAccessible(true); - RadioHatchCompat.RGBA.setAccessible(true); - RadioHatchCompat.localizedName.setAccessible(true); - RadioHatchCompat.unlocalizedName.setAccessible(true); - - Object[] arr = RadioHatchCompat.enu.getEnumConstants(); - for (Object o : arr) { - if (RadioHatchCompat.rod != null && RadioHatchCompat.longRod != null) break; - if ("ROD".equalsIgnoreCase(o.toString())) RadioHatchCompat.rod = o; - else if ("RODLONG".equalsIgnoreCase(o.toString())) RadioHatchCompat.longRod = o; - } - - } catch (NoSuchFieldException | ClassNotFoundException e) { - e.printStackTrace(); - } - } - - @SuppressWarnings("unchecked") - public static void run() { - DebugLog.log("Starting Generation of missing GT++ rods/longrods"); - try { - Class rodclass = (Class) Class - .forName("gtPlusPlus.core.item.base.rods.BaseItemRod"); - Class longrodclass = (Class) Class - .forName("gtPlusPlus.core.item.base.rods.BaseItemRodLong"); - Constructor c1 = rodclass.getConstructor(RadioHatchCompat.materialClass); - Constructor c2 = longrodclass.getConstructor(RadioHatchCompat.materialClass); - Field cOwners = GameData.class.getDeclaredField("customOwners"); - cOwners.setAccessible(true); - Field map = RegistryNamespaced.class.getDeclaredField("field_148758_b"); - map.setAccessible(true); - Map UniqueIdentifierMap = (Map) map.get(GameData.getItemRegistry()); - - Map ownerItems = (Map) cOwners - .get(null); - ModContainer gtpp = null; - ModContainer bartworks = null; - - for (ModContainer container : Loader.instance() - .getModList()) { - if (gtpp != null && bartworks != null) break; - if (BartWorksCrossmod.MOD_ID.equalsIgnoreCase(container.getModId())) bartworks = container; - else if (container.getModId() - .equalsIgnoreCase(GTPlusPlus.ID)) gtpp = container; - } - - for (Object mats : (Set) RadioHatchCompat.materialClass.getField("mMaterialMap") - .get(null)) { - if (RadioHatchCompat.isRadioactive.getBoolean(mats)) { - - if (OreDictionary.getOres("stick" + RadioHatchCompat.unlocalizedName.get(mats)) - .isEmpty()) { - Item it = c1.newInstance(mats); - UniqueIdentifierMap.replace(it, "miscutils:" + it.getUnlocalizedName()); - GameRegistry.UniqueIdentifier ui = GameRegistry.findUniqueIdentifierFor(it); - ownerItems.replace(ui, bartworks, gtpp); - - String tanslate = it.getUnlocalizedName() + ".name=" - + RadioHatchCompat.localizedName.get(mats) - + " Rod"; - RadioHatchCompat.TranslateSet.add(tanslate); - - DebugLog.log(tanslate); - DebugLog.log("Generate: " + RadioHatchCompat.rod + RadioHatchCompat.unlocalizedName.get(mats)); - } - if (OreDictionary.getOres("stickLong" + RadioHatchCompat.unlocalizedName.get(mats)) - .isEmpty()) { - Item it2 = c2.newInstance(mats); - UniqueIdentifierMap.replace(it2, "miscutils:" + it2.getUnlocalizedName()); - GameRegistry.UniqueIdentifier ui2 = GameRegistry.findUniqueIdentifierFor(it2); - ownerItems.replace(ui2, bartworks, gtpp); - - DebugLog - .log("Generate: " + RadioHatchCompat.longRod + RadioHatchCompat.unlocalizedName.get(mats)); - } - } - } - } catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InvocationTargetException - | InstantiationException | ClassNotFoundException e) { - e.printStackTrace(); - } - } - - public static IRadMaterial GTppRadChecker(ItemStack lStack) { - try { - if (RadioHatchCompat.intf.isAssignableFrom( - lStack.getItem() - .getClass())) { - if (!RadioHatchCompat.isRadioactive.getBoolean(RadioHatchCompat.f.get(lStack.getItem()))) return null; - int amount = RadioHatchCompat.componentType.get(lStack.getItem()) - .equals(RadioHatchCompat.rod) ? 1 - : RadioHatchCompat.componentType.get(lStack.getItem()) - .equals(RadioHatchCompat.longRod) ? 2 : 0; - if (amount == 0) return null; - return new RadioHatchCompat.GTPPRadAdapter(amount, RadioHatchCompat.f.get(lStack.getItem())); - } - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - return null; - } - - static class GTPPRadAdapter implements IRadMaterial { - - static final HashMap BUFFER = new HashMap<>(); - - GTPPRadAdapter(Object m) { - this.m = m; - } - - GTPPRadAdapter(int amount, Object m) { - this.amount = (byte) amount; - this.m = m; - } - - byte amount; - final Object m; - - private static ArrayList getMaterialInput(Object GTPPMaterial) throws IllegalAccessException { - Object ret = RadioHatchCompat.vMaterialInput.get(GTPPMaterial); - return ret instanceof ArrayList ? (ArrayList) ret : new ArrayList<>(); - } - - private static boolean isElement(Object GTPPMaterial) throws IllegalAccessException { - return RadioHatchCompat.GTPPRadAdapter.getMaterialInput(GTPPMaterial) - .isEmpty(); - } - - private static List getElemets(Object GTPPMaterial) throws IllegalAccessException { - ArrayList elements = new ArrayList<>(); - Queue toCheck = new LinkedList<>(); - ArrayList materialInputs = RadioHatchCompat.GTPPRadAdapter.getMaterialInput(GTPPMaterial); - if (materialInputs.isEmpty()) return Collections.singletonList(GTPPMaterial); - for (Object materialStack : materialInputs) { - if (!RadioHatchCompat.GTPPRadAdapter.isElement(RadioHatchCompat.stackMaterial.get(materialStack))) - toCheck.add(RadioHatchCompat.stackMaterial.get(materialStack)); - else elements.add(RadioHatchCompat.stackMaterial.get(materialStack)); - } - while (!toCheck.isEmpty()) { - elements.addAll(GTPPRadAdapter.getElemets(toCheck.poll())); - } - return elements; - } - - private static Integer calulateRad(Object m) { - int ret = 0; - try { - List pureElements = RadioHatchCompat.GTPPRadAdapter.getElemets(m); - for (Object materialObj : pureElements) if (RadioHatchCompat.isRadioactive.getBoolean(materialObj)) - ret += RadioHatchCompat.radlevel.getByte(m) - + RadioHatchCompat.GTPPRadAdapter.clampToZero(RadioHatchCompat.protons.getLong(materialObj)); - else ret += RadioHatchCompat.radlevel.getByte(m); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - return ret; - } - - @Override - public int getRadiationLevel(ItemStack aStack) { - return RadioHatchCompat.GTPPRadAdapter.BUFFER - .computeIfAbsent(this.m, radlvl -> RadioHatchCompat.GTPPRadAdapter.calulateRad(this.m)); - } - - private static long clampToZero(long number) { - return number > 0 ? number : 0; - } - - @Override - public byte getAmountOfMaterial(ItemStack aStack) { - return this.amount; - } - - @Override - public short[] getColorForGUI(ItemStack aStack) { - short[] rgba = { 0, 0, 0, 0 }; - try { - rgba = (short[]) RadioHatchCompat.RGBA.get(this.m); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - return rgba; - } - - @Override - public String getNameForGUI(ItemStack aStack) { - String ret = ""; - try { - ret = (String) RadioHatchCompat.localizedName.get(this.m); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - return ret; - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/cls/CLSCompat.java b/src/main/java/com/github/bartimaeusnek/crossmod/cls/CLSCompat.java deleted file mode 100644 index adb3d42754..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/cls/CLSCompat.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.cls; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Optional; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; - -@SuppressWarnings({ "rawtypes", "unchecked" }) -public class CLSCompat { - - private CLSCompat() {} - - private static final long MINIMAL_UPDATE_INTERVAL = 1000 / 30; // target 30 fps - private static long lastUpdate = 0; - private static Class alexiilMinecraftDisplayer; - private static Class alexiilProgressDisplayer; - private static Method displayProgress; - private static Field isRegisteringBartWorks; - - static { - try { - alexiilMinecraftDisplayer = Class.forName("alexiil.mods.load.MinecraftDisplayer"); - alexiilProgressDisplayer = Class.forName("alexiil.mods.load.ProgressDisplayer"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - - Optional.ofNullable(alexiilMinecraftDisplayer) - .ifPresent(e -> { - try { - isRegisteringBartWorks = e.getField("isRegisteringBartWorks"); - } catch (NoSuchFieldException ex) { - ex.printStackTrace(); - } - }); - - Optional.ofNullable(alexiilProgressDisplayer) - .ifPresent(e -> { - try { - displayProgress = e.getMethod("displayProgress", String.class, float.class); - } catch (NoSuchMethodException ex) { - ex.printStackTrace(); - } - }); - } - - public static Integer[] initCls() { - int sizeStep; - int sizeStep2 = 1; - - try { - isRegisteringBartWorks.set(null, true); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - - if (Werkstoff.werkstoffHashSet.size() >= 100) sizeStep = Werkstoff.werkstoffHashSet.size() / 100 - 1; - else sizeStep = sizeStep2 = Werkstoff.werkstoffHashSet.size(); - - return new Integer[] { sizeStep, sizeStep2, sizeStep }; - } - - public static int invokeStepSize(Werkstoff werkstoff, Integer[] steps, int size) { - --steps[0]; - - long time = System.currentTimeMillis(); - if (time - lastUpdate >= MINIMAL_UPDATE_INTERVAL) { - try { - displayProgress.invoke(null, werkstoff.getDefaultName(), (float) size / 10000); - } catch (IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); - } - lastUpdate = time; - } - - if (steps[0] == 0 && Werkstoff.werkstoffHashSet.size() >= 100) steps[0] = steps[2]; - - size += steps[1]; - return size; - } - - public static void disableCls() { - try { - isRegisteringBartWorks.set(null, false); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/GT_TileEntity_VoidMiner_Base.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/GT_TileEntity_VoidMiner_Base.java deleted file mode 100644 index 01c3c82460..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/GT_TileEntity_VoidMiner_Base.java +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticgreg; - -import static com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference.MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_Values.VN; - -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.gen.ChunkProviderServer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.google.common.collect.ImmutableList; - -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_DrillerBase; - -public abstract class GT_TileEntity_VoidMiner_Base extends GT_MetaTileEntity_DrillerBase { - - private VoidMinerUtility.DropMap dropMap = null; - private VoidMinerUtility.DropMap extraDropMap = null; - private float totalWeight; - private int multiplier = 1; - - protected final byte TIER_MULTIPLIER; - - private boolean mBlacklist = false; - - /** - * @Deprecated Use {@link VoidMinerUtility#addBlockToDimensionList} - */ - @Deprecated - public static void addBlockToDimensionList(int dimId, Block block, int meta, float weight) { - VoidMinerUtility.addBlockToDimensionList(dimId, block, meta, weight); - } - - public GT_TileEntity_VoidMiner_Base(int aID, String aName, String aNameRegional, int tier) { - super(aID, aName, aNameRegional); - this.TIER_MULTIPLIER = (byte) Math.max(tier, 1); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("mBlacklist", this.mBlacklist); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.mBlacklist = aNBT.getBoolean("mBlacklist"); - } - - public GT_TileEntity_VoidMiner_Base(String aName, int tier) { - super(aName); - this.TIER_MULTIPLIER = (byte) tier; - } - - @Override - protected int getMinTier() { - return this.TIER_MULTIPLIER + 5; // min tier = LuV - } - - @Override - protected boolean checkHatches() { - return true; - } - - @Override - protected void setElectricityStats() { - try { - this.mEUt = this.isPickingPipes ? 60 : Math.toIntExact(GT_Values.V[this.getMinTier()]); - } catch (ArithmeticException e) { - e.printStackTrace(); - this.mEUt = Integer.MAX_VALUE - 7; - } - this.mOutputItems = new ItemStack[0]; - this.mProgresstime = 0; - this.mMaxProgresstime = 10; - this.mEfficiency = this.getCurrentEfficiency(null); - this.mEfficiencyIncrease = 10000; - this.mEUt = this.mEUt > 0 ? -this.mEUt : this.mEUt; - } - - @Override - protected boolean workingAtBottom(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, - int yHead, int oldYHead) { - // if the dropMap has never been initialised or if the dropMap is empty - if (this.dropMap == null || this.totalWeight == 0) this.calculateDropMap(); - - if (this.totalWeight != 0.f) { - this.handleFluidConsumption(); - this.handleOutputs(); - return true; - } else { - this.stopMachine(ShutDownReasonRegistry.NONE); - return false; - } - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - String casings = this.getCasingBlockItem() - .get(0) - .getDisplayName(); - - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Miner") - .addInfo("Controller Block for the Void Miner " + GT_Values.VN[this.getMinTier()]) - .addInfo("Consumes " + GT_Values.V[this.getMinTier()] + "EU/t") - .addInfo( - "Can be supplied with 2L/s of Neon(x4), Krypton(x8), Xenon(x16) or Oganesson(x64) for higher outputs.") - .addInfo( - "Will output " + 2 * this.TIER_MULTIPLIER - + " Ores per Second depending on the Dimension it is build in") - .addInfo("Put the Ore into the input bus to set the Whitelist/Blacklist") - .addInfo("Use a screwdriver to toggle Whitelist/Blacklist") - .addInfo( - "Blacklist or non Whitelist Ore will be " + EnumChatFormatting.DARK_RED - + "VOIDED" - + EnumChatFormatting.RESET - + ".") - .addSeparator() - .beginStructureBlock(3, 7, 3, false) - .addController("Front bottom") - .addOtherStructurePart(casings, "form the 3x1x3 Base") - .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") - .addOtherStructurePart( - this.getFrameMaterial().mName + " Frame Boxes", - "Each pillar's side and 1x3x1 on top") - .addEnergyHatch(VN[this.getMinTier()] + "+, Any base casing") - .addMaintenanceHatch("Any base casing") - .addInputBus("Mining Pipes or Ores, optional, any base casing") - .addInputHatch("Optional noble gas, any base casing") - .addOutputBus("Any base casing") - .toolTipFinisher(MULTIBLOCK_ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS); - return tt; - } - - @Override - protected List> getAllowedHatches() { - return ImmutableList.of(InputHatch, InputBus, OutputBus, Maintenance, Energy); - } - - /** - * method used to pick the next ore in the dropMap. - * - * @return the chosen ore - */ - private ItemStack nextOre() { - float currentWeight = 0.f; - while (true) { - float randomNumber = XSTR.XSTR_INSTANCE.nextFloat() * this.totalWeight; - for (Map.Entry entry : this.dropMap.getInternalMap() - .entrySet()) { - currentWeight += entry.getValue(); - if (randomNumber < currentWeight) return entry.getKey() - .getItemStack(); - } - for (Map.Entry entry : this.extraDropMap.getInternalMap() - .entrySet()) { - currentWeight += entry.getValue(); - if (randomNumber < currentWeight) return entry.getKey() - .getItemStack(); - } - } - } - - /** - * Method used to check the current gat and its corresponding multiplier - * - * @return the noble gas in the hatch. returns null if there is no noble gas found. - */ - private FluidStack getNobleGasInputAndSetMultiplier() { - for (FluidStack s : this.getStoredFluids()) { - for (int i = 0; i < VoidMinerUtility.NOBLE_GASSES.length; i++) { - FluidStack ng = VoidMinerUtility.NOBLE_GASSES[i]; - if (ng.isFluidEqual(s)) { - this.multiplier = this.TIER_MULTIPLIER * VoidMinerUtility.NOBEL_GASSES_MULTIPLIER[i]; - return s; - } - } - } - return null; - } - - /** - * method used to decrement the quantity of gas in the hatch - * - * @param gasToConsume the fluid stack in the hatch - * @return if yes or no it was able to decrement the quantity of the fluidStack - */ - private boolean consumeNobleGas(FluidStack gasToConsume) { - for (FluidStack s : this.getStoredFluids()) { - if (s.isFluidEqual(gasToConsume) && s.amount >= 1) { - s.amount -= 1; - this.updateSlots(); - return true; - } - } - return false; - } - - /** - * handler for the fluid consumption - */ - private void handleFluidConsumption() { - FluidStack storedNobleGas = this.getNobleGasInputAndSetMultiplier(); - if (storedNobleGas == null || !this.consumeNobleGas(storedNobleGas)) this.multiplier = this.TIER_MULTIPLIER; - } - - /** - * Handles the ores added manually with {@link VoidMinerUtility#addMaterialToDimensionList} - * - * @param id the specified dim id - */ - private void handleExtraDrops(int id) { - if (VoidMinerUtility.extraDropsDimMap.containsKey(id)) { - extraDropMap = VoidMinerUtility.extraDropsDimMap.get(id); - } - } - - /** - * Gets the DropMap of the dim for the specified dim id - * - * @param id the dim number - */ - private void handleModDimDef(int id) { - if (VoidMinerUtility.dropMapsByDimId.containsKey(id)) { - this.dropMap = VoidMinerUtility.dropMapsByDimId.get(id); - } else { - String chunkProviderName = ((ChunkProviderServer) this.getBaseMetaTileEntity() - .getWorld() - .getChunkProvider()).currentChunkProvider.getClass() - .getName(); - - if (VoidMinerUtility.dropMapsByChunkProviderName.containsKey(chunkProviderName)) { - this.dropMap = VoidMinerUtility.dropMapsByChunkProviderName.get(chunkProviderName); - } - } - } - - /** - * Computes first the ores related to the dim the VM is in, then the ores added manually, then it computes the - * totalWeight for normalisation - */ - private void calculateDropMap() { - this.dropMap = new VoidMinerUtility.DropMap(); - this.extraDropMap = new VoidMinerUtility.DropMap(); - int id = this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId; - this.handleModDimDef(id); - this.handleExtraDrops(id); - this.totalWeight = dropMap.getTotalWeight() + extraDropMap.getTotalWeight(); - } - - /** - * Output logic of the VM - */ - private void handleOutputs() { - final List inputOres = this.getStoredInputs() - .stream() - .filter(GT_Utility::isOre) - .collect(Collectors.toList());; - final ItemStack output = this.nextOre(); - output.stackSize = multiplier; - if (inputOres.size() == 0 || this.mBlacklist && inputOres.stream() - .noneMatch(is -> GT_Utility.areStacksEqual(is, output)) - || !this.mBlacklist && inputOres.stream() - .anyMatch(is -> GT_Utility.areStacksEqual(is, output))) - this.addOutput(output); - this.updateSlots(); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - this.mBlacklist = !this.mBlacklist; - GT_Utility.sendChatToPlayer(aPlayer, "Mode: " + (this.mBlacklist ? "Blacklist" : "Whitelist")); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/GT_TileEntity_VoidMiners.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/GT_TileEntity_VoidMiners.java deleted file mode 100644 index 5f15bd6c09..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/GT_TileEntity_VoidMiners.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticgreg; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class GT_TileEntity_VoidMiners { - - public static class VMLUV extends GT_TileEntity_VoidMiner_Base { - - public VMLUV(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 1); - } - - public VMLUV(String aName, int tier) { - super(aName, tier); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_UV; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.Europium; - } - - @Override - protected int getCasingTextureIndex() { - return 8; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new VMLUV(this.mName, this.TIER_MULTIPLIER); - } - } - - public static class VMZPM extends GT_TileEntity_VoidMiner_Base { - - public VMZPM(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 2); - } - - public VMZPM(String aName, int tier) { - super(aName, tier); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_MiningBlackPlutonium; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.BlackPlutonium; - } - - @Override - protected int getCasingTextureIndex() { - return 179; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new VMZPM(this.mName, this.TIER_MULTIPLIER); - } - } - - public static class VMUV extends GT_TileEntity_VoidMiner_Base { - - public VMUV(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 3); - } - - public VMUV(String aName, int tier) { - super(aName, tier); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_MiningNeutronium; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.Neutronium; - } - - @Override - protected int getCasingTextureIndex() { - return 178; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new VMUV(this.mName, this.TIER_MULTIPLIER); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/VoidMinerUtility.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/VoidMinerUtility.java deleted file mode 100644 index 6fb6eb3b18..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticgreg/VoidMinerUtility.java +++ /dev/null @@ -1,278 +0,0 @@ -package com.github.bartimaeusnek.crossmod.galacticgreg; - -import static bloodasp.galacticgreg.registry.GalacticGregRegistry.getModContainers; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.function.Predicate; - -import net.minecraft.block.Block; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.system.oregen.BW_OreLayer; - -import bloodasp.galacticgreg.GT_Worldgen_GT_Ore_Layer_Space; -import bloodasp.galacticgreg.GT_Worldgen_GT_Ore_SmallPieces_Space; -import bloodasp.galacticgreg.GalacticGreg; -import bloodasp.galacticgreg.api.ModContainer; -import bloodasp.galacticgreg.api.ModDimensionDef; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ISubTagContainer; -import gregtech.api.util.GT_Utility; -import gregtech.common.GT_Worldgen_GT_Ore_Layer; -import gregtech.common.GT_Worldgen_GT_Ore_SmallPieces; - -public class VoidMinerUtility { - - public static final FluidStack[] NOBLE_GASSES = { WerkstoffLoader.Neon.getFluidOrGas(1), - WerkstoffLoader.Krypton.getFluidOrGas(1), WerkstoffLoader.Xenon.getFluidOrGas(1), - WerkstoffLoader.Oganesson.getFluidOrGas(1) }; - public static final int[] NOBEL_GASSES_MULTIPLIER = { 4, 8, 16, 64 }; - - public static class DropMap { - - private float totalWeight; - private final Map internalMap; - - public DropMap() { - internalMap = new HashMap<>(); - totalWeight = 0; - } - - /** - * Method used to add an ore to the DropMap - * - * @param weight the non normalised weight - * @param isBWOres true for BW ores, false for GT ores - */ - public void addDrop(int meta, float weight, boolean isBWOres) { - if (isBWOres) { - addDrop(WerkstoffLoader.BWOres, meta, weight); - } else { - addDrop(GregTech_API.sBlockOres1, meta, weight); - } - } - - /** - * Method used to add any item to the DropMap. Will be blocked if blacklisted. - * - * @param weight the non normalised weight - */ - public void addDrop(Block block, int meta, float weight) { - if (ConfigHandler.voidMinerBlacklist.contains( - String.format( - "%s:%d", - GameRegistry.findUniqueIdentifierFor(block) - .toString(), - meta))) - return; - Item item = Item.getItemFromBlock(block); - addDrop(item, meta, weight); - } - - /** - * Method used to add any item to the DropMap. Will be blocked if blacklisted. - * - * @param weight the non normalised weight - */ - public void addDrop(ItemStack itemStack, float weight) { - Item item = itemStack.getItem(); - int meta = Items.feather.getDamage(itemStack); - if (ConfigHandler.voidMinerBlacklist.contains( - String.format( - "%s:%d", - GameRegistry.findUniqueIdentifierFor(Block.getBlockFromItem(item)) - .toString(), - meta))) - return; - addDrop(item, meta, weight); - } - - private void addDrop(Item item, int meta, float weight) { - GT_Utility.ItemId ore = GT_Utility.ItemId.createNoCopy(item, meta, null); - internalMap.merge(ore, weight, Float::sum); - totalWeight += weight; - } - - public float getTotalWeight() { - return totalWeight; - } - - public Map getInternalMap() { - return internalMap; - } - } - - public static final Map dropMapsByDimId = new HashMap<>(); - public static final Map dropMapsByChunkProviderName = new HashMap<>(); - public static final Map extraDropsDimMap = new HashMap<>(); - - // Adds tellurium to OW to ensure a way to get it, as it's used in Magneto Resonatic - // Dust and Circuit Compound MK3 Dust - static { - addMaterialToDimensionList(0, Materials.Tellurium, 8.0f); - } - - /** - * Computes the ores of the dims - */ - public static void generateDropMaps() { - // vanilla dims - dropMapsByDimId.put(-1, getDropMapVanilla(-1)); - dropMapsByDimId.put(0, getDropMapVanilla(0)); - dropMapsByDimId.put(1, getDropMapVanilla(1)); - // Twilight Forest - dropMapsByDimId.put(7, getDropMapVanilla(7)); - - // ross dims - dropMapsByDimId.put(ConfigHandler.ross128BID, getDropMapRoss(ConfigHandler.ross128BID)); - dropMapsByDimId.put(ConfigHandler.ross128BAID, getDropMapRoss(ConfigHandler.ross128BAID)); - - // other space dims - for (ModContainer modContainer : getModContainers()) { - for (ModDimensionDef dimDef : modContainer.getDimensionList()) { - dropMapsByChunkProviderName.put(dimDef.getChunkProviderName(), getDropMapSpace(dimDef)); - } - } - } - - /** - * Method to generate a DropMap that contains ores of a vanilla GT worldgen - */ - private static DropMap getDropMapVanilla(int dimId) { - DropMap dropMap = new DropMap(); - - // Ore Veins - Predicate oreLayerPredicate = makeOreLayerPredicate(dimId); - GT_Worldgen_GT_Ore_Layer.sList.stream() - .filter(gt_worldgen -> gt_worldgen.mEnabled && oreLayerPredicate.test(gt_worldgen)) - .forEach(element -> { - dropMap.addDrop(element.mPrimaryMeta, element.mWeight, false); - dropMap.addDrop(element.mSecondaryMeta, element.mWeight, false); - dropMap.addDrop(element.mSporadicMeta, element.mWeight / 8f, false); - dropMap.addDrop(element.mBetweenMeta, element.mWeight / 8f, false); - }); - - // Small Ores - Predicate smallOresPredicate = makeSmallOresPredicate(dimId); - GT_Worldgen_GT_Ore_SmallPieces.sList.stream() - .filter(gt_worldgen -> gt_worldgen.mEnabled && smallOresPredicate.test(gt_worldgen)) - .forEach(element -> dropMap.addDrop(element.mMeta, element.mAmount, false)); - return dropMap; - } - - /** - * Makes a predicate for the GT normal ore veins worldgen - * - * @return the predicate - */ - private static Predicate makeOreLayerPredicate(int dimensionId) { - return switch (dimensionId) { - case -1 -> gt_worldgen -> gt_worldgen.mNether; - case 0 -> gt_worldgen -> gt_worldgen.mOverworld; - case 1 -> gt_worldgen -> gt_worldgen.mEnd || gt_worldgen.mEndAsteroid; - case 7 -> gt_worldgen -> gt_worldgen.twilightForest; - default -> throw new IllegalStateException(); - }; - } - - /** - * Makes a predicate for the GT normal small ore worldgen - * - * @return the predicate - */ - private static Predicate makeSmallOresPredicate(int dimensionId) { - return switch (dimensionId) { - case -1 -> gt_worldgen -> gt_worldgen.mNether; - case 0 -> gt_worldgen -> gt_worldgen.mOverworld; - case 1 -> gt_worldgen -> gt_worldgen.mEnd; - case 7 -> gt_worldgen -> gt_worldgen.twilightForest; - default -> throw new IllegalStateException(); - }; - } - - /** - * Create a DropMap that contains ores of Ross dims - * - * @param aID dim id of Ross128b or Ross128ba - */ - private static DropMap getDropMapRoss(int aID) { - DropMap dropMap = new DropMap(); - for (BW_OreLayer oreLayer : BW_OreLayer.sList) { - if (oreLayer.mEnabled && oreLayer.isGenerationAllowed("", aID, 0)) { - List data = oreLayer.getStacks(); - dropMap.addDrop(data.get(0), oreLayer.mWeight); - dropMap.addDrop(data.get(1), oreLayer.mWeight); - dropMap.addDrop(data.get(2), oreLayer.mWeight / 8f); - dropMap.addDrop(data.get(3), oreLayer.mWeight / 8f); - } - } - return dropMap; - } - - /** - * Create a DropMap contains the ores from the galacticGreg space worldgen corresponding to the target dim - * - * @param finalDef ModDimensionDef corresponding to the target dim - */ - private static DropMap getDropMapSpace(ModDimensionDef finalDef) { - DropMap dropMap = new DropMap(); - - // Normal Ore Veins - GalacticGreg.oreVeinWorldgenList.stream() - .filter( - gt_worldgen -> gt_worldgen.mEnabled - && gt_worldgen instanceof GT_Worldgen_GT_Ore_Layer_Space oreLayerSpace - && oreLayerSpace.isEnabledForDim(finalDef)) - .map(gt_worldgen -> (GT_Worldgen_GT_Ore_Layer_Space) gt_worldgen) - .forEach(element -> { - dropMap.addDrop(element.mPrimaryMeta, element.mWeight, false); - dropMap.addDrop(element.mSecondaryMeta, element.mWeight, false); - dropMap.addDrop(element.mSporadicMeta, element.mWeight / 8f, false); - dropMap.addDrop(element.mBetweenMeta, element.mWeight / 8f, false); - }); - - // Normal Small Ores - GalacticGreg.smallOreWorldgenList.stream() - .filter( - gt_worldgen -> gt_worldgen.mEnabled - && gt_worldgen instanceof GT_Worldgen_GT_Ore_SmallPieces_Space oreSmallPiecesSpace - && oreSmallPiecesSpace.isEnabledForDim(finalDef)) - .map(gt_worldgen -> (GT_Worldgen_GT_Ore_SmallPieces_Space) gt_worldgen) - .forEach(element -> dropMap.addDrop(element.mMeta, element.mAmount, false)); - return dropMap; - } - - public static void addBlockToDimensionList(int dimId, Block block, int meta, float weight) { - if (!extraDropsDimMap.containsKey(dimId)) { - extraDropsDimMap.put(dimId, new DropMap()); - } - extraDropsDimMap.get(dimId) - .addDrop(block, meta, weight); - } - - /** - * Public method giving other mods the ability to add manually a material with an ore version into the external - * dropMap for a specified dim id - * - * @param DimensionID the dim id targeted - * @param Material the material with an ore version - * @param weight the non normalised version of the given weight - */ - public static void addMaterialToDimensionList(int DimensionID, ISubTagContainer Material, float weight) { - if (Material instanceof Materials gtMaterial) { - addBlockToDimensionList(DimensionID, GregTech_API.sBlockOres1, gtMaterial.mMetaItemSubID, weight); - } else if (Material instanceof Werkstoff werkstoff) { - addBlockToDimensionList(DimensionID, WerkstoffLoader.BWOres, werkstoff.getmID(), weight); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/GalacticraftProxy.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/GalacticraftProxy.java deleted file mode 100644 index e203246058..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/GalacticraftProxy.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticraft; - -import net.minecraftforge.common.MinecraftForge; - -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.system.oregen.BW_WorldGenRoss128b; -import com.github.bartimaeusnek.bartworks.system.oregen.BW_WorldGenRoss128ba; -import com.github.bartimaeusnek.crossmod.galacticraft.atmosphere.BWAtmosphereManager; -import com.github.bartimaeusnek.crossmod.galacticraft.solarsystems.Ross128SolarSystem; - -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; - -public class GalacticraftProxy { - - private GalacticraftProxy() {} - - public static void postInit(FMLPostInitializationEvent e) { - if (SideReference.Side.Server || SideReference.EffectiveSide.Server) { - GalacticraftProxy.serverPostInit(e); - } else { - GalacticraftProxy.clientPostInit(e); - } - GalacticraftProxy.commonPostInit(e); - } - - public static void preInit(FMLPreInitializationEvent e) { - if (SideReference.Side.Server || SideReference.EffectiveSide.Server) { - GalacticraftProxy.serverpreInit(e); - } else { - GalacticraftProxy.clientpreInit(e); - } - GalacticraftProxy.commonpreInit(e); - } - - private static void serverpreInit(FMLPreInitializationEvent e) {} - - private static void clientpreInit(FMLPreInitializationEvent e) {} - - private static void commonpreInit(FMLPreInitializationEvent e) { - BW_WorldGenRoss128b.initOres(); - BW_WorldGenRoss128ba.init_Ores(); - MinecraftForge.EVENT_BUS.register(BWAtmosphereManager.INSTANCE); - } - - public static void init(FMLInitializationEvent e) { - if (SideReference.Side.Server || SideReference.EffectiveSide.Server) { - GalacticraftProxy.serverInit(e); - } else { - GalacticraftProxy.clientInit(e); - } - GalacticraftProxy.commonInit(e); - } - - private static void serverInit(FMLInitializationEvent e) {} - - private static void clientInit(FMLInitializationEvent e) {} - - private static void commonInit(FMLInitializationEvent e) { - if (ConfigHandler.Ross128Enabled) Ross128SolarSystem.init(); - } - - private static void serverPostInit(FMLPostInitializationEvent e) {} - - private static void clientPostInit(FMLPostInitializationEvent e) {} - - private static void commonPostInit(FMLPostInitializationEvent e) {} -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/PlanetsHelperClass.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/PlanetsHelperClass.java deleted file mode 100644 index c9cff6cd9e..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/PlanetsHelperClass.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticraft; - -import net.minecraft.entity.player.EntityPlayerMP; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; - -import micdoodle8.mods.galacticraft.core.entities.EntityLander; -import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; -import micdoodle8.mods.galacticraft.planets.asteroids.entities.EntityEntryPod; -import micdoodle8.mods.galacticraft.planets.mars.entities.EntityLandingBalloons; - -public class PlanetsHelperClass { - - public static EntityLanderBase getLanderType(EntityPlayerMP player) { - return switch (ConfigHandler.landerType) { - case 1 -> new EntityLander(player); - case 2 -> new EntityLandingBalloons(player); - default -> new EntityEntryPod(player); - }; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/UniversalTeleportType.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/UniversalTeleportType.java deleted file mode 100644 index b6fa575b5c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/UniversalTeleportType.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticraft; - -import static gregtech.api.enums.Mods.GalacticraftMars; - -import java.util.Random; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; - -import micdoodle8.mods.galacticraft.api.vector.Vector3; -import micdoodle8.mods.galacticraft.api.world.ITeleportType; -import micdoodle8.mods.galacticraft.core.entities.EntityLander; -import micdoodle8.mods.galacticraft.core.entities.EntityLanderBase; -import micdoodle8.mods.galacticraft.core.entities.player.GCPlayerStats; - -public class UniversalTeleportType implements ITeleportType { - - @Override - public boolean useParachute() { - return false; - } - - @Override - public Vector3 getPlayerSpawnLocation(WorldServer world, EntityPlayerMP player) { - return this.getEntitySpawnLocation(world, player); - } - - @Override - public Vector3 getEntitySpawnLocation(WorldServer world, Entity entity) { - if (entity instanceof EntityPlayerMP) { - GCPlayerStats stats = GCPlayerStats.get((EntityPlayerMP) entity); - return new Vector3(stats.coordsTeleportedFromX, 500D, stats.coordsTeleportedFromZ); - } - return new Vector3(entity.posX, 500D, entity.posZ); - } - - @Override - public Vector3 getParaChestSpawnLocation(WorldServer world, EntityPlayerMP player, Random rand) { - return null; - } - - @Override - public void onSpaceDimensionChanged(World newWorld, EntityPlayerMP player, boolean ridingAutoRocket) { - if (ridingAutoRocket) return; - if (player != null && GCPlayerStats.get(player).teleportCooldown <= 0) { - if (player.capabilities.isFlying) { - player.capabilities.isFlying = false; - } - - EntityLanderBase elb; - if (GalacticraftMars.isModLoaded()) elb = PlanetsHelperClass.getLanderType(player); - else elb = new EntityLander(player); - - if (!newWorld.isRemote) { - newWorld.spawnEntityInWorld(elb); - } - GCPlayerStats.get(player).teleportCooldown = 10; - } - } - - @Override - public void setupAdventureSpawn(EntityPlayerMP player) {} -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/atmosphere/BWAtmosphereManager.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/atmosphere/BWAtmosphereManager.java deleted file mode 100644 index fa6d2db382..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/atmosphere/BWAtmosphereManager.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticraft.atmosphere; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.util.Pair; -import com.github.bartimaeusnek.crossmod.BartWorksCrossmod; -import com.google.common.collect.ArrayListMultimap; - -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ISubTagContainer; -import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; -import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; -import micdoodle8.mods.galacticraft.api.world.IAtmosphericGas; - -public final class BWAtmosphereManager { - - private static final Map COEFFICIENT_MAP = new HashMap<>(); - - private BWAtmosphereManager() { - BWAtmosphereManager.COEFFICIENT_MAP.put(1, new Integer[] { 100 }); - BWAtmosphereManager.COEFFICIENT_MAP.put(2, new Integer[] { 70, 30 }); - BWAtmosphereManager.COEFFICIENT_MAP.put(3, new Integer[] { 60, 25, 15 }); - BWAtmosphereManager.COEFFICIENT_MAP.put(4, new Integer[] { 50, 25, 15, 10 }); - BWAtmosphereManager.COEFFICIENT_MAP.put(5, new Integer[] { 45, 25, 15, 10, 5 }); - BWAtmosphereManager.COEFFICIENT_MAP.put(6, new Integer[] { 45, 20, 15, 10, 5, 5 }); - BWAtmosphereManager.COEFFICIENT_MAP.put(7, new Integer[] { 40, 20, 15, 10, 5, 5, 5 }); - BWAtmosphereManager.COEFFICIENT_MAP.put(8, new Integer[] { 35, 20, 15, 10, 5, 5, 5, 5 }); - BWAtmosphereManager.COEFFICIENT_MAP.put(9, new Integer[] { 35, 15, 15, 10, 5, 5, 5, 5, 5 }); - } - - public static final BWAtmosphereManager INSTANCE = new BWAtmosphereManager(); - - private static final ArrayListMultimap> gasConcentration = ArrayListMultimap - .create(); - - public static List> getGasFromWorldID(int worldID) { - return BWAtmosphereManager.gasConcentration.get(worldID); - } - - public static void removeGasFromWorld(int worldID, ISubTagContainer gas) { - for (Pair pair : BWAtmosphereManager.gasConcentration.get(worldID)) { - if (pair.getKey() - .equals(gas)) { - BWAtmosphereManager.gasConcentration.get(worldID) - .remove(pair); - return; - } - } - } - - public static void addGasToWorld(int worldID, ISubTagContainer gas, int amount) { - Pair toadd = new Pair<>(gas, amount); - BWAtmosphereManager.gasConcentration.put(worldID, toadd); - } - - public static void addGasToWorld(int worldID, Pair toPut) { - BWAtmosphereManager.gasConcentration.put(worldID, toPut); - } - - @SafeVarargs - public static void addGasToWorld(int worldID, Pair... toPut) { - Arrays.stream(toPut) - .forEach(toadd -> BWAtmosphereManager.gasConcentration.put(worldID, toadd)); - } - - private static boolean addGCGasToWorld(int worldID, IAtmosphericGas gas, int aNumber, int aMaxNumber) { - if (IAtmosphericGas.CO2.equals(gas)) { - BWAtmosphereManager.addGasToWorld( - worldID, - Materials.CarbonDioxide, - BWAtmosphereManager.COEFFICIENT_MAP.get(aMaxNumber)[aNumber]); - return true; - } - String name = gas.toString(); - name = name.charAt(0) + name.substring(1) - .toLowerCase(Locale.US); - ISubTagContainer mat = Materials.get(name); - if (mat == Materials._NULL) { - mat = WerkstoffLoader.getWerkstoff(name); - } - if (mat == Werkstoff.default_null_Werkstoff) { - return false; - } - BWAtmosphereManager.addGasToWorld(worldID, mat, BWAtmosphereManager.COEFFICIENT_MAP.get(aMaxNumber)[aNumber]); - return true; - } - - @SubscribeEvent - public void gcAutoRegister(GalaxyRegistry.PlanetRegisterEvent event) { - CelestialBody planet = GalaxyRegistry.getRegisteredPlanets() - .get(event.planetName); - for (int i = 0; i < planet.atmosphere.size(); i++) { - if (!BWAtmosphereManager - .addGCGasToWorld(planet.getDimensionID(), planet.atmosphere.get(i), i, planet.atmosphere.size())) - BartWorksCrossmod.LOGGER.warn( - "Unidentified Fluid (" + planet.atmosphere.get(i) - + ") in the Atmosphere of: " - + planet.getLocalizedName()); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/AbstractWorldProviderSpace.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/AbstractWorldProviderSpace.java deleted file mode 100644 index 61c52865cf..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/AbstractWorldProviderSpace.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticraft.planets; - -import micdoodle8.mods.galacticraft.api.prefab.world.gen.WorldProviderSpace; -import micdoodle8.mods.galacticraft.api.world.IExitHeight; -import micdoodle8.mods.galacticraft.api.world.ISolarLevel; - -public abstract class AbstractWorldProviderSpace extends WorldProviderSpace implements IExitHeight, ISolarLevel { - - @Override - public boolean canRainOrSnow() { - return false; - } - - @Override - public String getDimensionName() { - return this.getCelestialBody() - .getLocalizedName(); - } - - @Override - public boolean hasSunset() { - return true; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/ChunkProviderRoss128b.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/ChunkProviderRoss128b.java deleted file mode 100644 index b477154d39..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/ChunkProviderRoss128b.java +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticraft.planets.ross128b; - -import static gregtech.api.enums.Mods.Thaumcraft; -import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.ICE; -import static net.minecraftforge.event.terraingen.PopulateChunkEvent.Populate.EventType.LAKE; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockFalling; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.init.Blocks; -import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraft.world.biome.BiomeGenBase.SpawnListEntry; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.IChunkProvider; -import net.minecraft.world.gen.ChunkProviderGenerate; -import net.minecraft.world.gen.MapGenBase; -import net.minecraft.world.gen.MapGenCaves; -import net.minecraft.world.gen.MapGenRavine; -import net.minecraft.world.gen.feature.WorldGenLakes; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.terraingen.PopulateChunkEvent; -import net.minecraftforge.event.terraingen.TerrainGen; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.bartworks.system.oregen.BW_WordGenerator; -import com.github.bartimaeusnek.bartworks.system.worldgen.MapGenRuins; -import com.github.bartimaeusnek.crossmod.thaumcraft.util.ThaumcraftHandler; - -import gregtech.api.objects.XSTR; - -public class ChunkProviderRoss128b extends ChunkProviderGenerate { - - XSTR rand = new XSTR(); - private BiomeGenBase[] biomesForGeneration; - public static final BW_WordGenerator BWOreGen = new BW_WordGenerator(); - private final World worldObj; - private final MapGenBase caveGenerator = new MapGenCaves(); - private final MapGenBase ravineGenerator = new MapGenRavine(); - private final MapGenRuins.RuinsBase ruinsBase = new MapGenRuins.RuinsBase(); - - public ChunkProviderRoss128b(World par1World, long seed, boolean mapFeaturesEnabled) { - super(par1World, seed, mapFeaturesEnabled); - this.worldObj = par1World; - } - - @Override - public List getPossibleCreatures(EnumCreatureType p_73155_1_, int p_73155_2_, int p_73155_3_, - int p_73155_4_) { - return null; - } - - @Override - public Chunk provideChunk(int p_73154_1_, int p_73154_2_) { - this.rand.setSeed(p_73154_1_ * 341873128712L + p_73154_2_ * 132897987541L); - Block[] ablock = new Block[65536]; - byte[] abyte = new byte[65536]; - this.func_147424_a(p_73154_1_, p_73154_2_, ablock); - this.biomesForGeneration = this.worldObj.getWorldChunkManager() - .loadBlockGeneratorData(this.biomesForGeneration, p_73154_1_ * 16, p_73154_2_ * 16, 16, 16); - for (int i = 0; i < this.biomesForGeneration.length; i++) { - BiomeGenBase biomeGenBase = this.biomesForGeneration[i]; - if (biomeGenBase.biomeID == BiomeGenBase.mushroomIsland.biomeID) { - this.biomesForGeneration[i] = BiomeGenBase.taiga; - } else if (biomeGenBase.biomeID == BiomeGenBase.mushroomIslandShore.biomeID) { - this.biomesForGeneration[i] = BiomeGenBase.stoneBeach; - } - if (Thaumcraft.isModLoaded()) { - if (ThaumcraftHandler.isTaintBiome(biomeGenBase.biomeID)) - this.biomesForGeneration[i] = BiomeGenBase.taiga; - else if (ConfigHandler.disableMagicalForest - && ThaumcraftHandler.isMagicalForestBiome(biomeGenBase.biomeID)) - this.biomesForGeneration[i] = BiomeGenBase.birchForest; - } - } - this.replaceBlocksForBiome(p_73154_1_, p_73154_2_, ablock, abyte, this.biomesForGeneration); - this.caveGenerator.func_151539_a(this, this.worldObj, p_73154_1_, p_73154_2_, ablock); - this.ravineGenerator.func_151539_a(this, this.worldObj, p_73154_1_, p_73154_2_, ablock); - - Chunk chunk = new Chunk(this.worldObj, ablock, abyte, p_73154_1_, p_73154_2_); - byte[] abyte1 = chunk.getBiomeArray(); - - for (int k = 0; k < abyte1.length; ++k) { - abyte1[k] = (byte) this.biomesForGeneration[k].biomeID; - } - - chunk.generateSkylightMap(); - return chunk; - } - - @Override - public void populate(IChunkProvider p_73153_1_, int p_73153_2_, int p_73153_3_) { - BlockFalling.fallInstantly = true; - int k = p_73153_2_ * 16; - int l = p_73153_3_ * 16; - BiomeGenBase biomegenbase = this.worldObj.getBiomeGenForCoords(k + 16, l + 16); - this.rand.setSeed(this.worldObj.getSeed()); - if (p_73153_2_ % 4 == 0 || p_73153_3_ % 4 == 0) { - long i1 = this.rand.nextLong() / 2L * 2L + 1L; - long j1 = this.rand.nextLong() / 2L * 2L + 1L; - this.rand.setSeed(p_73153_2_ * i1 + p_73153_3_ * j1 ^ this.worldObj.getSeed()); - } - - MinecraftForge.EVENT_BUS - .post(new PopulateChunkEvent.Pre(p_73153_1_, this.worldObj, this.rand, p_73153_2_, p_73153_3_, false)); - - int x1; - int y1; - int z1; - if (biomegenbase != BiomeGenBase.desert && biomegenbase != BiomeGenBase.desertHills - && TerrainGen.populate(p_73153_1_, this.worldObj, this.rand, p_73153_2_, p_73153_3_, false, LAKE)) { - x1 = k + this.rand.nextInt(16) + 8; - y1 = this.rand.nextInt(256); - z1 = l + this.rand.nextInt(16) + 8; - int rni = this.rand.nextInt(8); - if (rni == 0) new WorldGenLakes(Blocks.ice).generate(this.worldObj, this.rand, x1, y1, z1); - else if (rni == 4) new WorldGenLakes(Blocks.water).generate(this.worldObj, this.rand, x1, y1, z1); - } - if (biomegenbase != BiomeGenBase.ocean && biomegenbase != BiomeGenBase.deepOcean - && biomegenbase != BiomeGenBase.river - && biomegenbase != BiomeGenBase.frozenOcean - && biomegenbase != BiomeGenBase.frozenRiver - && this.rand.nextInt(ConfigHandler.ross128bRuinChance) == 0) { - x1 = k + this.rand.nextInt(16) + 3; - y1 = this.rand.nextInt(256); - z1 = l + this.rand.nextInt(16) + 3; - this.ruinsBase.generate(this.worldObj, this.rand, x1, y1, z1); - } - - biomegenbase.decorate(this.worldObj, this.rand, k, l); - - k += 8; - l += 8; - - boolean doGen = TerrainGen.populate(p_73153_1_, this.worldObj, this.rand, p_73153_2_, p_73153_3_, false, ICE); - for (x1 = 0; doGen && x1 < 16; ++x1) { - for (y1 = 0; y1 < 16; ++y1) { - z1 = this.worldObj.getPrecipitationHeight(k + x1, l + y1); - - if (this.worldObj.isBlockFreezable(x1 + k, z1 - 1, y1 + l)) { - this.worldObj.setBlock(x1 + k, z1 - 1, y1 + l, Blocks.ice, 0, 2); - } - - if (this.worldObj.func_147478_e(x1 + k, z1, y1 + l, true)) { - this.worldObj.setBlock(x1 + k, z1, y1 + l, Blocks.snow_layer, 0, 2); - } - } - } - - BWOreGen.generate(this.rand, p_73153_2_, p_73153_3_, this.worldObj, this, this); - MinecraftForge.EVENT_BUS - .post(new PopulateChunkEvent.Post(p_73153_1_, this.worldObj, this.rand, p_73153_2_, p_73153_3_, false)); - - BlockFalling.fallInstantly = false; - } - - @Override - public void recreateStructures(int p_82695_1_, int p_82695_2_) {} - - @Override - public void replaceBlocksForBiome(int p_147422_1_, int p_147422_2_, Block[] blocks, byte[] metas, - BiomeGenBase[] p_147422_5_) { - super.replaceBlocksForBiome(p_147422_1_, p_147422_2_, blocks, metas, p_147422_5_); - for (int i = 0; i < blocks.length; i++) { - if (blocks[i] == Blocks.grass) { - blocks[i] = Blocks.dirt; - metas[i] = 2; - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/SkyProviderRoss128b.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/SkyProviderRoss128b.java deleted file mode 100644 index d5368b3f0d..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/SkyProviderRoss128b.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticraft.planets.ross128b; - -import net.minecraft.util.ResourceLocation; - -import com.github.bartimaeusnek.crossmod.BartWorksCrossmod; - -public class SkyProviderRoss128b { - - // ASM enables this texture - public static final ResourceLocation sunTex = new ResourceLocation( - BartWorksCrossmod.MOD_ID + ":galacticraft/Ross128b/World/SunRoss128.png"); -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/WorldProviderRoss128b.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/WorldProviderRoss128b.java deleted file mode 100644 index 7a0c9a743c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128b/WorldProviderRoss128b.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticraft.planets.ross128b; - -import net.minecraft.util.MathHelper; -import net.minecraft.util.Vec3; -import net.minecraft.world.biome.WorldChunkManager; -import net.minecraft.world.chunk.IChunkProvider; - -import com.github.bartimaeusnek.crossmod.galacticraft.planets.AbstractWorldProviderSpace; -import com.github.bartimaeusnek.crossmod.galacticraft.solarsystems.Ross128SolarSystem; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; -import micdoodle8.mods.galacticraft.api.vector.Vector3; - -public class WorldProviderRoss128b extends AbstractWorldProviderSpace { - - @Override - public boolean canRespawnHere() { - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public Vec3 getFogColor(float cy, float noidea) { - float angle = MathHelper.cos(cy * (float) Math.PI * 2.0F) * 2.0F + 0.5F; - - if (angle < 0.0F) { - angle = 0.0F; - } - - if (angle > 1.0F) { - angle = 1.0F; - } - - float red = 200 / 255f; - float green = 80 / 255f; - float blue = 0.0F; - red *= angle * 0.94F + 0.06F; - green *= angle * 0.94F + 0.06F; - return Vec3.createVectorHelper(red, green, blue); - } - - @Override - public Vector3 getFogColor() { - // unused - return null; - } - - @Override - public float getSunBrightness(float par1) { - return super.getSunBrightness(par1) * 0.975f; - } - - @Override - public float calculateCelestialAngle(long par1, float par3) { - return super.calculateCelestialAngle(par1, par3); - } - - @Override - public Vector3 getSkyColor() { - float red = 200 / 255f; - float green = 120 / 255f; - float blue = 0.0F; - return new Vector3(red, green, blue); - } - - @Override - public long getDayLength() { - return (long) (24000 * 9.9f); - } - - @Override - public Class getChunkProviderClass() { - return ChunkProviderRoss128b.class; - } - - @Override - public Class getWorldChunkManagerClass() { - return WorldChunkManager.class; - } - - @Override - public float getGravity() { - return -0.0035F; - } - - @Override - public double getMeteorFrequency() { - return 0D; - } - - @Override - public double getFuelUsageMultiplier() { - return 1.35D; - } - - @Override - public boolean canSpaceshipTierPass(int tier) { - return Ross128SolarSystem.Ross128b.getTierRequirement() <= tier; - } - - @Override - public float getFallDamageModifier() { - return 1.35F; - } - - @Override - public float getSoundVolReductionAmount() { - return 1F; - } - - @Override - public float getThermalLevelModifier() { - return 0.01f; - } - - @Override - public float getWindLevel() { - return 1.35f; - } - - @Override - public CelestialBody getCelestialBody() { - return Ross128SolarSystem.Ross128b; - } - - @Override - public double getYCoordinateToTeleport() { - return 500D; - } - - @Override - public double getSolarEnergyMultiplier() { - return 1.38D; - } - - @Override - public boolean hasBreathableAtmosphere() { - return true; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128ba/ChunkProviderRoss128ba.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128ba/ChunkProviderRoss128ba.java deleted file mode 100644 index 18a8eadd2c..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128ba/ChunkProviderRoss128ba.java +++ /dev/null @@ -1,108 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticraft.planets.ross128ba; - -import java.util.Arrays; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockFalling; -import net.minecraft.init.Blocks; -import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.IChunkProvider; - -import com.github.bartimaeusnek.bartworks.util.NoiseUtil.BartsNoise; -import com.github.bartimaeusnek.crossmod.galacticraft.planets.ross128b.ChunkProviderRoss128b; - -import gregtech.api.objects.XSTR; -import micdoodle8.mods.galacticraft.api.prefab.world.gen.MapGenBaseMeta; -import micdoodle8.mods.galacticraft.core.blocks.GCBlocks; -import micdoodle8.mods.galacticraft.core.world.gen.BiomeGenBaseMoon; -import micdoodle8.mods.galacticraft.core.world.gen.ChunkProviderMoon; -import micdoodle8.mods.galacticraft.core.world.gen.MapGenCavesMoon; - -public class ChunkProviderRoss128ba extends ChunkProviderMoon { - - private final XSTR rand = new XSTR(); - private final World worldObj; - private BiomeGenBase[] biomesForGeneration; - private final MapGenBaseMeta caveGenerator; - - public ChunkProviderRoss128ba(World world, long seed, boolean mapFeaturesEnabled) { - super(world, seed, mapFeaturesEnabled); - this.biomesForGeneration = new BiomeGenBase[] { BiomeGenBaseMoon.moonFlat }; - this.caveGenerator = new MapGenCavesMoon(); - this.worldObj = world; - } - - @Override - public Chunk provideChunk(int cx, int cz) { - this.rand.setSeed(cx * 341873128712L + cz * 132897987541L); - Block[] ids = new Block[65536]; - byte[] meta = new byte[65536]; - Arrays.fill(ids, Blocks.air); - this.generateTerrain(cx, cz, ids, meta); - this.biomesForGeneration = this.worldObj.getWorldChunkManager() - .loadBlockGeneratorData(this.biomesForGeneration, cx * 16, cz * 16, 16, 16); - this.createCraters(cx, cz, ids, meta); - this.replaceBlocksForBiome(cx, cz, ids, meta, this.biomesForGeneration); - this.caveGenerator.generate(this, this.worldObj, cx, cz, ids, meta); - Chunk Chunk = new Chunk(this.worldObj, ids, meta, cx, cz); - Chunk.generateSkylightMap(); - return Chunk; - } - - @Override - public void decoratePlanet(World par1World, Random par2Random, int par3, int par4) {} - - @Override - public void populate(IChunkProvider par1IChunkProvider, int par2, int par3) { - super.populate(par1IChunkProvider, par2, par3); - BlockFalling.fallInstantly = true; - ChunkProviderRoss128b.BWOreGen.generate(this.rand, par2, par3, this.worldObj, this, this); - BlockFalling.fallInstantly = false; - } - - private int getIndex(int x, int y, int z) { - return (x * 16 + z) * 256 + y; - } - - final Block lowerBlockID = GCBlocks.blockMoon; - final BartsNoise noiseGen = new BartsNoise(2, 0.008F, 1D, System.nanoTime()); - final BartsNoise noiseGen2 = new BartsNoise(2, 0.01F, 1D, System.nanoTime()); - final BartsNoise noiseGen3 = new BartsNoise(2, 0.002F, 1D, System.nanoTime()); - - @Override - public void generateTerrain(int chunkX, int chunkZ, Block[] idArray, byte[] metaArray) { - for (int x = 0; x < 16; ++x) { - for (int z = 0; z < 16; ++z) { - double d = this.noiseGen.getNoise(x + chunkX * 16, z + chunkZ * 16); - double d2 = this.noiseGen2.getNoise(x + chunkX * 16, z + chunkZ * 16); - double d3 = this.noiseGen3.getCosNoise(x + chunkX * 16, z + chunkZ * 16); - - double yDev = d * 4 + d2 * 2 + d3; - - for (int y = 0; y < 128; ++y) { - if (y < 60.0D + yDev) { - idArray[this.getIndex(x, y, z)] = this.lowerBlockID; - int var10001 = this.getIndex(x, y, z); - metaArray[var10001] = 4; - } - } - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128ba/WorldProviderRoss128ba.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128ba/WorldProviderRoss128ba.java deleted file mode 100644 index 38c014a467..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/planets/ross128ba/WorldProviderRoss128ba.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticraft.planets.ross128ba; - -import net.minecraft.world.biome.WorldChunkManager; -import net.minecraft.world.chunk.IChunkProvider; - -import com.github.bartimaeusnek.bartworks.util.MathUtils; -import com.github.bartimaeusnek.crossmod.galacticraft.planets.AbstractWorldProviderSpace; -import com.github.bartimaeusnek.crossmod.galacticraft.solarsystems.Ross128SolarSystem; - -import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; -import micdoodle8.mods.galacticraft.api.vector.Vector3; -import micdoodle8.mods.galacticraft.core.world.gen.WorldChunkManagerMoon; - -public class WorldProviderRoss128ba extends AbstractWorldProviderSpace { - - @Override - public Vector3 getFogColor() { - return new Vector3(0, 0, 0); - } - - @Override - public Vector3 getSkyColor() { - return new Vector3(0, 0, 0); - } - - @Override - public long getDayLength() { - return MathUtils.floorLong(24000f * 9.9f / 100f); - } - - @Override - public boolean hasSunset() { - return false; - } - - @Override - public Class getChunkProviderClass() { - return ChunkProviderRoss128ba.class; - } - - @Override - public Class getWorldChunkManagerClass() { - return WorldChunkManagerMoon.class; - } - - @Override - public double getYCoordinateToTeleport() { - return 500; - } - - @Override - public float getGravity() { - return 0.060f; - } - - @Override - public double getMeteorFrequency() { - return 9D; - } - - @Override - public double getFuelUsageMultiplier() { - return 0.7D; - } - - @Override - public boolean canSpaceshipTierPass(int i) { - return i >= Ross128SolarSystem.Ross128ba.getTierRequirement(); - } - - @Override - public float getFallDamageModifier() { - return 0.2f; - } - - @Override - public float getSoundVolReductionAmount() { - return 20f; - } - - @Override - public float getThermalLevelModifier() { - return 0; - } - - @Override - public float getWindLevel() { - return 0; - } - - @Override - public CelestialBody getCelestialBody() { - return Ross128SolarSystem.Ross128ba; - } - - @Override - public double getSolarEnergyMultiplier() { - return 1.9D; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/solarsystems/Ross128SolarSystem.java b/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/solarsystems/Ross128SolarSystem.java deleted file mode 100644 index f7bdec79eb..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/galacticraft/solarsystems/Ross128SolarSystem.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.galacticraft.solarsystems; - -import static gregtech.api.enums.Mods.GalaxySpace; - -import java.util.Arrays; - -import net.minecraft.util.ResourceLocation; - -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; -import com.github.bartimaeusnek.crossmod.BartWorksCrossmod; -import com.github.bartimaeusnek.crossmod.galacticraft.UniversalTeleportType; -import com.github.bartimaeusnek.crossmod.galacticraft.planets.ross128b.WorldProviderRoss128b; -import com.github.bartimaeusnek.crossmod.galacticraft.planets.ross128ba.WorldProviderRoss128ba; - -import micdoodle8.mods.galacticraft.api.GalacticraftRegistry; -import micdoodle8.mods.galacticraft.api.galaxies.CelestialBody; -import micdoodle8.mods.galacticraft.api.galaxies.GalaxyRegistry; -import micdoodle8.mods.galacticraft.api.galaxies.Moon; -import micdoodle8.mods.galacticraft.api.galaxies.Planet; -import micdoodle8.mods.galacticraft.api.galaxies.SolarSystem; -import micdoodle8.mods.galacticraft.api.galaxies.Star; -import micdoodle8.mods.galacticraft.api.vector.Vector3; -import micdoodle8.mods.galacticraft.api.world.IAtmosphericGas; -import micdoodle8.mods.galacticraft.core.GalacticraftCore; - -public class Ross128SolarSystem { - - public static SolarSystem Ross128System; - public static Star Ross128; - public static Planet Ross128b; - public static Moon Ross128ba; - - private Ross128SolarSystem() {} - - public static void init() { - - Ross128SolarSystem.Ross128System = new SolarSystem("Ross128System", "milkyWay") - .setMapPosition(new Vector3(-0.5D, 0.65D, 0.0D)); - Ross128SolarSystem.Ross128 = (Star) new Star("Ross128").setParentSolarSystem(Ross128SolarSystem.Ross128System) - .setTierRequired(-1); - Ross128SolarSystem.Ross128.setUnreachable(); - Ross128SolarSystem.Ross128 - .setBodyIcon(new ResourceLocation(BartWorksCrossmod.MOD_ID + ":galacticraft/Ross128b/MapObjs/Ross128.png")); - Ross128SolarSystem.Ross128System.setMainStar(Ross128SolarSystem.Ross128); - - Ross128SolarSystem.Ross128b = new Planet("Ross128b").setParentSolarSystem(Ross128SolarSystem.Ross128System); - Ross128SolarSystem.Ross128b.setRingColorRGB(0x9F / 255f, 0x8A / 255f, 0x79 / 255f); - Ross128SolarSystem.Ross128b.setPhaseShift(1.25F); - Ross128SolarSystem.Ross128b.setBodyIcon( - new ResourceLocation(BartWorksCrossmod.MOD_ID + ":galacticraft/Ross128b/MapObjs/Ross128b.png")); - Ross128SolarSystem.Ross128b.setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(0.75F, 1.75F)); - Ross128SolarSystem.Ross128b.setRelativeOrbitTime(0.65F); - Ross128SolarSystem.Ross128b.atmosphere - .addAll(Arrays.asList(IAtmosphericGas.OXYGEN, IAtmosphericGas.NITROGEN, IAtmosphericGas.ARGON)); - Ross128SolarSystem.Ross128b.setDimensionInfo(ConfigHandler.ross128BID, WorldProviderRoss128b.class); - Ross128SolarSystem.Ross128b.setTierRequired(ConfigHandler.ross128btier); - - Ross128SolarSystem.Ross128ba = new Moon("Ross128ba").setParentPlanet(Ross128SolarSystem.Ross128b); - Ross128SolarSystem.Ross128ba.setRelativeDistanceFromCenter(new CelestialBody.ScalableDistance(10f, 15f)) - .setRelativeOrbitTime(1 / 0.01F); - Ross128SolarSystem.Ross128ba.setBodyIcon( - new ResourceLocation(BartWorksCrossmod.MOD_ID + ":galacticraft/Ross128b/MapObjs/Ross128ba.png")); - Ross128SolarSystem.Ross128ba.setDimensionInfo(ConfigHandler.ross128BAID, WorldProviderRoss128ba.class); - Ross128SolarSystem.Ross128ba - .setTierRequired(GalaxySpace.isModLoaded() ? Math.min(ConfigHandler.ross128btier + 2, 8) : 3); - - GalaxyRegistry.registerSolarSystem(Ross128SolarSystem.Ross128System); - GalaxyRegistry.registerPlanet(Ross128SolarSystem.Ross128b); - GalaxyRegistry.registerMoon(Ross128SolarSystem.Ross128ba); - GalacticraftRegistry.registerRocketGui( - WorldProviderRoss128b.class, - new ResourceLocation(GalacticraftCore.ASSET_PREFIX, "textures/gui/overworldRocketGui.png")); - GalacticraftRegistry.registerRocketGui( - WorldProviderRoss128ba.class, - new ResourceLocation(GalacticraftCore.ASSET_PREFIX, "textures/gui/moonRocketGui.png")); - GalacticraftRegistry.registerTeleportType(WorldProviderRoss128b.class, new UniversalTeleportType()); - GalacticraftRegistry.registerTeleportType(WorldProviderRoss128ba.class, new UniversalTeleportType()); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/openComputers/GT_NBT_DataBase.java b/src/main/java/com/github/bartimaeusnek/crossmod/openComputers/GT_NBT_DataBase.java deleted file mode 100644 index cc9b1dcc2d..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/openComputers/GT_NBT_DataBase.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.openComputers; - -import net.minecraft.nbt.NBTTagCompound; - -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; - -public class GT_NBT_DataBase { - - private static final BiMap tagIdBiMap = HashBiMap.create(); - private static final BiMap GTNBTBIMAP = HashBiMap.create(); - - private static long maxID = Long.MIN_VALUE + 1; - - private final NBTTagCompound tagCompound; - - private final String mDataName; - private final String mDataTitle; - private long id; - - GT_NBT_DataBase(String mDataName, String mDataTitle, NBTTagCompound tagCompound) { - this.mDataName = mDataName; - this.mDataTitle = mDataTitle; - this.tagCompound = tagCompound; - this.id = GT_NBT_DataBase.maxID; - GT_NBT_DataBase.tagIdBiMap.put(tagCompound, this.id); - GT_NBT_DataBase.GTNBTBIMAP.put(this, this.id); - ++GT_NBT_DataBase.maxID; - } - - static GT_NBT_DataBase getGTTagFromId(Long id) { - return GT_NBT_DataBase.GTNBTBIMAP.inverse() - .get(id); - } - - static Long getIdFromGTTag(GT_NBT_DataBase tagCompound) { - return GT_NBT_DataBase.GTNBTBIMAP.get(tagCompound); - } - - static NBTTagCompound getTagFromId(Long id) { - return GT_NBT_DataBase.tagIdBiMap.inverse() - .get(id); - } - - static Long getIdFromTag(NBTTagCompound tagCompound) { - return GT_NBT_DataBase.tagIdBiMap.get(tagCompound); - } - - public NBTTagCompound getTagCompound() { - return this.tagCompound; - } - - public String getmDataName() { - return this.mDataName; - } - - static long getMaxID() { - return GT_NBT_DataBase.maxID; - } - - public String getmDataTitle() { - return this.mDataTitle; - } - - public long getId() { - return this.id; - } - - public void setId(long id) { - this.id = id; - } - - private GT_NBT_DataBase(NBTTagCompound tagCompound, String mDataName, String mDataTitle, long id) { - this.tagCompound = tagCompound; - this.mDataName = mDataName; - this.mDataTitle = mDataTitle; - this.id = id; - } - - public static GT_NBT_DataBase makeNewWithoutRegister(String mDataName, String mDataTitle, - NBTTagCompound tagCompound) { - return new GT_NBT_DataBase(tagCompound, mDataName, mDataTitle, Long.MIN_VALUE); - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/openComputers/TileEntity_GTDataServer.java b/src/main/java/com/github/bartimaeusnek/crossmod/openComputers/TileEntity_GTDataServer.java deleted file mode 100644 index fdfe3d7ee9..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/openComputers/TileEntity_GTDataServer.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.openComputers; - -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; - -import com.github.bartimaeusnek.bartworks.API.ITileAddsInformation; -import com.github.bartimaeusnek.bartworks.API.ITileHasDifferentTextureSides; -import com.github.bartimaeusnek.bartworks.API.SideReference; -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; - -import cpw.mods.fml.common.Optional; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Mods; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.behaviors.Behaviour_DataOrb; -import li.cil.oc.api.machine.Arguments; -import li.cil.oc.api.machine.Callback; -import li.cil.oc.api.machine.Context; -import li.cil.oc.api.network.SimpleComponent; - -@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = Mods.Names.OPEN_COMPUTERS) -public class TileEntity_GTDataServer extends TileEntity - implements ISidedInventory, ITileAddsInformation, ITileHasDifferentTextureSides, SimpleComponent { - - private final BiMap OrbDataBase = HashBiMap.create(); - - private ItemStack[] mItems = new ItemStack[2]; - private byte TickTimer; - - @Optional.Method(modid = Mods.Names.OPEN_COMPUTERS) - public String getComponentName() { - return "GT-Data Server"; - } - - @Optional.Method(modid = Mods.Names.OPEN_COMPUTERS) - @Callback - public Object[] listData(Context context, Arguments args) { - Set ret = new HashSet<>(); - for (Map.Entry entry : this.OrbDataBase.entrySet()) { - ret.add( - entry.getValue() - .getId() + Long.MAX_VALUE - + ". " - + entry.getValue() - .getmDataTitle()); - } - return ret.toArray(new String[0]); - } - - @Optional.Method(modid = Mods.Names.OPEN_COMPUTERS) - @Callback - public Object[] imprintOrb(Context context, Arguments args) { - return new Object[] { false }; - } - - private boolean isServerSide() { - return !this.worldObj.isRemote || SideReference.Side.Server; - } - - @Override - public void updateEntity() { - if (this.TickTimer++ % 20 != 0) return; - - if (this.isServerSide()) { - if (GT_Utility.areStacksEqual(this.mItems[0], ItemList.Tool_DataOrb.get(1)) - && this.mItems[0].hasTagCompound()) { - if (GT_NBT_DataBase.getIdFromTag(this.mItems[0].getTagCompound()) == null) { - this.OrbDataBase.put( - GT_NBT_DataBase.getMaxID(), - new GT_NBT_DataBase( - Behaviour_DataOrb.getDataName(this.mItems[0]), - Behaviour_DataOrb.getDataTitle(this.mItems[0]), - this.mItems[0].getTagCompound())); - } else { - long id = GT_NBT_DataBase.getIdFromTag(this.mItems[0].getTagCompound()); - this.OrbDataBase.put(id, GT_NBT_DataBase.getGTTagFromId(id)); - } - } - if (GT_Utility.areStacksEqual(this.mItems[0], ItemList.Tool_DataStick.get(1)) - && this.mItems[0].hasTagCompound()) { - - String bookTitle = GT_Utility.ItemNBT.getBookTitle(this.mItems[0]); - String punchcardData = GT_Utility.ItemNBT.getPunchCardData(this.mItems[0]); - short mapID = GT_Utility.ItemNBT.getMapID(this.mItems[0]); - byte data = (byte) (bookTitle.isEmpty() ? punchcardData.isEmpty() ? mapID != -1 ? 3 : -1 : 2 : 1); - - String title = data == 1 ? bookTitle - : data == 2 ? punchcardData : data == 3 ? "" + mapID : "Custom Data"; - String name = data == 1 ? "eBook" - : data == 2 ? "Punch Card Data" : data == 3 ? "Map Data" : "Custom Data"; - if (GT_NBT_DataBase.getIdFromTag(this.mItems[0].getTagCompound()) == null) { - this.OrbDataBase.put( - GT_NBT_DataBase.getMaxID(), - new GT_NBT_DataBase(name, title, this.mItems[0].getTagCompound())); - } else { - long id = GT_NBT_DataBase.getIdFromTag(this.mItems[0].getTagCompound()); - this.OrbDataBase.put(id, GT_NBT_DataBase.getGTTagFromId(id)); - } - } - } - } - - @Override - public String[] getInfoData() { - return new String[0]; - } - - @Override - public void registerBlockIcons(IIconRegister par1IconRegister) {} - - @Override - public int[] getAccessibleSlotsFromSide(int p_94128_1_) { - return new int[0]; - } - - @Override - public boolean canInsertItem(int p_102007_1_, ItemStack p_102007_2_, int p_102007_3_) { - return false; - } - - @Override - public boolean canExtractItem(int p_102008_1_, ItemStack p_102008_2_, int p_102008_3_) { - return false; - } - - @Override - public int getSizeInventory() { - return this.mItems.length; - } - - @Override - public ItemStack getStackInSlot(int slotIn) { - return slotIn == 0 ? this.mItems[0] : this.mItems[1]; - } - - @Override - public ItemStack decrStackSize(int index, int count) { - return null; - } - - @Override - public ItemStack getStackInSlotOnClosing(int index) { - return null; - } - - @Override - public void setInventorySlotContents(int index, ItemStack stack) { - if (index > 1 || index < 0) return; - this.mItems[index] = stack; - } - - @Override - public String getInventoryName() { - return null; - } - - @Override - public boolean hasCustomInventoryName() { - return false; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public boolean isUseableByPlayer(EntityPlayer player) { - return true; - } - - @Override - public void openInventory() {} - - @Override - public void closeInventory() {} - - @Override - public boolean isItemValidForSlot(int index, ItemStack stack) { - return index == 0; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/TecTechResearchLoader.java b/src/main/java/com/github/bartimaeusnek/crossmod/tectech/TecTechResearchLoader.java deleted file mode 100644 index 5e8c20e979..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/TecTechResearchLoader.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.tectech; - -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; - -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.technus.tectech.recipe.TT_recipeAdder; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; - -public class TecTechResearchLoader { - - public static void runResearches() { - Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null - ? FluidRegistry.getFluid("molten.indalloy140") - : FluidRegistry.getFluid("molten.solderingalloy"); - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemRegistry.voidminer[0].copy(), - 1024000, - 256, - (int) TierEU.RECIPE_ZPM, - 24, - new Object[] { ItemRegistry.voidminer[0].copy(), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackPlutonium, 9L), - Materials.BlackPlutonium.getPlates(3), ItemList.Electric_Motor_ZPM.get(9L), ItemList.Sensor_ZPM.get(9L), - ItemList.Field_Generator_ZPM.get(9L), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.BlackPlutonium, 36L) }, - new FluidStack[] { new FluidStack(solderIndalloy, 1440), WerkstoffLoader.Krypton.getFluidOrGas(20000) }, - ItemRegistry.voidminer[1].copy(), - 5 * MINUTES, - (int) TierEU.RECIPE_ZPM); - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemRegistry.voidminer[1].copy(), - 8192000, - 512, - (int) TierEU.RECIPE_UV, - 64, - new Object[] { ItemRegistry.voidminer[1].copy(), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 9L), - Materials.Neutronium.getPlates(3), ItemList.Electric_Motor_UV.get(9L), ItemList.Sensor_UV.get(9L), - ItemList.Field_Generator_UV.get(9L), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 36L) }, - new FluidStack[] { new FluidStack(solderIndalloy, 1440), WerkstoffLoader.Oganesson.getFluidOrGas(20000) }, - ItemRegistry.voidminer[2].copy(), - 5 * MINUTES, - (int) TierEU.RECIPE_UV); - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Machine_Multi_ImplosionCompressor.get(1L), - 64000, - 48, - (int) TierEU.RECIPE_UV, - 8, - new Object[] { ItemList.Machine_Multi_ImplosionCompressor.get(1L), Materials.Neutronium.getBlocks(5), - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Osmium, 64), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Osmium, 64), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 64), - ItemList.Electric_Piston_UV.get(64), }, - new FluidStack[] { new FluidStack(solderIndalloy, 1440), Materials.Osmium.getMolten(1440), - Materials.Neutronium.getMolten(1440) }, - ItemRegistry.eic.copy(), - 5 * MINUTES, - (int) TierEU.RECIPE_UV); - - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/LowPowerLaser.java b/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/LowPowerLaser.java deleted file mode 100644 index e3a2065ed5..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/LowPowerLaser.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.tectech.tileentites.tiered; - -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.mechanics.pipe.IConnectsToEnergyTunnel; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Energy; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public interface LowPowerLaser extends IMetaTileEntity, IConnectsToEnergyTunnel { - - boolean isSender(); - - boolean isReceiver(); - - boolean isTunnel(); - - default boolean isConnectedCorrectly(ForgeDirection side) { - return false; - } - - default void setEUVar(long aEnergy) {} - - default long getAMPERES() { - return -1; - } - - default long maxEUInput() { - return -1; - } - - default long maxEUOutput() { - return -1; - } - - default long maxEUStore() { - return -1; - } - - default long getTotalPower() { - return this.getAMPERES() * Math.max(this.maxEUOutput(), this.maxEUInput()) - this.getAMPERES() / 20; - } - - default void moveAroundLowPower(IGregTechTileEntity aBaseMetaTileEntity) { - byte color = this.getBaseMetaTileEntity() - .getColorization(); - if (color >= 0) { - ForgeDirection front = aBaseMetaTileEntity.getFrontFacing(); - ForgeDirection opposite = front.getOpposite(); - - for (short dist = 1; dist < 250; ++dist) { - IGregTechTileEntity tGTTileEntity = aBaseMetaTileEntity - .getIGregTechTileEntityAtSideAndDistance(front, dist); - if (tGTTileEntity == null || tGTTileEntity.getColorization() != color) { - return; - } - - IMetaTileEntity aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return; - } - - if (aMetaTileEntity instanceof LowPowerLaser lowPowerLaser && lowPowerLaser.isReceiver() - && opposite == tGTTileEntity.getFrontFacing()) { - if (this.maxEUOutput() > lowPowerLaser.maxEUInput() - || this.getAMPERES() > lowPowerLaser.getAMPERES()) { - aMetaTileEntity.doExplosion(this.maxEUOutput()); - this.setEUVar(aBaseMetaTileEntity.getStoredEU() - this.maxEUOutput()); - return; - } - - if (this.maxEUOutput() == lowPowerLaser.maxEUInput()) { - long diff = Math.min( - this.getAMPERES() * 20L * this.maxEUOutput(), - Math.min( - lowPowerLaser.maxEUStore() - aMetaTileEntity.getBaseMetaTileEntity() - .getStoredEU(), - aBaseMetaTileEntity.getStoredEU())); - this.setEUVar(aBaseMetaTileEntity.getStoredEU() - diff); - lowPowerLaser.setEUVar( - aMetaTileEntity.getBaseMetaTileEntity() - .getStoredEU() + diff); - } - return; - } - - if ((!(aMetaTileEntity instanceof LowPowerLaser lowPowerLaser) || !lowPowerLaser.isTunnel()) - && !(aMetaTileEntity instanceof GT_MetaTileEntity_Pipe_Energy)) { - return; - } - - if (aMetaTileEntity instanceof GT_MetaTileEntity_Pipe_Energy tePipeEnergy) { - if (tePipeEnergy.connectionCount < 2) { - return; - } - tePipeEnergy.markUsed(); - return; - } - - if (aMetaTileEntity instanceof LowPowerLaser lowPowerLaser && lowPowerLaser.isTunnel() - && !lowPowerLaser.isConnectedCorrectly(front)) { - return; - } - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_Abstract_LowPowerLaserThingy.java b/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_Abstract_LowPowerLaserThingy.java deleted file mode 100644 index c1d751739f..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_Abstract_LowPowerLaserThingy.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.tectech.tileentites.tiered; - -import java.util.Optional; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; - -public abstract class TT_Abstract_LowPowerLaserThingy extends GT_MetaTileEntity_TieredMachineBlock - implements LowPowerLaser { - - protected long AMPERES; - - public TT_Abstract_LowPowerLaserThingy(int aID, String aName, String aNameRegional, int aTier, long aAmperes, - int aInvSlotCount, String aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); - this.AMPERES = aAmperes; - } - - public TT_Abstract_LowPowerLaserThingy(int aID, String aName, String aNameRegional, int aTier, long aAmperes, - int aInvSlotCount, String[] aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); - this.AMPERES = aAmperes; - } - - public TT_Abstract_LowPowerLaserThingy(String aName, int aTier, long aAmperes, int aInvSlotCount, - String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - this.AMPERES = aAmperes; - } - - public TT_Abstract_LowPowerLaserThingy(String aName, int aTier, long aAmperes, int aInvSlotCount, - String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - this.AMPERES = aAmperes; - } - - @Override - public long getAMPERES() { - return this.AMPERES; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return true; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return true; - } - - @Override - public boolean shouldJoinIc2Enet() { - return true; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public void saveNBTData(NBTTagCompound nbtTagCompound) { - Optional.ofNullable(nbtTagCompound) - .ifPresent(tag -> tag.setLong("AMPERES", this.AMPERES)); - } - - @Override - public void loadNBTData(NBTTagCompound nbtTagCompound) { - if (nbtTagCompound != null && nbtTagCompound.hasKey("AMPERES")) { - this.AMPERES = nbtTagCompound.getLong("AMPERES"); - } - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return false; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public long maxEUInput() { - return GT_Values.V[this.mTier]; - } - - @Override - public long maxEUOutput() { - return GT_Values.V[this.mTier]; - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return GT_Values.V[this.mTier + 1]; - } - - @Override - public long maxEUStore() { - return 512L + GT_Values.V[this.mTier + 1] * 24L * this.AMPERES; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserBox.java b/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserBox.java deleted file mode 100644 index 6720fbff78..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserBox.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.tectech.tileentites.tiered; - -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference; - -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.util.GT_Utility; - -public class TT_MetaTileEntity_LowPowerLaserBox extends TT_Abstract_LowPowerLaserThingy { - - public TT_MetaTileEntity_LowPowerLaserBox(int aID, String aName, String aNameRegional, int aTier, long aAmperes, - ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aAmperes, 0, new String[0], aTextures); - } - - public TT_MetaTileEntity_LowPowerLaserBox(String aName, int aTier, long aAmperes, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aAmperes, 0, aDescription, aTextures); - } - - @Override - public boolean isSender() { - return this.getBaseMetaTileEntity() - .isAllowedToWork(); - } - - @Override - public boolean isReceiver() { - return !this.getBaseMetaTileEntity() - .isAllowedToWork(); - } - - @Override - public boolean isTunnel() { - return false; - } - - @Override - public long maxAmperesOut() { - return !this.getBaseMetaTileEntity() - .isAllowedToWork() ? this.AMPERES : 0; - } - - @Override - public long maxAmperesIn() { - return this.getBaseMetaTileEntity() - .isAllowedToWork() ? this.AMPERES + this.AMPERES / 4 : 0; - } - - @Override - public boolean hasAlternativeModeText() { - return true; - } - - @Override - public String getAlternativeModeText() { - return this.isReceiver() ? "Set to receiving mode" : "Set to sending mode"; - } - - @Override - public boolean isEnetInput() { - return this.getBaseMetaTileEntity() - .isAllowedToWork(); - } - - @Override - public boolean isEnetOutput() { - return !this.getBaseMetaTileEntity() - .isAllowedToWork(); - } - - @Override - public boolean canConnect(ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new TT_MetaTileEntity_LowPowerLaserBox( - this.mName, - this.mTier, - this.AMPERES, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - aBaseMetaTileEntity.setActive(aBaseMetaTileEntity.isAllowedToWork()); - - byte Tick = (byte) (int) (aTick % 20L); - if (16 == Tick) { - if (aBaseMetaTileEntity.getStoredEU() > 0L) { - this.setEUVar(aBaseMetaTileEntity.getStoredEU() - this.AMPERES); - if (aBaseMetaTileEntity.getStoredEU() < 0L) { - this.setEUVar(0L); - } - } - if (this.getBaseMetaTileEntity() - .isAllowedToWork() && aBaseMetaTileEntity.getStoredEU() > this.getMinimumStoredEU()) { - this.moveAroundLowPower(aBaseMetaTileEntity); - } - } - } - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[12][17][]; - - for (byte i = -1; i < 16; ++i) { - rTextures[0][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[this.mTier] }; - rTextures[1][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[this.mTier] }; - rTextures[2][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[this.mTier] }; - rTextures[3][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_LASER_TT[this.mTier] }; - rTextures[4][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_LASER_TT[this.mTier] }; - rTextures[5][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_LASER_TT[this.mTier] }; - rTextures[6][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; - rTextures[7][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; - rTextures[8][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; - rTextures[9][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT[this.mTier] }; - rTextures[10][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT[this.mTier] }; - rTextures[11][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][i + 1], - com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT[this.mTier] }; - } - - return rTextures; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - return this.mTextures[Math.min(2, side.ordinal()) + (side == facing ? 3 : 0) + (aActive ? 0 : 6)][aColorIndex - + 1]; - } - - @Override - public String[] getDescription() { - return new String[] { "Like a transformer... but for LASERS!", - "Transfer rate: " + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.getTotalPower()) - + EnumChatFormatting.WHITE - + " EU/t", - BW_Tooltip_Reference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get() }; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserDynamo.java b/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserDynamo.java deleted file mode 100644 index ddc7cc2b13..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserDynamo.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.tectech.tileentites.tiered; - -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoTunnel; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -public class TT_MetaTileEntity_LowPowerLaserDynamo extends GT_MetaTileEntity_Hatch_DynamoTunnel - implements LowPowerLaser { - - public TT_MetaTileEntity_LowPowerLaserDynamo(int aID, String aName, String aNameRegional, int aTier, int aAmp) { - super(aID, aName, aNameRegional, aTier, aAmp); - } - - public TT_MetaTileEntity_LowPowerLaserDynamo(String aName, int aTier, int aAmp, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aAmp, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new TT_MetaTileEntity_LowPowerLaserDynamo( - this.mName, - this.mTier, - this.Amperes, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public boolean isSender() { - return true; - } - - @Override - public boolean isReceiver() { - return false; - } - - @Override - public boolean isTunnel() { - return false; - } - - @Override - public long getAMPERES() { - return this.Amperes; - } - - @Override - public String[] getDescription() { - return mDescriptionArray; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - byte Tick = (byte) (int) (aTick % 20L); - if (16 == Tick && aBaseMetaTileEntity.getStoredEU() > 0L) { - this.setEUVar(aBaseMetaTileEntity.getStoredEU() - this.Amperes); - if (aBaseMetaTileEntity.getStoredEU() < 0L) { - this.setEUVar(0L); - } - } - if (aBaseMetaTileEntity.getStoredEU() > this.getMinimumStoredEU()) { - this.moveAroundLowPower(aBaseMetaTileEntity); - } - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserHatch.java b/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserHatch.java deleted file mode 100644 index 82f15055c7..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_LowPowerLaserHatch.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.tectech.tileentites.tiered; - -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyTunnel; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -public class TT_MetaTileEntity_LowPowerLaserHatch extends GT_MetaTileEntity_Hatch_EnergyTunnel - implements LowPowerLaser { - - public TT_MetaTileEntity_LowPowerLaserHatch(int aID, String aName, String aNameRegional, int aTier, int aAmp) { - super(aID, aName, aNameRegional, aTier, aAmp); - } - - public TT_MetaTileEntity_LowPowerLaserHatch(String aName, int aTier, int aAmp, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aAmp, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - return mDescriptionArray; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new TT_MetaTileEntity_LowPowerLaserHatch( - this.mName, - this.mTier, - this.Amperes, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public boolean isSender() { - return false; - } - - @Override - public boolean isReceiver() { - return true; - } - - @Override - public boolean isTunnel() { - return false; - } - - @Override - public long getAMPERES() { - return this.Amperes; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_Pipe_Energy_LowPower.java b/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_Pipe_Energy_LowPower.java deleted file mode 100644 index a51e9998ae..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/tectech/tileentites/tiered/TT_MetaTileEntity_Pipe_Energy_LowPower.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.tectech.tileentites.tiered; - -import java.util.ArrayList; -import java.util.HashSet; - -import net.minecraft.block.Block; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.util.BW_Tooltip_Reference; - -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.common.GT_Client; -import ic2.core.Ic2Items; - -public class TT_MetaTileEntity_Pipe_Energy_LowPower extends GT_MetaPipeEntity_Cable implements LowPowerLaser { - - public TT_MetaTileEntity_Pipe_Energy_LowPower(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 0.25f, Materials.BorosilicateGlass, 0, 0, 0, false, false); - } - - public TT_MetaTileEntity_Pipe_Energy_LowPower(String aName, float aThickNess, Materials aMaterial, - long aCableLossPerMeter, long aAmperage, long aVoltage, boolean aInsulated, boolean aCanShock) { - super(aName, aThickNess, aMaterial, aCableLossPerMeter, aAmperage, aVoltage, aInsulated, aCanShock); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new TT_MetaTileEntity_Pipe_Energy_LowPower( - this.mName, - this.mThickNess, - this.mMaterial, - this.mCableLossPerMeter, - this.mAmperage, - this.mVoltage, - this.mInsulated, - this.mCanShock); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aTick % 20 == 13 && aBaseMetaTileEntity.isClientSide() && GT_Client.changeDetected == 4) { - aBaseMetaTileEntity.issueTextureUpdate(); - } - } - - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection siide, byte aConnections, - int aColorIndex, boolean aConnected, boolean aRedstone) { - return new ITexture[] { TextureFactory.of( - Block.getBlockFromItem(Ic2Items.glassFiberCableBlock.getItem()), - Ic2Items.glassFiberCableBlock.getItemDamage(), - siide) }; - } - - @Override - public String[] getDescription() { - return new String[] { "Primitive Laser Cable intended for Low Power Applications", "Does not auto-connect", - "Does not turn or bend", - EnumChatFormatting.WHITE + "Must be " - + EnumChatFormatting.YELLOW - + "c" - + EnumChatFormatting.RED - + "o" - + EnumChatFormatting.BLUE - + "l" - + EnumChatFormatting.DARK_PURPLE - + "o" - + EnumChatFormatting.GOLD - + "r" - + EnumChatFormatting.DARK_RED - + "e" - + EnumChatFormatting.DARK_GREEN - + "d" - + EnumChatFormatting.WHITE - + " in order to work", - BW_Tooltip_Reference.ADDED_BY_BARTIMAEUSNEK_VIA_BARTWORKS.get() }; - } - - @Override - public boolean isSender() { - return false; - } - - @Override - public boolean isReceiver() { - return false; - } - - @Override - public boolean isTunnel() { - return true; - } - - public boolean canConnect(ForgeDirection side) { - return true; - } - - @Override - public boolean isGivingInformation() { - return false; - } - - @Override - public boolean isConnectedCorrectly(ForgeDirection side) { - return this.isConnectedAtSide(side) && this.isConnectedAtSide(side.getOpposite()); - } - - @Override - public boolean shouldJoinIc2Enet() { - return false; - } - - @Override - public long injectEnergyUnits(ForgeDirection side, long aVoltage, long aAmperage) { - return 0L; - } - - @Override - @Deprecated - public long transferElectricity(ForgeDirection side, long aVoltage, long aAmperage, - ArrayList aAlreadyPassedTileEntityList) { - return 0L; - } - - @Override - public long transferElectricity(ForgeDirection side, long aVoltage, long aAmperage, - HashSet aAlreadyPassedSet) { - return 0L; - } - - @Override - public boolean letsIn(GT_CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsOut(GT_CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return true; - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/tgregworks/MaterialsInjector.java b/src/main/java/com/github/bartimaeusnek/crossmod/tgregworks/MaterialsInjector.java deleted file mode 100644 index 0eed09d3fd..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/tgregworks/MaterialsInjector.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.github.bartimaeusnek.crossmod.tgregworks; - -import static gregtech.api.enums.Mods.TinkersGregworks; - -import net.minecraftforge.common.config.Property; - -import com.github.bartimaeusnek.bartworks.MainMod; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; - -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import gregtech.GT_Version; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import vexatos.tgregworks.TGregworks; -import vexatos.tgregworks.item.ItemTGregPart; -import vexatos.tgregworks.reference.Config; - -@Mod( - modid = MaterialsInjector.MOD_ID, - name = MaterialsInjector.NAME, - version = MaterialsInjector.VERSION, - dependencies = """ - required-after:IC2;\ - required-after:gregtech;\ - required-after:bartworks;\ - before:TGregworks;\ - before:miscutils;""") -public class MaterialsInjector { - - public static final String NAME = "BartWorks Mod Additions - TGregworks Container"; - public static final String VERSION = GT_Version.VERSION; - public static final String MOD_ID = "bartworkscrossmodtgregworkscontainer"; - - @Mod.EventHandler - public void init(FMLInitializationEvent init) { - if (TinkersGregworks.isModLoaded()) { - MaterialsInjector.run(); - } - } - - public static void run() { - MainMod.LOGGER.info("Registering TGregworks - BartWorks tool parts."); - Werkstoff.werkstoffHashSet.stream() - .filter(x -> x.hasItemType(OrePrefixes.gem) || x.hasItemType(OrePrefixes.plate)) - .map(Werkstoff::getBridgeMaterial) - .filter(x -> x.mMetaItemSubID == -1) - .filter(x -> x.mDurability != 0) - .forEach(m -> { - setConfigProps(m); - registerParts(m); - }); - - TGregworks.registry.configProps.clear(); - TGregworks.registry.configIDs.clear(); - - ItemTGregPart.toolMaterialNames = TGregworks.registry.toolMaterialNames; - } - - private static void registerParts(Materials m) { - TGregworks.registry.toolMaterialNames.add(m.mDefaultLocalName); - int matID = TGregworks.registry.getMaterialID(m); - - TGregworks.registry.addToolMaterial(matID, m); - TGregworks.registry.addBowMaterial(matID, m); - TGregworks.registry.addArrowMaterial(matID, m); - - TGregworks.registry.matIDs.put(m, matID); - TGregworks.registry.materialIDMap.put(matID, m); - } - - private static void setConfigProps(Materials m) { - if (TGregworks.config.get(Config.Category.Enable, m.mName, true) - .getBoolean(true)) { - TGregworks.registry.toolMaterials.add(m); - Property configProp = TGregworks.config - .get(Config.onMaterial(Config.MaterialID), m.mName, 0, null, 0, 100000); - TGregworks.registry.configProps.put(m, configProp); - TGregworks.registry.configIDs.add(configProp.getInt()); - } - } -} diff --git a/src/main/java/com/github/bartimaeusnek/crossmod/thaumcraft/util/ThaumcraftHandler.java b/src/main/java/com/github/bartimaeusnek/crossmod/thaumcraft/util/ThaumcraftHandler.java deleted file mode 100644 index 124901effb..0000000000 --- a/src/main/java/com/github/bartimaeusnek/crossmod/thaumcraft/util/ThaumcraftHandler.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2018-2020 bartimaeusnek Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in the Software without restriction, - * including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following - * conditions: The above copyright notice and this permission notice shall be included in all copies or substantial - * portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, - * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. - * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -package com.github.bartimaeusnek.crossmod.thaumcraft.util; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.API.API_ConfigValues; -import com.github.bartimaeusnek.bartworks.util.Pair; -import com.github.bartimaeusnek.bartworks.util.log.DebugLog; - -import thaumcraft.api.ThaumcraftApi; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.common.lib.world.ThaumcraftWorldGenerator; - -public class ThaumcraftHandler { - - public static boolean isMagicalForestBiome(int biomeID) { - return biomeID == ThaumcraftWorldGenerator.biomeMagicalForest.biomeID; - } - - public static boolean isTaintBiome(int biomeID) { - return biomeID == ThaumcraftWorldGenerator.biomeTaint.biomeID; - } - - public static class AspectAdder { - - @SafeVarargs - public static void addAspectViaBW(ItemStack stack, Pair... aspectPair) { - if (stack == null || stack.getItem() == null || stack.getUnlocalizedName() == null) return; - AspectList aspectList = new AspectList(); - for (Pair a : aspectPair) { - Aspect aspect = (Aspect) a.getKey(); - int amount = a.getValue(); - if (API_ConfigValues.debugLog) DebugLog.log( - "Stack:" + stack.getDisplayName() - + " Damage:" - + stack.getItemDamage() - + " aspectPair: " - + aspect.getName() - + " / " - + amount); - aspectList.add(aspect, amount); - } - ThaumcraftApi.registerObjectTag(stack, aspectList); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/Reference.java b/src/main/java/com/github/technus/tectech/Reference.java deleted file mode 100644 index 35b0a2f407..0000000000 --- a/src/main/java/com/github/technus/tectech/Reference.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.github.technus.tectech; - -import gregtech.GT_Version; -import gregtech.api.enums.Mods; - -public final class Reference { - - public static final String MODID = Mods.Names.TECTECH; - public static final String NAME = "TecTech - Tec Technology!"; - public static final String VERSION = GT_Version.VERSION; - public static final String COLLECTIONNAME = "TecTech"; - public static final String CLIENTSIDE = "com.github.technus.tectech.proxy.ClientProxy"; - public static final String SERVERSIDE = "com.github.technus.tectech.proxy.CommonProxy"; - - private Reference() {} -} diff --git a/src/main/java/com/github/technus/tectech/TecTech.java b/src/main/java/com/github/technus/tectech/TecTech.java deleted file mode 100644 index c31f9a878d..0000000000 --- a/src/main/java/com/github/technus/tectech/TecTech.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.github.technus.tectech; - -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static gregtech.api.enums.Mods.COFHCore; - -import net.minecraftforge.common.MinecraftForge; - -import com.github.technus.tectech.loader.MainLoader; -import com.github.technus.tectech.loader.TecTechConfig; -import com.github.technus.tectech.loader.gui.CreativeTabTecTech; -import com.github.technus.tectech.loader.thing.MuTeLoader; -import com.github.technus.tectech.mechanics.enderStorage.EnderWorldSavedData; -import com.github.technus.tectech.proxy.CommonProxy; -import com.github.technus.tectech.recipe.EyeOfHarmonyRecipeStorage; -import com.github.technus.tectech.recipe.TecTechRecipeMaps; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.SidedProxy; -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 eu.usrv.yamcore.auxiliary.IngameErrorLog; -import eu.usrv.yamcore.auxiliary.LogHelper; -import gregtech.api.objects.XSTR; - -@Mod( - modid = Reference.MODID, - name = Reference.NAME, - version = Reference.VERSION, - dependencies = "required-after:Forge@[10.13.4.1614,);" + "required-after:YAMCore@[0.5.70,);" - + "required-after:structurelib;" - + "after:ComputerCraft;" - + "after:OpenComputers;" - + "required-after:gtneioreplugin;" - + "required-after:gregtech;" - + "after:dreamcraft;" - + "after:appliedenergistics2;" - + "after:CoFHCore;" - + "after:Thaumcraft;") -public class TecTech { - - @SidedProxy(clientSide = Reference.CLIENTSIDE, serverSide = Reference.SERVERSIDE) - public static CommonProxy proxy; - - @Mod.Instance(Reference.MODID) - public static TecTech instance; - - public static final XSTR RANDOM = XSTR.XSTR_INSTANCE; - public static final LogHelper LOGGER = new LogHelper(Reference.MODID); - public static CreativeTabTecTech creativeTabTecTech; - - public static TecTechConfig configTecTech; - - public static EnderWorldSavedData enderWorldSavedData; - - /** - * For Loader.isModLoaded checks during the runtime - */ - public static boolean hasCOFH = false; - - public static final byte tectechTexturePage1 = 8; - - @Mod.EventHandler - @SuppressWarnings("unused") - public void PreLoad(FMLPreInitializationEvent PreEvent) { - LOGGER.setDebugOutput(true); - - configTecTech = new TecTechConfig( - PreEvent.getModConfigurationDirectory(), - Reference.COLLECTIONNAME, - Reference.MODID); - - if (!configTecTech.LoadConfig()) { - LOGGER.error(Reference.MODID + " could not load its config file. Things are going to be weird!"); - } - - if (configTecTech.MOD_ADMIN_ERROR_LOGS) { - LOGGER.setDebugOutput(DEBUG_MODE); - LOGGER.debug("moduleAdminErrorLogs is enabled"); - IngameErrorLog moduleAdminErrorLogs = new IngameErrorLog(); - } - - enderWorldSavedData = new EnderWorldSavedData(); - FMLCommonHandler.instance() - .bus() - .register(enderWorldSavedData); - MinecraftForge.EVENT_BUS.register(enderWorldSavedData); - TecTechEventHandlers.init(); - - TecTechRecipeMaps.init(); - MainLoader.preLoad(); - new MuTeLoader().run(); - } - - @Mod.EventHandler - @SuppressWarnings("unused") - public void Load(FMLInitializationEvent event) { - hasCOFH = COFHCore.isModLoaded(); - - MainLoader.load(); - MainLoader.addAfterGregTechPostLoadRunner(); - } - - @Mod.EventHandler - @SuppressWarnings("unused") - public void PostLoad(FMLPostInitializationEvent PostEvent) { - MainLoader.postLoad(); - } - - @Mod.EventHandler - @SuppressWarnings("unused") - public void onLoadCompleted(FMLLoadCompleteEvent event) { - eyeOfHarmonyRecipeStorage = new EyeOfHarmonyRecipeStorage(); - MainLoader.onLoadCompleted(); - } - - public static EyeOfHarmonyRecipeStorage eyeOfHarmonyRecipeStorage = null; - -} diff --git a/src/main/java/com/github/technus/tectech/TecTechEventHandlers.java b/src/main/java/com/github/technus/tectech/TecTechEventHandlers.java deleted file mode 100644 index 3f7e602cce..0000000000 --- a/src/main/java/com/github/technus/tectech/TecTechEventHandlers.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.github.technus.tectech; - -import com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent.Phase; -import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent; - -public class TecTechEventHandlers { - - public static void init() { - FMLCommonHandler.instance() - .bus() - .register(new TecTechEventHandlers()); - } - - @SubscribeEvent - public void onServerTickEnd(ServerTickEvent event) { - if (event.phase == Phase.END) { - TeslaUtil.housekeep(); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/compatibility/openComputers/AvrArchitecture.java b/src/main/java/com/github/technus/tectech/compatibility/openComputers/AvrArchitecture.java deleted file mode 100644 index 74e7a26839..0000000000 --- a/src/main/java/com/github/technus/tectech/compatibility/openComputers/AvrArchitecture.java +++ /dev/null @@ -1,307 +0,0 @@ -package com.github.technus.tectech.compatibility.openComputers; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.zip.GZIPInputStream; -import java.util.zip.GZIPOutputStream; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -import org.apache.commons.compress.utils.IOUtils; - -import com.github.technus.avrClone.AvrCore; -import com.github.technus.avrClone.instructions.ExecutionEvent; -import com.github.technus.avrClone.instructions.InstructionRegistry; -import com.github.technus.avrClone.instructions.exceptions.DebugEvent; -import com.github.technus.avrClone.instructions.exceptions.DelayEvent; -import com.github.technus.avrClone.memory.EepromMemory; -import com.github.technus.avrClone.memory.RemovableMemory; -import com.github.technus.avrClone.memory.program.ProgramMemory; -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.Converter; - -import li.cil.oc.Settings; -import li.cil.oc.api.Driver; -import li.cil.oc.api.driver.Item; -import li.cil.oc.api.driver.item.Memory; -import li.cil.oc.api.machine.Architecture; -import li.cil.oc.api.machine.ExecutionResult; -import li.cil.oc.api.machine.Machine; -import li.cil.oc.api.machine.Signal; -import li.cil.oc.common.SaveHandler; - -@Architecture.Name("AVR 32Bit Clone") -@Architecture.NoMemoryRequirements -public class AvrArchitecture implements Architecture { - - private final Machine machine; - private AvrCore core; - private boolean debugRun; - private int delay; - private int[] tempData; - private int memSize; - - public AvrArchitecture(Machine machine) { - this.machine = machine; - } - - @Override - public boolean isInitialized() { - return core != null && core.checkValid(); - } - - @Override - public boolean recomputeMemory(Iterable components) { - computeMemory(components); - return true; - } - - private void computeMemory(Iterable components) { - int memory = 0; - for (ItemStack component : components) { - Item driver = Driver.driverFor(component); - if (driver instanceof Memory memoryDriver) { - memory += memoryDriver.amount(component) * 256; // in integers - } // else if (driver instanceof DriverEEPROM$) { - - // } - } - memory = Math.min( - Math.max(memory, 0), - Settings.get() - .maxTotalRam()); - if (memory != memSize) {} - } - - @Override - public boolean initialize() { - core = new AvrCore(); - - computeMemory( - this.machine.host() - .internalComponents()); - - if (isInitialized()) { - machine.beep("."); - return true; - } - return false; - } - - @Override - public void close() { - core = null; - tempData = null; - delay = 0; - } - - @Override - public void runSynchronized() { - core.cycle(); - } - - @Override - public ExecutionResult runThreaded(boolean isSynchronizedReturn) { - if (core.awoken) { - delay = 0; - for (int load = 0; load < 512;) { - load += core.getInstruction() - .getCost(core); - ExecutionEvent executionEvent = core.cpuCycleForce(); - if (executionEvent != null) { - if (executionEvent.throwable instanceof DelayEvent) { - delay = executionEvent.data[0]; - break; - } else if (executionEvent.throwable instanceof DebugEvent) { - if (debugRun) { - // aBaseMetaTileEntity.setActive(false); - break; - } - } - } - } - } else if (delay > 0) { - delay--; - if (delay == 0) { - core.awoken = true; - } - } - return null; - } - - @Override - public void onSignal() { - Signal signal = machine.popSignal(); - - core.interruptsHandle(); - } - - @Override - public void onConnect() { - // init network components, in case init was called from load logic (pre first tick?) - } - - @Override - public void load(NBTTagCompound avr) { - debugRun = avr.getBoolean("debugRun"); - delay = avr.getInteger("delay"); - core.active = avr.getBoolean("active"); - core.awoken = (avr.getBoolean("awoken")); - core.programCounter = avr.getInteger("programCounter"); - InstructionRegistry registry = InstructionRegistry.REGISTRIES.get(avr.getString("instructionRegistry")); - if (registry != null) { - byte[] instructions = SaveHandler.load( - avr, - this.machine.node() - .address() + "_instructionsMemory"); - byte[] param0 = SaveHandler.load( - avr, - this.machine.node() - .address() + "_param0Memory"); - byte[] param1 = SaveHandler.load( - avr, - this.machine.node() - .address() + "_param1Memory"); - if (instructions != null && param0 != null - && param1 != null - && instructions.length > 0 - && param0.length > 0 - && param1.length > 0) { - int[] instr = null, par0 = null, par1 = null; - try { - GZIPInputStream gzis = new GZIPInputStream(new ByteArrayInputStream(instructions)); - instr = Converter.readInts(IOUtils.toByteArray(gzis)); - IOUtils.closeQuietly(gzis); - } catch (IOException e) { - TecTech.LOGGER.error("Failed to decompress instructions memory from disk."); - e.printStackTrace(); - } - try { - GZIPInputStream gzis = new GZIPInputStream(new ByteArrayInputStream(param0)); - par0 = Converter.readInts(IOUtils.toByteArray(gzis)); - IOUtils.closeQuietly(gzis); - } catch (IOException e) { - TecTech.LOGGER.error("Failed to decompress param0 memory from disk."); - e.printStackTrace(); - } - try { - GZIPInputStream gzis = new GZIPInputStream(new ByteArrayInputStream(param1)); - par1 = Converter.readInts(IOUtils.toByteArray(gzis)); - IOUtils.closeQuietly(gzis); - } catch (IOException e) { - TecTech.LOGGER.error("Failed to decompress param1 memory from disk."); - e.printStackTrace(); - } - if (instr != null && par0 != null - && par1 != null - && instr.length == par0.length - && instr.length == par1.length) { - core.setProgramMemory(new ProgramMemory(registry, avr.getBoolean("immersive"), instr, par0, par1)); - } - } - } - if (avr.hasKey("eepromSize")) { - core.restoreEepromDefinition(EepromMemory.make(avr.getInteger("eepromSize"))); - } - byte[] data = SaveHandler.load( - avr, - this.machine.node() - .address() + "_dataMemory"); - if (data != null && data.length > 0) { - try { - GZIPInputStream gzis = new GZIPInputStream(new ByteArrayInputStream(data)); - tempData = Converter.readInts(IOUtils.toByteArray(gzis)); - IOUtils.closeQuietly(gzis); - } catch (IOException e) { - TecTech.LOGGER.error("Failed to decompress data memory from disk."); - e.printStackTrace(); - } - } - core.checkValid(); - } - - @Override - public void save(NBTTagCompound avr) { - avr.setBoolean("debugRun", debugRun); - avr.setInteger("delay", delay); - avr.setBoolean("active", core.active); - avr.setBoolean("awoken", core.awoken); - avr.setInteger("programCounter", core.programCounter); - ProgramMemory programMemory = core.getProgramMemory(); - if (programMemory != null) { - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - GZIPOutputStream gzos = new GZIPOutputStream(baos); - gzos.write(Converter.writeInts(programMemory.instructions)); - gzos.close(); - SaveHandler.scheduleSave( - machine.host(), - avr, - machine.node() - .address() + "_instructionsMemory", - baos.toByteArray()); - } catch (IOException e) { - TecTech.LOGGER.error("Failed to compress instructions memory to disk"); - e.printStackTrace(); - } - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - GZIPOutputStream gzos = new GZIPOutputStream(baos); - gzos.write(Converter.writeInts(programMemory.param0)); - gzos.close(); - SaveHandler.scheduleSave( - machine.host(), - avr, - machine.node() - .address() + "_param0Memory", - baos.toByteArray()); - } catch (IOException e) { - TecTech.LOGGER.error("Failed to compress param0 memory to disk"); - e.printStackTrace(); - } - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - GZIPOutputStream gzos = new GZIPOutputStream(baos); - gzos.write(Converter.writeInts(programMemory.param1)); - gzos.close(); - SaveHandler.scheduleSave( - machine.host(), - avr, - machine.node() - .address() + "_param1Memory", - baos.toByteArray()); - } catch (IOException e) { - TecTech.LOGGER.error("Failed to compress param1 memory to disk"); - e.printStackTrace(); - } - avr.setBoolean("immersive", programMemory.immersiveOperands); - avr.setString("instructionRegistry", programMemory.registry.toString()); - } - RemovableMemory eeprom = core.getEepromMemory(); - if (eeprom != null) { - avr.setInteger( - "eepromSize", - eeprom.getDefinition() - .getSize()); - } - if (core.dataMemory != null) { - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - GZIPOutputStream gzos = new GZIPOutputStream(baos); - gzos.write(Converter.writeInts(core.dataMemory)); - gzos.close(); - SaveHandler.scheduleSave( - machine.host(), - avr, - machine.node() - .address() + "_dataMemory", - baos.toByteArray()); - } catch (IOException e) { - TecTech.LOGGER.error("Failed to compress data memory to disk"); - e.printStackTrace(); - } - } - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/MainLoader.java b/src/main/java/com/github/technus/tectech/loader/MainLoader.java deleted file mode 100644 index 915b113fe9..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/MainLoader.java +++ /dev/null @@ -1,207 +0,0 @@ -package com.github.technus.tectech.loader; - -import static com.github.technus.tectech.TecTech.LOGGER; -import static com.github.technus.tectech.TecTech.configTecTech; -import static com.github.technus.tectech.TecTech.creativeTabTecTech; -import static com.github.technus.tectech.TecTech.proxy; -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.enums.Mods.TwilightForest; - -import java.util.HashMap; - -import net.minecraft.block.Block; -import net.minecraft.util.DamageSource; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.loader.gui.CreativeTabTecTech; -import com.github.technus.tectech.loader.recipe.BaseRecipeLoader; -import com.github.technus.tectech.loader.recipe.ResearchStationAssemblyLine; -import com.github.technus.tectech.loader.thing.CoverLoader; -import com.github.technus.tectech.loader.thing.MachineLoader; -import com.github.technus.tectech.loader.thing.ThingsLoader; -import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.Textures; - -import cpw.mods.fml.common.ProgressManager; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Recipe; - -@SuppressWarnings("deprecation") -public final class MainLoader { - - public static DamageSource microwaving; - - private MainLoader() {} - - public static void preLoad() { - creativeTabTecTech = new CreativeTabTecTech("TecTech"); - - // set expanded texture arrays for tiers - try { - Textures.run(); - } catch (Throwable t) { - LOGGER.error("Loading textures...", t); - } - } - - public static void load() { - ProgressManager.ProgressBar progressBarLoad = ProgressManager.push("TecTech Loader", 6); - - progressBarLoad.step("Regular Things"); - new ThingsLoader().run(); - LOGGER.info("Block/Item Init Done"); - - progressBarLoad.step("Machine Things"); - new MachineLoader().run(); - LOGGER.info("Machine Init Done"); - - progressBarLoad.step("Cover Things"); - new CoverLoader().run(); - LOGGER.info("Cover Init Done"); - - progressBarLoad.step("Add damage types"); - microwaving = new DamageSource("microwaving").setDamageBypassesArmor(); - LOGGER.info("Damage types addition Done"); - - progressBarLoad.step("Register Packet Dispatcher"); - new NetworkDispatcher(); - LOGGER.info("Packet Dispatcher registered"); - - progressBarLoad.step("Register GUI Handler"); - proxy.registerRenderInfo(); - LOGGER.info("GUI Handler registered"); - - ProgressManager.pop(progressBarLoad); - } - - public static void postLoad() { - ProgressManager.ProgressBar progressBarPostLoad = ProgressManager.push("TecTech Post Loader", 4); - - progressBarPostLoad.step("Dreamcraft Compatibility"); - if (NewHorizonsCoreMod.isModLoaded()) { - try { - Class clazz = Class.forName("com.dreammaster.gthandler.casings.GT_Container_CasingsNH"); - TT_Container_Casings.sBlockCasingsNH = (Block) clazz.getField("sBlockCasingsNH") - .get(null); - - if (TT_Container_Casings.sBlockCasingsNH == null) { - throw new NullPointerException("sBlockCasingsNH Is not set at this time"); - } - } catch (Exception e) { - throw new Error("Unable to get NH casings", e); - } - } - - progressBarPostLoad.step("Recipes"); - new BaseRecipeLoader().run(); - TecTech.LOGGER.info("Recipe Init Done"); - - if (!configTecTech.DISABLE_BLOCK_HARDNESS_NERF) { - progressBarPostLoad.step("Nerf blocks blast resistance"); - adjustTwilightBlockResistance(); - TecTech.LOGGER.info("Blocks nerf done"); - } else { - progressBarPostLoad.step("Do not nerf blocks blast resistance"); - TecTech.LOGGER.info("Blocks were not nerfed"); - } - - // ProgressManager.pop(progressBarPostLoad); - } - - public static void addAfterGregTechPostLoadRunner() { - GregTech_API.sAfterGTPostload.add(() -> { - if (TecTech.configTecTech.NERF_FUSION) { - FixBrokenFusionRecipes(); - } - }); - } - - private static void FixBrokenFusionRecipes() { - HashMap binds = new HashMap<>(); - for (Materials material : Materials.values()) { - FluidStack p = material.getPlasma(1); - if (p != null) { - if (DEBUG_MODE) { - LOGGER.info("Found Plasma of " + material.mName); - } - if (material.mElement != null && (material.mElement.mProtons >= Materials.Iron.mElement.mProtons - || -material.mElement.mProtons >= Materials.Iron.mElement.mProtons - || material.mElement.mNeutrons >= Materials.Iron.mElement.mNeutrons - || -material.mElement.mNeutrons >= Materials.Iron.mElement.mNeutrons)) { - if (DEBUG_MODE) { - LOGGER.info("Attempting to bind " + material.mName); - } - if (material.getMolten(1) != null) { - binds.put( - p.getFluid(), - material.getMolten(1) - .getFluid()); - } else if (material.getGas(1) != null) { - binds.put( - p.getFluid(), - material.getGas(1) - .getFluid()); - } else if (material.getFluid(1) != null) { - binds.put( - p.getFluid(), - material.getFluid(1) - .getFluid()); - } else { - binds.put( - p.getFluid(), - Materials.Iron.getMolten(1) - .getFluid()); - } - } - } - } - for (GT_Recipe r : RecipeMaps.fusionRecipes.getAllRecipes()) { - Fluid fluid = binds.get(r.mFluidOutputs[0].getFluid()); - if (fluid != null) { - if (DEBUG_MODE) { - LOGGER.info("Nerfing Recipe " + r.mFluidOutputs[0].getUnlocalizedName()); - } - r.mFluidOutputs[0] = new FluidStack(fluid, r.mFluidOutputs[0].amount); - } - fluid = binds.get(r.mFluidInputs[0].getFluid()); - if (fluid != null) { - if (DEBUG_MODE) { - LOGGER.info("Fixing plasma use in Recipe " + r.mFluidInputs[0].getUnlocalizedName()); - } - r.mFluidInputs[0] = new FluidStack(fluid, r.mFluidInputs[0].amount); - } - fluid = binds.get(r.mFluidInputs[1].getFluid()); - if (fluid != null) { - if (DEBUG_MODE) { - LOGGER.info("Fixing plasma use in Recipe " + r.mFluidInputs[1].getUnlocalizedName()); - } - r.mFluidInputs[1] = new FluidStack(fluid, r.mFluidInputs[1].amount); - } - } - } - - private static void safeSetResistance(Block block, float resistance) { - if (block != null) { - block.setResistance(resistance); - } - } - - private static void adjustTwilightBlockResistance() { - if (TwilightForest.isModLoaded()) { - safeSetResistance(GameRegistry.findBlock("TwilightForest", "tile.TFShield"), 30); - safeSetResistance(GameRegistry.findBlock("TwilightForest", "tile.TFThorns"), 10); - safeSetResistance(GameRegistry.findBlock("TwilightForest", "tile.TFTowerTranslucent"), 30); - safeSetResistance(GameRegistry.findBlock("TwilightForest", "tile.TFDeadrock"), 5); - } - } - - public static void onLoadCompleted() { - new ResearchStationAssemblyLine().runLateRecipes(); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java b/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java deleted file mode 100644 index c195364d91..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/NetworkDispatcher.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.github.technus.tectech.loader; - -import static com.github.technus.tectech.Reference.MODID; - -import com.github.technus.tectech.mechanics.pipe.PipeActivityMessage; -import com.github.technus.tectech.mechanics.spark.RendererMessage; - -public class NetworkDispatcher extends eu.usrv.yamcore.network.PacketDispatcher { - - public static NetworkDispatcher INSTANCE; - - public NetworkDispatcher() { - super(MODID); - INSTANCE = this; - registerPackets(); - } - - @Override - public void registerPackets() { - registerMessage(PipeActivityMessage.ServerHandler.class, PipeActivityMessage.PipeActivityQuery.class); - registerMessage(PipeActivityMessage.ClientHandler.class, PipeActivityMessage.PipeActivityData.class); - - registerMessage(RendererMessage.ClientHandler.class, RendererMessage.RendererData.class); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java b/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java deleted file mode 100644 index 9db2692037..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/TecTechConfig.java +++ /dev/null @@ -1,271 +0,0 @@ -package com.github.technus.tectech.loader; - -import java.io.File; - -import net.minecraft.launchwrapper.Launch; - -import eu.usrv.yamcore.config.ConfigManager; - -public class TecTechConfig extends ConfigManager { - - public TecTechConfig(File pConfigBaseDirectory, String pModCollectionDirectory, String pModID) { - super(pConfigBaseDirectory, pModCollectionDirectory, pModID); - } - - // final static to allow compiler to remove the debug code when this is false - public static boolean DEBUG_MODE = false; - public static boolean POWERLESS_MODE = false; - /** - * Not complete; enabled by default only in dev env - */ - public boolean ENABLE_GOD_FORGE; - - public boolean BOOM_ENABLE; - public boolean DISABLE_BLOCK_HARDNESS_NERF; - public boolean EASY_SCAN; - public boolean NERF_FUSION; - public boolean ENABLE_TURRET_EXPLOSIONS; - public float TURRET_DAMAGE_FACTOR; - public float TURRET_EXPLOSION_FACTOR; - - public boolean MOD_ADMIN_ERROR_LOGS; - - public boolean TESLA_MULTI_GAS_OUTPUT; - public float TESLA_MULTI_LOSS_FACTOR_OVERDRIVE; - public int TESLA_MULTI_LOSS_PER_BLOCK_T0; - public int TESLA_MULTI_LOSS_PER_BLOCK_T1; - public int TESLA_MULTI_LOSS_PER_BLOCK_T2; - public int TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM; - public int TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN; - public int TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON; - public int TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1; - public int TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2; - public int TESLA_MULTI_RANGE_COVER; - public int TESLA_MULTI_RANGE_TOWER; - public int TESLA_MULTI_RANGE_TRANSCEIVER; - public float TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE; - public int TESLA_SINGLE_LOSS_PER_BLOCK; - public int TESLA_SINGLE_RANGE; - public boolean TESLA_VISUAL_EFFECT; - - /** - * This loading phases do not correspond to mod loading phases! - */ - @Override - protected void PreInit() { - - BOOM_ENABLE = true; - DISABLE_BLOCK_HARDNESS_NERF = false; - EASY_SCAN = false; - NERF_FUSION = false; - ENABLE_TURRET_EXPLOSIONS = true; - TURRET_DAMAGE_FACTOR = 10; - TURRET_EXPLOSION_FACTOR = 1; - - MOD_ADMIN_ERROR_LOGS = false; - - TESLA_MULTI_GAS_OUTPUT = false; - TESLA_MULTI_LOSS_FACTOR_OVERDRIVE = 0.25F; - TESLA_MULTI_LOSS_PER_BLOCK_T0 = 1; - TESLA_MULTI_LOSS_PER_BLOCK_T1 = 1; - TESLA_MULTI_LOSS_PER_BLOCK_T2 = 1; - TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM = 100; - TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN = 50; - TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON = 50; - TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1 = 2; - TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2 = 4; - TESLA_MULTI_RANGE_COVER = 16; - TESLA_MULTI_RANGE_TOWER = 32; - TESLA_MULTI_RANGE_TRANSCEIVER = 16; - TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE = 0.25F; - TESLA_SINGLE_LOSS_PER_BLOCK = 1; - TESLA_SINGLE_RANGE = 20; - TESLA_VISUAL_EFFECT = true; - - ENABLE_GOD_FORGE = (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); - } - - /** - * This loading phases do not correspond to mod loading phases! - */ - @Override - protected void Init() { - DEBUG_MODE = _mainConfig - .getBoolean("DebugMode", "debug", DEBUG_MODE, "Enables logging and other purely debug features"); - POWERLESS_MODE = _mainConfig - .getBoolean("PowerlessMode", "debug", POWERLESS_MODE, "Enables 0EU/t multi block machinery"); - ENABLE_GOD_FORGE = _mainConfig.getBoolean( - "EnableGodForge", - "debug", - ENABLE_GOD_FORGE, - "Enables the in progress God Forge; enabled automatically in dev env"); - - BOOM_ENABLE = _mainConfig.getBoolean( - "BoomEnable", - "features", - BOOM_ENABLE, - "Set to false to disable explosions on everything bad that you can do"); - DISABLE_BLOCK_HARDNESS_NERF = _mainConfig.getBoolean( - "DisableBlockHardnessNerf", - "features", - DISABLE_BLOCK_HARDNESS_NERF, - "Set to true to disable the block hardness nerf"); - EASY_SCAN = _mainConfig.getBoolean( - "EasyScan", - "features", - EASY_SCAN, - "Enables tricorder to scan EM i/o hatches directly, too CHEEKY"); - NERF_FUSION = _mainConfig.getBoolean( - "NerfFusion", - "features", - NERF_FUSION, - "Set to true to enable removal of plasmas heavier than Fe and other weird ones"); - ENABLE_TURRET_EXPLOSIONS = _mainConfig.getBoolean( - "TurretBoomEnable", - "features", - ENABLE_TURRET_EXPLOSIONS, - "Set to false to disable explosions caused by EM turrets"); - TURRET_DAMAGE_FACTOR = _mainConfig.getFloat( - "TurretDamageFactor", - "features", - TURRET_DAMAGE_FACTOR, - 0, - Short.MAX_VALUE, - "Damage is multiplied by this number"); - TURRET_EXPLOSION_FACTOR = _mainConfig.getFloat( - "TurretExplosionFactor", - "features", - TURRET_EXPLOSION_FACTOR, - 0, - Short.MAX_VALUE, - "Explosion strength is multiplied by this number"); - - MOD_ADMIN_ERROR_LOGS = _mainConfig.getBoolean( - "AdminErrorLog", - "modules", - MOD_ADMIN_ERROR_LOGS, - "If set to true, every op/admin will receive all errors occurred during the startup phase as in game message on join"); - - TESLA_MULTI_GAS_OUTPUT = _mainConfig.getBoolean( - "TeslaMultiGasOutput", - "tesla_tweaks", - TESLA_MULTI_GAS_OUTPUT, - "Set to true to enable outputting plasmas as gasses from the tesla tower with a 1:1 ratio"); - TESLA_MULTI_LOSS_FACTOR_OVERDRIVE = _mainConfig.getFloat( - "TeslaMultiLossFactorOverdrive", - "tesla_tweaks", - TESLA_MULTI_LOSS_FACTOR_OVERDRIVE, - 0, - 1, - "Additional Tesla Tower power loss per amp as a factor of the tier voltage"); - TESLA_MULTI_LOSS_PER_BLOCK_T0 = _mainConfig.getInt( - "TeslaMultiLossPerBlockT0", - "tesla_tweaks", - TESLA_MULTI_LOSS_PER_BLOCK_T0, - 0, - Integer.MAX_VALUE, - "Tesla Tower power transmission loss per block per amp using no plasmas"); - TESLA_MULTI_LOSS_PER_BLOCK_T1 = _mainConfig.getInt( - "TeslaMultiLossPerBlockT1", - "tesla_tweaks", - TESLA_MULTI_LOSS_PER_BLOCK_T1, - 0, - Integer.MAX_VALUE, - "Tesla Tower power transmission loss per block per amp using helium or nitrogen plasma"); - TESLA_MULTI_LOSS_PER_BLOCK_T2 = _mainConfig.getInt( - "TeslaMultiLossPerBlockT2", - "tesla_tweaks", - TESLA_MULTI_LOSS_PER_BLOCK_T2, - 0, - Integer.MAX_VALUE, - "Tesla Tower power transmission loss per block per amp using radon plasma"); - TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM = _mainConfig.getInt( - "TeslaMultiPlasmaPerSecondT1Helium", - "tesla_tweaks", - TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM, - 0, - Integer.MAX_VALUE, - "Tesla Tower helium plasma consumed each second the tesla tower is active"); - TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN = _mainConfig.getInt( - "TeslaMultiPlasmaPerSecondT1Nitrogen", - "tesla_tweaks", - TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN, - 0, - Integer.MAX_VALUE, - "Tesla Tower nitrogen plasma consumed each second the tesla tower is active"); - TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON = _mainConfig.getInt( - "TeslaMultiPlasmaPerSecondT2Radon", - "tesla_tweaks", - TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON, - 0, - Integer.MAX_VALUE, - "Tesla Tower radon plasma consumed each second the tesla tower is active"); - TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1 = _mainConfig.getInt( - "TeslaMultiRangeCoefficientPlasmaT1", - "tesla_tweaks", - TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1, - 0, - Integer.MAX_VALUE, - "Tesla Tower T1 Plasmas Range Multiplier"); - TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2 = _mainConfig.getInt( - "TeslaMultiRangeCoefficientPlasmaT2", - "tesla_tweaks", - TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2, - 0, - Integer.MAX_VALUE, - "Tesla Tower T2 Plasmas Range Multiplier"); - TESLA_MULTI_RANGE_COVER = _mainConfig.getInt( - "TeslaMultiRangeCover", - "tesla_tweaks", - TESLA_MULTI_RANGE_COVER, - 0, - Integer.MAX_VALUE, - "Tesla Tower to Tesla Coil Rich Edition Cover max range"); - TESLA_MULTI_RANGE_TOWER = _mainConfig.getInt( - "TeslaMultiRangeTower", - "tesla_tweaks", - TESLA_MULTI_RANGE_TOWER, - 0, - Integer.MAX_VALUE, - "Tesla Tower to Tower max range"); - TESLA_MULTI_RANGE_TRANSCEIVER = _mainConfig.getInt( - "TeslaMultiRangeTransceiver", - "tesla_tweaks", - TESLA_MULTI_RANGE_TRANSCEIVER, - 0, - Integer.MAX_VALUE, - "Tesla Tower to Transceiver max range"); - TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE = _mainConfig.getFloat( - "TeslaSingleLossFactorOverdrive", - "tesla_tweaks", - TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE, - 0, - 1, - "Additional Tesla Transceiver power loss per amp as a factor of the tier voltage"); - TESLA_SINGLE_LOSS_PER_BLOCK = _mainConfig.getInt( - "TeslaSingleLossPerBlock", - "tesla_tweaks", - TESLA_SINGLE_LOSS_PER_BLOCK, - 0, - Integer.MAX_VALUE, - "Tesla Transceiver power transmission loss per block per amp"); - TESLA_SINGLE_RANGE = _mainConfig.getInt( - "TeslaSingleRange", - "tesla_tweaks", - TESLA_SINGLE_RANGE, - 0, - Integer.MAX_VALUE, - "Tesla Transceiver to max range"); - TESLA_VISUAL_EFFECT = _mainConfig.getBoolean( - "EnableTeslaVisualEffect", - "tesla_tweaks", - TESLA_VISUAL_EFFECT, - "Set true to enable the cool visual effect when tesla tower running."); - } - - /** - * This loading phases do not correspond to mod loading phases! - */ - @Override - protected void PostInit() {} -} diff --git a/src/main/java/com/github/technus/tectech/loader/gui/CreativeTabTecTech.java b/src/main/java/com/github/technus/tectech/loader/gui/CreativeTabTecTech.java deleted file mode 100644 index 56a125b8f4..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/gui/CreativeTabTecTech.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.github.technus.tectech.loader.gui; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import com.github.technus.tectech.thing.CustomItemList; -import com.github.technus.tectech.thing.casing.TT_Container_Casings; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; - -public class CreativeTabTecTech extends CreativeTabs { - - public CreativeTabTecTech(String name) { - super(name); - } - - @SideOnly(Side.CLIENT) - @Override - public Item getTabIconItem() { - return Item.getItemFromBlock(TT_Container_Casings.sBlockCasingsTT); // High power casing - } - - @Override - public void displayAllReleventItems(List stuffToShow) { - for (CustomItemList item : CustomItemList.values()) { - if (item.hasBeenSet() && item.getBlock() == GregTech_API.sBlockMachines) { - stuffToShow.add(item.get(1)); - } - } - super.displayAllReleventItems(stuffToShow); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/Assembler.java b/src/main/java/com/github/technus/tectech/loader/recipe/Assembler.java deleted file mode 100644 index 0f7eb196eb..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/recipe/Assembler.java +++ /dev/null @@ -1,3022 +0,0 @@ -package com.github.technus.tectech.loader.recipe; - -import static com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry.bw_realglas; -import static com.github.technus.tectech.loader.recipe.BaseRecipeLoader.getItemContainer; -import static com.github.technus.tectech.loader.recipe.BaseRecipeLoader.getOrDefault; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.technus.tectech.thing.CustomItemList; -import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.gtnewhorizon.structurelib.StructureLibAPI; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class Assembler implements Runnable { - - @Override - public void run() { - - cleanroomRecipes(); - - for (int i = 0; i <= 15; i++) { - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(i + 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cobalt, 1)) - .itemOutputs(new ItemStack(StructureLibAPI.getBlockHint(), 1, i)) - .fluidInputs(Materials.Aluminium.getMolten(864)) - .duration(1 * SECONDS + 12 * TICKS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - } - - // Quantum Glass - GT_Values.RA.stdBuilder() - .itemInputs(CustomItemList.eM_Containment.get(1), GT_ModHandler.getIC2Item("reinforcedGlass", 1L)) - .itemOutputs(new ItemStack(QuantumGlassBlock.INSTANCE, 1)) - .fluidInputs(getOrDefault("Trinium", Materials.Osmium).getMolten(576)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - - // recipe for assline data hatches - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Hatch_DataAccess_EV.get(1), CustomItemList.dataIn_Hatch.get(1)) - .itemOutputs(CustomItemList.dataInAss_Hatch.get(1)) - .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS) - .eut(12000) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Hatch_DataAccess_EV.get(1), CustomItemList.dataOut_Hatch.get(1)) - .itemOutputs(CustomItemList.dataOutAss_Hatch.get(1)) - .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS) - .eut(12000) - .addTo(assemblerRecipes); - - // High Power Casing - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Iridium, 6), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 1), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Cobalt, 16), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 16), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.NiobiumTitanium, 2)) - .itemOutputs(CustomItemList.eM_Power.get(1)) - .fluidInputs(Materials.TungstenSteel.getMolten(576)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Computer Casing - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.eM_Power.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 8), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 1), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.NiobiumTitanium, 2)) - .itemOutputs(CustomItemList.eM_Computer_Casing.get(1)) - .fluidInputs(Materials.Aluminium.getMolten(1296)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Computer Vent Casing - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1), - ItemList.Electric_Motor_IV.get(2), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 2), - GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.StainlessSteel, 16), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Copper, 16), - GT_OreDictUnificator - .get(OrePrefixes.wireGt01, getOrDefault("SuperconductorIV", Materials.SuperconductorUHV), 1)) - .itemOutputs(CustomItemList.eM_Computer_Vent.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(1296)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Molecular Casing - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.eM_Power.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmiridium, 6), - GT_OreDictUnificator.get(OrePrefixes.foil, getOrDefault("Trinium", Materials.Osmium), 12), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.TungstenSteel, 24), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.TungstenSteel, 24), - ItemList.Field_Generator_IV.get(1)) - .itemOutputs(CustomItemList.eM_Containment.get(1)) - .fluidInputs(Materials.Osmium.getMolten(1296)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - // Tesla Base - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 6), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NickelZincFerrite, 1)) - .itemOutputs(CustomItemList.tM_TeslaBase.get(1)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - // Tesla Toroid - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 6), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1)) - .itemOutputs(CustomItemList.tM_TeslaToroid.get(1)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - // Tesla Secondary Windings - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.teslaComponent.getWithDamage(8, 0), - getItemContainer("MicaInsulatorFoil").get(12)) - .itemOutputs(CustomItemList.tM_TeslaSecondary.get(1)) - .fluidInputs(Materials.Silver.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - // Tesla Primary Coils T0 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.RedstoneAlloy, 8), - getItemContainer("MicaInsulatorFoil").get(8)) - .itemOutputs(CustomItemList.tM_TeslaPrimary_0.get(1)) - .fluidInputs(Materials.RedAlloy.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - // Tesla Primary Coils T1 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorMV, 8), - getItemContainer("MicaInsulatorFoil").get(12)) - .itemOutputs(CustomItemList.tM_TeslaPrimary_1.get(1)) - .fluidInputs(Materials.Magnesium.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - // Tesla Primary Coils T2 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorHV, 8), - getItemContainer("MicaInsulatorFoil").get(16)) - .itemOutputs(CustomItemList.tM_TeslaPrimary_2.get(1)) - .fluidInputs(Materials.Barium.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Tesla Primary Coils T3 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorEV, 8), - getItemContainer("MicaInsulatorFoil").get(20)) - .itemOutputs(CustomItemList.tM_TeslaPrimary_3.get(1)) - .fluidInputs(Materials.Platinum.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Tesla Primary Coils T4 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorIV, 8), - getItemContainer("MicaInsulatorFoil").get(24)) - .itemOutputs(CustomItemList.tM_TeslaPrimary_4.get(1)) - .fluidInputs(Materials.Vanadium.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Tesla Primary Coils T5 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorLuV, 8), - getItemContainer("MicaInsulatorFoil").get(28)) - .itemOutputs(CustomItemList.tM_TeslaPrimary_5.get(1)) - .fluidInputs(Materials.Indium.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Tesla Primary Coils T6 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorZPM, 8), - getItemContainer("MicaInsulatorFoil").get(32)) - .itemOutputs(CustomItemList.tM_TeslaPrimary_6.get(1)) - .fluidInputs(Materials.Naquadah.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - - // Dynamo Hatches - { - // Dynamo Hatches 4A - { - // Dynamo EV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Dynamo_EV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Aluminium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 2)) - .itemOutputs(CustomItemList.eM_dynamoMulti4_EV.get(1)) - .fluidInputs(Materials.Silver.getMolten(144)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Dynamo IV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Dynamo_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2)) - .itemOutputs(CustomItemList.eM_dynamoMulti4_IV.get(1)) - .fluidInputs(Materials.Silver.getMolten(144)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Dynamo LuV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Dynamo_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.VanadiumGallium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2)) - .itemOutputs(CustomItemList.eM_dynamoMulti4_LuV.get(1)) - .fluidInputs(Materials.Silver.getMolten(288)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Dynamo ZPM 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Dynamo_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2)) - .itemOutputs(CustomItemList.eM_dynamoMulti4_ZPM.get(1)) - .fluidInputs(Materials.Silver.getMolten(576)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Dynamo UV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Dynamo_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2)) - .itemOutputs(CustomItemList.eM_dynamoMulti4_UV.get(1)) - .fluidInputs(Materials.Silver.getMolten(1152)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Dynamo UHV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Dynamo_UHV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2)) - .itemOutputs(CustomItemList.eM_dynamoMulti4_UHV.get(1)) - .fluidInputs(Materials.Silver.getMolten(2304)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - // Dynamo UEV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Dynamo_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2)) - .itemOutputs(CustomItemList.eM_dynamoMulti4_UEV.get(1)) - .fluidInputs(Materials.Silver.getMolten(4608)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - // Dynamo UIV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Dynamo_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2)) - .itemOutputs(CustomItemList.eM_dynamoMulti4_UIV.get(1)) - .fluidInputs(Materials.Silver.getMolten(9216)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - // Dynamo UMV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Dynamo_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 2)) - .itemOutputs(CustomItemList.eM_dynamoMulti4_UMV.get(1)) - .fluidInputs(Materials.Silver.getMolten(9216)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - // Dynamo UXV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Dynamo_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1), - GT_OreDictUnificator.get("plateShirabon", 1L)) - .itemOutputs(CustomItemList.eM_dynamoMulti4_UXV.get(1)) - .fluidInputs(Materials.Silver.getMolten(9216)) - .duration(5 * SECONDS) - .eut((int) TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - - } - - // Dynamo Hatches 16A - { - // Dynamo EV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_IV_EV.get(1), - CustomItemList.eM_dynamoMulti4_EV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Aluminium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 4)) - .itemOutputs(CustomItemList.eM_dynamoMulti16_EV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Dynamo IV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_LuV_IV.get(1), - CustomItemList.eM_dynamoMulti4_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Tungsten, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 4)) - .itemOutputs(CustomItemList.eM_dynamoMulti16_IV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Dynamo LuV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_ZPM_LuV.get(1), - CustomItemList.eM_dynamoMulti4_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.VanadiumGallium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 4)) - .itemOutputs(CustomItemList.eM_dynamoMulti16_LuV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(288)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Dynamo ZPM 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UV_ZPM.get(1), - CustomItemList.eM_dynamoMulti4_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Naquadah, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4)) - .itemOutputs(CustomItemList.eM_dynamoMulti16_ZPM.get(1)) - .fluidInputs(Materials.Electrum.getMolten(576)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Dynamo UV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_MAX_UV.get(1), - CustomItemList.eM_dynamoMulti4_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NaquadahAlloy, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 4)) - .itemOutputs(CustomItemList.eM_dynamoMulti16_UV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(1152)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Dynamo UHV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UEV_UHV.get(1), - CustomItemList.eM_dynamoMulti4_UHV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUHV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 4)) - .itemOutputs(CustomItemList.eM_dynamoMulti16_UHV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(2304)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - // Dynamo UEV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UIV_UEV.get(1), - CustomItemList.eM_dynamoMulti4_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 4)) - .itemOutputs(CustomItemList.eM_dynamoMulti16_UEV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(4608)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - // Dynamo UIV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UMV_UIV.get(1), - CustomItemList.eM_dynamoMulti4_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 4)) - .itemOutputs(CustomItemList.eM_dynamoMulti16_UIV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(9216)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - // Dynamo UMV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UXV_UMV.get(1), - CustomItemList.eM_dynamoMulti4_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 4)) - .itemOutputs(CustomItemList.eM_dynamoMulti16_UMV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(9216)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - // Dynamo UXV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_MAX_UXV.get(1), - CustomItemList.eM_dynamoMulti4_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2), - GT_OreDictUnificator.get("plateShirabon", 2L)) - .itemOutputs(CustomItemList.eM_dynamoMulti16_UXV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(9216)) - .duration(10 * SECONDS) - .eut((int) TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - - } - - // Dynamo Hatches 64A - { - // Dynamo EV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_IV_EV.get(1), - CustomItemList.eM_dynamoMulti16_EV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Aluminium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6)) - .itemOutputs(CustomItemList.eM_dynamoMulti64_EV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Dynamo IV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_LuV_IV.get(1), - CustomItemList.eM_dynamoMulti16_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Tungsten, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6)) - .itemOutputs(CustomItemList.eM_dynamoMulti64_IV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Dynamo LuV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_ZPM_LuV.get(1), - CustomItemList.eM_dynamoMulti16_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.VanadiumGallium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 6)) - .itemOutputs(CustomItemList.eM_dynamoMulti64_LuV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Dynamo ZPM 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UV_ZPM.get(1), - CustomItemList.eM_dynamoMulti16_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Naquadah, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 6)) - .itemOutputs(CustomItemList.eM_dynamoMulti64_ZPM.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Dynamo UV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UHV_UV.get(1), - CustomItemList.eM_dynamoMulti16_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NaquadahAlloy, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 6)) - .itemOutputs(CustomItemList.eM_dynamoMulti64_UV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(1152)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Dynamo UHV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UEV_UHV.get(1), - CustomItemList.eM_dynamoMulti16_UHV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.SuperconductorUHV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 6)) - .itemOutputs(CustomItemList.eM_dynamoMulti64_UHV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(2304)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - // Dynamo UEV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UIV_UEV.get(1), - CustomItemList.eM_dynamoMulti16_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Draconium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 6)) - .itemOutputs(CustomItemList.eM_dynamoMulti64_UEV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(4608)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - // Dynamo UIV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UMV_UIV.get(1), - CustomItemList.eM_dynamoMulti16_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 6)) - .itemOutputs(CustomItemList.eM_dynamoMulti64_UIV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(9216)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - // Dynamo UMV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UXV_UMV.get(1), - CustomItemList.eM_dynamoMulti16_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Quantium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 6)) - .itemOutputs(CustomItemList.eM_dynamoMulti64_UMV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(9216)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - // Dynamo UXV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_MAX_UXV.get(1), - CustomItemList.eM_dynamoMulti16_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.BlackPlutonium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 3), - GT_OreDictUnificator.get("plateShirabon", 3L)) - .itemOutputs(CustomItemList.eM_dynamoMulti64_UXV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(9216)) - .duration(20 * SECONDS) - .eut((int) TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - - } - } - - // Energy Hatches - { - // Energy Hatches 4A - { - // Energy Hatch EV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Energy_EV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Aluminium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 2)) - .itemOutputs(CustomItemList.eM_energyMulti4_EV.get(1)) - .fluidInputs(Materials.Silver.getMolten(144)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Energy Hatch IV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Energy_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2)) - .itemOutputs(CustomItemList.eM_energyMulti4_IV.get(1)) - .fluidInputs(Materials.Silver.getMolten(144)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Energy Hatch LuV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Energy_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.VanadiumGallium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2)) - .itemOutputs(CustomItemList.eM_energyMulti4_LuV.get(1)) - .fluidInputs(Materials.Silver.getMolten(288)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Energy Hatch ZPM 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Energy_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2)) - .itemOutputs(CustomItemList.eM_energyMulti4_ZPM.get(1)) - .fluidInputs(Materials.Silver.getMolten(576)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Energy Hatch UV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Energy_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2)) - .itemOutputs(CustomItemList.eM_energyMulti4_UV.get(1)) - .fluidInputs(Materials.Silver.getMolten(1152)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Energy Hatch UHV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Energy_UHV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2)) - .itemOutputs(CustomItemList.eM_energyMulti4_UHV.get(1)) - .fluidInputs(Materials.Silver.getMolten(2304)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - // Energy Hatch UEV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Energy_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2)) - .itemOutputs(CustomItemList.eM_energyMulti4_UEV.get(1)) - .fluidInputs(Materials.Silver.getMolten(4608)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - // Energy Hatch UIV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Energy_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2)) - .itemOutputs(CustomItemList.eM_energyMulti4_UIV.get(1)) - .fluidInputs(Materials.Silver.getMolten(9216)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - // Energy Hatch UMV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Energy_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 2)) - .itemOutputs(CustomItemList.eM_energyMulti4_UMV.get(1)) - .fluidInputs(Materials.Silver.getMolten(9216)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - // Energy Hatch UXV 4A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Energy_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1), - GT_OreDictUnificator.get("plateShirabon", 1L)) - .itemOutputs(CustomItemList.eM_energyMulti4_UXV.get(1)) - .fluidInputs(Materials.Silver.getMolten(9216)) - .duration(5 * SECONDS) - .eut((int) TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - - } - - // Energy Hatches 16A - { - // Energy Hatch EV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_IV_EV.get(1), - CustomItemList.eM_energyMulti4_EV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Aluminium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 4)) - .itemOutputs(CustomItemList.eM_energyMulti16_EV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Energy Hatch IV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_LuV_IV.get(1), - CustomItemList.eM_energyMulti4_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Tungsten, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 4)) - .itemOutputs(CustomItemList.eM_energyMulti16_IV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Energy Hatch LuV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_ZPM_LuV.get(1), - CustomItemList.eM_energyMulti4_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.VanadiumGallium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 4)) - .itemOutputs(CustomItemList.eM_energyMulti16_LuV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(288)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Energy Hatch ZPM 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UV_ZPM.get(1), - CustomItemList.eM_energyMulti4_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Naquadah, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4)) - .itemOutputs(CustomItemList.eM_energyMulti16_ZPM.get(1)) - .fluidInputs(Materials.Electrum.getMolten(576)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Energy Hatch UV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_MAX_UV.get(1), - CustomItemList.eM_energyMulti4_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NaquadahAlloy, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 4)) - .itemOutputs(CustomItemList.eM_energyMulti16_UV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(1152)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Energy Hatch UHV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UEV_UHV.get(1), - CustomItemList.eM_energyMulti4_UHV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUHV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 4)) - .itemOutputs(CustomItemList.eM_energyMulti16_UHV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(2304)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - // Energy Hatch UEV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UIV_UEV.get(1), - CustomItemList.eM_energyMulti4_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 4)) - .itemOutputs(CustomItemList.eM_energyMulti16_UEV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(4608)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - // Energy Hatch UIV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UMV_UIV.get(1), - CustomItemList.eM_energyMulti4_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 4)) - .itemOutputs(CustomItemList.eM_energyMulti16_UIV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(9216)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - // Energy Hatch UMV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UXV_UMV.get(1), - CustomItemList.eM_energyMulti4_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 4)) - .itemOutputs(CustomItemList.eM_energyMulti16_UMV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(9216)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - // Energy Hatch UXV 16A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_MAX_UXV.get(1), - CustomItemList.eM_energyMulti4_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2), - GT_OreDictUnificator.get("plateShirabon", 2L)) - .itemOutputs(CustomItemList.eM_energyMulti16_UXV.get(1)) - .fluidInputs(Materials.Electrum.getMolten(9216)) - .duration(10 * SECONDS) - .eut((int) TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - - } - - // Energy Hatches 64A - { - // Energy Hatch EV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_IV_EV.get(1), - CustomItemList.eM_energyMulti16_EV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Aluminium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6)) - .itemOutputs(CustomItemList.eM_energyMulti64_EV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Energy Hatch IV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_LuV_IV.get(1), - CustomItemList.eM_energyMulti16_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Tungsten, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6)) - .itemOutputs(CustomItemList.eM_energyMulti64_IV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Energy Hatch LuV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_ZPM_LuV.get(1), - CustomItemList.eM_energyMulti16_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.VanadiumGallium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 6)) - .itemOutputs(CustomItemList.eM_energyMulti64_LuV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Energy Hatch ZPM 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UV_ZPM.get(1), - CustomItemList.eM_energyMulti16_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Naquadah, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 6)) - .itemOutputs(CustomItemList.eM_energyMulti64_ZPM.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Energy Hatch UV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UHV_UV.get(1), - CustomItemList.eM_energyMulti16_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NaquadahAlloy, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 6)) - .itemOutputs(CustomItemList.eM_energyMulti64_UV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(1152)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Energy Hatch UHV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UEV_UHV.get(1), - CustomItemList.eM_energyMulti16_UHV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.SuperconductorUHV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 6)) - .itemOutputs(CustomItemList.eM_energyMulti64_UHV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(2304)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - // Energy Hatch UEV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UIV_UEV.get(1), - CustomItemList.eM_energyMulti16_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Draconium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 6)) - .itemOutputs(CustomItemList.eM_energyMulti64_UEV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(4608)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - // Energy Hatch UIV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UMV_UIV.get(1), - CustomItemList.eM_energyMulti16_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 6)) - .itemOutputs(CustomItemList.eM_energyMulti64_UIV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(9216)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - // Energy Hatch UMV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_UXV_UMV.get(1), - CustomItemList.eM_energyMulti16_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.Quantium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 6)) - .itemOutputs(CustomItemList.eM_energyMulti64_UMV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(9216)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - // Energy Hatch UXV 64A - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_MAX_UXV.get(1), - CustomItemList.eM_energyMulti16_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt12, Materials.BlackPlutonium, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 3), - GT_OreDictUnificator.get("plateShirabon", 3L)) - .itemOutputs(CustomItemList.eM_energyMulti64_UXV.get(1)) - .fluidInputs(Materials.Tungsten.getMolten(9216)) - .duration(20 * SECONDS) - .eut((int) TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - - } - } - - // Buck Converter IV-UIV - // Buck Converter IV - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_LuV_IV.get(1), - getItemContainer("Display").get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), - new ItemStack(bw_realglas, 2, 2)) - .itemOutputs(CustomItemList.Machine_BuckConverter_IV.get(1)) - .fluidInputs(Materials.TungstenSteel.getMolten(288)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Buck Converter LuV - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_ZPM_LuV.get(1), - getItemContainer("Display").get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), - GT_OreDictUnificator - .get(OrePrefixes.plate, getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), 2), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.NiobiumTitanium, 4), - new ItemStack(bw_realglas, 2, 3)) - .itemOutputs(CustomItemList.Machine_BuckConverter_LuV.get(1)) - .fluidInputs(new FluidStack(FluidRegistry.getFluid("molten.rhodium-plated palladium"), 288)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Buck Converter ZPM - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UV_ZPM.get(1), - getItemContainer("Display").get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), - new ItemStack(bw_realglas, 2, 4)) - .itemOutputs(CustomItemList.Machine_BuckConverter_ZPM.get(1)) - .fluidInputs(Materials.Iridium.getMolten(288)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Buck Converter UV - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_MAX_UV.get(1), - getItemContainer("Display").get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Naquadah, 4), - new ItemStack(bw_realglas, 2, 5)) - .itemOutputs(CustomItemList.Machine_BuckConverter_UV.get(1)) - .fluidInputs(Materials.Osmium.getMolten(288)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - // Buck Converter UHV - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UEV_UHV.get(1), - getItemContainer("Display").get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UHV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.ElectrumFlux, 4), - new ItemStack(bw_realglas, 4, 5)) - .itemOutputs(CustomItemList.Machine_BuckConverter_UHV.get(1)) - .fluidInputs(Materials.Neutronium.getMolten(288)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - // Buck Converter UEV - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UIV_UEV.get(1), - getItemContainer("Display").get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("Bedrockium", Materials.Neutronium), 2), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Bedrockium, 4), - new ItemStack(bw_realglas, 8, 5)) - .itemOutputs(CustomItemList.Machine_BuckConverter_UEV.get(1)) - .fluidInputs(getOrDefault("Bedrockium", Materials.Neutronium).getMolten(288)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - // Buck Converter UIV - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Transformer_UMV_UIV.get(1), - getItemContainer("Display").get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, getOrDefault("BlackPlutonium", Materials.Neutronium), 2), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Draconium, 4), - new ItemStack(bw_realglas, 16, 5)) - .itemOutputs(CustomItemList.Machine_BuckConverter_UIV.get(1)) - .fluidInputs(getOrDefault("BlackPlutonium", Materials.Neutronium).getMolten(288)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - - // Laser Dynamo - { - // Laser Dynamo IV-UXV 256/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Emitter_IV.get(1), - ItemList.Electric_Pump_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_dynamoTunnel1_IV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Emitter_LuV.get(1), - ItemList.Electric_Pump_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.VanadiumGallium, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_dynamoTunnel1_LuV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Emitter_ZPM.get(1), - ItemList.Electric_Pump_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Naquadah, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_dynamoTunnel1_ZPM.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Emitter_UV.get(1), - ItemList.Electric_Pump_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.NaquadahAlloy, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_dynamoTunnel1_UV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_MAX.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Emitter_UHV.get(1), - ItemList.Electric_Pump_UHV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Bedrockium, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_dynamoTunnel1_UHV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Emitter_UEV.get(1), - ItemList.Electric_Pump_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Draconium, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_dynamoTunnel1_UEV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Emitter_UIV.get(1), - ItemList.Electric_Pump_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.NetherStar, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_dynamoTunnel1_UIV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Emitter_UMV.get(1), - ItemList.Electric_Pump_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Quantium, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_dynamoTunnel1_UMV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Emitter_UXV.get(1), - ItemList.Electric_Pump_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.BlackPlutonium, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_dynamoTunnel1_UXV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Dynamo LuV-UXV 1024/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Emitter_LuV.get(2), - ItemList.Electric_Pump_LuV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.VanadiumGallium, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_dynamoTunnel2_LuV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Emitter_ZPM.get(2), - ItemList.Electric_Pump_ZPM.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Naquadah, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_dynamoTunnel2_ZPM.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Emitter_UV.get(2), - ItemList.Electric_Pump_UV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.NaquadahAlloy, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_dynamoTunnel2_UV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_MAX.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Emitter_UHV.get(2), - ItemList.Electric_Pump_UHV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Bedrockium, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_dynamoTunnel2_UHV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Emitter_UEV.get(2), - ItemList.Electric_Pump_UEV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Draconium, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_dynamoTunnel2_UEV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Emitter_UIV.get(2), - ItemList.Electric_Pump_UIV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.NetherStar, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_dynamoTunnel2_UIV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Emitter_UMV.get(2), - ItemList.Electric_Pump_UMV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Quantium, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_dynamoTunnel2_UMV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Emitter_UXV.get(2), - ItemList.Electric_Pump_UXV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.BlackPlutonium, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_dynamoTunnel2_UXV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Dynamo ZPM-UXV 4096/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Emitter_ZPM.get(4), - ItemList.Electric_Pump_ZPM.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_dynamoTunnel3_ZPM.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Emitter_UV.get(4), - ItemList.Electric_Pump_UV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_dynamoTunnel3_UV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_MAX.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Emitter_UHV.get(4), - ItemList.Electric_Pump_UHV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Bedrockium, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_dynamoTunnel3_UHV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Emitter_UEV.get(4), - ItemList.Electric_Pump_UEV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_dynamoTunnel3_UEV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Emitter_UIV.get(4), - ItemList.Electric_Pump_UIV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_dynamoTunnel3_UIV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Emitter_UMV.get(4), - ItemList.Electric_Pump_UMV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_dynamoTunnel3_UMV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Emitter_UXV.get(4), - ItemList.Electric_Pump_UXV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_dynamoTunnel3_UXV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Dynamo UV-UXV 16384/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), - ItemList.Emitter_UV.get(8), - ItemList.Electric_Pump_UV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_dynamoTunnel4_UV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_MAX.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), - ItemList.Emitter_UHV.get(8), - ItemList.Electric_Pump_UHV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Bedrockium, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_dynamoTunnel4_UHV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), - ItemList.Emitter_UEV.get(8), - ItemList.Electric_Pump_UEV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_dynamoTunnel4_UEV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), - ItemList.Emitter_UIV.get(8), - ItemList.Electric_Pump_UIV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_dynamoTunnel4_UIV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Emitter_UMV.get(8), - ItemList.Electric_Pump_UMV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_dynamoTunnel4_UMV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Emitter_UXV.get(8), - ItemList.Electric_Pump_UXV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_dynamoTunnel4_UXV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Dynamo UHV-UXV 65536/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_MAX.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), - ItemList.Emitter_UHV.get(16), - ItemList.Electric_Pump_UHV.get(16), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Bedrockium, 8), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(CustomItemList.eM_dynamoTunnel5_UHV.get(1)) - .duration(13 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), - ItemList.Emitter_UEV.get(16), - ItemList.Electric_Pump_UEV.get(16), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 8), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(CustomItemList.eM_dynamoTunnel5_UEV.get(1)) - .duration(13 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), - ItemList.Emitter_UIV.get(16), - ItemList.Electric_Pump_UIV.get(16), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 8), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(CustomItemList.eM_dynamoTunnel5_UIV.get(1)) - .duration(13 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), - ItemList.Emitter_UMV.get(16), - ItemList.Electric_Pump_UMV.get(16), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 8), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(CustomItemList.eM_dynamoTunnel5_UMV.get(1)) - .duration(13 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), - ItemList.Emitter_UXV.get(16), - ItemList.Electric_Pump_UXV.get(16), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 8), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(CustomItemList.eM_dynamoTunnel5_UXV.get(1)) - .duration(13 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Dynamo UEV-UXV 262144/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), - ItemList.Emitter_UEV.get(32), - ItemList.Electric_Pump_UEV.get(32), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 16), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(CustomItemList.eM_dynamoTunnel6_UEV.get(1)) - .duration(26 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), - ItemList.Emitter_UIV.get(32), - ItemList.Electric_Pump_UIV.get(32), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 16), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(CustomItemList.eM_dynamoTunnel6_UIV.get(1)) - .duration(26 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), - ItemList.Emitter_UMV.get(32), - ItemList.Electric_Pump_UMV.get(32), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 16), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(CustomItemList.eM_dynamoTunnel6_UMV.get(1)) - .duration(26 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), - ItemList.Emitter_UXV.get(32), - ItemList.Electric_Pump_UXV.get(32), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 16), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(CustomItemList.eM_dynamoTunnel6_UXV.get(1)) - .duration(26 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Dynamo UIV-UXV 1048576/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - ItemList.Emitter_UIV.get(64), - ItemList.Electric_Pump_UIV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.NetherStar, 16), - GT_Utility.getIntegratedCircuit(7)) - .itemOutputs(CustomItemList.eM_dynamoTunnel7_UIV.get(1)) - .duration(53 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - ItemList.Emitter_UMV.get(64), - ItemList.Electric_Pump_UMV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Quantium, 16), - GT_Utility.getIntegratedCircuit(7)) - .itemOutputs(CustomItemList.eM_dynamoTunnel7_UMV.get(1)) - .duration(53 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - ItemList.Emitter_UXV.get(64), - ItemList.Electric_Pump_UXV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 16), - GT_Utility.getIntegratedCircuit(7)) - .itemOutputs(CustomItemList.eM_dynamoTunnel7_UXV.get(1)) - .duration(53 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - } - - // Laser Target - { - // Laser Target IV-UXV 256/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Sensor_IV.get(1), - ItemList.Electric_Pump_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_energyTunnel1_IV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Sensor_LuV.get(1), - ItemList.Electric_Pump_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.VanadiumGallium, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_energyTunnel1_LuV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Sensor_ZPM.get(1), - ItemList.Electric_Pump_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Naquadah, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_energyTunnel1_ZPM.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Sensor_UV.get(1), - ItemList.Electric_Pump_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.NaquadahAlloy, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_energyTunnel1_UV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_MAX.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Sensor_UHV.get(1), - ItemList.Electric_Pump_UHV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Bedrockium, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_energyTunnel1_UHV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Sensor_UEV.get(1), - ItemList.Electric_Pump_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Draconium, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_energyTunnel1_UEV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Sensor_UIV.get(1), - ItemList.Electric_Pump_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.NetherStar, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_energyTunnel1_UIV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Sensor_UMV.get(1), - ItemList.Electric_Pump_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Quantium, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_energyTunnel1_UMV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Sensor_UXV.get(1), - ItemList.Electric_Pump_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.BlackPlutonium, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.eM_energyTunnel1_UXV.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Target LuV-UXV 1024/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Sensor_LuV.get(2), - ItemList.Electric_Pump_LuV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.VanadiumGallium, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_energyTunnel2_LuV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Sensor_ZPM.get(2), - ItemList.Electric_Pump_ZPM.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Naquadah, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_energyTunnel2_ZPM.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Sensor_UV.get(2), - ItemList.Electric_Pump_UV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.NaquadahAlloy, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_energyTunnel2_UV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_MAX.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Sensor_UHV.get(2), - ItemList.Electric_Pump_UHV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Bedrockium, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_energyTunnel2_UHV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Sensor_UEV.get(2), - ItemList.Electric_Pump_UEV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Draconium, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_energyTunnel2_UEV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Sensor_UIV.get(2), - ItemList.Electric_Pump_UIV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.NetherStar, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_energyTunnel2_UIV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Sensor_UMV.get(2), - ItemList.Electric_Pump_UMV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Quantium, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_energyTunnel2_UMV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), - ItemList.Sensor_UXV.get(2), - ItemList.Electric_Pump_UXV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.BlackPlutonium, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CustomItemList.eM_energyTunnel2_UXV.get(1)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Target ZPM-UXV 4096/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Sensor_ZPM.get(4), - ItemList.Electric_Pump_ZPM.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_energyTunnel3_ZPM.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Sensor_UV.get(4), - ItemList.Electric_Pump_UV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_energyTunnel3_UV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_MAX.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Sensor_UHV.get(4), - ItemList.Electric_Pump_UHV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Bedrockium, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_energyTunnel3_UHV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Sensor_UEV.get(4), - ItemList.Electric_Pump_UEV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_energyTunnel3_UEV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), - ItemList.Sensor_UIV.get(4), - ItemList.Electric_Pump_UIV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_energyTunnel3_UIV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Sensor_UMV.get(4), - ItemList.Electric_Pump_UMV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_energyTunnel3_UMV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), - ItemList.Sensor_UXV.get(4), - ItemList.Electric_Pump_UXV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 4), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(CustomItemList.eM_energyTunnel3_UXV.get(1)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Target UV-UXV 16384/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), - ItemList.Sensor_UV.get(8), - ItemList.Electric_Pump_UV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_energyTunnel4_UV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_MAX.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), - ItemList.Sensor_UHV.get(8), - ItemList.Electric_Pump_UHV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Bedrockium, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_energyTunnel4_UHV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), - ItemList.Sensor_UEV.get(8), - ItemList.Electric_Pump_UEV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_energyTunnel4_UEV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), - ItemList.Sensor_UIV.get(8), - ItemList.Electric_Pump_UIV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_energyTunnel4_UIV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), - ItemList.Sensor_UMV.get(8), - ItemList.Electric_Pump_UMV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_energyTunnel4_UMV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), - ItemList.Sensor_UXV.get(8), - ItemList.Electric_Pump_UXV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 8), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.eM_energyTunnel4_UXV.get(1)) - .duration(6 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Target UHV-UXV 65536/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_MAX.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), - ItemList.Sensor_UHV.get(16), - ItemList.Electric_Pump_UHV.get(16), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Bedrockium, 8), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(CustomItemList.eM_energyTunnel5_UHV.get(1)) - .duration(13 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), - ItemList.Sensor_UEV.get(16), - ItemList.Electric_Pump_UEV.get(16), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 8), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(CustomItemList.eM_energyTunnel5_UEV.get(1)) - .duration(13 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), - ItemList.Sensor_UIV.get(16), - ItemList.Electric_Pump_UIV.get(16), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 8), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(CustomItemList.eM_energyTunnel5_UIV.get(1)) - .duration(13 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), - ItemList.Sensor_UMV.get(16), - ItemList.Electric_Pump_UMV.get(16), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 8), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(CustomItemList.eM_energyTunnel5_UMV.get(1)) - .duration(13 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), - ItemList.Sensor_UXV.get(16), - ItemList.Electric_Pump_UXV.get(16), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 8), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(CustomItemList.eM_energyTunnel5_UXV.get(1)) - .duration(13 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Target UEV-UXV 262144/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UEV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), - ItemList.Sensor_UEV.get(32), - ItemList.Electric_Pump_UEV.get(32), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 16), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(CustomItemList.eM_energyTunnel6_UEV.get(1)) - .duration(26 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), - ItemList.Sensor_UIV.get(32), - ItemList.Electric_Pump_UIV.get(32), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 16), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(CustomItemList.eM_energyTunnel6_UIV.get(1)) - .duration(26 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), - ItemList.Sensor_UMV.get(32), - ItemList.Electric_Pump_UMV.get(32), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 16), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(CustomItemList.eM_energyTunnel6_UMV.get(1)) - .duration(26 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), - ItemList.Sensor_UXV.get(32), - ItemList.Electric_Pump_UXV.get(32), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 16), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(CustomItemList.eM_energyTunnel6_UXV.get(1)) - .duration(26 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - - // Laser Target UIV-UXV 1048576/t - { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - ItemList.Sensor_UIV.get(64), - ItemList.Electric_Pump_UIV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.NetherStar, 16), - GT_Utility.getIntegratedCircuit(7)) - .itemOutputs(CustomItemList.eM_energyTunnel7_UIV.get(1)) - .duration(53 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - ItemList.Sensor_UMV.get(64), - ItemList.Electric_Pump_UMV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Quantium, 16), - GT_Utility.getIntegratedCircuit(7)) - .itemOutputs(CustomItemList.eM_energyTunnel7_UMV.get(1)) - .duration(53 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_UXV.get(1), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - ItemList.Sensor_UXV.get(64), - ItemList.Electric_Pump_UXV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 16), - GT_Utility.getIntegratedCircuit(7)) - .itemOutputs(CustomItemList.eM_energyTunnel7_UXV.get(1)) - .duration(53 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - } - } - - // Tesla Capacitor - { - // LV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 4), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 8)) - .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 0)) - .fluidInputs(Materials.Epoxid.getMolten(72)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - // MV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Copper, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 6), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 12), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 12)) - .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 1)) - .fluidInputs(Materials.Epoxid.getMolten(144)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - // HV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 8), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 16), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 16)) - .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 2)) - .fluidInputs(Materials.Epoxid.getMolten(216)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // EV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 10), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 20), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 20)) - .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 3)) - .fluidInputs(Materials.Epoxid.getMolten(288)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // IV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 12), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 24), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 24)) - .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 4)) - .fluidInputs(Materials.Epoxid.getMolten(360)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // LuV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.HSSG, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 14), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 28), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 28)) - .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 5)) - .fluidInputs(Materials.Epoxid.getMolten(432)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // ZPM Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 16), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 32), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 32)) - .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 6)) - .fluidInputs(Materials.Epoxid.getMolten(504)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - - } - - // Tesla Cover - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.teslaComponent.getWithDamage(4, 0), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) - .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 0)) - .fluidInputs(Materials.Lead.getMolten(288)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.teslaComponent.getWithDamage(4, 0), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) - .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 0)) - .fluidInputs(Materials.Tin.getMolten(144)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.teslaComponent.getWithDamage(4, 0), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) - .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 0)) - .fluidInputs(Materials.SolderingAlloy.getMolten(72)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Ultimate Tesla Cover - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.teslaComponent.getWithDamage(4, 1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tungsten, 16), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) - .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 1)) - .fluidInputs(Materials.Lead.getMolten(288)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.teslaComponent.getWithDamage(4, 1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tungsten, 16), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) - .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 1)) - .fluidInputs(Materials.Tin.getMolten(144)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.teslaComponent.getWithDamage(4, 1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tungsten, 16), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) - .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(72)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Ender Fluid Link Cover - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Enderium, 4), - ItemList.Sensor_LuV.get(1), - ItemList.Emitter_LuV.get(1), - ItemList.Electric_Pump_LuV.get(1)) - .itemOutputs(CustomItemList.enderLinkFluidCover.getWithDamage(1, 0)) - .fluidInputs(getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome).getMolten(288)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Power Pass Upgrade Cover - GT_Values.RA.stdBuilder() - .itemInputs(CustomItemList.Machine_Multi_Transformer.get(1), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(CustomItemList.powerPassUpgradeCover.getWithDamage(1, 0)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Tesla Winding Components - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Electrum, 32), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.NickelZincFerrite, 8)) - .itemOutputs(CustomItemList.teslaComponent.getWithDamage(1, 0)) - .fluidInputs(Materials.Epoxid.getMolten(288)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - // Tesla Winding Components Ultimate (ADD BLOOD VARIANT) - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 4), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.NickelZincFerrite, 8)) - .itemOutputs(CustomItemList.teslaComponent.getWithDamage(1, 1)) - .fluidInputs(Materials.Epoxid.getMolten(576)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Tesla Transceiver LV 1A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_LV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_LV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_LV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - // Tesla Transceiver MV 1A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_MV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_MV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_MV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - // Tesla Transceiver HV 1A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_HV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_HV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_HV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Tesla Transceiver EV 1A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_EV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_EV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_EV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Tesla Transceiver IV 1A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_IV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_IV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_1by1_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_IV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Tesla Transceiver LV 4A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_LV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_LV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_LV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - // Tesla Transceiver MV 4A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_MV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_MV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_MV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - // Tesla Transceiver HV 4A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_HV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_HV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_HV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Tesla Transceiver EV 4A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_EV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_EV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_EV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Tesla Transceiver IV 4A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_IV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_IV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_2by2_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_IV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Tesla Transceiver LV 9A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_LV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_LV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_LV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - // Tesla Transceiver MV 9A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_MV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_MV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_MV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - // Tesla Transceiver HV 9A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_HV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_HV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_HV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Tesla Transceiver EV 9A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_EV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_EV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_EV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Tesla Transceiver IV 9A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_IV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_IV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_3by3_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_IV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Tesla Transceiver LV 16A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_LV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_LV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_LV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - // Tesla Transceiver MV 16A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_MV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_MV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_MV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - // Tesla Transceiver HV 16A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_HV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_HV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_HV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Tesla Transceiver EV 16A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_EV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_EV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_EV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Tesla Transceiver IV 16A - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_IV.get(1)) - .fluidInputs(Materials.Lead.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_IV.get(1)) - .fluidInputs(Materials.Tin.getMolten(288)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Battery_Buffer_4by4_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) - .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_IV.get(1)) - .fluidInputs(Materials.SolderingAlloy.getMolten(144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Tesla Tower - GT_Values.RA.stdBuilder() - .itemInputs( - GT_ModHandler.getIC2Item("teslaCoil", 1), - CustomItemList.tM_TeslaSecondary.get(4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 4), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 4), - ItemList.Upgrade_Overclocker.get(4)) - .itemOutputs(CustomItemList.Machine_Multi_TeslaCoil.get(1)) - .fluidInputs(Materials.Silver.getMolten(576)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Microwave Grinder - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Machine_HV_Microwave.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 4), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 4), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.AnnealedCopper, 16), - ItemList.Upgrade_Overclocker.get(4)) - .itemOutputs(CustomItemList.Machine_Multi_Microwave.get(1)) - .fluidInputs(Materials.Copper.getMolten(576)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // Active Transformer - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.WetTransformer_ZPM_LuV.get(1), - getItemContainer("HighEnergyFlowCircuit").get(1), - GT_OreDictUnificator - .get(OrePrefixes.wireGt01, getOrDefault("SuperconductorLuV", Materials.SuperconductorUHV), 16), - ItemList.valueOf("Circuit_Chip_UHPIC") - .get(2)) - .itemOutputs(CustomItemList.Machine_Multi_Transformer.get(1)) - .fluidInputs(Materials.TungstenSteel.getMolten(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Network Switch - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.Machine_Multi_Transformer.get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 4), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Cobalt, 64), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 64), - CustomItemList.DATApipe.get(4)) - .itemOutputs(CustomItemList.Machine_Multi_Switch.get(1)) - .fluidInputs(Materials.Iridium.getMolten(1296)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - - } - - public void cleanroomRecipes() { - // Data - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Circuit_Parts_GlassFiber.get(8), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Silver, 8)) - .itemOutputs(CustomItemList.DATApipe.get(1)) - .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(144)) - .requiresCleanRoom() - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Data Casing - GT_Values.RA.stdBuilder() - .itemInputs(CustomItemList.DATApipe.get(1), ItemList.Casing_LuV.get(1)) - .itemOutputs(CustomItemList.DATApipeBlock.get(1)) - .requiresCleanRoom() - .duration(20 * TICKS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Laser - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.DATApipe.get(1), - GT_ModHandler.getIC2Item("reinforcedGlass", 1L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Osmiridium, 2)) - .itemOutputs(CustomItemList.LASERpipe.get(1)) - .requiresCleanRoom() - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - // Laser Casing - GT_Values.RA.stdBuilder() - .itemInputs(CustomItemList.LASERpipe.get(1), ItemList.Casing_LuV.get(1)) - .itemOutputs(CustomItemList.LASERpipeBlock.get(1)) - .requiresCleanRoom() - .duration(20 * TICKS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Advanced Computer Casing - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.eM_Computer_Casing.get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 1), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Cobalt, 64), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Electrum, 64), - GT_OreDictUnificator - .get(OrePrefixes.wireGt02, getOrDefault("SuperconductorLuV", Materials.SuperconductorUHV), 4)) - .itemOutputs(CustomItemList.eM_Computer_Bus.get(1)) - .fluidInputs(Materials.Iridium.getMolten(1296)) - .requiresCleanRoom() - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Data Input - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.eM_Computer_Casing.get(1), - ItemList.Hatch_Input_Bus_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 1), - CustomItemList.DATApipe.get(2)) - .itemOutputs(CustomItemList.dataIn_Hatch.get(1)) - .fluidInputs(Materials.Iridium.getMolten(1296)) - .requiresCleanRoom() - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Data Output - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.eM_Computer_Casing.get(1), - ItemList.Hatch_Output_Bus_LuV.get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 1), - CustomItemList.DATApipe.get(2)) - .itemOutputs(CustomItemList.dataOut_Hatch.get(1)) - .fluidInputs(Materials.Iridium.getMolten(1296)) - .requiresCleanRoom() - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Rack - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.eM_Computer_Bus.get(1), - ItemList.Hatch_Input_Bus_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), - CustomItemList.DATApipe.get(4)) - .itemOutputs(CustomItemList.rack_Hatch.get(1)) - .fluidInputs(Materials.Iridium.getMolten(1296)) - .requiresCleanRoom() - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Uncertainty - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.eM_Computer_Casing.get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 1), - CustomItemList.DATApipe.get(16), - ItemList.Cover_Screen.get(1), - new ItemStack(Blocks.stone_button, 16), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(CustomItemList.Uncertainty_Hatch.get(1)) - .fluidInputs(Materials.Iridium.getMolten(2592)) - .requiresCleanRoom() - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Uncertainty X - GT_Values.RA.stdBuilder() - .itemInputs( - CustomItemList.eM_Computer_Casing.get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 1), - CustomItemList.DATApipe.get(32), - ItemList.Cover_Screen.get(1), - new ItemStack(Blocks.stone_button, 16), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(CustomItemList.UncertaintyX_Hatch.get(1)) - .fluidInputs(Materials.Iridium.getMolten(2592)) - .requiresCleanRoom() - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // Capacitor Hatch - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Input_Bus_HV.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Gold, 4)) - .itemOutputs(CustomItemList.capacitor_Hatch.get(1)) - .fluidInputs(Materials.Silver.getMolten(576)) - .requiresCleanRoom() - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Output_Bus_HV.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Gold, 4)) - .itemOutputs(CustomItemList.capacitor_Hatch.get(1)) - .fluidInputs(Materials.Silver.getMolten(576)) - .requiresCleanRoom() - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/AssemblyLine.java b/src/main/java/com/github/technus/tectech/loader/recipe/AssemblyLine.java deleted file mode 100644 index deada849dd..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/recipe/AssemblyLine.java +++ /dev/null @@ -1,168 +0,0 @@ -package com.github.technus.tectech.loader.recipe; - -import static com.github.technus.tectech.loader.recipe.BaseRecipeLoader.getOrDefault; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.technus.tectech.thing.CustomItemList; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; - -public class AssemblyLine implements Runnable { - - @Override - public void run() { - // Data Bank - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemList.Hatch_DataAccess_EV.get(1)) - .metadata(RESEARCH_TIME, 16 * MINUTES + 20 * SECONDS) - .itemInputs( - CustomItemList.Machine_Multi_Switch.get(1), - new Object[] { OrePrefixes.circuit.get(Materials.LuV), 2 }, - ItemList.Tool_DataOrb.get(1), - ItemList.Cover_Screen.get(1)) - .fluidInputs(new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000), Materials.Hydrogen.getGas(1000)) - .itemOutputs(CustomItemList.Machine_Multi_DataBank.get(1)) - .eut(14_000) - .duration(10 * MINUTES) - .addTo(AssemblyLine); - - // Hollow Casing - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, CustomItemList.eM_Containment.get(1)) - .metadata(RESEARCH_TIME, 6 * MINUTES + 15 * SECONDS) - .itemInputs( - CustomItemList.eM_Containment.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Europium, 2), - GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Plutonium, 4), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Lead, 8), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Uranium, 16), - GT_OreDictUnificator.get(OrePrefixes.screw, getOrDefault("Quantium", Materials.Europium), 16)) - .fluidInputs( - getOrDefault("Trinium", Materials.Osmium).getMolten(1296), - Materials.Osmium.getMolten(1296), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000), - Materials.Argon.getGas(1000)) - .itemOutputs(CustomItemList.eM_Hollow.get(2)) - .eut(200_000) - .duration(10 * SECONDS) - .addTo(AssemblyLine); - - // EM Coil - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, CustomItemList.eM_Hollow.get(1)) - .metadata(RESEARCH_TIME, 6 * MINUTES + 15 * SECONDS) - .itemInputs( - CustomItemList.eM_Hollow.get(1), - ItemList.Casing_Fusion_Coil.get(2), - ItemList.Casing_Coil_NaquadahAlloy.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Europium, 64)) - .fluidInputs( - Materials.Glass.getMolten(2304), - Materials.Silicone.getMolten(1872), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000), - getOrDefault("Trinium", Materials.Osmium).getMolten(1296)) - .itemOutputs(CustomItemList.eM_Coil.get(4)) - .eut(200_000) - .duration(40 * SECONDS) - .addTo(AssemblyLine); - - // Object Holder - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemList.Hatch_Input_Bus_ZPM.get(1)) - .metadata(RESEARCH_TIME, 8 * MINUTES + 20 * SECONDS) - .itemInputs( - ItemList.Hatch_Input_Bus_ZPM.get(1), - CustomItemList.eM_Computer_Bus.get(1), - ItemList.Emitter_ZPM.get(8), - ItemList.Robot_Arm_ZPM.get(1), - ItemList.Electric_Motor_ZPM.get(2), - new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 }, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.cableGt02, Materials.Naquadah, 2) }, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Naquadah, 16) }, - CustomItemList.DATApipe.get(2)) - .fluidInputs( - Materials.UUMatter.getFluid(500), - Materials.Iridium.getMolten(1296), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 1000)) - .itemOutputs(CustomItemList.holder_Hatch.get(1)) - .eut(100_000) - .duration(10 * MINUTES) - .addTo(AssemblyLine); - - // Quantum Computer - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemList.Tool_DataOrb.get(1)) - .metadata(RESEARCH_TIME, 16 * MINUTES + 40 * SECONDS) - .itemInputs( - CustomItemList.Machine_Multi_Switch.get(1), - new Object[] { OrePrefixes.circuit.get(Materials.UV), 2 }, - ItemList.Tool_DataOrb.get(1), - ItemList.Cover_Screen.get(1), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUV, 8) }, - CustomItemList.DATApipe.get(8)) - .fluidInputs( - Materials.UUMatter.getFluid(1000), - Materials.Iridium.getMolten(1296), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000), - Materials.Hydrogen.getGas(1000)) - .itemOutputs(CustomItemList.Machine_Multi_Computer.get(1)) - .eut(100_000) - .duration(10 * MINUTES) - .addTo(AssemblyLine); - - // Research Station - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemList.ScannerZPM.get(1)) - .metadata(RESEARCH_TIME, 1 * HOURS + 6 * MINUTES + 40 * SECONDS) - .itemInputs( - CustomItemList.Machine_Multi_Switch.get(1), - ItemList.Sensor_ZPM.get(8), - new Object[] { OrePrefixes.circuit.get(Materials.UV), 4 }, - ItemList.Field_Generator_ZPM.get(1), - ItemList.Electric_Motor_ZPM.get(2), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.cableGt02, Materials.Naquadah, 4) }, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Naquadah, 32) }, - CustomItemList.DATApipe.get(16)) - .fluidInputs( - Materials.UUMatter.getFluid(1000), - Materials.Iridium.getMolten(1296), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000), - Materials.Osmium.getMolten(1296)) - .itemOutputs(CustomItemList.Machine_Multi_Research.get(1)) - .eut(100_000) - .duration(10 * MINUTES) - .addTo(AssemblyLine); - - // Multi Infuser - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, CustomItemList.Machine_Multi_Transformer.get(1)) - .metadata(RESEARCH_TIME, 6 * MINUTES + 15 * SECONDS) - .itemInputs( - CustomItemList.Machine_Multi_Transformer.get(1), - CustomItemList.eM_Coil.get(8), - CustomItemList.eM_Power.get(8), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.NeodymiumMagnetic, 16)) - .fluidInputs( - Materials.Electrum.getMolten(2592), - Materials.Europium.getMolten(1872), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000)) - .itemOutputs(CustomItemList.Machine_Multi_Infuser.get(1)) - .eut(200_000) - .duration(6 * MINUTES + 40 * SECONDS) - .addTo(AssemblyLine); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/BaseRecipeLoader.java b/src/main/java/com/github/technus/tectech/loader/recipe/BaseRecipeLoader.java deleted file mode 100644 index 3c75b38465..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/recipe/BaseRecipeLoader.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.github.technus.tectech.loader.recipe; - -import static com.github.technus.tectech.TecTech.LOGGER; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; - -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.IItemContainer; - -/** - * Created by danie_000 on 16.11.2016. - */ -public class BaseRecipeLoader { - - @SuppressWarnings("rawtypes") - private static Class CUSTOM_ITEM_LIST; - - static { - try { - CUSTOM_ITEM_LIST = Class.forName("com.dreammaster.gthandler.CustomItemList"); - } catch (Exception e) { - LOGGER.error("NHCoreMod not present. Disabling all the recipes"); - } - } - - @SuppressWarnings("unchecked") - public static IItemContainer getItemContainer(String name) { - // must never be called before the try catch block is ran - return (IItemContainer) Enum.valueOf(CUSTOM_ITEM_LIST, name); - } - - public static Materials getOrDefault(String name, Materials def) { - Materials mat = Materials.get(name); - return mat == Materials._NULL || mat == null ? def : mat; - } - - public void run() { - // todo: Move those recipes in NHCore - if (NewHorizonsCoreMod.isModLoaded()) { - new Assembler().run(); - new AssemblyLine().run(); - new CircuitAssembler().run(); - new Crafting().run(); - new Extractor().run(); - new ResearchStationAssemblyLine().run(); - } else { - new Godforge().run(); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/CircuitAssembler.java b/src/main/java/com/github/technus/tectech/loader/recipe/CircuitAssembler.java deleted file mode 100644 index d267652fdd..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/recipe/CircuitAssembler.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.github.technus.tectech.loader.recipe; - -import static gregtech.api.recipe.RecipeMaps.circuitAssemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.technus.tectech.thing.CustomItemList; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; - -public class CircuitAssembler implements Runnable { - - @Override - public void run() { - Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null - ? FluidRegistry.getFluid("molten.mutatedlivingsolder") - : FluidRegistry.getFluid("molten.solderingalloy"); - - // Optical Processor - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Optically_Perfected_CPU.get(1L), - ItemList.Optically_Compatible_Memory.get(2L), - ItemList.Circuit_Parts_CapacitorXSMD.get(16L), - ItemList.Circuit_Parts_DiodeXSMD.get(16L), - CustomItemList.DATApipe.get(4L), - GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.EnrichedHolmium, 16)) - .itemOutputs(ItemList.Circuit_OpticalProcessor.get(1L)) - .fluidInputs(new FluidStack(solderUEV, 288)) - .requiresCleanRoom() - .duration(20 * SECONDS) - .eut(614400) - .addTo(circuitAssemblerRecipes); - - // Parametrizer Memory Card - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 2), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gold, 4)) - .itemOutputs(CustomItemList.parametrizerMemory.get(1)) - .fluidInputs(Materials.Plastic.getMolten(72)) - .requiresCleanRoom() - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(circuitAssemblerRecipes); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/Crafting.java b/src/main/java/com/github/technus/tectech/loader/recipe/Crafting.java deleted file mode 100644 index 73afec47ff..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/recipe/Crafting.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.github.technus.tectech.loader.recipe; - -import net.minecraft.item.ItemStack; - -import com.github.technus.tectech.thing.CustomItemList; -import com.github.technus.tectech.thing.item.EuMeterGT; -import com.gtnewhorizon.structurelib.StructureLibAPI; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; - -public class Crafting implements Runnable { - - @Override - public void run() { - - // Front Rotation Tool - GT_ModHandler.addCraftingRecipe( - GT_ModHandler.getModItem(StructureLibAPI.MOD_ID, "item.structurelib.frontRotationTool", 1L, 0), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "fPR", " RP", "S h", 'P', OrePrefixes.plate.get(Materials.Cobalt), 'R', - OrePrefixes.stick.get(Materials.Cobalt), 'S', OrePrefixes.stick.get(Materials.Wood), }); - - // GT EU reader - GT_ModHandler.addCraftingRecipe( - new ItemStack(EuMeterGT.INSTANCE, 1), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "PGW", "SCW", "BRN", 'P', OrePrefixes.plateDouble.get(Materials.Steel), 'G', - OrePrefixes.plate.get(Materials.Glass), 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'S', - OrePrefixes.stick.get(Materials.Brass), 'C', ItemList.Casing_Coil_Cupronickel.get(1), 'B', Dyes.dyeBlue, - 'R', Dyes.dyeRed, 'N', Dyes.dyeBlack, }); - - // Owner detector - GT_ModHandler.addCraftingRecipe( - CustomItemList.Machine_OwnerDetector.get(1), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "PPP", "GEG", "PPP", 'P', OrePrefixes.plate.get(Materials.IronMagnetic), 'G', - OrePrefixes.plate.get(Materials.Glass), 'E', OrePrefixes.gem.get(Materials.EnderPearl) }); - - // Tesla Base - GT_ModHandler.addCraftingRecipe( - CustomItemList.tM_TeslaBase.get(1), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "PhP", "PFP", "PwP", 'P', OrePrefixes.plate.get(Materials.NickelZincFerrite), 'F', - OrePrefixes.frameGt.get(Materials.NickelZincFerrite) }); - - // Tesla Toroid - GT_ModHandler.addCraftingRecipe( - CustomItemList.tM_TeslaToroid.get(1), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "PhP", "PFP", "PwP", 'P', OrePrefixes.foil.get(Materials.Aluminium), 'F', - OrePrefixes.frameGt.get(Materials.Aluminium) }); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/Extractor.java b/src/main/java/com/github/technus/tectech/loader/recipe/Extractor.java deleted file mode 100644 index c9d71b2b31..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/recipe/Extractor.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.github.technus.tectech.loader.recipe; - -import static gregtech.api.recipe.RecipeMaps.extractorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import com.github.technus.tectech.thing.CustomItemList; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; - -public class Extractor implements Runnable { - - @Override - public void run() { - // LV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 0)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 4)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - // MV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 1)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 6)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - // HV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 2)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 8)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - // EV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 3)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 10)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - // IV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 4)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 12)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - // LuV Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 5)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 14)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - // ZPM Tesla Capacitor - GT_Values.RA.stdBuilder() - .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 6)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 16)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/Godforge.java b/src/main/java/com/github/technus/tectech/loader/recipe/Godforge.java deleted file mode 100644 index 2a0cbf9e8e..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/recipe/Godforge.java +++ /dev/null @@ -1,662 +0,0 @@ -package com.github.technus.tectech.loader.recipe; - -import static com.github.technus.tectech.recipe.TecTechRecipeMaps.godforgeExoticMatterRecipes; -import static com.github.technus.tectech.recipe.TecTechRecipeMaps.godforgePlasmaRecipes; -import static com.github.technus.tectech.util.GodforgeMath.getRandomIntInRange; -import static gregtech.api.enums.Mods.EternalSingularity; -import static gregtech.api.enums.Mods.GalaxySpace; -import static gregtech.api.util.GT_ModHandler.getModItem; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.FOG_EXOTIC_TIER; -import static gregtech.api.util.GT_RecipeConstants.FOG_PLASMA_TIER; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.github.technus.tectech.thing.CustomItemList; - -import goodgenerator.items.MyMaterial; -import goodgenerator.util.ItemRefer; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; - -public class Godforge implements Runnable { - - public static final ArrayList plasmaGTMaterialList = new ArrayList<>(); - public static final ArrayList plasmaGTWeightList = new ArrayList<>(); - public static final HashMap exoticModulePlasmaItemMap = new HashMap<>(); - public static final HashMap exoticModulePlasmaFluidMap = new HashMap<>(); - public static final HashMap exoticModuleMagmatterItemMap = new HashMap<>(); - public static final HashMap godforgeUpgradeMats = new HashMap<>(); - public static final List quarkGluonFluidItemsForNEI = new ArrayList<>(); - public static final List quarkGluonItemsForNEI = new ArrayList<>(); - public static final List magmatterTimeFluidItemsForNEI = new ArrayList<>(); - public static final List magmatterSpaceFluidItemsForNEI = new ArrayList<>(); - public static final List magmatterItemsForNEI = new ArrayList<>(); - - @Override - public void run() { - if (!com.github.technus.tectech.TecTech.configTecTech.ENABLE_GOD_FORGE) return; - // Solid to plasma recipes - { - // Fusion tier 1-3 - { - // Single step - ItemStack[] solids_t0_1step = { Materials.Aluminium.getDust(1), Materials.Iron.getDust(1), - Materials.Calcium.getDust(1), Materials.Sulfur.getDust(1), Materials.Zinc.getDust(1), - Materials.Niobium.getDust(1), Materials.Tin.getDust(1), Materials.Titanium.getDust(1), - Materials.Nickel.getDust(1), Materials.Silver.getDust(1), Materials.Americium.getDust(1), - Materials.Antimony.getDust(1), Materials.Ardite.getDust(1), Materials.Arsenic.getDust(1), - Materials.Barium.getDust(1), Materials.Beryllium.getDust(1), Materials.Caesium.getDust(1), - Materials.Cadmium.getDust(1), Materials.Carbon.getDust(1), Materials.Cerium.getDust(1), - Materials.Cobalt.getDust(1), Materials.Copper.getDust(1), Materials.Desh.getDust(1), - Materials.Dysprosium.getDust(1), Materials.Erbium.getDust(1), Materials.Europium.getDust(1), - Materials.Gadolinium.getDust(1), Materials.Gallium.getDust(1), Materials.Gold.getDust(1), - Materials.Holmium.getDust(1), Materials.Indium.getDust(1), Materials.Lanthanum.getDust(1), - Materials.Lithium.getDust(1), Materials.Lutetium.getDust(1), Materials.Magnesium.getDust(1), - Materials.Manganese.getDust(1), Materials.MeteoricIron.getDust(1), Materials.Molybdenum.getDust(1), - Materials.Neodymium.getDust(1), Materials.Oriharukon.getDust(1), Materials.Palladium.getDust(1), - Materials.Phosphorus.getDust(1), Materials.Potassium.getDust(1), Materials.Praseodymium.getDust(1), - Materials.Promethium.getDust(1), Materials.Rubidium.getDust(1), Materials.Samarium.getDust(1), - Materials.Silicon.getDust(1), Materials.Sodium.getDust(1), Materials.Strontium.getDust(1), - Materials.Tantalum.getDust(1), Materials.Tellurium.getDust(1), Materials.Terbium.getDust(1), - Materials.Thulium.getDust(1), Materials.Tungsten.getDust(1), Materials.Uranium.getDust(1), - Materials.Uranium235.getDust(1), Materials.Vanadium.getDust(1), Materials.Ytterbium.getDust(1), - Materials.Yttrium.getDust(1), ELEMENT.getInstance().ZIRCONIUM.getDust(1), - ELEMENT.getInstance().THORIUM232.getDust(1), ELEMENT.getInstance().GERMANIUM.getDust(1), - ELEMENT.getInstance().THALLIUM.getDust(1), ELEMENT.getInstance().RUTHENIUM.getDust(1), - ELEMENT.getInstance().RHENIUM.getDust(1), ELEMENT.getInstance().RHODIUM.getDust(1), - ELEMENT.getInstance().IODINE.getDust(1), ELEMENT.getInstance().HAFNIUM.getDust(1), - ELEMENT.getInstance().CURIUM.getDust(1) }; - FluidStack[] solid_plasmas_t0_1step = { Materials.Aluminium.getPlasma(144), - Materials.Iron.getPlasma(144), Materials.Calcium.getPlasma(144), Materials.Sulfur.getPlasma(144), - Materials.Zinc.getPlasma(144), Materials.Niobium.getPlasma(144), Materials.Tin.getPlasma(144), - Materials.Titanium.getPlasma(144), Materials.Nickel.getPlasma(144), Materials.Silver.getPlasma(144), - Materials.Americium.getPlasma(144), Materials.Antimony.getPlasma(144), - Materials.Ardite.getPlasma(144), Materials.Arsenic.getPlasma(144), Materials.Barium.getPlasma(144), - Materials.Beryllium.getPlasma(144), Materials.Caesium.getPlasma(144), - Materials.Cadmium.getPlasma(144), Materials.Carbon.getPlasma(144), Materials.Cerium.getPlasma(144), - Materials.Cobalt.getPlasma(144), Materials.Copper.getPlasma(144), Materials.Desh.getPlasma(144), - Materials.Dysprosium.getPlasma(144), Materials.Erbium.getPlasma(144), - Materials.Europium.getPlasma(144), Materials.Gadolinium.getPlasma(144), - Materials.Gallium.getPlasma(144), Materials.Gold.getPlasma(144), Materials.Holmium.getPlasma(144), - Materials.Indium.getPlasma(144), Materials.Lanthanum.getPlasma(144), - Materials.Lithium.getPlasma(144), Materials.Lutetium.getPlasma(144), - Materials.Magnesium.getPlasma(144), Materials.Manganese.getPlasma(144), - Materials.MeteoricIron.getPlasma(144), Materials.Molybdenum.getPlasma(144), - Materials.Neodymium.getPlasma(144), Materials.Oriharukon.getPlasma(144), - Materials.Palladium.getPlasma(144), Materials.Phosphorus.getPlasma(144), - Materials.Potassium.getPlasma(144), Materials.Praseodymium.getPlasma(144), - Materials.Promethium.getPlasma(144), Materials.Rubidium.getPlasma(144), - Materials.Samarium.getPlasma(144), Materials.Silicon.getPlasma(144), - Materials.Sodium.getPlasma(144), Materials.Strontium.getPlasma(144), - Materials.Tantalum.getPlasma(144), Materials.Tellurium.getPlasma(144), - Materials.Terbium.getPlasma(144), Materials.Thulium.getPlasma(144), - Materials.Tungsten.getPlasma(144), Materials.Uranium.getPlasma(144), - Materials.Uranium235.getPlasma(144), Materials.Vanadium.getPlasma(144), - Materials.Ytterbium.getPlasma(144), Materials.Yttrium.getPlasma(144), - new FluidStack(ELEMENT.getInstance().ZIRCONIUM.getPlasma(), 144), - new FluidStack(ELEMENT.getInstance().THORIUM232.getPlasma(), 144), - new FluidStack(ELEMENT.getInstance().GERMANIUM.getPlasma(), 144), - new FluidStack(ELEMENT.getInstance().THALLIUM.getPlasma(), 144), - new FluidStack(ELEMENT.getInstance().RUTHENIUM.getPlasma(), 144), - new FluidStack(ELEMENT.getInstance().RHENIUM.getPlasma(), 144), - new FluidStack(ELEMENT.getInstance().RHODIUM.getPlasma(), 144), - new FluidStack(ELEMENT.getInstance().IODINE.getPlasma(), 144), - new FluidStack(ELEMENT.getInstance().HAFNIUM.getPlasma(), 144), - new FluidStack(ELEMENT.getInstance().CURIUM.getPlasma(), 144) }; - - for (int i = 0; i < solids_t0_1step.length; i++) { - boolean multistep = false; - GT_Values.RA.stdBuilder() - .itemInputs(solids_t0_1step[i]) - .fluidOutputs(solid_plasmas_t0_1step[i]) - .duration(10 * TICKS) - .eut(TierEU.RECIPE_MAX) - .special(multistep) - .metadata(FOG_PLASMA_TIER, 0) - .noOptimize() - .addTo(godforgePlasmaRecipes); - } - - // Multi-step - ItemStack[] solids_t0_xstep = { Materials.Force.getDust(1), Materials.Bismuth.getDust(1), - ELEMENT.STANDALONE.ADVANCED_NITINOL.getDust(1), Materials.Boron.getDust(1), - ELEMENT.STANDALONE.ASTRAL_TITANIUM.getDust(1), ELEMENT.STANDALONE.RUNITE.getDust(1), - ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getDust(1), Materials.Iridium.getDust(1), - Materials.Naquadah.getDust(1), Materials.Osmium.getDust(1), Materials.Platinum.getDust(1), - Materials.Plutonium.getDust(1), ELEMENT.getInstance().CALIFORNIUM.getDust(1), - Materials.Chrome.getDust(1) }; - FluidStack[] solid_plasmas_t0_xstep = { new FluidStack(ELEMENT.STANDALONE.FORCE.getPlasma(), 144), - Materials.Bismuth.getPlasma(144), - new FluidStack(ELEMENT.STANDALONE.ADVANCED_NITINOL.getPlasma(), 144), - Materials.Boron.getPlasma(144), new FluidStack(ELEMENT.STANDALONE.ASTRAL_TITANIUM.getPlasma(), 144), - new FluidStack(ELEMENT.STANDALONE.RUNITE.getPlasma(), 144), - new FluidStack(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 144), - Materials.Iridium.getPlasma(144), Materials.Naquadah.getPlasma(144), - Materials.Osmium.getPlasma(144), Materials.Platinum.getPlasma(144), - Materials.Plutonium.getPlasma(144), - new FluidStack(ELEMENT.getInstance().CALIFORNIUM.getPlasma(), 144), - Materials.Chrome.getPlasma(144), }; - - for (int i = 0; i < solids_t0_xstep.length; i++) { - boolean multistep = true; - GT_Values.RA.stdBuilder() - .itemInputs(solids_t0_xstep[i]) - .fluidOutputs(solid_plasmas_t0_xstep[i]) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_MAX) - .special(multistep) - .metadata(FOG_PLASMA_TIER, 0) - .noOptimize() - .addTo(godforgePlasmaRecipes); - } - } - // Fusion tier 4-5 - { - // Single step - ItemStack[] solids_t1_1step = { Materials.Lead.getDust(1), Materials.Plutonium241.getDust(1), - Materials.Thorium.getDust(1) }; - FluidStack[] solid_plasmas_t1_1step = { Materials.Lead.getPlasma(144), - Materials.Plutonium241.getPlasma(144), Materials.Thorium.getPlasma(144) }; - - for (int i = 0; i < solids_t1_1step.length; i++) { - boolean multistep = false; - GT_Values.RA.stdBuilder() - .itemInputs(solids_t1_1step[i]) - .fluidOutputs(solid_plasmas_t1_1step[i]) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_MAX) - .special(multistep) - .metadata(FOG_PLASMA_TIER, 1) - .noOptimize() - .addTo(godforgePlasmaRecipes); - } - - // Multi-step - ItemStack[] solids_t1_xstep = { ELEMENT.getInstance().NEPTUNIUM.getDust(1), - ELEMENT.getInstance().FERMIUM.getDust(1) }; - FluidStack[] solid_plasmas_t1_xstep = { - new FluidStack(ELEMENT.getInstance().NEPTUNIUM.getPlasma(), 144), - new FluidStack(ELEMENT.getInstance().FERMIUM.getPlasma(), 144) }; - - for (int i = 0; i < solids_t1_xstep.length; i++) { - boolean multistep = true; - GT_Values.RA.stdBuilder() - .itemInputs(solids_t1_xstep[i]) - .fluidOutputs(solid_plasmas_t1_xstep[i]) - .duration(7 * SECONDS) - .eut(TierEU.RECIPE_MAX) - .special(multistep) - .metadata(FOG_PLASMA_TIER, 1) - .noOptimize() - .addTo(godforgePlasmaRecipes); - } - } - // Exotic Plasmas - { - // Single step - ItemStack[] solids_t2_1step = { ELEMENT.STANDALONE.RHUGNOR.getDust(1), - ELEMENT.STANDALONE.DRAGON_METAL.getDust(1), ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getDust(1), - Materials.CosmicNeutronium.getDust(1), Materials.Draconium.getDust(1), - Materials.DraconiumAwakened.getDust(1), Materials.Ichorium.getDust(1) }; - FluidStack[] solid_plasmas_t2_1step = { new FluidStack(ELEMENT.STANDALONE.RHUGNOR.getPlasma(), 144), - new FluidStack(ELEMENT.STANDALONE.DRAGON_METAL.getPlasma(), 144), - new FluidStack(ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getPlasma(), 144), - Materials.CosmicNeutronium.getPlasma(144), Materials.Draconium.getPlasma(144), - Materials.DraconiumAwakened.getPlasma(144), Materials.Ichorium.getPlasma(144) }; - - for (int i = 0; i < solids_t2_1step.length; i++) { - boolean multistep = false; - GT_Values.RA.stdBuilder() - .itemInputs(solids_t2_1step[i]) - .fluidOutputs(solid_plasmas_t2_1step[i]) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_MAX) - .special(multistep) - .metadata(FOG_PLASMA_TIER, 2) - .noOptimize() - .addTo(godforgePlasmaRecipes); - } - - // Multi-step - ItemStack[] solids_t2_xstep = { ELEMENT.STANDALONE.HYPOGEN.getDust(1), Materials.Tritanium.getDust(1), - Materials.Flerovium.getDust(1), Materials.Neutronium.getDust(1), }; - FluidStack[] solid_plasmas_t2_xstep = { new FluidStack(ELEMENT.STANDALONE.HYPOGEN.getPlasma(), 144), - Materials.Tritanium.getPlasma(144), Materials.Flerovium.getPlasma(144), - Materials.Neutronium.getPlasma(144), }; - - for (int i = 0; i < solids_t2_xstep.length; i++) { - boolean multistep = true; - GT_Values.RA.stdBuilder() - .itemInputs(solids_t2_xstep[i]) - .fluidOutputs(solid_plasmas_t2_xstep[i]) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_MAX) - .special(multistep) - .metadata(FOG_PLASMA_TIER, 2) - .noOptimize() - .addTo(godforgePlasmaRecipes); - } - - } - - } - - // Fluid to plasma recipes - { - // Fusion tier 1-3 - { - // Single step - FluidStack[] fluids_t0_1step = { Materials.Helium.getGas(500), Materials.Nitrogen.getGas(500), - Materials.Argon.getGas(500), Materials.Chlorine.getGas(500), Materials.Deuterium.getGas(500), - Materials.Fluorine.getGas(500), Materials.Hydrogen.getGas(500), Materials.Radon.getGas(500), - Materials.Tritium.getGas(500), Materials.Mercury.getFluid(500) }; - FluidStack[] fluid_plasmas_t0_1step = { Materials.Helium.getPlasma(500), - Materials.Nitrogen.getPlasma(500), Materials.Argon.getPlasma(500), - Materials.Chlorine.getPlasma(500), Materials.Deuterium.getPlasma(500), - Materials.Fluorine.getPlasma(500), Materials.Hydrogen.getPlasma(500), - Materials.Radon.getPlasma(500), Materials.Tritium.getPlasma(500), - Materials.Mercury.getPlasma(500) }; - - for (int i = 0; i < fluids_t0_1step.length; i++) { - boolean multistep = false; - GT_Values.RA.stdBuilder() - .fluidInputs(fluids_t0_1step[i]) - .fluidOutputs(fluid_plasmas_t0_1step[i]) - .duration(1 * SECONDS) - .eut(TierEU.RECIPE_MAX) - .special(multistep) - .metadata(FOG_PLASMA_TIER, 0) - .noOptimize() - .addTo(godforgePlasmaRecipes); - } - - // Multi-step - FluidStack[] fluids_t0_xstep = { ELEMENT.getInstance().NEON.getFluidStack(500), - Materials.Oxygen.getGas(500), ELEMENT.getInstance().KRYPTON.getFluidStack(500), - ELEMENT.getInstance().XENON.getFluidStack(500) }; - FluidStack[] fluid_plasmas_t0_xstep = { new FluidStack(ELEMENT.getInstance().NEON.getPlasma(), 500), - Materials.Oxygen.getPlasma(500), new FluidStack(ELEMENT.getInstance().KRYPTON.getPlasma(), 500), - new FluidStack(ELEMENT.getInstance().XENON.getPlasma(), 500) }; - - for (int i = 0; i < fluids_t0_xstep.length; i++) { - boolean multistep = true; - GT_Values.RA.stdBuilder() - .fluidInputs(fluids_t0_xstep[i]) - .fluidOutputs(fluid_plasmas_t0_xstep[i]) - .duration(3 * SECONDS) - .eut(TierEU.RECIPE_MAX) - .special(multistep) - .metadata(FOG_PLASMA_TIER, 0) - .noOptimize() - .addTo(godforgePlasmaRecipes); - } - } - // Fusion tier 4-5 - { - // Single step - // None yet - - // Multi-step - // None yet - } - // Exotic - { - // None yet - } - } - - // Exotic module fake recipes - { - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Iron.getDust(1)) - .fluidInputs(Materials.Iron.getMolten(1)) - .fluidOutputs(MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MAX) - .metadata(FOG_EXOTIC_TIER, 1) - .ignoreCollision() - .fake() - .addTo(godforgeExoticMatterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Iron.getDust(1)) - .fluidInputs(Materials.Iron.getMolten(1), Materials.Bismuth.getMolten(1)) - .fluidOutputs(MaterialsUEVplus.MagMatter.getMolten(144)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MAX) - .metadata(FOG_EXOTIC_TIER, 1) - .ignoreCollision() - .fake() - .addTo(godforgeExoticMatterRecipes); - } - - // Exotic module plasma material maps - // GT materials - plasmaGTMaterialList.addAll( - Arrays.asList( - Materials.Aluminium, - Materials.Americium, - Materials.Antimony, - Materials.Ardite, - Materials.Argon, - Materials.Arsenic, - Materials.Barium, - Materials.Beryllium, - Materials.Bismuth, - Materials.Boron, - Materials.Caesium, - Materials.Calcium, - Materials.Cadmium, - Materials.Carbon, - Materials.Cerium, - Materials.Chlorine, - Materials.Chrome, - Materials.Cobalt, - Materials.Copper, - Materials.Desh, - Materials.Deuterium, - Materials.Dysprosium, - Materials.Erbium, - Materials.Europium, - Materials.Fluorine, - Materials.Gadolinium, - Materials.Gallium, - Materials.Gold, - Materials.Helium, - Materials.Holmium, - Materials.Hydrogen, - Materials.Indium, - Materials.Iridium, - Materials.Iron, - Materials.Lanthanum, - Materials.Lead, - Materials.Lithium, - Materials.Lutetium, - Materials.Magnesium, - Materials.Manganese, - Materials.MeteoricIron, - Materials.Molybdenum, - Materials.Naquadah, - Materials.Neodymium, - Materials.Nickel, - Materials.Niobium, - Materials.Nitrogen, - Materials.Oriharukon, - Materials.Osmium, - Materials.Oxygen, - Materials.Palladium, - Materials.Phosphorus, - Materials.Platinum, - Materials.Plutonium, - Materials.Plutonium241, - Materials.Potassium, - Materials.Praseodymium, - Materials.Promethium, - Materials.Radon, - Materials.Rubidium, - Materials.Samarium, - Materials.Silicon, - Materials.Silver, - Materials.Sodium, - Materials.Strontium, - Materials.Sulfur, - Materials.Tantalum, - Materials.Tellurium, - Materials.Terbium, - Materials.Thorium, - Materials.Thulium, - Materials.Tin, - Materials.Titanium, - Materials.Tritium, - Materials.Tungsten, - Materials.Uranium235, - Materials.Uranium, - Materials.Vanadium, - Materials.Ytterbium, - Materials.Yttrium, - Materials.Zinc)); - - plasmaGTWeightList.addAll( - Arrays.asList( - 6000 /* Aluminium */, - 10000 /* Americium */, - 6000 /* Antimony */, - 6000 /* Ardite */, - 6000 /* Argon */, - 6000 /* Arsenic */, - 6000 /* Barium */, - 6000 /* Beryllium */, - 8000 /* Bismuth */, - 8000 /* Boron */, - 6000 /* Caesium */, - 10000 /* Calcium */, - 6000 /* Cadmium */, - 6000 /* Carbon */, - 6000 /* Cerium */, - 6000 /* Chlorine */, - 6000 /* Chrome */, - 6000 /* Cobalt */, - 6000 /* Copper */, - 6000 /* Desh */, - 6000 /* Deuterium */, - 2000 /* Dysprosium */, - 2000 /* Erbium */, - 6000 /* Europium */, - 6000 /* Fluorine */, - 2000 /* Gadolinium */, - 6000 /* Gallium */, - 6000 /* Gold */, - 10000 /* Helium */, - 6000 /* Holmium */, - 10000 /* Hydrogen */, - 6000 /* Indium */, - 6000 /* Iridium */, - 10000 /* Iron */, - 6000 /* Lanthanum */, - 500 /* Lead */, - 6000 /* Lithium */, - 6000 /* Lutetium */, - 6000 /* Magnesium */, - 6000 /* Manganese */, - 6000 /* Meteoric Iron */, - 6000 /* Molybdenum */, - 6000 /* Naquadah */, - 6000 /* Neodymium */, - 10000 /* Nickel */, - 10000 /* Niobium */, - 10000 /* Nitrogen */, - 6000 /* Oriharukon */, - 6000 /* Osmium */, - 8000 /* Oxygen */, - 6000 /* Palladium */, - 6000 /* Phosphorus */, - 6000 /* Platinum */, - 6000 /* Plutonium 239 */, - 500 /* Plutonium 241 */, - 6000 /* Potassium */, - 6000 /* Praseodymium */, - 2000 /* Promethium */, - 10000 /* Radon */, - 2000 /* Rubidium */, - 6000 /* Samarium */, - 6000 /* Raw Silicon */, - 10000 /* Silver */, - 6000 /* Sodium */, - 2000 /* Strontium */, - 10000 /* Sulfur */, - 6000 /* Tantalum */, - 2000 /* Tellurium */, - 1000 /* Terbium */, - 500 /* Thorium */, - 6000 /* Thulium */, - 10000 /* Tin */, - 10000 /* Titanium */, - 6000 /* Tritium */, - 6000 /* Tungsten */, - 6000 /* Uranium 235 */, - 6000 /* Uranium 238 */, - 6000 /* Vanadium */, - 2000 /* Ytterbium */, - 6000 /* Yttrium */, - 6000 /* Zinc */)); - - // GT++ materials - exoticModulePlasmaItemMap.put(ELEMENT.getInstance().ZIRCONIUM.getTinyDust(1), 6000); - exoticModulePlasmaItemMap.put(ELEMENT.getInstance().THORIUM232.getTinyDust(1), 6000); - exoticModulePlasmaItemMap.put(ELEMENT.getInstance().GERMANIUM.getTinyDust(1), 2000); - exoticModulePlasmaItemMap.put(ELEMENT.getInstance().THALLIUM.getTinyDust(1), 2000); - exoticModulePlasmaItemMap.put(ELEMENT.getInstance().RUTHENIUM.getTinyDust(1), 6000); - exoticModulePlasmaItemMap.put(ELEMENT.getInstance().RHENIUM.getTinyDust(1), 2000); - exoticModulePlasmaItemMap.put(ELEMENT.getInstance().RHODIUM.getTinyDust(1), 6000); - exoticModulePlasmaItemMap.put(ELEMENT.getInstance().IODINE.getTinyDust(1), 6000); - exoticModulePlasmaItemMap.put(ELEMENT.STANDALONE.ASTRAL_TITANIUM.getTinyDust(1), 8000); - exoticModulePlasmaItemMap.put(ELEMENT.STANDALONE.ADVANCED_NITINOL.getTinyDust(1), 8000); - exoticModulePlasmaItemMap.put(ELEMENT.STANDALONE.FORCE.getTinyDust(1), 8000); - exoticModulePlasmaItemMap.put(ELEMENT.getInstance().HAFNIUM.getTinyDust(1), 6000); - exoticModulePlasmaItemMap.put(ELEMENT.getInstance().CALIFORNIUM.getTinyDust(1), 1000); - exoticModulePlasmaItemMap.put(ELEMENT.STANDALONE.RUNITE.getTinyDust(1), 8000); - - exoticModulePlasmaFluidMap.put(new FluidStack(ELEMENT.getInstance().XENON.getFluid(), 1), 8000); - exoticModulePlasmaFluidMap.put(new FluidStack(ELEMENT.getInstance().KRYPTON.getFluid(), 1), 8000); - exoticModulePlasmaFluidMap.put(new FluidStack(ELEMENT.getInstance().NEON.getFluid(), 1), 8000); - // These are here because they cant be solidified - exoticModulePlasmaFluidMap.put(new FluidStack(ELEMENT.getInstance().CURIUM.getFluid(), 1), 10000); - exoticModulePlasmaFluidMap.put(new FluidStack(ELEMENT.getInstance().NEPTUNIUM.getFluid(), 1), 800); - exoticModulePlasmaFluidMap.put(new FluidStack(ELEMENT.getInstance().FERMIUM.getFluid(), 1), 800); - // Mercury is weird, it has neither dust nor gas, so it needs to be added separately - exoticModulePlasmaFluidMap.put(Materials.Mercury.getFluid(1), 6000); - - // Loop for adding all GT plasma materials - for (int i = 0; i < plasmaGTMaterialList.size(); i++) { - if (plasmaGTMaterialList.get(i) - .getDustTiny(1) != null) { - exoticModulePlasmaItemMap.put( - plasmaGTMaterialList.get(i) - .getDustTiny(1), - plasmaGTWeightList.get(i)); - } else { - exoticModulePlasmaFluidMap.put( - plasmaGTMaterialList.get(i) - .getGas(1), - plasmaGTWeightList.get(i)); - } - } - - // Magmatter map - // GT materials - exoticModuleMagmatterItemMap.put(Materials.CosmicNeutronium.getDustTiny(1), 100000); - exoticModuleMagmatterItemMap.put(Materials.Draconium.getDustTiny(1), 100000); - exoticModuleMagmatterItemMap.put(Materials.DraconiumAwakened.getDustTiny(1), 100000); - exoticModuleMagmatterItemMap.put(Materials.Ichorium.getDustTiny(1), 100000); - exoticModuleMagmatterItemMap.put(Materials.Neutronium.getDustTiny(1), 100000); - exoticModuleMagmatterItemMap.put(Materials.Flerovium.getDustTiny(1), 100000); - - // GT++ materials - exoticModuleMagmatterItemMap.put(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getTinyDust(1), 100000); - exoticModuleMagmatterItemMap.put(ELEMENT.STANDALONE.HYPOGEN.getTinyDust(1), 100000); - exoticModuleMagmatterItemMap.put(ELEMENT.STANDALONE.RHUGNOR.getTinyDust(1), 100000); - exoticModuleMagmatterItemMap.put(ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getTinyDust(1), 100000); - exoticModuleMagmatterItemMap.put(ELEMENT.STANDALONE.DRAGON_METAL.getTinyDust(1), 100000); - - // For NEI - for (FluidStack fluid : exoticModulePlasmaFluidMap.keySet()) { - fluid.amount = getRandomIntInRange(1, 64); - quarkGluonFluidItemsForNEI.add(GT_Utility.getFluidDisplayStack(fluid, true)); - } - for (ItemStack item : exoticModulePlasmaItemMap.keySet()) { - item.stackSize = getRandomIntInRange(1, 64); - quarkGluonItemsForNEI.add(item); - } - for (int i = 0; i < 21; i++) { - magmatterTimeFluidItemsForNEI.add( - GT_Utility.getFluidDisplayStack(MaterialsUEVplus.Time.getMolten(getRandomIntInRange(1, 50)), true)); - magmatterSpaceFluidItemsForNEI.add( - GT_Utility.getFluidDisplayStack(MaterialsUEVplus.Space.getMolten(getRandomIntInRange(51, 100)), true)); - } - magmatterItemsForNEI.addAll(exoticModuleMagmatterItemMap.keySet()); - - // Godforge upgrade materials - if (EternalSingularity.isModLoaded() && GalaxySpace.isModLoaded()) { - godforgeUpgradeMats.put( - 0, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUIVBase, 64), - ItemList.SuperconductorComposite.get(32), - MyMaterial.metastableOganesson.get(OrePrefixes.gearGt, 16), - getModItem(EternalSingularity.ID, "eternal_singularity", 8L), ItemList.Robot_Arm_UIV.get(64L), - ItemList.Field_Generator_UEV.get(64L) }); - - godforgeUpgradeMats.put( - 5, - new ItemStack[] { GregtechItemList.Mega_AlloyBlastSmelter.get(16L), - ItemList.Casing_Coil_Hypogen.get(64L), - CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(32L), - getModItem(EternalSingularity.ID, "eternal_singularity", 16L), - ItemRefer.Field_Restriction_Coil_T3.get(48), ItemList.Robot_Arm_UIV.get(64L), - ItemList.Field_Generator_UEV.get(64L) }); - - godforgeUpgradeMats.put( - 7, - new ItemStack[] { CustomItemList.Godforge_StellarEnergySiphonCasing.get(8), - GregtechItemList.FusionComputer_UV3.get(8), GregtechItemList.Casing_Fusion_Internal2.get(64), - getModItem(GalaxySpace.ID, "item.DysonSwarmParts", 64, 3), ALLOY.QUANTUM.getPlateDense(48), - ELEMENT.STANDALONE.RHUGNOR.getGear(32), - getModItem(EternalSingularity.ID, "eternal_singularity", 16L), ItemList.Robot_Arm_UIV.get(64L), - ItemList.Field_Generator_UEV.get(64L) }); - - godforgeUpgradeMats.put( - 11, - new ItemStack[] { CustomItemList.Godforge_StellarEnergySiphonCasing.get(16), - ItemRefer.Compact_Fusion_MK5.get(2), ItemRefer.Compact_Fusion_Coil_T4.get(64), - CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(16), - ItemList.Machine_Multi_TranscendentPlasmaMixer.get(4), ELEMENT.STANDALONE.RHUGNOR.getGear(64), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Ichorium, 64), - getModItem(EternalSingularity.ID, "eternal_singularity", 32L), ItemList.Robot_Arm_UIV.get(64L), - ItemList.Field_Generator_UEV.get(64L) }); - - godforgeUpgradeMats.put( - 26, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 64), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUMVBase, 64), - ELEMENT.STANDALONE.HYPOGEN.getFrameBox(64), ELEMENT.STANDALONE.DRAGON_METAL.getFrameBox(64), - CustomItemList.EOH_Reinforced_Spatial_Casing.get(64), - CustomItemList.EOH_Infinite_Energy_Casing.get(8), ItemList.ZPM6.get(4), - ItemList.Field_Generator_UMV.get(32) }); - - godforgeUpgradeMats.put( - 29, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.WhiteDwarfMatter, 64), - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.BlackDwarfMatter, 64), - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.Eternity, 16), - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.Universium, 4), - CustomItemList.EOH_Infinite_Energy_Casing.get(64), - CustomItemList.StabilisationFieldGeneratorTier5.get(16), ItemList.ZPM6.get(16), - ItemList.Field_Generator_UMV.get(64) }); - - godforgeUpgradeMats.put( - 30, - new ItemStack[] { CustomItemList.Machine_Multi_QuarkGluonPlasmaModule.get(32), - CustomItemList.Godforge_StellarEnergySiphonCasing.get(64), - CustomItemList.StabilisationFieldGeneratorTier6.get(48), - ItemList.Transdimensional_Alignment_Matrix.get(8), ItemList.ZPM6.get(16), - ItemList.Robot_Arm_UMV.get(64), ItemList.Conveyor_Module_UMV.get(64) }); - } - - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java b/src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java deleted file mode 100644 index 0934ed87f2..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/recipe/ResearchStationAssemblyLine.java +++ /dev/null @@ -1,3690 +0,0 @@ -package com.github.technus.tectech.loader.recipe; - -import static com.github.technus.tectech.loader.recipe.BaseRecipeLoader.getItemContainer; -import static com.google.common.math.LongMath.pow; -import static common.Blocks.lscLapotronicEnergyUnit; -import static goodgenerator.loader.Loaders.compactFusionCoil; -import static goodgenerator.loader.Loaders.yottaFluidTankCell; -import static gregtech.api.enums.Mods.*; -import static gregtech.api.util.GT_ModHandler.getModItem; -import static gregtech.api.util.GT_RecipeBuilder.INGOTS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gtPlusPlus.core.material.ALLOY.ABYSSAL; -import static gtPlusPlus.core.material.ALLOY.CINOBITE; -import static gtPlusPlus.core.material.ALLOY.LAFIUM; -import static gtPlusPlus.core.material.ALLOY.LAURENIUM; -import static gtPlusPlus.core.material.ALLOY.PIKYONIUM; -import static gtPlusPlus.core.material.ALLOY.QUANTUM; -import static gtPlusPlus.core.material.ALLOY.TITANSTEEL; -import static gtPlusPlus.core.material.ALLOY.TRINIUM_REINFORCED_STEEL; -import static gtPlusPlus.core.material.ELEMENT.STANDALONE.ASTRAL_TITANIUM; -import static gtPlusPlus.core.material.ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN; -import static gtPlusPlus.core.material.ELEMENT.STANDALONE.CHRONOMATIC_GLASS; -import static gtPlusPlus.core.material.ELEMENT.STANDALONE.HYPOGEN; -import static kubatech.api.enums.ItemList.DEFCAwakenedSchematic; -import static kubatech.api.enums.ItemList.DEFCChaoticSchematic; -import static kubatech.api.enums.ItemList.DEFCDraconicSchematic; -import static kubatech.api.enums.ItemList.DEFCWyvernSchematic; -import static kubatech.api.enums.ItemList.DraconicEvolutionFusionCrafter; -import static kubatech.loaders.BlockLoader.defcCasingBlock; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.technus.tectech.recipe.TT_recipeAdder; -import com.github.technus.tectech.thing.CustomItemList; -import com.github.technus.tectech.thing.block.GodforgeGlassBlock; -import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.rwtema.extrautils.ExtraUtils; -import common.Blocks; -import common.TileEntities; - -import fox.spiteful.avaritia.compat.ticon.Tonkers; -import goodgenerator.items.MyMaterial; -import goodgenerator.util.ItemRefer; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsBotania; -import gregtech.api.enums.MaterialsKevlar; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.MISC_MATERIALS; -import gtPlusPlus.core.material.Particle; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import tconstruct.tools.TinkerTools; -import vexatos.tgregworks.reference.PartTypes; -import vexatos.tgregworks.util.TGregUtils; - -public class ResearchStationAssemblyLine implements Runnable { - - @Override - public void run() { - itemPartsUHVAsslineRecipes(); - itemPartsUEVAsslineRecipes(); - itemPartsUIVAsslineRecipes(); - itemPartsUMVAsslineRecipes(); - itemPartsUXVAsslineRecipes(); - addWirelessEnergyRecipes(); - addGodforgeRecipes(); - - if (TinkersGregworks.isModLoaded() && Avaritia.isModLoaded() // Infinity, Cosmic Neutronium - && ExtraUtilities.isModLoaded() // Bedrockium - ) { - addEOHRecipes(); - } - - Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null - ? FluidRegistry.getFluid("molten.mutatedlivingsolder") - : FluidRegistry.getFluid("molten.solderingalloy"); - - Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null - ? FluidRegistry.getFluid("molten.indalloy140") - : FluidRegistry.getFluid("molten.solderingalloy"); - - // Infinite Oil Rig - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.OilDrill4.get(1), - 16777216, - 2048, - (int) TierEU.RECIPE_UHV, - 4, - new Object[] { ItemList.OilDrill4.get(1), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 4), - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 4L }, ItemList.Electric_Motor_UHV.get(4), - ItemList.Electric_Pump_UHV.get(4), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Neutronium, 4), ItemList.Sensor_UHV.get(3), - ItemList.Field_Generator_UHV.get(3), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 12) }, - new FluidStack[] { new FluidStack(solderUEV, 1296), Materials.Neutronium.getMolten(576) }, - ItemList.OilDrillInfinite.get(1), - 6000, - (int) TierEU.RECIPE_UHV); - - // Infinity Coil - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Casing_Coil_AwakenedDraconium.get(1), - 16_777_216, - 2048, - (int) TierEU.RECIPE_UEV, - 1, - new Object[] { new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.Infinity, 8), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Infinity, 8), - getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), - getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 32, 0) }, - new FluidStack[] { Materials.DraconiumAwakened.getMolten(576), }, - ItemList.Casing_Coil_Infinity.get(1), - 60 * 20, - (int) TierEU.RECIPE_UEV); - - // Hypogen Coil - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Casing_Coil_Infinity.get(1), - 16_777_216 * 2, - 2048 * 2, - (int) TierEU.RECIPE_UIV, - 1, - new Object[] { new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, - GT_OreDictUnificator.get("wireGt02Hypogen", 8L), HYPOGEN.getScrew(8), - getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), - getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), - getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), }, - new FluidStack[] { Materials.Infinity.getMolten(576), }, - ItemList.Casing_Coil_Hypogen.get(1), - 60 * 20, - (int) TierEU.RECIPE_UIV); - - // Eternal coil - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Casing_Coil_Hypogen.get(1), - 16_777_216 * 4, - 8_192, - (int) TierEU.RECIPE_UMV, - 1, - new Object[] { new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, - GT_OreDictUnificator.get(OrePrefixes.wireGt02, MaterialsUEVplus.SpaceTime, 8), - GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SpaceTime, 8), - getModItem(EternalSingularity.ID, "eternal_singularity", 1L), - getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), - getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), - getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), - getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), - getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), - getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), }, - new FluidStack[] { new FluidStack(FluidRegistry.getFluid("molten.hypogen"), 576), }, - ItemList.Casing_Coil_Eternal.get(1), - 60 * 20, - (int) TierEU.RECIPE_UMV); - - // UHV-UMV Energy Hatch & Dynamo - { - // Energy Hatches - { - // Energy Hatch UHV - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Hatch_Energy_UV.get(1L), - 24000, - 16, - 50000, - 2, - new Object[] { ItemList.Hull_MAX.get(1L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 2L), - ItemList.Circuit_Chip_QPIC.get(2L), new Object[] { OrePrefixes.circuit.get(Materials.UHV), 2L }, - ItemList.UHV_Coil.get(2L), - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - ItemList.Electric_Pump_UHV.get(1L) }, - new FluidStack[] { new FluidStack(FluidRegistry.getFluid("ic2coolant"), 16000), - new FluidStack(solderIndalloy, 40 * 144) }, - ItemList.Hatch_Energy_UHV.get(1L), - 1000, - (int) TierEU.RECIPE_UHV); - - // Energy Hatch UEV - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Hatch_Energy_UHV.get(1L), - 48000, - 32, - 100000, - 4, - new Object[] { ItemList.Hull_UEV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 2L), - ItemList.Circuit_Chip_QPIC.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UEV), 2L }, - ItemList.UHV_Coil.get(4L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Electric_Pump_UEV.get(1L) }, - new FluidStack[] { new FluidStack(FluidRegistry.getFluid("ic2coolant"), 32000), - new FluidStack(solderUEV, 20 * 144), Materials.UUMatter.getFluid(8000L) }, - ItemList.Hatch_Energy_UEV.get(1L), - 1000, - (int) TierEU.RECIPE_UEV); - - // Energy Hatch UIV - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Hatch_Energy_UEV.get(1L), - 96_000, - 64, - 200_000, - 8, - new Object[] { ItemList.Hull_UIV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUIV, 2L), - ItemList.Circuit_Chip_QPIC.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UIV), 2L }, - ItemList.UHV_Coil.get(8L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Electric_Pump_UIV.get(1L) }, - new FluidStack[] { Materials.SuperCoolant.getFluid(16_000L), new FluidStack(solderUEV, 20 * 144), - Materials.UUMatter.getFluid(16_000L) }, - ItemList.Hatch_Energy_UIV.get(1L), - 1000, - (int) TierEU.RECIPE_UIV); - - // Energy Hatch UMV - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Hatch_Energy_UIV.get(1L), - 192000, - 128, - 400000, - 16, - new Object[] { ItemList.Hull_UMV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUMV, 2L), - ItemList.Circuit_Chip_QPIC.get(4L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UMV, 2), ItemList.UHV_Coil.get(16L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Electric_Pump_UMV.get(1L) }, - new FluidStack[] { Materials.SuperCoolant.getFluid(32_000L), new FluidStack(solderUEV, 40 * 144), - Materials.UUMatter.getFluid(32000L) }, - ItemList.Hatch_Energy_UMV.get(1L), - 1000, - (int) TierEU.RECIPE_UMV); - - // Energy Hatch UXV - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Hatch_Energy_UMV.get(1L), - 384000, - 256, - 800000, - 32, - new Object[] { ItemList.Hull_UXV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUMV, 4L), - ItemList.Circuit_Chip_QPIC.get(16L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 2), ItemList.UHV_Coil.get(32L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Electric_Pump_UXV.get(1L) }, - new FluidStack[] { Materials.SuperCoolant.getFluid(64_000L), new FluidStack(solderUEV, 80 * 144), - Materials.UUMatter.getFluid(64000L) }, - ItemList.Hatch_Energy_UXV.get(1L), - 1000, - (int) TierEU.RECIPE_UXV); - } - - // Dynamo Hatch - { - // Dynamo Hatch UHV - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Hatch_Dynamo_UV.get(1L), - 48000, - 32, - 100000, - 4, - new Object[] { ItemList.Hull_MAX.get(1L), - GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Longasssuperconductornameforuhvwire, 8L), - ItemList.Circuit_Chip_QPIC.get(2L), new Object[] { OrePrefixes.circuit.get(Materials.UHV), 2L }, - ItemList.UHV_Coil.get(2L), - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), - ItemList.Reactor_Coolant_Sp_2.get(1L) }, - ItemList.Electric_Pump_UHV.get(1L) }, - new FluidStack[] { new FluidStack(FluidRegistry.getFluid("ic2coolant"), 16000), - new FluidStack(solderIndalloy, 40 * 144) }, - ItemList.Hatch_Dynamo_UHV.get(1L), - 1000, - (int) TierEU.RECIPE_UHV); - - // Dynamo Hatch UEV - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Hatch_Dynamo_UHV.get(1L), - 96000, - 64, - 200000, - 8, - new Object[] { ItemList.Hull_UEV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.spring, Materials.SuperconductorUEVBase, 8L), - ItemList.Circuit_Chip_QPIC.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UEV), 2L }, - ItemList.UHV_Coil.get(4L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Electric_Pump_UEV.get(1L) }, - new FluidStack[] { new FluidStack(FluidRegistry.getFluid("ic2coolant"), 32000), - new FluidStack(solderUEV, 20 * 144), Materials.UUMatter.getFluid(8000L) }, - ItemList.Hatch_Dynamo_UEV.get(1L), - 1000, - (int) TierEU.RECIPE_UEV); - - // Dynamo Hatch UIV - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Hatch_Dynamo_UEV.get(1L), - 192_000, - 128, - 400_000, - 16, - new Object[] { ItemList.Hull_UIV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.spring, Materials.SuperconductorUIVBase, 8L), - ItemList.Circuit_Chip_QPIC.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UIV), 2L }, - ItemList.UHV_Coil.get(8L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Electric_Pump_UIV.get(1L) }, - new FluidStack[] { Materials.SuperCoolant.getFluid(16_000L), new FluidStack(solderUEV, 20 * 144), - Materials.UUMatter.getFluid(16_000L) }, - ItemList.Hatch_Dynamo_UIV.get(1L), - 1000, - (int) TierEU.RECIPE_UIV); - - // Dynamo Hatch UMV - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Hatch_Dynamo_UIV.get(1L), - 384000, - 256, - 800000, - 32, - new Object[] { ItemList.Hull_UMV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.spring, Materials.SuperconductorUMVBase, 8L), - ItemList.Circuit_Chip_QPIC.get(4L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UMV, 2), ItemList.UHV_Coil.get(16L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Electric_Pump_UMV.get(1L) }, - new FluidStack[] { Materials.SuperCoolant.getFluid(32_000L), new FluidStack(solderUEV, 40 * 144), - Materials.UUMatter.getFluid(32000L) }, - ItemList.Hatch_Dynamo_UMV.get(1L), - 1000, - (int) TierEU.RECIPE_UMV); - - // Dynamo Hatch UXV - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Hatch_Dynamo_UMV.get(1L), - 384000, - 256, - 800000, - 32, - new Object[] { ItemList.Hull_UXV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.spring, Materials.SuperconductorUMVBase, 16L), - ItemList.Circuit_Chip_QPIC.get(16L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 2), ItemList.UHV_Coil.get(32L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Electric_Pump_UXV.get(1L) }, - new FluidStack[] { Materials.SuperCoolant.getFluid(64_000L), new FluidStack(solderUEV, 80 * 144), - Materials.UUMatter.getFluid(64000L) }, - ItemList.Hatch_Dynamo_UXV.get(1L), - 1000, - (int) TierEU.RECIPE_UXV); - } - } - - // UHV Circuit Wetwaremainframe - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Circuit_Wetwaresupercomputer.get(1L), - 24000, - 64, - 50000, - 4, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Tritanium, 2), - ItemList.Circuit_Wetwaresupercomputer.get(2L), - new ItemStack[] { ItemList.Circuit_Parts_InductorASMD.get(16L), - ItemList.Circuit_Parts_InductorXSMD.get(4L) }, - new ItemStack[] { ItemList.Circuit_Parts_CapacitorASMD.get(16L), - ItemList.Circuit_Parts_CapacitorXSMD.get(4L) }, - new ItemStack[] { ItemList.Circuit_Parts_ResistorASMD.get(16L), - ItemList.Circuit_Parts_ResistorXSMD.get(4L) }, - new ItemStack[] { ItemList.Circuit_Parts_TransistorASMD.get(16L), - ItemList.Circuit_Parts_TransistorXSMD.get(4L) }, - new ItemStack[] { ItemList.Circuit_Parts_DiodeASMD.get(16L), ItemList.Circuit_Parts_DiodeXSMD.get(4L) }, - ItemList.Circuit_Chip_Ram.get(48L), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUV, 32L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 16L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEV, 8L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUIV, 4L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, 2L) }, - new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, }, - new FluidStack[] { new FluidStack(solderIndalloy, 2880), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 10000), Materials.Radon.getGas(2500L), }, - ItemList.Circuit_Wetwaremainframe.get(1L), - 2000, - 300000); - - // Bioware SuperComputer - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Circuit_Biowarecomputer.get(1L), - 48000, - 128, - (int) TierEU.RECIPE_UV, - 8, - new Object[] { ItemList.Circuit_Board_Bio_Ultra.get(2L), ItemList.Circuit_Biowarecomputer.get(2L), - new ItemStack[] { ItemList.Circuit_Parts_TransistorASMD.get(16L), - ItemList.Circuit_Parts_TransistorXSMD.get(4L) }, - new ItemStack[] { ItemList.Circuit_Parts_ResistorASMD.get(16L), - ItemList.Circuit_Parts_ResistorXSMD.get(4L) }, - new ItemStack[] { ItemList.Circuit_Parts_CapacitorASMD.get(16L), - ItemList.Circuit_Parts_CapacitorXSMD.get(4L) }, - new ItemStack[] { ItemList.Circuit_Parts_DiodeASMD.get(16L), ItemList.Circuit_Parts_DiodeXSMD.get(4L) }, - ItemList.Circuit_Chip_NOR.get(32L), ItemList.Circuit_Chip_Ram.get(64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.NiobiumTitanium, 32L), - new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, }, - new FluidStack[] { new FluidStack(solderUEV, 1440), Materials.BioMediumSterilized.getFluid(1440L), - Materials.SuperCoolant.getFluid(10_000L), }, - ItemList.Circuit_Biowaresupercomputer.get(1L), - 4000, - (int) TierEU.RECIPE_UV); - - // Bio Mainframe - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Circuit_Biowaresupercomputer.get(1L), - 96000, - 256, - 1000000, - 16, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Tritanium, 4L), - ItemList.Circuit_Biowaresupercomputer.get(2L), - new ItemStack[] { ItemList.Circuit_Parts_InductorASMD.get(24L), - ItemList.Circuit_Parts_InductorXSMD.get(6L) }, - new ItemStack[] { ItemList.Circuit_Parts_TransistorASMD.get(24L), - ItemList.Circuit_Parts_TransistorXSMD.get(6L) }, - new ItemStack[] { ItemList.Circuit_Parts_ResistorASMD.get(24L), - ItemList.Circuit_Parts_ResistorXSMD.get(6L) }, - new ItemStack[] { ItemList.Circuit_Parts_CapacitorASMD.get(24L), - ItemList.Circuit_Parts_CapacitorXSMD.get(6L) }, - new ItemStack[] { ItemList.Circuit_Parts_DiodeASMD.get(24L), ItemList.Circuit_Parts_DiodeXSMD.get(6L) }, - ItemList.Circuit_Chip_Ram.get(64L), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEV, 32L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUIV, 16L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, 8L) }, - new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64) }, - new FluidStack[] { new FluidStack(solderUEV, 2880), Materials.BioMediumSterilized.getFluid(2880L), - Materials.SuperCoolant.getFluid(20_000L), }, - ItemList.Circuit_Biomainframe.get(1L), - 6000, - (int) TierEU.RECIPE_UHV); - - // Optical Assembly - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Circuit_OpticalProcessor.get(1L), - 192_000, - 256, - (int) TierEU.RECIPE_UHV, - 16, - new Object[] { ItemList.Circuit_Board_Optical.get(1L), ItemList.Circuit_OpticalProcessor.get(2L), - ItemList.Circuit_Parts_InductorXSMD.get(16L), ItemList.Circuit_Parts_CapacitorXSMD.get(20L), - ItemList.Circuit_Parts_ResistorXSMD.get(20L), ItemList.Circuit_Chip_NOR.get(32L), - ItemList.Circuit_Chip_Ram.get(64L), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.wireFine), 24, 10101), // Fine - // Lumiium - // Wire - new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, }, - new FluidStack[] { new FluidStack(solderUEV, 1440), Materials.Radon.getPlasma(1440L), - Materials.SuperCoolant.getFluid(10_000L), new FluidStack(FluidRegistry.getFluid("oganesson"), 500) }, - ItemList.Circuit_OpticalAssembly.get(1L), - 20 * 20, - (int) TierEU.RECIPE_UHV); - - // Optical Computer - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Circuit_OpticalAssembly.get(1L), - 384_000, - 512, - 4_000_000, - 32, - new Object[] { ItemList.Circuit_Board_Optical.get(2L), ItemList.Circuit_OpticalAssembly.get(2L), - ItemList.Circuit_Parts_TransistorXSMD.get(24L), ItemList.Circuit_Parts_ResistorXSMD.get(24L), - ItemList.Circuit_Parts_CapacitorXSMD.get(24L), ItemList.Circuit_Parts_DiodeXSMD.get(24L), - ItemList.Circuit_Chip_NOR.get(64L), ItemList.Circuit_Chip_SoC2.get(32L), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.wireFine), 32, 10101), // Fine - // Lumiium - // Wire - new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64), }, - new FluidStack[] { new FluidStack(solderUEV, 1440 * 2), Materials.Radon.getPlasma(1440L * 2), - Materials.SuperCoolant.getFluid(10_000L * 2), - new FluidStack(FluidRegistry.getFluid("oganesson"), 500 * 2) }, - ItemList.Circuit_OpticalComputer.get(1L), - 200 * 20, - (int) TierEU.RECIPE_UHV); - - // Optical Mainframe - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Circuit_OpticalComputer.get(1L), - 768_000, - 1024, - (int) TierEU.RECIPE_UEV, - 64, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Tritanium, 8), - ItemList.Circuit_OpticalComputer.get(2L), ItemList.Circuit_Parts_InductorXSMD.get(32L), - ItemList.Circuit_Parts_TransistorXSMD.get(32L), ItemList.Circuit_Parts_ResistorXSMD.get(32L), - ItemList.Circuit_Parts_CapacitorXSMD.get(32L), ItemList.Circuit_Parts_DiodeXSMD.get(32L), - ItemList.Circuit_Chip_SoC2.get(64L), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEV, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUIV, 32L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, 16L) }, - new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, - new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64) }, - new FluidStack[] { new FluidStack(solderUEV, 1440 * 4), Materials.Radon.getPlasma(1440L * 4), - Materials.SuperCoolant.getFluid(10_000L * 4), - new FluidStack(FluidRegistry.getFluid("oganesson"), 500 * 4) }, - ItemList.Circuit_OpticalMainframe.get(1L), - 300 * 20, - (int) TierEU.RECIPE_UEV); - - // Laser Vacuum Mirror - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.LASERpipe.get(1L), - 20_000, - 16, - 40_000, - 2, - new Object[] { CustomItemList.eM_Power.get(1L), CustomItemList.LASERpipe.get(4L), - CHRONOMATIC_GLASS.getPlateDense(1), ItemList.Circuit_Chip_QPIC.get(2L), - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L } }, - new FluidStack[] { Materials.Grade4PurifiedWater.getFluid(4000L) }, - CustomItemList.LASERpipeSmart.get(1L), - 10 * 20, - (int) TierEU.RECIPE_UHV); - - // Transcendent Plasma Mixer - TPM. - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.eM_energyTunnel6_UEV.get(1), - 32_000_000, - 4096, - (int) TierEU.RECIPE_UIV, - 1, - new Object[] { CustomItemList.eM_energyTunnel6_UEV.get(4), - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 32L }, ItemList.Electric_Pump_UIV.get(16), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 64), - - GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.TranscendentMetal, 16), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.TranscendentMetal, 64), - GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.TranscendentMetal, 64), - ItemList.EnergisedTesseract.get(32), - - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), }, - new FluidStack[] { MaterialsUEVplus.ExcitedDTCC.getFluid(2_048_000), - MaterialsUEVplus.ExcitedDTPC.getFluid(2_048_000), MaterialsUEVplus.ExcitedDTRC.getFluid(2_048_000), - MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), }, - ItemList.Machine_Multi_TranscendentPlasmaMixer.get(1), - 5 * MINUTES, - (int) TierEU.RECIPE_UIV); - - // Stargate Recipes - if (EternalSingularity.isModLoaded() && SGCraft.isModLoaded()) { - - final int baseStargateTime = 125_000 * 20; - - // Stargate shield foil - TT_recipeAdder.addResearchableAssemblylineRecipe( - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1L), - (int) TierEU.RECIPE_MAX, - 32768, - (int) TierEU.RECIPE_UXV, - 64, - new ItemStack[] { ItemList.Casing_Dim_Bridge.get(64), - CustomItemList.StabilisationFieldGeneratorTier8.get(64), - GT_OreDictUnificator.get("blockShirabon", 64L), GT_OreDictUnificator.get("blockShirabon", 64L), - GT_OreDictUnificator.get(OrePrefixes.block, MaterialsUEVplus.SpaceTime, 64L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 16L), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 8L), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Universium, 8L), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 8L), - GT_OreDictUnificator.get("plateDenseShirabon", 8L), ItemList.Sensor_UXV.get(16L), - ItemList.Emitter_UXV.get(16L), getModItem(EternalSingularity.ID, "eternal_singularity", 16L), - MaterialsUEVplus.Universium.getNanite(16), MaterialsUEVplus.BlackDwarfMatter.getNanite(16), - MaterialsUEVplus.WhiteDwarfMatter.getNanite(16) }, - new FluidStack[] { Materials.Neutronium.getMolten(32_768_000L), - MaterialsUEVplus.SpaceTime.getMolten(4 * 36864L), - Materials.SuperconductorUMVBase.getMolten(4 * 36864L), - MaterialsUEVplus.ExcitedDTEC.getFluid(4 * 36864L) }, - getItemContainer("StargateShieldingFoil").get(1L), - baseStargateTime, - (int) TierEU.RECIPE_UMV); - - // Stargate chevron - TT_recipeAdder.addResearchableAssemblylineRecipe( - getItemContainer("StargateShieldingFoil").get(1L), - (int) TierEU.RECIPE_MAX, - 32_768, - (int) TierEU.RECIPE_UXV, - 64, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.block, MaterialsUEVplus.TranscendentMetal, 64L), - GT_OreDictUnificator.get("blockShirabon", 64), CustomItemList.EOH_Reinforced_Spatial_Casing.get(64), - CustomItemList.EOH_Reinforced_Spatial_Casing.get(64), - - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 16L), - GT_OreDictUnificator - .get(OrePrefixes.frameGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 16L), - GT_OreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Ruby, 16L), - GT_OreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Jasper, 16L), - - GT_OreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Opal, 16L), - GT_OreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Sapphire, 16L), - GT_OreDictUnificator - .get(OrePrefixes.plateDense, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), - GT_OreDictUnificator.get("plateDenseShirabon", 8), - - ItemList.Electric_Motor_UXV.get(64L), ItemList.Electric_Piston_UXV.get(64L), - ItemList.Field_Generator_UXV.get(16L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 1L) - .splitStack(32) }, - new FluidStack[] { Materials.Neutronium.getMolten(32_768_000L), - MaterialsUEVplus.SpaceTime.getMolten(4 * 36864L), - MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(36864L), - MaterialsUEVplus.ExcitedDTEC.getFluid(4 * 36864L) }, - getItemContainer("StargateChevron").get(1L), - baseStargateTime, - (int) TierEU.RECIPE_UMV); - - // Stargate Frame Part - TT_recipeAdder.addResearchableAssemblylineRecipe( - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1L), - (int) TierEU.RECIPE_MAX, - 32_768, - (int) TierEU.RECIPE_UXV, - 64, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.SpaceTime, 64L), - GT_OreDictUnificator - .get(OrePrefixes.stickLong, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Neutronium, 64L), - - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Osmiridium, 64L), - GT_OreDictUnificator.get("stickLongShirabon", 64), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.stickLong), 64, 39), QUANTUM.getLongRod(64), - HYPOGEN.getLongRod(64), CELESTIAL_TUNGSTEN.getLongRod(64), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.stickLong), 64, 10106), - ASTRAL_TITANIUM.getLongRod(64), - - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.SuperconductorUMVBase, 64L), - GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Universium, 64L), - ABYSSAL.getLongRod(64), - GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.TranscendentMetal, 64L), }, - new FluidStack[] { Materials.Neutronium.getMolten(32_768_000L), - MaterialsUEVplus.SpaceTime.getMolten(4 * 36864L), MaterialsUEVplus.Universium.getMolten(4 * 36864L), - MaterialsUEVplus.ExcitedDTEC.getFluid(4 * 36864L) }, - getItemContainer("StargateFramePart").get(1L), - baseStargateTime, - (int) TierEU.RECIPE_UMV); - } - - // Dimensionally Transcendent Plasma Forge (DTPF) - if (EternalSingularity.isModLoaded()) { - - // DTPF Controller. - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Casing_Dim_Bridge.get(1), - 32_000_000, - 4096, - (int) TierEU.RECIPE_UIV, - 1, - new Object[] { ItemList.Casing_Dim_Bridge.get(4), - GT_Utility.copyAmount(16, ItemRegistry.megaMachines[0]), ItemList.Hatch_Energy_UEV.get(4L), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUEV, 6), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 20L }, ItemList.Field_Generator_UEV.get(4), - getModItem(EternalSingularity.ID, "eternal_singularity", 4L), - GregtechItemList.Laser_Lens_Special.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 64L), - ItemList.Electric_Pump_UEV.get(4), ItemList.ZPM3.get(1), - getModItem(IndustrialCraft2.ID, "blockMachine2", 1, 0) }, - new FluidStack[] { new FluidStack(FluidRegistry.getFluid("oganesson"), 128000), - new FluidStack(solderUEV, 36864 * 2), - new FluidStack(FluidRegistry.getFluid("molten.californium"), 36864), - Materials.NaquadahEnriched.getMolten(36864L) }, - ItemList.Machine_Multi_PlasmaForge.get(1), - 5 * MINUTES, - (int) TierEU.RECIPE_UIV); - - // Dimensional bridge. - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Casing_Dim_Injector.get(1), - 8_000_000, - 4096, - (int) TierEU.RECIPE_UIV, - 1, - new Object[] { ItemList.Casing_Dim_Trans.get(1), ItemList.MicroTransmitter_UV.get(1), - new Object[] { OrePrefixes.circuit.get(Materials.UV), 2L }, - getModItem(Avaritia.ID, "Singularity", 2L, 0), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 6), - getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 2, 0), ItemList.Field_Generator_UHV.get(1L) }, - new FluidStack[] { new FluidStack(FluidRegistry.getFluid("oganesson"), 8000), - new FluidStack(solderUEV, 1152 * 8), Materials.NaquadahEnriched.getMolten(1296L) }, - ItemList.Casing_Dim_Bridge.get(1), - 240 * 20, - (int) TierEU.RECIPE_UIV); - - // Dimensional injection casing. - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Casing_Dim_Trans.get(1), - 2_000_000, - 2048, - (int) TierEU.RECIPE_UIV, - 1, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 4), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Ledox, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.CallistoIce, 1), - ItemList.Reactor_Coolant_Sp_6.get(1L), LAURENIUM.getScrew(12), - new Object[] { OrePrefixes.circuit.get(Materials.IV), 2L }, - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 2), - ItemList.Super_Chest_IV.get(1), ItemList.Super_Tank_IV.get(1), - getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 1, 0), }, - new FluidStack[] { new FluidStack(FluidRegistry.getFluid("oganesson"), 1000), - new FluidStack(solderUEV, 576), Materials.NaquadahEnriched.getMolten(288L) }, - ItemList.Casing_Dim_Injector.get(1), - 20 * 20, - (int) TierEU.RECIPE_UIV); - - // Dimensionally Transcendent Casing. - TT_recipeAdder.addResearchableAssemblylineRecipe( - getModItem(Avaritia.ID, "Singularity", 1L, 0), - 2_000_000, - 2048, - (int) TierEU.RECIPE_UIV, - 1, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 6), - LAURENIUM.getScrew(12), ItemList.Reactor_Coolant_Sp_6.get(1L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 1), }, - new FluidStack[] { new FluidStack(FluidRegistry.getFluid("oganesson"), 500), - new FluidStack(solderUEV, 288), Materials.NaquadahEnriched.getMolten(144L) }, - ItemList.Casing_Dim_Trans.get(1), - 20 * 20, - (int) TierEU.RECIPE_UIV); - - // Transdimensional Alignment Matrix - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.MicroTransmitter_UV.get(1), - 32_000_000, - 8192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { CustomItemList.EOH_Infinite_Energy_Casing.get(1), - GregtechItemList.SpaceTimeContinuumRipper.get(4), ItemList.Robot_Arm_UMV.get(64), - ItemList.Sensor_UMV.get(16), ItemList.Field_Generator_UMV.get(4), ItemList.ZPM5.get(1), - ItemList.EnergisedTesseract.get(32), - GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.TranscendentMetal, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Flerovium, 64), - MyMaterial.metastableOganesson.get(OrePrefixes.plateDense, 32) }, - new FluidStack[] { new FluidStack(solderUEV, 1024 * 144), Materials.Lead.getPlasma(64 * 144), - MaterialsUEVplus.Space.getMolten(64 * 144) }, - ItemList.Transdimensional_Alignment_Matrix.get(1), - 50 * SECONDS, - (int) TierEU.RECIPE_UMV); - } - - // Deep Dark Portal - TT_recipeAdder.addResearchableAssemblylineRecipe( - getModItem(NewHorizonsCoreMod.ID, "item.HeavyDutyPlateTier8", 1, 0), - 16_777_216, - 2048, - (int) TierEU.RECIPE_UHV, - 64, - new Object[] { getModItem(ExtraUtilities.ID, "cobblestone_compressed", 1, 7), - getModItem(IndustrialCraft2.ID, "blockMachine2", 1, 0), - GT_OreDictUnificator.get(OrePrefixes.block, Materials.Infinity, 4L), - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, - getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 32, 0), ItemList.Robot_Arm_UMV.get(4), - ItemList.Emitter_UMV.get(4), ItemList.Sensor_UMV.get(4), }, - new FluidStack[] { new FluidStack(FluidRegistry.getFluid("oganesson"), 50000), - Materials.Infinity.getMolten(144L * 512), Materials.Cheese.getMolten(232000L), }, - ItemList.Block_BedrockiumCompressed.get(1), - 10000, - 5000000); - - // Batteries - { - - // Ultimate Battery - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Energy_Cluster.get(1L), - 12000, - 16, - 100000, - 3, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tritanium, 64L), - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, ItemList.Energy_Cluster.get(8L), - ItemList.Field_Generator_UV.get(2), ItemList.Circuit_Wafer_HPIC.get(64), - ItemList.Circuit_Wafer_HPIC.get(64), ItemList.Circuit_Parts_DiodeASMD.get(32), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 32), }, - new FluidStack[] { new FluidStack(solderIndalloy, 2880), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 16000) }, - ItemList.ZPM2.get(1), - 3000, - 400000); - - // Really Ultimate Battery - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.ZPM2.get(1L), - 24000, - 64, - 200000, - 6, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 32L), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 32L), - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, ItemList.ZPM2.get(8), - ItemList.Field_Generator_UHV.get(4), ItemList.Circuit_Wafer_UHPIC.get(64), - ItemList.Circuit_Wafer_UHPIC.get(64), ItemList.Circuit_Wafer_SoC2.get(32), - ItemList.Circuit_Parts_DiodeASMD.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUHV, 64), }, - new FluidStack[] { new FluidStack(solderUEV, 4608), Materials.Naquadria.getMolten(9216), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 32000) }, - ItemList.ZPM3.get(1), - 4000, - 1600000); - - // Extremely Ultimate Battery - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.ZPM3.get(1L), - 1_200_000, - 128, - (int) TierEU.RECIPE_UEV, - 16, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.InfinityCatalyst, 32L), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.InfinityCatalyst, 32L), - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, ItemList.ZPM3.get(8), - ItemList.Field_Generator_UEV.get(4), ItemList.Circuit_Wafer_PPIC.get(64), - ItemList.Circuit_Wafer_PPIC.get(64), ItemList.Circuit_Wafer_SoC2.get(64), - ItemList.Circuit_Parts_DiodeXSMD.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 64), }, - new FluidStack[] { new FluidStack(solderUEV, 9216), Materials.Quantium.getMolten(18_432), - Materials.Naquadria.getMolten(9_216 * 2), Materials.SuperCoolant.getFluid(64_000) }, - ItemList.ZPM4.get(1), - 250 * 20, - 6_400_000); - - if (GTPlusPlusEverglades.isModLoaded()) { - // Insanely Ultimate Battery - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.ZPM4.get(1), - 24_000_000, - 1_280, - (int) TierEU.RECIPE_UIV, - 32, - new Object[] { HYPOGEN.getPlateDouble(32), HYPOGEN.getPlateDouble(32), - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, ItemList.ZPM4.get(8L), - ItemList.Field_Generator_UIV.get(4), ItemList.Circuit_Wafer_QPIC.get(64), - ItemList.Circuit_Wafer_QPIC.get(64), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RawPicoWafer", 64), - ItemList.Circuit_Parts_DiodeXSMD.get(64), ItemList.Circuit_Parts_InductorXSMD.get(32), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUIV, 64) }, - new FluidStack[] { new FluidStack(solderUEV, 18_432), - ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getFluidStack(18_432), - Materials.Quantium.getMolten(18_432), Materials.SuperCoolant.getFluid(128_000) }, - ItemList.ZPM5.get(1), - 300 * 20, - (int) TierEU.RECIPE_UIV); - - // Mega Ultimate Battery - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.ZPM5.get(1L), - 480_000_000, - 12_288, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { ELEMENT.STANDALONE.DRAGON_METAL.getPlateDouble(32), - ELEMENT.STANDALONE.DRAGON_METAL.getPlateDouble(32), - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, ItemList.ZPM5.get(8L), - ItemList.Field_Generator_UMV.get(4), ItemList.Circuit_Wafer_QPIC.get(64), - ItemList.Circuit_Wafer_QPIC.get(64), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 64), - ItemList.Circuit_Parts_DiodeXSMD.get(64), ItemList.Circuit_Parts_InductorXSMD.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 64) }, - new FluidStack[] { new FluidStack(solderUEV, 36_864), - ELEMENT.STANDALONE.ASTRAL_TITANIUM.getFluidStack(36_864), - ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getFluidStack(36_864), - Materials.SuperCoolant.getFluid(256_000) }, - ItemList.ZPM6.get(1), - 350 * 20, - (int) TierEU.RECIPE_UMV); - } - } - - // MK4 Computer - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.Compressed_Fusion_Reactor.get(1), - 320000, - 512, - (int) TierEU.RECIPE_UHV, - 1, - new Object[] { GregtechItemList.Casing_Fusion_Internal.get(1), - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Neutronium, 4), - ItemList.Field_Generator_UHV.get(2), ItemList.Circuit_Wafer_QPIC.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 32) }, - new FluidStack[] { Materials.UUMatter.getFluid(50000), CINOBITE.getFluidStack(9216), - ALLOY.OCTIRON.getFluidStack(9216), ELEMENT.STANDALONE.ASTRAL_TITANIUM.getFluidStack(9216), }, - GregtechItemList.FusionComputer_UV2.get(1), - 6000, - (int) TierEU.RECIPE_UHV); - - // MK4 Coils - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Casing_Fusion_Coil.get(1L), - 160000, - 512, - (int) TierEU.RECIPE_UHV, - 1, - new Object[] { ItemList.Energy_LapotronicOrb2.get(16L), - new Object[] { OrePrefixes.circuit.get(Materials.LuV), 16L }, - new Object[] { OrePrefixes.circuit.get(Materials.UV), 8L }, - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 8), ItemList.Emitter_UHV.get(1), - ItemList.Sensor_UHV.get(1), ItemList.Casing_Fusion_Coil.get(1L), }, - new FluidStack[] { Materials.UUMatter.getFluid(8000L), CINOBITE.getFluidStack(2304), - ALLOY.OCTIRON.getFluidStack(2304), ELEMENT.STANDALONE.ASTRAL_TITANIUM.getFluidStack(2304), }, - GregtechItemList.Casing_Fusion_Internal.get(1), - 1200, - (int) TierEU.RECIPE_UHV); - - // MK4 Casing - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Casing_Fusion2.get(1L), - 80000, - 512, - (int) TierEU.RECIPE_UHV, - 1, - new Object[] { new Object[] { OrePrefixes.circuit.get(Materials.EV), 16L }, - new Object[] { OrePrefixes.circuit.get(Materials.IV), 8L }, - GT_OreDictUnificator.get(OrePrefixes.block, Materials.TungstenCarbide, 8), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 8), - ItemList.Electric_Motor_UHV.get(2), ItemList.Electric_Piston_UHV.get(1), - ItemList.Casing_Fusion2.get(1L), }, - new FluidStack[] { Materials.UUMatter.getFluid(1000L), CINOBITE.getFluidStack(576), - ALLOY.OCTIRON.getFluidStack(576), ELEMENT.STANDALONE.ASTRAL_TITANIUM.getFluidStack(576), }, - GregtechItemList.Casing_Fusion_External.get(1), - 300, - (int) TierEU.RECIPE_UHV); - - // MK5 Computer - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.FusionComputer_UV2.get(1), - 2560000, - 4096, - (int) TierEU.RECIPE_UEV, - 8, - new Object[] { GregtechItemList.Casing_Fusion_Internal2.get(1), - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, - GT_OreDictUnificator.get("plateDenseMetastableOganesson", 4), ItemList.Field_Generator_UEV.get(2), - getItemContainer("PicoWafer").get(64L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 32) }, - new FluidStack[] { ELEMENT.getInstance().CURIUM.getFluidStack(9216), - ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getFluidStack(9216), ALLOY.ABYSSAL.getFluidStack(9216), - ELEMENT.STANDALONE.DRAGON_METAL.getFluidStack(9216) }, - GregtechItemList.FusionComputer_UV3.get(1), - 6000, - (int) TierEU.RECIPE_UEV); - - // MK5 Coils - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.Casing_Fusion_Internal.get(1), - 2560000, - 4096, - (int) TierEU.RECIPE_UEV, - 8, - new Object[] { ItemList.Energy_Module.get(16), new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 16L }, - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 8L }, ELEMENT.STANDALONE.RHUGNOR.getPlate(8), - ItemList.Emitter_UEV.get(1), ItemList.Sensor_UEV.get(1), new ItemStack(compactFusionCoil, 1, 2) }, - new FluidStack[] { ELEMENT.getInstance().NEPTUNIUM.getFluidStack(2304), - ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getFluidStack(2304), ALLOY.ABYSSAL.getFluidStack(2304), - ELEMENT.STANDALONE.DRAGON_METAL.getFluidStack(2304) }, - GregtechItemList.Casing_Fusion_Internal2.get(1), - 1200, - (int) TierEU.RECIPE_UEV); - - // MK5 Casing - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.Casing_Fusion_External.get(1L), - 2560000, - 4096, - (int) TierEU.RECIPE_UEV, - 8, - new Object[] { new Object[] { OrePrefixes.circuit.get(Materials.IV), 16L }, - new Object[] { OrePrefixes.circuit.get(Materials.LuV), 8L }, - GT_OreDictUnificator.get(OrePrefixes.block, Materials.NaquadahAlloy, 8), - ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getPlate(8), ItemList.Electric_Motor_UEV.get(2), - ItemList.Electric_Piston_UEV.get(1), GregtechItemList.Casing_Fusion_External.get(1L) }, - new FluidStack[] { ELEMENT.getInstance().FERMIUM.getFluidStack(1152), - ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getFluidStack(1152), ALLOY.ABYSSAL.getFluidStack(1152), - ELEMENT.STANDALONE.DRAGON_METAL.getFluidStack(1152) }, - GregtechItemList.Casing_Fusion_External2.get(1), - 300, - (int) TierEU.RECIPE_UEV); - - if (BloodMagic.isModLoaded() && DraconicEvolution.isModLoaded()) { - // Draconic Evolution Fusion Crafter Controller - TT_recipeAdder.addResearchableAssemblylineRecipe( - new ItemStack(defcCasingBlock, 1, 8), - 16_777_216, - 1024, - (int) TierEU.RECIPE_UHV, - 8, - new Object[] { ItemList.AssemblingMachineUHV.get(1), new ItemStack(defcCasingBlock, 1, 8), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsBotania.GaiaSpirit, 1L), - ItemList.Casing_Coil_AwakenedDraconium.get(8L), ItemList.Electric_Motor_UHV.get(8L), - ItemList.Robot_Arm_UHV.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UHV), 4 }, - ItemList.Gravistar.get(4, new Object() {}), getModItem(Thaumcraft.ID, "ItemEldritchObject", 1, 3), - getModItem(BloodMagic.ID, "bloodMagicBaseItems", 8, 29), - getModItem(BloodMagic.ID, "bloodMagicBaseItems", 8, 28), }, - new FluidStack[] { new FluidStack(solderIndalloy, 2880), Materials.Void.getMolten(2880L), - Materials.DraconiumAwakened.getMolten(1440), }, - DraconicEvolutionFusionCrafter.get(1), - 1500, - (int) TierEU.RECIPE_UEV); - // DE Schematics Cores Tier 1 - TT_recipeAdder.addResearchableAssemblylineRecipe( - new ItemStack(defcCasingBlock, 1, 9), - 5_000_000, - 512, - 1_000_000, - 4, - new Object[] { getModItem(DraconicEvolution.ID, "draconicCore", 1, 0), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Draconium, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Ichorium, 1L), - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1 }, }, - new FluidStack[] { Materials.Sunnarium.getMolten(14400L), Materials.Void.getMolten(28800L), }, - DEFCDraconicSchematic.get(1), - 6000, - (int) TierEU.RECIPE_UV); - - // DE Schematics Cores Tier 2 - TT_recipeAdder.addResearchableAssemblylineRecipe( - getModItem(DraconicEvolution.ID, "draconicCore", 1, 0), - 10_000_000, - 1024, - 4_000_000, - 8, - new Object[] { getModItem(DraconicEvolution.ID, "draconicCore", 4, 0), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Draconium, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 1L), - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1 }, }, - new FluidStack[] { Materials.Neutronium.getMolten(14400L), Materials.Void.getMolten(57600L), }, - DEFCWyvernSchematic.get(1), - 12000, - (int) TierEU.RECIPE_UHV); - - // DE Schematics Cores Tier 3 - TT_recipeAdder.addResearchableAssemblylineRecipe( - getModItem(DraconicEvolution.ID, "wyvernCore", 1, 0), - 20_000_000, - 2048, - 16_000_000, - 16, - new Object[] { getModItem(DraconicEvolution.ID, "wyvernCore", 4, 0), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 1L), - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L } }, - new FluidStack[] { Materials.Infinity.getMolten(14400L), Materials.Void.getMolten(115200L), }, - DEFCAwakenedSchematic.get(1), - 24000, - (int) TierEU.RECIPE_UEV); - - // DE Schematics Cores Tier 4 - TT_recipeAdder.addResearchableAssemblylineRecipe( - getModItem(DraconicEvolution.ID, "awakenedCore", 1, 0), - 40_000_000, - 4096, - 64_000_000, - 64, - new Object[] { getModItem(DraconicEvolution.ID, "awakenedCore", 8, 0), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 4L), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 1L), - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, }, - new FluidStack[] { MaterialsUEVplus.SpaceTime.getMolten(14400L), Materials.Void.getMolten(230400L), }, - DEFCChaoticSchematic.get(1), - 36000, - (int) TierEU.RECIPE_UIV); - } - - // Debug maintenance hatch - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Hatch_AutoMaintenance.get(1L), - 2764800, - 128, - (int) TierEU.RECIPE_UV, - 6, - new Object[] { ItemList.Hatch_AutoMaintenance.get(1L), ItemList.Robot_Arm_UV.get(1L), - ItemList.Electric_Pump_UV.get(1L), ItemList.Conveyor_Module_UV.get(1L), - new Object[] { OrePrefixes.circuit.get(Materials.UV), 4L }, ItemList.Energy_LapotronicOrb2.get(1L), - ItemList.Duct_Tape.get(64L), ItemList.Duct_Tape.get(64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64L), }, - new FluidStack[] { Materials.Lubricant.getFluid(256000), new FluidStack(solderIndalloy, 1296), }, - CustomItemList.hatch_CreativeMaintenance.get(1), - 6000, - (int) TierEU.RECIPE_UV); - - // Debug uncertainty resolver - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.UncertaintyX_Hatch.get(1L), - 72_000_000, - 5_120, - 16_000_000, - 6, - new Object[] { CustomItemList.eM_Computer_Bus.get(1), CustomItemList.hatch_CreativeMaintenance.get(1), - ItemList.Field_Generator_UIV.get(1L), GregtechItemList.Laser_Lens_Special.get(4), - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 2 }, CustomItemList.DATApipe.get(64), - CustomItemList.DATApipe.get(64), ItemList.Cover_Screen.get(1) }, - new FluidStack[] { Materials.Iridium.getMolten(INGOTS * 100), new FluidStack(solderUEV, 2592), - new FluidStack(ELEMENT.getInstance().NEPTUNIUM.getPlasma(), 20000), - new FluidStack(ELEMENT.getInstance().FERMIUM.getPlasma(), 20000) }, - CustomItemList.hatch_CreativeUncertainty.get(1), - 200 * 20, - (int) TierEU.RECIPE_UIV); - } - - private void itemPartsUHVAsslineRecipes() { - - // ---------------------------------------------------------------------- - // ------------------------- Set up information ------------------------- - // ---------------------------------------------------------------------- - - Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null - ? FluidRegistry.getFluid("molten.indalloy140") - : FluidRegistry.getFluid("molten.solderingalloy"); - - int total_computation = 24000; - int comp_per_second = 32; - int research_eu_per_tick = (int) TierEU.RECIPE_UV; - int research_amperage = 1; - - FluidStack fluid_0 = Materials.Naquadria.getMolten(2592); - FluidStack fluid_1 = new FluidStack(solderIndalloy, 2592); - FluidStack fluid_2 = Materials.Lubricant.getFluid(4000); - - int crafting_time_in_ticks = 1000; - int crafting_eu_per_tick = (int) TierEU.RECIPE_UV; - - // ------------------------------------------------------------- - - // ------------------------- UHV Motor ------------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Motor_UV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.SamariumMagnetic, 4L), - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.CosmicNeutronium, 8L), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.CosmicNeutronium, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, Materials.CosmicNeutronium, 32L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 2L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Electric_Motor_UHV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // --------------------- UHV Electric Pump --------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Pump_UV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { ItemList.Electric_Motor_UHV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Neutronium, 2L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 4L), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.CosmicNeutronium, 16L), - new Object[] { OrePrefixes.ring.get(Materials.AnySyntheticRubber), 32L }, - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.CosmicNeutronium, 4L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 2L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Electric_Pump_UHV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ----------------------- UHV Conveyor ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Conveyor_Module_UV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { ItemList.Electric_Motor_UHV.get(2L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 2L), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.CosmicNeutronium, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, Materials.CosmicNeutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 2L), - new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 40L } }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Conveyor_Module_UHV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // -------------------- UHV Robot Arm -------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Robot_Arm_UV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.CosmicNeutronium, 8L), - GT_OreDictUnificator.get(OrePrefixes.gear, Materials.CosmicNeutronium, 2L), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.CosmicNeutronium, 6L), - ItemList.Electric_Motor_UHV.get(2L), ItemList.Electric_Piston_UHV.get(1L), - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 2L }, - new Object[] { OrePrefixes.circuit.get(Materials.UV), 4L }, - new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 8L }, - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 6L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Robot_Arm_UHV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // -------------------- UHV Electric Piston -------------------- - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Piston_UV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new ItemStack[] { ItemList.Electric_Motor_UHV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 6L), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.CosmicNeutronium, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, Materials.CosmicNeutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.CosmicNeutronium, 8L), - GT_OreDictUnificator.get(OrePrefixes.gear, Materials.CosmicNeutronium, 2L), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.CosmicNeutronium, 4L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 4L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Electric_Piston_UHV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ------------------------ UHV Emitter ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Emitter_UV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1L), - ItemList.Electric_Motor_UHV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.CosmicNeutronium, 8L), ItemList.Gravistar.get(8L), - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 4L }, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 7L) }, - new FluidStack[] { fluid_0, fluid_1 }, - ItemList.Emitter_UHV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ------------------------ UHV Sensor ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Sensor_UV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1L), - ItemList.Electric_Motor_UHV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 8L), ItemList.Gravistar.get(8L), - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 4L }, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 7L) }, - new FluidStack[] { fluid_0, fluid_1 }, - ItemList.Sensor_UHV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // --------------------------------------------------------------------- - - // ------------------------ UHV Field Generator ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Field_Generator_UV.get(1), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 6L), ItemList.Gravistar.get(4L), - ItemList.Emitter_UHV.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UEV), 4L }, - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 8L) }, - new FluidStack[] { fluid_0, fluid_1 }, - ItemList.Field_Generator_UHV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - } - - private void itemPartsUEVAsslineRecipes() { - - // ---------------------------------------------------------------------- - // ------------------------- Set up information ------------------------- - // ---------------------------------------------------------------------- - - Fluid mutated_living_solder = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null - ? FluidRegistry.getFluid("molten.mutatedlivingsolder") - : FluidRegistry.getFluid("molten.solderingalloy"); - - int total_computation = 48_000; - int comp_per_second = 64; - int research_eu_per_tick = (int) TierEU.RECIPE_UHV; - int research_amperage = 1; - - FluidStack fluid_0 = Materials.Quantium.getMolten(2592); - FluidStack fluid_1 = new FluidStack(mutated_living_solder, 2592); - FluidStack fluid_2 = Materials.Lubricant.getFluid(4000); - - int crafting_time_in_ticks = 1000; - int crafting_eu_per_tick = (int) TierEU.RECIPE_UHV; - - // ------------------------------------------------------------- - - // ------------------------- UEV Motor ------------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Motor_UHV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.TengamAttuned, 8L), - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Infinity, 16L), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Infinity, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, Materials.Infinity, 32L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 2L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Electric_Motor_UEV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // --------------------- UEV Electric Pump --------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Pump_UHV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { ItemList.Electric_Motor_UEV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 2L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 4L), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Infinity, 16L), - new Object[] { OrePrefixes.ring.get(Materials.AnySyntheticRubber), 64L }, - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Infinity, 4L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 2L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Electric_Pump_UEV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ----------------------- UEV Conveyor ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Conveyor_Module_UHV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { ItemList.Electric_Motor_UEV.get(2L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 2L), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Infinity, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 2L), - new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 64L }, - new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 16L } }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Conveyor_Module_UEV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // -------------------- UEV Robot Arm -------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Robot_Arm_UHV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Infinity, 8L), - GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Infinity, 2L), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Infinity, 6L), - ItemList.Electric_Motor_UEV.get(2L), ItemList.Electric_Piston_UEV.get(1L), - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 2L }, - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 4L }, - new Object[] { OrePrefixes.circuit.get(Materials.UV), 8L }, - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 6L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Robot_Arm_UEV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // -------------------- UEV Electric Piston -------------------- - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Piston_UHV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new ItemStack[] { ItemList.Electric_Motor_UEV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 6L), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Infinity, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Infinity, 8L), - GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Infinity, 2L), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Infinity, 4L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 4L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Electric_Piston_UEV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ------------------------ UEV Emitter ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Emitter_UHV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1L), - ItemList.Electric_Motor_UEV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Infinity, 16L), ItemList.Gravistar.get(16L), - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 4L }, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 7L) }, - new FluidStack[] { fluid_0, fluid_1 }, - ItemList.Emitter_UEV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ------------------------ UEV Sensor ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Sensor_UHV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1L), - ItemList.Electric_Motor_UEV.get(1), GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 8L), - ItemList.Gravistar.get(16), new Object[] { OrePrefixes.circuit.get(Materials.UEV), 4L }, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 7L) }, - new FluidStack[] { fluid_0, fluid_1 }, - ItemList.Sensor_UEV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // --------------------------------------------------------------------- - - // ------------------------ UEV Field Generator ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Field_Generator_UHV.get(1), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 6L), ItemList.Gravistar.get(8L), - ItemList.Emitter_UEV.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UIV), 4L }, - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 8L) }, - new FluidStack[] { fluid_0, fluid_1 }, - ItemList.Field_Generator_UEV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - } - - private void itemPartsUIVAsslineRecipes() { - - // ---------------------------------------------------------------------- - // ------------------------- Set up information ------------------------- - // ---------------------------------------------------------------------- - - Fluid mutated_living_solder = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null - ? FluidRegistry.getFluid("molten.mutatedlivingsolder") - : FluidRegistry.getFluid("molten.solderingalloy"); - Fluid celestialTungsten = FluidRegistry.getFluid("molten.celestialtungsten"); - - int total_computation = 96_000; - int comp_per_second = 128; - int research_eu_per_tick = (int) TierEU.RECIPE_UEV; - int research_amperage = 1; - - FluidStack fluid_0 = celestialTungsten != null ? new FluidStack(celestialTungsten, 576) : null; - FluidStack fluid_1 = new FluidStack(mutated_living_solder, 2592); - FluidStack fluid_2 = Materials.Lubricant.getFluid(4000); - - int crafting_time_in_ticks = 1000; - int crafting_eu_per_tick = (int) TierEU.RECIPE_UEV; - - // ------------------------------------------------------------- - - // ------------------------- UIV Motor ------------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Motor_UEV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.TengamAttuned, 16L), - GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.TranscendentMetal, 16L), - GT_OreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.TranscendentMetal, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.TranscendentMetal, 32L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 2L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Electric_Motor_UIV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // --------------------- UIV Electric Pump --------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Pump_UEV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { ItemList.Electric_Motor_UIV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.DraconiumAwakened, 2L), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 4L), - GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.TranscendentMetal, 16L), - new Object[] { OrePrefixes.ring.get(Materials.AnySyntheticRubber), 64L }, - GT_OreDictUnificator.get(OrePrefixes.rotor, MaterialsUEVplus.TranscendentMetal, 4L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 2L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Electric_Pump_UIV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ----------------------- UIV Conveyor ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Conveyor_Module_UEV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { ItemList.Electric_Motor_UIV.get(2L), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 2L), - GT_OreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.TranscendentMetal, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.TranscendentMetal, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 2L), - new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 64L }, - new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 16L } }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Conveyor_Module_UIV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // -------------------- UIV Robot Arm -------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Robot_Arm_UEV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.TranscendentMetal, 8L), - GT_OreDictUnificator.get(OrePrefixes.gear, MaterialsUEVplus.TranscendentMetal, 2L), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.TranscendentMetal, 6L), - ItemList.Electric_Motor_UIV.get(2L), ItemList.Electric_Piston_UIV.get(1L), - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 2L }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 4L }, - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 8L }, - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 6L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Robot_Arm_UIV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // -------------------- UIV Electric Piston -------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Piston_UEV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new ItemStack[] { ItemList.Electric_Motor_UIV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 6L), - GT_OreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.TranscendentMetal, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.TranscendentMetal, 64L), - GT_OreDictUnificator.get(OrePrefixes.stick, MaterialsUEVplus.TranscendentMetal, 8L), - GT_OreDictUnificator.get(OrePrefixes.gear, MaterialsUEVplus.TranscendentMetal, 2L), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.TranscendentMetal, 4L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 4L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Electric_Piston_UIV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ------------------------ UIV Emitter ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Emitter_UEV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1L), - ItemList.Electric_Motor_UIV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.stick, MaterialsUEVplus.TranscendentMetal, 16L), - ItemList.Gravistar.get(32L), new Object[] { OrePrefixes.circuit.get(Materials.UIV), 4L }, - TRINIUM_REINFORCED_STEEL.getFoil(64), LAFIUM.getFoil(64), CINOBITE.getFoil(64), PIKYONIUM.getFoil(64), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 7L) }, - new FluidStack[] { fluid_0, fluid_1 }, - ItemList.Emitter_UIV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ------------------------ UIV Sensor ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Sensor_UEV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1L), - ItemList.Electric_Motor_UIV.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 8L), - ItemList.Gravistar.get(32), new Object[] { OrePrefixes.circuit.get(Materials.UIV), 4L }, - TRINIUM_REINFORCED_STEEL.getFoil(64), LAFIUM.getFoil(64), CINOBITE.getFoil(64), PIKYONIUM.getFoil(64), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 7L) }, - new FluidStack[] { fluid_0, fluid_1 }, - ItemList.Sensor_UIV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // --------------------------------------------------------------------- - - // ------------------------ UIV Field Generator ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Field_Generator_UEV.get(1), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 6L), - ItemList.Gravistar.get(16L), ItemList.Emitter_UIV.get(4L), - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 4 }, - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 8L) }, - new FluidStack[] { fluid_0, fluid_1 }, - ItemList.Field_Generator_UIV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // --------------------------------------------------------------------- - - } - - private void itemPartsUMVAsslineRecipes() { - - // ---------------------------------------------------------------------- - // ------------------------- Set up information ------------------------- - // ---------------------------------------------------------------------- - - Fluid mutated_living_solder = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null - ? FluidRegistry.getFluid("molten.mutatedlivingsolder") - : FluidRegistry.getFluid("molten.solderingalloy"); - Fluid hypogen = FluidRegistry.getFluid("molten.hypogen"); - Fluid celestialTungsten = FluidRegistry.getFluid("molten.celestialtungsten"); - - int total_computation = 192_000; - int comp_per_second = 256; - int research_eu_per_tick = (int) TierEU.RECIPE_UIV; - int research_amperage = 1; - - FluidStack fluid_0 = hypogen != null ? new FluidStack(hypogen, 576) : null; - FluidStack fluid_1 = celestialTungsten != null ? new FluidStack(celestialTungsten, 576) : null; - FluidStack fluid_2 = new FluidStack(mutated_living_solder, 2592); - FluidStack fluid_3 = Materials.Lubricant.getFluid(4000); - - int crafting_time_in_ticks = 1000; - int crafting_eu_per_tick = (int) TierEU.RECIPE_UIV; - - // ------------------------------------------------------------- - - // ------------------------- UMV Motor ------------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Motor_UIV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.TengamAttuned, 32L), - GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.SpaceTime, 16L), - GT_OreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.SpaceTime, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.SpaceTime, 32L), HYPOGEN.getFineWire(64), - HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), - HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 2L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2, fluid_3 }, - ItemList.Electric_Motor_UMV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // --------------------- UMV Electric Pump --------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Pump_UIV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { ItemList.Electric_Motor_UMV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Infinity, 2L), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 4L), - GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SpaceTime, 16L), - new Object[] { OrePrefixes.ring.get(Materials.AnySyntheticRubber), 64L }, - GT_OreDictUnificator.get(OrePrefixes.rotor, MaterialsUEVplus.SpaceTime, 4L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 2L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2, fluid_3 }, - ItemList.Electric_Pump_UMV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ----------------------- UMV Conveyor ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Conveyor_Module_UIV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { ItemList.Electric_Motor_UMV.get(2L), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 2L), - GT_OreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.SpaceTime, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.SpaceTime, 64L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 2L), - new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 64L }, - new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 16L } }, - new FluidStack[] { fluid_0, fluid_1, fluid_2, fluid_3 }, - ItemList.Conveyor_Module_UMV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // -------------------- UMV Robot Arm -------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Robot_Arm_UIV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.SpaceTime, 8L), - GT_OreDictUnificator.get(OrePrefixes.gear, MaterialsUEVplus.SpaceTime, 2L), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.SpaceTime, 6L), - ItemList.Electric_Motor_UMV.get(2L), ItemList.Electric_Piston_UMV.get(1L), - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 2L }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 4L }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 8L }, - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 6L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2, fluid_3 }, - ItemList.Robot_Arm_UMV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // -------------------- UMV Electric Piston -------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Piston_UIV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new ItemStack[] { ItemList.Electric_Motor_UMV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 6L), - GT_OreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.SpaceTime, 8L), - GT_OreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.SpaceTime, 64L), - GT_OreDictUnificator.get(OrePrefixes.stick, MaterialsUEVplus.SpaceTime, 8L), - GT_OreDictUnificator.get(OrePrefixes.gear, MaterialsUEVplus.SpaceTime, 2L), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.SpaceTime, 4L), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 4L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2, fluid_3 }, - ItemList.Electric_Piston_UMV.get(1), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ------------------------ UMV Emitter ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Emitter_UIV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1L), - ItemList.Electric_Motor_UMV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.stick, MaterialsUEVplus.SpaceTime, 16L), - ItemList.Gravistar.get(64), new Object[] { OrePrefixes.circuit.get(Materials.UMV), 4L }, - CELESTIAL_TUNGSTEN.getFoil(64), QUANTUM.getFoil(64), ASTRAL_TITANIUM.getFoil(64), - TITANSTEEL.getFoil(64), GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 7L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Emitter_UMV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // ------------------------------------------------------------- - - // ------------------------ UMV Sensor ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Sensor_UIV.get(1L), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1L), - ItemList.Electric_Motor_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 8L), ItemList.Gravistar.get(64), - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 4L }, CELESTIAL_TUNGSTEN.getFoil(64), - QUANTUM.getFoil(64), ASTRAL_TITANIUM.getFoil(64), TITANSTEEL.getFoil(64), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 7L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Sensor_UMV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // --------------------------------------------------------------------- - - // ------------------------ UMV Field Generator ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Field_Generator_UIV.get(1), - total_computation, - comp_per_second, - research_eu_per_tick, - research_amperage, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 6L), - ItemList.Gravistar.get(32L), ItemList.Emitter_UMV.get(4L), - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 4 }, HYPOGEN.getFineWire(64), - HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), - HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 8L) }, - new FluidStack[] { fluid_0, fluid_1, fluid_2 }, - ItemList.Field_Generator_UMV.get(1L), - crafting_time_in_ticks, - crafting_eu_per_tick); - - // --------------------------------------------------------------------- - - } - - private void itemPartsUXVAsslineRecipes() { - - // ---------------------------------------------------------------------- - // ------------------------- Set up information ------------------------- - // ---------------------------------------------------------------------- - - Fluid mutatedLivingSolder = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null - ? FluidRegistry.getFluid("molten.mutatedlivingsolder") - : FluidRegistry.getFluid("molten.solderingalloy"); - - FluidStack moltenMHDCSM_576 = MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(576); - FluidStack moltenSpaceTime_576 = MaterialsUEVplus.SpaceTime.getMolten(576); - FluidStack moltenUniversium_576 = MaterialsUEVplus.Universium.getMolten(576); - FluidStack lubricantFluid_8000 = Materials.Lubricant.getFluid(8000); - FluidStack solderingAlloy_14_400 = new FluidStack(mutatedLivingSolder, 14_400); - - int totalComputation = 384_000; - int compPerSecond = 512; - int researchEuPerTick = 64_000_000; - int researchAmperage = 2; - - int craftingTimeInTicks = 1000; - int craftingEuPerTick = (int) TierEU.RECIPE_UMV; - - // ------------------------------------------------------------- - - // ------------------------- UXV Motor ------------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Motor_UMV.get(1L), - totalComputation, - compPerSecond, - researchEuPerTick, - researchAmperage, - new ItemStack[] { ItemList.EnergisedTesseract.get(1), - GT_OreDictUnificator - .get(OrePrefixes.stickLong, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 16L), - GT_OreDictUnificator - .get(OrePrefixes.ring, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), - GT_OreDictUnificator - .get(OrePrefixes.round, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 32L), - - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.SuperconductorUMVBase, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.SuperconductorUMVBase, 64L), - - GT_OreDictUnificator - .get(OrePrefixes.wireFine, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), - GT_OreDictUnificator - .get(OrePrefixes.wireFine, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), - - GT_OreDictUnificator.get(OrePrefixes.wireFine, MaterialsUEVplus.Universium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, MaterialsUEVplus.Universium, 64L), - - GT_OreDictUnificator.get("wireFineShirabon", 64L), GT_OreDictUnificator.get("wireFineShirabon", 64L), - - GT_OreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 2L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 2L), - Materials.Neutronium.getNanite(4) }, - new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, lubricantFluid_8000 }, - ItemList.Electric_Motor_UXV.get(1L), - craftingTimeInTicks, - craftingEuPerTick); - - // ------------------------------------------------------------- - - // --------------------- UXV Electric Pump --------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Pump_UMV.get(1L), - totalComputation, - compPerSecond, - researchEuPerTick, - researchAmperage, - new Object[] { ItemList.Electric_Motor_UXV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, MaterialsUEVplus.SpaceTime, 2L), - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 4L), - GT_OreDictUnificator - .get(OrePrefixes.screw, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 16L), - GT_OreDictUnificator.get(OrePrefixes.ring, MaterialsKevlar.Kevlar, 64L), - GT_OreDictUnificator.get("ringRadoxPoly", 64L), - GT_OreDictUnificator - .get(OrePrefixes.rotor, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 4L), - GT_OreDictUnificator.get("rotorShirabon", 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 2L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 2L), - Materials.Neutronium.getNanite(4) }, - new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, lubricantFluid_8000 }, - ItemList.Electric_Pump_UXV.get(1), - craftingTimeInTicks, - craftingEuPerTick); - - // ------------------------------------------------------------- - - // ----------------------- UXV Conveyor ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Conveyor_Module_UMV.get(1L), - totalComputation, - compPerSecond, - researchEuPerTick, - researchAmperage, - new Object[] { ItemList.Electric_Motor_UXV.get(2L), - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2L), - GT_OreDictUnificator - .get(OrePrefixes.ring, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), - GT_OreDictUnificator - .get(OrePrefixes.round, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 2L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 2L), - MaterialsKevlar.Kevlar.getPlates(64), MaterialsKevlar.Kevlar.getPlates(16), - GT_OreDictUnificator.get("plateRadoxPoly", 64L), GT_OreDictUnificator.get("plateRadoxPoly", 16L), - Materials.Neutronium.getNanite(4) }, - new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, lubricantFluid_8000 }, - ItemList.Conveyor_Module_UXV.get(1), - craftingTimeInTicks, - craftingEuPerTick); - - // ------------------------------------------------------------- - - // -------------------- UXV Robot Arm -------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Robot_Arm_UMV.get(1L), - totalComputation, - compPerSecond, - researchEuPerTick, - researchAmperage, - new Object[] { - GT_OreDictUnificator - .get(OrePrefixes.stickLong, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), - GT_OreDictUnificator - .get(OrePrefixes.gear, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2L), - GT_OreDictUnificator.get("gearGtShirabon", 2L), - GT_OreDictUnificator - .get(OrePrefixes.gearGtSmall, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 6L), - GT_OreDictUnificator.get("gearGtSmallShirabon", 6L), ItemList.Electric_Motor_UXV.get(2L), - ItemList.Electric_Piston_UXV.get(1L), new Object[] { OrePrefixes.circuit.get(Materials.UXV), 2L }, - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 4L }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 8L }, - GT_OreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 6L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 6L), - Materials.Neutronium.getNanite(8) }, - new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, lubricantFluid_8000 }, - ItemList.Robot_Arm_UXV.get(1L), - craftingTimeInTicks, - craftingEuPerTick); - - // ------------------------------------------------------------- - - // -------------------- UXV Electric Piston -------------------- - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Electric_Piston_UMV.get(1L), - totalComputation, - compPerSecond, - researchEuPerTick, - researchAmperage, - new ItemStack[] { ItemList.Electric_Motor_UXV.get(1L), - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 6L), - GT_OreDictUnificator - .get(OrePrefixes.ring, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), - GT_OreDictUnificator - .get(OrePrefixes.round, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), - GT_OreDictUnificator - .get(OrePrefixes.stick, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), - GT_OreDictUnificator - .get(OrePrefixes.gear, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2L), - GT_OreDictUnificator.get("gearGtShirabon", 2L), - GT_OreDictUnificator - .get(OrePrefixes.gearGtSmall, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 4L), - GT_OreDictUnificator.get("gearGtSmallShirabon", 4L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 4L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 4L), - Materials.Neutronium.getNanite(4) }, - new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, lubricantFluid_8000 }, - ItemList.Electric_Piston_UXV.get(1), - craftingTimeInTicks, - craftingEuPerTick); - - // ------------------------------------------------------------- - - // ------------------------ UXV Emitter ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Emitter_UMV.get(1L), - totalComputation, - compPerSecond, - researchEuPerTick, - researchAmperage, - new Object[] { - GT_OreDictUnificator - .get(OrePrefixes.frameGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1L), - ItemList.Electric_Motor_UXV.get(1L), - GT_OreDictUnificator - .get(OrePrefixes.stick, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 16L), - ItemList.NuclearStar.get(16), new Object[] { OrePrefixes.circuit.get(Materials.UXV), 4L }, - GT_OreDictUnificator - .get(OrePrefixes.foil, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64), - GT_OreDictUnificator.get("foilShirabon", 64), - GT_OreDictUnificator.get(OrePrefixes.foil, MaterialsUEVplus.SpaceTime, 64), - GT_OreDictUnificator.get(OrePrefixes.foil, MaterialsUEVplus.Universium, 64), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 7L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 7L), - Materials.Neutronium.getNanite(8) - - }, - new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, solderingAlloy_14_400 }, - ItemList.Emitter_UXV.get(1L), - craftingTimeInTicks, - craftingEuPerTick); - - // ------------------------------------------------------------- - - // ------------------------ UXV Sensor ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Sensor_UMV.get(1L), - totalComputation, - compPerSecond, - researchEuPerTick, - researchAmperage, - new Object[] { - GT_OreDictUnificator - .get(OrePrefixes.frameGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1L), - ItemList.Electric_Motor_UXV.get(1L), - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), - ItemList.NuclearStar.get(16), new Object[] { OrePrefixes.circuit.get(Materials.UXV), 4L }, - GT_OreDictUnificator - .get(OrePrefixes.foil, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64), - GT_OreDictUnificator.get("foilShirabon", 64), - GT_OreDictUnificator.get(OrePrefixes.foil, MaterialsUEVplus.SpaceTime, 64), - GT_OreDictUnificator.get(OrePrefixes.foil, MaterialsUEVplus.Universium, 64), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 7L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 7L), - Materials.Neutronium.getNanite(8) }, - new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, solderingAlloy_14_400 }, - ItemList.Sensor_UXV.get(1L), - craftingTimeInTicks, - craftingEuPerTick); - - // --------------------------------------------------------------------- - - // ------------------------ UXV Field Generator ------------------------ - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Field_Generator_UMV.get(1), - totalComputation, - compPerSecond, - researchEuPerTick, - researchAmperage, - new Object[] { - GT_OreDictUnificator - .get(OrePrefixes.frameGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1L), - GT_OreDictUnificator - .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 6L), - ItemList.NuclearStar.get(64L), ItemList.Emitter_UXV.get(4L), - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 8 }, - - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.SuperconductorUMVBase, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.SuperconductorUMVBase, 64L), - GT_OreDictUnificator - .get(OrePrefixes.wireFine, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), - GT_OreDictUnificator - .get(OrePrefixes.wireFine, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, MaterialsUEVplus.Universium, 64L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, MaterialsUEVplus.Universium, 64L), - GT_OreDictUnificator.get("wireFineShirabon", 64L), GT_OreDictUnificator.get("wireFineShirabon", 64L), - - GT_OreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 8L), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 8L), - Materials.Neutronium.getNanite(12) }, - new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, solderingAlloy_14_400 }, - ItemList.Field_Generator_UXV.get(1L), - craftingTimeInTicks, - craftingEuPerTick); - - // --------------------------------------------------------------------- - - } - - private void addEOHRecipes() { - Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null - ? FluidRegistry.getFluid("molten.mutatedlivingsolder") - : FluidRegistry.getFluid("molten.solderingalloy"); - ItemStack largeShirabonPlate = TGregUtils.newItemStack(Materials.get("Shirabon"), PartTypes.LargePlate, 1); - ItemStack largeInfinityPlate = new ItemStack(TinkerTools.largePlate, 1, Tonkers.infinityMetalId); - ItemStack largeBedrockiumPlate = new ItemStack(TinkerTools.largePlate, 1, ExtraUtils.tcon_bedrock_material_id); - ItemStack largeCosmicNeutroniumPlate = new ItemStack(TinkerTools.largePlate, 1, Tonkers.neutroniumId); - - final FluidStack[] specialFluid = new FluidStack[] { MaterialsUEVplus.SpaceTime.getMolten(1_440), - MaterialsUEVplus.SpaceTime.getMolten(1_440), MaterialsUEVplus.SpaceTime.getMolten(1_440), - MaterialsUEVplus.SpaceTime.getMolten(1_440), MaterialsUEVplus.SpaceTime.getMolten(1_440), - MaterialsUEVplus.SpaceTime.getMolten(1_440), MaterialsUEVplus.SpaceTime.getMolten(1_440), - MaterialsUEVplus.SpaceTime.getMolten(1_440), MaterialsUEVplus.SpaceTime.getMolten(1_440) }; - - final ItemStack[] plateList = new ItemStack[] { - // Dense Shirabon plate. - GT_OreDictUnificator.get("boltShirabon", 2), - GT_OreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.WhiteDwarfMatter, 2), - GT_OreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.WhiteDwarfMatter, 8), - GT_OreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.WhiteDwarfMatter, 32), - GT_OreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.BlackDwarfMatter, 2), - GT_OreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.BlackDwarfMatter, 8), - GT_OreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.BlackDwarfMatter, 32), - GT_OreDictUnificator - .get(OrePrefixes.bolt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2), - GT_OreDictUnificator - .get(OrePrefixes.bolt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8) }; - - // EOH Controller Recipe. - { - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Machine_Multi_PlasmaForge.get(1), - 512_000_000, // total comp - 2 * 16_384, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - 64, // amperage - new Object[] { - // Space elevator controller. - ItemList.SpaceElevatorController.get(16), ItemList.Machine_Multi_PlasmaForge.get(4), - - CustomItemList.EOH_Infinite_Energy_Casing.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier0.get(1), - CustomItemList.SpacetimeCompressionFieldGeneratorTier0.get(1), - CustomItemList.StabilisationFieldGeneratorTier0.get(1), - - CustomItemList.Machine_Multi_Computer.get(64), ItemList.AcceleratorUV.get(1), - ItemList.Quantum_Chest_IV.get(64), - // Void miner III. - GT_Utility.copyAmount(64, ItemRegistry.voidminer[2]), - - ItemList.Field_Generator_UMV.get(16), ItemList.Robot_Arm_UMV.get(16), ItemList.ZPM4.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 64) }, - new FluidStack[] { MaterialsUEVplus.Time.getMolten(144_000), MaterialsUEVplus.Space.getMolten(144_000), - FluidUtils.getFluidStack("molten.metastable oganesson", 144 * 256 * 4), - FluidUtils.getFluidStack("molten.shirabon", 144 * 256 * 4), }, - CustomItemList.Machine_Multi_EyeOfHarmony.get(1), - 400 * MINUTES, - (int) TierEU.RECIPE_UMV); - } - - // EOH Spatial Individual Casing - { - TT_recipeAdder.addResearchableAssemblylineRecipe( - // Dyson Swarm Module Deployment Unit Base Casing - getModItem(GalaxySpace.ID, "dysonswarmparts", 1, 2), - 256_000_000, // total comp - 16_384, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - 32, // amperage - new Object[] { - // Space elevator blocks. - getModItem(GTNHIntergalactic.ID, "gt.blockcasingsSE", 64, 0), - // Cosmic neutronium block. - getModItem(Avaritia.ID, "Resource_Block", 64, 0), - GT_OreDictUnificator.get(OrePrefixes.block, Materials.Neutronium, 64), - GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Neutronium, 48), largeBedrockiumPlate, - largeCosmicNeutroniumPlate, largeShirabonPlate, largeInfinityPlate, - // UV Solar panel - getModItem(SuperSolarPanels.ID, "PhotonicSolarPanel", 1, 0), ItemList.Quantum_Chest_IV.get(1), - // Gravitation Engine - getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), ItemList.EnergisedTesseract.get(1) }, - - new FluidStack[] { Materials.Neutronium.getMolten(144 * 256 * 4), - Materials.CosmicNeutronium.getMolten(144 * 256 * 4), new FluidStack(solderUEV, 144 * 256 * 2), - MaterialsUEVplus.Space.getMolten(1_440) }, - CustomItemList.EOH_Reinforced_Spatial_Casing.get(4), - 10_000, - (int) TierEU.RECIPE_UMV); - } - - // EOH Spacetime Compression - { - // ME Digital singularity. - final ItemStack ME_Singularity = getModItem( - "appliedenergistics2", - "item.ItemExtremeStorageCell.Singularity", - 1); - final ItemStack baseCasing = CustomItemList.EOH_Reinforced_Spatial_Casing.get(1); - - int baseCompPerSec = 16_384; - - int set; - int tier; - int absoluteTier; - - // T0 - Shirabon - // T1 - White Dwarf Matter - // T2 - White Dwarf Matter - // T3 - White Dwarf Matter - // T4 - Black Dwarf Matter - // T5 - Black Dwarf Matter - // T6 - Black Dwarf Matter - // T7 - Black Dwarf Matter - // T8 - MHDCSM. - - { - tier = 1; - set = 1; - - absoluteTier = 0; - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.EOH_Reinforced_Spatial_Casing.get(1), - (absoluteTier + 1) * 48_000_000, // total comp - (absoluteTier + 1) * baseCompPerSec, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - (absoluteTier + 1) * 8, // amperage - new Object[] { baseCasing, - // T7 Yotta cell. - new ItemStack(yottaFluidTankCell, tier, (5 + set)), - // quantum tank V (max tier) - ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), - // Inf chest - getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), - // Cosmic fabric manipulator - GregtechItemList.CosmicFabricManipulator.get(tier), ME_Singularity, plateList[absoluteTier], - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, - new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), - MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier] }, - CustomItemList.SpacetimeCompressionFieldGeneratorTier0.get(1), - (absoluteTier + 1) * 4_000 * 20, - (int) TierEU.RECIPE_UMV); - - tier++; - absoluteTier = 1; - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.SpacetimeCompressionFieldGeneratorTier0.get(1), - (absoluteTier + 1) * 48_000_000, // total comp - (absoluteTier + 1) * baseCompPerSec, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - (absoluteTier + 1) * 8, // amperage - new Object[] { baseCasing, - // T7 Yotta cell. - new ItemStack(yottaFluidTankCell, tier, (5 + set)), - // quantum tank V (max tier) - ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), - // Inf chest - getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), - // Cosmic fabric manipulator - GregtechItemList.CosmicFabricManipulator.get(tier), ME_Singularity, ME_Singularity, - plateList[absoluteTier], GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, - new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), - MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier] }, - CustomItemList.SpacetimeCompressionFieldGeneratorTier1.get(1), - (absoluteTier + 1) * 4_000 * 20, - (int) TierEU.RECIPE_UMV); - - tier++; - absoluteTier = 2; - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.SpacetimeCompressionFieldGeneratorTier1.get(1), - (absoluteTier + 1) * 48_000_000, // total comp - (absoluteTier + 1) * baseCompPerSec, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - (absoluteTier + 1) * 8, // amperage - new Object[] { baseCasing, - // T7 Yotta cell. - new ItemStack(yottaFluidTankCell, tier, (5 + set)), - // quantum tank V (max tier) - ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), - // Inf chest - getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), - // Cosmic fabric manipulator - GregtechItemList.CosmicFabricManipulator.get(tier), ME_Singularity, ME_Singularity, - ME_Singularity, plateList[absoluteTier], - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, - new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), - MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, - CustomItemList.SpacetimeCompressionFieldGeneratorTier2.get(1), - (absoluteTier + 1) * 4_000 * 20, - (int) TierEU.RECIPE_UMV); - } - - { - tier = 1; - set = 2; - absoluteTier = 3; - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.SpacetimeCompressionFieldGeneratorTier2.get(1), - (absoluteTier + 1) * 48_000_000, // total comp - (absoluteTier + 1) * baseCompPerSec, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - (absoluteTier + 1) * 8, // amperage - new Object[] { baseCasing, - // T8 Yotta cell. - new ItemStack(yottaFluidTankCell, tier, (5 + set)), - // quantum tank V (max tier) - ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), - // Inf chest - getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), - // Infinity infused manipulator - GregtechItemList.InfinityInfusedManipulator.get(tier), ME_Singularity, ME_Singularity, - ME_Singularity, ME_Singularity, plateList[absoluteTier], - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, - new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), - MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, - CustomItemList.SpacetimeCompressionFieldGeneratorTier3.get(1), - (absoluteTier + 1) * 4_000 * 20, - (int) TierEU.RECIPE_UMV); - - tier++; - absoluteTier = 4; - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.SpacetimeCompressionFieldGeneratorTier3.get(1), - (absoluteTier + 1) * 48_000_000, // total comp - (absoluteTier + 1) * baseCompPerSec, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - (absoluteTier + 1) * 8, // amperage - new Object[] { baseCasing, - // T8 Yotta cell. - new ItemStack(yottaFluidTankCell, tier, (5 + set)), - // quantum tank V (max tier) - ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), - // Inf chest - getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), - // Infinity infused manipulator - GregtechItemList.InfinityInfusedManipulator.get(tier), ME_Singularity, ME_Singularity, - ME_Singularity, ME_Singularity, ME_Singularity, plateList[absoluteTier], - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, - new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), - MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, - CustomItemList.SpacetimeCompressionFieldGeneratorTier4.get(1), - (absoluteTier + 1) * 4_000 * 20, - (int) TierEU.RECIPE_UMV); - - tier++; - absoluteTier = 5; - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.SpacetimeCompressionFieldGeneratorTier4.get(1), - (absoluteTier + 1) * 48_000_000, // total comp - (absoluteTier + 1) * baseCompPerSec, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - (absoluteTier + 1) * 8, // amperage - new Object[] { baseCasing, - // T8 Yotta cell. - new ItemStack(yottaFluidTankCell, tier, (5 + set)), - // quantum tank V (max tier) - ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), - // Inf chest - getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), - // Infinity infused manipulator - GregtechItemList.InfinityInfusedManipulator.get(tier), ME_Singularity, ME_Singularity, - ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, plateList[absoluteTier], - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, - new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), - MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, - CustomItemList.SpacetimeCompressionFieldGeneratorTier5.get(1), - (absoluteTier + 1) * 4_000 * 20, - (int) TierEU.RECIPE_UMV); - } - - { - tier = 1; - set = 3; - absoluteTier = 6; - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.SpacetimeCompressionFieldGeneratorTier5.get(1), - (absoluteTier + 1) * 48_000_000, // total comp - (absoluteTier + 1) * baseCompPerSec, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - (absoluteTier + 1) * 8, // amperage - new Object[] { baseCasing, - // T9 Yotta cell. - new ItemStack(yottaFluidTankCell, tier, (5 + set)), - // quantum tank V (max tier) - ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), - // Inf chest - getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), - // Spacetime continuum ripper - GregtechItemList.SpaceTimeContinuumRipper.get(tier), ME_Singularity, ME_Singularity, - ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, - plateList[absoluteTier], GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, - new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), - MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, - CustomItemList.SpacetimeCompressionFieldGeneratorTier6.get(1), - (absoluteTier + 1) * 4_000 * 20, - (int) TierEU.RECIPE_UMV); - - tier++; - absoluteTier = 7; - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.SpacetimeCompressionFieldGeneratorTier6.get(1), - (absoluteTier + 1) * 48_000_000, // total comp - (absoluteTier + 1) * baseCompPerSec, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - (absoluteTier + 1) * 8, // amperage - new Object[] { baseCasing, - // T9 Yotta cell. - new ItemStack(yottaFluidTankCell, tier, (5 + set)), - // quantum tank V (max tier) - ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), - // Inf chest - getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), - // Spacetime continuum ripper - GregtechItemList.SpaceTimeContinuumRipper.get(tier), ME_Singularity, ME_Singularity, - ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, - plateList[absoluteTier], GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, - new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), - MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, - CustomItemList.SpacetimeCompressionFieldGeneratorTier7.get(1), - (absoluteTier + 1) * 4_000 * 20, - (int) TierEU.RECIPE_UMV); - - tier++; - absoluteTier = 8; - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.SpacetimeCompressionFieldGeneratorTier7.get(1), - (absoluteTier + 1) * 48_000_000, // total comp - (absoluteTier + 1) * baseCompPerSec, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - (absoluteTier + 1) * 8, // amperage - new Object[] { baseCasing, - // T9 Yotta cell. - new ItemStack(yottaFluidTankCell, tier, (5 + set)), - // quantum tank V (max tier) - ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), - // Inf chest - getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), - // Spacetime continuum ripper - GregtechItemList.SpaceTimeContinuumRipper.get(tier), ME_Singularity, ME_Singularity, - ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, - ME_Singularity, plateList[absoluteTier], - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, - new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), - MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, - CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(1), - (absoluteTier + 1) * 4_000 * 20, - (int) TierEU.RECIPE_UMV); - } - } - - // EOH Time Dilation Field Generators. - { - final ItemStack baseCasing = CustomItemList.EOH_Reinforced_Temporal_Casing.get(1); - - int baseCompPerSec = 16_384; - - // T0 - Shirabon - // T1 - White Dwarf Matter - // T2 - White Dwarf Matter - // T3 - White Dwarf Matter - // T4 - Black Dwarf Matter - // T5 - Black Dwarf Matter - // T6 - Black Dwarf Matter - // T7 - Black Dwarf Matter - // T8 - MHDCSM. - - final ItemStack[] fusionReactors = new ItemStack[] { ItemList.FusionComputer_ZPMV.get(1), - ItemList.FusionComputer_ZPMV.get(2), ItemList.FusionComputer_ZPMV.get(3), - ItemList.FusionComputer_UV.get(1), ItemList.FusionComputer_UV.get(2), ItemList.FusionComputer_UV.get(3), - // MK4 Fusion Computer. - GregtechItemList.FusionComputer_UV2.get(1), GregtechItemList.FusionComputer_UV2.get(2), - GregtechItemList.FusionComputer_UV2.get(3) }; - - final ItemStack[] fusionCoils = new ItemStack[] { new ItemStack(compactFusionCoil, 1, 1), - new ItemStack(compactFusionCoil, 2, 1), new ItemStack(compactFusionCoil, 3, 1), - new ItemStack(compactFusionCoil, 1, 2), new ItemStack(compactFusionCoil, 2, 2), - new ItemStack(compactFusionCoil, 3, 2), new ItemStack(compactFusionCoil, 1, 3), - new ItemStack(compactFusionCoil, 2, 3), new ItemStack(compactFusionCoil, 3, 3) }; - - final ItemStack[] researchStuff = new ItemStack[] { baseCasing, - CustomItemList.TimeAccelerationFieldGeneratorTier0.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier1.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier2.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier3.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier4.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier5.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier6.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier7.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier8.get(1) }; - - // Spectral Components - // Cycling should fix issues with conflicting recipes for T1-T2, T4-T5 & T7-T8 - final ItemStack[] spectralComponents = new ItemStack[] { - // Red Spectral Component - getModItem(SuperSolarPanels.ID, "redcomponent", 64), - // Green Spectral Component - getModItem(SuperSolarPanels.ID, "greencomponent", 64), - // Blue Spectral Component - getModItem(SuperSolarPanels.ID, "bluecomponent", 64) }; - - for (int absoluteTier = 0; absoluteTier < 9; absoluteTier++) { - - TT_recipeAdder.addResearchableAssemblylineRecipe( - researchStuff[absoluteTier], - (absoluteTier + 1) * 48_000_000, // total comp - (absoluteTier + 1) * baseCompPerSec, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - (absoluteTier + 1) * 8, // amperage - new Object[] { baseCasing, fusionReactors[absoluteTier], fusionCoils[absoluteTier], - // UV Solar panel - getModItem(SuperSolarPanels.ID, "PhotonicSolarPanel", absoluteTier + 1, 0), - - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, absoluteTier + 1), - // Red Spectral Component - spectralComponents[absoluteTier % spectralComponents.length], - // Green Spectral Component - spectralComponents[(absoluteTier + 1) % spectralComponents.length], - // Blue Spectral Component - spectralComponents[(absoluteTier + 2) % spectralComponents.length], - - plateList[absoluteTier], - // Dyson Swarm Module Deployment Unit Base Casing - getModItem(GalaxySpace.ID, "dysonswarmparts", (absoluteTier + 1) * 4, 2), - // Dyson Swarm Energy Receiver Dish Block - getModItem(GalaxySpace.ID, "dysonswarmparts", (absoluteTier + 1) * 4, 1), - ItemList.AcceleratorUV.get((absoluteTier + 1) * 4), - - ItemList.Energy_Module.get(absoluteTier + 1), GT_OreDictUnificator - .get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, (absoluteTier + 1) * 4), - - }, - new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), - MaterialsUEVplus.Time.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier] }, - researchStuff[absoluteTier + 1], - (absoluteTier + 1) * 4_000 * 20, - (int) TierEU.RECIPE_UMV); - } - - } - - // EOH Stabilisation Field Generators. - { - final ItemStack baseCasing = CustomItemList.EOH_Infinite_Energy_Casing.get(1); - - int baseCompPerSec = 16_384; - - // T0 - Shirabon - // T1 - White Dwarf Matter - // T2 - White Dwarf Matter - // T3 - White Dwarf Matter - // T4 - Black Dwarf Matter - // T5 - Black Dwarf Matter - // T6 - Black Dwarf Matter - // T7 - Black Dwarf Matter - // T8 - MHDCSM. - - final ItemStack[] researchStuff = new ItemStack[] { baseCasing, - CustomItemList.StabilisationFieldGeneratorTier0.get(1), - CustomItemList.StabilisationFieldGeneratorTier1.get(1), - CustomItemList.StabilisationFieldGeneratorTier2.get(1), - CustomItemList.StabilisationFieldGeneratorTier3.get(1), - CustomItemList.StabilisationFieldGeneratorTier4.get(1), - CustomItemList.StabilisationFieldGeneratorTier5.get(1), - CustomItemList.StabilisationFieldGeneratorTier6.get(1), - CustomItemList.StabilisationFieldGeneratorTier7.get(1), - CustomItemList.StabilisationFieldGeneratorTier8.get(1) }; - - final ItemStack[] timeCasings = new ItemStack[] { CustomItemList.TimeAccelerationFieldGeneratorTier0.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier1.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier2.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier3.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier4.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier5.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier6.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier7.get(1), - CustomItemList.TimeAccelerationFieldGeneratorTier8.get(1) }; - - final ItemStack[] spatialCasings = new ItemStack[] { - CustomItemList.SpacetimeCompressionFieldGeneratorTier0.get(1), - CustomItemList.SpacetimeCompressionFieldGeneratorTier1.get(1), - CustomItemList.SpacetimeCompressionFieldGeneratorTier2.get(1), - CustomItemList.SpacetimeCompressionFieldGeneratorTier3.get(1), - CustomItemList.SpacetimeCompressionFieldGeneratorTier4.get(1), - CustomItemList.SpacetimeCompressionFieldGeneratorTier5.get(1), - CustomItemList.SpacetimeCompressionFieldGeneratorTier6.get(1), - CustomItemList.SpacetimeCompressionFieldGeneratorTier7.get(1), - CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(1) }; - - for (int absoluteTier = 0; absoluteTier < 9; absoluteTier++) { - - // spotless:off - TT_recipeAdder.addResearchableAssemblylineRecipe( - researchStuff[absoluteTier], - (absoluteTier + 1) * 48_000_000, // total comp - (absoluteTier + 1) * baseCompPerSec, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - (absoluteTier + 1) * 8, // amperage - new Object[] { - timeCasings[absoluteTier], - spatialCasings[absoluteTier], - baseCasing, - // Dyson Swarm Module. - getModItem(GalaxySpace.ID, "item.DysonSwarmParts", 4 * (absoluteTier + 1), 0), - - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUMVBase, 4 * (absoluteTier + 1)), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUIVBase, 4 * (absoluteTier + 1)), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUEVBase, 4 * (absoluteTier + 1)), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Longasssuperconductornameforuhvwire, 4 * (absoluteTier + 1)), - - // Gravitation Engine - getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), - getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), - getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), - getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), - - plateList[absoluteTier], - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 2 * (absoluteTier + 1)), - GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.SpaceTime, absoluteTier + 1), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.SpaceTime, absoluteTier + 1) - - - }, - new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), - MaterialsUEVplus.Time.getMolten(1_440 * (absoluteTier + 1)), - MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), - specialFluid[absoluteTier] }, - researchStuff[absoluteTier + 1], - (absoluteTier + 1) * 4_000 * 20, - (int) TierEU.RECIPE_UMV); - // spotless:on - } - - } - - // EOH Reinforced Temporal casings - { - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.AcceleratorUV.get(1), - 256_000_000, // total comp - 16_384, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - 32, // amperage - new Object[] { - // Space elevator blocks. - getModItem(GTNHIntergalactic.ID, "gt.blockcasingsSE", 64, 0), - // Cosmic neutronium block. - getModItem(Avaritia.ID, "Resource_Block", 64, 0), - GT_OreDictUnificator.get(OrePrefixes.block, Materials.Neutronium, 64), - GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Neutronium, 48), - // Large Bedrockium Plate - largeBedrockiumPlate, largeCosmicNeutroniumPlate, largeShirabonPlate, largeInfinityPlate, - // UV Solar panel - getModItem(SuperSolarPanels.ID, "PhotonicSolarPanel", 1, 0), - // Ultimate Time Anomaly. - ItemList.AcceleratorUV.get(4), - // Gravitation Engine. - getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), ItemList.EnergisedTesseract.get(1) }, - - new FluidStack[] { Materials.Neutronium.getMolten(144 * 256 * 4), - Materials.CosmicNeutronium.getMolten(144 * 256 * 4), new FluidStack(solderUEV, 144 * 256 * 2), - MaterialsUEVplus.Time.getMolten(1_440) }, - CustomItemList.EOH_Reinforced_Temporal_Casing.get(4), - 10_000, - (int) TierEU.RECIPE_UMV); - } - - // EOH Infinite Spacetime Energy Boundary Casing - { - TT_recipeAdder.addResearchableAssemblylineRecipe( - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 1), - 256_000_000, // total comp - 16_384, // comp/s - (int) TierEU.RECIPE_MAX, // eu/t - 32, // amperage - new Object[] { TileEntities.lsc.getStackForm(1), - // UV Solar panel - getModItem(SuperSolarPanels.ID, "PhotonicSolarPanel", 1, 0), - // UHV Capacitor block - new ItemStack(lscLapotronicEnergyUnit, 1, 5), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 4), - - CustomItemList.Machine_Multi_Transformer.get(16), ItemList.Wireless_Hatch_Energy_UMV.get(4), - CustomItemList.eM_energyTunnel5_UMV.get(1), - // High Energy Flow Circuit. - getModItem(NewHorizonsCoreMod.ID, "item.HighEnergyFlowCircuit", 64, 0), - - // Metastable Oganesson Plate. - GT_OreDictUnificator.get("plateMetastableOganesson", 6), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlueTopaz, 6), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CallistoIce, 6), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Ledox, 6), - - // Metastable Oganesson Screw. - GT_OreDictUnificator.get("screwMetastableOganesson", 6), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.BlueTopaz, 6), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.CallistoIce, 6), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Ledox, 6), }, - - new FluidStack[] { Materials.Neutronium.getMolten(144 * 256 * 16), - Materials.CosmicNeutronium.getMolten(144 * 256 * 16), new FluidStack(solderUEV, 144 * 256 * 8), - MaterialsUEVplus.SpaceTime.getMolten(16_000) }, - CustomItemList.EOH_Infinite_Energy_Casing.get(1), - 10_000, - (int) TierEU.RECIPE_UMV); - } - - // Astral Array Fabricator - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(1), - 480_000_000, - 32_768, - (int) TierEU.RECIPE_MAX, - 64, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.WhiteDwarfMatter, 8), - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.BlackDwarfMatter, 8), - ItemList.EnergisedTesseract.get(32), - GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.Eternity, 16), - CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(64), - CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(64), - CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(10), - CustomItemList.TimeAccelerationFieldGeneratorTier8.get(64), - CustomItemList.TimeAccelerationFieldGeneratorTier8.get(64), - CustomItemList.TimeAccelerationFieldGeneratorTier8.get(40), - CustomItemList.StabilisationFieldGeneratorTier8.get(48), - CustomItemList.EOH_Infinite_Energy_Casing.get(32), - CustomItemList.EOH_Reinforced_Temporal_Casing.get(64), - CustomItemList.EOH_Reinforced_Spatial_Casing.get(64), ItemList.Field_Generator_UMV.get(16) }, - new FluidStack[] { MaterialsUEVplus.Space.getMolten(32_768L * 64), - MaterialsUEVplus.Eternity.getMolten(16_384L * 64), MaterialsUEVplus.ExcitedDTSC.getFluid(8_192L * 64) }, - CustomItemList.astralArrayFabricator.get(1), - 300 * SECONDS, - (int) TierEU.RECIPE_UXV); - } - - private void addGodforgeRecipes() { - if (!com.github.technus.tectech.TecTech.configTecTech.ENABLE_GOD_FORGE) return; - - if (EternalSingularity.isModLoaded()) { - // Controller - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.Godforge_StellarEnergySiphonCasing.get(1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { CustomItemList.Godforge_StellarEnergySiphonCasing.get(4), ItemList.ZPM4.get(2), - ItemList.Casing_Dim_Bridge.get(64), getModItem(EternalSingularity.ID, "eternal_singularity", 32L), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 16), - MyMaterial.metastableOganesson.get(OrePrefixes.plateDense, 16), - new ItemStack( - Particle.getBaseParticle(Particle.GRAVITON) - .getItem(), - 64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 16), - ItemList.Sensor_UIV.get(32), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 64), - CustomItemList.eM_energyTunnel7_UIV.get(1), ItemRegistry.energyDistributor[11] }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(2048 * 144), - MaterialsUEVplus.ExcitedDTEC.getFluid(8_192_000), Materials.Thorium.getPlasma(256 * 144), - MaterialsUEVplus.TranscendentMetal.getMolten(2048 * 144) }, - CustomItemList.Machine_Multi_ForgeOfGods.get(1), - 300 * SECONDS, - (int) TierEU.RECIPE_UMV); - - } - - // Magnetic Confinement Casing - TT_recipeAdder.addResearchableAssemblylineRecipe( - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 8), - WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.block, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.TengamAttuned, 32), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 16), - ELEMENT.STANDALONE.HYPOGEN.getScrew(8), - GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SixPhasedCopper, 8), - ItemList.SuperconductorComposite.get(1), ItemList.Emitter_UIV.get(2), - ItemList.Electromagnet_Tengam.get(1) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), - Materials.Plutonium241.getPlasma(16 * 144) }, - CustomItemList.Godforge_MagneticConfinementCasing.get(8), - 50 * SECONDS, - (int) TierEU.RECIPE_UIV); - - if (GalacticraftAmunRa.isModLoaded()) { - // Structure Casing - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.Godforge_MagneticConfinementCasing.get(1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.Mellion, 16), - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SixPhasedCopper, 16), - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 8), - ELEMENT.STANDALONE.ASTRAL_TITANIUM.getFrameBox(8), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 6), - new ItemStack( - Particle.getBaseParticle(Particle.GRAVITON) - .getItem(), - 8), - ItemList.Field_Generator_UEV.get(2), - // Artificial Gravity Generator - getModItem(GalacticraftAmunRa.ID, "tile.machines3", 4L, 1) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), - Materials.Lead.getPlasma(2 * 144) }, - CustomItemList.Godforge_BoundlessStructureCasing.get(1), - 10 * SECONDS, - (int) TierEU.RECIPE_UIV); - } - - // Guidance Casing - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.Godforge_BoundlessStructureCasing.get(1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { CustomItemList.Godforge_BoundlessStructureCasing.get(1), ItemList.ZPM2.get(1), - GregtechItemList.CosmicFabricManipulator.get(1), ItemList.Field_Generator_UEV.get(2), - ItemList.Emitter_UIV.get(3), GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 6), - GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.Creon, 8), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.Mellion, 8) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), - Materials.Thorium.getPlasma(2 * 144) }, - CustomItemList.Godforge_GuidanceCasing.get(1), - 10 * SECONDS, - (int) TierEU.RECIPE_UIV); - - // Energy Siphon Casing - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.Godforge_GuidanceCasing.get(1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { CustomItemList.Godforge_BoundlessStructureCasing.get(1), - ItemList.Casing_Coil_Hypogen.get(64), ItemList.Casing_Coil_Hypogen.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUIV, 32), - ItemList.neutroniumHeatCapacitor.get(1L), ItemList.neutroniumHeatCapacitor.get(1L), - ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), - CustomItemList.eM_energyTunnel7_UIV.get(1), ItemList.Generator_Plasma_UV.get(64), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 6), - ELEMENT.STANDALONE.HYPOGEN.getPlate(6) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), - Materials.SuperconductorUIVBase.getMolten(32 * 144L), MaterialsUEVplus.ExcitedDTEC.getFluid(128_000L) }, - CustomItemList.Godforge_StellarEnergySiphonCasing.get(1), - 10 * SECONDS, - (int) TierEU.RECIPE_UIV); - - // Gravitational Lens - TT_recipeAdder.addResearchableAssemblylineRecipe( - new ItemStack(QuantumGlassBlock.INSTANCE, 1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { new ItemStack(QuantumGlassBlock.INSTANCE, 8), - new ItemStack(ItemRegistry.bw_glasses[1], 8, 0), GregtechItemList.ForceFieldGlass.get(8), - new ItemStack( - Particle.getBaseParticle(Particle.GRAVITON) - .getItem(), - 32), - getItemContainer("RadoxPolymerLens").get(6), getItemContainer("ChromaticLens").get(6), - getItemContainer("MysteriousCrystalLens").get(6), - WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.lens, 6), - ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getPlateDense(36), - GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Creon, 6), - GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Mellion, 6), - GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.SixPhasedCopper, 6) }, - new FluidStack[] { ELEMENT.STANDALONE.RHUGNOR.getFluidStack(16 * 144), - MaterialsUEVplus.Creon.getMolten(16 * 144), - ELEMENT.STANDALONE.ADVANCED_NITINOL.getFluidStack(1024 * 144) }, - new ItemStack(GodforgeGlassBlock.INSTANCE, 1), - 10 * SECONDS, - (int) TierEU.RECIPE_UIV); - - // Graviton Modulator 1 - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.Battery_Gem_4.get(1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { CustomItemList.Godforge_MagneticConfinementCasing.get(2), - ItemRefer.Field_Restriction_Coil_T3.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 16), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.Mellion, 8), - GregtechItemList.Battery_Gem_4.get(2), GregtechItemList.Laser_Lens_Special.get(4), - ItemList.Emitter_UIV.get(4), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 16), - GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Silver, 2) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(32 * 144), - Materials.SuperconductorUIVBase.getMolten(32 * 144), Materials.Infinity.getMolten(32 * 144) }, - CustomItemList.Godforge_GravitonFlowModulatorTier1.get(2), - 10 * SECONDS, - (int) TierEU.RECIPE_UIV); - - // Graviton Modulator 2 - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.Godforge_GravitonFlowModulatorTier1.get(1), - 96_000_000, - 16_384, - (int) TierEU.RECIPE_UXV, - 128, - new Object[] { CustomItemList.Godforge_MagneticConfinementCasing.get(1), - ItemRefer.Field_Restriction_Coil_T4.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), - GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.Mellion, 4), - GregtechItemList.Battery_Gem_4.get(4), GregtechItemList.Laser_Lens_Special.get(8), - ItemList.Emitter_UMV.get(4), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UMV, 8), - GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Silver, 2), - GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Gold, 2) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(64 * 144), - Materials.SuperconductorUMVBase.getMolten(64 * 144), MaterialsUEVplus.SpaceTime.getMolten(64 * 144) }, - CustomItemList.Godforge_GravitonFlowModulatorTier2.get(1), - 10 * SECONDS, - (int) TierEU.RECIPE_UMV); - - // Graviton Modulator 3 - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.Godforge_GravitonFlowModulatorTier2.get(1), - 192_000_000, - 32_768, - (int) TierEU.RECIPE_MAX, - 256, - new Object[] { CustomItemList.Godforge_MagneticConfinementCasing.get(1), - ItemRefer.Field_Restriction_Coil_T4.get(4), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 64), - GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.Mellion, 64), - GregtechItemList.SpaceTimeContinuumRipper.get(8), GregtechItemList.Battery_Gem_4.get(8), - GregtechItemList.Laser_Lens_Special.get(8), ItemList.Emitter_UXV.get(4), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 8), - GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Silver, 8), - GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Gold, 8), - GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.SixPhasedCopper, 8), - GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.Universium, 8) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(256 * 144), - Materials.SuperconductorUMVBase.getMolten(256 * 144), - MaterialsUEVplus.WhiteDwarfMatter.getMolten(256 * 144), - MaterialsUEVplus.Eternity.getMolten(256 * 144) }, - CustomItemList.Godforge_GravitonFlowModulatorTier3.get(1), - 10 * SECONDS, - (int) TierEU.RECIPE_UXV); - - // Phonon Transmission Conduit - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Relativistic_Heat_Capacitor.get(1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1), - GT_OreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Creon, 12), - new ItemStack(Blocks.tfftStorageField, 1, 9), ItemList.Tesseract.get(8), - ItemList.Relativistic_Heat_Capacitor.get(4), ItemList.Thermal_Superconductor.get(6), - ItemList.Field_Generator_UEV.get(4), - GT_OreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.SixPhasedCopper, 24) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(64 * 144), - MaterialsUEVplus.PhononMedium.getFluid(1000), Materials.Plutonium241.getPlasma(16 * 144) }, - CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(1), - 10 * SECONDS, - (int) TierEU.RECIPE_UIV); - - ItemStack megaEBF = GT_Utility.copyAmount(64, ItemRegistry.megaMachines[0]); - - // Smelting Module Controller - TT_recipeAdder.addResearchableAssemblylineRecipe( - // mega ebf controller - ItemRegistry.megaMachines[0], - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), megaEBF, - ItemList.Machine_Multi_Furnace.get(64), ItemList.ZPM4.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 16), - ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 8), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 32) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), - MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), Materials.Lead.getPlasma(256 * 144), - MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, - CustomItemList.Machine_Multi_SmeltingModule.get(1), - 300 * SECONDS, - (int) TierEU.RECIPE_UMV); - - // Molten Module Controller - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.Mega_AlloyBlastSmelter.get(1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), megaEBF, - GregtechItemList.Mega_AlloyBlastSmelter.get(64), ItemList.ZPM4.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 32), - ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), - ItemList.Electric_Pump_UIV.get(64), ItemList.Relativistic_Heat_Capacitor.get(8), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 8), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 32) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), - MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), MaterialsUEVplus.PhononMedium.getFluid(32000), - MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, - CustomItemList.Machine_Multi_MoltenModule.get(1), - 300 * SECONDS, - (int) TierEU.RECIPE_UMV); - - // Plasma Module Controller - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.FluidHeaterUIV.get(1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), ItemList.FluidHeaterUIV.get(64), - GregtechItemList.FusionComputer_UV3.get(8), ItemList.ZPM4.get(1), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 32), - ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), - ItemList.Electric_Pump_UIV.get(64), ItemList.Relativistic_Heat_Capacitor.get(8), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 8), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 32) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), - MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), MaterialsUEVplus.PhononMedium.getFluid(32000), - MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, - CustomItemList.Machine_Multi_PlasmaModule.get(1), - 300 * SECONDS, - (int) TierEU.RECIPE_UMV); - - // Exotic Module Controller - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Machine_Multi_TranscendentPlasmaMixer.get(1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), - ItemList.Machine_Multi_TranscendentPlasmaMixer.get(4), ItemRefer.Compact_Fusion_MK5.get(1), - ItemList.ZPM4.get(4), GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 64), - ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), - ItemList.Electric_Pump_UIV.get(64), CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(8), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 32), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 16), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 64) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), - MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), MaterialsUEVplus.PhononMedium.getFluid(64000), - MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, - CustomItemList.Machine_Multi_QuarkGluonPlasmaModule.get(1), - 300 * SECONDS, - (int) TierEU.RECIPE_UMV); - } - - private void addWirelessEnergyRecipes() { - - Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null - ? FluidRegistry.getFluid("molten.mutatedlivingsolder") - : FluidRegistry.getFluid("molten.solderingalloy"); - - int recipeDurationTicks = 20 * 20; - int recipeEuPerTick = (int) TierEU.RECIPE_UMV; - - int researchEuPerTick = (int) TierEU.RECIPE_UMV; - int researchAmperage = 4; - int compPerSecond = 2000; - int totalComputation = 500_000; - - ItemStack[] energyHatches = { ItemList.Hatch_Energy_ULV.get(1), ItemList.Hatch_Energy_LV.get(1), - ItemList.Hatch_Energy_MV.get(1), ItemList.Hatch_Energy_HV.get(1), ItemList.Hatch_Energy_EV.get(1), - ItemList.Hatch_Energy_IV.get(1), ItemList.Hatch_Energy_LuV.get(1), ItemList.Hatch_Energy_ZPM.get(1), - ItemList.Hatch_Energy_UV.get(1), ItemList.Hatch_Energy_UHV.get(1), ItemList.Hatch_Energy_UEV.get(1L), - ItemList.Hatch_Energy_UIV.get(1L), ItemList.Hatch_Energy_UMV.get(1L), ItemList.Hatch_Energy_UXV.get(1L) }; - - ItemStack[] energyHatches_4A = { CustomItemList.eM_energyMulti4_EV.get(1), - CustomItemList.eM_energyMulti4_IV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), - CustomItemList.eM_energyMulti4_ZPM.get(1), CustomItemList.eM_energyMulti4_UV.get(1), - CustomItemList.eM_energyMulti4_UHV.get(1), CustomItemList.eM_energyMulti4_UEV.get(1), - CustomItemList.eM_energyMulti4_UIV.get(1), CustomItemList.eM_energyMulti4_UMV.get(1), - CustomItemList.eM_energyMulti4_UXV.get(1) }; - - ItemStack[] energyHatches_16A = { CustomItemList.eM_energyMulti16_EV.get(1), - CustomItemList.eM_energyMulti16_IV.get(1), CustomItemList.eM_energyMulti16_LuV.get(1), - CustomItemList.eM_energyMulti16_ZPM.get(1), CustomItemList.eM_energyMulti16_UV.get(1), - CustomItemList.eM_energyMulti16_UHV.get(1), CustomItemList.eM_energyMulti16_UEV.get(1), - CustomItemList.eM_energyMulti16_UIV.get(1), CustomItemList.eM_energyMulti16_UMV.get(1), - CustomItemList.eM_energyMulti16_UXV.get(1) }; - - ItemStack[] energyHatches_64A = { CustomItemList.eM_energyMulti64_EV.get(1), - CustomItemList.eM_energyMulti64_IV.get(1), CustomItemList.eM_energyMulti64_LuV.get(1), - CustomItemList.eM_energyMulti64_ZPM.get(1), CustomItemList.eM_energyMulti64_UV.get(1), - CustomItemList.eM_energyMulti64_UHV.get(1), CustomItemList.eM_energyMulti64_UEV.get(1), - CustomItemList.eM_energyMulti64_UIV.get(1), CustomItemList.eM_energyMulti64_UMV.get(1), - CustomItemList.eM_energyMulti64_UXV.get(1) }; - - ItemStack[] laserTargets_UXV = { CustomItemList.eM_energyTunnel1_UXV.get(1), - CustomItemList.eM_energyTunnel2_UXV.get(1), CustomItemList.eM_energyTunnel3_UXV.get(1), - CustomItemList.eM_energyTunnel4_UXV.get(1), CustomItemList.eM_energyTunnel5_UXV.get(1), - CustomItemList.eM_energyTunnel6_UXV.get(1), CustomItemList.eM_energyTunnel7_UXV.get(1), - CustomItemList.eM_energyTunnel8_UXV.get(1), CustomItemList.eM_energyTunnel9_UXV.get(1) }; - - ItemStack[] dynamoHatches = { ItemList.Hatch_Dynamo_ULV.get(1), ItemList.Hatch_Dynamo_LV.get(1), - ItemList.Hatch_Dynamo_MV.get(1), ItemList.Hatch_Dynamo_HV.get(1), ItemList.Hatch_Dynamo_EV.get(1), - ItemList.Hatch_Dynamo_IV.get(1), ItemList.Hatch_Dynamo_LuV.get(1), ItemList.Hatch_Dynamo_ZPM.get(1), - ItemList.Hatch_Dynamo_UV.get(1), ItemList.Hatch_Dynamo_UHV.get(1), ItemList.Hatch_Dynamo_UEV.get(1L), - ItemList.Hatch_Dynamo_UIV.get(1L), ItemList.Hatch_Dynamo_UMV.get(1L), ItemList.Hatch_Dynamo_UXV.get(1L) }; - - Object[] circuitsTierPlusTwo = { new Object[] { OrePrefixes.circuit.get(Materials.MV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.HV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.EV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.IV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.LuV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1L }, - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 4L }, // MAX (Technically not MAX, can be - // changed once MAX circuits become - // craftable) - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 16L } // MAX (Technically not MAX, can be - // changed once MAX circuits become - // craftable) - }; - - ItemStack[] wirelessHatches = { ItemList.Wireless_Hatch_Energy_ULV.get(1), - ItemList.Wireless_Hatch_Energy_LV.get(1), ItemList.Wireless_Hatch_Energy_MV.get(1), - ItemList.Wireless_Hatch_Energy_HV.get(1), ItemList.Wireless_Hatch_Energy_EV.get(1), - ItemList.Wireless_Hatch_Energy_IV.get(1), ItemList.Wireless_Hatch_Energy_LuV.get(1), - ItemList.Wireless_Hatch_Energy_ZPM.get(1), ItemList.Wireless_Hatch_Energy_UV.get(1), - ItemList.Wireless_Hatch_Energy_UHV.get(1), ItemList.Wireless_Hatch_Energy_UEV.get(1), - ItemList.Wireless_Hatch_Energy_UIV.get(1), ItemList.Wireless_Hatch_Energy_UMV.get(1), - ItemList.Wireless_Hatch_Energy_UXV.get(1) }; - - ItemStack[] wirelessHatches_4A = { CustomItemList.eM_energyWirelessMulti4_EV.get(1), - CustomItemList.eM_energyWirelessMulti4_IV.get(1), CustomItemList.eM_energyWirelessMulti4_LuV.get(1), - CustomItemList.eM_energyWirelessMulti4_ZPM.get(1), CustomItemList.eM_energyWirelessMulti4_UV.get(1), - CustomItemList.eM_energyWirelessMulti4_UHV.get(1), CustomItemList.eM_energyWirelessMulti4_UEV.get(1), - CustomItemList.eM_energyWirelessMulti4_UIV.get(1), CustomItemList.eM_energyWirelessMulti4_UMV.get(1), - CustomItemList.eM_energyWirelessMulti4_UXV.get(1) }; - - ItemStack[] wirelessHatches_16A = { CustomItemList.eM_energyWirelessMulti16_EV.get(1), - CustomItemList.eM_energyWirelessMulti16_IV.get(1), CustomItemList.eM_energyWirelessMulti16_LuV.get(1), - CustomItemList.eM_energyWirelessMulti16_ZPM.get(1), CustomItemList.eM_energyWirelessMulti16_UV.get(1), - CustomItemList.eM_energyWirelessMulti16_UHV.get(1), CustomItemList.eM_energyWirelessMulti16_UEV.get(1), - CustomItemList.eM_energyWirelessMulti16_UIV.get(1), CustomItemList.eM_energyWirelessMulti16_UMV.get(1), - CustomItemList.eM_energyWirelessMulti16_UXV.get(1) }; - - ItemStack[] wirelessHatches_64A = { CustomItemList.eM_energyWirelessMulti64_EV.get(1), - CustomItemList.eM_energyWirelessMulti64_IV.get(1), CustomItemList.eM_energyWirelessMulti64_LuV.get(1), - CustomItemList.eM_energyWirelessMulti64_ZPM.get(1), CustomItemList.eM_energyWirelessMulti64_UV.get(1), - CustomItemList.eM_energyWirelessMulti64_UHV.get(1), CustomItemList.eM_energyWirelessMulti64_UEV.get(1), - CustomItemList.eM_energyWirelessMulti64_UIV.get(1), CustomItemList.eM_energyWirelessMulti64_UMV.get(1), - CustomItemList.eM_energyWirelessMulti64_UXV.get(1) }; - - ItemStack[] wirelessLasers = { CustomItemList.eM_energyWirelessTunnel1_UXV.get(1), - CustomItemList.eM_energyWirelessTunnel2_UXV.get(1), CustomItemList.eM_energyWirelessTunnel3_UXV.get(1), - CustomItemList.eM_energyWirelessTunnel4_UXV.get(1), CustomItemList.eM_energyWirelessTunnel5_UXV.get(1), - CustomItemList.eM_energyWirelessTunnel6_UXV.get(1), CustomItemList.eM_energyWirelessTunnel7_UXV.get(1), - CustomItemList.eM_energyWirelessTunnel8_UXV.get(1), CustomItemList.eM_energyWirelessTunnel9_UXV.get(1) }; - - ItemStack[] wirelessDynamos = { ItemList.Wireless_Dynamo_Energy_ULV.get(1), - ItemList.Wireless_Dynamo_Energy_LV.get(1), ItemList.Wireless_Dynamo_Energy_MV.get(1), - ItemList.Wireless_Dynamo_Energy_HV.get(1), ItemList.Wireless_Dynamo_Energy_EV.get(1), - ItemList.Wireless_Dynamo_Energy_IV.get(1), ItemList.Wireless_Dynamo_Energy_LuV.get(1), - ItemList.Wireless_Dynamo_Energy_ZPM.get(1), ItemList.Wireless_Dynamo_Energy_UV.get(1), - ItemList.Wireless_Dynamo_Energy_UHV.get(1), ItemList.Wireless_Dynamo_Energy_UEV.get(1), - ItemList.Wireless_Dynamo_Energy_UIV.get(1), ItemList.Wireless_Dynamo_Energy_UMV.get(1), - ItemList.Wireless_Dynamo_Energy_UXV.get(1) }; - - // ------------------------ Wireless EU hatches ------------------------ - - for (int i = 0; i < wirelessHatches.length; i++) { - - TT_recipeAdder.addResearchableAssemblylineRecipe( - (i == 0) ? ItemList.Tesseract.get(1) : wirelessHatches[i - 1], - totalComputation, - compPerSecond, - researchEuPerTick, - researchAmperage, - new Object[] { energyHatches[i], new ItemStack(compactFusionCoil, 1), - ItemList.Casing_Coil_Superconductor.get(1), CustomItemList.Machine_Multi_Transformer.get(1), - CustomItemList.eM_Power.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, MaterialsUEVplus.SpaceTime, 2), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 1), circuitsTierPlusTwo[i], - ItemList.EnergisedTesseract.get(1) }, - new FluidStack[] { new FluidStack(solderUEV, 1296), MaterialsUEVplus.ExcitedDTEC.getFluid(500L) }, - wirelessHatches[i], - recipeDurationTicks, - recipeEuPerTick); - } - - // ------------------------ 4A Wireless EU hatches ------------------------ - - for (int i = 0; i < wirelessHatches_4A.length; i++) { - - TT_recipeAdder.addResearchableAssemblylineRecipe( - energyHatches_4A[i], - totalComputation * 4, - compPerSecond * 4, - researchEuPerTick, - researchAmperage * 2, - new Object[] { energyHatches_4A[i], new ItemStack(compactFusionCoil, 1, 1), - ItemList.Casing_Coil_Superconductor.get(1), CustomItemList.Machine_Multi_Transformer.get(1), - CustomItemList.eM_Power.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, MaterialsUEVplus.SpaceTime, 4), - GT_OreDictUnificator.get("plateTripleShirabon", 4L), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Flerovium, 4), - circuitsTierPlusTwo[i + 4], ItemList.EnergisedTesseract.get(1) }, - new FluidStack[] { new FluidStack(solderUEV, 1_296 * 4), - MaterialsUEVplus.ExcitedDTEC.getFluid(500L * 4) }, - wirelessHatches_4A[i], - recipeDurationTicks, - recipeEuPerTick); - } - - // ------------------------ 16A Wireless EU hatches ------------------------ - - for (int i = 0; i < wirelessHatches_16A.length; i++) { - - TT_recipeAdder.addResearchableAssemblylineRecipe( - energyHatches_16A[i], - totalComputation * 16, - compPerSecond * 16, - researchEuPerTick, - researchAmperage * 4, - new Object[] { energyHatches_16A[i], new ItemStack(compactFusionCoil, 1, 2), - ItemList.Casing_Coil_Superconductor.get(1), CustomItemList.Machine_Multi_Transformer.get(1), - CustomItemList.eM_Power.get(16), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, MaterialsUEVplus.SpaceTime, 16), - GT_OreDictUnificator.get("plateTripleShirabon", 16L), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 4), - circuitsTierPlusTwo[i + 4], ItemList.EnergisedTesseract.get(1) }, - new FluidStack[] { new FluidStack(solderUEV, 1_296 * 16), - MaterialsUEVplus.ExcitedDTEC.getFluid(500L * 16) }, - wirelessHatches_16A[i], - recipeDurationTicks, - recipeEuPerTick); - } - - // ------------------------ 64A Wireless EU hatches ------------------------ - - for (int i = 0; i < wirelessHatches_64A.length; i++) { - - TT_recipeAdder.addResearchableAssemblylineRecipe( - energyHatches_64A[i], - totalComputation * 64, - compPerSecond * 64, - researchEuPerTick, - researchAmperage * 8, - new Object[] { energyHatches_64A[i], new ItemStack(compactFusionCoil, 1, 3), - ItemList.Casing_Coil_Superconductor.get(1), CustomItemList.Machine_Multi_Transformer.get(1), - CustomItemList.eM_Power.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, MaterialsUEVplus.SpaceTime, 64), - GT_OreDictUnificator.get("plateTripleShirabon", 64L), - GT_OreDictUnificator.get("plateDenseMetastableOganesson", 4), circuitsTierPlusTwo[i + 4], - ItemList.EnergisedTesseract.get(1) }, - new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64), - MaterialsUEVplus.ExcitedDTEC.getFluid(500L * 64) }, - wirelessHatches_64A[i], - recipeDurationTicks, - recipeEuPerTick); - } - - // ------------------------ Wireless UXV Lasers ------------------------ - - for (int i = 0; i < wirelessLasers.length; i++) { - - TT_recipeAdder.addResearchableAssemblylineRecipe( - laserTargets_UXV[i], - totalComputation * 64, - compPerSecond * 64, - researchEuPerTick * 4, - researchAmperage * 16, - new Object[] { laserTargets_UXV[i], new ItemStack(compactFusionCoil, 1, 4), - // Dyson Swarm Module Deployment Unit Superconducting Magnet - getModItem(GalaxySpace.ID, "dysonswarmparts", 1, 4), - CustomItemList.Machine_Multi_Transformer.get(1), CustomItemList.eM_Power.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, MaterialsUEVplus.SpaceTime, 64), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Eternity, 32), - GT_OreDictUnificator - .get(OrePrefixes.plateDense, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 16), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 16L), - ItemList.EnergisedTesseract.get(1) }, - new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64 * 4), - MaterialsUEVplus.ExcitedDTSC.getFluid(500L * 64) }, - wirelessLasers[i], - recipeDurationTicks, - recipeEuPerTick); - } - - // ------------------------ 4MA+ Lasers ------------------------ - - // 4M UMV Target - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.eM_energyTunnel7_UMV.get(1), - totalComputation * 48, - compPerSecond * 48, - researchEuPerTick * 3, - researchAmperage * 16, - new Object[] { ItemList.Hull_UMV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Emitter_UMV.get(64), - ItemList.Emitter_UMV.get(64), ItemList.Electric_Pump_UMV.get(64), ItemList.Electric_Pump_UMV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Quantium, 32) }, - new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64 * 4) }, - CustomItemList.eM_energyTunnel8_UMV.get(1), - 53 * MINUTES + 20 * SECONDS, - (int) TierEU.RECIPE_UMV); - - // 4M UXV Target - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.eM_energyTunnel8_UMV.get(1), - totalComputation * 64, - compPerSecond * 64, - researchEuPerTick * 4, - researchAmperage * 16, - new Object[] { ItemList.Hull_UXV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Sensor_UXV.get(64), - ItemList.Sensor_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 32) }, - new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64 * 4) }, - CustomItemList.eM_energyTunnel8_UXV.get(1), - 106 * MINUTES + 40 * SECONDS, - (int) TierEU.RECIPE_UXV); - - // 16M UXV Target - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.eM_energyTunnel8_UXV.get(1), - totalComputation * 64, - compPerSecond * 64, - researchEuPerTick * 4, - researchAmperage * 16, - new Object[] { ItemList.Hull_UXV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Sensor_UXV.get(64), - ItemList.Sensor_UXV.get(64), ItemList.Sensor_UXV.get(64), ItemList.Sensor_UXV.get(64), - ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), - ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 64) }, - new FluidStack[] { new FluidStack(solderUEV, 1_296 * 128 * 4) }, - CustomItemList.eM_energyTunnel9_UXV.get(1), - 213 * MINUTES + 20 * SECONDS, - (int) TierEU.RECIPE_UXV); - - // 4M UMV Source - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.eM_dynamoTunnel7_UMV.get(1), - totalComputation * 48, - compPerSecond * 48, - researchEuPerTick * 3, - researchAmperage * 16, - new Object[] { ItemList.Hull_UMV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Sensor_UMV.get(64), - ItemList.Sensor_UMV.get(64), ItemList.Electric_Pump_UMV.get(64), ItemList.Electric_Pump_UMV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.Quantium, 32) }, - new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64 * 4) }, - CustomItemList.eM_dynamoTunnel8_UMV.get(1), - 53 * MINUTES + 20 * SECONDS, - (int) TierEU.RECIPE_UMV); - - // 4M UXV Source - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.eM_dynamoTunnel7_UXV.get(1), - totalComputation * 64, - compPerSecond * 64, - researchEuPerTick * 4, - researchAmperage * 16, - new Object[] { ItemList.Hull_UXV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Sensor_UXV.get(64), - ItemList.Sensor_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 32) }, - new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64 * 4) }, - CustomItemList.eM_dynamoTunnel8_UXV.get(1), - 106 * MINUTES + 40 * SECONDS, - (int) TierEU.RECIPE_UXV); - - // 16M UXV Source - TT_recipeAdder.addResearchableAssemblylineRecipe( - CustomItemList.eM_dynamoTunnel8_UXV.get(1), - totalComputation * 64, - compPerSecond * 64, - researchEuPerTick * 4, - researchAmperage * 16, - new Object[] { ItemList.Hull_UXV.get(1), GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), - GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Emitter_UXV.get(64), - ItemList.Emitter_UXV.get(64), ItemList.Emitter_UXV.get(64), ItemList.Emitter_UXV.get(64), - ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), - ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 64) }, - new FluidStack[] { new FluidStack(solderUEV, 1_296 * 128 * 4) }, - CustomItemList.eM_dynamoTunnel9_UXV.get(1), - 213 * MINUTES + 20 * SECONDS, - (int) TierEU.RECIPE_UXV); - - // ------------------------ Wireless EU dynamos ------------------------ - - for (int i = 0; i < wirelessHatches.length; i++) { - - TT_recipeAdder.addResearchableAssemblylineRecipe( - (i == 0) ? ItemList.EnergisedTesseract.get(1) : wirelessDynamos[i - 1], - totalComputation, - compPerSecond, - researchEuPerTick, - researchAmperage, - new Object[] { dynamoHatches[i], new ItemStack(compactFusionCoil, 1), - ItemList.Casing_Coil_Superconductor.get(1), CustomItemList.Machine_Multi_Transformer.get(1), - CustomItemList.eM_Power.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, MaterialsUEVplus.SpaceTime, 2), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 1), circuitsTierPlusTwo[i], - ItemList.EnergisedTesseract.get(1) }, - new FluidStack[] { new FluidStack(solderUEV, 1296), MaterialsUEVplus.ExcitedDTEC.getFluid(500L) }, - wirelessDynamos[i], - recipeDurationTicks, - recipeEuPerTick); - } - } - - public void runLateRecipes() { - if (com.github.technus.tectech.TecTech.configTecTech.ENABLE_GOD_FORGE && EternalSingularity.isModLoaded()) { - // Shielding Casing - TT_recipeAdder.addResearchableAssemblylineRecipe( - GT_OreDictUnificator.get(OrePrefixes.block, MaterialsUEVplus.TranscendentMetal, 1), - 48_000_000, - 8_192, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SixPhasedCopper, 4), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.CosmicNeutronium, 16), - MyMaterial.tairitsu.get(OrePrefixes.plateDense, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 8), - getModItem(EternalSingularity.ID, "combined_singularity", 1L, 2), - getModItem(EternalSingularity.ID, "combined_singularity", 1L, 4), - ItemRefer.Advanced_Radiation_Protection_Plate.get(64), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Mellion, 16), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 16), ALLOY.QUANTUM.getPlate(16), - ALLOY.ABYSSAL.getFrameBox(4) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(128 * 144), - Materials.Bedrockium.getMolten(16_384 * 144), Materials.Neutronium.getMolten(2_048 * 144) }, - CustomItemList.Godforge_SingularityShieldingCasing.get(4), - 30 * SECONDS, - (int) TierEU.RECIPE_UIV); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/thing/CoverLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/CoverLoader.java deleted file mode 100644 index e410eec6b4..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/thing/CoverLoader.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.github.technus.tectech.loader.thing; - -import net.minecraft.item.ItemStack; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.cover.GT_Cover_TM_EnderFluidLink; -import com.github.technus.tectech.thing.cover.GT_Cover_TM_PowerPassUpgrade; -import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; -import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate; -import com.github.technus.tectech.thing.item.EnderFluidLinkCover; -import com.github.technus.tectech.thing.item.PowerPassUpgradeCover; -import com.github.technus.tectech.thing.item.TeslaCoilCover; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.objects.GT_RenderedTexture; - -public class CoverLoader implements Runnable { - - public void run() { - final IIconContainer TESLA_OVERLAY = new Textures.BlockIcons.CustomIcon("iconsets/TESLA_OVERLAY"); - final IIconContainer TESLA_OVERLAY_ULTIMATE = new Textures.BlockIcons.CustomIcon( - "iconsets/TESLA_OVERLAY_ULTIMATE"); - final IIconContainer ENDERFLUIDLINK_OVERLAY = new Textures.BlockIcons.CustomIcon( - "iconsets/ENDERFLUIDLINK_OVERLAY"); - final IIconContainer POWERPASSUPGRADE_OVERLAY = new Textures.BlockIcons.CustomIcon( - "iconsets/POWERPASSUPGRADE_OVERLAY"); - - GregTech_API.registerCover( - new ItemStack(TeslaCoilCover.INSTANCE, 1, 0), - new GT_RenderedTexture(TESLA_OVERLAY), - new GT_Cover_TM_TeslaCoil()); - GregTech_API.registerCover( - new ItemStack(TeslaCoilCover.INSTANCE, 1, 1), - new GT_RenderedTexture(TESLA_OVERLAY_ULTIMATE), - new GT_Cover_TM_TeslaCoil_Ultimate()); - GregTech_API.registerCover( - new ItemStack(EnderFluidLinkCover.INSTANCE, 1, 0), - new GT_RenderedTexture(ENDERFLUIDLINK_OVERLAY), - new GT_Cover_TM_EnderFluidLink()); - GregTech_API.registerCover( - new ItemStack(PowerPassUpgradeCover.INSTANCE, 1, 0), - new GT_RenderedTexture(POWERPASSUPGRADE_OVERLAY), - new GT_Cover_TM_PowerPassUpgrade()); - TecTech.LOGGER.info("Cover functionality registered"); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java deleted file mode 100644 index 5e77d208d3..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/thing/MachineLoader.java +++ /dev/null @@ -1,2883 +0,0 @@ -package com.github.technus.tectech.loader.thing; - -import static com.github.technus.tectech.thing.CustomItemList.DATApipe; -import static com.github.technus.tectech.thing.CustomItemList.DATApipeBlock; -import static com.github.technus.tectech.thing.CustomItemList.LASERpipe; -import static com.github.technus.tectech.thing.CustomItemList.LASERpipeBlock; -import static com.github.technus.tectech.thing.CustomItemList.LASERpipeSmart; -import static com.github.technus.tectech.thing.CustomItemList.Machine_BuckConverter_IV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_BuckConverter_LuV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_BuckConverter_UEV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_BuckConverter_UHV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_BuckConverter_UIV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_BuckConverter_UMV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_BuckConverter_UV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_BuckConverter_UXV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_BuckConverter_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.Machine_DebugGenny; -import static com.github.technus.tectech.thing.CustomItemList.Machine_DebugPollutor; -import static com.github.technus.tectech.thing.CustomItemList.Machine_DebugWriter; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_Computer; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_DataBank; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_EyeOfHarmony; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_ForgeOfGods; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_Infuser; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_Microwave; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_MoltenModule; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_PlasmaModule; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_QuarkGluonPlasmaModule; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_Research; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_SmeltingModule; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_Switch; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_TeslaCoil; -import static com.github.technus.tectech.thing.CustomItemList.Machine_Multi_Transformer; -import static com.github.technus.tectech.thing.CustomItemList.Machine_OwnerDetector; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_1by1_EV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_1by1_HV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_1by1_IV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_1by1_LV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_1by1_MV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_2by2_EV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_2by2_HV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_2by2_IV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_2by2_LV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_2by2_MV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_3by3_EV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_3by3_HV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_3by3_IV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_3by3_LV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_3by3_MV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_4by4_EV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_4by4_HV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_4by4_IV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_4by4_LV; -import static com.github.technus.tectech.thing.CustomItemList.Machine_TeslaCoil_4by4_MV; -import static com.github.technus.tectech.thing.CustomItemList.ParametrizerTXT_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.ParametrizerX_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.Parametrizer_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.UncertaintyX_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.Uncertainty_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.UnusedStuff; -import static com.github.technus.tectech.thing.CustomItemList.capacitor_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.dataInAss_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.dataInAss_Wireless_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.dataIn_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.dataIn_Wireless_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.dataOutAss_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.dataOutAss_Wireless_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.dataOut_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.dataOut_Wireless_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_EV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti16_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti4_EV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti4_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti4_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti4_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti4_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti4_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti4_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti4_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti4_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti4_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti64_EV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti64_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti64_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti64_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti64_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti64_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti64_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti64_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti64_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoMulti64_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel1_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel1_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel1_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel1_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel1_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel1_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel1_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel1_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel1_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel2_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel2_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel2_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel2_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel2_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel2_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel2_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel2_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel2_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel3_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel3_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel3_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel3_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel3_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel3_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel3_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel3_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel3_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel4_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel4_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel4_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel4_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel4_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel4_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel4_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel4_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel4_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel5_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel5_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel5_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel5_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel5_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel5_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel5_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel5_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel5_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel6_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel6_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel6_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel6_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel6_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel6_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel6_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel6_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel6_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel7_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel7_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel7_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel7_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel7_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel7_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel7_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel7_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel7_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel8_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel8_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel9001; -import static com.github.technus.tectech.thing.CustomItemList.eM_dynamoTunnel9_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti16_EV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti16_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti16_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti16_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti16_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti16_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti16_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti16_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti16_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti16_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti4_EV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti4_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti4_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti4_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti4_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti4_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti4_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti4_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti4_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti4_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti64_EV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti64_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti64_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti64_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti64_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti64_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti64_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti64_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti64_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyMulti64_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel1_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel1_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel1_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel1_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel1_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel1_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel1_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel1_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel1_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel2_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel2_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel2_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel2_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel2_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel2_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel2_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel2_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel2_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel3_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel3_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel3_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel3_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel3_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel3_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel3_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel3_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel3_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel4_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel4_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel4_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel4_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel4_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel4_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel4_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel4_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel4_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel5_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel5_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel5_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel5_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel5_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel5_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel5_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel5_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel5_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel6_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel6_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel6_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel6_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel6_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel6_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel6_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel6_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel6_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel7_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel7_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel7_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel7_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel7_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel7_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel7_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel7_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel7_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel8_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel8_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel9001; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyTunnel9_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti16_EV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti16_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti16_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti16_MAX; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti16_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti16_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti16_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti16_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti16_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti16_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti16_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti4_EV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti4_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti4_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti4_MAX; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti4_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti4_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti4_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti4_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti4_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti4_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti4_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti64_EV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti64_IV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti64_LuV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti64_MAX; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti64_UEV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti64_UHV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti64_UIV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti64_UMV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti64_UV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti64_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessMulti64_ZPM; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessTunnel1_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessTunnel2_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessTunnel3_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessTunnel4_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessTunnel5_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessTunnel6_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessTunnel7_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessTunnel8_UXV; -import static com.github.technus.tectech.thing.CustomItemList.eM_energyWirelessTunnel9_UXV; -import static com.github.technus.tectech.thing.CustomItemList.hatch_CreativeData; -import static com.github.technus.tectech.thing.CustomItemList.hatch_CreativeMaintenance; -import static com.github.technus.tectech.thing.CustomItemList.hatch_CreativeUncertainty; -import static com.github.technus.tectech.thing.CustomItemList.holder_Hatch; -import static com.github.technus.tectech.thing.CustomItemList.rack_Hatch; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.addItemTooltip; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.MetaTileEntityIDs.ActiveTransformer; -import static gregtech.api.enums.MetaTileEntityIDs.AdvancedTeslaTransceiver1by1; -import static gregtech.api.enums.MetaTileEntityIDs.AdvancedTeslaTransceiver2by2; -import static gregtech.api.enums.MetaTileEntityIDs.AdvancedTeslaTransceiver3by3; -import static gregtech.api.enums.MetaTileEntityIDs.AdvancedTeslaTransceiver4by4; -import static gregtech.api.enums.MetaTileEntityIDs.AssemblylineSlaveConnector; -import static gregtech.api.enums.MetaTileEntityIDs.AutoTapingMaintenanceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.BasicTeslaTransceiver1by1; -import static gregtech.api.enums.MetaTileEntityIDs.BasicTeslaTransceiver2by2; -import static gregtech.api.enums.MetaTileEntityIDs.BasicTeslaTransceiver3by3; -import static gregtech.api.enums.MetaTileEntityIDs.BasicTeslaTransceiver4by4; -import static gregtech.api.enums.MetaTileEntityIDs.CapacitorHatch; -import static gregtech.api.enums.MetaTileEntityIDs.CloudComputationClientHatch; -import static gregtech.api.enums.MetaTileEntityIDs.CloudComputationServerHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ComputerRack; -import static gregtech.api.enums.MetaTileEntityIDs.DataBank; -import static gregtech.api.enums.MetaTileEntityIDs.DataBankMasterConnector; -import static gregtech.api.enums.MetaTileEntityIDs.DebugDataHatch; -import static gregtech.api.enums.MetaTileEntityIDs.DebugPollutionGenerator; -import static gregtech.api.enums.MetaTileEntityIDs.DebugPowerGenerator; -import static gregtech.api.enums.MetaTileEntityIDs.DebugStructureWriter; -import static gregtech.api.enums.MetaTileEntityIDs.EV16ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.EV16AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.EV16AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.EV4ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.EV4AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.EV4AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.EV64ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.EV64AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.EV64AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.EnergyInfuser; -import static gregtech.api.enums.MetaTileEntityIDs.EpycTeslaTransceiver1by1; -import static gregtech.api.enums.MetaTileEntityIDs.EpycTeslaTransceiver2by2; -import static gregtech.api.enums.MetaTileEntityIDs.EpycTeslaTransceiver3by3; -import static gregtech.api.enums.MetaTileEntityIDs.EpycTeslaTransceiver4by4; -import static gregtech.api.enums.MetaTileEntityIDs.ExtendedMegaUltimateBuckConverter; -import static gregtech.api.enums.MetaTileEntityIDs.ExtremelyUltimateBuckConverter; -import static gregtech.api.enums.MetaTileEntityIDs.EyeofHarmony; -import static gregtech.api.enums.MetaTileEntityIDs.ForgeoftheGods; -import static gregtech.api.enums.MetaTileEntityIDs.HelioflarePowerForge; -import static gregtech.api.enums.MetaTileEntityIDs.HeliofluxMeltingCore; -import static gregtech.api.enums.MetaTileEntityIDs.HeliofusionExoticizer; -import static gregtech.api.enums.MetaTileEntityIDs.HeliothermalPlasmaFabricator; -import static gregtech.api.enums.MetaTileEntityIDs.HighlyUltimateBuckConverter; -import static gregtech.api.enums.MetaTileEntityIDs.IV1024AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV1024AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV1048576AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV1048576AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV16384AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV16384AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV16ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV16AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV16AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV256AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV256AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV262144AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV262144AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV4096AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV4096AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV4ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV4AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV4AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV64ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV64AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV64AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV65536AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.IV65536AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.InsaneBuckConverter; -import static gregtech.api.enums.MetaTileEntityIDs.InsaneTeslaTransceiver1by1; -import static gregtech.api.enums.MetaTileEntityIDs.InsaneTeslaTransceiver2by2; -import static gregtech.api.enums.MetaTileEntityIDs.InsaneTeslaTransceiver3by3; -import static gregtech.api.enums.MetaTileEntityIDs.InsaneTeslaTransceiver4by4; -import static gregtech.api.enums.MetaTileEntityIDs.InsanelyUltimateBuckConverter; -import static gregtech.api.enums.MetaTileEntityIDs.LaserVacuumMirror; -import static gregtech.api.enums.MetaTileEntityIDs.LaserVacuumPipe; -import static gregtech.api.enums.MetaTileEntityIDs.LaserVacuumPipeCasing; -import static gregtech.api.enums.MetaTileEntityIDs.LegendaryLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LegendaryLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV1024AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV1024AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV1048576AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV1048576AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV16384AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV16384AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV16ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV16AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV16AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV256AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV256AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV262144AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV262144AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV4096AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV4096AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV4ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV4AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV4AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV64ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV64AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV64AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV65536AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LuV65536AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.LudicrousBuckConverter; -import static gregtech.api.enums.MetaTileEntityIDs.MAX16AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.MAX4AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.MAX64AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.MegaUltimateBuckConverter; -import static gregtech.api.enums.MetaTileEntityIDs.MicrowaveGrinder; -import static gregtech.api.enums.MetaTileEntityIDs.NetworkSwitchWithQoS; -import static gregtech.api.enums.MetaTileEntityIDs.ObjectHolder; -import static gregtech.api.enums.MetaTileEntityIDs.OpticalFiberCable; -import static gregtech.api.enums.MetaTileEntityIDs.OpticalFiberCableCasing; -import static gregtech.api.enums.MetaTileEntityIDs.OpticalMasterConnector; -import static gregtech.api.enums.MetaTileEntityIDs.OpticalSlaveConnector; -import static gregtech.api.enums.MetaTileEntityIDs.Ownerdetector; -import static gregtech.api.enums.MetaTileEntityIDs.Parametrizer; -import static gregtech.api.enums.MetaTileEntityIDs.ParametrizerX; -import static gregtech.api.enums.MetaTileEntityIDs.ParametrizertXt; -import static gregtech.api.enums.MetaTileEntityIDs.QuantumComputer; -import static gregtech.api.enums.MetaTileEntityIDs.Researchstation; -import static gregtech.api.enums.MetaTileEntityIDs.TeslaTower; -import static gregtech.api.enums.MetaTileEntityIDs.UEV1024AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV1024AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV1048576AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV1048576AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV16384AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV16384AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV16ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV16AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV16AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV256AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV256AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV262144AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV262144AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV4096AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV4096AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV4ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV4AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV4AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV64ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV64AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV64AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV65536AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UEV65536AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV1024AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV1024AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV1048576AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV1048576AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV16384AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV16384AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV16ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV16AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV16AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV256AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV256AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV262144AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV262144AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV4096AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV4096AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV4ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV4AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV4AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV64ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV64AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV64AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV65536AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UHV65536AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV1024AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV1024AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV1048576AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV1048576AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV16384AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV16384AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV16ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV16AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV16AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV256AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV256AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV262144AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV262144AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV4096AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV4096AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV4ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV4AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV4AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV64ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV64AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV64AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV65536AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UIV65536AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV1024AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV1024AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV1048576AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV1048576AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV16384AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV16384AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV16ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV16AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV16AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV256AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV256AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV262144AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV262144AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV4096AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV4096AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV4ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV4AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV4AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV64ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV64AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV64AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV65536AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UMV65536AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV1024AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV1024AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV1048576AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV1048576AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV16384AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV16384AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV16ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV16AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV16AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV256AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV256AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV262144AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV262144AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV4096AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV4096AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV4ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV4AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV4AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV64ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV64AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV64AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV65536AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UV65536AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV1024AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV1024AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV1024AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV1048576AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV1048576AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV1048576AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV16384AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV16384AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV16384AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV16ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV16AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV16AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV256AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV256AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV256AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV262144AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV262144AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV262144AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV4096AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV4096AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV4096AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV4ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV4AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV4AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV64ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV64AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV64AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV65536AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV65536AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UXV65536AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.UltimatePowerBuckConverter; -import static gregtech.api.enums.MetaTileEntityIDs.UltimatePowerTeslaTransceiver1by1; -import static gregtech.api.enums.MetaTileEntityIDs.UltimatePowerTeslaTransceiver2by2; -import static gregtech.api.enums.MetaTileEntityIDs.UltimatePowerTeslaTransceiver3by3; -import static gregtech.api.enums.MetaTileEntityIDs.UltimatePowerTeslaTransceiver4by4; -import static gregtech.api.enums.MetaTileEntityIDs.UncertaintyResolution; -import static gregtech.api.enums.MetaTileEntityIDs.UncertaintyResolver; -import static gregtech.api.enums.MetaTileEntityIDs.UncertaintyResolverX; -import static gregtech.api.enums.MetaTileEntityIDs.WirelessAssemblylineSlaveConnector; -import static gregtech.api.enums.MetaTileEntityIDs.WirelessDataBankMasterConnector; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM1024AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM1024AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM1048576AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM1048576AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM16384AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM16384AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM16ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM16AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM16AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM256AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM256AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM262144AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM262144AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM4096AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM4096AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM4ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM4AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM4AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM64ADynamoHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM64AEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM64AWirelessEnergyHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM65536AtLaserSourceHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPM65536AtLaserTargetHatch; -import static gregtech.api.enums.MetaTileEntityIDs.ZPMVoltageBuckConverter; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; - -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Capacitor; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_CreativeData; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_CreativeMaintenance; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_CreativeUncertainty; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoTunnel; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyTunnel; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Holder; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputDataItems; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputDataItems; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Param; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_ParamText; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Rack; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Uncertainty; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessComputation_Input; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessComputation_Output; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessInputDataItems; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessOutputDataItems; -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_EyeOfHarmony; -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_ForgeOfGods; -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_computer; -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_dataBank; -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_infuser; -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_research; -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_switch; -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_transformer; -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_microwave; -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_TM_teslaCoil; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_ExoticModule; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_MoltenModule; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_PlasmaModule; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_SmeltingModule; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_PipeBlock_Data; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_PipeBlock_Energy; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Data; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Energy; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_EnergyMirror; -import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_BuckConverter; -import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_DebugPollutor; -import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_DebugPowerGenerator; -import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_DebugStructureWriter; -import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_OwnerDetector; -import com.github.technus.tectech.thing.metaTileEntity.single.GT_MetaTileEntity_TeslaCoil; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.MetaTileEntityIDs; - -/** - * Created by danie_000 on 16.11.2016. - */ -public class MachineLoader implements Runnable { - - @Override - public void run() { - - // =================================================================================================== - // Multi AMP Power INPUTS - // =================================================================================================== - eM_energyMulti4_EV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - EV4AEnergyHatch.ID, - "hatch.energymulti04.tier.04", - "EV 4A Energy Hatch", - 4, - 4).getStackForm(1L)); - eM_energyMulti16_EV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - EV16AEnergyHatch.ID, - "hatch.energymulti16.tier.04", - "EV 16A Energy Hatch", - 4, - 16).getStackForm(1L)); - eM_energyMulti64_EV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - EV64AEnergyHatch.ID, - "hatch.energymulti64.tier.04", - "EV 64A Energy Hatch", - 4, - 64).getStackForm(1L)); - - eM_energyMulti4_IV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - IV4AEnergyHatch.ID, - "hatch.energymulti04.tier.05", - "IV 4A Energy Hatch", - 5, - 4).getStackForm(1L)); - eM_energyMulti16_IV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - IV16AEnergyHatch.ID, - "hatch.energymulti16.tier.05", - "IV 16A Energy Hatch", - 5, - 16).getStackForm(1L)); - eM_energyMulti64_IV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - IV64AEnergyHatch.ID, - "hatch.energymulti64.tier.05", - "IV 64A Energy Hatch", - 5, - 64).getStackForm(1L)); - - eM_energyMulti4_LuV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - LuV4AEnergyHatch.ID, - "hatch.energymulti04.tier.06", - "LuV 4A Energy Hatch", - 6, - 4).getStackForm(1L)); - eM_energyMulti16_LuV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - LuV16AEnergyHatch.ID, - "hatch.energymulti16.tier.06", - "LuV 16A Energy Hatch", - 6, - 16).getStackForm(1L)); - eM_energyMulti64_LuV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - LuV64AEnergyHatch.ID, - "hatch.energymulti64.tier.06", - "LuV 64A Energy Hatch", - 6, - 64).getStackForm(1L)); - - eM_energyMulti4_ZPM.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - ZPM4AEnergyHatch.ID, - "hatch.energymulti04.tier.07", - "ZPM 4A Energy Hatch", - 7, - 4).getStackForm(1L)); - eM_energyMulti16_ZPM.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - ZPM16AEnergyHatch.ID, - "hatch.energymulti16.tier.07", - "ZPM 16A Energy Hatch", - 7, - 16).getStackForm(1L)); - eM_energyMulti64_ZPM.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - ZPM64AEnergyHatch.ID, - "hatch.energymulti64.tier.07", - "ZPM 64A Energy Hatch", - 7, - 64).getStackForm(1L)); - - eM_energyMulti4_UV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UV4AEnergyHatch.ID, - "hatch.energymulti04.tier.08", - "UV 4A Energy Hatch", - 8, - 4).getStackForm(1L)); - eM_energyMulti16_UV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UV16AEnergyHatch.ID, - "hatch.energymulti16.tier.08", - "UV 16A Energy Hatch", - 8, - 16).getStackForm(1L)); - eM_energyMulti64_UV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UV64AEnergyHatch.ID, - "hatch.energymulti64.tier.08", - "UV 64A Energy Hatch", - 8, - 64).getStackForm(1L)); - - eM_energyMulti4_UHV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UHV4AEnergyHatch.ID, - "hatch.energymulti04.tier.09", - "UHV 4A Energy Hatch", - 9, - 4).getStackForm(1L)); - eM_energyMulti16_UHV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UHV16AEnergyHatch.ID, - "hatch.energymulti16.tier.09", - "UHV 16A Energy Hatch", - 9, - 16).getStackForm(1L)); - eM_energyMulti64_UHV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UHV64AEnergyHatch.ID, - "hatch.energymulti64.tier.09", - "UHV 64A Energy Hatch", - 9, - 64).getStackForm(1L)); - - eM_energyMulti4_UEV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UEV4AEnergyHatch.ID, - "hatch.energymulti04.tier.10", - "UEV 4A Energy Hatch", - 10, - 4).getStackForm(1L)); - eM_energyMulti16_UEV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UEV16AEnergyHatch.ID, - "hatch.energymulti16.tier.10", - "UEV 16A Energy Hatch", - 10, - 16).getStackForm(1L)); - eM_energyMulti64_UEV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UEV64AEnergyHatch.ID, - "hatch.energymulti64.tier.10", - "UEV 64A Energy Hatch", - 10, - 64).getStackForm(1L)); - - eM_energyMulti4_UIV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UIV4AEnergyHatch.ID, - "hatch.energymulti04.tier.11", - "UIV 4A Energy Hatch", - 11, - 4).getStackForm(1L)); - eM_energyMulti16_UIV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UIV16AEnergyHatch.ID, - "hatch.energymulti16.tier.11", - "UIV 16A Energy Hatch", - 11, - 16).getStackForm(1L)); - eM_energyMulti64_UIV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UIV64AEnergyHatch.ID, - "hatch.energymulti64.tier.11", - "UIV 64A Energy Hatch", - 11, - 64).getStackForm(1L)); - - eM_energyMulti4_UMV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UMV4AEnergyHatch.ID, - "hatch.energymulti04.tier.12", - "UMV 4A Energy Hatch", - 12, - 4).getStackForm(1L)); - eM_energyMulti16_UMV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UMV16AEnergyHatch.ID, - "hatch.energymulti16.tier.12", - "UMV 16A Energy Hatch", - 12, - 16).getStackForm(1L)); - eM_energyMulti64_UMV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UMV64AEnergyHatch.ID, - "hatch.energymulti64.tier.12", - "UMV 64A Energy Hatch", - 12, - 64).getStackForm(1L)); - - eM_energyMulti4_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UXV4AEnergyHatch.ID, - "hatch.energymulti04.tier.13", - "UXV 4A Energy Hatch", - 13, - 4).getStackForm(1L)); - eM_energyMulti16_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UXV16AEnergyHatch.ID, - "hatch.energymulti16.tier.13", - "UXV 16A Energy Hatch", - 13, - 16).getStackForm(1L)); - eM_energyMulti64_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyMulti( - UXV64AEnergyHatch.ID, - "hatch.energymulti64.tier.13", - "UXV 64A Energy Hatch", - 13, - 64).getStackForm(1L)); - // =================================================================================================== - // Multi AMP Wireless INPUTS - // =================================================================================================== - eM_energyWirelessMulti4_EV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - EV4AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti04.tier.04", - "EV 4A Wireless Energy Hatch", - 4, - 4).getStackForm(1L)); - eM_energyWirelessMulti16_EV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - EV16AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti16.tier.04", - "EV 16A Wireless Energy Hatch", - 4, - 16).getStackForm(1L)); - eM_energyWirelessMulti64_EV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - EV64AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti64.tier.04", - "EV 64A Wireless Energy Hatch", - 4, - 64).getStackForm(1L)); - eM_energyWirelessMulti4_IV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - IV4AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti04.tier.05", - "IV 4A Wireless Energy Hatch", - 5, - 4).getStackForm(1L)); - eM_energyWirelessMulti16_IV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - IV16AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti16.tier.05", - "IV 16A Wireless Energy Hatch", - 5, - 16).getStackForm(1L)); - eM_energyWirelessMulti64_IV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - IV64AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti64.tier.05", - "IV 64A Wireless Energy Hatch", - 5, - 64).getStackForm(1L)); - eM_energyWirelessMulti4_LuV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - LuV4AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti04.tier.06", - "LuV 4A Wireless Energy Hatch", - 6, - 4).getStackForm(1L)); - eM_energyWirelessMulti16_LuV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - LuV16AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti16.tier.06", - "LuV 16A Wireless Energy Hatch", - 6, - 16).getStackForm(1L)); - eM_energyWirelessMulti64_LuV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - LuV64AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti64.tier.06", - "LuV 64A Wireless Energy Hatch", - 6, - 64).getStackForm(1L)); - eM_energyWirelessMulti4_ZPM.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - ZPM4AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti04.tier.07", - "ZPM 4A Wireless Energy Hatch", - 7, - 4).getStackForm(1L)); - eM_energyWirelessMulti16_ZPM.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - ZPM16AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti16.tier.07", - "ZPM 16A Wireless Energy Hatch", - 7, - 16).getStackForm(1L)); - eM_energyWirelessMulti64_ZPM.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - ZPM64AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti64.tier.07", - "ZPM 64A Wireless Energy Hatch", - 7, - 64).getStackForm(1L)); - eM_energyWirelessMulti4_UV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UV4AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti04.tier.08", - "UV 4A Wireless Energy Hatch", - 8, - 4).getStackForm(1L)); - eM_energyWirelessMulti16_UV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UV16AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti16.tier.08", - "UV 16A Wireless Energy Hatch", - 8, - 16).getStackForm(1L)); - eM_energyWirelessMulti64_UV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UV64AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti64.tier.08", - "UV 64A Wireless Energy Hatch", - 8, - 64).getStackForm(1L)); - eM_energyWirelessMulti4_UHV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UHV4AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti04.tier.09", - "UHV 4A Wireless Energy Hatch", - 9, - 4).getStackForm(1L)); - eM_energyWirelessMulti16_UHV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UHV16AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti16.tier.09", - "UHV 16A Wireless Energy Hatch", - 9, - 16).getStackForm(1L)); - eM_energyWirelessMulti64_UHV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UHV64AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti64.tier.09", - "UHV 64A Wireless Energy Hatch", - 9, - 64).getStackForm(1L)); - eM_energyWirelessMulti4_UEV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UEV4AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti04.tier.10", - "UEV 4A Wireless Energy Hatch", - 10, - 4).getStackForm(1L)); - eM_energyWirelessMulti16_UEV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UEV16AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti16.tier.10", - "UEV 16A Wireless Energy Hatch", - 10, - 16).getStackForm(1L)); - eM_energyWirelessMulti64_UEV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UEV64AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti64.tier.10", - "UEV 64A Wireless Energy Hatch", - 10, - 64).getStackForm(1L)); - eM_energyWirelessMulti4_UIV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UIV4AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti04.tier.11", - "UIV 4A Wireless Energy Hatch", - 11, - 4).getStackForm(1L)); - eM_energyWirelessMulti16_UIV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UIV16AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti16.tier.11", - "UIV 16A Wireless Energy Hatch", - 11, - 16).getStackForm(1L)); - eM_energyWirelessMulti64_UIV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UIV64AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti64.tier.11", - "UIV 64A Wireless Energy Hatch", - 11, - 64).getStackForm(1L)); - eM_energyWirelessMulti4_UMV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UMV4AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti04.tier.12", - "UMV 4A Wireless Energy Hatch", - 12, - 4).getStackForm(1L)); - eM_energyWirelessMulti16_UMV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UMV16AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti16.tier.12", - "UMV 16A Wireless Energy Hatch", - 12, - 16).getStackForm(1L)); - eM_energyWirelessMulti64_UMV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UMV64AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti64.tier.12", - "UMV 64A Wireless Energy Hatch", - 12, - 64).getStackForm(1L)); - eM_energyWirelessMulti4_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UXV4AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti04.tier.13", - "UXV 4A Wireless Energy Hatch", - 13, - 4).getStackForm(1L)); - eM_energyWirelessMulti16_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UXV16AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti16.tier.13", - "UXV 16A Wireless Energy Hatch", - 13, - 16).getStackForm(1L)); - eM_energyWirelessMulti64_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UXV64AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti64.tier.13", - "UXV 64A Wireless Energy Hatch", - 13, - 64).getStackForm(1L)); - eM_energyWirelessMulti4_MAX.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - MAX4AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti04.tier.14", - "MAX 4A Wireless Energy Hatch", - 14, - 4).getStackForm(1L)); - eM_energyWirelessMulti16_MAX.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - MAX16AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti16.tier.14", - "MAX 16A Wireless Energy Hatch", - 14, - 16).getStackForm(1L)); - eM_energyWirelessMulti64_MAX.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - MAX64AWirelessEnergyHatch.ID, - "hatch.energywirelessmulti64.tier.14", - "MAX 64A Wireless Energy Hatch", - 14, - 64).getStackForm(1L)); - eM_energyWirelessTunnel1_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UXV256AWirelessEnergyHatch.ID, - "hatch.energywirelesstunnel1.tier.13", - "UXV 256A Wireless Energy Hatch", - 13, - 256).getStackForm(1L)); - eM_energyWirelessTunnel2_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UXV1024AWirelessEnergyHatch.ID, - "hatch.energywirelesstunnel2.tier.13", - "UXV 1,024A Wireless Energy Hatch", - 13, - 1024).getStackForm(1L)); - eM_energyWirelessTunnel3_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UXV4096AWirelessEnergyHatch.ID, - "hatch.energywirelesstunnel3.tier.13", - "UXV 4,096A Wireless Energy Hatch", - 13, - 4096).getStackForm(1L)); - eM_energyWirelessTunnel4_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UXV16384AWirelessEnergyHatch.ID, - "hatch.energywirelesstunnel4.tier.13", - "UXV 16,384A Wireless Energy Hatch", - 13, - 16384).getStackForm(1L)); - eM_energyWirelessTunnel5_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UXV65536AWirelessEnergyHatch.ID, - "hatch.energywirelesstunnel5.tier.13", - "UXV 65,536A Wireless Energy Hatch", - 13, - 65536).getStackForm(1L)); - eM_energyWirelessTunnel6_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UXV262144AWirelessEnergyHatch.ID, - "hatch.energywirelesstunnel6.tier.13", - "UXV 262,144A Wireless Energy Hatch", - 13, - 262144).getStackForm(1L)); - eM_energyWirelessTunnel7_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - UXV1048576AWirelessEnergyHatch.ID, - "hatch.energywirelesstunnel7.tier.13", - "UXV 1,048,576A Wireless Energy Hatch", - 13, - 1048576).getStackForm(1L)); - eM_energyWirelessTunnel8_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - MetaTileEntityIDs.WIRELESS_LASER_UXV8.ID, - "hatch.energywirelesstunnel8.tier.13", - "UXV 4,194,304A Wireless Energy Hatch", - 13, - 4194304).getStackForm(1L)); - eM_energyWirelessTunnel9_UXV.set( - new GT_MetaTileEntity_Hatch_WirelessMulti( - MetaTileEntityIDs.WIRELESS_LASER_UXV9.ID, - "hatch.energywirelesstunnel9.tier.13", - "UXV 16,777,216A Wireless Energy Hatch", - 13, - 16777216).getStackForm(1L)); - // =================================================================================================== - // Multi AMP Laser INPUTS - // =================================================================================================== - - eM_energyTunnel1_IV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - IV256AtLaserTargetHatch.ID, - "hatch.energytunnel1.tier.05", - "IV 256A/t Laser Target Hatch", - 5, - 256).getStackForm(1L)); - eM_energyTunnel2_IV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - IV1024AtLaserTargetHatch.ID, - "hatch.energytunnel2.tier.05", - "IV 1,024A/t Laser Target Hatch", - 5, - 1024).getStackForm(1L)) - .hidden(); - eM_energyTunnel3_IV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - IV4096AtLaserTargetHatch.ID, - "hatch.energytunnel3.tier.05", - "IV 4,096A/t Laser Target Hatch", - 5, - 4096).getStackForm(1L)) - .hidden(); - eM_energyTunnel4_IV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - IV16384AtLaserTargetHatch.ID, - "hatch.energytunnel4.tier.05", - "IV 16,384A/t Laser Target Hatch", - 5, - 16384).getStackForm(1L)) - .hidden(); - eM_energyTunnel5_IV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - IV65536AtLaserTargetHatch.ID, - "hatch.energytunnel5.tier.05", - "IV 65,536A/t Laser Target Hatch", - 5, - 65536).getStackForm(1L)) - .hidden(); - eM_energyTunnel6_IV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - IV262144AtLaserTargetHatch.ID, - "hatch.energytunnel6.tier.05", - "IV 262,144A/t Laser Target Hatch", - 5, - 262144).getStackForm(1L)) - .hidden(); - eM_energyTunnel7_IV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - IV1048576AtLaserTargetHatch.ID, - "hatch.energytunnel7.tier.05", - "IV 1,048,576A/t Laser Target Hatch", - 5, - 1048576).getStackForm(1L)) - .hidden(); - - eM_energyTunnel1_LuV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - LuV256AtLaserTargetHatch.ID, - "hatch.energytunnel1.tier.06", - "LuV 256A/t Laser Target Hatch", - 6, - 256).getStackForm(1L)); - eM_energyTunnel2_LuV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - LuV1024AtLaserTargetHatch.ID, - "hatch.energytunnel2.tier.06", - "LuV 1,024A/t Laser Target Hatch", - 6, - 1024).getStackForm(1L)); - eM_energyTunnel3_LuV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - LuV4096AtLaserTargetHatch.ID, - "hatch.energytunnel3.tier.06", - "LuV 4,096A/t Laser Target Hatch", - 6, - 4096).getStackForm(1L)) - .hidden(); - eM_energyTunnel4_LuV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - LuV16384AtLaserTargetHatch.ID, - "hatch.energytunnel4.tier.06", - "LuV 16,384A/t Laser Target Hatch", - 6, - 16384).getStackForm(1L)) - .hidden(); - eM_energyTunnel5_LuV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - LuV65536AtLaserTargetHatch.ID, - "hatch.energytunnel5.tier.06", - "LuV 65,536A/t Laser Target Hatch", - 6, - 65536).getStackForm(1L)) - .hidden(); - eM_energyTunnel6_LuV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - LuV262144AtLaserTargetHatch.ID, - "hatch.energytunnel6.tier.06", - "LuV 262,144A/t Laser Target Hatch", - 6, - 262144).getStackForm(1L)) - .hidden(); - eM_energyTunnel7_LuV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - LuV1048576AtLaserTargetHatch.ID, - "hatch.energytunnel7.tier.06", - "LuV 1,048,576A/t Laser Target Hatch", - 6, - 1048576).getStackForm(1L)) - .hidden(); - eM_energyTunnel1_ZPM.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - ZPM256AtLaserTargetHatch.ID, - "hatch.energytunnel1.tier.07", - "ZPM 256A/t Laser Target Hatch", - 7, - 256).getStackForm(1L)); - eM_energyTunnel2_ZPM.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - ZPM1024AtLaserTargetHatch.ID, - "hatch.energytunnel2.tier.07", - "ZPM 1,024A/t Laser Target Hatch", - 7, - 1024).getStackForm(1L)); - eM_energyTunnel3_ZPM.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - ZPM4096AtLaserTargetHatch.ID, - "hatch.energytunnel3.tier.07", - "ZPM 4,096A/t Laser Target Hatch", - 7, - 4096).getStackForm(1L)); - eM_energyTunnel4_ZPM - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - ZPM16384AtLaserTargetHatch.ID, - "hatch.energytunnel4.tier.07", - "ZPM 16,384A/t Laser Target Hatch", - 7, - 16384).getStackForm(1L)) - .hidden(); - eM_energyTunnel5_ZPM - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - ZPM65536AtLaserTargetHatch.ID, - "hatch.energytunnel5.tier.07", - "ZPM 65,536A/t Laser Target Hatch", - 7, - 65536).getStackForm(1L)) - .hidden(); - eM_energyTunnel6_ZPM - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - ZPM262144AtLaserTargetHatch.ID, - "hatch.energytunnel6.tier.07", - "ZPM 262,144A/t Laser Target Hatch", - 7, - 262144).getStackForm(1L)) - .hidden(); - eM_energyTunnel7_ZPM - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - ZPM1048576AtLaserTargetHatch.ID, - "hatch.energytunnel7.tier.07", - "ZPM 1,048,576A/t Laser Target Hatch", - 7, - 1048576).getStackForm(1L)) - .hidden(); - eM_energyTunnel1_UV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UV256AtLaserTargetHatch.ID, - "hatch.energytunnel1.tier.08", - "UV 256A/t Laser Target Hatch", - 8, - 256).getStackForm(1L)); - eM_energyTunnel2_UV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UV1024AtLaserTargetHatch.ID, - "hatch.energytunnel2.tier.08", - "UV 1,024A/t Laser Target Hatch", - 8, - 1024).getStackForm(1L)); - eM_energyTunnel3_UV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UV4096AtLaserTargetHatch.ID, - "hatch.energytunnel3.tier.08", - "UV 4,096A/t Laser Target Hatch", - 8, - 4096).getStackForm(1L)); - eM_energyTunnel4_UV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UV16384AtLaserTargetHatch.ID, - "hatch.energytunnel4.tier.08", - "UV 16,384A/t Laser Target Hatch", - 8, - 16384).getStackForm(1L)); - eM_energyTunnel5_UV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UV65536AtLaserTargetHatch.ID, - "hatch.energytunnel5.tier.08", - "UV 65,536A/t Laser Target Hatch", - 8, - 65536).getStackForm(1L)) - .hidden(); - eM_energyTunnel6_UV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UV262144AtLaserTargetHatch.ID, - "hatch.energytunnel6.tier.08", - "UV 262,144A/t Laser Target Hatch", - 8, - 262144).getStackForm(1L)) - .hidden(); - eM_energyTunnel7_UV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UV1048576AtLaserTargetHatch.ID, - "hatch.energytunnel7.tier.08", - "UV 1,048,576A/t Laser Target Hatch", - 8, - 1048576).getStackForm(1L)) - .hidden(); - eM_energyTunnel1_UHV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UHV256AtLaserTargetHatch.ID, - "hatch.energytunnel1.tier.09", - "UHV 256A/t Laser Target Hatch", - 9, - 256).getStackForm(1L)); - eM_energyTunnel2_UHV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UHV1024AtLaserTargetHatch.ID, - "hatch.energytunnel2.tier.09", - "UHV 1,024A/t Laser Target Hatch", - 9, - 1024).getStackForm(1L)); - eM_energyTunnel3_UHV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UHV4096AtLaserTargetHatch.ID, - "hatch.energytunnel3.tier.09", - "UHV 4,096A/t Laser Target Hatch", - 9, - 4096).getStackForm(1L)); - eM_energyTunnel4_UHV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UHV16384AtLaserTargetHatch.ID, - "hatch.energytunnel4.tier.09", - "UHV 16,384A/t Laser Target Hatch", - 9, - 16384).getStackForm(1L)); - eM_energyTunnel5_UHV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UHV65536AtLaserTargetHatch.ID, - "hatch.energytunnel5.tier.09", - "UHV 65,536A/t Laser Target Hatch", - 9, - 65536).getStackForm(1L)); - eM_energyTunnel6_UHV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UHV262144AtLaserTargetHatch.ID, - "hatch.energytunnel6.tier.09", - "UHV 262,144A/t Laser Target Hatch", - 9, - 262144).getStackForm(1L)) - .hidden(); - eM_energyTunnel7_UHV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UHV1048576AtLaserTargetHatch.ID, - "hatch.energytunnel7.tier.09", - "UHV 1,048,576A/t Laser Target Hatch", - 9, - 1048576).getStackForm(1L)) - .hidden(); - - eM_energyTunnel1_UEV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UEV256AtLaserTargetHatch.ID, - "hatch.energytunnel1.tier.10", - "UEV 256A/t Laser Target Hatch", - 10, - 256).getStackForm(1L)); - eM_energyTunnel2_UEV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UEV1024AtLaserTargetHatch.ID, - "hatch.energytunnel2.tier.10", - "UEV 1,024A/t Laser Target Hatch", - 10, - 1024).getStackForm(1L)); - eM_energyTunnel3_UEV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UEV4096AtLaserTargetHatch.ID, - "hatch.energytunnel3.tier.10", - "UEV 4,096A/t Laser Target Hatch", - 10, - 4096).getStackForm(1L)); - eM_energyTunnel4_UEV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UEV16384AtLaserTargetHatch.ID, - "hatch.energytunnel4.tier.10", - "UEV 16,384A/t Laser Target Hatch", - 10, - 16384).getStackForm(1L)); - eM_energyTunnel5_UEV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UEV65536AtLaserTargetHatch.ID, - "hatch.energytunnel5.tier.10", - "UEV 65,536A/t Laser Target Hatch", - 10, - 65536).getStackForm(1L)); - eM_energyTunnel6_UEV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UEV262144AtLaserTargetHatch.ID, - "hatch.energytunnel6.tier.10", - "UEV 262,144A/t Laser Target Hatch", - 10, - 262144).getStackForm(1L)); - eM_energyTunnel7_UEV - .set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UEV1048576AtLaserTargetHatch.ID, - "hatch.energytunnel7.tier.10", - "UEV 1,048,576A/t Laser Target Hatch", - 10, - 1048576).getStackForm(1L)) - .hidden(); - eM_energyTunnel1_UIV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UIV256AtLaserTargetHatch.ID, - "hatch.energytunnel1.tier.11", - "UIV 256A/t Laser Target Hatch", - 11, - 256).getStackForm(1L)); - eM_energyTunnel2_UIV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UIV1024AtLaserTargetHatch.ID, - "hatch.energytunnel2.tier.11", - "UIV 1,024A/t Laser Target Hatch", - 11, - 1024).getStackForm(1L)); - eM_energyTunnel3_UIV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UIV4096AtLaserTargetHatch.ID, - "hatch.energytunnel3.tier.11", - "UIV 4,096A/t Laser Target Hatch", - 11, - 4096).getStackForm(1L)); - eM_energyTunnel4_UIV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UIV16384AtLaserTargetHatch.ID, - "hatch.energytunnel4.tier.11", - "UIV 16,384A/t Laser Target Hatch", - 11, - 16384).getStackForm(1L)); - eM_energyTunnel5_UIV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UIV65536AtLaserTargetHatch.ID, - "hatch.energytunnel5.tier.11", - "UIV 65,536A/t Laser Target Hatch", - 11, - 65536).getStackForm(1L)); - eM_energyTunnel6_UIV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UIV262144AtLaserTargetHatch.ID, - "hatch.energytunnel6.tier.11", - "UIV 262,144A/t Laser Target Hatch", - 11, - 262144).getStackForm(1L)); - eM_energyTunnel7_UIV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UIV1048576AtLaserTargetHatch.ID, - "hatch.energytunnel7.tier.11", - "UIV 1,048,576A/t Laser Target Hatch", - 11, - 1048576).getStackForm(1L)); - eM_energyTunnel1_UMV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UMV256AtLaserTargetHatch.ID, - "hatch.energytunnel1.tier.12", - "UMV 256A/t Laser Target Hatch", - 12, - 256).getStackForm(1L)); - eM_energyTunnel2_UMV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UMV1024AtLaserTargetHatch.ID, - "hatch.energytunnel2.tier.12", - "UMV 1,024A/t Laser Target Hatch", - 12, - 1024).getStackForm(1L)); - eM_energyTunnel3_UMV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UMV4096AtLaserTargetHatch.ID, - "hatch.energytunnel3.tier.12", - "UMV 4,096A/t Laser Target Hatch", - 12, - 4096).getStackForm(1L)); - eM_energyTunnel4_UMV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UMV16384AtLaserTargetHatch.ID, - "hatch.energytunnel4.tier.12", - "UMV 16,384A/t Laser Target Hatch", - 12, - 16384).getStackForm(1L)); - eM_energyTunnel5_UMV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UMV65536AtLaserTargetHatch.ID, - "hatch.energytunnel5.tier.12", - "UMV 65,536A/t Laser Target Hatch", - 12, - 65536).getStackForm(1L)); - eM_energyTunnel6_UMV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UMV262144AtLaserTargetHatch.ID, - "hatch.energytunnel6.tier.12", - "UMV 262,144A/t Laser Target Hatch", - 12, - 262144).getStackForm(1L)); - eM_energyTunnel7_UMV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UMV1048576AtLaserTargetHatch.ID, - "hatch.energytunnel7.tier.12", - "UMV 1,048,576A/t Laser Target Hatch", - 12, - 1048576).getStackForm(1L)); - eM_energyTunnel8_UMV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - MetaTileEntityIDs.LASER_TARGET_UMV8.ID, - "hatch.energytunnel8.tier.12", - "UMV 4,194,304A/t Laser Target Hatch", - 12, - 4194304).getStackForm(1L)); - eM_energyTunnel1_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UXV256AtLaserTargetHatch.ID, - "hatch.energytunnel1.tier.13", - "UXV 256A/t Laser Target Hatch", - 13, - 256).getStackForm(1L)); - eM_energyTunnel2_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UXV1024AtLaserTargetHatch.ID, - "hatch.energytunnel2.tier.13", - "UXV 1,024A/t Laser Target Hatch", - 13, - 1024).getStackForm(1L)); - eM_energyTunnel3_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UXV4096AtLaserTargetHatch.ID, - "hatch.energytunnel3.tier.13", - "UXV 4,096A/t Laser Target Hatch", - 13, - 4096).getStackForm(1L)); - eM_energyTunnel4_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UXV16384AtLaserTargetHatch.ID, - "hatch.energytunnel4.tier.13", - "UXV 16,384A/t Laser Target Hatch", - 13, - 16384).getStackForm(1L)); - eM_energyTunnel5_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UXV65536AtLaserTargetHatch.ID, - "hatch.energytunnel5.tier.13", - "UXV 65,536A/t Laser Target Hatch", - 13, - 65536).getStackForm(1L)); - eM_energyTunnel6_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UXV262144AtLaserTargetHatch.ID, - "hatch.energytunnel6.tier.13", - "UXV 262,144A/t Laser Target Hatch", - 13, - 262144).getStackForm(1L)); - eM_energyTunnel7_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - UXV1048576AtLaserTargetHatch.ID, - "hatch.energytunnel7.tier.13", - "UXV 1,048,576A/t Laser Target Hatch", - 13, - 1048576).getStackForm(1L)); - eM_energyTunnel8_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - MetaTileEntityIDs.LASER_TARGET_UXV8.ID, - "hatch.energytunnel8.tier.13", - "UXV 4,194,304A/t Laser Target Hatch", - 13, - 4194304).getStackForm(1L)); - eM_energyTunnel9_UXV.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - MetaTileEntityIDs.LASER_TARGET_UXV9.ID, - "hatch.energytunnel9.tier.13", - "UXV 16,777,216A/t Laser Target Hatch", - 13, - 16777216).getStackForm(1L)); - eM_energyTunnel9001.set( - new GT_MetaTileEntity_Hatch_EnergyTunnel( - LegendaryLaserTargetHatch.ID, - "hatch.energytunnel.tier.14", - "Legendary Laser Target Hatch", - 13, - (int) V[13]).getStackForm(1L)); - - // =================================================================================================== - // Multi AMP Power OUTPUTS - // =================================================================================================== - eM_dynamoMulti4_EV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - EV4ADynamoHatch.ID, - "hatch.dynamomulti04.tier.04", - "EV 4A Dynamo Hatch", - 4, - 4).getStackForm(1L)); - eM_dynamoMulti16_EV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - EV16ADynamoHatch.ID, - "hatch.dynamomulti16.tier.04", - "EV 16A Dynamo Hatch", - 4, - 16).getStackForm(1L)); - eM_dynamoMulti64_EV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - EV64ADynamoHatch.ID, - "hatch.dynamomulti64.tier.04", - "EV 64A Dynamo Hatch", - 4, - 64).getStackForm(1L)); - eM_dynamoMulti4_IV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - IV4ADynamoHatch.ID, - "hatch.dynamomulti04.tier.05", - "IV 4A Dynamo Hatch", - 5, - 4).getStackForm(1L)); - eM_dynamoMulti16_IV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - IV16ADynamoHatch.ID, - "hatch.dynamomulti16.tier.05", - "IV 16A Dynamo Hatch", - 5, - 16).getStackForm(1L)); - eM_dynamoMulti64_IV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - IV64ADynamoHatch.ID, - "hatch.dynamomulti64.tier.05", - "IV 64A Dynamo Hatch", - 5, - 64).getStackForm(1L)); - eM_dynamoMulti4_LuV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - LuV4ADynamoHatch.ID, - "hatch.dynamomulti04.tier.06", - "LuV 4A Dynamo Hatch", - 6, - 4).getStackForm(1L)); - eM_dynamoMulti16_LuV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - LuV16ADynamoHatch.ID, - "hatch.dynamomulti16.tier.06", - "LuV 16A Dynamo Hatch", - 6, - 16).getStackForm(1L)); - eM_dynamoMulti64_LuV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - LuV64ADynamoHatch.ID, - "hatch.dynamomulti64.tier.06", - "LuV 64A Dynamo Hatch", - 6, - 64).getStackForm(1L)); - eM_dynamoMulti4_ZPM.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - ZPM4ADynamoHatch.ID, - "hatch.dynamomulti04.tier.07", - "ZPM 4A Dynamo Hatch", - 7, - 4).getStackForm(1L)); - eM_dynamoMulti16_ZPM.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - ZPM16ADynamoHatch.ID, - "hatch.dynamomulti16.tier.07", - "ZPM 16A Dynamo Hatch", - 7, - 16).getStackForm(1L)); - eM_dynamoMulti64_ZPM.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - ZPM64ADynamoHatch.ID, - "hatch.dynamomulti64.tier.07", - "ZPM 64A Dynamo Hatch", - 7, - 64).getStackForm(1L)); - eM_dynamoMulti4_UV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UV4ADynamoHatch.ID, - "hatch.dynamomulti04.tier.08", - "UV 4A Dynamo Hatch", - 8, - 4).getStackForm(1L)); - eM_dynamoMulti16_UV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UV16ADynamoHatch.ID, - "hatch.dynamomulti16.tier.08", - "UV 16A Dynamo Hatch", - 8, - 16).getStackForm(1L)); - eM_dynamoMulti64_UV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UV64ADynamoHatch.ID, - "hatch.dynamomulti64.tier.08", - "UV 64A Dynamo Hatch", - 8, - 64).getStackForm(1L)); - eM_dynamoMulti4_UHV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UHV4ADynamoHatch.ID, - "hatch.dynamomulti04.tier.09", - "UHV 4A Dynamo Hatch", - 9, - 4).getStackForm(1L)); - eM_dynamoMulti16_UHV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UHV16ADynamoHatch.ID, - "hatch.dynamomulti16.tier.09", - "UHV 16A Dynamo Hatch", - 9, - 16).getStackForm(1L)); - eM_dynamoMulti64_UHV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UHV64ADynamoHatch.ID, - "hatch.dynamomulti64.tier.09", - "UHV 64A Dynamo Hatch", - 9, - 64).getStackForm(1L)); - eM_dynamoMulti4_UEV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UEV4ADynamoHatch.ID, - "hatch.dynamomulti04.tier.10", - "UEV 4A Dynamo Hatch", - 10, - 4).getStackForm(1L)); - eM_dynamoMulti16_UEV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UEV16ADynamoHatch.ID, - "hatch.dynamomulti16.tier.10", - "UEV 16A Dynamo Hatch", - 10, - 16).getStackForm(1L)); - eM_dynamoMulti64_UEV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UEV64ADynamoHatch.ID, - "hatch.dynamomulti64.tier.10", - "UEV 64A Dynamo Hatch", - 10, - 64).getStackForm(1L)); - eM_dynamoMulti4_UIV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UIV4ADynamoHatch.ID, - "hatch.dynamomulti04.tier.11", - "UIV 4A Dynamo Hatch", - 11, - 4).getStackForm(1L)); - eM_dynamoMulti16_UIV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UIV16ADynamoHatch.ID, - "hatch.dynamomulti16.tier.11", - "UIV 16A Dynamo Hatch", - 11, - 16).getStackForm(1L)); - eM_dynamoMulti64_UIV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UIV64ADynamoHatch.ID, - "hatch.dynamomulti64.tier.11", - "UIV 64A Dynamo Hatch", - 11, - 64).getStackForm(1L)); - eM_dynamoMulti4_UMV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UMV4ADynamoHatch.ID, - "hatch.dynamomulti04.tier.12", - "UMV 4A Dynamo Hatch", - 12, - 4).getStackForm(1L)); - eM_dynamoMulti16_UMV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UMV16ADynamoHatch.ID, - "hatch.dynamomulti16.tier.12", - "UMV 16A Dynamo Hatch", - 12, - 16).getStackForm(1L)); - eM_dynamoMulti64_UMV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UMV64ADynamoHatch.ID, - "hatch.dynamomulti64.tier.12", - "UMV 64A Dynamo Hatch", - 12, - 64).getStackForm(1L)); - eM_dynamoMulti4_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UXV4ADynamoHatch.ID, - "hatch.dynamomulti04.tier.13", - "UXV 4A Dynamo Hatch", - 13, - 4).getStackForm(1L)); - eM_dynamoMulti16_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UXV16ADynamoHatch.ID, - "hatch.dynamomulti16.tier.13", - "UXV 16A Dynamo Hatch", - 13, - 16).getStackForm(1L)); - eM_dynamoMulti64_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoMulti( - UXV64ADynamoHatch.ID, - "hatch.dynamomulti64.tier.13", - "UXV 64A Dynamo Hatch", - 13, - 64).getStackForm(1L)); - - // =================================================================================================== - // Multi AMP Laser OUTPUTS - // =================================================================================================== - - eM_dynamoTunnel1_IV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - IV256AtLaserSourceHatch.ID, - "hatch.dynamotunnel1.tier.05", - "IV 256A/t Laser Source Hatch", - 5, - 256).getStackForm(1L)); - eM_dynamoTunnel2_IV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - IV1024AtLaserSourceHatch.ID, - "hatch.dynamotunnel2.tier.05", - "IV 1,024A/t Laser Source Hatch", - 5, - 1024).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel3_IV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - IV4096AtLaserSourceHatch.ID, - "hatch.dynamotunnel3.tier.05", - "IV 4,096A/t Laser Source Hatch", - 5, - 4096).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel4_IV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - IV16384AtLaserSourceHatch.ID, - "hatch.dynamotunnel4.tier.05", - "IV 16,384A/t Laser Source Hatch", - 5, - 16384).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel5_IV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - IV65536AtLaserSourceHatch.ID, - "hatch.dynamotunnel5.tier.05", - "IV 65,536A/t Laser Source Hatch", - 5, - 65536).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel6_IV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - IV262144AtLaserSourceHatch.ID, - "hatch.dynamotunnel6.tier.05", - "IV 262,144A/t Laser Source Hatch", - 5, - 262144).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel7_IV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - IV1048576AtLaserSourceHatch.ID, - "hatch.dynamotunnel7.tier.05", - "IV 1,048,576A/t Laser Source Hatch", - 5, - 1048576).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel1_LuV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - LuV256AtLaserSourceHatch.ID, - "hatch.dynamotunnel1.tier.06", - "LuV 256A/t Laser Source Hatch", - 6, - 256).getStackForm(1L)); - eM_dynamoTunnel2_LuV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - LuV1024AtLaserSourceHatch.ID, - "hatch.dynamotunnel2.tier.06", - "LuV 1,024A/t Laser Source Hatch", - 6, - 1024).getStackForm(1L)); - eM_dynamoTunnel3_LuV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - LuV4096AtLaserSourceHatch.ID, - "hatch.dynamotunnel3.tier.06", - "LuV 4,096A/t Laser Source Hatch", - 6, - 4096).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel4_LuV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - LuV16384AtLaserSourceHatch.ID, - "hatch.dynamotunnel4.tier.06", - "LuV 16,384A/t Laser Source Hatch", - 6, - 16384).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel5_LuV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - LuV65536AtLaserSourceHatch.ID, - "hatch.dynamotunnel5.tier.06", - "LuV 65,536A/t Laser Source Hatch", - 6, - 65536).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel6_LuV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - LuV262144AtLaserSourceHatch.ID, - "hatch.dynamotunnel6.tier.06", - "LuV 262,144A/t Laser Source Hatch", - 6, - 262144).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel7_LuV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - LuV1048576AtLaserSourceHatch.ID, - "hatch.dynamotunnel7.tier.06", - "LuV 1,048,576A/t Laser Source Hatch", - 6, - 1048576).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel1_ZPM.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - ZPM256AtLaserSourceHatch.ID, - "hatch.dynamotunnel1.tier.07", - "ZPM 256A/t Laser Source Hatch", - 7, - 256).getStackForm(1L)); - eM_dynamoTunnel2_ZPM.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - ZPM1024AtLaserSourceHatch.ID, - "hatch.dynamotunnel2.tier.07", - "ZPM 1,024A/t Laser Source Hatch", - 7, - 1024).getStackForm(1L)); - eM_dynamoTunnel3_ZPM.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - ZPM4096AtLaserSourceHatch.ID, - "hatch.dynamotunnel3.tier.07", - "ZPM 4,096A/t Laser Source Hatch", - 7, - 4096).getStackForm(1L)); - eM_dynamoTunnel4_ZPM - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - ZPM16384AtLaserSourceHatch.ID, - "hatch.dynamotunnel4.tier.07", - "ZPM 16,384A/t Laser Source Hatch", - 7, - 16384).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel5_ZPM - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - ZPM65536AtLaserSourceHatch.ID, - "hatch.dynamotunnel5.tier.07", - "ZPM 65,536A/t Laser Source Hatch", - 7, - 65536).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel6_ZPM - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - ZPM262144AtLaserSourceHatch.ID, - "hatch.dynamotunnel6.tier.07", - "ZPM 262,144A/t Laser Source Hatch", - 7, - 262144).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel7_ZPM - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - ZPM1048576AtLaserSourceHatch.ID, - "hatch.dynamotunnel7.tier.07", - "ZPM 1,048,576A/t Laser Source Hatch", - 7, - 1048576).getStackForm(1L)) - .hidden(); - - eM_dynamoTunnel1_UV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UV256AtLaserSourceHatch.ID, - "hatch.dynamotunnel1.tier.08", - "UV 256A/t Laser Source Hatch", - 8, - 256).getStackForm(1L)); - eM_dynamoTunnel2_UV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UV1024AtLaserSourceHatch.ID, - "hatch.dynamotunnel2.tier.08", - "UV 1,024A/t Laser Source Hatch", - 8, - 1024).getStackForm(1L)); - eM_dynamoTunnel3_UV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UV4096AtLaserSourceHatch.ID, - "hatch.dynamotunnel3.tier.08", - "UV 4,096A/t Laser Source Hatch", - 8, - 4096).getStackForm(1L)); - eM_dynamoTunnel4_UV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UV16384AtLaserSourceHatch.ID, - "hatch.dynamotunnel4.tier.08", - "UV 16,384A/t Laser Source Hatch", - 8, - 16384).getStackForm(1L)); - eM_dynamoTunnel5_UV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UV65536AtLaserSourceHatch.ID, - "hatch.dynamotunnel5.tier.08", - "UV 65,536A/t Laser Source Hatch", - 8, - 65536).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel6_UV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UV262144AtLaserSourceHatch.ID, - "hatch.dynamotunnel6.tier.08", - "UV 262,144A/t Laser Source Hatch", - 8, - 262144).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel7_UV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UV1048576AtLaserSourceHatch.ID, - "hatch.dynamotunnel7.tier.08", - "UV 1,048,576A/t Laser Source Hatch", - 8, - 1048576).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel1_UHV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UHV256AtLaserSourceHatch.ID, - "hatch.dynamotunnel1.tier.09", - "UHV 256A/t Laser Source Hatch", - 9, - 256).getStackForm(1L)); - eM_dynamoTunnel2_UHV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UHV1024AtLaserSourceHatch.ID, - "hatch.dynamotunnel2.tier.09", - "UHV 1,024A/t Laser Source Hatch", - 9, - 1024).getStackForm(1L)); - eM_dynamoTunnel3_UHV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UHV4096AtLaserSourceHatch.ID, - "hatch.dynamotunnel3.tier.09", - "UHV 4,096A/t Laser Source Hatch", - 9, - 4096).getStackForm(1L)); - eM_dynamoTunnel4_UHV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UHV16384AtLaserSourceHatch.ID, - "hatch.dynamotunnel4.tier.09", - "UHV 16,384A/t Laser Source Hatch", - 9, - 16384).getStackForm(1L)); - eM_dynamoTunnel5_UHV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UHV65536AtLaserSourceHatch.ID, - "hatch.dynamotunnel5.tier.09", - "UHV 65,536A/t Laser Source Hatch", - 9, - 65536).getStackForm(1L)); - eM_dynamoTunnel6_UHV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UHV262144AtLaserSourceHatch.ID, - "hatch.dynamotunnel6.tier.09", - "UHV 262,144A/t Laser Source Hatch", - 9, - 262144).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel7_UHV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UHV1048576AtLaserSourceHatch.ID, - "hatch.dynamotunnel7.tier.09", - "UHV 1,048,576A/t Laser Source Hatch", - 9, - 1048576).getStackForm(1L)) - .hidden(); - eM_dynamoTunnel1_UEV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UEV256AtLaserSourceHatch.ID, - "hatch.dynamotunnel1.tier.10", - "UEV 256A/t Laser Source Hatch", - 10, - 256).getStackForm(1L)); - eM_dynamoTunnel2_UEV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UEV1024AtLaserSourceHatch.ID, - "hatch.dynamotunnel2.tier.10", - "UEV 1,024A/t Laser Source Hatch", - 10, - 1024).getStackForm(1L)); - eM_dynamoTunnel3_UEV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UEV4096AtLaserSourceHatch.ID, - "hatch.dynamotunnel3.tier.10", - "UEV 4,096A/t Laser Source Hatch", - 10, - 4096).getStackForm(1L)); - eM_dynamoTunnel4_UEV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UEV16384AtLaserSourceHatch.ID, - "hatch.dynamotunnel4.tier.10", - "UEV 16,384A/t Laser Source Hatch", - 10, - 16384).getStackForm(1L)); - eM_dynamoTunnel5_UEV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UEV65536AtLaserSourceHatch.ID, - "hatch.dynamotunnel5.tier.10", - "UEV 65,536A/t Laser Source Hatch", - 10, - 65536).getStackForm(1L)); - eM_dynamoTunnel6_UEV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UEV262144AtLaserSourceHatch.ID, - "hatch.dynamotunnel6.tier.10", - "UEV 262,144A/t Laser Source Hatch", - 10, - 262144).getStackForm(1L)); - eM_dynamoTunnel7_UEV - .set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UEV1048576AtLaserSourceHatch.ID, - "hatch.dynamotunnel7.tier.10", - "UEV 1,048,576A/t Laser Source Hatch", - 10, - 1048576).getStackForm(1L)) - .hidden(); - - eM_dynamoTunnel1_UIV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UIV256AtLaserSourceHatch.ID, - "hatch.dynamotunnel1.tier.11", - "UIV 256A/t Laser Source Hatch", - 11, - 256).getStackForm(1L)); - eM_dynamoTunnel2_UIV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UIV1024AtLaserSourceHatch.ID, - "hatch.dynamotunnel2.tier.11", - "UIV 1,024A/t Laser Source Hatch", - 11, - 1024).getStackForm(1L)); - eM_dynamoTunnel3_UIV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UIV4096AtLaserSourceHatch.ID, - "hatch.dynamotunnel3.tier.11", - "UIV 4,096A/t Laser Source Hatch", - 11, - 4096).getStackForm(1L)); - eM_dynamoTunnel4_UIV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UIV16384AtLaserSourceHatch.ID, - "hatch.dynamotunnel4.tier.11", - "UIV 16,384A/t Laser Source Hatch", - 11, - 16384).getStackForm(1L)); - eM_dynamoTunnel5_UIV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UIV65536AtLaserSourceHatch.ID, - "hatch.dynamotunnel5.tier.11", - "UIV 65,536A/t Laser Source Hatch", - 11, - 65536).getStackForm(1L)); - eM_dynamoTunnel6_UIV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UIV262144AtLaserSourceHatch.ID, - "hatch.dynamotunnel6.tier.11", - "UIV 262,144A/t Laser Source Hatch", - 11, - 262144).getStackForm(1L)); - eM_dynamoTunnel7_UIV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UIV1048576AtLaserSourceHatch.ID, - "hatch.dynamotunnel7.tier.11", - "UIV 1,048,576A/t Laser Source Hatch", - 11, - 1048576).getStackForm(1L)); - - eM_dynamoTunnel1_UMV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UMV256AtLaserSourceHatch.ID, - "hatch.dynamotunnel1.tier.12", - "UMV 256A/t Laser Source Hatch", - 12, - 256).getStackForm(1L)); - eM_dynamoTunnel2_UMV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UMV1024AtLaserSourceHatch.ID, - "hatch.dynamotunnel2.tier.12", - "UMV 1,024A/t Laser Source Hatch", - 12, - 1024).getStackForm(1L)); - eM_dynamoTunnel3_UMV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UMV4096AtLaserSourceHatch.ID, - "hatch.dynamotunnel3.tier.12", - "UMV 4,096A/t Laser Source Hatch", - 12, - 4096).getStackForm(1L)); - eM_dynamoTunnel4_UMV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UMV16384AtLaserSourceHatch.ID, - "hatch.dynamotunnel4.tier.12", - "UMV 16,384A/t Laser Source Hatch", - 12, - 16384).getStackForm(1L)); - eM_dynamoTunnel5_UMV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UMV65536AtLaserSourceHatch.ID, - "hatch.dynamotunnel5.tier.12", - "UMV 65,536A/t Laser Source Hatch", - 12, - 65536).getStackForm(1L)); - eM_dynamoTunnel6_UMV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UMV262144AtLaserSourceHatch.ID, - "hatch.dynamotunnel6.tier.12", - "UMV 262,144A/t Laser Source Hatch", - 12, - 262144).getStackForm(1L)); - eM_dynamoTunnel7_UMV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UMV1048576AtLaserSourceHatch.ID, - "hatch.dynamotunnel7.tier.12", - "UMV 1,048,576A/t Laser Source Hatch", - 12, - 1048576).getStackForm(1L)); - eM_dynamoTunnel8_UMV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - MetaTileEntityIDs.LASER_SOURCE_UMV8.ID, - "hatch.dynamotunnel8.tier.12", - "UMV 4,194,304A/t Laser Source Hatch", - 12, - 4194304).getStackForm(1L)); - - eM_dynamoTunnel1_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UXV256AtLaserSourceHatch.ID, - "hatch.dynamotunnel1.tier.13", - "UXV 256A/t Laser Source Hatch", - 13, - 256).getStackForm(1L)); - eM_dynamoTunnel2_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UXV1024AtLaserSourceHatch.ID, - "hatch.dynamotunnel2.tier.13", - "UXV 1,024A/t Laser Source Hatch", - 13, - 1024).getStackForm(1L)); - eM_dynamoTunnel3_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UXV4096AtLaserSourceHatch.ID, - "hatch.dynamotunnel3.tier.13", - "UXV 4,096A/t Laser Source Hatch", - 13, - 4096).getStackForm(1L)); - eM_dynamoTunnel4_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UXV16384AtLaserSourceHatch.ID, - "hatch.dynamotunnel4.tier.13", - "UXV 16,384A/t Laser Source Hatch", - 13, - 16384).getStackForm(1L)); - eM_dynamoTunnel5_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UXV65536AtLaserSourceHatch.ID, - "hatch.dynamotunnel5.tier.13", - "UXV 65,536A/t Laser Source Hatch", - 13, - 65536).getStackForm(1L)); - eM_dynamoTunnel6_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UXV262144AtLaserSourceHatch.ID, - "hatch.dynamotunnel6.tier.13", - "UXV 262,144A/t Laser Source Hatch", - 13, - 262144).getStackForm(1L)); - eM_dynamoTunnel7_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - UXV1048576AtLaserSourceHatch.ID, - "hatch.dynamotunnel7.tier.13", - "UXV 1,048,576A/t Laser Source Hatch", - 13, - 1048576).getStackForm(1L)); - eM_dynamoTunnel8_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - MetaTileEntityIDs.LASER_SOURCE_UXV8.ID, - "hatch.dynamotunnel8.tier.13", - "UXV 4,194,304A/t Laser Source Hatch", - 13, - 4194304).getStackForm(1L)); - eM_dynamoTunnel9_UXV.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - MetaTileEntityIDs.LASER_SOURCE_UXV9.ID, - "hatch.dynamotunnel9.tier.13", - "UXV 16,777,216A/t Laser Source Hatch", - 13, - 16777216).getStackForm(1L)); - eM_dynamoTunnel9001.set( - new GT_MetaTileEntity_Hatch_DynamoTunnel( - LegendaryLaserSourceHatch.ID, - "hatch.dynamotunnel.tier.14", - "Legendary Laser Source Hatch", - 13, - (int) V[13]).getStackForm(1L)); - - // =================================================================================================== - // MULTIBLOCKS - // =================================================================================================== - - Machine_Multi_Transformer.set( - new GT_MetaTileEntity_EM_transformer( - ActiveTransformer.ID, - "multimachine.em.transformer", - "Active Transformer").getStackForm(1L)); - Machine_Multi_Microwave.set( - new GT_MetaTileEntity_TM_microwave(MicrowaveGrinder.ID, "multimachine.tm.microwave", "Microwave Grinder") - .getStackForm(1L)); - Machine_Multi_TeslaCoil.set( - new GT_MetaTileEntity_TM_teslaCoil(TeslaTower.ID, "multimachine.tm.teslaCoil", "Tesla Tower") - .getStackForm(1L)); - Machine_Multi_Switch.set( - new GT_MetaTileEntity_EM_switch( - NetworkSwitchWithQoS.ID, - "multimachine.em.switch", - "Network Switch With QoS").getStackForm(1L)); - Machine_Multi_Computer.set( - new GT_MetaTileEntity_EM_computer(QuantumComputer.ID, "multimachine.em.computer", "Quantum Computer") - .getStackForm(1L)); - Machine_Multi_DataBank.set( - new GT_MetaTileEntity_EM_dataBank(DataBank.ID, "multimachine.em.databank", "Data Bank").getStackForm(1L)); - Machine_Multi_Research.set( - new GT_MetaTileEntity_EM_research(Researchstation.ID, "multimachine.em.research", "Research station") - .getStackForm(1L)); - Machine_Multi_Infuser.set( - new GT_MetaTileEntity_EM_infuser(EnergyInfuser.ID, "multimachine.em.infuser", "Energy Infuser") - .getStackForm(1)); - Machine_Multi_EyeOfHarmony.set( - new GT_MetaTileEntity_EM_EyeOfHarmony(EyeofHarmony.ID, "multimachine.em.eye_of_harmony", "Eye of Harmony") - .getStackForm(1L)); - - if (com.github.technus.tectech.TecTech.configTecTech.ENABLE_GOD_FORGE) { - Machine_Multi_ForgeOfGods.set( - new GT_MetaTileEntity_EM_ForgeOfGods( - ForgeoftheGods.ID, - "multimachine.em.forge_of_gods", - "Forge of the Gods").getStackForm(1L)); - addItemTooltip(Machine_Multi_ForgeOfGods.get(1), GT_Values.AuthorCloud); - Machine_Multi_SmeltingModule.set( - new GT_MetaTileEntity_EM_SmeltingModule( - HelioflarePowerForge.ID, - "multimachine.em.smelting_module", - "Helioflare Power Forge").getStackForm(1L)); - addItemTooltip(Machine_Multi_SmeltingModule.get(1), GT_Values.AuthorCloud); - Machine_Multi_MoltenModule.set( - new GT_MetaTileEntity_EM_MoltenModule( - HeliofluxMeltingCore.ID, - "multimachine.em.molten_module", - "Helioflux Melting Core").getStackForm(1L)); - addItemTooltip(Machine_Multi_MoltenModule.get(1), GT_Values.AuthorCloud); - Machine_Multi_PlasmaModule.set( - new GT_MetaTileEntity_EM_PlasmaModule( - HeliothermalPlasmaFabricator.ID, - "multimachine.em.plasma_module", - "Heliothermal Plasma Fabricator").getStackForm(1L)); - addItemTooltip(Machine_Multi_PlasmaModule.get(1), GT_Values.AuthorCloud); - Machine_Multi_QuarkGluonPlasmaModule.set( - new GT_MetaTileEntity_EM_ExoticModule( - HeliofusionExoticizer.ID, - "multimachine.em.exotic_module", - "Heliofusion Exoticizer").getStackForm(1L)); - addItemTooltip(Machine_Multi_QuarkGluonPlasmaModule.get(1), GT_Values.AuthorCloud); - } - - // =================================================================================================== - // Hatches - // =================================================================================================== - - Parametrizer_Hatch.set( - new GT_MetaTileEntity_Hatch_Param(Parametrizer.ID, "hatch.param.tier.05", "Parametrizer", 5) - .getStackForm(1L)); // TODO refactor aName to hatch.param.tier.04 and aTier to 4, check recipe for NH - ParametrizerX_Hatch.set( - new GT_MetaTileEntity_Hatch_Param(ParametrizerX.ID, "hatch.param.tier.07", "Parametrizer X", 7) - .getStackForm(1L)); - ParametrizerTXT_Hatch.set( - new GT_MetaTileEntity_Hatch_ParamText(ParametrizertXt.ID, "hatch.param.tier.10", "Parametrizer tXt", 10) - .getStackForm(1L)); // TODO check recipe for NH - Uncertainty_Hatch.set( - new GT_MetaTileEntity_Hatch_Uncertainty( - UncertaintyResolver.ID, - "hatch.certain.tier.07", - "Uncertainty Resolver", - 7).getStackForm(1L)); - UncertaintyX_Hatch.set( - new GT_MetaTileEntity_Hatch_Uncertainty( - UncertaintyResolverX.ID, - "hatch.certain.tier.10", - "Uncertainty Resolver X", - 10).getStackForm(1L)); - dataIn_Hatch.set( - new GT_MetaTileEntity_Hatch_InputData( - OpticalSlaveConnector.ID, - "hatch.datain.tier.07", - "Optical Reception Connector", - 7).getStackForm(1L)); - dataOut_Hatch.set( - new GT_MetaTileEntity_Hatch_OutputData( - OpticalMasterConnector.ID, - "hatch.dataout.tier.07", - "Optical Transmission Connector", - 7).getStackForm(1L)); - dataInAss_Hatch.set( - new GT_MetaTileEntity_Hatch_InputDataItems( - AssemblylineSlaveConnector.ID, - "hatch.datainass.tier.07", - "Assembly line Reception Connector", - 7).getStackForm(1L)); - dataOutAss_Hatch.set( - new GT_MetaTileEntity_Hatch_OutputDataItems( - DataBankMasterConnector.ID, - "hatch.dataoutass.tier.07", - "Data Bank Transmission Connector", - 7).getStackForm(1L)); - dataOut_Wireless_Hatch.set( - new GT_MetaTileEntity_Hatch_WirelessComputation_Output( - CloudComputationServerHatch.ID, - "hatch.dataout.wireless.tier.12", - "Cloud Computation Server Hatch", - 12).getStackForm(1L)); - dataIn_Wireless_Hatch.set( - new GT_MetaTileEntity_Hatch_WirelessComputation_Input( - CloudComputationClientHatch.ID, - "hatch.datain.wireless.tier.12", - "Cloud Computation Client Hatch", - 12).getStackForm(1L)); - dataInAss_Wireless_Hatch.set( - new GT_MetaTileEntity_Hatch_WirelessInputDataItems( - WirelessAssemblylineSlaveConnector.ID, - "hatch.datainass.wireless.tier.12", - "Wireless Assembly line Reception Connector", - 12).getStackForm(1L)); - dataOutAss_Wireless_Hatch.set( - new GT_MetaTileEntity_Hatch_WirelessOutputDataItems( - WirelessDataBankMasterConnector.ID, - "hatch.dataoutass.wireless.tier.12", - "Wireless Data Bank Transmission Connector", - 12).getStackForm(1L)); - rack_Hatch.set( - new GT_MetaTileEntity_Hatch_Rack(ComputerRack.ID, "hatch.rack.tier.08", "Computer Rack", 8) - .getStackForm(1L)); - holder_Hatch.set( - new GT_MetaTileEntity_Hatch_Holder(ObjectHolder.ID, "hatch.holder.tier.09", "Object Holder", 8) - .getStackForm(1L)); - capacitor_Hatch.set( - new GT_MetaTileEntity_Hatch_Capacitor(CapacitorHatch.ID, "hatch.capacitor.tier.03", "Capacitor Hatch", 3) - .getStackForm(1L)); - - // =================================================================================================== - // Pipes - // =================================================================================================== - - LASERpipe.set( - new GT_MetaTileEntity_Pipe_Energy(LaserVacuumPipe.ID, "pipe.energystream", "Laser Vacuum Pipe") - .getStackForm(1L)); - LASERpipeSmart.set( - new GT_MetaTileEntity_Pipe_EnergyMirror(LaserVacuumMirror.ID, "pipe.energymirror", "Laser Vacuum Mirror") - .getStackForm(1L)); - DATApipe.set( - new GT_MetaTileEntity_Pipe_Data(OpticalFiberCable.ID, "pipe.datastream", "Optical Fiber Cable") - .getStackForm(1L)); - - LASERpipeBlock.set( - new GT_MetaTileEntity_PipeBlock_Energy( - LaserVacuumPipeCasing.ID, - "pipe.energystream.block", - "Laser Vacuum Pipe Casing").getStackForm(1L)); - DATApipeBlock.set( - new GT_MetaTileEntity_PipeBlock_Data( - OpticalFiberCableCasing.ID, - "pipe.datastream.block", - "Optical Fiber Cable Casing").getStackForm(1L)); - - // =================================================================================================== - // Single Blocks - // =================================================================================================== - - Machine_OwnerDetector.set( - new GT_MetaTileEntity_OwnerDetector(Ownerdetector.ID, "machine.tt.ownerdetector", "Owner detector", 3) - .getStackForm(1L)); - - // =================================================================================================== - // Buck Converters - // =================================================================================================== - - Machine_BuckConverter_IV.set( - new GT_MetaTileEntity_BuckConverter( - InsaneBuckConverter.ID, - "machine.tt.buck.05", - "Insane Buck Converter", - 5).getStackForm(1L)); - Machine_BuckConverter_LuV.set( - new GT_MetaTileEntity_BuckConverter( - LudicrousBuckConverter.ID, - "machine.tt.buck.06", - "Ludicrous Buck Converter", - 6).getStackForm(1L)); - Machine_BuckConverter_ZPM.set( - new GT_MetaTileEntity_BuckConverter( - ZPMVoltageBuckConverter.ID, - "machine.tt.buck.07", - "ZPM Voltage Buck Converter", - 7).getStackForm(1L)); - Machine_BuckConverter_UV.set( - new GT_MetaTileEntity_BuckConverter( - UltimatePowerBuckConverter.ID, - "machine.tt.buck.08", - "Ultimate Power Buck Converter", - 8).getStackForm(1L)); - Machine_BuckConverter_UHV.set( - new GT_MetaTileEntity_BuckConverter( - HighlyUltimateBuckConverter.ID, - "machine.tt.buck.09", - "Highly Ultimate Buck Converter", - 9).getStackForm(1L)); - Machine_BuckConverter_UEV.set( - new GT_MetaTileEntity_BuckConverter( - ExtremelyUltimateBuckConverter.ID, - "machine.tt.buck.10", - "Extremely Ultimate Buck Converter", - 10).getStackForm(1L)); - Machine_BuckConverter_UIV.set( - new GT_MetaTileEntity_BuckConverter( - InsanelyUltimateBuckConverter.ID, - "machine.tt.buck.11", - "Insanely Ultimate Buck Converter", - 11).getStackForm(1L)); - Machine_BuckConverter_UMV.set( - new GT_MetaTileEntity_BuckConverter( - MegaUltimateBuckConverter.ID, - "machine.tt.buck.12", - "Mega Ultimate Buck Converter", - 12).getStackForm(1L)); - Machine_BuckConverter_UXV.set( - new GT_MetaTileEntity_BuckConverter( - ExtendedMegaUltimateBuckConverter.ID, - "machine.tt.buck.13", - "Extended Mega Ultimate Buck Converter", - 13).getStackForm(1L)); - - // =================================================================================================== - // Tesla Transceiver - // =================================================================================================== - - Machine_TeslaCoil_1by1_LV.set( - new GT_MetaTileEntity_TeslaCoil( - BasicTeslaTransceiver1by1.ID, - "machine.tt.tesla.01", - "Basic Tesla Transceiver", - 1, - 1).getStackForm(1L)); - Machine_TeslaCoil_1by1_MV.set( - new GT_MetaTileEntity_TeslaCoil( - AdvancedTeslaTransceiver1by1.ID, - "machine.tt.tesla.02", - "Advanced Tesla Transceiver", - 2, - 1).getStackForm(1L)); - Machine_TeslaCoil_1by1_HV.set( - new GT_MetaTileEntity_TeslaCoil( - EpycTeslaTransceiver1by1.ID, - "machine.tt.tesla.03", - "Epyc Tesla Transceiver", - 3, - 1).getStackForm(1L)); - Machine_TeslaCoil_1by1_EV.set( - new GT_MetaTileEntity_TeslaCoil( - UltimatePowerTeslaTransceiver1by1.ID, - "machine.tt.tesla.04", - "Ultimate Power Tesla Transceiver", - 4, - 1).getStackForm(1L)); - Machine_TeslaCoil_1by1_IV.set( - new GT_MetaTileEntity_TeslaCoil( - InsaneTeslaTransceiver1by1.ID, - "machine.tt.tesla.05", - "Insane Tesla Transceiver", - 5, - 1).getStackForm(1L)); - - Machine_TeslaCoil_2by2_LV.set( - new GT_MetaTileEntity_TeslaCoil( - BasicTeslaTransceiver2by2.ID, - "machine.tt.tesla.01", - "Basic Tesla Transceiver", - 1, - 4).getStackForm(1L)); - Machine_TeslaCoil_2by2_MV.set( - new GT_MetaTileEntity_TeslaCoil( - AdvancedTeslaTransceiver2by2.ID, - "machine.tt.tesla.02", - "Advanced Tesla Transceiver", - 2, - 4).getStackForm(1L)); - Machine_TeslaCoil_2by2_HV.set( - new GT_MetaTileEntity_TeslaCoil( - EpycTeslaTransceiver2by2.ID, - "machine.tt.tesla.03", - "Epyc Tesla Transceiver", - 3, - 4).getStackForm(1L)); - Machine_TeslaCoil_2by2_EV.set( - new GT_MetaTileEntity_TeslaCoil( - UltimatePowerTeslaTransceiver2by2.ID, - "machine.tt.tesla.04", - "Ultimate Power Tesla Transceiver", - 4, - 4).getStackForm(1L)); - Machine_TeslaCoil_2by2_IV.set( - new GT_MetaTileEntity_TeslaCoil( - InsaneTeslaTransceiver2by2.ID, - "machine.tt.tesla.05", - "Insane Tesla Transceiver", - 5, - 4).getStackForm(1L)); - - Machine_TeslaCoil_3by3_LV.set( - new GT_MetaTileEntity_TeslaCoil( - BasicTeslaTransceiver3by3.ID, - "machine.tt.tesla.01", - "Basic Tesla Transceiver", - 1, - 9).getStackForm(1L)); - Machine_TeslaCoil_3by3_MV.set( - new GT_MetaTileEntity_TeslaCoil( - AdvancedTeslaTransceiver3by3.ID, - "machine.tt.tesla.02", - "Advanced Tesla Transceiver", - 2, - 9).getStackForm(1L)); - Machine_TeslaCoil_3by3_HV.set( - new GT_MetaTileEntity_TeslaCoil( - EpycTeslaTransceiver3by3.ID, - "machine.tt.tesla.03", - "Epyc Tesla Transceiver", - 3, - 9).getStackForm(1L)); - Machine_TeslaCoil_3by3_EV.set( - new GT_MetaTileEntity_TeslaCoil( - UltimatePowerTeslaTransceiver3by3.ID, - "machine.tt.tesla.04", - "Ultimate Power Tesla Transceiver", - 4, - 9).getStackForm(1L)); - Machine_TeslaCoil_3by3_IV.set( - new GT_MetaTileEntity_TeslaCoil( - InsaneTeslaTransceiver3by3.ID, - "machine.tt.tesla.05", - "Insane Tesla Transceiver", - 5, - 9).getStackForm(1L)); - - Machine_TeslaCoil_4by4_LV.set( - new GT_MetaTileEntity_TeslaCoil( - BasicTeslaTransceiver4by4.ID, - "machine.tt.tesla.01", - "Basic Tesla Transceiver", - 1, - 16).getStackForm(1L)); - Machine_TeslaCoil_4by4_MV.set( - new GT_MetaTileEntity_TeslaCoil( - AdvancedTeslaTransceiver4by4.ID, - "machine.tt.tesla.02", - "Advanced Tesla Transceiver", - 2, - 16).getStackForm(1L)); - Machine_TeslaCoil_4by4_HV.set( - new GT_MetaTileEntity_TeslaCoil( - EpycTeslaTransceiver4by4.ID, - "machine.tt.tesla.03", - "Epyc Tesla Transceiver", - 3, - 16).getStackForm(1L)); - Machine_TeslaCoil_4by4_EV.set( - new GT_MetaTileEntity_TeslaCoil( - UltimatePowerTeslaTransceiver4by4.ID, - "machine.tt.tesla.04", - "Ultimate Power Tesla Transceiver", - 4, - 16).getStackForm(1L)); - Machine_TeslaCoil_4by4_IV.set( - new GT_MetaTileEntity_TeslaCoil( - InsaneTeslaTransceiver4by4.ID, - "machine.tt.tesla.05", - "Insane Tesla Transceiver", - 5, - 16).getStackForm(1L)); - - // =================================================================================================== - // Debug Stuff - // =================================================================================================== - Machine_DebugPollutor.set( - new GT_MetaTileEntity_DebugPollutor( - DebugPollutionGenerator.ID, - "debug.tt.pollutor", - "Debug Pollution Generator", - 14).getStackForm(1)); - hatch_CreativeData.set( - new GT_MetaTileEntity_Hatch_CreativeData(DebugDataHatch.ID, "debug.tt.data", "Debug Data Hatch", 14) - .getStackForm(1)); - hatch_CreativeMaintenance.set( - new GT_MetaTileEntity_Hatch_CreativeMaintenance( - AutoTapingMaintenanceHatch.ID, - "debug.tt.maintenance", - "Auto-Taping Maintenance Hatch", - 14).getStackForm(1L)); - Machine_DebugGenny.set( - new GT_MetaTileEntity_DebugPowerGenerator( - DebugPowerGenerator.ID, - "debug.tt.genny", - "Debug Power Generator", - 14).getStackForm(1L)); - Machine_DebugWriter.set( - new GT_MetaTileEntity_DebugStructureWriter( - DebugStructureWriter.ID, - "debug.tt.writer", - "Debug Structure Writer", - 14).getStackForm(1L)); - UnusedStuff.set(new ItemStack(Blocks.air)); - hatch_CreativeUncertainty.set( - new GT_MetaTileEntity_Hatch_CreativeUncertainty( - UncertaintyResolution.ID, - "debug.tt.certain", - "Uncertainty Resolution", - 14).getStackForm(1)); - - // =================================================================================================== - // MetaTE init - // =================================================================================================== - - GT_MetaTileEntity_Hatch_Rack.run(); - - GT_MetaTileEntity_Hatch_Capacitor.run(); - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/thing/MuTeLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/MuTeLoader.java deleted file mode 100644 index 15ab723e42..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/thing/MuTeLoader.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.github.technus.tectech.loader.thing; - -import com.github.technus.tectech.TecTech; - -public class MuTeLoader implements Runnable { - - @Override - public void run() { - TecTech.LOGGER.info("TecTech: Registering MultiTileEntities"); - registerMachines(); - registerCasings(); - } - - private static void registerMachines() { - - } - - private static void registerCasings() { - - } -} diff --git a/src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java b/src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java deleted file mode 100644 index 6dfa49eec2..0000000000 --- a/src/main/java/com/github/technus/tectech/loader/thing/ThingsLoader.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.github.technus.tectech.loader.thing; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.TecTech.tectechTexturePage1; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.block.GodforgeGlassBlock; -import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.thing.block.ReactorSimBlock; -import com.github.technus.tectech.thing.block.TileEyeOfHarmony; -import com.github.technus.tectech.thing.block.TileForgeOfGods; -import com.github.technus.tectech.thing.casing.GT_Block_CasingsBA0; -import com.github.technus.tectech.thing.casing.GT_Block_CasingsTT; -import com.github.technus.tectech.thing.casing.GodforgeCasings; -import com.github.technus.tectech.thing.casing.SpacetimeCompressionFieldCasing; -import com.github.technus.tectech.thing.casing.StabilisationFieldCasing; -import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.casing.TimeAccelerationFieldCasing; -import com.github.technus.tectech.thing.item.AstralArrayFabricator; -import com.github.technus.tectech.thing.item.EnderFluidLinkCover; -import com.github.technus.tectech.thing.item.EuMeterGT; -import com.github.technus.tectech.thing.item.ParametrizerMemoryCard; -import com.github.technus.tectech.thing.item.PowerPassUpgradeCover; -import com.github.technus.tectech.thing.item.TeslaCoilCapacitor; -import com.github.technus.tectech.thing.item.TeslaCoilComponent; -import com.github.technus.tectech.thing.item.TeslaCoilCover; -import com.github.technus.tectech.thing.item.TeslaStaff; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; - -/** - * Created by danie_000 on 16.11.2016. - */ -public class ThingsLoader implements Runnable { - - @Override - public void run() { - - GameRegistry.registerTileEntity(TileEyeOfHarmony.class, MODID + ":EyeOfHarmonyRenderBlock"); - GameRegistry.registerTileEntity(TileForgeOfGods.class, MODID + ":ForgeOfGodsRenderBlock"); - - if (Textures.BlockIcons.casingTexturePages[tectechTexturePage1] == null) { - Textures.BlockIcons.casingTexturePages[tectechTexturePage1] = new ITexture[128]; - } - - if (Textures.BlockIcons.casingTexturePages[7] == null) { - Textures.BlockIcons.casingTexturePages[7] = new ITexture[128]; - } - - TecTech.LOGGER.info("Added texture page if was null"); - - TT_Container_Casings.sBlockCasingsTT = new GT_Block_CasingsTT(); - TecTech.LOGGER.info("Elemental Casing registered"); - TT_Container_Casings.sBlockCasingsBA0 = new GT_Block_CasingsBA0(); - TecTech.LOGGER.info("Nikolai's Casing registered"); - - TT_Container_Casings.SpacetimeCompressionFieldGenerators = new SpacetimeCompressionFieldCasing(); - TecTech.LOGGER.info("Spacetime Compression Field Casings registered."); - - TT_Container_Casings.TimeAccelerationFieldGenerator = new TimeAccelerationFieldCasing(); - TecTech.LOGGER.info("Time Acceleration Field Casings registered."); - - TT_Container_Casings.StabilisationFieldGenerators = new StabilisationFieldCasing(); - - if (com.github.technus.tectech.TecTech.configTecTech.ENABLE_GOD_FORGE) { - TT_Container_Casings.GodforgeCasings = new GodforgeCasings(); - TecTech.LOGGER.info("Godforge blocks registered."); - - GodforgeGlassBlock.run(); - TecTech.LOGGER.info("Godforge Glass registered"); - } - - QuantumGlassBlock.run(); - TecTech.LOGGER.info("Quantum Glass registered"); - - ReactorSimBlock.run(); - TecTech.LOGGER.info("Reactor Simulator registered"); - - ParametrizerMemoryCard.run(); - EuMeterGT.run(); - TeslaStaff.run(); - TeslaCoilCover.run(); - TeslaCoilCapacitor.run(); - EnderFluidLinkCover.run(); - PowerPassUpgradeCover.run(); - TecTech.LOGGER.info("Useful Items registered"); - - TeslaCoilComponent.run(); - AstralArrayFabricator.run(); - TecTech.LOGGER.info("Crafting Components registered"); - - TecTech.LOGGER.info("Debug Items registered"); - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/dataTransport/DataPacket.java b/src/main/java/com/github/technus/tectech/mechanics/dataTransport/DataPacket.java deleted file mode 100644 index 01ef4560ee..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/dataTransport/DataPacket.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.github.technus.tectech.mechanics.dataTransport; - -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.Set; - -import net.minecraft.nbt.NBTTagCompound; - -import com.gtnewhorizon.structurelib.util.Vec3Impl; - -/** - * Created by Tec on 05.04.2017. - */ -public abstract class DataPacket { - - private static final byte MAX_HISTORY = 64; - private final Set trace = new LinkedHashSet<>(); - - protected T content; - - protected DataPacket(T content) { - this.content = content; - } - - protected DataPacket(NBTTagCompound nbt) { - content = contentFromNBT(nbt.getCompoundTag("qContent")); - for (int i = 0; i < nbt.getByte("qHistory"); i++) { - trace.add(new Vec3Impl(nbt.getInteger("qX" + i), nbt.getInteger("qY" + i), nbt.getInteger("qZ" + i))); - } - } - - public final NBTTagCompound toNbt() { - NBTTagCompound nbt = new NBTTagCompound(); - NBTTagCompound contentTag = contentToNBT(); - if (contentTag != null) { - nbt.setTag("qContent", contentTag); - } - nbt.setByte("qHistory", (byte) trace.size()); - int i = 0; - for (Vec3Impl v : trace) { - nbt.setInteger("qX" + i, v.get0()); - nbt.setInteger("qY" + i, v.get1()); - nbt.setInteger("qZ" + i, v.get2()); - i++; - } - return nbt; - } - - protected abstract NBTTagCompound contentToNBT(); - - protected abstract T contentFromNBT(NBTTagCompound nbt); - - protected abstract T unifyContentWith(T content); - - public final boolean contains(Vec3Impl v) { - return trace.contains(v); - } - - public final boolean check() { - return trace.size() <= MAX_HISTORY; - } - - public abstract boolean extraCheck(); - - protected final DataPacket unifyTrace(Vec3Impl... positions) { - Collections.addAll(trace, positions); - return (check() && extraCheck()) ? this : null; - } - - protected final DataPacket unifyTrace(DataPacket p) { - if (p == null) return this; - trace.addAll(p.trace); - return (check() && extraCheck()) ? this : null; - } - - protected final DataPacket unifyWith(DataPacket p) { - if (p == null) return this; - trace.addAll(p.trace); - if (check() && extraCheck()) { - content = unifyContentWith(p.content); - return this; - } - return null; - } - - public final T contentIfNotInTrace(Vec3Impl pos) { - if (trace.contains(pos)) { - return null; - } - return getContent(); - } - - public T getContent() { - return content; - } - - public String getContentString() { - return content.toString(); - } - - public final int getTraceSize() { - return trace.size(); - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/dataTransport/InventoryDataPacket.java b/src/main/java/com/github/technus/tectech/mechanics/dataTransport/InventoryDataPacket.java deleted file mode 100644 index e6e24b9ac7..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/dataTransport/InventoryDataPacket.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.github.technus.tectech.mechanics.dataTransport; - -import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; - -import java.util.ArrayList; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -public class InventoryDataPacket extends DataPacket { - - public InventoryDataPacket(ItemStack[] content) { - super(content); - } - - public InventoryDataPacket(NBTTagCompound compound) { - super(compound); - } - - @Override - protected ItemStack[] contentFromNBT(NBTTagCompound nbt) { - int count = nbt.getInteger("count"); - if (count > 0) { - ArrayList stacks = new ArrayList<>(); - for (int i = 0; i < count; i++) { - ItemStack stack = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag(Integer.toString(i))); - if (stack != null) { - stacks.add(stack); - } - } - return stacks.size() > 0 ? stacks.toArray(nullItem) : null; - } - return null; - } - - @Override - protected NBTTagCompound contentToNBT() { - NBTTagCompound compound = new NBTTagCompound(); - if (content != null && content.length > 0) { - compound.setInteger("count", content.length); - for (int i = 0; i < content.length; i++) { - compound.setTag(Integer.toString(i), content[i].writeToNBT(new NBTTagCompound())); - } - } - return compound; - } - - @Override - public boolean extraCheck() { - return true; - } - - @Override - protected ItemStack[] unifyContentWith(ItemStack[] content) { - throw new NoSuchMethodError("Unavailable to unify item stack data packet"); - } - - @Override - public String getContentString() { - return "Stack Count: " + (content == null ? 0 : content.length); - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/dataTransport/QuantumDataPacket.java b/src/main/java/com/github/technus/tectech/mechanics/dataTransport/QuantumDataPacket.java deleted file mode 100644 index 8dff99a42d..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/dataTransport/QuantumDataPacket.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.github.technus.tectech.mechanics.dataTransport; - -import net.minecraft.nbt.NBTTagCompound; - -import com.gtnewhorizon.structurelib.util.Vec3Impl; - -public class QuantumDataPacket extends DataPacket { - - public QuantumDataPacket(Long content) { - super(content); - } - - public QuantumDataPacket(NBTTagCompound compound) { - super(compound); - } - - @Override - protected Long contentFromNBT(NBTTagCompound nbt) { - return nbt.getLong("computation"); - } - - @Override - protected NBTTagCompound contentToNBT() { - NBTTagCompound compound = new NBTTagCompound(); - compound.setLong("computation", content); - return compound; - } - - @Override - public boolean extraCheck() { - return true; - } - - @Override - protected Long unifyContentWith(Long content) { - return this.content + content; - } - - public QuantumDataPacket unifyTraceWith(Vec3Impl... positions) { - return (QuantumDataPacket) super.unifyTrace(positions); - } - - public QuantumDataPacket unifyTraceWith(QuantumDataPacket p) { - return (QuantumDataPacket) super.unifyTrace(p); - } - - public QuantumDataPacket unifyPacketWith(QuantumDataPacket p) { - return (QuantumDataPacket) super.unifyWith(p); - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java deleted file mode 100644 index 2499ecf596..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderFluidContainer.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.github.technus.tectech.mechanics.enderStorage; - -import java.io.DataInputStream; -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.Serializable; - -import net.minecraft.nbt.CompressedStreamTools; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; - -import com.github.technus.tectech.TecTech; - -public class EnderFluidContainer implements IFluidHandler, Serializable { - - private static final long serialVersionUID = 2L; - private static final int SERIALIZE_TYPE_WITH_NBT = 0; - private static final int SERIALIZE_TYPE_WITHOUT_NBT = 1; - private static final int SERIALIZE_TYPE_NULL = 2; - - private static final int CAPACITY = 64000; - private transient FluidStack fluidStack; - - public EnderFluidContainer() {} - - private FluidStack getFluidStack() { - return fluidStack; - } - - private void setFluidStack(FluidStack fluidStack) { - this.fluidStack = fluidStack; - } - - @Override - public int fill(ForgeDirection side, FluidStack fluidStackIn, boolean doFill) { - int filledFluid = 0; - FluidStack fluidStackStored = getFluidStack(); - if (fluidStackIn != null) { - if (fluidStackStored == null) { - fluidStackStored = fluidStackIn.copy(); - fluidStackStored.amount = 0; - } - if (fluidStackStored.amount < CAPACITY && fluidStackIn.isFluidEqual(fluidStackStored)) { - filledFluid = Math.min(CAPACITY - fluidStackStored.amount, fluidStackIn.amount); - if (doFill) { - fluidStackStored.amount += filledFluid; - setFluidStack(fluidStackStored); - } - } - } - return filledFluid; - } - - @Override - public FluidStack drain(ForgeDirection side, FluidStack fluidStack, boolean doDrain) { - FluidStack fluidStackOutput = null; - if (fluidStack != null && fluidStack.isFluidEqual(getFluidStack())) { - fluidStackOutput = drain(side, fluidStack.amount, doDrain); - } - return fluidStackOutput; - } - - @Override - public FluidStack drain(ForgeDirection side, int amount, boolean doDrain) { - FluidStack fluidStackOutput = null; - FluidStack fluidStackStored = getFluidStack(); - if (fluidStackStored != null && fluidStackStored.amount > 0) { - int drainedFluid = Math.min(fluidStackStored.amount, amount); - fluidStackOutput = fluidStackStored.copy(); - fluidStackOutput.amount = drainedFluid; - if (doDrain) { - fluidStackStored.amount -= drainedFluid; - if (fluidStackStored.amount == 0) { - fluidStackStored = null; - } - setFluidStack(fluidStackStored); - } - } - return fluidStackOutput; - } - - @Override - public boolean canFill(ForgeDirection forgeDirection, Fluid fluid) { - return true; - } - - @Override - public boolean canDrain(ForgeDirection forgeDirection, Fluid fluid) { - return true; - } - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection forgeDirection) { - return new FluidTankInfo[] { new FluidTankInfo(getFluidStack(), CAPACITY) }; - } - - private void writeObject(ObjectOutputStream out) throws IOException { - if (fluidStack != null) { - out.writeByte(fluidStack.tag != null ? SERIALIZE_TYPE_WITH_NBT : SERIALIZE_TYPE_WITHOUT_NBT); - if (fluidStack.tag != null) CompressedStreamTools.write(fluidStack.tag, out); - out.writeUTF( - fluidStack.getFluid() - .getName()); - out.writeInt(fluidStack.amount); - } else { - out.writeByte(SERIALIZE_TYPE_NULL); - } - } - - private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { - byte type = in.readByte(); - NBTTagCompound tag = null; - switch (type) { - case SERIALIZE_TYPE_WITH_NBT: - tag = CompressedStreamTools.read(new DataInputStream(in)); - case SERIALIZE_TYPE_WITHOUT_NBT: - fluidStack = FluidRegistry.getFluidStack(in.readUTF(), in.readInt()); - break; - case SERIALIZE_TYPE_NULL: - fluidStack = null; - break; - default: - TecTech.LOGGER.error("Something very wrong... got a fluid container with state " + type); - fluidStack = null; - } - if (fluidStack != null) fluidStack.tag = tag; - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTag.java b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTag.java deleted file mode 100644 index e700c54b17..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTag.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.github.technus.tectech.mechanics.enderStorage; - -import java.io.Serializable; -import java.util.UUID; - -import com.google.common.base.Objects; - -public class EnderLinkTag implements Serializable { - - private static final long serialVersionUID = 6884008436570077863L; - private final String frequency; - private final UUID player; - - public EnderLinkTag(String frequency, UUID player) { - this.frequency = frequency; - this.player = player; - } - - public String getFrequency() { - return frequency; - } - - public UUID getUUID() { - return player; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - EnderLinkTag that = (EnderLinkTag) o; - return Objects.equal(frequency, that.frequency) && Objects.equal(player, that.player); - } - - @Override - public int hashCode() { - return Objects.hashCode(frequency, player); - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTank.java b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTank.java deleted file mode 100644 index 574f9c2b36..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderLinkTank.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.github.technus.tectech.mechanics.enderStorage; - -import java.io.Serializable; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.fluids.IFluidHandler; - -import com.google.common.base.Objects; - -public class EnderLinkTank implements Serializable { - - private static final long serialVersionUID = 1030297456736434221L; - private final int X; - private final int Y; - private final int Z; - private final int D; - - public EnderLinkTank(IFluidHandler fluidHandler) { - TileEntity tile = (TileEntity) fluidHandler; - X = tile.xCoord; - Y = tile.yCoord; - Z = tile.zCoord; - D = tile.getWorldObj().provider.dimensionId; - } - - public IFluidHandler getFluidHandler() { - IFluidHandler fluidHandler = null; - TileEntity tile = DimensionManager.getWorld(D) - .getTileEntity(X, Y, Z); - if (tile instanceof IFluidHandler) fluidHandler = (IFluidHandler) tile; - return fluidHandler; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - EnderLinkTank that = (EnderLinkTank) o; - return X == that.X && Y == that.Y && Z == that.Z && D == that.D; - } - - @Override - public int hashCode() { - return Objects.hashCode(X, Y, Z, D); - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderWorldSavedData.java b/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderWorldSavedData.java deleted file mode 100644 index 125ce33304..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/enderStorage/EnderWorldSavedData.java +++ /dev/null @@ -1,145 +0,0 @@ -package com.github.technus.tectech.mechanics.enderStorage; - -import static com.github.technus.tectech.Reference.MODID; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.util.HashMap; -import java.util.Map; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.WorldSavedData; -import net.minecraft.world.storage.MapStorage; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.event.world.WorldEvent; -import net.minecraftforge.fluids.IFluidHandler; - -import cpw.mods.fml.common.eventhandler.SubscribeEvent; - -public class EnderWorldSavedData extends WorldSavedData { - - private static EnderWorldSavedData INSTANCE; - - private static final String DATA_NAME = MODID + "_EnderWorldSavedData"; - private static final String ENDER_LIQUID_TAG_LINK = DATA_NAME + "_EnderLiquidTagLink"; - private static final String ENDER_LIQUID_TANK_LINK = DATA_NAME + "_EnderLiquidTankLink"; - private static final EnderLinkTag DEFAULT_LINK_TAG = new EnderLinkTag("", null); - - private Map EnderLiquidTagLink = new HashMap<>(); - private Map EnderLiquidTankLink = new HashMap<>(); - - public EnderWorldSavedData() { - super(DATA_NAME); - } - - public EnderWorldSavedData(String s) { - super(s); - } - - @SuppressWarnings("unchecked") - @Override - public void readFromNBT(NBTTagCompound nbtTagCompound) { - try { - byte[] ba = nbtTagCompound.getByteArray(ENDER_LIQUID_TAG_LINK); - InputStream is = new ByteArrayInputStream(ba); - ObjectInputStream ois = new ObjectInputStream(is); - Object data = ois.readObject(); - EnderLiquidTagLink = (Map) data; - } catch (IOException | ClassNotFoundException ignored) { - System.out.println("ENDER_LIQUID_TAG_LINK LOAD FAILED"); - System.out.println(ignored); - } - - try { - byte[] ba = nbtTagCompound.getByteArray(ENDER_LIQUID_TANK_LINK); - InputStream is = new ByteArrayInputStream(ba); - ObjectInputStream ois = new ObjectInputStream(is); - Object data = ois.readObject(); - EnderLiquidTankLink = (Map) data; - } catch (IOException | ClassNotFoundException ignored) { - System.out.println("ENDER_LIQUID_TANK_LINK LOAD FAILED"); - System.out.println(ignored); - } - } - - @Override - public void writeToNBT(NBTTagCompound nbtTagCompound) { - try { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(bos); - oos.writeObject(EnderLiquidTagLink); - oos.flush(); - byte[] data = bos.toByteArray(); - nbtTagCompound.setByteArray(ENDER_LIQUID_TAG_LINK, data); - } catch (IOException ignored) { - System.out.println("ENDER_LIQUID_TAG_LINK SAVE FAILED"); - System.out.println(ignored); - } - - try { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(bos); - oos.writeObject(EnderLiquidTankLink); - oos.flush(); - byte[] data = bos.toByteArray(); - nbtTagCompound.setByteArray(ENDER_LIQUID_TANK_LINK, data); - } catch (IOException ignored) { - System.out.println("ENDER_LIQUID_TANK_LINK SAVE FAILED"); - System.out.println(ignored); - } - } - - private static void loadInstance() { - if (INSTANCE == null) { - MapStorage storage = DimensionManager.getWorld(0).mapStorage; - INSTANCE = (EnderWorldSavedData) storage.loadData(EnderWorldSavedData.class, DATA_NAME); - if (INSTANCE == null) { - INSTANCE = new EnderWorldSavedData(); - storage.setData(DATA_NAME, INSTANCE); - } - } - INSTANCE.markDirty(); - } - - private static Map getEnderLiquidLink() { - loadInstance(); - return INSTANCE.EnderLiquidTagLink; - } - - private static Map getEnderLiquidTankLink() { - loadInstance(); - return INSTANCE.EnderLiquidTankLink; - } - - public static EnderFluidContainer getEnderFluidContainer(EnderLinkTag tag) { - if (!getEnderLiquidLink().containsKey(tag)) { - getEnderLiquidLink().put(tag, new EnderFluidContainer()); - } - return getEnderLiquidLink().get(tag); - } - - public static EnderLinkTag getEnderLinkTag(IFluidHandler handler) { - EnderLinkTank tank = new EnderLinkTank(handler); - if (!getEnderLiquidTankLink().containsKey(tank)) { - getEnderLiquidTankLink().put(tank, DEFAULT_LINK_TAG); - } - return getEnderLiquidTankLink().get(tank); - } - - public static void bindEnderLinkTag(IFluidHandler handler, EnderLinkTag tag) { - EnderLinkTank tank = new EnderLinkTank(handler); - getEnderLiquidTankLink().remove(tank); - getEnderLiquidTankLink().put(tank, tag); - } - - @SubscribeEvent - public void onWorldUnload(WorldEvent.Unload event) { - if (event.world.provider.dimensionId == 0) { - INSTANCE = null; - } - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/pipe/IActivePipe.java b/src/main/java/com/github/technus/tectech/mechanics/pipe/IActivePipe.java deleted file mode 100644 index c1ec11ffc4..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/pipe/IActivePipe.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.github.technus.tectech.mechanics.pipe; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; - -public interface IActivePipe extends IMetaTileEntity { - - void setActive(boolean active); - - boolean getActive(); - - void markUsed(); -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToDataPipe.java b/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToDataPipe.java deleted file mode 100644 index cc5f72d12e..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToDataPipe.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.github.technus.tectech.mechanics.pipe; - -import net.minecraftforge.common.util.ForgeDirection; - -/** - * Created by Tec on 26.02.2017. - */ -public interface IConnectsToDataPipe { - - boolean canConnectData(ForgeDirection side); - - IConnectsToDataPipe getNext(IConnectsToDataPipe source); - - boolean isDataInputFacing(ForgeDirection side); - - byte getColorization(); -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java b/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java deleted file mode 100644 index e9047d22f0..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.github.technus.tectech.mechanics.pipe; - -import net.minecraftforge.common.util.ForgeDirection; - -/** - * Created by Tec on 26.02.2017. - */ -public interface IConnectsToEnergyTunnel { - - boolean canConnect(ForgeDirection side); -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/pipe/PipeActivityMessage.java b/src/main/java/com/github/technus/tectech/mechanics/pipe/PipeActivityMessage.java deleted file mode 100644 index 549397afa0..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/pipe/PipeActivityMessage.java +++ /dev/null @@ -1,136 +0,0 @@ -package com.github.technus.tectech.mechanics.pipe; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; - -import cpw.mods.fml.common.network.ByteBufUtils; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; -import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import io.netty.buffer.ByteBuf; - -public class PipeActivityMessage implements IMessage { - - int mPosX; - int mPosY; - int mPosZ; - int mPosD; - int mActive; - - public PipeActivityMessage() {} - - private PipeActivityMessage(IActivePipe metaTile) { - IGregTechTileEntity base = metaTile.getBaseMetaTileEntity(); - mPosX = base.getXCoord(); - mPosY = base.getYCoord(); - mPosZ = base.getZCoord(); - mPosD = base.getWorld().provider.dimensionId; - mActive = metaTile.getActive() ? 1 : 0; - } - - private PipeActivityMessage(World world, int x, int y, int z, boolean active) { - mPosX = x; - mPosY = y; - mPosZ = z; - mPosD = world.provider.dimensionId; - mActive = active ? 1 : 0; - } - - @Override - public void fromBytes(ByteBuf pBuffer) { - NBTTagCompound tTag = ByteBufUtils.readTag(pBuffer); - mPosX = tTag.getInteger("posx"); - mPosY = tTag.getInteger("posy"); - mPosZ = tTag.getInteger("posz"); - mPosD = tTag.getInteger("posd"); - mActive = tTag.getInteger("active"); - } - - @Override - public void toBytes(ByteBuf pBuffer) { - NBTTagCompound tFXTag = new NBTTagCompound(); - tFXTag.setInteger("posx", mPosX); - tFXTag.setInteger("posy", mPosY); - tFXTag.setInteger("posz", mPosZ); - tFXTag.setInteger("posd", mPosD); - tFXTag.setInteger("active", mActive); - - ByteBufUtils.writeTag(pBuffer, tFXTag); - } - - public static class PipeActivityQuery extends PipeActivityMessage { - - public PipeActivityQuery() {} - - public PipeActivityQuery(IActivePipe metaTile) { - super(metaTile); - } - - public PipeActivityQuery(World world, int x, int y, int z, boolean active) { - super(world, x, y, z, active); - } - } - - public static class PipeActivityData extends PipeActivityMessage { - - public PipeActivityData() {} - - private PipeActivityData(PipeActivityQuery query) { - mPosX = query.mPosX; - mPosY = query.mPosY; - mPosZ = query.mPosZ; - mPosD = query.mPosD; - mActive = query.mActive; - } - - public PipeActivityData(IActivePipe metaTile) { - super(metaTile); - } - - public PipeActivityData(World world, int x, int y, int z, boolean active) { - super(world, x, y, z, active); - } - } - - public static class ClientHandler extends AbstractClientMessageHandler { - - @Override - public IMessage handleClientMessage(EntityPlayer pPlayer, PipeActivityData pMessage, MessageContext pCtx) { - if (pPlayer.worldObj.provider.dimensionId == pMessage.mPosD) { - TileEntity te = pPlayer.worldObj.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); - if (te instanceof IGregTechTileEntity) { - IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (meta instanceof IActivePipe) { - ((IActivePipe) meta).setActive(pMessage.mActive == 1); - } - } - } - return null; - } - } - - public static class ServerHandler extends AbstractServerMessageHandler { - - @Override - public IMessage handleServerMessage(EntityPlayer pPlayer, PipeActivityQuery pMessage, MessageContext pCtx) { - World world = DimensionManager.getWorld(pMessage.mPosD); - if (world != null) { - TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); - if (te instanceof IGregTechTileEntity) { - IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (meta instanceof IActivePipe) { - pMessage.mActive = ((IActivePipe) meta).getActive() ? 1 : 0; - return new PipeActivityData(pMessage); - } - } - } - return null; - } - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java b/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java deleted file mode 100644 index d13e8bfb7f..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/spark/RendererMessage.java +++ /dev/null @@ -1,149 +0,0 @@ -package com.github.technus.tectech.mechanics.spark; - -import static gregtech.api.enums.Mods.Thaumcraft; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.ObjectStreamClass; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Random; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.world.World; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.Marker; -import org.apache.logging.log4j.MarkerManager; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.network.simpleimpl.IMessage; -import cpw.mods.fml.common.network.simpleimpl.MessageContext; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; -import io.netty.buffer.ByteBuf; -import thaumcraft.client.fx.bolt.FXLightningBolt; - -// TODO Re-work how sparks are distributed -public class RendererMessage implements IMessage { - - HashSet sparkList; - - public RendererMessage() {} - - @SuppressWarnings("unchecked") - @Override - public void fromBytes(ByteBuf pBuffer) { - if (FMLCommonHandler.instance() - .getSide() - .isServer()) return; - try { - // I'd love to know why I need to offset by one byte for this to work - byte[] boop = pBuffer.array(); - boop = Arrays.copyOfRange(boop, 1, boop.length); - InputStream is = new ByteArrayInputStream(boop); - ObjectInputStream ois = new ValidatingObjectInputStream(is); - Object data = ois.readObject(); - sparkList = (HashSet) data; - } catch (IOException | ClassNotFoundException ignored) {} - } - - @Override - public void toBytes(ByteBuf pBuffer) { - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ObjectOutputStream oos = new ObjectOutputStream(baos); - oos.writeObject(sparkList); - oos.flush(); - InputStream is = new ByteArrayInputStream(baos.toByteArray()); - pBuffer.writeBytes(is, baos.toByteArray().length); - } catch (IOException ignore) {} - } - - public static class RendererData extends RendererMessage { - - public RendererData() {} - - public RendererData(HashSet eSparkList) { - sparkList = eSparkList; - } - } - - public static class ClientHandler extends AbstractClientMessageHandler { - - @Override - public IMessage handleClientMessage(EntityPlayer pPlayer, RendererData pMessage, MessageContext pCtx) { - // disgusting - Random localRand = Minecraft.getMinecraft().theWorld.rand; - int[] zapsToUse = new int[4]; - for (int i = 0; i < 3; i++) { - zapsToUse[i] = localRand.nextInt(pMessage.sparkList.size()); - } - int i = 0; - for (ThaumSpark sp : pMessage.sparkList) { - for (int j : zapsToUse) { - if (i == j) { - thaumLightning(sp.x, sp.y, sp.z, sp.xR, sp.yR, sp.zR, sp.wID); - } - } - i++; - } - pMessage.sparkList.clear(); - return null; - } - } - - @SideOnly(Side.CLIENT) - private static void thaumLightning(int tX, int tY, int tZ, int tXN, int tYN, int tZN, int wID) { - // This is enough to check for thaum, since it only ever matters for client side effects (Tested not to crash) - if (Thaumcraft.isModLoaded()) { - World world = Minecraft.getMinecraft().theWorld; - if (world.provider.dimensionId == wID) { - FXLightningBolt bolt = new FXLightningBolt( - world, - tX + 0.5F, - tY + 0.5F, - tZ + 0.5F, - tX + tXN + 0.5F, - tY + tYN + 0.5F, - tZ + tZN + 0.5F, - world.rand.nextLong(), - 6, - 0.5F, - 8); - bolt.defaultFractal(); - bolt.setType(2); - bolt.setWidth(0.125F); - bolt.finalizeBolt(); - } - } - } - - private static class ValidatingObjectInputStream extends ObjectInputStream { - - private static final Logger logger = LogManager.getLogger(); - private static final Marker securityMarker = MarkerManager.getMarker("SuspiciousPackets"); - - private ValidatingObjectInputStream(InputStream in) throws IOException { - super(in); - } - - @Override - protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { - String name = desc.getName(); - if (!name.equals("java.util.HashSet") - && !name.equals("com.github.technus.tectech.mechanics.spark.ThaumSpark")) { - logger.warn(securityMarker, "Received packet containing disallowed class: " + name); - throw new RuntimeException(); - } - return super.resolveClass(desc); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java b/src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java deleted file mode 100644 index 8265c2a81b..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/spark/ThaumSpark.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.github.technus.tectech.mechanics.spark; - -import java.io.Serializable; -import java.util.Objects; - -import com.gtnewhorizon.structurelib.util.Vec3Impl; - -public class ThaumSpark implements Serializable { - - // This works regardless of if TC is loaded - private static final long serialVersionUID = -7037856938316679566L; - public int x, y, z, wID; - public byte xR, yR, zR; - - public ThaumSpark(int x, int y, int z, byte xR, byte yR, byte zR, int wID) { - this.x = x; - this.y = y; - this.z = z; - - this.xR = xR; - this.yR = yR; - this.zR = zR; - - this.wID = wID; - } - - public ThaumSpark(Vec3Impl origin, Vec3Impl target, int wID) { - this.x = origin.get0(); - this.y = origin.get1(); - this.z = origin.get2(); - - Vec3Impl offset = target.sub(origin); - this.xR = (byte) offset.get0(); - this.yR = (byte) offset.get1(); - this.zR = (byte) offset.get2(); - - this.wID = wID; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ThaumSpark that = (ThaumSpark) o; - return x == that.x && y == that.y - && z == that.z - && wID == that.wID - && xR == that.xR - && yR == that.yR - && zR == that.zR; - } - - @Override - public int hashCode() { - return Objects.hash(x, y, z, wID, xR, yR, zR); - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java deleted file mode 100644 index 176c2f590e..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectable.java +++ /dev/null @@ -1,183 +0,0 @@ -package com.github.technus.tectech.mechanics.tesla; - -import static java.lang.Math.sqrt; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Map; - -import com.github.technus.tectech.mechanics.spark.ThaumSpark; -import com.google.common.collect.Multimap; - -public interface ITeslaConnectable extends ITeslaConnectableSimple { - - // Map with all Teslas in the same dimension and the distance to them //TODO Range - Multimap getTeslaNodeMap(); - - // ThaumCraft lighting coordinate pairs, so we can send them in bursts and save on lag - HashSet getSparkList(); - - // -128 to -1 disables capability - // 0 means any source or target - // 1 to 127 must match on source and target or source/target must be 0 - byte getTeslaTransmissionCapability(); - - // Transmission Range is typically 16+ in blocks - int getTeslaTransmissionRange(); - - boolean isOverdriveEnabled(); - - int getTeslaEnergyLossPerBlock(); - - float getTeslaOverdriveLossCoefficient(); - - long getTeslaOutputVoltage(); - - long getTeslaOutputCurrent(); - - boolean teslaDrainEnergy(long teslaVoltageDrained); - - class TeslaUtil { - - private static final HashSet teslaSimpleNodeSet = new HashSet<>(); // Targets for power - // transmission - private static final HashSet teslaNodeSet = new HashSet<>(); // Sources of power transmission - private static final List scheduledRemove = new ArrayList<>(); - - public static void teslaSimpleNodeSetAdd(ITeslaConnectableSimple target) { - if (!teslaSimpleNodeSet.contains(target)) { - teslaSimpleNodeSet.add(target); - teslaNodeSet.forEach(origin -> addTargetToTeslaOrigin(target, origin)); - } - } - - public static void teslaSimpleNodeSetRemove(ITeslaConnectableSimple target) { - teslaSimpleNodeSet.remove(target); - if (target instanceof ITeslaConnectable) teslaNodeSet.remove(target); - teslaNodeSet.forEach(origin -> removeTargetFromTeslaOrigin(target, origin)); - } - - public static void teslaSimpleNodeSetRemoveScheduled(ITeslaConnectableSimple target) { - scheduledRemove.add(target); - } - - public static void housekeep() { - for (ITeslaConnectableSimple e : scheduledRemove) { - teslaSimpleNodeSet.remove(e); - } - scheduledRemove.clear(); - } - - private static void addTargetToTeslaOrigin(ITeslaConnectableSimple target, ITeslaConnectable origin) { - if (origin.equals(target) || !origin.getTeslaDimension() - .equals(target.getTeslaDimension())) { - // Skip if looking at myself and skip if not in the same dimension - // TODO, INTERDIM? - return; - } else if (origin.getTeslaTransmissionCapability() != 0 && origin.getTeslaReceptionCapability() != 0 - && origin.getTeslaTransmissionCapability() != origin.getTeslaReceptionCapability()) { - // Skip if incompatible - return; - } - // Range calc - int distance = (int) sqrt( - origin.getTeslaPosition() - .distanceSq(target.getTeslaPosition())); - if (distance > origin.getTeslaTransmissionRange() * target.getTeslaReceptionCoefficient()) { - // Skip if the range is too vast - return; - } - origin.getTeslaNodeMap() - .put(distance, target); - } - - private static void removeTargetFromTeslaOrigin(ITeslaConnectableSimple target, ITeslaConnectable origin) { - // Range calc TODO Remove duplicate? - int distance = (int) sqrt( - origin.getTeslaPosition() - .distanceSq(target.getTeslaPosition())); - origin.getTeslaNodeMap() - .remove(distance, target); - } - - public static void generateTeslaNodeMap(ITeslaConnectable origin) { - origin.getTeslaNodeMap() - .clear(); - for (ITeslaConnectableSimple target : teslaSimpleNodeSet) { - // Sanity checks - if (target == null) { - // The Tesla Covers do not remove themselves from the list and this is the code that does - teslaSimpleNodeSet.remove(null); - continue; - } - addTargetToTeslaOrigin(target, origin); - } - teslaNodeSet.add(origin); - } - - public static long powerTeslaNodeMap(ITeslaConnectable origin) { - long remainingAmperes = origin.getTeslaOutputCurrent(); - boolean canSendPower = !origin.isTeslaReadyToReceive() && remainingAmperes > 0; - - if (canSendPower) { - for (Map.Entry Rx : origin.getTeslaNodeMap() - .entries()) { - // Do we still have power left to send kind of check - if (origin.getTeslaStoredEnergy() - < (origin.isOverdriveEnabled() ? origin.getTeslaOutputVoltage() * 2 - : origin.getTeslaOutputVoltage())) - break; - // Explicit words for the important fields - ITeslaConnectableSimple target = Rx.getValue(); - int distance = Rx.getKey(); - // Can our target receive energy? - if (!target.isTeslaReadyToReceive()) continue; - - // Calculate the voltage output - long outputVoltageInjectable; - long outputVoltageConsumption; - if (origin.isOverdriveEnabled()) { - outputVoltageInjectable = origin.getTeslaOutputVoltage(); - outputVoltageConsumption = origin.getTeslaOutputVoltage() - + ((long) distance * origin.getTeslaEnergyLossPerBlock()) - + (long) Math - .round(origin.getTeslaOutputVoltage() * origin.getTeslaOverdriveLossCoefficient()); - } else { - outputVoltageInjectable = origin.getTeslaOutputVoltage() - - ((long) distance * origin.getTeslaEnergyLossPerBlock()); - outputVoltageConsumption = origin.getTeslaOutputVoltage(); - } - - // Break out of the loop if the cost is too high - // Since the next target will have an even higher cost, just quit now. - if (origin.getTeslaStoredEnergy() < outputVoltageConsumption) break; - - // Now shove in as many packets as will fit~ - while (canSendPower) { - if (target.teslaInjectEnergy(outputVoltageInjectable)) { - origin.teslaDrainEnergy(outputVoltageConsumption); - origin.getSparkList() - .add( - new ThaumSpark( - origin.getTeslaPosition(), - target.getTeslaPosition(), - origin.getTeslaDimension())); - remainingAmperes--; - // Update the can send power flag each time we send power - canSendPower = (origin.getTeslaStoredEnergy() < outputVoltageConsumption - || remainingAmperes > 0); - } else { - // Breaks out when I can't send anymore power - break; - } - } - - // Break out if we can't send power anymore - if (!canSendPower) break; - } - } - return origin.getTeslaOutputCurrent() - remainingAmperes; - } - } -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectableSimple.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectableSimple.java deleted file mode 100644 index a43b313d28..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/tesla/ITeslaConnectableSimple.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.github.technus.tectech.mechanics.tesla; - -import com.gtnewhorizon.structurelib.util.Vec3Impl; - -public interface ITeslaConnectableSimple { - - // -128 to -1 disables capability - // 0 means any source or target - // 1 to 127 must match on source and target or source/target must be 0 - byte getTeslaReceptionCapability(); - - // Reception Coefficient is a range extension, typical is 1 - float getTeslaReceptionCoefficient(); - - boolean isTeslaReadyToReceive(); - - long getTeslaStoredEnergy(); - - boolean teslaInjectEnergy(long teslaVoltageInjected); - - Vec3Impl getTeslaPosition(); - - Integer getTeslaDimension(); -} diff --git a/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java b/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java deleted file mode 100644 index 87ef740be9..0000000000 --- a/src/main/java/com/github/technus/tectech/mechanics/tesla/TeslaCoverConnection.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.github.technus.tectech.mechanics.tesla; - -import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetRemoveScheduled; - -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.base.Objects; -import com.gtnewhorizon.structurelib.util.Vec3Impl; - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class TeslaCoverConnection implements ITeslaConnectableSimple { - - private final IGregTechTileEntity IGT; - private final Vec3Impl pos; - private final byte teslaReceptionCapability; - - public TeslaCoverConnection(IGregTechTileEntity IGT, byte teslaReceptionCapability) { - this.IGT = IGT; - this.pos = new Vec3Impl(IGT.getXCoord(), IGT.getYCoord(), IGT.getZCoord()); - - this.teslaReceptionCapability = teslaReceptionCapability; - } - - @Override - public byte getTeslaReceptionCapability() { - return teslaReceptionCapability; - } - - @Override - public float getTeslaReceptionCoefficient() { - return 1; - } - - @Override - public boolean isTeslaReadyToReceive() { - return true; - } - - @Override - public long getTeslaStoredEnergy() { - return IGT.getStoredEU(); - } - - @Override - public Vec3Impl getTeslaPosition() { - return pos; - } - - @Override - public Integer getTeslaDimension() { - return IGT.getWorld().provider.dimensionId; - } - - @Override - public boolean teslaInjectEnergy(long teslaVoltageInjected) { - // Same as in the microwave transmitters, this does not account for amp limits - boolean output = false; - - if (!IGT.isDead()) { - output = IGT.injectEnergyUnits(ForgeDirection.UP, teslaVoltageInjected, 1L) > 0L; - } else { - teslaSimpleNodeSetRemoveScheduled(this); - } - - return output; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - TeslaCoverConnection that = (TeslaCoverConnection) o; - return Objects.equal(IGT, that.IGT); - } - - @Override - public int hashCode() { - return Objects.hashCode(IGT); - } -} diff --git a/src/main/java/com/github/technus/tectech/proxy/ClientProxy.java b/src/main/java/com/github/technus/tectech/proxy/ClientProxy.java deleted file mode 100644 index 289f01d359..0000000000 --- a/src/main/java/com/github/technus/tectech/proxy/ClientProxy.java +++ /dev/null @@ -1,185 +0,0 @@ -package com.github.technus.tectech.proxy; - -import static com.github.technus.tectech.TecTech.RANDOM; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.eyeOfHarmonyRenderBlock; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.forgeOfGodsRenderBlock; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiNewChat; -import net.minecraft.client.particle.EntityFX; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.ChatComponentText; -import net.minecraft.world.World; -import net.minecraftforge.client.MinecraftForgeClient; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.rendering.EOH.EOH_ItemRenderer; -import com.github.technus.tectech.rendering.EOH.EOH_TESR; -import com.github.technus.tectech.thing.block.GodforgeGlassBlock; -import com.github.technus.tectech.thing.block.GodforgeGlassRender; -import com.github.technus.tectech.thing.block.QuantumGlassBlock; -import com.github.technus.tectech.thing.block.QuantumGlassRender; -import com.github.technus.tectech.thing.block.RenderForgeOfGods; -import com.github.technus.tectech.thing.block.TileEyeOfHarmony; -import com.github.technus.tectech.thing.block.TileForgeOfGods; -import com.github.technus.tectech.thing.item.RenderForgeOfGodsItem; -import com.gtnewhorizon.structurelib.entity.fx.WeightlessParticleFX; - -import cpw.mods.fml.client.FMLClientHandler; -import cpw.mods.fml.client.registry.ClientRegistry; -import cpw.mods.fml.client.registry.RenderingRegistry; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class ClientProxy extends CommonProxy { - - @Override - public void registerRenderInfo() { - QuantumGlassBlock.renderID = RenderingRegistry.getNextAvailableRenderId(); - RenderingRegistry.registerBlockHandler(QuantumGlassBlock.renderID, new QuantumGlassRender()); - - MinecraftForgeClient - .registerItemRenderer(Item.getItemFromBlock(eyeOfHarmonyRenderBlock), new EOH_ItemRenderer()); - ClientRegistry.bindTileEntitySpecialRenderer(TileEyeOfHarmony.class, new EOH_TESR()); - - if (com.github.technus.tectech.TecTech.configTecTech.ENABLE_GOD_FORGE) { - GodforgeGlassBlock.renderID = RenderingRegistry.getNextAvailableRenderId(); - RenderingRegistry.registerBlockHandler(GodforgeGlassBlock.renderID, new GodforgeGlassRender()); - - MinecraftForgeClient - .registerItemRenderer(Item.getItemFromBlock(forgeOfGodsRenderBlock), new RenderForgeOfGodsItem()); - ClientRegistry.bindTileEntitySpecialRenderer(TileForgeOfGods.class, new RenderForgeOfGods()); - } - } - - @Override - public void em_particle(IGregTechTileEntity aMuffler, ForgeDirection facing) { // CUTE! - float xPos = facing.offsetX * 0.76F + aMuffler.getXCoord() + 0.25F; - float yPos = facing.offsetY * 0.76F + aMuffler.getYCoord() + 0.25F; - float zPos = facing.offsetZ * 0.76F + aMuffler.getZCoord() + 0.25F; - - EntityFX particle = new WeightlessParticleFX( - aMuffler.getWorld(), - xPos + RANDOM.nextFloat() * 0.5F, - yPos + RANDOM.nextFloat() * 0.5F, - zPos + RANDOM.nextFloat() * 0.5F, - 0, - 0, - 0); - particle.setRBGColorF(0, 0.6F * RANDOM.nextFloat(), 0.8f); - Minecraft.getMinecraft().effectRenderer.addEffect(particle); - } - - @Override - public void pollutor_particle(IGregTechTileEntity aMuffler, ForgeDirection facing) { - float xPos = facing.offsetX * 0.76F + aMuffler.getXCoord() + 0.25F; - float yPos = facing.offsetY * 0.76F + aMuffler.getYCoord() + 0.25F; - float zPos = facing.offsetZ * 0.76F + aMuffler.getZCoord() + 0.25F; - - float ySpd = facing.offsetY * 0.1F + 0.2F + 0.1F * (float) RANDOM.nextGaussian(); - float xSpd; - float zSpd; - - if (facing.offsetY == -1) { - float temp = RANDOM.nextFloat() * 2 * (float) Math.PI; - xSpd = (float) Math.sin(temp) * 0.1F * (float) RANDOM.nextGaussian(); - zSpd = (float) Math.cos(temp) * 0.1F * (float) RANDOM.nextGaussian(); - } else { - xSpd = facing.offsetX * (0.1F + 0.2F * (float) RANDOM.nextGaussian()); - zSpd = facing.offsetZ * (0.1F + 0.2F * (float) RANDOM.nextGaussian()); - } - aMuffler.getWorld() - .spawnParticle( - "largesmoke", - xPos + RANDOM.nextFloat() * 0.5F, - yPos + RANDOM.nextFloat() * 0.5F, - zPos + RANDOM.nextFloat() * 0.5F, - xSpd, - ySpd, - zSpd); - aMuffler.getWorld() - .spawnParticle( - "largesmoke", - xPos + RANDOM.nextFloat() * 0.5F, - yPos + RANDOM.nextFloat() * 0.5F, - zPos + RANDOM.nextFloat() * 0.5F, - xSpd, - ySpd, - zSpd); - aMuffler.getWorld() - .spawnParticle( - "largesmoke", - xPos + RANDOM.nextFloat() * 0.5F, - yPos + RANDOM.nextFloat() * 0.5F, - zPos + RANDOM.nextFloat() * 0.5F, - xSpd, - ySpd, - zSpd); - } - - @Override - public void em_particle(World w, double x, double y, double z) { // CUTE! - EntityFX particle = new WeightlessParticleFX( - w, - x + RANDOM.nextFloat() * 0.5F, - y + RANDOM.nextFloat() * 0.5F, - z + RANDOM.nextFloat() * 0.5F, - 0, - 0, - 0); - particle.setRBGColorF(0, 0.6F * RANDOM.nextFloat(), 0.8f); - Minecraft.getMinecraft().effectRenderer.addEffect(particle); - } - - @Override - public void pollutor_particle(World w, double x, double y, double z) { - w.spawnParticle( - "largesmoke", - x + RANDOM.nextFloat() * 0.5F, - y + RANDOM.nextFloat() * 0.5F, - z + RANDOM.nextFloat() * 0.5F, - 0, - 0, - 0); - } - - @Override - public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - return null; - } - - @Override - public World getClientWorld() { - return FMLClientHandler.instance() - .getClient().theWorld; - } - - @Override - public void printInchat(String... strings) { - GuiNewChat chat = Minecraft.getMinecraft().ingameGUI.getChatGUI(); - for (String s : strings) { - chat.printChatMessage(new ChatComponentText(s)); - } - } - - @Override - public void playSound(IGregTechTileEntity base, String name) { - base.getWorld() - .playSoundEffect(base.getXCoord(), base.getYCoord(), base.getZCoord(), Reference.MODID + ':' + name, 1, 1); - } - - @Override - public void renderAABB(World w, AxisAlignedBB box) { - em_particle(w, box.minX, box.minY, box.minZ); - em_particle(w, box.minX, box.minY, box.maxZ); - em_particle(w, box.minX, box.maxY, box.maxZ); - em_particle(w, box.minX, box.maxY, box.minZ); - em_particle(w, box.maxX, box.maxY, box.minZ); - em_particle(w, box.maxX, box.maxY, box.maxZ); - em_particle(w, box.maxX, box.minY, box.maxZ); - em_particle(w, box.maxX, box.minY, box.minZ); - } - -} diff --git a/src/main/java/com/github/technus/tectech/proxy/CommonProxy.java b/src/main/java/com/github/technus/tectech/proxy/CommonProxy.java deleted file mode 100644 index 0c160ffb54..0000000000 --- a/src/main/java/com/github/technus/tectech/proxy/CommonProxy.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.github.technus.tectech.proxy; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.ChatComponentText; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.common.network.IGuiHandler; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class CommonProxy implements IGuiHandler { - - public void registerRenderInfo() {} - - public void em_particle(IGregTechTileEntity aMuffler, ForgeDirection facing) {} // CUTE! - - public void pollutor_particle(IGregTechTileEntity aPollutor, ForgeDirection facing) {} // CUTE! - - public void em_particle(World w, double x, double y, double z) {} - - public void pollutor_particle(World w, double x, double y, double z) {} - - public void renderAABB(World w, AxisAlignedBB box) {} - - @Override - public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - return null; - } - - @Override - public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { - return null; - } - - public World getClientWorld() { - return null; - } - - public void broadcast(String str) { - MinecraftServer.getServer() - .getConfigurationManager() - .sendChatMsg(new ChatComponentText(str)); - } - - public void printInchat(String... strings) {} - - public void playSound(IGregTechTileEntity base, String name) {} - - public String getUUID(String name) { - for (WorldServer worldServer : MinecraftServer.getServer().worldServers) { - for (Object o : worldServer.playerEntities) { - if (o instanceof EntityPlayer && ((EntityPlayer) o).getGameProfile() - .getName() - .equals(name)) { - return ((EntityPlayer) o).getGameProfile() - .getId() - .toString(); - } - } - } - return null; - } - - public boolean isOnlineName(String name) { - for (WorldServer worldServer : MinecraftServer.getServer().worldServers) { - for (Object o : worldServer.playerEntities) { - if (o instanceof EntityPlayer && ((EntityPlayer) o).getGameProfile() - .getName() - .equals(name)) { - return true; - } - } - } - return false; - } - - public boolean isOnlineUUID(String uuid) { - for (WorldServer worldServer : MinecraftServer.getServer().worldServers) { - for (Object o : worldServer.playerEntities) { - if (o instanceof EntityPlayer && ((EntityPlayer) o).getGameProfile() - .getId() - .toString() - .equals(uuid)) { - return true; - } - } - } - return false; - } - -} diff --git a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyFrontend.java b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyFrontend.java deleted file mode 100644 index 48b48f37e9..0000000000 --- a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyFrontend.java +++ /dev/null @@ -1,206 +0,0 @@ -package com.github.technus.tectech.recipe; - -import static com.github.technus.tectech.util.CommonValues.EOH_TIER_FANCY_NAMES; -import static com.google.common.math.LongMath.pow; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static java.lang.Math.min; -import static net.minecraft.util.EnumChatFormatting.BOLD; -import static net.minecraft.util.EnumChatFormatting.DARK_RED; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.StatCollector.translateToLocal; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.ParametersAreNonnullByDefault; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.math.Size; - -import appeng.util.ReadableNumberConverter; -import codechicken.nei.PositionedStack; -import gregtech.api.recipe.BasicUIPropertiesBuilder; -import gregtech.api.recipe.NEIRecipePropertiesBuilder; -import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.common.gui.modularui.UIHelper; -import gregtech.nei.GT_NEI_DefaultHandler; -import gregtech.nei.RecipeDisplayInfo; -import gregtech.nei.formatter.INEISpecialInfoFormatter; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -public class EyeOfHarmonyFrontend extends RecipeMapFrontend { - - private static final int xDirMaxCount = 9; - private static final int itemRows = 9, fluidRows = 2; - public static final int maxItemInputs = 1, maxItemOutputs = xDirMaxCount * itemRows, maxFluidInputs = 0, - maxFluidOutputs = xDirMaxCount * fluidRows; - private static final int yOrigin = 8; - private static final long TRILLION = pow(10, 12); - - public EyeOfHarmonyFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, - NEIRecipePropertiesBuilder neiPropertiesBuilder) { - super( - uiPropertiesBuilder.logoPos(new Pos2d(8, yOrigin)), - neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 117 + (itemRows + fluidRows - 4) * 18)) - .neiSpecialInfoFormatter(new EyeOfHarmonySpecialValueFormatter())); - } - - @Override - public List getItemInputPositions(int itemInputCount) { - return UIHelper.getGridPositions(itemInputCount, 79, yOrigin, 1, 1); - } - - public static final int maxItemsToRender = 80; - - @Override - public List getItemOutputPositions(int itemOutputCount) { - return UIHelper.getGridPositions(min(itemOutputCount, maxItemsToRender + 1), 7, yOrigin + 36, xDirMaxCount, 12); - } - - @Override - public List getFluidInputPositions(int fluidInputCount) { - return UIHelper.getGridPositions(fluidInputCount, 0, 0, 0, 0); - } - - @Override - public List getFluidOutputPositions(int fluidOutputCount) { - return UIHelper.getGridPositions(fluidOutputCount, 7, yOrigin + 13 * 17 - 7 - 16, xDirMaxCount, 3); - } - - @Override - public List handleNEIItemTooltip(ItemStack stack, List currentTip, - GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { - super.handleNEIItemTooltip(stack, currentTip, neiCachedRecipe); - EyeOfHarmonyRecipe currentRecipe = (EyeOfHarmonyRecipe) neiCachedRecipe.mRecipe.mSpecialItems; - - // Draw tooltip on planet item. - if (stack.isItemEqual(currentRecipe.getRecipeTriggerItem())) { - currentTip.add( - EnumChatFormatting.GRAY + translateToLocalFormatted( - "tt.nei.eoh.total_items", - formatNumbers(currentRecipe.getSumOfItems()))); - return currentTip; - } - - // Draw tooltip on other items. - double percentage = currentRecipe.getItemStackToProbabilityMap() - .getOrDefault(stack, -1.0); - - if (percentage != -1.0) { - currentTip.add(EnumChatFormatting.GRAY + translateToLocalFormatted("tt.nei.eoh.solid_mass", percentage)); - currentTip.add( - EnumChatFormatting.GRAY + translateToLocalFormatted( - "tt.nei.eoh.item_count", - formatNumbers( - currentRecipe.getItemStackToTrueStackSizeMap() - .get(stack)))); - } - - return currentTip; - } - - @Override - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { - EyeOfHarmonyRecipe EOHRecipe = (EyeOfHarmonyRecipe) neiCachedRecipe.mRecipe.mSpecialItems; - for (PositionedStack stack : neiCachedRecipe.mInputs) { - if (stack instanceof GT_NEI_DefaultHandler.FixedPositionedStack) { - if (stack.item.isItemEqual(EOHRecipe.getRecipeTriggerItem())) { - drawNEIOverlayText(translateToLocal("NC"), stack); - } - } - } - for (PositionedStack stack : neiCachedRecipe.mOutputs) { - if (stack instanceof GT_NEI_DefaultHandler.FixedPositionedStack) { - if (EOHRecipe.getItemStackToTrueStackSizeMap() - .containsKey(stack.item)) { - long stackSize = EOHRecipe.getItemStackToTrueStackSizeMap() - .get(stack.item); - String displayString; - if (stackSize > 9999) { - displayString = ReadableNumberConverter.INSTANCE.toWideReadableForm(stackSize); - } else { - displayString = String.valueOf(stackSize); - } - - drawNEIOverlayText(displayString, stack, 0xffffff, 0.5f, true, Alignment.BottomRight); - } - } - } - } - - private static class EyeOfHarmonySpecialValueFormatter implements INEISpecialInfoFormatter { - - @Override - public List format(RecipeDisplayInfo recipeInfo) { - EyeOfHarmonyRecipe recipe = (EyeOfHarmonyRecipe) recipeInfo.recipe.mSpecialItems; - List result = new ArrayList<>(); - - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.Hydrogen.In", "Hydrogen") + ": " - + formatNumbers(recipe.getHydrogenRequirement()) - + " L"); - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.Helium.In", "Helium") + ": " - + formatNumbers(recipe.getHydrogenRequirement()) - + " L"); - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.SpacetimeTier", "Spacetime Tier") + ": " - + EOH_TIER_FANCY_NAMES[(int) recipe.getSpacetimeCasingTierRequired()]); - - if (recipe.getEUOutput() < TRILLION) { - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.Out", "EU Output") + ": " - + formatNumbers(recipe.getEUOutput()) - + " EU"); - } else { - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.Out", "EU Output") + ": " - + ReadableNumberConverter.INSTANCE.toWideReadableForm(recipe.getEUOutput()) - + " EU"); - } - - if (recipe.getEUOutput() < TRILLION) { - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.In", "EU Input") + ": " - + formatNumbers(recipe.getEUStartCost()) - + " EU"); - } else { - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.EU.In", "EU Input") + ": " - + ReadableNumberConverter.INSTANCE.toWideReadableForm(recipe.getEUStartCost()) - + " EU"); - } - - result.add( - GT_LanguageManager.addStringLocalization("EOH.Recipe.BaseRecipeChance", "Base Recipe Chance") + ": " - + formatNumbers(100 * recipe.getBaseRecipeSuccessChance()) - + "%"); - result.add( - GT_LanguageManager - .addStringLocalization("EOH.Recipe.RecipeEnergyEfficiency", "Recipe Energy Efficiency") + ": " - + formatNumbers(100 * recipe.getRecipeEnergyEfficiency()) - + "%"); - - if (recipe.getOutputItems() - .size() > maxItemsToRender) { - result.add( - "" + DARK_RED - + BOLD - + GT_LanguageManager.addStringLocalization("EOH.Recipe.Warning.0", "Warning") - + RESET - + ": " - + GT_LanguageManager.addStringLocalization("EOH.Recipe.Warning.1", "Not all items displayed.")); - } - - return result; - } - } -} diff --git a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java deleted file mode 100644 index 5813c3385d..0000000000 --- a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipe.java +++ /dev/null @@ -1,467 +0,0 @@ -package com.github.technus.tectech.recipe; - -import static com.github.technus.tectech.recipe.EyeOfHarmonyRecipeStorage.BILLION; -import static com.google.common.math.IntMath.pow; -import static gregtech.api.GregTech_API.getUnificatedOreDictStack; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.util.GT_ModHandler.getModItem; -import static gregtech.api.util.GT_Utility.getPlasmaFuelValueInEUPerLiterFromMaterial; -import static java.lang.Math.min; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.tuple.Pair; - -import com.github.technus.tectech.util.FluidStackLong; -import com.github.technus.tectech.util.ItemStackLong; - -import gnu.trove.map.TMap; -import gnu.trove.map.hash.TCustomHashMap; -import gnu.trove.strategy.HashingStrategy; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; -import pers.gwyog.gtneioreplugin.plugin.block.BlockDimensionDisplay; -import pers.gwyog.gtneioreplugin.util.GT5OreLayerHelper; -import pers.gwyog.gtneioreplugin.util.GT5OreSmallHelper; - -@SuppressWarnings("SpellCheckingInspection") -public class EyeOfHarmonyRecipe { - - static final FluidStackLong[] SPECIAL_FLUIDS = new FluidStackLong[] { - new FluidStackLong(MaterialsUEVplus.WhiteDwarfMatter.getMolten(1_152), 1_152), - new FluidStackLong(MaterialsUEVplus.WhiteDwarfMatter.getMolten(1_152), 1_152), - new FluidStackLong(MaterialsUEVplus.WhiteDwarfMatter.getMolten(4_608), 4_608), - new FluidStackLong(MaterialsUEVplus.WhiteDwarfMatter.getMolten(18_432), 18_432), - new FluidStackLong(MaterialsUEVplus.BlackDwarfMatter.getMolten(1_152), 1_152), - new FluidStackLong(MaterialsUEVplus.BlackDwarfMatter.getMolten(4_608), 4_608), - new FluidStackLong(MaterialsUEVplus.BlackDwarfMatter.getMolten(18_432), 18_432), - new FluidStackLong(MaterialsUEVplus.Universium.getMolten(1_152), 1_152), - new FluidStackLong(MaterialsUEVplus.Universium.getMolten(4_608), 4_608), - new FluidStackLong(MaterialsUEVplus.Universium.getMolten(18_432), 18_432) }; - - HashingStrategy itemStackHashingStrategy = new HashingStrategy<>() { - - private static final long serialVersionUID = -3966004160368229212L; - - @Override - public int computeHashCode(ItemStack stack) { - // Not really sure how this works or if it is "unique enough". - int result = stack.getItem() - .hashCode(); - result = 31 * result + stack.getItemDamage(); - return result; - } - - @Override - public boolean equals(ItemStack item1, ItemStack item2) { - return item1.getUnlocalizedName() - .equals(item2.getUnlocalizedName()); - } - }; - - private final TMap itemStackToProbabilityMap = new TCustomHashMap<>(itemStackHashingStrategy); - private final TMap itemStackToTrueStackSizeMap = new TCustomHashMap<>(itemStackHashingStrategy); - - private final ArrayList outputItems; - private final ArrayList outputFluids; - - private final long hydrogenRequirement; - private final long heliumRequirement; - - private final long euOutput; - private final long euStartCost; - - private final double baseSuccessChance; - - private final long spacetimeCasingTierRequired; - - private final long miningTimeSeconds; - - private final double recipeEnergyEfficiency; - - private final ItemStack recipeTriggerItem; - - private final long sumOfItems; - private final long rocketTier; - - public TMap getItemStackToProbabilityMap() { - return itemStackToProbabilityMap; - } - - public TMap getItemStackToTrueStackSizeMap() { - return itemStackToTrueStackSizeMap; - } - - public double getRecipeEnergyEfficiency() { - return recipeEnergyEfficiency; - } - - @SuppressWarnings("FieldCanBeLocal") - private final long standardRecipeEUOutPerTick = 100 * BILLION; - - public long getSumOfItems() { - return sumOfItems; - } - - public long getRocketTier() { - return rocketTier; - } - - public EyeOfHarmonyRecipe(final ArrayList> materialList, final BlockDimensionDisplay block, - final double recipeEnergyEfficiency, final long hydrogenRequirement, final long heliumRequirement, - final long miningTimeSeconds, final long rocketTierOfRecipe, final double baseSuccessChance) { - - this.rocketTier = rocketTierOfRecipe; - this.spacetimeCasingTierRequired = min(8, rocketTierOfRecipe); - - this.recipeTriggerItem = new ItemStack(block); - - this.outputItems = validDustGenerator(materialList); - - this.sumOfItems = this.outputItems.stream() - .map(ItemStackLong::getStackSize) - .reduce(0L, Long::sum); - - this.outputItems.add(new ItemStackLong(getStoneDustType(block.getDimension()), this.sumOfItems * 3L)); - this.outputItems.sort(Comparator.comparingLong(ItemStackLong::getStackSize)); - Collections.reverse(this.outputItems); - - for (ItemStackLong itemStackLong : outputItems) { - double stackSize = (double) itemStackLong.getStackSize(); - double probability = Math.round(100_000 * stackSize / sumOfItems) / 1000.0; - - itemStackToProbabilityMap.put(itemStackLong.itemStack, probability); - itemStackToTrueStackSizeMap.put(itemStackLong.itemStack, itemStackLong.stackSize); - } - // End item processing. - - // --- Fluid handling --- - ArrayList fluidStackLongArrayList = new ArrayList<>(); - - int plasmaAmount = (int) ((this.spacetimeCasingTierRequired + 1) * 8_000_000L); - - // If DeepDark then it should output all plasmas involved in making exotic catalyst. - if (rocketTier == 9) { - for (Materials material : VALID_PLASMAS) { - fluidStackLongArrayList.add(new FluidStackLong(material.getPlasma(plasmaAmount), plasmaAmount)); - } - } else { - // --- Output and process fluids of the recipe. - ArrayList fluidStackArrayList = new ArrayList<>(validPlasmaGenerator(materialList)); - for (FluidStack fluidStack : fluidStackArrayList) { - fluidStack = new FluidStack(fluidStack, plasmaAmount); - fluidStackLongArrayList.add(new FluidStackLong(fluidStack, plasmaAmount)); - } - } - - // Add a bonus fluid of compressed star matter. - fluidStackLongArrayList.add( - new FluidStackLong( - MaterialsUEVplus.RawStarMatter.getFluid((this.spacetimeCasingTierRequired + 1) * 100_000), - (this.spacetimeCasingTierRequired + 1) * 100_000)); - - // Tier 0 & 1 - 576 White - // Tier 2 - 2304 White - // Tier 3 - 9216 White - - // Tier 4 - 576 Black - // Tier 5 - 2304 Black - // Tier 6 - 9216 Black - - // Tier 7 - 576 Universium - // Tier 8 - 2304 Universium - // Tier 9 - 9216 Universium - int spacetimeTier = (int) rocketTierOfRecipe; - if (spacetimeTier == 0 || spacetimeTier == 9) { - spacetimeTier -= 1; - } - fluidStackLongArrayList.add(SPECIAL_FLUIDS[spacetimeTier + 1]); - - outputFluids = fluidStackLongArrayList; - // --- End fluid handling ---. - - this.hydrogenRequirement = hydrogenRequirement; - this.heliumRequirement = heliumRequirement; - - this.baseSuccessChance = baseSuccessChance; - - this.miningTimeSeconds = miningTimeSeconds; - this.recipeEnergyEfficiency = recipeEnergyEfficiency; - - long plasmaEU = plasmaCostCalculator(outputFluids); - long VM3EU = miningTimeSeconds * pow(2, 19) * 20; - this.euStartCost = (plasmaEU + VM3EU + standardRecipeEUOutPerTick * 20 * miningTimeSeconds); - this.euOutput = (long) (euStartCost * recipeEnergyEfficiency); - } - - private ItemStack getStoneDustType(String key) { - ItemStack placeholder = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1); - return switch (key) { - case "Ne" -> GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 1); - case "ED", "VA", "EA" -> GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 1); - case "Mo" -> getModItem(NewHorizonsCoreMod.ID, "item.MoonStoneDust", 1, placeholder); - case "De" -> getModItem(NewHorizonsCoreMod.ID, "item.DeimosStoneDust", 1, placeholder); - case "Ma" -> getModItem(NewHorizonsCoreMod.ID, "item.MarsStoneDust", 1, placeholder); - case "Ph" -> getModItem(NewHorizonsCoreMod.ID, "item.PhobosStoneDust", 1, placeholder); - case "As", "KB" -> getModItem(NewHorizonsCoreMod.ID, "item.AsteroidsStoneDust", 1, placeholder); - case "Ca" -> getModItem(NewHorizonsCoreMod.ID, "item.CallistoStoneDust", 1, placeholder); - case "Ce" -> getModItem(NewHorizonsCoreMod.ID, "item.CeresStoneDust", 1, placeholder); - case "Eu" -> getModItem(NewHorizonsCoreMod.ID, "item.EuropaStoneDust", 1, placeholder); - case "Ga" -> getModItem(NewHorizonsCoreMod.ID, "item.GanymedeStoneDust", 1, placeholder); - case "Io" -> getModItem(NewHorizonsCoreMod.ID, "item.IoStoneDust", 1, placeholder); - case "Me" -> getModItem(NewHorizonsCoreMod.ID, "item.MercuryStoneDust", 1, placeholder); - case "Ve" -> getModItem(NewHorizonsCoreMod.ID, "item.VenusStoneDust", 1, placeholder); - case "En" -> getModItem(NewHorizonsCoreMod.ID, "item.EnceladusStoneDust", 1, placeholder); - case "Mi" -> getModItem(NewHorizonsCoreMod.ID, "item.MirandaStoneDust", 1, placeholder); - case "Ob" -> getModItem(NewHorizonsCoreMod.ID, "item.OberonStoneDust", 1, placeholder); - case "Ti" -> getModItem(NewHorizonsCoreMod.ID, "item.TitanStoneDust", 1, placeholder); - case "Pr" -> getModItem(NewHorizonsCoreMod.ID, "item.ProteusStoneDust", 1, placeholder); - case "Tr" -> getModItem(NewHorizonsCoreMod.ID, "item.TritonStoneDust", 1, placeholder); - case "Ha" -> getModItem(NewHorizonsCoreMod.ID, "item.HaumeaStoneDust", 1, placeholder); - case "MM" -> getModItem(NewHorizonsCoreMod.ID, "item.MakeMakeStoneDust", 1, placeholder); - case "Pl" -> getModItem(NewHorizonsCoreMod.ID, "item.PlutoStoneDust", 1, placeholder); - case "BE" -> getModItem(NewHorizonsCoreMod.ID, "item.BarnardaEStoneDust", 1, placeholder); - case "BF" -> getModItem(NewHorizonsCoreMod.ID, "item.BarnardaFStoneDust", 1, placeholder); - case "CB" -> getModItem(NewHorizonsCoreMod.ID, "item.CentauriAStoneDust", 1, placeholder); - case "TE" -> getModItem(NewHorizonsCoreMod.ID, "item.TCetiEStoneDust", 1, placeholder); - case "VB" -> getModItem(NewHorizonsCoreMod.ID, "item.VegaBStoneDust", 1, placeholder); - default -> placeholder; - }; - } - - public EyeOfHarmonyRecipe(final GT5OreLayerHelper.NormalOreDimensionWrapper normalOreDimensionWrapper, - final GT5OreSmallHelper.SmallOreDimensionWrapper smallOreDimensionWrapper, final BlockDimensionDisplay block, - final double recipeEnergyEfficiency, final long hydrogenRequirement, final long heliumRequirement, - final long miningTimeSeconds, final long spacetimeCasingTierRequired, final double baseSuccessChance) { - - // Process recipes output items. - // 6 * 64 = 6 stacks/second for VM tier 3 + Og gas. - this( - processDimension(normalOreDimensionWrapper, smallOreDimensionWrapper, miningTimeSeconds), - block, - recipeEnergyEfficiency, - hydrogenRequirement, - heliumRequirement, - miningTimeSeconds, - spacetimeCasingTierRequired, - baseSuccessChance); - } - - // Return clone of list. Deep copy. Maybe a better way to do this? - public ArrayList getOutputItems() { - ArrayList copyOutputList = new ArrayList<>(); - for (ItemStackLong itemStackLong : outputItems) { - copyOutputList.add(new ItemStackLong(itemStackLong)); - } - - return copyOutputList; - } - - // Deep copy. - public ArrayList getOutputFluids() { - ArrayList copyOutputList = new ArrayList<>(); - - for (FluidStackLong fluidStackLong : outputFluids) { - copyOutputList.add(new FluidStackLong(fluidStackLong)); - } - - return copyOutputList; - } - - public long getHydrogenRequirement() { - return hydrogenRequirement; - } - - public long getHeliumRequirement() { - return heliumRequirement; - } - - public long getEUOutput() { - return euOutput; - } - - public long getEUStartCost() { - return euStartCost; - } - - public long getRecipeTimeInTicks() { - return miningTimeSeconds * 20; - } - - public double getBaseRecipeSuccessChance() { - return baseSuccessChance; - } - - public long getSpacetimeCasingTierRequired() { - return spacetimeCasingTierRequired; - } - - public ItemStack getRecipeTriggerItem() { - return recipeTriggerItem; - } - - private static final double PRIMARY_MULTIPLIER = (0.1 + 1.0 / 9.0); // Byproduct from macerating/washing chance. - private static final double SECONDARY_MULTIPLIER = (1.0 / 9.0); // Thermal centrifuge byproduct chance. - private static final double TERTIARY_MULTIPLIER = (0.1); // Macerating thermal centrifuged byproduct chance. - private static final double QUATERNARY_MULTIPLIER = (0.7); // Mercury/chem bath processing chance. - - private static final double[] ORE_MULTIPLIER = { PRIMARY_MULTIPLIER, SECONDARY_MULTIPLIER, TERTIARY_MULTIPLIER, - QUATERNARY_MULTIPLIER }; - - public static class HashMapHelper extends HashMap { - - private static final long serialVersionUID = 2297018142561480614L; - - void add(Materials material, double value) { - - // If key already exists. - if (this.containsKey(material)) { - this.put(material, value + this.get(material)); - return; - } - - // Otherwise, add value to hashmap entry. - this.put(material, value); - } - } - - public static void processHelper(HashMapHelper outputMap, Materials material, double mainMultiplier, - double probability) { - if (material == null) return; - outputMap.add(material.mDirectSmelting, (material.mOreMultiplier * 2) * mainMultiplier * probability); - - int index = 0; - for (Materials byProductMaterial : material.mOreByProducts) { - outputMap - .add(byProductMaterial.mDirectSmelting, mainMultiplier * (ORE_MULTIPLIER[index++] * 2) * probability); - } - } - - private static ArrayList> processDimension( - GT5OreLayerHelper.NormalOreDimensionWrapper normalOreDimWrapper, - GT5OreSmallHelper.SmallOreDimensionWrapper smallOreDimWrapper, long timeInSeconds) { - HashMapHelper outputMap = new HashMapHelper(); - - double mainMultiplier = timeInSeconds * 384.0; - - if (normalOreDimWrapper != null) { - normalOreDimWrapper.oreVeinToProbabilityInDimension.forEach((veinInfo, probability) -> { - processHelper(outputMap, veinInfo.mPrimaryVeinMaterial, mainMultiplier, probability); - processHelper(outputMap, veinInfo.mSecondaryMaterial, mainMultiplier, probability); - // 8.0 to replicate void miner getDropsVanillaVeins method yields. - processHelper(outputMap, veinInfo.mBetweenMaterial, mainMultiplier / 8.0, probability); - processHelper(outputMap, veinInfo.mSporadicMaterial, mainMultiplier / 8.0, probability); - }); - } - - // Iterate over small ores in dimension and add them, kinda hacky but works and is close enough. - if (smallOreDimWrapper != null) { - smallOreDimWrapper.oreVeinToProbabilityInDimension.forEach( - (veinInfo, - probability) -> processHelper(outputMap, veinInfo.getOreMaterial(), mainMultiplier, probability)); - } - - ArrayList> outputList = new ArrayList<>(); - - outputMap.forEach((material, quantity) -> outputList.add(Pair.of(material, (long) Math.floor(quantity)))); - - return outputList; - } - - private static ArrayList validPlasmaGenerator(final List> planetList) { - - ArrayList plasmaList = new ArrayList<>(); - - for (Pair pair : planetList) { - if (VALID_PLASMAS.contains(pair.getLeft())) { - plasmaList.add( - pair.getLeft() - .getPlasma(1)); - } - } - - return plasmaList; - } - - private static ArrayList validDustGenerator(final ArrayList> planetList) { - - ArrayList dustList = new ArrayList<>(); - - for (Pair pair : planetList) { - ItemStack dust = getUnificatedOreDictStack( - pair.getLeft() - .getDust(1)); - if (dust != null) { - dustList.add(new ItemStackLong(dust, pair.getRight())); - } - } - return dustList; - } - - private static long plasmaCostCalculator(ArrayList plasmas) { - long total = 0; - - for (FluidStackLong plasma : plasmas) { - FluidStack plasmaFluid = plasma.getRegularFluidStack(plasma, 1); - try { - String plasmaName = plasmaFluid.getFluid() - .getUnlocalizedName(); - total += plasmaEnergyMap.getOrDefault(plasmaName, 0L) * plasma.amount; - } catch (Exception e) { - e.printStackTrace(); - } - } - - return (long) (total * getMaxPlasmaTurbineEfficiency()); - } - - private static double getMaxPlasmaTurbineEfficiency() { - // I hate Shirabon. - return 3.85; - } - - private static final List VALID_PLASMAS = Stream - .of( - Materials.Helium, - Materials.Iron, - Materials.Calcium, - Materials.Niobium, - Materials.Nitrogen, - Materials.Zinc, - Materials.Silver, - Materials.Titanium, - Materials.Radon, - Materials.Nickel, - Materials.Boron, - Materials.Sulfur, - Materials.Americium, - Materials.Bismuth, - Materials.Oxygen, - Materials.Tin) - .collect(Collectors.toList()); - - private static final HashMap plasmaEnergyMap = new HashMap<>() { - - private static final long serialVersionUID = 7933945171103801933L; - - { - VALID_PLASMAS.forEach( - (material -> put( - material.getPlasma(1) - .getFluid() - .getUnlocalizedName(), - (long) (getPlasmaFuelValueInEUPerLiterFromMaterial(material) * getMaxPlasmaTurbineEfficiency())))); - } - }; -} diff --git a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java b/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java deleted file mode 100644 index 590995336a..0000000000 --- a/src/main/java/com/github/technus/tectech/recipe/EyeOfHarmonyRecipeStorage.java +++ /dev/null @@ -1,186 +0,0 @@ -package com.github.technus.tectech.recipe; - -import static com.github.technus.tectech.recipe.EyeOfHarmonyRecipe.processHelper; -import static com.github.technus.tectech.recipe.TecTechRecipeMaps.eyeOfHarmonyRecipes; -import static java.lang.Math.pow; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.tuple.Pair; - -import com.github.technus.tectech.util.FluidStackLong; -import com.github.technus.tectech.util.ItemStackLong; -import com.google.common.math.LongMath; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; -import pers.gwyog.gtneioreplugin.plugin.block.BlockDimensionDisplay; -import pers.gwyog.gtneioreplugin.plugin.block.ModBlocks; -import pers.gwyog.gtneioreplugin.util.DimensionHelper; -import pers.gwyog.gtneioreplugin.util.GT5OreLayerHelper; -import pers.gwyog.gtneioreplugin.util.GT5OreSmallHelper; - -public class EyeOfHarmonyRecipeStorage { - - public static final long BILLION = LongMath.pow(10, 9); - private static final double CHANCE_DECREASE_PER_DIMENSION = 0.05; - - // Map is unique so this is fine. - HashMap blocksMapInverted = new HashMap<>() { - - private static final long serialVersionUID = -1634011860327553337L; - - { - ModBlocks.blocks.forEach((dimString, dimBlock) -> { put(dimBlock, dimString); }); - } - }; - - private final HashMap recipeHashMap = new HashMap() { - - private static final long serialVersionUID = -3501819612517400500L; - - { - for (String dimAbbreviation : DimensionHelper.DimNameDisplayed) { - BlockDimensionDisplay blockDimensionDisplay = (BlockDimensionDisplay) ModBlocks.blocks - .get(dimAbbreviation); - - if (dimAbbreviation.equals("DD")) { - specialDeepDarkRecipe(this, blockDimensionDisplay); - } else { - - GT5OreLayerHelper.NormalOreDimensionWrapper normalOre = GT5OreLayerHelper.dimToOreWrapper - .getOrDefault(dimAbbreviation, null); - GT5OreSmallHelper.SmallOreDimensionWrapper smallOre = GT5OreSmallHelper.dimToSmallOreWrapper - .getOrDefault(dimAbbreviation, null); - if (normalOre == null && smallOre == null) { - // No ores are generated in this dimension. Fail silently. - continue; - } - - long spacetimeTier = blockDimensionDisplay.getDimensionRocketTier(); - if (spacetimeTier == 0) { - spacetimeTier += 1; - } - - put( - dimAbbreviation, - new EyeOfHarmonyRecipe( - normalOre, - smallOre, - blockDimensionDisplay, - 0.6 + blockDimensionDisplay.getDimensionRocketTier() / 10.0, - BILLION * (blockDimensionDisplay.getDimensionRocketTier() + 1), - BILLION * (blockDimensionDisplay.getDimensionRocketTier() + 1), - timeCalculator(blockDimensionDisplay.getDimensionRocketTier()), - spacetimeTier - 1, - 1.0 - CHANCE_DECREASE_PER_DIMENSION * blockDimensionDisplay.getDimensionRocketTier())); - } - } - } - }; - - public EyeOfHarmonyRecipe recipeLookUp(final ItemStack aStack) { - String dimAbbreviation = blocksMapInverted.get(Block.getBlockFromItem(aStack.getItem())); - return recipeHashMap.get(dimAbbreviation); - } - - public EyeOfHarmonyRecipeStorage() { - - for (EyeOfHarmonyRecipe recipe : recipeHashMap.values()) { - - ArrayList outputItems = new ArrayList<>(); - for (ItemStackLong itemStackLong : recipe.getOutputItems()) { - outputItems.add(itemStackLong.itemStack); - } - - ArrayList outputFluids = new ArrayList<>(); - for (FluidStackLong fluidStackLong : recipe.getOutputFluids()) { - outputFluids.add(fluidStackLong.fluidStack); - } - - ItemStack planetItem = recipe.getRecipeTriggerItem() - .copy(); - planetItem.stackSize = 0; - - GT_Values.RA.stdBuilder() - .itemInputs(planetItem) - .itemOutputs(outputItems.toArray(new ItemStack[0])) - .fluidInputs( - Materials.Hydrogen.getGas(0), - Materials.Helium.getGas(0), - MaterialsUEVplus.RawStarMatter.getFluid(0)) - .fluidOutputs(outputFluids.toArray(new FluidStack[0])) - .duration(recipe.getRecipeTimeInTicks()) - .eut(0) - .special(recipe) - .noOptimize() - .addTo(eyeOfHarmonyRecipes); - } - } - - private void specialDeepDarkRecipe(final HashMap hashMap, - final BlockDimensionDisplay planetItem) { - - HashSet validMaterialSet = new HashSet<>(); - - for (Materials material : Materials.values()) { - - ItemStack normalOre = GT_OreDictUnificator.get(OrePrefixes.ore, material, 1); - - if ((normalOre != null)) { - validMaterialSet.add(material); - } - - ItemStack smallOre = GT_OreDictUnificator.get(OrePrefixes.oreSmall, material, 1); - - if ((smallOre != null)) { - validMaterialSet.add(material); - } - } - - ArrayList validMaterialList = new ArrayList<>(validMaterialSet); - - long rocketTier = 9; - - hashMap.put( - "DD", - new EyeOfHarmonyRecipe( - processDD(validMaterialList), - planetItem, - 0.6 + rocketTier / 10.0, - BILLION * (rocketTier + 1), - BILLION * (rocketTier + 1), - timeCalculator(rocketTier), - rocketTier, // -1 so that we avoid out of bounds exception on NEI render. - 1.0 - rocketTier * CHANCE_DECREASE_PER_DIMENSION)); - } - - private static long timeCalculator(final long rocketTier) { - return (long) (18_000L * pow(1.4, rocketTier)); - } - - private ArrayList> processDD(final ArrayList validMaterialList) { - EyeOfHarmonyRecipe.HashMapHelper outputMap = new EyeOfHarmonyRecipe.HashMapHelper(); - - // 10 from rocketTier + 1, 6 * 64 = VM3 + Og, 1.4 = time increase per tier. - double mainMultiplier = (timeCalculator(10) * (6 * 64)); - double probability = 1.0 / validMaterialList.size(); - - validMaterialList.forEach((material) -> { processHelper(outputMap, material, mainMultiplier, probability); }); - - ArrayList> outputList = new ArrayList<>(); - - outputMap.forEach((material, quantity) -> outputList.add(Pair.of(material, (long) Math.floor(quantity)))); - - return outputList; - } -} diff --git a/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java b/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java deleted file mode 100644 index 38c505b89b..0000000000 --- a/src/main/java/com/github/technus/tectech/recipe/GodforgeExoticFrontend.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.github.technus.tectech.recipe; - -import static com.github.technus.tectech.loader.recipe.Godforge.magmatterItemsForNEI; -import static com.github.technus.tectech.loader.recipe.Godforge.magmatterSpaceFluidItemsForNEI; -import static com.github.technus.tectech.loader.recipe.Godforge.magmatterTimeFluidItemsForNEI; -import static com.github.technus.tectech.loader.recipe.Godforge.quarkGluonFluidItemsForNEI; -import static com.github.technus.tectech.loader.recipe.Godforge.quarkGluonItemsForNEI; -import static gregtech.api.util.GT_Utility.trans; - -import java.util.Collections; -import java.util.List; - -import javax.annotation.ParametersAreNonnullByDefault; - -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; - -import codechicken.nei.PositionedStack; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.recipe.BasicUIPropertiesBuilder; -import gregtech.api.recipe.NEIRecipePropertiesBuilder; -import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.nei.GT_NEI_DefaultHandler; -import gregtech.nei.RecipeDisplayInfo; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -public class GodforgeExoticFrontend extends RecipeMapFrontend { - - public GodforgeExoticFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, - NEIRecipePropertiesBuilder neiPropertiesBuilder) { - super(uiPropertiesBuilder, neiPropertiesBuilder); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder, Pos2d windowOffset) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO) - .setSize(18, 18) - .setPos(new Pos2d(151, 63).add(windowOffset))); - } - - @Override - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { - if (neiCachedRecipe.mRecipe.mFluidOutputs[0].equals(MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000))) { - neiCachedRecipe.mInputs.set(0, new PositionedStack(quarkGluonItemsForNEI, 48, 23, true)); - neiCachedRecipe.mInputs.set(1, new PositionedStack(quarkGluonFluidItemsForNEI, 48, 52, true)); - } else { - neiCachedRecipe.mInputs.set(0, new PositionedStack(magmatterItemsForNEI, 48, 23, true)); - neiCachedRecipe.mInputs.set(1, new PositionedStack(magmatterSpaceFluidItemsForNEI, 30, 52, true)); - neiCachedRecipe.mInputs.set(2, new PositionedStack(magmatterTimeFluidItemsForNEI, 48, 52, true)); - } - } - - @Override - public List getItemInputPositions(int itemInputCount) { - return Collections.singletonList(new Pos2d(52, 33)); - } - - @Override - public List getItemOutputPositions(int itemOutputCount) { - return Collections.singletonList(new Pos2d(106, 33)); - } - - @Override - protected void drawEnergyInfo(RecipeDisplayInfo recipeInfo) { - long eut = recipeInfo.recipe.mEUt; - long duration = recipeInfo.recipe.mDuration; - recipeInfo.drawText(trans("152", "Total: ") + GT_Utility.formatNumbers(eut * duration) + " EU"); - recipeInfo.drawText(trans("153", "Usage: ") + GT_Utility.formatNumbers(eut) + " EU/t"); - recipeInfo.drawText(trans("158", "Time: ") + GT_Utility.formatNumbers(duration / 20) + " secs"); - - } - - @Override - protected void drawDurationInfo(RecipeDisplayInfo recipeInfo) {} - -} diff --git a/src/main/java/com/github/technus/tectech/recipe/GodforgePlasmaFrontend.java b/src/main/java/com/github/technus/tectech/recipe/GodforgePlasmaFrontend.java deleted file mode 100644 index 7cdf2bb5c1..0000000000 --- a/src/main/java/com/github/technus/tectech/recipe/GodforgePlasmaFrontend.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.github.technus.tectech.recipe; - -import static gregtech.api.util.GT_Utility.trans; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.Collections; -import java.util.List; - -import javax.annotation.ParametersAreNonnullByDefault; - -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; - -import gregtech.api.recipe.BasicUIPropertiesBuilder; -import gregtech.api.recipe.NEIRecipePropertiesBuilder; -import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.nei.RecipeDisplayInfo; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -public class GodforgePlasmaFrontend extends RecipeMapFrontend { - - public GodforgePlasmaFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, - NEIRecipePropertiesBuilder neiPropertiesBuilder) { - super(uiPropertiesBuilder, neiPropertiesBuilder); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder, Pos2d windowOffset) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO) - .setSize(18, 18) - .setPos(new Pos2d(151, 63).add(windowOffset))); - } - - @Override - public List getItemInputPositions(int itemInputCount) { - return Collections.singletonList(new Pos2d(52, 33)); - } - - @Override - public List getItemOutputPositions(int itemOutputCount) { - return Collections.singletonList(new Pos2d(106, 33)); - } - - @Override - protected void drawEnergyInfo(RecipeDisplayInfo recipeInfo) { - long eut = recipeInfo.recipe.mEUt; - long duration = recipeInfo.recipe.mDuration; - String multistep = "No"; - if (recipeInfo.recipe.mSpecialItems.toString() - .equals("true")) { - multistep = "Yes"; - } - String requiredUpgrade = switch (recipeInfo.recipe.mSpecialValue) { - case 1 -> "T4-T5"; - case 2 -> "Exotic"; - default -> "T1-T3"; - }; - - recipeInfo.drawText(trans("152", "Total: ") + GT_Utility.formatNumbers(eut * duration) + " EU"); - recipeInfo.drawText(trans("153", "Usage: ") + GT_Utility.formatNumbers(eut) + " EU/t"); - recipeInfo.drawText( - trans("158", "Time: ") + GT_Utility.formatNumbers(duration / 20d) - + " secs" - + (duration < 20 ? " (" + duration + " ticks)" : "")); - recipeInfo.drawText(translateToLocal("gt.blockmachines.multimachine.FOG.plasmamultistep") + ": " + multistep); - recipeInfo - .drawText(translateToLocal("gt.blockmachines.multimachine.FOG.plasmarecipetier") + ": " + requiredUpgrade); - } - - @Override - protected void drawDurationInfo(RecipeDisplayInfo recipeInfo) {} - -} diff --git a/src/main/java/com/github/technus/tectech/recipe/ResearchStationFrontend.java b/src/main/java/com/github/technus/tectech/recipe/ResearchStationFrontend.java deleted file mode 100644 index 2f95652a77..0000000000 --- a/src/main/java/com/github/technus/tectech/recipe/ResearchStationFrontend.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.github.technus.tectech.recipe; - -import static gregtech.api.util.GT_Utility.trans; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import java.util.Collections; -import java.util.List; -import java.util.function.Supplier; - -import javax.annotation.ParametersAreNonnullByDefault; - -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; - -import gregtech.api.recipe.BasicUIPropertiesBuilder; -import gregtech.api.recipe.NEIRecipePropertiesBuilder; -import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.nei.RecipeDisplayInfo; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -public class ResearchStationFrontend extends RecipeMapFrontend { - - public ResearchStationFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, - NEIRecipePropertiesBuilder neiPropertiesBuilder) { - super(uiPropertiesBuilder, neiPropertiesBuilder); - } - - @Override - public List getItemInputPositions(int itemInputCount) { - return Collections.singletonList(new Pos2d(52, 33)); - } - - @Override - public List getItemOutputPositions(int itemOutputCount) { - return Collections.singletonList(new Pos2d(106, 33)); - } - - @Override - public Pos2d getSpecialItemPosition() { - return new Pos2d(124, 62); - } - - @Override - protected void drawEnergyInfo(RecipeDisplayInfo recipeInfo) { - long eut = recipeInfo.recipe.mEUt; - int computation = recipeInfo.recipe.mDuration; - short ampere = (short) (recipeInfo.recipe.mSpecialValue & 0xFFFF); - short minComputationPerSec = (short) (recipeInfo.recipe.mSpecialValue >>> 16); - recipeInfo.drawText( - translateToLocalFormatted( - "tt.nei.research.max_eu", - GT_Utility.formatNumbers( - (1 + (computation - minComputationPerSec) / minComputationPerSec) * eut * ampere * 20))); - recipeInfo.drawText(trans("153", "Usage: ") + GT_Utility.formatNumbers(eut * ampere) + " EU/t"); - recipeInfo.drawText(trans("154", "Voltage: ") + GT_Utility.formatNumbers(eut) + " EU/t"); - recipeInfo.drawText(trans("155", "Amperage: ") + GT_Utility.formatNumbers(ampere)); - recipeInfo - .drawText(translateToLocalFormatted("tt.nei.research.computation", GT_Utility.formatNumbers(computation))); - recipeInfo.drawText( - translateToLocalFormatted( - "tt.nei.research.min_computation", - GT_Utility.formatNumbers(minComputationPerSec))); - } - - @Override - protected void drawDurationInfo(RecipeDisplayInfo recipeInfo) {} - - @Override - public void addProgressBar(ModularWindow.Builder builder, Supplier progressSupplier, Pos2d windowOffset) { - int bar1Width = 25; - int bar2Width = 11; - int bar3Height = 18; - List> splitProgress = splitProgress(progressSupplier, bar1Width, bar2Width, bar3Height); - builder.widget( - new ProgressBar().setTexture(TecTechUITextures.PROGRESSBAR_RESEARCH_STATION_1, bar1Width) - .setDirection(ProgressBar.Direction.RIGHT) - .setProgress(splitProgress.get(0)) - .setSynced(false, false) - .setPos(new Pos2d(81, 40).add(windowOffset)) - .setSize(bar1Width, 5)); - builder.widget( - new ProgressBar().setTexture(TecTechUITextures.PROGRESSBAR_RESEARCH_STATION_2, bar2Width) - .setDirection(ProgressBar.Direction.RIGHT) - .setProgress(splitProgress.get(1)) - .setSynced(false, false) - .setPos(new Pos2d(124, 40).add(windowOffset)) - .setSize(bar2Width, 5)); - builder.widget( - new ProgressBar().setTexture(TecTechUITextures.PROGRESSBAR_RESEARCH_STATION_3, bar3Height) - .setDirection(ProgressBar.Direction.DOWN) - .setProgress(splitProgress.get(2)) - .setSynced(false, false) - .setPos(new Pos2d(128, 44).add(windowOffset)) - .setSize(10, bar3Height)); - } -} diff --git a/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java b/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java deleted file mode 100644 index ce98b6dc86..0000000000 --- a/src/main/java/com/github/technus/tectech/recipe/TT_recipeAdder.java +++ /dev/null @@ -1,252 +0,0 @@ -package com.github.technus.tectech.recipe; - -import static com.github.technus.tectech.recipe.TecTechRecipeMaps.researchStationFakeRecipes; -import static gregtech.api.recipe.RecipeMaps.assemblylineVisualRecipes; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_STATION_DATA; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.CustomItemList; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.util.GT_AssemblyLineUtils; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Recipe.GT_Recipe_AssemblyLine; -import gregtech.api.util.GT_Utility; -import gregtech.common.GT_RecipeAdder; - -public class TT_recipeAdder extends GT_RecipeAdder { - - public static final ItemStack[] nullItem = new ItemStack[0]; - public static final FluidStack[] nullFluid = new FluidStack[0]; - - @Deprecated - public static boolean addResearchableAssemblylineRecipe(ItemStack aResearchItem, int totalComputationRequired, - int computationRequiredPerSec, int researchEUt, int researchAmperage, ItemStack[] aInputs, - FluidStack[] aFluidInputs, ItemStack aOutput, int assDuration, int assEUt) { - if (aInputs == null) { - aInputs = nullItem; - } - if (aFluidInputs == null) { - aFluidInputs = nullFluid; - } - if (aResearchItem == null || totalComputationRequired <= 0 || aOutput == null || aInputs.length > 16) { - return false; - } - for (ItemStack tItem : aInputs) { - if (tItem == null) { - TecTech.LOGGER.error( - "addResearchableAssemblingLineRecipe " + aResearchItem.getDisplayName() - + " --> " - + aOutput.getUnlocalizedName() - + " there is some null item in that recipe"); - } - } - researchAmperage = GT_Utility.clamp(researchAmperage, 1, Short.MAX_VALUE); - computationRequiredPerSec = GT_Utility.clamp(computationRequiredPerSec, 1, Short.MAX_VALUE); - - GT_Recipe_AssemblyLine recipeGT = new GT_Recipe.GT_Recipe_AssemblyLine( - CustomItemList.UnusedStuff.get(1), - totalComputationRequired / computationRequiredPerSec, - aInputs, - aFluidInputs, - aOutput, - assDuration, - assEUt); - GT_Recipe_AssemblyLine recipeTT = new GT_Recipe.GT_Recipe_AssemblyLine( - aResearchItem, - totalComputationRequired / computationRequiredPerSec, - aInputs, - aFluidInputs, - aOutput, - assDuration, - assEUt); - GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes.add(recipeGT); - TecTechRecipeMaps.researchableALRecipeList.add(recipeTT); - - ItemStack writesDataStick = ItemList.Tool_DataStick.getWithName(1L, "Writes Research result"); - GT_AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(writesDataStick, recipeTT, false); - GT_Values.RA.stdBuilder() - .itemInputs(aResearchItem) - .itemOutputs(aOutput) - .special(writesDataStick) - .duration(totalComputationRequired) - .eut(researchEUt) - .metadata(RESEARCH_STATION_DATA, researchAmperage | computationRequiredPerSec << 16) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(researchStationFakeRecipes); - - ItemStack readsDataStick = ItemList.Tool_DataStick.getWithName(1L, "Reads Research result"); - GT_AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(readsDataStick, recipeTT, false); - GT_Values.RA.stdBuilder() - .itemInputs(aInputs) - .itemOutputs(aOutput) - .fluidInputs(aFluidInputs) - .special(readsDataStick) - .duration(assDuration) - .eut(assEUt) - .ignoreCollision() - .fake() - .addTo(assemblylineVisualRecipes); - return true; - } - - @Deprecated - public static boolean addResearchableAssemblylineRecipe(ItemStack aResearchItem, int totalComputationRequired, - int computationRequiredPerSec, int researchEUt, int researchAmperage, Object[] aInputs, - FluidStack[] aFluidInputs, ItemStack aOutput, int assDuration, int assEUt) { - if (aInputs == null) { - aInputs = nullItem; - } - if (aFluidInputs == null) { - aFluidInputs = nullFluid; - } - if (aResearchItem == null || totalComputationRequired <= 0 - || aOutput == null - || aInputs.length > 16 - || aFluidInputs.length > 4 - || assDuration <= 0 - || assEUt <= 0) { - return false; - } - - ItemStack[] tInputs = new ItemStack[aInputs.length]; - ItemStack[][] tAlts = new ItemStack[aInputs.length][]; - int tPersistentHash = 1; - for (int i = 0; i < aInputs.length; i++) { - Object obj = aInputs[i]; - if (obj instanceof ItemStack) { - tInputs[i] = (ItemStack) obj; - tAlts[i] = null; - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(tInputs[i], true, false); - continue; - } else if (obj instanceof ItemStack[]aStacks) { - if (aStacks.length > 0) { - tInputs[i] = aStacks[0]; - tAlts[i] = Arrays.copyOf(aStacks, aStacks.length); - for (ItemStack tAlt : tAlts[i]) { - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(tAlt, true, false); - } - tPersistentHash *= 31; - continue; - } - } else if (obj instanceof Object[]objs) { - List tList; - if (objs.length >= 2 && !(tList = GT_OreDictUnificator.getOres(objs[0])).isEmpty()) { - try { - // sort the output, so the hash code is stable across launches - tList.sort( - Comparator - .comparing( - s -> GameRegistry.findUniqueIdentifierFor(s.getItem()).modId) - .thenComparing(s -> GameRegistry.findUniqueIdentifierFor(s.getItem()).modId) - .thenComparingInt(Items.feather::getDamage) - .thenComparingInt(s -> s.stackSize)); - int tAmount = ((Number) objs[1]).intValue(); - List uList = new ArrayList<>(); - for (ItemStack tStack : tList) { - ItemStack uStack = GT_Utility.copyAmount(tAmount, tStack); - if (GT_Utility.isStackValid(uStack)) { - uList.add(uStack); - if (tInputs[i] == null) tInputs[i] = uStack; - } - } - tAlts[i] = uList.toArray(new ItemStack[0]); - tPersistentHash = tPersistentHash * 31 + (objs[0] == null ? "" : objs[0].toString()).hashCode(); - tPersistentHash = tPersistentHash * 31 + tAmount; - continue; - } catch (Exception t) { - TecTech.LOGGER.error( - "addAssemblingLineRecipe " + aResearchItem.getDisplayName() - + " --> there is some ... in that recipe"); - } - } - } - TecTech.LOGGER.error( - "addAssemblingLineRecipe " + aResearchItem.getDisplayName() - + " --> " - + aOutput.getUnlocalizedName() - + " there is some null item in that recipe"); - } - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(aResearchItem, true, false); - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(aOutput, true, false); - for (FluidStack tFluidInput : aFluidInputs) { - if (tFluidInput == null) continue; - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(tFluidInput, true, false); - } - researchAmperage = GT_Utility.clamp(researchAmperage, 1, Short.MAX_VALUE); - computationRequiredPerSec = GT_Utility.clamp(computationRequiredPerSec, 1, Short.MAX_VALUE); - tPersistentHash = tPersistentHash * 31 + totalComputationRequired; - tPersistentHash = tPersistentHash * 31 + computationRequiredPerSec; - tPersistentHash = tPersistentHash * 31 + researchAmperage; - tPersistentHash = tPersistentHash * 31 + researchEUt; - tPersistentHash = tPersistentHash * 31 + assDuration; - tPersistentHash = tPersistentHash * 31 + assEUt; - - GT_Recipe_AssemblyLine recipeGT = new GT_Recipe_AssemblyLine( - CustomItemList.UnusedStuff.get(1), - totalComputationRequired / computationRequiredPerSec, - tInputs, - aFluidInputs, - aOutput, - assDuration, - assEUt, - tAlts); - recipeGT.setPersistentHash(tPersistentHash); - GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes.add(recipeGT); - GT_Recipe_AssemblyLine recipeTT = new GT_Recipe_AssemblyLine( - aResearchItem, - totalComputationRequired / computationRequiredPerSec, - tInputs, - aFluidInputs, - aOutput, - assDuration, - assEUt, - tAlts); - recipeTT.setPersistentHash(tPersistentHash); - TecTechRecipeMaps.researchableALRecipeList.add(recipeTT); - - ItemStack writesDataStick = ItemList.Tool_DataStick.getWithName(1L, "Writes Research result"); - GT_AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(writesDataStick, recipeTT, false); - GT_Values.RA.stdBuilder() - .itemInputs(aResearchItem) - .itemOutputs(aOutput) - .special(writesDataStick) - .duration(totalComputationRequired) - .eut(researchEUt) - .metadata(RESEARCH_STATION_DATA, researchAmperage | computationRequiredPerSec << 16) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(researchStationFakeRecipes); - - ItemStack readsDataStick = ItemList.Tool_DataStick.getWithName(1L, "Reads Research result"); - GT_AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(readsDataStick, recipeTT, false); - assemblylineVisualRecipes.addFakeRecipe( - false, - tInputs, - new ItemStack[] { aOutput }, - new ItemStack[] { readsDataStick }, - aFluidInputs, - null, - assDuration, - assEUt, - 0, - tAlts, - false); - return true; - } -} diff --git a/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java b/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java deleted file mode 100644 index 0588c9a235..0000000000 --- a/src/main/java/com/github/technus/tectech/recipe/TecTechRecipeMaps.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.github.technus.tectech.recipe; - -import java.util.ArrayList; -import java.util.List; - -import com.github.technus.tectech.thing.CustomItemList; -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMapBackend; -import gregtech.api.recipe.RecipeMapBuilder; -import gregtech.api.util.GT_Recipe; - -public class TecTechRecipeMaps { - - public static void init() {} - - public static final List researchableALRecipeList = new ArrayList<>(); - - public static final RecipeMap eyeOfHarmonyRecipes = RecipeMapBuilder.of("gt.recipe.eyeofharmony") - .maxIO( - EyeOfHarmonyFrontend.maxItemInputs, - EyeOfHarmonyFrontend.maxItemOutputs, - EyeOfHarmonyFrontend.maxFluidInputs, - EyeOfHarmonyFrontend.maxFluidOutputs) - .minInputs(1, 0) - .progressBar(GT_UITextures.PROGRESSBAR_HAMMER, ProgressBar.Direction.DOWN) - .progressBarPos(78, 24 + 2) - .logoPos(10, 10) - .neiHandlerInfo( - builder -> builder.setDisplayStack(CustomItemList.Machine_Multi_EyeOfHarmony.get(1)) - .setHeight(314) - .setMaxRecipesPerPage(1)) - .frontend(EyeOfHarmonyFrontend::new) - .build(); - public static final RecipeMap researchStationFakeRecipes = RecipeMapBuilder - .of("gt.recipe.researchStation") - .maxIO(1, 1, 0, 0) - .useSpecialSlot() - .slotOverlays((index, isFluid, isOutput, isSpecial) -> { - if (isSpecial) { - return GT_UITextures.OVERLAY_SLOT_DATA_ORB; - } - if (isOutput) { - return TecTechUITextures.OVERLAY_SLOT_MESH; - } - return GT_UITextures.OVERLAY_SLOT_MICROSCOPE; - }) - .addSpecialTexture(19, 12, 84, 60, TecTechUITextures.PICTURE_HEAT_SINK) - .addSpecialTexture(41, 22, 40, 40, TecTechUITextures.PICTURE_RACK_LARGE) - .logo(TecTechUITextures.PICTURE_TECTECH_LOGO) - .logoSize(18, 18) - .logoPos(151, 63) - .neiTransferRect(81, 33, 25, 18) - .neiTransferRect(124, 33, 18, 29) - .frontend(ResearchStationFrontend::new) - .neiHandlerInfo(builder -> builder.setDisplayStack(CustomItemList.Machine_Multi_Research.get(1))) - .build(); - - public static final RecipeMap godforgePlasmaRecipes = RecipeMapBuilder.of("gt.recipe.fog_plasma") - .maxIO(1, 1, 1, 1) - .progressBar(TecTechUITextures.PROGRESSBAR_GODFORGE_PLASMA, ProgressBar.Direction.RIGHT) - .progressBarPos(78, 33) - .neiTransferRect(78, 33, 20, 20) - .frontend(GodforgePlasmaFrontend::new) - .build(); - public static final RecipeMap godforgeExoticMatterRecipes = RecipeMapBuilder - .of("gt.recipe.fog_exotic") - .maxIO(1, 1, 2, 1) - .progressBar(TecTechUITextures.PROGRESSBAR_GODFORGE_PLASMA, ProgressBar.Direction.RIGHT) - .progressBarPos(78, 33) - .neiTransferRect(78, 33, 20, 20) - .frontend(GodforgeExoticFrontend::new) - .build(); - -} diff --git a/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_ItemRenderer.java b/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_ItemRenderer.java deleted file mode 100644 index b5d75fdc71..0000000000 --- a/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_ItemRenderer.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.github.technus.tectech.rendering.EOH; - -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_0; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_1; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_2; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.starModel; -import static java.lang.Math.pow; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.FMLClientHandler; - -public class EOH_ItemRenderer implements IItemRenderer { - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - return true; - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return true; - } - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - GL11.glPushMatrix(); - - if (type == ItemRenderType.INVENTORY) GL11.glRotated(180, 0, 1, 0); - else if (type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON) { - GL11.glTranslated(0.5, 0.5, 0.5); - if (type == ItemRenderType.EQUIPPED) GL11.glRotated(90, 0, 1, 0); - } - - // Render star stuff. - renderStarLayer(0, STAR_LAYER_0, 1.0f); - renderStarLayer(1, STAR_LAYER_1, 0.4f); - renderStarLayer(2, STAR_LAYER_2, 0.2f); - - GL11.glPopMatrix(); - } - - private void renderStarLayer(int layer, ResourceLocation texture, float alpha) { - - // Begin animation. - GL11.glPushMatrix(); - - // OpenGL settings, not sure exactly what these do. - - // Disables lighting, so star is always lit (I think). - GL11.glDisable(GL11.GL_LIGHTING); - // Culls things out of line of sight? - GL11.glEnable(GL11.GL_CULL_FACE); - // Merges colours of the various layers of the star? - GL11.glEnable(GL11.GL_BLEND); - // ??? - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - - // Bind animation to layer of star. - FMLClientHandler.instance() - .getClient() - .getTextureManager() - .bindTexture(texture); - - // 0.01f magic number to shrink sphere obj down. - // Size obtained from the multis current recipe. - float scale = 0.01f; - - // Put each subsequent layer further out. - scale *= pow(1.04f, layer); - - // Scale the star up in the x, y and z directions. - GL11.glScalef(scale, scale, scale); - - switch (layer) { - case 0 -> GL11.glRotatef(130 + (System.currentTimeMillis() / 64) % 360, 0F, 1F, 1F); - case 1 -> GL11.glRotatef(-49 + (System.currentTimeMillis() / 64) % 360, 1F, 1F, 0F); - case 2 -> GL11.glRotatef(67 + (System.currentTimeMillis() / 64) % 360, 1F, 0F, 1F); - } - - // Set colour and alpha (transparency) of the star layer. - GL11.glColor4f(1, 1, 1, alpha); - - starModel.renderAll(); - GL11.glDisable(GL11.GL_BLEND); - GL11.glDepthMask(true); - GL11.glEnable(GL11.GL_LIGHTING); - - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - // Finish animation. - GL11.glPopMatrix(); - } - -} diff --git a/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_RenderingUtils.java b/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_RenderingUtils.java deleted file mode 100644 index 582b695eb2..0000000000 --- a/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_RenderingUtils.java +++ /dev/null @@ -1,270 +0,0 @@ -package com.github.technus.tectech.rendering.EOH; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_0; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_1; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_2; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.spaceModel; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.starModel; -import static java.lang.Math.pow; - -import java.awt.Color; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.FMLClientHandler; - -public abstract class EOH_RenderingUtils { - - public static void renderStar(IItemRenderer.ItemRenderType type, Color color, int size) { - GL11.glPushMatrix(); - - if (type == IItemRenderer.ItemRenderType.INVENTORY) GL11.glRotated(180, 0, 1, 0); - else if (type == IItemRenderer.ItemRenderType.EQUIPPED - || type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) { - GL11.glTranslated(0.5, 0.5, 0.5); - if (type == IItemRenderer.ItemRenderType.EQUIPPED) GL11.glRotated(90, 0, 1, 0); - } - - // Render star stuff. - renderStarLayer(0, STAR_LAYER_0, color, 1.0f, size); - renderStarLayer(1, STAR_LAYER_1, color, 0.4f, size); - renderStarLayer(2, STAR_LAYER_2, color, 0.2f, size); - - GL11.glPopMatrix(); - } - - public static void renderStar(IItemRenderer.ItemRenderType type, int size) { - renderStar(type, new Color(1.0f, 0.4f, 0.05f, 1.0f), size); - } - - public static void renderStarLayer(int layer, ResourceLocation texture, Color color, float alpha, int size) { - - // Begin animation. - GL11.glPushMatrix(); - - // OpenGL settings, not sure exactly what these do. - - // Disables lighting, so star is always lit (I think). - GL11.glDisable(GL11.GL_LIGHTING); - // Culls triangles/quads facing away from the camera - GL11.glEnable(GL11.GL_CULL_FACE); - // Allows alpha blending to occur (transparency-based color mixing) - GL11.glEnable(GL11.GL_BLEND); - // ??? - if (alpha < 1.0f) { - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); - } else { - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - } - - // Bind image to layer of star. - FMLClientHandler.instance() - .getClient() - .getTextureManager() - .bindTexture(texture); - - // 0.01f magic number to shrink sphere obj down. - // Size obtained from the multis current recipe. - float scale = 0.01f * size; - - // Put each subsequent layer further out. - scale *= pow(1.04f, layer); - - // Scale the star up in the x, y and z directions. - GL11.glScalef(scale, scale, scale); - - switch (layer) { - case 0 -> GL11.glRotatef(130 + (System.currentTimeMillis() / 64) % 360, 0F, 1F, 1F); - case 1 -> GL11.glRotatef(-49 + (System.currentTimeMillis() / 64) % 360, 1F, 1F, 0F); - case 2 -> GL11.glRotatef(67 + (System.currentTimeMillis() / 64) % 360, 1F, 0F, 1F); - } - - // Set colour and alpha (transparency) of the star layer. - final float red = color.getRed() / 255.0f; - final float green = color.getGreen() / 255.0f; - final float blue = color.getBlue() / 255.0f; - - GL11.glColor4f(red, green, blue, alpha); - - starModel.renderAll(); - GL11.glDisable(GL11.GL_BLEND); - GL11.glDepthMask(true); - GL11.glEnable(GL11.GL_LIGHTING); - - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - // Finish animation. - GL11.glPopMatrix(); - } - - public static void beginRenderingBlocksInWorld(final float blockSize) { - final Tessellator tes = Tessellator.instance; - - GL11.glPushMatrix(); - GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); - - GL11.glDisable(GL11.GL_LIGHTING); - - tes.setColorOpaque_F(1f, 1f, 1f); - tes.startDrawingQuads(); - - GL11.glScalef(blockSize, blockSize, blockSize); - } - - public static void endRenderingBlocksInWorld() { - Tessellator.instance.draw(); - - GL11.glPopAttrib(); - GL11.glPopMatrix(); - } - - static final double[] BLOCK_X = { -0.5, -0.5, +0.5, +0.5, +0.5, +0.5, -0.5, -0.5 }; - static final double[] BLOCK_Y = { +0.5, -0.5, -0.5, +0.5, +0.5, -0.5, -0.5, +0.5 }; - static final double[] BLOCK_Z = { +0.5, +0.5, +0.5, +0.5, -0.5, -0.5, -0.5, -0.5 }; - - public static void addRenderedBlockInWorld(final Block block, final int meta, final double x, final double y, - final double z) { - final Tessellator tes = Tessellator.instance; - - IIcon texture; - - double minU; - double maxU; - double minV; - double maxV; - - { - texture = block.getIcon(4, meta); - - minU = texture.getMinU(); - maxU = texture.getMaxU(); - minV = texture.getMinV(); - maxV = texture.getMaxV(); - - tes.addVertexWithUV(x + BLOCK_X[1], y + BLOCK_Y[1], z + BLOCK_Z[1], maxU, maxV); - tes.addVertexWithUV(x + BLOCK_X[0], y + BLOCK_Y[0], z + BLOCK_Z[0], maxU, minV); - tes.addVertexWithUV(x + BLOCK_X[7], y + BLOCK_Y[7], z + BLOCK_Z[7], minU, minV); - tes.addVertexWithUV(x + BLOCK_X[6], y + BLOCK_Y[6], z + BLOCK_Z[6], minU, maxV); - } - - { - // Bottom face. - texture = block.getIcon(0, meta); - - minU = texture.getMinU(); - maxU = texture.getMaxU(); - minV = texture.getMinV(); - maxV = texture.getMaxV(); - - tes.addVertexWithUV(x + BLOCK_X[5], y + BLOCK_Y[5], z + BLOCK_Z[5], maxU, minV); - tes.addVertexWithUV(x + BLOCK_X[2], y + BLOCK_Y[2], z + BLOCK_Z[2], maxU, maxV); - tes.addVertexWithUV(x + BLOCK_X[1], y + BLOCK_Y[1], z + BLOCK_Z[1], minU, maxV); - tes.addVertexWithUV(x + BLOCK_X[6], y + BLOCK_Y[6], z + BLOCK_Z[6], minU, minV); - } - - { - texture = block.getIcon(2, meta); - - minU = texture.getMinU(); - maxU = texture.getMaxU(); - minV = texture.getMinV(); - maxV = texture.getMaxV(); - - tes.addVertexWithUV(x + BLOCK_X[6], y + BLOCK_Y[6], z + BLOCK_Z[6], maxU, maxV); - tes.addVertexWithUV(x + BLOCK_X[7], y + BLOCK_Y[7], z + BLOCK_Z[7], maxU, minV); - tes.addVertexWithUV(x + BLOCK_X[4], y + BLOCK_Y[4], z + BLOCK_Z[4], minU, minV); - tes.addVertexWithUV(x + BLOCK_X[5], y + BLOCK_Y[5], z + BLOCK_Z[5], minU, maxV); - } - - { - texture = block.getIcon(5, meta); - - minU = texture.getMinU(); - maxU = texture.getMaxU(); - minV = texture.getMinV(); - maxV = texture.getMaxV(); - - tes.addVertexWithUV(x + BLOCK_X[5], y + BLOCK_Y[5], z + BLOCK_Z[5], maxU, maxV); - tes.addVertexWithUV(x + BLOCK_X[4], y + BLOCK_Y[4], z + BLOCK_Z[4], maxU, minV); - tes.addVertexWithUV(x + BLOCK_X[3], y + BLOCK_Y[3], z + BLOCK_Z[3], minU, minV); - tes.addVertexWithUV(x + BLOCK_X[2], y + BLOCK_Y[2], z + BLOCK_Z[2], minU, maxV); - } - - { - texture = block.getIcon(1, meta); - - minU = texture.getMinU(); - maxU = texture.getMaxU(); - minV = texture.getMinV(); - maxV = texture.getMaxV(); - - tes.addVertexWithUV(x + BLOCK_X[3], y + BLOCK_Y[3], z + BLOCK_Z[3], maxU, maxV); - tes.addVertexWithUV(x + BLOCK_X[4], y + BLOCK_Y[4], z + BLOCK_Z[4], maxU, minV); - tes.addVertexWithUV(x + BLOCK_X[7], y + BLOCK_Y[7], z + BLOCK_Z[7], minU, minV); - tes.addVertexWithUV(x + BLOCK_X[0], y + BLOCK_Y[0], z + BLOCK_Z[0], minU, maxV); - } - - { - texture = block.getIcon(3, meta); - - minU = texture.getMinU(); - maxU = texture.getMaxU(); - minV = texture.getMinV(); - maxV = texture.getMaxV(); - - tes.addVertexWithUV(x + BLOCK_X[2], y + BLOCK_Y[2], z + BLOCK_Z[2], maxU, maxV); - tes.addVertexWithUV(x + BLOCK_X[3], y + BLOCK_Y[3], z + BLOCK_Z[3], maxU, minV); - tes.addVertexWithUV(x + BLOCK_X[0], y + BLOCK_Y[0], z + BLOCK_Z[0], minU, minV); - tes.addVertexWithUV(x + BLOCK_X[1], y + BLOCK_Y[1], z + BLOCK_Z[1], minU, maxV); - } - } - - public static void renderBlockInWorld(final Block block, final int meta, final float blockSize) { - beginRenderingBlocksInWorld(blockSize); - - addRenderedBlockInWorld(block, meta, 0, 0, 0); - - endRenderingBlocksInWorld(); - } - - public static void renderOuterSpaceShell() { - - // Save current OpenGL state. - GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); - - // Begin animation. - GL11.glPushMatrix(); - - // Disables lighting, so star is always lit. - GL11.glDisable(GL11.GL_LIGHTING); - // Merges colors of the various layers of the star. - // GL11.glEnable(GL11.GL_BLEND); - - // Bind animation to layer of star. - FMLClientHandler.instance() - .getClient() - .getTextureManager() - .bindTexture(new ResourceLocation(MODID, "models/spaceLayer.png")); - - final float scale = 0.01f * 17.5f; - // Scale the star up in the x, y and z directions. - GL11.glScalef(scale, scale, scale); - - GL11.glColor4f(1, 1, 1, 1); - - spaceModel.renderAll(); - - // Finish animation. - GL11.glPopMatrix(); - - // Restore previous OpenGL state. - GL11.glPopAttrib(); - } - -} diff --git a/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_TESR.java b/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_TESR.java deleted file mode 100644 index e4b7c50c93..0000000000 --- a/src/main/java/com/github/technus/tectech/rendering/EOH/EOH_TESR.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.github.technus.tectech.rendering.EOH; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.rendering.EOH.EOH_RenderingUtils.renderBlockInWorld; -import static com.github.technus.tectech.rendering.EOH.EOH_RenderingUtils.renderOuterSpaceShell; -import static com.github.technus.tectech.rendering.EOH.EOH_RenderingUtils.renderStar; - -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.client.model.AdvancedModelLoader; -import net.minecraftforge.client.model.IModelCustom; - -import org.lwjgl.opengl.GL11; - -import com.github.technus.tectech.thing.block.TileEyeOfHarmony; - -public class EOH_TESR extends TileEntitySpecialRenderer { - - public static final ResourceLocation STAR_LAYER_0 = new ResourceLocation(MODID, "models/StarLayer0.png"); - public static final ResourceLocation STAR_LAYER_1 = new ResourceLocation(MODID, "models/StarLayer1.png"); - public static final ResourceLocation STAR_LAYER_2 = new ResourceLocation(MODID, "models/StarLayer2.png"); - public static IModelCustom starModel; - public static IModelCustom spaceModel; - - public EOH_TESR() { - starModel = AdvancedModelLoader.loadModel(new ResourceLocation(MODID, "models/Star.obj")); - spaceModel = AdvancedModelLoader.loadModel(new ResourceLocation(MODID, "models/Space.obj")); - } - - @Override - public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { - if (!(tile instanceof TileEyeOfHarmony EOHRenderTile)) return; - - GL11.glPushMatrix(); - // Required to centre the render to the middle of the block. - GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - - GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_BLEND); - - // Space shell. - renderOuterSpaceShell(); - - // Render the planets. - renderOrbitObjects(EOHRenderTile); - - // Render the star itself. - renderStar(IItemRenderer.ItemRenderType.INVENTORY, 1); - GL11.glPopAttrib(); - - GL11.glPopMatrix(); - } - - private void renderOrbitObjects(final TileEyeOfHarmony EOHRenderTile) { - - if (EOHRenderTile.getOrbitingObjects() != null) { - - if (EOHRenderTile.getOrbitingObjects() - .size() == 0) { - EOHRenderTile.generateImportantInfo(); - } - - for (TileEyeOfHarmony.OrbitingObject t : EOHRenderTile.getOrbitingObjects()) { - renderOrbit(EOHRenderTile, t); - } - } - } - - void renderOrbit(final TileEyeOfHarmony EOHRenderTile, final TileEyeOfHarmony.OrbitingObject orbitingObject) { - // Render orbiting body. - GL11.glPushMatrix(); - - GL11.glRotatef(orbitingObject.zAngle, 0, 0, 1); - GL11.glRotatef(orbitingObject.xAngle, 1, 0, 0); - GL11.glRotatef((orbitingObject.rotationSpeed * 0.1f * EOHRenderTile.angle) % 360.0f, 0F, 1F, 0F); - GL11.glTranslated(-0.2 - orbitingObject.distance - STAR_RESCALE * EOHRenderTile.getSize(), 0, 0); - GL11.glRotatef((orbitingObject.orbitSpeed * 0.1f * EOHRenderTile.angle) % 360.0f, 0F, 1F, 0F); - - this.bindTexture(TextureMap.locationBlocksTexture); - renderBlockInWorld(orbitingObject.block, 0, orbitingObject.scale); - - GL11.glPopMatrix(); - } - - private static final float STAR_RESCALE = 0.2f; - -} diff --git a/src/main/java/com/github/technus/tectech/thing/CustomItemList.java b/src/main/java/com/github/technus/tectech/thing/CustomItemList.java deleted file mode 100644 index 58285080cc..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/CustomItemList.java +++ /dev/null @@ -1,629 +0,0 @@ -package com.github.technus.tectech.thing; - -import static gregtech.api.enums.GT_Values.W; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import gregtech.api.interfaces.IItemContainer; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public enum CustomItemList implements IItemContainer { - - Casing_UEV, - Casing_UIV, - Casing_UMV, - Casing_UXV, - Casing_MAXV, - Hull_UEV, - Hull_UIV, - Hull_UMV, - Hull_UXV, - Hull_MAXV, - Transformer_UEV_UHV, - Transformer_UIV_UEV, - Transformer_UMV_UIV, - Transformer_UXV_UMV, - Transformer_MAXV_UXV, - WetTransformer_LV_ULV, - WetTransformer_MV_LV, - WetTransformer_HV_MV, - WetTransformer_EV_HV, - WetTransformer_IV_EV, - WetTransformer_LuV_IV, - WetTransformer_ZPM_LuV, - WetTransformer_UV_ZPM, - WetTransformer_UHV_UV, - WetTransformer_UEV_UHV, - WetTransformer_UIV_UEV, - WetTransformer_UMV_UIV, - WetTransformer_UXV_UMV, - WetTransformer_MAXV_UXV, - - Transformer_HA_UEV_UHV, - Transformer_HA_UIV_UEV, - Transformer_HA_UMV_UIV, - Transformer_HA_UXV_UMV, - Transformer_HA_MAXV_UXV, - - hatch_CreativeMaintenance, - hatch_CreativeData, - hatch_CreativeUncertainty, - Machine_OwnerDetector, - Machine_BuckConverter_IV, - Machine_BuckConverter_LuV, - Machine_BuckConverter_ZPM, - Machine_BuckConverter_UV, - Machine_BuckConverter_UHV, - Machine_BuckConverter_UEV, - Machine_BuckConverter_UIV, - Machine_BuckConverter_UMV, - Machine_BuckConverter_UXV, - Machine_DebugWriter, - Machine_DebugGenny, - UnusedStuff, - Machine_DebugPollutor, - DATApipe, - LASERpipe, - rack_Hatch, - holder_Hatch, - capacitor_Hatch, - - eM_dynamoMulti4_EV, - eM_dynamoMulti16_EV, - eM_dynamoMulti64_EV, - eM_dynamoMulti4_IV, - eM_dynamoMulti16_IV, - eM_dynamoMulti64_IV, - eM_dynamoMulti4_LuV, - eM_dynamoMulti16_LuV, - eM_dynamoMulti64_LuV, - eM_dynamoMulti4_ZPM, - eM_dynamoMulti16_ZPM, - eM_dynamoMulti64_ZPM, - eM_dynamoMulti4_UV, - eM_dynamoMulti16_UV, - eM_dynamoMulti64_UV, - eM_dynamoMulti4_UHV, - eM_dynamoMulti16_UHV, - eM_dynamoMulti64_UHV, - eM_dynamoMulti4_UEV, - eM_dynamoMulti16_UEV, - eM_dynamoMulti64_UEV, - eM_dynamoMulti4_UIV, - eM_dynamoMulti16_UIV, - eM_dynamoMulti64_UIV, - eM_dynamoMulti4_UMV, - eM_dynamoMulti16_UMV, - eM_dynamoMulti64_UMV, - eM_dynamoMulti4_UXV, - eM_dynamoMulti16_UXV, - eM_dynamoMulti64_UXV, - eM_dynamoTunnel1_IV, - eM_dynamoTunnel2_IV, - eM_dynamoTunnel3_IV, - eM_dynamoTunnel4_IV, - eM_dynamoTunnel5_IV, - eM_dynamoTunnel6_IV, - eM_dynamoTunnel7_IV, - eM_dynamoTunnel1_LuV, - eM_dynamoTunnel2_LuV, - eM_dynamoTunnel3_LuV, - eM_dynamoTunnel4_LuV, - eM_dynamoTunnel5_LuV, - eM_dynamoTunnel6_LuV, - eM_dynamoTunnel7_LuV, - eM_dynamoTunnel1_ZPM, - eM_dynamoTunnel2_ZPM, - eM_dynamoTunnel3_ZPM, - eM_dynamoTunnel4_ZPM, - eM_dynamoTunnel5_ZPM, - eM_dynamoTunnel6_ZPM, - eM_dynamoTunnel7_ZPM, - eM_dynamoTunnel1_UV, - eM_dynamoTunnel2_UV, - eM_dynamoTunnel3_UV, - eM_dynamoTunnel4_UV, - eM_dynamoTunnel5_UV, - eM_dynamoTunnel6_UV, - eM_dynamoTunnel7_UV, - eM_dynamoTunnel1_UHV, - eM_dynamoTunnel2_UHV, - eM_dynamoTunnel3_UHV, - eM_dynamoTunnel4_UHV, - eM_dynamoTunnel5_UHV, - eM_dynamoTunnel6_UHV, - eM_dynamoTunnel7_UHV, - eM_dynamoTunnel1_UEV, - eM_dynamoTunnel2_UEV, - eM_dynamoTunnel3_UEV, - eM_dynamoTunnel4_UEV, - eM_dynamoTunnel5_UEV, - eM_dynamoTunnel6_UEV, - eM_dynamoTunnel7_UEV, - eM_dynamoTunnel1_UIV, - eM_dynamoTunnel2_UIV, - eM_dynamoTunnel3_UIV, - eM_dynamoTunnel4_UIV, - eM_dynamoTunnel5_UIV, - eM_dynamoTunnel6_UIV, - eM_dynamoTunnel7_UIV, - eM_dynamoTunnel1_UMV, - eM_dynamoTunnel2_UMV, - eM_dynamoTunnel3_UMV, - eM_dynamoTunnel4_UMV, - eM_dynamoTunnel5_UMV, - eM_dynamoTunnel6_UMV, - eM_dynamoTunnel7_UMV, - eM_dynamoTunnel8_UMV, - eM_dynamoTunnel1_UXV, - eM_dynamoTunnel2_UXV, - eM_dynamoTunnel3_UXV, - eM_dynamoTunnel4_UXV, - eM_dynamoTunnel5_UXV, - eM_dynamoTunnel6_UXV, - eM_dynamoTunnel7_UXV, - eM_dynamoTunnel8_UXV, - eM_dynamoTunnel9_UXV, - eM_dynamoTunnel9001, - - eM_energyMulti4_EV, - eM_energyMulti16_EV, - eM_energyMulti64_EV, - eM_energyMulti4_IV, - eM_energyMulti16_IV, - eM_energyMulti64_IV, - eM_energyMulti4_LuV, - eM_energyMulti16_LuV, - eM_energyMulti64_LuV, - eM_energyMulti4_ZPM, - eM_energyMulti16_ZPM, - eM_energyMulti64_ZPM, - eM_energyMulti4_UV, - eM_energyMulti16_UV, - eM_energyMulti64_UV, - eM_energyMulti4_UHV, - eM_energyMulti16_UHV, - eM_energyMulti64_UHV, - eM_energyMulti4_UEV, - eM_energyMulti16_UEV, - eM_energyMulti64_UEV, - eM_energyMulti4_UIV, - eM_energyMulti16_UIV, - eM_energyMulti64_UIV, - eM_energyMulti4_UMV, - eM_energyMulti16_UMV, - eM_energyMulti64_UMV, - eM_energyMulti4_UXV, - eM_energyMulti16_UXV, - eM_energyMulti64_UXV, - eM_energyWirelessMulti4_EV, - eM_energyWirelessMulti16_EV, - eM_energyWirelessMulti64_EV, - eM_energyWirelessMulti4_IV, - eM_energyWirelessMulti16_IV, - eM_energyWirelessMulti64_IV, - eM_energyWirelessMulti4_LuV, - eM_energyWirelessMulti16_LuV, - eM_energyWirelessMulti64_LuV, - eM_energyWirelessMulti4_ZPM, - eM_energyWirelessMulti16_ZPM, - eM_energyWirelessMulti64_ZPM, - eM_energyWirelessMulti4_UV, - eM_energyWirelessMulti16_UV, - eM_energyWirelessMulti64_UV, - eM_energyWirelessMulti4_UHV, - eM_energyWirelessMulti16_UHV, - eM_energyWirelessMulti64_UHV, - eM_energyWirelessMulti4_UEV, - eM_energyWirelessMulti16_UEV, - eM_energyWirelessMulti64_UEV, - eM_energyWirelessMulti4_UIV, - eM_energyWirelessMulti16_UIV, - eM_energyWirelessMulti64_UIV, - eM_energyWirelessMulti4_UMV, - eM_energyWirelessMulti16_UMV, - eM_energyWirelessMulti64_UMV, - eM_energyWirelessMulti4_UXV, - eM_energyWirelessMulti16_UXV, - eM_energyWirelessMulti64_UXV, - eM_energyWirelessMulti4_MAX, - eM_energyWirelessMulti16_MAX, - eM_energyWirelessMulti64_MAX, - eM_energyTunnel1_IV, - eM_energyTunnel2_IV, - eM_energyTunnel3_IV, - eM_energyTunnel4_IV, - eM_energyTunnel5_IV, - eM_energyTunnel6_IV, - eM_energyTunnel7_IV, - eM_energyTunnel1_LuV, - eM_energyTunnel2_LuV, - eM_energyTunnel3_LuV, - eM_energyTunnel4_LuV, - eM_energyTunnel5_LuV, - eM_energyTunnel6_LuV, - eM_energyTunnel7_LuV, - eM_energyTunnel1_ZPM, - eM_energyTunnel2_ZPM, - eM_energyTunnel3_ZPM, - eM_energyTunnel4_ZPM, - eM_energyTunnel5_ZPM, - eM_energyTunnel6_ZPM, - eM_energyTunnel7_ZPM, - eM_energyTunnel1_UV, - eM_energyTunnel2_UV, - eM_energyTunnel3_UV, - eM_energyTunnel4_UV, - eM_energyTunnel5_UV, - eM_energyTunnel6_UV, - eM_energyTunnel7_UV, - eM_energyTunnel1_UHV, - eM_energyTunnel2_UHV, - eM_energyTunnel3_UHV, - eM_energyTunnel4_UHV, - eM_energyTunnel5_UHV, - eM_energyTunnel6_UHV, - eM_energyTunnel7_UHV, - eM_energyTunnel1_UEV, - eM_energyTunnel2_UEV, - eM_energyTunnel3_UEV, - eM_energyTunnel4_UEV, - eM_energyTunnel5_UEV, - eM_energyTunnel6_UEV, - eM_energyTunnel7_UEV, - eM_energyTunnel1_UIV, - eM_energyTunnel2_UIV, - eM_energyTunnel3_UIV, - eM_energyTunnel4_UIV, - eM_energyTunnel5_UIV, - eM_energyTunnel6_UIV, - eM_energyTunnel7_UIV, - eM_energyTunnel1_UMV, - eM_energyTunnel2_UMV, - eM_energyTunnel3_UMV, - eM_energyTunnel4_UMV, - eM_energyTunnel5_UMV, - eM_energyTunnel6_UMV, - eM_energyTunnel7_UMV, - eM_energyTunnel8_UMV, - eM_energyTunnel1_UXV, - eM_energyTunnel2_UXV, - eM_energyTunnel3_UXV, - eM_energyTunnel4_UXV, - eM_energyTunnel5_UXV, - eM_energyTunnel6_UXV, - eM_energyTunnel7_UXV, - eM_energyTunnel8_UXV, - eM_energyTunnel9_UXV, - eM_energyTunnel9001, - eM_energyWirelessTunnel1_UXV, - eM_energyWirelessTunnel2_UXV, - eM_energyWirelessTunnel3_UXV, - eM_energyWirelessTunnel4_UXV, - eM_energyWirelessTunnel5_UXV, - eM_energyWirelessTunnel6_UXV, - eM_energyWirelessTunnel7_UXV, - eM_energyWirelessTunnel8_UXV, - eM_energyWirelessTunnel9_UXV, - - Parametrizer_Hatch, - ParametrizerX_Hatch, - ParametrizerTXT_Hatch, - Uncertainty_Hatch, - UncertaintyX_Hatch, - dataIn_Hatch, - dataOut_Hatch, - dataOut_Wireless_Hatch, - dataIn_Wireless_Hatch, - dataInAss_Wireless_Hatch, - dataOutAss_Wireless_Hatch, - dataInAss_Hatch, - dataOutAss_Hatch, - eM_Containment, - eM_Containment_Field, - eM_Containment_Advanced, - eM_Coil, - eM_Teleportation, - eM_Dimensional, - eM_Ultimate_Containment, - eM_Ultimate_Containment_Advanced, - eM_Ultimate_Containment_Field, - eM_Spacetime, - eM_Computer_Casing, - eM_Computer_Bus, - eM_Computer_Vent, - eM_Hollow, - eM_Power, - debugBlock, - - tM_TeslaBase, - tM_TeslaToroid, - EOH_Reinforced_Temporal_Casing, - EOH_Reinforced_Spatial_Casing, - EOH_Infinite_Energy_Casing, - tM_TeslaSecondary, - tM_TeslaPrimary_0, - tM_TeslaPrimary_1, - tM_TeslaPrimary_2, - tM_TeslaPrimary_3, - tM_TeslaPrimary_4, - tM_TeslaPrimary_5, - tM_TeslaPrimary_6, - - Machine_Multi_Microwave, - Machine_Multi_TeslaCoil, - Machine_Multi_Transformer, - Machine_Multi_Computer, - Machine_Multi_Switch, - Machine_Multi_Research, - Machine_Multi_DataBank, - Machine_Multi_Infuser, - Machine_Multi_Decay, - Machine_Multi_Annihilation, - Machine_Multi_EyeOfHarmony, - Machine_Multi_ForgeOfGods, - Machine_Multi_SmeltingModule, - Machine_Multi_MoltenModule, - Machine_Multi_PlasmaModule, - Machine_Multi_QuarkGluonPlasmaModule, - - hint_0, - hint_1, - hint_2, - hint_3, - hint_4, - hint_5, - hint_6, - hint_7, - hint_8, - hint_9, - hint_10, - hint_11, - hint_general, - hint_air, - hint_noAir, - hint_error, - - scanContainer, - parametrizerMemory, - teslaCapacitor, - teslaCover, - teslaComponent, - teslaStaff, - enderLinkFluidCover, - powerPassUpgradeCover, - - Machine_TeslaCoil_1by1_LV, - Machine_TeslaCoil_1by1_MV, - Machine_TeslaCoil_1by1_HV, - Machine_TeslaCoil_1by1_EV, - Machine_TeslaCoil_1by1_IV, - Machine_TeslaCoil_2by2_LV, - Machine_TeslaCoil_2by2_MV, - Machine_TeslaCoil_2by2_HV, - Machine_TeslaCoil_2by2_EV, - Machine_TeslaCoil_2by2_IV, - Machine_TeslaCoil_3by3_LV, - Machine_TeslaCoil_3by3_MV, - Machine_TeslaCoil_3by3_HV, - Machine_TeslaCoil_3by3_EV, - Machine_TeslaCoil_3by3_IV, - Machine_TeslaCoil_4by4_LV, - Machine_TeslaCoil_4by4_MV, - Machine_TeslaCoil_4by4_HV, - Machine_TeslaCoil_4by4_EV, - Machine_TeslaCoil_4by4_IV, - DATApipeBlock, - LASERpipeBlock, - LASERpipeSmart, - - SpacetimeCompressionFieldGeneratorTier0, - SpacetimeCompressionFieldGeneratorTier1, - SpacetimeCompressionFieldGeneratorTier2, - SpacetimeCompressionFieldGeneratorTier3, - SpacetimeCompressionFieldGeneratorTier4, - SpacetimeCompressionFieldGeneratorTier5, - SpacetimeCompressionFieldGeneratorTier6, - SpacetimeCompressionFieldGeneratorTier7, - SpacetimeCompressionFieldGeneratorTier8, - - TimeAccelerationFieldGeneratorTier0, - TimeAccelerationFieldGeneratorTier1, - TimeAccelerationFieldGeneratorTier2, - TimeAccelerationFieldGeneratorTier3, - TimeAccelerationFieldGeneratorTier4, - TimeAccelerationFieldGeneratorTier5, - TimeAccelerationFieldGeneratorTier6, - TimeAccelerationFieldGeneratorTier7, - TimeAccelerationFieldGeneratorTier8, - - StabilisationFieldGeneratorTier0, - StabilisationFieldGeneratorTier1, - StabilisationFieldGeneratorTier2, - StabilisationFieldGeneratorTier3, - StabilisationFieldGeneratorTier4, - StabilisationFieldGeneratorTier5, - StabilisationFieldGeneratorTier6, - StabilisationFieldGeneratorTier7, - StabilisationFieldGeneratorTier8, - - Godforge_GravitationalLens, - Godforge_SingularityShieldingCasing, - Godforge_GuidanceCasing, - Godforge_BoundlessStructureCasing, - Godforge_MagneticConfinementCasing, - Godforge_StellarEnergySiphonCasing, - Godforge_GravitonFlowModulatorTier1, - Godforge_GravitonFlowModulatorTier2, - Godforge_GravitonFlowModulatorTier3, - Godforge_HarmonicPhononTransmissionConduit, - - astralArrayFabricator; - - private ItemStack mStack; - private boolean mHasNotBeenSet = true; - - // public static Fluid sOilExtraHeavy, sOilHeavy, sOilMedium, sOilLight, sNaturalGas; - - @Override - public IItemContainer set(Item aItem) { - mHasNotBeenSet = false; - if (aItem == null) { - return this; - } - ItemStack aStack = new ItemStack(aItem, 1, 0); - mStack = GT_Utility.copyAmount(1, aStack); - return this; - } - - @Override - public IItemContainer set(ItemStack aStack) { - mHasNotBeenSet = false; - mStack = GT_Utility.copyAmount(1, aStack); - return this; - } - - @Override - public IItemContainer hidden() { - codechicken.nei.api.API.hideItem(get(1L)); - return this; - } - - @Override - public Item getItem() { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return null; - } - return mStack.getItem(); - } - - @Override - public Block getBlock() { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - return GT_Utility.getBlockFromStack(new ItemStack(getItem())); - } - - @Override - public final boolean hasBeenSet() { - return !mHasNotBeenSet; - } - - @Override - public boolean isStackEqual(Object aStack) { - return isStackEqual(aStack, false, false); - } - - @Override - public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT) { - if (GT_Utility.isStackInvalid(aStack)) { - return false; - } - return GT_Utility.areUnificationsEqual((ItemStack) aStack, aWildcard ? getWildcard(1) : get(1), aIgnoreNBT); - } - - @Override - public ItemStack get(long aAmount, Object... aReplacements) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); - } - return GT_Utility.copyAmount(aAmount, GT_OreDictUnificator.get(mStack)); - } - - @Override - public ItemStack getWildcard(long aAmount, Object... aReplacements) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); - } - return GT_Utility.copyAmountAndMetaData(aAmount, W, GT_OreDictUnificator.get(mStack)); - } - - @Override - public ItemStack getUndamaged(long aAmount, Object... aReplacements) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); - } - return GT_Utility.copyAmountAndMetaData(aAmount, 0, GT_OreDictUnificator.get(mStack)); - } - - @Override - public ItemStack getAlmostBroken(long aAmount, Object... aReplacements) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); - } - return GT_Utility.copyAmountAndMetaData(aAmount, mStack.getMaxDamage() - 1, GT_OreDictUnificator.get(mStack)); - } - - @Override - public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements) { - ItemStack rStack = get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) { - return null; - } - rStack.setStackDisplayName(aDisplayName); - return GT_Utility.copyAmount(aAmount, rStack); - } - - @Override - public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements) { - ItemStack rStack = get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) { - return null; - } - GT_ModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); - return GT_Utility.copyAmount(aAmount, rStack); - } - - @Override - public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); - } - return GT_Utility.copyAmountAndMetaData(aAmount, aMetaValue, GT_OreDictUnificator.get(mStack)); - } - - @Override - public IItemContainer registerOre(Object... aOreNames) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - for (Object tOreName : aOreNames) { - GT_OreDictUnificator.registerOre(tOreName, get(1)); - } - return this; - } - - @Override - public IItemContainer registerWildcardAsOre(Object... aOreNames) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - for (Object tOreName : aOreNames) { - GT_OreDictUnificator.registerOre(tOreName, getWildcard(1)); - } - return this; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/EOH_RenderBlock.java b/src/main/java/com/github/technus/tectech/thing/block/EOH_RenderBlock.java deleted file mode 100644 index 110dc83015..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/EOH_RenderBlock.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import com.github.technus.tectech.TecTech; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class EOH_RenderBlock extends Block { - - public EOH_RenderBlock() { - super(Material.iron); - this.setResistance(20f); - this.setHardness(-1.0f); - this.setCreativeTab(TecTech.creativeTabTecTech); - this.setBlockName("Eye of Harmony Renderer"); - this.setLightLevel(100.0f); - registerOther(this); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT"); - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean canRenderInPass(int a) { - return true; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public boolean hasTileEntity(int metadata) { - return true; - } - - @Override - public TileEntity createTileEntity(World world, int metadata) { - return new TileEyeOfHarmony(); - } - - public static void registerOther(Block block) { - String name = block.getUnlocalizedName() - .substring( - block.getUnlocalizedName() - .indexOf(".") + 1); - GameRegistry.registerBlock(block, name.substring(name.indexOf(":") + 1)); - } - - @Override - public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { - return new ArrayList<>(); - } - - @Override - public boolean isCollidable() { - return false; - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/ForgeOfGodsBlock.java b/src/main/java/com/github/technus/tectech/thing/block/ForgeOfGodsBlock.java deleted file mode 100644 index 38e4b4c5b6..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/ForgeOfGodsBlock.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import com.github.technus.tectech.TecTech; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class ForgeOfGodsBlock extends Block { - - public ForgeOfGodsBlock() { - super(Material.iron); - this.setResistance(20f); - this.setHardness(-1.0f); - this.setCreativeTab(TecTech.creativeTabTecTech); - this.setBlockName("Forge of the Gods Renderer"); - this.setLightLevel(100.0f); - if (TecTech.configTecTech.ENABLE_GOD_FORGE) { - registerOther(this); - } - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT"); - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean canRenderInPass(int a) { - return true; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public boolean hasTileEntity(int metadata) { - return true; - } - - @Override - public TileEntity createTileEntity(World world, int metadata) { - return new TileForgeOfGods(); - } - - public static void registerOther(Block block) { - GameRegistry.registerBlock(block, "ForgeOfGodsRenderBlock"); - } - - @Override - public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { - return new ArrayList<>(); - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassBlock.java b/src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassBlock.java deleted file mode 100644 index 0ac925926c..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassBlock.java +++ /dev/null @@ -1,107 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.TecTech.creativeTabTecTech; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import eu.usrv.yamcore.blocks.BlockBase; -import gregtech.api.GregTech_API; - -public class GodforgeGlassBlock extends BlockBase { - - public static IIcon Icon; - public static int renderID; - public static GodforgeGlassBlock INSTANCE; - - public GodforgeGlassBlock() { - super(Material.iron); - setBlockBounds(0, 0, 0, 1, 1, 1); - setBlockName("spatiallyTranscendentGravitationalLens"); - setHarvestLevel("wrench", 3); - setHardness(50); - setResistance(30); - setLightOpacity(0); - setStepSound(Block.soundTypeGlass); - setBlockTextureName(MODID + ":blockSpatiallyTranscendentGravitationalLens"); - setCreativeTab(creativeTabTecTech); - } - - @Override - public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) { - return true; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean getCanBlockGrass() { - return false; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 1; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) { - Block block = worldIn.getBlock(x, y, z); - return block != this; - } - - @Override - public int getRenderType() { - return renderID; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister reg) { - super.registerBlockIcons(reg); - Icon = blockIcon; - } - - public static void run() { - INSTANCE = new GodforgeGlassBlock(); - GameRegistry.registerBlock(INSTANCE, GodforgeGlassItem.class, INSTANCE.getUnlocalizedName()); - GregTech_API.registerMachineBlock(INSTANCE, -1); - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMeta) { - if (GregTech_API.isMachineBlock(this, aMeta)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassItem.java b/src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassItem.java deleted file mode 100644 index bd7d58a4da..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassItem.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import static com.github.technus.tectech.util.CommonValues.GODFORGE_MARK; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -public class GodforgeGlassItem extends ItemBlock { - - public static GodforgeGlassItem INSTANCE; - - public GodforgeGlassItem(Block block) { - super(block); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - aList.add(GODFORGE_MARK); - aList.add(translateToLocal("tile.godforgeGlass.desc.0")); - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("tile.godforgeGlass.desc.1")); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassRender.java b/src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassRender.java deleted file mode 100644 index 51c909c83d..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/GodforgeGlassRender.java +++ /dev/null @@ -1,122 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; - -public class GodforgeGlassRender implements ISimpleBlockRenderingHandler { - - @Override - public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - Tessellator tessellator = Tessellator.instance; - GL11.glPushMatrix(); - // Get icons from custom register (useful for renderers and fluids) - IIcon side = GodforgeGlassBlock.Icon; - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, -1.0F, 0.0F); - renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, 0.0F, -1.0F); - renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, 0.0F, 1.0F); - renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(-1.0F, 0.0F, 0.0F); - renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(1.0F, 0.0F, 0.0F); - renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, 1.0F, 0.0F); - renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - GL11.glTranslatef(0.5F, 0.5F, 0.5F); - GL11.glPopMatrix(); - } - - @Override - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, - RenderBlocks renderer) { - - renderer.renderStandardBlock(block, x, y, z); - Tessellator tes = Tessellator.instance; - tes.setNormal(0F, 1F, 0F); - tes.setBrightness(15728880); - tes.setColorOpaque_F(0F, 1F, 1F); - IIcon side = GodforgeGlassBlock.Icon; - - // South - if (world.getBlock(x, y, z + 1) - .getClass() != GodforgeGlassBlock.class) { - tes.addVertexWithUV(x, y, z + 0.999, side.getMinU(), side.getMaxV()); // 0.999 instead of 1 for fighting - // (textures overlapping) - tes.addVertexWithUV(x, y + 1, z + 0.999, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y + 1, z + 0.999, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y, z + 0.999, side.getMaxU(), side.getMaxV()); - } - // East - if (world.getBlock(x + 1, y, z) - .getClass() != GodforgeGlassBlock.class) { - tes.addVertexWithUV(x + 0.999, y, z + 1, side.getMinU(), side.getMaxV()); - tes.addVertexWithUV(x + 0.999, y + 1, z + 1, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x + 0.999, y + 1, z, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x + 0.999, y, z, side.getMaxU(), side.getMaxV()); - } - // North - if (world.getBlock(x, y, z - 1) - .getClass() != GodforgeGlassBlock.class) { - tes.addVertexWithUV(x + 1, y, z + 0.001, side.getMinU(), side.getMaxV()); - tes.addVertexWithUV(x + 1, y + 1, z + 0.001, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x, y + 1, z + 0.001, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x, y, z + 0.001, side.getMaxU(), side.getMaxV()); - } - // West - if (world.getBlock(x - 1, y, z) - .getClass() != GodforgeGlassBlock.class) { - tes.addVertexWithUV(x + 0.001, y, z, side.getMinU(), side.getMaxV()); - tes.addVertexWithUV(x + 0.001, y + 1, z, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x + 0.001, y + 1, z + 1, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x + 0.001, y, z + 1, side.getMaxU(), side.getMaxV()); - } - // Top - if (world.getBlock(x, y + 1, z) - .getClass() != GodforgeGlassBlock.class) { - tes.addVertexWithUV(x, y + 0.999, z + 1, side.getMinU(), side.getMaxV()); - tes.addVertexWithUV(x, y + 0.999, z, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y + 0.999, z, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y + 0.999, z + 1, side.getMaxU(), side.getMaxV()); - } - // Bottom - if (world.getBlock(x, y - 1, z) - .getClass() != GodforgeGlassBlock.class) { - tes.addVertexWithUV(x, y + 0.001, z, side.getMinU(), side.getMaxV()); - tes.addVertexWithUV(x, y + 0.001, z + 1, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y + 0.001, z + 1, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y + 0.001, z, side.getMaxU(), side.getMaxV()); - } - return true; - } - - @Override - public boolean shouldRender3DInInventory(int modelId) { - return true; - } - - @Override - public int getRenderId() { - return GodforgeGlassBlock.renderID; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassBlock.java b/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassBlock.java deleted file mode 100644 index 6c22595b53..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassBlock.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.TecTech.creativeTabTecTech; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import eu.usrv.yamcore.blocks.BlockBase; -import gregtech.api.GregTech_API; - -/** - * Created by danie_000 on 17.12.2016. - */ -public final class QuantumGlassBlock extends BlockBase { - - public static IIcon stuff; - public static int renderID; - public static QuantumGlassBlock INSTANCE; - - public QuantumGlassBlock() { - super(Material.iron); - setBlockBounds(0, 0, 0, 1, 1, 1); - setBlockName("quantumGlass"); - setHarvestLevel("wrench", 3); - setHardness(50); - setResistance(30); - setLightOpacity(0); - setStepSound(Block.soundTypeMetal); - setBlockTextureName(MODID + ":blockQuantumGlass"); - setCreativeTab(creativeTabTecTech); - } - - @Override - public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) { - return true; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean getCanBlockGrass() { - return false; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 1; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) { - Block block = worldIn.getBlock(x, y, z); - return block != this; // && super.shouldSideBeRendered(worldIn, x, y, z, - // side); - } - - @Override - public int getRenderType() { - return renderID; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister reg) { - super.registerBlockIcons(reg); - stuff = blockIcon; - } - - public static void run() { - INSTANCE = new QuantumGlassBlock(); - GameRegistry.registerBlock(INSTANCE, QuantumGlassItem.class, INSTANCE.getUnlocalizedName()); - GregTech_API.registerMachineBlock(INSTANCE, -1); - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMeta) { - if (GregTech_API.isMachineBlock(this, aMeta)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassItem.java b/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassItem.java deleted file mode 100644 index 43c41735b8..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassItem.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import static com.github.technus.tectech.util.CommonValues.TEC_MARK_EM; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -/** - * Created by Tec on 11.04.2017. - */ -public class QuantumGlassItem extends ItemBlock { - - public static QuantumGlassItem INSTANCE; - - public QuantumGlassItem(Block block) { - super(block); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - aList.add(TEC_MARK_EM); - aList.add(translateToLocal("tile.quantumGlass.desc.0")); // Dense yet transparent - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("tile.quantumGlass.desc.1")); // Glassy & Classy - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassRender.java b/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassRender.java deleted file mode 100644 index f45e54f4ec..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/QuantumGlassRender.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; - -/** - * Created by danie_000 on 19.12.2016. - */ -public final class QuantumGlassRender implements ISimpleBlockRenderingHandler { - - @Override - public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - Tessellator tessellator = Tessellator.instance; - GL11.glPushMatrix(); - // Get icons from custom register (useful for renderers and fluids) - IIcon side = QuantumGlassBlock.stuff; - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, -1.0F, 0.0F); - renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, 0.0F, -1.0F); - renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, 0.0F, 1.0F); - renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(-1.0F, 0.0F, 0.0F); - renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(1.0F, 0.0F, 0.0F); - renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, 1.0F, 0.0F); - renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, side); - tessellator.draw(); - GL11.glTranslatef(0.5F, 0.5F, 0.5F); - GL11.glPopMatrix(); - } - - @Override - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, - RenderBlocks renderer) { - - renderer.renderStandardBlock(block, x, y, z); - Tessellator tes = Tessellator.instance; - GL11.glPushMatrix(); - tes.setNormal(0F, 1F, 0F); - tes.setBrightness(15728880); - tes.setColorOpaque_F(0F, 1F, 1F); - IIcon side = QuantumGlassBlock.stuff; - GL11.glDisable(GL11.GL_CULL_FACE); - - // South - if (world.getBlock(x, y, z + 1) - .getClass() != QuantumGlassBlock.class) { - tes.addVertexWithUV(x, y, z + 0.999, side.getMinU(), side.getMaxV()); // 0.999 instead of 1 for fighting - // (textures overlapping) - tes.addVertexWithUV(x, y + 1, z + 0.999, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y + 1, z + 0.999, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y, z + 0.999, side.getMaxU(), side.getMaxV()); - } - // East - if (world.getBlock(x + 1, y, z) - .getClass() != QuantumGlassBlock.class) { - tes.addVertexWithUV(x + 0.999, y, z + 1, side.getMinU(), side.getMaxV()); - tes.addVertexWithUV(x + 0.999, y + 1, z + 1, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x + 0.999, y + 1, z, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x + 0.999, y, z, side.getMaxU(), side.getMaxV()); - } - // North - if (world.getBlock(x, y, z - 1) - .getClass() != QuantumGlassBlock.class) { - tes.addVertexWithUV(x + 1, y, z + 0.001, side.getMinU(), side.getMaxV()); - tes.addVertexWithUV(x + 1, y + 1, z + 0.001, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x, y + 1, z + 0.001, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x, y, z + 0.001, side.getMaxU(), side.getMaxV()); - } - // West - if (world.getBlock(x - 1, y, z) - .getClass() != QuantumGlassBlock.class) { - tes.addVertexWithUV(x + 0.001, y, z, side.getMinU(), side.getMaxV()); - tes.addVertexWithUV(x + 0.001, y + 1, z, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x + 0.001, y + 1, z + 1, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x + 0.001, y, z + 1, side.getMaxU(), side.getMaxV()); - } - // Top - if (world.getBlock(x, y + 1, z) - .getClass() != QuantumGlassBlock.class) { - tes.addVertexWithUV(x, y + 0.999, z + 1, side.getMinU(), side.getMaxV()); - tes.addVertexWithUV(x, y + 0.999, z, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y + 0.999, z, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y + 0.999, z + 1, side.getMaxU(), side.getMaxV()); - } - // Bottom - if (world.getBlock(x, y - 1, z) - .getClass() != QuantumGlassBlock.class) { - tes.addVertexWithUV(x, y + 0.001, z, side.getMinU(), side.getMaxV()); - tes.addVertexWithUV(x, y + 0.001, z + 1, side.getMinU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y + 0.001, z + 1, side.getMaxU(), side.getMinV()); - tes.addVertexWithUV(x + 1, y + 0.001, z, side.getMaxU(), side.getMaxV()); - } - GL11.glPopMatrix(); - GL11.glEnable(GL11.GL_CULL_FACE); - return true; - } - - @Override - public boolean shouldRender3DInInventory(int modelId) { - return true; - } - - @Override - public int getRenderId() { - return QuantumGlassBlock.renderID; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffBlock.java b/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffBlock.java deleted file mode 100644 index db8d064f6f..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffBlock.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import static com.github.technus.tectech.Reference.MODID; - -import java.util.ArrayList; -import java.util.Random; - -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import eu.usrv.yamcore.blocks.BlockBase; - -/** - * Created by danie_000 on 17.12.2016. - */ -public final class QuantumStuffBlock extends BlockBase { - - public static IIcon stuff; - public static int renderID; - public static QuantumStuffBlock INSTANCE; - - public QuantumStuffBlock() { - super(Material.iron); - setBlockBounds(0, 0, 0, 1, 1, 1); - setBlockName("quantumStuff"); - setHarvestLevel("wrench", 0); - setHardness(500); - setResistance(1); - setLightOpacity(0); - setBlockTextureName(MODID + ":blockQuantumStuff"); - } - - @Override - public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister reg) { - super.registerBlockIcons(reg); - stuff = blockIcon; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean getCanBlockGrass() { - return false; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 1; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) { - return false; - } - - @Override - public int getRenderType() { - return renderID; - } - - public static void run() { - INSTANCE = new QuantumStuffBlock(); - GameRegistry.registerBlock(INSTANCE, INSTANCE.getUnlocalizedName()); - } - - @Override - public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { - return new ArrayList<>(); - } - - @Override - public Item getItemDropped(int meta, Random random, int fortune) { - return null; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffRender.java b/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffRender.java deleted file mode 100644 index 4230dff43f..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/QuantumStuffRender.java +++ /dev/null @@ -1,104 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.util.IIcon; -import net.minecraft.util.Vec3; -import net.minecraft.world.IBlockAccess; - -import org.lwjgl.opengl.GL11; - -import com.github.technus.tectech.TecTech; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; - -/** - * Created by danie_000 on 19.12.2016. - */ -public final class QuantumStuffRender implements ISimpleBlockRenderingHandler { - - private static final Tessellator tes = Tessellator.instance; - - @Override - public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - GL11.glPushMatrix(); - // Get icons from custom register (useful for renderers and fluids) - IIcon side = QuantumStuffBlock.stuff; - tes.startDrawingQuads(); - tes.setNormal(0.0F, -1.0F, 0.0F); - renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, side); - tes.draw(); - tes.startDrawingQuads(); - tes.setNormal(0.0F, 0.0F, -1.0F); - renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, side); - tes.draw(); - tes.startDrawingQuads(); - tes.setNormal(0.0F, 0.0F, 1.0F); - renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, side); - tes.draw(); - tes.startDrawingQuads(); - tes.setNormal(-1.0F, 0.0F, 0.0F); - renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, side); - tes.draw(); - tes.startDrawingQuads(); - tes.setNormal(1.0F, 0.0F, 0.0F); - renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, side); - tes.draw(); - tes.startDrawingQuads(); - tes.setNormal(0.0F, 1.0F, 0.0F); - renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, side); - tes.draw(); - GL11.glTranslatef(0.5F, 0.5F, 0.5F); - GL11.glPopMatrix(); - } - - @Override - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, - RenderBlocks renderer) { - // renderer.renderStandardBlock(block, x, y, z); - GL11.glPushMatrix(); - tes.setNormal(0F, 1F, 0F); - tes.setBrightness(15728880); - IIcon side = QuantumStuffBlock.stuff; - for (int i = 0; i < 6; i++) { - float f = 1 - TecTech.RANDOM.nextFloat() / 4f, g = f - TecTech.RANDOM.nextFloat() / 4f, - r = g - TecTech.RANDOM.nextFloat() / 4f - 0.25f; - tes.setColorOpaque_F(r, g, f); - float rotX = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI, - rotY = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI, - rotZ = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI; - tesAbuse(x, y, z, -1.425f, -1.425f, .1f, rotX, rotY, rotZ, side.getMinU(), side.getMaxV()); - tesAbuse(x, y, z, -1.425f, 1.425f, .1f, rotX, rotY, rotZ, side.getMinU(), side.getMinV()); - tesAbuse(x, y, z, 1.425f, 1.425f, .1f, rotX, rotY, rotZ, side.getMaxU(), side.getMinV()); - tesAbuse(x, y, z, 1.425f, -1.425f, .1f, rotX, rotY, rotZ, side.getMaxU(), side.getMaxV()); - - tesAbuse(x, y, z, 1.425f, -1.425f, -.1f, rotX, rotY, rotZ, side.getMaxU(), side.getMaxV()); - tesAbuse(x, y, z, 1.425f, 1.425f, -.1f, rotX, rotY, rotZ, side.getMaxU(), side.getMinV()); - tesAbuse(x, y, z, -1.425f, 1.425f, -.1f, rotX, rotY, rotZ, side.getMinU(), side.getMinV()); - tesAbuse(x, y, z, -1.425f, -1.425f, -.1f, rotX, rotY, rotZ, side.getMinU(), side.getMaxV()); - } - GL11.glPopMatrix(); - return true; - } - - private void tesAbuse(int x, int y, int z, float sx, float sy, float sz, float rotX, float rotY, float rotZ, - float sideU, float sideV) { - Vec3 pos = Vec3.createVectorHelper(sx, sy, sz); - pos.rotateAroundX(rotX); - pos.rotateAroundY(rotY); - pos.rotateAroundZ(rotZ); - tes.addVertexWithUV(pos.xCoord + x + .5f, pos.yCoord + y + .5f, pos.zCoord + z + .5f, sideU, sideV); - } - - @Override - public boolean shouldRender3DInInventory(int modelId) { - return true; - } - - @Override - public int getRenderId() { - return QuantumStuffBlock.renderID; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/ReactorSimBlock.java b/src/main/java/com/github/technus/tectech/thing/block/ReactorSimBlock.java deleted file mode 100644 index 80eca10cad..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/ReactorSimBlock.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import static com.github.technus.tectech.Reference.MODID; - -import net.minecraft.block.Block; -import net.minecraft.block.ITileEntityProvider; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import com.github.technus.tectech.thing.tileEntity.ReactorSimTileEntity; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import ic2.core.IC2; -import ic2.core.IHasGui; -import ic2.core.block.TileEntityBlock; - -/** - * Created by danie_000 on 30.09.2017. - */ -public class ReactorSimBlock extends Block implements ITileEntityProvider { - - public static ReactorSimBlock INSTANCE; - public static IIcon stuff; - - public ReactorSimBlock() { - super(Material.iron); - setBlockBounds(0, 0, 0, 1, 1, 1); - setBlockName("reactorSim"); - setHarvestLevel("wrench", 3); - setHardness(50); - setResistance(30); - setLightOpacity(0); - setStepSound(Block.soundTypeMetal); - setBlockTextureName(MODID + ":blockReactorSimulator"); - } - - @Override - public boolean isOpaqueCube() { - return true; - } - - @Override - public boolean getCanBlockGrass() { - return true; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister reg) { - super.registerBlockIcons(reg); - stuff = blockIcon; - } - - public static void run() { - INSTANCE = new ReactorSimBlock(); - GameRegistry.registerBlock(INSTANCE, ReactorSimItem.class, INSTANCE.getUnlocalizedName()); - GameRegistry.registerTileEntity(ReactorSimTileEntity.class, MODID + "_reactorSim"); - } - - @Override - public TileEntity createNewTileEntity(World worldIn, int meta) { - return new ReactorSimTileEntity(); - } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float a, - float b, float c) { - if (entityPlayer.isSneaking()) { - return false; - } else { - TileEntity te = world.getTileEntity(x, y, z); - return te instanceof IHasGui - && (!IC2.platform.isSimulating() || IC2.platform.launchGui(entityPlayer, (IHasGui) te)); - } - } - - @Override - public void onNeighborBlockChange(World world, int x, int y, int z, Block srcBlock) { - TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof TileEntityBlock) { - ((TileEntityBlock) te).onNeighborUpdate(srcBlock); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/ReactorSimItem.java b/src/main/java/com/github/technus/tectech/thing/block/ReactorSimItem.java deleted file mode 100644 index 01ed6b54ad..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/ReactorSimItem.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import static com.github.technus.tectech.util.CommonValues.TEC_MARK_GENERAL; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -/** - * Created by danie_000 on 30.09.2017. - */ -public class ReactorSimItem extends ItemBlock { - - public static QuantumGlassItem INSTANCE; - - public ReactorSimItem(Block block) { - super(block); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - aList.add(TEC_MARK_GENERAL); - aList.add(translateToLocal("tile.reactorSim.desc.0")); // Fission Reaction Uncertainty Resolver 9001 - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("tile.reactorSim.desc.1")); // Explodes, - // but - // not - // as - // much... - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/RenderForgeOfGods.java b/src/main/java/com/github/technus/tectech/thing/block/RenderForgeOfGods.java deleted file mode 100644 index 4da28875f9..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/RenderForgeOfGods.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.rendering.EOH.EOH_RenderingUtils.renderStarLayer; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_0; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_1; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.STAR_LAYER_2; - -import java.awt.Color; - -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.model.AdvancedModelLoader; -import net.minecraftforge.client.model.IModelCustom; - -import org.lwjgl.opengl.GL11; - -public class RenderForgeOfGods extends TileEntitySpecialRenderer { - - public static IModelCustom starModel; - - public RenderForgeOfGods() { - starModel = AdvancedModelLoader.loadModel(new ResourceLocation(MODID, "models/Star.obj")); - } - - @Override - public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { - if (!(tile instanceof TileForgeOfGods)) return; - - { - GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_BLEND); - - // Innermost layer should be opaque - enableOpaqueColorInversion(); - renderStarLayer(0, STAR_LAYER_0, new Color(1.0f, 0.4f, 0.05f, 1.0f), 1.0f, 25); - disableOpaqueColorInversion(); - - enablePseudoTransparentColorInversion(); - renderStarLayer(1, STAR_LAYER_1, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.4f, 25); - renderStarLayer(2, STAR_LAYER_2, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.2f, 25); - - GL11.glPopAttrib(); - GL11.glPopMatrix(); - } - } - - public static void enablePseudoTransparentColorInversion() { - GL11.glEnable(GL11.GL_COLOR_LOGIC_OP); - GL11.glLogicOp(GL11.GL_OR_INVERTED); - } - - public static void enableOpaqueColorInversion() { - GL11.glEnable(GL11.GL_COLOR_LOGIC_OP); - GL11.glLogicOp(GL11.GL_COPY_INVERTED); - } - - public static void disableOpaqueColorInversion() { - GL11.glDisable(GL11.GL_COLOR_LOGIC_OP); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/TileEyeOfHarmony.java b/src/main/java/com/github/technus/tectech/thing/block/TileEyeOfHarmony.java deleted file mode 100644 index 4c9d51a175..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/TileEyeOfHarmony.java +++ /dev/null @@ -1,200 +0,0 @@ -package com.github.technus.tectech.thing.block; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Random; -import java.util.Set; -import java.util.stream.IntStream; - -import net.minecraft.block.Block; -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.minecraft.util.AxisAlignedBB; - -import pers.gwyog.gtneioreplugin.plugin.block.ModBlocks; - -public class TileEyeOfHarmony extends TileEntity { - - private static final double EOH_STAR_FIELD_RADIUS = 13; - - // Prevent culling when block is out of frame so model can remain active. - @Override - public AxisAlignedBB getRenderBoundingBox() { - - // Assuming your block is at (x, y, z) - double x = this.xCoord; - double y = this.yCoord; - double z = this.zCoord; - - // Create a bounding box that extends 'size' blocks in all directions from the block. - return AxisAlignedBB.getBoundingBox( - x - EOH_STAR_FIELD_RADIUS, - y - EOH_STAR_FIELD_RADIUS, - z - EOH_STAR_FIELD_RADIUS, - x + EOH_STAR_FIELD_RADIUS + 1, - y + EOH_STAR_FIELD_RADIUS + 1, - z + EOH_STAR_FIELD_RADIUS + 1); - } - - public void setSize(float size) { - this.size = size; - } - - public void setRotationSpeed(float rotationSpeed) { - this.rotationSpeed = rotationSpeed; - } - - private float size = 10; - private float rotationSpeed = 10; - - // Fun fact, these methods were entirely written by ChatGPT3... Take that as you will. - public static ArrayList selectNRandomElements(Collection inputList, long n) { - ArrayList randomElements = new ArrayList<>((int) n); - ArrayList inputArray = new ArrayList<>(inputList); - Random rand = new Random(); - IntStream.range(0, (int) n) - .forEach(i -> { - int randomIndex = rand.nextInt(inputArray.size()); - randomElements.add(inputArray.get(randomIndex)); - inputArray.remove(randomIndex); - }); - return randomElements; - } - - public static float generateRandomFloat(float a, float b) { - Random rand = new Random(); - return rand.nextFloat() * (b - a) + a; - } - - public long getTier() { - return tier; - } - - public void setTier(long tier) { - this.tier = tier; - } - - private long tier = 9; - - public float getSize() { - return size; - } - - public float getRotationSpeed() { - return rotationSpeed; - } - - @Override - public void updateEntity() { - angle += 10.0f; - } - - public static class OrbitingObject { - - public OrbitingObject(Block block, float distance, float rotationSpeed, float orbitSpeed, float xAngle, - float zAngle, float scale) { - this.block = block; - this.distance = distance; - this.rotationSpeed = rotationSpeed; - this.orbitSpeed = orbitSpeed; - this.xAngle = xAngle; - this.zAngle = zAngle; - this.scale = scale; - } - - public final Block block; - public final float distance; - public final float rotationSpeed; - public final float orbitSpeed; - public final float xAngle; - public final float zAngle; - public final float scale; - } - - public ArrayList getOrbitingObjects() { - return orbitingObjects; - } - - private final ArrayList orbitingObjects = new ArrayList<>(); - private static final Set BLACKLISTED_BLOCKS = Collections - .unmodifiableSet(new HashSet<>(Arrays.asList("Tf", "Ow", "ED", "EA", "VA"))); - // Map of strings to blocks - private static final Map BLOCKS = new HashMap<>(); - - static { - // Initialize the map of blocks - ModBlocks.blocks.forEach((dimString, dimBlock) -> { - if (!BLACKLISTED_BLOCKS.contains(dimString)) { - BLOCKS.put(dimString, dimBlock); - } - }); - } - - private static final float MAX_ANGLE = 30; - - // This must be set last. - public void generateImportantInfo() { - - int index = 0; - for (Block block : selectNRandomElements(BLOCKS.values(), tier + 1)) { - - float xAngle = generateRandomFloat(-MAX_ANGLE, MAX_ANGLE); - float zAngle = generateRandomFloat(-MAX_ANGLE, MAX_ANGLE); - index += 1.0; - float distance = index + generateRandomFloat(-0.2f, 0.2f); - float scale = generateRandomFloat(0.2f, 0.9f); - float rotationSpeed = generateRandomFloat(0.5f, 1.5f); - float orbitSpeed = generateRandomFloat(0.5f, 1.5f); - orbitingObjects.add(new OrbitingObject(block, distance, rotationSpeed, orbitSpeed, xAngle, zAngle, scale)); - } - } - - // Used to track the rotation of the star/planets. - public float angle; - - private static final String EOH_NBT_TAG = "EOH:"; - private static final String ROTATION_SPEED_NBT_TAG = EOH_NBT_TAG + "rotationSpeed"; - private static final String SIZE_NBT_TAG = EOH_NBT_TAG + "size"; - private static final String TIER_NBT_TAG = EOH_NBT_TAG + "tier"; - - @Override - public void writeToNBT(NBTTagCompound compound) { - super.writeToNBT(compound); - - // Save other stats. - compound.setFloat(ROTATION_SPEED_NBT_TAG, rotationSpeed); - compound.setFloat(SIZE_NBT_TAG, size); - compound.setLong(TIER_NBT_TAG, tier); - } - - @Override - public void readFromNBT(NBTTagCompound compound) { - super.readFromNBT(compound); - - // Load other stats. - rotationSpeed = compound.getFloat(ROTATION_SPEED_NBT_TAG); - size = compound.getFloat(SIZE_NBT_TAG); - tier = compound.getLong(TIER_NBT_TAG); - } - - @Override - public Packet getDescriptionPacket() { - NBTTagCompound nbttagcompound = new NBTTagCompound(); - writeToNBT(nbttagcompound); - return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - readFromNBT(pkt.func_148857_g()); - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/block/TileForgeOfGods.java b/src/main/java/com/github/technus/tectech/thing/block/TileForgeOfGods.java deleted file mode 100644 index 03109b46bd..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/block/TileForgeOfGods.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.github.technus.tectech.thing.block; - -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.minecraft.util.AxisAlignedBB; - -public class TileForgeOfGods extends TileEntity { - - private float size = 10; - private float rotationSpeed = 10; - - @Override - public AxisAlignedBB getRenderBoundingBox() { - return INFINITE_EXTENT_AABB; - } - - @Override - public double getMaxRenderDistanceSquared() { - return 25600; - } - - public void setRenderSize(float size) { - this.size = size; - } - - public void setRenderRotationSpeed(float rotationSpeed) { - this.rotationSpeed = rotationSpeed; - } - - public float getRenderSize() { - return size; - } - - public float getRenderRotationSpeed() { - return rotationSpeed; - } - - @Override - public void updateEntity() { - angle += 10.0f; - } - - // Used to track the rotation of the star - public float angle; - - private static final String FOG_NBT_TAG = "FOG:"; - private static final String ROTATION_SPEED_NBT_TAG = FOG_NBT_TAG + "renderRotationSpeed"; - private static final String SIZE_NBT_TAG = FOG_NBT_TAG + "renderSize"; - - @Override - public void writeToNBT(NBTTagCompound compound) { - super.writeToNBT(compound); - - // Save stats - compound.setFloat(ROTATION_SPEED_NBT_TAG, rotationSpeed); - compound.setFloat(SIZE_NBT_TAG, size); - } - - @Override - public void readFromNBT(NBTTagCompound compound) { - super.readFromNBT(compound); - - // Load stats - rotationSpeed = compound.getFloat(ROTATION_SPEED_NBT_TAG); - size = compound.getFloat(SIZE_NBT_TAG); - } - - @Override - public Packet getDescriptionPacket() { - NBTTagCompound nbttagcompound = new NBTTagCompound(); - writeToNBT(nbttagcompound); - return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - readFromNBT(pkt.func_148857_g()); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java deleted file mode 100644 index 1c6524934c..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsBA0.java +++ /dev/null @@ -1,227 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import com.github.technus.tectech.thing.CustomItemList; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.objects.GT_CopiedBlockTexture; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Block_Casings_Abstract; -import gregtech.common.blocks.GT_Material_Casings; - -/** - * Created by danie_000 on 03.10.2016. - */ -// Mostly tesla coils, also 2 eye of harmony casings. -public class GT_Block_CasingsBA0 extends GT_Block_Casings_Abstract { - - private static final IIcon[] tM0 = new IIcon[2]; - private static final IIcon[] tM1 = new IIcon[2]; - private static final IIcon[] tM2 = new IIcon[2]; - private static final IIcon[] tM3 = new IIcon[2]; - private static final IIcon[] tM4 = new IIcon[2]; - private static final IIcon[] tM5 = new IIcon[2]; - private static final IIcon[] tM6 = new IIcon[2]; - private static IIcon tM7; - private static final IIcon[] tM8 = new IIcon[2]; - private static final IIcon[] tM9 = new IIcon[2]; - - private static IIcon EOH_INNER; - private static IIcon EOH_OUTER; - private static IIcon EOH_INFINITE; - - private static final byte START_INDEX = 16; - - public GT_Block_CasingsBA0() { - super(GT_Item_CasingsBA0.class, "gt.blockcasingsBA0", GT_Material_Casings.INSTANCE); - for (byte b = 0; b < 16; b = (byte) (b + 1)) { - Textures.BlockIcons.casingTexturePages[texturePage][b - + START_INDEX] = new GT_CopiedBlockTexture(this, 6, b); - /* IMPORTANT for block recoloring **/ - } - - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".0.name", "Redstone Alloy Primary Tesla Windings"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".1.name", "MV Superconductor Primary Tesla Windings"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".2.name", "HV Superconductor Primary Tesla Windings"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".3.name", "EV Superconductor Primary Tesla Windings"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".4.name", "IV Superconductor Primary Tesla Windings"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".5.name", "LuV Superconductor Primary Tesla Windings"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".9.name", "ZPM Superconductor Primary Tesla Windings"); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Tesla Base Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Tesla Toroid Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Tesla Secondary Windings"); - - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".10.name", "Reinforced Temporal Structure Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".11.name", "Reinforced Spatial Structure Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".12.name", "Infinite Spacetime Energy Boundary Casing"); - - CustomItemList.tM_TeslaPrimary_0.set(new ItemStack(this, 1, 0)); - CustomItemList.tM_TeslaPrimary_1.set(new ItemStack(this, 1, 1)); - CustomItemList.tM_TeslaPrimary_2.set(new ItemStack(this, 1, 2)); - CustomItemList.tM_TeslaPrimary_3.set(new ItemStack(this, 1, 3)); - CustomItemList.tM_TeslaPrimary_4.set(new ItemStack(this, 1, 4)); - CustomItemList.tM_TeslaPrimary_5.set(new ItemStack(this, 1, 5)); - CustomItemList.tM_TeslaPrimary_6.set(new ItemStack(this, 1, 9)); - - CustomItemList.tM_TeslaBase.set(new ItemStack(this, 1, 6)); - CustomItemList.tM_TeslaToroid.set(new ItemStack(this, 1, 7)); - CustomItemList.tM_TeslaSecondary.set(new ItemStack(this, 1, 8)); - - CustomItemList.EOH_Reinforced_Temporal_Casing.set(new ItemStack(this, 1, 10)); - CustomItemList.EOH_Reinforced_Spatial_Casing.set(new ItemStack(this, 1, 11)); - CustomItemList.EOH_Infinite_Energy_Casing.set(new ItemStack(this, 1, 12)); - } - - @Override - public void registerBlockIcons(IIconRegister aIconRegister) { - tM0[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_0"); - tM0[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_0"); - tM1[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_1"); - tM1[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_1"); - tM2[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_2"); - tM2[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_2"); - tM3[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_3"); - tM3[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_3"); - tM4[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_4"); - tM4[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_4"); - tM5[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_5"); - tM5[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_5"); - tM9[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_6"); - tM9[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_6"); - - tM6[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_BASE_TOP_BOTTOM"); - tM6[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_BASE_SIDES"); - tM7 = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_TOROID"); - tM8[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_SECONDARY_TOP_BOTTOM"); - tM8[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_SECONDARY_SIDES"); - - EOH_INNER = aIconRegister.registerIcon("gregtech:iconsets/EM_INNER_SPACETIME_REINFORCED_EOH_CASING"); - EOH_OUTER = aIconRegister.registerIcon("gregtech:iconsets/EM_OUTER_SPACETIME_REINFORCED_EOH_CASING"); - EOH_INFINITE = aIconRegister.registerIcon("gregtech:iconsets/EM_POWER_INFINITE"); - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - switch (aMeta) { - case 0: - switch (ordinalSide) { - case 0: - case 1: - return tM0[0]; - default: - return tM0[1]; - } - case 1: - switch (ordinalSide) { - case 0: - case 1: - return tM1[0]; - default: - return tM1[1]; - } - case 2: - switch (ordinalSide) { - case 0: - case 1: - return tM2[0]; - default: - return tM2[1]; - } - case 3: - switch (ordinalSide) { - case 0: - case 1: - return tM3[0]; - default: - return tM3[1]; - } - case 4: - switch (ordinalSide) { - case 0: - case 1: - return tM4[0]; - default: - return tM4[1]; - } - case 5: - switch (ordinalSide) { - case 0: - case 1: - return tM5[0]; - default: - return tM5[1]; - } - case 6: - switch (ordinalSide) { - case 0: - case 1: - return tM6[0]; - default: - return tM6[1]; - } - case 7: - return tM7; - case 8: - switch (ordinalSide) { - case 0: - case 1: - return tM8[0]; - default: - return tM8[1]; - } - case 9: - switch (ordinalSide) { - case 0: - case 1: - return tM9[0]; - default: - return tM9[1]; - } - case 10: - return EOH_INNER; - case 11: - return EOH_OUTER; - case 12: - return EOH_INFINITE; - default: - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { - int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); - return getIcon(ordinalSide, tMeta); - } - - @Override - public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - for (int i = 0; i <= 12; i++) { - aList.add(new ItemStack(aItem, 1, i)); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsNH.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsNH.java deleted file mode 100644 index 00021154f4..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsNH.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static com.github.technus.tectech.TecTech.creativeTabTecTech; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINECASINGS_BOTTOM_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINECASINGS_SIDE_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINECASINGS_TOP_TT; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import com.github.technus.tectech.thing.CustomItemList; - -import gregtech.api.enums.Textures; -import gregtech.api.objects.GT_CopiedBlockTexture; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Block_Casings_Abstract; -import gregtech.common.blocks.GT_Material_Casings; - -/** - * Created by danie_000 on 03.10.2016. - */ -public class GT_Block_CasingsNH extends GT_Block_Casings_Abstract { - - public static boolean mConnectedMachineTextures = true; - - public GT_Block_CasingsNH() { - super(GT_Item_CasingsNH.class, "gt.blockcasingsNH", GT_Material_Casings.INSTANCE); - setCreativeTab(creativeTabTecTech); - - for (byte b = 0; b < 16; b = (byte) (b + 1)) { - Textures.BlockIcons.casingTexturePages[8][b + 64] = new GT_CopiedBlockTexture(this, 6, b); - /* IMPORTANT for block recoloring */ - } - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "UEV Machine Casing"); // adding - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "UIV Machine Casing"); // adding - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "UMV Machine Casing"); // adding - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "UXV Machine Casing"); // adding - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "MAX Machine Casing"); // adding - - CustomItemList.Casing_UEV.set(new ItemStack(this, 1, 10)); - CustomItemList.Casing_UIV.set(new ItemStack(this, 1, 11)); - CustomItemList.Casing_UMV.set(new ItemStack(this, 1, 12)); - CustomItemList.Casing_UXV.set(new ItemStack(this, 1, 13)); - CustomItemList.Casing_MAXV.set(new ItemStack(this, 1, 14)); - } - - @Override - public void registerBlockIcons(IIconRegister aIconRegister) { - // super.registerBlockIcons(aIconRegister); - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - if (ordinalSide == 0) { - return MACHINECASINGS_BOTTOM_TT[aMeta].getIcon(); - } - if (ordinalSide == 1) { - return MACHINECASINGS_TOP_TT[aMeta].getIcon(); - } - return MACHINECASINGS_SIDE_TT[aMeta].getIcon(); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsTT.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsTT.java deleted file mode 100644 index dc15b87f95..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Block_CasingsTT.java +++ /dev/null @@ -1,196 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static com.github.technus.tectech.TecTech.creativeTabTecTech; -import static com.github.technus.tectech.TecTech.tectechTexturePage1; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import com.github.technus.tectech.thing.CustomItemList; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.objects.GT_CopiedBlockTexture; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Block_Casings_Abstract; -import gregtech.common.blocks.GT_Material_Casings; - -/** - * Created by danie_000 on 03.10.2016. - */ -public class GT_Block_CasingsTT extends GT_Block_Casings_Abstract { - - public static final byte texturePage = tectechTexturePage1; - public static final short textureOffset = texturePage << 7; // Start of PAGE 8 (which is the 9th page) (8*128) - private static IIcon eM0, eM1, eM1s, eM2, eM2s, eM3, eM3s, eM4, eM5, eM6, eM7, eM7s, eM8, eM9, eM10, eM11, eM12, - eM13, eM14; - private static final IIcon[] debug = new IIcon[6]; - - public GT_Block_CasingsTT() { - super(GT_Item_CasingsTT.class, "gt.blockcasingsTT", GT_Material_Casings.INSTANCE); - setCreativeTab(creativeTabTecTech); - - for (byte b = 0; b < 16; b = (byte) (b + 1)) { - Textures.BlockIcons.casingTexturePages[texturePage][b] = new GT_CopiedBlockTexture(this, 6, b); - /* IMPORTANT for block recoloring **/ - } - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "High Power Casing"); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Computer Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Computer Heat Vent"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Advanced Computer Casing"); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Molecular Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Advanced Molecular Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Containment Field Generator"); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Molecular Coil"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Hollow Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Spacetime Altering Casing"); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Teleportation Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Dimensional Bridge Generator"); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Ultimate Molecular Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".13.name", "Ultimate Advanced Molecular Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".14.name", "Ultimate Containment Field Generator"); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Debug Sides"); // NOT REGISTER AS - // TEXTURE FOR - // HATCHES! - - CustomItemList.eM_Power.set(new ItemStack(this, 1, 0)); - - CustomItemList.eM_Computer_Casing.set(new ItemStack(this, 1, 1)); - CustomItemList.eM_Computer_Vent.set(new ItemStack(this, 1, 2)); - CustomItemList.eM_Computer_Bus.set(new ItemStack(this, 1, 3)); - - CustomItemList.eM_Containment.set(new ItemStack(this, 1, 4)); - CustomItemList.eM_Containment_Advanced.set(new ItemStack(this, 1, 5)); - CustomItemList.eM_Containment_Field.set(new ItemStack(this, 1, 6)); - - CustomItemList.eM_Coil.set(new ItemStack(this, 1, 7)); - CustomItemList.eM_Hollow.set(new ItemStack(this, 1, 8)); - CustomItemList.eM_Spacetime.set(new ItemStack(this, 1, 9)); - - CustomItemList.eM_Teleportation.set(new ItemStack(this, 1, 10)); - CustomItemList.eM_Dimensional.set(new ItemStack(this, 1, 11)); - - CustomItemList.eM_Ultimate_Containment.set(new ItemStack(this, 1, 12)); - CustomItemList.eM_Ultimate_Containment_Advanced.set(new ItemStack(this, 1, 13)); - CustomItemList.eM_Ultimate_Containment_Field.set(new ItemStack(this, 1, 14)); - - CustomItemList.debugBlock.set(new ItemStack(this, 1, 15)); - } - - @Override - public void registerBlockIcons(IIconRegister aIconRegister) { - // super.registerBlockIcons(aIconRegister); - eM0 = aIconRegister.registerIcon("gregtech:iconsets/EM_POWER"); - - eM1 = aIconRegister.registerIcon("gregtech:iconsets/EM_PC_NONSIDE"); - eM1s = aIconRegister.registerIcon("gregtech:iconsets/EM_PC"); - eM2 = aIconRegister.registerIcon("gregtech:iconsets/EM_PC_VENT_NONSIDE"); - eM2s = aIconRegister.registerIcon("gregtech:iconsets/EM_PC_VENT"); - eM3 = aIconRegister.registerIcon("gregtech:iconsets/EM_PC_ADV_NONSIDE"); - eM3s = aIconRegister.registerIcon("gregtech:iconsets/EM_PC_ADV"); - - eM4 = aIconRegister.registerIcon("gregtech:iconsets/EM_CASING"); - eM5 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_CASING"); - eM6 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD"); - - eM7 = aIconRegister.registerIcon("gregtech:iconsets/EM_COIL_NONSIDE"); - eM7s = aIconRegister.registerIcon("gregtech:iconsets/EM_COIL"); - eM8 = aIconRegister.registerIcon("gregtech:iconsets/EM_HOLLOW"); - eM9 = aIconRegister.registerIcon("gregtech:iconsets/EM_TIMESPACE"); - - eM10 = aIconRegister.registerIcon("gregtech:iconsets/EM_TELE"); - eM11 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM"); - - eM12 = aIconRegister.registerIcon("gregtech:iconsets/EM_ULTIMATE_CASING"); - eM13 = aIconRegister.registerIcon("gregtech:iconsets/EM_ULTIMATE_FIELD_CASING"); - eM14 = aIconRegister.registerIcon("gregtech:iconsets/EM_ULTIMATE_FIELD"); - - debug[0] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_0"); - debug[1] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_1"); - debug[2] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_2"); - debug[3] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_3"); - debug[4] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_4"); - debug[5] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_5"); - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - switch (aMeta) { - case 0: - return eM0; - case 1: - if (ordinalSide < 2) { - return eM1; - } - return eM1s; - case 2: - if (ordinalSide < 2) { - return eM2; - } - return eM2s; - case 3: - if (ordinalSide < 2) { - return eM3; - } - return eM3s; - case 4: - return eM4; - case 5: - return eM5; - case 6: - return eM6; - case 7: - if (ordinalSide < 2) { - return eM7; - } - return eM7s; - case 8: - return eM8; - case 9: - return eM9; - case 10: - return eM10; - case 11: - return eM11; - case 12: - return eM12; - case 13: - return eM13; - case 14: - return eM14; - case 15: - return debug[ordinalSide]; - default: - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { - int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); - return getIcon(ordinalSide, tMeta); - } - - @Override - public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - for (int i = 0; i <= 15; i++) { - aList.add(new ItemStack(aItem, 1, i)); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java deleted file mode 100644 index 2aa0d41249..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsBA0.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static com.github.technus.tectech.util.CommonValues.COSMIC_MARK; -import static com.github.technus.tectech.util.CommonValues.THETA_MOVEMENT; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static net.minecraft.util.EnumChatFormatting.AQUA; -import static net.minecraft.util.EnumChatFormatting.GRAY; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import gregtech.api.enums.TierEU; -import gregtech.common.blocks.GT_Item_Casings_Abstract; - -public class GT_Item_CasingsBA0 extends GT_Item_Casings_Abstract { - - public GT_Item_CasingsBA0(Block par1) { - super(par1); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - if (aStack.getItemDamage() < 15) { - aList.add(THETA_MOVEMENT); - } else { - aList.add(COSMIC_MARK); - } - switch (aStack.getItemDamage()) { - case 0: // "Redstone Alloy Primary Tesla Windings" - case 1: // "MV Superconductor Primary Tesla Windings" - case 2: // "HV Superconductor Primary Tesla Windings" - case 3: // "EV Superconductor Primary Tesla Windings" - case 4: // "IV Superconductor Primary Tesla Windings" - case 5: // "LuV Superconductor Primary Tesla Windings" - aList.add( - translateToLocal("gt.blockcasingsBA0.0.desc.0") + " " - + formatNumbers(V[aStack.getItemDamage() + 1]) - + " EU/t"); // Handles up to - aList.add(AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.0.desc.1")); // What - // one - // man - // calls - // God, - // another - // calls - // the - // laws of physics. - break; - case 6: // "Tesla Base Casing" - aList.add(translateToLocal("gt.blockcasingsBA0.6.desc.0")); // The base of a wondrous contraption - aList.add(AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.6.desc.1")); // it's - // alive, - // IT'S - // ALIVE! - break; - case 7: // "Tesla Toroid Casing" - aList.add(translateToLocal("gt.blockcasingsBA0.7.desc.0")); // Made out of the finest tin foil! - aList.add(AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.7.desc.1")); // Faraday - // suits - // might - // come - // later - break; - case 8: // "Tesla Secondary Windings" - aList.add(translateToLocal("gt.blockcasingsBA0.8.desc.0")); // Picks up power from a primary coil - aList.add(AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.8.desc.1")); // Who - // wouldn't - // want - // a - // 32k - // epoxy - // multi? - break; - case 9: // "ZPM Superconductor Primary Tesla Windings" - aList.add(translateToLocal("gt.blockcasingsBA0.0.desc.0") + " " + formatNumbers(TierEU.ZPM) + " EU/t"); // Handles - // up - // to - aList.add(AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.0.desc.1")); // What - // one - // man - // calls - // God, - // another - case 10: // Reinforced Temporal Structure Casing - aList.add(AQUA + translateToLocal("gt.blockcasingsBA0.10.desc.0")); - aList.add(GRAY + translateToLocal("gt.blockcasingsBA0.10.desc.1")); - // Designed to resist spatial shearing from internal volume expansion. - // Can survive at least one big bang, maybe two... - break; - case 11: // Reinforced Temporal Structure Casing - aList.add(AQUA + translateToLocal("gt.blockcasingsBA0.11.desc.0")); - aList.add(GRAY + translateToLocal("gt.blockcasingsBA0.11.desc.1")); - // Resistant to temporal shearing from time dilation differences. - // This block can last an eternity without any decay. - break; - case 12: // Infinite Spacetime Energy Boundary Casing - aList.add(AQUA + translateToLocal("gt.blockcasingsBA0.12.desc.0")); - // Provides a stable bridge between spacetime regions. - break; - default: - aList.add("Damn son where did you get that!?"); - aList.add(EnumChatFormatting.BLUE + "From outer space... I guess..."); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsNH.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsNH.java deleted file mode 100644 index b69abca128..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsNH.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import net.minecraft.block.Block; - -import gregtech.common.blocks.GT_Item_Casings_Abstract; - -/** - * Created by danie_000 on 03.10.2016. - */ -public class GT_Item_CasingsNH extends GT_Item_Casings_Abstract { - - public GT_Item_CasingsNH(Block par1) { - super(par1); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java deleted file mode 100644 index 3c2f349b03..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_CasingsTT.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static com.github.technus.tectech.util.CommonValues.COSMIC_MARK; -import static com.github.technus.tectech.util.CommonValues.TEC_MARK_EM; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import gregtech.common.blocks.GT_Item_Casings_Abstract; - -/** - * Created by danie_000 on 03.10.2016. - */ -public class GT_Item_CasingsTT extends GT_Item_Casings_Abstract { - - public GT_Item_CasingsTT(Block par1) { - super(par1); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - if (aStack.getItemDamage() < 15) { - aList.add(TEC_MARK_EM); - } else { - aList.add(COSMIC_MARK); - } - switch (aStack.getItemDamage()) { - case 0: // "High Power Casing" - aList.add(translateToLocal("gt.blockcasingsTT.0.desc.0")); // Well suited for high power applications. - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.0.desc.1")); // The power levels are rising! - break; - case 1: // "Computer Casing" - aList.add(translateToLocal("gt.blockcasingsTT.1.desc.0")); // Nice and clean casing. - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.1.desc.1")); // Dust can break it!? - break; - case 2: // "Computer Heat Vent" - aList.add(translateToLocal("gt.blockcasingsTT.2.desc.0")); // Air vent with a filter. - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.2.desc.1")); // Perfectly muffled sound! - break; - case 3: // "Advanced Computer Casing" - aList.add(translateToLocal("gt.blockcasingsTT.3.desc.0")); // Contains high bandwidth bus - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.3.desc.1")); // couple thousand qubits wide. - break; - case 4: // "Molecular Casing" - aList.add(translateToLocal("gt.blockcasingsTT.4.desc.0")); // Stops elemental things. - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.4.desc.1")); // Radiation and emotions too... - break; - case 5: // "Advanced Molecular Casing" - aList.add(translateToLocal("gt.blockcasingsTT.5.desc.0")); // Cooling and stabilization. - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.5.desc.1")); // A comfortable machine bed. - break; - case 6: // "Containment Field Generator" - aList.add(translateToLocal("gt.blockcasingsTT.6.desc.0")); // Creates a field that... - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.6.desc.1")); // can stop even force carriers. - break; - case 7: // "Molecular Coil" - aList.add(translateToLocal("gt.blockcasingsTT.7.desc.0")); // Well it does things too... - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.7.desc.1")); // [Use this coil!] - break; - case 8: // "Collider Hollow Casing" - aList.add(translateToLocal("gt.blockcasingsTT.8.desc.0")); // Reinforced accelerator tunnel. - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.8.desc.1")); // Most advanced pipe ever. - break; - case 9: // "Spacetime Altering Casing" - aList.add(translateToLocal("gt.blockcasingsTT.9.desc.0")); // c is no longer the limit. - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.9.desc.1")); // Wibbly wobbly timey wimey stuff. - break; - case 10: // "Teleportation Casing" - aList.add(translateToLocal("gt.blockcasingsTT.10.desc.0")); // Remote connection. - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.10.desc.1")); // Better touch with a stick. - break; - case 11: // "Dimensional Bridge Generator" - aList.add(translateToLocal("gt.blockcasingsTT.11.desc.0")); // Interdimensional Operations. - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.11.desc.1")); // Around the universe and other - // places too. - break; - case 12: // "Ultimate Molecular Casing" - aList.add(translateToLocal("gt.blockcasingsTT.12.desc.0")); // Ultimate in every way. - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.12.desc.1")); // I don't know what it can't do. - break; - case 13: // "Ultimate Advanced Molecular Casing" - aList.add(translateToLocal("gt.blockcasingsTT.13.desc.0")); // More Ultimate in every way. - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.13.desc.1")); // I don't know what I am doing! - break; - case 14: // "Ultimate Containment Field Generator" - aList.add(translateToLocal("gt.blockcasingsTT.14.desc.0")); // Black Hole... - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockcasingsTT.14.desc.1")); // Meh... - break; - case 15: // "Debug Sides" - aList.add(translateToLocal("gt.blockcasingsTT.15.desc.0")); // Lazy man way of determining sides. - aList.add(EnumChatFormatting.BLUE + translateToLocal("gt.blockcasingsTT.15.desc.1")); - break; - default: // WTF? - aList.add("Damn son where did you get that!?"); - aList.add(EnumChatFormatting.BLUE + "From outer space... I guess..."); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Godforge.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Godforge.java deleted file mode 100644 index e931b94423..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Godforge.java +++ /dev/null @@ -1,126 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static com.github.technus.tectech.util.CommonValues.GODFORGE_MARK; -import static net.minecraft.util.EnumChatFormatting.AQUA; -import static net.minecraft.util.EnumChatFormatting.BOLD; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Item_Casings_Abstract; - -public class GT_Item_Casings_Godforge extends GT_Item_Casings_Abstract { - - public GT_Item_Casings_Godforge(Block par1) { - super(par1); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - aList.add(GODFORGE_MARK); - switch (aStack.getItemDamage()) { - case 0: - aList.add( - GT_LanguageManager.addStringLocalization( - "godforge.casings.0.Tooltip.0", - "Shielded by the event horizon of a singularity")); - aList.add( - AQUA.toString() + BOLD - + GT_LanguageManager - .addStringLocalization("godforge.casings.0.Tooltip.1", "Don't get too close...")); - break; - case 1: - aList.add( - GT_LanguageManager.addStringLocalization( - "godforge.casings.1.Tooltip.0", - "Designed to route stellar matter using spacetime distortion")); - aList.add( - AQUA.toString() + BOLD - + GT_LanguageManager - .addStringLocalization("godforge.casings.1.Tooltip.1", "Reality Distortion")); - break; - case 2: - aList.add( - GT_LanguageManager - .addStringLocalization("godforge.casings.2.Tooltip.0", "Unaffected by gravitational forces")); - aList.add( - AQUA.toString() + BOLD - + GT_LanguageManager.addStringLocalization( - "godforge.casings.2.Tooltip.1", - "Not even a black hole could tear it apart.")); - break; - case 3: - aList.add( - GT_LanguageManager.addStringLocalization( - "godforge.casings.3.Tooltip.0", - "Creates enormous magnetic fields capable of constraining entire stars")); - aList.add( - AQUA.toString() + BOLD - + GT_LanguageManager - .addStringLocalization("godforge.casings.3.Tooltip.1", "It's super effective!")); - break; - case 4: - aList.add( - GT_LanguageManager.addStringLocalization( - "godforge.casings.4.Tooltip.0", - "Taps into streams of stellar matter to harness their heat energy")); - aList.add( - AQUA.toString() + BOLD - + GT_LanguageManager - .addStringLocalization("godforge.casings.4.Tooltip.1", "Turn up the heat!")); - break; - case 5: - aList.add( - GT_LanguageManager.addStringLocalization( - "godforge.casings.5.Tooltip.0", - "Controls the flow of gravitons to manipulate gravity")); - aList.add( - AQUA.toString() + BOLD - + GT_LanguageManager.addStringLocalization( - "godforge.casings.5.Tooltip.1", - "Exponential scaling past 800 Galaxies")); - break; - case 6: - aList.add( - GT_LanguageManager.addStringLocalization( - "godforge.casings.6.Tooltip.0", - "Controls the flow of gravitons to manipulate gravity")); - aList.add( - AQUA.toString() + BOLD - + GT_LanguageManager - .addStringLocalization("godforge.casings.6.Tooltip.1", "Getting closer...")); - break; - case 7: - aList.add( - GT_LanguageManager.addStringLocalization( - "godforge.casings.7.Tooltip.0", - "Controls the flow of gravitons to manipulate gravity")); - aList.add( - AQUA.toString() + BOLD - + GT_LanguageManager.addStringLocalization("godforge.casings.7.Tooltip.1", "Gravity Central")); - break; - case 8: - aList.add( - GT_LanguageManager.addStringLocalization( - "godforge.casings.8.Tooltip.0", - "Transfers and stores extreme amounts of heat without any loss")); - aList.add( - AQUA.toString() + BOLD - + GT_LanguageManager.addStringLocalization("godforge.casings.8.Tooltip.1", "<<>>Wave>>>")); - break; - default: - aList.add( - EnumChatFormatting.RED.toString() + BOLD - + GT_LanguageManager - .addStringLocalization("godforge.casings.Error.Tooltip", "Error, report to GTNH team")); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Spacetime.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Spacetime.java deleted file mode 100644 index f966d85695..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Spacetime.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static com.google.common.math.LongMath.pow; -import static gregtech.api.enums.GT_Values.AuthorColen; -import static gregtech.api.util.GT_Utility.formatNumbers; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Item_Casings_Abstract; - -public class GT_Item_Casings_Spacetime extends GT_Item_Casings_Abstract { - - public GT_Item_Casings_Spacetime(Block par1) { - super(par1); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - switch (aStack.getItemDamage()) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - aList.add( - GT_LanguageManager.addStringLocalization( - "EOH.Spacetime.Standard.Tooltip.0", - "Supports an internal spacetime volume of up to ") - + formatNumbers(pow(10, 5 + aStack.getItemDamage())) - + "km³."); - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + GT_LanguageManager.addStringLocalization( - "EOH.Spacetime.Standard.Tooltip.1", - "Capable of running recipes up to tier ") - + (aStack.getItemDamage() + 1)); - break; - default: - aList.add( - EnumChatFormatting.RED.toString() + EnumChatFormatting.BOLD - + GT_LanguageManager - .addStringLocalization("EOH.TimeDilation.Error.Tooltip", "Error, report to GTNH team")); - } - aList.add(AuthorColen); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Stabilisation.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Stabilisation.java deleted file mode 100644 index 6bd86524a1..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_Stabilisation.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static gregtech.api.enums.GT_Values.AuthorColen; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Item_Casings_Abstract; - -public class GT_Item_Casings_Stabilisation extends GT_Item_Casings_Abstract { - - public GT_Item_Casings_Stabilisation(Block par1) { - super(par1); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - switch (aStack.getItemDamage()) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + GT_LanguageManager.addStringLocalization( - "EOH.Stability.Tooltip.0", - "Increases stability of spacetime field.")); - break; - default: - aList.add( - EnumChatFormatting.RED.toString() + EnumChatFormatting.BOLD - + GT_LanguageManager - .addStringLocalization("EOH.TimeDilation.Error.Tooltip", "Error, report to GTNH team")); - } - aList.add(AuthorColen); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_TimeAcceleration.java b/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_TimeAcceleration.java deleted file mode 100644 index 994f40b9e7..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/GT_Item_Casings_TimeAcceleration.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static gregtech.api.enums.GT_Values.AuthorColen; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Item_Casings_Abstract; - -public class GT_Item_Casings_TimeAcceleration extends GT_Item_Casings_Abstract { - - public GT_Item_Casings_TimeAcceleration(Block par1) { - super(par1); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - switch (aStack.getItemDamage()) { - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + GT_LanguageManager - .addStringLocalization("EOH.TimeDilation.Standard.Tooltip", "Time dilation in a box.")); - break; - default: - aList.add( - EnumChatFormatting.RED.toString() + EnumChatFormatting.BOLD - + GT_LanguageManager - .addStringLocalization("EOH.TimeDilation.Error.Tooltip", "Error, report to GTNH team")); - } - aList.add(AuthorColen); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/GodforgeCasings.java b/src/main/java/com/github/technus/tectech/thing/casing/GodforgeCasings.java deleted file mode 100644 index df89071d80..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/GodforgeCasings.java +++ /dev/null @@ -1,131 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import com.github.technus.tectech.thing.CustomItemList; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.objects.GT_CopiedBlockTexture; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Block_Casings_Abstract; -import gregtech.common.blocks.GT_Material_Casings; - -public class GodforgeCasings extends GT_Block_Casings_Abstract { - - private static IIcon GodforgeTrim; - private static IIcon GodforgeInner; - private static IIcon GodforgeSupport; - private static IIcon GodforgeOuter; - private static IIcon GodforgeEnergy; - private static IIcon GravitonModulatorT1; - private static IIcon GravitonModulatorT2; - private static IIcon GravitonModulatorT3; - private static IIcon PhononConduit; - - private static final byte START_INDEX = 64; - - public GodforgeCasings() { - super(GT_Item_Casings_Godforge.class, "gt.godforgecasing", GT_Material_Casings.INSTANCE); - for (byte b = 0; b < 16; b = (byte) (b + 1)) { - Textures.BlockIcons.casingTexturePages[7][b + START_INDEX] = new GT_CopiedBlockTexture(this, 6, b); - } - - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".0.name", "Singularity Reinforced Stellar Shielding Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Celestial Matter Guidance Casing"); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + ".2.name", - "Boundless Gravitationally Severed Structure Casing"); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + ".3.name", - "Transcendentally Amplified Magnetic Confinement Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Stellar Energy Siphon Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Remote Graviton Flow Modulator"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Medial Graviton Flow Modulator"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Central Graviton Flow Modulator"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".8.name", "Harmonic Phonon Transmission Conduit"); - - CustomItemList.Godforge_SingularityShieldingCasing.set(new ItemStack(this, 1, 0)); - CustomItemList.Godforge_GuidanceCasing.set(new ItemStack(this, 1, 1)); - CustomItemList.Godforge_BoundlessStructureCasing.set(new ItemStack(this, 1, 2)); - CustomItemList.Godforge_MagneticConfinementCasing.set(new ItemStack(this, 1, 3)); - CustomItemList.Godforge_StellarEnergySiphonCasing.set(new ItemStack(this, 1, 4)); - CustomItemList.Godforge_GravitonFlowModulatorTier1.set(new ItemStack(this, 1, 5)); - CustomItemList.Godforge_GravitonFlowModulatorTier2.set(new ItemStack(this, 1, 6)); - CustomItemList.Godforge_GravitonFlowModulatorTier3.set(new ItemStack(this, 1, 7)); - CustomItemList.Godforge_HarmonicPhononTransmissionConduit.set(new ItemStack(this, 1, 8)); - } - - @Override - public void registerBlockIcons(IIconRegister aIconRegister) { - GodforgeTrim = aIconRegister.registerIcon("gregtech:iconsets/GODFORGE_TRIM"); - GodforgeInner = aIconRegister.registerIcon("gregtech:iconsets/GODFORGE_INNER"); - GodforgeSupport = aIconRegister.registerIcon("gregtech:iconsets/GODFORGE_SUPPORT"); - GodforgeOuter = aIconRegister.registerIcon("gregtech:iconsets/GRAVITON_TOP_BOTTOM"); - GodforgeEnergy = aIconRegister.registerIcon("gregtech:iconsets/GODFORGE_ENERGY"); - GravitonModulatorT1 = aIconRegister.registerIcon("gregtech:iconsets/GRAVITON_CASING_2"); - GravitonModulatorT2 = aIconRegister.registerIcon("gregtech:iconsets/GRAVITON_CASING_1"); - GravitonModulatorT3 = aIconRegister.registerIcon("gregtech:iconsets/GRAVITON_CASING_0"); - PhononConduit = aIconRegister.registerIcon("gregtech:iconsets/PHONON_CONDUIT"); - } - - @Override - public IIcon getIcon(int aSide, int aMeta) { - switch (aMeta) { - case 0: - return GodforgeTrim; - case 1: - return GodforgeInner; - case 2: - return GodforgeSupport; - case 3: - return GodforgeOuter; - case 4: - return GodforgeEnergy; - case 5: - if (aSide < 2) { - return GodforgeOuter; - } - return GravitonModulatorT1; - case 6: - if (aSide < 2) { - return GodforgeOuter; - } - return GravitonModulatorT2; - case 7: - if (aSide < 2) { - return GodforgeOuter; - } - return GravitonModulatorT3; - case 8: - return PhononConduit; - default: - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int aSide) { - int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); - return getIcon(aSide, tMeta); - } - - @SuppressWarnings("unchecked") - @Override - public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - for (int i = 0; i <= 8; i++) { - aList.add(new ItemStack(aItem, 1, i)); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/SpacetimeCompressionFieldCasing.java b/src/main/java/com/github/technus/tectech/thing/casing/SpacetimeCompressionFieldCasing.java deleted file mode 100644 index 6d00822c19..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/SpacetimeCompressionFieldCasing.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static com.github.technus.tectech.util.CommonValues.EOH_TIER_FANCY_NAMES; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.EnumChatFormatting.WHITE; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import com.github.technus.tectech.thing.CustomItemList; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.objects.GT_CopiedBlockTexture; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Block_Casings_Abstract; -import gregtech.common.blocks.GT_Material_Casings; - -@SuppressWarnings("SpellCheckingInspection") -public class SpacetimeCompressionFieldCasing extends GT_Block_Casings_Abstract { - - private static IIcon textureTier0; - private static IIcon textureTier1; - private static IIcon textureTier2; - private static IIcon textureTier3; - private static IIcon textureTier4; - private static IIcon textureTier5; - private static IIcon textureTier6; - private static IIcon textureTier7; - private static IIcon textureTier8; - private static final int MAX_BLOCK_TIER = 9; - - private static final byte START_INDEX = 16; - - public SpacetimeCompressionFieldCasing() { - super( - GT_Item_Casings_Spacetime.class, - "gt.spacetime_compression_field_generator", - GT_Material_Casings.INSTANCE); - for (byte b = 0; b < 16; b = (byte) (b + 1)) { - Textures.BlockIcons.casingTexturePages[7][b + START_INDEX] = new GT_CopiedBlockTexture(this, 6, b); - } - - for (int i = 0; i < MAX_BLOCK_TIER; i++) { - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + "." + i + ".name", - WHITE + EOH_TIER_FANCY_NAMES[i] + RESET + " Spacetime Compression Field Generator"); - } - - CustomItemList.SpacetimeCompressionFieldGeneratorTier0.set(new ItemStack(this, 1, 0)); - CustomItemList.SpacetimeCompressionFieldGeneratorTier1.set(new ItemStack(this, 1, 1)); - CustomItemList.SpacetimeCompressionFieldGeneratorTier2.set(new ItemStack(this, 1, 2)); - CustomItemList.SpacetimeCompressionFieldGeneratorTier3.set(new ItemStack(this, 1, 3)); - CustomItemList.SpacetimeCompressionFieldGeneratorTier4.set(new ItemStack(this, 1, 4)); - CustomItemList.SpacetimeCompressionFieldGeneratorTier5.set(new ItemStack(this, 1, 5)); - CustomItemList.SpacetimeCompressionFieldGeneratorTier6.set(new ItemStack(this, 1, 6)); - CustomItemList.SpacetimeCompressionFieldGeneratorTier7.set(new ItemStack(this, 1, 7)); - CustomItemList.SpacetimeCompressionFieldGeneratorTier8.set(new ItemStack(this, 1, 8)); - } - - @Override - public void registerBlockIcons(IIconRegister aIconRegister) { - textureTier0 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_0"); - textureTier1 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_1"); - textureTier2 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_2"); - textureTier3 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_3"); - textureTier4 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_4"); - textureTier5 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_5"); - textureTier6 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_6"); - textureTier7 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_7"); - textureTier8 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_8"); - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - switch (aMeta) { - case 0: - return textureTier0; - case 1: - return textureTier1; - case 2: - return textureTier2; - case 3: - return textureTier3; - case 4: - return textureTier4; - case 5: - return textureTier5; - case 6: - return textureTier6; - case 7: - return textureTier7; - case 8: - return textureTier8; - default: - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { - int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); - return getIcon(ordinalSide, tMeta); - } - - @Override - public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - for (int i = 0; i < MAX_BLOCK_TIER; i++) { - aList.add(new ItemStack(aItem, 1, i)); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/StabilisationFieldCasing.java b/src/main/java/com/github/technus/tectech/thing/casing/StabilisationFieldCasing.java deleted file mode 100644 index ed35e82b83..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/StabilisationFieldCasing.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static com.github.technus.tectech.util.CommonValues.EOH_TIER_FANCY_NAMES; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.EnumChatFormatting.WHITE; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import com.github.technus.tectech.thing.CustomItemList; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.objects.GT_CopiedBlockTexture; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Block_Casings_Abstract; -import gregtech.common.blocks.GT_Material_Casings; - -@SuppressWarnings("SpellCheckingInspection") -public class StabilisationFieldCasing extends GT_Block_Casings_Abstract { - - private static IIcon textureTier0; - private static IIcon textureTier1; - private static IIcon textureTier2; - private static IIcon textureTier3; - private static IIcon textureTier4; - private static IIcon textureTier5; - private static IIcon textureTier6; - private static IIcon textureTier7; - private static IIcon textureTier8; - private static final int MAX_BLOCK_TIER = 9; - - private static final byte START_INDEX = 32; - - public StabilisationFieldCasing() { - super(GT_Item_Casings_Stabilisation.class, "gt.stabilisation_field_generator", GT_Material_Casings.INSTANCE); - for (byte b = 0; b < 16; b = (byte) (b + 1)) { - Textures.BlockIcons.casingTexturePages[7][b + START_INDEX] = new GT_CopiedBlockTexture(this, 6, b); - } - - for (int i = 0; i < MAX_BLOCK_TIER; i++) { - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + "." + i + ".name", - WHITE + EOH_TIER_FANCY_NAMES[i] + RESET + " Stabilisation Field Generator"); - } - - CustomItemList.StabilisationFieldGeneratorTier0.set(new ItemStack(this, 1, 0)); - CustomItemList.StabilisationFieldGeneratorTier1.set(new ItemStack(this, 1, 1)); - CustomItemList.StabilisationFieldGeneratorTier2.set(new ItemStack(this, 1, 2)); - CustomItemList.StabilisationFieldGeneratorTier3.set(new ItemStack(this, 1, 3)); - CustomItemList.StabilisationFieldGeneratorTier4.set(new ItemStack(this, 1, 4)); - CustomItemList.StabilisationFieldGeneratorTier5.set(new ItemStack(this, 1, 5)); - CustomItemList.StabilisationFieldGeneratorTier6.set(new ItemStack(this, 1, 6)); - CustomItemList.StabilisationFieldGeneratorTier7.set(new ItemStack(this, 1, 7)); - CustomItemList.StabilisationFieldGeneratorTier8.set(new ItemStack(this, 1, 8)); - } - - @Override - public void registerBlockIcons(IIconRegister aIconRegister) { - textureTier0 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_0"); - textureTier1 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_1"); - textureTier2 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_2"); - textureTier3 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_3"); - textureTier4 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_4"); - textureTier5 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_5"); - textureTier6 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_6"); - textureTier7 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_7"); - textureTier8 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_8"); - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - switch (aMeta) { - case 0: - return textureTier0; - case 1: - return textureTier1; - case 2: - return textureTier2; - case 3: - return textureTier3; - case 4: - return textureTier4; - case 5: - return textureTier5; - case 6: - return textureTier6; - case 7: - return textureTier7; - case 8: - return textureTier8; - default: - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { - int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); - return getIcon(ordinalSide, tMeta); - } - - @Override - public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - for (int i = 0; i < MAX_BLOCK_TIER; i++) { - aList.add(new ItemStack(aItem, 1, i)); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/TT_Container_Casings.java b/src/main/java/com/github/technus/tectech/thing/casing/TT_Container_Casings.java deleted file mode 100644 index 009a9f4255..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/TT_Container_Casings.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import net.minecraft.block.Block; - -import com.github.technus.tectech.thing.block.EOH_RenderBlock; -import com.github.technus.tectech.thing.block.ForgeOfGodsBlock; - -/** - * Created by danie_000 on 03.10.2016. - */ -public final class TT_Container_Casings { - - public static Block sBlockCasingsTT; - - public static Block sBlockCasingsBA0; - - public static Block sBlockCasingsNH; - public static Block TimeAccelerationFieldGenerator; - public static Block SpacetimeCompressionFieldGenerators; - public static Block StabilisationFieldGenerators; - - public static Block eyeOfHarmonyRenderBlock = new EOH_RenderBlock(); - public static Block forgeOfGodsRenderBlock = new ForgeOfGodsBlock(); - - public static Block GodforgeCasings; - - private TT_Container_Casings() {} -} diff --git a/src/main/java/com/github/technus/tectech/thing/casing/TimeAccelerationFieldCasing.java b/src/main/java/com/github/technus/tectech/thing/casing/TimeAccelerationFieldCasing.java deleted file mode 100644 index 739fe300a9..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/casing/TimeAccelerationFieldCasing.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.github.technus.tectech.thing.casing; - -import static com.github.technus.tectech.util.CommonValues.EOH_TIER_FANCY_NAMES; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.EnumChatFormatting.WHITE; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import com.github.technus.tectech.thing.CustomItemList; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.objects.GT_CopiedBlockTexture; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Block_Casings_Abstract; -import gregtech.common.blocks.GT_Material_Casings; - -@SuppressWarnings("SpellCheckingInspection") -public class TimeAccelerationFieldCasing extends GT_Block_Casings_Abstract { - - private static IIcon textureTier0; - private static IIcon textureTier1; - private static IIcon textureTier2; - private static IIcon textureTier3; - private static IIcon textureTier4; - private static IIcon textureTier5; - private static IIcon textureTier6; - private static IIcon textureTier7; - private static IIcon textureTier8; - private static final int MAX_BLOCK_TIER = 9; - - private static final byte START_INDEX = 48; - - public TimeAccelerationFieldCasing() { - super( - GT_Item_Casings_TimeAcceleration.class, - "gt.time_acceleration_field_generator", - GT_Material_Casings.INSTANCE); - for (byte b = 0; b < 16; b = (byte) (b + 1)) { - Textures.BlockIcons.casingTexturePages[7][b + START_INDEX] = new GT_CopiedBlockTexture(this, 6, b); - } - - for (int i = 0; i < MAX_BLOCK_TIER; i++) { - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + "." + i + ".name", - WHITE + EOH_TIER_FANCY_NAMES[i] + RESET + " Time Dilation Field Generator"); - } - - CustomItemList.TimeAccelerationFieldGeneratorTier0.set(new ItemStack(this, 1, 0)); - CustomItemList.TimeAccelerationFieldGeneratorTier1.set(new ItemStack(this, 1, 1)); - CustomItemList.TimeAccelerationFieldGeneratorTier2.set(new ItemStack(this, 1, 2)); - CustomItemList.TimeAccelerationFieldGeneratorTier3.set(new ItemStack(this, 1, 3)); - CustomItemList.TimeAccelerationFieldGeneratorTier4.set(new ItemStack(this, 1, 4)); - CustomItemList.TimeAccelerationFieldGeneratorTier5.set(new ItemStack(this, 1, 5)); - CustomItemList.TimeAccelerationFieldGeneratorTier6.set(new ItemStack(this, 1, 6)); - CustomItemList.TimeAccelerationFieldGeneratorTier7.set(new ItemStack(this, 1, 7)); - CustomItemList.TimeAccelerationFieldGeneratorTier8.set(new ItemStack(this, 1, 8)); - } - - @Override - public void registerBlockIcons(IIconRegister aIconRegister) { - textureTier0 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_0"); - textureTier1 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_1"); - textureTier2 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_2"); - textureTier3 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_3"); - textureTier4 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_4"); - textureTier5 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_5"); - textureTier6 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_6"); - textureTier7 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_7"); - textureTier8 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_8"); - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - switch (aMeta) { - case 0: - return textureTier0; - case 1: - return textureTier1; - case 2: - return textureTier2; - case 3: - return textureTier3; - case 4: - return textureTier4; - case 5: - return textureTier5; - case 6: - return textureTier6; - case 7: - return textureTier7; - case 8: - return textureTier8; - default: - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { - int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); - return getIcon(ordinalSide, tMeta); - } - - @Override - public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - for (int i = 0; i < MAX_BLOCK_TIER; i++) { - aList.add(new ItemStack(aItem, 1, i)); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java deleted file mode 100644 index a2589e904a..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_EnderFluidLink.java +++ /dev/null @@ -1,247 +0,0 @@ -package com.github.technus.tectech.thing.cover; - -import static com.github.technus.tectech.mechanics.enderStorage.EnderWorldSavedData.getEnderFluidContainer; -import static com.github.technus.tectech.mechanics.enderStorage.EnderWorldSavedData.getEnderLinkTag; - -import java.util.UUID; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; - -import com.github.technus.tectech.mechanics.enderStorage.EnderLinkTag; -import com.github.technus.tectech.mechanics.enderStorage.EnderWorldSavedData; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; - -import eu.usrv.yamcore.auxiliary.PlayerChatHelper; -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -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 gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; - -public class GT_Cover_TM_EnderFluidLink extends GT_CoverBehavior { - - private static final int L_PER_TICK = 8000; - private static final int IMPORT_EXPORT_MASK = 0b0001; - private static final int PUBLIC_PRIVATE_MASK = 0b0010; - - public GT_Cover_TM_EnderFluidLink() {} - - private void transferFluid(IFluidHandler source, ForgeDirection side, IFluidHandler target, ForgeDirection tSide, - int amount) { - FluidStack fluidStack = source.drain(side, amount, false); - - if (fluidStack != null) { - int fluidTransferred = target.fill(tSide, fluidStack, true); - source.drain(side, fluidTransferred, true); - } - } - - private boolean testBit(int aCoverVariable, int bitMask) { - return (aCoverVariable & bitMask) != 0; - } - - private int toggleBit(int aCoverVariable, int bitMask) { - return (aCoverVariable ^ bitMask); - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if ((aTileEntity instanceof IFluidHandler fluidHandlerSelf)) { - IFluidHandler fluidHandlerEnder = getEnderFluidContainer(getEnderLinkTag((IFluidHandler) aTileEntity)); - - if (testBit(aCoverVariable, IMPORT_EXPORT_MASK)) { - transferFluid(fluidHandlerEnder, ForgeDirection.UNKNOWN, fluidHandlerSelf, side, L_PER_TICK); - } else { - transferFluid(fluidHandlerSelf, side, fluidHandlerEnder, ForgeDirection.UNKNOWN, L_PER_TICK); - } - } - return aCoverVariable; - } - - @Override - public String getDescription(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return ""; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - int newCoverVariable = toggleBit(aCoverVariable, IMPORT_EXPORT_MASK); - - if (testBit(aCoverVariable, IMPORT_EXPORT_MASK)) { - PlayerChatHelper.SendInfo(aPlayer, "Ender Suction Engaged!"); // TODO Translation support - } else { - PlayerChatHelper.SendInfo(aPlayer, "Ender Filling Engaged!"); - } - return newCoverVariable; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - // Runs each tick - return 1; - } - - // region GUI - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - // Only open gui if we're placed on a fluid tank - if (buildContext.getTile() instanceof IFluidHandler) { - return new EnderFluidLinkUIFactory(buildContext).createWindow(); - } - return null; - } - - private class EnderFluidLinkUIFactory extends UIFactory { - - private static final int START_X = 10; - private static final int START_Y = 25; - private static final int SPACE_X = 18; - private static final int SPACE_Y = 18; - private static final int PUBLIC_BUTTON_ID = 0; - private static final int PRIVATE_BUTTON_ID = 1; - private static final int IMPORT_BUTTON_ID = 2; - private static final int EXPORT_BUTTON_ID = 3; - - public EnderFluidLinkUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - TextFieldWidget frequencyField = new TextFieldWidget(); - builder.widget(frequencyField.setGetter(() -> { - ICoverable te = getUIBuildContext().getTile(); - if (!frequencyField.isClient() && te instanceof IFluidHandler) { - return EnderWorldSavedData.getEnderLinkTag((IFluidHandler) te) - .getFrequency(); - } - return ""; - }) - .setSetter(val -> { - ICoverable te = getUIBuildContext().getTile(); - if (!frequencyField.isClient() && te instanceof IFluidHandler) { - UUID uuid; - if (testBit(convert(getCoverData()), PUBLIC_PRIVATE_MASK)) { - uuid = getUUID(); - if (!(te instanceof IGregTechTileEntity)) return; - if (!uuid.equals(((IGregTechTileEntity) te).getOwnerUuid())) return; - } else { - uuid = null; - } - EnderWorldSavedData.bindEnderLinkTag((IFluidHandler) te, new EnderLinkTag(val, uuid)); - } - }) - .setTextColor(Color.WHITE.dark(1)) - .setTextAlignment(Alignment.CenterLeft) - .setFocusOnGuiOpen(true) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) - .setPos(START_X + SPACE_X * 0, START_Y + SPACE_Y * 0) - .setSize(SPACE_X * 5 - 8, 12)) - .widget( - new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( - this::getCoverData, - this::setCoverData, - GT_Cover_TM_EnderFluidLink.this, - (id, coverData) -> !getClickable(id, convert(coverData)), - (id, coverData) -> new ISerializableObject.LegacyCoverData( - getNewCoverVariable(id, convert(coverData)))) - .addToggleButton( - PUBLIC_BUTTON_ID, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_WHITELIST) - .addTooltip(GT_Utility.trans("326", "Public")) - .setPos(START_X + SPACE_X * 0, START_Y + SPACE_Y * 2)) - .addToggleButton( - PRIVATE_BUTTON_ID, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_BLACKLIST) - .addTooltip(GT_Utility.trans("327", "Private")) - .setPos(START_X + SPACE_X * 1, START_Y + SPACE_Y * 2)) - .addToggleButton( - IMPORT_BUTTON_ID, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT) - .addTooltip(GT_Utility.trans("007", "Import")) - .setPos(START_X + SPACE_X * 0, START_Y + SPACE_Y * 3)) - .addToggleButton( - EXPORT_BUTTON_ID, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT) - .addTooltip(GT_Utility.trans("006", "Export")) - .setPos(START_X + SPACE_X * 1, START_Y + SPACE_Y * 3))) - .widget( - new TextWidget(GT_Utility.trans("328", "Channel")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(START_X + SPACE_X * 5, 4 + START_Y + SPACE_Y * 0)) - .widget( - new TextWidget(GT_Utility.trans("329", "Public/Private")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(START_X + SPACE_X * 2, 4 + START_Y + SPACE_Y * 2)) - .widget( - new TextWidget(GT_Utility.trans("229", "Import/Export")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(START_X + SPACE_X * 2, 4 + START_Y + SPACE_Y * 3)); - } - - private int getNewCoverVariable(int id, int coverVariable) { - switch (id) { - case PUBLIC_BUTTON_ID: - case PRIVATE_BUTTON_ID: - return toggleBit(coverVariable, PUBLIC_PRIVATE_MASK); - case IMPORT_BUTTON_ID: - case EXPORT_BUTTON_ID: - return toggleBit(coverVariable, IMPORT_EXPORT_MASK); - } - return coverVariable; - } - - private boolean getClickable(int id, int coverVariable) { - switch (id) { - case PUBLIC_BUTTON_ID: - return testBit(coverVariable, PUBLIC_PRIVATE_MASK); - case PRIVATE_BUTTON_ID: - return !testBit(coverVariable, PUBLIC_PRIVATE_MASK); - case IMPORT_BUTTON_ID: - return testBit(coverVariable, IMPORT_EXPORT_MASK); - case EXPORT_BUTTON_ID: - return !testBit(coverVariable, IMPORT_EXPORT_MASK); - } - return false; - } - - private UUID getUUID() { - return getUIBuildContext().getPlayer() - .getUniqueID(); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_PowerPassUpgrade.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_PowerPassUpgrade.java deleted file mode 100644 index ef867e9a35..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_PowerPassUpgrade.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.github.technus.tectech.thing.cover; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; - -public class GT_Cover_TM_PowerPassUpgrade extends GT_CoverBehavior { - - public GT_Cover_TM_PowerPassUpgrade() {} - - @Override - public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { - IMetaTileEntity iGregTechTileEntityOffset = aTileEntity.getIGregTechTileEntityOffset(0, 0, 0) - .getMetaTileEntity(); - if (iGregTechTileEntityOffset instanceof GT_MetaTileEntity_MultiblockBase_EM multi) { - return !multi.ePowerPassCover; - } - return false; - } - - @Override - public void placeCover(ForgeDirection side, ItemStack aCover, ICoverable aTileEntity) { - IMetaTileEntity iGregTechTileEntityOffset = aTileEntity.getIGregTechTileEntityOffset(0, 0, 0) - .getMetaTileEntity(); - if (iGregTechTileEntityOffset instanceof GT_MetaTileEntity_MultiblockBase_EM multi) { - multi.ePowerPassCover = true; - multi.ePowerPass = true; - } - super.placeCover(side, aCover, aTileEntity); - } - - @Override - public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - boolean aForced) { - IMetaTileEntity iGregTechTileEntityOffset = aTileEntity.getIGregTechTileEntityOffset(0, 0, 0) - .getMetaTileEntity(); - if (iGregTechTileEntityOffset instanceof GT_MetaTileEntity_MultiblockBase_EM multi) { - multi.ePowerPassCover = false; - multi.ePowerPass = false; - } - return true; - } - - @Deprecated - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 0; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java deleted file mode 100644 index 381aa1d730..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.github.technus.tectech.thing.cover; - -import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetAdd; -import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetRemove; -import static ic2.api.info.Info.DMG_ELECTRIC; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.mechanics.tesla.TeslaCoverConnection; - -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; - -public class GT_Cover_TM_TeslaCoil extends GT_CoverBehavior { - - public GT_Cover_TM_TeslaCoil() {} - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - // Only do stuff if we're on top and have power - if (side == ForgeDirection.UP || aTileEntity.getEUCapacity() > 0) { - // Makes sure we're on the list - teslaSimpleNodeSetAdd( - new TeslaCoverConnection( - aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), - getTeslaReceptionCapability())); - } - return super.doCoverThings(side, aInputRedstone, aCoverID, aCoverVariable, aTileEntity, aTimer); - } - - @Override - public void onCoverUnload(ICoverable aTileEntity) { - if (!aTileEntity.isClientSide()) { - teslaSimpleNodeSetRemove( - new TeslaCoverConnection( - aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), - getTeslaReceptionCapability())); - } - } - - @Override - public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - boolean aForced) { - teslaSimpleNodeSetRemove( - new TeslaCoverConnection(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), getTeslaReceptionCapability())); - return super.onCoverRemoval(side, aCoverID, aCoverVariable, aTileEntity, aForced); - } - - @Override - public void onBaseTEDestroyed(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - teslaSimpleNodeSetRemove( - new TeslaCoverConnection(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), getTeslaReceptionCapability())); - } - - @Override - public String getDescription(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return "Do not attempt to use screwdriver!"; // TODO Translation support - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - // Shock a non-hazmat player if they dare stuff a screwdriver into one of these - if (aTileEntity.getStoredEU() > 0 && !GT_Utility.isWearingFullElectroHazmat(aPlayer)) { - aPlayer.attackEntityFrom(DMG_ELECTRIC, 20); - } - return aCoverVariable; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - // It updates once every 10 ticks, so once every 0.5 second - return 10; - } - - public byte getTeslaReceptionCapability() { - return 2; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java deleted file mode 100644 index 7169cb61fb..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil_Ultimate.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.github.technus.tectech.thing.cover; - -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import gregtech.api.interfaces.tileentity.ICoverable; - -public class GT_Cover_TM_TeslaCoil_Ultimate extends GT_Cover_TM_TeslaCoil { - - public GT_Cover_TM_TeslaCoil_Ultimate() {} - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - public byte getTeslaReceptionCapability() { - return 1; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/gui/TecTechUITextures.java b/src/main/java/com/github/technus/tectech/thing/gui/TecTechUITextures.java deleted file mode 100644 index b9f18e4e48..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/gui/TecTechUITextures.java +++ /dev/null @@ -1,192 +0,0 @@ -package com.github.technus.tectech.thing.gui; - -import static com.github.technus.tectech.Reference.MODID; - -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import com.gtnewhorizons.modularui.api.drawable.AdaptableUITexture; -import com.gtnewhorizons.modularui.api.drawable.UITexture; - -@SuppressWarnings("SimplifyStreamApiCallChains") -public class TecTechUITextures { - - public static final AdaptableUITexture BACKGROUND_SCREEN_BLUE = AdaptableUITexture - .of(MODID, "gui/background/screen_blue", 90, 72, 2); - public static final UITexture BACKGROUND_SCREEN_BLUE_PARAMETRIZER_TXT = UITexture - .fullImage(MODID, "gui/background/screen_blue_parametrizer_txt"); - public static final UITexture BACKGROUND_SCREEN_BLUE_NO_INVENTORY = UITexture - .fullImage(MODID, "gui/background/screen_blue_no_inventory"); - public static final UITexture BACKGROUND_STAR = UITexture.fullImage(MODID, "gui/background/star"); - public static final UITexture BACKGROUND_GLOW_ORANGE = UITexture.fullImage(MODID, "gui/background/orange_glow"); - public static final UITexture BACKGROUND_GLOW_PURPLE = UITexture.fullImage(MODID, "gui/background/purple_glow"); - public static final UITexture BACKGROUND_GLOW_BLUE = UITexture.fullImage(MODID, "gui/background/blue_glow"); - public static final UITexture BACKGROUND_GLOW_GREEN = UITexture.fullImage(MODID, "gui/background/green_glow"); - public static final UITexture BACKGROUND_GLOW_WHITE = UITexture.fullImage(MODID, "gui/background/white_glow"); - public static final UITexture BACKGROUND_SPACE = UITexture.fullImage(MODID, "gui/background/space"); - - public static final UITexture BUTTON_STANDARD_16x16 = UITexture.fullImage(MODID, "gui/button/standard_16x16"); - public static final UITexture BUTTON_STANDARD_LIGHT_16x16 = UITexture - .fullImage(MODID, "gui/button/standard_light_16x16"); - public static final UITexture BUTTON_CELESTIAL_32x32 = UITexture.fullImage(MODID, "gui/button/celestial"); - public static final UITexture BUTTON_SPACE_32x16 = UITexture.fullImage(MODID, "gui/button/purple"); - public static final UITexture BUTTON_SPACE_PRESSED_32x16 = UITexture.fullImage(MODID, "gui/button/purple_pressed"); - public static final UITexture BUTTON_BOXED_CHECKMARK_18x18 = UITexture - .fullImage(MODID, "gui/button/boxed_checkmark"); - public static final UITexture BUTTON_BOXED_EXCLAMATION_POINT_18x18 = UITexture - .fullImage(MODID, "gui/button/boxed_exclamation_point"); - public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_DISABLED = UITexture - .fullImage(MODID, "gui/overlay_button/power_switch_disabled"); - public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_OFF = UITexture - .fullImage(MODID, "gui/overlay_button/power_switch_off"); - public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_ON = UITexture - .fullImage(MODID, "gui/overlay_button/power_switch_on"); - public static final UITexture OVERLAY_BUTTON_HEAT_OFF = UITexture.fullImage(MODID, "gui/overlay_button/heat_off"); - public static final UITexture OVERLAY_BUTTON_HEAT_ON = UITexture.fullImage(MODID, "gui/overlay_button/heat_on"); - public static final UITexture[] OVERLAY_BUTTON_UNCERTAINTY = IntStream.range(0, 16) - .mapToObj(i -> UITexture.fullImage(MODID, "gui/overlay_button/uncertainty/" + i)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - public static final UITexture OVERLAY_BUTTON_SAFE_VOID_DISABLED = UITexture - .fullImage(MODID, "gui/overlay_button/safe_void_disabled"); - public static final UITexture OVERLAY_BUTTON_SAFE_VOID_OFF = UITexture - .fullImage(MODID, "gui/overlay_button/safe_void_off"); - public static final UITexture OVERLAY_BUTTON_SAFE_VOID_ON = UITexture - .fullImage(MODID, "gui/overlay_button/safe_void_on"); - public static final UITexture OVERLAY_BUTTON_POWER_PASS_DISABLED = UITexture - .fullImage(MODID, "gui/overlay_button/power_pass_disabled"); - public static final UITexture OVERLAY_BUTTON_POWER_PASS_OFF = UITexture - .fullImage(MODID, "gui/overlay_button/power_pass_off"); - public static final UITexture OVERLAY_BUTTON_POWER_PASS_ON = UITexture - .fullImage(MODID, "gui/overlay_button/power_pass_on"); - public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_ID = UITexture - .fullImage(MODID, "gui/overlay_button/parametrizer_id"); - public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_0 = UITexture - .fullImage(MODID, "gui/overlay_button/parametrizer_0"); - public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_1 = UITexture - .fullImage(MODID, "gui/overlay_button/parametrizer_1"); - public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_X = UITexture - .fullImage(MODID, "gui/overlay_button/parametrizer_x"); - public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_S = UITexture - .fullImage(MODID, "gui/overlay_button/parametrizer_s"); - public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_T = UITexture - .fullImage(MODID, "gui/overlay_button/parametrizer_t"); - public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_C = UITexture - .fullImage(MODID, "gui/overlay_button/parametrizer_c"); - public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_IF = UITexture - .fullImage(MODID, "gui/overlay_button/parametrizer_if"); - public static final UITexture OVERLAY_BUTTON_ARROW_BLUE_UP = UITexture - .fullImage(MODID, "gui/overlay_button/arrow_blue_up"); - public static final UITexture OVERLAY_BUTTON_BATTERY_ON = UITexture - .fullImage(MODID, "gui/overlay_button/battery_on"); - public static final UITexture OVERLAY_BUTTON_BATTERY_OFF = UITexture - .fullImage(MODID, "gui/overlay_button/battery_off"); - public static final UITexture OVERLAY_BUTTON_FLAG = UITexture.fullImage(MODID, "gui/overlay_button/flag"); - public static final UITexture OVERLAY_CYCLIC_BLUE = UITexture.fullImage(MODID, "gui/overlay_button/cyclic_blue"); - public static final UITexture OVERLAY_EJECTION_LOCKED = UITexture - .fullImage(MODID, "gui/overlay_button/eject_disabled"); - public static final UITexture OVERLAY_EJECTION_ON = UITexture.fullImage(MODID, "gui/overlay_button/eject"); - - public static final UITexture OVERLAY_SLOT_RACK = UITexture.fullImage(MODID, "gui/overlay_slot/rack"); - public static final UITexture OVERLAY_SLOT_MESH = UITexture.fullImage(MODID, "gui/overlay_slot/mesh"); - - public static final UITexture PROGRESSBAR_RESEARCH_STATION_1 = UITexture - .fullImage(MODID, "gui/progressbar/research_station_1"); - public static final UITexture PROGRESSBAR_RESEARCH_STATION_2 = UITexture - .fullImage(MODID, "gui/progressbar/research_station_2"); - public static final UITexture PROGRESSBAR_RESEARCH_STATION_3 = UITexture - .fullImage(MODID, "gui/progressbar/research_station_3"); - public static final UITexture PROGRESSBAR_GODFORGE_PLASMA = UITexture - .fullImage(MODID, "gui/progressbar/godforge_plasma"); - public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND = UITexture - .fullImage(MODID, "gui/progressbar/godforge_progressbar_background"); - public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_BLUE = UITexture - .fullImage(MODID, "gui/progressbar/godforge_progressbar_blue"); - public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RED = UITexture - .fullImage(MODID, "gui/progressbar/godforge_progressbar_red"); - public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_PURPLE = UITexture - .fullImage(MODID, "gui/progressbar/godforge_progressbar_purple"); - public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW = UITexture - .fullImage(MODID, "gui/progressbar/godforge_progressbar_rainbow"); - public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_BLUE_INVERTED = UITexture - .fullImage(MODID, "gui/progressbar/godforge_progressbar_blue_inverted"); - public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RED_INVERTED = UITexture - .fullImage(MODID, "gui/progressbar/godforge_progressbar_red_inverted"); - public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_PURPLE_INVERTED = UITexture - .fullImage(MODID, "gui/progressbar/godforge_progressbar_purple_inverted"); - public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW_INVERTED = UITexture - .fullImage(MODID, "gui/progressbar/godforge_progressbar_rainbow_inverted"); - - public static final UITexture PICTURE_TECTECH_LOGO = UITexture.fullImage(MODID, "gui/picture/tectech_logo"); - public static final UITexture PICTURE_TECTECH_LOGO_DARK = UITexture - .fullImage(MODID, "gui/picture/tectech_logo_dark"); - public static final UITexture PICTURE_GODFORGE_LOGO = UITexture.fullImage(MODID, "gui/picture/gorge_logo"); - public static final UITexture PICTURE_RACK_LARGE = UITexture.fullImage(MODID, "gui/picture/rack_large"); - public static final UITexture PICTURE_HEAT_SINK = UITexture.fullImage(MODID, "gui/picture/heat_sink"); - public static final UITexture PICTURE_UNCERTAINTY_MONITOR = UITexture - .fullImage(MODID, "gui/picture/uncertainty/monitor"); - public static final UITexture PICTURE_UNCERTAINTY_INDICATOR = UITexture - .fullImage(MODID, "gui/picture/uncertainty/indicator"); - public static final UITexture PICTURE_UNCERTAINTY_SELECTED = UITexture - .fullImage(MODID, "gui/picture/uncertainty/selected"); - public static final UITexture[] PICTURE_UNCERTAINTY_VALID = IntStream.range(0, 9) - .mapToObj(i -> UITexture.fullImage(MODID, "gui/picture/uncertainty/valid_" + i)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - public static final UITexture[] PICTURE_UNCERTAINTY_INVALID = IntStream.range(0, 9) - .mapToObj(i -> UITexture.fullImage(MODID, "gui/picture/uncertainty/invalid_" + i)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - public static final UITexture PICTURE_HEAT_SINK_SMALL = UITexture.fullImage(MODID, "gui/picture/heat_sink_small"); - public static final UITexture PICTURE_PARAMETER_BLANK = UITexture.fullImage(MODID, "gui/picture/parameter_blank"); - public static final UITexture[] PICTURE_PARAMETER_BLUE = IntStream.range(0, 20) - .mapToObj(i -> UITexture.partly(MODID, "gui/picture/parameter_blue", 158, 4, i * 8, 0, i * 8 + 6, 4)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - public static final UITexture[] PICTURE_PARAMETER_CYAN = IntStream.range(0, 20) - .mapToObj(i -> UITexture.partly(MODID, "gui/picture/parameter_cyan", 158, 4, i * 8, 0, i * 8 + 6, 4)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - public static final UITexture[] PICTURE_PARAMETER_GREEN = IntStream.range(0, 20) - .mapToObj(i -> UITexture.partly(MODID, "gui/picture/parameter_green", 158, 4, i * 8, 0, i * 8 + 6, 4)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - public static final UITexture[] PICTURE_PARAMETER_ORANGE = IntStream.range(0, 20) - .mapToObj(i -> UITexture.partly(MODID, "gui/picture/parameter_orange", 158, 4, i * 8, 0, i * 8 + 6, 4)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - public static final UITexture[] PICTURE_PARAMETER_RED = IntStream.range(0, 20) - .mapToObj(i -> UITexture.partly(MODID, "gui/picture/parameter_red", 158, 4, i * 8, 0, i * 8 + 6, 4)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - public static final UITexture PICTURE_PARAMETER_GRAY = UITexture.fullImage(MODID, "gui/picture/parameter_gray"); - public static final UITexture PICTURE_UNCERTAINTY_MONITOR_MULTIMACHINE = UITexture - .fullImage(MODID, "gui/picture/uncertainty/monitor_multimachine"); - public static final UITexture PICTURE_UPGRADE_CONNECTOR_FULL = UITexture.fullImage(MODID, "gui/picture/connector"); - public static final UITexture PICTURE_UPGRADE_CONNECTOR_EMPTY = UITexture - .fullImage(MODID, "gui/picture/connector_empty"); - public static final UITexture PICTURE_UPGRADE_CONNECTOR_SWITCH = UITexture - .fullImage(MODID, "gui/picture/connector_switch"); - public static final UITexture SLOT_OUTLINE_GREEN = UITexture.fullImage(MODID, "gui/picture/green_selector"); - public static final UITexture PICTURE_GODFORGE_MILESTONE_CHARGE = UITexture - .fullImage(MODID, "gui/picture/milestone_charge"); - public static final UITexture PICTURE_GODFORGE_MILESTONE_CONVERSION = UITexture - .fullImage(MODID, "gui/picture/milestone_conversion"); - public static final UITexture PICTURE_GODFORGE_MILESTONE_CATALYST = UITexture - .fullImage(MODID, "gui/picture/milestone_catalyst"); - public static final UITexture PICTURE_GODFORGE_MILESTONE_COMPOSITION = UITexture - .fullImage(MODID, "gui/picture/milestone_composition"); - public static final UITexture PICTURE_GODFORGE_MILESTONE_CHARGE_GLOW = UITexture - .fullImage(MODID, "gui/picture/milestone_charge_glow"); - public static final UITexture PICTURE_GODFORGE_MILESTONE_CONVERSION_GLOW = UITexture - .fullImage(MODID, "gui/picture/milestone_conversion_glow"); - public static final UITexture PICTURE_GODFORGE_MILESTONE_CATALYST_GLOW = UITexture - .fullImage(MODID, "gui/picture/milestone_catalyst_glow"); - public static final UITexture PICTURE_GODFORGE_MILESTONE_COMPOSITION_GLOW = UITexture - .fullImage(MODID, "gui/picture/milestone_composition_glow"); - public static final UITexture PICTURE_OVERLAY_BLUE = UITexture.fullImage(MODID, "gui/picture/overlay_blue"); - public static final UITexture PICTURE_OVERLAY_ORANGE = UITexture.fullImage(MODID, "gui/picture/overlay_orange"); - public static final UITexture PICTURE_OVERLAY_GREEN = UITexture.fullImage(MODID, "gui/picture/overlay_green"); - public static final UITexture PICTURE_OVERLAY_PURPLE = UITexture.fullImage(MODID, "gui/picture/overlay_purple"); - -} diff --git a/src/main/java/com/github/technus/tectech/thing/item/AstralArrayFabricator.java b/src/main/java/com/github/technus/tectech/thing/item/AstralArrayFabricator.java deleted file mode 100644 index f0d0df6206..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/item/AstralArrayFabricator.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.github.technus.tectech.thing.item; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.TecTech.creativeTabTecTech; -import static com.github.technus.tectech.thing.CustomItemList.astralArrayFabricator; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class AstralArrayFabricator extends Item { - - public static AstralArrayFabricator INSTANCE; - - private AstralArrayFabricator() { - setHasSubtypes(false); - setUnlocalizedName("tm.itemAstralArrayFabricator"); - setTextureName(MODID + ":itemAstralArray"); - setCreativeTab(creativeTabTecTech); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { - aList.add(EnumChatFormatting.GRAY + translateToLocal("item.tm.itemAstralArrayFabricator.desc1")); - aList.add(EnumChatFormatting.GRAY + translateToLocal("item.tm.itemAstralArrayFabricator.desc2")); - aList.add(EnumChatFormatting.GRAY + translateToLocal("item.tm.itemAstralArrayFabricator.desc3")); - aList.add( - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("item.tm.itemAstralArrayFabricator.desc0")); - } - - public static void run() { - INSTANCE = new AstralArrayFabricator(); - GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); - astralArrayFabricator.set(INSTANCE); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - itemIcon = iconRegister.registerIcon(getIconString()); - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/item/EnderFluidLinkCover.java b/src/main/java/com/github/technus/tectech/thing/item/EnderFluidLinkCover.java deleted file mode 100644 index 00a1c29599..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/item/EnderFluidLinkCover.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.github.technus.tectech.thing.item; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.thing.CustomItemList.enderLinkFluidCover; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import com.github.technus.tectech.util.CommonValues; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public final class EnderFluidLinkCover extends Item { - - public static EnderFluidLinkCover INSTANCE; - - private EnderFluidLinkCover() { - setHasSubtypes(true); - setUnlocalizedName("tm.enderfluidlinkcover"); - setTextureName(MODID + ":itemEnderFluidLinkCover"); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { - aList.add(CommonValues.THETA_MOVEMENT); - aList.add(translateToLocal("item.tm.enderfluidlinkcover.desc.0")); // Ender-Fluid-Enables Machines! - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.enderfluidlinkcover.desc.1")); // Use on any side - // of a fluid tank - // to link it to - // the Ender - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.enderfluidlinkcover.desc.2")); // Ender Tanks so - // are laggy -Bot - // from the Chads - // of NH - } - - public static void run() { - INSTANCE = new EnderFluidLinkCover(); - GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); - enderLinkFluidCover.set(INSTANCE); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - itemIcon = iconRegister.registerIcon(getIconString()); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java b/src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java deleted file mode 100644 index f293f4178b..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/item/EuMeterGT.java +++ /dev/null @@ -1,169 +0,0 @@ -package com.github.technus.tectech.thing.item; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.TecTech.creativeTabTecTech; -import static net.minecraft.util.StatCollector.translateToLocal; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.util.CommonValues; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; -import gregtech.api.util.GT_Utility; - -public class EuMeterGT extends Item { - - public static EuMeterGT INSTANCE; - - private EuMeterGT() { - setMaxStackSize(1); - setUnlocalizedName("em.EuMeterGT"); - setTextureName(MODID + ":itemEuMeterGT"); - setCreativeTab(creativeTabTecTech); - } - - @Override - public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, - int ordinalSide, float hitX, float hitY, float hitZ) { - final ForgeDirection side = ForgeDirection.getOrientation(ordinalSide); - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity == null || aPlayer instanceof FakePlayer) { - return aPlayer instanceof EntityPlayerMP; - } - if (aPlayer instanceof EntityPlayerMP && !aPlayer.isSneaking() && tTileEntity instanceof IGregTechTileEntity) { - String clientLocale; - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - - if (tTileEntity instanceof BaseMetaTileEntity) { - GT_Utility.sendChatToPlayer( - aPlayer, - EnumChatFormatting.AQUA + "----- X:" - + aX - + " Y:" - + aY - + " Z:" - + aZ - + " D:" - + aWorld.provider.dimensionId - + " S:" - + ordinalSide - + " -----"); - GT_Utility.sendChatToPlayer( - aPlayer, - translateToLocalFormatted("tt.keyphrase.Stored_energy", clientLocale) + ": " - + EnumChatFormatting.YELLOW - + (((BaseMetaTileEntity) tTileEntity).getUniversalEnergyStored()) - + EnumChatFormatting.RESET - + '/' - + EnumChatFormatting.GREEN - + (((BaseMetaTileEntity) tTileEntity).getUniversalEnergyCapacity())); - GT_Utility.sendChatToPlayer( - aPlayer, - translateToLocalFormatted("tt.keyphrase.Stored_EU", clientLocale) + ": " - + EnumChatFormatting.YELLOW - + (((BaseMetaTileEntity) tTileEntity).getStoredEU()) - + EnumChatFormatting.RESET - + '/' - + EnumChatFormatting.GREEN - + (((BaseMetaTileEntity) tTileEntity).getEUCapacity())); - GT_Utility.sendChatToPlayer( - aPlayer, - translateToLocalFormatted("tt.keyphrase.Average_IO", clientLocale) + ": " - + EnumChatFormatting.YELLOW - + (((BaseMetaTileEntity) tTileEntity).getAverageElectricInput()) - + EnumChatFormatting.RESET - + '/' - + EnumChatFormatting.YELLOW - + (((BaseMetaTileEntity) tTileEntity).getAverageElectricOutput())); - GT_Utility.sendChatToPlayer( - aPlayer, - translateToLocalFormatted("tt.keyphrase.Average_IO_(max)", clientLocale) + ": " - + EnumChatFormatting.GOLD - + (((BaseMetaTileEntity) tTileEntity).getInputVoltage()) - + EnumChatFormatting.RESET - + '/' - + EnumChatFormatting.GOLD - + (((BaseMetaTileEntity) tTileEntity).getOutputVoltage())); - GT_Utility.sendChatToPlayer( - aPlayer, - translateToLocalFormatted("tt.keyphrase.Average_IO_max", clientLocale) + ": " - + EnumChatFormatting.RED - + (((BaseMetaTileEntity) tTileEntity).getMaxSafeInput()) - + EnumChatFormatting.RESET - + '/' - + EnumChatFormatting.RED - + (((BaseMetaTileEntity) tTileEntity).getMaxEnergyOutput())); - GT_Utility.sendChatToPlayer( - aPlayer, - translateToLocalFormatted("tt.keyphrase.Amperage_IO_(max)", clientLocale) + ": " - + EnumChatFormatting.GOLD - + (((BaseMetaTileEntity) tTileEntity).getInputAmperage()) - + EnumChatFormatting.RESET - + '/' - + EnumChatFormatting.GOLD - + (((BaseMetaTileEntity) tTileEntity).getOutputAmperage())); - GT_Utility.sendChatToPlayer( - aPlayer, - translateToLocalFormatted("tt.keyphrase.Side_capabilities", clientLocale) + ": " - + (((BaseMetaTileEntity) tTileEntity).inputEnergyFrom(side) - ? translateToLocalFormatted("tt.keyword.input", clientLocale) + " " - : "") - + (((BaseMetaTileEntity) tTileEntity).outputsEnergyTo(side) - ? translateToLocalFormatted("tt.keyword.output", clientLocale) - : "")); - return true; - } else if (tTileEntity instanceof BaseMetaPipeEntity) { - if (((BaseMetaPipeEntity) tTileEntity).getMetaTileEntity() instanceof GT_MetaPipeEntity_Cable) { - ArrayList tList = new ArrayList<>(); - GT_Utility.getCoordinateScan(tList, aPlayer, aWorld, 1, aX, aY, aZ, side, hitX, hitY, hitZ); - for (String str : tList) { - GT_Utility.sendChatToPlayer(aPlayer, str); - } - } - return true; - } - } - if (!(aPlayer instanceof EntityPlayerMP)) { - GT_Utility.doSoundAtClient(new ResourceLocation(Reference.MODID, "fx_scan"), 1, 1.0F, aX, aY, aZ); - } - return false; - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { - aList.add(CommonValues.TEC_MARK_GENERAL); - aList.add(translateToLocal("item.em.EuMeterGT.desc.0")); // Measures basic EU related stuff - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.em.EuMeterGT.desc.1")); // Just right click on - // blocks. - } - - public static void run() { - INSTANCE = new EuMeterGT(); - GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/item/ParametrizerMemoryCard.java b/src/main/java/com/github/technus/tectech/thing/item/ParametrizerMemoryCard.java deleted file mode 100644 index 753bb691b9..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/item/ParametrizerMemoryCard.java +++ /dev/null @@ -1,234 +0,0 @@ -package com.github.technus.tectech.thing.item; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.TecTech.creativeTabTecTech; -import static com.github.technus.tectech.thing.CustomItemList.parametrizerMemory; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; - -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Param; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_ParamText; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -/** - * Created by Tec on 15.03.2017. - */ -public final class ParametrizerMemoryCard extends Item { - - public static ParametrizerMemoryCard INSTANCE; - private static IIcon locked, unlocked; - - private ParametrizerMemoryCard() { - setMaxStackSize(1); - setHasSubtypes(true); - setUnlocalizedName("em.parametrizerMemoryCard"); - setTextureName(MODID + ":itemParametrizerMemoryCardUnlocked"); - setCreativeTab(creativeTabTecTech); - } - - @Override - public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, - int ordinalSide, float hitX, float hitY, float hitZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (!(aPlayer instanceof EntityPlayerMP)) return false; - if (!(tTileEntity instanceof IGregTechTileEntity)) return false; - aStack.stackSize = 1; - IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); - - if (metaTE instanceof GT_MetaTileEntity_Hatch_ParamText parametrizer) { - if (aStack.getTagCompound() == null) { - aStack.setTagCompound(new NBTTagCompound()); - } - NBTTagCompound tNBT = aStack.getTagCompound(); - if (aStack.getItemDamage() == 1) { - // write to parametrizer - parametrizer.param = tNBT.getInteger("param"); - parametrizer.value0D = tNBT.getDouble("value0D"); - parametrizer.value1D = tNBT.getDouble("value1D"); - parametrizer.value0s = tNBT.getString("value0s"); - parametrizer.value1s = tNBT.getString("value1s"); - } else { - // read from parametrizer - NBTTagCompound newTag = new NBTTagCompound(); - newTag.setInteger("param", parametrizer.param); - newTag.setDouble("value0D", parametrizer.value0D); - newTag.setDouble("value1D", parametrizer.value1D); - newTag.setString("value0s", parametrizer.value0s); - newTag.setString("value1s", parametrizer.value1s); - aStack.setTagCompound(newTag); - } - return true; - } else if (metaTE instanceof GT_MetaTileEntity_Hatch_Param parametrizer) { - if (aStack.getTagCompound() == null) { - aStack.setTagCompound(new NBTTagCompound()); - } - NBTTagCompound tNBT = aStack.getTagCompound(); - if (aStack.getItemDamage() == 1) { - // write to parametrizer - parametrizer.param = tNBT.getInteger("param"); - parametrizer.value0D = tNBT.getDouble("value0D"); - parametrizer.value1D = tNBT.getDouble("value1D"); - } else { - // read from parametrizer - NBTTagCompound newTag = new NBTTagCompound(); - tNBT.setInteger("param", parametrizer.param); - tNBT.setDouble("value0D", parametrizer.value0D); - tNBT.setDouble("value1D", parametrizer.value1D); - aStack.setTagCompound(newTag); - } - return true; - } else if (metaTE instanceof GT_MetaTileEntity_MultiblockBase_EM controller) { - if (aStack.getTagCompound() == null) { - aStack.setTagCompound(new NBTTagCompound()); - } - NBTTagCompound tNBT = aStack.getTagCompound(); - if (aStack.getItemDamage() == 1) { - // write to controller - if (tNBT.hasKey("paramList", Constants.NBT.TAG_LIST)) { - // from controller - NBTTagList tagList = tNBT.getTagList("paramList", Constants.NBT.TAG_COMPOUND); - for (int hatch = 0; hatch < 10; hatch++) { - NBTTagCompound tag = tagList.getCompoundTagAt(hatch); - controller.parametrization - .trySetParameters(hatch, tag.getDouble("value0D"), tag.getDouble("value1D")); - } - } else { - // from parametrizer - controller.parametrization.trySetParameters( - tNBT.getInteger("param"), - tNBT.getDouble("value0D"), - tNBT.getDouble("value1D")); - } - } else { - // read from controller - NBTTagCompound newTag = new NBTTagCompound(); - NBTTagList tagList = new NBTTagList(); - for (int hatch = 0; hatch < 10; hatch++) { - NBTTagCompound tagChild = new NBTTagCompound(); - Parameters.Group.ParameterIn[] parameters = controller.parametrization.getGroup(hatch).parameterIn; - if (parameters[0] != null) { - tagChild.setDouble("value0D", parameters[0].get()); - } - if (parameters[1] != null) { - tagChild.setDouble("value1D", parameters[1].get()); - } - tagList.appendTag(tagChild); - } - newTag.setTag("paramList", tagList); - aStack.setTagCompound(newTag); - } - return true; - } - return false; - } - - @Override - public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - if (aPlayer instanceof EntityPlayerMP && aPlayer.isSneaking()) { - aStack.stackSize = 1; - if (aStack.getItemDamage() == 1) { - aStack.setItemDamage(0); - } else { - aStack.setItemDamage(1); - } - return aStack; - } - return aStack; - } - - @Override - public String getItemStackDisplayName(ItemStack stack) { - if (stack.getItemDamage() == 1) { - return StatCollector.translateToLocal("item.em.parametrizerMemoryCard.name.paste"); - } else { - return StatCollector.translateToLocal("item.em.parametrizerMemoryCard.name.copy"); - } - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { - NBTTagCompound tNBT = aStack.getTagCompound(); - aList.add(CommonValues.THETA_MOVEMENT); - aList.add(translateToLocal("item.em.parametrizerMemoryCard.desc.0")); // Stores Parameters - - if (aStack.getItemDamage() == 1) { - // Use on Multiblock Controller to configure it - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.em.parametrizerMemoryCard.desc.1")); - } else { - // Use on Multiblock Controller to store parameters - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.em.parametrizerMemoryCard.desc.2")); - } - // Sneak right click to lock/unlock - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.em.parametrizerMemoryCard.desc.3")); - - double temp; - if (tNBT != null && tNBT.hasKey("param")) { - aList.add("Hatch ID: " + EnumChatFormatting.AQUA + tNBT.getInteger("param")); - temp = tNBT.getInteger("value0D"); - aList.add("Value 0D: " + EnumChatFormatting.AQUA + temp); - aList.add( - "Value 0B: " + EnumChatFormatting.AQUA - + TT_Utility.longBitsToShortString(Double.doubleToLongBits(temp))); - aList.add("Value 0s: " + EnumChatFormatting.AQUA + tNBT.getString("value0s")); - temp = tNBT.getInteger("value1D"); - aList.add("Value 1D: " + EnumChatFormatting.AQUA + temp); - aList.add( - "Value 1B: " + EnumChatFormatting.AQUA - + TT_Utility.longBitsToShortString(Double.doubleToLongBits(temp))); - aList.add("Value 1s: " + EnumChatFormatting.AQUA + tNBT.getString("value1s")); - } - } - - public static void run() { - INSTANCE = new ParametrizerMemoryCard(); - GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); - parametrizerMemory.set(INSTANCE); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - locked = iconRegister.registerIcon(MODID + ":itemParametrizerMemoryCardLocked"); - unlocked = itemIcon = iconRegister.registerIcon(getIconString()); - } - - @Override - public IIcon getIconFromDamage(int damage) { - if (damage == 1) { - return locked; - } - return unlocked; - } - - @Override - public void getSubItems(Item item, CreativeTabs tab, List list) { - ItemStack that = new ItemStack(this, 1); - that.setTagCompound(new NBTTagCompound()); - list.add(that); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/item/PowerPassUpgradeCover.java b/src/main/java/com/github/technus/tectech/thing/item/PowerPassUpgradeCover.java deleted file mode 100644 index 015d284c4e..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/item/PowerPassUpgradeCover.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.github.technus.tectech.thing.item; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.thing.CustomItemList.powerPassUpgradeCover; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import com.github.technus.tectech.util.CommonValues; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public final class PowerPassUpgradeCover extends Item { - - public static PowerPassUpgradeCover INSTANCE; - - private PowerPassUpgradeCover() { - setHasSubtypes(true); - setUnlocalizedName("tm.powerpassupgradecover"); - setTextureName(MODID + ":itemPowerPassUpgradeCover"); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { - aList.add(CommonValues.THETA_MOVEMENT); - aList.add(translateToLocal("item.tm.powerpassupgradecover.desc.0")); // Add power pass functionality to TecTech - // Multiblocks - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.powerpassupgradecover.desc.1")); // Active - // transformer in - // a can?? - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.powerpassupgradecover.desc.2")); // Chain them up - // like Christmas - // lights! - } - - public static void run() { - INSTANCE = new PowerPassUpgradeCover(); - GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); - powerPassUpgradeCover.set(INSTANCE); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - itemIcon = iconRegister.registerIcon(getIconString()); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/item/RenderForgeOfGodsItem.java b/src/main/java/com/github/technus/tectech/thing/item/RenderForgeOfGodsItem.java deleted file mode 100644 index a9be26fce8..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/item/RenderForgeOfGodsItem.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.github.technus.tectech.thing.item; - -import static com.github.technus.tectech.rendering.EOH.EOH_RenderingUtils.renderStarLayer; -import static com.github.technus.tectech.rendering.EOH.EOH_TESR.*; -import static com.github.technus.tectech.thing.block.RenderForgeOfGods.disableOpaqueColorInversion; -import static com.github.technus.tectech.thing.block.RenderForgeOfGods.enableOpaqueColorInversion; -import static com.github.technus.tectech.thing.block.RenderForgeOfGods.enablePseudoTransparentColorInversion; - -import java.awt.Color; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.client.IItemRenderer; - -import org.lwjgl.opengl.GL11; - -public class RenderForgeOfGodsItem implements IItemRenderer { - - @Override - public boolean handleRenderType(ItemStack item, IItemRenderer.ItemRenderType type) { - return true; - } - - @Override - public boolean shouldUseRenderHelper(IItemRenderer.ItemRenderType type, ItemStack item, - IItemRenderer.ItemRendererHelper helper) { - return true; - } - - @Override - public void renderItem(IItemRenderer.ItemRenderType type, ItemStack item, Object... data) { - GL11.glPushMatrix(); - GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); - - if (type == IItemRenderer.ItemRenderType.INVENTORY) GL11.glRotated(180, 0, 1, 0); - else if (type == IItemRenderer.ItemRenderType.EQUIPPED - || type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) { - GL11.glTranslated(0.5, 0.5, 0.5); - if (type == IItemRenderer.ItemRenderType.EQUIPPED) GL11.glRotated(90, 0, 1, 0); - } - - { - - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_BLEND); - - // Innermost layer should be opaque - enableOpaqueColorInversion(); - renderStarLayer(0, STAR_LAYER_0, new Color(1.0f, 0.4f, 0.05f, 1.0f), 1.0f, 1); - disableOpaqueColorInversion(); - - enablePseudoTransparentColorInversion(); - renderStarLayer(1, STAR_LAYER_1, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.4f, 1); - renderStarLayer(2, STAR_LAYER_2, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.2f, 1); - - GL11.glPopAttrib(); - GL11.glPopMatrix(); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java b/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java deleted file mode 100644 index 5b841a766d..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCapacitor.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.github.technus.tectech.thing.item; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.thing.CustomItemList.teslaCapacitor; -import static gregtech.api.enums.GT_Values.V; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -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.util.EnumChatFormatting; -import net.minecraft.util.IIcon; - -import com.github.technus.tectech.util.CommonValues; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public final class TeslaCoilCapacitor extends Item { - - public static TeslaCoilCapacitor INSTANCE; - private static IIcon LVicon, MVicon, HVicon, EVicon, IVicon, LuVicon, ZPMicon; - - private TeslaCoilCapacitor() { - setHasSubtypes(true); - setUnlocalizedName("tm.teslaCoilCapacitor"); - setTextureName(MODID + ":itemCapacitorLV"); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { - aList.add(CommonValues.THETA_MOVEMENT); - if (aStack.getItemDamage() >= 0 && aStack.getItemDamage() <= 6) { - aList.add( - translateToLocal("item.tm.teslaCoilCapacitor.desc.0") + " " - + V[aStack.getItemDamage() + 1] * 512 - + " " - + translateToLocal("item.tm.teslaCoilCapacitor.desc.1") - + " " - + V[aStack.getItemDamage() + 1] - + " EU/t"); // Stores 16384 EU in a tesla tower at 32 EU/t - } else { - aList.add(translateToLocal("item.tm.teslaCoilCapacitor.desc.2")); // Yeet this broken item into some spicy - // water! - } - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.teslaCoilCapacitor.desc.3")); // Insert into a - // Capacitor hatch - // of a Tesla Tower - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.teslaCoilCapacitor.desc.4")); // Capacitors are - // the same thing as - // batteries, right? - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return getUnlocalizedName() + "." + getDamage(aStack); - } - - public static void run() { - INSTANCE = new TeslaCoilCapacitor(); - GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); - teslaCapacitor.set(INSTANCE); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - LVicon = itemIcon = iconRegister.registerIcon(getIconString()); - MVicon = iconRegister.registerIcon(MODID + ":itemCapacitorMV"); - HVicon = iconRegister.registerIcon(MODID + ":itemCapacitorHV"); - EVicon = iconRegister.registerIcon(MODID + ":itemCapacitorEV"); - IVicon = iconRegister.registerIcon(MODID + ":itemCapacitorIV"); - LuVicon = iconRegister.registerIcon(MODID + ":itemCapacitorLuV"); - ZPMicon = iconRegister.registerIcon(MODID + ":itemCapacitorZPM"); - } - - @Override - public IIcon getIconFromDamage(int damage) { - switch (damage) { - case 1: - return MVicon; - case 2: - return HVicon; - case 3: - return EVicon; - case 4: - return IVicon; - case 5: - return LuVicon; - case 6: - return ZPMicon; - default: - return LVicon; - } - } - - @Override - public void getSubItems(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - for (int i = 0; i <= 6; i++) { - aList.add(new ItemStack(aItem, 1, i)); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilComponent.java b/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilComponent.java deleted file mode 100644 index b4f1d33382..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilComponent.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.github.technus.tectech.thing.item; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.thing.CustomItemList.teslaComponent; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -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.util.EnumChatFormatting; -import net.minecraft.util.IIcon; - -import com.github.technus.tectech.util.CommonValues; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public final class TeslaCoilComponent extends Item { - - public static TeslaCoilComponent INSTANCE; - private static IIcon ultItemIcon; - - private TeslaCoilComponent() { - setHasSubtypes(true); - setUnlocalizedName("tm.itemTeslaComponent"); - setTextureName(MODID + ":itemTeslaComponent"); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { - aList.add(CommonValues.THETA_MOVEMENT); - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.itemTeslaComponent.desc")); // Tesla bois need - // these! - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return getUnlocalizedName() + "." + getDamage(aStack); - } - - public static void run() { - INSTANCE = new TeslaCoilComponent(); - GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); - teslaComponent.set(INSTANCE); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - itemIcon = iconRegister.registerIcon(getIconString()); - ultItemIcon = iconRegister.registerIcon(MODID + ":itemTeslaComponentUltimate"); - } - - @Override - public IIcon getIconFromDamage(int damage) { - if (damage == 1) { - return ultItemIcon; - } - return itemIcon; - } - - @Override - public void getSubItems(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - aList.add(new ItemStack(aItem, 1, 0)); - aList.add(new ItemStack(aItem, 1, 1)); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCover.java b/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCover.java deleted file mode 100644 index 3ee7fd3e93..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/item/TeslaCoilCover.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.github.technus.tectech.thing.item; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.thing.CustomItemList.teslaCover; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -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.util.EnumChatFormatting; -import net.minecraft.util.IIcon; - -import com.github.technus.tectech.util.CommonValues; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public final class TeslaCoilCover extends Item { - - public static TeslaCoilCover INSTANCE; - private static IIcon ultItemIcon; - - private TeslaCoilCover() { - setHasSubtypes(true); - setUnlocalizedName("tm.teslaCover"); - setTextureName(MODID + ":itemTeslaCover"); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { - aList.add(CommonValues.THETA_MOVEMENT); - switch (aStack.getItemDamage()) { - case 0: - aList.add(translateToLocal("item.tm.teslaCover.desc.0")); // Tesla-Enables Machines! - break; - case 1: - aList.add(translateToLocal("item.tm.teslaCover.desc.1")); // Tesla-Enables Machines! (BUT LOUDER!!) - break; - default: - aList.add(translateToLocal("item.tm.teslaCover.desc.2")); // Yeet this broken item into some spicy - // water! - break; - } - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.teslaCover.desc.3")); // Use on top of a machine - // to enable Tesla - // capabilities - aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.teslaCover.desc.4")); // Who the hell uses cables - // anyway? - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return getUnlocalizedName() + "." + getDamage(aStack); - } - - public static void run() { - INSTANCE = new TeslaCoilCover(); - GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); - teslaCover.set(INSTANCE); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - itemIcon = iconRegister.registerIcon(getIconString()); - ultItemIcon = iconRegister.registerIcon(MODID + ":itemTeslaCoverUltimate"); - } - - @Override - public IIcon getIconFromDamage(int damage) { - if (damage == 1) { - return ultItemIcon; - } - return itemIcon; - } - - @Override - public void getSubItems(Item aItem, CreativeTabs par2CreativeTabs, List aList) { - aList.add(new ItemStack(aItem, 1, 0)); - aList.add(new ItemStack(aItem, 1, 1)); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/item/TeslaStaff.java b/src/main/java/com/github/technus/tectech/thing/item/TeslaStaff.java deleted file mode 100644 index 88028f910c..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/item/TeslaStaff.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.github.technus.tectech.thing.item; - -import static com.github.technus.tectech.Reference.MODID; -import static com.github.technus.tectech.thing.CustomItemList.teslaStaff; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.util.CommonValues; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.util.GT_Utility; - -public final class TeslaStaff extends Item { - - public static TeslaStaff INSTANCE; - - private TeslaStaff() { - setUnlocalizedName("tm.teslaStaff"); - setTextureName(MODID + ":itemTeslaStaff"); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { - aList.add(CommonValues.THETA_MOVEMENT); - aList.add(translateToLocal("item.tm.teslaStaff.desc")); - } - - @Override - public boolean onLeftClickEntity(ItemStack stack, EntityPlayer aPlayer, Entity entity) { - GT_Utility.sendChatToPlayer(aPlayer, "Zapperoni!"); - if (!(aPlayer instanceof EntityPlayerMP)) { - double aX = aPlayer.posX; - double aY = aPlayer.posY; - double aZ = aPlayer.posZ; - GT_Utility.doSoundAtClient(new ResourceLocation(Reference.MODID, "fx_scan"), 1, 1.0F, aX, aY, aZ); - } - return false; - } - - public static void run() { - INSTANCE = new TeslaStaff(); - GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); - teslaStaff.set(INSTANCE); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/Textures.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/Textures.java deleted file mode 100644 index cd4d743587..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/Textures.java +++ /dev/null @@ -1,318 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity; - -import static gregtech.api.enums.Dyes.MACHINE_METAL; -import static gregtech.api.enums.Textures.BlockIcons.CustomIcon; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_8V_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_8V_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_8V_TOP; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_EV_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_EV_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_EV_TOP; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_HV_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_HV_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_HV_TOP; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_IV_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_IV_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_IV_TOP; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LV_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LV_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LV_TOP; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LuV_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LuV_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LuV_TOP; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MAX_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MAX_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MAX_TOP; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MV_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MV_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MV_TOP; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_UV_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_UV_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_UV_TOP; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_ZPM_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_ZPM_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_ZPM_TOP; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_IN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGY_IN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGY_IN_MULTI; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGY_ON_WIRELESS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGY_OUT; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGY_OUT_MULTI; - -import gregtech.api.enums.Dyes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.objects.GT_SidedTexture; -import gregtech.api.render.TextureFactory; - -public class Textures { - - private static final IIconContainer OVERLAY_ENERGY_IN_POWER = new CustomIcon("iconsets/OVERLAY_ENERGY_IN_POWER"); - private static final IIconContainer OVERLAY_ENERGY_OUT_POWER = new CustomIcon("iconsets/OVERLAY_ENERGY_OUT_POWER"); - private static final IIconContainer OVERLAY_ENERGY_IN_LASER = new CustomIcon("iconsets/OVERLAY_ENERGY_IN_LASER"); - private static final IIconContainer OVERLAY_ENERGY_OUT_LASER = new CustomIcon("iconsets/OVERLAY_ENERGY_OUT_LASER"); - private static final IIconContainer OVERLAY_ENERGY_ON_WIRELESS_4A = new CustomIcon( - "iconsets/OVERLAY_ENERGY_ON_WIRELESS_4A"); - private static final IIconContainer OVERLAY_ENERGY_ON_WIRELESS_16A = new CustomIcon( - "iconsets/OVERLAY_ENERGY_ON_WIRELESS_16A"); - private static final IIconContainer OVERLAY_ENERGY_ON_WIRELESS_LASER = new CustomIcon( - "iconsets/OVERLAY_ENERGY_ON_WIRELESS_LASER"); - private static final IIconContainer MACHINE_UEV_SIDE = new CustomIcon("iconsets/MACHINE_UEV_SIDE"); - private static final IIconContainer MACHINE_UIV_SIDE = new CustomIcon("iconsets/MACHINE_UIV_SIDE"); - private static final IIconContainer MACHINE_UMV_SIDE = new CustomIcon("iconsets/MACHINE_UMV_SIDE"); - private static final IIconContainer MACHINE_UXV_SIDE = new CustomIcon("iconsets/MACHINE_UXV_SIDE"); - private static final IIconContainer MACHINE_MAXV_SIDE = new CustomIcon("iconsets/MACHINE_MAXV_SIDE"); - private static final IIconContainer MACHINE_UEV_TOP = new CustomIcon("iconsets/MACHINE_UEV_TOP"); - private static final IIconContainer MACHINE_UIV_TOP = new CustomIcon("iconsets/MACHINE_UIV_TOP"); - private static final IIconContainer MACHINE_UMV_TOP = new CustomIcon("iconsets/MACHINE_UMV_TOP"); - private static final IIconContainer MACHINE_UXV_TOP = new CustomIcon("iconsets/MACHINE_UXV_TOP"); - private static final IIconContainer MACHINE_MAXV_TOP = new CustomIcon("iconsets/MACHINE_MAXV_TOP"); - private static final IIconContainer MACHINE_UEV_BOTTOM = new CustomIcon("iconsets/MACHINE_UEV_BOTTOM"); - private static final IIconContainer MACHINE_UIV_BOTTOM = new CustomIcon("iconsets/MACHINE_UIV_BOTTOM"); - private static final IIconContainer MACHINE_UMV_BOTTOM = new CustomIcon("iconsets/MACHINE_UMV_BOTTOM"); - private static final IIconContainer MACHINE_UXV_BOTTOM = new CustomIcon("iconsets/MACHINE_UXV_BOTTOM"); - private static final IIconContainer MACHINE_MAXV_BOTTOM = new CustomIcon("iconsets/MACHINE_MAXV_BOTTOM"); - - private static final IIconContainer TESLA_TRANSCEIVER_TOP = new CustomIcon("iconsets/TESLA_TRANSCEIVER_TOP"); - - public static IIconContainer[] MACHINECASINGS_SIDE_TT = new IIconContainer[] { MACHINE_8V_SIDE, MACHINE_LV_SIDE, - MACHINE_MV_SIDE, MACHINE_HV_SIDE, MACHINE_EV_SIDE, MACHINE_IV_SIDE, MACHINE_LuV_SIDE, MACHINE_ZPM_SIDE, - MACHINE_UV_SIDE, MACHINE_MAX_SIDE, MACHINE_UEV_SIDE, MACHINE_UIV_SIDE, MACHINE_UMV_SIDE, MACHINE_UXV_SIDE, - MACHINE_MAXV_SIDE, }, - MACHINECASINGS_TOP_TT = new IIconContainer[] { MACHINE_8V_TOP, MACHINE_LV_TOP, MACHINE_MV_TOP, MACHINE_HV_TOP, - MACHINE_EV_TOP, MACHINE_IV_TOP, MACHINE_LuV_TOP, MACHINE_ZPM_TOP, MACHINE_UV_TOP, MACHINE_MAX_TOP, - MACHINE_UEV_TOP, MACHINE_UIV_TOP, MACHINE_UMV_TOP, MACHINE_UXV_TOP, MACHINE_MAXV_TOP, }, - MACHINECASINGS_BOTTOM_TT = new IIconContainer[] { MACHINE_8V_BOTTOM, MACHINE_LV_BOTTOM, MACHINE_MV_BOTTOM, - MACHINE_HV_BOTTOM, MACHINE_EV_BOTTOM, MACHINE_IV_BOTTOM, MACHINE_LuV_BOTTOM, MACHINE_ZPM_BOTTOM, - MACHINE_UV_BOTTOM, MACHINE_MAX_BOTTOM, MACHINE_UEV_BOTTOM, MACHINE_UIV_BOTTOM, MACHINE_UMV_BOTTOM, - MACHINE_UXV_BOTTOM, MACHINE_MAXV_BOTTOM, }; - public static ITexture[] OVERLAYS_ENERGY_IN_TT = new ITexture[] { - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 180, 180, 180, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 220, 220, 220, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 255, 100, 0, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 255, 255, 30, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 128, 128, 128, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 220, 220, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 200, 200, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 180, 180, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 160, 160, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 140, 140, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 120, 120, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 100, 100, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 80, 80, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN, new short[] { 60, 60, 245, 0 }), }, - OVERLAYS_ENERGY_OUT_TT = new ITexture[] { - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 180, 180, 180, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 220, 220, 220, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 255, 100, 0, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 255, 255, 30, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 128, 128, 128, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 220, 220, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 200, 200, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 180, 180, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 160, 160, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 140, 140, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 120, 120, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 100, 100, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 80, 80, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 60, 60, 245, 0 }), }, - OVERLAYS_ENERGY_IN_MULTI_TT = new ITexture[] { - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 180, 180, 180, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 220, 220, 220, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 255, 100, 0, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 255, 255, 30, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 128, 128, 128, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 220, 220, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 200, 200, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 180, 180, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 160, 160, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 140, 140, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 120, 120, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 100, 100, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 80, 80, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 60, 60, 245, 0 }), }, - OVERLAYS_ENERGY_OUT_MULTI_TT = new ITexture[] { - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 180, 180, 180, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 220, 220, 220, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 255, 100, 0, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 255, 255, 30, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 128, 128, 128, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 220, 220, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 200, 200, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 180, 180, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 160, 160, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 140, 140, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 120, 120, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 100, 100, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 80, 80, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 60, 60, 245, 0 }), }, - OVERLAYS_ENERGY_IN_POWER_TT = new ITexture[] { - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 180, 180, 180, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 220, 220, 220, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 255, 100, 0, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 255, 255, 30, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 128, 128, 128, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 220, 220, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 200, 200, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 180, 180, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 160, 160, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 140, 140, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 120, 120, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 100, 100, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 80, 80, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 60, 60, 245, 0 }), }, - OVERLAYS_ENERGY_OUT_POWER_TT = new ITexture[] { - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 180, 180, 180, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 220, 220, 220, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 255, 100, 0, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 255, 255, 30, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 128, 128, 128, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 220, 220, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 200, 200, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 180, 180, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 160, 160, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 140, 140, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 120, 120, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 100, 100, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 80, 80, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 60, 60, 245, 0 }), }, - OVERLAYS_ENERGY_IN_LASER_TT = new ITexture[] { - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 180, 180, 180, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 220, 220, 220, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 255, 100, 0, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 255, 255, 30, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 128, 128, 128, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 220, 220, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 200, 200, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 180, 180, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 160, 160, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 140, 140, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 120, 120, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 100, 100, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 80, 80, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 60, 60, 245, 0 }), }, - OVERLAYS_ENERGY_OUT_LASER_TT = new ITexture[] { - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 180, 180, 180, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 220, 220, 220, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 255, 100, 0, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 255, 255, 30, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 128, 128, 128, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 220, 220, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 200, 200, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 180, 180, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 160, 160, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 140, 140, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 120, 120, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 100, 100, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 80, 80, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 60, 60, 245, 0 }), }; - public static final ITexture[] OVERLAYS_ENERGY_IN_WIRELESS_MULTI_4A = { - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }) }; - - public static final ITexture[] OVERLAYS_ENERGY_IN_WIRELESS_MULTI_16A = { - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }) }; - - public static final ITexture[] OVERLAYS_ENERGY_IN_WIRELESS_MULTI_64A = { - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }) }; - - public static final ITexture[] OVERLAYS_ENERGY_IN_WIRELESS_LASER = { - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), - TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }) }; - - public static ITexture[][] MACHINE_CASINGS_TT = new ITexture[15][17]; - - public static ITexture TESLA_TRANSCEIVER_TOP_BA = new GT_RenderedTexture(TESLA_TRANSCEIVER_TOP); - - public static void run() { - for (byte i = 0; i < MACHINE_CASINGS_TT.length; i++) { - for (byte j = 0; j < MACHINE_CASINGS_TT[i].length; j++) { - MACHINE_CASINGS_TT[i][j] = new GT_SidedTexture( - MACHINECASINGS_BOTTOM_TT[i], - MACHINECASINGS_TOP_TT[i], - MACHINECASINGS_SIDE_TT[i], - Dyes.getModulation(j - 1, MACHINE_METAL.mRGBa)); - } - } - MACHINE_CASINGS = MACHINE_CASINGS_TT; - - // These will throw IndexOutOfBoundsException if one of the arrays are the wrong length - System.arraycopy(OVERLAYS_ENERGY_IN_TT, 0, OVERLAYS_ENERGY_IN, 0, OVERLAYS_ENERGY_IN_TT.length); - System.arraycopy(OVERLAYS_ENERGY_OUT_TT, 0, OVERLAYS_ENERGY_OUT, 0, OVERLAYS_ENERGY_OUT_TT.length); - System - .arraycopy(OVERLAYS_ENERGY_IN_MULTI_TT, 0, OVERLAYS_ENERGY_IN_MULTI, 0, OVERLAYS_ENERGY_IN_MULTI_TT.length); - System.arraycopy( - OVERLAYS_ENERGY_OUT_MULTI_TT, - 0, - OVERLAYS_ENERGY_OUT_MULTI, - 0, - OVERLAYS_ENERGY_OUT_MULTI_TT.length); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java deleted file mode 100644 index 1dc7b5513e..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Capacitor.java +++ /dev/null @@ -1,263 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static com.github.technus.tectech.util.TT_Utility.getUniqueIdentifier; -import static gregtech.api.enums.GT_Values.V; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.HashMap; -import java.util.Map; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -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; - -/** - * Created by Tec on 03.04.2017. - */ -public class GT_MetaTileEntity_Hatch_Capacitor extends GT_MetaTileEntity_Hatch implements IAddUIWidgets { - - private static Textures.BlockIcons.CustomIcon TM_H; - private static Textures.BlockIcons.CustomIcon TM_H_ACTIVE; - private static final Map componentBinds = new HashMap<>(); - - public GT_MetaTileEntity_Hatch_Capacitor(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 16, - new String[] { CommonValues.THETA_MOVEMENT, translateToLocal("gt.blockmachines.hatch.capacitor.desc.0"), - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.capacitor.desc.1") }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_Capacitor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 16, aDescription, aTextures); - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - TM_H_ACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/TM_TESLA_CAPS_ACTIVE"); - TM_H = new Textures.BlockIcons.CustomIcon("iconsets/TM_TESLA_CAPS"); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TM_H_ACTIVE) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TM_H) }; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Capacitor(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing(); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing(); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public int getSizeInventory() { - return getBaseMetaTileEntity().isActive() ? 0 : mInventory.length; - } - - public long[] getCapacitors() { - long tier = -1; - long tCurrent = 0; - long tEnergyMax = 0; - for (int i = 0; i < mInventory.length; i++) { - if (mInventory[i] == null || mInventory[i].stackSize != 1) { - continue; - } - CapacitorComponent cap = componentBinds.get(getUniqueIdentifier(mInventory[i])); - if (cap != null && cap.tier > tier) { - tier = cap.tier; - } - } - if (tier >= 0) { - for (int i = 0; i < mInventory.length; i++) { - if (mInventory[i] == null || mInventory[i].stackSize != 1) { - continue; - } - CapacitorComponent cap = componentBinds.get(getUniqueIdentifier(mInventory[i])); - if (cap == null) { - continue; - } - if (cap.tier < tier) { - if (getBaseMetaTileEntity().isActive()) { - mInventory[i] = null; - getBaseMetaTileEntity().setOnFire(); - } - } else { - tCurrent += cap.current; - tEnergyMax += cap.energyMax; - } - } - } - return new long[] { tier, tCurrent, tEnergyMax }; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 4) - .startFromSlot(0) - .endAtSlot(15) - .slotCreator(index -> new BaseSlot(inventoryHandler, index) { - - @Override - public int getSlotStackLimit() { - return 1; - } - - @Override - public boolean isEnabled() { - return !getBaseMetaTileEntity().isActive(); - } - }) - .background(getGUITextureSet().getItemSlot()) - .build() - .setPos(52, 7)); - } - - public static void run() { - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent( - Reference.MODID + ":item.tm.teslaCoilCapacitor.0", - 0, - 1, - V[1] * 512); // LV Capacitor - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent( - Reference.MODID + ":item.tm.teslaCoilCapacitor.1", - 1, - 1, - V[2] * 512); // MV Capacitor - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent( - Reference.MODID + ":item.tm.teslaCoilCapacitor.2", - 2, - 1, - V[3] * 512); // HV Capacitor - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent( - Reference.MODID + ":item.tm.teslaCoilCapacitor.3", - 3, - 1, - V[4] * 512); // EV Capacitor - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent( - Reference.MODID + ":item.tm.teslaCoilCapacitor.4", - 4, - 1, - V[5] * 512); // IV Capacitor - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent( - Reference.MODID + ":item.tm.teslaCoilCapacitor.5", - 5, - 1, - V[6] * 512); // LuV Capacitor - new GT_MetaTileEntity_Hatch_Capacitor.CapacitorComponent( - Reference.MODID + ":item.tm.teslaCoilCapacitor.6", - 6, - 1, - V[7] * 512); // ZPM Capacitor - } - - public static class CapacitorComponent implements Comparable { - - private final String unlocalizedName; - private final long tier, current, energyMax; - - CapacitorComponent(ItemStack is, long tier, long current, long energyMax) { - this(getUniqueIdentifier(is), tier, current, energyMax); - } - - CapacitorComponent(String is, long tier, long current, long energyMax) { - unlocalizedName = is; - this.tier = tier; - this.current = current; - this.energyMax = energyMax; - componentBinds.put(unlocalizedName, this); - if (DEBUG_MODE) { - TecTech.LOGGER.info("Tesla Capacitor registered: " + unlocalizedName); - } - } - - @Override - public int compareTo(CapacitorComponent o) { - return unlocalizedName.compareTo(o.unlocalizedName); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof CapacitorComponent) { - return compareTo((CapacitorComponent) obj) == 0; - } - return false; - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeData.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeData.java deleted file mode 100644 index e4b279e46d..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeData.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.util.CommonValues.MOVE_AT; -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Data; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -/** - * Created by danie_000 on 27.10.2016. - */ -public class GT_MetaTileEntity_Hatch_CreativeData extends GT_MetaTileEntity_Hatch_DataConnector { - - public GT_MetaTileEntity_Hatch_CreativeData(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.debug.tt.data.desc.0"), - translateToLocal("gt.blockmachines.debug.tt.data.desc.1"), - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.debug.tt.data.desc.2") }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_CreativeData(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_CreativeData(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isDataInputFacing(ForgeDirection side) { - return isInputFacing(side); - } - - @Override - protected QuantumDataPacket loadPacketFromNBT(NBTTagCompound nbt) { - return new QuantumDataPacket(nbt); - } - - @Override - public boolean canConnectData(ForgeDirection side) { - return isOutputFacing(side); - } - - @Override - public void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { - IConnectsToDataPipe current = this, source = this, next; - int range = 0; - while ((next = current.getNext(source)) != null && range++ < 1000) { - if (next instanceof GT_MetaTileEntity_Hatch_InputData) { - ((GT_MetaTileEntity_Hatch_InputData) next).setContents(q); - break; - } - source = current; - current = next; - } - q = null; - } - - @Override - public IConnectsToDataPipe getNext(IConnectsToDataPipe source /* ==this */) { - IGregTechTileEntity base = getBaseMetaTileEntity(); - byte color = base.getColorization(); - if (color < 0) { - return null; - } - IGregTechTileEntity next = base.getIGregTechTileEntityAtSide(base.getFrontFacing()); - if (next == null) { - return null; - } - IMetaTileEntity meta = next.getMetaTileEntity(); - if (meta instanceof GT_MetaTileEntity_Pipe_Data) { - ((GT_MetaTileEntity_Pipe_Data) meta).markUsed(); - return (IConnectsToDataPipe) meta; - } else if (meta instanceof GT_MetaTileEntity_Hatch_InputData - && ((GT_MetaTileEntity_Hatch_InputData) meta).getColorization() == color - && ((GT_MetaTileEntity_Hatch_InputData) meta).canConnectData( - base.getFrontFacing() - .getOpposite())) { - return (IConnectsToDataPipe) meta; - } - return null; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (MOVE_AT == aTick % 20) { - if (aBaseMetaTileEntity.isAllowedToWork()) { - getBaseMetaTileEntity().setActive(true); - if (q == null) q = new QuantumDataPacket(0xFFFFFFFFL); - moveAround(aBaseMetaTileEntity); - } else { - q = null; - getBaseMetaTileEntity().setActive(false); - } - } - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeMaintenance.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeMaintenance.java deleted file mode 100644 index b62375076b..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeMaintenance.java +++ /dev/null @@ -1,96 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.objects.GT_RenderedTexture; - -public class GT_MetaTileEntity_Hatch_CreativeMaintenance extends GT_MetaTileEntity_Hatch_Maintenance { - - private static Textures.BlockIcons.CustomIcon face; - - public GT_MetaTileEntity_Hatch_CreativeMaintenance(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_CreativeMaintenance(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures, false); - } - - @Override - public String[] getDescription() { - return new String[] { CommonValues.THETA_MOVEMENT, - translateToLocal("gt.blockmachines.debug.tt.maintenance.desc.0"), // For automatically maintaining - // Multiblocks - translateToLocal("gt.blockmachines.debug.tt.maintenance.desc.1"), // Does fix everything but itself. - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.debug.tt.maintenance.desc.2") // Fixing is - // for plebs! - }; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - face = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_FULLAUTOMAINTENANCE"); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(face) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(face) }; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_CreativeMaintenance( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - this.mWrench = this.mScrewdriver = this.mSoftHammer = this.mHardHammer = this.mCrowbar = this.mSolderingTool = true; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeUncertainty.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeUncertainty.java deleted file mode 100644 index fa295721e5..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_CreativeUncertainty.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.util.EnumChatFormatting; - -import com.github.technus.tectech.util.CommonValues; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class GT_MetaTileEntity_Hatch_CreativeUncertainty extends GT_MetaTileEntity_Hatch_Uncertainty { - - public GT_MetaTileEntity_Hatch_CreativeUncertainty(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_Hatch_CreativeUncertainty(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_Hatch_CreativeUncertainty(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public String[] getDescription() { - return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.debug.tt.certain.desc.0"), // Feeling - // certain, - // for - // sure - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockmachines.debug.tt.certain.desc.1") // Schrödinger's cat escaped the - // box - }; - } - - @Override - public void regenerate() { - // no-op - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide() && (aTick % 100) == 0) { - if (mode == 0) { - aBaseMetaTileEntity.setActive(false); - status = -128; - } else { - aBaseMetaTileEntity.setActive(true); - compute(); - } - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java deleted file mode 100644 index e0ea91f090..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DataConnector.java +++ /dev/null @@ -1,202 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.util.CommonValues.MOVE_AT; -import static gregtech.api.enums.Dyes.MACHINE_METAL; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.technus.tectech.mechanics.dataTransport.DataPacket; -import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; -import com.github.technus.tectech.util.TT_Utility; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.objects.GT_RenderedTexture; - -/** - * Created by danie_000 on 11.12.2016. - */ -public abstract class GT_MetaTileEntity_Hatch_DataConnector extends GT_MetaTileEntity_Hatch - implements IConnectsToDataPipe { - - public static Textures.BlockIcons.CustomIcon EM_D_SIDES; - public static Textures.BlockIcons.CustomIcon EM_D_ACTIVE; - public static Textures.BlockIcons.CustomIcon EM_D_CONN; - - private String clientLocale = "en_US"; - - public T q; - - public short id = -1; - - protected GT_MetaTileEntity_Hatch_DataConnector(int aID, String aName, String aNameRegional, int aTier, - String[] descr) { - super(aID, aName, aNameRegional, aTier, 0, descr); - TT_Utility.setTier(aTier, this); - } - - protected GT_MetaTileEntity_Hatch_DataConnector(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - EM_D_ACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_EM_D_ACTIVE"); - EM_D_SIDES = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_EM_D_SIDES"); - EM_D_CONN = new Textures.BlockIcons.CustomIcon("iconsets/EM_DATA_CONN"); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - EM_D_ACTIVE, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(EM_D_CONN) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - EM_D_SIDES, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(EM_D_CONN) }; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setShort("eID", id); - if (q != null) { - aNBT.setTag("eDATA", q.toNbt()); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - id = aNBT.getShort("eID"); - if (aNBT.hasKey("eDATA")) { - q = loadPacketFromNBT(aNBT.getCompoundTag("eDATA")); - } - } - - protected abstract T loadPacketFromNBT(NBTTagCompound nbt); - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (MOVE_AT == aTick % 20) { - if (q == null) { - getBaseMetaTileEntity().setActive(false); - } else { - getBaseMetaTileEntity().setActive(true); - moveAround(aBaseMetaTileEntity); - } - } - } - } - - public abstract void moveAround(IGregTechTileEntity aBaseMetaTileEntity); - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isLiquidInput(ForgeDirection side) { - return false; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - if (id > 0) { - return new String[] { - translateToLocalFormatted("tt.keyword.ID", clientLocale) + ": " + EnumChatFormatting.AQUA + id, - translateToLocalFormatted("tt.keyword.Content", clientLocale) + ": " - + EnumChatFormatting.AQUA - + (q != null ? q.getContentString() : 0), - translateToLocalFormatted("tt.keyword.PacketHistory", clientLocale) + ": " - + EnumChatFormatting.RED - + (q != null ? q.getTraceSize() : 0), }; - } - return new String[] { - translateToLocalFormatted("tt.keyword.Content", clientLocale) + ": " - + EnumChatFormatting.AQUA - + (q != null ? q.getContentString() : 0), - translateToLocalFormatted("tt.keyword.PacketHistory", clientLocale) + ": " - + EnumChatFormatting.RED - + (q != null ? q.getTraceSize() : 0), }; - } - - @Override - public byte getColorization() { - return getBaseMetaTileEntity().getColorization(); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoMulti.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoMulti.java deleted file mode 100644 index d9b36d263f..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoMulti.java +++ /dev/null @@ -1,129 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT; -import static gregtech.api.enums.GT_Values.V; -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; - -/** - * Created by danie_000 on 16.12.2016. - */ -public class GT_MetaTileEntity_Hatch_DynamoMulti extends GT_MetaTileEntity_Hatch { - - public final int maxAmperes; - public int Amperes; - - public GT_MetaTileEntity_Hatch_DynamoMulti(int aID, String aName, String aNameRegional, int aTier, int aAmp) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { CommonValues.TEC_MARK_GENERAL, - translateToLocal("gt.blockmachines.hatch.dynamomulti.desc.0") }); // Multiple Ampere Energy - // Extractor for Multiblocks - Amperes = maxAmperes = aAmp; - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_DynamoMulti(String aName, int aTier, int aAmp, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - Amperes = maxAmperes = aAmp; - } - - public GT_MetaTileEntity_Hatch_DynamoMulti(int aID, String aName, String aNameRegional, int aTier, int i, - String[] description, int aAmp) { - super(aID, aName, aNameRegional, aTier, 0, description); - Amperes = maxAmperes = aAmp; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, OVERLAYS_ENERGY_IN_POWER_TT[mTier] }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, OVERLAYS_ENERGY_IN_POWER_TT[mTier] }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 128L * Amperes; - } - - @Override - public long maxEUOutput() { - return V[mTier]; - } - - @Override - public long maxEUStore() { - return 512L + V[mTier] * 4L * Amperes; - } - - @Override - public long maxAmperesOut() { - return Amperes; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_DynamoMulti(mName, mTier, Amperes, mDescriptionArray, mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java deleted file mode 100644 index 3da59f5016..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_DynamoTunnel.java +++ /dev/null @@ -1,292 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT; -import static com.github.technus.tectech.util.CommonValues.TRANSFER_AT; -import static gregtech.api.enums.GT_Values.V; -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.mechanics.pipe.IConnectsToEnergyTunnel; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Energy; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_EnergyMirror; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.PowerLogic; -import gregtech.api.logic.interfaces.PowerLogicHost; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.util.GT_Utility; - -/** - * Created by danie_000 on 16.12.2016. - */ -public class GT_MetaTileEntity_Hatch_DynamoTunnel extends GT_MetaTileEntity_Hatch_DynamoMulti - implements IConnectsToEnergyTunnel { - - public GT_MetaTileEntity_Hatch_DynamoTunnel(int ID, String unlocalisedName, String localisedName, int tier, - int amps) { - super( - ID, - unlocalisedName, - localisedName, - tier, - 0, - new String[] { CommonValues.TEC_MARK_GENERAL, - translateToLocal("gt.blockmachines.hatch.dynamotunnel.desc.0"), - translateToLocal("gt.blockmachines.hatch.dynamotunnel.desc.1") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(amps * V[tier]) - + EnumChatFormatting.RESET - + " EU/t" }, - amps); - - TT_Utility.setTier(tier, this); - } - - public GT_MetaTileEntity_Hatch_DynamoTunnel(String aName, int aTier, int aAmp, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aAmp, aDescription, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, OVERLAYS_ENERGY_OUT_LASER_TT[mTier] }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, OVERLAYS_ENERGY_OUT_LASER_TT[mTier] }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return V[mTier]; - } - - @Override - public long maxEUOutput() { - return V[mTier]; - } - - @Override - public long maxEUStore() { - return V[mTier] * 24L * Amperes; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public boolean isEnetInput() { - return false; - } - - @Override - public ConnectionType getConnectionType() { - return ConnectionType.LASER; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_DynamoTunnel(mName, mTier, Amperes, mDescriptionArray, mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - byte Tick = (byte) (aTick % 20); - if (TRANSFER_AT == Tick) { - if (aBaseMetaTileEntity.getStoredEU() > 0) { - setEUVar(aBaseMetaTileEntity.getStoredEU() - Amperes); - if (aBaseMetaTileEntity.getStoredEU() < 0) { - setEUVar(0); - } - } - if (aBaseMetaTileEntity.getStoredEU() > getMinimumStoredEU()) { - moveAround(aBaseMetaTileEntity); - } - } - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (Amperes != maxAmperes) { - aNBT.setInteger("amperes", Amperes); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - int savedAmperes = aNBT.getInteger("amperes"); - if (savedAmperes != 0) { - Amperes = savedAmperes; - } - } - - private void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { - byte color = getBaseMetaTileEntity().getColorization(); - if (color < 0) { - return; - } - final ForgeDirection front = aBaseMetaTileEntity.getFrontFacing(); - ForgeDirection opposite = front.getOpposite(); - for (short dist = 1; dist < 1000; dist++) { - - IGregTechTileEntity tGTTileEntity = aBaseMetaTileEntity - .getIGregTechTileEntityAtSideAndDistance(front, dist); - if (tGTTileEntity != null && tGTTileEntity.getColorization() == color) { - IMetaTileEntity aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); - if (aMetaTileEntity != null) { - // If we hit a mirror, use the mirror's view instead - if (aMetaTileEntity instanceof GT_MetaTileEntity_Pipe_EnergyMirror tMirror) { - - tGTTileEntity = tMirror.bendAround(opposite); - if (tGTTileEntity == null) { - break; - } else { - aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); - opposite = tMirror.getChainedFrontFacing(); - } - } - - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyTunnel - && opposite == tGTTileEntity.getFrontFacing()) { - if (maxEUOutput() > ((GT_MetaTileEntity_Hatch_EnergyTunnel) aMetaTileEntity).maxEUInput()) { - aMetaTileEntity.doExplosion(maxEUOutput()); - setEUVar(aBaseMetaTileEntity.getStoredEU() - maxEUOutput()); - return; - } else if (maxEUOutput() - == ((GT_MetaTileEntity_Hatch_EnergyTunnel) aMetaTileEntity).maxEUInput()) { - long diff = Math.min( - Amperes * 20L * maxEUOutput(), - Math.min( - ((GT_MetaTileEntity_Hatch_EnergyTunnel) aMetaTileEntity).maxEUStore() - - aMetaTileEntity.getBaseMetaTileEntity() - .getStoredEU(), - aBaseMetaTileEntity.getStoredEU())); - - setEUVar(aBaseMetaTileEntity.getStoredEU() - diff); - - ((GT_MetaTileEntity_Hatch_EnergyTunnel) aMetaTileEntity).setEUVar( - aMetaTileEntity.getBaseMetaTileEntity() - .getStoredEU() + diff); - } - return; - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Pipe_Energy) { - if (((GT_MetaTileEntity_Pipe_Energy) aMetaTileEntity).connectionCount < 2) { - return; - } else { - ((GT_MetaTileEntity_Pipe_Energy) aMetaTileEntity).markUsed(); - } - } else { - return; - } - } else { - if (tGTTileEntity instanceof PowerLogicHost) { - PowerLogic logic = ((PowerLogicHost) tGTTileEntity).getPowerLogic(opposite); - if (logic == null || !logic.canUseLaser() || opposite != tGTTileEntity.getFrontFacing()) { - return; - } - - long ampsUsed = logic.injectEnergy(maxEUOutput(), Amperes); - setEUVar(aBaseMetaTileEntity.getStoredEU() - ampsUsed * maxEUOutput()); - } - return; - } - } else { - return; - } - } - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - final int x = getGUIWidth() / 2 - 37; - final int y = getGUIHeight() / 5 - 7; - builder.widget( - TextWidget.localised("GT5U.machines.laser_hatch.amperage") - .setPos(x, y) - .setSize(74, 14)) - .widget( - new NumericWidget().setSetter(val -> Amperes = (int) val) - .setGetter(() -> Amperes) - .setBounds(1, maxAmperes) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(70, 18) - .setPos(x, y + 16) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)); - } - - @Override - public boolean canConnect(ForgeDirection side) { - return isOutputFacing(side); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyMulti.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyMulti.java deleted file mode 100644 index 509473e9ba..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyMulti.java +++ /dev/null @@ -1,135 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT; -import static gregtech.api.enums.GT_Values.V; -import static net.minecraft.util.StatCollector.translateToLocal; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; - -/** - * Created by danie_000 on 16.12.2016. - */ -public class GT_MetaTileEntity_Hatch_EnergyMulti extends GT_MetaTileEntity_Hatch { - - public final int maxAmperes; - public int Amperes; - - public GT_MetaTileEntity_Hatch_EnergyMulti(int aID, String aName, String aNameRegional, int aTier, int aAmp) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { CommonValues.TEC_MARK_GENERAL, translateToLocal("gt.blockmachines.hatch.energymulti.desc.0"), - translateToLocalFormatted("gt.blockmachines.hatch.energymulti.desc.2", aAmp + (aAmp >> 2)), - translateToLocalFormatted("gt.blockmachines.hatch.energymulti.desc.3", aAmp) }); - Amperes = maxAmperes = aAmp; - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_EnergyMulti(String aName, int aTier, int aAmp, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - Amperes = maxAmperes = aAmp; - } - - public GT_MetaTileEntity_Hatch_EnergyMulti(int aID, String aName, String aNameRegional, int aTier, int i, - String[] description, int aAmp) { - super(aID, aName, aNameRegional, aTier, 0, description); - Amperes = maxAmperes = aAmp; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, OVERLAYS_ENERGY_IN_POWER_TT[mTier] }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, OVERLAYS_ENERGY_IN_POWER_TT[mTier] }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 128L * Amperes; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxEUStore() { - return 512L + V[mTier] * 4L * Amperes; - } - - @Override - public long maxAmperesIn() { - return Amperes + (Amperes >> 2); - } - - @Override - public long maxWorkingAmperesIn() { - return Amperes; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_EnergyMulti(mName, mTier, Amperes, mDescriptionArray, mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java deleted file mode 100644 index ae3e698836..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_EnergyTunnel.java +++ /dev/null @@ -1,206 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_LASER_TT; -import static com.github.technus.tectech.util.CommonValues.TRANSFER_AT; -import static gregtech.api.enums.GT_Values.V; -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.mechanics.pipe.IConnectsToEnergyTunnel; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.util.GT_Utility; - -/** - * Created by danie_000 on 16.12.2016. - */ -public class GT_MetaTileEntity_Hatch_EnergyTunnel extends GT_MetaTileEntity_Hatch_EnergyMulti - implements IConnectsToEnergyTunnel { - - public GT_MetaTileEntity_Hatch_EnergyTunnel(int aID, String aName, String aNameRegional, int aTier, int aAmp) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { CommonValues.TEC_MARK_GENERAL, - translateToLocal("gt.blockmachines.hatch.energytunnel.desc.0"), - translateToLocal("gt.blockmachines.hatch.energytunnel.desc.1") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(aAmp * V[aTier]) - + EnumChatFormatting.RESET - + " EU/t" }, - aAmp); // Energy injecting terminal for Multiblocks - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_EnergyTunnel(String aName, int aTier, int aAmp, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aAmp, aDescription, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, OVERLAYS_ENERGY_IN_LASER_TT[mTier] }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, OVERLAYS_ENERGY_IN_LASER_TT[mTier] }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return V[mTier]; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxEUStore() { - return V[mTier] * 24L * Amperes; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public boolean isEnetInput() { - return false; - } - - @Override - public ConnectionType getConnectionType() { - return ConnectionType.LASER; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_EnergyTunnel(mName, mTier, Amperes, mDescriptionArray, mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (Amperes != maxAmperes) { - aNBT.setInteger("amperes", Amperes); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - int savedAmperes = aNBT.getInteger("amperes"); - if (savedAmperes != 0) { - Amperes = savedAmperes; - } - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - final int x = getGUIWidth() / 2 - 37; - final int y = getGUIHeight() / 5 - 7; - builder.widget( - TextWidget.localised("GT5U.machines.laser_hatch.amperage") - .setPos(x, y) - .setSize(74, 14)) - .widget( - new NumericWidget().setSetter(val -> Amperes = (int) val) - .setGetter(() -> Amperes) - .setBounds(1, maxAmperes) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(70, 18) - .setPos(x, y + 16) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)); - } - - @Override - public boolean canConnect(ForgeDirection side) { - return isInputFacing(side); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - byte Tick = (byte) (aTick % 20); - if (TRANSFER_AT == Tick) { - if (aBaseMetaTileEntity.getStoredEU() > 0) { - setEUVar(aBaseMetaTileEntity.getStoredEU() - Amperes); - if (aBaseMetaTileEntity.getStoredEU() < 0) { - setEUVar(0); - } - } - } - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Holder.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Holder.java deleted file mode 100644 index 14a75ce797..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Holder.java +++ /dev/null @@ -1,176 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -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; - -/** - * Created by Tec on 03.04.2017. - */ -public class GT_MetaTileEntity_Hatch_Holder extends GT_MetaTileEntity_Hatch implements IAddGregtechLogo { - - private static Textures.BlockIcons.CustomIcon EM_H; - private static Textures.BlockIcons.CustomIcon EM_H_ACTIVE; - - public GT_MetaTileEntity_Hatch_Holder(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, - new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.holder.desc.0"), - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.holder.desc.1") }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_Holder(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - EM_H_ACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/EM_HOLDER_ACTIVE"); - EM_H = new Textures.BlockIcons.CustomIcon("iconsets/EM_HOLDER"); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(EM_H_ACTIVE) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(EM_H) }; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Holder(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return facing.offsetY == 0; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing(); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing(); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - // if(aBaseMetaTileEntity.isActive()) - // aPlayer.addChatComponentMessage(new ChatComponentText("It is still active...")); - // else if(heat>0) - // aPlayer.addChatComponentMessage(new ChatComponentText("It is still warm...")); - // else - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO) - .setSize(18, 18) - .setPos(151, 63)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_HEAT_SINK) - .setPos(46, 17) - .setSize(84, 60)) - .widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_RACK_LARGE) - .setPos(68, 27) - .setSize(40, 40)) - .widget(new SlotWidget(new BaseSlot(inventoryHandler, 0) { - - @Override - public int getSlotStackLimit() { - return 1; - } - - @Override - public boolean isEnabled() { - return !getBaseMetaTileEntity().isActive(); - } - }).setPos(79, 38)) - .widget( - new DrawableWidget().setDrawable(TecTechUITextures.BUTTON_STANDARD_LIGHT_16x16) - .setPos(152, 24) - .setSize(16, 16)) - .widget( - new DrawableWidget() - .setDrawable( - () -> getBaseMetaTileEntity().isActive() ? TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON - : TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_DISABLED) - .setPos(152, 24) - .setSize(16, 16)) - .widget( - new FakeSyncWidget.BooleanSyncer( - () -> getBaseMetaTileEntity().isActive(), - val -> getBaseMetaTileEntity().setActive(val))); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputData.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputData.java deleted file mode 100644 index 03c9cfbf3c..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputData.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -/** - * Created by danie_000 on 27.10.2016. - */ -public class GT_MetaTileEntity_Hatch_InputData extends GT_MetaTileEntity_Hatch_DataConnector { - - private boolean delDelay = true; - - public GT_MetaTileEntity_Hatch_InputData(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.datain.desc.0"), - translateToLocal("gt.blockmachines.hatch.datain.desc.1"), - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.datain.desc.2") }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_InputData(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_InputData(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - protected QuantumDataPacket loadPacketFromNBT(NBTTagCompound nbt) { - return new QuantumDataPacket(nbt); - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isDataInputFacing(ForgeDirection side) { - return isInputFacing(side); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean canConnectData(ForgeDirection side) { - return isInputFacing(side); - } - - @Override - public IConnectsToDataPipe getNext(IConnectsToDataPipe source) { - return null; - } - - public void setContents(QuantumDataPacket qIn) { - if (qIn == null) { - this.q = null; - } else { - if (qIn.getContent() > 0) { - this.q = qIn; - delDelay = true; - } else { - this.q = null; - } - } - } - - @Override - public void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { - if (delDelay) { - delDelay = false; - } else { - setContents(null); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java deleted file mode 100644 index 50ebe25373..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_InputDataItems.java +++ /dev/null @@ -1,259 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; -import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_ACTIVE; -import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_CONN; -import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_SIDES; -import static com.github.technus.tectech.util.CommonValues.MOVE_AT; -import static gregtech.api.enums.Dyes.MACHINE_METAL; -import static net.minecraft.util.StatCollector.translateToLocal; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; -import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.enums.Dyes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_DataAccess; -import gregtech.api.objects.GT_RenderedTexture; - -public class GT_MetaTileEntity_Hatch_InputDataItems extends GT_MetaTileEntity_Hatch_DataAccess - implements IConnectsToDataPipe { - - public boolean delDelay = true; - private ItemStack[] stacks; - - private String clientLocale = "en_US"; - - public GT_MetaTileEntity_Hatch_InputDataItems(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_InputDataItems(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - EM_D_ACTIVE, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(EM_D_CONN) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - EM_D_SIDES, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(EM_D_CONN) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_InputDataItems(this.mName, this.mTier, mDescriptionArray, this.mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isDataInputFacing(ForgeDirection side) { - return isInputFacing(side); - } - - @Override - public boolean canConnectData(ForgeDirection side) { - return isInputFacing(side); - } - - @Override - public IConnectsToDataPipe getNext(IConnectsToDataPipe source) { - return null; - } - - public void setContents(InventoryDataPacket iIn) { - if (iIn == null) { - stacks = null; - } else { - if (iIn.getContent().length > 0) { - stacks = iIn.getContent(); - delDelay = true; - } else { - stacks = null; - } - } - } - - @Override - public void onRemoval() { - stacks = null; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - NBTTagCompound stacksTag = new NBTTagCompound(); - if (stacks != null) { - stacksTag.setInteger("count", stacks.length); - for (int i = 0; i < stacks.length; i++) { - stacksTag.setTag(Integer.toString(i), stacks[i].writeToNBT(new NBTTagCompound())); - } - } - aNBT.setTag("data_stacks", stacksTag); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - NBTTagCompound stacksTag = aNBT.getCompoundTag("data_stacks"); - int count = stacksTag.getInteger("count"); - if (count > 0) { - ArrayList stacks = new ArrayList<>(); - for (int i = 0; i < count; i++) { - ItemStack stack = ItemStack.loadItemStackFromNBT(stacksTag.getCompoundTag(Integer.toString(i))); - if (stack != null) { - stacks.add(stack); - } - } - if (stacks.size() > 0) { - this.stacks = stacks.toArray(nullItem); - } - } - } - - @Override - public int getSizeInventory() { - return stacks != null ? stacks.length : 0; - } - - @Override - public ItemStack getStackInSlot(int aIndex) { - return stacks != null && aIndex < stacks.length ? stacks[aIndex] : null; - } - - @Override - public List getInventoryItems(Predicate filter) { - if (stacks == null) return Collections.emptyList(); - return Arrays.stream(stacks) - .filter(stack -> stack != null && filter.test(stack)) - .collect(Collectors.toList()); - } - - @Override - public boolean shouldDropItemAt(int index) { - return false; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if (MOVE_AT == aTick % 20) { - if (stacks == null) { - getBaseMetaTileEntity().setActive(false); - } else { - getBaseMetaTileEntity().setActive(true); - if (delDelay) { - delDelay = false; - } else { - setContents(null); - } - } - } - } - - @Override - public String[] getDescription() { - return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.datainass.desc.0"), - translateToLocal("gt.blockmachines.hatch.datainass.desc.1"), - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.datainass.desc.2") }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return new String[] { translateToLocalFormatted("tt.keyphrase.Content_Stack_Count", clientLocale) + ": " - + (stacks == null ? 0 : stacks.length) }; - } - - @Override - public byte getColorization() { - return getBaseMetaTileEntity().getColorization(); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputData.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputData.java deleted file mode 100644 index 7e769123bc..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputData.java +++ /dev/null @@ -1,116 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Data; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -/** - * Created by danie_000 on 27.10.2016. - */ -public class GT_MetaTileEntity_Hatch_OutputData extends GT_MetaTileEntity_Hatch_DataConnector { - - public GT_MetaTileEntity_Hatch_OutputData(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.dataout.desc.0"), - translateToLocal("gt.blockmachines.hatch.dataout.desc.1"), - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.dataout.desc.2") }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_OutputData(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_OutputData(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isDataInputFacing(ForgeDirection side) { - return isInputFacing(side); - } - - @Override - protected QuantumDataPacket loadPacketFromNBT(NBTTagCompound nbt) { - return new QuantumDataPacket(nbt); - } - - @Override - public boolean canConnectData(ForgeDirection side) { - return isOutputFacing(side); - } - - @Override - public void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { - IConnectsToDataPipe current = this, source = this, next; - int range = 0; - while ((next = current.getNext(source)) != null && range++ < 1000) { - if (next instanceof GT_MetaTileEntity_Hatch_InputData) { - ((GT_MetaTileEntity_Hatch_InputData) next).setContents(q); - break; - } - source = current; - current = next; - } - q = null; - } - - @Override - public IConnectsToDataPipe getNext(IConnectsToDataPipe source /* ==this */) { - IGregTechTileEntity base = getBaseMetaTileEntity(); - byte color = base.getColorization(); - if (color < 0) { - return null; - } - IGregTechTileEntity next = base.getIGregTechTileEntityAtSide(base.getFrontFacing()); - if (next == null) { - return null; - } - IMetaTileEntity meta = next.getMetaTileEntity(); - if (meta instanceof GT_MetaTileEntity_Pipe_Data) { - ((GT_MetaTileEntity_Pipe_Data) meta).markUsed(); - return (IConnectsToDataPipe) meta; - } else if (meta instanceof GT_MetaTileEntity_Hatch_InputData - && ((GT_MetaTileEntity_Hatch_InputData) meta).getColorization() == color - && ((GT_MetaTileEntity_Hatch_InputData) meta).canConnectData( - base.getFrontFacing() - .getOpposite())) { - return (IConnectsToDataPipe) meta; - } - return null; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputDataItems.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputDataItems.java deleted file mode 100644 index 0cdf1b969b..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_OutputDataItems.java +++ /dev/null @@ -1,141 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; -import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Data; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -public class GT_MetaTileEntity_Hatch_OutputDataItems - extends GT_MetaTileEntity_Hatch_DataConnector { - - public GT_MetaTileEntity_Hatch_OutputDataItems(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.dataoutass.desc.0"), - translateToLocal("gt.blockmachines.hatch.dataoutass.desc.1"), - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.dataoutass.desc.2") }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_OutputDataItems(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_OutputDataItems( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return false; - } - - @Override - protected InventoryDataPacket loadPacketFromNBT(NBTTagCompound nbt) { - return new InventoryDataPacket(nbt); - } - - @Override - public boolean isDataInputFacing(ForgeDirection side) { - return isInputFacing(side); - } - - @Override - public boolean canConnectData(ForgeDirection side) { - return isOutputFacing(side); - } - - @Override - public void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { - IConnectsToDataPipe current = this, source = this, next; - int range = 0; - while ((next = current.getNext(source)) != null && range++ < 1000) { - if (next instanceof GT_MetaTileEntity_Hatch_InputDataItems) { - ((GT_MetaTileEntity_Hatch_InputDataItems) next).setContents(q); - break; - } - source = current; - current = next; - } - q = null; - } - - @Override - public IConnectsToDataPipe getNext(IConnectsToDataPipe source /* ==this */) { - IGregTechTileEntity base = getBaseMetaTileEntity(); - byte color = base.getColorization(); - if (color < 0) { - return null; - } - IGregTechTileEntity next = base.getIGregTechTileEntityAtSide(base.getFrontFacing()); - if (next == null) { - return null; - } - IMetaTileEntity meta = next.getMetaTileEntity(); - if (meta instanceof GT_MetaTileEntity_Pipe_Data) { - ((GT_MetaTileEntity_Pipe_Data) meta).markUsed(); - return (IConnectsToDataPipe) meta; - } else if (meta instanceof GT_MetaTileEntity_Hatch_InputDataItems - && ((GT_MetaTileEntity_Hatch_InputDataItems) meta).getColorization() == color - && ((GT_MetaTileEntity_Hatch_InputDataItems) meta).canConnectData( - base.getFrontFacing() - .getOpposite())) { - return (IConnectsToDataPipe) meta; - } - return null; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java deleted file mode 100644 index 828a935321..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Param.java +++ /dev/null @@ -1,554 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.objects.GT_RenderedTexture; - -/** - * Created by danie_000 on 15.12.2016. - */ -public class GT_MetaTileEntity_Hatch_Param extends GT_MetaTileEntity_Hatch implements IAddGregtechLogo, IAddUIWidgets { - - public int pointer = 0; - public int param = -1; - public double value0D = 0; - public double value1D = 0; - public double input0D = 0; - public double input1D = 0; - private static Textures.BlockIcons.CustomIcon ScreenON; - private static Textures.BlockIcons.CustomIcon ScreenOFF; - - private String clientLocale = "en_US"; - - public GT_MetaTileEntity_Hatch_Param(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { CommonValues.TEC_MARK_GENERAL, - EnumChatFormatting.DARK_RED - + "Deprecated; Now you can set parameter by clicking LED on multiblock GUI.", - EnumChatFormatting.DARK_RED - + "If it doesn't work, try removing Parametrizer from multiblock structure." }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_Param(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/PARAM"); - ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/PARAM_ACTIVE"); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(ScreenON) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(ScreenOFF) }; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_Hatch_Param(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return new String[] { - translateToLocalFormatted("tt.keyword.Parametrizer", clientLocale) + " " - + translateToLocalFormatted("tt.keyword.ID", clientLocale) - + ": " - + EnumChatFormatting.GREEN - + param, - translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 0D: " + EnumChatFormatting.AQUA + value0D, - translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 1D: " + EnumChatFormatting.BLUE + value1D, - translateToLocalFormatted("tt.keyword.Input", clientLocale) + " 0D: " + EnumChatFormatting.GOLD + input0D, - translateToLocalFormatted("tt.keyword.Input", clientLocale) + " 1D: " - + EnumChatFormatting.YELLOW - + input1D, }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("ePointer", pointer); - aNBT.setDouble("eValue0D", value0D); - aNBT.setDouble("eValue1D", value1D); - aNBT.setDouble("eInput0D", input0D); - aNBT.setDouble("eInput1D", input1D); - aNBT.setInteger("eParam", param); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - pointer = aNBT.getInteger("ePointer"); - if (aNBT.hasKey("eFloats") || aNBT.hasKey("eValue0i") - || aNBT.hasKey("eValue1i") - || aNBT.hasKey("eInput0i") - || aNBT.hasKey("eInput1i")) { - boolean usesFloat = aNBT.getBoolean("eFloats"); - if (usesFloat) { - value0D = Double.longBitsToDouble(aNBT.getLong("eValue0i")); - value1D = Double.longBitsToDouble(aNBT.getLong("eValue1i")); - input0D = Double.longBitsToDouble(aNBT.getLong("eInput0i")); - input1D = Double.longBitsToDouble(aNBT.getLong("eInput1i")); - } else { - value0D = aNBT.getLong("eValue0i"); - value1D = aNBT.getLong("eValue1i"); - input0D = aNBT.getLong("eInput0i"); - input1D = aNBT.getLong("eInput1i"); - } - } else { - value0D = aNBT.getDouble("eValue0D"); - value1D = aNBT.getDouble("eValue1D"); - input0D = aNBT.getDouble("eInput0D"); - input1D = aNBT.getDouble("eInput1D"); - } - param = aNBT.getInteger("eParam"); - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public boolean isLiquidInput(ForgeDirection side) { - return false; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return false; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO_DARK) - .setSize(18, 18) - .setPos(112, 55)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - final boolean isAdvanced = mTier > 5; - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE) - .setPos(43, 4) - .setSize(90, 72)); - - addChangeParamButton( - builder, - (shift, columnPointer, secondRow) -> param -= shift ? 16 : 4, - 7, - 4, - GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, - TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - if (secondRow.get()) { - secondRow.set(false); - } else { - columnPointer.addAndGet(shift ? -16 : -4); - } - } else { - value0D -= shift ? 4096 : 256; - } - }, 7, 22, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_0); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - if (secondRow.get()) { - columnPointer.addAndGet(shift ? -16 : -4); - } else { - secondRow.set(true); - } - } else { - value1D -= shift ? 4096 : 256; - } - }, 7, 40, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_1); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - if (shift) { - if (secondRow.get()) { - value1D = Double.longBitsToDouble(0xFFFF_FFFF_FFFF_FFFFL); - } else { - value0D = Double.longBitsToDouble(0xFFFF_FFFF_FFFF_FFFFL); - } - } else { - if (secondRow.get()) { - long temp = Double.doubleToLongBits(value1D); - temp |= 1L << (long) columnPointer.get(); - value1D = Double.longBitsToDouble(temp); - } else { - long temp = Double.doubleToLongBits(value0D); - temp |= 1L << (long) columnPointer.get(); - value0D = Double.longBitsToDouble(temp); - } - } - } else { - value0D /= shift ? 4096 : 256; - value1D /= shift ? 4096 : 256; - } - }, - 7, - 58, - isAdvanced ? TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_S : GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, - isAdvanced ? null : TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); - - addChangeParamButton( - builder, - (shift, columnPointer, secondRow) -> param -= shift ? 2 : 1, - 25, - 4, - GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, - TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - if (secondRow.get()) { - secondRow.set(false); - } else { - columnPointer.addAndGet(shift ? -2 : -1); - } - } else { - value0D -= shift ? 16 : 1; - } - }, 25, 22, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_0); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - if (secondRow.get()) { - columnPointer.addAndGet(shift ? -2 : -1); - } else { - secondRow.set(true); - } - } else { - value1D -= shift ? 16 : 1; - } - }, 25, 40, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_1); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - if (shift) { - if (secondRow.get()) { - value1D = Double.longBitsToDouble(0); - } else { - value0D = Double.longBitsToDouble(0); - } - } else { - if (secondRow.get()) { - long temp = Double.doubleToLongBits(value1D); - temp &= ~(1L << (long) columnPointer.get()); - value1D = Double.longBitsToDouble(temp); - } else { - long temp = Double.doubleToLongBits(value0D); - temp &= ~(1L << (long) columnPointer.get()); - value0D = Double.longBitsToDouble(temp); - } - } - } else { - value0D /= shift ? 16 : 2; - value1D /= shift ? 16 : 2; - } - }, - 25, - 58, - isAdvanced ? TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_C : GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, - isAdvanced ? null : TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_X); - - addChangeParamButton( - builder, - (shift, columnPointer, secondRow) -> param += shift ? 2 : 1, - 133, - 4, - GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, - TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - if (secondRow.get()) { - secondRow.set(false); - } else { - columnPointer.addAndGet(shift ? 2 : 1); - } - } else { - value0D += shift ? 16 : 1; - } - }, 133, 22, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_0); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - if (secondRow.get()) { - columnPointer.addAndGet(shift ? 2 : 1); - } else { - secondRow.set(true); - } - } else { - value1D += shift ? 16 : 1; - } - }, 133, 40, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_1); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - if (shift) { - if (secondRow.get()) { - value1D = Double.longBitsToDouble(~Double.doubleToLongBits(value1D)); - } else { - value0D = Double.longBitsToDouble(~Double.doubleToLongBits(value1D)); - } - } else { - if (secondRow.get()) { - long temp = Double.doubleToLongBits(value1D); - temp ^= 1L << (long) columnPointer.get(); - value1D = Double.longBitsToDouble(temp); - } else { - long temp = Double.doubleToLongBits(value0D); - temp ^= 1L << (long) columnPointer.get(); - value0D = Double.longBitsToDouble(temp); - } - } - } else { - value0D *= shift ? 16 : 2; - value1D *= shift ? 16 : 2; - } - }, - 133, - 58, - isAdvanced ? TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_T : GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, - isAdvanced ? null : TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); - - addChangeParamButton( - builder, - (shift, columnPointer, secondRow) -> param += shift ? 16 : 4, - 151, - 4, - GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, - TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - if (secondRow.get()) { - secondRow.set(false); - } else { - columnPointer.addAndGet(shift ? 16 : 4); - } - } else { - value0D += shift ? 4096 : 256; - } - }, 151, 22, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_0); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - if (secondRow.get()) { - columnPointer.addAndGet(shift ? 16 : 4); - } else { - secondRow.set(true); - } - } else { - value1D += shift ? 4096 : 256; - } - }, 151, 40, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_1); - addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { - if (isAdvanced) { - value0D = input0D; - value1D = input1D; - } else { - value0D *= shift ? 4096 : 256; - value1D *= shift ? 4096 : 256; - } - }, - 151, - 58, - isAdvanced ? TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_IF : GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, - isAdvanced ? null : TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); - - builder.widget(new FakeSyncWidget.IntegerSyncer(() -> pointer, val -> pointer = val)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> param, val -> param = val)) - .widget(new FakeSyncWidget.DoubleSyncer(() -> value0D, val -> value0D = val)) - .widget(new FakeSyncWidget.DoubleSyncer(() -> value1D, val -> value1D = val)) - .widget(new FakeSyncWidget.DoubleSyncer(() -> input0D, val -> input0D = val)) - .widget(new FakeSyncWidget.DoubleSyncer(() -> input1D, val -> input1D = val)); - - final String CIRCLED_0 = "\u24EA"; - final String CIRCLED_1 = "\u2460"; - final String ARROW_DOWN = "\u2b07"; - final String ARROW_UP = "\u2b06"; - builder.widget( - TextWidget.dynamicString(() -> (isAdvanced ? "Parameters X: " : "Parameters: ") + param) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 7)) - .widget( - TextWidget.dynamicString(() -> CIRCLED_0 + ARROW_DOWN + TT_Utility.formatNumberExp(input0D)) - .setSynced(false) - .setDefaultColor(0x22ddff) - .setPos(46, 16)) - .widget( - TextWidget.dynamicString(() -> CIRCLED_1 + ARROW_DOWN + TT_Utility.formatNumberExp(input1D)) - .setSynced(false) - .setDefaultColor(0x00ffff) - .setPos(46, 24)) - .widget( - TextWidget.dynamicString(() -> CIRCLED_0 + ARROW_UP + TT_Utility.formatNumberExp(value0D)) - .setSynced(false) - .setDefaultColor(0x00bbff) - .setPos(46, 33)) - .widget( - TextWidget.dynamicString(() -> CIRCLED_1 + ARROW_UP + TT_Utility.formatNumberExp(value1D)) - .setSynced(false) - .setDefaultColor(0x0077ff) - .setPos(46, 41)) - .widget( - TextWidget - .dynamicString( - () -> CIRCLED_0 + ARROW_UP + TT_Utility.longBitsToShortString(Double.doubleToLongBits(value0D))) - .setSynced(false) - .setDefaultColor(0x00bbff) - .setScale(.5f) - .setTextAlignment(Alignment.CenterLeft) - .setPos(46, 50)) - .widget( - TextWidget - .dynamicString( - () -> CIRCLED_1 + ARROW_UP + TT_Utility.longBitsToShortString(Double.doubleToLongBits(value1D))) - .setSynced(false) - .setDefaultColor(0x0077ff) - .setScale(.5f) - .setTextAlignment(Alignment.CenterLeft) - .setPos(46, 58)); - if (isAdvanced) { - builder.widget( - TextWidget.dynamicString( - () -> "Pointer " + Integer.toHexString(pointer | 0x10000) - .substring(1)) - .setSynced(false) - .setDefaultColor(0x0033ff) - .setPos(46, 66)); - } - } - - private void addChangeParamButton(ModularWindow.Builder builder, OnClick onClick, int xPos, int yPos, - IDrawable overlay1, IDrawable overlay2) { - final boolean isAdvanced = mTier > 5; - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - AtomicInteger columnPointer = new AtomicInteger(pointer & 0xff); - AtomicBoolean secondRow = new AtomicBoolean((pointer & 0x0100) != 0); - onClick.accept(clickData.shift, columnPointer, secondRow); - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - if (isAdvanced) { - if (columnPointer.get() >= 64) { - columnPointer.set(63); - } else if (columnPointer.get() < 0) { - columnPointer.set(0); - } - pointer = secondRow.get() ? columnPointer.get() + 0x100 : columnPointer.get(); - } - if (param > 9) { - param = 9; - } else if (param < -1) { - param = -1; - } - }) - .setPlayClickSound(false) - .setBackground( - overlay2 != null ? new IDrawable[] { GT_UITextures.BUTTON_STANDARD, overlay1, overlay2 } - : new IDrawable[] { GT_UITextures.BUTTON_STANDARD, overlay1 }) - .setSize(18, 18) - .setPos(xPos, yPos)); - } - - @FunctionalInterface - private interface OnClick { - - void accept(boolean shift, AtomicInteger columnPointer, AtomicBoolean secondRow); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ParamText.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ParamText.java deleted file mode 100644 index 42a7e0cd81..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_ParamText.java +++ /dev/null @@ -1,291 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; - -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -/** - * Created by danie_000 on 15.12.2016. - */ -public class GT_MetaTileEntity_Hatch_ParamText extends GT_MetaTileEntity_Hatch_Param { - - public String value0s = ""; - public String value1s = ""; - - private String clientLocale = "en_US"; - - public GT_MetaTileEntity_Hatch_ParamText(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_Hatch_ParamText(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_Hatch_ParamText(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return new String[] { - translateToLocalFormatted("tt.keyword.Parametrizer", clientLocale) + " " - + translateToLocalFormatted("tt.keyword.ID", clientLocale) - + ": " - + EnumChatFormatting.GREEN - + param, - translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 0S: " - + EnumChatFormatting.DARK_AQUA - + value0s, - translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 1S: " - + EnumChatFormatting.DARK_BLUE - + value1s, - translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 0D: " + EnumChatFormatting.AQUA + value0D, - translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 1D: " + EnumChatFormatting.BLUE + value1D, - translateToLocalFormatted("tt.keyword.Input", clientLocale) + " 0D: " + EnumChatFormatting.GOLD + input0D, - translateToLocalFormatted("tt.keyword.Input", clientLocale) + " 1D: " - + EnumChatFormatting.YELLOW - + input1D, }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setString("eIeValue0S", value0s); - aNBT.setString("eIeValue1S", value1s); - aNBT.removeTag("ePointer"); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - value0s = aNBT.getString("eIeValue0S"); - value1s = aNBT.getString("eIeValue1S"); - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public boolean isLiquidInput(ForgeDirection side) { - return false; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return false; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public String[] getDescription() { - return new String[] { CommonValues.TEC_MARK_GENERAL, - EnumChatFormatting.DARK_RED + "Deprecated; Now you can set parameter by clicking LED on multiblock GUI.", - EnumChatFormatting.DARK_RED + "If it doesn't work, try removing Parametrizer from multiblock structure.", }; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO_DARK) - .setSize(18, 18) - .setPos(148, 55)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE_PARAMETRIZER_TXT) - .setPos(7, 4) - .setSize(162, 72)); - - addChangeNumberButton(builder, -16, -4, 7, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE); - addChangeNumberButton(builder, -2, -1, 25, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL); - addChangeNumberButton(builder, 2, 1, 133, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL); - addChangeNumberButton(builder, 16, 4, 151, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE); - - builder.widget(new FakeSyncWidget.IntegerSyncer(() -> param, val -> param = val)) - .widget(new FakeSyncWidget.DoubleSyncer(() -> value0D, val -> value0D = val)) - .widget(new FakeSyncWidget.DoubleSyncer(() -> value1D, val -> value1D = val)) - .widget(new FakeSyncWidget.DoubleSyncer(() -> input0D, val -> input0D = val)) - .widget(new FakeSyncWidget.DoubleSyncer(() -> input1D, val -> input1D = val)); - // .widget(new FakeSyncWidget.StringSyncer(() -> value0s, val -> value0s = val)) - // .widget(new FakeSyncWidget.StringSyncer(() -> value1s, val -> value1s = val)); - - final String CIRCLED_0 = "\u24EA"; - final String CIRCLED_1 = "\u2460"; - final String ARROW_DOWN = "\u2b07"; - final String ARROW_UP = "\u2b06"; - builder.widget( - TextWidget.dynamicString(() -> "Parameters: " + param) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 7)) - .widget( - new TextWidget(CIRCLED_0 + ARROW_UP).setDefaultColor(0x00bbff) - .setPos(10, 29)) - .widget( - new TextWidget(CIRCLED_1 + ARROW_UP).setDefaultColor(0x0077ff) - .setPos(10, 44)) - .widget( - TextWidget.dynamicString(() -> CIRCLED_0 + ARROW_DOWN + TT_Utility.formatNumberExp(input0D)) - .setSynced(false) - .setDefaultColor(0x22ddff) - .setPos(10, 56)) - .widget( - TextWidget.dynamicString(() -> CIRCLED_1 + ARROW_DOWN + TT_Utility.formatNumberExp(input1D)) - .setSynced(false) - .setDefaultColor(0x00ffff) - .setPos(10, 65)); - - addTextField(builder, true); - addTextField(builder, false); - } - - private void addChangeNumberButton(ModularWindow.Builder builder, int changeNumberShift, int changeNumber, int xPos, - IDrawable overlay) { - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - param += clickData.shift ? changeNumberShift : changeNumber; - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - if (param > 9) { - param = 9; - } else if (param < -1) { - param = -1; - } - }) - .setPlayClickSound(false) - .setBackground(GT_UITextures.BUTTON_STANDARD, overlay, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID) - .setSize(18, 18) - .setPos(xPos, 4)); - } - - private void addTextField(ModularWindow.Builder builder, boolean isIndex0) { - TextFieldWidget widget = new TextFieldWidget(); - builder.widget( - widget.setGetter(() -> isIndex0 ? value0s : value1s) - .setSetter(str -> { - double val; - try { - val = parse(str); - } catch (Exception e) { - // This shouldn't happen as long as validator works - str = ""; - val = 0; - } - if (isIndex0) { - value0s = str; - value0D = val; - } else { - value1s = str; - value1D = val; - } - }) - .setValidator(str -> { - try { - parse(str); - return str; - } catch (Exception e) { - return widget.getLastText() - .size() > 0 ? widget.getLastText() - .get(0) : ""; - } - }) - .setTextColor(Color.WHITE.dark(1)) - .setTextAlignment(Alignment.CenterLeft) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) - .setPos(26, isIndex0 ? 26 : 41) - .setSize(138, 12)); - } - - private double parse(String str) { - double val; - if (str.contains("b")) { - String[] split = str.split("b"); - val = TT_Utility.bitStringToInt(split[0].replaceAll("[^-]", "") + split[1].replaceAll("_", "")); - } else if (str.contains("x")) { - String[] split = str.split("x"); - val = TT_Utility.hexStringToInt(split[0].replaceAll("[^-]", "") + split[1].replaceAll("_", "")); - } else { - val = TT_Utility.stringToDouble(str); - } - return val; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Rack.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Rack.java deleted file mode 100644 index 39756be453..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Rack.java +++ /dev/null @@ -1,414 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static com.github.technus.tectech.util.CommonValues.MULTI_CHECK_AT; -import static com.github.technus.tectech.util.TT_Utility.getUniqueIdentifier; -import static gregtech.api.enums.Mods.GraviSuite; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.enums.Mods.OpenComputers; -import static gregtech.api.util.GT_ModHandler.getModItem; -import static net.minecraft.util.StatCollector.translateToLocal; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import java.util.HashMap; -import java.util.Map; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -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; - -/** - * Created by Tec on 03.04.2017. - */ -public class GT_MetaTileEntity_Hatch_Rack extends GT_MetaTileEntity_Hatch implements IAddGregtechLogo, IAddUIWidgets { - - private static Textures.BlockIcons.CustomIcon EM_R; - private static Textures.BlockIcons.CustomIcon EM_R_ACTIVE; - public int heat = 0; - private float overClock = 1, overVolt = 1; - private static final Map componentBinds = new HashMap<>(); - - private String clientLocale = "en_US"; - - public GT_MetaTileEntity_Hatch_Rack(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 4, - new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.rack.desc.0"), - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.rack.desc.1") }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_Rack(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 4, aDescription, aTextures); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("eHeat", heat); - aNBT.setFloat("eOverClock", overClock); - aNBT.setFloat("eOverVolt", overVolt); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - heat = aNBT.getInteger("eHeat"); - overClock = aNBT.getFloat("eOverClock"); - overVolt = aNBT.getFloat("eOverVolt"); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - EM_R_ACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/EM_RACK_ACTIVE"); - EM_R = new Textures.BlockIcons.CustomIcon("iconsets/EM_RACK"); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(EM_R_ACTIVE) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(EM_R) }; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Rack(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (aBaseMetaTileEntity.isActive() || heat > 2000) { - return false; - } - return side == aBaseMetaTileEntity.getFrontFacing(); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (aBaseMetaTileEntity.isActive() || heat > 2000) { - return false; - } - return side == aBaseMetaTileEntity.getFrontFacing(); - } - - @Override - public int getSizeInventory() { // HACK TO NOT DROP CONTENTS!!! - return heat > 2000 || getBaseMetaTileEntity().isActive() ? 0 : mInventory.length; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - // if(aBaseMetaTileEntity.isActive()) - // aPlayer.addChatComponentMessage(new ChatComponentText("It is still active...")); - // else if(heat>0) - // aPlayer.addChatComponentMessage(new ChatComponentText("It is still warm...")); - // else - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - private int getComputationPower(float overclock, float overvolt, boolean tickingComponents) { - float computation = 0, heat = 0; - for (int i = 0; i < mInventory.length; i++) { - if (mInventory[i] == null || mInventory[i].stackSize != 1) { - continue; - } - RackComponent comp = componentBinds.get(getUniqueIdentifier(mInventory[i])); - if (comp == null) { - continue; - } - if (tickingComponents) { - if (this.heat > comp.maxHeat) { - mInventory[i] = null; - continue; - } else if (comp.subZero || this.heat >= 0) { - heat += (1f + comp.coolConstant * this.heat / 100000f) - * (comp.heatConstant > 0 ? comp.heatConstant * overclock * overvolt * overvolt : -10f); - - if (overvolt > TecTech.RANDOM.nextFloat()) { - computation += comp.computation * (1 + overclock * overclock) - / (1 + (overclock - overvolt) * (overclock - overvolt)); - } - } - } else { - computation += comp.computation * (1 + overclock * overclock) - / (1 + (overclock - overvolt) * (overclock - overvolt)); // For getInfoData() - } - } - if (tickingComponents) { - this.heat += Math.ceil(heat); - } - return (int) Math.floor(computation); - } - - public int tickComponents(float oc, float ov) { - overClock = oc; - overVolt = ov; - return getComputationPower(overClock, overVolt, true); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (aTick % 20 == MULTI_CHECK_AT) { - if (heat > 0) { - float heatC = 0; - for (int i = 0; i < mInventory.length; i++) { - if (mInventory[i] == null || mInventory[i].stackSize != 1) { - continue; - } - RackComponent comp = componentBinds.get(getUniqueIdentifier(mInventory[i])); - if (comp == null) { - continue; - } - if (heat - 20 > comp.maxHeat) { - mInventory[i] = null; - } else if (comp.heatConstant < 0) { - heatC += comp.heatConstant * (heat / 10000f); - } - } - heat += Math.max(-heat, Math.ceil(heatC)); - heat -= Math.max(heat / 1000, 20); - } - } - } - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return new String[] { - translateToLocalFormatted("tt.keyphrase.Base_computation", clientLocale) + ": " - + EnumChatFormatting.AQUA - + getComputationPower(overClock, overVolt, false), - translateToLocalFormatted("tt.keyphrase.Heat_Accumulated", clientLocale) + ": " - + EnumChatFormatting.RED - + heat - + EnumChatFormatting.RESET }; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO) - .setSize(18, 18) - .setPos(151, 63)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_HEAT_SINK) - .setPos(46, 17) - .setSize(84, 60)); - - Pos2d[] positions = new Pos2d[] { new Pos2d(68, 27), new Pos2d(90, 27), new Pos2d(68, 49), new Pos2d(90, 49), }; - for (int i = 0; i < positions.length; i++) { - builder.widget(new SlotWidget(new BaseSlot(inventoryHandler, i) { - - @Override - public int getSlotStackLimit() { - return 1; - } - - @Override - public boolean isEnabled() { - return !getBaseMetaTileEntity().isActive() && heat <= 0; - } - }).setBackground(getGUITextureSet().getItemSlot(), TecTechUITextures.OVERLAY_SLOT_RACK) - .setPos(positions[i])); - - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.BUTTON_STANDARD_LIGHT_16x16) - .setPos(152, 24) - .setSize(16, 16)) - .widget( - new DrawableWidget() - .setDrawable( - () -> getBaseMetaTileEntity().isActive() ? TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON - : TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_DISABLED) - .setPos(152, 24) - .setSize(16, 16)) - .widget( - new FakeSyncWidget.BooleanSyncer( - () -> getBaseMetaTileEntity().isActive(), - val -> getBaseMetaTileEntity().setActive(val))); - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.BUTTON_STANDARD_LIGHT_16x16) - .setPos(152, 41) - .setSize(16, 16)) - .widget( - new DrawableWidget() - .setDrawable( - () -> heat > 0 ? TecTechUITextures.OVERLAY_BUTTON_HEAT_ON - : TecTechUITextures.OVERLAY_BUTTON_HEAT_OFF) - .setPos(152, 41) - .setSize(16, 16)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> heat, val -> heat = val)); - } - } - - public static void run() { // 20k heat cap max! - new RackComponent(ItemList.Circuit_Crystalprocessor.get(1), 60, 56, -1f, 2000, true); // IV - new RackComponent(ItemList.Circuit_Crystalcomputer.get(1), 80, 54, -1f, 2000, true); // LuV - new RackComponent(ItemList.Circuit_Ultimatecrystalcomputer.get(1), 100, 52, -1f, 2000, true); // ZPM - new RackComponent(ItemList.Circuit_Crystalmainframe.get(1), 120, 50, -1f, 2000, true); // UV - - new RackComponent(ItemList.Circuit_Neuroprocessor.get(1), 160, 46, -1f, 4000, true); // LuV - new RackComponent(ItemList.Circuit_Wetwarecomputer.get(1), 180, 44, -1f, 4000, true); // ZPM - new RackComponent(ItemList.Circuit_Wetwaresupercomputer.get(1), 200, 42, -1f, 4000, true); // UV - new RackComponent(ItemList.Circuit_Wetwaremainframe.get(1), 220, 40, -1f, 4000, true); // UHV - - new RackComponent("IC2:ic2.reactorVent", 0, -1, 40f, 2000, false); // Heat Vent - new RackComponent("IC2:ic2.reactorVentCore", 0, -1, 80f, 4000, false); // Reactor Heat Vent - new RackComponent("IC2:ic2.reactorVentGold", 0, -1, 120f, 6000, false); // Overclocked Heat Vent - new RackComponent("IC2:ic2.reactorVentDiamond", 0, -1, 160f, 8000, false); // Advanced Heat Vent - - if (NewHorizonsCoreMod.isModLoaded()) { - // GTNH-GT5u circuits (these components causes crashes when used with the original GT5u) - new RackComponent(ItemList.Circuit_Bioprocessor.get(1), 200, 36, -1f, 6000, true); // ZPM - new RackComponent(ItemList.Circuit_Biowarecomputer.get(1), 220, 34, -1f, 6000, true); // UV - new RackComponent(ItemList.Circuit_Biowaresupercomputer.get(1), 240, 32, -1f, 6000, true); // UHV - new RackComponent(ItemList.Circuit_Biomainframe.get(1), 260, 30, -1f, 6000, true); // UEV - - new RackComponent(ItemList.Circuit_OpticalProcessor.get(1), 200, 26, -1f, 8000, true); // UV - new RackComponent(ItemList.Circuit_OpticalAssembly.get(1), 220, 24, -1f, 8000, true); // UHV - new RackComponent(ItemList.Circuit_OpticalComputer.get(1), 240, 22, -1f, 8000, true); // UEV - new RackComponent(ItemList.Circuit_OpticalMainframe.get(1), 260, 20, -1f, 8000, true); // UIV - - new RackComponent("dreamcraft:item.PikoCircuit", 260, 12, -1f, 9500, true); // UMV - new RackComponent("dreamcraft:item.QuantumCircuit", 320, 10, -1f, 10000, true); // UXV - } - - if (OpenComputers.isModLoaded()) { - new RackComponent("OpenComputers:item.oc.CPU2", 80, 46, -1f, 2000, true); // CPU T3 - new RackComponent("OpenComputers:item.oc.GraphicsCard2", 100, 44, -1f, 2000, true); // GPU T3 - new RackComponent("OpenComputers:item.oc.APU1", 120, 42, -1f, 2000, true); // APU T3 - new RackComponent("OpenComputers:item.oc.APU2", 240, 40, -1f, 2000, true); // APU Creative - } - - if (GraviSuite.isModLoaded()) { - new RackComponent(getModItem(GraviSuite.ID, "itemSimpleItem", 1, 2), 0, -1, 200f, 10000, false); // CC - } - } - - public static class RackComponent implements Comparable { - - private final String unlocalizedName; - private final float heatConstant, coolConstant, computation, maxHeat; - private final boolean subZero; - - RackComponent(ItemStack is, float computation, float heatConstant, float coolConstant, float maxHeat, - boolean subZero) { - this(getUniqueIdentifier(is), computation, heatConstant, coolConstant, maxHeat, subZero); - } - - RackComponent(String is, float computation, float heatConstant, float coolConstant, float maxHeat, - boolean subZero) { - unlocalizedName = is; - this.computation = computation; - this.heatConstant = heatConstant; - this.coolConstant = coolConstant; - this.maxHeat = maxHeat; - this.subZero = subZero; - componentBinds.put(unlocalizedName, this); - if (DEBUG_MODE) { - TecTech.LOGGER.info("Component registered: " + unlocalizedName); - } - } - - @Override - public int compareTo(RackComponent o) { - return unlocalizedName.compareTo(o.unlocalizedName); - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof RackComponent) { - return compareTo((RackComponent) obj) == 0; - } - return false; - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Uncertainty.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Uncertainty.java deleted file mode 100644 index 2b0a4f2674..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_Uncertainty.java +++ /dev/null @@ -1,469 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static net.minecraft.util.StatCollector.translateToLocal; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; -import static org.lwjgl.opengl.GL11.GL_BLEND; -import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA; -import static org.lwjgl.opengl.GL11.GL_SRC_ALPHA; -import static org.lwjgl.opengl.GL11.glBlendFunc; -import static org.lwjgl.opengl.GL11.glColor4f; -import static org.lwjgl.opengl.GL11.glDisable; -import static org.lwjgl.opengl.GL11.glEnable; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizons.modularui.api.GlStateManager; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.objects.GT_RenderedTexture; - -/** - * Created by danie_000 on 15.12.2016. - */ -public class GT_MetaTileEntity_Hatch_Uncertainty extends GT_MetaTileEntity_Hatch - implements IAddGregtechLogo, IAddUIWidgets { - - private static Textures.BlockIcons.CustomIcon ScreenON; - private static Textures.BlockIcons.CustomIcon ScreenOFF; - public short[] matrix = new short[] { 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, - 500 }; - public byte selection = -1, mode = 0, status = -128; // all 8 bits set - - private String clientLocale = "en_US"; - - public GT_MetaTileEntity_Hatch_Uncertainty(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 0, ""); - TT_Utility.setTier(aTier, this); - regenerate(); - } - - public GT_MetaTileEntity_Hatch_Uncertainty(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - regenerate(); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/UC"); - ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/UC_ACTIVE"); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(ScreenON) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(ScreenOFF) }; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide() && (aTick & 15) == 0) { - if (mode == 0) { - aBaseMetaTileEntity.setActive(false); - status = -128; - } else { - aBaseMetaTileEntity.setActive(true); - shift(); - compute(); - } - } - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_Hatch_Uncertainty(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return new String[] { - translateToLocalFormatted("tt.keyword.Status", clientLocale) + ": " + EnumChatFormatting.GOLD + status }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setByte("mSel", selection); - aNBT.setByte("mMode", mode); - aNBT.setByte("mStatus", status); - NBTTagCompound mat = new NBTTagCompound(); - for (int i = 0; i < 16; i++) { - mat.setShort(Integer.toString(i), matrix[i]); - } - aNBT.setTag("mMat", mat); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - selection = aNBT.getByte("mSel"); - mode = aNBT.getByte("mMode"); - status = aNBT.getByte("mStatus"); - NBTTagCompound mat = aNBT.getCompoundTag("mMat"); - for (int i = 0; i < 16; i++) { - matrix[i] = mat.getShort(Integer.toString(i)); - } - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public boolean isLiquidInput(ForgeDirection side) { - return false; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return false; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public String[] getDescription() { - return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.certain.desc.0"), // Feeling - // certain, - // or - // not? - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockmachines.hatch.certain.desc.1") // Schrödinger equation in a box - }; - } - - private boolean balanceCheck(int sideLenY, short... masses) { - float inequality = 0; - for (int i = 0; i < masses.length >> 1; i++) { - inequality += Math.abs(masses[i] - masses[masses.length - i - 1]); - } - return inequality < masses.length << 7; - } - - public void regenerate() { - for (int i = 0; i < matrix.length; i++) { - matrix[i] = (short) TecTech.RANDOM.nextInt(1000); - } - } - - public byte compute() { - int result = 0; - switch (mode) { - case 1: // ooo oxo ooo - result = balanceCheck(4, matrix) ? 0 : 1; - break; - case 2: // ooo xox ooo - result += balanceCheck( - 4, - matrix[0], - matrix[4], - matrix[1], - matrix[5], - matrix[2], - matrix[6], - matrix[3], - matrix[7]) ? 0 : 1; - result += balanceCheck( - 4, - matrix[8], - matrix[12], - matrix[9], - matrix[13], - matrix[10], - matrix[14], - matrix[11], - matrix[15]) ? 0 : 2; - break; - case 3: // oxo xox oxo - result += balanceCheck( - 2, - matrix[0], - matrix[4], - matrix[8], - matrix[12], - matrix[1], - matrix[5], - matrix[9], - matrix[13]) ? 0 : 1; - result += balanceCheck( - 4, - matrix[0], - matrix[4], - matrix[1], - matrix[5], - matrix[2], - matrix[6], - matrix[3], - matrix[7]) ? 0 : 2; - result += balanceCheck( - 4, - matrix[8], - matrix[12], - matrix[9], - matrix[13], - matrix[10], - matrix[14], - matrix[11], - matrix[15]) ? 0 : 4; - result += balanceCheck( - 2, - matrix[2], - matrix[6], - matrix[10], - matrix[14], - matrix[3], - matrix[7], - matrix[11], - matrix[15]) ? 0 : 8; - break; - case 4: // xox ooo xox - result += balanceCheck(2, matrix[0], matrix[4], matrix[1], matrix[5]) ? 0 : 1; - result += balanceCheck(2, matrix[8], matrix[12], matrix[9], matrix[13]) ? 0 : 2; - result += balanceCheck(2, matrix[2], matrix[6], matrix[3], matrix[7]) ? 0 : 4; - result += balanceCheck(2, matrix[10], matrix[14], matrix[11], matrix[15]) ? 0 : 8; - break; - case 5: // xox oxo xox - result += balanceCheck(2, matrix[0], matrix[4], matrix[1], matrix[5]) ? 0 : 1; - result += balanceCheck(2, matrix[8], matrix[12], matrix[9], matrix[13]) ? 0 : 2; - result += balanceCheck(4, matrix) ? 0 : 4; - result += balanceCheck(2, matrix[2], matrix[6], matrix[3], matrix[7]) ? 0 : 8; - result += balanceCheck(2, matrix[10], matrix[14], matrix[11], matrix[15]) ? 0 : 16; - break; - } - return status = (byte) result; - } - - private void shift() { - int i = TecTech.RANDOM.nextInt(16), j = TecTech.RANDOM.nextInt(128); - matrix[i] += ((matrix[i] & 1) == 0 ? 2 : -2) * j >> 5; - matrix[i] += j == 0 ? 1 : 0; - if (matrix[i] < 0) { - matrix[i] = 0; - } else if (matrix[i] > 1000) { - matrix[i] = 999; - } - } - - public byte update(int newMode) { - if (newMode == mode) { - return status; - } - if (newMode < 0 || newMode > 5) { - newMode = 0; - } - mode = (byte) newMode; - regenerate(); - compute(); - return status; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO_DARK) - .setSize(18, 18) - .setPos(112, 55)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - final boolean isAdvanced = mTier > 7; - - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE) - .setPos(43, 4) - .setSize(90, 72)) - .widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_UNCERTAINTY_MONITOR) - .setPos(46, 27) - .setSize(46, 46)); - - int[] xPositions = new int[] { 7, 25, 133, 151 }; - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - final int index = i * 4 + j; - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - if (selection == -1) { - selection = (byte) index; - } else { - short temp = matrix[selection]; - matrix[selection] = matrix[index]; - matrix[index] = temp; - selection = -1; - } - compute(); - }) - .setPlayClickSound(false) - .setBackground(GT_UITextures.BUTTON_STANDARD, TecTechUITextures.OVERLAY_BUTTON_UNCERTAINTY[index]) - .setPos(xPositions[i], 4 + j * 18) - .setSize(18, 18)) - .widget(new FakeSyncWidget.ShortSyncer(() -> matrix[index], val -> matrix[index] = val)); - } - } - builder.widget(new FakeSyncWidget.ByteSyncer(() -> selection, val -> selection = val)) - .widget(new FakeSyncWidget.ByteSyncer(() -> mode, val -> mode = val)) - .widget(new FakeSyncWidget.ByteSyncer(() -> status, val -> status = val)); - - builder.widget( - new TextWidget().setStringSupplier(() -> "Status: " + (status == 0 ? "OK" : "NG")) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 7)); - - for (int i = 0; i < 9; i++) { - final int index = i; - builder.widget(new DrawableWidget().setDrawable(() -> { - UITexture valid = TecTechUITextures.PICTURE_UNCERTAINTY_VALID[index]; - UITexture invalid = TecTechUITextures.PICTURE_UNCERTAINTY_INVALID[index]; - switch (mode) { - case 1: // ooo oxo ooo - if (index == 4) return status == 0 ? valid : invalid; - break; - case 2: // ooo xox ooo - if (index == 3) return (status & 1) == 0 ? valid : invalid; - if (index == 5) return (status & 2) == 0 ? valid : invalid; - break; - case 3: // oxo xox oxo - if (index == 1) return (status & 1) == 0 ? valid : invalid; - if (index == 3) return (status & 2) == 0 ? valid : invalid; - if (index == 5) return (status & 4) == 0 ? valid : invalid; - if (index == 7) return (status & 8) == 0 ? valid : invalid; - break; - case 4: // xox ooo xox - if (index == 0) return (status & 1) == 0 ? valid : invalid; - if (index == 2) return (status & 2) == 0 ? valid : invalid; - if (index == 6) return (status & 4) == 0 ? valid : invalid; - if (index == 8) return (status & 8) == 0 ? valid : invalid; - break; - case 5: // xox oxo xox - if (index == 0) return (status & 1) == 0 ? valid : invalid; - if (index == 2) return (status & 2) == 0 ? valid : invalid; - if (index == 4) return (status & 4) == 0 ? valid : invalid; - if (index == 6) return (status & 8) == 0 ? valid : invalid; - if (index == 8) return (status & 16) == 0 ? valid : invalid; - break; - } - return null; - }) - .setPos(55 + (index % 3) * 12, 36 + (index / 3) * 12) - .setSize(4, 4)); - } - - for (int i = 0; i < 16; i++) { - final int index = i; - builder.widget(new DrawableWidget() { - - @Override - public void draw(float partialTicks) { - if (isAdvanced) { - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glColor4f(1f, 1f, 1f, (float) matrix[index] / 1000f); - - // super.draw but without disabling blend - GlStateManager.pushMatrix(); - getDrawable().draw(Pos2d.ZERO, getSize(), partialTicks); - GlStateManager.popMatrix(); - - glDisable(GL_BLEND); - glColor4f(1f, 1f, 1f, 1f); - } else { - if (TecTech.RANDOM.nextInt(1000) < matrix[index]) { - super.draw(partialTicks); - } - } - } - }.setDrawable(TecTechUITextures.PICTURE_UNCERTAINTY_INDICATOR) - .setPos(47 + (i / 4) * 12, 28 + (i % 4) * 12) - .setSize(8, 8)) - .widget( - new DrawableWidget() - .setDrawable(() -> selection == index ? TecTechUITextures.PICTURE_UNCERTAINTY_SELECTED : null) - .setPos(46 + (i / 4) * 12, 27 + (i % 4) * 12) - .setSize(10, 10)); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Input.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Input.java deleted file mode 100644 index 6824ce2ef1..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Input.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; - -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.common.WirelessComputationPacket; - -public class GT_MetaTileEntity_Hatch_WirelessComputation_Input extends GT_MetaTileEntity_Hatch_InputData - implements IAddGregtechLogo, IAddUIWidgets { - - public long requiredComputation = 10000; - - private String clientLocale = "en_US"; - - public GT_MetaTileEntity_Hatch_WirelessComputation_Input(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_Hatch_WirelessComputation_Input(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_WirelessComputation_Input(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - if (!aPlayer.isUsingItem()) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - } - return super.onRightclick(aBaseMetaTileEntity, aPlayer); - } - - @Override - public boolean isDataInputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean canConnectData(ForgeDirection side) { - return false; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && q == null) { - q = WirelessComputationPacket.downloadData(aBaseMetaTileEntity.getOwnerUuid(), requiredComputation, aTick); - } - - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO) - .setSize(18, 18) - .setPos(151, 63)); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - requiredComputation = aNBT.getLong("requiredComputation"); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setLong("requiredComputation", requiredComputation); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - TextWidget.localised("tt.wirelessInputData.config.text") - .setPos(20, 12) - .setSize(140, 14)) - .widget( - new TextFieldWidget().setSetterInt(val -> requiredComputation = val) - .setGetterLong(() -> requiredComputation) - .setNumbers(1, Integer.MAX_VALUE) - .setOnScrollNumbers(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(70, 18) - .setPos(54, 36) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)); - } - - private static String[] tooltips; - - @Override - public String[] getDescription() { - if (tooltips == null) { - tooltips = new String[] { "Wireless Computation Data Input for Multiblocks" }; - } - return tooltips; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Output.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Output.java deleted file mode 100644 index 6e09554acd..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessComputation_Output.java +++ /dev/null @@ -1,61 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.common.WirelessComputationPacket; - -public class GT_MetaTileEntity_Hatch_WirelessComputation_Output extends GT_MetaTileEntity_Hatch_OutputData { - - public GT_MetaTileEntity_Hatch_WirelessComputation_Output(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - - } - - public GT_MetaTileEntity_Hatch_WirelessComputation_Output(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_WirelessComputation_Output(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isDataInputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean canConnectData(ForgeDirection side) { - return false; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && q != null) { - WirelessComputationPacket.uploadData(aBaseMetaTileEntity.getOwnerUuid(), q.getContent(), aTick); - q = null; - } - } - - private static String[] tooltips; - - @Override - public String[] getDescription() { - if (tooltips == null) { - tooltips = new String[] { "Wireless Computation Output for Multiblocks" }; - } - return tooltips; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessInputDataItems.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessInputDataItems.java deleted file mode 100644 index 15f4b1f988..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessInputDataItems.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_ACTIVE; -import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_CONN; -import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_SIDES; -import static gregtech.api.enums.Dyes.MACHINE_METAL; -import static net.minecraft.util.StatCollector.translateToLocal; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import java.util.List; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.enums.Dyes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_DataAccess; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.common.WirelessDataStore; - -public class GT_MetaTileEntity_Hatch_WirelessInputDataItems extends GT_MetaTileEntity_Hatch_DataAccess { - - private String clientLocale = "en_US"; - - public GT_MetaTileEntity_Hatch_WirelessInputDataItems(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_WirelessInputDataItems(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_WirelessInputDataItems(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_WirelessInputDataItems( - this.mName, - this.mTier, - mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - EM_D_ACTIVE, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(EM_D_CONN) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - EM_D_SIDES, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(EM_D_CONN) }; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - return true; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public String[] getDescription() { - return new String[] { CommonValues.TEC_MARK_EM, - translateToLocal("gt.blockmachines.hatch.datainasswireless.desc.0"), - translateToLocal("gt.blockmachines.hatch.datainasswireless.desc.1"), }; - } - - @Override - public List getInventoryItems(Predicate filter) { - WirelessDataStore wirelessData = WirelessDataStore - .getWirelessDataSticks(getBaseMetaTileEntity().getOwnerUuid()); - return wirelessData.downloadData() - .stream() - .filter(stack -> stack != null && filter.test(stack)) - .collect(Collectors.toList()); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return new String[] { translateToLocalFormatted("tt.keyphrase.Content_Stack_Count", clientLocale) + ": " - + getInventoryItems(_stack -> true).size() }; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessMulti.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessMulti.java deleted file mode 100644 index 7d4baca7cd..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessMulti.java +++ /dev/null @@ -1,215 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_WIRELESS_LASER; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_WIRELESS_MULTI_16A; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_WIRELESS_MULTI_4A; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_WIRELESS_MULTI_64A; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.BLUE; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.BOLD; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.GRAY; -import static gregtech.api.enums.GT_Values.AuthorColen; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static gregtech.common.misc.WirelessNetworkManager.strongCheckOrAddUser; -import static java.lang.Long.min; - -import java.math.BigInteger; -import java.util.UUID; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IWirelessEnergyHatchInformation; -import gregtech.api.metatileentity.MetaTileEntity; - -public class GT_MetaTileEntity_Hatch_WirelessMulti extends GT_MetaTileEntity_Hatch_EnergyMulti - implements IWirelessEnergyHatchInformation { - - private final BigInteger eu_transferred_per_operation = BigInteger - .valueOf(Amperes * V[mTier] * ticks_between_energy_addition); - private final long eu_transferred_per_operation_long = eu_transferred_per_operation.longValue(); - - private UUID owner_uuid; - - public GT_MetaTileEntity_Hatch_WirelessMulti(int aID, String aName, String aNameRegional, int aTier, int aAmp) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { GRAY + "Stores energy globally in a network, up to 2^(2^31) EU.", - GRAY + "Does not connect to wires. This block withdraws EU from the network.", - AuthorColen + GRAY + BOLD + " & " + BLUE + BOLD + "Cloud" }, - aAmp); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_WirelessMulti(String aName, int aTier, int aAmp, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aAmp, aDescription, aTextures); - } - - private ITexture[] TEXTURE_OVERLAY; - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - switch (Amperes) { - case 4: - TEXTURE_OVERLAY = OVERLAYS_ENERGY_IN_WIRELESS_MULTI_4A; - break; - case 16: - TEXTURE_OVERLAY = OVERLAYS_ENERGY_IN_WIRELESS_MULTI_16A; - break; - case 64: - TEXTURE_OVERLAY = OVERLAYS_ENERGY_IN_WIRELESS_MULTI_64A; - break; - default: - TEXTURE_OVERLAY = OVERLAYS_ENERGY_IN_WIRELESS_LASER; - break; - } - return new ITexture[] { aBaseTexture, TEXTURE_OVERLAY[mTier] }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - switch (Amperes) { - case 4: - TEXTURE_OVERLAY = OVERLAYS_ENERGY_IN_WIRELESS_MULTI_4A; - break; - case 16: - TEXTURE_OVERLAY = OVERLAYS_ENERGY_IN_WIRELESS_MULTI_16A; - break; - case 64: - TEXTURE_OVERLAY = OVERLAYS_ENERGY_IN_WIRELESS_MULTI_64A; - break; - default: - TEXTURE_OVERLAY = OVERLAYS_ENERGY_IN_WIRELESS_LASER; - break; - } - return new ITexture[] { aBaseTexture, TEXTURE_OVERLAY[mTier] }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isEnetInput() { - return false; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return Amperes * V[mTier]; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxEUStore() { - return totalStorage(V[mTier]) * Amperes / 2; - } - - @Override - public long maxAmperesIn() { - return Amperes; - } - - @Override - public long maxWorkingAmperesIn() { - return Amperes; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_WirelessMulti(mName, mTier, Amperes, mDescriptionArray, mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public ConnectionType getConnectionType() { - return ConnectionType.WIRELESS; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - if (aBaseMetaTileEntity.isServerSide()) { - // On first tick find the player name and attempt to add them to the map. - - // UUID and username of the owner. - owner_uuid = aBaseMetaTileEntity.getOwnerUuid(); - - strongCheckOrAddUser(owner_uuid); - - tryFetchingEnergy(); - } - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - - super.onPreTick(aBaseMetaTileEntity, aTick); - - if (aBaseMetaTileEntity.isServerSide()) { - - // This is set up in a way to be as optimised as possible. If a user has a relatively plentiful energy - // network - // it should make no difference to them. Minimising the number of operations on BigInteger is essential. - - // Every ticks_between_energy_addition add eu_transferred_per_operation to internal EU storage from network. - if (aTick % ticks_between_energy_addition == 0L) { - tryFetchingEnergy(); - } - } - } - - private void tryFetchingEnergy() { - long currentEU = getBaseMetaTileEntity().getStoredEU(); - long maxEU = maxEUStore(); - long euToTransfer = min(maxEU - currentEU, eu_transferred_per_operation_long); - if (euToTransfer <= 0) return; // nothing to transfer - if (!addEUToGlobalEnergyMap(owner_uuid, -euToTransfer)) return; - setEUVar(currentEU + euToTransfer); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessOutputDataItems.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessOutputDataItems.java deleted file mode 100644 index 02b8ef182f..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/hatch/GT_MetaTileEntity_Hatch_WirelessOutputDataItems.java +++ /dev/null @@ -1,148 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.hatch; - -import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_ACTIVE; -import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_CONN; -import static com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector.EM_D_SIDES; -import static gregtech.api.enums.Dyes.MACHINE_METAL; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.Arrays; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.enums.Dyes; -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.common.WirelessDataStore; - -public class GT_MetaTileEntity_Hatch_WirelessOutputDataItems extends GT_MetaTileEntity_Hatch { - - public InventoryDataPacket dataPacket = null; - - public boolean uploadedSinceReset = false; - - public GT_MetaTileEntity_Hatch_WirelessOutputDataItems(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { CommonValues.TEC_MARK_EM, - translateToLocal("gt.blockmachines.hatch.wirelessdataoutass.desc.0"), - translateToLocal("gt.blockmachines.hatch.wirelessdataoutass.desc.1"), }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_Hatch_WirelessOutputDataItems(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_WirelessOutputDataItems( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (dataPacket != null) { - aNBT.setTag("eDATA", dataPacket.toNbt()); - } - aNBT.setBoolean("uploadedSinceReset", uploadedSinceReset); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("eDATA")) { - dataPacket = new InventoryDataPacket(aNBT.getCompoundTag("eDATA")); - } - if (aNBT.hasKey("uploadedSinceReset")) { - uploadedSinceReset = aNBT.getBoolean("uploadedSinceReset"); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - // Upload data packet and mark it as uploaded, so it will not be uploaded again - // until the data bank resets the wireless network - if (dataPacket != null && !uploadedSinceReset) { - WirelessDataStore wirelessDataStore = WirelessDataStore - .getWirelessDataSticks(getBaseMetaTileEntity().getOwnerUuid()); - wirelessDataStore.uploadData(Arrays.asList(dataPacket.getContent())); - uploadedSinceReset = true; - } - } - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - EM_D_ACTIVE, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(EM_D_CONN) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture( - EM_D_SIDES, - Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), - new GT_RenderedTexture(EM_D_CONN) }; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java deleted file mode 100644 index 1bdd8fc7c5..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java +++ /dev/null @@ -1,5105 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.util.TT_Utility.replaceLetters; - -public abstract class ForgeOfGodsRingsStructureString { - - public static final String[][] SECOND_RING = { { - - " BBBBBBB ", - " BBCCCCCCCBB ", - " BBCC CCBB ", - " BBEC CEBB ", - " BEEC CEEB ", - " EEC CEE ", - " EC CE ", - " EC CCCCC CE ", - " C C C C ", - " C C C C ", - " C C C C ", - " C C C C ", - " C C C C ", - " C C C C ", - " C C C C ", - " EC CCCCC CE ", - " EC CE ", - " EEC CEE ", - " BEEC CEEB ", - " BBEC CEBB ", - " BBCC CCBB ", - " BBCCCCCCCBB ", - " BBBBBBB " }, - { " BBBBBBB ", - " BBCCCCCCCBB ", - " BBCC D CCBB ", - " BBEC D CEBB ", - " BBBEEC DD CEEBBB ", - " EEEEC D CEEEE ", - " EEEC DD CEEE ", - " EEEC CCCCC CEEE ", - " EEC CHHHHHC CEE ", - " EEC CHHHHHHHC CEE ", - " EEC CHHHHHHHC CEE ", - " EEC CHHHHHHHC CEE ", - " EEC CHHHHHHHC CEE ", - " EEC CHHHHHHHC CEE ", - " EEC CHHHHHC CEE ", - " EEEC CCCCC CEEE ", - " EEEC DD CEEE ", - " EEEEC D CEEEE ", - " BBBEEC DD CEEBBB ", - " BBEC D CEBB ", - " BBCC D CCBB ", - " BBCCCCCCCBB ", - " BBBBBBB " }, - { " BBBBBBB ", - " BBCCCCCCCBB ", - " BBCC CCBB ", - " BBEC CEBB ", - " BBBEEC CEEBBB ", - " BBBBEEEEC CEEEEBBBB ", - " EEEEEEEC CEEEEEEE ", - " EEEEEEEC CCCCC CEEEEEEE ", - " EEEEEEC C C CEEEEEE ", - " EEEEEEC C C CEEEEEE ", - " EEEEEEC C C CEEEEEE ", - " EEEEEEC C C CEEEEEE ", - " EEEEEEC C C CEEEEEE ", - " EEEEEEC C C CEEEEEE ", - " EEEEEEC C C CEEEEEE ", - " EEEEEEEC CCCCC CEEEEEEE ", - " EEEEEEEC CEEEEEEE ", - " BBBBEEEEC CEEEEBBBB ", - " BBBEEC CEEBBB ", - " BBEC CEBB ", - " BBCC CCBB ", - " BBCCCCCCCBB ", - " BBBBBBB " }, - { " ", - " ", - " ", - " ", - " BBB BBB ", - " BBBBEEE EEEBBBB ", - " BBBEEEEEEE EEEEEEEBBB ", - " EEEEEEEEEE EEEEEEEEEE ", - " EEEEEEEEEE EEEEEEEEEE ", - " EEEEEEEKKK KKKEEEEEEE ", - " EEEEEEEKKK KKKEEEEEEE ", - " EEEEEEEKKK KKKEEEEEEE ", - " EEEEEEEKKK KKKEEEEEEE ", - " EEEEEEEKKK KKKEEEEEEE ", - " EEEEEEEEEE EEEEEEEEEE ", - " EEEEEEEEEE EEEEEEEEEE ", - " BBBEEEEEEE EEEEEEEBBB ", - " BBBBEEE EEEBBBB ", - " BBB BBB ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " BBBBBEEEE EEEEBBBBB ", - " EEEEEEEEE EEEEEEEEE ", - " EEEEEEEEE EEEEEEEEE ", - " EEEEEKKKK KKKKEEEEE ", - " EEEEEKKKK KKKKEEEEE ", - " EEEEEKKKK KKKKEEEEE ", - " EEEEEKKKK KKKKEEEEE ", - " EEEEEKKKK KKKKEEEEE ", - " EEEEEEEEE EEEEEEEEE ", - " EEEEEEEEE EEEEEEEEE ", - " BBBBBEEEE EEEEBBBBB ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " BBBEEEEE EEEEEBBB ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEKK KKEEEEEE ", - " EEEEEEKK KKEEEEEE ", - " EEEEEEKK KKEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " BBBEEEEE EEEEEBBB ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " BBBBBEEE EEEBBBBB ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " EEEEEKKK KKKEEEEE ", - " EEEEEKKK KKKEEEEE ", - " EEEEEKKK KKKEEEEE ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " BBBBBEEE EEEBBBBB ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEKK KKEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " BBEEEE EEEEBB ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEKK KKEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " BBEEEE EEEEBB ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BB BB ", - " BBBBEE EEBBBB ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEKK KKEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " BBBBEE EEBBBB ", - " BB BB ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEK KEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEKK KKEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " BEEEE EEEEB ", - " EEEEE EEEEE ", - " EEEEK KEEEE ", - " EEEEE EEEEE ", - " BEEEE EEEEB ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " BBEEE EEEBB ", - " EEEEE EEEEE ", - " EEEEK KEEEE ", - " EEEEE EEEEE ", - " BBEEE EEEBB ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " BBBBE EBBBB ", - " EEEEE EEEEE ", - " EEEKK KKEEE ", - " EEEEE EEEEE ", - " BBBBE EBBBB ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEK KEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEK KEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEK KEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEKK KKEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEK KEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEK KEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEKK KKEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEK KEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEKK KKEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEKK KKEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEKK KKEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBB BBBBBBBB ", - " EEEEEEEE EEEEEEEE ", - " EEEEEKKK KKKEEEEE ", - " EEEEEEEE EEEEEEEE ", - " BBBBBBBB BBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBB BBBBBBBB ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEKK KKEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " BBBBBBBB BBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBB BBBBBBBBB ", - " EEEEEEEEE EEEEEEEEE ", - " EEEEEKKKK KKKKEEEEE ", - " EEEEEEEEE EEEEEEEEE ", - " BBBBBBBBB BBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBBB BBBBBBBBBBBB ", - " EEEEEEEEEEEE EEEEEEEEEEEE ", - " EEEEEEEKKKKK KKKKKEEEEEEE ", - " EEEEEEEEEEEE EEEEEEEEEEEE ", - " BBBBBBBBBBBB BBBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", - " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", - " EEEEEEEEEKKKKKKKKKKKKKKKEEEEEEEEE ", - " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", - " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBBBBBBBBBBBBBBBB ", - " EEEEEEEEEEEEEEEEEEEEEEEEE ", - " EEEEEEEEEEEEEEEEEEEEEEEEE ", - " EEEEEEEEEEEEEEEEEEEEEEEEE ", - " BBBBBBBBBBBBBBBBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBBBBBB ", - " EEEEEEEEEEEEEEE ", - " EEEEEEEEEEEEEEE ", - " EEEEEEEEEEEEEEE ", - " BBBBBBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " } }; - - public static final String[][] THIRD_RING = { - { " BBBBBBB ", - " BBCCCCCCCBB ", - " BBCC CCBB ", - " BBCC CCBB ", - " BBBEC CEBBB ", - " EEEC CEEE ", - " EEC CEE ", - " EEC CCCCC CEE ", - " EC CC CC CE ", - " EC C C CE ", - " C C C C ", - " C C C C ", - " C C C C ", - " C C C C ", - " C C C C ", - " C C C C ", - " C C C C ", - " EC C C CE ", - " EC CC CC CE ", - " EEC CCCCC CEE ", - " EEC CEE ", - " EEEC CEEE ", - " BBBEC CEBBB ", - " BBCC CCBB ", - " BBCC CCBB ", - " BBCCCCCCCBB ", - " BBBBBBB " }, - { " BBBBBBB ", - " BBCCCCCCCBB ", - " BBCC CCBB ", - " BBCCD CCBB ", - " BBBEC DD CEBBB ", - " BBBEEEC D CEEEBBB ", - " EEEEEC DD CEEEEE ", - " EEEEEC DCCCCC CEEEEE ", - " EEEEC CCHHHHHCC CEEEE ", - " EEEEC CHHHHHHHHHC CEEEE ", - " EEEC CHHHHHHHHHC CEEE ", - " EEEC CHHHHHHHHHHHC CEEE ", - " EEEC CHHHHHHHHHHHC CEEE ", - " EEEC CHHHHHHHHHHHC CEEE ", - " EEEC CHHHHHHHHHHHC CEEE ", - " EEEC CHHHHHHHHHHHC CEEE ", - " EEEC CHHHHHHHHHC CEEE ", - " EEEEC CHHHHHHHHHC CEEEE ", - " EEEEC CCHHHHHCC CEEEE ", - " EEEEEC CCCCCD CEEEEE ", - " EEEEEC DD CEEEEE ", - " BBBEEEC D CEEEBBB ", - " BBBEC DD CEBBB ", - " BBCC DCCBB ", - " BBCC CCBB ", - " BBCCCCCCCBB ", - " BBBBBBB " }, - { " BBBBBBB ", - " BBCCCCCCCBB ", - " BBCC CCBB ", - " BBCC CCBB ", - " BBBEC CEBBB ", - " BBBBEEEC CEEEBBBB ", - " BEEEEEEC CEEEEEEB ", - " EEEEEEEC CCCCC CEEEEEEE ", - " EEEEEEC CC CC CEEEEEE ", - " EEEEEEC C C CEEEEEE ", - " EEEEEC C C CEEEEE ", - " EEEEEC C C CEEEEE ", - " EEEEEC C C CEEEEE ", - " EEEEEC C C CEEEEE ", - " EEEEEC C C CEEEEE ", - " EEEEEC C C CEEEEE ", - " EEEEEC C C CEEEEE ", - " EEEEEEC C C CEEEEEE ", - " EEEEEEC CC CC CEEEEEE ", - " EEEEEEEC CCCCC CEEEEEEE ", - " BEEEEEEC CEEEEEEB ", - " BBBBEEEC CEEEBBBB ", - " BBBEC CEBBB ", - " BBCC CCBB ", - " BBCC CCBB ", - " BBCCCCCCCBB ", - " BBBBBBB " }, - { " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " BBBBEEEE EEEEBBBB ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEII IIEEEEEE ", - " EEEEEEII IIEEEEEE ", - " EEEEEEII IIEEEEEE ", - " EEEEEEII IIEEEEEE ", - " EEEEEEII IIEEEEEE ", - " EEEEEEII IIEEEEEE ", - " EEEEEEII IIEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " BBBBEEEE EEEEBBBB ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " BB BB ", - " BBBBBEE EEBBBBB ", - " BEEEEEEE EEEEEEEB ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " EEEEEIII IIIEEEEE ", - " EEEEEIII IIIEEEEE ", - " EEEEEIII IIIEEEEE ", - " EEEEEIII IIIEEEEE ", - " EEEEEIII IIIEEEEE ", - " EEEEEIII IIIEEEEE ", - " EEEEEIII IIIEEEEE ", - " EEEEEEEE EEEEEEEE ", - " EEEEEEEE EEEEEEEE ", - " BEEEEEEE EEEEEEEB ", - " BBBBBEE EEBBBBB ", - " BB BB ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " BBEEEE EEEEBB ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " BBEEEE EEEEBB ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " BBBBBE EBBBBB ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " BBBBBE EBBBBB ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEII IIEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " BBEEE EEEBB ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEII IIEEE ", - " EEEII IIEEE ", - " EEEII IIEEE ", - " EEEII IIEEE ", - " EEEII IIEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " BBEEE EEEBB ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEI IEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEI IEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " BEEE EEEB ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEI IEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " BEEE EEEB ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " BBBE EBBB ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEI IEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " BBBE EBBB ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEI EEEE ", - " EEEI IEEE ", - " EEEI EEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEE EEE ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " EEE EEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEI IEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEI IEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEI IEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEI IEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEI IEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEI IEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEI IEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEII IIEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEI IEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEII IIEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEII IIEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEII IIEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBB BBBBBBBB ", - " EEEEEEEE EEEEEEEE ", - " EEEEEIII IIIEEEEE ", - " EEEEEEEE EEEEEEEE ", - " BBBBBBBB BBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBB BBBBBBBBB ", - " EEEEEEEEE EEEEEEEEE ", - " EEEEEEIII IIIEEEEEE ", - " EEEEEEEEE EEEEEEEEE ", - " BBBBBBBBB BBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBB BBBBBBBBBBB ", - " EEEEEEEEEEE EEEEEEEEEEE ", - " EEEEEEIIIII IIIIIEEEEEE ", - " EEEEEEEEEEE EEEEEEEEEEE ", - " BBBBBBBBBBB BBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", - " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", - " EEEEEEEEEIIIIIIIIIIIIIEEEEEEEEE ", - " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", - " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBBBBBBBBBBBBBB ", - " EEEEEEEEEEEEEEEEEEEEEEE ", - " EEEEEEEEEEEEEEEEEEEEEEE ", - " EEEEEEEEEEEEEEEEEEEEEEE ", - " BBBBBBBBBBBBBBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBBBB ", - " EEEEEEEEEEEEE ", - " EEEEEEEEEEEEE ", - " EEEEEEEEEEEEE ", - " BBBBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " } }; - public static final String[][] SECOND_RING_AIR = replaceLetters(SECOND_RING, "L"); - public static final String[][] THIRD_RING_AIR = replaceLetters(THIRD_RING, "L"); - -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java deleted file mode 100644 index ce43510568..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java +++ /dev/null @@ -1,5435 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.util.TT_Utility.appendStringArrays; -import static com.github.technus.tectech.util.TT_Utility.replaceLetters; - -public abstract class ForgeOfGodsStructureString { - - public static final String[][] BEAM_SHAFT = { { - " ", - " ", - " ", - " ", - " ", - " ", - " BB BB ", - " BB BB ", - " B DDD DDD B ", - " DDFD DFDD ", - " DDADD DDADD ", - " DFDD DDFD ", - " DDD DDD ", - " ", - " ", - " ", - " DDD DDD ", - " DFDD DDFD ", - " DDADD DDADD ", - " DDFD DFDD ", - " B DDD DDD B ", - " BB BB ", - " BB BB ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " BB BB ", - " BEEBBBBB BBBBBEEB ", - " BEEEECCCCBCCCCEEEEB ", - " BEEECEE CFC EECEEEB ", - " BECEEE CFC EEECEB ", - " BCEE CFC EECB ", - " BCEE CCCFC EECB ", - " BC CFFCCFC CB ", - " BCCCCFCCFCFCCCCCB ", - " BFFFCCF~FCCFFFB ", - " BCCCCCFCFCCFCCCCB ", - " BC CFCCFFC CB ", - " BCEE CFCCC EECB ", - " BCEE CFC EECB ", - " BECEEE CFC EEECEB ", - " BEEECEE CFC EECEEEB ", - " BEEEECCCCBCCCCEEEEB ", - " BEEBBBBB BBBBBEEB ", - " BB BB ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " BB BB ", - " BBEEBBB BBBEEBB ", - " BEEEEEEB BEEEEEEB ", - " BEEDDDDDBBBBBDDDDDEEB ", - " BEEDEE EEDEEB ", - " BEDE EDEB ", - " BED DEB ", - " BED DEB ", - " BB BB ", - " B B ", - " B B ", - " B B ", - " BB BB ", - " BED DEB ", - " BED DEB ", - " BEDE EDEB ", - " BEEDEE EEDEEB ", - " BEEDDDDDBBBBBDDDDDEEB ", - " BEEEEEEB BEEEEEEB ", - " BBEEBBB BBBEEBB ", - " BB BB ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " BBBB BBBB ", - " BEEEEB BEEEEB ", - " BEEDDBBB BBBDDEEB ", - " BED DEB ", - " BED DEB ", - " BB BB ", - " B B ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " B B ", - " BB BB ", - " BED DEB ", - " BED DEB ", - " BEEDDBBB BBBDDEEB ", - " BEEEEB BEEEEB ", - " BBBB BBBB ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " BB BB ", - " BEEBB BBEEB ", - " BBB BEB ", - " B B ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " B B ", - " BEB BEB ", - " BEBBB BBEEB ", - " BB BB ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " BB BB ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " BB BB ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " B B ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB ", - " " }, - { " ", - " BEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEB ", - " " }, - { " ", - " BEEEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEEEB ", - " " }, - { " J ", - " BEEEEEB ", - " EEE EEE ", - " E E ", - " EE EE ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " E E ", - " E E ", - " JE EJ ", - " E E ", - " E E ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " EE EE ", - " E E ", - " EEE EEE ", - " BEEEEEB ", - " J " }, - { " ", - " BEEEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEEEB ", - " " }, - { " ", - " BEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEB ", - " " }, - { " ", - " BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " B B ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " B B ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB ", - " " }, - { " ", - " BEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEB ", - " " }, - { " ", - " BEEEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEEEB ", - " " }, - { " J ", - " BEEEEEB ", - " EEE EEE ", - " E E ", - " EE EE ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " E E ", - " E E ", - " JE EJ ", - " E E ", - " E E ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " EE EE ", - " E E ", - " EEE EEE ", - " BEEEEEB ", - " J " }, - { " ", - " BEEEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEEEB ", - " " }, - { " ", - " BEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEB ", - " " }, - { " ", - " BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " B B ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " B B ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB ", - " " }, - { " ", - " BEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEB ", - " " }, - { " ", - " BEEEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEEEB ", - " " }, - { " J ", - " BEEEEEB ", - " EEE EEE ", - " E E ", - " EE EE ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " E E ", - " E E ", - " JE EJ ", - " E E ", - " E E ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " EE EE ", - " E E ", - " EEE EEE ", - " BEEEEEB ", - " J " }, - { " ", - " BEEEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEEEB ", - " " }, - { " ", - " BEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEB ", - " " }, - { " ", - " BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " B B ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " B B ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB ", - " " }, - { " ", - " BEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEB ", - " " }, - { " ", - " BEEEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEEEB ", - " " }, - { " J ", - " BEEEEEB ", - " EEE EEE ", - " E E ", - " EE EE ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " E E ", - " E E ", - " JE EJ ", - " E E ", - " E E ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " EE EE ", - " E E ", - " EEE EEE ", - " BEEEEEB ", - " J " }, - { " ", - " BEEEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEEEB ", - " " }, - { " ", - " BEEEB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " E E ", - " E E ", - " E E ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BEEEB ", - " " }, - { " ", - " BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " B B ", - " B B ", - " B B ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " } }; - public static final String[][] FIRST_RING = { { - " ", - " ", - " ", - " ", - " ", - " BBBBB ", - " BBCCCCCBB ", - " BBCC CCBB ", - " BBCC CCBB ", - " EEC CEE ", - " EC CE ", - " EC CE ", - " C CCC C ", - " C C C C ", - " C C C C ", - " C C C C ", - " C CCC C ", - " EC CE ", - " EC CE ", - " EEC CEE ", - " BBCC CCBB ", - " BBCC CCBB ", - " BBCCCCCBB ", - " BBBBB ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " BBBBB ", - " BBCCCCCBB ", - " BBCC CCBB ", - " BBCC CCBB ", - " BBBEEC CEEBBB ", - " BBEEEEC DDCEEEEBB ", - " EEEEEEC DDD CEEEEEE ", - " EEEEEC CCCDD CEEEEE ", - " EEEEEC CHHHC CEEEEE ", - " EEEEEC CHHHC CEEEEE ", - " EEEEEC CHHHC CEEEEE ", - " EEEEEC DDCCC CEEEEE ", - " EEEEEEC DDD CEEEEEE ", - " BBEEEECDD CEEEEBB ", - " BBBEEC CEEBBB ", - " BBCC CCBB ", - " BBCC CCBB ", - " BBCCCCCBB ", - " BBBBB ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " BBBBB ", - " BBCCCCCBB ", - " BBCC CCBB ", - " BBCC CCBB ", - " BBBEEC CEEBBB ", - " BBBBEEEEC CEEEEBBBB ", - " BBEEEEEEEEC CEEEEEEEEBB ", - " EEEEEEEEEC CCC CEEEEEEEEE ", - " EEEEEEEEEC C C CEEEEEEEEE ", - " EEEEEEEEEC C C CEEEEEEEEE ", - " EEEEEEEEEC C C CEEEEEEEEE ", - " EEEEEEEEEC CCC CEEEEEEEEE ", - " BBEEEEEEEEC CEEEEEEEEBB ", - " BBBBEEEEC CEEEEBBBB ", - " BBBEEC CEEBBB ", - " BBCC CCBB ", - " BBCC CCBB ", - " BBCCCCCBB ", - " BBBBB ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " BBBBEEEE EEEEBBBB ", - " BBBBBEEEEEEEE EEEEEEEEBBBBB ", - " EEEEEEEEEEEEE EEEEEEEEEEEEE ", - " EEEEEEEEEGGGG GGGGEEEEEEEEE ", - " EEEEEEEGGGGGG GGGGGGEEEEEEE ", - " EEEEEEEEEGGGG GGGGEEEEEEEEE ", - " EEEEEEEEEEEEE EEEEEEEEEEEEE ", - " BBBBBEEEEEEEE EEEEEEEEBBBBB ", - " BBBBEEEE EEEEBBBB ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BB BB ", - " BBBBBEE EEBBBBB ", - " BBBEEEEEEE EEEEEEEBBB ", - " EEEEEEEEEE EEEEEEEEEE ", - " EEEEEEGGGG GGGGEEEEEE ", - " EEEEEEEEEE EEEEEEEEEE ", - " BBBEEEEEEE EEEEEEEBBB ", - " BBBBBEE EEBBBBB ", - " BB BB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " BBBBBEEE EEEBBBBB ", - " EEEEEEEE EEEEEEEE ", - " EEEEEGGG GGGEEEEE ", - " EEEEEEEE EEEEEEEE ", - " BBBBBEEE EEEBBBBB ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBB BBBBBBB ", - " EEEEEEE EEEEEEE ", - " EEEEEGG GGEEEEE ", - " EEEEEEE EEEEEEE ", - " BBBBBBB BBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBB BBBBBBB ", - " EEEEEEE EEEEEEE ", - " EEEEGGG GGGEEEE ", - " EEEEEEE EEEEEEE ", - " BBBBBBB BBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEGG GGEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEGG GGEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEG GEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEGG GGEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEGG GGEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEG GEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEG GEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEGG GGEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - "BBB BBB", - "EEE EEE", - "EEG GEE", - "EEE EEE", - "BBB BBB", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBB BBB ", - " EEE EEE ", - " EEG GEE ", - " EEE EEE ", - " BBB BBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBB BBBB ", - " EEEE EEEE ", - " EEEG GEEE ", - " EEEE EEEE ", - " BBBB BBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEGG GGEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEG GEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEG GEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEGG GGEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEGG GGEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBB BBBBB ", - " EEEEE EEEEE ", - " EEEEG GEEEE ", - " EEEEE EEEEE ", - " BBBBB BBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEGG GGEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBB BBBBBB ", - " EEEEEE EEEEEE ", - " EEEEGG GGEEEE ", - " EEEEEE EEEEEE ", - " BBBBBB BBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBB BBBBBBB ", - " EEEEEEE EEEEEEE ", - " EEEEGGG GGGEEEE ", - " EEEEEEE EEEEEEE ", - " BBBBBBB BBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBB BBBBBBB ", - " EEEEEEE EEEEEEE ", - " EEEEEGG GGEEEEE ", - " EEEEEEE EEEEEEE ", - " BBBBBBB BBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBB BBBBBBBB ", - " EEEEEEEE EEEEEEEE ", - " EEEEEGGG GGGEEEEE ", - " EEEEEEEE EEEEEEEE ", - " BBBBBBBB BBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBB BBBBBBBBBB ", - " EEEEEEEEEE EEEEEEEEEE ", - " EEEEEEGGGG GGGGEEEEEE ", - " EEEEEEEEEE EEEEEEEEEE ", - " BBBBBBBBBB BBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBBBB BBBBBBBBBBBBB ", - " EEEEEEEEEEEEE EEEEEEEEEEEEE ", - " EEEEEEEGGGGGG GGGGGGEEEEEEE ", - " EEEEEEEEEEEEE EEEEEEEEEEEEE ", - " BBBBBBBBBBBBB BBBBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", - " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", - " EEEEEEEEEEGGGGGGGGGGGGGGGEEEEEEEEEE ", - " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", - " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBBBBBBBBBBBBBBBBBB ", - " EEEEEEEEEEEEEEEEEEEEEEEEEEE ", - " EEEEEEEEEEEEEEEEEEEEEEEEEEE ", - " EEEEEEEEEEEEEEEEEEEEEEEEEEE ", - " BBBBBBBBBBBBBBBBBBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " }, - { " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " BBBBBBBBBBBBBBB ", - " EEEEEEEEEEEEEEE ", - " EEEEEEEEEEEEEEE ", - " EEEEEEEEEEEEEEE ", - " BBBBBBBBBBBBBBB ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " } }; - public static final String[][] MAIN_STRUCTURE = appendStringArrays(BEAM_SHAFT, FIRST_RING); - public static final String[][] FIRST_RING_AIR = replaceLetters(FIRST_RING, "L"); -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java deleted file mode 100644 index b091d33e32..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_EyeOfHarmony.java +++ /dev/null @@ -1,1845 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.TecTech.eyeOfHarmonyRecipeStorage; -import static com.github.technus.tectech.thing.CustomItemList.astralArrayFabricator; -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.eyeOfHarmonyRenderBlock; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsBA0; -import static com.github.technus.tectech.util.CommonValues.EOH_TIER_FANCY_NAMES; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorColen; -import static gregtech.api.util.GT_ParallelHelper.calculateChancedOutputMultiplier; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static gregtech.common.misc.WirelessNetworkManager.strongCheckOrAddUser; -import static java.lang.Math.exp; -import static java.lang.Math.max; -import static java.lang.Math.pow; -import static net.minecraft.util.EnumChatFormatting.AQUA; -import static net.minecraft.util.EnumChatFormatting.BLUE; -import static net.minecraft.util.EnumChatFormatting.GOLD; -import static net.minecraft.util.EnumChatFormatting.GRAY; -import static net.minecraft.util.EnumChatFormatting.GREEN; -import static net.minecraft.util.EnumChatFormatting.RED; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.EnumChatFormatting.YELLOW; -import static util.Util.toStandardForm; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import javax.annotation.Nonnull; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MathHelper; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.recipe.EyeOfHarmonyRecipe; -import com.github.technus.tectech.recipe.TecTechRecipeMaps; -import com.github.technus.tectech.thing.block.TileEyeOfHarmony; -import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.FluidStackLong; -import com.github.technus.tectech.util.ItemStackLong; -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -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.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Output_ME; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import pers.gwyog.gtneioreplugin.plugin.block.BlockDimensionDisplay; -import pers.gwyog.gtneioreplugin.plugin.block.ModBlocks; - -@SuppressWarnings("SpellCheckingInspection") -public class GT_MetaTileEntity_EM_EyeOfHarmony extends GT_MetaTileEntity_MultiblockBase_EM - implements IConstructable, ISurvivalConstructable { - - public static final boolean EOH_DEBUG_MODE = false; - private static final long MOLTEN_SPACETIME_PER_FAILURE_TIER = 14_400L; - private static final double SPACETIME_FAILURE_BASE = 2; - private static final String TOOLTIP_BAR = GOLD - + "---------------------------------------------------------------------------------------"; - - // Region variables. - private static Textures.BlockIcons.CustomIcon ScreenOFF; - private static Textures.BlockIcons.CustomIcon ScreenON; - - private int spacetimeCompressionFieldMetadata = -1; - private int timeAccelerationFieldMetadata = -1; - private int stabilisationFieldMetadata = -1; - - private static final double SPACETIME_CASING_DIFFERENCE_DISCOUNT_PERCENTAGE = 0.03; - private static final double TIME_ACCEL_DECREASE_CHANCE_PER_TIER = 0.0925; - // % Increase in recipe chance and % decrease in yield per tier. - private static final double STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER = 0.05; - private static final double PARALLEL_FOR_FIRST_ASTRAL_ARRAY = 8; - private static final double CONSTANT_FOR_LOG = 1.7; - private static final double LOG_CONSTANT = Math.log(CONSTANT_FOR_LOG); - private static final double PARALLEL_MULTIPLIER_CONSTANT = 1.63; - private static final double POWER_DIVISION_CONSTANT = 20.7; - private static final double POWER_INCREASE_CONSTANT = 2.3; - private static final int TOTAL_CASING_TIERS_WITH_POWER_PENALTY = 8; - private static final long PRECISION_MULTIPLIER = 1_000_000; - // Exact value to get 2^21 parallels. - private static final long ASTRAL_ARRAY_LIMIT = 8637; - - private UUID userUUID; - private BigInteger outputEU_BigInt = BigInteger.ZERO; - private long startEU = 0; - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (mMachine) return -1; - int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); // 200 blocks max per - // placement. - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 16, 16, 0, realBudget, source, actor, false, true); - } - - protected static final String STRUCTURE_PIECE_MAIN = "main"; - - // Multiblock structure. - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { - { " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " C C ", " C C ", - " C C ", " CCCCCCCCC ", - " C C ", " CCCCCCCCC ", - " C C ", " C C ", - " C C ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " " }, - { " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " C C ", - " C C ", " C C ", - " C C ", " DDDDD ", - " DDCDCDD ", " CCCCDCCDCCDCCCC ", - " DDDDDDD ", " CCCCDCCDCCDCCCC ", - " DDCDCDD ", " DDDDD ", - " C C ", " C C ", - " C C ", " C C ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " " }, - { " ", " ", - " ", " ", - " ", " ", - " ", " C C ", - " C C ", " C C ", - " D ", " D ", - " DDDDDDD ", " DD DD ", - " D EEE D ", " CCC D EAAAE D CCC ", - " DDD EAAAE DDD ", " CCC D EAAAE D CCC ", - " D EEE D ", " DD DD ", - " DDDDDDD ", " D ", - " D ", " C C ", - " C C ", " C C ", - " ", " ", - " ", " ", - " ", " ", - " " }, - { " ", " ", - " ", " ", - " ", " ", - " C C ", " C C ", - " D ", " D ", - " ", " ", - " ", " ", - " ", " CC CC ", - " DD DD ", " CC CC ", - " ", " ", - " ", " ", - " ", " D ", - " D ", " C C ", - " C C ", " ", - " ", " ", - " ", " ", - " " }, - { " ", " ", - " ", " ", - " ", " C C ", - " CCCCC ", " D ", - " A ", " A ", - " ", " ", - " ", " ", - " C C ", " CC CC ", - " CDAA AADC ", " CC CC ", - " C C ", " ", - " ", " ", - " ", " A ", - " A ", " D ", - " CCCCC ", " C C ", - " ", " ", - " ", " ", - " " }, - { " ", " ", - " ", " ", - " C C ", " C C ", - " D ", " SEEAEES ", - " ", " ", - " ", " ", - " ", " S S ", - " E E ", " CC E E CC ", - " DA AD ", " CC E E CC ", - " E E ", " S S ", - " ", " ", - " ", " ", - " ", " SEEAEES ", - " D ", " C C ", - " C C ", " ", - " ", " ", - " " }, - { " ", " ", - " ", " C C ", - " CCCCC ", " D ", - " A ", " ", - " ", " ", - " ", " ", - " ", " ", - " C C ", " CC CC ", - " CDA ADC ", " CC CC ", - " C C ", " ", - " ", " ", - " ", " ", - " ", " ", - " A ", " D ", - " CCCCC ", " C C ", - " ", " ", - " " }, - { " ", " ", - " C C ", " C C ", - " D ", " SEEAEES ", - " ", " ", - " ", " ", - " ", " ", - " ", " S S ", - " E E ", " CC E E CC ", - " DA AD ", " CC E E CC ", - " E E ", " S S ", - " ", " ", - " ", " ", - " ", " ", - " ", " SEEAEES ", - " D ", " C C ", - " C C ", " ", - " " }, - { " ", " ", - " C C ", " D ", - " A ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " C C ", - " DA AD ", " C C ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " A ", " D ", - " C C ", " ", - " " }, - { " ", " C C ", - " C C ", " D ", - " A ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " CC CC ", - " DA AD ", " CC CC ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " A ", " D ", - " C C ", " C C ", - " " }, - { " ", " C C ", - " D ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " C C ", - " D D ", " C C ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " D ", " C C ", - " " }, - { " ", " C C ", - " D ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " C C ", - " D D ", " C C ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " D ", " C C ", - " " }, - { " CCCCCCC ", " C C ", - " DDDDDDD ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " D D ", - " D D ", "CCD DCC", - " D D ", "CCD DCC", - " D D ", " D D ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " DDDDDDD ", " C C ", - " C C " }, - { " CCHHHHHCC ", " DDDDD ", - " DD DD ", " ", - " ", " S S ", - " ", " S S ", - " ", " ", - " ", " ", - " D D ", " D D ", - " D D ", "CD DC", - " D D ", "CD DC", - " D D ", " D D ", - " D D ", " ", - " ", " ", - " ", " S S ", - " ", " S S ", - " ", " ", - " DD DD ", " DDDDD ", - " C C " }, - { " CHHHHHHHC ", " DDCDCDD ", - " D EEE D ", " ", - " C C ", " E E ", - " C C ", " E E ", - " ", " ", - " ", " ", - " D D ", " D D ", - " D D ", "CCE ECC", - " DE ED ", "CCE ECC", - " D D ", " D D ", - " D D ", " ", - " ", " ", - " ", " E E ", - " C C ", " E E ", - " C C ", " ", - " D EEE D ", " DDCDCDD ", - " C C " }, - { " CHHCCCHHC ", " CCCCDCCDCCDCCCC ", - " CCC D EAAAE D CCC ", " CC CC ", - " CC CC ", " CC E E CC ", - " CC CC ", " CC E E CC ", - " C C ", " CC CC ", - " C C ", " C C ", - "CCD DCC", "CD DC", - "CCE ECC", "CCA ACC", - "CDA ADC", "CCA ACC", - "CCE ECC", "CD DC", - "CCD DCC", " C C ", - " C C ", " CC CC ", - " C C ", " CC E E CC ", - " CC CC ", " CC E E CC ", - " CC CC ", " CC CC ", - " CCC D EAAAE D CCC ", " CCCCDCCDCCDCCCC ", - " CCCCCCCCC " }, - { " CHHC~CHHC ", " DDDDDDD ", - " DDD EAAAE DDD ", " DD DD ", - " CDAA AADC ", " DA AD ", - " CDA ADC ", " DA AD ", - " DA AD ", " DA AD ", - " D D ", " D D ", - " D D ", " D D ", - " DE ED ", "CDA ADC", - " DA AD ", "CDA ADC", - " DE ED ", " D D ", - " D D ", " D D ", - " D D ", " DA AD ", - " DA AD ", " DA AD ", - " CDA ADC ", " DA AD ", - " CDAA AADC ", " DD DD ", - " DDD EAAAE DDD ", " DDDDDDD ", - " C C " }, - { " CHHCCCHHC ", " CCCCDCCDCCDCCCC ", - " CCC D EAAAE D CCC ", " CC CC ", - " CC CC ", " CC E E CC ", - " CC CC ", " CC E E CC ", - " C C ", " CC CC ", - " C C ", " C C ", - "CCD DCC", "CD DC", - "CCE ECC", "CCA ACC", - "CDA ADC", "CCA ACC", - "CCE ECC", "CD DC", - "CCD DCC", " C C ", - " C C ", " CC CC ", - " C C ", " CC E E CC ", - " CC CC ", " CC E E CC ", - " CC CC ", " CC CC ", - " CCC D EAAAE D CCC ", " CCCCDCCDCCDCCCC ", - " CCCCCCCCC " }, - { " CHHHHHHHC ", " DDCDCDD ", - " D EEE D ", " ", - " C C ", " E E ", - " C C ", " E E ", - " ", " ", - " ", " ", - " D D ", " D D ", - " D D ", "CCE ECC", - " DE ED ", "CCE ECC", - " D D ", " D D ", - " D D ", " ", - " ", " ", - " ", " E E ", - " C C ", " E E ", - " C C ", " ", - " D EEE D ", " DDCDCDD ", - " C C " }, - { " CCHHHHHCC ", " DDDDD ", - " DD DD ", " ", - " ", " S S ", - " ", " S S ", - " ", " ", - " ", " ", - " D D ", " D D ", - " D D ", "CD DC", - " D D ", "CD DC", - " D D ", " D D ", - " D D ", " ", - " ", " ", - " ", " S S ", - " ", " S S ", - " ", " ", - " DD DD ", " DDDDD ", - " C C " }, - { " CCCCCCC ", " C C ", - " DDDDDDD ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " D D ", - " D D ", "CCD DCC", - " D D ", "CCD DCC", - " D D ", " D D ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " DDDDDDD ", " C C ", - " C C " }, - { " ", " C C ", - " D ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " C C ", - " D D ", " C C ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " D ", " C C ", - " " }, - { " ", " C C ", - " D ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " C C ", - " D D ", " C C ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " D ", " C C ", - " " }, - { " ", " C C ", - " C C ", " D ", - " A ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " CC CC ", - " DA AD ", " CC CC ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " A ", " D ", - " C C ", " C C ", - " " }, - { " ", " ", - " C C ", " D ", - " A ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " C C ", - " DA AD ", " C C ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " A ", " D ", - " C C ", " ", - " " }, - { " ", " ", - " C C ", " C C ", - " D ", " SEEAEES ", - " ", " ", - " ", " ", - " ", " ", - " ", " S S ", - " E E ", " CC E E CC ", - " DA AD ", " CC E E CC ", - " E E ", " S S ", - " ", " ", - " ", " ", - " ", " ", - " ", " SEEAEES ", - " D ", " C C ", - " C C ", " ", - " " }, - { " ", " ", - " ", " C C ", - " CCCCC ", " D ", - " A ", " ", - " ", " ", - " ", " ", - " ", " ", - " C C ", " CC CC ", - " CDA ADC ", " CC CC ", - " C C ", " ", - " ", " ", - " ", " ", - " ", " ", - " A ", " D ", - " CCCCC ", " C C ", - " ", " ", - " " }, - { " ", " ", - " ", " ", - " C C ", " C C ", - " D ", " SEEAEES ", - " ", " ", - " ", " ", - " ", " S S ", - " E E ", " CC E E CC ", - " DA AD ", " CC E E CC ", - " E E ", " S S ", - " ", " ", - " ", " ", - " ", " SEEAEES ", - " D ", " C C ", - " C C ", " ", - " ", " ", - " " }, - { " ", " ", - " ", " ", - " ", " C C ", - " CCCCC ", " D ", - " A ", " A ", - " ", " ", - " ", " ", - " C C ", " CC CC ", - " CDAA AADC ", " CC CC ", - " C C ", " ", - " ", " ", - " ", " A ", - " A ", " D ", - " CCCCC ", " C C ", - " ", " ", - " ", " ", - " " }, - { " ", " ", - " ", " ", - " ", " ", - " C C ", " C C ", - " D ", " D ", - " ", " ", - " ", " ", - " ", " CC CC ", - " DD DD ", " CC CC ", - " ", " ", - " ", " ", - " ", " D ", - " D ", " C C ", - " C C ", " ", - " ", " ", - " ", " ", - " " }, - { " ", " ", - " ", " ", - " ", " ", - " ", " C C ", - " C C ", " C C ", - " D ", " D ", - " DDDDDDD ", " DD DD ", - " D EEE D ", " CCC D EAAAE D CCC ", - " DDD EAAAE DDD ", " CCC D EAAAE D CCC ", - " D EEE D ", " DD DD ", - " DDDDDDD ", " D ", - " D ", " C C ", - " C C ", " C C ", - " ", " ", - " ", " ", - " ", " ", - " " }, - { " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " C C ", - " C C ", " C C ", - " C C ", " DDDDD ", - " DDCDCDD ", " CCCCDCCDCCDCCCC ", - " DDDDDDD ", " CCCCDCCDCCDCCCC ", - " DDCDCDD ", " DDDDD ", - " C C ", " C C ", - " C C ", " C C ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " " }, - { " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " C C ", " C C ", - " C C ", " CCCCCCCCC ", - " C C ", " CCCCCCCCC ", - " C C ", " C C ", - " C C ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " " } })) - .addElement( - 'A', - withChannel( - "spacetime compression", - ofBlocksTiered( - (block, meta) -> block == TT_Container_Casings.SpacetimeCompressionFieldGenerators ? meta : null, - ImmutableList.of( - Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 0), - Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 1), - Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 2), - Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 3), - Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 4), - Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 5), - Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 6), - Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 7), - Pair.of(TT_Container_Casings.SpacetimeCompressionFieldGenerators, 8)), - -1, - (t, meta) -> t.spacetimeCompressionFieldMetadata = meta, - t -> t.spacetimeCompressionFieldMetadata))) - .addElement( - 'S', - withChannel( - "stabilisation", - ofBlocksTiered( - (block, meta) -> block == TT_Container_Casings.StabilisationFieldGenerators ? meta : null, - ImmutableList.of( - Pair.of(TT_Container_Casings.StabilisationFieldGenerators, 0), - Pair.of(TT_Container_Casings.StabilisationFieldGenerators, 1), - Pair.of(TT_Container_Casings.StabilisationFieldGenerators, 2), - Pair.of(TT_Container_Casings.StabilisationFieldGenerators, 3), - Pair.of(TT_Container_Casings.StabilisationFieldGenerators, 4), - Pair.of(TT_Container_Casings.StabilisationFieldGenerators, 5), - Pair.of(TT_Container_Casings.StabilisationFieldGenerators, 6), - Pair.of(TT_Container_Casings.StabilisationFieldGenerators, 7), - Pair.of(TT_Container_Casings.StabilisationFieldGenerators, 8)), - -1, - (t, meta) -> t.stabilisationFieldMetadata = meta, - t -> t.stabilisationFieldMetadata))) - .addElement('C', ofBlock(sBlockCasingsBA0, 11)) - .addElement('D', ofBlock(sBlockCasingsBA0, 10)) - .addElement( - 'H', - buildHatchAdder(GT_MetaTileEntity_EM_EyeOfHarmony.class) - .atLeast(InputHatch, OutputHatch, InputBus, OutputBus) - .casingIndex(texturePage << 7) - .dot(1) - .buildAndChain(sBlockCasingsBA0, 12)) - .addElement( - 'E', - withChannel( - "time dilation", - ofBlocksTiered( - (block, meta) -> block == TT_Container_Casings.TimeAccelerationFieldGenerator ? meta : null, - ImmutableList.of( - Pair.of(TT_Container_Casings.TimeAccelerationFieldGenerator, 0), - Pair.of(TT_Container_Casings.TimeAccelerationFieldGenerator, 1), - Pair.of(TT_Container_Casings.TimeAccelerationFieldGenerator, 2), - Pair.of(TT_Container_Casings.TimeAccelerationFieldGenerator, 3), - Pair.of(TT_Container_Casings.TimeAccelerationFieldGenerator, 4), - Pair.of(TT_Container_Casings.TimeAccelerationFieldGenerator, 5), - Pair.of(TT_Container_Casings.TimeAccelerationFieldGenerator, 6), - Pair.of(TT_Container_Casings.TimeAccelerationFieldGenerator, 7), - Pair.of(TT_Container_Casings.TimeAccelerationFieldGenerator, 8)), - -1, - (t, meta) -> t.timeAccelerationFieldMetadata = meta, - t -> t.timeAccelerationFieldMetadata))) - .build(); - - private double hydrogenOverflowProbabilityAdjustment; - private double heliumOverflowProbabilityAdjustment; - private double stellarPlasmaOverflowProbabilityAdjustment; - private static final long TICKS_BETWEEN_HATCH_DRAIN = EOH_DEBUG_MODE ? 10 : 20; - - private List outputItems = new ArrayList<>(); - private List outputFluids = new ArrayList<>(); - - private void calculateInputFluidExcessValues(final long hydrogenRecipeRequirement, - final long heliumRecipeRequirement) { - - double hydrogenStored = getHydrogenStored(); - double heliumStored = getHeliumStored(); - double stellarPlasmaStored = getStellarPlasmaStored(); - - double hydrogenExcessPercentage = hydrogenStored / hydrogenRecipeRequirement - 1; - double heliumExcessPercentage = heliumStored / heliumRecipeRequirement - 1; - double stellarPlasmaExcessPercentage = stellarPlasmaStored - / (heliumRecipeRequirement * (12.4 / 1_000_000f) * parallelAmount) - 1; - - hydrogenOverflowProbabilityAdjustment = 1 - exp(-pow(30 * hydrogenExcessPercentage, 2)); - heliumOverflowProbabilityAdjustment = 1 - exp(-pow(30 * heliumExcessPercentage, 2)); - stellarPlasmaOverflowProbabilityAdjustment = 1 - exp(-pow(30 * stellarPlasmaExcessPercentage, 2)); - } - - private double recipeChanceCalculator() { - double chance = currentRecipe.getBaseRecipeSuccessChance() - - timeAccelerationFieldMetadata * TIME_ACCEL_DECREASE_CHANCE_PER_TIER - + stabilisationFieldMetadata * STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER; - - if (parallelAmount > 1) { - chance -= stellarPlasmaOverflowProbabilityAdjustment; - } else { - chance -= (hydrogenOverflowProbabilityAdjustment + heliumOverflowProbabilityAdjustment); - } - - return MathHelper.clamp_double(chance, 0.0, 1.0); - } - - private double recipeYieldCalculator() { - double yield = 1.0 - stabilisationFieldMetadata * STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER; - - if (parallelAmount > 1) { - yield -= stellarPlasmaOverflowProbabilityAdjustment; - } else { - yield -= (hydrogenOverflowProbabilityAdjustment + heliumOverflowProbabilityAdjustment); - } - return MathHelper.clamp_double(yield, 0.0, 1.0); - } - - private int recipeProcessTimeCalculator(final long recipeTime, final long recipeSpacetimeCasingRequired) { - - // Tier 1 recipe. - // Tier 2 spacetime blocks. - // = 3% discount. - - // Tier 1 recipe. - // Tier 3 spacetime blocks. - // = 3%*3% = 5.91% discount. - - final long spacetimeCasingDifference = (recipeSpacetimeCasingRequired - spacetimeCompressionFieldMetadata); - final double recipeTimeDiscounted = recipeTime * pow(2.0, -timeAccelerationFieldMetadata) - * pow(1 - SPACETIME_CASING_DIFFERENCE_DISCOUNT_PERCENTAGE, -spacetimeCasingDifference) - / max(1, pow(2, currentCircuitMultiplier)); - return (int) Math.max(recipeTimeDiscounted, 1.0); - } - - @Override - public IStructureDefinition getStructure_EM() { - return STRUCTURE_DEFINITION; - } - - public GT_MetaTileEntity_EM_EyeOfHarmony(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_EM_EyeOfHarmony(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_EyeOfHarmony(mName); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - - spacetimeCompressionFieldMetadata = -1; - timeAccelerationFieldMetadata = -1; - stabilisationFieldMetadata = -1; - - // Check structure of multi. - if (!structureCheck_EM(STRUCTURE_PIECE_MAIN, 16, 16, 0)) { - return false; - } - - // Make sure there are no Crafting Input Buffers/Buses/Slaves. - if (!mDualInputHatches.isEmpty()) { - return false; - } - - // Check if there is 1 output bus, and it is a ME output bus. - { - if (mOutputBusses.size() != 1) { - return false; - } - - if (!(mOutputBusses.get(0) instanceof GT_MetaTileEntity_Hatch_OutputBus_ME)) { - return false; - } - } - - // Check if there is 1 output hatch, and they are ME output hatches. - { - if (mOutputHatches.size() != 1) { - return false; - } - - if (!(mOutputHatches.get(0) instanceof GT_MetaTileEntity_Hatch_Output_ME)) { - return false; - } - } - - // Check there is 1 input bus, and it is not a stocking input bus. - { - if (mInputBusses.size() != 1) { - return false; - } - - if (mInputBusses.get(0) instanceof GT_MetaTileEntity_Hatch_InputBus_ME) { - return false; - } - } - - // Make sure there are no energy hatches. - { - if (mEnergyHatches.size() > 0) { - return false; - } - - if (mExoticEnergyHatches.size() > 0) { - return false; - } - } - - // Make sure there are 2 input hatches. - if (mInputHatches.size() != 2) { - return false; - } - - return true; - } - - private boolean animationsEnabled = true; - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - animationsEnabled = !animationsEnabled; - aPlayer.addChatMessage( - new ChatComponentText("Animations are now " + (animationsEnabled ? "enabled" : "disabled") + ".")); - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ, ItemStack aTool) { - if (astralArrayAmount != 0) { - while (astralArrayAmount >= 64) { - if (aPlayer.inventory.getFirstEmptyStack() != -1) { - aPlayer.inventory.addItemStackToInventory(astralArrayFabricator.get(64)); - astralArrayAmount -= 64; - } else { - break; - } - } - if (aPlayer.inventory.getFirstEmptyStack() != -1) { - aPlayer.inventory.addItemStackToInventory(astralArrayFabricator.get(astralArrayAmount)); - astralArrayAmount = 0; - } - } - return true; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (getControllerSlot() == null) { - ItemStack heldItem = aPlayer.getHeldItem(); - if (GT_Utility.getBlockFromStack(heldItem) instanceof BlockDimensionDisplay) { - mInventory[getControllerSlotIndex()] = heldItem.copy(); - mInventory[getControllerSlotIndex()].stackSize = 1; - aPlayer.setCurrentItemOrArmor(0, ItemUtils.depleteStack(heldItem)); - return true; - } - } - return super.onRightclick(aBaseMetaTileEntity, aPlayer); - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Spacetime Manipulator, EOH") - .addInfo(TOOLTIP_BAR) - .addInfo("Creates a pocket of spacetime that is bigger on the inside using transdimensional") - .addInfo("engineering. Certified Time Lord regulation compliant. This multi uses too much EU") - .addInfo("to be handled with conventional means. All EU requirements are handled directly by") - .addInfo("your wireless EU network.") - .addInfo(TOOLTIP_BAR) - .addInfo("This multiblock will constantly consume hydrogen and helium when it is not running a") - .addInfo("recipe once per second. It will store this internally, you can see the totals by") - .addInfo("using a scanner. This multi also has three tiered blocks with " + RED + 9 + GRAY + " tiers") - .addInfo("each. They are as follows and have the associated effects on the multi.") - .addInfo(BLUE + "Spacetime Compression Field Generator:") - .addInfo("- The tier of this block determines what recipes can be run. If the multiblocks") - .addInfo(" spacetime compression field block exceeds the requirements of the recipe it") - .addInfo( - " will decrease the processing time by " + RED - + formatNumbers(SPACETIME_CASING_DIFFERENCE_DISCOUNT_PERCENTAGE * 100) - + "%" - + GRAY - + " per tier over the requirement (multiplicative).") - .addInfo(BLUE + "Time Dilation Field Generator:") - .addInfo( - "- Decreases the time required for a recipe by " + RED - + "50%" - + GRAY - + " per tier of block (multiplicative).") - .addInfo( - " Decreases the probability of a recipe succeeding by " + RED - + formatNumbers(TIME_ACCEL_DECREASE_CHANCE_PER_TIER * 100) - + "%" - + GRAY - + " per tier (additive)") - .addInfo(BLUE + "Stabilisation Field Generator:") - .addInfo( - "- Increases the probability of a recipe succeeding by " + RED - + formatNumbers(STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER * 100) - + "%" - + GRAY - + " per tier (additive).") - .addInfo( - " Decreases the yield of a recipe by " + RED - + formatNumbers(STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER * 100) - + "%" - + GRAY - + " per tier (additive). ") - .addInfo(" > Low tier stabilisation field generators have a power output penalty.") - .addInfo( - " The power output penalty for using Crude Stabilisation Field Generators is " + RED - + formatNumbers( - STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER * TOTAL_CASING_TIERS_WITH_POWER_PENALTY - * 100) - + "%" - + GRAY - + ".") - .addInfo( - " This penalty decreases by " + RED - + formatNumbers(STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER * 100) - + "%" - + GRAY - + " per tier (additive).") - .addInfo(TOOLTIP_BAR) - .addInfo("Going over a recipe requirement on hydrogen or helium has a penalty on yield and recipe chance.") - .addInfo("All stored hydrogen and helium is consumed during a craft. The associated formulas are:") - .addInfo(GREEN + "Overflow ratio = (Stored fluid / Recipe requirement) - 1") - .addInfo(GREEN + "Adjustment value = 1 - exp(-(30 * Overflow ratio)^2)") - .addInfo("The Adjustment value is then subtracted from the total yield and recipe chance.") - .addInfo(TOOLTIP_BAR) - .addInfo("It should be noted that base recipe chance is determined per recipe and yield always starts") - .addInfo("at 1 and subtracts depending on penalties. All fluid/item outputs are multiplied by the") - .addInfo("yield. Failure fluid is exempt.") - .addInfo(TOOLTIP_BAR) - .addInfo("This multiblock can only output to ME output buses/hatches.") - .addInfo(TOOLTIP_BAR) - .addInfo("This multiblock can be overclocked by placing a programmed circuit into the input bus.") - .addInfo( - "E.g. A circuit of 2 will provide 2 OCs, 16x EU input and 0.25x the time. EU output is unaffected.") - .addInfo("All outputs are equal. All item and fluid output chances & amounts per recipe are unaffected.") - .addInfo(TOOLTIP_BAR) - .addInfo( - "If a recipe fails the EOH will output " + GREEN - + "Success chance * " - + formatNumbers(MOLTEN_SPACETIME_PER_FAILURE_TIER) - + " * (" - + SPACETIME_FAILURE_BASE - + ")^(Recipe tier)" - + GRAY - + "L of molten") - .addInfo( - MaterialsUEVplus.SpaceTime.getLocalizedNameForItem("%material") - + " instead of fluid/item outputs and output as much EU as a successful recipe.") - .addInfo(TOOLTIP_BAR) - .addInfo( - "This multiblock can perform parallel processing by placing Astral Array Fabricators into the input bus.") - .addInfo( - "They are stored internally and can be retrieved via right-clicking the controller with a wire cutter.") - .addInfo( - "The maximum amount of stored Astral Arrays is " + formatNumbers(ASTRAL_ARRAY_LIMIT) - + ". The amount of parallel is calculated via these formulas:") - .addInfo( - GREEN + "Parallel exponent = floor(log(" - + formatNumbers(PARALLEL_FOR_FIRST_ASTRAL_ARRAY) - + " * Astral Array amount) / log(" - + formatNumbers(CONSTANT_FOR_LOG) - + "))") - .addInfo(GREEN + "Parallel = 2^(Parallel exponent)") - .addInfo("If the EOH is running parallel recipes, the power calculation changes.") - .addInfo("The power needed for parallel processing is calculated as follows:") - .addInfo( - GREEN + "total EU = ((EU output - EU input * " - + formatNumbers(PARALLEL_MULTIPLIER_CONSTANT) - + ") / " - + formatNumbers(POWER_DIVISION_CONSTANT) - + ") * " - + formatNumbers(POWER_INCREASE_CONSTANT) - + "^(Parallel exponent)") - .addInfo( - "Furthermore, if parallel recipes are run, the recipes consume " - + MaterialsUEVplus.RawStarMatter.getLocalizedNameForItem("%material")) - .addInfo("instead of helium and hydrogen. Overflow penalties still apply.") - .addInfo( - "The required amount of fluid to start a recipe is " + GREEN - + "12.4 / 10^6 * Helium amount * Parallel" - + GRAY - + ".") - .addInfo("The success or failure of each parallel is determined independently.") - .addInfo(TOOLTIP_BAR) - .addInfo("Animations can be disabled by using a screwdriver on the multiblock.") - .addInfo("Planet block can be inserted directly by right-clicking the controller with planet block.") - .addSeparator() - .addStructureInfo("Eye of Harmony structure is too complex! See schematic for details.") - .addStructureInfo( - EnumChatFormatting.GOLD + "896" + EnumChatFormatting.GRAY + " Reinforced Spatial Structure Casing.") - .addStructureInfo( - EnumChatFormatting.GOLD + "534" + EnumChatFormatting.GRAY + " Reinforced Temporal Structure Casing.") - .addStructureInfo( - EnumChatFormatting.GOLD + "31" - + EnumChatFormatting.GRAY - + " Infinite SpaceTime Energy Boundary Casing.") - .addStructureInfo( - EnumChatFormatting.GOLD + "168" + EnumChatFormatting.GRAY + " Time Dilation Field Generator.") - .addStructureInfo( - EnumChatFormatting.GOLD + "48" + EnumChatFormatting.GRAY + " Stabilisation Field Generator.") - .addStructureInfo( - EnumChatFormatting.GOLD + "138" + EnumChatFormatting.GRAY + " Spacetime Compression Field Generator.") - .addStructureInfo("--------------------------------------------") - .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 2 + EnumChatFormatting.GRAY + " input hatches.") - .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " ME output hatch.") - .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " input bus.") - .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " ME output bus.") - .addStructureInfo("--------------------------------------------") - .beginStructureBlock(33, 33, 33, false) - .toolTipFinisher(AuthorColen.substring(8) + EnumChatFormatting.GRAY + "&" + CommonValues.TEC_MARK_EM); - return tt; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/EM_BHG"); - ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/EM_BHG_ACTIVE"); - super.registerIcons(aBlockIconRegister); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][12], - new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][12] }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM(STRUCTURE_PIECE_MAIN, 16, 16, 0, stackSize, hintsOnly); - } - - private final Map validFluidMap = new HashMap<>() { - - private static final long serialVersionUID = -8452610443191188130L; - - { - put(Materials.Hydrogen.mGas, 0L); - put(Materials.Helium.mGas, 0L); - put(MaterialsUEVplus.RawStarMatter.mFluid, 0L); - } - }; - - private void drainFluidFromHatchesAndStoreInternally() { - List fluidStacks = getStoredFluids(); - for (FluidStack fluidStack : fluidStacks) { - if (validFluidMap.containsKey(fluidStack.getFluid())) { - validFluidMap.merge(fluidStack.getFluid(), (long) fluidStack.amount, Long::sum); - fluidStack.amount = 0; - } - } - updateSlots(); - } - - @Override - public RecipeMap getRecipeMap() { - // Only for visual - return TecTechRecipeMaps.eyeOfHarmonyRecipes; - } - - private EyeOfHarmonyRecipe currentRecipe; - - // Counter for lag prevention. - private long lagPreventer = 0; - - // Check for recipe every recipeCheckInterval ticks. - private static final long RECIPE_CHECK_INTERVAL = 3 * 20; - private long currentCircuitMultiplier = 0; - private long astralArrayAmount = 0; - private long parallelAmount = 1; - private long successfulParallelAmount = 0; - private double yield = 0; - private BigInteger usedEU = BigInteger.ZERO; - private FluidStackLong stellarPlasma; - private FluidStackLong starMatter; - - @Override - @NotNull - protected CheckRecipeResult checkProcessing_EM() { - ItemStack controllerStack = getControllerSlot(); - if (controllerStack == null) { - return SimpleCheckRecipeResult.ofFailure("no_planet_block"); - } - - lagPreventer++; - if (lagPreventer < RECIPE_CHECK_INTERVAL) { - lagPreventer = 0; - // No item in multi gui slot. - - currentRecipe = eyeOfHarmonyRecipeStorage.recipeLookUp(controllerStack); - if (currentRecipe == null) { - return CheckRecipeResultRegistry.NO_RECIPE; - } - CheckRecipeResult result = processRecipe(currentRecipe); - if (!result.wasSuccessful()) currentRecipe = null; - return result; - } - return CheckRecipeResultRegistry.NO_RECIPE; - } - - private long getHydrogenStored() { - return validFluidMap.get(Materials.Hydrogen.mGas); - } - - private long getHeliumStored() { - return validFluidMap.get(Materials.Helium.mGas); - } - - private long getStellarPlasmaStored() { - return validFluidMap.get(MaterialsUEVplus.RawStarMatter.mFluid); - } - - public CheckRecipeResult processRecipe(EyeOfHarmonyRecipe recipeObject) { - - // Get circuit damage, clamp it and then use it later for overclocking. - currentCircuitMultiplier = 0; - for (ItemStack itemStack : mInputBusses.get(0) - .getRealInventory()) { - if (GT_Utility.isAnyIntegratedCircuit(itemStack)) { - currentCircuitMultiplier = MathHelper.clamp_int(itemStack.getItemDamage(), 0, 24); - break; - } - } - - for (ItemStack itemStack : mInputBusses.get(0) - .getRealInventory()) { - if (astralArrayAmount >= ASTRAL_ARRAY_LIMIT) break; - if (itemStack != null && itemStack.isItemEqual(astralArrayFabricator.get(1))) { - long insertAmount = Math.min(itemStack.stackSize, ASTRAL_ARRAY_LIMIT - astralArrayAmount); - astralArrayAmount += insertAmount; - itemStack.stackSize -= insertAmount; - } - } - - long parallelExponent = 1; - - if (astralArrayAmount != 0) { - parallelExponent = (long) Math.floor( - Math.log(PARALLEL_FOR_FIRST_ASTRAL_ARRAY * Math.min(astralArrayAmount, ASTRAL_ARRAY_LIMIT)) - / LOG_CONSTANT); - parallelAmount = (long) pow(2, parallelExponent); - } else { - parallelAmount = 1; - } - - // Debug mode, overwrites the required fluids to initiate the recipe to 100L of each. - if (parallelAmount > 1) { - if ((EOH_DEBUG_MODE && getStellarPlasmaStored() < 100) || (!EOH_DEBUG_MODE && getStellarPlasmaStored() - < currentRecipe.getHeliumRequirement() * (12.4 / 1_000_000f) * parallelAmount)) { - return SimpleCheckRecipeResult.ofFailure("no_stellar_plasma"); - } - } - - if (parallelAmount == 1) { - if ((EOH_DEBUG_MODE && getHydrogenStored() < 100) - || (!EOH_DEBUG_MODE && getHydrogenStored() < currentRecipe.getHydrogenRequirement())) { - return SimpleCheckRecipeResult.ofFailure("no_hydrogen"); - } - - if ((EOH_DEBUG_MODE && getHeliumStored() < 100) - || (!EOH_DEBUG_MODE && getHeliumStored() < currentRecipe.getHeliumRequirement())) { - return SimpleCheckRecipeResult.ofFailure("no_helium"); - } - } - - if (spacetimeCompressionFieldMetadata == -1) { - return CheckRecipeResultRegistry - .insufficientMachineTier((int) recipeObject.getSpacetimeCasingTierRequired()); - } - - // Check tier of spacetime compression blocks is high enough. - if (spacetimeCompressionFieldMetadata < recipeObject.getSpacetimeCasingTierRequired()) { - return CheckRecipeResultRegistry - .insufficientMachineTier((int) recipeObject.getSpacetimeCasingTierRequired()); - } - - // Calculate multipliers used in power calculations - double powerMultiplier = Math.max(1, Math.pow(POWER_INCREASE_CONSTANT, parallelExponent)); - - // Determine EU recipe input - startEU = recipeObject.getEUStartCost(); - - // Calculate normal EU values - double outputEUPenalty = (TOTAL_CASING_TIERS_WITH_POWER_PENALTY - stabilisationFieldMetadata) - * STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER; - outputEU_BigInt = BigInteger.valueOf((long) (recipeObject.getEUOutput() * (1 - outputEUPenalty))); - usedEU = BigInteger.valueOf(-startEU) - .multiply(BigInteger.valueOf((long) Math.pow(4, currentCircuitMultiplier))); - - // Calculate parallel EU values - if (parallelAmount > 1) { - outputEU_BigInt = outputEU_BigInt - .multiply(BigInteger.valueOf((long) (powerMultiplier * PRECISION_MULTIPLIER))) - .divide(BigInteger.valueOf((long) (PRECISION_MULTIPLIER * POWER_DIVISION_CONSTANT))); - - usedEU = usedEU - .multiply( - BigInteger.valueOf((long) (powerMultiplier * PARALLEL_MULTIPLIER_CONSTANT * PRECISION_MULTIPLIER))) - .divide(BigInteger.valueOf((long) (PRECISION_MULTIPLIER * POWER_DIVISION_CONSTANT))); - } - - // Remove EU from the users network. - if (!addEUToGlobalEnergyMap(userUUID, usedEU)) { - return CheckRecipeResultRegistry.insufficientStartupPower(usedEU.abs()); - } - - mMaxProgresstime = recipeProcessTimeCalculator( - recipeObject.getRecipeTimeInTicks(), - recipeObject.getSpacetimeCasingTierRequired()); - - calculateInputFluidExcessValues(recipeObject.getHydrogenRequirement(), recipeObject.getHeliumRequirement()); - - if (EOH_DEBUG_MODE) { - hydrogenOverflowProbabilityAdjustment = 0; - heliumOverflowProbabilityAdjustment = 0; - stellarPlasmaOverflowProbabilityAdjustment = 0; - } - - successChance = recipeChanceCalculator(); - currentRecipeRocketTier = currentRecipe.getRocketTier(); - - // Reduce internal storage by input fluid quantity required for recipe. - if (parallelAmount > 1) { - validFluidMap.put(MaterialsUEVplus.RawStarMatter.mFluid, 0L); - } else { - validFluidMap.put(Materials.Hydrogen.mGas, 0L); - validFluidMap.put(Materials.Helium.mGas, 0L); - } - - yield = recipeYieldCalculator(); - if (EOH_DEBUG_MODE) { - successChance = 1; // Debug recipes, sets them to 100% output chance. - } - - // Return copies of the output objects. - outputFluids = recipeObject.getOutputFluids(); - outputItems = recipeObject.getOutputItems(); - - // Star matter is always the last element in the array. - starMatter = new FluidStackLong(outputFluids.get(outputFluids.size() - 1)); - - // And stellar plasma is the second last. - stellarPlasma = new FluidStackLong(outputFluids.get(outputFluids.size() - 2)); - - successfulParallelAmount = (long) calculateChancedOutputMultiplier( - (int) (10000 * successChance), - (int) parallelAmount); - // Iterate over item output list and apply yield & successful parallel values. - for (ItemStackLong itemStackLong : outputItems) { - itemStackLong.stackSize *= yield * successfulParallelAmount; - } - - // Iterate over fluid output list and apply yield & successful parallel values. - for (FluidStackLong fluidStackLong : outputFluids) { - fluidStackLong.amount *= yield * successfulParallelAmount; - } - - updateSlots(); - - if (animationsEnabled) { - createRenderBlock(currentRecipe); - } - - recipeRunning = true; - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - private void createRenderBlock(final EyeOfHarmonyRecipe currentRecipe) { - - IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); - - int x = gregTechTileEntity.getXCoord(); - int y = gregTechTileEntity.getYCoord(); - int z = gregTechTileEntity.getZCoord(); - - double xOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetX; - double zOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetZ; - double yOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetY; - - this.getBaseMetaTileEntity() - .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); - this.getBaseMetaTileEntity() - .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), eyeOfHarmonyRenderBlock); - TileEyeOfHarmony rendererTileEntity = (TileEyeOfHarmony) this.getBaseMetaTileEntity() - .getWorld() - .getTileEntity((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset)); - - rendererTileEntity.setTier(currentRecipe.getRocketTier()); - - int recipeSpacetimeTier = (int) currentRecipe.getSpacetimeCasingTierRequired(); - - // Star is a larger size depending on the spacetime tier of the recipe. - rendererTileEntity.setSize((1 + recipeSpacetimeTier)); - - // Star rotates faster the higher tier time dilation you use in the multi. - // Lower value = faster rotation speed. - rendererTileEntity.setRotationSpeed((1 + timeAccelerationFieldMetadata) / 2.0f); - } - - private double successChance; - private long currentRecipeRocketTier; - - private void outputFailedChance() { - long failedParallelAmount = parallelAmount - successfulParallelAmount; - if (failedParallelAmount > 0) { - // 2^Tier spacetime released upon recipe failure. - outputFluidToAENetwork( - MaterialsUEVplus.SpaceTime.getMolten(1), - (long) ((successChance * MOLTEN_SPACETIME_PER_FAILURE_TIER - * pow(SPACETIME_FAILURE_BASE, currentRecipeRocketTier + 1)) * failedParallelAmount)); - } - super.outputAfterRecipe_EM(); - } - - @Override - public void stopMachine(@Nonnull ShutDownReason reason) { - super.stopMachine(reason); - destroyRenderBlock(); - recipeRunning = false; - } - - @Override - public void onBlockDestroyed() { - super.onBlockDestroyed(); - destroyRenderBlock(); - } - - private void destroyRenderBlock() { - IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); - - int x = gregTechTileEntity.getXCoord(); - int y = gregTechTileEntity.getYCoord(); - int z = gregTechTileEntity.getZCoord(); - - double xOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetX; - double zOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetZ; - double yOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetY; - - this.getBaseMetaTileEntity() - .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); - } - - public void outputAfterRecipe_EM() { - recipeRunning = false; - eRequiredData = 0L; - - destroyRenderBlock(); - - // Output EU - addEUToGlobalEnergyMap(userUUID, outputEU_BigInt); - - startEU = 0; - outputEU_BigInt = BigInteger.ZERO; - - outputFailedChance(); - - if (successfulParallelAmount > 0) { - for (ItemStackLong itemStack : outputItems) { - outputItemToAENetwork(itemStack.itemStack, itemStack.stackSize); - } - - for (FluidStackLong fluidStack : outputFluids) { - outputFluidToAENetwork(fluidStack.fluidStack, fluidStack.amount); - } - } - - // Clear the array list for new recipes. - outputItems = new ArrayList<>(); - outputFluids = new ArrayList<>(); - - // Do other stuff from TT superclasses. E.g. outputting fluids. - super.outputAfterRecipe_EM(); - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - - if (aTick == 1) { - userUUID = getBaseMetaTileEntity().getOwnerUuid(); - strongCheckOrAddUser(userUUID); - } - - if (!recipeRunning && mMachine) { - if ((aTick % TICKS_BETWEEN_HATCH_DRAIN) == 0) { - drainFluidFromHatchesAndStoreInternally(); - } - } - } - - private boolean recipeRunning = false; - - private void outputItemToAENetwork(ItemStack item, long amount) { - if (item == null || amount <= 0) return; - - while (amount >= Integer.MAX_VALUE) { - ItemStack tmpItem = item.copy(); - tmpItem.stackSize = Integer.MAX_VALUE; - ((GT_MetaTileEntity_Hatch_OutputBus_ME) mOutputBusses.get(0)).store(tmpItem); - amount -= Integer.MAX_VALUE; - } - ItemStack tmpItem = item.copy(); - tmpItem.stackSize = (int) amount; - ((GT_MetaTileEntity_Hatch_OutputBus_ME) mOutputBusses.get(0)).store(tmpItem); - } - - private void outputFluidToAENetwork(FluidStack fluid, long amount) { - if (fluid == null || amount <= 0) return; - - while (amount >= Integer.MAX_VALUE) { - FluidStack tmpFluid = fluid.copy(); - tmpFluid.amount = Integer.MAX_VALUE; - ((GT_MetaTileEntity_Hatch_Output_ME) mOutputHatches.get(0)).tryFillAE(tmpFluid); - amount -= Integer.MAX_VALUE; - } - FluidStack tmpFluid = fluid.copy(); - tmpFluid.amount = (int) amount; - ((GT_MetaTileEntity_Hatch_Output_ME) mOutputHatches.get(0)).tryFillAE(tmpFluid); - } - - @Override - public String[] getInfoData() { - ArrayList str = new ArrayList<>(Arrays.asList(super.getInfoData())); - str.add(GOLD + "---------------- Control Block Statistics ----------------"); - if (spacetimeCompressionFieldMetadata < 0) { - str.add("Spacetime Compression Field Grade: None"); - } else { - str.add( - "Spacetime Compression Field Grade: " + EOH_TIER_FANCY_NAMES[spacetimeCompressionFieldMetadata] - + RESET - + " (" - + YELLOW - + spacetimeCompressionFieldMetadata - + RESET - + ")"); - } - if (timeAccelerationFieldMetadata < 0) { - str.add("Time Dilation Field Grade: None"); - } else { - str.add( - "Time Dilation Field Grade: " + EOH_TIER_FANCY_NAMES[timeAccelerationFieldMetadata] - + RESET - + " (" - + YELLOW - + timeAccelerationFieldMetadata - + RESET - + ")"); - } - if (stabilisationFieldMetadata < 0) { - str.add("Stabilisation Field Grade: None"); - } else { - str.add( - "Stabilisation Field Grade: " + EOH_TIER_FANCY_NAMES[stabilisationFieldMetadata] - + RESET - + " (" - + YELLOW - + stabilisationFieldMetadata - + RESET - + ")"); - } - str.add(GOLD + "----------------- Internal Storage ----------------"); - validFluidMap.forEach( - (key, value) -> str.add(BLUE + key.getLocalizedName() + RESET + " : " + RED + formatNumbers(value))); - str.add(BLUE + "Astral Array Fabricators" + RESET + " : " + RED + formatNumbers(astralArrayAmount)); - if (recipeRunning) { - str.add(GOLD + "---------------------- Other Stats ---------------"); - str.add("Recipe Success Chance: " + RED + formatNumbers(100 * successChance) + RESET + "%"); - str.add("Recipe Yield: " + RED + formatNumbers(100 * yield) + RESET + "%"); - str.add( - "Effective Astral Array Fabricators: " + RED - + formatNumbers(Math.min(astralArrayAmount, ASTRAL_ARRAY_LIMIT))); - str.add("Total Parallel: " + RED + formatNumbers(parallelAmount)); - str.add("EU Output: " + RED + toStandardForm(outputEU_BigInt) + RESET + " EU"); - str.add("EU Input: " + RED + toStandardForm(usedEU.abs()) + RESET + " EU"); - int currentMaxProgresstime = Math.max(maxProgresstime(), 1); - if (starMatter != null && starMatter.fluidStack != null) { - FluidStackLong starMatterOutput = new FluidStackLong( - starMatter.fluidStack, - (long) (starMatter.amount * yield * successChance * parallelAmount)); - str.add( - "Average " + starMatterOutput.fluidStack.getLocalizedName() - + " Output: " - + RED - + formatNumbers(starMatterOutput.amount) - + RESET - + " L, " - + YELLOW - + formatNumbers(starMatterOutput.amount * 20.0 / currentMaxProgresstime) - + RESET - + " L/s"); - - FluidStackLong stellarPlasmaOutput = new FluidStackLong( - MaterialsUEVplus.RawStarMatter.getFluid(0), - (long) (stellarPlasma.amount * yield * successChance * parallelAmount)); - str.add( - "Average " + stellarPlasmaOutput.fluidStack.getLocalizedName() - + " Output: " - + RED - + formatNumbers(stellarPlasmaOutput.amount) - + RESET - + " L, " - + YELLOW - + formatNumbers(stellarPlasmaOutput.amount * 20.0 / currentMaxProgresstime) - + RESET - + " L/s"); - } - BigInteger euPerTick = (outputEU_BigInt.subtract(usedEU.abs())) - .divide(BigInteger.valueOf(currentMaxProgresstime)); - - str.add("Estimated EU/t: " + RED + toStandardForm(euPerTick) + RESET + " EU/t"); - } - str.add(GOLD + "-----------------------------------------------------"); - return str.toArray(new String[0]); - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return new String[] { "Eye of Harmony multiblock" }; - } - - // NBT save/load strings. - private static final String EYE_OF_HARMONY = "eyeOfHarmonyOutput"; - private static final String NUMBER_OF_ITEMS_NBT_TAG = EYE_OF_HARMONY + "numberOfItems"; - private static final String NUMBER_OF_FLUIDS_NBT_TAG = EYE_OF_HARMONY + "numberOfFluids"; - private static final String ITEM_OUTPUT_NBT_TAG = EYE_OF_HARMONY + "itemOutput"; - private static final String FLUID_OUTPUT_NBT_TAG = EYE_OF_HARMONY + "fluidOutput"; - private static final String RECIPE_RUNNING_NBT_TAG = EYE_OF_HARMONY + "recipeRunning"; - private static final String CURRENT_RECIPE_STAR_MATTER_TAG = EYE_OF_HARMONY + "recipeStarMatter"; - private static final String CURRENT_RECIPE_STELLAR_PLASMA_TAG = EYE_OF_HARMONY + "recipeStellarPlasma"; - private static final String CURRENT_RECIPE_FIXED_OUTPUTS_TAG = EYE_OF_HARMONY + "recipeFixedOutputs"; - private static final String RECIPE_SUCCESS_CHANCE_NBT_TAG = EYE_OF_HARMONY + "recipeSuccessChance"; - private static final String ROCKET_TIER_NBT_TAG = EYE_OF_HARMONY + "rocketTier"; - private static final String CURRENT_CIRCUIT_MULTIPLIER_TAG = EYE_OF_HARMONY + "currentCircuitMultiplier"; - private static final String ANIMATIONS_ENABLED = EYE_OF_HARMONY + "animationsEnabled"; - private static final String CALCULATED_EU_OUTPUT_NBT_TAG = EYE_OF_HARMONY + "outputEU_BigInt"; - private static final String PARALLEL_AMOUNT_NBT_TAG = EYE_OF_HARMONY + "parallelAmount"; - private static final String YIELD_NBT_TAG = EYE_OF_HARMONY + "yield"; - private static final String SUCCESSFUL_PARALLEL_AMOUNT_NBT_TAG = EYE_OF_HARMONY + "successfulParallelAmount"; - private static final String ASTRAL_ARRAY_AMOUNT_NBT_TAG = EYE_OF_HARMONY + "astralArrayAmount"; - private static final String CALCULATED_EU_INPUT_NBT_TAG = EYE_OF_HARMONY + "usedEU"; - - // Sub tags, less specific names required. - private static final String STACK_SIZE = "stackSize"; - private static final String ITEM_STACK_NBT_TAG = "itemStack"; - private static final String FLUID_AMOUNT = "fluidAmount"; - private static final String FLUID_STACK_NBT_TAG = "fluidStack"; - - // Tags for pre-setting - public static final String PLANET_BLOCK = "planetBlock"; - - @Override - public void initDefaultModes(NBTTagCompound aNBT) { - super.initDefaultModes(aNBT); - if (aNBT != null && aNBT.hasKey(PLANET_BLOCK) && getControllerSlot() == null) { - mInventory[getControllerSlotIndex()] = new ItemStack(ModBlocks.getBlock(aNBT.getString(PLANET_BLOCK))); - aNBT.removeTag(PLANET_BLOCK); - } - } - - @Override - public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { - if (stack.hasTagCompound() && stack.getTagCompound() - .hasKey(PLANET_BLOCK)) { - tooltip.add( - 1, - GT_LanguageManager.addStringLocalization("EOH_Controller_PlanetBlock", "Current Planet Block: ") + AQUA - + new ItemStack( - ModBlocks.getBlock( - stack.getTagCompound() - .getString(PLANET_BLOCK))).getDisplayName()); - } - } - - @Override - public void setItemNBT(NBTTagCompound NBT) { - NBT.setLong(ASTRAL_ARRAY_AMOUNT_NBT_TAG, astralArrayAmount); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - // Save the quantity of fluid stored inside the controller. - validFluidMap.forEach((key, value) -> aNBT.setLong("stored." + key.getUnlocalizedName(), value)); - - aNBT.setBoolean(RECIPE_RUNNING_NBT_TAG, recipeRunning); - aNBT.setDouble(RECIPE_SUCCESS_CHANCE_NBT_TAG, successChance); - aNBT.setLong(ROCKET_TIER_NBT_TAG, currentRecipeRocketTier); - aNBT.setLong(CURRENT_CIRCUIT_MULTIPLIER_TAG, currentCircuitMultiplier); - aNBT.setBoolean(ANIMATIONS_ENABLED, animationsEnabled); - aNBT.setLong(PARALLEL_AMOUNT_NBT_TAG, parallelAmount); - aNBT.setLong(SUCCESSFUL_PARALLEL_AMOUNT_NBT_TAG, successfulParallelAmount); - aNBT.setDouble(YIELD_NBT_TAG, yield); - aNBT.setLong(ASTRAL_ARRAY_AMOUNT_NBT_TAG, astralArrayAmount); - aNBT.setByteArray(CALCULATED_EU_OUTPUT_NBT_TAG, outputEU_BigInt.toByteArray()); - aNBT.setByteArray(CALCULATED_EU_INPUT_NBT_TAG, usedEU.toByteArray()); - - // Store damage values/stack sizes of GT items being outputted. - NBTTagCompound itemStackListNBTTag = new NBTTagCompound(); - itemStackListNBTTag.setLong(NUMBER_OF_ITEMS_NBT_TAG, outputItems.size()); - - int index = 0; - for (ItemStackLong itemStackLong : outputItems) { - // Save stack size to NBT. - itemStackListNBTTag.setLong(index + STACK_SIZE, itemStackLong.stackSize); - - // Save ItemStack to NBT. - aNBT.setTag(index + ITEM_STACK_NBT_TAG, itemStackLong.itemStack.writeToNBT(new NBTTagCompound())); - - index++; - } - - aNBT.setTag(ITEM_OUTPUT_NBT_TAG, itemStackListNBTTag); - - // Store damage values/stack sizes of GT fluids being outputted. - NBTTagCompound fluidStackListNBTTag = new NBTTagCompound(); - fluidStackListNBTTag.setLong(NUMBER_OF_FLUIDS_NBT_TAG, outputFluids.size()); - - int indexFluids = 0; - for (FluidStackLong fluidStackLong : outputFluids) { - // Save fluid amount to NBT. - fluidStackListNBTTag.setLong(indexFluids + FLUID_AMOUNT, fluidStackLong.amount); - - // Save FluidStack to NBT. - aNBT.setTag(indexFluids + FLUID_STACK_NBT_TAG, fluidStackLong.fluidStack.writeToNBT(new NBTTagCompound())); - - indexFluids++; - } - - aNBT.setTag(FLUID_OUTPUT_NBT_TAG, fluidStackListNBTTag); - - if (starMatter != null && starMatter.fluidStack != null) { - - NBTTagCompound fixedRecipeOutputs = new NBTTagCompound(); - - fixedRecipeOutputs.setLong(0 + FLUID_AMOUNT, starMatter.amount); - aNBT.setTag(CURRENT_RECIPE_STAR_MATTER_TAG, starMatter.fluidStack.writeToNBT(new NBTTagCompound())); - - fixedRecipeOutputs.setLong(1 + FLUID_AMOUNT, stellarPlasma.amount); - aNBT.setTag(CURRENT_RECIPE_STELLAR_PLASMA_TAG, stellarPlasma.fluidStack.writeToNBT(new NBTTagCompound())); - - aNBT.setTag(CURRENT_RECIPE_FIXED_OUTPUTS_TAG, fixedRecipeOutputs); - } - - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - - // Load the quantity of fluid stored inside the controller. - validFluidMap - .forEach((key, value) -> validFluidMap.put(key, aNBT.getLong("stored." + key.getUnlocalizedName()))); - - // Load other stuff from NBT. - recipeRunning = aNBT.getBoolean(RECIPE_RUNNING_NBT_TAG); - successChance = aNBT.getDouble(RECIPE_SUCCESS_CHANCE_NBT_TAG); - currentRecipeRocketTier = aNBT.getLong(ROCKET_TIER_NBT_TAG); - currentCircuitMultiplier = aNBT.getLong(CURRENT_CIRCUIT_MULTIPLIER_TAG); - if (aNBT.hasKey(ANIMATIONS_ENABLED)) animationsEnabled = aNBT.getBoolean(ANIMATIONS_ENABLED); - parallelAmount = aNBT.getLong(PARALLEL_AMOUNT_NBT_TAG); - yield = aNBT.getDouble(YIELD_NBT_TAG); - successfulParallelAmount = aNBT.getLong(SUCCESSFUL_PARALLEL_AMOUNT_NBT_TAG); - astralArrayAmount = aNBT.getLong(ASTRAL_ARRAY_AMOUNT_NBT_TAG); - if (aNBT.hasKey(CALCULATED_EU_OUTPUT_NBT_TAG)) - outputEU_BigInt = new BigInteger(aNBT.getByteArray(CALCULATED_EU_OUTPUT_NBT_TAG)); - if (aNBT.hasKey(CALCULATED_EU_INPUT_NBT_TAG)) - usedEU = new BigInteger(aNBT.getByteArray(CALCULATED_EU_INPUT_NBT_TAG)); - - // Load damage values/stack sizes of GT items being outputted and convert back to items. - NBTTagCompound tempItemTag = aNBT.getCompoundTag(ITEM_OUTPUT_NBT_TAG); - - // Iterate over all stored items. - for (int index = 0; index < tempItemTag.getInteger(NUMBER_OF_ITEMS_NBT_TAG); index++) { - - // Load stack size from NBT. - long stackSize = tempItemTag.getLong(index + STACK_SIZE); - - // Load ItemStack from NBT. - ItemStack itemStack = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag(index + ITEM_STACK_NBT_TAG)); - - outputItems.add(new ItemStackLong(itemStack, stackSize)); - } - - // Load damage values/fluid amounts of GT fluids being outputted and convert back to fluids. - NBTTagCompound tempFluidTag = aNBT.getCompoundTag(FLUID_OUTPUT_NBT_TAG); - - // Iterate over all stored fluids. - for (int indexFluids = 0; indexFluids < tempFluidTag.getInteger(NUMBER_OF_FLUIDS_NBT_TAG); indexFluids++) { - - // Load fluid amount from NBT. - long fluidAmount = tempFluidTag.getLong(indexFluids + FLUID_AMOUNT); - - // Load FluidStack from NBT. - FluidStack fluidStack = FluidStack - .loadFluidStackFromNBT(aNBT.getCompoundTag(indexFluids + FLUID_STACK_NBT_TAG)); - - outputFluids.add(new FluidStackLong(fluidStack, fluidAmount)); - } - - tempFluidTag = aNBT.getCompoundTag(CURRENT_RECIPE_FIXED_OUTPUTS_TAG); - starMatter = new FluidStackLong( - FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag(CURRENT_RECIPE_STAR_MATTER_TAG)), - tempFluidTag.getLong(0 + FLUID_AMOUNT)); - stellarPlasma = new FluidStackLong( - FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag(CURRENT_RECIPE_STELLAR_PLASMA_TAG)), - tempFluidTag.getLong(1 + FLUID_AMOUNT)); - - super.loadNBTData(aNBT); - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_ForgeOfGods.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_ForgeOfGods.java deleted file mode 100644 index 86f608b602..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_ForgeOfGods.java +++ /dev/null @@ -1,3061 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.loader.recipe.Godforge.godforgeUpgradeMats; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.GodforgeCasings; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.forgeOfGodsRenderBlock; -import static com.github.technus.tectech.util.GodforgeMath.allowModuleConnection; -import static com.github.technus.tectech.util.GodforgeMath.calculateEnergyDiscountForModules; -import static com.github.technus.tectech.util.GodforgeMath.calculateFuelConsumption; -import static com.github.technus.tectech.util.GodforgeMath.calculateMaxFuelFactor; -import static com.github.technus.tectech.util.GodforgeMath.calculateMaxHeatForModules; -import static com.github.technus.tectech.util.GodforgeMath.calculateMaxParallelForModules; -import static com.github.technus.tectech.util.GodforgeMath.calculateProcessingVoltageForModules; -import static com.github.technus.tectech.util.GodforgeMath.calculateSpeedBonusForModules; -import static com.github.technus.tectech.util.GodforgeMath.calculateStartupFuelConsumption; -import static com.github.technus.tectech.util.GodforgeMath.queryMilestoneStats; -import static com.github.technus.tectech.util.GodforgeMath.setMiscModuleParameters; -import static com.github.technus.tectech.util.TT_Utility.toExponentForm; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static gregtech.api.enums.Mods.Avaritia; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_ModHandler.getModItem; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static java.lang.Math.floor; -import static java.lang.Math.log; -import static java.lang.Math.max; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Objects; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.block.GodforgeGlassBlock; -import com.github.technus.tectech.thing.block.TileForgeOfGods; -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_BaseModule; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_ExoticModule; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_MoltenModule; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_PlasmaModule; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_SmeltingModule; -import com.github.technus.tectech.util.CommonValues; -import com.google.common.collect.ImmutableList; -import com.google.common.math.LongMath; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.MainAxisAlignment; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.FluidNameHolderWidget; -import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import com.gtnewhorizons.modularui.common.widget.Scrollable; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_HatchElementBuilder; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Input_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; - -public class GT_MetaTileEntity_EM_ForgeOfGods extends GT_MetaTileEntity_MultiblockBase_EM - implements IConstructable, ISurvivalConstructable { - - private static Textures.BlockIcons.CustomIcon ScreenON; - - private int fuelConsumptionFactor = 1; - private int selectedFuelType = 0; - private int internalBattery = 0; - private int maxBatteryCharge = 100; - private int gravitonShardsAvailable = 0; - private int gravitonShardsSpent = 0; - private int ringAmount = 1; - private int stellarFuelAmount = 0; - private int neededStartupFuel = 0; - private long fuelConsumption = 0; - private long totalRecipesProcessed = 0; - private long totalFuelConsumed = 0; - private float totalExtensionsBuilt = 0; - private float powerMilestonePercentage = 0; - private float recipeMilestonePercentage = 0; - private float fuelMilestonePercentage = 0; - private float structureMilestonePercentage = 0; - private float invertedPowerMilestonePercentage = 0; - private float invertedRecipeMilestonePercentage = 0; - private float invertedFuelMilestonePercentage = 0; - private float invertedStructureMilestonePercentage = 0; - private BigInteger totalPowerConsumed = BigInteger.ZERO; - private boolean batteryCharging = false; - private boolean inversion = false; - private boolean gravitonShardEjection = false; - private boolean noFormatting = false; - private boolean isRenderActive = false; - public ArrayList moduleHatches = new ArrayList<>(); - protected ItemStackHandler inputSlotHandler = new ItemStackHandler(16); - - private static final int FUEL_CONFIG_WINDOW_ID = 9; - private static final int UPGRADE_TREE_WINDOW_ID = 10; - private static final int INDIVIDUAL_UPGRADE_WINDOW_ID = 11; - private static final int BATTERY_CONFIG_WINDOW_ID = 12; - private static final int MILESTONE_WINDOW_ID = 13; - private static final int INDIVIDUAL_MILESTONE_WINDOW_ID = 14; - private static final int MANUAL_INSERTION_WINDOW_ID = 15; - private static final int GENERAL_INFO_WINDOW_ID = 16; - private static final int TEXTURE_INDEX = 960; - private static final int[] FIRST_SPLIT_UPGRADES = new int[] { 12, 13, 14 }; - private static final Integer[] UPGRADE_MATERIAL_ID_CONVERSION = { 0, 5, 7, 11, 26, 29, 30 }; - private static final long POWER_MILESTONE_CONSTANT = LongMath.pow(10, 15); - private static final long RECIPE_MILESTONE_CONSTANT = LongMath.pow(10, 7); - private static final long FUEL_MILESTONE_CONSTANT = 10_000; - private static final long RECIPE_MILESTONE_T7_CONSTANT = RECIPE_MILESTONE_CONSTANT * LongMath.pow(6, 6); - private static final long FUEL_MILESTONE_T7_CONSTANT = FUEL_MILESTONE_CONSTANT * LongMath.pow(3, 6); - private static final BigInteger POWER_MILESTONE_T7_CONSTANT = BigInteger.valueOf(POWER_MILESTONE_CONSTANT) - .multiply(BigInteger.valueOf(LongMath.pow(9, 6))); - private static final double POWER_LOG_CONSTANT = Math.log(9); - private static final double RECIPE_LOG_CONSTANT = Math.log(6); - private static final double FUEL_LOG_CONSTANT = Math.log(3); - protected static final String STRUCTURE_PIECE_MAIN = "main"; - protected static final String STRUCTURE_PIECE_SHAFT = "beam_shaft"; - protected static final String STRUCTURE_PIECE_FIRST_RING = "first_ring"; - protected static final String STRUCTURE_PIECE_FIRST_RING_AIR = "first_ring_air"; - protected static final String STRUCTURE_PIECE_SECOND_RING = "second_ring"; - protected static final String STRUCTURE_PIECE_SECOND_RING_AIR = "second_ring_air"; - protected static final String STRUCTURE_PIECE_THIRD_RING = "third_ring"; - protected static final String STRUCTURE_PIECE_THIRD_RING_AIR = "third_ring_air"; - private static final String SCANNER_INFO_BAR = EnumChatFormatting.BLUE - + "--------------------------------------------"; - private static final String TOOLTIP_BAR = EnumChatFormatting.AQUA - + "--------------------------------------------------------------------------"; - private static final ItemStack STELLAR_FUEL = Avaritia.isModLoaded() ? getModItem(Avaritia.ID, "Resource", 1, 8) - : GT_OreDictUnificator.get(OrePrefixes.block, Materials.CosmicNeutronium, 1); - - private final boolean debugMode = true; - - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int realBudget = elementBudget >= 1000 ? elementBudget : Math.min(1000, elementBudget * 5); - // 1000 blocks max per placement. - int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 63, 14, 1, realBudget, env, false, true); - if (stackSize.stackSize > 1) { - built += survivialBuildPiece( - STRUCTURE_PIECE_SECOND_RING, - stackSize, - 55, - 11, - -67, - realBudget, - env, - false, - true); - } - if (stackSize.stackSize > 2) { - built += survivialBuildPiece( - STRUCTURE_PIECE_THIRD_RING, - stackSize, - 47, - 13, - -76, - realBudget, - env, - false, - true); - } - return built; - } - - @Override - public IStructureDefinition getStructure_EM() { - return STRUCTURE_DEFINITION; - } - - public static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, ForgeOfGodsStructureString.MAIN_STRUCTURE) - .addShape(STRUCTURE_PIECE_SHAFT, ForgeOfGodsStructureString.BEAM_SHAFT) - .addShape(STRUCTURE_PIECE_FIRST_RING, ForgeOfGodsStructureString.FIRST_RING) - .addShape(STRUCTURE_PIECE_FIRST_RING_AIR, ForgeOfGodsStructureString.FIRST_RING_AIR) - .addShape(STRUCTURE_PIECE_SECOND_RING, ForgeOfGodsRingsStructureString.SECOND_RING) - .addShape(STRUCTURE_PIECE_SECOND_RING_AIR, ForgeOfGodsRingsStructureString.SECOND_RING_AIR) - .addShape(STRUCTURE_PIECE_THIRD_RING, ForgeOfGodsRingsStructureString.THIRD_RING) - .addShape(STRUCTURE_PIECE_THIRD_RING_AIR, ForgeOfGodsRingsStructureString.THIRD_RING_AIR) - .addElement('A', classicHatches(TEXTURE_INDEX + 3, 1, GodforgeCasings, 3)) - .addElement('B', ofBlock(GodforgeCasings, 0)) - .addElement('C', ofBlock(GodforgeCasings, 1)) - .addElement('D', ofBlock(GodforgeCasings, 2)) - .addElement('E', ofBlock(GodforgeCasings, 3)) - .addElement('F', ofBlock(GodforgeCasings, 4)) - .addElement('G', ofBlock(GodforgeCasings, 5)) - .addElement('H', ofBlock(GodforgeGlassBlock.INSTANCE, 0)) - .addElement('I', ofBlock(GodforgeCasings, 7)) - .addElement( - 'J', - GT_HatchElementBuilder.builder() - .atLeast(moduleElement.Module) - .casingIndex(TEXTURE_INDEX) - .dot(3) - .buildAndChain(GodforgeCasings, 0)) - .addElement('K', ofBlock(GodforgeCasings, 6)) - .addElement('L', ofBlock(Blocks.air, 0)) - .build(); - - public GT_MetaTileEntity_EM_ForgeOfGods(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_EM_ForgeOfGods(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_ForgeOfGods(mName); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/GODFORGE_CONTROLLER"); - super.registerIcons(aBlockIconRegister); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX + 1), - TextureFactory.builder() - .addIcon(ScreenON) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(ScreenON) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX + 1) }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM(STRUCTURE_PIECE_MAIN, 63, 14, 1, stackSize, hintsOnly); - if (stackSize.stackSize > 1) { - buildPiece(STRUCTURE_PIECE_SECOND_RING, stackSize, hintsOnly, 55, 11, -67); - } - if (stackSize.stackSize > 2) { - buildPiece(STRUCTURE_PIECE_THIRD_RING, stackSize, hintsOnly, 47, 13, -76); - } - } - - private final ArrayList validFuelList = new ArrayList<>() { - - { - add(MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1)); - add(MaterialsUEVplus.RawStarMatter.getFluid(1)); - add(MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(1)); - } - }; - - @Override - public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - - moduleHatches.clear(); - - // Check structure of multi - if (isRenderActive) { - if (!structureCheck_EM(STRUCTURE_PIECE_SHAFT, 63, 14, 1) - || !structureCheck_EM(STRUCTURE_PIECE_FIRST_RING_AIR, 63, 14, -59)) { - destroyRenderer(); - return false; - } - } else if (!structureCheck_EM(STRUCTURE_PIECE_MAIN, 63, 14, 1)) { - return false; - } - - if (internalBattery != 0 && !isRenderActive) { - createRenderer(); - } - - // Check there is 1 input bus - if (mInputBusses.size() != 1) { - return false; - } - - // Check there is 1 me output bus - { - if (mOutputBusses.size() != 1) { - return false; - } - - if (!(mOutputBusses.get(0) instanceof GT_MetaTileEntity_Hatch_OutputBus_ME)) { - return false; - } - } - - // Make sure there are no energy hatches - { - if (mEnergyHatches.size() > 0) { - return false; - } - - if (mExoticEnergyHatches.size() > 0) { - return false; - } - } - - // Make sure there is 1 input hatch - if (mInputHatches.size() != 1) { - return false; - } - - if (isUpgradeActive(26)) { - if (checkPiece(STRUCTURE_PIECE_SECOND_RING, 55, 11, -67)) { - ringAmount = 2; - } - if (isRenderActive && ringAmount >= 2 && !checkPiece(STRUCTURE_PIECE_SECOND_RING_AIR, 55, 11, -67)) { - destroyRenderer(); - } - } - - if (isUpgradeActive(29)) { - if (checkPiece(STRUCTURE_PIECE_THIRD_RING, 47, 13, -76)) { - ringAmount = 3; - } - if (isRenderActive && ringAmount == 3 && !checkPiece(STRUCTURE_PIECE_THIRD_RING_AIR, 47, 13, -76)) { - destroyRenderer(); - } - } - - return true; - } - - int ticker = 0; - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - ticker++; - // Check and drain fuel - if (ticker % (5 * SECONDS) == 0) { - ticker = 0; - startRecipeProcessing(); - FluidStack[] fluidInHatch = null; - boolean fuelDrained = false; - if (mInputHatches != null && mInputHatches.size() != 0) { - fluidInHatch = this.getStoredFluids() - .toArray(new FluidStack[0]); - } - int maxModuleCount = 8; - - if (upgrades[26]) { - maxModuleCount += 4; - } - if (upgrades[29]) { - maxModuleCount += 4; - } - if (mInputBusses.size() != 0) { - if (internalBattery == 0) { - GT_MetaTileEntity_Hatch_InputBus inputBus = mInputBusses.get(0); - ItemStack[] inputBusInventory = inputBus.getRealInventory(); - if (inputBusInventory != null) { - for (int i = 0; i < inputBusInventory.length; i++) { - ItemStack itemStack = inputBusInventory[i]; - if (itemStack != null && itemStack.isItemEqual(STELLAR_FUEL)) { - int stacksize = itemStack.stackSize; - if (inputBus instanceof GT_MetaTileEntity_Hatch_InputBus_ME meBus) { - ItemStack realItem = meBus.getRealInventory()[i + 16]; - if (realItem == null) { - break; - } - stacksize = realItem.stackSize; - } - inputBus.decrStackSize(i, stacksize); - stellarFuelAmount += stacksize; - inputBus.updateSlots(); - } - } - } - neededStartupFuel = calculateStartupFuelConsumption(this); - if (stellarFuelAmount >= neededStartupFuel) { - stellarFuelAmount -= neededStartupFuel; - increaseBattery(neededStartupFuel); - createRenderer(); - } - } else { - fuelConsumption = (long) calculateFuelConsumption(this) * 5 * (batteryCharging ? 2 : 1); - if (fluidInHatch != null && fuelConsumption < Integer.MAX_VALUE) { - for (FluidStack fluid : fluidInHatch) { - if (fluid.isFluidEqual(validFuelList.get(selectedFuelType))) { - FluidStack fluidNeeded = new FluidStack( - validFuelList.get(selectedFuelType), - (int) fuelConsumption); - FluidStack fluidReal; - if (mInputHatches.get(0) instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { - fluidReal = meHatch.drain(ForgeDirection.UNKNOWN, fluidNeeded, true); - } else { - fluidReal = mInputHatches.get(0) - .drain(fluidNeeded.amount, true); - } - if (fluidReal == null || fluidReal.amount < fluidNeeded.amount) { - reduceBattery(fuelConsumptionFactor); - } else { - totalFuelConsumed += getFuelFactor(); - if (batteryCharging) { - increaseBattery(fuelConsumptionFactor); - } - } - fuelDrained = true; - } - } - if (!fuelDrained) { - reduceBattery(fuelConsumptionFactor); - } - } else { - reduceBattery(fuelConsumptionFactor); - } - } - } - - determineCompositionMilestoneLevel(); - checkInversionStatus(); - determineMilestoneProgress(); - if (!debugMode) { - determineGravitonShardAmount(); - } - if (upgrades[30] && gravitonShardEjection) { - ejectGravitonShards(); - } - - // Do module calculations and checks - if (moduleHatches.size() > 0 && internalBattery > 0 && moduleHatches.size() <= maxModuleCount) { - for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { - if (allowModuleConnection(module, this)) { - module.connect(); - calculateMaxHeatForModules(module, this); - calculateSpeedBonusForModules(module, this); - calculateMaxParallelForModules(module, this); - calculateEnergyDiscountForModules(module, this); - setMiscModuleParameters(module, this); - queryMilestoneStats(module, this); - if (!upgrades[28]) { - calculateProcessingVoltageForModules(module, this); - } - } else { - module.disconnect(); - } - } - } else if (moduleHatches.size() > maxModuleCount) { - for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { - module.disconnect(); - } - } - if (mEfficiency < 0) mEfficiency = 0; - endRecipeProcessing(); - } - } - } - - public boolean addModuleToMachineList(IGregTechTileEntity tileEntity, int baseCasingIndex) { - if (tileEntity == null) { - return false; - } - IMetaTileEntity metaTileEntity = tileEntity.getMetaTileEntity(); - if (metaTileEntity == null) { - return false; - } - if (metaTileEntity instanceof GT_MetaTileEntity_EM_BaseModule) { - return moduleHatches.add((GT_MetaTileEntity_EM_BaseModule) metaTileEntity); - } - return false; - } - - public enum moduleElement implements IHatchElement { - - Module(GT_MetaTileEntity_EM_ForgeOfGods::addModuleToMachineList, GT_MetaTileEntity_EM_BaseModule.class) { - - @Override - public long count(GT_MetaTileEntity_EM_ForgeOfGods tileEntity) { - return tileEntity.moduleHatches.size(); - } - }; - - private final List> mteClasses; - private final IGT_HatchAdder adder; - - @SafeVarargs - moduleElement(IGT_HatchAdder adder, - Class... mteClasses) { - this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); - this.adder = adder; - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - public IGT_HatchAdder adder() { - return adder; - } - } - - private void createRenderer() { - - IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); - - int x = gregTechTileEntity.getXCoord(); - int y = gregTechTileEntity.getYCoord(); - int z = gregTechTileEntity.getZCoord(); - - double xOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetX; - double zOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetZ; - double yOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetY; - - this.getBaseMetaTileEntity() - .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); - this.getBaseMetaTileEntity() - .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), forgeOfGodsRenderBlock); - TileForgeOfGods rendererTileEntity = (TileForgeOfGods) this.getBaseMetaTileEntity() - .getWorld() - .getTileEntity((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset)); - - rendererTileEntity.setRenderSize(20); - rendererTileEntity.setRenderRotationSpeed(5); - - switch (ringAmount) { - case 2 -> { - buildPiece(STRUCTURE_PIECE_FIRST_RING_AIR, null, false, 63, 14, -59); - buildPiece(STRUCTURE_PIECE_SECOND_RING_AIR, null, false, 55, 11, -67); - } - case 3 -> { - buildPiece(STRUCTURE_PIECE_FIRST_RING_AIR, null, false, 63, 14, -59); - buildPiece(STRUCTURE_PIECE_SECOND_RING_AIR, null, false, 55, 11, -67); - buildPiece(STRUCTURE_PIECE_THIRD_RING_AIR, null, false, 47, 13, -76); - } - default -> { - buildPiece(STRUCTURE_PIECE_FIRST_RING_AIR, null, false, 63, 14, -59); - } - } - - isRenderActive = true; - } - - private void destroyRenderer() { - - IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); - - int x = gregTechTileEntity.getXCoord(); - int y = gregTechTileEntity.getYCoord(); - int z = gregTechTileEntity.getZCoord(); - - double xOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetX; - double zOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetZ; - double yOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetY; - - this.getBaseMetaTileEntity() - .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); - - switch (ringAmount) { - case 2 -> { - buildPiece(STRUCTURE_PIECE_FIRST_RING, null, false, 63, 14, -59); - buildPiece(STRUCTURE_PIECE_SECOND_RING, null, false, 55, 11, -67); - } - case 3 -> { - buildPiece(STRUCTURE_PIECE_FIRST_RING, null, false, 63, 14, -59); - buildPiece(STRUCTURE_PIECE_SECOND_RING, null, false, 55, 11, -67); - buildPiece(STRUCTURE_PIECE_THIRD_RING, null, false, 47, 13, -76); - } - default -> { - buildPiece(STRUCTURE_PIECE_FIRST_RING, null, false, 63, 14, -59); - } - } - - isRenderActive = false; - } - - @Override - public void onBlockDestroyed() { - super.onBlockDestroyed(); - destroyRenderer(); - } - - @Override - public String[] getInfoData() { - ArrayList str = new ArrayList<>(Arrays.asList(super.getInfoData())); - str.add(SCANNER_INFO_BAR); - str.add("Number of Rings: " + EnumChatFormatting.GOLD + ringAmount); - str.add("Total Upgrades Unlocked: " + EnumChatFormatting.GOLD + getTotalActiveUpgrades()); - str.add("Connected Modules: " + EnumChatFormatting.GOLD + moduleHatches.size()); - str.add(SCANNER_INFO_BAR); - return str.toArray(new String[0]); - } - - @Override - public void onRemoval() { - if (moduleHatches != null && moduleHatches.size() > 0) { - for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { - module.disconnect(); - } - } - super.onRemoval(); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - if (doesBindPlayerInventory()) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE) - .setPos(4, 4) - .setSize(190, 85)); - } else { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE_NO_INVENTORY) - .setPos(4, 4) - .setSize(190, 171)); - } - buildContext.addSyncedWindow(UPGRADE_TREE_WINDOW_ID, this::createUpgradeTreeWindow); - buildContext.addSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID, this::createIndividualUpgradeWindow); - buildContext.addSyncedWindow(FUEL_CONFIG_WINDOW_ID, this::createFuelConfigWindow); - buildContext.addSyncedWindow(BATTERY_CONFIG_WINDOW_ID, this::createBatteryWindow); - buildContext.addSyncedWindow(MILESTONE_WINDOW_ID, this::createMilestoneWindow); - buildContext.addSyncedWindow(INDIVIDUAL_MILESTONE_WINDOW_ID, this::createIndividualMilestoneWindow); - buildContext.addSyncedWindow(MANUAL_INSERTION_WINDOW_ID, this::createManualInsertionWindow); - buildContext.addSyncedWindow(GENERAL_INFO_WINDOW_ID, this::createGeneralInfoWindow); - builder.widget( - new ButtonWidget().setOnClick( - (clickData, widget) -> { - if (!widget.isClient()) widget.getContext() - .openSyncedWindow(UPGRADE_TREE_WINDOW_ID); - }) - .setSize(16, 16) - .setBackground(() -> { - List button = new ArrayList<>(); - button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); - button.add(TecTechUITextures.OVERLAY_BUTTON_ARROW_BLUE_UP); - return button.toArray(new IDrawable[0]); - }) - .addTooltip("Path of Celestial Transcendence") - .setPos(174, 167) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_HEAT_SINK_SMALL) - .setPos(174, 183) - .setSize(16, 6)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient()) { - widget.getContext() - .openSyncedWindow(FUEL_CONFIG_WINDOW_ID); - } - }) - .setSize(16, 16) - .setBackground(() -> { - List button = new ArrayList<>(); - button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); - button.add(TecTechUITextures.OVERLAY_BUTTON_HEAT_ON); - return button.toArray(new IDrawable[0]); - }) - .addTooltip(translateToLocal("fog.button.fuelconfig.tooltip")) - .setPos(174, 110) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .widget( - TextWidget.dynamicText(this::storedFuel) - .setDefaultColor(EnumChatFormatting.WHITE) - .setPos(6, 8) - .setSize(74, 34)) - .widget(createPowerSwitchButton()) - .widget(createBatteryButton(builder)) - .widget(createEjectionSwitch(builder)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> getBaseMetaTileEntity().isAllowedToWork(), val -> { - if (val) { - getBaseMetaTileEntity().enableWorking(); - } else { - getBaseMetaTileEntity().disableWorking(); - } - })) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient()) { - checkMachine_EM(this.getBaseMetaTileEntity(), null); - } - }) - .setSize(16, 16) - .setBackground(() -> { - List button = new ArrayList<>(); - button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); - button.add(TecTechUITextures.OVERLAY_CYCLIC_BLUE); - return button.toArray(new IDrawable[0]); - }) - .addTooltip(translateToLocal("fog.button.structurecheck.tooltip")) - .setPos(8, 91) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient()) { - widget.getContext() - .openSyncedWindow(MILESTONE_WINDOW_ID); - } - }) - .setSize(16, 16) - .setBackground(() -> { - List button = new ArrayList<>(); - button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); - button.add(TecTechUITextures.OVERLAY_BUTTON_FLAG); - return button.toArray(new IDrawable[0]); - - }) - .addTooltip(translateToLocal("fog.button.milestones.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(174, 91)) - .widget( - new ButtonWidget().setOnClick( - (clickData, widget) -> { - if (!widget.isClient()) widget.getContext() - .openSyncedWindow(GENERAL_INFO_WINDOW_ID); - }) - .setSize(18, 18) - .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.clickhere")) - .setPos(172, 67) - .setTooltipShowUpDelay(TOOLTIP_DELAY)); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO) - .setSize(18, 18) - .setPos(172, 67)); - } - - @Override - protected ButtonWidget createPowerSwitchButton() { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - if (getBaseMetaTileEntity().isAllowedToWork()) { - getBaseMetaTileEntity().disableWorking(); - } else { - getBaseMetaTileEntity().enableWorking(); - } - }) - .setPlayClickSound(false) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); - if (getBaseMetaTileEntity().isAllowedToWork()) { - ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON); - } else { - ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_DISABLED); - } - return ret.toArray(new IDrawable[0]); - }) - .setPos(174, doesBindPlayerInventory() ? 148 : 172) - .setSize(16, 16); - button.addTooltip("Power Switch") - .setTooltipShowUpDelay(TOOLTIP_DELAY); - return (ButtonWidget) button; - } - - protected ButtonWidget createEjectionSwitch(IWidgetBuilder builder) { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (upgrades[30]) { - gravitonShardEjection = !gravitonShardEjection; - } - }) - .setPlayClickSound(upgrades[30]) - .setBackground(() -> { - List ret = new ArrayList<>(); - if (!upgrades[30]) { - return ret.toArray(new IDrawable[0]); - } - if (gravitonShardEjection) { - ret.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); - ret.add(TecTechUITextures.OVERLAY_EJECTION_ON); - } else { - ret.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); - ret.add(TecTechUITextures.OVERLAY_EJECTION_LOCKED); - } - return ret.toArray(new IDrawable[0]); - }) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer(() -> gravitonShardEjection, val -> gravitonShardEjection = val), - builder) - .setPos(26, 91) - .setSize(16, 16) - .attachSyncer(new FakeSyncWidget.BooleanSyncer(() -> upgrades[30], val -> upgrades[30] = val), builder); - if (upgrades[30]) { - button.addTooltip(translateToLocal("fog.button.ejection.tooltip")); - button.setTooltipShowUpDelay(TOOLTIP_DELAY); - } - return (ButtonWidget) button; - } - - protected Widget createBatteryButton(IWidgetBuilder builder) { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - if (clickData.mouseButton == 0) { - batteryCharging = !batteryCharging; - } else if (clickData.mouseButton == 1 && !widget.isClient() && upgrades[8]) { - widget.getContext() - .openSyncedWindow(BATTERY_CONFIG_WINDOW_ID); - } - }) - .setPlayClickSound(false) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); - if (batteryCharging) { - ret.add(TecTechUITextures.OVERLAY_BUTTON_BATTERY_ON); - } else { - ret.add(TecTechUITextures.OVERLAY_BUTTON_BATTERY_OFF); - } - return ret.toArray(new IDrawable[0]); - }) - .setPos(174, 129) - .setSize(16, 16); - button.addTooltip(translateToLocal("fog.button.battery.tooltip.01")) - .addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.battery.tooltip.02")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer(() -> batteryCharging, val -> batteryCharging = val), - builder); - return button; - } - - protected ModularWindow createBatteryWindow(final EntityPlayer player) { - final int WIDTH = 78; - final int HEIGHT = 52; - final int PARENT_WIDTH = getGUIWidth(); - final int PARENT_HEIGHT = getGUIHeight(); - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.setDraggable(true); - builder.setPos( - (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) - .add( - Alignment.BottomRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) - .add(WIDTH - 3, 0) - .subtract(0, 10))); - builder.widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.batteryinfo") - .setPos(3, 4) - .setSize(74, 20)) - .widget( - new NumericWidget().setSetter(val -> maxBatteryCharge = (int) val) - .setGetter(() -> maxBatteryCharge) - .setBounds(1, Integer.MAX_VALUE) - .setDefaultValue(100) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(70, 18) - .setPos(4, 25) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)); - return builder.build(); - } - - protected ModularWindow createFuelConfigWindow(final EntityPlayer player) { - final int WIDTH = 78; - final int HEIGHT = 130; - final int PARENT_WIDTH = getGUIWidth(); - final int PARENT_HEIGHT = getGUIHeight(); - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.setDraggable(true); - builder.setPos( - (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) - .add( - Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) - .add(WIDTH - 3, 0))); - builder.widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.fuelconsumption") - .setPos(3, 2) - .setSize(74, 34)) - .widget( - new NumericWidget().setSetter(val -> fuelConsumptionFactor = (int) val) - .setGetter(() -> fuelConsumptionFactor) - .setBounds(1, calculateMaxFuelFactor(this)) - .setDefaultValue(1) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(70, 18) - .setPos(4, 35) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)) - .widget( - new DrawableWidget().setDrawable(ModularUITextures.ICON_INFO) - .setPos(64, 24) - .setSize(10, 10) - .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.0")) - .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.1")) - .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.2")) - .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.3")) - .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.4")) - .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.5")) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.fueltype") - .setPos(3, 57) - .setSize(74, 24)) - .widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.fuelusage") - .setPos(3, 100) - .setSize(74, 20)) - .widget( - TextWidget.dynamicText(this::fuelUsage) - .setPos(3, 115) - .setSize(74, 15)) - .widget( - new MultiChildWidget().addChild( - new FluidNameHolderWidget( - () -> MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1) - .getUnlocalizedName() - .substring(6), - (String) -> MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1) - .getUnlocalizedName()) { - - @Override - public void buildTooltip(List tooltip) { - FluidStack fluid = createFluidStack(); - addFluidNameInfo(tooltip, fluid); - addAdditionalFluidInfo(tooltip, fluid); - } - }.setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(1, 1) - .setSize(16, 16)) - .addChild(new ButtonWidget().setOnClick((clickData, widget) -> { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - selectedFuelType = 0; - }) - .setBackground(() -> { - if (selectedFuelType == 0) { - return new IDrawable[] { TecTechUITextures.SLOT_OUTLINE_GREEN }; - } else { - return new IDrawable[] {}; - } - }) - .setSize(18, 18) - .attachSyncer(new FakeSyncWidget.IntegerSyncer(this::getFuelType, this::setFuelType), builder)) - - .setPos(6, 82) - .setSize(18, 18)) - .widget( - new MultiChildWidget().addChild( - new FluidNameHolderWidget( - () -> MaterialsUEVplus.RawStarMatter.getFluid(1) - .getUnlocalizedName() - .substring(6), - (String) -> MaterialsUEVplus.RawStarMatter.getFluid(1) - .getUnlocalizedName()) { - - @Override - public void buildTooltip(List tooltip) { - FluidStack fluid = createFluidStack(); - addFluidNameInfo(tooltip, fluid); - addAdditionalFluidInfo(tooltip, fluid); - } - }.setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(1, 1) - .setSize(16, 16)) - .addChild(new ButtonWidget().setOnClick((clickData, widget) -> { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - selectedFuelType = 1; - }) - .setBackground(() -> { - if (selectedFuelType == 1) { - return new IDrawable[] { TecTechUITextures.SLOT_OUTLINE_GREEN }; - } else { - return new IDrawable[] {}; - } - }) - .setSize(18, 18)) - .setPos(29, 82) - .setSize(18, 18) - .attachSyncer(new FakeSyncWidget.IntegerSyncer(this::getFuelType, this::setFuelType), builder)) - .widget( - new MultiChildWidget().addChild( - new FluidNameHolderWidget( - () -> MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(1) - .getUnlocalizedName() - .substring(6), - (String) -> MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(1) - .getUnlocalizedName()) { - - @Override - public void buildTooltip(List tooltip) { - FluidStack fluid = createFluidStack(); - addFluidNameInfo(tooltip, fluid); - addAdditionalFluidInfo(tooltip, fluid); - } - }.setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(1, 1) - .setSize(16, 16)) - .addChild(new ButtonWidget().setOnClick((clickData, widget) -> { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - selectedFuelType = 2; - }) - .setBackground(() -> { - if (selectedFuelType == 2) { - return new IDrawable[] { TecTechUITextures.SLOT_OUTLINE_GREEN }; - } else { - return new IDrawable[] {}; - } - }) - .setSize(18, 18)) - .setPos(52, 82) - .setSize(18, 18) - .attachSyncer(new FakeSyncWidget.IntegerSyncer(this::getFuelType, this::setFuelType), builder)); - - return builder.build(); - } - - private final int[] milestoneProgress = new int[] { 0, 0, 0, 0 }; - - protected ModularWindow createMilestoneWindow(final EntityPlayer player) { - final int WIDTH = 400; - final int HEIGHT = 300; - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(TecTechUITextures.BACKGROUND_SPACE); - builder.setGuiTint(getGUIColorization()); - builder.setDraggable(true); - builder.widget(createMilestoneButton(0, 80, 100, new Pos2d(62, 24))); - builder.widget(createMilestoneButton(1, 70, 98, new Pos2d(263, 25))); - builder.widget(createMilestoneButton(2, 100, 100, new Pos2d(52, 169))); - builder.widget(createMilestoneButton(3, 100, 100, new Pos2d(248, 169))); - builder.widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.powermilestone") - .setDefaultColor(EnumChatFormatting.GOLD) - .setPos(77, 45) - .setSize(50, 30)); - builder.widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.recipemilestone") - .setDefaultColor(EnumChatFormatting.GOLD) - .setPos(268, 45) - .setSize(60, 30)); - builder.widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.fuelmilestone") - .setDefaultColor(EnumChatFormatting.GOLD) - .setPos(77, 190) - .setSize(50, 30)); - builder.widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.purchasablemilestone") - .setDefaultColor(EnumChatFormatting.GOLD) - .setPos(268, 190) - .setSize(60, 30)); - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND) - .setPos(37, 70) - .setSize(130, 7)) - .widget( - new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND) - .setPos(233, 70) - .setSize(130, 7)) - .widget( - new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND) - .setPos(37, 215) - .setSize(130, 7)) - .widget( - new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND) - .setPos(233, 215) - .setSize(130, 7)); - builder.widget( - new ProgressBar().setProgress(() -> powerMilestonePercentage) - .setDirection(ProgressBar.Direction.RIGHT) - .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RED, 130) - .setSynced(true, false) - .setSize(130, 7) - .setPos(37, 70)) - .widget( - new ProgressBar().setProgress(() -> recipeMilestonePercentage) - .setDirection(ProgressBar.Direction.RIGHT) - .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_PURPLE, 130) - .setSynced(true, false) - .setSize(130, 7) - .setPos(233, 70)) - .widget( - new ProgressBar().setProgress(() -> fuelMilestonePercentage) - .setDirection(ProgressBar.Direction.RIGHT) - .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BLUE, 130) - .setSynced(true, false) - .setSize(130, 7) - .setPos(37, 215)) - .widget( - new ProgressBar().setProgress(() -> structureMilestonePercentage) - .setDirection(ProgressBar.Direction.RIGHT) - .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW, 130) - .setSynced(true, false) - .setSize(130, 7) - .setPos(233, 215)) - .widget( - new ProgressBar().setProgress(() -> invertedPowerMilestonePercentage) - .setDirection(ProgressBar.Direction.LEFT) - .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RED_INVERTED, 130) - .setSynced(true, false) - .setSize(130, 7) - .setPos(37, 70)) - .widget( - new ProgressBar().setProgress(() -> invertedRecipeMilestonePercentage) - .setDirection(ProgressBar.Direction.LEFT) - .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_PURPLE_INVERTED, 130) - .setSynced(true, false) - .setSize(130, 7) - .setPos(233, 70)) - .widget( - new ProgressBar().setProgress(() -> invertedFuelMilestonePercentage) - .setDirection(ProgressBar.Direction.LEFT) - .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BLUE_INVERTED, 130) - .setSynced(true, false) - .setSize(130, 7) - .setPos(37, 215)) - .widget( - new ProgressBar().setProgress(() -> invertedStructureMilestonePercentage) - .setDirection(ProgressBar.Direction.LEFT) - .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW_INVERTED, 130) - .setSynced(true, false) - .setSize(130, 7) - .setPos(233, 215)) - .widget( - ButtonWidget.closeWindowButton(true) - .setPos(382, 6)); - return builder.build(); - } - - protected ModularWindow createIndividualMilestoneWindow(final EntityPlayer player) { - final int WIDTH = 150; - final int HEIGHT = 150; - int symbol_width; - int symbol_height; - String milestoneType; - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - UITexture symbol; - switch (currentMilestoneID) { - case 1 -> { - symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION; - symbol_width = 54; - symbol_height = 75; - milestoneType = "recipe"; - } - case 2 -> { - symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST; - symbol_width = 75; - symbol_height = 75; - milestoneType = "fuel"; - } - case 3 -> { - symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION; - symbol_width = 75; - symbol_height = 75; - milestoneType = "purchasable"; - } - default -> { - symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE; - symbol_width = 60; - symbol_height = 75; - milestoneType = "power"; - } - } - - builder.setBackground(TecTechUITextures.BACKGROUND_GLOW_WHITE); - builder.setDraggable(true); - builder.widget( - ButtonWidget.closeWindowButton(true) - .setPos(134, 4)) - .widget( - new DrawableWidget().setDrawable(symbol) - .setSize(symbol_width, symbol_height) - .setPos((WIDTH - symbol_width) / 2, (HEIGHT - symbol_height) / 2)) - .widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG." + milestoneType + "milestone") - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.Center) - .setPos(0, 8) - .setSize(150, 15)) - .widget( - TextWidget.dynamicText(this::inversionStatusText) - .setDefaultColor(EnumChatFormatting.AQUA) - .setTextAlignment(Alignment.Center) - .setScale(0.8f) - .setPos(0, 120) - .setSize(150, 15)) - .widget( - TextWidget.dynamicText(() -> totalMilestoneProgress(currentMilestoneID)) - .setScale(0.7f) - .setDefaultColor(EnumChatFormatting.WHITE) - .setTextAlignment(Alignment.Center) - .setPos(5, 30) - .setSize(140, 30)) - .widget( - TextWidget.dynamicText(() -> currentMilestone(currentMilestoneID)) - .setScale(0.7f) - .setDefaultColor(EnumChatFormatting.WHITE) - .setTextAlignment(Alignment.Center) - .setPos(5, 50) - .setSize(140, 30)) - .widget( - TextWidget.dynamicText(() -> milestoneProgressText(currentMilestoneID, true)) - .setScale(0.7f) - .setDefaultColor(EnumChatFormatting.WHITE) - .setSize(140, 30) - .setPos(5, 70)) - .widget( - TextWidget.dynamicText(() -> gravitonShardAmountText(currentMilestoneID)) - .setScale(0.7f) - .setDefaultColor(EnumChatFormatting.WHITE) - .setSize(140, 30) - .setPos(5, 90)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - if (clickData.mouseButton == 0) { - noFormatting = !noFormatting; - } - }) - .setSize(10, 10) - .addTooltip(translateToLocal("fog.button.formatting.tooltip")) - .setBackground(TecTechUITextures.OVERLAY_CYCLIC_BLUE) - .setPos(5, 135) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer(() -> noFormatting, val -> noFormatting = val), - builder)); - - return builder.build(); - } - - private int currentMilestoneID = 0; - - private Widget createMilestoneButton(int milestoneID, int width, int height, Pos2d pos) { - return new ButtonWidget().setOnClick((clickData, widget) -> { - currentMilestoneID = milestoneID; - if (!widget.isClient()) { - widget.getContext() - .openSyncedWindow(INDIVIDUAL_MILESTONE_WINDOW_ID); - } - }) - .setSize(width, height) - .setBackground(() -> switch (milestoneID) { - case 1 -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION_GLOW }; - case 2 -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST_GLOW }; - case 3 -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION_GLOW }; - default -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE_GLOW }; - }) - .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.milestoneinfo")) - .setPos(pos) - .setTooltipShowUpDelay(TOOLTIP_DELAY); - } - - private int currentUpgradeID = 0; - private int currentColorCode = 0; - private int currentMilestoneBG = 0; - private int gravitonShardCost = 0; - private int[] prereqUpgrades = new int[] {}; - private int[] followupUpgrades = new int[] {}; - private boolean allPrereqRequired = false; - private boolean isUpradeSplitStart = false; - private boolean doesCurrentUpgradeRequireExtraMats = false; - private boolean[] upgrades = new boolean[31]; - private boolean[] materialPaidUpgrades = new boolean[7]; - - protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { - final Scrollable scrollable = new Scrollable().setVerticalScroll(); - final int PARENT_WIDTH = 300; - final int PARENT_HEIGHT = 300; - ModularWindow.Builder builder = ModularWindow.builder(PARENT_WIDTH, PARENT_HEIGHT); - scrollable - .widget( - createUpgradeBox( - 0, - 0, - 3, - new int[] {}, - false, - new int[] { 1 }, - false, - true, - 0, - new Pos2d(126, 56), - scrollable)) - .widget( - createUpgradeBox( - 1, - 0, - 1, - new int[] { 0 }, - false, - new int[] { 2, 3 }, - false, - false, - 1, - new Pos2d(126, 116), - scrollable)) - .widget( - createUpgradeBox( - 2, - 0, - 2, - new int[] { 1 }, - false, - new int[] { 4, 5 }, - false, - false, - 1, - new Pos2d(96, 176), - scrollable)) - .widget( - createUpgradeBox( - 3, - 0, - 2, - new int[] { 1 }, - false, - new int[] { 5, 6 }, - false, - false, - 1, - new Pos2d(156, 176), - scrollable)) - .widget( - createUpgradeBox( - 4, - 0, - 0, - new int[] { 2 }, - false, - new int[] { 8 }, - false, - false, - 1, - new Pos2d(66, 236), - scrollable)) - .widget( - createUpgradeBox( - 5, - 0, - 3, - new int[] { 2, 3 }, - false, - new int[] { 7 }, - false, - true, - 1, - new Pos2d(126, 236), - scrollable)) - .widget( - createUpgradeBox( - 6, - 0, - 1, - new int[] { 3 }, - false, - new int[] { 10 }, - false, - false, - 1, - new Pos2d(186, 236), - scrollable)) - .widget( - createUpgradeBox( - 7, - 0, - 3, - new int[] { 5 }, - false, - new int[] { 8, 9, 10 }, - false, - true, - 2, - new Pos2d(126, 296), - scrollable)) - .widget( - createUpgradeBox( - 8, - 0, - 0, - new int[] { 4, 7 }, - true, - new int[] { 11 }, - false, - false, - 2, - new Pos2d(56, 356), - scrollable)) - .widget( - createUpgradeBox( - 9, - 0, - 2, - new int[] { 7 }, - false, - new int[] {}, - false, - false, - 2, - new Pos2d(126, 356), - scrollable)) - .widget( - createUpgradeBox( - 10, - 0, - 1, - new int[] { 6, 7 }, - true, - new int[] { 11 }, - false, - false, - 2, - new Pos2d(196, 356), - scrollable)) - .widget( - createUpgradeBox( - 11, - 0, - 3, - new int[] { 8, 10 }, - false, - new int[] { 12, 13, 14 }, - false, - true, - 2, - new Pos2d(126, 416), - scrollable)) - .widget( - createUpgradeBox( - 12, - 1, - 2, - new int[] { 11 }, - false, - new int[] { 17 }, - true, - false, - 3, - new Pos2d(66, 476), - scrollable)) - .widget( - createUpgradeBox( - 13, - 2, - 1, - new int[] { 11 }, - false, - new int[] { 18 }, - true, - false, - 3, - new Pos2d(126, 476), - scrollable)) - .widget( - createUpgradeBox( - 14, - 3, - 0, - new int[] { 11 }, - false, - new int[] { 15, 19 }, - true, - false, - 3, - new Pos2d(186, 476), - scrollable)) - .widget( - createUpgradeBox( - 15, - 3, - 1, - new int[] { 14 }, - false, - new int[] {}, - false, - false, - 4, - new Pos2d(246, 496), - scrollable)) - .widget( - createUpgradeBox( - 16, - 1, - 1, - new int[] { 17 }, - false, - new int[] {}, - false, - false, - 4, - new Pos2d(6, 556), - scrollable)) - .widget( - createUpgradeBox( - 17, - 1, - 0, - new int[] { 12 }, - false, - new int[] { 16, 20 }, - false, - false, - 3, - new Pos2d(66, 536), - scrollable)) - .widget( - createUpgradeBox( - 18, - 2, - 1, - new int[] { 13 }, - false, - new int[] { 21 }, - false, - false, - 3, - new Pos2d(126, 536), - scrollable)) - .widget( - createUpgradeBox( - 19, - 3, - 0, - new int[] { 14 }, - false, - new int[] { 22 }, - false, - false, - 3, - new Pos2d(186, 536), - scrollable)) - .widget( - createUpgradeBox( - 20, - 1, - 0, - new int[] { 17 }, - false, - new int[] { 23 }, - false, - false, - 3, - new Pos2d(66, 596), - scrollable)) - .widget( - createUpgradeBox( - 21, - 2, - 1, - new int[] { 18 }, - false, - new int[] { 23 }, - false, - false, - 3, - new Pos2d(126, 596), - scrollable)) - .widget( - createUpgradeBox( - 22, - 3, - 1, - new int[] { 19 }, - false, - new int[] { 23 }, - false, - false, - 3, - new Pos2d(186, 596), - scrollable)) - .widget( - createUpgradeBox( - 23, - 0, - 0, - new int[] { 20, 21, 22 }, - false, - new int[] { 24 }, - false, - false, - 4, - new Pos2d(126, 656), - scrollable)) - .widget( - createUpgradeBox( - 24, - 0, - 1, - new int[] { 23 }, - false, - new int[] { 25 }, - false, - false, - 5, - new Pos2d(126, 718), - scrollable)) - .widget( - createUpgradeBox( - 25, - 0, - 1, - new int[] { 24 }, - false, - new int[] { 26 }, - false, - false, - 6, - new Pos2d(36, 758), - scrollable)) - .widget( - createUpgradeBox( - 26, - 0, - 3, - new int[] { 25 }, - false, - new int[] { 27 }, - false, - true, - 7, - new Pos2d(36, 848), - scrollable)) - .widget( - createUpgradeBox( - 27, - 0, - 2, - new int[] { 26 }, - false, - new int[] { 28 }, - false, - false, - 8, - new Pos2d(126, 888), - scrollable)) - .widget( - createUpgradeBox( - 28, - 0, - 0, - new int[] { 27 }, - false, - new int[] { 29 }, - false, - false, - 9, - new Pos2d(216, 848), - scrollable)) - .widget( - createUpgradeBox( - 29, - 0, - 3, - new int[] { 28 }, - false, - new int[] { 30 }, - false, - true, - 10, - new Pos2d(216, 758), - scrollable)) - .widget( - createUpgradeBox( - 30, - 0, - 3, - new int[] { 29 }, - false, - new int[] {}, - false, - true, - 12, - new Pos2d(126, 798), - scrollable)) - .widget(new TextWidget("").setPos(0, 945)); - - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_STAR) - .setPos(0, 0) - .setSize(300, 300)) - .widget( - scrollable.setSize(292, 292) - .setPos(4, 4)) - .widget( - ButtonWidget.closeWindowButton(true) - .setPos(282, 4)); - if (debugMode) { - builder.widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { - upgrades = new boolean[31]; - materialPaidUpgrades = new boolean[7]; - }) - .setSize(40, 15) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .addTooltip(translateToLocal("fog.debug.resetbutton.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .addChild( - new TextWidget(translateToLocal("fog.debug.resetbutton.text")).setTextAlignment(Alignment.Center) - .setScale(0.57f) - .setMaxWidth(36) - .setPos(3, 3)) - .addChild( - new NumericWidget().setSetter(val -> gravitonShardsAvailable = (int) val) - .setGetter(() -> gravitonShardsAvailable) - .setBounds(0, 112) - .setDefaultValue(0) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(25, 18) - .setPos(4, 16) - .addTooltip(translateToLocal("fog.debug.gravitonshardsetter.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)) - .addChild( - new ButtonWidget().setOnClick((clickData, widget) -> Arrays.fill(upgrades, true)) - .setSize(40, 15) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .addTooltip(translateToLocal("fog.debug.unlockall.text")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(0, 35)) - .addChild( - new TextWidget(translateToLocal("fog.debug.unlockall.text")).setTextAlignment(Alignment.Center) - .setScale(0.57f) - .setMaxWidth(36) - .setPos(3, 38)) - .setPos(4, 4)); - - } - return builder.build(); - } - - protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) { - UITexture background; - UITexture overlay; - UITexture milestoneSymbol; - float widthRatio; - switch (currentColorCode) { - case 1 -> { - background = TecTechUITextures.BACKGROUND_GLOW_PURPLE; - overlay = TecTechUITextures.PICTURE_OVERLAY_PURPLE; - } - case 2 -> { - background = TecTechUITextures.BACKGROUND_GLOW_ORANGE; - overlay = TecTechUITextures.PICTURE_OVERLAY_ORANGE; - } - case 3 -> { - background = TecTechUITextures.BACKGROUND_GLOW_GREEN; - overlay = TecTechUITextures.PICTURE_OVERLAY_GREEN; - } - default -> { - background = TecTechUITextures.BACKGROUND_GLOW_BLUE; - overlay = TecTechUITextures.PICTURE_OVERLAY_BLUE; - } - } - switch (currentMilestoneBG) { - case 1 -> { - milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION; - widthRatio = 0.72f; - } - case 2 -> { - milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST; - widthRatio = 1f; - } - case 3 -> { - milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION; - widthRatio = 1f; - } - default -> { - milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE; - widthRatio = 0.8f; - } - } - int WIDTH = 250; - int HEIGHT = 250; - int LORE_POS = 110; - if (currentUpgradeID == 0 || currentUpgradeID == 30) { - WIDTH = 300; - HEIGHT = 300; - LORE_POS = 85; - } - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT) - .setBackground(background) - .widget( - ButtonWidget.closeWindowButton(true) - .setPos(WIDTH - 15, 3)) - .widget( - new DrawableWidget().setDrawable(milestoneSymbol) - .setPos((int) ((1 - widthRatio / 2) * WIDTH / 2), HEIGHT / 4) - .setSize((int) (WIDTH / 2 * widthRatio), HEIGHT / 2)) - .widget( - new DrawableWidget().setDrawable(overlay) - .setPos(WIDTH / 4, HEIGHT / 4) - .setSize(WIDTH / 2, HEIGHT / 2)) - .widget( - new MultiChildWidget() - .addChild( - new TextWidget(translateToLocal("fog.upgrade.tt." + (currentUpgradeID))) - .setTextAlignment(Alignment.Center) - .setDefaultColor(EnumChatFormatting.GOLD) - .setSize(WIDTH - 15, 30) - .setPos(9, 5)) - .addChild( - new TextWidget(translateToLocal("fog.upgrade.text." + (currentUpgradeID))) - .setTextAlignment(Alignment.CenterLeft) - .setDefaultColor(EnumChatFormatting.WHITE) - .setSize(WIDTH - 15, LORE_POS - 30) - .setPos(9, 30)) - .addChild( - new TextWidget( - EnumChatFormatting.ITALIC + translateToLocal("fog.upgrade.lore." + (currentUpgradeID))) - .setTextAlignment(Alignment.Center) - .setDefaultColor(0xbbbdbd) - .setSize(WIDTH - 15, (int) (HEIGHT * 0.9) - LORE_POS) - .setPos(9, LORE_POS)) - .addChild( - new TextWidget( - translateToLocal("gt.blockmachines.multimachine.FOG.shardcost") + " " - + EnumChatFormatting.BLUE - + gravitonShardCost).setTextAlignment(Alignment.Center) - .setScale(0.7f) - .setMaxWidth(70) - .setDefaultColor(0x9c9c9c) - .setPos(11, HEIGHT - 25)) - .addChild( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.availableshards")) - .setTextAlignment(Alignment.Center) - .setScale(0.7f) - .setMaxWidth(90) - .setDefaultColor(0x9c9c9c) - .setPos(WIDTH - 87, HEIGHT - 25)) - .addChild( - TextWidget.dynamicText(this::gravitonShardAmount) - .setTextAlignment(Alignment.Center) - .setScale(0.7f) - .setMaxWidth(90) - .setDefaultColor(0x9c9c9c) - .setPos(WIDTH - 27, HEIGHT - 18))) - .setSize(WIDTH, HEIGHT) - - .widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { - int unlockedPrereqUpgrades = 0; - int unlockedFollowupUpgrades = 0; - int unlockedSplitUpgrades = 0; - if (!upgrades[currentUpgradeID]) { - for (int prereqUpgrade : prereqUpgrades) { - if (upgrades[prereqUpgrade]) { - unlockedPrereqUpgrades++; - } - } - if (!doesCurrentUpgradeRequireExtraMats - || materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) - .indexOf(currentUpgradeID)]) { - if (allPrereqRequired) { - if (unlockedPrereqUpgrades == prereqUpgrades.length - && gravitonShardsAvailable >= gravitonShardCost) { - gravitonShardsAvailable -= gravitonShardCost; - gravitonShardsSpent += gravitonShardCost; - upgrades[currentUpgradeID] = true; - } - } else if (unlockedPrereqUpgrades > 0 || prereqUpgrades.length == 0) { - if (isUpradeSplitStart) { - for (int splitUpgrade : FIRST_SPLIT_UPGRADES) { - if (upgrades[splitUpgrade]) { - unlockedSplitUpgrades++; - } - } - unlockedSplitUpgrades -= (ringAmount - 1); - } - if (unlockedSplitUpgrades <= 0 && gravitonShardsAvailable >= gravitonShardCost) { - gravitonShardsAvailable -= gravitonShardCost; - gravitonShardsSpent += gravitonShardCost; - upgrades[currentUpgradeID] = true; - } - } - } - } else { - for (int followupUpgrade : followupUpgrades) { - if (upgrades[followupUpgrade]) { - unlockedFollowupUpgrades++; - } - } - if (unlockedFollowupUpgrades == 0) { - gravitonShardsAvailable += gravitonShardCost; - gravitonShardsSpent -= gravitonShardCost; - upgrades[currentUpgradeID] = false; - } - } - }) - .setSize(40, 15) - .setBackground(() -> { - if (upgrades[currentUpgradeID]) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED }; - } else { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD }; - } - }) - .addTooltip(translateToLocal("fog.upgrade.confirm")) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .addChild( - new TextWidget(translateToLocal("fog.upgrade.confirm")).setTextAlignment(Alignment.Center) - .setScale(0.7f) - .setMaxWidth(36) - .setPos(3, 5)) - .setPos(WIDTH / 2 - 21, (int) (HEIGHT * 0.9))); - if (Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) - .contains(currentUpgradeID)) { - builder.widget(createMaterialInputButton(currentUpgradeID, WIDTH / 2 - 40, (int) (HEIGHT * 0.9), builder)); - } - return builder.build(); - } - - private Widget createMaterialInputButton(int upgradeID, int xCoord, int yCoord, IWidgetBuilder builder) { - return new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient() && doesCurrentUpgradeRequireExtraMats) { - widget.getContext() - .openSyncedWindow(MANUAL_INSERTION_WINDOW_ID); - widget.getContext() - .closeWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); - widget.getContext() - .closeWindow(UPGRADE_TREE_WINDOW_ID); - } - }) - .setPlayClickSound(doesCurrentUpgradeRequireExtraMats) - .setBackground(() -> { - if (doesCurrentUpgradeRequireExtraMats) { - if (materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) - .indexOf(upgradeID)]) { - return new IDrawable[] { TecTechUITextures.BUTTON_BOXED_CHECKMARK_18x18 }; - } else { - return new IDrawable[] { TecTechUITextures.BUTTON_BOXED_EXCLAMATION_POINT_18x18 }; - } - } else { - return new IDrawable[] { GT_UITextures.TRANSPARENT }; - } - }) - .setPos(xCoord, yCoord) - .setSize(15, 15) - .dynamicTooltip(this::upgradeMaterialRequirements) - .addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.materialrequirements.tooltip.clickhere")) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer( - () -> materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) - .indexOf(upgradeID)], - val -> materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) - .indexOf(upgradeID)] = val), - builder); - } - - /** - * @param upgradeID ID of the upgrade - * @param colorCode Number deciding which colored background to use, 0 for blue, 1 for purple, 2 for - * orange and 3 for green - * @param milestone Number deciding which milestone symbol to display in the background, 0 for charge, - * 1 for conversion, 2 for catalyst and 3 for composition - * @param prerequisiteUpgradeIDs IDs of the prior upgrades directly connected to the current one - * @param requireAllPrerequisites Decides how many connected prerequisite upgrades have to be unlocked to be able to - * unlock this one. True means ALL, False means AT LEAST ONE - * @param followingUpgradeIDs IDs of the following upgrades directly connected to the current one - * @param isStartOfSplit Whether this upgrade is one of the initial split upgrades - * @param requiresExtraMaterials Whether this upgrade requires materials other than graviton shards to unlock - * @param shardCost How many graviton shards are needed to unlock this upgrade - * @param pos Position of the upgrade inside the scrollableWidget - */ - private Widget createUpgradeBox(int upgradeID, int colorCode, int milestone, int[] prerequisiteUpgradeIDs, - boolean requireAllPrerequisites, int[] followingUpgradeIDs, boolean isStartOfSplit, - boolean requiresExtraMaterials, int shardCost, Pos2d pos, IWidgetBuilder builder) { - return new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { - currentUpgradeID = upgradeID; - currentColorCode = colorCode; - currentMilestoneBG = milestone; - gravitonShardCost = shardCost; - prereqUpgrades = prerequisiteUpgradeIDs; - allPrereqRequired = requireAllPrerequisites; - followupUpgrades = followingUpgradeIDs; - isUpradeSplitStart = isStartOfSplit; - doesCurrentUpgradeRequireExtraMats = requiresExtraMaterials; - if (!widget.isClient()) widget.getContext() - .openSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); - }) - .setSize(40, 15) - .setBackground(() -> { - if (upgrades[upgradeID]) { - return new IDrawable[] { TecTechUITextures.BUTTON_SPACE_PRESSED_32x16 }; - } else { - return new IDrawable[] { TecTechUITextures.BUTTON_SPACE_32x16 }; - } - }) - .addTooltip(translateToLocal("fog.upgrade.tt." + upgradeID)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .addChild( - new TextWidget(translateToLocal("fog.upgrade.tt.short." + upgradeID)).setScale(0.8f) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.Center) - .setSize(34, 9) - .setPos(3, 4)) - .setPos(pos) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer(() -> upgrades[upgradeID], val -> upgrades[upgradeID] = val), - builder); - } - - protected ModularWindow createManualInsertionWindow(final EntityPlayer player) { - ItemStack[] inputs = godforgeUpgradeMats.get(currentUpgradeID); - final int WIDTH = 189; - final int HEIGHT = 106; - final int PARENT_WIDTH = getGUIWidth(); - final int PARENT_HEIGHT = getGUIHeight(); - final MultiChildWidget columns = new MultiChildWidget(); - final DynamicPositionedColumn column1 = new DynamicPositionedColumn(); - final DynamicPositionedColumn column2 = new DynamicPositionedColumn(); - final DynamicPositionedColumn column3 = new DynamicPositionedColumn(); - final DynamicPositionedColumn column4 = new DynamicPositionedColumn(); - final DynamicPositionedColumn column5 = new DynamicPositionedColumn(); - final DynamicPositionedColumn column6 = new DynamicPositionedColumn(); - List columnList = Arrays.asList(column1, column2, column3, column4, column5, column6); - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.setDraggable(true); - builder.setPos( - (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) - .add(Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT))) - .subtract(5, 0) - .add(0, 4)); - builder.widget( - SlotGroup.ofItemHandler(inputSlotHandler, 4) - .startFromSlot(0) - .endAtSlot(15) - .phantom(false) - .background(getGUITextureSet().getItemSlot()) - .build() - .setPos(112, 6)); - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient()) { - widget.getWindow() - .closeWindow(); - widget.getContext() - .openSyncedWindow(UPGRADE_TREE_WINDOW_ID); - widget.getContext() - .openSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); - } - }) - .setBackground(ModularUITextures.VANILLA_BACKGROUND, new Text("x")) - .setPos(179, 0) - .setSize(10, 10)); - builder.widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient()) { - ArrayList list = new ArrayList<>(inputSlotHandler.getStacks()); - list.removeIf(Objects::isNull); - int foundInputs = 0; - int[] foundInputIndices = new int[inputs.length]; - for (ItemStack inputStack : list) { - for (ItemStack requiredStack : inputs) { - if (ItemStack.areItemStacksEqual(requiredStack, inputStack)) { - foundInputIndices[foundInputs] = inputSlotHandler.getStacks() - .indexOf(inputStack); - foundInputs++; - } - } - } - if (foundInputs == inputs.length) { - for (int index : foundInputIndices) { - inputSlotHandler.extractItem(index, inputSlotHandler.getStackInSlot(index).stackSize, false); - } - materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) - .indexOf(currentUpgradeID)] = true; - } - } - }) - .setPlayClickSound(true) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .setSize(179, 18)) - .addChild( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.consumeUpgradeMats")) - .setTextAlignment(Alignment.Center) - .setScale(0.75f) - .setPos(0, 1) - .setSize(179, 18)) - .setPos(5, 82) - .setSize(179, 16)); - - int uniqueItems = inputs.length; - for (int i = 0; i < 12; i++) { - int index = i; - int cleanDiv4 = index / 4; - if (i < uniqueItems) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.BUTTON_STANDARD_PRESSED) - .setPos(5 + cleanDiv4 * 36, 6 + index % 4 * 18) - .setSize(18, 18)); - columnList.get(cleanDiv4) - .addChild( - new ItemDrawable().setItem(inputs[index]) - .asWidget() - .dynamicTooltip(() -> { - List tooltip = new ArrayList<>(); - tooltip.add(inputs[index] != null ? inputs[index].getDisplayName() : ""); - return tooltip; - }) - .setSize(16, 16)); - columnList.get(cleanDiv4 + 3) - .addChild( - new TextWidget("x" + inputs[i].stackSize).setTextAlignment(Alignment.CenterLeft) - .setScale(0.8f) - .setSize(18, 8)); - } else { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.BUTTON_STANDARD_DISABLED) - .setPos(5 + cleanDiv4 * 36, 6 + index % 4 * 18) - .setSize(18, 18)); - } - } - - int counter = 0; - for (DynamicPositionedColumn column : columnList) { - int spacing = 2; - int xCord = 1 + counter * 36; - int yCord = 1; - if (counter > 2) { - spacing = 10; - xCord = 19 + (counter - 3) * 36; - yCord = 5; - } - columns.addChild( - column.setSpace(spacing) - .setAlignment(MainAxisAlignment.SPACE_BETWEEN) - .setSize(16, 72) - .setPos(xCord, yCord)); - counter++; - } - - builder.widget( - columns.setSize(108, 72) - .setPos(5, 6)); - - return builder.build(); - } - - protected ModularWindow createGeneralInfoWindow(final EntityPlayer player) { - final Scrollable scrollable = new Scrollable().setVerticalScroll(); - final int WIDTH = 300; - final int HEIGHT = 300; - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - - builder.setDraggable(true); - scrollable.widget( - new TextWidget(EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.introduction")) - .setDefaultColor(EnumChatFormatting.DARK_PURPLE) - .setTextAlignment(Alignment.TopCenter) - .setPos(7, 13) - .setSize(280, 15)) - .widget( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.introductioninfotext")) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 30) - .setSize(280, 50)) - .widget( - new TextWidget( - EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.tableofcontents")) - .setDefaultColor(EnumChatFormatting.AQUA) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 80) - .setSize(150, 15)) - .widget( - new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(150)) - .setBackground( - new Text(EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.fuel")) - .alignment(Alignment.CenterLeft) - .color(0x55ffff)) - .setPos(7, 95) - .setSize(150, 15)) - .widget( - new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(434)) - .setBackground( - new Text( - EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.modules")) - .alignment(Alignment.CenterLeft) - .color(0x55ffff)) - .setPos(7, 110) - .setSize(150, 15)) - .widget( - new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(1088)) - .setBackground( - new Text( - EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.upgrades")) - .alignment(Alignment.CenterLeft) - .color(0x55ffff)) - .setPos(7, 125) - .setSize(150, 15)) - .widget( - new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(1412)) - .setBackground( - new Text( - EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.milestones")) - .alignment(Alignment.CenterLeft) - .color(0x55ffff)) - .setPos(7, 140) - .setSize(150, 15)) - .widget( - TextWidget.dynamicText(this::inversionHeaderText) - .setDefaultColor(EnumChatFormatting.WHITE) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 155) - .setSize(150, 15)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (inversion) { - scrollable.setVerticalScrollOffset(1766); - } - }) - .setPlayClickSound(inversion) - .setPos(7, 155) - .setSize(150, 15) - .attachSyncer(new FakeSyncWidget.BooleanSyncer(() -> inversion, (val) -> inversion = val), scrollable)) - .widget( - new TextWidget( - EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.fuel")) - .setDefaultColor(EnumChatFormatting.DARK_PURPLE) - .setTextAlignment(Alignment.TopCenter) - .setPos(127, 160) - .setSize(40, 15)) - .widget( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfotext")) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 177) - .setSize(280, 250)) - .widget( - new TextWidget( - EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.modules")) - .setDefaultColor(EnumChatFormatting.DARK_PURPLE) - .setTextAlignment(Alignment.TopCenter) - .setPos(7, 440) - .setSize(280, 15)) - .widget( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.moduleinfotext")) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 461) - .setSize(280, 620)) - .widget( - new TextWidget( - EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.upgrades")) - .setDefaultColor(EnumChatFormatting.DARK_PURPLE) - .setTextAlignment(Alignment.TopCenter) - .setPos(7, 1098) - .setSize(280, 15)) - .widget( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.upgradeinfotext")) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 1115) - .setSize(280, 290)) - .widget( - new TextWidget( - EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.milestones")) - .setDefaultColor(EnumChatFormatting.DARK_PURPLE) - .setTextAlignment(Alignment.TopCenter) - .setPos(7, 1422) - .setSize(280, 15)) - .widget( - new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.milestoneinfotext")) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 1439) - .setSize(280, 320)) - .widget( - TextWidget.dynamicText(this::inversionHeaderText) - .setDefaultColor(EnumChatFormatting.WHITE) - .setTextAlignment(Alignment.TopCenter) - .setPos(7, 1776) - .setSize(280, 15)) - .widget( - TextWidget.dynamicText(this::inversionInfoText) - .setDefaultColor(EnumChatFormatting.GOLD) - .setTextAlignment(Alignment.CenterLeft) - .setPos(7, 1793) - .setSize(280, 160)) - .widget( - new TextWidget("").setPos(7, 1965) - .setSize(10, 10)); - - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_GLOW_WHITE) - .setPos(0, 0) - .setSize(300, 300)) - .widget( - scrollable.setSize(292, 292) - .setPos(4, 4)) - .widget( - ButtonWidget.closeWindowButton(true) - .setPos(284, 4)); - - return builder.build(); - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Stellar Forge") - .addInfo(EnumChatFormatting.ITALIC + "Also known as Godforge or Gorge for short.") - .addInfo(TOOLTIP_BAR) - .addInfo("Controller block for the Godforge, a massive structure harnessing the thermal,") - .addInfo("gravitational and kinetic energy of a stabilised neutron star for material processing.") - .addInfo( - "This multiblock can house " + EnumChatFormatting.RED - + "up to 16 modules " - + EnumChatFormatting.GRAY - + "which utilize the star to energize materials") - .addInfo("to varying degrees, ranging from regular smelting to matter degeneration.") - .addInfo(TOOLTIP_BAR) - .addInfo( - "This multiblock has an " + EnumChatFormatting.GOLD - + "extensive upgrade tree " - + EnumChatFormatting.GRAY - + "which influences all of its functions,") - .addInfo( - "such as " + EnumChatFormatting.GOLD - + "unlocking new module types, increasing heat levels " - + EnumChatFormatting.GRAY - + "and " - + EnumChatFormatting.GOLD - + "granting") - .addInfo( - EnumChatFormatting.GOLD + "various processing speed bonuses. " - + EnumChatFormatting.GRAY - + "These upgrades can be unlocked by reaching") - .addInfo("certain milestones and/or spending materials.") - .addInfo(TOOLTIP_BAR) - .addInfo( - EnumChatFormatting.GREEN - + "Clicking on the logo in the controller gui opens an extensive information window,") - .addInfo("explaining everything there is to know about this multiblock.") - .addInfo(TOOLTIP_BAR) - .beginStructureBlock(126, 29, 186, false) - .addStructureInfo("The structure is too complex! See schematic for details.") - .addStructureInfo( - "Total blocks needed for the structure with " + EnumChatFormatting.DARK_PURPLE - + "1" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.DARK_GREEN - + "2" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.AQUA - + "3" - + EnumChatFormatting.GRAY - + " rings:") - .addStructureInfo( - EnumChatFormatting.DARK_PURPLE + "3943" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.DARK_GREEN - + "7279" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.AQUA - + "11005" - + EnumChatFormatting.GRAY - + " Transcendentally Amplified Magnetic Confinement Casing") - .addStructureInfo( - EnumChatFormatting.DARK_PURPLE + "2819" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.DARK_GREEN - + "4831" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.AQUA - + "6567" - + EnumChatFormatting.GRAY - + " Singularity Reinforced Stellar Shielding Casing") - .addStructureInfo( - EnumChatFormatting.DARK_PURPLE + "272" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.DARK_GREEN - + "512" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.AQUA - + "824" - + EnumChatFormatting.GRAY - + " Celestial Matter Guidance Casing") - .addStructureInfo( - EnumChatFormatting.DARK_PURPLE + "130" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.DARK_GREEN - + "144" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.AQUA - + "158" - + EnumChatFormatting.GRAY - + " Boundless Gravitationally Severed Structure Casing") - .addStructureInfo( - EnumChatFormatting.DARK_PURPLE + "9" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.DARK_GREEN - + "54" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.AQUA - + "155" - + EnumChatFormatting.GRAY - + " Spatially Transcendent Gravitational Lens Block") - .addStructureInfo( - EnumChatFormatting.DARK_PURPLE + "345" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.DARK_GREEN - + "357" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.AQUA - + "397" - + EnumChatFormatting.DARK_PURPLE - + " Remote" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.DARK_GREEN - + "Medial" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.AQUA - + "Central" - + EnumChatFormatting.GRAY - + " Graviton Flow Modulator") - .addStructureInfo( - EnumChatFormatting.GOLD + "36" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") - .addStructureInfo("--------------------------------------------") - .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " Input Hatch") - .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " Output Bus") - .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " Input Bus") - .addStructureInfo("--------------------------------------------") - .toolTipFinisher(CommonValues.GODFORGE_MARK); - return tt; - } - - @Override - public boolean energyFlowOnRunningTick(ItemStack aStack, boolean allowProduction) { - return true; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return new String[] { EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", - translateToLocal("gt.blockmachines.multimachine.FOG.hint.0"), - translateToLocal("gt.blockmachines.multimachine.FOG.hint.1") }; - } - - public int getFuelType() { - return selectedFuelType; - } - - private void setFuelType(int fuelType) { - selectedFuelType = fuelType; - } - - public int getFuelFactor() { - return fuelConsumptionFactor; - } - - public boolean isUpgradeActive(int upgradeID) { - return upgrades[upgradeID]; - } - - public int getRingAmount() { - return ringAmount; - } - - public int getTotalActiveUpgrades() { - int totalUpgrades = 0; - for (boolean upgrade : upgrades) { - if (upgrade) { - totalUpgrades++; - } - } - return totalUpgrades; - } - - private Text fuelUsage() { - return new Text(fuelConsumption + " L/5s"); - } - - private Text gravitonShardAmount() { - EnumChatFormatting enoughGravitonShards = EnumChatFormatting.RED; - if (gravitonShardsAvailable >= gravitonShardCost) { - enoughGravitonShards = EnumChatFormatting.GREEN; - } - return new Text(enoughGravitonShards + Integer.toString(gravitonShardsAvailable)); - - } - - private Text storedFuel() { - if (internalBattery == 0) { - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.storedstartupfuel") + " " - + stellarFuelAmount - + "/" - + neededStartupFuel); - } - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.storedfuel") + " " - + internalBattery - + "/" - + maxBatteryCharge); - } - - private void checkInversionStatus() { - int inversionChecker = 0; - for (int progress : milestoneProgress) { - if (progress < 7) { - break; - } - inversionChecker++; - } - inversion = inversionChecker == 4; - } - - private Text inversionStatusText() { - String inversionStatus = ""; - if (inversion) { - inversionStatus = EnumChatFormatting.BOLD - + translateToLocal("gt.blockmachines.multimachine.FOG.inversionactive"); - } - return new Text(inversionStatus); - } - - private void determineCompositionMilestoneLevel() { - int[] uniqueModuleCount = new int[5]; - int smelting = 0; - int molten = 0; - int plasma = 0; - int exotic = 0; - int exoticMagmatter = 0; - for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { - if (module instanceof GT_MetaTileEntity_EM_SmeltingModule) { - uniqueModuleCount[0] = 1; - smelting++; - continue; - } - if (module instanceof GT_MetaTileEntity_EM_MoltenModule) { - uniqueModuleCount[1] = 1; - molten++; - continue; - } - if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) { - uniqueModuleCount[2] = 1; - plasma++; - continue; - } - if (module instanceof GT_MetaTileEntity_EM_ExoticModule) { - if (!((GT_MetaTileEntity_EM_ExoticModule) module).isMagmatterModeOn()) { - uniqueModuleCount[3] = 1; - exotic++; - } else { - uniqueModuleCount[4] = 1; - exoticMagmatter++; - } - } - - } - totalExtensionsBuilt = Arrays.stream(uniqueModuleCount) - .sum() + ringAmount - - 1; - if (inversion) { - totalExtensionsBuilt += (smelting - 1 - + (molten - 1) * 2 - + (plasma - 1) * 3 - + (exotic - 1) * 4 - + (exoticMagmatter - 1) * 5) / 5f; - } - milestoneProgress[3] = (int) Math.floor(totalExtensionsBuilt); - } - - private void determineMilestoneProgress() { - int closestRelevantSeven; - float rawProgress; - float actualProgress; - if (milestoneProgress[0] < 7) { - powerMilestonePercentage = (float) max( - (log((totalPowerConsumed.divide(BigInteger.valueOf(POWER_MILESTONE_CONSTANT))).longValue()) - / POWER_LOG_CONSTANT + 1), - 0) / 7; - milestoneProgress[0] = (int) floor(powerMilestonePercentage * 7); - } - if (inversion) { - rawProgress = (totalPowerConsumed.divide(POWER_MILESTONE_T7_CONSTANT) - .floatValue() - 1) / 7; - closestRelevantSeven = (int) floor(rawProgress); - actualProgress = rawProgress - closestRelevantSeven; - milestoneProgress[0] = 7 + (int) floor(rawProgress * 7); - if (closestRelevantSeven % 2 == 0) { - invertedPowerMilestonePercentage = actualProgress; - powerMilestonePercentage = 1 - invertedPowerMilestonePercentage; - } else { - powerMilestonePercentage = actualProgress; - invertedPowerMilestonePercentage = 1 - powerMilestonePercentage; - } - } - - if (milestoneProgress[1] < 7) { - recipeMilestonePercentage = (float) max( - (log(totalRecipesProcessed * 1f / RECIPE_MILESTONE_CONSTANT) / RECIPE_LOG_CONSTANT + 1), - 0) / 7; - milestoneProgress[1] = (int) floor(recipeMilestonePercentage * 7); - } - if (inversion) { - rawProgress = (((float) totalRecipesProcessed / RECIPE_MILESTONE_T7_CONSTANT) - 1) / 7; - closestRelevantSeven = (int) floor(rawProgress); - actualProgress = rawProgress - closestRelevantSeven; - milestoneProgress[1] = 7 + (int) floor(rawProgress * 7); - if (closestRelevantSeven % 2 == 0) { - invertedRecipeMilestonePercentage = actualProgress; - recipeMilestonePercentage = 1 - invertedRecipeMilestonePercentage; - } else { - recipeMilestonePercentage = actualProgress; - invertedRecipeMilestonePercentage = 1 - recipeMilestonePercentage; - } - } - if (milestoneProgress[2] < 7) { - fuelMilestonePercentage = (float) max( - (log(totalFuelConsumed * 1f / FUEL_MILESTONE_CONSTANT) / FUEL_LOG_CONSTANT + 1), - 0) / 7; - milestoneProgress[2] = (int) floor(fuelMilestonePercentage * 7); - } - if (inversion) { - rawProgress = (((float) totalFuelConsumed / FUEL_MILESTONE_T7_CONSTANT) - 1) / 7; - closestRelevantSeven = (int) floor(rawProgress); - actualProgress = rawProgress - closestRelevantSeven; - milestoneProgress[2] = 7 + (int) floor(rawProgress * 7); - if ((closestRelevantSeven % 2) == 0) { - invertedFuelMilestonePercentage = actualProgress; - fuelMilestonePercentage = 1 - invertedFuelMilestonePercentage; - } else { - fuelMilestonePercentage = actualProgress; - invertedFuelMilestonePercentage = 1 - fuelMilestonePercentage; - } - } - - if (milestoneProgress[3] <= 7) { - structureMilestonePercentage = totalExtensionsBuilt / 7f; - } - if (inversion) { - rawProgress = (totalExtensionsBuilt - 7) / 7f; - closestRelevantSeven = (int) floor(rawProgress); - actualProgress = rawProgress - closestRelevantSeven; - if ((closestRelevantSeven % 2) == 0) { - invertedStructureMilestonePercentage = actualProgress; - structureMilestonePercentage = 1 - invertedStructureMilestonePercentage; - } else { - structureMilestonePercentage = actualProgress; - invertedStructureMilestonePercentage = 1 - structureMilestonePercentage; - } - } - } - - private void determineGravitonShardAmount() { - int sum = 0; - for (int progress : milestoneProgress) { - if (!inversion) { - progress = Math.min(progress, 7); - } - sum += progress * (progress + 1) / 2; - } - gravitonShardsAvailable = sum - gravitonShardsSpent; - } - - private void ejectGravitonShards() { - if (mOutputBusses.size() == 1) { - while (gravitonShardsAvailable >= 64) { - addOutput(GT_OreDictUnificator.get(OrePrefixes.gem, MaterialsUEVplus.GravitonShard, 64)); - gravitonShardsAvailable -= 64; - } - addOutput( - GT_OreDictUnificator.get(OrePrefixes.gem, MaterialsUEVplus.GravitonShard, gravitonShardsAvailable)); - gravitonShardsAvailable = 0; - } - } - - private Text gravitonShardAmountText(int milestoneID) { - int sum; - int progress = milestoneProgress[milestoneID]; - if (!inversion) { - progress = Math.min(progress, 7); - } - sum = progress * (progress + 1) / 2; - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.shardgain") + ": " + EnumChatFormatting.GRAY + sum); - } - - private Text totalMilestoneProgress(int milestoneID) { - long progress; - BigInteger bigProgress; - String suffix; - switch (milestoneID) { - case 1 -> { - suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes"); - progress = totalRecipesProcessed; - } - case 2 -> { - suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuelconsumed"); - progress = totalFuelConsumed; - } - case 3 -> { - suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions"); - progress = milestoneProgress[3]; - } - default -> { - suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power"); - bigProgress = totalPowerConsumed; - if (!noFormatting && (totalPowerConsumed.compareTo(BigInteger.valueOf(1_000L)) > 0)) { - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": " - + EnumChatFormatting.GRAY - + toExponentForm(bigProgress) - + " " - + suffix); - } else { - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": " - + EnumChatFormatting.GRAY - + bigProgress - + " " - + suffix); - } - } - } - if (!noFormatting) { - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": " - + EnumChatFormatting.GRAY - + formatNumbers(progress) - + " " - + suffix); - } else { - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": " - + EnumChatFormatting.GRAY - + progress - + " " - + suffix); - } - - } - - private Text currentMilestone(int milestoneID) { - return new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.milestoneprogress") + ": " - + EnumChatFormatting.GRAY - + milestoneProgress[milestoneID]); - } - - private Text milestoneProgressText(int milestoneID, boolean formatting) { - long max; - BigInteger bigMax; - String suffix; - String progressText = translateToLocal("gt.blockmachines.multimachine.FOG.progress"); - Text done = new Text(translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete")); - if (noFormatting) { - formatting = false; - done = new Text( - translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete") + EnumChatFormatting.DARK_RED - + "?"); - } - switch (milestoneID) { - case 0: - if (milestoneProgress[0] < 7 || inversion) { - suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power"); - if (inversion) { - bigMax = POWER_MILESTONE_T7_CONSTANT.multiply(BigInteger.valueOf(milestoneProgress[0] - 5)); - } else { - bigMax = BigInteger.valueOf(LongMath.pow(9, milestoneProgress[0])) - .multiply(BigInteger.valueOf(LongMath.pow(10, 15))); - } - if (formatting && (totalPowerConsumed.compareTo(BigInteger.valueOf(1_000L)) > 0)) { - return new Text( - progressText + ": " + EnumChatFormatting.GRAY + toExponentForm(bigMax) + " " + suffix); - } else { - return new Text(progressText + ": " + EnumChatFormatting.GRAY + bigMax + " " + suffix); - } - } else { - return done; - } - case 1: - if (milestoneProgress[1] < 7 || inversion) { - suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes"); - if (inversion) { - max = RECIPE_MILESTONE_T7_CONSTANT * (milestoneProgress[1] - 5); - } else { - max = LongMath.pow(6, milestoneProgress[1]) * LongMath.pow(10, 7); - } - break; - } else { - return done; - } - case 2: - if (milestoneProgress[2] < 7 || inversion) { - suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuelconsumed"); - if (inversion) { - max = FUEL_MILESTONE_T7_CONSTANT * (milestoneProgress[2] - 5); - } else { - max = LongMath.pow(3, milestoneProgress[2]) * LongMath.pow(10, 4); - } - break; - } else { - return done; - } - case 3: - if (milestoneProgress[3] < 7 || inversion) { - suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions"); - max = milestoneProgress[3] + 1; - break; - } else { - return done; - } - default: - return new Text("Error"); - } - if (formatting) { - return new Text(progressText + ": " + EnumChatFormatting.GRAY + formatNumbers(max) + " " + suffix); - } else { - return new Text(progressText + ": " + EnumChatFormatting.GRAY + max + " " + suffix); - } - } - - private Text inversionHeaderText() { - return inversion - ? new Text( - EnumChatFormatting.BOLD + "§k2" - + EnumChatFormatting.RESET - + EnumChatFormatting.WHITE - + EnumChatFormatting.BOLD - + translateToLocal("gt.blockmachines.multimachine.FOG.inversion") - + EnumChatFormatting.BOLD - + "§k2") - : new Text(""); - } - - private Text inversionInfoText() { - return inversion ? new Text(translateToLocal("gt.blockmachines.multimachine.FOG.inversioninfotext")) - : new Text(""); - } - - private List upgradeMaterialRequirements() { - if (materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) - .indexOf(currentUpgradeID)]) { - return ImmutableList.of(translateToLocal("fog.button.materialrequirementsmet.tooltip")); - } - return ImmutableList.of(translateToLocal("fog.button.materialrequirements.tooltip")); - } - - private void increaseBattery(int amount) { - if ((internalBattery + amount) <= maxBatteryCharge) { - internalBattery += amount; - } else { - internalBattery = maxBatteryCharge; - batteryCharging = false; - } - } - - public void reduceBattery(int amount) { - if (internalBattery - amount <= 0) { - internalBattery = 0; - if (moduleHatches.size() > 0) { - for (GT_MetaTileEntity_EM_BaseModule module : moduleHatches) { - module.disconnect(); - } - } - destroyRenderer(); - } else { - internalBattery -= amount; - totalFuelConsumed += amount; - } - - } - - public int getBatteryCharge() { - return internalBattery; - } - - public int getMaxBatteryCharge() { - return maxBatteryCharge; - } - - public void addTotalPowerConsumed(BigInteger amount) { - totalPowerConsumed = totalPowerConsumed.add(amount); - } - - public void addTotalRecipesProcessed(long amount) { - totalRecipesProcessed += amount; - } - - @Override - protected void setHatchRecipeMap(GT_MetaTileEntity_Hatch_Input hatch) {} - - @Override - public void setItemNBT(NBTTagCompound NBT) { - NBT.setInteger("selectedFuelType", selectedFuelType); - NBT.setInteger("fuelConsumptionFactor", fuelConsumptionFactor); - NBT.setInteger("internalBattery", internalBattery); - NBT.setBoolean("batteryCharging", batteryCharging); - NBT.setInteger("batterySize", maxBatteryCharge); - NBT.setInteger("gravitonShardsAvailable", gravitonShardsAvailable); - NBT.setInteger("gravitonShardsSpent", gravitonShardsSpent); - NBT.setByteArray("totalPowerConsumed", totalPowerConsumed.toByteArray()); - NBT.setLong("totalRecipesProcessed", totalRecipesProcessed); - NBT.setLong("totalFuelConsumed", totalFuelConsumed); - NBT.setInteger("starFuelStored", stellarFuelAmount); - NBT.setBoolean("gravitonShardEjection", gravitonShardEjection); - - // Store booleanArrays of all upgrades - NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound(); - - int upgradeIndex = 0; - for (Boolean upgrade : upgrades) { - upgradeBooleanArrayNBTTag.setBoolean("upgrade" + upgradeIndex, upgrade); - upgradeIndex++; - } - - NBT.setTag("upgrades", upgradeBooleanArrayNBTTag); - - NBTTagCompound upgradeMaterialBooleanArrayNBTTag = new NBTTagCompound(); - - int upgradeMaterialIndex = 0; - for (Boolean upgrade : materialPaidUpgrades) { - upgradeBooleanArrayNBTTag.setBoolean("upgradeMaterial" + upgradeMaterialIndex, upgrade); - upgradeMaterialIndex++; - } - - NBT.setTag("upgradeMaterials", upgradeMaterialBooleanArrayNBTTag); - super.saveNBTData(NBT); - } - - @Override - public void saveNBTData(NBTTagCompound NBT) { - NBT.setInteger("selectedFuelType", selectedFuelType); - NBT.setInteger("fuelConsumptionFactor", fuelConsumptionFactor); - NBT.setInteger("internalBattery", internalBattery); - NBT.setBoolean("batteryCharging", batteryCharging); - NBT.setInteger("batterySize", maxBatteryCharge); - NBT.setInteger("gravitonShardsAvailable", gravitonShardsAvailable); - NBT.setInteger("gravitonShardsSpent", gravitonShardsSpent); - NBT.setByteArray("totalPowerConsumed", totalPowerConsumed.toByteArray()); - NBT.setLong("totalRecipesProcessed", totalRecipesProcessed); - NBT.setLong("totalFuelConsumed", totalFuelConsumed); - NBT.setInteger("starFuelStored", stellarFuelAmount); - NBT.setBoolean("gravitonShardEjection", gravitonShardEjection); - NBT.setBoolean("isRenderActive", isRenderActive); - NBT.setInteger("ringAmount", ringAmount); - - // Store booleanArray of all upgrades - NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound(); - - int upgradeIndex = 0; - for (boolean upgrade : upgrades) { - upgradeBooleanArrayNBTTag.setBoolean("upgrade" + upgradeIndex, upgrade); - upgradeIndex++; - } - - NBT.setTag("upgrades", upgradeBooleanArrayNBTTag); - - NBTTagCompound upgradeMaterialBooleanArrayNBTTag = new NBTTagCompound(); - - int upgradeMaterialIndex = 0; - for (boolean upgrade : materialPaidUpgrades) { - upgradeMaterialBooleanArrayNBTTag.setBoolean("upgradeMaterial" + upgradeMaterialIndex, upgrade); - upgradeMaterialIndex++; - } - - NBT.setTag("upgradeMaterials", upgradeMaterialBooleanArrayNBTTag); - super.saveNBTData(NBT); - } - - @Override - public void loadNBTData(NBTTagCompound NBT) { - selectedFuelType = NBT.getInteger("selectedFuelType"); - fuelConsumptionFactor = NBT.getInteger("fuelConsumptionFactor"); - internalBattery = NBT.getInteger("internalBattery"); - batteryCharging = NBT.getBoolean("batteryCharging"); - maxBatteryCharge = NBT.getInteger("batterySize"); - gravitonShardsAvailable = NBT.getInteger("gravitonShardsAvailable"); - gravitonShardsSpent = NBT.getInteger("gravitonShardsSpent"); - totalPowerConsumed = new BigInteger(NBT.getByteArray("totalPowerConsumed")); - totalRecipesProcessed = NBT.getLong("totalRecipesProcessed"); - totalFuelConsumed = NBT.getLong("totalFuelConsumed"); - stellarFuelAmount = NBT.getInteger("starFuelStored"); - gravitonShardEjection = NBT.getBoolean("gravitonShardEjection"); - isRenderActive = NBT.getBoolean("isRenderActive"); - ringAmount = NBT.getInteger("ringAmount"); - - NBTTagCompound tempBooleanTag = NBT.getCompoundTag("upgrades"); - - for (int upgradeIndex = 0; upgradeIndex < 31; upgradeIndex++) { - boolean upgrade = tempBooleanTag.getBoolean("upgrade" + upgradeIndex); - upgrades[upgradeIndex] = upgrade; - } - - tempBooleanTag = NBT.getCompoundTag("upgradeMaterials"); - - for (int upgradeIndex = 0; upgradeIndex < 7; upgradeIndex++) { - boolean upgrade = tempBooleanTag.getBoolean("upgradeMaterial" + upgradeIndex); - materialPaidUpgrades[upgradeIndex] = upgrade; - } - - super.loadNBTData(NBT); - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java deleted file mode 100644 index 26a71f5f08..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_computer.java +++ /dev/null @@ -1,621 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_NEUTRAL; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_OK; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_TOO_LOW; -import static com.github.technus.tectech.util.CommonValues.MULTI_CHECK_AT; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Rack; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessComputation_Output; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; -import com.github.technus.tectech.util.CommonValues; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.util.Vec3Impl; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.common.WirelessComputationPacket; - -/** - * Created by danie_000 on 17.12.2016. - */ -public class GT_MetaTileEntity_EM_computer extends GT_MetaTileEntity_MultiblockBase_EM - implements ISurvivalConstructable { - - // region variables - private final ArrayList eRacks = new ArrayList<>(); - - private final ArrayList eWirelessComputationOutputs = new ArrayList<>(); - - private static Textures.BlockIcons.CustomIcon ScreenOFF; - private static Textures.BlockIcons.CustomIcon ScreenON; - // endregion - - // region structure - private static final String[] description = new String[] { - EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", - translateToLocal("gt.blockmachines.multimachine.em.computer.hint.0"), // 1 - Classic/Data Hatches or - // Computer casing - translateToLocal("gt.blockmachines.multimachine.em.computer.hint.1"), // 2 - Rack Hatches or Advanced - // computer casing - }; - - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape("front", transpose(new String[][] { { " AA" }, { " AA" }, { " ~A" }, { " AA" } })) - .addShape("cap", transpose(new String[][] { { "-CB" }, { " DD" }, { " DD" }, { "-CB" } })) - .addShape("slice", transpose(new String[][] { { "-CB" }, { " ED" }, { " ED" }, { "-CB" } })) - .addShape("back", transpose(new String[][] { { " AA" }, { " AA" }, { " AA" }, { " AA" } })) - .addElement('B', ofBlock(sBlockCasingsTT, 1)) - .addElement('C', ofBlock(sBlockCasingsTT, 2)) - .addElement('D', ofBlock(sBlockCasingsTT, 3)) - .addElement( - 'A', - buildHatchAdder(GT_MetaTileEntity_EM_computer.class) - .atLeast( - Energy.or(HatchElement.EnergyMulti), - Maintenance, - HatchElement.Uncertainty, - HatchElement.OutputData, - WirelessComputationHatchElement.INSTANCE) - .casingIndex(textureOffset + 1) - .dot(1) - .buildAndChain(ofBlock(sBlockCasingsTT, 1))) - .addElement('E', RackHatchElement.INSTANCE.newAnyOrCasing(textureOffset + 3, 2, sBlockCasingsTT, 3)) - .build(); - // endregion - - // region parameters - protected Parameters.Group.ParameterIn overclock, overvolt; - protected Parameters.Group.ParameterOut maxCurrentTemp, availableData; - - private boolean wirelessModeEnabled = false; - - private static final INameFunction OC_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.em.computer.cfgi.0"); // Overclock ratio - private static final INameFunction OV_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.em.computer.cfgi.1"); // Overvoltage ratio - private static final INameFunction MAX_TEMP_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.em.computer.cfgo.0"); // Current max. heat - private static final INameFunction COMPUTE_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.em.computer.cfgo.1"); // Produced computation - private static final IStatusFunction OC_STATUS = (base, p) -> LedStatus - .fromLimitsInclusiveOuterBoundary(p.get(), 0, 1, 3, 5); - private static final IStatusFunction OV_STATUS = (base, p) -> LedStatus - .fromLimitsInclusiveOuterBoundary(p.get(), 0, 1, 3, 5); - private static final IStatusFunction MAX_TEMP_STATUS = (base, p) -> LedStatus - .fromLimitsInclusiveOuterBoundary(p.get(), 0, 2000, 8000, 10000); - private static final IStatusFunction COMPUTE_STATUS = (base, p) -> { - if (base.eAvailableData < 0) { - return STATUS_TOO_LOW; - } - if (base.eAvailableData == 0) { - return STATUS_NEUTRAL; - } - return STATUS_OK; - }; - // endregion - - public GT_MetaTileEntity_EM_computer(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - eCertainMode = 5; - eCertainStatus = -128; // no-brain value - } - - public GT_MetaTileEntity_EM_computer(String aName) { - super(aName); - eCertainMode = 5; - eCertainStatus = -128; // no-brain value - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_computer(mName); - } - - @Override - protected void parametersInstantiation_EM() { - Parameters.Group hatch_0 = parametrization.getGroup(0); - overclock = hatch_0.makeInParameter(0, 1, OC_NAME, OC_STATUS); - overvolt = hatch_0.makeInParameter(1, 1, OV_NAME, OV_STATUS); - maxCurrentTemp = hatch_0.makeOutParameter(0, 0, MAX_TEMP_NAME, MAX_TEMP_STATUS); - availableData = hatch_0.makeOutParameter(1, 0, COMPUTE_NAME, COMPUTE_STATUS); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - for (GT_MetaTileEntity_Hatch_Rack rack : filterValidMTEs(eRacks)) { - rack.getBaseMetaTileEntity() - .setActive(false); - } - eRacks.clear(); - if (!structureCheck_EM("front", 1, 2, 0)) { - return false; - } - if (!structureCheck_EM("cap", 1, 2, -1)) { - return false; - } - byte offset = -2, totalLen = 4; - while (offset > -16) { - if (!structureCheck_EM("slice", 1, 2, offset)) { - break; - } - totalLen++; - offset--; - } - if (totalLen > 17) { - return false; - } - if (!structureCheck_EM("cap", 1, 2, ++offset)) { - return false; - } - if (!structureCheck_EM("back", 1, 2, --offset)) { - return false; - } - eCertainMode = (byte) Math.min(totalLen / 3, 5); - for (GT_MetaTileEntity_Hatch_Rack rack : filterValidMTEs(eRacks)) { - rack.getBaseMetaTileEntity() - .setActive(iGregTechTileEntity.isActive()); - } - return eUncertainHatches.size() == 1; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setDouble("computation", availableData.get()); - aNBT.setBoolean("wirelessModeEnabled", wirelessModeEnabled); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (availableData != null) { - availableData.set(aNBT.getDouble("computation")); - eAvailableData = (long) availableData.get(); - } - if (aNBT.hasKey("wirelessModeEnabled")) { - wirelessModeEnabled = aNBT.getBoolean("wirelessModeEnabled"); - if (wirelessModeEnabled) { - WirelessComputationPacket.enableWirelessNetWork(getBaseMetaTileEntity()); - } - } else { - wirelessModeEnabled = false; - } - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && wirelessModeEnabled && aTick % 20 == 0) { - WirelessComputationPacket.updatePacket(aBaseMetaTileEntity, aTick); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && mMachine - && !aBaseMetaTileEntity.isActive() - && aTick % 20 == MULTI_CHECK_AT) { - double maxTemp = 0; - for (GT_MetaTileEntity_Hatch_Rack rack : filterValidMTEs(eRacks)) { - if (rack.heat > maxTemp) { - maxTemp = rack.heat; - } - } - maxCurrentTemp.set(maxTemp); - } - } - - @Override - @NotNull - protected CheckRecipeResult checkProcessing_EM() { - parametrization.setToDefaults(false, true); - eAvailableData = 0; - double maxTemp = 0; - double overClockRatio = overclock.get(); - double overVoltageRatio = overvolt.get(); - if (Double.isNaN(overClockRatio) || Double.isNaN(overVoltageRatio)) { - return SimpleCheckRecipeResult.ofFailure("no_computing"); - } - if (overclock.getStatus(true).isOk && overvolt.getStatus(true).isOk) { - float eut = V[7] * (float) overClockRatio * (float) overVoltageRatio; - if (eut < Integer.MAX_VALUE - 7) { - mEUt = -(int) eut; - } else { - mEUt = -(int) V[7]; - return CheckRecipeResultRegistry.POWER_OVERFLOW; - } - short thingsActive = 0; - int rackComputation; - - for (GT_MetaTileEntity_Hatch_Rack rack : filterValidMTEs(eRacks)) { - if (rack.heat > maxTemp) { - maxTemp = rack.heat; - } - rackComputation = rack.tickComponents((float) overClockRatio, (float) overVoltageRatio); - if (rackComputation > 0) { - eAvailableData += rackComputation; - thingsActive += 4; - } - rack.getBaseMetaTileEntity() - .setActive(true); - } - - for (GT_MetaTileEntity_Hatch_InputData di : eInputData) { - if (di.q != null) // ok for power losses - { - thingsActive++; - } - } - - if (thingsActive > 0 && eCertainStatus == 0) { - thingsActive += eOutputData.size(); - eAmpereFlow = 1 + (thingsActive >> 2); - mMaxProgresstime = 20; - mEfficiencyIncrease = 10000; - maxCurrentTemp.set(maxTemp); - availableData.set(eAvailableData); - return SimpleCheckRecipeResult.ofSuccess("computing"); - } else { - eAvailableData = 0; - mEUt = -(int) V[7]; - eAmpereFlow = 1; - mMaxProgresstime = 20; - mEfficiencyIncrease = 10000; - maxCurrentTemp.set(maxTemp); - availableData.set(eAvailableData); - return SimpleCheckRecipeResult.ofSuccess("no_computing"); - } - } - return SimpleCheckRecipeResult.ofFailure("no_computing"); - } - - @Override - public void outputAfterRecipe_EM() { - if (!eOutputData.isEmpty()) { - Vec3Impl pos = new Vec3Impl( - getBaseMetaTileEntity().getXCoord(), - getBaseMetaTileEntity().getYCoord(), - getBaseMetaTileEntity().getZCoord()); - - QuantumDataPacket pack = new QuantumDataPacket(eAvailableData / (eOutputData.size())).unifyTraceWith(pos); - if (pack == null) { - return; - } - for (GT_MetaTileEntity_Hatch_InputData hatch : eInputData) { - if (hatch.q == null || hatch.q.contains(pos)) { - continue; - } - pack = pack.unifyPacketWith(hatch.q); - if (pack == null) { - return; - } - } - - for (GT_MetaTileEntity_Hatch_OutputData o : eOutputData) { - o.q = pack; - } - } - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.computer.name")) // Machine Type: Quantum - // Computer - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.computer.desc.0")) // Controller block of - // the Quantum Computer - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.computer.desc.1")) // Used to generate - // computation (and heat) - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.computer.desc.2")) // Use screwdriver to toggle - // wireless mode - .addInfo(translateToLocal("tt.keyword.Structure.StructureTooComplex")) // The structure is too complex! - .addSeparator() - .beginVariableStructureBlock(2, 2, 4, 4, 5, 16, false) - .addOtherStructurePart( - translateToLocal("gt.blockmachines.hatch.certain.tier.07.name"), - translateToLocal("tt.keyword.Structure.AnyComputerCasingFirstOrLastSlice"), - 1) // Uncertainty Resolver: Any Computer Casing on first or last slice - .addOtherStructurePart( - translateToLocal("tt.keyword.Structure.DataConnector"), - translateToLocal("tt.keyword.Structure.AnyComputerCasingFirstOrLastSlice"), - 1) // Optical Connector: Any Computer Casing on first or last slice - .addOtherStructurePart( - translateToLocal("gt.blockmachines.hatch.rack.tier.08.name"), - translateToLocal("tt.keyword.Structure.AnyAdvComputerCasingExceptOuter"), - 2) // Computer Rack: Any Advanced Computer Casing, except the outer ones - .addOtherStructurePart( - translateToLocal("gt.blockmachines.hatch.param.tier.05.name"), - translateToLocal("tt.keyword.Structure.Optional") + " " - + translateToLocal("tt.keyword.Structure.AnyComputerCasingFirstOrLastSlice"), - 2) // Parametrizer: (optional) Any Computer Casing on first or last slice - .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasingFirstOrLastSlice"), 1) // Energy - // Hatch: - // Any - // Computer - // Casing - // on - // first - // or - // last - // slice - .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasingFirstOrLastSlice"), 1) // Maintenance - // Hatch: - // Any - // Computer - // Casing - // on - // first - // or - // last - // slice - .toolTipFinisher(CommonValues.TEC_MARK_EM); - return tt; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (getBaseMetaTileEntity().isServerSide()) { - wirelessModeEnabled = !wirelessModeEnabled; - if (wirelessModeEnabled) { - GT_Utility.sendChatToPlayer(aPlayer, "Wireless mode enabled"); - WirelessComputationPacket.enableWirelessNetWork(getBaseMetaTileEntity()); - } else { - GT_Utility.sendChatToPlayer(aPlayer, "Wireless mode disabled"); - WirelessComputationPacket.disableWirelessNetWork(getBaseMetaTileEntity()); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/EM_COMPUTER"); - ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/EM_COMPUTER_ACTIVE"); - super.registerIcons(aBlockIconRegister); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][3], - new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][3] }; - } - - @Override - @SideOnly(Side.CLIENT) - protected ResourceLocation getActivitySound() { - return GT_MetaTileEntity_EM_switch.activitySound; - } - - @Override - public void onRemoval() { - super.onRemoval(); - for (GT_MetaTileEntity_Hatch_Rack rack : filterValidMTEs(eRacks)) { - rack.getBaseMetaTileEntity() - .setActive(false); - } - } - - @Override - protected void extraExplosions_EM() { - for (MetaTileEntity tTileEntity : eRacks) { - tTileEntity.getBaseMetaTileEntity() - .doExplosion(V[8]); - } - } - - @Override - protected long getAvailableData_EM() { - return eAvailableData; - } - - @Override - public void stopMachine(@Nonnull ShutDownReason reason) { - super.stopMachine(reason); - eAvailableData = 0; - for (GT_MetaTileEntity_Hatch_Rack rack : filterValidMTEs(eRacks)) { - rack.getBaseMetaTileEntity() - .setActive(false); - } - } - - @Override - protected void afterRecipeCheckFailed() { - super.afterRecipeCheckFailed(); - for (GT_MetaTileEntity_Hatch_Rack rack : filterValidMTEs(eRacks)) { - rack.getBaseMetaTileEntity() - .setActive(false); - } - } - - public final boolean addRackToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Rack) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eRacks.add((GT_MetaTileEntity_Hatch_Rack) aMetaTileEntity); - } - return false; - } - - public final boolean addWirelessDataOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_WirelessComputation_Output) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - // Add to wireless computation outputs, so we can detect these and turn on wireless mode, - // but also add to regular outputs, so they are used as output data hatches by the quantum computer - return eWirelessComputationOutputs.add((GT_MetaTileEntity_Hatch_WirelessComputation_Output) aMetaTileEntity) - && eOutputData.add((GT_MetaTileEntity_Hatch_WirelessComputation_Output) aMetaTileEntity); - } - return false; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM("front", 1, 2, 0, stackSize, hintsOnly); - structureBuild_EM("cap", 1, 2, -1, stackSize, hintsOnly); - - byte offset = -2; - for (int rackSlices = Math.min(stackSize.stackSize, 12); rackSlices > 0; rackSlices--) { - structureBuild_EM("slice", 1, 2, offset--, stackSize, hintsOnly); - } - - structureBuild_EM("cap", 1, 2, offset--, stackSize, hintsOnly); - structureBuild_EM("back", 1, 2, offset, stackSize, hintsOnly); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (mMachine) return -1; - int built; - built = survivialBuildPiece("front", stackSize, 1, 2, 0, elementBudget, source, actor, false, true); - if (built >= 0) return built; - built = survivialBuildPiece("cap", stackSize, 1, 2, -1, elementBudget, source, actor, false, true); - if (built >= 0) return built; - - byte offset = -2; - for (int rackSlices = Math.min(stackSize.stackSize, 12); rackSlices > 0; rackSlices--) { - built = survivialBuildPiece("slice", stackSize, 1, 2, offset--, elementBudget, source, actor, false, true); - if (built >= 0) return built; - } - built = survivialBuildPiece("cap", stackSize, 1, 2, offset--, elementBudget, source, actor, false, true); - if (built >= 0) return built; - return survivialBuildPiece("back", stackSize, 1, 2, offset, elementBudget, source, actor, false, true); - } - - @Override - public IStructureDefinition getStructure_EM() { - return STRUCTURE_DEFINITION; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return description; - } - - @Override - public String[] getInfoData() { - ArrayList data = new ArrayList<>(Arrays.asList(super.getInfoData())); - if (wirelessModeEnabled) { - WirelessComputationPacket wirelessComputationPacket = WirelessComputationPacket - .getPacketByUserId(getBaseMetaTileEntity().getOwnerUuid()); - data.add("Wireless mode: " + EnumChatFormatting.GREEN + "enabled"); - data.add( - "Total wireless computation available: " + EnumChatFormatting.YELLOW - + wirelessComputationPacket.getTotalComputationStored()); - } else { - data.add("Wireless mode: " + EnumChatFormatting.RED + "disabled"); - } - return data.toArray(new String[] {}); - } - - private enum RackHatchElement implements IHatchElement { - - INSTANCE; - - @Override - public List> mteClasses() { - return Collections.singletonList(GT_MetaTileEntity_Hatch_Rack.class); - } - - @Override - public IGT_HatchAdder adder() { - return GT_MetaTileEntity_EM_computer::addRackToMachineList; - } - - @Override - public long count(GT_MetaTileEntity_EM_computer t) { - return t.eRacks.size(); - } - } - - private enum WirelessComputationHatchElement implements IHatchElement { - - INSTANCE; - - @Override - public List> mteClasses() { - return Collections.singletonList(GT_MetaTileEntity_Hatch_WirelessComputation_Output.class); - } - - @Override - public IGT_HatchAdder adder() { - return GT_MetaTileEntity_EM_computer::addWirelessDataOutputToMachineList; - } - - @Override - public long count(GT_MetaTileEntity_EM_computer gtMetaTileEntityEmComputer) { - return gtMetaTileEntityEmComputer.eWirelessComputationOutputs.size(); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java deleted file mode 100644 index cc4954a15d..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_dataBank.java +++ /dev/null @@ -1,384 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.mechanics.dataTransport.InventoryDataPacket; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputDataItems; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputDataItems; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_WirelessOutputDataItems; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; -import com.github.technus.tectech.util.CommonValues; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_DataAccess; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.common.WirelessComputationPacket; -import gregtech.common.WirelessDataStore; - -public class GT_MetaTileEntity_EM_dataBank extends GT_MetaTileEntity_MultiblockBase_EM - implements ISurvivalConstructable { - - // region variables - private final ArrayList eStacksDataOutputs = new ArrayList<>(); - private final ArrayList eWirelessStacksDataOutputs = new ArrayList<>(); - private final ArrayList eDataAccessHatches = new ArrayList<>(); - private boolean slave = false; - private boolean wirelessModeEnabled = false; - // endregion - - // region structure - private static final String[] description = new String[] { - EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", - translateToLocal("gt.blockmachines.multimachine.em.databank.hint.0"), // 1 - Classic Hatches or high power - // casing - translateToLocal("gt.blockmachines.multimachine.em.databank.hint.1"), // 2 - Data Access/Data Bank Master - // Hatches or - // computer casing - }; - - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - "main", - transpose( - new String[][] { { "BCCCB", "BDDDB", "BDDDB" }, { "BC~CB", "BAAAB", "BDDDB" }, - { "BCCCB", "BDDDB", "BDDDB" } })) - .addElement('A', ofBlock(sBlockCasingsTT, 1)) - .addElement('B', ofBlock(sBlockCasingsTT, 2)) - .addElement('C', classicHatches(textureOffset, 1, sBlockCasingsTT, 0)) - .addElement( - 'D', - buildHatchAdder(GT_MetaTileEntity_EM_dataBank.class) - .atLeast( - DataBankHatches.OutboundConnector, - DataBankHatches.InboundConnector, - DataBankHatches.WirelessOutboundConnector) - .casingIndex(textureOffset + 1) - .dot(2) - .buildAndChain(DataBankHatches.DataStick.newAnyOrCasing(textureOffset + 1, 2, sBlockCasingsTT, 1))) - .build(); - // endregion - - public GT_MetaTileEntity_EM_dataBank(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_EM_dataBank(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_dataBank(mName); - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.databank.name")) // Machine Type: Data Bank - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.databank.desc.0")) // Controller block of - // the Data Bank - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.databank.desc.1")) // Used to supply - // Assembling Lines - // with more Data Sticks - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.databank.desc.2")) // and give multiple - // Assembling Lines access to - // the same Data - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.databank.desc.3")) // Use screwdriver to toggle - // wireless mode - - // Stick - .addInfo(translateToLocal("tt.keyword.Structure.StructureTooComplex")) // The structure is too complex! - .addSeparator() - .beginStructureBlock(5, 3, 3, false) - .addOtherStructurePart( - translateToLocal("tt.keyword.Structure.DataAccessHatch"), - translateToLocal("tt.keyword.Structure.AnyComputerCasing"), - 2) // Data Access Hatch: Any Computer Casing - .addOtherStructurePart( - translateToLocal("gt.blockmachines.hatch.dataoutass.tier.07.name"), - translateToLocal("tt.keyword.Structure.AnyComputerCasing"), - 2) // Data Bank Master Connector: Any Computer Casing - .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) // Energy Hatch: Any - // High Power Casing - .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) // Maintenance - // Hatch: Any High - // Power Casing - .toolTipFinisher(CommonValues.TEC_MARK_EM); - return tt; - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - eDataAccessHatches.clear(); - eStacksDataOutputs.clear(); - eWirelessStacksDataOutputs.clear(); - slave = false; - return structureCheck_EM("main", 2, 1, 0); - } - - @Override - @NotNull - protected CheckRecipeResult checkProcessing_EM() { - if (eDataAccessHatches.size() > 0 && (eStacksDataOutputs.size() > 0 || eWirelessStacksDataOutputs.size() > 0)) { - mEUt = -(int) V[slave ? 6 : 4]; - eAmpereFlow = 1 - + (long) (eStacksDataOutputs.size() + eWirelessStacksDataOutputs.size()) * eDataAccessHatches.size(); - mMaxProgresstime = 20; - mEfficiencyIncrease = 10000; - return SimpleCheckRecipeResult.ofSuccess("providing_data"); - } - return SimpleCheckRecipeResult.ofFailure("no_data"); - } - - @Override - public void outputAfterRecipe_EM() { - ArrayList stacks = new ArrayList<>(); - for (IInventory dataAccess : eDataAccessHatches) { - int count = dataAccess.getSizeInventory(); - for (int i = 0; i < count; i++) { - ItemStack stack = dataAccess.getStackInSlot(i); - if (stack != null) { - stacks.add(stack); - } - } - } - if (stacks.size() > 0) { - ItemStack[] arr = stacks.toArray(nullItem); - for (GT_MetaTileEntity_Hatch_OutputDataItems hatch : eStacksDataOutputs) { - hatch.q = new InventoryDataPacket(arr); - } - if (wirelessModeEnabled) { - for (GT_MetaTileEntity_Hatch_WirelessOutputDataItems hatch : eWirelessStacksDataOutputs) { - hatch.dataPacket = new InventoryDataPacket(arr); - } - } - } else { - for (GT_MetaTileEntity_Hatch_OutputDataItems hatch : eStacksDataOutputs) { - hatch.q = null; - } - for (GT_MetaTileEntity_Hatch_WirelessOutputDataItems hatch : eWirelessStacksDataOutputs) { - hatch.dataPacket = null; - } - } - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][1], - new TT_RenderedExtendedFacingTexture( - aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON - : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF) }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][1] }; - } - - public static final ResourceLocation activitySound = new ResourceLocation(Reference.MODID + ":fx_hi_freq"); - - @Override - @SideOnly(Side.CLIENT) - protected ResourceLocation getActivitySound() { - return activitySound; - } - - public final boolean addDataBankHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_WirelessOutputDataItems) { - ((GT_MetaTileEntity_Hatch_WirelessOutputDataItems) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eWirelessStacksDataOutputs.add((GT_MetaTileEntity_Hatch_WirelessOutputDataItems) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputDataItems) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eStacksDataOutputs.add((GT_MetaTileEntity_Hatch_OutputDataItems) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DataAccess - && !(aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputDataItems)) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eDataAccessHatches.add(aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputDataItems) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - slave = true; - return eDataAccessHatches.add(aMetaTileEntity); - } - return false; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - // Every 200 ticks, clear wireless data store so hatches need to provide their data again in - // their onPostTick() call. This also happens every 200 ticks - if (mMachine && aBaseMetaTileEntity.isActive() && wirelessModeEnabled && aTick % 200 == 0) { - WirelessDataStore wirelessStore = WirelessDataStore - .getWirelessDataSticks(aBaseMetaTileEntity.getOwnerUuid()); - wirelessStore.clearData(); - - // After reset, clear uploadedSinceReset of all connected hatches - for (GT_MetaTileEntity_Hatch_WirelessOutputDataItems hatch : eWirelessStacksDataOutputs) { - hatch.uploadedSinceReset = false; - } - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (getBaseMetaTileEntity().isServerSide()) { - wirelessModeEnabled = !wirelessModeEnabled; - if (wirelessModeEnabled) { - GT_Utility.sendChatToPlayer(aPlayer, "Wireless mode enabled"); - WirelessComputationPacket.enableWirelessNetWork(getBaseMetaTileEntity()); - } else { - GT_Utility.sendChatToPlayer(aPlayer, "Wireless mode disabled"); - WirelessComputationPacket.disableWirelessNetWork(getBaseMetaTileEntity()); - } - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("wirelessModeEnabled", wirelessModeEnabled); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("wirelessModeEnabled")) { - wirelessModeEnabled = aNBT.getBoolean("wirelessModeEnabled"); - } else { - wirelessModeEnabled = false; - } - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM("main", 2, 1, 0, stackSize, hintsOnly); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (mMachine) return -1; - return survivialBuildPiece("main", stackSize, 2, 1, 0, elementBudget, source, actor, false, true); - } - - @Override - public IStructureDefinition getStructure_EM() { - return STRUCTURE_DEFINITION; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return description; - } - - private enum DataBankHatches implements IHatchElement { - - DataStick(GT_MetaTileEntity_Hatch_DataAccess.class) { - - @Override - public long count(GT_MetaTileEntity_EM_dataBank t) { - return t.eDataAccessHatches.size(); - } - }, - OutboundConnector(GT_MetaTileEntity_Hatch_OutputDataItems.class) { - - @Override - public long count(GT_MetaTileEntity_EM_dataBank t) { - return t.eStacksDataOutputs.size(); - } - }, - InboundConnector(GT_MetaTileEntity_Hatch_InputDataItems.class) { - - @Override - public long count(GT_MetaTileEntity_EM_dataBank t) { - return t.eDataAccessHatches.size(); - } - }, - WirelessOutboundConnector(GT_MetaTileEntity_Hatch_WirelessOutputDataItems.class) { - - @Override - public long count(GT_MetaTileEntity_EM_dataBank t) { - return t.eWirelessStacksDataOutputs.size(); - } - }; - - private final List> mteClasses; - - @SafeVarargs - DataBankHatches(Class... mteClasses) { - this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - @Override - public IGT_HatchAdder adder() { - return GT_MetaTileEntity_EM_dataBank::addDataBankHatchToMachineList; - } - } - - @Override - public boolean isPowerPassButtonEnabled() { - return true; - } - - @Override - public boolean isSafeVoidButtonEnabled() { - return false; - } - - @Override - public boolean isAllowedToWorkButtonEnabled() { - return true; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java deleted file mode 100644 index 577fae6d4b..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_infuser.java +++ /dev/null @@ -1,315 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.GregTech_API.mEUtoRF; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional; -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.util.CommonValues; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; - -import cofh.api.energy.IEnergyContainerItem; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME; -import ic2.api.item.ElectricItem; -import ic2.api.item.IElectricItem; - -/** - * Created by danie_000 on 17.12.2016. - */ -public class GT_MetaTileEntity_EM_infuser extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { - - private static final int maxRepairedDamagePerOperation = 1000; - private static final long usedEuPerDurability = 1000; - private static final int usedUumPerDurability = 1; - - // region structure - private static final String[] description = new String[] { - EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", - // 1 - Classic Hatches or High Power Casing - translateToLocal("gt.blockmachines.multimachine.em.infuser.hint"), }; - - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - "main", - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "BBB", "BAB", "BBB" }, { "A~A", "AAA", "AAA" }, - { "BBB", "BAB", "BBB" }, { "CCC", "CCC", "CCC" } })) - .addElement('A', ofBlock(sBlockCasingsTT, 4)) - .addElement('B', ofBlock(sBlockCasingsTT, 7)) - .addElement( - 'C', - ofHatchAdderOptional( - GT_MetaTileEntity_EM_infuser::addClassicToMachineList, - textureOffset, - 1, - sBlockCasingsTT, - 0)) - .build(); - // endregion - - public GT_MetaTileEntity_EM_infuser(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - minRepairStatus = (byte) getIdealStatus(); - eDismantleBoom = true; - } - - public GT_MetaTileEntity_EM_infuser(String aName) { - super(aName); - minRepairStatus = (byte) getIdealStatus(); - eDismantleBoom = true; - } - - private boolean isItemStackFullyCharged(ItemStack stack) { - if (stack == null) { - return true; - } - Item item = stack.getItem(); - if (stack.stackSize == 1) { - if (item instanceof IElectricItem) { - return ElectricItem.manager.getCharge(stack) >= ((IElectricItem) item).getMaxCharge(stack); - } else if (TecTech.hasCOFH && item instanceof IEnergyContainerItem) { - return ((IEnergyContainerItem) item).getEnergyStored(stack) - >= ((IEnergyContainerItem) item).getMaxEnergyStored(stack); - } - } - return true; - } - - private boolean isItemStackFullyRepaired(ItemStack stack) { - if (stack == null) { - return true; - } - Item item = stack.getItem(); - return !item.isRepairable() || item.getMaxDamage(stack) <= 0 || item.getDamage(stack) <= 0; - } - - private long doChargeItemStack(IElectricItem item, ItemStack stack) { - try { - double euDiff = item.getMaxCharge(stack) - ElectricItem.manager.getCharge(stack); - long remove = (long) Math.ceil( - ElectricItem.manager.charge(stack, Math.min(euDiff, getEUVar()), item.getTier(stack), true, false)); - setEUVar(getEUVar() - remove); - if (getEUVar() < 0) { - setEUVar(0); - } - return remove; - } catch (Exception e) { - if (DEBUG_MODE) { - e.printStackTrace(); - } - } - return 0; - } - - private long doChargeItemStackRF(IEnergyContainerItem item, ItemStack stack) { - try { - long RF = Math - .min(item.getMaxEnergyStored(stack) - item.getEnergyStored(stack), getEUVar() * mEUtoRF / 100L); - RF = item.receiveEnergy(stack, RF > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) RF, false); - RF = RF * 100L / mEUtoRF; - setEUVar(getEUVar() - RF); - if (getEUVar() < 0) { - setEUVar(0); - } - return RF; - } catch (Exception e) { - if (DEBUG_MODE) { - e.printStackTrace(); - } - } - return 0; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_infuser(mName); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - return structureCheck_EM("main", 1, 2, 0); - } - - @Override - @NotNull - protected CheckRecipeResult checkProcessing_EM() { - for (GT_MetaTileEntity_Hatch_InputBus inputBus : mInputBusses) { - if (inputBus instanceof GT_MetaTileEntity_Hatch_InputBus_ME) continue; - for (int i = 0; i < inputBus.getSizeInventory(); i++) { - ItemStack itemStackInBus = inputBus.getStackInSlot(i); - if (itemStackInBus == null) continue; - Item item = itemStackInBus.getItem(); - if (itemStackInBus.stackSize != 1 || item == null) continue; - if (isItemStackFullyCharged(itemStackInBus) && isItemStackFullyRepaired(itemStackInBus)) { - if (addOutput(itemStackInBus)) { - this.depleteInput(itemStackInBus); - } - } else { - mEfficiencyIncrease = 10000; - mMaxProgresstime = 20; - return SimpleCheckRecipeResult.ofSuccess("charging"); - } - } - } - return SimpleCheckRecipeResult.ofFailure("no_chargeable_item"); - } - - @Override - public void outputAfterRecipe_EM() { - boolean itemProcessed = false; - startRecipeProcessing(); - for (GT_MetaTileEntity_Hatch_InputBus inputBus : mInputBusses) { - if (inputBus instanceof GT_MetaTileEntity_Hatch_InputBus_ME) continue; - for (int i = 0; i < inputBus.getSizeInventory(); i++) { - ItemStack itemStackInBus = inputBus.getStackInSlot(i); - if (itemStackInBus == null) continue; - Item item = itemStackInBus.getItem(); - if (itemStackInBus.stackSize != 1 || item == null) continue; - if (isItemStackFullyCharged(itemStackInBus) && isItemStackFullyRepaired(itemStackInBus)) { - itemProcessed = true; - if (addOutput(itemStackInBus)) { - this.depleteInput(itemStackInBus); - } - } else { - if (item.isRepairable()) { - FluidStack uum = getStoredFluids().stream() - .filter( - fluid -> Materials.UUMatter.getFluid(1) - .isFluidEqual(fluid)) - .findAny() - .orElse(null); - if (uum != null) { - int repairedDamage = Math - .min(item.getDamage(itemStackInBus), maxRepairedDamagePerOperation); - long euCost = repairedDamage * usedEuPerDurability; - if (getEUVar() >= euCost && depleteInput( - new FluidStack(Materials.UUMatter.mFluid, repairedDamage * usedUumPerDurability))) { - item.setDamage( - itemStackInBus, - Math.max(item.getDamage(itemStackInBus) - repairedDamage, 0)); - setEUVar(Math.min(getEUVar() - euCost, 0)); - } - } - } - if (item instanceof IElectricItem) { - doChargeItemStack((IElectricItem) item, itemStackInBus); - return; - } else if (TecTech.hasCOFH && item instanceof IEnergyContainerItem) { - doChargeItemStackRF((IEnergyContainerItem) item, itemStackInBus); - return; - } - } - } - } - endRecipeProcessing(); - if (!itemProcessed) { - afterRecipeCheckFailed(); - } - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - // Machine Type: Energy Infuser - tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.infuser.name")) - // Controller block of the Energy Infuser - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.infuser.desc.0")) - // Can be used to charge items (lossless) - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.infuser.desc.1")) - // Can be fed with UU-Matter to repair items - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.infuser.desc.2")) - // Stocking Bus is not supported - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.infuser.desc.3")) - .addSeparator() - .beginStructureBlock(3, 5, 3, false) - // Controller: Front 3rd layer center - .addController(translateToLocal("tt.keyword.Structure.FrontCenter3rd")) - .addOtherStructurePart( - // High Power - translateToLocal("gt.blockcasingsTT.0.name"), - translateToLocal("gt.blockmachines.multimachine.em.infuser.Structure.HighPowerCasing")) - // Casing: Layer - // 1 and 5 - .addOtherStructurePart( - // Molecular Coil - translateToLocal("gt.blockcasingsTT.7.name"), - translateToLocal("gt.blockmachines.multimachine.em.infuser.Structure.MolecularCoil")) - // Layer 2 and 4 - .addOtherStructurePart( - // Molecular - translateToLocal("gt.blockcasingsTT.4.name"), - translateToLocal("gt.blockmachines.multimachine.em.infuser.Structure.MolecularCasing")) - // Casing: Layer - // 3 (hollow) - // Energy Hatch: Any High Power Casing - .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) - // Maintenance Hatch: Any High Power Casing - .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) - .toolTipFinisher(CommonValues.TEC_MARK_GENERAL); - return tt; - } - - public static final ResourceLocation activitySound = new ResourceLocation(Reference.MODID + ":fx_whooum"); - - @Override - @SideOnly(Side.CLIENT) - protected ResourceLocation getActivitySound() { - return activitySound; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM("main", 1, 2, 0, stackSize, hintsOnly); - } - - @Override - public IStructureDefinition getStructure_EM() { - return STRUCTURE_DEFINITION; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return description; - } - - @Override - public boolean isPowerPassButtonEnabled() { - return true; - } - - @Override - public boolean isSafeVoidButtonEnabled() { - return false; - } - - @Override - public boolean isAllowedToWorkButtonEnabled() { - return true; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java deleted file mode 100644 index af9439d13a..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_research.java +++ /dev/null @@ -1,691 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static mcp.mobius.waila.api.SpecialChars.GREEN; -import static mcp.mobius.waila.api.SpecialChars.RED; -import static mcp.mobius.waila.api.SpecialChars.RESET; -import static net.minecraft.util.StatCollector.translateToLocal; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.reflect.FieldUtils; -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.recipe.TecTechRecipeMaps; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Holder; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; -import com.github.technus.tectech.util.CommonValues; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_AssemblyLineUtils; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.api.util.shutdown.ShutDownReason; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -/** - * Created by danie_000 on 17.12.2016. - */ -@SuppressWarnings("unchecked") -public class GT_MetaTileEntity_EM_research extends GT_MetaTileEntity_MultiblockBase_EM - implements ISurvivalConstructable { - - public static final String machine = "EM Machinery"; - public static final String crafter = "EM Crafting"; - // region variables - private final ArrayList eHolders = new ArrayList<>(); - private GT_Recipe.GT_Recipe_AssemblyLine tRecipe; - private static final String assembly = "Assembly line"; - private static final String scanner = "Scanner"; - private String machineType = assembly; - private ItemStack holdItem; - private long computationRemaining, computationRequired; - - // Used to sync currently researching item to GUI - private String clientOutputName; - - private static final String[] description = new String[] { - EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", - translateToLocal("gt.blockmachines.multimachine.em.research.hint.0"), // 1 - Classic/Data Hatches or - // Computer casing - translateToLocal("gt.blockmachines.multimachine.em.research.hint.1"), // 2 - Holder Hatch - }; - - private String clientLocale = "en_US"; - // endregion - - // region structure - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - "main", - transpose( - new String[][] { { " ", " A ", " A ", "AAA", "AAA", "AAA", "AAA" }, - { "AAA", "ACA", "ACA", "ACA", "BCB", "BCB", "BBB" }, - { " ", " C ", " ", " ", "ACA", "CCC", "DDD" }, - { " ", " E ", " ", " ", "A~A", "CCC", "DDD" }, - { " ", " C ", " ", " ", "ACA", "CCC", "DDD" }, - { "AAA", "ACA", "ACA", "ACA", "BCB", "BCB", "BBB" }, - { " ", " A ", " A ", "AAA", "AAA", "AAA", "AAA" } })) - .addElement('A', ofBlock(sBlockCasingsTT, 1)) - .addElement('B', ofBlock(sBlockCasingsTT, 2)) - .addElement('C', ofBlock(sBlockCasingsTT, 3)) - .addElement( - 'D', - buildHatchAdder(GT_MetaTileEntity_EM_research.class) - .atLeast(Energy.or(HatchElement.EnergyMulti), Maintenance, HatchElement.InputData) - .casingIndex(textureOffset + 1) - .dot(1) - .buildAndChain(ofBlock(sBlockCasingsTT, 1))) - .addElement('E', HolderHatchElement.INSTANCE.newAny(textureOffset + 3, 2)) - .build(); - // endregion - - public GT_MetaTileEntity_EM_research(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_EM_research(String aName) { - super(aName); - } - - private void makeStick() { - mInventory[1].setTagCompound(new NBTTagCompound()); - mInventory[1].getTagCompound() - .setString( - "author", - EnumChatFormatting.BLUE + "Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.WHITE - + ' ' - + machineType - + " Recipe Generator"); - GT_AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(mInventory[1], tRecipe); - } - - private boolean iterateRecipes() { - for (GT_Recipe ttRecipe : TecTechRecipeMaps.researchStationFakeRecipes.getAllRecipes()) { - if (GT_Utility.areStacksEqual(ttRecipe.mInputs[0], holdItem, true)) { - computationRequired = computationRemaining = ttRecipe.mDuration * 20L; - mMaxProgresstime = 20; - mEfficiencyIncrease = 10000; - eRequiredData = (short) (ttRecipe.mSpecialValue >>> 16); - eAmpereFlow = (short) (ttRecipe.mSpecialValue & 0xFFFF); - mEUt = Math.min(ttRecipe.mEUt, -ttRecipe.mEUt); - eHolders.get(0) - .getBaseMetaTileEntity() - .setActive(true); - return true; - } - } - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_research(mName); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - for (GT_MetaTileEntity_Hatch_Holder rack : filterValidMTEs(eHolders)) { - rack.getBaseMetaTileEntity() - .setActive(false); - } - eHolders.clear(); - - if (!structureCheck_EM("main", 1, 3, 4)) { - return false; - } - - for (GT_MetaTileEntity_Hatch_Holder rack : filterValidMTEs(eHolders)) { - rack.getBaseMetaTileEntity() - .setActive(iGregTechTileEntity.isActive()); - } - return eHolders.size() == 1; - } - - @Override - @NotNull - protected CheckRecipeResult checkProcessing_EM() { - ItemStack controllerStack = getControllerSlot(); - tRecipe = null; - if (!eHolders.isEmpty() && eHolders.get(0).mInventory[0] != null) { - holdItem = eHolders.get(0).mInventory[0].copy(); - if (ItemList.Tool_DataStick.isStackEqual(controllerStack, false, true)) { - switch (machineType) { - case scanner -> { - for (GT_Recipe.GT_Recipe_AssemblyLine assRecipe : GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes) { - if (GT_Utility.areStacksEqual(assRecipe.mResearchItem, holdItem, true)) { - boolean failScanner = true; - for (GT_Recipe scannerRecipe : scannerFakeRecipes.getAllRecipes()) { - if (GT_Utility.areStacksEqual(scannerRecipe.mInputs[0], holdItem, true)) { - failScanner = false; - break; - } - } - if (failScanner) { - return SimpleCheckRecipeResult.ofFailure("wrongRequirements"); - } - this.tRecipe = assRecipe; - // Set property - computationRequired = computationRemaining = assRecipe.mResearchTime; - mMaxProgresstime = 20; - mEfficiencyIncrease = 10000; - eRequiredData = 1; - eAmpereFlow = 1; - mEUt = (int) -TierEU.RECIPE_UV; - eHolders.get(0) - .getBaseMetaTileEntity() - .setActive(true); - return SimpleCheckRecipeResult.ofSuccess("scanning"); - } - } - } - case assembly -> { - for (GT_Recipe.GT_Recipe_AssemblyLine assRecipe : TecTechRecipeMaps.researchableALRecipeList) { - if (GT_Utility.areStacksEqual(assRecipe.mResearchItem, holdItem, true)) { - tRecipe = assRecipe; - // if found - if (iterateRecipes()) return SimpleCheckRecipeResult.ofSuccess("researching"); - } - } - } - } - } else { - return CheckRecipeResultRegistry.NO_DATA_STICKS; - } - } - holdItem = null; - computationRequired = computationRemaining = 0; - for (GT_MetaTileEntity_Hatch_Holder r : eHolders) { - r.getBaseMetaTileEntity() - .setActive(false); - } - return SimpleCheckRecipeResult.ofFailure("no_research_item"); - } - - @Override - public void outputAfterRecipe_EM() { - if (!eHolders.isEmpty()) { - if (tRecipe != null && ItemList.Tool_DataStick.isStackEqual(mInventory[1], false, true)) { - eHolders.get(0) - .getBaseMetaTileEntity() - .setActive(false); - eHolders.get(0).mInventory[0] = null; - makeStick(); - } - } - computationRequired = computationRemaining = 0; - tRecipe = null; - holdItem = null; - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.research.type")) // Machine Type: Research - // Station, Scanner - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.research.desc.0")) // Controller block of - // the Research Station - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.research.desc.1")) // Used to scan Data - // Sticks for - // Assembling Line Recipes - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.research.desc.2")) // Needs to be fed with - // computation to work - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.research.desc.3")) // Does not consume the - // item until - // the Data Stick is written - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.research.desc.4")) // Use screwdriver to change - // mode - .addInfo(translateToLocal("tt.keyword.Structure.StructureTooComplex")) // The structure is too complex! - .addSeparator() - .beginStructureBlock(3, 7, 7, false) - .addOtherStructurePart( - translateToLocal("gt.blockmachines.hatch.holder.tier.09.name"), - translateToLocal("tt.keyword.Structure.CenterPillar"), - 2) // Object Holder: Center of the front pillar - .addOtherStructurePart( - translateToLocal("tt.keyword.Structure.DataConnector"), - translateToLocal("tt.keyword.Structure.AnyComputerCasingBackMain"), - 1) // Optical Connector: Any Computer Casing on the backside of the main body - .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasingBackMain"), 1) // Energy Hatch: - // Any Computer - // Casing on the - // backside of - // the main body - .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasingBackMain"), 1) // Maintenance - // Hatch: - // Any - // Computer - // Casing on - // the - // backside - // of the - // main body - .toolTipFinisher(CommonValues.TEC_MARK_EM); - return tt; - } - - @Override - public String[] getInfoData() { - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - for (GT_MetaTileEntity_Hatch_EnergyMulti tHatch : filterValidMTEs(eEnergyMulti)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - - return new String[] { translateToLocalFormatted("tt.keyphrase.Energy_Hatches", clientLocale) + ":", - EnumChatFormatting.GREEN + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - (mEUt <= 0 ? translateToLocalFormatted("tt.keyphrase.Probably_uses", clientLocale) + ": " - : translateToLocalFormatted("tt.keyphrase.Probably_makes", clientLocale) + ": ") - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(Math.abs(mEUt)) - + EnumChatFormatting.RESET - + " EU/t " - + translateToLocalFormatted("tt.keyword.at", clientLocale) - + " " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(eAmpereFlow) - + EnumChatFormatting.RESET - + " A", - translateToLocalFormatted("tt.keyphrase.Tier_Rating", clientLocale) + ": " - + EnumChatFormatting.YELLOW - + VN[getMaxEnergyInputTier_EM()] - + EnumChatFormatting.RESET - + " / " - + EnumChatFormatting.GREEN - + VN[getMinEnergyInputTier_EM()] - + EnumChatFormatting.RESET - + " " - + translateToLocalFormatted("tt.keyphrase.Amp_Rating", clientLocale) - + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(eMaxAmpereFlow) - + EnumChatFormatting.RESET - + " A", - translateToLocalFormatted("tt.keyword.Problems", clientLocale) + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + translateToLocalFormatted("tt.keyword.Efficiency", clientLocale) - + ": " - + EnumChatFormatting.YELLOW - + mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - translateToLocalFormatted("tt.keyword.PowerPass", clientLocale) + ": " - + EnumChatFormatting.BLUE - + ePowerPass - + EnumChatFormatting.RESET - + " " - + translateToLocalFormatted("tt.keyword.SafeVoid", clientLocale) - + ": " - + EnumChatFormatting.BLUE - + eSafeVoid, - translateToLocalFormatted("tt.keyphrase.Computation_Available", clientLocale) + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(eAvailableData) - + EnumChatFormatting.RESET - + " / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(eRequiredData) - + EnumChatFormatting.RESET, - translateToLocalFormatted("tt.keyphrase.Computation_Remaining", clientLocale) + ":", - EnumChatFormatting.GREEN + GT_Utility.formatNumbers(computationRemaining / 20L) - + EnumChatFormatting.RESET - + " / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getComputationRequired()) }; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][3], - new TT_RenderedExtendedFacingTexture( - aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON - : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF) }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][3] }; - } - - @Override - public void onRemoval() { - super.onRemoval(); - for (GT_MetaTileEntity_Hatch_Holder r : eHolders) { - r.getBaseMetaTileEntity() - .setActive(false); - } - } - - @Override - protected void extraExplosions_EM() { - for (MetaTileEntity tTileEntity : eHolders) { - tTileEntity.getBaseMetaTileEntity() - .doExplosion(V[9]); - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setLong("eComputationRemaining", computationRemaining); - aNBT.setLong("eComputationRequired", computationRequired); - aNBT.setString("eMachineType", machineType); - if (holdItem != null) { - aNBT.setTag("eHold", holdItem.writeToNBT(new NBTTagCompound())); - } else { - aNBT.removeTag("eHold"); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - computationRemaining = aNBT.getLong("eComputationRemaining"); - computationRequired = aNBT.getLong("eComputationRequired"); - machineType = aNBT.hasKey("eMachineType") ? aNBT.getString("eMachineType") : assembly; - if (aNBT.hasKey("eHold")) { - holdItem = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("eHold")); - } else { - holdItem = null; - } - } - - @Override - public void stopMachine(@Nonnull ShutDownReason reason) { - super.stopMachine(reason); - for (GT_MetaTileEntity_Hatch_Holder r : eHolders) { - r.getBaseMetaTileEntity() - .setActive(false); - } - computationRequired = computationRemaining = 0; - tRecipe = null; - holdItem = null; - } - - @Override - protected boolean supportsSlotAutomation(int aSlot) { - return aSlot == getControllerSlotIndex(); - } - - @Override - public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { - if (aBaseMetaTileEntity.isServerSide()) { - if (computationRemaining > 0) { - tRecipe = null; - if (holdItem != null) { - if (ItemList.Tool_DataStick.isStackEqual(mInventory[1], false, true)) { - for (GT_Recipe.GT_Recipe_AssemblyLine tRecipe : TecTechRecipeMaps.researchableALRecipeList) { - if (GT_Utility.areStacksEqual(tRecipe.mResearchItem, holdItem, true)) { - this.tRecipe = tRecipe; - break; - } - } - } - } - if (tRecipe == null) { - holdItem = null; - computationRequired = computationRemaining = 0; - mMaxProgresstime = 0; - mEfficiencyIncrease = 0; - for (GT_MetaTileEntity_Hatch_Holder r : eHolders) { - r.getBaseMetaTileEntity() - .setActive(false); - } - } - } - } - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (computationRemaining <= 0) { - computationRemaining = 0; - mProgresstime = mMaxProgresstime; - return true; - } else { - computationRemaining -= eAvailableData; - mProgresstime = 1; - return super.onRunningTick(aStack); - } - } - - public final boolean addHolderToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Holder) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eHolders.add((GT_MetaTileEntity_Hatch_Holder) aMetaTileEntity); - } - return false; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - super.onRightclick(aBaseMetaTileEntity, aPlayer); - - if (!aBaseMetaTileEntity.isClientSide() && aPlayer instanceof EntityPlayerMP) { - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - } else { - return true; - } - return true; - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - switch (machineType) { - case scanner -> machineType = assembly; - case assembly -> machineType = scanner; - } - aPlayer.addChatComponentMessage( - new ChatComponentTranslation( - "gt.blockmachines.multimachine.em.research.mode." + machineType.replace(" ", "_"))); - } - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - screenElements - .widget( - new TextWidget().setStringSupplier( - () -> StatCollector.translateToLocalFormatted("GT5U.gui.text.researching_item", clientOutputName)) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled( - widget -> computationRequired > 0 && clientOutputName != null && !clientOutputName.isEmpty())) - .widget( - new TextWidget() - .setStringSupplier( - () -> StatCollector.translateToLocalFormatted( - "GT5U.gui.text.research_progress", - getComputationConsumed(), - getComputationRequired(), - GT_Utility.formatNumbers(getComputationProgress()))) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled( - widget -> computationRequired > 0 && clientOutputName != null && !clientOutputName.isEmpty())) - .widget(new FakeSyncWidget.LongSyncer(() -> computationRequired, aLong -> computationRequired = aLong)) - .widget(new FakeSyncWidget.LongSyncer(() -> computationRemaining, aLong -> computationRemaining = aLong)) - .widget(new FakeSyncWidget.StringSyncer(() -> { - if (tRecipe != null && tRecipe.mOutput != null) { - return tRecipe.mOutput.getDisplayName(); - } - return ""; - }, aString -> clientOutputName = aString)); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - tag.setBoolean("hasProblems", (getIdealStatus() - getRepairStatus()) > 0); - tag.setFloat("efficiency", mEfficiency / 100.0F); - tag.setBoolean("incompleteStructure", (getBaseMetaTileEntity().getErrorDisplayID() & 64) != 0); - tag.setString("machineType", machineType); - tag.setLong("computation", getComputationConsumed()); - tag.setLong("computationRequired", getComputationRequired()); - } - - private long getComputationConsumed() { - return (computationRequired - computationRemaining) / 20L; - } - - private long getComputationRequired() { - return computationRequired / 20L; - } - - private double getComputationProgress() { - return 100d - * (getComputationRequired() > 0d ? (double) getComputationConsumed() / getComputationRequired() : 0d); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - final NBTTagCompound tag = accessor.getNBTData(); - - if (tag.getBoolean("incompleteStructure")) { - currentTip.add(RED + "** INCOMPLETE STRUCTURE **" + RESET); - } - String efficiency = RESET + " Efficiency: " + tag.getFloat("efficiency") + "%"; - if (tag.getBoolean("hasProblems")) { - currentTip.add(RED + "** HAS PROBLEMS **" + efficiency); - } else if (!tag.getBoolean("incompleteStructure")) { - currentTip.add(GREEN + "Running Fine" + efficiency); - } - currentTip.add("Mode: " + tag.getString("machineType")); - currentTip.add( - String.format( - "Computation: %,d / %,d", - tag.getInteger("computation"), - tag.getInteger("computationRequired"))); - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM("main", 1, 3, 4, stackSize, hintsOnly); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (mMachine) return -1; - return survivialBuildPiece("main", stackSize, 1, 3, 4, elementBudget, source, actor, false, true); - } - - @Override - public IStructureDefinition getStructure_EM() { - return STRUCTURE_DEFINITION; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return description; - } - - private enum HolderHatchElement implements IHatchElement { - - INSTANCE; - - @Override - public List> mteClasses() { - return Collections.singletonList(GT_MetaTileEntity_Hatch_Holder.class); - } - - @Override - public IGT_HatchAdder adder() { - return GT_MetaTileEntity_EM_research::addHolderToMachineList; - } - - @Override - public long count(GT_MetaTileEntity_EM_research t) { - return t.eHolders.size(); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java deleted file mode 100644 index 60eeb842a0..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_switch.java +++ /dev/null @@ -1,291 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_HIGH; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_LOW; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_NEUTRAL; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_OK; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_TOO_LOW; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_WRONG; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional; -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; -import com.github.technus.tectech.util.CommonValues; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.util.Vec3Impl; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -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.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -/** - * Created by danie_000 on 17.12.2016. - */ -public class GT_MetaTileEntity_EM_switch extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { - - // region structure - private static final String[] description = new String[] { - EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", - "1 - Classic/Data Hatches or Computer casing", // 1 - Classic/Data Hatches or Computer casing - }; - - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - "main", - transpose(new String[][] { { "BBB", "BBB", "BBB" }, { "B~B", "BAB", "BBB" }, { "BBB", "BBB", "BBB" } })) - .addElement('A', ofBlock(sBlockCasingsTT, 3)) - .addElement( - 'B', - ofHatchAdderOptional( - GT_MetaTileEntity_EM_switch::addClassicToMachineList, - textureOffset + 1, - 1, - sBlockCasingsTT, - 1)) - .build(); - // endregion - - // region parameters - private static final INameFunction ROUTE_NAME = (base, - p) -> (p.parameterId() == 0 ? translateToLocal("tt.keyword.Destination") + " " - : translateToLocal("tt.keyword.Weight") + " ") + p.hatchId(); - private static final IStatusFunction WEI_STATUS = (base, p) -> { - double v = p.get(); - if (Double.isNaN(v)) return STATUS_WRONG; - if (v < 0) return STATUS_TOO_LOW; - if (v == 0) return STATUS_LOW; - if (Double.isInfinite(v)) return STATUS_HIGH; - return STATUS_OK; - }; - private static final IStatusFunction DST_STATUS = (base, p) -> { - if (base.weight[p.hatchId()].getStatus(false).isOk) { - double v = p.get(); - if (Double.isNaN(v)) return STATUS_WRONG; - v = (int) v; - if (v <= 0) return STATUS_TOO_LOW; - return STATUS_OK; - } - return STATUS_NEUTRAL; - }; - protected Parameters.Group.ParameterIn[] dst; - protected Parameters.Group.ParameterIn[] weight; - // endregion - - public GT_MetaTileEntity_EM_switch(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_EM_switch(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_switch(mName); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - return structureCheck_EM("main", 1, 1, 0); - } - - @Override - @NotNull - protected CheckRecipeResult checkProcessing_EM() { - short thingsActive = 0; - for (GT_MetaTileEntity_Hatch_InputData di : eInputData) { - if (di.q != null) { - thingsActive++; - } - } - - if (thingsActive > 0) { - thingsActive += eOutputData.size(); - mEUt = -(int) V[7]; - eAmpereFlow = 1 + (thingsActive >> 2); - mMaxProgresstime = 20; - mEfficiencyIncrease = 10000; - return SimpleCheckRecipeResult.ofSuccess("routing"); - } - return SimpleCheckRecipeResult.ofFailure("no_routing"); - } - - @Override - public void outputAfterRecipe_EM() { - if (!eOutputData.isEmpty()) { - double total = 0; - double weight; - for (int i = 0; i < 10; i++) { // each param pair - weight = this.weight[i].get(); - if (weight > 0 && dst[i].get() >= 0) { - total += weight; // Total weighted div - } - } - - Vec3Impl pos = new Vec3Impl( - getBaseMetaTileEntity().getXCoord(), - getBaseMetaTileEntity().getYCoord(), - getBaseMetaTileEntity().getZCoord()); - - QuantumDataPacket pack = new QuantumDataPacket(0L).unifyTraceWith(pos); - if (pack == null) { - return; - } - for (GT_MetaTileEntity_Hatch_InputData hatch : eInputData) { - if (hatch.q == null || hatch.q.contains(pos)) { - continue; - } - pack = pack.unifyPacketWith(hatch.q); - if (pack == null) { - return; - } - } - - long remaining = pack.getContent(); - - double dest; - for (int i = 0; i < 10; i++) { - dest = dst[i].get(); - weight = this.weight[i].get(); - if (weight > 0 && dest >= 0) { - int outIndex = (int) dest - 1; - if (outIndex < 0 || outIndex >= eOutputData.size()) { - continue; - } - GT_MetaTileEntity_Hatch_OutputData out = eOutputData.get(outIndex); - if (Double.isInfinite(total)) { - if (Double.isInfinite(weight)) { - out.q = new QuantumDataPacket(remaining).unifyTraceWith(pack); - break; - } - } else { - long part = (long) Math.floor(pack.getContent() * weight / total); - if (part > 0) { - remaining -= part; - if (remaining > 0) { - out.q = new QuantumDataPacket(part).unifyTraceWith(pack); - } else if (part + remaining > 0) { - out.q = new QuantumDataPacket(part + remaining).unifyTraceWith(pack); - break; - } else { - break; - } - } - } - } - } - } - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.switch.name")) // Machine Type: Network - // Switch With QoS - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.switch.desc.0")) // Controller block of the - // Network - // Switch With QoS - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.switch.desc.1")) // Used to route and - // distribute computation - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.switch.desc.2")) // Needs a Parametrizer to - // be configured - .addSeparator() - .beginStructureBlock(3, 3, 3, false) - .addController(translateToLocal("tt.keyword.Structure.FrontCenter")) // Controller: Front center - .addCasingInfoMin(translateToLocal("gt.blockcasingsTT.1.name"), 0, false) // 0x Computer Casing - // (minimum) - .addOtherStructurePart( - translateToLocal("gt.blockcasingsTT.3.name"), - translateToLocal("tt.keyword.Structure.Center")) // Advanced Computer Casing: Center - .addOtherStructurePart( - translateToLocal("tt.keyword.Structure.DataConnector"), - translateToLocal("tt.keyword.Structure.AnyComputerCasing"), - 2) // Data Connector: Any Computer Casing - .addOtherStructurePart( - translateToLocal("gt.blockmachines.hatch.param.tier.05.name"), - translateToLocal("tt.keyword.Structure.AnyComputerCasing"), - 2) // Parametrizer: Any Computer Casing - .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasing"), 1) // Energy Hatch: Any - // Computer Casing - .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasing"), 1) // Maintenance - // Hatch: Any - // Computer Casing - .toolTipFinisher(CommonValues.TEC_MARK_EM); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][1], - new TT_RenderedExtendedFacingTexture( - aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON - : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF) }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][1] }; - } - - public static final ResourceLocation activitySound = new ResourceLocation(Reference.MODID + ":fx_hi_freq"); - - @Override - @SideOnly(Side.CLIENT) - protected ResourceLocation getActivitySound() { - return activitySound; - } - - @Override - protected void parametersInstantiation_EM() { - dst = new Parameters.Group.ParameterIn[10]; - weight = new Parameters.Group.ParameterIn[10]; - for (int i = 0; i < 10; i++) { - Parameters.Group hatch = parametrization.getGroup(i); - dst[i] = hatch.makeInParameter(0, i, ROUTE_NAME, DST_STATUS); - weight[i] = hatch.makeInParameter(1, 0, ROUTE_NAME, WEI_STATUS); - } - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM("main", 1, 1, 0, stackSize, hintsOnly); - } - - @Override - public IStructureDefinition getStructure_EM() { - return STRUCTURE_DEFINITION; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return description; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java deleted file mode 100644 index 8d75ea7d8e..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_EM_transformer.java +++ /dev/null @@ -1,236 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsTT; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.DynamoMulti; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.EnergyMulti; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static gregtech.api.GregTech_API.sBlockCasings1; -import static gregtech.api.enums.GT_HatchElement.Dynamo; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; -import com.github.technus.tectech.util.CommonValues; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -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.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -/** - * Created by danie_000 on 17.12.2016. - */ -public class GT_MetaTileEntity_EM_transformer extends GT_MetaTileEntity_MultiblockBase_EM - implements ISurvivalConstructable { - - // Gives a one-chance grace period for deforming the multi. This is to allow you to hotswap hatches without - // powerfailing due to an unlucky tick timing - this grace period is already a part of base TecTech but the - // tick timer is essentially random, so it was extremely unreliable. Now you are guaranteed the length - // of one structure check to finish your hotswap before it deforms. - private boolean grace = false; - - @Override - public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - casingCount = 0; - if (structureCheck_EM("main", 1, 1, 0) && casingCount >= 5) { - grace = true; - return true; - } else if (grace) { - grace = false; - return true; - } - return false; - } - - @Override - public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { - if (!mMachine) { - aBaseMetaTileEntity.disableWorking(); - } - } - - // region structure - private static final String[] description = new String[] { - EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", - translateToLocal("gt.blockmachines.multimachine.em.transformer.hint"), // 1 - Energy IO Hatches or High - // Power Casing - }; - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - "main", - new String[][] { { "111", "1~1", "111", }, { "111", "101", "111", }, { "111", "111", "111", }, }) - .addElement('0', ofBlock(sBlockCasings1, 15)) - .addElement( - '1', - buildHatchAdder(GT_MetaTileEntity_EM_transformer.class).atLeast(Energy, EnergyMulti, Dynamo, DynamoMulti) - .casingIndex(textureOffset) - .dot(1) - .buildAndChain(onElementPass(t -> t.casingCount++, ofBlock(sBlockCasingsTT, 0)))) - .build(); - private int casingCount = 0; - - @Override - public IStructureDefinition getStructure_EM() { - return STRUCTURE_DEFINITION; - } - // endregion - - public GT_MetaTileEntity_EM_transformer(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - eDismantleBoom = false; - } - - public GT_MetaTileEntity_EM_transformer(String aName) { - super(aName); - eDismantleBoom = false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_transformer(mName); - } - - @Override - @NotNull - protected CheckRecipeResult checkProcessing_EM() { - if (ePowerPass) { - mEfficiencyIncrease = 10000; - mMaxProgresstime = 20; - } else { - mEfficiencyIncrease = 0; - mMaxProgresstime = 0; - } - eAmpereFlow = 0; - mEUt = 0; - return ePowerPass ? SimpleCheckRecipeResult.ofSuccess("routing") - : SimpleCheckRecipeResult.ofFailure("no_routing"); - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.transformer.name")) // Machine Type: - // Transformer - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.transformer.desc.0")) // Controller block of - // the - // Active Transformer - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.transformer.desc.1")) // Can transform to - // and from any - // voltage - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.transformer.desc.2")) // Only 0.004% power - // loss, HAYO! - .addInfo(translateToLocal("gt.blockmachines.multimachine.em.transformer.desc.3")) // Will explode if - // broken while - // running - .addSeparator() - .beginStructureBlock(3, 3, 3, false) - .addController(translateToLocal("tt.keyword.Structure.FrontCenter")) // Controller: Front center - .addCasingInfoMin(translateToLocal("gt.blockcasingsTT.0.name"), 5, false) // 5x High Power Casing - // (minimum) - .addOtherStructurePart( - translateToLocal("tt.keyword.Structure.SuperconductingCoilBlock"), - translateToLocal("tt.keyword.Structure.Center")) // SuperconductingCoilBlock: Center - .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) // Energy Hatch: Any - // High Power Casing - .addDynamoHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) // Dynamo Hatch: Any - // High Power Casing - .toolTipFinisher(CommonValues.TEC_MARK_GENERAL); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][0], - new TT_RenderedExtendedFacingTexture( - aActive ? GT_MetaTileEntity_MultiblockBase_EM.ScreenON - : GT_MetaTileEntity_MultiblockBase_EM.ScreenOFF) }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][0] }; - } - - public static final ResourceLocation activitySound = new ResourceLocation(Reference.MODID + ":fx_noise"); - - @Override - @SideOnly(Side.CLIENT) - protected ResourceLocation getActivitySound() { - return activitySound; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - return true; - } - - @Override - public boolean doRandomMaintenanceDamage() { - return true; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if ((aTick & 31) == 31) { - ePowerPass = aBaseMetaTileEntity.isAllowedToWork(); - } - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM("main", 1, 1, 0, stackSize, hintsOnly); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (mMachine) return -1; - return survivialBuildPiece("main", stackSize, 1, 1, 0, elementBudget, source, actor, false, true); - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return description; - } - - @Override - public boolean isPowerPassButtonEnabled() { - return true; - } - - @Override - public boolean isSafeVoidButtonEnabled() { - return false; - } - - @Override - public boolean isAllowedToWorkButtonEnabled() { - return true; - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java deleted file mode 100644 index 2efb624fb9..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_microwave.java +++ /dev/null @@ -1,348 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.loader.MainLoader.microwaving; -import static com.github.technus.tectech.recipe.TT_recipeAdder.nullItem; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_OK; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_TOO_HIGH; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_TOO_LOW; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_WRONG; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.GregTech_API.sBlockCasings4; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional; -import static net.minecraft.util.AxisAlignedBB.getBoundingBox; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.ArrayList; -import java.util.HashSet; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.item.ItemStack; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; -import com.github.technus.tectech.util.CommonValues; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.util.Vec3Impl; - -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.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReason; - -/** - * Created by danie_000 on 17.12.2016. - */ -public class GT_MetaTileEntity_TM_microwave extends GT_MetaTileEntity_MultiblockBase_EM implements IConstructable { - - // region variables - private boolean hasBeenPausedThisCycle = false; - // endregion - - // region structure - // use multi A energy inputs, use less power the longer it runs - private static final String[] description = new String[] { - EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", - translateToLocal("gt.blockmachines.multimachine.tm.microwave.hint.0"), // 1 - Classic Hatches or Clean - // Stainless Steel - // Casing - translateToLocal("gt.blockmachines.multimachine.tm.microwave.hint.1"), // Also acts like a hopper so give it - // an Output - // Bus - }; - - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - "main", - transpose( - new String[][] { { "AAAAA", "A---A", "A---A", "A---A", "AAAAA" }, - { "AAAAA", "A---A", "A---A", "A---A", "AAAAA" }, { "AA~AA", "A---A", "A---A", "A---A", "AAAAA" }, - { "ABBBA", "BAAAB", "BAAAB", "BAAAB", "ABBBA" } })) - .addElement('A', ofBlock(sBlockCasings4, 1)) - .addElement( - 'B', - ofHatchAdderOptional(GT_MetaTileEntity_TM_microwave::addClassicToMachineList, 49, 1, sBlockCasings4, 1)) - .build(); - // endregion - - // region parameters - protected Parameters.Group.ParameterIn powerSetting, timerSetting; - protected Parameters.Group.ParameterOut timerValue, remainingTime; - private static final INameFunction POWER_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.microwave.cfgi.0"); // Power setting - private static final INameFunction TIMER_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.microwave.cfgi.1"); // Timer setting - - private static final INameFunction TIMER_VALUE_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.microwave.cfgo.0"); // Timer value - private static final INameFunction TIMER_REMAINING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.microwave.cfgo.1"); // Timer remaining - private static final IStatusFunction POWER_STATUS = (base, p) -> LedStatus - .fromLimitsInclusiveOuterBoundary(p.get(), 300, 1000, 1000, Double.POSITIVE_INFINITY); - private static final IStatusFunction TIMER_STATUS = (base, p) -> { - double value = p.get(); - if (Double.isNaN(value)) return STATUS_WRONG; - value = (int) value; - if (value <= 0) return STATUS_TOO_LOW; - if (value > 3000) return STATUS_TOO_HIGH; - return STATUS_OK; - }; - // endregion - - public GT_MetaTileEntity_TM_microwave(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_TM_microwave(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_TM_microwave(mName); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - return structureCheck_EM("main", 2, 2, 0); - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing_EM() { - hasBeenPausedThisCycle = false; - if ((int) powerSetting.get() < 300 || timerSetting.get() <= 0 || timerSetting.get() > 3000) { - return SimpleCheckRecipeResult.ofFailure("invalid_timer"); - } - if (remainingTime.get() <= 0) { - remainingTime.set(timerSetting.get()); - timerValue.set(0); - } - mEUt = -((int) powerSetting.get() >> 1); - eAmpereFlow = 1; - mMaxProgresstime = 20; - mEfficiencyIncrease = 10000; - return SimpleCheckRecipeResult.ofSuccess("microwaving"); - } - - @Override - public void outputAfterRecipe_EM() { - if (hasBeenPausedThisCycle) { - return; // skip timer and actions if paused - } - timerValue.set(timerValue.get() + 1); - remainingTime.set(timerSetting.get() - timerValue.get()); - IGregTechTileEntity mte = getBaseMetaTileEntity(); - Vec3Impl xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -1, 2)); - double xPos = mte.getXCoord() + 0.5f + xyzOffsets.get0(); - double yPos = mte.getYCoord() + 0.5f + xyzOffsets.get1(); - double zPos = mte.getZCoord() + 0.5f + xyzOffsets.get2(); - AxisAlignedBB aabb = getBoundingBox(-2, -2, -2, 2, 2, 2).offset(xPos, yPos, zPos); - xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -4, 0)); - Vec3Impl xyzExpansion = getExtendedFacing().getWorldOffset(new Vec3Impl(1, 0, 1)) - .abs(); - int power = (int) powerSetting.get(); - int damagingFactor = Math.min(power >> 6, 8) + Math.min(power >> 8, 24) - + Math.min(power >> 12, 48) - + (power >> 18); - - ArrayList itemsToOutput = new ArrayList<>(); - HashSet tickedStuff = new HashSet<>(); - - boolean inside = true; - do { - for (Object entity : mte.getWorld() - .getEntitiesWithinAABBExcludingEntity(null, aabb)) { - if (entity instanceof Entity) { - if (tickedStuff.add((Entity) entity)) { - if (inside && entity instanceof EntityItem) { - GT_Recipe tRecipe = RecipeMaps.microwaveRecipes.findRecipe( - mte, - null, - true, - 128, - null, - null, - new ItemStack[] { ((EntityItem) entity).getEntityItem() }); - if (tRecipe == null || tRecipe.mInputs.length == 0 || tRecipe.mInputs[0].stackSize != 1) { - itemsToOutput.add(((EntityItem) entity).getEntityItem()); - } else { - ItemStack newStuff = tRecipe.getOutput(0) - .copy(); - newStuff.stackSize = ((EntityItem) entity).getEntityItem().stackSize; - itemsToOutput.add(newStuff); - } - ((EntityItem) entity).delayBeforeCanPickup = 2; - ((EntityItem) entity).setDead(); - } else if (entity instanceof EntityLivingBase) { - if (!GT_Utility.isWearingFullElectroHazmat((EntityLivingBase) entity)) { - ((EntityLivingBase) entity).attackEntityFrom(microwaving, damagingFactor); - } - } - } - } - } - aabb.offset(xyzOffsets.get0(), xyzOffsets.get1(), xyzOffsets.get2()); - aabb = aabb.expand(xyzExpansion.get0() * 1.5, xyzExpansion.get1() * 1.5, xyzExpansion.get2() * 1.5); - inside = false; - damagingFactor >>= 1; - } while (damagingFactor > 0); - - mOutputItems = itemsToOutput.toArray(nullItem); - - if (remainingTime.get() <= 0) { - mte.getWorld() - .playSoundEffect(xPos, yPos, zPos, Reference.MODID + ":microwave_ding", 1, 1); - stopMachine(); - } - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.tm.microwave.name")) // Machine Type: - // Microwave Grinder - .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.0")) // Controller block of - // the - // Microwave Grinder - .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.1")) // Starts a timer when - // enabled - .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.2")) // While the timer is - // running - // anything inside the machine - // will take damage - .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.3")) // The machine will also - // collect - // any items inside of it - .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.4")) // Can be configured - // with a Parametrizer - .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.5")) // (Do not insert a - // Wither) - .addSeparator() - .beginStructureBlock(5, 4, 5, true) - .addController(translateToLocal("tt.keyword.Structure.FrontCenter")) // Controller: Front center - .addCasingInfoMin(translateToLocal("tt.keyword.Structure.StainlessSteelCasing"), 60, false) // 60x - // Stainless - // Steel - // Casing (minimum) - .addOtherStructurePart( - translateToLocal("tt.keyword.Structure.DataConnector"), - translateToLocal("tt.keyword.Structure.AnyOuterCasingOnBottom"), - 2) // Output Bus: Any outer casing on the bottom layer - .addOtherStructurePart( - translateToLocal("gt.blockmachines.hatch.param.tier.05.name"), - translateToLocal("tt.keyword.Structure.Optional") + " " - + translateToLocal("tt.keyword.Structure.AnyOuterCasingOnBottom"), - 2) // Parametrizer: (optional) Any outer casing on the bottom layer - .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyOuterCasingOnBottom"), 1) // Energy Hatch: Any - // outer casing on - // the bottom layer - .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyOuterCasingOnBottom"), 1) // Maintenance - // Hatch: Any - // outer casing - // on the - // bottom layer - .toolTipFinisher(CommonValues.THETA_MOVEMENT); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][49], - new TT_RenderedExtendedFacingTexture( - aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE - : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE) }; - } else if (side == facing.getOpposite()) { - return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][49], - aActive ? Textures.BlockIcons.casingTexturePages[0][52] - : Textures.BlockIcons.casingTexturePages[0][53] }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][49] }; - } - - @Override - protected void parametersInstantiation_EM() { - Parameters.Group hatch_0 = parametrization.getGroup(0, true); - powerSetting = hatch_0.makeInParameter(0, 1000, POWER_SETTING_NAME, POWER_STATUS); - timerSetting = hatch_0.makeInParameter(1, 360, TIMER_SETTING_NAME, TIMER_STATUS); - - timerValue = hatch_0.makeOutParameter(0, 0, TIMER_VALUE_NAME, TIMER_STATUS); - remainingTime = hatch_0.makeOutParameter(1, 360, TIMER_REMAINING_NAME, TIMER_STATUS); - } - - @Override - public void stopMachine(@Nonnull ShutDownReason reason) { - super.stopMachine(reason); - remainingTime.set(timerSetting.get()); - timerValue.set(0); - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (eSafeVoid) { - hasBeenPausedThisCycle = true; - } - return hasBeenPausedThisCycle || super.onRunningTick(aStack); // consume eu and other resources if not paused - } - - // TODO Why is the basetype 1?? - @Override - public byte getTileEntityBaseType() { - return 1; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM("main", 2, 2, 0, stackSize, hintsOnly); - } - - @Override - public IStructureDefinition getStructure_EM() { - return STRUCTURE_DEFINITION; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return description; - } - - @Override - public boolean isPowerPassButtonEnabled() { - return true; - } - - @Override - public boolean isSafeVoidButtonEnabled() { - return false; - } - - @Override - public boolean isAllowedToWorkButtonEnabled() { - return true; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java deleted file mode 100644 index 410d045a20..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ /dev/null @@ -1,1010 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi; - -import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.generateTeslaNodeMap; -import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.powerTeslaNodeMap; -import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetAdd; -import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetRemove; -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.textureOffset; -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.sBlockCasingsBA0; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.DynamoMulti; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.EnergyMulti; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM.HatchElement.Param; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_HIGH; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_LOW; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_NEUTRAL; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_OK; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_TOO_HIGH; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_TOO_LOW; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_WRONG; -import static com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus.STATUS_WTF; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Dynamo; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static java.lang.Math.min; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import javax.annotation.Nonnull; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.loader.NetworkDispatcher; -import com.github.technus.tectech.mechanics.spark.RendererMessage; -import com.github.technus.tectech.mechanics.spark.ThaumSpark; -import com.github.technus.tectech.mechanics.tesla.ITeslaConnectable; -import com.github.technus.tectech.mechanics.tesla.ITeslaConnectableSimple; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Capacitor; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Param; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; -import com.github.technus.tectech.util.CommonValues; -import com.google.common.collect.Multimap; -import com.google.common.collect.MultimapBuilder; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.util.Vec3Impl; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.api.util.shutdown.ShutDownReason; - -public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_MultiblockBase_EM - implements ISurvivalConstructable, ITeslaConnectable { - - // Interface fields - private final Multimap teslaNodeMap = MultimapBuilder.treeKeys() - .linkedListValues() - .build(); - private final HashSet sparkList = new HashSet<>(); - private int sparkCount = 10; - - // region variables - private static final int transferRadiusTowerFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TOWER; // Default - // is 32 - private static final int transferRadiusTransceiverFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TRANSCEIVER; // Default - // is - // 16 - private static final int transferRadiusCoverUltimateFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_COVER; // Default - // is - // 16 - private static final int plasmaRangeMultiT1 = TecTech.configTecTech.TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1; // Default - // is 2 - private static final int plasmaRangeMultiT2 = TecTech.configTecTech.TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2; // Default - // is 4 - private static final int heliumUse = TecTech.configTecTech.TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM; // Default is - // 100 - private static final int nitrogenUse = TecTech.configTecTech.TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN; // Default - // is 50 - private static final int radonUse = TecTech.configTecTech.TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON; // Default is 50 - private static final boolean visualEffect = TecTech.configTecTech.TESLA_VISUAL_EFFECT; // Default is true - // Default is {1, 1, 1} - private static final int[] plasmaTierLoss = new int[] { TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T0, - TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T1, TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T2 }; - private static final float overDriveLoss = TecTech.configTecTech.TESLA_MULTI_LOSS_FACTOR_OVERDRIVE; // Default is - // 0.25F; - private static final boolean doFluidOutput = TecTech.configTecTech.TESLA_MULTI_GAS_OUTPUT; // Default is false - - // Face icons - private static Textures.BlockIcons.CustomIcon ScreenOFF; - private static Textures.BlockIcons.CustomIcon ScreenON; - - private int mTier = 0; // Determines max voltage (LV to ZPM) - private int plasmaTier = 0; // 0 is None, 1 is Helium or Nitrogen, 2 is Radon (Does not match actual plasma tiers) - - private FluidStack[] mOutputFluidsQueue; // Used to buffer the fluid outputs, so the tesla takes a second to 'cool' - // any plasma it - // would output as a gas - - private final ArrayList eCapacitorHatches = new ArrayList<>(); // Capacitor - // hatches which - // determine the - // max voltage - // tier and count - // of amps - - private long energyCapacity = 0; // Total energy storage limited by capacitors - private long outputVoltageMax = 0; // Tesla voltage output limited by capacitors - private int vTier = -1; // Tesla voltage tier limited by capacitors - private long outputCurrentMax = 0; // Tesla current output limited by capacitors - - // outputVoltage and current after settings - private long outputVoltage; - private long outputCurrent; - - // Prevents unnecessary offset calculation, saving on lag - private byte oldRotation = -1; - private ForgeDirection oldOrientation = ForgeDirection.UNKNOWN; - // Location of the center of the sphere on top of the tower, used as the Thaumcraft lightning and origin - public Vec3Impl posTop = Vec3Impl.NULL_VECTOR; - // endregion - - // region structure - private static final String[] description = new String[] { - EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", - translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.hint.0"), // 1 - Classic Hatches, Capacitor - // Hatches or Tesla - // Base Casing - translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.hint.1"), // 2 - ""Titanium frames"" - }; - - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - "main", - transpose( - new String[][] { { " ", " ", " BBB ", " BBB ", " BBB ", " ", " " }, - { " ", " BBB ", " BBBBB ", " BBBBB ", " BBBBB ", " BBB ", " " }, - { " ", " BBB ", " BBBBB ", " BBBBB ", " BBBBB ", " BBB ", " " }, - { " ", " BBB ", " BBBBB ", " BBBBB ", " BBBBB ", " BBB ", " " }, - { " ", " ", " BBB ", " BCB ", " BBB ", " ", " " }, - { " ", " ", " ", " C ", " ", " ", " " }, - { " ", " BBB ", " B F B ", " BFCFB ", " B F B ", " BBB ", " " }, - { " ", " ", " ", " C ", " ", " ", " " }, - { " ", " BBB ", " B F B ", " BFCFB ", " B F B ", " BBB ", " " }, - { " ", " ", " ", " C ", " ", " ", " " }, - { " ", " BBB ", " B F B ", " BFCFB ", " B F B ", " BBB ", " " }, - { " ", " ", " ", " C ", " ", " ", " " }, - { " ", " BBB ", " B F B ", " BFCFB ", " B F B ", " BBB ", " " }, - { " ", " ", " ", " C ", " ", " ", " " }, - { " ", " ", " ", " C ", " ", " ", " " }, - { " ", " DDD ", " D D ", " D C D ", " D D ", " DDD ", " " }, - { " EE~EE ", "EAAAAAE", "EADDDAE", "EADADAE", "EADDDAE", "EAAAAAE", " EEEEE " } })) - .addElement('A', ofBlock(sBlockCasingsBA0, 6)) - .addElement('B', ofBlock(sBlockCasingsBA0, 7)) - .addElement('C', ofBlock(sBlockCasingsBA0, 8)) - .addElement( - 'D', - ofBlocksTiered( - (block, meta) -> block != sBlockCasingsBA0 ? null - : meta <= 5 ? Integer.valueOf(meta) : meta == 9 ? 6 : null, - IntStream.range(0, 7) - .map(tier -> tier == 6 ? 9 : tier) - .mapToObj(meta -> Pair.of(sBlockCasingsBA0, meta)) - .collect(Collectors.toList()), - -1, - (t, v) -> t.mTier = v, - t -> t.mTier)) - .addElement( - 'E', - buildHatchAdder(GT_MetaTileEntity_TM_teslaCoil.class) - .atLeast( - CapacitorHatchElement.INSTANCE, - EnergyMulti, - Energy, - DynamoMulti, - Dynamo, - InputHatch, - OutputHatch, - Param, - Maintenance) - .dot(1) - .casingIndex(textureOffset + 16 + 6) - .buildAndChain(sBlockCasingsBA0, 6)) - .addElement('F', ofFrame(Materials.Titanium)) - .build(); - // endregion - - // region parameters - protected Parameters.Group.ParameterIn popogaSetting, histLowSetting, histHighSetting, transferRadiusTowerSetting, - transferRadiusTransceiverSetting, transferRadiusCoverUltimateSetting, outputVoltageSetting, - outputCurrentSetting, sortTimeMinSetting, overDriveSetting; - protected Parameters.Group.ParameterOut popogaDisplay, transferRadiusTowerDisplay, transferRadiusTransceiverDisplay, - transferRadiusCoverUltimateDisplay, outputVoltageDisplay, outputCurrentDisplay, outputMaxDisplay, - energyCapacityDisplay, energyStoredDisplay, energyFractionDisplay, sortTimeDisplay; - - private static final INameFunction HYSTERESIS_LOW_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.0"); // Hysteresis low setting - private static final INameFunction HYSTERESIS_HIGH_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.1"); // Hysteresis high setting - private static final INameFunction TRANSFER_RADIUS_TOWER_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.2"); // Tesla Towers transfer radius - // setting - private static final INameFunction TRANSFER_RADIUS_TRANSCEIVER_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.3"); // Tesla Transceiver transfer - // radius setting - private static final INameFunction TRANSFER_RADIUS_COVER_ULTIMATE_SETTING_NAME = ( - base, p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.4"); // Tesla Ultimate Cover - // transfer radius - // setting - private static final INameFunction OUTPUT_VOLTAGE_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.5"); // Output voltage setting - private static final INameFunction OUTPUT_CURRENT_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.6"); // Output current setting - private static final INameFunction SCAN_TIME_MIN_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.7"); // Scan time Min setting - private static final INameFunction OVERDRIVE_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.8"); // Overdrive setting - private static final INameFunction POPOGA_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.9"); // Unused - - private static final INameFunction TRANSFER_RADIUS_TOWER_DISPLAY_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.0"); // Tesla Towers transfer radius - // display - private static final INameFunction TRANSFER_RADIUS_TRANSCEIVER_DISPLAY_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.1"); // Tesla Transceiver transfer - // radius display - private static final INameFunction TRANSFER_RADIUS_COVER_ULTIMATE_DISPLAY_NAME = ( - base, p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.2"); // Tesla Ultimate Cover - // transfer radius - // display - private static final INameFunction OUTPUT_VOLTAGE_DISPLAY_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.3"); // Output voltage display - private static final INameFunction OUTPUT_MAX_DISPLAY_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.9"); // Output max display - private static final INameFunction OUTPUT_CURRENT_DISPLAY_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.4"); // Output current display - private static final INameFunction ENERGY_CAPACITY_DISPLAY_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.5"); // Energy Capacity display - private static final INameFunction ENERGY_STORED_DISPLAY_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.6"); // Energy Stored display - private static final INameFunction ENERGY_FRACTION_DISPLAY_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.7"); // Energy Fraction display - private static final INameFunction SCAN_TIME_DISPLAY_NAME = (base, - p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.8"); // Scan time display - - private static final IStatusFunction HYSTERESIS_LOW_STATUS = (base, p) -> { - double value = p.get(); - if (Double.isNaN(value)) { - return STATUS_WRONG; - } - if (value <= 0.05) return STATUS_TOO_LOW; - if (value > base.histHighSetting.get()) return STATUS_TOO_HIGH; - return STATUS_OK; - }; - private static final IStatusFunction HYSTERESIS_HIGH_STATUS = (base, p) -> { - double value = p.get(); - if (Double.isNaN(value)) return STATUS_WRONG; - if (value <= base.histLowSetting.get()) return STATUS_TOO_LOW; - if (value > 0.95) return STATUS_TOO_HIGH; - return STATUS_OK; - }; - private static final IStatusFunction TRANSFER_RADIUS_TOWER_STATUS = (base, p) -> { - double value = p.get(); - if (Double.isNaN(value)) return STATUS_WRONG; - value = (int) value; - if (value < 0) return STATUS_TOO_LOW; - if (value > transferRadiusTowerFromConfig) return STATUS_HIGH; - if (value < transferRadiusTowerFromConfig) return STATUS_LOW; - return STATUS_OK; - }; - private static final IStatusFunction TRANSFER_RADIUS_TRANSCEIVER_STATUS = (base, - p) -> { - double value = p.get(); - if (Double.isNaN(value)) return STATUS_WRONG; - value = (int) value; - if (value < 0) return STATUS_TOO_LOW; - if (value > transferRadiusTransceiverFromConfig) return STATUS_HIGH; - if (value < transferRadiusTransceiverFromConfig) return STATUS_LOW; - return STATUS_OK; - }; - private static final IStatusFunction TRANSFER_RADIUS_COVER_ULTIMATE_STATUS = (base, - p) -> { - double value = p.get(); - if (Double.isNaN(value)) return STATUS_WRONG; - value = (int) value; - if (value < 0) return STATUS_TOO_LOW; - if (value > transferRadiusCoverUltimateFromConfig) return STATUS_HIGH; - if (value < transferRadiusCoverUltimateFromConfig) return STATUS_LOW; - return STATUS_OK; - }; - private static final IStatusFunction OUTPUT_VOLTAGE_OR_CURRENT_STATUS = (base, - p) -> { - double value = p.get(); - if (Double.isNaN(value)) return STATUS_WRONG; - value = (long) value; - if (value == -1) return STATUS_OK; - if (value <= 0) return STATUS_TOO_LOW; - return STATUS_OK; - }; - private static final IStatusFunction SCAN_TIME_MIN_STATUS = (base, p) -> { - double value = p.get(); - if (Double.isNaN(value)) return STATUS_WRONG; - value = (int) value; - if (value < 100) return STATUS_TOO_LOW; - if (value == 100) return STATUS_OK; - return STATUS_HIGH; - }; - private static final IStatusFunction OVERDRIVE_STATUS = (base, p) -> { - double value = p.get(); - if (Double.isNaN(value)) return STATUS_WRONG; - value = (int) value; - if (value < 0) return STATUS_TOO_LOW; - if (value == 0) return STATUS_LOW; - return STATUS_HIGH; - }; - private static final IStatusFunction POPOGA_STATUS = (base, p) -> { - if (base.getBaseMetaTileEntity() - .getWorld() - .isThundering()) { - return STATUS_WTF; - } - return STATUS_NEUTRAL; - }; - private static final IStatusFunction SCAN_TIME_STATUS = (base, p) -> { - double value = p.get(); - if (Double.isNaN(value)) return STATUS_WRONG; - value = (int) value; - if (value == 0) return STATUS_HIGH; - return STATUS_LOW; - }; - private static final IStatusFunction POWER_STATUS = (base, p) -> { - double value = p.get(); - if (Double.isNaN(value)) return STATUS_WRONG; - value = (long) value; - if (value > 0) { - return STATUS_OK; - } else { - return STATUS_LOW; - } - }; - private static final IStatusFunction ENERGY_STATUS = (base, p) -> { - double value = p.get(); - if (Double.isNaN(value)) return STATUS_WRONG; - if (base.energyFractionDisplay.get() > base.histHighSetting.get()) { - return STATUS_HIGH; - } else if (base.energyFractionDisplay.get() < base.histLowSetting.get()) { - return STATUS_LOW; - } else { - return STATUS_OK; - } - }; - // endregion - - public GT_MetaTileEntity_TM_teslaCoil(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_TM_teslaCoil(String aName) { - super(aName); - } - - private float getRangeMulti(int mTier, int vTier) { - // By Default: - // Helium and Nitrogen Plasmas will double the range - // Radon will quadruple the range - int plasmaBoost; - switch (plasmaTier) { - case 2: - plasmaBoost = plasmaRangeMultiT2; - break; - case 1: - plasmaBoost = plasmaRangeMultiT1; - break; - default: - plasmaBoost = 1; - } - - // Over-tiered coils will add +25% range - if (vTier > mTier) { - return 1.25F * plasmaBoost; - } - return 1F * plasmaBoost; - } - - private void checkPlasmaBoost() { - // If there's fluid in the queue, try to output it - // That way it takes at least a second to 'process' the plasma - if (mOutputFluidsQueue != null) { - mOutputFluids = mOutputFluidsQueue; - mOutputFluidsQueue = null; - } - - for (GT_MetaTileEntity_Hatch_Input fluidHatch : mInputHatches) { - if (fluidHatch.mFluid != null) { - if (fluidHatch.mFluid.isFluidEqual(Materials.Helium.getPlasma(1)) - && fluidHatch.mFluid.amount >= heliumUse) { - fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - heliumUse; - if (doFluidOutput) { - mOutputFluidsQueue = new FluidStack[] { Materials.Helium.getGas(heliumUse) }; - } - plasmaTier = 1; - return; - } else if (fluidHatch.mFluid.isFluidEqual(Materials.Nitrogen.getPlasma(1)) - && fluidHatch.mFluid.amount >= nitrogenUse) { - fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - nitrogenUse; - if (doFluidOutput) { - mOutputFluidsQueue = new FluidStack[] { Materials.Nitrogen.getGas(nitrogenUse) }; - } - plasmaTier = 1; - return; - } else if (fluidHatch.mFluid.isFluidEqual(Materials.Radon.getPlasma(1)) - && fluidHatch.mFluid.amount >= radonUse) { - fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - radonUse; - if (doFluidOutput) { - mOutputFluidsQueue = new FluidStack[] { Materials.Radon.getGas(radonUse) }; - } - plasmaTier = 2; - return; - } - } - } - plasmaTier = 0; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_TM_teslaCoil(mName); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - for (GT_MetaTileEntity_Hatch_Capacitor cap : filterValidMTEs(eCapacitorHatches)) { - cap.getBaseMetaTileEntity() - .setActive(false); - } - eCapacitorHatches.clear(); - - mTier = -1; - - if (structureCheck_EM("main", 3, 16, 0)) { - for (GT_MetaTileEntity_Hatch_Capacitor cap : filterValidMTEs(eCapacitorHatches)) { - cap.getBaseMetaTileEntity() - .setActive(iGregTechTileEntity.isActive()); - } - - // Only recalculate offsets on orientation or rotation change - if (oldRotation != getExtendedFacing().ordinal() - || oldOrientation != iGregTechTileEntity.getFrontFacing()) { - oldRotation = (byte) getExtendedFacing().ordinal(); - oldOrientation = iGregTechTileEntity.getFrontFacing(); - - Vec3Impl posBMTE = new Vec3Impl( - getBaseMetaTileEntity().getXCoord(), - getBaseMetaTileEntity().getYCoord(), - getBaseMetaTileEntity().getZCoord()); - - // Calculate coordinates of the middle bottom - posTop = getExtendedFacing().getWorldOffset(new Vec3Impl(0, 0, 2)) - .add(posBMTE); - - // Calculate coordinates of the top sphere - posTop = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -14, 2)) - .add(posBMTE); - } - // Generate node map - if (!getBaseMetaTileEntity().isClientSide()) { - teslaSimpleNodeSetAdd(this); - generateTeslaNodeMap(this); - } - return true; - } - return false; - } - - @Override - @NotNull - protected CheckRecipeResult checkProcessing_EM() { - checkPlasmaBoost(); - - if (!histHighSetting.getStatus(false).isOk || !histLowSetting.getStatus(false).isOk) - return SimpleCheckRecipeResult.ofFailure("invalid_hysteresis"); - if (!transferRadiusTowerSetting.getStatus(false).isOk || !transferRadiusTransceiverSetting.getStatus(false).isOk - || !transferRadiusCoverUltimateSetting.getStatus(false).isOk) - return SimpleCheckRecipeResult.ofFailure("invalid_transfer_radius"); - if (!outputVoltageSetting.getStatus(false).isOk) - return SimpleCheckRecipeResult.ofFailure("invalid_voltage_setting"); - if (!outputCurrentSetting.getStatus(false).isOk) - return SimpleCheckRecipeResult.ofFailure("invalid_current_setting"); - if (!sortTimeMinSetting.getStatus(false).isOk) return SimpleCheckRecipeResult.ofFailure("invalid_time_setting"); - if (!overDriveSetting.getStatus(false).isOk) - return SimpleCheckRecipeResult.ofFailure("invalid_overdrive_setting"); - - mEfficiencyIncrease = 10000; - mMaxProgresstime = 20; - vTier = -1; - long[] capacitorData; - for (GT_MetaTileEntity_Hatch_Capacitor cap : filterValidMTEs(eCapacitorHatches)) { - if (cap.getCapacitors()[0] > vTier) { - vTier = (int) cap.getCapacitors()[0]; - } - } - - energyCapacity = 0; - outputCurrentMax = 0; - - if (vTier < 0) { - // Returning true to allow for 'passive running' - outputVoltageMax = 0; - return SimpleCheckRecipeResult.ofSuccess("routing"); - } else if (vTier > mTier && getEUVar() > 0) { - explodeMultiblock(); - } - - outputVoltageMax = V[vTier + 1]; - for (GT_MetaTileEntity_Hatch_Capacitor cap : filterValidMTEs(eCapacitorHatches)) { - cap.getBaseMetaTileEntity() - .setActive(true); - capacitorData = cap.getCapacitors(); - if (capacitorData[0] < vTier) { - if (getEUVar() > 0 && capacitorData[0] != 0) { - cap.getBaseMetaTileEntity() - .setToFire(); - } - eCapacitorHatches.remove(cap); - } else { - outputCurrentMax += capacitorData[1]; - energyCapacity += capacitorData[2]; - } - } - return SimpleCheckRecipeResult.ofSuccess("routing"); - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.name")) // Machine Type: Tesla - // Tower - .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.desc.0")) // Controller block of - // the Tesla Tower - .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.desc.1")) // Used to transmit - // power to Tesla - // Coil Covers and Tesla - // Transceivers - .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.desc.2")) // Can be fed with - // Helium/Nitrogen/Radon Plasma to - // increase the range - .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.desc.3")) // Transmitted voltage - // depends on - // the used Tesla Capacitor tier - .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.desc.4")) // Primary Tesla - // Windings need to - // be at least the same tier as - // the Tesla Capacitor - .addInfo(translateToLocal("tt.keyword.Structure.StructureTooComplex")) // The structure is too complex! - .addSeparator() - .beginStructureBlock(7, 17, 7, false) - .addOtherStructurePart( - translateToLocal("gt.blockmachines.hatch.capacitor.tier.03.name"), - translateToLocal("tt.keyword.Structure.AnyTeslaBaseCasingOuter"), - 1) // Capacitor Hatch: Any outer Tesla Base Casing - .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyTeslaBaseCasingOuter"), 1) // Energy Hatch: - // Any outer Tesla - // Base Casing - .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyTeslaBaseCasingOuter"), 1) // Maintenance - // Hatch: Any - // outer Tesla - // Base Casing - .toolTipFinisher(CommonValues.THETA_MOVEMENT); - return tt; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/TM_TESLA_TOWER"); - ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/TM_TESLA_TOWER_ACTIVE"); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][16 + 6], - new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][16 + 6] }; - } - - @Override - public void onRemoval() { - super.onRemoval(); - if (!getBaseMetaTileEntity().isClientSide()) { - teslaSimpleNodeSetRemove(this); - for (GT_MetaTileEntity_Hatch_Capacitor cap : filterValidMTEs(eCapacitorHatches)) { - cap.getBaseMetaTileEntity() - .setActive(false); - } - } - } - - @Override - public void onUnload() { - if (!getBaseMetaTileEntity().isClientSide()) { - teslaSimpleNodeSetRemove(this); - } - } - - @Override - protected void parametersInstantiation_EM() { - Parameters.Group hatch_0 = parametrization.getGroup(0, true); - Parameters.Group hatch_1 = parametrization.getGroup(1, true); - Parameters.Group hatch_2 = parametrization.getGroup(2, true); - Parameters.Group hatch_3 = parametrization.getGroup(3, true); - Parameters.Group hatch_4 = parametrization.getGroup(4, true); - Parameters.Group hatch_5 = parametrization.getGroup(5, true); - Parameters.Group hatch_6 = parametrization.getGroup(6, true); - Parameters.Group hatch_7 = parametrization.getGroup(7, true); - Parameters.Group hatch_8 = parametrization.getGroup(8, true); - Parameters.Group hatch_9 = parametrization.getGroup(9, true); - - histLowSetting = hatch_0.makeInParameter(0, 0.25, HYSTERESIS_LOW_SETTING_NAME, HYSTERESIS_LOW_STATUS); - popogaSetting = hatch_0.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - histHighSetting = hatch_1.makeInParameter(0, 0.75, HYSTERESIS_HIGH_SETTING_NAME, HYSTERESIS_HIGH_STATUS); - popogaSetting = hatch_1.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - transferRadiusTowerSetting = hatch_2.makeInParameter( - 0, - transferRadiusTowerFromConfig, - TRANSFER_RADIUS_TOWER_SETTING_NAME, - TRANSFER_RADIUS_TOWER_STATUS); - popogaSetting = hatch_2.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - transferRadiusTransceiverSetting = hatch_3.makeInParameter( - 0, - transferRadiusTransceiverFromConfig, - TRANSFER_RADIUS_TRANSCEIVER_SETTING_NAME, - TRANSFER_RADIUS_TRANSCEIVER_STATUS); - transferRadiusCoverUltimateSetting = hatch_3.makeInParameter( - 1, - transferRadiusCoverUltimateFromConfig, - TRANSFER_RADIUS_COVER_ULTIMATE_SETTING_NAME, - TRANSFER_RADIUS_COVER_ULTIMATE_STATUS); - outputVoltageSetting = hatch_4 - .makeInParameter(0, -1, OUTPUT_VOLTAGE_SETTING_NAME, OUTPUT_VOLTAGE_OR_CURRENT_STATUS); - popogaSetting = hatch_4.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - outputCurrentSetting = hatch_5 - .makeInParameter(0, -1, OUTPUT_CURRENT_SETTING_NAME, OUTPUT_VOLTAGE_OR_CURRENT_STATUS); - popogaSetting = hatch_5.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - popogaSetting = hatch_6.makeInParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); - popogaSetting = hatch_6.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - sortTimeMinSetting = hatch_7.makeInParameter(0, 100, SCAN_TIME_MIN_SETTING_NAME, SCAN_TIME_MIN_STATUS); - popogaSetting = hatch_7.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - overDriveSetting = hatch_8.makeInParameter(0, 0, OVERDRIVE_SETTING_NAME, OVERDRIVE_STATUS); - popogaSetting = hatch_8.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - popogaSetting = hatch_9.makeInParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); - popogaSetting = hatch_9.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - - popogaDisplay = hatch_0.makeOutParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); - popogaDisplay = hatch_0.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - popogaDisplay = hatch_1.makeOutParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); - popogaDisplay = hatch_1.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - transferRadiusTowerDisplay = hatch_2 - .makeOutParameter(0, 0, TRANSFER_RADIUS_TOWER_DISPLAY_NAME, TRANSFER_RADIUS_TOWER_STATUS); - popogaDisplay = hatch_2.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - transferRadiusTransceiverDisplay = hatch_3 - .makeOutParameter(0, 0, TRANSFER_RADIUS_TRANSCEIVER_DISPLAY_NAME, TRANSFER_RADIUS_TRANSCEIVER_STATUS); - transferRadiusCoverUltimateDisplay = hatch_3 - .makeOutParameter(1, 0, TRANSFER_RADIUS_COVER_ULTIMATE_DISPLAY_NAME, TRANSFER_RADIUS_COVER_ULTIMATE_STATUS); - outputVoltageDisplay = hatch_4.makeOutParameter(0, 0, OUTPUT_VOLTAGE_DISPLAY_NAME, POWER_STATUS); - outputMaxDisplay = hatch_4.makeOutParameter(1, 0, OUTPUT_MAX_DISPLAY_NAME, POWER_STATUS); - outputCurrentDisplay = hatch_5.makeOutParameter(0, 0, OUTPUT_CURRENT_DISPLAY_NAME, POWER_STATUS); - energyCapacityDisplay = hatch_5.makeOutParameter(1, 0, ENERGY_CAPACITY_DISPLAY_NAME, ENERGY_STATUS); - energyStoredDisplay = hatch_6.makeOutParameter(0, 0, ENERGY_STORED_DISPLAY_NAME, ENERGY_STATUS); - energyFractionDisplay = hatch_6.makeOutParameter(1, 0, ENERGY_FRACTION_DISPLAY_NAME, ENERGY_STATUS); - sortTimeDisplay = hatch_7.makeOutParameter(0, 0, SCAN_TIME_DISPLAY_NAME, SCAN_TIME_STATUS); - popogaDisplay = hatch_7.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - popogaDisplay = hatch_8.makeOutParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); - popogaDisplay = hatch_8.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - popogaDisplay = hatch_9.makeOutParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); - popogaDisplay = hatch_9.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setLong("eEnergyCapacity", energyCapacity); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - energyCapacity = aNBT.getLong("eEnergyCapacity"); - teslaSimpleNodeSetAdd(this); - } - - @Override - public void stopMachine(@Nonnull ShutDownReason reason) { - super.stopMachine(reason); - for (GT_MetaTileEntity_Hatch_Capacitor cap : filterValidMTEs(eCapacitorHatches)) { - cap.getBaseMetaTileEntity() - .setActive(false); - } - - ePowerPass = false; - setEUVar(0); - energyStoredDisplay.set(0); - energyFractionDisplay.set(0); - outputMaxDisplay.set(0); - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - // Hysteresis based ePowerPass setting - float energyFrac = (float) getEUVar() / energyCapacity; - - energyCapacityDisplay.set(energyCapacity); - energyStoredDisplay.set(getEUVar()); - energyFractionDisplay.set(energyFrac); - - if (!ePowerPass && energyFrac > histHighSetting.get()) { - ePowerPass = true; - } else if (ePowerPass && energyFrac < histLowSetting.get()) { - ePowerPass = false; - } - - // Power Limit Settings - if (outputVoltageSetting.get() > 0) { - outputVoltage = min(outputVoltageMax, (long) outputVoltageSetting.get()); - } else { - outputVoltage = outputVoltageMax; - } - outputVoltageDisplay.set(outputVoltage); - - if (outputCurrentSetting.get() > 0) { - outputCurrent = min(outputCurrentMax, (long) outputCurrentSetting.get()); - } else { - outputCurrent = outputCurrentMax; - } - - // Range calculation and display - int transferRadiusTower = getTeslaTransmissionRange(); - transferRadiusTowerDisplay.set(transferRadiusTower); - transferRadiusTransceiverDisplay.set(transferRadiusTower * 2); - transferRadiusCoverUltimateDisplay.set(transferRadiusTower); - - // Power transfer - outputCurrentDisplay.set(powerTeslaNodeMap(this)); - outputMaxDisplay.set(Math.max(outputCurrentDisplay.get(), outputMaxDisplay.get())); - // TODO Encapsulate the spark sender - sparkCount--; - if (sparkCount == 0 && visualEffect) { - IGregTechTileEntity mte = getBaseMetaTileEntity(); - sparkCount = 10; - if (!sparkList.isEmpty()) { - NetworkDispatcher.INSTANCE.sendToAllAround( - new RendererMessage.RendererData(sparkList), - mte.getWorld().provider.dimensionId, - mte.getXCoord(), - mte.getYCoord(), - mte.getZCoord(), - 256); - sparkList.clear(); - } - } - return true; - } - - @Override - public long maxEUStore() { - // Setting the power here so that the tower looses all it's charge once disabled - // This also stops it from exploding - return getBaseMetaTileEntity().isActive() ? energyCapacity * 2 : 0; - } - - @Override - public long getEUVar() { - // Same reason as maxEUStore, set to 1 instead of zero so it doesn't drain constantly - return getBaseMetaTileEntity().isActive() ? super.getEUVar() : 1; - } - - private boolean addCapacitorToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Capacitor) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eCapacitorHatches.add((GT_MetaTileEntity_Hatch_Capacitor) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eEnergyMulti.add((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoMulti) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eDynamoMulti.add((GT_MetaTileEntity_Hatch_DynamoMulti) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Param) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eParamHatches.add((GT_MetaTileEntity_Hatch_Param) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } - return false; - } - - @Override - public IStructureDefinition getStructure_EM() { - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM("main", 3, 16, 0, stackSize, hintsOnly); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (mMachine) return -1; - return survivialBuildPiece("main", stackSize, 3, 16, 0, elementBudget, source, actor, false, true); - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return description; - } - - @Override - public byte getTeslaReceptionCapability() { - return 0; - } - - @Override - public float getTeslaReceptionCoefficient() { - return 0; - } - - @Override - public Multimap getTeslaNodeMap() { - return teslaNodeMap; - } - - @Override - public HashSet getSparkList() { - return sparkList; - } - - @Override - public byte getTeslaTransmissionCapability() { - return 1; - } - - @Override - public int getTeslaTransmissionRange() { - return (int) (transferRadiusTowerSetting.get() * getRangeMulti(mTier, vTier)); - } - - @Override - public boolean isOverdriveEnabled() { - return overDriveSetting.get() > 0; - } - - @Override - public int getTeslaEnergyLossPerBlock() { - return plasmaTierLoss[plasmaTier]; - } - - @Override - public float getTeslaOverdriveLossCoefficient() { - return overDriveLoss; - } - - @Override - public long getTeslaOutputVoltage() { - return outputVoltage; - } - - @Override - public long getTeslaOutputCurrent() { - return outputCurrent; - } - - @Override - public boolean teslaDrainEnergy(long teslaVoltageDrained) { - if (getEUVar() < teslaVoltageDrained) { - return false; - } - - setEUVar(getEUVar() - teslaVoltageDrained); - return true; - } - - @Override - public boolean isTeslaReadyToReceive() { - return !this.ePowerPass; - } - - @Override - public long getTeslaStoredEnergy() { - return getEUVar(); - } - - @Override - public Vec3Impl getTeslaPosition() { - return posTop; - } - - @Override - public Integer getTeslaDimension() { - return this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId; - } - - @Override - public boolean teslaInjectEnergy(long teslaVoltageInjected) { - if (this.getEUVar() + teslaVoltageInjected <= (this.maxEUStore() / 2)) { - this.getBaseMetaTileEntity() - .increaseStoredEnergyUnits(teslaVoltageInjected, true); - return true; - } - return false; - } - - private enum CapacitorHatchElement implements IHatchElement { - - INSTANCE; - - @Override - public List> mteClasses() { - return Collections.singletonList(GT_MetaTileEntity_Hatch_Capacitor.class); - } - - @Override - public IGT_HatchAdder adder() { - return GT_MetaTileEntity_TM_teslaCoil::addCapacitorToMachineList; - } - - @Override - public long count(GT_MetaTileEntity_TM_teslaCoil gt_metaTileEntity_tm_teslaCoil) { - return gt_metaTileEntity_tm_teslaCoil.eCapacitorHatches.size(); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java deleted file mode 100644 index fc91adb69f..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/GT_MetaTileEntity_MultiblockBase_EM.java +++ /dev/null @@ -1,2770 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.base; - -import static com.github.technus.tectech.loader.TecTechConfig.DEBUG_MODE; -import static com.github.technus.tectech.loader.TecTechConfig.POWERLESS_MODE; -import static com.github.technus.tectech.thing.casing.GT_Block_CasingsTT.texturePage; -import static com.github.technus.tectech.util.CommonValues.MULTI_CHECK_AT; -import static com.github.technus.tectech.util.CommonValues.RECIPE_AT; -import static com.github.technus.tectech.util.CommonValues.TEC_MARK_GENERAL; -import static com.github.technus.tectech.util.TT_Utility.getTier; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static java.lang.Math.min; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; -import org.lwjgl.opengl.GL11; - -import com.github.technus.tectech.Reference; -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DataConnector; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_InputData; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_OutputData; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Param; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Uncertainty; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.render.TT_RenderedExtendedFacingTexture; -import com.google.common.collect.Iterables; -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.IAlignment; -import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.util.Vec3Impl; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IBindPlayerInventoryUI; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.BaseTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_HatchElementBuilder; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.api.util.shutdown.SimpleShutDownReason; -import gregtech.common.GT_Pollution; -import gregtech.common.tileentities.machines.IDualInputHatch; - -/** - * Created by danie_000 on 27.10.2016. - */ -public abstract class GT_MetaTileEntity_MultiblockBase_EM - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements IAlignment, IBindPlayerInventoryUI { - // region Client side variables (static - one per class) - - // Front icon holders - static so it is default one for my blocks - // just add new static ones in your class and and override getTexture - protected static Textures.BlockIcons.CustomIcon ScreenOFF; - protected static Textures.BlockIcons.CustomIcon ScreenON; - - /** Base ID for the LED window popup. LED 1 I0 will have ID 100, LED 1 I1 101... */ - protected static int LED_WINDOW_BASE_ID = 100; - - // Sound resource - same as with screen but override getActivitySound - public static final ResourceLocation activitySound = new ResourceLocation(Reference.MODID + ":fx_lo_freq"); - - @SideOnly(Side.CLIENT) - private SoundLoop activitySoundLoop; - // endregion - - // region HATCHES ARRAYS - they hold info about found hatches, add hatches to them... (auto structure magic does it - // tho) - - // HATCHES!!!, should be added and removed in check machine - protected ArrayList eParamHatches = new ArrayList<>(); - protected ArrayList eUncertainHatches = new ArrayList<>(); - // multi amp hatches in/out - protected ArrayList eEnergyMulti = new ArrayList<>(); - protected ArrayList eDynamoMulti = new ArrayList<>(); - // data hatches - protected ArrayList eInputData = new ArrayList<>(); - protected ArrayList eOutputData = new ArrayList<>(); - - // endregion - - // region parameters - public final Parameters parametrization; - // endregion - - // region Control variables - - // should explode on dismatle?, set it in constructor, if true machine will explode if invalidated structure while - // active - protected boolean eDismantleBoom = false; - - // what is the amount of A required - public long eAmpereFlow = 1; // analogue of EU/t but for amperes used (so eu/t is actually eu*A/t) USE ONLY POSITIVE - // NUMBERS! - - // set to what you need it to be in check recipe - // data required to operate - protected long eRequiredData = 0; - - // Counter for the computation timeout. Will be initialized one to the max time and then only decreased. - protected int eComputationTimeout = MAX_COMPUTATION_TIMEOUT; - - // Max timeout of computation in ticks - protected static int MAX_COMPUTATION_TIMEOUT = 100; - - // are parameters correct - change in check recipe/output/update params etc. (maintenance status boolean) - protected boolean eParameters = true; - - // what type of certainty inconvenience is used - can be used as in Computer - more info in uncertainty hatch - protected byte eCertainMode = 0, eCertainStatus = 0; - - // minimal repair status to make the machine even usable (how much unfixed fixed stuff is needed) - // if u need to force some things to be fixed - u might need to override doRandomMaintenanceDamage - protected byte minRepairStatus = 3; - - // whether there is a maintenance hatch in the multi and whether checks are necessary (for now only used in a - // transformer) - protected boolean hasMaintenanceChecks = true; - - // is power pass cover present - public boolean ePowerPassCover = false; - - // functionality toggles - changed by buttons in gui also - public boolean ePowerPass = false, eSafeVoid = false; - - // endregion - - // region READ ONLY unless u really need to change it - - // max amperes machine can take in after computing it to the lowest tier (exchange packets to min tier count) - protected long eMaxAmpereFlow = 0, eMaxAmpereGen = 0; - - // What is the max and minimal tier of eu hatches installed - private long maxEUinputMin = 0, maxEUinputMax = 0, maxEUoutputMin = 0, maxEUoutputMax = 0; - - // read only unless you are making computation generator - read computer class - protected long eAvailableData = 0; // data being available - - // just some info - private so hidden - private boolean explodedThisTick = false; - - /** Flag if the new long power variable should be used */ - protected boolean useLongPower = false; - - // Locale-aware formatting of numbers. - protected static NumberFormatMUI numberFormat; - static { - numberFormat = new NumberFormatMUI(); - numberFormat.setMaximumFractionDigits(8); - } - - // endregion - - protected GT_MetaTileEntity_MultiblockBase_EM(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - parametrization = new Parameters(this); - parametersInstantiation_EM(); - parametrization.setToDefaults(true, true); - } - - protected GT_MetaTileEntity_MultiblockBase_EM(String aName) { - super(aName); - parametrization = new Parameters(this); - parametersInstantiation_EM(); - parametrization.setToDefaults(true, true); - } - - // region SUPER STRUCT - - /** - * Gets structure - * - * @return STATIC INSTANCE OF STRUCTURE - */ - public abstract IStructureDefinition getStructure_EM(); - - @SuppressWarnings("unchecked") - private IStructureDefinition getStructure_EM_Internal() { - return (IStructureDefinition) getStructure_EM(); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return getStructure_EM_Internal(); - } - - public final boolean structureCheck_EM(String piece, int horizontalOffset, int verticalOffset, int depthOffset) { - IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); - return getStructure_EM_Internal().check( - this, - piece, - baseMetaTileEntity.getWorld(), - getExtendedFacing(), - baseMetaTileEntity.getXCoord(), - baseMetaTileEntity.getYCoord(), - baseMetaTileEntity.getZCoord(), - horizontalOffset, - verticalOffset, - depthOffset, - !mMachine); - } - - public final boolean structureBuild_EM(String piece, int horizontalOffset, int verticalOffset, int depthOffset, - ItemStack trigger, boolean hintsOnly) { - IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); - return getStructure_EM_Internal().buildOrHints( - this, - trigger, - piece, - baseMetaTileEntity.getWorld(), - getExtendedFacing(), - baseMetaTileEntity.getXCoord(), - baseMetaTileEntity.getYCoord(), - baseMetaTileEntity.getZCoord(), - horizontalOffset, - verticalOffset, - depthOffset, - hintsOnly); - } - // endregion - - // region METHODS TO OVERRIDE - general functionality, recipe check, output - - /** - * Check structure here, also add hatches - * - * @param iGregTechTileEntity - the tile entity - * @param itemStack - what is in the controller input slot - * @return is structure valid - */ - protected boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - return false; - } - - /** - * Checks Recipes (when all machine is complete and can work) - *

- * can get/set Parameters here also - * - * @deprecated Use {@link #createProcessingLogic()} ()} or {@link #checkProcessing_EM()} - * - * @param itemStack item in the controller - * @return is recipe is valid - */ - @Deprecated - public boolean checkRecipe_EM(ItemStack itemStack) { - return false; - } - - @NotNull - protected CheckRecipeResult checkProcessing_EM() { - if (processingLogic == null) { - return checkRecipe_EM(getControllerSlot()) ? CheckRecipeResultRegistry.SUCCESSFUL - : CheckRecipeResultRegistry.NO_RECIPE; - } - return super.checkProcessing(); - } - - /** - * Put EM stuff from outputEM into EM output hatches here or do other stuff - it is basically on recipe succeded - *

- * based on "machine state" do output, this must move to outputEM to EM output hatches and can also modify output - * items/fluids/EM, remaining EM is NOT overflowed. (Well it can be overflowed if machine didn't finished, - * soft-hammered/disabled/not enough EU) Setting available data processing - */ - public void outputAfterRecipe_EM() {} - // endregion - - // region tooltip and scanner result - - public ArrayList getFullLedDescriptionIn(int hatchNo, int paramID) { - ArrayList list = new ArrayList<>(); - list.add( - EnumChatFormatting.WHITE + "ID: " - + EnumChatFormatting.AQUA - + hatchNo - + EnumChatFormatting.YELLOW - + ":" - + EnumChatFormatting.AQUA - + paramID - + EnumChatFormatting.YELLOW - + ":" - + EnumChatFormatting.AQUA - + "I " - + parametrization.getStatusIn(hatchNo, paramID).name.get()); - list.add( - EnumChatFormatting.WHITE + "Value: " - + EnumChatFormatting.AQUA - + numberFormat.format(parametrization.getIn(hatchNo, paramID))); - try { - list.add(parametrization.groups[hatchNo].parameterIn[paramID].getBrief()); - } catch (NullPointerException | IndexOutOfBoundsException e) { - list.add("Unused"); - } - return list; - } - - public ArrayList getFullLedDescriptionOut(int hatchNo, int paramID) { - ArrayList list = new ArrayList<>(); - list.add( - EnumChatFormatting.WHITE + "ID: " - + EnumChatFormatting.AQUA - + hatchNo - + EnumChatFormatting.YELLOW - + ":" - + EnumChatFormatting.AQUA - + paramID - + EnumChatFormatting.YELLOW - + ":" - + EnumChatFormatting.AQUA - + "O " - + parametrization.getStatusOut(hatchNo, paramID).name.get()); - list.add( - EnumChatFormatting.WHITE + "Value: " - + EnumChatFormatting.AQUA - + numberFormat.format(parametrization.getOut(hatchNo, paramID))); - try { - list.add(parametrization.groups[hatchNo].parameterOut[paramID].getBrief()); - } catch (NullPointerException | IndexOutOfBoundsException e) { - list.add("Unused"); - } - return list; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addInfo("Nothing special just override me") - .toolTipFinisher(TEC_MARK_GENERAL); - return tt; - } - - /** - * scanner gives it - */ - @Override - public String[] getInfoData() { // TODO Do it - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - for (GT_MetaTileEntity_Hatch_EnergyMulti tHatch : filterValidMTEs(eEnergyMulti)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - - return new String[] { "Progress:", - EnumChatFormatting.GREEN + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - "Energy Hatches:", - EnumChatFormatting.GREEN + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - (getPowerFlow() * eAmpereFlow <= 0 ? "Probably uses: " : "Probably makes: ") + EnumChatFormatting.RED - + GT_Utility.formatNumbers(Math.abs(getPowerFlow())) - + EnumChatFormatting.RESET - + " EU/t at " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(eAmpereFlow) - + EnumChatFormatting.RESET - + " A", - "Tier Rating: " + EnumChatFormatting.YELLOW - + VN[getMaxEnergyInputTier_EM()] - + EnumChatFormatting.RESET - + " / " - + EnumChatFormatting.GREEN - + VN[getMinEnergyInputTier_EM()] - + EnumChatFormatting.RESET - + " Amp Rating: " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(eMaxAmpereFlow) - + EnumChatFormatting.RESET - + " A", - "Problems: " + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " Efficiency: " - + EnumChatFormatting.YELLOW - + mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - "PowerPass: " + EnumChatFormatting.BLUE - + ePowerPass - + EnumChatFormatting.RESET - + " SafeVoid: " - + EnumChatFormatting.BLUE - + eSafeVoid, - "Computation: " + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(eAvailableData) - + EnumChatFormatting.RESET - + " / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(eRequiredData) - + EnumChatFormatting.RESET }; - } - - /** - * should it work with scanner? HELL YES - */ - @Override - public boolean isGivingInformation() { - return true; - } - - // endregion - - // region GUI/SOUND/RENDER - - /** - * add more textures - */ - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/EM_CONTROLLER"); - ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/EM_CONTROLLER_ACTIVE"); - super.registerIcons(aBlockIconRegister); - } - - /** - * actually use textures - */ - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][4], - new TT_RenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][4] }; - } - - /** - * should return your activity sound - */ - @SideOnly(Side.CLIENT) - protected ResourceLocation getActivitySound() { - return activitySound; - } - - /** - * plays the sounds auto magically - */ - @SideOnly(Side.CLIENT) - protected void soundMagic(ResourceLocation activitySound) { - if (getBaseMetaTileEntity().isActive()) { - if (activitySoundLoop == null) { - activitySoundLoop = new SoundLoop(activitySound, getBaseMetaTileEntity(), false, true); - Minecraft.getMinecraft() - .getSoundHandler() - .playSound(activitySoundLoop); - } - } else { - if (activitySoundLoop != null) { - activitySoundLoop = null; - } - } - } - - // endregion - - // region Methods to maybe override (if u implement certain stuff) - - /** - * is the thing inside controller a valid item to make the machine work - */ - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - /** - * how much damage to apply to thing in controller - not sure how it does it - */ - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - /** - * called when removing from map - not when unloading? //todo check - */ - @Override - public void onRemoval() { - try { - if (ePowerPass && getEUVar() > V[3] - || eDismantleBoom && mMaxProgresstime > 0 && areChunksAroundLoaded_EM()) { - explodeMultiblock(); - } - } catch (Exception e) { - if (DEBUG_MODE) { - e.printStackTrace(); - } - } - } - - /** - * prevents spontaneous explosions when the chunks unloading would cause them should cover 3 chunks radius - */ - protected boolean areChunksAroundLoaded_EM() { - if (this.isValid() && getBaseMetaTileEntity().isServerSide()) { - IGregTechTileEntity base = getBaseMetaTileEntity(); - return base.getWorld() - .doChunksNearChunkExist(base.getXCoord(), base.getYCoord(), base.getZCoord(), 3); - // todo check if it is actually checking if chunks are loaded - } else { - return false; - } - } - - /** - * instantiate parameters in CONSTRUCTOR! CALLED ONCE on creation, don't call it in your classes - */ - protected void parametersInstantiation_EM() {} - - /** - * It is automatically called OFTEN update status of parameters in guis (and "machine state" if u wish) Called - * before check recipe, before outputting, and every second the machine is complete - *

- * good place to update parameter statuses, default implementation handles it well - * - * @param machineBusy is machine doing stuff - */ - protected void parametersStatusesWrite_EM(boolean machineBusy) { // todo unimplement? - if (!machineBusy) { - for (Parameters.Group.ParameterIn parameterIn : parametrization.parameterInArrayList) { - if (parameterIn != null) { - parameterIn.updateStatus(); - } - } - } else { - for (Parameters.Group hatch : parametrization.groups) { - if (hatch != null && hatch.updateWhileRunning) { - for (Parameters.Group.ParameterIn in : hatch.parameterIn) { - if (in != null) { - in.updateStatus(); - } - } - } - } - } - for (Parameters.Group.ParameterOut parameterOut : parametrization.parameterOutArrayList) { - if (parameterOut != null) { - parameterOut.updateStatus(); - } - } - } - - /** - * For extra types of hatches initiation, LOOK HOW IT IS CALLED! in onPostTick - * - * @param mMachine was the machine considered complete at that point in onPostTick - */ - protected void hatchInit_EM(boolean mMachine) {} - - /** - * called when the multiblock is exploding - if u want to add more EXPLOSIONS, for ex. new types of hatches also - * have to explode - */ - protected void extraExplosions_EM() {} // For that extra hatches explosions, and maybe some MOORE EXPLOSIONS - - /** - * Get Available data, Override only on data outputters should return mAvailableData that is set in check recipe - * - * @return available data - */ - protected long getAvailableData_EM() { - long result = 0; - IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); - Vec3Impl pos = new Vec3Impl( - baseMetaTileEntity.getXCoord(), - baseMetaTileEntity.getYCoord(), - baseMetaTileEntity.getZCoord()); - for (GT_MetaTileEntity_Hatch_InputData in : eInputData) { - if (in.q != null) { - Long value = in.q.contentIfNotInTrace(pos); - if (value != null) { - result += value; - } - } - } - return result; - } - - protected long getPowerFlow() { - return useLongPower ? lEUt : mEUt; - } - - protected void setPowerFlow(long lEUt) { - if (useLongPower) { - this.lEUt = lEUt; - } else { - mEUt = (int) Math.min(Integer.MAX_VALUE, lEUt); - } - } - - @Override - protected long getActualEnergyUsage() { - return -(useLongPower ? lEUt : mEUt) * eAmpereFlow * 10_000 / Math.max(1_000, mEfficiency); - } - - /** - * Extra hook on cyclic updates (not really needed for machines smaller than 1 chunk) BUT NEEDED WHEN - machine - * blocks are not touching each other or they don't implement IMachineBlockUpdateable (ex. air,stone,weird TE's) - */ - protected boolean cyclicUpdate_EM() { - return mUpdate <= -1000; // set to false to disable cyclic update - // default is once per 50s; mUpdate is decremented every tick - } - - /** - * get pollution per tick - * - * @param itemStack what is in controller - * @return how much pollution is produced - */ - @Override - public int getPollutionPerTick(ItemStack itemStack) { - return 0; - } - - /** - * EM pollution per tick - * - * @param itemStack - item in controller - * @return how much excess matter is there - */ - public float getExcessMassPerTick_EM(ItemStack itemStack) { - return 0f; - } - - /** - * triggered if machine is not allowed to work after completing a recipe, override to make it not shutdown for - * instance (like turbines). bu just replacing it with blank - active transformer is doing it - *

- * CALLED DIRECTLY when soft hammered to offline state - usually should stop the machine unless some other mechanics - * should do it - */ - protected void notAllowedToWork_stopMachine_EM() { - stopMachine(); - } - - /** - * store data - */ - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setLong("eMaxGenEUmin", maxEUoutputMin); - aNBT.setLong("eMaxGenEUmax", maxEUoutputMax); - aNBT.setLong("eGenRating", eMaxAmpereGen); - aNBT.setLong("eMaxEUmin", maxEUinputMin); - aNBT.setLong("eMaxEUmax", maxEUinputMax); - aNBT.setLong("eRating", eAmpereFlow); - aNBT.setLong("eMaxA", eMaxAmpereFlow); - aNBT.setLong("eDataR", eRequiredData); - aNBT.setLong("eDataA", eAvailableData); - aNBT.setByte("eCertainM", eCertainMode); - aNBT.setByte("eCertainS", eCertainStatus); - aNBT.setByte("eMinRepair", minRepairStatus); - aNBT.setBoolean("eParam", eParameters); - aNBT.setBoolean("ePass", ePowerPass); - aNBT.setBoolean("ePowerPassCover", ePowerPassCover); - aNBT.setBoolean("eVoid", eSafeVoid); - aNBT.setBoolean("eBoom", eDismantleBoom); - aNBT.setBoolean("eOK", mMachine); - // Ensures compatibility - if (mOutputItems != null) { - aNBT.setInteger("mOutputItemsLength", mOutputItems.length); - for (int i = 0; i < mOutputItems.length; i++) { - if (mOutputItems[i] != null) { - NBTTagCompound tNBT = new NBTTagCompound(); - mOutputItems[i].writeToNBT(tNBT); - aNBT.setTag("mOutputItem" + i, tNBT); - } - } - } - - // Ensures compatibility - if (mOutputFluids != null) { - aNBT.setInteger("mOutputFluidsLength", mOutputFluids.length); - for (int i = 0; i < mOutputFluids.length; i++) { - if (mOutputFluids[i] != null) { - NBTTagCompound tNBT = new NBTTagCompound(); - mOutputFluids[i].writeToNBT(tNBT); - aNBT.setTag("mOutputFluids" + i, tNBT); - } - } - } - - aNBT.setInteger("eOutputStackCount", 0); - aNBT.removeTag("outputEM"); - - NBTTagCompound paramI = new NBTTagCompound(); - for (int i = 0; i < parametrization.iParamsIn.length; i++) { - paramI.setDouble(Integer.toString(i), parametrization.iParamsIn[i]); - } - aNBT.setTag("eParamsInD", paramI); - - NBTTagCompound paramO = new NBTTagCompound(); - for (int i = 0; i < parametrization.iParamsOut.length; i++) { - paramO.setDouble(Integer.toString(i), parametrization.iParamsOut[i]); - } - aNBT.setTag("eParamsOutD", paramO); - - NBTTagCompound paramIs = new NBTTagCompound(); - for (int i = 0; i < parametrization.eParamsInStatus.length; i++) { - paramIs.setByte(Integer.toString(i), parametrization.eParamsInStatus[i].getOrdinalByte()); - } - aNBT.setTag("eParamsInS", paramIs); - - NBTTagCompound paramOs = new NBTTagCompound(); - for (int i = 0; i < parametrization.eParamsOutStatus.length; i++) { - paramOs.setByte(Integer.toString(i), parametrization.eParamsOutStatus[i].getOrdinalByte()); - } - aNBT.setTag("eParamsOutS", paramOs); - } - - /** - * load data - */ - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - maxEUoutputMin = aNBT.getLong("eMaxGenEUmin"); - maxEUoutputMax = aNBT.getLong("eMaxGenEUmax"); - eMaxAmpereGen = aNBT.getLong("eGenRating"); - maxEUinputMin = aNBT.getLong("eMaxEUmin"); - maxEUinputMax = aNBT.getLong("eMaxEUmax"); - eAmpereFlow = aNBT.hasKey("eRating") ? aNBT.getLong("eRating") : 1; - eMaxAmpereFlow = aNBT.getLong("eMaxA"); - eRequiredData = aNBT.getLong("eDataR"); - eAvailableData = aNBT.getLong("eDataA"); - eCertainMode = aNBT.getByte("eCertainM"); - eCertainStatus = aNBT.getByte("eCertainS"); - minRepairStatus = aNBT.hasKey("eMinRepair") ? aNBT.getByte("eMinRepair") : 3; - eParameters = !aNBT.hasKey("eParam") || aNBT.getBoolean("eParam"); - ePowerPass = aNBT.getBoolean("ePass"); - ePowerPassCover = aNBT.getBoolean("ePowerPassCover"); - eSafeVoid = aNBT.getBoolean("eVoid"); - eDismantleBoom = aNBT.getBoolean("eBoom"); - mMachine = aNBT.getBoolean("eOK"); - - // Ensures compatibility - int aOutputItemsLength = aNBT.getInteger("mOutputItemsLength"); - if (aOutputItemsLength > 0) { - mOutputItems = new ItemStack[aOutputItemsLength]; - for (int i = 0; i < mOutputItems.length; i++) { - mOutputItems[i] = GT_Utility.loadItem(aNBT, "mOutputItem" + i); - } - } - - // Ensures compatibility - int aOutputFluidsLength = aNBT.getInteger("mOutputFluidsLength"); - if (aOutputFluidsLength > 0) { - mOutputFluids = new FluidStack[aOutputFluidsLength]; - for (int i = 0; i < mOutputFluids.length; i++) { - mOutputFluids[i] = GT_Utility.loadFluid(aNBT, "mOutputFluids" + i); - } - } - - if (aNBT.hasKey("eParamsIn") && aNBT.hasKey("eParamsOut") && aNBT.hasKey("eParamsB")) { - NBTTagCompound paramI = aNBT.getCompoundTag("eParamsIn"); - NBTTagCompound paramO = aNBT.getCompoundTag("eParamsOut"); - NBTTagCompound paramB = aNBT.getCompoundTag("eParamsB"); - for (int i = 0; i < 10; i++) { - if (paramB.getBoolean(Integer.toString(i))) { - parametrization.iParamsIn[i] = Float.intBitsToFloat(paramI.getInteger(Integer.toString(i))); - parametrization.iParamsOut[i] = Float.intBitsToFloat(paramO.getInteger(Integer.toString(i))); - } else { - parametrization.iParamsIn[i] = paramI.getInteger(Integer.toString(i)); - parametrization.iParamsOut[i] = paramO.getInteger(Integer.toString(i)); - } - } - } else { - NBTTagCompound paramI = aNBT.getCompoundTag("eParamsInD"); - for (int i = 0; i < parametrization.iParamsIn.length; i++) { - parametrization.iParamsIn[i] = paramI.getDouble(Integer.toString(i)); - } - NBTTagCompound paramO = aNBT.getCompoundTag("eParamsOutD"); - for (int i = 0; i < parametrization.iParamsOut.length; i++) { - parametrization.iParamsOut[i] = paramO.getDouble(Integer.toString(i)); - } - } - - NBTTagCompound paramIs = aNBT.getCompoundTag("eParamsInS"); - for (int i = 0; i < parametrization.eParamsInStatus.length; i++) { - parametrization.eParamsInStatus[i] = LedStatus.getStatus(paramIs.getByte(Integer.toString(i))); - } - - NBTTagCompound paramOs = aNBT.getCompoundTag("eParamsOutS"); - for (int i = 0; i < parametrization.eParamsOutStatus.length; i++) { - parametrization.eParamsOutStatus[i] = LedStatus.getStatus(paramOs.getByte(Integer.toString(i))); - } - } - - /** - * Override if needed but usually call super method at start! On machine stop - NOT called directly when soft - * hammered to offline state! - it SHOULD cause a full stop like power failure does - */ - @Override - public void stopMachine(@Nonnull ShutDownReason reason) { - if (!ShutDownReasonRegistry.isRegistered(reason.getID())) { - throw new RuntimeException(String.format("Reason %s is not registered for registry", reason.getID())); - } - for (GT_MetaTileEntity_Hatch_OutputData data : eOutputData) { - data.q = null; - } - - mOutputItems = null; - mOutputFluids = null; - mEfficiency = 0; - mEfficiencyIncrease = 0; - mProgresstime = 0; - mMaxProgresstime = 0; - eAvailableData = 0; - hatchesStatusUpdate_EM(); - getBaseMetaTileEntity().disableWorking(); - getBaseMetaTileEntity().setShutDownReason(reason); - getBaseMetaTileEntity().setShutdownStatus(true); - if (reason.wasCritical()) { - sendSound(INTERRUPT_SOUND_INDEX); - } - } - - /** - * After recipe check failed helper method so i don't have to set that params to nothing at all times - */ - protected void afterRecipeCheckFailed() { - - for (GT_MetaTileEntity_Hatch_OutputData data : eOutputData) { - data.q = null; - } - - mOutputItems = null; - mOutputFluids = null; - mEfficiency = 0; - mEfficiencyIncrease = 0; - mProgresstime = 0; - mMaxProgresstime = 0; - eAvailableData = 0; - } - - /** - * cyclic check even when not working, called LESS frequently - */ - private boolean cyclicUpdate() { - if (cyclicUpdate_EM()) { - mUpdate = 0; - return true; - } - return false; - } - - /** - * mining level... - */ - @Override - public byte getTileEntityBaseType() { - return 3; - } - - // endregion - - // region internal - - /** - * internal check machine - */ - @Override - public final boolean checkMachine(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - return checkMachine_EM(iGregTechTileEntity, itemStack); - } - - /** - * internal check recipe - */ - @Override - public final boolean checkRecipe(ItemStack itemStack) { // do recipe checks, based on "machine content and state" - hatchesStatusUpdate_EM(); - startRecipeProcessing(); - boolean result = checkRecipe_EM(itemStack); // if had no - set default params - endRecipeProcessing(); - hatchesStatusUpdate_EM(); - return result; - } - - @NotNull - @Override - public final CheckRecipeResult checkProcessing() { - hatchesStatusUpdate_EM(); - CheckRecipeResult result = checkProcessing_EM(); - hatchesStatusUpdate_EM(); - return result; - } - - /** - * callback for updating parameters and new hatches - */ - protected void hatchesStatusUpdate_EM() { - if (getBaseMetaTileEntity().isClientSide()) { - return; - } - boolean busy = mMaxProgresstime > 0; - if (busy) { // write from buffer to hatches only - for (GT_MetaTileEntity_Hatch_Param hatch : filterValidMTEs(eParamHatches)) { - if (hatch.param < 0) { - continue; - } - int hatchId = hatch.param; - if (parametrization.groups[hatchId] != null && parametrization.groups[hatchId].updateWhileRunning) { - parametrization.iParamsIn[hatchId] = hatch.value0D; - parametrization.iParamsIn[hatchId + 10] = hatch.value1D; - } - hatch.input0D = parametrization.iParamsOut[hatchId]; - hatch.input1D = parametrization.iParamsOut[hatchId + 10]; - } - } else { // if has nothing to do update all - for (GT_MetaTileEntity_Hatch_Param hatch : filterValidMTEs(eParamHatches)) { - if (hatch.param < 0) { - continue; - } - int hatchId = hatch.param; - parametrization.iParamsIn[hatchId] = hatch.value0D; - parametrization.iParamsIn[hatchId + 10] = hatch.value1D; - hatch.input0D = parametrization.iParamsOut[hatchId]; - hatch.input1D = parametrization.iParamsOut[hatchId + 10]; - } - } - for (GT_MetaTileEntity_Hatch_Uncertainty uncertainty : eUncertainHatches) { - eCertainStatus = uncertainty.update(eCertainMode); - } - eAvailableData = getAvailableData_EM(); - parametersStatusesWrite_EM(busy); - } - - @Deprecated - public final int getAmountOfOutputs() { - throw new NoSuchMethodError("Deprecated Do not use"); - } - // endregion - - // region TICKING functions - - public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) {} - - @Override - public final void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - isFacingValid(aBaseMetaTileEntity.getFrontFacing()); - if (getBaseMetaTileEntity().isClientSide()) { - StructureLibAPI.queryAlignment((IAlignmentProvider) aBaseMetaTileEntity); - } - onFirstTick_EM(aBaseMetaTileEntity); - } - - /** - * called every tick the machines is active - */ - @Override - public boolean onRunningTick(ItemStack aStack) { - return onRunningTickCheck(aStack); - } - - public boolean onRunningTickCheck_EM(ItemStack aStack) { - if (eRequiredData > eAvailableData) { - if (!checkComputationTimeout()) { - if (energyFlowOnRunningTick_EM(aStack, false)) { - stopMachine(SimpleShutDownReason.ofCritical("computation_loss")); - } - return false; - } - } - return energyFlowOnRunningTick_EM(aStack, true); - } - - public boolean onRunningTickCheck(ItemStack aStack) { - if (eRequiredData > eAvailableData) { - if (!checkComputationTimeout()) { - if (energyFlowOnRunningTick(aStack, false)) { - stopMachine(SimpleShutDownReason.ofCritical("computation_loss")); - } - return false; - } - } - return energyFlowOnRunningTick(aStack, true); - } - - /** - * CAREFUL!!! it calls most of the callbacks, like everything else in here - */ - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - mTotalRunTime++; - explodedThisTick = false; - if (mEfficiency < 0) { - mEfficiency = 0; - } - - if (--mUpdate == 0 || --mStartUpCheck == 0 - || cyclicUpdate() - || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) { - clearHatches_EM(); - - if (aBaseMetaTileEntity instanceof BaseTileEntity) { - ((BaseTileEntity) aBaseMetaTileEntity).ignoreUnloadedChunks = mMachine; - } - mMachine = checkMachine(aBaseMetaTileEntity, mInventory[1]); - - if (!mMachine) { - if (ePowerPass && getEUVar() > V[3] - || eDismantleBoom && mMaxProgresstime > 0 && areChunksAroundLoaded_EM()) { - explodeMultiblock(); - } - } - - if (eUncertainHatches.size() > 1) { - mMachine = false; - } - - if (mMachine) { - setupHatches_EM(); - - setupEnergyHatchesVariables_EM(); - - if (getEUVar() > maxEUStore()) { - setEUVar(maxEUStore()); - } - } else { - maxEUinputMin = 0; - maxEUinputMax = 0; - eMaxAmpereFlow = 0; - setEUVar(0); - } - hatchInit_EM(mMachine); - } - - if (mStartUpCheck < 0) { // E - if (mMachine) { // S - byte Tick = (byte) (aTick % 20); - if (MULTI_CHECK_AT == Tick) { - checkMaintenance(); - } - - if (getRepairStatus() >= minRepairStatus) { // S - if (MULTI_CHECK_AT == Tick) { - hatchesStatusUpdate_EM(); - } - - dischargeController_EM(aBaseMetaTileEntity); - chargeController_EM(aBaseMetaTileEntity); - - if (mMaxProgresstime > 0 && doRandomMaintenanceDamage()) { // Start - if (onRunningTick(mInventory[1])) { // Compute EU - if (!polluteEnvironment(getPollutionPerTick(mInventory[1]))) { - stopMachine(ShutDownReasonRegistry.POLLUTION_FAIL); - } - - if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) { // progress increase - // and done - hatchesStatusUpdate_EM(); - - outputAfterRecipe_EM(); - - addClassicOutputs_EM(); - - updateSlots(); - mProgresstime = 0; - mMaxProgresstime = 0; - mEfficiencyIncrease = 0; - - if (aBaseMetaTileEntity.isAllowedToWork()) { - if (checkRecipe()) { - mEfficiency = Math.max( - 0, - min( - mEfficiency + mEfficiencyIncrease, - getMaxEfficiency(mInventory[1]) - - (getIdealStatus() - getRepairStatus()) * 1000)); - } else { - afterRecipeCheckFailed(); - } - updateSlots(); - } else { - notAllowedToWork_stopMachine_EM(); - } - } - } // else {//failed to consume power/resources - inside on running tick - // stopMachine(); - // } - } else if (RECIPE_AT == Tick || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) { - if (aBaseMetaTileEntity.isAllowedToWork()) { - if (checkRecipe()) { - mEfficiency = Math.max( - 0, - min( - mEfficiency + mEfficiencyIncrease, - getMaxEfficiency(mInventory[1]) - - (getIdealStatus() - getRepairStatus()) * 1000)); - } else { - afterRecipeCheckFailed(); - } - updateSlots(); - } // else notAllowedToWork_stopMachine_EM(); //it is already stopped here - } - } else { // not repaired - stopMachine(ShutDownReasonRegistry.NO_REPAIR); - } - } else { // not complete - stopMachine(ShutDownReasonRegistry.STRUCTURE_INCOMPLETE); - } - } - - aBaseMetaTileEntity.setErrorDisplayID( - aBaseMetaTileEntity.getErrorDisplayID() & -512 | (mWrench ? 0 : 1) - | (mScrewdriver ? 0 : 2) - | (mSoftHammer ? 0 : 4) - | (mHardHammer ? 0 : 8) - | (mSolderingTool ? 0 : 16) - | (mCrowbar ? 0 : 32) - | (mMachine ? 0 : 64) - | (eCertainStatus == 0 ? 0 : 128) - | (eParameters ? 0 : 256)); - aBaseMetaTileEntity.setActive(mMaxProgresstime > 0); - boolean active = aBaseMetaTileEntity.isActive() && mPollution > 0; - setMufflers(active); - } else { - soundMagic(getActivitySound()); - } - } - - protected void addClassicOutputs_EM() { - if (mOutputItems != null) { - for (ItemStack tStack : mOutputItems) { - if (tStack != null) { - addOutput(tStack); - } - } - } - mOutputItems = null; - - if (mOutputFluids != null) { - if (mOutputFluids.length == 1) { - for (FluidStack tStack : mOutputFluids) { - if (tStack != null) { - addOutput(tStack); - } - } - } else if (mOutputFluids.length > 1) { - addFluidOutputs(mOutputFluids); - } - } - mOutputFluids = null; - } - - protected void clearHatches_EM() { - mDualInputHatches.clear(); - mInputHatches.clear(); - mInputBusses.clear(); - mOutputHatches.clear(); - mOutputBusses.clear(); - mDynamoHatches.clear(); - mEnergyHatches.clear(); - mMufflerHatches.clear(); - mMaintenanceHatches.clear(); - - for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : filterValidMTEs(eOutputData)) { - hatch_data.id = -1; - } - for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : filterValidMTEs(eInputData)) { - hatch_data.id = -1; - } - - for (GT_MetaTileEntity_Hatch_Uncertainty hatch : filterValidMTEs(eUncertainHatches)) { - hatch.getBaseMetaTileEntity() - .setActive(false); - } - for (GT_MetaTileEntity_Hatch_Param hatch : filterValidMTEs(eParamHatches)) { - hatch.getBaseMetaTileEntity() - .setActive(false); - } - - eUncertainHatches.clear(); - eEnergyMulti.clear(); - eParamHatches.clear(); - eDynamoMulti.clear(); - eOutputData.clear(); - eInputData.clear(); - } - - protected void setupHatches_EM() { - short id = 1; - - for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : filterValidMTEs(eOutputData)) { - hatch_data.id = id++; - } - id = 1; - for (GT_MetaTileEntity_Hatch_DataConnector hatch_data : filterValidMTEs(eInputData)) { - hatch_data.id = id++; - } - - for (GT_MetaTileEntity_Hatch_Uncertainty hatch : filterValidMTEs(eUncertainHatches)) { - hatch.getBaseMetaTileEntity() - .setActive(true); - } - for (GT_MetaTileEntity_Hatch_Param hatch : filterValidMTEs(eParamHatches)) { - hatch.getBaseMetaTileEntity() - .setActive(true); - } - } - - protected void setupEnergyHatchesVariables_EM() { - if (!mEnergyHatches.isEmpty() || !eEnergyMulti.isEmpty() - || !mDynamoHatches.isEmpty() - || !eDynamoMulti.isEmpty()) { - maxEUinputMin = V[15]; - maxEUinputMax = V[0]; - maxEUoutputMin = V[15]; - maxEUoutputMax = V[0]; - for (GT_MetaTileEntity_Hatch_Energy hatch : filterValidMTEs(mEnergyHatches)) { - if (hatch.maxEUInput() < maxEUinputMin) { - maxEUinputMin = hatch.maxEUInput(); - } - if (hatch.maxEUInput() > maxEUinputMax) { - maxEUinputMax = hatch.maxEUInput(); - } - } - for (GT_MetaTileEntity_Hatch_EnergyMulti hatch : filterValidMTEs(eEnergyMulti)) { - if (hatch.maxEUInput() < maxEUinputMin) { - maxEUinputMin = hatch.maxEUInput(); - } - if (hatch.maxEUInput() > maxEUinputMax) { - maxEUinputMax = hatch.maxEUInput(); - } - } - for (GT_MetaTileEntity_Hatch_Dynamo hatch : filterValidMTEs(mDynamoHatches)) { - if (hatch.maxEUOutput() < maxEUoutputMin) { - maxEUoutputMin = hatch.maxEUOutput(); - } - if (hatch.maxEUOutput() > maxEUoutputMax) { - maxEUoutputMax = hatch.maxEUOutput(); - } - } - for (GT_MetaTileEntity_Hatch_DynamoMulti hatch : filterValidMTEs(eDynamoMulti)) { - if (hatch.maxEUOutput() < maxEUoutputMin) { - maxEUoutputMin = hatch.maxEUOutput(); - } - if (hatch.maxEUOutput() > maxEUoutputMax) { - maxEUoutputMax = hatch.maxEUOutput(); - } - } - eMaxAmpereFlow = 0; - eMaxAmpereGen = 0; - // counts only full amps - for (GT_MetaTileEntity_Hatch_Energy hatch : filterValidMTEs(mEnergyHatches)) { - eMaxAmpereFlow += hatch.maxEUInput() / maxEUinputMin; - } - for (GT_MetaTileEntity_Hatch_EnergyMulti hatch : filterValidMTEs(eEnergyMulti)) { - eMaxAmpereFlow += hatch.maxEUInput() / maxEUinputMin * hatch.Amperes; - } - for (GT_MetaTileEntity_Hatch_Dynamo hatch : filterValidMTEs(mDynamoHatches)) { - eMaxAmpereGen += hatch.maxEUOutput() / maxEUoutputMin; - } - for (GT_MetaTileEntity_Hatch_DynamoMulti hatch : filterValidMTEs(eDynamoMulti)) { - eMaxAmpereGen += hatch.maxEUOutput() / maxEUoutputMin * hatch.Amperes; - } - } else { - maxEUinputMin = 0; - maxEUinputMax = 0; - eMaxAmpereFlow = 0; - maxEUoutputMin = 0; - maxEUoutputMax = 0; - eMaxAmpereGen = 0; - } - } - - protected void dischargeController_EM(IGregTechTileEntity aBaseMetaTileEntity) { - if (ePowerPass && getEUVar() > getMinimumStoredEU()) { - powerPass(aBaseMetaTileEntity); - } - } - - protected final void powerPass(IGregTechTileEntity aBaseMetaTileEntity) { - long euVar; - for (GT_MetaTileEntity_Hatch_Dynamo tHatch : filterValidMTEs(mDynamoHatches)) { - euVar = tHatch.maxEUOutput() * tHatch.maxAmperesOut(); - if (tHatch.getBaseMetaTileEntity() - .getStoredEU() <= tHatch.maxEUStore() - euVar - && aBaseMetaTileEntity - .decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, tHatch.maxAmperesOut()), false)) { - tHatch.setEUVar( - tHatch.getBaseMetaTileEntity() - .getStoredEU() + euVar); - } - } - for (GT_MetaTileEntity_Hatch_DynamoMulti tHatch : filterValidMTEs(eDynamoMulti)) { - euVar = tHatch.maxEUOutput() * tHatch.maxAmperesOut(); - if (tHatch.getBaseMetaTileEntity() - .getStoredEU() <= tHatch.maxEUStore() - euVar - && aBaseMetaTileEntity - .decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, tHatch.maxAmperesOut()), false)) { - tHatch.setEUVar( - tHatch.getBaseMetaTileEntity() - .getStoredEU() + euVar); - } - } - } - - protected final void powerPass_EM(IGregTechTileEntity aBaseMetaTileEntity) { - long euVar; - for (GT_MetaTileEntity_Hatch_Dynamo tHatch : filterValidMTEs(mDynamoHatches)) { - euVar = tHatch.maxEUOutput(); - if (tHatch.getBaseMetaTileEntity() - .getStoredEU() <= tHatch.maxEUStore() - euVar - && aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, 1), false)) { - tHatch.setEUVar( - tHatch.getBaseMetaTileEntity() - .getStoredEU() + euVar); - } - } - for (GT_MetaTileEntity_Hatch_DynamoMulti tHatch : filterValidMTEs(eDynamoMulti)) { - euVar = tHatch.maxEUOutput() * tHatch.Amperes; - if (tHatch.getBaseMetaTileEntity() - .getStoredEU() <= tHatch.maxEUStore() - euVar - && aBaseMetaTileEntity - .decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, tHatch.Amperes), false)) { - tHatch.setEUVar( - tHatch.getBaseMetaTileEntity() - .getStoredEU() + euVar); - } - } - } - - protected void chargeController_EM(IGregTechTileEntity aBaseMetaTileEntity) { - powerInput(); - } - - protected final void powerInput() { - long euVar; - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - if (getEUVar() > getMinimumStoredEU()) { - break; - } - euVar = Math.min(tHatch.maxEUInput() * tHatch.maxAmperesIn(), tHatch.getEUVar()); - if (tHatch.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(euVar, false)) { - setEUVar(getEUVar() + euVar); - } - } - for (GT_MetaTileEntity_Hatch_EnergyMulti tHatch : filterValidMTEs(eEnergyMulti)) { - if (getEUVar() > getMinimumStoredEU()) { - break; - } - euVar = Math.min(tHatch.maxEUInput() * tHatch.maxAmperesIn(), tHatch.getEUVar()); - if (tHatch.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(euVar, false)) { - setEUVar(getEUVar() + euVar); - } - } - } - - protected final void powerInput_EM() { - long euVar; - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - if (getEUVar() > getMinimumStoredEU()) { - break; - } - euVar = tHatch.maxEUInput(); - if (tHatch.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(euVar, false)) { - setEUVar(getEUVar() + euVar); - } - } - for (GT_MetaTileEntity_Hatch_EnergyMulti tHatch : filterValidMTEs(eEnergyMulti)) { - if (getEUVar() > getMinimumStoredEU()) { - break; - } - euVar = tHatch.maxEUInput() * tHatch.Amperes; - if (tHatch.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(euVar, false)) { - setEUVar(getEUVar() + euVar); - } - } - } - - // endregion - - // region EFFICIENCY AND FIXING LIMITS - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getIdealStatus() { - return super.getIdealStatus() + 2; - } - - @Override - public int getRepairStatus() { - return super.getRepairStatus() + (eCertainStatus == 0 ? 1 : 0) + (eParameters ? 1 : 0); - } - - // endregion - - // region ENERGY!!!! - - // new method - public boolean energyFlowOnRunningTick_EM(ItemStack aStack, boolean allowProduction) { - long euFlow = getPowerFlow() * eAmpereFlow; // quick scope sign - if (allowProduction && euFlow > 0) { - addEnergyOutput_EM(getPowerFlow() * (long) mEfficiency / getMaxEfficiency(aStack), eAmpereFlow); - } else if (euFlow < 0) { - if (POWERLESS_MODE) { - return true; - } - if (!drainEnergyInput_EM( - getPowerFlow(), - getPowerFlow() * getMaxEfficiency(aStack) / Math.max(1000L, mEfficiency), - eAmpereFlow)) { - criticalStopMachine(); - return false; - } - } - return true; - } - - public boolean energyFlowOnRunningTick(ItemStack aStack, boolean allowProduction) { - long euFlow = getPowerFlow() * eAmpereFlow; // quick scope sign - if (allowProduction && euFlow > 0) { - addEnergyOutput_EM(getPowerFlow() * (long) mEfficiency / getMaxEfficiency(aStack), eAmpereFlow); - } else if (euFlow < 0) { - if (POWERLESS_MODE) { - return true; - } - if (!drainEnergyInput( - getPowerFlow() * getMaxEfficiency(aStack) / Math.max(1000L, mEfficiency), - eAmpereFlow)) { - stopMachine(ShutDownReasonRegistry.POWER_LOSS); - return false; - } - } - return true; - } - - @Override - public long maxEUStore() { - return Math.max(maxEUinputMin * (eMaxAmpereFlow << 3), maxEUoutputMin * (eMaxAmpereGen << 3)); - } - - @Override - public final long getMinimumStoredEU() { - return maxEUStore() >> 1; - } - - @Override - public final long maxAmperesIn() { - return 0L; - } - - @Override - public final long maxAmperesOut() { - return 0L; - } - - @Deprecated - @Override - public final boolean addEnergyOutput(long eu) { - return addEnergyOutput_EM(eu, 1); - } - - public boolean addEnergyOutput_EM(long EU, long Amperes) { - if (EU < 0) { - EU = -EU; - } - if (Amperes < 0) { - Amperes = -Amperes; - } - long euVar = EU * Amperes; - long diff; - for (GT_MetaTileEntity_Hatch_Dynamo tHatch : filterValidMTEs(mDynamoHatches)) { - if (tHatch.maxEUOutput() < EU) { - explodeMultiblock(); - } - diff = tHatch.maxEUStore() - tHatch.getBaseMetaTileEntity() - .getStoredEU(); - if (diff > 0) { - if (euVar > diff) { - tHatch.setEUVar(tHatch.maxEUStore()); - euVar -= diff; - } else if (euVar <= diff) { - tHatch.setEUVar( - tHatch.getBaseMetaTileEntity() - .getStoredEU() + euVar); - return true; - } - } - } - for (GT_MetaTileEntity_Hatch_DynamoMulti tHatch : filterValidMTEs(eDynamoMulti)) { - if (tHatch.maxEUOutput() < EU) { - explodeMultiblock(); - } - diff = tHatch.maxEUStore() - tHatch.getBaseMetaTileEntity() - .getStoredEU(); - if (diff > 0) { - if (euVar > diff) { - tHatch.setEUVar(tHatch.maxEUStore()); - euVar -= diff; - } else if (euVar <= diff) { - tHatch.setEUVar( - tHatch.getBaseMetaTileEntity() - .getStoredEU() + euVar); - return true; - } - } - } - setEUVar(min(getEUVar() + euVar, maxEUStore())); - return false; - } - - @Deprecated - @Override - public final boolean drainEnergyInput(long eu) { - return drainEnergyInput_EM(0, eu, 1); - } - - public boolean drainEnergyInput_EM(long EUtTierVoltage, long EUtEffective, long Amperes) { - long EUuse = EUtEffective * Amperes; - if (EUuse == 0) { - return true; - } - if (maxEUinputMin == 0) { - return false; - } - if (EUuse < 0) { - EUuse = -EUuse; - } - if (EUuse > getEUVar() || // not enough power - (EUtTierVoltage == 0 ? EUuse > getMaxInputEnergy() : (EUtTierVoltage > maxEUinputMax) || // TIER IS - // BASED ON - // BEST HATCH! - // not total - // EUtEffective - // input - (EUtTierVoltage * Amperes - 1) / maxEUinputMin + 1 > eMaxAmpereFlow)) { // EUuse==0? --> (EUuse - // - 1) / maxEUinputMin - // + 1 = 1! //if - // not too much A - if (DEBUG_MODE) { - TecTech.LOGGER.debug("L1 " + EUuse + ' ' + getEUVar() + ' ' + (EUuse > getEUVar())); - TecTech.LOGGER.debug("L2 " + EUtEffective + ' ' + maxEUinputMax + ' ' + (EUtEffective > maxEUinputMax)); - TecTech.LOGGER.debug("L3 " + Amperes + ' ' + getMaxInputEnergy()); - TecTech.LOGGER.debug( - "L4 " + ((EUuse - 1) / maxEUinputMin + 1) - + ' ' - + eMaxAmpereFlow - + ' ' - + ((EUuse - 1) / maxEUinputMin + 1 > eMaxAmpereFlow)); - } - return false; - } - // sub eu - setEUVar(getEUVar() - EUuse); - return true; - } - - public boolean drainEnergyInput(long EUtEffective, long Amperes) { - long EUuse = EUtEffective * Amperes; - if (EUuse == 0) { - return true; - } - if (maxEUinputMin == 0) { - return false; - } - if (EUuse < 0) { - EUuse = -EUuse; - } - // not enough power - if (EUuse > getEUVar() || EUuse > getMaxInputEnergy()) { // EUuse==0? --> (EUuse - 1) / maxEUinputMin + 1 = 1! - // //if not too much - // A - return false; - } - // sub eu - setEUVar(getEUVar() - EUuse); - return true; - } - - // new method - public final boolean overclockAndPutValuesIn_EM(long EU, int time) { // TODO revise - if (EU == 0L) { - setPowerFlow(0); - mMaxProgresstime = time; - return true; - } - long tempEUt = Math.max(EU, V[1]); - long tempTier = maxEUinputMax >> 2; - while (tempEUt < tempTier) { - tempEUt <<= 2; - time >>= 1; - EU = time == 0 ? EU >> 1 : EU << 2; // U know, if the time is less than 1 tick make the machine use less - // power - } - if (EU > Integer.MAX_VALUE || EU < Integer.MIN_VALUE) { - setPowerFlow(Integer.MAX_VALUE - 1); - mMaxProgresstime = Integer.MAX_VALUE - 1; - return false; - } - setPowerFlow(EU); - mMaxProgresstime = time == 0 ? 1 : time; - return true; - } // Use in EM check recipe return statement if you want overclocking - - /** - * Use {@link #getMaxInputVoltage()} - */ - @Deprecated - public final long getMaxInputVoltageSum() { - return getMaxInputVoltage(); - } - - /** - * Use {@link #getMaxInputEu()} - */ - @Deprecated - public final long getMaxInputEnergy() { - return getMaxInputEu(); - } - - /** - * Use {@link #getMaxInputEu()} - */ - @Deprecated - public final long getMaxInputEnergy_EM() { - return getMaxInputEu(); - } - - // new Method - public final int getMaxEnergyInputTier_EM() { - return getTier(maxEUinputMax); - } - - // new Method - public final int getMinEnergyInputTier_EM() { - return getTier(maxEUinputMin); - } - - public final long getMaxAmpereFlowAtMinTierOfEnergyHatches() { - return eAmpereFlow; - } - - @Override - public List getExoticAndNormalEnergyHatchList() { - List list = new ArrayList<>(); - list.addAll(mEnergyHatches); - list.addAll(eEnergyMulti); - return list; - } - - @Override - public List getExoticEnergyHatches() { - List list = new ArrayList<>(); - list.addAll(eEnergyMulti); - return list; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return false; - } - - @Override - public final void explodeMultiblock() { - if (explodedThisTick) { - return; - } - explodedThisTick = true; - if (!TecTech.configTecTech.BOOM_ENABLE) { - TecTech.proxy.broadcast( - "Multi Explode BOOM! " + getBaseMetaTileEntity().getXCoord() - + ' ' - + getBaseMetaTileEntity().getYCoord() - + ' ' - + getBaseMetaTileEntity().getZCoord()); - StackTraceElement[] ste = Thread.currentThread() - .getStackTrace(); - TecTech.proxy.broadcast("Multi Explode BOOM! " + ste[2].toString()); - return; - } - extraExplosions_EM(); - GT_Pollution.addPollution(getBaseMetaTileEntity(), 600000); - mInventory[1] = null; - @SuppressWarnings("unchecked") - Iterable allHatches = Iterables.concat( - mInputBusses, - mOutputBusses, - mInputHatches, - mOutputHatches, - mDynamoHatches, - mMufflerHatches, - mEnergyHatches, - mMaintenanceHatches, - eParamHatches, - eEnergyMulti, - eUncertainHatches, - eDynamoMulti, - eInputData, - eOutputData); - for (MetaTileEntity tTileEntity : allHatches) { - if (tTileEntity != null && tTileEntity.getBaseMetaTileEntity() != null) { - tTileEntity.getBaseMetaTileEntity() - .doExplosion(V[9]); - } - } - getBaseMetaTileEntity().doExplosion(V[15]); - } - - @Override - public void doExplosion(long aExplosionPower) { - if (!TecTech.configTecTech.BOOM_ENABLE) { - TecTech.proxy.broadcast( - "Multi DoExplosion BOOM! " + getBaseMetaTileEntity().getXCoord() - + ' ' - + getBaseMetaTileEntity().getYCoord() - + ' ' - + getBaseMetaTileEntity().getZCoord()); - StackTraceElement[] ste = Thread.currentThread() - .getStackTrace(); - TecTech.proxy.broadcast("Multi DoExplosion BOOM! " + ste[2].toString()); - return; - } - explodeMultiblock(); - super.doExplosion(aExplosionPower); - } // Redirecting to explodemultiblock - // endregion - - // region adder methods - @Override - public final boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - } - if (aMetaTileEntity instanceof IDualInputHatch) { - return mDualInputHatches.add((IDualInputHatch) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - return mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - return mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - return mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) { - return mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - return mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { - return mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - return mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { - return mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Param) { - return eParamHatches.add((GT_MetaTileEntity_Hatch_Param) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Uncertainty) { - return eUncertainHatches.add((GT_MetaTileEntity_Hatch_Uncertainty) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { - return eEnergyMulti.add((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoMulti) { - return eDynamoMulti.add((GT_MetaTileEntity_Hatch_DynamoMulti) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputData) { - return eInputData.add((GT_MetaTileEntity_Hatch_InputData) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputData) { - return eOutputData.add((GT_MetaTileEntity_Hatch_OutputData) aMetaTileEntity); - } - return false; - } - - public final boolean addClassicToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - } - if (aMetaTileEntity instanceof IDualInputHatch) { - return mDualInputHatches.add((IDualInputHatch) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - return mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - return mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - return mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) { - return mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - return mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { - return mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - return mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { - return mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Param) { - return eParamHatches.add((GT_MetaTileEntity_Hatch_Param) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Uncertainty) { - return eUncertainHatches.add((GT_MetaTileEntity_Hatch_Uncertainty) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { - return eEnergyMulti.add((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoMulti) { - return eDynamoMulti.add((GT_MetaTileEntity_Hatch_DynamoMulti) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputData) { - return eInputData.add((GT_MetaTileEntity_Hatch_InputData) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputData) { - return eOutputData.add((GT_MetaTileEntity_Hatch_OutputData) aMetaTileEntity); - } - return false; - } - - public final boolean addElementalToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - } - - return false; - } - - public final boolean addElementalMufflerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - - return false; - } - - @Override - public final boolean addMufflerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); - } - - return false; - } - - @Override - public final boolean addInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof IDualInputHatch) { - ((IDualInputHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mDualInputHatches.add((IDualInputHatch) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = getRecipeMap(); - return mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity).mRecipeMap = getRecipeMap(); - return mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); - } - - return false; - } - - @Override - public final boolean addOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity); - } - - return false; - } - - @Deprecated - @Override - public final boolean addEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eEnergyMulti.add((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity); - } - return false; - } - - @Deprecated - @Override - public final boolean addDynamoToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoMulti) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eDynamoMulti.add((GT_MetaTileEntity_Hatch_DynamoMulti) aMetaTileEntity); - } - return false; - } - - // New Method - public final boolean addEnergyIOToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eEnergyMulti.add((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoMulti) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eDynamoMulti.add((GT_MetaTileEntity_Hatch_DynamoMulti) aMetaTileEntity); - } - return false; - } - - // NEW METHOD - public final boolean addElementalInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - - return false; - } - - // NEW METHOD - public final boolean addElementalOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - - return false; - } - - // NEW METHOD - public final boolean addParametrizerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Param) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eParamHatches.add((GT_MetaTileEntity_Hatch_Param) aMetaTileEntity); - } - return false; - } - - // NEW METHOD - public final boolean addUncertainToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Uncertainty) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eUncertainHatches.add((GT_MetaTileEntity_Hatch_Uncertainty) aMetaTileEntity); - } - return false; - } - - @Override - public final boolean addMaintenanceToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Param) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eParamHatches.add((GT_MetaTileEntity_Hatch_Param) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Uncertainty) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eUncertainHatches.add((GT_MetaTileEntity_Hatch_Uncertainty) aMetaTileEntity); - } - return false; - } - - // NEW METHOD - public final boolean addClassicMaintenanceToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - } - return false; - } - - // NEW METHOD - public final boolean addDataConnectorToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputData) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eInputData.add((GT_MetaTileEntity_Hatch_InputData) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputData) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return eOutputData.add((GT_MetaTileEntity_Hatch_OutputData) aMetaTileEntity); - } - return false; - } - // endregion - - protected static IStructureElement classicHatches( - int casingIndex, int dot, Block casingBlock, int casingMeta) { - return GT_HatchElementBuilder.builder() - .atLeast( - InputBus, - InputHatch, - OutputHatch, - OutputBus, - Maintenance, - Muffler, - HatchElement.EnergyMulti, - HatchElement.DynamoMulti, - HatchElement.InputData, - HatchElement.OutputData, - HatchElement.Uncertainty) - .casingIndex(casingIndex) - .dot(dot) - .buildAndChain(casingBlock, casingMeta); - } - - protected static IStructureElement allHatches(int casingIndex, - int dot, Block casingBlock, int casingMeta) { - return GT_HatchElementBuilder.builder() - .atLeast( - InputBus, - InputHatch, - OutputHatch, - OutputBus, - Maintenance, - Muffler, - HatchElement.EnergyMulti, - HatchElement.DynamoMulti, - HatchElement.InputData, - HatchElement.OutputData, - HatchElement.Uncertainty) - .casingIndex(casingIndex) - .dot(dot) - .buildAndChain(casingBlock, casingMeta); - } - - public enum HatchElement implements IHatchElement { - - Param(GT_MetaTileEntity_MultiblockBase_EM::addParametrizerToMachineList, GT_MetaTileEntity_Hatch_Param.class) { - - @Override - public long count(GT_MetaTileEntity_MultiblockBase_EM t) { - return t.eParamHatches.size(); - } - }, - Uncertainty(GT_MetaTileEntity_MultiblockBase_EM::addUncertainToMachineList, - GT_MetaTileEntity_Hatch_Uncertainty.class) { - - @Override - public long count(GT_MetaTileEntity_MultiblockBase_EM t) { - return t.eUncertainHatches.size(); - } - }, - EnergyMulti(GT_MetaTileEntity_MultiblockBase_EM::addEnergyInputToMachineList, - GT_MetaTileEntity_Hatch_EnergyMulti.class) { - - @Override - public long count(GT_MetaTileEntity_MultiblockBase_EM t) { - return t.eEnergyMulti.size(); - } - }, - DynamoMulti(GT_MetaTileEntity_MultiblockBase_EM::addDynamoToMachineList, - GT_MetaTileEntity_Hatch_DynamoMulti.class) { - - @Override - public long count(GT_MetaTileEntity_MultiblockBase_EM t) { - return t.eDynamoMulti.size(); - } - }, - InputData(GT_MetaTileEntity_MultiblockBase_EM::addDataConnectorToMachineList, - GT_MetaTileEntity_Hatch_InputData.class) { - - @Override - public long count(GT_MetaTileEntity_MultiblockBase_EM t) { - return t.eInputData.size(); - } - }, - OutputData(GT_MetaTileEntity_MultiblockBase_EM::addDataConnectorToMachineList, - GT_MetaTileEntity_Hatch_OutputData.class) { - - @Override - public long count(GT_MetaTileEntity_MultiblockBase_EM t) { - return t.eOutputData.size(); - } - },; - - private final List> mteClasses; - private final IGT_HatchAdder adder; - - @SafeVarargs - HatchElement(IGT_HatchAdder adder, - Class... mteClasses) { - this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); - this.adder = adder; - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - public IGT_HatchAdder adder() { - return adder; - } - } - - /** - * Check if the computation timeout is still active - * - * @return True if the timeout is still active or false if the machine should fail - */ - protected boolean checkComputationTimeout() { - if (eComputationTimeout > 0) { - return --eComputationTimeout > 0; - } - return false; - } - - // region ModularUI - - @Override - public int getGUIWidth() { - return 198; - } - - @Override - public int getGUIHeight() { - return 192; - } - - @Override - public void bindPlayerInventoryUI(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.bindPlayerInventory(buildContext.getPlayer(), new Pos2d(7, 109), getGUITextureSet().getItemSlot()); - } - - public boolean isPowerPassButtonEnabled() { - return true; - } - - public boolean isSafeVoidButtonEnabled() { - return true; - } - - public boolean isAllowedToWorkButtonEnabled() { - return true; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO_DARK) - .setSize(18, 18) - .setPos(173, 74)); - } - - private static byte LEDCounter = 0; - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - if (doesBindPlayerInventory()) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE) - .setPos(4, 4) - .setSize(190, 91)); - } else { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE_NO_INVENTORY) - .setPos(4, 4) - .setSize(190, 171)); - } - final SlotWidget inventorySlot = new SlotWidget(new BaseSlot(inventoryHandler, 1) { - - @Override - public int getSlotStackLimit() { - return getInventoryStackLimit(); - } - }); - if (doesBindPlayerInventory()) { - builder - .widget( - inventorySlot.setBackground(getGUITextureSet().getItemSlot(), TecTechUITextures.OVERLAY_SLOT_MESH) - .setPos(173, 167)) - .widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_HEAT_SINK_SMALL) - .setPos(173, 185) - .setSize(18, 6)); - } - - final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); - drawTexts(screenElements, inventorySlot); - builder.widget(screenElements.setPos(7, 8)); - - Widget powerPassButton = createPowerPassButton(); - builder.widget(powerPassButton) - .widget(new FakeSyncWidget.BooleanSyncer(() -> ePowerPass, val -> ePowerPass = val)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> ePowerPassCover, val -> ePowerPassCover = val)); - Widget safeVoidButton = createSafeVoidButton(); - builder.widget(safeVoidButton) - .widget(new FakeSyncWidget.BooleanSyncer(() -> eSafeVoid, val -> eSafeVoid = val)); - Widget powerSwitchButton = createPowerSwitchButton(); - builder.widget(powerSwitchButton) - .widget(new FakeSyncWidget.BooleanSyncer(() -> getBaseMetaTileEntity().isAllowedToWork(), val -> { - if (val) getBaseMetaTileEntity().enableWorking(); - else getBaseMetaTileEntity().disableWorking(); - })); - - builder.widget(new DrawableWidget() { - - @Override - public void draw(float partialTicks) { - super.draw(partialTicks); - LEDCounter = (byte) ((1 + LEDCounter) % 6); - } - }.setDrawable(TecTechUITextures.PICTURE_PARAMETER_BLANK) - .setPos(5, doesBindPlayerInventory() ? 96 : 176) - .setSize(166, 12)); - for (int hatch = 0; hatch < 10; hatch++) { - for (int param = 0; param < 2; param++) { - int ledID = hatch + param * 10; - buildContext - .addSyncedWindow(LED_WINDOW_BASE_ID + ledID, (player) -> createLEDConfigurationWindow(ledID)); - addParameterLED(builder, hatch, param, true); - addParameterLED(builder, hatch, param, false); - } - } - - if (doesBindPlayerInventory()) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_UNCERTAINTY_MONITOR_MULTIMACHINE) - .setPos(173, 96) - .setSize(18, 18)); - for (int i = 0; i < 9; i++) { - final int index = i; - builder.widget(new DrawableWidget().setDrawable(() -> { - UITexture valid = TecTechUITextures.PICTURE_UNCERTAINTY_VALID[index]; - UITexture invalid = TecTechUITextures.PICTURE_UNCERTAINTY_INVALID[index]; - switch (eCertainMode) { - case 1: // ooo oxo ooo - if (index == 4) return eCertainStatus == 0 ? valid : invalid; - break; - case 2: // ooo xox ooo - if (index == 3) return (eCertainStatus & 1) == 0 ? valid : invalid; - if (index == 5) return (eCertainStatus & 2) == 0 ? valid : invalid; - break; - case 3: // oxo xox oxo - if (index == 1) return (eCertainStatus & 1) == 0 ? valid : invalid; - if (index == 3) return (eCertainStatus & 2) == 0 ? valid : invalid; - if (index == 5) return (eCertainStatus & 4) == 0 ? valid : invalid; - if (index == 7) return (eCertainStatus & 8) == 0 ? valid : invalid; - break; - case 4: // xox ooo xox - if (index == 0) return (eCertainStatus & 1) == 0 ? valid : invalid; - if (index == 2) return (eCertainStatus & 2) == 0 ? valid : invalid; - if (index == 6) return (eCertainStatus & 4) == 0 ? valid : invalid; - if (index == 8) return (eCertainStatus & 8) == 0 ? valid : invalid; - break; - case 5: // xox oxo xox - if (index == 0) return (eCertainStatus & 1) == 0 ? valid : invalid; - if (index == 2) return (eCertainStatus & 2) == 0 ? valid : invalid; - if (index == 4) return (eCertainStatus & 4) == 0 ? valid : invalid; - if (index == 6) return (eCertainStatus & 8) == 0 ? valid : invalid; - if (index == 8) return (eCertainStatus & 16) == 0 ? valid : invalid; - break; - } - return null; - }) - .setPos(174 + (index % 3) * 6, 97 + (index / 3) * 6) - .setSize(4, 4)); - } - builder.widget(new FakeSyncWidget.ByteSyncer(() -> eCertainMode, val -> eCertainMode = val)) - .widget(new FakeSyncWidget.ByteSyncer(() -> eCertainStatus, val -> eCertainStatus = val)); - } - } - - protected ButtonWidget createPowerPassButton() { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (isPowerPassButtonEnabled() || ePowerPassCover) { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - ePowerPass = !ePowerPass; - if (!isAllowedToWorkButtonEnabled()) { // TRANSFORMER HACK - if (ePowerPass) { - getBaseMetaTileEntity().enableWorking(); - } else { - getBaseMetaTileEntity().disableWorking(); - } - } - } - }) - .setPlayClickSound(false) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); - if (!isPowerPassButtonEnabled() && !ePowerPassCover) { - ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_DISABLED); - } else { - if (ePowerPass) { - ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_ON); - } else { - ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_OFF); - } - } - return ret.toArray(new IDrawable[0]); - }) - .setPos(174, doesBindPlayerInventory() ? 116 : 140) - .setSize(16, 16); - if (isPowerPassButtonEnabled()) { - button.addTooltip("Power Pass") - .setTooltipShowUpDelay(TOOLTIP_DELAY); - } - return (ButtonWidget) button; - } - - protected ButtonWidget createSafeVoidButton() { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (isSafeVoidButtonEnabled()) { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - eSafeVoid = !eSafeVoid; - } - }) - .setPlayClickSound(false) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); - if (!isSafeVoidButtonEnabled()) { - ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_DISABLED); - } else { - if (eSafeVoid) { - ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_ON); - } else { - ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_OFF); - } - } - return ret.toArray(new IDrawable[0]); - }) - .setPos(174, doesBindPlayerInventory() ? 132 : 156) - .setSize(16, 16); - if (isSafeVoidButtonEnabled()) { - button.addTooltip("Safe Void") - .setTooltipShowUpDelay(TOOLTIP_DELAY); - } - return (ButtonWidget) button; - } - - protected ButtonWidget createPowerSwitchButton() { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (isAllowedToWorkButtonEnabled()) { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - if (getBaseMetaTileEntity().isAllowedToWork()) { - getBaseMetaTileEntity().disableWorking(); - } else { - getBaseMetaTileEntity().enableWorking(); - } - } - }) - .setPlayClickSound(false) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); - if (!isAllowedToWorkButtonEnabled()) { - ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_DISABLED); - } else { - if (getBaseMetaTileEntity().isAllowedToWork()) { - ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON); - } else { - ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF); - } - } - return ret.toArray(new IDrawable[0]); - }) - .setPos(174, doesBindPlayerInventory() ? 148 : 172) - .setSize(16, 16); - if (isAllowedToWorkButtonEnabled()) { - button.addTooltip("Power Switch") - .setTooltipShowUpDelay(TOOLTIP_DELAY); - } - return (ButtonWidget) button; - } - - private ModularWindow createLEDConfigurationWindow(int ledID) { - return ModularWindow.builder(100, 40) - .setBackground(TecTechUITextures.BACKGROUND_SCREEN_BLUE) - .setPos( - (screenSize, mainWindow) -> new Pos2d( - (screenSize.width / 2 - mainWindow.getSize().width / 2) - 110, - (screenSize.height / 2 - mainWindow.getSize().height / 2))) - .widget( - ButtonWidget.closeWindowButton(true) - .setPos(85, 3)) - .widget( - new NumericWidget().setGetter(() -> parametrization.iParamsIn[ledID]) - .setSetter(val -> parametrization.iParamsIn[ledID] = val) - .setIntegerOnly(false) - .modifyNumberFormat(format -> format.setMaximumFractionDigits(8)) - .setTextColor(Color.LIGHT_BLUE.normal) - .setTextAlignment(Alignment.CenterLeft) - .setFocusOnGuiOpen(true) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .setPos(5, 20) - .setSize(90, 15)) - .widget( - new TextWidget((ledID % 10) + ":" + (ledID / 10) + ":I").setDefaultColor(Color.WHITE.normal) - .setTextAlignment(Alignment.Center) - .setPos(5, 5)) - .build(); - } - - private void addParameterLED(ModularWindow.Builder builder, int hatch, int param, boolean input) { - final int parameterIndex = hatch + param * 10; - final int posIndex = hatch * 2 + param; - ButtonWidget ledWidget = new ButtonWidget() { - - @Override - public void draw(float partialTicks) { - IDrawable texture = null; - final LedStatus status = input ? parametrization.eParamsInStatus[parameterIndex] - : parametrization.eParamsOutStatus[parameterIndex]; - switch (status) { - case STATUS_WTF: { - int c = LEDCounter; - if (c > 4) { - c = TecTech.RANDOM.nextInt(5); - } - switch (c) { - case 0: - texture = TecTechUITextures.PICTURE_PARAMETER_BLUE[posIndex]; - break; - case 1: - texture = TecTechUITextures.PICTURE_PARAMETER_CYAN[posIndex]; - break; - case 2: - texture = TecTechUITextures.PICTURE_PARAMETER_GREEN[posIndex]; - break; - case 3: - texture = TecTechUITextures.PICTURE_PARAMETER_ORANGE[posIndex]; - break; - case 4: - texture = TecTechUITextures.PICTURE_PARAMETER_RED[posIndex]; - break; - } - break; - } - case STATUS_WRONG: // fallthrough - if (LEDCounter < 2) { - texture = TecTechUITextures.PICTURE_PARAMETER_BLUE[posIndex]; - break; - } else if (LEDCounter < 4) { - texture = TecTechUITextures.PICTURE_PARAMETER_RED[posIndex]; - break; - } - case STATUS_OK: // ok - texture = TecTechUITextures.PICTURE_PARAMETER_GREEN[posIndex]; - break; - case STATUS_TOO_LOW: // too low blink - if (LEDCounter < 3) { - texture = TecTechUITextures.PICTURE_PARAMETER_BLUE[posIndex]; - break; - } - case STATUS_LOW: // too low - texture = TecTechUITextures.PICTURE_PARAMETER_CYAN[posIndex]; - break; - case STATUS_TOO_HIGH: // too high blink - if (LEDCounter < 3) { - texture = TecTechUITextures.PICTURE_PARAMETER_RED[posIndex]; - break; - } - case STATUS_HIGH: // too high - texture = TecTechUITextures.PICTURE_PARAMETER_ORANGE[posIndex]; - break; - case STATUS_NEUTRAL: - if (LEDCounter < 3) { - GL11.glColor4f(.85f, .9f, .95f, .5F); - } else { - GL11.glColor4f(.8f, .9f, 1f, .5F); - } - texture = TecTechUITextures.PICTURE_PARAMETER_GRAY; - break; - case STATUS_UNDEFINED: - if (LEDCounter < 3) { - GL11.glColor4f(.5f, .1f, .15f, .5F); - } else { - GL11.glColor4f(0f, .1f, .2f, .5F); - } - texture = TecTechUITextures.PICTURE_PARAMETER_GRAY; - break; - case STATUS_UNUSED: - default: - // no-op - break; - } - setBackground(texture); - super.draw(partialTicks); - GL11.glColor4f(1f, 1f, 1f, 1f); - } - }.setOnClick((clickData, widget) -> { - if (!widget.isClient() && input - && parametrization.eParamsInStatus[parameterIndex] != LedStatus.STATUS_UNUSED) { - // We don't use CloseAllButMain here in case MB implementation adds their own window - for (int i = 0; i < parametrization.eParamsInStatus.length; i++) { - if (widget.getContext() - .isWindowOpen(LED_WINDOW_BASE_ID + i)) { - widget.getContext() - .closeWindow(LED_WINDOW_BASE_ID + i); - } - } - widget.getContext() - .openSyncedWindow(LED_WINDOW_BASE_ID + parameterIndex); - } - }); - builder.widget(ledWidget.dynamicTooltip(() -> { - if (input) { - return getFullLedDescriptionIn(hatch, param); - } else { - return getFullLedDescriptionOut(hatch, param); - } - }) - .setPos(12 + posIndex * 8, (doesBindPlayerInventory() ? 97 : 177) + (input ? 0 : 1) * 6) - .setSize(6, 4)); - if (input) { - builder - .widget( - new FakeSyncWidget.ByteSyncer( - () -> parametrization.eParamsInStatus[parameterIndex].getOrdinalByte(), - val -> parametrization.eParamsInStatus[parameterIndex] = LedStatus.getStatus(val)) - .setOnClientUpdate(val -> ledWidget.notifyTooltipChange())) - .widget( - new FakeSyncWidget.DoubleSyncer( - () -> parametrization.iParamsIn[parameterIndex], - val -> parametrization.iParamsIn[parameterIndex] = val) - .setOnClientUpdate(val -> ledWidget.notifyTooltipChange())); - } else { - builder - .widget( - new FakeSyncWidget.ByteSyncer( - () -> parametrization.eParamsOutStatus[parameterIndex].getOrdinalByte(), - val -> parametrization.eParamsOutStatus[parameterIndex] = LedStatus.getStatus(val)) - .setOnClientUpdate(val -> ledWidget.notifyTooltipChange())) - .widget( - new FakeSyncWidget.DoubleSyncer( - () -> parametrization.iParamsOut[parameterIndex], - val -> parametrization.iParamsOut[parameterIndex] = val) - .setOnClientUpdate(val -> ledWidget.notifyTooltipChange())); - } - } - - // endregion -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/INameFunction.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/INameFunction.java deleted file mode 100644 index 11867c067a..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/INameFunction.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.base; - -public interface INameFunction { - - String apply(T t, Parameters.IParameter iParameter); -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IStatusFunction.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IStatusFunction.java deleted file mode 100644 index 37d5664d20..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/IStatusFunction.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.base; - -public interface IStatusFunction { - - LedStatus apply(T t, Parameters.IParameter iParameter); -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/LedStatus.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/LedStatus.java deleted file mode 100644 index e99739b69e..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/LedStatus.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.base; - -import java.util.function.Supplier; - -import net.minecraft.util.EnumChatFormatting; - -import com.github.technus.tectech.TecTech; - -public enum LedStatus { - - STATUS_UNUSED(() -> EnumChatFormatting.DARK_GRAY + "Unused", true), // - STATUS_TOO_LOW(() -> EnumChatFormatting.BLUE + "Too Low", false), // - STATUS_LOW(() -> EnumChatFormatting.AQUA + "Low", true), // - STATUS_WRONG(() -> EnumChatFormatting.DARK_PURPLE + "Wrong", false), // - STATUS_OK(() -> EnumChatFormatting.GREEN + "Valid", true), // - STATUS_TOO_HIGH(() -> EnumChatFormatting.RED + "Too High", false), // - STATUS_HIGH(() -> EnumChatFormatting.GOLD + "High", true), // - STATUS_UNDEFINED(() -> EnumChatFormatting.GRAY + "Unknown", false), - STATUS_NEUTRAL(() -> EnumChatFormatting.WHITE + "Neutral", true), - STATUS_WTF(() -> LedStatus.values()[TecTech.RANDOM.nextInt(9)].name.get(), false); - - public final Supplier name; - public final boolean isOk; - - LedStatus(Supplier name, boolean ok) { - this.name = name; - this.isOk = ok; - } - - public byte getOrdinalByte() { - return (byte) ordinal(); - } - - public static LedStatus getStatus(byte value) { - try { - return LedStatus.values()[value]; - } catch (Exception e) { - return STATUS_UNDEFINED; - } - } - - public static LedStatus[] makeArray(int count, LedStatus defaultValue) { - LedStatus[] statuses = new LedStatus[count]; - for (int i = 0; i < count; i++) { - statuses[i] = defaultValue; - } - return statuses; - } - - public static LedStatus fromLimitsInclusiveOuterBoundary(double value, double min, double low, double high, - double max, double... excludedNumbers) { - if (value < min) return STATUS_TOO_LOW; - if (value > max) return STATUS_TOO_HIGH; - - if (value < low) return STATUS_LOW; - if (value > high) return STATUS_HIGH; - for (double val : excludedNumbers) { - if (val == value) return STATUS_WRONG; - } - if (Double.isNaN(value)) return STATUS_WRONG; - return STATUS_OK; - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/Parameters.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/Parameters.java deleted file mode 100644 index 5b2c73b593..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/Parameters.java +++ /dev/null @@ -1,327 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.base; - -import java.util.ArrayList; - -/** - * Instantiate parameters as field in parametersInstantiation_EM(); - */ -public class Parameters { - - private static final IStatusFunction LED_STATUS_FUNCTION_DEFAULT = (b, p) -> LedStatus.STATUS_UNDEFINED; - private static final INameFunction NAME_FUNCTION_DEFAULT = (b, p) -> "Undefined"; - - final Group[] groups = new Group[10]; - - double[] iParamsIn = new double[20]; // number I from parametrizers - double[] iParamsOut = new double[20]; // number O to parametrizers - final ArrayList parameterInArrayList = new ArrayList<>(); - final ArrayList parameterOutArrayList = new ArrayList<>(); - - // package private for use in gui - LedStatus[] eParamsInStatus = LedStatus.makeArray(20, LedStatus.STATUS_UNUSED); // LED status for I - LedStatus[] eParamsOutStatus = LedStatus.makeArray(20, LedStatus.STATUS_UNUSED); // LED status for O - - double getIn(int hatchNo, int parameterId) { - return iParamsIn[hatchNo + 10 * parameterId]; - } - - double getOut(int hatchNo, int parameterId) { - return iParamsOut[hatchNo + 10 * parameterId]; - } - - LedStatus getStatusIn(int hatchNo, int parameterId) { - return eParamsInStatus[hatchNo + 10 * parameterId]; - } - - LedStatus getStatusOut(int hatchNo, int parameterId) { - return eParamsOutStatus[hatchNo + 10 * parameterId]; - } - - private final GT_MetaTileEntity_MultiblockBase_EM parent; - - Parameters(GT_MetaTileEntity_MultiblockBase_EM parent) { - this.parent = parent; - } - - public boolean trySetParameters(int hatch, double parameter0, double parameter1) { - Group p = groups[hatch]; - if (parent.mMaxProgresstime <= 0 || (p != null && p.updateWhileRunning)) { - iParamsIn[hatch] = parameter0; - iParamsIn[hatch + 10] = parameter1; - return true; - } - return false; - } - - @SuppressWarnings("unused") // Used in GTNH-Intergalactic, do not delete. - public boolean trySetParameters(int hatchNo, int parameterId, double parameter) { - Group p = groups[hatchNo]; - if (parent.mMaxProgresstime <= 0 || (p != null && p.updateWhileRunning)) { - iParamsIn[hatchNo + 10 * parameterId] = parameter; - return true; - } - return false; - } - - public void setToDefaults(int hatch, boolean defaultIn, boolean defaultOut) { - Group p = groups[hatch]; - if (p == null) { - if (defaultIn) { - iParamsIn[hatch] = 0; - iParamsIn[hatch + 10] = 0; - } - if (defaultOut) { - iParamsOut[hatch] = 0; - iParamsOut[hatch + 10] = 0; - } - } else { - p.setToDefaults(defaultIn, defaultOut); - } - } - - public void setToDefaults(boolean defaultIn, boolean defaultOut) { - for (int hatch = 0; hatch < 10; hatch++) { - setToDefaults(hatch, defaultIn, defaultOut); - } - } - - public Group getGroup(int hatchNo, boolean updateWhileRunning) { - return groups[hatchNo] != null ? groups[hatchNo] : new Group(hatchNo, updateWhileRunning); - } - - public Group getGroup(int hatchNo) { - return groups[hatchNo] != null ? groups[hatchNo] : new Group(hatchNo, false); - } - - public interface IParameter { - - double get(); - - double getDefault(); - - void updateStatus(); - - LedStatus getStatus(boolean update); - - int id(); - - int hatchId(); - - int parameterId(); - - String getBrief(); - } - - /** - * most likely used locally in parametersInstantiation_EM() - */ - public class Group { - - private final int hatchNo; - public final ParameterIn[] parameterIn = new ParameterIn[2]; - public final ParameterOut[] parameterOut = new ParameterOut[2]; - public boolean updateWhileRunning; - - private Group(int hatchNo, boolean updateWhileRunning) { - if (hatchNo < 0 || hatchNo >= 10) { - throw new IllegalArgumentException("Hatch id must be in 0 to 9 range"); - } - this.hatchNo = hatchNo; - this.updateWhileRunning = updateWhileRunning; - groups[hatchNo] = this; - } - - public ParameterIn makeInParameter(int paramID, double defaultValue, INameFunction name, - IStatusFunction status) { - return new ParameterIn(paramID, defaultValue, name, status); - } - - public ParameterOut makeOutParameter(int paramID, double defaultValue, INameFunction name, - IStatusFunction status) { - return new ParameterOut(paramID, defaultValue, name, status); - } - - public void setToDefaults(boolean defaultIn, boolean defaultOut) { - if (defaultIn) { - if (this.parameterIn[0] != null) { - this.parameterIn[0].setDefault(); - } else { - iParamsIn[hatchNo] = 0; - } - if (this.parameterIn[1] != null) { - this.parameterIn[1].setDefault(); - } else { - iParamsIn[hatchNo + 10] = 0; - } - } - if (defaultOut) { - if (this.parameterOut[0] != null) { - this.parameterOut[0].setDefault(); - } else { - iParamsOut[hatchNo] = 0; - } - if (this.parameterOut[1] != null) { - this.parameterOut[1].setDefault(); - } else { - iParamsOut[hatchNo + 10] = 0; - } - } - } - - /** - * Make a field out of this... - */ - public class ParameterOut implements IParameter { - - public final int id; - public final double defaultValue; - IStatusFunction status; - INameFunction name; - - private ParameterOut(int paramID, double defaultValue, INameFunction name, IStatusFunction status) { - this.name = name == null ? NAME_FUNCTION_DEFAULT : name; - if (paramID < 0 || paramID > 2) { - throw new IllegalArgumentException("Parameter id must be in 0 to 1 range"); - } - if (parameterOut[paramID] != null) { - throw new IllegalArgumentException("Parameter id already occupied"); - } - this.id = hatchNo + 10 * paramID; - this.defaultValue = defaultValue; - this.status = status == null ? LED_STATUS_FUNCTION_DEFAULT : status; - parameterOutArrayList.add(this); - parameterOut[paramID] = this; - } - - void setDefault() { - set(defaultValue); - } - - @Override - public double get() { - return iParamsOut[id]; - } - - @Override - public double getDefault() { - return defaultValue; - } - - public void set(double value) { - iParamsOut[id] = value; - } - - @SuppressWarnings("unchecked") - @Override - public void updateStatus() { - eParamsOutStatus[id] = status.apply(parent, this); - } - - @Override - public LedStatus getStatus(boolean update) { - if (update) { - updateStatus(); - } - return eParamsOutStatus[id]; - } - - @Override - public String getBrief() { - return name.apply(parent, this); - } - - @Override - public int id() { - return id; - } - - @Override - public int hatchId() { - return id % 10; - } - - @Override - public int parameterId() { - return id / 10; - } - } - - /** - * Make a field out of this... - */ - public class ParameterIn implements IParameter { - - public final int id; - public final double defaultValue; - IStatusFunction status; - INameFunction name; - - private ParameterIn(int paramID, double defaultValue, INameFunction name, IStatusFunction status) { - this.name = name == null ? NAME_FUNCTION_DEFAULT : name; - this.id = hatchNo + 10 * paramID; - if (paramID < 0 || paramID > 2) { - throw new IllegalArgumentException("Parameter id must be in 0 to 1 range"); - } - if (parameterIn[paramID] != null) { - throw new IllegalArgumentException("Parameter id already occupied"); - } - this.defaultValue = defaultValue; - this.status = status == null ? LED_STATUS_FUNCTION_DEFAULT : status; - parameterInArrayList.add(this); - parameterIn[paramID] = this; - } - - void setDefault() { - set(defaultValue); - } - - @Override - public double get() { - return iParamsIn[id]; - } - - void set(double value) { - iParamsIn[id] = value; - } - - @Override - public double getDefault() { - return defaultValue; - } - - @SuppressWarnings("unchecked") - @Override - public void updateStatus() { - eParamsInStatus[id] = status.apply(parent, this); - } - - @Override - public LedStatus getStatus(boolean update) { - if (update) { - updateStatus(); - } - return eParamsInStatus[id]; - } - - @Override - public String getBrief() { - return name.apply(parent, this); - } - - @Override - public int id() { - return id; - } - - @Override - public int hatchId() { - return id % 10; - } - - @Override - public int parameterId() { - return id / 10; - } - } - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/SoundLoop.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/SoundLoop.java deleted file mode 100644 index 591f7d3be5..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/SoundLoop.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.base; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.audio.MovingSound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -@SideOnly(Side.CLIENT) -public class SoundLoop extends MovingSound { - - private final boolean whileActive; - private final boolean whileInactive; - private final int worldID; - private boolean fadeMe = false; - - public SoundLoop(ResourceLocation p_i45104_1_, IGregTechTileEntity base, boolean stopWhenActive, - boolean stopWhenInactive) { - super(p_i45104_1_); - this.whileActive = stopWhenActive; - this.whileInactive = stopWhenInactive; - xPosF = base.getXCoord(); - yPosF = base.getYCoord(); - zPosF = base.getZCoord(); - worldID = base.getWorld().provider.dimensionId; - repeat = true; - volume = 0.0625f; - } - - @Override - public void update() { - if (donePlaying) { - return; - } - if (fadeMe) { - volume -= 0.0625f; - if (volume <= 0) { - volume = 0; - donePlaying = true; - } - } else if (volume < 1) { - volume += 0.0625f; - } - World world = Minecraft.getMinecraft().thePlayer.worldObj; - donePlaying = world.provider.dimensionId != worldID - || !world.checkChunksExist((int) xPosF, (int) yPosF, (int) zPosF, (int) xPosF, (int) yPosF, (int) zPosF); - if (donePlaying) return; - TileEntity tile = world.getTileEntity((int) xPosF, (int) yPosF, (int) zPosF); - if (!(tile instanceof IGregTechTileEntity)) { - donePlaying = true; - return; - } - fadeMe |= ((IGregTechTileEntity) tile).isActive() ? whileActive : whileInactive; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java deleted file mode 100644 index 6e5597516b..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/base/render/TT_RenderedExtendedFacingTexture.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.base.render; - -import gregtech.api.enums.Dyes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.common.render.GT_RenderedTexture; - -public class TT_RenderedExtendedFacingTexture extends GT_RenderedTexture { - - public TT_RenderedExtendedFacingTexture(IIconContainer aIcon, short[] aRGBa, boolean allowAlpha, boolean glow, - boolean stdOrient, boolean extFacing) { - super(aIcon, aRGBa, allowAlpha, glow, stdOrient, extFacing); - } - - public TT_RenderedExtendedFacingTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) { - this(aIcon, aRGBa, aAllowAlpha, false, false, true); - } - - public TT_RenderedExtendedFacingTexture(IIconContainer aIcon, short[] aRGBa) { - this(aIcon, aRGBa, true); - } - - public TT_RenderedExtendedFacingTexture(IIconContainer aIcon) { - this(aIcon, Dyes._NULL.mRGBa); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_BaseModule.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_BaseModule.java deleted file mode 100644 index 16d81c8529..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_BaseModule.java +++ /dev/null @@ -1,514 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules; - -import static com.github.technus.tectech.thing.casing.TT_Container_Casings.GodforgeCasings; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static gregtech.common.misc.WirelessNetworkManager.processInitialSettings; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -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.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_StructureUtility; - -public class GT_MetaTileEntity_EM_BaseModule extends GT_MetaTileEntity_MultiblockBase_EM { - - protected final int tier = getTier(); - protected boolean isConnected = false; - protected double overclockTimeFactor = 2d; - protected boolean isUpgrade83Unlocked = false; - protected boolean isMultiStepPlasmaCapable = false; - protected boolean isMagmatterCapable = false; - private boolean isVoltageConfigUnlocked = false; - protected UUID userUUID; - protected int machineHeat = 0; - protected int overclockHeat = 0; - protected int maximumParallel = 0; - protected int plasmaTier = 0; - protected float processingSpeedBonus = 0; - protected float energyDiscount = 0; - protected long processingVoltage = 2_000_000_000; - protected BigInteger powerTally = BigInteger.ZERO; - protected long recipeTally = 0; - private static Textures.BlockIcons.CustomIcon ScreenON; - private static Textures.BlockIcons.CustomIcon ScreenOFF; - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final int VOLTAGE_WINDOW_ID = 9; - private static final int TEXTURE_INDEX = 960; - protected static final String TOOLTIP_BAR = EnumChatFormatting.AQUA - + "--------------------------------------------------------------------------"; - - public GT_MetaTileEntity_EM_BaseModule(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_EM_BaseModule(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_BaseModule(mName); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide() && isConnected) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (mEfficiency < 0) mEfficiency = 0; - } - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.blastFurnaceRecipes; - } - - @Override - public boolean drainEnergyInput(long EUtEffective, long Amperes) { - long EU_drain = EUtEffective * Amperes; - if (EU_drain == 0L) { - return true; - } else { - if (EU_drain > 0L) { - EU_drain = -EU_drain; - } - return addEUToGlobalEnergyMap(userUUID, EU_drain); - } - } - - public void connect() { - isConnected = true; - } - - public void disconnect() { - isConnected = false; - } - - public void setHeat(int heat) { - machineHeat = heat; - } - - public int getHeat() { - return machineHeat; - } - - public void setHeatForOC(int heat) { - overclockHeat = heat; - } - - public int getHeatForOC() { - return overclockHeat; - } - - public void setMaxParallel(int parallel) { - maximumParallel = parallel; - } - - public int getMaxParallel() { - return maximumParallel; - } - - public void setSpeedBonus(float bonus) { - processingSpeedBonus = bonus; - } - - public float getSpeedBonus() { - return processingSpeedBonus; - } - - public void setEnergyDiscount(float discount) { - energyDiscount = discount; - } - - public float getEnergyDiscount() { - return energyDiscount; - } - - public void setUpgrade83(boolean unlocked) { - isUpgrade83Unlocked = unlocked; - } - - public void setOverclockTimeFactor(double factor) { - overclockTimeFactor = factor; - } - - public double getOverclockTimeFactor() { - return overclockTimeFactor; - } - - public void setMultiStepPlasma(boolean isCapable) { - isMultiStepPlasmaCapable = isCapable; - } - - public void setProcessingVoltage(long Voltage) { - processingVoltage = Voltage; - } - - public long getProcessingVoltage() { - return processingVoltage; - } - - public void setMagmatterCapable(boolean isCapable) { - isMagmatterCapable = isCapable; - } - - public float getHeatEnergyDiscount() { - return isUpgrade83Unlocked ? 0.92f : 0.95f; - } - - public void setPlasmaTier(int tier) { - plasmaTier = tier; - } - - public int getPlasmaTier() { - return plasmaTier; - } - - public void setVoltageConfig(boolean unlocked) { - isVoltageConfigUnlocked = unlocked; - } - - public void setPowerTally(BigInteger amount) { - powerTally = amount; - } - - public BigInteger getPowerTally() { - return powerTally; - } - - public void addToPowerTally(BigInteger amount) { - powerTally = powerTally.add(amount); - } - - public void setRecipeTally(long amount) { - recipeTally = amount; - } - - public long getRecipeTally() { - return recipeTally; - } - - public void addToRecipeTally(long amount) { - recipeTally += amount; - } - - public int getTier() { - return tier; - } - - @Override - public long getMaxInputVoltage() { - return gregtech.api.enums.GT_Values.V[tier]; - } - - @Override - public IStructureDefinition getStructure_EM() { - if (this instanceof GT_MetaTileEntity_EM_SmeltingModule) { - return getStructureDefinition(GregTech_API.sBlockCasings5, 12); - } - return getStructureDefinition(GodforgeCasings, 8); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM(STRUCTURE_PIECE_MAIN, 3, 3, 0, stackSize, hintsOnly); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return structureCheck_EM(STRUCTURE_PIECE_MAIN, 3, 3, 0); - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - - if (aBaseMetaTileEntity.isServerSide() && (aTick == 1)) { - userUUID = processInitialSettings(aBaseMetaTileEntity); - } - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(4, 4) - .setSize(190, 85)); - final SlotWidget inventorySlot = new SlotWidget(inventoryHandler, 1); - builder.widget( - inventorySlot.setPos(173, 167) - .setBackground(GT_UITextures.SLOT_DARK_GRAY)); - - final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); - drawTexts(screenElements, inventorySlot); - builder.widget(screenElements); - - buildContext.addSyncedWindow(VOLTAGE_WINDOW_ID, this::createVoltageWindow); - - builder.widget( - TextWidget.dynamicText(this::connectionStatus) - .setDefaultColor(EnumChatFormatting.BLACK) - .setPos(75, 94) - .setSize(100, 10)); - - builder.widget(createPowerSwitchButton(builder)) - .widget(createVoidExcessButton(builder)) - .widget(createInputSeparationButton(builder)) - .widget(createBatchModeButton(builder)) - .widget(createLockToSingleRecipeButton(builder)) - .widget(createVoltageButton(builder)) - .widget(createStructureUpdateButton(builder)); - } - - protected Widget createVoltageButton(IWidgetBuilder builder) { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (isVoltageConfigUnlocked) { - if (!widget.isClient()) { - widget.getContext() - .openSyncedWindow(VOLTAGE_WINDOW_ID); - } - } - }) - .setPlayClickSound(isVoltageConfigUnlocked) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - if (isVoltageConfigUnlocked) { - ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_ON); - } else { - ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_DISABLED); - } - return ret.toArray(new IDrawable[0]); - }) - .addTooltip(translateToLocal("fog.button.voltageconfig.tooltip.01")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(174, 112) - .setSize(16, 16) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer(() -> isVoltageConfigUnlocked, val -> isVoltageConfigUnlocked = val), - builder); - if (!isVoltageConfigUnlocked) { - button.addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.voltageconfig.tooltip.02")); - } - return button; - } - - protected ModularWindow createVoltageWindow(final EntityPlayer player) { - final int WIDTH = 158; - final int HEIGHT = 52; - final int PARENT_WIDTH = getGUIWidth(); - final int PARENT_HEIGHT = getGUIHeight(); - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.setDraggable(true); - builder.setPos( - (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) - .add( - Alignment.BottomRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) - .add(WIDTH - 3, 0) - .subtract(0, 10))); - builder.widget( - TextWidget.localised("gt.blockmachines.multimachine.FOG.voltageinfo") - .setPos(3, 4) - .setSize(150, 20)) - .widget( - new NumericWidget().setSetter(val -> processingVoltage = (long) val) - .setGetter(() -> processingVoltage) - .setBounds(2_000_000_000, Long.MAX_VALUE) - .setDefaultValue(2_000_000_000) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(150, 18) - .setPos(4, 25) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .attachSyncer( - new FakeSyncWidget.LongSyncer(this::getProcessingVoltage, this::setProcessingVoltage), - builder)); - return builder.build(); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO) - .setSize(18, 18) - .setPos(172, 67)); - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean willExplodeInRain() { - return false; - } - - private static IStructureDefinition getStructureDefinition(Block coilBlock, - int meta) { - return StructureDefinition.builder() - .addShape( - STRUCTURE_PIECE_MAIN, - new String[][] { { " ", " BBB ", " BBBBB ", " BB~BB ", " BBBBB ", " BBB ", " " }, - { " CCC ", " CFFFC ", "CFFFFFC", "CFFFFFC", "CFFFFFC", " CFFFC ", " CCC " }, - { " ", " ", " E ", " EAE ", " E ", " ", " " }, - { " ", " ", " E ", " EAE ", " E ", " ", " " }, - { " ", " ", " E ", " EAE ", " E ", " ", " " }, - { " ", " ", " E ", " EAE ", " E ", " ", " " }, - { " ", " ", " E ", " EAE ", " E ", " ", " " }, - { " ", " ", " ", " D ", " ", " ", " " }, - { " ", " ", " ", " D ", " ", " ", " " }, - { " ", " ", " ", " D ", " ", " ", " " }, - { " ", " ", " ", " D ", " ", " ", " " }, - { " ", " ", " ", " D ", " ", " ", " " }, - { " ", " ", " ", " G ", " ", " ", " " } }) - .addElement('A', ofBlock(coilBlock, meta)) - .addElement( - 'B', - GT_StructureUtility.ofHatchAdderOptional( - GT_MetaTileEntity_EM_BaseModule::addClassicToMachineList, - TEXTURE_INDEX, - 1, - GodforgeCasings, - 0)) - .addElement('C', ofBlock(GodforgeCasings, 0)) - .addElement('D', ofBlock(GodforgeCasings, 1)) - .addElement('E', ofBlock(GodforgeCasings, 2)) - .addElement('F', ofBlock(GodforgeCasings, 3)) - .addElement('G', ofBlock(GodforgeCasings, 4)) - .build(); - } - - private Text connectionStatus() { - String status = EnumChatFormatting.RED - + translateToLocal("gt.blockmachines.multimachine.FOG.modulestatus.false"); - if (isConnected) { - status = EnumChatFormatting.GREEN + translateToLocal("gt.blockmachines.multimachine.FOG.modulestatus.true"); - } - return new Text(translateToLocal("gt.blockmachines.multimachine.FOG.modulestatus") + " " + status); - } - - @Override - public void saveNBTData(NBTTagCompound NBT) { - NBT.setBoolean("isConnected", isConnected); - NBT.setBoolean("isVoltageConfigUnlocked", isVoltageConfigUnlocked); - NBT.setLong("processingVoltage", processingVoltage); - NBT.setLong("recipeTally", recipeTally); - NBT.setByteArray("powerTally", powerTally.toByteArray()); - super.saveNBTData(NBT); - } - - @Override - public void loadNBTData(final NBTTagCompound NBT) { - isConnected = NBT.getBoolean("isConnected"); - isVoltageConfigUnlocked = NBT.getBoolean("isVoltageConfigUnlocked"); - processingVoltage = NBT.getLong("processingVoltage"); - recipeTally = NBT.getLong("recipeTally"); - powerTally = new BigInteger(NBT.getByteArray("powerTally")); - super.loadNBTData(NBT); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/GODFORGE_MODULE_ACTIVE"); - ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/SCREEN_OFF"); - super.registerIcons(aBlockIconRegister); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX), - TextureFactory.builder() - .addIcon(ScreenON) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(ScreenON) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX), TextureFactory.builder() - .addIcon(ScreenOFF) - .extFacing() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX) }; - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_ExoticModule.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_ExoticModule.java deleted file mode 100644 index 9c1d5dd8fa..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_ExoticModule.java +++ /dev/null @@ -1,548 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules; - -import static com.github.technus.tectech.loader.recipe.Godforge.exoticModuleMagmatterItemMap; -import static com.github.technus.tectech.loader.recipe.Godforge.exoticModulePlasmaFluidMap; -import static com.github.technus.tectech.loader.recipe.Godforge.exoticModulePlasmaItemMap; -import static com.github.technus.tectech.recipe.TecTechRecipeMaps.godforgeExoticMatterRecipes; -import static com.github.technus.tectech.util.GodforgeMath.getRandomIntInRange; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_RecipeBuilder.INGOTS; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static gregtech.common.misc.WirelessNetworkManager.getUserEU; -import static net.minecraft.util.EnumChatFormatting.GREEN; -import static net.minecraft.util.EnumChatFormatting.RED; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.EnumChatFormatting.YELLOW; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.stream.Stream; - -import javax.annotation.Nonnull; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import com.github.technus.tectech.util.CommonValues; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; - -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.TierEU; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMapBackend; -import gregtech.api.recipe.RecipeMapBuilder; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_EM_ExoticModule extends GT_MetaTileEntity_EM_BaseModule { - - private int numberOfFluids = 0; - private int numberOfItems = 0; - private long wirelessEUt = 0; - private long EUt = 0; - private long actualParallel = 0; - private boolean recipeInProgress = false; - private boolean magmatterMode = false; - private FluidStack[] randomizedFluidInput = new FluidStack[] {}; - private ItemStack[] randomizedItemInput = new ItemStack[] {}; - List inputPlasmas = new ArrayList<>(); - private GT_Recipe plasmaRecipe = null; - private static RecipeMap tempRecipeMap = RecipeMapBuilder.of("bye") - .maxIO(0, 0, 7, 2) - .disableRegisterNEI() - .build(); - private static final RecipeMap emptyRecipeMap = RecipeMapBuilder.of("hey") - .maxIO(0, 0, 7, 2) - .disableRegisterNEI() - .build(); - private static final int NUMBER_OF_INPUTS = 7; - - public GT_MetaTileEntity_EM_ExoticModule(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_EM_ExoticModule(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_ExoticModule(mName); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected Stream findRecipeMatches(@Nullable RecipeMap map) { - if (!recipeInProgress) { - actualParallel = getMaxParallel(); - FluidStack outputFluid = MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000 * actualParallel); - tempRecipeMap = emptyRecipeMap; - if (magmatterMode) { - randomizedItemInput = getRandomItemInputs(exoticModuleMagmatterItemMap, 1); - numberOfItems = 1; - numberOfFluids = 2; - int timeAmount = getRandomIntInRange(1, 50); - int spaceAmount = getRandomIntInRange(51, 100); - randomizedFluidInput = new FluidStack[] { MaterialsUEVplus.Time.getMolten(timeAmount * 1000L), - MaterialsUEVplus.Space.getMolten(spaceAmount * 1000L) }; - inputPlasmas = new ArrayList<>( - Arrays.asList( - convertItemToPlasma(randomizedItemInput, (spaceAmount - timeAmount) * actualParallel))); - inputPlasmas.add(MaterialsUEVplus.Time.getMolten(timeAmount * actualParallel)); - inputPlasmas.add(MaterialsUEVplus.Space.getMolten(spaceAmount * actualParallel)); - outputFluid = MaterialsUEVplus.MagMatter.getMolten(144 * actualParallel); - } else { - numberOfFluids = getRandomIntInRange(0, NUMBER_OF_INPUTS); - numberOfItems = NUMBER_OF_INPUTS - numberOfFluids; - randomizedFluidInput = getRandomFluidInputs(exoticModulePlasmaFluidMap, numberOfFluids); - randomizedItemInput = getRandomItemInputs(exoticModulePlasmaItemMap, numberOfItems); - - if (numberOfFluids != 0) { - for (FluidStack fluidStack : randomizedFluidInput) { - fluidStack.amount = 1000 * getRandomIntInRange(1, 64); - } - } - - if (numberOfItems != 0) { - for (ItemStack itemStack : randomizedItemInput) { - itemStack.stackSize = getRandomIntInRange(1, 64); - } - } - - inputPlasmas = new ArrayList<>( - Arrays.asList(convertItemToPlasma(randomizedItemInput, actualParallel))); - inputPlasmas.addAll(Arrays.asList(convertFluidToPlasma(randomizedFluidInput, actualParallel))); - } - plasmaRecipe = new GT_Recipe( - false, - null, - null, - null, - null, - inputPlasmas.toArray(new FluidStack[0]), - new FluidStack[] { outputFluid }, - 10 * SECONDS * (int) actualParallel, - (int) TierEU.RECIPE_MAX, - 0); - - tempRecipeMap.add(plasmaRecipe); - } - return tempRecipeMap.getAllRecipes() - .parallelStream(); - } - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - if (!recipeInProgress) { - maxParallel = 1; - wirelessEUt = (long) recipe.mEUt * maxParallel; - if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) { - tempRecipeMap = emptyRecipeMap; - return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); - } - - if (numberOfFluids != 0) { - for (FluidStack fluidStack : randomizedFluidInput) { - dumpFluid( - mOutputHatches, - new FluidStack( - fluidStack.getFluid(), - (int) (fluidStack.amount / 1000 * actualParallel)), - false); - } - } - - if (numberOfItems != 0) { - long multiplier = actualParallel; - if (magmatterMode) { - multiplier = 1; - } - for (ItemStack itemStack : randomizedItemInput) { - int stacksize = (int) (itemStack.stackSize * multiplier); - ItemStack tmpItem = itemStack.copy(); - // split itemStacks > 64 - while (stacksize >= 64) { - tmpItem.stackSize = 64; - addOutput(tmpItem); - stacksize -= 64; - } - tmpItem.stackSize = stacksize; - addOutput(tmpItem); - - } - } - - recipeInProgress = true; - } - if (new HashSet<>(Arrays.asList(inputFluids)).containsAll(inputPlasmas)) { - return CheckRecipeResultRegistry.SUCCESSFUL; - } - return SimpleCheckRecipeResult.ofFailure("waiting_for_inputs"); - } - - @NotNull - @Override - protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { - wirelessEUt = (long) recipe.mEUt * maxParallel; - if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { - return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); - } - addToPowerTally( - BigInteger.valueOf(calculatedEut) - .multiply(BigInteger.valueOf(duration))); - addToRecipeTally(calculatedParallels); - EUt = calculatedEut; - setCalculatedEut(0); - tempRecipeMap = emptyRecipeMap; - recipeInProgress = false; - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) - .setDurationDecreasePerOC(getOverclockTimeFactor()); - } - - }; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(Long.MAX_VALUE); - logic.setAvailableAmperage(Integer.MAX_VALUE); - logic.setAmperageOC(false); - logic.setSpeedBonus(getSpeedBonus()); - logic.setEuModifier(getEnergyDiscount()); - } - - @Override - public RecipeMap getRecipeMap() { - return godforgeExoticMatterRecipes; - } - - private FluidStack[] getRandomFluidInputs(HashMap fluidMap, int numberOfFluids) { - int cumulativeWeight = 0; - - List> fluidEntryList = new ArrayList<>(fluidMap.entrySet()); - - List cumulativeWeights = new ArrayList<>(); - for (Map.Entry entry : fluidEntryList) { - cumulativeWeight += entry.getValue(); - cumulativeWeights.add(cumulativeWeight); - } - - List pickedFluids = new ArrayList<>(); - for (int i = 0; i < numberOfFluids; i++) { - int randomWeight = getRandomIntInRange(1, cumulativeWeight); - // Find the corresponding FluidStack based on randomWeight - for (int j = 0; j < cumulativeWeights.size(); j++) { - if (randomWeight <= cumulativeWeights.get(j)) { - FluidStack pickedFluid = fluidEntryList.get(j) - .getKey(); - // prevent duplicates - if (pickedFluids.contains(pickedFluid)) { - i--; - break; - } - pickedFluids.add(pickedFluid); - break; - } - } - } - - return pickedFluids.toArray(new FluidStack[0]); - - } - - private ItemStack[] getRandomItemInputs(HashMap itemMap, int numberOfItems) { - int cumulativeWeight = 0; - - List> itemEntryList = new ArrayList<>(itemMap.entrySet()); - - List cumulativeWeights = new ArrayList<>(); - for (Map.Entry entry : itemEntryList) { - cumulativeWeight += entry.getValue(); - cumulativeWeights.add(cumulativeWeight); - } - - List pickedItems = new ArrayList<>(); - for (int i = 0; i < numberOfItems; i++) { - int randomWeight = getRandomIntInRange(1, cumulativeWeight); - // Find the corresponding ItemStack based on randomWeight - for (int j = 0; j < cumulativeWeights.size(); j++) { - if (randomWeight <= cumulativeWeights.get(j)) { - ItemStack pickedItem = itemEntryList.get(j) - .getKey(); - // prevent duplicates - if (pickedItems.contains(pickedItem)) { - i--; - break; - } - pickedItems.add(pickedItem); - break; - } - } - } - return pickedItems.toArray(new ItemStack[0]); - - } - - private FluidStack[] convertItemToPlasma(ItemStack[] items, long multiplier) { - List plasmas = new ArrayList<>(); - - for (ItemStack itemStack : items) { - String dict = OreDictionary.getOreName(OreDictionary.getOreIDs(itemStack)[0]); - // substring 8 because dustTiny is 8 characters long and there is no other possible oreDict - String strippedOreDict = dict.substring(8); - plasmas.add( - FluidRegistry.getFluidStack( - "plasma." + strippedOreDict.toLowerCase(), - (int) (INGOTS * multiplier * itemStack.stackSize))); - } - - return plasmas.toArray(new FluidStack[0]); - } - - private FluidStack[] convertFluidToPlasma(FluidStack[] fluids, long multiplier) { - List plasmas = new ArrayList<>(); - - for (FluidStack fluidStack : fluids) { - String[] fluidName = fluidStack.getUnlocalizedName() - .split("\\."); - plasmas.add( - FluidRegistry.getFluidStack( - "plasma." + fluidName[fluidName.length - 1], - (int) (multiplier * fluidStack.amount))); - } - - return plasmas.toArray(new FluidStack[0]); - } - - @Override - public boolean supportsSingleRecipeLocking() { - return false; - } - - @Override - public boolean supportsBatchMode() { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound NBT) { - - NBT.setBoolean("recipeInProgress", recipeInProgress); - NBT.setBoolean("magmatterMode", magmatterMode); - - // Store damage values/stack sizes of input plasmas - NBTTagCompound fluidStackListNBTTag = new NBTTagCompound(); - fluidStackListNBTTag.setLong("numberOfPlasmas", inputPlasmas.size()); - - int indexFluids = 0; - for (FluidStack fluidStack : inputPlasmas) { - // Save fluid amount to NBT - fluidStackListNBTTag.setLong(indexFluids + "fluidAmount", fluidStack.amount); - - // Save FluidStack to NBT - NBT.setTag(indexFluids + "fluidStack", fluidStack.writeToNBT(new NBTTagCompound())); - - indexFluids++; - } - - NBT.setTag("inputPlasmas", fluidStackListNBTTag); - super.saveNBTData(NBT); - } - - @Override - public void loadNBTData(final NBTTagCompound NBT) { - - recipeInProgress = NBT.getBoolean("recipeInProgress"); - magmatterMode = NBT.getBoolean("magmatterMode"); - - // Load damage values/fluid amounts of input plasmas and convert back to fluids - NBTTagCompound tempFluidTag = NBT.getCompoundTag("inputPlasmas"); - - // Iterate over all stored fluids - for (int indexFluids = 0; indexFluids < tempFluidTag.getLong("numberOfPlasmas"); indexFluids++) { - - // Load fluid amount from NBT - int fluidAmount = tempFluidTag.getInteger(indexFluids + "fluidAmount"); - - // Load FluidStack from NBT - FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(NBT.getCompoundTag(indexFluids + "fluidStack")); - - inputPlasmas.add(new FluidStack(fluidStack, fluidAmount)); - } - FluidStack outputFluid = MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000); - - if (magmatterMode) { - outputFluid = MaterialsUEVplus.MagMatter.getMolten(144); - } - - tempRecipeMap.add( - new GT_Recipe( - false, - null, - null, - null, - null, - inputPlasmas.toArray(new FluidStack[0]), - new FluidStack[] { outputFluid }, - 10 * SECONDS, - (int) TierEU.RECIPE_MAX, - 0)); - - super.loadNBTData(NBT); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - builder.widget(magmatterSwitch(builder)); - - } - - protected ButtonWidget magmatterSwitch(IWidgetBuilder builder) { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (isMagmatterCapable) { - magmatterMode = !magmatterMode; - } - }) - .setPlayClickSound(isMagmatterCapable) - .setBackground(() -> { - List ret = new ArrayList<>(); - if (isMagmatterModeOn()) { - ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); - if (isMagmatterCapable) { - ret.add(GT_UITextures.OVERLAY_BUTTON_CHECKMARK); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_DISABLE); - } - } else { - ret.add(GT_UITextures.BUTTON_STANDARD); - if (isMagmatterCapable) { - ret.add(GT_UITextures.OVERLAY_BUTTON_CROSS); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_DISABLE); - } - } - if (!isMagmatterCapable) { - ret.add(GT_UITextures.OVERLAY_BUTTON_DISABLE); - } - return ret.toArray(new IDrawable[0]); - }) - .attachSyncer(new FakeSyncWidget.BooleanSyncer(this::isMagmatterModeOn, this::setMagmatterMode), builder) - .addTooltip(translateToLocal("fog.button.magmattermode.tooltip.01")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(174, 91) - .setSize(16, 16) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer(() -> isMagmatterCapable, this::setMagmatterCapable), - builder); - if (!isMagmatterCapable) { - button.addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.magmattermode.tooltip.02")); - } - return (ButtonWidget) button; - } - - public boolean isMagmatterModeOn() { - return magmatterMode; - } - - private void setMagmatterMode(boolean enabled) { - magmatterMode = enabled; - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Exotic Matter Producer") - .addInfo("Controller block for the Heliofusion Exoticizer, a module of the Godforge.") - .addInfo("Must be part of a Godforge to function.") - .addInfo("Used for ultra high temperature matter degeneration.") - .addInfo(TOOLTIP_BAR) - .addInfo("The fourth and final module of the Godforge, this module breaks apart the very") - .addInfo("building blocks of matter, producing exotic mixtures in the process. Quark-Gluon Plasma") - .addInfo("can be manufactured right away, but production of Magnetic Monopole Matter (Magmatter)") - .addInfo("requires a fully upgraded Godforge.") - .addInfo("This module is specialized towards acquisition of unique materials.") - .addInfo(TOOLTIP_BAR) - .beginStructureBlock(7, 7, 13, false) - .addStructureInfo("The structure is too complex! See schematic for details.") - .addStructureInfo( - EnumChatFormatting.GOLD + "20" - + EnumChatFormatting.GRAY - + " Singularity Reinforced Stellar Shielding Casing") - .addStructureInfo( - EnumChatFormatting.GOLD + "20" - + EnumChatFormatting.GRAY - + " Boundless Gravitationally Severed Structure Casing") - .addStructureInfo( - EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Harmonic Phonon Transmission Conduit") - .addStructureInfo( - EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") - .toolTipFinisher(CommonValues.GODFORGE_MARK); - return tt; - } - - @Override - public String[] getInfoData() { - ArrayList str = new ArrayList<>(); - str.add( - "Progress: " + GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + RESET - + " s / " - + YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + RESET - + " s"); - str.add("Currently using: " + RED + formatNumbers(EUt) + RESET + " EU/t"); - str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel())); - str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(getMaxParallel())); - str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus())); - str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount())); - str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor())); - return str.toArray(new String[0]); - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_MoltenModule.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_MoltenModule.java deleted file mode 100644 index 0a2bd27ed5..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_MoltenModule.java +++ /dev/null @@ -1,246 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules; - -import static gregtech.api.util.GT_OreDictUnificator.getAssociation; -import static gregtech.api.util.GT_ParallelHelper.addFluidsLong; -import static gregtech.api.util.GT_ParallelHelper.addItemsLong; -import static gregtech.api.util.GT_RecipeBuilder.BUCKETS; -import static gregtech.api.util.GT_RecipeBuilder.INGOTS; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static gregtech.common.misc.WirelessNetworkManager.getUserEU; -import static net.minecraft.util.EnumChatFormatting.GREEN; -import static net.minecraft.util.EnumChatFormatting.RED; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.EnumChatFormatting.YELLOW; - -import java.math.BigInteger; -import java.util.ArrayList; - -import javax.annotation.Nonnull; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.util.CommonValues; - -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_EM_MoltenModule extends GT_MetaTileEntity_EM_BaseModule { - - private long EUt = 0; - private int currentParallel = 0; - - public GT_MetaTileEntity_EM_MoltenModule(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_EM_MoltenModule(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_MoltenModule(mName); - } - - long wirelessEUt = 0; - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - private FluidStack[] meltableItems; - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - - if (recipe.mSpecialValue > getHeat()) { - return CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); - } - wirelessEUt = (long) recipe.mEUt * getMaxParallel(); - if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) { - return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); - } - - meltableItems = new FluidStack[recipe.mOutputs.length]; - for (int i = 0; i < recipe.mOutputs.length; i++) { - ItemStack item = recipe.getOutput(i); - if (item == null) { - continue; - } - // if this is null it has to be a gt++ material - ItemData data = getAssociation(item); - Materials mat = data == null ? null : data.mMaterial.mMaterial; - if (mat != null) { - if (mat.mStandardMoltenFluid != null) { - meltableItems[i] = mat.getMolten(INGOTS); - } else if (mat.mFluid != null) { - meltableItems[i] = mat.getFluid(BUCKETS); - } - } else { - String dict = OreDictionary.getOreName(OreDictionary.getOreIDs(item)[0]); - // substring 8 because ingotHot is 8 characters long - String strippedOreDict = dict.substring(8); - meltableItems[i] = FluidRegistry - .getFluidStack("molten." + strippedOreDict.toLowerCase(), INGOTS); - } - } - - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) - .setRecipeHeat(recipe.mSpecialValue) - .setHeatOC(true) - .setHeatDiscount(true) - .setMachineHeat(getHeatForOC()) - .setHeatDiscountMultiplier(getHeatEnergyDiscount()) - .setDurationDecreasePerOC(getOverclockTimeFactor()); - - } - - @NotNull - @Override - protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { - if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { - return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration); - } - addToPowerTally( - BigInteger.valueOf(calculatedEut) - .multiply(BigInteger.valueOf(duration))); - addToRecipeTally(calculatedParallels); - currentParallel = calculatedParallels; - EUt = calculatedEut; - setCalculatedEut(0); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Nonnull - @Override - protected GT_ParallelHelper createParallelHelper(@Nonnull GT_Recipe recipe) { - return super.createParallelHelper(recipe).setCustomItemOutputCalculation(currentParallel -> { - ArrayList outputItems = new ArrayList<>(); - for (int i = 0; i < recipe.mOutputs.length; i++) { - ItemStack item = recipe.getOutput(i); - if (item == null || meltableItems[i] != null) { - continue; - } - ItemStack itemToAdd = item.copy(); - addItemsLong(outputItems, itemToAdd, (long) item.stackSize * currentParallel); - } - return outputItems.toArray(new ItemStack[0]); - }) - .setCustomFluidOutputCalculation(currentParallel -> { - ArrayList fluids = new ArrayList<>(); - - for (int i = 0; i < recipe.mOutputs.length; i++) { - FluidStack fluid = meltableItems[i]; - if (fluid == null) { - continue; - } - FluidStack fluidToAdd = fluid.copy(); - long fluidAmount = (long) fluidToAdd.amount * recipe.mOutputs[i].stackSize - * currentParallel; - addFluidsLong(fluids, fluidToAdd, fluidAmount); - } - - for (int i = 0; i < recipe.mFluidOutputs.length; i++) { - FluidStack fluid = recipe.getFluidOutput(i); - if (fluid == null) { - continue; - } - FluidStack fluidToAdd = fluid.copy(); - addFluidsLong(fluids, fluidToAdd, (long) fluidToAdd.amount * currentParallel); - } - return fluids.toArray(new FluidStack[0]); - }); - } - }; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(Long.MAX_VALUE); - logic.setAvailableAmperage(Integer.MAX_VALUE); - logic.setAmperageOC(false); - logic.setMaxParallel(getMaxParallel()); - logic.setSpeedBonus(getSpeedBonus()); - logic.setEuModifier(getEnergyDiscount()); - } - - @Override - public String[] getInfoData() { - ArrayList str = new ArrayList<>(); - str.add( - "Progress: " + GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + RESET - + " s / " - + YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + RESET - + " s"); - str.add("Currently using: " + RED + formatNumbers(EUt) + RESET + " EU/t"); - str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel())); - str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel)); - str.add(YELLOW + "Heat Capacity: " + RESET + formatNumbers(getHeat())); - str.add(YELLOW + "Effective Heat Capacity: " + RESET + formatNumbers(getHeatForOC())); - str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus())); - str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount())); - str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor())); - return str.toArray(new String[0]); - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Blast Smelter") - .addInfo("Controller block for the Helioflux Meltig Core, a module of the Godforge.") - .addInfo("Must be part of a Godforge to function.") - .addInfo("Used for high temperature material liquefaction.") - .addInfo(TOOLTIP_BAR) - .addInfo("The second module of the Godforge, this module melts materials directly into") - .addInfo("their liquid form. If an output material does not have a liquid form, it will be output") - .addInfo("as a regular solid instead.") - .addInfo("This module is specialized towards parallel processing.") - .addInfo(TOOLTIP_BAR) - .beginStructureBlock(7, 7, 13, false) - .addStructureInfo("The structure is too complex! See schematic for details.") - .addStructureInfo( - EnumChatFormatting.GOLD + "20" - + EnumChatFormatting.GRAY - + " Singularity Reinforced Stellar Shielding Casing") - .addStructureInfo( - EnumChatFormatting.GOLD + "20" - + EnumChatFormatting.GRAY - + " Boundless Gravitationally Severed Structure Casing") - .addStructureInfo( - EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Harmonic Phonon Transmission Conduit") - .addStructureInfo( - EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") - .toolTipFinisher(CommonValues.GODFORGE_MARK); - return tt; - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_PlasmaModule.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_PlasmaModule.java deleted file mode 100644 index c8f201d003..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_PlasmaModule.java +++ /dev/null @@ -1,246 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules; - -import static com.github.technus.tectech.recipe.TecTechRecipeMaps.godforgePlasmaRecipes; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static gregtech.common.misc.WirelessNetworkManager.getUserEU; -import static net.minecraft.util.EnumChatFormatting.GREEN; -import static net.minecraft.util.EnumChatFormatting.RED; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.EnumChatFormatting.YELLOW; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Objects; - -import javax.annotation.Nonnull; - -import net.minecraft.util.EnumChatFormatting; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.util.CommonValues; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; - -import gregtech.api.enums.SoundResource; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_EM_PlasmaModule extends GT_MetaTileEntity_EM_BaseModule { - - private long EUt = 0; - private int currentParallel = 0; - private boolean debug = true; - private int inputMaxParallel = 0; - - public GT_MetaTileEntity_EM_PlasmaModule(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_EM_PlasmaModule(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_PlasmaModule(mName); - } - - long wirelessEUt = 0; - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - wirelessEUt = (long) recipe.mEUt * getMaxParallel(); - if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) { - return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); - } - if (recipe.mSpecialValue > getPlasmaTier() - || Objects.equals(recipe.mSpecialItems.toString(), "true") && !isMultiStepPlasmaCapable) { - return SimpleCheckRecipeResult.ofFailure("missing_upgrades"); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { - wirelessEUt = (long) recipe.mEUt * maxParallel; - if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { - return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); - } - addToPowerTally( - BigInteger.valueOf(calculatedEut) - .multiply(BigInteger.valueOf(duration))); - addToRecipeTally(calculatedParallels); - currentParallel = calculatedParallels; - EUt = calculatedEut; - setCalculatedEut(0); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) - .setDurationDecreasePerOC(getOverclockTimeFactor()); - } - }; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(Long.MAX_VALUE); - logic.setAvailableAmperage(Integer.MAX_VALUE); - logic.setAmperageOC(false); - logic.setMaxParallel(getMaxParallel()); - logic.setSpeedBonus(getSpeedBonus()); - logic.setEuModifier(getEnergyDiscount()); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - if (debug) { - builder.widget(createTestButton(builder)) - .widget(createTestButton2()) - .widget(createTestButton3()); - } - } - - protected Widget createTestButton(IWidgetBuilder builder) { - return new ButtonWidget() - .setOnClick((clickData, widget) -> isMultiStepPlasmaCapable = !isMultiStepPlasmaCapable) - .setPlayClickSoundResource( - () -> isAllowedToWork() ? SoundResource.GUI_BUTTON_UP.resourceLocation - : SoundResource.GUI_BUTTON_DOWN.resourceLocation) - .setBackground(() -> { - if (isMultiStepPlasmaCapable) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_ON }; - } else { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF }; - } - }) - .attachSyncer(new FakeSyncWidget.BooleanSyncer(this::isAllowedToWork, val -> { - if (val) enableWorking(); - else disableWorking(); - }), builder) - .addTooltip("multi-step") - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(174, 100) - .setSize(16, 16); - } - - protected Widget createTestButton2() { - return new TextFieldWidget().setSetterInt(this::setPlasmaTier) - .setGetterInt(this::getPlasmaTier) - .setNumbers(0, 2) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setPos(3, 18) - .addTooltip("fusion tier") - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setSize(16, 16) - .setPos(174, 80) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD); - } - - protected Widget createTestButton3() { - return new TextFieldWidget().setSetterInt(val -> inputMaxParallel = val) - .setGetterInt(() -> inputMaxParallel) - .setNumbers(0, Integer.MAX_VALUE) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setPos(3, 18) - .addTooltip("parallel") - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setSize(70, 16) - .setPos(174, 60) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD); - } - - @Override - public RecipeMap getRecipeMap() { - return godforgePlasmaRecipes; - } - - @Override - public String[] getInfoData() { - ArrayList str = new ArrayList<>(); - str.add( - "Progress: " + GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + RESET - + " s / " - + YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + RESET - + " s"); - str.add("Currently using: " + RED + formatNumbers(EUt) + RESET + " EU/t"); - str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel())); - str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel)); - str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus())); - str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount())); - str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor())); - return str.toArray(new String[0]); - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Plasma Fabricator") - .addInfo("Controller block for the Heliothermal Plasma Fabricator, a module of the Godforge.") - .addInfo("Must be part of a Godforge to function.") - .addInfo("Used for extreme temperature matter ionization.") - .addInfo(TOOLTIP_BAR) - .addInfo("The third module of the Godforge, this module infuses materials with extreme amounts") - .addInfo("of heat, ionizing and turning them into plasma directly. Not all plasmas can be produced") - .addInfo("right away, some of them require certain upgrades to be unlocked.") - .addInfo("This module is specialized towards energy and overclock efficiency.") - .addInfo(TOOLTIP_BAR) - .beginStructureBlock(7, 7, 13, false) - .addStructureInfo("The structure is too complex! See schematic for details.") - .addStructureInfo( - EnumChatFormatting.GOLD + "20" - + EnumChatFormatting.GRAY - + " Singularity Reinforced Stellar Shielding Casing") - .addStructureInfo( - EnumChatFormatting.GOLD + "20" - + EnumChatFormatting.GRAY - + " Boundless Gravitationally Severed Structure Casing") - .addStructureInfo( - EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Harmonic Phonon Transmission Conduit") - .addStructureInfo( - EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") - .toolTipFinisher(CommonValues.GODFORGE_MARK); - return tt; - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java deleted file mode 100644 index 5126dbfe60..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/godforge_modules/GT_MetaTileEntity_EM_SmeltingModule.java +++ /dev/null @@ -1,246 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules; - -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static gregtech.common.misc.WirelessNetworkManager.getUserEU; -import static net.minecraft.util.EnumChatFormatting.GREEN; -import static net.minecraft.util.EnumChatFormatting.RED; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.EnumChatFormatting.YELLOW; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.util.CommonValues; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_EM_SmeltingModule extends GT_MetaTileEntity_EM_BaseModule { - - private long EUt = 0; - private long currentParallel = 0; - private boolean furnaceMode = false; - - public GT_MetaTileEntity_EM_SmeltingModule(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_EM_SmeltingModule(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_EM_SmeltingModule(mName); - } - - @Override - public RecipeMap getRecipeMap() { - return furnaceMode ? RecipeMaps.furnaceRecipes : RecipeMaps.blastFurnaceRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(RecipeMaps.blastFurnaceRecipes, RecipeMaps.furnaceRecipes); - } - - long wirelessEUt = 0; - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - - if (recipe.mSpecialValue > getHeat()) { - return CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); - } - - wirelessEUt = (long) recipe.mEUt * getMaxParallel(); - if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) { - return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { - if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { - return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration); - } - addToPowerTally( - BigInteger.valueOf(calculatedEut) - .multiply(BigInteger.valueOf(duration))); - if (!furnaceMode) { - addToRecipeTally(calculatedParallels); - } - currentParallel = calculatedParallels; - EUt = calculatedEut; - setCalculatedEut(0); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) - .setRecipeHeat(recipe.mSpecialValue) - .setHeatOC(true) - .setHeatDiscount(true) - .setMachineHeat(getHeatForOC()) - .setHeatDiscountMultiplier(getHeatEnergyDiscount()) - .setDurationDecreasePerOC(getOverclockTimeFactor()); - } - }; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(Long.MAX_VALUE); - logic.setAvailableAmperage(Integer.MAX_VALUE); - logic.setAmperageOC(false); - logic.setMaxParallel(getMaxParallel()); - logic.setSpeedBonus(getSpeedBonus()); - logic.setEuModifier(getEnergyDiscount()); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - builder.widget(furnaceSwitch(builder)); - - } - - protected ButtonWidget furnaceSwitch(IWidgetBuilder builder) { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> furnaceMode = !furnaceMode) - .setPlayClickSound(true) - .setBackground(() -> { - List ret = new ArrayList<>(); - if (isFurnaceModeOn()) { - ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); - ret.add(GT_UITextures.OVERLAY_BUTTON_CHECKMARK); - } else { - ret.add(GT_UITextures.BUTTON_STANDARD); - ret.add(GT_UITextures.OVERLAY_BUTTON_CROSS); - - } - return ret.toArray(new IDrawable[0]); - }) - .attachSyncer(new FakeSyncWidget.BooleanSyncer(this::isFurnaceModeOn, this::setFurnaceMode), builder) - .addTooltip(translateToLocal("fog.button.furnacemode.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(174, 91) - .setSize(16, 16); - return (ButtonWidget) button; - } - - private boolean isFurnaceModeOn() { - return furnaceMode; - } - - private void setFurnaceMode(boolean enabled) { - furnaceMode = enabled; - } - - @Override - public void saveNBTData(NBTTagCompound NBT) { - NBT.setBoolean("furnaceMode", furnaceMode); - super.saveNBTData(NBT); - } - - @Override - public void loadNBTData(final NBTTagCompound NBT) { - furnaceMode = NBT.getBoolean("furnaceMode"); - super.loadNBTData(NBT); - } - - @Override - public String[] getInfoData() { - ArrayList str = new ArrayList<>(); - str.add( - "Progress: " + GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + RESET - + " s / " - + YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + RESET - + " s"); - str.add("Currently using: " + RED + formatNumbers(EUt) + RESET + " EU/t"); - str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel())); - str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel)); - str.add(YELLOW + "Heat Capacity: " + RESET + formatNumbers(getHeat())); - str.add(YELLOW + "Effective Heat Capacity: " + RESET + formatNumbers(getHeatForOC())); - str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus())); - str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount())); - str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor())); - return str.toArray(new String[0]); - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Blast Furnace, Furnace") - .addInfo("Controller block for the Helioflare Power Forge, a module of the Godforge.") - .addInfo("Must be part of a Godforge to function.") - .addInfo("Used for basic smelting operations at various temperatures.") - .addInfo(TOOLTIP_BAR) - .addInfo("As the first of the Godforge modules, this module performs the most basic") - .addInfo("thermal processing, namely smelting materials identically to a furnace or blast furnace.") - .addInfo("The desired method of processing can be selected in the gui.") - .addInfo("This module is specialized towards speed and high heat levels.") - .addInfo(TOOLTIP_BAR) - .beginStructureBlock(7, 7, 13, false) - .addStructureInfo("The structure is too complex! See schematic for details.") - .addStructureInfo( - EnumChatFormatting.GOLD + "20" - + EnumChatFormatting.GRAY - + " Singularity Reinforced Stellar Shielding Casing") - .addStructureInfo( - EnumChatFormatting.GOLD + "20" - + EnumChatFormatting.GRAY - + " Boundless Gravitationally Severed Structure Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Hypogen Coil Block") - .addStructureInfo( - EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") - .toolTipFinisher(CommonValues.GODFORGE_MARK); - return tt; - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_PipeBlock_Data.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_PipeBlock_Data.java deleted file mode 100644 index 6ba5dd753c..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_PipeBlock_Data.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.pipe; - -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class GT_MetaTileEntity_PipeBlock_Data extends GT_MetaTileEntity_Pipe_Data { - - public GT_MetaTileEntity_PipeBlock_Data(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PipeBlock_Data(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_PipeBlock_Data(mName); - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1); - } - - @Override - public float getThickNess() { - return 1f; - } - - @Override - public float getExplosionResistance(ForgeDirection side) { - return 1000.0f; - } - - @Override - public String[] getDescription() { - return ArrayUtils.add( - super.getDescription(), - EnumChatFormatting.DARK_AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockmachines.pipe.desc.4")); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_PipeBlock_Energy.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_PipeBlock_Energy.java deleted file mode 100644 index 469c5b786a..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_PipeBlock_Energy.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.pipe; - -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class GT_MetaTileEntity_PipeBlock_Energy extends GT_MetaTileEntity_Pipe_Energy { - - public GT_MetaTileEntity_PipeBlock_Energy(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PipeBlock_Energy(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_PipeBlock_Energy(mName); - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1); - } - - @Override - public float getThickNess() { - return 1f; - } - - @Override - public float getExplosionResistance(ForgeDirection side) { - return 1000.0f; - } - - @Override - public String[] getDescription() { - return ArrayUtils.add( - super.getDescription(), - EnumChatFormatting.DARK_AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockmachines.pipe.desc.4")); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java deleted file mode 100644 index 7921167b4d..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Data.java +++ /dev/null @@ -1,313 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.pipe; - -import static gregtech.api.enums.Dyes.MACHINE_METAL; -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.loader.NetworkDispatcher; -import com.github.technus.tectech.mechanics.pipe.IActivePipe; -import com.github.technus.tectech.mechanics.pipe.IConnectsToDataPipe; -import com.github.technus.tectech.mechanics.pipe.PipeActivityMessage; -import com.github.technus.tectech.util.CommonValues; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.enums.Dyes; -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.BaseMetaPipeEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.common.GT_Client; - -/** - * Created by Tec on 26.02.2017. - */ -public class GT_MetaTileEntity_Pipe_Data extends MetaPipeEntity implements IConnectsToDataPipe, IActivePipe { - - private static Textures.BlockIcons.CustomIcon EMpipe; - private static Textures.BlockIcons.CustomIcon EMbar, EMbarActive; - public byte connectionCount = 0; - - private boolean active; - - public GT_MetaTileEntity_Pipe_Data(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 0); - } - - public GT_MetaTileEntity_Pipe_Data(String aName) { - super(aName, 0); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_Pipe_Data(mName); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - EMpipe = new Textures.BlockIcons.CustomIcon("iconsets/EM_DATA"); - EMbar = new Textures.BlockIcons.CustomIcon("iconsets/EM_BAR"); - EMbarActive = new Textures.BlockIcons.CustomIcon("iconsets/EM_BAR_ACTIVE"); - super.registerIcons(aBlockIconRegister); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, - int colorIndex, boolean aConnected, boolean aRedstone) { - return new ITexture[] { new GT_RenderedTexture(EMpipe), - new GT_RenderedTexture( - getActive() ? EMbarActive : EMbar, - Dyes.getModulation(colorIndex, MACHINE_METAL.getRGBA())) }; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public void loadNBTData(NBTTagCompound nbtTagCompound) { - active = nbtTagCompound.getBoolean("eActive"); - } - - @Override - public void saveNBTData(NBTTagCompound nbtTagCompound) { - nbtTagCompound.setBoolean("eActive", active); - } - - @Override - public boolean renderInside(ForgeDirection side) { - return false; - } - - @Override - public byte getTileEntityBaseType() { - return 4; - } - - @Override - public String[] getDescription() { - return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.pipe.datastream.desc.0"), // Advanced - // data - // transmission - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockmachines.pipe.datastream.desc.1"), // Don't stare at the beam! - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.datastream.desc.2"), // Must be - // painted to - // work - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.datastream.desc.3") // Do not cross or - // split - }; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - onPostTick(aBaseMetaTileEntity, 31); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if ((aTick & 31) == 31) { - if (TecTech.RANDOM.nextInt(15) == 0) { - NetworkDispatcher.INSTANCE.sendToAllAround( - new PipeActivityMessage.PipeActivityData(this), - aBaseMetaTileEntity.getWorld().provider.dimensionId, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - 256); - } - if (active) { - active = false; - } - mConnections = 0; - connectionCount = 0; - byte myColor = aBaseMetaTileEntity.getColorization(); - if (aBaseMetaTileEntity.getColorization() < 0) { - return; - } - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - final ForgeDirection oppositeSide = side.getOpposite(); - TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(side); - if (tTileEntity instanceof IConnectsToDataPipe) { - byte tColor = ((IConnectsToDataPipe) tTileEntity).getColorization(); - if (tColor != myColor) { - continue; - } - if (((IConnectsToDataPipe) tTileEntity).canConnectData(oppositeSide)) { - mConnections |= 1 << side.ordinal(); - connectionCount++; - } - } else if (tTileEntity instanceof IGregTechTileEntity) { - IMetaTileEntity meta = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); - if (meta instanceof IConnectsToDataPipe) { - byte tColor = ((IConnectsToDataPipe) meta).getColorization(); - if (tColor != myColor) { - continue; - } - if (((IConnectsToDataPipe) meta).canConnectData(oppositeSide)) { - mConnections |= 1 << side.ordinal(); - connectionCount++; - } - } - } - } - } - } else if (aBaseMetaTileEntity.isClientSide() && GT_Client.changeDetected == 4) { - aBaseMetaTileEntity.issueTextureUpdate(); - } - } - - @Override - public boolean canConnectData(ForgeDirection side) { - return true; - } - - @Override - public IConnectsToDataPipe getNext(IConnectsToDataPipe source) { - if (connectionCount != 2) { - return null; - } - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if ((mConnections & 1 << side.ordinal()) == 0) { - continue; // if not connected continue - } - TileEntity next = getBaseMetaTileEntity().getTileEntityAtSide(side); - if (next instanceof IConnectsToDataPipe && next != source) { - if (((IConnectsToDataPipe) next).isDataInputFacing(side.getOpposite())) { - return (IConnectsToDataPipe) next; - } - } else if (next instanceof IGregTechTileEntity) { - IMetaTileEntity meta = ((IGregTechTileEntity) next).getMetaTileEntity(); - if (meta instanceof IConnectsToDataPipe connecsToPipe && meta != source) { - if (meta instanceof GT_MetaTileEntity_Pipe_Data pipeData && pipeData.connectionCount == 2) { - pipeData.markUsed(); - return connecsToPipe; - } - if (connecsToPipe.isDataInputFacing(side.getOpposite())) { - return connecsToPipe; - } - } - } - } - return null; - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - float tSpace = (1f - 0.375f) / 2; - float tSide0 = tSpace; - float tSide1 = 1f - tSpace; - float tSide2 = tSpace; - float tSide3 = 1f - tSpace; - float tSide4 = tSpace; - float tSide5 = 1f - tSpace; - - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.DOWN) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) { - tSide2 = tSide4 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide1 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) { - tSide0 = tSide4 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide1 = tSide3 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) { - tSide0 = tSide2 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - - byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; - if ((tConn & 1 << ForgeDirection.DOWN.ordinal()) != 0) { - tSide0 = 0f; - } - if ((tConn & 1 << ForgeDirection.UP.ordinal()) != 0) { - tSide1 = 1f; - } - if ((tConn & 1 << ForgeDirection.NORTH.ordinal()) != 0) { - tSide2 = 0f; - } - if ((tConn & 1 << ForgeDirection.SOUTH.ordinal()) != 0) { - tSide3 = 1f; - } - if ((tConn & 1 << ForgeDirection.WEST.ordinal()) != 0) { - tSide4 = 0f; - } - if ((tConn & 1 << ForgeDirection.EAST.ordinal()) != 0) { - tSide5 = 1f; - } - - return AxisAlignedBB - .getBoundingBox(aX + tSide4, aY + tSide0, aZ + tSide2, aX + tSide5, aY + tSide1, aZ + tSide3); - } - - @Override - public float getThickNess() { - if (GT_Mod.instance.isClientSide() && GT_Client.hideValue == 1) { - return 0.0625F; - } - return 0.375f; - } - - @Override - public boolean isDataInputFacing(ForgeDirection side) { - return true; - } - - @Override - public byte getColorization() { - return getBaseMetaTileEntity().getColorization(); - } - - @Override - public void markUsed() { - this.active = true; - } - - @Override - public void setActive(boolean state) { - if (state != active) { - active = state; - getBaseMetaTileEntity().issueTextureUpdate(); - } - } - - @Override - public boolean getActive() { - return active; - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java deleted file mode 100644 index 41dd8589d2..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_Energy.java +++ /dev/null @@ -1,282 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.pipe; - -import static gregtech.api.enums.Dyes.MACHINE_METAL; -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.loader.NetworkDispatcher; -import com.github.technus.tectech.mechanics.pipe.IActivePipe; -import com.github.technus.tectech.mechanics.pipe.IConnectsToEnergyTunnel; -import com.github.technus.tectech.mechanics.pipe.PipeActivityMessage; -import com.github.technus.tectech.util.CommonValues; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IColoredTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.PowerLogic; -import gregtech.api.logic.interfaces.PowerLogicHost; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.common.GT_Client; - -public class GT_MetaTileEntity_Pipe_Energy extends MetaPipeEntity implements IConnectsToEnergyTunnel, IActivePipe { - - static Textures.BlockIcons.CustomIcon EMcandy, EMCandyActive; - private static Textures.BlockIcons.CustomIcon EMpipe; - public byte connectionCount = 0; - - private boolean active; - - public GT_MetaTileEntity_Pipe_Energy(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 0); - } - - public GT_MetaTileEntity_Pipe_Energy(String aName) { - super(aName, 0); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_Pipe_Energy(mName); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - EMcandy = new Textures.BlockIcons.CustomIcon("iconsets/EM_CANDY"); - EMCandyActive = new Textures.BlockIcons.CustomIcon("iconsets/EM_CANDY_ACTIVE"); - EMpipe = new Textures.BlockIcons.CustomIcon("iconsets/EM_LASER"); - super.registerIcons(aBlockIconRegister); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, - int colorIndex, boolean aConnected, boolean aRedstone) { - return new ITexture[] { new GT_RenderedTexture(EMpipe), - new GT_RenderedTexture( - getActive() ? EMCandyActive : EMcandy, - Dyes.getModulation(colorIndex, MACHINE_METAL.getRGBA())) }; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public void loadNBTData(NBTTagCompound nbtTagCompound) { - active = nbtTagCompound.getBoolean("eActive"); - } - - @Override - public void saveNBTData(NBTTagCompound nbtTagCompound) { - nbtTagCompound.setBoolean("eActive", active); - } - - @Override - public boolean renderInside(ForgeDirection side) { - return false; - } - - @Override - public byte getTileEntityBaseType() { - return 4; - } - - @Override - public String[] getDescription() { - return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.pipe.energystream.desc.0"), // Laser - // tunneling - // device. - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockmachines.pipe.energystream.desc.1"), // Bright Vacuum!!! - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.energystream.desc.2"), // Must be - // painted to - // work - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.energystream.desc.3") // Do not split - // or turn - }; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - onPostTick(aBaseMetaTileEntity, 31); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if ((aTick & 31) == 31) { - if (TecTech.RANDOM.nextInt(15) == 0) { - NetworkDispatcher.INSTANCE.sendToAllAround( - new PipeActivityMessage.PipeActivityData(this), - aBaseMetaTileEntity.getWorld().provider.dimensionId, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - 256); - } - if (active) { - active = false; - } - mConnections = 0; - connectionCount = 0; - if (aBaseMetaTileEntity.getColorization() < 0) { - return; - } - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - final ForgeDirection oppositeSide = side.getOpposite(); - // if (!aBaseMetaTileEntity.getCoverBehaviorAtSide(b0).alwaysLookConnected(b0, - // aBaseMetaTileEntity.getCoverIDAtSide(b0), aBaseMetaTileEntity.getCoverDataAtSide(b0), - // aBaseMetaTileEntity)) { - TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(side); - if (tTileEntity instanceof IColoredTileEntity) { - // if (aBaseMetaTileEntity.getColorization() >= 0) { - byte tColor = ((IColoredTileEntity) tTileEntity).getColorization(); - if (tColor != aBaseMetaTileEntity.getColorization()) { - continue; - } - // } - } - if (tTileEntity instanceof PowerLogicHost) { - PowerLogic logic = ((PowerLogicHost) tTileEntity).getPowerLogic(oppositeSide); - if (logic != null && logic.canUseLaser()) { - mConnections |= 1 << side.ordinal(); - connectionCount++; - continue; - } - } - if (tTileEntity instanceof IConnectsToEnergyTunnel - && ((IConnectsToEnergyTunnel) tTileEntity).canConnect(oppositeSide)) { - mConnections |= 1 << side.ordinal(); - connectionCount++; - } else if (tTileEntity instanceof IGregTechTileEntity - && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() instanceof IConnectsToEnergyTunnel) { - if (((IConnectsToEnergyTunnel) ((IGregTechTileEntity) tTileEntity).getMetaTileEntity()) - .canConnect(oppositeSide)) { - mConnections |= 1 << side.ordinal(); - connectionCount++; - } - } - } - } - - } else if (aBaseMetaTileEntity.isClientSide() && GT_Client.changeDetected == 4) { - aBaseMetaTileEntity.issueTextureUpdate(); - } - } - - @Override - public void setActive(boolean state) { - if (state != active) { - active = state; - getBaseMetaTileEntity().issueTextureUpdate(); - } - } - - @Override - public boolean getActive() { - return active; - } - - @Override - public void markUsed() { - this.active = true; - } - - @Override - public boolean canConnect(ForgeDirection side) { - return true; - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - float tSpace = (1f - 0.5f) / 2; - float tSide0 = tSpace; - float tSide1 = 1f - tSpace; - float tSide2 = tSpace; - float tSide3 = 1f - tSpace; - float tSide4 = tSpace; - float tSide5 = 1f - tSpace; - - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.DOWN) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) { - tSide2 = tSide4 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide1 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) { - tSide0 = tSide4 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide1 = tSide3 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) { - tSide0 = tSide2 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - - byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; - if ((tConn & 1 << ForgeDirection.DOWN.ordinal()) != 0) { - tSide0 = 0f; - } - if ((tConn & 1 << ForgeDirection.UP.ordinal()) != 0) { - tSide1 = 1f; - } - if ((tConn & 1 << ForgeDirection.NORTH.ordinal()) != 0) { - tSide2 = 0f; - } - if ((tConn & 1 << ForgeDirection.SOUTH.ordinal()) != 0) { - tSide3 = 1f; - } - if ((tConn & 1 << ForgeDirection.WEST.ordinal()) != 0) { - tSide4 = 0f; - } - if ((tConn & 1 << ForgeDirection.EAST.ordinal()) != 0) { - tSide5 = 1f; - } - - return AxisAlignedBB - .getBoundingBox(aX + tSide4, aY + tSide0, aZ + tSide2, aX + tSide5, aY + tSide1, aZ + tSide3); - } - - @Override - public float getThickNess() { - if (GT_Mod.instance.isClientSide() && GT_Client.hideValue == 1) { - return 0.0625F; - } - return 0.5f; - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EnergyMirror.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EnergyMirror.java deleted file mode 100644 index c6cba91e75..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/pipe/GT_MetaTileEntity_Pipe_EnergyMirror.java +++ /dev/null @@ -1,224 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.pipe; - -import static gregtech.api.enums.Dyes.MACHINE_METAL; -import static net.minecraft.util.StatCollector.translateToLocal; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.loader.NetworkDispatcher; -import com.github.technus.tectech.mechanics.pipe.IConnectsToEnergyTunnel; -import com.github.technus.tectech.mechanics.pipe.PipeActivityMessage; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyTunnel; -import com.github.technus.tectech.util.CommonValues; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IColoredTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.PowerLogic; -import gregtech.api.logic.interfaces.PowerLogicHost; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.common.GT_Client; - -public class GT_MetaTileEntity_Pipe_EnergyMirror extends GT_MetaTileEntity_Pipe_Energy { - - private static Textures.BlockIcons.CustomIcon EMpipe; - private ForgeDirection[] connectedSides = { null, null }; - private ForgeDirection chainedFrontFacing = null; - - private boolean active; - - public GT_MetaTileEntity_Pipe_EnergyMirror(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_Pipe_EnergyMirror(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_Pipe_EnergyMirror(mName); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - EMpipe = new Textures.BlockIcons.CustomIcon("iconsets/EM_LASERMIRROR"); - super.registerIcons(aBlockIconRegister); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, - int colorIndex, boolean aConnected, boolean aRedstone) { - return new ITexture[] { new GT_RenderedTexture(EMpipe), - new GT_RenderedTexture( - getActive() ? EMCandyActive : EMcandy, - Dyes.getModulation(colorIndex, MACHINE_METAL.getRGBA())) }; - } - - @Override - public String[] getDescription() { - return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.pipe.energymirror.desc.0"), - EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD - + translateToLocal("gt.blockmachines.pipe.energystream.desc.1"), - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.energystream.desc.2"), - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.energymirror.desc.1") }; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if ((aTick & 31) == 31) { - if (TecTech.RANDOM.nextInt(15) == 0) { - NetworkDispatcher.INSTANCE.sendToAllAround( - new PipeActivityMessage.PipeActivityData(this), - aBaseMetaTileEntity.getWorld().provider.dimensionId, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - 256); - } - if (active) { - active = false; - } - mConnections = 0; - connectedSides[0] = null; - connectedSides[1] = null; - connectionCount = 0; - if (aBaseMetaTileEntity.getColorization() < 0) { - return; - } - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - // We only allow a single bend - if (connectionCount < 2) { - final ForgeDirection oppositeSide = side.getOpposite(); - TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(side); - if (tTileEntity instanceof IColoredTileEntity) { - byte tColor = ((IColoredTileEntity) tTileEntity).getColorization(); - if (tColor != aBaseMetaTileEntity.getColorization()) { - continue; - } - } - if (tTileEntity instanceof PowerLogicHost) { - PowerLogic logic = ((PowerLogicHost) tTileEntity).getPowerLogic(oppositeSide); - if (logic != null && logic.canUseLaser()) { - mConnections |= 1 << side.ordinal(); - connectedSides[connectionCount] = side; - connectionCount++; - continue; - } - } - if (tTileEntity instanceof IConnectsToEnergyTunnel - && ((IConnectsToEnergyTunnel) tTileEntity).canConnect(oppositeSide)) { - mConnections |= 1 << side.ordinal(); - connectedSides[connectionCount] = side; - connectionCount++; - } else if (tTileEntity instanceof IGregTechTileEntity && ((IGregTechTileEntity) tTileEntity) - .getMetaTileEntity() instanceof IConnectsToEnergyTunnel) { - if (((IConnectsToEnergyTunnel) ((IGregTechTileEntity) tTileEntity).getMetaTileEntity()) - .canConnect(oppositeSide)) { - mConnections |= 1 << side.ordinal(); - connectedSides[connectionCount] = side; - connectionCount++; - } - } - } - } - } - - } else if (aBaseMetaTileEntity.isClientSide() && GT_Client.changeDetected == 4) { - aBaseMetaTileEntity.issueTextureUpdate(); - } - } - - public ForgeDirection getBendDirection(ForgeDirection dir) { - for (ForgeDirection bendDir : connectedSides) { - if (bendDir != dir) { - chainedFrontFacing = bendDir.getOpposite(); - return bendDir; - } - } - return null; - } - - public ForgeDirection getChainedFrontFacing() { - return chainedFrontFacing; - } - - public IGregTechTileEntity bendAround(ForgeDirection inputSide) { - byte color = getBaseMetaTileEntity().getColorization(); - if (color < 0) { - return null; - } else { - ForgeDirection direction = getBendDirection(inputSide); - if (direction == null) { - return null; - } - ForgeDirection opposite = direction.getOpposite(); - for (short dist = 1; dist < 1000; dist++) { - - IGregTechTileEntity tGTTileEntity = getBaseMetaTileEntity() - .getIGregTechTileEntityAtSideAndDistance(direction, dist); - if (tGTTileEntity != null && tGTTileEntity.getColorization() == color) { - IMetaTileEntity aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); - if (aMetaTileEntity != null) { - // If we hit a mirror, use the mirror's view instead - if (aMetaTileEntity instanceof GT_MetaTileEntity_Pipe_EnergyMirror tMirror) { - tGTTileEntity = tMirror.bendAround(opposite); - if (tGTTileEntity == null) { - break; - } else { - aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); - chainedFrontFacing = tMirror.getChainedFrontFacing(); - opposite = chainedFrontFacing; - } - } - - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyTunnel - && opposite == tGTTileEntity.getFrontFacing()) { - return tGTTileEntity; - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Pipe_Energy) { - if (((GT_MetaTileEntity_Pipe_Energy) aMetaTileEntity).connectionCount < 2) { - return null; - } else { - ((GT_MetaTileEntity_Pipe_Energy) aMetaTileEntity).markUsed(); - } - } else { - return null; - } - } else { - if (tGTTileEntity instanceof PowerLogicHost) { - PowerLogic logic = ((PowerLogicHost) tGTTileEntity).getPowerLogic(opposite); - if (logic == null || !logic.canUseLaser() || opposite != tGTTileEntity.getFrontFacing()) { - return tGTTileEntity; - } - } - return null; - } - } else { - return null; - } - } - } - return null; - } - - @Override - public float getThickNess() { - if (GT_Mod.instance.isClientSide() && GT_Client.hideValue == 1) { - return 0.0625F; - } - return 0.6f; - } - -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java deleted file mode 100644 index a4187da2ef..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_BuckConverter.java +++ /dev/null @@ -1,267 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.single; - -import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_POWER_TT; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.GT_Values.VN; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.function.Consumer; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.objects.GT_RenderedTexture; - -public class GT_MetaTileEntity_BuckConverter extends GT_MetaTileEntity_TieredMachineBlock - implements IAddUIWidgets, IAddGregtechLogo { - - private static GT_RenderedTexture BUCK, BUCK_ACTIVE; - public int EUT = 0, AMP = 0; - private static NumberFormatMUI numberFormat = new NumberFormatMUI(); - - public GT_MetaTileEntity_BuckConverter(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { CommonValues.TEC_MARK_GENERAL, translateToLocal("gt.blockmachines.machine.tt.buck.desc.0"), - EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.machine.tt.buck.desc.1"), }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_BuckConverter(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - TT_Utility.setTier(aTier, this); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_BuckConverter(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - BUCK = new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/BUCK")); - BUCK_ACTIVE = new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/BUCK_ACTIVE")); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[] { MACHINE_CASINGS_TT[mTier][colorIndex + 1], - side == facing ? (aActive ? BUCK_ACTIVE : BUCK) - : (side == facing.getOpposite() ? OVERLAYS_ENERGY_IN_POWER_TT[mTier] - : (aActive ? OVERLAYS_ENERGY_OUT_POWER_TT[mTier] : OVERLAYS_ENERGY_IN_POWER_TT[mTier])) }; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return null; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("eEUT", EUT); - aNBT.setInteger("eAMP", AMP); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - EUT = aNBT.getInteger("eEUT"); - AMP = aNBT.getInteger("eAMP"); - getBaseMetaTileEntity().setActive((long) AMP * EUT >= 0); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getBackFacing(); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return getBaseMetaTileEntity().isActive() && side != getBaseMetaTileEntity().getFrontFacing() - && side != getBaseMetaTileEntity().getBackFacing(); - } - - @Override - public long maxAmperesIn() { - return 2; - } - - @Override - public long maxAmperesOut() { - return getBaseMetaTileEntity().isActive() ? Math.min(Math.abs(AMP), 64) : 0; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxEUOutput() { - return getBaseMetaTileEntity().isActive() ? Math.min(Math.abs(EUT), maxEUInput()) : 0; - } - - @Override - public long maxEUStore() { - return V[mTier] << 4; - } - - @Override - public long getMinimumStoredEU() { - return V[mTier] << 2; - } - - @Override - public int getProgresstime() { - return (int) getBaseMetaTileEntity().getUniversalEnergyStored(); - } - - @Override - public int maxProgresstime() { - return (int) getBaseMetaTileEntity().getUniversalEnergyCapacity(); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY) - .setSize(17, 17) - .setPos(113, 56)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setSize(90, 72) - .setPos(43, 4)) - .widget( - new TextWidget().setStringSupplier(() -> "EUT: " + numberFormat.format(EUT)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 8)) - .widget( - new TextWidget().setStringSupplier(() -> "TIER: " + VN[TT_Utility.getTier(Math.abs(EUT))]) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 16)) - .widget( - new TextWidget().setStringSupplier(() -> "AMP: " + numberFormat.format(AMP)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 24)) - .widget( - new TextWidget().setStringSupplier(() -> "SUM: " + numberFormat.format((long) AMP * EUT)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 32)); - - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> EUT -= val, 512, 64, 7, 4); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> EUT /= val, 512, 64, 7, 22); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> AMP -= val, 512, 64, 7, 40); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> AMP /= val, 512, 64, 7, 58); - - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> EUT -= val, 16, 1, 25, 4); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> EUT /= val, 16, 2, 25, 22); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> AMP -= val, 16, 1, 25, 40); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> AMP /= val, 16, 2, 25, 58); - - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> EUT += val, 16, 1, 133, 4); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> EUT *= val, 16, 2, 133, 22); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> AMP += val, 16, 1, 133, 40); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> AMP *= val, 16, 2, 133, 58); - - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> EUT += val, 512, 64, 151, 4); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> EUT *= val, 512, 64, 151, 22); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> AMP += val, 512, 64, 151, 40); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> AMP *= val, 512, 64, 151, 58); - } - - private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, - int changeNumberShift, int changeNumber, int xPos, int yPos) { - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - setter.accept(clickData.shift ? changeNumberShift : changeNumber); - getBaseMetaTileEntity().setActive((long) AMP * EUT >= 0); - }) - .setBackground(GT_UITextures.BUTTON_STANDARD, overlay) - .setSize(18, 18) - .setPos(xPos, yPos)); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java deleted file mode 100644 index 0e1ad53a1b..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPollutor.java +++ /dev/null @@ -1,241 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.single; - -import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.function.Consumer; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.common.GT_Pollution; - -/** - * Created by Tec on 23.03.2017. - */ -public class GT_MetaTileEntity_DebugPollutor extends GT_MetaTileEntity_TieredMachineBlock - implements IAddUIWidgets, IAddGregtechLogo { - - private static GT_RenderedTexture POLLUTOR; - public int pollution = 0; - private static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - public GT_MetaTileEntity_DebugPollutor(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { CommonValues.TEC_MARK_GENERAL, translateToLocal("gt.blockmachines.debug.tt.pollutor.desc.0"), - EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.pollutor.desc.1"), - EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.pollutor.desc.2") }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_DebugPollutor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - TT_Utility.setTier(aTier, this); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_DebugPollutor(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - POLLUTOR = new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/POLLUTOR")); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[] { MACHINE_CASINGS_TT[mTier][colorIndex + 1], - (side == facing) ? POLLUTOR : OVERLAYS_ENERGY_OUT_LASER_TT[mTier] }; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return null; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("ePollution", pollution); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - pollution = aNBT.getInteger("ePollution"); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (pollution > 0) { - GT_Pollution.addPollution(aBaseMetaTileEntity, pollution); - } - } else if (aBaseMetaTileEntity.isClientSide() && aBaseMetaTileEntity.isActive()) { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (side != aBaseMetaTileEntity.getFrontFacing()) { - TecTech.proxy.em_particle(aBaseMetaTileEntity, side); - TecTech.proxy.pollutor_particle(aBaseMetaTileEntity, side); - } - } - } - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isElectric() { - return false; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY) - .setSize(17, 17) - .setPos(113, 56)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setSize(90, 72) - .setPos(43, 4)) - .widget( - new TextWidget().setStringSupplier(() -> "Pollution: " + numberFormat.format(pollution)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 8)); - - addChangeNumberButton( - builder, - GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, - val -> pollution -= val, - 512, - 64, - 7, - 4); - addChangeNumberButton( - builder, - GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, - val -> pollution /= val, - 512, - 64, - 7, - 22); - - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> pollution -= val, 16, 1, 25, 4); - addChangeNumberButton( - builder, - GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, - val -> pollution /= val, - 16, - 2, - 25, - 22); - - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> pollution += val, 16, 1, 133, 4); - addChangeNumberButton( - builder, - GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, - val -> pollution *= val, - 16, - 2, - 133, - 22); - - addChangeNumberButton( - builder, - GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, - val -> pollution += val, - 512, - 64, - 151, - 4); - addChangeNumberButton( - builder, - GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, - val -> pollution *= val, - 512, - 64, - 151, - 22); - - } - - private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, - int changeNumberShift, int changeNumber, int xPos, int yPos) { - builder.widget( - new ButtonWidget() - .setOnClick((clickData, widget) -> setter.accept(clickData.shift ? changeNumberShift : changeNumber)) - .setBackground(GT_UITextures.BUTTON_STANDARD, overlay) - .setSize(18, 18) - .setPos(xPos, yPos)); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java deleted file mode 100644 index 469e6e4225..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugPowerGenerator.java +++ /dev/null @@ -1,387 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.single; - -import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_LASER_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_POWER_TT; -import static com.github.technus.tectech.util.CommonValues.TRANSFER_AT; -import static gregtech.api.enums.GT_Values.VN; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.function.Consumer; -import java.util.function.IntConsumer; -import java.util.function.IntSupplier; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.mechanics.pipe.IConnectsToEnergyTunnel; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyTunnel; -import com.github.technus.tectech.thing.metaTileEntity.pipe.GT_MetaTileEntity_Pipe_Energy; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Utility; - -/** - * Created by Tec on 23.03.2017. - */ -public class GT_MetaTileEntity_DebugPowerGenerator extends GT_MetaTileEntity_TieredMachineBlock - implements IConnectsToEnergyTunnel, IAddUIWidgets, IAddGregtechLogo { - - public static GT_RenderedTexture GENNY; - private boolean LASER = false; - public int EUT = 0, AMP = 0; - public boolean producing = true; - private static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - public GT_MetaTileEntity_DebugPowerGenerator(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { CommonValues.TEC_MARK_GENERAL, translateToLocal("gt.blockmachines.debug.tt.genny.desc.0"), - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.debug.tt.genny.desc.3"), - EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.genny.desc.1"), - EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.genny.desc.2") }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_DebugPowerGenerator(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - TT_Utility.setTier(aTier, this); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_DebugPowerGenerator(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - LASER = !LASER; - GT_Utility.sendChatToPlayer( - aPlayer, - String.format(StatCollector.translateToLocal("tt.chat.debug.generator"), LASER ? "ON" : "OFF")); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - GENNY = new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/GENNY")); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[] { MACHINE_CASINGS_TT[mTier][colorIndex + 1], - side != facing - ? LASER ? (aActive ? OVERLAYS_ENERGY_OUT_LASER_TT[mTier] : OVERLAYS_ENERGY_IN_LASER_TT[mTier]) - : (aActive ? OVERLAYS_ENERGY_OUT_POWER_TT[mTier] : OVERLAYS_ENERGY_IN_POWER_TT[mTier]) - : GENNY }; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return null; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("eEUT", EUT); - aNBT.setInteger("eAMP", AMP); - aNBT.setBoolean("eLaser", LASER); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - EUT = aNBT.getInteger("eEUT"); - AMP = aNBT.getInteger("eAMP"); - LASER = aNBT.getBoolean("eLaser"); - producing = (long) AMP * EUT >= 0; - getBaseMetaTileEntity().setActive(producing); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - aBaseMetaTileEntity.setActive(producing); - if (!LASER) { - if (aBaseMetaTileEntity.isActive()) { - setEUVar(maxEUStore()); - } else { - setEUVar(0); - } - } else { - byte Tick = (byte) (aTick % 20); - if (aBaseMetaTileEntity.isActive() && TRANSFER_AT == Tick) { - setEUVar(maxEUStore()); - moveAround(aBaseMetaTileEntity); - } else if (TRANSFER_AT == Tick) { - setEUVar(0); - } - } - } - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isEnetOutput() { - return !LASER; - } - - @Override - public boolean isEnetInput() { - return !LASER; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return !producing && side != getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return producing && side != getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public long maxAmperesIn() { - return producing ? 0 : Math.abs(AMP); - } - - @Override - public long maxAmperesOut() { - return producing ? Math.abs(AMP) : 0; - } - - @Override - public long maxEUInput() { - return producing ? 0 : Integer.MAX_VALUE; - } - - @Override - public long maxEUOutput() { - return producing ? Math.abs(EUT) : 0; - } - - @Override - public long maxEUStore() { - return LASER ? Math.abs((long) EUT * AMP * 24) : Math.abs((long) EUT * AMP) << 2; - } - - @Override - public long getMinimumStoredEU() { - return Math.abs((long) EUT * AMP); - } - - @Override - public int getProgresstime() { - return (int) getBaseMetaTileEntity().getUniversalEnergyStored(); - } - - @Override - public int maxProgresstime() { - return (int) getBaseMetaTileEntity().getUniversalEnergyCapacity(); - } - - public int getEUT() { - return EUT; - } - - public void setEUT(int EUT) { - this.EUT = EUT; - } - - public int getAMP() { - return AMP; - } - - public void setAMP(int AMP) { - this.AMP = AMP; - } - - @Override - public boolean canConnect(ForgeDirection side) { - return LASER && side != getBaseMetaTileEntity().getFrontFacing(); - } - - private void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { - for (final ForgeDirection face : ForgeDirection.VALID_DIRECTIONS) { - if (face == aBaseMetaTileEntity.getFrontFacing()) continue; - final ForgeDirection opposite = face.getOpposite(); - for (short dist = 1; dist < 1000; dist++) { - IGregTechTileEntity tGTTileEntity = aBaseMetaTileEntity - .getIGregTechTileEntityAtSideAndDistance(face, dist); - if (tGTTileEntity != null) { - IMetaTileEntity aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); - if (aMetaTileEntity != null) { - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyTunnel - && opposite == tGTTileEntity.getFrontFacing()) { - if (maxEUOutput() > ((GT_MetaTileEntity_Hatch_EnergyTunnel) aMetaTileEntity).maxEUInput()) { - aMetaTileEntity.doExplosion(maxEUOutput()); - } else { - long diff = Math.min( - AMP * 20L * maxEUOutput(), - Math.min( - ((GT_MetaTileEntity_Hatch_EnergyTunnel) aMetaTileEntity).maxEUStore() - - aMetaTileEntity.getBaseMetaTileEntity() - .getStoredEU(), - aBaseMetaTileEntity.getStoredEU())); - ((GT_MetaTileEntity_Hatch_EnergyTunnel) aMetaTileEntity).setEUVar( - aMetaTileEntity.getBaseMetaTileEntity() - .getStoredEU() + diff); - } - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Pipe_Energy) { - if (((GT_MetaTileEntity_Pipe_Energy) aMetaTileEntity).connectionCount < 2) {} else { - ((GT_MetaTileEntity_Pipe_Energy) aMetaTileEntity).markUsed(); - } - } - } - } - } - } - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY) - .setSize(17, 17) - .setPos(113, 56)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setSize(90, 72) - .setPos(43, 4)) - - .widget( - new TextWidget().setStringSupplier(() -> "TIER: " + VN[TT_Utility.getTier(Math.abs(EUT))]) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 22)) - - .widget( - new TextWidget().setStringSupplier(() -> "SUM: " + numberFormat.format((long) AMP * EUT)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 46)); - - addLabelledIntegerTextField(builder, "EUT: ", 24, this::getEUT, this::setEUT, 46, 8); - addLabelledIntegerTextField(builder, "AMP: ", 24, this::getAMP, this::setAMP, 46, 34); - - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> EUT -= val, 512, 64, 7, 4); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> EUT /= val, 512, 64, 7, 22); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> AMP -= val, 512, 64, 7, 40); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> AMP /= val, 512, 64, 7, 58); - - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> EUT -= val, 16, 1, 25, 4); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> EUT /= val, 16, 2, 25, 22); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> AMP -= val, 16, 1, 25, 40); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> AMP /= val, 16, 2, 25, 58); - - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> EUT += val, 16, 1, 133, 4); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> EUT *= val, 16, 2, 133, 22); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> AMP += val, 16, 1, 133, 40); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> AMP *= val, 16, 2, 133, 58); - - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> EUT += val, 512, 64, 151, 4); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> EUT *= val, 512, 64, 151, 22); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> AMP += val, 512, 64, 151, 40); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> AMP *= val, 512, 64, 151, 58); - } - - private void addLabelledIntegerTextField(ModularWindow.Builder builder, String label, int labelWidth, - IntSupplier getter, IntConsumer setter, int xPos, int yPos) { - builder.widget( - new TextWidget(label).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(xPos, yPos)) - .widget( - new NumericWidget().setGetter(getter::getAsInt) - .setSetter(val -> setter.accept((int) val)) - .setTextColor(COLOR_TEXT_WHITE.get()) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) - .setPos(xPos + labelWidth, yPos - 1) - .setSize(56, 10)); - } - - private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, - int changeNumberShift, int changeNumber, int xPos, int yPos) { - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - setter.accept(clickData.shift ? changeNumberShift : changeNumber); - producing = (long) AMP * EUT >= 0; - }) - .setBackground(GT_UITextures.BUTTON_STANDARD, overlay) - .setSize(18, 18) - .setPos(xPos, yPos)); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java deleted file mode 100644 index 1b9455fb6e..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_DebugStructureWriter.java +++ /dev/null @@ -1,295 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.single; - -import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.function.Consumer; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; -import com.gtnewhorizon.structurelib.structure.StructureUtility; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.objects.GT_RenderedTexture; - -/** - * Created by Tec on 23.03.2017. - */ -public class GT_MetaTileEntity_DebugStructureWriter extends GT_MetaTileEntity_TieredMachineBlock - implements IAddUIWidgets, IAddGregtechLogo { - - private static GT_RenderedTexture MARK; - public short[] numbers = new short[6]; - public boolean size = false; - public String[] result = new String[] { "Undefined" }; - - public GT_MetaTileEntity_DebugStructureWriter(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { CommonValues.TEC_MARK_GENERAL, translateToLocal("gt.blockmachines.debug.tt.writer.desc.0"), - EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.writer.desc.1"), - EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.writer.desc.2") }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_DebugStructureWriter(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - TT_Utility.setTier(aTier, this); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_DebugStructureWriter(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - MARK = new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/MARK")); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[] { MACHINE_CASINGS_TT[mTier][colorIndex + 1], - side != facing ? new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE) : MARK }; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return null; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - for (int i = 0; i < numbers.length; i++) { - aNBT.setShort("eData" + i, numbers[i]); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - for (int i = 0; i < numbers.length; i++) { - numbers[i] = aNBT.getShort("eData" + i); - } - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - aBaseMetaTileEntity.disableWorking(); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isAllowedToWork()) { - - String pseudoJavaCode = StructureUtility.getPseudoJavaCode( - aBaseMetaTileEntity.getWorld(), - ExtendedFacing.of(aBaseMetaTileEntity.getFrontFacing()), - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - numbers[0], - numbers[1], - numbers[2], - te -> te.getClass() - .getCanonicalName(), - numbers[3], - numbers[4], - numbers[5], - false); - TecTech.LOGGER.info(pseudoJavaCode); - result = pseudoJavaCode.split("\\n"); - aBaseMetaTileEntity.disableWorking(); - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity(); - - String pseudoJavaCode = StructureUtility.getPseudoJavaCode( - aBaseMetaTileEntity.getWorld(), - ExtendedFacing.of(aBaseMetaTileEntity.getFrontFacing()), - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - numbers[0], - numbers[1], - numbers[2], - te -> te.getClass() - .getCanonicalName(), - numbers[3], - numbers[4], - numbers[5], - false); - TecTech.LOGGER.info(pseudoJavaCode); - result = pseudoJavaCode.split("\\n"); - aBaseMetaTileEntity.disableWorking(); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isElectric() { - return false; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return result; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY) - .setSize(17, 17) - .setPos(113, 56)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setSize(90, 72) - .setPos(43, 4)) - .widget( - new TextWidget().setStringSupplier(() -> size ? "Structure size" : "My position") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 8)) - .widget( - new TextWidget().setStringSupplier(() -> size ? "(Changing scan size)" : "(Moving origin)") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 16)) - .widget( - new TextWidget().setStringSupplier(() -> "A: " + numbers[size ? 3 : 0]) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 24)) - .widget( - new TextWidget().setStringSupplier(() -> "B: " + numbers[size ? 4 : 1]) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 32)) - .widget( - new TextWidget().setStringSupplier(() -> "C: " + numbers[size ? 5 : 2]) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 40)); - - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, -512, -64, 7); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, -16, -1, 25); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, 16, 1, 133); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, 512, 16, 151); - } - - private void addChangeNumberButtons(ModularWindow.Builder builder, IDrawable overlay, int addNumberShift, - int addNumber, int xPos) { - addChangeNumberButton( - builder, - overlay, - val -> numbers[size ? 3 : 0] += val, - addNumberShift, - addNumber, - xPos, - 4); - addChangeNumberButton( - builder, - overlay, - val -> numbers[size ? 4 : 1] += val, - addNumberShift, - addNumber, - xPos, - 22); - addChangeNumberButton( - builder, - overlay, - val -> numbers[size ? 5 : 2] += val, - addNumberShift, - addNumber, - xPos, - 40); - builder.widget( - new ButtonWidget().setOnClick((clickData, widget) -> { size = !size; }) - .setBackground(GT_UITextures.BUTTON_STANDARD, overlay) - .setSize(18, 18) - .setPos(xPos, 58)); - } - - private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, - int changeNumberShift, int changeNumber, int xPos, int yPos) { - builder.widget( - new ButtonWidget() - .setOnClick( - (clickData, widget) -> { setter.accept(clickData.shift ? changeNumberShift : changeNumber); }) - .setBackground(GT_UITextures.BUTTON_STANDARD, overlay) - .setSize(18, 18) - .setPos(xPos, yPos)); - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java deleted file mode 100644 index 8728a5d04f..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_OwnerDetector.java +++ /dev/null @@ -1,239 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.single; - -import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; -import static com.github.technus.tectech.util.CommonValues.RECIPE_AT; -import static net.minecraft.util.StatCollector.translateToLocal; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Utility; - -/** - * Created by Tec on 23.03.2017. - */ -public class GT_MetaTileEntity_OwnerDetector extends GT_MetaTileEntity_TieredMachineBlock { - - private static GT_RenderedTexture OWNER_ONLINE, OWNER_OFFLINE; - private String uuid; - private boolean interdimensional = true; - - public GT_MetaTileEntity_OwnerDetector(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { CommonValues.TEC_MARK_GENERAL, - translateToLocal("gt.blockmachines.machine.tt.ownerdetector.desc.0"), - EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.machine.tt.ownerdetector.desc.1"), - EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.machine.tt.ownerdetector.desc.2") }); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_OwnerDetector(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - TT_Utility.setTier(aTier, this); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_OwnerDetector(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - OWNER_ONLINE = new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/OWNER_ONLINE")); - OWNER_OFFLINE = new GT_RenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/OWNER_OFFLINE")); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[] { MACHINE_CASINGS_TT[mTier][colorIndex + 1], aActive ? OWNER_ONLINE : OWNER_OFFLINE }; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return null; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, - ItemStack itemStack) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setString("eUUID", uuid); - aNBT.setBoolean("eInterDim", interdimensional); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - uuid = aNBT.getString("eUUID"); - interdimensional = aNBT.getBoolean("eInterDim"); - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - if (aBaseMetaTileEntity.isServerSide()) { - if (uuid == null || uuid.length() == 0) { - String name = aBaseMetaTileEntity.getOwnerName(); - if (!("Player".equals(name))) { - uuid = TecTech.proxy.getUUID(name); - } - } - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide() && aTick % 20 == RECIPE_AT) { - boolean detected = TecTech.proxy.isOnlineUUID(uuid) || (uuid != null && uuid.length() > 0 - && TecTech.proxy.isOnlineName(aBaseMetaTileEntity.getOwnerName())); - aBaseMetaTileEntity.setActive(detected); - aBaseMetaTileEntity.setGenericRedstoneOutput(detected); - byte value = (byte) (detected ? 15 : 0); - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, value); - } - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - String clientLocale; - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - interdimensional ^= true; - GT_Utility.sendChatToPlayer( - aPlayer, - interdimensional ? translateToLocalFormatted("tt.keyphrase.Running_interdimensional_scan", clientLocale) - : translateToLocalFormatted("tt.keyphrase.Running_local_dimension_scan", clientLocale)); - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isElectric() { - return false; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public boolean isEnetInput() { - return false; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return false; - } - - @Override - public long maxAmperesIn() { - return 0; - } - - @Override - public long maxAmperesOut() { - return 0; - } - - @Override - public long maxEUInput() { - return Integer.MAX_VALUE; - } - - @Override - public long maxEUOutput() { - return 0; - } - - @Override - public long maxEUStore() { - return 0; - } - - @Override - public long getMinimumStoredEU() { - return 0; - } - - @Override - public int getProgresstime() { - return interdimensional ? 1 : 0; - } - - @Override - public int maxProgresstime() { - return 1; - } - - @Override - public boolean hasSidedRedstoneOutputBehavior() { - return true; - } - - @Override - public boolean allowGeneralRedstoneOutput() { - return true; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java deleted file mode 100644 index 90114ea0f8..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TT_Transformer.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.single; - -import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_MULTI_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_MULTI_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_POWER_TT; -import static net.minecraft.util.StatCollector.translateToLocal; - -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Transformer; - -public class GT_MetaTileEntity_TT_Transformer extends GT_MetaTileEntity_Transformer { - - public GT_MetaTileEntity_TT_Transformer(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, ""); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_TT_Transformer(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - TT_Utility.setTier(aTier, this); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_TT_Transformer(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[12][17][]; - for (byte b = -1; b < 16; b++) { - rTextures[0][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_OUT_MULTI_TT[mTier] }; - rTextures[1][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_OUT_MULTI_TT[mTier] }; - rTextures[2][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_OUT_MULTI_TT[mTier] }; - rTextures[3][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1] }; - rTextures[4][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1] }; - rTextures[5][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1] }; - rTextures[6][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_IN_MULTI_TT[mTier] }; - rTextures[7][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_IN_MULTI_TT[mTier] }; - rTextures[8][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_IN_MULTI_TT[mTier] }; - rTextures[9][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1] }; - rTextures[10][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1] }; - rTextures[11][b + 1] = new ITexture[] { MACHINE_CASINGS_TT[mTier][b + 1], - OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1] }; - } - return rTextures; - } - - @Override - public String[] getDescription() { - return new String[] { - translateToLocal("gt.blockmachines.tt.transformer.tier." + (mTier > 9 ? "" : "0") + mTier + ".desc"), - CommonValues.TEC_MARK_GENERAL }; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java deleted file mode 100644 index d5c0be6b21..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ /dev/null @@ -1,404 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.single; - -import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.generateTeslaNodeMap; -import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.powerTeslaNodeMap; -import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetAdd; -import static com.github.technus.tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetRemove; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_MULTI_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_POWER_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_TT; -import static com.github.technus.tectech.thing.metaTileEntity.Textures.TESLA_TRANSCEIVER_TOP_BA; -import static gregtech.api.enums.GT_Values.V; -import static java.lang.Math.round; -import static net.minecraft.util.StatCollector.translateToLocal; -import static net.minecraft.util.StatCollector.translateToLocalFormatted; - -import java.util.Arrays; -import java.util.HashSet; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; -import org.apache.commons.lang3.reflect.FieldUtils; - -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.loader.NetworkDispatcher; -import com.github.technus.tectech.mechanics.spark.RendererMessage; -import com.github.technus.tectech.mechanics.spark.ThaumSpark; -import com.github.technus.tectech.mechanics.tesla.ITeslaConnectable; -import com.github.technus.tectech.mechanics.tesla.ITeslaConnectableSimple; -import com.github.technus.tectech.util.CommonValues; -import com.github.technus.tectech.util.TT_Utility; -import com.google.common.collect.Multimap; -import com.google.common.collect.MultimapBuilder; -import com.gtnewhorizon.structurelib.util.Vec3Impl; - -import eu.usrv.yamcore.auxiliary.PlayerChatHelper; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicBatteryBuffer; - -public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer implements ITeslaConnectable { - - // Interface fields - private final Multimap teslaNodeMap = MultimapBuilder.treeKeys() - .linkedListValues() - .build(); - private final HashSet sparkList = new HashSet<>(); - private int sparkCount = 10; - - private static final int transferRadiusMax = TecTech.configTecTech.TESLA_SINGLE_RANGE; // Default is 20 - private static final int perBlockLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_PER_BLOCK; // Default is 1 - private static final float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE; // Default is - // 0.25F - private static final int transferRadiusMin = 4; // Minimum user configurable - private int transferRadius = transferRadiusMax; // Default transferRadius setting - - public boolean powerPassToggle = false; // Power Pass for public viewing - private static final int histSteps = 20; // Hysteresis Resolution - private int histSettingLow = 3; // Hysteresis Low Limit - private int histSettingHigh = 15; // Hysteresis High Limit - private static final int histLowLimit = 1; // How low can you configure it? - private static final int histHighLimit = 19; // How high can you configure it? - private float histLow = (float) histSettingLow / histSteps; // Power pass is disabled if power is under this - // fraction - private float histHigh = (float) histSettingHigh / histSteps; // Power pass is enabled if power is over this - // fraction - - private final long outputVoltage = V[mTier]; - private boolean overdriveToggle = false; - - private String clientLocale = "en_US"; - - public GT_MetaTileEntity_TeslaCoil(int aID, String aName, String aNameRegional, int aTier, int aSlotCount) { - super(aID, aName, aNameRegional, aTier, "", aSlotCount); - TT_Utility.setTier(aTier, this); - } - - public GT_MetaTileEntity_TeslaCoil(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, - int aSlotCount) { - super(aName, aTier, aDescription, aTextures, aSlotCount); - } - - @Override - public String[] getDescription() { - String[] jargon = new String[] { CommonValues.THETA_MOVEMENT, - translateToLocal("gt.blockmachines.machine.tt.tesla.desc.0"), // Your Tesla I/O machine of choice - EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.machine.tt.tesla.desc.1") // Lightning - // stoves for the - // rich - }; - String[] sDesc = super.getDescription(); - sDesc = Arrays.copyOfRange(sDesc, 1, sDesc.length); // Removes first element from array - return ArrayUtils.addAll(jargon, sDesc); - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (overdriveToggle) { - overdriveToggle = false; - PlayerChatHelper - .SendInfo(aPlayer, translateToLocalFormatted("tt.keyphrase.Overdrive_disengaged", clientLocale)); - } else { - overdriveToggle = true; - PlayerChatHelper - .SendInfo(aPlayer, translateToLocalFormatted("tt.keyphrase.Overdrive_engaged", clientLocale)); - } - return true; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - if (histSettingHigh < histHighLimit) { - histSettingHigh++; - } else { - histSettingHigh = histSettingLow + 1; - } - histHigh = (float) histSettingHigh / histSteps; - PlayerChatHelper.SendInfo( - aPlayer, - translateToLocalFormatted("tt.keyphrase.Hysteresis_high_set_to", clientLocale) + " " - + round(histHigh * 100F) - + "%"); - } else { - if (histSettingLow > histLowLimit) { - histSettingLow--; - } else { - histSettingLow = histSettingHigh - 1; - } - histLow = (float) histSettingLow / histSteps; - PlayerChatHelper.SendInfo( - aPlayer, - translateToLocalFormatted("tt.keyphrase.Hysteresis_low_set_to", clientLocale) + " " - + round(histLow * 100F) - + "%"); - } - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - if (transferRadius > transferRadiusMin) { - transferRadius--; - } - } else { - if (transferRadius < transferRadiusMax) { - transferRadius++; - } - } - PlayerChatHelper.SendInfo( - aPlayer, - translateToLocalFormatted("tt.keyphrase.Tesla_radius_set_to", clientLocale) + " " + transferRadius + "m"); - return false; - } - - // Cheeky skrub stuff to get machine to switch powerPass on soft mallet - @Override - public boolean hasAlternativeModeText() { - return true; - } - - @Override - public String getAlternativeModeText() { - // Hysteresis based ePowerPass Config - long energyMax = getStoredEnergy()[1]; - long energyStored = getStoredEnergy()[0]; - float energyFrac = (float) energyStored / energyMax; - - // ePowerPass hist toggle - if (energyFrac > histHigh) { - powerPassToggle = true; - } else if (energyFrac < histLow) { - powerPassToggle = false; - } else { - powerPassToggle = !powerPassToggle; - } - - // And after this cheeky-ness, toss the string XD - return powerPassToggle ? translateToLocalFormatted("tt.keyphrase.Sending_power", clientLocale) + "!" - : translateToLocalFormatted("tt.keyphrase.Receiving_power", clientLocale) + "!"; - } - - @Override - public boolean isFacingValid(ForgeDirection side) { - return side != ForgeDirection.UP; - } // Prevents output at the top side - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[3][17][]; - for (byte i = -1; i < 16; ++i) { - rTextures[0][i + 1] = new ITexture[] { MACHINE_CASINGS_TT[this.mTier][i + 1] }; - rTextures[1][i + 1] = new ITexture[] { MACHINE_CASINGS_TT[this.mTier][i + 1], TESLA_TRANSCEIVER_TOP_BA }; - rTextures[2][i + 1] = new ITexture[] { MACHINE_CASINGS_TT[this.mTier][i + 1], - this.mInventory.length == 16 ? OVERLAYS_ENERGY_OUT_POWER_TT[this.mTier] - : (this.mInventory.length > 4 ? OVERLAYS_ENERGY_OUT_MULTI_TT[this.mTier] - : OVERLAYS_ENERGY_OUT_TT[this.mTier]) }; - } - return rTextures; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - return this.mTextures[side == facing ? 2 : side == ForgeDirection.UP ? 1 : 0][colorIndex + 1]; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_TeslaCoil(mName, mTier, mDescriptionArray, mTextures, mInventory.length); - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - if (!aBaseMetaTileEntity.isClientSide()) { - teslaSimpleNodeSetAdd(this); - generateTeslaNodeMap(this); - } - } - - @Override - public void onRemoval() { - super.onRemoval(); - if (!this.getBaseMetaTileEntity() - .isClientSide()) { - teslaSimpleNodeSetRemove(this); - } - } - - @Override - public void onUnload() { - if (!this.getBaseMetaTileEntity() - .isClientSide()) { - teslaSimpleNodeSetRemove(this); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - teslaSimpleNodeSetAdd(this); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isClientSide()) { - return; - } - - // Hysteresis based ePowerPass Config - long energyMax = getStoredEnergy()[1]; - long energyStored = getStoredEnergy()[0]; - float energyFrac = (float) energyStored / energyMax; - - // ePowerPass hist toggle - if (!powerPassToggle && energyFrac > histHigh) { - powerPassToggle = true; - } else if (powerPassToggle && energyFrac < histLow) { - powerPassToggle = false; - } - - // Send Power - powerTeslaNodeMap(this); - - // TODO Encapsulate the spark sender - sparkCount--; - if (sparkCount == 0) { - sparkCount = 10; - if (!sparkList.isEmpty()) { - NetworkDispatcher.INSTANCE.sendToAllAround( - new RendererMessage.RendererData(sparkList), - aBaseMetaTileEntity.getWorld().provider.dimensionId, - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - 256); - sparkList.clear(); - } - } - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isServerSide()) { - try { - EntityPlayerMP player = (EntityPlayerMP) aPlayer; - clientLocale = (String) FieldUtils.readField(player, "translator", true); - } catch (Exception e) { - clientLocale = "en_US"; - } - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - } - return true; - } - - @Override - public byte getTeslaReceptionCapability() { - return 1; - } - - @Override - public float getTeslaReceptionCoefficient() { - return 1; - } - - @Override - public Multimap getTeslaNodeMap() { - return teslaNodeMap; - } - - @Override - public HashSet getSparkList() { - return sparkList; - } - - @Override - public byte getTeslaTransmissionCapability() { - return 2; - } - - @Override - public int getTeslaTransmissionRange() { - return transferRadius; - } - - @Override - public boolean isOverdriveEnabled() { - return overdriveToggle; - } - - @Override - public int getTeslaEnergyLossPerBlock() { - return perBlockLoss; - } - - @Override - public float getTeslaOverdriveLossCoefficient() { - return overDriveLoss; - } - - @Override - public long getTeslaOutputVoltage() { - return outputVoltage; - } - - @Override - public long getTeslaOutputCurrent() { - return mBatteryCount; - } - - @Override - public boolean teslaDrainEnergy(long teslaVoltageDrained) { - if (getEUVar() < teslaVoltageDrained) { - return false; - } - - setEUVar(getEUVar() - teslaVoltageDrained); - return true; - } - - @Override - public boolean isTeslaReadyToReceive() { - return !this.powerPassToggle; - } - - @Override - public long getTeslaStoredEnergy() { - return getEUVar(); - } - - @Override - public Vec3Impl getTeslaPosition() { - return new Vec3Impl( - this.getBaseMetaTileEntity() - .getXCoord(), - this.getBaseMetaTileEntity() - .getYCoord(), - this.getBaseMetaTileEntity() - .getZCoord()); - } - - @Override - public Integer getTeslaDimension() { - return this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId; - } - - @Override - public boolean teslaInjectEnergy(long teslaVoltageInjected) { - return this.getBaseMetaTileEntity() - .injectEnergyUnits(ForgeDirection.UP, teslaVoltageInjected, 1L) > 0L; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_WetTransformer.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_WetTransformer.java deleted file mode 100644 index dfb43eca51..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_WetTransformer.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.github.technus.tectech.thing.metaTileEntity.single; - -import static gregtech.api.enums.GT_Values.V; -import static net.minecraft.util.StatCollector.translateToLocal; - -import com.github.technus.tectech.util.CommonValues; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -@Deprecated -public class GT_MetaTileEntity_WetTransformer extends GT_MetaTileEntity_TT_Transformer { - - public GT_MetaTileEntity_WetTransformer(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_WetTransformer(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public String[] getDescription() { - return new String[] { - translateToLocal("gt.blockmachines.wetransformer.tier." + (mTier > 9 ? "" : "0") + mTier + ".desc"), - "Accepts 16A and outputs 64A", CommonValues.TEC_MARK_GENERAL }; - } - - @Override - public long getMinimumStoredEU() { - return V[mTier + 1]; - } - - @Override - public long maxEUStore() { - return 512L + V[mTier + 1] * 128L; - } - - @Override - public long maxAmperesOut() { - return getBaseMetaTileEntity().isAllowedToWork() ? 64 : 16; - } - - @Override - public long maxAmperesIn() { - return getBaseMetaTileEntity().isAllowedToWork() ? 16 : 64; - } -} diff --git a/src/main/java/com/github/technus/tectech/thing/multiTileEntity/GodForge.java b/src/main/java/com/github/technus/tectech/thing/multiTileEntity/GodForge.java deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/main/java/com/github/technus/tectech/thing/tileEntity/ReactorSimTileEntity.java b/src/main/java/com/github/technus/tectech/thing/tileEntity/ReactorSimTileEntity.java deleted file mode 100644 index ac24686d6a..0000000000 --- a/src/main/java/com/github/technus/tectech/thing/tileEntity/ReactorSimTileEntity.java +++ /dev/null @@ -1,143 +0,0 @@ -package com.github.technus.tectech.thing.tileEntity; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import com.github.technus.tectech.Reference; - -import ic2.api.energy.event.EnergyTileUnloadEvent; -import ic2.core.IC2; -import ic2.core.block.reactor.tileentity.TileEntityNuclearReactorElectric; -import ic2.core.init.MainConfig; -import ic2.core.util.ConfigUtil; - -/** - * Created by danie_000 on 30.09.2017. - */ -public class ReactorSimTileEntity extends TileEntityNuclearReactorElectric { - - private boolean hadRedstone = true; - - @Override - public void onLoaded() { - super.onLoaded(); - if (IC2.platform.isSimulating() && addedToEnergyNet) { - MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this)); - // this.addedToEnergyNet = false; - } - } - - @Override - public void onUnloaded() { - addedToEnergyNet = false; - super.onUnloaded(); - } - - @Override - public String getInventoryName() { - return "Nuclear Reactor Simulator"; - } - - @Override - public boolean emitsEnergyTo(TileEntity receiver, ForgeDirection direction) { - return false; - } - - @Override - public double getOfferedEnergy() { - return 0; - } - - @Override - public double getReactorEUEnergyOutput() { - return getReactorEnergyOutput() * 5.0F - * ConfigUtil.getDouble(MainConfig.get(), "balance/energy/generator/nuclear"); - } - - @Override - protected void updateEntityServer() { - if (updateTicker++ % getTickRate() == 0) { - if (!worldObj.isRemote && worldObj.doChunksNearChunkExist(xCoord, yCoord, zCoord, 2)) { - if (hadRedstone && !receiveredstone()) { - hadRedstone = false; - } else if (!hadRedstone && receiveredstone()) { - doUpdates(); - hadRedstone = true; - } - markDirty(); - } - } - } - - @Override - public boolean calculateHeatEffects() { - if (heat >= 4000 && IC2.platform.isSimulating()) { - float power = (float) heat / (float) maxHeat; - if (power >= 1.0F) { - explode(); // ding - return true; - } else { - return false; - } - } - return false; - } - - // new method - private void doUpdates() { - heat = 0; - do { - dropAllUnfittingStuff(); - output = 0.0F; - maxHeat = 10000; - hem = 1.0F; - processChambers(); - } while (!calculateHeatEffects() && output > 0); - } - - @Override - public void explode() { - getWorld().playSoundEffect(xCoord, yCoord, zCoord, Reference.MODID + ":microwave_ding", 1, 1); - } - - @Override - public void addEmitHeat(int heat) {} - - @Override - public boolean isFluidCooled() { - return false; - } - - @Override - public boolean canFill(ForgeDirection from, Fluid fluid) { - return false; - } - - @Override - public boolean canDrain(ForgeDirection from, Fluid fluid) { - return false; - } - - @Override - public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { - return 0; - } - - @Override - public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { - return null; - } - - @Override - public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { - return null; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } -} diff --git a/src/main/java/com/github/technus/tectech/util/CommonValues.java b/src/main/java/com/github/technus/tectech/util/CommonValues.java deleted file mode 100644 index 3f9e3eabac..0000000000 --- a/src/main/java/com/github/technus/tectech/util/CommonValues.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.github.technus.tectech.util; - -import net.minecraft.util.EnumChatFormatting; - -/** - * Created by danie_000 on 11.01.2017. - */ -@SuppressWarnings("SpellCheckingInspection") -public final class CommonValues { - - public static final String TEC_MARK_SHORT = EnumChatFormatting.BLUE + "Tec" + EnumChatFormatting.DARK_BLUE + "Tech"; - public static final String TEC_MARK_GENERAL = TEC_MARK_SHORT + EnumChatFormatting.BLUE + ": Interdimensional"; - public static final String TEC_MARK_EM = TEC_MARK_SHORT + EnumChatFormatting.BLUE + ": Elemental Matter"; - public static final String THETA_MOVEMENT = TEC_MARK_SHORT + EnumChatFormatting.BLUE + ": Theta Movement"; - public static final String COSMIC_MARK = TEC_MARK_SHORT + EnumChatFormatting.BLUE + ": Cosmic"; - public static final String GODFORGE_MARK = TEC_MARK_SHORT + EnumChatFormatting.BLUE + ": Project Godforge"; - - public static final byte MOVE_AT = 4; // move stuff around - public static final byte RECIPE_AT = 6; // move stuff around - // - in case some hatches are not in multiblock structure - public static final byte MULTI_CHECK_AT = 12; // multiblock checks its state - public static final byte TRANSFER_AT = 16; - - public static final String[] EOH_TIER_FANCY_NAMES = { "Crude", "Primitive", "Stable", "Advanced", "Superb", - "Exotic", "Perfect", "Tipler", EnumChatFormatting.BOLD + "Gallifreyan" }; - - private CommonValues() {} -} diff --git a/src/main/java/com/github/technus/tectech/util/Converter.java b/src/main/java/com/github/technus/tectech/util/Converter.java deleted file mode 100644 index d0da11d405..0000000000 --- a/src/main/java/com/github/technus/tectech/util/Converter.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.github.technus.tectech.util; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; - -public final class Converter { - - private Converter() {} - - public static byte[] writeInts(int[] array) { - try { - ByteArrayOutputStream bos = new ByteArrayOutputStream(array.length * 4); - DataOutputStream dos = new DataOutputStream(bos); - for (int j : array) { - dos.writeInt(j); - } - - return bos.toByteArray(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public static int[] readInts(byte[] array) { - try { - ByteArrayInputStream bis = new ByteArrayInputStream(array); - DataInputStream dataInputStream = new DataInputStream(bis); - int size = array.length / Integer.BYTES; - int[] res = new int[size]; - for (int i = 0; i < size; i++) { - res[i] = dataInputStream.readInt(); - } - return res; - } catch (IOException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/main/java/com/github/technus/tectech/util/FluidStackLong.java b/src/main/java/com/github/technus/tectech/util/FluidStackLong.java deleted file mode 100644 index abd0134e85..0000000000 --- a/src/main/java/com/github/technus/tectech/util/FluidStackLong.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.github.technus.tectech.util; - -import net.minecraftforge.fluids.FluidStack; - -public class FluidStackLong { - - public final FluidStack fluidStack; - public long amount; - - public FluidStackLong(FluidStack fluidStack, long amount) { - this.fluidStack = fluidStack; - this.amount = amount; - } - - // Copy constructor. - public FluidStackLong(FluidStackLong fluidStackLong) { - this.fluidStack = fluidStackLong.fluidStack; - this.amount = fluidStackLong.amount; - } - - public long getFluidAmount() { - return amount; - } - - public FluidStack getRegularFluidStack(FluidStackLong fluidStackLong, int amount) { - return new FluidStack(fluidStackLong.fluidStack, amount); - } - -} diff --git a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java b/src/main/java/com/github/technus/tectech/util/GodforgeMath.java deleted file mode 100644 index 94b898a93b..0000000000 --- a/src/main/java/com/github/technus/tectech/util/GodforgeMath.java +++ /dev/null @@ -1,308 +0,0 @@ -package com.github.technus.tectech.util; - -import java.math.BigInteger; - -import com.github.technus.tectech.thing.metaTileEntity.multi.GT_MetaTileEntity_EM_ForgeOfGods; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_BaseModule; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_ExoticModule; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_MoltenModule; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_PlasmaModule; -import com.github.technus.tectech.thing.metaTileEntity.multi.godforge_modules.GT_MetaTileEntity_EM_SmeltingModule; - -public class GodforgeMath { - - public static int getRandomIntInRange(int min, int max) { - return (int) (Math.random() * (max - min)) + min; - } - - public static double calculateFuelConsumption(GT_MetaTileEntity_EM_ForgeOfGods godforge) { - double upgradeFactor = 1; - if (godforge.isUpgradeActive(2)) { - upgradeFactor = 0.8; - } - if (godforge.getFuelType() == 0) { - return Math - .max(godforge.getFuelFactor() * 300 * Math.pow(1.15, godforge.getFuelFactor()) * upgradeFactor, 1); - } - if (godforge.getFuelType() == 1) { - return Math.max(godforge.getFuelFactor() * 2 * Math.pow(1.08, godforge.getFuelFactor()) * upgradeFactor, 1); - } else return Math.max(godforge.getFuelFactor() / 25 * upgradeFactor, 1); - } - - public static int calculateStartupFuelConsumption(GT_MetaTileEntity_EM_ForgeOfGods godforge) { - return (int) Math.max(godforge.getFuelFactor() * 25 * Math.pow(1.2, godforge.getFuelFactor()), 1); - } - - public static int calculateMaxFuelFactor(GT_MetaTileEntity_EM_ForgeOfGods godforge) { - int fuelCap = 5; - if (godforge.isUpgradeActive(27)) { - fuelCap = Integer.MAX_VALUE; - } else { - if (godforge.isUpgradeActive(9)) { - fuelCap += godforge.getTotalActiveUpgrades(); - } - if (godforge.isUpgradeActive(3)) { - fuelCap *= 1.2; - } - } - return Math.max(fuelCap, 1); - } - - public static int calculateEffectiveFuelFactor(GT_MetaTileEntity_EM_ForgeOfGods godforge) { - int fuelFactor = godforge.getFuelFactor(); - if (fuelFactor <= 43) { - return fuelFactor; - } else { - return 43 + (int) Math.floor(Math.pow((fuelFactor - 43), 0.4)); - } - } - - public static void calculateMaxHeatForModules(GT_MetaTileEntity_EM_BaseModule module, - GT_MetaTileEntity_EM_ForgeOfGods godforge) { - double logBase = 1.5; - int baseHeat = 12601; - if (godforge.isUpgradeActive(12)) { - if (module instanceof GT_MetaTileEntity_EM_SmeltingModule) { - logBase = 1.12; - } else { - logBase = 1.18; - } - } - int recipeHeat = baseHeat + (int) (Math.log(godforge.getFuelFactor()) / Math.log(logBase) * 1000); - module.setHeatForOC(calculateOverclockHeat(module, godforge, recipeHeat)); - module.setHeat(recipeHeat); - } - - public static int calculateOverclockHeat(GT_MetaTileEntity_EM_BaseModule module, - GT_MetaTileEntity_EM_ForgeOfGods godforge, Integer recipeHeat) { - int actualHeat; - double exponent; - if (godforge.isUpgradeActive(20)) { - if (module instanceof GT_MetaTileEntity_EM_SmeltingModule) { - exponent = 0.85; - } else { - exponent = 0.8; - } - if (recipeHeat > 30000) { - actualHeat = (int) Math.floor(30000 + Math.pow(recipeHeat - 30000, exponent)); - } else { - actualHeat = recipeHeat; - } - } else if (godforge.isUpgradeActive(17)) { - actualHeat = Math.min(recipeHeat, 30000); - } else { - actualHeat = Math.min(recipeHeat, 15000); - } - return actualHeat; - } - - public static void calculateSpeedBonusForModules(GT_MetaTileEntity_EM_BaseModule module, - GT_MetaTileEntity_EM_ForgeOfGods godforge) { - double speedBonus = 1; - - if (godforge.isUpgradeActive(1)) { - speedBonus = Math.pow(module.getHeat(), -0.01); - } - - if (godforge.isUpgradeActive(22)) { - if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) { - speedBonus /= Math.pow(module.getMaxParallel(), 0.02); - } else { - speedBonus /= Math.pow(module.getMaxParallel(), 0.012); - } - } - - if (module instanceof GT_MetaTileEntity_EM_ExoticModule) { - if (godforge.isUpgradeActive(25)) { - speedBonus = Math.sqrt(speedBonus); - } else { - speedBonus = 1; - } - } - - module.setSpeedBonus((float) speedBonus); - } - - public static void calculateMaxParallelForModules(GT_MetaTileEntity_EM_BaseModule module, - GT_MetaTileEntity_EM_ForgeOfGods godforge) { - int baseParallel = 0; - float fuelFactorMultiplier = 1; - float heatMultiplier = 1; - float upgradeAmountMultiplier = 1; - int node53 = 1; - boolean isMoltenOrSmeltingWithUpgrade = false; - - if (module instanceof GT_MetaTileEntity_EM_SmeltingModule) { - baseParallel = 1024; - } - if (module instanceof GT_MetaTileEntity_EM_MoltenModule) { - baseParallel = 512; - } - if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) { - baseParallel = 384; - } - if (module instanceof GT_MetaTileEntity_EM_ExoticModule) { - baseParallel = 36; - } - - if (module instanceof GT_MetaTileEntity_EM_MoltenModule - || (module instanceof GT_MetaTileEntity_EM_SmeltingModule && godforge.isUpgradeActive(16))) { - isMoltenOrSmeltingWithUpgrade = true; - } - - if (godforge.isUpgradeActive(10)) { - node53 = 2; - } - - if (godforge.isUpgradeActive(6)) { - if (godforge.isUpgradeActive(13)) { - if (isMoltenOrSmeltingWithUpgrade) { - fuelFactorMultiplier = 1 + calculateEffectiveFuelFactor(godforge) / 15f * 3; - } else { - fuelFactorMultiplier = 1 + calculateEffectiveFuelFactor(godforge) / 15f * 2; - } - } else { - fuelFactorMultiplier = 1 + calculateEffectiveFuelFactor(godforge) / 15f; - } - } - - if (godforge.isUpgradeActive(18)) { - if (isMoltenOrSmeltingWithUpgrade) { - heatMultiplier = 1 + module.getHeat() / 15000f; - } else { - heatMultiplier = 1 + module.getHeat() / 25000f; - } - } - - if (godforge.isUpgradeActive(21)) { - if (isMoltenOrSmeltingWithUpgrade) { - upgradeAmountMultiplier = 1 + godforge.getTotalActiveUpgrades() / 5f; - } else { - upgradeAmountMultiplier = 1 + godforge.getTotalActiveUpgrades() / 8f; - } - } - - int maxParallel = (int) (baseParallel * node53 - * fuelFactorMultiplier - * heatMultiplier - * upgradeAmountMultiplier); - - if (module instanceof GT_MetaTileEntity_EM_ExoticModule) { - if (godforge.isUpgradeActive(25)) { - maxParallel = (int) Math.max(9 * Math.floor(Math.sqrt(maxParallel) / 9), 36); - } else { - maxParallel = baseParallel; - } - } - - module.setMaxParallel(maxParallel); - } - - public static void calculateEnergyDiscountForModules(GT_MetaTileEntity_EM_BaseModule module, - GT_MetaTileEntity_EM_ForgeOfGods godforge) { - double fillRatioDiscount = 1; - double maxBatteryDiscount = 1; - - if (godforge.isUpgradeActive(8)) { - maxBatteryDiscount = 1 - (1 - Math.pow(1.001, -0.01 * godforge.getMaxBatteryCharge())) / 20; - } - - if (godforge.isUpgradeActive(19)) { - double fillRatioMinusZeroPointFive = (double) godforge.getBatteryCharge() / godforge.getMaxBatteryCharge() - - 0.5; - if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) { - fillRatioDiscount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15); - } else { - fillRatioDiscount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15) * 2 / 3; - } - } - - if (module instanceof GT_MetaTileEntity_EM_ExoticModule) { - if (!godforge.isUpgradeActive(25)) { - fillRatioDiscount = 1; - maxBatteryDiscount = 1; - } else { - fillRatioDiscount = Math.sqrt(fillRatioDiscount); - maxBatteryDiscount = Math.sqrt(maxBatteryDiscount); - } - } - - module.setEnergyDiscount((float) (fillRatioDiscount * maxBatteryDiscount)); - } - - public static void calculateProcessingVoltageForModules(GT_MetaTileEntity_EM_BaseModule module, - GT_MetaTileEntity_EM_ForgeOfGods godforge) { - long voltage = Integer.MAX_VALUE; - - if (godforge.isUpgradeActive(4)) { - voltage += calculateEffectiveFuelFactor(godforge) * 100_000_000L; - } - - if (godforge.isUpgradeActive(23)) { - voltage *= Math.pow(4, godforge.getRingAmount()); - } - - module.setProcessingVoltage(voltage); - } - - public static void setMiscModuleParameters(GT_MetaTileEntity_EM_BaseModule module, - GT_MetaTileEntity_EM_ForgeOfGods godforge) { - int plasmaTier = 0; - double overclockTimeFactor = 2; - - if (godforge.isUpgradeActive(30)) { - plasmaTier = 2; - } else if (godforge.isUpgradeActive(24)) { - plasmaTier = 1; - } - - if (godforge.isUpgradeActive(14)) { - if (module instanceof GT_MetaTileEntity_EM_PlasmaModule) { - overclockTimeFactor = 2.3; - } else { - overclockTimeFactor = 2.15; - } - if (module instanceof GT_MetaTileEntity_EM_ExoticModule) { - if (godforge.isUpgradeActive(25)) { - overclockTimeFactor = 2 + Math.pow(overclockTimeFactor - 2, 2); - } else { - overclockTimeFactor = 2; - } - } - } - - module.setUpgrade83(godforge.isUpgradeActive(19)); - module.setMultiStepPlasma(godforge.isUpgradeActive(15)); - module.setPlasmaTier(plasmaTier); - module.setMagmatterCapable(godforge.isUpgradeActive(30)); - module.setVoltageConfig(godforge.isUpgradeActive(28)); - module.setOverclockTimeFactor(overclockTimeFactor); - } - - public static boolean allowModuleConnection(GT_MetaTileEntity_EM_BaseModule module, - GT_MetaTileEntity_EM_ForgeOfGods godforge) { - - if (module instanceof GT_MetaTileEntity_EM_MoltenModule && godforge.isUpgradeActive(5)) { - return true; - } - - if (module instanceof GT_MetaTileEntity_EM_PlasmaModule && godforge.isUpgradeActive(7)) { - return true; - } - - if (module instanceof GT_MetaTileEntity_EM_ExoticModule && godforge.isUpgradeActive(11)) { - return true; - } - - return module instanceof GT_MetaTileEntity_EM_SmeltingModule; - } - - public static void queryMilestoneStats(GT_MetaTileEntity_EM_BaseModule module, - GT_MetaTileEntity_EM_ForgeOfGods godforge) { - godforge.addTotalPowerConsumed(module.getPowerTally()); - module.setPowerTally(BigInteger.ZERO); - godforge.addTotalRecipesProcessed(module.getRecipeTally()); - module.setRecipeTally(0); - - } -} diff --git a/src/main/java/com/github/technus/tectech/util/ItemStackLong.java b/src/main/java/com/github/technus/tectech/util/ItemStackLong.java deleted file mode 100644 index 94b5dcb88a..0000000000 --- a/src/main/java/com/github/technus/tectech/util/ItemStackLong.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.github.technus.tectech.util; - -import net.minecraft.item.ItemStack; - -public class ItemStackLong { - - public final ItemStack itemStack; - public long stackSize; - - public ItemStackLong(ItemStack itemStack, long stackSize) { - this.itemStack = itemStack; - this.stackSize = stackSize; - } - - // Copy constructor. - public ItemStackLong(ItemStackLong itemStackLong) { - this.itemStack = itemStackLong.itemStack; - this.stackSize = itemStackLong.stackSize; - } - - public long getStackSize() { - return stackSize; - } - - public long compareTo(ItemStackLong itemStackLong) { - return (stackSize - itemStackLong.stackSize); - } -} diff --git a/src/main/java/com/github/technus/tectech/util/TT_Utility.java b/src/main/java/com/github/technus/tectech/util/TT_Utility.java deleted file mode 100644 index b0b6a2c396..0000000000 --- a/src/main/java/com/github/technus/tectech/util/TT_Utility.java +++ /dev/null @@ -1,188 +0,0 @@ -package com.github.technus.tectech.util; - -import static gregtech.api.enums.GT_Values.V; - -import java.lang.reflect.Field; -import java.math.BigInteger; -import java.util.Formatter; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -import net.minecraft.item.ItemStack; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; - -/** - * Created by Tec on 21.03.2017. - */ -public final class TT_Utility { - - private TT_Utility() {} - - private static final StringBuilder STRING_BUILDER = new StringBuilder(); - private static final Map FORMATTER_MAP = new HashMap<>(); - - private static Formatter getFormatter() { - STRING_BUILDER.setLength(0); - return FORMATTER_MAP.computeIfAbsent( - Locale.getDefault(Locale.Category.FORMAT), - locale -> new Formatter(STRING_BUILDER, locale)); - } - - public static String formatNumberExp(double value) { - return getFormatter().format("%+.5E", value) - .toString(); - } - - public static String toExponentForm(BigInteger number) { - BigInteger abs = number.abs(); - String strNum = abs.toString(); - int exponent = strNum.length() - 1; - return (number.signum() == -1 ? "-" : "") + strNum.charAt(0) + "." + strNum.substring(1, 3) + "e" + exponent; - - } - - public static int bitStringToInt(String bits) { - if (bits == null) { - return 0; - } - if (bits.length() > 32) { - throw new NumberFormatException("Too long!"); - } - return Integer.parseInt(bits, 2); - } - - public static int hexStringToInt(String hex) { - if (hex == null) { - return 0; - } - if (hex.length() > 8) { - throw new NumberFormatException("Too long!"); - } - return Integer.parseInt(hex, 16); - } - - public static double stringToDouble(String str) { - if (str == null) { - return 0; - } - return Double.parseDouble(str); - } - - public static String longBitsToShortString(long number) { - StringBuilder result = new StringBuilder(71); - - for (int i = 63; i >= 0; i--) { - long mask = 1L << i; - result.append((number & mask) != 0 ? ":" : "."); - - if (i % 8 == 0) { - result.append('|'); - } - } - result.replace(result.length() - 1, result.length(), ""); - - return result.toString(); - } - - public static float map(float x, float in_min, float in_max, float out_min, float out_max) { - return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; - } - - public static String getUniqueIdentifier(ItemStack is) { - return GameRegistry.findUniqueIdentifierFor(is.getItem()).modId + ':' + is.getUnlocalizedName(); - } - - public static byte getTier(long l) { - byte b = -1; - - do { - ++b; - if (b >= V.length) { - return b; - } - } while (l > V[b]); - - return b; - } - - public static void setTier(int tier, Object me) { - try { - Field field = GT_MetaTileEntity_TieredMachineBlock.class.getField("mTier"); - field.setAccessible(true); - field.set(me, (byte) tier); - } catch (Exception e) { - // e.printStackTrace(); - } - } - - @Deprecated - public static double receiveDouble(double previousValue, int startIndex, int index, int value) { - return Double.longBitsToDouble(receiveLong(Double.doubleToLongBits(previousValue), startIndex, index, value)); - } - - public static long receiveLong(long previousValue, int startIndex, int index, int value) { - value &= 0xFFFF; - switch (index - startIndex) { - case 0 -> { - previousValue &= 0xFFFF_FFFF_FFFF_0000L; - previousValue |= value; - } - case 1 -> { - previousValue &= 0xFFFF_FFFF_0000_FFFFL; - previousValue |= (long) value << 16; - } - case 2 -> { - previousValue &= 0xFFFF_0000_FFFF_FFFFL; - previousValue |= (long) value << 32; - } - case 3 -> { - previousValue &= 0x0000_FFFF_FFFF_FFFFL; - previousValue |= (long) value << 48; - } - } - return previousValue; - } - - @Deprecated - public static float receiveFloat(float previousValue, int startIndex, int index, int value) { - return Float.intBitsToFloat(receiveInteger(Float.floatToIntBits(previousValue), startIndex, index, value)); - } - - public static int receiveInteger(int previousValue, int startIndex, int index, int value) { - value &= 0xFFFF; - switch (index - startIndex) { - case 0 -> { - previousValue &= 0xFFFF_0000; - previousValue |= value; - } - case 1 -> { - previousValue &= 0x0000_FFFF; - previousValue |= value << 16; - } - } - return previousValue; - } - - public static String[][] appendStringArrays(String[][] firstArray, String[][] secondArray) { - int totalLength = firstArray.length + secondArray.length; - String[][] resultArray = new String[totalLength][]; - - System.arraycopy(firstArray, 0, resultArray, 0, firstArray.length); - System.arraycopy(secondArray, 0, resultArray, firstArray.length, secondArray.length); - return resultArray; - } - - public static String[][] replaceLetters(String[][] array, String replacement) { - String[][] outputArray = new String[array.length][]; - for (int i = 0; i < array.length; i++) { - outputArray[i] = new String[array[i].length]; - for (int j = 0; j < array[i].length; j++) { - outputArray[i][j] = array[i][j].replaceAll("[A-Z]", replacement); - } - } - return outputArray; - } -} diff --git a/src/main/java/common/Blocks.java b/src/main/java/common/Blocks.java deleted file mode 100644 index ffab6a0716..0000000000 --- a/src/main/java/common/Blocks.java +++ /dev/null @@ -1,62 +0,0 @@ -package common; - -import net.minecraft.block.Block; - -import common.blocks.Block_GDCUnit; -import common.blocks.Block_IchorJar; -import common.blocks.Block_LapotronicEnergyUnit; -import common.blocks.Block_LargeHexPlate; -import common.blocks.Block_TFFTStorageField; -import common.blocks.Block_ThaumiumReinforcedJar; -import common.blocks.Block_YSZUnit; - -import gregtech.api.enums.Mods; -import kekztech.KekzCore; - -public class Blocks { - - public static Block yszUnit; - public static Block gdcUnit; - public static Block tfftStorageField; - public static Block jarThaumiumReinforced; - public static Block jarIchor; - public static Block lscLapotronicEnergyUnit; - - public static Block largeHexPlate; - - public static void preInit() { - KekzCore.LOGGER.info("Registering blocks..."); - - registerBlocks_SOFC(); - registerBlocks_TFFT(); - if (Mods.Thaumcraft.isModLoaded()) { - registerBlocks_Jars(); - } - registerBlocks_LSC(); - registerBlocks_Cosmetics(); - - KekzCore.LOGGER.info("Finished registering blocks"); - } - - private static void registerBlocks_SOFC() { - yszUnit = Block_YSZUnit.registerBlock(); - gdcUnit = Block_GDCUnit.registerBlock(); - } - - private static void registerBlocks_TFFT() { - tfftStorageField = Block_TFFTStorageField.registerBlock(); - } - - private static void registerBlocks_Jars() { - jarThaumiumReinforced = Block_ThaumiumReinforcedJar.registerBlock(); - jarIchor = Block_IchorJar.registerBlock(); - } - - private static void registerBlocks_LSC() { - lscLapotronicEnergyUnit = Block_LapotronicEnergyUnit.registerBlock(); - } - - private static void registerBlocks_Cosmetics() { - largeHexPlate = Block_LargeHexPlate.registerBlock(); - } -} diff --git a/src/main/java/common/CommonProxy.java b/src/main/java/common/CommonProxy.java deleted file mode 100644 index 0687f109be..0000000000 --- a/src/main/java/common/CommonProxy.java +++ /dev/null @@ -1,47 +0,0 @@ -package common; - -import common.items.ErrorItem; -import common.items.MetaItem_CraftingComponent; -import common.tileentities.GTMTE_TFFTHatch; - -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import gregtech.api.enums.Mods; -import kekztech.Items; - -public class CommonProxy { - - public void preInit(final FMLPreInitializationEvent e) { - // Items - ErrorItem.getInstance() - .registerItem(); - MetaItem_CraftingComponent.getInstance() - .registerItem(); - Items.registerOreDictNames(); - // Blocks - Blocks.preInit(); - // TileEntities - TileEntities.preInit(); - if (Mods.Thaumcraft.isModLoaded() && Mods.ThaumicTinkerer.isModLoaded()) { - // TC Research - Researches.preInit(); - } - } - - public void init(final FMLInitializationEvent e) { - // GregTech Meta TileEntities - TileEntities.init(); - } - - public void postInit(final FMLPostInitializationEvent e) { - // Recipes - Recipes.postInit(); - if (Mods.Thaumcraft.isModLoaded() && Mods.ThaumicTinkerer.isModLoaded()) { - // Research - Researches.postInit(); - } - - GTMTE_TFFTHatch.registerAEIntegration(); - } -} diff --git a/src/main/java/common/Recipes.java b/src/main/java/common/Recipes.java deleted file mode 100644 index ba8876ff2e..0000000000 --- a/src/main/java/common/Recipes.java +++ /dev/null @@ -1,144 +0,0 @@ -package common; - -import static gregtech.api.enums.Mods.ThaumicTinkerer; - -import java.util.HashMap; - -import net.minecraft.item.ItemStack; - -import common.recipeLoaders.AlloySmelter; -import common.recipeLoaders.Assembler; -import common.recipeLoaders.AssemblyLine; -import common.recipeLoaders.ChemicalReactor; -import common.recipeLoaders.Crafting; -import common.recipeLoaders.FormingPress; -import common.recipeLoaders.Mixer; -import common.recipeLoaders.ResearchableAssemblyLine; -import common.recipeLoaders.Unpackager; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Mods; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import kekztech.KekzCore; -import thaumcraft.api.ItemApi; -import thaumcraft.api.ThaumcraftApi; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.crafting.InfusionRecipe; - -public class Recipes { - - public static final HashMap infusionRecipes = new HashMap<>(); - - public static void postInit() { - KekzCore.LOGGER.info("Registering recipes..."); - - new AlloySmelter().run(); - new Assembler().run(); - new AssemblyLine().run(); - new ChemicalReactor().run(); - new Crafting().run(); - new FormingPress().run(); - new Mixer().run(); - new ResearchableAssemblyLine().run(); - new Unpackager().run(); - - if (Mods.Thaumcraft.isModLoaded()) { - registerRecipes_Jars(); - } - - KekzCore.LOGGER.info("Finished registering recipes"); - } - - private static void registerRecipes_Jars() { - - // Thaumium Reinforced Jar - final ItemStack[] recipe_jarthaumiumreinforced = { - GameRegistry.makeItemStack("Thaumcraft:ItemResource", 15, 1, null), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1), - new ItemStack(net.minecraft.init.Blocks.glass_pane), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1), - new ItemStack(net.minecraft.init.Blocks.glass_pane), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1), - new ItemStack(net.minecraft.init.Blocks.glass_pane), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1), - new ItemStack(net.minecraft.init.Blocks.glass_pane), }; - final AspectList aspects_jarthaumiumreinforced = new AspectList().add(Aspect.ARMOR, 64) - .add(Aspect.ORDER, 32) - .add(Aspect.WATER, 32) - .add(Aspect.GREED, 16) - .add(Aspect.VOID, 16) - .add(Aspect.AIR, 8); - infusionRecipes.put( - "THAUMIUMREINFORCEDJAR", - ThaumcraftApi.addInfusionCraftingRecipe( - "THAUMIUMREINFORCEDJAR", - new ItemStack(Blocks.jarThaumiumReinforced, 1, 0), - 5, - aspects_jarthaumiumreinforced, - ItemApi.getBlock("blockJar", 0), - recipe_jarthaumiumreinforced)); - // Thaumium Reinforced Void Jar - final ItemStack[] recipe_voidjarupgrade = { - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Obsidian, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.EnderEye, 1), ItemApi.getItem("itemNugget", 5) }; - final AspectList aspects_voidjarupgrade = new AspectList().add(Aspect.VOID, 14) - .add(Aspect.MAGIC, 14) - .add(Aspect.ENTROPY, 14) - .add(Aspect.WATER, 14); - infusionRecipes.put( - "THAUMIUMREINFORCEDVOIDJAR", - ThaumcraftApi.addInfusionCraftingRecipe( - "THAUMIUMREINFORCEDJAR", - new ItemStack(Blocks.jarThaumiumReinforced, 1, 3), - 2, - aspects_voidjarupgrade, - new ItemStack(Blocks.jarThaumiumReinforced, 1, 0), - recipe_voidjarupgrade)); - - final ItemStack[] recipe_jarichor = { GT_ModHandler.getModItem(ThaumicTinkerer.ID, "kamiResource", 1, 0), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1), - new ItemStack(net.minecraft.init.Blocks.glass_pane), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Osmiridium, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1), - new ItemStack(net.minecraft.init.Blocks.glass_pane), - GT_OreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Diamond, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1), - new ItemStack(net.minecraft.init.Blocks.glass_pane), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Osmiridium, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1), - new ItemStack(net.minecraft.init.Blocks.glass_pane), }; - final AspectList aspects_jarichor = new AspectList().add(Aspect.ARMOR, 256) - .add(Aspect.ELDRITCH, 128) - .add(Aspect.ORDER, 128) - .add(Aspect.WATER, 128) - .add(Aspect.GREED, 64) - .add(Aspect.VOID, 64) - .add(Aspect.AIR, 32); - infusionRecipes.put( - "ICHORJAR", - ThaumcraftApi.addInfusionCraftingRecipe( - "ICHORJAR", - new ItemStack(Blocks.jarIchor, 1, 0), - 15, - aspects_jarichor, - ItemApi.getBlock("blockJar", 0), - recipe_jarichor)); - // Ichor Void Jar - infusionRecipes.put( - "ICHORVOIDJAR", - ThaumcraftApi.addInfusionCraftingRecipe( - "ICHORJAR", - new ItemStack(Blocks.jarIchor, 1, 3), - 5, - aspects_voidjarupgrade, - new ItemStack(Blocks.jarIchor, 1, 0), - recipe_voidjarupgrade)); - } - -} diff --git a/src/main/java/common/Researches.java b/src/main/java/common/Researches.java deleted file mode 100644 index 0ebe161da4..0000000000 --- a/src/main/java/common/Researches.java +++ /dev/null @@ -1,71 +0,0 @@ -package common; - -import net.minecraft.item.ItemStack; - -import kekztech.KekzCore; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.research.ResearchItem; -import thaumcraft.api.research.ResearchPage; -import thaumic.tinkerer.common.research.KamiResearchItem; - -public class Researches { - - public static final String THAUMIUMREINFORCEDJAR = "THAUMIUMREINFORCEDJAR"; - public static final String ICHORJAR = "ICHORJAR"; - - public static void preInit() { - // Blacklist these researches from being a requirement to unlock TTKami - KekzCore.LOGGER.info("Blacklisting research " + THAUMIUMREINFORCEDJAR + " from /iskamiunlocked"); - KamiResearchItem.Blacklist.add(ICHORJAR); - KekzCore.LOGGER.info("Blacklisting research" + ICHORJAR + "from /iskamiunlocked"); - KamiResearchItem.Blacklist.add(ICHORJAR); - } - - public static void postInit() { - final AspectList aspects_jarthaumiumreinforced = new AspectList().add(Aspect.ARMOR, 3) - .add(Aspect.WATER, 3) - .add(Aspect.GREED, 3) - .add(Aspect.VOID, 3); - @SuppressWarnings("unused") - final ResearchItem jar_thaumiumreinforced = new ResearchItem( - "THAUMIUMREINFORCEDJAR", - "ALCHEMY", - aspects_jarthaumiumreinforced, - 3, - -4, - 2, - new ItemStack(Blocks.jarThaumiumReinforced, 1)) - .setPages( - new ResearchPage("kekztech.research_page.THAUMIUMREINFORCEDJAR.0"), - new ResearchPage(Recipes.infusionRecipes.get("THAUMIUMREINFORCEDJAR")), - new ResearchPage(Recipes.infusionRecipes.get("THAUMIUMREINFORCEDVOIDJAR")), - new ResearchPage("kekztech.research_page.THAUMIUMREINFORCEDJAR.1")) - .setConcealed() - .setParents("JARLABEL") - .registerResearchItem(); - - final AspectList aspects_jarichor = new AspectList().add(Aspect.ARMOR, 3) - .add(Aspect.ELDRITCH, 3) - .add(Aspect.WATER, 3) - .add(Aspect.GREED, 5) - .add(Aspect.VOID, 5); - @SuppressWarnings("unused") - final ResearchItem jar_ichor = new ResearchItem( - "ICHORJAR", - "ALCHEMY", - aspects_jarichor, - 2, - -5, - 3, - new ItemStack(Blocks.jarIchor, 1)) - .setPages( - new ResearchPage("kekztech.research_page.ICHORJAR.0"), - new ResearchPage(Recipes.infusionRecipes.get("ICHORJAR")), - new ResearchPage(Recipes.infusionRecipes.get("ICHORVOIDJAR"))) - .setConcealed() - .setParents("THAUMIUMREINFORCEDJAR") - .setParentsHidden("ICHOR") - .registerResearchItem(); - } -} diff --git a/src/main/java/common/TileEntities.java b/src/main/java/common/TileEntities.java deleted file mode 100644 index 8d1b288c7c..0000000000 --- a/src/main/java/common/TileEntities.java +++ /dev/null @@ -1,56 +0,0 @@ -package common; - -import common.tileentities.GTMTE_LapotronicSuperCapacitor; -import common.tileentities.GTMTE_SOFuelCellMK1; -import common.tileentities.GTMTE_SOFuelCellMK2; -import common.tileentities.GTMTE_TFFT; -import common.tileentities.GTMTE_TFFTHatch; -import common.tileentities.TE_IchorJar; -import common.tileentities.TE_IchorVoidJar; -import common.tileentities.TE_ThaumiumReinforcedJar; -import common.tileentities.TE_ThaumiumReinforcedVoidJar; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.MetaTileEntityIDs; -import gregtech.api.enums.Mods; - -public class TileEntities { - - // Multiblock controllers - public static GTMTE_SOFuelCellMK1 sofc1; - public static GTMTE_SOFuelCellMK2 sofc2; - public static GTMTE_TFFT tfft; - public static GTMTE_LapotronicSuperCapacitor lsc; - - // Singleblocks - public static GTMTE_TFFTHatch tfftHatch; - - public static void preInit() { - if (Mods.Thaumcraft.isModLoaded()) { - GameRegistry.registerTileEntity(TE_ThaumiumReinforcedJar.class, "kekztech_thaumiumreinforcedjar"); - GameRegistry.registerTileEntity(TE_ThaumiumReinforcedVoidJar.class, "kekztech_thaumiumreinforcedvoidjar"); - GameRegistry.registerTileEntity(TE_IchorJar.class, "kekztech_ichorjar"); - GameRegistry.registerTileEntity(TE_IchorVoidJar.class, "kekztech_ichorvoidjar"); - } - } - - public static void init() { - // Multiblock controllers - sofc1 = new GTMTE_SOFuelCellMK1( - MetaTileEntityIDs.sofc1.ID, - "multimachine.fuelcellmk1", - "Solid-Oxide Fuel Cell Mk I"); - sofc2 = new GTMTE_SOFuelCellMK2( - MetaTileEntityIDs.sofc2.ID, - "multimachine.fuelcellmk2", - "Solid-Oxide Fuel Cell Mk II"); - tfft = new GTMTE_TFFT(MetaTileEntityIDs.tfft.ID, "multimachine.tfft", "T.F.F.T"); - lsc = new GTMTE_LapotronicSuperCapacitor( - MetaTileEntityIDs.lsc.ID, - "multimachine.supercapacitor", - "Lapotronic Supercapacitor"); - - // Singleblocks - tfftHatch = new GTMTE_TFFTHatch(MetaTileEntityIDs.tfftHatch.ID, "machine.tffthatch", "T.F.F.T Multi I/O Hatch"); - } -} diff --git a/src/main/java/common/blocks/BaseGTUpdateableBlock.java b/src/main/java/common/blocks/BaseGTUpdateableBlock.java deleted file mode 100644 index ff38365d79..0000000000 --- a/src/main/java/common/blocks/BaseGTUpdateableBlock.java +++ /dev/null @@ -1,57 +0,0 @@ -package common.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import gregtech.api.GregTech_API; - -/** - * Any blocks that are used as structure parts for GregTech multi machines have to inherit from this class. Otherwise - * the checkMachine() method that verifies a machine's structure won't be called correctly. - */ -public abstract class BaseGTUpdateableBlock extends Block { - - protected BaseGTUpdateableBlock(Material material) { - super(material); - GregTech_API.registerMachineBlock(this, -1); - super.setHarvestLevel("wrench", 2); - } - - @Override - public int damageDropped(int meta) { - return meta; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { - return false; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - if (GregTech_API.isMachineBlock(this, aMetaData)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } -} diff --git a/src/main/java/common/blocks/Block_GDCUnit.java b/src/main/java/common/blocks/Block_GDCUnit.java deleted file mode 100644 index 27bc95759d..0000000000 --- a/src/main/java/common/blocks/Block_GDCUnit.java +++ /dev/null @@ -1,29 +0,0 @@ -package common.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; - -import cpw.mods.fml.common.registry.GameRegistry; -import kekztech.KekzCore; - -public class Block_GDCUnit extends BaseGTUpdateableBlock { - - private static final Block_GDCUnit instance = new Block_GDCUnit(); - - private Block_GDCUnit() { - super(Material.iron); - } - - public static Block registerBlock() { - final String blockName = "kekztech_gdcceramicelectrolyteunit_block"; - instance.setBlockName(blockName); - instance.setCreativeTab(CreativeTabs.tabMisc); - instance.setBlockTextureName(KekzCore.MODID + ":" + "GDCCeramicElectrolyteUnit"); - instance.setHardness(5.0f); - instance.setResistance(6.0f); - GameRegistry.registerBlock(instance, blockName); - - return instance; - } -} diff --git a/src/main/java/common/blocks/Block_IchorJar.java b/src/main/java/common/blocks/Block_IchorJar.java deleted file mode 100644 index a82f9862f0..0000000000 --- a/src/main/java/common/blocks/Block_IchorJar.java +++ /dev/null @@ -1,230 +0,0 @@ -package common.blocks; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.Explosion; -import net.minecraft.world.World; - -import common.itemBlocks.IB_IchorJar; -import common.tileentities.TE_IchorJar; -import common.tileentities.TE_IchorVoidJar; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.common.blocks.BlockJar; -import thaumcraft.common.config.ConfigBlocks; -import thaumcraft.common.config.ConfigItems; -import thaumcraft.common.items.ItemEssence; -import thaumcraft.common.tiles.TileJarFillable; - -public class Block_IchorJar extends BlockJar { - - private static final Block_IchorJar INSTANCE = new Block_IchorJar(); - - private Block_IchorJar() { - super(); - - super.setHardness(12.0F); - super.setResistance(3.0f); - } - - public static Block registerBlock() { - final String blockName = "kekztech_ichorjar_block"; - INSTANCE.setBlockName(blockName); - INSTANCE.setHarvestLevel("pickaxe", 3); - GameRegistry.registerBlock(INSTANCE, IB_IchorJar.class, blockName); - - return INSTANCE; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister ir) { - super.iconLiquid = ir.registerIcon("thaumcraft:animatedglow"); - super.iconJarSide = ir.registerIcon("kekztech:ichor_jar_side"); - super.iconJarTop = ir.registerIcon("kekztech:ichor_jar_top"); - super.iconJarTopVoid = ir.registerIcon("kekztech:ichor_jar_top_void"); - super.iconJarSideVoid = ir.registerIcon("kekztech:ichor_jar_side_void"); - super.iconJarBottom = ir.registerIcon("kekztech:ichor_jar_bottom"); - } - - @Override - @SideOnly(Side.CLIENT) - @SuppressWarnings({ "unchecked" }) - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) { - par3List.add(new ItemStack(par1, 1, 0)); // Normal jar - par3List.add(new ItemStack(par1, 1, 3)); // Void jar - } - - @Override - public TileEntity createTileEntity(World world, int meta) { - if (meta == 3) { - return new TE_IchorVoidJar(); - } else { - return new TE_IchorJar(); - } - } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float f1, float f2, - float f3) { - // Call parent method to handle jar emptying, labels stuff etc - super.onBlockActivated(world, x, y, z, player, side, f1, f2, f3); - // Interact with Essentia Phials if the player holds one - final ItemStack heldItem = player.getHeldItem(); - if (heldItem != null && heldItem.getItem() == ConfigItems.itemEssence) { - final TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof TE_IchorJar) { - return dealWithPhial(world, player, x, y, z); - } else if (te instanceof TE_IchorVoidJar) { - return dealWithPhial(world, player, x, y, z); - } - } - - return true; - } - - /** - * Handle compatibility with Essentia Phials - * - * @param world Pass through from onBlockActivated() - * @param player Pass through from onBlockActivated() - * @param x Pass through from onBlockActivated() - * @param y Pass through from onBlockActivated() - * @param z Pass through from onBlockActivated() - * @return Not sure tbh - */ - private boolean dealWithPhial(World world, EntityPlayer player, int x, int y, int z) { - final TileJarFillable jarTE = (TileJarFillable) world.getTileEntity(x, y, z); - final ItemStack heldItem = player.getHeldItem(); - // Check whether to fill or to drain the phial - if (heldItem.getItemDamage() == 0) { - if (jarTE.amount >= 8) { - if (world.isRemote) { - player.swingItem(); - return false; - } - - final Aspect jarAspect = Aspect.getAspect(jarTE.aspect.getTag()); - if (jarTE.takeFromContainer(jarAspect, 8)) { - // Take an empty phial from the player's inventory - heldItem.stackSize--; - // Fill a new phial - final ItemStack filledPhial = new ItemStack(ConfigItems.itemEssence, 1, 1); - final AspectList phialContent = new AspectList().add(jarAspect, 8); - ((ItemEssence) ConfigItems.itemEssence).setAspects(filledPhial, phialContent); - // Drop on ground if there's no inventory space - if (!player.inventory.addItemStackToInventory(filledPhial)) { - world.spawnEntityInWorld( - new EntityItem(world, (float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F, filledPhial)); - } - - world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); - player.inventoryContainer.detectAndSendChanges(); - return true; - } - } - } else { - final AspectList phialContent = ((ItemEssence) ConfigItems.itemEssence).getAspects(heldItem); - if (phialContent != null && phialContent.size() == 1) { - final Aspect phialAspect = phialContent.getAspects()[0]; - if (jarTE.amount + 8 <= jarTE.maxAmount && jarTE.doesContainerAccept(phialAspect)) { - if (world.isRemote) { - player.swingItem(); - return false; - } - - if (jarTE.addToContainer(phialAspect, 8) == 0) { - world.markBlockForUpdate(x, y, z); - jarTE.markDirty(); - heldItem.stackSize--; - // Drop on ground if there's no inventory space - if (!player.inventory.addItemStackToInventory(new ItemStack(ConfigItems.itemEssence, 1, 0))) { - world.spawnEntityInWorld( - new EntityItem( - world, - (float) x + 0.5F, - (float) y + 0.5F, - (float) z + 0.5F, - new ItemStack(ConfigItems.itemEssence, 1, 0))); - } - - world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); - player.inventoryContainer.detectAndSendChanges(); - return true; - } - } - } - } - - return true; - } - - @Override - public void breakBlock(World world, int x, int y, int z, Block par5, int par6) { - final TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof TE_IchorJar) { - final TE_IchorJar ite = (TE_IchorJar) te; - breakBlockWarpy(world, x, y, z, ite.amount, 200, 6.0F); - } else if (te instanceof TE_IchorVoidJar) { - final TE_IchorVoidJar ite = (TE_IchorVoidJar) te; - breakBlockWarpy(world, x, y, z, ite.amount, 200, 6.0F); - } - super.breakBlock(world, x, y, z, par5, par6); - } - - private void breakBlockWarpy(World world, int x, int y, int z, int fillAmount, int iterations, - float explosionStrength) { - if (fillAmount > 0) { - // Create a decent explosion in the center of the block (TNT has strength 4.0F) - world.createExplosion(null, x + 0.5D, y + 0.5D, z + 0.5D, explosionStrength, false); - - // Place a lot of Flux in the area - final int limit = fillAmount / 16; - int created = 0; - for (int i = 0; i < iterations; i++) { - final int xf = x + world.rand.nextInt(7) - world.rand.nextInt(7); - final int yf = x + world.rand.nextInt(7) - world.rand.nextInt(7); - final int zf = x + world.rand.nextInt(7) - world.rand.nextInt(7); - if (world.isAirBlock(xf, yf, zf)) { - if (yf > y) { - world.setBlock(xf, yf, zf, ConfigBlocks.blockFluxGas, 8, 3); - } else { - world.setBlock(xf, yf, zf, ConfigBlocks.blockFluxGoo, 8, 3); - } - - if (created++ > limit) { - break; - } - } - } - } - } - - @Override - public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { - return new ArrayList<>(Collections.singleton(new ItemStack(this, 1, (meta == 3) ? 3 : 0))); - } - - @Override - public void onBlockHarvested(World par1World, int par2, int par3, int par4, int par5, - EntityPlayer par6EntityPlayer) {} - - @Override - public boolean canDropFromExplosion(Explosion e) { - return false; - } -} diff --git a/src/main/java/common/blocks/Block_LapotronicEnergyUnit.java b/src/main/java/common/blocks/Block_LapotronicEnergyUnit.java deleted file mode 100644 index 653c99216b..0000000000 --- a/src/main/java/common/blocks/Block_LapotronicEnergyUnit.java +++ /dev/null @@ -1,173 +0,0 @@ -package common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; - -import common.itemBlocks.IB_LapotronicEnergyUnit; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class Block_LapotronicEnergyUnit extends BaseGTUpdateableBlock { - - private static final Block_LapotronicEnergyUnit INSTANCE = new Block_LapotronicEnergyUnit(); - - public enum IconBaseSide implements IIconContainer { - - INSTANCE; - - @Override - public IIcon getIcon() { - return Block_LapotronicEnergyUnit.INSTANCE.iconBaseSide; - } - - @Override - public IIcon getOverlayIcon() { - return null; - } - - @Override - public ResourceLocation getTextureFile() { - return TextureMap.locationBlocksTexture; - } - } - - static { - // technically, this page is owned by me, glee8e, however, I'm kind enough to spare 1 for kekztech since - // this is basically abandon ware by now. - GT_Utility.addTexturePage((byte) 42); - Textures.BlockIcons.setCasingTexture((byte) 42, (byte) 127, TextureFactory.of(IconBaseSide.INSTANCE)); - } - - private IIcon iconBaseSide; - private IIcon iconBaseTop; - - private IIcon iconLapoEmptySide; - private IIcon iconLapoEmptyTop; - private IIcon iconLapoEVSide; - private IIcon iconLapoEVTop; - private IIcon iconLapoIVSide; - private IIcon iconLapoIVTop; - private IIcon iconLapoLuVSide; - private IIcon iconLapoLuVTop; - private IIcon iconLapoZPMSide; - private IIcon iconLapoZPMTop; - private IIcon iconLapoUVSide; - private IIcon iconLapoUVTop; - private IIcon iconUltimateSide; - private IIcon iconUltimateTop; - private IIcon iconUltimateExtremeSide; - private IIcon iconUltimateExtremeTop; - private IIcon iconUltimateInsaneSide; - private IIcon iconUltimateInsaneTop; - private IIcon iconUltimateMegaSide; - private IIcon iconUltimateMegaTop; - - private Block_LapotronicEnergyUnit() { - super(Material.iron); - } - - public static Block registerBlock() { - final String blockName = "kekztech_lapotronicenergyunit_block"; - INSTANCE.setBlockName(blockName); - INSTANCE.setCreativeTab(CreativeTabs.tabMisc); - INSTANCE.setHardness(5.0f); - INSTANCE.setResistance(6.0f); - GameRegistry.registerBlock(INSTANCE, IB_LapotronicEnergyUnit.class, blockName); - - return INSTANCE; - } - - @Override - public void registerBlockIcons(IIconRegister ir) { - iconBaseSide = ir.registerIcon("kekztech:LSCBase_side"); - iconBaseTop = ir.registerIcon("kekztech:LSCBase_top"); - - iconLapoEmptySide = ir.registerIcon("kekztech:LapotronicEnergyUnit6_side"); - iconLapoEmptyTop = ir.registerIcon("kekztech:LapotronicEnergyUnit6_top"); - iconLapoEVSide = ir.registerIcon("kekztech:LapotronicEnergyUnit7_side"); - iconLapoEVTop = ir.registerIcon("kekztech:LapotronicEnergyUnit7_top"); - iconLapoIVSide = ir.registerIcon("kekztech:LapotronicEnergyUnit1_side"); - iconLapoIVTop = ir.registerIcon("kekztech:LapotronicEnergyUnit1_top"); - iconLapoLuVSide = ir.registerIcon("kekztech:LapotronicEnergyUnit2_side"); - iconLapoLuVTop = ir.registerIcon("kekztech:LapotronicEnergyUnit2_top"); - iconLapoZPMSide = ir.registerIcon("kekztech:LapotronicEnergyUnit3_side"); - iconLapoZPMTop = ir.registerIcon("kekztech:LapotronicEnergyUnit3_top"); - iconLapoUVSide = ir.registerIcon("kekztech:LapotronicEnergyUnit4_side"); - iconLapoUVTop = ir.registerIcon("kekztech:LapotronicEnergyUnit4_top"); - - iconUltimateSide = ir.registerIcon("kekztech:UltimateEnergyUnit_side"); - iconUltimateTop = ir.registerIcon("kekztech:UltimateEnergyUnit_top"); - iconUltimateExtremeSide = ir.registerIcon("kekztech:ReallyUltimateEnergyUnit_side"); - iconUltimateExtremeTop = ir.registerIcon("kekztech:ReallyUltimateEnergyUnit_top"); - iconUltimateInsaneSide = ir.registerIcon("kekztech:InsanelyUltimateEnergyUnit_side"); - iconUltimateInsaneTop = ir.registerIcon("kekztech:InsanelyUltimateEnergyUnit_top"); - iconUltimateMegaSide = ir.registerIcon("kekztech:MegaUltimateEnergyUnit_side"); - iconUltimateMegaTop = ir.registerIcon("kekztech:MegaUltimateEnergyUnit_top"); - } - - @Override - @SuppressWarnings({ "unchecked" }) - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) { - // Multi casing - par3List.add(new ItemStack(par1, 1, 0)); - // Empty capacitor - par3List.add(new ItemStack(par1, 1, 6)); - // Lapo capacitors EV - UV - par3List.add(new ItemStack(par1, 1, 7)); - par3List.add(new ItemStack(par1, 1, 1)); - par3List.add(new ItemStack(par1, 1, 2)); - par3List.add(new ItemStack(par1, 1, 3)); - par3List.add(new ItemStack(par1, 1, 4)); - // Ultimate battery - par3List.add(new ItemStack(par1, 1, 5)); - // UEV Cap - par3List.add(new ItemStack(par1, 1, 8)); - // UIV Cap - par3List.add(new ItemStack(par1, 1, 9)); - // UMV Cap - par3List.add(new ItemStack(par1, 1, 10)); - } - - @Override - public IIcon getIcon(int side, int meta) { - switch (meta) { - case 0: - return (side < 2) ? iconBaseTop : iconBaseSide; - case 1: - return (side < 2) ? iconLapoIVTop : iconLapoIVSide; - case 2: - return (side < 2) ? iconLapoLuVTop : iconLapoLuVSide; - case 3: - return (side < 2) ? iconLapoZPMTop : iconLapoZPMSide; - case 4: - return (side < 2) ? iconLapoUVTop : iconLapoUVSide; - case 5: - return (side < 2) ? iconUltimateTop : iconUltimateSide; - case 6: - return (side < 2) ? iconLapoEmptyTop : iconLapoEmptySide; - case 7: - return (side < 2) ? iconLapoEVTop : iconLapoEVSide; - case 8: - return (side < 2) ? iconUltimateExtremeTop : iconUltimateExtremeSide; - case 9: - return (side < 2) ? iconUltimateInsaneTop : iconUltimateInsaneSide; - case 10: - return (side < 2) ? iconUltimateMegaTop : iconUltimateMegaSide; - default: - return iconUltimateTop; - } - } -} diff --git a/src/main/java/common/blocks/Block_LargeHexPlate.java b/src/main/java/common/blocks/Block_LargeHexPlate.java deleted file mode 100644 index ac8174ff34..0000000000 --- a/src/main/java/common/blocks/Block_LargeHexPlate.java +++ /dev/null @@ -1,65 +0,0 @@ -package common.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import cpw.mods.fml.common.registry.GameRegistry; - -public class Block_LargeHexPlate extends Block { - - private static final Block_LargeHexPlate INSTANCE = new Block_LargeHexPlate(); - private static final int BATCH_SIZE = 4; - - private final IIcon[][] parts = new IIcon[BATCH_SIZE][BATCH_SIZE]; - - private Block_LargeHexPlate() { - super(Material.rock); - } - - public static Block registerBlock() { - final String blockName = "kekztech_largehextile_block"; - INSTANCE.setBlockName(blockName); - INSTANCE.setCreativeTab(CreativeTabs.tabMisc); - INSTANCE.setHardness(6.0f); - INSTANCE.setResistance(10.0f); - GameRegistry.registerBlock(INSTANCE, blockName); - - return INSTANCE; - } - - @Override - public void registerBlockIcons(IIconRegister ir) { - for (int x = 0; x < BATCH_SIZE; x++) { - for (int z = 0; z < BATCH_SIZE; z++) { - parts[x][z] = ir.registerIcon("kekztech:LargeHexTile_" + x + "_" + z); - } - } - } - - @Override - public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { - final int xMod = x >= 0 ? Math.abs(x % BATCH_SIZE) - : Math.abs((Math.abs(x) % BATCH_SIZE) - BATCH_SIZE) % BATCH_SIZE; - final int yMod = y >= 0 ? Math.abs(y % BATCH_SIZE) - : Math.abs((Math.abs(y) % BATCH_SIZE) - BATCH_SIZE) % BATCH_SIZE; - final int zMod = z >= 0 ? Math.abs(z % BATCH_SIZE) - : Math.abs((Math.abs(z) % BATCH_SIZE) - BATCH_SIZE) % BATCH_SIZE; - - if (side == 0 || side == 1) { - return parts[xMod][zMod]; - } else if (side == 2 || side == 3) { - return parts[xMod][yMod]; - } else { - return parts[zMod][yMod]; - } - } - - @Override - public IIcon getIcon(int side, int meta) { - return parts[(int) Math.ceil(BATCH_SIZE / 2)][(int) Math.ceil(BATCH_SIZE / 2)]; - } -} diff --git a/src/main/java/common/blocks/Block_TFFTStorageField.java b/src/main/java/common/blocks/Block_TFFTStorageField.java deleted file mode 100644 index 069dd40dca..0000000000 --- a/src/main/java/common/blocks/Block_TFFTStorageField.java +++ /dev/null @@ -1,92 +0,0 @@ -package common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; - -import common.itemBlocks.IB_TFFTStorageField; -import common.tileentities.GTMTE_TFFT; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import kekztech.KekzCore; - -public class Block_TFFTStorageField extends BaseGTUpdateableBlock { - - private static final Block_TFFTStorageField INSTANCE = new Block_TFFTStorageField(); - private static final int SUB_BLOCK_COUNT = GTMTE_TFFT.Field.VALUES.length + 1; - private static final IIcon[] textures = new IIcon[SUB_BLOCK_COUNT]; - - public enum TFFTCasingIcon implements IIconContainer { - - INSTANCE; - - @Override - public IIcon getIcon() { - return textures[0]; - } - - @Override - public IIcon getOverlayIcon() { - return null; - } - - @Override - public ResourceLocation getTextureFile() { - return TextureMap.locationBlocksTexture; - } - } - - // I guess glodblock won't mind - static { - GT_Utility.addTexturePage((byte) 12); - Textures.BlockIcons - .setCasingTexture((byte) 12, (byte) 127, TextureFactory.of(Block_TFFTStorageField.TFFTCasingIcon.INSTANCE)); - } - - private Block_TFFTStorageField() { - super(Material.iron); - } - - public static Block registerBlock() { - final String blockName = "kekztech_tfftstoragefield_block"; - INSTANCE.setBlockName(blockName); - INSTANCE.setCreativeTab(CreativeTabs.tabMisc); - INSTANCE.setHardness(5.0f); - INSTANCE.setResistance(6.0f); - GameRegistry.registerBlock(INSTANCE, IB_TFFTStorageField.class, blockName); - - return INSTANCE; - } - - @Override - public void registerBlockIcons(IIconRegister ir) { - textures[0] = ir.registerIcon(KekzCore.MODID + ":" + "TFFTCasing"); - for (int i = 1; i < SUB_BLOCK_COUNT; i++) { - textures[i] = ir.registerIcon(KekzCore.MODID + ":" + "TFFTStorageFieldBlock" + i); - } - } - - @Override - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) { - for (int i = 0; i < SUB_BLOCK_COUNT; i++) { - par3List.add(new ItemStack(par1, 1, i)); - } - } - - @Override - public IIcon getIcon(int side, int meta) { - return textures[meta]; - } -} diff --git a/src/main/java/common/blocks/Block_ThaumiumReinforcedJar.java b/src/main/java/common/blocks/Block_ThaumiumReinforcedJar.java deleted file mode 100644 index 3c91ac6d0d..0000000000 --- a/src/main/java/common/blocks/Block_ThaumiumReinforcedJar.java +++ /dev/null @@ -1,252 +0,0 @@ -package common.blocks; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.Explosion; -import net.minecraft.world.World; - -import common.itemBlocks.IB_ThaumiumReinforcedJar; -import common.tileentities.TE_ThaumiumReinforcedJar; -import common.tileentities.TE_ThaumiumReinforcedVoidJar; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.common.blocks.BlockJar; -import thaumcraft.common.config.ConfigBlocks; -import thaumcraft.common.config.ConfigItems; -import thaumcraft.common.items.ItemEssence; -import thaumcraft.common.tiles.TileJarFillable; - -public class Block_ThaumiumReinforcedJar extends BlockJar { - - private static final Block_ThaumiumReinforcedJar INSTANCE = new Block_ThaumiumReinforcedJar(); - - private Block_ThaumiumReinforcedJar() { - super(); - - super.setHardness(6.0F); - super.setResistance(6.0F); - } - - public static Block registerBlock() { - final String blockName = "kekztech_thaumiumreinforcedjar_block"; - INSTANCE.setBlockName(blockName); - INSTANCE.setHarvestLevel("pickaxe", 2); - GameRegistry.registerBlock(INSTANCE, IB_ThaumiumReinforcedJar.class, blockName); - - return INSTANCE; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister ir) { - super.iconLiquid = ir.registerIcon("thaumcraft:animatedglow"); - super.iconJarSide = ir.registerIcon("kekztech:thaumreinforced_jar_side"); - super.iconJarTop = ir.registerIcon("kekztech:thaumreinforced_jar_top"); - super.iconJarTopVoid = ir.registerIcon("kekztech:thaumreinforced_jar_top_void"); - super.iconJarSideVoid = ir.registerIcon("kekztech:thaumreinforced_jar_side_void"); - super.iconJarBottom = ir.registerIcon("kekztech:thaumreinforced_jar_bottom"); - } - - @Override - @SideOnly(Side.CLIENT) - @SuppressWarnings({ "unchecked" }) - public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) { - par3List.add(new ItemStack(par1, 1, 0)); // Normal jar - par3List.add(new ItemStack(par1, 1, 3)); // Void jar - } - - @Override - public TileEntity createTileEntity(World world, int meta) { - if (meta == 3) { - return new TE_ThaumiumReinforcedVoidJar(); - } else { - return new TE_ThaumiumReinforcedJar(); - } - } - - @Override - public void breakBlock(World world, int x, int y, int z, Block par5, int par6) { - final TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof TE_ThaumiumReinforcedJar) { - final TE_ThaumiumReinforcedJar ite = (TE_ThaumiumReinforcedJar) te; - breakBlockWarpy(world, x, y, z, ite.amount, 50, 1.0F); - } else if (te instanceof TE_ThaumiumReinforcedVoidJar) { - final TE_ThaumiumReinforcedVoidJar ite = (TE_ThaumiumReinforcedVoidJar) te; - breakBlockWarpy(world, x, y, z, ite.amount, 50, 1.0F); - } - super.breakBlock(world, x, y, z, par5, par6); - } - - private void breakBlockWarpy(World world, int x, int y, int z, int fillAmount, int iterations, - float explosionStrength) { - if (fillAmount > 0) { - // Create a decent explosion in the center of the block (TNT has strength 4.0F) - world.createExplosion(null, x + 0.5D, y + 0.5D, z + 0.5D, explosionStrength, false); - - // Place a lot of Flux in the area - final int limit = fillAmount / 16; - int created = 0; - for (int i = 0; i < iterations; i++) { - final int xf = x + world.rand.nextInt(7) - world.rand.nextInt(7); - final int yf = x + world.rand.nextInt(7) - world.rand.nextInt(7); - final int zf = x + world.rand.nextInt(7) - world.rand.nextInt(7); - if (world.isAirBlock(xf, yf, zf)) { - if (yf > y) { - world.setBlock(xf, yf, zf, ConfigBlocks.blockFluxGas, 8, 3); - } else { - world.setBlock(xf, yf, zf, ConfigBlocks.blockFluxGoo, 8, 3); - } - - if (created++ > limit) { - break; - } - } - } - } - } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float f1, float f2, - float f3) { - // Call parent method to handle jar emptying, labels stuff etc - super.onBlockActivated(world, x, y, z, player, side, f1, f2, f3); - // Interact with Essentia Phials if the player holds one - final ItemStack heldItem = player.getHeldItem(); - if (heldItem != null && heldItem.getItem() == ConfigItems.itemEssence) { - final TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof TE_ThaumiumReinforcedJar) { - return dealWithPhial(world, player, x, y, z); - } else if (te instanceof TE_ThaumiumReinforcedVoidJar) { - return dealWithPhial(world, player, x, y, z); - } - } - - return true; - } - - /** - * Handle compatibility with Essentia Phials - * - * @param world Pass through from onBlockActivated() - * @param player Pass through from onBlockActivated() - * @param x Pass through from onBlockActivated() - * @param y Pass through from onBlockActivated() - * @param z Pass through from onBlockActivated() - * @return Not sure tbh - */ - private boolean dealWithPhial(World world, EntityPlayer player, int x, int y, int z) { - final TileJarFillable kte = (TileJarFillable) world.getTileEntity(x, y, z); - final ItemStack heldItem = player.getHeldItem(); - // Check whether to fill or to drain the phial - if (heldItem.getItemDamage() == 0) { - if (kte.amount >= 8) { - if (world.isRemote) { - player.swingItem(); - return false; - } - - final Aspect jarAspect = Aspect.getAspect(kte.aspect.getTag()); - if (kte.takeFromContainer(jarAspect, 8)) { - // Take an empty phial from the player's inventory - heldItem.stackSize--; - // Fill a new phial - final ItemStack filledPhial = new ItemStack(ConfigItems.itemEssence, 1, 1); - final AspectList phialContent = new AspectList().add(jarAspect, 8); - ((ItemEssence) ConfigItems.itemEssence).setAspects(filledPhial, phialContent); - // Drop on ground if there's no inventory space - if (!player.inventory.addItemStackToInventory(filledPhial)) { - world.spawnEntityInWorld( - new EntityItem(world, (float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F, filledPhial)); - } - - world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); - player.inventoryContainer.detectAndSendChanges(); - return true; - } - } - } else { - final AspectList phialContent = ((ItemEssence) ConfigItems.itemEssence).getAspects(heldItem); - if (phialContent != null && phialContent.size() == 1) { - final Aspect phialAspect = phialContent.getAspects()[0]; - if (kte.amount + 8 <= kte.maxAmount && kte.doesContainerAccept(phialAspect)) { - if (world.isRemote) { - player.swingItem(); - return false; - } - - if (kte.addToContainer(phialAspect, 8) == 0) { - world.markBlockForUpdate(x, y, z); - kte.markDirty(); - heldItem.stackSize--; - // Drop on ground if there's no inventory space - if (!player.inventory.addItemStackToInventory(new ItemStack(ConfigItems.itemEssence, 1, 0))) { - world.spawnEntityInWorld( - new EntityItem( - world, - (float) x + 0.5F, - (float) y + 0.5F, - (float) z + 0.5F, - new ItemStack(ConfigItems.itemEssence, 1, 0))); - } - - world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); - player.inventoryContainer.detectAndSendChanges(); - return true; - } - } - } - } - - return true; - } - - @Override - public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { - final ArrayList drops = new ArrayList<>(); - drops.add(new ItemStack(this, 1, (meta == 3) ? 3 : 0)); - final TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof TE_ThaumiumReinforcedJar) { - final TE_ThaumiumReinforcedJar ite = (TE_ThaumiumReinforcedJar) te; - if (ite.aspectFilter != null) { - final ItemStack droppedLabel = new ItemStack(ConfigItems.itemResource, 1, 13); - droppedLabel.setTagCompound(new NBTTagCompound()); - final AspectList aspect = new AspectList().add(ite.aspectFilter, 0); - aspect.writeToNBT(droppedLabel.getTagCompound()); - drops.add(droppedLabel); - } - } else if (te instanceof TE_ThaumiumReinforcedVoidJar) { - final TE_ThaumiumReinforcedVoidJar ite = (TE_ThaumiumReinforcedVoidJar) te; - if (ite.aspectFilter != null) { - final ItemStack droppedLabel = new ItemStack(ConfigItems.itemResource, 1, 13); - droppedLabel.setTagCompound(new NBTTagCompound()); - final AspectList aspect = new AspectList().add(ite.aspectFilter, 0); - aspect.writeToNBT(droppedLabel.getTagCompound()); - drops.add(droppedLabel); - } - } - return drops; - } - - @Override - public void onBlockHarvested(World par1World, int par2, int par3, int par4, int par5, - EntityPlayer par6EntityPlayer) {} - - @Override - public boolean canDropFromExplosion(Explosion e) { - return false; - } -} diff --git a/src/main/java/common/blocks/Block_YSZUnit.java b/src/main/java/common/blocks/Block_YSZUnit.java deleted file mode 100644 index 312d3250a4..0000000000 --- a/src/main/java/common/blocks/Block_YSZUnit.java +++ /dev/null @@ -1,29 +0,0 @@ -package common.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.creativetab.CreativeTabs; - -import cpw.mods.fml.common.registry.GameRegistry; -import kekztech.KekzCore; - -public class Block_YSZUnit extends BaseGTUpdateableBlock { - - private static final Block_YSZUnit instance = new Block_YSZUnit(); - - private Block_YSZUnit() { - super(Material.iron); - } - - public static Block registerBlock() { - final String blockName = "kekztech_yszceramicelectrolyteunit_block"; - instance.setBlockName(blockName); - instance.setCreativeTab(CreativeTabs.tabMisc); - instance.setBlockTextureName(KekzCore.MODID + ":" + "YSZCeramicElectrolyteUnit"); - instance.setHardness(5.0f); - instance.setResistance(6.0f); - GameRegistry.registerBlock(instance, blockName); - - return instance; - } -} diff --git a/src/main/java/common/itemBlocks/IB_IchorJar.java b/src/main/java/common/itemBlocks/IB_IchorJar.java deleted file mode 100644 index 6e2d806a7e..0000000000 --- a/src/main/java/common/itemBlocks/IB_IchorJar.java +++ /dev/null @@ -1,27 +0,0 @@ -package common.itemBlocks; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class IB_IchorJar extends ItemBlock { - - public IB_IchorJar(Block block) { - super(block); - } - - @Override - public int getMetadata(int meta) { - return meta; - } - - @Override - public boolean getHasSubtypes() { - return true; - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName() + "." + stack.getItemDamage(); - } -} diff --git a/src/main/java/common/itemBlocks/IB_LapotronicEnergyUnit.java b/src/main/java/common/itemBlocks/IB_LapotronicEnergyUnit.java deleted file mode 100644 index 971aac494a..0000000000 --- a/src/main/java/common/itemBlocks/IB_LapotronicEnergyUnit.java +++ /dev/null @@ -1,190 +0,0 @@ -package common.itemBlocks; - -import static com.google.common.math.LongMath.pow; - -import java.math.BigInteger; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_Utility; - -public class IB_LapotronicEnergyUnit extends ItemBlock { - - public IB_LapotronicEnergyUnit(Block block) { - super(block); - } - - @Override - public int getMetadata(int meta) { - return meta; - } - - @Override - public boolean getHasSubtypes() { - return true; - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName() + "." + stack.getItemDamage(); - } - - // 5 Minutes, 5 mins * 60s * 20 ticks. - public static long LSC_time_between_wireless_rebalance_in_ticks = 5L * 60L * 20L; - - // 60 Trillion EU. - public static BigInteger LSC_wireless_eu_cap = BigInteger.valueOf(60 * pow(10, 12)); - - // 10 Billion EU/t - private static final BigInteger UHV_cap_eu_per_tick = LSC_wireless_eu_cap - .divide(BigInteger.valueOf(LSC_time_between_wireless_rebalance_in_ticks)); - - // 6 Quadrillion EU. - public static BigInteger UEV_wireless_eu_cap = BigInteger.valueOf(100 * 60 * pow(10, 12)); - - // 1 Trillion EU/t - private static final BigInteger UEV_cap_eu_per_tick = UEV_wireless_eu_cap - .divide(BigInteger.valueOf(LSC_time_between_wireless_rebalance_in_ticks)); - - // 600 Quadrillion EU. - public static BigInteger UIV_wireless_eu_cap = BigInteger.valueOf(60 * pow(10, 16)); - - // 100 Trillion EU/t - private static final BigInteger UIV_cap_eu_per_tick = UIV_wireless_eu_cap - .divide(BigInteger.valueOf(LSC_time_between_wireless_rebalance_in_ticks)); - - // 60 Quintillion EU. - public static BigInteger UMV_wireless_eu_cap = UIV_wireless_eu_cap.multiply(BigInteger.valueOf(100)); - - // 10 Quadrillion EU/t - private static final BigInteger UMV_cap_eu_per_tick = UMV_wireless_eu_cap - .divide(BigInteger.valueOf(LSC_time_between_wireless_rebalance_in_ticks)); - - public static long EV_cap_storage = 60_000_000L; - public static long IV_cap_storage = 600_000_000L; - public static long LuV_cap_storage = 6_000_000_000L; - public static long ZPM_cap_storage = 60_000_000_000L; - public static long UV_cap_storage = 600_000_000_000L; - public static long UHV_cap_storage = Long.MAX_VALUE; - public static long UEV_cap_storage = Long.MAX_VALUE; - public static long UIV_cap_storage = Long.MAX_VALUE; - public static BigInteger UMV_cap_storage = BigInteger.valueOf(UIV_cap_storage) - .pow(2); - - @SuppressWarnings("unchecked") - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List lines, boolean advancedTooltips) { - lines.add(StatCollector.translateToLocal("tile.kekztech_lapotronicenergyunit_block.desc")); - switch (stack.getItemDamage()) { - case 1: - lines.add( - "Capacity: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(IV_cap_storage) - + EnumChatFormatting.GRAY - + "EU"); - break; - case 2: - lines.add( - "Capacity: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(LuV_cap_storage) - + EnumChatFormatting.GRAY - + "EU"); - break; - case 3: - lines.add( - "Capacity: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(ZPM_cap_storage) - + EnumChatFormatting.GRAY - + "EU"); - break; - case 4: - lines.add( - "Capacity: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(UV_cap_storage) - + EnumChatFormatting.GRAY - + "EU"); - break; - case 5: - lines.add( - "Capacity: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(UHV_cap_storage) - + EnumChatFormatting.GRAY - + "EU"); - lines.add( - "Supports up to " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(UHV_cap_eu_per_tick) - + EnumChatFormatting.GRAY - + "EU/t of wireless transfer per " - + GT_Values.TIER_COLORS[9] - + GT_Values.VN[9] - + EnumChatFormatting.GRAY - + " capacitor."); - break; - case 6: - lines.add("Capacity: None"); - break; - case 7: - lines.add( - "Capacity: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(EV_cap_storage) - + EnumChatFormatting.GRAY - + " EU"); - break; - case 8: - lines.add( - "Capacity: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(UEV_cap_storage) - + EnumChatFormatting.GRAY - + "EU"); - lines.add( - "Supports up to " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(UEV_cap_eu_per_tick) - + EnumChatFormatting.GRAY - + "EU/t of wireless transfer per " - + GT_Values.TIER_COLORS[10] - + GT_Values.VN[10] - + EnumChatFormatting.GRAY - + " capacitor."); - break; - case 9: - lines.add( - "Capacity: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(UIV_cap_storage) - + EnumChatFormatting.GRAY - + "EU"); - lines.add( - "Supports up to " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(UIV_cap_eu_per_tick) - + EnumChatFormatting.GRAY - + "EU/t of wireless transfer per " - + GT_Values.TIER_COLORS[11] - + GT_Values.VN[11] - + EnumChatFormatting.GRAY - + " capacitor."); - break; - case 10: - lines.add( - "Capacity: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(UMV_cap_storage) - + EnumChatFormatting.GRAY - + "EU"); - lines.add( - "Supports up to " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(UMV_cap_eu_per_tick) - + EnumChatFormatting.GRAY - + "EU/t of wireless transfer per " - + GT_Values.TIER_COLORS[12] - + GT_Values.VN[12] - + EnumChatFormatting.GRAY - + " capacitor."); - break; - } - } -} diff --git a/src/main/java/common/itemBlocks/IB_TFFTStorageField.java b/src/main/java/common/itemBlocks/IB_TFFTStorageField.java deleted file mode 100644 index 43f4523f27..0000000000 --- a/src/main/java/common/itemBlocks/IB_TFFTStorageField.java +++ /dev/null @@ -1,63 +0,0 @@ -package common.itemBlocks; - -import java.text.NumberFormat; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -import common.tileentities.GTMTE_TFFT; - -public class IB_TFFTStorageField extends ItemBlock { - - private static final int UNIQUE_FLUIDS_PER_CELL = 25; - - public IB_TFFTStorageField(Block block) { - super(block); - } - - @Override - public int getMetadata(int meta) { - return meta; - } - - @Override - public boolean getHasSubtypes() { - return true; - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName() + "." + stack.getItemDamage(); - } - - @SuppressWarnings("unchecked") - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List lines, boolean advancedTooltips) { - int meta = stack.getItemDamage(); - if (meta > 0) { - lines.add(StatCollector.translateToLocal("tile.kekztech_tfftstoragefield_block.desc")); - lines.add( - "Capacity: " + EnumChatFormatting.BLUE - + NumberFormat.getNumberInstance() - .format(GTMTE_TFFT.Field.VALUES[meta - 1].getCapacity()) - + EnumChatFormatting.GRAY - + " L"); - lines.add( - "Per Fluid Capacity: " + EnumChatFormatting.BLUE - + NumberFormat.getNumberInstance() - .format(GTMTE_TFFT.Field.VALUES[meta - 1].getCapacity() / UNIQUE_FLUIDS_PER_CELL) - + EnumChatFormatting.GRAY - + " L"); - lines.add( - "Power Draw: " + EnumChatFormatting.BLUE - + GTMTE_TFFT.Field.VALUES[meta - 1].getCost() - + EnumChatFormatting.GRAY - + " EU/t"); - } - } -} diff --git a/src/main/java/common/itemBlocks/IB_ThaumiumReinforcedJar.java b/src/main/java/common/itemBlocks/IB_ThaumiumReinforcedJar.java deleted file mode 100644 index 9299126d67..0000000000 --- a/src/main/java/common/itemBlocks/IB_ThaumiumReinforcedJar.java +++ /dev/null @@ -1,27 +0,0 @@ -package common.itemBlocks; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -public class IB_ThaumiumReinforcedJar extends ItemBlock { - - public IB_ThaumiumReinforcedJar(Block block) { - super(block); - } - - @Override - public int getMetadata(int meta) { - return meta; - } - - @Override - public boolean getHasSubtypes() { - return true; - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName() + "." + stack.getItemDamage(); - } -} diff --git a/src/main/java/common/items/ErrorItem.java b/src/main/java/common/items/ErrorItem.java deleted file mode 100644 index 997686a114..0000000000 --- a/src/main/java/common/items/ErrorItem.java +++ /dev/null @@ -1,48 +0,0 @@ -package common.items; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import kekztech.KekzCore; - -public class ErrorItem extends Item { - - private static final ErrorItem INSTANCE = new ErrorItem(); - - private ErrorItem() {} - - public static ErrorItem getInstance() { - return INSTANCE; - } - - public void registerItem() { - super.setHasSubtypes(false); - final String unlocalizedName = "kekztech_error_item"; - super.setUnlocalizedName(unlocalizedName); - super.setCreativeTab(CreativeTabs.tabMisc); - super.setMaxStackSize(64); - super.setTextureName(KekzCore.MODID + ":" + "Error"); - GameRegistry.registerItem(getInstance(), unlocalizedName); - } - - @SuppressWarnings({ "unchecked" }) - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { - list.add("REMINDER: KekzTech recipes are only tested to work in GTNH!"); - list.add("Placeholder item in case something went wrong"); - list.add("If this item shows up in GTNH, you may report it to:"); - list.add("https://github.com/kekzdealer/KekzTech"); - } - - @Override - public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer player) { - player.swingItem(); - return item; - } -} diff --git a/src/main/java/common/items/MetaItem_CraftingComponent.java b/src/main/java/common/items/MetaItem_CraftingComponent.java deleted file mode 100644 index 205e7392c5..0000000000 --- a/src/main/java/common/items/MetaItem_CraftingComponent.java +++ /dev/null @@ -1,89 +0,0 @@ -package common.items; - -import java.util.List; - -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.util.IIcon; - -import cpw.mods.fml.common.registry.GameRegistry; -import kekztech.KekzCore; - -public class MetaItem_CraftingComponent extends Item { - - private static final MetaItem_CraftingComponent INSTANCE = new MetaItem_CraftingComponent(); - private final IIcon[] icons = new IIcon[16]; - - private MetaItem_CraftingComponent() {} - - public static MetaItem_CraftingComponent getInstance() { - return INSTANCE; - } - - public void registerItem() { - super.setHasSubtypes(true); - final String unlocalizedName = "kekztech_crafting_item"; - super.setUnlocalizedName(unlocalizedName); - super.setCreativeTab(CreativeTabs.tabMisc); - super.setMaxStackSize(64); - GameRegistry.registerItem(getInstance(), unlocalizedName); - } - - @Override - public void registerIcons(IIconRegister reg) { - int counter = 9; - // Ceramics - icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YSZCeramicDust"); - icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "GDCCeramicDust"); - icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YttriaDust"); - icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "ZirconiaDust"); - icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "CeriaDust"); - icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YSZCeramicPlate"); - icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "GDCCeramicPlate"); - } - - @Override - public IIcon getIconFromDamage(int meta) { - return icons[meta]; - } - - @SuppressWarnings({ "unchecked" }) - @Override - public void getSubItems(Item item, CreativeTabs tab, List list) { - for (int i = 9; i < icons.length; i++) { - list.add(new ItemStack(item, 1, i)); - } - } - - @Override - public String getUnlocalizedName(ItemStack stack) { - return super.getUnlocalizedName() + "." + stack.getItemDamage(); - } - - @SuppressWarnings({ "unchecked" }) - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { - list.add("Crafting component for KekzTech things"); - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) { - return 0.0d; - } - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return false; - } - - public ItemStack getStackFromDamage(int meta) { - return new ItemStack(getInstance(), 1, meta); - } - - public ItemStack getStackOfAmountFromDamage(int meta, int amount) { - return new ItemStack(getInstance(), amount, meta); - } -} diff --git a/src/main/java/common/recipeLoaders/AlloySmelter.java b/src/main/java/common/recipeLoaders/AlloySmelter.java deleted file mode 100644 index 537c054630..0000000000 --- a/src/main/java/common/recipeLoaders/AlloySmelter.java +++ /dev/null @@ -1,29 +0,0 @@ -package common.recipeLoaders; - -import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import common.items.MetaItem_CraftingComponent; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.TierEU; -import kekztech.Items; - -public class AlloySmelter implements Runnable { - - @Override - public void run() { - final MetaItem_CraftingComponent craftingItem = MetaItem_CraftingComponent.getInstance(); - - // YSZ Cermic Plate - GT_Values.RA.stdBuilder() - .itemInputs( - craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicDust.getMetaID(), 3), - ItemList.Shape_Mold_Plate.get(0)) - .itemOutputs(craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicPlate.getMetaID(), 1)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(alloySmelterRecipes); - } -} diff --git a/src/main/java/common/recipeLoaders/Assembler.java b/src/main/java/common/recipeLoaders/Assembler.java deleted file mode 100644 index da6c863689..0000000000 --- a/src/main/java/common/recipeLoaders/Assembler.java +++ /dev/null @@ -1,295 +0,0 @@ -package common.recipeLoaders; - -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; - -import common.Blocks; -import common.TileEntities; -import common.items.ErrorItem; -import common.items.MetaItem_CraftingComponent; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import kekztech.Items; - -public class Assembler implements Runnable { - - @Override - public void run() { - // TFFT Casing - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DarkSteel, 3), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.EnderPearl, 3)) - .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1)) - .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(144)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // TFFT Multi Hatch - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hull_HV.get(1), - ItemList.Cover_FluidStorageMonitor.get(1), - ItemList.Field_Generator_LV.get(4), - GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Polytetrafluoroethylene, 25)) - .itemOutputs(TileEntities.tfftHatch.getStackForm(1)) - .fluidInputs(Materials.Plastic.getMolten(432)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // TFFTStorageField1 - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CrudeSteel, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CrudeSteel, 6), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Steel, 3), - ItemList.FluidRegulator_LV.get(1)) - .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 1)) - .fluidInputs(Materials.Glass.getMolten(144)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // TFFTStorageField2 - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - ItemList.Casing_Tank_1.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.EnergeticSilver, 6), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Plastic, 3), - ItemList.FluidRegulator_MV.get(1)) - .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 2)) - .fluidInputs(Materials.Plastic.getMolten(288)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // TFFTStorageField3 - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - ItemList.Casing_Tank_3.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.VividAlloy, 6), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.StainlessSteel, 3), - ItemList.Field_Generator_LV.get(1), - ItemList.FluidRegulator_HV.get(1)) - .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 3)) - .fluidInputs(Materials.Plastic.getMolten(432)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // TFFTStorageField4 - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - ItemList.Casing_Tank_5.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Enderium, 6), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Polytetrafluoroethylene, 3), - ItemList.Field_Generator_MV.get(2), - ItemList.FluidRegulator_EV.get(1)) - .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 4)) - .fluidInputs(Materials.Epoxid.getMolten(864)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // TFFTStorageField5 - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - ItemList.Casing_Tank_7.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CrystallineAlloy, 6), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Enderium, 3), - ItemList.Field_Generator_HV.get(4), - ItemList.FluidRegulator_IV.get(1)) - .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 5)) - .fluidInputs(Materials.Epoxid.getMolten(1152)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // LSC Casing - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tantalum, 4), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 2), - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenSteel, 2), - GT_OreDictUnificator.get(OrePrefixes.block, Materials.Lapis, 1)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 0)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // EV Capacitor alt recipe - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 6), - GT_ModHandler.getIC2Item("lapotronCrystal", 1L, GT_Values.W), - GT_Utility.getIntegratedCircuit(7)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 7)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // IV Capacitor alt recipe - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 6), - ItemList.Energy_LapotronicOrb.get(1L), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 1)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // LuV Capacitor alt recipe - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Energy_LapotronicOrb2.get(1), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmiridium, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Osmiridium, 24), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 2)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // ZPM Capacitor alt recipe - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Energy_Module.get(1), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.NaquadahAlloy, 24), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 3)) - .duration(1 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // UV Capacitor alt recipe - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Energy_Cluster.get(1), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 24), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 4)) - .duration(2 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - // UHV Capacitor alt recipe - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.ZPM3.get(1), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.CosmicNeutronium, 24), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 5)) - .duration(5 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - // UEV Capacitor alt recipe - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.ZPM4.get(1), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Infinity, 24), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 8)) - .duration(10 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - // UIV Capacitor alt recipe - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.ZPM5.get(1), - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.TranscendentMetal, 24), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 9)) - .duration(10 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - // UMV Capacitor alt recipe - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.ZPM6.get(1), - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SpaceTime, 24), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 10)) - .duration(10 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - - final MetaItem_CraftingComponent craftingItem = MetaItem_CraftingComponent.getInstance(); - - // YSZ Unit - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicPlate.getMetaID(), 4), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Yttrium, 1), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 1), - ItemList.Electric_Motor_HV.get(1L)) - .itemOutputs(new ItemStack(Blocks.yszUnit, 1)) - .fluidInputs(Materials.Hydrogen.getGas(4000)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - // GDC Unit - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicPlate.getMetaID(), 8), - GT_OreDictUnificator - .get(OrePrefixes.frameGt, Materials.Gadolinium, new ItemStack(ErrorItem.getInstance(), 1), 1), - GT_OreDictUnificator - .get(OrePrefixes.rotor, Materials.Desh, new ItemStack(ErrorItem.getInstance(), 1), 1), - ItemList.Electric_Motor_IV.get(1L)) - .itemOutputs(new ItemStack(Blocks.gdcUnit, 1)) - .fluidInputs(Materials.Hydrogen.getGas(16000)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Hex Tiles - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - GT_OreDictUnificator.get(OrePrefixes.stone, Materials.Concrete, 1), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.DarkSteel, 2)) - .itemOutputs(new ItemStack(Blocks.largeHexPlate, 2)) - .fluidInputs(FluidRegistry.getFluidStack("molten.plastic", 36)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - - } -} diff --git a/src/main/java/common/recipeLoaders/AssemblyLine.java b/src/main/java/common/recipeLoaders/AssemblyLine.java deleted file mode 100644 index bc19db42ab..0000000000 --- a/src/main/java/common/recipeLoaders/AssemblyLine.java +++ /dev/null @@ -1,227 +0,0 @@ -package common.recipeLoaders; - -import static goodgenerator.loader.Loaders.huiCircuit; -import static gregtech.api.enums.Mods.Avaritia; -import static gregtech.api.enums.Mods.EnderIO; -import static gregtech.api.enums.Mods.EternalSingularity; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.enums.Mods.UniversalSingularities; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; -import static gtPlusPlus.core.material.ELEMENT.STANDALONE.HYPOGEN; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import common.Blocks; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; - -public class AssemblyLine implements Runnable { - - @Override - public void run() { - final Fluid radoxPoly = FluidRegistry.getFluid("molten.radoxpoly") != null - ? FluidRegistry.getFluid("molten.radoxpoly") - : FluidRegistry.getFluid("molten.polybenzimidazole"); - - final Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null - ? FluidRegistry.getFluid("molten.indalloy140") - : FluidRegistry.getFluid("molten.solderingalloy"); - - // TFFTStorageField6 - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, new ItemStack(Blocks.tfftStorageField, 1, 5)) - .metadata(RESEARCH_TIME, 1 * HOURS + 6 * MINUTES + 40 * SECONDS) - .itemInputs( - ItemList.Casing_Tank_7.get(4), - GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.CrystallinePinkSlime, 6), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Naquadah, 3), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ChromeBars", 6), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Quantium, 6), - ItemList.Field_Generator_EV.get(8), - ItemList.FluidRegulator_LuV.get(1), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngineeringProcessorFluidEmeraldCore", 4)) - .fluidInputs(Materials.Enderium.getMolten(1440), Materials.Polybenzimidazole.getMolten(1584)) - .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 6)) - .eut(TierEU.RECIPE_LuV) - .duration(30 * SECONDS) - .addTo(AssemblyLine); - - // TFFTStorageField7 - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, new ItemStack(Blocks.tfftStorageField, 1, 6)) - .metadata(RESEARCH_TIME, 1 * HOURS + 6 * MINUTES + 40 * SECONDS) - .itemInputs( - ItemList.Casing_Tank_10.get(16), - GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.MelodicAlloy, 6), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.NetherStar, 3), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.OsmiumBars", 6), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.MysteriousCrystal, 6), - ItemList.Field_Generator_IV.get(16), - ItemList.Field_Generator_LuV.get(4), - ItemList.FluidRegulator_UV.get(1), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngineeringProcessorFluidEmeraldCore", 16)) - .fluidInputs(Materials.CrystallineAlloy.getMolten(2880), Materials.Polybenzimidazole.getMolten(2016)) - .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 7)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(AssemblyLine); - - // TFFTStorageField8 - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, new ItemStack(Blocks.tfftStorageField, 1, 7)) - .metadata(RESEARCH_TIME, 2 * HOURS + 40 * MINUTES) - .itemInputs( - ItemList.Quantum_Tank_IV.get(1), - GT_ModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.StellarAlloy, 6), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.StellarAlloy, 6), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.DraconiumAwakened, 3), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.NeutroniumBars", 6), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.InfinityCatalyst, 6), - ItemList.Field_Generator_ZPM.get(16), - ItemList.Field_Generator_UV.get(4), - new ItemStack(huiCircuit, 4, 2), - GT_ModHandler.getModItem(UniversalSingularities.ID, "universal.tinkersConstruct.singularity", 1, 4)) - .fluidInputs(Materials.CrystallinePinkSlime.getMolten(4320), new FluidStack(radoxPoly, 2880)) - .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 8)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, new ItemStack(Blocks.tfftStorageField, 1, 8)) - .metadata(RESEARCH_TIME, 2 * HOURS + 13 * MINUTES + 20 * SECONDS) - .itemInputs( - ItemList.Quantum_Tank_IV.get(4), - GT_ModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 2), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 6), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 6), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 3), - ItemList.EnergisedTesseract.get(1), - HYPOGEN.getRotor(6), - ItemList.Field_Generator_UHV.get(16), - ItemList.Field_Generator_UEV.get(4), - new ItemStack(huiCircuit, 4, 3), - GT_ModHandler.getModItem(UniversalSingularities.ID, "universal.tinkersConstruct.singularity", 1, 4)) - .fluidInputs(Materials.MelodicAlloy.getMolten(5760), new FluidStack(radoxPoly, 3456)) - .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 9)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(AssemblyLine); - - // TFFTStorageField10 - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, new ItemStack(Blocks.tfftStorageField, 1, 9)) - .metadata(RESEARCH_TIME, 2 * HOURS + 46 * MINUTES + 40 * SECONDS) - .itemInputs( - ItemList.Quantum_Tank_IV.get(16), - GT_ModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 4), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 6), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 6), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, MaterialsUEVplus.SpaceTime, 3), - ItemList.EnergisedTesseract.get(6), - GT_OreDictUnificator.get(OrePrefixes.rotor, MaterialsUEVplus.SpaceTime, 6), - ItemList.Field_Generator_UEV.get(16), - ItemList.Field_Generator_UIV.get(4), - new ItemStack(huiCircuit, 4, 4), - new ItemStack(huiCircuit, 4, 4), - GT_ModHandler.getModItem(EnderIO.ID, "itemBasicCapacitor", 64, 6), - GT_ModHandler.getModItem(EternalSingularity.ID, "eternal_singularity", 1)) - .fluidInputs(Materials.StellarAlloy.getMolten(7200), new FluidStack(radoxPoly, 4608)) - .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 10)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(AssemblyLine); - - // LuV Capacitor - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 1)) - .metadata(RESEARCH_TIME, 4 * HOURS) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmiridium, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Osmiridium, 24), - ItemList.Circuit_Board_Elite.get(1), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.NaquadahAlloy, 64), - new Object[] { OrePrefixes.circuit.get(Materials.LuV), 4 }, - ItemList.Circuit_Parts_Crystal_Chip_Master.get(36), - ItemList.Circuit_Parts_Crystal_Chip_Master.get(36), - ItemList.Circuit_Chip_HPIC.get(64), - ItemList.Circuit_Parts_DiodeASMD.get(8), - ItemList.Circuit_Parts_CapacitorASMD.get(8), - ItemList.Circuit_Parts_ResistorASMD.get(8), - ItemList.Circuit_Parts_TransistorASMD.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Platinum, 64)) - .fluidInputs(new FluidStack(solderIndalloy, 720)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 2)) - .duration(50 * SECONDS) - .eut(80_000) - .addTo(AssemblyLine); - - // ZPM Capacitor - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 2)) - .metadata(RESEARCH_TIME, 4 * HOURS) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.NaquadahAlloy, 24), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Europium, 16L), - new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 }, - ItemList.Energy_LapotronicOrb2.get(8L), - ItemList.Field_Generator_LuV.get(2), - ItemList.Circuit_Wafer_SoC2.get(64), - ItemList.Circuit_Wafer_SoC2.get(64), - ItemList.Circuit_Parts_DiodeASMD.get(8), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 32)) - .fluidInputs( - new FluidStack(solderIndalloy, 2880), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 16000)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 3)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(100_000) - .addTo(AssemblyLine); - - // UV Capacitor - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 3)) - .metadata(RESEARCH_TIME, 4 * HOURS) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 24), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Americium, 32L), - new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 }, - ItemList.Energy_Module.get(8L), - ItemList.Field_Generator_ZPM.get(2), - ItemList.Circuit_Wafer_HPIC.get(64), - ItemList.Circuit_Wafer_HPIC.get(64), - ItemList.Circuit_Parts_DiodeASMD.get(16), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.NaquadahAlloy, 32)) - .fluidInputs( - new FluidStack(solderIndalloy, 2880), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 16000)) - .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 4)) - .eut(200_000) - .duration(1 * MINUTES + 40 * SECONDS) - .addTo(AssemblyLine); - } -} diff --git a/src/main/java/common/recipeLoaders/ChemicalReactor.java b/src/main/java/common/recipeLoaders/ChemicalReactor.java deleted file mode 100644 index e874333c3e..0000000000 --- a/src/main/java/common/recipeLoaders/ChemicalReactor.java +++ /dev/null @@ -1,30 +0,0 @@ -package common.recipeLoaders; - -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; - -import common.items.MetaItem_CraftingComponent; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_Utility; -import kekztech.Items; - -public class ChemicalReactor implements Runnable { - - @Override - public void run() { - final MetaItem_CraftingComponent craftingItem = MetaItem_CraftingComponent.getInstance(); - - // Ceria Dust - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Cerium.getDust(1), GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(craftingItem.getStackOfAmountFromDamage(Items.CeriaDust.getMetaID(), 3)) - .fluidInputs(Materials.Oxygen.getGas(2000)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - } -} diff --git a/src/main/java/common/recipeLoaders/Crafting.java b/src/main/java/common/recipeLoaders/Crafting.java deleted file mode 100644 index 912a6a17e7..0000000000 --- a/src/main/java/common/recipeLoaders/Crafting.java +++ /dev/null @@ -1,72 +0,0 @@ -package common.recipeLoaders; - -import net.minecraft.item.ItemStack; - -import common.Blocks; -import common.TileEntities; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import util.Util; - -public class Crafting implements Runnable { - - @Override - public void run() { - // TFFT Controller - GT_ModHandler.addCraftingRecipe( - TileEntities.tfft.getStackForm(1), - new Object[] { "ESE", "FTF", "CVC", 'E', GT_OreDictUnificator.get(OrePrefixes.screw, Materials.EnderEye, 1), - 'S', ItemList.Cover_Screen.get(1), 'F', ItemList.Field_Generator_LV.get(1), 'T', - new ItemStack(Blocks.tfftStorageField, 1), 'C', "circuitData", 'V', - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.VibrantAlloy, 1), }); - - // SOFC Controller mk1 - final Object[] mk1_recipe = { "CCC", "PHP", "FBL", 'C', OrePrefixes.circuit.get(Materials.HV), 'P', - ItemList.Electric_Pump_HV.get(1L), 'H', ItemList.Hull_HV.get(1L), 'F', - GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.StainlessSteel, 1), 'B', - GT_OreDictUnificator.get(OrePrefixes.cableGt02, Materials.Gold, 1), 'L', - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.StainlessSteel, 1) }; - GT_ModHandler.addCraftingRecipe(TileEntities.sofc1.getStackForm(1), mk1_recipe); - - // SOFC Controller mk2 - final Object[] mk2_recipe = { "CCC", "PHP", "FBL", 'C', OrePrefixes.circuit.get(Materials.LuV), 'P', - ItemList.Electric_Pump_IV.get(1L), 'H', ItemList.Hull_IV.get(1L), 'F', - GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.Ultimate, 1), 'B', - Util.getStackofAmountFromOreDict("wireGt04SuperconductorEV", 1), 'L', - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Ultimate, 1) }; - GT_ModHandler.addCraftingRecipe(TileEntities.sofc2.getStackForm(1), mk2_recipe); - - // LSC Controller - final Object[] lsc_recipe = { "LPL", "CBC", "LPL", 'L', ItemList.IC2_LapotronCrystal.getWildcard(1L), 'P', - ItemList.Circuit_Chip_PIC.get(1L), 'C', OrePrefixes.circuit.get(Materials.LuV), 'B', - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 0), }; - GT_ModHandler.addCraftingRecipe(TileEntities.lsc.getStackForm(1), lsc_recipe); - - // LSC casing - final Object[] lcBase_recipe = { "WBW", "RLR", "WBW", 'W', OrePrefixes.plate.get(Materials.Tantalum), 'B', - OrePrefixes.frameGt.get(Materials.TungstenSteel), 'R', OrePrefixes.stickLong.get(Materials.TungstenSteel), - 'L', OrePrefixes.block.get(Materials.Lapis) }; - GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 0), lcBase_recipe); - - // Empty Capacitor - final Object[] lcEmpty_recipe = { "SLS", "L L", "SLS", 'S', OrePrefixes.screw.get(Materials.Lapis), 'L', - OrePrefixes.plate.get(Materials.Lapis) }; - GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 6), lcEmpty_recipe); - - // EV Capacitor - final Object[] lcEV_recipe = { "SLS", "LCL", "SLS", 'S', OrePrefixes.screw.get(Materials.Lapis), 'L', - OrePrefixes.plate.get(Materials.Lapis), 'C', GT_ModHandler.getIC2Item("lapotronCrystal", 1L, GT_Values.W) }; - GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 7), lcEV_recipe); - - // IV Capacitor - final Object[] lcIV_recipe = { "SLS", "LOL", "SLS", 'S', OrePrefixes.screw.get(Materials.Lapis), 'L', - OrePrefixes.plate.get(Materials.Lapis), 'O', ItemList.Energy_LapotronicOrb.get(1L) }; - GT_ModHandler.addCraftingRecipe(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 1), lcIV_recipe); - - } -} diff --git a/src/main/java/common/recipeLoaders/FormingPress.java b/src/main/java/common/recipeLoaders/FormingPress.java deleted file mode 100644 index d226ebf2a9..0000000000 --- a/src/main/java/common/recipeLoaders/FormingPress.java +++ /dev/null @@ -1,29 +0,0 @@ -package common.recipeLoaders; - -import static gregtech.api.recipe.RecipeMaps.formingPressRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import common.items.MetaItem_CraftingComponent; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.TierEU; -import kekztech.Items; - -public class FormingPress implements Runnable { - - @Override - public void run() { - final MetaItem_CraftingComponent craftingItem = MetaItem_CraftingComponent.getInstance(); - - // YSZ Ceramic Plate - GT_Values.RA.stdBuilder() - .itemInputs( - craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicDust.getMetaID(), 10), - ItemList.Shape_Mold_Plate.get(0)) - .itemOutputs(craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicPlate.getMetaID(), 1)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(formingPressRecipes); - } -} diff --git a/src/main/java/common/recipeLoaders/Mixer.java b/src/main/java/common/recipeLoaders/Mixer.java deleted file mode 100644 index 0fd329a01b..0000000000 --- a/src/main/java/common/recipeLoaders/Mixer.java +++ /dev/null @@ -1,48 +0,0 @@ -package common.recipeLoaders; - -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.item.ItemStack; - -import common.items.ErrorItem; -import common.items.MetaItem_CraftingComponent; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import kekztech.Items; - -public class Mixer implements Runnable { - - @Override - public void run() { - final MetaItem_CraftingComponent craftingItem = MetaItem_CraftingComponent.getInstance(); - - // YSZ Ceramic Dust - GT_Values.RA.stdBuilder() - .itemInputs( - Items.YttriaDust.getOreDictedItemStack(1), - Items.ZirconiaDust.getOreDictedItemStack(5), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicDust.getMetaID(), 6)) - .duration(20 * SECONDS) - .eut(96) - .addTo(mixerRecipes); - - // GDC Ceramic Dust - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator - .get(OrePrefixes.dust, Materials.Gadolinium, new ItemStack(ErrorItem.getInstance(), 1), 1), - craftingItem.getStackOfAmountFromDamage(Items.CeriaDust.getMetaID(), 9), - GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicDust.getMetaID(), 10)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(mixerRecipes); - } -} diff --git a/src/main/java/common/recipeLoaders/ResearchableAssemblyLine.java b/src/main/java/common/recipeLoaders/ResearchableAssemblyLine.java deleted file mode 100644 index 39e3a035b0..0000000000 --- a/src/main/java/common/recipeLoaders/ResearchableAssemblyLine.java +++ /dev/null @@ -1,134 +0,0 @@ -package common.recipeLoaders; - -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gtPlusPlus.core.material.ELEMENT.STANDALONE.DRAGON_METAL; -import static gtPlusPlus.core.material.ELEMENT.STANDALONE.HYPOGEN; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.technus.tectech.recipe.TT_recipeAdder; -import common.Blocks; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; - -public class ResearchableAssemblyLine implements Runnable { - - @Override - public void run() { - final Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null - ? FluidRegistry.getFluid("molten.mutatedlivingsolder") - : FluidRegistry.getFluid("molten.solderingalloy"); - - // Extremely Ultimate Capacitor (UEV) - TT_recipeAdder.addResearchableAssemblylineRecipe( - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 5), - 1200000, - 128, - (int) TierEU.RECIPE_UEV, - 16, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Infinity, 24), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.InfinityCatalyst, 32L), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.InfinityCatalyst, 32L), - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1 }, ItemList.ZPM3.get(8L), - ItemList.Field_Generator_UEV.get(4), ItemList.Circuit_Wafer_PPIC.get(64), - ItemList.Circuit_Wafer_PPIC.get(64), ItemList.Circuit_Wafer_SoC2.get(64), - ItemList.Circuit_Parts_DiodeXSMD.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 64) }, - new FluidStack[] { new FluidStack(solderUEV, 9216), Materials.Quantium.getMolten(18432), - Materials.Naquadria.getMolten(18432), Materials.SuperCoolant.getFluid(64000) }, - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 8), - 250 * 20, - (int) TierEU.RECIPE_UEV); - - // Insanely Ultimate Capacitor (UIV) - TT_recipeAdder.addResearchableAssemblylineRecipe( - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 8), - 24_000_000, - 1_280, - (int) TierEU.RECIPE_UIV, - 32, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.TranscendentMetal, 24), - HYPOGEN.getPlateDouble(32), HYPOGEN.getPlateDouble(32), - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, ItemList.ZPM4.get(8L), - ItemList.Field_Generator_UIV.get(4), ItemList.Circuit_Wafer_QPIC.get(64), - ItemList.Circuit_Wafer_QPIC.get(64), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RawPicoWafer", 64), - ItemList.Circuit_Parts_DiodeXSMD.get(64), ItemList.Circuit_Parts_InductorXSMD.get(32), - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUIV, 64) }, - new FluidStack[] { new FluidStack(solderUEV, 18_432), - new FluidStack(FluidRegistry.getFluid("molten.celestialtungsten"), 18432), - Materials.Quantium.getMolten(18_432), Materials.SuperCoolant.getFluid(128_000) }, - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 9), - 300 * 20, - (int) TierEU.RECIPE_UIV); - - // Mega Ultimate Capacitor (UMV) - TT_recipeAdder.addResearchableAssemblylineRecipe( - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 9), - 480_000_000, - 12_288, - (int) TierEU.RECIPE_UMV, - 64, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SpaceTime, 24), - DRAGON_METAL.getPlateDouble(32), DRAGON_METAL.getPlateDouble(32), - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, ItemList.ZPM5.get(8L), - ItemList.Field_Generator_UMV.get(4), ItemList.Circuit_Wafer_QPIC.get(64), - ItemList.Circuit_Wafer_QPIC.get(64), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 64), - ItemList.Circuit_Parts_DiodeXSMD.get(64), ItemList.Circuit_Parts_InductorXSMD.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 64) }, - new FluidStack[] { new FluidStack(solderUEV, 36_864), - new FluidStack(FluidRegistry.getFluid("molten.astraltitanium"), 36_864), - new FluidStack(FluidRegistry.getFluid("molten.celestialtungsten"), 36_864), - Materials.SuperCoolant.getFluid(256_000) }, - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 10), - 350 * 20, - (int) TierEU.RECIPE_UMV); - - // Ultimate Capacitor (UHV) - TT_recipeAdder.addResearchableAssemblylineRecipe( - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 4), - 12000, - 16, - 300000, - 3, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 4), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.CosmicNeutronium, 24), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 32L), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 32L), - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1 }, - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1 }, ItemList.ZPM2.get(8L), - ItemList.Field_Generator_UHV.get(4), ItemList.Circuit_Wafer_UHPIC.get(64), - ItemList.Circuit_Wafer_UHPIC.get(64), ItemList.Circuit_Wafer_SoC2.get(32), - ItemList.Circuit_Parts_DiodeASMD.get(64), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUHV, 64) }, - new FluidStack[] { new FluidStack(solderUEV, 4608), Materials.Naquadria.getMolten(9216), - new FluidStack(FluidRegistry.getFluid("ic2coolant"), 32000) }, - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 5), - 4000, - 1600000); - } -} diff --git a/src/main/java/common/recipeLoaders/Unpackager.java b/src/main/java/common/recipeLoaders/Unpackager.java deleted file mode 100644 index ec25f5c89c..0000000000 --- a/src/main/java/common/recipeLoaders/Unpackager.java +++ /dev/null @@ -1,200 +0,0 @@ -package common.recipeLoaders; - -import static gregtech.api.recipe.RecipeMaps.unpackagerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.item.ItemStack; - -import common.Blocks; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; - -public class Unpackager implements Runnable { - - @Override - public void run() { - - // TFFT Recycling - { - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 1)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CrudeSteel, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CrudeSteel, 6)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 2)) - .itemOutputs( - ItemList.Casing_Tank_1.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.EnergeticSilver, 6)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 3)) - .itemOutputs( - ItemList.Casing_Tank_3.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.VividAlloy, 6)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 4)) - .itemOutputs( - ItemList.Casing_Tank_5.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Enderium, 6)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 5)) - .itemOutputs( - ItemList.Casing_Tank_7.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CrystallineAlloy, 6)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 6)) - .itemOutputs( - ItemList.Casing_Tank_7.get(4), - GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.CrystallinePinkSlime, 6)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 7)) - .itemOutputs( - ItemList.Casing_Tank_10.get(16), - GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.MelodicAlloy, 6)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 8)) - .itemOutputs( - ItemList.Quantum_Tank_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.StellarAlloy, 12)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 9)) - .itemOutputs( - ItemList.Quantum_Tank_IV.get(4), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 12)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 10)) - .itemOutputs( - ItemList.Quantum_Tank_IV.get(16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 12)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - } - - // Capacitor recycling - { - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 7)) - .itemOutputs( - GT_ModHandler.getIC2Item("lapotronCrystal", 1L, 26), - new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 6)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 1)) - .itemOutputs(ItemList.Energy_LapotronicOrb.get(1L), new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 6)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 2)) - .itemOutputs( - ItemList.Energy_LapotronicOrb2.get(1L), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Osmiridium, 24)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 3)) - .itemOutputs( - ItemList.Energy_Module.get(1L), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.NaquadahAlloy, 24)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 4)) - .itemOutputs( - ItemList.Energy_Cluster.get(1L), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 24)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 5)) - .itemOutputs( - ItemList.ZPM3.get(1L), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.CosmicNeutronium, 24)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 8)) - .itemOutputs(ItemList.ZPM4.get(1L), GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Infinity, 24)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 9)) - .itemOutputs( - ItemList.ZPM5.get(1L), - GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.TranscendentMetal, 24)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 10)) - .itemOutputs( - ItemList.ZPM6.get(1L), - GT_OreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SpaceTime, 24)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(unpackagerRecipes); - - } - } -} diff --git a/src/main/java/common/tileentities/GTMTE_LapotronicSuperCapacitor.java b/src/main/java/common/tileentities/GTMTE_LapotronicSuperCapacitor.java deleted file mode 100644 index 6a25474959..0000000000 --- a/src/main/java/common/tileentities/GTMTE_LapotronicSuperCapacitor.java +++ /dev/null @@ -1,1214 +0,0 @@ -package common.tileentities; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onlyIf; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; -import static common.itemBlocks.IB_LapotronicEnergyUnit.EV_cap_storage; -import static common.itemBlocks.IB_LapotronicEnergyUnit.IV_cap_storage; -import static common.itemBlocks.IB_LapotronicEnergyUnit.LSC_time_between_wireless_rebalance_in_ticks; -import static common.itemBlocks.IB_LapotronicEnergyUnit.LSC_wireless_eu_cap; -import static common.itemBlocks.IB_LapotronicEnergyUnit.LuV_cap_storage; -import static common.itemBlocks.IB_LapotronicEnergyUnit.UEV_wireless_eu_cap; -import static common.itemBlocks.IB_LapotronicEnergyUnit.UIV_cap_storage; -import static common.itemBlocks.IB_LapotronicEnergyUnit.UIV_wireless_eu_cap; -import static common.itemBlocks.IB_LapotronicEnergyUnit.UMV_cap_storage; -import static common.itemBlocks.IB_LapotronicEnergyUnit.UMV_wireless_eu_cap; -import static common.itemBlocks.IB_LapotronicEnergyUnit.UV_cap_storage; -import static common.itemBlocks.IB_LapotronicEnergyUnit.ZPM_cap_storage; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.filterByMTEClass; -import static java.lang.Math.min; -import static util.Util.toPercentageFrom; -import static util.Util.toStandardForm; - -import java.math.BigInteger; -import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; -import java.util.Set; -import java.util.UUID; -import java.util.function.Consumer; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoTunnel; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyTunnel; -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.StructureUtility; -import com.gtnewhorizon.structurelib.util.ItemStackPredicate.NBTMode; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import common.Blocks; - -import client.gui.KT_UITextures; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.common.misc.WirelessNetworkManager; - -public class GTMTE_LapotronicSuperCapacitor - extends GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - private enum TopState { - MayBeTop, - Top, - NotTop - } - - private boolean canUseWireless = false; - private boolean wireless_mode = false; - private boolean not_processed_lsc = true; - private int counter = 1; - private boolean balanced = false; - - private final Queue energyInputValues = new LinkedList<>(); - private final Queue energyOutputValues = new LinkedList<>(); - - private final long max_passive_drain_eu_per_tick_per_uhv_cap = 1_000_000; - private final long max_passive_drain_eu_per_tick_per_uev_cap = 100_000_000; - private final long max_passive_drain_eu_per_tick_per_uiv_cap = (long) Math.pow(10, 10); - private final long max_passive_drain_eu_per_tick_per_umv_cap = (long) Math.pow(10, 12); - - private enum Capacitor { - - IV(2, BigInteger.valueOf(IV_cap_storage)), - LuV(3, BigInteger.valueOf(LuV_cap_storage)), - ZPM(4, BigInteger.valueOf(ZPM_cap_storage)), - UV(5, BigInteger.valueOf(UV_cap_storage)), - UHV(6, MAX_LONG), - None(0, BigInteger.ZERO), - EV(1, BigInteger.valueOf(EV_cap_storage)), - UEV(7, MAX_LONG), - UIV(8, BigInteger.valueOf(UIV_cap_storage)), - UMV(9, UMV_cap_storage); - - private final int minimalGlassTier; - private final BigInteger providedCapacity; - static final Capacitor[] VALUES = values(); - static final Capacitor[] VALUES_BY_TIER = Arrays.stream(values()) - .sorted(Comparator.comparingInt(Capacitor::getMinimalGlassTier)) - .toArray(Capacitor[]::new); - - Capacitor(int minimalGlassTier, BigInteger providedCapacity) { - this.minimalGlassTier = minimalGlassTier; - this.providedCapacity = providedCapacity; - } - - public int getMinimalGlassTier() { - return minimalGlassTier; - } - - public BigInteger getProvidedCapacity() { - return providedCapacity; - } - - public static int getIndexFromGlassTier(int glassTier) { - for (int index = 0; index < values().length; index++) { - if (values()[index].getMinimalGlassTier() == glassTier) { - return index; - } - } - return -1; - } - } - - private static final String STRUCTURE_PIECE_BASE = "base"; - private static final String STRUCTURE_PIECE_LAYER = "slice"; - private static final String STRUCTURE_PIECE_TOP = "top"; - private static final String STRUCTURE_PIECE_MID = "mid"; - private static final int GLASS_TIER_UNSET = -2; - - private static final Block LSC_PART = Blocks.lscLapotronicEnergyUnit; - private static final Item LSC_PART_ITEM = Item.getItemFromBlock(LSC_PART); - private static final int CASING_META = 0; - private static final int CASING_TEXTURE_ID = (42 << 7) | 127; - - private static final int DURATION_AVERAGE_TICKS = 100; - - // height channel for height. - // glass channel for glass - // capacitor channel for capacitor, but it really just pick whatever capacitor it can find in survival - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_BASE, - transpose( - new String[][] { { "bbbbb", "bbbbb", "bbbbb", "bbbbb", "bbbbb", }, - { "bb~bb", "bbbbb", "bbbbb", "bbbbb", "bbbbb", }, })) - .addShape( - STRUCTURE_PIECE_LAYER, - transpose(new String[][] { { "ggggg", "gcccg", "gcccg", "gcccg", "ggggg", }, })) - .addShape(STRUCTURE_PIECE_TOP, transpose(new String[][] { { "ggggg", "ggggg", "ggggg", "ggggg", "ggggg", }, })) - .addShape(STRUCTURE_PIECE_MID, transpose(new String[][] { { "ggggg", "gCCCg", "gCCCg", "gCCCg", "ggggg", }, })) - .addElement( - 'b', - buildHatchAdder(GTMTE_LapotronicSuperCapacitor.class) - .atLeast(LSCHatchElement.Energy, LSCHatchElement.Dynamo, Maintenance) - .hatchItemFilterAnd( - (t, h) -> ChannelDataAccessor.getChannelData(h, "glass") < 6 - ? filterByMTEClass( - ImmutableList.of( - GT_MetaTileEntity_Hatch_EnergyTunnel.class, - GT_MetaTileEntity_Hatch_DynamoTunnel.class)).negate() - : s -> true) - .casingIndex(CASING_TEXTURE_ID) - .dot(1) - .buildAndChain(onElementPass(te -> te.casingAmount++, ofBlock(LSC_PART, CASING_META)))) - .addElement( - 'g', - withChannel( - "glass", - BorosilicateGlass - .ofBoroGlass((byte) GLASS_TIER_UNSET, (te, t) -> te.glassTier = t, te -> te.glassTier))) - .addElement( - 'c', - ofChain( - onlyIf( - te -> te.topState != TopState.NotTop, - onElementPass( - te -> te.topState = TopState.Top, - withChannel( - "glass", - BorosilicateGlass.ofBoroGlass( - (byte) GLASS_TIER_UNSET, - (te, t) -> te.glassTier = t, - te -> te.glassTier)))), - onlyIf( - te -> te.topState != TopState.Top, - onElementPass( - te -> te.topState = TopState.NotTop, - new IStructureElement() { - - @Override - public boolean check(GTMTE_LapotronicSuperCapacitor t, World world, int x, int y, int z) { - Block worldBlock = world.getBlock(x, y, z); - int meta = worldBlock.getDamageValue(world, x, y, z); - if (LSC_PART != worldBlock || meta == 0) return false; - t.capacitors[meta - 1]++; - return true; - } - - private int getHint(ItemStack stack) { - return Capacitor.VALUES_BY_TIER[Math.min( - Capacitor.VALUES_BY_TIER.length, - ChannelDataAccessor.getChannelData(stack, "capacitor")) - 1].getMinimalGlassTier() - + 1; - } - - @Override - public boolean spawnHint(GTMTE_LapotronicSuperCapacitor t, World world, int x, int y, int z, - ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, LSC_PART, getHint(trigger)); - return true; - } - - @Override - public boolean placeBlock(GTMTE_LapotronicSuperCapacitor t, World world, int x, int y, - int z, ItemStack trigger) { - world.setBlock(x, y, z, LSC_PART, getHint(trigger), 3); - return true; - } - - @Override - public PlaceResult survivalPlaceBlock(GTMTE_LapotronicSuperCapacitor t, World world, int x, - int y, int z, ItemStack trigger, IItemSource source, EntityPlayerMP actor, - Consumer chatter) { - if (check(t, world, x, y, z)) return PlaceResult.SKIP; - int glassTier = ChannelDataAccessor.getChannelData(trigger, "glass") + 2; - ItemStack targetStack = source - .takeOne( - s -> s != null && s.stackSize >= 0 - && s.getItem() == LSC_PART_ITEM - && Capacitor.VALUES[Math.min(s.getItemDamage(), Capacitor.VALUES.length) - - 1].getMinimalGlassTier() > glassTier, - true); - if (targetStack == null) return PlaceResult.REJECT; - return StructureUtility.survivalPlaceBlock( - targetStack, - NBTMode.EXACT, - targetStack.stackTagCompound, - true, - world, - x, - y, - z, - source, - actor, - chatter); - } - })))) - .addElement('C', ofBlock(LSC_PART, 1)) - .build(); - - private static final BigInteger MAX_LONG = BigInteger.valueOf(Long.MAX_VALUE); - - private final Set mEnergyHatchesTT = new HashSet<>(); - private final Set mDynamoHatchesTT = new HashSet<>(); - private final Set mEnergyTunnelsTT = new HashSet<>(); - private final Set mDynamoTunnelsTT = new HashSet<>(); - /** - * Count the amount of capacitors of each tier in each slot. Index = meta - 1 - */ - private final int[] capacitors = new int[10]; - - private BigInteger capacity = BigInteger.ZERO; - private BigInteger stored = BigInteger.ZERO; - private long passiveDischargeAmount = 0; - private long inputLastTick = 0; - private long outputLastTick = 0; - private int repairStatusCache = 0; - - private byte glassTier = -1; - private int casingAmount = 0; - private TopState topState = TopState.MayBeTop; - - private long mMaxEUIn = 0; - private long mMaxEUOut = 0; - - public GTMTE_LapotronicSuperCapacitor(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GTMTE_LapotronicSuperCapacitor(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) { - return new GTMTE_LapotronicSuperCapacitor(super.mName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - private void processInputHatch(GT_MetaTileEntity_Hatch aHatch, int aBaseCasingIndex) { - mMaxEUIn += aHatch.maxEUInput() * aHatch.maxAmperesIn(); - aHatch.updateTexture(aBaseCasingIndex); - } - - private void processOutputHatch(GT_MetaTileEntity_Hatch aHatch, int aBaseCasingIndex) { - mMaxEUOut += aHatch.maxEUOutput() * aHatch.maxAmperesOut(); - aHatch.updateTexture(aBaseCasingIndex); - } - - private boolean addBottomHatches(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null || aTileEntity.isDead()) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (!(aMetaTileEntity instanceof GT_MetaTileEntity_Hatch)) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return GTMTE_LapotronicSuperCapacitor.this.mMaintenanceHatches - .add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - // Add GT hatches - final GT_MetaTileEntity_Hatch_Energy tHatch = ((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - processInputHatch(tHatch, aBaseCasingIndex); - return mEnergyHatches.add(tHatch); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyTunnel) { - // Add TT Laser hatches - final GT_MetaTileEntity_Hatch_EnergyTunnel tHatch = ((GT_MetaTileEntity_Hatch_EnergyTunnel) aMetaTileEntity); - processInputHatch(tHatch, aBaseCasingIndex); - return mEnergyTunnelsTT.add(tHatch); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { - // Add TT hatches - final GT_MetaTileEntity_Hatch_EnergyMulti tHatch = (GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity; - processInputHatch(tHatch, aBaseCasingIndex); - return mEnergyHatchesTT.add(tHatch); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { - // Add GT hatches - final GT_MetaTileEntity_Hatch_Dynamo tDynamo = (GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity; - processOutputHatch(tDynamo, aBaseCasingIndex); - return mDynamoHatches.add(tDynamo); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoTunnel) { - // Add TT Laser hatches - final GT_MetaTileEntity_Hatch_DynamoTunnel tDynamo = (GT_MetaTileEntity_Hatch_DynamoTunnel) aMetaTileEntity; - processOutputHatch(tDynamo, aBaseCasingIndex); - return mDynamoTunnelsTT.add(tDynamo); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoMulti) { - // Add TT hatches - final GT_MetaTileEntity_Hatch_DynamoMulti tDynamo = (GT_MetaTileEntity_Hatch_DynamoMulti) aMetaTileEntity; - processOutputHatch(tDynamo, aBaseCasingIndex); - return mDynamoHatchesTT.add(tDynamo); - } - return false; - } - - private int getUHVCapacitorCount() { - return capacitors[4]; - } - - private int getUEVCapacitorCount() { - return capacitors[7]; - } - - private int getUIVCapacitorCount() { - return capacitors[8]; - } - - private int getUMVCapacitorCount() { - return capacitors[9]; - } - - private int wirelessCapableCapacitors() { - return capacitors[4] + capacitors[7] + capacitors[8] + capacitors[9]; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Energy Storage") - .addInfo("Loses energy equal to 1% of the total capacity every 24 hours.") - .addInfo( - "Capped at " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(max_passive_drain_eu_per_tick_per_uhv_cap) - + EnumChatFormatting.GRAY - + " EU/t passive loss per " - + GT_Values.TIER_COLORS[9] - + GT_Values.VN[9] - + EnumChatFormatting.GRAY - + " capacitor.") - .addInfo( - "The passive loss increases " + EnumChatFormatting.DARK_RED - + "100" - + EnumChatFormatting.GRAY - + "-fold" - + " for every capacitor tier above.") - .addInfo("Passive loss is multiplied by the number of maintenance issues present.") - .addSeparator() - .addInfo("Glass shell has to be Tier - 3 of the highest capacitor tier.") - .addInfo( - GT_Values.TIER_COLORS[8] + GT_Values.VN[8] - + EnumChatFormatting.GRAY - + "-tier glass required for " - + EnumChatFormatting.BLUE - + "Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.GRAY - + " Laser Hatches.") - .addInfo("Add more or better capacitors to increase capacity.") - .addSeparator() - .addInfo("Wireless mode can be enabled by right clicking with a screwdriver.") - .addInfo( - "This mode can only be enabled if you have a " + GT_Values.TIER_COLORS[9] - + GT_Values.VN[9] - + EnumChatFormatting.GRAY - + "+ capacitor in the multiblock.") - .addInfo( - "When enabled every " + EnumChatFormatting.BLUE - + GT_Utility.formatNumbers(LSC_time_between_wireless_rebalance_in_ticks) - + EnumChatFormatting.GRAY - + " ticks the LSC will attempt to re-balance against your") - .addInfo("wireless EU network.") - .addInfo( - "If there is less than " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(LSC_wireless_eu_cap) - + EnumChatFormatting.GRAY - + "(" - + GT_Values.TIER_COLORS[9] - + GT_Values.VN[9] - + EnumChatFormatting.GRAY - + ") EU in the LSC") - .addInfo("it will withdraw from the network and add to the LSC.") - .addInfo("If there is more it will add the EU to the network and remove it from the LSC.") - .addInfo( - "The threshold increases " + EnumChatFormatting.DARK_RED - + "100" - + EnumChatFormatting.GRAY - + "-fold" - + " for every capacitor tier above.") - .addSeparator() - .beginVariableStructureBlock(5, 5, 4, 50, 5, 5, false) - .addStructureInfo("Modular height of 4-50 blocks.") - .addController("Front center bottom") - .addOtherStructurePart("Lapotronic Super Capacitor Casing", "5x2x5 base (at least 17x)") - .addOtherStructurePart( - "Lapotronic Capacitor (" + GT_Values.TIER_COLORS[4] - + GT_Values.VN[4] - + EnumChatFormatting.GRAY - + "-" - + GT_Values.TIER_COLORS[8] - + GT_Values.VN[8] - + EnumChatFormatting.GRAY - + "), Ultimate Capacitor (" - + GT_Values.TIER_COLORS[9] - + GT_Values.VN[9] - + EnumChatFormatting.GRAY - + "-" - + GT_Values.TIER_COLORS[12] - + GT_Values.VN[12] - + EnumChatFormatting.GRAY - + ")", - "Center 3x(1-47)x3 above base (9-423 blocks)") - .addStructureInfo( - "You can also use the Empty Capacitor to save materials if you use it for less than half the blocks") - .addOtherStructurePart("Borosilicate Glass (any)", "41-777x, Encase capacitor pillar") - .addEnergyHatch("Any casing") - .addDynamoHatch("Any casing") - .addOtherStructurePart( - "Laser Target/Source Hatches", - "Any casing, must be using " + GT_Values.TIER_COLORS[8] - + GT_Values.VN[8] - + EnumChatFormatting.GRAY - + "-tier glass") - .addStructureInfo("You can have several I/O Hatches") - .addSubChannelUsage("glass", "Borosilicate Glass Tier") - .addSubChannelUsage("capacitor", "Maximum Capacitor Tier") - .addSubChannelUsage("height", "Height of structure") - .addMaintenanceHatch("Any casing") - .toolTipFinisher("KekzTech"); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, - ForgeDirection forgeDirectionacing, int colorIndex, boolean aActive, boolean aRedstone) { - ITexture[] sTexture = new ITexture[] { - TextureFactory.of(BlockIcons.MACHINE_CASING_FUSION_GLASS, Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; - if (side == forgeDirectionacing && aActive) { - sTexture = new ITexture[] { TextureFactory - .of(BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW, Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; - } - return sTexture; - } - - private UUID global_energy_user_uuid; - - @Override - public void onPreTick(IGregTechTileEntity tileEntity, long aTick) { - super.onPreTick(tileEntity, aTick); - - // On first tick (aTick restarts from 0 upon world reload). - if (not_processed_lsc && tileEntity.isServerSide()) { - // Add user to wireless network. - WirelessNetworkManager.strongCheckOrAddUser(tileEntity.getOwnerUuid()); - - // Get team UUID. - global_energy_user_uuid = tileEntity.getOwnerUuid(); - - not_processed_lsc = false; - } - } - - @Override - public boolean isCorrectMachinePart(ItemStack stack) { - return true; - } - - @Override - public boolean checkRecipe(ItemStack stack) { - this.mProgresstime = 1; - this.mMaxProgresstime = 1; - this.mEUt = 0; - this.mEfficiencyIncrease = 10000; - return true; - } - - @Override - public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { - WirelessNetworkManager.strongCheckOrAddUser(thisController.getOwnerUuid()); - - // Reset capacitor counts - Arrays.fill(capacitors, 0); - // Clear TT hatches - mEnergyHatchesTT.clear(); - mDynamoHatchesTT.clear(); - mEnergyTunnelsTT.clear(); - mDynamoTunnelsTT.clear(); - - mMaxEUIn = 0; - mMaxEUOut = 0; - - glassTier = GLASS_TIER_UNSET; - casingAmount = 0; - - if (!checkPiece(STRUCTURE_PIECE_BASE, 2, 1, 0)) return false; - - if (casingAmount < 17) return false; - - topState = TopState.NotTop; // need at least one layer of capacitor to form, obviously - int layer = 2; - while (true) { - if (!checkPiece(STRUCTURE_PIECE_LAYER, 2, layer, 0)) return false; - layer++; - if (topState == TopState.Top) break; // top found, break out - topState = TopState.MayBeTop; - if (layer > 50) return false; // too many layers - } - - // Make sure glass tier is T-2 of the highest tier capacitor in the structure - // Count down from the highest tier until an entry is found - // Borosilicate glass after 5 are just recolours of 0 - for (int highestGlassTier = capacitors.length - 1; highestGlassTier >= 0; highestGlassTier--) { - int highestCapacitor = Capacitor.getIndexFromGlassTier(highestGlassTier); - if (capacitors[highestCapacitor] > 0) { - if (Capacitor.VALUES[highestCapacitor].getMinimalGlassTier() > glassTier) return false; - break; - } - } - - // Glass has to be at least UV-tier to allow TT Laser hatches - if (glassTier < 8) { - if (mEnergyTunnelsTT.size() > 0 || mDynamoTunnelsTT.size() > 0) return false; - } - - // Check if enough (more than 50%) non-empty caps - if (capacitors[5] > capacitors[0] + capacitors[1] - + capacitors[2] - + capacitors[3] - + getUHVCapacitorCount() - + capacitors[6] - + getUEVCapacitorCount() - + getUIVCapacitorCount() - + getUMVCapacitorCount()) return false; - - // Calculate total capacity - capacity = BigInteger.ZERO; - for (int i = 0; i < capacitors.length; i++) { - int count = capacitors[i]; - capacity = capacity.add( - Capacitor.VALUES[i].getProvidedCapacity() - .multiply(BigInteger.valueOf(count))); - } - // Calculate how much energy to void each tick - passiveDischargeAmount = recalculateLossWithMaintenance(getRepairStatus()); - return mMaintenanceHatches.size() == 1; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - int layer = min(stackSize.stackSize + 3, 50); - buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 2, 1, 0); - for (int i = 2; i < layer - 1; i++) buildPiece(STRUCTURE_PIECE_MID, stackSize, hintsOnly, 2, i, 0); - buildPiece(STRUCTURE_PIECE_TOP, stackSize, hintsOnly, 2, layer - 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { - if (mMachine) return -1; - int layer = Math.min(ChannelDataAccessor.getChannelData(stackSize, "height") + 3, 50); - int built; - built = survivialBuildPiece( - STRUCTURE_PIECE_BASE, - stackSize, - 2, - 1, - 0, - elementBudget, - source, - actor, - false, - true); - if (built >= 0) return built; - for (int i = 2; i < layer - 1; i++) built = survivialBuildPiece( - STRUCTURE_PIECE_MID, - stackSize, - 2, - i, - 0, - elementBudget, - source, - actor, - false, - true); - if (built >= 0) return built; - return survivialBuildPiece( - STRUCTURE_PIECE_TOP, - stackSize, - 2, - layer - 1, - 0, - elementBudget, - source, - actor, - false, - true); - } - - @Override - public boolean onRunningTick(ItemStack stack) { - // Reset I/O cache - inputLastTick = 0; - outputLastTick = 0; - - long temp_stored = 0L; - - // Draw energy from GT hatches - for (GT_MetaTileEntity_Hatch_Energy eHatch : super.mEnergyHatches) { - if (eHatch == null || !eHatch.isValid()) { - continue; - } - final long power = getPowerToDraw(eHatch.maxEUInput() * eHatch.maxAmperesIn()); - if (eHatch.getEUVar() >= power) { - eHatch.setEUVar(eHatch.getEUVar() - power); - temp_stored += power; - inputLastTick += power; - } - } - - // Output energy to GT hatches - for (GT_MetaTileEntity_Hatch_Dynamo eDynamo : super.mDynamoHatches) { - if (eDynamo == null || !eDynamo.isValid()) { - continue; - } - final long power = getPowerToPush(eDynamo.maxEUOutput() * eDynamo.maxAmperesOut()); - if (power <= eDynamo.maxEUStore() - eDynamo.getEUVar()) { - eDynamo.setEUVar(eDynamo.getEUVar() + power); - temp_stored -= power; - outputLastTick += power; - } - } - - // Draw energy from TT hatches - for (GT_MetaTileEntity_Hatch_EnergyMulti eHatch : mEnergyHatchesTT) { - if (eHatch == null || !eHatch.isValid()) { - continue; - } - final long power = getPowerToDraw(eHatch.maxEUInput() * eHatch.maxAmperesIn()); - if (eHatch.getEUVar() >= power) { - eHatch.setEUVar(eHatch.getEUVar() - power); - temp_stored += power; - inputLastTick += power; - } - } - - // Output energy to TT hatches - for (GT_MetaTileEntity_Hatch_DynamoMulti eDynamo : mDynamoHatchesTT) { - if (eDynamo == null || !eDynamo.isValid()) { - continue; - } - final long power = getPowerToPush(eDynamo.maxEUOutput() * eDynamo.maxAmperesOut()); - if (power <= eDynamo.maxEUStore() - eDynamo.getEUVar()) { - eDynamo.setEUVar(eDynamo.getEUVar() + power); - temp_stored -= power; - outputLastTick += power; - } - } - - // Draw energy from TT Laser hatches - for (GT_MetaTileEntity_Hatch_EnergyTunnel eHatch : mEnergyTunnelsTT) { - if (eHatch == null || !eHatch.isValid()) { - continue; - } - final long ttLaserWattage = eHatch.maxEUInput() * eHatch.Amperes - (eHatch.Amperes / 20); - final long power = getPowerToDraw(ttLaserWattage); - if (eHatch.getEUVar() >= power) { - eHatch.setEUVar(eHatch.getEUVar() - power); - temp_stored += power; - inputLastTick += power; - } - } - - // Output energy to TT Laser hatches - for (GT_MetaTileEntity_Hatch_DynamoTunnel eDynamo : mDynamoTunnelsTT) { - if (eDynamo == null || !eDynamo.isValid()) { - continue; - } - final long ttLaserWattage = eDynamo.maxEUOutput() * eDynamo.Amperes - (eDynamo.Amperes / 20); - final long power = getPowerToPush(ttLaserWattage); - if (power <= eDynamo.maxEUStore() - eDynamo.getEUVar()) { - eDynamo.setEUVar(eDynamo.getEUVar() + power); - temp_stored -= power; - outputLastTick += power; - } - } - - if (wirelessCapableCapacitors() <= 0) { - wireless_mode = false; - } - - // Every LSC_time_between_wireless_rebalance_in_ticks check against wireless network for re-balancing. - counter++; - if (wireless_mode && (counter >= LSC_time_between_wireless_rebalance_in_ticks)) { - - // Reset tick counter. - counter = rebalance(); - } - - // Lose some energy. - // Re-calculate if the repair status changed. - if (super.getRepairStatus() != repairStatusCache) { - passiveDischargeAmount = recalculateLossWithMaintenance(super.getRepairStatus()); - } - - // This will break if you transfer more than 2^63 EU/t, so don't do that. Thanks <3 - temp_stored -= passiveDischargeAmount; - stored = stored.add(BigInteger.valueOf(temp_stored)); - - // Check that the machine has positive EU stored. - stored = (stored.compareTo(BigInteger.ZERO) <= 0) ? BigInteger.ZERO : stored; - - IGregTechTileEntity tBMTE = this.getBaseMetaTileEntity(); - - tBMTE.injectEnergyUnits(ForgeDirection.UNKNOWN, inputLastTick, 1L); - tBMTE.drainEnergyUnits(ForgeDirection.UNKNOWN, outputLastTick, 1L); - - // Add I/O values to Queues - if (energyInputValues.size() > DURATION_AVERAGE_TICKS) { - energyInputValues.remove(); - } - energyInputValues.offer(inputLastTick); - - if (energyOutputValues.size() > DURATION_AVERAGE_TICKS) { - energyOutputValues.remove(); - } - - energyOutputValues.offer(outputLastTick); - - return true; - } - - private int rebalance() { - - balanced = true; - - // Find difference. - BigInteger transferred_eu = stored.subtract( - (LSC_wireless_eu_cap.multiply(BigInteger.valueOf(getUHVCapacitorCount()))) - .add(UEV_wireless_eu_cap.multiply(BigInteger.valueOf(getUEVCapacitorCount()))) - .add(UIV_wireless_eu_cap.multiply(BigInteger.valueOf(getUIVCapacitorCount()))) - .add(UMV_wireless_eu_cap.multiply(BigInteger.valueOf(getUMVCapacitorCount())))); - - if (transferred_eu.signum() == 1) { - inputLastTick += transferred_eu.longValue(); - } else { - outputLastTick += transferred_eu.longValue(); - } - - // If that difference can be added then do so. - if (WirelessNetworkManager.addEUToGlobalEnergyMap(global_energy_user_uuid, transferred_eu)) { - // If it succeeds there was sufficient energy so set the internal capacity as such. - stored = LSC_wireless_eu_cap.multiply(BigInteger.valueOf(getUHVCapacitorCount())) - .add( - UEV_wireless_eu_cap.multiply(BigInteger.valueOf(getUEVCapacitorCount())) - .add(UIV_wireless_eu_cap.multiply(BigInteger.valueOf(getUIVCapacitorCount()))) - .add(UMV_wireless_eu_cap.multiply(BigInteger.valueOf(getUMVCapacitorCount())))); - } - - return 1; - } - - /** - * To be called whenever the maintenance status changes or the capacity was recalculated - * - * @param repairStatus This machine's repair status - * @return new BigInteger instance for passiveDischargeAmount - */ - private long recalculateLossWithMaintenance(int repairStatus) { - repairStatusCache = repairStatus; - - long temp_capacity_divided = 0; - - if (wirelessCapableCapacitors() == 0) { - temp_capacity_divided = capacity.divide(BigInteger.valueOf(100L * 86400L * 20L)) - .longValue(); - } - - // Passive loss is multiplied by number of UHV+ caps. Minimum of 1 otherwise loss is 0 for non-UHV+ caps - // calculations. - if (wirelessCapableCapacitors() != 0) { - temp_capacity_divided = getUHVCapacitorCount() * max_passive_drain_eu_per_tick_per_uhv_cap - + getUEVCapacitorCount() * max_passive_drain_eu_per_tick_per_uev_cap - + getUIVCapacitorCount() * max_passive_drain_eu_per_tick_per_uiv_cap - + getUMVCapacitorCount() * max_passive_drain_eu_per_tick_per_umv_cap; - } - - // Passive loss is multiplied by number of maintenance issues. - long total_passive_loss = temp_capacity_divided * (getIdealStatus() - repairStatus + 1); - - // Maximum of 100,000 EU/t drained per UHV cell. The logic is 1% of EU capacity should be drained every 86400 - // seconds (1 day). - return total_passive_loss; - } - - /** - * Calculate how much EU to draw from an Energy Hatch - * - * @param hatchWatts Hatch amperage * voltage - * @return EU amount - */ - private long getPowerToDraw(long hatchWatts) { - final BigInteger remcapActual = capacity.subtract(stored); - final BigInteger recampLimited = (MAX_LONG.compareTo(remcapActual) > 0) ? remcapActual : MAX_LONG; - return min(hatchWatts, recampLimited.longValue()); - } - - /** - * Calculate how much EU to push into a Dynamo Hatch - * - * @param hatchWatts Hatch amperage * voltage - * @return EU amount - */ - private long getPowerToPush(long hatchWatts) { - final BigInteger remStoredLimited = (MAX_LONG.compareTo(stored) > 0) ? stored : MAX_LONG; - return min(hatchWatts, remStoredLimited.longValue()); - } - - private long getAvgIn() { - long sum = 0L; - for (long l : energyInputValues) { - sum += l; - } - return sum / Math.max(energyInputValues.size(), 1); - } - - private long getAvgOut() { - long sum = 0L; - for (long l : energyOutputValues) { - sum += l; - } - return sum / Math.max(energyOutputValues.size(), 1); - } - - @Override - public String[] getInfoData() { - NumberFormat nf = NumberFormat.getNumberInstance(); - int secInterval = DURATION_AVERAGE_TICKS / 20; - - // Caching avgin and avgout - double avgIn = getAvgIn(); - double avgOut = getAvgOut(); - - final ArrayList ll = new ArrayList<>(); - ll.add(EnumChatFormatting.YELLOW + "Operational Data:" + EnumChatFormatting.RESET); - ll.add("EU Stored: " + nf.format(stored) + " EU"); - ll.add("EU Stored: " + toStandardForm(stored) + " EU"); - ll.add("Used Capacity: " + toPercentageFrom(stored, capacity)); - ll.add("Total Capacity: " + nf.format(capacity) + " EU"); - ll.add("Total Capacity: " + toStandardForm(capacity) + " EU"); - ll.add("Passive Loss: " + nf.format(passiveDischargeAmount) + " EU/t"); - ll.add("EU IN: " + GT_Utility.formatNumbers(inputLastTick) + " EU/t"); - ll.add("EU OUT: " + GT_Utility.formatNumbers(outputLastTick) + " EU/t"); - ll.add("Avg EU IN: " + nf.format(avgIn) + " (last " + secInterval + " seconds)"); - ll.add("Avg EU OUT: " + nf.format(avgOut) + " (last " + secInterval + " seconds)"); - - // Check if the system is charging or discharging - if (avgIn > avgOut) { - // Calculate time to full if charging - if (avgIn != 0) { - double timeToFull = (capacity.longValue() - stored.longValue()) / avgIn / 20; - String timeToFullString = formatTime(timeToFull); - ll.add("Time to Full: " + timeToFullString); - } - } else { - // Calculate time to empty if discharging - if (avgOut != 0) { - double timeToEmpty = stored.longValue() / avgOut / 20; - String timeToEmptyString = formatTime(timeToEmpty); - ll.add("Time to Empty: " + timeToEmptyString); - } - } - ll.add( - "Maintenance Status: " + ((super.getRepairStatus() == super.getIdealStatus()) - ? EnumChatFormatting.GREEN + "Working perfectly" + EnumChatFormatting.RESET - : EnumChatFormatting.RED + "Has Problems" + EnumChatFormatting.RESET)); - ll.add( - "Wireless mode: " + (wireless_mode ? EnumChatFormatting.GREEN + "enabled" + EnumChatFormatting.RESET - : EnumChatFormatting.RED + "disabled" + EnumChatFormatting.RESET)); - ll.add( - GT_Values.TIER_COLORS[9] + GT_Values.VN[9] - + EnumChatFormatting.RESET - + " Capacitors detected: " - + getUHVCapacitorCount()); - ll.add( - GT_Values.TIER_COLORS[10] + GT_Values.VN[10] - + EnumChatFormatting.RESET - + " Capacitors detected: " - + getUEVCapacitorCount()); - ll.add( - GT_Values.TIER_COLORS[11] + GT_Values.VN[11] - + EnumChatFormatting.RESET - + " Capacitors detected: " - + getUIVCapacitorCount()); - ll.add( - GT_Values.TIER_COLORS[12] + GT_Values.VN[12] - + EnumChatFormatting.RESET - + " Capacitors detected: " - + getUMVCapacitorCount()); - ll.add( - "Total wireless EU: " + EnumChatFormatting.RED - + nf.format(WirelessNetworkManager.getUserEU(global_energy_user_uuid)) - + " EU"); - ll.add( - "Total wireless EU: " + EnumChatFormatting.RED - + toStandardForm(WirelessNetworkManager.getUserEU(global_energy_user_uuid)) - + " EU"); - - final String[] a = new String[ll.size()]; - return ll.toArray(a); - } - - // Method to format time in seconds, minutes, days, and years - private String formatTime(double time) { - if (time < 1) { - return "Completely " + (time < 0 ? "empty" : "full"); - } else if (time < 60) { - return String.format("%.2f seconds", time); - } else if (time < 3600) { - return String.format("%.2f minutes", time / 60); - } else if (time < 86400) { - return String.format("%.2f hours", time / 3600); - } else if (time < 31536000) { - return String.format("%.2f days", time / 86400); - } else { - return String.format("%.2f years", time / 31536000); - } - } - - @Override - public void saveNBTData(NBTTagCompound nbt) { - nbt = (nbt == null) ? new NBTTagCompound() : nbt; - - nbt.setByteArray("capacity", capacity.toByteArray()); - nbt.setByteArray("stored", stored.toByteArray()); - nbt.setBoolean("wireless_mode", wireless_mode); - nbt.setInteger("wireless_mode_cooldown", counter); - - super.saveNBTData(nbt); - } - - @Override - public void loadNBTData(NBTTagCompound nbt) { - nbt = (nbt == null) ? new NBTTagCompound() : nbt; - - capacity = new BigInteger(nbt.getByteArray("capacity")); - stored = new BigInteger(nbt.getByteArray("stored")); - wireless_mode = nbt.getBoolean("wireless_mode"); - counter = nbt.getInteger("wireless_mode_cooldown"); - - super.loadNBTData(nbt); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack stack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack stack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack stack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack stack) { - return false; - } - - // called by the getEUCapacity() function in BaseMetaTileEntity - @Override - public long maxEUStore() { - return capacity.longValue(); - } - - // called by the getEUStored() function in BaseMetaTileEntity - @Override - public long getEUVar() { - return stored.longValue(); - } - - /* - * all of these are needed for the injectEnergyUnits() and drainEnergyUnits() in IGregTechTileEntity - */ - @Override - public long maxEUInput() { - if (wireless_mode) { - return Long.MAX_VALUE; - } else { - return mMaxEUIn; - } - } - - @Override - public long maxAmperesIn() { - return 1L; - } - - @Override - public long maxEUOutput() { - if (wireless_mode) { - return Long.MAX_VALUE; - } else { - return mMaxEUOut; - } - } - - @Override - public long maxAmperesOut() { - return 1L; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - protected boolean canUseWireless() { - return wirelessCapableCapacitors() != 0; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (canUseWireless()) { - wireless_mode = !wireless_mode; - GT_Utility.sendChatToPlayer(aPlayer, "Wireless network mode " + (wireless_mode ? "enabled." : "disabled.")); - } else { - GT_Utility.sendChatToPlayer( - aPlayer, - "Wireless mode cannot be enabled without at least 1 " + GT_Values.TIER_COLORS[9] - + GT_Values.VN[9] - + EnumChatFormatting.RESET - + "+ capacitor."); - wireless_mode = false; - } - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient()) { - canUseWireless = canUseWireless(); - } - if (canUseWireless) { - wireless_mode = !wireless_mode; - } - }) - .setPlayClickSound(true) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - if (canUseWireless) { - if (wireless_mode) { - ret.add(KT_UITextures.OVERLAY_BUTTON_WIRELESS_ON); - } else { - ret.add(KT_UITextures.OVERLAY_BUTTON_WIRELESS_OFF); - } - } else { - ret.add(KT_UITextures.OVERLAY_BUTTON_WIRELESS_OFF_DISABLED); - } - return ret.toArray(new IDrawable[0]); - }) - .setPos(80, 91) - .setSize(16, 16) - .addTooltip(StatCollector.translateToLocal("gui.kekztech_lapotronicenergyunit.wireless")) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> wireless_mode, val -> wireless_mode = val)) - .widget(new FakeSyncWidget.BooleanSyncer(this::canUseWireless, val -> canUseWireless = val)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (mMachine && wireless_mode && canUseWireless && !balanced) { - counter = rebalance(); - } - }) - .setPlayClickSound(true) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - ret.add(KT_UITextures.OVERLAY_BUTTON_WIRELESS_REBALANCE); - return ret.toArray(new IDrawable[0]); - }) - .setPos(98, 91) - .setSize(16, 16) - .setEnabled((widget) -> wireless_mode && canUseWireless && !balanced) - .addTooltip(StatCollector.translateToLocal("gui.kekztech_lapotronicenergyunit.wireless_rebalance")) - .setTooltipShowUpDelay(TOOLTIP_DELAY)); - } - - private enum LSCHatchElement implements IHatchElement { - - Energy(GT_MetaTileEntity_Hatch_EnergyMulti.class, GT_MetaTileEntity_Hatch_Energy.class) { - - @Override - public long count(GTMTE_LapotronicSuperCapacitor t) { - return t.mEnergyHatches.size() + t.mEnergyHatchesTT.size() + t.mEnergyTunnelsTT.size(); - } - }, - Dynamo(GT_MetaTileEntity_Hatch_DynamoMulti.class, GT_MetaTileEntity_Hatch_Dynamo.class) { - - @Override - public long count(GTMTE_LapotronicSuperCapacitor t) { - return t.mDynamoHatches.size() + t.mDynamoHatchesTT.size() + t.mDynamoTunnelsTT.size(); - } - },; - - private final List> mteClasses; - - @SafeVarargs - LSCHatchElement(Class... mteClasses) { - this.mteClasses = Arrays.asList(mteClasses); - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - @Override - public IGT_HatchAdder adder() { - return GTMTE_LapotronicSuperCapacitor::addBottomHatches; - } - } -} diff --git a/src/main/java/common/tileentities/GTMTE_SOFuelCellMK1.java b/src/main/java/common/tileentities/GTMTE_SOFuelCellMK1.java deleted file mode 100644 index 8ec9d43ddd..0000000000 --- a/src/main/java/common/tileentities/GTMTE_SOFuelCellMK1.java +++ /dev/null @@ -1,221 +0,0 @@ -package common.tileentities; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_GLOW; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; - -import java.util.ArrayList; -import java.util.Collection; - -import javax.annotation.Nonnull; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import common.Blocks; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -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_EnhancedMultiBlockBase; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GTMTE_SOFuelCellMK1 extends GT_MetaTileEntity_EnhancedMultiBlockBase { - - private final int OXYGEN_PER_SEC = 100; - private final int EU_PER_TICK = 2048; - private final int STEAM_PER_SEC = 20000; - - public GTMTE_SOFuelCellMK1(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GTMTE_SOFuelCellMK1(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) { - return new GTMTE_SOFuelCellMK1(super.mName); - } - - private int mCasing = 0; - - private static final int CASING_TEXTURE_ID = 49; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { "ccc", "ccc", "ccc", "ccc", "ccc" }, { "c~c", "geg", "geg", "geg", "cdc" }, - { "ccc", "ccc", "ccc", "ccc", "ccc" } })) - .addElement( - 'c', - ofChain( - onElementPass(te -> te.mCasing++, ofBlock(GregTech_API.sBlockCasings4, 1)), - ofHatchAdder(GTMTE_SOFuelCellMK1::addInputToMachineList, CASING_TEXTURE_ID, 1), - ofHatchAdder(GTMTE_SOFuelCellMK1::addMaintenanceToMachineList, CASING_TEXTURE_ID, 1), - ofHatchAdder(GTMTE_SOFuelCellMK1::addOutputToMachineList, CASING_TEXTURE_ID, 1))) - .addElement('d', ofHatchAdder(GTMTE_SOFuelCellMK1::addDynamoToMachineList, CASING_TEXTURE_ID, 1)) - .addElement('g', ofBlockAnyMeta(GameRegistry.findBlock("IC2", "blockAlloyGlass"))) - .addElement('e', ofBlockAnyMeta(Blocks.yszUnit)) - .build(); - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Gas Turbine") - .addInfo("Oxidizes gas fuels to generate electricity without polluting the environment") - .addInfo( - "Consumes up to " + GT_Utility.formatNumbers(EU_PER_TICK * 20) - + "EU worth of fuel with up to 100% efficiency each second") - .addInfo("Steam production requires the SOFC to heat up completely first") - .addInfo("Outputs " + EU_PER_TICK + "EU/t and " + STEAM_PER_SEC + "L/s Steam") - .addInfo("Additionally, requires " + OXYGEN_PER_SEC + "L/s Oxygen gas") - .addSeparator() - .beginStructureBlock(3, 3, 5, false) - .addController("Front center") - .addCasingInfoMin("Clean Stainless Steel Casing", 12, false) - .addOtherStructurePart("YSZ Ceramic Electrolyte Unit", "3x, Center 1x1x3") - .addOtherStructurePart("Reinforced Glass", "6x, touching the electrolyte units on the horizontal sides") - .addDynamoHatch("Back center", 1) - .addMaintenanceHatch("Any casing") - .addInputHatch("Fuel, any casing") - .addInputHatch("Oxygen, any casing") - .addOutputHatch("Steam, any casing") - .toolTipFinisher("KekzTech"); - return tt; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int colorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID) }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack stack) { - return true; - } - - @Nonnull - @Override - public CheckRecipeResult checkProcessing() { - final ArrayList storedFluids = super.getStoredFluids(); - Collection recipeList = RecipeMaps.gasTurbineFuels.getAllRecipes(); - - for (FluidStack hatchFluid : storedFluids) { - for (GT_Recipe aFuel : recipeList) { - FluidStack liquid; - if ((liquid = GT_Utility.getFluidForFilledItem(aFuel.getRepresentativeInput(0), true)) != null - && hatchFluid.isFluidEqual(liquid)) { - - liquid.amount = (EU_PER_TICK * 20) / aFuel.mSpecialValue; - - if (super.depleteInput(liquid)) { - - if (!super.depleteInput(Materials.Oxygen.getGas(OXYGEN_PER_SEC))) { - super.mEUt = 0; - super.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - super.mEUt = EU_PER_TICK; - super.mMaxProgresstime = 20; - super.mEfficiencyIncrease = 40; - if (super.mEfficiency == getMaxEfficiency(null)) { - super.addOutput(GT_ModHandler.getSteam(STEAM_PER_SEC)); - } - return CheckRecipeResultRegistry.GENERATING; - } - } - } - } - - super.mEUt = 0; - super.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - @Override - public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { - this.mCasing = 0; - - if (!checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 0)) return false; - - return (this.mCasing >= 12 && this.mMaintenanceHatches.size() == 1 && this.mInputHatches.size() >= 2); - } - - @Override - public int getMaxEfficiency(ItemStack stack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack stack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack stack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack stack) { - return false; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 1, 1, 0); - } -} diff --git a/src/main/java/common/tileentities/GTMTE_SOFuelCellMK2.java b/src/main/java/common/tileentities/GTMTE_SOFuelCellMK2.java deleted file mode 100644 index 01150ab910..0000000000 --- a/src/main/java/common/tileentities/GTMTE_SOFuelCellMK2.java +++ /dev/null @@ -1,222 +0,0 @@ -package common.tileentities; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_GLOW; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; - -import java.util.ArrayList; -import java.util.Collection; - -import javax.annotation.Nonnull; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import common.Blocks; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -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_EnhancedMultiBlockBase; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GTMTE_SOFuelCellMK2 extends GT_MetaTileEntity_EnhancedMultiBlockBase { - - private final int OXYGEN_PER_SEC = 2000; - private final int EU_PER_TICK = 24576; // 100% Efficiency, 3A IV - private final int STEAM_PER_SEC = 96000; // SH Steam (10,800EU/t @ 150% Efficiency) - - public GTMTE_SOFuelCellMK2(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GTMTE_SOFuelCellMK2(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) { - return new GTMTE_SOFuelCellMK2(super.mName); - } - - private int mCasing = 0; - - private static final int CASING_TEXTURE_ID = 48; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { "ccc", "ccc", "ccc", "ccc", "ccc" }, { "c~c", "geg", "geg", "geg", "cdc" }, - { "ccc", "ccc", "ccc", "ccc", "ccc" } })) - .addElement( - 'c', - ofChain( - onElementPass(te -> te.mCasing++, ofBlock(GregTech_API.sBlockCasings4, 0)), - ofHatchAdder(GTMTE_SOFuelCellMK2::addInputToMachineList, CASING_TEXTURE_ID, 1), - ofHatchAdder(GTMTE_SOFuelCellMK2::addMaintenanceToMachineList, CASING_TEXTURE_ID, 1), - ofHatchAdder(GTMTE_SOFuelCellMK2::addOutputToMachineList, CASING_TEXTURE_ID, 1))) - .addElement('d', ofHatchAdder(GTMTE_SOFuelCellMK2::addDynamoToMachineList, CASING_TEXTURE_ID, 1)) - .addElement('g', ofBlockAnyMeta(GameRegistry.findBlock("IC2", "blockAlloyGlass"))) - .addElement('e', ofBlockAnyMeta(Blocks.gdcUnit)) - .build(); - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Gas Turbine") - .addInfo("Oxidizes gas fuels to generate electricity without polluting the environment") - .addInfo( - "Consumes up to " + GT_Utility.formatNumbers(EU_PER_TICK * 20) - + "EU worth of fuel with up to 100% efficiency each second") - .addInfo("Nitrobenzene and other gas fuels above 1M EU/bucket are more efficient") - .addInfo("Steam production requires the SOFC to heat up completely first") - .addInfo("Outputs " + EU_PER_TICK + "EU/t and " + STEAM_PER_SEC + "L/s Steam") - .addInfo("Additionally, requires " + OXYGEN_PER_SEC + "L/s Oxygen gas") - .addSeparator() - .beginStructureBlock(3, 3, 5, false) - .addController("Front center") - .addCasingInfoMin("Robust Tungstensteel Machine Casing", 12, false) - .addOtherStructurePart("GDC Ceramic Electrolyte Unit", "3x, Center 1x1x3") - .addOtherStructurePart("Reinforced Glass", "6x, touching the electrolyte units on the horizontal sides") - .addDynamoHatch("Back center", 1) - .addMaintenanceHatch("Any casing") - .addInputHatch("Fuel, any casing") - .addInputHatch("Oxygen, any casing") - .addOutputHatch("Superheated Steam, any casing") - .toolTipFinisher("KekzTech"); - return tt; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int colorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID) }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack stack) { - return true; - } - - @Nonnull - @Override - public CheckRecipeResult checkProcessing() { - final ArrayList storedFluids = super.getStoredFluids(); - Collection recipeList = RecipeMaps.gasTurbineFuels.getAllRecipes(); - - for (FluidStack hatchFluid : storedFluids) { - for (GT_Recipe aFuel : recipeList) { - FluidStack liquid; - if ((liquid = GT_Utility.getFluidForFilledItem(aFuel.getRepresentativeInput(0), true)) != null - && hatchFluid.isFluidEqual(liquid)) { - - liquid.amount = (EU_PER_TICK * 20) / aFuel.mSpecialValue / Math.max(1, aFuel.mSpecialValue / 1000); - - if (super.depleteInput(liquid)) { - - if (!super.depleteInput(Materials.Oxygen.getGas(OXYGEN_PER_SEC))) { - super.mEUt = 0; - super.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - super.mEUt = EU_PER_TICK; - super.mMaxProgresstime = 20; - super.mEfficiencyIncrease = 80; - if (super.mEfficiency == getMaxEfficiency(null)) { - super.addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", STEAM_PER_SEC)); - } - return CheckRecipeResultRegistry.GENERATING; - } - } - } - } - - super.mEUt = 0; - super.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - @Override - public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { - this.mCasing = 0; - - if (!checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 0)) return false; - - return (this.mCasing >= 12 && this.mMaintenanceHatches.size() == 1 && this.mInputHatches.size() >= 2); - } - - @Override - public int getMaxEfficiency(ItemStack stack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack stack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack stack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack stack) { - return false; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 1, 1, 0); - } -} diff --git a/src/main/java/common/tileentities/GTMTE_TFFT.java b/src/main/java/common/tileentities/GTMTE_TFFT.java deleted file mode 100644 index 18867c0656..0000000000 --- a/src/main/java/common/tileentities/GTMTE_TFFT.java +++ /dev/null @@ -1,787 +0,0 @@ -package common.tileentities; - -import static com.github.bartimaeusnek.bartworks.util.BW_Util.ofGlassTieredMixed; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockUnlocalizedName; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static java.lang.Math.min; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.math.BigInteger; -import java.text.MessageFormat; -import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import net.minecraft.block.Block; -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.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; - -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureUtility; -import com.gtnewhorizon.structurelib.util.ItemStackPredicate; -import common.Blocks; - -import gregtech.api.enums.Textures; -import gregtech.api.fluid.FluidTankGT; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.common.items.GT_IntegratedCircuit_Item; - -public class GTMTE_TFFT extends GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - public enum Field { - - T1(1_000_000L, 1), // LV - T2(4_000_000L, 2), // MV - T3(16_000_000L, 5), // HV - T4(64_000_000L, 14), // EV - T5(256_000_000L, 42), // IV - - T6(2_048_000_000L, 132), // LuV - T7(131_072_000_000L, 429), // UV - T8(8_388_608_000_000L, 1430), // UEV - T9(536_870_912_000_000L, 4862), // UMV - - T10(1_099_511_627_776_000_000L, 0); // UXV - - public static final GTMTE_TFFT.Field[] VALUES = values(); - private final long capacity; - private final int cost; - - Field(long capacity, int cost) { - this.capacity = capacity; - this.cost = cost; - } - - public long getCapacity() { - return capacity; - } - - public int getCost() { - return cost; - } - } - - private enum TFFTMultiHatch implements IHatchElement { - - INSTANCE; - - private final List> mteClasses; - - @SafeVarargs - TFFTMultiHatch(Class... mteClasses) { - this.mteClasses = Arrays.asList(mteClasses); - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - @Override - public IGT_HatchAdder adder() { - return GTMTE_TFFT::addMultiHatchToMachineList; - } - - @Override - public long count(GTMTE_TFFT t) { - return t.tfftHatch == null ? 0 : 1; - } - } - - private enum TFFTStorageFieldElement implements IStructureElement { - - INSTANCE; - - @Override - public boolean check(GTMTE_TFFT t, World world, int x, int y, int z) { - Block worldBlock = world.getBlock(x, y, z); - int meta = worldBlock.getDamageValue(world, x, y, z); - if (TFFT_FIELD != worldBlock || meta == 0) return false; - t.FIELDS[meta - 1]++; - return true; - } - - private int getHint(ItemStack stack) { - return Math.min(Field.VALUES.length, ChannelDataAccessor.getChannelData(stack, "field")); - } - - @Override - public boolean spawnHint(GTMTE_TFFT t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, TFFT_FIELD, getHint(trigger)); - return true; - } - - @Override - public boolean placeBlock(GTMTE_TFFT t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x, y, z, TFFT_FIELD, getHint(trigger), 3); - return true; - } - - @Override - public PlaceResult survivalPlaceBlock(GTMTE_TFFT t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - if (check(t, world, x, y, z)) return PlaceResult.SKIP; - int fieldTier = getHint(trigger); - ItemStack result = env.getSource() - .takeOne( - s -> s != null && s.stackSize >= 0 - && s.getItem() == TFFT_FIELD_ITEM - && s.getItemDamage() != CASING_META - && s.getItemDamage() <= fieldTier, - true); - if (result == null) return PlaceResult.REJECT; - - return StructureUtility.survivalPlaceBlock( - result, - ItemStackPredicate.NBTMode.EXACT, - null, - true, - world, - x, - y, - z, - env.getSource(), - env.getActor(), - env.getChatter()); - } - } - - private static final IIconContainer TEXTURE_TFFT = new Textures.BlockIcons.CustomIcon("iconsets/TFFT"); - private static final IIconContainer TEXTURE_TFFT_ACTIVE = new Textures.BlockIcons.CustomIcon( - "iconsets/TFFT_ACTIVE"); - private static final IIconContainer TEXTURE_TFFT_ACTIVE_GLOW = new Textures.BlockIcons.CustomIcon( - "iconsets/TFFT_ACTIVE_GLOW"); - private static final int CASING_TEXTURE_ID_1 = (12 << 7) | 127; - private static final int CASING_TEXTURE_ID_2 = 176; - - private static final Block TFFT_FIELD = Blocks.tfftStorageField; - private static final Item TFFT_FIELD_ITEM = Item.getItemFromBlock(TFFT_FIELD); - public static final int MAX_DISTINCT_FLUIDS = 25; - private static final BigInteger MAX_CAPACITY = BigInteger.valueOf(Long.MAX_VALUE) - .multiply(BigInteger.valueOf(25)); - private static final int CASING_META = 0; - private static final int MIN_CASING_AMOUNT = 20; - private static final int MAX_LAYER_AMOUNT = 13; - private static final int DEFAULT_LAYER_AMOUNT = 3; - - private static final String STRUCTURE_PIECE_TOP = "top"; - private static final String STRUCTURE_PIECE_MID = "mid"; - private static final String STRUCTURE_PIECE_BOTTOM = "bottom"; - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return description; - } - - private static final String[] description = new String[] { - translateToLocal("tile.kekztech_tfftstoragefield_block.hint.1"), // Casing - translateToLocal("tile.kekztech_tfftstoragefield_block.hint.2"), // Casing, Maintenance Hatch, T.F.F.T Multi - // I/O Hatch, Input/Output Hatch, Energy - // Hatch - translateToLocal("tile.kekztech_tfftstoragefield_block.hint.3"), // Glass, T.F.F.T Multi I/O Hatch, - // Input/Output Hatch - translateToLocal("tile.kekztech_tfftstoragefield_block.hint.4"), // Glass - }; - - // height channel for height - // field channel for field - private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_TOP, - transpose(new String[][] { { "ccccc" }, { "cCCCc" }, { "cC~Cc" }, { "cCCCc" }, { "ccccc" } })) - .addShape( - STRUCTURE_PIECE_MID, - transpose(new String[][] { { "gGGGg" }, { "GfffG" }, { "GfffG" }, { "GfffG" }, { "gGGGg" } })) - .addShape( - STRUCTURE_PIECE_BOTTOM, - transpose(new String[][] { { "ccccc" }, { "cCCCc" }, { "cCCCc" }, { "cCCCc" }, { "ccccc" } })) - .addElement( - 'c', - buildHatchAdder(GTMTE_TFFT.class).atLeast(Energy, Maintenance) - .casingIndex(CASING_TEXTURE_ID_1) - .dot(1) - .buildAndChain(onElementPass(te -> te.casingAmount++, ofBlock(TFFT_FIELD, CASING_META)))) - .addElement( - 'C', - buildHatchAdder(GTMTE_TFFT.class).casingIndex(CASING_TEXTURE_ID_1) - .atLeast( - Energy, - Maintenance, - InputHatch.or(TFFTMultiHatch.INSTANCE), - OutputHatch.or(TFFTMultiHatch.INSTANCE)) - .dot(2) - .buildAndChain(onElementPass(te -> te.casingAmount++, ofBlock(TFFT_FIELD, CASING_META)))) - .addElement( - 'G', - buildHatchAdder(GTMTE_TFFT.class) - .atLeast(InputHatch.or(TFFTMultiHatch.INSTANCE), OutputHatch.or(TFFTMultiHatch.INSTANCE)) - .casingIndex(CASING_TEXTURE_ID_2) - .dot(3) - .buildAndChain( - ofBlockUnlocalizedName("Thaumcraft", "blockCosmeticOpaque", 2, false), - ofGlassTieredMixed((byte) 4, (byte) 127, 3))) - .addElement( - 'g', - ofChain( - ofBlockUnlocalizedName("Thaumcraft", "blockCosmeticOpaque", 2, false), - ofGlassTieredMixed((byte) 4, (byte) 127, 4))) - .addElement('f', ofChain(TFFTStorageFieldElement.INSTANCE)) - .build(); - - public final FluidTankGT[] STORE = new FluidTankGT[MAX_DISTINCT_FLUIDS]; - - { - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - STORE[i] = new FluidTankGT(0); - } - } - - private final int[] FIELDS = new int[Field.VALUES.length]; - - private BigInteger capacity = BigInteger.ZERO; - private long capacityPerFluid = 0L; - private int casingAmount = 0; - private int runningCost = 0; - - private boolean locked = true; - private boolean doVoidExcess = false; - private byte fluidSelector = -1; - - private GTMTE_TFFTHatch tfftHatch = null; - - public GTMTE_TFFT(String aName) { - super(aName); - } - - public GTMTE_TFFT(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GTMTE_TFFT(super.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID_1), - TextureFactory.builder() - .addIcon(TEXTURE_TFFT_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(TEXTURE_TFFT_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID_1), - TextureFactory.builder() - .addIcon(TEXTURE_TFFT) - .extFacing() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID_1) }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fluid Tank") - .addInfo("High-Tech fluid tank that can hold up to 25 different fluids!") - .addInfo("Has 1/25th of the total capacity as capacity for each fluid.") - .addInfo("Right clicking the controller with a screwdriver will turn on excess voiding.") - .addInfo("Fluid storage amount and running cost depends on the storage field blocks used.") - .addSeparator() - .addInfo("Note on hatch locking:") - .addInfo("Use an Integrated Circuit in the GUI slot to limit which fluid is output.") - .addInfo("The index of a stored fluid can be obtained through the Tricorder.") - .addSeparator() - .beginVariableStructureBlock(5, 5, 5, 15, 5, 5, false) - .addController("Top Center") - .addCasingInfoMin("T.F.F.T Casing", MIN_CASING_AMOUNT, false) - .addOtherStructurePart("Storage Field Blocks (Tier I-X)", "Inner 3xhx3 solid pillar") - .addStructureInfo("Energy hatch is not required when running cost is 0") - .addOtherStructurePart("EV+ Tier Glass/Warded Glass/Reinforced Glass", "Outer 5xhx5 glass shell") - .addMaintenanceHatch("Any top or bottom casing") - .addEnergyHatch("Any top or bottom casing") - .addInputHatch("Instead of any casing or glass, has to touch storage field block") - .addOutputHatch("Instead of any casing or glass, has to touch storage field block") - .addStructureInfo("You can have a bunch of hatches") - .addOtherStructurePart( - "Multi I/O Hatches", - "Instead of any casing or glass, has to touch storage field block") - .addStructureInfo("Use MIOH with conduits or fluid storage busses to see all fluids at once.") - .addSubChannelUsage("field", "Maximum Field Tier") - .addSubChannelUsage("height", "Height of structure") - .toolTipFinisher("KekzTech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - int layer = min(stackSize.stackSize + DEFAULT_LAYER_AMOUNT, MAX_LAYER_AMOUNT + 1); - buildPiece(STRUCTURE_PIECE_TOP, stackSize, hintsOnly, 2, 2, 0); - for (int i = -1; i >= 1 - layer; i--) buildPiece(STRUCTURE_PIECE_MID, stackSize, hintsOnly, 2, 2, i); - buildPiece(STRUCTURE_PIECE_BOTTOM, stackSize, hintsOnly, 2, 2, -layer); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int build = survivialBuildPiece(STRUCTURE_PIECE_TOP, stackSize, 2, 2, 0, elementBudget, env, false, true); - if (build >= 0) return build; - int layer = min(stackSize.stackSize + DEFAULT_LAYER_AMOUNT, MAX_LAYER_AMOUNT + 1); - for (int i = -1; i >= 1 - layer; i--) { - build = survivialBuildPiece(STRUCTURE_PIECE_MID, stackSize, 2, 2, i, elementBudget, env, false, true); - if (build >= 0) return build; - } - return survivialBuildPiece(STRUCTURE_PIECE_BOTTOM, stackSize, 2, 2, -layer, elementBudget, env, false, true); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public void clearHatches() { - super.clearHatches(); - if (tfftHatch != null) { - tfftHatch.unbind(); - tfftHatch = null; - } - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - Arrays.fill(FIELDS, 0); - - this.capacity = BigInteger.ZERO; - this.capacityPerFluid = 0L; - this.casingAmount = 0; - this.runningCost = 0; - - if (!checkPiece(STRUCTURE_PIECE_TOP, 2, 2, 0)) return false; - - int layer = 1; - while (checkPiece(STRUCTURE_PIECE_MID, 2, 2, -layer)) layer++; - if (layer - 1 > MAX_LAYER_AMOUNT || layer - 1 < DEFAULT_LAYER_AMOUNT) return false; - if (!checkPiece(STRUCTURE_PIECE_BOTTOM, 2, 2, -layer)) return false; - if (casingAmount >= MIN_CASING_AMOUNT - && (tfftHatch != null || (!mInputHatches.isEmpty() && !mOutputHatches.isEmpty())) - && mInputHatches.size() + mOutputHatches.size() <= MAX_DISTINCT_FLUIDS * 2 - && mMaintenanceHatches.size() == 1) { - BigInteger tempCap = BigInteger.ZERO; - for (int i = 0; i < this.FIELDS.length; i++) { - tempCap = tempCap.add( - BigInteger.valueOf(Field.VALUES[i].getCapacity()) - .multiply(BigInteger.valueOf(this.FIELDS[i]))); - this.runningCost += Field.VALUES[i].getCost() * this.FIELDS[i]; - } - this.setCapacity(tempCap); - - if (tfftHatch != null) tfftHatch.bind(this); - - if (this.runningCost == 0) { - return true; - } - - return !mEnergyHatches.isEmpty(); - } - return false; - } - - @Override - public boolean checkRecipe(ItemStack itemStack) { - mEfficiency = getCurrentEfficiency(null); - mEfficiencyIncrease = 10000; - mEUt = this.runningCost; - mMaxProgresstime = 20; - - this.fluidSelector = (itemStack != null && itemStack.getItem() instanceof GT_IntegratedCircuit_Item) - ? (byte) itemStack.getItemDamage() - : -1; - - // Suck in fluids - final ArrayList inputFluids = getStoredFluids(); - - if (!inputFluids.isEmpty()) { - for (FluidStack aFluid : inputFluids) { - final FluidStack toDeplete = aFluid.copy(); - toDeplete.amount = this.pull(aFluid, true); - depleteInput(toDeplete); - } - } - - // Push out fluids - if (!this.mOutputHatches.isEmpty()) { - final FluidTankGT sFluid = this.getSelectedFluid(); - boolean isFluidSelected = this.fluidSelector != -1; - - if (!isFluidSelected || !sFluid.isEmpty()) { - for (GT_MetaTileEntity_Hatch_Output tHatch : this.mOutputHatches) { - int hatchCapacity = tHatch.getCapacity(); - int hatchAmount = tHatch.getFluidAmount(); - int remaining = hatchCapacity - hatchAmount; - - if (remaining <= 0) continue; - - final FluidStack tFluid = tHatch.getFluid(); - - String lockedFluidName = tHatch.getLockedFluidName() == null ? "" : tHatch.getLockedFluidName(); - String tFluidName = tFluid == null ? "" - : tFluid.getFluid() - .getName(); - - boolean isFluidLocked = tHatch.isFluidLocked(); - boolean isFluidEmpty = tFluid == null || tHatch.getFluidAmount() == 0; - - if (isFluidLocked && !this.contains(lockedFluidName)) continue; - if (!isFluidEmpty && !this.contains(tFluid)) continue; - if ((isFluidLocked && !isFluidEmpty) && !lockedFluidName.equals(tFluidName)) continue; - - if (isFluidSelected) { - if (isFluidLocked && !lockedFluidName.equals(sFluid.name())) continue; - if (!isFluidEmpty && !sFluid.contains(tFluid)) continue; - - tHatch.fill(this.push(sFluid.get(remaining), true), true); - } else if (isFluidLocked) { - if (!isFluidEmpty && !lockedFluidName.equals( - tFluid.getFluid() - .getName())) - continue; - - FluidStack aFluid = FluidRegistry.getFluidStack(lockedFluidName, remaining); - tHatch.fill(this.push(aFluid, true), true); - } else if (isFluidEmpty) { - if (this.firstNotNull() != null) tHatch.fill(this.push(hatchCapacity, true), true); - } else { - tHatch.fill(this.push(new FluidStack(tFluid, remaining), true), true); - } - } - } - } - - if (this.mEUt > 0) this.mEUt = -this.mEUt; - - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) this.locked = !aBaseMetaTileEntity.isActive(); - } - - @Override - public String[] getInfoData() { - ArrayList ll = new ArrayList<>(); - NumberFormat nf = NumberFormat.getNumberInstance(); - - ll.add(EnumChatFormatting.YELLOW + "Stored Fluids:" + EnumChatFormatting.RESET); - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - FluidTankGT tank = STORE[i]; - if (tank.isEmpty()) { - ll.add(MessageFormat.format("{0} - {1}: {2}L ({3}%)", i, "NULL", 0, 0)); - } else { - String localizedName = STORE[i].get() - .getLocalizedName(); - String amount = nf.format(STORE[i].amount()); - String percentage = capacityPerFluid > 0 ? String.valueOf(STORE[i].amount() * 100 / capacityPerFluid) - : ""; - - ll.add(MessageFormat.format("{0} - {1}: {2}L ({3}%)", i, localizedName, amount, percentage)); - } - } - ll.add(EnumChatFormatting.YELLOW + "Operational Data:" + EnumChatFormatting.RESET); - ll.add("Used Capacity: " + nf.format(getStoredAmount()) + "L"); - ll.add("Total Capacity: " + nf.format(capacity) + "L"); - ll.add("Per-Fluid Capacity: " + nf.format(capacityPerFluid) + "L"); - ll.add("Running Cost: " + getActualEnergyUsage() + "EU/t"); - ll.add("Auto-voiding: " + doVoidExcess); - ll.add( - "Maintenance Status: " + ((getRepairStatus() == getIdealStatus()) - ? EnumChatFormatting.GREEN + "Working perfectly" + EnumChatFormatting.RESET - : EnumChatFormatting.RED + "Has Problems" + EnumChatFormatting.RESET)); - ll.add("---------------------------------------------"); - - return ll.toArray(new String[0]); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setByteArray("capacity", capacity.toByteArray()); - aNBT.setBoolean("doVoidExcess", doVoidExcess); - aNBT.setInteger("runningCost", runningCost); - aNBT.setBoolean("lockFluid", locked); - aNBT.setByte("fluidSelector", fluidSelector); - - NBTTagCompound fluidNBT = new NBTTagCompound(); - aNBT.setTag("STORE", fluidNBT); - - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - STORE[i].writeToNBT(fluidNBT, String.valueOf(i)); - } - - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.setCapacity(new BigInteger(aNBT.getByteArray("capacity"))); - this.setDoVoidExcess(aNBT.getBoolean("doVoidExcess")); - this.runningCost = aNBT.getInteger("runningCost"); - this.locked = aNBT.getBoolean("lockFluid"); - this.fluidSelector = aNBT.getByte("fluidSelector"); - - NBTTagCompound fluidNBT = (NBTTagCompound) aNBT.getTag("STORE"); - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - STORE[i].readFromNBT(fluidNBT, String.valueOf(i)); - } - - super.loadNBTData(aNBT); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack stack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack stack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack stack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack stack) { - return false; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - this.setDoVoidExcess(!doVoidExcess); - GT_Utility.sendChatToPlayer(aPlayer, "Auto-voiding " + (this.doVoidExcess ? "enabled" : "disabled")); - } - - private boolean addMultiHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity != null) { - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GTMTE_TFFTHatch) { - if (this.tfftHatch != null) return false; - this.tfftHatch = (GTMTE_TFFTHatch) aMetaTileEntity; - this.tfftHatch.updateTexture(aBaseCasingIndex); - return true; - } - } - return false; - } - - public int pull(FluidStack aFluid, boolean doPull) { - if (locked) return 0; - int index = getFluidPosition(aFluid); - if (index >= 0) { - return STORE[index].fill(aFluid, doPull); - } else if (fluidCount() < MAX_DISTINCT_FLUIDS) { - return STORE[getNullSlot()].setCapacity(capacityPerFluid) - .fill(aFluid, doPull); - } - return 0; - } - - public long pull(FluidStack aFluid, long amount, boolean doPull) { - if (locked) return 0; - int index = getFluidPosition(aFluid); - if (index >= 0) { - FluidTankGT tank = STORE[index]; - if (doPull) return tank.add(amount); - return doVoidExcess ? amount - : tank.amount() + amount > tank.capacity() ? tank.capacity() - tank.amount() : amount; - } else if (fluidCount() < MAX_DISTINCT_FLUIDS) { - FluidTankGT tank = STORE[getNullSlot()]; - if (doPull) return tank.add(amount, aFluid); - return doVoidExcess ? amount : Math.min(amount, tank.capacity()); - } - return 0; - } - - public FluidStack push(FluidStack aFluid, boolean doPush) { - if (locked) return null; - int index = getFluidPosition(aFluid); - if (index < 0) return null; - return STORE[index].drain(aFluid.amount, doPush); - } - - public FluidStack push(int amount, boolean doPush) { - if (locked) return null; - int index = firstNotNullSlot(); - if (index < 0) return null; - return STORE[index].drain(amount, doPush); - } - - public long push(FluidStack aFluid, long amount, boolean doPush) { - if (locked) return 0; - int index = getFluidPosition(aFluid); - if (index < 0) return 0; - if (doPush) return STORE[index].remove(amount); - return STORE[index].amount(amount); - } - - public long getCapacityPerFluid() { - return this.capacityPerFluid; - } - - public void setCapacity(BigInteger capacity) { - if (capacity.compareTo(MAX_CAPACITY) > 0) { - this.capacity = MAX_CAPACITY; - this.capacityPerFluid = Long.MAX_VALUE; - } else { - this.capacity = capacity; - this.capacityPerFluid = capacity.divide(BigInteger.valueOf(MAX_DISTINCT_FLUIDS)) - .longValue(); - } - - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - FluidTankGT tank = STORE[i]; - if (tank.setCapacity(capacityPerFluid) - .amount() > capacityPerFluid) { - STORE[i] = new FluidTankGT(tank.get(), capacityPerFluid, capacityPerFluid); - } - } - } - - public int fluidCount() { - int tCount = 0; - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - if (!STORE[i].isEmpty()) tCount++; - } - return tCount; - } - - public int getFluidPosition(String fluidName) { - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - if (!STORE[i].isEmpty() && STORE[i].name() - .equals(fluidName)) return i; - } - return -1; - } - - public int getFluidPosition(FluidStack aFluid) { - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - if (STORE[i].contains(aFluid)) return i; - } - return -1; - } - - public int getNullSlot() { - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - if (STORE[i].isEmpty()) return i; - } - return -1; - } - - public boolean contains(String fluidName) { - return getFluidPosition(fluidName) >= 0; - } - - public boolean contains(FluidStack aFluid) { - return getFluidPosition(aFluid) >= 0; - } - - public int firstNotNullSlot() { - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - if (!STORE[i].isEmpty()) return i; - } - return -1; - } - - public FluidTankGT firstNotNull() { - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - if (!STORE[i].isEmpty()) return STORE[i]; - } - return null; - } - - public BigInteger getStoredAmount() { - BigInteger amount = BigInteger.ZERO; - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - amount = amount.add(BigInteger.valueOf(STORE[i].amount())); - } - return amount; - } - - public byte getFluidSelector() { - return fluidSelector; - } - - public FluidTankGT getSelectedFluid() { - return fluidSelector != -1 ? STORE[fluidSelector] : null; - } - - public void setDoVoidExcess(boolean doVoidExcess) { - this.doVoidExcess = doVoidExcess; - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - STORE[i].setVoidExcess(doVoidExcess); - } - } - - public FluidTankInfo[] getTankInfo() { - FluidTankInfo[] info = new FluidTankInfo[MAX_DISTINCT_FLUIDS]; - for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { - STORE[i].getFluid(); // - info[i] = STORE[i].getInfo(); - } - return info; - } -} diff --git a/src/main/java/common/tileentities/GTMTE_TFFTHatch.java b/src/main/java/common/tileentities/GTMTE_TFFTHatch.java deleted file mode 100644 index 448d088345..0000000000 --- a/src/main/java/common/tileentities/GTMTE_TFFTHatch.java +++ /dev/null @@ -1,271 +0,0 @@ -package common.tileentities; - -import java.util.HashMap; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; - -import appeng.api.AEApi; -import appeng.api.config.AccessRestriction; -import appeng.api.config.Actionable; -import appeng.api.networking.security.BaseActionSource; -import appeng.api.storage.IExternalStorageHandler; -import appeng.api.storage.IMEInventory; -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.IMEMonitorHandlerReceiver; -import appeng.api.storage.StorageChannel; -import appeng.api.storage.data.IAEFluidStack; -import appeng.api.storage.data.IItemList; -import appeng.util.item.AEFluidStack; -import appeng.util.item.FluidList; -import cpw.mods.fml.common.Optional; -import gregtech.api.enums.Textures; -import gregtech.api.fluid.FluidTankGT; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.render.TextureFactory; - -@Optional.Interface(iface = "appeng.api.storage.IMEMonitor", modid = "appliedenergistics2", striprefs = true) -public class GTMTE_TFFTHatch extends GT_MetaTileEntity_Hatch implements IMEMonitor { - - @Optional.Interface( - iface = "appeng.api.storage.IExternalStorageHandler", - modid = "appliedenergistics2", - striprefs = true) - private static class AE2TFFTHatchHandler implements IExternalStorageHandler { - - @Override - @Optional.Method(modid = "appliedenergistics2") - public boolean canHandle(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource mySrc) { - return channel == StorageChannel.FLUIDS && te instanceof BaseMetaTileEntity - && ((BaseMetaTileEntity) te).getMetaTileEntity() instanceof GTMTE_TFFTHatch; - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public IMEInventory getInventory(TileEntity te, ForgeDirection d, StorageChannel channel, - BaseActionSource src) { - if (channel == StorageChannel.FLUIDS) { - return ((GTMTE_TFFTHatch) (((BaseMetaTileEntity) te).getMetaTileEntity())); - } - return null; - } - } - - private static final Textures.BlockIcons.CustomIcon TEXTURE_TFFT_HATCH = new Textures.BlockIcons.CustomIcon( - "iconsets/TFFT_HATCH"); - - private HashMap, Object> listeners = new HashMap<>(); - private GTMTE_TFFT controller; - - public GTMTE_TFFTHatch(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 3, 0, "All-in-one access for the T.F.F.T"); - } - - public GTMTE_TFFTHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - return super.getTexture(aBaseMetaTileEntity, side, facing, colorIndex, aActive, aRedstone); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(Textures.BlockIcons.OVERLAY_PIPE_IN), - TextureFactory.builder() - .addIcon(TEXTURE_TFFT_HATCH) - .extFacing() - .build() }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(Textures.BlockIcons.OVERLAY_PIPE_IN), - TextureFactory.builder() - .addIcon(TEXTURE_TFFT_HATCH) - .extFacing() - .build() }; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GTMTE_TFFTHatch(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { - return (controller != null) ? controller.pull(resource, doFill) : 0; - } - - @Override - public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { - if (controller != null) { - final FluidTankGT sFluid = controller.getSelectedFluid(); - if (controller.getFluidSelector() == -1 || (sFluid != null && sFluid.contains(resource))) { - return controller.push(resource, doDrain); - } - } - return null; - } - - @Override - public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { - if (controller != null) { - final FluidTankGT sFluid = controller.getSelectedFluid(); - if (controller.getFluidSelector() == -1) return controller.push(maxDrain, doDrain); - if (sFluid != null) return controller.push(sFluid.get(maxDrain), doDrain); - } - return null; - } - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection from) { - return (controller != null) ? controller.getTankInfo() : null; - } - - public void bind(GTMTE_TFFT controller) { - this.controller = controller; - } - - public void unbind() { - this.controller = null; - } - - @Optional.Method(modid = "appliedenergistics2") - public static void registerAEIntegration() { - AEApi.instance() - .registries() - .externalStorage() - .addExternalStorageInterface(new AE2TFFTHatchHandler()); - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public IItemList getAvailableItems(IItemList out, int iteration) { - if (controller != null) { - for (int i = 0; i < GTMTE_TFFT.MAX_DISTINCT_FLUIDS; i++) { - if (!controller.STORE[i].isEmpty()) { - IAEFluidStack s = AEFluidStack.create(controller.STORE[i].get()); - s.setStackSize(controller.STORE[i].amount()); - out.add(s); - } - } - } - return out; - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public IItemList getStorageList() { - IItemList fluidList = new FluidList(); - if (controller != null) { - for (int i = 0; i < GTMTE_TFFT.MAX_DISTINCT_FLUIDS; i++) { - if (!controller.STORE[i].isEmpty()) { - IAEFluidStack s = AEFluidStack.create(controller.STORE[i].get()); - s.setStackSize(controller.STORE[i].amount()); - fluidList.add(s); - } - } - } - return fluidList; - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public void addListener(IMEMonitorHandlerReceiver l, Object verificationToken) { - if (listeners == null) listeners = new HashMap<>(); - listeners.put(l, verificationToken); - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public void removeListener(IMEMonitorHandlerReceiver l) { - if (listeners == null) listeners = new HashMap<>(); - listeners.remove(l); - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public AccessRestriction getAccess() { - return AccessRestriction.READ_WRITE; - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public boolean isPrioritized(IAEFluidStack input) { - if (controller == null || input == null) return false; - return controller.contains(input.getFluidStack()) || controller.fluidCount() < GTMTE_TFFT.MAX_DISTINCT_FLUIDS; - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public boolean canAccept(IAEFluidStack input) { - if (controller == null || input == null) return false; - return controller.contains(input.getFluidStack()) || controller.fluidCount() < GTMTE_TFFT.MAX_DISTINCT_FLUIDS; - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public int getPriority() { - return 0; - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public int getSlot() { - return 0; - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public boolean validForPass(int i) { - return true; - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public IAEFluidStack injectItems(IAEFluidStack input, Actionable mode, BaseActionSource src) { - final FluidStack inputStack = input.getFluidStack(); - if (inputStack == null) return null; - if (controller == null || getBaseMetaTileEntity() == null) return input; - if (mode != Actionable.SIMULATE) getBaseMetaTileEntity().markDirty(); - long amount = controller.pull(input.getFluidStack(), input.getStackSize(), mode != Actionable.SIMULATE); - if (amount == 0) return input; - if (amount == input.getStackSize()) return null; - IAEFluidStack result = AEFluidStack.create(input.getFluidStack()); - result.setStackSize(input.getStackSize() - amount); - return result; - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public IAEFluidStack extractItems(IAEFluidStack request, Actionable mode, BaseActionSource src) { - if (controller == null || getBaseMetaTileEntity() == null) return null; - if (mode != Actionable.SIMULATE) getBaseMetaTileEntity().markDirty(); - long amount = controller.push(request.getFluidStack(), request.getStackSize(), mode != Actionable.SIMULATE); - if (amount == 0) return null; - if (amount == request.getStackSize()) return request.copy(); - IAEFluidStack result = AEFluidStack.create(request.getFluidStack()); - result.setStackSize(amount); - return result; - } - - @Override - @Optional.Method(modid = "appliedenergistics2") - public StorageChannel getChannel() { - return StorageChannel.FLUIDS; - } -} diff --git a/src/main/java/common/tileentities/TE_IchorJar.java b/src/main/java/common/tileentities/TE_IchorJar.java deleted file mode 100644 index b5e85a9f2b..0000000000 --- a/src/main/java/common/tileentities/TE_IchorJar.java +++ /dev/null @@ -1,10 +0,0 @@ -package common.tileentities; - -import thaumcraft.common.tiles.TileJarFillable; - -public class TE_IchorJar extends TileJarFillable { - - public TE_IchorJar() { - super.maxAmount = 4096; - } -} diff --git a/src/main/java/common/tileentities/TE_IchorVoidJar.java b/src/main/java/common/tileentities/TE_IchorVoidJar.java deleted file mode 100644 index 9046b2bc33..0000000000 --- a/src/main/java/common/tileentities/TE_IchorVoidJar.java +++ /dev/null @@ -1,10 +0,0 @@ -package common.tileentities; - -import thaumcraft.common.tiles.TileJarFillableVoid; - -public class TE_IchorVoidJar extends TileJarFillableVoid { - - public TE_IchorVoidJar() { - super.maxAmount = 4096; - } -} diff --git a/src/main/java/common/tileentities/TE_ThaumiumReinforcedJar.java b/src/main/java/common/tileentities/TE_ThaumiumReinforcedJar.java deleted file mode 100644 index e54324220f..0000000000 --- a/src/main/java/common/tileentities/TE_ThaumiumReinforcedJar.java +++ /dev/null @@ -1,10 +0,0 @@ -package common.tileentities; - -import thaumcraft.common.tiles.TileJarFillable; - -public class TE_ThaumiumReinforcedJar extends TileJarFillable { - - public TE_ThaumiumReinforcedJar() { - super.maxAmount = 256; - } -} diff --git a/src/main/java/common/tileentities/TE_ThaumiumReinforcedVoidJar.java b/src/main/java/common/tileentities/TE_ThaumiumReinforcedVoidJar.java deleted file mode 100644 index dd0166fe6e..0000000000 --- a/src/main/java/common/tileentities/TE_ThaumiumReinforcedVoidJar.java +++ /dev/null @@ -1,10 +0,0 @@ -package common.tileentities; - -import thaumcraft.common.tiles.TileJarFillableVoid; - -public class TE_ThaumiumReinforcedVoidJar extends TileJarFillableVoid { - - public TE_ThaumiumReinforcedVoidJar() { - super.maxAmount = 256; - } -} diff --git a/src/main/java/detrav/DetravLoaderAfterGTPreload.java b/src/main/java/detrav/DetravLoaderAfterGTPreload.java new file mode 100644 index 0000000000..45ce3c2381 --- /dev/null +++ b/src/main/java/detrav/DetravLoaderAfterGTPreload.java @@ -0,0 +1,21 @@ +package detrav; + +import detrav.items.DetravMetaGeneratedTool01; +import detrav.items.processing.ProcessingDetravToolProspector; + +/** + * Created by wital_000 on 18.03.2016. + */ +public class DetravLoaderAfterGTPreload implements Runnable { + + @Override + public void run() { + + // items + new DetravMetaGeneratedTool01(); + + // recipes and etc + new ProcessingDetravToolProspector(); + + } +} diff --git a/src/main/java/detrav/DetravScannerMod.java b/src/main/java/detrav/DetravScannerMod.java new file mode 100644 index 0000000000..d9efd632a0 --- /dev/null +++ b/src/main/java/detrav/DetravScannerMod.java @@ -0,0 +1,74 @@ +package detrav; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraftforge.common.config.Configuration; + +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.EventHandler; +import cpw.mods.fml.common.SidedProxy; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.network.NetworkRegistry; +import detrav.net.DetravNetwork; +import detrav.proxies.CommonProxy; +import detrav.utils.DetravCreativeTab; +import detrav.utils.FluidColors; +import detrav.utils.GTppHelper; +import gregtech.GT_Version; +import gregtech.api.GregTechAPI; + +@Mod( + modid = DetravScannerMod.MODID, + version = GT_Version.VERSION, + dependencies = "required-after:IC2;required-after:gregtech;after:miscutils;after:bartworks") +public class DetravScannerMod { + + public static final String MODID = "detravscannermod"; + public static final boolean DEBUG_ENABLED = Boolean.parseBoolean(System.getProperty("com.detrav.debug", "false")); + public static final CreativeTabs TAB_DETRAV = new DetravCreativeTab(); + public static boolean isDreamcraftLoaded = false; + public static boolean isBartWorksLoaded = false; + public static boolean isGTppLoaded = false; + + @SidedProxy(clientSide = "detrav.proxies.ClientProxy", serverSide = "detrav.proxies.ServerProxy") + public static CommonProxy proxy; + + @Mod.Instance(DetravScannerMod.MODID) + public static DetravScannerMod instance; + + public DetravScannerMod() { + GregTechAPI.sAfterGTPreload.add(new DetravLoaderAfterGTPreload()); + isDreamcraftLoaded = Loader.isModLoaded("dreamcraft"); + isBartWorksLoaded = Loader.isModLoaded("bartworks"); + isGTppLoaded = Loader.isModLoaded("miscutils"); + + new DetravNetwork(); + } + + @EventHandler + public void preInit(FMLPreInitializationEvent event) { + Configuration Config = new Configuration(event.getSuggestedConfigurationFile()); + Config.load(); + + if (Config.hasChanged()) { + Config.save(); + } + + proxy.onPreInit(); + } + + @EventHandler + public void init(FMLInitializationEvent event) { + NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy); + proxy.onLoad(); + } + + @EventHandler + public void onPostLoad(FMLPostInitializationEvent aEvent) { + proxy.onPostLoad(); + if (isGTppLoaded) GTppHelper.generate_OreIDs(); + FluidColors.makeColors(); + } +} diff --git a/src/main/java/detrav/commands/DetravScannerCommand.java b/src/main/java/detrav/commands/DetravScannerCommand.java new file mode 100644 index 0000000000..76c6673be1 --- /dev/null +++ b/src/main/java/detrav/commands/DetravScannerCommand.java @@ -0,0 +1,158 @@ +package detrav.commands; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.chunk.Chunk; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.TileEntityOres; + +/** + * Created by wital_000 on 17.03.2016. + */ +public class DetravScannerCommand implements ICommand { + + private List aliases; + + public DetravScannerCommand() { + this.aliases = new ArrayList(); + this.aliases.add("DetravScanner"); + this.aliases.add("dscan"); + } + + @Override + public String getCommandName() { + return "DetravScanner"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "DetravScanner [\"Part of Greg ore name\"]"; + } + + @Override + public List getCommandAliases() { + return this.aliases; + } + + @Override + public void processCommand(ICommandSender sender, String[] args) { + int aX = 0; + int aZ = 0; + int aY = 0; + String name = null; + + ArrayList strs = new ArrayList<>(); + for (int i = 0; i < args.length; i++) { + strs.add(args[i]); + if (args[i].startsWith("\"")) { + for (i++; i < args.length; i++) { + String temp = (String) strs.get(strs.size() - 1); + temp = temp + " " + args[i]; + temp = temp.replace("\"", ""); + strs.set(strs.size() - 1, temp); + if (args[i].endsWith("\"")) break; + } + } + } + args = new String[strs.size()]; + args = strs.toArray(args); + + switch (args.length) { + case 0: + break; + case 1: + if (args[0].toLowerCase() == "help") { + sendHelpMessage(sender); + return; + } + name = args[0]; + break; + default: + sendHelpMessage(sender); + return; + } + ChunkCoordinates c = sender.getPlayerCoordinates(); + if (name != null) name = name.toLowerCase(); + process(sender, (int) Math.floor(c.posX / 16.0), (int) Math.floor(c.posZ / 16.0), name); + } + + private void process(ICommandSender sender, int aX, int aZ, String fName) { + Chunk c = sender.getEntityWorld() + .getChunkFromChunkCoords(aX, aZ); + if (c == null) sender.addChatMessage(new ChatComponentText("ERROR")); + HashMap ores = new HashMap<>(); + for (int x = 0; x < 16; x++) for (int z = 0; z < 16; z++) { + int ySize = c.getHeightValue(x, z); + for (int y = 1; y < ySize; y++) { + Block b = c.getBlock(x, y, z); + if (b == GregTechAPI.sBlockOres1) { + TileEntity entity = c.getTileEntityUnsafe(x, y, z); + if (entity != null) { + TileEntityOres gt_entity = (TileEntityOres) entity; + short meta = gt_entity.getMetaData(); + String name = Materials.getLocalizedNameForItem( + GTLanguageManager.getTranslation(b.getUnlocalizedName() + "." + meta + ".name"), + meta % 1000); + if (name.startsWith("Small")) continue; + if (fName == null || name.toLowerCase() + .contains(fName)) { + if (!ores.containsKey(name)) ores.put(name, 1); + else { + int val = ores.get(name); + ores.put(name, val + 1); + } + } + } + } + } + + } + sender.addChatMessage(new ChatComponentText("*** Detrav Scanner Begin")); + for (String key : ores.keySet()) { + sender.addChatMessage(new ChatComponentText(String.format("%s : %d", key, ores.get(key)))); + } + sender.addChatMessage(new ChatComponentText("*** Detrav Scanner End")); + } + + private void sendHelpMessage(ICommandSender sender) { + sender.addChatMessage(new ChatComponentText(getCommandUsage(sender))); + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender p_71519_1_) { + return true; + } + + @Override + public List addTabCompletionOptions(ICommandSender sender, String[] args) { + if (args.length != 1) return null; + if ("help".startsWith(args[0].toLowerCase())) { + List result = new ArrayList(); + result.add("help"); + sendHelpMessage(sender); + return result; + } + return null; + } + + @Override + public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { + return false; + } + + @Override + public int compareTo(Object o) { + return 0; + } +} diff --git a/src/main/java/detrav/enums/DetravToolDictNames.java b/src/main/java/detrav/enums/DetravToolDictNames.java new file mode 100644 index 0000000000..8f0c32df85 --- /dev/null +++ b/src/main/java/detrav/enums/DetravToolDictNames.java @@ -0,0 +1,9 @@ +package detrav.enums; + +/** + * Created by wital_000 on 19.03.2016. + */ +public enum DetravToolDictNames { + craftingToolElectricProspector, + craftingToolProspector, +} diff --git a/src/main/java/detrav/enums/Textures01.java b/src/main/java/detrav/enums/Textures01.java new file mode 100644 index 0000000000..4985707aa9 --- /dev/null +++ b/src/main/java/detrav/enums/Textures01.java @@ -0,0 +1,17 @@ +package detrav.enums; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; + +/** + * Created by wital_000 on 19.03.2016. + */ +public class Textures01 { + + public static final IIconContainer[] mTextures = new IIconContainer[] { + new Textures.ItemIcons.CustomIcon("gt.detrav.metatool.01/PRO_PICK_HEAD"), + new Textures.ItemIcons.CustomIcon("gt.detrav.metatool.01/ELECTRIC_LuV_PRO_PICK_HEAD"), + new Textures.ItemIcons.CustomIcon("gt.detrav.metatool.01/ELECTRIC_ZPM_PRO_PICK_HEAD"), + new Textures.ItemIcons.CustomIcon("gt.detrav.metatool.01/ELECTRIC_UV_PRO_PICK_HEAD"), + new Textures.ItemIcons.CustomIcon("gt.detrav.metatool.01/ELECTRIC_UHV_PRO_PICK_HEAD"), }; +} diff --git a/src/main/java/detrav/events/DetravLoginEventHandler.java b/src/main/java/detrav/events/DetravLoginEventHandler.java new file mode 100644 index 0000000000..9a28c1ab93 --- /dev/null +++ b/src/main/java/detrav/events/DetravLoginEventHandler.java @@ -0,0 +1,24 @@ +package detrav.events; + +import net.minecraftforge.common.MinecraftForge; + +import cpw.mods.fml.common.FMLCommonHandler; + +/** + * Created by wital_000 on 18.04.2016. + */ +public class DetravLoginEventHandler { + + static boolean inited = false; + + public static void register() { + if (!inited) { + inited = true; + DetravLoginEventHandler handler = new DetravLoginEventHandler(); + MinecraftForge.EVENT_BUS.register(handler); + FMLCommonHandler.instance() + .bus() + .register(handler); + } + } +} diff --git a/src/main/java/detrav/gui/DetravScannerGUI.java b/src/main/java/detrav/gui/DetravScannerGUI.java new file mode 100644 index 0000000000..7e7b4964e3 --- /dev/null +++ b/src/main/java/detrav/gui/DetravScannerGUI.java @@ -0,0 +1,120 @@ +package detrav.gui; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; + +import org.lwjgl.opengl.GL11; + +import detrav.gui.textures.DetravMapTexture; +import gregtech.api.util.GTUtility; + +/** + * Created by wital_000 on 21.03.2016. + */ +public class DetravScannerGUI extends GuiScreen { + + public static final int GUI_ID = 20; + private static DetravMapTexture map = null; + OresList oresList = null; + + private final static int minHeight = 128; + private final static int minWidth = 128; + private int prevW; + private int prevH; + + private static final ResourceLocation back = new ResourceLocation("gregtech:textures/gui/propick.png"); + + public DetravScannerGUI() { + + } + + public static void newMap(DetravMapTexture aMap) { + if (map != null) { + map.deleteGlTexture(); + map = null; + } + map = aMap; + map.loadTexture(null); + } + + @Override + public void drawScreen(int x, int y, float f) { + this.drawDefaultBackground(); + if (map == null) return; + int currentWidth = Math.max(map.width, minWidth); + int currentHeight = Math.max(map.height, minHeight); + int aX = (this.width - currentWidth - 100) / 2; + int aY = (this.height - currentHeight) / 2; + + if (oresList == null || (prevW != width || prevH != height)) { + oresList = new OresList( + this, + 100, + currentHeight, + aY, + aY + currentHeight, + aX + currentWidth, + 10, + map.packet.ores, + ((name, invert) -> { if (map != null) map.loadTexture(null, name, invert); })); + prevW = width; + prevH = height; + } + + // draw back for ores + drawRect(aX, aY, aX + currentWidth + 100, aY + currentHeight, 0xFFC6C6C6); + map.glBindTexture(); + map.draw(aX, aY); + oresList.drawScreen(x, y, f); + mc.getTextureManager() + .bindTexture(back); + GL11.glColor4f(0xFF, 0xFF, 0xFF, 0xFF); + + // draw corners + drawTexturedModalRect(aX - 5, aY - 5, 0, 0, 5, 5);// leftTop + drawTexturedModalRect(aX + currentWidth + 100, aY - 5, 171, 0, 5, 5);// RightTop + drawTexturedModalRect(aX - 5, aY + currentHeight, 0, 161, 5, 5);// leftDown + drawTexturedModalRect(aX + currentWidth + 100, aY + currentHeight, 171, 161, 5, 5);// RightDown + + // draw edges + for (int i = aX; i < aX + currentWidth + 100; i += 128) + drawTexturedModalRect(i, aY - 5, 5, 0, Math.min(128, aX + currentWidth + 100 - i), 5); // top + for (int i = aX; i < aX + currentWidth + 100; i += 128) + drawTexturedModalRect(i, aY + currentHeight, 5, 161, Math.min(128, aX + currentWidth + 100 - i), 5); // down + for (int i = aY; i < aY + currentHeight; i += 128) + drawTexturedModalRect(aX - 5, i, 0, 5, 5, Math.min(128, aY + currentHeight - i)); // left + for (int i = aY; i < aY + currentHeight; i += 128) + drawTexturedModalRect(aX + currentWidth + 100, i, 171, 5, 5, Math.min(128, aY + currentHeight - i)); // right + + if (map.packet.ptype == 2) { + HashMap[][] fluidInfo = map.packet.map; + int tX = x - aX; + int tY = y - aY; + if (tX >= 0 && tY >= 0 && tX < fluidInfo.length && tY < fluidInfo[0].length) { + List info = new ArrayList<>(); + if (fluidInfo[tX][tY] != null) { + short fluidId = fluidInfo[tX][tY].get((byte) 1); + short fluidAmount = fluidInfo[tX][tY].get((byte) 2); + if (fluidId != 0 && fluidAmount > 0) { + info.add( + StatCollector.translateToLocal("gui.detrav.scanner.tooltip.fluid_name") + + map.packet.metaMap.get(fluidId)); + info.add( + StatCollector.translateToLocal("gui.detrav.scanner.tooltip.fluid_amount") + + GTUtility.formatNumbers(fluidAmount) + + " L"); + } else info.add(StatCollector.translateToLocal("gui.detrav.scanner.tooltip.no_fluid")); + } else { + info.add(StatCollector.translateToLocal("gui.detrav.scanner.tooltip.no_fluid")); + } + func_146283_a(info, x, y); + } + } + } + +} diff --git a/src/main/java/detrav/gui/OresList.java b/src/main/java/detrav/gui/OresList.java new file mode 100644 index 0000000000..91252760ec --- /dev/null +++ b/src/main/java/detrav/gui/OresList.java @@ -0,0 +1,66 @@ +package detrav.gui; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.function.BiConsumer; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.renderer.Tessellator; + +import cpw.mods.fml.client.GuiScrollingList; + +class OresList extends GuiScrollingList { + + private final HashMap ores; + private final List keys; + private final GuiScreen parent; + private final BiConsumer onSelected; + private boolean invert = false; + + private int selected = -1; + + public OresList(GuiScreen parent, int width, int height, int top, int bottom, int left, int entryHeight, + HashMap aOres, BiConsumer onSelected) { + super(parent.mc, width, height, top, bottom, left, entryHeight); + this.parent = parent; + this.onSelected = onSelected; + ores = aOres; + keys = new ArrayList<>(ores.keySet()); + Collections.sort(keys); + if (keys.size() > 1) keys.add(0, "All"); + selected = 0; + } + + @Override + protected int getSize() { + return keys.size(); + } + + @Override + protected void elementClicked(int index, boolean doubleClick) { + selected = index; + if (doubleClick) this.invert = !this.invert; + + if (onSelected != null) onSelected.accept(keys.get(index), this.invert); + } + + @Override + protected boolean isSelected(int index) { + return selected == index; + } + + @Override + protected void drawBackground() {} + + @Override + protected void drawSlot(int slotIdx, int entryRight, int slotTop, int slotBuffer, Tessellator tess) { + parent.drawString( + parent.mc.fontRenderer, + parent.mc.fontRenderer.trimStringToWidth(keys.get(slotIdx), listWidth - 10), + this.left + 3, + slotTop - 1, + ores.getOrDefault(keys.get(slotIdx), 0x7d7b76)); + } +} diff --git a/src/main/java/detrav/gui/textures/DetravMapTexture.java b/src/main/java/detrav/gui/textures/DetravMapTexture.java new file mode 100644 index 0000000000..e8e35dc82d --- /dev/null +++ b/src/main/java/detrav/gui/textures/DetravMapTexture.java @@ -0,0 +1,145 @@ +package detrav.gui.textures; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import java.awt.image.WritableRaster; + +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.AbstractTexture; +import net.minecraft.client.renderer.texture.TextureUtil; +import net.minecraft.client.resources.IResourceManager; + +import org.lwjgl.opengl.GL11; + +import detrav.net.ProspectingPacket; + +/** + * Created by wital_000 on 21.03.2016. + */ +public class DetravMapTexture extends AbstractTexture { + + public final ProspectingPacket packet; + private String selected = "All"; + public int width = -1; + public int height = -1; + public boolean invert = false; + + public DetravMapTexture(ProspectingPacket aPacket) { + packet = aPacket; + } + + private BufferedImage getImage() { + final int backgroundColor = invert ? Color.GRAY.getRGB() : Color.WHITE.getRGB(); + final int wh = (packet.size * 2 + 1) * 16; + + BufferedImage image = new BufferedImage(wh, wh, BufferedImage.TYPE_INT_ARGB); + WritableRaster raster = image.getRaster(); + + int playerI = packet.posX - (packet.chunkX - packet.size) * 16 - 1; // Correct player offset + int playerJ = packet.posZ - (packet.chunkZ - packet.size) * 16 - 1; + for (int i = 0; i < wh; i++) { + for (int j = 0; j < wh; j++) { + image.setRGB(i, j, backgroundColor); + if (packet.map[i][j] != null) { + if (packet.ptype == 0 || packet.ptype == 1) { + for (short meta : packet.map[i][j].values()) { + final String name = packet.metaMap.get(meta); + if (!selected.equals("All") && !selected.equals(name)) continue; + + image.setRGB(i, j, packet.ores.getOrDefault(name, Color.BLACK.getRGB()) | 0XFF000000); + break; + } + } else if (packet.ptype == 2) { + final short fluidId = packet.map[i][j].get((byte) 1), + fluidSize = packet.map[i][j].get((byte) 2); + final String name = packet.metaMap.get(fluidId); + + // Variables used to locate within a chunk. + final int k = (i % 16), l = (j % 16); + + if (((k + l * 16) * 3) < (fluidSize + 48) + && (selected.equals("All") || selected.equals(name))) { + image.setRGB(i, j, packet.ores.getOrDefault(name, Color.BLACK.getRGB()) | 0XFF000000); + } + } else if (packet.ptype == 3) { + final short meta = packet.map[i][j].get((byte) 1); + image.setRGB(i, j, ((meta & 0xFF) << 16) + ((meta & 0xFF) << 8) + ((meta & 0xFF)) | 0XFF000000); + } + } + // draw player pos + if (i == playerI || j == playerJ) { + raster.setSample(i, j, 0, (raster.getSample(i, j, 0) + 255) / 2); + raster.setSample(i, j, 1, raster.getSample(i, j, 1) / 2); + raster.setSample(i, j, 2, raster.getSample(i, j, 2) / 2); + } + // draw grid + if ((i) % 16 == 0 || (j) % 16 == 0) { + raster.setSample(i, j, 0, raster.getSample(i, j, 0) / 2); + raster.setSample(i, j, 1, raster.getSample(i, j, 1) / 2); + raster.setSample(i, j, 2, raster.getSample(i, j, 2) / 2); + } + + } + } + + return image; + } + + @Override + public void loadTexture(IResourceManager resourceManager) { + this.deleteGlTexture(); + if (packet != null) { + int tId = getGlTextureId(); + if (tId < 0) return; + TextureUtil.uploadTextureImageAllocate(this.getGlTextureId(), getImage(), false, false); + width = packet.getSize(); + height = packet.getSize(); + } + } + + public void loadTexture(IResourceManager resourceManager, boolean invert) { + this.invert = invert; + loadTexture(resourceManager); + } + + public void loadTexture(IResourceManager resourceManager, String selected, boolean invert) { + this.selected = selected; + loadTexture(resourceManager, invert); + } + + public int glBindTexture() { + if (this.glTextureId < 0) return this.glTextureId; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.getGlTextureId()); + return this.glTextureId; + } + + public void draw(int x, int y) { + float f = 1F / (float) width; + float f1 = 1F / (float) height; + int u = 0, v = 0; + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.addVertexWithUV( + (double) (x), + (double) (y + height), + 0, + (double) ((float) (u) * f), + (double) ((float) (v + height) * f1)); + tessellator.addVertexWithUV( + (double) (x + width), + (double) (y + height), + 0, + (double) ((float) (u + width) * f), + (double) ((float) (v + height) * f1)); + tessellator.addVertexWithUV( + (double) (x + width), + (double) (y), + 0, + (double) ((float) (u + width) * f), + (double) ((float) (v) * f1)); + tessellator + .addVertexWithUV((double) (x), (double) (y), 0, (double) ((float) (u) * f), (double) ((float) (v) * f1)); + tessellator.draw(); + } + +} diff --git a/src/main/java/detrav/items/DetravMetaGeneratedTool01.java b/src/main/java/detrav/items/DetravMetaGeneratedTool01.java new file mode 100644 index 0000000000..e704631467 --- /dev/null +++ b/src/main/java/detrav/items/DetravMetaGeneratedTool01.java @@ -0,0 +1,359 @@ +package detrav.items; + +import java.util.List; + +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.StatCollector; + +import detrav.DetravScannerMod; +import detrav.enums.DetravToolDictNames; +import detrav.items.tools.DetravProspector; +import detrav.items.tools.DetravToolElectricProspector; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TCAspects; +import gregtech.api.interfaces.IToolStats; +import gregtech.api.items.MetaGeneratedTool; + +/** + * Created by wital_000 on 19.03.2016. + */ +public class DetravMetaGeneratedTool01 extends MetaGeneratedTool { + + public static DetravMetaGeneratedTool01 INSTANCE; + + public DetravMetaGeneratedTool01() { + super("detrav.metatool.01"); + INSTANCE = this; + addTool( + 0, + "Prospector's Scanner(ULV)", + "", + new DetravProspector(0), + DetravToolDictNames.craftingToolProspector.toString(), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + 2, + "Prospector's Scanner(LV)", + "", + new DetravProspector(1), + DetravToolDictNames.craftingToolProspector.toString(), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + 4, + "Prospector's Scanner(MV)", + "", + new DetravProspector(2), + DetravToolDictNames.craftingToolProspector.toString(), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + 6, + "Prospector's Scanner(HV)", + "", + new DetravProspector(3), + DetravToolDictNames.craftingToolProspector.toString(), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + 8, + "Prospector's Scanner(EV)", + "", + new DetravProspector(4), + DetravToolDictNames.craftingToolProspector.toString(), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + 10, + "Prospector's Scanner(IV)", + "", + new DetravProspector(5), + DetravToolDictNames.craftingToolProspector.toString(), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + 12, + "Prospector's Scanner(LuV)", + "", + new DetravProspector(6), + DetravToolDictNames.craftingToolProspector.toString(), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + 14, + "Prospector's Scanner(ZPM)", + "", + new DetravProspector(7), + DetravToolDictNames.craftingToolProspector.toString(), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + 16, + "Prospector's Scanner(UV)", + "", + new DetravProspector(8), + DetravToolDictNames.craftingToolProspector.toString(), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + 18, + "Prospector's Scanner(UHV)", + "", + new DetravProspector(9), + DetravToolDictNames.craftingToolProspector.toString(), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + + addTool( + 100, + "Electric Prospector's Scanner (LuV)", + "", + new DetravToolElectricProspector(6), + DetravToolDictNames.craftingToolElectricProspector, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L)); + addTool( + 102, + "Electric Prospector's Scanner (ZPM)", + "", + new DetravToolElectricProspector(7), + DetravToolDictNames.craftingToolElectricProspector, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L)); + addTool( + 104, + "Electric Prospector's Scanner (UV)", + "", + new DetravToolElectricProspector(8), + DetravToolDictNames.craftingToolElectricProspector, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L)); + addTool( + 106, + "Electric Prospector's Scanner (UHV)", + "", + new DetravToolElectricProspector(9), + DetravToolDictNames.craftingToolElectricProspector, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L)); + setCreativeTab(DetravScannerMod.TAB_DETRAV); + } + + @SuppressWarnings("unchecked") + public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + long tMaxDamage = getToolMaxDamage(aStack); + Materials tMaterial = getPrimaryMaterial(aStack); + IToolStats tStats = getToolStats(aStack); + int tOffset = aList.size(); + if (tStats == null) return; + + String name = aStack.getUnlocalizedName(); + String num = name.substring("gt.detrav.metatool.01.".length()); + int meta = Integer.parseInt(num); + int range = getHarvestLevel(aStack, "") / 2 + (meta / 4); + if ((range % 2) == 0) { + range += 1; + } + if (meta < 100) { + aList.add( + tOffset + 0, + EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.durability") + + EnumChatFormatting.GREEN + + Long.toString(tMaxDamage - getToolDamage(aStack)) + + " / " + + Long.toString(tMaxDamage) + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 1, + EnumChatFormatting.WHITE + tMaterial.getLocalizedNameForItem("%material") + EnumChatFormatting.GRAY); + aList.add( + tOffset + 2, + EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.range") + + Integer.toString(range) + + "x" + + Integer.toString(range) + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 3, + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.0") + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 4, + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.1") + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 5, + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.success.chance") + + EnumChatFormatting.RESET + + Integer.toString(((((1 + meta) * 8) <= 100) ? ((1 + meta) * 8) : 100)) + + EnumChatFormatting.GRAY + + "%"); + aList.add( + tOffset + 6, + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.distance.0")); + aList.add( + tOffset + 7, + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.distance.1")); + + } else if (meta >= 100 && meta < 200) { + aList.add( + tOffset + 0, + EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.durability") + + EnumChatFormatting.GREEN + + (tMaxDamage - getToolDamage(aStack)) + + " / " + + tMaxDamage + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 1, + EnumChatFormatting.WHITE + tMaterial.getLocalizedNameForItem("%material") + EnumChatFormatting.GRAY); + aList.add( + tOffset + 2, + EnumChatFormatting.WHITE + StatCollector.translateToLocal("tooltip.detrav.scanner.range") + + EnumChatFormatting.YELLOW + + (getHarvestLevel(aStack, "") * 2 + 1) + + "x" + + (getHarvestLevel(aStack, "") * 2 + 1) + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 3, + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.0")); + aList.add( + tOffset + 4, + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.1")); + aList.add( + tOffset + 5, + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.2")); + aList.add( + tOffset + 6, + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.3")); + aList.add( + tOffset + 7, + EnumChatFormatting.ITALIC + StatCollector.translateToLocal("tooltip.detrav.scanner.usage.4")); + } + + } + + public Long getToolGTDetravData(ItemStack aStack) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if (aNBT != null) return aNBT.getLong("DetravData"); + } + return 0L; + } + + public boolean setToolGTDetravData(ItemStack aStack, long data) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if (aNBT != null) { + aNBT.setLong("DetravData", data); + return true; + } + } + return false; + } + + @SuppressWarnings("unchecked") + public void getDetravSubItems(Item item, CreativeTabs detravCreativeTab, List list) { + + ItemStack dStack; + if (DetravScannerMod.isDreamcraftLoaded) { + // Materials at tiers + list.add(getToolWithStats(0, 1, Materials.Polycaprolactam, Materials.Polycaprolactam, null)); + list.add(getToolWithStats(2, 1, Materials.Steel, Materials.Steel, null)); + list.add(getToolWithStats(2, 1, Materials.Bronze, Materials.Steel, null)); + list.add(getToolWithStats(4, 1, Materials.Manyullyn, Materials.Aluminium, null)); + list.add(getToolWithStats(6, 1, Materials.DamascusSteel, Materials.DamascusSteel, null)); + list.add(getToolWithStats(8, 1, Materials.Titanium, Materials.Titanium, null)); + list.add(getToolWithStats(10, 1, Materials.TungstenSteel, Materials.TungstenSteel, null)); + list.add(getToolWithStats(12, 1, Materials.Iridium, Materials.Iridium, null)); + list.add(getToolWithStats(12, 1, Materials.Osmium, Materials.Osmium, null)); + list.add(getToolWithStats(14, 1, Materials.Neutronium, Materials.Neutronium, null)); + list.add(getToolWithStats(16, 1, Materials.InfinityCatalyst, Materials.InfinityCatalyst, null)); + list.add(getToolWithStats(18, 1, Materials.Infinity, Materials.Infinity, null)); + } + + // Steel for comparison + list.add(getToolWithStats(0, 1, Materials.Steel, Materials.Steel, null)); + list.add(getToolWithStats(2, 1, Materials.Steel, Materials.Steel, null)); + list.add(getToolWithStats(4, 1, Materials.Steel, Materials.Steel, null)); + list.add(getToolWithStats(6, 1, Materials.Steel, Materials.Steel, null)); + list.add(getToolWithStats(8, 1, Materials.Steel, Materials.Steel, null)); + list.add(getToolWithStats(10, 1, Materials.Steel, Materials.Steel, null)); + list.add(getToolWithStats(12, 1, Materials.Steel, Materials.Steel, null)); + list.add(getToolWithStats(14, 1, Materials.Steel, Materials.Steel, null)); + list.add(getToolWithStats(16, 1, Materials.Steel, Materials.Steel, null)); + list.add(getToolWithStats(18, 1, Materials.Steel, Materials.Steel, null)); + + // Electric Scanners + dStack = getToolWithStats( + 100, + 1, + Materials.Iridium, + Materials.TungstenSteel, + new long[] { 102400000L, GTValues.V[6], 6L, -1L }); + setCharge(dStack, 102400000L); + list.add(dStack); + + dStack = getToolWithStats( + 102, + 1, + Materials.Neutronium, + Materials.TungstenSteel, + new long[] { 409600000L, GTValues.V[7], 7L, -1L }); + setCharge(dStack, 409600000L); + list.add(dStack); + + if (DetravScannerMod.isDreamcraftLoaded) { + dStack = getToolWithStats( + 104, + 1, + Materials.InfinityCatalyst, + Materials.TungstenSteel, + new long[] { 1638400000L, GTValues.V[8], 8L, -1L }); + setCharge(dStack, 1638400000L); + list.add(dStack); + + dStack = getToolWithStats( + 106, + 1, + Materials.Infinity, + Materials.TungstenSteel, + new long[] { 6553600000L, GTValues.V[9], 9L, -1L }); + setCharge(dStack, 6553600000L); + list.add(dStack); + } else { + dStack = getToolWithStats( + 106, + 1, + Materials.Neutronium, + Materials.TungstenSteel, + new long[] { 6553600000L, GTValues.V[9], 9L, -1L }); + setCharge(dStack, 6553600000L); + list.add(dStack); + } + } +} diff --git a/src/main/java/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java b/src/main/java/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java new file mode 100644 index 0000000000..25da8b6277 --- /dev/null +++ b/src/main/java/detrav/items/behaviours/BehaviourDetravToolElectricProspector.java @@ -0,0 +1,253 @@ +package detrav.items.behaviours; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fluids.FluidStack; + +import com.sinthoras.visualprospecting.VisualProspecting_API; + +import cpw.mods.fml.common.Loader; +import detrav.DetravScannerMod; +import detrav.items.DetravMetaGeneratedTool01; +import detrav.net.DetravNetwork; +import detrav.net.ProspectingPacket; +import detrav.utils.BartWorksHelper; +import detrav.utils.GTppHelper; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.objects.ItemData; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.common.UndergroundOil; +import gregtech.common.blocks.BlockOresAbstract; +import gregtech.common.blocks.TileEntityOres; + +/** + * Created by wital_000 on 19.03.2016. + */ +public class BehaviourDetravToolElectricProspector extends BehaviourDetravToolProspector { + + public BehaviourDetravToolElectricProspector(int aCosts) { + super(aCosts); + } + + public ItemStack onItemRightClick(MetaBaseItem aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + if (!aWorld.isRemote) { + int data = DetravMetaGeneratedTool01.INSTANCE.getToolGTDetravData(aStack) + .intValue(); + if (aPlayer.isSneaking()) { + data++; + if (data > 3) data = 0; + switch (data) { + case 0: + aPlayer.addChatMessage( + new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.0"))); + break; + case 1: + aPlayer.addChatMessage( + new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.1"))); + break; + case 2: + aPlayer.addChatMessage( + new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.2"))); + break; + case 3: + aPlayer.addChatMessage( + new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.3"))); + break; + default: + aPlayer.addChatMessage( + new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.mode.error"))); + break; + } + DetravMetaGeneratedTool01.INSTANCE.setToolGTDetravData(aStack, (long) data); + return super.onItemRightClick(aItem, aStack, aWorld, aPlayer); + } + + final DetravMetaGeneratedTool01 tool = (DetravMetaGeneratedTool01) aItem; + final int cX = ((int) aPlayer.posX) >> 4; + final int cZ = ((int) aPlayer.posZ) >> 4; + int size = aItem.getHarvestLevel(aStack, "") + 1; + final List chunks = new ArrayList<>(); + aPlayer.addChatMessage(new ChatComponentText("Scanning...")); + + for (int i = -size; i <= size; i++) + for (int j = -size; j <= size; j++) if (i != -size && i != size && j != -size && j != size) + chunks.add(aWorld.getChunkFromChunkCoords(cX + i, cZ + j)); + size = size - 1; + + final ProspectingPacket packet = new ProspectingPacket( + cX, + cZ, + (int) aPlayer.posX, + (int) aPlayer.posZ, + size, + data); + final String small_ore_keyword = StatCollector.translateToLocal("detrav.scanner.small_ore.keyword"); + for (Chunk c : chunks) { + for (int x = 0; x < 16; x++) for (int z = 0; z < 16; z++) { + final int ySize = c.getHeightValue(x, z); + for (int y = 1; y < ySize; y++) { + switch (data) { + case 0: + case 1: + final Block tBlock = c.getBlock(x, y, z); + short tMetaID = (short) c.getBlockMetadata(x, y, z); + if (tBlock instanceof BlockOresAbstract) { + TileEntity tTileEntity = c.getTileEntityUnsafe(x, y, z); + if ((tTileEntity instanceof TileEntityOres) + && ((TileEntityOres) tTileEntity).mNatural) { + tMetaID = (short) ((TileEntityOres) tTileEntity).getMetaData(); + try { + String name = GTLanguageManager + .getTranslation(tBlock.getUnlocalizedName() + "." + tMetaID + ".name"); + if (data != 1 && name.startsWith(small_ore_keyword)) continue; + packet.addBlock(c.xPosition * 16 + x, y, c.zPosition * 16 + z, tMetaID); + } catch (Exception e) { + String name = tBlock.getUnlocalizedName() + "."; + if (data != 1 && name.contains(".small.")) continue; + packet.addBlock(c.xPosition * 16 + x, y, c.zPosition * 16 + z, tMetaID); + } + } + } else if (DetravScannerMod.isGTppLoaded && GTppHelper.isGTppBlock(tBlock)) { + packet.addBlock( + c.xPosition * 16 + x, + y, + c.zPosition * 16 + z, + GTppHelper.getGTppMeta(tBlock)); + } else if (DetravScannerMod.isBartWorksLoaded && BartWorksHelper.isOre(tBlock)) { + if (data != 1 && BartWorksHelper.isSmallOre(tBlock)) continue; + packet.addBlock( + c.xPosition * 16 + x, + y, + c.zPosition * 16 + z, + BartWorksHelper.getMetaFromBlock(c, x, y, z, tBlock)); + } else if (data == 1) { + ItemData tAssotiation = GTOreDictUnificator + .getAssociation(new ItemStack(tBlock, 1, tMetaID)); + if ((tAssotiation != null) && (tAssotiation.mPrefix.toString() + .startsWith("ore"))) { + packet.addBlock( + c.xPosition * 16 + x, + y, + c.zPosition * 16 + z, + (short) tAssotiation.mMaterial.mMaterial.mMetaItemSubID); + } + } + break; + case 2: + if ((x == 0) || (z == 0)) { // Skip doing the locations with the grid on them. + break; + } + FluidStack fStack = UndergroundOil.undergroundOil( + aWorld.getChunkFromBlockCoords(c.xPosition * 16 + x, c.zPosition * 16 + z), + -1); + if (fStack.amount > 0) { + packet.addBlock( + c.xPosition * 16 + x, + 1, + c.zPosition * 16 + z, + (short) fStack.getFluidID()); + packet + .addBlock(c.xPosition * 16 + x, 2, c.zPosition * 16 + z, (short) fStack.amount); + } + break; + case 3: + float polution = (float) getPolution( + aWorld, + c.xPosition * 16 + x, + c.zPosition * 16 + z); + polution /= 2000000; + polution *= -0xFF; + if (polution > 0xFF) polution = 0xFF; + polution = 0xFF - polution; + packet.addBlock(c.xPosition * 16 + x, 1, c.zPosition * 16 + z, (short) polution); + break; + } + if (data > 1) break; + } + } + } + packet.level = ((DetravMetaGeneratedTool01) aItem).getHarvestLevel(aStack, ""); + DetravNetwork.INSTANCE.sendToPlayer(packet, (EntityPlayerMP) aPlayer); + if (!aPlayer.capabilities.isCreativeMode) tool.doDamage(aStack, this.mCosts * chunks.size()); + + if (Loader.isModLoaded("visualprospecting")) { + if (data == 0 || data == 1) { + VisualProspecting_API.LogicalServer.sendProspectionResultsToClient( + (EntityPlayerMP) aPlayer, + VisualProspecting_API.LogicalServer.prospectOreVeinsWithinRadius( + aWorld.provider.dimensionId, + (int) aPlayer.posX, + (int) aPlayer.posZ, + size * 16), + new ArrayList<>()); + } else if (data == 2) { + VisualProspecting_API.LogicalServer.sendProspectionResultsToClient( + (EntityPlayerMP) aPlayer, + new ArrayList<>(), + VisualProspecting_API.LogicalServer.prospectUndergroundFluidsWithingRadius( + aWorld, + (int) aPlayer.posX, + (int) aPlayer.posZ, + size * 16)); + } + } + } + return super.onItemRightClick(aItem, aStack, aWorld, aPlayer); + } + + void addChatMassageByValue(EntityPlayer aPlayer, int value, String name) { + if (value < 0) { + aPlayer.addChatMessage( + new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name)); + } else if (value < 1) { + aPlayer + .addChatMessage(new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6"))); + } else aPlayer.addChatMessage( + new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name + " " + value)); + } + + public boolean onItemUse(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, + int aZ, int aSide, float hitX, float hitY, float hitZ) { + long data = DetravMetaGeneratedTool01.INSTANCE.getToolGTDetravData(aStack); + if (data < 2) { + if (aWorld.getBlock(aX, aY, aZ) == Blocks.bedrock) { + if (!aWorld.isRemote) { + FluidStack fStack = UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1); + addChatMassageByValue(aPlayer, fStack.amount, fStack.getLocalizedName()); + if (!aPlayer.capabilities.isCreativeMode) + ((DetravMetaGeneratedTool01) aItem).doDamage(aStack, this.mCosts); + } + return true; + } else { + if (!aWorld.isRemote) { + prospectSingleChunk((DetravMetaGeneratedTool01) aItem, aStack, aPlayer, aWorld, aX, aY, aZ); + } + return true; + } + } + if (data < 3) if (!aWorld.isRemote) { + FluidStack fStack = UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1); + addChatMassageByValue(aPlayer, fStack.amount, fStack.getLocalizedName()); + if (!aPlayer.capabilities.isCreativeMode) ((DetravMetaGeneratedTool01) aItem).doDamage(aStack, this.mCosts); + return true; + } + if (!aWorld.isRemote) { + int polution = getPolution(aWorld, aX, aZ); + addChatMassageByValue(aPlayer, polution, "Pollution"); + } + return true; + } + +} diff --git a/src/main/java/detrav/items/behaviours/BehaviourDetravToolProspector.java b/src/main/java/detrav/items/behaviours/BehaviourDetravToolProspector.java new file mode 100644 index 0000000000..c914640573 --- /dev/null +++ b/src/main/java/detrav/items/behaviours/BehaviourDetravToolProspector.java @@ -0,0 +1,420 @@ +package detrav.items.behaviours; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.SplittableRandom; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fluids.FluidStack; + +import com.sinthoras.visualprospecting.VisualProspecting_API; + +import bartworks.system.material.Werkstoff; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.registry.LanguageRegistry; +import detrav.DetravScannerMod; +import detrav.items.DetravMetaGeneratedTool01; +import detrav.utils.BartWorksHelper; +import detrav.utils.GTppHelper; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.objects.ItemData; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.common.Pollution; +import gregtech.common.UndergroundOil; +import gregtech.common.blocks.BlockOresAbstract; +import gregtech.common.blocks.TileEntityOres; +import gregtech.common.items.behaviors.BehaviourNone; + +/** + * Created by wital_000 on 19.03.2016. + */ +public class BehaviourDetravToolProspector extends BehaviourNone { + + static final int[] DISTANCEINTS = new int[] { 0, 4, 25, 64 }; + int distTextIndex; + + HashMap ores; + int badluck; + + protected final int mCosts; + + static final String CHAT_MSG_SEPARATOR = "--------------------"; + + public BehaviourDetravToolProspector(int aCosts) { + mCosts = aCosts; + } + + public boolean onItemUse(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, + int aZ, int aSide, float hitX, float hitY, float hitZ) { + + SplittableRandom aRandom = new SplittableRandom(); + int chance = ((1 + aStack.getItemDamage()) * 8) > 100 ? 100 : (1 + aStack.getItemDamage()) * 8; + + if (aWorld.isRemote) return false; + + if (aWorld.getBlock(aX, aY, aZ) == Blocks.bedrock) { + if (!aWorld.isRemote && aRandom.nextInt(100) < chance) { + FluidStack fStack = UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1); + addChatMassageByValue(aPlayer, fStack.amount / 2, "a Fluid");// fStack.getLocalizedName()); + /* + * boolean fluid = GT_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1)!=null + * &>_UndergroundOil.undergroundOil(aWorld.getChunkFromBlockCoords(aX, aZ), -1).getFluid()!=null; if + * (fluid) aPlayer.addChatMessage(new + * ChatComponentText(EnumChatFormatting.GREEN+"You found some liquid.")); else + * aPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED+"You found no liquid.")); + */ + if (!aPlayer.capabilities.isCreativeMode) + ((DetravMetaGeneratedTool01) aItem).doDamage(aStack, this.mCosts); + + if (Loader.isModLoaded("visualprospecting")) { + VisualProspecting_API.LogicalServer.sendProspectionResultsToClient( + (EntityPlayerMP) aPlayer, + new ArrayList<>(), + VisualProspecting_API.LogicalServer + .prospectUndergroundFluidsWithingRadius(aWorld, (int) aPlayer.posX, (int) aPlayer.posZ, 0)); + } + } + return true; + } + if (aWorld.getBlock(aX, aY, aZ) + .getMaterial() == Material.rock + || aWorld.getBlock(aX, aY, aZ) + .getMaterial() == Material.ground + || aWorld.getBlock(aX, aY, aZ) == GregTechAPI.sBlockOres1) { + if (!aWorld.isRemote) { + prospectChunks((DetravMetaGeneratedTool01) aItem, aStack, aPlayer, aWorld, aX, aY, aZ, aRandom, chance); + } + return true; + } + return false; + } + + protected void prospectChunks(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, SplittableRandom aRandom, int chance) { + int bX = aX; + int bZ = aZ; + + badluck = 0; + ores = new HashMap<>(); + + int range = ((DetravMetaGeneratedTool01) aItem).getHarvestLevel(aStack, "") / 2 + (aStack.getItemDamage() / 4); + if ((range % 2) == 0) { + range += 1; // kinda not needed here, divide takes it out, but we put it back in with the range+1 in the + // loop + } + range = range / 2; // Convert range from diameter to radius + + aPlayer.addChatMessage( + new ChatComponentText( + EnumChatFormatting.GOLD + GTLanguageManager.sEnglishFile + .get("LanguageFile", "gt.scanner.prospecting", "Prospecting at ") + .getString() + EnumChatFormatting.BLUE + "(" + bX + ", " + bZ + ")")); + for (int x = -(range); x < (range + 1); ++x) { + aX = bX + (x * 16); + for (int z = -(range); z < (range + 1); ++z) { + + aZ = bZ + (z * 16); + int dist = x * x + z * z; + + for (distTextIndex = 0; distTextIndex < DISTANCEINTS.length; distTextIndex++) { + if (dist <= DISTANCEINTS[distTextIndex]) { + break; + } + } + if (DetravScannerMod.DEBUG_ENABLED) aPlayer.addChatMessage( + new ChatComponentText( + EnumChatFormatting.YELLOW + "Chunk at " + + aX + + "|" + + aZ + + " to " + + (aX + 16) + + "|" + + (aZ + 16) + + StatCollector.translateToLocal("detrav.scanner.distance.texts." + distTextIndex))); + processOreProspecting( + (DetravMetaGeneratedTool01) aItem, + aStack, + aPlayer, + aWorld.getChunkFromBlockCoords(aX, aZ), + aWorld.getTileEntity(aX, aY, aZ), + GTOreDictUnificator.getAssociation( + new ItemStack(aWorld.getBlock(aX, aY, aZ), 1, aWorld.getBlockMetadata(aX, aY, aZ))), + aRandom, + chance); + } + } + + // List to hold unsorted scanner messages + List oreMessages = new ArrayList(); + + for (String key : ores.keySet()) { + int value = ores.get(key); + appendChatMessageByValue(oreMessages, aPlayer, value, key); + } + + // Define sort order by distance + List sortOrder = Arrays.asList( + StatCollector.translateToLocal("detrav.scanner.distance.texts.4"), + StatCollector.translateToLocal("detrav.scanner.distance.texts.3"), + StatCollector.translateToLocal("detrav.scanner.distance.texts.2"), + StatCollector.translateToLocal("detrav.scanner.distance.texts.1"), + StatCollector.translateToLocal("detrav.scanner.distance.texts.0")); + + List oreMessagesSorted = new ArrayList(); + oreMessagesSorted.add(new ChatComponentText(CHAT_MSG_SEPARATOR)); + + // Sort ore messages by distance, separated by ----- + for (String oreFrequency : sortOrder) { + for (ChatComponentText msg : oreMessages) { + if (msg.getChatComponentText_TextValue() + .contains(oreFrequency)) { + oreMessagesSorted.add(msg); + } + } + + // Only append ----- separator if text has been added + if (!oreMessagesSorted.get(oreMessagesSorted.size() - 1) + .getChatComponentText_TextValue() + .contains(CHAT_MSG_SEPARATOR)) { + oreMessagesSorted.add(new ChatComponentText(CHAT_MSG_SEPARATOR)); + } + } + + if (badluck == 0) { + oreMessages.add( + new ChatComponentText( + EnumChatFormatting.WHITE + StatCollector.translateToLocal("detrav.scanner.success"))); + } else { + oreMessages.add( + new ChatComponentText( + EnumChatFormatting.WHITE + StatCollector.translateToLocal("detrav.scanner.fail") + .replace("%badluck", Integer.toString(badluck)))); + } + + // Print the sorted messages + for (ChatComponentText msg : oreMessagesSorted) { + aPlayer.addChatMessage(msg); + } + + if (Loader.isModLoaded("visualprospecting")) { + VisualProspecting_API.LogicalServer.sendProspectionResultsToClient( + (EntityPlayerMP) aPlayer, + VisualProspecting_API.LogicalServer.prospectOreVeinsWithinRadius( + aWorld.provider.dimensionId, + (int) aPlayer.posX, + (int) aPlayer.posZ, + range * 16), + new ArrayList<>()); + } + } + + // Used by Electric scanner when scanning the chunk whacked by the scanner. 100% chance find rate + protected void prospectSingleChunk(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ) { + ores = new HashMap<>(); + aPlayer.addChatMessage( + new ChatComponentText( + EnumChatFormatting.GOLD + StatCollector.translateToLocal( + "detrav.scanner.prospecting") + EnumChatFormatting.BLUE + "(" + aX + ", " + aZ + ")")); + processOreProspecting( + (DetravMetaGeneratedTool01) aItem, + aStack, + aPlayer, + aWorld.getChunkFromBlockCoords(aX, aZ), + aWorld.getTileEntity(aX, aY, aZ), + GTOreDictUnificator + .getAssociation(new ItemStack(aWorld.getBlock(aX, aY, aZ), 1, aWorld.getBlockMetadata(aX, aY, aZ))), + new SplittableRandom(), + 1000); + + for (String key : ores.keySet()) { + int value = ores.get(key); + addChatMassageByValue(aPlayer, value, key); + } + + if (Loader.isModLoaded("visualprospecting")) { + VisualProspecting_API.LogicalServer.sendProspectionResultsToClient( + (EntityPlayerMP) aPlayer, + VisualProspecting_API.LogicalServer.prospectOreVeinsWithinRadius( + aWorld.provider.dimensionId, + (int) aPlayer.posX, + (int) aPlayer.posZ, + 0), + new ArrayList<>()); + } + } + + protected void processOreProspecting(DetravMetaGeneratedTool01 aItem, ItemStack aStack, EntityPlayer aPlayer, + Chunk aChunk, TileEntity aTileEntity, ItemData tAssotiation, SplittableRandom aRandom, int chance)// TileEntity + // aTileEntity) + { + if (aTileEntity != null) { + if (aTileEntity instanceof TileEntityOres) { + TileEntityOres gt_entity = (TileEntityOres) aTileEntity; + short meta = gt_entity.getMetaData(); + String format = LanguageRegistry.instance() + .getStringLocalization("gt.blockores." + meta + ".name"); + String name = Materials.getLocalizedNameForItem(format, meta % 1000); + addOreToHashMap(name, aPlayer); + if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts); + return; + } + } else if (tAssotiation != null) { + try { + String name = tAssotiation.toString(); + addChatMassageByValue(aPlayer, -1, name); + if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts); + return; + } catch (Exception e) { + addChatMassageByValue(aPlayer, -1, "ERROR, lol ^_^"); + } + } else if (aRandom.nextInt(100) < chance) { + final int data = DetravMetaGeneratedTool01.INSTANCE.getToolGTDetravData(aStack) + .intValue(); + final String small_ore_keyword = StatCollector.translateToLocal("detrav.scanner.small_ore.keyword"); + for (int x = 0; x < 16; x++) for (int z = 0; z < 16; z++) { + int ySize = aChunk.getHeightValue(x, z); + for (int y = 1; y < ySize; y++) { + + Block tBlock = aChunk.getBlock(x, y, z); + short tMetaID = (short) aChunk.getBlockMetadata(x, y, z); + if (tBlock instanceof BlockOresAbstract) { + TileEntity tTileEntity = aChunk.getTileEntityUnsafe(x, y, z); + if ((tTileEntity instanceof TileEntityOres) && ((TileEntityOres) tTileEntity).mNatural) { + tMetaID = (short) ((TileEntityOres) tTileEntity).getMetaData(); + try { + String format = LanguageRegistry.instance() + .getStringLocalization(tBlock.getUnlocalizedName() + "." + tMetaID + ".name"); + String name = Materials.getLocalizedNameForItem(format, tMetaID % 1000); + if (data != 1 && name.startsWith(small_ore_keyword)) continue; + addOreToHashMap(name, aPlayer); + } catch (Exception e) { + String name = tBlock.getUnlocalizedName() + "."; + if (data != 1 && name.contains(".small.")) continue; + addOreToHashMap(name, aPlayer); + } + } + } else if (DetravScannerMod.isGTppLoaded && GTppHelper.isGTppBlock(tBlock)) { + String name = GTppHelper.getGTppVeinName(tBlock); + if (!name.isEmpty()) addOreToHashMap(name, aPlayer); + } else if (DetravScannerMod.isBartWorksLoaded && BartWorksHelper.isOre(tBlock)) { + if (data != 1 && BartWorksHelper.isSmallOre(tBlock)) continue; + final Werkstoff werkstoff = Werkstoff.werkstoffHashMap.getOrDefault( + (short) ((BartWorksHelper.getMetaFromBlock(aChunk, x, y, z, tBlock)) * -1), + null); + String type = BartWorksHelper.isSmallOre(tBlock) ? "oreSmall" : "ore"; + String translated = GTLanguageManager.getTranslation("bw.blocktype." + type); + addOreToHashMap(translated.replace("%material", werkstoff.getLocalizedName()), aPlayer); + } else if (data == 1) { + tAssotiation = GTOreDictUnificator.getAssociation(new ItemStack(tBlock, 1, tMetaID)); + if ((tAssotiation != null) && (tAssotiation.mPrefix.toString() + .startsWith("ore"))) { + try { + try { + tMetaID = (short) tAssotiation.mMaterial.mMaterial.mMetaItemSubID; + String format = LanguageRegistry.instance() + .getStringLocalization("gt.blockores." + tMetaID + ".name"); + String name = Materials.getLocalizedNameForItem(format, tMetaID % 1000); + addOreToHashMap(name, aPlayer); + } catch (Exception e1) { + String name = tAssotiation.toString(); + addOreToHashMap(name, aPlayer); + } + } catch (Exception ignored) {} + } + } + + } + } + + if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts); + + return; + } else { + if (DetravScannerMod.DEBUG_ENABLED) + aPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + " Failed on this chunk")); + badluck++; + if (!aPlayer.capabilities.isCreativeMode) aItem.doDamage(aStack, this.mCosts / 4); + } + // addChatMassageByValue(aPlayer,0,null); + } + + void addOreToHashMap(String orename, EntityPlayer aPlayer) { + String oreDistance = orename + StatCollector.translateToLocal("detrav.scanner.distance.texts." + distTextIndex); // orename + // + + // the + // textual + // distance + // of + // the + // ore + if (!ores.containsKey(oreDistance)) { + if (DetravScannerMod.DEBUG_ENABLED) aPlayer + .addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + " Adding to oremap " + oreDistance)); + ores.put(oreDistance, 1); + } else { + int val = ores.get(oreDistance); + ores.put(oreDistance, val + 1); + } + } + + void addChatMassageByValue(EntityPlayer aPlayer, int value, String name) { + if (value < 0) { + aPlayer.addChatMessage( + new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name)); + } else if (value < 1) { + aPlayer + .addChatMessage(new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.0"))); + } else if (value < 10) aPlayer.addChatMessage( + new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.1"))); + else if (value < 30) aPlayer.addChatMessage( + new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.2"))); + else if (value < 60) aPlayer.addChatMessage( + new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.3"))); + else if (value < 100) aPlayer.addChatMessage( + new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.4"))); + else aPlayer.addChatMessage( + new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.5"))); + } + + // Same as addChatMassageByValue but appends to a list of chat messages and spelled correctly + void appendChatMessageByValue(List chatMessageList, EntityPlayer aPlayer, int value, + String name) { + if (value < 0) { + chatMessageList + .add(new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.6") + name)); + } else if (value < 1) { + chatMessageList.add(new ChatComponentText(StatCollector.translateToLocal("detrav.scanner.found.texts.0"))); + } else if (value < 10) chatMessageList + .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.1"))); + else if (value < 30) chatMessageList + .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.2"))); + else if (value < 60) chatMessageList + .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.3"))); + else if (value < 100) chatMessageList + .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.4"))); + else chatMessageList + .add(new ChatComponentText(name + StatCollector.translateToLocal("detrav.scanner.found.texts.5"))); + } + + public static int getPolution(World aWorld, int aX, int aZ) { + return Pollution.getPollution(aWorld.getChunkFromBlockCoords(aX, aZ)); + } +} diff --git a/src/main/java/detrav/items/processing/ProcessingDetravToolProspector.java b/src/main/java/detrav/items/processing/ProcessingDetravToolProspector.java new file mode 100644 index 0000000000..4ae83edc72 --- /dev/null +++ b/src/main/java/detrav/items/processing/ProcessingDetravToolProspector.java @@ -0,0 +1,129 @@ +package detrav.items.processing; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +import detrav.DetravScannerMod; +import detrav.items.DetravMetaGeneratedTool01; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTModHandler; + +/** + * Created by wital_000 on 18.03.2016. + */ +public class ProcessingDetravToolProspector implements gregtech.api.interfaces.IOreRecipeRegistrator { + + public ProcessingDetravToolProspector() { + OrePrefixes.toolHeadPickaxe.add(this); + } + + public void registerOre(OrePrefixes aPrefix, Materials material, String aOreDictName, String aModName, + ItemStack aStack) { + if (!aPrefix.doGenerateItem(material)) return; + if (DetravScannerMod.DEBUG_ENABLED) return; + try { + // ULV disabled + // GTModHandler.addCraftingRecipe(DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(0, 1, aMaterial, + // Materials.Lead, null), GTModHandler.RecipeBits.DISMANTLEABLE | + // GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, new + // Object[]{"SHE","CPC","PXP",'E',OreDictionary.getOres("cellSulfuricAcid").get(0),'S',OreDictionary.getOres("cellHydroxide").get(0),'H',OrePrefixes.toolHeadDrill.get(aMaterial),'P',OrePrefixes.plate.get(aMaterial),'C',OrePrefixes.circuit.get(Materials.Primitive),'X',gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList.Sensor_ULV}); + GTModHandler.addCraftingRecipe( + DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(2, 1, material, Materials.Steel, null), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellSulfuricAcid") + .get(0), 'S', + OreDictionary.getOres("cellHydroxide") + .get(0), + 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', + OrePrefixes.circuit.get(Materials.Basic), 'X', ItemList.Sensor_LV }); + GTModHandler.addCraftingRecipe( + DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(4, 1, material, Materials.Steel, null), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellSulfuricAcid") + .get(0), 'S', + OreDictionary.getOres("cellHydroxide") + .get(0), + 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', + OrePrefixes.circuit.get(Materials.Good), 'X', ItemList.Sensor_MV }); + + GTModHandler.addCraftingRecipe( + DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(6, 1, material, Materials.Steel, null), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellNitricAcid") + .get(0), 'S', + OreDictionary.getOres("cellSodiumPersulfate") + .get(0), + 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', + OrePrefixes.circuit.get(Materials.Advanced), 'X', ItemList.Sensor_HV }); + GTModHandler.addCraftingRecipe( + DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(8, 1, material, Materials.Steel, null), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellNitricAcid") + .get(0), 'S', + OreDictionary.getOres("cellSodiumPersulfate") + .get(0), + 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', + OrePrefixes.circuit.get(Materials.Data), 'X', ItemList.Sensor_EV }); + GTModHandler.addCraftingRecipe( + DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(10, 1, material, Materials.Steel, null), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellNitricAcid") + .get(0), 'S', + OreDictionary.getOres("cellSodiumPersulfate") + .get(0), + 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', + OrePrefixes.circuit.get(Materials.Elite), 'X', ItemList.Sensor_IV }); + + GTModHandler.addCraftingRecipe( + DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(12, 1, material, Materials.Steel, null), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid") + .get(0), 'S', + OreDictionary.getOres("cellLithiumPeroxide") + .get(0), + 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', + OrePrefixes.circuit.get(Materials.Master), 'X', ItemList.Sensor_LuV }); + GTModHandler.addCraftingRecipe( + DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(14, 1, material, Materials.Steel, null), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid") + .get(0), 'S', + OreDictionary.getOres("cellLithiumPeroxide") + .get(0), + 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', + OrePrefixes.circuit.get(Materials.Ultimate), 'X', ItemList.Sensor_ZPM }); + GTModHandler.addCraftingRecipe( + DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(16, 1, material, Materials.Steel, null), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid") + .get(0), 'S', + OreDictionary.getOres("cellLithiumPeroxide") + .get(0), + 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', + OrePrefixes.circuit.get(Materials.SuperconductorUHV), 'X', ItemList.Sensor_UV }); + + GTModHandler.addCraftingRecipe( + DetravMetaGeneratedTool01.INSTANCE.getToolWithStats(18, 1, material, Materials.Steel, null), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS + | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SHE", "CPC", "PXP", 'E', OreDictionary.getOres("cellHydrofluoricAcid") + .get(0), 'S', + OreDictionary.getOres("cellHydrogenPeroxide") + .get(0), + 'H', OrePrefixes.toolHeadDrill.get(material), 'P', OrePrefixes.plate.get(material), 'C', + OrePrefixes.circuit.get(Materials.Infinite), 'X', ItemList.Sensor_UHV }); + + } catch (Exception ignored) {} + + } +} diff --git a/src/main/java/detrav/items/tools/DetravProspector.java b/src/main/java/detrav/items/tools/DetravProspector.java new file mode 100644 index 0000000000..63eb0e1452 --- /dev/null +++ b/src/main/java/detrav/items/tools/DetravProspector.java @@ -0,0 +1,34 @@ +package detrav.items.tools; + +import net.minecraft.item.ItemStack; + +import detrav.enums.Textures01; +import detrav.items.behaviours.BehaviourDetravToolProspector; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class DetravProspector extends DetravToolElectricProspectorBase { + + private final int tier; + + public DetravProspector(int tier) { + this.tier = tier; + } + + public int getBaseQuality() { + return tier; + } + + public float getMaxDurabilityMultiplier() { + double x = tier + 1; + return (float) (((float) 0.005D + Math.tanh(Math.pow(x, (x / 8D)) / 25D) * (x / 6D)) * 1.25); + } + + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return Textures01.mTextures[0]; + } + + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourDetravToolProspector(15)); + } +} diff --git a/src/main/java/detrav/items/tools/DetravToolElectricProspector.java b/src/main/java/detrav/items/tools/DetravToolElectricProspector.java new file mode 100644 index 0000000000..abe5259036 --- /dev/null +++ b/src/main/java/detrav/items/tools/DetravToolElectricProspector.java @@ -0,0 +1,33 @@ +package detrav.items.tools; + +import net.minecraft.item.ItemStack; + +import detrav.enums.Textures01; +import gregtech.api.interfaces.IIconContainer; + +/** + * Created by wital_000 on 19.03.2016. + */ +public class DetravToolElectricProspector extends DetravToolElectricProspectorBase { + + private final int tier; + + public DetravToolElectricProspector(int tier) { + this.tier = tier; + } + + public int getBaseQuality() { + return tier - 6; + } + + public float getMaxDurabilityMultiplier() { + if (tier - 6 == 0) return (float) Math.pow(((float) ((tier - 6F) * 2F)), 0.0D); + else return (float) ((tier - 6F) * 2F); + } + + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + + if (tier <= 9 && tier >= 6) return Textures01.mTextures[tier - 5]; + else return Textures01.mTextures[1]; + } +} diff --git a/src/main/java/detrav/items/tools/DetravToolElectricProspectorBase.java b/src/main/java/detrav/items/tools/DetravToolElectricProspectorBase.java new file mode 100644 index 0000000000..f73344fc6b --- /dev/null +++ b/src/main/java/detrav/items/tools/DetravToolElectricProspectorBase.java @@ -0,0 +1,200 @@ +package detrav.items.tools; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.AchievementList; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; +import net.minecraftforge.event.world.BlockEvent; + +import detrav.enums.Textures01; +import detrav.items.behaviours.BehaviourDetravToolElectricProspector; +import gregtech.api.GregTechAPI; +import gregtech.api.damagesources.GTDamageSources; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.IToolStats; +import gregtech.api.items.MetaGeneratedTool; + +/** + * Created by wital_000 on 19.03.2016. modified by bartimaeusnek on 05.06.2018 + */ +public class DetravToolElectricProspectorBase implements IToolStats { + + public int getToolDamagePerBlockBreak() { + return 100; + } + + public int getToolDamagePerDropConversion() { + return 100; + } + + public int getToolDamagePerContainerCraft() { + return 100; + } + + public int getToolDamagePerEntityAttack() { + return 2000; + } + + public int getBaseQuality() { + return 0; + } + + public float getBaseDamage() { + return 1.0F; + } + + @Override + public int getHurtResistanceTime(int i, Entity entity) { + return i; + } + + public float getSpeedMultiplier() { + return 1.0F; + } + + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public DamageSource getDamageSource(EntityLivingBase aPlayer, Entity aEntity) { + return GTDamageSources.getCombatDamage( + (aPlayer instanceof EntityPlayer) ? "player" : "mob", + aPlayer, + (aEntity instanceof EntityLivingBase) ? getDeathMessage(aPlayer, (EntityLivingBase) aEntity) : null); + } + + public String getCraftingSound() { + return null; + } + + public String getEntityHitSound() { + return null; + } + + public String getBreakingSound() { + return (String) GregTechAPI.sSoundList.get(0); + } + + @Override + public Enchantment[] getEnchantments(ItemStack itemStack) { + return new Enchantment[0]; + } + + @Override + public int[] getEnchantmentLevels(ItemStack itemStack) { + return new int[0]; + } + + public String getMiningSound() { + return null; + } + + public boolean canBlock() { + return false; + } + + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isGrafter() { + return false; + } + + @Override + public boolean isChainsaw() { + return false; + } + + @Override + public boolean isWrench() { + return false; + } + + @Override + public boolean isWeapon() { + return false; + } + + @Override + public boolean isRangedWeapon() { + return false; + } + + @Override + public boolean isMiningTool() { + return false; + } + + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + + return false; + } + + @Override + public int convertBlockDrops(List list, ItemStack itemStack, EntityPlayer entityPlayer, Block block, + int i, int i1, int i2, byte b, int i3, boolean b1, BlockEvent.HarvestDropsEvent harvestDropsEvent) { + return 0; + } + + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public float getNormalDamageAgainstEntity(float v, Entity entity, ItemStack itemStack, EntityPlayer entityPlayer) { + return v; + } + + @Override + public float getMagicDamageAgainstEntity(float v, Entity entity, ItemStack itemStack, EntityPlayer entityPlayer) { + return v; + } + + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return Textures01.mTextures[0]; + } + + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourDetravToolElectricProspector(getToolDamagePerBlockBreak())); + } + + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { + + aPlayer.triggerAchievement(AchievementList.openInventory); + aPlayer.triggerAchievement(AchievementList.mineWood); + aPlayer.triggerAchievement(AchievementList.buildWorkBench); + } + + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " got Pick Up'ed by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } + + public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World aWorld, + int aX, int aY, int aZ) { + return aDefault; + } +} diff --git a/src/main/java/detrav/net/DetravNetwork.java b/src/main/java/detrav/net/DetravNetwork.java new file mode 100644 index 0000000000..30bdb23157 --- /dev/null +++ b/src/main/java/detrav/net/DetravNetwork.java @@ -0,0 +1,83 @@ +package detrav.net; + +import java.util.EnumMap; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayerMP; + +import cpw.mods.fml.common.network.FMLEmbeddedChannel; +import cpw.mods.fml.common.network.FMLOutboundHandler; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.network.internal.FMLProxyPacket; +import cpw.mods.fml.relauncher.Side; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufInputStream; +import io.netty.buffer.ByteBufOutputStream; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.codec.MessageToMessageCodec; + +/** + * Created by wital_000 on 20.03.2016. + */ +@ChannelHandler.Sharable +public class DetravNetwork extends MessageToMessageCodec { + + static public DetravNetwork INSTANCE; + private final EnumMap mChannel; + + public DetravNetwork() { + INSTANCE = this; + this.mChannel = NetworkRegistry.INSTANCE.newChannel("DetravScanner", this, new HandlerShared()); + } + + @Override + protected void encode(ChannelHandlerContext ctx, DetravPacket msg, List out) throws Exception { + ByteBuf buf = Unpooled.buffer(); + buf.writeByte(msg.getPacketID()); + msg.encode(new ByteBufOutputStream(buf)); + out.add( + new FMLProxyPacket( + buf, + ctx.channel() + .attr(NetworkRegistry.FML_CHANNEL) + .get())); + } + + @Override + protected void decode(ChannelHandlerContext ctx, FMLProxyPacket msg, List out) throws Exception { + ByteBuf payload = msg.payload(); + payload.readByte(); // Sub Channel - Ignore + out.add(ProspectingPacket.decode(new ByteBufInputStream(payload))); + } + + public void sendToPlayer(DetravPacket aPacket, EntityPlayerMP aPlayer) { + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGET) + .set(FMLOutboundHandler.OutboundTarget.PLAYER); + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) + .set(aPlayer); + this.mChannel.get(Side.SERVER) + .writeAndFlush(aPacket); + } + + public void sendToServer(DetravPacket aPacket) { + this.mChannel.get(Side.CLIENT) + .attr(FMLOutboundHandler.FML_MESSAGETARGET) + .set(FMLOutboundHandler.OutboundTarget.TOSERVER); + this.mChannel.get(Side.CLIENT) + .writeAndFlush(aPacket); + } + + @ChannelHandler.Sharable + static final class HandlerShared extends SimpleChannelInboundHandler { + + @Override + protected void channelRead0(ChannelHandlerContext ctx, DetravPacket aPacket) { + aPacket.process(); + } + } +} diff --git a/src/main/java/detrav/net/DetravPacket.java b/src/main/java/detrav/net/DetravPacket.java new file mode 100644 index 0000000000..ca71fefd5e --- /dev/null +++ b/src/main/java/detrav/net/DetravPacket.java @@ -0,0 +1,16 @@ +package detrav.net; + +import java.io.IOException; +import java.io.OutputStream; + +/** + * Created by wital_000 on 20.03.2016. + */ +public abstract class DetravPacket { + + public abstract int getPacketID(); + + public abstract void encode(OutputStream out) throws IOException; + + public abstract void process(); +} diff --git a/src/main/java/detrav/net/ProspectingPacket.java b/src/main/java/detrav/net/ProspectingPacket.java new file mode 100644 index 0000000000..bfa22511e3 --- /dev/null +++ b/src/main/java/detrav/net/ProspectingPacket.java @@ -0,0 +1,191 @@ +package detrav.net; + +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.google.common.base.Objects; + +import bartworks.system.material.Werkstoff; +import detrav.DetravScannerMod; +import detrav.gui.DetravScannerGUI; +import detrav.gui.textures.DetravMapTexture; +import detrav.utils.GTppHelper; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.util.GTLanguageManager; + +/** + * Created by wital_000 on 20.03.2016. + */ +public class ProspectingPacket extends DetravPacket { + + public final int chunkX; + public final int chunkZ; + public final int posX; + public final int posZ; + public final int size; + public final int ptype; + public final HashMap[][] map; + public final HashMap ores; + public final HashMap metaMap; + public static final HashMap fluidColors = new HashMap<>(); + + public int level = -1; + + public ProspectingPacket(int chunkX, int chunkZ, int posX, int posZ, int size, int ptype) { + this.chunkX = chunkX; + this.chunkZ = chunkZ; + this.posX = posX; + this.posZ = posZ; + this.size = size; + this.ptype = ptype; + this.map = new HashMap[(size * 2 + 1) * 16][(size * 2 + 1) * 16]; + this.ores = new HashMap<>(); + this.metaMap = new HashMap<>(); + } + + private static void addOre(ProspectingPacket packet, byte y, int i, int j, short meta) { + final String name; + short[] rgba; + + try { + if (packet.ptype == 0 || packet.ptype == 1) { + // Ore or Small Ore + if (meta < 7000 || meta > 7500) { + if (meta > 0) { + Materials tMaterial = GregTechAPI.sGeneratedMaterials[meta % 1000]; + rgba = tMaterial.getRGBA(); + name = tMaterial.getLocalizedNameForItem( + GTLanguageManager.getTranslation("gt.blockores." + meta + ".name")); + } else { + final Werkstoff werkstoff = Werkstoff.werkstoffHashMap.getOrDefault((short) (meta * -1), null); + String translated = GTLanguageManager.getTranslation("bw.blocktype.ore"); + name = translated.replace("%material", werkstoff.getLocalizedName()); + rgba = werkstoff != null ? werkstoff.getRGBA() : new short[] { 0, 0, 0, 0 }; + } + } else { + gtPlusPlus.core.material.Material pMaterial = GTppHelper.decodeoresGTpp.get((short) (meta - 7000)); + rgba = pMaterial.getRGBA(); + name = pMaterial.getLocalizedName() + " Ore"; + } + } else if (packet.ptype == 2) { + // Fluid + rgba = fluidColors.get((int) meta); + if (rgba == null) { + DetravScannerMod.proxy + .sendPlayerExeption("Unknown fluid ID = " + meta + " Please add to FluidColors.java!"); + rgba = new short[] { 0, 0, 0, 0 }; + } + + name = Objects.firstNonNull( + FluidRegistry.getFluid(meta) + .getLocalizedName(new FluidStack(FluidRegistry.getFluid(meta), 0)), + StatCollector.translateToLocal("gui.detrav.scanner.unknown_fluid")); + } else if (packet.ptype == 3) { + // Pollution + name = StatCollector.translateToLocal("gui.detrav.scanner.pollution"); + rgba = new short[] { 125, 123, 118, 0 }; + } else { + return; + } + } catch (Exception ignored) { + return; + } + packet.ores.put(name, ((rgba[0] & 0xFF) << 16) + ((rgba[1] & 0xFF) << 8) + ((rgba[2] & 0xFF))); + packet.metaMap.put(meta, name); + } + + public static Object decode(InputStream in) throws IOException { + DataInput aData = new DataInputStream(new GZIPInputStream(in)); + ProspectingPacket packet = new ProspectingPacket( + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt()); + packet.level = aData.readInt(); + + int aSize = (packet.size * 2 + 1) * 16; + int checkOut = 0; + for (int i = 0; i < aSize; i++) for (int j = 0; j < aSize; j++) { + byte kSize = aData.readByte(); + if (kSize == 0) continue; + packet.map[i][j] = new HashMap<>(); + for (int k = 0; k < kSize; k++) { + final byte y = aData.readByte(); + final short meta = aData.readShort(); + packet.map[i][j].put(y, meta); + if (packet.ptype != 2 || y == 1) addOre(packet, y, i, j, meta); + checkOut++; + } + } + int checkOut2 = aData.readInt(); + if (checkOut != checkOut2) return null; + return packet; + } + + @Override + public int getPacketID() { + return 0; + } + + @Override + public void encode(OutputStream out) throws IOException { + DataOutputStream tOut = new DataOutputStream(new GZIPOutputStream(out)); + tOut.writeInt(chunkX); + tOut.writeInt(chunkZ); + tOut.writeInt(posX); + tOut.writeInt(posZ); + tOut.writeInt(size); + tOut.writeInt(ptype); + tOut.writeInt(level); + + int aSize = (size * 2 + 1) * 16; + int checkOut = 0; + for (int i = 0; i < aSize; i++) for (int j = 0; j < aSize; j++) { + HashMap data = map[i][j]; + if (data == null) tOut.writeByte(0); + else { + tOut.writeByte( + data.keySet() + .size()); + for (byte key : data.keySet()) { + tOut.writeByte(key); + tOut.writeShort(data.get(key)); + checkOut++; + } + } + } + tOut.writeInt(checkOut); + tOut.close(); + } + + @Override + public void process() { + DetravScannerGUI.newMap(new DetravMapTexture(this)); + DetravScannerMod.proxy.openProspectorGUI(); + } + + public void addBlock(int x, int y, int z, short metaData) { + int aX = x - (chunkX - size) * 16; + int aZ = z - (chunkZ - size) * 16; + if (map[aX][aZ] == null) map[aX][aZ] = new HashMap<>(); + map[aX][aZ].put((byte) y, metaData); + } + + public int getSize() { + return (size * 2 + 1) * 16; + } +} diff --git a/src/main/java/detrav/proxies/ClientProxy.java b/src/main/java/detrav/proxies/ClientProxy.java new file mode 100644 index 0000000000..fa0aac05b0 --- /dev/null +++ b/src/main/java/detrav/proxies/ClientProxy.java @@ -0,0 +1,49 @@ +package detrav.proxies; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; + +import detrav.DetravScannerMod; +import detrav.enums.Textures01; +import detrav.gui.DetravScannerGUI; + +/** + * Created by wital_000 on 19.03.2016. + */ +public class ClientProxy extends CommonProxy { + + public ClientProxy() { + int test = Textures01.mTextures.length; + } + + @Override + public void onPostLoad() { + super.onPostLoad(); + } + + @Override + public void onLoad() { + super.onLoad(); + } + + public void openProspectorGUI() { + EntityPlayer player = Minecraft.getMinecraft().thePlayer; + player.openGui( + DetravScannerMod.instance, + DetravScannerGUI.GUI_ID, + player.worldObj, + (int) player.posX, + (int) player.posY, + (int) player.posZ); + } + + @Override + public void onPreInit() { + super.onPreInit(); + } + + @Override + public void sendPlayerExeption(String s) { + Minecraft.getMinecraft().thePlayer.sendChatMessage("DetravScannerMod: " + s); + } +} diff --git a/src/main/java/detrav/proxies/CommonProxy.java b/src/main/java/detrav/proxies/CommonProxy.java new file mode 100644 index 0000000000..f8e0500eea --- /dev/null +++ b/src/main/java/detrav/proxies/CommonProxy.java @@ -0,0 +1,54 @@ +package detrav.proxies; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +import cpw.mods.fml.common.network.IGuiHandler; +import detrav.events.DetravLoginEventHandler; +import detrav.gui.DetravScannerGUI; + +/** + * Created by wital_000 on 19.03.2016. + */ +public class CommonProxy implements IGuiHandler { + + public void onLoad() { + + } + + public void onPostLoad() { + DetravLoginEventHandler.register(); + } + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + switch (ID) { + case DetravScannerGUI.GUI_ID: + return null; + default: + return null; + } + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + switch (ID) { + case DetravScannerGUI.GUI_ID: + return new DetravScannerGUI(); + default: + return null; + } + } + + public void openProspectorGUI() { + // just Client code + } + + public void onPreInit() { + + } + + public void sendPlayerExeption(String s) { + + } +} diff --git a/src/main/java/detrav/proxies/ServerProxy.java b/src/main/java/detrav/proxies/ServerProxy.java new file mode 100644 index 0000000000..d0875a7163 --- /dev/null +++ b/src/main/java/detrav/proxies/ServerProxy.java @@ -0,0 +1,22 @@ +package detrav.proxies; + +/** + * Created by wital_000 on 19.03.2016. + */ +public class ServerProxy extends CommonProxy { + + @Override + public void onPostLoad() { + super.onPostLoad(); + } + + @Override + public void onLoad() { + super.onLoad(); + } + + @Override + public void onPreInit() { + super.onPreInit(); + } +} diff --git a/src/main/java/detrav/utils/BartWorksHelper.java b/src/main/java/detrav/utils/BartWorksHelper.java new file mode 100644 index 0000000000..1bbadc71c7 --- /dev/null +++ b/src/main/java/detrav/utils/BartWorksHelper.java @@ -0,0 +1,23 @@ +package detrav.utils; + +import net.minecraft.block.Block; +import net.minecraft.world.chunk.Chunk; + +import bartworks.system.material.BWMetaGeneratedOres; +import bartworks.system.material.BWMetaGeneratedSmallOres; + +public class BartWorksHelper { + + public static boolean isOre(Block tBlock) { + return tBlock instanceof BWMetaGeneratedOres; + } + + public static boolean isSmallOre(Block tBlock) { + return tBlock instanceof BWMetaGeneratedSmallOres; + } + + public static short getMetaFromBlock(Chunk c, int x, int y, int z, Block tBlock) { + return (short) (tBlock.getDamageValue(c.worldObj, c.xPosition * 16 + x, y, c.zPosition * 16 + z) * -1); + } + +} diff --git a/src/main/java/detrav/utils/DetravCreativeTab.java b/src/main/java/detrav/utils/DetravCreativeTab.java new file mode 100644 index 0000000000..4550e7ec4b --- /dev/null +++ b/src/main/java/detrav/utils/DetravCreativeTab.java @@ -0,0 +1,51 @@ +package detrav.utils; + +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Items; +import net.minecraft.item.Item; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import detrav.items.DetravMetaGeneratedTool01; + +/** + * Created by wital_000 on 19.03.2016. + */ +public class DetravCreativeTab extends CreativeTabs { + + public DetravCreativeTab() { + super("Detrav Scanner"); + } + + @Override + public Item getTabIconItem() { + return Items.stick; + } + + @Override + @SideOnly(Side.CLIENT) + public void displayAllReleventItems(List p_78018_1_) { + for (Object o : Item.itemRegistry) { + Item item = (Item) o; + + if (item == null) { + continue; + } + + for (CreativeTabs tab : item.getCreativeTabs()) { + if (tab == this) { + item.getSubItems(item, this, p_78018_1_); + if (item instanceof DetravMetaGeneratedTool01) { + ((DetravMetaGeneratedTool01) item).getDetravSubItems(item, this, p_78018_1_); + } + } + } + } + + if (this.func_111225_m() != null) { + this.addEnchantmentBooksToList(p_78018_1_, this.func_111225_m()); + } + } +} diff --git a/src/main/java/detrav/utils/FluidColors.java b/src/main/java/detrav/utils/FluidColors.java new file mode 100644 index 0000000000..3bb52bb76b --- /dev/null +++ b/src/main/java/detrav/utils/FluidColors.java @@ -0,0 +1,135 @@ +package detrav.utils; + +import static detrav.net.ProspectingPacket.fluidColors; + +import java.util.Arrays; +import java.util.Objects; + +import net.minecraftforge.fluids.FluidRegistry; + +import gregtech.api.enums.Materials; + +public class FluidColors { + + public static void makeColors() { + + reFillFluidColors(); + + // ProgressManager.ProgressBar progressBar = ProgressManager.push("Making Fluid Colors", (int) + // (Materials.values().length + + // FluidRegistry.getRegisteredFluids().values().stream().filter(Objects::nonNull).count())); + Arrays.stream(Materials.values()) + .forEach(mat -> { + // progressBar.step(mat.mDefaultLocalName); + if (mat.getSolid(0) != null) fluidColors.putIfAbsent( + mat.getSolid(0) + .getFluidID(), + mat.mRGBa); + if (mat.getGas(0) != null) fluidColors.putIfAbsent( + mat.getGas(0) + .getFluidID(), + mat.mRGBa); + if (mat.getFluid(0) != null) fluidColors.putIfAbsent( + mat.getFluid(0) + .getFluidID(), + mat.mRGBa); + if (mat.getMolten(0) != null) fluidColors.putIfAbsent( + mat.getMolten(0) + .getFluidID(), + mat.mRGBa); + }); + FluidRegistry.getRegisteredFluids() + .values() + .stream() + .filter(Objects::nonNull) + .forEach(fluid -> { + // progressBar.step(fluid.getName()); + fluidColors.putIfAbsent(fluid.getID(), convertColorInt(fluid.getColor())); + }); + // ProgressManager.pop(progressBar); + } + + private static void reFillFluidColors() { + try { + // Should probably be put somewhere else, but I suck at Java + fluidColors.put(Materials.NatruralGas.mGas.getID(), new short[] { 0x00, 0xff, 0xff }); + fluidColors.put(Materials.OilLight.mFluid.getID(), new short[] { 0xff, 0xff, 0x00 }); + fluidColors.put(Materials.OilMedium.mFluid.getID(), new short[] { 0x00, 0xFF, 0x00 }); + fluidColors.put(Materials.OilHeavy.mFluid.getID(), new short[] { 0xFF, 0x00, 0xFF }); + fluidColors.put(Materials.Oil.mFluid.getID(), new short[] { 0x00, 0x00, 0x00 }); + fluidColors.put(Materials.Helium_3.mGas.getID(), new short[] { 0x80, 0x20, 0xe0 }); + fluidColors.put(Materials.SaltWater.mFluid.getID(), new short[] { 0x80, 0xff, 0x80 }); + // fluidColors.put(Materials.Naquadah.getMolten(0).getFluid().getID(), new short[]{0x20, 0x20, 0x20}); + // fluidColors.put(Materials.NaquadahEnriched.getMolten(0).getFluid().getID(), new short[]{0x60, 0x60, + // 0x60}); + fluidColors.put( + Materials.Lead.getMolten(0) + .getFluid() + .getID(), + new short[] { 0xd0, 0xd0, 0xd0 }); + fluidColors.put(Materials.Chlorobenzene.mFluid.getID(), new short[] { 0x40, 0x80, 0x40 }); + fluidColors.put( + FluidRegistry.getFluid("liquid_extra_heavy_oil") + .getID(), + new short[] { 0x00, 0x00, 0x50 }); + fluidColors.put(Materials.Oxygen.mGas.getID(), new short[] { 0x40, 0x40, 0xA0 }); + fluidColors.put(Materials.Nitrogen.mGas.getID(), new short[] { 0x00, 0x80, 0xd0 }); + fluidColors.put(Materials.Methane.mGas.getID(), new short[] { 0x80, 0x20, 0x20 }); + fluidColors.put(Materials.Ethane.mGas.getID(), new short[] { 0x40, 0x80, 0x20 }); + fluidColors.put(Materials.Ethylene.mGas.getID(), new short[] { 0xd0, 0xd0, 0xd0 }); + fluidColors.put(FluidRegistry.LAVA.getID(), new short[] { 0xFF, 0x00, 0x00 }); + fluidColors.put( + FluidRegistry.getFluid("unknowwater") + .getID(), + new short[] { 0x8A, 0x2B, 0xE2 }); + fluidColors.put(Materials.Hydrogen.mGas.getID(), new short[] { 0x32, 0x32, 0xD6 }); + fluidColors.put(Materials.SulfuricAcid.mFluid.getID(), new short[] { 0xFF, 0xB9, 0x0F }); + fluidColors.put(Materials.HydricSulfide.mFluid.getID(), new short[] { 0xFF, 0x8F, 0x43 }); + fluidColors.put(Materials.CarbonMonoxide.mGas.getID(), new short[] { 0x10, 0x4E, 0x8B }); + fluidColors.put(Materials.CarbonDioxide.mGas.getID(), new short[] { 0x69, 0x69, 0x69 }); + fluidColors.put( + FluidRegistry.getFluid("ic2distilledwater") + .getID(), + new short[] { 0x1E, 0x90, 0xFF }); + fluidColors.put(Materials.Deuterium.mGas.getID(), new short[] { 0xFF, 0xE3, 0x9F }); + fluidColors.put( + Materials.Iron.getMolten(0) + .getFluid() + .getID(), + new short[] { 0x8B, 0x88, 0x78 }); + fluidColors.put( + Materials.Tin.getMolten(0) + .getFluid() + .getID(), + new short[] { 0xE7, 0xE7, 0xE4 }); + fluidColors.put( + Materials.Copper.getMolten(0) + .getFluid() + .getID(), + new short[] { 0xFF, 0x7F, 0x24 }); + fluidColors.put( + FluidRegistry.getFluid("fluorine") + .getID(), + new short[] { 0x99, 0xC1, 0xAD }); + fluidColors.put( + FluidRegistry.getFluid("hydrofluoricacid") + .getID(), + new short[] { 0x00, 0xCE, 0xD1 }); + fluidColors.put(Materials.PhosphoricAcid.mFluid.getID(), new short[] { 0xEE, 0x76, 0x00 }); + + // possible nulls + fluidColors.put(Materials.LiquidAir.mFluid.getID(), new short[] { 0x99, 0x99, 0xEA }); + } catch (Exception ignored) {} + /* + * Set set = fluidColors.entrySet(); Iterator iterator = set.iterator(); System.out.println( + * "DETRAV SCANNER DEBUG" ); while(iterator.hasNext()) { Map.Entry mentry = (Map.Entry) iterator.next(); + * System.out.println( "key is: "+ (Integer)mentry.getKey() + " & Value is: " + ((short[])mentry.getValue())[0] + * + " " + ((short[])mentry.getValue())[1] + " " + ((short[])mentry.getValue())[2] ); } + */ + } + + private static short[] convertColorInt(int color) { + return new short[] { (short) (color << 16 & 0xff), (short) (color << 8 & 0xff), (short) (color & 0xff) }; + } + +} diff --git a/src/main/java/detrav/utils/GTppHelper.java b/src/main/java/detrav/utils/GTppHelper.java new file mode 100644 index 0000000000..985ca3386b --- /dev/null +++ b/src/main/java/detrav/utils/GTppHelper.java @@ -0,0 +1,67 @@ +package detrav.utils; + +import java.util.HashMap; + +import net.minecraft.block.Block; + +import gtPlusPlus.core.block.base.BlockBaseOre; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.MaterialsOres; +import gtPlusPlus.core.material.nuclear.MaterialsFluorides; + +/** + * Created by bartimaeusnek on 19.04.2018. + */ +public class GTppHelper { + + public static final HashMap decodeoresGTpp = new HashMap<>(); + public static final HashMap encodeoresGTpp = new HashMap<>(); + + public static void generate_OreIDs() { + short n = 0; + for (; n < MaterialsOres.class.getFields().length; ++n) { + try { + Short i = (short) (n + 1); + Material m = ((Material) MaterialsOres.class.getFields()[n].get(MaterialsOres.class.getFields()[n])); + decodeoresGTpp.put(i, m); + encodeoresGTpp.put(m, i); + } catch (Exception ignored) {} + } + // Manually add ores from other places than the ore class + // Fluorite + decodeoresGTpp.put((short) (++n + 1), MaterialsFluorides.FLUORITE); + encodeoresGTpp.put(MaterialsFluorides.FLUORITE, (short) (n + 1)); + // Rare Earths + decodeoresGTpp.put((short) (++n + 1), MaterialMisc.RARE_EARTH_LOW); + encodeoresGTpp.put(MaterialMisc.RARE_EARTH_LOW, (short) (n + 1)); + decodeoresGTpp.put((short) (++n + 1), MaterialMisc.RARE_EARTH_MID); + encodeoresGTpp.put(MaterialMisc.RARE_EARTH_MID, (short) (n + 1)); + decodeoresGTpp.put((short) (++n + 1), MaterialMisc.RARE_EARTH_HIGH); + encodeoresGTpp.put(MaterialMisc.RARE_EARTH_HIGH, (short) (n + 1)); + // Koboldite + decodeoresGTpp.put((short) (++n + 1), MaterialsAlloy.KOBOLDITE); + encodeoresGTpp.put(MaterialsAlloy.KOBOLDITE, (short) (n + 1)); + // Runite + decodeoresGTpp.put((short) (++n + 1), MaterialsElements.STANDALONE.RUNITE); + encodeoresGTpp.put(MaterialsElements.STANDALONE.RUNITE, (short) (n + 1)); + // Ancient granite + decodeoresGTpp.put((short) (++n + 1), MaterialsElements.STANDALONE.GRANITE); + encodeoresGTpp.put(MaterialsElements.STANDALONE.GRANITE, (short) (n + 1)); + } + + public static boolean isGTppBlock(Block tBlock) { + return tBlock instanceof BlockBaseOre; + } + + public static short getGTppMeta(Block tBlock) { + return (short) (GTppHelper.encodeoresGTpp.get(((BlockBaseOre) tBlock).getMaterialEx()) + 7000); + } + + public static String getGTppVeinName(Block tBlock) { + return tBlock.getLocalizedName(); + } + +} diff --git a/src/main/java/galacticgreg/GalacticGreg.java b/src/main/java/galacticgreg/GalacticGreg.java new file mode 100644 index 0000000000..03cb4d1569 --- /dev/null +++ b/src/main/java/galacticgreg/GalacticGreg.java @@ -0,0 +1,113 @@ +package galacticgreg; + +import static gregtech.api.enums.Mods.AppliedEnergistics2; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.EventHandler; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; +import galacticgreg.auxiliary.GalacticGregConfig; +import galacticgreg.auxiliary.LogHelper; +import galacticgreg.auxiliary.ProfilingStorage; +import galacticgreg.command.AEStorageCommand; +import galacticgreg.command.ProfilingCommand; +import galacticgreg.registry.GalacticGregRegistry; +import galacticgreg.schematics.SpaceSchematicHandler; +import gregtech.GT_Version; +import gregtech.api.world.GTWorldgen; + +@Mod( + modid = GalacticGreg.MODID, + name = GalacticGreg.MODNAME, + version = GalacticGreg.VERSION, + dependencies = "after:GalacticraftCore; required-after:gregtech@5.09.32.30;", + acceptableRemoteVersions = "*") +public class GalacticGreg { + + public static final List smallOreWorldgenList = new ArrayList<>(); + public static final List oreVeinWorldgenList = new ArrayList<>(); + + public static final String NICE_MODID = "GalacticGreg"; + public static final String MODID = "galacticgreg"; + public static final String MODNAME = "Galactic Greg"; + + public static final String VERSION = GT_Version.VERSION; + + public static final LogHelper Logger = new LogHelper(NICE_MODID); + public static ProfilingStorage Profiler = new ProfilingStorage(); + public static SpaceSchematicHandler SchematicHandler; + + public static Random GalacticRandom = null; + + public static GalacticGregConfig GalacticConfig = null; + + /** + * Preload phase. Read config values and set various features.. n stuff... + * + * @param aEvent + */ + @EventHandler + public void onPreLoad(FMLPreInitializationEvent aEvent) { + GalacticConfig = new GalacticGregConfig(aEvent.getModConfigurationDirectory(), NICE_MODID, NICE_MODID); + if (!GalacticConfig.LoadConfig()) GalacticGreg.Logger + .warn("Something went wrong while reading GalacticGregs config file. Things will be wonky.."); + + GalacticRandom = new Random(System.currentTimeMillis()); + + if (GalacticConfig.SchematicsEnabled) + SchematicHandler = new SpaceSchematicHandler(aEvent.getModConfigurationDirectory()); + + Logger.trace("Leaving PRELOAD"); + } + + public static final ArrayList ADDITIONALVEINREGISTER = new ArrayList<>(); + + /** + * Postload phase. Mods can add their custom definition to our api in their own PreLoad or Init-phase Once + * GalacticGregRegistry.InitRegistry() is called, no changes are accepted. (Well you can with reflection, but on a + * "normal" way it's not possible) + * + * @param aEvent + */ + @EventHandler + public void onPostLoad(FMLPostInitializationEvent aEvent) { + Logger.trace("Entering POSTLOAD"); + + if (!GalacticGregRegistry.InitRegistry()) throw new RuntimeException( + "GalacticGreg registry has been finalized from a 3rd-party mod, this is forbidden!"); + + for (Runnable r : ADDITIONALVEINREGISTER) { + try { + r.run(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + GalacticConfig.serverPostInit(); + + Logger.trace("Leaving POSTLOAD"); + } + + /** + * If oregen profiling is enabled, then register the command + * + * @param pEvent + */ + @EventHandler + public void serverLoad(FMLServerStartingEvent pEvent) { + Logger.trace("Entering SERVERLOAD"); + + if (GalacticConfig.ProfileOreGen) pEvent.registerServerCommand(new ProfilingCommand()); + + if (AppliedEnergistics2.isModLoaded() && GalacticConfig.EnableAEExportCommand + && GalacticConfig.SchematicsEnabled) pEvent.registerServerCommand(new AEStorageCommand()); + + Logger.trace("Leaving SERVERLOAD"); + } +} diff --git a/src/main/java/galacticgreg/SpaceDimRegisterer.java b/src/main/java/galacticgreg/SpaceDimRegisterer.java new file mode 100644 index 0000000000..611477f7df --- /dev/null +++ b/src/main/java/galacticgreg/SpaceDimRegisterer.java @@ -0,0 +1,140 @@ +package galacticgreg; + +import net.minecraft.init.Blocks; + +import galacticgreg.api.AsteroidBlockComb; +import galacticgreg.api.Enums; +import galacticgreg.api.GTOreTypes; +import galacticgreg.api.ModContainer; +import galacticgreg.api.SpecialBlockComb; +import galacticgreg.api.enums.DimensionDef; +import galacticgreg.api.enums.ModContainers; +import galacticgreg.registry.GalacticGregRegistry; + +/** + * In this class, you'll find everything you need in order to tell GGreg what to do and where. Everything is done in + * here. If you're trying to use anything else, you're probably doing something wrong (Or I forgot to add it. In that + * case, find me on github and create an issue please) + */ +public class SpaceDimRegisterer { + + public static void register() { + GalacticGregRegistry.registerModContainer(setupVanilla()); + GalacticGregRegistry.registerModContainer(setupGalactiCraftCore()); + GalacticGregRegistry.registerModContainer(setupGalactiCraftPlanets()); + GalacticGregRegistry.registerModContainer(setupGalaxySpace()); + GalacticGregRegistry.registerModContainer(setupAmunRa()); + } + + /** + * Vanilla MC (End Asteroids) + */ + private static ModContainer setupVanilla() { + + // If you happen to have an asteroid dim, just skip the blocklist, and setDimensionType() to + // DimensionType.Asteroid + // also don't forget to add at least one asteroid type, or nothing will generate! + DimensionDef.EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.Netherrack)); + DimensionDef.EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.RedGranite)); + DimensionDef.EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.BlackGranite)); + DimensionDef.EndAsteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.EndStone)); + + // These Blocks will randomly be generated + DimensionDef.EndAsteroids.modDimensionDef.addSpecialAsteroidBlock(new SpecialBlockComb(Blocks.glowstone)); + DimensionDef.EndAsteroids.modDimensionDef + .addSpecialAsteroidBlock(new SpecialBlockComb(Blocks.lava, Enums.AllowedBlockPosition.AsteroidCore)); + + ModContainers.Vanilla.modContainer.addDimensionDef(DimensionDef.EndAsteroids.modDimensionDef); + + return ModContainers.Vanilla.modContainer; + } + + /** + * Mod GalactiCraft + */ + private static ModContainer setupGalactiCraftCore() { + ModContainers.GalactiCraftCore.modContainer.addDimensionDef(DimensionDef.Moon.modDimensionDef); + return ModContainers.GalactiCraftCore.modContainer; + } + + /** + * As GalactiCraftPlanets is an optional mod, don't hardlink it here + */ + private static ModContainer setupGalactiCraftPlanets() { + // Overwrite ore blocks on mars with red granite ones. This will default to regular stone if not set + DimensionDef.Mars.modDimensionDef.setStoneType(GTOreTypes.RedGranite); + ModContainers.GalacticraftMars.modContainer.addDimensionDef(DimensionDef.Mars.modDimensionDef); + + DimensionDef.Asteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.BlackGranite)); + DimensionDef.Asteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.RedGranite)); + DimensionDef.Asteroids.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.Netherrack)); + ModContainers.GalacticraftMars.modContainer.addDimensionDef(DimensionDef.Asteroids.modDimensionDef); + + return ModContainers.GalacticraftMars.modContainer; + } + + /** + * Mod GalaxySpace by BlesseNtumble + */ + private static ModContainer setupGalaxySpace() { + // First, we create a mod-container that will be populated with dimensions later. + // The Name must match your ID, as it is checked if this mod is loaded, in order + // to enable/disable the parsing/registering of dimensions + // See enum ModContainers + + // Now lets first define a block here for our dimension. You can add the ID, but you don't have to. + // It will automatically add the mods name that is defined in the modcontainer. + // See enum DimensionBlockMetaDefinitionList + + // Now define the available dimensions, and their chunkprovider. + // Same as above, to not have any dependency in your code, you can just give it a string. + // But it's better to use the actual ChunkProvider class. The Name is used for the GalacticGreg config file. + // The resulting config setting will be: __false = false + // make sure to never change this name once you've generated your config files, as it will overwrite everything! + + // 30.11.2016 GSpace v1.1.3 Stable + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Pluto.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Triton.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Proteus.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Oberon.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Titan.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Callisto.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Ganymede.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Ceres.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Deimos.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Enceladus.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Io.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Europa.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Phobos.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Venus.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Mercury.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.MakeMake.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Haumea.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.CentauriAlpha.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.VegaB.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.BarnardC.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.BarnardE.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.BarnardF.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.TcetiE.modDimensionDef); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.Miranda.modDimensionDef); + DimensionDef.KuiperBelt.modDimensionDef.setDimensionType(Enums.DimensionType.Asteroid); + DimensionDef.KuiperBelt.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.RedGranite)); + DimensionDef.KuiperBelt.modDimensionDef.addAsteroidMaterial(new AsteroidBlockComb(GTOreTypes.BlackGranite)); + ModContainers.GalaxySpace.modContainer.addDimensionDef(DimensionDef.KuiperBelt.modDimensionDef); + return ModContainers.GalaxySpace.modContainer; + } + + /** + * Mod Amun-Ra + */ + private static ModContainer setupAmunRa() { + ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.Neper.modDimensionDef); + ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.Maahes.modDimensionDef); + ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.Anubis.modDimensionDef); + ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.Horus.modDimensionDef); + ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.Seth.modDimensionDef); + DimensionDef.MehenBelt.modDimensionDef.addAsteroidMaterial(GTOreTypes.BlackGranite); + ModContainers.AmunRa.modContainer.addDimensionDef(DimensionDef.MehenBelt.modDimensionDef); + return ModContainers.AmunRa.modContainer; + } +} diff --git a/src/main/java/galacticgreg/TileEntitySpaceOres.java b/src/main/java/galacticgreg/TileEntitySpaceOres.java new file mode 100644 index 0000000000..00ad3ba51f --- /dev/null +++ b/src/main/java/galacticgreg/TileEntitySpaceOres.java @@ -0,0 +1,144 @@ +package galacticgreg; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import galacticgreg.api.Enums; +import galacticgreg.api.ModDimensionDef; +import gregtech.api.GregTechAPI; +import gregtech.api.util.GTLog; +import gregtech.common.blocks.BlockOresAbstract; +import gregtech.common.blocks.TileEntityOres; + +public class TileEntitySpaceOres { + + // Renamed function to prevent function shadowing with base GT-code + public static boolean setOuterSpaceOreBlock(ModDimensionDef pDimensionDef, World pWorld, int pX, int pY, int pZ, + int pMetaData) { + return setOuterSpaceOreBlock(pDimensionDef, pWorld, pX, pY, pZ, pMetaData, false, -1); + } + + public static boolean setOuterSpaceOreBlock(ModDimensionDef pDimensionDef, World pWorld, int pX, int pY, int pZ, + int pMetaData, boolean pAir) { + return setOuterSpaceOreBlock(pDimensionDef, pWorld, pX, pY, pZ, pMetaData, pAir, -1); + } + + /** + * Check if the block at given position may be replaced by an ore + * + * @param pWorld the world in question + * @param pX X-Cord + * @param pY Y-Cord + * @param pZ Z-Cord + * @return + */ + private static Enums.ReplaceState CheckForReplaceableBlock(World pWorld, int pX, int pY, int pZ, + ModDimensionDef pDimDef) { + try { + Enums.ReplaceState tFlag = Enums.ReplaceState.Unknown; + + Block targetBlock = pWorld.getBlock(pX, pY, pZ); + int targetBlockMeta = pWorld.getBlockMetadata(pX, pY, pZ); + + if (targetBlock == Blocks.air) tFlag = Enums.ReplaceState.Airblock; + else tFlag = pDimDef.getReplaceStateForBlock(targetBlock, targetBlockMeta); + + return tFlag; + } catch (Exception e) { + e.printStackTrace(GTLog.err); + GalacticGreg.Logger.error("Error while processing CheckForReplaceableBlock(), defaulting to UNKNOWN"); + return Enums.ReplaceState.Unknown; + } + } + + /** + * Actually set the OreBlock + * + * @param pWorld the world in question + * @param pX + * @param pY + * @param pZ + * @param pMetaData GT-Ore metadata + * @param pAir + * @return + */ + public static boolean setOuterSpaceOreBlock(ModDimensionDef pDimensionDef, World pWorld, int pX, int pY, int pZ, + int pMetaData, boolean pAir, int pCustomGTOreOffset) { + if (!pAir) pY = Math.min(pWorld.getActualHeight(), Math.max(pY, 1)); + + if (pDimensionDef == null) { + GalacticGreg.Logger + .warn("Unknown DimensionID: %d. Will not set anything here", pWorld.provider.dimensionId); + return false; + } + try { + Block tBlock = pWorld.getBlock(pX, pY, pZ); + // If the meta is non-zero, and the target block is either non-air or the air-override is active + if ((pMetaData > 0) && ((tBlock != Blocks.air) || pAir)) { + // make sure we're either going with normal ore-metas, or small ores. + // Probably should do another check for <= 1700 + if (pMetaData < 1000 || pMetaData >= 16000) { + Enums.ReplaceState tRS = CheckForReplaceableBlock(pWorld, pX, pY, pZ, pDimensionDef); + + // Unable to lookup replacement state. Means: The block is unknown, and shall not be replaced + if (tRS == Enums.ReplaceState.Unknown) { + GalacticGreg.Logger.trace("Not placing ore Meta %d, as target block is unknown", pMetaData); + return false; + } else if (tRS == Enums.ReplaceState.Airblock && !pAir) { + GalacticGreg.Logger.trace("Not placing ore Meta %d in midair, as AIR is FALSE", pMetaData); + return false; + } + if (tRS == Enums.ReplaceState.CannotReplace) { + // wrong metaData ID for target block + GalacticGreg.Logger.trace("Not placing ore Meta %d, as the state is CANNOTREPLACE", pMetaData); + return false; + } + + if (pCustomGTOreOffset == -1) pMetaData += pDimensionDef.getStoneType() + .getOffset(); + else pMetaData += pCustomGTOreOffset; + // This fix seems like cargo cult coding...The Abstract class just returns 0 for the harvest level. + // But it aligns with the GT5U method, so yay? + pWorld.setBlock( + pX, + pY, + pZ, + GregTechAPI.sBlockOres1, + TileEntityOres.getHarvestData( + (short) pMetaData, + ((BlockOresAbstract) GregTechAPI.sBlockOres1) + .getBaseBlockHarvestLevel(pMetaData % 16000 / 1000)), + 0); + TileEntity tTileEntity = pWorld.getTileEntity(pX, pY, pZ); + if ((tTileEntity instanceof TileEntityOres)) { + ((TileEntityOres) tTileEntity).mMetaData = ((short) pMetaData); + ((TileEntityOres) tTileEntity).mNatural = true; + } else { + // This is somehow triggered randomly, and most times the target block is air, which should + // never happen as we check for air... + // That's why I put this behind a debug config option. If you ever find the reason for it, + // please tell me what caused this + if (GalacticGreg.GalacticConfig.ReportOreGenFailures) GalacticGreg.Logger.warn( + "Something went wrong while placing GT OreTileEntity. Meta: %d X [%d] Y [%d] Z [%d]", + pMetaData, + pX, + pY, + pZ); + } + + return true; + } else GalacticGreg.Logger.warn( + "Not replacing block at pos %d %d %d due unexpected metaData for OreBlock: %d", + pX, + pY, + pZ, + pMetaData); + } + } catch (Exception e) { + if (GalacticGreg.GalacticConfig.ReportOreGenFailures) e.printStackTrace(); + } + return false; + } +} diff --git a/src/main/java/galacticgreg/WorldGeneratorSpace.java b/src/main/java/galacticgreg/WorldGeneratorSpace.java new file mode 100644 index 0000000000..336900326c --- /dev/null +++ b/src/main/java/galacticgreg/WorldGeneratorSpace.java @@ -0,0 +1,564 @@ +package galacticgreg; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.inventory.IInventory; +import net.minecraft.util.Vec3; +import net.minecraft.util.WeightedRandomChestContent; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraftforge.common.ChestGenHooks; + +import cpw.mods.fml.common.IWorldGenerator; +import cpw.mods.fml.common.eventhandler.EventBus; +import cpw.mods.fml.common.registry.GameRegistry; +import galacticgreg.api.AsteroidBlockComb; +import galacticgreg.api.BlockMetaComb; +import galacticgreg.api.Enums; +import galacticgreg.api.GTOreTypes; +import galacticgreg.api.ISpaceObjectGenerator; +import galacticgreg.api.ModDimensionDef; +import galacticgreg.api.SpecialBlockComb; +import galacticgreg.api.StructureInformation; +import galacticgreg.auxiliary.GTOreGroup; +import galacticgreg.dynconfig.DynamicDimensionConfig; +import galacticgreg.registry.GalacticGregRegistry; +import gregtech.api.util.GTLog; +import gregtech.api.world.GTWorldgen; +import gregtech.common.GTWorldgenerator; + +public class WorldGeneratorSpace implements IWorldGenerator { + + public static boolean sAsteroids = true; + private final EventBus eventBus = new EventBus(); + private World worldObj; + + private int chunkX; + private int chunkZ; + private int mSize = 100; + + private long mProfilingStart; + private long mProfilingEnd; + + public WorldGeneratorSpace() { + GameRegistry.registerWorldGenerator(this, Integer.MAX_VALUE); + } + + public void generate(Random pRandom, int pX, int pZ, World pWorld, IChunkProvider pChunkGenerator, + IChunkProvider pChunkProvider) { + pX *= 16; + pZ *= 16; + + String tBiome = pWorld.getBiomeGenForCoords(pX + 8, pZ + 8).biomeName; + pRandom = new Random(pRandom.nextInt()); + if (tBiome == null) { + tBiome = BiomeGenBase.plains.biomeName; + } + GalacticGreg.Logger + .trace("Triggered generate: [ChunkGenerator %s] [Biome %s]", pChunkGenerator.toString(), tBiome); + + ModDimensionDef tDimDef = GalacticGregRegistry.getDimensionTypeByChunkGenerator(pChunkGenerator); + + if (tDimDef == null) { + GalacticGreg.Logger.trace( + "Ignoring ChunkGenerator type %s as there is no definition for it in the registry", + pChunkGenerator.toString()); + return; + } else { + GalacticGreg.Logger.trace("Selected DimDef: [%s]", tDimDef.getDimIdentifier()); + } + + /* + * In some later addons maybe, not for now. Ignoring Biome-based worldgen String tBiome = + * pWorld.getBiomeGenForCoords(pX + 8, pZ + 8).biomeName; pRandom = new Random(pRandom.nextInt()); if (tBiome == + * null) { tBiome = BiomeGenBase.plains.biomeName; } + */ + + if (tDimDef.getDimensionType() != Enums.DimensionType.Planet) { + if (tDimDef.getRandomAsteroidMaterial() == null) GalacticGreg.Logger.error( + "Dimension [%s] is set to Asteroids, but no asteroid material is specified! Nothing will generate", + tDimDef.getDimensionName()); + else Generate_Asteroids(tDimDef, pRandom, pWorld, pX, pZ); + } else if (tDimDef.getDimensionType() != Enums.DimensionType.Asteroid) { + Generate_OreVeins(tDimDef, pRandom, pWorld, pX, pZ, "", pChunkGenerator, pChunkProvider); + } + + Chunk tChunk = pWorld.getChunkFromBlockCoords(pX, pZ); + if (tChunk != null) { + tChunk.isModified = true; + } + } + + private void Generate_Asteroids(ModDimensionDef pDimensionDef, Random pRandom, World pWorld, int pX, int pZ) { + GalacticGreg.Logger.trace("Running asteroid-gen in Dim %s", pDimensionDef.getDimIdentifier()); + + DynamicDimensionConfig.AsteroidConfig tAConf = DynamicDimensionConfig.getAsteroidConfig(pDimensionDef); + if (tAConf == null) { + GalacticGreg.Logger.error( + "Dimension %s is set to asteroid, but no config object can be found. Skipping!", + pDimensionDef.getDimIdentifier()); + return; + } else { + GalacticGreg.Logger.trace("Asteroid probability: %d", tAConf.Probability); + } + + if ((tAConf.Probability <= 1) || (pRandom.nextInt(tAConf.Probability) == 0)) { + GalacticGreg.Logger.trace("Generating asteroid NOW"); + // --------------------------- + if (GalacticGreg.GalacticConfig.ProfileOreGen) mProfilingStart = System.currentTimeMillis(); + // ----------------------------- + + // Get Random position + int tX = pX + pRandom.nextInt(16); + int tY = 50 + pRandom.nextInt(200 - 50); + int tZ = pZ + pRandom.nextInt(16); + + // Check if position is free + if ((pWorld.getBlock(tX, tY, tZ) + .isAir(pWorld, tX, tY, tZ))) { + + int tCustomAsteroidOffset = -1; + int tGraniteMeta = 0; + + // Select Random OreGroup and Asteroid Material + GTOreGroup tOreGroup = WorldgenOreLayerSpace.getRandomOreGroup(pDimensionDef, pRandom, true); + AsteroidBlockComb tABComb = pDimensionDef.getRandomAsteroidMaterial(); + if (tABComb == null) return; + + // Fill Vars for random Asteroid + Block tFinalAsteroidBlock = tABComb.getBlock(); + int tFinalAsteroidBlockMeta = tABComb.getMeta(); + int tFinalOreOffset = tABComb.getOreMaterial() + .getOffset(); + int tFinalUpdateMode = tABComb.getOreMaterial() + .getUpdateMode(); + GalacticGreg.Logger.debug( + "Asteroid will be build with: Block: [%s] OreType: [%s]", + Block.blockRegistry.getNameForObject(tABComb.getBlock()), + tABComb.getOreMaterial() + .toString()); + + // get random Ore-asteroid generator from the list of registered generators + ISpaceObjectGenerator aGen = pDimensionDef.getRandomSOGenerator(Enums.SpaceObjectType.OreAsteroid); + if (aGen == null) { + GalacticGreg.Logger.ot_error( + "GalacticGreg.Generate_Asteroids.NoSOGenFound", + "No SpaceObjectGenerator has been registered for type ORE_ASTEROID in Dimension %s. Nothing will generate", + pDimensionDef.getDimensionName()); + return; + } + + aGen.reset(); + aGen.setCenterPoint(tX, tY, tZ); + aGen.randomize(tAConf.MinSize, tAConf.MaxSize); // Initialize random values and set size + aGen.calculate(); // Calculate structure + + // Random loot-chest somewhere in the asteroid + Vec3 tChestPosition = Vec3.createVectorHelper(0, 0, 0); + boolean tDoLootChest = false; + int tNumLootItems = 0; + if (tAConf.LootChestChance > 0) { + GalacticGreg.Logger.trace("Random loot chest enabled, flipping the coin"); + int tChance = pRandom.nextInt(100); // Loot chest is 1 in 100 (Was: 1:1000 which actually never + // happend) + if (tAConf.LootChestChance >= tChance) { + GalacticGreg.Logger.debug("We got a match. Preparing to generate the loot chest"); + // Get amount of items for the loot chests, randomize it (1-num) if enabled + if (tAConf.RandomizeNumLootItems) tNumLootItems = pRandom.nextInt(tAConf.NumLootItems - 1) + 1; + else tNumLootItems = tAConf.NumLootItems; + + GalacticGreg.Logger + .debug(String.format("Loot chest random item count will be: %d", tNumLootItems)); + + // try to find any block that is not on the asteroids outer-shell + GalacticGreg.Logger.trace("Starting lookup for valid asteroid-block for the chest"); + for (int x = 0; x < 64; x++) // 64 enough? Should be + { + int tRndBlock = pRandom.nextInt( + aGen.getStructure() + .size()); + StructureInformation tChestSI = aGen.getStructure() + .get(tRndBlock); + if (tChestSI.getBlockPosition() != Enums.TargetBlockPosition.AsteroidShell) { + GalacticGreg.Logger.debug( + String.format( + "Chest position found [x:%d y:%d z:%d]", + tChestSI.getX(), + tChestSI.getY(), + tChestSI.getZ())); + // Found valid position "Somewhere" in the asteroid, set position... + tChestPosition = Vec3 + .createVectorHelper(tChestSI.getX(), tChestSI.getY(), tChestSI.getZ()); + // .. and set CreateFlag to true + tDoLootChest = true; + break; + } + } + } + } + + // Now build the structure + GalacticGreg.Logger.trace("Now generating Space-Structure"); + for (StructureInformation si : aGen.getStructure()) { + // Only replace airblocks + if (pWorld.isAirBlock(si.getX(), si.getY(), si.getZ())) { + // === Loot-chest generator >> + if (tDoLootChest) // If gen-lootchest enabled... + { + // Check if current x/y/z is the location where the chest shall be created + if ((int) tChestPosition.xCoord == si.getX() && (int) tChestPosition.yCoord == si.getY() + && (int) tChestPosition.zCoord == si.getZ()) { + GalacticGreg.Logger.trace("Now generating LootChest and contents"); + // Get items for the configured loot-table + WeightedRandomChestContent[] tRandomLoot = ChestGenHooks + .getItems(DynamicDimensionConfig.getLootChestTable(tAConf), pRandom); + + // Get chest-block to spawn + BlockMetaComb tTargetChestType = GalacticGreg.GalacticConfig.CustomLootChest; + + // Place down the chest + if (tTargetChestType.getMeta() > 0) pWorld.setBlock( + si.getX(), + si.getY(), + si.getZ(), + tTargetChestType.getBlock(), + tTargetChestType.getMeta(), + 2); + else pWorld.setBlock(si.getX(), si.getY(), si.getZ(), tTargetChestType.getBlock()); + + // Retrieve the TEs IInventory that should've been created + IInventory entityChestInventory = (IInventory) pWorld + .getTileEntity(si.getX(), si.getY(), si.getZ()); + // If it's not null... + if (entityChestInventory != null) { + // and if we're on the server... + if (!pWorld.isRemote) { + // Fill the chest with stuffz! + WeightedRandomChestContent.generateChestContents( + pRandom, + tRandomLoot, + entityChestInventory, + tNumLootItems); + GalacticGreg.Logger.trace("Loot chest successfully generated"); + } + } else { + // Something made a boo.. + GalacticGreg.Logger.warn( + "Could not create lootchest at X[%d] Y[%d] Z[%d]. getTileEntity() returned null", + si.getX(), + si.getY(), + si.getZ()); + } + // Make sure we never compare coordinates again (for this asteroid/Structure) + tDoLootChest = false; + // Do some debug logging + GalacticGreg.Logger + .debug("Generated LootChest at X[%d] Y[%d] Z[%d]", si.getX(), si.getY(), si.getZ()); + // And skip the rest of this function + continue; + } + } + // << Loot-chest generator === + + // === Ore generator >> + boolean tPlacedOreBlock = false; + // If a valid oregroup has been selected (more than 0 ore-veins are enabled for this dim) + if (tOreGroup != null) { + // GalacticGreg.Logger.trace("tOreGoup is populated, continuing"); + // Choose a number between 0 and 100 + int ranOre = pRandom.nextInt(100); + int tFinalOreMeta = 0; + + // If choosen number is below the configured orechance, do random between and sporadic + if (ranOre < tAConf.OreChance) { + if (pRandom.nextBoolean()) { + // Only take as final value if meta is not zero + if (tOreGroup.SporadicBetweenMeta > 0) + tFinalOreMeta = tOreGroup.SporadicBetweenMeta; + } else { + // Only take as final value if meta is not zero + if (tOreGroup.SporadicAroundMeta > 0) tFinalOreMeta = tOreGroup.SporadicAroundMeta; + } + } + // If choosen number is below the configured orechance, do random primary and secondary + // We use an offset here, so this part is always higher than the first check. + else if (ranOre < tAConf.OreChance + tAConf.OrePrimaryOffset) { + if (pRandom.nextBoolean()) { + // Only take as final value if meta is not zero + if (tOreGroup.PrimaryMeta > 0) tFinalOreMeta = tOreGroup.PrimaryMeta; + } else { + // Only take as final value if meta is not zero + if (tOreGroup.SecondaryMeta > 0) tFinalOreMeta = tOreGroup.SecondaryMeta; + } + } + + // if the final oreMeta has been found... + // GalacticGreg.Logger.info("tFinalOreMeta is %d", tFinalOreMeta); + if (tFinalOreMeta > 0) { + // make sure we obey the configured "HiddenOres" setting (No ores on the shell) + if (tAConf.HiddenOres + && (si.getBlockPosition() == Enums.TargetBlockPosition.AsteroidShell)) { + // Ore would be placed around the shell, which is disabled (hiddenores) + GalacticGreg.Logger.trace( + "Skipping ore-placement event (HiddenOres=true; TargetBlockPosition=AsteroidShell)"); + } else { + // try to place the ore block. The result is stored in tPlacedOreBlock + tPlacedOreBlock = TileEntitySpaceOres.setOuterSpaceOreBlock( + pDimensionDef, + pWorld, + si.getX(), + si.getY(), + si.getZ(), + tOreGroup.SecondaryMeta, + true, + tFinalOreOffset); + } + } + } + // << Ore generator === + + // === Additional special blocks >> + // If no ore-block has been placed yet... + if (!tPlacedOreBlock) { + // try to spawn special blocks + boolean tFlag = doGenerateSpecialBlocks( + pDimensionDef, + pRandom, + pWorld, + tAConf, + si.getX(), + si.getY(), + si.getZ(), + si.getBlockPosition()); + + // No special block placed? Try smallores + if (tFlag) tFlag = doGenerateSmallOreBlock( + pDimensionDef, + pRandom, + pWorld, + tAConf, + si.getX(), + si.getY(), + si.getZ(), + tFinalOreOffset); + + // no smallores either? do normal block + if (tFlag) pWorld.setBlock( + si.getX(), + si.getY(), + si.getZ(), + tFinalAsteroidBlock, + tFinalAsteroidBlockMeta, + tFinalUpdateMode); + + } + // << Additional special blocks === + } + } + } + // --------------------------- + // OreGen profiler stuff + if (GalacticGreg.GalacticConfig.ProfileOreGen) { + try { + mProfilingEnd = System.currentTimeMillis(); + long tTotalTime = mProfilingEnd - mProfilingStart; + GalacticGreg.Profiler.AddTimeToList(pDimensionDef, tTotalTime); + GalacticGreg.Logger.debug( + "Done with Asteroid-Worldgen in DimensionType %s. Generation took %d ms", + pDimensionDef.getDimensionName(), + tTotalTime); + } catch (Exception ignored) {} // Silently ignore errors + } + // --------------------------- + } + GalacticGreg.Logger.trace("Leaving asteroid-gen for Dim %s", pDimensionDef.getDimIdentifier()); + } + + /** + * Generate Special Blocks in asteroids if enabled + * + * @param pDimensionDef + * @param pRandom + * @param pWorld + * @param tAConf + * @param eX + * @param eY + * @param eZ + * @return + */ + private boolean doGenerateSpecialBlocks(ModDimensionDef pDimensionDef, Random pRandom, World pWorld, + DynamicDimensionConfig.AsteroidConfig tAConf, int eX, int eY, int eZ, + Enums.TargetBlockPosition pBlockPosition) { + + boolean tFlag = true; + // Handler to generate special BlockTypes randomly if activated + if (tAConf.SpecialBlockChance > 0) { + if (pRandom.nextInt(100) < tAConf.SpecialBlockChance) { + SpecialBlockComb bmc = pDimensionDef.getRandomSpecialAsteroidBlock(); + if (bmc != null) { + boolean tIsAllowed = false; + + switch (bmc.getBlockPosition()) { + case AsteroidCore: + if (pBlockPosition == Enums.TargetBlockPosition.AsteroidCore) tIsAllowed = true; + break; + case AsteroidCoreAndShell: + if (pBlockPosition == Enums.TargetBlockPosition.AsteroidCore + || pBlockPosition == Enums.TargetBlockPosition.AsteroidShell) tIsAllowed = true; + break; + case AsteroidShell: + if (pBlockPosition == Enums.TargetBlockPosition.AsteroidShell) tIsAllowed = true; + break; + case AsteroidInnerCore: + if (pBlockPosition == Enums.TargetBlockPosition.AsteroidInnerCore) tIsAllowed = true; + break; + default: + break; + } + + if (tIsAllowed) { + pWorld.setBlock(eX, eY, eZ, bmc.getBlock(), bmc.getMeta(), 2); + tFlag = false; + } + } + } + } + return tFlag; + } + + /** + * Pick a random small-ore block from the list of enabled small ores for this dim + * + * @param pDimDef + * @param pRandom + * @return + */ + private boolean doGenerateSmallOreBlock(ModDimensionDef pDimDef, Random pRandom, World pWorld, + DynamicDimensionConfig.AsteroidConfig pAConf, int pX, int pY, int pZ, int pTargetBlockOffset) { + boolean tFlag = true; + // If smallores are enabled... + if (pAConf.SmallOreChance > 0) { + // ... and we hit the random-chance ... + if (pRandom.nextInt(100) < pAConf.SmallOreChance) { + // Do small ores. + int tRandomWeight; + boolean continueSearch = true; + int tFoundOreMeta = -1; + // First find a small ore... + for (int i = 0; (i < 256) && (continueSearch); i++) { + tRandomWeight = pRandom.nextInt(WorldgenOreLayerSpace.sWeight); + for (GTWorldgen tWorldGen : GalacticGreg.smallOreWorldgenList) { + + if (!(tWorldGen instanceof WorldgenOreSmallSpace)) { + continue; + } + // That is enabled for *this* dim... + if (!((WorldgenOreSmallSpace) tWorldGen).isEnabledForDim(pDimDef)) continue; + + // And in the correct y-level, of ObeyLimits is true... + if (pAConf.ObeyHeightLimits && !((WorldgenOreSmallSpace) tWorldGen).isAllowedForHeight(pY)) + continue; + + // Care about weight + tRandomWeight -= ((WorldgenOreSmallSpace) tWorldGen).mAmount; + if (tRandomWeight <= 0) { + // And return found ore meta + tFoundOreMeta = ((WorldgenOreSmallSpace) tWorldGen).mMeta; + continueSearch = false; + } + } + } + if (tFoundOreMeta > -1) { + // Make the oreID a small ore with correct type + int tCustomOffset = (GTOreTypes.SmallOres.getOffset() + pTargetBlockOffset); + + // Set the smallOre block + TileEntitySpaceOres + .setOuterSpaceOreBlock(pDimDef, pWorld, pX, pY, pZ, tFoundOreMeta, true, tCustomOffset); + tFlag = false; + } + } + } + return tFlag; + } + + /** + * Untested! But should work... Comments are todo + * + * @param pDimensionDef + * @param pRandom + * @param pWorld + * @param pX + * @param pZ + * @param pBiome + * @param pChunkGenerator + * @param pChunkProvider + */ + private void Generate_OreVeins(ModDimensionDef pDimensionDef, Random pRandom, World pWorld, int pX, int pZ, + String pBiome, IChunkProvider pChunkGenerator, IChunkProvider pChunkProvider) { + GalacticGreg.Logger.trace("Running orevein-gen in Dim %s", pDimensionDef.getDimIdentifier()); + + if (GTWorldgenerator.isOreChunk(pX / 16, pZ / 16)) { + if ((WorldgenOreLayerSpace.sWeight > 0) && (GalacticGreg.oreVeinWorldgenList.size() > 0)) { + + boolean temp = true; + int tRandomWeight; + for (int i = 0; (i < 256) && (temp); i++) { + tRandomWeight = pRandom.nextInt(WorldgenOreLayerSpace.sWeight); + for (GTWorldgen tWorldGen : GalacticGreg.oreVeinWorldgenList) { + if (tWorldGen instanceof WorldgenOreLayerSpace) + tRandomWeight -= ((WorldgenOreLayerSpace) tWorldGen).mWeight; + + if (tRandomWeight <= 0) { + try { + if (tWorldGen.executeWorldgen( + pWorld, + pRandom, + pBiome, + Integer.MIN_VALUE, + pX, + pZ, + pChunkGenerator, + pChunkProvider)) { + temp = false; + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + break; + } + } + } + } + // Generate Small Ores + + int i = 0; + for (int tX = pX - 16; i < 3; tX += 16) { + int j = 0; + for (int tZ = pZ - 16; j < 3; tZ += 16) { + for (GTWorldgen tWorldGen : GalacticGreg.smallOreWorldgenList) { + try { + tWorldGen.executeWorldgen( + pWorld, + pRandom, + "", + Integer.MIN_VALUE, + tX, + tZ, + pChunkGenerator, + pChunkProvider); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + j++; + } + i++; + } + } + GalacticGreg.Logger.trace("Leaving orevein-gen for Dim %s", pDimensionDef.getDimIdentifier()); + } +} diff --git a/src/main/java/galacticgreg/WorldgenGaGT.java b/src/main/java/galacticgreg/WorldgenGaGT.java new file mode 100644 index 0000000000..5814660fe7 --- /dev/null +++ b/src/main/java/galacticgreg/WorldgenGaGT.java @@ -0,0 +1,28 @@ +package galacticgreg; + +import gregtech.api.enums.OreMixes; +import gregtech.api.enums.SmallOres; + +public class WorldgenGaGT implements Runnable { + + @Override + public void run() { + new WorldGeneratorSpace(); + + /* + * This part here enables every GT Small Ore for Space Dims. + */ + for (SmallOres ore : SmallOres.values()) { + ore.addGaGregSmallOre(); + } + + /* + * This part here enables every GT Ore for Space Dims. + */ + + for (OreMixes mix : OreMixes.values()) { + mix.addGaGregOreLayer(); + } + } + +} diff --git a/src/main/java/galacticgreg/WorldgenOreLayerSpace.java b/src/main/java/galacticgreg/WorldgenOreLayerSpace.java new file mode 100644 index 0000000000..c28eb7a392 --- /dev/null +++ b/src/main/java/galacticgreg/WorldgenOreLayerSpace.java @@ -0,0 +1,320 @@ +package galacticgreg; + +import static gregtech.api.enums.GTValues.oreveinPlacerOres; +import static gregtech.api.enums.GTValues.oreveinPlacerOresMultiplier; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; + +import galacticgreg.api.ModContainer; +import galacticgreg.api.ModDimensionDef; +import galacticgreg.auxiliary.GTOreGroup; +import galacticgreg.registry.GalacticGregRegistry; +import gregtech.api.util.GTLog; +import gregtech.api.world.GTWorldgen; +import gregtech.common.OreMixBuilder; + +public class WorldgenOreLayerSpace extends GTWorldgen { + + public static int sWeight = 0; + public final short mMinY; + public final short mMaxY; + public final short mWeight; + public final short mDensity; + public final short mSize; + public final short mPrimaryMeta; + public final short mSecondaryMeta; + public final short mBetweenMeta; + public final short mSporadicMeta; + + private long mProfilingStart; + private long mProfilingEnd; + private Map allowedDims; + + public WorldgenOreLayerSpace(OreMixBuilder mix) { + super(mix.oreMixName, GalacticGreg.oreVeinWorldgenList, mix.enabledByDefault); + + mMinY = (short) mix.minY; + mMaxY = (short) Math.max(this.mMinY + 5, mix.maxY); + mWeight = (short) mix.weight; + mDensity = (short) mix.density; + mSize = (short) Math.max(1, mix.size); + mPrimaryMeta = (short) mix.primary.mMetaItemSubID; + mSecondaryMeta = (short) mix.secondary.mMetaItemSubID; + mBetweenMeta = (short) mix.between.mMetaItemSubID; + mSporadicMeta = (short) mix.sporadic.mMetaItemSubID; + + allowedDims = new HashMap<>(); + + for (ModContainer mc : GalacticGregRegistry.getModContainers()) { + if (!mc.getEnabled()) continue; + + for (ModDimensionDef mdd : mc.getDimensionList()) { + String tDimIdentifier = mdd.getDimIdentifier(); + if (allowedDims.containsKey(tDimIdentifier)) GalacticGreg.Logger.error( + "Found 2 Dimensions with the same Identifier: %s Dimension will not generate Ores", + tDimIdentifier); + else { + boolean tFlag = mix.dimsEnabled.getOrDefault(mdd.getDimensionName(), false); + allowedDims.put(tDimIdentifier, tFlag); + } + } + } + + GalacticGreg.Logger.trace("Initialized new OreLayer: %s", mix.oreMixName); + if (mEnabled) sWeight += this.mWeight; + } + + /** + * Check if *this* orelayer is enabled for pDimensionDef + * + * @param pDimensionDef the ChunkProvider in question + * @return + */ + public boolean isEnabledForDim(ModDimensionDef pDimensionDef) { + return allowedDims.getOrDefault(pDimensionDef.getDimIdentifier(), false); + } + + private static Map> _mBufferedVeinList = new HashMap<>(); + + /** + * Get a List of all Veins which are enabled for given Dim. Query is buffered + * + * @param pDimensionDef + * @return null if nothing is found or error + */ + private static List getOreMixIDsForDim(ModDimensionDef pDimensionDef) { + List tReturn; + + if (_mBufferedVeinList.containsKey(pDimensionDef.getDimIdentifier())) + tReturn = _mBufferedVeinList.get(pDimensionDef.getDimIdentifier()); + else { + tReturn = new ArrayList<>(); + for (GTWorldgen tWorldGen : GalacticGreg.oreVeinWorldgenList) if (tWorldGen instanceof WorldgenOreLayerSpace + && ((WorldgenOreLayerSpace) tWorldGen).isEnabledForDim(pDimensionDef)) + tReturn.add(tWorldGen.mWorldGenName); + + _mBufferedVeinList.put(pDimensionDef.getDimIdentifier(), tReturn); + } + + return tReturn; + } + + /** + * Select a random ore-vein from the list + * + * @param pDimensionDef + * @param pRandom + * @return + */ + public static GTOreGroup getRandomOreGroup(ModDimensionDef pDimensionDef, Random pRandom, boolean pIgnoreWeight) { + short primaryMeta = 0; + short secondaryMeta = 0; + short betweenMeta = 0; + short sporadicMeta = 0; + + if (pIgnoreWeight) { + List tEnabledVeins = getOreMixIDsForDim(pDimensionDef); + int tRnd = pRandom.nextInt(tEnabledVeins.size()); + String tVeinName = tEnabledVeins.get(tRnd); + + GTWorldgen tGen = null; + for (GTWorldgen tWorldGen : GalacticGreg.oreVeinWorldgenList) if (tWorldGen instanceof WorldgenOreLayerSpace + && ((WorldgenOreLayerSpace) tWorldGen).mWorldGenName.equals(tVeinName)) tGen = tWorldGen; + + if (tGen != null) { + // GT_Worldgen_GT_Ore_Layer_Space tGen = GalacticGreg.oreVeinWorldgenList.get(tRndMix); + GalacticGreg.Logger.trace("Using Oremix %s for asteroid", tGen.mWorldGenName); + primaryMeta = ((WorldgenOreLayerSpace) tGen).mPrimaryMeta; + secondaryMeta = ((WorldgenOreLayerSpace) tGen).mSecondaryMeta; + betweenMeta = ((WorldgenOreLayerSpace) tGen).mBetweenMeta; + sporadicMeta = ((WorldgenOreLayerSpace) tGen).mSporadicMeta; + } + } else { + if ((WorldgenOreLayerSpace.sWeight > 0) && (GalacticGreg.oreVeinWorldgenList.size() > 0)) { + GalacticGreg.Logger.trace("About to select oremix"); + boolean temp = true; + int tRandomWeight; + for (int i = 0; (i < 256) && (temp); i++) { + tRandomWeight = pRandom.nextInt(WorldgenOreLayerSpace.sWeight); + for (GTWorldgen tWorldGen : GalacticGreg.oreVeinWorldgenList) { + if (!(tWorldGen instanceof WorldgenOreLayerSpace)) continue; + + tRandomWeight -= ((WorldgenOreLayerSpace) tWorldGen).mWeight; + if (tRandomWeight <= 0) { + try { + if (((WorldgenOreLayerSpace) tWorldGen).isEnabledForDim(pDimensionDef)) { + GalacticGreg.Logger.trace("Using Oremix %s for asteroid", tWorldGen.mWorldGenName); + primaryMeta = ((WorldgenOreLayerSpace) tWorldGen).mPrimaryMeta; + secondaryMeta = ((WorldgenOreLayerSpace) tWorldGen).mSecondaryMeta; + betweenMeta = ((WorldgenOreLayerSpace) tWorldGen).mBetweenMeta; + sporadicMeta = ((WorldgenOreLayerSpace) tWorldGen).mSporadicMeta; + + temp = false; + break; + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + } + } + } + } + if (primaryMeta != 0 || secondaryMeta != 0 || betweenMeta != 0 || sporadicMeta != 0) + return new GTOreGroup(primaryMeta, secondaryMeta, betweenMeta, sporadicMeta); + else return null; + } + + @Override + public boolean executeWorldgen(World pWorld, Random pRandom, String pBiome, int pDimensionType, int pChunkX, + int pChunkZ, IChunkProvider pChunkGenerator, IChunkProvider pChunkProvider) { + GalacticGreg.Logger.trace("Entering executeWorldgen for [%s]", mWorldGenName); + ModDimensionDef tMDD = GalacticGregRegistry.getDimensionTypeByChunkGenerator(pChunkGenerator); + if (tMDD == null) { + GalacticGreg.Logger + .trace("Can't find dimension definition for ChunkProvider %s, skipping", pChunkGenerator.toString()); + return false; + } + + if (!isEnabledForDim(tMDD)) { + GalacticGreg.Logger + .trace("OreGen for %s is disallowed in dimension %s, skipping", mWorldGenName, tMDD.getDimensionName()); + return false; + } + + if (GalacticGreg.GalacticConfig.ProfileOreGen) mProfilingStart = System.currentTimeMillis(); + // --------------------------- + int tMinY = this.mMinY + pRandom.nextInt(this.mMaxY - this.mMinY - 7); + + int cX = pChunkX - pRandom.nextInt(this.mSize); + int eX = pChunkX + 16 + pRandom.nextInt(this.mSize); + int cZ = pChunkZ - pRandom.nextInt(this.mSize); + int eZ = pChunkZ + 16 + pRandom.nextInt(this.mSize); + for (int tX = cX; tX <= eX; tX++) { + for (int tZ = cZ; tZ <= eZ; tZ++) { + if (this.mSecondaryMeta > 0) { + for (int i = tMinY - 1; i < tMinY + 3; i++) { + int placeX = Math.max( + 1, + Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX)) + / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); + int placeZ = Math.max( + 1, + Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ)) + / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); + if ((pRandom.nextInt(placeZ) == 0) || (pRandom.nextInt(placeX) == 0)) { + TileEntitySpaceOres.setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mSecondaryMeta); + } + } + } + if (this.mBetweenMeta > 0) { + for (int i = tMinY + 2; i < tMinY + 6; i++) { + int placeX = Math.max( + 1, + Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX)) + / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); + int placeZ = Math.max( + 1, + Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ)) + / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); + if (((pRandom.nextInt(placeZ) == 0) || (pRandom.nextInt(placeX) == 0)) + && (pRandom.nextInt(2) == 0)) { + TileEntitySpaceOres.setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mBetweenMeta); + } + } + + } + if (this.mPrimaryMeta > 0) { + for (int i = tMinY + 4; i < tMinY + 8; i++) { + int placeX = Math.max( + 1, + Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX)) + / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); + int placeZ = Math.max( + 1, + Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ)) + / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); + if ((pRandom.nextInt(placeZ) == 0) || (pRandom.nextInt(placeX) == 0)) { + TileEntitySpaceOres.setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mPrimaryMeta); + } + } + } + if (this.mSporadicMeta > 0) { + for (int i = tMinY - 1; i < tMinY + 8; i++) { + int placeX = Math.max( + 1, + Math.max(MathHelper.abs_int(cX - tX), MathHelper.abs_int(eX - tX)) + / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); + int placeZ = Math.max( + 1, + Math.max(MathHelper.abs_int(cZ - tZ), MathHelper.abs_int(eZ - tZ)) + / getDensityFromPos(tX, tZ, pChunkX, pChunkZ)); + if (((pRandom.nextInt(placeX) == 0) || (pRandom.nextInt(placeZ) == 0)) + && (pRandom.nextInt(7) == 0)) { + TileEntitySpaceOres.setOuterSpaceOreBlock(tMDD, pWorld, tX, i, tZ, this.mSporadicMeta); + } + } + } + } + } + + if (oreveinPlacerOres) { + int nSmallOres = (cX - eX) * (cZ - eZ) * this.mDensity / 10 * oreveinPlacerOresMultiplier; + for (int nSmallOresCount = 0; nSmallOresCount < nSmallOres; nSmallOresCount++) { + int tX = pRandom.nextInt(16) + pChunkX + 2; + int tZ = pRandom.nextInt(16) + pChunkZ + 2; + int tY = pRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. + if (this.mPrimaryMeta > 0) + TileEntitySpaceOres.setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mPrimaryMeta + 16000); + tX = pRandom.nextInt(16) + pChunkX + 2; + tZ = pRandom.nextInt(16) + pChunkZ + 2; + tY = pRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. + if (this.mSecondaryMeta > 0) + TileEntitySpaceOres.setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mSecondaryMeta + 16000); + tX = pRandom.nextInt(16) + pChunkX + 2; + tZ = pRandom.nextInt(16) + pChunkZ + 2; + tY = pRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. + if (this.mBetweenMeta > 0) + TileEntitySpaceOres.setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mBetweenMeta + 16000); + tX = pRandom.nextInt(16) + pChunkX + 2; + tZ = pRandom.nextInt(16) + pChunkZ + 2; + tY = pRandom.nextInt(190) + 10; // Y height can vary from 10 to 200 for small ores. + if (this.mSporadicMeta > 0) + TileEntitySpaceOres.setOuterSpaceOreBlock(tMDD, pWorld, tX, tY, tZ, this.mSporadicMeta + 16000); + } + } + + // --------------------------- + if (GalacticGreg.GalacticConfig.ProfileOreGen) { + try { + mProfilingEnd = System.currentTimeMillis(); + long tTotalTime = mProfilingEnd - mProfilingStart; + GalacticGreg.Profiler.AddTimeToList(tMDD, tTotalTime); + GalacticGreg.Logger.debug( + "Done with OreLayer-Worldgen in DimensionType %s. Generation took %d ms", + tMDD.getDimensionName(), + tTotalTime); + } catch (Exception ignored) {} // Silently ignore errors + } + + GalacticGreg.Logger.trace("Leaving executeWorldgen"); + return true; + } + + public int getDensityFromPos(int aX, int aZ, int aSeedX, int aSeedZ) { + if (aX < 0) aX -= 16; + if (aZ < 0) aZ -= 16; + return Math.max( + 1, + this.mDensity + / ((int) Math.sqrt(2 + Math.pow(aX / 16 - aSeedX / 16, 2) + Math.pow(aZ / 16 - aSeedZ / 16, 2)))); + } +} diff --git a/src/main/java/galacticgreg/WorldgenOreSmallSpace.java b/src/main/java/galacticgreg/WorldgenOreSmallSpace.java new file mode 100644 index 0000000000..18dd338ec3 --- /dev/null +++ b/src/main/java/galacticgreg/WorldgenOreSmallSpace.java @@ -0,0 +1,116 @@ +package galacticgreg; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; + +import galacticgreg.api.ModContainer; +import galacticgreg.api.ModDimensionDef; +import galacticgreg.registry.GalacticGregRegistry; +import gregtech.api.world.GTWorldgen; +import gregtech.common.SmallOreBuilder; + +public class WorldgenOreSmallSpace extends GTWorldgen { + + public final short mMinY; + public final short mMaxY; + public final short mAmount; + public final short mMeta; + + private long mProfilingStart; + private long mProfilingEnd; + private Map allowedDims; + + public WorldgenOreSmallSpace(SmallOreBuilder ore) { + super(ore.smallOreName, GalacticGreg.smallOreWorldgenList, ore.enabledByDefault); + + mMinY = (short) ore.minY; + mMaxY = (short) Math.max(this.mMinY + 1, ore.maxY); + mAmount = (short) Math.max(1, ore.amount); + mMeta = (short) ore.ore.mMetaItemSubID; + + allowedDims = new HashMap<>(); + for (ModContainer mc : GalacticGregRegistry.getModContainers()) { + if (!mc.getEnabled()) continue; + + for (ModDimensionDef mdd : mc.getDimensionList()) { + String tDimIdentifier = mdd.getDimIdentifier(); + if (allowedDims.containsKey(tDimIdentifier)) GalacticGreg.Logger.error( + "Found 2 Dimensions with the same Identifier: %s Dimension will not generate Ores", + tDimIdentifier); + else { + boolean tFlag = ore.dimsEnabled.getOrDefault(mdd.getDimensionName(), false); + allowedDims.put(tDimIdentifier, tFlag); + } + } + } + + GalacticGreg.Logger.trace("Initialized new OreLayer: %s", ore.smallOreName); + } + + /** + * Check if *this* orelayer is enabled for pDimensionDef + * + * @param pDimensionDef the ChunkProvider in question + * @return + */ + public boolean isEnabledForDim(ModDimensionDef pDimensionDef) { + return allowedDims.getOrDefault(pDimensionDef.getDimIdentifier(), false); + } + + @Override + public boolean executeWorldgen(World pWorld, Random pRandom, String pBiome, int pDimensionType, int pChunkX, + int pChunkZ, IChunkProvider pChunkGenerator, IChunkProvider pChunkProvider) { + GalacticGreg.Logger.trace("Entering executeWorldgen for [%s]", mWorldGenName); + ModDimensionDef tMDD = GalacticGregRegistry.getDimensionTypeByChunkGenerator(pChunkGenerator); + if (tMDD == null) { + GalacticGreg.Logger + .trace("Can't find dimension definition for ChunkProvider %s, skipping", pChunkGenerator.toString()); + return false; + } + + if (!isEnabledForDim(tMDD)) { + GalacticGreg.Logger + .trace("OreGen for %s is disallowed in dimension %s, skipping", mWorldGenName, tMDD.getDimensionName()); + return false; + } + + if (GalacticGreg.GalacticConfig.ProfileOreGen) mProfilingStart = System.currentTimeMillis(); + // --------------------------- + + if (this.mMeta > 0) { + int i = 0; + for (int j = Math.max(1, this.mAmount / 2 + pRandom.nextInt(this.mAmount) / 2); i < j; i++) { + TileEntitySpaceOres.setOuterSpaceOreBlock( + tMDD, + pWorld, + pChunkX + pRandom.nextInt(16), + this.mMinY + pRandom.nextInt(Math.max(1, this.mMaxY - this.mMinY)), + pChunkZ + pRandom.nextInt(16), + this.mMeta + 16000); + } + } + // --------------------------- + if (GalacticGreg.GalacticConfig.ProfileOreGen) { + try { + mProfilingEnd = System.currentTimeMillis(); + long tTotalTime = mProfilingEnd - mProfilingStart; + GalacticGreg.Profiler.AddTimeToList(tMDD, tTotalTime); + GalacticGreg.Logger.debug( + "Done with SmallOre-Worldgen in DimensionType %s. Generation took %d ms", + tMDD.getDimensionName(), + tTotalTime); + } catch (Exception ignored) {} // Silently ignore errors + } + + GalacticGreg.Logger.trace("Leaving executeWorldgen"); + return true; + } + + public boolean isAllowedForHeight(int pTargetHeight) { + return (pTargetHeight >= mMinY && pTargetHeight <= mMaxY); + } +} diff --git a/src/main/java/galacticgreg/api/AsteroidBlockComb.java b/src/main/java/galacticgreg/api/AsteroidBlockComb.java new file mode 100644 index 0000000000..208d8faed3 --- /dev/null +++ b/src/main/java/galacticgreg/api/AsteroidBlockComb.java @@ -0,0 +1,77 @@ +package galacticgreg.api; + +import net.minecraft.block.Block; + +/** + * Class for a bit more advanced combinations for Asteroids, which supports Custom Blocks as base material and Values + * required to generate Gregtech ores + */ +public class AsteroidBlockComb extends BlockMetaComb { + + private final GTOreTypes _mGTOreMaterial; + + /** + * Create an advanced definition which uses the GregTech-OreType values for ores, and your own definition of Block + * for the asteroid material + * + * @param pOreType The GregTech oreType + * @param pBlock Your block + */ + public AsteroidBlockComb(GTOreTypes pOreType, Block pBlock) { + super(pBlock, 0); + _mGTOreMaterial = pOreType; + } + + /** + * Create an advanced definition which uses the GregTech-OreType values for ores, and your own definition of Block + * for the asteroid material + * + * @param pOreType The GregTech oreType + * @param pBlock Your block + * @param pMeta The metavalue for your block (If required) + */ + public AsteroidBlockComb(GTOreTypes pOreType, Block pBlock, int pMeta) { + super(pBlock, pMeta); + _mGTOreMaterial = pOreType; + } + + /** + * Create a simple definition which uses the GregTech-OreType values for both asteroidStone and ores + * + * @param pOreType The GregTech oreType + */ + public AsteroidBlockComb(GTOreTypes pOreType) { + super(pOreType.getBlock(), pOreType.getMeta()); + _mGTOreMaterial = pOreType; + } + + /** + * Internal function + * + * @return The GT Material for the oregen + */ + public GTOreTypes getOreMaterial() { + return _mGTOreMaterial; + } + + @Override + public boolean equals(Object other) { + if (other == null) return false; + if (other == this) return true; + if (!(other instanceof AsteroidBlockComb)) return false; + AsteroidBlockComb otherObj = (AsteroidBlockComb) other; + + boolean tFlag = true; + String otherName = Block.blockRegistry.getNameForObject(otherObj.getBlock()); + String thisName = Block.blockRegistry.getNameForObject(this.getBlock()); + if (otherName != null && thisName != null) { + if (!otherName.equals(thisName)) tFlag = false; + + if (!(otherObj.getMeta() == this.getMeta())) tFlag = false; + + if (!(otherObj.getOreMaterial() == this.getOreMaterial())) tFlag = false; + } else tFlag = false; + + return tFlag; + } +} diff --git a/src/main/java/galacticgreg/api/BlockMetaComb.java b/src/main/java/galacticgreg/api/BlockMetaComb.java new file mode 100644 index 0000000000..f4dc416c6b --- /dev/null +++ b/src/main/java/galacticgreg/api/BlockMetaComb.java @@ -0,0 +1,50 @@ +package galacticgreg.api; + +import net.minecraft.block.Block; + +/** + * Class used for Simple Block - Meta constructs + */ +public class BlockMetaComb { + + private int mMeta; + private Block mBlock; + + /** + * Creates a simple instance for a block that has no meta value + * + * @param pBlock The Block in question. 0 is used as meta + */ + public BlockMetaComb(Block pBlock) { + this(pBlock, 0); + } + + /** + * Creates a simple instance for a block with a meta value + * + * @param pBlock The Block in question + * @param pMeta The MetaValue in question ([block]:[meta]) + */ + public BlockMetaComb(Block pBlock, int pMeta) { + mMeta = pMeta; + mBlock = pBlock; + } + + /** + * Internal function + * + * @return The metadata for this block + */ + public int getMeta() { + return mMeta; + } + + /** + * Internal function + * + * @return The block + */ + public Block getBlock() { + return mBlock; + } +} diff --git a/src/main/java/galacticgreg/api/Enums.java b/src/main/java/galacticgreg/api/Enums.java new file mode 100644 index 0000000000..f60c5602dd --- /dev/null +++ b/src/main/java/galacticgreg/api/Enums.java @@ -0,0 +1,51 @@ +package galacticgreg.api; + +public class Enums { + + public enum SpaceObjectType { + OreAsteroid, + NonOreSchematic + } + + public enum TargetBlockPosition { + Invalid, + AsteroidInnerCore, + AsteroidCore, + AsteroidShell, + StructureBlock + } + + public enum AllowedBlockPosition { + AsteroidInnerCore, + AsteroidCore, + AsteroidShell, + AsteroidCoreAndShell + } + + public enum AirReplaceRule { + NeverReplaceAir, + AllowReplaceAir, + OnlyReplaceAir + } + + public enum ReplaceState { + Unknown, + Airblock, + CanReplace, + CannotReplace + } + + public enum DimensionType { + /** + * The Dimension is a void dimension and asteroids shall be generated. They will randomly spawn bewteen 0 and + * 250 Additional config values will be generated in worldconfig + */ + Asteroid, + + /** + * The Dimension is a planet, and only ores shall be generated in the ground + */ + Planet, + } + +} diff --git a/src/main/java/galacticgreg/api/GTOreTypes.java b/src/main/java/galacticgreg/api/GTOreTypes.java new file mode 100644 index 0000000000..fdc4ea61ff --- /dev/null +++ b/src/main/java/galacticgreg/api/GTOreTypes.java @@ -0,0 +1,66 @@ +package galacticgreg.api; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; + +import gregtech.api.GregTechAPI; + +/** + * Representation of the various GregTech ores, with their counterpart in VanillaBlocks, and the OreOffset that is + * required to generate the proper ores + */ +public enum GTOreTypes { + + /** + * The Definition for Gregtech's RedGranite + **/ + RedGranite(4000, GregTechAPI.sBlockGranites, 8, 3), + /** + * The Definition for Gregtech's BlackGranite + */ + BlackGranite(3000, GregTechAPI.sBlockGranites, 0, 3), + /** + * The Definition for EndStone + */ + EndStone(2000, Blocks.end_stone, 0, 0), + /** + * The Definition for Netherrack + */ + Netherrack(1000, Blocks.netherrack, 0, 0), // Unsure about blockupdate value! + /** + * The Definition for SmallOres (And BlockType Stone) + */ + SmallOres(16000, Blocks.stone, 0, 0), // Unsure about blockupdate value! + /** + * The Definition for Ores (And BlockType Stone) + */ + NormalOres(0, Blocks.stone, 0, 0); // Unsure about blockupdate value! + + private int _mOffset; + private Block _mStoneBlock; + private int _mBlockMeta; + private int _mUpdateMode; + + GTOreTypes(int pOffset, Block pBlock, int pMeta, int pUpdateMode) { + _mOffset = pOffset; + _mStoneBlock = pBlock; + _mBlockMeta = pMeta; + _mUpdateMode = pUpdateMode; + } + + public Block getBlock() { + return _mStoneBlock; + } + + public int getMeta() { + return _mBlockMeta; + } + + public int getOffset() { + return _mOffset; + } + + public int getUpdateMode() { + return _mUpdateMode; + } +} diff --git a/src/main/java/galacticgreg/api/ISpaceObjectGenerator.java b/src/main/java/galacticgreg/api/ISpaceObjectGenerator.java new file mode 100644 index 0000000000..3cf16c8791 --- /dev/null +++ b/src/main/java/galacticgreg/api/ISpaceObjectGenerator.java @@ -0,0 +1,58 @@ +package galacticgreg.api; + +import java.util.List; + +import net.minecraft.util.Vec3; + +import galacticgreg.api.Enums.SpaceObjectType; + +public interface ISpaceObjectGenerator { + + Vec3 getCenterPoint(); + + /** + * Set the center-point of the object to generate, by providing X, Y and Z directly + * + * @param pX + * @param pY + * @param pZ + */ + void setCenterPoint(int pX, int pY, int pZ); + + /** + * Set the center-point of the object to generate, by providing a Vec3 instance + * + * @param pCenter + */ + void setCenterPoint(Vec3 pCenter); + + List getStructure(); + + /** + * Calculate the structure Called after randomize() + */ + void calculate(); + + /** + * Randomize the structure. Called before calculate() + * + * @param pSizeMin The minimum size for the structure. It is up to you how you handle this value. it's what the user + * sets in his config file + * @param pSizeMax The maximum size for the structure. It is up to you how you handle this value. it's what the user + * sets in his config file + */ + void randomize(int pSizeMin, int pSizeMax); + + /** + * Define the type of the generator. OreAsteroid will be used to spawn ores at given coordinates, where + * NonOreSchematic will use the Blocks provided in the structural information to generate your structure + * + * @return + */ + SpaceObjectType getType(); + + /** + * This function is called every time the generator shall be reset in order to generate a blank, new structure + */ + void reset(); +} diff --git a/src/main/java/galacticgreg/api/ModContainer.java b/src/main/java/galacticgreg/api/ModContainer.java new file mode 100644 index 0000000000..37721cd38c --- /dev/null +++ b/src/main/java/galacticgreg/api/ModContainer.java @@ -0,0 +1,85 @@ +package galacticgreg.api; + +import java.util.ArrayList; +import java.util.List; + +/** + * Defines a Mod where this Generator shall be active. Note: This will only work (obviously) for Dimensions where + * either: - Gregtech has a hook in the OreGen or - For mods which are addons to GalactiCraft + * + */ +public class ModContainer { + + private String _mModName; + private List _mDimensionLookup; + private boolean _mEnabled = false; + + /** + * Internal function + * + * @return The state if the Registry could find the mod or not + */ + public boolean getEnabled() { + return _mEnabled; + } + + /** + * Internal function + * + * Never set this to true. This is an internal marker which is set by the registry if the mod could be found or not + * + * @param pEnabled + */ + public void setEnabled(boolean pEnabled) { + _mEnabled = pEnabled; + } + + /** + * Define a new Mod where GT OreGen shall be enabled + * + * @param pModName The modID. Make sure to use the proper mod-id, or it won't load correctly + */ + public ModContainer(String pModName) { + _mModName = pModName; + _mDimensionLookup = new ArrayList<>(); + } + + /** + * Internal function + * + * @return The mods name + */ + public String getModName() { + return _mModName; + } + + /** + * Internal function + * + * @return The list of attached dimensions for this mod + */ + public List getDimensionList() { + return _mDimensionLookup; + } + + /** + * Adds a new dimension to this modcontainer. Make sure you've added all blocks there first + * + * @param pDimDef The dimension definition to be added + * @return true if it could be added, false if not + */ + public boolean addDimensionDef(ModDimensionDef pDimDef) { + for (ModDimensionDef mdd : _mDimensionLookup) { + if (mdd.getChunkProviderName() + .equals(pDimDef.getChunkProviderName())) { + // Cannot add DimensionDefinition; The Given chunk-provider name is already taken! + return false; + } + } + + // Set the parent modName of this dimension. This will finalize it + pDimDef.setParentModName(_mModName); + _mDimensionLookup.add(pDimDef); + return true; + } +} diff --git a/src/main/java/galacticgreg/api/ModDBMDef.java b/src/main/java/galacticgreg/api/ModDBMDef.java new file mode 100644 index 0000000000..11d6bc630e --- /dev/null +++ b/src/main/java/galacticgreg/api/ModDBMDef.java @@ -0,0 +1,159 @@ +package galacticgreg.api; + +import net.minecraft.block.Block; + +/** + * Mod "Dimension Block Meta Definition" Defines the Block-Meta combination for Blocks that can be replaced by the + * oregen. + * + */ +public class ModDBMDef { + + private String _targetBlockName; + private int _targetMeta; + private boolean _canAlwaysReplace; + + public String getBlockName() { + return _targetBlockName; + } + + public int getMeta() { + return _targetMeta; + } + + public boolean getCanAlwaysReplace() { + return _canAlwaysReplace; + } + + /** + * Internal function + * + * Check if the given Block is equal to the block in this instance + * + * @param pBlock the Block in question + * @return + */ + public Enums.ReplaceState blockEquals(Block pBlock) { + if (pBlock == null) return Enums.ReplaceState.Unknown; + + if (Block.blockRegistry.getNameForObject(pBlock) + .equals(_targetBlockName)) return Enums.ReplaceState.CanReplace; + else return Enums.ReplaceState.CannotReplace; + } + + /** + * Internal function + * + * Check if the given Block is equal to the block in this instance and matches the metadata + * + * @param pBlock the block in question + * @param pMeta the metadata in question + * @return + */ + public Enums.ReplaceState blockEquals(Block pBlock, int pMeta) { + Enums.ReplaceState tFlag = Enums.ReplaceState.Unknown; + if (blockEquals(pBlock) == Enums.ReplaceState.CanReplace) { + if (pMeta == _targetMeta || _canAlwaysReplace) tFlag = Enums.ReplaceState.CanReplace; + else tFlag = Enums.ReplaceState.CannotReplace; + } + + return tFlag; + } + + @Override + public boolean equals(Object other) { + if (other == null) return false; + if (other == this) return true; + if (!(other instanceof ModDBMDef)) return false; + ModDBMDef otherModDBMDef = (ModDBMDef) other; + return (otherModDBMDef._targetBlockName.equals(_targetBlockName) && otherModDBMDef._targetMeta == _targetMeta); + } + + /** + * Create a new "Block that can be replaced by ores" definition. Meta defaults to 0 here + * + * @param pTargetBlockName The unlocalizedName of the block + */ + public ModDBMDef(String pTargetBlockName) { + this(pTargetBlockName, 0, false); + } + + /** + * Create a new "Block that can be replaced by ores" definition + * + * @param pTargetBlockName The unlocalizedName of the block + * @param pMetaData The blocks metadata + */ + public ModDBMDef(String pTargetBlockName, int pMetaData) { + this(pTargetBlockName, pMetaData, false); + } + + /** + * Create a new "Block that can be replaced by ores" definition + * + * @param pTargetBlock The instance of the block that can be replaced + * @param pMetaData The blocks metadata + */ + public ModDBMDef(Block pTargetBlock, int pMetaData) { + this(Block.blockRegistry.getNameForObject(pTargetBlock), pMetaData, false); + } + + /** + * Create a new "Block that can be replaced by ores" definition. Meta defaults to 0 here + * + * @param pTargetBlock The instance of the block that can be replaced + */ + public ModDBMDef(Block pTargetBlock) { + this(Block.blockRegistry.getNameForObject(pTargetBlock), 0, false); + } + + /** + * Create a new "Block that can be replaced by ores" definition + * + * @param pTargetBlock + * @param pCanAlwaysReplace set to true if this block can always be replaced, regardless of it's metavalue. Like: + * [block]:* + */ + public ModDBMDef(Block pTargetBlock, boolean pCanAlwaysReplace) { + this(Block.blockRegistry.getNameForObject(pTargetBlock), -1, pCanAlwaysReplace); + } + + /** + * Create a new "Block that can be replaced by ores" definition + * + * @param pTargetBlockName The unlocalizedName of the block + * @param pCanAlwaysReplace set to true if this block can always be replaced, regardless of it's metavalue. Like: + * [block]:* + */ + public ModDBMDef(String pTargetBlockName, boolean pCanAlwaysReplace) { + this(pTargetBlockName, -1, false); + } + + /** + * Create a new "Block that can be replaced by ores" definition + * + * @param pTargetBlockName The unlocalizedName of the block + * @param pMetaData The blocks metadata + * @param pCanAlwaysReplace set to true if this block can always be replaced, regardless of it's metavalue. Like: + * [block]:* + */ + public ModDBMDef(String pTargetBlockName, int pMetaData, boolean pCanAlwaysReplace) { + _targetBlockName = pTargetBlockName; + _targetMeta = pMetaData; + _canAlwaysReplace = pCanAlwaysReplace; + } + + /** + * Internal function Never run this function. It is used to update the blocks name when GalacticGreg is initializing + * its internal structures + * + * @param pParentModName The modname to be attached to the block-name + */ + public void updateBlockName(String pParentModName) { + // Do we already have a FQBN? then do nothing + if (_targetBlockName.contains(":")) { + return; + } + _targetBlockName = String.format("%s:%s", pParentModName, _targetBlockName); + } +} diff --git a/src/main/java/galacticgreg/api/ModDimensionDef.java b/src/main/java/galacticgreg/api/ModDimensionDef.java new file mode 100644 index 0000000000..b456aa031e --- /dev/null +++ b/src/main/java/galacticgreg/api/ModDimensionDef.java @@ -0,0 +1,461 @@ +package galacticgreg.api; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.world.chunk.IChunkProvider; + +// import galacticgreg.GalacticGreg; + +/** + * Class to define a Dimension. Supposed to be added to a ModContainer + */ +public class ModDimensionDef { + + private static final String STR_NOTDEFINED = "iiznotdefined"; + private String _mDimensionName; + private String _mInternalDimIdentifier; + private String _mChunkProvider; + private Enums.AirReplaceRule _mDimAirSetting; + private ArrayList _mReplaceableBlocks; + private Enums.DimensionType _mDimensionType; + + private List _mSpaceObjectsGenerators; + private List _mSpaceStructureGenerators; + + // Special Planets config settings + private int _mGroundOreMaxY = 64; + private int _mFloatingAsteroidsMinY = 128; + // ------ + + // Override for stonetype + private GTOreTypes _mStoneType; + + // Asteroid stuff + private List _mValidAsteroidMaterials; + private List _mSpecialBlocksForAsteroids; + + private Random _mRandom = new Random(System.currentTimeMillis()); + + /** + * Internal function + * + * @return A list of possible asteroid-mixes that shall be generated + */ + public List getValidAsteroidMaterials() { + return _mValidAsteroidMaterials; + } + + // ================================================= + /** + * Internal function The only purpose of this functions is to get a default config value for this dim, that can be + * altered by the mod author which adds the dimension definition to his mod, but also provide the + * modpack-author/serveradmin to change these values aswell + */ + public int getPreConfiguratedGroundOreMaxY() { + return _mGroundOreMaxY; + } + + /** + * Internal function The only purpose of this functions is to get a default config value for this dim, that can be + * altered by the mod author which adds the dimension definition to his mod, but also provide the + * modpack-author/serveradmin to change these values aswell + */ + public int getPreConfiguratedFloatingAsteroidMinY() { + return _mFloatingAsteroidsMinY; + } + + /** + * Register new generator for objects in space. You can register as many as you want. If you don't register + * anything, no structures will generate and the default Asteroid-Generator will be used + * + * @param pSpaceObjectGenerator An instance of your own object generator + */ + public void registerSpaceObjectGenerator(ISpaceObjectGenerator pSpaceObjectGenerator) { + Enums.SpaceObjectType tType = pSpaceObjectGenerator.getType(); + switch (tType) { + case NonOreSchematic: + _mSpaceStructureGenerators.add(pSpaceObjectGenerator); + break; + case OreAsteroid: + _mSpaceObjectsGenerators.add(pSpaceObjectGenerator); + break; + default: + // GalacticGreg.Logger.error("registerSpaceObjectGenerator() found unhandled generator type %s. Please + // report asap, the author was lazy!", tType.toString()); + break; + + } + } + + /** + * Internal function Return a random generator for space objects + */ + public ISpaceObjectGenerator getRandomSOGenerator(Enums.SpaceObjectType pTargetType) { + ISpaceObjectGenerator tGen = null; + List tLst = null; + try { + switch (pTargetType) { + case NonOreSchematic: + tLst = _mSpaceStructureGenerators; + break; + case OreAsteroid: + tLst = _mSpaceObjectsGenerators; + break; + default: + break; + } + + if (tLst != null) { + if (tLst.size() == 1) tGen = tLst.get(0); + else if (tLst.size() > 1) tGen = tLst.get(_mRandom.nextInt(tLst.size())); + } + } catch (Exception e) { + e.printStackTrace(); + } + return tGen; + } + + /** + * Define the default values for the floating asteroids and the oregen here. As both generators run in the same + * dimension, and you probably don't want to have asteroids stuck in the ground, both generators are separated from + * each other. Basically, you can go with the default values. If you want to change them, make sure that pOregenMaxY + * is lower than pAsteroidMinY + * + * @param pOregenMaxY The maximum Y-height where ores will be allowed to spawn. Default: 64 + * @param pAsteroidMinY The minimum Y-height that has to be reached before asteroids will spawn. Default: 128 + * @throws IllegalArgumentException if the limits are invalid + * + */ + public void setAsteroidAndPlanetLimits(int pOregenMaxY, int pAsteroidMinY) { + if (pOregenMaxY >= pAsteroidMinY) + throw new IllegalArgumentException("pOregenMaxY must be LOWER than pAsteroidMinY!"); + + _mFloatingAsteroidsMinY = pAsteroidMinY; + _mGroundOreMaxY = pOregenMaxY; + } + // ================================================= + + /** + * Internal function + * + * @return A list of all special blocks that shall be used to generate the asteroids. + */ + public List getSpecialBlocksForAsteroids() { + return _mSpecialBlocksForAsteroids; + } + + public List getSpaceObjectGenerators() { + return _mSpaceObjectsGenerators; + } + + /** + * Internal function + * + * @return The type for this dimension + */ + public Enums.DimensionType getDimensionType() { + return _mDimensionType; + } + + /** + * Set whether this DimensionDefinition defines an void-dimension that shall spawn asteroids instead of ores in + * stone + * + * @param pType The dimensiontype to be used + */ + public void setDimensionType(Enums.DimensionType pType) { + _mDimensionType = pType; + } + + /** + * Internal function + * + * @return The configuration for AirBlocks + */ + public Enums.AirReplaceRule getAirSetting() { + return _mDimAirSetting; + } + + /** + * Define how the oregen shall handle air-blocks. These settings should be pretty self-explandatory, but anyways: + * NeverReplaceAir: No matter what, if there is an Air-Block found, it will not replace it. AllowReplaceAir: This + * will generate Ores in Stones (defined by addBlockDefinition()) and air if found OnlyReplaceAir : This will not + * generate Ores in solid blocks, but only in air + * + * Note that "OnlyReplaceAir" is a special setting if you have a dimension that is not defined as "Asteroids" but + * you still need/want to generate ores in midair. + * + * @param pSetting + */ + public void setAirSetting(Enums.AirReplaceRule pSetting) { + _mDimAirSetting = pSetting; + } + + /** + * Internal function + * + * @return The dimension identifier that is used internally to identify the dimension + */ + public String getDimIdentifier() { + return _mInternalDimIdentifier; + } + + /** + * Set a manual override for ores that shall be generated. This setting is ignored if getIsAsteroidDimension() + * returns true + * + * For example, on GalactiCraft Mars, this value is set to GTOreTypes.RedGranite, because it matches the color + * better. If you don't set anything here, it will generate regular stone-ores. + * + * @param pStoneType + */ + public void setStoneType(GTOreTypes pStoneType) { + _mStoneType = pStoneType; + } + + /** + * Internal function + * + * @return The stone override for gregtech ores + */ + public GTOreTypes getStoneType() { + return _mStoneType; + } + + /** + * Internal function + * + * @return The attached chunk-provider for this dimension + */ + public String getChunkProviderName() { + return _mChunkProvider; + } + + /** + * Adds a new blockdefinition to this dimension. This block will then later be replaced by ores. You can add as many + * blocks as you want. Just don't add Blocks.Air, as there is another setting for allowing Air-Replacement + * + * @param pBlockDef + * @return + */ + public boolean addBlockDefinition(ModDBMDef pBlockDef) { + if (_mReplaceableBlocks.contains(pBlockDef)) { + return false; + } else { + _mReplaceableBlocks.add(pBlockDef); + return true; + } + } + + /** + * Internal function + * + * @return The DimensionName in a Human-readable format + */ + public String getDimensionName() { + return _mDimensionName; + } + + /** + * Internal function + * + * @return A list of all defined Blocks that can be replaced while generating ores + */ + public ArrayList getReplaceableBlocks() { + return _mReplaceableBlocks; + } + + /** + * Define a new dimension + * + * @param pDimensionName The human-readable. Spaces will be removed + * @param pChunkProvider The chunkprovider class that shall be observed for the oregen + */ + public ModDimensionDef(String pDimensionName, Class pChunkProvider, + Enums.DimensionType pDimType) { + this( + pDimensionName, + pChunkProvider.toString() + .substring(6), + pDimType, + null); + } + + /** + * Define a new dimension + * + * @param pDimensionName The human-readable. Spaces will be removed + * @param pChunkProvider The chunkprovider class that shall be observed for the oregen + * @param pBlockDefinitions The list of predefined blocks to be replaced by ores + */ + public ModDimensionDef(String pDimensionName, Class pChunkProvider, + Enums.DimensionType pDimType, List pBlockDefinitions) { + this( + pDimensionName, + pChunkProvider.toString() + .substring(6), + pDimType, + pBlockDefinitions); + } + + /** + * Define a new dimension + * + * @param pDimensionName The human-readable DimensionName. Spaces will be removed + * @param pChunkProviderName The human-readable, full-qualified classname for the chunkprovider + */ + public ModDimensionDef(String pDimensionName, String pChunkProviderName, Enums.DimensionType pDimType) { + this(pDimensionName, pChunkProviderName, pDimType, null); + } + + /** + * Define a new dimension + * + * @param pDimensionName The human-readable DimensionName. Spaces will be removed + * @param pChunkProviderName The human-readable, full-qualified classname for the chunkprovider + * @param pBlockDefinitions The list of predefined blocks to be replaced by ores + */ + public ModDimensionDef(String pDimensionName, String pChunkProviderName, Enums.DimensionType pDimType, + List pBlockDefinitions) { + _mInternalDimIdentifier = STR_NOTDEFINED; + _mDimensionName = pDimensionName; + _mChunkProvider = pChunkProviderName; + _mDimensionType = pDimType; + + _mReplaceableBlocks = new ArrayList<>(); + if (pBlockDefinitions != null) _mReplaceableBlocks.addAll(pBlockDefinitions); + + _mValidAsteroidMaterials = new ArrayList<>(); + _mSpecialBlocksForAsteroids = new ArrayList<>(); + _mSpaceObjectsGenerators = new ArrayList<>(); + _mSpaceStructureGenerators = new ArrayList<>(); + } + + /** + * Internal function + * + * Do not call this function by yourself. Ever. It will cause explosions, water to blood, death of firstborn,... + * Seriously, don't do it. + */ + protected void setParentModName(String pModName) { + if (_mInternalDimIdentifier.equals(STR_NOTDEFINED)) { + _mInternalDimIdentifier = String.format("%s_%s", pModName, _mDimensionName); + } + + // Else Don't update, we're already set + + } + + /** + * Internal function + * + * Check if pBlock can be replaced by an ore + * + * @param pBlock + * @param pMeta + * @return + */ + public Enums.ReplaceState getReplaceStateForBlock(Block pBlock, int pMeta) { + Enums.ReplaceState tFlag = Enums.ReplaceState.Unknown; + + for (ModDBMDef pDef : _mReplaceableBlocks) { + Enums.ReplaceState tResult = pDef.blockEquals(pBlock, pMeta); + if (tResult == Enums.ReplaceState.Unknown) continue; + + if (tResult == Enums.ReplaceState.CanReplace) { + // GalacticGreg.Logger.trace("Targetblock found and metadata match. Replacement allowed"); + tFlag = Enums.ReplaceState.CanReplace; + } else if (tResult == Enums.ReplaceState.CannotReplace) { + // GalacticGreg.Logger.trace("Targetblock found but metadata mismatch. Replacement denied"); + tFlag = Enums.ReplaceState.CannotReplace; + } + break; + } + + return tFlag; + } + + /** + * Internal function + * + * Randomly select one material out of all defined materials + * + * @return + */ + public AsteroidBlockComb getRandomAsteroidMaterial() { + if (_mValidAsteroidMaterials.size() == 0) return null; + + if (_mValidAsteroidMaterials.size() == 1) return _mValidAsteroidMaterials.get(0); + else { + return _mValidAsteroidMaterials.get(_mRandom.nextInt(_mValidAsteroidMaterials.size())); + } + } + + /** + * Internal function + * + * Randomly select one special block to be placed in the asteroids + * + * @return + */ + public SpecialBlockComb getRandomSpecialAsteroidBlock() { + if (_mSpecialBlocksForAsteroids.size() == 0) return null; + + if (_mSpecialBlocksForAsteroids.size() == 1) return _mSpecialBlocksForAsteroids.get(0); + else { + return _mSpecialBlocksForAsteroids.get(_mRandom.nextInt(_mSpecialBlocksForAsteroids.size())); + } + } + + /** + * Define the material the asteroid shall be made of. Limited to GT-Based Ores and their stones + * + * @param pMaterial + */ + public void addAsteroidMaterial(GTOreTypes pMaterial) { + addAsteroidMaterial(new AsteroidBlockComb(pMaterial)); + } + + /** + * Define the material the asteroid shall be made of, more advanced option to specify your own blocks + * + * @param pBlockComb + */ + public void addAsteroidMaterial(AsteroidBlockComb pBlockComb) { + if (!_mValidAsteroidMaterials.contains(pBlockComb)) { + _mValidAsteroidMaterials.add(pBlockComb); + } + } + + /** + * Adds a new material for asteroid generation. These will spawn randomly in asteroids if enabled. You can basically + * add every block you can imagine. Be warned though, if you use Liquids (Water / Lava / ..), it can affect + * performance if the liquid is flowing down to the void. So make sure you define "AsteroidCore" as position + * + * @param pBlock Block-Meta Combination that shall be used + */ + public void addSpecialAsteroidBlock(SpecialBlockComb pBlock) { + if (!_mSpecialBlocksForAsteroids.contains(pBlock)) { + _mSpecialBlocksForAsteroids.add(pBlock); + } + } + + /** + * Internal function Called when GalacticGreg will finalize all its internal structures. You should never call this + * yourself + */ + public void finalizeReplaceableBlocks(String pParentModName) { + for (ModDBMDef rpb : _mReplaceableBlocks) { + try { + rpb.updateBlockName(pParentModName); + if (_mStoneType == null) _mStoneType = GTOreTypes.NormalOres; + } catch (Exception e) { + // GalacticGreg.Logger.error("Unable to finalize replaceable block with modname for block %s. Dimension + // %s will probably have problems generating ores", rpb.getBlockName(), _mDimensionName); + } + } + } +} diff --git a/src/main/java/galacticgreg/api/SpecialBlockComb.java b/src/main/java/galacticgreg/api/SpecialBlockComb.java new file mode 100644 index 0000000000..2cf812169a --- /dev/null +++ b/src/main/java/galacticgreg/api/SpecialBlockComb.java @@ -0,0 +1,69 @@ +package galacticgreg.api; + +import net.minecraft.block.Block; + +public class SpecialBlockComb extends BlockMetaComb { + + private Enums.AllowedBlockPosition _mBlockPosition; + + /** + * Creates a simple instance for a block that has a meta value and a block position it is allowed to spawn + * + * @param pBlock The Block in question + * @param pMeta The meta value of the block + * @param pBlockPosition The position this block is allowed to generate + */ + public SpecialBlockComb(Block pBlock, int pMeta, Enums.AllowedBlockPosition pBlockPosition) { + super(pBlock, pMeta); + _mBlockPosition = pBlockPosition; + } + + /** + * Creates a simple instance for a block that has no meta value but a position it is allowed to spawn + * + * @param pBlock The Block in question. 0 is used as meta + * @param pBlockPosition The position this block is allowed to generate + */ + public SpecialBlockComb(Block pBlock, Enums.AllowedBlockPosition pBlockPosition) { + super(pBlock, 0); + _mBlockPosition = pBlockPosition; + } + + /** + * Creates a simple instance for a block that has no meta value and is allowed to spawn everywhere + * + * @param pBlock The Block in question. 0 is used as meta, and "CoreAndShell" is used as position + */ + public SpecialBlockComb(Block pBlock) { + super(pBlock, 0); + _mBlockPosition = Enums.AllowedBlockPosition.AsteroidCoreAndShell; + } + + /** + * Internal function + * + * @return The position the block is supposed to spawn at + */ + public Enums.AllowedBlockPosition getBlockPosition() { + return _mBlockPosition; + } + + @Override + public boolean equals(Object other) { + if (other == null) return false; + if (other == this) return true; + if (!(other instanceof SpecialBlockComb)) return false; + SpecialBlockComb otherObj = (SpecialBlockComb) other; + + boolean tFlag = true; + String otherName = Block.blockRegistry.getNameForObject(otherObj.getBlock()); + String thisName = Block.blockRegistry.getNameForObject(this.getBlock()); + if (!otherName.equals(thisName)) tFlag = false; + + if (!(otherObj.getMeta() == this.getMeta())) tFlag = false; + + if (!(otherObj.getBlockPosition() == this.getBlockPosition())) tFlag = false; + + return tFlag; + } +} diff --git a/src/main/java/galacticgreg/api/StructureInformation.java b/src/main/java/galacticgreg/api/StructureInformation.java new file mode 100644 index 0000000000..4c33f88c20 --- /dev/null +++ b/src/main/java/galacticgreg/api/StructureInformation.java @@ -0,0 +1,59 @@ +package galacticgreg.api; + +import net.minecraft.util.Vec3; + +import galacticgreg.api.Enums.TargetBlockPosition; + +/** + * Structural information container. Holds X/Y/Z and block/meta information + */ +public class StructureInformation { + + private Vec3 _mCoordinates; + private TargetBlockPosition _mBlockPosition; + private BlockMetaComb _mBlockMetaComb; + + public TargetBlockPosition getBlockPosition() { + return _mBlockPosition; + } + + public int getX() { + return (int) Math.round(_mCoordinates.xCoord); + } + + public int getY() { + return (int) Math.round(_mCoordinates.yCoord); + } + + public int getZ() { + return (int) Math.round(_mCoordinates.zCoord); + } + + public BlockMetaComb getBlock() { + return _mBlockMetaComb; + } + + /** + * Init StructureInfo only with Coords and block position + * + * @param pCoordinates The coords in question + * @param pPosition The position-enum value + */ + public StructureInformation(Vec3 pCoordinates, TargetBlockPosition pPosition) { + this(pCoordinates, pPosition, null); + } + + /** + * Init StructureInfo with Coords, block position and a populated block/meta info + * + * @param pCoordinates The coords in question + * @param pPosition The position-enum value + * @param pTargetBlock The target block in question + */ + public StructureInformation(Vec3 pCoordinates, TargetBlockPosition pPosition, BlockMetaComb pTargetBlock) { + _mCoordinates = pCoordinates; + _mBlockPosition = pPosition; + _mBlockMetaComb = pTargetBlock; + } + +} diff --git a/src/main/java/galacticgreg/api/enums/DimensionBlockMetaDefinitionList.java b/src/main/java/galacticgreg/api/enums/DimensionBlockMetaDefinitionList.java new file mode 100644 index 0000000000..a9cf4a4e79 --- /dev/null +++ b/src/main/java/galacticgreg/api/enums/DimensionBlockMetaDefinitionList.java @@ -0,0 +1,57 @@ +package galacticgreg.api.enums; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.init.Blocks; + +import galacticgreg.api.ModDBMDef; + +public enum DimensionBlockMetaDefinitionList { + + Moon(new ModDBMDef("tile.moonBlock", 4)), + Mars(new ModDBMDef("tile.mars", 9)), + Phobos(new ModDBMDef("phobosblocks", 2)), + Deimos(new ModDBMDef("deimosblocks", 1)), + Ceres(new ModDBMDef("ceresblocks", 1)), + Io(new ModDBMDef("ioblocks", 2)), + Ganymede(new ModDBMDef("ganymedeblocks", 1)), + Callisto(new ModDBMDef("callistoblocks", 1)), + Venus(new ModDBMDef("venusblocks", 1)), + Mercury(new ModDBMDef("mercuryblocks", 2)), + Enceladus(new ModDBMDef("enceladusblocks", 1)), + Titan(new ModDBMDef("titanblocks", 2)), + Oberon(new ModDBMDef("oberonblocks", 2)), + Proteus(new ModDBMDef("proteusblocks", 2)), + Triton(new ModDBMDef("tritonblocks", 2)), + Pluto(new ModDBMDef("plutoblocks", 5)), + MakeMake(new ModDBMDef("makemakegrunt", 1)), + Haumea(new ModDBMDef("haumeablocks")), + CentauriAlpha(new ModDBMDef("acentauribbsubgrunt")), + VegaB(new ModDBMDef("vegabsubgrunt")), + BarnardaC(new ModDBMDef("barnardaCdirt"), new ModDBMDef(Blocks.stone)), + BarnardaE(new ModDBMDef("barnardaEsubgrunt")), + BarnardaF(new ModDBMDef("barnardaFsubgrunt")), + TcetiE(new ModDBMDef("tcetieblocks", 2)), + Miranda(new ModDBMDef("mirandablocks", 2)), + Europa( + // Europa top layer turned off bc ores are too easy to spot + new ModDBMDef("europagrunt", 1), // Europa Ice Layer ~55-65 without top layer + new ModDBMDef(Blocks.water), new ModDBMDef(Blocks.flowing_water), new ModDBMDef(Blocks.ice), // Generates + // directly over + // bedrock + new ModDBMDef(Blocks.packed_ice), // Generates directly over bedrock + new ModDBMDef("europaunderwatergeyser") // Generates directly over bedrock + ), + Neper(new ModDBMDef(Blocks.stone), new ModDBMDef("tile.baseBlockRock", 10)), + Maahes(new ModDBMDef("tile.baseBlockRock", 1)), + Anubis(new ModDBMDef("tile.baseBlockRock", 1)), + Horus(new ModDBMDef(Blocks.obsidian)), + Seth(new ModDBMDef(Blocks.hardened_clay)); + + public final List DBMDefList; + + private DimensionBlockMetaDefinitionList(ModDBMDef... DBMDefArray) { + DBMDefList = Arrays.asList(DBMDefArray); + } +} diff --git a/src/main/java/galacticgreg/api/enums/DimensionDef.java b/src/main/java/galacticgreg/api/enums/DimensionDef.java new file mode 100644 index 0000000000..96626ee7f3 --- /dev/null +++ b/src/main/java/galacticgreg/api/enums/DimensionDef.java @@ -0,0 +1,228 @@ +package galacticgreg.api.enums; + +import net.minecraft.world.gen.ChunkProviderEnd; + +import galacticgreg.api.Enums; +import galacticgreg.api.ModDimensionDef; + +public enum DimensionDef { + + EndAsteroids(new ModDimensionDef(DimNames.ENDASTEROIDS, ChunkProviderEnd.class, Enums.DimensionType.Asteroid)), + Moon(new ModDimensionDef( + DimNames.MOON, + "micdoodle8.mods.galacticraft.core.world.gen.ChunkProviderMoon", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Moon.DBMDefList)), + Mars(new ModDimensionDef( + DimNames.MARS, + "micdoodle8.mods.galacticraft.planets.mars.world.gen.ChunkProviderMars", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Mars.DBMDefList)), + Asteroids(new ModDimensionDef( + DimNames.ASTEROIDS, + "micdoodle8.mods.galacticraft.planets.asteroids.world.gen.ChunkProviderAsteroids", + Enums.DimensionType.Asteroid)), + Pluto(new ModDimensionDef( + DimNames.PLUTO, + "galaxyspace.SolarSystem.planets.pluto.dimension.ChunkProviderPluto", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Pluto.DBMDefList)), + Triton(new ModDimensionDef( + DimNames.TRITON, + "galaxyspace.SolarSystem.moons.triton.dimension.ChunkProviderTriton", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Triton.DBMDefList)), + Proteus(new ModDimensionDef( + DimNames.PROTEUS, + "galaxyspace.SolarSystem.moons.proteus.dimension.ChunkProviderProteus", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Proteus.DBMDefList)), + Oberon(new ModDimensionDef( + DimNames.OBERON, + "galaxyspace.SolarSystem.moons.oberon.dimension.ChunkProviderOberon", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Oberon.DBMDefList)), + Titan(new ModDimensionDef( + DimNames.TITAN, + "galaxyspace.SolarSystem.moons.titan.dimension.ChunkProviderTitan", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Titan.DBMDefList)), + Callisto(new ModDimensionDef( + DimNames.CALLISTO, + "galaxyspace.SolarSystem.moons.callisto.dimension.ChunkProviderCallisto", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Callisto.DBMDefList)), + Ganymede(new ModDimensionDef( + DimNames.GANYMEDE, + "galaxyspace.SolarSystem.moons.ganymede.dimension.ChunkProviderGanymede", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Ganymede.DBMDefList)), + Ceres(new ModDimensionDef( + DimNames.CERES, + "galaxyspace.SolarSystem.planets.ceres.dimension.ChunkProviderCeres", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Ceres.DBMDefList)), + Deimos(new ModDimensionDef( + DimNames.DEIMOS, + "galaxyspace.SolarSystem.moons.deimos.dimension.ChunkProviderDeimos", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Deimos.DBMDefList)), + Enceladus(new ModDimensionDef( + DimNames.ENCELADUS, + "galaxyspace.SolarSystem.moons.enceladus.dimension.ChunkProviderEnceladus", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Enceladus.DBMDefList)), + Io(new ModDimensionDef( + DimNames.IO, + "galaxyspace.SolarSystem.moons.io.dimension.ChunkProviderIo", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Io.DBMDefList)), + Europa(new ModDimensionDef( + DimNames.EUROPA, + "galaxyspace.SolarSystem.moons.europa.dimension.ChunkProviderEuropa", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Europa.DBMDefList)), + Phobos(new ModDimensionDef( + DimNames.PHOBOS, + "galaxyspace.SolarSystem.moons.phobos.dimension.ChunkProviderPhobos", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Phobos.DBMDefList)), + Venus(new ModDimensionDef( + DimNames.VENUS, + "galaxyspace.SolarSystem.planets.venus.dimension.ChunkProviderVenus", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Venus.DBMDefList)), + Mercury(new ModDimensionDef( + DimNames.MERCURY, + "galaxyspace.SolarSystem.planets.mercury.dimension.ChunkProviderMercury", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Mercury.DBMDefList)), + MakeMake(new ModDimensionDef( + DimNames.MAKEMAKE, + "galaxyspace.SolarSystem.planets.makemake.dimension.ChunkProviderMakemake", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.MakeMake.DBMDefList)), + Haumea(new ModDimensionDef( + DimNames.HAUMEA, + "galaxyspace.SolarSystem.planets.haumea.dimension.ChunkProviderHaumea", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Haumea.DBMDefList)), + CentauriAlpha(new ModDimensionDef( + DimNames.CENTAURIA, + "galaxyspace.ACentauriSystem.planets.aCentauriBb.dimension.ChunkProviderACentauri", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.CentauriAlpha.DBMDefList)), + VegaB(new ModDimensionDef( + DimNames.VEGAB, + "galaxyspace.VegaSystem.planets.vegaB.dimension.ChunkProviderVegaB", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.VegaB.DBMDefList)), + BarnardC(new ModDimensionDef( + DimNames.BARNARDC, + "galaxyspace.BarnardsSystem.planets.barnardaC.dimension.ChunkProviderBarnardaC", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.BarnardaC.DBMDefList)), + BarnardE(new ModDimensionDef( + DimNames.BARNARDE, + "galaxyspace.BarnardsSystem.planets.barnardaE.dimension.ChunkProviderBarnardaE", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.BarnardaE.DBMDefList)), + BarnardF(new ModDimensionDef( + DimNames.BARNARDF, + "galaxyspace.BarnardsSystem.planets.barnardaF.dimension.ChunkProviderBarnardaF", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.BarnardaF.DBMDefList)), + TcetiE(new ModDimensionDef( + DimNames.TCETIE, + "galaxyspace.TCetiSystem.planets.tcetiE.dimension.ChunkProviderTCetiE", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.TcetiE.DBMDefList)), + Miranda(new ModDimensionDef( + DimNames.MIRANDA, + "galaxyspace.SolarSystem.moons.miranda.dimension.ChunkProviderMiranda", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Miranda.DBMDefList)), + KuiperBelt(new ModDimensionDef( + DimNames.KUIPERBELT, + "galaxyspace.SolarSystem.planets.kuiperbelt.dimension.ChunkProviderKuiper", + Enums.DimensionType.Asteroid)), + + Neper(new ModDimensionDef( + DimNames.NEPER, + "de.katzenpapst.amunra.world.neper.NeperChunkProvider", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Neper.DBMDefList)), + Maahes(new ModDimensionDef( + DimNames.MAAHES, + "de.katzenpapst.amunra.world.maahes.MaahesChunkProvider", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Maahes.DBMDefList)), + Anubis(new ModDimensionDef( + DimNames.ANUBIS, + "de.katzenpapst.amunra.world.anubis.AnubisChunkProvider", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Anubis.DBMDefList)), + Horus(new ModDimensionDef( + DimNames.HORUS, + "de.katzenpapst.amunra.world.horus.HorusChunkProvider", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Horus.DBMDefList)), + Seth(new ModDimensionDef( + DimNames.SETH, + "de.katzenpapst.amunra.world.seth.SethChunkProvider", + Enums.DimensionType.Planet, + DimensionBlockMetaDefinitionList.Seth.DBMDefList)), + MehenBelt(new ModDimensionDef( + DimNames.MEHENBELT, + "de.katzenpapst.amunra.world.mehen.MehenChunkProvider", + Enums.DimensionType.Asteroid)); + + public static class DimNames { + + public static final String ENDASTEROIDS = "EndAsteroids"; + public static final String MOON = "Moon"; + public static final String MARS = "Mars"; + public static final String ASTEROIDS = "Asteroids"; + public static final String PLUTO = "Pluto"; + public static final String TRITON = "Triton"; + public static final String PROTEUS = "Proteus"; + public static final String OBERON = "Oberon"; + public static final String TITAN = "Titan"; + public static final String ROSS128B = "Ross128b"; + public static final String ROSS128BA = "Ross128ba"; + public static final String CALLISTO = "Callisto"; + public static final String GANYMEDE = "Ganymede"; + public static final String CERES = "Ceres"; + public static final String DEIMOS = "Deimos"; + public static final String ENCELADUS = "Enceladus"; + public static final String IO = "Io"; + public static final String EUROPA = "Europa"; + public static final String PHOBOS = "Phobos"; + public static final String VENUS = "Venus"; + public static final String MERCURY = "Mercury"; + public static final String MAKEMAKE = "MakeMake"; + public static final String HAUMEA = "Haumea"; + public static final String CENTAURIA = "CentauriA"; + public static final String VEGAB = "VegaB"; + public static final String BARNARDC = "BarnardC"; + public static final String BARNARDE = "BarnardE"; + public static final String BARNARDF = "BarnardF"; + public static final String TCETIE = "TcetiE"; + public static final String MIRANDA = "Miranda"; + public static final String KUIPERBELT = "Kuiperbelt"; + public static final String NEPER = "Neper"; + public static final String MAAHES = "Maahes"; + public static final String ANUBIS = "Anubis"; + public static final String HORUS = "Horus"; + public static final String SETH = "Seth"; + public static final String MEHENBELT = "MehenBelt"; + public static final String DEEPDARK = "Underdark"; + + } + + public final ModDimensionDef modDimensionDef; + + private DimensionDef(ModDimensionDef modDimDef) { + this.modDimensionDef = modDimDef; + } +} diff --git a/src/main/java/galacticgreg/api/enums/ModContainers.java b/src/main/java/galacticgreg/api/enums/ModContainers.java new file mode 100644 index 0000000000..7352e5a75c --- /dev/null +++ b/src/main/java/galacticgreg/api/enums/ModContainers.java @@ -0,0 +1,19 @@ +package galacticgreg.api.enums; + +import galacticgreg.api.ModContainer; +import gregtech.api.enums.Mods; + +public enum ModContainers { + + GalactiCraftCore(new ModContainer(Mods.GalacticraftCore.ID)), + GalacticraftMars(new ModContainer(Mods.GalacticraftMars.ID)), + GalaxySpace(new ModContainer(Mods.GalaxySpace.ID)), + AmunRa(new ModContainer("GalacticraftAmunRa")), + Vanilla(new ModContainer("Vanilla")); + + public final ModContainer modContainer; + + private ModContainers(ModContainer modContainer) { + this.modContainer = modContainer; + } +} diff --git a/src/main/java/galacticgreg/api/enums/properties/AsteroidPropertyBuilder.java b/src/main/java/galacticgreg/api/enums/properties/AsteroidPropertyBuilder.java new file mode 100644 index 0000000000..bf5fecc78a --- /dev/null +++ b/src/main/java/galacticgreg/api/enums/properties/AsteroidPropertyBuilder.java @@ -0,0 +1,105 @@ +package galacticgreg.api.enums.properties; + +public class AsteroidPropertyBuilder { + + public int probability; + public int sizeMin, sizeMax; + public int specialBlockChance; + public OreSpawnPropertyBuilder oreSpawn; + public LootPropertyBuilder loot; + + public static class OreSpawnPropertyBuilder { + + public int baseOreChance; + public boolean obeyHeighLimits; + public boolean oresOnlyInsideAsteroids; + public int primaryToRareOreOffset; + public int smallOreChance; + + public OreSpawnPropertyBuilder baseOreChance(int baseOreChance) { + this.baseOreChance = baseOreChance; + return this; + } + + public OreSpawnPropertyBuilder doesObeyingHeightLimits(boolean obeyHeighLimits) { + this.obeyHeighLimits = obeyHeighLimits; + return this; + } + + public OreSpawnPropertyBuilder AreOresOnlyInsideAsteroids(boolean oresOnlyInsideAsteroids) { + this.oresOnlyInsideAsteroids = oresOnlyInsideAsteroids; + return this; + } + + public OreSpawnPropertyBuilder primaryToRareOreOffset(int primaryToRareOreOffset) { + this.primaryToRareOreOffset = primaryToRareOreOffset; + return this; + } + + public OreSpawnPropertyBuilder smallOreChance(int smallOreChance) { + this.smallOreChance = smallOreChance; + return this; + } + + } + + public static class LootPropertyBuilder { + + public int lootChestChance; + public int lootChestItemCount; + public int lootChestTable; + public boolean randomizeLootItemCount; + + public LootPropertyBuilder lootChestChance(int lootChestChance) { + this.lootChestChance = lootChestChance; + return this; + } + + public LootPropertyBuilder lootChestItemCount(int lootChestItemCount) { + this.lootChestItemCount = lootChestItemCount; + return this; + } + + public LootPropertyBuilder lootChestTable(int lootChestTable) { + this.lootChestTable = lootChestTable; + return this; + } + + public LootPropertyBuilder isLootItemCountRandomized(boolean randomizeLootItemCount) { + this.randomizeLootItemCount = randomizeLootItemCount; + return this; + } + + } + + public AsteroidPropertyBuilder() { + oreSpawn = new OreSpawnPropertyBuilder(); + loot = new LootPropertyBuilder(); + } + + public AsteroidPropertyBuilder probability(int probability) { + this.probability = probability; + return this; + } + + public AsteroidPropertyBuilder sizeRange(int sizeMin, int sizeMax) { + this.sizeMin = sizeMin; + this.sizeMax = sizeMax; + return this; + } + + public AsteroidPropertyBuilder specialBlockChance(int specialBlockChance) { + this.specialBlockChance = specialBlockChance; + return this; + } + + public AsteroidPropertyBuilder oreSpawn(OreSpawnPropertyBuilder oreSpawnPropertyBuilder) { + this.oreSpawn = oreSpawnPropertyBuilder; + return this; + } + + public AsteroidPropertyBuilder loot(LootPropertyBuilder lootPropertyBuilder) { + this.loot = lootPropertyBuilder; + return this; + } +} diff --git a/src/main/java/galacticgreg/api/enums/properties/Asteroids.java b/src/main/java/galacticgreg/api/enums/properties/Asteroids.java new file mode 100644 index 0000000000..2916031aaf --- /dev/null +++ b/src/main/java/galacticgreg/api/enums/properties/Asteroids.java @@ -0,0 +1,78 @@ +package galacticgreg.api.enums.properties; + +import galacticgreg.api.enums.DimensionDef; +import galacticgreg.api.enums.ModContainers; + +public enum Asteroids { + + // spotless : off + EndAsteroids(ModContainers.Vanilla, DimensionDef.EndAsteroids, new AsteroidPropertyBuilder().probability(200) + .sizeRange(5, 15) + .specialBlockChance(5) + .oreSpawn( + new AsteroidPropertyBuilder.OreSpawnPropertyBuilder().baseOreChance(5) + .doesObeyingHeightLimits(false) + .AreOresOnlyInsideAsteroids(false) + .primaryToRareOreOffset(5) + .smallOreChance(10)) + .loot( + new AsteroidPropertyBuilder.LootPropertyBuilder().lootChestChance(1) + .lootChestItemCount(10) + .lootChestTable(3) + .isLootItemCountRandomized(true))), + KuiperBelt(ModContainers.GalaxySpace, DimensionDef.KuiperBelt, new AsteroidPropertyBuilder().probability(200) + .sizeRange(5, 15) + .specialBlockChance(5) + .oreSpawn( + new AsteroidPropertyBuilder.OreSpawnPropertyBuilder().baseOreChance(5) + .doesObeyingHeightLimits(false) + .AreOresOnlyInsideAsteroids(false) + .primaryToRareOreOffset(5) + .smallOreChance(10)) + .loot( + new AsteroidPropertyBuilder.LootPropertyBuilder().lootChestChance(1) + .lootChestItemCount(10) + .lootChestTable(3) + .isLootItemCountRandomized(true))), + MehenBelt(ModContainers.AmunRa, DimensionDef.MehenBelt, new AsteroidPropertyBuilder().probability(200) + .sizeRange(5, 15) + .specialBlockChance(5) + .oreSpawn( + new AsteroidPropertyBuilder.OreSpawnPropertyBuilder().baseOreChance(5) + .doesObeyingHeightLimits(false) + .AreOresOnlyInsideAsteroids(false) + .primaryToRareOreOffset(5) + .smallOreChance(10)) + .loot( + new AsteroidPropertyBuilder.LootPropertyBuilder().lootChestChance(1) + .lootChestItemCount(10) + .lootChestTable(3) + .isLootItemCountRandomized(true))), + Asteroids(ModContainers.GalacticraftMars, DimensionDef.Asteroids, new AsteroidPropertyBuilder().probability(200) + .sizeRange(5, 15) + .specialBlockChance(5) + .oreSpawn( + new AsteroidPropertyBuilder.OreSpawnPropertyBuilder().baseOreChance(5) + .doesObeyingHeightLimits(false) + .AreOresOnlyInsideAsteroids(false) + .primaryToRareOreOffset(5) + .smallOreChance(10)) + .loot( + new AsteroidPropertyBuilder.LootPropertyBuilder().lootChestChance(1) + .lootChestItemCount(10) + .lootChestTable(3) + .isLootItemCountRandomized(true))),; + + // spotless : on + + public ModContainers modContainers; + public DimensionDef dimensionDef; + public AsteroidPropertyBuilder asteroidPropertyBuilder; + + private Asteroids(ModContainers modContainers, DimensionDef dimensionDef, + AsteroidPropertyBuilder asteroidPropertyBuilder) { + this.modContainers = modContainers; + this.dimensionDef = dimensionDef; + this.asteroidPropertyBuilder = asteroidPropertyBuilder; + } +} diff --git a/src/main/java/galacticgreg/auxiliary/ConfigManager.java b/src/main/java/galacticgreg/auxiliary/ConfigManager.java new file mode 100644 index 0000000000..b460757609 --- /dev/null +++ b/src/main/java/galacticgreg/auxiliary/ConfigManager.java @@ -0,0 +1,79 @@ +package galacticgreg.auxiliary; + +import java.io.File; + +import net.minecraftforge.common.config.Configuration; + +import galacticgreg.GalacticGreg; + +/** + * config class to read/setup config files and folders + * + * @author Namikon + */ +public abstract class ConfigManager { + + private File _mainconfigDir = null; + private File _blocksconfigDir = null; + private String _mModCollection = ""; + private String _mModID = ""; + + protected Configuration _mainConfig = null; + + protected File _mConfigBaseDirectory; + public boolean DoDebugMessages = false; + + protected abstract void PreInit(); + + protected abstract void Init(); + + protected abstract void PostInit(); + + public ConfigManager(File pConfigBaseDirectory, String pModCollectionDirectory, String pModID) { + _mModCollection = pModCollectionDirectory; + _mModID = pModID; + _mConfigBaseDirectory = pConfigBaseDirectory; + } + + /** + * Load/init the config file + * + * @return true/false if the load/init was successful or not + */ + public boolean LoadConfig() { + try { + InitConfigDirs(); + if (_mainConfig == null) return false; + + PreInit(); + _mainConfig.load(); + Init(); + _mainConfig.save(); + PostInit(); + + return true; + } catch (Exception e) { + GalacticGreg.Logger.error("Unable to init config file"); + e.printStackTrace(); + return false; + } + } + + /** + * Search for required config-directory / file and create them if they can't be found + */ + private void InitConfigDirs() { + GalacticGreg.Logger.debug("Checking/creating config folders"); + + _mainconfigDir = new File(String.format("%s%s%s", _mConfigBaseDirectory, File.separator, _mModCollection)); + + if (!_mainconfigDir.exists()) { + GalacticGreg.Logger.info("Config folder not found. Creating..."); + _mainconfigDir.mkdir(); + } + + File tRealConfigFile = new File(String.format("%s%s%s%s", _mainconfigDir, File.separator, _mModID, ".cfg")); + + _mainConfig = new Configuration(tRealConfigFile); + } +} diff --git a/src/main/java/galacticgreg/auxiliary/GTOreGroup.java b/src/main/java/galacticgreg/auxiliary/GTOreGroup.java new file mode 100644 index 0000000000..bf5fb39c07 --- /dev/null +++ b/src/main/java/galacticgreg/auxiliary/GTOreGroup.java @@ -0,0 +1,19 @@ +package galacticgreg.auxiliary; + +/** + * Just a simple container to wrap 4 GT Ore-Meta ids into one var + */ +public class GTOreGroup { + + public short PrimaryMeta; + public short SecondaryMeta; + public short SporadicBetweenMeta; + public short SporadicAroundMeta; + + public GTOreGroup(short pPrimaryMeta, short pSecondaryMeta, short pSporadicBetweenMeta, short pSporadicAroundMeta) { + PrimaryMeta = pPrimaryMeta; + SecondaryMeta = pSecondaryMeta; + SporadicBetweenMeta = pSporadicBetweenMeta; + SporadicAroundMeta = pSporadicAroundMeta; + } +} diff --git a/src/main/java/galacticgreg/auxiliary/GalacticGregConfig.java b/src/main/java/galacticgreg/auxiliary/GalacticGregConfig.java new file mode 100644 index 0000000000..39980925a1 --- /dev/null +++ b/src/main/java/galacticgreg/auxiliary/GalacticGregConfig.java @@ -0,0 +1,141 @@ +package galacticgreg.auxiliary; + +import java.io.File; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; + +import cpw.mods.fml.common.registry.GameRegistry; +import galacticgreg.GalacticGreg; +import galacticgreg.api.BlockMetaComb; + +public class GalacticGregConfig extends ConfigManager { + + public GalacticGregConfig(File pConfigBaseDirectory, String pModCollectionDirectory, String pModID) { + super(pConfigBaseDirectory, pModCollectionDirectory, pModID); + + } + + public boolean ProfileOreGen; + public boolean ReportOreGenFailures; + public boolean PrintDebugMessagesToFMLLog; + public boolean PrintTraceMessagesToFMLLog; + + public boolean LootChestsEnabled; + public boolean EnableAEExportCommand; + public boolean SchematicsEnabled; + public String LootChestItemOverride; + public boolean QuietMode; + + public BlockMetaComb CustomLootChest; + + @Override + protected void PreInit() { + ProfileOreGen = false; + ReportOreGenFailures = false; + PrintDebugMessagesToFMLLog = false; + PrintTraceMessagesToFMLLog = false; + + LootChestsEnabled = true; + + // Default false, as it is WiP + EnableAEExportCommand = false; + SchematicsEnabled = false; + + LootChestItemOverride = ""; + QuietMode = false; + } + + @Override + protected void Init() { + ProfileOreGen = _mainConfig.getBoolean( + "ProfileOreGen", + "Debug", + ProfileOreGen, + "Enable to profile oregen and register the ingame command ggregprofiler"); + ReportOreGenFailures = _mainConfig.getBoolean( + "ReportOreGenFailures", + "Debug", + ReportOreGenFailures, + "Report if a ore tileentity could not be placed"); + PrintDebugMessagesToFMLLog = _mainConfig.getBoolean( + "PrintDebugMessagesToFMLLog", + "Debug", + PrintDebugMessagesToFMLLog, + "Enable debug output, not recommended for servers"); + PrintTraceMessagesToFMLLog = _mainConfig.getBoolean( + "PrintTraceMessagesToFMLLog", + "Debug", + PrintTraceMessagesToFMLLog, + "Enable trace output. Warning: This will produce gazillions of log entries"); + QuietMode = _mainConfig.getBoolean( + "QuietMode", + "Debug", + QuietMode, + "In quiet-mode only errors, warnings and fatals will be printed to the logfile/console"); + + LootChestsEnabled = _mainConfig.getBoolean( + "LootChestsEnabled", + "Extras", + LootChestsEnabled, + "Enables/disables the dungeon-chest generator system for asteroids. New config values will be generated if set to true"); + EnableAEExportCommand = _mainConfig.getBoolean( + "EnableAEExportCommand", + "Extras", + EnableAEExportCommand, + "If set to true, you can export any structure stored on a AE2 spatial storage disk. (Can't be spawned yet, WiP). Requires SchematicsEnabled to be true"); + SchematicsEnabled = _mainConfig.getBoolean( + "SchematicsEnabled", + "Extras", + SchematicsEnabled, + "Enable the experimental Schematics-handler to spawn exported schematics in dimensions. This is WiP, use at own risk"); + LootChestItemOverride = _mainConfig.getString( + "CustomLootChest", + "Extras", + LootChestItemOverride, + "Define the chest you wish to use as LootChest. use the :: format or leave empty for the default Minecraft Chest"); + + GalacticGreg.Logger.setDebugOutput(PrintDebugMessagesToFMLLog); + GalacticGreg.Logger.setTraceOutput(PrintTraceMessagesToFMLLog); + GalacticGreg.Logger.setQuietMode(QuietMode); + } + + @Override + protected void PostInit() { + + } + + public boolean serverPostInit() { + CustomLootChest = new BlockMetaComb(Blocks.chest); + try { + if (LootChestItemOverride != "") { + String[] args = LootChestItemOverride.split(":"); + String tMod; + String tName; + int tMeta; + + if (args.length >= 2) { + tMod = args[0]; + tName = args[1]; + if (args.length == 3) tMeta = Integer.parseInt(args[2]); + else tMeta = 0; + + Block tBlock = GameRegistry.findBlock(tMod, tName); + if (tBlock != null) { + GalacticGreg.Logger + .debug("Found valid ChestOverride: %s. LootChest replaced", LootChestItemOverride); + CustomLootChest = new BlockMetaComb(tBlock, tMeta); + } + } + } + + return true; + } catch (Exception e) { + GalacticGreg.Logger.error( + "Unable to find custom chest override %s. Make sure item exists. Defaulting to Minecraft:chest", + LootChestItemOverride); + e.printStackTrace(); + return false; + } + } +} diff --git a/src/main/java/galacticgreg/auxiliary/LogHelper.java b/src/main/java/galacticgreg/auxiliary/LogHelper.java new file mode 100644 index 0000000000..d4a3bb5dfc --- /dev/null +++ b/src/main/java/galacticgreg/auxiliary/LogHelper.java @@ -0,0 +1,267 @@ +package galacticgreg.auxiliary; + +import java.util.ArrayList; + +import org.apache.logging.log4j.Level; + +import cpw.mods.fml.common.FMLLog; + +/** + * Generic LogHelper to print stuff to the console + * + * @author Namikon + */ +public final class LogHelper { + + private ArrayList _mReportedCategories = new ArrayList<>(); + private boolean doDebugLogs = false; + private boolean doTraceLogs = false; + private boolean quietMode = false; + private String _mModID = ""; + + private final static String STR_NOCAT = "ihaznocathegory"; + private final static String STR_TOKEN_ONETIMEMESSAGE = " OTM"; + + public LogHelper(String pModID) { + _mModID = pModID; + } + + /** + * If true, only error/fatal/warn messages will be printed + * + * @param pEnabled + */ + public void setQuietMode(boolean pEnabled) { + quietMode = pEnabled; + } + + /** + * Enable/Disable debug logs + * + * @param pEnabled + */ + public void setDebugOutput(boolean pEnabled) { + doDebugLogs = pEnabled; + } + + /** + * Enable/Disable trace logs + * + * @param pEnabled + */ + public void setTraceOutput(boolean pEnabled) { + doTraceLogs = pEnabled; + } + + /** + * Resets all One-Time categories, so they will be displayed again + */ + public void ResetCategories() { + _mReportedCategories = new ArrayList<>(); + } + + /** + * Print a log-message with built-in String.format(x) support. This message will only appear once. usefull for + * error/warnings within loops + * + * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will + * never be displayed + * @param pLogLevel The logLevel for this message + * @param pMessage The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void log(String pCategory, Level pLogLevel, String pMessage, Object... args) { + if (pLogLevel == Level.DEBUG && !doDebugLogs) return; + + if (pLogLevel == Level.TRACE && !doTraceLogs) return; + + if (pLogLevel != Level.ERROR && pLogLevel != Level.FATAL && pLogLevel != Level.WARN) if (quietMode) return; + + String tt = ""; + if (!pCategory.equals(STR_NOCAT)) { + tt = STR_TOKEN_ONETIMEMESSAGE; + if (_mReportedCategories.contains(pCategory)) return; + else { + _mReportedCategories.add(pCategory); + } + } + + FMLLog.log(_mModID.toUpperCase() + tt, pLogLevel, pMessage, args); + } + + /** + * Prints a one-time message with Category ALL + * + * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will + * never be displayed + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void ot_all(String pCategory, String object, Object... args) { + log(pCategory, Level.ALL, object, args); + } + + /** + * Prints a one-time message with Category DEBUG + * + * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will + * never be displayed + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void ot_debug(String pCategory, String object, Object... args) { + log(pCategory, Level.DEBUG, object, args); + } + + /** + * Prints a one-time message with Category ERROR + * + * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will + * never be displayed + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void ot_error(String pCategory, String object, Object... args) { + log(pCategory, Level.ERROR, object, args); + } + + /** + * Prints a one-time message with Category FATAL + * + * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will + * never be displayed + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void ot_fatal(String pCategory, String object, Object... args) { + log(pCategory, Level.FATAL, object, args); + } + + /** + * Prints a one-time message with Category INFO + * + * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will + * never be displayed + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void ot_info(String pCategory, String object, Object... args) { + log(pCategory, Level.INFO, object, args); + } + + /** + * Prints a one-time message with Category OFF + * + * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will + * never be displayed + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void ot_off(String pCategory, String object, Object... args) { + log(pCategory, Level.OFF, object, args); + } + + /** + * Prints a one-time message with Category TRACE + * + * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will + * never be displayed + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void ot_trace(String pCategory, String object, Object... args) { + log(pCategory, Level.TRACE, object, args); + } + + /** + * Prints a one-time message with Category WARN + * + * @param pCategory The category for this message. Used to identify the function, use an easy to memorize name. Will + * never be displayed + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void ot_warn(String pCategory, String object, Object... args) { + log(pCategory, Level.WARN, object, args); + } + + /** + * Prints a message with Category ALL + * + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void all(String object, Object... args) { + log(STR_NOCAT, Level.ALL, object, args); + } + + /** + * Prints a message with Category DEBUG + * + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void debug(String object, Object... args) { + log(STR_NOCAT, Level.DEBUG, object, args); + } + + /** + * Prints a message with Category ERROR + * + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void error(String object, Object... args) { + log(STR_NOCAT, Level.ERROR, object, args); + } + + /** + * Prints a message with Category FATAL + * + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void fatal(String object, Object... args) { + log(STR_NOCAT, Level.FATAL, object, args); + } + + /** + * Prints a message with Category INFO + * + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void info(String object, Object... args) { + log(STR_NOCAT, Level.INFO, object, args); + } + + /** + * Prints a message with Category OFF + * + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void off(String object, Object... args) { + log(STR_NOCAT, Level.OFF, object, args); + } + + /** + * Prints a message with Category TRACE + * + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void trace(String object, Object... args) { + log(STR_NOCAT, Level.TRACE, object, args); + } + + /** + * Prints a message with Category WARN + * + * @param object The log message + * @param args Optional args, if you've used format-specifier in pMessage + */ + public void warn(String object, Object... args) { + log(STR_NOCAT, Level.WARN, object, args); + } +} diff --git a/src/main/java/galacticgreg/auxiliary/PlayerChatHelper.java b/src/main/java/galacticgreg/auxiliary/PlayerChatHelper.java new file mode 100644 index 0000000000..faf73713a9 --- /dev/null +++ b/src/main/java/galacticgreg/auxiliary/PlayerChatHelper.java @@ -0,0 +1,106 @@ +package galacticgreg.auxiliary; + +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; + +/** + * Method to easily send chat-messages to EntityPlayer + * + * @author Namikon + * + */ +public class PlayerChatHelper { + + /** + * Meant for notifications that are being send to an admin/op Color will be GREEN + * + * @param pPlayer + * @param pMessage + */ + public static void SendInfo(ICommandSender pCommandSender, String pMessage) { + pCommandSender.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + pMessage)); + } + + /** + * Meant for notifications that are being send to an admin/op Color will be RED + * + * @param pPlayer + * @param pMessage + */ + public static void SendError(ICommandSender pCommandSender, String pMessage) { + pCommandSender.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + pMessage)); + } + + /** + * Meant for notifications that are being send to an admin/op Color will be YELLOW + * + * @param pPlayer + * @param pMessage + */ + public static void SendWarn(ICommandSender pCommandSender, String pMessage) { + pCommandSender.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + pMessage)); + } + + /** + * Meant for notifications that are being send to an admin/op Color will be GREEN + * + * @param pPlayer + * @param pMessage + */ + public static void SendInfo(EntityPlayer pPlayer, String pMessage) { + pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.GREEN + pMessage)); + } + + /** + * Meant for notifications that are being send to an admin/op Color will be RED + * + * @param pPlayer + * @param pMessage + */ + public static void SendError(EntityPlayer pPlayer, String pMessage) { + pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.RED + pMessage)); + } + + /** + * Meant for notifications that are being send to an admin/op Color will be YELLOW + * + * @param pPlayer + * @param pMessage + */ + public static void SendWarn(EntityPlayer pPlayer, String pMessage) { + pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.YELLOW + pMessage)); + } + + /** + * Meant for ingame notifications that are being send to a player, not an admin/op Color will be DARK_GREEN + * + * @param pPlayer + * @param pMessage + */ + public static void SendNotifyPositive(EntityPlayer pPlayer, String pMessage) { + pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.DARK_GREEN + pMessage)); + } + + /** + * Meant for ingame notifications that are being send to a player, not an admin/op Color will be AQUA + * + * @param pPlayer + * @param pMessage + */ + public static void SendNotifyNormal(EntityPlayer pPlayer, String pMessage) { + pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.AQUA + pMessage)); + } + + /** + * Meant for ingame notifications that are being send to a player, not an admin/op Color will be DARK_PURPLE + * + * @param pPlayer + * @param pMessage + */ + public static void SendNotifyWarning(EntityPlayer pPlayer, String pMessage) { + pPlayer.addChatMessage(new ChatComponentText(EnumChatFormatting.DARK_PURPLE + pMessage)); + } + +} diff --git a/src/main/java/galacticgreg/auxiliary/ProfilingStorage.java b/src/main/java/galacticgreg/auxiliary/ProfilingStorage.java new file mode 100644 index 0000000000..b429b7f76a --- /dev/null +++ b/src/main/java/galacticgreg/auxiliary/ProfilingStorage.java @@ -0,0 +1,74 @@ +package galacticgreg.auxiliary; + +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import galacticgreg.api.ModDimensionDef; + +/** + * A simple FIFO-storage for Long-values Will keep 50 values for each dimension in memory Doesn't need to be changed + * when adding new planets/mods + */ +public class ProfilingStorage { + + private Map> mProfilingMap; + + public ProfilingStorage() { + mProfilingMap = new HashMap<>(); + } + + /** + * Add a new time to the list of pDimension. Will be ignored it tTotalTime == 0 + * + * @param pDimension + * @param pTotalTime + */ + public void AddTimeToList(ModDimensionDef pDimension, long pTotalTime) { + try { + if (pTotalTime == 0) return; + + if (!mProfilingMap.containsKey(pDimension.getDimIdentifier())) + mProfilingMap.put(pDimension.getDimIdentifier(), new LinkedList<>()); + + LinkedList ll = (LinkedList) mProfilingMap.get(pDimension.getDimIdentifier()); + + ll.addLast(pTotalTime); + + while (ll.size() > 50) ll.removeFirst(); + } catch (Exception e) { + // Just do nothing. profiling is for debug purposes only anyways... + } + } + + /** + * Return the average time required to execute the oregen in Dimension pDimension + * + * @param pDimension The DimensionType in question + * @return + */ + public long GetAverageTime(ModDimensionDef pDimension) { + try { + if (!mProfilingMap.containsKey(pDimension.getDimIdentifier())) return -1; + + int tTotalVal = 0; + long tAverage = 0; + long tReturnVal = 0; + + LinkedList ll = (LinkedList) mProfilingMap.get(pDimension.getDimIdentifier()); + + if (ll != null) { + for (Long aLong : ll) { + tAverage += aLong; + tTotalVal++; + } + + tReturnVal = (long) ((float) (tAverage / tTotalVal)); + } + return tReturnVal; + } catch (Exception e) { + return -1; + } + } +} diff --git a/src/main/java/galacticgreg/command/AEStorageCommand.java b/src/main/java/galacticgreg/command/AEStorageCommand.java new file mode 100644 index 0000000000..7aff0ff107 --- /dev/null +++ b/src/main/java/galacticgreg/command/AEStorageCommand.java @@ -0,0 +1,180 @@ +package galacticgreg.command; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import appeng.api.util.WorldCoord; +import appeng.items.storage.ItemSpatialStorageCell; +import galacticgreg.GalacticGreg; +import galacticgreg.auxiliary.PlayerChatHelper; +import galacticgreg.schematics.SpaceSchematic; +import galacticgreg.schematics.SpaceSchematicFactory; + +/** + * This command allows to export any structure that has been stored inside a spatial storage cell to a xml file that can + * later be enabled for spawning in dimensions. + */ +public class AEStorageCommand implements ICommand { + + private List aliases; + + public AEStorageCommand() { + this.aliases = new ArrayList<>(); + this.aliases.add("exportae"); + } + + @Override + public String getCommandName() { + return "exportae"; + } + + @Override + public String getCommandUsage(ICommandSender pCommandSender) { + return "exportae "; + } + + @Override + public List getCommandAliases() { + return this.aliases; + } + + @Override + public void processCommand(ICommandSender pCommandSender, String[] pArgs) { + try { + if (pCommandSender instanceof EntityPlayer) { + if (pArgs.length < 1) return; + + String tName = pArgs[0]; + + EntityPlayer tEP = (EntityPlayer) pCommandSender; + // Check if item in hand is a spatial storage cell + ItemStack tIS = tEP.inventory.getCurrentItem(); + if (tIS.getItem() instanceof ItemSpatialStorageCell) { + ItemSpatialStorageCell tCell = (ItemSpatialStorageCell) tIS.getItem(); + World tSpatialWorld = tCell.getWorld(tIS); + WorldCoord storedSize = tCell.getStoredSize(tIS); + + // Check if SSC is filled + if (storedSize.x == 0 || storedSize.y == 0 || storedSize.z == 0) { + PlayerChatHelper.SendError(pCommandSender, "Error: This spatial storage is empty"); + return; + } + + // Export structure + GalacticGreg.Logger.info( + "Creating Structure from Spatial AE drive. Dimensions: X [%d] Y [%d] Z [%d]", + storedSize.x, + storedSize.y, + storedSize.z); + SpaceSchematic tSchematic = SpaceSchematicFactory.createSchematic(tName); + boolean tTEWarningSend = false; + + // Loop all 3 dimensions + for (int lX = 1; lX <= storedSize.x; lX++) { + for (int lY = 65; lY < 65 + storedSize.y; lY++) { + for (int lZ = 1; lZ <= storedSize.z; lZ++) { + + // Get the block + Block b = tSpatialWorld.getBlock(lX, lY, lZ); + // Get the meta + int bm = tSpatialWorld.getBlockMetadata(lX, lY, lZ); + + // Search for the blocks name + String tBlockName = Block.blockRegistry.getNameForObject(b); + + // Check if block is a tileentity + TileEntity bTE = tSpatialWorld.getTileEntity(lX, lY, lZ); + + String tMsg = String.format("[X-%d][Y-%d][Z-%d] ", lX, lY, lZ); + String nbtComp = ""; + // If block could be found... + if (b != null) { + tMsg += tBlockName; + // If block is a TileEntity + if (bTE != null) { + // Print a warning on the console + tMsg += " TE"; + GalacticGreg.Logger.warn( + "Warning: Found TileEntity at X[%d] Y[%d] Z[%d]. NBT States are not exported!", + lX, + lY, + lZ); + if (!tTEWarningSend) { + // Send a warning ingame, once per export command + tTEWarningSend = true; + PlayerChatHelper + .SendWarn(pCommandSender, "TileEntity states are not exported!"); + } + + } + + // If the block is not air, add it to the structure + if (b != Blocks.air) tSchematic + .addStructureInfo(SpaceSchematicFactory.createStructureInfo(lX, lY, lZ, b, bm)); + } + } + } + } + + // Save structure to disk + if (!GalacticGreg.SchematicHandler.SaveSpaceStructure(tSchematic)) { + // Something went wrong... + PlayerChatHelper.SendError(pCommandSender, "Something went wrong. Structure not saved"); + } else { + // All good, xml exported. Notify player that he needs to edit the file + PlayerChatHelper.SendInfo( + pCommandSender, + "Structure has been exported to " + tSchematic.getName() + + ".xml. It contains " + + tSchematic.coordInfo() + .size() + + " Blocks"); + PlayerChatHelper + .SendInfo(pCommandSender, "You have to edit the file before a reload will accept it!"); + } + } else PlayerChatHelper + .SendError(pCommandSender, "Error: Item in your hand is not a spatial storage drive!"); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender pCommandSender) { + // Command is only enabled for actual players and only if they are OP-ed + if (pCommandSender instanceof EntityPlayerMP) { + EntityPlayerMP tEP = (EntityPlayerMP) pCommandSender; + return MinecraftServer.getServer() + .getConfigurationManager() + .func_152596_g(tEP.getGameProfile()); + } else return false; + } + + @Override + public int compareTo(Object o) { + return 0; + } + + @SuppressWarnings("rawtypes") + @Override + public List addTabCompletionOptions(ICommandSender p_71516_1_, String[] p_71516_2_) { + return null; + } + + @Override + public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { + return false; + } +} diff --git a/src/main/java/galacticgreg/command/ProfilingCommand.java b/src/main/java/galacticgreg/command/ProfilingCommand.java new file mode 100644 index 0000000000..91805265dc --- /dev/null +++ b/src/main/java/galacticgreg/command/ProfilingCommand.java @@ -0,0 +1,99 @@ +package galacticgreg.command; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.command.ICommand; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ChatComponentText; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.Side; +import galacticgreg.GalacticGreg; +import galacticgreg.api.ModContainer; +import galacticgreg.api.ModDimensionDef; +import galacticgreg.registry.GalacticGregRegistry; + +/** + * Ingame command to get the average oregen time(s) for the active dimensions Doesn't need to be changed when adding new + * planets/mods + * + */ +public class ProfilingCommand implements ICommand { + + private List aliases; + + public ProfilingCommand() { + this.aliases = new ArrayList<>(); + this.aliases.add("ggregprofiler"); + } + + @Override + public String getCommandName() { + return "ggregprofiler"; + } + + @Override + public String getCommandUsage(ICommandSender pCommandSender) { + return "ggregprofiler"; + } + + @Override + public List getCommandAliases() { + return this.aliases; + } + + @Override + public void processCommand(ICommandSender pCommandSender, String[] pArgs) { + pCommandSender.addChatMessage(new ChatComponentText("Average OreGen times:")); + + for (ModContainer mc : GalacticGregRegistry.getModContainers()) { + String tModName = mc.getModName(); + for (ModDimensionDef mdd : mc.getDimensionList()) { + long tTime = GalacticGreg.Profiler.GetAverageTime(mdd); + String tInfo; + if (tTime == -1) tInfo = "N/A"; + else tInfo = String.format("%d ms", tTime); + pCommandSender.addChatMessage( + new ChatComponentText( + String.format("%s (%s): %s", mdd.getDimIdentifier(), mdd.getDimensionName(), tInfo))); + } + } + } + + @Override + public boolean canCommandSenderUseCommand(ICommandSender pCommandSender) { + if (FMLCommonHandler.instance() + .getEffectiveSide() == Side.SERVER + && !FMLCommonHandler.instance() + .getMinecraftServerInstance() + .isDedicatedServer()) + return true; + + if (pCommandSender instanceof EntityPlayerMP) { + EntityPlayerMP tEP = (EntityPlayerMP) pCommandSender; + return MinecraftServer.getServer() + .getConfigurationManager() + .func_152596_g(tEP.getGameProfile()); + } + return false; + } + + @Override + public int compareTo(Object o) { + return 0; + } + + @SuppressWarnings("rawtypes") + @Override + public List addTabCompletionOptions(ICommandSender p_71516_1_, String[] p_71516_2_) { + return null; + } + + @Override + public boolean isUsernameIndex(String[] p_82358_1_, int p_82358_2_) { + return false; + } +} diff --git a/src/main/java/galacticgreg/dynconfig/DynamicDimensionConfig.java b/src/main/java/galacticgreg/dynconfig/DynamicDimensionConfig.java new file mode 100644 index 0000000000..87dad97f35 --- /dev/null +++ b/src/main/java/galacticgreg/dynconfig/DynamicDimensionConfig.java @@ -0,0 +1,160 @@ +package galacticgreg.dynconfig; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraftforge.common.ChestGenHooks; + +import galacticgreg.GalacticGreg; +import galacticgreg.api.Enums.DimensionType; +import galacticgreg.api.ModContainer; +import galacticgreg.api.ModDimensionDef; +import galacticgreg.api.enums.properties.Asteroids; +import galacticgreg.registry.GalacticGregRegistry; + +public class DynamicDimensionConfig { + + public static class AsteroidConfig { + + public int MinSize; + public int MaxSize; + public int Probability; + public int OreChance; + public int OrePrimaryOffset; + public int SpecialBlockChance; + public int SmallOreChance; + public boolean ObeyHeightLimits; + public boolean HiddenOres; + public int LootChestChance; + public int LootChestTable; + public int NumLootItems; + public boolean RandomizeNumLootItems; + } + + private static Map _mDynamicAsteroidMap = new HashMap<>(); + + public static AsteroidConfig getAsteroidConfig(ModDimensionDef pDimDef) { + return _mDynamicAsteroidMap.getOrDefault(pDimDef.getDimIdentifier(), null); + } + + public static boolean InitDynamicConfig() { + try { + for (ModContainer mc : GalacticGregRegistry.getModContainers()) { + if (!mc.getEnabled()) continue; + + for (ModDimensionDef mdd : mc.getDimensionList()) { + DimensionType dt = mdd.getDimensionType(); + if (dt != DimensionType.Asteroid) { + continue; + } + String tDimIdentifier = mdd.getDimIdentifier(); + if (_mDynamicAsteroidMap.containsKey(tDimIdentifier)) { + GalacticGreg.Logger.warn( + "Found 2 Dimensions with the same Identifier! This should never happen, and you should report this to me. Identifier in question: %s", + tDimIdentifier); + continue; + } + + Asteroids AsteroidProperties = null; + for (Asteroids asteroidsConfig : Asteroids.values()) { + if (!asteroidsConfig.modContainers.modContainer.getModName() + .equals(mc.getModName())) { + continue; + } + if (!asteroidsConfig.dimensionDef.modDimensionDef.getDimensionName() + .equals(mdd.getDimensionName())) { + continue; + } + AsteroidProperties = asteroidsConfig; + break; + } + if (AsteroidProperties == null) { + GalacticGreg.Logger.error( + "Something went wrong! no properties are existing for Asteroid dim: " + + mdd.getDimensionName() + + " from mod container " + + mc.getModName()); + continue; + } + + AsteroidConfig aConf = new AsteroidConfig(); + + aConf.MinSize = AsteroidProperties.asteroidPropertyBuilder.sizeMin; + aConf.MaxSize = AsteroidProperties.asteroidPropertyBuilder.sizeMax; + aConf.Probability = AsteroidProperties.asteroidPropertyBuilder.probability; + aConf.SpecialBlockChance = AsteroidProperties.asteroidPropertyBuilder.specialBlockChance; + + aConf.OreChance = AsteroidProperties.asteroidPropertyBuilder.oreSpawn.baseOreChance; + aConf.OrePrimaryOffset = AsteroidProperties.asteroidPropertyBuilder.oreSpawn.primaryToRareOreOffset; + aConf.SmallOreChance = AsteroidProperties.asteroidPropertyBuilder.oreSpawn.smallOreChance; + aConf.ObeyHeightLimits = AsteroidProperties.asteroidPropertyBuilder.oreSpawn.obeyHeighLimits; + aConf.HiddenOres = AsteroidProperties.asteroidPropertyBuilder.oreSpawn.oresOnlyInsideAsteroids; + + if (GalacticGreg.GalacticConfig.LootChestsEnabled) { + aConf.LootChestChance = AsteroidProperties.asteroidPropertyBuilder.loot.lootChestChance; + aConf.LootChestTable = AsteroidProperties.asteroidPropertyBuilder.loot.lootChestTable; + aConf.NumLootItems = AsteroidProperties.asteroidPropertyBuilder.loot.lootChestItemCount; + aConf.RandomizeNumLootItems = AsteroidProperties.asteroidPropertyBuilder.loot.randomizeLootItemCount; + } else { + aConf.LootChestChance = 0; + aConf.LootChestTable = 1; + aConf.NumLootItems = 0; + aConf.RandomizeNumLootItems = false; + } + + if (aConf.MaxSize > 50) GalacticGreg.Logger.warn( + "Asteroid-MaxSize for dimID [%s] is larger than 50. This might cause memory-problems, as the maximum asteroid size will be larger than 50*50*50 blocks", + tDimIdentifier); + _mDynamicAsteroidMap.put(tDimIdentifier, aConf); + + } + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * Convert numbers to actual loot-table entries + * + * @param pACfg + * @return + */ + public static String getLootChestTable(AsteroidConfig pACfg) { + String tLootTable = ChestGenHooks.MINESHAFT_CORRIDOR; + + switch (pACfg.LootChestTable) { + case 2: + tLootTable = ChestGenHooks.PYRAMID_DESERT_CHEST; + break; + case 3: + tLootTable = ChestGenHooks.PYRAMID_JUNGLE_CHEST; + break; + case 4: + tLootTable = ChestGenHooks.PYRAMID_JUNGLE_DISPENSER; + break; + case 5: + tLootTable = ChestGenHooks.STRONGHOLD_CORRIDOR; + break; + case 6: + tLootTable = ChestGenHooks.STRONGHOLD_LIBRARY; + break; + case 7: + tLootTable = ChestGenHooks.STRONGHOLD_CROSSING; + break; + case 8: + tLootTable = ChestGenHooks.VILLAGE_BLACKSMITH; + break; + case 9: + tLootTable = ChestGenHooks.BONUS_CHEST; + break; + case 10: + tLootTable = ChestGenHooks.DUNGEON_CHEST; + break; + } + + return tLootTable; + } +} diff --git a/src/main/java/galacticgreg/generators/GenEllipsoid.java b/src/main/java/galacticgreg/generators/GenEllipsoid.java new file mode 100644 index 0000000000..432260a696 --- /dev/null +++ b/src/main/java/galacticgreg/generators/GenEllipsoid.java @@ -0,0 +1,126 @@ +package galacticgreg.generators; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.util.MathHelper; +import net.minecraft.util.Vec3; + +import galacticgreg.api.Enums.SpaceObjectType; +import galacticgreg.api.Enums.TargetBlockPosition; +import galacticgreg.api.ISpaceObjectGenerator; +import galacticgreg.api.StructureInformation; + +/** + * Simple ellipsoid-generator. Based on the formular created by Chrysator. Thanks for the help! + * + * Generates a simple ellipsoid with dynamic rotation, random size-values, random noise for the surface, etc. Can + * probably be tweaked even more, but works for now... + */ +public class GenEllipsoid implements ISpaceObjectGenerator { + + private Vec3 _mEllipsoidCenter; + private Random _mRandom; + private List _mStructure; + + private double _mCoreDensity = 0.7D; + private double _mSineFactor = 0.05D; + private float _mRandomInfluence; + private float _mRandomAngleX; + private float _mRandomAngleY; + private float _mRandomAngleZ; + + private int _mSizeA; + private int _mSizeB; + private int _mSizeC; + + public GenEllipsoid() { + reset(); + } + + @Override + public SpaceObjectType getType() { + return SpaceObjectType.OreAsteroid; + } + + @Override + public void randomize(int pSizeMin, int pSizeMax) { + _mRandom = new Random(System.currentTimeMillis()); + _mRandomAngleX = (float) (_mRandom.nextFloat() * Math.PI); + _mRandomAngleY = (float) (_mRandom.nextFloat() * Math.PI); + _mRandomAngleZ = (float) (_mRandom.nextFloat() * Math.PI); + + _mRandomInfluence = _mRandom.nextFloat(); + + _mSizeA = pSizeMin + _mRandom.nextInt(pSizeMax - pSizeMin) + 10; + _mSizeB = pSizeMin + _mRandom.nextInt(pSizeMax - pSizeMin) + 10; + _mSizeC = pSizeMin + _mRandom.nextInt(pSizeMax - pSizeMin) + 10; + } + + @Override + public void setCenterPoint(int pX, int pY, int pZ) { + _mEllipsoidCenter = Vec3.createVectorHelper(pX, pY, pZ); + } + + @Override + public void setCenterPoint(Vec3 pCenter) { + _mEllipsoidCenter = pCenter; + } + + @Override + public Vec3 getCenterPoint() { + return _mEllipsoidCenter; + } + + @Override + public List getStructure() { + return _mStructure; + } + + @Override + public void calculate() { + int Xmin = (int) (_mEllipsoidCenter.xCoord - _mSizeA); + int Xmax = (int) (_mEllipsoidCenter.xCoord + _mSizeA); + int Ymin = (int) (_mEllipsoidCenter.yCoord - _mSizeB); + int Ymax = (int) (_mEllipsoidCenter.yCoord + _mSizeB); + int Zmin = (int) (_mEllipsoidCenter.zCoord - _mSizeC); + int Zmax = (int) (_mEllipsoidCenter.zCoord + _mSizeC); + + for (int iX = Xmin; iX <= Xmax; iX++) { + for (int iY = Ymin; iY <= Ymax; iY++) { + for (int iZ = Zmin; iZ <= Zmax; iZ++) { + double tmpX = Math.pow(_mEllipsoidCenter.xCoord - iX, 2) / Math.pow(_mSizeA, 2); + double tmpY = Math.pow(_mEllipsoidCenter.yCoord - iY, 2) / Math.pow(_mSizeB, 2); + double tmpZ = Math.pow(_mEllipsoidCenter.zCoord - iZ, 2) / Math.pow(_mSizeC, 2); + double val = (tmpX + tmpY + tmpZ); + + Vec3 tPoint = Vec3.createVectorHelper(iX, iY, iZ); + tPoint.rotateAroundX(_mRandomAngleX); + tPoint.rotateAroundY(_mRandomAngleY); + tPoint.rotateAroundZ(_mRandomAngleZ); + + TargetBlockPosition tbp = TargetBlockPosition.Invalid; + + if (val <= 0.01D) tbp = TargetBlockPosition.AsteroidInnerCore; + + else if (val > 0.01D && val < _mCoreDensity) tbp = TargetBlockPosition.AsteroidCore; + + else if (val >= _mCoreDensity && val <= (1.0D + - (_mSineFactor * MathHelper.sin((iZ + iX + iY - _mRandom.nextFloat() * _mRandomInfluence))))) + tbp = TargetBlockPosition.AsteroidShell; + + if (tbp != TargetBlockPosition.Invalid) + _mStructure.add(new StructureInformation(Vec3.createVectorHelper(iX, iY, iZ), tbp)); + + } + } + } + } + + @Override + public void reset() { + _mStructure = new ArrayList<>(); + _mEllipsoidCenter = Vec3.createVectorHelper(0, 0, 0); + } +} diff --git a/src/main/java/galacticgreg/registry/GalacticGregRegistry.java b/src/main/java/galacticgreg/registry/GalacticGregRegistry.java new file mode 100644 index 0000000000..9dc5d0fa04 --- /dev/null +++ b/src/main/java/galacticgreg/registry/GalacticGregRegistry.java @@ -0,0 +1,183 @@ +package galacticgreg.registry; + +import static galacticgreg.api.enums.ModContainers.Vanilla; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.world.chunk.IChunkProvider; + +import cpw.mods.fml.common.Loader; +import galacticgreg.GalacticGreg; +import galacticgreg.api.Enums.DimensionType; +import galacticgreg.api.ModContainer; +import galacticgreg.api.ModDimensionDef; +import galacticgreg.dynconfig.DynamicDimensionConfig; +import galacticgreg.generators.GenEllipsoid; + +/** + * GalacticGregs registry + * + */ +public class GalacticGregRegistry { + + private static final Map _mModContainers = new HashMap<>(); + public static final String DIM_UNKNOWN = "GGREG_DIMENSION_UNKNOWN"; + private static boolean _mInitializationDone = false; + + /** + * Register new ModContainer in the registry. Call this after you've populated it with Dimensions and Blocks Must be + * called from your own PreInit or Init event + * + * @param pModContainer + * @return + */ + public static boolean registerModContainer(ModContainer pModContainer) { + if (_mInitializationDone) { + GalacticGreg.Logger.warn("Initialization is already done, you can't add more ModContainers!"); + return false; + } + + if (_mModContainers.containsKey(pModContainer.getModName())) { + GalacticGreg.Logger + .warn("There is already a mod registered with that name: [%s]", pModContainer.getModName()); + return false; + } else { + GalacticGreg.Logger.info( + "Registered new mod to generate ores: [%s] Dimensions provided: [%d]", + pModContainer.getModName(), + pModContainer.getDimensionList() + .size()); + _mModContainers.put(pModContainer.getModName(), pModContainer); + return true; + } + } + + /** + * Lookup the registered dimensions and try to find the DimensionDefinition that has the ChunkProvider that we have + * here + * + * @param pChunkProvider + * @return + */ + public static ModDimensionDef getDimensionTypeByChunkGenerator(IChunkProvider pChunkProvider) { + try { + if (!_mInitializationDone) return null; + + String tFQCPN = pChunkProvider.toString() + .split("@")[0]; + ModDimensionDef tReturnMDD = null; + + for (ModContainer mc : _mModContainers.values()) { + for (ModDimensionDef mdd : mc.getDimensionList()) { + if (mdd.getChunkProviderName() + .equals(tFQCPN)) { + tReturnMDD = mdd; + break; + } + } + } + + return tReturnMDD; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + /** + * Get all registered modcontainers. Can only be done after the initialization process is done + * + * @return + */ + public static Collection getModContainers() { + if (!_mInitializationDone) return null; + + return _mModContainers.values(); + } + + /** + * Initializes the Registry. Never do this in your code, GalacticGreg will crash if you do so + */ + public static boolean InitRegistry() { + if (_mInitializationDone) // never run init twice! + return false; + + InitModContainers(); + + DynamicDimensionConfig.InitDynamicConfig(); + return true; + } + + /** + * Parse modcontainers and search for loaded mods. Enable found mods for generation + */ + private static void InitModContainers() { + for (ModContainer mc : _mModContainers.values()) { + // todo: rename Vanilla mod container name from "Vanilla" to "minecraft" + if (!Loader.isModLoaded(mc.getModName()) && !mc.getModName() + .equals(Vanilla.modContainer.getModName())) { + GalacticGreg.Logger.warn( + "Ignoring ModRegistration for OreGen: [%s], because mod is not loaded. Did you misspell the name?", + mc.getModName()); + mc.setEnabled(false); + } else { + GalacticGreg.Logger.info("Mod [%s] is now enabled for OreGen by GalacticGreg", mc.getModName()); + mc.setEnabled(true); + for (ModDimensionDef md : mc.getDimensionList()) { + GalacticGreg.Logger.info( + "ModID: [%s] DimName: [%s] ValidBlocks: [%d] Identifier: [%s] Generators: [%d]", + mc.getModName(), + md.getDimensionName(), + md.getReplaceableBlocks() + .size(), + md.getDimIdentifier(), + md.getSpaceObjectGenerators() + .size()); + + // Register default generator if dimension is asteroid and no generator was added + if (md.getDimensionType() == DimensionType.Asteroid) { + if (md.getSpaceObjectGenerators() + .size() == 0) { + GalacticGreg.Logger.debug("No generators found, adding build-in ellipsoid generator"); + md.registerSpaceObjectGenerator(new GenEllipsoid()); + } + GalacticGreg.Logger.info( + "Asteroid-Enabled dimension. Registered Generators: [%d]", + md.getSpaceObjectGenerators() + .size()); + } + + md.finalizeReplaceableBlocks(mc.getModName()); + } + } + } + _mInitializationDone = true; + } + + /** + * Returns ModContainer for given DimensionDefinition + * + * @param pDimensionDefinition + * @return + */ + public static ModContainer getModContainerForDimension(ModDimensionDef pDimensionDefinition) { + if (!_mInitializationDone) return null; + + try { + for (ModContainer mc : _mModContainers.values()) { + for (ModDimensionDef md : mc.getDimensionList()) { + if (pDimensionDefinition.getDimIdentifier() + .equals(md.getDimIdentifier())) { + return mc; + } + } + } + return null; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } +} diff --git a/src/main/java/galacticgreg/schematics/SpaceSchematic.java b/src/main/java/galacticgreg/schematics/SpaceSchematic.java new file mode 100644 index 0000000000..976b699e85 --- /dev/null +++ b/src/main/java/galacticgreg/schematics/SpaceSchematic.java @@ -0,0 +1,100 @@ +package galacticgreg.schematics; + +import java.util.ArrayList; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; + +import net.minecraft.block.Block; +import net.minecraft.util.Vec3; + +import galacticgreg.api.StructureInformation; + +/** + * Class for XML Structure files. You only should edit/use this file/class if you want to add/fix stuff with + * GalacticGreg itself, and never if you're a mod developer and want to add support for GGreg to your mod. However, feel + * free to copy this code to your own mod to implement structures. If you have questions, find me on github and ask + */ +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "SpaceSchematic") +public class SpaceSchematic { + + @XmlAttribute(name = "enabled") + protected boolean _mStructureEnabled; + @XmlAttribute(name = "centerX") + protected int _mCenterX; + @XmlAttribute(name = "centerY") + protected int _mCenterY; + @XmlAttribute(name = "centerZ") + protected int _mCenterZ; + + @XmlElement(name = "StructureName") + protected String _mStructureName; + + @XmlElement(name = "Rarity") + protected int _mRarity; + + @XmlElementWrapper(name = "Coords") + @XmlElement(name = "block") + protected ArrayList mStructureInfoList; + + public boolean isEnabled() { + return _mStructureEnabled; + } + + public Vec3 getStructureCenter() { + return Vec3.createVectorHelper(_mCenterX, _mCenterY, _mCenterZ); + } + + public int getRarity() { + return _mRarity; + } + + public String getName() { + return _mStructureName; + } + + public ArrayList coordInfo() { + if (mStructureInfoList == null) mStructureInfoList = new ArrayList<>(); + + return mStructureInfoList; + } + + public void addStructureInfo(StructureInformation pStrucInfo) { + if (mStructureInfoList == null) mStructureInfoList = new ArrayList<>(); + mStructureInfoList.add(new BaseStructureInfo(pStrucInfo)); + } + + public static class BaseStructureInfo { + + @XmlAttribute(name = "X") + protected int posX; + @XmlAttribute(name = "Y") + protected int posY; + @XmlAttribute(name = "Z") + protected int posZ; + @XmlAttribute(name = "Block") + protected String blockName; + @XmlAttribute(name = "Meta") + protected int blockMeta; + + public BaseStructureInfo(StructureInformation pSI) { + posX = pSI.getX(); + posY = pSI.getY(); + posZ = pSI.getZ(); + blockName = Block.blockRegistry.getNameForObject( + pSI.getBlock() + .getBlock()); + blockMeta = pSI.getBlock() + .getMeta(); + } + + public Vec3 getVec3Pos() { + return Vec3.createVectorHelper(posX, posY, posZ); + } + } +} diff --git a/src/main/java/galacticgreg/schematics/SpaceSchematicFactory.java b/src/main/java/galacticgreg/schematics/SpaceSchematicFactory.java new file mode 100644 index 0000000000..584ea80319 --- /dev/null +++ b/src/main/java/galacticgreg/schematics/SpaceSchematicFactory.java @@ -0,0 +1,33 @@ +package galacticgreg.schematics; + +import net.minecraft.block.Block; +import net.minecraft.util.Vec3; + +import galacticgreg.api.Enums.AllowedBlockPosition; +import galacticgreg.api.Enums.TargetBlockPosition; +import galacticgreg.api.SpecialBlockComb; +import galacticgreg.api.StructureInformation; + +/** + * Class for XML Structure files. You only should edit/use this file/class if you want to add/fix stuff with + * GalacticGreg itself, and never if you're a mod developer and want to add support for GGreg to your mod. However, feel + * free to copy this code to your own mod to implement structures. If you have questions, find me on github and ask + */ +public class SpaceSchematicFactory { + + public static SpaceSchematic createSchematic(String pName) { + SpaceSchematic tSchem = new SpaceSchematic(); + tSchem._mStructureName = pName; + tSchem._mRarity = 100; + tSchem._mStructureEnabled = false; + + return tSchem; + } + + public static StructureInformation createStructureInfo(int pX, int pY, int pZ, Block pBlock, int pMeta) { + return new StructureInformation( + Vec3.createVectorHelper(pX, pY, pZ), + TargetBlockPosition.Invalid, + new SpecialBlockComb(pBlock, pMeta, AllowedBlockPosition.AsteroidCoreAndShell)); + } +} diff --git a/src/main/java/galacticgreg/schematics/SpaceSchematicHandler.java b/src/main/java/galacticgreg/schematics/SpaceSchematicHandler.java new file mode 100644 index 0000000000..9282ebca06 --- /dev/null +++ b/src/main/java/galacticgreg/schematics/SpaceSchematicHandler.java @@ -0,0 +1,182 @@ +package galacticgreg.schematics; + +import java.io.File; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; + +import org.apache.commons.io.FileUtils; + +import galacticgreg.GalacticGreg; + +/** + * Class for XML Structure files. You only should edit/use this file/class if you want to add/fix stuff with + * GalacticGreg itself, and never if you're a mod developer and want to add support for GGreg to your mod. However, feel + * free to copy this code to your own mod to implement structures. If you have questions, find me on github and ask + */ +public class SpaceSchematicHandler { + + File _mConfigFolderName; + File _mSchematicsFolderName; + private List _mSpaceSchematics; + + @SuppressWarnings("ResultOfMethodCallIgnored") + public SpaceSchematicHandler(File pConfigFolder) { + _mConfigFolderName = new File(String.format("%s/%s", pConfigFolder.toString(), GalacticGreg.NICE_MODID)); + _mSchematicsFolderName = new File(String.format("%s/schematics", _mConfigFolderName)); + + _mSpaceSchematics = new ArrayList<>(); + + if (!_mSchematicsFolderName.exists()) _mSchematicsFolderName.mkdirs(); + } + + /** + * Get a random schematic to be placed. + * + * @return A schematic that can be spawned in space + */ + public SpaceSchematic getRandomSpaceSchematic() { + int tRandomChance = GalacticGreg.GalacticRandom.nextInt(100); + List tRandomIDs = new ArrayList<>(); + SpaceSchematic tChoosenSchematic = null; + + if (_mSpaceSchematics == null) return null; + + if (_mSpaceSchematics.size() == 0) return null; + + if (_mSpaceSchematics.size() == 1) { + tChoosenSchematic = _mSpaceSchematics.get(0); + if (tChoosenSchematic.getRarity() < tRandomChance) tChoosenSchematic = null; + } else { + for (int i = 0; i < _mSpaceSchematics.size(); i++) { + if (_mSpaceSchematics.get(i) + .getRarity() >= tRandomChance) tRandomIDs.add(i); + } + } + + if (tRandomIDs.size() > 0) { + int tRnd = GalacticGreg.GalacticRandom.nextInt(tRandomIDs.size()); + tChoosenSchematic = _mSpaceSchematics.get(tRandomIDs.get(tRnd)); + } + + return tChoosenSchematic; + } + + /** + * Try to reload the schematics. Will not change the list of currently loaded schematics if any errors are detected, + * except if you force it to do so + * + * @return + */ + public boolean reloadSchematics(boolean pForceReload) { + try { + Collection structureFiles = FileUtils + .listFiles(_mSchematicsFolderName, new String[] { "xml" }, false); + List tNewSpaceSchematics = new ArrayList<>(); + int tErrorsFound = 0; + + if (structureFiles.isEmpty()) return true; + + for (File tSchematic : structureFiles) { + try { + SpaceSchematic tSchematicObj = LoadSpaceSchematic(tSchematic); + if (tSchematicObj != null) tNewSpaceSchematics.add(tSchematicObj); + else { + GalacticGreg.Logger.warn("Could not load Schematic %s. Please check the syntax", tSchematic); + tErrorsFound++; + } + } catch (Exception e) { + GalacticGreg.Logger.error("Error while loading Schematic %s", tSchematic); + e.printStackTrace(); + } + + } + + GalacticGreg.Logger.info("Successfully loaded %d Schematics", tNewSpaceSchematics.size()); + boolean tDoReplace = true; + + if (tErrorsFound > 0) { + GalacticGreg.Logger.warn("Found %d errors while loading, not all schematics will be available"); + if (pForceReload) + GalacticGreg.Logger.info("Reload was forced, replacing currently active list with new one"); + else { + GalacticGreg.Logger.warn("Nothing was replaced. Fix any errors and reload again"); + tDoReplace = false; + } + } + + if (tDoReplace) _mSpaceSchematics = tNewSpaceSchematics; + + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * Saves the schematic to disk. The schematics name will be used as filename + * + * @param pSchematic + * @return + */ + public boolean SaveSpaceStructure(SpaceSchematic pSchematic) { + try { + if (pSchematic.getName() + .length() < 1) return false; + + JAXBContext tJaxbCtx = JAXBContext.newInstance(SpaceSchematic.class); + Marshaller jaxMarsh = tJaxbCtx.createMarshaller(); + jaxMarsh.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); + jaxMarsh.marshal( + pSchematic, + new FileOutputStream(String.format("%s/%s.xml", _mSchematicsFolderName, pSchematic.getName()), false)); + + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + /** + * Load a schematic from disk by the schematic-name itself, without .xml or path + * + * @param pSchematicName + * @return + */ + public SpaceSchematic LoadSpaceSchematic(String pSchematicName) { + return LoadSpaceSchematic(new File(String.format("%s/%s.xml", _mSchematicsFolderName, pSchematicName))); + } + + /** + * Load a schematic file from disk by providing the actual file-object + * + * @param pName + * @return + */ + public SpaceSchematic LoadSpaceSchematic(File pName) { + SpaceSchematic tSchematic = null; + + try { + JAXBContext tJaxbCtx = JAXBContext.newInstance(SpaceSchematic.class); + if (!pName.exists()) { + GalacticGreg.Logger.error("SchematicFile %s could not be found", pName); + return null; + } + + Unmarshaller jaxUnmarsh = tJaxbCtx.createUnmarshaller(); + tSchematic = (SpaceSchematic) jaxUnmarsh.unmarshal(pName); + + } catch (Exception e) { + e.printStackTrace(); + } + + return tSchematic; + } +} diff --git a/src/main/java/galacticgreg/schematics/SpaceSchematicWrapper.java b/src/main/java/galacticgreg/schematics/SpaceSchematicWrapper.java new file mode 100644 index 0000000000..4addc5107d --- /dev/null +++ b/src/main/java/galacticgreg/schematics/SpaceSchematicWrapper.java @@ -0,0 +1,104 @@ +package galacticgreg.schematics; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.util.Vec3; + +import cpw.mods.fml.common.registry.GameRegistry; +import galacticgreg.GalacticGreg; +import galacticgreg.api.BlockMetaComb; +import galacticgreg.api.Enums.SpaceObjectType; +import galacticgreg.api.Enums.TargetBlockPosition; +import galacticgreg.api.ISpaceObjectGenerator; +import galacticgreg.api.StructureInformation; +import galacticgreg.schematics.SpaceSchematic.BaseStructureInfo; + +/** + * Class for XML Structure files. You only should edit/use this file/class if you want to add/fix stuff with + * GalacticGreg itself, and never if you're a mod developer and want to add support for GGreg to your mod. However, feel + * free to copy this code to your own mod to implement structures. If you have questions, find me on github and ask + */ +public class SpaceSchematicWrapper implements ISpaceObjectGenerator { + + private SpaceSchematic _mSchematic; + private Vec3 _mCenter = Vec3.createVectorHelper(0, 0, 0); + private List _mFinalizedStructure; + + public SpaceSchematicWrapper(SpaceSchematic pSchematic) { + _mSchematic = pSchematic; + } + + public boolean isCalculated() { + return _mFinalizedStructure != null && _mFinalizedStructure.size() > 0; + } + + /** + * Recalculate the Structures position, center it around _mCenter + */ + private void RecalculatePosition() { + _mFinalizedStructure = new ArrayList<>(); + + for (BaseStructureInfo bsi : _mSchematic.coordInfo()) { + try { + String tModID = bsi.blockName.split(":")[0]; + String tBlockName = bsi.blockName.split(":")[1]; + + Block tBlock = GameRegistry.findBlock(tModID, tBlockName); + if (tBlock != null) { + BlockMetaComb bmc = new BlockMetaComb(tBlock, bsi.blockMeta); + Vec3 tCenteredPos = _mCenter.addVector(bsi.posX, bsi.posY, bsi.posZ); + StructureInformation tnewSI = new StructureInformation( + tCenteredPos, + TargetBlockPosition.StructureBlock, + bmc); + _mFinalizedStructure.add(tnewSI); + } else GalacticGreg.Logger + .warn("Block %s:%s could not be found. Schematic will be incomplete!", tModID, tBlockName); + } catch (Exception e) { + e.printStackTrace(); + GalacticGreg.Logger.error("Error while recalculating blocks position"); + } + } + } + + @Override + public Vec3 getCenterPoint() { + return _mCenter; + } + + @Override + public void setCenterPoint(int pX, int pY, int pZ) { + _mCenter = Vec3.createVectorHelper(pX, pY, pZ); + } + + @Override + public void setCenterPoint(Vec3 pCenter) { + _mCenter = pCenter; + } + + @Override + public List getStructure() { + return _mFinalizedStructure; + } + + @Override + public void calculate() { + RecalculatePosition(); + } + + @Override + public void randomize(int pSizeMin, int pSizeMax) {} + + @Override + public SpaceObjectType getType() { + return SpaceObjectType.NonOreSchematic; + } + + @Override + public void reset() { + + } + +} diff --git a/src/main/java/ggfab/BlockIcons.java b/src/main/java/ggfab/BlockIcons.java new file mode 100644 index 0000000000..7017f53f7e --- /dev/null +++ b/src/main/java/ggfab/BlockIcons.java @@ -0,0 +1,45 @@ +package ggfab; + +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.IIconContainer; + +public enum BlockIcons implements IIconContainer, Runnable { + + OVERLAY_FRONT_ADV_ASSLINE_ACTIVE, + OVERLAY_FRONT_ADV_ASSLINE_ACTIVE_GLOW, + OVERLAY_FRONT_ADV_ASSLINE_STUCK, + OVERLAY_FRONT_ADV_ASSLINE_STUCK_GLOW, + OVERLAY_FRONT_ADV_ASSLINE, + OVERLAY_FRONT_ADV_ASSLINE_GLOW,; + + public static final String RES_PATH = GGConstants.MODID + ":"; + private IIcon mIcon; + + BlockIcons() { + GregTechAPI.sGTBlockIconload.add(this); + } + + @Override + public IIcon getIcon() { + return mIcon; + } + + @Override + public IIcon getOverlayIcon() { + return null; + } + + @Override + public ResourceLocation getTextureFile() { + return TextureMap.locationBlocksTexture; + } + + @Override + public void run() { + mIcon = GregTechAPI.sBlockIcons.registerIcon(RES_PATH + "iconsets/" + this); + } +} diff --git a/src/main/java/ggfab/ComponentRecipeLoader.java b/src/main/java/ggfab/ComponentRecipeLoader.java new file mode 100644 index 0000000000..7345ff89f4 --- /dev/null +++ b/src/main/java/ggfab/ComponentRecipeLoader.java @@ -0,0 +1,57 @@ +package ggfab; + +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.AssemblyLine; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +class ComponentRecipeLoader implements Runnable { + + @Override + public void run() { + Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140"); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemList.Machine_Multi_Assemblyline.get(1L)) + .metadata(RESEARCH_TIME, 1 * HOURS + 6 * MINUTES) + .itemInputs( + ItemList.Machine_Multi_Assemblyline.get(1L), + new Object[] { OrePrefixes.circuit.get(Materials.LuV), 2 }, + new Object[] { OrePrefixes.circuit.get(Materials.IV), 4 }, + new Object[] { OrePrefixes.circuit.get(Materials.EV), 8 }, + ItemList.Automation_ChestBuffer_LuV.get(1L)) + .fluidInputs(new FluidStack(solderIndalloy, 1296), Materials.Lubricant.getFluid(2000)) + .itemOutputs(GGItemList.AdvAssLine.get(1L)) + .eut(6_000) + .duration(10 * MINUTES) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Input_Bus_IV.get(1L), + ItemList.Emitter_IV.get(1L), + ItemList.Sensor_IV.get(1L), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Enderium, 1L), + GTUtility.getIntegratedCircuit(12)) + .itemOutputs(GGItemList.LinkedInputBus.get(1L)) + .fluidInputs(Materials.Polybenzimidazole.getMolten(144L)) + .duration(30 * SECONDS) + .eut(GTValues.VP[5]) + .addTo(assemblerRecipes); + + } +} diff --git a/src/main/java/ggfab/ConfigurationHandler.java b/src/main/java/ggfab/ConfigurationHandler.java new file mode 100644 index 0000000000..a1f83c8bbf --- /dev/null +++ b/src/main/java/ggfab/ConfigurationHandler.java @@ -0,0 +1,52 @@ +package ggfab; + +import java.io.File; +import java.util.Map; + +import net.minecraftforge.common.config.ConfigCategory; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +public enum ConfigurationHandler { + + INSTANCE; + + private Configuration config; + private float laserOCPenaltyFactor; + + void init(File f) { + config = new Configuration(f); + loadConfig(); + setLanguageKeys(); + } + + private void setLanguageKeys() { + for (String categoryName : config.getCategoryNames()) { + ConfigCategory category = config.getCategory(categoryName); + category.setLanguageKey("ggfab.config." + categoryName); + for (Map.Entry entry : category.entrySet()) { + entry.getValue() + .setLanguageKey(String.format("%s.%s", category.getLanguagekey(), entry.getKey())); + } + } + } + + private void loadConfig() { + laserOCPenaltyFactor = config.getFloat( + "advasslinePenaltyFactor", + "common.balancing", + 0.3f, + 0f, + 10f, + "Laser overclock penalty factor. This will incredibly change the game balance. Even a small step from 0.2 to 0.3 can have very significant impact. Tweak with caution!"); + config.save(); + } + + public Configuration getConfig() { + return config; + } + + public float getLaserOCPenaltyFactor() { + return laserOCPenaltyFactor; + } +} diff --git a/src/main/java/ggfab/GGConstants.java b/src/main/java/ggfab/GGConstants.java new file mode 100644 index 0000000000..4165d687d8 --- /dev/null +++ b/src/main/java/ggfab/GGConstants.java @@ -0,0 +1,16 @@ +package ggfab; + +import net.minecraft.util.EnumChatFormatting; + +import gregtech.GT_Version; + +public class GGConstants { + + public static final String MODID = "ggfab"; + public static final String RES_PATH_ITEM = MODID + ":"; + public static final String MODNAME = "GigaGramFab"; + public static final String VERSION = GT_Version.VERSION; + + public static final String GGMARK = EnumChatFormatting.GOLD + "GigaGram" + EnumChatFormatting.RESET + "Fab"; + public static final String GGMARK_TOOLTIP = "Added by " + GGMARK; +} diff --git a/src/main/java/ggfab/GGItemList.java b/src/main/java/ggfab/GGItemList.java new file mode 100644 index 0000000000..5698acf683 --- /dev/null +++ b/src/main/java/ggfab/GGItemList.java @@ -0,0 +1,205 @@ +package ggfab; + +import static gregtech.api.enums.GTValues.W; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import gregtech.api.interfaces.IItemContainer; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public enum GGItemList implements IItemContainer { + + LinkedInputBus, + AdvAssLine, + // region single use tool + ToolCast_MV, + ToolCast_HV, + ToolCast_EV, + // order matters, do not insert randomly like a n00b + One_Use_craftingToolFile, + One_Use_craftingToolWrench, + One_Use_craftingToolCrowbar, + One_Use_craftingToolWireCutter, + One_Use_craftingToolHardHammer, + One_Use_craftingToolSoftHammer, + One_Use_craftingToolScrewdriver, + One_Use_craftingToolSaw, + Shape_One_Use_craftingToolFile, + Shape_One_Use_craftingToolWrench, + Shape_One_Use_craftingToolCrowbar, + Shape_One_Use_craftingToolWireCutter, + Shape_One_Use_craftingToolHardHammer, + Shape_One_Use_craftingToolSoftHammer, + Shape_One_Use_craftingToolScrewdriver, + Shape_One_Use_craftingToolSaw, + // ordered section ends + // endregion + // + ; + + private ItemStack mStack; + private boolean mHasNotBeenSet = true; + + @Override + public IItemContainer set(Item aItem) { + mHasNotBeenSet = false; + if (aItem == null) { + return this; + } + ItemStack aStack = new ItemStack(aItem, 1, 0); + mStack = GTUtility.copyAmount(1, aStack); + return this; + } + + @Override + public IItemContainer hidden() { + codechicken.nei.api.API.hideItem(get(1L)); + return this; + } + + @Override + public IItemContainer set(ItemStack aStack) { + mHasNotBeenSet = false; + mStack = GTUtility.copyAmount(1, aStack); + return this; + } + + @Override + public Item getItem() { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return null; + } + return mStack.getItem(); + } + + @Override + public Block getBlock() { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + return GTUtility.getBlockFromStack(new ItemStack(getItem())); + } + + @Override + public final boolean hasBeenSet() { + return !mHasNotBeenSet; + } + + @Override + public boolean isStackEqual(Object aStack) { + return isStackEqual(aStack, false, false); + } + + @Override + public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT) { + if (GTUtility.isStackInvalid(aStack)) { + return false; + } + return GTUtility.areUnificationsEqual((ItemStack) aStack, aWildcard ? getWildcard(1) : get(1), aIgnoreNBT); + } + + @Override + public ItemStack get(long aAmount, Object... aReplacements) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); + } + return GTUtility.copyAmount(aAmount, GTOreDictUnificator.get(mStack)); + } + + @Override + public ItemStack getWildcard(long aAmount, Object... aReplacements) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); + } + return GTUtility.copyAmountAndMetaData(aAmount, W, GTOreDictUnificator.get(mStack)); + } + + @Override + public ItemStack getUndamaged(long aAmount, Object... aReplacements) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); + } + return GTUtility.copyAmountAndMetaData(aAmount, 0, GTOreDictUnificator.get(mStack)); + } + + @Override + public ItemStack getAlmostBroken(long aAmount, Object... aReplacements) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); + } + return GTUtility.copyAmountAndMetaData(aAmount, mStack.getMaxDamage() - 1, GTOreDictUnificator.get(mStack)); + } + + @Override + public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements) { + ItemStack rStack = get(1, aReplacements); + if (GTUtility.isStackInvalid(rStack)) { + return null; + } + rStack.setStackDisplayName(aDisplayName); + return GTUtility.copyAmount(aAmount, rStack); + } + + @Override + public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements) { + ItemStack rStack = get(1, aReplacements); + if (GTUtility.isStackInvalid(rStack)) { + return null; + } + GTModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); + return GTUtility.copyAmount(aAmount, rStack); + } + + @Override + public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); + } + return GTUtility.copyAmountAndMetaData(aAmount, aMetaValue, GTOreDictUnificator.get(mStack)); + } + + @Override + public IItemContainer registerOre(Object... aOreNames) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + for (Object tOreName : aOreNames) { + GTOreDictUnificator.registerOre(tOreName, get(1)); + } + return this; + } + + @Override + public IItemContainer registerWildcardAsOre(Object... aOreNames) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + for (Object tOreName : aOreNames) { + GTOreDictUnificator.registerOre(tOreName, getWildcard(1)); + } + return this; + } + +} diff --git a/src/main/java/ggfab/GigaGramFab.java b/src/main/java/ggfab/GigaGramFab.java new file mode 100644 index 0000000000..8fc8ef26a9 --- /dev/null +++ b/src/main/java/ggfab/GigaGramFab.java @@ -0,0 +1,185 @@ +package ggfab; + +import static gregtech.api.enums.ToolDictNames.*; +import static gregtech.common.items.IDMetaTool01.*; +import static gregtech.common.items.MetaGeneratedTool01.*; + +import net.minecraft.item.ItemStack; + +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import ggfab.api.GGFabRecipeMaps; +import ggfab.api.GigaGramFabAPI; +import ggfab.items.GGMetaItemDumbItems; +import ggfab.mte.MTEAdvAssLine; +import ggfab.mte.MTELinkedInputBus; +import ggfab.util.GGUtils; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SoundResource; +import gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe; +import gregtech.api.util.ProcessingArrayManager; + +@Mod( + modid = GGConstants.MODID, + version = GGConstants.VERSION, + name = GGConstants.MODNAME, + acceptedMinecraftVersions = "[1.7.10]", + dependencies = "required-after:IC2;required-before:gregtech") +public class GigaGramFab { + + public GigaGramFab() { + // initialize the textures + // noinspection ResultOfMethodCallIgnored + BlockIcons.OVERLAY_FRONT_ADV_ASSLINE.name(); + } + + @Mod.EventHandler + public void preInit(FMLPreInitializationEvent event) { + GregTechAPI.sAfterGTPreload.add(() -> { + GGItemList.AdvAssLine + .set(new MTEAdvAssLine(13532, "ggfab.machine.adv_assline", "Advanced Assembly Line").getStackForm(1)); + GGItemList.LinkedInputBus.set( + new MTELinkedInputBus(13533, "ggfab.machine.linked_input_bus", "Linked Input Bus", 5).getStackForm(1)); + GGItemList.ToolCast_MV.set( + new MTEBasicMachineWithRecipe( + 13534, + "ggfab.toolcast.tier.mv", + "Basic Tool Casting Machine", + 2, + "Cheap Crafting Tool for you!", + GGFabRecipeMaps.toolCastRecipes, + 1, + 4, + 32000, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.MAIN_RANDOM_SPARKS, + "TOOL_CAST", + new Object[] { "PGP", "WMW", "CBC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS, 'B', + ItemList.Shape_Empty.get(1L) }).getStackForm(1L)); + GGItemList.ToolCast_HV.set( + new MTEBasicMachineWithRecipe( + 13535, + "ggfab.toolcast.tier.hv", + "Advanced Tool Casting Machine", + 3, + "Cheap Crafting Tool for you!", + GGFabRecipeMaps.toolCastRecipes, + 1, + 4, + 64000, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.MAIN_RANDOM_SPARKS, + "TOOL_CAST", + new Object[] { "PGP", "WMW", "CBC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS, 'B', + ItemList.Shape_Empty.get(1L) }).getStackForm(1L)); + GGItemList.ToolCast_EV.set( + new MTEBasicMachineWithRecipe( + 13536, + "ggfab.toolcast.tier.ev", + "Master Tool Casting Machine", + 4, + "Cheap Crafting Tool for you!", + GGFabRecipeMaps.toolCastRecipes, + 1, + 4, + 128000, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.MAIN_RANDOM_SPARKS, + "TOOL_CAST", + new Object[] { "PGP", "WMW", "CBC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS, 'B', + ItemList.Shape_Empty.get(1L) }).getStackForm(1L)); + long plate = OrePrefixes.plate.mMaterialAmount, ingot = OrePrefixes.ingot.mMaterialAmount, + screw = OrePrefixes.screw.mMaterialAmount, rod = OrePrefixes.stick.mMaterialAmount; + GigaGramFabAPI.addSingleUseToolType(craftingToolFile, INSTANCE.mToolStats.get((short) FILE.ID), 2 * plate); + GigaGramFabAPI + .addSingleUseToolType(craftingToolWrench, INSTANCE.mToolStats.get((short) WRENCH.ID), 6 * ingot); + GigaGramFabAPI + .addSingleUseToolType(craftingToolCrowbar, INSTANCE.mToolStats.get((short) CROWBAR.ID), 3 * rod); + GigaGramFabAPI.addSingleUseToolType( + craftingToolWireCutter, + INSTANCE.mToolStats.get((short) WIRECUTTER.ID), + 3 * plate + 2 * rod + screw); + GigaGramFabAPI.addSingleUseToolType( + craftingToolHardHammer, + INSTANCE.mToolStats.get((short) HARDHAMMER.ID), + 6 * ingot); + GigaGramFabAPI.addSingleUseToolType( + craftingToolSoftHammer, + INSTANCE.mToolStats.get((short) SOFTMALLET.ID), + 6 * ingot); + GigaGramFabAPI.addSingleUseToolType( + craftingToolScrewdriver, + INSTANCE.mToolStats.get((short) SCREWDRIVER.ID), + 2 * rod); + GigaGramFabAPI.addSingleUseToolType(craftingToolSaw, INSTANCE.mToolStats.get((short) SAW.ID), 2 * plate); + ProcessingArrayManager.addRecipeMapToPA("ggfab.toolcast", GGFabRecipeMaps.toolCastRecipes); + }); + GregTechAPI.sBeforeGTPostload.add(new ComponentRecipeLoader()); + GregTechAPI.sBeforeGTPostload.add(new SingleUseToolRecipeLoader()); + ConfigurationHandler.INSTANCE.init(event.getSuggestedConfigurationFile()); + + initDumbItem1(); + } + + @Mod.EventHandler + public void init(FMLInitializationEvent event) {} + + @Mod.EventHandler + public void postInit(FMLPostInitializationEvent event) {} + + private void initDumbItem1() { + GGMetaItemDumbItems i1 = new GGMetaItemDumbItems("ggfab.d1"); + int id = 0; + { + int idShape = 30; + final int budget = idShape; + String prefix = "One_Use_craftingTool"; + String prefix2 = "Shape_One_Use_craftingTool"; + for (GGItemList i : GGItemList.values()) { + ItemStack stack = null; + if (i.name() + .startsWith(prefix)) { + stack = i1.addItem( + id++, + "Single Use " + GGUtils.processSentence( + i.name() + .substring(prefix.length()), + ' ', + true, + true), + null, + i, + i.name() + .substring("One_Use_".length())); + } else if (i.name() + .startsWith(prefix2)) { + stack = i1.addItem( + idShape++, + "Tool Casting Mold (" + GGUtils.processSentence( + i.name() + .substring(prefix2.length()), + ' ', + true, + true) + ")", + null, + i); + } + if (stack != null) { + i.set(stack); + } + } + if (id >= budget || idShape >= 2 * budget || idShape - id != budget) throw new AssertionError(); + id = budget * 2; + } + } +} diff --git a/src/main/java/ggfab/SingleUseToolRecipeLoader.java b/src/main/java/ggfab/SingleUseToolRecipeLoader.java new file mode 100644 index 0000000000..c79f792cfc --- /dev/null +++ b/src/main/java/ggfab/SingleUseToolRecipeLoader.java @@ -0,0 +1,102 @@ +package ggfab; + +import static gregtech.api.enums.ToolDictNames.*; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import ggfab.api.GGFabRecipeMaps; +import ggfab.api.GigaGramFabAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gregtech.api.enums.ToolDictNames; +import gregtech.api.interfaces.IToolStats; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +class SingleUseToolRecipeLoader implements Runnable { + + @Override + public void run() { + ToolDictNames[] hardTools = new ToolDictNames[] { craftingToolHardHammer, craftingToolScrewdriver, + craftingToolWrench, craftingToolCrowbar, craftingToolWireCutter, craftingToolFile, craftingToolSaw }; + ToolDictNames[] softTools = new ToolDictNames[] { craftingToolSoftHammer }; + addSingleUseToolRecipe(Materials.Steel, hardTools); + addSingleUseToolRecipe(Materials.Silver, 5000, hardTools); + addSingleUseToolRecipe(Materials.VanadiumSteel, hardTools); + addSingleUseToolRecipe(Materials.TungstenSteel, hardTools); + addSingleUseToolRecipe(Materials.HSSG, hardTools); + addSingleUseToolRecipe(Materials.Rubber, softTools); + addSingleUseToolRecipe(Materials.StyreneButadieneRubber, softTools); + addSingleUseToolRecipe(Materials.Polybenzimidazole, softTools); + + String prefix = "Shape_One_Use_"; + for (GGItemList value : GGItemList.values()) { + if (!value.name() + .startsWith(prefix)) { + continue; + } + ToolDictNames type = ToolDictNames.valueOf( + value.name() + .substring(prefix.length())); + GTModHandler + .addCraftingRecipe(value.get(1L), new Object[] { "h", "P", "I", 'P', ItemList.Shape_Empty, 'I', type }); + } + } + + private void addSingleUseToolRecipe(Materials material, ToolDictNames... types) { + addSingleUseToolRecipe(material, 10000, types); + } + + private static long findNiceFactor(long fluids, long count) { + long end = Math.min(fluids, count); + for (long i = count / 256; i < end; i++) { + if (fluids % i == 0 && count % i == 0 && count / i < 256) return i; + } + return -1; + } + + private void addSingleUseToolRecipe(Materials material, int outputModifier, ToolDictNames... types) { + if (material.mStandardMoltenFluid == null) { + throw new IllegalArgumentException("material does not have molten fluid form"); + } + for (ToolDictNames type : types) { + IToolStats stats = GigaGramFabAPI.SINGLE_USE_TOOLS.get(type); + Long cost = GigaGramFabAPI.COST_SINGLE_USE_TOOLS.get(type); + if (stats == null || cost == null) { + throw new IllegalArgumentException(type + " not registered"); + } + long fluids = cost * GTValues.L / GTValues.M, duration = 6 * SECONDS; + long count = (long) (material.mDurability * stats.getMaxDurabilityMultiplier() + * outputModifier + * 100 + / stats.getToolDamagePerContainerCraft() + / 10000); + if (count > 64 * 4) { + long niceFactor = findNiceFactor(fluids, count); + if (niceFactor < 0) { + double mod = (double) count / (64 * 4L); + fluids = Math.max((long) (fluids / mod), 1L); + duration = Math.max((long) (duration / mod), 1L); + count = 64 * 4; + } else { + fluids /= niceFactor; + duration = Math.max(duration / niceFactor, 1); + count /= niceFactor; + } + } else if (count < 128) { + long mod = GTUtility.ceilDiv(128, count); + fluids *= mod; + duration *= mod; + count *= mod; + } + GTValues.RA.stdBuilder() + .fluidInputs(material.getMolten(fluids)) // + .metadata(GGFabRecipeMaps.OUTPUT_TYPE, type) // + .metadata(GGFabRecipeMaps.OUTPUT_COUNT, (int) count) // + .eut(TierEU.RECIPE_MV) + .duration(duration) // + .addTo(GGFabRecipeMaps.toolCastRecipes); + } + } +} diff --git a/src/main/java/ggfab/api/GGFabRecipeMaps.java b/src/main/java/ggfab/api/GGFabRecipeMaps.java new file mode 100644 index 0000000000..cd2663f944 --- /dev/null +++ b/src/main/java/ggfab/api/GGFabRecipeMaps.java @@ -0,0 +1,64 @@ +package ggfab.api; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import net.minecraft.item.ItemStack; + +import com.gtnewhorizons.modularui.common.widget.ProgressBar; + +import ggfab.GGItemList; +import gregtech.api.enums.ToolDictNames; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMapBackend; +import gregtech.api.recipe.RecipeMapBuilder; +import gregtech.api.recipe.RecipeMetadataKey; +import gregtech.api.recipe.metadata.SimpleRecipeMetadataKey; +import gregtech.api.util.GTRecipe; + +public class GGFabRecipeMaps { + + public static final RecipeMetadataKey OUTPUT_TYPE = SimpleRecipeMetadataKey + .create(ToolDictNames.class, "output_type"); + public static final RecipeMetadataKey OUTPUT_COUNT = SimpleRecipeMetadataKey + .create(Integer.class, "output_count"); + public static final RecipeMap toolCastRecipes = RecipeMapBuilder.of("ggfab.recipe.toolcast") + .maxIO(1, 4, 1, 0) + .minInputs(1, 1) + .progressBar(GTUITextures.PROGRESSBAR_ARROW, ProgressBar.Direction.RIGHT) + .recipeEmitter(b -> { + Optional rr = b.noOptimize() + .validateNoInput() + .validateInputFluidCount(0, 1) + .validateNoOutput() + .validateNoOutputFluid() + .build(); + if (!rr.isPresent()) return Collections.emptyList(); + ToolDictNames outputType = b.getMetadata(OUTPUT_TYPE); + GTRecipe r = rr.get(); + int outputSize = b.getMetadataOrDefault(OUTPUT_COUNT, 0); + if (outputSize > 64 * 4 || outputSize <= 0) return Collections.emptyList(); + ItemStack shape, output; + try { + shape = GGItemList.valueOf("Shape_One_Use_" + outputType) + .get(0L); + output = GGItemList.valueOf("One_Use_" + outputType) + .get(outputSize); + } catch (IllegalArgumentException ex) { + // this looks like python not java, but I don't have better way around this + return Collections.emptyList(); + } + output.stackSize = outputSize; + List outputs = new ArrayList<>(); + int maxStackSize = output.getMaxStackSize(); + while (output.stackSize > maxStackSize) outputs.add(output.splitStack(maxStackSize)); + outputs.add(output); + r.mInputs = new ItemStack[] { shape }; + r.mOutputs = outputs.toArray(new ItemStack[0]); + return Collections.singletonList(r); + }) + .build(); +} diff --git a/src/main/java/ggfab/api/GigaGramFabAPI.java b/src/main/java/ggfab/api/GigaGramFabAPI.java new file mode 100644 index 0000000000..3eb4862059 --- /dev/null +++ b/src/main/java/ggfab/api/GigaGramFabAPI.java @@ -0,0 +1,30 @@ +package ggfab.api; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import gregtech.api.enums.ToolDictNames; +import gregtech.api.interfaces.IToolStats; + +public class GigaGramFabAPI { + + private static final Logger apiLogger = LogManager.getLogger("GigaGramFabAPI"); + + private static final Map SINGLE_USE_TOOLS_STORE = new HashMap<>(); + public static final Map SINGLE_USE_TOOLS = Collections + .unmodifiableMap(SINGLE_USE_TOOLS_STORE); + + private static final Map COST_SINGLE_USE_TOOLS_STORE = new HashMap<>(); + public static final Map COST_SINGLE_USE_TOOLS = Collections + .unmodifiableMap(COST_SINGLE_USE_TOOLS_STORE); + + public static void addSingleUseToolType(ToolDictNames type, IToolStats stat, long materialCost) { + if (SINGLE_USE_TOOLS_STORE.put(type, stat) != null) + apiLogger.warn("Replacing stat of single use tool {}", type); + COST_SINGLE_USE_TOOLS_STORE.put(type, materialCost); + } +} diff --git a/src/main/java/ggfab/items/GGMetaItemDumbItems.java b/src/main/java/ggfab/items/GGMetaItemDumbItems.java new file mode 100644 index 0000000000..479cc160ba --- /dev/null +++ b/src/main/java/ggfab/items/GGMetaItemDumbItems.java @@ -0,0 +1,153 @@ +package ggfab.items; + +import static gregtech.api.enums.GTValues.D1; + +import java.util.ArrayList; +import java.util.BitSet; +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ggfab.GGConstants; +import gnu.trove.map.TIntObjectMap; +import gnu.trove.map.hash.TIntObjectHashMap; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TCAspects; +import gregtech.api.interfaces.IItemBehaviour; +import gregtech.api.interfaces.IItemContainer; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.objects.ItemData; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +// mostly stolen from gt5 itself. +public class GGMetaItemDumbItems extends MetaBaseItem { + + public static final int MAX_ID = 32766; + private final BitSet mEnabledItems = new BitSet(); + private final BitSet mVisibleItems = new BitSet(); + private final ArrayList mIconList = new ArrayList<>(); + private final TIntObjectMap mIconOverride = new TIntObjectHashMap<>(); + + public GGMetaItemDumbItems(String aUnlocalized) { + super(aUnlocalized); + } + + /** + * This adds a Custom Item to the ending Range. + * + * @param aID The Id of the assigned Item [0 - mItemAmount] (The MetaData gets auto-shifted by +mOffset) + * @param aEnglish The Default Localized Name of the created Item + * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip + * @param aRandomData The OreDict Names you want to give the Item. Also used for TC Aspects and some other things. + * @return An ItemStack containing the newly created Item. + */ + public final ItemStack addItem(int aID, String aEnglish, String aToolTip, Object... aRandomData) { + if (aID < 0 || aID > MAX_ID) return null; + + if (aToolTip == null) aToolTip = ""; + ItemStack rStack = new ItemStack(this, 1, aID); + mEnabledItems.set(aID); + mVisibleItems.set(aID); + GTLanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".name", aEnglish); + GTLanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".tooltip", aToolTip); + List tAspects = new ArrayList<>(); + // Important Stuff to do first + for (Object tRandomData : aRandomData) if (tRandomData instanceof SubTag) { + if (tRandomData == SubTag.INVISIBLE) { + mVisibleItems.set(aID, false); + continue; + } + if (tRandomData == SubTag.NO_UNIFICATION) { + GTOreDictUnificator.addToBlacklist(rStack); + } + } + // now check for the rest + for (Object tRandomData : aRandomData) if (tRandomData != null) { + boolean tUseOreDict = true; + if (tRandomData instanceof IItemBehaviour) { + @SuppressWarnings("unchecked") + IItemBehaviour behavior = (IItemBehaviour) tRandomData; + addItemBehavior(aID, behavior); + tUseOreDict = false; + } + if (tRandomData instanceof IItemContainer) { + ((IItemContainer) tRandomData).set(rStack); + tUseOreDict = false; + } + if (tRandomData instanceof SubTag) { + continue; + } + if (tRandomData instanceof IItemContainer) { + mIconOverride.put(aID, (IItemContainer) tRandomData); + } else if (tRandomData instanceof TCAspects.TC_AspectStack) { + ((TCAspects.TC_AspectStack) tRandomData).addToAspectList(tAspects); + } else if (tRandomData instanceof ItemData) { + if (GTUtility.isStringValid(tRandomData)) { + GTOreDictUnificator.registerOre(tRandomData, rStack); + } else { + GTOreDictUnificator.addItemData(rStack, (ItemData) tRandomData); + } + } else if (tUseOreDict) { + GTOreDictUnificator.registerOre(tRandomData, rStack); + } + } + if (GregTechAPI.sThaumcraftCompat != null) + GregTechAPI.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); + return rStack; + } + + @Override + @SideOnly(Side.CLIENT) + public final void registerIcons(IIconRegister aIconRegister) { + short j = (short) mEnabledItems.length(); + mIconList.clear(); + mIconList.ensureCapacity(j); + for (short i = 0; i < j; i++) { + if (mEnabledItems.get(i)) { + mIconList.add(aIconRegister.registerIcon(GGConstants.RES_PATH_ITEM + getUnlocalizedName() + "/" + i)); + } else { + mIconList.add(null); + } + } + } + + @Override + public IIcon getIconFromDamage(int aMetaData) { + if (aMetaData < 0 || aMetaData >= mIconList.size() || mIconList.get(aMetaData) == null) + return super.getIconFromDamage(aMetaData); + return mIconList.get(aMetaData); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { + int j = mEnabledItems.length(); + for (int i = 0; i < j; i++) { + if (mVisibleItems.get(i) || (D1 && mEnabledItems.get(i))) { + ItemStack tStack = new ItemStack(this, 1, i); + isItemStackUsable(tStack); + aList.add(tStack); + } + } + } + + @Override + public Long[] getElectricStats(ItemStack aStack) { + return null; + } + + @Override + public Long[] getFluidContainerStats(ItemStack aStack) { + return null; + } +} diff --git a/src/main/java/ggfab/mte/MTEAdvAssLine.java b/src/main/java/ggfab/mte/MTEAdvAssLine.java new file mode 100644 index 0000000000..a2fb0d2896 --- /dev/null +++ b/src/main/java/ggfab/mte/MTEAdvAssLine.java @@ -0,0 +1,1106 @@ +package ggfab.mte; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockUnlocalizedName; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE; +import static ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE_ACTIVE; +import static ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE_ACTIVE_GLOW; +import static ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE_GLOW; +import static ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE_STUCK; +import static ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE_STUCK_GLOW; +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.ExoticEnergy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.IntStream; + +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagInt; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.StringUtils; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.widget.ISyncedWidget; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import ggfab.ConfigurationHandler; +import ggfab.GGConstants; +import ggfab.mui.ClickableTextWidget; +import ggfab.util.OverclockHelper; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.VoidingMode; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDataAccess; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEHatchMultiInput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.AssemblyLineUtils; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.GTWaila; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.common.tileentities.machines.MTEHatchInputBusME; +import gregtech.common.tileentities.machines.MTEHatchInputME; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +/* + * Dev note: 1. This multi will be an assline but with greater throughput. it will take one input every 2. + */ +public class MTEAdvAssLine extends MTEExtendedPowerMultiBlockBase implements ISurvivalConstructable { + + private static final ItemStack NOT_CHECKED = new ItemStack(Blocks.dirt); + private static final String STRUCTURE_PIECE_FIRST = "first"; + private static final String STRUCTURE_PIECE_LATER = "later"; + private static final String STRUCTURE_PIECE_LAST = "last"; + public static final String TAG_KEY_CURRENT_STICK = "mCurrentStick"; + public static final String TAG_KEY_PROGRESS_TIMES = "mProgressTimeArray"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + // @formatter:off + .addShape( + STRUCTURE_PIECE_FIRST, + transpose(new String[][] { + { " ", "e", " " }, + { "~", "l", "G" }, + { "g", "m", "g" }, + { "b", "i", "b" }, + })) + .addShape( + STRUCTURE_PIECE_LATER, + transpose(new String[][] { + { " ", "e", " " }, + { "d", "l", "d" }, + { "g", "m", "g" }, + { "b", "I", "b" }, + })) + .addShape( + STRUCTURE_PIECE_LAST, + transpose(new String[][] { + { " ", "e", " " }, + { "d", "l", "d" }, + { "g", "m", "g" }, + { "o", "i", "b" }, + })) + // @formatter:on + .addElement('G', ofBlock(GregTechAPI.sBlockCasings3, 10)) // grate machine casing + .addElement('l', ofBlock(GregTechAPI.sBlockCasings2, 9)) // assembler machine casing + .addElement('m', ofBlock(GregTechAPI.sBlockCasings2, 5)) // assembling line casing + .addElement( + 'g', + ofChain( + ofBlockUnlocalizedName("IC2", "blockAlloyGlass", 0, true), + ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 0, true), + // warded glass + ofBlockUnlocalizedName("Thaumcraft", "blockCosmeticOpaque", 2, false))) + .addElement( + 'e', + ofChain( + Energy.or(ExoticEnergy) + .newAny(16, 1, ForgeDirection.UP, ForgeDirection.NORTH, ForgeDirection.SOUTH), + ofBlock(GregTechAPI.sBlockCasings2, 0))) + .addElement( + 'd', + buildHatchAdder(MTEAdvAssLine.class).atLeast(DataHatchElement.DataAccess) + .dot(2) + .casingIndex(42) + .allowOnly(ForgeDirection.NORTH) + .buildAndChain(GregTechAPI.sBlockCasings3, 10)) + .addElement( + 'b', + buildHatchAdder(MTEAdvAssLine.class).atLeast(InputHatch, InputHatch, InputHatch, InputHatch, Maintenance) + .casingIndex(16) + .dot(3) + .allowOnly(ForgeDirection.DOWN) + .buildAndChain( + ofBlock(GregTechAPI.sBlockCasings2, 0), + ofHatchAdder(MTEAdvAssLine::addOutputToMachineList, 16, 4))) + .addElement( + 'I', + ofChain( + // all blocks nearby use solid steel casing, so let's use the texture of that + InputBus.newAny(16, 5, ForgeDirection.DOWN), + ofHatchAdder(MTEAdvAssLine::addOutputToMachineList, 16, 4))) + .addElement('i', InputBus.newAny(16, 5, ForgeDirection.DOWN)) + .addElement('o', OutputBus.newAny(16, 4, ForgeDirection.DOWN)) + .build(); + private ItemStack currentStick; + private GTRecipe.RecipeAssemblyLine currentRecipe; + private final Slice[] slices = IntStream.range(0, 16) + .mapToObj(Slice::new) + .toArray(Slice[]::new); + private boolean processing; + private long inputVoltage; + // surely no one is using more EUt than this, no? + private long inputEUt; + private long baseEUt; + private boolean stuck; + + private final List mDataAccessHatches = new ArrayList<>(); + private Map curBatchItemsFromME; + private Map curBatchFluidsFromME; + private int currentInputLength; + private String lastStopReason = ""; + private int currentRecipeParallel = 1; + // Batch mode will increase parallel per slice to try to get as close as possible to this amount of ticks + // per slice, but will never go over this amount. + private static final int BATCH_MODE_DESIRED_TICKS_PER_SLICE = 128; + + public MTEAdvAssLine(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEAdvAssLine(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAdvAssLine(mName); + } + + public boolean addDataAccessToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchDataAccess) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mDataAccessHatches.add((MTEHatchDataAccess) aMetaTileEntity); + } + return false; + } + + private boolean checkMachine() { + return checkMachine(true) || checkMachine(false); + } + + private boolean checkMachine(boolean leftToRight) { + clearHatches(); + if (!checkPiece(STRUCTURE_PIECE_FIRST, 0, 1, 0)) return false; + for (int i = 1; i < 16; i++) { + if (!checkPiece(STRUCTURE_PIECE_LATER, leftToRight ? -i : i, 1, 0)) return false; + if (!mOutputBusses.isEmpty()) + return (!mEnergyHatches.isEmpty() || !mExoticEnergyHatches.isEmpty()) && mMaintenanceHatches.size() == 1 + && mDataAccessHatches.size() <= 1; + } + return false; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_FIRST, stackSize, hintsOnly, 0, 1, 0); + int tLength = Math.min(stackSize.stackSize + 3, 16); // render 4 slices at minimal + for (int i = 1; i < tLength; i++) { + buildPiece(STRUCTURE_PIECE_LATER, stackSize, hintsOnly, -i, 1, 0); + } + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int build = survivialBuildPiece(STRUCTURE_PIECE_FIRST, stackSize, 0, 1, 0, elementBudget, env, false, true); + if (build >= 0) return build; + int tLength = Math.min(stackSize.stackSize + 3, 16); // render 4 slices at minimal + for (int i = 1; i < tLength - 1; i++) { + build = survivialBuildPiece(STRUCTURE_PIECE_LATER, stackSize, -i, 1, 0, elementBudget, env, false, true); + if (build >= 0) return build; + } + return survivialBuildPiece(STRUCTURE_PIECE_LAST, stackSize, 1 - tLength, 1, 0, elementBudget, env, false, true); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (stuck) { + return new ITexture[] { casingTexturePages[0][16], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ADV_ASSLINE_STUCK) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ADV_ASSLINE_STUCK_GLOW) + .extFacing() + .glow() + .build() }; + } + if (aActive) return new ITexture[] { casingTexturePages[0][16], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ADV_ASSLINE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ADV_ASSLINE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][16], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ADV_ASSLINE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ADV_ASSLINE_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][16] }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Assembling Line") + .addInfo("Controller block for the Advanced Assembling Line") + .addInfo("Built exactly the same as standard Assembling Line") + .addInfo("Place in world to get more info. It will be a lengthy read.") + .addInfo("Assembling Line with item pipelining") + .addInfo("All fluids are however consumed at start") + .addInfo("Use voltage of worst energy hatch for overclocking") + .addInfo("EU/t is (number of slices working) * (overclocked EU/t)") + .addSeparator() + .beginVariableStructureBlock(5, 16, 4, 4, 3, 3, false) + .addStructureInfo("From Bottom to Top, Left to Right") + .addStructureInfo( + "Layer 1 - Solid Steel Machine Casing, Input Bus (last can be Output Bus), Solid Steel Machine Casing") + .addStructureInfo( + "Layer 2 - Borosilicate Glass(any)/Warded Glass/Reinforced Glass, Assembling Line Casing, Reinforced Glass") + .addStructureInfo("Layer 3 - Grate Machine Casing, Assembler Machine Casing, Grate Machine Casing") + .addStructureInfo("Layer 4 - Empty, Solid Steel Machine Casing, Empty") + .addStructureInfo("Up to 16 repeating slices, each one allows for 1 more item in recipes") + .addController("Either Grate on layer 3 of the first slice") + .addEnergyHatch("Any layer 4 casing", 1) + .addMaintenanceHatch("Any layer 1 casing", 3) + .addInputBus("As specified on layer 1", 4, 5) + .addInputHatch("Any layer 1 casing", 3) + .addOutputBus("Replaces Input Bus on final slice or on any solid steel casing on layer 1", 4) + .addOtherStructurePart("Data Access Hatch", "Optional, next to controller", 2) + .toolTipFinisher(GGConstants.GGMARK); + return tt; + } + + private void setCurrentRecipe(ItemStack stick, GTRecipe.RecipeAssemblyLine recipe) { + currentRecipe = recipe; + currentStick = stick; + currentInputLength = recipe.mInputs.length; + } + + private void clearCurrentRecipe() { + currentRecipe = null; + currentStick = null; + currentInputLength = -1; + currentRecipeParallel = 1; + stuck = false; + baseEUt = 0; + for (Slice slice : slices) { + slice.reset(); + } + mMaxProgresstime = 0; + getBaseMetaTileEntity().issueClientUpdate(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setString("lastStop", lastStopReason); + // we need to check for active here. + // if machine was turned off via soft mallet it will not call checkRecipe() on recipe end + // in that case we don't have a current recipe, so this should be ignored + if (getBaseMetaTileEntity().isActive() && GTUtility.isStackValid(currentStick)) { + aNBT.setTag(TAG_KEY_CURRENT_STICK, currentStick.writeToNBT(new NBTTagCompound())); + aNBT.setInteger("mRecipeHash", currentRecipe.getPersistentHash()); + aNBT.setIntArray( + TAG_KEY_PROGRESS_TIMES, + Arrays.stream(slices) + .limit(currentInputLength) + .mapToInt(s -> s.progress) + .toArray()); + aNBT.setBoolean("stuck", stuck); + aNBT.setLong("inputV", inputVoltage); + aNBT.setLong("inputEU", inputEUt); + aNBT.setLong("baseEU", baseEUt); + aNBT.setInteger("currentParallel", currentRecipeParallel); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + lastStopReason = aNBT.getString("lastStop"); + ItemStack loadedStack = null; + GTRecipe.RecipeAssemblyLine recipe = null; + if (aNBT.hasKey(TAG_KEY_PROGRESS_TIMES, Constants.NBT.TAG_INT_ARRAY)) { + int[] arr = aNBT.getIntArray(TAG_KEY_PROGRESS_TIMES); + for (int i = 0; i < slices.length; i++) { + if (i < arr.length) { + slices[i].progress = arr[i]; + if (arr[i] == 0) + // this will be synced to client by first MTE packet to client + stuck = true; + } else slices[i].reset(); + } + } + if (aNBT.hasKey(TAG_KEY_CURRENT_STICK, Constants.NBT.TAG_COMPOUND)) { + loadedStack = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag(TAG_KEY_CURRENT_STICK)); + AssemblyLineUtils.LookupResult lookupResult = AssemblyLineUtils + .findAssemblyLineRecipeFromDataStick(loadedStack, false); + switch (lookupResult.getType()) { + case VALID_STACK_AND_VALID_HASH: + recipe = lookupResult.getRecipe(); + stuck = aNBT.getBoolean("stuck"); + inputVoltage = aNBT.getLong("inputV"); + inputEUt = aNBT.getLong("inputEU"); + baseEUt = aNBT.getLong("baseEU"); + currentRecipeParallel = aNBT.getInteger("currentParallel"); + if (inputVoltage <= 0 || inputEUt <= 0 || baseEUt >= 0) { + criticalStopMachine("ggfab.gui.advassline.shutdown.load.energy"); + loadedStack = null; + recipe = null; + } + break; + case VALID_STACK_AND_VALID_RECIPE: + // recipe is there, but it has been changed. to prevent issues, abort the current recipe + // TODO finish the last recipe instead of aborting + default: + // recipe is gone. to prevent issues, abort the current recipe + criticalStopMachine("ggfab.gui.advassline.shutdown.load.recipe"); + loadedStack = null; + break; + } + } + if (loadedStack == null || recipe == null) clearCurrentRecipe(); + else setCurrentRecipe(loadedStack, recipe); + } + + /** + * roughly the same as {@link #criticalStopMachine()}, but does not attempt to send a halting sound if world is not + * loaded. also supports setting a stop reason + */ + private void criticalStopMachine(String reason) { + int oMaxProgresstime = mMaxProgresstime; + stopMachine(); + // don't do these at all if the machine wasn't working before anyway + if (oMaxProgresstime > 0) { + if (getBaseMetaTileEntity().getWorld() != null) sendSound(INTERRUPT_SOUND_INDEX); + getBaseMetaTileEntity().setShutdownStatus(true); + lastStopReason = reason; + } + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public void clearHatches() { + super.clearHatches(); + mExoticEnergyHatches.clear(); + mDataAccessHatches.clear(); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + if (checkMachine() && (mEnergyHatches.size() > 0 || mExoticEnergyHatches.size() > 0)) { + long oV = inputVoltage, oEut = inputEUt; + inputVoltage = Integer.MAX_VALUE; + inputEUt = 0; + mEnergyHatches.forEach(this::recordEnergySupplier); + mExoticEnergyHatches.forEach(this::recordEnergySupplier); + if (mMaxProgresstime > 0 && (oV != inputVoltage || oEut != inputEUt)) { + criticalStopMachine("ggfab.gui.advassline.shutdown.structure"); + } + return true; + } else { + inputVoltage = V[0]; + return false; + } + } + + private void recordEnergySupplier(MTEHatch hatch) { + if (!hatch.isValid()) return; + inputEUt += hatch.maxEUInput() * hatch.maxWorkingAmperesIn(); + inputVoltage = Math.min(inputVoltage, hatch.maxEUInput()); + if (inputEUt < 0) inputEUt = Long.MAX_VALUE; + } + + @Override + protected void startRecipeProcessing() { + if (!processing) { + super.startRecipeProcessing(); + curBatchItemsFromME = getStoredInputsFromME(); + curBatchFluidsFromME = getStoredFluidsFromME(); + processing = true; + } + } + + @Override + protected void endRecipeProcessing() { + if (!processing) return; + super.endRecipeProcessing(); + processing = false; + } + + @Override + public void onValueUpdate(byte aValue) { + boolean oStuck = stuck; + stuck = (aValue & 1) == 1; + if (oStuck != stuck) getBaseMetaTileEntity().issueTextureUpdate(); + } + + @Override + public byte getUpdateData() { + return (byte) (stuck ? 1 : 0); + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + /* + * SliceStatusWidget[] arr = + * Arrays.stream(slices).map(SliceStatusWidget::new).toArray(SliceStatusWidget[]::new); + * screenElements.widgets(arr); screenElements.widget(new FakeSyncWidget.IntegerSyncer(() -> currentInputLength, + * l -> { currentInputLength = l; for (SliceStatusWidget w : arr) { w.updateText(); } })); + */ + screenElements.widget( + new TextWidget(Text.localised("ggfab.gui.advassline.shutdown")).setEnabled(this::hasAbnormalStopReason)); + screenElements.widget( + new TextWidget().setTextSupplier(() -> Text.localised(lastStopReason)) + .attachSyncer( + new FakeSyncWidget.StringSyncer(() -> lastStopReason, r -> this.lastStopReason = r), + screenElements) + .setEnabled(this::hasAbnormalStopReason)); + screenElements.widget( + new ClickableTextWidget( + Text.localised("ggfab.gui.advassline.shutdown_clear") + .alignment(Alignment.CenterLeft)).setMarginInLines(0) + .setOnClick((d, w) -> lastStopReason = "") + .setSize(36, 20) + .setEnabled(this::hasAbnormalStopReason)); + } + + private Boolean hasAbnormalStopReason(Widget w) { + return !StringUtils.isNullOrEmpty(lastStopReason); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.assemblylineVisualRecipes; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (currentRecipe == null) { + criticalStopMachine("ggfab.gui.advassline.shutdown.recipe_null"); + return false; + } + for (MTEHatchDataAccess hatch_dataAccess : mDataAccessHatches) { + hatch_dataAccess.setActive(true); + } + + if (mInputBusses.size() < currentInputLength) { + criticalStopMachine("ggfab.gui.advassline.shutdown.input_busses"); + return false; + } + boolean oStuck = stuck; + stuck = false; + + for (int i = slices.length - 1; i >= 0; i--) { + slices[i].tick(); + } + + if (oStuck != stuck) + // send the status as it has changed + getBaseMetaTileEntity().issueClientUpdate(); + + if (getBaseMetaTileEntity().isAllowedToWork() && slices[0].progress < 0) { + startRecipeProcessing(); + if (hasAllItems(currentRecipe, this.currentRecipeParallel) + && hasAllFluids(currentRecipe, this.currentRecipeParallel) + && slices[0].start()) { + drainAllFluids(currentRecipe, this.currentRecipeParallel); + mProgresstime = 0; + } + } + + boolean foundWorking = false; + int working = 0; + for (Slice slice : slices) { + if (slice.progress >= 0) { + if (!foundWorking) { + foundWorking = true; + mProgresstime = (slice.id + 1) * (mMaxProgresstime / currentInputLength) - slice.progress; + } + } + if (slice.progress > 0) working++; + } + lEUt = working * baseEUt; + + if (lEUt > 0) { + // overflow again :( + lEUt = Long.MIN_VALUE; + for (int i = 0; i < working; i++) { + if (!drainEnergyInput(-baseEUt)) { + criticalStopMachine("ggfab.gui.advassline.shutdown.energy"); + return false; + } + } + } else { + if (!super.onRunningTick(aStack)) return false; + } + + endRecipeProcessing(); + return true; + } + + private ItemStack getInputBusContent(int index) { + if (index < 0 || index >= mInputBusses.size()) return null; + MTEHatchInputBus inputBus = mInputBusses.get(index); + if (!inputBus.isValid()) return null; + if (inputBus instanceof MTEHatchInputBusME meBus) { + ItemStack item = meBus.getShadowItemStack(0); + if (item == null) return null; + GTUtility.ItemId id = GTUtility.ItemId.createNoCopy(item); + if (!curBatchItemsFromME.containsKey(id)) return null; + return curBatchItemsFromME.get(id); + } + return inputBus.getStackInSlot(0); + + } + + private FluidStack getInputHatchContent(int index) { + if (index < 0 || index >= mInputHatches.size()) return null; + MTEHatchInput inputHatch = mInputHatches.get(index); + if (!inputHatch.isValid()) return null; + if (inputHatch instanceof MTEHatchInputME meHatch) { + FluidStack fluid = meHatch.getShadowFluidStack(0); + if (fluid == null) return null; + if (!curBatchFluidsFromME.containsKey(fluid.getFluid())) return null; + return curBatchFluidsFromME.get(fluid.getFluid()); + } + if (inputHatch instanceof MTEHatchMultiInput multiHatch) { + return multiHatch.getFluid(0); + } + return inputHatch.getFillableStack(); + } + + private GTRecipe.RecipeAssemblyLine findRecipe(ItemStack tDataStick) { + AssemblyLineUtils.LookupResult tLookupResult = AssemblyLineUtils + .findAssemblyLineRecipeFromDataStick(tDataStick, false); + + if (tLookupResult.getType() == AssemblyLineUtils.LookupResultType.INVALID_STICK) return null; + + GTRecipe.RecipeAssemblyLine tRecipe = tLookupResult.getRecipe(); + // Check if the recipe on the data stick is the current recipe for it's given output, if not we update it + // and continue to next. + if (tLookupResult.getType() != AssemblyLineUtils.LookupResultType.VALID_STACK_AND_VALID_HASH) { + tRecipe = AssemblyLineUtils.processDataStick(tDataStick); + if (tRecipe == null) { + return null; + } + } + + // So here we check against the recipe found on the data stick. + // If we run into missing buses/hatches or bad inputs, we go to the next data stick. + // This check only happens if we have a valid up-to-date data stick. + + // Check item Inputs align. For this we do not need to consider batch mode parallels yet, this will be done + // later on during recipe start. + if (!hasAllItems(tRecipe, 1)) return null; + + // Check Fluid Inputs align. Again, do not consider parallels + if (!hasAllFluids(tRecipe, 1)) return null; + + if (GTValues.D1) { + GT_FML_LOGGER.info("Check overclock"); + } + if (GTValues.D1) { + GT_FML_LOGGER.info("Find available recipe"); + } + return tRecipe; + } + + private boolean hasAllItems(GTRecipe.RecipeAssemblyLine tRecipe, int parallel) { + int aItemCount = tRecipe.mInputs.length; + if (mInputBusses.size() < aItemCount) return false; + int[] itemConsumptions = GTRecipe.RecipeAssemblyLine.getItemConsumptionAmountArray(mInputBusses, tRecipe); + if (itemConsumptions == null || itemConsumptions.length == 0) { + return false; + } + int maxParallel = (int) GTRecipe.RecipeAssemblyLine + .maxParallelCalculatedByInputItems(mInputBusses, parallel, itemConsumptions, curBatchItemsFromME); + return maxParallel >= parallel; + } + + private boolean hasAllFluids(GTRecipe.RecipeAssemblyLine tRecipe, int parallel) { + int aFluidCount = tRecipe.mFluidInputs.length; + if (mInputHatches.size() < aFluidCount) return false; + int maxParallel = (int) GTRecipe.RecipeAssemblyLine + .maxParallelCalculatedByInputFluids(mInputHatches, parallel, tRecipe.mFluidInputs, curBatchFluidsFromME); + return maxParallel >= parallel; + } + + /** + * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb + */ + private boolean isCorrectDataItem(ItemStack aStack, int state) { + if ((state & 1) != 0 && ItemList.Circuit_Integrated.isStackEqual(aStack, true, true)) return true; + if ((state & 2) != 0 && ItemList.Tool_DataStick.isStackEqual(aStack, false, true)) return true; + return (state & 4) != 0 && ItemList.Tool_DataOrb.isStackEqual(aStack, false, true); + } + + /** + * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb + */ + public ArrayList getDataItems(int state) { + ArrayList rList = new ArrayList<>(); + if (GTUtility.isStackValid(mInventory[1]) && isCorrectDataItem(mInventory[1], state)) { + rList.add(mInventory[1]); + } + for (MTEHatchDataAccess tHatch : mDataAccessHatches) { + if (tHatch.isValid()) { + for (int i = 0; i < tHatch.getBaseMetaTileEntity() + .getSizeInventory(); i++) { + if (tHatch.getBaseMetaTileEntity() + .getStackInSlot(i) != null && isCorrectDataItem( + tHatch.getBaseMetaTileEntity() + .getStackInSlot(i), + state)) + rList.add( + tHatch.getBaseMetaTileEntity() + .getStackInSlot(i)); + } + } + } + return rList; + } + + // this is only called when all slices have finished their work + // and the first slice cannot find a input/fluid cannot be found + // so we are safe to assume the old recipe no longer works + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + if (GTValues.D1) { + GT_FML_LOGGER.info("Start Adv ALine recipe check"); + } + clearCurrentRecipe(); + CheckRecipeResult result = CheckRecipeResultRegistry.NO_DATA_STICKS; + ArrayList tDataStickList = getDataItems(2); + if (tDataStickList.isEmpty()) { + return result; + } + if (GTValues.D1) { + GT_FML_LOGGER.info("Stick accepted, " + tDataStickList.size() + " Data Sticks found"); + } + + GTRecipe.RecipeAssemblyLine recipe = null; + + for (ItemStack stack : tDataStickList) { + recipe = findRecipe(stack); + if (recipe == null) { + result = CheckRecipeResultRegistry.NO_RECIPE; + continue; + } + if (recipe.mEUt > inputVoltage) { + result = CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + continue; + } + + setCurrentRecipe(stack, recipe); + // first overclock normally + // we use the new oc calculator instead + // calculateOverclockedNessMulti from super class has a mysterious 5% cable loss thing at the moment + // of writing + OverclockCalculator ocCalc = new OverclockCalculator().setRecipeEUt(currentRecipe.mEUt) + .setDuration(Math.max(recipe.mDuration / recipe.mInputs.length, 1)) + .setEUt(inputVoltage) + .calculate(); + // since we already checked mEUt <= inputVoltage, no need to check if recipe is too OP + lEUt = ocCalc.getConsumption(); + mMaxProgresstime = ocCalc.getDuration(); + // then laser overclock if needed + if (!mExoticEnergyHatches.isEmpty()) { + OverclockHelper.OverclockOutput laserOverclock = OverclockHelper.laserOverclock( + lEUt, + mMaxProgresstime, + inputEUt / recipe.mInputs.length, + ConfigurationHandler.INSTANCE.getLaserOCPenaltyFactor()); + if (laserOverclock != null) { + lEUt = laserOverclock.getEUt(); + mMaxProgresstime = laserOverclock.getDuration(); + } + } + // Save this for batch mode parallel calculations + int timePerSlice = mMaxProgresstime; + // correct the recipe duration + mMaxProgresstime *= recipe.mInputs.length; + + // Finally apply batch mode parallels if possible. + // For this we need to verify the first item slot and all fluids slots have enough resources + // to execute parallels. + // Note that we skip this entirely if the time for each slice is more than + // BATCH_MODE_DESIRED_TICKS_PER_SLICE ticks, since in this case the amount of batches will always be 1 + if (super.isBatchModeEnabled() && timePerSlice < BATCH_MODE_DESIRED_TICKS_PER_SLICE) { + // Calculate parallel based on time per slice, and the amount of fluid in the first fluid slot. + // We use fluid, since this way players can limit parallel by controlling how much fluid + // ends up in each AAL. This way, batch mode will not slow down setups where multiple AAL + // are connected to the same set of input items. Note that this will still suffer from the same + // issue if using stocking hatch, but in this case increasing pattern size can help. + + // Note that every assline recipe has a fluid ingredient. + FluidStack firstFluidSlot = getInputHatchContent(0); + if (firstFluidSlot == null) { + result = CheckRecipeResultRegistry.INTERNAL_ERROR; + break; + } + int recipesAvailable = Math.floorDiv(firstFluidSlot.amount, recipe.mFluidInputs[0].amount); + // Divide recipes available by the amount of slices in the recipe. This will prevent the AAL from + // batching instead of parallelizing, which would make it effectively slower. + recipesAvailable = Math.floorDiv(recipesAvailable, recipe.mInputs.length); + // Sanity check to avoid this being zero when there is only one recipe available. + recipesAvailable = Math.max(recipesAvailable, 1); + int desiredBatches = Math.floorDiv(BATCH_MODE_DESIRED_TICKS_PER_SLICE, timePerSlice); + // Limit the amount of parallel to both the amount of recipes available and the maximum number + // of batches we want to run. The latter is done to prevent batch mode from ever going above + // BATCH_MODE_DESIRED_TICKS_PER_SLICE ticks per slice (see also where it is defined above). + int parallel = Math.min(recipesAvailable, desiredBatches); + if (hasAllFluids(recipe, parallel) && hasAllItems(recipe, parallel)) { + this.currentRecipeParallel = parallel; + // Update recipe duration with final batch mode multiplier + mMaxProgresstime *= this.currentRecipeParallel; + } + } + result = CheckRecipeResultRegistry.SUCCESSFUL; + break; + } + if (!result.wasSuccessful()) { + clearCurrentRecipe(); + return result; + } + if (recipe == null || !slices[0].start() || currentRecipeParallel <= 0) { + clearCurrentRecipe(); + // something very very wrong... + return CheckRecipeResultRegistry.INTERNAL_ERROR; + } + + if (GTValues.D1) { + GT_FML_LOGGER.info("All checked start consuming inputs"); + } + drainAllFluids(recipe, this.currentRecipeParallel); + + // Apply parallel + mOutputItems = new ItemStack[] { recipe.mOutput.copy() }; + mOutputItems[0].stackSize *= this.currentRecipeParallel; + + if (this.lEUt > 0) { + this.lEUt = -this.lEUt; + } + baseEUt = lEUt; + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + + if (GTValues.D1) { + GT_FML_LOGGER.info("Recipe successful"); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public Set getAllowedVoidingModes() { + return VoidingMode.ITEM_ONLY_MODES; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + protected boolean supportsSlotAutomation(int aSlot) { + return aSlot == getControllerSlotIndex(); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + String machineProgressString = GTWaila.getMachineProgressString( + tag.getBoolean("isActive"), + tag.getInteger("maxProgress"), + tag.getInteger("progress")); + currentTip.remove(machineProgressString); + + int duration = tag.getInteger("mDuration"); + if (tag.hasKey(TAG_KEY_PROGRESS_TIMES, Constants.NBT.TAG_LIST)) { + NBTTagList tl = tag.getTagList(TAG_KEY_PROGRESS_TIMES, Constants.NBT.TAG_INT); + @SuppressWarnings("unchecked") + List list = tl.tagList; + for (int i = 0, listSize = list.size(); i < listSize; i++) { + NBTTagInt t = list.get(i); + int progress = t.func_150287_d(); + if (progress == 0) { + currentTip.add(I18n.format("ggfab.waila.advassline.slice.stuck", i + 1)); + } else if (progress < 0) { + currentTip.add(I18n.format("ggfab.waila.advassline.slice.idle", i + 1)); + } else if (duration > 40) { + currentTip.add( + I18n.format("ggfab.waila.advassline.slice", i + 1, (duration - progress) / 20, duration / 20)); + } else { + currentTip + .add(I18n.format("ggfab.waila.advassline.slice.small", i + 1, duration - progress, duration)); + } + } + } + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + if (currentRecipe == null || !getBaseMetaTileEntity().isActive()) return; + NBTTagList l = new NBTTagList(); + for (int i = 0; i < currentInputLength; i++) { + l.appendTag(new NBTTagInt(slices[i].progress)); + } + tag.setTag(TAG_KEY_PROGRESS_TIMES, l); + tag.setInteger("mDuration", mMaxProgresstime / currentInputLength); + } + + /** + * Caller is responsible to check and ensure the hatches are there and has all the fluid needed. You will usually + * want to ensure hasAllFluid was called right before calling this, otherwise very bad things can happen. + */ + private void drainAllFluids(GTRecipe.RecipeAssemblyLine recipe, int parallel) { + GTRecipe.RecipeAssemblyLine + .consumeInputFluids(mInputHatches, parallel, recipe.mFluidInputs, curBatchFluidsFromME); + for (MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) tHatch.updateSlots(); + } + + @Override + public void stopMachine(@NotNull ShutDownReason reason) { + clearCurrentRecipe(); + super.stopMachine(reason); + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + batchMode = !batchMode; + if (batchMode) { + GTUtility.sendChatToPlayer(aPlayer, "Batch mode enabled"); + } else { + GTUtility.sendChatToPlayer(aPlayer, "Batch mode disabled"); + } + } + return true; + } + + private class SliceStatusWidget extends TextWidget implements ISyncedWidget { + + private final Slice slice; + private int lastProgress = -2; + private Text text; + + private SliceStatusWidget(Slice slice) { + this.slice = slice; + updateText(); + setEnabled(w -> slice.progress == 0 && currentInputLength > slice.id); + } + + @Override + public Text getText() { + return text; + } + + @Override + public void readOnClient(int id, PacketBuffer buf) { + if (id == 0) { + slice.progress = buf.readVarIntFromBuffer(); + updateText(); + checkNeedsRebuild(); + } + } + + public void updateText() { + String type = "unknown"; + if (slice.progress == 0) type = "stuck"; + else if (slice.progress < 0) type = "idle"; + text = Text.localised("ggfab.gui.advassline.slice." + type, slice.id); + } + + @Override + public void readOnServer(int id, PacketBuffer buf) {} + + @Override + public void detectAndSendChanges(boolean init) { + if (slice.progress != lastProgress) { + // suppress small normal progress update + if (slice.progress > 0 && lastProgress > 0 && lastProgress - slice.progress < 10) return; + lastProgress = slice.progress; + syncToClient(0, b -> b.writeVarIntToBuffer(slice.progress)); + } + } + + @Override + public void markForUpdate() {} + + @Override + public void unMarkForUpdate() {} + + @Override + public boolean isMarkedForUpdate() { + return false; + } + } + + private class Slice { + + private final int id; + private int progress = -1; + + public Slice(int id) { + this.id = id; + } + + public void reset() { + progress = -1; + } + + public void tick() { + if (progress < 0) return; + if (progress == 0 || --progress == 0) { + // id==0 will be end of chain if 1 input, so we need a +1 here + if (id + 1 >= currentInputLength) { + // use previously calculated parallel output + ItemStack output = mOutputItems[0]; + if (addOutput(output) || !voidingMode.protectItem) reset(); + else stuck = true; + } else { + if (slices[id + 1].start()) reset(); + else stuck = true; + } + } + } + + public boolean start() { + if (progress >= 0) return false; + startRecipeProcessing(); + ItemStack stack = getInputBusContent(id); + if (stack == null) return false; + int size = GTRecipe.RecipeAssemblyLine + .getMatchedIngredientAmount(stack, currentRecipe.mInputs[id], currentRecipe.mOreDictAlt[id]); + if (size < 0 || stack.stackSize < size * currentRecipeParallel) return false; + progress = mMaxProgresstime / currentInputLength; + stack.stackSize -= size * currentRecipeParallel; + mInputBusses.get(id) + .updateSlots(); + return true; + } + + @Override + public String toString() { + return "Slice{" + "id=" + id + ", progress=" + progress + '}'; + } + } + + private enum DataHatchElement implements IHatchElement { + + DataAccess; + + @Override + public List> mteClasses() { + return Collections.singletonList(MTEHatchDataAccess.class); + } + + @Override + public IGTHatchAdder adder() { + return MTEAdvAssLine::addDataAccessToMachineList; + } + + @Override + public long count(MTEAdvAssLine t) { + return t.mDataAccessHatches.size(); + } + } +} diff --git a/src/main/java/ggfab/mte/MTELinkedInputBus.java b/src/main/java/ggfab/mte/MTELinkedInputBus.java new file mode 100644 index 0000000000..0e84c4967d --- /dev/null +++ b/src/main/java/ggfab/mte/MTELinkedInputBus.java @@ -0,0 +1,683 @@ +package ggfab.mte; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; + +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.WorldSavedData; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; + +import ggfab.GGConstants; +import gregtech.api.enums.ItemList; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IDataCopyable; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.tileentities.machines.IRecipeProcessingAwareHatch; + +public class MTELinkedInputBus extends MTEHatchInputBus implements IRecipeProcessingAwareHatch, IDataCopyable { + + public static final int SIZE_INVENTORY = 18; + public static final String COPIED_DATA_IDENTIFIER = "linkedinputbus"; + private SharedInventory mRealInventory; + private final ItemStackHandlerProxy handler = new ItemStackHandlerProxy(); + private String mChannel; + private boolean mPrivate; + private State mState; + private WorldSave save; + + public MTELinkedInputBus(int id, String name, String nameRegional, int tier) { + super( + id, + name, + nameRegional, + tier, + 1, + new String[] { SIZE_INVENTORY + " slot input bus linked together wirelessly", + "Link does not cross world boundary", "Left/right click with data stick to copy/paste configuration", + GGConstants.GGMARK_TOOLTIP, }); + } + + public MTELinkedInputBus(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELinkedInputBus(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public int getCircuitSlot() { + return 0; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new TextFieldWidget().setSynced(true, true) + .setGetter(() -> mChannel == null ? "" : mChannel) + .setSetter(this::setChannel) + .setTextColor(Color.WHITE.dark(1)) + .setTextAlignment(Alignment.CenterLeft) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .setGTTooltip(() -> mTooltipCache.getData("ggfab.tooltip.linked_input_bus.change_freq_warn")) + .setSize(60, 18) + .setPos(48, 3)) + .widget( + new CycleButtonWidget().setToggle(this::isPrivate, this::setPrivate) + .setTextureGetter( + i -> i == 1 ? GTUITextures.OVERLAY_BUTTON_CHECKMARK : GTUITextures.OVERLAY_BUTTON_CROSS) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setSynced(true, true) + .setGTTooltip(() -> mTooltipCache.getData("ggfab.tooltip.linked_input_bus.private")) + .setSize(18, 18) + .setPos(150, 3)) + .widget( + SlotGroup.ofItemHandler(handler, 9) + .startFromSlot(0) + .endAtSlot(SIZE_INVENTORY - 1) + .background(getGUITextureSet().getItemSlot()) + .slotCreator(i -> new BaseSlot(handler, i, false) { + + @Override + public ItemStack getStack() { + return isEnabled() ? super.getStack() : null; + } + + @Override + public boolean isEnabled() { + return mChannel != null; + } + }) + .build() + .setPos(7, 24)) + .widget( + new TextWidget(new Text("Private")).setPos(110, 3) + .setSize(43, 20)) + .widget( + new TextWidget(new Text("Channel")).setPos(5, 3) + .setSize(43, 20)); + } + + @Override + public int getCircuitSlotX() { + return 152; + } + + @Override + public ItemStack getStackInSlot(int aIndex) { + if (aIndex == getCircuitSlot()) return super.getStackInSlot(aIndex); + if (mState != State.Blocked && mChannel != null && mRealInventory != null) { + if (aIndex > 0 && aIndex <= SIZE_INVENTORY) return mRealInventory.stacks[aIndex - 1]; + } + return null; + } + + @Override + public void setInventorySlotContents(int aIndex, ItemStack aStack) { + if (aIndex == getCircuitSlot()) { + mInventory[0] = GTUtility.copyAmount(0, aStack); + markDirty(); + } else if (mState != State.Blocked && mChannel != null && mRealInventory != null) { + if (aIndex > 0 && aIndex <= SIZE_INVENTORY) { + mRealInventory.stacks[aIndex - 1] = aStack; + getWorldSave().markDirty(); + } + } + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return super.getTexturesActive(aBaseTexture); + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return super.getTexturesInactive(aBaseTexture); + } + + @Override + public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { + return isValidSlot(aIndex) && aStack != null + && mChannel != null + && mRealInventory != null + && aIndex > getCircuitSlot() + && aIndex < SIZE_INVENTORY + 1 + && (mRealInventory.stacks[aIndex - 1] == null + || GTUtility.areStacksEqual(aStack, mRealInventory.stacks[aIndex - 1])) + && allowPutStack(getBaseMetaTileEntity(), aIndex, ForgeDirection.getOrientation(ordinalSide), aStack); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == getBaseMetaTileEntity().getFrontFacing() && aIndex != getCircuitSlot() + && (mRecipeMap == null || disableFilter || mRecipeMap.containsInput(aStack)) + && (mRealInventory.disableLimited || limitedAllowPutStack(aIndex, aStack)); + } + + @Override + protected boolean limitedAllowPutStack(int aIndex, ItemStack aStack) { + for (int i = 0; i < SIZE_INVENTORY; i++) + if (GTUtility.areStacksEqual(GTOreDictUnificator.get_nocopy(aStack), mRealInventory.stacks[i])) + return i == aIndex - 1; + return mRealInventory.stacks[aIndex - 1] == null; + } + + @Override + public boolean canExtractItem(int aIndex, ItemStack aStack, int aSide) { + return false; + } + + @Override + public int getSizeInventory() { + if (mState != State.Blocked && mChannel != null && mRealInventory != null) return SIZE_INVENTORY + 1; + return 1; + } + + @Override + public void startRecipeProcessing() { + if (mRealInventory == null) return; + if (mRealInventory.used) { + mState = State.Blocked; + } else { + mRealInventory.used = true; + mState = State.Activated; + } + } + + @Override + public CheckRecipeResult endRecipeProcessing(MTEMultiBlockBase controller) { + if (mState == State.Activated) { + assert mRealInventory != null; + mRealInventory.used = false; + } + mState = State.Default; + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Override + public void updateSlots() { + if (mChannel == null || mRealInventory == null) return; + for (int i = 0; i < mRealInventory.stacks.length; i++) { + if (mRealInventory.stacks[i] != null + && (mRealInventory.stacks[i].getItem() == null || mRealInventory.stacks[i].stackSize <= 0)) + mRealInventory.stacks[i] = null; + } + if (!mRealInventory.disableSort) fillStacksIntoFirstSlots(); + markDirty(); + getWorldSave().markDirty(); + } + + @Override + protected void fillStacksIntoFirstSlots() { + // sanity check + if (mRealInventory == null) return; + final int L = SIZE_INVENTORY; + HashMap slots = new HashMap<>(L); + HashMap stacks = new HashMap<>(L); + List order = new ArrayList<>(L); + List validSlots = new ArrayList<>(L); + for (int i = 0; i < L; i++) { + validSlots.add(i); + ItemStack s = mRealInventory.stacks[i]; + if (s == null) continue; + GTUtility.ItemId sID = GTUtility.ItemId.createNoCopy(s); + slots.merge(sID, s.stackSize, Integer::sum); + if (!stacks.containsKey(sID)) stacks.put(sID, s); + order.add(sID); + mRealInventory.stacks[i] = null; + } + int slotindex = 0; + for (GTUtility.ItemId sID : order) { + int toSet = slots.get(sID); + if (toSet == 0) continue; + int slot = validSlots.get(slotindex); + slotindex++; + mRealInventory.stacks[slot] = stacks.get(sID) + .copy(); + toSet = Math.min(toSet, mRealInventory.stacks[slot].getMaxStackSize()); + mRealInventory.stacks[slot].stackSize = toSet; + slots.merge(sID, toSet, (a, b) -> a - b); + } + } + + private void dropItems(ItemStack[] aStacks) { + for (ItemStack stack : aStacks) { + if (!GTUtility.isStackValid(stack)) continue; + EntityItem ei = new EntityItem( + getBaseMetaTileEntity().getWorld(), + getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 1) + 0.5, + getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 1) + 0.5, + getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 1) + 0.5, + stack); + ei.motionX = ei.motionY = ei.motionZ = 0; + getBaseMetaTileEntity().getWorld() + .spawnEntityInWorld(ei); + } + } + + @Override + public boolean shouldDropItemAt(int index) { + // NOTE by this time onBlockDestroyed has already been called, i.e. so ref has already been decremented. + // so we really should check for ref <= 0 instead of ref <= 1 + return mRealInventory != null && mRealInventory.ref <= 0; + } + + @Override + public void onBlockDestroyed() { + super.onBlockDestroyed(); + if (mRealInventory != null) { + if (--mRealInventory.ref <= 0) getWorldSave().remove(mChannel); + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (mChannel != null) aNBT.setString("channel", mChannel); + aNBT.setBoolean("private", mPrivate); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + String channel = aNBT.getString("channel"); + if ("".equals(channel)) channel = null; + this.mChannel = channel; + mPrivate = aNBT.getBoolean("private"); + } + + public String getChannel() { + return mChannel; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + if (mChannel != null) { + mRealInventory = getWorldSave().get(getRealChannel()); + handler.set(mRealInventory.stacks); + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (!getBaseMetaTileEntity().getCoverBehaviorAtSideNew(side) + .isGUIClickable( + side, + getBaseMetaTileEntity().getCoverIDAtSide(side), + getBaseMetaTileEntity().getComplexCoverDataAtSide(side), + getBaseMetaTileEntity())) + return; + if (aPlayer.isSneaking()) { + if (this.mRealInventory == null) { + aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.no_channel")); + return; + } + if (mRealInventory.disableSort) { + mRealInventory.disableSort = false; + } else { + if (mRealInventory.disableLimited) { + mRealInventory.disableLimited = false; + } else { + mRealInventory.disableSort = true; + mRealInventory.disableLimited = true; + } + } + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.hatch.disableSort." + mRealInventory.disableSort) + " " + + StatCollector.translateToLocal("GT5U.hatch.disableLimited." + mRealInventory.disableLimited)); + } else { + this.disableFilter = !this.disableFilter; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.hatch.disableFilter." + this.disableFilter)); + } + } + + @Override + public NBTTagCompound getCopiedData(EntityPlayer player) { + if (getChannel() == null) { + return null; + } + NBTTagCompound tag = new NBTTagCompound(); + tag.setString("type", COPIED_DATA_IDENTIFIER); + tag.setString("channel", getChannel()); + tag.setTag("circuit", GTUtility.saveItem(getStackInSlot(getCircuitSlot()))); + if (isPrivate()) { + tag.setLong( + "owner1", + getBaseMetaTileEntity().getOwnerUuid() + .getMostSignificantBits()); + tag.setLong( + "owner2", + getBaseMetaTileEntity().getOwnerUuid() + .getLeastSignificantBits()); + } + return tag; + } + + @Override + public boolean pasteCopiedData(EntityPlayer player, NBTTagCompound nbt) { + // backwards compat + if (nbt == null || (!COPIED_DATA_IDENTIFIER.equals(nbt.getString("ggfab.type")) + && !COPIED_DATA_IDENTIFIER.equals(nbt.getString("type")))) { + return false; + } + ItemStack circuit = GTUtility.loadItem(nbt, "circuit"); + String channel = nbt.getString("channel"); + if (GTUtility.isStackInvalid(circuit)) circuit = null; + if ("".equals(channel)) { + return false; + } else if (circuit != null && getConfigurationCircuits().stream() + .noneMatch(circuit::isItemEqual)) { + return false; + } + UUID owner = nbt.hasKey("owner1") ? new UUID(nbt.getLong("owner1"), nbt.getLong("owner2")) : null; + if (owner != null && !owner.equals(getBaseMetaTileEntity().getOwnerUuid())) { + return false; + } + setPrivate(owner != null); + setChannel(channel); + setInventorySlotContents(getCircuitSlot(), circuit); + return true; + } + + @Override + public String getCopiedDataIdentifier(EntityPlayer player) { + return COPIED_DATA_IDENTIFIER; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + if (!(aPlayer instanceof EntityPlayerMP)) + return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + ItemStack stick = aPlayer.inventory.getCurrentItem(); + if (!ItemList.Tool_DataStick.isStackEqual(stick, false, true)) + return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + if (!stick.hasTagCompound() || !COPIED_DATA_IDENTIFIER.equals(stick.stackTagCompound.getString("ggfab.type"))) { + aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.no_data")); + return true; + } + ItemStack circuit = GTUtility.loadItem(stick.stackTagCompound, "circuit"); + String channel = stick.stackTagCompound.getString("channel"); + if (GTUtility.isStackInvalid(circuit)) circuit = null; + if ("".equals(channel)) { + aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.no_data")); + return true; + } else if (circuit != null && getConfigurationCircuits().stream() + .noneMatch(circuit::isItemEqual)) { + aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.invalid_circuit")); + return true; + } + UUID owner = stick.stackTagCompound.hasKey("owner1") + ? new UUID(stick.stackTagCompound.getLong("owner1"), stick.stackTagCompound.getLong("owner2")) + : null; + if (owner != null && !owner.equals(getBaseMetaTileEntity().getOwnerUuid())) { + aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.not_owned")); + return true; + } + setPrivate(owner != null); + setChannel(channel); + setInventorySlotContents(getCircuitSlot(), circuit); + aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.data_pasted", channel)); + return true; + } + + @Override + public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (!(aPlayer instanceof EntityPlayerMP)) return; + ItemStack stick = aPlayer.inventory.getCurrentItem(); + if (!ItemList.Tool_DataStick.isStackEqual(stick, false, true)) return; + if (getChannel() == null) { + aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.no_channel")); + return; + } + aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.data_copied", getChannel())); + stick.stackTagCompound = getCopiedData(aPlayer); + stick.setStackDisplayName("Linked Input Bus configuration"); + // abuse the title mechanism here. I assure you it will be fine (tm). + GTUtility.ItemNBT.setBookTitle(stick, "Channel: " + getChannel()); + if (getBaseMetaTileEntity().getOwnerName() != null) + GTUtility.ItemNBT.setBookAuthor(stick, getBaseMetaTileEntity().getOwnerName()); + } + + private String getRealChannel() { + if (mChannel == null) return null; + if (mPrivate) return getBaseMetaTileEntity().getOwnerUuid() + mChannel; + return new UUID(0, 0) + mChannel; + } + + public boolean isPrivate() { + return mPrivate; + } + + public void setPrivate(boolean aPrivate) { + if (aPrivate == mPrivate) return; + if (getBaseMetaTileEntity().isClientSide()) { + mPrivate = aPrivate; + return; + } + if (this.mChannel == null) { + mPrivate = aPrivate; + return; + } + getWorldSave().markDirty(); + if (--this.mRealInventory.ref <= 0) { + // last referrer, drop inventory + dropItems(mRealInventory.stacks); + getWorldSave().remove(getRealChannel()); + } + mPrivate = aPrivate; + mRealInventory = getWorldSave().get(getRealChannel()); + this.handler.set(mRealInventory.stacks); + mRealInventory.ref++; + getWorldSave().markDirty(); + } + + public void setChannel(String aChannel) { + if ("".equals(aChannel)) aChannel = null; + if (getBaseMetaTileEntity().isClientSide()) { + mChannel = aChannel; + return; + } + if (Objects.equals(this.mChannel, aChannel)) return; // noop + if (this.mChannel != null) { + if (--this.mRealInventory.ref <= 0) { + // last referrer, drop inventory + dropItems(mRealInventory.stacks); + getWorldSave().remove(getRealChannel()); + } + } + if (aChannel == null) { + this.mChannel = null; + this.mRealInventory = null; + this.handler.setFake(); + } else { + this.mChannel = aChannel; + this.mRealInventory = getWorldSave().get(getRealChannel()); + this.handler.set(mRealInventory.stacks); + mRealInventory.ref++; + } + getWorldSave().markDirty(); + } + + private WorldSave getWorldSave() { + if (save == null) { + WorldSave save = (WorldSave) getBaseMetaTileEntity().getWorld() + .loadItemData(WorldSave.class, "LinkedInputBusses"); + if (save == null) { + save = new WorldSave("LinkedInputBusses"); + getBaseMetaTileEntity().getWorld() + .setItemData(save.mapName, save); + } + this.save = save; + } + return save; + } + + private enum State { + Activated, + Blocked, + Default, + } + + private static class SharedInventory { + + private final ItemStack[] stacks; + /** + * Inventory wrapper for ModularUI + */ + private final ItemStackHandler inventoryHandler; + public boolean disableLimited = true; + public boolean disableSort; + private boolean used; + private int ref; + + public SharedInventory() { + this.stacks = new ItemStack[SIZE_INVENTORY]; + inventoryHandler = new ItemStackHandler(stacks); + } + + public SharedInventory(NBTTagCompound tag) { + this.stacks = new ItemStack[SIZE_INVENTORY]; + inventoryHandler = new ItemStackHandler(stacks); + + for (int i = 0; i < SIZE_INVENTORY; i++) { + String key = "" + i; + if (!tag.hasKey(key, Constants.NBT.TAG_COMPOUND)) continue; + stacks[i] = ItemStack.loadItemStackFromNBT(tag.getCompoundTag(key)); + } + + ref = tag.getInteger("ref"); + disableLimited = tag.getBoolean("dl"); + disableSort = tag.getBoolean("ds"); + } + + public NBTTagCompound save() { + NBTTagCompound tag = new NBTTagCompound(); + for (int i = 0; i < SIZE_INVENTORY; i++) { + ItemStack stack = stacks[i]; + if (stack == null) continue; + tag.setTag("" + i, stack.writeToNBT(new NBTTagCompound())); + } + tag.setInteger("ref", ref); + tag.setBoolean("ds", disableSort); + tag.setBoolean("dl", disableLimited); + return tag; + } + } + + public static class WorldSave extends WorldSavedData { + + private final Map data = new HashMap<>(); + + public WorldSave(String p_i2141_1_) { + super(p_i2141_1_); + } + + @Override + public void readFromNBT(NBTTagCompound tag) { + data.clear(); + @SuppressWarnings("unchecked") + Set> set = tag.tagMap.entrySet(); + for (Map.Entry e : set) { + data.put(e.getKey(), new SharedInventory((NBTTagCompound) e.getValue())); + } + } + + @Override + public void writeToNBT(NBTTagCompound tag) { + for (Map.Entry e : data.entrySet()) { + if (e.getValue().ref > 0) tag.setTag( + e.getKey(), + e.getValue() + .save()); + } + } + + public SharedInventory get(Object channel) { + return data.computeIfAbsent(channel.toString(), k -> new SharedInventory()); + } + + public void remove(Object channel) { + data.remove(channel.toString()); + markDirty(); + } + } + + private static class ItemStackHandlerProxy extends ItemStackHandler { + + private static final ItemStack[] EMPTY = new ItemStack[SIZE_INVENTORY]; + private boolean fake; + + public ItemStackHandlerProxy() { + super(EMPTY); + fake = true; + } + + public void setFake() { + set(EMPTY); + fake = true; + } + + public boolean isFake() { + return fake; + } + + public void set(ItemStack[] stacks) { + this.stacks = Arrays.asList(stacks); + fake = false; + } + + @Override + public NBTTagCompound serializeNBT() { + NBTTagCompound tag = super.serializeNBT(); + tag.setBoolean("fake", fake); + return tag; + } + + @Override + public void deserializeNBT(NBTTagCompound nbt) { + super.deserializeNBT(nbt); + fake = nbt.getBoolean("fake"); + } + } +} diff --git a/src/main/java/ggfab/mui/ClickableTextWidget.java b/src/main/java/ggfab/mui/ClickableTextWidget.java new file mode 100644 index 0000000000..03843eef31 --- /dev/null +++ b/src/main/java/ggfab/mui/ClickableTextWidget.java @@ -0,0 +1,58 @@ +package ggfab.mui; + +import java.util.Arrays; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.drawable.TextRenderer; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; + +public class ClickableTextWidget extends ButtonWidget { + + private Text caption; + private int maxLines = 1; + private int marginInLines = 1; + + public ClickableTextWidget(Text caption) { + super(); + this.caption = caption; + super.setBackground(caption); + } + + public ClickableTextWidget setText(Text caption) { + this.caption = caption; + return this; + } + + public ClickableTextWidget setMaxLines(int maxLines) { + this.maxLines = maxLines; + return this; + } + + public ClickableTextWidget setMarginInLines(int margin) { + this.marginInLines = margin; + return this; + } + + @Override + public Widget setBackground(IDrawable... drawables) { + IDrawable[] all = Arrays.copyOf(drawables, drawables.length + 1); + all[drawables.length] = caption; + return super.setBackground(all); + } + + @Override + protected @NotNull Size determineSize(int maxWidth, int maxHeight) { + if (caption == null) return super.determineSize(maxWidth, maxHeight); + return new Size( + Math.min( + maxWidth, + TextRenderer.getFontRenderer() + .getStringWidth(caption.getFormatted())), + (maxLines + marginInLines) * TextRenderer.getFontRenderer().FONT_HEIGHT); + } +} diff --git a/src/main/java/ggfab/util/GGUtils.java b/src/main/java/ggfab/util/GGUtils.java new file mode 100644 index 0000000000..7dd70ed759 --- /dev/null +++ b/src/main/java/ggfab/util/GGUtils.java @@ -0,0 +1,78 @@ +package ggfab.util; + +import java.util.StringJoiner; + +import net.minecraft.util.ChunkCoordinates; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class GGUtils { + + public static boolean isValidTile(IGregTechTileEntity tile) { + return tile != null && !tile.isDead() + && tile.getMetaTileEntity() != null + && tile.getMetaTileEntity() + .getBaseMetaTileEntity() == tile; + } + + public static boolean isValidTile(IMetaTileEntity mte) { + return mte != null && mte.getBaseMetaTileEntity() != null + && mte.getBaseMetaTileEntity() + .getMetaTileEntity() == mte + && !mte.getBaseMetaTileEntity() + .isDead(); + } + + public static ChunkCoordinates translate(ChunkCoordinates origin, ForgeDirection direction) { + return new ChunkCoordinates( + origin.posX + direction.offsetX, + origin.posY + direction.offsetY, + origin.posZ + direction.offsetZ); + } + + public static String formatTileInfo(String prefix, IMetaTileEntity mte, String delimiter, String suffix) { + if (!isValidTile(mte)) return prefix + "N/A" + suffix; + StringJoiner sj = new StringJoiner(delimiter, prefix, suffix); + IGregTechTileEntity til = mte.getBaseMetaTileEntity(); + sj.add(String.valueOf(til.getXCoord())); + sj.add(String.valueOf(til.getYCoord())); + sj.add(String.valueOf(til.getZCoord())); + return sj.toString(); + } + + public static String formatTileInfo(String prefix, IGregTechTileEntity tile, String delimiter, String suffix) { + if (!isValidTile(tile)) return prefix + "N/A" + suffix; + StringJoiner sj = new StringJoiner(delimiter, prefix, suffix); + sj.add(String.valueOf(tile.getXCoord())); + sj.add(String.valueOf(tile.getYCoord())); + sj.add(String.valueOf(tile.getZCoord())); + return sj.toString(); + } + + /** + * convert lowerCamelCase to any of snake case or normal sentence + */ + public static String processSentence(String src, Character separator, boolean capitalize, boolean firstCapitalize) { + if (src == null) throw new IllegalArgumentException(); + if (src.isEmpty()) return ""; + StringBuilder out = new StringBuilder(src.length()); + if (firstCapitalize) out.append(Character.toUpperCase(src.charAt(0))); + else out.append(src.charAt(0)); + for (int i = 1; i < src.length(); i++) { + char ch = src.charAt(i); + if (Character.isUpperCase(ch)) { + if (separator != null) out.append(separator.charValue()); + if (capitalize) { + out.append(ch); + } else { + out.append(Character.toLowerCase(ch)); + } + } else { + out.append(ch); + } + } + return out.toString(); + } +} diff --git a/src/main/java/ggfab/util/OverclockHelper.java b/src/main/java/ggfab/util/OverclockHelper.java new file mode 100644 index 0000000000..b0e42930e8 --- /dev/null +++ b/src/main/java/ggfab/util/OverclockHelper.java @@ -0,0 +1,75 @@ +package ggfab.util; + +import gregtech.api.util.GTUtility; + +public class OverclockHelper { + + public static OverclockOutput normalOverclock(long recipeEUt, int duration, long inputVoltage, boolean perfectOC) { + if (recipeEUt > inputVoltage) return null; + int recipeTier = Math.max(1, GTUtility.getTier(recipeEUt)); // ULV no overclock + int machineTier = GTUtility.getTier(inputVoltage); + int shift = perfectOC ? 2 : 1; + while (recipeTier < machineTier && duration > 1) { + duration >>= shift; + recipeEUt <<= 2; + recipeTier++; + } + return new OverclockOutput(recipeEUt, duration); + } + + public static OverclockOutput laserOverclock(long recipeEUt, int duration, long inputEUt, + float penaltyIncreaseFactor) { + if (recipeEUt > inputEUt) return null; + float currentPenalty = 4 + penaltyIncreaseFactor; + // 2/(n+k) overclock until energy hatch is crying + // must ensure it doesn't go to negative after overclock + while (recipeEUt * currentPenalty > 0 && recipeEUt * currentPenalty < inputEUt && duration > 1) { + duration >>= 1; + recipeEUt *= currentPenalty; + currentPenalty += penaltyIncreaseFactor; + } + return new OverclockOutput(recipeEUt, duration); + } + + public static final class OverclockOutput { + + private final long mEUt; + private final int mDuration; + + public OverclockOutput(long aEUt, int aDuration) { + this.mEUt = aEUt; + this.mDuration = aDuration; + } + + public long getEUt() { + return mEUt; + } + + public int getDuration() { + return mDuration; + } + + @Override + public String toString() { + return mEUt + "@" + mDuration + "ticks"; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof OverclockOutput)) return false; + + OverclockOutput that = (OverclockOutput) o; + + if (mEUt != that.mEUt) return false; + return mDuration == that.mDuration; + } + + @Override + public int hashCode() { + int result = (int) (mEUt ^ (mEUt >>> 32)); + result = 31 * result + mDuration; + return result; + } + } +} diff --git a/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerBackend.java b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerBackend.java index cdd3a4d57f..cfe6f7c371 100644 --- a/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerBackend.java +++ b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerBackend.java @@ -4,7 +4,7 @@ import javax.annotation.ParametersAreNonnullByDefault; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; import gregtech.api.recipe.maps.FuelBackend; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; @ParametersAreNonnullByDefault @@ -16,7 +16,7 @@ public class ExtremeHeatExchangerBackend extends FuelBackend { } @Override - public GT_Recipe compileRecipe(GT_Recipe recipe) { + public GTRecipe compileRecipe(GTRecipe recipe) { if (!(recipe instanceof ExtremeHeatExchangerRecipe)) { throw new RuntimeException("Recipe must be instance of ExtremeHeatExchangerRecipe"); } diff --git a/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerFrontend.java b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerFrontend.java index b933802fc2..79459d3a5a 100644 --- a/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerFrontend.java +++ b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerFrontend.java @@ -13,7 +13,7 @@ import com.gtnewhorizons.modularui.api.math.Pos2d; import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.nei.RecipeDisplayInfo; import gregtech.nei.formatter.INEISpecialInfoFormatter; @@ -46,12 +46,12 @@ public class ExtremeHeatExchangerFrontend extends RecipeMapFrontend { int threshold = recipeInfo.recipe.mSpecialValue; return Arrays.asList( StatCollector.translateToLocal("value.extreme_heat_exchanger.0") + " " - + GT_Utility.formatNumbers(Inputs[0].amount) + + GTUtility.formatNumbers(Inputs[0].amount) + " L/s", StatCollector.translateToLocal("value.extreme_heat_exchanger.1"), - GT_Utility.formatNumbers(Outputs[0].amount / 160) + " L/s", + GTUtility.formatNumbers(Outputs[0].amount / 160) + " L/s", StatCollector.translateToLocal("value.extreme_heat_exchanger.2"), - GT_Utility.formatNumbers(Outputs[1].amount / 160) + " L/s", + GTUtility.formatNumbers(Outputs[1].amount / 160) + " L/s", StatCollector.translateToLocal("value.extreme_heat_exchanger.4") + " " + threshold + " L/s"); } } diff --git a/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerRecipe.java b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerRecipe.java index 4a32e882f8..2887c74f2c 100644 --- a/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerRecipe.java +++ b/src/main/java/goodgenerator/api/recipe/ExtremeHeatExchangerRecipe.java @@ -3,9 +3,9 @@ package goodgenerator.api.recipe; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; -public class ExtremeHeatExchangerRecipe extends GT_Recipe { +public class ExtremeHeatExchangerRecipe extends GTRecipe { public ExtremeHeatExchangerRecipe(FluidStack[] input, FluidStack[] output, int special) { super(false, null, null, null, null, input, output, 0, 0, special); diff --git a/src/main/java/goodgenerator/api/recipe/GoodGeneratorRecipeMaps.java b/src/main/java/goodgenerator/api/recipe/GoodGeneratorRecipeMaps.java index 7f3915d084..1da3545d78 100644 --- a/src/main/java/goodgenerator/api/recipe/GoodGeneratorRecipeMaps.java +++ b/src/main/java/goodgenerator/api/recipe/GoodGeneratorRecipeMaps.java @@ -6,13 +6,13 @@ import java.util.Comparator; import net.minecraft.util.StatCollector; -import goodgenerator.client.GUI.GG_UITextures; -import gregtech.api.enums.GT_Values; -import gregtech.api.gui.modularui.GT_UITextures; +import goodgenerator.client.GUI.GGUITextures; +import gregtech.api.enums.GTValues; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBuilder; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.nei.formatter.SimpleSpecialValueFormatter; public class GoodGeneratorRecipeMaps { @@ -24,7 +24,7 @@ public class GoodGeneratorRecipeMaps { .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("value.naquadah_reactor")) .neiRecipeComparator(Comparator.comparing(recipe -> recipe.mSpecialValue)) .dontUseProgressBar() - .addSpecialTexture(59, 20, 58, 42, GG_UITextures.PICTURE_NAQUADAH_REACTOR) + .addSpecialTexture(59, 20, 58, 42, GGUITextures.PICTURE_NAQUADAH_REACTOR) .build(); public static final RecipeMap naquadahFuelRefineFactoryRecipes = RecipeMapBuilder .of("gg.recipe.naquadah_fuel_refine_factory") @@ -35,28 +35,28 @@ public class GoodGeneratorRecipeMaps { public static final RecipeMap neutronActivatorRecipes = RecipeMapBuilder.of("gg.recipe.neutron_activator") .maxIO(9, 9, 1, 1) .dontUseProgressBar() - .addSpecialTexture(73, 22, 31, 21, GG_UITextures.PICTURE_NEUTRON_ACTIVATOR) + .addSpecialTexture(73, 22, 31, 21, GGUITextures.PICTURE_NEUTRON_ACTIVATOR) .neiSpecialInfoFormatter(recipeInfo -> { int minNKE = recipeInfo.recipe.mSpecialValue % 10000; int maxNKE = recipeInfo.recipe.mSpecialValue / 10000; return Arrays.asList( StatCollector.translateToLocal("value.neutron_activator.0"), - GT_Utility.formatNumbers(minNKE) + StatCollector.translateToLocal("value.neutron_activator.2"), + GTUtility.formatNumbers(minNKE) + StatCollector.translateToLocal("value.neutron_activator.2"), StatCollector.translateToLocal("value.neutron_activator.1"), - GT_Utility.formatNumbers(maxNKE) + StatCollector.translateToLocal("value.neutron_activator.2")); + GTUtility.formatNumbers(maxNKE) + StatCollector.translateToLocal("value.neutron_activator.2")); }) .build(); public static final RecipeMap extremeHeatExchangerFuels = RecipeMapBuilder .of("gg.recipe.extreme_heat_exchanger", ExtremeHeatExchangerBackend::new) .maxIO(0, 0, 2, 3) .dontUseProgressBar() - .addSpecialTexture(47, 13, 78, 59, GG_UITextures.PICTURE_EXTREME_HEAT_EXCHANGER) + .addSpecialTexture(47, 13, 78, 59, GGUITextures.PICTURE_EXTREME_HEAT_EXCHANGER) .frontend(ExtremeHeatExchangerFrontend::new) .build(); public static final RecipeMap preciseAssemblerRecipes = RecipeMapBuilder .of("gg.recipe.precise_assembler") .maxIO(4, 1, 4, 0) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .progressBarPos(85, 30) .neiTransferRect(80, 30, 35, 18) .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("value.precise_assembler")) @@ -70,9 +70,9 @@ public class GoodGeneratorRecipeMaps { recipeInfo -> Collections.singletonList( StatCollector.translateToLocalFormatted( "value.component_assembly_line", - GT_Values.VN[recipeInfo.recipe.mSpecialValue]))) + GTValues.VN[recipeInfo.recipe.mSpecialValue]))) .dontUseProgressBar() - .addSpecialTexture(70, 11, 72, 40, GG_UITextures.PICTURE_COMPONENT_ASSLINE) + .addSpecialTexture(70, 11, 72, 40, GGUITextures.PICTURE_COMPONENT_ASSLINE) .frontend(ComponentAssemblyLineFrontend::new) .build(); } diff --git a/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java b/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java index de8cca2b43..909a1272da 100644 --- a/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java +++ b/src/main/java/goodgenerator/blocks/myFluids/FluidsBuilder.java @@ -4,7 +4,7 @@ import net.minecraft.block.material.Material; import net.minecraftforge.fluids.Fluid; import cpw.mods.fml.common.registry.GameRegistry; -import goodgenerator.crossmod.nei.NEI_Config; +import goodgenerator.crossmod.nei.NEIConfig; public class FluidsBuilder { @@ -36,7 +36,7 @@ public class FluidsBuilder { tmp2.SetTexture("lightlyCrackedNaquadahGas"); tmp2.setBlockName("lightlyCrackedNaquadahGas"); GameRegistry.registerBlock(tmp2, "lightlyCrackedNaquadahGas"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void crackedNaquadahGas_Moderately() { @@ -47,7 +47,7 @@ public class FluidsBuilder { tmp2.SetTexture("moderatelyCrackedNaquadahGas"); tmp2.setBlockName("moderatelyCrackedNaquadahGas"); GameRegistry.registerBlock(tmp2, "moderatelyCrackedNaquadahGas"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void crackedNaquadahGas_Heavily() { @@ -58,7 +58,7 @@ public class FluidsBuilder { tmp2.SetTexture("heavilyCrackedNaquadahGas"); tmp2.setBlockName("heavilyCrackedNaquadahGas"); GameRegistry.registerBlock(tmp2, "heavilyCrackedNaquadahGas"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void crackedLightNaquadahFuel_Lightly() { @@ -69,7 +69,7 @@ public class FluidsBuilder { tmp2.SetTexture("lightlyCrackedLightNaquadahFuel"); tmp2.setBlockName("lightlyCrackedLightNaquadahFuel"); GameRegistry.registerBlock(tmp2, "lightlyCrackedLightNaquadahFuel"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void crackedLightNaquadahFuel_Moderately() { @@ -80,7 +80,7 @@ public class FluidsBuilder { tmp2.SetTexture("moderatelyCrackedLightNaquadahFuel"); tmp2.setBlockName("moderatelyCrackedLightNaquadahFuel"); GameRegistry.registerBlock(tmp2, "moderatelyCrackedLightNaquadahFuel"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void crackedLightNaquadahFuel_Heavily() { @@ -91,7 +91,7 @@ public class FluidsBuilder { tmp2.SetTexture("heavilyCrackedLightNaquadahFuel"); tmp2.setBlockName("heavilyCrackedLightNaquadahFuel"); GameRegistry.registerBlock(tmp2, "heavilyCrackedLightNaquadahFuel"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void crackedHeavyNaquadahFuel_Lightly() { @@ -102,7 +102,7 @@ public class FluidsBuilder { tmp2.SetTexture("lightlyCrackedHeavyNaquadahFuel"); tmp2.setBlockName("lightlyCrackedHeavyNaquadahFuel"); GameRegistry.registerBlock(tmp2, "lightlyCrackedHeavyNaquadahFuel"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void crackedHeavyNaquadahFuel_Moderately() { @@ -113,7 +113,7 @@ public class FluidsBuilder { tmp2.SetTexture("moderatelyCrackedHeavyNaquadahFuel"); tmp2.setBlockName("moderatelyCrackedHeavyNaquadahFuel"); GameRegistry.registerBlock(tmp2, "moderatelyCrackedHeavyNaquadahFuel"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void crackedHeavyNaquadahFuel_Heavily() { @@ -124,7 +124,7 @@ public class FluidsBuilder { tmp2.SetTexture("heavilyCrackedHeavyNaquadahFuel"); tmp2.setBlockName("heavilyCrackedHeavyNaquadahFuel"); GameRegistry.registerBlock(tmp2, "heavilyCrackedHeavyNaquadahFuel"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void crackedNaquadahAsphalt_Lightly() { @@ -137,7 +137,7 @@ public class FluidsBuilder { tmp2.SetTexture("lightlyCrackedNaquadahAsphalt"); tmp2.setBlockName("lightlyCrackedNaquadahAsphalt"); GameRegistry.registerBlock(tmp2, "lightlyCrackedNaquadahAsphalt"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void crackedNaquadahAsphalt_Moderately() { @@ -150,7 +150,7 @@ public class FluidsBuilder { tmp2.SetTexture("moderatelyCrackedNaquadahAsphalt"); tmp2.setBlockName("moderatelyCrackedNaquadahAsphalt"); GameRegistry.registerBlock(tmp2, "moderatelyCrackedNaquadahAsphalt"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void crackedNaquadahAsphalt_Heavily() { @@ -163,7 +163,7 @@ public class FluidsBuilder { tmp2.SetTexture("heavilyCrackedNaquadahAsphalt"); tmp2.setBlockName("heavilyCrackedNaquadahAsphalt"); GameRegistry.registerBlock(tmp2, "heavilyCrackedNaquadahAsphalt"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void combustionPromotor() { @@ -174,7 +174,7 @@ public class FluidsBuilder { tmp2.SetTexture("combustionPromotor"); tmp2.setBlockName("combustionPromotor"); GameRegistry.registerBlock(tmp2, "combustionPromotor"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void coalTar() { @@ -186,7 +186,7 @@ public class FluidsBuilder { tmp2.SetTexture("coalTar"); tmp2.setBlockTextureName("coalTar"); GameRegistry.registerBlock(tmp2, "coalTar"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } public static void supercriticalSteam() { @@ -198,6 +198,6 @@ public class FluidsBuilder { tmp2.SetTexture("supercriticalSteam"); tmp2.setBlockTextureName("supercriticalSteam"); GameRegistry.registerBlock(tmp2, "supercriticalSteam"); - NEI_Config.hide(tmp2); + NEIConfig.hide(tmp2); } } diff --git a/src/main/java/goodgenerator/blocks/regularBlock/BlockCasing.java b/src/main/java/goodgenerator/blocks/regularBlock/BlockCasing.java new file mode 100644 index 0000000000..4f784b5501 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/BlockCasing.java @@ -0,0 +1,124 @@ +package goodgenerator.blocks.regularBlock; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.main.GoodGenerator; +import gregtech.api.GregTechAPI; + +public class BlockCasing extends Block { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture; + + String[] textureNames; + protected String name; + + public BlockCasing(String name) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTechAPI.registerMachineBlock(this, -1); + } + + public BlockCasing(String name, String[] texture) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTechAPI.registerMachineBlock(this, -1); + } + + public BlockCasing(String name, String[] texture, Material material) { + super(material); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTechAPI.registerMachineBlock(this, -1); + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + } + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < this.textureNames.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTechAPI.isMachineBlock(this, aMetaData)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public String getUnlocalizedName() { + return this.name; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return false; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } +} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/BlockComplexTextureCasing.java b/src/main/java/goodgenerator/blocks/regularBlock/BlockComplexTextureCasing.java new file mode 100644 index 0000000000..03b7f61557 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/BlockComplexTextureCasing.java @@ -0,0 +1,58 @@ +package goodgenerator.blocks.regularBlock; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BlockComplexTextureCasing extends BlockCasing { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture1, texture2; + String[] textureSide; + String[] textureTopAndDown; + + public BlockComplexTextureCasing(String name, String[] textureSide, String[] textureTopAndDown) { + super(name); + this.textureSide = textureSide; + this.textureTopAndDown = textureTopAndDown; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + if (side < 2) { + return meta < this.texture2.length ? this.texture2[meta] : this.texture2[0]; + } else { + return meta < this.texture1.length ? this.texture1[meta] : this.texture1[0]; + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + this.texture1 = new IIcon[this.textureSide.length]; + for (int i = 0; i < this.textureSide.length; i++) { + this.texture1[i] = par1IconRegister.registerIcon(this.textureSide[i]); + } + this.texture2 = new IIcon[this.textureTopAndDown.length]; + for (int i = 0; i < this.textureTopAndDown.length; i++) { + this.texture2[i] = par1IconRegister.registerIcon(this.textureTopAndDown[i]); + } + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < Math.max(this.textureSide.length, this.textureTopAndDown.length); i++) { + list.add(new ItemStack(item, 1, i)); + } + } +} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/BlockFrame.java b/src/main/java/goodgenerator/blocks/regularBlock/BlockFrame.java new file mode 100644 index 0000000000..b29ef7f2f2 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/BlockFrame.java @@ -0,0 +1,37 @@ +package goodgenerator.blocks.regularBlock; + +import net.minecraft.block.material.Material; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +public class BlockFrame extends BlockCasing { + + public BlockFrame(String name, String[] texture) { + super(name, texture, Material.iron); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { + if (worldClient.getBlock(xCoord, yCoord, zCoord) instanceof BlockFrame) return false; + return super.shouldSideBeRendered(worldClient, xCoord, yCoord, zCoord, aSide); + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } +} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/BlockTEContainer.java b/src/main/java/goodgenerator/blocks/regularBlock/BlockTEContainer.java new file mode 100644 index 0000000000..9bf51b7377 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/BlockTEContainer.java @@ -0,0 +1,207 @@ +package goodgenerator.blocks.regularBlock; + +import java.util.List; + +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.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.blocks.tileEntity.MTEEssentiaHatch; +import goodgenerator.blocks.tileEntity.MTEEssentiaOutputHatch; +import goodgenerator.blocks.tileEntity.MTEEssentiaOutputHatchME; +import goodgenerator.main.GoodGenerator; +import gregtech.api.GregTechAPI; +import gregtech.api.util.GTUtility; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.IEssentiaContainerItem; + +public class BlockTEContainer extends BlockContainer { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture; + + String[] textureNames; + protected String name; + protected int index; + + public BlockTEContainer(String name, String[] texture, CreativeTabs Tab) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTechAPI.registerMachineBlock(this, -1); + } + + public BlockTEContainer(String name, String[] texture, int index) { + super(Material.iron); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.index = index; + this.setCreativeTab(GoodGenerator.GG); + GregTechAPI.registerMachineBlock(this, -1); + } + + public BlockTEContainer(String name, String[] texture, Material material) { + super(material); + this.setHardness(9.0F); + this.setResistance(5.0F); + this.name = name; + this.textureNames = texture; + this.setHarvestLevel("wrench", 2); + this.setCreativeTab(GoodGenerator.GG); + GregTechAPI.registerMachineBlock(this, -1); + } + + public int getIndex() { + return this.index; + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister par1IconRegister) { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; i++) { + this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); + } + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubBlocks(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < this.textureNames.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTechAPI.isMachineBlock(this, aMetaData)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + aWorld.removeTileEntity(aX, aY, aZ); + } + + @Override + public String getUnlocalizedName() { + return this.name; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return false; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public TileEntity createTileEntity(World world, int meta) { + switch (index) { + case 1: + return new MTEEssentiaHatch(); + case 2: + return new MTEEssentiaOutputHatch(); + case 3: + return new MTEEssentiaOutputHatchME(); + default: + return null; + } + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, + float par8, float par9) { + if (world.isRemote) { + return false; + } else { + TileEntity tile = world.getTileEntity(x, y, z); + if (index == 1) { + if (tile instanceof MTEEssentiaHatch) { + ItemStack tItemStack = player.getHeldItem(); + if (tItemStack != null) { + Item tItem = tItemStack.getItem(); + if (tItem instanceof IEssentiaContainerItem + && ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) != null + && ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) + .size() > 0) { + Aspect tLocked = ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) + .getAspects()[0]; + ((MTEEssentiaHatch) tile).setLockedAspect(tLocked); + GTUtility.sendChatToPlayer( + player, + String.format( + StatCollector.translateToLocal("essentiahatch.chat.0"), + tLocked.getLocalizedDescription())); + } + } else { + ((MTEEssentiaHatch) tile).setLockedAspect(null); + GTUtility.sendChatToPlayer(player, StatCollector.translateToLocal("essentiahatch.chat.1")); + } + world.markBlockForUpdate(x, y, z); + return true; + } else return false; + } else if (index == 2) { + if (tile instanceof MTEEssentiaOutputHatch && player.isSneaking()) { + ItemStack tItemStack = player.getHeldItem(); + if (tItemStack == null) { + ((MTEEssentiaOutputHatch) tile).clear(); + GTUtility + .sendChatToPlayer(player, StatCollector.translateToLocal("essentiaoutputhatch.chat.0")); + } + return true; + } else return false; + } else return false; + } + } + + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return null; + } +} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/BlockTurbineCasing.java b/src/main/java/goodgenerator/blocks/regularBlock/BlockTurbineCasing.java new file mode 100644 index 0000000000..6b6de38161 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/regularBlock/BlockTurbineCasing.java @@ -0,0 +1,103 @@ +package goodgenerator.blocks.regularBlock; + +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import goodgenerator.blocks.tileEntity.base.MTELargeTurbineBase; +import goodgenerator.client.render.BlockRenderHandler; +import goodgenerator.main.GoodGenerator; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; + +public class BlockTurbineCasing extends BlockCasing implements ITextureBlock { + + public static IIconContainer[][] turbineShape = new IIconContainer[3][9]; + public IIconContainer base; + + static { + for (int i = 0; i < 3; i++) for (int j = 1; j <= 9; j++) + turbineShape[i][j - 1] = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_" + i + "" + j); + } + + public BlockTurbineCasing(String name, String texture) { + super(name, new String[] { GoodGenerator.MOD_ID + ":" + texture }); + base = new Textures.BlockIcons.CustomIcon("icons/" + texture); + } + + private static int isTurbineControllerWithSide(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection side) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (!(tTileEntity instanceof IGregTechTileEntity)) return 0; + IGregTechTileEntity tTile = (IGregTechTileEntity) tTileEntity; + if (tTile.getMetaTileEntity() instanceof MTELargeTurbineBase && tTile.getFrontFacing() == side) { + if (tTile.isActive()) return 1; + return ((MTELargeTurbineBase) tTile.getMetaTileEntity()).hasTurbine() ? 2 : 3; + } + return 0; + } + + public ITexture[] getTurbineCasing(int iconIndex, boolean active, boolean hasTurbine) { + int states = active ? 0 : hasTurbine ? 1 : 2; + return new ITexture[] { TextureFactory.of(base), TextureFactory.of(turbineShape[states][iconIndex]) }; + } + + @Override + public ITexture[] getTexture(Block aBlock, ForgeDirection side, IBlockAccess aWorld, int xCoord, int yCoord, + int zCoord) { + final int ordinalSide = side.ordinal(); + int tInvertLeftRightMod = ordinalSide % 2 * 2 - 1; + switch (ordinalSide / 2) { + case 0: + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord, zCoord + i, side)) != 0) { + return getTurbineCasing(4 - i * 3 - j, tState == 1, tState == 2); + } + } + } + break; + case 1: + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord + i, zCoord, side)) != 0) { + return getTurbineCasing(4 + i * 3 - j * tInvertLeftRightMod, tState == 1, tState == 2); + } + } + } + break; + case 2: + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord, yCoord + i, zCoord + j, side)) != 0) { + return getTurbineCasing(4 + i * 3 + j * tInvertLeftRightMod, tState == 1, tState == 2); + } + } + } + break; + } + return getTexture(aBlock, side); + } + + @Override + public ITexture[] getTexture(Block aBlock, int aMeta, ForgeDirection side) { + return new ITexture[] { TextureFactory.of(base) }; + } + + @Override + public int getRenderType() { + if (BlockRenderHandler.INSTANCE == null) { + return super.getRenderType(); + } + return BlockRenderHandler.INSTANCE.mRenderID; + } +} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/Casing.java b/src/main/java/goodgenerator/blocks/regularBlock/Casing.java deleted file mode 100644 index c10b0f7184..0000000000 --- a/src/main/java/goodgenerator/blocks/regularBlock/Casing.java +++ /dev/null @@ -1,124 +0,0 @@ -package goodgenerator.blocks.regularBlock; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import goodgenerator.main.GoodGenerator; -import gregtech.api.GregTech_API; - -public class Casing extends Block { - - @SideOnly(Side.CLIENT) - protected IIcon[] texture; - - String[] textureNames; - protected String name; - - public Casing(String name) { - super(Material.iron); - this.setHardness(9.0F); - this.setResistance(5.0F); - this.name = name; - this.setHarvestLevel("wrench", 2); - this.setCreativeTab(GoodGenerator.GG); - GregTech_API.registerMachineBlock(this, -1); - } - - public Casing(String name, String[] texture) { - super(Material.iron); - this.setHardness(9.0F); - this.setResistance(5.0F); - this.name = name; - this.textureNames = texture; - this.setHarvestLevel("wrench", 2); - this.setCreativeTab(GoodGenerator.GG); - GregTech_API.registerMachineBlock(this, -1); - } - - public Casing(String name, String[] texture, Material material) { - super(material); - this.setHardness(9.0F); - this.setResistance(5.0F); - this.name = name; - this.textureNames = texture; - this.setHarvestLevel("wrench", 2); - this.setCreativeTab(GoodGenerator.GG); - GregTech_API.registerMachineBlock(this, -1); - } - - @Override - public int damageDropped(int meta) { - return meta; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - return meta < this.texture.length ? this.texture[meta] : this.texture[0]; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister par1IconRegister) { - this.texture = new IIcon[this.textureNames.length]; - for (int i = 0; i < this.textureNames.length; i++) { - this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); - } - } - - @Override - @SideOnly(Side.CLIENT) - @SuppressWarnings("unchecked") - public void getSubBlocks(Item item, CreativeTabs tab, List list) { - for (int i = 0; i < this.textureNames.length; i++) { - list.add(new ItemStack(item, 1, i)); - } - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - if (GregTech_API.isMachineBlock(this, aMetaData)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public String getUnlocalizedName() { - return this.name; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { - return false; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } -} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/ComplexTextureCasing.java b/src/main/java/goodgenerator/blocks/regularBlock/ComplexTextureCasing.java deleted file mode 100644 index 0a0169d0b4..0000000000 --- a/src/main/java/goodgenerator/blocks/regularBlock/ComplexTextureCasing.java +++ /dev/null @@ -1,58 +0,0 @@ -package goodgenerator.blocks.regularBlock; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class ComplexTextureCasing extends Casing { - - @SideOnly(Side.CLIENT) - protected IIcon[] texture1, texture2; - String[] textureSide; - String[] textureTopAndDown; - - public ComplexTextureCasing(String name, String[] textureSide, String[] textureTopAndDown) { - super(name); - this.textureSide = textureSide; - this.textureTopAndDown = textureTopAndDown; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - if (side < 2) { - return meta < this.texture2.length ? this.texture2[meta] : this.texture2[0]; - } else { - return meta < this.texture1.length ? this.texture1[meta] : this.texture1[0]; - } - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister par1IconRegister) { - this.texture1 = new IIcon[this.textureSide.length]; - for (int i = 0; i < this.textureSide.length; i++) { - this.texture1[i] = par1IconRegister.registerIcon(this.textureSide[i]); - } - this.texture2 = new IIcon[this.textureTopAndDown.length]; - for (int i = 0; i < this.textureTopAndDown.length; i++) { - this.texture2[i] = par1IconRegister.registerIcon(this.textureTopAndDown[i]); - } - } - - @Override - @SideOnly(Side.CLIENT) - @SuppressWarnings("unchecked") - public void getSubBlocks(Item item, CreativeTabs tab, List list) { - for (int i = 0; i < Math.max(this.textureSide.length, this.textureTopAndDown.length); i++) { - list.add(new ItemStack(item, 1, i)); - } - } -} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/Frame.java b/src/main/java/goodgenerator/blocks/regularBlock/Frame.java deleted file mode 100644 index b4acb03518..0000000000 --- a/src/main/java/goodgenerator/blocks/regularBlock/Frame.java +++ /dev/null @@ -1,37 +0,0 @@ -package goodgenerator.blocks.regularBlock; - -import net.minecraft.block.material.Material; -import net.minecraft.world.IBlockAccess; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -public class Frame extends Casing { - - public Frame(String name, String[] texture) { - super(name, texture, Material.iron); - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean shouldSideBeRendered(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { - if (worldClient.getBlock(xCoord, yCoord, zCoord) instanceof Frame) return false; - return super.shouldSideBeRendered(worldClient, xCoord, yCoord, zCoord, aSide); - } - - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 1; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } -} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/TEBlock.java b/src/main/java/goodgenerator/blocks/regularBlock/TEBlock.java deleted file mode 100644 index dcd2bdd801..0000000000 --- a/src/main/java/goodgenerator/blocks/regularBlock/TEBlock.java +++ /dev/null @@ -1,207 +0,0 @@ -package goodgenerator.blocks.regularBlock; - -import java.util.List; - -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.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import goodgenerator.blocks.tileEntity.EssentiaHatch; -import goodgenerator.blocks.tileEntity.EssentiaOutputHatch; -import goodgenerator.blocks.tileEntity.EssentiaOutputHatch_ME; -import goodgenerator.main.GoodGenerator; -import gregtech.api.GregTech_API; -import gregtech.api.util.GT_Utility; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.IEssentiaContainerItem; - -public class TEBlock extends BlockContainer { - - @SideOnly(Side.CLIENT) - protected IIcon[] texture; - - String[] textureNames; - protected String name; - protected int index; - - public TEBlock(String name, String[] texture, CreativeTabs Tab) { - super(Material.iron); - this.setHardness(9.0F); - this.setResistance(5.0F); - this.name = name; - this.textureNames = texture; - this.setHarvestLevel("wrench", 2); - this.setCreativeTab(GoodGenerator.GG); - GregTech_API.registerMachineBlock(this, -1); - } - - public TEBlock(String name, String[] texture, int index) { - super(Material.iron); - this.setHardness(9.0F); - this.setResistance(5.0F); - this.name = name; - this.textureNames = texture; - this.setHarvestLevel("wrench", 2); - this.index = index; - this.setCreativeTab(GoodGenerator.GG); - GregTech_API.registerMachineBlock(this, -1); - } - - public TEBlock(String name, String[] texture, Material material) { - super(material); - this.setHardness(9.0F); - this.setResistance(5.0F); - this.name = name; - this.textureNames = texture; - this.setHarvestLevel("wrench", 2); - this.setCreativeTab(GoodGenerator.GG); - GregTech_API.registerMachineBlock(this, -1); - } - - public int getIndex() { - return this.index; - } - - @Override - public int damageDropped(int meta) { - return meta; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - return meta < this.texture.length ? this.texture[meta] : this.texture[0]; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister par1IconRegister) { - this.texture = new IIcon[this.textureNames.length]; - for (int i = 0; i < this.textureNames.length; i++) { - this.texture[i] = par1IconRegister.registerIcon(this.textureNames[i]); - } - } - - @Override - @SideOnly(Side.CLIENT) - @SuppressWarnings("unchecked") - public void getSubBlocks(Item item, CreativeTabs tab, List list) { - for (int i = 0; i < this.textureNames.length; i++) { - list.add(new ItemStack(item, 1, i)); - } - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - if (GregTech_API.isMachineBlock(this, aMetaData)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - aWorld.removeTileEntity(aX, aY, aZ); - } - - @Override - public String getUnlocalizedName() { - return this.name; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { - return false; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public TileEntity createTileEntity(World world, int meta) { - switch (index) { - case 1: - return new EssentiaHatch(); - case 2: - return new EssentiaOutputHatch(); - case 3: - return new EssentiaOutputHatch_ME(); - default: - return null; - } - } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int par6, float par7, - float par8, float par9) { - if (world.isRemote) { - return false; - } else { - TileEntity tile = world.getTileEntity(x, y, z); - if (index == 1) { - if (tile instanceof EssentiaHatch) { - ItemStack tItemStack = player.getHeldItem(); - if (tItemStack != null) { - Item tItem = tItemStack.getItem(); - if (tItem instanceof IEssentiaContainerItem - && ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) != null - && ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) - .size() > 0) { - Aspect tLocked = ((IEssentiaContainerItem) tItem).getAspects(player.getHeldItem()) - .getAspects()[0]; - ((EssentiaHatch) tile).setLockedAspect(tLocked); - GT_Utility.sendChatToPlayer( - player, - String.format( - StatCollector.translateToLocal("essentiahatch.chat.0"), - tLocked.getLocalizedDescription())); - } - } else { - ((EssentiaHatch) tile).setLockedAspect(null); - GT_Utility.sendChatToPlayer(player, StatCollector.translateToLocal("essentiahatch.chat.1")); - } - world.markBlockForUpdate(x, y, z); - return true; - } else return false; - } else if (index == 2) { - if (tile instanceof EssentiaOutputHatch && player.isSneaking()) { - ItemStack tItemStack = player.getHeldItem(); - if (tItemStack == null) { - ((EssentiaOutputHatch) tile).clear(); - GT_Utility - .sendChatToPlayer(player, StatCollector.translateToLocal("essentiaoutputhatch.chat.0")); - } - return true; - } else return false; - } else return false; - } - } - - @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return null; - } -} diff --git a/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java b/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java deleted file mode 100644 index 986ab4e0c8..0000000000 --- a/src/main/java/goodgenerator/blocks/regularBlock/TurbineCasing.java +++ /dev/null @@ -1,103 +0,0 @@ -package goodgenerator.blocks.regularBlock; - -import net.minecraft.block.Block; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; - -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_LargeTurbineBase; -import goodgenerator.client.render.BlockRenderHandler; -import goodgenerator.main.GoodGenerator; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; - -public class TurbineCasing extends Casing implements ITextureBlock { - - public static IIconContainer[][] turbineShape = new IIconContainer[3][9]; - public IIconContainer base; - - static { - for (int i = 0; i < 3; i++) for (int j = 1; j <= 9; j++) - turbineShape[i][j - 1] = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_" + i + "" + j); - } - - public TurbineCasing(String name, String texture) { - super(name, new String[] { GoodGenerator.MOD_ID + ":" + texture }); - base = new Textures.BlockIcons.CustomIcon("icons/" + texture); - } - - private static int isTurbineControllerWithSide(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection side) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (!(tTileEntity instanceof IGregTechTileEntity)) return 0; - IGregTechTileEntity tTile = (IGregTechTileEntity) tTileEntity; - if (tTile.getMetaTileEntity() instanceof GT_MetaTileEntity_LargeTurbineBase && tTile.getFrontFacing() == side) { - if (tTile.isActive()) return 1; - return ((GT_MetaTileEntity_LargeTurbineBase) tTile.getMetaTileEntity()).hasTurbine() ? 2 : 3; - } - return 0; - } - - public ITexture[] getTurbineCasing(int iconIndex, boolean active, boolean hasTurbine) { - int states = active ? 0 : hasTurbine ? 1 : 2; - return new ITexture[] { TextureFactory.of(base), TextureFactory.of(turbineShape[states][iconIndex]) }; - } - - @Override - public ITexture[] getTexture(Block aBlock, ForgeDirection side, IBlockAccess aWorld, int xCoord, int yCoord, - int zCoord) { - final int ordinalSide = side.ordinal(); - int tInvertLeftRightMod = ordinalSide % 2 * 2 - 1; - switch (ordinalSide / 2) { - case 0: - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - if (i == 0 && j == 0) continue; - int tState; - if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord, zCoord + i, side)) != 0) { - return getTurbineCasing(4 - i * 3 - j, tState == 1, tState == 2); - } - } - } - break; - case 1: - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - if (i == 0 && j == 0) continue; - int tState; - if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord + i, zCoord, side)) != 0) { - return getTurbineCasing(4 + i * 3 - j * tInvertLeftRightMod, tState == 1, tState == 2); - } - } - } - break; - case 2: - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - if (i == 0 && j == 0) continue; - int tState; - if ((tState = isTurbineControllerWithSide(aWorld, xCoord, yCoord + i, zCoord + j, side)) != 0) { - return getTurbineCasing(4 + i * 3 + j * tInvertLeftRightMod, tState == 1, tState == 2); - } - } - } - break; - } - return getTexture(aBlock, side); - } - - @Override - public ITexture[] getTexture(Block aBlock, int aMeta, ForgeDirection side) { - return new ITexture[] { TextureFactory.of(base) }; - } - - @Override - public int getRenderType() { - if (BlockRenderHandler.INSTANCE == null) { - return super.getRenderType(); - } - return BlockRenderHandler.INSTANCE.mRenderID; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java b/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java deleted file mode 100644 index 190b572046..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/ComponentAssemblyLine.java +++ /dev/null @@ -1,416 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.Textures.BlockIcons.*; - -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; -import goodgenerator.loader.Loaders; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; - -public class ComponentAssemblyLine extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private int casingTier; - private float speedBonus; - protected static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - new String[][] { - { " ", " III ", " HHI~IHH ", "HH III HH", "H H", "H H", "H JJJ H", - "H JJJ H", "H N N H", "HHHHHHHHH" }, - { " ", " ELHHHLE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", - "AG HHH GA", "AG GA", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH", - "HG HHH GH", "HG GH", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", - "AG HHH GA", "AG GA", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH", - "HG HHH GH", "HG GH", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", - "AG HHH GA", "AG GA", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH", - "HG HHH GH", "HG GH", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", - "AG HHH GA", "AG GA", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A n n A", "MHHHHHHHM" }, - { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " ", " ELHHHLE ", "E E", "H H", "A A", "A A", "A A", - "A HHH A", "A A", "MHHHHHHHM" }, - { " ", " ", " HHHHHHH ", "HH HH", "H H", "H H", "H H", - "H H", "H KKK H", "HHHHHHHHH" } }) - .addElement( - 'A', - ofChain( - ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 5), - ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 13), - ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 14), - ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 15), - ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks2", 0))) - .addElement('H', ofBlock(GregTech_API.sBlockCasings8, 7)) - .addElement('C', ofBlock(GregTech_API.sBlockCasings2, 5)) - .addElement('D', ofBlock(GregTech_API.sBlockCasings2, 9)) - .addElement('G', ofBlock(GregTech_API.sBlockCasings9, 0)) - .addElement('E', ofBlock(GregTech_API.sBlockCasings9, 1)) - .addElement('F', ofBlock(GregTech_API.sBlockCasings4, 1)) - .addElement( - 'B', - ofBlocksTiered( - (block, meta) -> block == Loaders.componentAssemblylineCasing ? meta : -1, - IntStream.range(0, 14) - .mapToObj(i -> Pair.of(Loaders.componentAssemblylineCasing, i)) - .collect(Collectors.toList()), - -2, - (t, meta) -> t.casingTier = meta, - t -> t.casingTier)) - .addElement( - 'J', - GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) - .atLeast(InputBus) - .dot(1) - .casingIndex(183) - .buildAndChain(GregTech_API.sBlockCasings8, 7)) - .addElement( - 'N', - GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) - .atLeast(InputBus) - .dot(1) - .casingIndex(183) - .buildAndChain(GT_StructureUtility.ofFrame(Materials.TungstenSteel))) - .addElement( - 'K', - GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) - .atLeast(OutputBus) - .dot(2) - .casingIndex(183) - .buildAndChain(GregTech_API.sBlockCasings8, 7)) - .addElement( - 'L', - GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) - .atLeast(Energy, ExoticEnergy) - .dot(3) - .casingIndex(183) - .buildAndChain(GregTech_API.sBlockCasings8, 7)) - .addElement( - 'I', - GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) - .atLeast(Maintenance) - .dot(4) - .casingIndex(183) - .buildAndChain(GregTech_API.sBlockCasings8, 7)) - .addElement( - 'M', - GT_StructureUtility.buildHatchAdder(ComponentAssemblyLine.class) - .atLeast(InputHatch) - .dot(5) - .casingIndex(183) - .buildAndChain(GregTech_API.sBlockCasings8, 7)) - .addElement('n', GT_StructureUtility.ofFrame(Materials.TungstenSteel)) - .build(); - - public ComponentAssemblyLine(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public ComponentAssemblyLine(String aName) { - super(aName); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 4, 2, 0); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("High-Capacity Component Assembler") - .addInfo("Controller block for the Component Assembly Line.") - .addInfo("Assembles basic components (motors, pumps, etc.) in large batches.") - .addInfo( - "The " + EnumChatFormatting.BOLD - + EnumChatFormatting.YELLOW - + "Component Assembly Line Casing " - + EnumChatFormatting.RESET - + EnumChatFormatting.GRAY - + "limits the recipes the machine can perform. See the NEI pages for details.") - .addInfo("Using casings above the required recipe tier provides a speed bonus:") - .addInfo(EnumChatFormatting.YELLOW + "Halves recipe time per tier above recipe") - .addInfo( - "Supports " + EnumChatFormatting.BLUE - + "Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.GRAY - + " laser and multi-amp hatches!") - .addInfo("Supports overclocking beyond MAX!") - .addInfo(EnumChatFormatting.ITALIC + "Much more efficient than other competing brands!") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .beginStructureBlock(9, 10, 33, false) - .addStructureInfo("This structure is too complex! See schematic for details.") - .addOtherStructurePart("Borosilicate Glass", "Can be UV tier or higher") - .addInputBus("Start of conveyor belt", 1) - .addOutputBus("End of conveyor belt", 2) - .addEnergyHatch("Second-top layer", 3) - .addMaintenanceHatch("Around the controller", 4) - .addInputHatch("Bottom left and right corners", 5) - .toolTipFinisher( - EnumChatFormatting.AQUA + "MadMan310" - + EnumChatFormatting.GRAY - + " via " - + EnumChatFormatting.GREEN - + "Good Generator"); - - return tt; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new ComponentAssemblyLine(mName); - } - - /** - * Changes and adds new information to the default info data for the scanner. - */ - @Override - public String[] getInfoData() { - String[] origin = super.getInfoData(); - String[] ret = new String[origin.length + 1]; - System.arraycopy(origin, 0, ret, 0, origin.length); - ret[origin.length] = StatCollector.translateToLocal("scanner.info.CASS.tier") - + (casingTier >= 0 ? GT_Values.VN[casingTier + 1] : "None!"); - return ret; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183) }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (recipe.mSpecialValue > casingTier + 1) { - return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - speedBonus = (float) (1 / Math.pow(2, casingTier + 1 - recipe.mSpecialValue)); - return super.createOverclockCalculator(recipe).setSpeedBoost(speedBonus); - } - }; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(getMaxInputEu()); - logic.setAvailableAmperage(1); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 4, 2, 0, realBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - casingTier = -2; - return checkPiece(STRUCTURE_PIECE_MAIN, 4, 2, 0); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - inputSeparation = !inputSeparation; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ, ItemStack aTool) { - if (aPlayer.isSneaking()) { - batchMode = !batchMode; - if (batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, "Batch recipes."); - } else { - GT_Utility.sendChatToPlayer(aPlayer, "Don't batch recipes."); - } - } - - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public RecipeMap getRecipeMap() { - return GoodGeneratorRecipeMaps.componentAssemblyLineRecipes; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("casingTier", casingTier); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - casingTier = aNBT.getInteger("casingTier"); - if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { - inputSeparation = aNBT.getBoolean("mSeparate"); - } - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java b/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java deleted file mode 100644 index bfa726952b..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/CoolantTower.java +++ /dev/null @@ -1,211 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.Textures.BlockIcons.*; -import static gregtech.api.util.GT_StructureUtility.*; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class CoolantTower extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable { - - protected IStructureDefinition multiDefinition = null; - private static final int CASING_INDEX = 1539; - - public CoolantTower(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public CoolantTower(String name) { - super(name); - } - - @Override - public IStructureDefinition getStructure_EM() { - if (multiDefinition == null) { - multiDefinition = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { - { " ", " ", " BBB ", " B B ", " B B ", " B B ", - " B B ", " B B ", " BBB ", " ", " " }, - { " ", " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ", - " BB BB ", " BBBBB ", " BBB ", " ", " " }, - { " ", " ", " ", " BBB ", " B B ", " B B ", - " B B ", " BBB ", " ", " ", " " }, - { " ", " ", " ", " BBB ", " B B ", " B B ", - " B B ", " BBB ", " ", " ", " " }, - { " ", " ", " ", " BBB ", " B B ", " B B ", - " B B ", " BBB ", " ", " ", " " }, - { " ", " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ", - " BB BB ", " BBBBB ", " BBB ", " ", " " }, - { " ", " ", " BBB ", " B B ", " B B ", " B B ", - " B B ", " B B ", " BBB ", " ", " " }, - { " ", " ", " BBB ", " B B ", " B B ", " B B ", - " B B ", " B B ", " BBB ", " ", " " }, - { " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ", " BB BB ", - " BB BB ", " BB BB ", " BBBBB ", " BBB ", " " }, - { " ", " BBB ", " B B ", " B B ", " B B ", " B B ", - " B B ", " B B ", " B B ", " BBB ", " " }, - { " ", " BBBBB ", " BB BB ", " BB BB ", " B B ", " B B ", - " B B ", " BB BB ", " BB BB ", " BBBBB ", " " }, - { " HH~HH ", " HBBBBBH ", " HB BH ", "HB BH", "HB BH", "HB BH", - "HB BH", "HB BH", " HB BH ", " HBBBBBH ", " HHHHH " }, - { " CCCCC ", " C C ", " C C ", "C C", "C C", "C C", - "C C", "C C", " C C ", " C C ", " CCCCC " }, })) - .addElement('B', ofBlockAnyMeta(GregTech_API.sBlockConcretes, 8)) - .addElement('C', ofFrame(Materials.TungstenCarbide)) - .addElement( - 'H', - buildHatchAdder(CoolantTower.class).atLeast(GT_HatchElement.InputHatch, GT_HatchElement.OutputHatch) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(ofBlockAnyMeta(GregTech_API.sBlockConcretes, 8))) - .build(); - } - return multiDefinition; - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return structureCheck_EM(mName, 5, 11, 0); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Coolant Tower") - .addInfo("Controller block for the Coolant Tower.") - .addInfo("Turn Steam back to Distilled Water.") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .addController("Mid of the second layer.") - .addInputHatch("Input Hatch", 1) - .addOutputHatch("Output Hatch", 1) - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM(mName, 5, 11, 0, stackSize, hintsOnly); - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return DescTextLocalization.addText("CoolantTower.hint", 3); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new CoolantTower(mName); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - return true; - } - - @Override - protected @NotNull CheckRecipeResult checkProcessing_EM() { - this.mMaxProgresstime = 20; - int steam = 0; - - for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) { - steam += maybeDrainHatch(tHatch); - } - addOutput(GT_ModHandler.getDistilledWater(steam / 160)); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - private int maybeDrainHatch(GT_MetaTileEntity_Hatch_Input tHatch) { - if (tHatch instanceof GT_MetaTileEntity_Hatch_MultiInput) { - int drained = 0; - for (FluidStack maybeSteam : ((GT_MetaTileEntity_Hatch_MultiInput) tHatch).getStoredFluid()) { - drained += maybeDrainSteam(tHatch, maybeSteam); - } - return drained; - } - return maybeDrainSteam(tHatch, tHatch.getFillableStack()); - } - - private int maybeDrainSteam(GT_MetaTileEntity_Hatch_Input tHatch, FluidStack maybeSteam) { - if (maybeSteam == null) return 0; - if (!GT_Utility.areFluidsEqual(maybeSteam, GT_ModHandler.getSteam(1))) return 0; - FluidStack defoSteam = tHatch.drain(ForgeDirection.UNKNOWN, maybeSteam, true); - return defoSteam.amount; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { casingTexturePages[12][3], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[12][3], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[12][3] }; - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 5, 11, 0, elementBudget, env, false, true); - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java b/src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java deleted file mode 100644 index f9eab80f03..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/EssentiaHatch.java +++ /dev/null @@ -1,244 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import java.util.ArrayList; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -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.common.util.ForgeDirection; - -import goodgenerator.crossmod.thaumcraft.LargeEssentiaEnergyData; -import thaumcraft.api.ThaumcraftApiHelper; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.aspects.IAspectContainer; -import thaumcraft.api.aspects.IEssentiaTransport; - -public class EssentiaHatch extends TileEntity implements IAspectContainer, IEssentiaTransport { - - private Aspect mLocked; - private AspectList current = new AspectList(); - public int mState = 0; - - public void setLockedAspect(Aspect aAspect) { - this.mLocked = aAspect; - } - - @Override - public void readFromNBT(NBTTagCompound tagCompound) { - super.readFromNBT(tagCompound); - - this.mLocked = Aspect.getAspect(tagCompound.getString("mLocked")); - this.mState = tagCompound.getInteger("mState"); - current = new AspectList(); - NBTTagList tlist = tagCompound.getTagList("Aspects", 10); - for (int j = 0; j < tlist.tagCount(); ++j) { - NBTTagCompound rs = tlist.getCompoundTagAt(j); - if (rs.hasKey("key")) { - current.add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount")); - } - } - } - - @Override - public void writeToNBT(NBTTagCompound tagCompound) { - super.writeToNBT(tagCompound); - - tagCompound.setString("mLocked", this.mLocked == null ? "" : this.mLocked.getTag()); - tagCompound.setInteger("mState", mState); - NBTTagList tlist = new NBTTagList(); - Aspect[] aspectA = current.getAspects(); - for (Aspect aspect : aspectA) { - if (aspect != null) { - NBTTagCompound f = new NBTTagCompound(); - f.setString("key", aspect.getTag()); - f.setInteger("amount", current.getAmount(aspect)); - tlist.appendTag(f); - } - } - tagCompound.setTag("Aspects", tlist); - } - - public final Packet getDescriptionPacket() { - NBTTagCompound nbt = new NBTTagCompound(); - writeToNBT(nbt); - return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); - } - - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - NBTTagCompound nbt = pkt.func_148857_g(); - readFromNBT(nbt); - } - - public void markDirty() { - super.markDirty(); - if (this.worldObj.isRemote) { - return; - } - this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); - } - - @Override - public void updateEntity() { - fillfrompipe(); - } - - public void fillfrompipe() { - if (getEssentiaAmount(null) >= 1000) return; - TileEntity[] te = new TileEntity[ForgeDirection.VALID_DIRECTIONS.length]; - for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { - te[i] = ThaumcraftApiHelper.getConnectableTile( - this.worldObj, - this.xCoord, - this.yCoord, - this.zCoord, - ForgeDirection.VALID_DIRECTIONS[i]); - if (te[i] != null) { - IEssentiaTransport pipe = (IEssentiaTransport) te[i]; - if (!pipe.canOutputTo(ForgeDirection.VALID_DIRECTIONS[i])) { - continue; - } - if ((pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i].getOpposite()) != null) - && (pipe.getSuctionAmount(ForgeDirection.VALID_DIRECTIONS[i]) - < getSuctionAmount(ForgeDirection.VALID_DIRECTIONS[i]))) { - Aspect readyInput = pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i].getOpposite()); - int type = LargeEssentiaEnergyData.getAspectTypeIndex(readyInput); - if (type != -1 && (mState & (1 << type)) == 0) continue; - if (readyInput.equals(mLocked)) { - addToContainer(mLocked, pipe.takeEssentia(mLocked, 1, ForgeDirection.VALID_DIRECTIONS[i])); - } - if (mLocked == null) addToContainer( - pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i]), - pipe.takeEssentia( - pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i]), - 1, - ForgeDirection.VALID_DIRECTIONS[i])); - } - } - } - } - - @Override - public AspectList getAspects() { - return current; - } - - @Override - public void setAspects(AspectList aspectList) { - this.current.add(aspectList); - } - - @Override - public boolean doesContainerAccept(Aspect aspect) { - int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); - if (type != -1 && (mState & (1 << type)) == 0) return false; - return (mLocked == null || mLocked.equals(aspect)) && getEssentiaAmount(null) <= 1000; - } - - @Override - public int addToContainer(Aspect aspect, int i) { - int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); - if (type != -1 && (mState & (1 << type)) == 0) return i; - int ready = Math.min(1000 - getEssentiaAmount(null), i); - if ((mLocked == null || mLocked.equals(aspect)) && ready > 0) { - current.add(aspect, ready); - this.markDirty(); - return i - ready; - } - this.markDirty(); - return i; - } - - @Override - public boolean takeFromContainer(Aspect aspect, int i) { - return false; - } - - @Override - public boolean takeFromContainer(AspectList aspectList) { - return false; - } - - @Override - public boolean doesContainerContainAmount(Aspect aspect, int i) { - return current.aspects.containsKey(aspect) && i <= current.getAmount(aspect); - } - - @Override - public boolean doesContainerContain(AspectList aspectList) { - ArrayList ret = new ArrayList(); - for (Aspect a : aspectList.aspects.keySet()) ret.add(current.aspects.containsKey(a)); - return !ret.contains(false); - } - - @Override - public int containerContains(Aspect aspect) { - return current.aspects.containsKey(aspect) ? current.getAmount(aspect) : 0; - } - - @Override - public boolean isConnectable(ForgeDirection forgeDirection) { - return true; - } - - @Override - public boolean canInputFrom(ForgeDirection forgeDirection) { - return true; - } - - @Override - public boolean canOutputTo(ForgeDirection forgeDirection) { - return false; - } - - @Override - public void setSuction(Aspect aspect, int i) {} - - @Override - public Aspect getSuctionType(ForgeDirection forgeDirection) { - return this.mLocked; - } - - @Override - public int getSuctionAmount(ForgeDirection forgeDirection) { - return 256; - } - - @Override - public int takeEssentia(Aspect aspect, int i, ForgeDirection forgeDirection) { - return 0; - } - - @Override - public int addEssentia(Aspect aspect, int i, ForgeDirection forgeDirection) { - return i - addToContainer(aspect, i); - } - - @Override - public Aspect getEssentiaType(ForgeDirection forgeDirection) { - if (current == null || current.size() < 1) return null; - return current.getAspects()[0]; - } - - @Override - public int getEssentiaAmount(ForgeDirection forgeDirection) { - int ret = 0; - for (final Aspect A : current.aspects.keySet()) { - ret += current.getAmount(A); - } - return ret; - } - - @Override - public int getMinimumSuction() { - return Integer.MAX_VALUE; - } - - @Override - public boolean renderExtendedTube() { - return true; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch.java b/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch.java deleted file mode 100644 index 93cec4672c..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch.java +++ /dev/null @@ -1,179 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import java.util.Map; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.common.util.ForgeDirection; - -import thaumcraft.api.TileThaumcraft; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.aspects.IAspectContainer; -import thaumcraft.api.aspects.IEssentiaTransport; - -public class EssentiaOutputHatch extends TileThaumcraft implements IAspectContainer, IEssentiaTransport { - - public static final int CAPACITY = 256; - protected AspectList mAspects = new AspectList(); - - public void clear() { - this.mAspects.aspects.clear(); - } - - @Override - public void markDirty() { - super.markDirty(); - if (this.worldObj.isRemote) return; - this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); - } - - @Override - public void readFromNBT(NBTTagCompound nbttagcompound) { - super.readFromNBT(nbttagcompound); - this.mAspects.aspects.clear(); - NBTTagList tlist = nbttagcompound.getTagList("Aspects", 10); - for (int j = 0; j < tlist.tagCount(); ++j) { - NBTTagCompound rs = tlist.getCompoundTagAt(j); - if (rs.hasKey("key")) mAspects.add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount")); - } - } - - @Override - public void writeToNBT(NBTTagCompound nbttagcompound) { - super.writeToNBT(nbttagcompound); - Aspect[] aspectA = this.mAspects.getAspects(); - NBTTagList nbtTagList = new NBTTagList(); - for (Aspect aspect : aspectA) { - if (aspect != null) { - NBTTagCompound f = new NBTTagCompound(); - f.setString("key", aspect.getTag()); - f.setInteger("amount", this.mAspects.getAmount(aspect)); - nbtTagList.appendTag(f); - } - } - nbttagcompound.setTag("Aspects", nbtTagList); - } - - private int remainingCapacity() { - return CAPACITY - this.getEssentiaAmount(null); - } - - @Override - public AspectList getAspects() { - return this.mAspects; - } - - @Override - public void setAspects(AspectList aspectList) { - for (Map.Entry entry : aspectList.aspects.entrySet()) { - this.addEssentia(entry.getKey(), entry.getValue(), null); - } - } - - @Override - public boolean doesContainerAccept(Aspect var1) { - return true; - } - - @Override - public int addToContainer(Aspect aspect, int amount) { - int remaining = 0; - if (amount > this.remainingCapacity()) { - remaining = amount - this.remainingCapacity(); - this.mAspects.add(aspect, this.remainingCapacity()); - } else this.mAspects.add(aspect, amount); - this.markDirty(); - return remaining; - } - - @Override - public boolean takeFromContainer(Aspect aspect, int amount) { - if (this.mAspects != null && this.mAspects.getAmount(aspect) >= amount) { - this.mAspects.remove(aspect, amount); - this.markDirty(); - return true; - } else return false; - } - - @Override - public boolean takeFromContainer(AspectList aspects) { - return true; - } - - @Override - public boolean doesContainerContainAmount(Aspect aspect, int amount) { - return this.mAspects.getAmount(aspect) >= amount; - } - - @Override - public boolean doesContainerContain(AspectList aspectList) { - for (Map.Entry entry : aspectList.aspects.entrySet()) { - if (this.mAspects.getAmount(entry.getKey()) < entry.getValue()) return false; - } - return true; - } - - @Override - public int containerContains(Aspect aspect) { - return this.mAspects.getAmount(aspect); - } - - @Override - public boolean isConnectable(ForgeDirection var1) { - return true; - } - - @Override - public boolean canInputFrom(ForgeDirection var1) { - return false; - } - - @Override - public boolean canOutputTo(ForgeDirection var1) { - return true; - } - - @Override - public void setSuction(Aspect var1, int var2) {} - - @Override - public Aspect getSuctionType(ForgeDirection var1) { - return null; - } - - @Override - public int getSuctionAmount(ForgeDirection var1) { - return 0; - } - - @Override - public int takeEssentia(Aspect aspect, int amount, ForgeDirection var3) { - return this.takeFromContainer(aspect, amount) ? amount : 0; - } - - @Override - public int addEssentia(Aspect aspect, int amount, ForgeDirection direction) { - return amount - addToContainer(aspect, amount); - } - - @Override - public Aspect getEssentiaType(ForgeDirection var1) { - return this.mAspects.size() > 0 ? this.mAspects.getAspects()[0] : null; - } - - @Override - public int getEssentiaAmount(ForgeDirection var1) { - return this.mAspects.visSize(); - } - - @Override - public int getMinimumSuction() { - return 0; - } - - @Override - public boolean renderExtendedTube() { - return true; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch_ME.java b/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch_ME.java deleted file mode 100644 index b576b44e7f..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/EssentiaOutputHatch_ME.java +++ /dev/null @@ -1,150 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import appeng.api.config.Actionable; -import appeng.api.networking.GridFlags; -import appeng.api.networking.IGrid; -import appeng.api.networking.IGridNode; -import appeng.api.networking.security.IActionHost; -import appeng.api.networking.security.MachineSource; -import appeng.api.util.AECableType; -import appeng.api.util.DimensionalCoord; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.helpers.IGridProxyable; -import appeng.tile.TileEvent; -import appeng.tile.events.TileEventType; -import goodgenerator.util.ItemRefer; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumicenergistics.api.grid.IEssentiaGrid; -import thaumicenergistics.api.grid.IMEEssentiaMonitor; - -public class EssentiaOutputHatch_ME extends EssentiaOutputHatch implements IActionHost, IGridProxyable { - - private AENetworkProxy gridProxy = null; - private IMEEssentiaMonitor monitor = null; - private MachineSource asMachineSource = new MachineSource(this); - - @Override - public void updateEntity() { - getProxy(); - super.updateEntity(); - } - - @Override - public void invalidate() { - super.invalidate(); - this.invalidateAE(); - } - - @Override - public void onChunkUnload() { - super.onChunkUnload(); - this.onChunkUnloadAE(); - } - - @TileEvent(TileEventType.WORLD_NBT_READ) - public void readFromNBT_AENetwork(final NBTTagCompound data) { - AENetworkProxy gp = getProxy(); - if (gp != null) getProxy().readFromNBT(data); - } - - @TileEvent(TileEventType.WORLD_NBT_WRITE) - public void writeToNBT_AENetwork(final NBTTagCompound data) { - AENetworkProxy gp = getProxy(); - if (gp != null) gp.writeToNBT(data); - } - - void onChunkUnloadAE() { - AENetworkProxy gp = getProxy(); - if (gp != null) gp.onChunkUnload(); - } - - void invalidateAE() { - AENetworkProxy gp = getProxy(); - if (gp != null) gp.invalidate(); - } - - @Override - public IGridNode getGridNode(ForgeDirection forgeDirection) { - AENetworkProxy gp = getProxy(); - return gp != null ? gp.getNode() : null; - } - - @Override - public void gridChanged() {} - - @Override - public AECableType getCableConnectionType(ForgeDirection forgeDirection) { - return AECableType.SMART; - } - - @Override - public void securityBreak() {} - - @Override - public AENetworkProxy getProxy() { - if (gridProxy == null) { - gridProxy = new AENetworkProxy(this, "proxy", ItemRefer.Essentia_Output_Hatch_ME.get(1), true); - gridProxy.onReady(); - gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); - } - return this.gridProxy; - } - - @Override - public DimensionalCoord getLocation() { - return new DimensionalCoord(this.worldObj, this.xCoord, this.yCoord, this.zCoord); - } - - @Override - public IGridNode getActionableNode() { - AENetworkProxy gp = getProxy(); - return gp != null ? gp.getNode() : null; - } - - @Override - public boolean takeFromContainer(AspectList aspects) { - return false; - } - - @Override - public boolean takeFromContainer(Aspect aspect, int amount) { - return false; - } - - @Override - public int addEssentia(Aspect aspect, int amount, ForgeDirection side) { - return this.addEssentia(aspect, amount, side, Actionable.MODULATE); - } - - public int addEssentia(Aspect aspect, int amount, ForgeDirection side, Actionable mode) { - long rejectedAmount = amount; - if (this.getEssentiaMonitor()) { - rejectedAmount = this.monitor.injectEssentia(aspect, amount, mode, this.getMachineSource(), true); - } - - long acceptedAmount = (long) amount - rejectedAmount; - return (int) acceptedAmount; - } - - protected boolean getEssentiaMonitor() { - IMEEssentiaMonitor essentiaMonitor = null; - IGrid grid = null; - IGridNode node = this.getProxy() - .getNode(); - - if (node != null) { - grid = node.getGrid(); - if (grid != null) essentiaMonitor = grid.getCache(IEssentiaGrid.class); - } - this.monitor = essentiaMonitor; - return (this.monitor != null); - } - - public MachineSource getMachineSource() { - return this.asMachineSource; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java b/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java deleted file mode 100644 index 3589acba60..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/ExtremeHeatExchanger.java +++ /dev/null @@ -1,416 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Textures.BlockIcons.*; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import goodgenerator.api.recipe.ExtremeHeatExchangerRecipe; -import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; - -public class ExtremeHeatExchanger extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable { - - protected IStructureDefinition multiDefinition = null; - - public static double penalty_per_config = 0.015d; - protected int casingAmount = 0; - protected GT_MetaTileEntity_Hatch_Input mHotFluidHatch; - protected GT_MetaTileEntity_Hatch_Output mCooledFluidHatch; - private boolean transformed = false; - private String hotName; - private ExtremeHeatExchangerRecipe tRunningRecipe; - - public ExtremeHeatExchanger(String name) { - super(name); - } - - public ExtremeHeatExchanger(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - @Override - public IStructureDefinition getStructure_EM() { - if (multiDefinition == null) { - multiDefinition = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { - // spotless:off - { " CCC ", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", " CCC " }, - { " CCC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CCC " }, - { " CFC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CEC " }, - { " CCC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CCC " }, - { " CCC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CCC " }, - { " C~C ", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", " CCC " }, - //spotless:on - })) - .addElement( - 'B', - ofChain( - buildHatchAdder(ExtremeHeatExchanger.class) - .atLeast(GT_HatchElement.InputHatch, GT_HatchElement.Maintenance) - .casingIndex(48) - .dot(1) - .build(), - onElementPass(x -> x.casingAmount++, ofBlock(GregTech_API.sBlockCasings4, 0)))) - .addElement( - 'T', - ofChain( - buildHatchAdder(ExtremeHeatExchanger.class) - .atLeast(GT_HatchElement.OutputHatch, GT_HatchElement.Maintenance) - .casingIndex(48) - .dot(2) - .build(), - onElementPass(x -> x.casingAmount++, ofBlock(GregTech_API.sBlockCasings4, 0)))) - .addElement('F', EHEHatches.HotInputHatch.newAny(48, 3)) - .addElement('E', EHEHatches.ColdOutputHatch.newAny(48, 4)) - .addElement( - 'C', - ofChain( - buildHatchAdder(ExtremeHeatExchanger.class).atLeast(GT_HatchElement.Maintenance) - .casingIndex(48) - .dot(5) - .build(), - onElementPass(x -> x.casingAmount++, ofBlock(GregTech_API.sBlockCasings4, 0)))) - .addElement('G', Glasses.chainAllGlasses()) - .addElement('P', ofBlock(GregTech_API.sBlockCasings2, 15)) - .addElement('W', ofBlock(Loaders.pressureResistantWalls, 0)) - .build(); - } - return multiDefinition; - } - - public boolean addHotFluidInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - mHotFluidHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - return true; - } - return false; - } - - public boolean addColdFluidOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - mCooledFluidHatch = (GT_MetaTileEntity_Hatch_Output) aMetaTileEntity; - return true; - } - return false; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - transformed = aNBT.getBoolean("transformed"); - if (aNBT.hasKey("hotName", Constants.NBT.TAG_STRING)) { - String loadedHotName = aNBT.getString("hotName"); - Fluid hotFluid = FluidRegistry.getFluid(loadedHotName); - if (hotFluid != null) { - hotName = loadedHotName; - tRunningRecipe = (ExtremeHeatExchangerRecipe) GoodGeneratorRecipeMaps.extremeHeatExchangerFuels - .getBackend() - .findFuel(hotFluid); - } - } else { - hotName = null; - tRunningRecipe = null; - } - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setBoolean("transformed", transformed); - if (hotName != null) aNBT.setString("hotName", hotName); - super.saveNBTData(aNBT); - } - - @Override - public RecipeMap getRecipeMap() { - return GoodGeneratorRecipeMaps.extremeHeatExchangerFuels; - } - - @Override - protected void clearHatches_EM() { - super.clearHatches_EM(); - mCooledFluidHatch = null; - mHotFluidHatch = null; - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.casingAmount = 0; - return structureCheck_EM(mName, 2, 5, 0) && mMaintenanceHatches.size() == 1 && casingAmount >= 25; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Heat Exchanger/Plasma Heat Exchanger") - .addInfo("Controller block for the Extreme Heat Exchanger.") - .addInfo("Accept Hot fluid like lava, hot coolant or plasma.") - .addInfo("Output SC Steam/SH Steam/Steam.") - .addInfo("Check NEI for more info.") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .addController("Front bottom") - .addOtherStructurePart("Input Hatch", "Distilled water. Any bottom left/right side casing", 1) - .addOtherStructurePart("Output Hatch", "SC Steam/SH Steam/Steam. Any top layer casing", 2) - .addOtherStructurePart("Input Hatch", "Hot fluid or plasma. Front middle on 4th layer", 3) - .addOtherStructurePart("Output Hatch", "Cold fluid. Back middle on 4th layer", 4) - .addMaintenanceHatch("Any Casing", 1, 2, 5) - .addCasingInfoMin("Robust Tungstensteel Machine Casings", 25, false) - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public @NotNull CheckRecipeResult checkProcessing_EM() { - tRunningRecipe = null; - if (mHotFluidHatch.getFluid() == null) return CheckRecipeResultRegistry.SUCCESSFUL; - ExtremeHeatExchangerRecipe tRecipe = (ExtremeHeatExchangerRecipe) GoodGeneratorRecipeMaps.extremeHeatExchangerFuels - .getBackend() - .findFuel(mHotFluidHatch.getFluid()); - if (tRecipe == null) return CheckRecipeResultRegistry.NO_RECIPE; - tRunningRecipe = tRecipe; - this.hotName = mHotFluidHatch.getFluid() - .getFluid() - .getName(); - int tMaxConsume = tRecipe.getMaxHotFluidConsume(); - int transformed_threshold = tRecipe.mSpecialValue; - int tRealConsume = Math.min(tMaxConsume, mHotFluidHatch.getFluid().amount); - double penalty = 0.0d; - double efficiency = 1d; - int shs_reduction_per_config = 150; - - if (mInventory[1] != null && mInventory[1].getUnlocalizedName() - .startsWith("gt.integrated_circuit")) { - int circuit_config = mInventory[1].getItemDamage(); - if (circuit_config >= 1 && circuit_config <= 25) { - penalty = (circuit_config - 1) * penalty_per_config; - transformed_threshold -= (shs_reduction_per_config * (circuit_config - 1)); - } - } - efficiency -= penalty; - - if (transformed_threshold <= 0) transformed_threshold = 1; - - transformed = tRealConsume >= transformed_threshold; - - this.mMaxProgresstime = 20; - this.mEUt = (int) (tRecipe.getEUt() * efficiency * ((double) tRealConsume / (double) tMaxConsume)); - mHotFluidHatch.drain(tRealConsume, true); - mCooledFluidHatch.fill(new FluidStack(tRecipe.getCooledFluid(), tRealConsume), true); - this.mEfficiencyIncrease = 160; - - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (this.mEUt > 0 && tRunningRecipe != null) { - Fluid tReadySteam = transformed ? tRunningRecipe.getHeatedSteam() : tRunningRecipe.getNormalSteam(); - int waterAmount = (int) (this.mEUt / getUnitSteamPower(tReadySteam.getName())) / 160; - if (waterAmount < 0) return false; - if (depleteInput(GT_ModHandler.getDistilledWater(waterAmount))) { - addOutput(new FluidStack(tReadySteam, waterAmount * 160)); - } else { - GT_Log.exp.println(this.mName + " had no more Distilled water!"); - mHotFluidHatch.getBaseMetaTileEntity() - .doExplosion(V[8]); - return false; - } - } - return true; - } - - public double getUnitSteamPower(String steam) { - switch (steam) { - case "steam": - return 0.5; - case "ic2superheatedsteam": - return 1; - case "supercriticalsteam": - return 100; - default: - return -1; - } - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM(mName, 2, 5, 0, stackSize, hintsOnly); - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return DescTextLocalization.addText("ExtremeHeatExchanger.hint", 6); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new ExtremeHeatExchanger(mName); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public String[] getInfoData() { - int tThreshold = tRunningRecipe != null ? tRunningRecipe.mSpecialValue : 0; - return new String[] { - StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - StatCollector.translateToLocal("scanner.info.XHE.0") + " " - + (transformed ? EnumChatFormatting.RED : EnumChatFormatting.YELLOW) - + GT_Utility.formatNumbers(this.mEUt) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("scanner.info.XHE.1") + " " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(tThreshold) - + EnumChatFormatting.RESET - + " L/s" }; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { casingTexturePages[0][48], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][48], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][48] }; - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 2, 5, 0, elementBudget, env, false, true); - } - - private enum EHEHatches implements IHatchElement { - - HotInputHatch(ExtremeHeatExchanger::addHotFluidInputToMachineList, GT_MetaTileEntity_Hatch_Input.class) { - - @Override - public long count(ExtremeHeatExchanger t) { - if (t.mHotFluidHatch == null) return 0; - return 1; - } - }, - ColdOutputHatch(ExtremeHeatExchanger::addColdFluidOutputToMachineList, GT_MetaTileEntity_Hatch_Output.class) { - - @Override - public long count(ExtremeHeatExchanger t) { - if (t.mCooledFluidHatch == null) return 0; - return 1; - } - }; - - private final List> mteClasses; - private final IGT_HatchAdder adder; - - EHEHatches(IGT_HatchAdder adder, Class... mteClasses) { - this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); - this.adder = adder; - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - public IGT_HatchAdder adder() { - return adder; - } - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java b/src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java deleted file mode 100644 index 8d1720c8f2..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/FuelRefineFactory.java +++ /dev/null @@ -1,377 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureUtility; - -import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.enums.GT_HatchElement; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; - -public class FuelRefineFactory extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable { - - private IStructureDefinition multiDefinition = null; - private int Tier = -1; - private int[] cnt = new int[] { 0, 0, 0, 0 }; - private static final Block[] coils = new Block[] { Loaders.FRF_Coil_1, Loaders.FRF_Coil_2, Loaders.FRF_Coil_3, - Loaders.FRF_Coil_4 }; - - public FuelRefineFactory(String name) { - super(name); - useLongPower = true; - } - - public FuelRefineFactory(int id, String name, String nameRegional) { - super(id, name, nameRegional); - useLongPower = true; - } - - @Override - public boolean doRandomMaintenanceDamage() { - return true; - } - - @Override - public void construct(ItemStack itemStack, boolean hintsOnly) { - structureBuild_EM(mName, 7, 12, 1, itemStack, hintsOnly); - } - - @Override - public IStructureDefinition getStructure_EM() { - if (multiDefinition == null) { - multiDefinition = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { " ", " CCC ", " " }, - { " XGX ", " CCFFFCC ", " XGX " }, - { " CC CC ", " CFFCCCFFC ", " CC CC " }, - { " C C ", " CFCC CCFC ", " C C " }, - { " C C ", " CFC CFC ", " C C " }, - { " C C ", " CFC CFC ", " C C " }, - { " X X ", "CFC CFC", " X X " }, - { " G G ", "CFC CFC", " G G " }, - { " X X ", "CFC CFC", " X X " }, - { " C C ", " CFC CFC ", " C C " }, - { " C C ", " CFC CFC ", " C C " }, - { " C C ", " CFCC CCFC ", " C C " }, - { " CC CC ", " CFFC~CFFC ", " CC CC " }, - { " XGX ", " CCFFFCC ", " XGX " }, - { " ", " CCC ", " " } })) - .addElement( - 'X', - buildHatchAdder(FuelRefineFactory.class) - .atLeast( - GT_HatchElement.Maintenance, - GT_HatchElement.InputHatch, - GT_HatchElement.InputBus, - GT_HatchElement.OutputHatch, - HatchElement.EnergyMulti.or(GT_HatchElement.Energy)) - .casingIndex(179) - .dot(1) - .buildAndChain(ofBlock(Loaders.FRF_Casings, 0))) - .addElement('C', ofBlock(Loaders.FRF_Casings, 0)) - .addElement('G', ofBlock(Loaders.fieldRestrictingGlass, 0)) - .addElement( - 'F', - ofChain( - onElementPass(x -> ++x.cnt[0], ofFieldCoil(0)), - onElementPass(x -> ++x.cnt[1], ofFieldCoil(1)), - onElementPass(x -> ++x.cnt[2], ofFieldCoil(2)), - onElementPass(x -> ++x.cnt[3], ofFieldCoil(3)))) - .build(); - } - return multiDefinition; - } - - public static IStructureElement ofFieldCoil(int aIndex) { - return new IStructureElement() { - - @Override - public boolean check(T t, World world, int x, int y, int z) { - Block block = world.getBlock(x, y, z); - return block.equals(coils[aIndex]); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, coils[getIndex(trigger)], 0); - return true; - } - - private int getIndex(ItemStack trigger) { - int s = trigger.stackSize; - if (s > 4 || s <= 0) s = 4; - return s - 1; - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return world.setBlock(x, y, z, coils[getIndex(trigger)], 0, 3); - } - - @Override - public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - return BlocksToPlace.create(coils[getIndex(trigger)], 0); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - if (check(t, world, x, y, z)) return PlaceResult.SKIP; - return StructureUtility.survivalPlaceBlock( - coils[getIndex(trigger)], - 0, - world, - x, - y, - z, - env.getSource(), - env.getActor(), - env.getChatter()); - } - }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Naquadah Fuel Refinery") - .addInfo("Controller block for the Naquadah Fuel Refinery") - .addInfo("But at what cost?") - .addInfo("Produces naquadah fuels.") - .addInfo("Needs field restriction coils to control the fatal radiation.") - .addInfo("Use higher tier coils to unlock more fuel types and reduce the processing times.") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .beginStructureBlock(3, 15, 15, false) - .addInputHatch("The casings adjacent to field restriction glass.") - .addInputBus("The casings adjacent to field restriction glass.", 1) - .addOutputHatch("The casings adjacent to field restriction glass.", 1) - .addEnergyHatch("The casings adjacent to field restriction glass.", 1) - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.Tier = aNBT.getInteger("mTier"); - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mTier", this.Tier); - super.saveNBTData(aNBT); - } - - @Override - public String[] getStructureDescription(ItemStack itemStack) { - return DescTextLocalization.addText("FuelRefineFactory.hint", 8); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - cnt[0] = 0; - cnt[1] = 0; - cnt[2] = 0; - cnt[3] = 0; - return structureCheck_EM(mName, 7, 12, 1) && getTier() != -1; - } - - public int getTier() { - for (int i = 0; i < 4; i++) { - if (cnt[i] == 32) { - Tier = i + 1; - return i; - } - } - Tier = -1; - return -1; - } - - @Override - public RecipeMap getRecipeMap() { - return GoodGeneratorRecipeMaps.naquadahFuelRefineFactoryRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (recipe.mSpecialValue > Tier) { - return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - int overclockAmount = Tier - recipe.mSpecialValue; - return super.createOverclockCalculator(recipe).limitOverclockCount(overclockAmount); - } - }.setOverclock(2.0, 2.0); // Set Overclock to be 2/2 - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(getMaxInputEu()); - logic.setAvailableAmperage(1); - } - - public final boolean addToFRFList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } else { - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - return this.mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { - return this.eEnergyMulti.add((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity); - } else { - return false; - } - } - } - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new FuelRefineFactory(this.mName); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack aStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return true; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public String[] getInfoData() { - String[] infoData = new String[super.getInfoData().length + 1]; - System.arraycopy(super.getInfoData(), 0, infoData, 0, super.getInfoData().length); - infoData[super.getInfoData().length] = StatCollector.translateToLocal("scanner.info.FRF") + " " + this.Tier; - return infoData; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - @SuppressWarnings("ALL") - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(179), - new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE), TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW) - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(179), - new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE), TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_GLOW) - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(179) }; - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 7, 12, 1, elementBudget, env, false, true); - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/DieselGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/DieselGenerator.java deleted file mode 100644 index 5ed8a07ebe..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/DieselGenerator.java +++ /dev/null @@ -1,213 +0,0 @@ -package goodgenerator.blocks.tileEntity.GTMetaTileEntity; - -import static gregtech.api.enums.Textures.BlockIcons.*; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE_GLOW; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.GT_Mod; -import gregtech.api.enums.ItemList; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; - -public class DieselGenerator extends GT_MetaTileEntity_BasicGenerator { - - public int mEfficiency; - - public DieselGenerator(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - new String[] { "Requires liquid Fuel", - "Causes " + (int) (GT_Mod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond * (1.1 - aTier * 0.1)) - + " Pollution per second" }); - mEfficiency = 100 - aTier * 10; - } - - public DieselGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - mEfficiency = 100 - aTier * 10; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new DieselGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.dieselFuels; - } - - @Override - public int getCapacity() { - return 16000; - } - - @Override - public int getEfficiency() { - return this.mEfficiency; - } - - @Override - public int getFuelValue(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack) || getRecipeMap() == null) return 0; - long rValue = super.getFuelValue(aStack); - if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) { - rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3L); - } - if (rValue > Integer.MAX_VALUE) { - throw new ArithmeticException("Integer LOOPBACK!"); - } - return (int) rValue; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aTick % 100 == 0 && mFluid != null && mFluid.amount > this.getCapacity()) { - GT_Log.err.println( - "Dupe Abuse: " + aBaseMetaTileEntity.getOwnerName() - + " Coords: " - + aBaseMetaTileEntity.getXCoord() - + " " - + aBaseMetaTileEntity.getYCoord() - + " " - + aBaseMetaTileEntity.getZCoord()); - aBaseMetaTileEntity.setToFire(); - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public ITexture[] getFront(byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_FRONT), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_FRONT_GLOW) - .glow() - .build()), - OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBack(byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_BACK), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_BACK_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_BOTTOM), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_BOTTOM_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getTop(byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_TOP), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_TOP_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getSides(byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_SIDE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_SIDE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getFrontActive(byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_FRONT_ACTIVE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_FRONT_ACTIVE_GLOW) - .glow() - .build()), - OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBackActive(byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_BACK_ACTIVE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_BACK_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getBottomActive(byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_BOTTOM_ACTIVE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_BOTTOM_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getTopActive(byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_TOP_ACTIVE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_TOP_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getSidesActive(byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_SIDE_ACTIVE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_SIDE_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public int getPollution() { - return (int) (GT_Mod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond * (1.1 - mTier * 0.1)); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTEDieselGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTEDieselGenerator.java new file mode 100644 index 0000000000..c1294f2a91 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTEDieselGenerator.java @@ -0,0 +1,213 @@ +package goodgenerator.blocks.tileEntity.GTMetaTileEntity; + +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE_GLOW; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.GTMod; +import gregtech.api.enums.ItemList; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicGenerator; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; + +public class MTEDieselGenerator extends MTEBasicGenerator { + + public int mEfficiency; + + public MTEDieselGenerator(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + new String[] { "Requires liquid Fuel", + "Causes " + (int) (GTMod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond * (1.1 - aTier * 0.1)) + + " Pollution per second" }); + mEfficiency = 100 - aTier * 10; + } + + public MTEDieselGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + mEfficiency = 100 - aTier * 10; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEDieselGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.dieselFuels; + } + + @Override + public int getCapacity() { + return 16000; + } + + @Override + public int getEfficiency() { + return this.mEfficiency; + } + + @Override + public int getFuelValue(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack) || getRecipeMap() == null) return 0; + long rValue = super.getFuelValue(aStack); + if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) { + rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3L); + } + if (rValue > Integer.MAX_VALUE) { + throw new ArithmeticException("Integer LOOPBACK!"); + } + return (int) rValue; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aTick % 100 == 0 && mFluid != null && mFluid.amount > this.getCapacity()) { + GTLog.err.println( + "Dupe Abuse: " + aBaseMetaTileEntity.getOwnerName() + + " Coords: " + + aBaseMetaTileEntity.getXCoord() + + " " + + aBaseMetaTileEntity.getYCoord() + + " " + + aBaseMetaTileEntity.getZCoord()); + aBaseMetaTileEntity.setToFire(); + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_FRONT), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_FRONT_GLOW) + .glow() + .build()), + OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BACK), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BACK_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BOTTOM), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BOTTOM_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_TOP), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_TOP_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_SIDE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_SIDE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_FRONT_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_FRONT_ACTIVE_GLOW) + .glow() + .build()), + OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BACK_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BACK_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BOTTOM_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BOTTOM_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_TOP_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_TOP_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_SIDE_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_SIDE_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public int getPollution() { + return (int) (GTMod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond * (1.1 - mTier * 0.1)); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronAccelerator.java b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronAccelerator.java new file mode 100644 index 0000000000..a9c70d9284 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronAccelerator.java @@ -0,0 +1,48 @@ +package goodgenerator.blocks.tileEntity.GTMetaTileEntity; + +import static gregtech.api.enums.GTValues.V; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; + +public class MTENeutronAccelerator extends MTEHatchEnergy { + + public MTENeutronAccelerator(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTENeutronAccelerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public int getMaxEUConsume() { + return (int) (V[mTier] * 8 / 10); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTENeutronAccelerator(mName, mTier, this.getDescription(), mTextures); + } + + @Override + public String[] getDescription() { + return new String[] { "Input EU to Accelerate the Neutron!", "Max EU input: " + this.maxEUInput(), + "Max EU consumption: " + this.getMaxEUConsume(), + "Every EU can be transformed into 10~20 eV Neutron Kinetic Energy." }; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (aBaseMetaTileEntity.getStoredEU() >= getMaxEUConsume() && aBaseMetaTileEntity.isAllowedToWork()) { + setEUVar(aBaseMetaTileEntity.getStoredEU() - getMaxEUConsume()); + aBaseMetaTileEntity.setActive(true); + } else { + aBaseMetaTileEntity.setActive(false); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronSensor.java b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronSensor.java new file mode 100644 index 0000000000..5513fcd7c6 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTENeutronSensor.java @@ -0,0 +1,272 @@ +package goodgenerator.blocks.tileEntity.GTMetaTileEntity; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import crazypants.enderio.Log; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.common.gui.modularui.widget.CoverCycleButtonWidget; + +public class MTENeutronSensor extends MTEHatch { + + private static final IIconContainer textureFont = new Textures.BlockIcons.CustomIcon("icons/NeutronSensorFont"); + private static final IIconContainer textureFont_Glow = new Textures.BlockIcons.CustomIcon( + "icons/NeutronSensorFont_GLOW"); + + protected int threshold = 0; + protected boolean inverted = false; + boolean isOn = false; + + public MTENeutronSensor(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 0, "Detect Neutron Kinetic Energy."); + } + + public MTENeutronSensor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + return new String[] { "Can be installed in Neutron Activator.", + "Output Redstone Signal according to the Neutron Kinetic Energy.", + "Right click to open the GUI and setting." }; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (aNBT.hasKey("mBoxContext")) { + // Convert legacy settings + setThresholdFromString(aNBT.getString("mBoxContext")); + } else { + threshold = aNBT.getInteger("mThreshold"); + inverted = aNBT.getBoolean("mInverted"); + } + super.loadNBTData(aNBT); + } + + /** + * Used to convert legacy setting where the sensor would use a string like ">200keV" to set its threshold. This + * method updates the {@link #threshold} and {@link #inverted} fields based on the input string. The string is + * assumed to be in format "(operator)(value)[suffix](ev)", where: + *
    + *
  • (operator) is one of "<", ">", "<=", ">=", "==", or "!="
  • + *
  • (value) is a numeric value (sequence of decimal digits)
  • + *
  • (suffix) is "k", "K", "m", or "M" (optional)
  • + *
  • (ev) is the string "ev", case-insensitive.
  • + *
+ * Note that operators "==" and "!=" can not be converted exactly, as the new threshold supports only a binary + * comparison (less than, or greater than or equal). Thus "==" is interpreted in the same way as "<=", and "!=" as + * ">". This shouldn't be a big problem for real setups, because one should probably not be testing for strict + * equality here anyway. The possible reasonable conditions "==0eV" and "!=0eV" will continue working as before. + * + * @param text String to convert. + */ + private void setThresholdFromString(String text) { + Matcher matcher = Pattern.compile("^(<|>|<=|>=|==|!=)([0-9]*)(|k|m)(ev)$", Pattern.CASE_INSENSITIVE) + .matcher(text); + + if (!matcher.matches()) { + Log.error("Failed to parse Neutron Sensor setting: \"" + text + "\"!"); + return; + } + + String operator = matcher.group(1); + String value = matcher.group(2); + String suffix = matcher.group(3); + + int newThreshold = Integer.parseInt(value); + + switch (suffix) { + case "k": + case "K": + newThreshold *= 1000; + break; + case "m": + case "M": + newThreshold *= 1_000_000; + break; + } + + switch (operator) { + case "<": + threshold = newThreshold; + inverted = true; + break; + case ">": + threshold = newThreshold + 1; + inverted = false; + break; + case "<=": + threshold = newThreshold + 1; + inverted = true; + break; + case ">=": + threshold = newThreshold; + inverted = false; + break; + case "==": // Interpret as <= to keep "==0eV" working as before. + threshold = newThreshold + 1; + inverted = true; + break; + case "!=": // Interpret as > to keep "!=0eV" working as before. + threshold = newThreshold + 1; + inverted = false; + break; + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mThreshold", threshold); + aNBT.setBoolean("mInverted", inverted); + super.saveNBTData(aNBT); + } + + @Override + public void initDefaultModes(NBTTagCompound aNBT) { + getBaseMetaTileEntity().setActive(true); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + /** + * Updates redstone output strength based on the eV of the multiblock. + * + * @param eV Amount of eV to compare. + */ + public void updateRedstoneOutput(int eV) { + isOn = (eV >= threshold) ^ inverted; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), TextureFactory.builder() + .addIcon(textureFont_Glow) + .glow() + .build() }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont) }; + } + + @Override + public boolean allowGeneralRedstoneOutput() { + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (isOn) { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 15); + } + } else { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 0); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTENeutronSensor(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection Side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + final String INVERTED = GTUtility.trans("INVERTED", "Inverted"); + final String NORMAL = GTUtility.trans("NORMAL", "Normal"); + + builder.widget( + new CoverCycleButtonWidget().setToggle(() -> inverted, (val) -> inverted = val) + .setTextureGetter( + (state) -> state == 1 ? GTUITextures.OVERLAY_BUTTON_REDSTONE_ON + : GTUITextures.OVERLAY_BUTTON_REDSTONE_OFF) + .addTooltip(0, NORMAL) + .addTooltip(1, INVERTED) + .setPos(10, 8)) + .widget( + new TextWidget().setStringSupplier(() -> inverted ? INVERTED : NORMAL) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setTextAlignment(Alignment.CenterLeft) + .setPos(28, 12)) + .widget( + new NumericWidget().setBounds(0, 1200000000) + .setGetter(() -> threshold) + .setSetter((value) -> threshold = (int) value) + .setScrollValues(1000, 1, 1_000_000) + .setTextColor(Color.WHITE.dark(1)) + .setTextAlignment(Alignment.CenterLeft) + .setFocusOnGuiOpen(true) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .setPos(10, 28) + .setSize(77, 12)) + .widget( + new TextWidget(StatCollector.translateToLocal("gui.NeutronSensor.4")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setTextAlignment(Alignment.CenterLeft) + .setPos(90, 30)); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTEYOTTAHatch.java b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTEYOTTAHatch.java new file mode 100644 index 0000000000..51dbc7f199 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/MTEYOTTAHatch.java @@ -0,0 +1,469 @@ +package goodgenerator.blocks.tileEntity.GTMetaTileEntity; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +import appeng.api.config.AccessRestriction; +import appeng.api.config.Actionable; +import appeng.api.networking.GridFlags; +import appeng.api.networking.IGrid; +import appeng.api.networking.IGridNode; +import appeng.api.networking.events.MENetworkCellArrayUpdate; +import appeng.api.networking.events.MENetworkStorageEvent; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.storage.IStorageGrid; +import appeng.api.storage.ICellContainer; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.IMEInventoryHandler; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IItemList; +import appeng.api.util.AECableType; +import appeng.api.util.DimensionalCoord; +import appeng.me.helpers.AENetworkProxy; +import appeng.me.helpers.IGridProxyable; +import goodgenerator.blocks.tileEntity.MTEYottaFluidTank; +import goodgenerator.loader.Loaders; +import goodgenerator.util.StackUtils; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTEYOTTAHatch extends MTEHatch implements IGridProxyable, IActionHost, ICellContainer, + IMEInventory, IMEInventoryHandler { + + private static final IIconContainer textureFont = new Textures.BlockIcons.CustomIcon("icons/YOTTAHatch"); + + private MTEYottaFluidTank host; + private AENetworkProxy gridProxy = null; + private int priority; + private byte tickRate = 20; + private FluidStack lastFluid = null; + private BigInteger lastAmt = BigInteger.ZERO; + private AccessRestriction readMode = AccessRestriction.READ_WRITE; + private final AccessRestriction[] AEModes = new AccessRestriction[] { AccessRestriction.NO_ACCESS, + AccessRestriction.READ, AccessRestriction.WRITE, AccessRestriction.READ_WRITE }; + + private static final BigInteger MAX_LONG_BIGINT = BigInteger.valueOf(Long.MAX_VALUE); + + public MTEYOTTAHatch(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { "Special I/O port for AE2FC.", "Directly connected YOTTank with AE fluid storage system.", + "Use screwdriver to set storage priority", "Use soldering iron to set read/write mode" }); + } + + public MTEYOTTAHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + public void setTank(MTEYottaFluidTank te) { + this.host = te; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mAEPriority", this.priority); + aNBT.setInteger("mAEMode", this.readMode.ordinal()); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.priority = aNBT.getInteger("mAEPriority"); + this.readMode = AEModes[aNBT.getInteger("mAEMode")]; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ, + ItemStack toolStack) { + if (aPlayer.isSneaking()) this.priority -= 10; + else this.priority += 10; + GTUtility + .sendChatToPlayer(aPlayer, String.format(StatCollector.translateToLocal("yothatch.chat.0"), this.priority)); + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack toolStack) { + this.readMode = AEModes[(readMode.ordinal() + 1) % 4]; + GTUtility + .sendChatToPlayer(aPlayer, String.format(StatCollector.translateToLocal("yothatch.chat.1"), this.readMode)); + return true; + } + + @Override + public IGridNode getGridNode(ForgeDirection forgeDirection) { + AENetworkProxy gp = getProxy(); + return gp != null ? gp.getNode() : null; + } + + @Override + public AECableType getCableConnectionType(ForgeDirection forgeDirection) { + return AECableType.SMART; + } + + @Override + public void securityBreak() {} + + @Override + public AENetworkProxy getProxy() { + if (gridProxy == null) { + gridProxy = new AENetworkProxy(this, "proxy", Loaders.YFH, true); + gridProxy.onReady(); + gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); + } + return this.gridProxy; + } + + @Override + public DimensionalCoord getLocation() { + IGregTechTileEntity gtm = this.getBaseMetaTileEntity(); + return new DimensionalCoord(gtm.getWorld(), gtm.getXCoord(), gtm.getYCoord(), gtm.getZCoord()); + } + + @Override + public IItemList getAvailableItems(IItemList out, int iteration) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return out; + if (host.mFluid == null || host.mStorageCurrent.signum() <= 0) return out; + long ready; + if (host.mStorageCurrent.compareTo(MAX_LONG_BIGINT) >= 0) { + ready = Long.MAX_VALUE; + } else ready = host.mStorageCurrent.longValue(); + out.add(StackUtils.createAEFluidStack(host.mFluid.getFluid(), ready)); + return out; + } + + @Override + public IAEFluidStack injectItems(IAEFluidStack input, Actionable type, BaseActionSource src) { + long amt = fill(null, input, type.equals(Actionable.MODULATE)); + if (amt == 0) { + return input; + } + input = input.copy(); + input.decStackSize(amt); + if (input.getStackSize() <= 0) return null; + return input; + } + + @Override + public IAEFluidStack extractItems(IAEFluidStack request, Actionable mode, BaseActionSource src) { + IAEFluidStack ready = drain(null, request, false); + if (ready != null) { + if (mode.equals(Actionable.MODULATE)) drain(null, ready, true); + return ready; + } else return null; + } + + @Override + public StorageChannel getChannel() { + return StorageChannel.FLUIDS; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + getProxy(); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (shouldTick(aTick)) { + if (isChanged()) { + IGridNode node = getGridNode(null); + if (node != null) { + IGrid grid = node.getGrid(); + if (grid != null) { + grid.postEvent(new MENetworkCellArrayUpdate()); + IStorageGrid storageGrid = grid.getCache(IStorageGrid.class); + if (storageGrid == null) { + node.getGrid() + .postEvent(new MENetworkStorageEvent(null, StorageChannel.FLUIDS)); + } else { + node.getGrid() + .postEvent( + new MENetworkStorageEvent(storageGrid.getFluidInventory(), StorageChannel.FLUIDS)); + } + node.getGrid() + .postEvent(new MENetworkCellArrayUpdate()); + } + } + faster(); + update(); + } else { + slower(); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public int getCapacity() { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return 0; + if (host.mStorage.compareTo(MTEYottaFluidTank.MAX_INT_BIGINT) >= 0) { + return Integer.MAX_VALUE; + } else return host.mStorage.intValue(); + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return 0; + if (host.mLockedFluid != null && !host.mLockedFluid.isFluidEqual(resource)) return 0; + if (host.mFluid == null || host.mFluid.isFluidEqual(resource)) { + if (host.mFluid == null) { + host.mFluid = resource.copy(); + host.mFluid.amount = 1; + } + + if (host.addFluid(resource.amount, doFill)) { + return resource.amount; + } else { + final int returned; + if (host.getIsVoidExcessEnabled()) { + returned = resource.amount; + } else { + final BigInteger delta = host.mStorage.subtract(host.mStorageCurrent); + returned = delta.intValueExact(); + } + if (doFill) host.mStorageCurrent = host.mStorage; + return returned; + } + } + return 0; + } + + public long fill(@SuppressWarnings("unused") ForgeDirection from, IAEFluidStack resource, boolean doFill) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return 0; + if (host.mLockedFluid != null && host.mLockedFluid.getFluid() != resource.getFluid()) return 0; + if (host.mFluid == null || host.mFluid.getFluid() == resource.getFluid()) { + if (host.mFluid == null) { + host.mFluid = resource.getFluidStack(); // makes a copy internally + host.mFluid.amount = 1; + } + + if (host.addFluid(resource.getStackSize(), doFill)) { + return resource.getStackSize(); + } else { + final long returned; + if (host.getIsVoidExcessEnabled()) { + returned = resource.getStackSize(); + } else { + final BigInteger delta = host.mStorage.subtract(host.mStorageCurrent); + returned = delta.longValueExact(); + } + if (doFill) host.mStorageCurrent = host.mStorage; + return returned; + } + } + return 0; + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return null; + if (host.mFluid == null || host.mFluid.getFluid() != resource.getFluid()) return null; + int ready; + if (host.mStorageCurrent.compareTo(MTEYottaFluidTank.MAX_INT_BIGINT) >= 0) { + ready = Integer.MAX_VALUE; + } else ready = host.mStorageCurrent.intValue(); + ready = Math.min(ready, resource.amount); + if (doDrain) { + host.reduceFluid(ready); + } + return new FluidStack(resource.getFluid(), ready); + } + + public IAEFluidStack drain(@SuppressWarnings("unused") ForgeDirection from, IAEFluidStack resource, + boolean doDrain) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return null; + if (host.mFluid == null || host.mFluid.getFluid() != resource.getFluid()) return null; + long ready; + if (host.mStorageCurrent.compareTo(MAX_LONG_BIGINT) > 0) { + ready = Long.MAX_VALUE; + } else ready = host.mStorageCurrent.longValue(); + ready = Math.min(ready, resource.getStackSize()); + if (doDrain) { + host.reduceFluid(ready); + } + IAEFluidStack copy = resource.copy(); + copy.setStackSize(ready); + return copy; + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return null; + if (host.mFluid == null) return null; + final FluidStack drainStack = host.mFluid.copy(); + drainStack.amount = maxDrain; + return this.drain(from, drainStack, doDrain); + } + + private static final FluidTankInfo[] EMPTY_TANK_INFO = new FluidTankInfo[] { new FluidTankInfo(null, 0) }; + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) { + if (host == null || host.getBaseMetaTileEntity() == null + || !host.getBaseMetaTileEntity() + .isActive()) + return EMPTY_TANK_INFO; + + return host.getTankInfo(from); + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEYOTTAHatch(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public IGridNode getActionableNode() { + AENetworkProxy gp = getProxy(); + return gp != null ? gp.getNode() : null; + } + + @Override + public AccessRestriction getAccess() { + return this.readMode; + } + + @Override + public boolean isPrioritized(IAEFluidStack input) { + return true; + } + + @Override + public boolean canAccept(IAEFluidStack input) { + FluidStack rInput = input.getFluidStack(); + return fill(null, rInput, false) > 0; + } + + @Override + @SuppressWarnings("rawtypes") + public List getCellArray(StorageChannel channel) { + List list = new ArrayList<>(); + if (channel == StorageChannel.FLUIDS) { + list.add(this); + } + return list; + } + + @Override + public int getPriority() { + return this.priority; + } + + @Override + public int getSlot() { + return 0; + } + + @Override + public boolean validForPass(int i) { + return true; + } + + @Override + public void saveChanges(IMEInventory cellInventory) { + // This is handled by host itself. + } + + private boolean isChanged() { + if (this.host == null) return false; + return !this.lastAmt.equals(this.host.mStorageCurrent) || this.lastFluid != this.host.mFluid; + } + + private void update() { + if (this.host == null) return; + this.lastAmt = this.host.mStorageCurrent; + this.lastFluid = this.host.mFluid; + } + + private void faster() { + if (this.tickRate > 15) { + this.tickRate -= 5; + } + } + + private void slower() { + if (this.tickRate < 100) { + this.tickRate += 5; + } + } + + private boolean shouldTick(long tick) { + if (this.host == null) return false; + return tick % this.tickRate == 0; + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronAccelerator.java b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronAccelerator.java deleted file mode 100644 index 730374db66..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronAccelerator.java +++ /dev/null @@ -1,48 +0,0 @@ -package goodgenerator.blocks.tileEntity.GTMetaTileEntity; - -import static gregtech.api.enums.GT_Values.V; - -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; - -public class NeutronAccelerator extends GT_MetaTileEntity_Hatch_Energy { - - public NeutronAccelerator(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public NeutronAccelerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public int getMaxEUConsume() { - return (int) (V[mTier] * 8 / 10); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new NeutronAccelerator(mName, mTier, this.getDescription(), mTextures); - } - - @Override - public String[] getDescription() { - return new String[] { "Input EU to Accelerate the Neutron!", "Max EU input: " + this.maxEUInput(), - "Max EU consumption: " + this.getMaxEUConsume(), - "Every EU can be transformed into 10~20 eV Neutron Kinetic Energy." }; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (aBaseMetaTileEntity.getStoredEU() >= getMaxEUConsume() && aBaseMetaTileEntity.isAllowedToWork()) { - setEUVar(aBaseMetaTileEntity.getStoredEU() - getMaxEUConsume()); - aBaseMetaTileEntity.setActive(true); - } else { - aBaseMetaTileEntity.setActive(false); - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronSensor.java b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronSensor.java deleted file mode 100644 index 10a6814ddb..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/NeutronSensor.java +++ /dev/null @@ -1,272 +0,0 @@ -package goodgenerator.blocks.tileEntity.GTMetaTileEntity; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import crazypants.enderio.Log; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.common.gui.modularui.widget.CoverCycleButtonWidget; - -public class NeutronSensor extends GT_MetaTileEntity_Hatch { - - private static final IIconContainer textureFont = new Textures.BlockIcons.CustomIcon("icons/NeutronSensorFont"); - private static final IIconContainer textureFont_Glow = new Textures.BlockIcons.CustomIcon( - "icons/NeutronSensorFont_GLOW"); - - protected int threshold = 0; - protected boolean inverted = false; - boolean isOn = false; - - public NeutronSensor(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 0, "Detect Neutron Kinetic Energy."); - } - - public NeutronSensor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - return new String[] { "Can be installed in Neutron Activator.", - "Output Redstone Signal according to the Neutron Kinetic Energy.", - "Right click to open the GUI and setting." }; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - if (aNBT.hasKey("mBoxContext")) { - // Convert legacy settings - setThresholdFromString(aNBT.getString("mBoxContext")); - } else { - threshold = aNBT.getInteger("mThreshold"); - inverted = aNBT.getBoolean("mInverted"); - } - super.loadNBTData(aNBT); - } - - /** - * Used to convert legacy setting where the sensor would use a string like ">200keV" to set its threshold. This - * method updates the {@link #threshold} and {@link #inverted} fields based on the input string. The string is - * assumed to be in format "(operator)(value)[suffix](ev)", where: - *
    - *
  • (operator) is one of "<", ">", "<=", ">=", "==", or "!="
  • - *
  • (value) is a numeric value (sequence of decimal digits)
  • - *
  • (suffix) is "k", "K", "m", or "M" (optional)
  • - *
  • (ev) is the string "ev", case-insensitive.
  • - *
- * Note that operators "==" and "!=" can not be converted exactly, as the new threshold supports only a binary - * comparison (less than, or greater than or equal). Thus "==" is interpreted in the same way as "<=", and "!=" as - * ">". This shouldn't be a big problem for real setups, because one should probably not be testing for strict - * equality here anyway. The possible reasonable conditions "==0eV" and "!=0eV" will continue working as before. - * - * @param text String to convert. - */ - private void setThresholdFromString(String text) { - Matcher matcher = Pattern.compile("^(<|>|<=|>=|==|!=)([0-9]*)(|k|m)(ev)$", Pattern.CASE_INSENSITIVE) - .matcher(text); - - if (!matcher.matches()) { - Log.error("Failed to parse Neutron Sensor setting: \"" + text + "\"!"); - return; - } - - String operator = matcher.group(1); - String value = matcher.group(2); - String suffix = matcher.group(3); - - int newThreshold = Integer.parseInt(value); - - switch (suffix) { - case "k": - case "K": - newThreshold *= 1000; - break; - case "m": - case "M": - newThreshold *= 1_000_000; - break; - } - - switch (operator) { - case "<": - threshold = newThreshold; - inverted = true; - break; - case ">": - threshold = newThreshold + 1; - inverted = false; - break; - case "<=": - threshold = newThreshold + 1; - inverted = true; - break; - case ">=": - threshold = newThreshold; - inverted = false; - break; - case "==": // Interpret as <= to keep "==0eV" working as before. - threshold = newThreshold + 1; - inverted = true; - break; - case "!=": // Interpret as > to keep "!=0eV" working as before. - threshold = newThreshold + 1; - inverted = false; - break; - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mThreshold", threshold); - aNBT.setBoolean("mInverted", inverted); - super.saveNBTData(aNBT); - } - - @Override - public void initDefaultModes(NBTTagCompound aNBT) { - getBaseMetaTileEntity().setActive(true); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - /** - * Updates redstone output strength based on the eV of the multiblock. - * - * @param eV Amount of eV to compare. - */ - public void updateRedstoneOutput(int eV) { - isOn = (eV >= threshold) ^ inverted; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), TextureFactory.builder() - .addIcon(textureFont_Glow) - .glow() - .build() }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont) }; - } - - @Override - public boolean allowGeneralRedstoneOutput() { - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (isOn) { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 15); - } - } else { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 0); - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new NeutronSensor(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection Side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); - final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); - - builder.widget( - new CoverCycleButtonWidget().setToggle(() -> inverted, (val) -> inverted = val) - .setTextureGetter( - (state) -> state == 1 ? GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON - : GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF) - .addTooltip(0, NORMAL) - .addTooltip(1, INVERTED) - .setPos(10, 8)) - .widget( - new TextWidget().setStringSupplier(() -> inverted ? INVERTED : NORMAL) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setTextAlignment(Alignment.CenterLeft) - .setPos(28, 12)) - .widget( - new NumericWidget().setBounds(0, 1200000000) - .setGetter(() -> threshold) - .setSetter((value) -> threshold = (int) value) - .setScrollValues(1000, 1, 1_000_000) - .setTextColor(Color.WHITE.dark(1)) - .setTextAlignment(Alignment.CenterLeft) - .setFocusOnGuiOpen(true) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) - .setPos(10, 28) - .setSize(77, 12)) - .widget( - new TextWidget(StatCollector.translateToLocal("gui.NeutronSensor.4")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setTextAlignment(Alignment.CenterLeft) - .setPos(90, 30)); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/YOTTAHatch.java b/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/YOTTAHatch.java deleted file mode 100644 index 52c7522c10..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/GTMetaTileEntity/YOTTAHatch.java +++ /dev/null @@ -1,469 +0,0 @@ -package goodgenerator.blocks.tileEntity.GTMetaTileEntity; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; - -import appeng.api.config.AccessRestriction; -import appeng.api.config.Actionable; -import appeng.api.networking.GridFlags; -import appeng.api.networking.IGrid; -import appeng.api.networking.IGridNode; -import appeng.api.networking.events.MENetworkCellArrayUpdate; -import appeng.api.networking.events.MENetworkStorageEvent; -import appeng.api.networking.security.BaseActionSource; -import appeng.api.networking.security.IActionHost; -import appeng.api.networking.storage.IStorageGrid; -import appeng.api.storage.ICellContainer; -import appeng.api.storage.IMEInventory; -import appeng.api.storage.IMEInventoryHandler; -import appeng.api.storage.StorageChannel; -import appeng.api.storage.data.IAEFluidStack; -import appeng.api.storage.data.IItemList; -import appeng.api.util.AECableType; -import appeng.api.util.DimensionalCoord; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.helpers.IGridProxyable; -import goodgenerator.blocks.tileEntity.YottaFluidTank; -import goodgenerator.loader.Loaders; -import goodgenerator.util.StackUtils; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class YOTTAHatch extends GT_MetaTileEntity_Hatch implements IGridProxyable, IActionHost, ICellContainer, - IMEInventory, IMEInventoryHandler { - - private static final IIconContainer textureFont = new Textures.BlockIcons.CustomIcon("icons/YOTTAHatch"); - - private YottaFluidTank host; - private AENetworkProxy gridProxy = null; - private int priority; - private byte tickRate = 20; - private FluidStack lastFluid = null; - private BigInteger lastAmt = BigInteger.ZERO; - private AccessRestriction readMode = AccessRestriction.READ_WRITE; - private final AccessRestriction[] AEModes = new AccessRestriction[] { AccessRestriction.NO_ACCESS, - AccessRestriction.READ, AccessRestriction.WRITE, AccessRestriction.READ_WRITE }; - - private static final BigInteger MAX_LONG_BIGINT = BigInteger.valueOf(Long.MAX_VALUE); - - public YOTTAHatch(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { "Special I/O port for AE2FC.", "Directly connected YOTTank with AE fluid storage system.", - "Use screwdriver to set storage priority", "Use soldering iron to set read/write mode" }); - } - - public YOTTAHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - public void setTank(YottaFluidTank te) { - this.host = te; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mAEPriority", this.priority); - aNBT.setInteger("mAEMode", this.readMode.ordinal()); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.priority = aNBT.getInteger("mAEPriority"); - this.readMode = AEModes[aNBT.getInteger("mAEMode")]; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ, - ItemStack toolStack) { - if (aPlayer.isSneaking()) this.priority -= 10; - else this.priority += 10; - GT_Utility - .sendChatToPlayer(aPlayer, String.format(StatCollector.translateToLocal("yothatch.chat.0"), this.priority)); - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ, ItemStack toolStack) { - this.readMode = AEModes[(readMode.ordinal() + 1) % 4]; - GT_Utility - .sendChatToPlayer(aPlayer, String.format(StatCollector.translateToLocal("yothatch.chat.1"), this.readMode)); - return true; - } - - @Override - public IGridNode getGridNode(ForgeDirection forgeDirection) { - AENetworkProxy gp = getProxy(); - return gp != null ? gp.getNode() : null; - } - - @Override - public AECableType getCableConnectionType(ForgeDirection forgeDirection) { - return AECableType.SMART; - } - - @Override - public void securityBreak() {} - - @Override - public AENetworkProxy getProxy() { - if (gridProxy == null) { - gridProxy = new AENetworkProxy(this, "proxy", Loaders.YFH, true); - gridProxy.onReady(); - gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); - } - return this.gridProxy; - } - - @Override - public DimensionalCoord getLocation() { - IGregTechTileEntity gtm = this.getBaseMetaTileEntity(); - return new DimensionalCoord(gtm.getWorld(), gtm.getXCoord(), gtm.getYCoord(), gtm.getZCoord()); - } - - @Override - public IItemList getAvailableItems(IItemList out, int iteration) { - if (host == null || host.getBaseMetaTileEntity() == null - || !host.getBaseMetaTileEntity() - .isActive()) - return out; - if (host.mFluid == null || host.mStorageCurrent.signum() <= 0) return out; - long ready; - if (host.mStorageCurrent.compareTo(MAX_LONG_BIGINT) >= 0) { - ready = Long.MAX_VALUE; - } else ready = host.mStorageCurrent.longValue(); - out.add(StackUtils.createAEFluidStack(host.mFluid.getFluid(), ready)); - return out; - } - - @Override - public IAEFluidStack injectItems(IAEFluidStack input, Actionable type, BaseActionSource src) { - long amt = fill(null, input, type.equals(Actionable.MODULATE)); - if (amt == 0) { - return input; - } - input = input.copy(); - input.decStackSize(amt); - if (input.getStackSize() <= 0) return null; - return input; - } - - @Override - public IAEFluidStack extractItems(IAEFluidStack request, Actionable mode, BaseActionSource src) { - IAEFluidStack ready = drain(null, request, false); - if (ready != null) { - if (mode.equals(Actionable.MODULATE)) drain(null, ready, true); - return ready; - } else return null; - } - - @Override - public StorageChannel getChannel() { - return StorageChannel.FLUIDS; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - getProxy(); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (shouldTick(aTick)) { - if (isChanged()) { - IGridNode node = getGridNode(null); - if (node != null) { - IGrid grid = node.getGrid(); - if (grid != null) { - grid.postEvent(new MENetworkCellArrayUpdate()); - IStorageGrid storageGrid = grid.getCache(IStorageGrid.class); - if (storageGrid == null) { - node.getGrid() - .postEvent(new MENetworkStorageEvent(null, StorageChannel.FLUIDS)); - } else { - node.getGrid() - .postEvent( - new MENetworkStorageEvent(storageGrid.getFluidInventory(), StorageChannel.FLUIDS)); - } - node.getGrid() - .postEvent(new MENetworkCellArrayUpdate()); - } - } - faster(); - update(); - } else { - slower(); - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public int getCapacity() { - if (host == null || host.getBaseMetaTileEntity() == null - || !host.getBaseMetaTileEntity() - .isActive()) - return 0; - if (host.mStorage.compareTo(YottaFluidTank.MAX_INT_BIGINT) >= 0) { - return Integer.MAX_VALUE; - } else return host.mStorage.intValue(); - } - - @Override - public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { - if (host == null || host.getBaseMetaTileEntity() == null - || !host.getBaseMetaTileEntity() - .isActive()) - return 0; - if (host.mLockedFluid != null && !host.mLockedFluid.isFluidEqual(resource)) return 0; - if (host.mFluid == null || host.mFluid.isFluidEqual(resource)) { - if (host.mFluid == null) { - host.mFluid = resource.copy(); - host.mFluid.amount = 1; - } - - if (host.addFluid(resource.amount, doFill)) { - return resource.amount; - } else { - final int returned; - if (host.getIsVoidExcessEnabled()) { - returned = resource.amount; - } else { - final BigInteger delta = host.mStorage.subtract(host.mStorageCurrent); - returned = delta.intValueExact(); - } - if (doFill) host.mStorageCurrent = host.mStorage; - return returned; - } - } - return 0; - } - - public long fill(@SuppressWarnings("unused") ForgeDirection from, IAEFluidStack resource, boolean doFill) { - if (host == null || host.getBaseMetaTileEntity() == null - || !host.getBaseMetaTileEntity() - .isActive()) - return 0; - if (host.mLockedFluid != null && host.mLockedFluid.getFluid() != resource.getFluid()) return 0; - if (host.mFluid == null || host.mFluid.getFluid() == resource.getFluid()) { - if (host.mFluid == null) { - host.mFluid = resource.getFluidStack(); // makes a copy internally - host.mFluid.amount = 1; - } - - if (host.addFluid(resource.getStackSize(), doFill)) { - return resource.getStackSize(); - } else { - final long returned; - if (host.getIsVoidExcessEnabled()) { - returned = resource.getStackSize(); - } else { - final BigInteger delta = host.mStorage.subtract(host.mStorageCurrent); - returned = delta.longValueExact(); - } - if (doFill) host.mStorageCurrent = host.mStorage; - return returned; - } - } - return 0; - } - - @Override - public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { - if (host == null || host.getBaseMetaTileEntity() == null - || !host.getBaseMetaTileEntity() - .isActive()) - return null; - if (host.mFluid == null || host.mFluid.getFluid() != resource.getFluid()) return null; - int ready; - if (host.mStorageCurrent.compareTo(YottaFluidTank.MAX_INT_BIGINT) >= 0) { - ready = Integer.MAX_VALUE; - } else ready = host.mStorageCurrent.intValue(); - ready = Math.min(ready, resource.amount); - if (doDrain) { - host.reduceFluid(ready); - } - return new FluidStack(resource.getFluid(), ready); - } - - public IAEFluidStack drain(@SuppressWarnings("unused") ForgeDirection from, IAEFluidStack resource, - boolean doDrain) { - if (host == null || host.getBaseMetaTileEntity() == null - || !host.getBaseMetaTileEntity() - .isActive()) - return null; - if (host.mFluid == null || host.mFluid.getFluid() != resource.getFluid()) return null; - long ready; - if (host.mStorageCurrent.compareTo(MAX_LONG_BIGINT) > 0) { - ready = Long.MAX_VALUE; - } else ready = host.mStorageCurrent.longValue(); - ready = Math.min(ready, resource.getStackSize()); - if (doDrain) { - host.reduceFluid(ready); - } - IAEFluidStack copy = resource.copy(); - copy.setStackSize(ready); - return copy; - } - - @Override - public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { - if (host == null || host.getBaseMetaTileEntity() == null - || !host.getBaseMetaTileEntity() - .isActive()) - return null; - if (host.mFluid == null) return null; - final FluidStack drainStack = host.mFluid.copy(); - drainStack.amount = maxDrain; - return this.drain(from, drainStack, doDrain); - } - - private static final FluidTankInfo[] EMPTY_TANK_INFO = new FluidTankInfo[] { new FluidTankInfo(null, 0) }; - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection from) { - if (host == null || host.getBaseMetaTileEntity() == null - || !host.getBaseMetaTileEntity() - .isActive()) - return EMPTY_TANK_INFO; - - return host.getTankInfo(from); - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), }; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new YOTTAHatch(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public IGridNode getActionableNode() { - AENetworkProxy gp = getProxy(); - return gp != null ? gp.getNode() : null; - } - - @Override - public AccessRestriction getAccess() { - return this.readMode; - } - - @Override - public boolean isPrioritized(IAEFluidStack input) { - return true; - } - - @Override - public boolean canAccept(IAEFluidStack input) { - FluidStack rInput = input.getFluidStack(); - return fill(null, rInput, false) > 0; - } - - @Override - @SuppressWarnings("rawtypes") - public List getCellArray(StorageChannel channel) { - List list = new ArrayList<>(); - if (channel == StorageChannel.FLUIDS) { - list.add(this); - } - return list; - } - - @Override - public int getPriority() { - return this.priority; - } - - @Override - public int getSlot() { - return 0; - } - - @Override - public boolean validForPass(int i) { - return true; - } - - @Override - public void saveChanges(IMEInventory cellInventory) { - // This is handled by host itself. - } - - private boolean isChanged() { - if (this.host == null) return false; - return !this.lastAmt.equals(this.host.mStorageCurrent) || this.lastFluid != this.host.mFluid; - } - - private void update() { - if (this.host == null) return; - this.lastAmt = this.host.mStorageCurrent; - this.lastFluid = this.host.mFluid; - } - - private void faster() { - if (this.tickRate > 15) { - this.tickRate -= 5; - } - } - - private void slower() { - if (this.tickRate < 100) { - this.tickRate += 5; - } - } - - private boolean shouldTick(long tick) { - if (this.host == null) return false; - return tick % this.tickRate == 0; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java deleted file mode 100644 index b7ab940b2f..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaGenerator.java +++ /dev/null @@ -1,512 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; - -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoTunnel; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; -import goodgenerator.crossmod.thaumcraft.LargeEssentiaEnergyData; -import goodgenerator.items.MyMaterial; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import goodgenerator.util.ItemRefer; -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.enums.Materials; -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_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.objects.XSTR; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.common.config.ConfigBlocks; - -public class LargeEssentiaGenerator extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable { - - private IStructureDefinition multiDefinition = null; - protected int mStableValue = 0; - protected int mTierLimit = -1; - protected long mLeftEnergy; - private int mUpgrade = 1; - final XSTR R = new XSTR(); - protected ArrayList mEssentiaHatch = new ArrayList<>(); - - public LargeEssentiaGenerator(String name) { - super(name); - } - - public LargeEssentiaGenerator(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - @Override - public void construct(ItemStack itemStack, boolean hintsOnly) { - structureBuild_EM(mName, 4, 0, 4, itemStack, hintsOnly); - } - - @Override - protected void clearHatches_EM() { - super.clearHatches_EM(); - mEssentiaHatch.clear(); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mStableValue = 0; - return structureCheck_EM(mName, 4, 0, 4) && (mDynamoHatches.size() + eDynamoMulti.size()) == 1 - && checkHatchTier() - && checkNoLaser() - && updateEssentiaHatchState(); - } - - private boolean checkNoLaser() { - for (GT_MetaTileEntity_Hatch_DynamoMulti tHatch : eDynamoMulti) { - if (tHatch instanceof GT_MetaTileEntity_Hatch_DynamoTunnel) { - return false; - } - } - return true; - } - - public boolean checkHatchTier() { - for (GT_MetaTileEntity_Hatch_Input tHatch : mInputHatches) { - if (tHatch.mTier > mTierLimit) return false; - } - for (GT_MetaTileEntity_Hatch_Dynamo tHatch : mDynamoHatches) { - if (tHatch.mTier > mTierLimit) return false; - } - for (GT_MetaTileEntity_Hatch_DynamoMulti tHatch : eDynamoMulti) { - if (tHatch.mTier > mTierLimit) return false; - } - return true; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.mStableValue = aNBT.getInteger("mStableValue"); - this.mLeftEnergy = aNBT.getLong("mLeftEnergy"); - this.mUpgrade = aNBT.getInteger("mUpgrade"); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mStableValue", this.mStableValue); - aNBT.setLong("mLeftEnergy", this.mLeftEnergy); - aNBT.setInteger("mUpgrade", this.mUpgrade); - } - - public boolean updateEssentiaHatchState() { - for (EssentiaHatch hatch : mEssentiaHatch) { - hatch.mState = mUpgrade; - } - return true; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (this.getBaseMetaTileEntity() - .isServerSide()) { - ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); - if (tCurrentItem != null && tCurrentItem.getItem() - .equals( - ItemRefer.Essentia_Upgrade_Empty.get(1) - .getItem())) { - int tMeta = tCurrentItem.getItemDamage(); - if ((mUpgrade & (1 << tMeta)) == 0 && tMeta != 0) { - tCurrentItem.stackSize--; - mUpgrade = mUpgrade | (1 << tMeta); - GT_Utility.sendChatToPlayer( - aPlayer, - tCurrentItem.getDisplayName() + StatCollector.translateToLocal("largeessentiagenerator.chat")); - } - updateEssentiaHatchState(); - return true; - } - } - super.onRightclick(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public IStructureDefinition getStructure_EM() { - if (multiDefinition == null) { - multiDefinition = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { - { "A A", " ", " ", " ", " ~ ", " ", " ", - " ", "A A" }, - { "T C T", " CEC ", " CEEEC ", " CEEEEEC ", "CEEEEEEEC", " CEEEEEC ", " CEEEC ", - " CEC ", "T C T" }, - { "T TXT T", " TCXCT ", " TCCXCCT ", "TCCCXCCCT", "XXXXXXXXX", "TCCCXCCCT", " TCCXCCT ", - " TCXCT ", "T TXT T" } })) - .addElement('A', ofBlock(ConfigBlocks.blockCosmeticOpaque, 1)) - .addElement('T', ofBlock(ConfigBlocks.blockCosmeticSolid, 7)) - .addElement('C', ofBlock(Loaders.magicCasing, 0)) // - .addElement('E', ofChain(onElementPass(x -> { - ++x.mStableValue; - x.mTierLimit = Math.max(x.mTierLimit, 4); - }, ofBlock(Loaders.essentiaCell, 0)), onElementPass(x -> { - x.mStableValue += 2; - x.mTierLimit = Math.max(x.mTierLimit, 5); - }, ofBlock(Loaders.essentiaCell, 1)), onElementPass(x -> { - x.mStableValue += 5; - x.mTierLimit = Math.max(x.mTierLimit, 6); - }, ofBlock(Loaders.essentiaCell, 2)), onElementPass(x -> { - x.mStableValue += 10; - x.mTierLimit = Math.max(x.mTierLimit, 8); - }, ofBlock(Loaders.essentiaCell, 3)))) - .addElement( - 'X', - ofChain( - buildHatchAdder(LargeEssentiaGenerator.class) - .atLeast( - HatchElement.DynamoMulti.or(GT_HatchElement.Dynamo), - GT_HatchElement.Maintenance, - GT_HatchElement.InputHatch) - .casingIndex(1536) - .dot(1) - .build(), - ofBlock(Loaders.magicCasing, 0), - ofSpecificTileAdder( - LargeEssentiaGenerator::addEssentiaHatch, - EssentiaHatch.class, - Loaders.magicCasing, - 0))) - .build(); - } - return multiDefinition; - } - - public final boolean addEssentiaHatch(EssentiaHatch aTileEntity) { - return this.mEssentiaHatch.add(aTileEntity); - } - - @Override - public @NotNull CheckRecipeResult checkProcessing_EM() { - this.mEfficiency = 10000; - this.mMaxProgresstime = 1; - setEssentiaToEUVoltageAndAmp(getVoltageLimit(), getAmpLimit()); - return CheckRecipeResultRegistry.GENERATING; - } - - public int getVoltageLimit() { - long voltage = 0; - for (GT_MetaTileEntity_Hatch tHatch : this.eDynamoMulti) { - voltage += tHatch.maxEUOutput(); - } - for (GT_MetaTileEntity_Hatch tHatch : this.mDynamoHatches) { - voltage += tHatch.maxEUOutput(); - } - if (voltage > Integer.MAX_VALUE) voltage = Integer.MAX_VALUE; - return (int) voltage; - } - - public int getAmpLimit() { - long amp = 0; - for (GT_MetaTileEntity_Hatch tHatch : this.eDynamoMulti) { - amp += tHatch.maxAmperesOut(); - } - for (GT_MetaTileEntity_Hatch tHatch : this.mDynamoHatches) { - amp += tHatch.maxAmperesOut(); - } - if (amp > Integer.MAX_VALUE) amp = Integer.MAX_VALUE; - return (int) amp; - } - - public long getPerAspectEnergy(Aspect aspect) { - int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); - if (!isValidEssentia(aspect)) return 0; - switch (type) { - case 0: - return normalEssentia(aspect); - case 1: - return airEssentia(aspect); - case 2: - return thermalEssentia(aspect); - case 3: - return unstableEssentia(aspect); - case 4: - return victusEssentia(aspect); - case 5: - return taintedEssentia(aspect); - case 6: - return mechanicEssentia(aspect); - case 7: - return spiritEssentia(aspect); - case 8: - return radiationEssentia(aspect); - case 9: - return electricEssentia(aspect); - default: - return 0; - } - } - - public long normalEssentia(Aspect aspect) { - return LargeEssentiaEnergyData.getAspectFuelValue(aspect); - } - - public long airEssentia(Aspect aspect) { - long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); - double ceoOutput = 0; - int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 8; - if (depleteInput(Materials.LiquidAir.getFluid(ceoInput))) { - ceoOutput = 1.5D; - } else if (depleteInput(Materials.Air.getGas(ceoInput))) { - ceoOutput = 1.0D; - } - return (long) (baseValue * ceoOutput); - } - - public long thermalEssentia(Aspect aspect) { - long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); - double ceoOutput = 0; - int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 2; - if (depleteInput(Materials.SuperCoolant.getFluid(ceoInput))) { - ceoOutput = 9.0D; - } else if (depleteInput(FluidRegistry.getFluidStack("cryotheum", ceoInput))) { - ceoOutput = 5.0D; - } else if (depleteInput(FluidRegistry.getFluidStack("ic2coolant", ceoInput))) { - ceoOutput = 1.5D; - } else if (depleteInput(Materials.Ice.getSolid(ceoInput))) { - ceoOutput = 1.2D; - } else if (depleteInput(FluidRegistry.getFluidStack("ic2distilledwater", ceoInput))) { - ceoOutput = 1.0D; - } else if (depleteInput(Materials.Water.getFluid(ceoInput))) { - ceoOutput = 0.5D; - } - - return (long) (baseValue * ceoOutput); - } - - public long unstableEssentia(Aspect aspect) { - long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); - double ceoOutput = 0; - int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 4; - if (depleteInput(WerkstoffLoader.Xenon.getFluidOrGas(ceoInput))) { - ceoOutput = 4.0D; - } else if (depleteInput(WerkstoffLoader.Krypton.getFluidOrGas(ceoInput))) { - ceoOutput = 3.0D; - } else if (depleteInput(Materials.Argon.getFluid(ceoInput))) { - ceoOutput = 2.5D; - } else if (depleteInput(WerkstoffLoader.Neon.getFluidOrGas(ceoInput))) { - ceoOutput = 2.2D; - } else if (depleteInput(Materials.Helium.getFluid(ceoInput))) { - ceoOutput = 2.0D; - } else if (depleteInput(Materials.Nitrogen.getFluid(ceoInput))) { - ceoOutput = 1.0D; - } - return (long) (baseValue * ceoOutput); - } - - public long victusEssentia(Aspect aspect) { - long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); - double ceoOutput = 1.0D; - int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 18; - if (depleteInput(FluidRegistry.getFluidStack("xpjuice", ceoInput))) { - ceoOutput = 2.0D; - } else if (depleteInput(FluidRegistry.getFluidStack("lifeessence", ceoInput))) { - ceoOutput = 6.0D; - } - return (long) (baseValue * ceoOutput); - } - - public long taintedEssentia(Aspect aspect) { - long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); - double ceoOutput = 1.0D; - int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 3; - int chance = 2000; - if (depleteInput(FluidRegistry.getFluidStack("fluidpure", ceoInput))) { - ceoOutput = 60.0D; - chance = 0; - } else if (depleteInput(FluidRegistry.getFluidStack("fluiddeath", ceoInput))) { - ceoOutput = Math.pow(25000D / baseValue, 4); - chance = 4000; - } - - if (R.nextInt(10000) < chance) { - World world = getBaseMetaTileEntity().getWorld(); - int tX = getBaseMetaTileEntity().getXCoord() + R.nextInt(5) - 2; - int tY = getBaseMetaTileEntity().getYCoord(); - int tZ = getBaseMetaTileEntity().getZCoord() + R.nextInt(5) - 2; - if (world.isAirBlock(tX, tY, tZ)) world.setBlock(tX, tY, tZ, ConfigBlocks.blockFluxGas, R.nextInt(8), 3); - } - - return (long) (baseValue * ceoOutput); - } - - public long mechanicEssentia(Aspect aspect) { - long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); - double ceoOutput = 0; - int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 20; - if (depleteInput(Materials.Lubricant.getFluid(ceoInput))) { - ceoOutput = 1.0D; - } - return (long) (baseValue * ceoOutput); - } - - public long spiritEssentia(Aspect aspect) { - long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); - double ceoOutput = 1.0D; - int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 2; - if (depleteInput(FluidRegistry.getFluidStack("witchery:fluidspirit", ceoInput))) { - ceoOutput = 10D * (1 + mStableValue / 100D); - } else if (depleteInput(FluidRegistry.getFluidStack("witchery:hollowtears", ceoInput))) { - ceoOutput = 15D * (1 + 100D / mStableValue); - } - return (long) (baseValue * ceoOutput); - } - - public long radiationEssentia(Aspect aspect) { - long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); - double ceoOutput = 1.0D; - int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 6; - if (depleteInput(Materials.Caesium.getMolten(ceoInput))) { - ceoOutput = 2.0D; - } else if (depleteInput(Materials.Uranium235.getMolten(ceoInput))) { - ceoOutput = 3.0D; - } else if (depleteInput(Materials.Naquadah.getMolten(ceoInput))) { - ceoOutput = 4.0D; - } else if (depleteInput(MyMaterial.atomicSeparationCatalyst.getMolten(ceoInput))) { - ceoOutput = 16.0D; - } - return (long) (baseValue * ceoOutput); - } - - public long electricEssentia(Aspect aspect) { - long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); - double ceoOutput = Math.pow(3.0, GT_Utility.getTier(getVoltageLimit())); - return (long) (baseValue * ceoOutput); - } - - public void setEssentiaToEUVoltageAndAmp(long voltageLimit, long ampLimit) { - long EUt = mLeftEnergy; - long EUVoltage = voltageLimit, EUAmp = 1; - - for (EssentiaHatch hatch : this.mEssentiaHatch) { - AspectList aspects = hatch.getAspects(); - for (Aspect aspect : aspects.aspects.keySet()) { - if (!isValidEssentia(aspect)) continue; - while (EUt <= (voltageLimit * ampLimit) && aspects.getAmount(aspect) > 0) { - long addedEU = getPerAspectEnergy(aspect) * mStableValue / 25; - if (addedEU == 0) break; - EUt += addedEU; - aspects.reduce(aspect, 1); - if (aspects.getAmount(aspect) == 0) aspects.remove(aspect); - } - } - } - - if (EUt <= voltageLimit) { - EUVoltage = EUt; - EUAmp = 1; - mLeftEnergy = 0; - } else { - while (EUVoltage * (EUAmp + 1) <= EUt && EUAmp + 1 <= ampLimit) { - EUAmp++; - } - mLeftEnergy = EUt - (EUVoltage * EUAmp); - } - - this.mEUt = (int) EUVoltage; - this.eAmpereFlow = (int) EUAmp; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public String[] getStructureDescription(ItemStack itemStack) { - return DescTextLocalization.addText("LargeEssentiaGenerator.hint", 6); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new LargeEssentiaGenerator(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Essentia Generator") - .addInfo("Controller block for the Large Essentia Generator") - .addInfo("Maybe some Thaumaturges are upset by it. . .") - .addInfo("Transform Essentia into energy!") - .addInfo("The Diffusion Cell determines the highest hatch tier that the LEG can accept.") - .addInfo("Supports normal Dynamo Hatches or TecTech ones for up to 64A, but no Laser Hatches.") - .addInfo("You can find more information about this generator in the Thaumonomicon.") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .addMaintenanceHatch("Hint block with dot 1", 1) - .addInputHatch("Hint block with dot 1", 1) - .addDynamoHatch("Hint block with dot 1", 1) - .addOtherStructurePart("Essentia Input Hatch", "Essentia Input", 1) - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - @SuppressWarnings("ALL") - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1536), - new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_DRAGONEGG), TextureFactory.builder() - .addIcon(Textures.BlockIcons.MACHINE_CASING_DRAGONEGG_GLOW) - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1536), - new GT_RenderedTexture(Textures.BlockIcons.MACHINE_CASING_DRAGONEGG) }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1536) }; - } - - public boolean isValidEssentia(Aspect aspect) { - int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); - return type != -1 && (mUpgrade & (1 << type)) != 0; - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 4, 0, 4, elementBudget, env, false, true); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java deleted file mode 100644 index 82838322ce..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/LargeEssentiaSmeltery.java +++ /dev/null @@ -1,590 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.Mods.ThaumicBases; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Map; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.objects.XSTR; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.visnet.VisNetHandler; -import thaumcraft.common.config.ConfigBlocks; -import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager; - -public class LargeEssentiaSmeltery extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable { - - private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon( - "icons/LargeEssentiaSmeltery_On"); - private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( - "icons/LargeEssentiaSmeltery_On_GLOW"); - private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon( - "icons/LargeEssentiaSmeltery_Off"); - private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( - "icons/LargeEssentiaSmeltery_Off_GLOW"); - private static final String STRUCTURE_PIECE_FIRST = "first"; - private static final String STRUCTURE_PIECE_LATER = "later"; - private static final String STRUCTURE_PIECE_LAST = "last"; - private static final int CASING_INDEX = 1536; - private static final int MAX_STRUCTURE_LENGTH = 8; - private static final int DEFAULT_STRUCTURE_LENGTH = 3; - private static final int MAX_CONFIGURABLE_LENGTH = MAX_STRUCTURE_LENGTH - DEFAULT_STRUCTURE_LENGTH; - - private static final int RECIPE_DURATION = 32; - private static final int RECIPE_EUT = 480; - private static final float NODE_COST_MULTIPLIER = 1.15f; - - public AspectList mOutputAspects = new AspectList(); - protected int mCasing = 0; - protected double mParallel = 0; - protected int nodePower = 0; - protected int nodePurificationEfficiency = 0; - protected int nodeIncrease = 0; - - private IStructureDefinition multiDefinition = null; - private ArrayList mEssentiaOutputHatches = new ArrayList<>(); - private int pTier = 0; - private XSTR xstr = new XSTR(); - - public LargeEssentiaSmeltery(String name) { - super(name); - } - - public LargeEssentiaSmeltery(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - @Override - public void construct(ItemStack itemStack, boolean hintsOnly) { - structureBuild_EM(STRUCTURE_PIECE_FIRST, 2, 2, 0, itemStack, hintsOnly); - // default - structureBuild_EM(STRUCTURE_PIECE_LATER, 2, 2, -1, itemStack, hintsOnly); - structureBuild_EM(STRUCTURE_PIECE_LATER, 2, 2, -2, itemStack, hintsOnly); - int len = itemStack.stackSize; - if (len > MAX_CONFIGURABLE_LENGTH) len = MAX_CONFIGURABLE_LENGTH; - structureBuild_EM(STRUCTURE_PIECE_LAST, 2, 2, -len - 3, itemStack, hintsOnly); - while (len > 0) { - structureBuild_EM(STRUCTURE_PIECE_LATER, 2, 2, -len - 2, itemStack, hintsOnly); - len--; - } - } - - @Override - protected void clearHatches_EM() { - super.clearHatches_EM(); - mEssentiaOutputHatches.clear(); - } - - @Override - protected boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - this.mCasing = 0; - this.mParallel = 0; - this.pTier = 0; - this.nodePower = 0; - this.nodePurificationEfficiency = 0; - this.nodeIncrease = 0; - - if (!structureCheck_EM(STRUCTURE_PIECE_FIRST, 2, 2, 0)) return false; - if (!structureCheck_EM(STRUCTURE_PIECE_LATER, 2, 2, -1)) return false; - if (!structureCheck_EM(STRUCTURE_PIECE_LATER, 2, 2, -2)) return false; - int len = 2; - while (structureCheck_EM(STRUCTURE_PIECE_LATER, 2, 2, -len - 1)) len++; - if (len > MAX_STRUCTURE_LENGTH - 1 || len < DEFAULT_STRUCTURE_LENGTH) return false; - if (!structureCheck_EM(STRUCTURE_PIECE_LAST, 2, 2, -len - 1)) return false; - if (this.mCasing >= 24 && this.mMaintenanceHatches.size() == 1 - && this.mInputBusses.size() >= 1 - && this.mEssentiaOutputHatches.size() >= 1) { - this.mParallel = Math.floor(this.mParallel += 1 << this.pTier); - return true; - } - return false; - } - - @Override - public IStructureDefinition getStructure_EM() { - if (this.multiDefinition == null) { - this.multiDefinition = StructureDefinition.builder() - .addShape( - "first", - transpose(new String[][] { { " A " }, { " AAA " }, { "AA~AA" }, { " AAA " }, { " A " } })) - .addShape( - "later", - transpose(new String[][] { { " ABA " }, { "AECEA" }, { "D---D" }, { "AEFEA" }, { " AAA " } })) - .addShape( - "last", - transpose(new String[][] { { " A " }, { " AAA " }, { "AAAAA" }, { " AAA " }, { " A " } })) - .addElement('C', ofBlock(Loaders.essentiaFilterCasing, 0)) - .addElement('D', ofBlock(ConfigBlocks.blockCosmeticOpaque, 2)) - .addElement( - 'F', - ThaumicBases.isModLoaded() ? ofBlock(Block.getBlockFromName("thaumicbases:advAlchFurnace"), 0) - : ofBlock(ConfigBlocks.blockStoneDevice, 0)) - .addElement( - 'E', - ofChain( - onElementPass(x -> x.onEssentiaCellFound(0), ofBlock(Loaders.essentiaCell, 0)), - onElementPass(x -> x.onEssentiaCellFound(1), ofBlock(Loaders.essentiaCell, 1)), - onElementPass(x -> x.onEssentiaCellFound(2), ofBlock(Loaders.essentiaCell, 2)), - onElementPass(x -> x.onEssentiaCellFound(3), ofBlock(Loaders.essentiaCell, 3)))) - .addElement( - 'A', - ofChain( - buildHatchAdder(LargeEssentiaSmeltery.class) - .atLeast( - GT_HatchElement.Maintenance, - GT_HatchElement.Energy, - GT_HatchElement.InputBus, - GT_HatchElement.InputHatch) - .casingIndex(CASING_INDEX) - .dot(1) - .build(), - ofSpecificTileAdder( - LargeEssentiaSmeltery::addEssentiaOutputHatchToMachineList, - EssentiaOutputHatch.class, - Loaders.essentiaOutputHatch, - 0), - onElementPass(LargeEssentiaSmeltery::onCasingFound, ofBlock(Loaders.magicCasing, 0)))) - .addElement('B', GT_HatchElement.Muffler.newAny(CASING_INDEX, 2)) - .build(); - } - return this.multiDefinition; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Essentia Smeltery") - .addInfo("Controller block for the Large Essentia Smeltery") - .addInfo("Necessary evil.") - .addInfo("Advanced Essentia smelting technology.") - .addInfo("Max parallel dictated by structure size and Essentia Diffusion Cell tier") - .addInfo("Energy Hatch tier: HV+") - .addInfo("You can find more information about this machine in the Thaumonomicon.") - .addPollutionAmount(getPollutionPerSecond(null)) - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .addController("Front center") - .addCasingInfo("Magic Casing", 24) - .addMaintenanceHatch("Hint block with dot 1") - .addInputBus("Hint block with dot 1") - .addInputHatch("Hint block with dot 1") - .addEnergyHatch("Hint block with dot 1") - .addOtherStructurePart("Essentia Output Hatch", "Hint block with dot 1") - .addMufflerHatch("Hint block with dot 2") - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public String[] getStructureDescription(ItemStack itemStack) { - return DescTextLocalization.addText("LargeEssentiaSmeltery.hint", 8); - } - - @Override - public String[] getInfoData() { - String[] info = super.getInfoData(); - info[8] = "Node Power: " + EnumChatFormatting.RED - + this.nodePower - + EnumChatFormatting.RESET - + " Purification Efficiency: " - + EnumChatFormatting.AQUA - + this.nodePurificationEfficiency - + "%" - + EnumChatFormatting.RESET - + " Speed Up: " - + EnumChatFormatting.GRAY - + this.nodeIncrease - + "%" - + EnumChatFormatting.RESET; - return info; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), - TextureFactory.of(textureFontOn), TextureFactory.builder() - .addIcon(textureFontOn_Glow) - .glow() - .build() }; - else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), - TextureFactory.of(textureFontOff), TextureFactory.builder() - .addIcon(textureFontOff_Glow) - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; - } - - protected void onCasingFound() { - this.mCasing++; - } - - protected void onEssentiaCellFound(int tier) { - this.mParallel += (1 << tier) * 0.25f; - this.pTier = Math.max(this.pTier, tier); - } - - private boolean addEnergyHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - if (((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity).mTier < 3) return false; - ((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { - ((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.eEnergyMulti.add(((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity)); - } else { - return false; - } - } - } - - private boolean addEssentiaOutputHatchToMachineList(EssentiaOutputHatch aTileEntity) { - if (aTileEntity instanceof EssentiaOutputHatch) { - return this.mEssentiaOutputHatches.add((EssentiaOutputHatch) aTileEntity); - } - return false; - } - - @Override - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (!this.isFullPower()) return; - super.runMachine(aBaseMetaTileEntity, aTick); - } - - @Override - public @NotNull CheckRecipeResult checkProcessing_EM() { - if (!isFullPower()) return SimpleCheckRecipeResult.ofFailure("node_too_small"); - - ArrayList tItemsList = getStoredInputs(); - ArrayList tFluidsList = getStoredFluids(); - - if (tItemsList.isEmpty() && tFluidsList.isEmpty()) return CheckRecipeResultRegistry.NO_RECIPE; - - int p = (int) this.mParallel; - for (int i = tItemsList.size() - 1; i >= 0; i--) { - ItemStack itemStack = tItemsList.get(i); - int stackSize = itemStack.stackSize; - int sur = p - stackSize; - - if (sur > 0) { - p -= stackSize; - this.mOutputAspects.add(getEssentia(itemStack, stackSize)); - if (!depleteInput(itemStack)) itemStack.stackSize = 0; - } else if (sur == 0) { - this.mOutputAspects.add(getEssentia(itemStack, stackSize)); - if (!depleteInput(itemStack)) itemStack.stackSize = 0; - break; - } else { - this.mOutputAspects.add(getEssentia(itemStack, p)); - itemStack.stackSize -= p; - break; - } - } - - for (int i = tFluidsList.size() - 1; i >= 0; i--) { - FluidStack fluidStack = tFluidsList.get(i); - int stackSize = fluidStack.amount / 1000; - int sur = p - stackSize; - - if (sur > 0) { - p -= stackSize; - this.mOutputAspects.add(getEssentia(fluidStack, stackSize)); - if (!depleteInput(fluidStack)) fluidStack.amount = 0; - } else if (sur == 0) { - this.mOutputAspects.add(getEssentia(fluidStack, stackSize)); - if (!depleteInput(fluidStack)) fluidStack.amount = 0; - break; - } else { - this.mOutputAspects.add(getEssentia(fluidStack, p)); - fluidStack.amount -= p; - break; - } - } - - this.mEfficiency = 10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000; - this.mEfficiencyIncrease = 10000; - - final World WORLD = this.getBaseMetaTileEntity() - .getWorld(); - int x = this.getBaseMetaTileEntity() - .getXCoord(); - int y = this.getBaseMetaTileEntity() - .getYCoord(); - int z = this.getBaseMetaTileEntity() - .getZCoord(); - - this.drainNodePower(WORLD, x, y, z); - this.nodePower -= expectedPower(); - - calculatePerfectOverclockedNessMulti( - RECIPE_EUT, - (int) Math.ceil(this.mOutputAspects.visSize() * RECIPE_DURATION * (1 - this.nodeIncrease * 0.005)), - 1, - Math.min(Integer.MAX_VALUE, getMaxInputEnergy_EM())); - - this.updateSlots(); - if (this.mEUt > 0) this.mEUt = -this.mEUt; - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - private AspectList getEssentia(ItemStack itemStack, int amount) { - AspectList aspectList = new AspectList(); - if (amount == 0) { - return aspectList; - } - AspectList aspects = ThaumcraftCraftingManager.getObjectTags(itemStack); - aspects = ThaumcraftCraftingManager.getBonusTags(itemStack, aspects); - if (aspects != null && aspects.size() != 0 && aspects.getAspects()[0] != null) { - for (int i = 0; i < amount; i++) aspectList.add(aspects); - } else aspectList.add(Aspect.ENTROPY, amount); - return aspectList; - } - - private AspectList getEssentia(FluidStack fluidStack, int amountBuckets) { - Block fluidBlock = fluidStack.getFluid() - .getBlock(); - if (fluidBlock == null) return new AspectList(); - ItemStack block = new ItemStack(fluidBlock); - return getEssentia(block, amountBuckets); - } - - private void fillEssentiaOutputHatch() { - for (EssentiaOutputHatch outputHatch : this.mEssentiaOutputHatches) { - for (Map.Entry entry : this.mOutputAspects.copy().aspects.entrySet()) { - Aspect aspect = entry.getKey(); - int amount = entry.getValue(); - this.mOutputAspects.remove(aspect, outputHatch.addEssentia(aspect, amount, null)); - } - } - this.mOutputAspects.aspects.clear(); - } - - private int expectedPower() { - return (int) (Math.pow(this.getMaxEnergyInputTier_EM(), 2) * NODE_COST_MULTIPLIER); - } - - private boolean isFullPower() { - return this.nodePower > expectedPower(); - } - - private void generateFluxGas(World world, int x, int y, int z) { - world.setBlock(x, y, z, ConfigBlocks.blockFluxGas, 8, 3); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setDouble("mParallel", this.mParallel); - aNBT.setDouble("nodePower", this.nodePower); - aNBT.setDouble("nodePurificationEfficiency", this.nodePurificationEfficiency); - aNBT.setDouble("nodeIncrease", this.nodeIncrease); - - Aspect[] aspectA = this.mOutputAspects.getAspects(); - NBTTagList nbtTagList = new NBTTagList(); - for (Aspect aspect : aspectA) { - if (aspect != null) { - NBTTagCompound f = new NBTTagCompound(); - f.setString("key", aspect.getTag()); - f.setInteger("amount", this.mOutputAspects.getAmount(aspect)); - nbtTagList.appendTag(f); - } - } - aNBT.setTag("Aspects", nbtTagList); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.mParallel = aNBT.getDouble("mParallel"); - this.nodePower = aNBT.getInteger("nodePower"); - this.nodePurificationEfficiency = aNBT.getInteger("nodePurificationEfficiency"); - this.nodeIncrease = aNBT.getInteger("nodeIncrease"); - - this.mOutputAspects.aspects.clear(); - NBTTagList tlist = aNBT.getTagList("Aspects", 10); - for (int j = 0; j < tlist.tagCount(); ++j) { - NBTTagCompound rs = tlist.getCompoundTagAt(j); - if (rs.hasKey("key")) - this.mOutputAspects.add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount")); - } - super.loadNBTData(aNBT); - } - - @Override - protected void addClassicOutputs_EM() { - super.addClassicOutputs_EM(); - fillEssentiaOutputHatch(); - } - - @Override - public void stopMachine() { - super.stopMachine(); - this.mOutputAspects.aspects.clear(); - } - - private void drainNodePower(World world, int x, int y, int z) { - int power = this.expectedPower(); - if (this.nodePower < power * 10) { - this.nodePower += VisNetHandler.drainVis(world, x, y, z, Aspect.WATER, power); - this.nodePower += VisNetHandler.drainVis(world, x, y, z, Aspect.FIRE, power); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aTick % 5 == 0 && this.mMachine) { - final World WORLD = this.getBaseMetaTileEntity() - .getWorld(); - int x = this.getBaseMetaTileEntity() - .getXCoord(); - int y = this.getBaseMetaTileEntity() - .getYCoord(); - int z = this.getBaseMetaTileEntity() - .getZCoord(); - - this.drainNodePower(WORLD, x, y, z); - - this.nodePurificationEfficiency = Math.max(0, this.nodePurificationEfficiency - 1); - if (this.nodePurificationEfficiency < 100) { - this.nodePurificationEfficiency = (int) Math.min( - 100, - this.nodePurificationEfficiency - + Math.ceil(VisNetHandler.drainVis(WORLD, x, y, z, Aspect.ORDER, 200) * 0.05)); - } - - this.nodeIncrease = Math.min(100, VisNetHandler.drainVis(WORLD, x, y, z, Aspect.ENTROPY, 125)); - } - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - this.nodePurificationEfficiency = Math.max(0, this.nodePurificationEfficiency - 1); - if (xstr.nextInt(20) == 0) { - if (xstr.nextInt(100) < Math.max(100 - this.nodePurificationEfficiency, 0)) { - final World WORLD = this.getBaseMetaTileEntity() - .getWorld(); - GT_MetaTileEntity_Hatch_Muffler mufflerHatch = this.mMufflerHatches - .get(xstr.nextInt(this.mMufflerHatches.size())); - int x = mufflerHatch.getBaseMetaTileEntity() - .getXCoord(); - int y = mufflerHatch.getBaseMetaTileEntity() - .getYCoord(); - int z = mufflerHatch.getBaseMetaTileEntity() - .getZCoord(); - - ForgeDirection facing = mufflerHatch.getBaseMetaTileEntity() - .getFrontFacing(); - switch (facing) { - case SOUTH: - z += 1; - break; - case NORTH: - z -= 1; - break; - case WEST: - x -= 1; - break; - case EAST: - x += 1; - break; - default: - y += 1; - } - generateFluxGas(WORLD, x, y, z); - } - } - return super.onRunningTick(aStack); - } - - @Override - public boolean isCorrectMachinePart(ItemStack itemStack) { - return true; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return 22 * (100 - this.nodePurificationEfficiency); - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack itemStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack itemStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new LargeEssentiaSmeltery(this.mName); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int built = survivialBuildPiece(STRUCTURE_PIECE_FIRST, stackSize, 2, 2, 0, elementBudget, env, false, true); - if (built >= 0) return built; - int length = stackSize.stackSize + 2; - if (length > MAX_CONFIGURABLE_LENGTH) length = MAX_CONFIGURABLE_LENGTH + 2; - for (int i = 1; i <= length; i++) { - built = survivialBuildPiece(STRUCTURE_PIECE_LATER, stackSize, 2, 2, -i, elementBudget, env, false, true); - if (built >= 0) return built; - } - return survivialBuildPiece(STRUCTURE_PIECE_LAST, stackSize, 2, 2, -length - 1, elementBudget, env, false, true); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java deleted file mode 100644 index cad1cb001c..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer1.java +++ /dev/null @@ -1,170 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; - -import goodgenerator.blocks.tileEntity.base.LargeFusionComputer; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class LargeFusionComputer1 extends LargeFusionComputer { - - private static final ITexture textureOverlay = TextureFactory.of( - TextureFactory.builder() - .addIcon(OVERLAY_FUSION1) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FUSION1_GLOW) - .extFacing() - .glow() - .build()); - - public LargeFusionComputer1(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - public LargeFusionComputer1(String name) { - super(name); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fusion Reactor") - .addInfo("Millions of nuclear.") - .addInfo("Controller block for the Compact Fusion Reactor MK-I Prototype.") - .addInfo( - EnumChatFormatting.AQUA + GT_Utility.formatNumbers(getSingleHatchPower()) - + EnumChatFormatting.GRAY - + " EU/t and " - + EnumChatFormatting.AQUA - + GT_Utility.formatNumbers(capableStartupCanonical() / 32 / M) - + "M" - + EnumChatFormatting.GRAY - + " EU capacity per Energy Hatch") - .addInfo("If the recipe has a startup cost greater than the") - .addInfo("number of energy hatches * cap, you can't do it") - .addInfo( - "If the recipe requires a voltage tier over " + GT_Utility.getColoredTierNameFromTier((byte) tier()) - + EnumChatFormatting.GRAY - + " , you can't do it either") - .addInfo("Make sure the whole structure is built in the 3x3") - .addInfo("chunk area of the ring center (not controller).") - .addInfo("It can run 64x recipes at most.") - .addInfo( - "Support" + EnumChatFormatting.BLUE - + " Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.GRAY - + " Energy/Laser Hatches!") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .addCasingInfo("LuV Machine Casing", 1664) - .addCasingInfo("Ameliorated Superconduct Coil", 560) - .addCasingInfo("Naquadah Alloy Frame Boxes", 128) - .addCasingInfo("Rhodium-Plated Palladium Reinforced Borosilicate Glass Block", 63) - .addEnergyHatch("1-32, Hint block with dot 2", 2) - .addInputHatch("1-16, Hint block with dot 1", 1) - .addOutputHatch("1-16, Hint block with dot 1", 1) - .addStructureInfo("Supports Crafting Input Buffer") - .addStructureInfo( - "ALL Hatches must be " + GT_Utility.getColoredTierNameFromTier((byte) hatchTier()) - + EnumChatFormatting.GRAY - + " or better") - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public int tier() { - return 6; - } - - @Override - public long capableStartupCanonical() { - return 160_000_000; - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings1; - } - - @Override - public int getCasingMeta() { - return 6; - } - - @Override - public Block getCoilBlock() { - return Loaders.compactFusionCoil; - } - - @Override - public int getCoilMeta() { - return 0; - } - - @Override - public Block getGlassBlock() { - return ItemRegistry.bw_realglas; - } - - @Override - public int getGlassMeta() { - return 3; - } - - @Override - public int hatchTier() { - return 6; - } - - @Override - public Materials getFrameBox() { - return Materials.NaquadahAlloy; - } - - @Override - public int getMaxPara() { - return 64; - } - - @Override - public int extraPara(int startEnergy) { - return 1; - } - - @Override - public ITexture getTextureOverlay() { - return textureOverlay; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return DescTextLocalization.addText("LargeFusion1.hint", 9); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new LargeFusionComputer1(mName); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java deleted file mode 100644 index 7a72e7842f..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer2.java +++ /dev/null @@ -1,171 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2_GLOW; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; - -import goodgenerator.blocks.tileEntity.base.LargeFusionComputer; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class LargeFusionComputer2 extends LargeFusionComputer { - - private static final ITexture textureOverlay = TextureFactory.of( - TextureFactory.builder() - .addIcon(OVERLAY_FUSION2) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FUSION2_GLOW) - .extFacing() - .glow() - .build()); - - public LargeFusionComputer2(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - public LargeFusionComputer2(String name) { - super(name); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fusion Reactor") - .addInfo("Millions of nuclear.") - .addInfo("Controller block for the Compact Fusion Reactor MK-II.") - .addInfo( - EnumChatFormatting.AQUA + GT_Utility.formatNumbers(getSingleHatchPower()) - + EnumChatFormatting.GRAY - + " EU/t and " - + EnumChatFormatting.AQUA - + GT_Utility.formatNumbers(capableStartupCanonical() / 32 / M) - + "M" - + EnumChatFormatting.GRAY - + " EU capacity per Energy Hatch") - .addInfo("If the recipe has a startup cost greater than the") - .addInfo("number of energy hatches * cap, you can't do it") - .addInfo( - "If the recipe requires a voltage tier over " + GT_Utility.getColoredTierNameFromTier((byte) tier()) - + EnumChatFormatting.GRAY - + " , you can't do it either") - .addInfo("Make sure the whole structure is built in the 3x3") - .addInfo("chunk area of the ring center (not controller).") - .addInfo("Startup < 160,000,000 EU: 128x Parallel") - .addInfo("Startup >= 160,000,000 EU: 64x Parallel") - .addInfo( - "Support" + EnumChatFormatting.BLUE - + " Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.GRAY - + " Energy/Laser Hatches!") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .addCasingInfo("Fusion Machine Casing", 1664) - .addCasingInfo("Compact Fusion Coil", 560) - .addCasingInfo("Duranium Frame Box", 128) - .addCasingInfo("Iridium Reinforced Borosilicate Glass Block", 63) - .addEnergyHatch("1-32, Hint block with dot 2", 2) - .addInputHatch("1-16, Hint block with dot 1", 1) - .addOutputHatch("1-16, Hint block with dot 1", 1) - .addStructureInfo("Supports Crafting Input Buffer") - .addStructureInfo( - "ALL Hatches must be " + GT_Utility.getColoredTierNameFromTier((byte) hatchTier()) - + EnumChatFormatting.GRAY - + " or better") - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public int tier() { - return 7; - } - - @Override - public long capableStartupCanonical() { - return 320_000_000; - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - @Override - public int getCasingMeta() { - return 6; - } - - @Override - public Block getCoilBlock() { - return Loaders.compactFusionCoil; - } - - @Override - public int getCoilMeta() { - return 1; - } - - @Override - public Block getGlassBlock() { - return ItemRegistry.bw_realglas; - } - - @Override - public int getGlassMeta() { - return 4; - } - - @Override - public int hatchTier() { - return 7; - } - - @Override - public Materials getFrameBox() { - return Materials.Duranium; - } - - @Override - public int getMaxPara() { - return 64; - } - - @Override - public int extraPara(int startEnergy) { - return startEnergy < 160000000 ? 2 : 1; - } - - @Override - public ITexture getTextureOverlay() { - return textureOverlay; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return DescTextLocalization.addText("LargeFusion2.hint", 9); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new LargeFusionComputer2(mName); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java deleted file mode 100644 index 4a4f9832d0..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer3.java +++ /dev/null @@ -1,172 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3_GLOW; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; - -import goodgenerator.blocks.tileEntity.base.LargeFusionComputer; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class LargeFusionComputer3 extends LargeFusionComputer { - - private static final ITexture textureOverlay = TextureFactory.of( - TextureFactory.builder() - .addIcon(OVERLAY_FUSION3) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FUSION3_GLOW) - .extFacing() - .glow() - .build()); - - public LargeFusionComputer3(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - public LargeFusionComputer3(String name) { - super(name); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fusion Reactor") - .addInfo("Millions of nuclear.") - .addInfo("Controller block for the Compact Fusion Reactor MK-III.") - .addInfo( - EnumChatFormatting.AQUA + GT_Utility.formatNumbers(getSingleHatchPower()) - + EnumChatFormatting.GRAY - + " EU/t and " - + EnumChatFormatting.AQUA - + GT_Utility.formatNumbers(capableStartupCanonical() / 32 / M) - + "M" - + EnumChatFormatting.GRAY - + " EU capacity per Energy Hatch") - .addInfo("If the recipe has a startup cost greater than the") - .addInfo("number of energy hatches * cap, you can't do it") - .addInfo( - "If the recipe requires a voltage tier over " + GT_Utility.getColoredTierNameFromTier((byte) tier()) - + EnumChatFormatting.GRAY - + " , you can't do it either") - .addInfo("Make sure the whole structure is built in the 3x3") - .addInfo("chunk area of the ring center (not controller).") - .addInfo("Startup < 160,000,000 EU: 192x Parallel") - .addInfo("Startup < 320,000,000 EU: 128x Parallel") - .addInfo("Startup >= 320,000,000 EU: 64x Parallel") - .addInfo( - "Support" + EnumChatFormatting.BLUE - + " Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.GRAY - + " Energy/Laser Hatches!") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .addCasingInfo("Fusion Machine Casing MK II", 1664) - .addCasingInfo("Advanced Compact Fusion Coil", 560) - .addCasingInfo("Neutronium Frame Box", 128) - .addCasingInfo("Osmium Reinforced Borosilicate Glass Block", 63) - .addEnergyHatch("1-32, Hint block with dot 2", 2) - .addInputHatch("1-16, Hint block with dot 1", 1) - .addOutputHatch("1-16, Hint block with dot 1", 1) - .addStructureInfo("Supports Crafting Input Buffer") - .addStructureInfo( - "ALL Hatches must be " + GT_Utility.getColoredTierNameFromTier((byte) hatchTier()) - + EnumChatFormatting.GRAY - + " or better") - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public int tier() { - return 8; - } - - @Override - public long capableStartupCanonical() { - return 640_000_000; - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - @Override - public int getCasingMeta() { - return 8; - } - - @Override - public Block getCoilBlock() { - return Loaders.compactFusionCoil; - } - - @Override - public int getCoilMeta() { - return 2; - } - - @Override - public Block getGlassBlock() { - return ItemRegistry.bw_realglas; - } - - @Override - public int getGlassMeta() { - return 5; - } - - @Override - public int hatchTier() { - return 8; - } - - @Override - public Materials getFrameBox() { - return Materials.Neutronium; - } - - @Override - public int getMaxPara() { - return 64; - } - - @Override - public int extraPara(int startEnergy) { - return (startEnergy < 160000000 ? 3 : (startEnergy < 320000000 ? 2 : 1)); - } - - @Override - public ITexture getTextureOverlay() { - return textureOverlay; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return DescTextLocalization.addText("LargeFusion3.hint", 9); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new LargeFusionComputer3(mName); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java deleted file mode 100644 index 96a9662475..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer4.java +++ /dev/null @@ -1,227 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; - -import goodgenerator.blocks.tileEntity.base.LargeFusionComputerPP; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TAE; -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_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.IDualInputHatch; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class LargeFusionComputer4 extends LargeFusionComputerPP { - - public LargeFusionComputer4(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - public LargeFusionComputer4(String name) { - super(name); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fusion Reactor") - .addInfo("Galaxy Collapse.") - .addInfo("Controller block for the Compact Fusion Reactor MK-IV Prototype.") - .addInfo( - EnumChatFormatting.AQUA + GT_Utility.formatNumbers(getSingleHatchPower()) - + EnumChatFormatting.GRAY - + " EU/t and " - + EnumChatFormatting.AQUA - + GT_Utility.formatNumbers(capableStartupCanonical() / 32 / M) - + "M" - + EnumChatFormatting.GRAY - + " EU capacity per Energy Hatch") - .addInfo("If the recipe has a startup cost greater than the") - .addInfo("number of energy hatches * cap, you can't do it") - .addInfo( - "If the recipe requires a voltage tier over " + GT_Utility.getColoredTierNameFromTier((byte) tier()) - + EnumChatFormatting.GRAY - + " , you can't do it either") - .addInfo("Make sure the whole structure is built in the 3x3") - .addInfo("chunk area of the ring center (not controller).") - .addInfo("Performs 4/4 overclock.") - .addInfo("Startup < 160,000,000 EU: 256x Parallel") - .addInfo("Startup < 320,000,000 EU: 192x Parallel") - .addInfo("Startup < 640,000,000 EU: 128x Parallel") - .addInfo("Startup >= 640,000,000 EU: 64x Parallel") - .addInfo( - "Support" + EnumChatFormatting.BLUE - + " Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.GRAY - + " Energy/Laser Hatches!") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .addCasingInfo("Fusion Machine Casing MK III", 1664) - .addCasingInfo("Compact Fusion Coil MK-II Prototype", 560) - .addCasingInfo("Infinity Catalyst Frame Box", 128) - .addCasingInfo("Neutronium Reinforced Borosilicate Glass Block", 63) - .addEnergyHatch("1-32, Hint block with dot 2", 2) - .addInputHatch("1-16, Hint block with dot 1", 1) - .addOutputHatch("1-16, Hint block with dot 1", 1) - .addStructureInfo("Supports Crafting Input Buffer") - .addStructureInfo( - "ALL Hatches must be " + GT_Utility.getColoredTierNameFromTier((byte) hatchTier()) - + EnumChatFormatting.GRAY - + " or better") - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public int tier() { - return 9; - } - - @Override - public long capableStartupCanonical() { - return 5_120_000_000L; - } - - @Override - public Block getCasingBlock() { - return ModBlocks.blockCasings3Misc; - } - - @Override - public int getCasingMeta() { - return 12; - } - - @Override - public Block getCoilBlock() { - return Loaders.compactFusionCoil; - } - - @Override - public int getCoilMeta() { - return 3; - } - - @Override - public Block getGlassBlock() { - return ItemRegistry.bw_realglas; - } - - @Override - public int getGlassMeta() { - return 13; - } - - @Override - public int hatchTier() { - return 9; - } - - @Override - public Materials getFrameBox() { - return Materials.InfinityCatalyst; - } - - @Override - public ITexture getTextureOverlay() { - if (this.mMaxProgresstime > 0) return TextureFactory.of( - TextureFactory.builder() - .addIcon(TexturesGtBlock.Casing_Machine_Screen_3) - .extFacing() - .build()); - else return TextureFactory.of( - TextureFactory.builder() - .addIcon(TexturesGtBlock.Casing_Machine_Screen_1) - .extFacing() - .build()); - } - - @Override - public int getMaxPara() { - return 64; - } - - @Override - public int extraPara(int startEnergy) { - if (startEnergy < 160000000) return 4; - if (startEnergy < 320000000) return 3; - if (startEnergy < 640000000) return 2; - return 1; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return DescTextLocalization.addText("LargeFusion4.hint", 9); - } - - @Override - public boolean turnCasingActive(boolean status) { - if (this.mEnergyHatches != null) { - for (GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) { - hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); - } - } - if (this.eEnergyMulti != null) { - for (GT_MetaTileEntity_Hatch_EnergyMulti hatch : this.eEnergyMulti) { - hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); - } - } - if (this.mOutputHatches != null) { - for (GT_MetaTileEntity_Hatch_Output hatch : this.mOutputHatches) { - hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); - } - } - if (this.mInputHatches != null) { - for (GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) { - hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); - } - } - if (this.mDualInputHatches != null) { - for (IDualInputHatch hatch : this.mDualInputHatches) { - hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); - } - } - return true; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) return new ITexture[] { TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS) - .extFacing() - .build(), getTextureOverlay() }; - if (!aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; - return new ITexture[] { TextureFactory.builder() - .addIcon(TexturesGtBlock.TEXTURE_CASING_FUSION_CASING_ULTRA) - .extFacing() - .build() }; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new LargeFusionComputer4(mName); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer5.java b/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer5.java deleted file mode 100644 index aa4766a01a..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/LargeFusionComputer5.java +++ /dev/null @@ -1,231 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; - -import goodgenerator.blocks.tileEntity.base.LargeFusionComputerPP; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TAE; -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_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.IDualInputHatch; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class LargeFusionComputer5 extends LargeFusionComputerPP { - - public LargeFusionComputer5(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - public LargeFusionComputer5(String name) { - super(name); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fusion Reactor") - .addInfo("Galaxy Collapse.") - .addInfo("Controller block for the Compact Fusion Reactor MK-V.") - .addInfo( - EnumChatFormatting.AQUA + GT_Utility.formatNumbers(getSingleHatchPower()) - + EnumChatFormatting.GRAY - + " EU/t and " - + EnumChatFormatting.AQUA - + GT_Utility.formatNumbers(capableStartupCanonical() / 32 / M) - + "M" - + EnumChatFormatting.GRAY - + " EU capacity per Energy Hatch") - .addInfo("If the recipe has a startup cost greater than the") - .addInfo("number of energy hatches * cap, you can't do it") - .addInfo( - "If the recipe requires a voltage tier over " + GT_Utility.getColoredTierNameFromTier((byte) tier()) - + EnumChatFormatting.GRAY - + " , you can't do it either") - .addInfo("Make sure the whole structure is built in the 3x3") - .addInfo("chunk area of the ring center (not controller).") - .addInfo("Performs 4/4 overclock.") - .addInfo("Startup < 160,000,000 EU: 320x Parallel") - .addInfo("Startup < 320,000,000 EU: 256x Parallel") - .addInfo("Startup < 640,000,000 EU: 192x Parallel") - .addInfo("Startup < 1,200,000,000 EU: 128x Parallel") - .addInfo("Startup >= 1,200,000,000 EU: 64x Parallel") - .addInfo( - "Support" + EnumChatFormatting.BLUE - + " Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.GRAY - + " Energy/Laser Hatches!") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .addCasingInfo("Fusion Machine Casing MK IV", 1664) - .addCasingInfo("Compact Fusion Coil MK-II Finaltype", 560) - .addCasingInfo("Infinity Frame Box", 128) - .addCasingInfo("Cosmic Neutronium Reinforced Borosilicate Glass Block", 63) - .addEnergyHatch("1-32, Hint block with dot 2", 2) - .addInputHatch("1-16, Hint block with dot 1", 1) - .addOutputHatch("1-16, Hint block with dot 1", 1) - .addStructureInfo("Supports Crafting Input Buffer") - .addStructureInfo( - "ALL Hatches must be " + GT_Utility.getColoredTierNameFromTier((byte) hatchTier()) - + EnumChatFormatting.GRAY - + " or better") - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public int tier() { - return 10; - } - - @Override - public long capableStartupCanonical() { - return 20_480_000_000L; - } - - @Override - public Block getCasingBlock() { - return ModBlocks.blockCasings6Misc; - } - - @Override - public int getCasingMeta() { - return 0; - } - - @Override - public Block getCoilBlock() { - return Loaders.compactFusionCoil; - } - - @Override - public int getCoilMeta() { - return 4; - } - - @Override - public Block getGlassBlock() { - return ItemRegistry.bw_realglas; - } - - @Override - public int getGlassMeta() { - return 14; - } - - @Override - public int hatchTier() { - return 10; - } - - @Override - public Materials getFrameBox() { - return Materials.Infinity; - } - - @Override - public ITexture getTextureOverlay() { - if (this.getBaseMetaTileEntity() - .isActive()) - return TextureFactory.of( - TextureFactory.builder() - .addIcon(TexturesGtBlock.Casing_Machine_Screen_Rainbow) - .extFacing() - .build()); - else return TextureFactory.of( - TextureFactory.builder() - .addIcon(TexturesGtBlock.Casing_Machine_Screen_1) - .extFacing() - .build()); - } - - @Override - public int getMaxPara() { - return 64; - } - - @Override - public int extraPara(int startEnergy) { - if (startEnergy < 160000000) return 5; - if (startEnergy < 320000000) return 4; - if (startEnergy < 640000000) return 3; - if (startEnergy < 1200000000) return 2; - return 1; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return DescTextLocalization.addText("LargeFusion5.hint", 9); - } - - @Override - public boolean turnCasingActive(boolean status) { - if (this.mEnergyHatches != null) { - for (GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) { - hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); - } - } - if (this.eEnergyMulti != null) { - for (GT_MetaTileEntity_Hatch_EnergyMulti hatch : this.eEnergyMulti) { - hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); - } - } - if (this.mOutputHatches != null) { - for (GT_MetaTileEntity_Hatch_Output hatch : this.mOutputHatches) { - hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); - } - } - if (this.mInputHatches != null) { - for (GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) { - hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); - } - } - if (this.mDualInputHatches != null) { - for (IDualInputHatch hatch : this.mDualInputHatches) { - hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); - } - } - return true; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) return new ITexture[] { TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS) - .extFacing() - .build(), getTextureOverlay() }; - if (!aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; - return new ITexture[] { TextureFactory.builder() - .addIcon(TexturesGtBlock.TEXTURE_CASING_FUSION_CASING_HYPER) - .extFacing() - .build() }; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new LargeFusionComputer5(mName); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java new file mode 100644 index 0000000000..6110cf6eeb --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEComponentAssemblyLine.java @@ -0,0 +1,416 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.*; + +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.loader.Loaders; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; + +public class MTEComponentAssemblyLine extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private int casingTier; + private float speedBonus; + protected static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + new String[][] { + { " ", " III ", " HHI~IHH ", "HH III HH", "H H", "H H", "H JJJ H", + "H JJJ H", "H N N H", "HHHHHHHHH" }, + { " ", " ELHHHLE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", + "AG HHH GA", "AG GA", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH", + "HG HHH GH", "HG GH", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", + "AG HHH GA", "AG GA", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH", + "HG HHH GH", "HG GH", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", + "AG HHH GA", "AG GA", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "HG C GH", "HG GH", "HG GH", + "HG HHH GH", "HG GH", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " BBB ", " EL LE ", "E GGDGG E", "HGG D GGH", "AG C GA", "AG GA", "AG GA", + "AG HHH GA", "AG GA", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A n n A", "MHHHHHHHM" }, + { " HBH ", " EL LE ", "E E", "HC CH", "AC CA", "AC CA", "A D D A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " ", " ELHHHLE ", "E E", "H H", "A A", "A A", "A A", + "A HHH A", "A A", "MHHHHHHHM" }, + { " ", " ", " HHHHHHH ", "HH HH", "H H", "H H", "H H", + "H H", "H KKK H", "HHHHHHHHH" } }) + .addElement( + 'A', + ofChain( + ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 5), + ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 13), + ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 14), + ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 15), + ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks2", 0))) + .addElement('H', ofBlock(GregTechAPI.sBlockCasings8, 7)) + .addElement('C', ofBlock(GregTechAPI.sBlockCasings2, 5)) + .addElement('D', ofBlock(GregTechAPI.sBlockCasings2, 9)) + .addElement('G', ofBlock(GregTechAPI.sBlockCasings9, 0)) + .addElement('E', ofBlock(GregTechAPI.sBlockCasings9, 1)) + .addElement('F', ofBlock(GregTechAPI.sBlockCasings4, 1)) + .addElement( + 'B', + ofBlocksTiered( + (block, meta) -> block == Loaders.componentAssemblylineCasing ? meta : -1, + IntStream.range(0, 14) + .mapToObj(i -> Pair.of(Loaders.componentAssemblylineCasing, i)) + .collect(Collectors.toList()), + -2, + (t, meta) -> t.casingTier = meta, + t -> t.casingTier)) + .addElement( + 'J', + GTStructureUtility.buildHatchAdder(MTEComponentAssemblyLine.class) + .atLeast(InputBus) + .dot(1) + .casingIndex(183) + .buildAndChain(GregTechAPI.sBlockCasings8, 7)) + .addElement( + 'N', + GTStructureUtility.buildHatchAdder(MTEComponentAssemblyLine.class) + .atLeast(InputBus) + .dot(1) + .casingIndex(183) + .buildAndChain(GTStructureUtility.ofFrame(Materials.TungstenSteel))) + .addElement( + 'K', + GTStructureUtility.buildHatchAdder(MTEComponentAssemblyLine.class) + .atLeast(OutputBus) + .dot(2) + .casingIndex(183) + .buildAndChain(GregTechAPI.sBlockCasings8, 7)) + .addElement( + 'L', + GTStructureUtility.buildHatchAdder(MTEComponentAssemblyLine.class) + .atLeast(Energy, ExoticEnergy) + .dot(3) + .casingIndex(183) + .buildAndChain(GregTechAPI.sBlockCasings8, 7)) + .addElement( + 'I', + GTStructureUtility.buildHatchAdder(MTEComponentAssemblyLine.class) + .atLeast(Maintenance) + .dot(4) + .casingIndex(183) + .buildAndChain(GregTechAPI.sBlockCasings8, 7)) + .addElement( + 'M', + GTStructureUtility.buildHatchAdder(MTEComponentAssemblyLine.class) + .atLeast(InputHatch) + .dot(5) + .casingIndex(183) + .buildAndChain(GregTechAPI.sBlockCasings8, 7)) + .addElement('n', GTStructureUtility.ofFrame(Materials.TungstenSteel)) + .build(); + + public MTEComponentAssemblyLine(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEComponentAssemblyLine(String aName) { + super(aName); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 4, 2, 0); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("High-Capacity Component Assembler") + .addInfo("Controller block for the Component Assembly Line.") + .addInfo("Assembles basic components (motors, pumps, etc.) in large batches.") + .addInfo( + "The " + EnumChatFormatting.BOLD + + EnumChatFormatting.YELLOW + + "Component Assembly Line Casing " + + EnumChatFormatting.RESET + + EnumChatFormatting.GRAY + + "limits the recipes the machine can perform. See the NEI pages for details.") + .addInfo("Using casings above the required recipe tier provides a speed bonus:") + .addInfo(EnumChatFormatting.YELLOW + "Halves recipe time per tier above recipe") + .addInfo( + "Supports " + EnumChatFormatting.BLUE + + "Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " laser and multi-amp hatches!") + .addInfo("Supports overclocking beyond MAX!") + .addInfo(EnumChatFormatting.ITALIC + "Much more efficient than other competing brands!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginStructureBlock(9, 10, 33, false) + .addStructureInfo("This structure is too complex! See schematic for details.") + .addOtherStructurePart("Borosilicate Glass", "Can be UV tier or higher") + .addInputBus("Start of conveyor belt", 1) + .addOutputBus("End of conveyor belt", 2) + .addEnergyHatch("Second-top layer", 3) + .addMaintenanceHatch("Around the controller", 4) + .addInputHatch("Bottom left and right corners", 5) + .toolTipFinisher( + EnumChatFormatting.AQUA + "MadMan310" + + EnumChatFormatting.GRAY + + " via " + + EnumChatFormatting.GREEN + + "Good Generator"); + + return tt; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEComponentAssemblyLine(mName); + } + + /** + * Changes and adds new information to the default info data for the scanner. + */ + @Override + public String[] getInfoData() { + String[] origin = super.getInfoData(); + String[] ret = new String[origin.length + 1]; + System.arraycopy(origin, 0, ret, 0, origin.length); + ret[origin.length] = StatCollector.translateToLocal("scanner.info.CASS.tier") + + (casingTier >= 0 ? GTValues.VN[casingTier + 1] : "None!"); + return ret; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(183) }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (recipe.mSpecialValue > casingTier + 1) { + return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + speedBonus = (float) (1 / Math.pow(2, casingTier + 1 - recipe.mSpecialValue)); + return super.createOverclockCalculator(recipe).setSpeedBoost(speedBonus); + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getMaxInputEu()); + logic.setAvailableAmperage(1); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 4, 2, 0, realBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + casingTier = -2; + return checkPiece(STRUCTURE_PIECE_MAIN, 4, 2, 0); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + inputSeparation = !inputSeparation; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack aTool) { + if (aPlayer.isSneaking()) { + batchMode = !batchMode; + if (batchMode) { + GTUtility.sendChatToPlayer(aPlayer, "Batch recipes."); + } else { + GTUtility.sendChatToPlayer(aPlayer, "Don't batch recipes."); + } + } + + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public RecipeMap getRecipeMap() { + return GoodGeneratorRecipeMaps.componentAssemblyLineRecipes; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("casingTier", casingTier); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + casingTier = aNBT.getInteger("casingTier"); + if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { + inputSeparation = aNBT.getBoolean("mSeparate"); + } + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTECoolantTower.java b/src/main/java/goodgenerator/blocks/tileEntity/MTECoolantTower.java new file mode 100644 index 0000000000..be0fe5b4ce --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTECoolantTower.java @@ -0,0 +1,212 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.util.GTStructureUtility.*; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.blocks.tileEntity.base.MTETooltipMultiBlockBaseEM; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchMultiInput; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; + +public class MTECoolantTower extends MTETooltipMultiBlockBaseEM implements IConstructable, ISurvivalConstructable { + + protected IStructureDefinition multiDefinition = null; + private static final int CASING_INDEX = 1539; + + public MTECoolantTower(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTECoolantTower(String name) { + super(name); + } + + @Override + public IStructureDefinition getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { + { " ", " ", " BBB ", " B B ", " B B ", " B B ", + " B B ", " B B ", " BBB ", " ", " " }, + { " ", " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ", + " BB BB ", " BBBBB ", " BBB ", " ", " " }, + { " ", " ", " ", " BBB ", " B B ", " B B ", + " B B ", " BBB ", " ", " ", " " }, + { " ", " ", " ", " BBB ", " B B ", " B B ", + " B B ", " BBB ", " ", " ", " " }, + { " ", " ", " ", " BBB ", " B B ", " B B ", + " B B ", " BBB ", " ", " ", " " }, + { " ", " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ", + " BB BB ", " BBBBB ", " BBB ", " ", " " }, + { " ", " ", " BBB ", " B B ", " B B ", " B B ", + " B B ", " B B ", " BBB ", " ", " " }, + { " ", " ", " BBB ", " B B ", " B B ", " B B ", + " B B ", " B B ", " BBB ", " ", " " }, + { " ", " BBB ", " BBBBB ", " BB BB ", " BB BB ", " BB BB ", + " BB BB ", " BB BB ", " BBBBB ", " BBB ", " " }, + { " ", " BBB ", " B B ", " B B ", " B B ", " B B ", + " B B ", " B B ", " B B ", " BBB ", " " }, + { " ", " BBBBB ", " BB BB ", " BB BB ", " B B ", " B B ", + " B B ", " BB BB ", " BB BB ", " BBBBB ", " " }, + { " HH~HH ", " HBBBBBH ", " HB BH ", "HB BH", "HB BH", "HB BH", + "HB BH", "HB BH", " HB BH ", " HBBBBBH ", " HHHHH " }, + { " CCCCC ", " C C ", " C C ", "C C", "C C", "C C", + "C C", "C C", " C C ", " C C ", " CCCCC " }, })) + .addElement('B', ofBlockAnyMeta(GregTechAPI.sBlockConcretes, 8)) + .addElement('C', ofFrame(Materials.TungstenCarbide)) + .addElement( + 'H', + buildHatchAdder(MTECoolantTower.class) + .atLeast( + gregtech.api.enums.HatchElement.InputHatch, + gregtech.api.enums.HatchElement.OutputHatch) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(ofBlockAnyMeta(GregTechAPI.sBlockConcretes, 8))) + .build(); + } + return multiDefinition; + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return structureCheck_EM(mName, 5, 11, 0); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Coolant Tower") + .addInfo("Controller block for the Coolant Tower.") + .addInfo("Turn Steam back to Distilled Water.") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addController("Mid of the second layer.") + .addInputHatch("Input Hatch", 1) + .addOutputHatch("Output Hatch", 1) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(mName, 5, 11, 0, stackSize, hintsOnly); + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("CoolantTower.hint", 3); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTECoolantTower(mName); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + return true; + } + + @Override + protected @NotNull CheckRecipeResult checkProcessing_EM() { + this.mMaxProgresstime = 20; + int steam = 0; + + for (MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) { + steam += maybeDrainHatch(tHatch); + } + addOutput(GTModHandler.getDistilledWater(steam / 160)); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + private int maybeDrainHatch(MTEHatchInput tHatch) { + if (tHatch instanceof MTEHatchMultiInput) { + int drained = 0; + for (FluidStack maybeSteam : ((MTEHatchMultiInput) tHatch).getStoredFluid()) { + drained += maybeDrainSteam(tHatch, maybeSteam); + } + return drained; + } + return maybeDrainSteam(tHatch, tHatch.getFillableStack()); + } + + private int maybeDrainSteam(MTEHatchInput tHatch, FluidStack maybeSteam) { + if (maybeSteam == null) return 0; + if (!GTUtility.areFluidsEqual(maybeSteam, GTModHandler.getSteam(1))) return 0; + FluidStack defoSteam = tHatch.drain(ForgeDirection.UNKNOWN, maybeSteam, true); + return defoSteam.amount; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { casingTexturePages[12][3], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[12][3], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[12][3] }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 5, 11, 0, elementBudget, env, false, true); + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaHatch.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaHatch.java new file mode 100644 index 0000000000..d8680f5efd --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaHatch.java @@ -0,0 +1,244 @@ +package goodgenerator.blocks.tileEntity; + +import java.util.ArrayList; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +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.common.util.ForgeDirection; + +import goodgenerator.crossmod.thaumcraft.LargeEssentiaEnergyData; +import thaumcraft.api.ThaumcraftApiHelper; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.aspects.IAspectContainer; +import thaumcraft.api.aspects.IEssentiaTransport; + +public class MTEEssentiaHatch extends TileEntity implements IAspectContainer, IEssentiaTransport { + + private Aspect mLocked; + private AspectList current = new AspectList(); + public int mState = 0; + + public void setLockedAspect(Aspect aAspect) { + this.mLocked = aAspect; + } + + @Override + public void readFromNBT(NBTTagCompound tagCompound) { + super.readFromNBT(tagCompound); + + this.mLocked = Aspect.getAspect(tagCompound.getString("mLocked")); + this.mState = tagCompound.getInteger("mState"); + current = new AspectList(); + NBTTagList tlist = tagCompound.getTagList("Aspects", 10); + for (int j = 0; j < tlist.tagCount(); ++j) { + NBTTagCompound rs = tlist.getCompoundTagAt(j); + if (rs.hasKey("key")) { + current.add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount")); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound tagCompound) { + super.writeToNBT(tagCompound); + + tagCompound.setString("mLocked", this.mLocked == null ? "" : this.mLocked.getTag()); + tagCompound.setInteger("mState", mState); + NBTTagList tlist = new NBTTagList(); + Aspect[] aspectA = current.getAspects(); + for (Aspect aspect : aspectA) { + if (aspect != null) { + NBTTagCompound f = new NBTTagCompound(); + f.setString("key", aspect.getTag()); + f.setInteger("amount", current.getAmount(aspect)); + tlist.appendTag(f); + } + } + tagCompound.setTag("Aspects", tlist); + } + + public final Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + NBTTagCompound nbt = pkt.func_148857_g(); + readFromNBT(nbt); + } + + public void markDirty() { + super.markDirty(); + if (this.worldObj.isRemote) { + return; + } + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + + @Override + public void updateEntity() { + fillfrompipe(); + } + + public void fillfrompipe() { + if (getEssentiaAmount(null) >= 1000) return; + TileEntity[] te = new TileEntity[ForgeDirection.VALID_DIRECTIONS.length]; + for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { + te[i] = ThaumcraftApiHelper.getConnectableTile( + this.worldObj, + this.xCoord, + this.yCoord, + this.zCoord, + ForgeDirection.VALID_DIRECTIONS[i]); + if (te[i] != null) { + IEssentiaTransport pipe = (IEssentiaTransport) te[i]; + if (!pipe.canOutputTo(ForgeDirection.VALID_DIRECTIONS[i])) { + continue; + } + if ((pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i].getOpposite()) != null) + && (pipe.getSuctionAmount(ForgeDirection.VALID_DIRECTIONS[i]) + < getSuctionAmount(ForgeDirection.VALID_DIRECTIONS[i]))) { + Aspect readyInput = pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i].getOpposite()); + int type = LargeEssentiaEnergyData.getAspectTypeIndex(readyInput); + if (type != -1 && (mState & (1 << type)) == 0) continue; + if (readyInput.equals(mLocked)) { + addToContainer(mLocked, pipe.takeEssentia(mLocked, 1, ForgeDirection.VALID_DIRECTIONS[i])); + } + if (mLocked == null) addToContainer( + pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i]), + pipe.takeEssentia( + pipe.getEssentiaType(ForgeDirection.VALID_DIRECTIONS[i]), + 1, + ForgeDirection.VALID_DIRECTIONS[i])); + } + } + } + } + + @Override + public AspectList getAspects() { + return current; + } + + @Override + public void setAspects(AspectList aspectList) { + this.current.add(aspectList); + } + + @Override + public boolean doesContainerAccept(Aspect aspect) { + int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); + if (type != -1 && (mState & (1 << type)) == 0) return false; + return (mLocked == null || mLocked.equals(aspect)) && getEssentiaAmount(null) <= 1000; + } + + @Override + public int addToContainer(Aspect aspect, int i) { + int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); + if (type != -1 && (mState & (1 << type)) == 0) return i; + int ready = Math.min(1000 - getEssentiaAmount(null), i); + if ((mLocked == null || mLocked.equals(aspect)) && ready > 0) { + current.add(aspect, ready); + this.markDirty(); + return i - ready; + } + this.markDirty(); + return i; + } + + @Override + public boolean takeFromContainer(Aspect aspect, int i) { + return false; + } + + @Override + public boolean takeFromContainer(AspectList aspectList) { + return false; + } + + @Override + public boolean doesContainerContainAmount(Aspect aspect, int i) { + return current.aspects.containsKey(aspect) && i <= current.getAmount(aspect); + } + + @Override + public boolean doesContainerContain(AspectList aspectList) { + ArrayList ret = new ArrayList(); + for (Aspect a : aspectList.aspects.keySet()) ret.add(current.aspects.containsKey(a)); + return !ret.contains(false); + } + + @Override + public int containerContains(Aspect aspect) { + return current.aspects.containsKey(aspect) ? current.getAmount(aspect) : 0; + } + + @Override + public boolean isConnectable(ForgeDirection forgeDirection) { + return true; + } + + @Override + public boolean canInputFrom(ForgeDirection forgeDirection) { + return true; + } + + @Override + public boolean canOutputTo(ForgeDirection forgeDirection) { + return false; + } + + @Override + public void setSuction(Aspect aspect, int i) {} + + @Override + public Aspect getSuctionType(ForgeDirection forgeDirection) { + return this.mLocked; + } + + @Override + public int getSuctionAmount(ForgeDirection forgeDirection) { + return 256; + } + + @Override + public int takeEssentia(Aspect aspect, int i, ForgeDirection forgeDirection) { + return 0; + } + + @Override + public int addEssentia(Aspect aspect, int i, ForgeDirection forgeDirection) { + return i - addToContainer(aspect, i); + } + + @Override + public Aspect getEssentiaType(ForgeDirection forgeDirection) { + if (current == null || current.size() < 1) return null; + return current.getAspects()[0]; + } + + @Override + public int getEssentiaAmount(ForgeDirection forgeDirection) { + int ret = 0; + for (final Aspect A : current.aspects.keySet()) { + ret += current.getAmount(A); + } + return ret; + } + + @Override + public int getMinimumSuction() { + return Integer.MAX_VALUE; + } + + @Override + public boolean renderExtendedTube() { + return true; + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaOutputHatch.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaOutputHatch.java new file mode 100644 index 0000000000..23a0a7f093 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaOutputHatch.java @@ -0,0 +1,179 @@ +package goodgenerator.blocks.tileEntity; + +import java.util.Map; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.util.ForgeDirection; + +import thaumcraft.api.TileThaumcraft; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.aspects.IAspectContainer; +import thaumcraft.api.aspects.IEssentiaTransport; + +public class MTEEssentiaOutputHatch extends TileThaumcraft implements IAspectContainer, IEssentiaTransport { + + public static final int CAPACITY = 256; + protected AspectList mAspects = new AspectList(); + + public void clear() { + this.mAspects.aspects.clear(); + } + + @Override + public void markDirty() { + super.markDirty(); + if (this.worldObj.isRemote) return; + this.worldObj.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + } + + @Override + public void readFromNBT(NBTTagCompound nbttagcompound) { + super.readFromNBT(nbttagcompound); + this.mAspects.aspects.clear(); + NBTTagList tlist = nbttagcompound.getTagList("Aspects", 10); + for (int j = 0; j < tlist.tagCount(); ++j) { + NBTTagCompound rs = tlist.getCompoundTagAt(j); + if (rs.hasKey("key")) mAspects.add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount")); + } + } + + @Override + public void writeToNBT(NBTTagCompound nbttagcompound) { + super.writeToNBT(nbttagcompound); + Aspect[] aspectA = this.mAspects.getAspects(); + NBTTagList nbtTagList = new NBTTagList(); + for (Aspect aspect : aspectA) { + if (aspect != null) { + NBTTagCompound f = new NBTTagCompound(); + f.setString("key", aspect.getTag()); + f.setInteger("amount", this.mAspects.getAmount(aspect)); + nbtTagList.appendTag(f); + } + } + nbttagcompound.setTag("Aspects", nbtTagList); + } + + private int remainingCapacity() { + return CAPACITY - this.getEssentiaAmount(null); + } + + @Override + public AspectList getAspects() { + return this.mAspects; + } + + @Override + public void setAspects(AspectList aspectList) { + for (Map.Entry entry : aspectList.aspects.entrySet()) { + this.addEssentia(entry.getKey(), entry.getValue(), null); + } + } + + @Override + public boolean doesContainerAccept(Aspect var1) { + return true; + } + + @Override + public int addToContainer(Aspect aspect, int amount) { + int remaining = 0; + if (amount > this.remainingCapacity()) { + remaining = amount - this.remainingCapacity(); + this.mAspects.add(aspect, this.remainingCapacity()); + } else this.mAspects.add(aspect, amount); + this.markDirty(); + return remaining; + } + + @Override + public boolean takeFromContainer(Aspect aspect, int amount) { + if (this.mAspects != null && this.mAspects.getAmount(aspect) >= amount) { + this.mAspects.remove(aspect, amount); + this.markDirty(); + return true; + } else return false; + } + + @Override + public boolean takeFromContainer(AspectList aspects) { + return true; + } + + @Override + public boolean doesContainerContainAmount(Aspect aspect, int amount) { + return this.mAspects.getAmount(aspect) >= amount; + } + + @Override + public boolean doesContainerContain(AspectList aspectList) { + for (Map.Entry entry : aspectList.aspects.entrySet()) { + if (this.mAspects.getAmount(entry.getKey()) < entry.getValue()) return false; + } + return true; + } + + @Override + public int containerContains(Aspect aspect) { + return this.mAspects.getAmount(aspect); + } + + @Override + public boolean isConnectable(ForgeDirection var1) { + return true; + } + + @Override + public boolean canInputFrom(ForgeDirection var1) { + return false; + } + + @Override + public boolean canOutputTo(ForgeDirection var1) { + return true; + } + + @Override + public void setSuction(Aspect var1, int var2) {} + + @Override + public Aspect getSuctionType(ForgeDirection var1) { + return null; + } + + @Override + public int getSuctionAmount(ForgeDirection var1) { + return 0; + } + + @Override + public int takeEssentia(Aspect aspect, int amount, ForgeDirection var3) { + return this.takeFromContainer(aspect, amount) ? amount : 0; + } + + @Override + public int addEssentia(Aspect aspect, int amount, ForgeDirection direction) { + return amount - addToContainer(aspect, amount); + } + + @Override + public Aspect getEssentiaType(ForgeDirection var1) { + return this.mAspects.size() > 0 ? this.mAspects.getAspects()[0] : null; + } + + @Override + public int getEssentiaAmount(ForgeDirection var1) { + return this.mAspects.visSize(); + } + + @Override + public int getMinimumSuction() { + return 0; + } + + @Override + public boolean renderExtendedTube() { + return true; + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaOutputHatchME.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaOutputHatchME.java new file mode 100644 index 0000000000..4e8bba61ec --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEEssentiaOutputHatchME.java @@ -0,0 +1,150 @@ +package goodgenerator.blocks.tileEntity; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import appeng.api.config.Actionable; +import appeng.api.networking.GridFlags; +import appeng.api.networking.IGrid; +import appeng.api.networking.IGridNode; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.security.MachineSource; +import appeng.api.util.AECableType; +import appeng.api.util.DimensionalCoord; +import appeng.me.helpers.AENetworkProxy; +import appeng.me.helpers.IGridProxyable; +import appeng.tile.TileEvent; +import appeng.tile.events.TileEventType; +import goodgenerator.util.ItemRefer; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumicenergistics.api.grid.IEssentiaGrid; +import thaumicenergistics.api.grid.IMEEssentiaMonitor; + +public class MTEEssentiaOutputHatchME extends MTEEssentiaOutputHatch implements IActionHost, IGridProxyable { + + private AENetworkProxy gridProxy = null; + private IMEEssentiaMonitor monitor = null; + private MachineSource asMachineSource = new MachineSource(this); + + @Override + public void updateEntity() { + getProxy(); + super.updateEntity(); + } + + @Override + public void invalidate() { + super.invalidate(); + this.invalidateAE(); + } + + @Override + public void onChunkUnload() { + super.onChunkUnload(); + this.onChunkUnloadAE(); + } + + @TileEvent(TileEventType.WORLD_NBT_READ) + public void readFromNBT_AENetwork(final NBTTagCompound data) { + AENetworkProxy gp = getProxy(); + if (gp != null) getProxy().readFromNBT(data); + } + + @TileEvent(TileEventType.WORLD_NBT_WRITE) + public void writeToNBT_AENetwork(final NBTTagCompound data) { + AENetworkProxy gp = getProxy(); + if (gp != null) gp.writeToNBT(data); + } + + void onChunkUnloadAE() { + AENetworkProxy gp = getProxy(); + if (gp != null) gp.onChunkUnload(); + } + + void invalidateAE() { + AENetworkProxy gp = getProxy(); + if (gp != null) gp.invalidate(); + } + + @Override + public IGridNode getGridNode(ForgeDirection forgeDirection) { + AENetworkProxy gp = getProxy(); + return gp != null ? gp.getNode() : null; + } + + @Override + public void gridChanged() {} + + @Override + public AECableType getCableConnectionType(ForgeDirection forgeDirection) { + return AECableType.SMART; + } + + @Override + public void securityBreak() {} + + @Override + public AENetworkProxy getProxy() { + if (gridProxy == null) { + gridProxy = new AENetworkProxy(this, "proxy", ItemRefer.Essentia_Output_Hatch_ME.get(1), true); + gridProxy.onReady(); + gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); + } + return this.gridProxy; + } + + @Override + public DimensionalCoord getLocation() { + return new DimensionalCoord(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + } + + @Override + public IGridNode getActionableNode() { + AENetworkProxy gp = getProxy(); + return gp != null ? gp.getNode() : null; + } + + @Override + public boolean takeFromContainer(AspectList aspects) { + return false; + } + + @Override + public boolean takeFromContainer(Aspect aspect, int amount) { + return false; + } + + @Override + public int addEssentia(Aspect aspect, int amount, ForgeDirection side) { + return this.addEssentia(aspect, amount, side, Actionable.MODULATE); + } + + public int addEssentia(Aspect aspect, int amount, ForgeDirection side, Actionable mode) { + long rejectedAmount = amount; + if (this.getEssentiaMonitor()) { + rejectedAmount = this.monitor.injectEssentia(aspect, amount, mode, this.getMachineSource(), true); + } + + long acceptedAmount = (long) amount - rejectedAmount; + return (int) acceptedAmount; + } + + protected boolean getEssentiaMonitor() { + IMEEssentiaMonitor essentiaMonitor = null; + IGrid grid = null; + IGridNode node = this.getProxy() + .getNode(); + + if (node != null) { + grid = node.getGrid(); + if (grid != null) essentiaMonitor = grid.getCache(IEssentiaGrid.class); + } + this.monitor = essentiaMonitor; + return (this.monitor != null); + } + + public MachineSource getMachineSource() { + return this.asMachineSource; + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEExtremeHeatExchanger.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEExtremeHeatExchanger.java new file mode 100644 index 0000000000..c37a2026d4 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEExtremeHeatExchanger.java @@ -0,0 +1,420 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.api.recipe.ExtremeHeatExchangerRecipe; +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.blocks.tileEntity.base.MTETooltipMultiBlockBaseEM; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEExtremeHeatExchanger extends MTETooltipMultiBlockBaseEM + implements IConstructable, ISurvivalConstructable { + + protected IStructureDefinition multiDefinition = null; + + public static double penalty_per_config = 0.015d; + protected int casingAmount = 0; + protected MTEHatchInput mHotFluidHatch; + protected MTEHatchOutput mCooledFluidHatch; + private boolean transformed = false; + private String hotName; + private ExtremeHeatExchangerRecipe tRunningRecipe; + + public MTEExtremeHeatExchanger(String name) { + super(name); + } + + public MTEExtremeHeatExchanger(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public IStructureDefinition getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { + // spotless:off + { " CCC ", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", " CCC " }, + { " CCC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CCC " }, + { " CFC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CEC " }, + { " CCC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CCC " }, + { " CCC ", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", "GWWWG", "GPPPG", " CCC " }, + { " C~C ", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", "BBBBB", " CCC " }, + //spotless:on + })) + .addElement( + 'B', + ofChain( + buildHatchAdder(MTEExtremeHeatExchanger.class) + .atLeast( + gregtech.api.enums.HatchElement.InputHatch, + gregtech.api.enums.HatchElement.Maintenance) + .casingIndex(48) + .dot(1) + .build(), + onElementPass(x -> x.casingAmount++, ofBlock(GregTechAPI.sBlockCasings4, 0)))) + .addElement( + 'T', + ofChain( + buildHatchAdder(MTEExtremeHeatExchanger.class) + .atLeast( + gregtech.api.enums.HatchElement.OutputHatch, + gregtech.api.enums.HatchElement.Maintenance) + .casingIndex(48) + .dot(2) + .build(), + onElementPass(x -> x.casingAmount++, ofBlock(GregTechAPI.sBlockCasings4, 0)))) + .addElement('F', EHEHatches.HotInputHatch.newAny(48, 3)) + .addElement('E', EHEHatches.ColdOutputHatch.newAny(48, 4)) + .addElement( + 'C', + ofChain( + buildHatchAdder(MTEExtremeHeatExchanger.class) + .atLeast(gregtech.api.enums.HatchElement.Maintenance) + .casingIndex(48) + .dot(5) + .build(), + onElementPass(x -> x.casingAmount++, ofBlock(GregTechAPI.sBlockCasings4, 0)))) + .addElement('G', Glasses.chainAllGlasses()) + .addElement('P', ofBlock(GregTechAPI.sBlockCasings2, 15)) + .addElement('W', ofBlock(Loaders.pressureResistantWalls, 0)) + .build(); + } + return multiDefinition; + } + + public boolean addHotFluidInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + mHotFluidHatch = (MTEHatchInput) aMetaTileEntity; + return true; + } + return false; + } + + public boolean addColdFluidOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchOutput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + mCooledFluidHatch = (MTEHatchOutput) aMetaTileEntity; + return true; + } + return false; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + transformed = aNBT.getBoolean("transformed"); + if (aNBT.hasKey("hotName", Constants.NBT.TAG_STRING)) { + String loadedHotName = aNBT.getString("hotName"); + Fluid hotFluid = FluidRegistry.getFluid(loadedHotName); + if (hotFluid != null) { + hotName = loadedHotName; + tRunningRecipe = (ExtremeHeatExchangerRecipe) GoodGeneratorRecipeMaps.extremeHeatExchangerFuels + .getBackend() + .findFuel(hotFluid); + } + } else { + hotName = null; + tRunningRecipe = null; + } + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setBoolean("transformed", transformed); + if (hotName != null) aNBT.setString("hotName", hotName); + super.saveNBTData(aNBT); + } + + @Override + public RecipeMap getRecipeMap() { + return GoodGeneratorRecipeMaps.extremeHeatExchangerFuels; + } + + @Override + protected void clearHatches_EM() { + super.clearHatches_EM(); + mCooledFluidHatch = null; + mHotFluidHatch = null; + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.casingAmount = 0; + return structureCheck_EM(mName, 2, 5, 0) && mMaintenanceHatches.size() == 1 && casingAmount >= 25; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Heat Exchanger/Plasma Heat Exchanger") + .addInfo("Controller block for the Extreme Heat Exchanger.") + .addInfo("Accept Hot fluid like lava, hot coolant or plasma.") + .addInfo("Output SC Steam/SH Steam/Steam.") + .addInfo("Check NEI for more info.") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addController("Front bottom") + .addOtherStructurePart("Input Hatch", "Distilled water. Any bottom left/right side casing", 1) + .addOtherStructurePart("Output Hatch", "SC Steam/SH Steam/Steam. Any top layer casing", 2) + .addOtherStructurePart("Input Hatch", "Hot fluid or plasma. Front middle on 4th layer", 3) + .addOtherStructurePart("Output Hatch", "Cold fluid. Back middle on 4th layer", 4) + .addMaintenanceHatch("Any Casing", 1, 2, 5) + .addCasingInfoMin("Robust Tungstensteel Machine Casings", 25, false) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + tRunningRecipe = null; + if (mHotFluidHatch.getFluid() == null) return CheckRecipeResultRegistry.SUCCESSFUL; + ExtremeHeatExchangerRecipe tRecipe = (ExtremeHeatExchangerRecipe) GoodGeneratorRecipeMaps.extremeHeatExchangerFuels + .getBackend() + .findFuel(mHotFluidHatch.getFluid()); + if (tRecipe == null) return CheckRecipeResultRegistry.NO_RECIPE; + tRunningRecipe = tRecipe; + this.hotName = mHotFluidHatch.getFluid() + .getFluid() + .getName(); + int tMaxConsume = tRecipe.getMaxHotFluidConsume(); + int transformed_threshold = tRecipe.mSpecialValue; + int tRealConsume = Math.min(tMaxConsume, mHotFluidHatch.getFluid().amount); + double penalty = 0.0d; + double efficiency = 1d; + int shs_reduction_per_config = 150; + + if (mInventory[1] != null && mInventory[1].getUnlocalizedName() + .startsWith("gt.integrated_circuit")) { + int circuit_config = mInventory[1].getItemDamage(); + if (circuit_config >= 1 && circuit_config <= 25) { + penalty = (circuit_config - 1) * penalty_per_config; + transformed_threshold -= (shs_reduction_per_config * (circuit_config - 1)); + } + } + efficiency -= penalty; + + if (transformed_threshold <= 0) transformed_threshold = 1; + + transformed = tRealConsume >= transformed_threshold; + + this.mMaxProgresstime = 20; + this.mEUt = (int) (tRecipe.getEUt() * efficiency * ((double) tRealConsume / (double) tMaxConsume)); + mHotFluidHatch.drain(tRealConsume, true); + mCooledFluidHatch.fill(new FluidStack(tRecipe.getCooledFluid(), tRealConsume), true); + this.mEfficiencyIncrease = 160; + + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (this.mEUt > 0 && tRunningRecipe != null) { + Fluid tReadySteam = transformed ? tRunningRecipe.getHeatedSteam() : tRunningRecipe.getNormalSteam(); + int waterAmount = (int) (this.mEUt / getUnitSteamPower(tReadySteam.getName())) / 160; + if (waterAmount < 0) return false; + if (depleteInput(GTModHandler.getDistilledWater(waterAmount))) { + addOutput(new FluidStack(tReadySteam, waterAmount * 160)); + } else { + GTLog.exp.println(this.mName + " had no more Distilled water!"); + mHotFluidHatch.getBaseMetaTileEntity() + .doExplosion(V[8]); + return false; + } + } + return true; + } + + public double getUnitSteamPower(String steam) { + switch (steam) { + case "steam": + return 0.5; + case "ic2superheatedsteam": + return 1; + case "supercriticalsteam": + return 100; + default: + return -1; + } + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(mName, 2, 5, 0, stackSize, hintsOnly); + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("ExtremeHeatExchanger.hint", 6); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEExtremeHeatExchanger(mName); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public String[] getInfoData() { + int tThreshold = tRunningRecipe != null ? tRunningRecipe.mSpecialValue : 0; + return new String[] { + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + StatCollector.translateToLocal("scanner.info.XHE.0") + " " + + (transformed ? EnumChatFormatting.RED : EnumChatFormatting.YELLOW) + + GTUtility.formatNumbers(this.mEUt) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("scanner.info.XHE.1") + " " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(tThreshold) + + EnumChatFormatting.RESET + + " L/s" }; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { casingTexturePages[0][48], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][48], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][48] }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 2, 5, 0, elementBudget, env, false, true); + } + + private enum EHEHatches implements IHatchElement { + + HotInputHatch(MTEExtremeHeatExchanger::addHotFluidInputToMachineList, MTEHatchInput.class) { + + @Override + public long count(MTEExtremeHeatExchanger t) { + if (t.mHotFluidHatch == null) return 0; + return 1; + } + }, + ColdOutputHatch(MTEExtremeHeatExchanger::addColdFluidOutputToMachineList, MTEHatchOutput.class) { + + @Override + public long count(MTEExtremeHeatExchanger t) { + if (t.mCooledFluidHatch == null) return 0; + return 1; + } + }; + + private final List> mteClasses; + private final IGTHatchAdder adder; + + EHEHatches(IGTHatchAdder adder, Class... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + this.adder = adder; + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + public IGTHatchAdder adder() { + return adder; + } + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEFuelRefineFactory.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEFuelRefineFactory.java new file mode 100644 index 0000000000..9c25f98d30 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEFuelRefineFactory.java @@ -0,0 +1,376 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureUtility; + +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.blocks.tileEntity.base.MTETooltipMultiBlockBaseEM; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; + +public class MTEFuelRefineFactory extends MTETooltipMultiBlockBaseEM implements IConstructable, ISurvivalConstructable { + + private IStructureDefinition multiDefinition = null; + private int Tier = -1; + private int[] cnt = new int[] { 0, 0, 0, 0 }; + private static final Block[] coils = new Block[] { Loaders.FRF_Coil_1, Loaders.FRF_Coil_2, Loaders.FRF_Coil_3, + Loaders.FRF_Coil_4 }; + + public MTEFuelRefineFactory(String name) { + super(name); + useLongPower = true; + } + + public MTEFuelRefineFactory(int id, String name, String nameRegional) { + super(id, name, nameRegional); + useLongPower = true; + } + + @Override + public boolean doRandomMaintenanceDamage() { + return true; + } + + @Override + public void construct(ItemStack itemStack, boolean hintsOnly) { + structureBuild_EM(mName, 7, 12, 1, itemStack, hintsOnly); + } + + @Override + public IStructureDefinition getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { " ", " CCC ", " " }, + { " XGX ", " CCFFFCC ", " XGX " }, + { " CC CC ", " CFFCCCFFC ", " CC CC " }, + { " C C ", " CFCC CCFC ", " C C " }, + { " C C ", " CFC CFC ", " C C " }, + { " C C ", " CFC CFC ", " C C " }, + { " X X ", "CFC CFC", " X X " }, + { " G G ", "CFC CFC", " G G " }, + { " X X ", "CFC CFC", " X X " }, + { " C C ", " CFC CFC ", " C C " }, + { " C C ", " CFC CFC ", " C C " }, + { " C C ", " CFCC CCFC ", " C C " }, + { " CC CC ", " CFFC~CFFC ", " CC CC " }, + { " XGX ", " CCFFFCC ", " XGX " }, + { " ", " CCC ", " " } })) + .addElement( + 'X', + buildHatchAdder(MTEFuelRefineFactory.class) + .atLeast( + gregtech.api.enums.HatchElement.Maintenance, + gregtech.api.enums.HatchElement.InputHatch, + gregtech.api.enums.HatchElement.InputBus, + gregtech.api.enums.HatchElement.OutputHatch, + tectech.thing.metaTileEntity.multi.base.TTMultiblockBase.HatchElement.EnergyMulti + .or(gregtech.api.enums.HatchElement.Energy)) + .casingIndex(179) + .dot(1) + .buildAndChain(ofBlock(Loaders.FRF_Casings, 0))) + .addElement('C', ofBlock(Loaders.FRF_Casings, 0)) + .addElement('G', ofBlock(Loaders.fieldRestrictingGlass, 0)) + .addElement( + 'F', + ofChain( + onElementPass(x -> ++x.cnt[0], ofFieldCoil(0)), + onElementPass(x -> ++x.cnt[1], ofFieldCoil(1)), + onElementPass(x -> ++x.cnt[2], ofFieldCoil(2)), + onElementPass(x -> ++x.cnt[3], ofFieldCoil(3)))) + .build(); + } + return multiDefinition; + } + + public static IStructureElement ofFieldCoil(int aIndex) { + return new IStructureElement() { + + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + return block.equals(coils[aIndex]); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, coils[getIndex(trigger)], 0); + return true; + } + + private int getIndex(ItemStack trigger) { + int s = trigger.stackSize; + if (s > 4 || s <= 0) s = 4; + return s - 1; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return world.setBlock(x, y, z, coils[getIndex(trigger)], 0, 3); + } + + @Override + public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + return BlocksToPlace.create(coils[getIndex(trigger)], 0); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + if (check(t, world, x, y, z)) return PlaceResult.SKIP; + return StructureUtility.survivalPlaceBlock( + coils[getIndex(trigger)], + 0, + world, + x, + y, + z, + env.getSource(), + env.getActor(), + env.getChatter()); + } + }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Naquadah Fuel Refinery") + .addInfo("Controller block for the Naquadah Fuel Refinery") + .addInfo("But at what cost?") + .addInfo("Produces naquadah fuels.") + .addInfo("Needs field restriction coils to control the fatal radiation.") + .addInfo("Use higher tier coils to unlock more fuel types and reduce the processing times.") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginStructureBlock(3, 15, 15, false) + .addInputHatch("The casings adjacent to field restriction glass.") + .addInputBus("The casings adjacent to field restriction glass.", 1) + .addOutputHatch("The casings adjacent to field restriction glass.", 1) + .addEnergyHatch("The casings adjacent to field restriction glass.", 1) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.Tier = aNBT.getInteger("mTier"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mTier", this.Tier); + super.saveNBTData(aNBT); + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("FuelRefineFactory.hint", 8); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + cnt[0] = 0; + cnt[1] = 0; + cnt[2] = 0; + cnt[3] = 0; + return structureCheck_EM(mName, 7, 12, 1) && getTier() != -1; + } + + public int getTier() { + for (int i = 0; i < 4; i++) { + if (cnt[i] == 32) { + Tier = i + 1; + return i; + } + } + Tier = -1; + return -1; + } + + @Override + public RecipeMap getRecipeMap() { + return GoodGeneratorRecipeMaps.naquadahFuelRefineFactoryRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (recipe.mSpecialValue > Tier) { + return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + int overclockAmount = Tier - recipe.mSpecialValue; + return super.createOverclockCalculator(recipe).limitOverclockCount(overclockAmount); + } + }.setOverclock(2.0, 2.0); // Set Overclock to be 2/2 + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getMaxInputEu()); + logic.setAvailableAmperage(1); + } + + public final boolean addToFRFList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } else { + if (aMetaTileEntity instanceof MTEHatch) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + } + if (aMetaTileEntity instanceof MTEHatchInput) { + return this.mInputHatches.add((MTEHatchInput) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchOutput) { + return this.mOutputHatches.add((MTEHatchOutput) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchInputBus) { + return this.mInputBusses.add((MTEHatchInputBus) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchEnergy) { + return this.mEnergyHatches.add((MTEHatchEnergy) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchEnergyMulti) { + return this.eEnergyMulti.add((MTEHatchEnergyMulti) aMetaTileEntity); + } else { + return false; + } + } + } + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEFuelRefineFactory(this.mName); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return true; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public String[] getInfoData() { + String[] infoData = new String[super.getInfoData().length + 1]; + System.arraycopy(super.getInfoData(), 0, infoData, 0, super.getInfoData().length); + infoData[super.getInfoData().length] = StatCollector.translateToLocal("scanner.info.FRF") + " " + this.Tier; + return infoData; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + @SuppressWarnings("ALL") + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(179), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE), TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW) + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(179), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE), TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_GLOW) + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(179) }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 7, 12, 1, elementBudget, env, false, true); + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaGenerator.java new file mode 100644 index 0000000000..bff8da6fa2 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaGenerator.java @@ -0,0 +1,512 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.system.material.WerkstoffLoader; +import goodgenerator.blocks.tileEntity.base.MTETooltipMultiBlockBaseEM; +import goodgenerator.crossmod.thaumcraft.LargeEssentiaEnergyData; +import goodgenerator.items.GGMaterial; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import goodgenerator.util.ItemRefer; +import gregtech.api.enums.Materials; +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.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.objects.XSTR; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoTunnel; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.common.config.ConfigBlocks; + +public class MTELargeEssentiaGenerator extends MTETooltipMultiBlockBaseEM + implements IConstructable, ISurvivalConstructable { + + private IStructureDefinition multiDefinition = null; + protected int mStableValue = 0; + protected int mTierLimit = -1; + protected long mLeftEnergy; + private int mUpgrade = 1; + final XSTR R = new XSTR(); + protected ArrayList mEssentiaHatch = new ArrayList<>(); + + public MTELargeEssentiaGenerator(String name) { + super(name); + } + + public MTELargeEssentiaGenerator(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public void construct(ItemStack itemStack, boolean hintsOnly) { + structureBuild_EM(mName, 4, 0, 4, itemStack, hintsOnly); + } + + @Override + protected void clearHatches_EM() { + super.clearHatches_EM(); + mEssentiaHatch.clear(); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mStableValue = 0; + return structureCheck_EM(mName, 4, 0, 4) && (mDynamoHatches.size() + eDynamoMulti.size()) == 1 + && checkHatchTier() + && checkNoLaser() + && updateEssentiaHatchState(); + } + + private boolean checkNoLaser() { + for (MTEHatchDynamoMulti tHatch : eDynamoMulti) { + if (tHatch instanceof MTEHatchDynamoTunnel) { + return false; + } + } + return true; + } + + public boolean checkHatchTier() { + for (MTEHatchInput tHatch : mInputHatches) { + if (tHatch.mTier > mTierLimit) return false; + } + for (MTEHatchDynamo tHatch : mDynamoHatches) { + if (tHatch.mTier > mTierLimit) return false; + } + for (MTEHatchDynamoMulti tHatch : eDynamoMulti) { + if (tHatch.mTier > mTierLimit) return false; + } + return true; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.mStableValue = aNBT.getInteger("mStableValue"); + this.mLeftEnergy = aNBT.getLong("mLeftEnergy"); + this.mUpgrade = aNBT.getInteger("mUpgrade"); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mStableValue", this.mStableValue); + aNBT.setLong("mLeftEnergy", this.mLeftEnergy); + aNBT.setInteger("mUpgrade", this.mUpgrade); + } + + public boolean updateEssentiaHatchState() { + for (MTEEssentiaHatch hatch : mEssentiaHatch) { + hatch.mState = mUpgrade; + } + return true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (this.getBaseMetaTileEntity() + .isServerSide()) { + ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + if (tCurrentItem != null && tCurrentItem.getItem() + .equals( + ItemRefer.Essentia_Upgrade_Empty.get(1) + .getItem())) { + int tMeta = tCurrentItem.getItemDamage(); + if ((mUpgrade & (1 << tMeta)) == 0 && tMeta != 0) { + tCurrentItem.stackSize--; + mUpgrade = mUpgrade | (1 << tMeta); + GTUtility.sendChatToPlayer( + aPlayer, + tCurrentItem.getDisplayName() + StatCollector.translateToLocal("largeessentiagenerator.chat")); + } + updateEssentiaHatchState(); + return true; + } + } + super.onRightclick(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public IStructureDefinition getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { + { "A A", " ", " ", " ", " ~ ", " ", " ", + " ", "A A" }, + { "T C T", " CEC ", " CEEEC ", " CEEEEEC ", "CEEEEEEEC", " CEEEEEC ", " CEEEC ", + " CEC ", "T C T" }, + { "T TXT T", " TCXCT ", " TCCXCCT ", "TCCCXCCCT", "XXXXXXXXX", "TCCCXCCCT", " TCCXCCT ", + " TCXCT ", "T TXT T" } })) + .addElement('A', ofBlock(ConfigBlocks.blockCosmeticOpaque, 1)) + .addElement('T', ofBlock(ConfigBlocks.blockCosmeticSolid, 7)) + .addElement('C', ofBlock(Loaders.magicCasing, 0)) // + .addElement('E', ofChain(onElementPass(x -> { + ++x.mStableValue; + x.mTierLimit = Math.max(x.mTierLimit, 4); + }, ofBlock(Loaders.essentiaCell, 0)), onElementPass(x -> { + x.mStableValue += 2; + x.mTierLimit = Math.max(x.mTierLimit, 5); + }, ofBlock(Loaders.essentiaCell, 1)), onElementPass(x -> { + x.mStableValue += 5; + x.mTierLimit = Math.max(x.mTierLimit, 6); + }, ofBlock(Loaders.essentiaCell, 2)), onElementPass(x -> { + x.mStableValue += 10; + x.mTierLimit = Math.max(x.mTierLimit, 8); + }, ofBlock(Loaders.essentiaCell, 3)))) + .addElement( + 'X', + ofChain( + buildHatchAdder(MTELargeEssentiaGenerator.class) + .atLeast( + tectech.thing.metaTileEntity.multi.base.TTMultiblockBase.HatchElement.DynamoMulti + .or(gregtech.api.enums.HatchElement.Dynamo), + gregtech.api.enums.HatchElement.Maintenance, + gregtech.api.enums.HatchElement.InputHatch) + .casingIndex(1536) + .dot(1) + .build(), + ofBlock(Loaders.magicCasing, 0), + ofSpecificTileAdder( + MTELargeEssentiaGenerator::addEssentiaHatch, + MTEEssentiaHatch.class, + Loaders.magicCasing, + 0))) + .build(); + } + return multiDefinition; + } + + public final boolean addEssentiaHatch(MTEEssentiaHatch aTileEntity) { + return this.mEssentiaHatch.add(aTileEntity); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + this.mEfficiency = 10000; + this.mMaxProgresstime = 1; + setEssentiaToEUVoltageAndAmp(getVoltageLimit(), getAmpLimit()); + return CheckRecipeResultRegistry.GENERATING; + } + + public int getVoltageLimit() { + long voltage = 0; + for (MTEHatch tHatch : this.eDynamoMulti) { + voltage += tHatch.maxEUOutput(); + } + for (MTEHatch tHatch : this.mDynamoHatches) { + voltage += tHatch.maxEUOutput(); + } + if (voltage > Integer.MAX_VALUE) voltage = Integer.MAX_VALUE; + return (int) voltage; + } + + public int getAmpLimit() { + long amp = 0; + for (MTEHatch tHatch : this.eDynamoMulti) { + amp += tHatch.maxAmperesOut(); + } + for (MTEHatch tHatch : this.mDynamoHatches) { + amp += tHatch.maxAmperesOut(); + } + if (amp > Integer.MAX_VALUE) amp = Integer.MAX_VALUE; + return (int) amp; + } + + public long getPerAspectEnergy(Aspect aspect) { + int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); + if (!isValidEssentia(aspect)) return 0; + switch (type) { + case 0: + return normalEssentia(aspect); + case 1: + return airEssentia(aspect); + case 2: + return thermalEssentia(aspect); + case 3: + return unstableEssentia(aspect); + case 4: + return victusEssentia(aspect); + case 5: + return taintedEssentia(aspect); + case 6: + return mechanicEssentia(aspect); + case 7: + return spiritEssentia(aspect); + case 8: + return radiationEssentia(aspect); + case 9: + return electricEssentia(aspect); + default: + return 0; + } + } + + public long normalEssentia(Aspect aspect) { + return LargeEssentiaEnergyData.getAspectFuelValue(aspect); + } + + public long airEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 0; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 8; + if (depleteInput(Materials.LiquidAir.getFluid(ceoInput))) { + ceoOutput = 1.5D; + } else if (depleteInput(Materials.Air.getGas(ceoInput))) { + ceoOutput = 1.0D; + } + return (long) (baseValue * ceoOutput); + } + + public long thermalEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 0; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 2; + if (depleteInput(Materials.SuperCoolant.getFluid(ceoInput))) { + ceoOutput = 9.0D; + } else if (depleteInput(FluidRegistry.getFluidStack("cryotheum", ceoInput))) { + ceoOutput = 5.0D; + } else if (depleteInput(FluidRegistry.getFluidStack("ic2coolant", ceoInput))) { + ceoOutput = 1.5D; + } else if (depleteInput(Materials.Ice.getSolid(ceoInput))) { + ceoOutput = 1.2D; + } else if (depleteInput(FluidRegistry.getFluidStack("ic2distilledwater", ceoInput))) { + ceoOutput = 1.0D; + } else if (depleteInput(Materials.Water.getFluid(ceoInput))) { + ceoOutput = 0.5D; + } + + return (long) (baseValue * ceoOutput); + } + + public long unstableEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 0; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 4; + if (depleteInput(WerkstoffLoader.Xenon.getFluidOrGas(ceoInput))) { + ceoOutput = 4.0D; + } else if (depleteInput(WerkstoffLoader.Krypton.getFluidOrGas(ceoInput))) { + ceoOutput = 3.0D; + } else if (depleteInput(Materials.Argon.getFluid(ceoInput))) { + ceoOutput = 2.5D; + } else if (depleteInput(WerkstoffLoader.Neon.getFluidOrGas(ceoInput))) { + ceoOutput = 2.2D; + } else if (depleteInput(Materials.Helium.getFluid(ceoInput))) { + ceoOutput = 2.0D; + } else if (depleteInput(Materials.Nitrogen.getFluid(ceoInput))) { + ceoOutput = 1.0D; + } + return (long) (baseValue * ceoOutput); + } + + public long victusEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 1.0D; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 18; + if (depleteInput(FluidRegistry.getFluidStack("xpjuice", ceoInput))) { + ceoOutput = 2.0D; + } else if (depleteInput(FluidRegistry.getFluidStack("lifeessence", ceoInput))) { + ceoOutput = 6.0D; + } + return (long) (baseValue * ceoOutput); + } + + public long taintedEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 1.0D; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 3; + int chance = 2000; + if (depleteInput(FluidRegistry.getFluidStack("fluidpure", ceoInput))) { + ceoOutput = 60.0D; + chance = 0; + } else if (depleteInput(FluidRegistry.getFluidStack("fluiddeath", ceoInput))) { + ceoOutput = Math.pow(25000D / baseValue, 4); + chance = 4000; + } + + if (R.nextInt(10000) < chance) { + World world = getBaseMetaTileEntity().getWorld(); + int tX = getBaseMetaTileEntity().getXCoord() + R.nextInt(5) - 2; + int tY = getBaseMetaTileEntity().getYCoord(); + int tZ = getBaseMetaTileEntity().getZCoord() + R.nextInt(5) - 2; + if (world.isAirBlock(tX, tY, tZ)) world.setBlock(tX, tY, tZ, ConfigBlocks.blockFluxGas, R.nextInt(8), 3); + } + + return (long) (baseValue * ceoOutput); + } + + public long mechanicEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 0; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 20; + if (depleteInput(Materials.Lubricant.getFluid(ceoInput))) { + ceoOutput = 1.0D; + } + return (long) (baseValue * ceoOutput); + } + + public long spiritEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 1.0D; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 2; + if (depleteInput(FluidRegistry.getFluidStack("witchery:fluidspirit", ceoInput))) { + ceoOutput = 10D * (1 + mStableValue / 100D); + } else if (depleteInput(FluidRegistry.getFluidStack("witchery:hollowtears", ceoInput))) { + ceoOutput = 15D * (1 + 100D / mStableValue); + } + return (long) (baseValue * ceoOutput); + } + + public long radiationEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = 1.0D; + int ceoInput = (int) LargeEssentiaEnergyData.getAspectCeo(aspect) * 6; + if (depleteInput(Materials.Caesium.getMolten(ceoInput))) { + ceoOutput = 2.0D; + } else if (depleteInput(Materials.Uranium235.getMolten(ceoInput))) { + ceoOutput = 3.0D; + } else if (depleteInput(Materials.Naquadah.getMolten(ceoInput))) { + ceoOutput = 4.0D; + } else if (depleteInput(GGMaterial.atomicSeparationCatalyst.getMolten(ceoInput))) { + ceoOutput = 16.0D; + } + return (long) (baseValue * ceoOutput); + } + + public long electricEssentia(Aspect aspect) { + long baseValue = LargeEssentiaEnergyData.getAspectFuelValue(aspect); + double ceoOutput = Math.pow(3.0, GTUtility.getTier(getVoltageLimit())); + return (long) (baseValue * ceoOutput); + } + + public void setEssentiaToEUVoltageAndAmp(long voltageLimit, long ampLimit) { + long EUt = mLeftEnergy; + long EUVoltage = voltageLimit, EUAmp = 1; + + for (MTEEssentiaHatch hatch : this.mEssentiaHatch) { + AspectList aspects = hatch.getAspects(); + for (Aspect aspect : aspects.aspects.keySet()) { + if (!isValidEssentia(aspect)) continue; + while (EUt <= (voltageLimit * ampLimit) && aspects.getAmount(aspect) > 0) { + long addedEU = getPerAspectEnergy(aspect) * mStableValue / 25; + if (addedEU == 0) break; + EUt += addedEU; + aspects.reduce(aspect, 1); + if (aspects.getAmount(aspect) == 0) aspects.remove(aspect); + } + } + } + + if (EUt <= voltageLimit) { + EUVoltage = EUt; + EUAmp = 1; + mLeftEnergy = 0; + } else { + while (EUVoltage * (EUAmp + 1) <= EUt && EUAmp + 1 <= ampLimit) { + EUAmp++; + } + mLeftEnergy = EUt - (EUVoltage * EUAmp); + } + + this.mEUt = (int) EUVoltage; + this.eAmpereFlow = (int) EUAmp; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("LargeEssentiaGenerator.hint", 6); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeEssentiaGenerator(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Essentia Generator") + .addInfo("Controller block for the Large Essentia Generator") + .addInfo("Maybe some Thaumaturges are upset by it. . .") + .addInfo("Transform Essentia into energy!") + .addInfo("The Diffusion Cell determines the highest hatch tier that the LEG can accept.") + .addInfo("Supports normal Dynamo Hatches or TecTech ones for up to 64A, but no Laser Hatches.") + .addInfo("You can find more information about this generator in the Thaumonomicon.") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addMaintenanceHatch("Hint block with dot 1", 1) + .addInputHatch("Hint block with dot 1", 1) + .addDynamoHatch("Hint block with dot 1", 1) + .addOtherStructurePart("Essentia Input Hatch", "Essentia Input", 1) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + @SuppressWarnings("ALL") + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1536), + new GTRenderedTexture(Textures.BlockIcons.MACHINE_CASING_DRAGONEGG), TextureFactory.builder() + .addIcon(Textures.BlockIcons.MACHINE_CASING_DRAGONEGG_GLOW) + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1536), + new GTRenderedTexture(Textures.BlockIcons.MACHINE_CASING_DRAGONEGG) }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1536) }; + } + + public boolean isValidEssentia(Aspect aspect) { + int type = LargeEssentiaEnergyData.getAspectTypeIndex(aspect); + return type != -1 && (mUpgrade & (1 << type)) != 0; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 4, 0, 4, elementBudget, env, false, true); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java new file mode 100644 index 0000000000..40f01fbde4 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeEssentiaSmeltery.java @@ -0,0 +1,588 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Mods.ThaumicBases; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.blocks.tileEntity.base.MTETooltipMultiBlockBaseEM; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.objects.XSTR; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.visnet.VisNetHandler; +import thaumcraft.common.config.ConfigBlocks; +import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager; + +public class MTELargeEssentiaSmeltery extends MTETooltipMultiBlockBaseEM + implements IConstructable, ISurvivalConstructable { + + private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon( + "icons/LargeEssentiaSmeltery_On"); + private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( + "icons/LargeEssentiaSmeltery_On_GLOW"); + private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon( + "icons/LargeEssentiaSmeltery_Off"); + private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( + "icons/LargeEssentiaSmeltery_Off_GLOW"); + private static final String STRUCTURE_PIECE_FIRST = "first"; + private static final String STRUCTURE_PIECE_LATER = "later"; + private static final String STRUCTURE_PIECE_LAST = "last"; + private static final int CASING_INDEX = 1536; + private static final int MAX_STRUCTURE_LENGTH = 8; + private static final int DEFAULT_STRUCTURE_LENGTH = 3; + private static final int MAX_CONFIGURABLE_LENGTH = MAX_STRUCTURE_LENGTH - DEFAULT_STRUCTURE_LENGTH; + + private static final int RECIPE_DURATION = 32; + private static final int RECIPE_EUT = 480; + private static final float NODE_COST_MULTIPLIER = 1.15f; + + public AspectList mOutputAspects = new AspectList(); + protected int mCasing = 0; + protected double mParallel = 0; + protected int nodePower = 0; + protected int nodePurificationEfficiency = 0; + protected int nodeIncrease = 0; + + private IStructureDefinition multiDefinition = null; + private ArrayList mEssentiaOutputHatches = new ArrayList<>(); + private int pTier = 0; + private XSTR xstr = new XSTR(); + + public MTELargeEssentiaSmeltery(String name) { + super(name); + } + + public MTELargeEssentiaSmeltery(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + @Override + public void construct(ItemStack itemStack, boolean hintsOnly) { + structureBuild_EM(STRUCTURE_PIECE_FIRST, 2, 2, 0, itemStack, hintsOnly); + // default + structureBuild_EM(STRUCTURE_PIECE_LATER, 2, 2, -1, itemStack, hintsOnly); + structureBuild_EM(STRUCTURE_PIECE_LATER, 2, 2, -2, itemStack, hintsOnly); + int len = itemStack.stackSize; + if (len > MAX_CONFIGURABLE_LENGTH) len = MAX_CONFIGURABLE_LENGTH; + structureBuild_EM(STRUCTURE_PIECE_LAST, 2, 2, -len - 3, itemStack, hintsOnly); + while (len > 0) { + structureBuild_EM(STRUCTURE_PIECE_LATER, 2, 2, -len - 2, itemStack, hintsOnly); + len--; + } + } + + @Override + protected void clearHatches_EM() { + super.clearHatches_EM(); + mEssentiaOutputHatches.clear(); + } + + @Override + protected boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + this.mCasing = 0; + this.mParallel = 0; + this.pTier = 0; + this.nodePower = 0; + this.nodePurificationEfficiency = 0; + this.nodeIncrease = 0; + + if (!structureCheck_EM(STRUCTURE_PIECE_FIRST, 2, 2, 0)) return false; + if (!structureCheck_EM(STRUCTURE_PIECE_LATER, 2, 2, -1)) return false; + if (!structureCheck_EM(STRUCTURE_PIECE_LATER, 2, 2, -2)) return false; + int len = 2; + while (structureCheck_EM(STRUCTURE_PIECE_LATER, 2, 2, -len - 1)) len++; + if (len > MAX_STRUCTURE_LENGTH - 1 || len < DEFAULT_STRUCTURE_LENGTH) return false; + if (!structureCheck_EM(STRUCTURE_PIECE_LAST, 2, 2, -len - 1)) return false; + if (this.mCasing >= 24 && this.mMaintenanceHatches.size() == 1 + && this.mInputBusses.size() >= 1 + && this.mEssentiaOutputHatches.size() >= 1) { + this.mParallel = Math.floor(this.mParallel += 1 << this.pTier); + return true; + } + return false; + } + + @Override + public IStructureDefinition getStructure_EM() { + if (this.multiDefinition == null) { + this.multiDefinition = StructureDefinition.builder() + .addShape( + "first", + transpose(new String[][] { { " A " }, { " AAA " }, { "AA~AA" }, { " AAA " }, { " A " } })) + .addShape( + "later", + transpose(new String[][] { { " ABA " }, { "AECEA" }, { "D---D" }, { "AEFEA" }, { " AAA " } })) + .addShape( + "last", + transpose(new String[][] { { " A " }, { " AAA " }, { "AAAAA" }, { " AAA " }, { " A " } })) + .addElement('C', ofBlock(Loaders.essentiaFilterCasing, 0)) + .addElement('D', ofBlock(ConfigBlocks.blockCosmeticOpaque, 2)) + .addElement( + 'F', + ThaumicBases.isModLoaded() ? ofBlock(Block.getBlockFromName("thaumicbases:advAlchFurnace"), 0) + : ofBlock(ConfigBlocks.blockStoneDevice, 0)) + .addElement( + 'E', + ofChain( + onElementPass(x -> x.onEssentiaCellFound(0), ofBlock(Loaders.essentiaCell, 0)), + onElementPass(x -> x.onEssentiaCellFound(1), ofBlock(Loaders.essentiaCell, 1)), + onElementPass(x -> x.onEssentiaCellFound(2), ofBlock(Loaders.essentiaCell, 2)), + onElementPass(x -> x.onEssentiaCellFound(3), ofBlock(Loaders.essentiaCell, 3)))) + .addElement( + 'A', + ofChain( + buildHatchAdder(MTELargeEssentiaSmeltery.class) + .atLeast( + gregtech.api.enums.HatchElement.Maintenance, + gregtech.api.enums.HatchElement.Energy, + gregtech.api.enums.HatchElement.InputBus, + gregtech.api.enums.HatchElement.InputHatch) + .casingIndex(CASING_INDEX) + .dot(1) + .build(), + ofSpecificTileAdder( + MTELargeEssentiaSmeltery::addEssentiaOutputHatchToMachineList, + MTEEssentiaOutputHatch.class, + Loaders.essentiaOutputHatch, + 0), + onElementPass(MTELargeEssentiaSmeltery::onCasingFound, ofBlock(Loaders.magicCasing, 0)))) + .addElement('B', gregtech.api.enums.HatchElement.Muffler.newAny(CASING_INDEX, 2)) + .build(); + } + return this.multiDefinition; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Essentia Smeltery") + .addInfo("Controller block for the Large Essentia Smeltery") + .addInfo("Necessary evil.") + .addInfo("Advanced Essentia smelting technology.") + .addInfo("Max parallel dictated by structure size and Essentia Diffusion Cell tier") + .addInfo("Energy Hatch tier: HV+") + .addInfo("You can find more information about this machine in the Thaumonomicon.") + .addPollutionAmount(getPollutionPerSecond(null)) + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addController("Front center") + .addCasingInfo("Magic Casing", 24) + .addMaintenanceHatch("Hint block with dot 1") + .addInputBus("Hint block with dot 1") + .addInputHatch("Hint block with dot 1") + .addEnergyHatch("Hint block with dot 1") + .addOtherStructurePart("Essentia Output Hatch", "Hint block with dot 1") + .addMufflerHatch("Hint block with dot 2") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("LargeEssentiaSmeltery.hint", 8); + } + + @Override + public String[] getInfoData() { + String[] info = super.getInfoData(); + info[8] = "Node Power: " + EnumChatFormatting.RED + + this.nodePower + + EnumChatFormatting.RESET + + " Purification Efficiency: " + + EnumChatFormatting.AQUA + + this.nodePurificationEfficiency + + "%" + + EnumChatFormatting.RESET + + " Speed Up: " + + EnumChatFormatting.GRAY + + this.nodeIncrease + + "%" + + EnumChatFormatting.RESET; + return info; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.of(textureFontOn), TextureFactory.builder() + .addIcon(textureFontOn_Glow) + .glow() + .build() }; + else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.of(textureFontOff), TextureFactory.builder() + .addIcon(textureFontOff_Glow) + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + protected void onCasingFound() { + this.mCasing++; + } + + protected void onEssentiaCellFound(int tier) { + this.mParallel += (1 << tier) * 0.25f; + this.pTier = Math.max(this.pTier, tier); + } + + private boolean addEnergyHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } else if (aMetaTileEntity instanceof MTEHatchEnergy) { + if (((MTEHatchEnergy) aMetaTileEntity).mTier < 3) return false; + ((MTEHatchEnergy) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mEnergyHatches.add((MTEHatchEnergy) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchEnergyMulti) { + ((MTEHatchEnergyMulti) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.eEnergyMulti.add(((MTEHatchEnergyMulti) aMetaTileEntity)); + } else { + return false; + } + } + } + + private boolean addEssentiaOutputHatchToMachineList(MTEEssentiaOutputHatch aTileEntity) { + if (aTileEntity instanceof MTEEssentiaOutputHatch) { + return this.mEssentiaOutputHatches.add((MTEEssentiaOutputHatch) aTileEntity); + } + return false; + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (!this.isFullPower()) return; + super.runMachine(aBaseMetaTileEntity, aTick); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + if (!isFullPower()) return SimpleCheckRecipeResult.ofFailure("node_too_small"); + + ArrayList tItemsList = getStoredInputs(); + ArrayList tFluidsList = getStoredFluids(); + + if (tItemsList.isEmpty() && tFluidsList.isEmpty()) return CheckRecipeResultRegistry.NO_RECIPE; + + int p = (int) this.mParallel; + for (int i = tItemsList.size() - 1; i >= 0; i--) { + ItemStack itemStack = tItemsList.get(i); + int stackSize = itemStack.stackSize; + int sur = p - stackSize; + + if (sur > 0) { + p -= stackSize; + this.mOutputAspects.add(getEssentia(itemStack, stackSize)); + if (!depleteInput(itemStack)) itemStack.stackSize = 0; + } else if (sur == 0) { + this.mOutputAspects.add(getEssentia(itemStack, stackSize)); + if (!depleteInput(itemStack)) itemStack.stackSize = 0; + break; + } else { + this.mOutputAspects.add(getEssentia(itemStack, p)); + itemStack.stackSize -= p; + break; + } + } + + for (int i = tFluidsList.size() - 1; i >= 0; i--) { + FluidStack fluidStack = tFluidsList.get(i); + int stackSize = fluidStack.amount / 1000; + int sur = p - stackSize; + + if (sur > 0) { + p -= stackSize; + this.mOutputAspects.add(getEssentia(fluidStack, stackSize)); + if (!depleteInput(fluidStack)) fluidStack.amount = 0; + } else if (sur == 0) { + this.mOutputAspects.add(getEssentia(fluidStack, stackSize)); + if (!depleteInput(fluidStack)) fluidStack.amount = 0; + break; + } else { + this.mOutputAspects.add(getEssentia(fluidStack, p)); + fluidStack.amount -= p; + break; + } + } + + this.mEfficiency = 10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000; + this.mEfficiencyIncrease = 10000; + + final World WORLD = this.getBaseMetaTileEntity() + .getWorld(); + int x = this.getBaseMetaTileEntity() + .getXCoord(); + int y = this.getBaseMetaTileEntity() + .getYCoord(); + int z = this.getBaseMetaTileEntity() + .getZCoord(); + + this.drainNodePower(WORLD, x, y, z); + this.nodePower -= expectedPower(); + + calculatePerfectOverclockedNessMulti( + RECIPE_EUT, + (int) Math.ceil(this.mOutputAspects.visSize() * RECIPE_DURATION * (1 - this.nodeIncrease * 0.005)), + 1, + Math.min(Integer.MAX_VALUE, getMaxInputEnergy_EM())); + + this.updateSlots(); + if (this.mEUt > 0) this.mEUt = -this.mEUt; + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + private AspectList getEssentia(ItemStack itemStack, int amount) { + AspectList aspectList = new AspectList(); + if (amount == 0) { + return aspectList; + } + AspectList aspects = ThaumcraftCraftingManager.getObjectTags(itemStack); + aspects = ThaumcraftCraftingManager.getBonusTags(itemStack, aspects); + if (aspects != null && aspects.size() != 0 && aspects.getAspects()[0] != null) { + for (int i = 0; i < amount; i++) aspectList.add(aspects); + } else aspectList.add(Aspect.ENTROPY, amount); + return aspectList; + } + + private AspectList getEssentia(FluidStack fluidStack, int amountBuckets) { + Block fluidBlock = fluidStack.getFluid() + .getBlock(); + if (fluidBlock == null) return new AspectList(); + ItemStack block = new ItemStack(fluidBlock); + return getEssentia(block, amountBuckets); + } + + private void fillEssentiaOutputHatch() { + for (MTEEssentiaOutputHatch outputHatch : this.mEssentiaOutputHatches) { + for (Map.Entry entry : this.mOutputAspects.copy().aspects.entrySet()) { + Aspect aspect = entry.getKey(); + int amount = entry.getValue(); + this.mOutputAspects.remove(aspect, outputHatch.addEssentia(aspect, amount, null)); + } + } + this.mOutputAspects.aspects.clear(); + } + + private int expectedPower() { + return (int) (Math.pow(this.getMaxEnergyInputTier_EM(), 2) * NODE_COST_MULTIPLIER); + } + + private boolean isFullPower() { + return this.nodePower > expectedPower(); + } + + private void generateFluxGas(World world, int x, int y, int z) { + world.setBlock(x, y, z, ConfigBlocks.blockFluxGas, 8, 3); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setDouble("mParallel", this.mParallel); + aNBT.setDouble("nodePower", this.nodePower); + aNBT.setDouble("nodePurificationEfficiency", this.nodePurificationEfficiency); + aNBT.setDouble("nodeIncrease", this.nodeIncrease); + + Aspect[] aspectA = this.mOutputAspects.getAspects(); + NBTTagList nbtTagList = new NBTTagList(); + for (Aspect aspect : aspectA) { + if (aspect != null) { + NBTTagCompound f = new NBTTagCompound(); + f.setString("key", aspect.getTag()); + f.setInteger("amount", this.mOutputAspects.getAmount(aspect)); + nbtTagList.appendTag(f); + } + } + aNBT.setTag("Aspects", nbtTagList); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.mParallel = aNBT.getDouble("mParallel"); + this.nodePower = aNBT.getInteger("nodePower"); + this.nodePurificationEfficiency = aNBT.getInteger("nodePurificationEfficiency"); + this.nodeIncrease = aNBT.getInteger("nodeIncrease"); + + this.mOutputAspects.aspects.clear(); + NBTTagList tlist = aNBT.getTagList("Aspects", 10); + for (int j = 0; j < tlist.tagCount(); ++j) { + NBTTagCompound rs = tlist.getCompoundTagAt(j); + if (rs.hasKey("key")) + this.mOutputAspects.add(Aspect.getAspect(rs.getString("key")), rs.getInteger("amount")); + } + super.loadNBTData(aNBT); + } + + @Override + protected void addClassicOutputs_EM() { + super.addClassicOutputs_EM(); + fillEssentiaOutputHatch(); + } + + @Override + public void stopMachine() { + super.stopMachine(); + this.mOutputAspects.aspects.clear(); + } + + private void drainNodePower(World world, int x, int y, int z) { + int power = this.expectedPower(); + if (this.nodePower < power * 10) { + this.nodePower += VisNetHandler.drainVis(world, x, y, z, Aspect.WATER, power); + this.nodePower += VisNetHandler.drainVis(world, x, y, z, Aspect.FIRE, power); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aTick % 5 == 0 && this.mMachine) { + final World WORLD = this.getBaseMetaTileEntity() + .getWorld(); + int x = this.getBaseMetaTileEntity() + .getXCoord(); + int y = this.getBaseMetaTileEntity() + .getYCoord(); + int z = this.getBaseMetaTileEntity() + .getZCoord(); + + this.drainNodePower(WORLD, x, y, z); + + this.nodePurificationEfficiency = Math.max(0, this.nodePurificationEfficiency - 1); + if (this.nodePurificationEfficiency < 100) { + this.nodePurificationEfficiency = (int) Math.min( + 100, + this.nodePurificationEfficiency + + Math.ceil(VisNetHandler.drainVis(WORLD, x, y, z, Aspect.ORDER, 200) * 0.05)); + } + + this.nodeIncrease = Math.min(100, VisNetHandler.drainVis(WORLD, x, y, z, Aspect.ENTROPY, 125)); + } + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + this.nodePurificationEfficiency = Math.max(0, this.nodePurificationEfficiency - 1); + if (xstr.nextInt(20) == 0) { + if (xstr.nextInt(100) < Math.max(100 - this.nodePurificationEfficiency, 0)) { + final World WORLD = this.getBaseMetaTileEntity() + .getWorld(); + MTEHatchMuffler mufflerHatch = this.mMufflerHatches.get(xstr.nextInt(this.mMufflerHatches.size())); + int x = mufflerHatch.getBaseMetaTileEntity() + .getXCoord(); + int y = mufflerHatch.getBaseMetaTileEntity() + .getYCoord(); + int z = mufflerHatch.getBaseMetaTileEntity() + .getZCoord(); + + ForgeDirection facing = mufflerHatch.getBaseMetaTileEntity() + .getFrontFacing(); + switch (facing) { + case SOUTH: + z += 1; + break; + case NORTH: + z -= 1; + break; + case WEST: + x -= 1; + break; + case EAST: + x += 1; + break; + default: + y += 1; + } + generateFluxGas(WORLD, x, y, z); + } + } + return super.onRunningTick(aStack); + } + + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 22 * (100 - this.nodePurificationEfficiency); + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTELargeEssentiaSmeltery(this.mName); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int built = survivialBuildPiece(STRUCTURE_PIECE_FIRST, stackSize, 2, 2, 0, elementBudget, env, false, true); + if (built >= 0) return built; + int length = stackSize.stackSize + 2; + if (length > MAX_CONFIGURABLE_LENGTH) length = MAX_CONFIGURABLE_LENGTH + 2; + for (int i = 1; i <= length; i++) { + built = survivialBuildPiece(STRUCTURE_PIECE_LATER, stackSize, 2, 2, -i, elementBudget, env, false, true); + if (built >= 0) return built; + } + return survivialBuildPiece(STRUCTURE_PIECE_LAST, stackSize, 2, 2, -length - 1, elementBudget, env, false, true); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer1.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer1.java new file mode 100644 index 0000000000..536ec4b39c --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer1.java @@ -0,0 +1,169 @@ +package goodgenerator.blocks.tileEntity; + +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import bartworks.common.loaders.ItemRegistry; +import goodgenerator.blocks.tileEntity.base.MTELargeFusionComputer; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTELargeFusionComputer1 extends MTELargeFusionComputer { + + private static final ITexture textureOverlay = TextureFactory.of( + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1_GLOW) + .extFacing() + .glow() + .build()); + + public MTELargeFusionComputer1(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public MTELargeFusionComputer1(String name) { + super(name); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fusion Reactor") + .addInfo("Millions of nuclear.") + .addInfo("Controller block for the Compact Fusion Reactor MK-I Prototype.") + .addInfo( + EnumChatFormatting.AQUA + GTUtility.formatNumbers(getSingleHatchPower()) + + EnumChatFormatting.GRAY + + " EU/t and " + + EnumChatFormatting.AQUA + + GTUtility.formatNumbers(capableStartupCanonical() / 32 / M) + + "M" + + EnumChatFormatting.GRAY + + " EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo( + "If the recipe requires a voltage tier over " + GTUtility.getColoredTierNameFromTier((byte) tier()) + + EnumChatFormatting.GRAY + + " , you can't do it either") + .addInfo("Make sure the whole structure is built in the 3x3") + .addInfo("chunk area of the ring center (not controller).") + .addInfo("It can run 64x recipes at most.") + .addInfo( + "Support" + EnumChatFormatting.BLUE + + " Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Energy/Laser Hatches!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addCasingInfo("LuV Machine Casing", 1664) + .addCasingInfo("Ameliorated Superconduct Coil", 560) + .addCasingInfo("Naquadah Alloy Frame Boxes", 128) + .addCasingInfo("Rhodium-Plated Palladium Reinforced Borosilicate Glass Block", 63) + .addEnergyHatch("1-32, Hint block with dot 2", 2) + .addInputHatch("1-16, Hint block with dot 1", 1) + .addOutputHatch("1-16, Hint block with dot 1", 1) + .addStructureInfo("Supports Crafting Input Buffer") + .addStructureInfo( + "ALL Hatches must be " + GTUtility.getColoredTierNameFromTier((byte) hatchTier()) + + EnumChatFormatting.GRAY + + " or better") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int tier() { + return 6; + } + + @Override + public long capableStartupCanonical() { + return 160_000_000; + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings1; + } + + @Override + public int getCasingMeta() { + return 6; + } + + @Override + public Block getCoilBlock() { + return Loaders.compactFusionCoil; + } + + @Override + public int getCoilMeta() { + return 0; + } + + @Override + public Block getGlassBlock() { + return ItemRegistry.bw_realglas; + } + + @Override + public int getGlassMeta() { + return 3; + } + + @Override + public int hatchTier() { + return 6; + } + + @Override + public Materials getFrameBox() { + return Materials.NaquadahAlloy; + } + + @Override + public int getMaxPara() { + return 64; + } + + @Override + public int extraPara(int startEnergy) { + return 1; + } + + @Override + public ITexture getTextureOverlay() { + return textureOverlay; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("LargeFusion1.hint", 9); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeFusionComputer1(mName); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer2.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer2.java new file mode 100644 index 0000000000..e8840d6446 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer2.java @@ -0,0 +1,170 @@ +package goodgenerator.blocks.tileEntity; + +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2_GLOW; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import bartworks.common.loaders.ItemRegistry; +import goodgenerator.blocks.tileEntity.base.MTELargeFusionComputer; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTELargeFusionComputer2 extends MTELargeFusionComputer { + + private static final ITexture textureOverlay = TextureFactory.of( + TextureFactory.builder() + .addIcon(OVERLAY_FUSION2) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION2_GLOW) + .extFacing() + .glow() + .build()); + + public MTELargeFusionComputer2(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public MTELargeFusionComputer2(String name) { + super(name); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fusion Reactor") + .addInfo("Millions of nuclear.") + .addInfo("Controller block for the Compact Fusion Reactor MK-II.") + .addInfo( + EnumChatFormatting.AQUA + GTUtility.formatNumbers(getSingleHatchPower()) + + EnumChatFormatting.GRAY + + " EU/t and " + + EnumChatFormatting.AQUA + + GTUtility.formatNumbers(capableStartupCanonical() / 32 / M) + + "M" + + EnumChatFormatting.GRAY + + " EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo( + "If the recipe requires a voltage tier over " + GTUtility.getColoredTierNameFromTier((byte) tier()) + + EnumChatFormatting.GRAY + + " , you can't do it either") + .addInfo("Make sure the whole structure is built in the 3x3") + .addInfo("chunk area of the ring center (not controller).") + .addInfo("Startup < 160,000,000 EU: 128x Parallel") + .addInfo("Startup >= 160,000,000 EU: 64x Parallel") + .addInfo( + "Support" + EnumChatFormatting.BLUE + + " Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Energy/Laser Hatches!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addCasingInfo("Fusion Machine Casing", 1664) + .addCasingInfo("Compact Fusion Coil", 560) + .addCasingInfo("Duranium Frame Box", 128) + .addCasingInfo("Iridium Reinforced Borosilicate Glass Block", 63) + .addEnergyHatch("1-32, Hint block with dot 2", 2) + .addInputHatch("1-16, Hint block with dot 1", 1) + .addOutputHatch("1-16, Hint block with dot 1", 1) + .addStructureInfo("Supports Crafting Input Buffer") + .addStructureInfo( + "ALL Hatches must be " + GTUtility.getColoredTierNameFromTier((byte) hatchTier()) + + EnumChatFormatting.GRAY + + " or better") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int tier() { + return 7; + } + + @Override + public long capableStartupCanonical() { + return 320_000_000; + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public int getCasingMeta() { + return 6; + } + + @Override + public Block getCoilBlock() { + return Loaders.compactFusionCoil; + } + + @Override + public int getCoilMeta() { + return 1; + } + + @Override + public Block getGlassBlock() { + return ItemRegistry.bw_realglas; + } + + @Override + public int getGlassMeta() { + return 4; + } + + @Override + public int hatchTier() { + return 7; + } + + @Override + public Materials getFrameBox() { + return Materials.Duranium; + } + + @Override + public int getMaxPara() { + return 64; + } + + @Override + public int extraPara(int startEnergy) { + return startEnergy < 160000000 ? 2 : 1; + } + + @Override + public ITexture getTextureOverlay() { + return textureOverlay; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("LargeFusion2.hint", 9); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeFusionComputer2(mName); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer3.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer3.java new file mode 100644 index 0000000000..94d98c3484 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer3.java @@ -0,0 +1,171 @@ +package goodgenerator.blocks.tileEntity; + +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3_GLOW; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import bartworks.common.loaders.ItemRegistry; +import goodgenerator.blocks.tileEntity.base.MTELargeFusionComputer; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTELargeFusionComputer3 extends MTELargeFusionComputer { + + private static final ITexture textureOverlay = TextureFactory.of( + TextureFactory.builder() + .addIcon(OVERLAY_FUSION3) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION3_GLOW) + .extFacing() + .glow() + .build()); + + public MTELargeFusionComputer3(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public MTELargeFusionComputer3(String name) { + super(name); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fusion Reactor") + .addInfo("Millions of nuclear.") + .addInfo("Controller block for the Compact Fusion Reactor MK-III.") + .addInfo( + EnumChatFormatting.AQUA + GTUtility.formatNumbers(getSingleHatchPower()) + + EnumChatFormatting.GRAY + + " EU/t and " + + EnumChatFormatting.AQUA + + GTUtility.formatNumbers(capableStartupCanonical() / 32 / M) + + "M" + + EnumChatFormatting.GRAY + + " EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo( + "If the recipe requires a voltage tier over " + GTUtility.getColoredTierNameFromTier((byte) tier()) + + EnumChatFormatting.GRAY + + " , you can't do it either") + .addInfo("Make sure the whole structure is built in the 3x3") + .addInfo("chunk area of the ring center (not controller).") + .addInfo("Startup < 160,000,000 EU: 192x Parallel") + .addInfo("Startup < 320,000,000 EU: 128x Parallel") + .addInfo("Startup >= 320,000,000 EU: 64x Parallel") + .addInfo( + "Support" + EnumChatFormatting.BLUE + + " Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Energy/Laser Hatches!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addCasingInfo("Fusion Machine Casing MK II", 1664) + .addCasingInfo("Advanced Compact Fusion Coil", 560) + .addCasingInfo("Neutronium Frame Box", 128) + .addCasingInfo("Osmium Reinforced Borosilicate Glass Block", 63) + .addEnergyHatch("1-32, Hint block with dot 2", 2) + .addInputHatch("1-16, Hint block with dot 1", 1) + .addOutputHatch("1-16, Hint block with dot 1", 1) + .addStructureInfo("Supports Crafting Input Buffer") + .addStructureInfo( + "ALL Hatches must be " + GTUtility.getColoredTierNameFromTier((byte) hatchTier()) + + EnumChatFormatting.GRAY + + " or better") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int tier() { + return 8; + } + + @Override + public long capableStartupCanonical() { + return 640_000_000; + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public int getCasingMeta() { + return 8; + } + + @Override + public Block getCoilBlock() { + return Loaders.compactFusionCoil; + } + + @Override + public int getCoilMeta() { + return 2; + } + + @Override + public Block getGlassBlock() { + return ItemRegistry.bw_realglas; + } + + @Override + public int getGlassMeta() { + return 5; + } + + @Override + public int hatchTier() { + return 8; + } + + @Override + public Materials getFrameBox() { + return Materials.Neutronium; + } + + @Override + public int getMaxPara() { + return 64; + } + + @Override + public int extraPara(int startEnergy) { + return (startEnergy < 160000000 ? 3 : (startEnergy < 320000000 ? 2 : 1)); + } + + @Override + public ITexture getTextureOverlay() { + return textureOverlay; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("LargeFusion3.hint", 9); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeFusionComputer3(mName); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer4.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer4.java new file mode 100644 index 0000000000..c10747cad0 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer4.java @@ -0,0 +1,226 @@ +package goodgenerator.blocks.tileEntity; + +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import bartworks.common.loaders.ItemRegistry; +import goodgenerator.blocks.tileEntity.base.MTELargeFusionComputerPP; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TAE; +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.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.IDualInputHatch; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; + +public class MTELargeFusionComputer4 extends MTELargeFusionComputerPP { + + public MTELargeFusionComputer4(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public MTELargeFusionComputer4(String name) { + super(name); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fusion Reactor") + .addInfo("Galaxy Collapse.") + .addInfo("Controller block for the Compact Fusion Reactor MK-IV Prototype.") + .addInfo( + EnumChatFormatting.AQUA + GTUtility.formatNumbers(getSingleHatchPower()) + + EnumChatFormatting.GRAY + + " EU/t and " + + EnumChatFormatting.AQUA + + GTUtility.formatNumbers(capableStartupCanonical() / 32 / M) + + "M" + + EnumChatFormatting.GRAY + + " EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo( + "If the recipe requires a voltage tier over " + GTUtility.getColoredTierNameFromTier((byte) tier()) + + EnumChatFormatting.GRAY + + " , you can't do it either") + .addInfo("Make sure the whole structure is built in the 3x3") + .addInfo("chunk area of the ring center (not controller).") + .addInfo("Performs 4/4 overclock.") + .addInfo("Startup < 160,000,000 EU: 256x Parallel") + .addInfo("Startup < 320,000,000 EU: 192x Parallel") + .addInfo("Startup < 640,000,000 EU: 128x Parallel") + .addInfo("Startup >= 640,000,000 EU: 64x Parallel") + .addInfo( + "Support" + EnumChatFormatting.BLUE + + " Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Energy/Laser Hatches!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addCasingInfo("Fusion Machine Casing MK III", 1664) + .addCasingInfo("Compact Fusion Coil MK-II Prototype", 560) + .addCasingInfo("Infinity Catalyst Frame Box", 128) + .addCasingInfo("Neutronium Reinforced Borosilicate Glass Block", 63) + .addEnergyHatch("1-32, Hint block with dot 2", 2) + .addInputHatch("1-16, Hint block with dot 1", 1) + .addOutputHatch("1-16, Hint block with dot 1", 1) + .addStructureInfo("Supports Crafting Input Buffer") + .addStructureInfo( + "ALL Hatches must be " + GTUtility.getColoredTierNameFromTier((byte) hatchTier()) + + EnumChatFormatting.GRAY + + " or better") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int tier() { + return 9; + } + + @Override + public long capableStartupCanonical() { + return 5_120_000_000L; + } + + @Override + public Block getCasingBlock() { + return ModBlocks.blockCasings3Misc; + } + + @Override + public int getCasingMeta() { + return 12; + } + + @Override + public Block getCoilBlock() { + return Loaders.compactFusionCoil; + } + + @Override + public int getCoilMeta() { + return 3; + } + + @Override + public Block getGlassBlock() { + return ItemRegistry.bw_realglas; + } + + @Override + public int getGlassMeta() { + return 13; + } + + @Override + public int hatchTier() { + return 9; + } + + @Override + public Materials getFrameBox() { + return Materials.InfinityCatalyst; + } + + @Override + public ITexture getTextureOverlay() { + if (this.mMaxProgresstime > 0) return TextureFactory.of( + TextureFactory.builder() + .addIcon(TexturesGtBlock.Casing_Machine_Screen_3) + .extFacing() + .build()); + else return TextureFactory.of( + TextureFactory.builder() + .addIcon(TexturesGtBlock.Casing_Machine_Screen_1) + .extFacing() + .build()); + } + + @Override + public int getMaxPara() { + return 64; + } + + @Override + public int extraPara(int startEnergy) { + if (startEnergy < 160000000) return 4; + if (startEnergy < 320000000) return 3; + if (startEnergy < 640000000) return 2; + return 1; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("LargeFusion4.hint", 9); + } + + @Override + public boolean turnCasingActive(boolean status) { + if (this.mEnergyHatches != null) { + for (MTEHatchEnergy hatch : this.mEnergyHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); + } + } + if (this.eEnergyMulti != null) { + for (MTEHatchEnergyMulti hatch : this.eEnergyMulti) { + hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); + } + } + if (this.mOutputHatches != null) { + for (MTEHatchOutput hatch : this.mOutputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); + } + } + if (this.mInputHatches != null) { + for (MTEHatchInput hatch : this.mInputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); + } + } + if (this.mDualInputHatches != null) { + for (IDualInputHatch hatch : this.mDualInputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(2, 14) : 53); + } + } + return true; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS) + .extFacing() + .build(), getTextureOverlay() }; + if (!aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; + return new ITexture[] { TextureFactory.builder() + .addIcon(TexturesGtBlock.TEXTURE_CASING_FUSION_CASING_ULTRA) + .extFacing() + .build() }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeFusionComputer4(mName); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer5.java b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer5.java new file mode 100644 index 0000000000..8ed9e27f13 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTELargeFusionComputer5.java @@ -0,0 +1,230 @@ +package goodgenerator.blocks.tileEntity; + +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import bartworks.common.loaders.ItemRegistry; +import goodgenerator.blocks.tileEntity.base.MTELargeFusionComputerPP; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TAE; +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.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.IDualInputHatch; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; + +public class MTELargeFusionComputer5 extends MTELargeFusionComputerPP { + + public MTELargeFusionComputer5(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public MTELargeFusionComputer5(String name) { + super(name); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fusion Reactor") + .addInfo("Galaxy Collapse.") + .addInfo("Controller block for the Compact Fusion Reactor MK-V.") + .addInfo( + EnumChatFormatting.AQUA + GTUtility.formatNumbers(getSingleHatchPower()) + + EnumChatFormatting.GRAY + + " EU/t and " + + EnumChatFormatting.AQUA + + GTUtility.formatNumbers(capableStartupCanonical() / 32 / M) + + "M" + + EnumChatFormatting.GRAY + + " EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo( + "If the recipe requires a voltage tier over " + GTUtility.getColoredTierNameFromTier((byte) tier()) + + EnumChatFormatting.GRAY + + " , you can't do it either") + .addInfo("Make sure the whole structure is built in the 3x3") + .addInfo("chunk area of the ring center (not controller).") + .addInfo("Performs 4/4 overclock.") + .addInfo("Startup < 160,000,000 EU: 320x Parallel") + .addInfo("Startup < 320,000,000 EU: 256x Parallel") + .addInfo("Startup < 640,000,000 EU: 192x Parallel") + .addInfo("Startup < 1,200,000,000 EU: 128x Parallel") + .addInfo("Startup >= 1,200,000,000 EU: 64x Parallel") + .addInfo( + "Support" + EnumChatFormatting.BLUE + + " Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Energy/Laser Hatches!") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addCasingInfo("Fusion Machine Casing MK IV", 1664) + .addCasingInfo("Compact Fusion Coil MK-II Finaltype", 560) + .addCasingInfo("Infinity Frame Box", 128) + .addCasingInfo("Cosmic Neutronium Reinforced Borosilicate Glass Block", 63) + .addEnergyHatch("1-32, Hint block with dot 2", 2) + .addInputHatch("1-16, Hint block with dot 1", 1) + .addOutputHatch("1-16, Hint block with dot 1", 1) + .addStructureInfo("Supports Crafting Input Buffer") + .addStructureInfo( + "ALL Hatches must be " + GTUtility.getColoredTierNameFromTier((byte) hatchTier()) + + EnumChatFormatting.GRAY + + " or better") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int tier() { + return 10; + } + + @Override + public long capableStartupCanonical() { + return 20_480_000_000L; + } + + @Override + public Block getCasingBlock() { + return ModBlocks.blockCasings6Misc; + } + + @Override + public int getCasingMeta() { + return 0; + } + + @Override + public Block getCoilBlock() { + return Loaders.compactFusionCoil; + } + + @Override + public int getCoilMeta() { + return 4; + } + + @Override + public Block getGlassBlock() { + return ItemRegistry.bw_realglas; + } + + @Override + public int getGlassMeta() { + return 14; + } + + @Override + public int hatchTier() { + return 10; + } + + @Override + public Materials getFrameBox() { + return Materials.Infinity; + } + + @Override + public ITexture getTextureOverlay() { + if (this.getBaseMetaTileEntity() + .isActive()) + return TextureFactory.of( + TextureFactory.builder() + .addIcon(TexturesGtBlock.Casing_Machine_Screen_Rainbow) + .extFacing() + .build()); + else return TextureFactory.of( + TextureFactory.builder() + .addIcon(TexturesGtBlock.Casing_Machine_Screen_1) + .extFacing() + .build()); + } + + @Override + public int getMaxPara() { + return 64; + } + + @Override + public int extraPara(int startEnergy) { + if (startEnergy < 160000000) return 5; + if (startEnergy < 320000000) return 4; + if (startEnergy < 640000000) return 3; + if (startEnergy < 1200000000) return 2; + return 1; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("LargeFusion5.hint", 9); + } + + @Override + public boolean turnCasingActive(boolean status) { + if (this.mEnergyHatches != null) { + for (MTEHatchEnergy hatch : this.mEnergyHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); + } + } + if (this.eEnergyMulti != null) { + for (MTEHatchEnergyMulti hatch : this.eEnergyMulti) { + hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); + } + } + if (this.mOutputHatches != null) { + for (MTEHatchOutput hatch : this.mOutputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); + } + } + if (this.mInputHatches != null) { + for (MTEHatchInput hatch : this.mInputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); + } + } + if (this.mDualInputHatches != null) { + for (IDualInputHatch hatch : this.mDualInputHatches) { + hatch.updateTexture(status ? TAE.getIndexFromPage(3, 6) : 53); + } + } + return true; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS) + .extFacing() + .build(), getTextureOverlay() }; + if (!aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; + return new ITexture[] { TextureFactory.builder() + .addIcon(TexturesGtBlock.TEXTURE_CASING_FUSION_CASING_HYPER) + .extFacing() + .build() }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeFusionComputer5(mName); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEMultiNqGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEMultiNqGenerator.java new file mode 100644 index 0000000000..aac9386ecc --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEMultiNqGenerator.java @@ -0,0 +1,466 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.main.GGConfigLoader.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.util.Pair; +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.blocks.tileEntity.base.MTETooltipMultiBlockBaseEM; +import goodgenerator.items.GGMaterial; +import goodgenerator.loader.Loaders; +import goodgenerator.util.CrackRecipeAdder; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +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.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoMulti; + +public class MTEMultiNqGenerator extends MTETooltipMultiBlockBaseEM implements IConstructable, ISurvivalConstructable { + + protected IStructureDefinition multiDefinition = null; + protected long leftEnergy = 0; + protected long trueOutput = 0; + protected int trueEff = 0; + protected FluidStack lockedFluid = null; + protected int times = 1; + protected int basicOutput; + + private static final List> excitedLiquid; + + private static final List> coolant; + + static { + excitedLiquid = Arrays.asList( + new Pair<>(MaterialsUEVplus.Space.getMolten(20L), ExcitedLiquidCoe[0]), + new Pair<>(GGMaterial.atomicSeparationCatalyst.getMolten(20), ExcitedLiquidCoe[1]), + new Pair<>(Materials.Naquadah.getMolten(20L), ExcitedLiquidCoe[2]), + new Pair<>(Materials.Uranium235.getMolten(180L), ExcitedLiquidCoe[3]), + new Pair<>(Materials.Caesium.getMolten(180L), ExcitedLiquidCoe[4])); + coolant = Arrays.asList( + new Pair<>(MaterialsUEVplus.Time.getMolten(20L), CoolantEfficiency[0]), + new Pair<>(FluidRegistry.getFluidStack("cryotheum", 1000), CoolantEfficiency[1]), + new Pair<>(Materials.SuperCoolant.getFluid(1000L), CoolantEfficiency[2]), + new Pair<>(FluidRegistry.getFluidStack("ic2coolant", 1000), CoolantEfficiency[3])); + } + + @Override + public void construct(ItemStack itemStack, boolean hintsOnly) { + structureBuild_EM(mName, 3, 7, 0, itemStack, hintsOnly); + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("MultiNqGenerator.hint", 8); + } + + public final boolean addToGeneratorList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } else { + if (aMetaTileEntity instanceof MTEHatch) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + } + if (aMetaTileEntity instanceof MTEHatchInput) { + return this.mInputHatches.add((MTEHatchInput) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchOutput) { + return this.mOutputHatches.add((MTEHatchOutput) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchDynamo) { + return this.mDynamoHatches.add((MTEHatchDynamo) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchMaintenance) { + return this.mMaintenanceHatches.add((MTEHatchMaintenance) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchDynamoMulti) { + return this.eDynamoMulti.add((MTEHatchDynamoMulti) aMetaTileEntity); + } else { + return false; + } + } + } + } + + @Override + public IStructureDefinition getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { + { "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA" }, + { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, + { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, + { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, + { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, + { "AAAAAAA", "A A", "A CCC A", "A CPC A", "A CCC A", "A A", "AAAAAAA" }, + { "ANNNNNA", "N N", "N CCC N", "N CPC N", "N CCC N", "N N", "ANNNNNA" }, + { "XXX~XXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX" }, })) + .addElement( + 'X', + ofChain( + buildHatchAdder(MTEMultiNqGenerator.class) + .atLeast( + tectech.thing.metaTileEntity.multi.base.TTMultiblockBase.HatchElement.DynamoMulti + .or(gregtech.api.enums.HatchElement.Dynamo), + gregtech.api.enums.HatchElement.InputHatch, + gregtech.api.enums.HatchElement.OutputHatch, + gregtech.api.enums.HatchElement.Maintenance) + .casingIndex(44) + .dot(1) + .build(), + ofBlock(GregTechAPI.sBlockCasings3, 12))) + .addElement('A', ofBlock(GregTechAPI.sBlockCasings3, 12)) + .addElement('N', ofBlock(Loaders.radiationProtectionSteelFrame, 0)) + .addElement('C', ofBlock(Loaders.MAR_Casing, 0)) + .addElement('P', ofBlock(GregTechAPI.sBlockCasings2, 15)) + .build(); + } + return multiDefinition; + } + + public MTEMultiNqGenerator(String name) { + super(name); + } + + public MTEMultiNqGenerator(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.times = aNBT.getInteger("mTimes"); + this.leftEnergy = aNBT.getLong("mLeftEnergy"); + this.basicOutput = aNBT.getInteger("mbasicOutput"); + if (FluidRegistry.getFluid(aNBT.getString("mLockedFluidName")) != null) this.lockedFluid = new FluidStack( + FluidRegistry.getFluid(aNBT.getString("mLockedFluidName")), + aNBT.getInteger("mLockedFluidAmount")); + else this.lockedFluid = null; + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mTimes", this.times); + aNBT.setLong("mLeftEnergy", this.leftEnergy); + aNBT.setInteger("mbasicOutput", this.basicOutput); + if (lockedFluid != null) { + aNBT.setString( + "mLockedFluidName", + this.lockedFluid.getFluid() + .getName()); + aNBT.setInteger("mLockedFluidAmount", this.lockedFluid.amount); + } + super.saveNBTData(aNBT); + } + + @Override + public RecipeMap getRecipeMap() { + return GoodGeneratorRecipeMaps.naquadahReactorFuels; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + + ArrayList tFluids = getStoredFluids(); + for (int i = 0; i < tFluids.size() - 1; i++) { + for (int j = i + 1; j < tFluids.size(); j++) { + if (GTUtility.areFluidsEqual(tFluids.get(i), tFluids.get(j))) { + if ((tFluids.get(i)).amount >= (tFluids.get(j)).amount) { + tFluids.remove(j--); + } else { + tFluids.remove(i--); + break; + } + } + } + } + + GTRecipe tRecipe = GoodGeneratorRecipeMaps.naquadahReactorFuels + .findRecipe(this.getBaseMetaTileEntity(), true, 1 << 30, tFluids.toArray(new FluidStack[0])); + if (tRecipe != null) { + Pair excitedInfo = getExcited(tFluids.toArray(new FluidStack[0]), false); + int pall = excitedInfo == null ? 1 : excitedInfo.getValue(); + if (consumeFuel( + CrackRecipeAdder.copyFluidWithAmount(tRecipe.mFluidInputs[0], pall), + tFluids.toArray(new FluidStack[0]))) { + mOutputFluids = new FluidStack[] { + CrackRecipeAdder.copyFluidWithAmount(tRecipe.mFluidOutputs[0], pall) }; + basicOutput = tRecipe.mSpecialValue; + times = pall; + lockedFluid = excitedInfo == null ? null : excitedInfo.getKey(); + mMaxProgresstime = tRecipe.mDuration; + return CheckRecipeResultRegistry.GENERATING; + } + } + + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + @Override + public boolean onRunningTick(ItemStack stack) { + if (this.getBaseMetaTileEntity() + .isServerSide()) { + if (mMaxProgresstime != 0 && mProgresstime % 20 == 0) { + // If there's no startRecipeProcessing, ME input hatch wouldn't work + startRecipeProcessing(); + FluidStack[] input = getStoredFluids().toArray(new FluidStack[0]); + int time = 1; + if (LiquidAirConsumptionPerSecond != 0 + && !consumeFuel(Materials.LiquidAir.getFluid(LiquidAirConsumptionPerSecond), input)) { + this.mEUt = 0; + this.trueEff = 0; + this.trueOutput = 0; + endRecipeProcessing(); + return true; + } + int eff = consumeCoolant(input); + if (consumeFuel(lockedFluid, input)) time = times; + this.mEUt = basicOutput * eff * time / 100; + this.trueEff = eff; + this.trueOutput = (long) basicOutput * (long) eff * (long) time / 100; + endRecipeProcessing(); + } + addAutoEnergy(trueOutput); + } + return true; + } + + @Override + public String[] getInfoData() { + String[] info = super.getInfoData(); + info[4] = "Probably makes: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(Math.abs(this.trueOutput)) + + EnumChatFormatting.RESET + + " EU/t"; + info[6] = "Problems: " + EnumChatFormatting.RED + + (this.getIdealStatus() - this.getRepairStatus()) + + EnumChatFormatting.RESET + + " Efficiency: " + + EnumChatFormatting.YELLOW + + trueEff + + EnumChatFormatting.RESET + + " %"; + return info; + } + + public boolean consumeFuel(FluidStack target, FluidStack[] input) { + if (target == null) return false; + for (FluidStack inFluid : input) { + if (inFluid != null && inFluid.isFluidEqual(target) && inFluid.amount >= target.amount) { + inFluid.amount -= target.amount; + return true; + } + } + return false; + } + + public Pair getExcited(FluidStack[] input, boolean isConsume) { + for (Pair fluidPair : excitedLiquid) { + FluidStack tFluid = fluidPair.getKey(); + for (FluidStack inFluid : input) { + if (inFluid != null && inFluid.isFluidEqual(tFluid) && inFluid.amount >= tFluid.amount) { + if (isConsume) inFluid.amount -= tFluid.amount; + return fluidPair; + } + } + } + return null; + } + + /** + * Finds valid coolant from given inputs and consumes if found. + * + * @param input Fluid inputs. + * @return Efficiency of the coolant. 100 if not found. + */ + private int consumeCoolant(FluidStack[] input) { + for (Pair fluidPair : coolant) { + FluidStack tFluid = fluidPair.getKey(); + for (FluidStack inFluid : input) { + if (inFluid != null && inFluid.isFluidEqual(tFluid) && inFluid.amount >= tFluid.amount) { + inFluid.amount -= tFluid.amount; + return fluidPair.getValue(); + } + } + } + return 100; + } + + public void addAutoEnergy(long outputPower) { + if (this.eDynamoMulti.size() > 0) for (MTEHatch tHatch : this.eDynamoMulti) { + long voltage = tHatch.maxEUOutput(); + long power = voltage * tHatch.maxAmperesOut(); + long outputAmperes; + if (outputPower > power) doExplosion(8 * GTUtility.getTier(power)); + if (outputPower >= voltage) { + leftEnergy += outputPower; + outputAmperes = leftEnergy / voltage; + leftEnergy -= outputAmperes * voltage; + addEnergyOutput_EM(voltage, outputAmperes); + } else { + addEnergyOutput_EM(outputPower, 1); + } + } + if (this.mDynamoHatches.size() > 0) for (MTEHatch tHatch : this.mDynamoHatches) { + long voltage = tHatch.maxEUOutput(); + long power = voltage * tHatch.maxAmperesOut(); + long outputAmperes; + if (outputPower > power) doExplosion(8 * GTUtility.getTier(power)); + if (outputPower >= voltage) { + leftEnergy += outputPower; + outputAmperes = leftEnergy / voltage; + leftEnergy -= outputAmperes * voltage; + addEnergyOutput_EM(voltage, outputAmperes); + } else { + addEnergyOutput_EM(outputPower, 1); + } + } + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return structureCheck_EM(mName, 3, 7, 0) && mMaintenanceHatches.size() == 1 + && mDynamoHatches.size() + eDynamoMulti.size() == 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 0; + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMultiNqGenerator(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Naquadah Reactor") + .addInfo("Controller block for the Naquadah Reactor") + .addInfo("Environmentally Friendly!") + .addInfo("Generate power from high-energy liquids.") + .addInfo( + String.format( + "Consumes %d L/s Liquid Air to keep running, otherwise" + EnumChatFormatting.YELLOW + + " it will void your fuel" + + EnumChatFormatting.GRAY + + ".", + LiquidAirConsumptionPerSecond)) + .addInfo("Input liquid nuclear fuel or liquid naquadah fuel.") + .addInfo( + "The reactor will explode when there is more than" + EnumChatFormatting.RED + + " ONE" + + EnumChatFormatting.GRAY + + " type of fuel in hatches!") + .addInfo("Can consume coolants to increase efficiency:") + .addInfo(String.format("IC2 Coolant | %d%% | 1000 L/s ", CoolantEfficiency[3])) + .addInfo(String.format("Super Coolant | %d%% | 1000 L/s", CoolantEfficiency[2])) + .addInfo(String.format("Cryotheum | %d%% | 1000 L/s", CoolantEfficiency[1])) + .addInfo(String.format("Tachyon Rich Temporal Fluid | %d%% | 20 L/s", CoolantEfficiency[0])) + .addInfo("Can consume excited liquid to increase the output power and fuel usage:") + .addInfo(String.format("Molten Caesium | %dx power | 180 L/s ", ExcitedLiquidCoe[4])) + .addInfo(String.format("Molten Uranium-235 | %dx power | 180 L/s", ExcitedLiquidCoe[3])) + .addInfo(String.format("Molten Naquadah | %dx power | 20 L/s", ExcitedLiquidCoe[2])) + .addInfo(String.format("Molten Atomic Separation Catalyst | %dx power | 20 L/s", ExcitedLiquidCoe[1])) + .addInfo(String.format("Spatially Enlarged Fluid | %dx power | 20 L/s", ExcitedLiquidCoe[0])) + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginStructureBlock(7, 8, 7, true) + .addController("Front bottom") + .addDynamoHatch("Any bottom layer casing, only accept ONE!") + .addInputHatch("Any bottom layer casing") + .addOutputHatch("Any bottom layer casing") + .addMaintenanceHatch("Any bottom layer casing") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + @SuppressWarnings("ALL") + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(44), + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE), TextureFactory.builder() + .addIcon(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE_GLOW) + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(44), + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT) }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(44) }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 3, 7, 0, elementBudget, env, false, true); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java b/src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java new file mode 100644 index 0000000000..97efc45ba7 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTENeutronActivator.java @@ -0,0 +1,516 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.MTENeutronAccelerator; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.MTENeutronSensor; +import goodgenerator.blocks.tileEntity.base.MTETooltipMultiBlockBaseEM; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import goodgenerator.util.ItemRefer; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.objects.XSTR; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; + +public class MTENeutronActivator extends MTETooltipMultiBlockBaseEM implements IConstructable, ISurvivalConstructable { + + protected static IStructureDefinition multiDefinition = null; + protected final ArrayList mNeutronAccelerator = new ArrayList<>(); + protected final ArrayList mNeutronSensor = new ArrayList<>(); + protected int casingAmount = 0; + protected int height = 0; + protected int eV = 0, mCeil = 0, mFloor = 0; + private GTRecipe lastRecipe; + protected static final NumberFormatMUI numberFormat; + static { + numberFormat = new NumberFormatMUI(); + numberFormat.setMinimumFractionDigits(2); + numberFormat.setMaximumFractionDigits(2); + } + final XSTR R = new XSTR(); + + private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon("icons/NeutronActivator_On"); + private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( + "icons/NeutronActivator_On_GLOW"); + private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon( + "icons/NeutronActivator_Off"); + private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( + "icons/NeutronActivator_Off_GLOW"); + + protected final String NA_BOTTOM = mName + "buttom"; + protected final String NA_MID = mName + "mid"; + protected final String NA_TOP = mName + "top"; + + public MTENeutronActivator(String name) { + super(name); + } + + public MTENeutronActivator(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return OverclockCalculator.ofNoOverclock(recipe) + .setDuration((int) Math.ceil(recipe.mDuration * Math.pow(0.9f, height - 4))) + .setDurationUnderOneTickSupplier(() -> recipe.mDuration * Math.pow(0.9f, height - 4)); + } + + @NotNull + @Override + public CheckRecipeResult process() { + CheckRecipeResult result = super.process(); + if (!result.wasSuccessful()) { + return result; + } + mFloor = (lastRecipe.mSpecialValue % 10000) * 1000000; + mCeil = (lastRecipe.mSpecialValue / 10000) * 1000000; + if (eV > mCeil || eV < mFloor) { + setOutputItems(ItemRefer.Radioactive_Waste.get(4)); + } + // NA does not consume power, its hatches do. Set it to 0 to be sure + calculatedEut = 0; + return result; + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + // NA does not use power, to prevent GT_ParallelHelper from failing we trick it into thinking + // we have infinite power + logic.setAvailableVoltage(Long.MAX_VALUE); + logic.setAvailableAmperage(1); + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + batchMode = !batchMode; + if (batchMode) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return 0; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + eV = aNBT.getInteger("mKeV"); + mCeil = aNBT.getInteger("mCeil"); + mFloor = aNBT.getInteger("mFloor"); + height = aNBT.getInteger("height"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mKeV", eV); + aNBT.setInteger("mCeil", mCeil); + aNBT.setInteger("mFloor", mFloor); + aNBT.setInteger("height", height); + super.saveNBTData(aNBT); + } + + @Override + public RecipeMap getRecipeMap() { + return GoodGeneratorRecipeMaps.neutronActivatorRecipes; + } + + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Neutron Activator") + .addInfo("Controller block for the Neutron Activator") + .addInfo("Superluminal-velocity Motion.") + .addInfo("The minimum height of the Speeding Pipe Casing is 4.") + .addInfo("Per extra Speeding Pipe Casing will give time discount.") + .addInfo("But it will reduce the Neutron Accelerator efficiency.") + .addInfo("You need to input energy to the Neutron Accelerator to get it running.") + .addInfo("It will output correct products with Specific Neutron Kinetic Energy.") + .addInfo("Otherwise it will output trash.") + .addInfo("The Neutron Kinetic Energy will decrease 72KeV/s when no Neutron Accelerator is running.") + .addInfo( + "It will explode when the Neutron Kinetic Energy is over" + EnumChatFormatting.RED + + " 1200MeV" + + EnumChatFormatting.GRAY + + ".") + .addInfo("Inputting Graphite/Beryllium dust can reduce 10MeV per dust immediately.") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .addController("Front bottom") + .addInputHatch("Hint block with dot 1") + .addInputBus("Hint block with dot 1") + .addOutputHatch("Hint block with dot 2") + .addOutputBus("Hint block with dot 2") + .addMaintenanceHatch("Hint block with dot 2") + .addOtherStructurePart("Neutron Accelerator", "Hint block with dot 2") + .addOtherStructurePart("Neutron Sensor", "Hint block with dot 2") + .addCasingInfoRange("Clean Stainless Steel Machine Casing", 7, 31, false) + .addCasingInfoExactly("Processor Machine Casing", 18, false) + .addCasingInfoMin("Steel Frame Box", 16, false) + .addCasingInfoMin("Speeding Pipe Casing", 4, false) + .addCasingInfoMin("EV+ Glass", 32, false) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public IStructureDefinition getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.builder() + .addShape(NA_TOP, transpose(new String[][] { { "CCCCC", "CDDDC", "CDDDC", "CDDDC", "CCCCC" } })) + .addShape(NA_MID, transpose(new String[][] { { "F F", " GGG ", " GPG ", " GGG ", "F F" } })) + .addShape(NA_BOTTOM, transpose(new String[][] { { "XX~XX", "XDDDX", "XDDDX", "XDDDX", "XXXXX" } })) + .addElement( + 'C', + ofChain( + buildHatchAdder(MTENeutronActivator.class) + .atLeast( + gregtech.api.enums.HatchElement.InputHatch, + gregtech.api.enums.HatchElement.InputBus, + gregtech.api.enums.HatchElement.Maintenance) + .casingIndex(49) + .dot(1) + .build(), + onElementPass(MTENeutronActivator::onCasingFound, ofBlock(GregTechAPI.sBlockCasings4, 1)))) + .addElement('D', ofBlock(GregTechAPI.sBlockCasings2, 6)) + .addElement('F', ofFrame(Materials.Steel)) + .addElement('G', Glasses.chainAllGlasses()) + .addElement('P', ofBlock(Loaders.speedingPipe, 0)) + .addElement( + 'X', + ofChain( + buildHatchAdder(MTENeutronActivator.class) + .atLeast( + gregtech.api.enums.HatchElement.OutputHatch, + gregtech.api.enums.HatchElement.OutputBus, + gregtech.api.enums.HatchElement.Maintenance, + NeutronHatchElement.NeutronAccelerator, + NeutronHatchElement.NeutronSensor) + .casingIndex(49) + .dot(2) + .build(), + onElementPass(MTENeutronActivator::onCasingFound, ofBlock(GregTechAPI.sBlockCasings4, 1)))) + .build(); + } + return multiDefinition; + } + + @Override + protected void clearHatches_EM() { + super.clearHatches_EM(); + this.mNeutronAccelerator.clear(); + this.mNeutronSensor.clear(); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.casingAmount = 0; + if (!structureCheck_EM(NA_BOTTOM, 2, 0, 0)) return false; + height = 0; + while (structureCheck_EM(NA_MID, 2, height + 1, 0)) { + height++; + } + if (height < 4) return false; + return structureCheck_EM(NA_TOP, 2, height + 1, 0) && casingAmount >= 7; + } + + public final boolean addAcceleratorAndSensor(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTENeutronAccelerator) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mNeutronAccelerator.add((MTENeutronAccelerator) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTENeutronSensor) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mNeutronSensor.add((MTENeutronSensor) aMetaTileEntity); + } + } + return false; + } + + public int maxNeutronKineticEnergy() { + return 1200000000; + } + + public int getCurrentNeutronKineticEnergy() { + return eV; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean protectsExcessItem() { + return !eSafeVoid; + } + + @Override + public boolean protectsExcessFluid() { + return !eSafeVoid; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTENeutronActivator(this.mName); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + boolean anyWorking = false; + if (aBaseMetaTileEntity.isServerSide()) { + if (this.eV > 0 && (aTick % 20 == 0 || eV > mCeil)) { + tryUseModerator(); + } + + for (MTENeutronAccelerator tHatch : mNeutronAccelerator) { + if (tHatch.getBaseMetaTileEntity() + .isActive() && this.getRepairStatus() == this.getIdealStatus()) { + anyWorking = true; + this.eV += Math.max( + (R.nextInt(tHatch.getMaxEUConsume() + 1) + tHatch.getMaxEUConsume()) * 10 + * Math.pow(0.95, height - 4), + 10); + } + } + if (!anyWorking) { + if (this.eV >= 72000 && aTick % 20 == 0) { + this.eV -= 72000; + } else if (this.eV > 0 && aTick % 20 == 0) { + this.eV = 0; + } + } + if (this.eV < 0) this.eV = 0; + if (this.eV > maxNeutronKineticEnergy()) doExplosion(4 * 32); + + for (MTENeutronSensor tHatch : mNeutronSensor) { + tHatch.updateRedstoneOutput(this.eV); + } + + if (mProgresstime < mMaxProgresstime && (eV > mCeil || eV < mFloor)) { + this.mOutputFluids = null; + this.mOutputItems = new ItemStack[] { ItemRefer.Radioactive_Waste.get(4) }; + } + } + } + + private void tryUseModerator() { + startRecipeProcessing(); + for (ItemStack input : getStoredInputs()) { + if (input.isItemEqual(Materials.Graphite.getDust(1)) || input.isItemEqual(Materials.Beryllium.getDust(1))) { + int consume = Math.min(this.eV / 10000000, input.stackSize); + depleteInput(GTUtility.copyAmount(consume, input)); + this.eV -= 10000000 * consume; + } + } + endRecipeProcessing(); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(NA_BOTTOM, 2, 0, 0, stackSize, hintsOnly); + int heights = stackSize.stackSize + 3; + structureBuild_EM(NA_TOP, 2, heights + 1, 0, stackSize, hintsOnly); + while (heights > 0) { + structureBuild_EM(NA_MID, 2, heights, 0, stackSize, hintsOnly); + heights--; + } + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("NeutronActivator.hint", 7); + } + + @Override + public String[] getInfoData() { + int currentNKEInput = 0; + boolean anyWorking = false; + for (MTENeutronAccelerator tHatch : mNeutronAccelerator) { + if (tHatch.getBaseMetaTileEntity() + .isActive()) { + currentNKEInput += (R.nextInt(tHatch.getMaxEUConsume() + 1) + tHatch.getMaxEUConsume()) * 10 + * Math.pow(0.95, height - 4); + anyWorking = true; + } + } + if (!anyWorking) currentNKEInput = -72000; + return new String[] { "Progress:", + EnumChatFormatting.GREEN + Integer.toString(this.mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + this.mMaxProgresstime / 20 + + EnumChatFormatting.RESET + + " s", + "Current Neutron Kinetic Energy Input: " + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(currentNKEInput) + + EnumChatFormatting.RESET + + "eV", + StatCollector.translateToLocal("scanner.info.NA") + " " + + EnumChatFormatting.LIGHT_PURPLE + + GTUtility.formatNumbers(getCurrentNeutronKineticEnergy()) + + EnumChatFormatting.RESET + + "eV" }; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(49), + TextureFactory.of(textureFontOn), TextureFactory.builder() + .addIcon(textureFontOn_Glow) + .glow() + .build() }; + else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(49), + TextureFactory.of(textureFontOff), TextureFactory.builder() + .addIcon(textureFontOff_Glow) + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(49) }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + + int built = survivialBuildPiece(NA_BOTTOM, stackSize, 2, 0, 0, elementBudget, env, false, true); + if (built >= 0) return built; + int heights = stackSize.stackSize + 3; + for (int i = 1; i <= heights; i++) { + built = survivialBuildPiece(NA_MID, stackSize, 2, i, 0, elementBudget, env, false, true); + if (built >= 0) return built; + } + return survivialBuildPiece(NA_TOP, stackSize, 2, heights + 1, 0, elementBudget, env, false, true); + } + + protected void onCasingFound() { + casingAmount++; + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + + screenElements + .widget( + new TextWidget(StatCollector.translateToLocal("gui.NeutronActivator.0")) + .setDefaultColor(COLOR_TEXT_WHITE.get())) + .widget( + new TextWidget().setStringSupplier(() -> numberFormat.format(eV / 1_000_000d) + " MeV") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> eV, val -> eV = val)); + } + + private enum NeutronHatchElement implements IHatchElement { + + NeutronSensor(MTENeutronActivator::addAcceleratorAndSensor, MTENeutronSensor.class) { + + @Override + public long count(MTENeutronActivator t) { + return t.mNeutronSensor.size(); + } + }, + NeutronAccelerator(MTENeutronActivator::addAcceleratorAndSensor, MTENeutronAccelerator.class) { + + @Override + public long count(MTENeutronActivator t) { + return t.mNeutronAccelerator.size(); + } + }; + + private final List> mteClasses; + private final IGTHatchAdder adder; + + @SafeVarargs + NeutronHatchElement(IGTHatchAdder adder, Class... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + this.adder = adder; + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + public IGTHatchAdder adder() { + return adder; + } + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java new file mode 100644 index 0000000000..840688dff7 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEPreciseAssembler.java @@ -0,0 +1,529 @@ +package goodgenerator.blocks.tileEntity; + +import static bartworks.util.BWUtil.ofGlassTieredMixed; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTStructureUtility.ofFrame; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureUtility; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; + +import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; +import goodgenerator.client.GUI.GGUITextures; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.GregTechTileClientEvents; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.HatchElementBuilder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.tileentities.machines.IDualInputHatch; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; + +public class MTEPreciseAssembler extends MTEExtendedPowerMultiBlockBase + implements IConstructable, ISurvivalConstructable { + + private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QTANK"); + private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( + "iconsets/OVERLAY_QTANK_GLOW"); + private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QCHEST"); + private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( + "iconsets/OVERLAY_QCHEST_GLOW"); + + protected IStructureDefinition multiDefinition = null; + protected int casingAmount; + protected int casingTier; + protected int machineTier; + protected int mode; + protected int energyHatchTier; + private static final int CASING_INDEX = 1541; + + public MTEPreciseAssembler(String name) { + super(name); + } + + public MTEPreciseAssembler(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC" }, + { "F F", "CGGGGGGGC", "C-------C", "CGGGGGGGC", "F F" }, + { "F F", "CGGGGGGGC", "C-------C", "CGGGGGGGC", "F F" }, + { "F F", "CGGGGGGGC", "C-------C", "CGGGGGGGC", "F F" }, + { "CCCC~CCCC", "CMMMMMMMC", "CMMMMMMMC", "CMMMMMMMC", "CCCCCCCCC" } })) + .addElement( + 'C', + withChannel( + "unit casing", + HatchElementBuilder.builder() + .atLeast( + InputBus, + InputHatch, + OutputHatch, + OutputBus, + Maintenance, + Muffler, + ExoticEnergy.or(Energy)) + .adder(MTEPreciseAssembler::addToPAssList) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain( + onElementPass( + x -> x.casingAmount++, + StructureUtility.ofBlocksTiered( + (block, meta) -> block == Loaders.impreciseUnitCasing ? -1 + : block == Loaders.preciseUnitCasing ? meta : -2, + ImmutableList.of( + Pair.of(Loaders.impreciseUnitCasing, 0), + Pair.of(Loaders.preciseUnitCasing, 0), + Pair.of(Loaders.preciseUnitCasing, 1), + Pair.of(Loaders.preciseUnitCasing, 2), + Pair.of(Loaders.preciseUnitCasing, 3)), + -3, + MTEPreciseAssembler::setCasingTier, + MTEPreciseAssembler::getCasingTier))))) + .addElement('F', ofFrame(Materials.TungstenSteel)) + .addElement('G', withChannel("glass", ofGlassTieredMixed((byte) 4, (byte) 127, 2))) + .addElement( + 'M', + withChannel( + "machine casing", + StructureUtility.ofBlocksTiered( + (block, meta) -> block == GregTechAPI.sBlockCasings1 ? meta : -2, + IntStream.range(0, 10) + .mapToObj( + meta -> org.apache.commons.lang3.tuple.Pair.of(GregTechAPI.sBlockCasings1, meta)) + .collect(Collectors.toList()), + -1, + MTEPreciseAssembler::setMachineTier, + MTEPreciseAssembler::getMachineTier))) + .build(); + } + return multiDefinition; + } + + public boolean addToPAssList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchInput) { + return mInputHatches.add((MTEHatchInput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof IDualInputHatch) { + return mDualInputHatches.add((IDualInputHatch) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchInputBus) { + return mInputBusses.add((MTEHatchInputBus) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchOutput) { + return mOutputHatches.add((MTEHatchOutput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchOutputBus) { + return mOutputBusses.add((MTEHatchOutputBus) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchEnergy) { + return mEnergyHatches.add((MTEHatchEnergy) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchMaintenance) { + return mMaintenanceHatches.add((MTEHatchMaintenance) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchMuffler) { + return mMufflerHatches.add((MTEHatchMuffler) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchEnergyMulti) { + return mExoticEnergyHatches.add((MTEHatchEnergyMulti) aMetaTileEntity); + } + return false; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + casingTier = aNBT.getInteger("casingTier"); + machineTier = aNBT.getInteger("machineTier"); + mode = aNBT.getInteger("RunningMode"); + super.loadNBTData(aNBT); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("casingTier", casingTier); + aNBT.setInteger("machineTier", machineTier); + aNBT.setInteger("RunningMode", mode); + super.saveNBTData(aNBT); + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (getBaseMetaTileEntity().isServerSide()) { + this.mode = (this.mode + 1) % 2; + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("preciseassembler.chat." + this.mode)); + } + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + if (mode == 0) { + if (recipe.mSpecialValue > (casingTier + 1)) { + return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); + } + } + if (availableVoltage < recipe.mEUt) { + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).setSpeedBoost(mode == 0 ? 1 : 0.5F); + } + }.setMaxParallelSupplier(() -> mode == 0 ? 1 : (int) Math.pow(2, 4 + (casingTier + 1))); + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + boolean useSingleAmp = mEnergyHatches.size() == 1 && mExoticEnergyHatches.isEmpty(); + logic.setAvailableVoltage(getMachineVoltageLimit()); + logic.setAvailableAmperage(useSingleAmp ? 1 : getMaxInputAmps()); + logic.setAmperageOC(true); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + public long getMachineVoltageLimit() { + if (machineTier < 0) return 0; + if (machineTier >= 9) return GTValues.V[energyHatchTier]; + else return GTValues.V[Math.min(machineTier, energyHatchTier)]; + } + + @Override + public RecipeMap getRecipeMap() { + if (this.mode == 0) return GoodGeneratorRecipeMaps.preciseAssemblerRecipes; + else return RecipeMaps.assemblerRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(GoodGeneratorRecipeMaps.preciseAssemblerRecipes, RecipeMaps.assemblerRecipes); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 4, 4, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 4, 4, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.machineTier = -1; + this.casingAmount = 0; + this.casingTier = -3; + this.energyHatchTier = 0; + if (checkPiece(mName, 4, 4, 0)) { + energyHatchTier = checkEnergyHatchTier(); + if (casingTier >= -1) { + reUpdate(CASING_INDEX + casingTier); + } + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); + return casingAmount >= 42 && machineTier >= 0 + && casingTier >= -1 + && mMaintenanceHatches.size() == 1 + && !mMufflerHatches.isEmpty(); + } + return false; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Precise Assembler/Assembler") + .addInfo("Controller block for the Precise Assembler") + .addInfo("The error is no more than 7nm.") + .addInfo("Can assemble precise component in Precise Mode.") + .addInfo("Can work like a normal assembler in Normal Mode.") + .addInfo("Use screwdriver to change mode.") + .addInfo("Machine Casing and Energy Hatch limits the voltage tier the machine can work on.") + .addInfo("UHV Machine Casing will unlock all voltage, but you still need good Energy Hatch.") + .addInfo("Precise Electronic Unit Casing won't limit recipe in Normal Mode.") + .addInfo("But gives more parallel with more advanced one.") + .addInfo("It is 100% faster in Normal Mode.") + .addInfo("Imprecise (MK-0) = 16x, MK-I = 32x, MK-II = 64x, MK-III = 128x, MK-IV = 256x") + .addPollutionAmount(getPollutionPerSecond(null)) + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginStructureBlock(9, 5, 5, true) + .addController("Front bottom") + .addCasingInfoExactly("Machine Casing", 21, true) + .addCasingInfoExactly("Glass (EV+)", 42, false) + .addCasingInfoRange("Precise Electronic Unit Casing", 42, 86, true) + .addInputHatch("Any Casing") + .addInputBus("Any Casing") + .addOutputHatch("Any Casing") + .addOutputBus("Any Casing") + .addEnergyHatch("Any Casing") + .addMufflerHatch("Any Casing") + .addMaintenanceHatch("Any Casing") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 780; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("PreciseAssembler.hint", 7); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPreciseAssembler(this.mName); + } + + private int checkEnergyHatchTier() { + int tier = 0; + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + tier = Math.max(tHatch.mTier, tier); + } + for (MTEHatch tHatch : filterValidMTEs(mExoticEnergyHatches)) { + tier = Math.max(tHatch.mTier, tier); + } + return tier; + } + + public int getCasingTier() { + return casingTier; + } + + public void setCasingTier(int i) { + casingTier = i; + } + + public int getMachineTier() { + return machineTier; + } + + public void setMachineTier(int i) { + machineTier = i; + } + + public void reUpdate(int texture) { + for (IDualInputHatch hatch : mDualInputHatches) { + if (((MetaTileEntity) hatch).isValid()) { + hatch.updateTexture(texture); + } + } + for (MTEHatch hatch : filterValidMTEs(mInputHatches)) { + hatch.updateTexture(texture); + } + for (MTEHatch hatch : filterValidMTEs(mInputBusses)) { + hatch.updateTexture(texture); + } + for (MTEHatch hatch : filterValidMTEs(mOutputHatches)) { + hatch.updateTexture(texture); + } + for (MTEHatch hatch : filterValidMTEs(mOutputBusses)) { + hatch.updateTexture(texture); + } + for (MTEHatch hatch : filterValidMTEs(mEnergyHatches)) { + hatch.updateTexture(texture); + } + for (MTEHatch hatch : filterValidMTEs(mMaintenanceHatches)) { + hatch.updateTexture(texture); + } + for (MTEHatch hatch : filterValidMTEs(mMufflerHatches)) { + hatch.updateTexture(texture); + } + for (MTEHatch hatch : filterValidMTEs(mExoticEnergyHatches)) { + hatch.updateTexture(texture); + } + } + + @Override + public byte getUpdateData() { + return (byte) casingTier; + } + + @Override + public void receiveClientEvent(byte aEventID, byte aValue) { + super.receiveClientEvent(aEventID, aValue); + if (aEventID == GregTechTileClientEvents.CHANGE_CUSTOM_DATA && ((aValue & 0x80) == 0 || aValue == -1)) { + casingTier = aValue; + } + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + int t = Math.max(getCasingTier(), -1); + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX + t), + TextureFactory.of(textureFontOn), TextureFactory.builder() + .addIcon(textureFontOn_Glow) + .glow() + .build() }; + else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX + t), + TextureFactory.of(textureFontOff), TextureFactory.builder() + .addIcon(textureFontOff_Glow) + .glow() + .build() }; + } else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX + t) }; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget( + new CycleButtonWidget().setToggle(() -> mode == 1, val -> mode = val ? 1 : 0) + .setTextureGetter( + state -> state == 1 ? GGUITextures.OVERLAY_BUTTON_ASSEMBLER_MODE + : GGUITextures.OVERLAY_BUTTON_PRECISE_MODE) + .setBackground(GTUITextures.BUTTON_STANDARD) + .setPos(80, 91) + .setSize(16, 16) + .dynamicTooltip( + () -> Collections.singletonList(StatCollector.translateToLocal("preciseassembler.chat." + mode))) + .setUpdateTooltipEveryTick(true) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); + } + + @Override + public boolean isInputSeparationEnabled() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("mode", mode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector.translateToLocal("GT5U.GTPP_MULTI_PRECISE_ASSEMBLER.mode." + tag.getInteger("mode")) + + EnumChatFormatting.RESET); + } + +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java b/src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java new file mode 100644 index 0000000000..a78046909a --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTESupercriticalFluidTurbine.java @@ -0,0 +1,186 @@ +package goodgenerator.blocks.tileEntity; + +import static gregtech.api.util.GTUtility.trans; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import goodgenerator.blocks.tileEntity.base.MTELargeTurbineBase; +import goodgenerator.loader.Loaders; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.objects.XSTR; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTESupercriticalFluidTurbine extends MTELargeTurbineBase { + + private boolean looseFit = false; + + private static final IIconContainer turbineOn = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_05"); + private static final IIconContainer turbineOff = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_15"); + private static final IIconContainer turbineEmpty = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_25"); + + public MTESupercriticalFluidTurbine(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTESupercriticalFluidTurbine(String aName) { + super(aName); + } + + @Override + public int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff) { + if (looseFit) { + aOptFlow *= 4; + double pow = Math.pow(1.1f, ((aBaseEff - 7500) / 10000F) * 20f); + if (aBaseEff > 10000) { + aOptFlow *= pow; + aBaseEff = 7500; + } else if (aBaseEff > 7500) { + aOptFlow *= pow; + aBaseEff *= 0.75f; + } else { + aBaseEff *= 0.75f; + } + } + int tEU = 0; + int totalFlow = 0; // Byproducts are based on actual flow + int flow = 0; + int remainingFlow = GTUtility.safeInt((long) (aOptFlow * 1.25f)); // Allowed to use up to 125% of optimal flow. + // Variable required outside of loop for + // multi-hatch scenarios. + this.realOptFlow = aOptFlow; + + storedFluid = 0; + FluidStack tSCSteam = FluidRegistry.getFluidStack("supercriticalsteam", 1); + for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { + final FluidStack aFluidStack = aFluids.get(i); + if (tSCSteam.isFluidEqual(aFluidStack)) { + flow = Math.min(aFluidStack.amount, remainingFlow); + depleteInput(new FluidStack(aFluidStack, flow)); + this.storedFluid += aFluidStack.amount; + remainingFlow -= flow; + totalFlow += flow; + } else if (GTModHandler.isAnySteam(aFluidStack)) { + depleteInput(new FluidStack(aFluidStack, aFluidStack.amount)); + } + } + if (totalFlow <= 0) return 0; + tEU = totalFlow; + addOutput(GTModHandler.getSteam(totalFlow * 100)); + if (totalFlow == aOptFlow) { + tEU = GTUtility.safeInt((long) tEU * (long) aBaseEff / 10000L); + } else { + float efficiency = 1.0f - Math.abs((totalFlow - aOptFlow) / (float) aOptFlow); + tEU *= efficiency; + tEU = Math.max(1, GTUtility.safeInt((long) tEU * (long) aBaseEff / 10000L)); + } + + if (tEU > maxPower) { + tEU = GTUtility.safeInt(maxPower); + } + + return tEU * 100; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + looseFit ^= true; + GTUtility.sendChatToPlayer( + aPlayer, + looseFit ? trans("500", "Fitting: Loose - More Flow") + : trans("501", "Fitting: Tight - More Efficiency")); + } + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + // 2x more damage than normal turbine + return looseFit ? (XSTR.XSTR_INSTANCE.nextInt(2) == 0 ? 0 : 1) : 2; + } + + @Override + public String[] getInfoData() { + super.looseFit = looseFit; + return super.getInfoData(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("turbineFitting", looseFit); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + looseFit = aNBT.getBoolean("turbineFitting"); + } + + @Override + public Block getCasingBlock() { + return Loaders.supercriticalFluidTurbineCasing; + } + + @Override + public int getCasingMeta() { + return 0; + } + + @Override + public int getCasingTextureIndex() { + return 1538; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Supercritical Steam Turbine") + .addInfo("Controller block for Supercritical Fluid Turbine") + .addInfo("Needs a Turbine, place inside controller") + .addInfo("Use Supercritical Steam to generate power.") + .addInfo("Outputs 100L of Steam per 1L of SC Steam as well as producing power") + .addInfo("1L Supercritical Steam = 100 EU") + .addInfo("Extreme Heated Steam will cause more damage to the turbine.") + .addInfo("Power output depends on turbine and fitting") + .addInfo("Use screwdriver to adjust fitting of turbine") + .addSeparator() + .beginStructureBlock(3, 3, 4, true) + .addController("Front center") + .addCasingInfo("SC Turbine Casing", 24) + .addDynamoHatch("Back center", 1) + .addMaintenanceHatch("Side centered", 2) + .addInputHatch("Supercritical Fluid, Side centered", 2) + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESupercriticalFluidTurbine(mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1538), + facing == side + ? (aActive ? TextureFactory.of(turbineOn) + : hasTurbine() ? TextureFactory.of(turbineOff) : TextureFactory.of(turbineEmpty)) + : Textures.BlockIcons.getCasingTextureForId(1538) }; + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java new file mode 100644 index 0000000000..5d20427756 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEUniversalChemicalFuelEngine.java @@ -0,0 +1,389 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.Textures.BlockIcons.*; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import goodgenerator.blocks.tileEntity.base.MTETooltipMultiBlockBaseEM; +import goodgenerator.loader.Loaders; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.TickTime; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.maps.FuelBackend; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoMulti; + +public class MTEUniversalChemicalFuelEngine extends MTETooltipMultiBlockBaseEM + implements IConstructable, ISurvivalConstructable { + + protected final double DIESEL_EFFICIENCY_COEFFICIENT = 0.04D; + protected final double GAS_EFFICIENCY_COEFFICIENT = 0.04D; + protected final double ROCKET_EFFICIENCY_COEFFICIENT = 0.005D; + protected final double EFFICIENCY_CEILING = 1.5D; + protected final int HEATING_TIMER = TickTime.SECOND * 10; + + private long tEff; + private int heatingTicks; + private boolean isStoppingSafe; + + private IStructureDefinition multiDefinition = null; + + public MTEUniversalChemicalFuelEngine(String name) { + super(name); + super.useLongPower = true; + } + + public MTEUniversalChemicalFuelEngine(int id, String name, String nameRegional) { + super(id, name, nameRegional); + super.useLongPower = true; + } + + public final boolean addMaintenance(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchMaintenance) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mMaintenanceHatches.add((MTEHatchMaintenance) aMetaTileEntity); + } + } + return false; + } + + public final boolean addMuffler(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchMuffler) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mMufflerHatches.add((MTEHatchMuffler) aMetaTileEntity); + } + } + return false; + } + + public final boolean addInputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mInputHatches.add((MTEHatchInput) aMetaTileEntity); + } + } + return false; + } + + public final boolean addDynamoHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchDynamo) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mDynamoHatches.add((MTEHatchDynamo) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchDynamoMulti) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.eDynamoMulti.add((MTEHatchDynamoMulti) aMetaTileEntity); + } + } + return false; + } + + @Override + public IStructureDefinition getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { + { "TTTTT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTTTT" }, + { "TTTTT", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "TTTTT" }, + { "TT~TT", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "TTETT" }, + { "TTWTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT" } })) + .addElement('T', ofBlock(GregTechAPI.sBlockCasings4, 2)) + .addElement('W', gregtech.api.enums.HatchElement.Maintenance.newAny(50, 1)) + .addElement('M', gregtech.api.enums.HatchElement.Muffler.newAny(50, 2)) + .addElement('S', gregtech.api.enums.HatchElement.InputHatch.newAny(50, 3)) + .addElement('E', gregtech.api.enums.HatchElement.Dynamo.newAny(50, 4)) + .addElement('P', ofBlock(GregTechAPI.sBlockCasings2, 14)) + .addElement('C', ofBlock(Loaders.titaniumPlatedCylinder, 0)) + .addElement('G', ofBlock(GregTechAPI.sBlockCasings2, 4)) + .addElement('I', ofBlock(GregTechAPI.sBlockCasings4, 13)) + .build(); + } + return multiDefinition; + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return structureCheck_EM(mName, 2, 2, 0); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(mName, 2, 2, 0, stackSize, hintsOnly); + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return DescTextLocalization.addText("UniversalChemicalFuelEngine.hint", 11); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return (int) Math.sqrt(this.getPowerFlow()) / 20; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Chemical Engine") + .addInfo("Controller block for the Chemical Engine") + .addInfo("BURNING BURNING BURNING") + .addInfo("Use combustible liquid to generate power.") + .addInfo("You need to supply Combustion Promoter to keep it running.") + .addInfo("It will consume all the fuel and promoter in the hatch every second.") + .addInfo("If the Dynamo Hatch's buffer fills up, the machine will stop.") + .addInfo("When turned on, there's 10-second period where the machine will not stop.") + .addInfo("Even if it doesn't stop, all the fuel in the hatch will be consumed.") + .addInfo("The efficiency is determined by the proportion of Combustion Promoter to fuel.") + .addInfo("The proportion is bigger, and the efficiency will be higher.") + .addInfo("Start machine with power button to force structure check.") + .addInfo("It creates sqrt(Current Output Power) pollution every second") + .addInfo( + "If you forget to supply Combustion Promoter, this engine will swallow all the fuel " + + EnumChatFormatting.YELLOW + + "without outputting energy" + + EnumChatFormatting.GRAY + + ".") + .addInfo("The efficiency is up to 150%.") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginStructureBlock(5, 4, 9, false) + .addMaintenanceHatch("Hint block with dot 1") + .addMufflerHatch("Hint block with dot 2 (fill all slots with mufflers)") + .addInputHatch("Hint block with dot 3 (fill all slots with input hatches)") + .addDynamoHatch("Hint block with dot 4") + .toolTipFinisher("Good Generator"); + return tt; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + + ArrayList tFluids = getStoredFluids(); + + long PromoterAmount = findLiquidAmount(getPromoter(), tFluids); + + CheckRecipeResult result; + + result = processFuel(tFluids, RecipeMaps.dieselFuels, PromoterAmount, DIESEL_EFFICIENCY_COEFFICIENT, 1); + if (result.wasSuccessful()) return result; + + result = processFuel(tFluids, RecipeMaps.gasTurbineFuels, PromoterAmount, GAS_EFFICIENCY_COEFFICIENT, 1); + if (result.wasSuccessful()) return result; + + result = processFuel(tFluids, GTPPRecipeMaps.rocketFuels, PromoterAmount, ROCKET_EFFICIENCY_COEFFICIENT, 3); + if (result.wasSuccessful()) return result; + + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + protected CheckRecipeResult processFuel(ArrayList tFluids, RecipeMap recipeMap, + long PromoterAmount, double efficiencyCoefficient, double FuelsValueBonus) { + for (GTRecipe recipe : recipeMap.getAllRecipes()) { + FluidStack tFuel = findFuel(recipe); + if (tFuel == null) continue; + long FuelAmount = findLiquidAmount(tFuel, tFluids); + if (FuelAmount == 0) continue; + calculateEfficiency(FuelAmount, PromoterAmount, efficiencyCoefficient); + consumeAllLiquid(tFuel, tFluids); + consumeAllLiquid(getPromoter(), tFluids); + this.setPowerFlow((long) (FuelAmount * recipe.mSpecialValue * FuelsValueBonus / 20.0D)); + this.mMaxProgresstime = 20; + this.updateSlots(); + return CheckRecipeResultRegistry.GENERATING; + } + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + @Override + public void stopMachine() { + // Reset the counter for heating, so that it works again when the machine restarts + heatingTicks = 0; + super.stopMachine(); + } + + @Override + public boolean onRunningTick(ItemStack stack) { + super.onRunningTick(stack); + // Counts ticks up to the defined timer (200 ticks, 10 seconds) + // The multiblock will not stop due to excess energy during this time + // Machine used to explode in the past, this timer was first made to prevent that + if (heatingTicks < HEATING_TIMER) { + heatingTicks++; + isStoppingSafe = true; + } else if (isStoppingSafe) isStoppingSafe = false; + + if (this.getBaseMetaTileEntity() + .isServerSide()) { + addAutoEnergy(); + } + return true; + } + + @Override + public String[] getInfoData() { + String[] info = super.getInfoData(); + info[4] = "Probably makes: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(this.getPowerFlow()) + + EnumChatFormatting.RESET + + " EU/t"; + info[6] = "Problems: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(this.getIdealStatus() - this.getRepairStatus()) + + EnumChatFormatting.RESET + + " Efficiency: " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(tEff / 100D) + + EnumChatFormatting.RESET + + " %"; + return info; + } + + void addAutoEnergy() { + long exEU = this.getPowerFlow() * tEff / 10000; + if (!mDynamoHatches.isEmpty()) { + MTEHatchDynamo tHatch = mDynamoHatches.get(0); + if (tHatch.maxEUOutput() * tHatch.maxAmperesOut() >= exEU) { + tHatch.setEUVar( + Math.min( + tHatch.maxEUStore(), + tHatch.getBaseMetaTileEntity() + .getStoredEU() + exEU)); + } else if (!isStoppingSafe) { + stopMachine(); + } + } + if (!eDynamoMulti.isEmpty()) { + MTEHatchDynamoMulti tHatch = eDynamoMulti.get(0); + if (tHatch.maxEUOutput() * tHatch.maxAmperesOut() >= exEU) { + tHatch.setEUVar( + Math.min( + tHatch.maxEUStore(), + tHatch.getBaseMetaTileEntity() + .getStoredEU() + exEU)); + } else if (!isStoppingSafe) { + stopMachine(); + } + } + } + + public FluidStack getPromoter() { + return FluidRegistry.getFluidStack("combustionpromotor", 1); + } + + public FluidStack findFuel(GTRecipe aFuel) { + if (aFuel.mInputs != null && aFuel.mInputs.length > 0) + return GTUtility.getFluidForFilledItem(aFuel.mInputs[0], true); + else return aFuel.mFluidInputs[0]; + } + + public void calculateEfficiency(long aFuel, long aPromoter, double coefficient) { + if (aPromoter == 0) { + this.tEff = 0; + return; + } + this.tEff = (int) (Math.exp(-coefficient * (double) aFuel / (double) aPromoter) * EFFICIENCY_CEILING * 10000); + } + + public long findLiquidAmount(FluidStack liquid, List input) { + long cnt = 0; + for (FluidStack fluid : input) { + if (fluid.isFluidEqual(liquid)) { + cnt += fluid.amount; + } + } + if (cnt < 0) cnt = 0; + return cnt; + } + + public void consumeAllLiquid(FluidStack liquid, List input) { + for (FluidStack fluid : input) { + if (fluid.isFluidEqual(liquid)) fluid.amount = 0; + } + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { casingTexturePages[0][50], + TextureFactory.of(OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE_GLOW) + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][50], TextureFactory.of(OVERLAY_FRONT_DIESEL_ENGINE), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_GLOW) + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][50] }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEUniversalChemicalFuelEngine(this.mName); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 2, 2, 0, elementBudget, env, false, true); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java b/src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java new file mode 100644 index 0000000000..1d8620ad4d --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/MTEYottaFluidTank.java @@ -0,0 +1,729 @@ +package goodgenerator.blocks.tileEntity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTStructureUtility.*; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +import org.apache.commons.lang3.StringUtils; +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import bartworks.API.BorosilicateGlass; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.MTEYOTTAHatch; +import goodgenerator.blocks.tileEntity.base.MTETooltipMultiBlockBaseEM; +import goodgenerator.client.GUI.GGUITextures; +import goodgenerator.loader.Loaders; +import goodgenerator.util.CharExchanger; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; +import tectech.TecTech; +import tectech.thing.gui.TecTechUITextures; +import tectech.thing.metaTileEntity.multi.base.INameFunction; +import tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import tectech.thing.metaTileEntity.multi.base.LedStatus; +import tectech.thing.metaTileEntity.multi.base.Parameters; + +public class MTEYottaFluidTank extends MTETooltipMultiBlockBaseEM implements IConstructable, ISurvivalConstructable { + + private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QTANK"); + private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( + "iconsets/OVERLAY_QTANK_GLOW"); + private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QCHEST"); + private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( + "iconsets/OVERLAY_QCHEST_GLOW"); + + protected IStructureDefinition multiDefinition = null; + protected final ArrayList mYottaHatch = new ArrayList<>(); + + private static final BigInteger ONE_HUNDRED = BigInteger.valueOf(100); + + /** Tank capacity */ + public BigInteger mStorage = BigInteger.ZERO; + /** Amount of fluid millibuckets currently in the tank */ + public BigInteger mStorageCurrent = BigInteger.ZERO; + /** + * Fluid type currently stored in the tank, can be null. Stack size is always 1, real amount is stored in + * mStorageCurrent. + */ + public FluidStack mFluid = null; + /** + * Fluid type currently the tank is currently locked to, can be null. Stack size is always 1, real amount is stored + * in mStorageCurrent. + */ + public FluidStack mLockedFluid = null; + protected boolean isFluidLocked = false; + protected int glassMeta; + protected int maxCell; + protected final String YOTTANK_BOTTOM = mName + "buttom"; + protected final String YOTTANK_MID = mName + "mid"; + protected final String YOTTANK_TOP = mName + "top"; + protected final NumberFormatMUI numberFormat = new NumberFormatMUI(); + private int workTickCounter = 0; + + public static final BigInteger MAX_INT_BIGINT = BigInteger.valueOf(Integer.MAX_VALUE); + + protected boolean voidExcessEnabled = false; + + protected Parameters.Group.ParameterIn tickRateSettings; + + /** Name of the tick rate setting */ + private static final INameFunction TICK_RATE_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.YottaFluidTank.cfgi.0"); + /** Status of the tick rate setting */ + private static final IStatusFunction TICK_RATE_STATUS = (base, p) -> LedStatus + .fromLimitsInclusiveOuterBoundary(p.get(), 1, 0, 100, 100); + + @Override + protected void parametersInstantiation_EM() { + tickRateSettings = parametrization.getGroup(9, true) + .makeInParameter(1, 20, TICK_RATE_SETTING_NAME, TICK_RATE_STATUS); + } + + public MTEYottaFluidTank(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public MTEYottaFluidTank(String name) { + super(name); + } + + public int getMeta() { + return glassMeta; + } + + public void setMeta(int meta) { + glassMeta = meta; + } + + public String getCap() { + return mStorage.toString(10); + } + + public String getStored() { + return mStorageCurrent.toString(10); + } + + public String getFluidName() { + if (mFluid == null) return StatCollector.translateToLocal("scanner.info.YOTTank.empty"); + return mFluid.getLocalizedName(); + } + + public String getLockedFluidName() { + if (!isFluidLocked) return StatCollector.translateToLocal("scanner.info.YOTTank.none"); + if (mLockedFluid == null) return StatCollector.translateToLocal("scanner.info.YOTTank.next"); + return mLockedFluid.getLocalizedName(); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + String tAmount = aNBT.getString("mStorage"); + String tAmountCurrent = aNBT.getString("mStorageCurrent"); + if (StringUtils.isEmpty(tAmount)) tAmount = "0"; + if (StringUtils.isEmpty(tAmountCurrent)) tAmountCurrent = "0"; + mStorage = new BigInteger(tAmount, 10); + mStorageCurrent = new BigInteger(tAmountCurrent, 10); + mFluid = FluidRegistry.getFluidStack(aNBT.getString("mFluidName"), 1); + mLockedFluid = FluidRegistry.getFluidStack(aNBT.getString("mLockedFluidName"), 1); + voidExcessEnabled = aNBT.getBoolean("voidExcessEnabled"); + isFluidLocked = aNBT.getBoolean("isFluidLocked"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setString("mStorage", mStorage.toString(10)); + aNBT.setString("mStorageCurrent", mStorageCurrent.toString(10)); + aNBT.setString( + "mFluidName", + mFluid == null ? "" + : mFluid.getFluid() + .getName()); + aNBT.setString( + "mLockedFluidName", + mLockedFluid == null ? "" + : mLockedFluid.getFluid() + .getName()); + aNBT.setBoolean("voidExcessEnabled", voidExcessEnabled); + aNBT.setBoolean("isFluidLocked", isFluidLocked); + super.saveNBTData(aNBT); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing_EM() { + this.mEUt = 0; + this.mMaxProgresstime = 20; + return SimpleCheckRecipeResult.ofSuccess(""); + } + + public boolean getIsVoidExcessEnabled() { + return voidExcessEnabled; + } + + /** + * Attempts to remove {@code amount} of fluid from the tank if possible, does not do partial removals. + * + * @param amount The millibucket amount of the fluid to remove + * @return True if successfully removed amount, false if no fluid was removed. + */ + public boolean reduceFluid(long amount) { + final BigInteger bigAmount = BigInteger.valueOf(amount); + if (mStorageCurrent.compareTo(bigAmount) < 0) { + return false; + } else { + mStorageCurrent = mStorageCurrent.subtract(bigAmount); + return true; + } + } + + /** + * Attempts to put {@code amount} of fluid into the tank if possible, fails if there's not enough space for all of + * it. + * + * @param amount The millibucket amount of the fluid to insert + * @param doFill Whether to actually fill, or just simulate a fill + * @return True if successfully added the given amount of fluid to the tank, false if failed. + */ + public boolean addFluid(long amount, boolean doFill) { + final BigInteger bigAmount = BigInteger.valueOf(amount); + final BigInteger newTotal = mStorageCurrent.add(bigAmount); + if (newTotal.compareTo(mStorage) > 0) { + return false; + } else { + if (doFill) { + mStorageCurrent = newTotal; + } + return true; + } + } + + // Avoid allocating a new array on every query + private final FluidTankInfo[] tankInfoCache = new FluidTankInfo[1]; + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { + int fluidSize = mStorageCurrent.compareTo(MAX_INT_BIGINT) >= 0 ? Integer.MAX_VALUE : mStorageCurrent.intValue(); + int tankCapacity = mStorage.compareTo(MAX_INT_BIGINT) >= 0 ? Integer.MAX_VALUE : mStorage.intValue(); + final boolean cacheNeedsRecreation; + if (tankInfoCache[0] == null || tankInfoCache[0].capacity != tankCapacity) { + cacheNeedsRecreation = true; + } else if (tankInfoCache[0].fluid == null) { + cacheNeedsRecreation = (mFluid != null); + } else { + cacheNeedsRecreation = !tankInfoCache[0].fluid.isFluidEqual(mFluid); + } + if (cacheNeedsRecreation) { + final FluidStack storedFluid = mFluid.copy(); + storedFluid.amount = fluidSize; + tankInfoCache[0] = new FluidTankInfo(storedFluid, tankCapacity); + } else if (mFluid != null) { + tankInfoCache[0].fluid.amount = fluidSize; + } + return tankInfoCache; + } + + @Override + protected void clearHatches_EM() { + super.clearHatches_EM(); + mYottaHatch.clear(); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mStorage = BigInteger.ZERO; + glassMeta = 0; + maxCell = 0; + if (!structureCheck_EM(YOTTANK_BOTTOM, 2, 0, 0)) return false; + int cnt = 0; + while (structureCheck_EM(YOTTANK_MID, 2, cnt + 1, 0)) { + cnt++; + } + if (cnt > 15 || cnt < 1) return false; + if (!structureCheck_EM(YOTTANK_TOP, 2, cnt + 2, 0)) return false; + // maxCell+1 = Tier of highest Cell. glassMeta is the glass voltage tier + if (maxCell + 3 <= glassMeta) { + if (mStorage.compareTo(mStorageCurrent) < 0) mStorageCurrent = mStorage; + if (mFluid == null) { + mStorageCurrent = BigInteger.ZERO; + } + return true; + } + return false; + } + + @Override + public IStructureDefinition getStructure_EM() { + if (multiDefinition == null) { + multiDefinition = StructureDefinition.builder() + .addShape( + YOTTANK_BOTTOM, + transpose( + new String[][] { { "MM~MM", "MCCCM", "MCCCM", "MCCCM", "MMMMM" }, + { " ", " OOO ", " OOO ", " OOO ", " " } })) + .addShape(YOTTANK_MID, transpose(new String[][] { { "GGGGG", "GRRRG", "GRRRG", "GRRRG", "GGGGG" } })) + .addShape( + YOTTANK_TOP, + transpose( + new String[][] { { "FFFFF", "F F", "F F", "F F", "FFFFF" }, + { "CCCCC", "CIIIC", "CIIIC", "CIIIC", "CCCCC" } })) + .addElement('C', ofBlock(Loaders.yottaFluidTankCasing, 0)) + .addElement( + 'G', + withChannel( + "glass", + BorosilicateGlass.ofBoroGlass( + (byte) 0, + (byte) 1, + Byte.MAX_VALUE, + MTEYottaFluidTank::setMeta, + te -> (byte) te.getMeta()))) + .addElement('R', ofChain(cells(10))) + .addElement('F', ofFrame(Materials.Steel)) + .addElement( + 'I', + buildHatchAdder(MTEYottaFluidTank.class).atLeast(gregtech.api.enums.HatchElement.InputHatch) + .casingIndex(1537) + .dot(1) + .buildAndChain(Loaders.yottaFluidTankCasing, 0)) + .addElement( + 'M', + buildHatchAdder(MTEYottaFluidTank.class).atLeast(gregtech.api.enums.HatchElement.Maintenance) + .casingIndex(1537) + .dot(2) + .buildAndChain(Loaders.yottaFluidTankCasing, 0)) + .addElement( + 'O', + buildHatchAdder(MTEYottaFluidTank.class).atLeast(gregtech.api.enums.HatchElement.OutputHatch) + .adder(MTEYottaFluidTank::addOutput) + .casingIndex(1537) + .dot(1) + .buildAndChain(Loaders.yottaFluidTankCasing, 0)) + .build(); + } + return multiDefinition; + } + + public List> cells(int num) { + List> out = new ArrayList<>(); + for (int i = 0; i < num; ++i) { + int finalI = i; + out.add(onElementPass(x -> { + x.mStorage = x.mStorage.add(calStorage(finalI)); + x.maxCell = Math.max(x.maxCell, finalI); + }, ofBlock(Loaders.yottaFluidTankCell, i))); + } + return out; + } + + public final boolean addOutput(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } else { + if (aMetaTileEntity instanceof MTEHatchOutput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.mOutputHatches.add((MTEHatchOutput) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEYOTTAHatch) { + // only one yothatch allowed + if (!this.mYottaHatch.isEmpty()) return false; + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEYOTTAHatch) aMetaTileEntity).setTank(this); + return this.mYottaHatch.add((MTEYOTTAHatch) aMetaTileEntity); + } + } + } + return false; + } + + @Override + public String[] getInfoData() { + return new String[] { StatCollector.translateToLocal("scanner.info.YOTTank.1"), + StatCollector.translateToLocal( + EnumChatFormatting.YELLOW + CharExchanger.formatNumber(getFluidName() + EnumChatFormatting.RESET)), + + StatCollector.translateToLocal("scanner.info.YOTTank.0"), + StatCollector.translateToLocal( + EnumChatFormatting.GREEN + CharExchanger.formatNumber(getCap()) + EnumChatFormatting.RESET + " L"), + + StatCollector.translateToLocal("scanner.info.YOTTank.2"), + StatCollector.translateToLocal( + EnumChatFormatting.GREEN + CharExchanger.formatNumber(getStored()) + + EnumChatFormatting.RESET + + " L" + + " (" + + EnumChatFormatting.GREEN + + getPercent() + + "%" + + EnumChatFormatting.RESET + + ")"), + + StatCollector.translateToLocal("scanner.info.YOTTank.3"), + StatCollector.translateToLocal( + EnumChatFormatting.YELLOW + CharExchanger.formatNumber(getLockedFluidName()) + + EnumChatFormatting.RESET) }; + } + + private String getPercent() { + if (mStorage.signum() == 0) return "0"; + return mStorageCurrent.multiply(ONE_HUNDRED) + .divide(mStorage) + .toString(); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fluid Tank") + .addInfo("Controller block for the YOTTank.") + .addInfo("The max output speed is decided by the amount of stored liquid and the output hatch's capacity.") + .addInfo("The max fluid cell tier is limited by the glass tier.") + .addInfo("HV glass for T1, EV glass for T2, IV glass for T3. . .") + .addInfo("The max height of the cell blocks is 15.") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .addSeparator() + .beginVariableStructureBlock(5, 5, 1, 15, 5, 5, false) + .addController("Front of the second layer") + .addCasingInfoExactly("Steel Frame Box", 16, false) + .addCasingInfoRange("Glass (HV+)", 16, 240, true) + .addCasingInfoRange("Fluid Cell Block", 9, 135, true) + .addCasingInfoRange("YOTTank Casing", 25, 43, false) + .addInputHatch("Hint block with dot 1") + .addOutputHatch("Hint block with dot 3") + .toolTipFinisher("Good Generator"); + return tt; + } + + private static final BigInteger[] storageWithCells; + + static { + storageWithCells = new BigInteger[10]; + final BigInteger baseStorage = BigInteger.valueOf(1_000_000); + final BigInteger storageMultiplier = BigInteger.valueOf(100); + BigInteger currentStorage = baseStorage; + for (int i = 0; i < 10; i++) { + storageWithCells[i] = currentStorage; + currentStorage = currentStorage.multiply(storageMultiplier); + } + } + + public BigInteger calStorage(int meta) { + return storageWithCells[meta]; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + super.onRunningTick(aStack); + if (this.getBaseMetaTileEntity() + .isServerSide()) { + long tickRate = Math.min(100L, Math.max(1L, (long) tickRateSettings.get())); + ++workTickCounter; + if (workTickCounter < tickRate) { + return true; + } + workTickCounter = 0; + + List tStore = getStoredFluids(); + for (FluidStack tFluid : tStore) { + if (tFluid == null) continue; + if (isFluidLocked) { + if (mLockedFluid != null) { + if (!tFluid.isFluidEqual(mLockedFluid)) continue;; + } else { + mLockedFluid = tFluid.copy(); + mLockedFluid.amount = 1; + } + } + if (mFluid == null || tFluid.isFluidEqual(mFluid)) { + if (mFluid == null) { + mFluid = tFluid.copy(); + mFluid.amount = 1; + } + if (addFluid(tFluid.amount, true)) { + tFluid.amount = 0; + } else { + if (voidExcessEnabled) { + tFluid.amount = 0; + } else { + final BigInteger delta = mStorage.subtract(mStorageCurrent); + tFluid.amount -= delta.intValueExact(); + } + mStorageCurrent = mStorage; + } + } + } + + if (mStorageCurrent.compareTo(BigInteger.ZERO) <= 0) { + mFluid = null; + } + + if (mFluid != null) { + // Try to drain 1% of the tank per tick + int outputAmount = mStorageCurrent.divide(ONE_HUNDRED) + .min(MAX_INT_BIGINT) + .max(BigInteger.ONE) + .intValueExact(); + if (outputAmount != 1) outputAmount = (int) Math.min(Integer.MAX_VALUE, (long) outputAmount * tickRate); + else outputAmount = Math.min(mStorageCurrent.intValueExact(), outputAmount * (int) tickRate); + + final int originalOutputAmount = outputAmount; + + for (final MTEHatch outputHatch : mOutputHatches) { + final FluidStack fluidInHatch = outputHatch.mFluid; + + final int remainingHatchSpace; + if (fluidInHatch != null) { + if (fluidInHatch.isFluidEqual(mFluid)) { + remainingHatchSpace = outputHatch.getCapacity() - fluidInHatch.amount; + } else { + continue; + } + } else { + remainingHatchSpace = outputHatch.getCapacity(); + } + + final int amountToFillHatch = Math.min(remainingHatchSpace, outputAmount); + if (amountToFillHatch <= 0) { + continue; + } + final FluidStack fillStack = mFluid.copy(); + fillStack.amount = amountToFillHatch; + final int transferredAmount = outputHatch.fill(fillStack, true); + outputAmount -= transferredAmount; + } + + final int totalDrainedAmount = originalOutputAmount - outputAmount; + if (totalDrainedAmount > 0) { + mStorageCurrent = mStorageCurrent.subtract(BigInteger.valueOf(totalDrainedAmount)); + if (mStorageCurrent.signum() < 0) { + throw new IllegalStateException( + "YOTTank drained beyond its fluid amount, indicating logic bug: " + mStorageCurrent); + } + } + } + } + return true; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(YOTTANK_BOTTOM, 2, 0, 0, stackSize, hintsOnly); + int height = stackSize.stackSize; + if (height > 15) height = 15; + structureBuild_EM(YOTTANK_TOP, 2, height + 2, 0, stackSize, hintsOnly); + while (height > 0) { + structureBuild_EM(YOTTANK_MID, 2, height, 0, stackSize, hintsOnly); + height--; + } + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack toolStack) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + voidExcessEnabled ^= true; + aPlayer.addChatMessage( + new ChatComponentTranslation( + voidExcessEnabled ? "yottank.chat.voidExcessEnabled" : "yottank.chat.voidExcessDisabled")); + return true; + } + return false; + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack toolStack) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + if (mLockedFluid == null) { + if (mFluid != null) { + mLockedFluid = mFluid; + aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.1", getFluidName())); + } else { + aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.2")); + } + isFluidLocked = true; + } else { + mLockedFluid = null; + isFluidLocked = false; + aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.0")); + } + return true; + } + return false; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return DescTextLocalization.addText("YOTTank.hint", 8); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEYottaFluidTank(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1537), + TextureFactory.of(textureFontOn), TextureFactory.builder() + .addIcon(textureFontOn_Glow) + .glow() + .build() }; + else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1537), + TextureFactory.of(textureFontOff), TextureFactory.builder() + .addIcon(textureFontOff_Glow) + .glow() + .build() }; + } else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1537) }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int built = 0; + built += survivialBuildPiece(YOTTANK_BOTTOM, stackSize, 2, 0, 0, elementBudget, env, false, true); + int height = stackSize.stackSize; + if (height > 15) height = 15; + built += survivialBuildPiece(YOTTANK_TOP, stackSize, 2, height + 2, 0, elementBudget - built, env, false, true); + while (height > 0) { + built += survivialBuildPiece(YOTTANK_MID, stackSize, 2, height, 0, elementBudget - built, env, false, true); + height--; + } + return built; + } + + @Override + protected boolean shouldDisplayCheckRecipeResult() { + return false; + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + + screenElements + .widget( + new TextWidget().setStringSupplier( + () -> StatCollector.translateToLocal("gui.YOTTank.0") + " " + numberFormat.format(mStorage) + " L") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.BigIntegerSyncer(() -> mStorage, val -> mStorage = val)) + .widget( + new TextWidget() + .setStringSupplier(() -> StatCollector.translateToLocal("gui.YOTTank.1") + " " + getFluidName()) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.FluidStackSyncer(() -> mFluid, val -> mFluid = val)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.YOTTank.2") + " " + + numberFormat.format(mStorageCurrent) + + " L") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.BigIntegerSyncer(() -> mStorageCurrent, val -> mStorageCurrent = val)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.YOTTank.3") + " " + getLockedFluidName()) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.FluidStackSyncer(() -> mLockedFluid, val -> mLockedFluid = val)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> isFluidLocked, val -> isFluidLocked = val)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> voidExcessEnabled, val -> voidExcessEnabled = val)); + } + + @Override + protected ButtonWidget createSafeVoidButton() { + return (ButtonWidget) new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + voidExcessEnabled = !voidExcessEnabled; + }) + .setPlayClickSound(false) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); + ret.add( + voidExcessEnabled ? TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_ON + : TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_OFF); + return ret.toArray(new IDrawable[0]); + }) + .setPos(174, doesBindPlayerInventory() ? 132 : 156) + .setSize(16, 16) + .addTooltip(StatCollector.translateToLocal("gui.YOTTank.button.void")) + .setTooltipShowUpDelay(TOOLTIP_DELAY); + } + + @Override + protected ButtonWidget createPowerPassButton() { + return (ButtonWidget) new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + isFluidLocked = !isFluidLocked; + if (!widget.getContext() + .isClient()) mLockedFluid = isFluidLocked ? mFluid : null; + }) + .setPlayClickSound(false) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); + ret.add(isFluidLocked ? GGUITextures.OVERLAY_BUTTON_LOCK_ON : GGUITextures.OVERLAY_BUTTON_LOCK_OFF); + return ret.toArray(new IDrawable[0]); + }) + .setPos(174, doesBindPlayerInventory() ? 116 : 140) + .setSize(16, 16) + .addTooltip(StatCollector.translateToLocal("gui.YOTTank.button.locking")) + .setTooltipShowUpDelay(TOOLTIP_DELAY); + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java b/src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java deleted file mode 100644 index 19b04637fe..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/MultiNqGenerator.java +++ /dev/null @@ -1,468 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static goodgenerator.main.GG_Config_Loader.*; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.util.Pair; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; -import goodgenerator.items.MyMaterial; -import goodgenerator.loader.Loaders; -import goodgenerator.util.CrackRecipeAdder; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -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_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class MultiNqGenerator extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable { - - protected IStructureDefinition multiDefinition = null; - protected long leftEnergy = 0; - protected long trueOutput = 0; - protected int trueEff = 0; - protected FluidStack lockedFluid = null; - protected int times = 1; - protected int basicOutput; - - private static final List> excitedLiquid; - - private static final List> coolant; - - static { - excitedLiquid = Arrays.asList( - new Pair<>(MaterialsUEVplus.Space.getMolten(20L), ExcitedLiquidCoe[0]), - new Pair<>(MyMaterial.atomicSeparationCatalyst.getMolten(20), ExcitedLiquidCoe[1]), - new Pair<>(Materials.Naquadah.getMolten(20L), ExcitedLiquidCoe[2]), - new Pair<>(Materials.Uranium235.getMolten(180L), ExcitedLiquidCoe[3]), - new Pair<>(Materials.Caesium.getMolten(180L), ExcitedLiquidCoe[4])); - coolant = Arrays.asList( - new Pair<>(MaterialsUEVplus.Time.getMolten(20L), CoolantEfficiency[0]), - new Pair<>(FluidRegistry.getFluidStack("cryotheum", 1000), CoolantEfficiency[1]), - new Pair<>(Materials.SuperCoolant.getFluid(1000L), CoolantEfficiency[2]), - new Pair<>(FluidRegistry.getFluidStack("ic2coolant", 1000), CoolantEfficiency[3])); - } - - @Override - public void construct(ItemStack itemStack, boolean hintsOnly) { - structureBuild_EM(mName, 3, 7, 0, itemStack, hintsOnly); - } - - @Override - public String[] getStructureDescription(ItemStack itemStack) { - return DescTextLocalization.addText("MultiNqGenerator.hint", 8); - } - - public final boolean addToGeneratorList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } else { - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { - return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoMulti) { - return this.eDynamoMulti.add((GT_MetaTileEntity_Hatch_DynamoMulti) aMetaTileEntity); - } else { - return false; - } - } - } - } - - @Override - public IStructureDefinition getStructure_EM() { - if (multiDefinition == null) { - multiDefinition = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { - { "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA" }, - { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, - { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, - { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, - { "N N", " ", " CCC ", " CPC ", " CCC ", " ", "N N" }, - { "AAAAAAA", "A A", "A CCC A", "A CPC A", "A CCC A", "A A", "AAAAAAA" }, - { "ANNNNNA", "N N", "N CCC N", "N CPC N", "N CCC N", "N N", "ANNNNNA" }, - { "XXX~XXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX" }, })) - .addElement( - 'X', - ofChain( - buildHatchAdder(MultiNqGenerator.class) - .atLeast( - HatchElement.DynamoMulti.or(GT_HatchElement.Dynamo), - GT_HatchElement.InputHatch, - GT_HatchElement.OutputHatch, - GT_HatchElement.Maintenance) - .casingIndex(44) - .dot(1) - .build(), - ofBlock(GregTech_API.sBlockCasings3, 12))) - .addElement('A', ofBlock(GregTech_API.sBlockCasings3, 12)) - .addElement('N', ofBlock(Loaders.radiationProtectionSteelFrame, 0)) - .addElement('C', ofBlock(Loaders.MAR_Casing, 0)) - .addElement('P', ofBlock(GregTech_API.sBlockCasings2, 15)) - .build(); - } - return multiDefinition; - } - - public MultiNqGenerator(String name) { - super(name); - } - - public MultiNqGenerator(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.times = aNBT.getInteger("mTimes"); - this.leftEnergy = aNBT.getLong("mLeftEnergy"); - this.basicOutput = aNBT.getInteger("mbasicOutput"); - if (FluidRegistry.getFluid(aNBT.getString("mLockedFluidName")) != null) this.lockedFluid = new FluidStack( - FluidRegistry.getFluid(aNBT.getString("mLockedFluidName")), - aNBT.getInteger("mLockedFluidAmount")); - else this.lockedFluid = null; - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mTimes", this.times); - aNBT.setLong("mLeftEnergy", this.leftEnergy); - aNBT.setInteger("mbasicOutput", this.basicOutput); - if (lockedFluid != null) { - aNBT.setString( - "mLockedFluidName", - this.lockedFluid.getFluid() - .getName()); - aNBT.setInteger("mLockedFluidAmount", this.lockedFluid.amount); - } - super.saveNBTData(aNBT); - } - - @Override - public RecipeMap getRecipeMap() { - return GoodGeneratorRecipeMaps.naquadahReactorFuels; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - @Override - public @NotNull CheckRecipeResult checkProcessing_EM() { - - ArrayList tFluids = getStoredFluids(); - for (int i = 0; i < tFluids.size() - 1; i++) { - for (int j = i + 1; j < tFluids.size(); j++) { - if (GT_Utility.areFluidsEqual(tFluids.get(i), tFluids.get(j))) { - if ((tFluids.get(i)).amount >= (tFluids.get(j)).amount) { - tFluids.remove(j--); - } else { - tFluids.remove(i--); - break; - } - } - } - } - - GT_Recipe tRecipe = GoodGeneratorRecipeMaps.naquadahReactorFuels - .findRecipe(this.getBaseMetaTileEntity(), true, 1 << 30, tFluids.toArray(new FluidStack[0])); - if (tRecipe != null) { - Pair excitedInfo = getExcited(tFluids.toArray(new FluidStack[0]), false); - int pall = excitedInfo == null ? 1 : excitedInfo.getValue(); - if (consumeFuel( - CrackRecipeAdder.copyFluidWithAmount(tRecipe.mFluidInputs[0], pall), - tFluids.toArray(new FluidStack[0]))) { - mOutputFluids = new FluidStack[] { - CrackRecipeAdder.copyFluidWithAmount(tRecipe.mFluidOutputs[0], pall) }; - basicOutput = tRecipe.mSpecialValue; - times = pall; - lockedFluid = excitedInfo == null ? null : excitedInfo.getKey(); - mMaxProgresstime = tRecipe.mDuration; - return CheckRecipeResultRegistry.GENERATING; - } - } - - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - @Override - public boolean onRunningTick(ItemStack stack) { - if (this.getBaseMetaTileEntity() - .isServerSide()) { - if (mMaxProgresstime != 0 && mProgresstime % 20 == 0) { - // If there's no startRecipeProcessing, ME input hatch wouldn't work - startRecipeProcessing(); - FluidStack[] input = getStoredFluids().toArray(new FluidStack[0]); - int time = 1; - if (LiquidAirConsumptionPerSecond != 0 - && !consumeFuel(Materials.LiquidAir.getFluid(LiquidAirConsumptionPerSecond), input)) { - this.mEUt = 0; - this.trueEff = 0; - this.trueOutput = 0; - endRecipeProcessing(); - return true; - } - int eff = consumeCoolant(input); - if (consumeFuel(lockedFluid, input)) time = times; - this.mEUt = basicOutput * eff * time / 100; - this.trueEff = eff; - this.trueOutput = (long) basicOutput * (long) eff * (long) time / 100; - endRecipeProcessing(); - } - addAutoEnergy(trueOutput); - } - return true; - } - - @Override - public String[] getInfoData() { - String[] info = super.getInfoData(); - info[4] = "Probably makes: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(Math.abs(this.trueOutput)) - + EnumChatFormatting.RESET - + " EU/t"; - info[6] = "Problems: " + EnumChatFormatting.RED - + (this.getIdealStatus() - this.getRepairStatus()) - + EnumChatFormatting.RESET - + " Efficiency: " - + EnumChatFormatting.YELLOW - + trueEff - + EnumChatFormatting.RESET - + " %"; - return info; - } - - public boolean consumeFuel(FluidStack target, FluidStack[] input) { - if (target == null) return false; - for (FluidStack inFluid : input) { - if (inFluid != null && inFluid.isFluidEqual(target) && inFluid.amount >= target.amount) { - inFluid.amount -= target.amount; - return true; - } - } - return false; - } - - public Pair getExcited(FluidStack[] input, boolean isConsume) { - for (Pair fluidPair : excitedLiquid) { - FluidStack tFluid = fluidPair.getKey(); - for (FluidStack inFluid : input) { - if (inFluid != null && inFluid.isFluidEqual(tFluid) && inFluid.amount >= tFluid.amount) { - if (isConsume) inFluid.amount -= tFluid.amount; - return fluidPair; - } - } - } - return null; - } - - /** - * Finds valid coolant from given inputs and consumes if found. - * - * @param input Fluid inputs. - * @return Efficiency of the coolant. 100 if not found. - */ - private int consumeCoolant(FluidStack[] input) { - for (Pair fluidPair : coolant) { - FluidStack tFluid = fluidPair.getKey(); - for (FluidStack inFluid : input) { - if (inFluid != null && inFluid.isFluidEqual(tFluid) && inFluid.amount >= tFluid.amount) { - inFluid.amount -= tFluid.amount; - return fluidPair.getValue(); - } - } - } - return 100; - } - - public void addAutoEnergy(long outputPower) { - if (this.eDynamoMulti.size() > 0) for (GT_MetaTileEntity_Hatch tHatch : this.eDynamoMulti) { - long voltage = tHatch.maxEUOutput(); - long power = voltage * tHatch.maxAmperesOut(); - long outputAmperes; - if (outputPower > power) doExplosion(8 * GT_Utility.getTier(power)); - if (outputPower >= voltage) { - leftEnergy += outputPower; - outputAmperes = leftEnergy / voltage; - leftEnergy -= outputAmperes * voltage; - addEnergyOutput_EM(voltage, outputAmperes); - } else { - addEnergyOutput_EM(outputPower, 1); - } - } - if (this.mDynamoHatches.size() > 0) for (GT_MetaTileEntity_Hatch tHatch : this.mDynamoHatches) { - long voltage = tHatch.maxEUOutput(); - long power = voltage * tHatch.maxAmperesOut(); - long outputAmperes; - if (outputPower > power) doExplosion(8 * GT_Utility.getTier(power)); - if (outputPower >= voltage) { - leftEnergy += outputPower; - outputAmperes = leftEnergy / voltage; - leftEnergy -= outputAmperes * voltage; - addEnergyOutput_EM(voltage, outputAmperes); - } else { - addEnergyOutput_EM(outputPower, 1); - } - } - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return structureCheck_EM(mName, 3, 7, 0) && mMaintenanceHatches.size() == 1 - && mDynamoHatches.size() + eDynamoMulti.size() == 1; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 0; - } - - @Override - public int getPollutionPerTick(ItemStack aStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new MultiNqGenerator(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Naquadah Reactor") - .addInfo("Controller block for the Naquadah Reactor") - .addInfo("Environmentally Friendly!") - .addInfo("Generate power from high-energy liquids.") - .addInfo( - String.format( - "Consumes %d L/s Liquid Air to keep running, otherwise" + EnumChatFormatting.YELLOW - + " it will void your fuel" - + EnumChatFormatting.GRAY - + ".", - LiquidAirConsumptionPerSecond)) - .addInfo("Input liquid nuclear fuel or liquid naquadah fuel.") - .addInfo( - "The reactor will explode when there is more than" + EnumChatFormatting.RED - + " ONE" - + EnumChatFormatting.GRAY - + " type of fuel in hatches!") - .addInfo("Can consume coolants to increase efficiency:") - .addInfo(String.format("IC2 Coolant | %d%% | 1000 L/s ", CoolantEfficiency[3])) - .addInfo(String.format("Super Coolant | %d%% | 1000 L/s", CoolantEfficiency[2])) - .addInfo(String.format("Cryotheum | %d%% | 1000 L/s", CoolantEfficiency[1])) - .addInfo(String.format("Tachyon Rich Temporal Fluid | %d%% | 20 L/s", CoolantEfficiency[0])) - .addInfo("Can consume excited liquid to increase the output power and fuel usage:") - .addInfo(String.format("Molten Caesium | %dx power | 180 L/s ", ExcitedLiquidCoe[4])) - .addInfo(String.format("Molten Uranium-235 | %dx power | 180 L/s", ExcitedLiquidCoe[3])) - .addInfo(String.format("Molten Naquadah | %dx power | 20 L/s", ExcitedLiquidCoe[2])) - .addInfo(String.format("Molten Atomic Separation Catalyst | %dx power | 20 L/s", ExcitedLiquidCoe[1])) - .addInfo(String.format("Spatially Enlarged Fluid | %dx power | 20 L/s", ExcitedLiquidCoe[0])) - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .beginStructureBlock(7, 8, 7, true) - .addController("Front bottom") - .addDynamoHatch("Any bottom layer casing, only accept ONE!") - .addInputHatch("Any bottom layer casing") - .addOutputHatch("Any bottom layer casing") - .addMaintenanceHatch("Any bottom layer casing") - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - @SuppressWarnings("ALL") - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(44), - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE), - TextureFactory.builder() - .addIcon(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE_GLOW) - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(44), - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT) }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(44) }; - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 3, 7, 0, elementBudget, env, false, true); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java b/src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java deleted file mode 100644 index f3a4fd7d3c..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/NeutronActivator.java +++ /dev/null @@ -1,515 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; -import goodgenerator.blocks.tileEntity.GTMetaTileEntity.NeutronAccelerator; -import goodgenerator.blocks.tileEntity.GTMetaTileEntity.NeutronSensor; -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import goodgenerator.util.ItemRefer; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.objects.XSTR; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; - -public class NeutronActivator extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable { - - protected static IStructureDefinition multiDefinition = null; - protected final ArrayList mNeutronAccelerator = new ArrayList<>(); - protected final ArrayList mNeutronSensor = new ArrayList<>(); - protected int casingAmount = 0; - protected int height = 0; - protected int eV = 0, mCeil = 0, mFloor = 0; - private GT_Recipe lastRecipe; - protected static final NumberFormatMUI numberFormat; - static { - numberFormat = new NumberFormatMUI(); - numberFormat.setMinimumFractionDigits(2); - numberFormat.setMaximumFractionDigits(2); - } - final XSTR R = new XSTR(); - - private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon("icons/NeutronActivator_On"); - private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( - "icons/NeutronActivator_On_GLOW"); - private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon( - "icons/NeutronActivator_Off"); - private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( - "icons/NeutronActivator_Off_GLOW"); - - protected final String NA_BOTTOM = mName + "buttom"; - protected final String NA_MID = mName + "mid"; - protected final String NA_TOP = mName + "top"; - - public NeutronActivator(String name) { - super(name); - } - - public NeutronActivator(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return GT_OverclockCalculator.ofNoOverclock(recipe) - .setDuration((int) Math.ceil(recipe.mDuration * Math.pow(0.9f, height - 4))) - .setDurationUnderOneTickSupplier(() -> recipe.mDuration * Math.pow(0.9f, height - 4)); - } - - @NotNull - @Override - public CheckRecipeResult process() { - CheckRecipeResult result = super.process(); - if (!result.wasSuccessful()) { - return result; - } - mFloor = (lastRecipe.mSpecialValue % 10000) * 1000000; - mCeil = (lastRecipe.mSpecialValue / 10000) * 1000000; - if (eV > mCeil || eV < mFloor) { - setOutputItems(ItemRefer.Radioactive_Waste.get(4)); - } - // NA does not consume power, its hatches do. Set it to 0 to be sure - calculatedEut = 0; - return result; - } - }; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - // NA does not use power, to prevent GT_ParallelHelper from failing we trick it into thinking - // we have infinite power - logic.setAvailableVoltage(Long.MAX_VALUE); - logic.setAvailableAmperage(1); - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - batchMode = !batchMode; - if (batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); - } - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack aStack) { - return 0; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - eV = aNBT.getInteger("mKeV"); - mCeil = aNBT.getInteger("mCeil"); - mFloor = aNBT.getInteger("mFloor"); - height = aNBT.getInteger("height"); - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mKeV", eV); - aNBT.setInteger("mCeil", mCeil); - aNBT.setInteger("mFloor", mFloor); - aNBT.setInteger("height", height); - super.saveNBTData(aNBT); - } - - @Override - public RecipeMap getRecipeMap() { - return GoodGeneratorRecipeMaps.neutronActivatorRecipes; - } - - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Neutron Activator") - .addInfo("Controller block for the Neutron Activator") - .addInfo("Superluminal-velocity Motion.") - .addInfo("The minimum height of the Speeding Pipe Casing is 4.") - .addInfo("Per extra Speeding Pipe Casing will give time discount.") - .addInfo("But it will reduce the Neutron Accelerator efficiency.") - .addInfo("You need to input energy to the Neutron Accelerator to get it running.") - .addInfo("It will output correct products with Specific Neutron Kinetic Energy.") - .addInfo("Otherwise it will output trash.") - .addInfo("The Neutron Kinetic Energy will decrease 72KeV/s when no Neutron Accelerator is running.") - .addInfo( - "It will explode when the Neutron Kinetic Energy is over" + EnumChatFormatting.RED - + " 1200MeV" - + EnumChatFormatting.GRAY - + ".") - .addInfo("Inputting Graphite/Beryllium dust can reduce 10MeV per dust immediately.") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .addController("Front bottom") - .addInputHatch("Hint block with dot 1") - .addInputBus("Hint block with dot 1") - .addOutputHatch("Hint block with dot 2") - .addOutputBus("Hint block with dot 2") - .addMaintenanceHatch("Hint block with dot 2") - .addOtherStructurePart("Neutron Accelerator", "Hint block with dot 2") - .addOtherStructurePart("Neutron Sensor", "Hint block with dot 2") - .addCasingInfoRange("Clean Stainless Steel Machine Casing", 7, 31, false) - .addCasingInfoExactly("Processor Machine Casing", 18, false) - .addCasingInfoMin("Steel Frame Box", 16, false) - .addCasingInfoMin("Speeding Pipe Casing", 4, false) - .addCasingInfoMin("EV+ Glass", 32, false) - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public IStructureDefinition getStructure_EM() { - if (multiDefinition == null) { - multiDefinition = StructureDefinition.builder() - .addShape(NA_TOP, transpose(new String[][] { { "CCCCC", "CDDDC", "CDDDC", "CDDDC", "CCCCC" } })) - .addShape(NA_MID, transpose(new String[][] { { "F F", " GGG ", " GPG ", " GGG ", "F F" } })) - .addShape(NA_BOTTOM, transpose(new String[][] { { "XX~XX", "XDDDX", "XDDDX", "XDDDX", "XXXXX" } })) - .addElement( - 'C', - ofChain( - buildHatchAdder(NeutronActivator.class) - .atLeast(GT_HatchElement.InputHatch, GT_HatchElement.InputBus, GT_HatchElement.Maintenance) - .casingIndex(49) - .dot(1) - .build(), - onElementPass(NeutronActivator::onCasingFound, ofBlock(GregTech_API.sBlockCasings4, 1)))) - .addElement('D', ofBlock(GregTech_API.sBlockCasings2, 6)) - .addElement('F', ofFrame(Materials.Steel)) - .addElement('G', Glasses.chainAllGlasses()) - .addElement('P', ofBlock(Loaders.speedingPipe, 0)) - .addElement( - 'X', - ofChain( - buildHatchAdder(NeutronActivator.class) - .atLeast( - GT_HatchElement.OutputHatch, - GT_HatchElement.OutputBus, - GT_HatchElement.Maintenance, - NeutronHatchElement.NeutronAccelerator, - NeutronHatchElement.NeutronSensor) - .casingIndex(49) - .dot(2) - .build(), - onElementPass(NeutronActivator::onCasingFound, ofBlock(GregTech_API.sBlockCasings4, 1)))) - .build(); - } - return multiDefinition; - } - - @Override - protected void clearHatches_EM() { - super.clearHatches_EM(); - this.mNeutronAccelerator.clear(); - this.mNeutronSensor.clear(); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.casingAmount = 0; - if (!structureCheck_EM(NA_BOTTOM, 2, 0, 0)) return false; - height = 0; - while (structureCheck_EM(NA_MID, 2, height + 1, 0)) { - height++; - } - if (height < 4) return false; - return structureCheck_EM(NA_TOP, 2, height + 1, 0) && casingAmount >= 7; - } - - public final boolean addAcceleratorAndSensor(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof NeutronAccelerator) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.mNeutronAccelerator.add((NeutronAccelerator) aMetaTileEntity); - } else if (aMetaTileEntity instanceof NeutronSensor) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.mNeutronSensor.add((NeutronSensor) aMetaTileEntity); - } - } - return false; - } - - public int maxNeutronKineticEnergy() { - return 1200000000; - } - - public int getCurrentNeutronKineticEnergy() { - return eV; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean protectsExcessItem() { - return !eSafeVoid; - } - - @Override - public boolean protectsExcessFluid() { - return !eSafeVoid; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new NeutronActivator(this.mName); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - boolean anyWorking = false; - if (aBaseMetaTileEntity.isServerSide()) { - if (this.eV > 0 && (aTick % 20 == 0 || eV > mCeil)) { - tryUseModerator(); - } - - for (NeutronAccelerator tHatch : mNeutronAccelerator) { - if (tHatch.getBaseMetaTileEntity() - .isActive() && this.getRepairStatus() == this.getIdealStatus()) { - anyWorking = true; - this.eV += Math.max( - (R.nextInt(tHatch.getMaxEUConsume() + 1) + tHatch.getMaxEUConsume()) * 10 - * Math.pow(0.95, height - 4), - 10); - } - } - if (!anyWorking) { - if (this.eV >= 72000 && aTick % 20 == 0) { - this.eV -= 72000; - } else if (this.eV > 0 && aTick % 20 == 0) { - this.eV = 0; - } - } - if (this.eV < 0) this.eV = 0; - if (this.eV > maxNeutronKineticEnergy()) doExplosion(4 * 32); - - for (NeutronSensor tHatch : mNeutronSensor) { - tHatch.updateRedstoneOutput(this.eV); - } - - if (mProgresstime < mMaxProgresstime && (eV > mCeil || eV < mFloor)) { - this.mOutputFluids = null; - this.mOutputItems = new ItemStack[] { ItemRefer.Radioactive_Waste.get(4) }; - } - } - } - - private void tryUseModerator() { - startRecipeProcessing(); - for (ItemStack input : getStoredInputs()) { - if (input.isItemEqual(Materials.Graphite.getDust(1)) || input.isItemEqual(Materials.Beryllium.getDust(1))) { - int consume = Math.min(this.eV / 10000000, input.stackSize); - depleteInput(GT_Utility.copyAmount(consume, input)); - this.eV -= 10000000 * consume; - } - } - endRecipeProcessing(); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM(NA_BOTTOM, 2, 0, 0, stackSize, hintsOnly); - int heights = stackSize.stackSize + 3; - structureBuild_EM(NA_TOP, 2, heights + 1, 0, stackSize, hintsOnly); - while (heights > 0) { - structureBuild_EM(NA_MID, 2, heights, 0, stackSize, hintsOnly); - heights--; - } - } - - @Override - public String[] getStructureDescription(ItemStack itemStack) { - return DescTextLocalization.addText("NeutronActivator.hint", 7); - } - - @Override - public String[] getInfoData() { - int currentNKEInput = 0; - boolean anyWorking = false; - for (NeutronAccelerator tHatch : mNeutronAccelerator) { - if (tHatch.getBaseMetaTileEntity() - .isActive()) { - currentNKEInput += (R.nextInt(tHatch.getMaxEUConsume() + 1) + tHatch.getMaxEUConsume()) * 10 - * Math.pow(0.95, height - 4); - anyWorking = true; - } - } - if (!anyWorking) currentNKEInput = -72000; - return new String[] { "Progress:", - EnumChatFormatting.GREEN + Integer.toString(this.mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + this.mMaxProgresstime / 20 - + EnumChatFormatting.RESET - + " s", - "Current Neutron Kinetic Energy Input: " + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(currentNKEInput) - + EnumChatFormatting.RESET - + "eV", - StatCollector.translateToLocal("scanner.info.NA") + " " - + EnumChatFormatting.LIGHT_PURPLE - + GT_Utility.formatNumbers(getCurrentNeutronKineticEnergy()) - + EnumChatFormatting.RESET - + "eV" }; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(49), - TextureFactory.of(textureFontOn), TextureFactory.builder() - .addIcon(textureFontOn_Glow) - .glow() - .build() }; - else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(49), - TextureFactory.of(textureFontOff), TextureFactory.builder() - .addIcon(textureFontOff_Glow) - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(49) }; - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - - int built = survivialBuildPiece(NA_BOTTOM, stackSize, 2, 0, 0, elementBudget, env, false, true); - if (built >= 0) return built; - int heights = stackSize.stackSize + 3; - for (int i = 1; i <= heights; i++) { - built = survivialBuildPiece(NA_MID, stackSize, 2, i, 0, elementBudget, env, false, true); - if (built >= 0) return built; - } - return survivialBuildPiece(NA_TOP, stackSize, 2, heights + 1, 0, elementBudget, env, false, true); - } - - protected void onCasingFound() { - casingAmount++; - } - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - - screenElements - .widget( - new TextWidget(StatCollector.translateToLocal("gui.NeutronActivator.0")) - .setDefaultColor(COLOR_TEXT_WHITE.get())) - .widget( - new TextWidget().setStringSupplier(() -> numberFormat.format(eV / 1_000_000d) + " MeV") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> eV, val -> eV = val)); - } - - private enum NeutronHatchElement implements IHatchElement { - - NeutronSensor(NeutronActivator::addAcceleratorAndSensor, NeutronSensor.class) { - - @Override - public long count(NeutronActivator t) { - return t.mNeutronSensor.size(); - } - }, - NeutronAccelerator(NeutronActivator::addAcceleratorAndSensor, NeutronAccelerator.class) { - - @Override - public long count(NeutronActivator t) { - return t.mNeutronAccelerator.size(); - } - }; - - private final List> mteClasses; - private final IGT_HatchAdder adder; - - @SafeVarargs - NeutronHatchElement(IGT_HatchAdder adder, Class... mteClasses) { - this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); - this.adder = adder; - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - public IGT_HatchAdder adder() { - return adder; - } - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java b/src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java deleted file mode 100644 index 3d8c0df58c..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/PreciseAssembler.java +++ /dev/null @@ -1,529 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.github.bartimaeusnek.bartworks.util.BW_Util.ofGlassTieredMixed; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_StructureUtility.ofFrame; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; - -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureUtility; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; - -import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; -import goodgenerator.client.GUI.GG_UITextures; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.GregTechTileClientEvents; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_HatchElementBuilder; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.IDualInputHatch; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class PreciseAssembler extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements IConstructable, ISurvivalConstructable { - - private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QTANK"); - private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( - "iconsets/OVERLAY_QTANK_GLOW"); - private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QCHEST"); - private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( - "iconsets/OVERLAY_QCHEST_GLOW"); - - protected IStructureDefinition multiDefinition = null; - protected int casingAmount; - protected int casingTier; - protected int machineTier; - protected int mode; - protected int energyHatchTier; - private static final int CASING_INDEX = 1541; - - public PreciseAssembler(String name) { - super(name); - } - - public PreciseAssembler(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (multiDefinition == null) { - multiDefinition = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC" }, - { "F F", "CGGGGGGGC", "C-------C", "CGGGGGGGC", "F F" }, - { "F F", "CGGGGGGGC", "C-------C", "CGGGGGGGC", "F F" }, - { "F F", "CGGGGGGGC", "C-------C", "CGGGGGGGC", "F F" }, - { "CCCC~CCCC", "CMMMMMMMC", "CMMMMMMMC", "CMMMMMMMC", "CCCCCCCCC" } })) - .addElement( - 'C', - withChannel( - "unit casing", - GT_HatchElementBuilder.builder() - .atLeast( - InputBus, - InputHatch, - OutputHatch, - OutputBus, - Maintenance, - Muffler, - ExoticEnergy.or(Energy)) - .adder(PreciseAssembler::addToPAssList) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain( - onElementPass( - x -> x.casingAmount++, - StructureUtility.ofBlocksTiered( - (block, meta) -> block == Loaders.impreciseUnitCasing ? -1 - : block == Loaders.preciseUnitCasing ? meta : -2, - ImmutableList.of( - Pair.of(Loaders.impreciseUnitCasing, 0), - Pair.of(Loaders.preciseUnitCasing, 0), - Pair.of(Loaders.preciseUnitCasing, 1), - Pair.of(Loaders.preciseUnitCasing, 2), - Pair.of(Loaders.preciseUnitCasing, 3)), - -3, - PreciseAssembler::setCasingTier, - PreciseAssembler::getCasingTier))))) - .addElement('F', ofFrame(Materials.TungstenSteel)) - .addElement('G', withChannel("glass", ofGlassTieredMixed((byte) 4, (byte) 127, 2))) - .addElement( - 'M', - withChannel( - "machine casing", - StructureUtility.ofBlocksTiered( - (block, meta) -> block == GregTech_API.sBlockCasings1 ? meta : -2, - IntStream.range(0, 10) - .mapToObj( - meta -> org.apache.commons.lang3.tuple.Pair.of(GregTech_API.sBlockCasings1, meta)) - .collect(Collectors.toList()), - -1, - PreciseAssembler::setMachineTier, - PreciseAssembler::getMachineTier))) - .build(); - } - return multiDefinition; - } - - public boolean addToPAssList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - return mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } - if (aMetaTileEntity instanceof IDualInputHatch) { - return mDualInputHatches.add((IDualInputHatch) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - return mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - return mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) { - return mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - return mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - return mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { - return mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti) { - return mExoticEnergyHatches.add((GT_MetaTileEntity_Hatch_EnergyMulti) aMetaTileEntity); - } - return false; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - casingTier = aNBT.getInteger("casingTier"); - machineTier = aNBT.getInteger("machineTier"); - mode = aNBT.getInteger("RunningMode"); - super.loadNBTData(aNBT); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("casingTier", casingTier); - aNBT.setInteger("machineTier", machineTier); - aNBT.setInteger("RunningMode", mode); - super.saveNBTData(aNBT); - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (getBaseMetaTileEntity().isServerSide()) { - this.mode = (this.mode + 1) % 2; - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("preciseassembler.chat." + this.mode)); - } - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - if (mode == 0) { - if (recipe.mSpecialValue > (casingTier + 1)) { - return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); - } - } - if (availableVoltage < recipe.mEUt) { - return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setSpeedBoost(mode == 0 ? 1 : 0.5F); - } - }.setMaxParallelSupplier(() -> mode == 0 ? 1 : (int) Math.pow(2, 4 + (casingTier + 1))); - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - boolean useSingleAmp = mEnergyHatches.size() == 1 && mExoticEnergyHatches.isEmpty(); - logic.setAvailableVoltage(getMachineVoltageLimit()); - logic.setAvailableAmperage(useSingleAmp ? 1 : getMaxInputAmps()); - logic.setAmperageOC(true); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - public long getMachineVoltageLimit() { - if (machineTier < 0) return 0; - if (machineTier >= 9) return GT_Values.V[energyHatchTier]; - else return GT_Values.V[Math.min(machineTier, energyHatchTier)]; - } - - @Override - public RecipeMap getRecipeMap() { - if (this.mode == 0) return GoodGeneratorRecipeMaps.preciseAssemblerRecipes; - else return RecipeMaps.assemblerRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(GoodGeneratorRecipeMaps.preciseAssemblerRecipes, RecipeMaps.assemblerRecipes); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 4, 4, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 4, 4, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.machineTier = -1; - this.casingAmount = 0; - this.casingTier = -3; - this.energyHatchTier = 0; - if (checkPiece(mName, 4, 4, 0)) { - energyHatchTier = checkEnergyHatchTier(); - if (casingTier >= -1) { - reUpdate(CASING_INDEX + casingTier); - } - getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); - return casingAmount >= 42 && machineTier >= 0 - && casingTier >= -1 - && mMaintenanceHatches.size() == 1 - && !mMufflerHatches.isEmpty(); - } - return false; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Precise Assembler/Assembler") - .addInfo("Controller block for the Precise Assembler") - .addInfo("The error is no more than 7nm.") - .addInfo("Can assemble precise component in Precise Mode.") - .addInfo("Can work like a normal assembler in Normal Mode.") - .addInfo("Use screwdriver to change mode.") - .addInfo("Machine Casing and Energy Hatch limits the voltage tier the machine can work on.") - .addInfo("UHV Machine Casing will unlock all voltage, but you still need good Energy Hatch.") - .addInfo("Precise Electronic Unit Casing won't limit recipe in Normal Mode.") - .addInfo("But gives more parallel with more advanced one.") - .addInfo("It is 100% faster in Normal Mode.") - .addInfo("Imprecise (MK-0) = 16x, MK-I = 32x, MK-II = 64x, MK-III = 128x, MK-IV = 256x") - .addPollutionAmount(getPollutionPerSecond(null)) - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .beginStructureBlock(9, 5, 5, true) - .addController("Front bottom") - .addCasingInfoExactly("Machine Casing", 21, true) - .addCasingInfoExactly("Glass (EV+)", 42, false) - .addCasingInfoRange("Precise Electronic Unit Casing", 42, 86, true) - .addInputHatch("Any Casing") - .addInputBus("Any Casing") - .addOutputHatch("Any Casing") - .addOutputBus("Any Casing") - .addEnergyHatch("Any Casing") - .addMufflerHatch("Any Casing") - .addMaintenanceHatch("Any Casing") - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return 780; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return DescTextLocalization.addText("PreciseAssembler.hint", 7); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new PreciseAssembler(this.mName); - } - - private int checkEnergyHatchTier() { - int tier = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - tier = Math.max(tHatch.mTier, tier); - } - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(mExoticEnergyHatches)) { - tier = Math.max(tHatch.mTier, tier); - } - return tier; - } - - public int getCasingTier() { - return casingTier; - } - - public void setCasingTier(int i) { - casingTier = i; - } - - public int getMachineTier() { - return machineTier; - } - - public void setMachineTier(int i) { - machineTier = i; - } - - public void reUpdate(int texture) { - for (IDualInputHatch hatch : mDualInputHatches) { - if (((MetaTileEntity) hatch).isValid()) { - hatch.updateTexture(texture); - } - } - for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mInputHatches)) { - hatch.updateTexture(texture); - } - for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mInputBusses)) { - hatch.updateTexture(texture); - } - for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mOutputHatches)) { - hatch.updateTexture(texture); - } - for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mOutputBusses)) { - hatch.updateTexture(texture); - } - for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mEnergyHatches)) { - hatch.updateTexture(texture); - } - for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mMaintenanceHatches)) { - hatch.updateTexture(texture); - } - for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mMufflerHatches)) { - hatch.updateTexture(texture); - } - for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(mExoticEnergyHatches)) { - hatch.updateTexture(texture); - } - } - - @Override - public byte getUpdateData() { - return (byte) casingTier; - } - - @Override - public void receiveClientEvent(byte aEventID, byte aValue) { - super.receiveClientEvent(aEventID, aValue); - if (aEventID == GregTechTileClientEvents.CHANGE_CUSTOM_DATA && ((aValue & 0x80) == 0 || aValue == -1)) { - casingTier = aValue; - } - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - int t = Math.max(getCasingTier(), -1); - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX + t), - TextureFactory.of(textureFontOn), TextureFactory.builder() - .addIcon(textureFontOn_Glow) - .glow() - .build() }; - else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX + t), - TextureFactory.of(textureFontOff), TextureFactory.builder() - .addIcon(textureFontOff_Glow) - .glow() - .build() }; - } else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX + t) }; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - builder.widget( - new CycleButtonWidget().setToggle(() -> mode == 1, val -> mode = val ? 1 : 0) - .setTextureGetter( - state -> state == 1 ? GG_UITextures.OVERLAY_BUTTON_ASSEMBLER_MODE - : GG_UITextures.OVERLAY_BUTTON_PRECISE_MODE) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .setPos(80, 91) - .setSize(16, 16) - .dynamicTooltip( - () -> Collections.singletonList(StatCollector.translateToLocal("preciseassembler.chat." + mode))) - .setUpdateTooltipEveryTick(true) - .setTooltipShowUpDelay(TOOLTIP_DELAY)); - } - - @Override - public boolean isInputSeparationEnabled() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("mode", mode); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector.translateToLocal("GT5U.GTPP_MULTI_PRECISE_ASSEMBLER.mode." + tag.getInteger("mode")) - + EnumChatFormatting.RESET); - } - -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/SupercriticalFluidTurbine.java b/src/main/java/goodgenerator/blocks/tileEntity/SupercriticalFluidTurbine.java deleted file mode 100644 index f04cf2eecb..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/SupercriticalFluidTurbine.java +++ /dev/null @@ -1,186 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static gregtech.api.util.GT_Utility.trans; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_LargeTurbineBase; -import goodgenerator.loader.Loaders; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.XSTR; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class SupercriticalFluidTurbine extends GT_MetaTileEntity_LargeTurbineBase { - - private boolean looseFit = false; - - private static final IIconContainer turbineOn = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_05"); - private static final IIconContainer turbineOff = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_15"); - private static final IIconContainer turbineEmpty = new Textures.BlockIcons.CustomIcon("icons/turbines/TURBINE_25"); - - public SupercriticalFluidTurbine(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public SupercriticalFluidTurbine(String aName) { - super(aName); - } - - @Override - public int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff) { - if (looseFit) { - aOptFlow *= 4; - double pow = Math.pow(1.1f, ((aBaseEff - 7500) / 10000F) * 20f); - if (aBaseEff > 10000) { - aOptFlow *= pow; - aBaseEff = 7500; - } else if (aBaseEff > 7500) { - aOptFlow *= pow; - aBaseEff *= 0.75f; - } else { - aBaseEff *= 0.75f; - } - } - int tEU = 0; - int totalFlow = 0; // Byproducts are based on actual flow - int flow = 0; - int remainingFlow = GT_Utility.safeInt((long) (aOptFlow * 1.25f)); // Allowed to use up to 125% of optimal flow. - // Variable required outside of loop for - // multi-hatch scenarios. - this.realOptFlow = aOptFlow; - - storedFluid = 0; - FluidStack tSCSteam = FluidRegistry.getFluidStack("supercriticalsteam", 1); - for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { - final FluidStack aFluidStack = aFluids.get(i); - if (tSCSteam.isFluidEqual(aFluidStack)) { - flow = Math.min(aFluidStack.amount, remainingFlow); - depleteInput(new FluidStack(aFluidStack, flow)); - this.storedFluid += aFluidStack.amount; - remainingFlow -= flow; - totalFlow += flow; - } else if (GT_ModHandler.isAnySteam(aFluidStack)) { - depleteInput(new FluidStack(aFluidStack, aFluidStack.amount)); - } - } - if (totalFlow <= 0) return 0; - tEU = totalFlow; - addOutput(GT_ModHandler.getSteam(totalFlow * 100)); - if (totalFlow == aOptFlow) { - tEU = GT_Utility.safeInt((long) tEU * (long) aBaseEff / 10000L); - } else { - float efficiency = 1.0f - Math.abs((totalFlow - aOptFlow) / (float) aOptFlow); - tEU *= efficiency; - tEU = Math.max(1, GT_Utility.safeInt((long) tEU * (long) aBaseEff / 10000L)); - } - - if (tEU > maxPower) { - tEU = GT_Utility.safeInt(maxPower); - } - - return tEU * 100; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getFrontFacing()) { - looseFit ^= true; - GT_Utility.sendChatToPlayer( - aPlayer, - looseFit ? trans("500", "Fitting: Loose - More Flow") - : trans("501", "Fitting: Tight - More Efficiency")); - } - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - // 2x more damage than normal turbine - return looseFit ? (XSTR.XSTR_INSTANCE.nextInt(2) == 0 ? 0 : 1) : 2; - } - - @Override - public String[] getInfoData() { - super.looseFit = looseFit; - return super.getInfoData(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("turbineFitting", looseFit); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - looseFit = aNBT.getBoolean("turbineFitting"); - } - - @Override - public Block getCasingBlock() { - return Loaders.supercriticalFluidTurbineCasing; - } - - @Override - public int getCasingMeta() { - return 0; - } - - @Override - public int getCasingTextureIndex() { - return 1538; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Supercritical Steam Turbine") - .addInfo("Controller block for Supercritical Fluid Turbine") - .addInfo("Needs a Turbine, place inside controller") - .addInfo("Use Supercritical Steam to generate power.") - .addInfo("Outputs 100L of Steam per 1L of SC Steam as well as producing power") - .addInfo("1L Supercritical Steam = 100 EU") - .addInfo("Extreme Heated Steam will cause more damage to the turbine.") - .addInfo("Power output depends on turbine and fitting") - .addInfo("Use screwdriver to adjust fitting of turbine") - .addSeparator() - .beginStructureBlock(3, 3, 4, true) - .addController("Front center") - .addCasingInfo("SC Turbine Casing", 24) - .addDynamoHatch("Back center", 1) - .addMaintenanceHatch("Side centered", 2) - .addInputHatch("Supercritical Fluid, Side centered", 2) - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new SupercriticalFluidTurbine(mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1538), - facing == side - ? (aActive ? TextureFactory.of(turbineOn) - : hasTurbine() ? TextureFactory.of(turbineOff) : TextureFactory.of(turbineEmpty)) - : Textures.BlockIcons.getCasingTextureForId(1538) }; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java b/src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java deleted file mode 100644 index 88f1edaacc..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/UniversalChemicalFuelEngine.java +++ /dev/null @@ -1,390 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.Textures.BlockIcons.*; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; -import goodgenerator.loader.Loaders; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.enums.TickTime; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.maps.FuelBackend; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; - -public class UniversalChemicalFuelEngine extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable { - - protected final double DIESEL_EFFICIENCY_COEFFICIENT = 0.04D; - protected final double GAS_EFFICIENCY_COEFFICIENT = 0.04D; - protected final double ROCKET_EFFICIENCY_COEFFICIENT = 0.005D; - protected final double EFFICIENCY_CEILING = 1.5D; - protected final int HEATING_TIMER = TickTime.SECOND * 10; - - private long tEff; - private int heatingTicks; - private boolean isStoppingSafe; - - private IStructureDefinition multiDefinition = null; - - public UniversalChemicalFuelEngine(String name) { - super(name); - super.useLongPower = true; - } - - public UniversalChemicalFuelEngine(int id, String name, String nameRegional) { - super(id, name, nameRegional); - super.useLongPower = true; - } - - public final boolean addMaintenance(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - } - } - return false; - } - - public final boolean addMuffler(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); - } - } - return false; - } - - public final boolean addInputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } - } - return false; - } - - public final boolean addDynamoHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoMulti) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.eDynamoMulti.add((GT_MetaTileEntity_Hatch_DynamoMulti) aMetaTileEntity); - } - } - return false; - } - - @Override - public IStructureDefinition getStructure_EM() { - if (multiDefinition == null) { - multiDefinition = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { - { "TTTTT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTMMT", "TTTTT" }, - { "TTTTT", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "SPCCI-", "TTTTT" }, - { "TT~TT", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "SPGGI-", "TTETT" }, - { "TTWTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT", "TTTTT" } })) - .addElement('T', ofBlock(GregTech_API.sBlockCasings4, 2)) - .addElement('W', GT_HatchElement.Maintenance.newAny(50, 1)) - .addElement('M', GT_HatchElement.Muffler.newAny(50, 2)) - .addElement('S', GT_HatchElement.InputHatch.newAny(50, 3)) - .addElement('E', GT_HatchElement.Dynamo.newAny(50, 4)) - .addElement('P', ofBlock(GregTech_API.sBlockCasings2, 14)) - .addElement('C', ofBlock(Loaders.titaniumPlatedCylinder, 0)) - .addElement('G', ofBlock(GregTech_API.sBlockCasings2, 4)) - .addElement('I', ofBlock(GregTech_API.sBlockCasings4, 13)) - .build(); - } - return multiDefinition; - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return structureCheck_EM(mName, 2, 2, 0); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM(mName, 2, 2, 0, stackSize, hintsOnly); - } - - @Override - public String[] getStructureDescription(ItemStack itemStack) { - return DescTextLocalization.addText("UniversalChemicalFuelEngine.hint", 11); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getPollutionPerTick(ItemStack aStack) { - return (int) Math.sqrt(this.getPowerFlow()) / 20; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Chemical Engine") - .addInfo("Controller block for the Chemical Engine") - .addInfo("BURNING BURNING BURNING") - .addInfo("Use combustible liquid to generate power.") - .addInfo("You need to supply Combustion Promoter to keep it running.") - .addInfo("It will consume all the fuel and promoter in the hatch every second.") - .addInfo("If the Dynamo Hatch's buffer fills up, the machine will stop.") - .addInfo("When turned on, there's 10-second period where the machine will not stop.") - .addInfo("Even if it doesn't stop, all the fuel in the hatch will be consumed.") - .addInfo("The efficiency is determined by the proportion of Combustion Promoter to fuel.") - .addInfo("The proportion is bigger, and the efficiency will be higher.") - .addInfo("Start machine with power button to force structure check.") - .addInfo("It creates sqrt(Current Output Power) pollution every second") - .addInfo( - "If you forget to supply Combustion Promoter, this engine will swallow all the fuel " - + EnumChatFormatting.YELLOW - + "without outputting energy" - + EnumChatFormatting.GRAY - + ".") - .addInfo("The efficiency is up to 150%.") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .beginStructureBlock(5, 4, 9, false) - .addMaintenanceHatch("Hint block with dot 1") - .addMufflerHatch("Hint block with dot 2 (fill all slots with mufflers)") - .addInputHatch("Hint block with dot 3 (fill all slots with input hatches)") - .addDynamoHatch("Hint block with dot 4") - .toolTipFinisher("Good Generator"); - return tt; - } - - @Override - public @NotNull CheckRecipeResult checkProcessing_EM() { - - ArrayList tFluids = getStoredFluids(); - - long PromoterAmount = findLiquidAmount(getPromoter(), tFluids); - - CheckRecipeResult result; - - result = processFuel(tFluids, RecipeMaps.dieselFuels, PromoterAmount, DIESEL_EFFICIENCY_COEFFICIENT, 1); - if (result.wasSuccessful()) return result; - - result = processFuel(tFluids, RecipeMaps.gasTurbineFuels, PromoterAmount, GAS_EFFICIENCY_COEFFICIENT, 1); - if (result.wasSuccessful()) return result; - - result = processFuel(tFluids, GTPPRecipeMaps.rocketFuels, PromoterAmount, ROCKET_EFFICIENCY_COEFFICIENT, 3); - if (result.wasSuccessful()) return result; - - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - protected CheckRecipeResult processFuel(ArrayList tFluids, RecipeMap recipeMap, - long PromoterAmount, double efficiencyCoefficient, double FuelsValueBonus) { - for (GT_Recipe recipe : recipeMap.getAllRecipes()) { - FluidStack tFuel = findFuel(recipe); - if (tFuel == null) continue; - long FuelAmount = findLiquidAmount(tFuel, tFluids); - if (FuelAmount == 0) continue; - calculateEfficiency(FuelAmount, PromoterAmount, efficiencyCoefficient); - consumeAllLiquid(tFuel, tFluids); - consumeAllLiquid(getPromoter(), tFluids); - this.setPowerFlow((long) (FuelAmount * recipe.mSpecialValue * FuelsValueBonus / 20.0D)); - this.mMaxProgresstime = 20; - this.updateSlots(); - return CheckRecipeResultRegistry.GENERATING; - } - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - @Override - public void stopMachine() { - // Reset the counter for heating, so that it works again when the machine restarts - heatingTicks = 0; - super.stopMachine(); - } - - @Override - public boolean onRunningTick(ItemStack stack) { - super.onRunningTick(stack); - // Counts ticks up to the defined timer (200 ticks, 10 seconds) - // The multiblock will not stop due to excess energy during this time - // Machine used to explode in the past, this timer was first made to prevent that - if (heatingTicks < HEATING_TIMER) { - heatingTicks++; - isStoppingSafe = true; - } else if (isStoppingSafe) isStoppingSafe = false; - - if (this.getBaseMetaTileEntity() - .isServerSide()) { - addAutoEnergy(); - } - return true; - } - - @Override - public String[] getInfoData() { - String[] info = super.getInfoData(); - info[4] = "Probably makes: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(this.getPowerFlow()) - + EnumChatFormatting.RESET - + " EU/t"; - info[6] = "Problems: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(this.getIdealStatus() - this.getRepairStatus()) - + EnumChatFormatting.RESET - + " Efficiency: " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(tEff / 100D) - + EnumChatFormatting.RESET - + " %"; - return info; - } - - void addAutoEnergy() { - long exEU = this.getPowerFlow() * tEff / 10000; - if (!mDynamoHatches.isEmpty()) { - GT_MetaTileEntity_Hatch_Dynamo tHatch = mDynamoHatches.get(0); - if (tHatch.maxEUOutput() * tHatch.maxAmperesOut() >= exEU) { - tHatch.setEUVar( - Math.min( - tHatch.maxEUStore(), - tHatch.getBaseMetaTileEntity() - .getStoredEU() + exEU)); - } else if (!isStoppingSafe) { - stopMachine(); - } - } - if (!eDynamoMulti.isEmpty()) { - GT_MetaTileEntity_Hatch_DynamoMulti tHatch = eDynamoMulti.get(0); - if (tHatch.maxEUOutput() * tHatch.maxAmperesOut() >= exEU) { - tHatch.setEUVar( - Math.min( - tHatch.maxEUStore(), - tHatch.getBaseMetaTileEntity() - .getStoredEU() + exEU)); - } else if (!isStoppingSafe) { - stopMachine(); - } - } - } - - public FluidStack getPromoter() { - return FluidRegistry.getFluidStack("combustionpromotor", 1); - } - - public FluidStack findFuel(GT_Recipe aFuel) { - if (aFuel.mInputs != null && aFuel.mInputs.length > 0) - return GT_Utility.getFluidForFilledItem(aFuel.mInputs[0], true); - else return aFuel.mFluidInputs[0]; - } - - public void calculateEfficiency(long aFuel, long aPromoter, double coefficient) { - if (aPromoter == 0) { - this.tEff = 0; - return; - } - this.tEff = (int) (Math.exp(-coefficient * (double) aFuel / (double) aPromoter) * EFFICIENCY_CEILING * 10000); - } - - public long findLiquidAmount(FluidStack liquid, List input) { - long cnt = 0; - for (FluidStack fluid : input) { - if (fluid.isFluidEqual(liquid)) { - cnt += fluid.amount; - } - } - if (cnt < 0) cnt = 0; - return cnt; - } - - public void consumeAllLiquid(FluidStack liquid, List input) { - for (FluidStack fluid : input) { - if (fluid.isFluidEqual(liquid)) fluid.amount = 0; - } - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { casingTexturePages[0][50], - TextureFactory.of(OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE_GLOW) - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][50], TextureFactory.of(OVERLAY_FRONT_DIESEL_ENGINE), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_GLOW) - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][50] }; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new UniversalChemicalFuelEngine(this.mName); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 2, 2, 0, elementBudget, env, false, true); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java b/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java deleted file mode 100644 index b2635d9c2b..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/YottaFluidTank.java +++ /dev/null @@ -1,731 +0,0 @@ -package goodgenerator.blocks.tileEntity; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_StructureUtility.*; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; - -import org.apache.commons.lang3.StringUtils; -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.github.technus.tectech.TecTech; -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import goodgenerator.blocks.tileEntity.GTMetaTileEntity.YOTTAHatch; -import goodgenerator.blocks.tileEntity.base.GT_MetaTileEntity_TooltipMultiBlockBase_EM; -import goodgenerator.client.GUI.GG_UITextures; -import goodgenerator.loader.Loaders; -import goodgenerator.util.CharExchanger; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class YottaFluidTank extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable { - - private static final IIconContainer textureFontOn = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QTANK"); - private static final IIconContainer textureFontOn_Glow = new Textures.BlockIcons.CustomIcon( - "iconsets/OVERLAY_QTANK_GLOW"); - private static final IIconContainer textureFontOff = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_QCHEST"); - private static final IIconContainer textureFontOff_Glow = new Textures.BlockIcons.CustomIcon( - "iconsets/OVERLAY_QCHEST_GLOW"); - - protected IStructureDefinition multiDefinition = null; - protected final ArrayList mYottaHatch = new ArrayList<>(); - - private static final BigInteger ONE_HUNDRED = BigInteger.valueOf(100); - - /** Tank capacity */ - public BigInteger mStorage = BigInteger.ZERO; - /** Amount of fluid millibuckets currently in the tank */ - public BigInteger mStorageCurrent = BigInteger.ZERO; - /** - * Fluid type currently stored in the tank, can be null. Stack size is always 1, real amount is stored in - * mStorageCurrent. - */ - public FluidStack mFluid = null; - /** - * Fluid type currently the tank is currently locked to, can be null. Stack size is always 1, real amount is stored - * in mStorageCurrent. - */ - public FluidStack mLockedFluid = null; - protected boolean isFluidLocked = false; - protected int glassMeta; - protected int maxCell; - protected final String YOTTANK_BOTTOM = mName + "buttom"; - protected final String YOTTANK_MID = mName + "mid"; - protected final String YOTTANK_TOP = mName + "top"; - protected final NumberFormatMUI numberFormat = new NumberFormatMUI(); - private int workTickCounter = 0; - - public static final BigInteger MAX_INT_BIGINT = BigInteger.valueOf(Integer.MAX_VALUE); - - protected boolean voidExcessEnabled = false; - - protected Parameters.Group.ParameterIn tickRateSettings; - - /** Name of the tick rate setting */ - private static final INameFunction TICK_RATE_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.YottaFluidTank.cfgi.0"); - /** Status of the tick rate setting */ - private static final IStatusFunction TICK_RATE_STATUS = (base, p) -> LedStatus - .fromLimitsInclusiveOuterBoundary(p.get(), 1, 0, 100, 100); - - @Override - protected void parametersInstantiation_EM() { - tickRateSettings = parametrization.getGroup(9, true) - .makeInParameter(1, 20, TICK_RATE_SETTING_NAME, TICK_RATE_STATUS); - } - - public YottaFluidTank(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - public YottaFluidTank(String name) { - super(name); - } - - public int getMeta() { - return glassMeta; - } - - public void setMeta(int meta) { - glassMeta = meta; - } - - public String getCap() { - return mStorage.toString(10); - } - - public String getStored() { - return mStorageCurrent.toString(10); - } - - public String getFluidName() { - if (mFluid == null) return StatCollector.translateToLocal("scanner.info.YOTTank.empty"); - return mFluid.getLocalizedName(); - } - - public String getLockedFluidName() { - if (!isFluidLocked) return StatCollector.translateToLocal("scanner.info.YOTTank.none"); - if (mLockedFluid == null) return StatCollector.translateToLocal("scanner.info.YOTTank.next"); - return mLockedFluid.getLocalizedName(); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - String tAmount = aNBT.getString("mStorage"); - String tAmountCurrent = aNBT.getString("mStorageCurrent"); - if (StringUtils.isEmpty(tAmount)) tAmount = "0"; - if (StringUtils.isEmpty(tAmountCurrent)) tAmountCurrent = "0"; - mStorage = new BigInteger(tAmount, 10); - mStorageCurrent = new BigInteger(tAmountCurrent, 10); - mFluid = FluidRegistry.getFluidStack(aNBT.getString("mFluidName"), 1); - mLockedFluid = FluidRegistry.getFluidStack(aNBT.getString("mLockedFluidName"), 1); - voidExcessEnabled = aNBT.getBoolean("voidExcessEnabled"); - isFluidLocked = aNBT.getBoolean("isFluidLocked"); - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setString("mStorage", mStorage.toString(10)); - aNBT.setString("mStorageCurrent", mStorageCurrent.toString(10)); - aNBT.setString( - "mFluidName", - mFluid == null ? "" - : mFluid.getFluid() - .getName()); - aNBT.setString( - "mLockedFluidName", - mLockedFluid == null ? "" - : mLockedFluid.getFluid() - .getName()); - aNBT.setBoolean("voidExcessEnabled", voidExcessEnabled); - aNBT.setBoolean("isFluidLocked", isFluidLocked); - super.saveNBTData(aNBT); - } - - @Override - public @NotNull CheckRecipeResult checkProcessing_EM() { - this.mEUt = 0; - this.mMaxProgresstime = 20; - return SimpleCheckRecipeResult.ofSuccess(""); - } - - public boolean getIsVoidExcessEnabled() { - return voidExcessEnabled; - } - - /** - * Attempts to remove {@code amount} of fluid from the tank if possible, does not do partial removals. - * - * @param amount The millibucket amount of the fluid to remove - * @return True if successfully removed amount, false if no fluid was removed. - */ - public boolean reduceFluid(long amount) { - final BigInteger bigAmount = BigInteger.valueOf(amount); - if (mStorageCurrent.compareTo(bigAmount) < 0) { - return false; - } else { - mStorageCurrent = mStorageCurrent.subtract(bigAmount); - return true; - } - } - - /** - * Attempts to put {@code amount} of fluid into the tank if possible, fails if there's not enough space for all of - * it. - * - * @param amount The millibucket amount of the fluid to insert - * @param doFill Whether to actually fill, or just simulate a fill - * @return True if successfully added the given amount of fluid to the tank, false if failed. - */ - public boolean addFluid(long amount, boolean doFill) { - final BigInteger bigAmount = BigInteger.valueOf(amount); - final BigInteger newTotal = mStorageCurrent.add(bigAmount); - if (newTotal.compareTo(mStorage) > 0) { - return false; - } else { - if (doFill) { - mStorageCurrent = newTotal; - } - return true; - } - } - - // Avoid allocating a new array on every query - private final FluidTankInfo[] tankInfoCache = new FluidTankInfo[1]; - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { - int fluidSize = mStorageCurrent.compareTo(MAX_INT_BIGINT) >= 0 ? Integer.MAX_VALUE : mStorageCurrent.intValue(); - int tankCapacity = mStorage.compareTo(MAX_INT_BIGINT) >= 0 ? Integer.MAX_VALUE : mStorage.intValue(); - final boolean cacheNeedsRecreation; - if (tankInfoCache[0] == null || tankInfoCache[0].capacity != tankCapacity) { - cacheNeedsRecreation = true; - } else if (tankInfoCache[0].fluid == null) { - cacheNeedsRecreation = (mFluid != null); - } else { - cacheNeedsRecreation = !tankInfoCache[0].fluid.isFluidEqual(mFluid); - } - if (cacheNeedsRecreation) { - final FluidStack storedFluid = mFluid.copy(); - storedFluid.amount = fluidSize; - tankInfoCache[0] = new FluidTankInfo(storedFluid, tankCapacity); - } else if (mFluid != null) { - tankInfoCache[0].fluid.amount = fluidSize; - } - return tankInfoCache; - } - - @Override - protected void clearHatches_EM() { - super.clearHatches_EM(); - mYottaHatch.clear(); - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mStorage = BigInteger.ZERO; - glassMeta = 0; - maxCell = 0; - if (!structureCheck_EM(YOTTANK_BOTTOM, 2, 0, 0)) return false; - int cnt = 0; - while (structureCheck_EM(YOTTANK_MID, 2, cnt + 1, 0)) { - cnt++; - } - if (cnt > 15 || cnt < 1) return false; - if (!structureCheck_EM(YOTTANK_TOP, 2, cnt + 2, 0)) return false; - // maxCell+1 = Tier of highest Cell. glassMeta is the glass voltage tier - if (maxCell + 3 <= glassMeta) { - if (mStorage.compareTo(mStorageCurrent) < 0) mStorageCurrent = mStorage; - if (mFluid == null) { - mStorageCurrent = BigInteger.ZERO; - } - return true; - } - return false; - } - - @Override - public IStructureDefinition getStructure_EM() { - if (multiDefinition == null) { - multiDefinition = StructureDefinition.builder() - .addShape( - YOTTANK_BOTTOM, - transpose( - new String[][] { { "MM~MM", "MCCCM", "MCCCM", "MCCCM", "MMMMM" }, - { " ", " OOO ", " OOO ", " OOO ", " " } })) - .addShape(YOTTANK_MID, transpose(new String[][] { { "GGGGG", "GRRRG", "GRRRG", "GRRRG", "GGGGG" } })) - .addShape( - YOTTANK_TOP, - transpose( - new String[][] { { "FFFFF", "F F", "F F", "F F", "FFFFF" }, - { "CCCCC", "CIIIC", "CIIIC", "CIIIC", "CCCCC" } })) - .addElement('C', ofBlock(Loaders.yottaFluidTankCasing, 0)) - .addElement( - 'G', - withChannel( - "glass", - BorosilicateGlass.ofBoroGlass( - (byte) 0, - (byte) 1, - Byte.MAX_VALUE, - YottaFluidTank::setMeta, - te -> (byte) te.getMeta()))) - .addElement('R', ofChain(cells(10))) - .addElement('F', ofFrame(Materials.Steel)) - .addElement( - 'I', - buildHatchAdder(YottaFluidTank.class).atLeast(GT_HatchElement.InputHatch) - .casingIndex(1537) - .dot(1) - .buildAndChain(Loaders.yottaFluidTankCasing, 0)) - .addElement( - 'M', - buildHatchAdder(YottaFluidTank.class).atLeast(GT_HatchElement.Maintenance) - .casingIndex(1537) - .dot(2) - .buildAndChain(Loaders.yottaFluidTankCasing, 0)) - .addElement( - 'O', - buildHatchAdder(YottaFluidTank.class).atLeast(GT_HatchElement.OutputHatch) - .adder(YottaFluidTank::addOutput) - .casingIndex(1537) - .dot(1) - .buildAndChain(Loaders.yottaFluidTankCasing, 0)) - .build(); - } - return multiDefinition; - } - - public List> cells(int num) { - List> out = new ArrayList<>(); - for (int i = 0; i < num; ++i) { - int finalI = i; - out.add(onElementPass(x -> { - x.mStorage = x.mStorage.add(calStorage(finalI)); - x.maxCell = Math.max(x.maxCell, finalI); - }, ofBlock(Loaders.yottaFluidTankCell, i))); - } - return out; - } - - public final boolean addOutput(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } else { - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } else if (aMetaTileEntity instanceof YOTTAHatch) { - // only one yothatch allowed - if (!this.mYottaHatch.isEmpty()) return false; - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((YOTTAHatch) aMetaTileEntity).setTank(this); - return this.mYottaHatch.add((YOTTAHatch) aMetaTileEntity); - } - } - } - return false; - } - - @Override - public String[] getInfoData() { - return new String[] { StatCollector.translateToLocal("scanner.info.YOTTank.1"), - StatCollector.translateToLocal( - EnumChatFormatting.YELLOW + CharExchanger.formatNumber(getFluidName() + EnumChatFormatting.RESET)), - - StatCollector.translateToLocal("scanner.info.YOTTank.0"), - StatCollector.translateToLocal( - EnumChatFormatting.GREEN + CharExchanger.formatNumber(getCap()) + EnumChatFormatting.RESET + " L"), - - StatCollector.translateToLocal("scanner.info.YOTTank.2"), - StatCollector.translateToLocal( - EnumChatFormatting.GREEN + CharExchanger.formatNumber(getStored()) - + EnumChatFormatting.RESET - + " L" - + " (" - + EnumChatFormatting.GREEN - + getPercent() - + "%" - + EnumChatFormatting.RESET - + ")"), - - StatCollector.translateToLocal("scanner.info.YOTTank.3"), - StatCollector.translateToLocal( - EnumChatFormatting.YELLOW + CharExchanger.formatNumber(getLockedFluidName()) - + EnumChatFormatting.RESET) }; - } - - private String getPercent() { - if (mStorage.signum() == 0) return "0"; - return mStorageCurrent.multiply(ONE_HUNDRED) - .divide(mStorage) - .toString(); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fluid Tank") - .addInfo("Controller block for the YOTTank.") - .addInfo("The max output speed is decided by the amount of stored liquid and the output hatch's capacity.") - .addInfo("The max fluid cell tier is limited by the glass tier.") - .addInfo("HV glass for T1, EV glass for T2, IV glass for T3. . .") - .addInfo("The max height of the cell blocks is 15.") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .addSeparator() - .beginVariableStructureBlock(5, 5, 1, 15, 5, 5, false) - .addController("Front of the second layer") - .addCasingInfoExactly("Steel Frame Box", 16, false) - .addCasingInfoRange("Glass (HV+)", 16, 240, true) - .addCasingInfoRange("Fluid Cell Block", 9, 135, true) - .addCasingInfoRange("YOTTank Casing", 25, 43, false) - .addInputHatch("Hint block with dot 1") - .addOutputHatch("Hint block with dot 3") - .toolTipFinisher("Good Generator"); - return tt; - } - - private static final BigInteger[] storageWithCells; - - static { - storageWithCells = new BigInteger[10]; - final BigInteger baseStorage = BigInteger.valueOf(1_000_000); - final BigInteger storageMultiplier = BigInteger.valueOf(100); - BigInteger currentStorage = baseStorage; - for (int i = 0; i < 10; i++) { - storageWithCells[i] = currentStorage; - currentStorage = currentStorage.multiply(storageMultiplier); - } - } - - public BigInteger calStorage(int meta) { - return storageWithCells[meta]; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - super.onRunningTick(aStack); - if (this.getBaseMetaTileEntity() - .isServerSide()) { - long tickRate = Math.min(100L, Math.max(1L, (long) tickRateSettings.get())); - ++workTickCounter; - if (workTickCounter < tickRate) { - return true; - } - workTickCounter = 0; - - List tStore = getStoredFluids(); - for (FluidStack tFluid : tStore) { - if (tFluid == null) continue; - if (isFluidLocked) { - if (mLockedFluid != null) { - if (!tFluid.isFluidEqual(mLockedFluid)) continue;; - } else { - mLockedFluid = tFluid.copy(); - mLockedFluid.amount = 1; - } - } - if (mFluid == null || tFluid.isFluidEqual(mFluid)) { - if (mFluid == null) { - mFluid = tFluid.copy(); - mFluid.amount = 1; - } - if (addFluid(tFluid.amount, true)) { - tFluid.amount = 0; - } else { - if (voidExcessEnabled) { - tFluid.amount = 0; - } else { - final BigInteger delta = mStorage.subtract(mStorageCurrent); - tFluid.amount -= delta.intValueExact(); - } - mStorageCurrent = mStorage; - } - } - } - - if (mStorageCurrent.compareTo(BigInteger.ZERO) <= 0) { - mFluid = null; - } - - if (mFluid != null) { - // Try to drain 1% of the tank per tick - int outputAmount = mStorageCurrent.divide(ONE_HUNDRED) - .min(MAX_INT_BIGINT) - .max(BigInteger.ONE) - .intValueExact(); - if (outputAmount != 1) outputAmount = (int) Math.min(Integer.MAX_VALUE, (long) outputAmount * tickRate); - else outputAmount = Math.min(mStorageCurrent.intValueExact(), outputAmount * (int) tickRate); - - final int originalOutputAmount = outputAmount; - - for (final GT_MetaTileEntity_Hatch outputHatch : mOutputHatches) { - final FluidStack fluidInHatch = outputHatch.mFluid; - - final int remainingHatchSpace; - if (fluidInHatch != null) { - if (fluidInHatch.isFluidEqual(mFluid)) { - remainingHatchSpace = outputHatch.getCapacity() - fluidInHatch.amount; - } else { - continue; - } - } else { - remainingHatchSpace = outputHatch.getCapacity(); - } - - final int amountToFillHatch = Math.min(remainingHatchSpace, outputAmount); - if (amountToFillHatch <= 0) { - continue; - } - final FluidStack fillStack = mFluid.copy(); - fillStack.amount = amountToFillHatch; - final int transferredAmount = outputHatch.fill(fillStack, true); - outputAmount -= transferredAmount; - } - - final int totalDrainedAmount = originalOutputAmount - outputAmount; - if (totalDrainedAmount > 0) { - mStorageCurrent = mStorageCurrent.subtract(BigInteger.valueOf(totalDrainedAmount)); - if (mStorageCurrent.signum() < 0) { - throw new IllegalStateException( - "YOTTank drained beyond its fluid amount, indicating logic bug: " + mStorageCurrent); - } - } - } - } - return true; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - structureBuild_EM(YOTTANK_BOTTOM, 2, 0, 0, stackSize, hintsOnly); - int height = stackSize.stackSize; - if (height > 15) height = 15; - structureBuild_EM(YOTTANK_TOP, 2, height + 2, 0, stackSize, hintsOnly); - while (height > 0) { - structureBuild_EM(YOTTANK_MID, 2, height, 0, stackSize, hintsOnly); - height--; - } - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ, ItemStack toolStack) { - if (side == getBaseMetaTileEntity().getFrontFacing()) { - voidExcessEnabled ^= true; - aPlayer.addChatMessage( - new ChatComponentTranslation( - voidExcessEnabled ? "yottank.chat.voidExcessEnabled" : "yottank.chat.voidExcessDisabled")); - return true; - } - return false; - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ, ItemStack toolStack) { - if (side == getBaseMetaTileEntity().getFrontFacing()) { - if (mLockedFluid == null) { - if (mFluid != null) { - mLockedFluid = mFluid; - aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.1", getFluidName())); - } else { - aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.2")); - } - isFluidLocked = true; - } else { - mLockedFluid = null; - isFluidLocked = false; - aPlayer.addChatMessage(new ChatComponentTranslation("yottank.chat.0")); - } - return true; - } - return false; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return DescTextLocalization.addText("YOTTank.hint", 8); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new YottaFluidTank(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1537), - TextureFactory.of(textureFontOn), TextureFactory.builder() - .addIcon(textureFontOn_Glow) - .glow() - .build() }; - else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1537), - TextureFactory.of(textureFontOff), TextureFactory.builder() - .addIcon(textureFontOff_Glow) - .glow() - .build() }; - } else return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(1537) }; - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int built = 0; - built += survivialBuildPiece(YOTTANK_BOTTOM, stackSize, 2, 0, 0, elementBudget, env, false, true); - int height = stackSize.stackSize; - if (height > 15) height = 15; - built += survivialBuildPiece(YOTTANK_TOP, stackSize, 2, height + 2, 0, elementBudget - built, env, false, true); - while (height > 0) { - built += survivialBuildPiece(YOTTANK_MID, stackSize, 2, height, 0, elementBudget - built, env, false, true); - height--; - } - return built; - } - - @Override - protected boolean shouldDisplayCheckRecipeResult() { - return false; - } - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - - screenElements - .widget( - new TextWidget().setStringSupplier( - () -> StatCollector.translateToLocal("gui.YOTTank.0") + " " + numberFormat.format(mStorage) + " L") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.BigIntegerSyncer(() -> mStorage, val -> mStorage = val)) - .widget( - new TextWidget() - .setStringSupplier(() -> StatCollector.translateToLocal("gui.YOTTank.1") + " " + getFluidName()) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.FluidStackSyncer(() -> mFluid, val -> mFluid = val)) - .widget( - new TextWidget() - .setStringSupplier( - () -> StatCollector.translateToLocal("gui.YOTTank.2") + " " - + numberFormat.format(mStorageCurrent) - + " L") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.BigIntegerSyncer(() -> mStorageCurrent, val -> mStorageCurrent = val)) - .widget( - new TextWidget() - .setStringSupplier( - () -> StatCollector.translateToLocal("gui.YOTTank.3") + " " + getLockedFluidName()) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.FluidStackSyncer(() -> mLockedFluid, val -> mLockedFluid = val)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> isFluidLocked, val -> isFluidLocked = val)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> voidExcessEnabled, val -> voidExcessEnabled = val)); - } - - @Override - protected ButtonWidget createSafeVoidButton() { - return (ButtonWidget) new ButtonWidget().setOnClick((clickData, widget) -> { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - voidExcessEnabled = !voidExcessEnabled; - }) - .setPlayClickSound(false) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); - ret.add( - voidExcessEnabled ? TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_ON - : TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_OFF); - return ret.toArray(new IDrawable[0]); - }) - .setPos(174, doesBindPlayerInventory() ? 132 : 156) - .setSize(16, 16) - .addTooltip(StatCollector.translateToLocal("gui.YOTTank.button.void")) - .setTooltipShowUpDelay(TOOLTIP_DELAY); - } - - @Override - protected ButtonWidget createPowerPassButton() { - return (ButtonWidget) new ButtonWidget().setOnClick((clickData, widget) -> { - TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); - isFluidLocked = !isFluidLocked; - if (!widget.getContext() - .isClient()) mLockedFluid = isFluidLocked ? mFluid : null; - }) - .setPlayClickSound(false) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); - ret.add(isFluidLocked ? GG_UITextures.OVERLAY_BUTTON_LOCK_ON : GG_UITextures.OVERLAY_BUTTON_LOCK_OFF); - return ret.toArray(new IDrawable[0]); - }) - .setPos(174, doesBindPlayerInventory() ? 116 : 140) - .setSize(16, 16) - .addTooltip(StatCollector.translateToLocal("gui.YOTTank.button.locking")) - .setTooltipShowUpDelay(TOOLTIP_DELAY); - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java b/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java deleted file mode 100644 index 3df71aa25a..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_LargeTurbineBase.java +++ /dev/null @@ -1,345 +0,0 @@ -// copied from gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine -// The origin one in gt made the abstract method private so i can't imp it. -package goodgenerator.blocks.tileEntity.base; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.util.GT_StructureUtility.*; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElementCheckOnly; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.GT_MetaGenerated_Tool_01; - -public abstract class GT_MetaTileEntity_LargeTurbineBase extends - GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue>() { - - @Override - protected IStructureDefinition computeValue(Class type) { - return StructureDefinition.builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { " ", "xxxxx", "xxxxx", "xxxxx", "xxxxx", }, - { " --- ", "xcccx", "xchcx", "xchcx", "xcccx", }, - { " --- ", "xc~cx", "xh-hx", "xh-hx", "xcdcx", }, - { " --- ", "xcccx", "xchcx", "xchcx", "xcccx", }, - { " ", "xxxxx", "xxxxx", "xxxxx", "xxxxx", }, })) - .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMeta()))) - .addElement('d', lazy(t -> Dynamo.newAny(t.getCasingTextureIndex(), 1))) - .addElement( - 'h', - lazy( - t -> buildHatchAdder(GT_MetaTileEntity_LargeTurbineBase.class) - .atLeast(Maintenance, InputHatch, OutputHatch, OutputBus, InputBus, Muffler) - .casingIndex(t.getCasingTextureIndex()) - .dot(2) - .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) - .addElement( - 'x', - (IStructureElementCheckOnly) (aContext, aWorld, aX, aY, aZ) -> { - TileEntity tTile = aWorld.getTileEntity(aX, aY, aZ); - return !(tTile instanceof IGregTechTileEntity) || !(((IGregTechTileEntity) tTile) - .getMetaTileEntity() instanceof GT_MetaTileEntity_LargeTurbineBase); - }) - .build(); - } - }; - - protected int baseEff = 0; - protected int optFlow = 0; - protected double realOptFlow = 0; - protected int storedFluid = 0; - protected int counter = 0; - protected boolean looseFit = false; - protected long maxPower = 0; - - public GT_MetaTileEntity_LargeTurbineBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_LargeTurbineBase(String aName) { - super(aName); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return getMaxEfficiency(aStack) > 0; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION.get(getClass()); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - maxPower = 0; - if (checkPiece(STRUCTURE_PIECE_MAIN, 2, 2, 1) && mMaintenanceHatches.size() == 1 - && mMufflerHatches.isEmpty() == (getPollutionPerTick(null) == 0)) { - maxPower = getMaximumOutput(); - return true; - } - return false; - } - - public abstract Block getCasingBlock(); - - public abstract int getCasingMeta(); - - public abstract int getCasingTextureIndex(); - - @Override - public boolean addToMachineList(IGregTechTileEntity tTileEntity, int aBaseCasingIndex) { - return addMaintenanceToMachineList(tTileEntity, getCasingTextureIndex()) - || addInputToMachineList(tTileEntity, getCasingTextureIndex()) - || addOutputToMachineList(tTileEntity, getCasingTextureIndex()) - || addMufflerToMachineList(tTileEntity, getCasingTextureIndex()); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - ItemStack controllerSlot = getControllerSlot(); - if ((counter & 7) == 0 - && (controllerSlot == null || !(controllerSlot.getItem() instanceof GT_MetaGenerated_Tool) - || controllerSlot.getItemDamage() < 170 - || controllerSlot.getItemDamage() > 179)) { - stopMachine(); - return CheckRecipeResultRegistry.NO_TURBINE_FOUND; - } - ArrayList tFluids = getStoredFluids(); - if (tFluids.size() > 0) { - if (baseEff == 0 || optFlow == 0 - || counter >= 512 - || this.getBaseMetaTileEntity() - .hasWorkJustBeenEnabled() - || this.getBaseMetaTileEntity() - .hasInventoryBeenModified()) { - counter = 0; - baseEff = GT_Utility.safeInt( - (long) ((5F - + ((GT_MetaGenerated_Tool) controllerSlot.getItem()).getToolCombatDamage(controllerSlot)) - * 1000F)); - optFlow = GT_Utility.safeInt( - (long) Math.max( - Float.MIN_NORMAL, - ((GT_MetaGenerated_Tool) controllerSlot.getItem()).getToolStats(controllerSlot) - .getSpeedMultiplier() * GT_MetaGenerated_Tool.getPrimaryMaterial(controllerSlot).mToolSpeed - * 50)); - if (optFlow <= 0 || baseEff <= 0) { - stopMachine(); // in case the turbine got removed - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - } else { - counter++; - } - } - - int newPower = fluidIntoPower(tFluids, optFlow, baseEff); // How much the turbine should be producing with this - // flow - int difference = newPower - this.mEUt; // difference between current output and new output - - // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the difference in - // power level (per tick) - // This is how much the turbine can actually change during this tick - int maxChangeAllowed = Math.max(10, GT_Utility.safeInt((long) Math.abs(difference) / 100)); - - if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed change - int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative. - this.mEUt += change; // Apply the change - } else this.mEUt = newPower; - - if (this.mEUt <= 0) { - // stopMachine(); - this.mEUt = 0; - this.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } else { - this.mMaxProgresstime = 1; - this.mEfficiencyIncrease = 10; - // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. - return CheckRecipeResultRegistry.GENERATING; - } - } - - public abstract int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff); - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 1; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) { - return 0; - } - if (aStack.getItem() instanceof GT_MetaGenerated_Tool_01) { - return 10000; - } - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return true; - } - - public long getMaximumOutput() { - long aTotal = 0; - for (GT_MetaTileEntity_Hatch_Dynamo aDynamo : filterValidMTEs(mDynamoHatches)) { - long aVoltage = aDynamo.maxEUOutput(); - aTotal = aDynamo.maxAmperesOut() * aVoltage; - break; - } - return aTotal; - } - - @Override - public String[] getInfoData() { - int mPollutionReduction = 0; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); - } - - String tRunning = mMaxProgresstime > 0 - ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.running.true") - + EnumChatFormatting.RESET - : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.running.false") - + EnumChatFormatting.RESET; - String tMaintainance = getIdealStatus() == getRepairStatus() - ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") - + EnumChatFormatting.RESET - : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") - + EnumChatFormatting.RESET; - int tDura = 0; - - if (mInventory[1] != null && mInventory[1].getItem() instanceof GT_MetaGenerated_Tool_01) { - tDura = GT_Utility.safeInt( - (long) (100.0f / GT_MetaGenerated_Tool.getToolMaxDamage(mInventory[1]) - * (GT_MetaGenerated_Tool.getToolDamage(mInventory[1])) + 1)); - } - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Dynamo tHatch : filterValidMTEs(mDynamoHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - String[] ret = new String[] { - // 8 Lines available for information panels - tRunning + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(mEUt) - + EnumChatFormatting.RESET - + " EU/t", /* 1 */ - tMaintainance, /* 2 */ - StatCollector.translateToLocal("GT5U.turbine.efficiency") + ": " - + EnumChatFormatting.YELLOW - + (mEfficiency / 100F) - + EnumChatFormatting.RESET - + "%", /* 2 */ - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + /* 3 */ EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.turbine.flow") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(GT_Utility.safeInt((long) realOptFlow)) - + EnumChatFormatting.RESET - + " L/t" - + /* 4 */ EnumChatFormatting.YELLOW - + " (" - + (looseFit ? StatCollector.translateToLocal("GT5U.turbine.loose") - : StatCollector.translateToLocal("GT5U.turbine.tight")) - + ")", /* 5 */ - StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " - + EnumChatFormatting.GOLD - + GT_Utility.formatNumbers(storedFluid) - + EnumChatFormatting.RESET - + "L", /* 6 */ - StatCollector.translateToLocal( - "GT5U.turbine.dmg") + ": " + EnumChatFormatting.RED + tDura + EnumChatFormatting.RESET + "%", /* 7 */ - StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %" /* 8 */ - }; - if (!this.getClass() - .getName() - .contains("Steam")) - ret[4] = StatCollector.translateToLocal("GT5U.turbine.flow") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.safeInt((long) realOptFlow) - + EnumChatFormatting.RESET - + " L/t"; - return ret; - } - - public boolean hasTurbine() { - return this.getMaxEfficiency(mInventory[1]) > 0; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 2, 1); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 2, 1, elementBudget, env, false, true); - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_TooltipMultiBlockBase_EM.java b/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_TooltipMultiBlockBase_EM.java deleted file mode 100644 index 010dc1db88..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/GT_MetaTileEntity_TooltipMultiBlockBase_EM.java +++ /dev/null @@ -1,62 +0,0 @@ -package goodgenerator.blocks.tileEntity.base; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import net.minecraft.item.ItemStack; - -import org.lwjgl.input.Keyboard; - -import com.github.technus.tectech.thing.metaTileEntity.multi.base.GT_MetaTileEntity_MultiblockBase_EM; - -import gregtech.api.interfaces.ISecondaryDescribable; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public abstract class GT_MetaTileEntity_TooltipMultiBlockBase_EM extends GT_MetaTileEntity_MultiblockBase_EM - implements ISecondaryDescribable { - - private static final Map tooltips = new ConcurrentHashMap<>(); - - protected GT_MetaTileEntity_TooltipMultiBlockBase_EM(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - protected GT_MetaTileEntity_TooltipMultiBlockBase_EM(String aName) { - super(aName); - } - - protected GT_Multiblock_Tooltip_Builder getTooltip() { - int tId = getBaseMetaTileEntity().getMetaTileID(); - GT_Multiblock_Tooltip_Builder tooltip = tooltips.get(tId); - if (tooltip == null) { - tooltip = createTooltip(); - tooltips.put(tId, tooltip); - } - return tooltip; - } - - protected abstract GT_Multiblock_Tooltip_Builder createTooltip(); - - @Override - public String[] getDescription() { - return getCurrentDescription(); - } - - @Override - public boolean isDisplaySecondaryDescription() { - return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT); - } - - public String[] getPrimaryDescription() { - return getTooltip().getInformation(); - } - - public String[] getSecondaryDescription() { - return getTooltip().getStructureInformation(); - } - - @Override - public int getPollutionPerTick(ItemStack itemStack) { - return getPollutionPerSecond(itemStack) / 20; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java b/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java deleted file mode 100644 index 5c31d55b16..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputer.java +++ /dev/null @@ -1,747 +0,0 @@ -package goodgenerator.blocks.tileEntity.base; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.enums.Textures.BlockIcons.*; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.filterByMTETier; -import static gregtech.api.util.GT_StructureUtility.ofFrame; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.List; - -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -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.interfaces.tileentity.IOverclockDescriptionProvider; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.objects.GT_ChunkManager; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.overclockdescriber.FusionOverclockDescriber; -import gregtech.api.objects.overclockdescriber.OverclockDescriber; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_HatchElementBuilder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.IDualInputHatch; -import gregtech.common.tileentities.machines.multi.drone.GT_MetaTileEntity_Hatch_DroneDownLink; - -public abstract class LargeFusionComputer extends GT_MetaTileEntity_TooltipMultiBlockBase_EM - implements IConstructable, ISurvivalConstructable, IOverclockDescriptionProvider { - - public static final String MAIN_NAME = "largeFusion"; - public static final int M = 1_000_000; - private boolean isLoadedChunk; - public GT_Recipe mLastRecipe; - public int para; - protected OverclockDescriber overclockDescriber; - private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue>() { - - @Override - protected IStructureDefinition computeValue(Class type) { - return StructureDefinition.builder() - .addShape(MAIN_NAME, transpose(new String[][] { L0, L1, L2, L3, L2, L1, L0 })) - .addElement('H', lazy(x -> ofBlock(x.getCoilBlock(), x.getCoilMeta()))) - .addElement('C', lazy(x -> ofBlock(x.getCasingBlock(), x.getCasingMeta()))) - .addElement('B', lazy(x -> ofBlock(x.getGlassBlock(), x.getGlassMeta()))) - .addElement( - 'I', - lazy( - x -> GT_HatchElementBuilder.builder() - .atLeast( - GT_HatchElement.InputHatch.or(GT_HatchElement.InputBus), - GT_HatchElement.OutputHatch) - .adder(LargeFusionComputer::addFluidIO) - .casingIndex(x.textureIndex()) - .dot(1) - .hatchItemFilterAnd(x2 -> filterByMTETier(x2.hatchTier(), Integer.MAX_VALUE)) - .buildAndChain(x.getGlassBlock(), x.getGlassMeta()))) - .addElement( - 'E', - lazy( - x -> GT_HatchElementBuilder.builder() - .anyOf(HatchElement.EnergyMulti.or(GT_HatchElement.Energy)) - .adder(LargeFusionComputer::addEnergyInjector) - .casingIndex(x.textureIndex()) - .hatchItemFilterAnd(x2 -> filterByMTETier(x2.hatchTier(), Integer.MAX_VALUE)) - .dot(2) - .buildAndChain(x.getCasingBlock(), x.getCasingMeta()))) - .addElement('F', lazy(x -> ofFrame(x.getFrameBox()))) - .addElement( - 'D', - lazy( - x -> buildHatchAdder(LargeFusionComputer.class).adder(LargeFusionComputer::addDroneHatch) - .hatchId(9401) - .casingIndex(x.textureIndex()) - .dot(3) - .buildAndChain(x.getCasingBlock(), x.getCasingMeta()))) - .build(); - } - }; - - static { - Textures.BlockIcons.setCasingTextureForId( - 52, - TextureFactory.of( - TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) - .extFacing() - .glow() - .build())); - } - - public LargeFusionComputer(String name) { - super(name); - useLongPower = true; - this.overclockDescriber = createOverclockDescriber(); - } - - public LargeFusionComputer(int id, String name, String nameRegional) { - super(id, name, nameRegional); - useLongPower = true; - this.overclockDescriber = createOverclockDescriber(); - } - - protected OverclockDescriber createOverclockDescriber() { - return new FusionOverclockDescriber((byte) tier(), capableStartupCanonical()); - } - - @Nullable - @Override - public OverclockDescriber getOverclockDescriber() { - return overclockDescriber; - } - - public abstract int tier(); - - @Override - public long maxEUStore() { - return capableStartupCanonical() * (Math.min(32, this.mEnergyHatches.size() + this.eEnergyMulti.size())) / 32L; - } - - /** - * Unlike {@link #maxEUStore()}, this provides theoretical limit of startup EU, without considering the amount of - * hatches nor the room for extra energy. Intended for simulation. - */ - public abstract long capableStartupCanonical(); - - public abstract Block getCasingBlock(); - - public abstract int getCasingMeta(); - - public abstract Block getCoilBlock(); - - public abstract int getCoilMeta(); - - public abstract Block getGlassBlock(); - - public abstract int getGlassMeta(); - - public abstract int hatchTier(); - - public abstract Materials getFrameBox(); - - public abstract int getMaxPara(); - - public abstract int extraPara(int startEnergy); - - public int textureIndex() { - return 53; - } - - public abstract ITexture getTextureOverlay(); - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { - return side != getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - // Migration code - if (lEUt > 0) { - lEUt = -lEUt; - } - } - - @Override - public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.eEnergyMulti.clear(); - return structureCheck_EM(MAIN_NAME, 23, 3, 40) && mInputHatches.size() + mDualInputHatches.size() != 0 - && !mOutputHatches.isEmpty() - && (mEnergyHatches.size() + eEnergyMulti.size()) != 0; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - structureBuild_EM(MAIN_NAME, 23, 3, 40, itemStack, b); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); - return survivialBuildPiece(MAIN_NAME, stackSize, 23, 3, 40, realBudget, env, false, true); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide() && !aBaseMetaTileEntity.isAllowedToWork()) { - // if machine has stopped, stop chunkloading - GT_ChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); - this.isLoadedChunk = false; - } else if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && !this.isLoadedChunk) { - // load a 3x3 area when machine is running - GT_ChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); - int offX = aBaseMetaTileEntity.getFrontFacing().offsetX; - int offZ = aBaseMetaTileEntity.getFrontFacing().offsetZ; - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() + 1 + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() - 1 + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() + 1 + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() - 1 + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() + 1 + offZ)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() - 1 + offZ)); - this.isLoadedChunk = true; - } - - if (aBaseMetaTileEntity.isServerSide()) { - mTotalRunTime++; - if (mEfficiency < 0) mEfficiency = 0; - if (mRunningOnLoad && checkMachine(aBaseMetaTileEntity, mInventory[1])) { - checkRecipe(); - } - if (mUpdated) { - mUpdate = 50; - mUpdated = false; - } - if (--mUpdate == 0 || --mStartUpCheck == 0 - || cyclicUpdate_EM() - || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) { - if (mUpdate <= -1000) { - mUpdate = 5000; - } - checkStructure(true, aBaseMetaTileEntity); - } - if (mStartUpCheck < 0) { - if (mMachine) { - if (aBaseMetaTileEntity.getStoredEU() <= 0 && mMaxProgresstime > 0) { - criticalStopMachine(); - } - - long energyLimit = getSingleHatchPower(); - List hatches = getExoticAndNormalEnergyHatchList(); - for (GT_MetaTileEntity_Hatch hatch : filterValidMTEs(hatches)) { - long consumableEnergy = Math.min(hatch.getEUVar(), energyLimit); - long receivedEnergy = Math - .min(consumableEnergy, maxEUStore() - aBaseMetaTileEntity.getStoredEU()); - if (receivedEnergy > 0) { - hatch.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(receivedEnergy, false); - aBaseMetaTileEntity.increaseStoredEnergyUnits(receivedEnergy, true); - } - } - - if (mMaxProgresstime > 0) { - this.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(-lEUt, true); - if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) { - if (mOutputItems != null) - for (ItemStack tStack : mOutputItems) if (tStack != null) addOutput(tStack); - if (mOutputFluids != null) - for (FluidStack tStack : mOutputFluids) if (tStack != null) addOutput(tStack); - mEfficiency = Math - .max(0, Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]))); - mOutputItems = null; - mOutputFluids = null; - mProgresstime = 0; - mMaxProgresstime = 0; - mEfficiencyIncrease = 0; - para = 0; - if (aBaseMetaTileEntity.isAllowedToWork()) checkRecipe(); - } - } else { - if (aTick % 100 == 0 || aBaseMetaTileEntity.hasWorkJustBeenEnabled() - || aBaseMetaTileEntity.hasInventoryBeenModified()) { - turnCasingActive(mMaxProgresstime > 0); - if (aBaseMetaTileEntity.isAllowedToWork()) { - if (checkRecipe()) { - if (aBaseMetaTileEntity.getStoredEU() - < this.mLastRecipe.mSpecialValue + this.lEUt) { - mMaxProgresstime = 0; - turnCasingActive(false); - criticalStopMachine(); - } - getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(this.mLastRecipe.mSpecialValue + this.lEUt, false); - } - } - if (mMaxProgresstime <= 0) mEfficiency = Math.max(0, mEfficiency - 1000); - } - } - } else { - turnCasingActive(false); - this.mLastRecipe = null; - stopMachine(); - } - } - aBaseMetaTileEntity - .setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID() & ~127) | (mMachine ? 0 : 64)); - aBaseMetaTileEntity.setActive(mMaxProgresstime > 0); - } else { - soundMagic(getActivitySoundLoop()); - } - } - - /** - * @return The power one hatch can deliver to the reactor - */ - protected long getSingleHatchPower() { - return GT_Values.V[tier()] * getMaxPara() * extraPara(100) / 32; - } - - public boolean turnCasingActive(boolean status) { - if (this.mEnergyHatches != null) { - for (GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) { - hatch.updateTexture(status ? 52 : 53); - } - } - if (this.eEnergyMulti != null) { - for (GT_MetaTileEntity_Hatch_EnergyMulti hatch : this.eEnergyMulti) { - hatch.updateTexture(status ? 52 : 53); - } - } - if (this.mOutputHatches != null) { - for (GT_MetaTileEntity_Hatch_Output hatch : this.mOutputHatches) { - hatch.updateTexture(status ? 52 : 53); - } - } - if (this.mInputHatches != null) { - for (GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) { - hatch.updateTexture(status ? 52 : 53); - } - } - if (this.mDualInputHatches != null) { - for (IDualInputHatch hatch : this.mDualInputHatches) { - hatch.updateTexture(status ? 52 : 53); - } - } - return true; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) return new ITexture[] { TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS) - .extFacing() - .build(), getTextureOverlay() }; - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; - return new ITexture[] { TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS) - .extFacing() - .build() }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public void onMachineBlockUpdate() { - mUpdate = 100; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.fusionRecipes; - } - - @Override - public int getRecipeCatalystPriority() { - return -2; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected GT_ParallelHelper createParallelHelper(@NotNull GT_Recipe recipe) { - // When the fusion first loads and is still processing, it does the recipe check without consuming. - return super.createParallelHelper(recipe).setConsumption(!mRunningOnLoad); - } - - @NotNull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return overclockDescriber.createCalculator(super.createOverclockCalculator(recipe), recipe); - } - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (!mRunningOnLoad) { - if (recipe.mSpecialValue > maxEUStore()) { - return CheckRecipeResultRegistry.insufficientStartupPower(recipe.mSpecialValue); - } - if (recipe.mEUt > GT_Values.V[tier()]) { - return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - } - } - maxParallel = getMaxPara() * extraPara(recipe.mSpecialValue); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - public CheckRecipeResult process() { - CheckRecipeResult result = super.process(); - if (mRunningOnLoad) mRunningOnLoad = false; - turnCasingActive(result.wasSuccessful()); - if (result.wasSuccessful()) { - mLastRecipe = lastRecipe; - } else { - mLastRecipe = null; - } - para = getCurrentParallels(); - return result; - } - }; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Values.V[tier()]); - logic.setAvailableAmperage(getSingleHatchPower() * 32 / GT_Values.V[tier()]); - } - - @Override - public void onRemoval() { - if (this.isLoadedChunk) GT_ChunkManager.releaseTicket((TileEntity) getBaseMetaTileEntity()); - super.onRemoval(); - } - - public int getChunkX() { - return getBaseMetaTileEntity().getXCoord() >> 4; - } - - public int getChunkZ() { - return getBaseMetaTileEntity().getZCoord() >> 4; - } - - private boolean addEnergyInjector(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy tHatch) { - if (tHatch.getTierForStructure() < hatchTier()) return false; - tHatch.updateTexture(aBaseCasingIndex); - return mEnergyHatches.add(tHatch); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti tHatch) { - if (tHatch.getTierForStructure() < hatchTier()) return false; - tHatch.updateTexture(aBaseCasingIndex); - return eEnergyMulti.add(tHatch); - } - return false; - } - - private boolean addFluidIO(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch hatch) { - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input tInput) { - if (tInput.getTierForStructure() < hatchTier()) return false; - tInput.mRecipeMap = getRecipeMap(); - return mInputHatches.add(tInput); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output tOutput) { - if (tOutput.getTierForStructure() < hatchTier()) return false; - return mOutputHatches.add(tOutput); - } - if (aMetaTileEntity instanceof IDualInputHatch tInput) { - tInput.updateCraftingIcon(this.getMachineCraftingIcon()); - return mDualInputHatches.add(tInput); - } - return false; - } - - private boolean addDroneHatch(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { - if (aBaseMetaTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (!(aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DroneDownLink tHatch)) return false; - tHatch.updateTexture(aBaseCasingIndex); - return addToMachineList(aBaseMetaTileEntity, aBaseCasingIndex); - } - - @Override - public IStructureDefinition getStructure_EM() { - return STRUCTURE_DEFINITION.get(getClass()); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @SideOnly(Side.CLIENT) - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_FUSION_LOOP.resourceLocation; - } - - @Override - public String[] getInfoData() { - IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); - String tier = switch (tier()) { - case 6 -> EnumChatFormatting.RED + "I" + EnumChatFormatting.RESET; - case 7 -> EnumChatFormatting.RED + "II" + EnumChatFormatting.RESET; - case 8 -> EnumChatFormatting.RED + "III" + EnumChatFormatting.RESET; - case 9 -> EnumChatFormatting.RED + "IV" + EnumChatFormatting.RESET; - default -> EnumChatFormatting.GOLD + "V" + EnumChatFormatting.RESET; - }; - double plasmaOut = 0; - if (mMaxProgresstime > 0) plasmaOut = (double) mOutputFluids[0].amount / mMaxProgresstime; - - return new String[] { EnumChatFormatting.BLUE + "Fusion Reactor MK " + EnumChatFormatting.RESET + tier, - StatCollector.translateToLocal("scanner.info.UX.0") + ": " - + EnumChatFormatting.LIGHT_PURPLE - + GT_Utility.formatNumbers(this.para) - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.fusion.req") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(-lEUt) - + EnumChatFormatting.RESET - + "EU/t", - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(baseMetaTileEntity != null ? baseMetaTileEntity.getStoredEU() : 0) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEUStore()) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.fusion.plasma") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(plasmaOut) - + EnumChatFormatting.RESET - + "L/t" }; - } - - protected long energyStorageCache; - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - - screenElements - .widget( - new TextWidget() - .setStringSupplier( - () -> StatCollector.translateToLocal("gui.LargeFusion.0") + " " - + numberFormat.format(energyStorageCache) - + " EU") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.LongSyncer(this::maxEUStore, val -> energyStorageCache = val)) - .widget( - new TextWidget() - .setStringSupplier( - () -> StatCollector.translateToLocal("gui.LargeFusion.1") + " " - + numberFormat.format(getEUVar()) - + " EU") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget(new FakeSyncWidget.LongSyncer(this::getEUVar, this::setEUVar)); - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } - - public static final String[] L0 = { " ", - " ", " FCCCCCF ", - " FCIBICF ", " FCCCCCF ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " FFF FFF ", - " CCC CCC ", " CIC CIC ", - " CBC CBC ", " CIC CIC ", - " CCC CCC ", " FFF FFF ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " FCCCCCF ", - " FCIBICF ", " FCCCCCF ", - " ", " ", }; - - public static final String[] L1 = { " ", - " FCBBBCF ", " CC CC ", - " CCCCC CCCCC ", " CCCCCCC CCCCCCC ", - " CCCCCCC FCBBBCF CCCCCCC ", " CCCCC CCCCC ", - " CCCC CCCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " FCCCF FCCCF ", - " C C C C ", " B B B B ", - " B B B B ", " B B B B ", - " C C C C ", " FCCCF FCCCF ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCC CCC ", " CCC CCC ", - " CCCC CCCC ", " CCCCC CCCCC ", - " CCCCCCC FCBBBCF CCCCCCC ", " CCCCCCC CCCCCCC ", - " CCCCC CCCCC ", " CC CC ", - " FCBBBCF ", " ", }; - - public static final String[] L2 = { " FCCCCCF ", - " CC CC ", " CCCCC CCCCC ", - " CCCCCHHHHHHHHHCCCCC ", " CCCCHHHCC CCHHHCCCC ", - " CCCHHCCCCC CCCCCHHCCC ", " ECHHCCCCC FCCCCCF CCCCCHHCE ", - " CCHCCCC CCCCHCC ", " CCHCCC CCCHCC ", - " CCHCE ECHCC ", " ECHCC CCHCE ", - " CCHCE ECHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", "FCCHCCF FCCHCCF", - "C H C C H C", "C H C C H C", - "C H C C H C", "C H C C H C", - "C H C C H C", "FCCHCCF FCCHCCF", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCC CCHCC ", " CCHCC CCHCC ", - " CCHCE ECHCC ", " ECHCC CCHCE ", - " CCHCE ECHCC ", " CCHCCC CCCHCC ", - " CCHCCCC CCCCHCC ", " ECHHCCCCC FCCDCCF CCCCCHHCE ", - " CCCHHCCCCC CCCCCHHCCC ", " CCCCHHHCC CCHHHCCCC ", - " CCCCCHHHHHHHHHCCCCC ", " CCCCC CCCCC ", - " CC CC ", " FCCCCCF ", }; - - public static final String[] L3 = { " FCIBICF ", - " CC CC ", " CCCHHHHHHHHHCCC ", - " CCHHHHHHHHHHHHHHHCC ", " CCHHHHHHHHHHHHHHHHHHHCC ", - " CHHHHHHHCC CCHHHHHHHC ", " CHHHHHCCC FCIBICF CCCHHHHHC ", - " CHHHHCC CCHHHHC ", " CHHHCC CCHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", "FCHHHCF FCHHHCF", - "C HHH C C HHH C", "I HHH I I HHH I", - "B HHH B B HHH B", "I HHH I I HHH I", - "C HHH C C HHH C", "FCHHHCF FCHHHCF", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHC CHHHC ", - " CHHHC CHHHC ", " CHHHCC CCHHHC ", - " CHHHHCC CCHHHHC ", " CHHHHHCCC FCI~ICF CCCHHHHHC ", - " CHHHHHHHCC CCHHHHHHHC ", " CCHHHHHHHHHHHHHHHHHHHCC ", - " CCHHHHHHHHHHHHHHHCC ", " CCCHHHHHHHHHCCC ", - " CC CC ", " FCIBICF ", }; -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java b/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java deleted file mode 100644 index 7d87e6fdd1..0000000000 --- a/src/main/java/goodgenerator/blocks/tileEntity/base/LargeFusionComputerPP.java +++ /dev/null @@ -1,53 +0,0 @@ -package goodgenerator.blocks.tileEntity.base; - -import static net.minecraft.util.StatCollector.translateToLocal; - -import com.github.technus.tectech.thing.metaTileEntity.multi.base.INameFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.IStatusFunction; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.LedStatus; -import com.github.technus.tectech.thing.metaTileEntity.multi.base.Parameters; - -import gregtech.api.objects.overclockdescriber.OverclockDescriber; -import gregtech.api.util.AdvancedFusionOverclockDescriber; - -public abstract class LargeFusionComputerPP extends LargeFusionComputer { - - protected Parameters.Group.ParameterIn batchSetting; - - /** Name of the batch setting */ - private static final INameFunction BATCH_SETTING_NAME = (base, - p) -> translateToLocal("gt.blockmachines.LargeFusionComputerPP.cfgi.0"); // Batch size - /** Status of the batch setting */ - private static final IStatusFunction BATCH_STATUS = (base, p) -> LedStatus - .fromLimitsInclusiveOuterBoundary(p.get(), 1, 0, 32, 128); - - public LargeFusionComputerPP(String name) { - super(name); - } - - public LargeFusionComputerPP(int id, String name, String nameRegional) { - super(id, name, nameRegional); - } - - @Override - protected OverclockDescriber createOverclockDescriber() { - return new AdvancedFusionOverclockDescriber((byte) tier(), capableStartupCanonical()); - } - - @Override - protected void parametersInstantiation_EM() { - batchSetting = parametrization.getGroup(9, false) - .makeInParameter(1, 1, BATCH_SETTING_NAME, BATCH_STATUS); - } - - @Override - protected int getMaxBatchSize() { - // Batch size 1~128 - return (int) Math.min(Math.max(batchSetting.get(), 1.0D), 128.0D); - } - - @Override - public boolean getDefaultBatchMode() { - return true; - } -} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java new file mode 100644 index 0000000000..b14395dc20 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputer.java @@ -0,0 +1,748 @@ +package goodgenerator.blocks.tileEntity.base; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.Textures.BlockIcons.*; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.filterByMTETier; +import static gregtech.api.util.GTStructureUtility.ofFrame; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +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.interfaces.tileentity.IOverclockDescriptionProvider; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.objects.GTChunkManager; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.overclockdescriber.FusionOverclockDescriber; +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.HatchElementBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.ParallelHelper; +import gregtech.common.tileentities.machines.IDualInputHatch; +import gregtech.common.tileentities.machines.multi.drone.MTEHatchDroneDownLink; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; + +public abstract class MTELargeFusionComputer extends MTETooltipMultiBlockBaseEM + implements IConstructable, ISurvivalConstructable, IOverclockDescriptionProvider { + + public static final String MAIN_NAME = "largeFusion"; + public static final int M = 1_000_000; + private boolean isLoadedChunk; + public GTRecipe mLastRecipe; + public int para; + protected OverclockDescriber overclockDescriber; + private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue>() { + + @Override + protected IStructureDefinition computeValue(Class type) { + return StructureDefinition.builder() + .addShape(MAIN_NAME, transpose(new String[][] { L0, L1, L2, L3, L2, L1, L0 })) + .addElement('H', lazy(x -> ofBlock(x.getCoilBlock(), x.getCoilMeta()))) + .addElement('C', lazy(x -> ofBlock(x.getCasingBlock(), x.getCasingMeta()))) + .addElement('B', lazy(x -> ofBlock(x.getGlassBlock(), x.getGlassMeta()))) + .addElement( + 'I', + lazy( + x -> HatchElementBuilder.builder() + .atLeast( + gregtech.api.enums.HatchElement.InputHatch.or(gregtech.api.enums.HatchElement.InputBus), + gregtech.api.enums.HatchElement.OutputHatch) + .adder(MTELargeFusionComputer::addFluidIO) + .casingIndex(x.textureIndex()) + .dot(1) + .hatchItemFilterAnd(x2 -> filterByMTETier(x2.hatchTier(), Integer.MAX_VALUE)) + .buildAndChain(x.getGlassBlock(), x.getGlassMeta()))) + .addElement( + 'E', + lazy( + x -> HatchElementBuilder.builder() + .anyOf( + tectech.thing.metaTileEntity.multi.base.TTMultiblockBase.HatchElement.EnergyMulti + .or(gregtech.api.enums.HatchElement.Energy)) + .adder(MTELargeFusionComputer::addEnergyInjector) + .casingIndex(x.textureIndex()) + .hatchItemFilterAnd(x2 -> filterByMTETier(x2.hatchTier(), Integer.MAX_VALUE)) + .dot(2) + .buildAndChain(x.getCasingBlock(), x.getCasingMeta()))) + .addElement('F', lazy(x -> ofFrame(x.getFrameBox()))) + .addElement( + 'D', + lazy( + x -> buildHatchAdder(MTELargeFusionComputer.class).adder(MTELargeFusionComputer::addDroneHatch) + .hatchId(9401) + .casingIndex(x.textureIndex()) + .dot(3) + .buildAndChain(x.getCasingBlock(), x.getCasingMeta()))) + .build(); + } + }; + + static { + Textures.BlockIcons.setCasingTextureForId( + 52, + TextureFactory.of( + TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) + .extFacing() + .glow() + .build())); + } + + public MTELargeFusionComputer(String name) { + super(name); + useLongPower = true; + this.overclockDescriber = createOverclockDescriber(); + } + + public MTELargeFusionComputer(int id, String name, String nameRegional) { + super(id, name, nameRegional); + useLongPower = true; + this.overclockDescriber = createOverclockDescriber(); + } + + protected OverclockDescriber createOverclockDescriber() { + return new FusionOverclockDescriber((byte) tier(), capableStartupCanonical()); + } + + @Nullable + @Override + public OverclockDescriber getOverclockDescriber() { + return overclockDescriber; + } + + public abstract int tier(); + + @Override + public long maxEUStore() { + return capableStartupCanonical() * (Math.min(32, this.mEnergyHatches.size() + this.eEnergyMulti.size())) / 32L; + } + + /** + * Unlike {@link #maxEUStore()}, this provides theoretical limit of startup EU, without considering the amount of + * hatches nor the room for extra energy. Intended for simulation. + */ + public abstract long capableStartupCanonical(); + + public abstract Block getCasingBlock(); + + public abstract int getCasingMeta(); + + public abstract Block getCoilBlock(); + + public abstract int getCoilMeta(); + + public abstract Block getGlassBlock(); + + public abstract int getGlassMeta(); + + public abstract int hatchTier(); + + public abstract Materials getFrameBox(); + + public abstract int getMaxPara(); + + public abstract int extraPara(int startEnergy); + + public int textureIndex() { + return 53; + } + + public abstract ITexture getTextureOverlay(); + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { + return side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + // Migration code + if (lEUt > 0) { + lEUt = -lEUt; + } + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.eEnergyMulti.clear(); + return structureCheck_EM(MAIN_NAME, 23, 3, 40) && mInputHatches.size() + mDualInputHatches.size() != 0 + && !mOutputHatches.isEmpty() + && (mEnergyHatches.size() + eEnergyMulti.size()) != 0; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + structureBuild_EM(MAIN_NAME, 23, 3, 40, itemStack, b); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); + return survivialBuildPiece(MAIN_NAME, stackSize, 23, 3, 40, realBudget, env, false, true); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && !aBaseMetaTileEntity.isAllowedToWork()) { + // if machine has stopped, stop chunkloading + GTChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); + this.isLoadedChunk = false; + } else if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && !this.isLoadedChunk) { + // load a 3x3 area when machine is running + GTChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); + int offX = aBaseMetaTileEntity.getFrontFacing().offsetX; + int offZ = aBaseMetaTileEntity.getFrontFacing().offsetZ; + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() + offZ)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() + 1 + offZ)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() + offZ)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + 1 + offX, getChunkZ() - 1 + offZ)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() + 1 + offZ)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() + offZ)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() - 1 + offX, getChunkZ() - 1 + offZ)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() + 1 + offZ)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(getChunkX() + offX, getChunkZ() - 1 + offZ)); + this.isLoadedChunk = true; + } + + if (aBaseMetaTileEntity.isServerSide()) { + mTotalRunTime++; + if (mEfficiency < 0) mEfficiency = 0; + if (mRunningOnLoad && checkMachine(aBaseMetaTileEntity, mInventory[1])) { + checkRecipe(); + } + if (mUpdated) { + mUpdate = 50; + mUpdated = false; + } + if (--mUpdate == 0 || --mStartUpCheck == 0 + || cyclicUpdate_EM() + || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) { + if (mUpdate <= -1000) { + mUpdate = 5000; + } + checkStructure(true, aBaseMetaTileEntity); + } + if (mStartUpCheck < 0) { + if (mMachine) { + if (aBaseMetaTileEntity.getStoredEU() <= 0 && mMaxProgresstime > 0) { + criticalStopMachine(); + } + + long energyLimit = getSingleHatchPower(); + List hatches = getExoticAndNormalEnergyHatchList(); + for (MTEHatch hatch : filterValidMTEs(hatches)) { + long consumableEnergy = Math.min(hatch.getEUVar(), energyLimit); + long receivedEnergy = Math + .min(consumableEnergy, maxEUStore() - aBaseMetaTileEntity.getStoredEU()); + if (receivedEnergy > 0) { + hatch.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(receivedEnergy, false); + aBaseMetaTileEntity.increaseStoredEnergyUnits(receivedEnergy, true); + } + } + + if (mMaxProgresstime > 0) { + this.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(-lEUt, true); + if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) { + if (mOutputItems != null) + for (ItemStack tStack : mOutputItems) if (tStack != null) addOutput(tStack); + if (mOutputFluids != null) + for (FluidStack tStack : mOutputFluids) if (tStack != null) addOutput(tStack); + mEfficiency = Math + .max(0, Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]))); + mOutputItems = null; + mOutputFluids = null; + mProgresstime = 0; + mMaxProgresstime = 0; + mEfficiencyIncrease = 0; + para = 0; + if (aBaseMetaTileEntity.isAllowedToWork()) checkRecipe(); + } + } else { + if (aTick % 100 == 0 || aBaseMetaTileEntity.hasWorkJustBeenEnabled() + || aBaseMetaTileEntity.hasInventoryBeenModified()) { + turnCasingActive(mMaxProgresstime > 0); + if (aBaseMetaTileEntity.isAllowedToWork()) { + if (checkRecipe()) { + if (aBaseMetaTileEntity.getStoredEU() + < this.mLastRecipe.mSpecialValue + this.lEUt) { + mMaxProgresstime = 0; + turnCasingActive(false); + criticalStopMachine(); + } + getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(this.mLastRecipe.mSpecialValue + this.lEUt, false); + } + } + if (mMaxProgresstime <= 0) mEfficiency = Math.max(0, mEfficiency - 1000); + } + } + } else { + turnCasingActive(false); + this.mLastRecipe = null; + stopMachine(); + } + } + aBaseMetaTileEntity + .setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID() & ~127) | (mMachine ? 0 : 64)); + aBaseMetaTileEntity.setActive(mMaxProgresstime > 0); + } else { + soundMagic(getActivitySoundLoop()); + } + } + + /** + * @return The power one hatch can deliver to the reactor + */ + protected long getSingleHatchPower() { + return GTValues.V[tier()] * getMaxPara() * extraPara(100) / 32; + } + + public boolean turnCasingActive(boolean status) { + if (this.mEnergyHatches != null) { + for (MTEHatchEnergy hatch : this.mEnergyHatches) { + hatch.updateTexture(status ? 52 : 53); + } + } + if (this.eEnergyMulti != null) { + for (MTEHatchEnergyMulti hatch : this.eEnergyMulti) { + hatch.updateTexture(status ? 52 : 53); + } + } + if (this.mOutputHatches != null) { + for (MTEHatchOutput hatch : this.mOutputHatches) { + hatch.updateTexture(status ? 52 : 53); + } + } + if (this.mInputHatches != null) { + for (MTEHatchInput hatch : this.mInputHatches) { + hatch.updateTexture(status ? 52 : 53); + } + } + if (this.mDualInputHatches != null) { + for (IDualInputHatch hatch : this.mDualInputHatches) { + hatch.updateTexture(status ? 52 : 53); + } + } + return true; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS) + .extFacing() + .build(), getTextureOverlay() }; + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; + return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS) + .extFacing() + .build() }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public void onMachineBlockUpdate() { + mUpdate = 100; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.fusionRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return -2; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected ParallelHelper createParallelHelper(@NotNull GTRecipe recipe) { + // When the fusion first loads and is still processing, it does the recipe check without consuming. + return super.createParallelHelper(recipe).setConsumption(!mRunningOnLoad); + } + + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return overclockDescriber.createCalculator(super.createOverclockCalculator(recipe), recipe); + } + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (!mRunningOnLoad) { + if (recipe.mSpecialValue > maxEUStore()) { + return CheckRecipeResultRegistry.insufficientStartupPower(recipe.mSpecialValue); + } + if (recipe.mEUt > GTValues.V[tier()]) { + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + } + } + maxParallel = getMaxPara() * extraPara(recipe.mSpecialValue); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + public CheckRecipeResult process() { + CheckRecipeResult result = super.process(); + if (mRunningOnLoad) mRunningOnLoad = false; + turnCasingActive(result.wasSuccessful()); + if (result.wasSuccessful()) { + mLastRecipe = lastRecipe; + } else { + mLastRecipe = null; + } + para = getCurrentParallels(); + return result; + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTValues.V[tier()]); + logic.setAvailableAmperage(getSingleHatchPower() * 32 / GTValues.V[tier()]); + } + + @Override + public void onRemoval() { + if (this.isLoadedChunk) GTChunkManager.releaseTicket((TileEntity) getBaseMetaTileEntity()); + super.onRemoval(); + } + + public int getChunkX() { + return getBaseMetaTileEntity().getXCoord() >> 4; + } + + public int getChunkZ() { + return getBaseMetaTileEntity().getZCoord() >> 4; + } + + private boolean addEnergyInjector(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchEnergy tHatch) { + if (tHatch.getTierForStructure() < hatchTier()) return false; + tHatch.updateTexture(aBaseCasingIndex); + return mEnergyHatches.add(tHatch); + } else if (aMetaTileEntity instanceof MTEHatchEnergyMulti tHatch) { + if (tHatch.getTierForStructure() < hatchTier()) return false; + tHatch.updateTexture(aBaseCasingIndex); + return eEnergyMulti.add(tHatch); + } + return false; + } + + private boolean addFluidIO(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatch hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + } + if (aMetaTileEntity instanceof MTEHatchInput tInput) { + if (tInput.getTierForStructure() < hatchTier()) return false; + tInput.mRecipeMap = getRecipeMap(); + return mInputHatches.add(tInput); + } + if (aMetaTileEntity instanceof MTEHatchOutput tOutput) { + if (tOutput.getTierForStructure() < hatchTier()) return false; + return mOutputHatches.add(tOutput); + } + if (aMetaTileEntity instanceof IDualInputHatch tInput) { + tInput.updateCraftingIcon(this.getMachineCraftingIcon()); + return mDualInputHatches.add(tInput); + } + return false; + } + + private boolean addDroneHatch(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + if (aBaseMetaTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (!(aMetaTileEntity instanceof MTEHatchDroneDownLink tHatch)) return false; + tHatch.updateTexture(aBaseCasingIndex); + return addToMachineList(aBaseMetaTileEntity, aBaseCasingIndex); + } + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @SideOnly(Side.CLIENT) + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_FUSION_LOOP.resourceLocation; + } + + @Override + public String[] getInfoData() { + IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); + String tier = switch (tier()) { + case 6 -> EnumChatFormatting.RED + "I" + EnumChatFormatting.RESET; + case 7 -> EnumChatFormatting.RED + "II" + EnumChatFormatting.RESET; + case 8 -> EnumChatFormatting.RED + "III" + EnumChatFormatting.RESET; + case 9 -> EnumChatFormatting.RED + "IV" + EnumChatFormatting.RESET; + default -> EnumChatFormatting.GOLD + "V" + EnumChatFormatting.RESET; + }; + double plasmaOut = 0; + if (mMaxProgresstime > 0) plasmaOut = (double) mOutputFluids[0].amount / mMaxProgresstime; + + return new String[] { EnumChatFormatting.BLUE + "Fusion Reactor MK " + EnumChatFormatting.RESET + tier, + StatCollector.translateToLocal("scanner.info.UX.0") + ": " + + EnumChatFormatting.LIGHT_PURPLE + + GTUtility.formatNumbers(this.para) + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.fusion.req") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(-lEUt) + + EnumChatFormatting.RESET + + "EU/t", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(baseMetaTileEntity != null ? baseMetaTileEntity.getStoredEU() : 0) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEUStore()) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.fusion.plasma") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(plasmaOut) + + EnumChatFormatting.RESET + + "L/t" }; + } + + protected long energyStorageCache; + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + + screenElements + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.LargeFusion.0") + " " + + numberFormat.format(energyStorageCache) + + " EU") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.LongSyncer(this::maxEUStore, val -> energyStorageCache = val)) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocal("gui.LargeFusion.1") + " " + + numberFormat.format(getEUVar()) + + " EU") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget(new FakeSyncWidget.LongSyncer(this::getEUVar, this::setEUVar)); + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } + + public static final String[] L0 = { " ", + " ", " FCCCCCF ", + " FCIBICF ", " FCCCCCF ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " FFF FFF ", + " CCC CCC ", " CIC CIC ", + " CBC CBC ", " CIC CIC ", + " CCC CCC ", " FFF FFF ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " FCCCCCF ", + " FCIBICF ", " FCCCCCF ", + " ", " ", }; + + public static final String[] L1 = { " ", + " FCBBBCF ", " CC CC ", + " CCCCC CCCCC ", " CCCCCCC CCCCCCC ", + " CCCCCCC FCBBBCF CCCCCCC ", " CCCCC CCCCC ", + " CCCC CCCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " FCCCF FCCCF ", + " C C C C ", " B B B B ", + " B B B B ", " B B B B ", + " C C C C ", " FCCCF FCCCF ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCC CCC ", " CCC CCC ", + " CCCC CCCC ", " CCCCC CCCCC ", + " CCCCCCC FCBBBCF CCCCCCC ", " CCCCCCC CCCCCCC ", + " CCCCC CCCCC ", " CC CC ", + " FCBBBCF ", " ", }; + + public static final String[] L2 = { " FCCCCCF ", + " CC CC ", " CCCCC CCCCC ", + " CCCCCHHHHHHHHHCCCCC ", " CCCCHHHCC CCHHHCCCC ", + " CCCHHCCCCC CCCCCHHCCC ", " ECHHCCCCC FCCCCCF CCCCCHHCE ", + " CCHCCCC CCCCHCC ", " CCHCCC CCCHCC ", + " CCHCE ECHCC ", " ECHCC CCHCE ", + " CCHCE ECHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", "FCCHCCF FCCHCCF", + "C H C C H C", "C H C C H C", + "C H C C H C", "C H C C H C", + "C H C C H C", "FCCHCCF FCCHCCF", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCC CCHCC ", " CCHCC CCHCC ", + " CCHCE ECHCC ", " ECHCC CCHCE ", + " CCHCE ECHCC ", " CCHCCC CCCHCC ", + " CCHCCCC CCCCHCC ", " ECHHCCCCC FCCDCCF CCCCCHHCE ", + " CCCHHCCCCC CCCCCHHCCC ", " CCCCHHHCC CCHHHCCCC ", + " CCCCCHHHHHHHHHCCCCC ", " CCCCC CCCCC ", + " CC CC ", " FCCCCCF ", }; + + public static final String[] L3 = { " FCIBICF ", + " CC CC ", " CCCHHHHHHHHHCCC ", + " CCHHHHHHHHHHHHHHHCC ", " CCHHHHHHHHHHHHHHHHHHHCC ", + " CHHHHHHHCC CCHHHHHHHC ", " CHHHHHCCC FCIBICF CCCHHHHHC ", + " CHHHHCC CCHHHHC ", " CHHHCC CCHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", "FCHHHCF FCHHHCF", + "C HHH C C HHH C", "I HHH I I HHH I", + "B HHH B B HHH B", "I HHH I I HHH I", + "C HHH C C HHH C", "FCHHHCF FCHHHCF", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHC CHHHC ", + " CHHHC CHHHC ", " CHHHCC CCHHHC ", + " CHHHHCC CCHHHHC ", " CHHHHHCCC FCI~ICF CCCHHHHHC ", + " CHHHHHHHCC CCHHHHHHHC ", " CCHHHHHHHHHHHHHHHHHHHCC ", + " CCHHHHHHHHHHHHHHHCC ", " CCCHHHHHHHHHCCC ", + " CC CC ", " FCIBICF ", }; +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputerPP.java b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputerPP.java new file mode 100644 index 0000000000..7089616911 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeFusionComputerPP.java @@ -0,0 +1,52 @@ +package goodgenerator.blocks.tileEntity.base; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.util.AdvancedFusionOverclockDescriber; +import tectech.thing.metaTileEntity.multi.base.INameFunction; +import tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import tectech.thing.metaTileEntity.multi.base.LedStatus; +import tectech.thing.metaTileEntity.multi.base.Parameters; + +public abstract class MTELargeFusionComputerPP extends MTELargeFusionComputer { + + protected Parameters.Group.ParameterIn batchSetting; + + /** Name of the batch setting */ + private static final INameFunction BATCH_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.LargeFusionComputerPP.cfgi.0"); // Batch size + /** Status of the batch setting */ + private static final IStatusFunction BATCH_STATUS = (base, p) -> LedStatus + .fromLimitsInclusiveOuterBoundary(p.get(), 1, 0, 32, 128); + + public MTELargeFusionComputerPP(String name) { + super(name); + } + + public MTELargeFusionComputerPP(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + protected OverclockDescriber createOverclockDescriber() { + return new AdvancedFusionOverclockDescriber((byte) tier(), capableStartupCanonical()); + } + + @Override + protected void parametersInstantiation_EM() { + batchSetting = parametrization.getGroup(9, false) + .makeInParameter(1, 1, BATCH_SETTING_NAME, BATCH_STATUS); + } + + @Override + protected int getMaxBatchSize() { + // Batch size 1~128 + return (int) Math.min(Math.max(batchSetting.get(), 1.0D), 128.0D); + } + + @Override + public boolean getDefaultBatchMode() { + return true; + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeTurbineBase.java b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeTurbineBase.java new file mode 100644 index 0000000000..1c298d2b9a --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/MTELargeTurbineBase.java @@ -0,0 +1,341 @@ +// copied from gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine +// The origin one in gt made the abstract method private so i can't imp it. +package goodgenerator.blocks.tileEntity.base; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.util.GTStructureUtility.*; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElementCheckOnly; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTUtility; +import gregtech.common.items.MetaGeneratedTool01; + +public abstract class MTELargeTurbineBase extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue>() { + + @Override + protected IStructureDefinition computeValue(Class type) { + return StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { " ", "xxxxx", "xxxxx", "xxxxx", "xxxxx", }, + { " --- ", "xcccx", "xchcx", "xchcx", "xcccx", }, + { " --- ", "xc~cx", "xh-hx", "xh-hx", "xcdcx", }, + { " --- ", "xcccx", "xchcx", "xchcx", "xcccx", }, + { " ", "xxxxx", "xxxxx", "xxxxx", "xxxxx", }, })) + .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMeta()))) + .addElement('d', lazy(t -> Dynamo.newAny(t.getCasingTextureIndex(), 1))) + .addElement( + 'h', + lazy( + t -> buildHatchAdder(MTELargeTurbineBase.class) + .atLeast(Maintenance, InputHatch, OutputHatch, OutputBus, InputBus, Muffler) + .casingIndex(t.getCasingTextureIndex()) + .dot(2) + .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) + .addElement('x', (IStructureElementCheckOnly) (aContext, aWorld, aX, aY, aZ) -> { + TileEntity tTile = aWorld.getTileEntity(aX, aY, aZ); + return !(tTile instanceof IGregTechTileEntity) + || !(((IGregTechTileEntity) tTile).getMetaTileEntity() instanceof MTELargeTurbineBase); + }) + .build(); + } + }; + + protected int baseEff = 0; + protected int optFlow = 0; + protected double realOptFlow = 0; + protected int storedFluid = 0; + protected int counter = 0; + protected boolean looseFit = false; + protected long maxPower = 0; + + public MTELargeTurbineBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbineBase(String aName) { + super(aName); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return getMaxEfficiency(aStack) > 0; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + maxPower = 0; + if (checkPiece(STRUCTURE_PIECE_MAIN, 2, 2, 1) && mMaintenanceHatches.size() == 1 + && mMufflerHatches.isEmpty() == (getPollutionPerTick(null) == 0)) { + maxPower = getMaximumOutput(); + return true; + } + return false; + } + + public abstract Block getCasingBlock(); + + public abstract int getCasingMeta(); + + public abstract int getCasingTextureIndex(); + + @Override + public boolean addToMachineList(IGregTechTileEntity tTileEntity, int aBaseCasingIndex) { + return addMaintenanceToMachineList(tTileEntity, getCasingTextureIndex()) + || addInputToMachineList(tTileEntity, getCasingTextureIndex()) + || addOutputToMachineList(tTileEntity, getCasingTextureIndex()) + || addMufflerToMachineList(tTileEntity, getCasingTextureIndex()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + ItemStack controllerSlot = getControllerSlot(); + if ((counter & 7) == 0 && (controllerSlot == null || !(controllerSlot.getItem() instanceof MetaGeneratedTool) + || controllerSlot.getItemDamage() < 170 + || controllerSlot.getItemDamage() > 179)) { + stopMachine(); + return CheckRecipeResultRegistry.NO_TURBINE_FOUND; + } + ArrayList tFluids = getStoredFluids(); + if (tFluids.size() > 0) { + if (baseEff == 0 || optFlow == 0 + || counter >= 512 + || this.getBaseMetaTileEntity() + .hasWorkJustBeenEnabled() + || this.getBaseMetaTileEntity() + .hasInventoryBeenModified()) { + counter = 0; + baseEff = GTUtility.safeInt( + (long) ((5F + ((MetaGeneratedTool) controllerSlot.getItem()).getToolCombatDamage(controllerSlot)) + * 1000F)); + optFlow = GTUtility.safeInt( + (long) Math.max( + Float.MIN_NORMAL, + ((MetaGeneratedTool) controllerSlot.getItem()).getToolStats(controllerSlot) + .getSpeedMultiplier() * MetaGeneratedTool.getPrimaryMaterial(controllerSlot).mToolSpeed + * 50)); + if (optFlow <= 0 || baseEff <= 0) { + stopMachine(); // in case the turbine got removed + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + } else { + counter++; + } + } + + int newPower = fluidIntoPower(tFluids, optFlow, baseEff); // How much the turbine should be producing with this + // flow + int difference = newPower - this.mEUt; // difference between current output and new output + + // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the difference in + // power level (per tick) + // This is how much the turbine can actually change during this tick + int maxChangeAllowed = Math.max(10, GTUtility.safeInt((long) Math.abs(difference) / 100)); + + if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed change + int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative. + this.mEUt += change; // Apply the change + } else this.mEUt = newPower; + + if (this.mEUt <= 0) { + // stopMachine(); + this.mEUt = 0; + this.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } else { + this.mMaxProgresstime = 1; + this.mEfficiencyIncrease = 10; + // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. + return CheckRecipeResultRegistry.GENERATING; + } + } + + public abstract int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff); + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) { + return 0; + } + if (aStack.getItem() instanceof MetaGeneratedTool01) { + return 10000; + } + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return true; + } + + public long getMaximumOutput() { + long aTotal = 0; + for (MTEHatchDynamo aDynamo : filterValidMTEs(mDynamoHatches)) { + long aVoltage = aDynamo.maxEUOutput(); + aTotal = aDynamo.maxAmperesOut() * aVoltage; + break; + } + return aTotal; + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = 0; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); + } + + String tRunning = mMaxProgresstime > 0 + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.running.true") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.running.false") + + EnumChatFormatting.RESET; + String tMaintainance = getIdealStatus() == getRepairStatus() + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") + + EnumChatFormatting.RESET; + int tDura = 0; + + if (mInventory[1] != null && mInventory[1].getItem() instanceof MetaGeneratedTool01) { + tDura = GTUtility.safeInt( + (long) (100.0f / MetaGeneratedTool.getToolMaxDamage(mInventory[1]) + * (MetaGeneratedTool.getToolDamage(mInventory[1])) + 1)); + } + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchDynamo tHatch : filterValidMTEs(mDynamoHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + String[] ret = new String[] { + // 8 Lines available for information panels + tRunning + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(mEUt) + + EnumChatFormatting.RESET + + " EU/t", /* 1 */ + tMaintainance, /* 2 */ + StatCollector.translateToLocal("GT5U.turbine.efficiency") + ": " + + EnumChatFormatting.YELLOW + + (mEfficiency / 100F) + + EnumChatFormatting.RESET + + "%", /* 2 */ + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + /* 3 */ EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.turbine.flow") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(GTUtility.safeInt((long) realOptFlow)) + + EnumChatFormatting.RESET + + " L/t" + + /* 4 */ EnumChatFormatting.YELLOW + + " (" + + (looseFit ? StatCollector.translateToLocal("GT5U.turbine.loose") + : StatCollector.translateToLocal("GT5U.turbine.tight")) + + ")", /* 5 */ + StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " + + EnumChatFormatting.GOLD + + GTUtility.formatNumbers(storedFluid) + + EnumChatFormatting.RESET + + "L", /* 6 */ + StatCollector.translateToLocal( + "GT5U.turbine.dmg") + ": " + EnumChatFormatting.RED + tDura + EnumChatFormatting.RESET + "%", /* 7 */ + StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %" /* 8 */ + }; + if (!this.getClass() + .getName() + .contains("Steam")) + ret[4] = StatCollector.translateToLocal("GT5U.turbine.flow") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.safeInt((long) realOptFlow) + + EnumChatFormatting.RESET + + " L/t"; + return ret; + } + + public boolean hasTurbine() { + return this.getMaxEfficiency(mInventory[1]) > 0; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 2, 1); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 2, 1, elementBudget, env, false, true); + } +} diff --git a/src/main/java/goodgenerator/blocks/tileEntity/base/MTETooltipMultiBlockBaseEM.java b/src/main/java/goodgenerator/blocks/tileEntity/base/MTETooltipMultiBlockBaseEM.java new file mode 100644 index 0000000000..90d0cc5395 --- /dev/null +++ b/src/main/java/goodgenerator/blocks/tileEntity/base/MTETooltipMultiBlockBaseEM.java @@ -0,0 +1,60 @@ +package goodgenerator.blocks.tileEntity.base; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.item.ItemStack; + +import org.lwjgl.input.Keyboard; + +import gregtech.api.interfaces.ISecondaryDescribable; +import gregtech.api.util.MultiblockTooltipBuilder; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; + +public abstract class MTETooltipMultiBlockBaseEM extends TTMultiblockBase implements ISecondaryDescribable { + + private static final Map tooltips = new ConcurrentHashMap<>(); + + protected MTETooltipMultiBlockBaseEM(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + protected MTETooltipMultiBlockBaseEM(String aName) { + super(aName); + } + + protected MultiblockTooltipBuilder getTooltip() { + int tId = getBaseMetaTileEntity().getMetaTileID(); + MultiblockTooltipBuilder tooltip = tooltips.get(tId); + if (tooltip == null) { + tooltip = createTooltip(); + tooltips.put(tId, tooltip); + } + return tooltip; + } + + protected abstract MultiblockTooltipBuilder createTooltip(); + + @Override + public String[] getDescription() { + return getCurrentDescription(); + } + + @Override + public boolean isDisplaySecondaryDescription() { + return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT); + } + + public String[] getPrimaryDescription() { + return getTooltip().getInformation(); + } + + public String[] getSecondaryDescription() { + return getTooltip().getStructureInformation(); + } + + @Override + public int getPollutionPerTick(ItemStack itemStack) { + return getPollutionPerSecond(itemStack) / 20; + } +} diff --git a/src/main/java/goodgenerator/client/GUI/GGUITextures.java b/src/main/java/goodgenerator/client/GUI/GGUITextures.java new file mode 100644 index 0000000000..068b70d46b --- /dev/null +++ b/src/main/java/goodgenerator/client/GUI/GGUITextures.java @@ -0,0 +1,22 @@ +package goodgenerator.client.GUI; + +import com.gtnewhorizons.modularui.api.drawable.UITexture; + +public class GGUITextures { + + private static final String MODID = "goodgenerator"; + + public static final UITexture PICTURE_NAQUADAH_REACTOR = UITexture.fullImage(MODID, "gui/picture/naquadah_reactor"); + public static final UITexture PICTURE_NEUTRON_ACTIVATOR = UITexture + .fullImage(MODID, "gui/picture/neutron_activator"); + public static final UITexture PICTURE_EXTREME_HEAT_EXCHANGER = UITexture + .fullImage(MODID, "gui/picture/extreme_heat_exchanger"); + public static final UITexture PICTURE_COMPONENT_ASSLINE = UITexture + .fullImage(MODID, "gui/picture/component_assline"); + public static final UITexture OVERLAY_BUTTON_LOCK_OFF = UITexture.fullImage(MODID, "gui/overlay_button/lock_off"); + public static final UITexture OVERLAY_BUTTON_LOCK_ON = UITexture.fullImage(MODID, "gui/overlay_button/lock_on"); + public static final UITexture OVERLAY_BUTTON_ASSEMBLER_MODE = UITexture + .fullImage(MODID, "gui/overlay_button/assembler_mode"); + public static final UITexture OVERLAY_BUTTON_PRECISE_MODE = UITexture + .fullImage(MODID, "gui/overlay_button/precise_mode"); +} diff --git a/src/main/java/goodgenerator/client/GUI/GG_UITextures.java b/src/main/java/goodgenerator/client/GUI/GG_UITextures.java deleted file mode 100644 index 2b9bc8df84..0000000000 --- a/src/main/java/goodgenerator/client/GUI/GG_UITextures.java +++ /dev/null @@ -1,22 +0,0 @@ -package goodgenerator.client.GUI; - -import com.gtnewhorizons.modularui.api.drawable.UITexture; - -public class GG_UITextures { - - private static final String MODID = "goodgenerator"; - - public static final UITexture PICTURE_NAQUADAH_REACTOR = UITexture.fullImage(MODID, "gui/picture/naquadah_reactor"); - public static final UITexture PICTURE_NEUTRON_ACTIVATOR = UITexture - .fullImage(MODID, "gui/picture/neutron_activator"); - public static final UITexture PICTURE_EXTREME_HEAT_EXCHANGER = UITexture - .fullImage(MODID, "gui/picture/extreme_heat_exchanger"); - public static final UITexture PICTURE_COMPONENT_ASSLINE = UITexture - .fullImage(MODID, "gui/picture/component_assline"); - public static final UITexture OVERLAY_BUTTON_LOCK_OFF = UITexture.fullImage(MODID, "gui/overlay_button/lock_off"); - public static final UITexture OVERLAY_BUTTON_LOCK_ON = UITexture.fullImage(MODID, "gui/overlay_button/lock_on"); - public static final UITexture OVERLAY_BUTTON_ASSEMBLER_MODE = UITexture - .fullImage(MODID, "gui/overlay_button/assembler_mode"); - public static final UITexture OVERLAY_BUTTON_PRECISE_MODE = UITexture - .fullImage(MODID, "gui/overlay_button/precise_mode"); -} diff --git a/src/main/java/goodgenerator/client/render/BlockRenderHandler.java b/src/main/java/goodgenerator/client/render/BlockRenderHandler.java index 01893339f5..c8e8bfacb8 100644 --- a/src/main/java/goodgenerator/client/render/BlockRenderHandler.java +++ b/src/main/java/goodgenerator/client/render/BlockRenderHandler.java @@ -1,6 +1,6 @@ package goodgenerator.client.render; -import static gregtech.common.render.GT_Renderer_Block.*; +import static gregtech.common.render.GTRendererBlock.*; import static net.minecraftforge.common.util.ForgeDirection.*; import static net.minecraftforge.common.util.ForgeDirection.EAST; @@ -14,7 +14,7 @@ import org.lwjgl.opengl.GL11; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import cpw.mods.fml.client.registry.RenderingRegistry; import goodgenerator.blocks.regularBlock.ITextureBlock; -import gregtech.GT_Mod; +import gregtech.GTMod; public class BlockRenderHandler implements ISimpleBlockRenderingHandler { @@ -59,7 +59,7 @@ public class BlockRenderHandler implements ISimpleBlockRenderingHandler { @Override public boolean renderWorldBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, int aModelID, RenderBlocks aRenderer) { - aRenderer.enableAO = Minecraft.isAmbientOcclusionEnabled() && GT_Mod.gregtechproxy.mRenderTileAmbientOcclusion; + aRenderer.enableAO = Minecraft.isAmbientOcclusionEnabled() && GTMod.gregtechproxy.mRenderTileAmbientOcclusion; aRenderer.useInventoryTint = false; if (aBlock instanceof ITextureBlock) { aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); diff --git a/src/main/java/goodgenerator/crossmod/nei/NEIConfig.java b/src/main/java/goodgenerator/crossmod/nei/NEIConfig.java new file mode 100644 index 0000000000..20c492fc7d --- /dev/null +++ b/src/main/java/goodgenerator/crossmod/nei/NEIConfig.java @@ -0,0 +1,38 @@ +package goodgenerator.crossmod.nei; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import codechicken.nei.api.API; +import codechicken.nei.api.IConfigureNEI; +import goodgenerator.main.GoodGenerator; + +public class NEIConfig implements IConfigureNEI { + + public static boolean isAdded = true; + + @Override + public void loadConfig() { + NEIConfig.isAdded = false; + NEIConfig.isAdded = true; + } + + public static void hide(Block aBlock) { + API.hideItem(new ItemStack(aBlock, 1)); + } + + public static void hide(Item aItem) { + API.hideItem(new ItemStack(aItem, 1)); + } + + @Override + public String getName() { + return "Good Generator NEI Plugin"; + } + + @Override + public String getVersion() { + return GoodGenerator.VERSION; + } +} diff --git a/src/main/java/goodgenerator/crossmod/nei/NEI_Config.java b/src/main/java/goodgenerator/crossmod/nei/NEI_Config.java deleted file mode 100644 index e28f09885e..0000000000 --- a/src/main/java/goodgenerator/crossmod/nei/NEI_Config.java +++ /dev/null @@ -1,38 +0,0 @@ -package goodgenerator.crossmod.nei; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import codechicken.nei.api.API; -import codechicken.nei.api.IConfigureNEI; -import goodgenerator.main.GoodGenerator; - -public class NEI_Config implements IConfigureNEI { - - public static boolean isAdded = true; - - @Override - public void loadConfig() { - NEI_Config.isAdded = false; - NEI_Config.isAdded = true; - } - - public static void hide(Block aBlock) { - API.hideItem(new ItemStack(aBlock, 1)); - } - - public static void hide(Item aItem) { - API.hideItem(new ItemStack(aItem, 1)); - } - - @Override - public String getName() { - return "Good Generator NEI Plugin"; - } - - @Override - public String getVersion() { - return GoodGenerator.VERSION; - } -} diff --git a/src/main/java/goodgenerator/crossmod/thaumcraft/Research.java b/src/main/java/goodgenerator/crossmod/thaumcraft/Research.java index e5b9f350a3..2cb0f00051 100644 --- a/src/main/java/goodgenerator/crossmod/thaumcraft/Research.java +++ b/src/main/java/goodgenerator/crossmod/thaumcraft/Research.java @@ -16,18 +16,17 @@ import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import com.github.bartimaeusnek.bartworks.common.loaders.ItemRegistry; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - +import bartworks.common.loaders.ItemRegistry; +import bartworks.system.material.WerkstoffLoader; import goodgenerator.util.DescTextLocalization; import goodgenerator.util.ItemRefer; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.enums.TCAspects; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; import ic2.core.Ic2Items; import thaumcraft.api.aspects.Aspect; import thaumcraft.api.aspects.AspectList; @@ -49,7 +48,7 @@ public class Research { DescTextLocalization.addText("research.ESSENTIA_UPGRADE_SPRITE.page", 3); DescTextLocalization.addText("research.ESSENTIA_UPGRADE_RADIATION.page", 3); DescTextLocalization.addText("research.ESSENTIA_UPGRADE_ELECTRIC.page", 2); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_GENERATOR", "Combustion Engine in Magic World", "Will it cause Flux pollution?", @@ -61,14 +60,14 @@ public class Research { -9, 3, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L)), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 10L), + new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 10L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L)), null, new Object[] { "research.ESSENTIA_GENERATOR.page.0", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_GENERATOR", ItemList.Hatch_Input_HV.get(1), new ItemStack[] { new ItemStack(ConfigBlocks.blockJar, 1), ItemRefer.Magic_Casing.get(1), @@ -76,24 +75,24 @@ public class Research { ItemRefer.Essentia_Hatch.get(1), 6, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 64), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 32), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 32))), - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + new TCAspects.TC_AspectStack(TCAspects.AQUA, 128), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 64), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 32), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 32))), + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_GENERATOR", - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Thaumium, 1), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Titanium, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.ElectricalSteel, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.ElectricalSteel, 1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Thaumium, 1), + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Titanium, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.ElectricalSteel, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.ElectricalSteel, 1), ItemList.Electric_Pump_EV.get(1L), new ItemStack(ConfigBlocks.blockTube, 1, 4), new ItemStack(ConfigBlocks.blockCosmeticOpaque, 1, 2), }, ItemRefer.Essentia_Cell_T1.get(1), 4, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 32), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 32), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 16))), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 32), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 32), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 16))), addArcaneCraftingRecipe( "ESSENTIA_GENERATOR", ItemRefer.Magic_Casing.get(1), @@ -106,14 +105,14 @@ public class Research { 'S', new ItemStack(ConfigItems.itemResource, 1, 14), 'C', - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Thaumium, 1), + GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.Thaumium, 1), 'G', Ic2Items.reinforcedGlass, 'A', Ic2Items.advancedMachine), "research.ESSENTIA_GENERATOR.page.1", "research.ESSENTIA_GENERATOR.page.2", "research.ESSENTIA_GENERATOR.page.3" }); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_CELL", "Better Cells", "And higher efficiency.", @@ -125,57 +124,57 @@ public class Research { -10, 3, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L)), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 10L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 10L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 10L), + new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L)), null, new Object[] { "research.ESSENTIA_CELL.page.0", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_CELL", ItemRefer.Essentia_Cell_T1.get(1), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1), + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1), ItemList.Electric_Pump_IV.get(1L), ItemList.QuantumStar.get(1L), new ItemStack(ConfigBlocks.blockMetalDevice, 1, 3), ItemList.Reactor_Coolant_Sp_1.get(1L), - GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Plutonium241, 1), }, + GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Plutonium241, 1), }, ItemRefer.Essentia_Cell_T2.get(1), 6, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 64), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 64), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 32))), - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + new TCAspects.TC_AspectStack(TCAspects.AQUA, 64), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 64), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 32))), + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_CELL", ItemRefer.Essentia_Cell_T2.get(1), new ItemStack[] { ItemList.Field_Generator_IV.get(1L), ItemList.Electric_Pump_LuV.get(1L), new ItemStack(ConfigItems.itemResource, 1, 14), Ic2Items.fluidregulator, new ItemStack(ConfigBlocks.blockJar, 1, 0), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Ichorium, 1) }, + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Ichorium, 1) }, ItemRefer.Essentia_Cell_T3.get(1), 8, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 64))), - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + new TCAspects.TC_AspectStack(TCAspects.AQUA, 128), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 128), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 64))), + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_CELL", ItemRefer.Essentia_Cell_T3.get(1), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Europium, 1), + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.ring, Materials.Europium, 1), ItemList.Emitter_LuV.get(1L), new ItemStack(ItemRegistry.bw_realglas, 1, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StellarAlloy, 1), - GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Helium, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.StellarAlloy, 1), + GTOreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Helium, 1), new ItemStack(ConfigItems.itemShard, 1, 6), }, ItemRefer.Essentia_Cell_T4.get(1), 10, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 256), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 256), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 128))) }); + new TCAspects.TC_AspectStack(TCAspects.AQUA, 256), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 256), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 128))) }); ItemStack broad = new ItemStack(ConfigBlocks.blockCosmeticSolid, 1, 6); if (NewHorizonsCoreMod.isModLoaded()) - broad = GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ArcaneSlate", 1); - GregTech_API.sThaumcraftCompat.addResearch( + broad = GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ArcaneSlate", 1); + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_UPGRADE_BLANK", "Upgrade your generator", "Let's try some more dangerous essentia.", @@ -187,10 +186,10 @@ public class Research { -9, 4, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.AURAM, 10L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, new Object[] { "research.ESSENTIA_UPGRADE_BLANK.page.0", addArcaneCraftingRecipe( @@ -204,24 +203,24 @@ public class Research { "CZD", "EIF", 'A', - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedAir, 1), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.InfusedAir, 1), 'B', - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedEarth, 1), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.InfusedEarth, 1), 'C', - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedFire, 1), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.InfusedFire, 1), 'D', - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedWater, 1), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.InfusedWater, 1), 'E', - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedOrder, 1), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.InfusedOrder, 1), 'F', - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.InfusedEntropy, 1), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.InfusedEntropy, 1), 'M', new ItemStack(ConfigItems.itemResource, 1, 10), 'Z', broad, 'I', - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.PulsatingIron, 1)), }); - GregTech_API.sThaumcraftCompat.addResearch( + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.PulsatingIron, 1)), }); + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_UPGRADE_AIR", "Essentia: AIR", "I can feel it on the wind.", @@ -233,28 +232,28 @@ public class Research { -9, 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.AER, 10L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, - new Object[] { "research.ESSENTIA_UPGRADE_AIR.page.0", GregTech_API.sThaumcraftCompat.addInfusionRecipe( + new Object[] { "research.ESSENTIA_UPGRADE_AIR.page.0", GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_UPGRADE_AIR", ItemRefer.Essentia_Upgrade_Empty.get(1), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LiquidAir, 1), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Helium, 1), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Argon, 1), + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.cell, Materials.LiquidAir, 1), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Helium, 1), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Argon, 1), WerkstoffLoader.Neon.get(OrePrefixes.cell, 1), WerkstoffLoader.Krypton.get(OrePrefixes.cell, 1), }, ItemRefer.Essentia_Upgrade_Air.get(1), 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.VOLATUS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 128))), + new TCAspects.TC_AspectStack(TCAspects.AER, 128), + new TCAspects.TC_AspectStack(TCAspects.VOLATUS, 128), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 128), + new TCAspects.TC_AspectStack(TCAspects.AURAM, 128))), "research.ESSENTIA_UPGRADE_AIR.page.1" }); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_UPGRADE_THERMAL", "Essentia: THERMAL", "Melting down.", @@ -266,24 +265,24 @@ public class Research { -10, 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 10L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, new Object[] { "research.ESSENTIA_UPGRADE_THERMAL.page.0", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_UPGRADE_THERMAL", ItemRefer.Essentia_Upgrade_Empty.get(1), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Firestone, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 1), - Ic2Items.reactorPlatingHeat, ItemList.Casing_Coil_Nichrome.get(1), - new ItemStack(ConfigItems.itemResource, 1, 1), new ItemStack(ConfigItems.itemResource, 1, 0), }, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.lens, Materials.Firestone, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 1), Ic2Items.reactorPlatingHeat, + ItemList.Casing_Coil_Nichrome.get(1), new ItemStack(ConfigItems.itemResource, 1, 1), + new ItemStack(ConfigItems.itemResource, 1, 0), }, ItemRefer.Essentia_Upgrade_Thermal.get(1), 5, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1024))), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1024))), "research.ESSENTIA_UPGRADE_THERMAL.page.1", "research.ESSENTIA_UPGRADE_THERMAL.page.2" }); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_UPGRADE_UNSTABLE", "Essentia: UNSTABLE", "Heart of chaos.", @@ -295,32 +294,32 @@ public class Research { -11, 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, new Object[] { "research.ESSENTIA_UPGRADE_UNSTABLE.page.0", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_UPGRADE_UNSTABLE", ItemRefer.Essentia_Upgrade_Empty.get(1), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.cell, Materials.GasolinePremium, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Unstable, 1), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Void, 1), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEntropy, 1), Ic2Items.industrialTnt, - GT_ModHandler.getModItem(ExtraUtilities.ID, "trashcan", 1, 0) }, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.cell, Materials.GasolinePremium, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Unstable, 1), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Void, 1), + GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEntropy, 1), Ic2Items.industrialTnt, + GTModHandler.getModItem(ExtraUtilities.ID, "trashcan", 1, 0) }, ItemRefer.Essentia_Upgrade_Unstable.get(1), 6, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 128))), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 128), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 128), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 128), + new TCAspects.TC_AspectStack(TCAspects.TELUM, 128))), "research.ESSENTIA_UPGRADE_UNSTABLE.page.1", "research.ESSENTIA_UPGRADE_UNSTABLE.page.2" }); - ItemStack meatDust = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatRaw, 1); + ItemStack meatDust = GTOreDictUnificator.get(OrePrefixes.dust, Materials.MeatRaw, 1); if (NewHorizonsCoreMod.isModLoaded()) - meatDust = GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "GTNHBioItems", 1, 2); - GregTech_API.sThaumcraftCompat.addResearch( + meatDust = GTModHandler.getModItem(NewHorizonsCoreMod.ID, "GTNHBioItems", 1, 2); + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_UPGRADE_VICTUS", "Essentia: VICTUS", "Will it bleed?", @@ -332,29 +331,29 @@ public class Research { -12, 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.VICTUS, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.VICTUS, 10L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, new Object[] { "research.ESSENTIA_UPGRADE_VICTUS.page.0", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_UPGRADE_VICTUS", ItemRefer.Essentia_Upgrade_Empty.get(1), new ItemStack[] { meatDust, ItemList.Food_Dough_Sugar.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Calcium, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Calcium, 1), new ItemStack(Item.getItemById(367), 1), new ItemStack(ConfigItems.itemResource, 1, 4), new ItemStack(ConfigBlocks.blockMetalDevice, 1, 8), }, ItemRefer.Essentia_Upgrade_Victus.get(1), 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.VICTUS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.SPIRITUS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.HUMANUS, 128))), + new TCAspects.TC_AspectStack(TCAspects.VICTUS, 128), + new TCAspects.TC_AspectStack(TCAspects.SPIRITUS, 128), + new TCAspects.TC_AspectStack(TCAspects.SANO, 128), + new TCAspects.TC_AspectStack(TCAspects.CORPUS, 128), + new TCAspects.TC_AspectStack(TCAspects.HUMANUS, 128))), "research.ESSENTIA_UPGRADE_VICTUS.page.1", "research.ESSENTIA_UPGRADE_VICTUS.page.2" }); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_UPGRADE_TAINTED", "Essentia: TAINTED", "Dirty Deeds Done Dirt Cheap", @@ -366,30 +365,30 @@ public class Research { -13, 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.MORTUUS, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.MORTUUS, 10L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, new Object[] { "research.ESSENTIA_UPGRADE_TAINTED.page.0", "research.ESSENTIA_UPGRADE_TAINTED.page.1", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_UPGRADE_TAINTED", ItemRefer.Essentia_Upgrade_Empty.get(1), new ItemStack[] { new ItemStack(ConfigBlocks.blockTaintFibres, 1, 0), new ItemStack(ConfigBlocks.blockTaintFibres, 1, 2), new ItemStack(ConfigItems.itemResource, 1, 11), - GT_OreDictUnificator.get(OrePrefixes.spring, Materials.NaquadahEnriched, 1), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.EndSteel, 1), + GTOreDictUnificator.get(OrePrefixes.spring, Materials.NaquadahEnriched, 1), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.EndSteel, 1), new ItemStack(Block.getBlockById(138), 1), }, ItemRefer.Essentia_Upgrade_Tainted.get(1), 7, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.MORTUUS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.EXANIMIS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITIUM, 128))), + new TCAspects.TC_AspectStack(TCAspects.MORTUUS, 128), + new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 128), + new TCAspects.TC_AspectStack(TCAspects.EXANIMIS, 128), + new TCAspects.TC_AspectStack(TCAspects.VITIUM, 128))), "research.ESSENTIA_UPGRADE_TAINTED.page.2", "research.ESSENTIA_UPGRADE_TAINTED.page.3" }); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_UPGRADE_MECHANICS", "Essentia: MECHANICS", "Driven by Ether.", @@ -401,28 +400,28 @@ public class Research { -14, 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 10L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, new Object[] { "research.ESSENTIA_UPGRADE_MECHANICS.page.0", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_UPGRADE_MECHANICS", ItemRefer.Essentia_Upgrade_Empty.get(1), new ItemStack[] { new ItemStack(ConfigBlocks.blockTube, 1, 4), new ItemStack(ConfigBlocks.blockTube, 1, 2), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.VividAlloy, 1), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Polybenzimidazole, 1), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.VividAlloy, 1), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Polybenzimidazole, 1), ItemList.Electric_Motor_IV.get(1), ItemList.Electric_Pump_IV.get(1), }, ItemRefer.Essentia_Upgrade_Mechanics.get(1), 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.LIMUS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128))), + new TCAspects.TC_AspectStack(TCAspects.ITER, 128), + new TCAspects.TC_AspectStack(TCAspects.LIMUS, 128), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 128))), "research.ESSENTIA_UPGRADE_MECHANICS.page.1", "research.ESSENTIA_UPGRADE_MECHANICS.page.2" }); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_UPGRADE_SPRITE", "Essentia: SPRITE", "Brain in a Machine.", @@ -434,29 +433,29 @@ public class Research { -15, 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, - new Object[] { "research.ESSENTIA_UPGRADE_SPRITE.page.0", GregTech_API.sThaumcraftCompat.addInfusionRecipe( + new Object[] { "research.ESSENTIA_UPGRADE_SPRITE.page.0", GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_UPGRADE_SPRITE", ItemRefer.Essentia_Upgrade_Empty.get(1), new ItemStack[] { new ItemStack(ConfigBlocks.blockJar, 1, 1), - GT_OreDictUnificator.get(OrePrefixes.food, Materials.Cheese, 1), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Shadow, 1), - GT_OreDictUnificator.get(OrePrefixes.spring, Materials.FierySteel, 1), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Milk, 1), ItemList.Machine_EV_Scanner.get(1) }, + GTOreDictUnificator.get(OrePrefixes.food, Materials.Cheese, 1), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Shadow, 1), + GTOreDictUnificator.get(OrePrefixes.spring, Materials.FierySteel, 1), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Milk, 1), ItemList.Machine_EV_Scanner.get(1) }, ItemRefer.Essentia_Upgrade_Spirit.get(1), 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 128))), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 128), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 128), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 128), + new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 128), + new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 128))), "research.ESSENTIA_UPGRADE_SPRITE.page.1", "research.ESSENTIA_UPGRADE_SPRITE.page.2" }); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_UPGRADE_RADIATION", "Essentia: RADIATION", "Atomic Heart", @@ -468,13 +467,13 @@ public class Research { -16, 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.RADIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, new Object[] { "research.ESSENTIA_UPGRADE_RADIATION.page.0", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_UPGRADE_RADIATION", ItemRefer.Essentia_Upgrade_Empty.get(1), new ItemStack[] { ItemRefer.High_Density_Plutonium.get(1), ItemRefer.High_Density_Uranium.get(1), @@ -482,9 +481,9 @@ public class Research { WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1) }, ItemRefer.Essentia_Upgrade_Radiation.get(1), 8, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1024))), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.RADIO, 1024))), "research.ESSENTIA_UPGRADE_RADIATION.page.1", "research.ESSENTIA_UPGRADE_RADIATION.page.2" }); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_UPGRADE_ELECTRIC", "Essentia: ELECTRIC", "Get electricity from... electricity?", @@ -498,43 +497,43 @@ public class Research { -12, 7, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, new Object[] { "research.ESSENTIA_UPGRADE_ELECTRIC.page.0", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_UPGRADE_RADIATION", ItemRefer.Essentia_Upgrade_Empty.get(1), - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorMV, 1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorEV, 1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 1) }, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorMV, 1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorEV, 1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 1) }, ItemRefer.Essentia_Upgrade_Electric.get(1), 10, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32768))), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32768))), "research.ESSENTIA_UPGRADE_ELECTRIC.page.1" }); ItemStack nodeLinkDevice = ThaumicBases.isModLoaded() - ? GT_ModHandler.getModItem(ThaumicBases.ID, "nodeLinker", 1, 0) + ? GTModHandler.getModItem(ThaumicBases.ID, "nodeLinker", 1, 0) : new ItemStack(ConfigBlocks.blockStoneDevice, 1, 11); ItemStack alchemicalFurnace = ThaumicBases.isModLoaded() - ? GT_ModHandler.getModItem(ThaumicBases.ID, "advAlchFurnace", 1, 0) + ? GTModHandler.getModItem(ThaumicBases.ID, "advAlchFurnace", 1, 0) : new ItemStack(ConfigBlocks.blockStoneDevice, 1, 0); ItemStack nitor = ThaumicTinkerer.isModLoaded() - ? GT_ModHandler.getModItem(ThaumicTinkerer.ID, "brightNitor", 1, 0) + ? GTModHandler.getModItem(ThaumicTinkerer.ID, "brightNitor", 1, 0) : new ItemStack(ConfigItems.itemResource, 1, 1); - ItemStack alchemicalBoiler = Automagy.isModLoaded() ? GT_ModHandler.getModItem(Automagy.ID, "blockBoiler", 1, 0) + ItemStack alchemicalBoiler = Automagy.isModLoaded() ? GTModHandler.getModItem(Automagy.ID, "blockBoiler", 1, 0) : new ItemStack(ConfigBlocks.blockStoneDevice, 1, 1); ItemStack essentiaLocus = Automagy.isModLoaded() - ? GT_ModHandler.getModItem(Automagy.ID, "blockEssentiaLocus", 1, 0) + ? GTModHandler.getModItem(Automagy.ID, "blockEssentiaLocus", 1, 0) : new ItemStack(ConfigBlocks.blockJar, 1, 1); ItemStack thauminiteBlock = ThaumicBases.isModLoaded() - ? GT_ModHandler.getModItem(ThaumicBases.ID, "thauminiteBlock", 1, 0) + ? GTModHandler.getModItem(ThaumicBases.ID, "thauminiteBlock", 1, 0) : new ItemStack(ConfigBlocks.blockCosmeticSolid, 1, 4); - GregTech_API.sThaumcraftCompat + GregTechAPI.sThaumcraftCompat .addResearch( "ESSENTIA_SMELTERY", "Large Essentia Smeltery", @@ -547,36 +546,36 @@ public class Research { -16, 3, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 10), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 10), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 10), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 10), - new TC_Aspects.TC_AspectStack(TC_Aspects.LIMUS, 10)), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 10), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 10), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 10), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 10), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 10), + new TCAspects.TC_AspectStack(TCAspects.LIMUS, 10)), null, new Object[] { "research.ESSENTIA_SMELTERY.page.0", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_SMELTERY", ItemList.Casing_Firebox_TungstenSteel.get(1), new ItemStack[] { nodeLinkDevice, nitor, alchemicalFurnace, essentiaLocus, alchemicalBoiler, new ItemStack(ConfigBlocks.blockCrystal, 1, 1), new ItemStack(ConfigBlocks.blockMetalDevice, 1, 3), ItemList.Electric_Piston_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.FierySteel, 1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L) }, + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.FierySteel, 1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L) }, ItemRefer.Large_Essentia_Smeltery.get(1), 16, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 256), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 256), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 256), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 256), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 256), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256))), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 256), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 256), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 256), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 256), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 256), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 256))), "research.ESSENTIA_SMELTERY.page.1", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_GENERATOR", ItemList.Hatch_Output_HV.get(1), new ItemStack[] { new ItemStack(ConfigBlocks.blockJar, 1), ItemRefer.Magic_Casing.get(1), @@ -584,10 +583,10 @@ public class Research { ItemRefer.Essentia_Output_Hatch.get(1), 6, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 128), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 64), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 32), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 32))), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 128), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 64), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 32), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 32))), "research.ESSENTIA_SMELTERY.page.2", addArcaneCraftingRecipe( "ESSENTIA_SMELTERY", @@ -606,22 +605,22 @@ public class Research { 'B', new ItemStack(ConfigBlocks.blockStoneDevice, 1, 14), 'C', - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Void, 1), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Void, 1), 'D', - new ItemStack(GregTech_API.sBlockCasings3, 1, 11), + new ItemStack(GregTechAPI.sBlockCasings3, 1, 11), 'E', - GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.NetherStar, 1), + GTOreDictUnificator.get(OrePrefixes.pipeSmall, Materials.NetherStar, 1), 'F', thauminiteBlock) }); if (ThaumicEnergistics.isModLoaded()) { ItemStack essentiaPump = WitchingGadgets.isModLoaded() - ? GT_ModHandler.getModItem(WitchingGadgets.ID, "WG_MetalDevice", 1, 0) + ? GTModHandler.getModItem(WitchingGadgets.ID, "WG_MetalDevice", 1, 0) : new ItemStack(ConfigBlocks.blockTube, 1, 4); ItemStack inter = ThaumicTinkerer.isModLoaded() - ? GT_ModHandler.getModItem(ThaumicTinkerer.ID, "interface", 1, 0) + ? GTModHandler.getModItem(ThaumicTinkerer.ID, "interface", 1, 0) : new ItemStack(ConfigItems.itemResource, 1, 15); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( "ESSENTIA_OUTPUT_HATCH_ME", "Essentia Output Hatch (ME)", "It must exist.", @@ -633,27 +632,27 @@ public class Research { -15, 3, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 10), - new TC_Aspects.TC_AspectStack(TC_Aspects.VINCULUM, 10), - new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 10), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 10), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 10)), + new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 10), + new TCAspects.TC_AspectStack(TCAspects.VINCULUM, 10), + new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 10), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 10), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 10)), null, new Object[] { "research.ESSENTIA_OUTPUT_HATCH_ME.page.0", - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( "ESSENTIA_OUTPUT_HATCH_ME", ItemRefer.Essentia_Output_Hatch.get(1), new ItemStack[] { - GT_ModHandler + GTModHandler .getModItem(ThaumicEnergistics.ID, "thaumicenergistics.block.essentia.provider", 1), new ItemStack(ConfigBlocks.blockEssentiaReservoir, 1, 0), essentiaPump, inter, }, ItemRefer.Essentia_Output_Hatch_ME.get(1), 8, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 256), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256), - new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 256), - new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 256))) }); + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 256), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 256), + new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 256), + new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 256))) }); } } } diff --git a/src/main/java/goodgenerator/items/DepletedFuelRod.java b/src/main/java/goodgenerator/items/DepletedFuelRod.java deleted file mode 100644 index 308f149933..0000000000 --- a/src/main/java/goodgenerator/items/DepletedFuelRod.java +++ /dev/null @@ -1,54 +0,0 @@ -package goodgenerator.items; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.ItemStack; - -import ic2.api.item.IBoxable; -import ic2.api.reactor.IReactor; -import ic2.api.reactor.IReactorComponent; - -public class DepletedFuelRod extends RadioactiveItem implements IReactorComponent, IBoxable { - - public DepletedFuelRod(String name, String[] tooltip, CreativeTabs Tab, int Rad) { - super(name, tooltip, Tab, Rad); - } - - @Override - public boolean canBeStoredInToolbox(ItemStack itemStack) { - return true; - } - - @Override - public void processChamber(IReactor iReactor, ItemStack itemStack, int i, int i1, boolean b) {} - - @Override - public boolean acceptUraniumPulse(IReactor iReactor, ItemStack itemStack, ItemStack itemStack1, int i, int i1, - int i2, int i3, boolean b) { - return false; - } - - @Override - public boolean canStoreHeat(IReactor iReactor, ItemStack itemStack, int i, int i1) { - return false; - } - - @Override - public int getMaxHeat(IReactor iReactor, ItemStack itemStack, int i, int i1) { - return 0; - } - - @Override - public int getCurrentHeat(IReactor iReactor, ItemStack itemStack, int i, int i1) { - return 0; - } - - @Override - public int alterHeat(IReactor iReactor, ItemStack itemStack, int i, int i1, int i2) { - return 0; - } - - @Override - public float influenceExplosion(IReactor iReactor, ItemStack itemStack) { - return 0; - } -} diff --git a/src/main/java/goodgenerator/items/FuelRod.java b/src/main/java/goodgenerator/items/FuelRod.java deleted file mode 100644 index 00ca8b3491..0000000000 --- a/src/main/java/goodgenerator/items/FuelRod.java +++ /dev/null @@ -1,215 +0,0 @@ -package goodgenerator.items; - -import static goodgenerator.util.DescTextLocalization.addText; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.util.GT_Utility; -import ic2.api.item.IBoxable; -import ic2.api.reactor.IReactor; -import ic2.api.reactor.IReactorComponent; -import ic2.core.util.StackUtil; -import ic2.core.util.Util; - -public class FuelRod extends RadioactiveItem implements IReactorComponent, IBoxable { - - private final int numberOfCells; - private final int maxDmg; - private final float Power; - private final int Heat; - private float HeatBonus = 0; - private final ItemStack result; - - public FuelRod(String aName, int aCells, int aEUt, int aHeat, int aRads, int aDuration, ItemStack aResult, - CreativeTabs Tab) { - super(aName, Tab, aRads); - this.setMaxStackSize(64); - this.numberOfCells = aCells; - this.maxDmg = aDuration; - this.Power = (float) aEUt / 25.0F; - this.result = aResult; - this.Heat = aHeat; - setMaxDamage(100); - } - - public FuelRod(String aName, int aCells, int aEUt, int aHeat, int aRads, int aDuration, float aHeatBonus, - ItemStack aResult, CreativeTabs Tab) { - super(aName, Tab, aRads); - this.setMaxStackSize(64); - this.numberOfCells = aCells; - this.maxDmg = aDuration; - this.Power = (float) aEUt / 25.0F; - this.result = aResult; - this.Heat = aHeat; - this.HeatBonus = aHeatBonus; - setMaxDamage(100); - } - - public void processChamber(IReactor reactor, ItemStack stack, int x, int y, boolean heatRun) { - if (reactor.produceEnergy()) { - for (int iteration = 0; iteration < this.numberOfCells; ++iteration) { - int pulses = 1 + this.numberOfCells / 2; - int heat; - if (!heatRun) { - for (heat = 0; heat < pulses; ++heat) { - this.acceptUraniumPulse(reactor, stack, stack, x, y, x, y, heatRun); - } - checkPulseable(reactor, x - 1, y, stack, x, y, heatRun); - checkPulseable(reactor, x + 1, y, stack, x, y, heatRun); - checkPulseable(reactor, x, y - 1, stack, x, y, heatRun); - checkPulseable(reactor, x, y + 1, stack, x, y, heatRun); - } else { - pulses += checkPulseable(reactor, x - 1, y, stack, x, y, heatRun) - + checkPulseable(reactor, x + 1, y, stack, x, y, heatRun) - + checkPulseable(reactor, x, y - 1, stack, x, y, heatRun) - + checkPulseable(reactor, x, y + 1, stack, x, y, heatRun); - heat = sumUp(pulses) * this.Heat; - ArrayList heatAcceptors = new ArrayList<>(); - this.checkHeatAcceptor(reactor, x - 1, y, heatAcceptors); - this.checkHeatAcceptor(reactor, x + 1, y, heatAcceptors); - this.checkHeatAcceptor(reactor, x, y - 1, heatAcceptors); - this.checkHeatAcceptor(reactor, x, y + 1, heatAcceptors); - - while (heatAcceptors.size() > 0 && heat > 0) { - int dheat = heat / heatAcceptors.size(); - heat -= dheat; - dheat = ((IReactorComponent) heatAcceptors.get(0).stack.getItem()).alterHeat( - reactor, - heatAcceptors.get(0).stack, - heatAcceptors.get(0).x, - heatAcceptors.get(0).y, - dheat); - heat += dheat; - heatAcceptors.remove(0); - } - - if (heat > 0) { - reactor.addHeat(heat); - } - } - } - if (this.getCustomDamage(stack) >= this.getMaxCustomDamage(stack) - 1) { - reactor.setItemAt(x, y, GT_Utility.copyAmount(1, result)); - } else if (heatRun) { - this.applyCustomDamage(stack, 1, null); - } - } - } - - private static int checkPulseable(IReactor reactor, int x, int y, ItemStack me, int mex, int mey, boolean heatrun) { - ItemStack other = reactor.getItemAt(x, y); - return other != null && other.getItem() instanceof IReactorComponent - && ((IReactorComponent) other.getItem()).acceptUraniumPulse(reactor, other, me, x, y, mex, mey, heatrun) ? 1 - : 0; - } - - private static int sumUp(int x) { - return (x * x + x) / 2; - } - - private void checkHeatAcceptor(IReactor reactor, int x, int y, ArrayList heatAcceptors) { - ItemStack thing = reactor.getItemAt(x, y); - if (thing != null && thing.getItem() instanceof IReactorComponent - && ((IReactorComponent) thing.getItem()).canStoreHeat(reactor, thing, x, y)) { - heatAcceptors.add(new ItemStackCoord(thing, x, y)); - } - } - - public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, - int pulseX, int pulseY, boolean heatrun) { - if (!heatrun) { - reactor.addOutput(Power * (1 + HeatBonus * ((float) reactor.getHeat() / (float) reactor.getMaxHeat()))); - } - return true; - } - - public boolean canStoreHeat(IReactor reactor, ItemStack yourStack, int x, int y) { - return false; - } - - public int getMaxHeat(IReactor reactor, ItemStack yourStack, int x, int y) { - return 0; - } - - public int getCurrentHeat(IReactor reactor, ItemStack yourStack, int x, int y) { - return 0; - } - - public int alterHeat(IReactor reactor, ItemStack yourStack, int x, int y, int heat) { - return heat; - } - - public float influenceExplosion(IReactor reactor, ItemStack yourStack) { - return (float) (2 * this.numberOfCells); - } - - @Override - public boolean canBeStoredInToolbox(ItemStack itemStack) { - return true; - } - - private static class ItemStackCoord { - - public ItemStack stack; - public int x; - public int y; - - public ItemStackCoord(ItemStack stack1, int x1, int y1) { - this.stack = stack1; - this.x = x1; - this.y = y1; - } - } - - public int getCustomDamage(ItemStack stack) { - NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack); - return nbt.getInteger("advDmg"); - } - - public int getMaxCustomDamage(ItemStack stack) { - return this.maxDmg; - } - - public void setCustomDamage(ItemStack stack, int damage) { - NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack); - nbt.setInteger("advDmg", damage); - int maxStackDamage = stack.getMaxDamage(); - if (maxStackDamage > 2) { - stack.setItemDamage(1 + (int) Util.map(damage, this.maxDmg, maxStackDamage - 2)); - } - } - - public boolean applyCustomDamage(ItemStack stack, int damage, EntityLivingBase src) { - this.setCustomDamage(stack, this.getCustomDamage(stack) + damage); - return true; - } - - @SideOnly(Side.CLIENT) - @SuppressWarnings("unchecked") - @Override - public void addInformation(ItemStack item, EntityPlayer player, List tooltip, boolean p_77624_4_) { - super.addInformation(item, player, tooltip, p_77624_4_); - tooltip.add( - String.format( - addText("fuelrod.tooltip", 1)[0], - getMaxCustomDamage(item) - getCustomDamage(item), - getMaxCustomDamage(item))); - double tMut = this.Heat / 4.0; - if (this.Heat == 4) { - tooltip.add(StatCollector.translateToLocal("fuelrodheat.tooltip.0")); - } else { - tooltip.add(String.format(StatCollector.translateToLocal("fuelrodheat.tooltip.1"), tMut)); - } - if (this.HeatBonus != 0) tooltip.add(StatCollector.translateToLocal("fuelrodheat.tooltip.2")); - } -} diff --git a/src/main/java/goodgenerator/items/GGItem.java b/src/main/java/goodgenerator/items/GGItem.java new file mode 100644 index 0000000000..627cf1c59b --- /dev/null +++ b/src/main/java/goodgenerator/items/GGItem.java @@ -0,0 +1,127 @@ +package goodgenerator.items; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +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.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.main.GoodGenerator; + +public class GGItem extends Item { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture; + + private String tex; + private String[] textureNames; + private final String Name; + private List tooltips = new ArrayList<>(); + private List tooltipses = new ArrayList<>(); + + public GGItem(String name, CreativeTabs Tab) { + this.setUnlocalizedName(name); + this.setCreativeTab(Tab); + this.tex = name; + this.Name = name; + } + + public GGItem(String name, CreativeTabs Tab, String[] textures) { + this.setUnlocalizedName(name); + this.setCreativeTab(Tab); + this.setHasSubtypes(true); + this.textureNames = textures; + this.Name = name; + } + + public GGItem(String name, String[] tooltip, CreativeTabs Tab, String[] textures) { + this.setUnlocalizedName(name); + this.setCreativeTab(Tab); + this.setHasSubtypes(true); + this.textureNames = textures; + this.Name = name; + this.tooltipses = Arrays.asList(tooltip); + } + + public GGItem(String name, String tooltip, CreativeTabs Tab) { + this.setUnlocalizedName(name); + this.setCreativeTab(Tab); + this.tex = name; + this.tooltips.add(tooltip); + this.Name = name; + } + + public GGItem(String name, String[] tooltip, CreativeTabs Tab) { + this.setUnlocalizedName(name); + this.setCreativeTab(Tab); + this.tex = name; + this.tooltips = Arrays.asList(tooltip); + this.Name = name; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int meta) { + if (this.texture == null || this.texture.length < 1) return this.itemIcon; + else return meta < this.texture.length ? this.texture[meta] : this.texture[0]; + } + + @Override + public int getMetadata(int aMeta) { + return aMeta; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + if (this.textureNames == null || this.textureNames.length < 1) { + this.itemIcon = iconRegister.registerIcon(GoodGenerator.MOD_ID + ":" + this.tex); + } else { + this.texture = new IIcon[this.textureNames.length]; + for (int i = 0; i < this.textureNames.length; ++i) { + this.texture[i] = iconRegister.registerIcon(this.textureNames[i]); + } + } + } + + @Override + public String getUnlocalizedName(ItemStack p_77667_1_) { + if (this.textureNames == null || this.textureNames.length < 1) { + return "item." + this.Name; + } else { + return "item." + this.Name + "." + p_77667_1_.getItemDamage(); + } + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + public void getSubItems(Item item, CreativeTabs tab, List list) { + if (this.texture == null || this.texture.length < 1) list.add(new ItemStack(item, 1, 0)); + else { + for (int i = 0; i < this.texture.length; ++i) { + list.add(new ItemStack(item, 1, i)); + } + } + } + + @SideOnly(Side.CLIENT) + @SuppressWarnings({ "unchecked" }) + public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List p_77624_3_, boolean p_77624_4_) { + if (tooltips.size() > 0) { + p_77624_3_.addAll(tooltips); + } + if (tooltipses.size() > 0) { + int meta = p_77624_1_.getItemDamage(); + if (tooltipses.size() - 1 < meta) meta = tooltipses.size() - 1; + p_77624_3_.add(tooltipses.get(meta)); + } + } +} diff --git a/src/main/java/goodgenerator/items/GGItemBlocks.java b/src/main/java/goodgenerator/items/GGItemBlocks.java new file mode 100644 index 0000000000..2d13d7a7af --- /dev/null +++ b/src/main/java/goodgenerator/items/GGItemBlocks.java @@ -0,0 +1,105 @@ +package goodgenerator.items; + +import static goodgenerator.loader.Loaders.essentiaCell; +import static goodgenerator.loader.Loaders.yottaFluidTankCell; +import static goodgenerator.util.CharExchanger.tierName; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import goodgenerator.blocks.regularBlock.BlockTEContainer; +import goodgenerator.blocks.tileEntity.MTEEssentiaOutputHatch; +import goodgenerator.main.GoodGenerator; +import goodgenerator.util.CharExchanger; +import goodgenerator.util.DescTextLocalization; +import gregtech.api.util.GTLanguageManager; + +public class GGItemBlocks extends ItemBlock { + + private final String mNoMobsToolTip = GTLanguageManager + .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); + private final String mNoTileEntityToolTip = GTLanguageManager + .addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!"); + + public GGItemBlocks(Block block) { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setCreativeTab(GoodGenerator.GG); + } + + @Override + public int getMetadata(int aMeta) { + return aMeta; + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return this.field_150939_a.getUnlocalizedName() + "." + this.getDamage(aStack); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(ItemStack stack, int pass) { + return this.field_150939_a.getIcon(0, stack.getItemDamage()); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { + return this.getIcon(stack, renderPass); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamageForRenderPass(int p_77618_1_, int p_77618_2_) { + return this.field_150939_a.getIcon(0, p_77618_2_); + } + + @Override + @SuppressWarnings({ "unchecked" }) + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer playerIn, List tooltip, boolean advanced) { + if (stack == null) return; + tooltip.add(mNoMobsToolTip); + if (Block.getBlockFromItem(stack.getItem()) instanceof BlockTEContainer) { + BlockTEContainer tile = (BlockTEContainer) Block.getBlockFromItem(stack.getItem()); + if (tile.getIndex() == 1) + tooltip.addAll(Arrays.asList(DescTextLocalization.addText("EssentiaHatch.tooltip", 2))); + if (tile.getIndex() == 2) { + tooltip.add(StatCollector.translateToLocal("EssentiaOutputHatch.tooltip.0")); + tooltip.add( + StatCollector.translateToLocal("EssentiaOutputHatch.tooltip.1") + " " + + MTEEssentiaOutputHatch.CAPACITY); + } + } else { + tooltip.add(mNoTileEntityToolTip); + } + + if (Block.getBlockFromItem(stack.getItem()) + .equals(yottaFluidTankCell)) { + StringBuilder cap = new StringBuilder(); + cap.append(" 1000000"); + for (int i = 0; i < stack.getItemDamage(); i++) cap.append("00"); + cap.append(" L"); + tooltip.add( + StatCollector.translateToLocal("YOTTankCell.tooltip.0") + CharExchanger.formatNumber(cap.toString())); + tooltip.add(StatCollector.translateToLocal("YOTTankCell.tooltip.1")); + } + + if (Block.getBlockFromItem(stack.getItem()) + .equals(essentiaCell)) { + tooltip + .add(StatCollector.translateToLocal("hatchTier.tooltip.0") + " " + tierName[stack.getItemDamage() + 4]); + } + } +} diff --git a/src/main/java/goodgenerator/items/GGMaterial.java b/src/main/java/goodgenerator/items/GGMaterial.java new file mode 100644 index 0000000000..aeade9eb00 --- /dev/null +++ b/src/main/java/goodgenerator/items/GGMaterial.java @@ -0,0 +1,1526 @@ +package goodgenerator.items; + +import static bartworks.util.BWUtil.subscriptNumbers; +import static gregtech.api.enums.Materials.*; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import bartworks.util.Pair; +import goodgenerator.util.CharExchanger; +import gregtech.api.enums.TextureSet; + +@SuppressWarnings({ "unchecked" }) +public class GGMaterial implements Runnable { + + protected static final int OffsetID = 10001; + + // Uranium Based Fuel Line + public static final Werkstoff graphiteUraniumMixture = new Werkstoff( + new short[] { 0x3a, 0x77, 0x3d }, + "Graphite-Uranium Mixture", + subscriptNumbers("C3U"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addMixerRecipes() + .onlyDust(), + OffsetID, + TextureSet.SET_DULL, + new Pair<>(Graphite, 3), + new Pair<>(Uranium, 1)); + + public static final Werkstoff uraniumBasedLiquidFuel = new Werkstoff( + new short[] { 0x00, 0xff, 0x00 }, + "Uranium Based Liquid Fuel", + subscriptNumbers("U36K8Qt4Rn"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 1, + TextureSet.SET_FLUID); + + public static final Werkstoff uraniumBasedLiquidFuelExcited = new Werkstoff( + new short[] { 0x00, 0xff, 0x00 }, + "Uranium Based Liquid Fuel (Excited State)", + subscriptNumbers("*(U36K8Qt4Rn)*"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 2, + TextureSet.SET_FLUID); + + public static final Werkstoff uraniumBasedLiquidFuelDepleted = new Werkstoff( + new short[] { 0x6e, 0x8b, 0x3d }, + "Uranium Based Liquid Fuel (Depleted)", + subscriptNumbers("Pb?Bi?Ba?Xe?"), + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 3, + TextureSet.SET_FLUID); + + // Thorium Based Fuel + public static final Werkstoff uraniumCarbideThoriumMixture = new Werkstoff( + new short[] { 0x16, 0x32, 0x07 }, + "Uranium Carbide-Thorium Mixture", + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addMixerRecipes() + .onlyDust(), + OffsetID + 4, + TextureSet.SET_DULL, + new Pair<>(Thorium, 11), + new Pair<>(WerkstoffLoader.Thorium232, 1), + new Pair<>(Uranium235, 1), + new Pair<>(Carbon, 3)); + + public static final Werkstoff thoriumBasedLiquidFuel = new Werkstoff( + new short[] { 0x50, 0x32, 0x66 }, + "Thorium Based Liquid Fuel", + subscriptNumbers("Th432Li4D2Hg"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 5, + TextureSet.SET_FLUID); + + public static final Werkstoff thoriumBasedLiquidFuelExcited = new Werkstoff( + new short[] { 0x50, 0x32, 0x66 }, + "Thorium Based Liquid Fuel (Excited State)", + subscriptNumbers("*(Th432Li4D2Hg)*"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 6, + TextureSet.SET_FLUID); + + public static final Werkstoff thoriumBasedLiquidFuelDepleted = new Werkstoff( + new short[] { 0x7d, 0x6c, 0x8a }, + "Thorium Based Liquid Fuel (Depleted)", + subscriptNumbers("Th?Pr?B?In?"), + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 7, + TextureSet.SET_FLUID); + + // Plutonium Based Fuel + public static final Werkstoff plutoniumOxideUraniumMixture = new Werkstoff( + new short[] { 0xd1, 0x1f, 0x4a }, + "Plutonium Oxide-Uranium Mixture", + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addMixerRecipes() + .onlyDust(), + OffsetID + 8, + TextureSet.SET_SHINY, + new Pair<>(Plutonium, 10), + new Pair<>(Oxygen, 12), + new Pair<>(Uranium, 2), + new Pair<>(Carbon, 8)); + + public static final Werkstoff plutoniumBasedLiquidFuel = new Werkstoff( + new short[] { 0xef, 0x15, 0x15 }, + "Plutonium Based Liquid Fuel", + subscriptNumbers("Pu45Nt8Cs16Nq2"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 9, + TextureSet.SET_FLUID); + + public static final Werkstoff plutoniumBasedLiquidFuelExcited = new Werkstoff( + new short[] { 0xef, 0x15, 0x15 }, + "Plutonium Based Liquid Fuel (Excited State)", + subscriptNumbers("*(Pu45Nt8Cs16Nq2)*"), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 10, + TextureSet.SET_FLUID); + + public static final Werkstoff plutoniumBasedLiquidFuelDepleted = new Werkstoff( + new short[] { 0x67, 0x19, 0x19 }, + "Plutonium Based Liquid Fuel (Depleted)", + subscriptNumbers("Tn?Ce?Au?Kr?"), + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 11, + TextureSet.SET_FLUID); + + // Thorium-233 + public static final Werkstoff oxalate = new Werkstoff( + new short[] { 0x79, 0xd8, 0x55 }, + "Oxalate", + Werkstoff.Types.BIOLOGICAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 12, + TextureSet.SET_FLUID, + new Pair<>(Hydrogen, 2), + new Pair<>(Carbon, 2), + new Pair<>(Oxygen, 4)); + + public static final Werkstoff vanadiumPentoxide = new Werkstoff( + new short[] { 0xde, 0x8d, 0x12 }, + "Vanadium Pentoxide", + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 13, + TextureSet.SET_SHINY, + new Pair<>(Vanadium, 2), + new Pair<>(Oxygen, 5)); + + public static final Werkstoff thoriumNitrate = new Werkstoff( + new short[] { 0xba, 0xe8, 0x26 }, + "Thorium Nitrate", + subscriptNumbers("Th(NO3)4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 14, + TextureSet.SET_DULL); + + public static final Werkstoff thoriumOxalate = new Werkstoff( + new short[] { 0x50, 0x63, 0x13 }, + "Thorium Oxalate", + subscriptNumbers("Th(C2O4)2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 15, + TextureSet.SET_DULL); + + public static final Werkstoff thoriumHydroxide = new Werkstoff( + new short[] { 0x92, 0xae, 0x89 }, + "Thorium Hydroxide", + subscriptNumbers("Th(OH)4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 16, + TextureSet.SET_SHINY); + + public static final Werkstoff sodiumOxalate = new Werkstoff( + new short[] { 0xe4, 0xf8, 0x9b }, + "Sodium Oxalate", + subscriptNumbers("Na2C2O4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 17, + TextureSet.SET_DULL); + + public static final Werkstoff thoriumTetrachloride = new Werkstoff( + new short[] { 0x13, 0x7c, 0x16 }, + "Thorium Tetrachloride", + subscriptNumbers("ThCl4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 18, + TextureSet.SET_FLUID); + + public static final Werkstoff thoriumTetrafluoride = new Werkstoff( + new short[] { 0x15, 0x6a, 0x6a }, + "Thorium Tetrafluoride", + subscriptNumbers("ThF4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 19, + TextureSet.SET_FLUID); + + public static final Werkstoff thorium232Tetrafluoride = new Werkstoff( + new short[] { 0x15, 0x6a, 0x6a }, + "Thorium-232 Tetrafluoride", + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 20, + TextureSet.SET_FLUID, + new Pair<>(WerkstoffLoader.Thorium232, 1), + new Pair<>(Fluorine, 4)); + + // Atomic Separation Catalyst + public static final Werkstoff orundum = new Werkstoff( + new short[] { 0xcd, 0x26, 0x26 }, + "Orundum", + "Or", + new Werkstoff.Stats().setProtons(120) + .setMass(300), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().addGems() + .addMolten(), + OffsetID + 22, + TextureSet.SET_DIAMOND); + + public static final Werkstoff atomicSeparationCatalyst = new Werkstoff( + new short[] { 0xe8, 0x5e, 0x0c }, + "Atomic Separation Catalyst", + "the melting core...", + new Werkstoff.Stats().setMeltingPoint(5000), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addMetalItems() + .addSimpleMetalWorkingItems() + .addCraftingMetalWorkingItems() + .addMultipleIngotMetalWorkingItems(), + OffsetID + 21, + TextureSet.SET_SHINY, + new Pair<>(GGMaterial.orundum, 2), + new Pair<>(Plutonium, 1), + new Pair<>(Naquadah, 2)); + + // Naquadah Fuel Rework + public static final Werkstoff extremelyUnstableNaquadah = new Werkstoff( + new short[] { 0x06, 0x26, 0x05 }, + "Extremely Unstable Naquadah", + "Nq" + CharExchanger.shifter(9734), + new Werkstoff.Stats().setMeltingPoint(7000) + .setBlastFurnace(true) + .setProtons(200) + .setMass(450) + .setRadioactive(true) + .setDurOverride(180224) + .setSpeedOverride(100f) + .setQualityOverride((byte) 11), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addMetalItems() + .addSimpleMetalWorkingItems() + .addCraftingMetalWorkingItems() + .addMultipleIngotMetalWorkingItems(), + OffsetID + 23, + TextureSet.SET_SHINY); + + public static final Werkstoff lightNaquadahFuel = new Werkstoff( + new short[] { 92, 203, 92 }, + "Light Naquadah Fuel", + "far from enough", + new Werkstoff.Stats().setToxic(true) + .setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 24, + TextureSet.SET_FLUID); + + public static final Werkstoff heavyNaquadahFuel = new Werkstoff( + new short[] { 54, 255, 54 }, + "Heavy Naquadah Fuel", + "still need processing", + new Werkstoff.Stats().setToxic(true) + .setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 25, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahGas = new Werkstoff( + new short[] { 93, 219, 0 }, + "Naquadah Gas", + "Who need it?", + new Werkstoff.Stats().setToxic(true) + .setRadioactive(true) + .setGas(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 26, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahAsphalt = new Werkstoff( + new short[] { 5, 37, 5 }, + "Naquadah Asphalt", + "It will damage the reactor.", + new Werkstoff.Stats().setToxic(true) + .setRadioactive(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 27, + TextureSet.SET_FLUID); + + public static final Werkstoff ether = new Werkstoff( + new short[] { 0xeb, 0xbc, 0x2f }, + "Ether", + subscriptNumbers("CH3CH2OCH2CH3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 28, + TextureSet.SET_FLUID, + new Pair<>(Carbon, 4), + new Pair<>(Hydrogen, 10), + new Pair<>(Oxygen, 1)); + + public static final Werkstoff antimonyTrichloride = new Werkstoff( + new short[] { 0x0f, 0xdc, 0x34 }, + "Antimony Trichloride Solution", + subscriptNumbers("SbCl3"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 29, + TextureSet.SET_FLUID); + + public static final Werkstoff antimonyPentachlorideSolution = new Werkstoff( + new short[] { 0x15, 0x93, 0x2c }, + "Antimony Pentachloride Solution", + subscriptNumbers("SbCl5"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 30, + TextureSet.SET_FLUID); + + public static final Werkstoff antimonyPentachloride = new Werkstoff( + new short[] { 0x15, 0x93, 0x2c }, + "Antimony Pentachloride", + subscriptNumbers("SbCl5"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 31, + TextureSet.SET_FLUID); + + public static final Werkstoff antimonyPentafluoride = new Werkstoff( + new short[] { 0x16, 0xd5, 0xe2 }, + "Antimony Pentafluoride", + subscriptNumbers("SbF5"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 32, + TextureSet.SET_FLUID); + + public static final Werkstoff fluoroantimonicAcid = new Werkstoff( + new short[] { 0x16, 0xd5, 0xe2 }, + "Fluoroantimonic Acid", + subscriptNumbers("HSbF6"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 33, + TextureSet.SET_FLUID); + + public static final Werkstoff radioactiveSludge = new Werkstoff( + new short[] { 0xb3, 0x49, 0x1e }, + "Radioactive Sludge", + ">>> DANGER <<<", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 34, + TextureSet.SET_DULL); + + public static final Werkstoff acidNaquadahEmulsion = new Werkstoff( + new short[] { 0x25, 0x22, 0x22 }, + "Acid Naquadah Emulsion", + "??Nq??H" + CharExchanger.shifter(8314), + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 35, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahEmulsion = new Werkstoff( + new short[] { 0x4a, 0x46, 0x45 }, + "Naquadah Emulsion", + "??Nq??", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 36, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahSolution = new Werkstoff( + new short[] { 0x84, 0x81, 0x80 }, + "Naquadah Solution", + "~Nq~", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 37, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkI = new Werkstoff( + new short[] { 0x62, 0x5c, 0x5b }, + "Naquadah Based Liquid Fuel MkI", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 38, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkIDepleted = new Werkstoff( + new short[] { 0xcb, 0xc3, 0xc1 }, + "Naquadah Based Liquid Fuel MkI (Depleted)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 39, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkII = new Werkstoff( + new short[] { 0x52, 0x4e, 0x4d }, + "Naquadah Based Liquid Fuel MkII", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 40, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkIIDepleted = new Werkstoff( + new short[] { 0xb5, 0xb0, 0xae }, + "Naquadah Based Liquid Fuel MkII (Depleted)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 41, + TextureSet.SET_FLUID); + /* These materials will be enable when they are removed in GregTech */ + /* + * public static final Werkstoff praseodymium = new Werkstoff( new short[]{0xff,0xff,0xff}, "praseodymium", "Pr", + * new Werkstoff.Stats(), Werkstoff.Types.ELEMENT, new + * Werkstoff.GenerationFeatures().disable().onlyDust().addMolten().addMetalItems(), OffsetID + 42, + * TextureSet.SET_METALLIC ); public static final Werkstoff rubidium = new Werkstoff( new short[]{0xff,0x2a,0x00}, + * "rubidium", "Rb", new Werkstoff.Stats(), Werkstoff.Types.ELEMENT, new + * Werkstoff.GenerationFeatures().disable().onlyDust().addMolten().addMetalItems(), OffsetID + 43, + * TextureSet.SET_SHINY ); public static final Werkstoff thulium = new Werkstoff( new short[]{0xff,0xff,0xff}, + * "Thulium", "Tm", new Werkstoff.Stats(), Werkstoff.Types.ELEMENT, new + * Werkstoff.GenerationFeatures().disable().onlyDust().addMolten().addMetalItems(), OffsetID + 44, + * TextureSet.SET_METALLIC ); + */ + public static final Werkstoff naquadahBasedFuelMkIII = new Werkstoff( + new short[] { 0x29, 0x22, 0x21 }, + "Naquadah Based Liquid Fuel MkIII", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 45, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkIIIDepleted = new Werkstoff( + new short[] { 0x66, 0x40, 0x38 }, + "Naquadah Based Liquid Fuel MkIII (Depleted)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 46, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkIV = new Werkstoff( + new short[] { 0x0e, 0x0c, 0x0c }, + "Naquadah Based Liquid Fuel MkIV", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 47, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkIVDepleted = new Werkstoff( + new short[] { 0x8e, 0x34, 0x22 }, + "Naquadah Based Liquid Fuel MkIV (Depleted)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 48, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkV = new Werkstoff( + new short[] { 0x00, 0x00, 0x00 }, + "Naquadah Based Liquid Fuel MkV", + "THE END", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 49, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkVDepleted = new Werkstoff( + new short[] { 0xff, 0xff, 0xff }, + "Naquadah Based Liquid Fuel MkV (Depleted)", + "THE END (literally)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 50, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkVI = new Werkstoff( + new short[] { 0x30, 0x00, 0x00 }, + "Naquadah Based Liquid Fuel MkVI", + "THE FUTURE", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 115, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahBasedFuelMkVIDepleted = new Werkstoff( + new short[] { 0x99, 0x33, 0x33 }, + "Naquadah Based Liquid Fuel MkVI (Depleted)", + "THE FUTURE (achieved)", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 116, + TextureSet.SET_FLUID); + + public static final Werkstoff zincChloride = new Werkstoff( + new short[] { 0x73, 0xa5, 0xfc }, + "Zinc Chloride", + subscriptNumbers("ZnCl2"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 51, + TextureSet.SET_SHINY, + new Pair<>(Zinc, 1), + new Pair<>(Chlorine, 2)); + + public static final Werkstoff zincThoriumAlloy = new Werkstoff( + new short[] { 0x12, 0x34, 0x56 }, + "Zn-Th Alloy", + subscriptNumbers("ZnTh"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addMetalItems(), + OffsetID + 52, + TextureSet.SET_SHINY, + new Pair<>(Zinc, 1), + new Pair<>(Thorium, 1)); + + // Naquadah Rework Materials + public static final Werkstoff naquadahEarth = new Werkstoff( + new short[] { 0x4c, 0x4c, 0x4c }, + "Naquadah Oxide Mixture", + subscriptNumbers("??NqTiGaAd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + OffsetID + 53, + TextureSet.SET_METALLIC); + + public static final Werkstoff titaniumTrifluoride = new Werkstoff( + new short[] { 0xc0, 0x92, 0xa8 }, + "Titanium Trifluoride", + subscriptNumbers("TiF3"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 54, + TextureSet.SET_METALLIC, + new Pair<>(Titanium, 1), + new Pair<>(Fluorine, 3)); + + public static final Werkstoff lowQualityNaquadahEmulsion = new Werkstoff( + new short[] { 0x4c, 0x4c, 0x4c }, + "Low Quality Naquadah Emulsion", + subscriptNumbers("??NqGaAd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 55, + TextureSet.SET_FLUID); + + public static final Werkstoff galliumHydroxide = new Werkstoff( + new short[] { 0xa6, 0xa6, 0xa6 }, + "Gallium Hydroxide", + subscriptNumbers("Ga(OH)3"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 56, + TextureSet.SET_DULL, + new Pair<>(Gallium, 1), + new Pair<>(Oxygen, 3), + new Pair<>(Hydrogen, 3)); + + public static final Werkstoff lowQualityNaquadahSolution = new Werkstoff( + new short[] { 0x71, 0x62, 0x62 }, + "Low Quality Naquadah Solution", + subscriptNumbers("~??NqAd??~"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 57, + TextureSet.SET_FLUID); + + public static final Werkstoff towEthyl1Hexanol = new Werkstoff( + new short[] { 0x80, 0xb5, 0x57 }, + "2-Ethyl-1-Hexanol", + subscriptNumbers("C8H18O"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 58, + TextureSet.SET_FLUID, + new Pair<>(Carbon, 8), + new Pair<>(Oxygen, 1), + new Pair<>(Hydrogen, 18)); + + public static final Werkstoff P507 = new Werkstoff( + new short[] { 0x29, 0xc2, 0x2a }, + "P-507", + subscriptNumbers("(C8H17)2PO3H"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 59, + TextureSet.SET_FLUID, + new Pair<>(Carbon, 16), + new Pair<>(Phosphorus, 1), + new Pair<>(Oxygen, 3), + new Pair<>(Hydrogen, 35)); + + public static final Werkstoff naquadahAdamantiumSolution = new Werkstoff( + new short[] { 0x3d, 0x38, 0x38 }, + "Naquadah-Adamantium Solution", + subscriptNumbers("~NqAd~"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 60, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahRichSolution = new Werkstoff( + new short[] { 0x33, 0x33, 0x33 }, + "Naquadah-Rich Solution", + subscriptNumbers("~?Nq?~"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 61, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadahine = new Werkstoff( + new short[] { 0x33, 0x33, 0x33 }, + "Naquadahine", + subscriptNumbers("NqO2"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 62, + TextureSet.SET_METALLIC, + new Pair<>(Naquadah, 1), + new Pair<>(Oxygen, 2)); + + public static final Werkstoff fluorineRichWasteLiquid = new Werkstoff( + new short[] { 0x13, 0x68, 0x62 }, + "Fluorine-Rich Waste Liquid", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 63, + TextureSet.SET_FLUID); + + public static final Werkstoff wasteLiquid = new Werkstoff( + new short[] { 0x14, 0x1c, 0x68 }, + "Waste Liquid", + new Werkstoff.Stats().setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 64, + TextureSet.SET_FLUID); + + public static final Werkstoff adamantine = new Werkstoff( + new short[] { 0xb7, 0xb7, 0xb7 }, + "Adamantine", + subscriptNumbers("Ad2O3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 65, + TextureSet.SET_DULL, + new Pair<>(Adamantium, 2), + new Pair<>(Oxygen, 3)); + + public static final Werkstoff enrichedNaquadahEarth = new Werkstoff( + new short[] { 0x82, 0x68, 0x68 }, + "Enriched-Naquadah Oxide Mixture", + subscriptNumbers("??KeNq") + CharExchanger.shifter(8314) + "??", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + OffsetID + 66, + TextureSet.SET_METALLIC); + + public static final Werkstoff triniumSulphate = new Werkstoff( + new short[] { 0xda, 0xda, 0xda }, + "Trinium Sulphate", + subscriptNumbers("KeSO4"), + new Werkstoff.Stats().setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 67, + TextureSet.SET_METALLIC, + new Pair<>(Trinium, 1), + new Pair<>(Sulfur, 1), + new Pair<>(Oxygen, 4)); + + public static final Werkstoff enrichedNaquadahRichSolution = new Werkstoff( + new short[] { 0x52, 0x39, 0x39 }, + "Enriched-Naquadah-Rich Solution", + subscriptNumbers("~?Nq") + CharExchanger.shifter(8314) + "?~", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 68, + TextureSet.SET_FLUID); + + public static final Werkstoff concentratedEnrichedNaquadahSludge = new Werkstoff( + new short[] { 0x52, 0x39, 0x39 }, + "Concentrated Enriched-Naquadah Sludge", + subscriptNumbers("?Nq") + CharExchanger.shifter(8314) + "?", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 69, + TextureSet.SET_METALLIC); + + public static final Werkstoff enrichedNaquadahSulphate = new Werkstoff( + new short[] { 0x52, 0x39, 0x39 }, + "Enriched-Naquadah Sulphate", + "Nq" + CharExchanger.shifter(8314) + subscriptNumbers("(SO4)2"), + new Werkstoff.Stats().setRadioactive(true) + .setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 70, + TextureSet.SET_DULL, + new Pair<>(NaquadahEnriched, 1), + new Pair<>(Sulfur, 2), + new Pair<>(Oxygen, 8)); + + public static final Werkstoff naquadriaEarth = new Werkstoff( + new short[] { 0x4d, 0x4d, 0x55 }, + "Naquadria Oxide Mixture", + subscriptNumbers("??Nq*BaIn??"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures(), + OffsetID + 71, + TextureSet.SET_METALLIC); + + public static final Werkstoff indiumPhosphate = new Werkstoff( + new short[] { 0x2b, 0x2e, 0x70 }, + "Indium Phosphate", + subscriptNumbers("InPO4"), + new Werkstoff.Stats().setToxic(true) + .setElektrolysis(false), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 72, + TextureSet.SET_DULL, + new Pair<>(Indium, 1), + new Pair<>(Phosphorus, 1), + new Pair<>(Oxygen, 4)); + + public static final Werkstoff lowQualityNaquadriaPhosphate = new Werkstoff( + new short[] { 0x4d, 0x4d, 0x55 }, + "Low Quality Naquadria Phosphate", + subscriptNumbers("??Nq*3(PO4)4??"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 73, + TextureSet.SET_DULL); + + public static final Werkstoff naquadriaRichSolution = new Werkstoff( + new short[] { 0x1f, 0x1e, 0x33 }, + "Naquadria-Rich Solution", + subscriptNumbers("~?Nq*?~"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 74, + TextureSet.SET_FLUID); + + public static final Werkstoff lowQualityNaquadriaSulphate = new Werkstoff( + new short[] { 0x73, 0x72, 0x84 }, + "Low Quality Naquadria Sulphate", + subscriptNumbers("??Nq*(SO4)2??"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 75, + TextureSet.SET_METALLIC); + + public static final Werkstoff lowQualityNaquadriaSolution = new Werkstoff( + new short[] { 0x73, 0x72, 0x84 }, + "Low Quality Naquadria Sulphate", + subscriptNumbers("~??Nq*??~"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 76, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadriaSulphate = new Werkstoff( + new short[] { 0x1f, 0x1e, 0x33 }, + "Naquadria Sulphate", + subscriptNumbers("Nq*(SO4)2"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true) + .setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 77, + TextureSet.SET_METALLIC, + new Pair<>(Naquadria, 1), + new Pair<>(Sulfur, 2), + new Pair<>(Oxygen, 8)); + + public static final Werkstoff naquadahGoo = new Werkstoff( + new short[] { 0x4c, 0x4c, 0x4c }, + "Naquadah Goo", + subscriptNumbers("??NqTiGaAd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 78, + TextureSet.SET_FLUID); + + public static final Werkstoff enrichedNaquadahGoo = new Werkstoff( + new short[] { 0x82, 0x68, 0x68 }, + "Enriched Naquadah Goo", + subscriptNumbers("??KeNq") + CharExchanger.shifter(8314) + "??", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 79, + TextureSet.SET_FLUID); + + public static final Werkstoff naquadriaGoo = new Werkstoff( + new short[] { 0x4d, 0x4d, 0x55 }, + "Naquadria Goo", + subscriptNumbers("??Nq*BaIn??"), + new Werkstoff.Stats().setRadioactive(true) + .setToxic(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 80, + TextureSet.SET_FLUID); + + // material for reactor stuff + public static final Werkstoff zircaloy4 = new Werkstoff( + new short[] { 0x8a, 0x6e, 0x68 }, + "Zircaloy-4", + subscriptNumbers("Zr34Sn5Fe2Cr"), + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(2800), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 4), + OffsetID + 81, + TextureSet.SET_METALLIC, + new Pair<>(WerkstoffLoader.Zirconium, 34), + new Pair<>(Tin, 5), + new Pair<>(Iron, 2), + new Pair<>(Chrome, 1)); + + public static final Werkstoff zircaloy2 = new Werkstoff( + new short[] { 0xa4, 0x8f, 0x8b }, + "Zircaloy-2", + subscriptNumbers("Zr34Sn4FeCrNi"), + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(2800), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 2), + OffsetID + 82, + TextureSet.SET_METALLIC, + new Pair<>(WerkstoffLoader.Zirconium, 34), + new Pair<>(Tin, 4), + new Pair<>(Iron, 1), + new Pair<>(Chrome, 1), + new Pair<>(Nickel, 1)); + + public static final Werkstoff incoloy903 = new Werkstoff( + new short[] { 0xa4, 0x8f, 0x8b }, + "Incoloy-903", + subscriptNumbers("Fe12Ni10Co8Ti4Mo2Al"), + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(3700), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMixerRecipes((short) 6), + OffsetID + 83, + TextureSet.SET_METALLIC, + new Pair<>(Iron, 12), + new Pair<>(Nickel, 10), + new Pair<>(Cobalt, 8), + new Pair<>(Titanium, 4), + new Pair<>(Molybdenum, 2), + new Pair<>(Aluminium, 1)); + + public static final Werkstoff adamantiumAlloy = new Werkstoff( + new short[] { 0xa0, 0xa0, 0xa0 }, + "Adamantium Alloy", + subscriptNumbers("Ad5Nq2La3"), + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(5500) + .setSpeedOverride(191.2F) + .setDurOverride(102400), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMixerRecipes((short) 3), + OffsetID + 84, + TextureSet.SET_SHINY, + new Pair<>(Adamantium, 5), + new Pair<>(Naquadah, 2), + new Pair<>(Lanthanum, 3)); + + public static final Werkstoff ethanolGasoline = new Werkstoff( + new short[] { 0xe4, 0xc6, 0x61 }, + "Ethanol Gasoline", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 85, + TextureSet.SET_FLUID); + + public static final Werkstoff cyclopentadiene = new Werkstoff( + new short[] { 0xff, 0xf6, 0xbd }, + "Cyclopentadiene", + subscriptNumbers("C5H6"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 86, + TextureSet.SET_FLUID); + + public static final Werkstoff ferrousChloride = new Werkstoff( + new short[] { 0x5b, 0x5b, 0x5b }, + "Iron II Chloride", + subscriptNumbers("FeCl2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 87, + TextureSet.SET_FLUID); + + public static final Werkstoff diethylamine = new Werkstoff( + new short[] { 0x69, 0x77, 0xca }, + "Diethylamine", + subscriptNumbers("C4H11N"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 88, + TextureSet.SET_FLUID); + + public static final Werkstoff impureFerroceneMixture = new Werkstoff( + new short[] { 0x79, 0x55, 0x08 }, + "Impure Ferrocene Mixture", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 89, + TextureSet.SET_FLUID); + + public static final Werkstoff ferroceneSolution = new Werkstoff( + new short[] { 0xde, 0x7e, 0x1c }, + "Ferrocene Solution", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 90, + TextureSet.SET_FLUID); + + public static final Werkstoff ferroceneWaste = new Werkstoff( + new short[] { 0x35, 0x1d, 0x03 }, + "Ferrocene Waste", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 91, + TextureSet.SET_FLUID); + + public static final Werkstoff ferrocene = new Werkstoff( + new short[] { 0xf1, 0x8f, 0x2b }, + "Ferrocene", + subscriptNumbers("Fe(C5H5)2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 92, + TextureSet.SET_SHINY); + + public static final Werkstoff ironedKerosene = new Werkstoff( + new short[] { 0x97, 0x00, 0x61 }, + "Jet Fuel No.3", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 93, + TextureSet.SET_FLUID); + + public static final Werkstoff ironedFuel = new Werkstoff( + new short[] { 0xff, 0x98, 0x00 }, + "Jet Fuel A", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 94, + TextureSet.SET_FLUID); + + public static final Werkstoff marM200 = new Werkstoff( + new short[] { 0x51, 0x51, 0x51 }, + "MAR-M200 Steel", + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(5000), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMixerRecipes((short) 7), + OffsetID + 95, + TextureSet.SET_SHINY, + new Pair<>(Niobium, 2), + new Pair<>(Chrome, 9), + new Pair<>(Aluminium, 5), + new Pair<>(Titanium, 2), + new Pair<>(Cobalt, 10), + new Pair<>(Tungsten, 13), + new Pair<>(Nickel, 18)); + + public static final Werkstoff marCeM200 = new Werkstoff( + new short[] { 0x38, 0x30, 0x30 }, + "MAR-Ce-M200 Steel", + new Werkstoff.Stats().setCentrifuge(true) + .setBlastFurnace(true) + .setMeltingPoint(5000) + .setMass(1200) + .setProtons(1000) + .setSpeedOverride(150F) + .setDurOverride(204800), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMultipleIngotMetalWorkingItems(), + OffsetID + 96, + TextureSet.SET_METALLIC, + new Pair<>(marM200, 18), + new Pair<>(Cerium, 1)); + + public static final Werkstoff lithiumChloride = new Werkstoff( + new short[] { 0xb7, 0xe2, 0xce }, + "Lithium Chloride", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .enforceUnification(), + OffsetID + 97, + TextureSet.SET_DULL, + new Pair<>(Lithium, 1), + new Pair<>(Chlorine, 1)); + + public static final Werkstoff signalium = new Werkstoff( + new short[] { 0xd4, 0x40, 0x00 }, + "Signalium", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(4000), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems(), + OffsetID + 98, + TextureSet.SET_SHINY, + new Pair<>(AnnealedCopper, 4), + new Pair<>(Ardite, 2), + new Pair<>(RedAlloy, 2)); + + public static final Werkstoff lumiinessence = new Werkstoff( + new short[] { 0xe8, 0xf2, 0x24 }, + "Lumiinessence", + subscriptNumbers("(Al??)2(PO4)4"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust(), + OffsetID + 99, + TextureSet.SET_DULL); + + public static final Werkstoff lumiium = new Werkstoff( + new short[] { 0xe8, 0xf2, 0x24 }, + "Lumiium", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(4000), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems(), + OffsetID + 100, + TextureSet.SET_SHINY, + new Pair<>(TinAlloy, 4), + new Pair<>(SterlingSilver, 2), + new Pair<>(lumiinessence, 2)); + + public static final Werkstoff artheriumSn = new Werkstoff( + new short[] { 0x60, 0x36, 0xf7 }, + "Artherium-Sn", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(6500) + .setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 6), + OffsetID + 101, + TextureSet.SET_SHINY, + new Pair<>(adamantiumAlloy, 12), + new Pair<>(orundum, 9), + new Pair<>(Tin, 8), + new Pair<>(Arsenic, 7), + new Pair<>(Caesium, 4), + new Pair<>(Osmiridium, 3)); + + public static final Werkstoff titaniumBetaC = new Werkstoff( + new short[] { 0xc7, 0x2f, 0xcc }, + "Tanmolyium Beta-C", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(5300) + .setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 5), + OffsetID + 102, + TextureSet.SET_METALLIC, + new Pair<>(Titanium, 5), + new Pair<>(Molybdenum, 5), + new Pair<>(Vanadium, 2), + new Pair<>(Chrome, 3), + new Pair<>(Aluminium, 1)); + + public static final Werkstoff dalisenite = new Werkstoff( + new short[] { 0xb0, 0xb8, 0x12 }, + "Dalisenite", + new Werkstoff.Stats().setMeltingPoint(8700) + .setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 6), + OffsetID + 103, + TextureSet.SET_SHINY, + new Pair<>(titaniumBetaC, 14), + new Pair<>(Tungsten, 10), + new Pair<>(NiobiumTitanium, 9), + new Pair<>(WerkstoffLoader.LuVTierMaterial, 8), + new Pair<>(Quantium, 7), + new Pair<>(Erbium, 3)); + + public static final Werkstoff hikarium = new Werkstoff( + new short[] { 0xff, 0xd6, 0xfb }, + "Hikarium", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(5400) + .setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 3), + OffsetID + 104, + TextureSet.SET_SHINY, + new Pair<>(lumiium, 18), + new Pair<>(Silver, 8), + new Pair<>(Sunnarium, 4)); + + public static final Werkstoff tairitsu = new Werkstoff( + new short[] { 0x36, 0x36, 0x36 }, + "Tairitsu", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(7400) + .setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMixerRecipes((short) 6), + OffsetID + 105, + TextureSet.SET_SHINY, + new Pair<>(Tungsten, 8), + new Pair<>(Naquadria, 7), + new Pair<>(Bedrockium, 4), + new Pair<>(Carbon, 4), + new Pair<>(Vanadium, 3), + new Pair<>(BlackPlutonium, 1)); + + public static final Werkstoff antimonyPentafluorideSolution = new Werkstoff( + new short[] { 0x16, 0xd5, 0xe2 }, + "Antimony Pentafluoride Solution", + subscriptNumbers("SbF5"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + OffsetID + 106, + TextureSet.SET_FLUID); + + public static final Werkstoff magnesiumSulphate = new Werkstoff( + new short[] { 0x87, 0x74, 0x91 }, + "Magnesium Sulphate", + subscriptNumbers("MgSO4"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 107, + TextureSet.SET_DULL, + new Pair<>(Magnesium, 1), + new Pair<>(Sulfur, 1), + new Pair<>(Oxygen, 4)); + + public static final Werkstoff preciousMetalAlloy = new Werkstoff( + new short[] { 0x9d, 0x90, 0xc6 }, + "Precious Metals Alloy", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(10000) + .setCentrifuge(true) + .setSpeedOverride(100F), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMixerRecipes((short) 6), + OffsetID + 108, + TextureSet.SET_SHINY, + new Pair<>(WerkstoffLoader.Ruthenium, 1), + new Pair<>(WerkstoffLoader.Rhodium, 1), + new Pair<>(Palladium, 1), + new Pair<>(Platinum, 1), + new Pair<>(Osmium, 1), + new Pair<>(Iridium, 1)); + + public static final Werkstoff enrichedNaquadahAlloy = new Werkstoff( + new short[] { 0x16, 0x07, 0x40 }, + "Enriched Naquadah Alloy", + new Werkstoff.Stats().setBlastFurnace(true) + .setMeltingPoint(11000) + .setCentrifuge(true) + .setSpeedOverride(180F), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMixerRecipes((short) 4), + OffsetID + 109, + TextureSet.SET_METALLIC, + new Pair<>(NaquadahEnriched, 8), + new Pair<>(Tritanium, 5), + new Pair<>(WerkstoffLoader.Californium, 3), + new Pair<>(BlackPlutonium, 2)); + + public static final Werkstoff metastableOganesson = new Werkstoff( + new short[] { 0x14, 0x39, 0x7f }, + "Metastable Oganesson", + "Og*", + new Werkstoff.Stats().setBlastFurnace(true) + .setProtons(118) + .setMass(294) + .setMeltingPoint(11000), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMetaSolidifierRecipes(), + OffsetID + 110, + TextureSet.SET_SHINY); + + public static final Werkstoff shirabon = new Werkstoff( + new short[] { 0xe0, 0x15, 0x6d }, + "Shirabon", + "Sh" + CharExchanger.shifter(9191), + new Werkstoff.Stats().setProtons(500) + .setMass(750) + .setMeltingPoint(13000) + .setSpeedOverride(640.0F) + .setDurOverride(15728640) + .setQualityOverride((byte) 26), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().onlyDust() + .addMolten() + .addMetalItems() + .addCraftingMetalWorkingItems() + .addSimpleMetalWorkingItems() + .addMultipleIngotMetalWorkingItems() + .addMetalCraftingSolidifierRecipes() + .addMetaSolidifierRecipes(), + OffsetID + 111, + TextureSet.SET_SHINY); + + public static final Werkstoff inertNaquadah = new Werkstoff( + new short[] { 0x3b, 0x3b, 0x3b }, + "Inert Naquadah", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 112, + TextureSet.SET_METALLIC, + new Pair<>(Naquadah, 1)); + + public static final Werkstoff inertEnrichedNaquadah = new Werkstoff( + new short[] { 0x61, 0x44, 0x44 }, + "Inert Enriched Naquadah", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 113, + TextureSet.SET_METALLIC, + new Pair<>(NaquadahEnriched, 1)); + + public static final Werkstoff inertNaquadria = new Werkstoff( + new short[] { 0x00, 0x00, 0x00 }, + "Inert Naquadria", + new Werkstoff.Stats().setRadioactive(true), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + OffsetID + 114, + TextureSet.SET_METALLIC, + new Pair<>(Naquadria, 1)); + + @Override + public void run() {} +} diff --git a/src/main/java/goodgenerator/items/ItemDepletedFuelRod.java b/src/main/java/goodgenerator/items/ItemDepletedFuelRod.java new file mode 100644 index 0000000000..b08df4d5a3 --- /dev/null +++ b/src/main/java/goodgenerator/items/ItemDepletedFuelRod.java @@ -0,0 +1,54 @@ +package goodgenerator.items; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.ItemStack; + +import ic2.api.item.IBoxable; +import ic2.api.reactor.IReactor; +import ic2.api.reactor.IReactorComponent; + +public class ItemDepletedFuelRod extends RadioactiveItem implements IReactorComponent, IBoxable { + + public ItemDepletedFuelRod(String name, String[] tooltip, CreativeTabs Tab, int Rad) { + super(name, tooltip, Tab, Rad); + } + + @Override + public boolean canBeStoredInToolbox(ItemStack itemStack) { + return true; + } + + @Override + public void processChamber(IReactor iReactor, ItemStack itemStack, int i, int i1, boolean b) {} + + @Override + public boolean acceptUraniumPulse(IReactor iReactor, ItemStack itemStack, ItemStack itemStack1, int i, int i1, + int i2, int i3, boolean b) { + return false; + } + + @Override + public boolean canStoreHeat(IReactor iReactor, ItemStack itemStack, int i, int i1) { + return false; + } + + @Override + public int getMaxHeat(IReactor iReactor, ItemStack itemStack, int i, int i1) { + return 0; + } + + @Override + public int getCurrentHeat(IReactor iReactor, ItemStack itemStack, int i, int i1) { + return 0; + } + + @Override + public int alterHeat(IReactor iReactor, ItemStack itemStack, int i, int i1, int i2) { + return 0; + } + + @Override + public float influenceExplosion(IReactor iReactor, ItemStack itemStack) { + return 0; + } +} diff --git a/src/main/java/goodgenerator/items/ItemFuelRod.java b/src/main/java/goodgenerator/items/ItemFuelRod.java new file mode 100644 index 0000000000..89acdf6933 --- /dev/null +++ b/src/main/java/goodgenerator/items/ItemFuelRod.java @@ -0,0 +1,216 @@ +package goodgenerator.items; + +import static goodgenerator.util.DescTextLocalization.addText; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.util.GTUtility; +import ic2.api.item.IBoxable; +import ic2.api.reactor.IReactor; +import ic2.api.reactor.IReactorComponent; +import ic2.core.util.StackUtil; +import ic2.core.util.Util; + +public class ItemFuelRod extends RadioactiveItem implements IReactorComponent, IBoxable { + + private final int numberOfCells; + private final int maxDmg; + private final float Power; + private final int Heat; + private float HeatBonus = 0; + private final ItemStack result; + + public ItemFuelRod(String aName, int aCells, int aEUt, int aHeat, int aRads, int aDuration, ItemStack aResult, + CreativeTabs Tab) { + super(aName, Tab, aRads); + this.setMaxStackSize(64); + this.numberOfCells = aCells; + this.maxDmg = aDuration; + this.Power = (float) aEUt / 25.0F; + this.result = aResult; + this.Heat = aHeat; + setMaxDamage(100); + } + + public ItemFuelRod(String aName, int aCells, int aEUt, int aHeat, int aRads, int aDuration, float aHeatBonus, + ItemStack aResult, CreativeTabs Tab) { + super(aName, Tab, aRads); + this.setMaxStackSize(64); + this.numberOfCells = aCells; + this.maxDmg = aDuration; + this.Power = (float) aEUt / 25.0F; + this.result = aResult; + this.Heat = aHeat; + this.HeatBonus = aHeatBonus; + setMaxDamage(100); + } + + public void processChamber(IReactor reactor, ItemStack stack, int x, int y, boolean heatRun) { + if (reactor.produceEnergy()) { + for (int iteration = 0; iteration < this.numberOfCells; ++iteration) { + int pulses = 1 + this.numberOfCells / 2; + int heat; + if (!heatRun) { + for (heat = 0; heat < pulses; ++heat) { + this.acceptUraniumPulse(reactor, stack, stack, x, y, x, y, heatRun); + } + checkPulseable(reactor, x - 1, y, stack, x, y, heatRun); + checkPulseable(reactor, x + 1, y, stack, x, y, heatRun); + checkPulseable(reactor, x, y - 1, stack, x, y, heatRun); + checkPulseable(reactor, x, y + 1, stack, x, y, heatRun); + } else { + pulses += checkPulseable(reactor, x - 1, y, stack, x, y, heatRun) + + checkPulseable(reactor, x + 1, y, stack, x, y, heatRun) + + checkPulseable(reactor, x, y - 1, stack, x, y, heatRun) + + checkPulseable(reactor, x, y + 1, stack, x, y, heatRun); + heat = sumUp(pulses) * this.Heat; + ArrayList heatAcceptors = new ArrayList<>(); + this.checkHeatAcceptor(reactor, x - 1, y, heatAcceptors); + this.checkHeatAcceptor(reactor, x + 1, y, heatAcceptors); + this.checkHeatAcceptor(reactor, x, y - 1, heatAcceptors); + this.checkHeatAcceptor(reactor, x, y + 1, heatAcceptors); + + while (heatAcceptors.size() > 0 && heat > 0) { + int dheat = heat / heatAcceptors.size(); + heat -= dheat; + dheat = ((IReactorComponent) heatAcceptors.get(0).stack.getItem()).alterHeat( + reactor, + heatAcceptors.get(0).stack, + heatAcceptors.get(0).x, + heatAcceptors.get(0).y, + dheat); + heat += dheat; + heatAcceptors.remove(0); + } + + if (heat > 0) { + reactor.addHeat(heat); + } + } + } + if (this.getCustomDamage(stack) >= this.getMaxCustomDamage(stack) - 1) { + reactor.setItemAt(x, y, GTUtility.copyAmount(1, result)); + } else if (heatRun) { + this.applyCustomDamage(stack, 1, null); + } + } + } + + private static int checkPulseable(IReactor reactor, int x, int y, ItemStack me, int mex, int mey, boolean heatrun) { + ItemStack other = reactor.getItemAt(x, y); + return other != null && other.getItem() instanceof IReactorComponent + && ((IReactorComponent) other.getItem()).acceptUraniumPulse(reactor, other, me, x, y, mex, mey, heatrun) ? 1 + : 0; + } + + private static int sumUp(int x) { + return (x * x + x) / 2; + } + + private void checkHeatAcceptor(IReactor reactor, int x, int y, + ArrayList heatAcceptors) { + ItemStack thing = reactor.getItemAt(x, y); + if (thing != null && thing.getItem() instanceof IReactorComponent + && ((IReactorComponent) thing.getItem()).canStoreHeat(reactor, thing, x, y)) { + heatAcceptors.add(new ItemStackCoord(thing, x, y)); + } + } + + public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, + int pulseX, int pulseY, boolean heatrun) { + if (!heatrun) { + reactor.addOutput(Power * (1 + HeatBonus * ((float) reactor.getHeat() / (float) reactor.getMaxHeat()))); + } + return true; + } + + public boolean canStoreHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return false; + } + + public int getMaxHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return 0; + } + + public int getCurrentHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return 0; + } + + public int alterHeat(IReactor reactor, ItemStack yourStack, int x, int y, int heat) { + return heat; + } + + public float influenceExplosion(IReactor reactor, ItemStack yourStack) { + return (float) (2 * this.numberOfCells); + } + + @Override + public boolean canBeStoredInToolbox(ItemStack itemStack) { + return true; + } + + private static class ItemStackCoord { + + public ItemStack stack; + public int x; + public int y; + + public ItemStackCoord(ItemStack stack1, int x1, int y1) { + this.stack = stack1; + this.x = x1; + this.y = y1; + } + } + + public int getCustomDamage(ItemStack stack) { + NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack); + return nbt.getInteger("advDmg"); + } + + public int getMaxCustomDamage(ItemStack stack) { + return this.maxDmg; + } + + public void setCustomDamage(ItemStack stack, int damage) { + NBTTagCompound nbt = StackUtil.getOrCreateNbtData(stack); + nbt.setInteger("advDmg", damage); + int maxStackDamage = stack.getMaxDamage(); + if (maxStackDamage > 2) { + stack.setItemDamage(1 + (int) Util.map(damage, this.maxDmg, maxStackDamage - 2)); + } + } + + public boolean applyCustomDamage(ItemStack stack, int damage, EntityLivingBase src) { + this.setCustomDamage(stack, this.getCustomDamage(stack) + damage); + return true; + } + + @SideOnly(Side.CLIENT) + @SuppressWarnings("unchecked") + @Override + public void addInformation(ItemStack item, EntityPlayer player, List tooltip, boolean p_77624_4_) { + super.addInformation(item, player, tooltip, p_77624_4_); + tooltip.add( + String.format( + addText("fuelrod.tooltip", 1)[0], + getMaxCustomDamage(item) - getCustomDamage(item), + getMaxCustomDamage(item))); + double tMut = this.Heat / 4.0; + if (this.Heat == 4) { + tooltip.add(StatCollector.translateToLocal("fuelrodheat.tooltip.0")); + } else { + tooltip.add(String.format(StatCollector.translateToLocal("fuelrodheat.tooltip.1"), tMut)); + } + if (this.HeatBonus != 0) tooltip.add(StatCollector.translateToLocal("fuelrodheat.tooltip.2")); + } +} diff --git a/src/main/java/goodgenerator/items/MyItemBlocks.java b/src/main/java/goodgenerator/items/MyItemBlocks.java deleted file mode 100644 index 3ee7347e97..0000000000 --- a/src/main/java/goodgenerator/items/MyItemBlocks.java +++ /dev/null @@ -1,105 +0,0 @@ -package goodgenerator.items; - -import static goodgenerator.loader.Loaders.essentiaCell; -import static goodgenerator.loader.Loaders.yottaFluidTankCell; -import static goodgenerator.util.CharExchanger.tierName; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import goodgenerator.blocks.regularBlock.TEBlock; -import goodgenerator.blocks.tileEntity.EssentiaOutputHatch; -import goodgenerator.main.GoodGenerator; -import goodgenerator.util.CharExchanger; -import goodgenerator.util.DescTextLocalization; -import gregtech.api.util.GT_LanguageManager; - -public class MyItemBlocks extends ItemBlock { - - private final String mNoMobsToolTip = GT_LanguageManager - .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); - private final String mNoTileEntityToolTip = GT_LanguageManager - .addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!"); - - public MyItemBlocks(Block block) { - super(block); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setCreativeTab(GoodGenerator.GG); - } - - @Override - public int getMetadata(int aMeta) { - return aMeta; - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return this.field_150939_a.getUnlocalizedName() + "." + this.getDamage(aStack); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(ItemStack stack, int pass) { - return this.field_150939_a.getIcon(0, stack.getItemDamage()); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { - return this.getIcon(stack, renderPass); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIconFromDamageForRenderPass(int p_77618_1_, int p_77618_2_) { - return this.field_150939_a.getIcon(0, p_77618_2_); - } - - @Override - @SuppressWarnings({ "unchecked" }) - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack stack, EntityPlayer playerIn, List tooltip, boolean advanced) { - if (stack == null) return; - tooltip.add(mNoMobsToolTip); - if (Block.getBlockFromItem(stack.getItem()) instanceof TEBlock) { - TEBlock tile = (TEBlock) Block.getBlockFromItem(stack.getItem()); - if (tile.getIndex() == 1) - tooltip.addAll(Arrays.asList(DescTextLocalization.addText("EssentiaHatch.tooltip", 2))); - if (tile.getIndex() == 2) { - tooltip.add(StatCollector.translateToLocal("EssentiaOutputHatch.tooltip.0")); - tooltip.add( - StatCollector.translateToLocal("EssentiaOutputHatch.tooltip.1") + " " - + EssentiaOutputHatch.CAPACITY); - } - } else { - tooltip.add(mNoTileEntityToolTip); - } - - if (Block.getBlockFromItem(stack.getItem()) - .equals(yottaFluidTankCell)) { - StringBuilder cap = new StringBuilder(); - cap.append(" 1000000"); - for (int i = 0; i < stack.getItemDamage(); i++) cap.append("00"); - cap.append(" L"); - tooltip.add( - StatCollector.translateToLocal("YOTTankCell.tooltip.0") + CharExchanger.formatNumber(cap.toString())); - tooltip.add(StatCollector.translateToLocal("YOTTankCell.tooltip.1")); - } - - if (Block.getBlockFromItem(stack.getItem()) - .equals(essentiaCell)) { - tooltip - .add(StatCollector.translateToLocal("hatchTier.tooltip.0") + " " + tierName[stack.getItemDamage() + 4]); - } - } -} diff --git a/src/main/java/goodgenerator/items/MyItems.java b/src/main/java/goodgenerator/items/MyItems.java deleted file mode 100644 index 71a67d4fd6..0000000000 --- a/src/main/java/goodgenerator/items/MyItems.java +++ /dev/null @@ -1,127 +0,0 @@ -package goodgenerator.items; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -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.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import goodgenerator.main.GoodGenerator; - -public class MyItems extends Item { - - @SideOnly(Side.CLIENT) - protected IIcon[] texture; - - private String tex; - private String[] textureNames; - private final String Name; - private List tooltips = new ArrayList<>(); - private List tooltipses = new ArrayList<>(); - - public MyItems(String name, CreativeTabs Tab) { - this.setUnlocalizedName(name); - this.setCreativeTab(Tab); - this.tex = name; - this.Name = name; - } - - public MyItems(String name, CreativeTabs Tab, String[] textures) { - this.setUnlocalizedName(name); - this.setCreativeTab(Tab); - this.setHasSubtypes(true); - this.textureNames = textures; - this.Name = name; - } - - public MyItems(String name, String[] tooltip, CreativeTabs Tab, String[] textures) { - this.setUnlocalizedName(name); - this.setCreativeTab(Tab); - this.setHasSubtypes(true); - this.textureNames = textures; - this.Name = name; - this.tooltipses = Arrays.asList(tooltip); - } - - public MyItems(String name, String tooltip, CreativeTabs Tab) { - this.setUnlocalizedName(name); - this.setCreativeTab(Tab); - this.tex = name; - this.tooltips.add(tooltip); - this.Name = name; - } - - public MyItems(String name, String[] tooltip, CreativeTabs Tab) { - this.setUnlocalizedName(name); - this.setCreativeTab(Tab); - this.tex = name; - this.tooltips = Arrays.asList(tooltip); - this.Name = name; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIconFromDamage(int meta) { - if (this.texture == null || this.texture.length < 1) return this.itemIcon; - else return meta < this.texture.length ? this.texture[meta] : this.texture[0]; - } - - @Override - public int getMetadata(int aMeta) { - return aMeta; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister iconRegister) { - if (this.textureNames == null || this.textureNames.length < 1) { - this.itemIcon = iconRegister.registerIcon(GoodGenerator.MOD_ID + ":" + this.tex); - } else { - this.texture = new IIcon[this.textureNames.length]; - for (int i = 0; i < this.textureNames.length; ++i) { - this.texture[i] = iconRegister.registerIcon(this.textureNames[i]); - } - } - } - - @Override - public String getUnlocalizedName(ItemStack p_77667_1_) { - if (this.textureNames == null || this.textureNames.length < 1) { - return "item." + this.Name; - } else { - return "item." + this.Name + "." + p_77667_1_.getItemDamage(); - } - } - - @Override - @SideOnly(Side.CLIENT) - @SuppressWarnings("unchecked") - public void getSubItems(Item item, CreativeTabs tab, List list) { - if (this.texture == null || this.texture.length < 1) list.add(new ItemStack(item, 1, 0)); - else { - for (int i = 0; i < this.texture.length; ++i) { - list.add(new ItemStack(item, 1, i)); - } - } - } - - @SideOnly(Side.CLIENT) - @SuppressWarnings({ "unchecked" }) - public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List p_77624_3_, boolean p_77624_4_) { - if (tooltips.size() > 0) { - p_77624_3_.addAll(tooltips); - } - if (tooltipses.size() > 0) { - int meta = p_77624_1_.getItemDamage(); - if (tooltipses.size() - 1 < meta) meta = tooltipses.size() - 1; - p_77624_3_.add(tooltipses.get(meta)); - } - } -} diff --git a/src/main/java/goodgenerator/items/MyMaterial.java b/src/main/java/goodgenerator/items/MyMaterial.java deleted file mode 100644 index 9d0dfc7b6e..0000000000 --- a/src/main/java/goodgenerator/items/MyMaterial.java +++ /dev/null @@ -1,1527 +0,0 @@ -package goodgenerator.items; - -import static com.github.bartimaeusnek.bartworks.util.BW_Util.subscriptNumbers; -import static gregtech.api.enums.Materials.*; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.bartimaeusnek.bartworks.util.Pair; - -import goodgenerator.util.CharExchanger; -import gregtech.api.enums.TextureSet; - -@SuppressWarnings({ "unchecked" }) -public class MyMaterial implements Runnable { - - protected static final int OffsetID = 10001; - - // Uranium Based Fuel Line - public static final Werkstoff graphiteUraniumMixture = new Werkstoff( - new short[] { 0x3a, 0x77, 0x3d }, - "Graphite-Uranium Mixture", - subscriptNumbers("C3U"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addMixerRecipes() - .onlyDust(), - OffsetID, - TextureSet.SET_DULL, - new Pair<>(Graphite, 3), - new Pair<>(Uranium, 1)); - - public static final Werkstoff uraniumBasedLiquidFuel = new Werkstoff( - new short[] { 0x00, 0xff, 0x00 }, - "Uranium Based Liquid Fuel", - subscriptNumbers("U36K8Qt4Rn"), - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 1, - TextureSet.SET_FLUID); - - public static final Werkstoff uraniumBasedLiquidFuelExcited = new Werkstoff( - new short[] { 0x00, 0xff, 0x00 }, - "Uranium Based Liquid Fuel (Excited State)", - subscriptNumbers("*(U36K8Qt4Rn)*"), - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 2, - TextureSet.SET_FLUID); - - public static final Werkstoff uraniumBasedLiquidFuelDepleted = new Werkstoff( - new short[] { 0x6e, 0x8b, 0x3d }, - "Uranium Based Liquid Fuel (Depleted)", - subscriptNumbers("Pb?Bi?Ba?Xe?"), - new Werkstoff.Stats().setToxic(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 3, - TextureSet.SET_FLUID); - - // Thorium Based Fuel - public static final Werkstoff uraniumCarbideThoriumMixture = new Werkstoff( - new short[] { 0x16, 0x32, 0x07 }, - "Uranium Carbide-Thorium Mixture", - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addMixerRecipes() - .onlyDust(), - OffsetID + 4, - TextureSet.SET_DULL, - new Pair<>(Thorium, 11), - new Pair<>(WerkstoffLoader.Thorium232, 1), - new Pair<>(Uranium235, 1), - new Pair<>(Carbon, 3)); - - public static final Werkstoff thoriumBasedLiquidFuel = new Werkstoff( - new short[] { 0x50, 0x32, 0x66 }, - "Thorium Based Liquid Fuel", - subscriptNumbers("Th432Li4D2Hg"), - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 5, - TextureSet.SET_FLUID); - - public static final Werkstoff thoriumBasedLiquidFuelExcited = new Werkstoff( - new short[] { 0x50, 0x32, 0x66 }, - "Thorium Based Liquid Fuel (Excited State)", - subscriptNumbers("*(Th432Li4D2Hg)*"), - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 6, - TextureSet.SET_FLUID); - - public static final Werkstoff thoriumBasedLiquidFuelDepleted = new Werkstoff( - new short[] { 0x7d, 0x6c, 0x8a }, - "Thorium Based Liquid Fuel (Depleted)", - subscriptNumbers("Th?Pr?B?In?"), - new Werkstoff.Stats().setToxic(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 7, - TextureSet.SET_FLUID); - - // Plutonium Based Fuel - public static final Werkstoff plutoniumOxideUraniumMixture = new Werkstoff( - new short[] { 0xd1, 0x1f, 0x4a }, - "Plutonium Oxide-Uranium Mixture", - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addMixerRecipes() - .onlyDust(), - OffsetID + 8, - TextureSet.SET_SHINY, - new Pair<>(Plutonium, 10), - new Pair<>(Oxygen, 12), - new Pair<>(Uranium, 2), - new Pair<>(Carbon, 8)); - - public static final Werkstoff plutoniumBasedLiquidFuel = new Werkstoff( - new short[] { 0xef, 0x15, 0x15 }, - "Plutonium Based Liquid Fuel", - subscriptNumbers("Pu45Nt8Cs16Nq2"), - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 9, - TextureSet.SET_FLUID); - - public static final Werkstoff plutoniumBasedLiquidFuelExcited = new Werkstoff( - new short[] { 0xef, 0x15, 0x15 }, - "Plutonium Based Liquid Fuel (Excited State)", - subscriptNumbers("*(Pu45Nt8Cs16Nq2)*"), - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 10, - TextureSet.SET_FLUID); - - public static final Werkstoff plutoniumBasedLiquidFuelDepleted = new Werkstoff( - new short[] { 0x67, 0x19, 0x19 }, - "Plutonium Based Liquid Fuel (Depleted)", - subscriptNumbers("Tn?Ce?Au?Kr?"), - new Werkstoff.Stats().setToxic(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 11, - TextureSet.SET_FLUID); - - // Thorium-233 - public static final Werkstoff oxalate = new Werkstoff( - new short[] { 0x79, 0xd8, 0x55 }, - "Oxalate", - Werkstoff.Types.BIOLOGICAL, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 12, - TextureSet.SET_FLUID, - new Pair<>(Hydrogen, 2), - new Pair<>(Carbon, 2), - new Pair<>(Oxygen, 4)); - - public static final Werkstoff vanadiumPentoxide = new Werkstoff( - new short[] { 0xde, 0x8d, 0x12 }, - "Vanadium Pentoxide", - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 13, - TextureSet.SET_SHINY, - new Pair<>(Vanadium, 2), - new Pair<>(Oxygen, 5)); - - public static final Werkstoff thoriumNitrate = new Werkstoff( - new short[] { 0xba, 0xe8, 0x26 }, - "Thorium Nitrate", - subscriptNumbers("Th(NO3)4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 14, - TextureSet.SET_DULL); - - public static final Werkstoff thoriumOxalate = new Werkstoff( - new short[] { 0x50, 0x63, 0x13 }, - "Thorium Oxalate", - subscriptNumbers("Th(C2O4)2"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 15, - TextureSet.SET_DULL); - - public static final Werkstoff thoriumHydroxide = new Werkstoff( - new short[] { 0x92, 0xae, 0x89 }, - "Thorium Hydroxide", - subscriptNumbers("Th(OH)4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 16, - TextureSet.SET_SHINY); - - public static final Werkstoff sodiumOxalate = new Werkstoff( - new short[] { 0xe4, 0xf8, 0x9b }, - "Sodium Oxalate", - subscriptNumbers("Na2C2O4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 17, - TextureSet.SET_DULL); - - public static final Werkstoff thoriumTetrachloride = new Werkstoff( - new short[] { 0x13, 0x7c, 0x16 }, - "Thorium Tetrachloride", - subscriptNumbers("ThCl4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 18, - TextureSet.SET_FLUID); - - public static final Werkstoff thoriumTetrafluoride = new Werkstoff( - new short[] { 0x15, 0x6a, 0x6a }, - "Thorium Tetrafluoride", - subscriptNumbers("ThF4"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 19, - TextureSet.SET_FLUID); - - public static final Werkstoff thorium232Tetrafluoride = new Werkstoff( - new short[] { 0x15, 0x6a, 0x6a }, - "Thorium-232 Tetrafluoride", - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 20, - TextureSet.SET_FLUID, - new Pair<>(WerkstoffLoader.Thorium232, 1), - new Pair<>(Fluorine, 4)); - - // Atomic Separation Catalyst - public static final Werkstoff orundum = new Werkstoff( - new short[] { 0xcd, 0x26, 0x26 }, - "Orundum", - "Or", - new Werkstoff.Stats().setProtons(120) - .setMass(300), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().addGems() - .addMolten(), - OffsetID + 22, - TextureSet.SET_DIAMOND); - - public static final Werkstoff atomicSeparationCatalyst = new Werkstoff( - new short[] { 0xe8, 0x5e, 0x0c }, - "Atomic Separation Catalyst", - "the melting core...", - new Werkstoff.Stats().setMeltingPoint(5000), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten() - .addMetalItems() - .addSimpleMetalWorkingItems() - .addCraftingMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), - OffsetID + 21, - TextureSet.SET_SHINY, - new Pair<>(MyMaterial.orundum, 2), - new Pair<>(Plutonium, 1), - new Pair<>(Naquadah, 2)); - - // Naquadah Fuel Rework - public static final Werkstoff extremelyUnstableNaquadah = new Werkstoff( - new short[] { 0x06, 0x26, 0x05 }, - "Extremely Unstable Naquadah", - "Nq" + CharExchanger.shifter(9734), - new Werkstoff.Stats().setMeltingPoint(7000) - .setBlastFurnace(true) - .setProtons(200) - .setMass(450) - .setRadioactive(true) - .setDurOverride(180224) - .setSpeedOverride(100f) - .setQualityOverride((byte) 11), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten() - .addMetalItems() - .addSimpleMetalWorkingItems() - .addCraftingMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), - OffsetID + 23, - TextureSet.SET_SHINY); - - public static final Werkstoff lightNaquadahFuel = new Werkstoff( - new short[] { 92, 203, 92 }, - "Light Naquadah Fuel", - "far from enough", - new Werkstoff.Stats().setToxic(true) - .setRadioactive(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 24, - TextureSet.SET_FLUID); - - public static final Werkstoff heavyNaquadahFuel = new Werkstoff( - new short[] { 54, 255, 54 }, - "Heavy Naquadah Fuel", - "still need processing", - new Werkstoff.Stats().setToxic(true) - .setRadioactive(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 25, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahGas = new Werkstoff( - new short[] { 93, 219, 0 }, - "Naquadah Gas", - "Who need it?", - new Werkstoff.Stats().setToxic(true) - .setRadioactive(true) - .setGas(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 26, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahAsphalt = new Werkstoff( - new short[] { 5, 37, 5 }, - "Naquadah Asphalt", - "It will damage the reactor.", - new Werkstoff.Stats().setToxic(true) - .setRadioactive(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 27, - TextureSet.SET_FLUID); - - public static final Werkstoff ether = new Werkstoff( - new short[] { 0xeb, 0xbc, 0x2f }, - "Ether", - subscriptNumbers("CH3CH2OCH2CH3"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 28, - TextureSet.SET_FLUID, - new Pair<>(Carbon, 4), - new Pair<>(Hydrogen, 10), - new Pair<>(Oxygen, 1)); - - public static final Werkstoff antimonyTrichloride = new Werkstoff( - new short[] { 0x0f, 0xdc, 0x34 }, - "Antimony Trichloride Solution", - subscriptNumbers("SbCl3"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 29, - TextureSet.SET_FLUID); - - public static final Werkstoff antimonyPentachlorideSolution = new Werkstoff( - new short[] { 0x15, 0x93, 0x2c }, - "Antimony Pentachloride Solution", - subscriptNumbers("SbCl5"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 30, - TextureSet.SET_FLUID); - - public static final Werkstoff antimonyPentachloride = new Werkstoff( - new short[] { 0x15, 0x93, 0x2c }, - "Antimony Pentachloride", - subscriptNumbers("SbCl5"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 31, - TextureSet.SET_FLUID); - - public static final Werkstoff antimonyPentafluoride = new Werkstoff( - new short[] { 0x16, 0xd5, 0xe2 }, - "Antimony Pentafluoride", - subscriptNumbers("SbF5"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 32, - TextureSet.SET_FLUID); - - public static final Werkstoff fluoroantimonicAcid = new Werkstoff( - new short[] { 0x16, 0xd5, 0xe2 }, - "Fluoroantimonic Acid", - subscriptNumbers("HSbF6"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 33, - TextureSet.SET_FLUID); - - public static final Werkstoff radioactiveSludge = new Werkstoff( - new short[] { 0xb3, 0x49, 0x1e }, - "Radioactive Sludge", - ">>> DANGER <<<", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 34, - TextureSet.SET_DULL); - - public static final Werkstoff acidNaquadahEmulsion = new Werkstoff( - new short[] { 0x25, 0x22, 0x22 }, - "Acid Naquadah Emulsion", - "??Nq??H" + CharExchanger.shifter(8314), - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 35, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahEmulsion = new Werkstoff( - new short[] { 0x4a, 0x46, 0x45 }, - "Naquadah Emulsion", - "??Nq??", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 36, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahSolution = new Werkstoff( - new short[] { 0x84, 0x81, 0x80 }, - "Naquadah Solution", - "~Nq~", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 37, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahBasedFuelMkI = new Werkstoff( - new short[] { 0x62, 0x5c, 0x5b }, - "Naquadah Based Liquid Fuel MkI", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 38, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahBasedFuelMkIDepleted = new Werkstoff( - new short[] { 0xcb, 0xc3, 0xc1 }, - "Naquadah Based Liquid Fuel MkI (Depleted)", - new Werkstoff.Stats().setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 39, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahBasedFuelMkII = new Werkstoff( - new short[] { 0x52, 0x4e, 0x4d }, - "Naquadah Based Liquid Fuel MkII", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 40, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahBasedFuelMkIIDepleted = new Werkstoff( - new short[] { 0xb5, 0xb0, 0xae }, - "Naquadah Based Liquid Fuel MkII (Depleted)", - new Werkstoff.Stats().setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 41, - TextureSet.SET_FLUID); - /* These materials will be enable when they are removed in GregTech */ - /* - * public static final Werkstoff praseodymium = new Werkstoff( new short[]{0xff,0xff,0xff}, "praseodymium", "Pr", - * new Werkstoff.Stats(), Werkstoff.Types.ELEMENT, new - * Werkstoff.GenerationFeatures().disable().onlyDust().addMolten().addMetalItems(), OffsetID + 42, - * TextureSet.SET_METALLIC ); public static final Werkstoff rubidium = new Werkstoff( new short[]{0xff,0x2a,0x00}, - * "rubidium", "Rb", new Werkstoff.Stats(), Werkstoff.Types.ELEMENT, new - * Werkstoff.GenerationFeatures().disable().onlyDust().addMolten().addMetalItems(), OffsetID + 43, - * TextureSet.SET_SHINY ); public static final Werkstoff thulium = new Werkstoff( new short[]{0xff,0xff,0xff}, - * "Thulium", "Tm", new Werkstoff.Stats(), Werkstoff.Types.ELEMENT, new - * Werkstoff.GenerationFeatures().disable().onlyDust().addMolten().addMetalItems(), OffsetID + 44, - * TextureSet.SET_METALLIC ); - */ - public static final Werkstoff naquadahBasedFuelMkIII = new Werkstoff( - new short[] { 0x29, 0x22, 0x21 }, - "Naquadah Based Liquid Fuel MkIII", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 45, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahBasedFuelMkIIIDepleted = new Werkstoff( - new short[] { 0x66, 0x40, 0x38 }, - "Naquadah Based Liquid Fuel MkIII (Depleted)", - new Werkstoff.Stats().setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 46, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahBasedFuelMkIV = new Werkstoff( - new short[] { 0x0e, 0x0c, 0x0c }, - "Naquadah Based Liquid Fuel MkIV", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 47, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahBasedFuelMkIVDepleted = new Werkstoff( - new short[] { 0x8e, 0x34, 0x22 }, - "Naquadah Based Liquid Fuel MkIV (Depleted)", - new Werkstoff.Stats().setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 48, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahBasedFuelMkV = new Werkstoff( - new short[] { 0x00, 0x00, 0x00 }, - "Naquadah Based Liquid Fuel MkV", - "THE END", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 49, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahBasedFuelMkVDepleted = new Werkstoff( - new short[] { 0xff, 0xff, 0xff }, - "Naquadah Based Liquid Fuel MkV (Depleted)", - "THE END (literally)", - new Werkstoff.Stats().setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 50, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahBasedFuelMkVI = new Werkstoff( - new short[] { 0x30, 0x00, 0x00 }, - "Naquadah Based Liquid Fuel MkVI", - "THE FUTURE", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 115, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahBasedFuelMkVIDepleted = new Werkstoff( - new short[] { 0x99, 0x33, 0x33 }, - "Naquadah Based Liquid Fuel MkVI (Depleted)", - "THE FUTURE (achieved)", - new Werkstoff.Stats().setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 116, - TextureSet.SET_FLUID); - - public static final Werkstoff zincChloride = new Werkstoff( - new short[] { 0x73, 0xa5, 0xfc }, - "Zinc Chloride", - subscriptNumbers("ZnCl2"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 51, - TextureSet.SET_SHINY, - new Pair<>(Zinc, 1), - new Pair<>(Chlorine, 2)); - - public static final Werkstoff zincThoriumAlloy = new Werkstoff( - new short[] { 0x12, 0x34, 0x56 }, - "Zn-Th Alloy", - subscriptNumbers("ZnTh"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust() - .addMolten() - .addMetalItems(), - OffsetID + 52, - TextureSet.SET_SHINY, - new Pair<>(Zinc, 1), - new Pair<>(Thorium, 1)); - - // Naquadah Rework Materials - public static final Werkstoff naquadahEarth = new Werkstoff( - new short[] { 0x4c, 0x4c, 0x4c }, - "Naquadah Oxide Mixture", - subscriptNumbers("??NqTiGaAd??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures(), - OffsetID + 53, - TextureSet.SET_METALLIC); - - public static final Werkstoff titaniumTrifluoride = new Werkstoff( - new short[] { 0xc0, 0x92, 0xa8 }, - "Titanium Trifluoride", - subscriptNumbers("TiF3"), - new Werkstoff.Stats().setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 54, - TextureSet.SET_METALLIC, - new Pair<>(Titanium, 1), - new Pair<>(Fluorine, 3)); - - public static final Werkstoff lowQualityNaquadahEmulsion = new Werkstoff( - new short[] { 0x4c, 0x4c, 0x4c }, - "Low Quality Naquadah Emulsion", - subscriptNumbers("??NqGaAd??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 55, - TextureSet.SET_FLUID); - - public static final Werkstoff galliumHydroxide = new Werkstoff( - new short[] { 0xa6, 0xa6, 0xa6 }, - "Gallium Hydroxide", - subscriptNumbers("Ga(OH)3"), - new Werkstoff.Stats().setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 56, - TextureSet.SET_DULL, - new Pair<>(Gallium, 1), - new Pair<>(Oxygen, 3), - new Pair<>(Hydrogen, 3)); - - public static final Werkstoff lowQualityNaquadahSolution = new Werkstoff( - new short[] { 0x71, 0x62, 0x62 }, - "Low Quality Naquadah Solution", - subscriptNumbers("~??NqAd??~"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 57, - TextureSet.SET_FLUID); - - public static final Werkstoff towEthyl1Hexanol = new Werkstoff( - new short[] { 0x80, 0xb5, 0x57 }, - "2-Ethyl-1-Hexanol", - subscriptNumbers("C8H18O"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 58, - TextureSet.SET_FLUID, - new Pair<>(Carbon, 8), - new Pair<>(Oxygen, 1), - new Pair<>(Hydrogen, 18)); - - public static final Werkstoff P507 = new Werkstoff( - new short[] { 0x29, 0xc2, 0x2a }, - "P-507", - subscriptNumbers("(C8H17)2PO3H"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 59, - TextureSet.SET_FLUID, - new Pair<>(Carbon, 16), - new Pair<>(Phosphorus, 1), - new Pair<>(Oxygen, 3), - new Pair<>(Hydrogen, 35)); - - public static final Werkstoff naquadahAdamantiumSolution = new Werkstoff( - new short[] { 0x3d, 0x38, 0x38 }, - "Naquadah-Adamantium Solution", - subscriptNumbers("~NqAd~"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 60, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahRichSolution = new Werkstoff( - new short[] { 0x33, 0x33, 0x33 }, - "Naquadah-Rich Solution", - subscriptNumbers("~?Nq?~"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 61, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadahine = new Werkstoff( - new short[] { 0x33, 0x33, 0x33 }, - "Naquadahine", - subscriptNumbers("NqO2"), - new Werkstoff.Stats().setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 62, - TextureSet.SET_METALLIC, - new Pair<>(Naquadah, 1), - new Pair<>(Oxygen, 2)); - - public static final Werkstoff fluorineRichWasteLiquid = new Werkstoff( - new short[] { 0x13, 0x68, 0x62 }, - "Fluorine-Rich Waste Liquid", - new Werkstoff.Stats().setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 63, - TextureSet.SET_FLUID); - - public static final Werkstoff wasteLiquid = new Werkstoff( - new short[] { 0x14, 0x1c, 0x68 }, - "Waste Liquid", - new Werkstoff.Stats().setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 64, - TextureSet.SET_FLUID); - - public static final Werkstoff adamantine = new Werkstoff( - new short[] { 0xb7, 0xb7, 0xb7 }, - "Adamantine", - subscriptNumbers("Ad2O3"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 65, - TextureSet.SET_DULL, - new Pair<>(Adamantium, 2), - new Pair<>(Oxygen, 3)); - - public static final Werkstoff enrichedNaquadahEarth = new Werkstoff( - new short[] { 0x82, 0x68, 0x68 }, - "Enriched-Naquadah Oxide Mixture", - subscriptNumbers("??KeNq") + CharExchanger.shifter(8314) + "??", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures(), - OffsetID + 66, - TextureSet.SET_METALLIC); - - public static final Werkstoff triniumSulphate = new Werkstoff( - new short[] { 0xda, 0xda, 0xda }, - "Trinium Sulphate", - subscriptNumbers("KeSO4"), - new Werkstoff.Stats().setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 67, - TextureSet.SET_METALLIC, - new Pair<>(Trinium, 1), - new Pair<>(Sulfur, 1), - new Pair<>(Oxygen, 4)); - - public static final Werkstoff enrichedNaquadahRichSolution = new Werkstoff( - new short[] { 0x52, 0x39, 0x39 }, - "Enriched-Naquadah-Rich Solution", - subscriptNumbers("~?Nq") + CharExchanger.shifter(8314) + "?~", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 68, - TextureSet.SET_FLUID); - - public static final Werkstoff concentratedEnrichedNaquadahSludge = new Werkstoff( - new short[] { 0x52, 0x39, 0x39 }, - "Concentrated Enriched-Naquadah Sludge", - subscriptNumbers("?Nq") + CharExchanger.shifter(8314) + "?", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 69, - TextureSet.SET_METALLIC); - - public static final Werkstoff enrichedNaquadahSulphate = new Werkstoff( - new short[] { 0x52, 0x39, 0x39 }, - "Enriched-Naquadah Sulphate", - "Nq" + CharExchanger.shifter(8314) + subscriptNumbers("(SO4)2"), - new Werkstoff.Stats().setRadioactive(true) - .setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 70, - TextureSet.SET_DULL, - new Pair<>(NaquadahEnriched, 1), - new Pair<>(Sulfur, 2), - new Pair<>(Oxygen, 8)); - - public static final Werkstoff naquadriaEarth = new Werkstoff( - new short[] { 0x4d, 0x4d, 0x55 }, - "Naquadria Oxide Mixture", - subscriptNumbers("??Nq*BaIn??"), - new Werkstoff.Stats().setRadioactive(true) - .setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures(), - OffsetID + 71, - TextureSet.SET_METALLIC); - - public static final Werkstoff indiumPhosphate = new Werkstoff( - new short[] { 0x2b, 0x2e, 0x70 }, - "Indium Phosphate", - subscriptNumbers("InPO4"), - new Werkstoff.Stats().setToxic(true) - .setElektrolysis(false), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 72, - TextureSet.SET_DULL, - new Pair<>(Indium, 1), - new Pair<>(Phosphorus, 1), - new Pair<>(Oxygen, 4)); - - public static final Werkstoff lowQualityNaquadriaPhosphate = new Werkstoff( - new short[] { 0x4d, 0x4d, 0x55 }, - "Low Quality Naquadria Phosphate", - subscriptNumbers("??Nq*3(PO4)4??"), - new Werkstoff.Stats().setRadioactive(true) - .setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 73, - TextureSet.SET_DULL); - - public static final Werkstoff naquadriaRichSolution = new Werkstoff( - new short[] { 0x1f, 0x1e, 0x33 }, - "Naquadria-Rich Solution", - subscriptNumbers("~?Nq*?~"), - new Werkstoff.Stats().setRadioactive(true) - .setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 74, - TextureSet.SET_FLUID); - - public static final Werkstoff lowQualityNaquadriaSulphate = new Werkstoff( - new short[] { 0x73, 0x72, 0x84 }, - "Low Quality Naquadria Sulphate", - subscriptNumbers("??Nq*(SO4)2??"), - new Werkstoff.Stats().setRadioactive(true) - .setToxic(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 75, - TextureSet.SET_METALLIC); - - public static final Werkstoff lowQualityNaquadriaSolution = new Werkstoff( - new short[] { 0x73, 0x72, 0x84 }, - "Low Quality Naquadria Sulphate", - subscriptNumbers("~??Nq*??~"), - new Werkstoff.Stats().setRadioactive(true) - .setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 76, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadriaSulphate = new Werkstoff( - new short[] { 0x1f, 0x1e, 0x33 }, - "Naquadria Sulphate", - subscriptNumbers("Nq*(SO4)2"), - new Werkstoff.Stats().setRadioactive(true) - .setToxic(true) - .setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 77, - TextureSet.SET_METALLIC, - new Pair<>(Naquadria, 1), - new Pair<>(Sulfur, 2), - new Pair<>(Oxygen, 8)); - - public static final Werkstoff naquadahGoo = new Werkstoff( - new short[] { 0x4c, 0x4c, 0x4c }, - "Naquadah Goo", - subscriptNumbers("??NqTiGaAd??"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 78, - TextureSet.SET_FLUID); - - public static final Werkstoff enrichedNaquadahGoo = new Werkstoff( - new short[] { 0x82, 0x68, 0x68 }, - "Enriched Naquadah Goo", - subscriptNumbers("??KeNq") + CharExchanger.shifter(8314) + "??", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 79, - TextureSet.SET_FLUID); - - public static final Werkstoff naquadriaGoo = new Werkstoff( - new short[] { 0x4d, 0x4d, 0x55 }, - "Naquadria Goo", - subscriptNumbers("??Nq*BaIn??"), - new Werkstoff.Stats().setRadioactive(true) - .setToxic(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 80, - TextureSet.SET_FLUID); - - // material for reactor stuff - public static final Werkstoff zircaloy4 = new Werkstoff( - new short[] { 0x8a, 0x6e, 0x68 }, - "Zircaloy-4", - subscriptNumbers("Zr34Sn5Fe2Cr"), - new Werkstoff.Stats().setCentrifuge(true) - .setBlastFurnace(true) - .setMeltingPoint(2800), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addMixerRecipes((short) 4), - OffsetID + 81, - TextureSet.SET_METALLIC, - new Pair<>(WerkstoffLoader.Zirconium, 34), - new Pair<>(Tin, 5), - new Pair<>(Iron, 2), - new Pair<>(Chrome, 1)); - - public static final Werkstoff zircaloy2 = new Werkstoff( - new short[] { 0xa4, 0x8f, 0x8b }, - "Zircaloy-2", - subscriptNumbers("Zr34Sn4FeCrNi"), - new Werkstoff.Stats().setCentrifuge(true) - .setBlastFurnace(true) - .setMeltingPoint(2800), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addMixerRecipes((short) 2), - OffsetID + 82, - TextureSet.SET_METALLIC, - new Pair<>(WerkstoffLoader.Zirconium, 34), - new Pair<>(Tin, 4), - new Pair<>(Iron, 1), - new Pair<>(Chrome, 1), - new Pair<>(Nickel, 1)); - - public static final Werkstoff incoloy903 = new Werkstoff( - new short[] { 0xa4, 0x8f, 0x8b }, - "Incoloy-903", - subscriptNumbers("Fe12Ni10Co8Ti4Mo2Al"), - new Werkstoff.Stats().setCentrifuge(true) - .setBlastFurnace(true) - .setMeltingPoint(3700), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addSimpleMetalWorkingItems() - .addMixerRecipes((short) 6), - OffsetID + 83, - TextureSet.SET_METALLIC, - new Pair<>(Iron, 12), - new Pair<>(Nickel, 10), - new Pair<>(Cobalt, 8), - new Pair<>(Titanium, 4), - new Pair<>(Molybdenum, 2), - new Pair<>(Aluminium, 1)); - - public static final Werkstoff adamantiumAlloy = new Werkstoff( - new short[] { 0xa0, 0xa0, 0xa0 }, - "Adamantium Alloy", - subscriptNumbers("Ad5Nq2La3"), - new Werkstoff.Stats().setCentrifuge(true) - .setBlastFurnace(true) - .setMeltingPoint(5500) - .setSpeedOverride(191.2F) - .setDurOverride(102400), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addSimpleMetalWorkingItems() - .addMultipleIngotMetalWorkingItems() - .addMixerRecipes((short) 3), - OffsetID + 84, - TextureSet.SET_SHINY, - new Pair<>(Adamantium, 5), - new Pair<>(Naquadah, 2), - new Pair<>(Lanthanum, 3)); - - public static final Werkstoff ethanolGasoline = new Werkstoff( - new short[] { 0xe4, 0xc6, 0x61 }, - "Ethanol Gasoline", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 85, - TextureSet.SET_FLUID); - - public static final Werkstoff cyclopentadiene = new Werkstoff( - new short[] { 0xff, 0xf6, 0xbd }, - "Cyclopentadiene", - subscriptNumbers("C5H6"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 86, - TextureSet.SET_FLUID); - - public static final Werkstoff ferrousChloride = new Werkstoff( - new short[] { 0x5b, 0x5b, 0x5b }, - "Iron II Chloride", - subscriptNumbers("FeCl2"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 87, - TextureSet.SET_FLUID); - - public static final Werkstoff diethylamine = new Werkstoff( - new short[] { 0x69, 0x77, 0xca }, - "Diethylamine", - subscriptNumbers("C4H11N"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 88, - TextureSet.SET_FLUID); - - public static final Werkstoff impureFerroceneMixture = new Werkstoff( - new short[] { 0x79, 0x55, 0x08 }, - "Impure Ferrocene Mixture", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 89, - TextureSet.SET_FLUID); - - public static final Werkstoff ferroceneSolution = new Werkstoff( - new short[] { 0xde, 0x7e, 0x1c }, - "Ferrocene Solution", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 90, - TextureSet.SET_FLUID); - - public static final Werkstoff ferroceneWaste = new Werkstoff( - new short[] { 0x35, 0x1d, 0x03 }, - "Ferrocene Waste", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 91, - TextureSet.SET_FLUID); - - public static final Werkstoff ferrocene = new Werkstoff( - new short[] { 0xf1, 0x8f, 0x2b }, - "Ferrocene", - subscriptNumbers("Fe(C5H5)2"), - new Werkstoff.Stats(), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 92, - TextureSet.SET_SHINY); - - public static final Werkstoff ironedKerosene = new Werkstoff( - new short[] { 0x97, 0x00, 0x61 }, - "Jet Fuel No.3", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 93, - TextureSet.SET_FLUID); - - public static final Werkstoff ironedFuel = new Werkstoff( - new short[] { 0xff, 0x98, 0x00 }, - "Jet Fuel A", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 94, - TextureSet.SET_FLUID); - - public static final Werkstoff marM200 = new Werkstoff( - new short[] { 0x51, 0x51, 0x51 }, - "MAR-M200 Steel", - new Werkstoff.Stats().setCentrifuge(true) - .setBlastFurnace(true) - .setMeltingPoint(5000), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addSimpleMetalWorkingItems() - .addMultipleIngotMetalWorkingItems() - .addMixerRecipes((short) 7), - OffsetID + 95, - TextureSet.SET_SHINY, - new Pair<>(Niobium, 2), - new Pair<>(Chrome, 9), - new Pair<>(Aluminium, 5), - new Pair<>(Titanium, 2), - new Pair<>(Cobalt, 10), - new Pair<>(Tungsten, 13), - new Pair<>(Nickel, 18)); - - public static final Werkstoff marCeM200 = new Werkstoff( - new short[] { 0x38, 0x30, 0x30 }, - "MAR-Ce-M200 Steel", - new Werkstoff.Stats().setCentrifuge(true) - .setBlastFurnace(true) - .setMeltingPoint(5000) - .setMass(1200) - .setProtons(1000) - .setSpeedOverride(150F) - .setDurOverride(204800), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addSimpleMetalWorkingItems() - .addMultipleIngotMetalWorkingItems(), - OffsetID + 96, - TextureSet.SET_METALLIC, - new Pair<>(marM200, 18), - new Pair<>(Cerium, 1)); - - public static final Werkstoff lithiumChloride = new Werkstoff( - new short[] { 0xb7, 0xe2, 0xce }, - "Lithium Chloride", - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .enforceUnification(), - OffsetID + 97, - TextureSet.SET_DULL, - new Pair<>(Lithium, 1), - new Pair<>(Chlorine, 1)); - - public static final Werkstoff signalium = new Werkstoff( - new short[] { 0xd4, 0x40, 0x00 }, - "Signalium", - new Werkstoff.Stats().setBlastFurnace(true) - .setMeltingPoint(4000), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems(), - OffsetID + 98, - TextureSet.SET_SHINY, - new Pair<>(AnnealedCopper, 4), - new Pair<>(Ardite, 2), - new Pair<>(RedAlloy, 2)); - - public static final Werkstoff lumiinessence = new Werkstoff( - new short[] { 0xe8, 0xf2, 0x24 }, - "Lumiinessence", - subscriptNumbers("(Al??)2(PO4)4"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust(), - OffsetID + 99, - TextureSet.SET_DULL); - - public static final Werkstoff lumiium = new Werkstoff( - new short[] { 0xe8, 0xf2, 0x24 }, - "Lumiium", - new Werkstoff.Stats().setBlastFurnace(true) - .setMeltingPoint(4000), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems(), - OffsetID + 100, - TextureSet.SET_SHINY, - new Pair<>(TinAlloy, 4), - new Pair<>(SterlingSilver, 2), - new Pair<>(lumiinessence, 2)); - - public static final Werkstoff artheriumSn = new Werkstoff( - new short[] { 0x60, 0x36, 0xf7 }, - "Artherium-Sn", - new Werkstoff.Stats().setBlastFurnace(true) - .setMeltingPoint(6500) - .setCentrifuge(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addMixerRecipes((short) 6), - OffsetID + 101, - TextureSet.SET_SHINY, - new Pair<>(adamantiumAlloy, 12), - new Pair<>(orundum, 9), - new Pair<>(Tin, 8), - new Pair<>(Arsenic, 7), - new Pair<>(Caesium, 4), - new Pair<>(Osmiridium, 3)); - - public static final Werkstoff titaniumBetaC = new Werkstoff( - new short[] { 0xc7, 0x2f, 0xcc }, - "Tanmolyium Beta-C", - new Werkstoff.Stats().setBlastFurnace(true) - .setMeltingPoint(5300) - .setCentrifuge(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addMixerRecipes((short) 5), - OffsetID + 102, - TextureSet.SET_METALLIC, - new Pair<>(Titanium, 5), - new Pair<>(Molybdenum, 5), - new Pair<>(Vanadium, 2), - new Pair<>(Chrome, 3), - new Pair<>(Aluminium, 1)); - - public static final Werkstoff dalisenite = new Werkstoff( - new short[] { 0xb0, 0xb8, 0x12 }, - "Dalisenite", - new Werkstoff.Stats().setMeltingPoint(8700) - .setCentrifuge(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addMixerRecipes((short) 6), - OffsetID + 103, - TextureSet.SET_SHINY, - new Pair<>(titaniumBetaC, 14), - new Pair<>(Tungsten, 10), - new Pair<>(NiobiumTitanium, 9), - new Pair<>(WerkstoffLoader.LuVTierMaterial, 8), - new Pair<>(Quantium, 7), - new Pair<>(Erbium, 3)); - - public static final Werkstoff hikarium = new Werkstoff( - new short[] { 0xff, 0xd6, 0xfb }, - "Hikarium", - new Werkstoff.Stats().setBlastFurnace(true) - .setMeltingPoint(5400) - .setCentrifuge(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addMixerRecipes((short) 3), - OffsetID + 104, - TextureSet.SET_SHINY, - new Pair<>(lumiium, 18), - new Pair<>(Silver, 8), - new Pair<>(Sunnarium, 4)); - - public static final Werkstoff tairitsu = new Werkstoff( - new short[] { 0x36, 0x36, 0x36 }, - "Tairitsu", - new Werkstoff.Stats().setBlastFurnace(true) - .setMeltingPoint(7400) - .setCentrifuge(true), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addMixerRecipes((short) 6), - OffsetID + 105, - TextureSet.SET_SHINY, - new Pair<>(Tungsten, 8), - new Pair<>(Naquadria, 7), - new Pair<>(Bedrockium, 4), - new Pair<>(Carbon, 4), - new Pair<>(Vanadium, 3), - new Pair<>(BlackPlutonium, 1)); - - public static final Werkstoff antimonyPentafluorideSolution = new Werkstoff( - new short[] { 0x16, 0xd5, 0xe2 }, - "Antimony Pentafluoride Solution", - subscriptNumbers("SbF5"), - new Werkstoff.Stats(), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().disable() - .addCells(), - OffsetID + 106, - TextureSet.SET_FLUID); - - public static final Werkstoff magnesiumSulphate = new Werkstoff( - new short[] { 0x87, 0x74, 0x91 }, - "Magnesium Sulphate", - subscriptNumbers("MgSO4"), - new Werkstoff.Stats().setElektrolysis(true), - Werkstoff.Types.COMPOUND, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 107, - TextureSet.SET_DULL, - new Pair<>(Magnesium, 1), - new Pair<>(Sulfur, 1), - new Pair<>(Oxygen, 4)); - - public static final Werkstoff preciousMetalAlloy = new Werkstoff( - new short[] { 0x9d, 0x90, 0xc6 }, - "Precious Metals Alloy", - new Werkstoff.Stats().setBlastFurnace(true) - .setMeltingPoint(10000) - .setCentrifuge(true) - .setSpeedOverride(100F), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addMultipleIngotMetalWorkingItems() - .addMixerRecipes((short) 6), - OffsetID + 108, - TextureSet.SET_SHINY, - new Pair<>(WerkstoffLoader.Ruthenium, 1), - new Pair<>(WerkstoffLoader.Rhodium, 1), - new Pair<>(Palladium, 1), - new Pair<>(Platinum, 1), - new Pair<>(Osmium, 1), - new Pair<>(Iridium, 1)); - - public static final Werkstoff enrichedNaquadahAlloy = new Werkstoff( - new short[] { 0x16, 0x07, 0x40 }, - "Enriched Naquadah Alloy", - new Werkstoff.Stats().setBlastFurnace(true) - .setMeltingPoint(11000) - .setCentrifuge(true) - .setSpeedOverride(180F), - Werkstoff.Types.MIXTURE, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addSimpleMetalWorkingItems() - .addMultipleIngotMetalWorkingItems() - .addMixerRecipes((short) 4), - OffsetID + 109, - TextureSet.SET_METALLIC, - new Pair<>(NaquadahEnriched, 8), - new Pair<>(Tritanium, 5), - new Pair<>(WerkstoffLoader.Californium, 3), - new Pair<>(BlackPlutonium, 2)); - - public static final Werkstoff metastableOganesson = new Werkstoff( - new short[] { 0x14, 0x39, 0x7f }, - "Metastable Oganesson", - "Og*", - new Werkstoff.Stats().setBlastFurnace(true) - .setProtons(118) - .setMass(294) - .setMeltingPoint(11000), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addMultipleIngotMetalWorkingItems() - .addMetaSolidifierRecipes(), - OffsetID + 110, - TextureSet.SET_SHINY); - - public static final Werkstoff shirabon = new Werkstoff( - new short[] { 0xe0, 0x15, 0x6d }, - "Shirabon", - "Sh" + CharExchanger.shifter(9191), - new Werkstoff.Stats().setProtons(500) - .setMass(750) - .setMeltingPoint(13000) - .setSpeedOverride(640.0F) - .setDurOverride(15728640) - .setQualityOverride((byte) 26), - Werkstoff.Types.ELEMENT, - new Werkstoff.GenerationFeatures().onlyDust() - .addMolten() - .addMetalItems() - .addCraftingMetalWorkingItems() - .addSimpleMetalWorkingItems() - .addMultipleIngotMetalWorkingItems() - .addMetalCraftingSolidifierRecipes() - .addMetaSolidifierRecipes(), - OffsetID + 111, - TextureSet.SET_SHINY); - - public static final Werkstoff inertNaquadah = new Werkstoff( - new short[] { 0x3b, 0x3b, 0x3b }, - "Inert Naquadah", - new Werkstoff.Stats(), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 112, - TextureSet.SET_METALLIC, - new Pair<>(Naquadah, 1)); - - public static final Werkstoff inertEnrichedNaquadah = new Werkstoff( - new short[] { 0x61, 0x44, 0x44 }, - "Inert Enriched Naquadah", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 113, - TextureSet.SET_METALLIC, - new Pair<>(NaquadahEnriched, 1)); - - public static final Werkstoff inertNaquadria = new Werkstoff( - new short[] { 0x00, 0x00, 0x00 }, - "Inert Naquadria", - new Werkstoff.Stats().setRadioactive(true), - Werkstoff.Types.MATERIAL, - new Werkstoff.GenerationFeatures().disable() - .onlyDust(), - OffsetID + 114, - TextureSet.SET_METALLIC, - new Pair<>(Naquadria, 1)); - - @Override - public void run() {} -} diff --git a/src/main/java/goodgenerator/items/RadioactiveItem.java b/src/main/java/goodgenerator/items/RadioactiveItem.java index ab6c003268..3ce175bd78 100644 --- a/src/main/java/goodgenerator/items/RadioactiveItem.java +++ b/src/main/java/goodgenerator/items/RadioactiveItem.java @@ -8,10 +8,10 @@ import net.minecraft.item.ItemStack; import net.minecraft.potion.PotionEffect; import net.minecraft.world.World; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import ic2.core.IC2Potion; -public class RadioactiveItem extends MyItems { +public class RadioactiveItem extends GGItem { protected final int mRadio; @@ -34,7 +34,7 @@ public class RadioactiveItem extends MyItems { public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) { super.onUpdate(aStack, aWorld, aPlayer, aTimer, aIsInHand); EntityLivingBase tPlayer = (EntityPlayer) aPlayer; - if (!GT_Utility.isWearingFullRadioHazmat(tPlayer)) + if (!GTUtility.isWearingFullRadioHazmat(tPlayer)) tPlayer.addPotionEffect(new PotionEffect(IC2Potion.radiation.id, mRadio, 4)); } } diff --git a/src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java b/src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java index ecbb67fbf8..36ce938a04 100644 --- a/src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java +++ b/src/main/java/goodgenerator/loader/ComponentAssemblyLineMiscRecipes.java @@ -15,12 +15,12 @@ import static goodgenerator.util.ItemRefer.Compassline_Casing_UXV; import static goodgenerator.util.ItemRefer.Compassline_Casing_ZPM; import static goodgenerator.util.ItemRefer.Component_Assembly_Line; import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.AssemblyLine; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME; import java.util.HashMap; @@ -31,21 +31,20 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.technus.tectech.recipe.TT_recipeAdder; - +import bartworks.system.material.WerkstoffLoader; import cpw.mods.fml.common.registry.GameRegistry; -import goodgenerator.items.MyMaterial; +import goodgenerator.items.GGMaterial; import goodgenerator.util.StackUtils; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; import gtPlusPlus.core.recipe.common.CI; +import tectech.recipe.TTRecipeAdder; public class ComponentAssemblyLineMiscRecipes { @@ -63,7 +62,7 @@ public class ComponentAssemblyLineMiscRecipes { generateWrapRecipes(); // The controller itself - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, Compassline_Casing_EV.get(1)) .metadata(RESEARCH_TIME, 1 * HOURS) .itemInputs( @@ -76,8 +75,8 @@ public class ComponentAssemblyLineMiscRecipes { .get(32), ComponentType.Electric_Motor.getComponent(7) .get(32), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Polybenzimidazole, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Iridium, 32), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Polybenzimidazole, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Iridium, 32), ItemList.FluidSolidifierZPM.get(16L), getALCircuit(8, 16), getALCircuit(7, 20), @@ -96,118 +95,118 @@ public class ComponentAssemblyLineMiscRecipes { private static void generateCasingRecipes() { int t = 1; // lv 1 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Steel, 4), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Steel, 4), ComponentType.Robot_Arm.getComponent(t) .get(4), ComponentType.Electric_Piston.getComponent(t) .get(8), ComponentType.Electric_Motor.getComponent(t) .get(10), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Steel, 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tin, 6), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Steel, 4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tin, 6), getCircuit(t, 16)) .fluidInputs(Materials.SolderingAlloy.getMolten(144 * (t + 1))) .itemOutputs(Compassline_Casing_LV.get(1)) .duration(16 * SECONDS) - .eut(GT_Values.VP[t]) + .eut(GTValues.VP[t]) .addTo(assemblerRecipes); // mv 2 t++; - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Aluminium, 4), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Aluminium, 4), ComponentType.Robot_Arm.getComponent(t) .get(4), ComponentType.Electric_Piston.getComponent(t) .get(8), ComponentType.Electric_Motor.getComponent(t) .get(10), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Aluminium, 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.AnyCopper, 6), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Aluminium, 4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.AnyCopper, 6), getCircuit(t, 8), getCircuit(t - 1, 16)) .fluidInputs(Materials.SolderingAlloy.getMolten(144 * (t + 1))) .itemOutputs(Compassline_Casing_MV.get(1)) .duration(16 * SECONDS) - .eut(GT_Values.VP[t]) + .eut(GTValues.VP[t]) .addTo(assemblerRecipes); // hv 3 t++; - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.StainlessSteel, 4), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.StainlessSteel, 4), ComponentType.Robot_Arm.getComponent(t) .get(4), ComponentType.Electric_Piston.getComponent(t) .get(8), ComponentType.Electric_Motor.getComponent(t) .get(10), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.StainlessSteel, 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Gold, 6), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.StainlessSteel, 4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Gold, 6), getCircuit(t, 8), getCircuit(t - 1, 16)) .fluidInputs(Materials.SolderingAlloy.getMolten(144 * (t + 1))) .itemOutputs(Compassline_Casing_HV.get(1)) .duration(16 * SECONDS) - .eut(GT_Values.VP[t]) + .eut(GTValues.VP[t]) .addTo(assemblerRecipes); // ev 4 t++; - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 4), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 4), ComponentType.Robot_Arm.getComponent(t) .get(4), ComponentType.Electric_Piston.getComponent(t) .get(8), ComponentType.Electric_Motor.getComponent(t) .get(10), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Titanium, 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Aluminium, 6), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Titanium, 4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Aluminium, 6), getCircuit(t, 8), getCircuit(t - 1, 16)) .fluidInputs(Materials.SolderingAlloy.getMolten(144 * (t + 1))) .itemOutputs(Compassline_Casing_EV.get(1)) .duration(16 * SECONDS) - .eut(GT_Values.VP[t]) + .eut(GTValues.VP[t]) .addTo(assemblerRecipes); // iv 5 t++; - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.TungstenSteel, 4), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.TungstenSteel, 4), ComponentType.Robot_Arm.getComponent(t) .get(4), ComponentType.Electric_Piston.getComponent(t) .get(8), ComponentType.Electric_Motor.getComponent(t) .get(10), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.TungstenSteel, 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 6), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.TungstenSteel, 4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 6), getCircuit(t, 8), getCircuit(t - 1, 16)) .fluidInputs(Materials.SolderingAlloy.getMolten(144 * (t + 1))) .itemOutputs(Compassline_Casing_IV.get(1)) .duration(16 * SECONDS) - .eut(GT_Values.VP[t]) + .eut(GTValues.VP[t]) .addTo(assemblerRecipes); Fluid sold = FluidRegistry.getFluid("molten.indalloy140"); // Assline Recipes! // luv 6 t++; - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, Compassline_Casing_IV.get(1)) .metadata(RESEARCH_TIME, (2250 << t) * TICKS) .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Europium, 1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Europium, 1), WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.plateDense, 6), ComponentType.Robot_Arm.getComponent(t) .get(8), @@ -217,7 +216,7 @@ public class ComponentAssemblyLineMiscRecipes { .get(16), WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.gearGt, 4), WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.gearGtSmall, 16), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 8), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 8), getALCircuit(t, 8), getALCircuit(t - 1, 16)) .fluidInputs( @@ -231,21 +230,21 @@ public class ComponentAssemblyLineMiscRecipes { .addTo(AssemblyLine); // zpm 7 t++; - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, Compassline_Casing_LuV.get(1)) .metadata(RESEARCH_TIME, (2250 << t) * TICKS) .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Iridium, 6), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Iridium, 6), ComponentType.Robot_Arm.getComponent(t) .get(8), ComponentType.Electric_Piston.getComponent(t) .get(10), ComponentType.Electric_Motor.getComponent(t) .get(16), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Iridium, 4), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Iridium, 16), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Naquadah, 8), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Iridium, 4), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Iridium, 16), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Naquadah, 8), getALCircuit(t, 8), getALCircuit(t - 1, 16)) .fluidInputs( @@ -260,21 +259,21 @@ public class ComponentAssemblyLineMiscRecipes { // uv 8 t++; - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, Compassline_Casing_ZPM.get(1)) .metadata(RESEARCH_TIME, (2250 << t) * TICKS) .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmium, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmium, 6), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmium, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmium, 6), ComponentType.Robot_Arm.getComponent(t) .get(8), ComponentType.Electric_Piston.getComponent(t) .get(10), ComponentType.Electric_Motor.getComponent(t) .get(16), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Osmium, 4), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Osmium, 16), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 8), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Osmium, 4), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Osmium, 16), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 8), getALCircuit(t, 8), getALCircuit(t - 1, 16)) .fluidInputs( @@ -288,23 +287,23 @@ public class ComponentAssemblyLineMiscRecipes { .addTo(AssemblyLine); // uhv 9 t++; - TT_recipeAdder.addResearchableAssemblylineRecipe( + TTRecipeAdder.addResearchableAssemblylineRecipe( Compassline_Casing_UV.get(1), 375 << (t - 2), 1 << (t - 3), (int) TierEU.RECIPE_UV, 1, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.CosmicNeutronium, 6), + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.CosmicNeutronium, 6), ComponentType.Robot_Arm.getComponent(t) .get(8), ComponentType.Electric_Piston.getComponent(t) .get(10), ComponentType.Electric_Motor.getComponent(t) .get(16), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.CosmicNeutronium, 4), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.CosmicNeutronium, 16), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 8), getALCircuit(t, 8), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.CosmicNeutronium, 4), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.CosmicNeutronium, 16), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 8), getALCircuit(t, 8), getALCircuit(t - 1, 16) }, new FluidStack[] { new FluidStack(sold, 144 * t * 4), CI.getTieredFluid(t, 144 * t * 2), StackUtils.getTieredFluid(t, 144 * t), Materials.Lubricant.getFluid(1000 * (t - 2)) }, @@ -314,23 +313,23 @@ public class ComponentAssemblyLineMiscRecipes { sold = FluidRegistry.getFluid("molten.mutatedlivingsolder"); // uev 10 t++; - TT_recipeAdder.addResearchableAssemblylineRecipe( + TTRecipeAdder.addResearchableAssemblylineRecipe( Compassline_Casing_UHV.get(1), 375 << (t - 2), 1 << (t - 3), (int) TierEU.RECIPE_UHV, 1, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 6), + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 6), ComponentType.Robot_Arm.getComponent(t) .get(8), ComponentType.Electric_Piston.getComponent(t) .get(10), ComponentType.Electric_Motor.getComponent(t) .get(16), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Infinity, 4), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Infinity, 16), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 8), getALCircuit(t, 8), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Infinity, 4), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Infinity, 16), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 8), getALCircuit(t, 8), getALCircuit(t - 1, 16) }, new FluidStack[] { new FluidStack(sold, 144 * t * 4), CI.getTieredFluid(t, 144 * t * 2), StackUtils.getTieredFluid(t, 144 * t), Materials.Lubricant.getFluid(1000 * (t - 2)) }, @@ -339,23 +338,23 @@ public class ComponentAssemblyLineMiscRecipes { (int) TierEU.RECIPE_UHV); // uiv 11 t++; - TT_recipeAdder.addResearchableAssemblylineRecipe( + TTRecipeAdder.addResearchableAssemblylineRecipe( Compassline_Casing_UEV.get(1), 375 << (t - 2), 1 << (t - 3), (int) TierEU.RECIPE_UEV, 1, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 6), + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 6), ComponentType.Robot_Arm.getComponent(t) .get(8), ComponentType.Electric_Piston.getComponent(t) .get(10), ComponentType.Electric_Motor.getComponent(t) .get(16), - GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.TranscendentMetal, 4), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.TranscendentMetal, 16), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 8), getALCircuit(t, 8), + GTOreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.TranscendentMetal, 4), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.TranscendentMetal, 16), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 8), getALCircuit(t, 8), getALCircuit(t - 1, 16) }, new FluidStack[] { new FluidStack(sold, 144 * t * 4), CI.getTieredFluid(t, 144 * t * 2), StackUtils.getTieredFluid(t, 144 * t), Materials.Lubricant.getFluid(1000 * (t - 2)) }, @@ -364,23 +363,23 @@ public class ComponentAssemblyLineMiscRecipes { (int) TierEU.RECIPE_UEV); // umv 12 t++; - TT_recipeAdder.addResearchableAssemblylineRecipe( + TTRecipeAdder.addResearchableAssemblylineRecipe( Compassline_Casing_UIV.get(1), 375 << (t - 2), 1 << (t - 3), (int) TierEU.RECIPE_UIV, 1, - new Object[] { GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 6), + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 6), ComponentType.Robot_Arm.getComponent(t) .get(8), ComponentType.Electric_Piston.getComponent(t) .get(10), ComponentType.Electric_Motor.getComponent(t) .get(16), - GT_OreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.SpaceTime, 4), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.SpaceTime, 16), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 8), getALCircuit(t, 8), + GTOreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.SpaceTime, 4), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.SpaceTime, 16), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 8), getALCircuit(t, 8), getALCircuit(t - 1, 16) }, new FluidStack[] { new FluidStack(sold, 144 * t * 4), CI.getTieredFluid(t - 1, 144 * t * 2), StackUtils.getTieredFluid(t, 144 * t), Materials.Lubricant.getFluid(1000 * (t - 2)) }, @@ -389,31 +388,31 @@ public class ComponentAssemblyLineMiscRecipes { (int) TierEU.RECIPE_UIV); // uxv 13 t++; - TT_recipeAdder.addResearchableAssemblylineRecipe( + TTRecipeAdder.addResearchableAssemblylineRecipe( Compassline_Casing_UMV.get(1), 375 << (t - 2), 1 << (t - 3), (int) TierEU.RECIPE_UMV, 1, new Object[] { - GT_OreDictUnificator + GTOreDictUnificator .get(OrePrefixes.frameGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1), - GT_OreDictUnificator + GTOreDictUnificator .get(OrePrefixes.plateDense, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 3), - MyMaterial.shirabon.get(OrePrefixes.plateDense, 3), ComponentType.Robot_Arm.getComponent(t) + GGMaterial.shirabon.get(OrePrefixes.plateDense, 3), ComponentType.Robot_Arm.getComponent(t) .get(8), ComponentType.Electric_Piston.getComponent(t) .get(10), ComponentType.Electric_Motor.getComponent(t) .get(16), - GT_OreDictUnificator + GTOreDictUnificator .get(OrePrefixes.gearGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2), - MyMaterial.shirabon.get(OrePrefixes.gearGt, 2), - GT_OreDictUnificator + GGMaterial.shirabon.get(OrePrefixes.gearGt, 2), + GTOreDictUnificator .get(OrePrefixes.gearGtSmall, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8), - MyMaterial.shirabon.get(OrePrefixes.gearGtSmall, 8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 4), getALCircuit(t, 8), + GGMaterial.shirabon.get(OrePrefixes.gearGtSmall, 8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 4), getALCircuit(t, 8), getALCircuit(t - 1, 16) }, new FluidStack[] { new FluidStack(sold, 144 * t * 4), MaterialsUEVplus.BlackDwarfMatter.getMolten(144 * t * 2), MaterialsUEVplus.Eternity.getMolten(144 * t), @@ -425,27 +424,27 @@ public class ComponentAssemblyLineMiscRecipes { private static void generateWrapRecipes() { for (int i = 0; i <= 11; i++) { - GT_Values.RA.stdBuilder() - .itemInputs(getCircuit(i, 16), GT_Utility.getIntegratedCircuit(16)) + GTValues.RA.stdBuilder() + .itemInputs(getCircuit(i, 16), GTUtility.getIntegratedCircuit(16)) .fluidInputs(Materials.SolderingAlloy.getMolten(72L)) .itemOutputs(new ItemStack(Loaders.circuitWrap, 1, i)) .duration(30 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(assemblerRecipes); } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( GameRegistry.findItemStack("dreamcraft", "item.PikoCircuit", 16), - GT_Utility.getIntegratedCircuit(16)) + GTUtility.getIntegratedCircuit(16)) .fluidInputs(Materials.SolderingAlloy.getMolten(72L)) .itemOutputs(new ItemStack(Loaders.circuitWrap, 1, 12)) .duration(30 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( GameRegistry.findItemStack("dreamcraft", "item.QuantumCircuit", 16), - GT_Utility.getIntegratedCircuit(16)) + GTUtility.getIntegratedCircuit(16)) .fluidInputs(Materials.SolderingAlloy.getMolten(72L)) .itemOutputs(new ItemStack(Loaders.circuitWrap, 1, 13)) .duration(30 * SECONDS) @@ -466,13 +465,13 @@ public class ComponentAssemblyLineMiscRecipes { Sensor; public ItemList getComponent(int tier) { - if (tier < 0 || tier > GT_Values.VN.length) throw new IllegalArgumentException("Tier is out of range!"); - return ItemList.valueOf(this.name() + "_" + GT_Values.VN[tier]); + if (tier < 0 || tier > GTValues.VN.length) throw new IllegalArgumentException("Tier is out of range!"); + return ItemList.valueOf(this.name() + "_" + GTValues.VN[tier]); } } private static ItemStack getCircuit(int tier, long amount) { - return GT_OreDictUnificator.get(OrePrefixes.circuit, getCircuitMaterial(tier), amount); + return GTOreDictUnificator.get(OrePrefixes.circuit, getCircuitMaterial(tier), amount); } private static Object[] getALCircuit(int tier, int amount) { diff --git a/src/main/java/goodgenerator/loader/ComponentAssemblyLineRecipeLoader.java b/src/main/java/goodgenerator/loader/ComponentAssemblyLineRecipeLoader.java index f72a31ed65..9de6926cf3 100644 --- a/src/main/java/goodgenerator/loader/ComponentAssemblyLineRecipeLoader.java +++ b/src/main/java/goodgenerator/loader/ComponentAssemblyLineRecipeLoader.java @@ -3,7 +3,7 @@ package goodgenerator.loader; import static goodgenerator.util.StackUtils.getTotalItems; import static goodgenerator.util.StackUtils.mergeStacks; import static goodgenerator.util.StackUtils.multiplyAndSplitIntoStacks; -import static gregtech.api.util.GT_RecipeConstants.COAL_CASING_TIER; +import static gregtech.api.util.GTRecipeConstants.COAL_CASING_TIER; import java.util.ArrayList; import java.util.Arrays; @@ -22,17 +22,17 @@ import net.minecraftforge.oredict.OreDictionary; import org.apache.commons.lang3.tuple.Pair; import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.OrePrefixes; import gregtech.api.objects.ItemData; import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.GT_IntegratedCircuit_Item; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.common.items.ItemIntegratedCircuit; public class ComponentAssemblyLineRecipeLoader { @@ -42,8 +42,8 @@ public class ComponentAssemblyLineRecipeLoader { private static final String[] softBlacklistedDictPrefixes = { "Any", "crafting", "nanite" }; private static final String moltenMHDCSM = "molten.magnetohydrodynamicallyconstrainedstarmatter"; - private static LinkedHashMap, Pair> allAssemblerRecipes; - private static LinkedHashMap, Pair> allAsslineRecipes; + private static LinkedHashMap, Pair> allAssemblerRecipes; + private static LinkedHashMap, Pair> allAsslineRecipes; private static final HashMap magnetoConversionMultipliers = new HashMap<>(); private static final HashMap conversion = new HashMap<>(); @@ -88,14 +88,14 @@ public class ComponentAssemblyLineRecipeLoader { /** Normal assembler recipes (LV-IV) */ private static void generateAssemblerRecipes() { allAssemblerRecipes.forEach((recipeList, info) -> { - for (GT_Recipe recipe : recipeList) { + for (GTRecipe recipe : recipeList) { if (recipe != null) { ArrayList fixedInputs = new ArrayList<>(); ArrayList fixedFluids = new ArrayList<>(); for (int j = 0; j < recipe.mInputs.length; j++) { ItemStack input = recipe.mInputs[j]; - if (GT_Utility.isStackValid(input) && !(input.getItem() instanceof GT_IntegratedCircuit_Item)) + if (GTUtility.isStackValid(input) && !(input.getItem() instanceof ItemIntegratedCircuit)) fixedInputs.addAll(multiplyAndSplitIntoStacks(input, INPUT_MULTIPLIER)); } for (int j = 0; j < recipe.mFluidInputs.length; j++) { @@ -107,8 +107,8 @@ public class ComponentAssemblyLineRecipeLoader { fixedInputs = compactItems(fixedInputs, info.getRight()); replaceIntoFluids(fixedInputs, fixedFluids, 64); int tier = info.getRight(); - int energy = (int) Math.min(Integer.MAX_VALUE - 7, GT_Values.VP[tier - 1]); - GT_Values.RA.stdBuilder() + int energy = (int) Math.min(Integer.MAX_VALUE - 7, GTValues.VP[tier - 1]); + GTValues.RA.stdBuilder() .itemInputs(fixedInputs.toArray(new ItemStack[0])) .itemOutputs( info.getLeft() @@ -127,7 +127,7 @@ public class ComponentAssemblyLineRecipeLoader { /** Assembly Line Recipes (LuV+) **/ private static void generateAsslineRecipes() { allAsslineRecipes.forEach((recipeList, info) -> { - for (GT_Recipe.GT_Recipe_AssemblyLine recipe : recipeList) { + for (GTRecipe.RecipeAssemblyLine recipe : recipeList) { if (recipe != null) { int componentCircuit = -1; for (int i = 0; i < compPrefixes.length; i++) if (info.getLeft() @@ -153,17 +153,17 @@ public class ComponentAssemblyLineRecipeLoader { // First pass. for (ItemStack input : recipe.mInputs) { - if (GT_Utility.isStackValid(input)) { + if (GTUtility.isStackValid(input)) { int count = input.stackSize; // Mulitplies the input by its multiplier, and adjusts the stacks accordingly - if (!(input.getItem() instanceof GT_IntegratedCircuit_Item)) { + if (!(input.getItem() instanceof ItemIntegratedCircuit)) { - ItemData data = GT_OreDictUnificator.getAssociation(input); + ItemData data = GTOreDictUnificator.getAssociation(input); // trying to fix some circuit oredicting issues if (data != null && data.mPrefix == OrePrefixes.circuit) fixedInputs.addAll( multiplyAndSplitIntoStacks( - GT_OreDictUnificator.get(data.mPrefix, data.mMaterial.mMaterial, count), + GTOreDictUnificator.get(data.mPrefix, data.mMaterial.mMaterial, count), INPUT_MULTIPLIER)); else fixedInputs.addAll(multiplyAndSplitIntoStacks(input, INPUT_MULTIPLIER)); } @@ -174,10 +174,10 @@ public class ComponentAssemblyLineRecipeLoader { // If it overflows then it tries REALLY HARD to cram as much stuff into there. if (fixedInputs.size() > (addProgrammedCircuit ? 8 : 9)) replaceIntoFluids(fixedInputs, fixedFluids, FLUID_CONVERSION_STACKSIZE_THRESHOLD / 2); - if (addProgrammedCircuit) fixedInputs.add(GT_Utility.getIntegratedCircuit(componentCircuit)); + if (addProgrammedCircuit) fixedInputs.add(GTUtility.getIntegratedCircuit(componentCircuit)); addEternityForMHDCSM(fixedFluids); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(fixedInputs.toArray(new ItemStack[0])) .itemOutputs( info.getLeft() @@ -195,7 +195,7 @@ public class ComponentAssemblyLineRecipeLoader { // @allSyntheticRubber so it's quite fragile, but // it's also the least invasive change. if (swapSiliconeForStyreneButadiene(fixedFluids)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(fixedInputs.toArray(new ItemStack[0])) .itemOutputs( info.getLeft() @@ -225,15 +225,15 @@ public class ComponentAssemblyLineRecipeLoader { if (OreDictionary.getOreIDs(input).length > 0 && count > threshold) { FluidStack foundFluidStack = tryConvertItemStackToFluidMaterial(input); - ItemData data = GT_OreDictUnificator.getAssociation(input); + ItemData data = GTOreDictUnificator.getAssociation(input); // Prevents the uncraftable molten magnetic samarium from being converted into fluid during auto // generation if (data != null && data.mMaterial.mMaterial == Materials.SamariumMagnetic) { - input = GT_OreDictUnificator.get(data.mPrefix, Materials.Samarium, 1); + input = GTOreDictUnificator.get(data.mPrefix, Materials.Samarium, 1); foundFluidStack = tryConvertItemStackToFluidMaterial(input); } else if (data != null && data.mMaterial.mMaterial == Materials.TengamAttuned) { - input = GT_OreDictUnificator.get(data.mPrefix, Materials.TengamPurified, 1); + input = GTOreDictUnificator.get(data.mPrefix, Materials.TengamPurified, 1); foundFluidStack = tryConvertItemStackToFluidMaterial(input); } @@ -255,7 +255,7 @@ public class ComponentAssemblyLineRecipeLoader { } } if (!isConverted) { - newInputs.add(GT_Utility.copyAmountUnsafe(count, input)); + newInputs.add(GTUtility.copyAmountUnsafe(count, input)); } } inputs.clear(); @@ -299,10 +299,10 @@ public class ComponentAssemblyLineRecipeLoader { if (strippedOreDict.contains("Any")) continue; if (strippedOreDict.contains("PTMEG")) return FluidRegistry.getFluidStack( "molten.silicone", - (int) (orePrefix.mMaterialAmount / (GT_Values.M / 144)) * input.stackSize); + (int) (orePrefix.mMaterialAmount / (GTValues.M / 144)) * input.stackSize); return FluidRegistry.getFluidStack( "molten." + strippedOreDict.toLowerCase(), - (int) (orePrefix.mMaterialAmount / (GT_Values.M / 144)) * input.stackSize); + (int) (orePrefix.mMaterialAmount / (GTValues.M / 144)) * input.stackSize); } return null; } @@ -341,7 +341,7 @@ public class ComponentAssemblyLineRecipeLoader { HashMap totals = getTotalItems(items); for (ItemStack itemstack : totals.keySet()) { int totalItems = totals.get(itemstack); - ItemData data = GT_OreDictUnificator.getAssociation(itemstack); + ItemData data = GTOreDictUnificator.getAssociation(itemstack); boolean isCompacted = false; for (String dict : Arrays.stream(OreDictionary.getOreIDs(itemstack)) @@ -361,20 +361,20 @@ public class ComponentAssemblyLineRecipeLoader { if (data != null && !isCompacted) { OrePrefixes goInto = conversion.get(data.mPrefix); - if (goInto != null && GT_OreDictUnificator.get(goInto, data.mMaterial.mMaterial, 1) != null) { + if (goInto != null && GTOreDictUnificator.get(goInto, data.mMaterial.mMaterial, 1) != null) { compactorHelper(data, goInto, stacks, totalItems); isCompacted = true; } } - if (GT_Utility.areStacksEqual(itemstack, ItemList.Gravistar.get(1)) && tier >= 9) { + if (GTUtility.areStacksEqual(itemstack, ItemList.Gravistar.get(1)) && tier >= 9) { stacks.addAll(multiplyAndSplitIntoStacks(ItemList.NuclearStar.get(1), totalItems / 16)); isCompacted = true; } - if (GT_Utility - .areStacksEqual(itemstack, GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Neutronium, 1))) { + if (GTUtility + .areStacksEqual(itemstack, GTOreDictUnificator.get(OrePrefixes.nanite, Materials.Neutronium, 1))) { stacks.addAll( multiplyAndSplitIntoStacks( - GT_OreDictUnificator.get(OrePrefixes.nanite, Materials.Gold, 1), + GTOreDictUnificator.get(OrePrefixes.nanite, Materials.Gold, 1), totalItems / 16)); isCompacted = true; } @@ -390,7 +390,7 @@ public class ComponentAssemblyLineRecipeLoader { int materialRatio = (int) ((double) compactInto.mMaterialAmount / data.mPrefix.mMaterialAmount); output.addAll( multiplyAndSplitIntoStacks( - GT_OreDictUnificator.get(compactInto, data.mMaterial.mMaterial, 1), + GTOreDictUnificator.get(compactInto, data.mMaterial.mMaterial, 1), total / materialRatio)); } @@ -402,21 +402,21 @@ public class ComponentAssemblyLineRecipeLoader { allAsslineRecipes = new LinkedHashMap<>(); for (String compPrefix : compPrefixes) { for (int t = 1; t <= 13; t++) { - String vName = GT_Values.VN[t]; + String vName = GTValues.VN[t]; ItemList currentComponent = ItemList.valueOf(compPrefix + vName); if (currentComponent.hasBeenSet()) { if (t < 6) { - ArrayList foundRecipes = new ArrayList<>(); - for (GT_Recipe recipe : RecipeMaps.assemblerRecipes.getAllRecipes()) { - if (GT_Utility.areStacksEqual(currentComponent.get(1), recipe.mOutputs[0])) { + ArrayList foundRecipes = new ArrayList<>(); + for (GTRecipe recipe : RecipeMaps.assemblerRecipes.getAllRecipes()) { + if (GTUtility.areStacksEqual(currentComponent.get(1), recipe.mOutputs[0])) { foundRecipes.add(recipe); } } allAssemblerRecipes.put(foundRecipes, Pair.of(currentComponent, t)); } else { - ArrayList foundRecipes = new ArrayList<>(); - for (GT_Recipe.GT_Recipe_AssemblyLine recipe : GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes) { - if (GT_Utility.areStacksEqual(currentComponent.get(1), recipe.mOutput)) { + ArrayList foundRecipes = new ArrayList<>(); + for (GTRecipe.RecipeAssemblyLine recipe : GTRecipe.RecipeAssemblyLine.sAssemblylineRecipes) { + if (GTUtility.areStacksEqual(currentComponent.get(1), recipe.mOutput)) { foundRecipes.add(recipe); } } @@ -440,7 +440,7 @@ public class ComponentAssemblyLineRecipeLoader { private static List getMagnetoConversion(ItemStack item, int total) { ArrayList stacks = new ArrayList<>(); - ItemData data = GT_OreDictUnificator.getAssociation(item); + ItemData data = GTOreDictUnificator.getAssociation(item); if (data == null) { return stacks; } @@ -448,7 +448,7 @@ public class ComponentAssemblyLineRecipeLoader { double multiplier = magnetoConversionMultipliers.get(data.mPrefix); stacks.addAll( getWrappedCircuits( - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UHV, 1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UHV, 1), (int) (total * multiplier), "circuitInfinite")); } diff --git a/src/main/java/goodgenerator/loader/FuelRecipeLoader.java b/src/main/java/goodgenerator/loader/FuelRecipeLoader.java index fd1950c6ef..120c509d08 100644 --- a/src/main/java/goodgenerator/loader/FuelRecipeLoader.java +++ b/src/main/java/goodgenerator/loader/FuelRecipeLoader.java @@ -2,50 +2,49 @@ package goodgenerator.loader; import static goodgenerator.api.recipe.GoodGeneratorRecipeMaps.naquadahFuelRefineFactoryRecipes; import static goodgenerator.api.recipe.GoodGeneratorRecipeMaps.naquadahReactorFuels; -import static goodgenerator.main.GG_Config_Loader.NaquadahFuelTime; -import static goodgenerator.main.GG_Config_Loader.NaquadahFuelVoltage; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.LNG_BASIC_OUTPUT; -import static gregtech.api.util.GT_RecipeConstants.NFR_COIL_TIER; -import static gtPlusPlus.core.material.ELEMENT.STANDALONE.CHRONOMATIC_GLASS; +import static goodgenerator.main.GGConfigLoader.NaquadahFuelTime; +import static goodgenerator.main.GGConfigLoader.NaquadahFuelVoltage; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.LNG_BASIC_OUTPUT; +import static gregtech.api.util.GTRecipeConstants.NFR_COIL_TIER; +import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.CHRONOMATIC_GLASS; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import goodgenerator.items.MyMaterial; +import bartworks.system.material.WerkstoffLoader; +import goodgenerator.items.GGMaterial; import goodgenerator.util.ItemRefer; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gtPlusPlus.core.material.ELEMENT; +import gregtech.api.util.GTOreDictUnificator; +import gtPlusPlus.core.material.MaterialsElements; public class FuelRecipeLoader { public static void RegisterFuel() { - FluidStack[] inputs = new FluidStack[] { MyMaterial.uraniumBasedLiquidFuelExcited.getFluidOrGas(1), - MyMaterial.thoriumBasedLiquidFuelExcited.getFluidOrGas(1), - MyMaterial.plutoniumBasedLiquidFuelExcited.getFluidOrGas(1), - MyMaterial.naquadahBasedFuelMkI.getFluidOrGas(1), MyMaterial.naquadahBasedFuelMkII.getFluidOrGas(1), - MyMaterial.naquadahBasedFuelMkIII.getFluidOrGas(1), MyMaterial.naquadahBasedFuelMkIV.getFluidOrGas(1), - MyMaterial.naquadahBasedFuelMkV.getFluidOrGas(1), MyMaterial.naquadahBasedFuelMkVI.getFluidOrGas(1) }; - - FluidStack[] outputs = new FluidStack[] { MyMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(1), - MyMaterial.thoriumBasedLiquidFuelDepleted.getFluidOrGas(1), - MyMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(1), - MyMaterial.naquadahBasedFuelMkIDepleted.getFluidOrGas(1), - MyMaterial.naquadahBasedFuelMkIIDepleted.getFluidOrGas(1), - MyMaterial.naquadahBasedFuelMkIIIDepleted.getFluidOrGas(1), - MyMaterial.naquadahBasedFuelMkIVDepleted.getFluidOrGas(1), - MyMaterial.naquadahBasedFuelMkVDepleted.getFluidOrGas(1), - MyMaterial.naquadahBasedFuelMkVIDepleted.getFluidOrGas(1) }; + FluidStack[] inputs = new FluidStack[] { GGMaterial.uraniumBasedLiquidFuelExcited.getFluidOrGas(1), + GGMaterial.thoriumBasedLiquidFuelExcited.getFluidOrGas(1), + GGMaterial.plutoniumBasedLiquidFuelExcited.getFluidOrGas(1), + GGMaterial.naquadahBasedFuelMkI.getFluidOrGas(1), GGMaterial.naquadahBasedFuelMkII.getFluidOrGas(1), + GGMaterial.naquadahBasedFuelMkIII.getFluidOrGas(1), GGMaterial.naquadahBasedFuelMkIV.getFluidOrGas(1), + GGMaterial.naquadahBasedFuelMkV.getFluidOrGas(1), GGMaterial.naquadahBasedFuelMkVI.getFluidOrGas(1) }; + + FluidStack[] outputs = new FluidStack[] { GGMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(1), + GGMaterial.thoriumBasedLiquidFuelDepleted.getFluidOrGas(1), + GGMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(1), + GGMaterial.naquadahBasedFuelMkIDepleted.getFluidOrGas(1), + GGMaterial.naquadahBasedFuelMkIIDepleted.getFluidOrGas(1), + GGMaterial.naquadahBasedFuelMkIIIDepleted.getFluidOrGas(1), + GGMaterial.naquadahBasedFuelMkIVDepleted.getFluidOrGas(1), + GGMaterial.naquadahBasedFuelMkVDepleted.getFluidOrGas(1), + GGMaterial.naquadahBasedFuelMkVIDepleted.getFluidOrGas(1) }; for (int i = 0; i < 9; i++) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs(inputs[i]) .fluidOutputs(outputs[i]) .duration(NaquadahFuelTime[i]) @@ -55,16 +54,16 @@ public class FuelRecipeLoader { } // MK III Naquadah Fuel - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 4), + GGMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 4), WerkstoffLoader.Tiberium.get(OrePrefixes.dust, 27), ItemRefer.High_Density_Uranium.get(2), ItemRefer.High_Density_Plutonium.get(1)) .fluidInputs( - MyMaterial.heavyNaquadahFuel.getFluidOrGas(800), - MyMaterial.lightNaquadahFuel.getFluidOrGas(1000)) - .fluidOutputs(MyMaterial.naquadahBasedFuelMkIII.getFluidOrGas(100)) + GGMaterial.heavyNaquadahFuel.getFluidOrGas(800), + GGMaterial.lightNaquadahFuel.getFluidOrGas(1000)) + .fluidOutputs(GGMaterial.naquadahBasedFuelMkIII.getFluidOrGas(100)) .duration(5 * SECONDS) .eut(1_100_000) .metadata(NFR_COIL_TIER, 1) @@ -72,16 +71,16 @@ public class FuelRecipeLoader { .addTo(naquadahFuelRefineFactoryRecipes); // Alternative higher tier recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 8), + GGMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 8), CHRONOMATIC_GLASS.getDust(9), ItemRefer.High_Density_Uranium.get(2), ItemRefer.High_Density_Plutonium.get(1)) .fluidInputs( - MyMaterial.heavyNaquadahFuel.getFluidOrGas(800), - MyMaterial.lightNaquadahFuel.getFluidOrGas(1000)) - .fluidOutputs(MyMaterial.naquadahBasedFuelMkIII.getFluidOrGas(200)) + GGMaterial.heavyNaquadahFuel.getFluidOrGas(800), + GGMaterial.lightNaquadahFuel.getFluidOrGas(1000)) + .fluidOutputs(GGMaterial.naquadahBasedFuelMkIII.getFluidOrGas(200)) .duration(5 * SECONDS) .eut(2_100_000) .metadata(NFR_COIL_TIER, 1) @@ -89,14 +88,14 @@ public class FuelRecipeLoader { .addTo(naquadahFuelRefineFactoryRecipes); // MK IV Naquadah Fuel - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 27), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherStar, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), - MyMaterial.orundum.get(OrePrefixes.dust, 32)) - .fluidInputs(MyMaterial.naquadahBasedFuelMkIII.getFluidOrGas(2000), Materials.Praseodymium.getMolten(9216L)) - .fluidOutputs(MyMaterial.naquadahBasedFuelMkIV.getFluidOrGas(250)) + GGMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 27), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherStar, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), + GGMaterial.orundum.get(OrePrefixes.dust, 32)) + .fluidInputs(GGMaterial.naquadahBasedFuelMkIII.getFluidOrGas(2000), Materials.Praseodymium.getMolten(9216L)) + .fluidOutputs(GGMaterial.naquadahBasedFuelMkIV.getFluidOrGas(250)) .duration(8 * SECONDS) .eut(46_000_000) .metadata(NFR_COIL_TIER, 2) @@ -104,16 +103,16 @@ public class FuelRecipeLoader { .addTo(naquadahFuelRefineFactoryRecipes); // Alternate higher tier recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 27), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), - MyMaterial.orundum.get(OrePrefixes.dust, 64)) + GGMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 27), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), + GGMaterial.orundum.get(OrePrefixes.dust, 64)) .fluidInputs( - MyMaterial.naquadahBasedFuelMkIII.getFluidOrGas(2000), + GGMaterial.naquadahBasedFuelMkIII.getFluidOrGas(2000), new FluidStack(FluidRegistry.getFluid("molten.hypogen"), 720)) - .fluidOutputs(MyMaterial.naquadahBasedFuelMkIV.getFluidOrGas(500)) + .fluidOutputs(GGMaterial.naquadahBasedFuelMkIV.getFluidOrGas(500)) .duration(8 * SECONDS) .eut(75_000_000) .metadata(NFR_COIL_TIER, 2) @@ -121,18 +120,18 @@ public class FuelRecipeLoader { .addTo(naquadahFuelRefineFactoryRecipes); // One-step recipe to allow easier scaling for MK VI - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 54), - MyMaterial.orundum.get(OrePrefixes.dust, 32), + GGMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 54), + GGMaterial.orundum.get(OrePrefixes.dust, 32), ItemRefer.High_Density_Uranium.get(10), ItemRefer.High_Density_Plutonium.get(5)) .fluidInputs( - MyMaterial.heavyNaquadahFuel.getFluidOrGas(4000), - MyMaterial.lightNaquadahFuel.getFluidOrGas(5000), + GGMaterial.heavyNaquadahFuel.getFluidOrGas(4000), + GGMaterial.lightNaquadahFuel.getFluidOrGas(5000), new FluidStack(FluidRegistry.getFluid("molten.hypogen"), 360), new FluidStack(FluidRegistry.getFluid("molten.chromaticglass"), 6480)) - .fluidOutputs(MyMaterial.naquadahBasedFuelMkIV.getFluidOrGas(250)) + .fluidOutputs(GGMaterial.naquadahBasedFuelMkIV.getFluidOrGas(250)) .duration(10 * TICKS) .eut(350_000_000) .metadata(NFR_COIL_TIER, 4) @@ -140,14 +139,14 @@ public class FuelRecipeLoader { .addTo(naquadahFuelRefineFactoryRecipes); // MK V Naquadah Fuel - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Infinity, 8), - MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.dust, 32)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Infinity, 8), + GGMaterial.atomicSeparationCatalyst.get(OrePrefixes.dust, 32)) .fluidInputs( - MyMaterial.naquadahBasedFuelMkIV.getFluidOrGas(2000), + GGMaterial.naquadahBasedFuelMkIV.getFluidOrGas(2000), FluidRegistry.getFluidStack("heavyradox", 250)) - .fluidOutputs(MyMaterial.naquadahBasedFuelMkV.getFluidOrGas(500)) + .fluidOutputs(GGMaterial.naquadahBasedFuelMkV.getFluidOrGas(500)) .duration(10 * SECONDS) .eut(100_000_000) .metadata(NFR_COIL_TIER, 2) @@ -155,15 +154,15 @@ public class FuelRecipeLoader { .addTo(naquadahFuelRefineFactoryRecipes); // Alternate higher tier recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.SpaceTime, 4), - GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.TranscendentMetal, 16), - MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.dust, 48)) + GTOreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.SpaceTime, 4), + GTOreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.TranscendentMetal, 16), + GGMaterial.atomicSeparationCatalyst.get(OrePrefixes.dust, 48)) .fluidInputs( - MyMaterial.naquadahBasedFuelMkIV.getFluidOrGas(2000), + GGMaterial.naquadahBasedFuelMkIV.getFluidOrGas(2000), FluidRegistry.getFluidStack("heavyradox", 250)) - .fluidOutputs(MyMaterial.naquadahBasedFuelMkV.getFluidOrGas(750)) + .fluidOutputs(GGMaterial.naquadahBasedFuelMkV.getFluidOrGas(750)) .duration(5 * SECONDS) .eut(300_000_000) .metadata(NFR_COIL_TIER, 3) @@ -171,14 +170,14 @@ public class FuelRecipeLoader { .addTo(naquadahFuelRefineFactoryRecipes); // MK VI Naquadah Fuel - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - ELEMENT.STANDALONE.ASTRAL_TITANIUM.getDust(64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tritanium, 32)) + MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getDust(64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tritanium, 32)) .fluidInputs( - MyMaterial.naquadahBasedFuelMkV.getFluidOrGas(2000), + GGMaterial.naquadahBasedFuelMkV.getFluidOrGas(2000), FluidRegistry.getFluidStack("molten.shirabon", 360)) - .fluidOutputs(MyMaterial.naquadahBasedFuelMkVI.getFluidOrGas(500)) + .fluidOutputs(GGMaterial.naquadahBasedFuelMkVI.getFluidOrGas(500)) .duration(12 * SECONDS) .eut(320_000_000) .metadata(NFR_COIL_TIER, 3) @@ -186,15 +185,15 @@ public class FuelRecipeLoader { .addTo(naquadahFuelRefineFactoryRecipes); // Alternate higher tier recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.WhiteDwarfMatter, 4), - ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getDust(64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tritanium, 48)) + GTOreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.WhiteDwarfMatter, 4), + MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getDust(64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tritanium, 48)) .fluidInputs( - MyMaterial.naquadahBasedFuelMkV.getFluidOrGas(2000), + GGMaterial.naquadahBasedFuelMkV.getFluidOrGas(2000), FluidRegistry.getFluidStack("molten.shirabon", 1440)) - .fluidOutputs(MyMaterial.naquadahBasedFuelMkVI.getFluidOrGas(750)) + .fluidOutputs(GGMaterial.naquadahBasedFuelMkVI.getFluidOrGas(750)) .duration(4 * SECONDS) .eut(TierEU.RECIPE_UXV) .metadata(NFR_COIL_TIER, 4) diff --git a/src/main/java/goodgenerator/loader/FuelRodLoader.java b/src/main/java/goodgenerator/loader/FuelRodLoader.java index 9654479861..5241c45bb7 100644 --- a/src/main/java/goodgenerator/loader/FuelRodLoader.java +++ b/src/main/java/goodgenerator/loader/FuelRodLoader.java @@ -6,8 +6,8 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import cpw.mods.fml.common.registry.GameRegistry; -import goodgenerator.items.DepletedFuelRod; -import goodgenerator.items.FuelRod; +import goodgenerator.items.ItemDepletedFuelRod; +import goodgenerator.items.ItemFuelRod; import goodgenerator.main.GoodGenerator; public class FuelRodLoader { @@ -38,62 +38,62 @@ public class FuelRodLoader { public static Item rodLiquidPlutonium_4; public static void RegisterRod() { - rodCompressedUraniumDepleted = new DepletedFuelRod( + rodCompressedUraniumDepleted = new ItemDepletedFuelRod( "rodCompressedUraniumDepleted", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, 100); - rodCompressedUraniumDepleted_2 = new DepletedFuelRod( + rodCompressedUraniumDepleted_2 = new ItemDepletedFuelRod( "rodCompressedUraniumDepleted2", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, 200); - rodCompressedUraniumDepleted_4 = new DepletedFuelRod( + rodCompressedUraniumDepleted_4 = new ItemDepletedFuelRod( "rodCompressedUraniumDepleted4", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, 400); - rodCompressedPlutoniumDepleted = new DepletedFuelRod( + rodCompressedPlutoniumDepleted = new ItemDepletedFuelRod( "rodCompressedPlutoniumDepleted", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, 120); - rodCompressedPlutoniumDepleted_2 = new DepletedFuelRod( + rodCompressedPlutoniumDepleted_2 = new ItemDepletedFuelRod( "rodCompressedPlutoniumDepleted2", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, 240); - rodCompressedPlutoniumDepleted_4 = new DepletedFuelRod( + rodCompressedPlutoniumDepleted_4 = new ItemDepletedFuelRod( "rodCompressedPlutoniumDepleted4", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, 480); - rodLiquidUraniumDepleted = new DepletedFuelRod( + rodLiquidUraniumDepleted = new ItemDepletedFuelRod( "rodLiquidUraniumDepleted", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, 800); - rodLiquidUraniumDepleted_2 = new DepletedFuelRod( + rodLiquidUraniumDepleted_2 = new ItemDepletedFuelRod( "rodLiquidUraniumDepleted2", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, 1600); - rodLiquidUraniumDepleted_4 = new DepletedFuelRod( + rodLiquidUraniumDepleted_4 = new ItemDepletedFuelRod( "rodLiquidUraniumDepleted4", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, 3200); - rodLiquidPlutoniumDepleted = new DepletedFuelRod( + rodLiquidPlutoniumDepleted = new ItemDepletedFuelRod( "rodLiquidPlutoniumDepleted", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, 1000); - rodLiquidPlutoniumDepleted_2 = new DepletedFuelRod( + rodLiquidPlutoniumDepleted_2 = new ItemDepletedFuelRod( "rodLiquidPlutoniumDepleted2", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, 2000); - rodLiquidPlutoniumDepleted_4 = new DepletedFuelRod( + rodLiquidPlutoniumDepleted_4 = new ItemDepletedFuelRod( "rodLiquidPlutoniumDepleted4", addText("depletedfuelrod.tooltip", 1), GoodGenerator.GG, @@ -117,7 +117,7 @@ public class FuelRodLoader { GameRegistry.registerItem(rodLiquidPlutoniumDepleted_2, "rodLiquidPlutoniumDepleted2", GoodGenerator.MOD_ID); GameRegistry.registerItem(rodLiquidPlutoniumDepleted_4, "rodLiquidPlutoniumDepleted4", GoodGenerator.MOD_ID); - rodCompressedUranium = new FuelRod( + rodCompressedUranium = new ItemFuelRod( "rodCompressedUranium", 1, 100, @@ -126,7 +126,7 @@ public class FuelRodLoader { 70000, new ItemStack(rodCompressedUraniumDepleted, 1), GoodGenerator.GG); - rodCompressedUranium_2 = new FuelRod( + rodCompressedUranium_2 = new ItemFuelRod( "rodCompressedUranium2", 2, 100, @@ -135,7 +135,7 @@ public class FuelRodLoader { 70000, new ItemStack(rodCompressedUraniumDepleted_2, 1), GoodGenerator.GG); - rodCompressedUranium_4 = new FuelRod( + rodCompressedUranium_4 = new ItemFuelRod( "rodCompressedUranium4", 4, 100, @@ -144,7 +144,7 @@ public class FuelRodLoader { 70000, new ItemStack(rodCompressedUraniumDepleted_4, 1), GoodGenerator.GG); - rodCompressedPlutonium = new FuelRod( + rodCompressedPlutonium = new ItemFuelRod( "rodCompressedPlutonium", 1, 50, @@ -154,7 +154,7 @@ public class FuelRodLoader { 6, new ItemStack(rodCompressedPlutoniumDepleted, 1), GoodGenerator.GG); - rodCompressedPlutonium_2 = new FuelRod( + rodCompressedPlutonium_2 = new ItemFuelRod( "rodCompressedPlutonium2", 2, 50, @@ -164,7 +164,7 @@ public class FuelRodLoader { 6, new ItemStack(rodCompressedPlutoniumDepleted_2, 1), GoodGenerator.GG); - rodCompressedPlutonium_4 = new FuelRod( + rodCompressedPlutonium_4 = new ItemFuelRod( "rodCompressedPlutonium4", 4, 50, @@ -174,7 +174,7 @@ public class FuelRodLoader { 6, new ItemStack(rodCompressedPlutoniumDepleted_4, 1), GoodGenerator.GG); - rodLiquidUranium = new FuelRod( + rodLiquidUranium = new ItemFuelRod( "rodLiquidUranium", 1, 1200, @@ -183,7 +183,7 @@ public class FuelRodLoader { 6000, new ItemStack(rodLiquidUraniumDepleted, 1), GoodGenerator.GG); - rodLiquidUranium_2 = new FuelRod( + rodLiquidUranium_2 = new ItemFuelRod( "rodLiquidUranium2", 2, 1200, @@ -192,7 +192,7 @@ public class FuelRodLoader { 6000, new ItemStack(rodLiquidUraniumDepleted_2, 1), GoodGenerator.GG); - rodLiquidUranium_4 = new FuelRod( + rodLiquidUranium_4 = new ItemFuelRod( "rodLiquidUranium4", 4, 1200, @@ -201,7 +201,7 @@ public class FuelRodLoader { 6000, new ItemStack(rodLiquidUraniumDepleted_4, 1), GoodGenerator.GG); - rodLiquidPlutonium = new FuelRod( + rodLiquidPlutonium = new ItemFuelRod( "rodLiquidPlutonium", 1, 1600, @@ -211,7 +211,7 @@ public class FuelRodLoader { 2, new ItemStack(rodLiquidPlutoniumDepleted, 1), GoodGenerator.GG); - rodLiquidPlutonium_2 = new FuelRod( + rodLiquidPlutonium_2 = new ItemFuelRod( "rodLiquidPlutonium2", 2, 1600, @@ -221,7 +221,7 @@ public class FuelRodLoader { 2, new ItemStack(rodLiquidPlutoniumDepleted_2, 1), GoodGenerator.GG); - rodLiquidPlutonium_4 = new FuelRod( + rodLiquidPlutonium_4 = new ItemFuelRod( "rodLiquidPlutonium4", 4, 1600, diff --git a/src/main/java/goodgenerator/loader/Loaders.java b/src/main/java/goodgenerator/loader/Loaders.java index d72ee2fabb..adc636ae34 100644 --- a/src/main/java/goodgenerator/loader/Loaders.java +++ b/src/main/java/goodgenerator/loader/Loaders.java @@ -11,48 +11,48 @@ import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.registry.GameRegistry; import goodgenerator.blocks.myFluids.FluidsBuilder; -import goodgenerator.blocks.regularBlock.Casing; -import goodgenerator.blocks.regularBlock.ComplexTextureCasing; -import goodgenerator.blocks.regularBlock.Frame; -import goodgenerator.blocks.regularBlock.TEBlock; -import goodgenerator.blocks.regularBlock.TurbineCasing; -import goodgenerator.blocks.tileEntity.ComponentAssemblyLine; -import goodgenerator.blocks.tileEntity.CoolantTower; -import goodgenerator.blocks.tileEntity.EssentiaHatch; -import goodgenerator.blocks.tileEntity.EssentiaOutputHatch; -import goodgenerator.blocks.tileEntity.EssentiaOutputHatch_ME; -import goodgenerator.blocks.tileEntity.ExtremeHeatExchanger; -import goodgenerator.blocks.tileEntity.FuelRefineFactory; -import goodgenerator.blocks.tileEntity.GTMetaTileEntity.DieselGenerator; -import goodgenerator.blocks.tileEntity.GTMetaTileEntity.NeutronAccelerator; -import goodgenerator.blocks.tileEntity.GTMetaTileEntity.NeutronSensor; -import goodgenerator.blocks.tileEntity.GTMetaTileEntity.YOTTAHatch; -import goodgenerator.blocks.tileEntity.LargeEssentiaGenerator; -import goodgenerator.blocks.tileEntity.LargeEssentiaSmeltery; -import goodgenerator.blocks.tileEntity.LargeFusionComputer1; -import goodgenerator.blocks.tileEntity.LargeFusionComputer2; -import goodgenerator.blocks.tileEntity.LargeFusionComputer3; -import goodgenerator.blocks.tileEntity.LargeFusionComputer4; -import goodgenerator.blocks.tileEntity.LargeFusionComputer5; -import goodgenerator.blocks.tileEntity.MultiNqGenerator; -import goodgenerator.blocks.tileEntity.NeutronActivator; -import goodgenerator.blocks.tileEntity.PreciseAssembler; -import goodgenerator.blocks.tileEntity.SupercriticalFluidTurbine; -import goodgenerator.blocks.tileEntity.UniversalChemicalFuelEngine; -import goodgenerator.blocks.tileEntity.YottaFluidTank; +import goodgenerator.blocks.regularBlock.BlockCasing; +import goodgenerator.blocks.regularBlock.BlockComplexTextureCasing; +import goodgenerator.blocks.regularBlock.BlockFrame; +import goodgenerator.blocks.regularBlock.BlockTEContainer; +import goodgenerator.blocks.regularBlock.BlockTurbineCasing; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.MTEDieselGenerator; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.MTENeutronAccelerator; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.MTENeutronSensor; +import goodgenerator.blocks.tileEntity.GTMetaTileEntity.MTEYOTTAHatch; +import goodgenerator.blocks.tileEntity.MTEComponentAssemblyLine; +import goodgenerator.blocks.tileEntity.MTECoolantTower; +import goodgenerator.blocks.tileEntity.MTEEssentiaHatch; +import goodgenerator.blocks.tileEntity.MTEEssentiaOutputHatch; +import goodgenerator.blocks.tileEntity.MTEEssentiaOutputHatchME; +import goodgenerator.blocks.tileEntity.MTEExtremeHeatExchanger; +import goodgenerator.blocks.tileEntity.MTEFuelRefineFactory; +import goodgenerator.blocks.tileEntity.MTELargeEssentiaGenerator; +import goodgenerator.blocks.tileEntity.MTELargeEssentiaSmeltery; +import goodgenerator.blocks.tileEntity.MTELargeFusionComputer1; +import goodgenerator.blocks.tileEntity.MTELargeFusionComputer2; +import goodgenerator.blocks.tileEntity.MTELargeFusionComputer3; +import goodgenerator.blocks.tileEntity.MTELargeFusionComputer4; +import goodgenerator.blocks.tileEntity.MTELargeFusionComputer5; +import goodgenerator.blocks.tileEntity.MTEMultiNqGenerator; +import goodgenerator.blocks.tileEntity.MTENeutronActivator; +import goodgenerator.blocks.tileEntity.MTEPreciseAssembler; +import goodgenerator.blocks.tileEntity.MTESupercriticalFluidTurbine; +import goodgenerator.blocks.tileEntity.MTEUniversalChemicalFuelEngine; +import goodgenerator.blocks.tileEntity.MTEYottaFluidTank; import goodgenerator.client.render.BlockRenderHandler; import goodgenerator.crossmod.ic2.CropsLoader; -import goodgenerator.crossmod.nei.NEI_Config; +import goodgenerator.crossmod.nei.NEIConfig; import goodgenerator.crossmod.thaumcraft.LargeEssentiaEnergyData; -import goodgenerator.items.MyItemBlocks; -import goodgenerator.items.MyItems; -import goodgenerator.items.MyMaterial; +import goodgenerator.items.GGItem; +import goodgenerator.items.GGItemBlocks; +import goodgenerator.items.GGMaterial; import goodgenerator.items.RadioactiveItem; import goodgenerator.main.GoodGenerator; import goodgenerator.util.CrackRecipeAdder; import goodgenerator.util.MaterialFix; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.enums.MetaTileEntityIDs; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; @@ -62,55 +62,55 @@ public class Loaders { public static final byte GoodGeneratorTexturePage = 12; - public static final Item _null_ = new MyItems("_null_", null); + public static final Item _null_ = new GGItem("_null_", null); - public static final Item radiationProtectionPlate = new MyItems("radiationProtectionPlate", GoodGenerator.GG); - public static final Item wrappedUraniumIngot = new MyItems("wrappedUraniumIngot", GoodGenerator.GG); + public static final Item radiationProtectionPlate = new GGItem("radiationProtectionPlate", GoodGenerator.GG); + public static final Item wrappedUraniumIngot = new GGItem("wrappedUraniumIngot", GoodGenerator.GG); public static final Item highDensityUraniumNugget = new RadioactiveItem( "highDensityUraniumNugget", GoodGenerator.GG, 200); public static final Item highDensityUranium = new RadioactiveItem("highDensityUranium", GoodGenerator.GG, 1800); - public static final Item wrappedThoriumIngot = new MyItems("wrappedThoriumIngot", GoodGenerator.GG); + public static final Item wrappedThoriumIngot = new GGItem("wrappedThoriumIngot", GoodGenerator.GG); public static final Item highDensityThoriumNugget = new RadioactiveItem( "highDensityThoriumNugget", GoodGenerator.GG, 50); public static final Item highDensityThorium = new RadioactiveItem("highDensityThorium", GoodGenerator.GG, 450); - public static final Item wrappedPlutoniumIngot = new MyItems("wrappedPlutoniumIngot", GoodGenerator.GG); + public static final Item wrappedPlutoniumIngot = new GGItem("wrappedPlutoniumIngot", GoodGenerator.GG); public static final Item highDensityPlutoniumNugget = new RadioactiveItem( "highDensityPlutoniumNugget", GoodGenerator.GG, 450); public static final Item highDensityPlutonium = new RadioactiveItem("highDensityPlutonium", GoodGenerator.GG, 4050); - public static final Item rawAtomicSeparationCatalyst = new MyItems("rawAtomicSeparationCatalyst", GoodGenerator.GG); - public static final Item advancedRadiationProtectionPlate = new MyItems( + public static final Item rawAtomicSeparationCatalyst = new GGItem("rawAtomicSeparationCatalyst", GoodGenerator.GG); + public static final Item advancedRadiationProtectionPlate = new GGItem( "advancedRadiationProtectionPlate", GoodGenerator.GG); - public static final Item aluminumNitride = new MyItems("aluminumNitride", "AlN", GoodGenerator.GG); - public static final Item specialCeramics = new MyItems("specialCeramics", GoodGenerator.GG); - public static final Item specialCeramicsPlate = new MyItems("specialCeramicsPlate", GoodGenerator.GG); + public static final Item aluminumNitride = new GGItem("aluminumNitride", "AlN", GoodGenerator.GG); + public static final Item specialCeramics = new GGItem("specialCeramics", GoodGenerator.GG); + public static final Item specialCeramicsPlate = new GGItem("specialCeramicsPlate", GoodGenerator.GG); public static final Item radioactiveWaste = new RadioactiveItem("radioactiveWaste", GoodGenerator.GG, 400); - public static final Item plasticCase = new MyItems("plasticCase", GoodGenerator.GG); - public static final Item quartzWafer = new MyItems("quartzWafer", GoodGenerator.GG); - public static final Item microHeater = new MyItems("microHeater", GoodGenerator.GG); - public static final Item quartzCrystalResonator = new MyItems("quartzCrystalResonator", GoodGenerator.GG); - public static final Item inverter = new MyItems("inverter", addText("inverter.tooltip", 1), GoodGenerator.GG); - public static final Item neutronSource = new MyItems("neutronSource", GoodGenerator.GG); - public static final Item naquadahMass = new MyItems( + public static final Item plasticCase = new GGItem("plasticCase", GoodGenerator.GG); + public static final Item quartzWafer = new GGItem("quartzWafer", GoodGenerator.GG); + public static final Item microHeater = new GGItem("microHeater", GoodGenerator.GG); + public static final Item quartzCrystalResonator = new GGItem("quartzCrystalResonator", GoodGenerator.GG); + public static final Item inverter = new GGItem("inverter", addText("inverter.tooltip", 1), GoodGenerator.GG); + public static final Item neutronSource = new GGItem("neutronSource", GoodGenerator.GG); + public static final Item naquadahMass = new GGItem( "naquadahMass", addText("naquadahMass.tooltip", 1), GoodGenerator.GG); - public static final Item enrichedNaquadahMass = new MyItems( + public static final Item enrichedNaquadahMass = new GGItem( "enrichedNaquadahMass", addText("enrichedNaquadahMass.tooltip", 1), GoodGenerator.GG); - public static final Item naquadriaMass = new MyItems( + public static final Item naquadriaMass = new GGItem( "naquadriaMass", addText("naquadriaMass.tooltip", 1), GoodGenerator.GG); - public static final Item advancedFuelRod = new MyItems("advancedFuelRod", GoodGenerator.GG); - public static final Item fluidCore = new MyItems( + public static final Item advancedFuelRod = new GGItem("advancedFuelRod", GoodGenerator.GG); + public static final Item fluidCore = new GGItem( "fluidCore", GoodGenerator.GG, new String[] { GoodGenerator.MOD_ID + ":fluidCore/1", GoodGenerator.MOD_ID + ":fluidCore/2", @@ -118,7 +118,7 @@ public class Loaders { GoodGenerator.MOD_ID + ":fluidCore/5", GoodGenerator.MOD_ID + ":fluidCore/6", GoodGenerator.MOD_ID + ":fluidCore/7", GoodGenerator.MOD_ID + ":fluidCore/8", GoodGenerator.MOD_ID + ":fluidCore/9", GoodGenerator.MOD_ID + ":fluidCore/10" }); - public static final Item upgradeEssentia = new MyItems( + public static final Item upgradeEssentia = new GGItem( "upgradeEssentia", GoodGenerator.GG, new String[] { GoodGenerator.MOD_ID + ":upgradeEssentia/null", GoodGenerator.MOD_ID + ":upgradeEssentia/air", @@ -126,15 +126,15 @@ public class Loaders { GoodGenerator.MOD_ID + ":upgradeEssentia/victus", GoodGenerator.MOD_ID + ":upgradeEssentia/tainted", GoodGenerator.MOD_ID + ":upgradeEssentia/mechanics", GoodGenerator.MOD_ID + ":upgradeEssentia/spirit", GoodGenerator.MOD_ID + ":upgradeEssentia/radiation", GoodGenerator.MOD_ID + ":upgradeEssentia/electric" }); - public static final Item highEnergyMixture = new MyItems( + public static final Item highEnergyMixture = new GGItem( "highEnergyMixture", GoodGenerator.GG, new String[] { GoodGenerator.MOD_ID + ":highEnergyMixture" }); - public static final Item saltyRoot = new MyItems( + public static final Item saltyRoot = new GGItem( "saltyRoot", GoodGenerator.GG, new String[] { GoodGenerator.MOD_ID + ":saltyRoot" }); - public static final Item huiCircuit = new MyItems( + public static final Item huiCircuit = new GGItem( "huiCircuit", addText("huiCircuit.tooltip", 5), GoodGenerator.GG, @@ -142,7 +142,7 @@ public class Loaders { GoodGenerator.MOD_ID + ":ciruits/3", GoodGenerator.MOD_ID + ":ciruits/4", GoodGenerator.MOD_ID + ":ciruits/5", }); - public static final Item circuitWrap = new MyItems( + public static final Item circuitWrap = new GGItem( "circuitWrap", GoodGenerator.GG, new String[] { GoodGenerator.MOD_ID + ":wraps/0", GoodGenerator.MOD_ID + ":wraps/1", @@ -152,83 +152,83 @@ public class Loaders { GoodGenerator.MOD_ID + ":wraps/11", GoodGenerator.MOD_ID + ":wraps/12", GoodGenerator.MOD_ID + ":wraps/13", GoodGenerator.MOD_ID + ":wraps/14" }); - public static final Block MAR_Casing = new Casing( + public static final Block MAR_Casing = new BlockCasing( "MAR_Casing", new String[] { GoodGenerator.MOD_ID + ":MAR_Casing" }); - public static final Block FRF_Casings = new Casing( + public static final Block FRF_Casings = new BlockCasing( "FRF_Casing", new String[] { "gregtech:iconsets/MACHINE_CASING_MINING_BLACKPLUTONIUM" }); - public static final Block FRF_Coil_1 = new Casing( + public static final Block FRF_Coil_1 = new BlockCasing( "FRF_Coil_1", new String[] { GoodGenerator.MOD_ID + ":FRF_Coils/1" }); - public static final Block FRF_Coil_2 = new Casing( + public static final Block FRF_Coil_2 = new BlockCasing( "FRF_Coil_2", new String[] { GoodGenerator.MOD_ID + ":FRF_Coils/2" }); - public static final Block FRF_Coil_3 = new Casing( + public static final Block FRF_Coil_3 = new BlockCasing( "FRF_Coil_3", new String[] { GoodGenerator.MOD_ID + ":FRF_Coils/3" }); - public static final Block FRF_Coil_4 = new Casing( + public static final Block FRF_Coil_4 = new BlockCasing( "FRF_Coil_4", new String[] { GoodGenerator.MOD_ID + ":FRF_Coils/4" }); - public static final Block radiationProtectionSteelFrame = new Frame( + public static final Block radiationProtectionSteelFrame = new BlockFrame( "radiationProtectionSteelFrame", new String[] { GoodGenerator.MOD_ID + ":radiationProtectionSteelFrame" }); - public static final Block fieldRestrictingGlass = new Frame( + public static final Block fieldRestrictingGlass = new BlockFrame( "fieldRestrictingGlass", new String[] { GoodGenerator.MOD_ID + ":fieldRestrictingGlass" }); - public static final Block rawCylinder = new Casing( + public static final Block rawCylinder = new BlockCasing( "rawCylinder", new String[] { GoodGenerator.MOD_ID + ":rawCylinder" }); - public static final Block titaniumPlatedCylinder = new Casing( + public static final Block titaniumPlatedCylinder = new BlockCasing( "titaniumPlatedCylinder", new String[] { GoodGenerator.MOD_ID + ":titaniumPlatedCylinder" }); - public static final Block magicCasing = new Casing( + public static final Block magicCasing = new BlockCasing( "magicCasing", new String[] { GoodGenerator.MOD_ID + ":MagicCasing" }); - public static final Block essentiaCell = new Casing( + public static final Block essentiaCell = new BlockCasing( "essentiaCell", new String[] { GoodGenerator.MOD_ID + ":essentiaCell/1", GoodGenerator.MOD_ID + ":essentiaCell/2", GoodGenerator.MOD_ID + ":essentiaCell/3", GoodGenerator.MOD_ID + ":essentiaCell/4" }); - public static final Block speedingPipe = new ComplexTextureCasing( + public static final Block speedingPipe = new BlockComplexTextureCasing( "speedingPipe", new String[] { GoodGenerator.MOD_ID + ":speedingPipe_SIDE" }, new String[] { GoodGenerator.MOD_ID + ":speedingPipe_TOP" }); - public static final Block yottaFluidTankCell = new Casing( + public static final Block yottaFluidTankCell = new BlockCasing( "yottaFluidTankCell", new String[] { GoodGenerator.MOD_ID + ":yottaFluidTankCell/1", GoodGenerator.MOD_ID + ":yottaFluidTankCell/2", GoodGenerator.MOD_ID + ":yottaFluidTankCell/3", GoodGenerator.MOD_ID + ":yottaFluidTankCell/4", GoodGenerator.MOD_ID + ":yottaFluidTankCell/5", GoodGenerator.MOD_ID + ":yottaFluidTankCell/6", GoodGenerator.MOD_ID + ":yottaFluidTankCell/7", GoodGenerator.MOD_ID + ":yottaFluidTankCell/8", GoodGenerator.MOD_ID + ":yottaFluidTankCell/9", GoodGenerator.MOD_ID + ":yottaFluidTankCell/10", }); - public static final Block yottaFluidTankCasing = new ComplexTextureCasing( + public static final Block yottaFluidTankCasing = new BlockComplexTextureCasing( "yottaFluidTankCasing", new String[] { GoodGenerator.MOD_ID + ":yottaFluidTankCasing_SIDE" }, new String[] { GoodGenerator.MOD_ID + ":yottaFluidTankCasing_TOP" }); - public static final Block supercriticalFluidTurbineCasing = new TurbineCasing( + public static final Block supercriticalFluidTurbineCasing = new BlockTurbineCasing( "supercriticalFluidTurbineCasing", "supercriticalFluidTurbineCasing"); - public static final Block pressureResistantWalls = new Casing( + public static final Block pressureResistantWalls = new BlockCasing( "pressureResistantWalls", new String[] { GoodGenerator.MOD_ID + ":pressureResistantWalls" }); - public static final Block impreciseUnitCasing = new Casing( + public static final Block impreciseUnitCasing = new BlockCasing( "impreciseUnitCasing", new String[] { GoodGenerator.MOD_ID + ":preciseUnitCasing/0" }); - public static final Block preciseUnitCasing = new Casing( + public static final Block preciseUnitCasing = new BlockCasing( "preciseUnitCasing", new String[] { GoodGenerator.MOD_ID + ":preciseUnitCasing/1", GoodGenerator.MOD_ID + ":preciseUnitCasing/2", GoodGenerator.MOD_ID + ":preciseUnitCasing/3", GoodGenerator.MOD_ID + ":preciseUnitCasing/4" }); - public static final Block compactFusionCoil = new Casing( + public static final Block compactFusionCoil = new BlockCasing( "compactFusionCoil", new String[] { GoodGenerator.MOD_ID + ":fuison/1", GoodGenerator.MOD_ID + ":fuison/2", GoodGenerator.MOD_ID + ":fuison/3", GoodGenerator.MOD_ID + ":fuison/4", GoodGenerator.MOD_ID + ":fuison/5" }); - public static final Block essentiaFilterCasing = new Casing( + public static final Block essentiaFilterCasing = new BlockCasing( "essentiaFilterCasing", new String[] { GoodGenerator.MOD_ID + ":essentiaFilterCasing" }); public static Block essentiaHatch; public static Block essentiaOutputHatch; public static Block essentiaOutputHatch_ME; - public static final Block componentAssemblylineCasing = new Casing( + public static final Block componentAssemblylineCasing = new BlockCasing( "componentAssemblyLineCasing", new String[] { GoodGenerator.MOD_ID + ":compAsslineCasing/0", // LV GoodGenerator.MOD_ID + ":compAsslineCasing/1", // MV @@ -267,11 +267,11 @@ public class Loaders { // public static Item Isotope = new NuclearMetaItemGenerator(); public static void GTMetaTileRegister() { - Loaders.MAR = new MultiNqGenerator(MetaTileEntityIDs.MultiNqGenerator.ID, "NaG", "Large Naquadah Reactor") + Loaders.MAR = new MTEMultiNqGenerator(MetaTileEntityIDs.MultiNqGenerator.ID, "NaG", "Large Naquadah Reactor") .getStackForm(1L); - Loaders.FRF = new FuelRefineFactory(MetaTileEntityIDs.FuelRefineFactory.ID, "FRF", "Naquadah Fuel Refinery") + Loaders.FRF = new MTEFuelRefineFactory(MetaTileEntityIDs.FuelRefineFactory.ID, "FRF", "Naquadah Fuel Refinery") .getStackForm(1L); - Loaders.UCFE = new UniversalChemicalFuelEngine( + Loaders.UCFE = new MTEUniversalChemicalFuelEngine( MetaTileEntityIDs.UniversalChemicalFuelEngine.ID, "UniversalChemicalFuelEngine", "Universal Chemical Fuel Engine").getStackForm(1L); @@ -281,100 +281,100 @@ public class Loaders { MetaTileEntityIDs.NeutronAcceleratorIV.ID, MetaTileEntityIDs.NeutronAcceleratorLuV.ID, MetaTileEntityIDs.NeutronAcceleratorZPM.ID, MetaTileEntityIDs.NeutronAcceleratorUV.ID, }; for (int i = 0; i < 9; i++) { - Loaders.NeutronAccelerators[i] = new NeutronAccelerator( + Loaders.NeutronAccelerators[i] = new MTENeutronAccelerator( neutronAcceleratorIDs[i], - "Neutron Accelerator " + GT_Values.VN[i], - "Neutron Accelerator " + GT_Values.VN[i], + "Neutron Accelerator " + GTValues.VN[i], + "Neutron Accelerator " + GTValues.VN[i], i).getStackForm(1L); } - Loaders.NS = new NeutronSensor(MetaTileEntityIDs.NeutronSensor.ID, "Neutron Sensor", "Neutron Sensor", 5) + Loaders.NS = new MTENeutronSensor(MetaTileEntityIDs.NeutronSensor.ID, "Neutron Sensor", "Neutron Sensor", 5) .getStackForm(1L); - Loaders.NA = new NeutronActivator( + Loaders.NA = new MTENeutronActivator( MetaTileEntityIDs.NeutronActivator.ID, "NeutronActivator", "Neutron Activator").getStackForm(1L); - Loaders.YFT = new YottaFluidTank(MetaTileEntityIDs.YottaFluidTank.ID, "YottaFluidTank", "YOTTank") + Loaders.YFT = new MTEYottaFluidTank(MetaTileEntityIDs.YottaFluidTank.ID, "YottaFluidTank", "YOTTank") .getStackForm(1L); - Loaders.YFH = new YOTTAHatch(MetaTileEntityIDs.YottaHatch.ID, "YottaFluidTankHatch", "YOTHatch", 5) + Loaders.YFH = new MTEYOTTAHatch(MetaTileEntityIDs.YottaHatch.ID, "YottaFluidTankHatch", "YOTHatch", 5) .getStackForm(1L); - Loaders.SCTurbine = new SupercriticalFluidTurbine( + Loaders.SCTurbine = new MTESupercriticalFluidTurbine( MetaTileEntityIDs.SupercriticalFluidTurbine.ID, "SupercriticalSteamTurbine", "SC Steam Turbine").getStackForm(1L); - Loaders.XHE = new ExtremeHeatExchanger( + Loaders.XHE = new MTEExtremeHeatExchanger( MetaTileEntityIDs.ExtremeHeatExchanger.ID, "ExtremeHeatExchanger", "Extreme Heat Exchanger").getStackForm(1L); - Loaders.PA = new PreciseAssembler( + Loaders.PA = new MTEPreciseAssembler( MetaTileEntityIDs.PreciseAssembler.ID, "PreciseAssembler", "Precise Auto-Assembler MT-3662").getStackForm(1L); - Loaders.LFC[0] = new LargeFusionComputer1( + Loaders.LFC[0] = new MTELargeFusionComputer1( MetaTileEntityIDs.LargeFusionComputer1.ID, "LargeFusionComputer1", "Compact Fusion Computer MK-I Prototype").getStackForm(1); - Loaders.LFC[1] = new LargeFusionComputer2( + Loaders.LFC[1] = new MTELargeFusionComputer2( MetaTileEntityIDs.LargeFusionComputer2.ID, "LargeFusionComputer2", "Compact Fusion Computer MK-II").getStackForm(1L); - Loaders.LFC[2] = new LargeFusionComputer3( + Loaders.LFC[2] = new MTELargeFusionComputer3( MetaTileEntityIDs.LargeFusionComputer3.ID, "LargeFusionComputer3", "Compact Fusion Computer MK-III").getStackForm(1L); - Loaders.LFC[3] = new LargeFusionComputer4( + Loaders.LFC[3] = new MTELargeFusionComputer4( MetaTileEntityIDs.LargeFusionComputer4.ID, "LargeFusionComputer4", "Compact Fusion Computer MK-IV Prototype").getStackForm(1L); - Loaders.LFC[4] = new LargeFusionComputer5( + Loaders.LFC[4] = new MTELargeFusionComputer5( MetaTileEntityIDs.LargeFusionComputer5.ID, "LargeFusionComputer5", "Compact Fusion Computer MK-V").getStackForm(1L); - Loaders.Generator_Diesel[0] = new DieselGenerator( + Loaders.Generator_Diesel[0] = new MTEDieselGenerator( MetaTileEntityIDs.DieselGeneratorEV.ID, "basicgenerator.diesel.tier.04", "Turbo Supercharging Combustion Generator", 4).getStackForm(1L); - Loaders.Generator_Diesel[1] = new DieselGenerator( + Loaders.Generator_Diesel[1] = new MTEDieselGenerator( MetaTileEntityIDs.DieselGeneratorIV.ID, "basicgenerator.diesel.tier.05", "Ultimate Chemical Energy Releaser", 5).getStackForm(1L); - Loaders.CT = new CoolantTower(MetaTileEntityIDs.CoolantTower.ID, "CoolantTower", "Coolant Tower") + Loaders.CT = new MTECoolantTower(MetaTileEntityIDs.CoolantTower.ID, "CoolantTower", "Coolant Tower") .getStackForm(1L); - Loaders.CompAssline = new ComponentAssemblyLine( + Loaders.CompAssline = new MTEComponentAssemblyLine( MetaTileEntityIDs.ComponentAssemblyLine.ID, "ComponentAssemblyLine", "Component Assembly Line").getStackForm(1L); - CrackRecipeAdder.registerPipe(MetaTileEntityIDs.PipeIncoloy903.ID, MyMaterial.incoloy903, 15000, 8000, true); - CrackRecipeAdder.registerWire(MetaTileEntityIDs.WireSignalium.ID, MyMaterial.signalium, 12, 131072, 16, true); - CrackRecipeAdder.registerWire(MetaTileEntityIDs.WireLumiium.ID, MyMaterial.lumiium, 8, 524288, 64, true); + CrackRecipeAdder.registerPipe(MetaTileEntityIDs.PipeIncoloy903.ID, GGMaterial.incoloy903, 15000, 8000, true); + CrackRecipeAdder.registerWire(MetaTileEntityIDs.WireSignalium.ID, GGMaterial.signalium, 12, 131072, 16, true); + CrackRecipeAdder.registerWire(MetaTileEntityIDs.WireLumiium.ID, GGMaterial.lumiium, 8, 524288, 64, true); } public static void Register() { GameRegistry.registerItem(_null_, "_null_", GoodGenerator.MOD_ID); - NEI_Config.hide(_null_); + NEIConfig.hide(_null_); - GameRegistry.registerBlock(MAR_Casing, MyItemBlocks.class, "MAR_Casing"); - GameRegistry.registerBlock(radiationProtectionSteelFrame, MyItemBlocks.class, "radiationProtectionSteelFrame"); - GameRegistry.registerBlock(fieldRestrictingGlass, MyItemBlocks.class, "fieldRestrictingGlass"); - GameRegistry.registerBlock(FRF_Casings, MyItemBlocks.class, "FRF_Casings"); - GameRegistry.registerBlock(FRF_Coil_1, MyItemBlocks.class, "FRF_Coil_1"); - GameRegistry.registerBlock(FRF_Coil_2, MyItemBlocks.class, "FRF_Coil_2"); - GameRegistry.registerBlock(FRF_Coil_3, MyItemBlocks.class, "FRF_Coil_3"); - GameRegistry.registerBlock(FRF_Coil_4, MyItemBlocks.class, "FRF_Coil_4"); - GameRegistry.registerBlock(rawCylinder, MyItemBlocks.class, "rawCylinder"); - GameRegistry.registerBlock(titaniumPlatedCylinder, MyItemBlocks.class, "titaniumPlatedCylinder"); - GameRegistry.registerBlock(speedingPipe, MyItemBlocks.class, "speedingPipe"); - GameRegistry.registerBlock(yottaFluidTankCell, MyItemBlocks.class, "yottaFluidTankCells"); - GameRegistry.registerBlock(yottaFluidTankCasing, MyItemBlocks.class, "yottaFluidTankCasing"); + GameRegistry.registerBlock(MAR_Casing, GGItemBlocks.class, "MAR_Casing"); + GameRegistry.registerBlock(radiationProtectionSteelFrame, GGItemBlocks.class, "radiationProtectionSteelFrame"); + GameRegistry.registerBlock(fieldRestrictingGlass, GGItemBlocks.class, "fieldRestrictingGlass"); + GameRegistry.registerBlock(FRF_Casings, GGItemBlocks.class, "FRF_Casings"); + GameRegistry.registerBlock(FRF_Coil_1, GGItemBlocks.class, "FRF_Coil_1"); + GameRegistry.registerBlock(FRF_Coil_2, GGItemBlocks.class, "FRF_Coil_2"); + GameRegistry.registerBlock(FRF_Coil_3, GGItemBlocks.class, "FRF_Coil_3"); + GameRegistry.registerBlock(FRF_Coil_4, GGItemBlocks.class, "FRF_Coil_4"); + GameRegistry.registerBlock(rawCylinder, GGItemBlocks.class, "rawCylinder"); + GameRegistry.registerBlock(titaniumPlatedCylinder, GGItemBlocks.class, "titaniumPlatedCylinder"); + GameRegistry.registerBlock(speedingPipe, GGItemBlocks.class, "speedingPipe"); + GameRegistry.registerBlock(yottaFluidTankCell, GGItemBlocks.class, "yottaFluidTankCells"); + GameRegistry.registerBlock(yottaFluidTankCasing, GGItemBlocks.class, "yottaFluidTankCasing"); GameRegistry - .registerBlock(supercriticalFluidTurbineCasing, MyItemBlocks.class, "supercriticalFluidTurbineCasing"); - GameRegistry.registerBlock(componentAssemblylineCasing, MyItemBlocks.class, "componentAssemblylineCasing"); - GameRegistry.registerBlock(pressureResistantWalls, MyItemBlocks.class, "pressureResistantWalls"); - GameRegistry.registerBlock(impreciseUnitCasing, MyItemBlocks.class, "impreciseUnitCasing"); - GameRegistry.registerBlock(preciseUnitCasing, MyItemBlocks.class, "preciseUnitCasing"); - GameRegistry.registerBlock(compactFusionCoil, MyItemBlocks.class, "compactFusionCoil"); + .registerBlock(supercriticalFluidTurbineCasing, GGItemBlocks.class, "supercriticalFluidTurbineCasing"); + GameRegistry.registerBlock(componentAssemblylineCasing, GGItemBlocks.class, "componentAssemblylineCasing"); + GameRegistry.registerBlock(pressureResistantWalls, GGItemBlocks.class, "pressureResistantWalls"); + GameRegistry.registerBlock(impreciseUnitCasing, GGItemBlocks.class, "impreciseUnitCasing"); + GameRegistry.registerBlock(preciseUnitCasing, GGItemBlocks.class, "preciseUnitCasing"); + GameRegistry.registerBlock(compactFusionCoil, GGItemBlocks.class, "compactFusionCoil"); GameRegistry.registerItem(radiationProtectionPlate, "radiationProtectionPlate", GoodGenerator.MOD_ID); GameRegistry.registerItem(wrappedUraniumIngot, "wrappedUraniumIngot", GoodGenerator.MOD_ID); GameRegistry.registerItem(highDensityUraniumNugget, "highDensityUraniumNugget", GoodGenerator.MOD_ID); @@ -413,32 +413,35 @@ public class Loaders { if (Loader.isModLoaded("Thaumcraft")) { LargeEssentiaEnergyData.processEssentiaData(); GameRegistry.registerItem(upgradeEssentia, "upgradeEssentia", GoodGenerator.MOD_ID); - GameRegistry.registerTileEntity(EssentiaHatch.class, "EssentiaHatch"); - GameRegistry.registerTileEntity(EssentiaOutputHatch.class, "EssentiaOutputHatch"); - GameRegistry.registerTileEntity(EssentiaOutputHatch_ME.class, "EssentiaOutputHatch_ME"); - Loaders.LEG = new LargeEssentiaGenerator( + GameRegistry.registerTileEntity(MTEEssentiaHatch.class, "EssentiaHatch"); + GameRegistry.registerTileEntity(MTEEssentiaOutputHatch.class, "EssentiaOutputHatch"); + GameRegistry.registerTileEntity(MTEEssentiaOutputHatchME.class, "EssentiaOutputHatch_ME"); + Loaders.LEG = new MTELargeEssentiaGenerator( MetaTileEntityIDs.LargeEssentiaGenerator.ID, "LargeEssentiaGenerator", "Large Essentia Generator - Marked for Deprecation").getStackForm(1L); - Loaders.LES = new LargeEssentiaSmeltery( + Loaders.LES = new MTELargeEssentiaSmeltery( MetaTileEntityIDs.LargeEssentiaSmeltery.ID, "LargeEssentiaSmeltery", "Large Essentia Smeltery").getStackForm(1L); - essentiaHatch = new TEBlock("essentiaHatch", new String[] { GoodGenerator.MOD_ID + ":essentiaHatch" }, 1); - essentiaOutputHatch = new TEBlock( + essentiaHatch = new BlockTEContainer( + "essentiaHatch", + new String[] { GoodGenerator.MOD_ID + ":essentiaHatch" }, + 1); + essentiaOutputHatch = new BlockTEContainer( "essentiaOutputHatch", new String[] { GoodGenerator.MOD_ID + ":essentiaOutputHatch" }, 2); - essentiaOutputHatch_ME = new TEBlock( + essentiaOutputHatch_ME = new BlockTEContainer( "essentiaOutputHatch_ME", new String[] { GoodGenerator.MOD_ID + ":essentiaOutputHatch_ME" }, 3); - GameRegistry.registerBlock(magicCasing, MyItemBlocks.class, "magicCasing"); - GameRegistry.registerBlock(essentiaCell, MyItemBlocks.class, "essentiaCell"); - GameRegistry.registerBlock(essentiaHatch, MyItemBlocks.class, "essentiaHatch"); - GameRegistry.registerBlock(essentiaOutputHatch, MyItemBlocks.class, "essentiaOutputHatch"); - GameRegistry.registerBlock(essentiaFilterCasing, MyItemBlocks.class, "essentiaFilterCasing"); - GameRegistry.registerBlock(essentiaOutputHatch_ME, MyItemBlocks.class, "essentiaOutputHatch_ME"); + GameRegistry.registerBlock(magicCasing, GGItemBlocks.class, "magicCasing"); + GameRegistry.registerBlock(essentiaCell, GGItemBlocks.class, "essentiaCell"); + GameRegistry.registerBlock(essentiaHatch, GGItemBlocks.class, "essentiaHatch"); + GameRegistry.registerBlock(essentiaOutputHatch, GGItemBlocks.class, "essentiaOutputHatch"); + GameRegistry.registerBlock(essentiaFilterCasing, GGItemBlocks.class, "essentiaFilterCasing"); + GameRegistry.registerBlock(essentiaOutputHatch_ME, GGItemBlocks.class, "essentiaOutputHatch_ME"); Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][0] = TextureFactory.of(magicCasing); } @@ -456,7 +459,7 @@ public class Loaders { Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][2] = TextureFactory .of(supercriticalFluidTurbineCasing); Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][3] = TextureFactory - .of(GregTech_API.sBlockConcretes, 8); + .of(GregTechAPI.sBlockConcretes, 8); Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][4] = TextureFactory .of(impreciseUnitCasing, 0); Textures.BlockIcons.casingTexturePages[GoodGeneratorTexturePage][5] = TextureFactory @@ -495,14 +498,14 @@ public class Loaders { } public static void completeLoad() { - RecipeLoader_02.FinishLoadRecipe(); + RecipeLoader2.FinishLoadRecipe(); MaterialFix.addRecipeForMultiItems(); ComponentAssemblyLineRecipeLoader.run(); } public static void initLoadRecipes() { RecipeLoader.InitLoadRecipe(); - RecipeLoader_02.InitLoadRecipe(); + RecipeLoader2.InitLoadRecipe(); FuelRecipeLoader.RegisterFuel(); NaquadahReworkRecipeLoader.RecipeLoad(); } @@ -510,7 +513,7 @@ public class Loaders { public static void postInitLoadRecipes() { RecipeLoader.RecipeLoad(); RecipeLoader.Fixer(); - RecipeLoader_02.RecipeLoad(); + RecipeLoader2.RecipeLoad(); NeutronActivatorLoader.NARecipeLoad(); } } diff --git a/src/main/java/goodgenerator/loader/NaquadahReworkRecipeLoader.java b/src/main/java/goodgenerator/loader/NaquadahReworkRecipeLoader.java index 56e2a10df2..97b885668b 100644 --- a/src/main/java/goodgenerator/loader/NaquadahReworkRecipeLoader.java +++ b/src/main/java/goodgenerator/loader/NaquadahReworkRecipeLoader.java @@ -1,40 +1,40 @@ package goodgenerator.loader; import static goodgenerator.api.recipe.GoodGeneratorRecipeMaps.neutronActivatorRecipes; -import static goodgenerator.items.MyMaterial.P507; -import static goodgenerator.items.MyMaterial.adamantine; -import static goodgenerator.items.MyMaterial.concentratedEnrichedNaquadahSludge; -import static goodgenerator.items.MyMaterial.enrichedNaquadahEarth; -import static goodgenerator.items.MyMaterial.enrichedNaquadahGoo; -import static goodgenerator.items.MyMaterial.enrichedNaquadahRichSolution; -import static goodgenerator.items.MyMaterial.enrichedNaquadahSulphate; -import static goodgenerator.items.MyMaterial.fluorineRichWasteLiquid; -import static goodgenerator.items.MyMaterial.fluoroantimonicAcid; -import static goodgenerator.items.MyMaterial.galliumHydroxide; -import static goodgenerator.items.MyMaterial.indiumPhosphate; -import static goodgenerator.items.MyMaterial.inertEnrichedNaquadah; -import static goodgenerator.items.MyMaterial.inertNaquadah; -import static goodgenerator.items.MyMaterial.inertNaquadria; -import static goodgenerator.items.MyMaterial.lowQualityNaquadahEmulsion; -import static goodgenerator.items.MyMaterial.lowQualityNaquadahSolution; -import static goodgenerator.items.MyMaterial.lowQualityNaquadriaPhosphate; -import static goodgenerator.items.MyMaterial.lowQualityNaquadriaSolution; -import static goodgenerator.items.MyMaterial.lowQualityNaquadriaSulphate; -import static goodgenerator.items.MyMaterial.magnesiumSulphate; -import static goodgenerator.items.MyMaterial.naquadahAdamantiumSolution; -import static goodgenerator.items.MyMaterial.naquadahEarth; -import static goodgenerator.items.MyMaterial.naquadahGoo; -import static goodgenerator.items.MyMaterial.naquadahRichSolution; -import static goodgenerator.items.MyMaterial.naquadahine; -import static goodgenerator.items.MyMaterial.naquadriaEarth; -import static goodgenerator.items.MyMaterial.naquadriaGoo; -import static goodgenerator.items.MyMaterial.naquadriaRichSolution; -import static goodgenerator.items.MyMaterial.naquadriaSulphate; -import static goodgenerator.items.MyMaterial.titaniumTrifluoride; -import static goodgenerator.items.MyMaterial.towEthyl1Hexanol; -import static goodgenerator.items.MyMaterial.triniumSulphate; -import static goodgenerator.items.MyMaterial.wasteLiquid; -import static goodgenerator.main.GG_Config_Loader.EnableNaquadahRework; +import static goodgenerator.items.GGMaterial.P507; +import static goodgenerator.items.GGMaterial.adamantine; +import static goodgenerator.items.GGMaterial.concentratedEnrichedNaquadahSludge; +import static goodgenerator.items.GGMaterial.enrichedNaquadahEarth; +import static goodgenerator.items.GGMaterial.enrichedNaquadahGoo; +import static goodgenerator.items.GGMaterial.enrichedNaquadahRichSolution; +import static goodgenerator.items.GGMaterial.enrichedNaquadahSulphate; +import static goodgenerator.items.GGMaterial.fluorineRichWasteLiquid; +import static goodgenerator.items.GGMaterial.fluoroantimonicAcid; +import static goodgenerator.items.GGMaterial.galliumHydroxide; +import static goodgenerator.items.GGMaterial.indiumPhosphate; +import static goodgenerator.items.GGMaterial.inertEnrichedNaquadah; +import static goodgenerator.items.GGMaterial.inertNaquadah; +import static goodgenerator.items.GGMaterial.inertNaquadria; +import static goodgenerator.items.GGMaterial.lowQualityNaquadahEmulsion; +import static goodgenerator.items.GGMaterial.lowQualityNaquadahSolution; +import static goodgenerator.items.GGMaterial.lowQualityNaquadriaPhosphate; +import static goodgenerator.items.GGMaterial.lowQualityNaquadriaSolution; +import static goodgenerator.items.GGMaterial.lowQualityNaquadriaSulphate; +import static goodgenerator.items.GGMaterial.magnesiumSulphate; +import static goodgenerator.items.GGMaterial.naquadahAdamantiumSolution; +import static goodgenerator.items.GGMaterial.naquadahEarth; +import static goodgenerator.items.GGMaterial.naquadahGoo; +import static goodgenerator.items.GGMaterial.naquadahRichSolution; +import static goodgenerator.items.GGMaterial.naquadahine; +import static goodgenerator.items.GGMaterial.naquadriaEarth; +import static goodgenerator.items.GGMaterial.naquadriaGoo; +import static goodgenerator.items.GGMaterial.naquadriaRichSolution; +import static goodgenerator.items.GGMaterial.naquadriaSulphate; +import static goodgenerator.items.GGMaterial.titaniumTrifluoride; +import static goodgenerator.items.GGMaterial.towEthyl1Hexanol; +import static goodgenerator.items.GGMaterial.triniumSulphate; +import static goodgenerator.items.GGMaterial.wasteLiquid; +import static goodgenerator.main.GGConfigLoader.EnableNaquadahRework; import static goodgenerator.util.MyRecipeAdder.computeRangeNKE; import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; @@ -45,14 +45,14 @@ import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; import static gregtech.api.recipe.RecipeMaps.mixerRecipes; import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.NKE_RANGE; -import static gregtech.api.util.GT_RecipeConstants.QFT_FOCUS_TIER; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; -import static gregtech.common.items.GT_MetaGenerated_Item_01.registerCauldronCleaningFor; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.NKE_RANGE; +import static gregtech.api.util.GTRecipeConstants.QFT_FOCUS_TIER; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; +import static gregtech.common.items.MetaGeneratedItem01.registerCauldronCleaningFor; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.quantumForceTransformerRecipes; import java.util.HashSet; @@ -64,13 +64,12 @@ import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; -import com.github.bartimaeusnek.bartworks.system.material.GT_Enhancement.PlatinumSludgeOverHaul; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.gtenhancement.PlatinumSludgeOverHaul; import goodgenerator.main.GoodGenerator; import goodgenerator.util.CrackRecipeAdder; import goodgenerator.util.ItemRefer; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.Mods; @@ -78,12 +77,12 @@ import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; import gregtech.api.interfaces.IRecipeMutableAccess; import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gregtech.common.items.CombType; -import gregtech.loaders.misc.GT_Bees; +import gregtech.loaders.misc.GTBees; import gtPlusPlus.api.recipe.GTPPRecipeMaps; import gtPlusPlus.core.item.chemistry.GenericChem; @@ -94,12 +93,12 @@ public class NaquadahReworkRecipeLoader { if (!EnableNaquadahRework) return; // Naquadah (UEV) - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( naquadahEarth.get(OrePrefixes.dust, 32), Materials.Sodium.getDust(64), Materials.Carbon.getDust(1), - GT_Utility.copyAmount(0, GenericChem.mSimpleNaquadahCatalyst)) + GTUtility.copyAmount(0, GenericChem.mSimpleNaquadahCatalyst)) .itemOutputs( inertNaquadah.get(OrePrefixes.dust, 1), Materials.Titanium.getDust(64), @@ -110,29 +109,29 @@ public class NaquadahReworkRecipeLoader { Materials.Fluorine.getGas(64000L), Materials.Oxygen.getGas(100L)) .duration(10 * SECONDS) - .eut(GT_Values.VP[10]) + .eut(GTValues.VP[10]) .metadata(QFT_FOCUS_TIER, 2) .addTo(quantumForceTransformerRecipes); // Enriched Naquadah (UIV) - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( enrichedNaquadahEarth.get(OrePrefixes.dust, 32), Materials.Zinc.getDust(64), Materials.Carbon.getDust(1), - GT_Utility.copyAmount(0, GenericChem.mSimpleNaquadahCatalyst)) + GTUtility.copyAmount(0, GenericChem.mSimpleNaquadahCatalyst)) .itemOutputs(inertEnrichedNaquadah.get(OrePrefixes.dust, 1), Materials.Trinium.getDust(64)) .fluidInputs(Materials.SulfuricAcid.getFluid(16000), Materials.Oxygen.getGas(100L)) .fluidOutputs(wasteLiquid.getFluidOrGas(32000)) .duration(10 * SECONDS) - .eut(GT_Values.VP[11]) + .eut(GTValues.VP[11]) .metadata(QFT_FOCUS_TIER, 2) .addTo(quantumForceTransformerRecipes); // Naquadria (UMV) - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( naquadriaEarth.get(OrePrefixes.dust, 32), Materials.Magnesium.getDust(64), - GT_Utility.copyAmount(0, GenericChem.mAdvancedNaquadahCatalyst)) + GTUtility.copyAmount(0, GenericChem.mAdvancedNaquadahCatalyst)) .itemOutputs( inertNaquadria.get(OrePrefixes.dust, 1), Materials.Barium.getDust(64), @@ -143,13 +142,13 @@ public class NaquadahReworkRecipeLoader { Materials.SulfuricAcid.getFluid(16000), Materials.Oxygen.getGas(100L)) .duration(5 * SECONDS) - .eut(GT_Values.VP[12]) + .eut(GTValues.VP[12]) .metadata(QFT_FOCUS_TIER, 3) .addTo(quantumForceTransformerRecipes); // Activate Them - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(inertNaquadah.get(OrePrefixes.dust, 64), inertNaquadah.get(OrePrefixes.dust, 32)) .itemOutputs(Materials.Nickel.getDust(16)) .fluidInputs(Materials.Nickel.getPlasma(144 * 16)) @@ -159,7 +158,7 @@ public class NaquadahReworkRecipeLoader { .metadata(NKE_RANGE, computeRangeNKE(600, 500)) .noOptimize() .addTo(neutronActivatorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( inertEnrichedNaquadah.get(OrePrefixes.dust, 64), inertEnrichedNaquadah.get(OrePrefixes.dust, 32)) @@ -171,7 +170,7 @@ public class NaquadahReworkRecipeLoader { .metadata(NKE_RANGE, computeRangeNKE(900, 850)) .noOptimize() .addTo(neutronActivatorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(inertNaquadria.get(OrePrefixes.dust, 64), inertNaquadria.get(OrePrefixes.dust, 32)) .itemOutputs(Materials.Americium.getDust(16)) .fluidInputs(Materials.Americium.getPlasma(144 * 16)) @@ -183,7 +182,7 @@ public class NaquadahReworkRecipeLoader { .addTo(neutronActivatorRecipes); // Fix shit - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(lowQualityNaquadriaSolution.get(OrePrefixes.cell, 1)) .itemOutputs(Materials.Tin.getDust(2)) .duration(16 * SECONDS + 14 * TICKS) @@ -191,8 +190,8 @@ public class NaquadahReworkRecipeLoader { .addTo(maceratorRecipes); // Naquadah Rework Line - GT_Values.RA.stdBuilder() - .itemInputs(naquadahEarth.get(OrePrefixes.dust, 2), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(naquadahEarth.get(OrePrefixes.dust, 2), GTUtility.getIntegratedCircuit(1)) .fluidInputs(fluoroantimonicAcid.getFluidOrGas(3000)) .fluidOutputs(lowQualityNaquadahEmulsion.getFluidOrGas(2000)) .itemOutputs(titaniumTrifluoride.get(OrePrefixes.dust, 4)) @@ -202,19 +201,19 @@ public class NaquadahReworkRecipeLoader { .addTo(blastFurnaceRecipes); // TiF3 + 3H = Ti + 3HF - GT_Values.RA.stdBuilder() - .itemInputs(titaniumTrifluoride.get(OrePrefixes.dust, 4), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(titaniumTrifluoride.get(OrePrefixes.dust, 4), GTUtility.getIntegratedCircuit(1)) .fluidInputs(Materials.Hydrogen.getGas(3000)) .fluidOutputs(Materials.HydrofluoricAcid.getFluid(3000)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Titanium, 1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.Titanium, 1)) .duration(6 * SECONDS) .eut(TierEU.RECIPE_EV) .metadata(COIL_HEAT, 2000) .addTo(blastFurnaceRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.copyAmount(0, GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Copper, 1)), + GTUtility.copyAmount(0, GTOreDictUnificator.get(OrePrefixes.plate, Materials.Copper, 1)), Materials.Hydrogen.getCells(8)) .fluidInputs(FluidRegistry.getFluidStack("seedoil", 3000)) .itemOutputs(ItemList.Cell_Empty.get(8)) @@ -224,8 +223,8 @@ public class NaquadahReworkRecipeLoader { .addTo(UniversalChemical); // 2C8H18O + H3PO4 =Na,C2H6O= C16H35O3P + 2H2O - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 2)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 2)) .fluidInputs( towEthyl1Hexanol.getFluidOrGas(2000), Materials.PhosphoricAcid.getFluid(1000), @@ -235,7 +234,7 @@ public class NaquadahReworkRecipeLoader { .eut(TierEU.RECIPE_EV) .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(lowQualityNaquadahSolution.get(OrePrefixes.cell, 36), P507.get(OrePrefixes.cell, 4)) .itemOutputs(naquadahAdamantiumSolution.get(OrePrefixes.cell, 30), ItemList.Cell_Empty.get(10)) .fluidOutputs(fluorineRichWasteLiquid.getFluidOrGas(10000)) @@ -243,15 +242,15 @@ public class NaquadahReworkRecipeLoader { .eut(TierEU.RECIPE_EV) .addTo(chemicalReactorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs(P507.getFluidOrGas(4000), lowQualityNaquadahSolution.getFluidOrGas(36000)) .fluidOutputs(fluorineRichWasteLiquid.getFluidOrGas(10000), naquadahAdamantiumSolution.getFluidOrGas(30000)) .duration(3 * MINUTES + 20 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, 40)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, 40)) .fluidInputs(fluorineRichWasteLiquid.getFluidOrGas(1500)) .fluidOutputs(wasteLiquid.getFluidOrGas(1000)) .itemOutputs(WerkstoffLoader.Fluorspar.get(OrePrefixes.dust, 60)) @@ -263,11 +262,11 @@ public class NaquadahReworkRecipeLoader { wasteLiquid.getFluidOrGas(10000), new FluidStack[] { Materials.SaltWater.getFluid(3000), FluidRegistry.getFluidStack("phenol", 2000), Materials.HydrochloricAcid.getFluid(5000) }, - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 3), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 3), 15 * SECONDS, TierEU.RECIPE_HV); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemOutputs( adamantine.get(OrePrefixes.dust, 4), naquadahEarth.get(OrePrefixes.dust, 2), @@ -280,8 +279,8 @@ public class NaquadahReworkRecipeLoader { .noOptimize() .addTo(neutronActivatorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 27)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 27)) .fluidInputs(naquadahRichSolution.getFluidOrGas(5000)) .itemOutputs(naquadahine.get(OrePrefixes.dust, 30)) .fluidOutputs(P507.getFluidOrGas(1000)) @@ -290,33 +289,33 @@ public class NaquadahReworkRecipeLoader { .addTo(autoclaveRecipes); // NqO2 + C = CO2 + Nq - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( naquadahine.get(OrePrefixes.dust, 3), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1)) .fluidOutputs(Materials.CarbonDioxide.getGas(1000)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Naquadah, 1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.Naquadah, 1)) .duration(2 * SECONDS) .eut(TierEU.RECIPE_IV) .metadata(COIL_HEAT, 5000) .addTo(blastFurnaceRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 27), - GT_Utility.getIntegratedCircuit(1)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 27), + GTUtility.getIntegratedCircuit(1)) .fluidInputs(lowQualityNaquadahEmulsion.getFluidOrGas(10000)) .itemOutputs( galliumHydroxide.get(OrePrefixes.dust, 64), galliumHydroxide.get(OrePrefixes.dust, 48), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Antimony, 15)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Antimony, 15)) .outputChances(6250, 6250, 10000) .fluidOutputs(lowQualityNaquadahSolution.getFluidOrGas(9000)) .duration(50 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(enrichedNaquadahEarth.get(OrePrefixes.dust, 4)) .fluidInputs(P507.getFluidOrGas(1000), Materials.SulfuricAcid.getFluid(18000)) .fluidOutputs(enrichedNaquadahRichSolution.getFluidOrGas(4000), wasteLiquid.getFluidOrGas(1000)) @@ -326,7 +325,7 @@ public class NaquadahReworkRecipeLoader { .addTo(multiblockChemicalReactorRecipes); // ZnSO4 + 2H = H2SO4 + Zn - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(WerkstoffLoader.ZincSulfate.get(OrePrefixes.dust, 6)) .fluidInputs(Materials.Hydrogen.getGas(2000)) .fluidOutputs(Materials.SulfuricAcid.getFluid(1000)) @@ -335,8 +334,8 @@ public class NaquadahReworkRecipeLoader { .eut(TierEU.RECIPE_ULV) .addTo(UniversalChemical); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 60)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 60)) .fluidInputs(enrichedNaquadahRichSolution.getFluidOrGas(10000)) .itemOutputs(concentratedEnrichedNaquadahSludge.get(OrePrefixes.dust, 8)) .fluidOutputs(P507.getFluidOrGas(2500)) @@ -344,7 +343,7 @@ public class NaquadahReworkRecipeLoader { .eut(TierEU.RECIPE_HV) .addTo(autoclaveRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(concentratedEnrichedNaquadahSludge.get(OrePrefixes.dust, 16)) .itemOutputs( enrichedNaquadahSulphate.get(OrePrefixes.dust, 64), @@ -361,12 +360,12 @@ public class NaquadahReworkRecipeLoader { .addTo(neutronActivatorRecipes); // Nq+(SO4)2 + 2Zn = Nq+ + 2ZnSO4 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( enrichedNaquadahSulphate.get(OrePrefixes.dust, 11), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 2)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 2)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.NaquadahEnriched, 1), + GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.NaquadahEnriched, 1), WerkstoffLoader.ZincSulfate.get(OrePrefixes.dust, 12)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_IV) @@ -374,16 +373,16 @@ public class NaquadahReworkRecipeLoader { .addTo(blastFurnaceRecipes); // KeSO4 + 2H = Ke + H2SO4 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(triniumSulphate.get(OrePrefixes.dust, 6)) .fluidInputs(Materials.Hydrogen.getGas(2000)) .fluidOutputs(Materials.SulfuricAcid.getFluid(1000)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Trinium, 1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Trinium, 1)) .duration(6 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(naquadriaEarth.get(OrePrefixes.dust, 4)) .fluidInputs(Materials.PhosphoricAcid.getFluid(4000)) .itemOutputs( @@ -395,38 +394,38 @@ public class NaquadahReworkRecipeLoader { .addTo(centrifugeRecipes); // Ga(OH)3 + 3Na = Ga + 3NaOH - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( galliumHydroxide.get(OrePrefixes.dust, 7), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 3)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 3)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gallium, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 9)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gallium, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 9)) .duration(2 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(UniversalChemical); // 2InPO4 + 3Ca = 2In + Ca3(PO4)2 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( indiumPhosphate.get(OrePrefixes.dust, 12), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 3)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 3)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Indium, 2), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 5)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Indium, 2), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 5)) .duration(1 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(UniversalChemical); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(lowQualityNaquadriaPhosphate.get(OrePrefixes.dust, 10), Materials.SulfuricAcid.getCells(30)) .fluidOutputs(naquadriaRichSolution.getFluidOrGas(9000)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Barite, 1), ItemList.Cell_Empty.get(30)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Barite, 1), ItemList.Cell_Empty.get(30)) .duration(50 * SECONDS) .eut(TierEU.RECIPE_IV) .addTo(UniversalChemical); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemOutputs( naquadriaSulphate.get(OrePrefixes.dust, 44), lowQualityNaquadriaSulphate.get(OrePrefixes.dust, 6)) @@ -437,7 +436,7 @@ public class NaquadahReworkRecipeLoader { .noOptimize() .addTo(neutronActivatorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(lowQualityNaquadriaSulphate.get(OrePrefixes.dust, 3), Materials.Water.getCells(3)) .fluidInputs(P507.getFluidOrGas(500)) .fluidOutputs(lowQualityNaquadriaSolution.getFluidOrGas(3500)) @@ -455,12 +454,12 @@ public class NaquadahReworkRecipeLoader { TierEU.RECIPE_IV); // Nq*(SO4)2 + 2Mg = Nq* + 2MgSO4 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( naquadriaSulphate.get(OrePrefixes.dust, 11), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Naquadria, 1), + GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.Naquadria, 1), magnesiumSulphate.get(OrePrefixes.dust, 12)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_ZPM) @@ -468,17 +467,17 @@ public class NaquadahReworkRecipeLoader { .addTo(blastFurnaceRecipes); // InPO4 + Ga(OH)3 = InGaP - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( indiumPhosphate.get(OrePrefixes.dust, 6), galliumHydroxide.get(OrePrefixes.dust, 7), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.IndiumGalliumPhosphide, 3)) + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.IndiumGalliumPhosphide, 3)) .duration(15 * TICKS) .eut(TierEU.RECIPE_ULV) .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Ball.get(0)) .fluidInputs(naquadahGoo.getFluidOrGas(72)) .itemOutputs(ItemRefer.Naquadah_Mass.get(1)) @@ -486,7 +485,7 @@ public class NaquadahReworkRecipeLoader { .eut(TierEU.RECIPE_LV) .addTo(fluidSolidifierRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Ball.get(0)) .fluidInputs(enrichedNaquadahGoo.getFluidOrGas(72)) .itemOutputs(ItemRefer.Enriched_Naquadah_Mass.get(1)) @@ -494,7 +493,7 @@ public class NaquadahReworkRecipeLoader { .eut(TierEU.RECIPE_LV) .addTo(fluidSolidifierRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Ball.get(0)) .fluidInputs(naquadriaGoo.getFluidOrGas(72)) .itemOutputs(ItemRefer.Naquadria_Mass.get(1)) @@ -502,7 +501,7 @@ public class NaquadahReworkRecipeLoader { .eut(TierEU.RECIPE_LV) .addTo(fluidSolidifierRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.Naquadah_Mass.get(1)) .itemOutputs(naquadahEarth.get(OrePrefixes.dust, 1), enrichedNaquadahEarth.get(OrePrefixes.dust, 1)) .outputChances(10000, 100) @@ -510,7 +509,7 @@ public class NaquadahReworkRecipeLoader { .eut(2) .addTo(maceratorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.Enriched_Naquadah_Mass.get(1)) .itemOutputs(enrichedNaquadahEarth.get(OrePrefixes.dust, 1), naquadriaEarth.get(OrePrefixes.dust, 1)) .outputChances(10000, 100) @@ -518,7 +517,7 @@ public class NaquadahReworkRecipeLoader { .eut(2) .addTo(maceratorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.Naquadria_Mass.get(1)) .itemOutputs(naquadriaEarth.get(OrePrefixes.dust, 1), naquadriaEarth.get(OrePrefixes.dust, 1)) .outputChances(10000, 100) @@ -526,9 +525,9 @@ public class NaquadahReworkRecipeLoader { .eut(2) .addTo(maceratorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.block, Materials.SiliconSG, 16), + GTOreDictUnificator.get(OrePrefixes.block, Materials.SiliconSG, 16), naquadahine.get(OrePrefixes.dust, 3), ItemList.GalliumArsenideCrystal.get(1L)) .fluidInputs(Materials.Argon.getGas(8000)) @@ -539,15 +538,15 @@ public class NaquadahReworkRecipeLoader { .addTo(blastFurnaceRecipes); // NqO2 + 4Na = 2Na2O + Nq - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(naquadahine.get(OrePrefixes.dust, 3), Materials.Sodium.getDust(4)) .itemOutputs(Materials.Naquadah.getDust(1), Materials.SodiumOxide.getDust(6)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(UniversalChemical); - GT_Values.RA.stdBuilder() - .itemInputs(naquadahEarth.get(OrePrefixes.dust, 2), GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(naquadahEarth.get(OrePrefixes.dust, 2), GTUtility.getIntegratedCircuit(2)) .fluidInputs(Materials.Nitrogen.getGas(1000)) .itemOutputs(Materials.Naquadah.getNuggets(1)) .duration(2 * MINUTES) @@ -556,25 +555,25 @@ public class NaquadahReworkRecipeLoader { .addTo(blastFurnaceRecipes); // C2H4 + H2O(g) = C2H6O - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(24)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(24)) .fluidInputs(Materials.Ethylene.getGas(1000), FluidRegistry.getFluidStack("steam", 2000)) .fluidOutputs(Materials.Ethanol.getFluid(1000)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Ethylene.getCells(1), GT_Utility.getIntegratedCircuit(24)) + GTValues.RA.stdBuilder() + .itemInputs(Materials.Ethylene.getCells(1), GTUtility.getIntegratedCircuit(24)) .fluidInputs(FluidRegistry.getFluidStack("steam", 2000)) .itemOutputs(Materials.Ethanol.getCells(1)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(chemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Naquadah, 1)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.Naquadah, 1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 1)) .duration(16 * SECONDS) .eut(TierEU.RECIPE_IV) .addTo(vacuumFreezerRecipes); @@ -582,20 +581,20 @@ public class NaquadahReworkRecipeLoader { public static void SmallRecipeChange() { - GT_Recipe tRecipe; + GTRecipe tRecipe; tRecipe = RecipeMaps.chemicalReactorRecipes.findRecipe( null, false, 1 << 30, new FluidStack[] { Materials.SulfuricAcid.getFluid(500) }, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, 16), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, 16), ItemList.Empty_Board_Elite.get(2)); if (tRecipe != null) { RecipeMaps.chemicalReactorRecipes.getBackend() .removeRecipe(tRecipe); - GT_Recipe tRecipe2 = tRecipe.copy(); - tRecipe2.mInputs = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Naquadah, 8), + GTRecipe tRecipe2 = tRecipe.copy(); + tRecipe2.mInputs = new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.foil, Materials.Naquadah, 8), ItemList.Empty_Board_Elite.get(2) }; RecipeMaps.chemicalReactorRecipes.add(tRecipe2); RecipeMaps.chemicalReactorRecipes.getBackend() @@ -607,13 +606,13 @@ public class NaquadahReworkRecipeLoader { false, 1 << 30, new FluidStack[] { Materials.SulfuricAcid.getFluid(500) }, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, 16), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, 16), ItemList.Empty_Board_Elite.get(2)); if (tRecipe != null) { RecipeMaps.multiblockChemicalReactorRecipes.getBackend() .removeRecipe(tRecipe); - GT_Recipe tRecipe2 = tRecipe.copy(); - tRecipe2.mInputs = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Naquadah, 8), + GTRecipe tRecipe2 = tRecipe.copy(); + tRecipe2.mInputs = new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.foil, Materials.Naquadah, 8), ItemList.Empty_Board_Elite.get(2) }; RecipeMaps.multiblockChemicalReactorRecipes.add(tRecipe2); RecipeMaps.multiblockChemicalReactorRecipes.getBackend() @@ -625,16 +624,16 @@ public class NaquadahReworkRecipeLoader { false, 1 << 30, new FluidStack[] { Materials.Polybenzimidazole.getMolten(36) }, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 2), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.HSSS, 1), - GT_Utility.getIntegratedCircuit(1)); + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 2), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.HSSS, 1), + GTUtility.getIntegratedCircuit(1)); if (tRecipe != null) { RecipeMaps.assemblerRecipes.getBackend() .removeRecipe(tRecipe); - GT_Recipe tRecipe2 = tRecipe.copy(); + GTRecipe tRecipe2 = tRecipe.copy(); tRecipe2.mInputs = new ItemStack[] { - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 2), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.NaquadahEnriched, 1) }; + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 2), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.NaquadahEnriched, 1) }; RecipeMaps.assemblerRecipes.add(tRecipe2); RecipeMaps.assemblerRecipes.getBackend() .reInit(); @@ -645,15 +644,15 @@ public class NaquadahReworkRecipeLoader { if (!EnableNaquadahRework) return; - GT_Log.out.print(GoodGenerator.MOD_ID + ": Begin to remove pure Naquadah, Enriched Naquadah and Naquadria.\n"); + GTLog.out.print(GoodGenerator.MOD_ID + ": Begin to remove pure Naquadah, Enriched Naquadah and Naquadria.\n"); - HashSet remove = new HashSet<>(5000); - HashSet reAdd = new HashSet<>(5000); + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); // For Crusher - for (GT_Recipe recipe : RecipeMaps.maceratorRecipes.getAllRecipes()) { + for (GTRecipe recipe : RecipeMaps.maceratorRecipes.getAllRecipes()) { ItemStack input = recipe.mInputs[0]; - if (GT_Utility.isStackValid(input)) { + if (GTUtility.isStackValid(input)) { int[] oreDict = OreDictionary.getOreIDs(input); for (int oreDictID : oreDict) { if ((OreDictionary.getOreName(oreDictID) @@ -664,22 +663,22 @@ public class NaquadahReworkRecipeLoader { .startsWith("crushed")) && OreDictionary.getOreName(oreDictID) .contains("Naq")) { - GT_Recipe tRecipe = recipe.copy(); + GTRecipe tRecipe = recipe.copy(); boolean modified = false; for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadriaEarth.get(OrePrefixes.dust, 1)); modified = true; @@ -700,39 +699,39 @@ public class NaquadahReworkRecipeLoader { RecipeMaps.maceratorRecipes.getBackend() .reInit(); - GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + GTLog.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); remove.clear(); reAdd.clear(); - GT_Log.out.print("Crusher done!\n"); + GTLog.out.print("Crusher done!\n"); // For Washer - for (GT_Recipe recipe : RecipeMaps.oreWasherRecipes.getAllRecipes()) { + for (GTRecipe recipe : RecipeMaps.oreWasherRecipes.getAllRecipes()) { ItemStack input = recipe.mInputs[0]; - if (GT_Utility.isStackValid(input)) { + if (GTUtility.isStackValid(input)) { int[] oreDict = OreDictionary.getOreIDs(input); for (int oreDictID : oreDict) { if (OreDictionary.getOreName(oreDictID) .startsWith("crushed") && OreDictionary.getOreName(oreDictID) .contains("Naq")) { - GT_Recipe tRecipe = recipe.copy(); + GTRecipe tRecipe = recipe.copy(); boolean modified = false; for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadriaEarth.get(OrePrefixes.dust, 1)); modified = true; @@ -753,39 +752,39 @@ public class NaquadahReworkRecipeLoader { RecipeMaps.oreWasherRecipes.getBackend() .reInit(); - GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + GTLog.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); remove.clear(); reAdd.clear(); - GT_Log.out.print("Washer done!\n"); + GTLog.out.print("Washer done!\n"); // For Thermal Centrifuge - for (GT_Recipe recipe : RecipeMaps.thermalCentrifugeRecipes.getAllRecipes()) { + for (GTRecipe recipe : RecipeMaps.thermalCentrifugeRecipes.getAllRecipes()) { ItemStack input = recipe.mInputs[0]; - if (GT_Utility.isStackValid(input)) { + if (GTUtility.isStackValid(input)) { int[] oreDict = OreDictionary.getOreIDs(input); for (int oreDictID : oreDict) { if (OreDictionary.getOreName(oreDictID) .startsWith("crushed") && OreDictionary.getOreName(oreDictID) .contains("Naq")) { - GT_Recipe tRecipe = recipe.copy(); + GTRecipe tRecipe = recipe.copy(); boolean modified = false; for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadriaEarth.get(OrePrefixes.dust, 1)); modified = true; @@ -806,26 +805,26 @@ public class NaquadahReworkRecipeLoader { RecipeMaps.thermalCentrifugeRecipes.getBackend() .reInit(); - GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + GTLog.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); remove.clear(); reAdd.clear(); - GT_Log.out.print("Thermal Centrifuge done!\n"); + GTLog.out.print("Thermal Centrifuge done!\n"); final boolean checkCombs = Mods.Forestry.isModLoaded(); // For Centrifuge - for (GT_Recipe recipe : RecipeMaps.centrifugeRecipes.getAllRecipes()) { + for (GTRecipe recipe : RecipeMaps.centrifugeRecipes.getAllRecipes()) { ItemStack input = null; if (recipe.mInputs.length > 0) input = recipe.mInputs[0]; - if (GT_Utility.isStackValid(input)) { + if (GTUtility.isStackValid(input)) { int[] oreDict = OreDictionary.getOreIDs(input); - if (checkCombs && input.isItemEqual(GT_Bees.combs.getStackForType(CombType.DOB))) { - GT_Recipe tRecipe = recipe.copy(); + if (checkCombs && input.isItemEqual(GTBees.combs.getStackForType(CombType.DOB))) { + GTRecipe tRecipe = recipe.copy(); boolean modified = false; for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2L, naquadahEarth.get(OrePrefixes.dustTiny, 1)); modified = true; @@ -844,52 +843,52 @@ public class NaquadahReworkRecipeLoader { .startsWith("dustSpace") || OreDictionary.getOreName(oreDictID) .startsWith("dustNaq")) { - GT_Recipe tRecipe = recipe.copy(); + GTRecipe tRecipe = recipe.copy(); boolean modified = false; for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadahEarth.get(OrePrefixes.dustTiny, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, enrichedNaquadahEarth.get(OrePrefixes.dustTiny, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadriaEarth.get(OrePrefixes.dustTiny, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadriaEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustSmall(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadahEarth.get(OrePrefixes.dustSmall, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDustSmall(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, enrichedNaquadahEarth.get(OrePrefixes.dustSmall, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDustSmall(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadriaEarth.get(OrePrefixes.dustSmall, 1)); modified = true; @@ -910,26 +909,26 @@ public class NaquadahReworkRecipeLoader { RecipeMaps.centrifugeRecipes.getBackend() .reInit(); - GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + GTLog.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); remove.clear(); reAdd.clear(); - GT_Log.out.print("Centrifuge done!\n"); + GTLog.out.print("Centrifuge done!\n"); // For Centrifuge (PA) - for (GT_Recipe recipe : RecipeMaps.centrifugeNonCellRecipes.getAllRecipes()) { + for (GTRecipe recipe : RecipeMaps.centrifugeNonCellRecipes.getAllRecipes()) { ItemStack input = null; if (recipe.mInputs.length > 0) input = recipe.mInputs[0]; - if (GT_Utility.isStackValid(input)) { + if (GTUtility.isStackValid(input)) { int[] oreDict = OreDictionary.getOreIDs(input); - if (checkCombs && input.isItemEqual(GT_Bees.combs.getStackForType(CombType.DOB))) { - GT_Recipe tRecipe = recipe.copy(); + if (checkCombs && input.isItemEqual(GTBees.combs.getStackForType(CombType.DOB))) { + GTRecipe tRecipe = recipe.copy(); boolean modified = false; for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2L, naquadahEarth.get(OrePrefixes.dustTiny, 1)); modified = true; @@ -948,52 +947,52 @@ public class NaquadahReworkRecipeLoader { .startsWith("dustSpace") || OreDictionary.getOreName(oreDictID) .startsWith("dustNaq")) { - GT_Recipe tRecipe = recipe.copy(); + GTRecipe tRecipe = recipe.copy(); boolean modified = false; for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadahEarth.get(OrePrefixes.dustTiny, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, enrichedNaquadahEarth.get(OrePrefixes.dustTiny, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDustTiny(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadriaEarth.get(OrePrefixes.dustTiny, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadriaEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDustSmall(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadahEarth.get(OrePrefixes.dustSmall, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDustSmall(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, enrichedNaquadahEarth.get(OrePrefixes.dustSmall, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDustSmall(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadriaEarth.get(OrePrefixes.dustSmall, 1)); modified = true; @@ -1014,39 +1013,39 @@ public class NaquadahReworkRecipeLoader { RecipeMaps.centrifugeNonCellRecipes.getBackend() .reInit(); - GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + GTLog.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); remove.clear(); reAdd.clear(); - GT_Log.out.print("Centrifuge (PA) done!\n"); + GTLog.out.print("Centrifuge (PA) done!\n"); // For Hammer - for (GT_Recipe recipe : RecipeMaps.hammerRecipes.getAllRecipes()) { + for (GTRecipe recipe : RecipeMaps.hammerRecipes.getAllRecipes()) { ItemStack input = recipe.mInputs[0]; - if (GT_Utility.isStackValid(input)) { + if (GTUtility.isStackValid(input)) { int[] oreDict = OreDictionary.getOreIDs(input); for (int oreDictID : oreDict) { if (OreDictionary.getOreName(oreDictID) .startsWith("crushed") && OreDictionary.getOreName(oreDictID) .contains("Naq")) { - GT_Recipe tRecipe = recipe.copy(); + GTRecipe tRecipe = recipe.copy(); boolean modified = false; for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize * 2, naquadriaEarth.get(OrePrefixes.dust, 1)); modified = true; @@ -1067,15 +1066,15 @@ public class NaquadahReworkRecipeLoader { RecipeMaps.hammerRecipes.getBackend() .reInit(); - GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + GTLog.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); remove.clear(); reAdd.clear(); - GT_Log.out.print("Hammer done!\n"); + GTLog.out.print("Hammer done!\n"); // For Chemical Reactor - for (GT_Recipe recipe : RecipeMaps.chemicalReactorRecipes.getAllRecipes()) { + for (GTRecipe recipe : RecipeMaps.chemicalReactorRecipes.getAllRecipes()) { if (recipe.mFluidOutputs == null) continue; boolean isAny = false; for (int i = 0; i < recipe.mFluidOutputs.length; i++) { @@ -1088,7 +1087,7 @@ public class NaquadahReworkRecipeLoader { } } if (!isAny) continue; - GT_Recipe tRecipe = recipe.copy(); + GTRecipe tRecipe = recipe.copy(); boolean modified = false; for (int i = 0; i < recipe.mFluidOutputs.length; i++) { if (recipe.mFluidOutputs[i] == null) continue; @@ -1114,15 +1113,15 @@ public class NaquadahReworkRecipeLoader { RecipeMaps.chemicalReactorRecipes.getBackend() .reInit(); - GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + GTLog.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); remove.clear(); reAdd.clear(); - GT_Log.out.print("Chemical Reactor done!\n"); + GTLog.out.print("Chemical Reactor done!\n"); // For Multi Chemical Reactor - for (GT_Recipe recipe : RecipeMaps.multiblockChemicalReactorRecipes.getAllRecipes()) { + for (GTRecipe recipe : RecipeMaps.multiblockChemicalReactorRecipes.getAllRecipes()) { if (recipe.mFluidOutputs == null) continue; boolean isAny = false; for (int i = 0; i < recipe.mFluidOutputs.length; i++) { @@ -1135,7 +1134,7 @@ public class NaquadahReworkRecipeLoader { } } if (!isAny) continue; - GT_Recipe tRecipe = recipe.copy(); + GTRecipe tRecipe = recipe.copy(); boolean modified = false; for (int i = 0; i < recipe.mFluidOutputs.length; i++) { if (recipe.mFluidOutputs[i] == null) continue; @@ -1161,12 +1160,12 @@ public class NaquadahReworkRecipeLoader { RecipeMaps.multiblockChemicalReactorRecipes.getBackend() .reInit(); - GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + GTLog.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); remove.clear(); reAdd.clear(); - GT_Log.out.print("Multi Chemical Reactor done!\n"); + GTLog.out.print("Multi Chemical Reactor done!\n"); // For Gt++ Multi Centrifuge // Apparently NEI will break down if one modifies the hash list directly. @@ -1177,30 +1176,30 @@ public class NaquadahReworkRecipeLoader { // GTPP_Recipe.GTPP_Recipe_Map.sMultiblockCentrifugeRecipes_GT.reInit(); // For Simple Washer - for (GT_Recipe recipe : GTPPRecipeMaps.simpleWasherRecipes.getAllRecipes()) { + for (GTRecipe recipe : GTPPRecipeMaps.simpleWasherRecipes.getAllRecipes()) { ItemStack input = recipe.mInputs[0]; - if (GT_Utility.isStackValid(input)) { + if (GTUtility.isStackValid(input)) { int[] oreDict = OreDictionary.getOreIDs(input); for (int oreDictID : oreDict) { if (OreDictionary.getOreName(oreDictID) .startsWith("dustImpureNaq") || OreDictionary.getOreName(oreDictID) .startsWith("dustPureNaq")) { - GT_Recipe tRecipe = recipe.copy(); + GTRecipe tRecipe = recipe.copy(); boolean modified = false; for (int i = 0; i < tRecipe.mOutputs.length; i++) { - if (!GT_Utility.isStackValid(tRecipe.mOutputs[i])) continue; + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadah.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility + tRecipe.mOutputs[i] = GTUtility .copyAmount(tRecipe.mOutputs[i].stackSize, naquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.NaquadahEnriched.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility.copyAmount( + tRecipe.mOutputs[i] = GTUtility.copyAmount( tRecipe.mOutputs[i].stackSize, enrichedNaquadahEarth.get(OrePrefixes.dust, 1)); modified = true; } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Naquadria.getDust(1))) { - tRecipe.mOutputs[i] = GT_Utility + tRecipe.mOutputs[i] = GTUtility .copyAmount(tRecipe.mOutputs[i].stackSize, naquadriaEarth.get(OrePrefixes.dust, 1)); modified = true; } @@ -1220,27 +1219,27 @@ public class NaquadahReworkRecipeLoader { GTPPRecipeMaps.simpleWasherRecipes.getBackend() .reInit(); - GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); + GTLog.out.print(GoodGenerator.MOD_ID + ": Replace " + remove.size() + "! "); remove.clear(); reAdd.clear(); - GT_Log.out.print("Simple Washer done!\n"); + GTLog.out.print("Simple Washer done!\n"); // For Cauldron Wash registerCauldronCleaningFor(Materials.Naquadah, naquadahEarth.getBridgeMaterial()); registerCauldronCleaningFor(Materials.NaquadahEnriched, enrichedNaquadahEarth.getBridgeMaterial()); registerCauldronCleaningFor(Materials.Naquadria, naquadriaEarth.getBridgeMaterial()); - GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace 3! "); - GT_Log.out.print("Cauldron Wash done!\n"); + GTLog.out.print(GoodGenerator.MOD_ID + ": Replace 3! "); + GTLog.out.print("Cauldron Wash done!\n"); // For Crafting Table CraftingManager.getInstance() .getRecipeList() .forEach(NaquadahReworkRecipeLoader::replaceInCraftTable); - GT_Log.out.print(GoodGenerator.MOD_ID + ": Replace Unknown! "); - GT_Log.out.print("Crafting Table done!\n"); + GTLog.out.print(GoodGenerator.MOD_ID + ": Replace Unknown! "); + GTLog.out.print("Crafting Table done!\n"); } public static void replaceInCraftTable(Object obj) { @@ -1252,17 +1251,17 @@ public class NaquadahReworkRecipeLoader { Object input = mutableRecipe.gt5u$getRecipeInputs(); - if (GT_Utility.areStacksEqual(result, Materials.Naquadah.getDust(1), true)) { + if (GTUtility.areStacksEqual(result, Materials.Naquadah.getDust(1), true)) { if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Naquadah)) { return; } mutableRecipe.gt5u$setRecipeOutputItem(naquadahEarth.get(OrePrefixes.dust, 2)); - } else if (GT_Utility.areStacksEqual(result, Materials.NaquadahEnriched.getDust(1), true)) { + } else if (GTUtility.areStacksEqual(result, Materials.NaquadahEnriched.getDust(1), true)) { if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.NaquadahEnriched)) { return; } mutableRecipe.gt5u$setRecipeOutputItem(enrichedNaquadahEarth.get(OrePrefixes.dust, 2)); - } else if (GT_Utility.areStacksEqual(result, Materials.Naquadria.getDust(1), true)) { + } else if (GTUtility.areStacksEqual(result, Materials.Naquadria.getDust(1), true)) { if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Naquadria)) { return; } diff --git a/src/main/java/goodgenerator/loader/NeutronActivatorLoader.java b/src/main/java/goodgenerator/loader/NeutronActivatorLoader.java index 6e07c53235..aaba3ac759 100644 --- a/src/main/java/goodgenerator/loader/NeutronActivatorLoader.java +++ b/src/main/java/goodgenerator/loader/NeutronActivatorLoader.java @@ -1,27 +1,27 @@ package goodgenerator.loader; import static goodgenerator.api.recipe.GoodGeneratorRecipeMaps.neutronActivatorRecipes; -import static goodgenerator.items.MyMaterial.plutoniumBasedLiquidFuel; -import static goodgenerator.items.MyMaterial.plutoniumBasedLiquidFuelExcited; -import static goodgenerator.items.MyMaterial.thoriumBasedLiquidFuelDepleted; -import static goodgenerator.items.MyMaterial.thoriumBasedLiquidFuelExcited; -import static goodgenerator.items.MyMaterial.uraniumBasedLiquidFuel; -import static goodgenerator.items.MyMaterial.uraniumBasedLiquidFuelExcited; +import static goodgenerator.items.GGMaterial.plutoniumBasedLiquidFuel; +import static goodgenerator.items.GGMaterial.plutoniumBasedLiquidFuelExcited; +import static goodgenerator.items.GGMaterial.thoriumBasedLiquidFuelDepleted; +import static goodgenerator.items.GGMaterial.thoriumBasedLiquidFuelExcited; +import static goodgenerator.items.GGMaterial.uraniumBasedLiquidFuel; +import static goodgenerator.items.GGMaterial.uraniumBasedLiquidFuelExcited; import static goodgenerator.util.MyRecipeAdder.computeRangeNKE; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.NKE_RANGE; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.NKE_RANGE; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; public class NeutronActivatorLoader { public static void NARecipeLoad() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs(thoriumBasedLiquidFuelExcited.getFluidOrGas(200)) .fluidOutputs(thoriumBasedLiquidFuelDepleted.getFluidOrGas(200)) .duration(8 * MINUTES + 20 * SECONDS) @@ -29,8 +29,8 @@ public class NeutronActivatorLoader { .metadata(NKE_RANGE, computeRangeNKE(700, 500)) .noOptimize() .addTo(neutronActivatorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(0, GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tungsten, 1))) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(0, GTOreDictUnificator.get(OrePrefixes.plate, Materials.Tungsten, 1))) .fluidInputs(uraniumBasedLiquidFuel.getFluidOrGas(100)) .fluidOutputs(uraniumBasedLiquidFuelExcited.getFluidOrGas(100)) .duration(4 * SECONDS) @@ -38,8 +38,8 @@ public class NeutronActivatorLoader { .metadata(NKE_RANGE, computeRangeNKE(550, 450)) .noOptimize() .addTo(neutronActivatorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(0, GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tritanium, 1))) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(0, GTOreDictUnificator.get(OrePrefixes.plate, Materials.Tritanium, 1))) .fluidInputs(plutoniumBasedLiquidFuel.getFluidOrGas(100)) .fluidOutputs(plutoniumBasedLiquidFuelExcited.getFluidOrGas(100)) .duration(4 * SECONDS) diff --git a/src/main/java/goodgenerator/loader/RecipeLoader.java b/src/main/java/goodgenerator/loader/RecipeLoader.java index 261ecc69cc..58afffeee4 100644 --- a/src/main/java/goodgenerator/loader/RecipeLoader.java +++ b/src/main/java/goodgenerator/loader/RecipeLoader.java @@ -14,67 +14,66 @@ import static gregtech.api.recipe.RecipeMaps.implosionRecipes; import static gregtech.api.recipe.RecipeMaps.mixerRecipes; import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.ADDITIVE_AMOUNT; -import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; -import static gregtech.api.util.GT_RecipeConstants.FUSION_THRESHOLD; -import static gregtech.api.util.GT_RecipeConstants.PRECISE_ASSEMBLER_CASING_TIER; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; -import static gregtech.loaders.postload.GT_MachineRecipeLoader.solderingMats; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.ADDITIVE_AMOUNT; +import static gregtech.api.util.GTRecipeConstants.AssemblyLine; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; +import static gregtech.api.util.GTRecipeConstants.FUSION_THRESHOLD; +import static gregtech.api.util.GTRecipeConstants.PRECISE_ASSEMBLER_CASING_TIER; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; +import static gregtech.loaders.postload.MachineRecipeLoader.solderingMats; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - +import bartworks.system.material.WerkstoffLoader; import goodgenerator.api.recipe.GoodGeneratorRecipeMaps; -import goodgenerator.items.MyMaterial; +import goodgenerator.items.GGMaterial; import goodgenerator.util.CrackRecipeAdder; import goodgenerator.util.ItemRefer; import goodgenerator.util.MaterialFix; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.SubTag; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_RecipeConstants; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipeConstants; +import gregtech.api.util.GTUtility; public class RecipeLoader { public static void RecipeLoad() { // Radiation Protection Plate - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Iridium, 8L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 8L), - GT_Utility.getIntegratedCircuit(1)) + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Iridium, 8L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 8L), + GTUtility.getIntegratedCircuit(1)) .fluidInputs(Materials.Lead.getMolten(1152)) .itemOutputs(ItemRefer.Radiation_Protection_Plate.get(1)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lanthanum, 4L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 8L), - GT_Utility.getIntegratedCircuit(1)) + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Lanthanum, 4L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 8L), + GTUtility.getIntegratedCircuit(1)) .fluidInputs(Materials.Lead.getMolten(1152)) .itemOutputs(ItemRefer.Radiation_Protection_Plate.get(1)) .duration(20 * SECONDS) @@ -86,22 +85,22 @@ public class RecipeLoader { : FluidRegistry.getFluid("molten.solderingalloy"); // LNR Controller - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata( RESEARCH_ITEM, ItemList.Generator_Naquadah_Mark_III.get(1) .copy()) .metadata(RESEARCH_TIME, 1 * HOURS + 24 * MINUTES) .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Adamantium, 8), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Adamantium, 8), ItemRefer.Radiation_Protection_Plate.get(16), ItemList.Field_Generator_ZPM.get(2), ItemList.Electric_Pump_ZPM.get(8), new Object[] { OrePrefixes.circuit.get(Materials.UV), 4 }, - GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorLuV, 8), - GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Naquadah, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 8), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Osmium, 16)) + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorLuV, 8), + GTOreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Naquadah, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 8), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Osmium, 16)) .fluidInputs( Materials.Trinium.getMolten(576), new FluidStack(solderIndalloy, 4608), @@ -112,187 +111,187 @@ public class RecipeLoader { .addTo(AssemblyLine); // LNR Casing - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.Radiation_Protection_Plate.get(6), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Europium, 1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Europium, 1), ItemList.Field_Generator_MV.get(1), - GT_Utility.getIntegratedCircuit(1)) + GTUtility.getIntegratedCircuit(1)) .itemOutputs(ItemRefer.Field_Restriction_Casing.get(1)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(assemblerRecipes); // LNR Frame - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.NaquadahAlloy, 8), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.HSSE, 4), - GT_Utility.getIntegratedCircuit(24)) + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.NaquadahAlloy, 8), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.HSSE, 4), + GTUtility.getIntegratedCircuit(24)) .itemOutputs(ItemRefer.Radiation_Proof_Steel_Frame_Box.get(1)) .duration(16 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(assemblerRecipes); // Uranium Liquid Fuel Process Line - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - MyMaterial.graphiteUraniumMixture.get(OrePrefixes.dust, 4), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.TungstenCarbide, 2), - GT_Utility.getIntegratedCircuit(1)) + GGMaterial.graphiteUraniumMixture.get(OrePrefixes.dust, 4), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.TungstenCarbide, 2), + GTUtility.getIntegratedCircuit(1)) .itemOutputs(ItemRefer.Wrapped_Uranium_Ingot.get(1)) .duration(1 * MINUTES + 10 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.Wrapped_Uranium_Ingot.get(4)) .itemOutputs( ItemRefer.High_Density_Uranium_Nugget.get(1), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.TungstenCarbide, 8)) + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.TungstenCarbide, 8)) .duration(1 * SECONDS) .eut(TierEU.RECIPE_LV) .metadata(ADDITIVE_AMOUNT, 8) .addTo(implosionRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.High_Density_Uranium_Nugget.get(9)) .itemOutputs(ItemRefer.High_Density_Uranium.get(1)) .duration(30 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(compressorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.High_Density_Uranium.get(1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 8), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quantium, 4), - GT_Utility.getIntegratedCircuit(1)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 8), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quantium, 4), + GTUtility.getIntegratedCircuit(1)) .fluidInputs(Materials.Radon.getGas(1000L)) - .fluidOutputs(MyMaterial.uraniumBasedLiquidFuel.getFluidOrGas(1000)) + .fluidOutputs(GGMaterial.uraniumBasedLiquidFuel.getFluidOrGas(1000)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_LuV / 2) .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs(MyMaterial.uraniumBasedLiquidFuel.getFluidOrGas(10), Materials.Hydrogen.getGas(100L)) - .fluidOutputs(MyMaterial.uraniumBasedLiquidFuelExcited.getFluidOrGas(10)) + GTValues.RA.stdBuilder() + .fluidInputs(GGMaterial.uraniumBasedLiquidFuel.getFluidOrGas(10), Materials.Hydrogen.getGas(100L)) + .fluidOutputs(GGMaterial.uraniumBasedLiquidFuelExcited.getFluidOrGas(10)) .duration(2 * SECONDS) .eut(TierEU.RECIPE_IV) .metadata(FUSION_THRESHOLD, 200000000) .addTo(fusionRecipes); // Thorium Liquid Process Line - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - MyMaterial.uraniumCarbideThoriumMixture.get(OrePrefixes.dust, 64), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.TungstenSteel, 4), - GT_Utility.getIntegratedCircuit(1)) + GGMaterial.uraniumCarbideThoriumMixture.get(OrePrefixes.dust, 64), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.TungstenSteel, 4), + GTUtility.getIntegratedCircuit(1)) .itemOutputs(ItemRefer.Wrapped_Thorium_Ingot.get(1)) .duration(15 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.Wrapped_Thorium_Ingot.get(1)) .itemOutputs( ItemRefer.High_Density_Thorium_Nugget.get(1), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.TungstenSteel, 8)) + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.TungstenSteel, 8)) .duration(1 * SECONDS) .eut(TierEU.RECIPE_LV) .metadata(ADDITIVE_AMOUNT, 4) .addTo(implosionRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.High_Density_Thorium_Nugget.get(9)) .itemOutputs(ItemRefer.High_Density_Thorium.get(1)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(compressorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.High_Density_Thorium.get(1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 4), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Draconium, 2), - GT_Utility.getIntegratedCircuit(2)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 4), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Draconium, 2), + GTUtility.getIntegratedCircuit(2)) .fluidInputs(Materials.Mercury.getFluid(1000L)) - .fluidOutputs(MyMaterial.thoriumBasedLiquidFuel.getFluidOrGas(4000)) + .fluidOutputs(GGMaterial.thoriumBasedLiquidFuel.getFluidOrGas(4000)) .duration(2 * MINUTES + 30 * SECONDS) .eut(TierEU.RECIPE_HV / 2) .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.thoriumBasedLiquidFuel.get(OrePrefixes.cell, 1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.thoriumBasedLiquidFuel.get(OrePrefixes.cell, 1), GTUtility.getIntegratedCircuit(1)) .fluidInputs(Materials.Helium.getPlasma(250L)) - .itemOutputs(MyMaterial.thoriumBasedLiquidFuelExcited.get(OrePrefixes.cell, 1)) + .itemOutputs(GGMaterial.thoriumBasedLiquidFuelExcited.get(OrePrefixes.cell, 1)) .duration(6 * SECONDS) .eut(TierEU.RECIPE_IV / 2) .addTo(mixerRecipes); // Liquid Plutonium Process Line - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - MyMaterial.plutoniumOxideUraniumMixture.get(OrePrefixes.dust, 8), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.HSSS, 4), - GT_Utility.getIntegratedCircuit(1)) + GGMaterial.plutoniumOxideUraniumMixture.get(OrePrefixes.dust, 8), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.HSSS, 4), + GTUtility.getIntegratedCircuit(1)) .itemOutputs(ItemRefer.Wrapped_Plutonium_Ingot.get(1)) .duration(1 * MINUTES + 30 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.Wrapped_Plutonium_Ingot.get(2)) .itemOutputs( ItemRefer.High_Density_Plutonium_Nugget.get(1), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.HSSS, 8)) + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.HSSS, 8)) .duration(1 * SECONDS) .eut(TierEU.RECIPE_LV) .metadata(ADDITIVE_AMOUNT, 16) .addTo(implosionRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.High_Density_Plutonium_Nugget.get(9)) .itemOutputs(ItemRefer.High_Density_Plutonium.get(1)) .duration(1 * MINUTES) .eut(TierEU.RECIPE_MV) .addTo(compressorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.High_Density_Plutonium.get(1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 8), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Caesium, 16), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 2), - GT_Utility.getIntegratedCircuit(1)) - .fluidOutputs(MyMaterial.plutoniumBasedLiquidFuel.getFluidOrGas(1000)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 8), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Caesium, 16), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 2), + GTUtility.getIntegratedCircuit(1)) + .fluidOutputs(GGMaterial.plutoniumBasedLiquidFuel.getFluidOrGas(1000)) .duration(18 * SECONDS) .eut(TierEU.RECIPE_LuV) .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Lutetium.getMolten(16), MyMaterial.plutoniumBasedLiquidFuel.getFluidOrGas(20)) - .fluidOutputs(MyMaterial.plutoniumBasedLiquidFuelExcited.getFluidOrGas(20)) + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Lutetium.getMolten(16), GGMaterial.plutoniumBasedLiquidFuel.getFluidOrGas(20)) + .fluidOutputs(GGMaterial.plutoniumBasedLiquidFuelExcited.getFluidOrGas(20)) .duration(1 * SECONDS) .eut(TierEU.RECIPE_LuV / 2) .metadata(FUSION_THRESHOLD, 220000000) .addTo(fusionRecipes); // Th-232 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 24), - MyMaterial.vanadiumPentoxide.get(OrePrefixes.dust, 0), - GT_Utility.getIntegratedCircuit(1)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 24), + GGMaterial.vanadiumPentoxide.get(OrePrefixes.dust, 0), + GTUtility.getIntegratedCircuit(1)) .fluidInputs(FluidRegistry.getFluidStack("nitricacid", 6000)) - .fluidOutputs(MyMaterial.oxalate.getFluidOrGas(3000), Materials.NitricOxide.getGas(6000)) + .fluidOutputs(GGMaterial.oxalate.getFluidOrGas(3000), Materials.NitricOxide.getGas(6000)) .duration(30 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(multiblockChemicalReactorRecipes); // Th + 2O = ThO2 - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 1)) .fluidInputs(Materials.Oxygen.getGas(2000)) .itemOutputs(WerkstoffLoader.Thorianit.get(OrePrefixes.dust, 3)) .duration(5 * SECONDS) @@ -301,28 +300,28 @@ public class RecipeLoader { .addTo(blastFurnaceRecipes); // Th + 8HNO3 =HF= Th(NO3)4 + 4NO2 + 4H2O - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(Materials.Thorium.getDust(1)) .fluidInputs(Materials.HydrofluoricAcid.getFluid(100), FluidRegistry.getFluidStack("nitricacid", 8000)) - .fluidOutputs(MyMaterial.thoriumNitrate.getFluidOrGas(1000), Materials.NitrogenDioxide.getGas(4000)) + .fluidOutputs(GGMaterial.thoriumNitrate.getFluidOrGas(1000), Materials.NitrogenDioxide.getGas(4000)) .duration(2 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(multiblockChemicalReactorRecipes); // 4NaOH + Th(NO3)4 = Th(OH)4 + 4NaNO3 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1), Materials.SodiumHydroxide.getDust(12)) - .fluidInputs(MyMaterial.thoriumNitrate.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1), Materials.SodiumHydroxide.getDust(12)) + .fluidInputs(GGMaterial.thoriumNitrate.getFluidOrGas(1000)) .itemOutputs( - MyMaterial.thoriumHydroxide.get(OrePrefixes.dust, 9), + GGMaterial.thoriumHydroxide.get(OrePrefixes.dust, 9), WerkstoffLoader.SodiumNitrate.get(OrePrefixes.dust, 20)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(UniversalChemical); // 2 NaNO3 + H2SO4 = Na2SO4 + 2HNO3 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1), WerkstoffLoader.SodiumNitrate.get(OrePrefixes.dust, 10)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1), WerkstoffLoader.SodiumNitrate.get(OrePrefixes.dust, 10)) .fluidInputs(Materials.SulfuricAcid.getFluid(1000)) .fluidOutputs(Materials.NitricAcid.getFluid(2000)) .itemOutputs(WerkstoffLoader.Sodiumsulfate.get(OrePrefixes.dust, 7)) @@ -331,40 +330,38 @@ public class RecipeLoader { .addTo(UniversalChemical); // Th(OH)4 + 4HF = ThF4 + 4H2O - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.thoriumHydroxide.get(OrePrefixes.dust, 9), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.thoriumHydroxide.get(OrePrefixes.dust, 9), GTUtility.getIntegratedCircuit(1)) .fluidInputs(Materials.HydrofluoricAcid.getFluid(4000)) - .fluidOutputs(MyMaterial.thoriumTetrafluoride.getFluidOrGas(1000)) + .fluidOutputs(GGMaterial.thoriumTetrafluoride.getFluidOrGas(1000)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(UniversalChemical); // Zn + 2Cl = ZnCl2 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1), - GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1), GTUtility.getIntegratedCircuit(1)) .fluidInputs(Materials.Chlorine.getGas(2000)) - .itemOutputs(MyMaterial.zincChloride.get(OrePrefixes.dust, 3)) + .itemOutputs(GGMaterial.zincChloride.get(OrePrefixes.dust, 3)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(UniversalChemical); // ZnCl2 + 3Ca + ThF4 = ZnTh + CaCl2 + 2CaF2 - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.zincChloride.get(OrePrefixes.dust, 3), Materials.Calcium.getDust(3)) - .fluidInputs(MyMaterial.thorium232Tetrafluoride.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.zincChloride.get(OrePrefixes.dust, 3), Materials.Calcium.getDust(3)) + .fluidInputs(GGMaterial.thorium232Tetrafluoride.getFluidOrGas(1000)) .fluidOutputs(WerkstoffLoader.CalciumChloride.getFluidOrGas(3000)) .itemOutputs( - MyMaterial.zincThoriumAlloy.get(OrePrefixes.ingot, 1), + GGMaterial.zincThoriumAlloy.get(OrePrefixes.ingot, 1), WerkstoffLoader.Fluorspar.get(OrePrefixes.dust, 6)) .duration(15 * SECONDS) .eut(TierEU.RECIPE_MV) .metadata(COIL_HEAT, 3000) .addTo(blastFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.zincThoriumAlloy.get(OrePrefixes.ingot, 1), GT_Utility.getIntegratedCircuit(11)) + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.zincThoriumAlloy.get(OrePrefixes.ingot, 1), GTUtility.getIntegratedCircuit(11)) .fluidInputs(Materials.Argon.getGas(250)) .fluidOutputs(Materials.Zinc.getMolten(144)) .itemOutputs(WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 1)) @@ -374,30 +371,30 @@ public class RecipeLoader { .addTo(blastFurnaceRecipes); // 2V + 5O = V2O5 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 2), - GT_Utility.getIntegratedCircuit(24)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 2), + GTUtility.getIntegratedCircuit(24)) .fluidInputs(Materials.Oxygen.getGas(5000)) - .itemOutputs(MyMaterial.vanadiumPentoxide.get(OrePrefixes.dust, 7)) + .itemOutputs(GGMaterial.vanadiumPentoxide.get(OrePrefixes.dust, 7)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_MV) .metadata(COIL_HEAT, 2500) .addTo(blastFurnaceRecipes); // Atomic Separation Catalyst - ItemStack[] mat1 = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 32), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Firestone, 4) }; - ItemStack[] mat2 = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Draconium, 4), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quantium, 4), }; - ItemStack[] mat3 = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ardite, 4), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Manyullyn, 4) }; + ItemStack[] mat1 = new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 32), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Firestone, 4) }; + ItemStack[] mat2 = new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.dust, Materials.Draconium, 4), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quantium, 4), }; + ItemStack[] mat3 = new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ardite, 4), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Manyullyn, 4) }; for (ItemStack m1 : mat1) { for (ItemStack m2 : mat2) { for (ItemStack m3 : mat3) { - GT_Values.RA.stdBuilder() - .itemInputs(m1, m2, m3, GT_Utility.getIntegratedCircuit(4)) + GTValues.RA.stdBuilder() + .itemInputs(m1, m2, m3, GTUtility.getIntegratedCircuit(4)) .fluidInputs(Materials.Naquadah.getMolten(288)) .itemOutputs(ItemRefer.Raw_Atomic_Separation_Catalyst.get(63)) .duration(15 * SECONDS) @@ -407,284 +404,284 @@ public class RecipeLoader { } } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( WerkstoffLoader.Tiberium.get(OrePrefixes.plate, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Silicon, 8)) - .itemOutputs(MyMaterial.orundum.get(OrePrefixes.plate, 1)) + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Silicon, 8)) + .itemOutputs(GGMaterial.orundum.get(OrePrefixes.plate, 1)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_IV / 2) .addTo(formingPressRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.orundum.get(OrePrefixes.plate, 2), ItemRefer.Raw_Atomic_Separation_Catalyst.get(4)) + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.orundum.get(OrePrefixes.plate, 2), ItemRefer.Raw_Atomic_Separation_Catalyst.get(4)) .fluidInputs(Materials.Plutonium.getMolten(144)) - .itemOutputs(MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.ingotHot, 1)) + .itemOutputs(GGMaterial.atomicSeparationCatalyst.get(OrePrefixes.ingotHot, 1)) .duration(3 * MINUTES) .eut(TierEU.RECIPE_HV) .metadata(COIL_HEAT, 5000) .addTo(blastFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.ingotHot, 1)) - .itemOutputs(MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.ingot, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.atomicSeparationCatalyst.get(OrePrefixes.ingotHot, 1)) + .itemOutputs(GGMaterial.atomicSeparationCatalyst.get(OrePrefixes.ingot, 1)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_LuV) .addTo(vacuumFreezerRecipes); CrackRecipeAdder.crackerAdder( - MyMaterial.naquadahGas.getFluidOrGas(1000), - MyMaterial.atomicSeparationCatalyst.getMolten(4), + GGMaterial.naquadahGas.getFluidOrGas(1000), + GGMaterial.atomicSeparationCatalyst.getMolten(4), new FluidStack[] { Materials.Helium.getGas(300), WerkstoffLoader.Neon.getFluidOrGas(50), Materials.Argon.getGas(80), WerkstoffLoader.Krypton.getFluidOrGas(20), WerkstoffLoader.Xenon.getFluidOrGas(40), Materials.Radon.getGas(14000) }, - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadah, 1), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadah, 1), 6, 4020, 300); CrackRecipeAdder.crackerAdder( - MyMaterial.lightNaquadahFuel.getFluidOrGas(1000), - MyMaterial.atomicSeparationCatalyst.getMolten(4), - new FluidStack[] { Materials.Radon.getGas(1400), MyMaterial.naquadahGas.getFluidOrGas(400), - Materials.Uranium.getMolten(648), MyMaterial.heavyNaquadahFuel.getFluidOrGas(280), - Materials.Plutonium.getMolten(576), MyMaterial.naquadahAsphalt.getFluidOrGas(140) }, - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium235, 1), + GGMaterial.lightNaquadahFuel.getFluidOrGas(1000), + GGMaterial.atomicSeparationCatalyst.getMolten(4), + new FluidStack[] { Materials.Radon.getGas(1400), GGMaterial.naquadahGas.getFluidOrGas(400), + Materials.Uranium.getMolten(648), GGMaterial.heavyNaquadahFuel.getFluidOrGas(280), + Materials.Plutonium.getMolten(576), GGMaterial.naquadahAsphalt.getFluidOrGas(140) }, + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium235, 1), 6, 4020, 450); CrackRecipeAdder.crackerAdder( - MyMaterial.heavyNaquadahFuel.getFluidOrGas(1000), - MyMaterial.atomicSeparationCatalyst.getMolten(6), - new FluidStack[] { Materials.Radon.getGas(1000), MyMaterial.naquadahGas.getFluidOrGas(450), - MyMaterial.lightNaquadahFuel.getFluidOrGas(560), Materials.Uranium.getMolten(720), - Materials.Lutetium.getMolten(648), MyMaterial.naquadahAsphalt.getFluidOrGas(240) }, - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1), + GGMaterial.heavyNaquadahFuel.getFluidOrGas(1000), + GGMaterial.atomicSeparationCatalyst.getMolten(6), + new FluidStack[] { Materials.Radon.getGas(1000), GGMaterial.naquadahGas.getFluidOrGas(450), + GGMaterial.lightNaquadahFuel.getFluidOrGas(560), Materials.Uranium.getMolten(720), + Materials.Lutetium.getMolten(648), GGMaterial.naquadahAsphalt.getFluidOrGas(240) }, + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1), 6, 4020, 500); CrackRecipeAdder.crackerAdder( - MyMaterial.naquadahAsphalt.getFluidOrGas(1000), - MyMaterial.atomicSeparationCatalyst.getMolten(12), - new FluidStack[] { MyMaterial.lightNaquadahFuel.getFluidOrGas(600), Materials.Uranium.getMolten(1152), + GGMaterial.naquadahAsphalt.getFluidOrGas(1000), + GGMaterial.atomicSeparationCatalyst.getMolten(12), + new FluidStack[] { GGMaterial.lightNaquadahFuel.getFluidOrGas(600), Materials.Uranium.getMolten(1152), Materials.Thorium.getMolten(864), Materials.Plutonium.getMolten(792), Materials.Thulium.getMolten(216), - MyMaterial.heavyNaquadahFuel.getFluidOrGas(350) }, - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadria, 1), + GGMaterial.heavyNaquadahFuel.getFluidOrGas(350) }, + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadria, 1), 6, 4020, 800); // 2C2H6O =H2SO4= C4H10O + H2O - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(2)) .fluidInputs(Materials.Ethanol.getFluid(1000), Materials.SulfuricAcid.getFluid(1000)) - .fluidOutputs(MyMaterial.ether.getFluidOrGas(500), Materials.DilutedSulfuricAcid.getFluid(1500)) + .fluidOutputs(GGMaterial.ether.getFluidOrGas(500), Materials.DilutedSulfuricAcid.getFluid(1500)) .duration(25 * SECONDS + 10 * TICKS) .eut(TierEU.RECIPE_MV) .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(Materials.GasolineRaw.getCells(9), Materials.Ethanol.getCells(1)) - .itemOutputs(MyMaterial.ethanolGasoline.get(OrePrefixes.cell, 10)) + .itemOutputs(GGMaterial.ethanolGasoline.get(OrePrefixes.cell, 10)) .duration(15 * TICKS) .eut(TierEU.RECIPE_MV) .addTo(UniversalChemical); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.ether.get(OrePrefixes.cell)) + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.ether.get(OrePrefixes.cell)) .metadata(FUEL_VALUE, 537) .metadata(FUEL_TYPE, 0) - .addTo(GT_RecipeConstants.Fuel); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.ether.get(OrePrefixes.cell)) + .addTo(GTRecipeConstants.Fuel); + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.ether.get(OrePrefixes.cell)) .metadata(FUEL_VALUE, 537) .metadata(FUEL_TYPE, 1) - .addTo(GT_RecipeConstants.Fuel); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.ethanolGasoline.get(OrePrefixes.cell)) + .addTo(GTRecipeConstants.Fuel); + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.ethanolGasoline.get(OrePrefixes.cell)) .metadata(FUEL_VALUE, 1100) .metadata(FUEL_TYPE, 0) - .addTo(GT_RecipeConstants.Fuel); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.cyclopentadiene.get(OrePrefixes.cell)) + .addTo(GTRecipeConstants.Fuel); + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.cyclopentadiene.get(OrePrefixes.cell)) .metadata(FUEL_VALUE, 70) .metadata(FUEL_TYPE, 1) - .addTo(GT_RecipeConstants.Fuel); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.ironedFuel.get(OrePrefixes.cell)) + .addTo(GTRecipeConstants.Fuel); + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.ironedFuel.get(OrePrefixes.cell)) .metadata(FUEL_VALUE, 2248) .metadata(FUEL_TYPE, 0) - .addTo(GT_RecipeConstants.Fuel); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.ironedKerosene.get(OrePrefixes.cell)) + .addTo(GTRecipeConstants.Fuel); + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.ironedKerosene.get(OrePrefixes.cell)) .metadata(FUEL_VALUE, 1824) .metadata(FUEL_TYPE, 0) - .addTo(GT_RecipeConstants.Fuel); + .addTo(GTRecipeConstants.Fuel); // Sb + 3Cl = SbCl3 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Antimony, 1)) - .fluidInputs(MyMaterial.ether.getFluidOrGas(1000), Materials.Chlorine.getGas(3000)) - .fluidOutputs(MyMaterial.antimonyTrichloride.getFluidOrGas(1000)) + GTUtility.getIntegratedCircuit(1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Antimony, 1)) + .fluidInputs(GGMaterial.ether.getFluidOrGas(1000), Materials.Chlorine.getGas(3000)) + .fluidOutputs(GGMaterial.antimonyTrichloride.getFluidOrGas(1000)) .duration(3 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(multiblockChemicalReactorRecipes); // SbCl3 + 2Cl = SbCl5 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.antimonyTrichloride.getFluidOrGas(1000), Materials.Chlorine.getGas(2000)) - .fluidOutputs(MyMaterial.antimonyPentachlorideSolution.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.antimonyTrichloride.getFluidOrGas(1000), Materials.Chlorine.getGas(2000)) + .fluidOutputs(GGMaterial.antimonyPentachlorideSolution.getFluidOrGas(1000)) .duration(9 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(multiblockChemicalReactorRecipes); CrackRecipeAdder.addUniversalDistillationRecipe( - MyMaterial.antimonyPentachlorideSolution.getFluidOrGas(1000), - new FluidStack[] { MyMaterial.ether.getFluidOrGas(1000), - MyMaterial.antimonyPentachloride.getFluidOrGas(1000) }, - GT_Values.NI, + GGMaterial.antimonyPentachlorideSolution.getFluidOrGas(1000), + new FluidStack[] { GGMaterial.ether.getFluidOrGas(1000), + GGMaterial.antimonyPentachloride.getFluidOrGas(1000) }, + GTValues.NI, 30 * SECONDS, TierEU.RECIPE_MV); // SbCl5 + 5HF = SbF5 + 5HCl - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) .fluidInputs( - MyMaterial.antimonyPentachloride.getFluidOrGas(1000), + GGMaterial.antimonyPentachloride.getFluidOrGas(1000), Materials.HydrofluoricAcid.getFluid(5000)) .fluidOutputs( - MyMaterial.antimonyPentafluoride.getFluidOrGas(1000), + GGMaterial.antimonyPentafluoride.getFluidOrGas(1000), Materials.HydrochloricAcid.getFluid(5000)) .duration(21 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(multiblockChemicalReactorRecipes); // SbH5 + HF = HSbF6 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) .fluidInputs( - MyMaterial.antimonyPentafluoride.getFluidOrGas(1000), + GGMaterial.antimonyPentafluoride.getFluidOrGas(1000), Materials.HydrofluoricAcid.getFluid(1000)) - .fluidOutputs(MyMaterial.fluoroantimonicAcid.getFluidOrGas(1000)) + .fluidOutputs(GGMaterial.fluoroantimonicAcid.getFluidOrGas(1000)) .duration(42 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 16), - GT_Utility.getIntegratedCircuit(16)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 16), + GTUtility.getIntegratedCircuit(16)) .fluidInputs(Materials.HydrofluoricAcid.getFluid(3000)) - .fluidOutputs(MyMaterial.acidNaquadahEmulsion.getFluidOrGas(2000)) - .itemOutputs(MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 3)) + .fluidOutputs(GGMaterial.acidNaquadahEmulsion.getFluidOrGas(2000)) + .itemOutputs(GGMaterial.radioactiveSludge.get(OrePrefixes.dust, 3)) .duration(3 * MINUTES) .eut(TierEU.RECIPE_EV) .metadata(COIL_HEAT, 3400) .addTo(blastFurnaceRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(3), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, 8)) - .fluidInputs(MyMaterial.acidNaquadahEmulsion.getFluidOrGas(1000)) - .fluidOutputs(MyMaterial.naquadahEmulsion.getFluidOrGas(1000)) + GTUtility.getIntegratedCircuit(3), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, 8)) + .fluidInputs(GGMaterial.acidNaquadahEmulsion.getFluidOrGas(1000)) + .fluidOutputs(GGMaterial.naquadahEmulsion.getFluidOrGas(1000)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.AntimonyTrioxide, 1), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.AntimonyTrioxide, 1), WerkstoffLoader.Fluorspar.get(OrePrefixes.dust, 4)) .duration(12 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(multiblockChemicalReactorRecipes); CrackRecipeAdder.addUniversalDistillationRecipe( - MyMaterial.naquadahSolution.getFluidOrGas(20), - new FluidStack[] { MyMaterial.naquadahAsphalt.getFluidOrGas(2), - MyMaterial.heavyNaquadahFuel.getFluidOrGas(5), MyMaterial.lightNaquadahFuel.getFluidOrGas(10), - FluidRegistry.getFluidStack("water", 10), MyMaterial.naquadahGas.getFluidOrGas(60) }, - GT_Values.NI, + GGMaterial.naquadahSolution.getFluidOrGas(20), + new FluidStack[] { GGMaterial.naquadahAsphalt.getFluidOrGas(2), + GGMaterial.heavyNaquadahFuel.getFluidOrGas(5), GGMaterial.lightNaquadahFuel.getFluidOrGas(10), + FluidRegistry.getFluidStack("water", 10), GGMaterial.naquadahGas.getFluidOrGas(60) }, + GTValues.NI, 1 * SECONDS, TierEU.RECIPE_EV); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.naquadahGas.get(OrePrefixes.cell)) + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.naquadahGas.get(OrePrefixes.cell)) .metadata(FUEL_VALUE, 1024) .metadata(FUEL_TYPE, 1) - .addTo(GT_RecipeConstants.Fuel); + .addTo(GTRecipeConstants.Fuel); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs( - MyMaterial.lightNaquadahFuel.getFluidOrGas(780), - MyMaterial.heavyNaquadahFuel.getFluidOrGas(360)) - .fluidOutputs(MyMaterial.naquadahBasedFuelMkI.getFluidOrGas(100)) + GGMaterial.lightNaquadahFuel.getFluidOrGas(780), + GGMaterial.heavyNaquadahFuel.getFluidOrGas(360)) + .fluidOutputs(GGMaterial.naquadahBasedFuelMkI.getFluidOrGas(100)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LuV) .metadata(FUSION_THRESHOLD, 320000000) .addTo(fusionRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherStar, 4), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.ElectrumFlux, 32)) - .fluidInputs(MyMaterial.naquadahBasedFuelMkI.getFluidOrGas(100), MyMaterial.naquadahGas.getFluidOrGas(1500)) - .fluidOutputs(MyMaterial.naquadahBasedFuelMkII.getFluidOrGas(100)) + GTUtility.getIntegratedCircuit(1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherStar, 4), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.ElectrumFlux, 32)) + .fluidInputs(GGMaterial.naquadahBasedFuelMkI.getFluidOrGas(100), GGMaterial.naquadahGas.getFluidOrGas(1500)) + .fluidOutputs(GGMaterial.naquadahBasedFuelMkII.getFluidOrGas(100)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_UHV / 2) .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 32), - GT_Utility.getIntegratedCircuit(16)) - .fluidInputs(MyMaterial.fluoroantimonicAcid.getFluidOrGas(4000)) - .fluidOutputs(MyMaterial.acidNaquadahEmulsion.getFluidOrGas(8000)) - .itemOutputs(MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 17)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 32), + GTUtility.getIntegratedCircuit(16)) + .fluidInputs(GGMaterial.fluoroantimonicAcid.getFluidOrGas(4000)) + .fluidOutputs(GGMaterial.acidNaquadahEmulsion.getFluidOrGas(8000)) + .itemOutputs(GGMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 17)) .duration(3 * MINUTES) .eut(TierEU.RECIPE_IV / 2) .metadata(COIL_HEAT, 3400) .addTo(blastFurnaceRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata( RESEARCH_ITEM, ItemList.Generator_Naquadah_Mark_V.get(1) .copy()) .metadata(RESEARCH_TIME, 7 * HOURS) .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmiridium, 8), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmiridium, 8), ItemRefer.Advanced_Radiation_Protection_Plate.get(64), ItemList.Field_Generator_UV.get(8), ItemList.Electric_Pump_UHV.get(2), new Object[] { OrePrefixes.circuit.get(Materials.UEV), 4 }, - GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.MysteriousCrystal, 8), + GTOreDictUnificator.get(OrePrefixes.pipeHuge, Materials.MysteriousCrystal, 8), ItemList.Circuit_Wafer_NPIC.get(16), ItemList.UHV_Coil.get(64), new Object[] { "craftingLensYellow", 16 }, - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Thulium, 64)) + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Thulium, 64)) .fluidInputs( Materials.Quantium.getMolten(9216L), Materials.DraconiumAwakened.getMolten(4608L), - MyMaterial.extremelyUnstableNaquadah.getMolten(1440), + GGMaterial.extremelyUnstableNaquadah.getMolten(1440), new FluidStack(solderIndalloy, 14400)) .itemOutputs(ItemRefer.Naquadah_Fuel_Refinery.get(1)) .eut(TierEU.RECIPE_UHV) .duration(30 * MINUTES) .addTo(AssemblyLine); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, ItemRefer.Radiation_Protection_Plate.get(1)) .metadata(RESEARCH_TIME, 1 * HOURS + 7 * MINUTES) .itemInputs( ItemRefer.Radiation_Protection_Plate.get(1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.ElectrumFlux, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Trinium, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.VibrantAlloy, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.ElectrumFlux, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Trinium, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.VibrantAlloy, 4), ItemRefer.Radiation_Protection_Plate.get(1)) .fluidInputs(new FluidStack(solderIndalloy, 1152)) .itemOutputs(ItemRefer.Advanced_Radiation_Protection_Plate.get(1)) @@ -692,19 +689,19 @@ public class RecipeLoader { .duration(50 * SECONDS) .addTo(AssemblyLine); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, ItemRefer.Field_Restriction_Casing.get(1)) .metadata(RESEARCH_TIME, 3 * HOURS + 30 * MINUTES) .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Thulium, 1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Thulium, 1), ItemRefer.Advanced_Radiation_Protection_Plate.get(6), ItemList.Field_Generator_IV.get(2), - GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Naquadah, 16), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.NaquadahAlloy, 32), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.NaquadahAlloy, 32), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Manyullyn, 32), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Manyullyn, 32), - MyMaterial.orundum.get(OrePrefixes.plate, 4)) + GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Naquadah, 16), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.NaquadahAlloy, 32), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.NaquadahAlloy, 32), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Manyullyn, 32), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Manyullyn, 32), + GGMaterial.orundum.get(OrePrefixes.plate, 4)) .fluidInputs(Materials.TungstenSteel.getMolten(1152), new FluidStack(solderIndalloy, 2304)) .itemOutputs(ItemRefer.Naquadah_Fuel_Refinery_Casing.get(1)) .eut(TierEU.RECIPE_ZPM / 2) @@ -712,17 +709,17 @@ public class RecipeLoader { .addTo(AssemblyLine); if (NewHorizonsCoreMod.isModLoaded()) { - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingot)) + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, GGMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingot)) .metadata(RESEARCH_TIME, 4 * HOURS + 10 * MINUTES) .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmium, 1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmium, 1), ItemList.Field_Generator_UV.get(2), ItemList.Electric_Pump_UV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 64), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 64), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Americium, 8), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.BlackPlutonium, 16), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 64), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 64), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Americium, 8), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.BlackPlutonium, 16), ItemList.Circuit_Wafer_PPIC.get(32), new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }) .fluidInputs( @@ -734,17 +731,17 @@ public class RecipeLoader { .duration(15 * MINUTES) .addTo(AssemblyLine); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, ItemRefer.Field_Restriction_Coil_T1.get(1)) .metadata(RESEARCH_TIME, 4 * HOURS + 50 * MINUTES) .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1), ItemList.Field_Generator_UHV.get(2), ItemList.Electric_Pump_UHV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUV, 64), - GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUV, 64), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 8), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Neutronium, 16), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUV, 64), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUV, 64), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 8), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Neutronium, 16), ItemList.Circuit_Wafer_PPIC.get(48), new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }) .fluidInputs( @@ -756,17 +753,17 @@ public class RecipeLoader { .duration(30 * MINUTES) .addTo(AssemblyLine); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, ItemRefer.Field_Restriction_Coil_T2.get(1)) .metadata(RESEARCH_TIME, 5 * HOURS + 30 * MINUTES) .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), ItemList.Field_Generator_UEV.get(2), ItemList.Electric_Pump_UEV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 64), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 64), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 8), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Infinity, 16), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 64), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 64), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 8), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Infinity, 16), ItemList.Circuit_Wafer_PPIC.get(64), new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }) .fluidInputs( @@ -778,21 +775,21 @@ public class RecipeLoader { .duration(1 * HOURS) .addTo(AssemblyLine); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, ItemRefer.Field_Restriction_Coil_T3.get(1)) .metadata(RESEARCH_TIME, 7 * HOURS) .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1), + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1), ItemList.Field_Generator_UIV.get(2), ItemList.Electric_Pump_UIV.get(8), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 64), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 64), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 8), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, MaterialsUEVplus.SpaceTime, 16), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 64), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 64), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 8), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, MaterialsUEVplus.SpaceTime, 16), ItemList.Circuit_Wafer_PPIC.get(64), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 1)) + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 1)) .fluidInputs( - MyMaterial.metastableOganesson.getMolten(1000), + GGMaterial.metastableOganesson.getMolten(1000), MaterialsUEVplus.TranscendentMetal.getMolten(9216), Materials.Lubricant.getFluid(128000)) .itemOutputs(ItemRefer.Field_Restriction_Coil_T4.get(1)) @@ -801,13 +798,13 @@ public class RecipeLoader { .addTo(AssemblyLine); } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BorosilicateGlass, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.ReinforceGlass, 6), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.NaquadahAlloy, 32), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BorosilicateGlass, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.ReinforceGlass, 6), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.NaquadahAlloy, 32), ItemList.Field_Generator_HV.get(4), - GT_Utility.getIntegratedCircuit(6)) + GTUtility.getIntegratedCircuit(6)) .fluidInputs(Materials.Naquadria.getMolten(288)) .itemOutputs(ItemRefer.Field_Restriction_Glass.get(1)) .duration(15 * SECONDS) @@ -815,94 +812,94 @@ public class RecipeLoader { .addTo(assemblerRecipes); // Ca + O = CaO - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1)) + GTUtility.getIntegratedCircuit(1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1)) .fluidInputs(Materials.Oxygen.getGas(1000)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, 2)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, 2)) .duration(10 * TICKS) .eut(TierEU.RECIPE_LV) .addTo(UniversalChemical); // AlN = Al + N - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.Aluminum_Nitride_Dust.get(2)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1)) .fluidOutputs(Materials.Nitrogen.getGas(1000L)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(electrolyzerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.Aluminum_Nitride_Dust.get(4), WerkstoffLoader.YttriumOxide.get(OrePrefixes.dust, 5), - GT_Utility.getIntegratedCircuit(9)) + GTUtility.getIntegratedCircuit(9)) .fluidInputs(FluidRegistry.getFluidStack("advancedglue", 1000)) .itemOutputs(ItemRefer.Special_Ceramics_Dust.get(9)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.Aluminum_Nitride_Dust.get(4), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uraninite, 5), - GT_Utility.getIntegratedCircuit(9)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uraninite, 5), + GTUtility.getIntegratedCircuit(9)) .fluidInputs(FluidRegistry.getFluidStack("advancedglue", 1000)) .itemOutputs(ItemRefer.Special_Ceramics_Dust.get(9)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.Special_Ceramics_Dust.get(2), ItemList.Shape_Extruder_Plate.get(0L)) .itemOutputs(ItemRefer.Special_Ceramics_Plate.get(1)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(extruderRecipes); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( ItemRefer.Raw_Cylinder.get(1), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, new Object[] { "PPP", "PFP", "PPP", 'P', ItemRefer.Special_Ceramics_Plate.get(1), 'F', - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1) }); + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1) }); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.Raw_Cylinder.get(1), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Titanium, 1), - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Titanium, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6), - GT_Utility.getIntegratedCircuit(4)) + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Titanium, 1), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Titanium, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6), + GTUtility.getIntegratedCircuit(4)) .itemOutputs(ItemRefer.Titanium_Plated_Cylinder.get(1)) .duration(15 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(16), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2)) + GTUtility.getIntegratedCircuit(16), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2)) .fluidInputs(FluidRegistry.getFluidStack("liquidoxygen", 1000), Materials.NitrogenDioxide.getGas(1000)) .fluidOutputs(FluidRegistry.getFluidStack("combustionpromotor", 500)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(16), WerkstoffLoader.SodiumNitrate.get(OrePrefixes.dust, 2)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(16), WerkstoffLoader.SodiumNitrate.get(OrePrefixes.dust, 2)) .fluidInputs(FluidRegistry.getFluidStack("liquidoxygen", 1000), Materials.NitrogenDioxide.getGas(1000)) .fluidOutputs(FluidRegistry.getFluidStack("combustionpromotor", 500)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(16), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2)) + GTUtility.getIntegratedCircuit(16), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2)) .fluidInputs( FluidRegistry.getFluidStack("fluid.hydrogenperoxide", 1000), Materials.NitrogenDioxide.getGas(1000)) @@ -910,8 +907,8 @@ public class RecipeLoader { .duration(10 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(multiblockChemicalReactorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(16), WerkstoffLoader.SodiumNitrate.get(OrePrefixes.dust, 2)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(16), WerkstoffLoader.SodiumNitrate.get(OrePrefixes.dust, 2)) .fluidInputs( FluidRegistry.getFluidStack("fluid.hydrogenperoxide", 1000), Materials.NitrogenDioxide.getGas(1000)) @@ -920,45 +917,45 @@ public class RecipeLoader { .eut(TierEU.RECIPE_MV) .addTo(multiblockChemicalReactorRecipes); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( ItemRefer.Universal_Chemical_Fuel_Engine.get(1), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, new Object[] { "TZT", "ALB", "WGW", 'T', - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 1), 'Z', "circuitUltimate", 'A', + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 1), 'Z', "circuitUltimate", 'A', ItemList.Machine_Multi_DieselEngine.get(1), 'B', ItemList.Machine_Multi_ExtremeDieselEngine.get(1), 'L', - ItemList.Hull_LuV, 'W', GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 1), 'G', - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Osmium, 1), }); + ItemList.Hull_LuV, 'W', GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 1), 'G', + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Osmium, 1), }); // neutron activator - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.PolyvinylChloride, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Plastic, 4), - GT_Utility.getIntegratedCircuit(8)) + GTOreDictUnificator.get(OrePrefixes.stick, Materials.PolyvinylChloride, 4), + GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.Plastic, 4), + GTUtility.getIntegratedCircuit(8)) .fluidInputs(FluidRegistry.getFluidStack("dye.chemical.dyecyan", 144)) .itemOutputs(ItemRefer.Plastic_Case.get(1)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.PolyvinylChloride, 4), - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Plastic, 4), - GT_Utility.getIntegratedCircuit(8)) + GTOreDictUnificator.get(OrePrefixes.stick, Materials.PolyvinylChloride, 4), + GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.Plastic, 4), + GTUtility.getIntegratedCircuit(8)) .fluidInputs(FluidRegistry.getFluidStack("dye.watermixed.dyecyan", 144)) .itemOutputs(ItemRefer.Plastic_Case.get(1)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(assemblerRecipes); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( ItemRefer.Plastic_Case.get(1), new Object[] { "PCP", "CDC", "PCP", 'P', - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.PolyvinylChloride, 1), 'C', - GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Plastic, 1), 'D', "dyeCyan" }); + GTOreDictUnificator.get(OrePrefixes.stick, Materials.PolyvinylChloride, 1), 'C', + GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.Plastic, 1), 'D', "dyeCyan" }); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemList.Circuit_Board_Coated_Basic.get(1), ItemList.Circuit_Chip_ULPIC.get(1), @@ -972,10 +969,10 @@ public class RecipeLoader { .noOptimize() .addTo(GoodGeneratorRecipeMaps.preciseAssemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Quartzite, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 4)) + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Quartzite, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 4)) .fluidInputs(Materials.Water.getFluid(1000)) .itemOutputs(ItemRefer.Quartz_Wafer.get(1)) .outputChances(3333) @@ -984,10 +981,10 @@ public class RecipeLoader { .eut(TierEU.RECIPE_LV) .addTo(autoclaveRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Quartzite, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 4)) + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Quartzite, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 4)) .fluidInputs(FluidRegistry.getFluidStack("ic2distilledwater", 1000)) .itemOutputs(ItemRefer.Quartz_Wafer.get(1)) .requiresCleanRoom() @@ -995,7 +992,7 @@ public class RecipeLoader { .eut(TierEU.RECIPE_LV) .addTo(autoclaveRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.Quartz_Wafer.get(1), ItemRefer.Special_Ceramics_Plate.get(2), @@ -1013,58 +1010,58 @@ public class RecipeLoader { int tMultiplier = tMat.contains(SubTag.SOLDERING_MATERIAL_GOOD) ? 1 : tMat.contains(SubTag.SOLDERING_MATERIAL_BAD) ? 4 : 2; - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.Quartz_Crystal_Resonator.get(2), ItemRefer.Plastic_Case.get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1), ItemList.Cover_Screen.get(1), - GT_OreDictUnificator.get(OrePrefixes.componentCircuit, Materials.Diode, 16L), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8)) + GTOreDictUnificator.get(OrePrefixes.componentCircuit, Materials.Diode, 16L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8)) .fluidInputs(tMat.getMolten(144 * tMultiplier)) .itemOutputs(ItemRefer.Inverter.get(1)) .duration(12 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.Quartz_Crystal_Resonator.get(2), ItemRefer.Plastic_Case.get(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1), ItemList.Cover_Screen.get(1), ItemList.Circuit_Parts_DiodeASMD.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8)) + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8)) .fluidInputs(tMat.getMolten(144 * tMultiplier)) .itemOutputs(ItemRefer.Inverter.get(1)) .duration(12 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(assemblerRecipes); if (NewHorizonsCoreMod.isModLoaded()) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemList.Circuit_Board_Multifiberglass_Elite.get(1), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedGoldChip", 16), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedGoldChip", 16), ItemList.Circuit_Chip_SoC2.get(8), ItemList.Circuit_Chip_NOR.get(32), - MyMaterial.signalium.get(OrePrefixes.bolt, 32), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8), - GT_ModHandler.getIC2Item("reactorVent", 1L, 1)) + GGMaterial.signalium.get(OrePrefixes.bolt, 32), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8), + GTModHandler.getIC2Item("reactorVent", 1L, 1)) .fluidInputs(tMat.getMolten(288 * tMultiplier)) .itemOutputs(ItemRefer.HiC_T1.get(1)) .duration(1 * MINUTES) .eut(TierEU.RECIPE_IV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemList.Circuit_Board_Multifiberglass_Elite.get(1), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedGoldChip", 16), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedGoldChip", 16), ItemList.Circuit_Chip_SoC2.get(8), ItemList.Circuit_Chip_NOR.get(32), - MyMaterial.signalium.get(OrePrefixes.bolt, 32), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.TinAlloy, 1)) + GGMaterial.signalium.get(OrePrefixes.bolt, 32), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Aluminium, 8), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.TinAlloy, 1)) .fluidInputs(tMat.getMolten(288 * tMultiplier)) .itemOutputs(ItemRefer.HiC_T1.get(1)) .duration(1 * MINUTES) @@ -1073,130 +1070,130 @@ public class RecipeLoader { } } - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( Loaders.NeutronAccelerators[0].copy(), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "WPM", "CHI", "WPM", 'W', GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Lead, 1), - 'P', GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lead, 1), 'M', - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Lead, 1), 'C', - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Wood, 1), 'H', ItemList.Hull_ULV, 'I', + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "WPM", "CHI", "WPM", 'W', GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Lead, 1), + 'P', GTOreDictUnificator.get(OrePrefixes.plate, Materials.Lead, 1), 'M', + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Lead, 1), 'C', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Wood, 1), 'H', ItemList.Hull_ULV, 'I', ItemRefer.Inverter.get(1), }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( Loaders.NeutronAccelerators[1].copy(), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "WPM", "CHI", "WPM", 'W', GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 1), - 'P', GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Lead, 1), 'M', + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "WPM", "CHI", "WPM", 'W', GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 1), + 'P', GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Lead, 1), 'M', ItemList.Electric_Motor_LV, 'C', "plateAnyRubber", 'H', ItemList.Hull_LV, 'I', ItemRefer.Inverter.get(1), }); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.Inverter.get(1), ItemList.Hull_MV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnyCopper, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Plastic, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Beryllium, 2), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnyCopper, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Plastic, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Beryllium, 2), ItemList.Electric_Motor_MV.get(2)) .itemOutputs(Loaders.NeutronAccelerators[2].copy()) .duration(15 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.Inverter.get(1), ItemList.Hull_HV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.PolyvinylChloride, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Beryllium, 2), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.PolyvinylChloride, 1), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Beryllium, 2), ItemList.Electric_Motor_HV.get(2)) .itemOutputs(Loaders.NeutronAccelerators[3].copy()) .duration(15 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, Loaders.NeutronAccelerators[5].copy()) .metadata(RESEARCH_TIME, 16 * MINUTES) .itemInputs( ItemRefer.Inverter.get(2), ItemList.Hull_LuV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NetherStar, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Polybenzimidazole, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NeodymiumMagnetic, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NeodymiumMagnetic, 4), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NetherStar, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polybenzimidazole, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NeodymiumMagnetic, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NeodymiumMagnetic, 4), ItemList.Electric_Motor_LuV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorMV, 4)) + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorMV, 4)) .fluidInputs(Materials.Argon.getGas(3000)) .itemOutputs(Loaders.NeutronAccelerators[6].copy()) .eut(TierEU.RECIPE_LuV) .duration(15 * SECONDS) .addTo(AssemblyLine); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, Loaders.NeutronAccelerators[6].copy()) .metadata(RESEARCH_TIME, 16 * MINUTES) .itemInputs( ItemRefer.Inverter.get(2), ItemList.Hull_ZPM.get(1L), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.VanadiumGallium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NetherStar, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Polybenzimidazole, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.SamariumMagnetic, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.SamariumMagnetic, 4), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.VanadiumGallium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NetherStar, 1), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Polybenzimidazole, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.SamariumMagnetic, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.SamariumMagnetic, 4), ItemList.Electric_Motor_ZPM.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorEV, 4)) + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorEV, 4)) .fluidInputs(WerkstoffLoader.Xenon.getFluidOrGas(3000)) .itemOutputs(Loaders.NeutronAccelerators[7].copy()) .eut(TierEU.RECIPE_ZPM) .duration(15 * SECONDS) .addTo(AssemblyLine); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, Loaders.NeutronAccelerators[7].copy()) .metadata(RESEARCH_TIME, 16 * MINUTES) .itemInputs( ItemRefer.Inverter.get(4), ItemList.Hull_UV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.NaquadahAlloy, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NetherStar, 2), - GT_OreDictUnificator.get(OrePrefixes.plateTriple, Materials.Polybenzimidazole, 4), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.NaquadahAlloy, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NetherStar, 2), + GTOreDictUnificator.get(OrePrefixes.plateTriple, Materials.Polybenzimidazole, 4), ItemList.ZPM_Coil.get(4), - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.NickelZincFerrite, 16), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.NickelZincFerrite, 16), ItemList.ZPM_Coil.get(4), ItemList.Electric_Motor_UV.get(2), - GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorLuV, 4)) + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorLuV, 4)) .fluidInputs(WerkstoffLoader.Oganesson.getFluidOrGas(3000)) .itemOutputs(Loaders.NeutronAccelerators[8].copy()) .eut(TierEU.RECIPE_UV) .duration(15 * SECONDS) .addTo(AssemblyLine); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemList.Casing_IV.get(1L), ItemList.Cover_ActivityDetector.get(1L), ItemList.Cover_Screen.get(1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.VibrantAlloy, 4), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.VibrantAlloy, 4), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1), ItemList.Sensor_HV.get(2), - GT_Utility.getIntegratedCircuit(1)) + GTUtility.getIntegratedCircuit(1)) .fluidInputs(Materials.Helium.getGas(1000)) .itemOutputs(Loaders.NS.copy()) .duration(10 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(assemblerRecipes); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( ItemRefer.Neutron_Source.get(1), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, new Object[] { " P ", "PUP", " P ", 'P', - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Steel, 1), 'U', + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Steel, 1), 'U', ItemRefer.High_Density_Uranium.get(1) }); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemRefer.HiC_T2.get(2), ItemList.Emitter_EV.get(2), ItemRefer.Neutron_Source.get(1)) .itemOutputs(Loaders.NA.copy()) .fluidInputs(Materials.StainlessSteel.getMolten(576), Materials.TungstenCarbide.getMolten(144)) @@ -1209,28 +1206,28 @@ public class RecipeLoader { public static void InitLoadRecipe() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.Inverter.get(1), ItemList.Hull_EV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StyreneButadieneRubber, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.IronMagnetic, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenCarbide, 2), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.StyreneButadieneRubber, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.IronMagnetic, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenCarbide, 2), ItemList.Electric_Motor_EV.get(2)) .itemOutputs(Loaders.NeutronAccelerators[4].copy()) .duration(15 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemRefer.Inverter.get(1), ItemList.Hull_IV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Silicone, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.SteelMagnetic, 4), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.TungstenCarbide, 2), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Silicone, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.SteelMagnetic, 4), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.TungstenCarbide, 2), ItemList.Electric_Motor_IV.get(2)) .itemOutputs(Loaders.NeutronAccelerators[5].copy()) .duration(15 * SECONDS) @@ -1238,10 +1235,10 @@ public class RecipeLoader { .addTo(assemblerRecipes); // Al2O3 + 2N + 3C = 2AlN + 3CO - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sapphire, 5), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 3)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sapphire, 5), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 3)) .fluidInputs(FluidRegistry.getFluidStack("liquidnitrogen", 2000)) .fluidOutputs(Materials.CarbonMonoxide.getGas(3000)) .itemOutputs(ItemRefer.Aluminum_Nitride_Dust.get(2)) @@ -1250,10 +1247,10 @@ public class RecipeLoader { .metadata(COIL_HEAT, 4600) .addTo(blastFurnaceRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GreenSapphire, 5), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 3)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.GreenSapphire, 5), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 3)) .fluidInputs(FluidRegistry.getFluidStack("liquidnitrogen", 2000)) .fluidOutputs(Materials.CarbonMonoxide.getGas(3000)) .itemOutputs(ItemRefer.Aluminum_Nitride_Dust.get(2)) @@ -1262,10 +1259,10 @@ public class RecipeLoader { .metadata(COIL_HEAT, 4600) .addTo(blastFurnaceRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 5), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 3)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 5), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 3)) .fluidInputs(FluidRegistry.getFluidStack("liquidnitrogen", 2000)) .fluidOutputs(Materials.CarbonMonoxide.getGas(3000)) .itemOutputs(ItemRefer.Aluminum_Nitride_Dust.get(2)) @@ -1274,95 +1271,95 @@ public class RecipeLoader { .metadata(COIL_HEAT, 4600) .addTo(blastFurnaceRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingotHot)) + GGMaterial.extremelyUnstableNaquadah.get(OrePrefixes.dust, 1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GGMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingotHot)) .duration(6 * MINUTES + 40 * SECONDS) .eut(TierEU.RECIPE_ZPM) .metadata(COIL_HEAT, 7000) .addTo(blastFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingotHot, 1)) - .itemOutputs(MyMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingot, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingotHot, 1)) + .itemOutputs(GGMaterial.extremelyUnstableNaquadah.get(OrePrefixes.ingot, 1)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_LuV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.naquadahBasedFuelMkVIDepleted.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.naquadahBasedFuelMkVIDepleted.getFluidOrGas(1000)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1)) .outputChances(1000, 500, 400, 50, 20, 5) - .fluidOutputs(MyMaterial.metastableOganesson.getMolten(122)) + .fluidOutputs(GGMaterial.metastableOganesson.getMolten(122)) .duration(12 * SECONDS + 10 * TICKS) .eut(TierEU.RECIPE_LuV) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.naquadahBasedFuelMkVDepleted.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.naquadahBasedFuelMkVDepleted.getFluidOrGas(1000)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1)) .outputChances(1000, 500, 400, 50, 20, 5) .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(182)) .duration(12 * SECONDS + 10 * TICKS) .eut(TierEU.RECIPE_LuV) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.naquadahBasedFuelMkIVDepleted.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.naquadahBasedFuelMkIVDepleted.getFluidOrGas(1000)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 32), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 32)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 32), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 32)) .outputChances(9900, 9500, 9000, 8000, 5000, 3000) .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(864)) .duration(2 * MINUTES + 5 * SECONDS) .eut(TierEU.RECIPE_LuV) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.naquadahBasedFuelMkIIIDepleted.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.naquadahBasedFuelMkIIIDepleted.getFluidOrGas(1000)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 32), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 32), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 32)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 32), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 32), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bedrockium, 32)) .outputChances(9500, 9000, 8000, 7000, 5000, 4000) .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(720)) .duration(1 * MINUTES + 40 * SECONDS) .eut(TierEU.RECIPE_LuV) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.naquadahBasedFuelMkIIDepleted.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.naquadahBasedFuelMkIIDepleted.getFluidOrGas(1000)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 32), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Americium, 32), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 32), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Americium, 32), WerkstoffLoader.Californium.get(OrePrefixes.dust, 32)) .outputChances(9000, 8500, 5000, 4000, 2000) .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(144)) @@ -1370,95 +1367,95 @@ public class RecipeLoader { .eut(TierEU.RECIPE_EV) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lead, 16L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bismuth, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Barium, 6L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lead, 16L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bismuth, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Barium, 6L)) .outputChances(6000, 1000, 5000) .fluidOutputs(WerkstoffLoader.Xenon.getFluidOrGas(10)) .duration(50 * SECONDS) .eut(TierEU.RECIPE_EV / 2) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.thoriumBasedLiquidFuelDepleted.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.thoriumBasedLiquidFuelDepleted.getFluidOrGas(1000)) .itemOutputs( WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 64), WerkstoffLoader.Thorium232.get(OrePrefixes.dust, 16), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Praseodymium, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Praseodymium, 32), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 2), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Indium, 4)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Praseodymium, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Praseodymium, 32), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 2), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Indium, 4)) .outputChances(10000, 8000, 10000, 8000, 3000, 5000) .duration(1 * MINUTES + 15 * SECONDS) .eut(TierEU.RECIPE_EV / 2) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tritanium, 9), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cerium, 4), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 2)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tritanium, 9), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cerium, 4), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 2)) .outputChances(5000, 8000, 7500) .fluidOutputs(WerkstoffLoader.Krypton.getFluidOrGas(144)) .duration(2 * MINUTES + 5 * SECONDS) .eut(TierEU.RECIPE_IV) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.thoriumTetrafluoride.getFluidOrGas(1000)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Thorium, 1)) - .fluidOutputs(MyMaterial.thorium232Tetrafluoride.getFluidOrGas(750)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.thoriumTetrafluoride.getFluidOrGas(1000)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Thorium, 1)) + .fluidOutputs(GGMaterial.thorium232Tetrafluoride.getFluidOrGas(750)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.naquadahEmulsion.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.naquadahEmulsion.getFluidOrGas(1000)) .itemOutputs( - MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 4), - MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 2), - MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 1), - MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 1), - MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 1), - MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 1)) + GGMaterial.radioactiveSludge.get(OrePrefixes.dust, 4), + GGMaterial.radioactiveSludge.get(OrePrefixes.dust, 2), + GGMaterial.radioactiveSludge.get(OrePrefixes.dust, 1), + GGMaterial.radioactiveSludge.get(OrePrefixes.dust, 1), + GGMaterial.radioactiveSludge.get(OrePrefixes.dust, 1), + GGMaterial.radioactiveSludge.get(OrePrefixes.dust, 1)) .outputChances(8000, 7500, 5000, 2000, 500, 100) - .fluidOutputs(MyMaterial.naquadahSolution.getFluidOrGas(500)) + .fluidOutputs(GGMaterial.naquadahSolution.getFluidOrGas(500)) .duration(40 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.naquadahBasedFuelMkIDepleted.getFluidOrGas(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.naquadahBasedFuelMkIDepleted.getFluidOrGas(1000)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 48), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 32), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neodymium, 32), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Europium, 32)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 64), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 48), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 32), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Neodymium, 32), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Europium, 32)) .outputChances(9000, 8500, 5000, 4000, 2000) .fluidOutputs(WerkstoffLoader.Xenon.getFluidOrGas(144)) .duration(5 * MINUTES) .eut(TierEU.RECIPE_EV) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.radioactiveSludge.get(OrePrefixes.dust, 4)) + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.radioactiveSludge.get(OrePrefixes.dust, 4)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 2), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 2), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 1), WerkstoffLoader.Tiberium.get(OrePrefixes.dust, 1)) .outputChances(10000, 9500, 8000, 2500, 2000, 2000) .fluidOutputs(Materials.Radon.getGas(20)) @@ -1468,9 +1465,9 @@ public class RecipeLoader { } public static void Fixer() { - MaterialFix.MaterialFluidExtractionFix(MyMaterial.atomicSeparationCatalyst); - MaterialFix.MaterialFluidExtractionFix(MyMaterial.extremelyUnstableNaquadah); - MaterialFix.MaterialFluidExtractionFix(MyMaterial.metastableOganesson); - MaterialFix.MaterialFluidExtractionFix(MyMaterial.shirabon); + MaterialFix.MaterialFluidExtractionFix(GGMaterial.atomicSeparationCatalyst); + MaterialFix.MaterialFluidExtractionFix(GGMaterial.extremelyUnstableNaquadah); + MaterialFix.MaterialFluidExtractionFix(GGMaterial.metastableOganesson); + MaterialFix.MaterialFluidExtractionFix(GGMaterial.shirabon); } } diff --git a/src/main/java/goodgenerator/loader/RecipeLoader2.java b/src/main/java/goodgenerator/loader/RecipeLoader2.java new file mode 100644 index 0000000000..238d21d8aa --- /dev/null +++ b/src/main/java/goodgenerator/loader/RecipeLoader2.java @@ -0,0 +1,1879 @@ +package goodgenerator.loader; + +import static goodgenerator.api.recipe.GoodGeneratorRecipeMaps.neutronActivatorRecipes; +import static goodgenerator.api.recipe.GoodGeneratorRecipeMaps.preciseAssemblerRecipes; +import static goodgenerator.util.MyRecipeAdder.computeRangeNKE; +import static gregtech.api.enums.Mods.AppliedEnergistics2; +import static gregtech.api.enums.Mods.Avaritia; +import static gregtech.api.enums.Mods.GalacticraftMars; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.cannerRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; +import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; +import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.recipe.RecipeMaps.fusionRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; +import static gregtech.api.recipe.RecipeMaps.plasmaForgeRecipes; +import static gregtech.api.recipe.RecipeMaps.unpackagerRecipes; +import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.AssemblyLine; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.FUSION_THRESHOLD; +import static gregtech.api.util.GTRecipeConstants.NKE_RANGE; +import static gregtech.api.util.GTRecipeConstants.PRECISE_ASSEMBLER_CASING_TIER; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; +import static tectech.loader.recipe.BaseRecipeLoader.getItemContainer; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import bartworks.system.material.WerkstoffLoader; +import goodgenerator.items.GGMaterial; +import goodgenerator.util.CrackRecipeAdder; +import goodgenerator.util.ItemRefer; +import goodgenerator.util.MyRecipeAdder; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.item.chemistry.GenericChem; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import ic2.core.Ic2Items; +import tectech.recipe.TTRecipeAdder; + +public class RecipeLoader2 { + + public static void RecipeLoad() { + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.StainlessSteel, 1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlueAlloy, 1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 32), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Beryllium, 32), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1)) + .itemOutputs(ItemRefer.Speeding_Pipe.get(1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + // Compact MK1 Fusion Disassembly Recipe + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Compact_Fusion_Coil_T0.get(1)) + .itemOutputs(ItemList.Casing_Coil_Superconductor.get(3)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + + // Compact MK2 Fusion Disassembly Recipe + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Compact_Fusion_Coil_T1.get(1)) + .itemOutputs(ItemList.Casing_Fusion_Coil.get(3)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + + // Compact MK3 Fusion Disassembly Recipe + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Compact_Fusion_Coil_T2.get(1)) + .itemOutputs(ItemList.Casing_Fusion_Coil.get(3)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.zircaloy2, 500, 480, 2800, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.zircaloy2, 513, 480, 2800, false); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.zircaloy4, 500, 480, 2800, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.zircaloy4, 513, 480, 2800, false); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.incoloy903, 2400, 1920, 3700, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.adamantiumAlloy, 2500, 1920, 5500, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.marM200, 200, 7680, 5000, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.marM200, 220, 7680, 5000, false); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.signalium, 1600, 30720, 4000, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.lumiium, 1600, 30720, 4000, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.artheriumSn, 500, 122880, 6500, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.titaniumBetaC, 400, 7680, 5300, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.dalisenite, 800, 491520, 8700, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.hikarium, 1200, 30720, 5400, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.tairitsu, 1200, 1966080, 7400, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.preciousMetalAlloy, 2400, 7864320, 10000, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.enrichedNaquadahAlloy, 2400, 7864320, 11000, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.metastableOganesson, 600, 7864320, 12000, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.shirabon, 600, 31457280, 13000, true); + CrackRecipeAdder.reAddBlastRecipe(GGMaterial.atomicSeparationCatalyst, 35000, 120, 5000, false); + + GTModHandler.removeFurnaceSmelting(GGMaterial.dalisenite.get(OrePrefixes.dust)); // :doom: + + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.dalisenite.get(OrePrefixes.ingotHot, 1)) + .itemOutputs(GGMaterial.dalisenite.get(OrePrefixes.ingot, 1)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(vacuumFreezerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.shirabon.get(OrePrefixes.ingotHot, 1)) + .itemOutputs(GGMaterial.shirabon.get(OrePrefixes.ingot, 1)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_UHV) + .addTo(vacuumFreezerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GGMaterial.zircaloy4.get(OrePrefixes.plate, 4), + GGMaterial.zircaloy2.get(OrePrefixes.ring, 2), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1), ItemRefer.High_Density_Uranium.get(1)) + .itemOutputs(ItemRefer.Fuel_Rod_U_1.get(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(cannerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_U_1.get(2), + GGMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fuel_Rod_U_2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_U_2.get(2), + GGMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(ItemRefer.Fuel_Rod_U_4.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_U_1.get(4), + GGMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(ItemRefer.Fuel_Rod_U_4.get(1)) + .duration(11 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1), ItemRefer.High_Density_Plutonium.get(1)) + .itemOutputs(ItemRefer.Fuel_Rod_Pu_1.get(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(cannerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_Pu_1.get(2), + GGMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fuel_Rod_Pu_2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_Pu_2.get(2), + GGMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(ItemRefer.Fuel_Rod_Pu_4.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_Pu_1.get(4), + GGMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(ItemRefer.Fuel_Rod_Pu_4.get(1)) + .duration(11 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GTModHandler.addCraftingRecipe( + ItemRefer.YOTTank_Casing.get(1), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "BPB", "FOF", "BPB", 'B', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.BlackSteel, 1), 'P', + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.StainlessSteel, 1), 'F', + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1), 'O', + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1), }); + + GTModHandler.addCraftingRecipe( + ItemRefer.YOTTank.get(1), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SPS", "ECE", "SLS", 'S', GTOreDictUnificator.get(OrePrefixes.screw, Materials.BlueSteel, 1), + 'P', ItemList.Cover_Screen.get(1), 'E', "circuitData", 'L', + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Enderium, 1), 'C', + ItemRefer.YOTTank_Casing.get(1) }); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Output_IV.get(1), + GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiPart", 1, 440), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.CertusQuartz, 8), + GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .itemOutputs(Loaders.YFH) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_Steel.get(12L), + GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Tin, 4), + GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T1.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_Aluminium.get(3L), + GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Tin, 4), + GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T1.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_StainlessSteel.get(2L), + GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Tin, 4), + GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T1.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_Titanium.get(64L), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 8), + GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.BlackSteel, 4), + GTUtility.getIntegratedCircuit(2)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_TungstenSteel.get(18L), + GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.BlackSteel, 4), + GTUtility.getIntegratedCircuit(2)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Large_Fluid_Cell_Chrome.get(4L), + GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.BlackSteel, 4), + GTUtility.getIntegratedCircuit(2)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fluid_Storage_Core_T1.get(32), + ItemRefer.Fluid_Storage_Core_T1.get(32), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.BlackSteel, 16), + GTUtility.getIntegratedCircuit(10)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null + ? FluidRegistry.getFluid("molten.indalloy140") + : FluidRegistry.getFluid("molten.solderingalloy"); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T2.get(1)) + .metadata(RESEARCH_TIME, 17 * MINUTES) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.StainlessSteel, 4), + ItemList.Electric_Pump_HV.get(8), + ItemList.Quantum_Tank_LV.get(1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmium, 8), + GTModHandler.getModItem(GalacticraftMars.ID, "item.null", 1L, 6), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Polycaprolactam, 32)) + .fluidInputs(new FluidStack(solderIndalloy, 2304), Materials.Lubricant.getFluid(4000)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T3.get(1)) + .eut(TierEU.RECIPE_LuV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T3.get(1)) + .metadata(RESEARCH_TIME, 34 * MINUTES) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Titanium, 4), + ItemList.Electric_Pump_EV.get(8), + ItemList.Quantum_Tank_LV.get(4), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Europium, 8), + GTModHandler.getModItem(GalacticraftMars.ID, "item.null", 4L, 6), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.StyreneButadieneRubber, 64), + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.TungstenSteel, 64)) + .fluidInputs(new FluidStack(solderIndalloy, 18432), Materials.Lubricant.getFluid(16000)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T4.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T4.get(1)) + .metadata(RESEARCH_TIME, 1 * HOURS + 8 * MINUTES) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.MysteriousCrystal, 4), + ItemList.Electric_Pump_IV.get(8), + ItemList.Quantum_Tank_HV.get(8), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Neutronium, 8), + GTModHandler.getModItem(GalacticraftMars.ID, "item.null", 16L, 6), + GTOreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.Polycaprolactam, 24), + GTOreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Titanium, 64)) + .fluidInputs( + Materials.Draconium.getMolten(2304), + Materials.Titanium.getMolten(288), + Materials.Lubricant.getFluid(64000)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T5.get(1)) + .eut(TierEU.RECIPE_UV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T5.get(1)) + .metadata(RESEARCH_TIME, 2 * HOURS + 15 * MINUTES) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 4), + ItemList.Electric_Pump_LuV.get(8), + ItemList.Quantum_Tank_EV.get(16), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 16), + GTModHandler.getModItem(GalacticraftMars.ID, "item.null", 64L, 6), + ItemList.Machine_IV_Compressor.get(64)) + .fluidInputs( + Materials.Draconium.getMolten(2304), + Materials.Titanium.getMolten(288), + Materials.Lubricant.getFluid(64000)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T6.get(1)) + .eut(TierEU.RECIPE_UHV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T6.get(1)) + .metadata(RESEARCH_TIME, 4 * HOURS + 30 * MINUTES) + .itemInputs( + GTModHandler.getModItem(GalacticraftMars.ID, "item.null", 64L, 6), + ItemList.Electric_Pump_ZPM.get(8), + GTModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 1L, 0), + ItemList.Quantum_Tank_EV.get(32), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 8), + GTOreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.InfinityCatalyst, 8), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 16)) + .fluidInputs( + Materials.Draconium.getMolten(23040), + new FluidStack(solderIndalloy, 2304), + Materials.InfinityCatalyst.getMolten(1140)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T7.get(1)) + .eut(TierEU.RECIPE_UEV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T7.get(1)) + .metadata(RESEARCH_TIME, 9 * HOURS) + .itemInputs( + GTModHandler.getModItem(GalacticraftMars.ID, "item.null", 64L, 6), + ItemList.Electric_Pump_UV.get(8), + GTModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 2L, 0), + ItemList.Quantum_Tank_EV.get(64), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 16), + GTOreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.Infinity, 24), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 16)) + .fluidInputs( + Materials.Draconium.getMolten(36864), + new FluidStack(solderIndalloy, 30240), + Materials.InfinityCatalyst.getMolten(5670)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T8.get(1)) + .eut(TierEU.RECIPE_UIV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T8.get(1)) + .metadata(RESEARCH_TIME, 180 * HOURS) + .itemInputs( + GTModHandler.getModItem(GalacticraftMars.ID, "item.null", 64L, 6), + ItemList.Electric_Pump_UHV.get(8), + GTModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 2L, 0), + ItemList.Quantum_Tank_IV.get(8), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 32), + GTOreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.Infinity, 36), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 8)) + .fluidInputs( + Materials.Draconium.getMolten(36864), + new FluidStack(solderIndalloy, 30240), + MaterialsUEVplus.TranscendentMetal.getMolten(1440), + Materials.InfinityCatalyst.getMolten(5670)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T9.get(1)) + .eut(TierEU.RECIPE_UMV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T9.get(1)) + .metadata(RESEARCH_TIME, 360 * HOURS) + .itemInputs( + GTModHandler.getModItem(GalacticraftMars.ID, "item.null", 64L, 6), + ItemList.Electric_Pump_UEV.get(8), + GTModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 4L, 0), + ItemList.Quantum_Tank_IV.get(16), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 32), + GTOreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.CosmicNeutronium, 24), + GTOreDictUnificator.get(OrePrefixes.plateDouble, MaterialsUEVplus.SpaceTime, 4)) + .fluidInputs( + Materials.Draconium.getMolten(36864), + new FluidStack(solderIndalloy, 46080), + MaterialsUEVplus.TranscendentMetal.getMolten(4320), + Materials.InfinityCatalyst.getMolten(17010)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T10.get(1)) + .eut(TierEU.RECIPE_UXV) + .duration(20 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1), + ItemRefer.Fluid_Storage_Core_T1.get(10), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 4), + ItemList.Electric_Pump_HV.get(8), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.StainlessSteel, 4), + GTUtility.getIntegratedCircuit(5)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .itemOutputs(ItemRefer.YOTTank_Cell_T1.get(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1), + ItemRefer.Fluid_Storage_Core_T2.get(10), + WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.plate, 4), + ItemList.Electric_Pump_EV.get(8), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Enderium, 4), + GTUtility.getIntegratedCircuit(5)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(144)) + .itemOutputs(ItemRefer.YOTTank_Cell_T2.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T2.get(1)) + .metadata(RESEARCH_TIME, 17 * MINUTES) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Naquadah, 1), + ItemRefer.Fluid_Storage_Core_T3.get(10), + new Object[] { OrePrefixes.circuit.get(Materials.LuV), 8 }, + ItemList.Electric_Pump_IV.get(8), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.NiobiumTitanium, 8), + GGMaterial.adamantiumAlloy.get(OrePrefixes.plate, 32)) + .fluidInputs( + Materials.Quantium.getMolten(1440), + FluidRegistry.getFluidStack("ic2coolant", 8000), + Materials.Lubricant.getFluid(8000)) + .itemOutputs(ItemRefer.YOTTank_Cell_T3.get(1)) + .eut(TierEU.RECIPE_LuV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T3.get(1)) + .metadata(RESEARCH_TIME, 34 * MINUTES) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1), + ItemRefer.Fluid_Storage_Core_T4.get(10), + new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 8 }, + ItemList.Electric_Pump_LuV.get(8), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.MysteriousCrystal, 8), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.ElectrumFlux, 32)) + .fluidInputs( + Materials.Draconium.getMolten(1440), + FluidRegistry.getFluidStack("ic2coolant", 16000), + Materials.Lubricant.getFluid(16000)) + .itemOutputs(ItemRefer.YOTTank_Cell_T4.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T4.get(1)) + .metadata(RESEARCH_TIME, 1 * HOURS + 8 * MINUTES) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1), + ItemRefer.Fluid_Storage_Core_T5.get(10), + new Object[] { OrePrefixes.circuit.get(Materials.UV), 8 }, + ItemList.Electric_Pump_ZPM.get(8), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.DraconiumAwakened, 8), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 64)) + .fluidInputs( + Materials.Draconium.getMolten(1440), + FluidRegistry.getFluidStack("ic2coolant", 16000), + Materials.Lubricant.getFluid(16000)) + .itemOutputs(ItemRefer.YOTTank_Cell_T5.get(1)) + .eut(TierEU.RECIPE_UV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T5.get(1)) + .metadata(RESEARCH_TIME, 2 * HOURS + 15 * MINUTES) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), + ItemRefer.Fluid_Storage_Core_T6.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 8L }, + ItemList.Electric_Pump_UV.get(8), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.NetherStar, 8), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 64)) + .fluidInputs( + Materials.DraconiumAwakened.getMolten(1440), + FluidRegistry.getFluidStack("ic2coolant", 46080), + Materials.Lubricant.getFluid(32000)) + .itemOutputs(ItemRefer.YOTTank_Cell_T6.get(1)) + .eut(TierEU.RECIPE_UHV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T6.get(1)) + .metadata(RESEARCH_TIME, 4 * HOURS + 30 * MINUTES) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), + ItemRefer.Fluid_Storage_Core_T7.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 8L }, + ItemList.Electric_Pump_UHV.get(8), + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.NetherStar, 16), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 32), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 32)) + .fluidInputs( + Materials.DraconiumAwakened.getMolten(14400), + FluidRegistry.getFluidStack("supercoolant", 46080), + Materials.Lubricant.getFluid(46080)) + .itemOutputs(ItemRefer.YOTTank_Cell_T7.get(1)) + .eut(TierEU.RECIPE_UEV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T7.get(1)) + .metadata(RESEARCH_TIME, 9 * HOURS) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), + ItemRefer.Fluid_Storage_Core_T8.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 8L }, + ItemList.Electric_Pump_UEV.get(8), + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 12), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.CosmicNeutronium, 12), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.DraconiumAwakened, 12), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 64)) + .fluidInputs( + Materials.DraconiumAwakened.getMolten(14400), + FluidRegistry.getFluidStack("supercoolant", 46080), + Materials.Lubricant.getFluid(46080)) + .itemOutputs(ItemRefer.YOTTank_Cell_T8.get(1)) + .eut(TierEU.RECIPE_UIV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + if (NewHorizonsCoreMod.isModLoaded()) { + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T8.get(1)) + .metadata(RESEARCH_TIME, 18 * HOURS) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 2), + ItemRefer.Fluid_Storage_Core_T9.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 8L }, + ItemList.Electric_Pump_UIV.get(8), + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 12), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.CosmicNeutronium, 12), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.DraconiumAwakened, 12), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 64)) + .fluidInputs( + Materials.DraconiumAwakened.getMolten(14400), + FluidRegistry.getFluidStack("supercoolant", 46080), + Materials.Lubricant.getFluid(46080)) + .itemOutputs(ItemRefer.YOTTank_Cell_T9.get(1)) + .eut(TierEU.RECIPE_UMV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T9.get(1)) + .metadata(RESEARCH_TIME, 36 * HOURS) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 2), + ItemRefer.Fluid_Storage_Core_T10.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 12L }, + ItemList.Electric_Pump_UMV.get(8), + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 64), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.CosmicNeutronium, 12), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.DraconiumAwakened, 12), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 10)) + .fluidInputs( + Materials.DraconiumAwakened.getMolten(14400), + MaterialsUEVplus.TranscendentMetal.getMolten(1440), + FluidRegistry.getFluidStack("supercoolant", 46080), + Materials.Lubricant.getFluid(46080)) + .itemOutputs(ItemRefer.YOTTank_Cell_T10.get(1)) + .eut(TierEU.RECIPE_UXV) + .duration(50 * SECONDS) + .addTo(AssemblyLine); + } + + // Craft 2x64X Tier to 1X+1 Tier + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fluid_Storage_Core_T6.get(64), + ItemRefer.Fluid_Storage_Core_T6.get(64), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T7.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fluid_Storage_Core_T7.get(64), + ItemRefer.Fluid_Storage_Core_T7.get(64), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T8.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fluid_Storage_Core_T8.get(64), + ItemRefer.Fluid_Storage_Core_T8.get(64), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T9.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fluid_Storage_Core_T9.get(64), + ItemRefer.Fluid_Storage_Core_T9.get(64), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fluid_Storage_Core_T10.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T1.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T1.get(10), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T2.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T2.get(10), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T3.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T3.get(10), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Naquadah, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T4.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T4.get(10), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T5.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T5.get(10), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T6.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T6.get(2), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T7.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T7.get(2), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T8.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T8.get(2), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T9.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T9.get(2), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.YOTTank_Cell_T10.get(1)) + .itemOutputs( + ItemRefer.Fluid_Storage_Core_T10.get(2), + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Tiberium.get(OrePrefixes.dust, 1)) + .itemOutputs( + WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1), + WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1)) + .outputChances(10000, 2000) + .fluidInputs(GGMaterial.naquadahGas.getFluidOrGas(250)) + .duration(400) + .eut(TierEU.RECIPE_HV) + .addTo(autoclaveRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Firestone.getGems(1)) + .fluidInputs(GGMaterial.lightNaquadahFuel.getFluidOrGas(144)) + .itemOutputs(WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Diamond.getGems(1)) + .fluidInputs(GGMaterial.heavyNaquadahFuel.getFluidOrGas(144)) + .itemOutputs(WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(Materials.HeavyFuel.getFluid(1000)) + .fluidOutputs( + Materials.Toluene.getFluid(400), + Materials.Benzene.getFluid(400), + Materials.Phenol.getFluid(250)) + .duration(6 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(distillationTowerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Coal.getGems(1)) + .itemOutputs(Materials.Ash.getDust(1)) + .outputChances(10) + .fluidOutputs(FluidRegistry.getFluidStack("fluid.coaltar", 250)) + .duration(3 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(fluidExtractionRecipes); + + if (OreDictionary.getOres("fuelCoke") + .size() > 0) { + GTValues.RA.stdBuilder() + .itemInputs( + OreDictionary.getOres("fuelCoke") + .get(0)) + .itemOutputs(Materials.Ash.getDust(1)) + .outputChances(10) + .fluidOutputs(FluidRegistry.getFluidStack("fluid.coaltar", 250)) + .duration(3 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(fluidExtractionRecipes); + } + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(24)) + .fluidInputs(FluidRegistry.getFluidStack("fluid.coaltaroil", 100)) + .fluidOutputs(GGMaterial.cyclopentadiene.getFluidOrGas(30)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(distilleryRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(24)) + .fluidInputs(Materials.WoodTar.getFluid(500)) + .fluidOutputs(GGMaterial.cyclopentadiene.getFluidOrGas(20)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(distilleryRecipes); + + // FeCl2 + Cl = FeCl3 + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.ferrousChloride.get(OrePrefixes.cell, 1), GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Chlorine.getGas(1000)) + .itemOutputs(Materials.IronIIIChloride.getCells(1)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // FeCl3 + H = FeCl2 + HCl + GTValues.RA.stdBuilder() + .itemInputs(Materials.IronIIIChloride.getCells(1), GTUtility.getIntegratedCircuit(7)) + .fluidInputs(Materials.Hydrogen.getGas(1000)) + .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000)) + .itemOutputs(GGMaterial.ferrousChloride.get(OrePrefixes.cell, 1)) + .duration(4 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(UniversalChemical); + + // NH3 + 2C2H6O = C4H11N + 2H2O + GTValues.RA.stdBuilder() + .itemInputs(Materials.Ammonia.getCells(1), GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Ethanol.getFluid(2000)) + .fluidOutputs(Materials.Water.getFluid(2000)) + .itemOutputs(GGMaterial.diethylamine.get(OrePrefixes.cell, 1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(2)) + .fluidInputs( + GGMaterial.cyclopentadiene.getFluidOrGas(2000), + GGMaterial.ferrousChloride.getFluidOrGas(1000), + GGMaterial.diethylamine.getFluidOrGas(8000), + Materials.Ice.getSolid(4000)) + .fluidOutputs(GGMaterial.impureFerroceneMixture.getFluidOrGas(15000)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_MV) + .addTo(multiblockChemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.ether.get(OrePrefixes.cell, 1), GTUtility.getIntegratedCircuit(1)) + .fluidInputs(GGMaterial.impureFerroceneMixture.getFluidOrGas(7500)) + .itemOutputs(GGMaterial.ferroceneSolution.get(OrePrefixes.cell, 1)) + .fluidOutputs(GGMaterial.ferroceneWaste.getFluidOrGas(5000)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + CrackRecipeAdder.addUniversalDistillationRecipe( + GGMaterial.ferroceneWaste.getFluidOrGas(1000), + new FluidStack[] { Materials.Water.getFluid(400), GGMaterial.diethylamine.getFluidOrGas(800), + GGMaterial.ether.getFluidOrGas(500) }, + GTValues.NI, + 30 * SECONDS, + TierEU.RECIPE_MV); + + CrackRecipeAdder.addUniversalDistillationRecipe( + GGMaterial.ferroceneSolution.getFluidOrGas(2000), + new FluidStack[] { GGMaterial.ether.getFluidOrGas(1000) }, + GGMaterial.ferrocene.get(OrePrefixes.dust, 1), + 30 * SECONDS, + TierEU.RECIPE_MV); + + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.ferrocene.get(OrePrefixes.dust, 4), Materials.SodiumHydroxide.getDust(8)) + .fluidInputs( + FluidRegistry.getFluidStack("fluid.kerosene", 40000), + Materials.Naphtha.getFluid(3000), + GGMaterial.diethylamine.getFluidOrGas(1000)) + .fluidOutputs(GGMaterial.ironedKerosene.getFluidOrGas(44000)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(multiblockChemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.ferrocene.get(OrePrefixes.dust, 4)) + .fluidInputs( + FluidRegistry.getFluidStack("combustionpromotor", 4000), + Materials.Naphtha.getFluid(40000), + Materials.LightFuel.getFluid(3000), + Materials.LPG.getFluid(1000), + Materials.Tetranitromethane.getFluid(2000)) + .fluidOutputs(GGMaterial.ironedFuel.getFluidOrGas(50000)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(multiblockChemicalReactorRecipes); + + GTModHandler.addCraftingRecipe( + ItemRefer.Combustion_Generator_EV.get(1), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PCP", "MHM", "GWG", 'G', GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Titanium, 1), + 'C', "circuitData", 'W', GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 1), 'P', + ItemList.Electric_Piston_EV, 'H', ItemList.Hull_EV, 'M', ItemList.Electric_Motor_EV }); + + GTModHandler.addCraftingRecipe( + ItemRefer.Combustion_Generator_IV.get(1), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PCP", "MHM", "GWG", 'G', + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.TungstenSteel, 1), 'C', "circuitElite", 'W', + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 1), 'P', ItemList.Electric_Piston_IV, + 'H', ItemList.Hull_IV, 'M', ItemList.Electric_Motor_IV }); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1)) + .fluidInputs(GGMaterial.uraniumBasedLiquidFuelExcited.getFluidOrGas(250)) + .itemOutputs(ItemRefer.Fuel_Rod_LU_1.get(1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(fluidCannerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1)) + .fluidInputs(GGMaterial.plutoniumBasedLiquidFuelExcited.getFluidOrGas(250)) + .itemOutputs(ItemRefer.Fuel_Rod_LPu_1.get(1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(fluidCannerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LPu_1.get(2), + GGMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fuel_Rod_LPu_2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LPu_2.get(2), + GGMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(ItemRefer.Fuel_Rod_LPu_4.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LPu_1.get(4), + GGMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(ItemRefer.Fuel_Rod_LPu_4.get(1)) + .duration(11 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LU_1.get(2), + GGMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ItemRefer.Fuel_Rod_LU_2.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LU_2.get(2), + GGMaterial.zircaloy2.get(OrePrefixes.stick, 4), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(ItemRefer.Fuel_Rod_LU_4.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.Fuel_Rod_LU_1.get(4), + GGMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(ItemRefer.Fuel_Rod_LU_4.get(1)) + .duration(11 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( + FluidRegistry.getFluidStack("lava", 20000), + FluidRegistry.getFluidStack("ic2pahoehoelava", 20000), + FluidRegistry.getFluidStack("ic2distilledwater", 20000), + FluidRegistry.getFluidStack("steam", 3200000), + FluidRegistry.getFluidStack("ic2superheatedsteam", 1600000), + 10000); + + MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( + FluidRegistry.getFluidStack("ic2hotcoolant", 16000), + FluidRegistry.getFluidStack("ic2coolant", 16000), + FluidRegistry.getFluidStack("ic2distilledwater", 20000), + FluidRegistry.getFluidStack("ic2superheatedsteam", 3200000), + FluidRegistry.getFluidStack("supercriticalsteam", 32000), + 8000); + + MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( + FluidRegistry.getFluidStack("molten.solarsalthot", 3200), + FluidRegistry.getFluidStack("molten.solarsaltcold", 3200), + FluidRegistry.getFluidStack("ic2distilledwater", 20000), + FluidRegistry.getFluidStack("ic2superheatedsteam", 3200000), + FluidRegistry.getFluidStack("supercriticalsteam", 32000), + 1600); + + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Lepidolite, 1)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(1000)) + .itemOutputs( + Materials.RockSalt.getDust(1), + GGMaterial.lithiumChloride.get(OrePrefixes.dust, 3), + Materials.Cryolite.getDust(4)) + .outputChances(8000, 8000, 8000) + .duration(7 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.marM200.get(OrePrefixes.ingot, 18), Materials.Cerium.getIngots(1)) + .fluidInputs(GGMaterial.lithiumChloride.getMolten(144)) + .itemOutputs(GGMaterial.marCeM200.get(OrePrefixes.ingotHot, 19)) + .duration(4 * MINUTES + 45 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .metadata(COIL_HEAT, 5400) + .addTo(blastFurnaceRecipes); + + GTModHandler.addCraftingRecipe( + ItemRefer.SC_Turbine_Casing.get(1), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PhP", "GCG", "PwP", 'G', GGMaterial.marM200.get(OrePrefixes.gearGt, 1), 'C', + ItemList.Casing_Turbine.get(1), 'P', GGMaterial.marCeM200.get(OrePrefixes.plate, 1), }); + + GTValues.RA.stdBuilder() + .itemInputs( + GGMaterial.marM200.get(OrePrefixes.gearGt, 2), + GGMaterial.marCeM200.get(OrePrefixes.plate, 4), + ItemList.Casing_Turbine.get(1)) + .itemOutputs(ItemRefer.SC_Turbine_Casing.get(1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTModHandler.addCraftingRecipe( + ItemRefer.SC_Fluid_Turbine.get(1), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "NPN", "GHG", "IPI", 'N', "circuitMaster", 'P', GGMaterial.marM200.get(OrePrefixes.plate, 1), + 'H', ItemList.Hull_IV.get(1), 'G', GGMaterial.marCeM200.get(OrePrefixes.gearGt, 1), 'I', + GGMaterial.incoloy903.get(OrePrefixes.pipeLarge, 1) }); + + GTValues.RA.stdBuilder() + .itemInputs( + GGMaterial.marM200.get(OrePrefixes.plate, 2), + GGMaterial.marCeM200.get(OrePrefixes.gearGt, 2), + GGMaterial.incoloy903.get(OrePrefixes.pipeLarge, 2), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), + ItemList.Hull_IV.get(1)) + .itemOutputs(ItemRefer.SC_Fluid_Turbine.get(1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GGMaterial.incoloy903.get(OrePrefixes.plate, 4), + GGMaterial.marCeM200.get(OrePrefixes.plate, 4), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.NiobiumTitanium, 1), + GTUtility.getIntegratedCircuit(8)) + .itemOutputs(ItemRefer.Pressure_Resistant_Wall.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTModHandler.addCraftingRecipe( + ItemRefer.Extreme_Heat_Exchanger.get(1), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "EPE", "PHP", "SPS", 'P', + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.TungstenSteel, 1), 'H', + ItemList.Hull_IV.get(1), 'S', GGMaterial.marM200.get(OrePrefixes.plate, 1), 'E', + GTModHandler.getIC2Item("reactorHeatSwitchDiamond", 1L, 1) }); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Salty_Root.get(1)) + .fluidInputs(GTModHandler.getWater(100)) + .itemOutputs(Materials.Salt.getDust(1), Materials.RockSalt.getDust(1), Materials.Saltpeter.getDust(1)) + .outputChances(9500, 8000, 5000) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(chemicalBathRecipes); + + if (NewHorizonsCoreMod.isModLoaded()) { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Robot_Arm_IV.get(4), + ItemRefer.HiC_T1.get(4), + ItemList.Tool_DataOrb.get(3), + GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.Titanium, 4), + GGMaterial.hikarium.get(OrePrefixes.gearGt, 4), + GGMaterial.marM200.get(OrePrefixes.plateDouble, 2), + ItemRefer.IC2_Ir_Plate.get(2), + GGMaterial.lumiium.get(OrePrefixes.bolt, 48)) + .fluidInputs(Materials.Palladium.getMolten(1152)) + .itemOutputs(ItemRefer.Precise_Assembler.get(1)) + .duration(1 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.HiC_T1.get(2), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedDiamondCrystalChip", 8), + ItemList.Circuit_Chip_NAND.get(16), + GTModHandler.getIC2Item("reactorVentCore", 1L, 1)) + .itemOutputs(ItemRefer.HiC_T2.get(1)) + .fluidInputs( + Materials.Plastic.getMolten(288), + GGMaterial.signalium.getMolten(144), + GGMaterial.lumiium.getMolten(72), + Materials.Enderium.getMolten(72)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 1) + .noOptimize() + .addTo(preciseAssemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.HiC_T1.get(2), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedDiamondCrystalChip", 8), + ItemList.Circuit_Chip_NAND.get(16), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Aluminium, 2)) + .itemOutputs(ItemRefer.HiC_T2.get(1)) + .fluidInputs( + Materials.Plastic.getMolten(288), + GGMaterial.signalium.getMolten(144), + GGMaterial.lumiium.getMolten(72), + Materials.Enderium.getMolten(72)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 1) + .noOptimize() + .addTo(preciseAssemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.HiC_T2.get(2), + ItemList.Circuit_Parts_Crystal_Chip_Master.get(8), + ItemList.Circuit_Chip_CrystalSoC2.get(1), + GTModHandler.getIC2Item("reactorVentDiamond", 1L, 1)) + .itemOutputs(ItemRefer.HiC_T3.get(1)) + .fluidInputs( + GGMaterial.adamantiumAlloy.getMolten(576), + GGMaterial.signalium.getMolten(288), + GGMaterial.lumiium.getMolten(144), + Materials.TungstenCarbide.getMolten(72)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 2) + .noOptimize() + .addTo(preciseAssemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.HiC_T2.get(2), + ItemList.Circuit_Parts_Crystal_Chip_Master.get(8), + ItemList.Circuit_Chip_CrystalSoC2.get(1), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 2)) + .itemOutputs(ItemRefer.HiC_T3.get(1)) + .fluidInputs( + GGMaterial.adamantiumAlloy.getMolten(576), + GGMaterial.signalium.getMolten(288), + GGMaterial.lumiium.getMolten(144), + Materials.TungstenCarbide.getMolten(72)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 2) + .noOptimize() + .addTo(preciseAssemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.HiC_T3.get(2), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedEnergyChip", 8), + ItemList.Circuit_Chip_QuantumCPU.get(16), + GTModHandler.getIC2Item("reactorVentGold", 1L, 1)) + .itemOutputs(ItemRefer.HiC_T4.get(1)) + .fluidInputs( + GGMaterial.marM200.getMolten(1152), + GGMaterial.signalium.getMolten(576), + GGMaterial.lumiium.getMolten(288), + GGMaterial.artheriumSn.getMolten(144)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) + .noOptimize() + .addTo(preciseAssemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.HiC_T3.get(2), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedEnergyChip", 8), + ItemList.Circuit_Chip_QuantumCPU.get(16), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.EnergeticAlloy, 2)) + .itemOutputs(ItemRefer.HiC_T4.get(1)) + .fluidInputs( + GGMaterial.marM200.getMolten(1152), + GGMaterial.signalium.getMolten(576), + GGMaterial.lumiium.getMolten(288), + GGMaterial.artheriumSn.getMolten(144)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) + .noOptimize() + .addTo(preciseAssemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.HiC_T4.get(2), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedManyullynCrystalChip", 8), + ItemList.Circuit_Chip_BioCPU.get(1), + Ic2Items.reactorVentSpread) + .itemOutputs(ItemRefer.HiC_T5.get(1)) + .fluidInputs( + GGMaterial.titaniumBetaC.getMolten(1728), + GGMaterial.signalium.getMolten(1152), + GGMaterial.lumiium.getMolten(576), + GGMaterial.dalisenite.getMolten(288)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) + .noOptimize() + .addTo(preciseAssemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemRefer.HiC_T4.get(2), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedManyullynCrystalChip", 8), + ItemList.Circuit_Chip_BioCPU.get(1), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.TungstenCarbide, 2)) + .itemOutputs(ItemRefer.HiC_T5.get(1)) + .fluidInputs( + GGMaterial.titaniumBetaC.getMolten(1728), + GGMaterial.signalium.getMolten(1152), + GGMaterial.lumiium.getMolten(576), + GGMaterial.dalisenite.getMolten(288)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) + .noOptimize() + .addTo(preciseAssemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_LuV.get(3), + ItemList.Robot_Arm_EV.get(2), + GTOreDictUnificator.get(OrePrefixes.cableGt02, Materials.Osmiridium, 2), + GGMaterial.marM200.get(OrePrefixes.plateDouble, 2), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1), + MaterialsElements.getInstance().RUTHENIUM.getBolt(32), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Platinum, 8)) + .fluidInputs(GGMaterial.zircaloy4.getMolten(576)) + .itemOutputs(ItemRefer.Imprecise_Electronic_Unit.get(2)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_ZPM.get(3), + ItemList.Robot_Arm_IV.get(2), + GTOreDictUnificator.get(OrePrefixes.cableGt04, GGMaterial.lumiium.getBridgeMaterial(), 2), + GGMaterial.marCeM200.get(OrePrefixes.plateDouble, 2), + ItemRefer.HiC_T1.get(1), + GGMaterial.signalium.get(OrePrefixes.bolt, 32), + GGMaterial.titaniumBetaC.get(OrePrefixes.gearGtSmall, 8)) + .fluidInputs(Materials.BlackSteel.getMolten(576)) + .itemOutputs(ItemRefer.Precise_Electronic_Unit_T1.get(2)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_UV.get(3), + ItemList.Robot_Arm_LuV.get(2), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.ElectrumFlux, 4), + ItemRefer.HiC_T2.get(1), + ItemRefer.Precise_Electronic_Unit_T1.get(1), + GGMaterial.marCeM200.get(OrePrefixes.bolt, 32), + GGMaterial.artheriumSn.get(OrePrefixes.gearGtSmall, 8)) + .fluidInputs(GGMaterial.adamantiumAlloy.getMolten(1152)) + .itemOutputs(ItemRefer.Precise_Electronic_Unit_T2.get(4)) + .duration(4 * MINUTES) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_MAX.get(3), + ItemList.Field_Generator_ZPM.get(2), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 4), + ItemRefer.HiC_T3.get(1), + ItemRefer.Precise_Electronic_Unit_T2.get(1), + GGMaterial.titaniumBetaC.get(OrePrefixes.bolt, 32), + GGMaterial.dalisenite.get(OrePrefixes.gearGtSmall, 8)) + .fluidInputs(GGMaterial.artheriumSn.getMolten(1152)) + .itemOutputs(ItemRefer.Precise_Electronic_Unit_T3.get(4)) + .duration(4 * MINUTES) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + getItemContainer("Casing_UEV").get(3), + ItemList.Field_Generator_UV.get(2), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 8), + ItemRefer.HiC_T4.get(1), + ItemRefer.Precise_Electronic_Unit_T3.get(1), + GGMaterial.enrichedNaquadahAlloy.get(OrePrefixes.bolt, 32), + GGMaterial.tairitsu.get(OrePrefixes.gearGtSmall, 8)) + .fluidInputs(GGMaterial.preciousMetalAlloy.getMolten(1152)) + .itemOutputs(ItemRefer.Precise_Electronic_Unit_T4.get(4)) + .duration(4 * MINUTES) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + } + + // Compact MK1 Fusion Coil + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_Coil_Superconductor.get(3), + ItemRefer.HiC_T2.get(1), + ItemRefer.Special_Ceramics_Plate.get(2)) + .itemOutputs(ItemRefer.Compact_Fusion_Coil_T0.get(1)) + .fluidInputs(GGMaterial.marM200.getMolten(1152), GGMaterial.zircaloy4.getMolten(288)) + .duration(60 * SECONDS) + .eut(9001) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 1) + .noOptimize() + .addTo(preciseAssemblerRecipes); + // Compact MK2 Fusion Coil + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_Fusion_Coil.get(3), + ItemRefer.Quartz_Crystal_Resonator.get(2), + ItemRefer.HiC_T3.get(1)) + .itemOutputs(ItemRefer.Compact_Fusion_Coil_T1.get(1)) + .fluidInputs(GGMaterial.artheriumSn.getMolten(576), GGMaterial.titaniumBetaC.getMolten(144)) + .duration(40 * SECONDS) + .eut(14000) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 2) + .noOptimize() + .addTo(preciseAssemblerRecipes); + // Compact MK3 Fusion Coil + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_Fusion_Coil.get(3), + ItemRefer.Radiation_Protection_Plate.get(2), + ItemList.QuantumStar.get(4), + ItemRefer.HiC_T4.get(1)) + .itemOutputs(ItemRefer.Compact_Fusion_Coil_T2.get(1)) + .fluidInputs(GGMaterial.dalisenite.getMolten(576), GGMaterial.hikarium.getMolten(144)) + .duration(40 * SECONDS) + .eut(114514) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) + .noOptimize() + .addTo(preciseAssemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.FusionComputer_LuV.get(48), + ItemRefer.HiC_T1.get(8), + GGMaterial.marCeM200.get(OrePrefixes.plate, 32), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 8), + ItemList.Circuit_Wafer_HPIC.get(16), + ItemList.Field_Generator_LuV.get(4), + GGMaterial.marM200.get(OrePrefixes.stickLong, 8)) + .fluidInputs(GGMaterial.adamantiumAlloy.getMolten(9216)) + .itemOutputs(ItemRefer.Compact_Fusion_MK1.get(1)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Compact_Fusion_MK1.get(1)) + .metadata(RESEARCH_TIME, 20 * MINUTES) + .itemInputs( + ItemList.FusionComputer_ZPMV.get(48), + new Object[] { "circuitUltimate", 1 }, + new Object[] { "circuitUltimate", 1 }, + new Object[] { "circuitUltimate", 1 }, + new Object[] { "circuitUltimate", 1 }, + ItemList.Circuit_Wafer_UHPIC.get(32), + ItemList.ZPM_Coil.get(16), + ItemList.Neutron_Reflector.get(4), + ItemRefer.HiC_T2.get(8), + ItemList.Field_Generator_ZPM.get(8), + GGMaterial.artheriumSn.get(OrePrefixes.gearGtSmall, 32)) + .fluidInputs( + GGMaterial.marCeM200.getMolten(2304), + WerkstoffLoader.HDCS.getMolten(1152), + GGMaterial.artheriumSn.getMolten(288)) + .itemOutputs(ItemRefer.Compact_Fusion_MK2.get(1)) + .eut(TierEU.RECIPE_ZPM / 2) + .duration(5 * MINUTES) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemRefer.Compact_Fusion_MK2.get(1)) + .metadata(RESEARCH_TIME, 20 * MINUTES) + .itemInputs( + ItemList.FusionComputer_UV.get(48), + new Object[] { "circuitSuperconductor", 1 }, + new Object[] { "circuitSuperconductor", 1 }, + new Object[] { "circuitSuperconductor", 1 }, + new Object[] { "circuitSuperconductor", 1 }, + ItemList.Circuit_Wafer_NPIC.get(64), + ItemList.UV_Coil.get(16), + ItemRefer.Advanced_Radiation_Protection_Plate.get(8), + ItemRefer.HiC_T3.get(8), + ItemList.Field_Generator_UV.get(8), + WerkstoffLoader.HDCS.get(OrePrefixes.gearGtSmall, 64)) + .fluidInputs( + GGMaterial.titaniumBetaC.getMolten(2304), + GGMaterial.dalisenite.getMolten(1152), + Materials.Americium.getMolten(288)) + .itemOutputs(ItemRefer.Compact_Fusion_MK3.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * MINUTES) + .addTo(AssemblyLine); + + // Compact MK4 Fusion Coil + GTValues.RA.stdBuilder() + .itemInputs(GregtechItemList.Casing_Fusion_Internal.get(3), ItemRefer.HiC_T5.get(1), CI.getEnergyCore(4, 1)) + .itemOutputs(ItemRefer.Compact_Fusion_Coil_T3.get(1)) + .fluidInputs( + FluidRegistry.getFluidStack("molten.energycrystal", 1152), + FluidRegistry.getFluidStack("molten.laurenium", 144)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) + .noOptimize() + .addTo(preciseAssemblerRecipes); + + // Compact MK4 Fusion Disassembly Recipe + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Compact_Fusion_Coil_T3.get(1)) + .itemOutputs(GregtechItemList.Casing_Fusion_Internal.get(3)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemRefer.Compact_Fusion_MK3.get(1), + 2_560_000, + 4_096, + (int) TierEU.RECIPE_UHV, + 256, + new Object[] { GregtechItemList.FusionComputer_UV2.get(48), new Object[] { "circuitInfinite", 1 }, + new Object[] { "circuitInfinite", 1 }, new Object[] { "circuitInfinite", 1 }, + new Object[] { "circuitInfinite", 1 }, ItemList.Circuit_Wafer_PPIC.get(64), ItemList.UHV_Coil.get(16), + MaterialsAlloy.TITANSTEEL.getPlateDense(8), ItemRefer.HiC_T4.get(8), + ItemList.Field_Generator_UHV.get(8), + GGMaterial.enrichedNaquadahAlloy.get(OrePrefixes.gearGtSmall, 64) }, + new FluidStack[] { GenericChem.TEFLON.getFluidStack(2304), GGMaterial.dalisenite.getMolten(1152), + MaterialsAlloy.BOTMIUM.getFluidStack(288) }, + ItemRefer.Compact_Fusion_MK4.get(1), + 6000, + (int) TierEU.RECIPE_UV); + + // Compact MK5 Fusion Coil + GTValues.RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Fusion_Internal2.get(3), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 1), + ItemRefer.HiC_T5.get(4), + CI.getEnergyCore(5, 1)) + .itemOutputs(ItemRefer.Compact_Fusion_Coil_T4.get(1)) + .fluidInputs( + MaterialsAlloy.BLACK_TITANIUM.getFluidStack(1152), + GGMaterial.metastableOganesson.getMolten(576)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) + .noOptimize() + .addTo(preciseAssemblerRecipes); + + // Compact MK5 Computer + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemRefer.Compact_Fusion_MK4.get(1), + 10_240_000, + 16_384, + (int) TierEU.RECIPE_UEV, + 256, + new Object[] { GregtechItemList.FusionComputer_UV3.get(48), new Object[] { "circuitBio", 1 }, + new Object[] { "circuitBio", 1 }, new Object[] { "circuitBio", 1 }, new Object[] { "circuitBio", 1 }, + ItemList.Circuit_Wafer_QPIC.get(64), ItemList.UHV_Coil.get(64), + MaterialsElements.STANDALONE.HYPOGEN.getPlateDense(8), ItemRefer.HiC_T5.get(8), + ItemList.Field_Generator_UEV.get(8), GGMaterial.metastableOganesson.get(OrePrefixes.gearGtSmall, 64) }, + new FluidStack[] { GGMaterial.tairitsu.getMolten(2304), MaterialsAlloy.OCTIRON.getFluidStack(1152), + MaterialsElements.STANDALONE.RHUGNOR.getFluidStack(288) }, + ItemRefer.Compact_Fusion_MK5.get(1), + 6000, + (int) TierEU.RECIPE_UHV); + + // Compact MK5 Fusion Disassembly Recipe + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Compact_Fusion_Coil_T4.get(1)) + .itemOutputs(GregtechItemList.Casing_Fusion_Internal2.get(3)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Antimony.getDust(8), GTUtility.getIntegratedCircuit(24)) + .fluidInputs( + GGMaterial.ether.getFluidOrGas(1000), + Materials.Fluorine.getGas(40000), + Materials.Ice.getSolid(8000)) + .fluidOutputs(GGMaterial.antimonyPentafluorideSolution.getFluidOrGas(8000)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(multiblockChemicalReactorRecipes); + + CrackRecipeAdder.addUniversalDistillationRecipe( + GGMaterial.antimonyPentafluorideSolution.getFluidOrGas(4000), + new FluidStack[] { GGMaterial.antimonyPentafluoride.getFluidOrGas(4000), + GGMaterial.ether.getFluidOrGas(500) }, + GTValues.NI, + 5 * SECONDS, + TierEU.RECIPE_MV); + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Plastic, 2), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1), + GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Concrete.getMolten(2304)) + .itemOutputs(ItemRefer.Coolant_Tower.get(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + } + + public static void InitLoadRecipe() { + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_U_Depleted_1.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(1), + Materials.Uranium.getDust(8), + Materials.Plutonium.getDust(2), + Materials.Graphite.getDust(8), + Materials.Uranium235.getDust(1), + Materials.Plutonium241.getDust(1)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(WerkstoffLoader.Neon.getFluidOrGas(32)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_U_Depleted_2.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(2), + Materials.Uranium.getDust(16), + Materials.Plutonium.getDust(4), + Materials.Graphite.getDust(16), + Materials.Uranium235.getDust(2), + Materials.Plutonium241.getDust(2)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(WerkstoffLoader.Neon.getFluidOrGas(64)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_U_Depleted_4.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(4), + Materials.Uranium.getDust(32), + Materials.Plutonium.getDust(8), + Materials.Graphite.getDust(32), + Materials.Uranium235.getDust(4), + Materials.Plutonium241.getDust(4)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(WerkstoffLoader.Neon.getFluidOrGas(128)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_Pu_Depleted_1.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(1), + Materials.Plutonium.getDust(5), + Materials.Plutonium241.getDust(2), + Materials.Carbon.getDust(2), + Materials.Uranium.getDust(1), + Materials.Uranium235.getDust(1)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(Materials.Argon.getGas(32)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_Pu_Depleted_2.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(2), + Materials.Plutonium.getDust(10), + Materials.Plutonium241.getDust(4), + Materials.Carbon.getDust(4), + Materials.Uranium.getDust(2), + Materials.Uranium235.getDust(2)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(Materials.Argon.getGas(64)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_Pu_Depleted_4.get(1)) + .itemOutputs( + ItemRefer.Advanced_Fuel_Rod.get(4), + Materials.Plutonium.getDust(20), + Materials.Plutonium241.getDust(8), + Materials.Carbon.getDust(8), + Materials.Uranium.getDust(4), + Materials.Uranium235.getDust(4)) + .outputChances(10000, 10000, 10000, 9000, 5000, 3000) + .fluidOutputs(Materials.Argon.getGas(128)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LPu_Depleted_1.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(1)) + .fluidOutputs(GGMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(250)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LPu_Depleted_2.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(2)) + .fluidOutputs(GGMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(500)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LPu_Depleted_4.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(4)) + .fluidOutputs(GGMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LU_Depleted_1.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(1)) + .fluidOutputs(GGMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(250)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LU_Depleted_2.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(2)) + .fluidOutputs(GGMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(500)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.Fuel_Rod_LU_Depleted_4.get(1)) + .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(4)) + .fluidOutputs(GGMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + Materials.Glowstone.getDust(4), + Materials.Redstone.getDust(2), + Materials.Aluminium.getDust(1), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(ItemRefer.High_Energy_Mixture.get(4)) + .duration(12 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.High_Energy_Mixture.get(2)) + .fluidInputs(Materials.PhosphoricAcid.getFluid(4000)) + .itemOutputs(GGMaterial.lumiinessence.get(OrePrefixes.dust, 1)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV / 2) + .addTo(fluidSolidifierRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + Materials.AnnealedCopper.getDust(4), + Materials.Ardite.getDust(2), + Materials.RedAlloy.getDust(2), + GTUtility.getIntegratedCircuit(4)) + .fluidInputs(Materials.Redstone.getMolten(288)) + .itemOutputs(GGMaterial.signalium.get(OrePrefixes.dust, 1)) + .duration(12 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + Materials.TinAlloy.getDust(4), + Materials.SterlingSilver.getDust(2), + GGMaterial.lumiinessence.get(OrePrefixes.dust, 2), + GTUtility.getIntegratedCircuit(4)) + .fluidInputs(Materials.Glowstone.getMolten(288)) + .itemOutputs(GGMaterial.lumiium.get(OrePrefixes.dust, 1)) + .duration(12 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(GGMaterial.enrichedNaquadahAlloy.getMolten(144), WerkstoffLoader.Oganesson.getFluidOrGas(250)) + .fluidOutputs(GGMaterial.metastableOganesson.getMolten(36)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(FUSION_THRESHOLD, 1_000_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.metastableOganesson.get(OrePrefixes.dust)) + .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(250)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(0) + .metadata(NKE_RANGE, computeRangeNKE(1100, 1000)) + .noOptimize() + .addTo(neutronActivatorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemRefer.HiC_T5.get(0)) + .fluidInputs( + GGMaterial.metastableOganesson.getMolten(1152), + GGMaterial.preciousMetalAlloy.getMolten(2304), + MaterialsUEVplus.SpaceTime.getMolten(288), + MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(5000)) + .fluidOutputs(GGMaterial.shirabon.getMolten(144)) + .duration(10 * SECONDS) + .eut(1_500_000_000) + .metadata(COIL_HEAT, 13500) + .addTo(plasmaForgeRecipes); + } + + public static float EHEEfficiencyMultiplier = 1.2f; + + public static void FinishLoadRecipe() { + for (GTRecipe plasmaFuel : RecipeMaps.plasmaFuels.getAllRecipes()) { + FluidStack tPlasma = GTUtility.getFluidForFilledItem(plasmaFuel.mInputs[0], true); + if (tPlasma == null) { + continue; + } + int tUnit = plasmaFuel.mSpecialValue; + if (tUnit > 500_000) { + tPlasma.amount = 25000; + } else if (tUnit > 300_000) { + tPlasma.amount = 10000; + } else if (tUnit > 100_000) { + tPlasma.amount = 2500; + } else if (tUnit > 10_000) { + tPlasma.amount = 500; + } else { + tPlasma.amount = 100; + } + + String tPlasmaName = FluidRegistry.getFluidName(tPlasma); + + if (tPlasmaName.split("\\.", 2).length == 2) { + String tOutName = tPlasmaName.split("\\.", 2)[1]; + FluidStack output = FluidRegistry.getFluidStack(tOutName, tPlasma.amount); + if (output == null) output = FluidRegistry.getFluidStack("molten." + tOutName, tPlasma.amount); + if (output != null) { + long waterAmount = (long) (tUnit * EHEEfficiencyMultiplier * tPlasma.amount / 160); + long criticalSteamAmount = (long) (tUnit * EHEEfficiencyMultiplier * tPlasma.amount / 100); + MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( + tPlasma, + output, + FluidRegistry.getFluidStack("ic2distilledwater", (int) waterAmount), + FluidRegistry.getFluidStack("ic2superheatedsteam", 0), // Plasma always outputs SC steam. + FluidRegistry.getFluidStack("supercriticalsteam", (int) criticalSteamAmount), + 1); + } + } + } + } +} diff --git a/src/main/java/goodgenerator/loader/RecipeLoader_02.java b/src/main/java/goodgenerator/loader/RecipeLoader_02.java deleted file mode 100644 index 59b139ff41..0000000000 --- a/src/main/java/goodgenerator/loader/RecipeLoader_02.java +++ /dev/null @@ -1,1878 +0,0 @@ -package goodgenerator.loader; - -import static com.github.technus.tectech.loader.recipe.BaseRecipeLoader.getItemContainer; -import static goodgenerator.api.recipe.GoodGeneratorRecipeMaps.neutronActivatorRecipes; -import static goodgenerator.api.recipe.GoodGeneratorRecipeMaps.preciseAssemblerRecipes; -import static goodgenerator.util.MyRecipeAdder.computeRangeNKE; -import static gregtech.api.enums.Mods.AppliedEnergistics2; -import static gregtech.api.enums.Mods.Avaritia; -import static gregtech.api.enums.Mods.GalacticraftMars; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; -import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.cannerRecipes; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; -import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; -import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; -import static gregtech.api.recipe.RecipeMaps.fusionRecipes; -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; -import static gregtech.api.recipe.RecipeMaps.plasmaForgeRecipes; -import static gregtech.api.recipe.RecipeMaps.unpackagerRecipes; -import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.FUSION_THRESHOLD; -import static gregtech.api.util.GT_RecipeConstants.NKE_RANGE; -import static gregtech.api.util.GT_RecipeConstants.PRECISE_ASSEMBLER_CASING_TIER; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; - -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.technus.tectech.recipe.TT_recipeAdder; - -import goodgenerator.items.MyMaterial; -import goodgenerator.util.CrackRecipeAdder; -import goodgenerator.util.ItemRefer; -import goodgenerator.util.MyRecipeAdder; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.recipe.RecipeMaps; -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 gtPlusPlus.core.item.chemistry.GenericChem; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import ic2.core.Ic2Items; - -public class RecipeLoader_02 { - - public static void RecipeLoad() { - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.StainlessSteel, 1), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlueAlloy, 1), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 32), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Beryllium, 32), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1)) - .itemOutputs(ItemRefer.Speeding_Pipe.get(1)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - // Compact MK1 Fusion Disassembly Recipe - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Compact_Fusion_Coil_T0.get(1)) - .itemOutputs(ItemList.Casing_Coil_Superconductor.get(3)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - - // Compact MK2 Fusion Disassembly Recipe - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Compact_Fusion_Coil_T1.get(1)) - .itemOutputs(ItemList.Casing_Fusion_Coil.get(3)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - - // Compact MK3 Fusion Disassembly Recipe - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Compact_Fusion_Coil_T2.get(1)) - .itemOutputs(ItemList.Casing_Fusion_Coil.get(3)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.zircaloy2, 500, 480, 2800, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.zircaloy2, 513, 480, 2800, false); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.zircaloy4, 500, 480, 2800, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.zircaloy4, 513, 480, 2800, false); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.incoloy903, 2400, 1920, 3700, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.adamantiumAlloy, 2500, 1920, 5500, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.marM200, 200, 7680, 5000, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.marM200, 220, 7680, 5000, false); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.signalium, 1600, 30720, 4000, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.lumiium, 1600, 30720, 4000, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.artheriumSn, 500, 122880, 6500, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.titaniumBetaC, 400, 7680, 5300, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.dalisenite, 800, 491520, 8700, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.hikarium, 1200, 30720, 5400, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.tairitsu, 1200, 1966080, 7400, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.preciousMetalAlloy, 2400, 7864320, 10000, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.enrichedNaquadahAlloy, 2400, 7864320, 11000, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.metastableOganesson, 600, 7864320, 12000, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.shirabon, 600, 31457280, 13000, true); - CrackRecipeAdder.reAddBlastRecipe(MyMaterial.atomicSeparationCatalyst, 35000, 120, 5000, false); - - GT_ModHandler.removeFurnaceSmelting(MyMaterial.dalisenite.get(OrePrefixes.dust)); // :doom: - - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.dalisenite.get(OrePrefixes.ingotHot, 1)) - .itemOutputs(MyMaterial.dalisenite.get(OrePrefixes.ingot, 1)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.shirabon.get(OrePrefixes.ingotHot, 1)) - .itemOutputs(MyMaterial.shirabon.get(OrePrefixes.ingot, 1)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_UHV) - .addTo(vacuumFreezerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - MyMaterial.zircaloy4.get(OrePrefixes.plate, 4), - MyMaterial.zircaloy2.get(OrePrefixes.ring, 2), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1), ItemRefer.High_Density_Uranium.get(1)) - .itemOutputs(ItemRefer.Fuel_Rod_U_1.get(1)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(cannerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_U_1.get(2), - MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ItemRefer.Fuel_Rod_U_2.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_U_2.get(2), - MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(ItemRefer.Fuel_Rod_U_4.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_U_1.get(4), - MyMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(ItemRefer.Fuel_Rod_U_4.get(1)) - .duration(11 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1), ItemRefer.High_Density_Plutonium.get(1)) - .itemOutputs(ItemRefer.Fuel_Rod_Pu_1.get(1)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(cannerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_Pu_1.get(2), - MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ItemRefer.Fuel_Rod_Pu_2.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_Pu_2.get(2), - MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(ItemRefer.Fuel_Rod_Pu_4.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_Pu_1.get(4), - MyMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(ItemRefer.Fuel_Rod_Pu_4.get(1)) - .duration(11 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - GT_ModHandler.addCraftingRecipe( - ItemRefer.YOTTank_Casing.get(1), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "BPB", "FOF", "BPB", 'B', - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackSteel, 1), 'P', - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.StainlessSteel, 1), 'F', - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1), 'O', - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1), }); - - GT_ModHandler.addCraftingRecipe( - ItemRefer.YOTTank.get(1), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "SPS", "ECE", "SLS", 'S', - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.BlueSteel, 1), 'P', ItemList.Cover_Screen.get(1), - 'E', "circuitData", 'L', GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Enderium, 1), 'C', - ItemRefer.YOTTank_Casing.get(1) }); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Output_IV.get(1), - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiPart", 1, 440), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.CertusQuartz, 8), - GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.Plastic.getMolten(144)) - .itemOutputs(Loaders.YFH) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Large_Fluid_Cell_Steel.get(12L), - GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Tin, 4), - GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.Plastic.getMolten(144)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T1.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Large_Fluid_Cell_Aluminium.get(3L), - GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Tin, 4), - GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.Plastic.getMolten(144)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T1.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Large_Fluid_Cell_StainlessSteel.get(2L), - GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Tin, 4), - GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.Plastic.getMolten(144)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T1.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Large_Fluid_Cell_Titanium.get(64L), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 8), - GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.BlackSteel, 4), - GT_Utility.getIntegratedCircuit(2)) - .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Large_Fluid_Cell_TungstenSteel.get(18L), - GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.BlackSteel, 4), - GT_Utility.getIntegratedCircuit(2)) - .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Large_Fluid_Cell_Chrome.get(4L), - GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.BlackSteel, 4), - GT_Utility.getIntegratedCircuit(2)) - .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fluid_Storage_Core_T1.get(32), - ItemRefer.Fluid_Storage_Core_T1.get(32), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.BlackSteel, 16), - GT_Utility.getIntegratedCircuit(10)) - .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T2.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null - ? FluidRegistry.getFluid("molten.indalloy140") - : FluidRegistry.getFluid("molten.solderingalloy"); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T2.get(1)) - .metadata(RESEARCH_TIME, 17 * MINUTES) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.StainlessSteel, 4), - ItemList.Electric_Pump_HV.get(8), - ItemList.Quantum_Tank_LV.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmium, 8), - GT_ModHandler.getModItem(GalacticraftMars.ID, "item.null", 1L, 6), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Polycaprolactam, 32)) - .fluidInputs(new FluidStack(solderIndalloy, 2304), Materials.Lubricant.getFluid(4000)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T3.get(1)) - .eut(TierEU.RECIPE_LuV) - .duration(20 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T3.get(1)) - .metadata(RESEARCH_TIME, 34 * MINUTES) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Titanium, 4), - ItemList.Electric_Pump_EV.get(8), - ItemList.Quantum_Tank_LV.get(4), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Europium, 8), - GT_ModHandler.getModItem(GalacticraftMars.ID, "item.null", 4L, 6), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.StyreneButadieneRubber, 64), - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.TungstenSteel, 64)) - .fluidInputs(new FluidStack(solderIndalloy, 18432), Materials.Lubricant.getFluid(16000)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T4.get(1)) - .eut(TierEU.RECIPE_ZPM) - .duration(20 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T4.get(1)) - .metadata(RESEARCH_TIME, 1 * HOURS + 8 * MINUTES) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.MysteriousCrystal, 4), - ItemList.Electric_Pump_IV.get(8), - ItemList.Quantum_Tank_HV.get(8), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Neutronium, 8), - GT_ModHandler.getModItem(GalacticraftMars.ID, "item.null", 16L, 6), - GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.Polycaprolactam, 24), - GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Titanium, 64)) - .fluidInputs( - Materials.Draconium.getMolten(2304), - Materials.Titanium.getMolten(288), - Materials.Lubricant.getFluid(64000)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T5.get(1)) - .eut(TierEU.RECIPE_UV) - .duration(20 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T5.get(1)) - .metadata(RESEARCH_TIME, 2 * HOURS + 15 * MINUTES) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 4), - ItemList.Electric_Pump_LuV.get(8), - ItemList.Quantum_Tank_EV.get(16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 16), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 16), - GT_ModHandler.getModItem(GalacticraftMars.ID, "item.null", 64L, 6), - ItemList.Machine_IV_Compressor.get(64)) - .fluidInputs( - Materials.Draconium.getMolten(2304), - Materials.Titanium.getMolten(288), - Materials.Lubricant.getFluid(64000)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T6.get(1)) - .eut(TierEU.RECIPE_UHV) - .duration(20 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T6.get(1)) - .metadata(RESEARCH_TIME, 4 * HOURS + 30 * MINUTES) - .itemInputs( - GT_ModHandler.getModItem(GalacticraftMars.ID, "item.null", 64L, 6), - ItemList.Electric_Pump_ZPM.get(8), - GT_ModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 1L, 0), - ItemList.Quantum_Tank_EV.get(32), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 8), - GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.InfinityCatalyst, 8), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 16)) - .fluidInputs( - Materials.Draconium.getMolten(23040), - new FluidStack(solderIndalloy, 2304), - Materials.InfinityCatalyst.getMolten(1140)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T7.get(1)) - .eut(TierEU.RECIPE_UEV) - .duration(20 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T7.get(1)) - .metadata(RESEARCH_TIME, 9 * HOURS) - .itemInputs( - GT_ModHandler.getModItem(GalacticraftMars.ID, "item.null", 64L, 6), - ItemList.Electric_Pump_UV.get(8), - GT_ModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 2L, 0), - ItemList.Quantum_Tank_EV.get(64), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 16), - GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.Infinity, 24), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 16)) - .fluidInputs( - Materials.Draconium.getMolten(36864), - new FluidStack(solderIndalloy, 30240), - Materials.InfinityCatalyst.getMolten(5670)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T8.get(1)) - .eut(TierEU.RECIPE_UIV) - .duration(20 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T8.get(1)) - .metadata(RESEARCH_TIME, 180 * HOURS) - .itemInputs( - GT_ModHandler.getModItem(GalacticraftMars.ID, "item.null", 64L, 6), - ItemList.Electric_Pump_UHV.get(8), - GT_ModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 2L, 0), - ItemList.Quantum_Tank_IV.get(8), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 32), - GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.Infinity, 36), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 8)) - .fluidInputs( - Materials.Draconium.getMolten(36864), - new FluidStack(solderIndalloy, 30240), - MaterialsUEVplus.TranscendentMetal.getMolten(1440), - Materials.InfinityCatalyst.getMolten(5670)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T9.get(1)) - .eut(TierEU.RECIPE_UMV) - .duration(20 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.Fluid_Storage_Core_T9.get(1)) - .metadata(RESEARCH_TIME, 360 * HOURS) - .itemInputs( - GT_ModHandler.getModItem(GalacticraftMars.ID, "item.null", 64L, 6), - ItemList.Electric_Pump_UEV.get(8), - GT_ModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 4L, 0), - ItemList.Quantum_Tank_IV.get(16), - GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 32), - GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, Materials.CosmicNeutronium, 24), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, MaterialsUEVplus.SpaceTime, 4)) - .fluidInputs( - Materials.Draconium.getMolten(36864), - new FluidStack(solderIndalloy, 46080), - MaterialsUEVplus.TranscendentMetal.getMolten(4320), - Materials.InfinityCatalyst.getMolten(17010)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T10.get(1)) - .eut(TierEU.RECIPE_UXV) - .duration(20 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1), - ItemRefer.Fluid_Storage_Core_T1.get(10), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 4), - ItemList.Electric_Pump_HV.get(8), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.StainlessSteel, 4), - GT_Utility.getIntegratedCircuit(5)) - .fluidInputs(Materials.Plastic.getMolten(144)) - .itemOutputs(ItemRefer.YOTTank_Cell_T1.get(1)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1), - ItemRefer.Fluid_Storage_Core_T2.get(10), - WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.plate, 4), - ItemList.Electric_Pump_EV.get(8), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Enderium, 4), - GT_Utility.getIntegratedCircuit(5)) - .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(144)) - .itemOutputs(ItemRefer.YOTTank_Cell_T2.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T2.get(1)) - .metadata(RESEARCH_TIME, 17 * MINUTES) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Naquadah, 1), - ItemRefer.Fluid_Storage_Core_T3.get(10), - new Object[] { OrePrefixes.circuit.get(Materials.LuV), 8 }, - ItemList.Electric_Pump_IV.get(8), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.NiobiumTitanium, 8), - MyMaterial.adamantiumAlloy.get(OrePrefixes.plate, 32)) - .fluidInputs( - Materials.Quantium.getMolten(1440), - FluidRegistry.getFluidStack("ic2coolant", 8000), - Materials.Lubricant.getFluid(8000)) - .itemOutputs(ItemRefer.YOTTank_Cell_T3.get(1)) - .eut(TierEU.RECIPE_LuV) - .duration(50 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T3.get(1)) - .metadata(RESEARCH_TIME, 34 * MINUTES) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1), - ItemRefer.Fluid_Storage_Core_T4.get(10), - new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 8 }, - ItemList.Electric_Pump_LuV.get(8), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.MysteriousCrystal, 8), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.ElectrumFlux, 32)) - .fluidInputs( - Materials.Draconium.getMolten(1440), - FluidRegistry.getFluidStack("ic2coolant", 16000), - Materials.Lubricant.getFluid(16000)) - .itemOutputs(ItemRefer.YOTTank_Cell_T4.get(1)) - .eut(TierEU.RECIPE_ZPM) - .duration(50 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T4.get(1)) - .metadata(RESEARCH_TIME, 1 * HOURS + 8 * MINUTES) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1), - ItemRefer.Fluid_Storage_Core_T5.get(10), - new Object[] { OrePrefixes.circuit.get(Materials.UV), 8 }, - ItemList.Electric_Pump_ZPM.get(8), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.DraconiumAwakened, 8), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 64)) - .fluidInputs( - Materials.Draconium.getMolten(1440), - FluidRegistry.getFluidStack("ic2coolant", 16000), - Materials.Lubricant.getFluid(16000)) - .itemOutputs(ItemRefer.YOTTank_Cell_T5.get(1)) - .eut(TierEU.RECIPE_UV) - .duration(50 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T5.get(1)) - .metadata(RESEARCH_TIME, 2 * HOURS + 15 * MINUTES) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), - ItemRefer.Fluid_Storage_Core_T6.get(2), - new Object[] { OrePrefixes.circuit.get(Materials.UHV), 8L }, - ItemList.Electric_Pump_UV.get(8), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.NetherStar, 8), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 64)) - .fluidInputs( - Materials.DraconiumAwakened.getMolten(1440), - FluidRegistry.getFluidStack("ic2coolant", 46080), - Materials.Lubricant.getFluid(32000)) - .itemOutputs(ItemRefer.YOTTank_Cell_T6.get(1)) - .eut(TierEU.RECIPE_UHV) - .duration(50 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T6.get(1)) - .metadata(RESEARCH_TIME, 4 * HOURS + 30 * MINUTES) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), - ItemRefer.Fluid_Storage_Core_T7.get(2), - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 8L }, - ItemList.Electric_Pump_UHV.get(8), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.NetherStar, 16), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 32), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 32)) - .fluidInputs( - Materials.DraconiumAwakened.getMolten(14400), - FluidRegistry.getFluidStack("supercoolant", 46080), - Materials.Lubricant.getFluid(46080)) - .itemOutputs(ItemRefer.YOTTank_Cell_T7.get(1)) - .eut(TierEU.RECIPE_UEV) - .duration(50 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T7.get(1)) - .metadata(RESEARCH_TIME, 9 * HOURS) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1), - ItemRefer.Fluid_Storage_Core_T8.get(2), - new Object[] { OrePrefixes.circuit.get(Materials.UIV), 8L }, - ItemList.Electric_Pump_UEV.get(8), - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 12), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.CosmicNeutronium, 12), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.DraconiumAwakened, 12), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 64)) - .fluidInputs( - Materials.DraconiumAwakened.getMolten(14400), - FluidRegistry.getFluidStack("supercoolant", 46080), - Materials.Lubricant.getFluid(46080)) - .itemOutputs(ItemRefer.YOTTank_Cell_T8.get(1)) - .eut(TierEU.RECIPE_UIV) - .duration(50 * SECONDS) - .addTo(AssemblyLine); - - if (NewHorizonsCoreMod.isModLoaded()) { - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T8.get(1)) - .metadata(RESEARCH_TIME, 18 * HOURS) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 2), - ItemRefer.Fluid_Storage_Core_T9.get(2), - new Object[] { OrePrefixes.circuit.get(Materials.UMV), 8L }, - ItemList.Electric_Pump_UIV.get(8), - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 12), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.CosmicNeutronium, 12), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.DraconiumAwakened, 12), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 64)) - .fluidInputs( - Materials.DraconiumAwakened.getMolten(14400), - FluidRegistry.getFluidStack("supercoolant", 46080), - Materials.Lubricant.getFluid(46080)) - .itemOutputs(ItemRefer.YOTTank_Cell_T9.get(1)) - .eut(TierEU.RECIPE_UMV) - .duration(50 * SECONDS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.YOTTank_Cell_T9.get(1)) - .metadata(RESEARCH_TIME, 36 * HOURS) - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 2), - ItemRefer.Fluid_Storage_Core_T10.get(2), - new Object[] { OrePrefixes.circuit.get(Materials.UXV), 12L }, - ItemList.Electric_Pump_UMV.get(8), - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 64), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.CosmicNeutronium, 12), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.DraconiumAwakened, 12), - GT_OreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 10)) - .fluidInputs( - Materials.DraconiumAwakened.getMolten(14400), - MaterialsUEVplus.TranscendentMetal.getMolten(1440), - FluidRegistry.getFluidStack("supercoolant", 46080), - Materials.Lubricant.getFluid(46080)) - .itemOutputs(ItemRefer.YOTTank_Cell_T10.get(1)) - .eut(TierEU.RECIPE_UXV) - .duration(50 * SECONDS) - .addTo(AssemblyLine); - } - - // Craft 2x64X Tier to 1X+1 Tier - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fluid_Storage_Core_T6.get(64), - ItemRefer.Fluid_Storage_Core_T6.get(64), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T7.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fluid_Storage_Core_T7.get(64), - ItemRefer.Fluid_Storage_Core_T7.get(64), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T8.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fluid_Storage_Core_T8.get(64), - ItemRefer.Fluid_Storage_Core_T8.get(64), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T9.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fluid_Storage_Core_T9.get(64), - ItemRefer.Fluid_Storage_Core_T9.get(64), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ItemRefer.Fluid_Storage_Core_T10.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.YOTTank_Cell_T1.get(1)) - .itemOutputs( - ItemRefer.Fluid_Storage_Core_T1.get(10), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.YOTTank_Cell_T2.get(1)) - .itemOutputs( - ItemRefer.Fluid_Storage_Core_T2.get(10), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.YOTTank_Cell_T3.get(1)) - .itemOutputs( - ItemRefer.Fluid_Storage_Core_T3.get(10), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Naquadah, 1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.YOTTank_Cell_T4.get(1)) - .itemOutputs( - ItemRefer.Fluid_Storage_Core_T4.get(10), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.YOTTank_Cell_T5.get(1)) - .itemOutputs( - ItemRefer.Fluid_Storage_Core_T5.get(10), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.YOTTank_Cell_T6.get(1)) - .itemOutputs( - ItemRefer.Fluid_Storage_Core_T6.get(2), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.YOTTank_Cell_T7.get(1)) - .itemOutputs( - ItemRefer.Fluid_Storage_Core_T7.get(2), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.YOTTank_Cell_T8.get(1)) - .itemOutputs( - ItemRefer.Fluid_Storage_Core_T8.get(2), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.YOTTank_Cell_T9.get(1)) - .itemOutputs( - ItemRefer.Fluid_Storage_Core_T9.get(2), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.YOTTank_Cell_T10.get(1)) - .itemOutputs( - ItemRefer.Fluid_Storage_Core_T10.get(2), - GT_OreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(unpackagerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(WerkstoffLoader.Tiberium.get(OrePrefixes.dust, 1)) - .itemOutputs( - WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1), - WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1)) - .outputChances(10000, 2000) - .fluidInputs(MyMaterial.naquadahGas.getFluidOrGas(250)) - .duration(400) - .eut(TierEU.RECIPE_HV) - .addTo(autoclaveRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Firestone.getGems(1)) - .fluidInputs(MyMaterial.lightNaquadahFuel.getFluidOrGas(144)) - .itemOutputs(WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Diamond.getGems(1)) - .fluidInputs(MyMaterial.heavyNaquadahFuel.getFluidOrGas(144)) - .itemOutputs(WerkstoffLoader.Tiberium.get(OrePrefixes.gem, 1)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.HeavyFuel.getFluid(1000)) - .fluidOutputs( - Materials.Toluene.getFluid(400), - Materials.Benzene.getFluid(400), - Materials.Phenol.getFluid(250)) - .duration(6 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(distillationTowerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Coal.getGems(1)) - .itemOutputs(Materials.Ash.getDust(1)) - .outputChances(10) - .fluidOutputs(FluidRegistry.getFluidStack("fluid.coaltar", 250)) - .duration(3 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(fluidExtractionRecipes); - - if (OreDictionary.getOres("fuelCoke") - .size() > 0) { - GT_Values.RA.stdBuilder() - .itemInputs( - OreDictionary.getOres("fuelCoke") - .get(0)) - .itemOutputs(Materials.Ash.getDust(1)) - .outputChances(10) - .fluidOutputs(FluidRegistry.getFluidStack("fluid.coaltar", 250)) - .duration(3 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(fluidExtractionRecipes); - } - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(24)) - .fluidInputs(FluidRegistry.getFluidStack("fluid.coaltaroil", 100)) - .fluidOutputs(MyMaterial.cyclopentadiene.getFluidOrGas(30)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(distilleryRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(24)) - .fluidInputs(Materials.WoodTar.getFluid(500)) - .fluidOutputs(MyMaterial.cyclopentadiene.getFluidOrGas(20)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(distilleryRecipes); - - // FeCl2 + Cl = FeCl3 - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.ferrousChloride.get(OrePrefixes.cell, 1), GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.Chlorine.getGas(1000)) - .itemOutputs(Materials.IronIIIChloride.getCells(1)) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // FeCl3 + H = FeCl2 + HCl - GT_Values.RA.stdBuilder() - .itemInputs(Materials.IronIIIChloride.getCells(1), GT_Utility.getIntegratedCircuit(7)) - .fluidInputs(Materials.Hydrogen.getGas(1000)) - .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000)) - .itemOutputs(MyMaterial.ferrousChloride.get(OrePrefixes.cell, 1)) - .duration(4 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(UniversalChemical); - - // NH3 + 2C2H6O = C4H11N + 2H2O - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Ammonia.getCells(1), GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.Ethanol.getFluid(2000)) - .fluidOutputs(Materials.Water.getFluid(2000)) - .itemOutputs(MyMaterial.diethylamine.get(OrePrefixes.cell, 1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(2)) - .fluidInputs( - MyMaterial.cyclopentadiene.getFluidOrGas(2000), - MyMaterial.ferrousChloride.getFluidOrGas(1000), - MyMaterial.diethylamine.getFluidOrGas(8000), - Materials.Ice.getSolid(4000)) - .fluidOutputs(MyMaterial.impureFerroceneMixture.getFluidOrGas(15000)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_MV) - .addTo(multiblockChemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.ether.get(OrePrefixes.cell, 1), GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(MyMaterial.impureFerroceneMixture.getFluidOrGas(7500)) - .itemOutputs(MyMaterial.ferroceneSolution.get(OrePrefixes.cell, 1)) - .fluidOutputs(MyMaterial.ferroceneWaste.getFluidOrGas(5000)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - CrackRecipeAdder.addUniversalDistillationRecipe( - MyMaterial.ferroceneWaste.getFluidOrGas(1000), - new FluidStack[] { Materials.Water.getFluid(400), MyMaterial.diethylamine.getFluidOrGas(800), - MyMaterial.ether.getFluidOrGas(500) }, - GT_Values.NI, - 30 * SECONDS, - TierEU.RECIPE_MV); - - CrackRecipeAdder.addUniversalDistillationRecipe( - MyMaterial.ferroceneSolution.getFluidOrGas(2000), - new FluidStack[] { MyMaterial.ether.getFluidOrGas(1000) }, - MyMaterial.ferrocene.get(OrePrefixes.dust, 1), - 30 * SECONDS, - TierEU.RECIPE_MV); - - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.ferrocene.get(OrePrefixes.dust, 4), Materials.SodiumHydroxide.getDust(8)) - .fluidInputs( - FluidRegistry.getFluidStack("fluid.kerosene", 40000), - Materials.Naphtha.getFluid(3000), - MyMaterial.diethylamine.getFluidOrGas(1000)) - .fluidOutputs(MyMaterial.ironedKerosene.getFluidOrGas(44000)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(multiblockChemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.ferrocene.get(OrePrefixes.dust, 4)) - .fluidInputs( - FluidRegistry.getFluidStack("combustionpromotor", 4000), - Materials.Naphtha.getFluid(40000), - Materials.LightFuel.getFluid(3000), - Materials.LPG.getFluid(1000), - Materials.Tetranitromethane.getFluid(2000)) - .fluidOutputs(MyMaterial.ironedFuel.getFluidOrGas(50000)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(multiblockChemicalReactorRecipes); - - GT_ModHandler.addCraftingRecipe( - ItemRefer.Combustion_Generator_EV.get(1), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "PCP", "MHM", "GWG", 'G', - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Titanium, 1), 'C', "circuitData", 'W', - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 1), 'P', - ItemList.Electric_Piston_EV, 'H', ItemList.Hull_EV, 'M', ItemList.Electric_Motor_EV }); - - GT_ModHandler.addCraftingRecipe( - ItemRefer.Combustion_Generator_IV.get(1), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "PCP", "MHM", "GWG", 'G', - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.TungstenSteel, 1), 'C', "circuitElite", 'W', - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 1), 'P', - ItemList.Electric_Piston_IV, 'H', ItemList.Hull_IV, 'M', ItemList.Electric_Motor_IV }); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1)) - .fluidInputs(MyMaterial.uraniumBasedLiquidFuelExcited.getFluidOrGas(250)) - .itemOutputs(ItemRefer.Fuel_Rod_LU_1.get(1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(fluidCannerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Advanced_Fuel_Rod.get(1)) - .fluidInputs(MyMaterial.plutoniumBasedLiquidFuelExcited.getFluidOrGas(250)) - .itemOutputs(ItemRefer.Fuel_Rod_LPu_1.get(1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(fluidCannerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_LPu_1.get(2), - MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ItemRefer.Fuel_Rod_LPu_2.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_LPu_2.get(2), - MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(ItemRefer.Fuel_Rod_LPu_4.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_LPu_1.get(4), - MyMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(ItemRefer.Fuel_Rod_LPu_4.get(1)) - .duration(11 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_LU_1.get(2), - MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ItemRefer.Fuel_Rod_LU_2.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_LU_2.get(2), - MyMaterial.zircaloy2.get(OrePrefixes.stick, 4), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(ItemRefer.Fuel_Rod_LU_4.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.Fuel_Rod_LU_1.get(4), - MyMaterial.zircaloy2.get(OrePrefixes.stickLong, 6), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(ItemRefer.Fuel_Rod_LU_4.get(1)) - .duration(11 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( - FluidRegistry.getFluidStack("lava", 20000), - FluidRegistry.getFluidStack("ic2pahoehoelava", 20000), - FluidRegistry.getFluidStack("ic2distilledwater", 20000), - FluidRegistry.getFluidStack("steam", 3200000), - FluidRegistry.getFluidStack("ic2superheatedsteam", 1600000), - 10000); - - MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( - FluidRegistry.getFluidStack("ic2hotcoolant", 16000), - FluidRegistry.getFluidStack("ic2coolant", 16000), - FluidRegistry.getFluidStack("ic2distilledwater", 20000), - FluidRegistry.getFluidStack("ic2superheatedsteam", 3200000), - FluidRegistry.getFluidStack("supercriticalsteam", 32000), - 8000); - - MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( - FluidRegistry.getFluidStack("molten.solarsalthot", 3200), - FluidRegistry.getFluidStack("molten.solarsaltcold", 3200), - FluidRegistry.getFluidStack("ic2distilledwater", 20000), - FluidRegistry.getFluidStack("ic2superheatedsteam", 3200000), - FluidRegistry.getFluidStack("supercriticalsteam", 32000), - 1600); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Lepidolite, 1)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(1000)) - .itemOutputs( - Materials.RockSalt.getDust(1), - MyMaterial.lithiumChloride.get(OrePrefixes.dust, 3), - Materials.Cryolite.getDust(4)) - .outputChances(8000, 8000, 8000) - .duration(7 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.marM200.get(OrePrefixes.ingot, 18), Materials.Cerium.getIngots(1)) - .fluidInputs(MyMaterial.lithiumChloride.getMolten(144)) - .itemOutputs(MyMaterial.marCeM200.get(OrePrefixes.ingotHot, 19)) - .duration(4 * MINUTES + 45 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .metadata(COIL_HEAT, 5400) - .addTo(blastFurnaceRecipes); - - GT_ModHandler.addCraftingRecipe( - ItemRefer.SC_Turbine_Casing.get(1), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "PhP", "GCG", "PwP", 'G', MyMaterial.marM200.get(OrePrefixes.gearGt, 1), 'C', - ItemList.Casing_Turbine.get(1), 'P', MyMaterial.marCeM200.get(OrePrefixes.plate, 1), }); - - GT_Values.RA.stdBuilder() - .itemInputs( - MyMaterial.marM200.get(OrePrefixes.gearGt, 2), - MyMaterial.marCeM200.get(OrePrefixes.plate, 4), - ItemList.Casing_Turbine.get(1)) - .itemOutputs(ItemRefer.SC_Turbine_Casing.get(1)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_ModHandler.addCraftingRecipe( - ItemRefer.SC_Fluid_Turbine.get(1), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "NPN", "GHG", "IPI", 'N', "circuitMaster", 'P', MyMaterial.marM200.get(OrePrefixes.plate, 1), - 'H', ItemList.Hull_IV.get(1), 'G', MyMaterial.marCeM200.get(OrePrefixes.gearGt, 1), 'I', - MyMaterial.incoloy903.get(OrePrefixes.pipeLarge, 1) }); - - GT_Values.RA.stdBuilder() - .itemInputs( - MyMaterial.marM200.get(OrePrefixes.plate, 2), - MyMaterial.marCeM200.get(OrePrefixes.gearGt, 2), - MyMaterial.incoloy903.get(OrePrefixes.pipeLarge, 2), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), - ItemList.Hull_IV.get(1)) - .itemOutputs(ItemRefer.SC_Fluid_Turbine.get(1)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - MyMaterial.incoloy903.get(OrePrefixes.plate, 4), - MyMaterial.marCeM200.get(OrePrefixes.plate, 4), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NiobiumTitanium, 1), - GT_Utility.getIntegratedCircuit(8)) - .itemOutputs(ItemRefer.Pressure_Resistant_Wall.get(1)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_ModHandler.addCraftingRecipe( - ItemRefer.Extreme_Heat_Exchanger.get(1), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "EPE", "PHP", "SPS", 'P', - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.TungstenSteel, 1), 'H', - ItemList.Hull_IV.get(1), 'S', MyMaterial.marM200.get(OrePrefixes.plate, 1), 'E', - GT_ModHandler.getIC2Item("reactorHeatSwitchDiamond", 1L, 1) }); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Salty_Root.get(1)) - .fluidInputs(GT_ModHandler.getWater(100)) - .itemOutputs(Materials.Salt.getDust(1), Materials.RockSalt.getDust(1), Materials.Saltpeter.getDust(1)) - .outputChances(9500, 8000, 5000) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(chemicalBathRecipes); - - if (NewHorizonsCoreMod.isModLoaded()) { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Robot_Arm_IV.get(4), - ItemRefer.HiC_T1.get(4), - ItemList.Tool_DataOrb.get(3), - GT_OreDictUnificator.get(OrePrefixes.cableGt08, Materials.Titanium, 4), - MyMaterial.hikarium.get(OrePrefixes.gearGt, 4), - MyMaterial.marM200.get(OrePrefixes.plateDouble, 2), - ItemRefer.IC2_Ir_Plate.get(2), - MyMaterial.lumiium.get(OrePrefixes.bolt, 48)) - .fluidInputs(Materials.Palladium.getMolten(1152)) - .itemOutputs(ItemRefer.Precise_Assembler.get(1)) - .duration(1 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.HiC_T1.get(2), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedDiamondCrystalChip", 8), - ItemList.Circuit_Chip_NAND.get(16), - GT_ModHandler.getIC2Item("reactorVentCore", 1L, 1)) - .itemOutputs(ItemRefer.HiC_T2.get(1)) - .fluidInputs( - Materials.Plastic.getMolten(288), - MyMaterial.signalium.getMolten(144), - MyMaterial.lumiium.getMolten(72), - Materials.Enderium.getMolten(72)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 1) - .noOptimize() - .addTo(preciseAssemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.HiC_T1.get(2), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedDiamondCrystalChip", 8), - ItemList.Circuit_Chip_NAND.get(16), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Aluminium, 2)) - .itemOutputs(ItemRefer.HiC_T2.get(1)) - .fluidInputs( - Materials.Plastic.getMolten(288), - MyMaterial.signalium.getMolten(144), - MyMaterial.lumiium.getMolten(72), - Materials.Enderium.getMolten(72)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 1) - .noOptimize() - .addTo(preciseAssemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.HiC_T2.get(2), - ItemList.Circuit_Parts_Crystal_Chip_Master.get(8), - ItemList.Circuit_Chip_CrystalSoC2.get(1), - GT_ModHandler.getIC2Item("reactorVentDiamond", 1L, 1)) - .itemOutputs(ItemRefer.HiC_T3.get(1)) - .fluidInputs( - MyMaterial.adamantiumAlloy.getMolten(576), - MyMaterial.signalium.getMolten(288), - MyMaterial.lumiium.getMolten(144), - Materials.TungstenCarbide.getMolten(72)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 2) - .noOptimize() - .addTo(preciseAssemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.HiC_T2.get(2), - ItemList.Circuit_Parts_Crystal_Chip_Master.get(8), - ItemList.Circuit_Chip_CrystalSoC2.get(1), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 2)) - .itemOutputs(ItemRefer.HiC_T3.get(1)) - .fluidInputs( - MyMaterial.adamantiumAlloy.getMolten(576), - MyMaterial.signalium.getMolten(288), - MyMaterial.lumiium.getMolten(144), - Materials.TungstenCarbide.getMolten(72)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 2) - .noOptimize() - .addTo(preciseAssemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.HiC_T3.get(2), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedEnergyChip", 8), - ItemList.Circuit_Chip_QuantumCPU.get(16), - GT_ModHandler.getIC2Item("reactorVentGold", 1L, 1)) - .itemOutputs(ItemRefer.HiC_T4.get(1)) - .fluidInputs( - MyMaterial.marM200.getMolten(1152), - MyMaterial.signalium.getMolten(576), - MyMaterial.lumiium.getMolten(288), - MyMaterial.artheriumSn.getMolten(144)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) - .noOptimize() - .addTo(preciseAssemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.HiC_T3.get(2), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedEnergyChip", 8), - ItemList.Circuit_Chip_QuantumCPU.get(16), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.EnergeticAlloy, 2)) - .itemOutputs(ItemRefer.HiC_T4.get(1)) - .fluidInputs( - MyMaterial.marM200.getMolten(1152), - MyMaterial.signalium.getMolten(576), - MyMaterial.lumiium.getMolten(288), - MyMaterial.artheriumSn.getMolten(144)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) - .noOptimize() - .addTo(preciseAssemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.HiC_T4.get(2), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedManyullynCrystalChip", 8), - ItemList.Circuit_Chip_BioCPU.get(1), - Ic2Items.reactorVentSpread) - .itemOutputs(ItemRefer.HiC_T5.get(1)) - .fluidInputs( - MyMaterial.titaniumBetaC.getMolten(1728), - MyMaterial.signalium.getMolten(1152), - MyMaterial.lumiium.getMolten(576), - MyMaterial.dalisenite.getMolten(288)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) - .noOptimize() - .addTo(preciseAssemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemRefer.HiC_T4.get(2), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngravedManyullynCrystalChip", 8), - ItemList.Circuit_Chip_BioCPU.get(1), - GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.TungstenCarbide, 2)) - .itemOutputs(ItemRefer.HiC_T5.get(1)) - .fluidInputs( - MyMaterial.titaniumBetaC.getMolten(1728), - MyMaterial.signalium.getMolten(1152), - MyMaterial.lumiium.getMolten(576), - MyMaterial.dalisenite.getMolten(288)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) - .noOptimize() - .addTo(preciseAssemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_LuV.get(3), - ItemList.Robot_Arm_EV.get(2), - GT_OreDictUnificator.get(OrePrefixes.cableGt02, Materials.Osmiridium, 2), - MyMaterial.marM200.get(OrePrefixes.plateDouble, 2), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1), - ELEMENT.getInstance().RUTHENIUM.getBolt(32), - GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Platinum, 8)) - .fluidInputs(MyMaterial.zircaloy4.getMolten(576)) - .itemOutputs(ItemRefer.Imprecise_Electronic_Unit.get(2)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_ZPM.get(3), - ItemList.Robot_Arm_IV.get(2), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, MyMaterial.lumiium.getBridgeMaterial(), 2), - MyMaterial.marCeM200.get(OrePrefixes.plateDouble, 2), - ItemRefer.HiC_T1.get(1), - MyMaterial.signalium.get(OrePrefixes.bolt, 32), - MyMaterial.titaniumBetaC.get(OrePrefixes.gearGtSmall, 8)) - .fluidInputs(Materials.BlackSteel.getMolten(576)) - .itemOutputs(ItemRefer.Precise_Electronic_Unit_T1.get(2)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_UV.get(3), - ItemList.Robot_Arm_LuV.get(2), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.ElectrumFlux, 4), - ItemRefer.HiC_T2.get(1), - ItemRefer.Precise_Electronic_Unit_T1.get(1), - MyMaterial.marCeM200.get(OrePrefixes.bolt, 32), - MyMaterial.artheriumSn.get(OrePrefixes.gearGtSmall, 8)) - .fluidInputs(MyMaterial.adamantiumAlloy.getMolten(1152)) - .itemOutputs(ItemRefer.Precise_Electronic_Unit_T2.get(4)) - .duration(4 * MINUTES) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_MAX.get(3), - ItemList.Field_Generator_ZPM.get(2), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 4), - ItemRefer.HiC_T3.get(1), - ItemRefer.Precise_Electronic_Unit_T2.get(1), - MyMaterial.titaniumBetaC.get(OrePrefixes.bolt, 32), - MyMaterial.dalisenite.get(OrePrefixes.gearGtSmall, 8)) - .fluidInputs(MyMaterial.artheriumSn.getMolten(1152)) - .itemOutputs(ItemRefer.Precise_Electronic_Unit_T3.get(4)) - .duration(4 * MINUTES) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - getItemContainer("Casing_UEV").get(3), - ItemList.Field_Generator_UV.get(2), - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 8), - ItemRefer.HiC_T4.get(1), - ItemRefer.Precise_Electronic_Unit_T3.get(1), - MyMaterial.enrichedNaquadahAlloy.get(OrePrefixes.bolt, 32), - MyMaterial.tairitsu.get(OrePrefixes.gearGtSmall, 8)) - .fluidInputs(MyMaterial.preciousMetalAlloy.getMolten(1152)) - .itemOutputs(ItemRefer.Precise_Electronic_Unit_T4.get(4)) - .duration(4 * MINUTES) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - } - - // Compact MK1 Fusion Coil - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_Coil_Superconductor.get(3), - ItemRefer.HiC_T2.get(1), - ItemRefer.Special_Ceramics_Plate.get(2)) - .itemOutputs(ItemRefer.Compact_Fusion_Coil_T0.get(1)) - .fluidInputs(MyMaterial.marM200.getMolten(1152), MyMaterial.zircaloy4.getMolten(288)) - .duration(60 * SECONDS) - .eut(9001) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 1) - .noOptimize() - .addTo(preciseAssemblerRecipes); - // Compact MK2 Fusion Coil - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_Fusion_Coil.get(3), - ItemRefer.Quartz_Crystal_Resonator.get(2), - ItemRefer.HiC_T3.get(1)) - .itemOutputs(ItemRefer.Compact_Fusion_Coil_T1.get(1)) - .fluidInputs(MyMaterial.artheriumSn.getMolten(576), MyMaterial.titaniumBetaC.getMolten(144)) - .duration(40 * SECONDS) - .eut(14000) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 2) - .noOptimize() - .addTo(preciseAssemblerRecipes); - // Compact MK3 Fusion Coil - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_Fusion_Coil.get(3), - ItemRefer.Radiation_Protection_Plate.get(2), - ItemList.QuantumStar.get(4), - ItemRefer.HiC_T4.get(1)) - .itemOutputs(ItemRefer.Compact_Fusion_Coil_T2.get(1)) - .fluidInputs(MyMaterial.dalisenite.getMolten(576), MyMaterial.hikarium.getMolten(144)) - .duration(40 * SECONDS) - .eut(114514) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) - .noOptimize() - .addTo(preciseAssemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.FusionComputer_LuV.get(48), - ItemRefer.HiC_T1.get(8), - MyMaterial.marCeM200.get(OrePrefixes.plate, 32), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 8), - ItemList.Circuit_Wafer_HPIC.get(16), - ItemList.Field_Generator_LuV.get(4), - MyMaterial.marM200.get(OrePrefixes.stickLong, 8)) - .fluidInputs(MyMaterial.adamantiumAlloy.getMolten(9216)) - .itemOutputs(ItemRefer.Compact_Fusion_MK1.get(1)) - .duration(1 * MINUTES) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.Compact_Fusion_MK1.get(1)) - .metadata(RESEARCH_TIME, 20 * MINUTES) - .itemInputs( - ItemList.FusionComputer_ZPMV.get(48), - new Object[] { "circuitUltimate", 1 }, - new Object[] { "circuitUltimate", 1 }, - new Object[] { "circuitUltimate", 1 }, - new Object[] { "circuitUltimate", 1 }, - ItemList.Circuit_Wafer_UHPIC.get(32), - ItemList.ZPM_Coil.get(16), - ItemList.Neutron_Reflector.get(4), - ItemRefer.HiC_T2.get(8), - ItemList.Field_Generator_ZPM.get(8), - MyMaterial.artheriumSn.get(OrePrefixes.gearGtSmall, 32)) - .fluidInputs( - MyMaterial.marCeM200.getMolten(2304), - WerkstoffLoader.HDCS.getMolten(1152), - MyMaterial.artheriumSn.getMolten(288)) - .itemOutputs(ItemRefer.Compact_Fusion_MK2.get(1)) - .eut(TierEU.RECIPE_ZPM / 2) - .duration(5 * MINUTES) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemRefer.Compact_Fusion_MK2.get(1)) - .metadata(RESEARCH_TIME, 20 * MINUTES) - .itemInputs( - ItemList.FusionComputer_UV.get(48), - new Object[] { "circuitSuperconductor", 1 }, - new Object[] { "circuitSuperconductor", 1 }, - new Object[] { "circuitSuperconductor", 1 }, - new Object[] { "circuitSuperconductor", 1 }, - ItemList.Circuit_Wafer_NPIC.get(64), - ItemList.UV_Coil.get(16), - ItemRefer.Advanced_Radiation_Protection_Plate.get(8), - ItemRefer.HiC_T3.get(8), - ItemList.Field_Generator_UV.get(8), - WerkstoffLoader.HDCS.get(OrePrefixes.gearGtSmall, 64)) - .fluidInputs( - MyMaterial.titaniumBetaC.getMolten(2304), - MyMaterial.dalisenite.getMolten(1152), - Materials.Americium.getMolten(288)) - .itemOutputs(ItemRefer.Compact_Fusion_MK3.get(1)) - .eut(TierEU.RECIPE_ZPM) - .duration(5 * MINUTES) - .addTo(AssemblyLine); - - // Compact MK4 Fusion Coil - GT_Values.RA.stdBuilder() - .itemInputs(GregtechItemList.Casing_Fusion_Internal.get(3), ItemRefer.HiC_T5.get(1), CI.getEnergyCore(4, 1)) - .itemOutputs(ItemRefer.Compact_Fusion_Coil_T3.get(1)) - .fluidInputs( - FluidRegistry.getFluidStack("molten.energycrystal", 1152), - FluidRegistry.getFluidStack("molten.laurenium", 144)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) - .noOptimize() - .addTo(preciseAssemblerRecipes); - - // Compact MK4 Fusion Disassembly Recipe - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Compact_Fusion_Coil_T3.get(1)) - .itemOutputs(GregtechItemList.Casing_Fusion_Internal.get(3)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemRefer.Compact_Fusion_MK3.get(1), - 2_560_000, - 4_096, - (int) TierEU.RECIPE_UHV, - 256, - new Object[] { GregtechItemList.FusionComputer_UV2.get(48), new Object[] { "circuitInfinite", 1 }, - new Object[] { "circuitInfinite", 1 }, new Object[] { "circuitInfinite", 1 }, - new Object[] { "circuitInfinite", 1 }, ItemList.Circuit_Wafer_PPIC.get(64), ItemList.UHV_Coil.get(16), - ALLOY.TITANSTEEL.getPlateDense(8), ItemRefer.HiC_T4.get(8), ItemList.Field_Generator_UHV.get(8), - MyMaterial.enrichedNaquadahAlloy.get(OrePrefixes.gearGtSmall, 64) }, - new FluidStack[] { GenericChem.TEFLON.getFluidStack(2304), MyMaterial.dalisenite.getMolten(1152), - ALLOY.BOTMIUM.getFluidStack(288) }, - ItemRefer.Compact_Fusion_MK4.get(1), - 6000, - (int) TierEU.RECIPE_UV); - - // Compact MK5 Fusion Coil - GT_Values.RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Fusion_Internal2.get(3), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 1), - ItemRefer.HiC_T5.get(4), - CI.getEnergyCore(5, 1)) - .itemOutputs(ItemRefer.Compact_Fusion_Coil_T4.get(1)) - .fluidInputs(ALLOY.BLACK_TITANIUM.getFluidStack(1152), MyMaterial.metastableOganesson.getMolten(576)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .metadata(PRECISE_ASSEMBLER_CASING_TIER, 3) - .noOptimize() - .addTo(preciseAssemblerRecipes); - - // Compact MK5 Computer - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemRefer.Compact_Fusion_MK4.get(1), - 10_240_000, - 16_384, - (int) TierEU.RECIPE_UEV, - 256, - new Object[] { GregtechItemList.FusionComputer_UV3.get(48), new Object[] { "circuitBio", 1 }, - new Object[] { "circuitBio", 1 }, new Object[] { "circuitBio", 1 }, new Object[] { "circuitBio", 1 }, - ItemList.Circuit_Wafer_QPIC.get(64), ItemList.UHV_Coil.get(64), - ELEMENT.STANDALONE.HYPOGEN.getPlateDense(8), ItemRefer.HiC_T5.get(8), - ItemList.Field_Generator_UEV.get(8), MyMaterial.metastableOganesson.get(OrePrefixes.gearGtSmall, 64) }, - new FluidStack[] { MyMaterial.tairitsu.getMolten(2304), ALLOY.OCTIRON.getFluidStack(1152), - ELEMENT.STANDALONE.RHUGNOR.getFluidStack(288) }, - ItemRefer.Compact_Fusion_MK5.get(1), - 6000, - (int) TierEU.RECIPE_UHV); - - // Compact MK5 Fusion Disassembly Recipe - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Compact_Fusion_Coil_T4.get(1)) - .itemOutputs(GregtechItemList.Casing_Fusion_Internal2.get(3)) - .duration(1 * MINUTES) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Antimony.getDust(8), GT_Utility.getIntegratedCircuit(24)) - .fluidInputs( - MyMaterial.ether.getFluidOrGas(1000), - Materials.Fluorine.getGas(40000), - Materials.Ice.getSolid(8000)) - .fluidOutputs(MyMaterial.antimonyPentafluorideSolution.getFluidOrGas(8000)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(multiblockChemicalReactorRecipes); - - CrackRecipeAdder.addUniversalDistillationRecipe( - MyMaterial.antimonyPentafluorideSolution.getFluidOrGas(4000), - new FluidStack[] { MyMaterial.antimonyPentafluoride.getFluidOrGas(4000), - MyMaterial.ether.getFluidOrGas(500) }, - GT_Values.NI, - 5 * SECONDS, - TierEU.RECIPE_MV); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Plastic, 2), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1), - GT_Utility.getIntegratedCircuit(1)) - .fluidInputs(Materials.Concrete.getMolten(2304)) - .itemOutputs(ItemRefer.Coolant_Tower.get(1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - } - - public static void InitLoadRecipe() { - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_U_Depleted_1.get(1)) - .itemOutputs( - ItemRefer.Advanced_Fuel_Rod.get(1), - Materials.Uranium.getDust(8), - Materials.Plutonium.getDust(2), - Materials.Graphite.getDust(8), - Materials.Uranium235.getDust(1), - Materials.Plutonium241.getDust(1)) - .outputChances(10000, 10000, 10000, 9000, 5000, 3000) - .fluidOutputs(WerkstoffLoader.Neon.getFluidOrGas(32)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_U_Depleted_2.get(1)) - .itemOutputs( - ItemRefer.Advanced_Fuel_Rod.get(2), - Materials.Uranium.getDust(16), - Materials.Plutonium.getDust(4), - Materials.Graphite.getDust(16), - Materials.Uranium235.getDust(2), - Materials.Plutonium241.getDust(2)) - .outputChances(10000, 10000, 10000, 9000, 5000, 3000) - .fluidOutputs(WerkstoffLoader.Neon.getFluidOrGas(64)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_U_Depleted_4.get(1)) - .itemOutputs( - ItemRefer.Advanced_Fuel_Rod.get(4), - Materials.Uranium.getDust(32), - Materials.Plutonium.getDust(8), - Materials.Graphite.getDust(32), - Materials.Uranium235.getDust(4), - Materials.Plutonium241.getDust(4)) - .outputChances(10000, 10000, 10000, 9000, 5000, 3000) - .fluidOutputs(WerkstoffLoader.Neon.getFluidOrGas(128)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_Pu_Depleted_1.get(1)) - .itemOutputs( - ItemRefer.Advanced_Fuel_Rod.get(1), - Materials.Plutonium.getDust(5), - Materials.Plutonium241.getDust(2), - Materials.Carbon.getDust(2), - Materials.Uranium.getDust(1), - Materials.Uranium235.getDust(1)) - .outputChances(10000, 10000, 10000, 9000, 5000, 3000) - .fluidOutputs(Materials.Argon.getGas(32)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_Pu_Depleted_2.get(1)) - .itemOutputs( - ItemRefer.Advanced_Fuel_Rod.get(2), - Materials.Plutonium.getDust(10), - Materials.Plutonium241.getDust(4), - Materials.Carbon.getDust(4), - Materials.Uranium.getDust(2), - Materials.Uranium235.getDust(2)) - .outputChances(10000, 10000, 10000, 9000, 5000, 3000) - .fluidOutputs(Materials.Argon.getGas(64)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_Pu_Depleted_4.get(1)) - .itemOutputs( - ItemRefer.Advanced_Fuel_Rod.get(4), - Materials.Plutonium.getDust(20), - Materials.Plutonium241.getDust(8), - Materials.Carbon.getDust(8), - Materials.Uranium.getDust(4), - Materials.Uranium235.getDust(4)) - .outputChances(10000, 10000, 10000, 9000, 5000, 3000) - .fluidOutputs(Materials.Argon.getGas(128)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_LPu_Depleted_1.get(1)) - .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(1)) - .fluidOutputs(MyMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(250)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_LPu_Depleted_2.get(1)) - .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(2)) - .fluidOutputs(MyMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(500)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_LPu_Depleted_4.get(1)) - .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(4)) - .fluidOutputs(MyMaterial.plutoniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_LU_Depleted_1.get(1)) - .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(1)) - .fluidOutputs(MyMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(250)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_LU_Depleted_2.get(1)) - .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(2)) - .fluidOutputs(MyMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(500)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.Fuel_Rod_LU_Depleted_4.get(1)) - .itemOutputs(ItemRefer.Advanced_Fuel_Rod.get(4)) - .fluidOutputs(MyMaterial.uraniumBasedLiquidFuelDepleted.getFluidOrGas(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Glowstone.getDust(4), - Materials.Redstone.getDust(2), - Materials.Aluminium.getDust(1), - GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(ItemRefer.High_Energy_Mixture.get(4)) - .duration(12 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.High_Energy_Mixture.get(2)) - .fluidInputs(Materials.PhosphoricAcid.getFluid(4000)) - .itemOutputs(MyMaterial.lumiinessence.get(OrePrefixes.dust, 1)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV / 2) - .addTo(fluidSolidifierRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.AnnealedCopper.getDust(4), - Materials.Ardite.getDust(2), - Materials.RedAlloy.getDust(2), - GT_Utility.getIntegratedCircuit(4)) - .fluidInputs(Materials.Redstone.getMolten(288)) - .itemOutputs(MyMaterial.signalium.get(OrePrefixes.dust, 1)) - .duration(12 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.TinAlloy.getDust(4), - Materials.SterlingSilver.getDust(2), - MyMaterial.lumiinessence.get(OrePrefixes.dust, 2), - GT_Utility.getIntegratedCircuit(4)) - .fluidInputs(Materials.Glowstone.getMolten(288)) - .itemOutputs(MyMaterial.lumiium.get(OrePrefixes.dust, 1)) - .duration(12 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(MyMaterial.enrichedNaquadahAlloy.getMolten(144), WerkstoffLoader.Oganesson.getFluidOrGas(250)) - .fluidOutputs(MyMaterial.metastableOganesson.getMolten(36)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(FUSION_THRESHOLD, 1_000_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(MyMaterial.metastableOganesson.get(OrePrefixes.dust)) - .fluidOutputs(WerkstoffLoader.Oganesson.getFluidOrGas(250)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(0) - .metadata(NKE_RANGE, computeRangeNKE(1100, 1000)) - .noOptimize() - .addTo(neutronActivatorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemRefer.HiC_T5.get(0)) - .fluidInputs( - MyMaterial.metastableOganesson.getMolten(1152), - MyMaterial.preciousMetalAlloy.getMolten(2304), - MaterialsUEVplus.SpaceTime.getMolten(288), - MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(5000)) - .fluidOutputs(MyMaterial.shirabon.getMolten(144)) - .duration(10 * SECONDS) - .eut(1_500_000_000) - .metadata(COIL_HEAT, 13500) - .addTo(plasmaForgeRecipes); - } - - public static float EHEEfficiencyMultiplier = 1.2f; - - public static void FinishLoadRecipe() { - for (GT_Recipe plasmaFuel : RecipeMaps.plasmaFuels.getAllRecipes()) { - FluidStack tPlasma = GT_Utility.getFluidForFilledItem(plasmaFuel.mInputs[0], true); - if (tPlasma == null) { - continue; - } - int tUnit = plasmaFuel.mSpecialValue; - if (tUnit > 500_000) { - tPlasma.amount = 25000; - } else if (tUnit > 300_000) { - tPlasma.amount = 10000; - } else if (tUnit > 100_000) { - tPlasma.amount = 2500; - } else if (tUnit > 10_000) { - tPlasma.amount = 500; - } else { - tPlasma.amount = 100; - } - - String tPlasmaName = FluidRegistry.getFluidName(tPlasma); - - if (tPlasmaName.split("\\.", 2).length == 2) { - String tOutName = tPlasmaName.split("\\.", 2)[1]; - FluidStack output = FluidRegistry.getFluidStack(tOutName, tPlasma.amount); - if (output == null) output = FluidRegistry.getFluidStack("molten." + tOutName, tPlasma.amount); - if (output != null) { - long waterAmount = (long) (tUnit * EHEEfficiencyMultiplier * tPlasma.amount / 160); - long criticalSteamAmount = (long) (tUnit * EHEEfficiencyMultiplier * tPlasma.amount / 100); - MyRecipeAdder.instance.addExtremeHeatExchangerRecipe( - tPlasma, - output, - FluidRegistry.getFluidStack("ic2distilledwater", (int) waterAmount), - FluidRegistry.getFluidStack("ic2superheatedsteam", 0), // Plasma always outputs SC steam. - FluidRegistry.getFluidStack("supercriticalsteam", (int) criticalSteamAmount), - 1); - } - } - } - } -} diff --git a/src/main/java/goodgenerator/main/GGConfigLoader.java b/src/main/java/goodgenerator/main/GGConfigLoader.java new file mode 100644 index 0000000000..497c55b9f8 --- /dev/null +++ b/src/main/java/goodgenerator/main/GGConfigLoader.java @@ -0,0 +1,118 @@ +package goodgenerator.main; + +import java.io.File; + +import net.minecraftforge.common.config.Configuration; + +import cpw.mods.fml.relauncher.FMLInjectionData; + +public class GGConfigLoader { + + public static final Configuration GG_Config = new Configuration( + new File(new File((File) FMLInjectionData.data()[6], "config"), "GoodGenerator.cfg")); + + public static int LiquidAirConsumptionPerSecond = 2400; + public static int[] NaquadahFuelVoltage = new int[] { 12960, 2200, 32400, 975000, 2300000, 9511000, 88540000, + 399576000, 2077795200 }; + public static int[] NaquadahFuelTime = new int[] { 100, 500, 150, 60, 70, 80, 100, 160, 240 }; + public static int[] CoolantEfficiency = new int[] { 500, 275, 150, 105 }; + public static int[] ExcitedLiquidCoe = new int[] { 64, 16, 4, 3, 2 }; + public static boolean EnableNaquadahRework = true; + + public static void run() { + loadCategory(); + loadProperty(); + } + + private static void loadProperty() { + NaquadahFuelVoltage[0] = GG_Config + .get("LargeNaquadahReactor", "Uranium Based Liquid Fuel Basic Output Voltage", NaquadahFuelVoltage[0]) + .getInt(); + NaquadahFuelTime[0] = GG_Config + .get("LargeNaquadahReactor", "Uranium Based Liquid Fuel Burning Time", NaquadahFuelTime[0]) + .getInt(); + NaquadahFuelVoltage[1] = GG_Config + .get("LargeNaquadahReactor", "Thorium Based Liquid Fuel Basic Output Voltage", NaquadahFuelVoltage[1]) + .getInt(); + NaquadahFuelTime[1] = GG_Config + .get("LargeNaquadahReactor", "Thorium Based Liquid Fuel Burning Time", NaquadahFuelTime[1]) + .getInt(); + NaquadahFuelVoltage[2] = GG_Config + .get("LargeNaquadahReactor", "Plutonium Based Liquid Fuel Basic Output Voltage", NaquadahFuelVoltage[2]) + .getInt(); + NaquadahFuelTime[2] = GG_Config + .get("LargeNaquadahReactor", "Plutonium Based Liquid Fuel Burning Time", NaquadahFuelTime[2]) + .getInt(); + NaquadahFuelVoltage[3] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkI Basic Output Voltage", NaquadahFuelVoltage[3]) + .getInt(); + NaquadahFuelTime[3] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkI Burning Time", NaquadahFuelTime[3]) + .getInt(); + NaquadahFuelVoltage[4] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkII Basic Output Voltage", NaquadahFuelVoltage[4]) + .getInt(); + NaquadahFuelTime[4] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkII Burning Time", NaquadahFuelTime[4]) + .getInt(); + NaquadahFuelVoltage[5] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkIII Basic Output Voltage", NaquadahFuelVoltage[5]) + .getInt(); + NaquadahFuelTime[5] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkIII Burning Time", NaquadahFuelTime[5]) + .getInt(); + NaquadahFuelVoltage[6] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkIV Basic Output Voltage", NaquadahFuelVoltage[6]) + .getInt(); + NaquadahFuelTime[6] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkIV Burning Time", NaquadahFuelTime[6]) + .getInt(); + NaquadahFuelVoltage[7] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkV Basic Output Voltage", NaquadahFuelVoltage[7]) + .getInt(); + NaquadahFuelTime[7] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkV Burning Time", NaquadahFuelTime[7]) + .getInt(); + NaquadahFuelVoltage[8] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkVI Basic Output Voltage", NaquadahFuelVoltage[8]) + .getInt(); + NaquadahFuelTime[8] = GG_Config + .get("LargeNaquadahReactor", "Naquadah Fuel MkVI Burning Time", NaquadahFuelTime[8]) + .getInt(); + CoolantEfficiency[0] = GG_Config.get("LargeNaquadahReactor", "Tachyon Fluid Efficiency", CoolantEfficiency[0]) + .getInt(); + CoolantEfficiency[1] = GG_Config.get("LargeNaquadahReactor", "Cryotheum Efficiency", CoolantEfficiency[1]) + .getInt(); + CoolantEfficiency[2] = GG_Config.get("LargeNaquadahReactor", "Super Coolant Efficiency", CoolantEfficiency[2]) + .getInt(); + CoolantEfficiency[3] = GG_Config.get("LargeNaquadahReactor", "IC2 Coolant Efficiency", CoolantEfficiency[3]) + .getInt(); + ExcitedLiquidCoe[0] = GG_Config + .get("LargeNaquadahReactor", "Spatially Enlarged Fluid Magnification", ExcitedLiquidCoe[0]) + .getInt(); + ExcitedLiquidCoe[1] = GG_Config + .get("LargeNaquadahReactor", "Atomic Separation Catalyst Magnification", ExcitedLiquidCoe[1]) + .getInt(); + ExcitedLiquidCoe[2] = GG_Config.get("LargeNaquadahReactor", "Naquadah Magnification", ExcitedLiquidCoe[2]) + .getInt(); + ExcitedLiquidCoe[3] = GG_Config.get("LargeNaquadahReactor", "Uranium-235 Magnification", ExcitedLiquidCoe[3]) + .getInt(); + ExcitedLiquidCoe[4] = GG_Config.get("LargeNaquadahReactor", "Caesium Magnification", ExcitedLiquidCoe[4]) + .getInt(); + LiquidAirConsumptionPerSecond = Math.max( + GG_Config.get("LargeNaquadahReactor", "Liquid Air Consumption Per Second", LiquidAirConsumptionPerSecond) + .getInt(), + 0); + + EnableNaquadahRework = GG_Config.get("NaquadahRework", "Enable Naquadah Rework", EnableNaquadahRework) + .getBoolean(); + + if (GG_Config.hasChanged()) GG_Config.save(); + } + + private static void loadCategory() { + GG_Config + .addCustomCategoryComment("LargeNaquadahReactor", "Set fuel value, coolant or excited liquid property."); + GG_Config.addCustomCategoryComment("NaquadahRework", "About the naquadah line"); + } +} diff --git a/src/main/java/goodgenerator/main/GG_Config_Loader.java b/src/main/java/goodgenerator/main/GG_Config_Loader.java deleted file mode 100644 index bfa4526167..0000000000 --- a/src/main/java/goodgenerator/main/GG_Config_Loader.java +++ /dev/null @@ -1,118 +0,0 @@ -package goodgenerator.main; - -import java.io.File; - -import net.minecraftforge.common.config.Configuration; - -import cpw.mods.fml.relauncher.FMLInjectionData; - -public class GG_Config_Loader { - - public static final Configuration GG_Config = new Configuration( - new File(new File((File) FMLInjectionData.data()[6], "config"), "GoodGenerator.cfg")); - - public static int LiquidAirConsumptionPerSecond = 2400; - public static int[] NaquadahFuelVoltage = new int[] { 12960, 2200, 32400, 975000, 2300000, 9511000, 88540000, - 399576000, 2077795200 }; - public static int[] NaquadahFuelTime = new int[] { 100, 500, 150, 60, 70, 80, 100, 160, 240 }; - public static int[] CoolantEfficiency = new int[] { 500, 275, 150, 105 }; - public static int[] ExcitedLiquidCoe = new int[] { 64, 16, 4, 3, 2 }; - public static boolean EnableNaquadahRework = true; - - public static void run() { - loadCategory(); - loadProperty(); - } - - private static void loadProperty() { - NaquadahFuelVoltage[0] = GG_Config - .get("LargeNaquadahReactor", "Uranium Based Liquid Fuel Basic Output Voltage", NaquadahFuelVoltage[0]) - .getInt(); - NaquadahFuelTime[0] = GG_Config - .get("LargeNaquadahReactor", "Uranium Based Liquid Fuel Burning Time", NaquadahFuelTime[0]) - .getInt(); - NaquadahFuelVoltage[1] = GG_Config - .get("LargeNaquadahReactor", "Thorium Based Liquid Fuel Basic Output Voltage", NaquadahFuelVoltage[1]) - .getInt(); - NaquadahFuelTime[1] = GG_Config - .get("LargeNaquadahReactor", "Thorium Based Liquid Fuel Burning Time", NaquadahFuelTime[1]) - .getInt(); - NaquadahFuelVoltage[2] = GG_Config - .get("LargeNaquadahReactor", "Plutonium Based Liquid Fuel Basic Output Voltage", NaquadahFuelVoltage[2]) - .getInt(); - NaquadahFuelTime[2] = GG_Config - .get("LargeNaquadahReactor", "Plutonium Based Liquid Fuel Burning Time", NaquadahFuelTime[2]) - .getInt(); - NaquadahFuelVoltage[3] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkI Basic Output Voltage", NaquadahFuelVoltage[3]) - .getInt(); - NaquadahFuelTime[3] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkI Burning Time", NaquadahFuelTime[3]) - .getInt(); - NaquadahFuelVoltage[4] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkII Basic Output Voltage", NaquadahFuelVoltage[4]) - .getInt(); - NaquadahFuelTime[4] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkII Burning Time", NaquadahFuelTime[4]) - .getInt(); - NaquadahFuelVoltage[5] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkIII Basic Output Voltage", NaquadahFuelVoltage[5]) - .getInt(); - NaquadahFuelTime[5] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkIII Burning Time", NaquadahFuelTime[5]) - .getInt(); - NaquadahFuelVoltage[6] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkIV Basic Output Voltage", NaquadahFuelVoltage[6]) - .getInt(); - NaquadahFuelTime[6] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkIV Burning Time", NaquadahFuelTime[6]) - .getInt(); - NaquadahFuelVoltage[7] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkV Basic Output Voltage", NaquadahFuelVoltage[7]) - .getInt(); - NaquadahFuelTime[7] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkV Burning Time", NaquadahFuelTime[7]) - .getInt(); - NaquadahFuelVoltage[8] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkVI Basic Output Voltage", NaquadahFuelVoltage[8]) - .getInt(); - NaquadahFuelTime[8] = GG_Config - .get("LargeNaquadahReactor", "Naquadah Fuel MkVI Burning Time", NaquadahFuelTime[8]) - .getInt(); - CoolantEfficiency[0] = GG_Config.get("LargeNaquadahReactor", "Tachyon Fluid Efficiency", CoolantEfficiency[0]) - .getInt(); - CoolantEfficiency[1] = GG_Config.get("LargeNaquadahReactor", "Cryotheum Efficiency", CoolantEfficiency[1]) - .getInt(); - CoolantEfficiency[2] = GG_Config.get("LargeNaquadahReactor", "Super Coolant Efficiency", CoolantEfficiency[2]) - .getInt(); - CoolantEfficiency[3] = GG_Config.get("LargeNaquadahReactor", "IC2 Coolant Efficiency", CoolantEfficiency[3]) - .getInt(); - ExcitedLiquidCoe[0] = GG_Config - .get("LargeNaquadahReactor", "Spatially Enlarged Fluid Magnification", ExcitedLiquidCoe[0]) - .getInt(); - ExcitedLiquidCoe[1] = GG_Config - .get("LargeNaquadahReactor", "Atomic Separation Catalyst Magnification", ExcitedLiquidCoe[1]) - .getInt(); - ExcitedLiquidCoe[2] = GG_Config.get("LargeNaquadahReactor", "Naquadah Magnification", ExcitedLiquidCoe[2]) - .getInt(); - ExcitedLiquidCoe[3] = GG_Config.get("LargeNaquadahReactor", "Uranium-235 Magnification", ExcitedLiquidCoe[3]) - .getInt(); - ExcitedLiquidCoe[4] = GG_Config.get("LargeNaquadahReactor", "Caesium Magnification", ExcitedLiquidCoe[4]) - .getInt(); - LiquidAirConsumptionPerSecond = Math.max( - GG_Config.get("LargeNaquadahReactor", "Liquid Air Consumption Per Second", LiquidAirConsumptionPerSecond) - .getInt(), - 0); - - EnableNaquadahRework = GG_Config.get("NaquadahRework", "Enable Naquadah Rework", EnableNaquadahRework) - .getBoolean(); - - if (GG_Config.hasChanged()) GG_Config.save(); - } - - private static void loadCategory() { - GG_Config - .addCustomCategoryComment("LargeNaquadahReactor", "Set fuel value, coolant or excited liquid property."); - GG_Config.addCustomCategoryComment("NaquadahRework", "About the naquadah line"); - } -} diff --git a/src/main/java/goodgenerator/main/GoodGenerator.java b/src/main/java/goodgenerator/main/GoodGenerator.java index 426cd9d352..efbc5b63a4 100644 --- a/src/main/java/goodgenerator/main/GoodGenerator.java +++ b/src/main/java/goodgenerator/main/GoodGenerator.java @@ -2,8 +2,7 @@ package goodgenerator.main; import net.minecraft.creativetab.CreativeTabs; -import com.github.bartimaeusnek.bartworks.API.WerkstoffAdderRegistry; - +import bartworks.API.WerkstoffAdderRegistry; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.SidedProxy; @@ -15,7 +14,7 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; import goodgenerator.common.CommonProxy; import goodgenerator.crossmod.thaumcraft.Research; -import goodgenerator.items.MyMaterial; +import goodgenerator.items.GGMaterial; import goodgenerator.loader.Loaders; import goodgenerator.loader.NaquadahReworkRecipeLoader; import goodgenerator.tabs.MyTabs; @@ -51,8 +50,8 @@ public final class GoodGenerator { @Mod.EventHandler public static void preInit(FMLPreInitializationEvent event) { - GG_Config_Loader.run(); - WerkstoffAdderRegistry.addWerkstoffAdder(new MyMaterial()); + GGConfigLoader.run(); + WerkstoffAdderRegistry.addWerkstoffAdder(new GGMaterial()); // WerkstoffAdderRegistry.addWerkstoffAdder(new IsotopeMaterialLoader()); Loaders.preInitLoad(); proxy.preInit(event); diff --git a/src/main/java/goodgenerator/network/MessageMTEBase.java b/src/main/java/goodgenerator/network/MessageMTEBase.java index 4a9982d8d8..89dc7b5be6 100644 --- a/src/main/java/goodgenerator/network/MessageMTEBase.java +++ b/src/main/java/goodgenerator/network/MessageMTEBase.java @@ -16,8 +16,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; -import com.github.technus.tectech.TecTech; - import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; @@ -25,6 +23,7 @@ import cpw.mods.fml.relauncher.Side; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import io.netty.buffer.ByteBuf; +import tectech.TecTech; public abstract class MessageMTEBase implements IMessage { diff --git a/src/main/java/goodgenerator/util/CrackRecipeAdder.java b/src/main/java/goodgenerator/util/CrackRecipeAdder.java index dddb7fe69d..489732e068 100644 --- a/src/main/java/goodgenerator/util/CrackRecipeAdder.java +++ b/src/main/java/goodgenerator/util/CrackRecipeAdder.java @@ -7,27 +7,26 @@ import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; import static gregtech.api.recipe.RecipeMaps.extruderRecipes; import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; import static gregtech.api.recipe.RecipeMaps.wiremillRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; - -import gregtech.api.enums.GT_Values; +import bartworks.system.material.Werkstoff; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_Utility; +import gregtech.api.metatileentity.implementations.MTECable; +import gregtech.api.metatileentity.implementations.MTEFluid; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTUtility; public class CrackRecipeAdder { @@ -44,24 +43,24 @@ public class CrackRecipeAdder { .getName() .replaceAll(" ", ""); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) .fluidInputs(inputFluid, cracker) .fluidOutputs(FluidRegistry.getFluidStack("lightlycracked" + name, 1000)) .duration(Math.max((long) (Duration * 0.8), 1L) * TICKS) .eut(EUt) .addTo(crackingRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(2)) .fluidInputs(inputFluid, cracker) .fluidOutputs(FluidRegistry.getFluidStack("moderatelycracked" + name, 1000)) .duration(Math.max((long) (Duration), 1L) * TICKS) .eut(EUt) .addTo(crackingRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(3)) .fluidInputs(inputFluid, cracker) .fluidOutputs(FluidRegistry.getFluidStack("heavilycracked" + name, 1000)) .duration(Math.max((long) (Duration * 1.2), 1L) * TICKS) @@ -112,8 +111,8 @@ public class CrackRecipeAdder { ItemStack input = material.get(OrePrefixes.dust, 1); ItemStack output = level > 1750 ? material.get(OrePrefixes.ingotHot, 1) : material.get(OrePrefixes.ingot, 1); if (gas) { - GT_Values.RA.stdBuilder() - .itemInputs(input, GT_Utility.getIntegratedCircuit(11)) + GTValues.RA.stdBuilder() + .itemInputs(input, GTUtility.getIntegratedCircuit(11)) .fluidInputs(Materials.Helium.getGas(1000)) .itemOutputs(output) .duration(duration * TICKS) @@ -121,8 +120,8 @@ public class CrackRecipeAdder { .metadata(COIL_HEAT, level) .addTo(blastFurnaceRecipes); } else { - GT_Values.RA.stdBuilder() - .itemInputs(input, GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(input, GTUtility.getIntegratedCircuit(1)) .itemOutputs(output) .duration(duration * TICKS) .eut(EUt) @@ -134,9 +133,9 @@ public class CrackRecipeAdder { public static void addUniversalDistillationRecipewithCircuit(FluidStack aInput, ItemStack[] aCircuit, FluidStack[] aOutputs, ItemStack aOutput2, int aDuration, long aEUt) { for (int i = 0; i < Math.min(aOutputs.length, 11); i++) { - GT_RecipeBuilder buildDistillation = GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(i + 1)); - if (aOutput2 != GT_Values.NI) { + GTRecipeBuilder buildDistillation = GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(i + 1)); + if (aOutput2 != GTValues.NI) { buildDistillation.itemOutputs(aOutput2); } buildDistillation.fluidInputs(aInput) @@ -145,9 +144,9 @@ public class CrackRecipeAdder { .eut(aEUt / 4) .addTo(distilleryRecipes); } - GT_RecipeBuilder buildDT = GT_Values.RA.stdBuilder() + GTRecipeBuilder buildDT = GTValues.RA.stdBuilder() .itemInputs(aCircuit); - if (aOutput2 != GT_Values.NI) { + if (aOutput2 != GTValues.NI) { buildDT.itemOutputs(aOutput2); } buildDT.fluidInputs(aInput) @@ -160,9 +159,9 @@ public class CrackRecipeAdder { public static void addUniversalDistillationRecipe(FluidStack aInput, FluidStack[] aOutputs, ItemStack aOutput2, int aDuration, long aEUt) { for (int i = 0; i < Math.min(aOutputs.length, 11); i++) { - GT_RecipeBuilder buildDistillation = GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(i + 1)); - if (aOutput2 != GT_Values.NI) { + GTRecipeBuilder buildDistillation = GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(i + 1)); + if (aOutput2 != GTValues.NI) { buildDistillation.itemOutputs(aOutput2); } buildDistillation.fluidInputs(aInput) @@ -171,8 +170,8 @@ public class CrackRecipeAdder { .eut(aEUt / 4) .addTo(distilleryRecipes); } - GT_RecipeBuilder buildDT = GT_Values.RA.stdBuilder(); - if (aOutput2 != GT_Values.NI) { + GTRecipeBuilder buildDT = GTValues.RA.stdBuilder(); + if (aOutput2 != GTValues.NI) { buildDT.itemOutputs(aOutput2); } buildDT.fluidInputs(aInput) @@ -191,9 +190,9 @@ public class CrackRecipeAdder { String unName = material.getDefaultName() .replace(" ", "_"); String Name = material.getDefaultName(); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeTiny.get(material.getBridgeMaterial()), - new GT_MetaPipeEntity_Fluid( + new MTEFluid( ID, "GT_Pipe_" + unName + "_Tiny", "Tiny " + Name + " Fluid Pipe", @@ -202,9 +201,9 @@ public class CrackRecipeAdder { flow / 6, temp, gas).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeSmall.get(material.getBridgeMaterial()), - new GT_MetaPipeEntity_Fluid( + new MTEFluid( ID + 1, "GT_Pipe_" + unName + "_Small", "Small " + Name + " Fluid Pipe", @@ -213,9 +212,9 @@ public class CrackRecipeAdder { flow / 3, temp, gas).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeMedium.get(material.getBridgeMaterial()), - new GT_MetaPipeEntity_Fluid( + new MTEFluid( ID + 2, "GT_Pipe_" + unName, Name + " Fluid Pipe", @@ -224,9 +223,9 @@ public class CrackRecipeAdder { flow, temp, gas).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeLarge.get(material.getBridgeMaterial()), - new GT_MetaPipeEntity_Fluid( + new MTEFluid( ID + 3, "GT_Pipe_" + unName + "_Large", "Large " + Name + " Fluid Pipe", @@ -235,9 +234,9 @@ public class CrackRecipeAdder { flow * 2, temp, gas).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeHuge.get(material.getBridgeMaterial()), - new GT_MetaPipeEntity_Fluid( + new MTEFluid( ID + 4, "GT_Pipe_" + unName + "_Huge", "Huge " + Name + " Fluid Pipe", @@ -246,7 +245,7 @@ public class CrackRecipeAdder { flow * 4, temp, gas).getStackForm(1L)); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.ingot, 1), ItemList.Shape_Extruder_Pipe_Tiny.get(0)) .itemOutputs(material.get(OrePrefixes.pipeTiny, 2)) .duration( @@ -254,7 +253,7 @@ public class CrackRecipeAdder { .getMass() * TICKS) .eut(TierEU.RECIPE_MV) .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.ingot, 1), ItemList.Shape_Extruder_Pipe_Small.get(0)) .itemOutputs(material.get(OrePrefixes.pipeSmall, 1)) .duration( @@ -263,7 +262,7 @@ public class CrackRecipeAdder { * TICKS) .eut(TierEU.RECIPE_MV) .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.ingot, 3), ItemList.Shape_Extruder_Pipe_Medium.get(0)) .itemOutputs(material.get(OrePrefixes.pipeMedium, 1)) .duration( @@ -272,7 +271,7 @@ public class CrackRecipeAdder { * TICKS) .eut(TierEU.RECIPE_MV) .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.ingot, 6), ItemList.Shape_Extruder_Pipe_Large.get(0)) .itemOutputs(material.get(OrePrefixes.pipeLarge, 1)) .duration( @@ -281,7 +280,7 @@ public class CrackRecipeAdder { * TICKS) .eut(TierEU.RECIPE_MV) .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.ingot, 12), ItemList.Shape_Extruder_Pipe_Huge.get(0)) .itemOutputs(material.get(OrePrefixes.pipeHuge, 1)) .duration( @@ -290,7 +289,7 @@ public class CrackRecipeAdder { * TICKS) .eut(TierEU.RECIPE_MV) .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Pipe_Tiny.get(0)) .fluidInputs(material.getMolten(72)) .itemOutputs(material.get(OrePrefixes.pipeTiny, 1)) @@ -299,7 +298,7 @@ public class CrackRecipeAdder { .getMass() * TICKS) .eut(TierEU.RECIPE_LV) .addTo(fluidSolidifierRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Pipe_Small.get(0)) .fluidInputs(material.getMolten(144)) .itemOutputs(material.get(OrePrefixes.pipeSmall, 1)) @@ -309,7 +308,7 @@ public class CrackRecipeAdder { * TICKS) .eut(TierEU.RECIPE_LV) .addTo(fluidSolidifierRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Pipe_Medium.get(0)) .fluidInputs(material.getMolten(432)) .itemOutputs(material.get(OrePrefixes.pipeMedium, 1)) @@ -319,7 +318,7 @@ public class CrackRecipeAdder { * TICKS) .eut(TierEU.RECIPE_LV) .addTo(fluidSolidifierRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Pipe_Large.get(0)) .fluidInputs(material.getMolten(864)) .itemOutputs(material.get(OrePrefixes.pipeLarge, 1)) @@ -329,7 +328,7 @@ public class CrackRecipeAdder { * TICKS) .eut(TierEU.RECIPE_LV) .addTo(fluidSolidifierRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Pipe_Huge.get(0)) .fluidInputs(material.getMolten(1728)) .itemOutputs(material.get(OrePrefixes.pipeHuge, 1)) @@ -351,10 +350,10 @@ public class CrackRecipeAdder { String aTextWire2 = " Wire"; String aTextCable2 = " Cable"; int aLossInsulated = aLoss / 4; - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt01, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 0, aTextWire1 + unName + ".01", "1x " + Name + aTextWire2, @@ -365,10 +364,10 @@ public class CrackRecipeAdder { aVoltage, false, true).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt02, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 1, aTextWire1 + unName + ".02", "2x " + Name + aTextWire2, @@ -379,10 +378,10 @@ public class CrackRecipeAdder { aVoltage, false, true).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt04, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 2, aTextWire1 + unName + ".04", "4x " + Name + aTextWire2, @@ -393,10 +392,10 @@ public class CrackRecipeAdder { aVoltage, false, true).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt08, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 3, aTextWire1 + unName + ".08", "8x " + Name + aTextWire2, @@ -407,10 +406,10 @@ public class CrackRecipeAdder { aVoltage, false, true).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt12, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 4, aTextWire1 + unName + ".12", "12x " + Name + aTextWire2, @@ -421,10 +420,10 @@ public class CrackRecipeAdder { aVoltage, false, true).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt16, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 5, aTextWire1 + unName + ".16", "16x " + Name + aTextWire2, @@ -436,10 +435,10 @@ public class CrackRecipeAdder { false, true).getStackForm(1L)); if (cover) { - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt01, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 6, aTextCable1 + unName + ".01", "1x " + Name + aTextCable2, @@ -450,10 +449,10 @@ public class CrackRecipeAdder { aVoltage, true, false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt02, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 7, aTextCable1 + unName + ".02", "2x " + Name + aTextCable2, @@ -464,10 +463,10 @@ public class CrackRecipeAdder { aVoltage, true, false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt04, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 8, aTextCable1 + unName + ".04", "4x " + Name + aTextCable2, @@ -478,10 +477,10 @@ public class CrackRecipeAdder { aVoltage, true, false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt08, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 9, aTextCable1 + unName + ".08", "8x " + Name + aTextCable2, @@ -492,10 +491,10 @@ public class CrackRecipeAdder { aVoltage, true, false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt12, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 10, aTextCable1 + unName + ".12", "12x " + Name + aTextCable2, @@ -506,10 +505,10 @@ public class CrackRecipeAdder { aVoltage, true, false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt16, material.getBridgeMaterial(), - new GT_MetaPipeEntity_Cable( + new MTECable( ID + 11, aTextCable1 + unName + ".16", "16x " + Name + aTextCable2, @@ -521,97 +520,97 @@ public class CrackRecipeAdder { true, false).getStackForm(1L)); } - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.ingot, 1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(material.get(OrePrefixes.wireGt01, 2)) .duration(5 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.ingot, 1), GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 1), GTUtility.getIntegratedCircuit(2)) .itemOutputs(material.get(OrePrefixes.wireGt02, 1)) .duration(7 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.ingot, 2), GT_Utility.getIntegratedCircuit(4)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 2), GTUtility.getIntegratedCircuit(4)) .itemOutputs(material.get(OrePrefixes.wireGt04, 1)) .duration(10 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.ingot, 4), GT_Utility.getIntegratedCircuit(8)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 4), GTUtility.getIntegratedCircuit(8)) .itemOutputs(material.get(OrePrefixes.wireGt08, 1)) .duration(12 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.ingot, 6), GT_Utility.getIntegratedCircuit(12)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 6), GTUtility.getIntegratedCircuit(12)) .itemOutputs(material.get(OrePrefixes.wireGt12, 1)) .duration(15 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.ingot, 8), GT_Utility.getIntegratedCircuit(16)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 8), GTUtility.getIntegratedCircuit(16)) .itemOutputs(material.get(OrePrefixes.wireGt16, 1)) .duration(17 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.stick, 1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(material.get(OrePrefixes.wireGt01, 1)) .duration(2 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.stick, 2), GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 2), GTUtility.getIntegratedCircuit(2)) .itemOutputs(material.get(OrePrefixes.wireGt02, 1)) .duration(5 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.stick, 4), GT_Utility.getIntegratedCircuit(4)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 4), GTUtility.getIntegratedCircuit(4)) .itemOutputs(material.get(OrePrefixes.wireGt04, 1)) .duration(7 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.stick, 8), GT_Utility.getIntegratedCircuit(8)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 8), GTUtility.getIntegratedCircuit(8)) .itemOutputs(material.get(OrePrefixes.wireGt08, 1)) .duration(10 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.stick, 12), GT_Utility.getIntegratedCircuit(12)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 12), GTUtility.getIntegratedCircuit(12)) .itemOutputs(material.get(OrePrefixes.wireGt12, 1)) .duration(12 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.stick, 16), GT_Utility.getIntegratedCircuit(16)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 16), GTUtility.getIntegratedCircuit(16)) .itemOutputs(material.get(OrePrefixes.wireGt16, 1)) .duration(15 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.ingot, 1), GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.ingot, 1), GTUtility.getIntegratedCircuit(3)) .itemOutputs(material.get(OrePrefixes.wireFine, 8)) .duration(5 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.stick, 1), GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.stick, 1), GTUtility.getIntegratedCircuit(3)) .itemOutputs(material.get(OrePrefixes.wireFine, 4)) .duration(2 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(material.get(OrePrefixes.wireGt01, 1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(material.get(OrePrefixes.wireGt01, 1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(material.get(OrePrefixes.wireFine, 4)) .duration(10 * SECONDS) .eut(8) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.ingot, 1), ItemList.Shape_Extruder_Wire.get(0)) .itemOutputs(material.get(OrePrefixes.wireGt01, 2)) .duration( diff --git a/src/main/java/goodgenerator/util/ItemRefer.java b/src/main/java/goodgenerator/util/ItemRefer.java index 3662bb5bd1..f9af30e7df 100644 --- a/src/main/java/goodgenerator/util/ItemRefer.java +++ b/src/main/java/goodgenerator/util/ItemRefer.java @@ -7,7 +7,7 @@ import net.minecraft.block.Block; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import ic2.core.Ic2Items; public final class ItemRefer { @@ -217,7 +217,7 @@ public final class ItemRefer { public ItemStack get(int amount) { if (mItem != null) return new ItemStack(mItem, amount, mMeta); if (mBlock != null) return new ItemStack(mBlock, amount, mMeta); - if (mItemStack != null) return GT_Utility.copyAmount(amount, mItemStack); + if (mItemStack != null) return GTUtility.copyAmount(amount, mItemStack); return new ItemStack(_null_, amount, 0); } } diff --git a/src/main/java/goodgenerator/util/MaterialFix.java b/src/main/java/goodgenerator/util/MaterialFix.java index 32827b18b2..8df7b3f4e6 100644 --- a/src/main/java/goodgenerator/util/MaterialFix.java +++ b/src/main/java/goodgenerator/util/MaterialFix.java @@ -4,31 +4,30 @@ import static gregtech.api.recipe.RecipeMaps.benderRecipes; import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; - -import gregtech.api.enums.GT_Values; +import bartworks.system.material.Werkstoff; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; public class MaterialFix { public static void MaterialFluidExtractionFix(Werkstoff material) { if (material.hasItemType(OrePrefixes.ingot)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.ingot)) .fluidOutputs(material.getMolten(144)) .duration(1 * SECONDS + 12 * TICKS) .eut(8) .addTo(fluidExtractionRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Ingot.get(0)) .fluidInputs(material.getMolten(144)) .itemOutputs(material.get(OrePrefixes.ingot)) @@ -37,13 +36,13 @@ public class MaterialFix { .addTo(fluidSolidifierRecipes); } if (material.hasItemType(OrePrefixes.plate)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.plate)) .fluidOutputs(material.getMolten(144)) .duration(1 * SECONDS + 12 * TICKS) .eut(8) .addTo(fluidExtractionRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Plate.get(0)) .fluidInputs(material.getMolten(144)) .itemOutputs(material.get(OrePrefixes.plate)) @@ -52,7 +51,7 @@ public class MaterialFix { .addTo(fluidSolidifierRecipes); } if (material.hasItemType(OrePrefixes.gearGtSmall)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.gearGtSmall)) .fluidOutputs(material.getMolten(144)) .duration(1 * SECONDS + 12 * TICKS) @@ -60,7 +59,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.stickLong)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.stickLong)) .fluidOutputs(material.getMolten(144)) .duration(1 * SECONDS + 12 * TICKS) @@ -68,7 +67,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.spring)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.spring)) .fluidOutputs(material.getMolten(144)) .duration(1 * SECONDS + 12 * TICKS) @@ -76,7 +75,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.stick)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.stick)) .fluidOutputs(material.getMolten(72)) .duration(16 * TICKS) @@ -84,7 +83,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.itemCasing)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.itemCasing)) .fluidOutputs(material.getMolten(72)) .duration(16 * TICKS) @@ -92,7 +91,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.wireGt01)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.wireGt01)) .fluidOutputs(material.getMolten(72)) .duration(16 * TICKS) @@ -100,16 +99,16 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.cableGt01)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.cableGt01)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Ash, 2)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Ash, 2)) .fluidOutputs(material.getMolten(72)) .duration(16 * TICKS) .eut(8) .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.foil)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.foil)) .fluidOutputs(material.getMolten(36)) .duration(8 * TICKS) @@ -117,7 +116,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.springSmall)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.springSmall)) .fluidOutputs(material.getMolten(36)) .duration(8 * TICKS) @@ -125,7 +124,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.ring)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.ring)) .fluidOutputs(material.getMolten(36)) .duration(8 * TICKS) @@ -133,7 +132,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.bolt)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.bolt)) .fluidOutputs(material.getMolten(18)) .duration(4 * TICKS) @@ -141,7 +140,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.wireFine)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.wireFine)) .fluidOutputs(material.getMolten(18)) .duration(4 * TICKS) @@ -149,7 +148,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.round)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.round)) .fluidOutputs(material.getMolten(16)) .duration(4 * TICKS) @@ -157,7 +156,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.screw)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.screw)) .fluidOutputs(material.getMolten(16)) .duration(4 * TICKS) @@ -165,7 +164,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.nugget)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.nugget)) .fluidOutputs(material.getMolten(16)) .duration(4 * TICKS) @@ -173,7 +172,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.rotor)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.rotor)) .fluidOutputs(material.getMolten(612)) .duration(136 * TICKS) @@ -181,7 +180,7 @@ public class MaterialFix { .addTo(fluidExtractionRecipes); } if (material.hasItemType(OrePrefixes.gearGt)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(material.get(OrePrefixes.gearGt)) .fluidOutputs(material.getMolten(576)) .duration(128 * TICKS) @@ -194,8 +193,8 @@ public class MaterialFix { for (Werkstoff tMaterial : Werkstoff.werkstoffHashSet) { if (tMaterial == null) continue; if (tMaterial.hasItemType(OrePrefixes.plateDouble) && tMaterial.hasItemType(OrePrefixes.ingotDouble)) { - GT_Values.RA.stdBuilder() - .itemInputs(tMaterial.get(OrePrefixes.plate, 2), GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.plate, 2), GTUtility.getIntegratedCircuit(2)) .itemOutputs(tMaterial.get(OrePrefixes.plateDouble, 1)) .duration( Math.max( @@ -204,8 +203,8 @@ public class MaterialFix { 1L) * TICKS) .eut(TierEU.RECIPE_MV / 2) .addTo(benderRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(tMaterial.get(OrePrefixes.ingotDouble, 1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.ingotDouble, 1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(tMaterial.get(OrePrefixes.plateDouble, 1)) .duration( Math.max( @@ -214,16 +213,16 @@ public class MaterialFix { 1L) * TICKS) .eut(TierEU.RECIPE_MV / 2) .addTo(benderRecipes); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( tMaterial.get(OrePrefixes.plateDouble, 1), new Object[] { "P", "P", "h", 'P', tMaterial.get(OrePrefixes.plate, 1) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( tMaterial.get(OrePrefixes.ingotDouble, 1), new Object[] { "P", "P", "h", 'P', tMaterial.get(OrePrefixes.ingot, 1) }); } if (tMaterial.hasItemType(OrePrefixes.plateTriple) && tMaterial.hasItemType(OrePrefixes.ingotTriple)) { - GT_Values.RA.stdBuilder() - .itemInputs(tMaterial.get(OrePrefixes.plate, 3), GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.plate, 3), GTUtility.getIntegratedCircuit(3)) .itemOutputs(tMaterial.get(OrePrefixes.plateTriple, 1)) .duration( Math.max( @@ -232,8 +231,8 @@ public class MaterialFix { 1L) * TICKS) .eut(TierEU.RECIPE_MV / 2) .addTo(benderRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(tMaterial.get(OrePrefixes.ingot, 3), GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.ingot, 3), GTUtility.getIntegratedCircuit(3)) .itemOutputs(tMaterial.get(OrePrefixes.plateTriple, 1)) .duration( Math.max( @@ -242,8 +241,8 @@ public class MaterialFix { 1L) * TICKS) .eut(TierEU.RECIPE_MV / 2) .addTo(benderRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(tMaterial.get(OrePrefixes.ingotTriple, 1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.ingotTriple, 1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(tMaterial.get(OrePrefixes.plateTriple, 1)) .duration( Math.max( @@ -252,18 +251,18 @@ public class MaterialFix { 1L) * TICKS) .eut(TierEU.RECIPE_MV / 2) .addTo(benderRecipes); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( tMaterial.get(OrePrefixes.plateTriple, 1), new Object[] { "B", "P", "h", 'P', tMaterial.get(OrePrefixes.plate, 1), 'B', tMaterial.get(OrePrefixes.plateDouble, 1) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( tMaterial.get(OrePrefixes.ingotTriple, 1), new Object[] { "B", "P", "h", 'P', tMaterial.get(OrePrefixes.ingot, 1), 'B', tMaterial.get(OrePrefixes.ingotDouble, 1) }); } if (tMaterial.hasItemType(OrePrefixes.plateDense)) { - GT_Values.RA.stdBuilder() - .itemInputs(tMaterial.get(OrePrefixes.plate, 9), GT_Utility.getIntegratedCircuit(9)) + GTValues.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.plate, 9), GTUtility.getIntegratedCircuit(9)) .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1)) .duration( Math.max( @@ -272,8 +271,8 @@ public class MaterialFix { 1L) * TICKS) .eut(TierEU.RECIPE_MV / 2) .addTo(benderRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(tMaterial.get(OrePrefixes.ingot, 9), GT_Utility.getIntegratedCircuit(9)) + GTValues.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.ingot, 9), GTUtility.getIntegratedCircuit(9)) .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1)) .duration( Math.max( @@ -284,8 +283,8 @@ public class MaterialFix { .addTo(benderRecipes); if (tMaterial.hasItemType(OrePrefixes.plateTriple) && tMaterial.hasItemType(OrePrefixes.ingotTriple)) { - GT_Values.RA.stdBuilder() - .itemInputs(tMaterial.get(OrePrefixes.plateTriple, 3), GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.plateTriple, 3), GTUtility.getIntegratedCircuit(3)) .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1)) .duration( Math.max( @@ -294,8 +293,8 @@ public class MaterialFix { 1L) * TICKS) .eut(TierEU.RECIPE_MV / 2) .addTo(benderRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(tMaterial.get(OrePrefixes.ingotTriple, 3), GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.ingotTriple, 3), GTUtility.getIntegratedCircuit(3)) .itemOutputs(tMaterial.get(OrePrefixes.plateDense, 1)) .duration( Math.max( @@ -308,7 +307,7 @@ public class MaterialFix { } if (tMaterial.hasItemType(OrePrefixes.stick)) { if (tMaterial.hasItemType(OrePrefixes.cellMolten)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Rod.get(0)) .fluidInputs(tMaterial.getMolten(72)) .itemOutputs(tMaterial.get(OrePrefixes.stick, 1)) @@ -323,7 +322,7 @@ public class MaterialFix { } if (tMaterial.hasItemType(OrePrefixes.stickLong)) { if (tMaterial.hasItemType(OrePrefixes.cellMolten)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Shape_Mold_Rod_Long.get(0)) .fluidInputs(tMaterial.getMolten(144)) .itemOutputs(tMaterial.get(OrePrefixes.stickLong, 1)) @@ -336,10 +335,10 @@ public class MaterialFix { .addTo(fluidSolidifierRecipes); } if (tMaterial.hasItemType(OrePrefixes.stick)) { - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( tMaterial.get(OrePrefixes.stickLong, 1), new Object[] { "PhP", 'P', tMaterial.get(OrePrefixes.stick, 1) }); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(tMaterial.get(OrePrefixes.stick, 2)) .itemOutputs(tMaterial.get(OrePrefixes.stickLong, 1)) .duration( @@ -352,11 +351,11 @@ public class MaterialFix { } } if (tMaterial.hasItemType(OrePrefixes.spring)) { - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( tMaterial.get(OrePrefixes.spring, 1), new Object[] { " s ", "fPx", " P ", 'P', tMaterial.get(OrePrefixes.stickLong, 1) }); - GT_Values.RA.stdBuilder() - .itemInputs(tMaterial.get(OrePrefixes.stickLong, 1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.stickLong, 1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(tMaterial.get(OrePrefixes.spring, 1)) .duration( Math.max( @@ -367,11 +366,11 @@ public class MaterialFix { .addTo(benderRecipes); } if (tMaterial.hasItemType(OrePrefixes.springSmall)) { - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( tMaterial.get(OrePrefixes.springSmall, 1), new Object[] { " s ", "fPx", 'P', tMaterial.get(OrePrefixes.stick, 1) }); - GT_Values.RA.stdBuilder() - .itemInputs(tMaterial.get(OrePrefixes.stick, 1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(tMaterial.get(OrePrefixes.stick, 1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(tMaterial.get(OrePrefixes.springSmall, 1)) .duration( Math.max( @@ -383,9 +382,9 @@ public class MaterialFix { } } Materials tUHV = Materials.Longasssuperconductornameforuhvwire; - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.stick, tUHV, 2)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stickLong, tUHV, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.stick, tUHV, 2)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stickLong, tUHV, 1)) .duration(Math.max(tUHV.getMass(), 1L) * TICKS) .eut(TierEU.RECIPE_LV / 2) .addTo(hammerRecipes); diff --git a/src/main/java/goodgenerator/util/StackUtils.java b/src/main/java/goodgenerator/util/StackUtils.java index 2784828117..957ff6a4d3 100644 --- a/src/main/java/goodgenerator/util/StackUtils.java +++ b/src/main/java/goodgenerator/util/StackUtils.java @@ -13,10 +13,10 @@ import net.minecraftforge.fluids.FluidStack; import appeng.api.AEApi; import appeng.api.storage.data.IAEFluidStack; -import goodgenerator.items.MyMaterial; +import goodgenerator.items.GGMaterial; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class StackUtils { @@ -32,11 +32,11 @@ public class StackUtils { ArrayList stacks = new ArrayList<>(); if (totalItems >= 64) { for (int i = 0; i < totalItems / 64; i++) { - stacks.add(GT_Utility.copyAmount(64, stack)); + stacks.add(GTUtility.copyAmount(64, stack)); } } if (totalItems % 64 > 0) { - stacks.add(GT_Utility.copyAmount(totalItems % 64, stack)); + stacks.add(GTUtility.copyAmount(totalItems % 64, stack)); } return stacks; } @@ -51,13 +51,13 @@ public class StackUtils { int newSize = i.stackSize; for (int j = index + 1; j < stacks.size(); j++) { ItemStack is2 = stacks.get(j); - if (GT_Utility.areStacksEqual(i, is2)) { + if (GTUtility.areStacksEqual(i, is2)) { newSize += is2.stackSize; stacks.remove(j); j--; } } - output.add(GT_Utility.copyAmountUnsafe(newSize, i)); + output.add(GTUtility.copyAmountUnsafe(newSize, i)); } return output; } @@ -70,11 +70,11 @@ public class StackUtils { HashMap totals = new HashMap<>(); itemLoop: for (ItemStack item : items) { int t = items.stream() - .filter(i2 -> GT_Utility.areStacksEqual(item, i2)) + .filter(i2 -> GTUtility.areStacksEqual(item, i2)) .mapToInt(i -> i.stackSize) .sum(); - for (ItemStack i2 : totals.keySet()) if (GT_Utility.areStacksEqual(item, i2)) continue itemLoop; - totals.put(GT_Utility.copyAmount(1, item), t); + for (ItemStack i2 : totals.keySet()) if (GTUtility.areStacksEqual(item, i2)) continue itemLoop; + totals.put(GTUtility.copyAmount(1, item), t); } return totals; } @@ -96,27 +96,27 @@ public class StackUtils { case 2: // MV return Materials.RoseGold.getMolten(aAmount); case 3: // HV - return MyMaterial.zircaloy4.getMolten(aAmount); + return GGMaterial.zircaloy4.getMolten(aAmount); case 4: // EV - return MyMaterial.incoloy903.getMolten(aAmount); + return GGMaterial.incoloy903.getMolten(aAmount); case 5: // IV - return MyMaterial.titaniumBetaC.getMolten(aAmount); + return GGMaterial.titaniumBetaC.getMolten(aAmount); case 6: // LuV - return MyMaterial.artheriumSn.getMolten(aAmount); + return GGMaterial.artheriumSn.getMolten(aAmount); case 7: // ZPM - return MyMaterial.dalisenite.getMolten(aAmount); + return GGMaterial.dalisenite.getMolten(aAmount); case 8: // UV - return MyMaterial.tairitsu.getMolten(aAmount); + return GGMaterial.tairitsu.getMolten(aAmount); case 9: // UHV - return MyMaterial.preciousMetalAlloy.getMolten(aAmount); + return GGMaterial.preciousMetalAlloy.getMolten(aAmount); case 10: // UEV - return MyMaterial.enrichedNaquadahAlloy.getMolten(aAmount); + return GGMaterial.enrichedNaquadahAlloy.getMolten(aAmount); case 11: // UIV - return MyMaterial.metastableOganesson.getMolten(aAmount); + return GGMaterial.metastableOganesson.getMolten(aAmount); case 12: // UMV return MaterialsUEVplus.SpaceTime.getMolten(aAmount); default: - return MyMaterial.shirabon.getMolten(aAmount); + return GGMaterial.shirabon.getMolten(aAmount); } } diff --git a/src/main/java/goodgenerator/util/StructureHelper.java b/src/main/java/goodgenerator/util/StructureHelper.java index e66ac9f9ee..0d2c101ee9 100644 --- a/src/main/java/goodgenerator/util/StructureHelper.java +++ b/src/main/java/goodgenerator/util/StructureHelper.java @@ -19,8 +19,8 @@ import com.gtnewhorizon.structurelib.structure.IStructureElement; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Frame; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.metatileentity.implementations.MTEFrame; +import gregtech.api.util.GTOreDictUnificator; public class StructureHelper { @@ -35,8 +35,8 @@ public class StructureHelper { if (tBlock instanceof BaseMetaPipeEntity) { BaseMetaPipeEntity tFrame = (BaseMetaPipeEntity) tBlock; if (tFrame.isInvalidTileEntity()) return false; - if (tFrame.getMetaTileEntity() instanceof GT_MetaPipeEntity_Frame) { - return ((GT_MetaPipeEntity_Frame) tFrame.getMetaTileEntity()).mMaterial == aMaterials; + if (tFrame.getMetaTileEntity() instanceof MTEFrame) { + return ((MTEFrame) tFrame.getMetaTileEntity()).mMaterial == aMaterials; } } return false; @@ -54,7 +54,7 @@ public class StructureHelper { @Override public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - ItemStack tFrame = GT_OreDictUnificator.get(OrePrefixes.frameGt, aMaterials, 1); + ItemStack tFrame = GTOreDictUnificator.get(OrePrefixes.frameGt, aMaterials, 1); if (tFrame.getItem() instanceof ItemBlock) { ItemBlock tFrameStackItem = (ItemBlock) tFrame.getItem(); return tFrameStackItem diff --git a/src/main/java/gregtech/GTMod.java b/src/main/java/gregtech/GTMod.java new file mode 100644 index 0000000000..ab377561af --- /dev/null +++ b/src/main/java/gregtech/GTMod.java @@ -0,0 +1,886 @@ +package gregtech; + +import static gregtech.GT_Version.VERSION_MAJOR; +import static gregtech.GT_Version.VERSION_MINOR; +import static gregtech.GT_Version.VERSION_PATCH; +import static gregtech.api.GregTechAPI.registerCircuitProgrammer; +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.util.GTRecipe.setItemStacks; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Locale; +import java.util.Map; +import java.util.function.Predicate; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.WeightedRandomChestContent; +import net.minecraft.world.World; +import net.minecraftforge.common.ChestGenHooks; +import net.minecraftforge.oredict.OreDictionary; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.google.common.base.Stopwatch; +import com.google.common.collect.SetMultimap; +import com.gtnewhorizon.gtnhlib.config.ConfigException; +import com.gtnewhorizon.gtnhlib.config.ConfigurationManager; + +import appeng.api.AEApi; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.SidedProxy; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLLoadCompleteEvent; +import cpw.mods.fml.common.event.FMLModIdMappingEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerAboutToStartEvent; +import cpw.mods.fml.common.event.FMLServerStartedEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; +import cpw.mods.fml.common.event.FMLServerStoppingEvent; +import galacticgreg.SpaceDimRegisterer; +import gregtech.api.GregTechAPI; +import gregtech.api.enchants.EnchantmentEnderDamage; +import gregtech.api.enchants.EnchantmentHazmat; +import gregtech.api.enchants.EnchantmentRadioactivity; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Mods; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.internal.IGTMod; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.objects.ItemData; +import gregtech.api.objects.XSTR; +import gregtech.api.registries.LHECoolantRegistry; +import gregtech.api.threads.RunnableMachineUpdate; +import gregtech.api.util.AssemblyLineServer; +import gregtech.api.util.GTForestryCompat; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeRegistrator; +import gregtech.api.util.GTSpawnEventHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.item.ItemHolder; +import gregtech.common.GTDummyWorld; +import gregtech.common.GTNetwork; +import gregtech.common.GTProxy; +import gregtech.common.RecipeAdder; +import gregtech.common.config.client.ConfigColorModulation; +import gregtech.common.config.client.ConfigInterface; +import gregtech.common.config.client.ConfigPreference; +import gregtech.common.config.client.ConfigRender; +import gregtech.common.config.client.ConfigWaila; +import gregtech.common.config.gregtech.ConfigDebug; +import gregtech.common.config.gregtech.ConfigFeatures; +import gregtech.common.config.gregtech.ConfigGeneral; +import gregtech.common.config.gregtech.ConfigHarvestLevel; +import gregtech.common.config.gregtech.ConfigMachines; +import gregtech.common.config.gregtech.ConfigOreDropBehavior; +import gregtech.common.config.gregtech.ConfigPollution; +import gregtech.common.config.machinestats.ConfigBronzeSolarBoiler; +import gregtech.common.config.machinestats.ConfigMassFabricator; +import gregtech.common.config.machinestats.ConfigMicrowaveEnergyTransmitter; +import gregtech.common.config.machinestats.ConfigSteelSolarBoiler; +import gregtech.common.config.machinestats.ConfigTeleporter; +import gregtech.common.config.worldgen.ConfigEndAsteroids; +import gregtech.common.covers.CoverFacadeAE; +import gregtech.common.misc.GTCommand; +import gregtech.common.misc.spaceprojects.commands.SPCommand; +import gregtech.common.misc.spaceprojects.commands.SPMCommand; +import gregtech.common.misc.spaceprojects.commands.SpaceProjectCommand; +import gregtech.common.tileentities.machines.MTEHatchCraftingInputME; +import gregtech.common.tileentities.storage.MTEDigitalChestBase; +import gregtech.crossmod.holoinventory.HoloInventory; +import gregtech.crossmod.waila.Waila; +import gregtech.loaders.load.CoverBehaviorLoader; +import gregtech.loaders.load.FuelLoader; +import gregtech.loaders.load.GTItemIterator; +import gregtech.loaders.load.MTERecipeLoader; +import gregtech.loaders.load.SonictronLoader; +import gregtech.loaders.misc.CoverLoader; +import gregtech.loaders.misc.GTAchievements; +import gregtech.loaders.misc.GTBees; +import gregtech.loaders.postload.BlockResistanceLoader; +import gregtech.loaders.postload.BookAndLootLoader; +import gregtech.loaders.postload.CraftingRecipeLoader; +import gregtech.loaders.postload.CropLoader; +import gregtech.loaders.postload.FakeRecipeLoader; +import gregtech.loaders.postload.GTPostLoad; +import gregtech.loaders.postload.GTWorldgenloader; +import gregtech.loaders.postload.ItemMaxStacksizeLoader; +import gregtech.loaders.postload.MachineRecipeLoader; +import gregtech.loaders.postload.MachineTooltipsLoader; +import gregtech.loaders.postload.MinableRegistrator; +import gregtech.loaders.postload.PosteaTransformers; +import gregtech.loaders.postload.RecyclerBlacklistLoader; +import gregtech.loaders.postload.ScrapboxDropLoader; +import gregtech.loaders.preload.GTPreLoad; +import gregtech.loaders.preload.GT_Loader_MultiTileEntities; +import gregtech.loaders.preload.LoaderCircuitBehaviors; +import gregtech.loaders.preload.LoaderGTBlockFluid; +import gregtech.loaders.preload.LoaderGTItemData; +import gregtech.loaders.preload.LoaderGTOreDictionary; +import gregtech.loaders.preload.LoaderMetaTileEntities; +import gregtech.loaders.preload.LoaderOreProcessing; +import ic2.api.recipe.IRecipeInput; +import ic2.api.recipe.RecipeOutput; + +@Mod( + modid = Mods.Names.GREG_TECH, + name = "GregTech", + version = "MC1710", + guiFactory = "gregtech.client.GT_GuiFactory", + dependencies = " required-after:IC2;" + " required-after:structurelib;" + + " required-after:gtnhlib@[0.2.1,);" + + " required-after:modularui@[1.1.12,);" + + " required-after:appliedenergistics2@[rv3-beta-258,);" + + " after:dreamcraft;" + + " after:Forestry;" + + " after:PFAAGeologica;" + + " after:Thaumcraft;" + + " after:Railcraft;" + + " after:ThermalExpansion;" + + " after:TwilightForest;" + + " after:harvestcraft;" + + " after:magicalcrops;" + + " after:Botania;" + + " after:BuildCraft|Transport;" + + " after:BuildCraft|Silicon;" + + " after:BuildCraft|Factory;" + + " after:BuildCraft|Energy;" + + " after:BuildCraft|Core;" + + " after:BuildCraft|Builders;" + + " after:GalacticraftCore;" + + " after:GalacticraftMars;" + + " after:GalacticraftPlanets;" + + " after:ThermalExpansion|Transport;" + + " after:ThermalExpansion|Energy;" + + " after:ThermalExpansion|Factory;" + + " after:RedPowerCore;" + + " after:RedPowerBase;" + + " after:RedPowerMachine;" + + " after:RedPowerCompat;" + + " after:RedPowerWiring;" + + " after:RedPowerLogic;" + + " after:RedPowerLighting;" + + " after:RedPowerWorld;" + + " after:RedPowerControl;" + + " after:UndergroundBiomes;" + + " after:TConstruct;" + + " after:Translocator;" + + " after:gendustry;") +public class GTMod implements IGTMod { + + static { + try { + // Client + ConfigurationManager.registerConfig(ConfigColorModulation.class); + ConfigurationManager.registerConfig(ConfigInterface.class); + ConfigurationManager.registerConfig(ConfigPreference.class); + ConfigurationManager.registerConfig(ConfigRender.class); + ConfigurationManager.registerConfig(ConfigWaila.class); + + // GregTech.cfg + ConfigurationManager.registerConfig(ConfigDebug.class); + ConfigurationManager.registerConfig(ConfigFeatures.class); + ConfigurationManager.registerConfig(ConfigGeneral.class); + ConfigurationManager.registerConfig(ConfigHarvestLevel.class); + ConfigurationManager.registerConfig(ConfigMachines.class); + ConfigurationManager.registerConfig(ConfigOreDropBehavior.class); + ConfigurationManager.registerConfig(ConfigPollution.class); + + // MachineStats.cfg + ConfigurationManager.registerConfig(ConfigBronzeSolarBoiler.class); + ConfigurationManager.registerConfig(gregtech.common.config.machinestats.ConfigMachines.class); + ConfigurationManager.registerConfig(ConfigMassFabricator.class); + ConfigurationManager.registerConfig(ConfigMicrowaveEnergyTransmitter.class); + ConfigurationManager.registerConfig(ConfigSteelSolarBoiler.class); + ConfigurationManager.registerConfig(ConfigTeleporter.class); + + // OverPoweredStuff + ConfigurationManager.registerConfig(gregtech.common.config.opstuff.ConfigGeneral.class); + + // Other + ConfigurationManager.registerConfig(gregtech.common.config.other.ConfigGeneral.class); + + // WorldGeneration + ConfigurationManager.registerConfig(ConfigEndAsteroids.class); + ConfigurationManager.registerConfig(gregtech.common.config.worldgen.ConfigGeneral.class); + + } catch (ConfigException e) { + throw new RuntimeException(e); + } + } + + public static final int NBT_VERSION = calculateTotalGTVersion(VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH); + + @Mod.Instance(Mods.Names.GREG_TECH) + public static GTMod instance; + + @SidedProxy( + modId = Mods.Names.GREG_TECH, + clientSide = "gregtech.common.GTClient", + serverSide = "gregtech.common.GTServer") + public static GTProxy gregtechproxy; + public static final boolean DEBUG = Boolean.getBoolean("gt.debug");; + + public static int MAX_IC2 = 2147483647; + public static GTAchievements achievements; + @Deprecated + public static final String aTextGeneral = "general"; + public static final String aTextIC2 = "ic2_"; + public static final Logger GT_FML_LOGGER = LogManager.getLogger("GregTech GTNH"); + + @SuppressWarnings("deprecation") + public GTMod() { + GTValues.GT = this; + GTValues.DW = new GTDummyWorld(); + GTValues.NW = new GTNetwork(); + GTValues.RA = new RecipeAdder(); + + for (int i = 0; i < 4; i++) { + GregTechAPI.registerTileEntityConstructor(i, i2 -> GregTechAPI.constructBaseMetaTileEntity()); + } + for (int i = 4; i < 12; i++) { + GregTechAPI.registerTileEntityConstructor(i, i2 -> new BaseMetaPipeEntity()); + } + + // noinspection deprecation// Need run-time initialization + GregTechAPI.sRecipeAdder = GTValues.RA; + + // noinspection ResultOfMethodCallIgnored// Suspicious likely pointless + Textures.BlockIcons.VOID.name(); + // noinspection ResultOfMethodCallIgnored// Suspicious likely pointless + Textures.ItemIcons.VOID.name(); + } + + public static int calculateTotalGTVersion(int majorVersion, int minorVersion) { + return calculateTotalGTVersion(majorVersion, minorVersion, 0); + } + + public static int calculateTotalGTVersion(int majorVersion, int minorVersion, int patchVersion) { + return majorVersion * 1000000 + minorVersion * 1000 + patchVersion; + } + + @Mod.EventHandler + public void onPreLoad(FMLPreInitializationEvent aEvent) { + Locale.setDefault(Locale.ENGLISH); + if (GregTechAPI.sPreloadStarted) { + return; + } + + for (Runnable tRunnable : GregTechAPI.sBeforeGTPreload) { + try { + tRunnable.run(); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + GTPreLoad.getConfiguration(aEvent.getModConfigurationDirectory()); + GTPreLoad.createLogFiles( + aEvent.getModConfigurationDirectory() + .getParentFile()); + + gregtechproxy.onPreLoad(); + + GTLog.out.println("GTMod: Setting Configs"); + + GTPreLoad.loadConfig(); + + new EnchantmentHazmat(); + new EnchantmentEnderDamage(); + new EnchantmentRadioactivity(); + + Materials.init(); + + GTPreLoad.initLocalization( + aEvent.getModConfigurationDirectory() + .getParentFile()); + GTPreLoad.adjustScrap(); + + AEApi.instance() + .registries() + .interfaceTerminal() + .register(MTEHatchCraftingInputME.class); + + GTPreLoad.runMineTweakerCompat(); + + new LoaderOreProcessing().run(); + new LoaderGTOreDictionary().run(); + new LoaderGTItemData().run(); + new LoaderGTBlockFluid().run(); + new LoaderMetaTileEntities().run(); + if (GTValues.enableMultiTileEntities) { + new GT_Loader_MultiTileEntities().run(); + } + + new LoaderCircuitBehaviors().run(); + new CoverBehaviorLoader().run(); + new SonictronLoader().run(); + new GTSpawnEventHandler(); + + // populate itemstack instance for NBT check in GTRecipe + setItemStacks(); + + GTPreLoad.sortToTheEnd(); + GregTechAPI.sPreloadFinished = true; + GTLog.out.println("GTMod: Preload-Phase finished!"); + GTLog.ore.println("GTMod: Preload-Phase finished!"); + + GTUIInfos.init(); + + for (Runnable tRunnable : GregTechAPI.sAfterGTPreload) { + try { + tRunnable.run(); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + if (FMLCommonHandler.instance() + .getEffectiveSide() + .isServer()) AssemblyLineServer.fillMap(aEvent); + } + + @Mod.EventHandler + public void onLoad(FMLInitializationEvent aEvent) { + if (GregTechAPI.sLoadStarted) { + return; + } + + for (Runnable tRunnable : GregTechAPI.sBeforeGTLoad) { + try { + tRunnable.run(); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + if (Forestry.isModLoaded()) + // noinspection InstantiationOfUtilityClass//TODO: Refactor GTBees with proper state handling + new GTBees(); + + // Disable Low Grav regardless of config if Cleanroom is disabled. + if (!gregtechproxy.mEnableCleanroom) { + gregtechproxy.mLowGravProcessing = false; + } + + gregtechproxy.onLoad(); + + registerCircuitProgrammer(new Predicate<>() { + + private final int screwdriverOreId = OreDictionary.getOreID("craftingToolScrewdriver"); + + @Override + public boolean test(ItemStack stack) { + for (int i : OreDictionary.getOreIDs(stack)) if (i == screwdriverOreId) return true; + return false; + } + }, true); + + new MTERecipeLoader().run(); + + new GTItemIterator().run(); + gregtechproxy.registerUnificationEntries(); + new FuelLoader().run(); + + if (Mods.Waila.isModLoaded()) { + Waila.init(); + } + if (Mods.HoloInventory.isModLoaded()) { + HoloInventory.init(); + } + + LHECoolantRegistry.registerBaseCoolants(); + + GT_FML_LOGGER.debug("Registering SpaceDimensions"); + SpaceDimRegisterer.register(); + + GregTechAPI.sLoadFinished = true; + GTLog.out.println("GTMod: Load-Phase finished!"); + GTLog.ore.println("GTMod: Load-Phase finished!"); + + for (Runnable tRunnable : GregTechAPI.sAfterGTLoad) { + try { + tRunnable.run(); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + } + + @Mod.EventHandler + public void onPostLoad(FMLPostInitializationEvent aEvent) { + if (GregTechAPI.sPostloadStarted) { + return; + } + + // Seems only used by GGFab so far + for (Runnable tRunnable : GregTechAPI.sBeforeGTPostload) { + try { + tRunnable.run(); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + gregtechproxy.onPostLoad(); + + if (DEBUG) { + // Prints all the used MTE id and their associated TE name, turned on with -Dgt.debug=true in jvm args + final int bound = GregTechAPI.METATILEENTITIES.length; + for (int i1 = 1; i1 < bound; i1++) { + if (GregTechAPI.METATILEENTITIES[i1] != null) { + GTLog.out.printf("META %d %s\n", i1, GregTechAPI.METATILEENTITIES[i1].getMetaName()); + } + } + } + + gregtechproxy.registerUnificationEntries(); + + new BookAndLootLoader().run(); + new ItemMaxStacksizeLoader().run(); + new BlockResistanceLoader().run(); + new RecyclerBlacklistLoader().run(); + new MinableRegistrator().run(); + new FakeRecipeLoader().run(); + new MachineRecipeLoader().run(); + new ScrapboxDropLoader().run(); + new CropLoader().run(); + new GTWorldgenloader().run(); + new CoverLoader().run(); + + GTRecipeRegistrator.registerUsagesForMaterials( + null, + false, + new ItemStack(Blocks.planks, 1), + new ItemStack(Blocks.cobblestone, 1), + new ItemStack(Blocks.stone, 1), + new ItemStack(Items.leather, 1)); + + GTOreDictUnificator.addItemData( + GTModHandler.getRecipeOutput( + null, + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), + null, + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), + null, + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), + null, + null, + null), + new ItemData(Materials.Tin, 10886400L)); + GTModHandler.removeRecipe( + new ItemStack(Items.glowstone_dust, 1), + new ItemStack(Items.glowstone_dust, 1), + null, + new ItemStack(Items.glowstone_dust, 1), + new ItemStack(Items.glowstone_dust, 1)); + GTModHandler.removeRecipeDelayed( + new ItemStack(Blocks.wooden_slab, 1, 0), + new ItemStack(Blocks.wooden_slab, 1, 1), + new ItemStack(Blocks.wooden_slab, 1, 2)); + GTModHandler.addCraftingRecipe( + new ItemStack(Blocks.wooden_slab, 6, 0), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "WWW", 'W', new ItemStack(Blocks.planks, 1, 0) }); + + // Save a copy of these list before activateOreDictHandler(), then loop over them. + Map aMaceratorRecipeList = GTModHandler.getMaceratorRecipeList(); + Map aCompressorRecipeList = GTModHandler.getCompressorRecipeList(); + Map aExtractorRecipeList = GTModHandler.getExtractorRecipeList(); + Map aOreWashingRecipeList = GTModHandler.getOreWashingRecipeList(); + Map aThermalCentrifugeRecipeList = GTModHandler.getThermalCentrifugeRecipeList(); + + GTLog.out.println( + "GTMod: Activating OreDictionary Handler, this can take some time, as it scans the whole OreDictionary"); + GT_FML_LOGGER.info( + "If your Log stops here, you were too impatient. Wait a bit more next time, before killing Minecraft with the Task Manager."); + + GTPostLoad.activateOreDictHandler(); + GTPostLoad.replaceVanillaMaterials(); + GTPostLoad.removeIc2Recipes( + aMaceratorRecipeList, + aCompressorRecipeList, + aExtractorRecipeList, + aOreWashingRecipeList, + aThermalCentrifugeRecipeList); + + if (GTValues.D1) { + GTModHandler.sSingleNonBlockDamagableRecipeList.forEach( + iRecipe -> GTLog.out.println( + "=> " + iRecipe.getRecipeOutput() + .getDisplayName())); + } + new CraftingRecipeLoader().run(); + GTModHandler.removeRecipeByOutput(ItemList.IC2_ForgeHammer.getWildcard(1L)); + GTModHandler.removeRecipeByOutput(GTModHandler.getIC2Item("machine", 1L)); + GTModHandler.addCraftingRecipe( + GTModHandler.getIC2Item("machine", 1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "RRR", "RwR", "RRR", 'R', OrePrefixes.plate.get(Materials.Iron) }); + + GTPostLoad.registerFluidCannerRecipes(); + + if (Forestry.isModLoaded()) { + GTForestryCompat.transferCentrifugeRecipes(); + GTForestryCompat.transferSqueezerRecipes(); + } + MTEDigitalChestBase.registerAEIntegration(); + ItemStack facade = AEApi.instance() + .definitions() + .items() + .facade() + .maybeItem() + .transform(i -> new ItemStack(i, 1, GTValues.W)) + .orNull(); + if (facade != null) { + GregTechAPI.registerCover(facade, null, new CoverFacadeAE()); + } + + Arrays + .stream( + new String[] { "blastfurnace", "blockcutter", "inductionFurnace", "generator", "windMill", "waterMill", + "solarPanel", "centrifuge", "electrolyzer", "compressor", "electroFurnace", "extractor", + "macerator", "recycler", "metalformer", "orewashingplant", "massFabricator", "replicator", }) + .map(tName -> GTModHandler.getIC2Item(tName, 1L)) + .forEach(GTModHandler::removeRecipeByOutputDelayed); + + GTPostLoad.nerfVanillaTools(); + + // Register postea transformers + new PosteaTransformers().run(); + + /* + * Until this point most crafting recipe additions, and removals, have been buffered. Go through, execute the + * removals in bulk, and then any deferred additions. The bulk removals in particular significantly speed up the + * recipe list modifications. + */ + + @SuppressWarnings("UnstableApiUsage") // Stable enough for this project + Stopwatch stopwatch = Stopwatch.createStarted(); + GTLog.out.println("GTMod: Adding buffered Recipes."); + GTModHandler.stopBufferingCraftingRecipes(); + // noinspection UnstableApiUsage// Stable enough for this project + GT_FML_LOGGER.info("Executed delayed Crafting Recipes (" + stopwatch.stop() + "). Have a Cake."); + + GTLog.out.println("GTMod: Saving Lang File."); + new MachineTooltipsLoader().run(); + GTLanguageManager.sEnglishFile.save(); + GregTechAPI.sPostloadFinished = true; + GTLog.out.println("GTMod: PostLoad-Phase finished!"); + GTLog.ore.println("GTMod: PostLoad-Phase finished!"); + for (Runnable tRunnable : GregTechAPI.sAfterGTPostload) { + try { + tRunnable.run(); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + GTPostLoad.addFakeRecipes(); + + if (GregTechAPI.mOutputRF || GregTechAPI.mInputRF) { + GTUtility.checkAvailabilities(); + if (!GTUtility.RF_CHECK) { + GregTechAPI.mOutputRF = false; + GregTechAPI.mInputRF = false; + } + } + + GTPostLoad.addSolidFakeLargeBoilerFuels(); + GTPostLoad.identifyAnySteam(); + + achievements = new GTAchievements(); + + GTRecipe.GTppRecipeHelper = true; + GTLog.out.println("GTMod: Loading finished, de-allocating temporary Init Variables."); + GregTechAPI.sBeforeGTPreload = null; + GregTechAPI.sAfterGTPreload = null; + GregTechAPI.sBeforeGTLoad = null; + GregTechAPI.sAfterGTLoad = null; + GregTechAPI.sBeforeGTPostload = null; + GregTechAPI.sAfterGTPostload = null; + + GTPostLoad.createGTtoolsCreativeTab(); + } + + @Mod.EventHandler + public void onLoadComplete(FMLLoadCompleteEvent aEvent) { + gregtechproxy.onLoadComplete(); + for (Runnable tRunnable : GregTechAPI.sGTCompleteLoad) { + try { + tRunnable.run(); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + GregTechAPI.sGTCompleteLoad = null; + GregTechAPI.sFullLoadFinished = true; + } + + @Mod.EventHandler + public void onServerStarted(FMLServerStartedEvent aEvent) { + gregtechproxy.onServerStarted(); + } + + @Mod.EventHandler + public void onServerAboutToStart(FMLServerAboutToStartEvent aEvent) { + gregtechproxy.onServerAboutToStart(); + } + + @Mod.EventHandler + public void onServerStarting(FMLServerStartingEvent aEvent) { + + for (Runnable tRunnable : GregTechAPI.sBeforeGTServerstart) { + try { + tRunnable.run(); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + gregtechproxy.onServerStarting(); + GTModHandler.removeAllIC2Recipes(); + GTLog.out.println("GTMod: Unificating outputs of all known Recipe Types."); + ArrayList tStacks = new ArrayList<>(10000); + GTLog.out.println("GTMod: IC2 Machines"); + + ic2.api.recipe.Recipes.cannerBottle.getRecipes() + .values() + .stream() + .map(t -> t.items) + .forEach(tStacks::addAll); + ic2.api.recipe.Recipes.centrifuge.getRecipes() + .values() + .stream() + .map(t -> t.items) + .forEach(tStacks::addAll); + ic2.api.recipe.Recipes.compressor.getRecipes() + .values() + .stream() + .map(t -> t.items) + .forEach(tStacks::addAll); + ic2.api.recipe.Recipes.extractor.getRecipes() + .values() + .stream() + .map(t -> t.items) + .forEach(tStacks::addAll); + ic2.api.recipe.Recipes.macerator.getRecipes() + .values() + .stream() + .map(t -> t.items) + .forEach(tStacks::addAll); + ic2.api.recipe.Recipes.metalformerCutting.getRecipes() + .values() + .stream() + .map(t -> t.items) + .forEach(tStacks::addAll); + ic2.api.recipe.Recipes.metalformerExtruding.getRecipes() + .values() + .stream() + .map(t -> t.items) + .forEach(tStacks::addAll); + ic2.api.recipe.Recipes.metalformerRolling.getRecipes() + .values() + .stream() + .map(t -> t.items) + .forEach(tStacks::addAll); + ic2.api.recipe.Recipes.matterAmplifier.getRecipes() + .values() + .stream() + .map(t -> t.items) + .forEach(tStacks::addAll); + ic2.api.recipe.Recipes.oreWashing.getRecipes() + .values() + .stream() + .map(t -> t.items) + .forEach(tStacks::addAll); + + GTLog.out.println("GTMod: Dungeon Loot"); + for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("dungeonChest") + .getItems(new XSTR())) { + tStacks.add(tContent.theItemId); + } + for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("bonusChest") + .getItems(new XSTR())) { + tStacks.add(tContent.theItemId); + } + for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("villageBlacksmith") + .getItems(new XSTR())) { + tStacks.add(tContent.theItemId); + } + for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("strongholdCrossing") + .getItems(new XSTR())) { + tStacks.add(tContent.theItemId); + } + for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("strongholdLibrary") + .getItems(new XSTR())) { + tStacks.add(tContent.theItemId); + } + for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("strongholdCorridor") + .getItems(new XSTR())) { + tStacks.add(tContent.theItemId); + } + for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("pyramidJungleDispenser") + .getItems(new XSTR())) { + tStacks.add(tContent.theItemId); + } + for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("pyramidJungleChest") + .getItems(new XSTR())) { + tStacks.add(tContent.theItemId); + } + for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("pyramidDesertyChest") + .getItems(new XSTR())) { + tStacks.add(tContent.theItemId); + } + for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("mineshaftCorridor") + .getItems(new XSTR())) { + tStacks.add(tContent.theItemId); + } + GTLog.out.println("GTMod: Smelting"); + + // Deal with legacy Minecraft raw types + tStacks.addAll( + FurnaceRecipes.smelting() + .getSmeltingList() + .values()); + + if (gregtechproxy.mCraftingUnification) { + GTLog.out.println("GTMod: Crafting Recipes"); + for (IRecipe tRecipe : CraftingManager.getInstance() + .getRecipeList()) { + if ((tRecipe instanceof IRecipe)) { + tStacks.add(tRecipe.getRecipeOutput()); + } + } + } + for (ItemStack tOutput : tStacks) { + if (!gregtechproxy.mRegisteredOres.contains(tOutput)) { + GTOreDictUnificator.setStack(tOutput); + } else { + logMultilineError(GT_FML_LOGGER, generateGTErr01Message(tOutput)); + tOutput.setStackDisplayName("ERROR! PLEASE CHECK YOUR LOG FOR 'GT-ERR-01'!"); + } + } + GregTechAPI.mServerStarted = true; + GTLog.out.println("GTMod: ServerStarting-Phase finished!"); + GTLog.ore.println("GTMod: ServerStarting-Phase finished!"); + + for (Runnable tRunnable : GregTechAPI.sAfterGTServerstart) { + try { + tRunnable.run(); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + aEvent.registerServerCommand(new GTCommand()); + aEvent.registerServerCommand(new SPCommand()); + aEvent.registerServerCommand(new SPMCommand()); + aEvent.registerServerCommand(new SpaceProjectCommand()); + // Sets a new Machine Block Update Thread everytime a world is loaded + RunnableMachineUpdate.initExecutorService(); + } + + public boolean isServerSide() { + return gregtechproxy.isServerSide(); + } + + public boolean isClientSide() { + return gregtechproxy.isClientSide(); + } + + public boolean isBukkitSide() { + return gregtechproxy.isBukkitSide(); + } + + public EntityPlayer getThePlayer() { + return gregtechproxy.getThePlayer(); + } + + public int addArmor(String aArmorPrefix) { + return gregtechproxy.addArmor(aArmorPrefix); + } + + public void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ) { + gregtechproxy.doSonictronSound(aStack, aWorld, aX, aY, aZ); + } + + @Mod.EventHandler + public void onIDChangingEvent(FMLModIdMappingEvent aEvent) { + GTUtility.reInit(); + GTRecipe.reInit(); + try { + for (Map gt_itemStackMap : GregTechAPI.sItemStackMappings) { + GTUtility.reMap(gt_itemStackMap); + } + for (SetMultimap gt_itemStackMap : GregTechAPI.itemStackMultiMaps) { + GTUtility.reMap(gt_itemStackMap); + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + @Mod.EventHandler + public void onServerStopping(FMLServerStoppingEvent aEvent) { + for (Runnable tRunnable : GregTechAPI.sBeforeGTServerstop) { + try { + tRunnable.run(); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + gregtechproxy.onServerStopping(); + + for (Runnable tRunnable : GregTechAPI.sAfterGTServerstop) { + try { + tRunnable.run(); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + // Interrupt IDLE Threads to close down cleanly + RunnableMachineUpdate.shutdownExecutorService(); + } + + public static void logStackTrace(Throwable t) { + final StringWriter sw = new StringWriter(); + t.printStackTrace(new PrintWriter(sw)); + GT_FML_LOGGER.error(sw); + } + + private static String[] generateGTErr01Message(ItemStack stack) { + // The message is presented on a per-line basis to make possible formatting in the future easier. + return new String[] { "GT-ERR-01 at " + stack.getUnlocalizedName() + " " + stack.getDisplayName(), + "A recipe used an OreDict item as output directly, without copying the item before that. This is a typical CallByReference/CallByValue error.", + "The said item will be renamed to make the invalid recipe visible.", + "Please check all recipes that output this item, and report them to the mod that introduced the recipes.", }; + } + + @SuppressWarnings("SameParameterValue") // The method is used with one logger, but that might change in the future. + private static void logMultilineError(Logger logger, String[] errorMessageLines) { + for (String errorMessage : errorMessageLines) { + logger.error(errorMessage); + } + } +} diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java deleted file mode 100644 index 1467000877..0000000000 --- a/src/main/java/gregtech/GT_Mod.java +++ /dev/null @@ -1,886 +0,0 @@ -package gregtech; - -import static gregtech.GT_Version.VERSION_MAJOR; -import static gregtech.GT_Version.VERSION_MINOR; -import static gregtech.GT_Version.VERSION_PATCH; -import static gregtech.api.GregTech_API.registerCircuitProgrammer; -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.util.GT_Recipe.setItemStacks; - -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Locale; -import java.util.Map; -import java.util.function.Predicate; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.WeightedRandomChestContent; -import net.minecraft.world.World; -import net.minecraftforge.common.ChestGenHooks; -import net.minecraftforge.oredict.OreDictionary; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import com.google.common.base.Stopwatch; -import com.google.common.collect.SetMultimap; -import com.gtnewhorizon.gtnhlib.config.ConfigException; -import com.gtnewhorizon.gtnhlib.config.ConfigurationManager; - -import appeng.api.AEApi; -import bloodasp.galacticgreg.SpaceDimRegisterer; -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.SidedProxy; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLLoadCompleteEvent; -import cpw.mods.fml.common.event.FMLModIdMappingEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.event.FMLServerAboutToStartEvent; -import cpw.mods.fml.common.event.FMLServerStartedEvent; -import cpw.mods.fml.common.event.FMLServerStartingEvent; -import cpw.mods.fml.common.event.FMLServerStoppingEvent; -import gregtech.api.GregTech_API; -import gregtech.api.enchants.Enchantment_EnderDamage; -import gregtech.api.enchants.Enchantment_Hazmat; -import gregtech.api.enchants.Enchantment_Radioactivity; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Mods; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.internal.IGT_Mod; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.objects.ItemData; -import gregtech.api.objects.XSTR; -import gregtech.api.registries.LHECoolantRegistry; -import gregtech.api.threads.GT_Runnable_MachineBlockUpdate; -import gregtech.api.util.GT_Assemblyline_Server; -import gregtech.api.util.GT_Forestry_Compat; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeRegistrator; -import gregtech.api.util.GT_SpawnEventHandler; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.item.ItemHolder; -import gregtech.common.GT_DummyWorld; -import gregtech.common.GT_Network; -import gregtech.common.GT_Proxy; -import gregtech.common.GT_RecipeAdder; -import gregtech.common.config.client.ConfigColorModulation; -import gregtech.common.config.client.ConfigInterface; -import gregtech.common.config.client.ConfigPreference; -import gregtech.common.config.client.ConfigRender; -import gregtech.common.config.client.ConfigWaila; -import gregtech.common.config.gregtech.ConfigDebug; -import gregtech.common.config.gregtech.ConfigFeatures; -import gregtech.common.config.gregtech.ConfigGeneral; -import gregtech.common.config.gregtech.ConfigHarvestLevel; -import gregtech.common.config.gregtech.ConfigMachines; -import gregtech.common.config.gregtech.ConfigOreDropBehavior; -import gregtech.common.config.gregtech.ConfigPollution; -import gregtech.common.config.machinestats.ConfigBronzeSolarBoiler; -import gregtech.common.config.machinestats.ConfigMassFabricator; -import gregtech.common.config.machinestats.ConfigMicrowaveEnergyTransmitter; -import gregtech.common.config.machinestats.ConfigSteelSolarBoiler; -import gregtech.common.config.machinestats.ConfigTeleporter; -import gregtech.common.config.worldgen.ConfigEndAsteroids; -import gregtech.common.covers.GT_Cover_FacadeAE; -import gregtech.common.misc.GT_Command; -import gregtech.common.misc.spaceprojects.commands.SPM_Command; -import gregtech.common.misc.spaceprojects.commands.SP_Command; -import gregtech.common.misc.spaceprojects.commands.SpaceProject_Command; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_CraftingInput_ME; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalChestBase; -import gregtech.crossmod.holoinventory.HoloInventory; -import gregtech.crossmod.waila.Waila; -import gregtech.loaders.load.GT_CoverBehaviorLoader; -import gregtech.loaders.load.GT_FuelLoader; -import gregtech.loaders.load.GT_ItemIterator; -import gregtech.loaders.load.GT_Loader_MetaTileEntities_Recipes; -import gregtech.loaders.load.GT_SonictronLoader; -import gregtech.loaders.misc.GT_Achievements; -import gregtech.loaders.misc.GT_Bees; -import gregtech.loaders.misc.GT_CoverLoader; -import gregtech.loaders.postload.GT_BlockResistanceLoader; -import gregtech.loaders.postload.GT_BookAndLootLoader; -import gregtech.loaders.postload.GT_CraftingRecipeLoader; -import gregtech.loaders.postload.GT_CropLoader; -import gregtech.loaders.postload.GT_FakeRecipeLoader; -import gregtech.loaders.postload.GT_ItemMaxStacksizeLoader; -import gregtech.loaders.postload.GT_MachineRecipeLoader; -import gregtech.loaders.postload.GT_MachineTooltipsLoader; -import gregtech.loaders.postload.GT_MinableRegistrator; -import gregtech.loaders.postload.GT_PostLoad; -import gregtech.loaders.postload.GT_RecyclerBlacklistLoader; -import gregtech.loaders.postload.GT_ScrapboxDropLoader; -import gregtech.loaders.postload.GT_Worldgenloader; -import gregtech.loaders.postload.PosteaTransformers; -import gregtech.loaders.preload.GT_Loader_CircuitBehaviors; -import gregtech.loaders.preload.GT_Loader_ItemData; -import gregtech.loaders.preload.GT_Loader_Item_Block_And_Fluid; -import gregtech.loaders.preload.GT_Loader_MetaTileEntities; -import gregtech.loaders.preload.GT_Loader_MultiTileEntities; -import gregtech.loaders.preload.GT_Loader_OreDictionary; -import gregtech.loaders.preload.GT_Loader_OreProcessing; -import gregtech.loaders.preload.GT_PreLoad; -import ic2.api.recipe.IRecipeInput; -import ic2.api.recipe.RecipeOutput; - -@Mod( - modid = Mods.Names.GREG_TECH, - name = "GregTech", - version = "MC1710", - guiFactory = "gregtech.client.GT_GuiFactory", - dependencies = " required-after:IC2;" + " required-after:structurelib;" - + " required-after:gtnhlib@[0.2.1,);" - + " required-after:modularui@[1.1.12,);" - + " required-after:appliedenergistics2@[rv3-beta-258,);" - + " after:dreamcraft;" - + " after:Forestry;" - + " after:PFAAGeologica;" - + " after:Thaumcraft;" - + " after:Railcraft;" - + " after:ThermalExpansion;" - + " after:TwilightForest;" - + " after:harvestcraft;" - + " after:magicalcrops;" - + " after:Botania;" - + " after:BuildCraft|Transport;" - + " after:BuildCraft|Silicon;" - + " after:BuildCraft|Factory;" - + " after:BuildCraft|Energy;" - + " after:BuildCraft|Core;" - + " after:BuildCraft|Builders;" - + " after:GalacticraftCore;" - + " after:GalacticraftMars;" - + " after:GalacticraftPlanets;" - + " after:ThermalExpansion|Transport;" - + " after:ThermalExpansion|Energy;" - + " after:ThermalExpansion|Factory;" - + " after:RedPowerCore;" - + " after:RedPowerBase;" - + " after:RedPowerMachine;" - + " after:RedPowerCompat;" - + " after:RedPowerWiring;" - + " after:RedPowerLogic;" - + " after:RedPowerLighting;" - + " after:RedPowerWorld;" - + " after:RedPowerControl;" - + " after:UndergroundBiomes;" - + " after:TConstruct;" - + " after:Translocator;" - + " after:gendustry;") -public class GT_Mod implements IGT_Mod { - - static { - try { - // Client - ConfigurationManager.registerConfig(ConfigColorModulation.class); - ConfigurationManager.registerConfig(ConfigInterface.class); - ConfigurationManager.registerConfig(ConfigPreference.class); - ConfigurationManager.registerConfig(ConfigRender.class); - ConfigurationManager.registerConfig(ConfigWaila.class); - - // GregTech.cfg - ConfigurationManager.registerConfig(ConfigDebug.class); - ConfigurationManager.registerConfig(ConfigFeatures.class); - ConfigurationManager.registerConfig(ConfigGeneral.class); - ConfigurationManager.registerConfig(ConfigHarvestLevel.class); - ConfigurationManager.registerConfig(ConfigMachines.class); - ConfigurationManager.registerConfig(ConfigOreDropBehavior.class); - ConfigurationManager.registerConfig(ConfigPollution.class); - - // MachineStats.cfg - ConfigurationManager.registerConfig(ConfigBronzeSolarBoiler.class); - ConfigurationManager.registerConfig(gregtech.common.config.machinestats.ConfigMachines.class); - ConfigurationManager.registerConfig(ConfigMassFabricator.class); - ConfigurationManager.registerConfig(ConfigMicrowaveEnergyTransmitter.class); - ConfigurationManager.registerConfig(ConfigSteelSolarBoiler.class); - ConfigurationManager.registerConfig(ConfigTeleporter.class); - - // OverPoweredStuff - ConfigurationManager.registerConfig(gregtech.common.config.opstuff.ConfigGeneral.class); - - // Other - ConfigurationManager.registerConfig(gregtech.common.config.other.ConfigGeneral.class); - - // WorldGeneration - ConfigurationManager.registerConfig(ConfigEndAsteroids.class); - ConfigurationManager.registerConfig(gregtech.common.config.worldgen.ConfigGeneral.class); - - } catch (ConfigException e) { - throw new RuntimeException(e); - } - } - - public static final int NBT_VERSION = calculateTotalGTVersion(VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH); - - @Mod.Instance(Mods.Names.GREG_TECH) - public static GT_Mod instance; - - @SidedProxy( - modId = Mods.Names.GREG_TECH, - clientSide = "gregtech.common.GT_Client", - serverSide = "gregtech.common.GT_Server") - public static GT_Proxy gregtechproxy; - public static final boolean DEBUG = Boolean.getBoolean("gt.debug");; - - public static int MAX_IC2 = 2147483647; - public static GT_Achievements achievements; - @Deprecated - public static final String aTextGeneral = "general"; - public static final String aTextIC2 = "ic2_"; - public static final Logger GT_FML_LOGGER = LogManager.getLogger("GregTech GTNH"); - - @SuppressWarnings("deprecation") - public GT_Mod() { - GT_Values.GT = this; - GT_Values.DW = new GT_DummyWorld(); - GT_Values.NW = new GT_Network(); - GT_Values.RA = new GT_RecipeAdder(); - - for (int i = 0; i < 4; i++) { - GregTech_API.registerTileEntityConstructor(i, i2 -> GregTech_API.constructBaseMetaTileEntity()); - } - for (int i = 4; i < 12; i++) { - GregTech_API.registerTileEntityConstructor(i, i2 -> new BaseMetaPipeEntity()); - } - - // noinspection deprecation// Need run-time initialization - GregTech_API.sRecipeAdder = GT_Values.RA; - - // noinspection ResultOfMethodCallIgnored// Suspicious likely pointless - Textures.BlockIcons.VOID.name(); - // noinspection ResultOfMethodCallIgnored// Suspicious likely pointless - Textures.ItemIcons.VOID.name(); - } - - public static int calculateTotalGTVersion(int majorVersion, int minorVersion) { - return calculateTotalGTVersion(majorVersion, minorVersion, 0); - } - - public static int calculateTotalGTVersion(int majorVersion, int minorVersion, int patchVersion) { - return majorVersion * 1000000 + minorVersion * 1000 + patchVersion; - } - - @Mod.EventHandler - public void onPreLoad(FMLPreInitializationEvent aEvent) { - Locale.setDefault(Locale.ENGLISH); - if (GregTech_API.sPreloadStarted) { - return; - } - - for (Runnable tRunnable : GregTech_API.sBeforeGTPreload) { - try { - tRunnable.run(); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - GT_PreLoad.getConfiguration(aEvent.getModConfigurationDirectory()); - GT_PreLoad.createLogFiles( - aEvent.getModConfigurationDirectory() - .getParentFile()); - - gregtechproxy.onPreLoad(); - - GT_Log.out.println("GT_Mod: Setting Configs"); - - GT_PreLoad.loadConfig(); - - new Enchantment_Hazmat(); - new Enchantment_EnderDamage(); - new Enchantment_Radioactivity(); - - Materials.init(); - - GT_PreLoad.initLocalization( - aEvent.getModConfigurationDirectory() - .getParentFile()); - GT_PreLoad.adjustScrap(); - - AEApi.instance() - .registries() - .interfaceTerminal() - .register(GT_MetaTileEntity_Hatch_CraftingInput_ME.class); - - GT_PreLoad.runMineTweakerCompat(); - - new GT_Loader_OreProcessing().run(); - new GT_Loader_OreDictionary().run(); - new GT_Loader_ItemData().run(); - new GT_Loader_Item_Block_And_Fluid().run(); - new GT_Loader_MetaTileEntities().run(); - if (GT_Values.enableMultiTileEntities) { - new GT_Loader_MultiTileEntities().run(); - } - - new GT_Loader_CircuitBehaviors().run(); - new GT_CoverBehaviorLoader().run(); - new GT_SonictronLoader().run(); - new GT_SpawnEventHandler(); - - // populate itemstack instance for NBT check in GT_Recipe - setItemStacks(); - - GT_PreLoad.sortToTheEnd(); - GregTech_API.sPreloadFinished = true; - GT_Log.out.println("GT_Mod: Preload-Phase finished!"); - GT_Log.ore.println("GT_Mod: Preload-Phase finished!"); - - GT_UIInfos.init(); - - for (Runnable tRunnable : GregTech_API.sAfterGTPreload) { - try { - tRunnable.run(); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - if (FMLCommonHandler.instance() - .getEffectiveSide() - .isServer()) GT_Assemblyline_Server.fillMap(aEvent); - } - - @Mod.EventHandler - public void onLoad(FMLInitializationEvent aEvent) { - if (GregTech_API.sLoadStarted) { - return; - } - - for (Runnable tRunnable : GregTech_API.sBeforeGTLoad) { - try { - tRunnable.run(); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - if (Forestry.isModLoaded()) - // noinspection InstantiationOfUtilityClass//TODO: Refactor GT_Bees with proper state handling - new GT_Bees(); - - // Disable Low Grav regardless of config if Cleanroom is disabled. - if (!gregtechproxy.mEnableCleanroom) { - gregtechproxy.mLowGravProcessing = false; - } - - gregtechproxy.onLoad(); - - registerCircuitProgrammer(new Predicate<>() { - - private final int screwdriverOreId = OreDictionary.getOreID("craftingToolScrewdriver"); - - @Override - public boolean test(ItemStack stack) { - for (int i : OreDictionary.getOreIDs(stack)) if (i == screwdriverOreId) return true; - return false; - } - }, true); - - new GT_Loader_MetaTileEntities_Recipes().run(); - - new GT_ItemIterator().run(); - gregtechproxy.registerUnificationEntries(); - new GT_FuelLoader().run(); - - if (Mods.Waila.isModLoaded()) { - Waila.init(); - } - if (Mods.HoloInventory.isModLoaded()) { - HoloInventory.init(); - } - - LHECoolantRegistry.registerBaseCoolants(); - - GT_FML_LOGGER.debug("Registering SpaceDimensions"); - SpaceDimRegisterer.register(); - - GregTech_API.sLoadFinished = true; - GT_Log.out.println("GT_Mod: Load-Phase finished!"); - GT_Log.ore.println("GT_Mod: Load-Phase finished!"); - - for (Runnable tRunnable : GregTech_API.sAfterGTLoad) { - try { - tRunnable.run(); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - } - - @Mod.EventHandler - public void onPostLoad(FMLPostInitializationEvent aEvent) { - if (GregTech_API.sPostloadStarted) { - return; - } - - // Seems only used by GGFab so far - for (Runnable tRunnable : GregTech_API.sBeforeGTPostload) { - try { - tRunnable.run(); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - gregtechproxy.onPostLoad(); - - if (DEBUG) { - // Prints all the used MTE id and their associated TE name, turned on with -Dgt.debug=true in jvm args - final int bound = GregTech_API.METATILEENTITIES.length; - for (int i1 = 1; i1 < bound; i1++) { - if (GregTech_API.METATILEENTITIES[i1] != null) { - GT_Log.out.printf("META %d %s\n", i1, GregTech_API.METATILEENTITIES[i1].getMetaName()); - } - } - } - - gregtechproxy.registerUnificationEntries(); - - new GT_BookAndLootLoader().run(); - new GT_ItemMaxStacksizeLoader().run(); - new GT_BlockResistanceLoader().run(); - new GT_RecyclerBlacklistLoader().run(); - new GT_MinableRegistrator().run(); - new GT_FakeRecipeLoader().run(); - new GT_MachineRecipeLoader().run(); - new GT_ScrapboxDropLoader().run(); - new GT_CropLoader().run(); - new GT_Worldgenloader().run(); - new GT_CoverLoader().run(); - - GT_RecipeRegistrator.registerUsagesForMaterials( - null, - false, - new ItemStack(Blocks.planks, 1), - new ItemStack(Blocks.cobblestone, 1), - new ItemStack(Blocks.stone, 1), - new ItemStack(Items.leather, 1)); - - GT_OreDictUnificator.addItemData( - GT_ModHandler.getRecipeOutput( - null, - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), - null, - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), - null, - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L), - null, - null, - null), - new ItemData(Materials.Tin, 10886400L)); - GT_ModHandler.removeRecipe( - new ItemStack(Items.glowstone_dust, 1), - new ItemStack(Items.glowstone_dust, 1), - null, - new ItemStack(Items.glowstone_dust, 1), - new ItemStack(Items.glowstone_dust, 1)); - GT_ModHandler.removeRecipeDelayed( - new ItemStack(Blocks.wooden_slab, 1, 0), - new ItemStack(Blocks.wooden_slab, 1, 1), - new ItemStack(Blocks.wooden_slab, 1, 2)); - GT_ModHandler.addCraftingRecipe( - new ItemStack(Blocks.wooden_slab, 6, 0), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "WWW", 'W', new ItemStack(Blocks.planks, 1, 0) }); - - // Save a copy of these list before activateOreDictHandler(), then loop over them. - Map aMaceratorRecipeList = GT_ModHandler.getMaceratorRecipeList(); - Map aCompressorRecipeList = GT_ModHandler.getCompressorRecipeList(); - Map aExtractorRecipeList = GT_ModHandler.getExtractorRecipeList(); - Map aOreWashingRecipeList = GT_ModHandler.getOreWashingRecipeList(); - Map aThermalCentrifugeRecipeList = GT_ModHandler.getThermalCentrifugeRecipeList(); - - GT_Log.out.println( - "GT_Mod: Activating OreDictionary Handler, this can take some time, as it scans the whole OreDictionary"); - GT_FML_LOGGER.info( - "If your Log stops here, you were too impatient. Wait a bit more next time, before killing Minecraft with the Task Manager."); - - GT_PostLoad.activateOreDictHandler(); - GT_PostLoad.replaceVanillaMaterials(); - GT_PostLoad.removeIc2Recipes( - aMaceratorRecipeList, - aCompressorRecipeList, - aExtractorRecipeList, - aOreWashingRecipeList, - aThermalCentrifugeRecipeList); - - if (GT_Values.D1) { - GT_ModHandler.sSingleNonBlockDamagableRecipeList.forEach( - iRecipe -> GT_Log.out.println( - "=> " + iRecipe.getRecipeOutput() - .getDisplayName())); - } - new GT_CraftingRecipeLoader().run(); - GT_ModHandler.removeRecipeByOutput(ItemList.IC2_ForgeHammer.getWildcard(1L)); - GT_ModHandler.removeRecipeByOutput(GT_ModHandler.getIC2Item("machine", 1L)); - GT_ModHandler.addCraftingRecipe( - GT_ModHandler.getIC2Item("machine", 1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "RRR", "RwR", "RRR", 'R', OrePrefixes.plate.get(Materials.Iron) }); - - GT_PostLoad.registerFluidCannerRecipes(); - - if (Forestry.isModLoaded()) { - GT_Forestry_Compat.transferCentrifugeRecipes(); - GT_Forestry_Compat.transferSqueezerRecipes(); - } - GT_MetaTileEntity_DigitalChestBase.registerAEIntegration(); - ItemStack facade = AEApi.instance() - .definitions() - .items() - .facade() - .maybeItem() - .transform(i -> new ItemStack(i, 1, GT_Values.W)) - .orNull(); - if (facade != null) { - GregTech_API.registerCover(facade, null, new GT_Cover_FacadeAE()); - } - - Arrays - .stream( - new String[] { "blastfurnace", "blockcutter", "inductionFurnace", "generator", "windMill", "waterMill", - "solarPanel", "centrifuge", "electrolyzer", "compressor", "electroFurnace", "extractor", - "macerator", "recycler", "metalformer", "orewashingplant", "massFabricator", "replicator", }) - .map(tName -> GT_ModHandler.getIC2Item(tName, 1L)) - .forEach(GT_ModHandler::removeRecipeByOutputDelayed); - - GT_PostLoad.nerfVanillaTools(); - - // Register postea transformers - new PosteaTransformers().run(); - - /* - * Until this point most crafting recipe additions, and removals, have been buffered. Go through, execute the - * removals in bulk, and then any deferred additions. The bulk removals in particular significantly speed up the - * recipe list modifications. - */ - - @SuppressWarnings("UnstableApiUsage") // Stable enough for this project - Stopwatch stopwatch = Stopwatch.createStarted(); - GT_Log.out.println("GT_Mod: Adding buffered Recipes."); - GT_ModHandler.stopBufferingCraftingRecipes(); - // noinspection UnstableApiUsage// Stable enough for this project - GT_FML_LOGGER.info("Executed delayed Crafting Recipes (" + stopwatch.stop() + "). Have a Cake."); - - GT_Log.out.println("GT_Mod: Saving Lang File."); - new GT_MachineTooltipsLoader().run(); - GT_LanguageManager.sEnglishFile.save(); - GregTech_API.sPostloadFinished = true; - GT_Log.out.println("GT_Mod: PostLoad-Phase finished!"); - GT_Log.ore.println("GT_Mod: PostLoad-Phase finished!"); - for (Runnable tRunnable : GregTech_API.sAfterGTPostload) { - try { - tRunnable.run(); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - GT_PostLoad.addFakeRecipes(); - - if (GregTech_API.mOutputRF || GregTech_API.mInputRF) { - GT_Utility.checkAvailabilities(); - if (!GT_Utility.RF_CHECK) { - GregTech_API.mOutputRF = false; - GregTech_API.mInputRF = false; - } - } - - GT_PostLoad.addSolidFakeLargeBoilerFuels(); - GT_PostLoad.identifyAnySteam(); - - achievements = new GT_Achievements(); - - GT_Recipe.GTppRecipeHelper = true; - GT_Log.out.println("GT_Mod: Loading finished, de-allocating temporary Init Variables."); - GregTech_API.sBeforeGTPreload = null; - GregTech_API.sAfterGTPreload = null; - GregTech_API.sBeforeGTLoad = null; - GregTech_API.sAfterGTLoad = null; - GregTech_API.sBeforeGTPostload = null; - GregTech_API.sAfterGTPostload = null; - - GT_PostLoad.createGTtoolsCreativeTab(); - } - - @Mod.EventHandler - public void onLoadComplete(FMLLoadCompleteEvent aEvent) { - gregtechproxy.onLoadComplete(); - for (Runnable tRunnable : GregTech_API.sGTCompleteLoad) { - try { - tRunnable.run(); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - GregTech_API.sGTCompleteLoad = null; - GregTech_API.sFullLoadFinished = true; - } - - @Mod.EventHandler - public void onServerStarted(FMLServerStartedEvent aEvent) { - gregtechproxy.onServerStarted(); - } - - @Mod.EventHandler - public void onServerAboutToStart(FMLServerAboutToStartEvent aEvent) { - gregtechproxy.onServerAboutToStart(); - } - - @Mod.EventHandler - public void onServerStarting(FMLServerStartingEvent aEvent) { - - for (Runnable tRunnable : GregTech_API.sBeforeGTServerstart) { - try { - tRunnable.run(); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - gregtechproxy.onServerStarting(); - GT_ModHandler.removeAllIC2Recipes(); - GT_Log.out.println("GT_Mod: Unificating outputs of all known Recipe Types."); - ArrayList tStacks = new ArrayList<>(10000); - GT_Log.out.println("GT_Mod: IC2 Machines"); - - ic2.api.recipe.Recipes.cannerBottle.getRecipes() - .values() - .stream() - .map(t -> t.items) - .forEach(tStacks::addAll); - ic2.api.recipe.Recipes.centrifuge.getRecipes() - .values() - .stream() - .map(t -> t.items) - .forEach(tStacks::addAll); - ic2.api.recipe.Recipes.compressor.getRecipes() - .values() - .stream() - .map(t -> t.items) - .forEach(tStacks::addAll); - ic2.api.recipe.Recipes.extractor.getRecipes() - .values() - .stream() - .map(t -> t.items) - .forEach(tStacks::addAll); - ic2.api.recipe.Recipes.macerator.getRecipes() - .values() - .stream() - .map(t -> t.items) - .forEach(tStacks::addAll); - ic2.api.recipe.Recipes.metalformerCutting.getRecipes() - .values() - .stream() - .map(t -> t.items) - .forEach(tStacks::addAll); - ic2.api.recipe.Recipes.metalformerExtruding.getRecipes() - .values() - .stream() - .map(t -> t.items) - .forEach(tStacks::addAll); - ic2.api.recipe.Recipes.metalformerRolling.getRecipes() - .values() - .stream() - .map(t -> t.items) - .forEach(tStacks::addAll); - ic2.api.recipe.Recipes.matterAmplifier.getRecipes() - .values() - .stream() - .map(t -> t.items) - .forEach(tStacks::addAll); - ic2.api.recipe.Recipes.oreWashing.getRecipes() - .values() - .stream() - .map(t -> t.items) - .forEach(tStacks::addAll); - - GT_Log.out.println("GT_Mod: Dungeon Loot"); - for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("dungeonChest") - .getItems(new XSTR())) { - tStacks.add(tContent.theItemId); - } - for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("bonusChest") - .getItems(new XSTR())) { - tStacks.add(tContent.theItemId); - } - for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("villageBlacksmith") - .getItems(new XSTR())) { - tStacks.add(tContent.theItemId); - } - for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("strongholdCrossing") - .getItems(new XSTR())) { - tStacks.add(tContent.theItemId); - } - for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("strongholdLibrary") - .getItems(new XSTR())) { - tStacks.add(tContent.theItemId); - } - for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("strongholdCorridor") - .getItems(new XSTR())) { - tStacks.add(tContent.theItemId); - } - for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("pyramidJungleDispenser") - .getItems(new XSTR())) { - tStacks.add(tContent.theItemId); - } - for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("pyramidJungleChest") - .getItems(new XSTR())) { - tStacks.add(tContent.theItemId); - } - for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("pyramidDesertyChest") - .getItems(new XSTR())) { - tStacks.add(tContent.theItemId); - } - for (WeightedRandomChestContent tContent : ChestGenHooks.getInfo("mineshaftCorridor") - .getItems(new XSTR())) { - tStacks.add(tContent.theItemId); - } - GT_Log.out.println("GT_Mod: Smelting"); - - // Deal with legacy Minecraft raw types - tStacks.addAll( - FurnaceRecipes.smelting() - .getSmeltingList() - .values()); - - if (gregtechproxy.mCraftingUnification) { - GT_Log.out.println("GT_Mod: Crafting Recipes"); - for (IRecipe tRecipe : CraftingManager.getInstance() - .getRecipeList()) { - if ((tRecipe instanceof IRecipe)) { - tStacks.add(tRecipe.getRecipeOutput()); - } - } - } - for (ItemStack tOutput : tStacks) { - if (!gregtechproxy.mRegisteredOres.contains(tOutput)) { - GT_OreDictUnificator.setStack(tOutput); - } else { - logMultilineError(GT_FML_LOGGER, generateGTErr01Message(tOutput)); - tOutput.setStackDisplayName("ERROR! PLEASE CHECK YOUR LOG FOR 'GT-ERR-01'!"); - } - } - GregTech_API.mServerStarted = true; - GT_Log.out.println("GT_Mod: ServerStarting-Phase finished!"); - GT_Log.ore.println("GT_Mod: ServerStarting-Phase finished!"); - - for (Runnable tRunnable : GregTech_API.sAfterGTServerstart) { - try { - tRunnable.run(); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - aEvent.registerServerCommand(new GT_Command()); - aEvent.registerServerCommand(new SP_Command()); - aEvent.registerServerCommand(new SPM_Command()); - aEvent.registerServerCommand(new SpaceProject_Command()); - // Sets a new Machine Block Update Thread everytime a world is loaded - GT_Runnable_MachineBlockUpdate.initExecutorService(); - } - - public boolean isServerSide() { - return gregtechproxy.isServerSide(); - } - - public boolean isClientSide() { - return gregtechproxy.isClientSide(); - } - - public boolean isBukkitSide() { - return gregtechproxy.isBukkitSide(); - } - - public EntityPlayer getThePlayer() { - return gregtechproxy.getThePlayer(); - } - - public int addArmor(String aArmorPrefix) { - return gregtechproxy.addArmor(aArmorPrefix); - } - - public void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ) { - gregtechproxy.doSonictronSound(aStack, aWorld, aX, aY, aZ); - } - - @Mod.EventHandler - public void onIDChangingEvent(FMLModIdMappingEvent aEvent) { - GT_Utility.reInit(); - GT_Recipe.reInit(); - try { - for (Map gt_itemStackMap : GregTech_API.sItemStackMappings) { - GT_Utility.reMap(gt_itemStackMap); - } - for (SetMultimap gt_itemStackMap : GregTech_API.itemStackMultiMaps) { - GT_Utility.reMap(gt_itemStackMap); - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - @Mod.EventHandler - public void onServerStopping(FMLServerStoppingEvent aEvent) { - for (Runnable tRunnable : GregTech_API.sBeforeGTServerstop) { - try { - tRunnable.run(); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - gregtechproxy.onServerStopping(); - - for (Runnable tRunnable : GregTech_API.sAfterGTServerstop) { - try { - tRunnable.run(); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - // Interrupt IDLE Threads to close down cleanly - GT_Runnable_MachineBlockUpdate.shutdownExecutorService(); - } - - public static void logStackTrace(Throwable t) { - final StringWriter sw = new StringWriter(); - t.printStackTrace(new PrintWriter(sw)); - GT_FML_LOGGER.error(sw); - } - - private static String[] generateGTErr01Message(ItemStack stack) { - // The message is presented on a per-line basis to make possible formatting in the future easier. - return new String[] { "GT-ERR-01 at " + stack.getUnlocalizedName() + " " + stack.getDisplayName(), - "A recipe used an OreDict item as output directly, without copying the item before that. This is a typical CallByReference/CallByValue error.", - "The said item will be renamed to make the invalid recipe visible.", - "Please check all recipes that output this item, and report them to the mod that introduced the recipes.", }; - } - - @SuppressWarnings("SameParameterValue") // The method is used with one logger, but that might change in the future. - private static void logMultilineError(Logger logger, String[] errorMessageLines) { - for (String errorMessage : errorMessageLines) { - logger.error(errorMessage); - } - } -} diff --git a/src/main/java/gregtech/api/GregTechAPI.java b/src/main/java/gregtech/api/GregTechAPI.java new file mode 100644 index 0000000000..6cabb8e04c --- /dev/null +++ b/src/main/java/gregtech/api/GregTechAPI.java @@ -0,0 +1,982 @@ +package gregtech.api; + +import static gregtech.api.enums.GTValues.B; +import static gregtech.api.enums.Mods.IndustrialCraft2; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.BiFunction; +import java.util.function.IntFunction; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import com.google.common.collect.Multimap; +import com.google.common.collect.Multimaps; +import com.google.common.collect.SetMultimap; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IDamagableItem; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.internal.IGTRecipeAdder; +import gregtech.api.interfaces.internal.IThaumcraftCompat; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; +import gregtech.api.items.GTGenericItem; +import gregtech.api.items.ItemCoolantCell; +import gregtech.api.items.ItemCoolantCellIC; +import gregtech.api.items.ItemTool; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.objects.GTCoverDefault; +import gregtech.api.objects.GTCoverNone; +import gregtech.api.objects.GTHashSet; +import gregtech.api.objects.GTItemStack; +import gregtech.api.threads.RunnableCableUpdate; +import gregtech.api.threads.RunnableMachineUpdate; +import gregtech.api.util.CircuitryBehavior; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTConfig; +import gregtech.api.util.GTCreativeTab; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.api.util.item.ItemHolder; +import gregtech.api.world.GTWorldgen; +import gregtech.common.GTDummyWorld; +import gregtech.common.items.ItemIntegratedCircuit; + +/** + * Please do not include this File in your Mod-download as it ruins compatibility, like with the IC2-API You may just + * copy those Functions into your Code, or better call them via reflection. + *

+ * The whole API is the basic construct of my Mod. Everything is dependent on it. I change things quite often so please + * don't include any File inside your Mod, even if it is an Interface. Since some Authors were stupid enough to break + * this simple Rule, I added Version checks to enforce it. + *

+ * In these Folders are many useful Functions. You can use them via reflection if you want. I know not everything is + * compilable due to APIs of other Mods, but these are easy to fix in your Setup. + *

+ * You can use this to learn about Modding, but I would recommend simpler Mods. You may even copy-paste Code from these + * API-Files into your Mod, as I have nothing against that, but you should look exactly at what you are copying. + * + * @author Gregorius Techneticies + */ +@SuppressWarnings("unused") // API class has legitimately unused methods and members +public class GregTechAPI { + + /** + * Fixes the HashMap Mappings for ItemStacks once the Server started + *
+ *
+ * NOTE: We use wildcards generics for the key because it could be for example {@link ItemStack} or + * {@link GTItemStack} + */ + public static final Collection> sItemStackMappings = new ArrayList<>(); + public static final Collection> itemStackMultiMaps = new ArrayList<>(); + + /** + * The MetaTileEntity-ID-List-Length + */ + public static final short MAXIMUM_METATILE_IDS = Short.MAX_VALUE - 1; + /** + * My Creative Tab + */ + public static final CreativeTabs TAB_GREGTECH = new GTCreativeTab("Main", "Main"), + TAB_GREGTECH_MATERIALS = new GTCreativeTab("Materials", "Materials"), + TAB_GREGTECH_ORES = new GTCreativeTab("Ores", "Ores"); + + public static final IMetaTileEntity[] METATILEENTITIES = new IMetaTileEntity[MAXIMUM_METATILE_IDS]; + /** + * The Icon List for Covers + */ + public static final Map sCovers = new ConcurrentHashMap<>(); + /** + * The List of Cover Behaviors for the Covers + */ + public static final Map> sCoverBehaviors = new ConcurrentHashMap<>(); + /** + * The List of Circuit Behaviors for the Redstone Circuit Block + */ + public static final Map sCircuitryBehaviors = new ConcurrentHashMap<>(); + /** + * The List of Blocks, which can conduct Machine Block Updates + */ + public static final Map sMachineIDs = new ConcurrentHashMap<>(); + /** + * The Redstone Frequencies + */ + public static final Map sWirelessRedstone = new ConcurrentHashMap<>(); + /** + * The Advanced Redstone Frequencies + */ + public static final Map>> sAdvancedWirelessRedstone = new ConcurrentHashMap<>(); + + /** + * The IDSU Frequencies + */ + public static final Map sIDSUList = new ConcurrentHashMap<>(); + /** + * A List of all Books, which were created using @GT_Utility.getWrittenBook the original Title is the Key Value + */ + public static final Map sBookList = new ConcurrentHashMap<>(); + /** + * The List of all Sounds used in GT, indices are in the static Block at the bottom + * + * @deprecated Use {@link SoundResource} + */ + @Deprecated + public static final Map sSoundList = SoundResource.asSoundList(); + /** + * The List of Tools, which can be used. Accepts regular damageable Items and Electric Items + */ + public static final GTHashSet sToolList = new GTHashSet<>(), sCrowbarList = new GTHashSet<>(), + sScrewdriverList = new GTHashSet<>(), sWrenchList = new GTHashSet<>(), sSoftHammerList = new GTHashSet<>(), + sHardHammerList = new GTHashSet<>(), sWireCutterList = new GTHashSet<>(), + sSolderingToolList = new GTHashSet<>(), sSolderingMetalList = new GTHashSet<>(), + sJackhammerList = new GTHashSet<>(); + /** + * The List of Hazmat Armors + */ + public static final GTHashSet sGasHazmatList = new GTHashSet<>(), sBioHazmatList = new GTHashSet<>(), + sFrostHazmatList = new GTHashSet<>(), sHeatHazmatList = new GTHashSet<>(), sRadioHazmatList = new GTHashSet<>(), + sElectroHazmatList = new GTHashSet<>(); + + private static final Multimap sRealConfigurationList = Multimaps + .newListMultimap(new TreeMap<>(), ArrayList::new); + private static final Map> sConfigurationLists = new ConcurrentHashMap<>(); + private static final Map, BiFunction> sRealCircuitProgrammerList = new LinkedHashMap<>(); + public static final Map, BiFunction> sCircuitProgrammerList = Collections + .unmodifiableMap(sRealCircuitProgrammerList); + + /** + * The List of Dimensions, which are Whitelisted for the Teleporter. This list should not contain other Planets. + * Mystcraft Dimensions and other Dimensional Things should be allowed. Mystcraft and Twilight Forest are + * automatically considered a Dimension, without being in this List. + */ + public static final Collection sDimensionalList = new HashSet<>(); + /** + * Lists of all the active World generation Features, these are getting Initialized in Postload! + */ + public static final List sWorldgenList = new ArrayList<>(); + /** + * A List containing all the Materials, which are somehow in use by GT and therefor receive a specific Set of Items. + */ + public static final Materials[] sGeneratedMaterials = new Materials[1000]; + /** + * This is the generic Cover behavior. Used for the default Covers, which have no Behavior. + */ + public static final CoverBehavior sDefaultBehavior = new GTCoverDefault(), sNoBehavior = new GTCoverNone(); + /** + * For the API Version check + */ + public static volatile int VERSION = 509; + + /** + * @deprecated Use {@link GTValues#RA} + */ + @SuppressWarnings("DeprecatedIsStillUsed") // Still need be initialized for backward compat + @Deprecated + public static IGTRecipeAdder sRecipeAdder; + /** + * Registers Aspects to Thaumcraft. This Object might be {@code null} if Thaumcraft isn't installed. + */ + public static IThaumcraftCompat sThaumcraftCompat; + /** + * The Lists below are executed at their respective timings. Useful to do things at a particular moment in time. + * The Lists are not Threaded - a native Java interface is used for their execution. + * Add your "commands" in the constructor or in the static-code-block of your mod's Main class. + * Implement the method {@code run()}, and everything should work. + */ + public static List sBeforeGTPreload = new ArrayList<>(), sAfterGTPreload = new ArrayList<>(), + sBeforeGTLoad = new ArrayList<>(), sAfterGTLoad = new ArrayList<>(), sBeforeGTPostload = new ArrayList<>(), + sAfterGTPostload = new ArrayList<>(), sFirstWorldTick = new ArrayList<>(), + sBeforeGTServerstart = new ArrayList<>(), sAfterGTServerstart = new ArrayList<>(), + sBeforeGTServerstop = new ArrayList<>(), sAfterGTServerstop = new ArrayList<>(), + sGTBlockIconload = new ArrayList<>(), sGTItemIconload = new ArrayList<>(), sGTCompleteLoad = new ArrayList<>(); + /** + * The Icon Registers from Blocks and Items. They will get set right before the corresponding Icon Load Phase as + * executed in the Runnable List above. + */ + @SideOnly(Side.CLIENT) + public static IIconRegister sBlockIcons, sItemIcons; + /** + * The Configuration Objects + */ + public static GTConfig NEIClientFIle; + + public static int TICKS_FOR_LAG_AVERAGING = 25, MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING = 100; + /** + * Initialized by the Block creation. + */ + public static Block sBlockMachines; + + public static Block sBlockOres1, sBlockOresUb1, sBlockOresUb2, sBlockOresUb3, + /* sBlockGem, */ + sBlockMetal1, sBlockMetal2, sBlockMetal3, sBlockMetal4, sBlockMetal5, sBlockMetal6, sBlockMetal7, sBlockMetal8, + sBlockMetal9, sBlockGem1, sBlockGem2, sBlockGem3, sBlockReinforced; + public static Block sBlockGranites, sBlockConcretes, sBlockStones; + public static Block sBlockCasings1, sBlockCasings2, sBlockCasings3, sBlockCasings4, sBlockCasings5, sBlockCasings6, + sBlockCasings8, sBlockCasings9, sBlockCasings10, sBlockCasings11, sSolenoidCoilCasings; + public static Block sBlockLongDistancePipes; + public static Block sDroneRender; + public static Block sBlockFrames; + public static Block sBlockGlass1; + public static Block sBlockTintedGlass; + public static Block sLaserRender; + public static Block sWormholeRender; + /** + * Getting assigned by the Config + */ + public static boolean sTimber = true, sDrinksAlwaysDrinkable = false, sMultiThreadedSounds = false, + sDoShowAllItemsInCreative = false, sColoredGUI = true, sMachineMetalGUI = false, sMachineExplosions = true, + sMachineFlammable = true, sMachineNonWrenchExplosions = true, sMachineRainExplosions = true, + sMachineThunderExplosions = true, sMachineFireExplosions = true, sMachineWireFire = true, mOutputRF = false, + mInputRF = false, mRFExplosions = false, mServerStarted = false; + + public static int mEUtoRF = 360, mRFtoEU = 20; + + /** + * Option to not use MACHINE_METAL mixing into colors + */ + public static boolean sUseMachineMetal = false; + + public static boolean mUseOnlyGoodSolderingMaterials = false; + + private static final String aTextIC2Lower = IndustrialCraft2.ID.toLowerCase(Locale.ENGLISH); + /** + * Getting assigned by the Mod loading + */ + public static boolean sUnificationEntriesRegistered = false, sPreloadStarted = false, sPreloadFinished = false, + sLoadStarted = false, sLoadFinished = false, sPostloadStarted = false, sPostloadFinished = false, + sFullLoadFinished = false; + + private static Class sBaseMetaTileEntityClass = null; + + @SuppressWarnings("unchecked") + private static final IntFunction[] teCreators = new IntFunction[16]; + + private static final Set> dummyWorlds = new HashSet<>(); + + static { + sItemStackMappings.add(sCovers); + sItemStackMappings.add(sCoverBehaviors); + + dummyWorlds.add(GTDummyWorld.class); + tryAddDummyWorld("blockrenderer6343.client.world.DummyWorld"); + } + + private static void tryAddDummyWorld(String className) { + ClassLoader cl = GregTechAPI.class.getClassLoader(); + Class clazz; + try { + clazz = Class.forName(className, false, cl); + } catch (ReflectiveOperationException ex) { + return; + } + dummyWorlds.add(clazz); + } + + public static void addDummyWorld(Class clazz) { + dummyWorlds.add(clazz); + } + + public static boolean isDummyWorld(@Nonnull World w) { + return dummyWorlds.contains(w.getClass()); + } + + /** + * You want OreDict-Unification for YOUR Mod/Addon, when GregTech is installed? This Function is especially for YOU. + * Call this Function after the load-Phase, as I register the most of the Unification at that Phase (Redpowers + * Storageblocks are registered at postload). A recommended use of this Function is inside your Recipe-System itself + * (if you have one), as the unification then makes 100% sure, that every added non-unificated Output gets + * automatically unificated. + *

+ * I will personally make sure, that only common prefixes of Ores get registered at the Unificator, as of now there + * are: pulp, dust, dustSmall, ingot, nugget, gem, ore and block If another Mod-Author messes these up, then it's + * not my fault, and it's especially not your fault. As these are commonly used prefixes. + *

+ * This Unificator-API-Function uses the same Functions I use, for unificating Items. So if there is something + * messed up (very unlikely), then everything is messed up. + *

+ * You shouldn't use this to unificate the Inputs of your Recipes, this is only meant for the Outputs. + * + * @param aOreStack the Stack you want to get unificated. It is stackSize Sensitive. + * @return Either an unificated Stack or the stack you toss in, but it should never be null, unless you throw a + * Null-Pointer into it. + */ + public static ItemStack getUnificatedOreDictStack(ItemStack aOreStack) { + if (!GregTechAPI.sPreloadFinished) GTLog.err.println( + "GregTechAPI ERROR: " + aOreStack.getItem() + + "." + + aOreStack.getItemDamage() + + " - OreDict Unification Entries are not registered now, please call it in the postload phase."); + return GTOreDictUnificator.get(true, aOreStack); + } + + /** + * Causes a Machineblock Update This update will cause surrounding MultiBlock Machines to update their + * Configuration. You should call this Function in @Block.breakBlock and in @Block.onBlockAdded of your Machine. + * + * @param aWorld is being the World + * @param aX is the X-Coord of the update causing Block + * @param aY is the Y-Coord of the update causing Block + * @param aZ is the Z-Coord of the update causing Block + */ + public static boolean causeMachineUpdate(World aWorld, int aX, int aY, int aZ) { + if (aWorld != null && !aWorld.isRemote && !isDummyWorld(aWorld)) { // World might be null during World-gen + RunnableMachineUpdate.setMachineUpdateValues(aWorld, aX, aY, aZ); + return true; + } + return false; + } + + @SuppressWarnings("UnusedReturnValue") // Retains API method signature + public static boolean causeCableUpdate(World aWorld, int aX, int aY, int aZ) { + if (aWorld == null || aWorld.isRemote || isDummyWorld(aWorld)) { + return false; + } // World might be null during World-gen + RunnableCableUpdate.setCableUpdateValues(aWorld, aX, aY, aZ); + return true; + } + + /** + * Adds a Multi-Machine Block, like my Machine Casings for example. You should call @causeMachineUpdate + * in @Block.breakBlock and in {@link Block#onBlockAdded} of your registered Block. You don't need to register + * TileEntities which implement {@link IMachineBlockUpdateable} + * + * @param aBlock the Block + * @param aMeta the Metadata of the Blocks as Bitmask! -1 or ~0 for all Meta-values + */ + @SuppressWarnings("UnusedReturnValue") // Retains API method signature + public static boolean registerMachineBlock(Block aBlock, int aMeta) { + if (aBlock == null) return false; + if (GregTechAPI.sThaumcraftCompat != null) + GregTechAPI.sThaumcraftCompat.registerPortholeBlacklistedBlock(aBlock); + sMachineIDs.put(aBlock, aMeta); + return true; + } + + /** + * Like above but with boolean Parameters instead of a BitMask + */ + public static boolean registerMachineBlock(Block aBlock, boolean... aMeta) { + if (aBlock == null || aMeta == null || aMeta.length == 0) return false; + if (GregTechAPI.sThaumcraftCompat != null) + GregTechAPI.sThaumcraftCompat.registerPortholeBlacklistedBlock(aBlock); + int rMeta = 0; + for (byte i = 0; i < aMeta.length && i < 16; i++) if (aMeta[i]) rMeta |= B[i]; + sMachineIDs.put(aBlock, rMeta); + return true; + } + + /** + * if this Block is a Machine Update Conducting Block + */ + public static boolean isMachineBlock(Block aBlock, int aMeta) { + if (aBlock != null) { + Integer id = sMachineIDs.get(aBlock); + return id != null && (id & B[aMeta]) != 0; + } + return false; + } + + /** + * Creates a new Coolant Cell Item for your Nuclear Reactor + */ + public static Item constructCoolantCellItem(String aUnlocalized, String aEnglish, int aMaxStore) { + try { + return new ItemCoolantCellIC(aUnlocalized, aEnglish, aMaxStore); + } catch (Throwable e) { + /* Do nothing */ + } + try { + return new ItemCoolantCell(aUnlocalized, aEnglish, aMaxStore); + } catch (Throwable e) { + /* Do nothing */ + } + return new GTGenericItem(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug"); + } + + /** + * Creates a new Energy Armor Item + */ + public static Item constructElectricArmorItem(String aUnlocalized, String aEnglish, int aCharge, int aTransfer, + int aTier, int aDamageEnergyCost, int aSpecials, double aArmorAbsorbtionPercentage, boolean aChargeProvider, + int aType, int aArmorIndex) { + try { + return (Item) Class.forName("gregtechmod.api.items.GT_EnergyArmorIC_Item") + .getConstructors()[0].newInstance( + aUnlocalized, + aEnglish, + aCharge, + aTransfer, + aTier, + aDamageEnergyCost, + aSpecials, + aArmorAbsorbtionPercentage, + aChargeProvider, + aType, + aArmorIndex); + } catch (Throwable e) { + /* Do nothing */ + } + try { + return (Item) Class.forName("gregtechmod.api.items.GT_EnergyArmor_Item") + .getConstructors()[0].newInstance( + aUnlocalized, + aEnglish, + aCharge, + aTransfer, + aTier, + aDamageEnergyCost, + aSpecials, + aArmorAbsorbtionPercentage, + aChargeProvider, + aType, + aArmorIndex); + } catch (Throwable e) { + /* Do nothing */ + } + return new GTGenericItem(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug"); + } + + /** + * Creates a new Energy Battery Item + */ + public static Item constructElectricEnergyStorageItem(String aUnlocalized, String aEnglish, int aCharge, + int aTransfer, int aTier, int aEmptyID, int aFullID) { + try { + return (Item) Class.forName("gregtechmod.api.items.GT_EnergyStoreIC_Item") + .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aCharge, aTransfer, aTier, aEmptyID, aFullID); + } catch (Throwable e) { + /* Do nothing */ + } + try { + return (Item) Class.forName("gregtechmod.api.items.GT_EnergyStore_Item") + .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aCharge, aTransfer, aTier, aEmptyID, aFullID); + } catch (Throwable e) { + /* Do nothing */ + } + return new GTGenericItem(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug"); + } + + /** + * Creates a new Hard Hammer Item + */ + public static ItemTool constructHardHammerItem(String aUnlocalized, String aEnglish, int aMaxDamage, + int aEntityDamage) { + try { + return (ItemTool) Class.forName("gregtechmod.api.items.GT_HardHammer_Item") + .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage); + } catch (Throwable e) { + /* Do nothing */ + } + return new ItemTool( + aUnlocalized, + aEnglish, + "Doesn't work as intended, this is a Bug", + aMaxDamage, + aEntityDamage, + false); + } + + /** + * Creates a new Crowbar Item + */ + public static ItemTool constructCrowbarItem(String aUnlocalized, String aEnglish, int aMaxDamage, + int aEntityDamage) { + try { + return (ItemTool) Class.forName("gregtechmod.api.items.GT_CrowbarRC_Item") + .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage); + } catch (Throwable e) { + /* Do nothing */ + } + try { + return (ItemTool) Class.forName("gregtechmod.api.items.GT_Crowbar_Item") + .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage); + } catch (Throwable e) { + /* Do nothing */ + } + return new ItemTool( + aUnlocalized, + aEnglish, + "Doesn't work as intended, this is a Bug", + aMaxDamage, + aEntityDamage, + false); + } + + /** + * Creates a new Wrench Item + */ + public static ItemTool constructWrenchItem(String aUnlocalized, String aEnglish, int aMaxDamage, int aEntityDamage, + int aDisChargedGTID) { + try { + return (ItemTool) Class.forName("gregtechmod.api.items.GT_Wrench_Item") + .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID); + } catch (Throwable e) { + /* Do nothing */ + } + return new ItemTool( + aUnlocalized, + aEnglish, + "Doesn't work as intended, this is a Bug", + aMaxDamage, + aEntityDamage, + false); + } + + /** + * Creates a new electric Screwdriver Item + */ + public static ItemTool constructElectricScrewdriverItem(String aUnlocalized, String aEnglish, int aMaxDamage, + int aEntityDamage, int aDisChargedGTID) { + try { + return (ItemTool) Class.forName("gregtechmod.api.items.GT_ScrewdriverIC_Item") + .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID); + } catch (Throwable e) { + /* Do nothing */ + } + return new ItemTool( + aUnlocalized, + aEnglish, + "Doesn't work as intended, this is a Bug", + aMaxDamage, + aEntityDamage, + false); + } + + /** + * Creates a new electric Wrench Item + */ + public static ItemTool constructElectricWrenchItem(String aUnlocalized, String aEnglish, int aMaxDamage, + int aEntityDamage, int aDisChargedGTID) { + try { + return (ItemTool) Class.forName("gregtechmod.api.items.GT_WrenchIC_Item") + .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID); + } catch (Throwable e) { + /* Do nothing */ + } + return new ItemTool( + aUnlocalized, + aEnglish, + "Doesn't work as intended, this is a Bug", + aMaxDamage, + aEntityDamage, + false); + } + + /** + * Creates a new electric Saw Item + */ + public static ItemTool constructElectricSawItem(String aUnlocalized, String aEnglish, int aMaxDamage, + int aEntityDamage, int aToolQuality, float aToolStrength, int aEnergyConsumptionPerBlockBreak, + int aDisChargedGTID) { + try { + return (ItemTool) Class.forName("gregtechmod.api.items.GT_SawIC_Item") + .getConstructors()[0].newInstance( + aUnlocalized, + aEnglish, + aMaxDamage, + aEntityDamage, + aToolQuality, + aToolStrength, + aEnergyConsumptionPerBlockBreak, + aDisChargedGTID); + } catch (Throwable e) { + /* Do nothing */ + } + return new ItemTool( + aUnlocalized, + aEnglish, + "Doesn't work as intended, this is a Bug", + aMaxDamage, + aEntityDamage, + false); + } + + /** + * Creates a new electric Drill Item + */ + public static ItemTool constructElectricDrillItem(String aUnlocalized, String aEnglish, int aMaxDamage, + int aEntityDamage, int aToolQuality, float aToolStrength, int aEnergyConsumptionPerBlockBreak, + int aDisChargedGTID) { + try { + return (ItemTool) Class.forName("gregtechmod.api.items.GT_DrillIC_Item") + .getConstructors()[0].newInstance( + aUnlocalized, + aEnglish, + aMaxDamage, + aEntityDamage, + aToolQuality, + aToolStrength, + aEnergyConsumptionPerBlockBreak, + aDisChargedGTID); + } catch (Throwable e) { + /* Do nothing */ + } + return new ItemTool( + aUnlocalized, + aEnglish, + "Doesn't work as intended, this is a Bug", + aMaxDamage, + aEntityDamage, + false); + } + + /** + * Creates a new electric Soldering Tool + */ + public static ItemTool constructElectricSolderingToolItem(String aUnlocalized, String aEnglish, int aMaxDamage, + int aEntityDamage, int aDisChargedGTID) { + try { + return (ItemTool) Class.forName("gregtechmod.api.items.GT_SolderingToolIC_Item") + .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID); + } catch (Throwable e) { + /* Do nothing */ + } + return new ItemTool( + aUnlocalized, + aEnglish, + "Doesn't work as intended, this is a Bug", + aMaxDamage, + aEntityDamage, + false); + } + + /** + * Creates a new empty electric Tool + */ + public static ItemTool constructEmptyElectricToolItem(String aUnlocalized, String aEnglish, int aMaxDamage, + int aChargedGTID) { + try { + return (ItemTool) Class.forName("gregtechmod.api.items.GT_EmptyToolIC_Item") + .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aChargedGTID); + } catch (Throwable e) { + /* Do nothing */ + } + return new ItemTool(aUnlocalized, aEnglish, "Doesn't work as intended, this is a Bug", aMaxDamage, 0, false); + } + + /** + * Provides a new BaseMetaTileEntity. Because some interfaces are not always loaded (Buildcraft, Universal + * Electricity) we have to use invocation at the constructor of the BaseMetaTileEntity. + */ + public static BaseMetaTileEntity constructBaseMetaTileEntity() { + if (sBaseMetaTileEntityClass == null) { + try { + return (sBaseMetaTileEntityClass = BaseMetaTileEntity.class).getDeclaredConstructor() + .newInstance(); + } catch (Throwable ignored) {} + } + + try { + return sBaseMetaTileEntityClass.getDeclaredConstructor() + .newInstance(); + } catch (Throwable e) { + GTLog.err.println("GTMod: Fatal Error occurred while initializing TileEntities, crashing Minecraft."); + e.printStackTrace(GTLog.err); + throw new RuntimeException(e); + } + } + + /** + * Register a new ItemStack as configuration circuits. Duplicates or invalid stacks will be silently ignored. + */ + public static void registerConfigurationCircuit(ItemStack aStack) { + registerConfigurationCircuit(aStack, 0); + } + + /** + * Register a new ItemStack as configuration circuits. Duplicates or invalid stacks will be silently ignored. + * + * @param minTier the minimal tier this circuit can be offered for free, e.g. normal configuration circuit is + * available in LV+ single blocks, GT++ breakthrough circuit is offered in HV+ single blocks + */ + public static void registerConfigurationCircuit(ItemStack aStack, int minTier) { + if (GTUtility.isStackInvalid(aStack)) return; + for (ItemStack tRegistered : sRealConfigurationList.values()) + if (GTUtility.areStacksEqual(tRegistered, aStack)) return; + ItemStack stack = GTUtility.copyAmount(0, aStack); + sRealConfigurationList.put(minTier, stack); + for (Map.Entry> e : sConfigurationLists.entrySet()) { + if (e.getKey() >= minTier) { + e.getValue() + .add(stack); + e.getValue() + .sort(getConfigurationCircuitsComparator()); + } + } + } + + /** + * Get a list of Configuration circuits. These stacks will have a stack size of 0. Use + * {@link #registerConfigurationCircuit(ItemStack, int)} or its overload to add to this list. + * + * @param machineTier The voltage tier where this list will be used. use Integer.MAX_VALUE to get all circuits + * @return An unmodifiable view of actual list. DO NOT MODIFY THE ItemStacks! + */ + public static List getConfigurationCircuitList(int machineTier) { + return Collections.unmodifiableList( + sConfigurationLists.computeIfAbsent( + machineTier, + (t) -> sRealConfigurationList.entries() + .stream() + .filter(e -> e.getKey() <= machineTier) + .map(Map.Entry::getValue) + .sorted(getConfigurationCircuitsComparator()) + .collect(Collectors.toList()))); + } + + public static Comparator getConfigurationCircuitsComparator() { + return Comparator.comparingInt((ItemStack is) -> is.getItem() instanceof ItemIntegratedCircuit ? 0 : 1) + .thenComparing(ItemStack::getUnlocalizedName) + .thenComparing(ItemStack::getItemDamage); + } + + public static void registerCircuitProgrammer(ItemStack stack, boolean ignoreNBT, boolean useContainer) { + registerCircuitProgrammer(rhs -> GTUtility.areStacksEqual(stack, rhs, ignoreNBT), useContainer); + } + + public static void registerCircuitProgrammer(Predicate predicate, boolean useContainer) { + sRealCircuitProgrammerList.put( + predicate, + useContainer ? (s, p) -> s.getItem() + .getContainerItem(s) : (s, p) -> s); + } + + public static void registerCircuitProgrammer(Predicate predicate, + BiFunction doDamage) { + sRealCircuitProgrammerList.put(predicate, doDamage); + } + + public static void registerCover(ItemStack aStack, ITexture aCover, CoverBehavior aBehavior) { + registerCover(aStack, aCover, (CoverBehaviorBase) aBehavior); + } + + public static void registerCover(ItemStack aStack, ITexture aCover, CoverBehaviorBase aBehavior) { + if (!sCovers.containsKey(new GTItemStack(aStack))) sCovers.put( + new GTItemStack(aStack), + aCover == null || !aCover.isValidTexture() ? Textures.BlockIcons.ERROR_RENDERING[0] : aCover); + if (aBehavior != null) sCoverBehaviors.put(new GTItemStack(aStack), aBehavior); + } + + public static void registerCoverBehavior(ItemStack aStack, CoverBehavior aBehavior) { + registerCoverBehavior(aStack, (CoverBehaviorBase) aBehavior); + } + + public static void registerCoverBehavior(ItemStack aStack, CoverBehaviorBase aBehavior) { + sCoverBehaviors.put(new GTItemStack(aStack), aBehavior == null ? sDefaultBehavior : aBehavior); + } + + /** + * Registers multiple Cover Items. I use that for the OreDict Functionality. + * + * @param aBehavior can be null + */ + public static void registerCover(Collection aStackList, ITexture aCover, CoverBehavior aBehavior) { + registerCover(aStackList, aCover, (CoverBehaviorBase) aBehavior); + } + + /** + * Registers multiple Cover Items. I use that for the OreDict Functionality. + * + * @param aBehavior can be null + */ + public static void registerCover(Collection aStackList, ITexture aCover, + CoverBehaviorBase aBehavior) { + if (aCover.isValidTexture()) aStackList.forEach(tStack -> GregTechAPI.registerCover(tStack, aCover, aBehavior)); + } + + /** + * returns a Cover behavior, guaranteed to not return null after preload + * + * @return The Cover behavior + */ + public static CoverBehaviorBase getCoverBehaviorNew(ItemStack aStack) { + if (aStack == null || aStack.getItem() == null) return sNoBehavior; + CoverBehaviorBase rCover = sCoverBehaviors.get(new GTItemStack(aStack)); + if (rCover != null) return rCover; + rCover = sCoverBehaviors.get(new GTItemStack(aStack, true)); + if (rCover != null) return rCover; + return sDefaultBehavior; + } + + /** + * returns a Cover behavior, guaranteed to not return null + */ + public static CoverBehaviorBase getCoverBehaviorNew(int aStack) { + if (aStack == 0) return sNoBehavior; + return getCoverBehaviorNew(GTUtility.intToStack(aStack)); + } + + /** + * Register a Wrench to be usable on GregTech Machines. The Wrench MUST have some kind of Durability unlike certain + * Buildcraft Wrenches. + *

+ * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in + * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). + *

+ * ----- + *

+ * Returning true at isDamageable was a great Idea, KingLemming. Well played. Since the OmniWrench is just a + * Single-Item-Mod, people can choose if they want your infinite durability or not. So that's not really a Problem. + * I even have a new Config to auto-disable most infinite BC Wrenches (but that one is turned off). + *

+ * One last Bug for you to fix: My Auto-registration detects Railcraft's Crowbars, Buildcraft's Wrenches and alike, + * due to their Interfaces. Guess what now became a Crowbar by accident. Try registering the Wrench at the load + * phase to prevent things like that from happening. Yes, I know that "You need to register Tools in the Load + * Phase"-Part wasn't there before this. Sorry about that. + */ + public static boolean registerWrench(ItemStack aTool) { + return registerTool(aTool, sWrenchList); + } + + /** + * Register a Crowbar to extract Covers from Machines Crowbars are NOT Wrenches btw. + *

+ * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in + * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). + */ + public static boolean registerCrowbar(ItemStack aTool) { + return registerTool(aTool, sCrowbarList); + } + + /** + * Register a Screwdriver to interact directly with Machines and Covers Did I mention, that it is intentionally not + * possible to make a Multi-tool, which doesn't switch ItemID (like a Mode) all the time? + *

+ * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in + * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). + */ + @SuppressWarnings("UnusedReturnValue") // Retains API method signature + public static boolean registerScrewdriver(ItemStack aTool) { + return registerTool(aTool, sScrewdriverList); + } + + /** + * Register a Soft Hammer to interact with Machines + *

+ * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in + * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). + */ + public static boolean registerSoftHammer(ItemStack aTool) { + return registerTool(aTool, sSoftHammerList); + } + + /** + * Register a Hard Hammer to interact with Machines + *

+ * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in + * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). + */ + public static boolean registerHardHammer(ItemStack aTool) { + return registerTool(aTool, sHardHammerList); + } + + /** + * Register a Wire Cutter to interact with Machines + *

+ * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in + * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). + */ + public static boolean registerWireCutter(ItemStack aTool) { + return registerTool(aTool, sWireCutterList); + } + + /** + * Register a Soldering Tool to interact with Machines + *

+ * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in + * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). + */ + @SuppressWarnings("UnusedReturnValue") // Retains API method signature + public static boolean registerSolderingTool(ItemStack aTool) { + return registerTool(aTool, sSolderingToolList); + } + + /** + * Register a Soldering Tin to interact with Soldering Tools + *

+ * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in + * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). + */ + @SuppressWarnings("UnusedReturnValue") // Retains API method signature + public static boolean registerSolderingMetal(ItemStack aTool) { + return registerTool(aTool, sSolderingMetalList); + } + + /** + * Generic Function to add Tools to the Lists. Contains all sanity Checks for Tools, like preventing one Tool from + * being registered for multiple purposes as controls would override each other. + */ + public static boolean registerTool(ItemStack aTool, Collection aToolList) { + if (aTool == null || GTUtility.isStackInList(aTool, sToolList) + || (!aTool.getItem() + .isDamageable() && !GTModHandler.isElectricItem(aTool) && !(aTool.getItem() instanceof IDamagableItem))) + return false; + aToolList.add(new GTItemStack(GTUtility.copyAmount(1, aTool))); + sToolList.add(new GTItemStack(GTUtility.copyAmount(1, aTool))); + return true; + } + + /** + * Sets the {@link IIconRegister} for Block Icons + * + * @param aIconRegister The {@link IIconRegister} Icon Register + */ + @SideOnly(Side.CLIENT) + public static void setBlockIconRegister(IIconRegister aIconRegister) { + sBlockIcons = aIconRegister; + } + + /** + * Sets the {@link IIconRegister} for Items Icons + * + * @param aIconRegister The {@link IIconRegister} Icon Register + */ + @SideOnly(Side.CLIENT) + public static void setItemIconRegister(IIconRegister aIconRegister) { + GregTechAPI.sItemIcons = aIconRegister; + } + + public static void registerTileEntityConstructor(int meta, IntFunction constructor) { + if (meta < 0 || meta > 15 || constructor == null) throw new IllegalArgumentException(); + if (teCreators[meta] != null) throw new IllegalStateException( + "previous constructor: " + teCreators[meta] + " new constructor: " + constructor + " meta:" + meta); + teCreators[meta] = constructor; + } + + public static TileEntity createTileEntity(int meta) { + meta = GTUtility.clamp(meta, 0, 15); + if (teCreators[meta] == null) return null; + return teCreators[meta].apply(meta); + } +} diff --git a/src/main/java/gregtech/api/GregTech_API.java b/src/main/java/gregtech/api/GregTech_API.java deleted file mode 100644 index 51bf250659..0000000000 --- a/src/main/java/gregtech/api/GregTech_API.java +++ /dev/null @@ -1,999 +0,0 @@ -package gregtech.api; - -import static gregtech.api.enums.GT_Values.B; -import static gregtech.api.enums.Mods.IndustrialCraft2; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.TreeMap; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.BiFunction; -import java.util.function.IntFunction; -import java.util.function.Predicate; -import java.util.stream.Collectors; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import com.google.common.collect.Multimap; -import com.google.common.collect.Multimaps; -import com.google.common.collect.SetMultimap; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IDamagableItem; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.internal.IGT_RecipeAdder; -import gregtech.api.interfaces.internal.IThaumcraftCompat; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; -import gregtech.api.items.GT_CoolantCellIC_Item; -import gregtech.api.items.GT_CoolantCell_Item; -import gregtech.api.items.GT_Tool_Item; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.objects.GT_Cover_Default; -import gregtech.api.objects.GT_Cover_None; -import gregtech.api.objects.GT_HashSet; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.threads.GT_Runnable_Cable_Update; -import gregtech.api.threads.GT_Runnable_MachineBlockUpdate; -import gregtech.api.util.GT_CircuitryBehavior; -import gregtech.api.util.GT_Config; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_CreativeTab; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.item.ItemHolder; -import gregtech.api.world.GT_Worldgen; -import gregtech.common.GT_DummyWorld; -import gregtech.common.items.GT_IntegratedCircuit_Item; - -/** - * Please do not include this File in your Mod-download as it ruins compatibility, like with the IC2-API You may just - * copy those Functions into your Code, or better call them via reflection. - *

- * The whole API is the basic construct of my Mod. Everything is dependent on it. I change things quite often so please - * don't include any File inside your Mod, even if it is an Interface. Since some Authors were stupid enough to break - * this simple Rule, I added Version checks to enforce it. - *

- * In these Folders are many useful Functions. You can use them via reflection if you want. I know not everything is - * compilable due to APIs of other Mods, but these are easy to fix in your Setup. - *

- * You can use this to learn about Modding, but I would recommend simpler Mods. You may even copy-paste Code from these - * API-Files into your Mod, as I have nothing against that, but you should look exactly at what you are copying. - * - * @author Gregorius Techneticies - */ -@SuppressWarnings("unused") // API class has legitimately unused methods and members -public class GregTech_API { - - /** - * Fixes the HashMap Mappings for ItemStacks once the Server started - *
- *
- * NOTE: We use wildcards generics for the key because it could be for example {@link ItemStack} or - * {@link GT_ItemStack} - */ - public static final Collection> sItemStackMappings = new ArrayList<>(); - public static final Collection> itemStackMultiMaps = new ArrayList<>(); - - /** - * The MetaTileEntity-ID-List-Length - */ - public static final short MAXIMUM_METATILE_IDS = Short.MAX_VALUE - 1; - /** - * My Creative Tab - */ - public static final CreativeTabs TAB_GREGTECH = new GT_CreativeTab("Main", "Main"), - TAB_GREGTECH_MATERIALS = new GT_CreativeTab("Materials", "Materials"), - TAB_GREGTECH_ORES = new GT_CreativeTab("Ores", "Ores"); - - public static final IMetaTileEntity[] METATILEENTITIES = new IMetaTileEntity[MAXIMUM_METATILE_IDS]; - /** - * The Icon List for Covers - */ - public static final Map sCovers = new ConcurrentHashMap<>(); - /** - * The List of Cover Behaviors for the Covers - */ - public static final Map> sCoverBehaviors = new ConcurrentHashMap<>(); - /** - * The List of Circuit Behaviors for the Redstone Circuit Block - */ - public static final Map sCircuitryBehaviors = new ConcurrentHashMap<>(); - /** - * The List of Blocks, which can conduct Machine Block Updates - */ - public static final Map sMachineIDs = new ConcurrentHashMap<>(); - /** - * The Redstone Frequencies - */ - public static final Map sWirelessRedstone = new ConcurrentHashMap<>(); - /** - * The Advanced Redstone Frequencies - */ - public static final Map>> sAdvancedWirelessRedstone = new ConcurrentHashMap<>(); - - /** - * The IDSU Frequencies - */ - public static final Map sIDSUList = new ConcurrentHashMap<>(); - /** - * A List of all Books, which were created using @GT_Utility.getWrittenBook the original Title is the Key Value - */ - public static final Map sBookList = new ConcurrentHashMap<>(); - /** - * The List of all Sounds used in GT, indices are in the static Block at the bottom - * - * @deprecated Use {@link SoundResource} - */ - @Deprecated - public static final Map sSoundList = SoundResource.asSoundList(); - /** - * The List of Tools, which can be used. Accepts regular damageable Items and Electric Items - */ - public static final GT_HashSet sToolList = new GT_HashSet<>(), sCrowbarList = new GT_HashSet<>(), - sScrewdriverList = new GT_HashSet<>(), sWrenchList = new GT_HashSet<>(), sSoftHammerList = new GT_HashSet<>(), - sHardHammerList = new GT_HashSet<>(), sWireCutterList = new GT_HashSet<>(), - sSolderingToolList = new GT_HashSet<>(), sSolderingMetalList = new GT_HashSet<>(), - sJackhammerList = new GT_HashSet<>(); - /** - * The List of Hazmat Armors - */ - public static final GT_HashSet sGasHazmatList = new GT_HashSet<>(), - sBioHazmatList = new GT_HashSet<>(), sFrostHazmatList = new GT_HashSet<>(), - sHeatHazmatList = new GT_HashSet<>(), sRadioHazmatList = new GT_HashSet<>(), - sElectroHazmatList = new GT_HashSet<>(); - - private static final Multimap sRealConfigurationList = Multimaps - .newListMultimap(new TreeMap<>(), ArrayList::new); - private static final Map> sConfigurationLists = new ConcurrentHashMap<>(); - private static final Map, BiFunction> sRealCircuitProgrammerList = new LinkedHashMap<>(); - public static final Map, BiFunction> sCircuitProgrammerList = Collections - .unmodifiableMap(sRealCircuitProgrammerList); - - /** - * The List of Dimensions, which are Whitelisted for the Teleporter. This list should not contain other Planets. - * Mystcraft Dimensions and other Dimensional Things should be allowed. Mystcraft and Twilight Forest are - * automatically considered a Dimension, without being in this List. - */ - public static final Collection sDimensionalList = new HashSet<>(); - /** - * Lists of all the active World generation Features, these are getting Initialized in Postload! - */ - public static final List sWorldgenList = new ArrayList<>(); - /** - * A List containing all the Materials, which are somehow in use by GT and therefor receive a specific Set of Items. - */ - public static final Materials[] sGeneratedMaterials = new Materials[1000]; - /** - * This is the generic Cover behavior. Used for the default Covers, which have no Behavior. - */ - public static final GT_CoverBehavior sDefaultBehavior = new GT_Cover_Default(), sNoBehavior = new GT_Cover_None(); - /** - * For the API Version check - */ - public static volatile int VERSION = 509; - - /** - * @deprecated Use {@link GT_Values#RA} - */ - @SuppressWarnings("DeprecatedIsStillUsed") // Still need be initialized for backward compat - @Deprecated - public static IGT_RecipeAdder sRecipeAdder; - /** - * Registers Aspects to Thaumcraft. This Object might be {@code null} if Thaumcraft isn't installed. - */ - public static IThaumcraftCompat sThaumcraftCompat; - /** - * The Lists below are executed at their respective timings. Useful to do things at a particular moment in time. - * The Lists are not Threaded - a native Java interface is used for their execution. - * Add your "commands" in the constructor or in the static-code-block of your mod's Main class. - * Implement the method {@code run()}, and everything should work. - */ - public static List sBeforeGTPreload = new ArrayList<>(), sAfterGTPreload = new ArrayList<>(), - sBeforeGTLoad = new ArrayList<>(), sAfterGTLoad = new ArrayList<>(), sBeforeGTPostload = new ArrayList<>(), - sAfterGTPostload = new ArrayList<>(), sFirstWorldTick = new ArrayList<>(), - sBeforeGTServerstart = new ArrayList<>(), sAfterGTServerstart = new ArrayList<>(), - sBeforeGTServerstop = new ArrayList<>(), sAfterGTServerstop = new ArrayList<>(), - sGTBlockIconload = new ArrayList<>(), sGTItemIconload = new ArrayList<>(), sGTCompleteLoad = new ArrayList<>(); - /** - * The Icon Registers from Blocks and Items. They will get set right before the corresponding Icon Load Phase as - * executed in the Runnable List above. - */ - @SideOnly(Side.CLIENT) - public static IIconRegister sBlockIcons, sItemIcons; - /** - * The Configuration Objects - */ - public static GT_Config NEIClientFIle; - - public static int TICKS_FOR_LAG_AVERAGING = 25, MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING = 100; - /** - * Initialized by the Block creation. - */ - public static Block sBlockMachines; - - public static Block sBlockOres1, sBlockOresUb1, sBlockOresUb2, sBlockOresUb3, - /* sBlockGem, */ - sBlockMetal1, sBlockMetal2, sBlockMetal3, sBlockMetal4, sBlockMetal5, sBlockMetal6, sBlockMetal7, sBlockMetal8, - sBlockMetal9, sBlockGem1, sBlockGem2, sBlockGem3, sBlockReinforced; - public static Block sBlockGranites, sBlockConcretes, sBlockStones; - public static Block sBlockCasings1, sBlockCasings2, sBlockCasings3, sBlockCasings4, sBlockCasings5, sBlockCasings6, - sBlockCasings8, sBlockCasings9, sBlockCasings10, sBlockCasings11, sSolenoidCoilCasings; - public static Block sBlockLongDistancePipes; - public static Block sDroneRender; - public static Block sBlockFrames; - public static Block sBlockGlass1; - public static Block sBlockTintedGlass; - public static Block sLaserRender; - public static Block sWormholeRender; - /** - * Getting assigned by the Config - */ - public static boolean sTimber = true, sDrinksAlwaysDrinkable = false, sMultiThreadedSounds = false, - sDoShowAllItemsInCreative = false, sColoredGUI = true, sMachineMetalGUI = false, sMachineExplosions = true, - sMachineFlammable = true, sMachineNonWrenchExplosions = true, sMachineRainExplosions = true, - sMachineThunderExplosions = true, sMachineFireExplosions = true, sMachineWireFire = true, mOutputRF = false, - mInputRF = false, mRFExplosions = false, mServerStarted = false; - - public static int mEUtoRF = 360, mRFtoEU = 20; - - /** - * Option to not use MACHINE_METAL mixing into colors - */ - public static boolean sUseMachineMetal = false; - - public static boolean mUseOnlyGoodSolderingMaterials = false; - - private static final String aTextIC2Lower = IndustrialCraft2.ID.toLowerCase(Locale.ENGLISH); - /** - * Getting assigned by the Mod loading - */ - public static boolean sUnificationEntriesRegistered = false, sPreloadStarted = false, sPreloadFinished = false, - sLoadStarted = false, sLoadFinished = false, sPostloadStarted = false, sPostloadFinished = false, - sFullLoadFinished = false; - - private static Class sBaseMetaTileEntityClass = null; - - @SuppressWarnings("unchecked") - private static final IntFunction[] teCreators = new IntFunction[16]; - - private static final Set> dummyWorlds = new HashSet<>(); - - static { - sItemStackMappings.add(sCovers); - sItemStackMappings.add(sCoverBehaviors); - - dummyWorlds.add(GT_DummyWorld.class); - tryAddDummyWorld("blockrenderer6343.client.world.DummyWorld"); - } - - private static void tryAddDummyWorld(String className) { - ClassLoader cl = GregTech_API.class.getClassLoader(); - Class clazz; - try { - clazz = Class.forName(className, false, cl); - } catch (ReflectiveOperationException ex) { - return; - } - dummyWorlds.add(clazz); - } - - public static void addDummyWorld(Class clazz) { - dummyWorlds.add(clazz); - } - - public static boolean isDummyWorld(@Nonnull World w) { - return dummyWorlds.contains(w.getClass()); - } - - /** - * You want OreDict-Unification for YOUR Mod/Addon, when GregTech is installed? This Function is especially for YOU. - * Call this Function after the load-Phase, as I register the most of the Unification at that Phase (Redpowers - * Storageblocks are registered at postload). A recommended use of this Function is inside your Recipe-System itself - * (if you have one), as the unification then makes 100% sure, that every added non-unificated Output gets - * automatically unificated. - *

- * I will personally make sure, that only common prefixes of Ores get registered at the Unificator, as of now there - * are: pulp, dust, dustSmall, ingot, nugget, gem, ore and block If another Mod-Author messes these up, then it's - * not my fault, and it's especially not your fault. As these are commonly used prefixes. - *

- * This Unificator-API-Function uses the same Functions I use, for unificating Items. So if there is something - * messed up (very unlikely), then everything is messed up. - *

- * You shouldn't use this to unificate the Inputs of your Recipes, this is only meant for the Outputs. - * - * @param aOreStack the Stack you want to get unificated. It is stackSize Sensitive. - * @return Either an unificated Stack or the stack you toss in, but it should never be null, unless you throw a - * Null-Pointer into it. - */ - public static ItemStack getUnificatedOreDictStack(ItemStack aOreStack) { - if (!GregTech_API.sPreloadFinished) GT_Log.err.println( - "GregTech_API ERROR: " + aOreStack.getItem() - + "." - + aOreStack.getItemDamage() - + " - OreDict Unification Entries are not registered now, please call it in the postload phase."); - return GT_OreDictUnificator.get(true, aOreStack); - } - - /** - * Causes a Machineblock Update This update will cause surrounding MultiBlock Machines to update their - * Configuration. You should call this Function in @Block.breakBlock and in @Block.onBlockAdded of your Machine. - * - * @param aWorld is being the World - * @param aX is the X-Coord of the update causing Block - * @param aY is the Y-Coord of the update causing Block - * @param aZ is the Z-Coord of the update causing Block - */ - public static boolean causeMachineUpdate(World aWorld, int aX, int aY, int aZ) { - if (aWorld != null && !aWorld.isRemote && !isDummyWorld(aWorld)) { // World might be null during World-gen - GT_Runnable_MachineBlockUpdate.setMachineUpdateValues(aWorld, aX, aY, aZ); - return true; - } - return false; - } - - @SuppressWarnings("UnusedReturnValue") // Retains API method signature - public static boolean causeCableUpdate(World aWorld, int aX, int aY, int aZ) { - if (aWorld == null || aWorld.isRemote || isDummyWorld(aWorld)) { - return false; - } // World might be null during World-gen - GT_Runnable_Cable_Update.setCableUpdateValues(aWorld, aX, aY, aZ); - return true; - } - - /** - * Adds a Multi-Machine Block, like my Machine Casings for example. You should call @causeMachineUpdate - * in @Block.breakBlock and in {@link Block#onBlockAdded} of your registered Block. You don't need to register - * TileEntities which implement {@link IMachineBlockUpdateable} - * - * @param aBlock the Block - * @param aMeta the Metadata of the Blocks as Bitmask! -1 or ~0 for all Meta-values - */ - @SuppressWarnings("UnusedReturnValue") // Retains API method signature - public static boolean registerMachineBlock(Block aBlock, int aMeta) { - if (aBlock == null) return false; - if (GregTech_API.sThaumcraftCompat != null) - GregTech_API.sThaumcraftCompat.registerPortholeBlacklistedBlock(aBlock); - sMachineIDs.put(aBlock, aMeta); - return true; - } - - /** - * Like above but with boolean Parameters instead of a BitMask - */ - public static boolean registerMachineBlock(Block aBlock, boolean... aMeta) { - if (aBlock == null || aMeta == null || aMeta.length == 0) return false; - if (GregTech_API.sThaumcraftCompat != null) - GregTech_API.sThaumcraftCompat.registerPortholeBlacklistedBlock(aBlock); - int rMeta = 0; - for (byte i = 0; i < aMeta.length && i < 16; i++) if (aMeta[i]) rMeta |= B[i]; - sMachineIDs.put(aBlock, rMeta); - return true; - } - - /** - * if this Block is a Machine Update Conducting Block - */ - public static boolean isMachineBlock(Block aBlock, int aMeta) { - if (aBlock != null) { - Integer id = sMachineIDs.get(aBlock); - return id != null && (id & B[aMeta]) != 0; - } - return false; - } - - /** - * Creates a new Coolant Cell Item for your Nuclear Reactor - */ - public static Item constructCoolantCellItem(String aUnlocalized, String aEnglish, int aMaxStore) { - try { - return new GT_CoolantCellIC_Item(aUnlocalized, aEnglish, aMaxStore); - } catch (Throwable e) { - /* Do nothing */ - } - try { - return new GT_CoolantCell_Item(aUnlocalized, aEnglish, aMaxStore); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Generic_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug"); - } - - /** - * Creates a new Energy Armor Item - */ - public static Item constructElectricArmorItem(String aUnlocalized, String aEnglish, int aCharge, int aTransfer, - int aTier, int aDamageEnergyCost, int aSpecials, double aArmorAbsorbtionPercentage, boolean aChargeProvider, - int aType, int aArmorIndex) { - try { - return (Item) Class.forName("gregtechmod.api.items.GT_EnergyArmorIC_Item") - .getConstructors()[0].newInstance( - aUnlocalized, - aEnglish, - aCharge, - aTransfer, - aTier, - aDamageEnergyCost, - aSpecials, - aArmorAbsorbtionPercentage, - aChargeProvider, - aType, - aArmorIndex); - } catch (Throwable e) { - /* Do nothing */ - } - try { - return (Item) Class.forName("gregtechmod.api.items.GT_EnergyArmor_Item") - .getConstructors()[0].newInstance( - aUnlocalized, - aEnglish, - aCharge, - aTransfer, - aTier, - aDamageEnergyCost, - aSpecials, - aArmorAbsorbtionPercentage, - aChargeProvider, - aType, - aArmorIndex); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Generic_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug"); - } - - /** - * Creates a new Energy Battery Item - */ - public static Item constructElectricEnergyStorageItem(String aUnlocalized, String aEnglish, int aCharge, - int aTransfer, int aTier, int aEmptyID, int aFullID) { - try { - return (Item) Class.forName("gregtechmod.api.items.GT_EnergyStoreIC_Item") - .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aCharge, aTransfer, aTier, aEmptyID, aFullID); - } catch (Throwable e) { - /* Do nothing */ - } - try { - return (Item) Class.forName("gregtechmod.api.items.GT_EnergyStore_Item") - .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aCharge, aTransfer, aTier, aEmptyID, aFullID); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Generic_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug"); - } - - /** - * Creates a new Hard Hammer Item - */ - public static GT_Tool_Item constructHardHammerItem(String aUnlocalized, String aEnglish, int aMaxDamage, - int aEntityDamage) { - try { - return (GT_Tool_Item) Class.forName("gregtechmod.api.items.GT_HardHammer_Item") - .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Tool_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug", - aMaxDamage, - aEntityDamage, - false); - } - - /** - * Creates a new Crowbar Item - */ - public static GT_Tool_Item constructCrowbarItem(String aUnlocalized, String aEnglish, int aMaxDamage, - int aEntityDamage) { - try { - return (GT_Tool_Item) Class.forName("gregtechmod.api.items.GT_CrowbarRC_Item") - .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage); - } catch (Throwable e) { - /* Do nothing */ - } - try { - return (GT_Tool_Item) Class.forName("gregtechmod.api.items.GT_Crowbar_Item") - .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Tool_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug", - aMaxDamage, - aEntityDamage, - false); - } - - /** - * Creates a new Wrench Item - */ - public static GT_Tool_Item constructWrenchItem(String aUnlocalized, String aEnglish, int aMaxDamage, - int aEntityDamage, int aDisChargedGTID) { - try { - return (GT_Tool_Item) Class.forName("gregtechmod.api.items.GT_Wrench_Item") - .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Tool_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug", - aMaxDamage, - aEntityDamage, - false); - } - - /** - * Creates a new electric Screwdriver Item - */ - public static GT_Tool_Item constructElectricScrewdriverItem(String aUnlocalized, String aEnglish, int aMaxDamage, - int aEntityDamage, int aDisChargedGTID) { - try { - return (GT_Tool_Item) Class.forName("gregtechmod.api.items.GT_ScrewdriverIC_Item") - .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Tool_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug", - aMaxDamage, - aEntityDamage, - false); - } - - /** - * Creates a new electric Wrench Item - */ - public static GT_Tool_Item constructElectricWrenchItem(String aUnlocalized, String aEnglish, int aMaxDamage, - int aEntityDamage, int aDisChargedGTID) { - try { - return (GT_Tool_Item) Class.forName("gregtechmod.api.items.GT_WrenchIC_Item") - .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Tool_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug", - aMaxDamage, - aEntityDamage, - false); - } - - /** - * Creates a new electric Saw Item - */ - public static GT_Tool_Item constructElectricSawItem(String aUnlocalized, String aEnglish, int aMaxDamage, - int aEntityDamage, int aToolQuality, float aToolStrength, int aEnergyConsumptionPerBlockBreak, - int aDisChargedGTID) { - try { - return (GT_Tool_Item) Class.forName("gregtechmod.api.items.GT_SawIC_Item") - .getConstructors()[0].newInstance( - aUnlocalized, - aEnglish, - aMaxDamage, - aEntityDamage, - aToolQuality, - aToolStrength, - aEnergyConsumptionPerBlockBreak, - aDisChargedGTID); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Tool_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug", - aMaxDamage, - aEntityDamage, - false); - } - - /** - * Creates a new electric Drill Item - */ - public static GT_Tool_Item constructElectricDrillItem(String aUnlocalized, String aEnglish, int aMaxDamage, - int aEntityDamage, int aToolQuality, float aToolStrength, int aEnergyConsumptionPerBlockBreak, - int aDisChargedGTID) { - try { - return (GT_Tool_Item) Class.forName("gregtechmod.api.items.GT_DrillIC_Item") - .getConstructors()[0].newInstance( - aUnlocalized, - aEnglish, - aMaxDamage, - aEntityDamage, - aToolQuality, - aToolStrength, - aEnergyConsumptionPerBlockBreak, - aDisChargedGTID); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Tool_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug", - aMaxDamage, - aEntityDamage, - false); - } - - /** - * Creates a new electric Soldering Tool - */ - public static GT_Tool_Item constructElectricSolderingToolItem(String aUnlocalized, String aEnglish, int aMaxDamage, - int aEntityDamage, int aDisChargedGTID) { - try { - return (GT_Tool_Item) Class.forName("gregtechmod.api.items.GT_SolderingToolIC_Item") - .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aEntityDamage, aDisChargedGTID); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Tool_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug", - aMaxDamage, - aEntityDamage, - false); - } - - /** - * Creates a new empty electric Tool - */ - public static GT_Tool_Item constructEmptyElectricToolItem(String aUnlocalized, String aEnglish, int aMaxDamage, - int aChargedGTID) { - try { - return (GT_Tool_Item) Class.forName("gregtechmod.api.items.GT_EmptyToolIC_Item") - .getConstructors()[0].newInstance(aUnlocalized, aEnglish, aMaxDamage, aChargedGTID); - } catch (Throwable e) { - /* Do nothing */ - } - return new gregtech.api.items.GT_Tool_Item( - aUnlocalized, - aEnglish, - "Doesn't work as intended, this is a Bug", - aMaxDamage, - 0, - false); - } - - /** - * Provides a new BaseMetaTileEntity. Because some interfaces are not always loaded (Buildcraft, Universal - * Electricity) we have to use invocation at the constructor of the BaseMetaTileEntity. - */ - public static BaseMetaTileEntity constructBaseMetaTileEntity() { - if (sBaseMetaTileEntityClass == null) { - try { - return (sBaseMetaTileEntityClass = BaseMetaTileEntity.class).getDeclaredConstructor() - .newInstance(); - } catch (Throwable ignored) {} - } - - try { - return sBaseMetaTileEntityClass.getDeclaredConstructor() - .newInstance(); - } catch (Throwable e) { - GT_Log.err.println("GT_Mod: Fatal Error occurred while initializing TileEntities, crashing Minecraft."); - e.printStackTrace(GT_Log.err); - throw new RuntimeException(e); - } - } - - /** - * Register a new ItemStack as configuration circuits. Duplicates or invalid stacks will be silently ignored. - */ - public static void registerConfigurationCircuit(ItemStack aStack) { - registerConfigurationCircuit(aStack, 0); - } - - /** - * Register a new ItemStack as configuration circuits. Duplicates or invalid stacks will be silently ignored. - * - * @param minTier the minimal tier this circuit can be offered for free, e.g. normal configuration circuit is - * available in LV+ single blocks, GT++ breakthrough circuit is offered in HV+ single blocks - */ - public static void registerConfigurationCircuit(ItemStack aStack, int minTier) { - if (GT_Utility.isStackInvalid(aStack)) return; - for (ItemStack tRegistered : sRealConfigurationList.values()) - if (GT_Utility.areStacksEqual(tRegistered, aStack)) return; - ItemStack stack = GT_Utility.copyAmount(0, aStack); - sRealConfigurationList.put(minTier, stack); - for (Map.Entry> e : sConfigurationLists.entrySet()) { - if (e.getKey() >= minTier) { - e.getValue() - .add(stack); - e.getValue() - .sort(getConfigurationCircuitsComparator()); - } - } - } - - /** - * Get a list of Configuration circuits. These stacks will have a stack size of 0. Use - * {@link #registerConfigurationCircuit(ItemStack, int)} or its overload to add to this list. - * - * @param machineTier The voltage tier where this list will be used. use Integer.MAX_VALUE to get all circuits - * @return An unmodifiable view of actual list. DO NOT MODIFY THE ItemStacks! - */ - public static List getConfigurationCircuitList(int machineTier) { - return Collections.unmodifiableList( - sConfigurationLists.computeIfAbsent( - machineTier, - (t) -> sRealConfigurationList.entries() - .stream() - .filter(e -> e.getKey() <= machineTier) - .map(Map.Entry::getValue) - .sorted(getConfigurationCircuitsComparator()) - .collect(Collectors.toList()))); - } - - public static Comparator getConfigurationCircuitsComparator() { - return Comparator.comparingInt((ItemStack is) -> is.getItem() instanceof GT_IntegratedCircuit_Item ? 0 : 1) - .thenComparing(ItemStack::getUnlocalizedName) - .thenComparing(ItemStack::getItemDamage); - } - - public static void registerCircuitProgrammer(ItemStack stack, boolean ignoreNBT, boolean useContainer) { - registerCircuitProgrammer(rhs -> GT_Utility.areStacksEqual(stack, rhs, ignoreNBT), useContainer); - } - - public static void registerCircuitProgrammer(Predicate predicate, boolean useContainer) { - sRealCircuitProgrammerList.put( - predicate, - useContainer ? (s, p) -> s.getItem() - .getContainerItem(s) : (s, p) -> s); - } - - public static void registerCircuitProgrammer(Predicate predicate, - BiFunction doDamage) { - sRealCircuitProgrammerList.put(predicate, doDamage); - } - - public static void registerCover(ItemStack aStack, ITexture aCover, GT_CoverBehavior aBehavior) { - registerCover(aStack, aCover, (GT_CoverBehaviorBase) aBehavior); - } - - public static void registerCover(ItemStack aStack, ITexture aCover, GT_CoverBehaviorBase aBehavior) { - if (!sCovers.containsKey(new GT_ItemStack(aStack))) sCovers.put( - new GT_ItemStack(aStack), - aCover == null || !aCover.isValidTexture() ? Textures.BlockIcons.ERROR_RENDERING[0] : aCover); - if (aBehavior != null) sCoverBehaviors.put(new GT_ItemStack(aStack), aBehavior); - } - - public static void registerCoverBehavior(ItemStack aStack, GT_CoverBehavior aBehavior) { - registerCoverBehavior(aStack, (GT_CoverBehaviorBase) aBehavior); - } - - public static void registerCoverBehavior(ItemStack aStack, GT_CoverBehaviorBase aBehavior) { - sCoverBehaviors.put(new GT_ItemStack(aStack), aBehavior == null ? sDefaultBehavior : aBehavior); - } - - /** - * Registers multiple Cover Items. I use that for the OreDict Functionality. - * - * @param aBehavior can be null - */ - public static void registerCover(Collection aStackList, ITexture aCover, GT_CoverBehavior aBehavior) { - registerCover(aStackList, aCover, (GT_CoverBehaviorBase) aBehavior); - } - - /** - * Registers multiple Cover Items. I use that for the OreDict Functionality. - * - * @param aBehavior can be null - */ - public static void registerCover(Collection aStackList, ITexture aCover, - GT_CoverBehaviorBase aBehavior) { - if (aCover.isValidTexture()) - aStackList.forEach(tStack -> GregTech_API.registerCover(tStack, aCover, aBehavior)); - } - - /** - * returns a Cover behavior, guaranteed to not return null after preload - * - * @return The Cover behavior - */ - public static GT_CoverBehaviorBase getCoverBehaviorNew(ItemStack aStack) { - if (aStack == null || aStack.getItem() == null) return sNoBehavior; - GT_CoverBehaviorBase rCover = sCoverBehaviors.get(new GT_ItemStack(aStack)); - if (rCover != null) return rCover; - rCover = sCoverBehaviors.get(new GT_ItemStack(aStack, true)); - if (rCover != null) return rCover; - return sDefaultBehavior; - } - - /** - * returns a Cover behavior, guaranteed to not return null - */ - public static GT_CoverBehaviorBase getCoverBehaviorNew(int aStack) { - if (aStack == 0) return sNoBehavior; - return getCoverBehaviorNew(GT_Utility.intToStack(aStack)); - } - - /** - * Register a Wrench to be usable on GregTech Machines. The Wrench MUST have some kind of Durability unlike certain - * Buildcraft Wrenches. - *

- * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in - * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). - *

- * ----- - *

- * Returning true at isDamageable was a great Idea, KingLemming. Well played. Since the OmniWrench is just a - * Single-Item-Mod, people can choose if they want your infinite durability or not. So that's not really a Problem. - * I even have a new Config to auto-disable most infinite BC Wrenches (but that one is turned off). - *

- * One last Bug for you to fix: My Auto-registration detects Railcraft's Crowbars, Buildcraft's Wrenches and alike, - * due to their Interfaces. Guess what now became a Crowbar by accident. Try registering the Wrench at the load - * phase to prevent things like that from happening. Yes, I know that "You need to register Tools in the Load - * Phase"-Part wasn't there before this. Sorry about that. - */ - public static boolean registerWrench(ItemStack aTool) { - return registerTool(aTool, sWrenchList); - } - - /** - * Register a Crowbar to extract Covers from Machines Crowbars are NOT Wrenches btw. - *

- * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in - * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). - */ - public static boolean registerCrowbar(ItemStack aTool) { - return registerTool(aTool, sCrowbarList); - } - - /** - * Register a Screwdriver to interact directly with Machines and Covers Did I mention, that it is intentionally not - * possible to make a Multi-tool, which doesn't switch ItemID (like a Mode) all the time? - *

- * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in - * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). - */ - @SuppressWarnings("UnusedReturnValue") // Retains API method signature - public static boolean registerScrewdriver(ItemStack aTool) { - return registerTool(aTool, sScrewdriverList); - } - - /** - * Register a Soft Hammer to interact with Machines - *

- * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in - * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). - */ - public static boolean registerSoftHammer(ItemStack aTool) { - return registerTool(aTool, sSoftHammerList); - } - - /** - * Register a Hard Hammer to interact with Machines - *

- * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in - * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). - */ - public static boolean registerHardHammer(ItemStack aTool) { - return registerTool(aTool, sHardHammerList); - } - - /** - * Register a Wire Cutter to interact with Machines - *

- * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in - * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). - */ - public static boolean registerWireCutter(ItemStack aTool) { - return registerTool(aTool, sWireCutterList); - } - - /** - * Register a Soldering Tool to interact with Machines - *

- * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in - * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). - */ - @SuppressWarnings("UnusedReturnValue") // Retains API method signature - public static boolean registerSolderingTool(ItemStack aTool) { - return registerTool(aTool, sSolderingToolList); - } - - /** - * Register a Soldering Tin to interact with Soldering Tools - *

- * You need to register Tools in the Load Phase, because otherwise the Auto-detection will assign a Tool Type in - * certain Cases during postload (When IToolWrench or similar Interfaces are implemented). - */ - @SuppressWarnings("UnusedReturnValue") // Retains API method signature - public static boolean registerSolderingMetal(ItemStack aTool) { - return registerTool(aTool, sSolderingMetalList); - } - - /** - * Generic Function to add Tools to the Lists. Contains all sanity Checks for Tools, like preventing one Tool from - * being registered for multiple purposes as controls would override each other. - */ - public static boolean registerTool(ItemStack aTool, Collection aToolList) { - if (aTool == null || GT_Utility.isStackInList(aTool, sToolList) - || (!aTool.getItem() - .isDamageable() && !GT_ModHandler.isElectricItem(aTool) - && !(aTool.getItem() instanceof IDamagableItem))) - return false; - aToolList.add(new GT_ItemStack(GT_Utility.copyAmount(1, aTool))); - sToolList.add(new GT_ItemStack(GT_Utility.copyAmount(1, aTool))); - return true; - } - - /** - * Sets the {@link IIconRegister} for Block Icons - * - * @param aIconRegister The {@link IIconRegister} Icon Register - */ - @SideOnly(Side.CLIENT) - public static void setBlockIconRegister(IIconRegister aIconRegister) { - sBlockIcons = aIconRegister; - } - - /** - * Sets the {@link IIconRegister} for Items Icons - * - * @param aIconRegister The {@link IIconRegister} Icon Register - */ - @SideOnly(Side.CLIENT) - public static void setItemIconRegister(IIconRegister aIconRegister) { - GregTech_API.sItemIcons = aIconRegister; - } - - public static void registerTileEntityConstructor(int meta, IntFunction constructor) { - if (meta < 0 || meta > 15 || constructor == null) throw new IllegalArgumentException(); - if (teCreators[meta] != null) throw new IllegalStateException( - "previous constructor: " + teCreators[meta] + " new constructor: " + constructor + " meta:" + meta); - teCreators[meta] = constructor; - } - - public static TileEntity createTileEntity(int meta) { - meta = GT_Utility.clamp(meta, 0, 15); - if (teCreators[meta] == null) return null; - return teCreators[meta].apply(meta); - } -} diff --git a/src/main/java/gregtech/api/damagesources/GTDamageSources.java b/src/main/java/gregtech/api/damagesources/GTDamageSources.java new file mode 100644 index 0000000000..44b80a57c9 --- /dev/null +++ b/src/main/java/gregtech/api/damagesources/GTDamageSources.java @@ -0,0 +1,119 @@ +package gregtech.api.damagesources; + +import javax.annotation.Nullable; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +public class GTDamageSources { + + public static DamageSource getElectricDamage() { + return ic2.api.info.Info.DMG_ELECTRIC; + } + + public static DamageSource getRadioactiveDamage() { + return ic2.api.info.Info.DMG_RADIATION; + } + + public static DamageSource getNukeExplosionDamage() { + return ic2.api.info.Info.DMG_NUKE_EXPLOSION; + } + + public static DamageSource getExplodingDamage() { + return new DamageSourceExploding(); + } + + public static DamageSource getCombatDamage(String aType, EntityLivingBase aPlayer, IChatComponent aDeathMessage) { + return new DamageSourceCombat(aType, aPlayer, aDeathMessage); + } + + public static DamageSource getHeatDamage() { + return new DamageSourceHeat(); + } + + public static DamageSource getFrostDamage() { + return new DamageSourceFrost(); + } + + private static class DamageSourceCombat extends EntityDamageSource { + + private final IChatComponent mDeathMessage; + + public DamageSourceCombat(String aType, EntityLivingBase aPlayer, IChatComponent aDeathMessage) { + super(aType, aPlayer); + mDeathMessage = aDeathMessage; + } + + @Override + public IChatComponent func_151519_b(EntityLivingBase aTarget) { + return mDeathMessage == null ? super.func_151519_b(aTarget) : mDeathMessage; + } + } + + private static class DamageSourceFrost extends DamageSource { + + public DamageSourceFrost() { + super("frost"); + setDifficultyScaled(); + } + + @Override + public IChatComponent func_151519_b(EntityLivingBase aTarget) { + return new ChatComponentText( + EnumChatFormatting.RED + aTarget.getCommandSenderName() + EnumChatFormatting.WHITE + " got frozen"); + } + } + + private static class DamageSourceHeat extends DamageSource { + + public DamageSourceHeat() { + super("steam"); + setFireDamage(); + setDifficultyScaled(); + } + + @Override + public IChatComponent func_151519_b(EntityLivingBase aTarget) { + return new ChatComponentText( + EnumChatFormatting.RED + aTarget.getCommandSenderName() + + EnumChatFormatting.WHITE + + " was boiled alive"); + } + } + + public static class DamageSourceHotItem extends DamageSourceHeat { + + @Nullable + private final ItemStack stack; + + public DamageSourceHotItem(@Nullable ItemStack cause) { + this.stack = cause; + } + + @Nullable + public ItemStack getDamagingStack() { + return stack; + } + } + + public static class DamageSourceExploding extends DamageSource { + + public DamageSourceExploding() { + super("exploded"); + setDamageAllowedInCreativeMode(); + setDamageBypassesArmor(); + setDamageIsAbsolute(); + } + + @Override + public IChatComponent func_151519_b(EntityLivingBase aTarget) { + return new ChatComponentText( + EnumChatFormatting.RED + aTarget.getCommandSenderName() + EnumChatFormatting.WHITE + " exploded"); + } + } +} diff --git a/src/main/java/gregtech/api/damagesources/GT_DamageSources.java b/src/main/java/gregtech/api/damagesources/GT_DamageSources.java deleted file mode 100644 index 65a2519001..0000000000 --- a/src/main/java/gregtech/api/damagesources/GT_DamageSources.java +++ /dev/null @@ -1,119 +0,0 @@ -package gregtech.api.damagesources; - -import javax.annotation.Nullable; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EntityDamageSource; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -public class GT_DamageSources { - - public static DamageSource getElectricDamage() { - return ic2.api.info.Info.DMG_ELECTRIC; - } - - public static DamageSource getRadioactiveDamage() { - return ic2.api.info.Info.DMG_RADIATION; - } - - public static DamageSource getNukeExplosionDamage() { - return ic2.api.info.Info.DMG_NUKE_EXPLOSION; - } - - public static DamageSource getExplodingDamage() { - return new DamageSourceExploding(); - } - - public static DamageSource getCombatDamage(String aType, EntityLivingBase aPlayer, IChatComponent aDeathMessage) { - return new DamageSourceCombat(aType, aPlayer, aDeathMessage); - } - - public static DamageSource getHeatDamage() { - return new DamageSourceHeat(); - } - - public static DamageSource getFrostDamage() { - return new DamageSourceFrost(); - } - - private static class DamageSourceCombat extends EntityDamageSource { - - private final IChatComponent mDeathMessage; - - public DamageSourceCombat(String aType, EntityLivingBase aPlayer, IChatComponent aDeathMessage) { - super(aType, aPlayer); - mDeathMessage = aDeathMessage; - } - - @Override - public IChatComponent func_151519_b(EntityLivingBase aTarget) { - return mDeathMessage == null ? super.func_151519_b(aTarget) : mDeathMessage; - } - } - - private static class DamageSourceFrost extends DamageSource { - - public DamageSourceFrost() { - super("frost"); - setDifficultyScaled(); - } - - @Override - public IChatComponent func_151519_b(EntityLivingBase aTarget) { - return new ChatComponentText( - EnumChatFormatting.RED + aTarget.getCommandSenderName() + EnumChatFormatting.WHITE + " got frozen"); - } - } - - private static class DamageSourceHeat extends DamageSource { - - public DamageSourceHeat() { - super("steam"); - setFireDamage(); - setDifficultyScaled(); - } - - @Override - public IChatComponent func_151519_b(EntityLivingBase aTarget) { - return new ChatComponentText( - EnumChatFormatting.RED + aTarget.getCommandSenderName() - + EnumChatFormatting.WHITE - + " was boiled alive"); - } - } - - public static class DamageSourceHotItem extends DamageSourceHeat { - - @Nullable - private final ItemStack stack; - - public DamageSourceHotItem(@Nullable ItemStack cause) { - this.stack = cause; - } - - @Nullable - public ItemStack getDamagingStack() { - return stack; - } - } - - public static class DamageSourceExploding extends DamageSource { - - public DamageSourceExploding() { - super("exploded"); - setDamageAllowedInCreativeMode(); - setDamageBypassesArmor(); - setDamageIsAbsolute(); - } - - @Override - public IChatComponent func_151519_b(EntityLivingBase aTarget) { - return new ChatComponentText( - EnumChatFormatting.RED + aTarget.getCommandSenderName() + EnumChatFormatting.WHITE + " exploded"); - } - } -} diff --git a/src/main/java/gregtech/api/enchants/EnchantmentEnderDamage.java b/src/main/java/gregtech/api/enchants/EnchantmentEnderDamage.java new file mode 100644 index 0000000000..6c26a54976 --- /dev/null +++ b/src/main/java/gregtech/api/enchants/EnchantmentEnderDamage.java @@ -0,0 +1,72 @@ +package gregtech.api.enchants; + +import net.minecraft.enchantment.EnchantmentDamage; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; + +import gregtech.api.enums.ConfigCategories; +import gregtech.api.enums.Materials; +import gregtech.api.util.GTConfig; +import gregtech.api.util.GTLanguageManager; + +public class EnchantmentEnderDamage extends EnchantmentDamage { + + public static EnchantmentEnderDamage INSTANCE; + + public EnchantmentEnderDamage() { + super(GTConfig.addIDConfig(ConfigCategories.IDs.enchantments, "Disjunction", 15), 2, -1); + GTLanguageManager.addStringLocalization(getName(), "Disjunction"); + Materials.Silver.setEnchantmentForTools(this, 2); + Materials.Mercury.setEnchantmentForTools(this, 3); + Materials.Electrum.setEnchantmentForTools(this, 3); + Materials.SterlingSilver.setEnchantmentForTools(this, 4); + Materials.AstralSilver.setEnchantmentForTools(this, 5); + INSTANCE = this; + } + + @Override + public int getMinEnchantability(int aLevel) { + return 5 + (aLevel - 1) * 8; + } + + @Override + public int getMaxEnchantability(int aLevel) { + return this.getMinEnchantability(aLevel) + 20; + } + + @Override + public int getMaxLevel() { + return 5; + } + + @Override + public void func_151367_b(EntityLivingBase aHurtEntity, Entity aDamagingEntity, int aLevel) { + if ((aHurtEntity instanceof EntityEnderman || aHurtEntity instanceof EntityDragon + || (aHurtEntity.getClass() + .getName() + .contains(".") + && aHurtEntity.getClass() + .getName() + .substring( + aHurtEntity.getClass() + .getName() + .lastIndexOf(".")) + .contains("Ender")))) { + // Weakness causes Endermen to not be able to teleport with GT being installed. + aHurtEntity + .addPotionEffect(new PotionEffect(Potion.weakness.id, aLevel * 200, Math.max(1, (5 * aLevel) / 7))); + // They also get Poisoned. If you have this Enchant on an Arrow, you can kill the Ender Dragon easier. + aHurtEntity + .addPotionEffect(new PotionEffect(Potion.poison.id, aLevel * 200, Math.max(1, (5 * aLevel) / 7))); + } + } + + @Override + public String getName() { + return "enchantment.damage.endermen"; + } +} diff --git a/src/main/java/gregtech/api/enchants/EnchantmentHazmat.java b/src/main/java/gregtech/api/enchants/EnchantmentHazmat.java new file mode 100644 index 0000000000..bbac780b71 --- /dev/null +++ b/src/main/java/gregtech/api/enchants/EnchantmentHazmat.java @@ -0,0 +1,56 @@ +package gregtech.api.enchants; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnumEnchantmentType; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.ConfigCategories; +import gregtech.api.util.GTConfig; +import gregtech.api.util.GTLanguageManager; + +public class EnchantmentHazmat extends Enchantment { + + public static EnchantmentHazmat INSTANCE; + + public EnchantmentHazmat() { + super(GTConfig.addIDConfig(ConfigCategories.IDs.enchantments, "Hazmat", 13), 0, EnumEnchantmentType.armor); + GTLanguageManager.addStringLocalization(getName(), "Hazmat"); + INSTANCE = this; + } + + @Override + public int getMinEnchantability(int aLevel) { + return 50; + } + + @Override + public int getMaxEnchantability(int aLevel) { + return 100; + } + + @Override + public int getMaxLevel() { + return 1; + } + + @Override + public boolean canApply(ItemStack aStack) { + return aStack != null && (aStack.getItem() instanceof ItemArmor); + } + + @Override + public boolean canApplyAtEnchantingTable(ItemStack itemStack) { + return false; + } + + @Override + public boolean isAllowedOnBooks() { + return false; + } + + @Override + public String getName() { + return "enchantment.protection.hazmat"; + } +} diff --git a/src/main/java/gregtech/api/enchants/EnchantmentRadioactivity.java b/src/main/java/gregtech/api/enchants/EnchantmentRadioactivity.java new file mode 100644 index 0000000000..77e6f52702 --- /dev/null +++ b/src/main/java/gregtech/api/enchants/EnchantmentRadioactivity.java @@ -0,0 +1,68 @@ +package gregtech.api.enchants; + +import net.minecraft.enchantment.EnchantmentDamage; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.ConfigCategories; +import gregtech.api.enums.Materials; +import gregtech.api.util.GTConfig; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; + +public class EnchantmentRadioactivity extends EnchantmentDamage { + + public static EnchantmentRadioactivity INSTANCE; + + public EnchantmentRadioactivity() { + super(GTConfig.addIDConfig(ConfigCategories.IDs.enchantments, "Radioactivity", 14), 0, -1); + GTLanguageManager.addStringLocalization(getName(), "Radioactivity"); + Materials.Plutonium.setEnchantmentForTools(this, 1) + .setEnchantmentForArmors(this, 1); + Materials.Uranium235.setEnchantmentForTools(this, 2) + .setEnchantmentForArmors(this, 2); + Materials.Plutonium241.setEnchantmentForTools(this, 3) + .setEnchantmentForArmors(this, 3); + Materials.NaquadahEnriched.setEnchantmentForTools(this, 4) + .setEnchantmentForArmors(this, 4); + Materials.Naquadria.setEnchantmentForTools(this, 5) + .setEnchantmentForArmors(this, 5); + INSTANCE = this; + } + + @Override + public int getMinEnchantability(int aLevel) { + return Integer.MAX_VALUE; + } + + @Override + public int getMaxEnchantability(int aLevel) { + return 0; + } + + @Override + public int getMaxLevel() { + return 5; + } + + @Override + public boolean canApply(ItemStack itemStack) { + return false; + } + + @Override + public boolean isAllowedOnBooks() { + return false; + } + + @Override + public void func_151367_b(EntityLivingBase aHurtEntity, Entity aDamagingEntity, int aLevel) { + GTUtility.applyRadioactivity(aHurtEntity, aLevel, 1); + } + + @Override + public String getName() { + return "enchantment.damage.radioactivity"; + } +} diff --git a/src/main/java/gregtech/api/enchants/Enchantment_EnderDamage.java b/src/main/java/gregtech/api/enchants/Enchantment_EnderDamage.java deleted file mode 100644 index 07c13b3509..0000000000 --- a/src/main/java/gregtech/api/enchants/Enchantment_EnderDamage.java +++ /dev/null @@ -1,72 +0,0 @@ -package gregtech.api.enchants; - -import net.minecraft.enchantment.EnchantmentDamage; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.boss.EntityDragon; -import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; - -import gregtech.api.enums.ConfigCategories; -import gregtech.api.enums.Materials; -import gregtech.api.util.GT_Config; -import gregtech.api.util.GT_LanguageManager; - -public class Enchantment_EnderDamage extends EnchantmentDamage { - - public static Enchantment_EnderDamage INSTANCE; - - public Enchantment_EnderDamage() { - super(GT_Config.addIDConfig(ConfigCategories.IDs.enchantments, "Disjunction", 15), 2, -1); - GT_LanguageManager.addStringLocalization(getName(), "Disjunction"); - Materials.Silver.setEnchantmentForTools(this, 2); - Materials.Mercury.setEnchantmentForTools(this, 3); - Materials.Electrum.setEnchantmentForTools(this, 3); - Materials.SterlingSilver.setEnchantmentForTools(this, 4); - Materials.AstralSilver.setEnchantmentForTools(this, 5); - INSTANCE = this; - } - - @Override - public int getMinEnchantability(int aLevel) { - return 5 + (aLevel - 1) * 8; - } - - @Override - public int getMaxEnchantability(int aLevel) { - return this.getMinEnchantability(aLevel) + 20; - } - - @Override - public int getMaxLevel() { - return 5; - } - - @Override - public void func_151367_b(EntityLivingBase aHurtEntity, Entity aDamagingEntity, int aLevel) { - if ((aHurtEntity instanceof EntityEnderman || aHurtEntity instanceof EntityDragon - || (aHurtEntity.getClass() - .getName() - .contains(".") - && aHurtEntity.getClass() - .getName() - .substring( - aHurtEntity.getClass() - .getName() - .lastIndexOf(".")) - .contains("Ender")))) { - // Weakness causes Endermen to not be able to teleport with GT being installed. - aHurtEntity - .addPotionEffect(new PotionEffect(Potion.weakness.id, aLevel * 200, Math.max(1, (5 * aLevel) / 7))); - // They also get Poisoned. If you have this Enchant on an Arrow, you can kill the Ender Dragon easier. - aHurtEntity - .addPotionEffect(new PotionEffect(Potion.poison.id, aLevel * 200, Math.max(1, (5 * aLevel) / 7))); - } - } - - @Override - public String getName() { - return "enchantment.damage.endermen"; - } -} diff --git a/src/main/java/gregtech/api/enchants/Enchantment_Hazmat.java b/src/main/java/gregtech/api/enchants/Enchantment_Hazmat.java deleted file mode 100644 index ecbe654698..0000000000 --- a/src/main/java/gregtech/api/enchants/Enchantment_Hazmat.java +++ /dev/null @@ -1,56 +0,0 @@ -package gregtech.api.enchants; - -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnumEnchantmentType; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.ConfigCategories; -import gregtech.api.util.GT_Config; -import gregtech.api.util.GT_LanguageManager; - -public class Enchantment_Hazmat extends Enchantment { - - public static Enchantment_Hazmat INSTANCE; - - public Enchantment_Hazmat() { - super(GT_Config.addIDConfig(ConfigCategories.IDs.enchantments, "Hazmat", 13), 0, EnumEnchantmentType.armor); - GT_LanguageManager.addStringLocalization(getName(), "Hazmat"); - INSTANCE = this; - } - - @Override - public int getMinEnchantability(int aLevel) { - return 50; - } - - @Override - public int getMaxEnchantability(int aLevel) { - return 100; - } - - @Override - public int getMaxLevel() { - return 1; - } - - @Override - public boolean canApply(ItemStack aStack) { - return aStack != null && (aStack.getItem() instanceof ItemArmor); - } - - @Override - public boolean canApplyAtEnchantingTable(ItemStack itemStack) { - return false; - } - - @Override - public boolean isAllowedOnBooks() { - return false; - } - - @Override - public String getName() { - return "enchantment.protection.hazmat"; - } -} diff --git a/src/main/java/gregtech/api/enchants/Enchantment_Radioactivity.java b/src/main/java/gregtech/api/enchants/Enchantment_Radioactivity.java deleted file mode 100644 index e68e55cd6a..0000000000 --- a/src/main/java/gregtech/api/enchants/Enchantment_Radioactivity.java +++ /dev/null @@ -1,68 +0,0 @@ -package gregtech.api.enchants; - -import net.minecraft.enchantment.EnchantmentDamage; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.ConfigCategories; -import gregtech.api.enums.Materials; -import gregtech.api.util.GT_Config; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; - -public class Enchantment_Radioactivity extends EnchantmentDamage { - - public static Enchantment_Radioactivity INSTANCE; - - public Enchantment_Radioactivity() { - super(GT_Config.addIDConfig(ConfigCategories.IDs.enchantments, "Radioactivity", 14), 0, -1); - GT_LanguageManager.addStringLocalization(getName(), "Radioactivity"); - Materials.Plutonium.setEnchantmentForTools(this, 1) - .setEnchantmentForArmors(this, 1); - Materials.Uranium235.setEnchantmentForTools(this, 2) - .setEnchantmentForArmors(this, 2); - Materials.Plutonium241.setEnchantmentForTools(this, 3) - .setEnchantmentForArmors(this, 3); - Materials.NaquadahEnriched.setEnchantmentForTools(this, 4) - .setEnchantmentForArmors(this, 4); - Materials.Naquadria.setEnchantmentForTools(this, 5) - .setEnchantmentForArmors(this, 5); - INSTANCE = this; - } - - @Override - public int getMinEnchantability(int aLevel) { - return Integer.MAX_VALUE; - } - - @Override - public int getMaxEnchantability(int aLevel) { - return 0; - } - - @Override - public int getMaxLevel() { - return 5; - } - - @Override - public boolean canApply(ItemStack itemStack) { - return false; - } - - @Override - public boolean isAllowedOnBooks() { - return false; - } - - @Override - public void func_151367_b(EntityLivingBase aHurtEntity, Entity aDamagingEntity, int aLevel) { - GT_Utility.applyRadioactivity(aHurtEntity, aLevel, 1); - } - - @Override - public String getName() { - return "enchantment.damage.radioactivity"; - } -} diff --git a/src/main/java/gregtech/api/enums/Dyes.java b/src/main/java/gregtech/api/enums/Dyes.java index 3f1bc31c21..1dedcb6af0 100644 --- a/src/main/java/gregtech/api/enums/Dyes.java +++ b/src/main/java/gregtech/api/enums/Dyes.java @@ -7,8 +7,8 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import gregtech.api.interfaces.IColorModulationContainer; -import gregtech.api.objects.GT_ArrayList; -import gregtech.api.util.GT_Utility; +import gregtech.api.objects.GTArrayList; +import gregtech.api.util.GTUtility; public enum Dyes implements IColorModulationContainer { @@ -50,7 +50,7 @@ public enum Dyes implements IColorModulationContainer { public final short[] mRGBa; public final short[] mOriginalRGBa; public final EnumChatFormatting formatting; - private final ArrayList mFluidDyes = new GT_ArrayList<>(false, 1); + private final ArrayList mFluidDyes = new GTArrayList<>(false, 1); Dyes(int aIndex, int aR, int aG, int aB, String aName) { this(aIndex, aR, aG, aB, aName, EnumChatFormatting.GRAY); @@ -75,7 +75,7 @@ public enum Dyes implements IColorModulationContainer { } public static Dyes get(String aColor) { - Object tObject = GT_Utility.getFieldContent(Dyes.class, aColor, false, false); + Object tObject = GTUtility.getFieldContent(Dyes.class, aColor, false, false); if (tObject instanceof Dyes) return (Dyes) tObject; return _NULL; } diff --git a/src/main/java/gregtech/api/enums/GTNH_ExtraMaterials.java b/src/main/java/gregtech/api/enums/GTNH_ExtraMaterials.java deleted file mode 100644 index b65ac53499..0000000000 --- a/src/main/java/gregtech/api/enums/GTNH_ExtraMaterials.java +++ /dev/null @@ -1,626 +0,0 @@ -package gregtech.api.enums; - -import static gregtech.GT_Mod.GT_FML_LOGGER; - -import gregtech.api.interfaces.IMaterialHandler; - -public class GTNH_ExtraMaterials implements IMaterialHandler { - - public GTNH_ExtraMaterials() { - GT_FML_LOGGER.info("Registering GTNH-Materials (post Java 64kb limit)"); - Materials.add(this); - } - - /** - * This Class is for adding new Materials since Java has a Limiation of 64kb per Method / Class header - */ - public static Materials Signalum = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 1 | 2, - 255, - 255, - 255, - 0, - "Signalum", - "Signalum", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - - public static Materials Lumium = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 1 | 2, - 255, - 255, - 255, - 0, - "Lumium", - "Lumium", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials EnrichedCopper = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 1 | 2, - 255, - 255, - 255, - 0, - "EnrichedCopper", - "Enriched Copper", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials DiamondCopper = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 1 | 2, - 255, - 255, - 255, - 0, - "DiamondCopper", - "Diamond Copper", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials TarPitch = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 1 | 2, - 255, - 255, - 255, - 0, - "TarPitch", - "Tar Pitch", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials LimePure = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 0, - 0, - 255, - 255, - 255, - 0, - "LimePure", - "Pure Lime", - 0, - 0, - -1, - 0, - false, - false, - 1, - 1, - 1, - Dyes.dyeLime); - public static Materials Wimalite = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 8, - 255, - 255, - 255, - 0, - "Wimalite", - "Wimalite", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes.dyeYellow); - public static Materials Yellorite = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 8, - 255, - 255, - 255, - 0, - "Yellorite", - "Yellorite", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes.dyeYellow); - public static Materials Quantum = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 0, - 0, - 255, - 255, - 255, - 0, - "Quantum", - "Quantum", - 0, - 0, - -1, - 0, - false, - false, - 1, - 1, - 1, - Dyes.dyeWhite); - public static Materials Turquoise = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 1, - 1, - 255, - 255, - 255, - 0, - "Turquoise", - "Turquoise", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials Tapazite = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 1, - 1, - 255, - 255, - 255, - 0, - "Tapazite", - "Tapazite", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes.dyeGreen); - public static Materials Thyrium = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 1, - 1 | 2 | 8, - 255, - 255, - 255, - 0, - "Thyrium", - "Thyrium", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials Tourmaline = new Materials( - -1, - TextureSet.SET_RUBY, - 1.0F, - 0, - 1, - 1, - 255, - 255, - 255, - 0, - "Tourmaline", - "Tourmaline", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials Spinel = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 1, - 0, - 255, - 255, - 255, - 0, - "Spinel", - "Spinel", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials Starconium = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 1, - 1 | 2 | 8, - 255, - 255, - 255, - 0, - "Starconium", - "Starconium", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials Sugilite = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 1, - 1, - 255, - 255, - 255, - 0, - "Sugilite", - "Sugilite", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials Prismarine = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 1 | 4, - 255, - 255, - 255, - 0, - "Prismarine", - "Prismarine", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials GraveyardDirt = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 1, - 255, - 255, - 255, - 0, - "GraveyardDirt", - "Graveyard Dirt", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials Tennantite = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 1, - 255, - 255, - 255, - 0, - "Tennantite", - "Tennantite", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials Fairy = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 1 | 2, - 255, - 255, - 255, - 0, - "Fairy", - "Fairy", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials Ludicrite = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 1 | 2, - 255, - 255, - 255, - 0, - "Ludicrite", - "Ludicrite", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials AquaRegia = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 0, - 255, - 255, - 255, - 0, - "AquaRegia", - "Aqua Regia", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials SolutionBlueVitriol = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 0, - 255, - 255, - 255, - 0, - "SolutionBlueVitriol", - "Blue Vitriol Solution", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials SolutionNickelSulfate = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 2, - 0, - 255, - 255, - 255, - 0, - "SolutionNickelSulfate", - "Nickel Sulfate Solution", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes._NULL); - public static Materials Lodestone = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 1, - 1 | 8, - 255, - 255, - 255, - 0, - "Lodestone", - "Lodestone", - 0, - 0, - -1, - 0, - false, - false, - 1, - 1, - 1, - Dyes._NULL); - public static Materials Luminite = new Materials( - -1, - TextureSet.SET_NONE, - 1.0F, - 0, - 1, - 1 | 8, - 250, - 250, - 250, - 0, - "Luminite", - "Luminite", - 0, - 0, - -1, - 0, - false, - false, - 3, - 1, - 1, - Dyes.dyeWhite); - - private static void initSubTags() { - SubTag.METAL.addTo(Signalum, Lumium, EnrichedCopper, DiamondCopper); - SubTag.NO_SMASHING.addTo(TarPitch); - } - - @Override - public void onMaterialsInit() { - initSubTags(); - } -} diff --git a/src/main/java/gregtech/api/enums/GTStones.java b/src/main/java/gregtech/api/enums/GTStones.java index 82d7cb90ce..af14301a5d 100644 --- a/src/main/java/gregtech/api/enums/GTStones.java +++ b/src/main/java/gregtech/api/enums/GTStones.java @@ -1,14 +1,14 @@ package gregtech.api.enums; -import gregtech.api.GregTech_API; -import gregtech.common.GT_Worldgen_Stone; +import gregtech.api.GregTechAPI; import gregtech.common.StoneBuilder; +import gregtech.common.WorldgenStone; public enum GTStones { NetherBlackgraniteTiny(new StoneBuilder().name("nether.stone.blackgranite.tiny") .disabledByDefault() - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(0) .dimension(-1) .size(50) @@ -18,7 +18,7 @@ public enum GTStones { NetherBlackgraniteSmall(new StoneBuilder().name("nether.stone.blackgranite.small") .disabledByDefault() - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(0) .dimension(-1) .size(100) @@ -28,7 +28,7 @@ public enum GTStones { NetherBlackgraniteMedium(new StoneBuilder().name("nether.stone.blackgranite.medium") .disabledByDefault() - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(0) .dimension(-1) .size(200) @@ -38,7 +38,7 @@ public enum GTStones { NetherBlackgraniteLarge(new StoneBuilder().name("nether.stone.blackgranite.large") .disabledByDefault() - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(0) .dimension(-1) .size(300) @@ -48,7 +48,7 @@ public enum GTStones { NetherBlackgraniteHuge(new StoneBuilder().name("nether.stone.blackgranite.huge") .disabledByDefault() - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(0) .dimension(-1) .size(400) @@ -58,7 +58,7 @@ public enum GTStones { NetherRedgraniteTiny(new StoneBuilder().name("nether.stone.redgranite.tiny") .disabledByDefault() - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(8) .dimension(-1) .size(50) @@ -68,7 +68,7 @@ public enum GTStones { NetherRedgraniteSmall(new StoneBuilder().name("nether.stone.redgranite.small") .disabledByDefault() - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(8) .dimension(-1) .size(100) @@ -78,7 +78,7 @@ public enum GTStones { NetherRedgraniteMedium(new StoneBuilder().name("nether.stone.redgranite.medium") .disabledByDefault() - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(8) .dimension(-1) .size(200) @@ -88,7 +88,7 @@ public enum GTStones { NetherRedgraniteLarge(new StoneBuilder().name("nether.stone.redgranite.large") .disabledByDefault() - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(8) .dimension(-1) .size(300) @@ -98,7 +98,7 @@ public enum GTStones { NetherRedgraniteHuge(new StoneBuilder().name("nether.stone.redgranite.huge") .disabledByDefault() - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(8) .dimension(-1) .size(400) @@ -108,7 +108,7 @@ public enum GTStones { NetherMarbleTiny(new StoneBuilder().name("nether.stone.marble.tiny") .disabledByDefault() - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(0) .dimension(-1) .size(50) @@ -118,7 +118,7 @@ public enum GTStones { NetherMarbleSmall(new StoneBuilder().name("nether.stone.marble.small") .disabledByDefault() - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(0) .dimension(-1) .size(100) @@ -128,7 +128,7 @@ public enum GTStones { NetherMarbleMedium(new StoneBuilder().name("nether.stone.marble.medium") .disabledByDefault() - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(0) .dimension(-1) .size(200) @@ -138,7 +138,7 @@ public enum GTStones { NetherMarbleLarge(new StoneBuilder().name("nether.stone.marble.large") .disabledByDefault() - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(0) .dimension(-1) .size(300) @@ -148,7 +148,7 @@ public enum GTStones { NetherMarbleHuge(new StoneBuilder().name("nether.stone.marble.huge") .disabledByDefault() - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(0) .dimension(-1) .size(400) @@ -158,7 +158,7 @@ public enum GTStones { NetherBasaltTiny(new StoneBuilder().name("nether.stone.basalt.tiny") .disabledByDefault() - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(8) .dimension(-1) .size(50) @@ -168,7 +168,7 @@ public enum GTStones { NetherBasaltSmall(new StoneBuilder().name("nether.stone.basalt.small") .disabledByDefault() - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(8) .dimension(-1) .size(100) @@ -178,7 +178,7 @@ public enum GTStones { NetherBasaltMedium(new StoneBuilder().name("nether.stone.basalt.medium") .disabledByDefault() - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(8) .dimension(-1) .size(200) @@ -188,7 +188,7 @@ public enum GTStones { NetherBasaltLarge(new StoneBuilder().name("nether.stone.basalt.large") .disabledByDefault() - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(8) .dimension(-1) .size(300) @@ -198,7 +198,7 @@ public enum GTStones { NetherBasaltHuge(new StoneBuilder().name("nether.stone.basalt.huge") .disabledByDefault() - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(8) .dimension(-1) .size(400) @@ -206,7 +206,7 @@ public enum GTStones { .heightRange(0, 120) .generationInVoidEnabled(false)), OverworldBlackgraniteTiny(new StoneBuilder().name("overworld.stone.blackgranite.tiny") - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(0) .dimension(0) .size(75) @@ -215,7 +215,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldBlackgraniteSmall(new StoneBuilder().name("overworld.stone.blackgranite.small") - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(0) .dimension(0) .size(100) @@ -224,7 +224,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldBlackgraniteMedium(new StoneBuilder().name("overworld.stone.blackgranite.medium") - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(0) .dimension(0) .size(200) @@ -233,7 +233,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldBlackgraniteLarge(new StoneBuilder().name("overworld.stone.blackgranite.large") - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(0) .dimension(0) .size(300) @@ -242,7 +242,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldBlackgraniteHuge(new StoneBuilder().name("overworld.stone.blackgranite.huge") - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(0) .dimension(0) .size(400) @@ -251,7 +251,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldRedgraniteTiny(new StoneBuilder().name("overworld.stone.redgranite.tiny") - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(8) .dimension(0) .size(75) @@ -260,7 +260,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldRedgraniteSmall(new StoneBuilder().name("overworld.stone.redgranite.small") - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(8) .dimension(0) .size(100) @@ -269,7 +269,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldRedgraniteMedium(new StoneBuilder().name("overworld.stone.redgranite.medium") - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(8) .dimension(0) .size(200) @@ -278,7 +278,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldRedgraniteLarge(new StoneBuilder().name("overworld.stone.redgranite.large") - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(8) .dimension(0) .size(300) @@ -287,7 +287,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldRedgraniteHuge(new StoneBuilder().name("overworld.stone.redgranite.huge") - .block(GregTech_API.sBlockGranites) + .block(GregTechAPI.sBlockGranites) .blockMeta(8) .dimension(0) .size(400) @@ -296,7 +296,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldMarbleTiny(new StoneBuilder().name("overworld.stone.marble.tiny") - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(0) .dimension(0) .size(75) @@ -305,7 +305,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldMarbleSmall(new StoneBuilder().name("overworld.stone.marble.small") - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(0) .dimension(0) .size(100) @@ -314,7 +314,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldMarbleMedium(new StoneBuilder().name("overworld.stone.marble.medium") - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(0) .dimension(0) .size(200) @@ -323,7 +323,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldMarbleLarge(new StoneBuilder().name("overworld.stone.marble.large") - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(0) .dimension(0) .size(300) @@ -332,7 +332,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldMarbleHuge(new StoneBuilder().name("overworld.stone.marble.huge") - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(0) .dimension(0) .size(400) @@ -341,7 +341,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldBasaltTiny(new StoneBuilder().name("overworld.stone.basalt.tiny") - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(8) .dimension(0) .size(75) @@ -350,7 +350,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldBasaltSmall(new StoneBuilder().name("overworld.stone.basalt.small") - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(8) .dimension(0) .size(100) @@ -359,7 +359,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldBasaltMedium(new StoneBuilder().name("overworld.stone.basalt.medium") - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(8) .dimension(0) .size(200) @@ -368,7 +368,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldBasaltLarge(new StoneBuilder().name("overworld.stone.basalt.large") - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(8) .dimension(0) .size(300) @@ -377,7 +377,7 @@ public enum GTStones { .generationInVoidEnabled(false)), OverworldBasaltHuge(new StoneBuilder().name("overworld.stone.basalt.huge") - .block(GregTech_API.sBlockStones) + .block(GregTechAPI.sBlockStones) .blockMeta(8) .dimension(0) .size(400) @@ -391,8 +391,8 @@ public enum GTStones { this.stone = stone; } - public GT_Worldgen_Stone addGTStone() { - return new GT_Worldgen_Stone(this.stone); + public WorldgenStone addGTStone() { + return new WorldgenStone(this.stone); } } diff --git a/src/main/java/gregtech/api/enums/GTValues.java b/src/main/java/gregtech/api/enums/GTValues.java new file mode 100644 index 0000000000..eaca14b3ee --- /dev/null +++ b/src/main/java/gregtech/api/enums/GTValues.java @@ -0,0 +1,721 @@ +package gregtech.api.enums; + +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.AQUA; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.BOLD; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_AQUA; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.OBFUSCATED; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.RESET; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.animatedText; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.chain; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.text; +import static gregtech.api.enums.Mods.GregTech; +import static gregtech.api.enums.Mods.IndustrialCraft2; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.function.Supplier; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidTank; +import net.minecraftforge.oredict.OreDictionary; + +import gregtech.api.fluid.GTFluidTank; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.internal.IGTMod; +import gregtech.api.interfaces.internal.IGTRecipeAdder; +import gregtech.api.net.IGT_NetworkHandler; +import gregtech.api.util.GTChunkAssociatedData; + +/** + * Made for static imports, this Class is just a Helper. + *

+ * I am doing this to have a better Table alike view on my Code, so I can change things faster using the Block Selection + * Mode of eclipse. + *

+ * Go to "Window > Preferences > Java > Editor > Content Assist > Favorites" to set static importable Constant Classes + * such as this one as AutoCompleteable. + */ +@SuppressWarnings("unused") // API Legitimately has unused fields and methods +public class GTValues { + // unused: A, C, D, G, H, I, J, K, N, O, Q, R, S, T + + // TODO: Rename Material Units to 'U' + // TODO: Rename OrePrefixes Class to 'P' + // TODO: Rename Materials Class to 'M' + + /** + * Empty String for an easier Call Hierarchy + */ + public static final String E = ""; + + /** + * The first 32 Bits + */ + @SuppressWarnings("PointlessBitwiseExpression") // Nicer source layout this way + public static final int[] B = new int[] { 1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7, 1 << 8, + 1 << 9, 1 << 10, 1 << 11, 1 << 12, 1 << 13, 1 << 14, 1 << 15, 1 << 16, 1 << 17, 1 << 18, 1 << 19, 1 << 20, + 1 << 21, 1 << 22, 1 << 23, 1 << 24, 1 << 25, 1 << 26, 1 << 27, 1 << 28, 1 << 29, 1 << 30, 1 << 31 }; + + /** + * Renamed from "MATERIAL_UNIT" to just "M" + *

+ * This is worth exactly one normal Item. This Constant can be divided by many commonly used Numbers such as 1, 2, + * 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, ... 64 or 81 without losing precision and is for that + * reason used as Unit of Amount. But it is also small enough to be multiplied with larger Numbers. + *

+ * This is used to determine the amount of Material contained inside a prefixed Ore. For example Nugget = M / 9 as + * it contains out of 1/9 of an Ingot. + */ + public static final long M = 3628800; + + /** + * Renamed from "FLUID_MATERIAL_UNIT" to just "L" + *

+ * Fluid per Material Unit (Prime Factors: 3 * 3 * 2 * 2 * 2 * 2) + */ + public static final long L = 144; + + /** + * The Item WildCard Tag. Even shorter than the "-1" of the past + */ + public static final short W = OreDictionary.WILDCARD_VALUE; + + /** + * The Voltage Tiers. Use this Array instead of the old named Voltage Variables + */ + public static final long[] V = new long[] { 8L, 32L, 128L, 512L, 2048L, 8192L, 32_768L, 131_072L, 524_288L, + 2_097_152L, 8_388_608L, 33_554_432L, 134_217_728L, 536_870_912L, Integer.MAX_VALUE - 7, + // Error tier to prevent out of bounds errors. Not really a real tier (for now). + 8_589_934_592L }; + + /** + * The Voltage Practical. These are recipe voltage you should use if you expect the recipe to use a full amp of that + * tier. These leave a bit of headroom for cable and transformer losses, but not enough to make it a great gain. + */ + // this will correctly map ULV to 7. + public static final long[] VP = Arrays.stream(V) + .map( + i -> BigInteger.valueOf(i) + .multiply(BigInteger.valueOf(30)) + .divide(BigInteger.valueOf(32)) + .longValueExact()) + .toArray(); + // TODO:Adding that in coremod!!! + // TODO:tier 14,15 wires and transformers only (not even cables !!!) + // TODO:tier 12,13 the above + batteries, battery buffers, (maybe cables,12 also works for machines) + // TODO:tier 10,11 the above + chargers and other machines, (cables would be nice) + // TODO:tier 9 machines and batteries + + // TODO:AND ALL THE MATERIALS... for that + // TODO:LIST OF MACHINES WITH POINTLESS TIERS (unless you implement some other tiering mechanism like reducing eu + // cost if time=1tick) + // Macerator/Compressor/Furnace... and for cheap recipes any + + /** + * Array of Maximum Amperes at given Tier index + *

+ * keeping Voltage*Amps < Integer.MAX_VALUE-7 for machines (and tier logic 4x EUt 2/ time) + *

+ *

+ * AMV[4]= max amps at tier 4 + *

+ */ + public static final long[] AatV = new long[] { 268435455, 67108863, 16777215, 4194303, 1048575, 262143, 65535, + 16383, 4095, 1023, 255, 63, 15, 3, 1, 1 }; + /** + * The short Names for the Voltages + */ + public static final String[] VN = new String[] { "ULV", // 0 + "LV", // 1 + "MV", // 2 + "HV", // 3 + "EV", // 4 + "IV", // 5 + "LuV", // 6 + "ZPM", // 7 + "UV", // 8 + "UHV", // 9 + "UEV", // 10 + "UIV", // 11 + "UMV", // 12 + "UXV", // 13 + "MAX", // 14 + "MAX+" // 15 + }; + + /** + * The long Names for the Voltages + */ + public static final String[] VOLTAGE_NAMES = new String[] { "Ultra Low Voltage", // 0 + "Low Voltage", // 1 + "Medium Voltage", // 2 + "High Voltage", // 3 + "Extreme Voltage", // 4 + "Insane Voltage", // 5 + "Ludicrous Voltage", // 6 + "ZPM Voltage", // 7 + "Ultimate Voltage", // 8 + "Ultimate High Voltage", // 9 + "Ultimate Extreme Voltage", // 10 + "Ultimate Insane Voltage", // 11 + "Ultimate Mega Voltage", // 12 + "Ultimate Extended Mega Voltage", // 13 + "Maximum Voltage", // 14 + "Error Voltage, report this" // 15 + }; + + public static final String[] TIER_COLORS = new String[] { EnumChatFormatting.RED.toString(), // ULV, 0 + EnumChatFormatting.GRAY.toString(), // LV, 1 + EnumChatFormatting.GOLD.toString(), // MV, 2 + EnumChatFormatting.YELLOW.toString(), // HV, 3 + EnumChatFormatting.DARK_GRAY.toString(), // EV, 4 + EnumChatFormatting.GREEN.toString(), // IV, 5 + EnumChatFormatting.LIGHT_PURPLE.toString(), // LuV, 6 + EnumChatFormatting.AQUA.toString(), // ZPM, 7 + EnumChatFormatting.DARK_GREEN.toString(), // UV, 8 + EnumChatFormatting.DARK_RED.toString(), // UHV, 9 + EnumChatFormatting.DARK_PURPLE.toString(), // UEV, 10 + EnumChatFormatting.DARK_BLUE.toString() + EnumChatFormatting.BOLD, // UIV, 11 + EnumChatFormatting.RED.toString() + EnumChatFormatting.BOLD + EnumChatFormatting.UNDERLINE, // UMV, 12 + EnumChatFormatting.DARK_RED.toString() + EnumChatFormatting.BOLD + EnumChatFormatting.UNDERLINE, // UXV, 13 + EnumChatFormatting.WHITE.toString() + EnumChatFormatting.BOLD + EnumChatFormatting.UNDERLINE, // MAX, 14 + EnumChatFormatting.WHITE.toString() + EnumChatFormatting.BOLD + + EnumChatFormatting.UNDERLINE + + EnumChatFormatting.ITALIC, // MAX+, 15 + }; + + /** + * This way it is possible to have a Call Hierarchy of NullPointers in ItemStack based Functions, and also because + * most of the time I don't know what kind of Data Type the "null" stands for + */ + public static final ItemStack NI = null; + /** + * This way it is possible to have a Call Hierarchy of NullPointers in FluidStack based Functions, and also because + * most of the time I don't know what kind of Data Type the "null" stands for + */ + public static final FluidStack NF = null; + + /** + * File Paths and Resource Paths + */ + @Deprecated + public static final String TEX_DIR = "textures/"; + @Deprecated + public static final String RES_PATH = GregTech.getResourcePath(TEX_DIR); + @Deprecated + public static final String RES_PATH_GUI = GregTech.getResourcePath("textures", "gui/"); + @Deprecated + public static final String RES_PATH_ITEM = GregTech.getResourcePath(); + @Deprecated + public static final String RES_PATH_BLOCK = GregTech.getResourcePath(); + @Deprecated + public static final String RES_PATH_ENTITY = GregTech.getResourcePath("textures", "entity/"); + @Deprecated + public static final String RES_PATH_ASPECTS = GregTech.getResourcePath("textures", "aspects/"); + @Deprecated + public static final String RES_PATH_MODEL = GregTech.getResourcePath("textures", "models/"); + @Deprecated + public static final String RES_PATH_IC2 = IndustrialCraft2.getResourcePath(); + + /** + * NBT String Keys + */ + public static final class NBT { + + public static final String COLOR = "gt.color", // Integer + COVERS = "gt.covers", // String + CUSTOM_NAME = "name", // String + DISPLAY = "gt.display", // String + TIER = "gt.tier", // Number + FACING = "gt.facing", // Byte + LOCK_UPGRADE = "gt.locked", // Boolean + MATERIAL = "gt.material", // String containing the Material Name. + MODE = "gt.mode", // Number + ALLOWED_MODES = "gt.amode", // Number + MTE_ID = "gt.mte.id", // Containing the MTE ID + MTE_REG = "gt.mte.reg", // Containing the MTE Registry ID + OWNER = "gt.owner", // String + OWNER_UUID = "gt.ownerUuid", // UUID (String) + + // Machines + ACTIVE = "gt.active", // Boolean + FLUID_OUT = "gt.fluidout", // Output Fluid + ITEM_OUT = "gt.itemout", // Output Item + PARALLEL = "gt.parallel", // Number + TANK_CAPACITY = "gt.tankcap", // Number + TANK_IN = "gt.tank.in.", // FluidStack + TANK_OUT = "gt.tank.out.", // FluidStack + TEXTURE_FOLDER = "gt.texture.folder", // String + INV_INPUT_SIZE = "gt.invsize.in", // Number + INV_OUTPUT_SIZE = "gt.invsize.out", // Number + INV_INPUT_LIST = "gt.invlist.in", // NBT List + INV_OUTPUT_LIST = "gt.invlist.out", // NBT List + VOLTAGE = "gt.voltage", // Number + AMPERAGE = "gt.amperage", // Number + STORED_ENERGY = "gt.stored.energy", // Number + MAXIMUM_ENERGY = "gt.maximum.energy", // Number + EUT_CONSUMPTION = "gt.eut.consumption", // Number + BURN_TIME_LEFT = "gt.burn.time.left", // Number + TOTAL_BURN_TIME = "gt.total.burn.time", // Number + ALLOWED_WORK = "gt.allowed.work", // Boolean + TASKS = "gt.tasks", // Compound + + // MultiBlock + STRUCTURE_OK = "gt.structure.ok", ROTATION = "gt.eRotation", FLIP = "gt.eFlip", TARGET = "gt.target", // Boolean + TARGET_X = "gt.target.x", // Number + TARGET_Y = "gt.target.y", // Number + TARGET_Z = "gt.target.z", // Number + LOCKED_FLUID = "gt.locked.fluid", // String + LOCKED_INVENTORY = "gt.locked.inv", // String + LOCKED_INVENTORY_INDEX = "gt.locked.inv.index", // Number + UPGRADE_INVENTORY_SIZE = "gt.invsize.upg", // String + UPGRADE_INVENTORY_UUID = "gt.invuuid.upg", // String + UPGRADE_INVENTORY_NAME = "gt.invname.upg", // String + UPGRADE_INVENTORIES_INPUT = "gt.invlist.upg.in", // NBT List + UPGRADE_INVENTORIES_OUTPUT = "gt.invlist.upg.out", // NBT List + UPGRADE_TANK_CAPACITY = "gt.tank.cap.upg", // Long + UPGRADE_TANK_COUNT = "gt.tank.ct.upg", // Int + UPGRADE_TANK_CAPACITY_MULTIPLIER = "gt.tank.cap.mult.upg", // Long + UPGRADE_TANK_UUID = "gt.tankuuid.upg", // String + UPGRADE_TANK_NAME = "gt.tankname.upg", // String + UPGRADE_TANKS_INPUT = "gt.tanklist.upg.in", // NBT List + UPGRADE_TANKS_OUTPUT = "gt.tanklist.upg.out", // NBT List + UPGRADE_TANKS_PREFIX = "gt.tank.upg", // NBT Tag + UPGRADE_AMPERAGE = "gt.amp.upg", // Long + SEPARATE_INPUTS = "gt.separate.inputs", // Boolean + VOIDING_MODE = "gt.voiding.mode", // String + BATCH_MODE = "gt.batch.mode", // Boolean + RECIPE_LOCK = "gt.recipe.lock", // Boolean + + // Logic + POWER_LOGIC = "gt.pow.logic", // NBT Tag + POWER_LOGIC_STORED_ENERGY = "gt.pow.energy", // Number + POWER_LOGIC_ENERGY_CAPACITY = "gt.pow.energy.cap", // Number + POWER_LOGIC_VOLTAGE = "gt.pow.volt", // Number + POWER_LOGIC_AMPERAGE = "gt.pow.amp", // Number + POWER_LOGIC_TYPE = "gt.pow.type", // Number + empty_ = ""; + } + + /** The Color White as RGB Short Array. */ + public static final short[] UNCOLORED_RGBA = { 255, 255, 255, 255 }; + /** The Color White as simple Integer (0x00ffffff). */ + public static final int UNCOLORED = 0x00ffffff; + + /** + * Sides + */ + public static final byte SIDE_BOTTOM = 0, SIDE_DOWN = 0, SIDE_TOP = 1, SIDE_UP = 1, SIDE_NORTH = 2, // Also a Side + // with a + // stupidly + // mirrored + // Texture + SIDE_SOUTH = 3, SIDE_WEST = 4, SIDE_EAST = 5, // Also a Side with a stupidly mirrored Texture + SIDE_ANY = 6, SIDE_UNKNOWN = 6, SIDE_INVALID = 6, SIDE_INSIDE = 6, SIDE_UNDEFINED = 6; + + /** Compass alike Array for the proper ordering of North, East, South and West. */ + public static final byte[] COMPASS_DIRECTIONS = { SIDE_NORTH, SIDE_EAST, SIDE_SOUTH, SIDE_WEST }; + + /** + * An Array containing all Sides which follow the Condition, in order to iterate over them for example. + */ + public static final byte[] ALL_SIDES = { 0, 1, 2, 3, 4, 5, 6 }, ALL_VALID_SIDES = { 0, 1, 2, 3, 4, 5 }; + + /** + * For Facing Checks. + */ + public static final boolean[] INVALID_SIDES = { false, false, false, false, false, false, true }, + VALID_SIDES = { true, true, true, true, true, true, false }; + + /** + * Side->Offset Mappings. + */ + public static final byte[] OFFX = { 0, 0, 0, 0, -1, +1, 0 }, OFFY = { -1, +1, 0, 0, 0, 0, 0 }, + OFFZ = { 0, 0, -1, +1, 0, 0, 0 }; + + /** + * Side->Opposite Mappings. + **/ + public static final byte[] OPOS = { 1, 0, 3, 2, 5, 4, 6 }; + + /** + * [Facing,Side]->Side Mappings for Blocks, which don't face up- and downwards. 0 = bottom, 1 = top, 2 = left, 3 = + * front, 4 = right, 5 = back, 6 = undefined. + */ + public static final byte[][] FACING_ROTATIONS = { { 0, 1, 2, 3, 4, 5, 6 }, { 0, 1, 2, 3, 4, 5, 6 }, + { 0, 1, 3, 5, 4, 2, 6 }, { 0, 1, 5, 3, 2, 4, 6 }, { 0, 1, 2, 4, 3, 5, 6 }, { 0, 1, 4, 2, 5, 3, 6 }, + { 0, 1, 2, 3, 4, 5, 6 } }; + + /** + * The Mod Object itself. That is the GTMod-Object. It's needed to open GUI's and similar. + */ + public static IGTMod GT; + /** + * Use this Object to add Recipes. (Recipe Adder) + */ + public static IGTRecipeAdder RA; + /** + * For Internal Usage (Network) + */ + public static IGT_NetworkHandler NW; + /** + * Control percentage of filled 3x3 chunks. Lower number means less oreveins spawn + */ + public static int oreveinPercentage; + /** + * Control number of attempts to find a valid orevein. Generally this maximum limit isn't hit, selecting a vein is + * cheap + */ + public static int oreveinAttempts; + /** + * Control number of attempts to place a valid ore vein. + *

+ * If a vein wasn't placed due to height restrictions, completely in the water, etc, another attempt is tried. + *

+ */ + public static int oreveinMaxPlacementAttempts; + /** + * Whether to place small ores as placer ores for an orevein + */ + public static boolean oreveinPlacerOres; + /** + * Multiplier to control how many placer ores get generated. + */ + public static int oreveinPlacerOresMultiplier; + /** + * Not really Constants, but they set using the Config and therefore should be constant (those are for the Debug + * Mode) + */ + public static boolean D1 = false, D2 = false; + /** + * Debug parameter for cleanroom testing. + */ + public static boolean debugCleanroom = false; + /** + * Debug parameter for driller testing. + */ + public static boolean debugDriller = false; + /** + * Debug parameter for world generation. Tracks chunks added/removed from run queue. + */ + public static boolean debugWorldGen = false; + /** + * Debug parameter for orevein generation. + */ + public static boolean debugOrevein = false; + /** + * Debug parameter for small ore generation. + */ + public static boolean debugSmallOres = false; + /** + * Debug parameter for stones generation. + */ + public static boolean debugStones = false; + /** + * Debug parameter for single block pump + */ + public static boolean debugBlockPump = false; + /** + * Debug parameter for single block miner + */ + public static boolean debugBlockMiner = false; + /** + * Debug parameter for entity cramming reduction + */ + public static boolean debugEntityCramming = false; + /** + * Debug parameter for {@link GTChunkAssociatedData} + */ + public static boolean debugWorldData = false; + /** + * Parameter if multi tile entities (MuTEs) should be enabled in the pack. Turned off by default until + * implementation is done. + */ + public static boolean enableMultiTileEntities = false; + /** + * Number of ticks between sending sound packets to clients for electric machines. Default is 1.5 seconds. Trying to + * mitigate lag and FPS drops. + */ + public static int ticksBetweenSounds = 30; + /** + * If you have to give something a World Parameter but there is no World... (Dummy World) + */ + public static World DW; + + /** + * This will prevent NEI from crashing but spams the Log. + */ + public static boolean allow_broken_recipemap = false; + /** + * This will set the blacklist for the world accelerator in TE mode. + */ + public static String[] blacklistedTileEntiyClassNamesForWA = new String[] { + "com.rwtema.extrautils.tileentity.enderquarry.TileEntityEnderQuarry", + "advsolar.common.tiles.TileEntityUltimateSolarPanel", "advsolar.common.tiles.TileEntitySolarPanel", + "advsolar.common.tiles.TileEntityQuantumSolarPanel", "advsolar.common.tiles.TileEntityHybridSolarPanel", + "advsolar.common.tiles.TileEntityAdvancedSolarPanel", "com.supsolpans.tiles.TileAdminSolarPanel", + "com.supsolpans.tiles.TilePhotonicSolarPanel", "com.supsolpans.tiles.TileSingularSolarPanel", + "com.supsolpans.tiles.TileSpectralSolarPanel", "emt.tile.solar.air.TileEntityAirSolar", + "emt.tile.solar.air.TileEntityDoubleAirSolar", "emt.tile.solar.air.TileEntityTripleAirSolar", + "emt.tile.solar.air.TileEntityQuadrupleAirSolar", "emt.tile.solar.air.TileEntityQuintupleAirSolar", + "emt.tile.solar.air.TileEntitySextupleAirSolar", "emt.tile.solar.air.TileEntitySeptupleAirSolar", + "emt.tile.solar.air.TileEntityOctupleAirSolar", "emt.tile.solar.compressed.TileEntityCompressedSolar", + "emt.tile.solar.compressed.TileEntityDoubleCompressedSolar", + "emt.tile.solar.compressed.TileEntityTripleCompressedSolar", + "emt.tile.solar.compressed.TileEntityQuadrupleAirSolar", + "emt.tile.solar.compressed.TileEntityQuintupleAirSolar", "emt.tile.solar.compressed.TileEntitySextupleAirSolar", + "emt.tile.solar.compressed.TileEntitySeptupleAirSolar", "emt.tile.solar.compressed.TileEntityOctupleAirSolar", + "emt.tile.solar.dark.TileEntityDarkSolar", "emt.tile.solar.dark.TileEntityDoubleDarkSolar", + "emt.tile.solar.dark.TileEntityTripleDarkSolar", "emt.tile.solar.dark.TileEntityQuadrupleAirSolar", + "emt.tile.solar.dark.TileEntityQuintupleAirSolar", "emt.tile.solar.dark.TileEntitySextupleAirSolar", + "emt.tile.solar.dark.TileEntitySeptupleAirSolar", "emt.tile.solar.dark.TileEntityOctupleAirSolar", + "emt.tile.solar.earth.TileEntityDoubleEarthSolar", "emt.tile.solar.earth.TileEntityEarthSolar", + "emt.tile.solar.earth.TileEntityTripleEarthSolar", "emt.tile.solar.earth.TileEntityQuadrupleAirSolar", + "emt.tile.solar.earth.TileEntityQuintupleAirSolar", "emt.tile.solar.earth.TileEntitySextupleAirSolar", + "emt.tile.solar.earth.TileEntitySeptupleAirSolar", "emt.tile.solar.earth.TileEntityOctupleAirSolar", + "emt.tile.solar.fire.TileEntityDoubleFireSolar", "emt.tile.solar.fire.TileEntityFireSolar", + "emt.tile.solar.fire.TileEntityTripleFireSolar", "emt.tile.solar.fire.TileEntityQuadrupleAirSolar", + "emt.tile.solar.fire.TileEntityQuintupleAirSolar", "emt.tile.solar.fire.TileEntitySextupleAirSolar", + "emt.tile.solar.fire.TileEntitySeptupleAirSolar", "emt.tile.solar.fire.TileEntityOctupleAirSolar", + "emt.tile.solar.order.TileEntityDoubleOrderSolar", "emt.tile.solar.order.TileEntityOrderSolar", + "emt.tile.solar.order.TileEntityTripleOrderSolar", "emt.tile.solar.order.TileEntityQuadrupleAirSolar", + "emt.tile.solar.order.TileEntityQuintupleAirSolar", "emt.tile.solar.order.TileEntitySextupleAirSolar", + "emt.tile.solar.order.TileEntitySeptupleAirSolar", "emt.tile.solar.order.TileEntityOctupleAirSolar", + "emt.tile.solar.water.TileEntityDoubleWaterSolar", "emt.tile.solar.water.TileEntityTripleWaterSolar", + "emt.tile.solar.water.TileEntityWaterSolar", "emt.tile.solar.water.TileEntityQuadrupleAirSolar", + "emt.tile.solar.water.TileEntityQuintupleAirSolar", "emt.tile.solar.water.TileEntitySextupleAirSolar", + "emt.tile.solar.water.TileEntitySeptupleAirSolar", "emt.tile.solar.water.TileEntityOctupleAirSolar", + "com.lulan.compactkineticgenerators.tileentity.TileCkgE", + "com.lulan.compactkineticgenerators.tileentity.TileCkgH", + "com.lulan.compactkineticgenerators.tileentity.TileCkgL", + "com.lulan.compactkineticgenerators.tileentity.TileCkgM", + "com.lulan.compactkineticgenerators.tileentity.TileCkwaE", + "com.lulan.compactkineticgenerators.tileentity.TileCkwaH", + "com.lulan.compactkineticgenerators.tileentity.TileCkwaL", + "com.lulan.compactkineticgenerators.tileentity.TileCkwaM", + "com.lulan.compactkineticgenerators.tileentity.TileCkwmE", + "com.lulan.compactkineticgenerators.tileentity.TileCkwmH", + "com.lulan.compactkineticgenerators.tileentity.TileCkwmL", + "com.lulan.compactkineticgenerators.tileentity.TileCkwmM", "com.supsolpans.tiles.TileSpectralSolarPanel", + "com.supsolpans.tiles.TileSingularSolarPanel", "com.supsolpans.tiles.TileAdminSolarPanel", + "com.supsolpans.tiles.TilePhotonicSolarPanel", "gtPlusPlus.core.tileentities.general.TileEntityFishTrap", + "gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest", + "net.bdew.gendustry.machines.apiary.TileApiary", "goodgenerator.blocks.tileEntity.EssentiaHatch", + "magicbees.tileentity.TileEntityApimancersDrainerCommon", + "magicbees.tileentity.TileEntityApimancersDrainerGT" }; + /** + * This will set the percentage how much ReinforcedGlass is Allowed in Cleanroom Walls. + */ + public static float cleanroomGlass = 5.0f; + /** + * This will let machines such as drills and pumps chunkload their work area. + */ + public static boolean enableChunkloaders = true; + /** + * This will make all chunkloading machines act as World Anchors (true) or Passive Anchors (false) + */ + public static boolean alwaysReloadChunkloaders = false; + + public static boolean debugChunkloaders = false; + public static boolean cls_enabled; + public static final Set mCTMEnabledBlock = new HashSet<>(); + public static final Set mCTMDisabledBlock = new HashSet<>(); + + public static final int STEAM_PER_WATER = 160; + /** + * If true, then digital chest with AE2 storage bus will be accessible only through AE2 + */ + public static boolean disableDigitalChestsExternalAccess = false; + + public static boolean lateConfigSave = true; + public static boolean worldTickHappened = false; + + public static final int[] emptyIntArray = new int[0]; + + public static final IFluidTank[] emptyFluidTank = new IFluidTank[0]; + public static final GTFluidTank[] emptyFluidTankGT = new GTFluidTank[0]; + public static final FluidTankInfo[] emptyFluidTankInfo = new FluidTankInfo[0]; + public static final FluidStack[] emptyFluidStack = new FluidStack[0]; + public static final ItemStack[] emptyItemStackArray = new ItemStack[0]; + public static final IIconContainer[] emptyIconContainerArray = new IIconContainer[3]; + + /** + * Pretty formatting for author names. + */ + public static final String Colen = "" + EnumChatFormatting.DARK_RED + + EnumChatFormatting.BOLD + + EnumChatFormatting.ITALIC + + EnumChatFormatting.UNDERLINE + + "C" + + EnumChatFormatting.GOLD + + EnumChatFormatting.BOLD + + EnumChatFormatting.ITALIC + + EnumChatFormatting.UNDERLINE + + "o" + + EnumChatFormatting.GREEN + + EnumChatFormatting.BOLD + + EnumChatFormatting.ITALIC + + EnumChatFormatting.UNDERLINE + + "l" + + EnumChatFormatting.DARK_AQUA + + EnumChatFormatting.BOLD + + EnumChatFormatting.ITALIC + + EnumChatFormatting.UNDERLINE + + "e" + + EnumChatFormatting.DARK_PURPLE + + EnumChatFormatting.BOLD + + EnumChatFormatting.ITALIC + + EnumChatFormatting.UNDERLINE + + "n"; + + public static final String AuthorColen = "Author: " + Colen; + public static final String AuthorKuba = "Author: " + EnumChatFormatting.DARK_RED + + EnumChatFormatting.BOLD + + "k" + + EnumChatFormatting.RED + + EnumChatFormatting.BOLD + + "u" + + EnumChatFormatting.GOLD + + EnumChatFormatting.BOLD + + "b" + + EnumChatFormatting.YELLOW + + EnumChatFormatting.BOLD + + "a" + + EnumChatFormatting.DARK_GREEN + + EnumChatFormatting.BOLD + + "6" + + EnumChatFormatting.GREEN + + EnumChatFormatting.BOLD + + "0" + + EnumChatFormatting.AQUA + + EnumChatFormatting.BOLD + + "0" + + EnumChatFormatting.DARK_AQUA + + EnumChatFormatting.BOLD + + "0"; + + public static final String AuthorBlueWeabo = "Author: " + EnumChatFormatting.BLUE + + EnumChatFormatting.BOLD + + "Blue" + + EnumChatFormatting.AQUA + + EnumChatFormatting.BOLD + + "Weabo"; + + public static final String Authorminecraft7771 = "Author: " + EnumChatFormatting.BLUE + + EnumChatFormatting.LIGHT_PURPLE + + "minecraft7771"; + + public static final Supplier AuthorCloud = chain( + text("Author: " + EnumChatFormatting.AQUA + EnumChatFormatting.BOLD), + animatedText( + "C", + 1, + 500, + DARK_AQUA + OBFUSCATED + BOLD + "X" + RESET + AQUA + BOLD, + DARK_AQUA + "\u238B" + RESET + AQUA + BOLD, + DARK_AQUA + OBFUSCATED + BOLD + "X" + RESET + AQUA + BOLD, + DARK_AQUA + "\u0B83" + RESET + AQUA + BOLD, + DARK_AQUA + OBFUSCATED + BOLD + "X" + RESET + AQUA + BOLD, + DARK_AQUA + BOLD + "\u29BC" + RESET + AQUA + BOLD), + text(EnumChatFormatting.AQUA + EnumChatFormatting.BOLD.toString() + "loud" + EnumChatFormatting.RESET), + animatedText( + " ", + 1, + 500, + DARK_AQUA + OBFUSCATED + BOLD + "X", + DARK_AQUA + "\u238B", + DARK_AQUA + OBFUSCATED + BOLD + "X", + DARK_AQUA + "\u0B83", + DARK_AQUA + OBFUSCATED + BOLD + "X", + DARK_AQUA + BOLD + "\u29BC")); + + public static final String AuthorQuerns = "Author: " + EnumChatFormatting.RED + "Querns"; + public static final String AuthorSilverMoon = "Author: " + EnumChatFormatting.AQUA + "SilverMoon"; + public static final String AuthorTheEpicGamer274 = "Author: " + "TheEpicGamer274"; + public static final String AuthorFourIsTheNumber = "Author: " + EnumChatFormatting.LIGHT_PURPLE + + EnumChatFormatting.ITALIC + + "Four" + + EnumChatFormatting.WHITE + + EnumChatFormatting.ITALIC + + "Is" + + EnumChatFormatting.LIGHT_PURPLE + + EnumChatFormatting.ITALIC + + "The" + + EnumChatFormatting.WHITE + + EnumChatFormatting.ITALIC + + "Number"; + public static final String Ollie = "" + EnumChatFormatting.GREEN + EnumChatFormatting.BOLD + "Ollie"; + public static final String authorBaps = "Author: " + EnumChatFormatting.GOLD + + "Ba" + + EnumChatFormatting.LIGHT_PURPLE + + "ps"; + + public static final String AuthorEvgenWarGold = "" + EnumChatFormatting.RED + + EnumChatFormatting.BOLD + + "Evgen" + + EnumChatFormatting.BLUE + + EnumChatFormatting.BOLD + + "War" + + EnumChatFormatting.GOLD + + EnumChatFormatting.BOLD + + "Gold"; + public static final String AuthorVolence = "Author: " + EnumChatFormatting.AQUA + "Volence"; + + public static final String AuthorEigenRaven = "Author: " + EnumChatFormatting.DARK_PURPLE + + "Eigen" + + EnumChatFormatting.BOLD + + "Raven"; + + public static final String AuthorNotAPenguin = "Author: " + EnumChatFormatting.WHITE + + EnumChatFormatting.BOLD + + "Not" + + EnumChatFormatting.AQUA + + EnumChatFormatting.BOLD + + "APenguin"; + + // 7.5F comes from GT_Tool_Turbine_Large#getBaseDamage() given huge turbines are the most efficient now. + public static double getMaxPlasmaTurbineEfficiencyFromMaterial(Materials material) { + return (5F + (7.5F + material.mToolQuality)) / 10.0; + } + + // Called once in GT_Client on world load, has to be called late so that Materials is populated. + public static void calculateMaxPlasmaTurbineEfficiency() { + + ArrayList effArray = new ArrayList<>(); + + // Iteration seems to work but need to check turbine as all items appear null. + for (Materials material : Materials.values()) { + effArray.add(getMaxPlasmaTurbineEfficiencyFromMaterial(material)); + } + + maxPlasmaTurbineEfficiency = Collections.max(effArray); + } + + private static double maxPlasmaTurbineEfficiency; + + public static double getMaxPlasmaTurbineEfficiency() { + return maxPlasmaTurbineEfficiency; + } + + private static final long[] EXPLOSION_LOOKUP_V = new long[] { V[0], V[1], V[2], V[3], V[4], V[4] * 2, V[5], V[6], + V[7], V[8], V[8] * 2, V[9], V[10], V[11], V[12], V[12] * 2, V[13], V[14], V[15] }; + private static final float[] EXPLOSION_LOOKUP_POWER = new float[] { 1.0F, 2.0F, 3.0F, 4.0F, 5.0F, 6.0F, 7.0F, 8.0F, + 9.0F, 10.0F, 11.0F, 12.0F, 13.0F, 14.0F, 15.0F, 16.0F, 17.0F, 18.0F, 19.0F, 20.0F }; + + public static float getExplosionPowerForVoltage(long voltage) { + for (int i = 0; i < EXPLOSION_LOOKUP_V.length; i++) { + if (voltage < EXPLOSION_LOOKUP_V[i]) { + return EXPLOSION_LOOKUP_POWER[i]; + } + } + return EXPLOSION_LOOKUP_POWER[EXPLOSION_LOOKUP_POWER.length - 1]; + } +} diff --git a/src/main/java/gregtech/api/enums/GTVoltageIndex.java b/src/main/java/gregtech/api/enums/GTVoltageIndex.java deleted file mode 100644 index c5c2c215b0..0000000000 --- a/src/main/java/gregtech/api/enums/GTVoltageIndex.java +++ /dev/null @@ -1,22 +0,0 @@ -package gregtech.api.enums; - -public class GTVoltageIndex { - - public final static int ULV = 0; - public final static int LV = 1; - public final static int MV = 2; - public final static int HV = 3; - public final static int EV = 4; - public final static int IV = 5; - public final static int LuV = 6; - public final static int ZPM = 7; - public final static int UV = 8; - public final static int UHV = 9; - public final static int UEV = 10; - public final static int UIV = 11; - public final static int UMV = 12; - public final static int UXV = 13; - public final static int MAX = 14; - - private GTVoltageIndex() {} -} diff --git a/src/main/java/gregtech/api/enums/GT_HatchElement.java b/src/main/java/gregtech/api/enums/GT_HatchElement.java deleted file mode 100644 index 3a21d5a2eb..0000000000 --- a/src/main/java/gregtech/api/enums/GT_HatchElement.java +++ /dev/null @@ -1,112 +0,0 @@ -package gregtech.api.enums; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.util.GT_ExoticEnergyInputHelper; -import gregtech.api.util.IGT_HatchAdder; - -public enum GT_HatchElement implements IHatchElement { - - Muffler(GT_MetaTileEntity_MultiBlockBase::addMufflerToMachineList, GT_MetaTileEntity_Hatch_Muffler.class) { - - @Override - public long count(GT_MetaTileEntity_MultiBlockBase t) { - return t.mMufflerHatches.size(); - } - }, - Maintenance(GT_MetaTileEntity_MultiBlockBase::addMaintenanceToMachineList, - GT_MetaTileEntity_Hatch_Maintenance.class) { - - @Override - public long count(GT_MetaTileEntity_MultiBlockBase t) { - return t.mMaintenanceHatches.size(); - } - }, - InputHatch(GT_MetaTileEntity_MultiBlockBase::addInputHatchToMachineList, GT_MetaTileEntity_Hatch_Input.class) { - - @Override - public long count(GT_MetaTileEntity_MultiBlockBase t) { - return t.mInputHatches.size(); - } - }, - InputBus(GT_MetaTileEntity_MultiBlockBase::addInputBusToMachineList, GT_MetaTileEntity_Hatch_InputBus.class) { - - @Override - public long count(GT_MetaTileEntity_MultiBlockBase t) { - return t.mInputBusses.size(); - } - }, - OutputHatch(GT_MetaTileEntity_MultiBlockBase::addOutputHatchToMachineList, GT_MetaTileEntity_Hatch_Output.class) { - - @Override - public long count(GT_MetaTileEntity_MultiBlockBase t) { - return t.mOutputHatches.size(); - } - }, - OutputBus(GT_MetaTileEntity_MultiBlockBase::addOutputBusToMachineList, GT_MetaTileEntity_Hatch_OutputBus.class) { - - @Override - public long count(GT_MetaTileEntity_MultiBlockBase t) { - return t.mOutputBusses.size(); - } - }, - Energy(GT_MetaTileEntity_MultiBlockBase::addEnergyInputToMachineList, GT_MetaTileEntity_Hatch_Energy.class) { - - @Override - public long count(GT_MetaTileEntity_MultiBlockBase t) { - return t.mEnergyHatches.size(); - } - }, - Dynamo(GT_MetaTileEntity_MultiBlockBase::addDynamoToMachineList, GT_MetaTileEntity_Hatch_Dynamo.class) { - - @Override - public long count(GT_MetaTileEntity_MultiBlockBase t) { - return t.mDynamoHatches.size(); - } - }, - ExoticEnergy(GT_MetaTileEntity_MultiBlockBase::addExoticEnergyInputToMachineList) { - - @Override - public List> mteClasses() { - return GT_ExoticEnergyInputHelper.getAllClasses(); - } - - @Override - public long count(GT_MetaTileEntity_MultiBlockBase t) { - return t.getExoticEnergyHatches() - .size(); - } - },; - - private final List> mteClasses; - private final IGT_HatchAdder adder; - - @SafeVarargs - GT_HatchElement(IGT_HatchAdder adder, - Class... mteClasses) { - this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); - this.adder = adder; - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - public IGT_HatchAdder adder() { - return adder; - } -} diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java deleted file mode 100644 index 88972e45fc..0000000000 --- a/src/main/java/gregtech/api/enums/GT_Values.java +++ /dev/null @@ -1,720 +0,0 @@ -package gregtech.api.enums; - -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.AQUA; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.BOLD; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_AQUA; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.OBFUSCATED; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.RESET; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.animatedText; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.chain; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.text; -import static gregtech.api.enums.Mods.GregTech; -import static gregtech.api.enums.Mods.IndustrialCraft2; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import java.util.function.Supplier; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidTank; -import net.minecraftforge.oredict.OreDictionary; - -import gregtech.api.fluid.FluidTankGT; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.internal.IGT_Mod; -import gregtech.api.interfaces.internal.IGT_RecipeAdder; -import gregtech.api.net.IGT_NetworkHandler; - -/** - * Made for static imports, this Class is just a Helper. - *

- * I am doing this to have a better Table alike view on my Code, so I can change things faster using the Block Selection - * Mode of eclipse. - *

- * Go to "Window > Preferences > Java > Editor > Content Assist > Favorites" to set static importable Constant Classes - * such as this one as AutoCompleteable. - */ -@SuppressWarnings("unused") // API Legitimately has unused fields and methods -public class GT_Values { - // unused: A, C, D, G, H, I, J, K, N, O, Q, R, S, T - - // TODO: Rename Material Units to 'U' - // TODO: Rename OrePrefixes Class to 'P' - // TODO: Rename Materials Class to 'M' - - /** - * Empty String for an easier Call Hierarchy - */ - public static final String E = ""; - - /** - * The first 32 Bits - */ - @SuppressWarnings("PointlessBitwiseExpression") // Nicer source layout this way - public static final int[] B = new int[] { 1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7, 1 << 8, - 1 << 9, 1 << 10, 1 << 11, 1 << 12, 1 << 13, 1 << 14, 1 << 15, 1 << 16, 1 << 17, 1 << 18, 1 << 19, 1 << 20, - 1 << 21, 1 << 22, 1 << 23, 1 << 24, 1 << 25, 1 << 26, 1 << 27, 1 << 28, 1 << 29, 1 << 30, 1 << 31 }; - - /** - * Renamed from "MATERIAL_UNIT" to just "M" - *

- * This is worth exactly one normal Item. This Constant can be divided by many commonly used Numbers such as 1, 2, - * 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, ... 64 or 81 without losing precision and is for that - * reason used as Unit of Amount. But it is also small enough to be multiplied with larger Numbers. - *

- * This is used to determine the amount of Material contained inside a prefixed Ore. For example Nugget = M / 9 as - * it contains out of 1/9 of an Ingot. - */ - public static final long M = 3628800; - - /** - * Renamed from "FLUID_MATERIAL_UNIT" to just "L" - *

- * Fluid per Material Unit (Prime Factors: 3 * 3 * 2 * 2 * 2 * 2) - */ - public static final long L = 144; - - /** - * The Item WildCard Tag. Even shorter than the "-1" of the past - */ - public static final short W = OreDictionary.WILDCARD_VALUE; - - /** - * The Voltage Tiers. Use this Array instead of the old named Voltage Variables - */ - public static final long[] V = new long[] { 8L, 32L, 128L, 512L, 2048L, 8192L, 32_768L, 131_072L, 524_288L, - 2_097_152L, 8_388_608L, 33_554_432L, 134_217_728L, 536_870_912L, Integer.MAX_VALUE - 7, - // Error tier to prevent out of bounds errors. Not really a real tier (for now). - 8_589_934_592L }; - - /** - * The Voltage Practical. These are recipe voltage you should use if you expect the recipe to use a full amp of that - * tier. These leave a bit of headroom for cable and transformer losses, but not enough to make it a great gain. - */ - // this will correctly map ULV to 7. - public static final long[] VP = Arrays.stream(V) - .map( - i -> BigInteger.valueOf(i) - .multiply(BigInteger.valueOf(30)) - .divide(BigInteger.valueOf(32)) - .longValueExact()) - .toArray(); - // TODO:Adding that in coremod!!! - // TODO:tier 14,15 wires and transformers only (not even cables !!!) - // TODO:tier 12,13 the above + batteries, battery buffers, (maybe cables,12 also works for machines) - // TODO:tier 10,11 the above + chargers and other machines, (cables would be nice) - // TODO:tier 9 machines and batteries - - // TODO:AND ALL THE MATERIALS... for that - // TODO:LIST OF MACHINES WITH POINTLESS TIERS (unless you implement some other tiering mechanism like reducing eu - // cost if time=1tick) - // Macerator/Compressor/Furnace... and for cheap recipes any - - /** - * Array of Maximum Amperes at given Tier index - *

- * keeping Voltage*Amps < Integer.MAX_VALUE-7 for machines (and tier logic 4x EUt 2/ time) - *

- *

- * AMV[4]= max amps at tier 4 - *

- */ - public static final long[] AatV = new long[] { 268435455, 67108863, 16777215, 4194303, 1048575, 262143, 65535, - 16383, 4095, 1023, 255, 63, 15, 3, 1, 1 }; - /** - * The short Names for the Voltages - */ - public static final String[] VN = new String[] { "ULV", // 0 - "LV", // 1 - "MV", // 2 - "HV", // 3 - "EV", // 4 - "IV", // 5 - "LuV", // 6 - "ZPM", // 7 - "UV", // 8 - "UHV", // 9 - "UEV", // 10 - "UIV", // 11 - "UMV", // 12 - "UXV", // 13 - "MAX", // 14 - "MAX+" // 15 - }; - - /** - * The long Names for the Voltages - */ - public static final String[] VOLTAGE_NAMES = new String[] { "Ultra Low Voltage", // 0 - "Low Voltage", // 1 - "Medium Voltage", // 2 - "High Voltage", // 3 - "Extreme Voltage", // 4 - "Insane Voltage", // 5 - "Ludicrous Voltage", // 6 - "ZPM Voltage", // 7 - "Ultimate Voltage", // 8 - "Ultimate High Voltage", // 9 - "Ultimate Extreme Voltage", // 10 - "Ultimate Insane Voltage", // 11 - "Ultimate Mega Voltage", // 12 - "Ultimate Extended Mega Voltage", // 13 - "Maximum Voltage", // 14 - "Error Voltage, report this" // 15 - }; - - public static final String[] TIER_COLORS = new String[] { EnumChatFormatting.RED.toString(), // ULV, 0 - EnumChatFormatting.GRAY.toString(), // LV, 1 - EnumChatFormatting.GOLD.toString(), // MV, 2 - EnumChatFormatting.YELLOW.toString(), // HV, 3 - EnumChatFormatting.DARK_GRAY.toString(), // EV, 4 - EnumChatFormatting.GREEN.toString(), // IV, 5 - EnumChatFormatting.LIGHT_PURPLE.toString(), // LuV, 6 - EnumChatFormatting.AQUA.toString(), // ZPM, 7 - EnumChatFormatting.DARK_GREEN.toString(), // UV, 8 - EnumChatFormatting.DARK_RED.toString(), // UHV, 9 - EnumChatFormatting.DARK_PURPLE.toString(), // UEV, 10 - EnumChatFormatting.DARK_BLUE.toString() + EnumChatFormatting.BOLD, // UIV, 11 - EnumChatFormatting.RED.toString() + EnumChatFormatting.BOLD + EnumChatFormatting.UNDERLINE, // UMV, 12 - EnumChatFormatting.DARK_RED.toString() + EnumChatFormatting.BOLD + EnumChatFormatting.UNDERLINE, // UXV, 13 - EnumChatFormatting.WHITE.toString() + EnumChatFormatting.BOLD + EnumChatFormatting.UNDERLINE, // MAX, 14 - EnumChatFormatting.WHITE.toString() + EnumChatFormatting.BOLD - + EnumChatFormatting.UNDERLINE - + EnumChatFormatting.ITALIC, // MAX+, 15 - }; - - /** - * This way it is possible to have a Call Hierarchy of NullPointers in ItemStack based Functions, and also because - * most of the time I don't know what kind of Data Type the "null" stands for - */ - public static final ItemStack NI = null; - /** - * This way it is possible to have a Call Hierarchy of NullPointers in FluidStack based Functions, and also because - * most of the time I don't know what kind of Data Type the "null" stands for - */ - public static final FluidStack NF = null; - - /** - * File Paths and Resource Paths - */ - @Deprecated - public static final String TEX_DIR = "textures/"; - @Deprecated - public static final String RES_PATH = GregTech.getResourcePath(TEX_DIR); - @Deprecated - public static final String RES_PATH_GUI = GregTech.getResourcePath("textures", "gui/"); - @Deprecated - public static final String RES_PATH_ITEM = GregTech.getResourcePath(); - @Deprecated - public static final String RES_PATH_BLOCK = GregTech.getResourcePath(); - @Deprecated - public static final String RES_PATH_ENTITY = GregTech.getResourcePath("textures", "entity/"); - @Deprecated - public static final String RES_PATH_ASPECTS = GregTech.getResourcePath("textures", "aspects/"); - @Deprecated - public static final String RES_PATH_MODEL = GregTech.getResourcePath("textures", "models/"); - @Deprecated - public static final String RES_PATH_IC2 = IndustrialCraft2.getResourcePath(); - - /** - * NBT String Keys - */ - public static final class NBT { - - public static final String COLOR = "gt.color", // Integer - COVERS = "gt.covers", // String - CUSTOM_NAME = "name", // String - DISPLAY = "gt.display", // String - TIER = "gt.tier", // Number - FACING = "gt.facing", // Byte - LOCK_UPGRADE = "gt.locked", // Boolean - MATERIAL = "gt.material", // String containing the Material Name. - MODE = "gt.mode", // Number - ALLOWED_MODES = "gt.amode", // Number - MTE_ID = "gt.mte.id", // Containing the MTE ID - MTE_REG = "gt.mte.reg", // Containing the MTE Registry ID - OWNER = "gt.owner", // String - OWNER_UUID = "gt.ownerUuid", // UUID (String) - - // Machines - ACTIVE = "gt.active", // Boolean - FLUID_OUT = "gt.fluidout", // Output Fluid - ITEM_OUT = "gt.itemout", // Output Item - PARALLEL = "gt.parallel", // Number - TANK_CAPACITY = "gt.tankcap", // Number - TANK_IN = "gt.tank.in.", // FluidStack - TANK_OUT = "gt.tank.out.", // FluidStack - TEXTURE_FOLDER = "gt.texture.folder", // String - INV_INPUT_SIZE = "gt.invsize.in", // Number - INV_OUTPUT_SIZE = "gt.invsize.out", // Number - INV_INPUT_LIST = "gt.invlist.in", // NBT List - INV_OUTPUT_LIST = "gt.invlist.out", // NBT List - VOLTAGE = "gt.voltage", // Number - AMPERAGE = "gt.amperage", // Number - STORED_ENERGY = "gt.stored.energy", // Number - MAXIMUM_ENERGY = "gt.maximum.energy", // Number - EUT_CONSUMPTION = "gt.eut.consumption", // Number - BURN_TIME_LEFT = "gt.burn.time.left", // Number - TOTAL_BURN_TIME = "gt.total.burn.time", // Number - ALLOWED_WORK = "gt.allowed.work", // Boolean - TASKS = "gt.tasks", // Compound - - // MultiBlock - STRUCTURE_OK = "gt.structure.ok", ROTATION = "gt.eRotation", FLIP = "gt.eFlip", TARGET = "gt.target", // Boolean - TARGET_X = "gt.target.x", // Number - TARGET_Y = "gt.target.y", // Number - TARGET_Z = "gt.target.z", // Number - LOCKED_FLUID = "gt.locked.fluid", // String - LOCKED_INVENTORY = "gt.locked.inv", // String - LOCKED_INVENTORY_INDEX = "gt.locked.inv.index", // Number - UPGRADE_INVENTORY_SIZE = "gt.invsize.upg", // String - UPGRADE_INVENTORY_UUID = "gt.invuuid.upg", // String - UPGRADE_INVENTORY_NAME = "gt.invname.upg", // String - UPGRADE_INVENTORIES_INPUT = "gt.invlist.upg.in", // NBT List - UPGRADE_INVENTORIES_OUTPUT = "gt.invlist.upg.out", // NBT List - UPGRADE_TANK_CAPACITY = "gt.tank.cap.upg", // Long - UPGRADE_TANK_COUNT = "gt.tank.ct.upg", // Int - UPGRADE_TANK_CAPACITY_MULTIPLIER = "gt.tank.cap.mult.upg", // Long - UPGRADE_TANK_UUID = "gt.tankuuid.upg", // String - UPGRADE_TANK_NAME = "gt.tankname.upg", // String - UPGRADE_TANKS_INPUT = "gt.tanklist.upg.in", // NBT List - UPGRADE_TANKS_OUTPUT = "gt.tanklist.upg.out", // NBT List - UPGRADE_TANKS_PREFIX = "gt.tank.upg", // NBT Tag - UPGRADE_AMPERAGE = "gt.amp.upg", // Long - SEPARATE_INPUTS = "gt.separate.inputs", // Boolean - VOIDING_MODE = "gt.voiding.mode", // String - BATCH_MODE = "gt.batch.mode", // Boolean - RECIPE_LOCK = "gt.recipe.lock", // Boolean - - // Logic - POWER_LOGIC = "gt.pow.logic", // NBT Tag - POWER_LOGIC_STORED_ENERGY = "gt.pow.energy", // Number - POWER_LOGIC_ENERGY_CAPACITY = "gt.pow.energy.cap", // Number - POWER_LOGIC_VOLTAGE = "gt.pow.volt", // Number - POWER_LOGIC_AMPERAGE = "gt.pow.amp", // Number - POWER_LOGIC_TYPE = "gt.pow.type", // Number - empty_ = ""; - } - - /** The Color White as RGB Short Array. */ - public static final short[] UNCOLORED_RGBA = { 255, 255, 255, 255 }; - /** The Color White as simple Integer (0x00ffffff). */ - public static final int UNCOLORED = 0x00ffffff; - - /** - * Sides - */ - public static final byte SIDE_BOTTOM = 0, SIDE_DOWN = 0, SIDE_TOP = 1, SIDE_UP = 1, SIDE_NORTH = 2, // Also a Side - // with a - // stupidly - // mirrored - // Texture - SIDE_SOUTH = 3, SIDE_WEST = 4, SIDE_EAST = 5, // Also a Side with a stupidly mirrored Texture - SIDE_ANY = 6, SIDE_UNKNOWN = 6, SIDE_INVALID = 6, SIDE_INSIDE = 6, SIDE_UNDEFINED = 6; - - /** Compass alike Array for the proper ordering of North, East, South and West. */ - public static final byte[] COMPASS_DIRECTIONS = { SIDE_NORTH, SIDE_EAST, SIDE_SOUTH, SIDE_WEST }; - - /** - * An Array containing all Sides which follow the Condition, in order to iterate over them for example. - */ - public static final byte[] ALL_SIDES = { 0, 1, 2, 3, 4, 5, 6 }, ALL_VALID_SIDES = { 0, 1, 2, 3, 4, 5 }; - - /** - * For Facing Checks. - */ - public static final boolean[] INVALID_SIDES = { false, false, false, false, false, false, true }, - VALID_SIDES = { true, true, true, true, true, true, false }; - - /** - * Side->Offset Mappings. - */ - public static final byte[] OFFX = { 0, 0, 0, 0, -1, +1, 0 }, OFFY = { -1, +1, 0, 0, 0, 0, 0 }, - OFFZ = { 0, 0, -1, +1, 0, 0, 0 }; - - /** - * Side->Opposite Mappings. - **/ - public static final byte[] OPOS = { 1, 0, 3, 2, 5, 4, 6 }; - - /** - * [Facing,Side]->Side Mappings for Blocks, which don't face up- and downwards. 0 = bottom, 1 = top, 2 = left, 3 = - * front, 4 = right, 5 = back, 6 = undefined. - */ - public static final byte[][] FACING_ROTATIONS = { { 0, 1, 2, 3, 4, 5, 6 }, { 0, 1, 2, 3, 4, 5, 6 }, - { 0, 1, 3, 5, 4, 2, 6 }, { 0, 1, 5, 3, 2, 4, 6 }, { 0, 1, 2, 4, 3, 5, 6 }, { 0, 1, 4, 2, 5, 3, 6 }, - { 0, 1, 2, 3, 4, 5, 6 } }; - - /** - * The Mod Object itself. That is the GT_Mod-Object. It's needed to open GUI's and similar. - */ - public static IGT_Mod GT; - /** - * Use this Object to add Recipes. (Recipe Adder) - */ - public static IGT_RecipeAdder RA; - /** - * For Internal Usage (Network) - */ - public static IGT_NetworkHandler NW; - /** - * Control percentage of filled 3x3 chunks. Lower number means less oreveins spawn - */ - public static int oreveinPercentage; - /** - * Control number of attempts to find a valid orevein. Generally this maximum limit isn't hit, selecting a vein is - * cheap - */ - public static int oreveinAttempts; - /** - * Control number of attempts to place a valid ore vein. - *

- * If a vein wasn't placed due to height restrictions, completely in the water, etc, another attempt is tried. - *

- */ - public static int oreveinMaxPlacementAttempts; - /** - * Whether to place small ores as placer ores for an orevein - */ - public static boolean oreveinPlacerOres; - /** - * Multiplier to control how many placer ores get generated. - */ - public static int oreveinPlacerOresMultiplier; - /** - * Not really Constants, but they set using the Config and therefore should be constant (those are for the Debug - * Mode) - */ - public static boolean D1 = false, D2 = false; - /** - * Debug parameter for cleanroom testing. - */ - public static boolean debugCleanroom = false; - /** - * Debug parameter for driller testing. - */ - public static boolean debugDriller = false; - /** - * Debug parameter for world generation. Tracks chunks added/removed from run queue. - */ - public static boolean debugWorldGen = false; - /** - * Debug parameter for orevein generation. - */ - public static boolean debugOrevein = false; - /** - * Debug parameter for small ore generation. - */ - public static boolean debugSmallOres = false; - /** - * Debug parameter for stones generation. - */ - public static boolean debugStones = false; - /** - * Debug parameter for single block pump - */ - public static boolean debugBlockPump = false; - /** - * Debug parameter for single block miner - */ - public static boolean debugBlockMiner = false; - /** - * Debug parameter for entity cramming reduction - */ - public static boolean debugEntityCramming = false; - /** - * Debug parameter for {@link gregtech.api.util.GT_ChunkAssociatedData} - */ - public static boolean debugWorldData = false; - /** - * Parameter if multi tile entities (MuTEs) should be enabled in the pack. Turned off by default until - * implementation is done. - */ - public static boolean enableMultiTileEntities = false; - /** - * Number of ticks between sending sound packets to clients for electric machines. Default is 1.5 seconds. Trying to - * mitigate lag and FPS drops. - */ - public static int ticksBetweenSounds = 30; - /** - * If you have to give something a World Parameter but there is no World... (Dummy World) - */ - public static World DW; - - /** - * This will prevent NEI from crashing but spams the Log. - */ - public static boolean allow_broken_recipemap = false; - /** - * This will set the blacklist for the world accelerator in TE mode. - */ - public static String[] blacklistedTileEntiyClassNamesForWA = new String[] { - "com.rwtema.extrautils.tileentity.enderquarry.TileEntityEnderQuarry", - "advsolar.common.tiles.TileEntityUltimateSolarPanel", "advsolar.common.tiles.TileEntitySolarPanel", - "advsolar.common.tiles.TileEntityQuantumSolarPanel", "advsolar.common.tiles.TileEntityHybridSolarPanel", - "advsolar.common.tiles.TileEntityAdvancedSolarPanel", "com.supsolpans.tiles.TileAdminSolarPanel", - "com.supsolpans.tiles.TilePhotonicSolarPanel", "com.supsolpans.tiles.TileSingularSolarPanel", - "com.supsolpans.tiles.TileSpectralSolarPanel", "emt.tile.solar.air.TileEntityAirSolar", - "emt.tile.solar.air.TileEntityDoubleAirSolar", "emt.tile.solar.air.TileEntityTripleAirSolar", - "emt.tile.solar.air.TileEntityQuadrupleAirSolar", "emt.tile.solar.air.TileEntityQuintupleAirSolar", - "emt.tile.solar.air.TileEntitySextupleAirSolar", "emt.tile.solar.air.TileEntitySeptupleAirSolar", - "emt.tile.solar.air.TileEntityOctupleAirSolar", "emt.tile.solar.compressed.TileEntityCompressedSolar", - "emt.tile.solar.compressed.TileEntityDoubleCompressedSolar", - "emt.tile.solar.compressed.TileEntityTripleCompressedSolar", - "emt.tile.solar.compressed.TileEntityQuadrupleAirSolar", - "emt.tile.solar.compressed.TileEntityQuintupleAirSolar", "emt.tile.solar.compressed.TileEntitySextupleAirSolar", - "emt.tile.solar.compressed.TileEntitySeptupleAirSolar", "emt.tile.solar.compressed.TileEntityOctupleAirSolar", - "emt.tile.solar.dark.TileEntityDarkSolar", "emt.tile.solar.dark.TileEntityDoubleDarkSolar", - "emt.tile.solar.dark.TileEntityTripleDarkSolar", "emt.tile.solar.dark.TileEntityQuadrupleAirSolar", - "emt.tile.solar.dark.TileEntityQuintupleAirSolar", "emt.tile.solar.dark.TileEntitySextupleAirSolar", - "emt.tile.solar.dark.TileEntitySeptupleAirSolar", "emt.tile.solar.dark.TileEntityOctupleAirSolar", - "emt.tile.solar.earth.TileEntityDoubleEarthSolar", "emt.tile.solar.earth.TileEntityEarthSolar", - "emt.tile.solar.earth.TileEntityTripleEarthSolar", "emt.tile.solar.earth.TileEntityQuadrupleAirSolar", - "emt.tile.solar.earth.TileEntityQuintupleAirSolar", "emt.tile.solar.earth.TileEntitySextupleAirSolar", - "emt.tile.solar.earth.TileEntitySeptupleAirSolar", "emt.tile.solar.earth.TileEntityOctupleAirSolar", - "emt.tile.solar.fire.TileEntityDoubleFireSolar", "emt.tile.solar.fire.TileEntityFireSolar", - "emt.tile.solar.fire.TileEntityTripleFireSolar", "emt.tile.solar.fire.TileEntityQuadrupleAirSolar", - "emt.tile.solar.fire.TileEntityQuintupleAirSolar", "emt.tile.solar.fire.TileEntitySextupleAirSolar", - "emt.tile.solar.fire.TileEntitySeptupleAirSolar", "emt.tile.solar.fire.TileEntityOctupleAirSolar", - "emt.tile.solar.order.TileEntityDoubleOrderSolar", "emt.tile.solar.order.TileEntityOrderSolar", - "emt.tile.solar.order.TileEntityTripleOrderSolar", "emt.tile.solar.order.TileEntityQuadrupleAirSolar", - "emt.tile.solar.order.TileEntityQuintupleAirSolar", "emt.tile.solar.order.TileEntitySextupleAirSolar", - "emt.tile.solar.order.TileEntitySeptupleAirSolar", "emt.tile.solar.order.TileEntityOctupleAirSolar", - "emt.tile.solar.water.TileEntityDoubleWaterSolar", "emt.tile.solar.water.TileEntityTripleWaterSolar", - "emt.tile.solar.water.TileEntityWaterSolar", "emt.tile.solar.water.TileEntityQuadrupleAirSolar", - "emt.tile.solar.water.TileEntityQuintupleAirSolar", "emt.tile.solar.water.TileEntitySextupleAirSolar", - "emt.tile.solar.water.TileEntitySeptupleAirSolar", "emt.tile.solar.water.TileEntityOctupleAirSolar", - "com.lulan.compactkineticgenerators.tileentity.TileCkgE", - "com.lulan.compactkineticgenerators.tileentity.TileCkgH", - "com.lulan.compactkineticgenerators.tileentity.TileCkgL", - "com.lulan.compactkineticgenerators.tileentity.TileCkgM", - "com.lulan.compactkineticgenerators.tileentity.TileCkwaE", - "com.lulan.compactkineticgenerators.tileentity.TileCkwaH", - "com.lulan.compactkineticgenerators.tileentity.TileCkwaL", - "com.lulan.compactkineticgenerators.tileentity.TileCkwaM", - "com.lulan.compactkineticgenerators.tileentity.TileCkwmE", - "com.lulan.compactkineticgenerators.tileentity.TileCkwmH", - "com.lulan.compactkineticgenerators.tileentity.TileCkwmL", - "com.lulan.compactkineticgenerators.tileentity.TileCkwmM", "com.supsolpans.tiles.TileSpectralSolarPanel", - "com.supsolpans.tiles.TileSingularSolarPanel", "com.supsolpans.tiles.TileAdminSolarPanel", - "com.supsolpans.tiles.TilePhotonicSolarPanel", "gtPlusPlus.core.tileentities.general.TileEntityFishTrap", - "gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest", - "net.bdew.gendustry.machines.apiary.TileApiary", "goodgenerator.blocks.tileEntity.EssentiaHatch", - "magicbees.tileentity.TileEntityApimancersDrainerCommon", - "magicbees.tileentity.TileEntityApimancersDrainerGT" }; - /** - * This will set the percentage how much ReinforcedGlass is Allowed in Cleanroom Walls. - */ - public static float cleanroomGlass = 5.0f; - /** - * This will let machines such as drills and pumps chunkload their work area. - */ - public static boolean enableChunkloaders = true; - /** - * This will make all chunkloading machines act as World Anchors (true) or Passive Anchors (false) - */ - public static boolean alwaysReloadChunkloaders = false; - - public static boolean debugChunkloaders = false; - public static boolean cls_enabled; - public static final Set mCTMEnabledBlock = new HashSet<>(); - public static final Set mCTMDisabledBlock = new HashSet<>(); - - public static final int STEAM_PER_WATER = 160; - /** - * If true, then digital chest with AE2 storage bus will be accessible only through AE2 - */ - public static boolean disableDigitalChestsExternalAccess = false; - - public static boolean lateConfigSave = true; - public static boolean worldTickHappened = false; - - public static final int[] emptyIntArray = new int[0]; - - public static final IFluidTank[] emptyFluidTank = new IFluidTank[0]; - public static final FluidTankGT[] emptyFluidTankGT = new FluidTankGT[0]; - public static final FluidTankInfo[] emptyFluidTankInfo = new FluidTankInfo[0]; - public static final FluidStack[] emptyFluidStack = new FluidStack[0]; - public static final ItemStack[] emptyItemStackArray = new ItemStack[0]; - public static final IIconContainer[] emptyIconContainerArray = new IIconContainer[3]; - - /** - * Pretty formatting for author names. - */ - public static final String Colen = "" + EnumChatFormatting.DARK_RED - + EnumChatFormatting.BOLD - + EnumChatFormatting.ITALIC - + EnumChatFormatting.UNDERLINE - + "C" - + EnumChatFormatting.GOLD - + EnumChatFormatting.BOLD - + EnumChatFormatting.ITALIC - + EnumChatFormatting.UNDERLINE - + "o" - + EnumChatFormatting.GREEN - + EnumChatFormatting.BOLD - + EnumChatFormatting.ITALIC - + EnumChatFormatting.UNDERLINE - + "l" - + EnumChatFormatting.DARK_AQUA - + EnumChatFormatting.BOLD - + EnumChatFormatting.ITALIC - + EnumChatFormatting.UNDERLINE - + "e" - + EnumChatFormatting.DARK_PURPLE - + EnumChatFormatting.BOLD - + EnumChatFormatting.ITALIC - + EnumChatFormatting.UNDERLINE - + "n"; - - public static final String AuthorColen = "Author: " + Colen; - public static final String AuthorKuba = "Author: " + EnumChatFormatting.DARK_RED - + EnumChatFormatting.BOLD - + "k" - + EnumChatFormatting.RED - + EnumChatFormatting.BOLD - + "u" - + EnumChatFormatting.GOLD - + EnumChatFormatting.BOLD - + "b" - + EnumChatFormatting.YELLOW - + EnumChatFormatting.BOLD - + "a" - + EnumChatFormatting.DARK_GREEN - + EnumChatFormatting.BOLD - + "6" - + EnumChatFormatting.GREEN - + EnumChatFormatting.BOLD - + "0" - + EnumChatFormatting.AQUA - + EnumChatFormatting.BOLD - + "0" - + EnumChatFormatting.DARK_AQUA - + EnumChatFormatting.BOLD - + "0"; - - public static final String AuthorBlueWeabo = "Author: " + EnumChatFormatting.BLUE - + EnumChatFormatting.BOLD - + "Blue" - + EnumChatFormatting.AQUA - + EnumChatFormatting.BOLD - + "Weabo"; - - public static final String Authorminecraft7771 = "Author: " + EnumChatFormatting.BLUE - + EnumChatFormatting.LIGHT_PURPLE - + "minecraft7771"; - - public static final Supplier AuthorCloud = chain( - text("Author: " + EnumChatFormatting.AQUA + EnumChatFormatting.BOLD), - animatedText( - "C", - 1, - 500, - DARK_AQUA + OBFUSCATED + BOLD + "X" + RESET + AQUA + BOLD, - DARK_AQUA + "\u238B" + RESET + AQUA + BOLD, - DARK_AQUA + OBFUSCATED + BOLD + "X" + RESET + AQUA + BOLD, - DARK_AQUA + "\u0B83" + RESET + AQUA + BOLD, - DARK_AQUA + OBFUSCATED + BOLD + "X" + RESET + AQUA + BOLD, - DARK_AQUA + BOLD + "\u29BC" + RESET + AQUA + BOLD), - text(EnumChatFormatting.AQUA + EnumChatFormatting.BOLD.toString() + "loud" + EnumChatFormatting.RESET), - animatedText( - " ", - 1, - 500, - DARK_AQUA + OBFUSCATED + BOLD + "X", - DARK_AQUA + "\u238B", - DARK_AQUA + OBFUSCATED + BOLD + "X", - DARK_AQUA + "\u0B83", - DARK_AQUA + OBFUSCATED + BOLD + "X", - DARK_AQUA + BOLD + "\u29BC")); - - public static final String AuthorQuerns = "Author: " + EnumChatFormatting.RED + "Querns"; - public static final String AuthorSilverMoon = "Author: " + EnumChatFormatting.AQUA + "SilverMoon"; - public static final String AuthorTheEpicGamer274 = "Author: " + "TheEpicGamer274"; - public static final String AuthorFourIsTheNumber = "Author: " + EnumChatFormatting.LIGHT_PURPLE - + EnumChatFormatting.ITALIC - + "Four" - + EnumChatFormatting.WHITE - + EnumChatFormatting.ITALIC - + "Is" - + EnumChatFormatting.LIGHT_PURPLE - + EnumChatFormatting.ITALIC - + "The" - + EnumChatFormatting.WHITE - + EnumChatFormatting.ITALIC - + "Number"; - public static final String Ollie = "" + EnumChatFormatting.GREEN + EnumChatFormatting.BOLD + "Ollie"; - public static final String authorBaps = "Author: " + EnumChatFormatting.GOLD - + "Ba" - + EnumChatFormatting.LIGHT_PURPLE - + "ps"; - - public static final String AuthorEvgenWarGold = "" + EnumChatFormatting.RED - + EnumChatFormatting.BOLD - + "Evgen" - + EnumChatFormatting.BLUE - + EnumChatFormatting.BOLD - + "War" - + EnumChatFormatting.GOLD - + EnumChatFormatting.BOLD - + "Gold"; - public static final String AuthorVolence = "Author: " + EnumChatFormatting.AQUA + "Volence"; - - public static final String AuthorEigenRaven = "Author: " + EnumChatFormatting.DARK_PURPLE - + "Eigen" - + EnumChatFormatting.BOLD - + "Raven"; - - public static final String AuthorNotAPenguin = "Author: " + EnumChatFormatting.WHITE - + EnumChatFormatting.BOLD - + "Not" - + EnumChatFormatting.AQUA - + EnumChatFormatting.BOLD - + "APenguin"; - - // 7.5F comes from GT_Tool_Turbine_Large#getBaseDamage() given huge turbines are the most efficient now. - public static double getMaxPlasmaTurbineEfficiencyFromMaterial(Materials material) { - return (5F + (7.5F + material.mToolQuality)) / 10.0; - } - - // Called once in GT_Client on world load, has to be called late so that Materials is populated. - public static void calculateMaxPlasmaTurbineEfficiency() { - - ArrayList effArray = new ArrayList<>(); - - // Iteration seems to work but need to check turbine as all items appear null. - for (Materials material : Materials.values()) { - effArray.add(getMaxPlasmaTurbineEfficiencyFromMaterial(material)); - } - - maxPlasmaTurbineEfficiency = Collections.max(effArray); - } - - private static double maxPlasmaTurbineEfficiency; - - public static double getMaxPlasmaTurbineEfficiency() { - return maxPlasmaTurbineEfficiency; - } - - private static final long[] EXPLOSION_LOOKUP_V = new long[] { V[0], V[1], V[2], V[3], V[4], V[4] * 2, V[5], V[6], - V[7], V[8], V[8] * 2, V[9], V[10], V[11], V[12], V[12] * 2, V[13], V[14], V[15] }; - private static final float[] EXPLOSION_LOOKUP_POWER = new float[] { 1.0F, 2.0F, 3.0F, 4.0F, 5.0F, 6.0F, 7.0F, 8.0F, - 9.0F, 10.0F, 11.0F, 12.0F, 13.0F, 14.0F, 15.0F, 16.0F, 17.0F, 18.0F, 19.0F, 20.0F }; - - public static float getExplosionPowerForVoltage(long voltage) { - for (int i = 0; i < EXPLOSION_LOOKUP_V.length; i++) { - if (voltage < EXPLOSION_LOOKUP_V[i]) { - return EXPLOSION_LOOKUP_POWER[i]; - } - } - return EXPLOSION_LOOKUP_POWER[EXPLOSION_LOOKUP_POWER.length - 1]; - } -} diff --git a/src/main/java/gregtech/api/enums/HatchElement.java b/src/main/java/gregtech/api/enums/HatchElement.java new file mode 100644 index 0000000000..ae38d2a2ff --- /dev/null +++ b/src/main/java/gregtech/api/enums/HatchElement.java @@ -0,0 +1,110 @@ +package gregtech.api.enums; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.util.ExoticEnergyInputHelper; +import gregtech.api.util.IGTHatchAdder; + +public enum HatchElement implements IHatchElement { + + Muffler(MTEMultiBlockBase::addMufflerToMachineList, MTEHatchMuffler.class) { + + @Override + public long count(MTEMultiBlockBase t) { + return t.mMufflerHatches.size(); + } + }, + Maintenance(MTEMultiBlockBase::addMaintenanceToMachineList, MTEHatchMaintenance.class) { + + @Override + public long count(MTEMultiBlockBase t) { + return t.mMaintenanceHatches.size(); + } + }, + InputHatch(MTEMultiBlockBase::addInputHatchToMachineList, MTEHatchInput.class) { + + @Override + public long count(MTEMultiBlockBase t) { + return t.mInputHatches.size(); + } + }, + InputBus(MTEMultiBlockBase::addInputBusToMachineList, MTEHatchInputBus.class) { + + @Override + public long count(MTEMultiBlockBase t) { + return t.mInputBusses.size(); + } + }, + OutputHatch(MTEMultiBlockBase::addOutputHatchToMachineList, MTEHatchOutput.class) { + + @Override + public long count(MTEMultiBlockBase t) { + return t.mOutputHatches.size(); + } + }, + OutputBus(MTEMultiBlockBase::addOutputBusToMachineList, MTEHatchOutputBus.class) { + + @Override + public long count(MTEMultiBlockBase t) { + return t.mOutputBusses.size(); + } + }, + Energy(MTEMultiBlockBase::addEnergyInputToMachineList, MTEHatchEnergy.class) { + + @Override + public long count(MTEMultiBlockBase t) { + return t.mEnergyHatches.size(); + } + }, + Dynamo(MTEMultiBlockBase::addDynamoToMachineList, MTEHatchDynamo.class) { + + @Override + public long count(MTEMultiBlockBase t) { + return t.mDynamoHatches.size(); + } + }, + ExoticEnergy(MTEMultiBlockBase::addExoticEnergyInputToMachineList) { + + @Override + public List> mteClasses() { + return ExoticEnergyInputHelper.getAllClasses(); + } + + @Override + public long count(MTEMultiBlockBase t) { + return t.getExoticEnergyHatches() + .size(); + } + },; + + private final List> mteClasses; + private final IGTHatchAdder adder; + + @SafeVarargs + HatchElement(IGTHatchAdder adder, Class... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + this.adder = adder; + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + public IGTHatchAdder adder() { + return adder; + } +} diff --git a/src/main/java/gregtech/api/enums/HeatingCoilLevel.java b/src/main/java/gregtech/api/enums/HeatingCoilLevel.java index f281695d5a..4d770710cc 100644 --- a/src/main/java/gregtech/api/enums/HeatingCoilLevel.java +++ b/src/main/java/gregtech/api/enums/HeatingCoilLevel.java @@ -79,14 +79,14 @@ public enum HeatingCoilLevel { if (heatLevel.getHeat() >= heat) { String name = heatLevel.getName(); if (applyColor) { - name = GT_Values.TIER_COLORS[heatLevel.getTier() + 1] + name; + name = GTValues.TIER_COLORS[heatLevel.getTier() + 1] + name; } return name; } } String name = HeatingCoilLevel.MAX.getName() + "+"; if (applyColor) { - name = GT_Values.TIER_COLORS[HeatingCoilLevel.MAX.getTier() + 1] + name; + name = GTValues.TIER_COLORS[HeatingCoilLevel.MAX.getTier() + 1] + name; } return name; } diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index 74f169681c..dba8f510b9 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -1,7 +1,7 @@ package gregtech.api.enums; -import static gregtech.api.enums.GT_Values.NI; -import static gregtech.api.enums.GT_Values.W; +import static gregtech.api.enums.GTValues.NI; +import static gregtech.api.enums.GTValues.W; import java.util.Locale; @@ -11,11 +11,11 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import gregtech.api.interfaces.IItemContainer; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; /** * Class containing all non-OreDict Items of GregTech. @@ -2615,14 +2615,14 @@ public enum ItemList implements IItemContainer { mHasNotBeenSet = false; if (aItem == null) return this; ItemStack aStack = new ItemStack(aItem, 1, 0); - mStack = GT_Utility.copyAmount(1, aStack); + mStack = GTUtility.copyAmount(1, aStack); return this; } @Override public IItemContainer set(ItemStack aStack) { mHasNotBeenSet = false; - mStack = GT_Utility.copyAmount(1, aStack); + mStack = GTUtility.copyAmount(1, aStack); return this; } @@ -2635,14 +2635,14 @@ public enum ItemList implements IItemContainer { @Override public Item getItem() { sanityCheck(); - if (GT_Utility.isStackInvalid(mStack)) return null; + if (GTUtility.isStackInvalid(mStack)) return null; return mStack.getItem(); } @Override public Block getBlock() { sanityCheck(); - return GT_Utility.getBlockFromItem(getItem()); + return GTUtility.getBlockFromItem(getItem()); } @Override @@ -2658,50 +2658,50 @@ public enum ItemList implements IItemContainer { @Override public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT) { if (mDeprecated && !mWarned) { - new Exception(this + " is now deprecated").printStackTrace(GT_Log.err); + new Exception(this + " is now deprecated").printStackTrace(GTLog.err); // warn only once mWarned = true; } - if (GT_Utility.isStackInvalid(aStack)) return false; - return GT_Utility.areUnificationsEqual((ItemStack) aStack, aWildcard ? getWildcard(1) : get(1), aIgnoreNBT); + if (GTUtility.isStackInvalid(aStack)) return false; + return GTUtility.areUnificationsEqual((ItemStack) aStack, aWildcard ? getWildcard(1) : get(1), aIgnoreNBT); } @Override public ItemStack get(long aAmount, Object... aReplacements) { sanityCheck(); - if (GT_Utility.isStackInvalid(mStack)) { - GT_Log.out.println("Object in the ItemList is null at:"); - new NullPointerException().printStackTrace(GT_Log.out); - return GT_Utility.copyAmount(aAmount, aReplacements); + if (GTUtility.isStackInvalid(mStack)) { + GTLog.out.println("Object in the ItemList is null at:"); + new NullPointerException().printStackTrace(GTLog.out); + return GTUtility.copyAmount(aAmount, aReplacements); } - return GT_Utility.copyAmount(aAmount, GT_OreDictUnificator.get(mStack)); + return GTUtility.copyAmount(aAmount, GTOreDictUnificator.get(mStack)); } @Override public ItemStack getWildcard(long aAmount, Object... aReplacements) { sanityCheck(); - if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmountAndMetaData(aAmount, W, GT_OreDictUnificator.get(mStack)); + if (GTUtility.isStackInvalid(mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmountAndMetaData(aAmount, W, GTOreDictUnificator.get(mStack)); } @Override public ItemStack getUndamaged(long aAmount, Object... aReplacements) { sanityCheck(); - if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmountAndMetaData(aAmount, 0, GT_OreDictUnificator.get(mStack)); + if (GTUtility.isStackInvalid(mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmountAndMetaData(aAmount, 0, GTOreDictUnificator.get(mStack)); } @Override public ItemStack getAlmostBroken(long aAmount, Object... aReplacements) { sanityCheck(); - if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmountAndMetaData(aAmount, mStack.getMaxDamage() - 1, GT_OreDictUnificator.get(mStack)); + if (GTUtility.isStackInvalid(mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmountAndMetaData(aAmount, mStack.getMaxDamage() - 1, GTOreDictUnificator.get(mStack)); } @Override public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements) { ItemStack rStack = get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) return NI; + if (GTUtility.isStackInvalid(rStack)) return NI; // CamelCase alphanumeric words from aDisplayName StringBuilder tCamelCasedDisplayNameBuilder = new StringBuilder(); @@ -2722,36 +2722,36 @@ public enum ItemList implements IItemContainer { // Construct a translation key from UnlocalizedName and CamelCased DisplayName final String tKey = rStack.getUnlocalizedName() + ".with." + tCamelCasedDisplayNameBuilder + ".name"; - rStack.setStackDisplayName(GT_LanguageManager.addStringLocalization(tKey, aDisplayName)); - return GT_Utility.copyAmount(aAmount, rStack); + rStack.setStackDisplayName(GTLanguageManager.addStringLocalization(tKey, aDisplayName)); + return GTUtility.copyAmount(aAmount, rStack); } @Override public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements) { ItemStack rStack = get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) return null; - GT_ModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); - return GT_Utility.copyAmount(aAmount, rStack); + if (GTUtility.isStackInvalid(rStack)) return null; + GTModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); + return GTUtility.copyAmount(aAmount, rStack); } @Override public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements) { sanityCheck(); - if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmountAndMetaData(aAmount, aMetaValue, GT_OreDictUnificator.get(mStack)); + if (GTUtility.isStackInvalid(mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmountAndMetaData(aAmount, aMetaValue, GTOreDictUnificator.get(mStack)); } @Override public IItemContainer registerOre(Object... aOreNames) { sanityCheck(); - for (Object tOreName : aOreNames) GT_OreDictUnificator.registerOre(tOreName, get(1)); + for (Object tOreName : aOreNames) GTOreDictUnificator.registerOre(tOreName, get(1)); return this; } @Override public IItemContainer registerWildcardAsOre(Object... aOreNames) { sanityCheck(); - for (Object tOreName : aOreNames) GT_OreDictUnificator.registerOre(tOreName, getWildcard(1)); + for (Object tOreName : aOreNames) GTOreDictUnificator.registerOre(tOreName, getWildcard(1)); return this; } @@ -2767,7 +2767,7 @@ public enum ItemList implements IItemContainer { if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); if (mDeprecated && !mWarned) { - new Exception(this + " is now deprecated").printStackTrace(GT_Log.err); + new Exception(this + " is now deprecated").printStackTrace(GTLog.err); // warn only once mWarned = true; } diff --git a/src/main/java/gregtech/api/enums/MaterialBuilder.java b/src/main/java/gregtech/api/enums/MaterialBuilder.java index 98ed5fa3f7..89104d6e96 100644 --- a/src/main/java/gregtech/api/enums/MaterialBuilder.java +++ b/src/main/java/gregtech/api/enums/MaterialBuilder.java @@ -31,7 +31,7 @@ public class MaterialBuilder { private Dyes color = Dyes._NULL; private int extraData = 0; private List materialList = new ArrayList<>(); - private List aspects = new ArrayList<>(); + private List aspects = new ArrayList<>(); private boolean hasCorrespondingFluid = false; private boolean hasCorrespondingGas = false; private boolean canBeCracked = false; @@ -242,7 +242,7 @@ public class MaterialBuilder { return this; } - public MaterialBuilder setAspects(List aspects) { + public MaterialBuilder setAspects(List aspects) { this.aspects = aspects; return this; } diff --git a/src/main/java/gregtech/api/enums/Materials.java b/src/main/java/gregtech/api/enums/Materials.java index 3d314c4742..3a963ca322 100644 --- a/src/main/java/gregtech/api/enums/Materials.java +++ b/src/main/java/gregtech/api/enums/Materials.java @@ -1,7 +1,7 @@ package gregtech.api.enums; import static gregtech.api.enums.FluidState.GAS; -import static gregtech.api.enums.GT_Values.M; +import static gregtech.api.enums.GTValues.M; import static gregtech.api.enums.Mods.Thaumcraft; import java.util.ArrayList; @@ -24,20 +24,20 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; -import gregtech.api.fluid.GT_FluidFactory; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.TCAspects.TC_AspectStack; +import gregtech.api.fluid.GTFluidFactory; import gregtech.api.interfaces.IColorModulationContainer; import gregtech.api.interfaces.IMaterialHandler; import gregtech.api.interfaces.ISubTagContainer; import gregtech.api.objects.MaterialStack; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; import gregtech.common.config.gregtech.ConfigHarvestLevel; import gregtech.common.render.items.CosmicNeutroniumRenderer; -import gregtech.common.render.items.GT_GeneratedMaterial_Renderer; import gregtech.common.render.items.GaiaSpiritRenderer; +import gregtech.common.render.items.GeneratedMaterialRenderer; import gregtech.common.render.items.GlitchEffectRenderer; import gregtech.common.render.items.InfinityRenderer; import gregtech.common.render.items.TranscendentMetalRenderer; @@ -67,7 +67,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { // Spotless breaks the table below into many, many lines // spotless:off - public static Materials _NULL = new Materials(-1, TextureSet.SET_NONE, 1.0F, 0, 0, 0, 255, 255, 255, 0, "NULL", "NULL", 0, 0, 0, 0, false, false, 1, 1, 1, Dyes._NULL, Element._NULL, Collections.singletonList(new TC_AspectStack(TC_Aspects.VACUOS, 1))); + public static Materials _NULL = new Materials(-1, TextureSet.SET_NONE, 1.0F, 0, 0, 0, 255, 255, 255, 0, "NULL", "NULL", 0, 0, 0, 0, false, false, 1, 1, 1, Dyes._NULL, Element._NULL, Collections.singletonList(new TC_AspectStack(TCAspects.VACUOS, 1))); /** * Direct Elements */ @@ -352,37 +352,37 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { public static Materials Vyroxeres; public static Materials Yellorium; public static Materials Zectium; - public static Materials Ultimate = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Ultimate" , "Ultimate" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.MACHINA, 8))); - public static Materials Advanced = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Advanced" , "Advanced" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.MACHINA, 4))); + public static Materials Ultimate = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Ultimate" , "Ultimate" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.MACHINA, 8))); + public static Materials Advanced = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Advanced" , "Advanced" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.MACHINA, 4))); /** * Tiered materials, primarily Circuitry, Batteries and other Technical things */ - public static Materials ULV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Primitive" , "Primitive" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.MACHINA, 1))); - public static Materials LV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Basic" , "Basic" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.MACHINA, 2))); - public static Materials MV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Good" , "Good" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.MACHINA, 3))); - public static Materials HV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Advanced" , "Advanced" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.MACHINA, 4))); - public static Materials EV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Data" , "Data" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.MACHINA, 5))); - public static Materials IV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Elite" , "Elite" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.MACHINA, 6))); - public static Materials LuV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Master" , "Master" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.MACHINA, 7))); - public static Materials ZPM = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Ultimate" , "Ultimate" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.MACHINA, 8))); - public static Materials UV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Superconductor" , "Superconductor" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.MACHINA, 9))); - public static Materials UHV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Infinite" , "Infinite" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 10))); - public static Materials UEV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Bio" , "Bio" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 11))); - public static Materials UIV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Optical" , "Optical" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 12))); - public static Materials UMV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Exotic" , "Exotic" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 13))); - public static Materials UXV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Cosmic" , "Cosmic" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 14))); - public static Materials MAX = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Transcendent" , "Transcendent" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 15))); - - public static Materials Resistor = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Resistor" , "Resistor" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 1))); - public static Materials Diode = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Diode" , "Diode" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 1))); - public static Materials Transistor = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Transistor" , "Transistor" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 1))); - public static Materials Capacitor = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Capacitor" , "Capacitor" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 1))); - public static Materials Inductor = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Inductor" , "Inductor" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 1))); - - public static Materials Nano = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Nano" , "Bio" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 11))); - public static Materials Piko = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Piko" , "Bio" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 12))); - public static Materials Quantum = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Quantum" , "Bio" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TC_Aspects.ELECTRUM, 13))); + public static Materials ULV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Primitive" , "Primitive" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.MACHINA, 1))); + public static Materials LV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Basic" , "Basic" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.MACHINA, 2))); + public static Materials MV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Good" , "Good" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.MACHINA, 3))); + public static Materials HV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Advanced" , "Advanced" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.MACHINA, 4))); + public static Materials EV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Data" , "Data" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.MACHINA, 5))); + public static Materials IV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Elite" , "Elite" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.MACHINA, 6))); + public static Materials LuV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Master" , "Master" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.MACHINA, 7))); + public static Materials ZPM = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Ultimate" , "Ultimate" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.MACHINA, 8))); + public static Materials UV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Superconductor" , "Superconductor" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.MACHINA, 9))); + public static Materials UHV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Infinite" , "Infinite" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 10))); + public static Materials UEV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Bio" , "Bio" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 11))); + public static Materials UIV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Optical" , "Optical" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 12))); + public static Materials UMV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Exotic" , "Exotic" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 13))); + public static Materials UXV = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Cosmic" , "Cosmic" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 14))); + public static Materials MAX = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Transcendent" , "Transcendent" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 15))); + + public static Materials Resistor = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Resistor" , "Resistor" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 1))); + public static Materials Diode = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Diode" , "Diode" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 1))); + public static Materials Transistor = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Transistor" , "Transistor" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 1))); + public static Materials Capacitor = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Capacitor" , "Capacitor" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 1))); + public static Materials Inductor = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Inductor" , "Inductor" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 1))); + + public static Materials Nano = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Nano" , "Bio" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 11))); + public static Materials Piko = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Piko" , "Bio" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 12))); + public static Materials Quantum = new Materials( -1, TextureSet.SET_NONE , 1.0F, 0, 0, 0 , 255, 255, 255, 0, "Quantum" , "Bio" , 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray , Collections.singletonList(new TC_AspectStack(TCAspects.ELECTRUM, 13))); /** @@ -1029,10 +1029,10 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { public final short[] mRGBa = new short[] { 255, 255, 255, 0 }, mMoltenRGBa = new short[] { 255, 255, 255, 0 }; public TextureSet mIconSet; - public GT_GeneratedMaterial_Renderer renderer; + public GeneratedMaterialRenderer renderer; public List mMaterialList = new ArrayList<>(); public List mOreByProducts = new ArrayList<>(), mOreReRegistrations = new ArrayList<>(); - public List mAspects = new ArrayList<>(); + public List mAspects = new ArrayList<>(); public ArrayList mMaterialItems = new ArrayList<>(); public Collection mSubTags = new LinkedHashSet<>(); public Enchantment mEnchantmentTools = null, mEnchantmentArmors = null; @@ -1256,7 +1256,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { int aTypes, int aR, int aG, int aB, int aA, String aName, String aDefaultLocalName, int aFuelType, int aFuelPower, int aMeltingPoint, int aBlastFurnaceTemp, boolean aBlastFurnaceRequired, boolean aTransparent, int aOreValue, int aDensityMultiplier, int aDensityDivider, Dyes aColor, - List aAspects) { + List aAspects) { this( aMetaItemSubID, aIconSet, @@ -1287,7 +1287,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { int aTypes, int aR, int aG, int aB, int aA, String aName, String aDefaultLocalName, int aFuelType, int aFuelPower, int aMeltingPoint, int aBlastFurnaceTemp, boolean aBlastFurnaceRequired, boolean aTransparent, int aOreValue, int aDensityMultiplier, int aDensityDivider, Dyes aColor, Element aElement, - List aAspects) { + List aAspects) { this( aMetaItemSubID, aIconSet, @@ -1359,7 +1359,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { int aTypes, int aR, int aG, int aB, int aA, String aName, String aDefaultLocalName, int aFuelType, int aFuelPower, int aMeltingPoint, int aBlastFurnaceTemp, boolean aBlastFurnaceRequired, boolean aTransparent, int aOreValue, int aDensityMultiplier, int aDensityDivider, Dyes aColor, int aExtraData, - List aMaterialList, List aAspects) { + List aMaterialList, List aAspects) { this( aMetaItemSubID, aIconSet, @@ -1397,15 +1397,15 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { tAmountOfComponents += tMaterial.mAmount; if (tMaterial.mMaterial.mMeltingPoint > 0) tMeltingPoint += tMaterial.mMaterial.mMeltingPoint * tMaterial.mAmount; - if (aAspects == null) for (TC_Aspects.TC_AspectStack tAspect : tMaterial.mMaterial.mAspects) - tAspect.addToAspectList(mAspects); + if (aAspects == null) + for (TCAspects.TC_AspectStack tAspect : tMaterial.mMaterial.mAspects) tAspect.addToAspectList(mAspects); } if (mMeltingPoint < 0) mMeltingPoint = (short) (tMeltingPoint / tAmountOfComponents); tAmountOfComponents *= aDensityMultiplier; tAmountOfComponents /= aDensityDivider; - if (aAspects == null) for (TC_Aspects.TC_AspectStack tAspect : mAspects) + if (aAspects == null) for (TCAspects.TC_AspectStack tAspect : mAspects) tAspect.mAmount = Math.max(1, tAspect.mAmount / Math.max(1, tAmountOfComponents)); else mAspects.addAll(aAspects); } @@ -2478,7 +2478,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { public static void init() { new ProcessingConfig(); - if (!GT_Mod.gregtechproxy.mEnableAllMaterials) new ProcessingModSupport(); + if (!GTMod.gregtechproxy.mEnableAllMaterials) new ProcessingModSupport(); mMaterialHandlers.forEach(IMaterialHandler::onMaterialsInit); // This is where addon mods can add/manipulate // materials initMaterialProperties(); // No more material addition or manipulation should be done past this point! @@ -2538,8 +2538,8 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { if (aMaterial.mMetaItemSubID >= 0) { if (aMaterial.mMetaItemSubID < 1000) { if (aMaterial.mHasParentMod) { - if (GregTech_API.sGeneratedMaterials[aMaterial.mMetaItemSubID] == null) { - GregTech_API.sGeneratedMaterials[aMaterial.mMetaItemSubID] = aMaterial; + if (GregTechAPI.sGeneratedMaterials[aMaterial.mMetaItemSubID] == null) { + GregTechAPI.sGeneratedMaterials[aMaterial.mMetaItemSubID] = aMaterial; } else throw new IllegalArgumentException( "The Material Index " + aMaterial.mMetaItemSubID + " for " @@ -2556,7 +2556,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { } private static void addToolValues(Materials aMaterial) { - // Moved from GT_Proxy? (Not sure) + // Moved from GTProxy? (Not sure) aMaterial.mHandleMaterial = (aMaterial == Desh ? aMaterial.mHandleMaterial : aMaterial == Diamond || aMaterial == Thaumium ? Wood : aMaterial.contains(SubTag.BURNING) ? Blaze @@ -2596,10 +2596,10 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { } if (aMaterial.mHasPlasma) { - GT_Mod.gregtechproxy.addAutogeneratedPlasmaFluid(aMaterial); + GTMod.gregtechproxy.addAutogeneratedPlasmaFluid(aMaterial); } if (aMaterial.mHasGas) { - GT_FluidFactory + GTFluidFactory .of(aMaterial.mName.toLowerCase(), aMaterial.mDefaultLocalName, aMaterial, GAS, aMaterial.mGasTemp); } } @@ -2610,18 +2610,18 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { } private static void addHarvestLevelNerfs(Materials aMaterial) { - /* Moved the harvest level changes from GT_Mod to have fewer things iterating over MATERIALS_ARRAY */ - if (GT_Mod.gregtechproxy.mChangeHarvestLevels && aMaterial.mToolQuality > 0 - && aMaterial.mMetaItemSubID < GT_Mod.gregtechproxy.mHarvestLevel.length + /* Moved the harvest level changes from GTMod to have fewer things iterating over MATERIALS_ARRAY */ + if (GTMod.gregtechproxy.mChangeHarvestLevels && aMaterial.mToolQuality > 0 + && aMaterial.mMetaItemSubID < GTMod.gregtechproxy.mHarvestLevel.length && aMaterial.mMetaItemSubID >= 0) { - GT_Mod.gregtechproxy.mHarvestLevel[aMaterial.mMetaItemSubID] = aMaterial.mToolQuality; + GTMod.gregtechproxy.mHarvestLevel[aMaterial.mMetaItemSubID] = aMaterial.mToolQuality; } } private static void addHarvestLevels() { - GT_Mod.gregtechproxy.mChangeHarvestLevels = ConfigHarvestLevel.activateHarvestLevelChange; - GT_Mod.gregtechproxy.mMaxHarvestLevel = Math.min(15, ConfigHarvestLevel.maxHarvestLevel); - GT_Mod.gregtechproxy.mGraniteHavestLevel = ConfigHarvestLevel.graniteHarvestLevel; + GTMod.gregtechproxy.mChangeHarvestLevels = ConfigHarvestLevel.activateHarvestLevelChange; + GTMod.gregtechproxy.mMaxHarvestLevel = Math.min(15, ConfigHarvestLevel.maxHarvestLevel); + GTMod.gregtechproxy.mGraniteHavestLevel = ConfigHarvestLevel.graniteHarvestLevel; } public static void initMaterialProperties() { @@ -2690,7 +2690,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { public static String getLocalizedNameForItem(String aFormat, int aMaterialID) { if (aMaterialID >= 0 && aMaterialID < 1000) { - Materials aMaterial = GregTech_API.sGeneratedMaterials[aMaterialID]; + Materials aMaterial = GregTechAPI.sGeneratedMaterials[aMaterialID]; if (aMaterial != null) return aMaterial.getLocalizedNameForItem(aFormat); } return aFormat; @@ -2814,7 +2814,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { return mMaterialItems.stream() .anyMatch( tStack -> Arrays.stream(aStacks) - .anyMatch(aStack -> GT_Utility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound()))); + .anyMatch(aStack -> GTUtility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound()))); } /** @@ -2824,7 +2824,7 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { if (aStack == null) return false; boolean temp = false; int mMaterialItems_sS = mMaterialItems.size(); - for (int i = 0; i < mMaterialItems_sS; i++) if (GT_Utility.areStacksEqual(aStack, mMaterialItems.get(i))) { + for (int i = 0; i < mMaterialItems_sS; i++) if (GTUtility.areStacksEqual(aStack, mMaterialItems.get(i))) { mMaterialItems.remove(i--); temp = true; } @@ -3136,43 +3136,43 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { */ public boolean isProperSolderingFluid() { return mStandardMoltenFluid != null && contains(SubTag.SOLDERING_MATERIAL) - && !(GregTech_API.mUseOnlyGoodSolderingMaterials && !contains(SubTag.SOLDERING_MATERIAL_GOOD)); + && !(GregTechAPI.mUseOnlyGoodSolderingMaterials && !contains(SubTag.SOLDERING_MATERIAL_GOOD)); } public ItemStack getCells(int amount) { - return GT_OreDictUnificator.get(OrePrefixes.cell, this, amount); + return GTOreDictUnificator.get(OrePrefixes.cell, this, amount); } public ItemStack getDust(int amount) { - return GT_OreDictUnificator.get(OrePrefixes.dust, this, amount); + return GTOreDictUnificator.get(OrePrefixes.dust, this, amount); } public ItemStack getDustSmall(int amount) { - return GT_OreDictUnificator.get(OrePrefixes.dustSmall, this, amount); + return GTOreDictUnificator.get(OrePrefixes.dustSmall, this, amount); } public ItemStack getDustTiny(int amount) { - return GT_OreDictUnificator.get(OrePrefixes.dustTiny, this, amount); + return GTOreDictUnificator.get(OrePrefixes.dustTiny, this, amount); } public ItemStack getGems(int amount) { - return GT_OreDictUnificator.get(OrePrefixes.gem, this, amount); + return GTOreDictUnificator.get(OrePrefixes.gem, this, amount); } public ItemStack getIngots(int amount) { - return GT_OreDictUnificator.get(OrePrefixes.ingot, this, amount); + return GTOreDictUnificator.get(OrePrefixes.ingot, this, amount); } public ItemStack getNuggets(int amount) { - return GT_OreDictUnificator.get(OrePrefixes.nugget, this, amount); + return GTOreDictUnificator.get(OrePrefixes.nugget, this, amount); } public ItemStack getBlocks(int amount) { - return GT_OreDictUnificator.get(OrePrefixes.block, this, amount); + return GTOreDictUnificator.get(OrePrefixes.block, this, amount); } public ItemStack getPlates(int amount) { - return GT_OreDictUnificator.get(OrePrefixes.plate, this, amount); + return GTOreDictUnificator.get(OrePrefixes.plate, this, amount); } public static Materials getGtMaterialFromFluid(Fluid fluid) { @@ -3180,6 +3180,6 @@ public class Materials implements IColorModulationContainer, ISubTagContainer { } public ItemStack getNanite(int amount) { - return GT_OreDictUnificator.get(OrePrefixes.nanite, this, amount); + return GTOreDictUnificator.get(OrePrefixes.nanite, this, amount); } } diff --git a/src/main/java/gregtech/api/enums/MaterialsBotania.java b/src/main/java/gregtech/api/enums/MaterialsBotania.java index 6fe538a0bc..6373595e91 100644 --- a/src/main/java/gregtech/api/enums/MaterialsBotania.java +++ b/src/main/java/gregtech/api/enums/MaterialsBotania.java @@ -9,7 +9,7 @@ import static gregtech.api.enums.OrePrefixes.rotor; import java.util.Arrays; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; +import gregtech.api.enums.TCAspects.TC_AspectStack; public class MaterialsBotania { @@ -28,7 +28,7 @@ public class MaterialsBotania { .setBlastFurnaceTemp(1500) .setBlastFurnaceRequired(true) .setAspects( - Arrays.asList(new TC_AspectStack(TC_Aspects.METALLUM, 3), new TC_AspectStack(TC_Aspects.PRAECANTATIO, 1))) + Arrays.asList(new TC_AspectStack(TCAspects.METALLUM, 3), new TC_AspectStack(TCAspects.PRAECANTATIO, 1))) .constructMaterial(); public static Materials Terrasteel = new MaterialBuilder(202, TextureSet.SET_METALLIC, "Terrasteel") .setName("Terrasteel") @@ -45,9 +45,9 @@ public class MaterialsBotania { .setBlastFurnaceRequired(true) .setAspects( Arrays.asList( - new TC_AspectStack(TC_Aspects.METALLUM, 2), - new TC_AspectStack(TC_Aspects.TERRA, 1), - new TC_AspectStack(TC_Aspects.PRAECANTATIO, 1))) + new TC_AspectStack(TCAspects.METALLUM, 2), + new TC_AspectStack(TCAspects.TERRA, 1), + new TC_AspectStack(TCAspects.PRAECANTATIO, 1))) .constructMaterial(); public static Materials ElvenElementium = new MaterialBuilder(203, TextureSet.SET_METALLIC, "Elven Elementium") .setName("ElvenElementium") @@ -64,9 +64,9 @@ public class MaterialsBotania { .setBlastFurnaceRequired(true) .setAspects( Arrays.asList( - new TC_AspectStack(TC_Aspects.METALLUM, 3), - new TC_AspectStack(TC_Aspects.PRAECANTATIO, 2), - new TC_AspectStack(TC_Aspects.AURAM, 1))) + new TC_AspectStack(TCAspects.METALLUM, 3), + new TC_AspectStack(TCAspects.PRAECANTATIO, 2), + new TC_AspectStack(TCAspects.AURAM, 1))) .constructMaterial(); public static Materials Livingrock = new MaterialBuilder(204, new TextureSet("Livingrock", true), "Livingrock") .setName("Livingrock") @@ -79,7 +79,7 @@ public class MaterialsBotania { .setOreValue(3) .setDensityMultiplier(1) .setDensityDivider(1) - .setAspects(Arrays.asList(new TC_AspectStack(TC_Aspects.TERRA, 2), new TC_AspectStack(TC_Aspects.VICTUS, 2))) + .setAspects(Arrays.asList(new TC_AspectStack(TCAspects.TERRA, 2), new TC_AspectStack(TCAspects.VICTUS, 2))) .constructMaterial(); public static Materials GaiaSpirit = new Materials( 205, @@ -105,10 +105,10 @@ public class MaterialsBotania { 1, Dyes._NULL, Arrays.asList( - new TC_AspectStack(TC_Aspects.PRAECANTATIO, 27), - new TC_AspectStack(TC_Aspects.AURAM, 24), - new TC_AspectStack(TC_Aspects.VICTUS, 24), - new TC_AspectStack(TC_Aspects.METALLUM, 1))); + new TC_AspectStack(TCAspects.PRAECANTATIO, 27), + new TC_AspectStack(TCAspects.AURAM, 24), + new TC_AspectStack(TCAspects.VICTUS, 24), + new TC_AspectStack(TCAspects.METALLUM, 1))); public static Materials Livingwood = new MaterialBuilder(206, new TextureSet("Livingwood", true), "Livingwood") .setName("Livingwood") .addDustItems() @@ -121,7 +121,7 @@ public class MaterialsBotania { .setOreValue(3) .setDensityMultiplier(1) .setDensityDivider(1) - .setAspects(Arrays.asList(new TC_AspectStack(TC_Aspects.ARBOR, 4), new TC_AspectStack(TC_Aspects.VICTUS, 2))) + .setAspects(Arrays.asList(new TC_AspectStack(TCAspects.ARBOR, 4), new TC_AspectStack(TCAspects.VICTUS, 2))) .constructMaterial(); public static Materials Dreamwood = new MaterialBuilder(207, new TextureSet("Dreamwood", true), "Dreamwood") .setName("Dreamwood") @@ -137,9 +137,9 @@ public class MaterialsBotania { .setDensityDivider(1) .setAspects( Arrays.asList( - new TC_AspectStack(TC_Aspects.ARBOR, 4), - new TC_AspectStack(TC_Aspects.AURAM, 2), - new TC_AspectStack(TC_Aspects.PRAECANTATIO, 1))) + new TC_AspectStack(TCAspects.ARBOR, 4), + new TC_AspectStack(TCAspects.AURAM, 2), + new TC_AspectStack(TCAspects.PRAECANTATIO, 1))) .constructMaterial(); public static Materials ManaDiamond = new Materials( 208, @@ -165,9 +165,9 @@ public class MaterialsBotania { 1, Dyes._NULL, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 4), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 4))); + new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 4), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 4))); public static Materials BotaniaDragonstone = new Materials( 209, TextureSet.SET_DIAMOND, @@ -192,9 +192,9 @@ public class MaterialsBotania { 1, Dyes._NULL, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 6), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 6), - new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 4))); + new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 6), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 6), + new TCAspects.TC_AspectStack(TCAspects.AURAM, 4))); public static void init() { GaiaSpirit.mChemicalFormula = "Gs"; diff --git a/src/main/java/gregtech/api/enums/MaterialsGTNH.java b/src/main/java/gregtech/api/enums/MaterialsGTNH.java new file mode 100644 index 0000000000..12a53f6b86 --- /dev/null +++ b/src/main/java/gregtech/api/enums/MaterialsGTNH.java @@ -0,0 +1,626 @@ +package gregtech.api.enums; + +import static gregtech.GTMod.GT_FML_LOGGER; + +import gregtech.api.interfaces.IMaterialHandler; + +public class MaterialsGTNH implements IMaterialHandler { + + public MaterialsGTNH() { + GT_FML_LOGGER.info("Registering GTNH-Materials (post Java 64kb limit)"); + Materials.add(this); + } + + /** + * This Class is for adding new Materials since Java has a Limiation of 64kb per Method / Class header + */ + public static Materials Signalum = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 1 | 2, + 255, + 255, + 255, + 0, + "Signalum", + "Signalum", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + + public static Materials Lumium = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 1 | 2, + 255, + 255, + 255, + 0, + "Lumium", + "Lumium", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials EnrichedCopper = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 1 | 2, + 255, + 255, + 255, + 0, + "EnrichedCopper", + "Enriched Copper", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials DiamondCopper = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 1 | 2, + 255, + 255, + 255, + 0, + "DiamondCopper", + "Diamond Copper", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials TarPitch = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 1 | 2, + 255, + 255, + 255, + 0, + "TarPitch", + "Tar Pitch", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials LimePure = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 0, + 0, + 255, + 255, + 255, + 0, + "LimePure", + "Pure Lime", + 0, + 0, + -1, + 0, + false, + false, + 1, + 1, + 1, + Dyes.dyeLime); + public static Materials Wimalite = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 8, + 255, + 255, + 255, + 0, + "Wimalite", + "Wimalite", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes.dyeYellow); + public static Materials Yellorite = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 8, + 255, + 255, + 255, + 0, + "Yellorite", + "Yellorite", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes.dyeYellow); + public static Materials Quantum = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 0, + 0, + 255, + 255, + 255, + 0, + "Quantum", + "Quantum", + 0, + 0, + -1, + 0, + false, + false, + 1, + 1, + 1, + Dyes.dyeWhite); + public static Materials Turquoise = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 1, + 1, + 255, + 255, + 255, + 0, + "Turquoise", + "Turquoise", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials Tapazite = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 1, + 1, + 255, + 255, + 255, + 0, + "Tapazite", + "Tapazite", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes.dyeGreen); + public static Materials Thyrium = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 1, + 1 | 2 | 8, + 255, + 255, + 255, + 0, + "Thyrium", + "Thyrium", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials Tourmaline = new Materials( + -1, + TextureSet.SET_RUBY, + 1.0F, + 0, + 1, + 1, + 255, + 255, + 255, + 0, + "Tourmaline", + "Tourmaline", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials Spinel = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 1, + 0, + 255, + 255, + 255, + 0, + "Spinel", + "Spinel", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials Starconium = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 1, + 1 | 2 | 8, + 255, + 255, + 255, + 0, + "Starconium", + "Starconium", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials Sugilite = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 1, + 1, + 255, + 255, + 255, + 0, + "Sugilite", + "Sugilite", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials Prismarine = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 1 | 4, + 255, + 255, + 255, + 0, + "Prismarine", + "Prismarine", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials GraveyardDirt = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 1, + 255, + 255, + 255, + 0, + "GraveyardDirt", + "Graveyard Dirt", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials Tennantite = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 1, + 255, + 255, + 255, + 0, + "Tennantite", + "Tennantite", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials Fairy = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 1 | 2, + 255, + 255, + 255, + 0, + "Fairy", + "Fairy", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials Ludicrite = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 1 | 2, + 255, + 255, + 255, + 0, + "Ludicrite", + "Ludicrite", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials AquaRegia = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 0, + 255, + 255, + 255, + 0, + "AquaRegia", + "Aqua Regia", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials SolutionBlueVitriol = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 0, + 255, + 255, + 255, + 0, + "SolutionBlueVitriol", + "Blue Vitriol Solution", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials SolutionNickelSulfate = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 2, + 0, + 255, + 255, + 255, + 0, + "SolutionNickelSulfate", + "Nickel Sulfate Solution", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes._NULL); + public static Materials Lodestone = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 1, + 1 | 8, + 255, + 255, + 255, + 0, + "Lodestone", + "Lodestone", + 0, + 0, + -1, + 0, + false, + false, + 1, + 1, + 1, + Dyes._NULL); + public static Materials Luminite = new Materials( + -1, + TextureSet.SET_NONE, + 1.0F, + 0, + 1, + 1 | 8, + 250, + 250, + 250, + 0, + "Luminite", + "Luminite", + 0, + 0, + -1, + 0, + false, + false, + 3, + 1, + 1, + Dyes.dyeWhite); + + private static void initSubTags() { + SubTag.METAL.addTo(Signalum, Lumium, EnrichedCopper, DiamondCopper); + SubTag.NO_SMASHING.addTo(TarPitch); + } + + @Override + public void onMaterialsInit() { + initSubTags(); + } +} diff --git a/src/main/java/gregtech/api/enums/MaterialsKevlar.java b/src/main/java/gregtech/api/enums/MaterialsKevlar.java index 6612bc8b65..bea0c0d244 100644 --- a/src/main/java/gregtech/api/enums/MaterialsKevlar.java +++ b/src/main/java/gregtech/api/enums/MaterialsKevlar.java @@ -21,8 +21,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 2)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1))) + new TCAspects.TC_AspectStack(TCAspects.TERRA, 1), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1))) .constructMaterial(); // C15H10N2O2 public static Materials DiaminodiphenylmethanMixture = new MaterialBuilder( 795, @@ -39,8 +39,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Nitrogen, 2)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1))) + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1))) .constructMaterial(); // C13H14N2 public static Materials DiphenylmethaneDiisocyanateMixture = new MaterialBuilder( 794, @@ -58,8 +58,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 2)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1))) + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1))) .constructMaterial(); // C15H10N2O2 public static Materials Butyraldehyde = new MaterialBuilder(793, TextureSet.SET_FLUID, "Butyraldehyde") .setName("Butyraldehyde") @@ -74,8 +74,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 1)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1))) + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1))) .constructMaterial(); // C4H8O public static Materials Isobutyraldehyde = new MaterialBuilder(792, TextureSet.SET_FLUID, "Isobutyraldehyde") .setName("Isobutyraldehyde") @@ -91,8 +91,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 1)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1))) + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1))) .constructMaterial(); // C4H8O public static Materials NickelTetracarbonyl = new MaterialBuilder(791, TextureSet.SET_FLUID, "Nickel Tetracarbonyl") .setName("NickelTetracarbonyl") @@ -107,8 +107,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 4)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1))) + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1))) .constructMaterial(); // C4NiO4 public static Materials KevlarCatalyst = new MaterialBuilder(790, TextureSet.SET_DULL, "Polyurethane Catalyst A") .setName("PolyurethaneCatalystADust") @@ -118,8 +118,8 @@ public class MaterialsKevlar { .setMeltingPoint(300) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1))) + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1))) .constructMaterial(); public static Materials EthyleneOxide = new MaterialBuilder(789, TextureSet.SET_FLUID, "Ethylene Oxide") .setName("EthyleneOxide") @@ -134,8 +134,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 1)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1))) + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1))) .constructMaterial(); // C2H4O public static Materials SiliconOil = new MaterialBuilder(788, TextureSet.SET_FLUID, "Silicon Oil") .setName("SiliconOil") @@ -146,8 +146,8 @@ public class MaterialsKevlar { .setMeltingPoint(473) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1))) + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1))) .constructMaterial(); public static Materials Ethyleneglycol = new MaterialBuilder(787, TextureSet.SET_FLUID, "Ethylene Glycol") .setName("EthyleneGlycol") @@ -162,8 +162,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 2)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1))) + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1))) .constructMaterial(); // C2H6O2 public static Materials Acetaldehyde = new MaterialBuilder(786, TextureSet.SET_FLUID, "Acetaldehyde") .setName("Acetaldehyde") @@ -178,8 +178,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 1)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1))) + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1))) .constructMaterial(); // C2H4O public static Materials Pentaerythritol = new MaterialBuilder(785, TextureSet.SET_DULL, "Pentaerythritol") .setName("Pentaerythritol") @@ -193,8 +193,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 4)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1))) + new TCAspects.TC_AspectStack(TCAspects.TERRA, 1), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1))) .constructMaterial(); // C5H12O4 public static Materials PolyurethaneResin = new MaterialBuilder(784, TextureSet.SET_FLUID, "Polyurethane Resin") .setName("PolyurethaneResin") @@ -219,8 +219,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 1)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1))) + new TCAspects.TC_AspectStack(TCAspects.TERRA, 1), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1))) .constructMaterial(); // C5H9NO public static Materials TerephthaloylChloride = new MaterialBuilder( 782, @@ -237,8 +237,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 2)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1))) + new TCAspects.TC_AspectStack(TCAspects.TERRA, 1), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1))) .constructMaterial(); // C8H4Cl2O2 public static Materials Acetylene = new MaterialBuilder(781, TextureSet.SET_FLUID, "Acetylene").setName("Acetylene") .addCell() @@ -274,8 +274,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Oxygen, 2)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1))) + new TCAspects.TC_AspectStack(TCAspects.TERRA, 1), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1))) .constructMaterial(); // C6H6N2O2 public static Materials ParaPhenylenediamine = new MaterialBuilder( 779, @@ -291,8 +291,8 @@ public class MaterialsKevlar { new MaterialStack(Materials.Nitrogen, 2)) .setAspects( Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1))) + new TCAspects.TC_AspectStack(TCAspects.TERRA, 1), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1))) .constructMaterial(); // C6H6N2 public static Materials Methylamine = new MaterialBuilder(778, TextureSet.SET_FLUID, "Methylamine") .setName("Methylamine") diff --git a/src/main/java/gregtech/api/enums/MaterialsUEVplus.java b/src/main/java/gregtech/api/enums/MaterialsUEVplus.java index 7542e1f600..49ab432c5f 100644 --- a/src/main/java/gregtech/api/enums/MaterialsUEVplus.java +++ b/src/main/java/gregtech/api/enums/MaterialsUEVplus.java @@ -283,7 +283,7 @@ public class MaterialsUEVplus { 1, 1, Dyes._NULL, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))) + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))) .setProcessingMaterialTierEU(TierEU.RECIPE_UEV) .disableAutoGeneratedBlastFurnaceRecipes() .disableAutoGeneratedVacuumFreezerRecipe(); @@ -310,7 +310,7 @@ public class MaterialsUEVplus { 1000, 1000, Dyes.dyeBlack, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))) + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))) .disableAutoGeneratedBlastFurnaceRecipes() .disableAutoGeneratedVacuumFreezerRecipe() .setProcessingMaterialTierEU(TierEU.RECIPE_UHV); @@ -337,7 +337,7 @@ public class MaterialsUEVplus { 1, 1, Dyes._NULL, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))) + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))) .setProcessingMaterialTierEU(TierEU.RECIPE_UIV); public static Materials RawStarMatter = new Materials( 584, @@ -485,7 +485,7 @@ public class MaterialsUEVplus { 1, 1, Dyes._NULL, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))) + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))) .setProcessingMaterialTierEU(TierEU.RECIPE_UMV); public static Materials Eternity = new Materials( @@ -511,7 +511,7 @@ public class MaterialsUEVplus { 1, 1, Dyes._NULL, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))) + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))) .disableAutoGeneratedBlastFurnaceRecipes() .disableAutoGeneratedVacuumFreezerRecipe() .setProcessingMaterialTierEU(TierEU.RECIPE_UMV); @@ -563,7 +563,7 @@ public class MaterialsUEVplus { 1, 1, Dyes._NULL, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))) + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))) .setProcessingMaterialTierEU(TierEU.RECIPE_UMV); public static Materials QuarkGluonPlasma = new Materials( @@ -661,7 +661,7 @@ public class MaterialsUEVplus { 1, 1, Dyes._NULL, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1))) + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ITER, 1))) .disableAutoGeneratedBlastFurnaceRecipes() .disableAutoGeneratedVacuumFreezerRecipe() .setProcessingMaterialTierEU(TierEU.RECIPE_UEV); @@ -689,7 +689,7 @@ public class MaterialsUEVplus { 1, 1, Dyes._NULL, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1))) + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.SENSUS, 1))) .disableAutoGeneratedBlastFurnaceRecipes() .disableAutoGeneratedVacuumFreezerRecipe() .setProcessingMaterialTierEU(TierEU.RECIPE_UEV); @@ -717,7 +717,7 @@ public class MaterialsUEVplus { 1, 1, Dyes._NULL, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1))) + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.SENSUS, 1))) .disableAutoGeneratedBlastFurnaceRecipes() .disableAutoGeneratedVacuumFreezerRecipe() .setProcessingMaterialTierEU(TierEU.RECIPE_UEV) @@ -746,7 +746,7 @@ public class MaterialsUEVplus { 1, 1, Dyes._NULL, - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 150))) + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VACUOS, 150))) .disableAutoGeneratedBlastFurnaceRecipes() .disableAutoGeneratedVacuumFreezerRecipe(); diff --git a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java index 04a61c713e..4d11475ac4 100644 --- a/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java +++ b/src/main/java/gregtech/api/enums/MetaTileEntityIDs.java @@ -560,10 +560,10 @@ public enum MetaTileEntityIDs { GT_Dehydrator_IV(814), GT_Dehydrator_LuV(815), GT_Dehydrator_ZPM(816), - GT_FluidTank_ULV(817), - GT_FluidTank_LV(818), - GT_FluidTank_MV(819), - GT_FluidTank_HV(820), + GTFluidTank_ULV(817), + GTFluidTank_LV(818), + GTFluidTank_MV(819), + GTFluidTank_HV(820), COMET_Cyclotron(828), Industrial_FishingPond(829), Geothermal_Engine_EV(830), diff --git a/src/main/java/gregtech/api/enums/OreMixes.java b/src/main/java/gregtech/api/enums/OreMixes.java index c5c306baab..0a4b2fbc4e 100644 --- a/src/main/java/gregtech/api/enums/OreMixes.java +++ b/src/main/java/gregtech/api/enums/OreMixes.java @@ -1,15 +1,15 @@ package gregtech.api.enums; -import static bloodasp.galacticgreg.api.enums.DimensionDef.*; +import static galacticgreg.api.enums.DimensionDef.*; import static gregtech.common.OreMixBuilder.NETHER; import static gregtech.common.OreMixBuilder.OW; import static gregtech.common.OreMixBuilder.THE_END; import static gregtech.common.OreMixBuilder.TWILIGHT_FOREST; -import bloodasp.galacticgreg.GT_Worldgen_GT_Ore_Layer_Space; -import bloodasp.galacticgreg.api.enums.DimensionDef; -import gregtech.common.GT_Worldgen_GT_Ore_Layer; +import galacticgreg.WorldgenOreLayerSpace; +import galacticgreg.api.enums.DimensionDef; import gregtech.common.OreMixBuilder; +import gregtech.common.WorldgenGTOreLayer; public enum OreMixes { @@ -972,11 +972,11 @@ public enum OreMixes { this.oreMixBuilder = oreMixBuilder; } - public GT_Worldgen_GT_Ore_Layer addGTOreLayer() { - return new GT_Worldgen_GT_Ore_Layer(this.oreMixBuilder); + public WorldgenGTOreLayer addGTOreLayer() { + return new WorldgenGTOreLayer(this.oreMixBuilder); } - public GT_Worldgen_GT_Ore_Layer_Space addGaGregOreLayer() { - return new GT_Worldgen_GT_Ore_Layer_Space(this.oreMixBuilder); + public WorldgenOreLayerSpace addGaGregOreLayer() { + return new WorldgenOreLayerSpace(this.oreMixBuilder); } } diff --git a/src/main/java/gregtech/api/enums/OrePrefixes.java b/src/main/java/gregtech/api/enums/OrePrefixes.java index 7beaea9254..5f1ca97e83 100644 --- a/src/main/java/gregtech/api/enums/OrePrefixes.java +++ b/src/main/java/gregtech/api/enums/OrePrefixes.java @@ -1,8 +1,8 @@ package gregtech.api.enums; -import static gregtech.api.enums.GT_Values.B; -import static gregtech.api.enums.GT_Values.D2; -import static gregtech.api.enums.GT_Values.M; +import static gregtech.api.enums.GTValues.B; +import static gregtech.api.enums.GTValues.D2; +import static gregtech.api.enums.GTValues.M; import java.util.ArrayList; import java.util.Arrays; @@ -15,16 +15,16 @@ import net.minecraft.item.ItemStack; import com.google.common.collect.ImmutableList; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; +import gregtech.api.enums.TCAspects.TC_AspectStack; import gregtech.api.interfaces.ICondition; import gregtech.api.interfaces.IOreRecipeRegistrator; import gregtech.api.interfaces.ISubTagContainer; -import gregtech.api.objects.GT_ArrayList; -import gregtech.api.objects.GT_ItemStack; +import gregtech.api.objects.GTArrayList; +import gregtech.api.objects.GTItemStack; import gregtech.api.objects.ItemData; import gregtech.api.objects.MaterialStack; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; import gregtech.loaders.materialprocessing.ProcessingModSupport; import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; import it.unimi.dsi.fastutil.objects.ObjectSet; @@ -932,7 +932,7 @@ public enum OrePrefixes { bulletGtLarge.mSecondaryMaterial = new MaterialStack(Materials.Brass, ingot.mMaterialAmount / 3); } - public final ArrayList mPrefixedItems = new GT_ArrayList<>(false, 16); + public final ArrayList mPrefixedItems = new GTArrayList<>(false, 16); public final short mTextureIndex; public final String mRegularLocalName, mLocalizedMaterialPre, mLocalizedMaterialPost; public final boolean mIsUsedForOreProcessing, mIsEnchantable, mIsUnificatable, mIsMaterialBased, mIsSelfReferencing, @@ -957,7 +957,7 @@ public enum OrePrefixes { private final ObjectSet mContainsTestCache = new ObjectOpenCustomHashSet<>( 512, 0.5f, - GT_ItemStack.ITEMSTACK_HASH_STRATEGY2); + GTItemStack.ITEMSTACK_HASH_STRATEGY2); public static final List mPreventableComponents = new LinkedList<>( Arrays.asList( OrePrefixes.gem, @@ -1037,36 +1037,36 @@ public enum OrePrefixes { mTextureIndex = (short) aTextureindex; if (name().startsWith("ore")) { - new TC_AspectStack(TC_Aspects.TERRA, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.TERRA, 1).addToAspectList(mAspects); } else if (name().startsWith("wire") || name().startsWith("cable")) { - new TC_AspectStack(TC_Aspects.ELECTRUM, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.ELECTRUM, 1).addToAspectList(mAspects); } else if (name().startsWith("dust")) { - new TC_AspectStack(TC_Aspects.PERDITIO, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.PERDITIO, 1).addToAspectList(mAspects); } else if (name().startsWith("crushed")) { - new TC_AspectStack(TC_Aspects.PERFODIO, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.PERFODIO, 1).addToAspectList(mAspects); } else if (name().startsWith("ingot") || name().startsWith("nugget")) { - new TC_AspectStack(TC_Aspects.METALLUM, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.METALLUM, 1).addToAspectList(mAspects); } else if (name().startsWith("armor")) { - new TC_AspectStack(TC_Aspects.TUTAMEN, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.TUTAMEN, 1).addToAspectList(mAspects); } else if (name().startsWith("stone")) { - new TC_AspectStack(TC_Aspects.TERRA, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.TERRA, 1).addToAspectList(mAspects); } else if (name().startsWith("pipe")) { - new TC_AspectStack(TC_Aspects.ITER, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.ITER, 1).addToAspectList(mAspects); } else if (name().startsWith("gear")) { - new TC_AspectStack(TC_Aspects.MOTUS, 1).addToAspectList(mAspects); - new TC_AspectStack(TC_Aspects.MACHINA, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.MOTUS, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.MACHINA, 1).addToAspectList(mAspects); } else if (name().startsWith("frame") || name().startsWith("plate")) { - new TC_AspectStack(TC_Aspects.FABRICO, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.FABRICO, 1).addToAspectList(mAspects); } else if (name().startsWith("tool")) { - new TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.INSTRUMENTUM, 2).addToAspectList(mAspects); } else if (name().startsWith("gem") || name().startsWith("crystal") || name().startsWith("lens")) { - new TC_AspectStack(TC_Aspects.VITREUS, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.VITREUS, 1).addToAspectList(mAspects); } else if (name().startsWith("circuit")) { - new TC_AspectStack(TC_Aspects.COGNITIO, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.COGNITIO, 1).addToAspectList(mAspects); } else if (name().startsWith("computer")) { - new TC_AspectStack(TC_Aspects.COGNITIO, 4).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.COGNITIO, 4).addToAspectList(mAspects); } else if (name().startsWith("battery")) { - new TC_AspectStack(TC_Aspects.ELECTRUM, 1).addToAspectList(mAspects); + new TC_AspectStack(TCAspects.ELECTRUM, 1).addToAspectList(mAspects); } } @@ -1113,7 +1113,7 @@ public enum OrePrefixes { } public static OrePrefixes getPrefix(String aPrefixName, OrePrefixes aReplacement) { - Object tObject = GT_Utility.getFieldContent(OrePrefixes.class, aPrefixName, false, false); + Object tObject = GTUtility.getFieldContent(OrePrefixes.class, aPrefixName, false, false); if (tObject instanceof OrePrefixes) return (OrePrefixes) tObject; return aReplacement; } @@ -1145,13 +1145,13 @@ public enum OrePrefixes { } public boolean contains(ItemStack aStack) { - return !GT_Utility.isStackInvalid(aStack) && mContainsTestCache.contains(aStack); + return !GTUtility.isStackInvalid(aStack) && mContainsTestCache.contains(aStack); } public boolean containsUnCached(ItemStack aStack) { // In case someone needs this for (ItemStack tStack : mPrefixedItems) { - if (GT_Utility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())) { + if (GTUtility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())) { return true; } } @@ -1197,20 +1197,20 @@ public enum OrePrefixes { } if (!((aMaterial != Materials._NULL || mIsSelfReferencing || !mIsMaterialBased) - && GT_Utility.isStackValid(aStack))) { + && GTUtility.isStackValid(aStack))) { return; } for (IOreRecipeRegistrator tRegistrator : mOreProcessing) { - if (D2) GT_Log.ore.println( + if (D2) GTLog.ore.println( "Processing '" + aOreDictName + "' with the Prefix '" + name() + "' and the Material '" + aMaterial.mName + "' at " - + GT_Utility.getClassName(tRegistrator)); - tRegistrator.registerOre(this, aMaterial, aOreDictName, aModName, GT_Utility.copyAmount(1, aStack)); + + GTUtility.getClassName(tRegistrator)); + tRegistrator.registerOre(this, aMaterial, aOreDictName, aModName, GTUtility.copyAmount(1, aStack)); } } diff --git a/src/main/java/gregtech/api/enums/SmallOres.java b/src/main/java/gregtech/api/enums/SmallOres.java index 6de67bc3b9..3cd15b5f86 100644 --- a/src/main/java/gregtech/api/enums/SmallOres.java +++ b/src/main/java/gregtech/api/enums/SmallOres.java @@ -1,43 +1,43 @@ package gregtech.api.enums; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Anubis; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Asteroids; -import static bloodasp.galacticgreg.api.enums.DimensionDef.BarnardE; -import static bloodasp.galacticgreg.api.enums.DimensionDef.BarnardF; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Callisto; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Ceres; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Deimos; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Enceladus; -import static bloodasp.galacticgreg.api.enums.DimensionDef.EndAsteroids; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Ganymede; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Haumea; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Horus; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Io; -import static bloodasp.galacticgreg.api.enums.DimensionDef.KuiperBelt; -import static bloodasp.galacticgreg.api.enums.DimensionDef.MakeMake; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Mars; -import static bloodasp.galacticgreg.api.enums.DimensionDef.MehenBelt; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Mercury; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Miranda; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Moon; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Oberon; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Phobos; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Pluto; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Proteus; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Seth; -import static bloodasp.galacticgreg.api.enums.DimensionDef.TcetiE; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Titan; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Triton; -import static bloodasp.galacticgreg.api.enums.DimensionDef.VegaB; -import static bloodasp.galacticgreg.api.enums.DimensionDef.Venus; +import static galacticgreg.api.enums.DimensionDef.Anubis; +import static galacticgreg.api.enums.DimensionDef.Asteroids; +import static galacticgreg.api.enums.DimensionDef.BarnardE; +import static galacticgreg.api.enums.DimensionDef.BarnardF; +import static galacticgreg.api.enums.DimensionDef.Callisto; +import static galacticgreg.api.enums.DimensionDef.Ceres; +import static galacticgreg.api.enums.DimensionDef.Deimos; +import static galacticgreg.api.enums.DimensionDef.Enceladus; +import static galacticgreg.api.enums.DimensionDef.EndAsteroids; +import static galacticgreg.api.enums.DimensionDef.Ganymede; +import static galacticgreg.api.enums.DimensionDef.Haumea; +import static galacticgreg.api.enums.DimensionDef.Horus; +import static galacticgreg.api.enums.DimensionDef.Io; +import static galacticgreg.api.enums.DimensionDef.KuiperBelt; +import static galacticgreg.api.enums.DimensionDef.MakeMake; +import static galacticgreg.api.enums.DimensionDef.Mars; +import static galacticgreg.api.enums.DimensionDef.MehenBelt; +import static galacticgreg.api.enums.DimensionDef.Mercury; +import static galacticgreg.api.enums.DimensionDef.Miranda; +import static galacticgreg.api.enums.DimensionDef.Moon; +import static galacticgreg.api.enums.DimensionDef.Oberon; +import static galacticgreg.api.enums.DimensionDef.Phobos; +import static galacticgreg.api.enums.DimensionDef.Pluto; +import static galacticgreg.api.enums.DimensionDef.Proteus; +import static galacticgreg.api.enums.DimensionDef.Seth; +import static galacticgreg.api.enums.DimensionDef.TcetiE; +import static galacticgreg.api.enums.DimensionDef.Titan; +import static galacticgreg.api.enums.DimensionDef.Triton; +import static galacticgreg.api.enums.DimensionDef.VegaB; +import static galacticgreg.api.enums.DimensionDef.Venus; import static gregtech.common.SmallOreBuilder.NETHER; import static gregtech.common.SmallOreBuilder.OW; import static gregtech.common.SmallOreBuilder.THE_END; import static gregtech.common.SmallOreBuilder.TWILIGHT_FOREST; -import bloodasp.galacticgreg.GT_Worldgen_GT_Ore_SmallPieces_Space; -import gregtech.common.GT_Worldgen_GT_Ore_SmallPieces; +import galacticgreg.WorldgenOreSmallSpace; import gregtech.common.SmallOreBuilder; +import gregtech.common.WorldgenGTOreSmallPieces; public enum SmallOres { @@ -545,11 +545,11 @@ public enum SmallOres { this.smallOreBuilder = smallOreBuilder; } - public GT_Worldgen_GT_Ore_SmallPieces addGTSmallOre() { - return new GT_Worldgen_GT_Ore_SmallPieces(this.smallOreBuilder); + public WorldgenGTOreSmallPieces addGTSmallOre() { + return new WorldgenGTOreSmallPieces(this.smallOreBuilder); } - public GT_Worldgen_GT_Ore_SmallPieces_Space addGaGregSmallOre() { - return new GT_Worldgen_GT_Ore_SmallPieces_Space(this.smallOreBuilder); + public WorldgenOreSmallSpace addGaGregSmallOre() { + return new WorldgenOreSmallSpace(this.smallOreBuilder); } } diff --git a/src/main/java/gregtech/api/enums/SoundResource.java b/src/main/java/gregtech/api/enums/SoundResource.java index 712c1b5016..e2a6b2630a 100644 --- a/src/main/java/gregtech/api/enums/SoundResource.java +++ b/src/main/java/gregtech/api/enums/SoundResource.java @@ -12,6 +12,8 @@ import net.minecraft.util.ResourceLocation; import com.google.common.collect.Maps; +import gregtech.api.GregTechAPI; + /** * Enumerates known sounds with id and resource-location * @@ -361,7 +363,7 @@ public enum SoundResource { /** * Provides a backward-compatible Sounds {@code Map} sound list * - * @return The map for the deprecated {@link gregtech.api.GregTech_API#sSoundList} + * @return The map for the deprecated {@link GregTechAPI#sSoundList} * @deprecated This method is planned for removal. *

* Use this {@link SoundResource} enum instead. diff --git a/src/main/java/gregtech/api/enums/TAE.java b/src/main/java/gregtech/api/enums/TAE.java index 246b2006ea..79d3037a5a 100644 --- a/src/main/java/gregtech/api/enums/TAE.java +++ b/src/main/java/gregtech/api/enums/TAE.java @@ -8,9 +8,9 @@ import gregtech.api.interfaces.ITexture; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.gregtech.api.objects.GTPP_CopiedBlockTexture; +import gtPlusPlus.xmod.gregtech.api.objects.GTPPCopiedBlockTexture; public class TAE { @@ -19,7 +19,7 @@ public class TAE { public static int gtPPLastUsedIndex = 64; public static int secondaryIndex = 0; - public static HashMap mTAE = new HashMap<>(); + public static HashMap mTAE = new HashMap<>(); private static final HashSet mFreeSlots = new HashSet<>(64); static { @@ -31,23 +31,23 @@ public class TAE { /** * - * @param aPage - The Texture page (0-3) - * @param aID - The ID on the specified page (0-15) - * @param GTPP_CopiedBlockTexture - The Texture to register + * @param aPage - The Texture page (0-3) + * @param aID - The ID on the specified page (0-15) + * @param GTPPCopiedBlockTexture - The Texture to register * @return - Did it register correctly? */ - public static boolean registerTexture(int aPage, int aID, GTPP_CopiedBlockTexture GTPP_CopiedBlockTexture) { + public static boolean registerTexture(int aPage, int aID, GTPPCopiedBlockTexture GTPPCopiedBlockTexture) { int aRealID = aID + (aPage * 16); - return registerTexture(64 + aRealID, GTPP_CopiedBlockTexture); + return registerTexture(64 + aRealID, GTPPCopiedBlockTexture); } - public static boolean registerTexture(int aID, GTPP_CopiedBlockTexture GTPP_CopiedBlockTexture) { + public static boolean registerTexture(int aID, GTPPCopiedBlockTexture GTPPCopiedBlockTexture) { if (mFreeSlots.contains(aID)) { mFreeSlots.remove(aID); - mTAE.put(aID, GTPP_CopiedBlockTexture); + mTAE.put(aID, GTPPCopiedBlockTexture); return true; } else { - CORE.crash("Tried to register texture with ID " + aID + " to TAE, but it is already in use."); + GTPPCore.crash("Tried to register texture with ID " + aID + " to TAE, but it is already in use."); return false; // Dead Code } } @@ -69,7 +69,7 @@ public class TAE { Logger.INFO("Free Page slots within TAE: " + aPageAndSlotFree); Logger.INFO("Filling them with ERROR textures."); for (int aFreeSlot : aTemp.values()) { - registerTexture(aFreeSlot, new GTPP_CopiedBlockTexture(ModBlocks.blockCasingsTieredGTPP, 1, 15)); + registerTexture(aFreeSlot, new GTPPCopiedBlockTexture(ModBlocks.blockCasingsTieredGTPP, 1, 15)); } Logger.INFO("Finalising TAE."); for (int aKeyTae : mTAE.keySet()) { @@ -78,7 +78,7 @@ public class TAE { Logger.INFO("Finalised TAE."); } - private static boolean registerTextures(GTPP_CopiedBlockTexture GTPP_CopiedBlockTexture) { + private static boolean registerTextures(GTPPCopiedBlockTexture GTPPCopiedBlockTexture) { try { // Handle page 2. Logger.INFO("[TAE} Registering Texture, Last used casing ID is " + gtPPLastUsedIndex + "."); @@ -87,7 +87,7 @@ public class TAE { if (x != null) { ITexture[][] h = (ITexture[][]) x.get(null); if (h != null) { - h[64][secondaryIndex++] = GTPP_CopiedBlockTexture; + h[64][secondaryIndex++] = GTPPCopiedBlockTexture; x.set(null, h); Logger .INFO("[TAE} Registered Texture with ID " + (secondaryIndex - 1) + " in secondary index."); @@ -98,7 +98,7 @@ public class TAE { // set to page 1. else { - Textures.BlockIcons.setCasingTextureForId(gtPPLastUsedIndex, GTPP_CopiedBlockTexture); + Textures.BlockIcons.setCasingTextureForId(gtPPLastUsedIndex, GTPPCopiedBlockTexture); Logger.INFO("[TAE} Registered Texture with ID " + (gtPPLastUsedIndex) + " in main index."); gtPPLastUsedIndex++; return true; diff --git a/src/main/java/gregtech/api/enums/TCAspects.java b/src/main/java/gregtech/api/enums/TCAspects.java new file mode 100644 index 0000000000..31ec9c0bc8 --- /dev/null +++ b/src/main/java/gregtech/api/enums/TCAspects.java @@ -0,0 +1,112 @@ +package gregtech.api.enums; + +import java.util.List; + +public enum TCAspects { + + AER(1), + ALIENIS(20), + AQUA(3), + ARBOR(1), + AURAM(16), + BESTIA(6), + COGNITIO(2), + CORPUS(2), + ELECTRUM(24), + EXANIMIS(32), + FABRICO(2), + FAMES(2), + GELUM(1), + GRANUM(4), + HERBA(2), + HUMANUS(8), + IGNIS(4), + INSTRUMENTUM(4), + ITER(6), + LIMUS(3), + LUCRUM(32), + LUX(4), + MACHINA(16), + MAGNETO(24), + MESSIS(3), + METALLUM(8), + METO(2), + MORTUUS(16), + MOTUS(4), + NEBRISUM(48), + ORDO(8), + PANNUS(6), + PERDITIO(2), + PERFODIO(4), + PERMUTATIO(12), + POTENTIA(16), + PRAECANTATIO(16), + RADIO(48), + SANO(24), + SENSUS(4), + SPIRITUS(24), + STRONTIO(64), + TELUM(6), + TERRA(1), + TEMPESTAS(64), + TENEBRAE(24), + TUTAMEN(12), + VACUOS(6), + VENENUM(16), + VICTUS(4), + VINCULUM(16), + VITIUM(48), + VITREUS(3), + VOLATUS(12); + + /** + * The Thaumcraft Aspect Object of the Mod itself. + */ + public Object mAspect; + + public final int mValue; + + TCAspects(int aValue) { + mValue = aValue; + } + + public static class TC_AspectStack { + + public TCAspects mAspect; + public long mAmount; + + public TC_AspectStack(TCAspects aAspect, long aAmount) { + mAspect = aAspect; + mAmount = aAmount; + } + + public TC_AspectStack copy() { + return new TC_AspectStack(mAspect, mAmount); + } + + public TC_AspectStack copy(long aAmount) { + return new TC_AspectStack(mAspect, aAmount); + } + + public List addToAspectList(List aList) { + if (mAmount == 0) return aList; + for (TC_AspectStack tAspect : aList) if (tAspect.mAspect == mAspect) { + tAspect.mAmount += mAmount; + return aList; + } + aList.add(copy()); + return aList; + } + + public boolean removeFromAspectList(List aList) { + for (TC_AspectStack tAspect : aList) if (tAspect.mAspect == mAspect) { + if (tAspect.mAmount >= mAmount) { + tAspect.mAmount -= mAmount; + if (tAspect.mAmount == 0) aList.remove(tAspect); + return true; + } + } + return false; + } + } +} diff --git a/src/main/java/gregtech/api/enums/TC_Aspects.java b/src/main/java/gregtech/api/enums/TC_Aspects.java deleted file mode 100644 index 24d19b0b73..0000000000 --- a/src/main/java/gregtech/api/enums/TC_Aspects.java +++ /dev/null @@ -1,112 +0,0 @@ -package gregtech.api.enums; - -import java.util.List; - -public enum TC_Aspects { - - AER(1), - ALIENIS(20), - AQUA(3), - ARBOR(1), - AURAM(16), - BESTIA(6), - COGNITIO(2), - CORPUS(2), - ELECTRUM(24), - EXANIMIS(32), - FABRICO(2), - FAMES(2), - GELUM(1), - GRANUM(4), - HERBA(2), - HUMANUS(8), - IGNIS(4), - INSTRUMENTUM(4), - ITER(6), - LIMUS(3), - LUCRUM(32), - LUX(4), - MACHINA(16), - MAGNETO(24), - MESSIS(3), - METALLUM(8), - METO(2), - MORTUUS(16), - MOTUS(4), - NEBRISUM(48), - ORDO(8), - PANNUS(6), - PERDITIO(2), - PERFODIO(4), - PERMUTATIO(12), - POTENTIA(16), - PRAECANTATIO(16), - RADIO(48), - SANO(24), - SENSUS(4), - SPIRITUS(24), - STRONTIO(64), - TELUM(6), - TERRA(1), - TEMPESTAS(64), - TENEBRAE(24), - TUTAMEN(12), - VACUOS(6), - VENENUM(16), - VICTUS(4), - VINCULUM(16), - VITIUM(48), - VITREUS(3), - VOLATUS(12); - - /** - * The Thaumcraft Aspect Object of the Mod itself. - */ - public Object mAspect; - - public final int mValue; - - TC_Aspects(int aValue) { - mValue = aValue; - } - - public static class TC_AspectStack { - - public TC_Aspects mAspect; - public long mAmount; - - public TC_AspectStack(TC_Aspects aAspect, long aAmount) { - mAspect = aAspect; - mAmount = aAmount; - } - - public TC_AspectStack copy() { - return new TC_AspectStack(mAspect, mAmount); - } - - public TC_AspectStack copy(long aAmount) { - return new TC_AspectStack(mAspect, aAmount); - } - - public List addToAspectList(List aList) { - if (mAmount == 0) return aList; - for (TC_AspectStack tAspect : aList) if (tAspect.mAspect == mAspect) { - tAspect.mAmount += mAmount; - return aList; - } - aList.add(copy()); - return aList; - } - - public boolean removeFromAspectList(List aList) { - for (TC_AspectStack tAspect : aList) if (tAspect.mAspect == mAspect) { - if (tAspect.mAmount >= mAmount) { - tAspect.mAmount -= mAmount; - if (tAspect.mAmount == 0) aList.remove(tAspect); - return true; - } - } - return false; - } - } -} diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index 7caa8f41e5..7e5aedbcea 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -9,11 +9,11 @@ import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class Textures { @@ -1762,17 +1762,17 @@ public class Textures { Dyes.getModulation(j - 1, Dyes.MACHINE_METAL.mRGBa)); casingTexturePages[0] = new ITexture[128]; // adds some known pages, modders also can do it... - GT_Utility.addTexturePage((byte) 1); - GT_Utility.addTexturePage((byte) 2); - GT_Utility.addTexturePage((byte) 8); - GT_Utility.addTexturePage((byte) 16); + GTUtility.addTexturePage((byte) 1); + GTUtility.addTexturePage((byte) 2); + GTUtility.addTexturePage((byte) 8); + GTUtility.addTexturePage((byte) 16); setCasingTextureForId(ERROR_TEXTURE_INDEX, ERROR_RENDERING[0]); } IIcon mIcon; BlockIcons() { - GregTech_API.sGTBlockIconload.add(this); + GregTechAPI.sGTBlockIconload.add(this); } public static ITexture getCasingTextureForId(int id) { @@ -1813,7 +1813,7 @@ public class Textures { @Override public void run() { - mIcon = GregTech_API.sBlockIcons.registerIcon(GregTech.getResourcePath("iconsets", this.toString())); + mIcon = GregTechAPI.sBlockIcons.registerIcon(GregTech.getResourcePath("iconsets", this.toString())); } public static class CustomIcon implements IIconContainer, Runnable { @@ -1823,12 +1823,12 @@ public class Textures { public CustomIcon(String aIconName) { mIconName = !aIconName.contains(":") ? GregTech.getResourcePath(aIconName) : aIconName; - GregTech_API.sGTBlockIconload.add(this); + GregTechAPI.sGTBlockIconload.add(this); } @Override public void run() { - mIcon = GregTech_API.sBlockIcons.registerIcon(mIconName); + mIcon = GregTechAPI.sBlockIcons.registerIcon(mIconName); } @Override @@ -1918,7 +1918,7 @@ public class Textures { IIcon mIcon, mOverlay; ItemIcons() { - GregTech_API.sGTItemIconload.add(this); + GregTechAPI.sGTItemIconload.add(this); } @Override @@ -1938,8 +1938,8 @@ public class Textures { @Override public void run() { - mIcon = GregTech_API.sItemIcons.registerIcon(GregTech.getResourcePath("iconsets", this.toString())); - mOverlay = GregTech_API.sItemIcons.registerIcon(GregTech.getResourcePath("iconsets", this + "_OVERLAY")); + mIcon = GregTechAPI.sItemIcons.registerIcon(GregTech.getResourcePath("iconsets", this.toString())); + mOverlay = GregTechAPI.sItemIcons.registerIcon(GregTech.getResourcePath("iconsets", this + "_OVERLAY")); } public static class CustomIcon implements IIconContainer, Runnable { @@ -1949,7 +1949,7 @@ public class Textures { public CustomIcon(String aIconName) { mIconName = aIconName; - GregTech_API.sGTItemIconload.add(this); + GregTechAPI.sGTItemIconload.add(this); } @Override @@ -1969,8 +1969,8 @@ public class Textures { @Override public void run() { - mIcon = GregTech_API.sItemIcons.registerIcon(GregTech.getResourcePath(mIconName)); - mOverlay = GregTech_API.sItemIcons.registerIcon(GregTech.getResourcePath(mIconName + "_OVERLAY")); + mIcon = GregTechAPI.sItemIcons.registerIcon(GregTech.getResourcePath(mIconName)); + mOverlay = GregTechAPI.sItemIcons.registerIcon(GregTech.getResourcePath(mIconName + "_OVERLAY")); } } } diff --git a/src/main/java/gregtech/api/enums/Tier.java b/src/main/java/gregtech/api/enums/Tier.java index 2d64444283..572f2e8b2a 100644 --- a/src/main/java/gregtech/api/enums/Tier.java +++ b/src/main/java/gregtech/api/enums/Tier.java @@ -1,6 +1,6 @@ package gregtech.api.enums; -import static gregtech.api.enums.GT_Values.V; +import static gregtech.api.enums.GTValues.V; /** * Experimental Class for later diff --git a/src/main/java/gregtech/api/enums/TierEU.java b/src/main/java/gregtech/api/enums/TierEU.java index 26b6393115..713f48b3ff 100644 --- a/src/main/java/gregtech/api/enums/TierEU.java +++ b/src/main/java/gregtech/api/enums/TierEU.java @@ -1,40 +1,40 @@ package gregtech.api.enums; -import static gregtech.api.enums.GT_Values.V; +import static gregtech.api.enums.GTValues.V; public class TierEU { // Do NOT use these for crafting recipes as they are exactly 1A! Use RECIPE_ULV etc. - public static final long ULV = V[GTVoltageIndex.ULV]; - public static final long LV = V[GTVoltageIndex.LV]; - public static final long MV = V[GTVoltageIndex.MV]; - public static final long HV = V[GTVoltageIndex.HV]; - public static final long EV = V[GTVoltageIndex.EV]; - public static final long IV = V[GTVoltageIndex.IV]; - public static final long LuV = V[GTVoltageIndex.LuV]; - public static final long ZPM = V[GTVoltageIndex.ZPM]; - public static final long UV = V[GTVoltageIndex.UV]; - public static final long UHV = V[GTVoltageIndex.UHV]; - public static final long UEV = V[GTVoltageIndex.UEV]; - public static final long UIV = V[GTVoltageIndex.UIV]; - public static final long UMV = V[GTVoltageIndex.UMV]; - public static final long UXV = V[GTVoltageIndex.UXV]; - public static final long MAX = V[GTVoltageIndex.MAX]; + public static final long ULV = V[VoltageIndex.ULV]; + public static final long LV = V[VoltageIndex.LV]; + public static final long MV = V[VoltageIndex.MV]; + public static final long HV = V[VoltageIndex.HV]; + public static final long EV = V[VoltageIndex.EV]; + public static final long IV = V[VoltageIndex.IV]; + public static final long LuV = V[VoltageIndex.LuV]; + public static final long ZPM = V[VoltageIndex.ZPM]; + public static final long UV = V[VoltageIndex.UV]; + public static final long UHV = V[VoltageIndex.UHV]; + public static final long UEV = V[VoltageIndex.UEV]; + public static final long UIV = V[VoltageIndex.UIV]; + public static final long UMV = V[VoltageIndex.UMV]; + public static final long UXV = V[VoltageIndex.UXV]; + public static final long MAX = V[VoltageIndex.MAX]; // Use me for recipes. - public static final long RECIPE_ULV = GT_Values.VP[GTVoltageIndex.ULV]; - public static final long RECIPE_LV = GT_Values.VP[GTVoltageIndex.LV]; - public static final long RECIPE_MV = GT_Values.VP[GTVoltageIndex.MV]; - public static final long RECIPE_HV = GT_Values.VP[GTVoltageIndex.HV]; - public static final long RECIPE_EV = GT_Values.VP[GTVoltageIndex.EV]; - public static final long RECIPE_IV = GT_Values.VP[GTVoltageIndex.IV]; - public static final long RECIPE_LuV = GT_Values.VP[GTVoltageIndex.LuV]; - public static final long RECIPE_ZPM = GT_Values.VP[GTVoltageIndex.ZPM]; - public static final long RECIPE_UV = GT_Values.VP[GTVoltageIndex.UV]; - public static final long RECIPE_UHV = GT_Values.VP[GTVoltageIndex.UHV]; - public static final long RECIPE_UEV = GT_Values.VP[GTVoltageIndex.UEV]; - public static final long RECIPE_UIV = GT_Values.VP[GTVoltageIndex.UIV]; - public static final long RECIPE_UMV = GT_Values.VP[GTVoltageIndex.UMV]; - public static final long RECIPE_UXV = GT_Values.VP[GTVoltageIndex.UXV]; - public static final long RECIPE_MAX = GT_Values.VP[GTVoltageIndex.MAX]; + public static final long RECIPE_ULV = GTValues.VP[VoltageIndex.ULV]; + public static final long RECIPE_LV = GTValues.VP[VoltageIndex.LV]; + public static final long RECIPE_MV = GTValues.VP[VoltageIndex.MV]; + public static final long RECIPE_HV = GTValues.VP[VoltageIndex.HV]; + public static final long RECIPE_EV = GTValues.VP[VoltageIndex.EV]; + public static final long RECIPE_IV = GTValues.VP[VoltageIndex.IV]; + public static final long RECIPE_LuV = GTValues.VP[VoltageIndex.LuV]; + public static final long RECIPE_ZPM = GTValues.VP[VoltageIndex.ZPM]; + public static final long RECIPE_UV = GTValues.VP[VoltageIndex.UV]; + public static final long RECIPE_UHV = GTValues.VP[VoltageIndex.UHV]; + public static final long RECIPE_UEV = GTValues.VP[VoltageIndex.UEV]; + public static final long RECIPE_UIV = GTValues.VP[VoltageIndex.UIV]; + public static final long RECIPE_UMV = GTValues.VP[VoltageIndex.UMV]; + public static final long RECIPE_UXV = GTValues.VP[VoltageIndex.UXV]; + public static final long RECIPE_MAX = GTValues.VP[VoltageIndex.MAX]; } diff --git a/src/main/java/gregtech/api/enums/VoidingMode.java b/src/main/java/gregtech/api/enums/VoidingMode.java index 8ae9dda57d..c41236c8ab 100644 --- a/src/main/java/gregtech/api/enums/VoidingMode.java +++ b/src/main/java/gregtech/api/enums/VoidingMode.java @@ -8,28 +8,27 @@ import javax.annotation.Nonnull; import com.gtnewhorizons.modularui.api.drawable.UITexture; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; public enum VoidingMode { /** * Voids nothing, protects both item and fluid */ - VOID_NONE(true, true, GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_VOID_EXCESS_NONE, "none"), + VOID_NONE(true, true, GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_VOID_EXCESS_NONE, "none"), /** * Voids item, protects fluid */ - VOID_ITEM(false, true, GT_UITextures.BUTTON_STANDARD_PRESSED, GT_UITextures.OVERLAY_BUTTON_VOID_EXCESS_ITEM, - "item"), + VOID_ITEM(false, true, GTUITextures.BUTTON_STANDARD_PRESSED, GTUITextures.OVERLAY_BUTTON_VOID_EXCESS_ITEM, "item"), /** * Voids fluid, protects item */ - VOID_FLUID(true, false, GT_UITextures.BUTTON_STANDARD_PRESSED, GT_UITextures.OVERLAY_BUTTON_VOID_EXCESS_FLUID, + VOID_FLUID(true, false, GTUITextures.BUTTON_STANDARD_PRESSED, GTUITextures.OVERLAY_BUTTON_VOID_EXCESS_FLUID, "fluid"), /** * Voids all, protects nothing */ - VOID_ALL(false, false, GT_UITextures.BUTTON_STANDARD_PRESSED, GT_UITextures.OVERLAY_BUTTON_VOID_EXCESS_ALL, "all"); + VOID_ALL(false, false, GTUITextures.BUTTON_STANDARD_PRESSED, GTUITextures.OVERLAY_BUTTON_VOID_EXCESS_ALL, "all"); /** * Default set of voiding mode you will probably support. diff --git a/src/main/java/gregtech/api/enums/VoltageIndex.java b/src/main/java/gregtech/api/enums/VoltageIndex.java new file mode 100644 index 0000000000..f0303b27b0 --- /dev/null +++ b/src/main/java/gregtech/api/enums/VoltageIndex.java @@ -0,0 +1,22 @@ +package gregtech.api.enums; + +public class VoltageIndex { + + public final static int ULV = 0; + public final static int LV = 1; + public final static int MV = 2; + public final static int HV = 3; + public final static int EV = 4; + public final static int IV = 5; + public final static int LuV = 6; + public final static int ZPM = 7; + public final static int UV = 8; + public final static int UHV = 9; + public final static int UEV = 10; + public final static int UIV = 11; + public final static int UMV = 12; + public final static int UXV = 13; + public final static int MAX = 14; + + private VoltageIndex() {} +} diff --git a/src/main/java/gregtech/api/fluid/FluidTankGT.java b/src/main/java/gregtech/api/fluid/FluidTankGT.java deleted file mode 100644 index 0c224985e6..0000000000 --- a/src/main/java/gregtech/api/fluid/FluidTankGT.java +++ /dev/null @@ -1,485 +0,0 @@ -package gregtech.api.fluid; - -import static com.google.common.primitives.Ints.saturatedCast; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import javax.annotation.Nonnull; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidTank; - -import gregtech.api.interfaces.fluid.IFluidStore; -import gregtech.api.util.GT_Utility; - -public class FluidTankGT implements IFluidTank, IFluidStore { - - public final FluidTankGT[] AS_ARRAY = new FluidTankGT[] { this }; - private FluidStack mFluid; - private long mCapacity = 0, mAmount = 0; - private boolean mPreventDraining = false, mVoidExcess = false, mChangedFluids = false; - /** HashMap of adjustable Tank Sizes based on Fluids if needed. */ - private Map mAdjustableCapacity = null; - - private long mAdjustableMultiplier = 1; - /** Gives you a Tank Index in case there is multiple Tanks on a TileEntity that cares. */ - public int mIndex = 0; - - public FluidTankGT() { - mCapacity = Long.MAX_VALUE; - } - - public FluidTankGT(long aCapacity) { - mCapacity = aCapacity; - } - - public FluidTankGT(FluidStack aFluid) { - mFluid = aFluid; - if (aFluid != null) { - mCapacity = aFluid.amount; - mAmount = aFluid.amount; - } - } - - public FluidTankGT(FluidStack aFluid, long aCapacity) { - mFluid = aFluid; - mCapacity = aCapacity; - mAmount = (aFluid == null ? 0 : aFluid.amount); - } - - public FluidTankGT(FluidStack aFluid, long aAmount, long aCapacity) { - mFluid = aFluid; - mCapacity = aCapacity; - mAmount = (aFluid == null ? 0 : aAmount); - } - - public FluidTankGT(Fluid aFluid, long aAmount) { - this(new FluidStack(aFluid, saturatedCast(aAmount))); - mAmount = aAmount; - } - - public FluidTankGT(Fluid aFluid, long aAmount, long aCapacity) { - this(new FluidStack(aFluid, saturatedCast(aAmount)), aCapacity); - mAmount = aAmount; - } - - public FluidTankGT(NBTTagCompound aNBT, String aKey, long aCapacity) { - this(aNBT.hasKey(aKey) ? aNBT.getCompoundTag(aKey) : null, aCapacity); - } - - public FluidTankGT(NBTTagCompound aNBT, long aCapacity) { - mCapacity = aCapacity; - if (aNBT != null && !aNBT.hasNoTags()) { - mFluid = FluidStack.loadFluidStackFromNBT(aNBT); - mAmount = (isEmpty() ? 0 : aNBT.hasKey("LAmount") ? aNBT.getLong("LAmount") : mFluid.amount); - } - } - - public FluidTankGT readFromNBT(NBTTagCompound aNBT, String aKey) { - if (aNBT.hasKey(aKey)) { - aNBT = aNBT.getCompoundTag(aKey); - if (aNBT != null && !aNBT.hasNoTags()) { - mFluid = FluidStack.loadFluidStackFromNBT(aNBT); - mAmount = (isEmpty() ? 0 : aNBT.hasKey("LAmount") ? aNBT.getLong("LAmount") : mFluid.amount); - } - } - return this; - } - - public NBTTagCompound writeToNBT(NBTTagCompound aNBT, String aKey) { - if (mFluid != null && (mPreventDraining || mAmount > 0)) { - final NBTTagCompound tNBT = new NBTTagCompound(); - mFluid.amount = (int) mAmount; - aNBT.setTag(aKey, mFluid.writeToNBT(tNBT)); - if (mAmount > Integer.MAX_VALUE) tNBT.setLong("LAmount", mAmount); - } else { - aNBT.removeTag(aKey); - } - return aNBT; - } - - public FluidStack drain(int aDrained) { - return drain(aDrained, true); - } - - @Override - public FluidStack drain(int aDrained, boolean aDoDrain) { - if (isEmpty() || aDrained <= 0) return null; - if (mAmount < aDrained) aDrained = (int) mAmount; - final FluidStack rFluid = new FluidStack(mFluid, aDrained); - if (aDoDrain) { - mAmount -= aDrained; - if (mAmount <= 0) { - if (mPreventDraining) { - mAmount = 0; - } else { - setEmpty(); - } - } - } - return rFluid; - } - - public boolean drainAll(long aDrained) { - if (isEmpty() || mAmount < aDrained) return false; - mAmount -= aDrained; - if (mAmount <= 0) { - if (mPreventDraining) { - mAmount = 0; - } else { - setEmpty(); - } - } - return true; - } - - public long remove(long aDrained) { - if (isEmpty() || mAmount <= 0 || aDrained <= 0) return 0; - if (mAmount < aDrained) aDrained = mAmount; - mAmount -= aDrained; - if (mAmount <= 0) { - if (mPreventDraining) { - mAmount = 0; - } else { - setEmpty(); - } - } - return aDrained; - } - - public long add(long aFilled) { - if (isEmpty() || aFilled <= 0) return 0; - final long tCapacity = capacity(); - if (mAmount + aFilled > tCapacity) { - if (!mVoidExcess) aFilled = tCapacity - mAmount; - mAmount = tCapacity; - return aFilled; - } - mAmount += aFilled; - return aFilled; - } - - public long add(long aFilled, FluidStack aFluid) { - if (aFluid == null || aFilled <= 0) return 0; - if (isEmpty()) { - mFluid = aFluid.copy(); - mChangedFluids = true; - mAmount = Math.min(capacity(aFluid), aFilled); - return mVoidExcess ? aFilled : mAmount; - } - return contains(aFluid) ? add(aFilled) : 0; - } - - public int fill(FluidStack aFluid) { - return fill(aFluid, true); - } - - @Override - public int fill(FluidStack aFluid, boolean aDoFill) { - if (aFluid == null) return 0; - if (aDoFill) { - if (isEmpty()) { - mFluid = aFluid.copy(); - mChangedFluids = true; - mAmount = Math.min(capacity(aFluid), aFluid.amount); - return mVoidExcess ? aFluid.amount : (int) mAmount; - } - if (!contains(aFluid)) return 0; - final long tCapacity = capacity(aFluid); - long tFilled = tCapacity - mAmount; - if (aFluid.amount < tFilled) { - mAmount += aFluid.amount; - tFilled = aFluid.amount; - } else mAmount = tCapacity; - return mVoidExcess ? aFluid.amount : (int) tFilled; - } - return saturatedCast( - isEmpty() ? mVoidExcess ? aFluid.amount : Math.min(capacity(aFluid), aFluid.amount) - : contains(aFluid) ? mVoidExcess ? aFluid.amount : Math.min(capacity(aFluid) - mAmount, aFluid.amount) - : 0); - } - - public boolean canFillAll(FluidStack aFluid) { - return aFluid == null || aFluid.amount <= 0 - || (isEmpty() ? mVoidExcess || aFluid.amount <= capacity(aFluid) - : contains(aFluid) && (mVoidExcess || mAmount + aFluid.amount <= capacity(aFluid))); - } - - public boolean canFillAll(long aAmount) { - return aAmount <= 0 || mVoidExcess || mAmount + aAmount <= capacity(); - } - - public boolean fillAll(FluidStack aFluid) { - if (aFluid == null || aFluid.amount <= 0) return true; - if (isEmpty()) { - final long tCapacity = capacity(aFluid); - if (aFluid.amount <= tCapacity || mVoidExcess) { - mFluid = aFluid.copy(); - mChangedFluids = true; - mAmount = aFluid.amount; - if (mAmount > tCapacity) mAmount = tCapacity; - return true; - } - return false; - } - if (contains(aFluid)) { - if (mAmount + aFluid.amount <= capacity()) { - mAmount += aFluid.amount; - return true; - } - if (mVoidExcess) { - mAmount = capacity(); - return true; - } - } - return false; - } - - public boolean fillAll(FluidStack aFluid, long aMultiplier) { - if (aMultiplier <= 0) return true; - if (aMultiplier == 1) return fillAll(aFluid); - if (aFluid == null || aFluid.amount <= 0) return true; - if (isEmpty()) { - final long tCapacity = capacity(aFluid); - if (aFluid.amount * aMultiplier <= tCapacity || mVoidExcess) { - mFluid = aFluid.copy(); - mChangedFluids = true; - mAmount = aFluid.amount * aMultiplier; - if (mAmount > tCapacity) mAmount = tCapacity; - return true; - } - return false; - } - if (contains(aFluid)) { - if (mAmount + aFluid.amount * aMultiplier <= capacity()) { - mAmount += aFluid.amount * aMultiplier; - return true; - } - if (mVoidExcess) { - mAmount = capacity(); - return true; - } - } - return false; - } - - /** Resets Tank Contents entirely */ - public FluidTankGT setEmpty() { - mFluid = null; - mChangedFluids = true; - mAmount = 0; - return this; - } - - /** Sets Fluid Content, taking Amount from the Fluid Parameter */ - public FluidTankGT setFluid(FluidStack aFluid) { - mFluid = aFluid; - mChangedFluids = true; - mAmount = (aFluid == null ? 0 : aFluid.amount); - return this; - } - - /** Sets Fluid Content and Amount */ - public FluidTankGT setFluid(FluidStack aFluid, long aAmount) { - mFluid = aFluid; - mChangedFluids = true; - mAmount = (aFluid == null ? 0 : aAmount); - return this; - } - - /** Sets Fluid Content, taking Amount from the Tank Parameter */ - public FluidTankGT setFluid(FluidTankGT aTank) { - mFluid = new FluidStack(aTank.mFluid, saturatedCast(aTank.mAmount)); - mChangedFluids = true; - mAmount = aTank.mAmount; - return this; - } - - /** Sets the Tank Index for easier Reverse Mapping. */ - public FluidTankGT setIndex(int aIndex) { - mIndex = aIndex; - return this; - } - - /** Sets the Capacity */ - public FluidTankGT setCapacity(long aCapacity) { - if (aCapacity >= 0) mCapacity = aCapacity; - return this; - } - - /** Sets the Capacity Multiplier */ - public FluidTankGT setCapacityMultiplier(long aCapacityMultiplier) { - if (aCapacityMultiplier >= 0) mAdjustableMultiplier = aCapacityMultiplier; - return this; - } - - /** Sets Tank capacity Map, should it be needed. */ - public FluidTankGT setCapacity(Map aMap, long aCapacityMultiplier) { - mAdjustableCapacity = aMap; - mAdjustableMultiplier = aCapacityMultiplier; - return this; - } - - /** Always keeps at least 0 Liters of Fluid instead of setting it to null */ - public FluidTankGT setPreventDraining() { - return setPreventDraining(true); - } - - /** Always keeps at least 0 Liters of Fluid instead of setting it to null */ - public FluidTankGT setPreventDraining(boolean aPrevent) { - mPreventDraining = aPrevent; - return this; - } - - /** Voids any Overlow */ - public FluidTankGT setVoidExcess() { - return setVoidExcess(true); - } - - /** Voids any Overlow */ - public FluidTankGT setVoidExcess(boolean aVoidExcess) { - mVoidExcess = aVoidExcess; - return this; - } - - public boolean isFull() { - return mFluid != null && mAmount >= capacity(); - } - - public long capacity() { - return capacity(mFluid); - } - - public long capacity(FluidStack aFluid) { - if (mAdjustableCapacity == null || aFluid == null) return mCapacity; - return capacity(aFluid.getFluid()); - } - - public long capacity(Fluid aFluid) { - if (mAdjustableCapacity == null || aFluid == null) return mCapacity; - return capacity(aFluid.getName()); - } - - public long capacity(String aFluid) { - if (mAdjustableCapacity == null || aFluid == null) return mCapacity; - - final Long tSize = mAdjustableCapacity.get(aFluid); - return tSize == null ? Math.max(mAmount, mCapacity) - : Math.max(tSize * mAdjustableMultiplier, Math.max(mAmount, mCapacity)); - } - - public boolean isHalf() { - return mFluid != null && mAmount * 2 >= capacity(); - } - - public boolean contains(Fluid aFluid) { - return mFluid != null && mFluid.getFluid() == aFluid; - } - - public boolean contains(FluidStack aFluid) { - return GT_Utility.areFluidsEqual(mFluid, aFluid); - } - - public boolean has(long aAmount) { - return mAmount >= aAmount; - } - - public boolean has() { - return mAmount > 0; - } - - public boolean check() { - if (mChangedFluids) { - mChangedFluids = false; - return true; - } - return false; - } - - public boolean update() { - return mChangedFluids = true; - } - - public boolean changed() { - return mChangedFluids; - } - - public long amount() { - return isEmpty() ? 0 : mAmount; - } - - public boolean isEmpty() { - return mFluid == null; - } - - public long amount(long aMax) { - return isEmpty() || aMax <= 0 ? 0 : Math.min(mAmount, aMax); - } - - public String name() { - return mFluid == null ? null - : mFluid.getFluid() - .getName(); - } - - public FluidStack get() { - return mFluid; - } - - public FluidStack get(long aMax) { - return isEmpty() || aMax <= 0 ? null : new FluidStack(mFluid, saturatedCast(Math.min(mAmount, aMax))); - } - - @Override - public FluidStack getFluid() { - if (mFluid != null) mFluid.amount = saturatedCast(mAmount); - return mFluid; - } - - @Override - public int getFluidAmount() { - return saturatedCast(mAmount); - } - - @Override - public int getCapacity() { - return saturatedCast(capacity()); - } - - public long getCapacityMultiplier() { - return mAdjustableMultiplier; - } - - @Override - public FluidTankInfo getInfo() { - return new FluidTankInfo(isEmpty() ? null : mFluid.copy(), saturatedCast(capacity())); - } - - public static FluidStack[] getFluidsFromTanks(FluidTankGT[] tanks) { - if (tanks == null) { - return null; - } - List fluidStacks = new ArrayList<>(); - for (FluidTankGT tank : tanks) { - if (tank.getFluid() != null) { - fluidStacks.add(tank.getFluid()); - } - } - return fluidStacks.toArray(new FluidStack[0]); - } - - @Override - public boolean isEmptyAndAcceptsAnyFluid() { - return getFluidAmount() == 0; - } - - @Override - public boolean canStoreFluid(@Nonnull FluidStack fluidStack) { - return GT_Utility.areFluidsEqual(mFluid, fluidStack); - } -} diff --git a/src/main/java/gregtech/api/fluid/GTFluidFactory.java b/src/main/java/gregtech/api/fluid/GTFluidFactory.java new file mode 100644 index 0000000000..291cdf3384 --- /dev/null +++ b/src/main/java/gregtech/api/fluid/GTFluidFactory.java @@ -0,0 +1,90 @@ +package gregtech.api.fluid; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidRegistry; + +import gregtech.api.enums.FluidState; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.fluid.IGTFluid; +import gregtech.api.interfaces.fluid.IGTFluidBuilder; +import gregtech.common.fluid.GTFluidBuilder; + +/** + *

+ * This class contains helpers factory methods to: + *

+ *
    + *
  1. + *

    + * Build {@link IGTFluid} instances. + *

    + *
  2. + *
  3. + *

    + * Register the corresponding {@link Fluid}, built from an {@link IGTFluid}, to the {@link FluidRegistry}: + *

    + *
      + *
    • + *

      + * Register the optionally associated containers to the {@link FluidContainerRegistry}. + *

      + *
    • + *
    • + *

      + * Add the needed Fluid Canner recipes. + *

      + *
    • + *
    + *
  4. + *
+ */ +@SuppressWarnings("unused") // API might legitimately expose unused methods within this local project's scope +public class GTFluidFactory { + + /** + * Helper for quick fluid creation and registration + * + * @param fluidName The name key of the {@link Fluid} to register in the {@link FluidRegistry} + * @param localizedName The localized name of this {@link IGTFluid} + * @param material The {@link Materials} of this {@link IGTFluid} + * @param state The {@link FluidState} of this {@link IGTFluid} + * @param temperature The fluid temperature in Kelvin + * @return the registered {@link Fluid} + */ + public static Fluid of(final String fluidName, final String localizedName, final Materials material, + final FluidState state, final int temperature) { + return builder(fluidName).withLocalizedName(localizedName) + .withStateAndTemperature(state, temperature) + .buildAndRegister() + .configureMaterials(material) + .asFluid(); + } + + /** + * Helper for quick fluid creation and registration + * + * @param fluidName The name key of the {@link Fluid} to register in the {@link FluidRegistry} + * @param localizedName The localized name of this {@link IGTFluid} + * @param state The {@link FluidState} of this {@link IGTFluid} + * @param temperature The fluid temperature in Kelvin + * @return the registered {@link Fluid} + */ + public static Fluid of(final String fluidName, final String localizedName, final FluidState state, + final int temperature) { + return builder(fluidName).withLocalizedName(localizedName) + .withStateAndTemperature(state, temperature) + .buildAndRegister() + .asFluid(); + } + + /** + * Gets an {@link IGTFluid} builder instance + * + * @param fluidName The name key of the {@link Fluid} to register in the {@link FluidRegistry} + * @return the {@link IGTFluidBuilder} instance + */ + public static IGTFluidBuilder builder(final String fluidName) { + return new GTFluidBuilder(fluidName); + } +} diff --git a/src/main/java/gregtech/api/fluid/GTFluidTank.java b/src/main/java/gregtech/api/fluid/GTFluidTank.java new file mode 100644 index 0000000000..46fc098000 --- /dev/null +++ b/src/main/java/gregtech/api/fluid/GTFluidTank.java @@ -0,0 +1,485 @@ +package gregtech.api.fluid; + +import static com.google.common.primitives.Ints.saturatedCast; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import javax.annotation.Nonnull; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidTank; + +import gregtech.api.interfaces.fluid.IFluidStore; +import gregtech.api.util.GTUtility; + +public class GTFluidTank implements IFluidTank, IFluidStore { + + public final GTFluidTank[] AS_ARRAY = new GTFluidTank[] { this }; + private FluidStack mFluid; + private long mCapacity = 0, mAmount = 0; + private boolean mPreventDraining = false, mVoidExcess = false, mChangedFluids = false; + /** HashMap of adjustable Tank Sizes based on Fluids if needed. */ + private Map mAdjustableCapacity = null; + + private long mAdjustableMultiplier = 1; + /** Gives you a Tank Index in case there is multiple Tanks on a TileEntity that cares. */ + public int mIndex = 0; + + public GTFluidTank() { + mCapacity = Long.MAX_VALUE; + } + + public GTFluidTank(long aCapacity) { + mCapacity = aCapacity; + } + + public GTFluidTank(FluidStack aFluid) { + mFluid = aFluid; + if (aFluid != null) { + mCapacity = aFluid.amount; + mAmount = aFluid.amount; + } + } + + public GTFluidTank(FluidStack aFluid, long aCapacity) { + mFluid = aFluid; + mCapacity = aCapacity; + mAmount = (aFluid == null ? 0 : aFluid.amount); + } + + public GTFluidTank(FluidStack aFluid, long aAmount, long aCapacity) { + mFluid = aFluid; + mCapacity = aCapacity; + mAmount = (aFluid == null ? 0 : aAmount); + } + + public GTFluidTank(Fluid aFluid, long aAmount) { + this(new FluidStack(aFluid, saturatedCast(aAmount))); + mAmount = aAmount; + } + + public GTFluidTank(Fluid aFluid, long aAmount, long aCapacity) { + this(new FluidStack(aFluid, saturatedCast(aAmount)), aCapacity); + mAmount = aAmount; + } + + public GTFluidTank(NBTTagCompound aNBT, String aKey, long aCapacity) { + this(aNBT.hasKey(aKey) ? aNBT.getCompoundTag(aKey) : null, aCapacity); + } + + public GTFluidTank(NBTTagCompound aNBT, long aCapacity) { + mCapacity = aCapacity; + if (aNBT != null && !aNBT.hasNoTags()) { + mFluid = FluidStack.loadFluidStackFromNBT(aNBT); + mAmount = (isEmpty() ? 0 : aNBT.hasKey("LAmount") ? aNBT.getLong("LAmount") : mFluid.amount); + } + } + + public GTFluidTank readFromNBT(NBTTagCompound aNBT, String aKey) { + if (aNBT.hasKey(aKey)) { + aNBT = aNBT.getCompoundTag(aKey); + if (aNBT != null && !aNBT.hasNoTags()) { + mFluid = FluidStack.loadFluidStackFromNBT(aNBT); + mAmount = (isEmpty() ? 0 : aNBT.hasKey("LAmount") ? aNBT.getLong("LAmount") : mFluid.amount); + } + } + return this; + } + + public NBTTagCompound writeToNBT(NBTTagCompound aNBT, String aKey) { + if (mFluid != null && (mPreventDraining || mAmount > 0)) { + final NBTTagCompound tNBT = new NBTTagCompound(); + mFluid.amount = (int) mAmount; + aNBT.setTag(aKey, mFluid.writeToNBT(tNBT)); + if (mAmount > Integer.MAX_VALUE) tNBT.setLong("LAmount", mAmount); + } else { + aNBT.removeTag(aKey); + } + return aNBT; + } + + public FluidStack drain(int aDrained) { + return drain(aDrained, true); + } + + @Override + public FluidStack drain(int aDrained, boolean aDoDrain) { + if (isEmpty() || aDrained <= 0) return null; + if (mAmount < aDrained) aDrained = (int) mAmount; + final FluidStack rFluid = new FluidStack(mFluid, aDrained); + if (aDoDrain) { + mAmount -= aDrained; + if (mAmount <= 0) { + if (mPreventDraining) { + mAmount = 0; + } else { + setEmpty(); + } + } + } + return rFluid; + } + + public boolean drainAll(long aDrained) { + if (isEmpty() || mAmount < aDrained) return false; + mAmount -= aDrained; + if (mAmount <= 0) { + if (mPreventDraining) { + mAmount = 0; + } else { + setEmpty(); + } + } + return true; + } + + public long remove(long aDrained) { + if (isEmpty() || mAmount <= 0 || aDrained <= 0) return 0; + if (mAmount < aDrained) aDrained = mAmount; + mAmount -= aDrained; + if (mAmount <= 0) { + if (mPreventDraining) { + mAmount = 0; + } else { + setEmpty(); + } + } + return aDrained; + } + + public long add(long aFilled) { + if (isEmpty() || aFilled <= 0) return 0; + final long tCapacity = capacity(); + if (mAmount + aFilled > tCapacity) { + if (!mVoidExcess) aFilled = tCapacity - mAmount; + mAmount = tCapacity; + return aFilled; + } + mAmount += aFilled; + return aFilled; + } + + public long add(long aFilled, FluidStack aFluid) { + if (aFluid == null || aFilled <= 0) return 0; + if (isEmpty()) { + mFluid = aFluid.copy(); + mChangedFluids = true; + mAmount = Math.min(capacity(aFluid), aFilled); + return mVoidExcess ? aFilled : mAmount; + } + return contains(aFluid) ? add(aFilled) : 0; + } + + public int fill(FluidStack aFluid) { + return fill(aFluid, true); + } + + @Override + public int fill(FluidStack aFluid, boolean aDoFill) { + if (aFluid == null) return 0; + if (aDoFill) { + if (isEmpty()) { + mFluid = aFluid.copy(); + mChangedFluids = true; + mAmount = Math.min(capacity(aFluid), aFluid.amount); + return mVoidExcess ? aFluid.amount : (int) mAmount; + } + if (!contains(aFluid)) return 0; + final long tCapacity = capacity(aFluid); + long tFilled = tCapacity - mAmount; + if (aFluid.amount < tFilled) { + mAmount += aFluid.amount; + tFilled = aFluid.amount; + } else mAmount = tCapacity; + return mVoidExcess ? aFluid.amount : (int) tFilled; + } + return saturatedCast( + isEmpty() ? mVoidExcess ? aFluid.amount : Math.min(capacity(aFluid), aFluid.amount) + : contains(aFluid) ? mVoidExcess ? aFluid.amount : Math.min(capacity(aFluid) - mAmount, aFluid.amount) + : 0); + } + + public boolean canFillAll(FluidStack aFluid) { + return aFluid == null || aFluid.amount <= 0 + || (isEmpty() ? mVoidExcess || aFluid.amount <= capacity(aFluid) + : contains(aFluid) && (mVoidExcess || mAmount + aFluid.amount <= capacity(aFluid))); + } + + public boolean canFillAll(long aAmount) { + return aAmount <= 0 || mVoidExcess || mAmount + aAmount <= capacity(); + } + + public boolean fillAll(FluidStack aFluid) { + if (aFluid == null || aFluid.amount <= 0) return true; + if (isEmpty()) { + final long tCapacity = capacity(aFluid); + if (aFluid.amount <= tCapacity || mVoidExcess) { + mFluid = aFluid.copy(); + mChangedFluids = true; + mAmount = aFluid.amount; + if (mAmount > tCapacity) mAmount = tCapacity; + return true; + } + return false; + } + if (contains(aFluid)) { + if (mAmount + aFluid.amount <= capacity()) { + mAmount += aFluid.amount; + return true; + } + if (mVoidExcess) { + mAmount = capacity(); + return true; + } + } + return false; + } + + public boolean fillAll(FluidStack aFluid, long aMultiplier) { + if (aMultiplier <= 0) return true; + if (aMultiplier == 1) return fillAll(aFluid); + if (aFluid == null || aFluid.amount <= 0) return true; + if (isEmpty()) { + final long tCapacity = capacity(aFluid); + if (aFluid.amount * aMultiplier <= tCapacity || mVoidExcess) { + mFluid = aFluid.copy(); + mChangedFluids = true; + mAmount = aFluid.amount * aMultiplier; + if (mAmount > tCapacity) mAmount = tCapacity; + return true; + } + return false; + } + if (contains(aFluid)) { + if (mAmount + aFluid.amount * aMultiplier <= capacity()) { + mAmount += aFluid.amount * aMultiplier; + return true; + } + if (mVoidExcess) { + mAmount = capacity(); + return true; + } + } + return false; + } + + /** Resets Tank Contents entirely */ + public GTFluidTank setEmpty() { + mFluid = null; + mChangedFluids = true; + mAmount = 0; + return this; + } + + /** Sets Fluid Content, taking Amount from the Fluid Parameter */ + public GTFluidTank setFluid(FluidStack aFluid) { + mFluid = aFluid; + mChangedFluids = true; + mAmount = (aFluid == null ? 0 : aFluid.amount); + return this; + } + + /** Sets Fluid Content and Amount */ + public GTFluidTank setFluid(FluidStack aFluid, long aAmount) { + mFluid = aFluid; + mChangedFluids = true; + mAmount = (aFluid == null ? 0 : aAmount); + return this; + } + + /** Sets Fluid Content, taking Amount from the Tank Parameter */ + public GTFluidTank setFluid(GTFluidTank aTank) { + mFluid = new FluidStack(aTank.mFluid, saturatedCast(aTank.mAmount)); + mChangedFluids = true; + mAmount = aTank.mAmount; + return this; + } + + /** Sets the Tank Index for easier Reverse Mapping. */ + public GTFluidTank setIndex(int aIndex) { + mIndex = aIndex; + return this; + } + + /** Sets the Capacity */ + public GTFluidTank setCapacity(long aCapacity) { + if (aCapacity >= 0) mCapacity = aCapacity; + return this; + } + + /** Sets the Capacity Multiplier */ + public GTFluidTank setCapacityMultiplier(long aCapacityMultiplier) { + if (aCapacityMultiplier >= 0) mAdjustableMultiplier = aCapacityMultiplier; + return this; + } + + /** Sets Tank capacity Map, should it be needed. */ + public GTFluidTank setCapacity(Map aMap, long aCapacityMultiplier) { + mAdjustableCapacity = aMap; + mAdjustableMultiplier = aCapacityMultiplier; + return this; + } + + /** Always keeps at least 0 Liters of Fluid instead of setting it to null */ + public GTFluidTank setPreventDraining() { + return setPreventDraining(true); + } + + /** Always keeps at least 0 Liters of Fluid instead of setting it to null */ + public GTFluidTank setPreventDraining(boolean aPrevent) { + mPreventDraining = aPrevent; + return this; + } + + /** Voids any Overlow */ + public GTFluidTank setVoidExcess() { + return setVoidExcess(true); + } + + /** Voids any Overlow */ + public GTFluidTank setVoidExcess(boolean aVoidExcess) { + mVoidExcess = aVoidExcess; + return this; + } + + public boolean isFull() { + return mFluid != null && mAmount >= capacity(); + } + + public long capacity() { + return capacity(mFluid); + } + + public long capacity(FluidStack aFluid) { + if (mAdjustableCapacity == null || aFluid == null) return mCapacity; + return capacity(aFluid.getFluid()); + } + + public long capacity(Fluid aFluid) { + if (mAdjustableCapacity == null || aFluid == null) return mCapacity; + return capacity(aFluid.getName()); + } + + public long capacity(String aFluid) { + if (mAdjustableCapacity == null || aFluid == null) return mCapacity; + + final Long tSize = mAdjustableCapacity.get(aFluid); + return tSize == null ? Math.max(mAmount, mCapacity) + : Math.max(tSize * mAdjustableMultiplier, Math.max(mAmount, mCapacity)); + } + + public boolean isHalf() { + return mFluid != null && mAmount * 2 >= capacity(); + } + + public boolean contains(Fluid aFluid) { + return mFluid != null && mFluid.getFluid() == aFluid; + } + + public boolean contains(FluidStack aFluid) { + return GTUtility.areFluidsEqual(mFluid, aFluid); + } + + public boolean has(long aAmount) { + return mAmount >= aAmount; + } + + public boolean has() { + return mAmount > 0; + } + + public boolean check() { + if (mChangedFluids) { + mChangedFluids = false; + return true; + } + return false; + } + + public boolean update() { + return mChangedFluids = true; + } + + public boolean changed() { + return mChangedFluids; + } + + public long amount() { + return isEmpty() ? 0 : mAmount; + } + + public boolean isEmpty() { + return mFluid == null; + } + + public long amount(long aMax) { + return isEmpty() || aMax <= 0 ? 0 : Math.min(mAmount, aMax); + } + + public String name() { + return mFluid == null ? null + : mFluid.getFluid() + .getName(); + } + + public FluidStack get() { + return mFluid; + } + + public FluidStack get(long aMax) { + return isEmpty() || aMax <= 0 ? null : new FluidStack(mFluid, saturatedCast(Math.min(mAmount, aMax))); + } + + @Override + public FluidStack getFluid() { + if (mFluid != null) mFluid.amount = saturatedCast(mAmount); + return mFluid; + } + + @Override + public int getFluidAmount() { + return saturatedCast(mAmount); + } + + @Override + public int getCapacity() { + return saturatedCast(capacity()); + } + + public long getCapacityMultiplier() { + return mAdjustableMultiplier; + } + + @Override + public FluidTankInfo getInfo() { + return new FluidTankInfo(isEmpty() ? null : mFluid.copy(), saturatedCast(capacity())); + } + + public static FluidStack[] getFluidsFromTanks(GTFluidTank[] tanks) { + if (tanks == null) { + return null; + } + List fluidStacks = new ArrayList<>(); + for (GTFluidTank tank : tanks) { + if (tank.getFluid() != null) { + fluidStacks.add(tank.getFluid()); + } + } + return fluidStacks.toArray(new FluidStack[0]); + } + + @Override + public boolean isEmptyAndAcceptsAnyFluid() { + return getFluidAmount() == 0; + } + + @Override + public boolean canStoreFluid(@Nonnull FluidStack fluidStack) { + return GTUtility.areFluidsEqual(mFluid, fluidStack); + } +} diff --git a/src/main/java/gregtech/api/fluid/GT_FluidFactory.java b/src/main/java/gregtech/api/fluid/GT_FluidFactory.java deleted file mode 100644 index 7c65956c69..0000000000 --- a/src/main/java/gregtech/api/fluid/GT_FluidFactory.java +++ /dev/null @@ -1,90 +0,0 @@ -package gregtech.api.fluid; - -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidRegistry; - -import gregtech.api.enums.FluidState; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.fluid.IGT_Fluid; -import gregtech.api.interfaces.fluid.IGT_FluidBuilder; -import gregtech.common.fluid.GT_FluidBuilder; - -/** - *

- * This class contains helpers factory methods to: - *

- *
    - *
  1. - *

    - * Build {@link IGT_Fluid} instances. - *

    - *
  2. - *
  3. - *

    - * Register the corresponding {@link Fluid}, built from an {@link IGT_Fluid}, to the {@link FluidRegistry}: - *

    - *
      - *
    • - *

      - * Register the optionally associated containers to the {@link FluidContainerRegistry}. - *

      - *
    • - *
    • - *

      - * Add the needed Fluid Canner recipes. - *

      - *
    • - *
    - *
  4. - *
- */ -@SuppressWarnings("unused") // API might legitimately expose unused methods within this local project's scope -public class GT_FluidFactory { - - /** - * Helper for quick fluid creation and registration - * - * @param fluidName The name key of the {@link Fluid} to register in the {@link FluidRegistry} - * @param localizedName The localized name of this {@link IGT_Fluid} - * @param material The {@link Materials} of this {@link IGT_Fluid} - * @param state The {@link FluidState} of this {@link IGT_Fluid} - * @param temperature The fluid temperature in Kelvin - * @return the registered {@link Fluid} - */ - public static Fluid of(final String fluidName, final String localizedName, final Materials material, - final FluidState state, final int temperature) { - return builder(fluidName).withLocalizedName(localizedName) - .withStateAndTemperature(state, temperature) - .buildAndRegister() - .configureMaterials(material) - .asFluid(); - } - - /** - * Helper for quick fluid creation and registration - * - * @param fluidName The name key of the {@link Fluid} to register in the {@link FluidRegistry} - * @param localizedName The localized name of this {@link IGT_Fluid} - * @param state The {@link FluidState} of this {@link IGT_Fluid} - * @param temperature The fluid temperature in Kelvin - * @return the registered {@link Fluid} - */ - public static Fluid of(final String fluidName, final String localizedName, final FluidState state, - final int temperature) { - return builder(fluidName).withLocalizedName(localizedName) - .withStateAndTemperature(state, temperature) - .buildAndRegister() - .asFluid(); - } - - /** - * Gets an {@link IGT_Fluid} builder instance - * - * @param fluidName The name key of the {@link Fluid} to register in the {@link FluidRegistry} - * @return the {@link IGT_FluidBuilder} instance - */ - public static IGT_FluidBuilder builder(final String fluidName) { - return new GT_FluidBuilder(fluidName); - } -} diff --git a/src/main/java/gregtech/api/graphs/GenerateNodeMap.java b/src/main/java/gregtech/api/graphs/GenerateNodeMap.java index 7289f0faad..7eb8382e87 100644 --- a/src/main/java/gregtech/api/graphs/GenerateNodeMap.java +++ b/src/main/java/gregtech/api/graphs/GenerateNodeMap.java @@ -1,6 +1,6 @@ package gregtech.api.graphs; -import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; +import static gregtech.api.enums.GTValues.ALL_VALID_SIDES; import java.util.ArrayList; import java.util.HashSet; diff --git a/src/main/java/gregtech/api/graphs/GenerateNodeMapPower.java b/src/main/java/gregtech/api/graphs/GenerateNodeMapPower.java index 95f9aee32d..4203bbdc0a 100644 --- a/src/main/java/gregtech/api/graphs/GenerateNodeMapPower.java +++ b/src/main/java/gregtech/api/graphs/GenerateNodeMapPower.java @@ -7,7 +7,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import cofh.api.energy.IEnergyReceiver; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.graphs.consumers.ConsumerNode; import gregtech.api.graphs.consumers.EmptyPowerConsumer; import gregtech.api.graphs.consumers.NodeEnergyConnected; @@ -20,7 +20,7 @@ import gregtech.api.interfaces.tileentity.IEnergyConnected; import gregtech.api.metatileentity.BaseMetaPipeEntity; import gregtech.api.metatileentity.BaseMetaTileEntity; import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; +import gregtech.api.metatileentity.implementations.MTECable; import ic2.api.energy.tile.IEnergySink; // node map generator for power distribution @@ -32,8 +32,7 @@ public class GenerateNodeMapPower extends GenerateNodeMap { @Override protected boolean isPipe(TileEntity aTileEntity) { - return super.isPipe(aTileEntity) - && ((BaseMetaPipeEntity) aTileEntity).getMetaTileEntity() instanceof GT_MetaPipeEntity_Cable; + return super.isPipe(aTileEntity) && ((BaseMetaPipeEntity) aTileEntity).getMetaTileEntity() instanceof MTECable; } @Override @@ -74,7 +73,7 @@ public class GenerateNodeMapPower extends GenerateNodeMap { aConsumers.add(tConsumerNode); return true; } - } else if (GregTech_API.mOutputRF && aTileEntity instanceof IEnergyReceiver receiver) { + } else if (GregTechAPI.mOutputRF && aTileEntity instanceof IEnergyReceiver receiver) { ConsumerNode tConsumerNode = new NodeEnergyReceiver(aNodeValue, receiver, side, aConsumers); aConsumers.add(tConsumerNode); return true; diff --git a/src/main/java/gregtech/api/graphs/consumers/NodeEnergyReceiver.java b/src/main/java/gregtech/api/graphs/consumers/NodeEnergyReceiver.java index 4f35922029..e9364f922b 100644 --- a/src/main/java/gregtech/api/graphs/consumers/NodeEnergyReceiver.java +++ b/src/main/java/gregtech/api/graphs/consumers/NodeEnergyReceiver.java @@ -8,13 +8,13 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import cofh.api.energy.IEnergyReceiver; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.enums.SoundResource; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.api.util.WorldSpawnedEventBuilder; -import gregtech.common.GT_Pollution; +import gregtech.common.Pollution; // consumer for RF machines public class NodeEnergyReceiver extends ConsumerNode { @@ -29,7 +29,7 @@ public class NodeEnergyReceiver extends ConsumerNode { @Override public int injectEnergy(long aVoltage, long aMaxAmps) { ForgeDirection tDirection = mSide; - int rfOut = GT_Utility.safeInt(aVoltage * GregTech_API.mEUtoRF / 100); + int rfOut = GTUtility.safeInt(aVoltage * GregTechAPI.mEUtoRF / 100); int ampsUsed = 0; if (mRestRF < rfOut) { mRestRF += rfOut; @@ -40,7 +40,7 @@ public class NodeEnergyReceiver extends ConsumerNode { mRestRF -= consumed; return ampsUsed; } - if (GregTech_API.mRFExplosions && GregTech_API.sMachineExplosions + if (GregTechAPI.mRFExplosions && GregTechAPI.sMachineExplosions && ((IEnergyReceiver) mTileEntity).getMaxEnergyStored(tDirection) < rfOut * 600L) { explode(rfOut); } @@ -49,14 +49,14 @@ public class NodeEnergyReceiver extends ConsumerNode { // copied from IEnergyConnected private void explode(int aRfOut) { - if (aRfOut > 32L * GregTech_API.mEUtoRF / 100L) { - float tStrength = GT_Values.getExplosionPowerForVoltage(aRfOut); + if (aRfOut > 32L * GregTechAPI.mEUtoRF / 100L) { + float tStrength = GTValues.getExplosionPowerForVoltage(aRfOut); int tX = mTileEntity.xCoord, tY = mTileEntity.yCoord, tZ = mTileEntity.zCoord; World tWorld = mTileEntity.getWorldObj(); - GT_Utility.sendSoundToPlayers(tWorld, SoundResource.IC2_MACHINES_MACHINE_OVERLOAD, 1.0F, -1, tX, tY, tZ); + GTUtility.sendSoundToPlayers(tWorld, SoundResource.IC2_MACHINES_MACHINE_OVERLOAD, 1.0F, -1, tX, tY, tZ); tWorld.setBlock(tX, tY, tZ, Blocks.air); - if (GregTech_API.sMachineExplosions) if (GT_Mod.gregtechproxy.mPollution) GT_Pollution - .addPollution(tWorld.getChunkFromBlockCoords(tX, tZ), GT_Mod.gregtechproxy.mPollutionOnExplosion); + if (GregTechAPI.sMachineExplosions) if (GTMod.gregtechproxy.mPollution) Pollution + .addPollution(tWorld.getChunkFromBlockCoords(tX, tZ), GTMod.gregtechproxy.mPollutionOnExplosion); new WorldSpawnedEventBuilder.ExplosionEffectEventBuilder().setStrength(tStrength) .setSmoking(true) diff --git a/src/main/java/gregtech/api/graphs/paths/PowerNodePath.java b/src/main/java/gregtech/api/graphs/paths/PowerNodePath.java index d09cf059e9..e9421056af 100644 --- a/src/main/java/gregtech/api/graphs/paths/PowerNodePath.java +++ b/src/main/java/gregtech/api/graphs/paths/PowerNodePath.java @@ -5,7 +5,7 @@ import net.minecraft.server.MinecraftServer; import gregtech.api.enums.TickTime; import gregtech.api.metatileentity.BaseMetaPipeEntity; import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; +import gregtech.api.metatileentity.implementations.MTECable; import gregtech.api.util.AveragePerTickCounter; // path for cables @@ -49,7 +49,7 @@ public class PowerNodePath extends NodePath { if (aVoltage > mMaxVoltage) { lock.addTileEntity(null); for (MetaPipeEntity tCable : mPipes) { - if (((GT_MetaPipeEntity_Cable) tCable).mVoltage < this.mVoltage) { + if (((MTECable) tCable).mVoltage < this.mVoltage) { BaseMetaPipeEntity tBaseCable = (BaseMetaPipeEntity) tCable.getBaseMetaTileEntity(); if (tBaseCable != null) { tBaseCable.setToFire(); @@ -75,7 +75,7 @@ public class PowerNodePath extends NodePath { if (this.mAmps > mMaxAmps * 40) { lock.addTileEntity(null); for (MetaPipeEntity tCable : mPipes) { - if (((GT_MetaPipeEntity_Cable) tCable).mAmperage * 40 < this.mAmps) { + if (((MTECable) tCable).mAmperage * 40 < this.mAmps) { BaseMetaPipeEntity tBaseCable = (BaseMetaPipeEntity) tCable.getBaseMetaTileEntity(); if (tBaseCable != null) { tBaseCable.setToFire(); @@ -107,10 +107,10 @@ public class PowerNodePath extends NodePath { mMaxAmps = Integer.MAX_VALUE; mMaxVoltage = Integer.MAX_VALUE; for (MetaPipeEntity tCable : mPipes) { - if (tCable instanceof GT_MetaPipeEntity_Cable) { - mMaxAmps = Math.min(((GT_MetaPipeEntity_Cable) tCable).mAmperage, mMaxAmps); - mLoss += ((GT_MetaPipeEntity_Cable) tCable).mCableLossPerMeter; - mMaxVoltage = Math.min(((GT_MetaPipeEntity_Cable) tCable).mVoltage, mMaxVoltage); + if (tCable instanceof MTECable) { + mMaxAmps = Math.min(((MTECable) tCable).mAmperage, mMaxAmps); + mLoss += ((MTECable) tCable).mCableLossPerMeter; + mMaxVoltage = Math.min(((MTECable) tCable).mVoltage, mMaxVoltage); } } } diff --git a/src/main/java/gregtech/api/gui/GT_GUIColorOverride.java b/src/main/java/gregtech/api/gui/GT_GUIColorOverride.java deleted file mode 100644 index 6ade7b030d..0000000000 --- a/src/main/java/gregtech/api/gui/GT_GUIColorOverride.java +++ /dev/null @@ -1,93 +0,0 @@ -package gregtech.api.gui; - -import java.util.concurrent.ExecutionException; - -import javax.annotation.Nonnull; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.resources.IResource; -import net.minecraft.util.ResourceLocation; - -import com.google.common.cache.CacheBuilder; -import com.google.common.cache.CacheLoader; -import com.google.common.cache.LoadingCache; -import com.google.common.util.concurrent.UncheckedExecutionException; - -import cpw.mods.fml.relauncher.FMLLaunchHandler; -import cpw.mods.fml.relauncher.Side; -import gregtech.api.GregTech_API; -import gregtech.api.util.ColorsMetadataSection; - -@SuppressWarnings("UnstableApiUsage") -public class GT_GUIColorOverride { - - private static final Object NOT_FOUND = new Object(); - private static final LoadingCache cache = CacheBuilder.newBuilder() - .softValues() - .build(new CacheLoader<>() { - - @Override - public Object load(@Nonnull ResourceLocation key) throws Exception { - IResource ir = Minecraft.getMinecraft() - .getResourceManager() - .getResource(key); - if (ir.hasMetadata()) return ir.getMetadata("colors"); - // return a dummy - // object because - // LoadingCache - // doesn't like null - return NOT_FOUND; - } - }); - private static final GT_GUIColorOverride FALLBACK = new GT_GUIColorOverride(); - private ColorsMetadataSection cmSection; - - public static GT_GUIColorOverride get(String fullLocation) { - // see other get for more info - if (FMLLaunchHandler.side() != Side.CLIENT) return FALLBACK; - return new GT_GUIColorOverride(new ResourceLocation(fullLocation)); - } - - public static GT_GUIColorOverride get(ResourceLocation path) { - // use dummy fallback if there isn't such thing as a resource pack. - // #side() usually has two possible return value, but since this might be called by test code, it might - // also return null when in test env. Using #isClient will cause a NPE. A plain inequality test won't. - // FMLCommonHandler's #getSide() might trigger a NPE when in test env, so no. - if (FMLLaunchHandler.side() != Side.CLIENT) return FALLBACK; - return new GT_GUIColorOverride(path); - } - - private GT_GUIColorOverride() { - cmSection = null; - } - - private GT_GUIColorOverride(ResourceLocation resourceLocation) { - try { - Object metadata = cache.get(resourceLocation); - if (metadata != NOT_FOUND) cmSection = (ColorsMetadataSection) metadata; - } catch (ExecutionException | UncheckedExecutionException ignore) { - // make sure it doesn't cache a failing entry - cache.invalidate(resourceLocation); - } - } - - public int getTextColorOrDefault(String textType, int defaultColor) { - return sLoaded() ? cmSection.getTextColorOrDefault(textType, defaultColor) : defaultColor; - } - - public int getGuiTintOrDefault(String key, int defaultColor) { - return sLoaded() ? cmSection.getGuiTintOrDefault(key, defaultColor) : defaultColor; - } - - public boolean sGuiTintingEnabled() { - return sLoaded() ? cmSection.sGuiTintingEnabled() : GregTech_API.sColoredGUI; - } - - public boolean sLoaded() { - return cmSection != null; - } - - public static void onResourceManagerReload() { - cache.invalidateAll(); - } -} diff --git a/src/main/java/gregtech/api/gui/GUIColorOverride.java b/src/main/java/gregtech/api/gui/GUIColorOverride.java new file mode 100644 index 0000000000..aa796d2b63 --- /dev/null +++ b/src/main/java/gregtech/api/gui/GUIColorOverride.java @@ -0,0 +1,93 @@ +package gregtech.api.gui; + +import java.util.concurrent.ExecutionException; + +import javax.annotation.Nonnull; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.IResource; +import net.minecraft.util.ResourceLocation; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.util.concurrent.UncheckedExecutionException; + +import cpw.mods.fml.relauncher.FMLLaunchHandler; +import cpw.mods.fml.relauncher.Side; +import gregtech.api.GregTechAPI; +import gregtech.api.util.ColorsMetadataSection; + +@SuppressWarnings("UnstableApiUsage") +public class GUIColorOverride { + + private static final Object NOT_FOUND = new Object(); + private static final LoadingCache cache = CacheBuilder.newBuilder() + .softValues() + .build(new CacheLoader<>() { + + @Override + public Object load(@Nonnull ResourceLocation key) throws Exception { + IResource ir = Minecraft.getMinecraft() + .getResourceManager() + .getResource(key); + if (ir.hasMetadata()) return ir.getMetadata("colors"); + // return a dummy + // object because + // LoadingCache + // doesn't like null + return NOT_FOUND; + } + }); + private static final GUIColorOverride FALLBACK = new GUIColorOverride(); + private ColorsMetadataSection cmSection; + + public static GUIColorOverride get(String fullLocation) { + // see other get for more info + if (FMLLaunchHandler.side() != Side.CLIENT) return FALLBACK; + return new GUIColorOverride(new ResourceLocation(fullLocation)); + } + + public static GUIColorOverride get(ResourceLocation path) { + // use dummy fallback if there isn't such thing as a resource pack. + // #side() usually has two possible return value, but since this might be called by test code, it might + // also return null when in test env. Using #isClient will cause a NPE. A plain inequality test won't. + // FMLCommonHandler's #getSide() might trigger a NPE when in test env, so no. + if (FMLLaunchHandler.side() != Side.CLIENT) return FALLBACK; + return new GUIColorOverride(path); + } + + private GUIColorOverride() { + cmSection = null; + } + + private GUIColorOverride(ResourceLocation resourceLocation) { + try { + Object metadata = cache.get(resourceLocation); + if (metadata != NOT_FOUND) cmSection = (ColorsMetadataSection) metadata; + } catch (ExecutionException | UncheckedExecutionException ignore) { + // make sure it doesn't cache a failing entry + cache.invalidate(resourceLocation); + } + } + + public int getTextColorOrDefault(String textType, int defaultColor) { + return sLoaded() ? cmSection.getTextColorOrDefault(textType, defaultColor) : defaultColor; + } + + public int getGuiTintOrDefault(String key, int defaultColor) { + return sLoaded() ? cmSection.getGuiTintOrDefault(key, defaultColor) : defaultColor; + } + + public boolean sGuiTintingEnabled() { + return sLoaded() ? cmSection.sGuiTintingEnabled() : GregTechAPI.sColoredGUI; + } + + public boolean sLoaded() { + return cmSection != null; + } + + public static void onResourceManagerReload() { + cache.invalidateAll(); + } +} diff --git a/src/main/java/gregtech/api/gui/modularui/CoverUIBuildContext.java b/src/main/java/gregtech/api/gui/modularui/CoverUIBuildContext.java new file mode 100644 index 0000000000..2bf8795c5c --- /dev/null +++ b/src/main/java/gregtech/api/gui/modularui/CoverUIBuildContext.java @@ -0,0 +1,74 @@ +package gregtech.api.gui.modularui; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; + +import gregtech.api.interfaces.tileentity.ICoverable; + +public class CoverUIBuildContext extends UIBuildContext { + + // cover data is not synced to client, while ID is + private final int coverID; + private final ForgeDirection side; + private final ICoverable tile; + private final boolean anotherWindow; + private final int guiColorization; + + /** + * @param player Player opened this UI + * @param coverID See {@link ICoverable#getCoverIDAtSide} + * @param side Side this cover is attached to + * @param tile Tile this cover is attached to + * @param anotherWindow If cover UI is shown on top of another window + * @param guiColorization The color used to render machine's GUI + */ + public CoverUIBuildContext(EntityPlayer player, int coverID, ForgeDirection side, ICoverable tile, + boolean anotherWindow, int guiColorization) { + super(player); + this.coverID = coverID; + this.side = side; + this.tile = tile; + this.anotherWindow = anotherWindow; + this.guiColorization = guiColorization; + } + + /** + * @param player Player opened this UI + * @param coverID See {@link ICoverable#getCoverIDAtSide} + * @param side Side this cover is attached to + * @param tile Tile this cover is attached to + * @param anotherWindow If cover GUI is shown in opened on top of another window + */ + public CoverUIBuildContext(EntityPlayer player, int coverID, ForgeDirection side, ICoverable tile, + boolean anotherWindow) { + this(player, coverID, side, tile, anotherWindow, tile.getGUIColorization()); + } + + public int getCoverID() { + return coverID; + } + + public ForgeDirection getCoverSide() { + return side; + } + + /** + * Note that this will return different object between client v.s. server side on SP. + */ + public ICoverable getTile() { + return tile; + } + + /** + * If cover GUI is shown in opened on top of another window. + */ + public boolean isAnotherWindow() { + return anotherWindow; + } + + public int getGuiColorization() { + return guiColorization; + } +} diff --git a/src/main/java/gregtech/api/gui/modularui/GTUIInfos.java b/src/main/java/gregtech/api/gui/modularui/GTUIInfos.java new file mode 100644 index 0000000000..ede4b54e08 --- /dev/null +++ b/src/main/java/gregtech/api/gui/modularui/GTUIInfos.java @@ -0,0 +1,188 @@ +package gregtech.api.gui.modularui; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.UIInfos; +import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; +import com.gtnewhorizons.modularui.api.screen.ModularUIContext; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.builder.UIBuilder; +import com.gtnewhorizons.modularui.common.builder.UIInfo; +import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularGui; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords; +import gregtech.api.net.GTPacketSendCoverData; +import gregtech.api.util.CoverBehaviorBase; + +public class GTUIInfos { + + public static void init() {} + + /** + * Generator for {@link UIInfo} which is responsible for registering and opening UIs. Unlike + * {@link com.gtnewhorizons.modularui.api.UIInfos#TILE_MODULAR_UI}, this accepts custom constructors for UI.
+ * Do NOT run {@link UIBuilder#build} on-the-fly, otherwise MP client won't register UIs. Instead, store to static + * field, just like {@link #GTTileEntityDefaultUI}. Such mistake can be easily overlooked by testing only SP. + */ + public static final Function> GTTileEntityUIFactory = containerConstructor -> UIBuilder + .of() + .container((player, world, x, y, z) -> { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof ITileWithModularUI mui) { + return createTileEntityContainer(player, mui::createWindow, te::markDirty, containerConstructor); + } + return null; + }) + .gui(((player, world, x, y, z) -> { + if (!world.isRemote) return null; + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof ITileWithModularUI mui) { + return createTileEntityGuiContainer(player, mui::createWindow, containerConstructor); + } + return null; + })) + .build(); + + private static final UIInfo GTTileEntityDefaultUI = GTTileEntityUIFactory.apply(ModularUIContainer::new); + + private static final Map> coverUI = new HashMap<>(); + + static { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + coverUI.put( + side, + UIBuilder.of() + .container((player, world, x, y, z) -> { + final TileEntity te = world.getTileEntity(x, y, z); + if (!(te instanceof ICoverable gtTileEntity)) return null; + final CoverBehaviorBase cover = gtTileEntity.getCoverBehaviorAtSideNew(side); + return createCoverContainer( + player, + cover::createWindow, + te::markDirty, + gtTileEntity.getCoverIDAtSide(side), + side, + gtTileEntity); + }) + .gui((player, world, x, y, z) -> { + if (!world.isRemote) return null; + final TileEntity te = world.getTileEntity(x, y, z); + if (!(te instanceof ICoverable gtTileEntity)) return null; + final CoverBehaviorBase cover = gtTileEntity.getCoverBehaviorAtSideNew(side); + return createCoverGuiContainer( + player, + cover::createWindow, + gtTileEntity.getCoverIDAtSide(side), + side, + gtTileEntity); + }) + .build()); + } + } + + /** + * Opens TileEntity UI, created by {@link ITileWithModularUI#createWindow}. + */ + public static void openGTTileEntityUI(IHasWorldObjectAndCoords aTileEntity, EntityPlayer aPlayer) { + if (aTileEntity.isClientSide() || aPlayer instanceof FakePlayer) return; + GTTileEntityDefaultUI.open( + aPlayer, + aTileEntity.getWorld(), + aTileEntity.getXCoord(), + aTileEntity.getYCoord(), + aTileEntity.getZCoord()); + } + + /** + * Opens cover UI, created by {@link CoverBehaviorBase#createWindow}. + */ + public static void openCoverUI(ICoverable tileEntity, EntityPlayer player, ForgeDirection side) { + if (tileEntity.isClientSide()) return; + + GTValues.NW.sendToPlayer( + new GTPacketSendCoverData( + side, + tileEntity.getCoverIDAtSide(side), + tileEntity.getComplexCoverDataAtSide(side), + tileEntity), + (EntityPlayerMP) player); + + coverUI.get(side) + .open( + player, + tileEntity.getWorld(), + tileEntity.getXCoord(), + tileEntity.getYCoord(), + tileEntity.getZCoord()); + } + + /** + * Opens UI for player's item, created by + * {@link com.gtnewhorizons.modularui.api.screen.IItemWithModularUI#createWindow}. + */ + public static void openPlayerHeldItemUI(EntityPlayer player) { + if (NetworkUtils.isClient()) return; + UIInfos.PLAYER_HELD_ITEM_UI.open(player); + } + + private static ModularUIContainer createTileEntityContainer(EntityPlayer player, + Function windowCreator, Runnable onWidgetUpdate, + ContainerConstructor containerCreator) { + final UIBuildContext buildContext = new UIBuildContext(player); + final ModularWindow window = windowCreator.apply(buildContext); + if (window == null) return null; + return containerCreator.of(new ModularUIContext(buildContext, onWidgetUpdate), window); + } + + @SideOnly(Side.CLIENT) + private static ModularGui createTileEntityGuiContainer(EntityPlayer player, + Function windowCreator, ContainerConstructor containerConstructor) { + final ModularUIContainer container = createTileEntityContainer( + player, + windowCreator, + null, + containerConstructor); + if (container == null) return null; + return new ModularGui(container); + } + + private static ModularUIContainer createCoverContainer(EntityPlayer player, + Function windowCreator, Runnable onWidgetUpdate, int coverID, + ForgeDirection side, ICoverable tile) { + final CoverUIBuildContext buildContext = new CoverUIBuildContext(player, coverID, side, tile, false); + final ModularWindow window = windowCreator.apply(buildContext); + if (window == null) return null; + return new ModularUIContainer(new ModularUIContext(buildContext, onWidgetUpdate), window); + } + + @SideOnly(Side.CLIENT) + private static ModularGui createCoverGuiContainer(EntityPlayer player, + Function windowCreator, int coverID, ForgeDirection side, ICoverable tile) { + final ModularUIContainer container = createCoverContainer(player, windowCreator, null, coverID, side, tile); + if (container == null) { + return null; + } + return new ModularGui(container); + } + + @FunctionalInterface + public interface ContainerConstructor { + + ModularUIContainer of(ModularUIContext context, ModularWindow mainWindow); + } +} diff --git a/src/main/java/gregtech/api/gui/modularui/GTUITextures.java b/src/main/java/gregtech/api/gui/modularui/GTUITextures.java new file mode 100644 index 0000000000..125e1640b0 --- /dev/null +++ b/src/main/java/gregtech/api/gui/modularui/GTUITextures.java @@ -0,0 +1,542 @@ +package gregtech.api.gui.modularui; + +import static gregtech.api.enums.Mods.GregTech; + +import java.util.function.BiFunction; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import com.gtnewhorizons.modularui.api.drawable.AdaptableUITexture; +import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; +import com.gtnewhorizons.modularui.api.drawable.UITexture; + +public class GTUITextures { + + public static final UITexture TRANSPARENT = UITexture.fullImage(GregTech.ID, "gui/picture/transparent"); + + public static final AdaptableUITexture BACKGROUND_SINGLEBLOCK_DEFAULT = AdaptableUITexture + .of(GregTech.ID, "gui/background/singleblock_default", 176, 166, 4); + public static final SteamTexture BACKGROUND_STEAM = SteamTexture + .adaptableTexture(GregTech.ID, "gui/background/%s", 176, 166, 4); + public static final UITexture BACKGROUND_FUSION_COMPUTER = UITexture + .fullImage(GregTech.ID, "gui/background/fusion_computer"); + public static final AdaptableUITexture BACKGROUND_TEXT_FIELD = AdaptableUITexture + .of(GregTech.ID, "gui/background/text_field", 142, 28, 1); + public static final AdaptableUITexture BACKGROUND_TEXT_FIELD_LIGHT_GRAY = AdaptableUITexture + .of(GregTech.ID, "gui/background/text_field_light_gray", 61, 12, 1); + public static final AdaptableUITexture BACKGROUND_NEI_SINGLE_RECIPE = AdaptableUITexture + .of(GregTech.ID, "gui/background/nei_single_recipe.png", 64, 64, 2); + public static final UITexture BACKGROUND_FLOCCULATION_RECIPE = UITexture + .fullImage(GregTech.ID, "gui/background/flocculation_recipe.png"); + public static final SteamTexture SLOT_ITEM_STEAM = SteamTexture.fullImage(GregTech.ID, "gui/slot/item_%s"); + public static final SteamTexture SLOT_FLUID_STEAM = SteamTexture.fullImage(GregTech.ID, "gui/slot/fluid_%s"); + public static final AdaptableUITexture SLOT_DARK_GRAY = AdaptableUITexture + .of(GregTech.ID, "gui/slot/dark_gray", 18, 18, 1); + public static final AdaptableUITexture SLOT_MAINTENANCE = AdaptableUITexture + .of(GregTech.ID, "gui/slot/maintenance", 20, 20, 1); + public static final AdaptableUITexture SLOT_UPLIFTED = AdaptableUITexture + .of(GregTech.ID, "gui/slot/uplifted", 18, 18, 1); + + public static final UITexture OVERLAY_SLOT_ARROW_ME = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/arrow_me"); + public static final UITexture OVERLAY_SLOT_PATTERN_ME = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/pattern_me"); + + public static final UITexture OVERLAY_SLOT_BEAKER_1 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/beaker_1"); + public static final UITexture OVERLAY_SLOT_BEAKER_2 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/beaker_2"); + public static final UITexture OVERLAY_SLOT_BEE_DRONE = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/bee_drone"); + public static final UITexture OVERLAY_SLOT_BEE_QUEEN = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/bee_queen"); + public static final UITexture OVERLAY_SLOT_BENDER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/bender"); + public static final UITexture OVERLAY_SLOT_BOX = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/box"); + public static final UITexture OVERLAY_SLOT_BOXED = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/boxed"); + public static final UITexture OVERLAY_SLOT_CANISTER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/canister"); + public static final SteamTexture OVERLAY_SLOT_CANISTER_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/canister_%s"); + public static final UITexture OVERLAY_SLOT_CANNER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/canner"); + public static final UITexture OVERLAY_SLOT_CAULDRON = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/cauldron"); + public static final UITexture OVERLAY_SLOT_CENTRIFUGE = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/centrifuge"); + public static final UITexture OVERLAY_SLOT_CENTRIFUGE_FLUID = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/centrifuge_fluid"); + public static final SteamTexture OVERLAY_SLOT_CENTRIFUGE_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/centrifuge_%s"); + public static final UITexture OVERLAY_SLOT_CHARGER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/charger"); + public static final UITexture OVERLAY_SLOT_CHARGER_FLUID = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/charger_fluid"); + public static final UITexture OVERLAY_SLOT_CIRCUIT = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/circuit"); + public static final SteamTexture OVERLAY_SLOT_COAL_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/coal_%s"); + public static final UITexture OVERLAY_SLOT_COMPRESSOR = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/compressor"); + public static final SteamTexture OVERLAY_SLOT_COMPRESSOR_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/compressor_%s"); + public static final UITexture OVERLAY_SLOT_CRUSHED_ORE = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/crushed_ore"); + public static final SteamTexture OVERLAY_SLOT_CRUSHED_ORE_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/crushed_ore_%s"); + public static final UITexture OVERLAY_SLOT_CUTTER_SLICED = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/cutter_sliced"); + public static final UITexture OVERLAY_SLOT_DATA_ORB = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/data_orb"); + public static final UITexture OVERLAY_SLOT_DATA_STICK = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/data_stick"); + public static final UITexture OVERLAY_SLOT_DUST = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/dust"); + public static final SteamTexture OVERLAY_SLOT_DUST_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/dust_%s"); + public static final SteamTexture OVERLAY_SLOT_BLOCK_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/block_%s"); + public static final UITexture OVERLAY_SLOT_EXPLOSIVE = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/explosive"); + public static final UITexture OVERLAY_SLOT_EXTRUDER_SHAPE = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/extruder_shape"); + public static final UITexture OVERLAY_SLOT_FILTER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/filter"); + public static final UITexture OVERLAY_SLOT_FURNACE = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/furnace"); + public static final SteamTexture OVERLAY_SLOT_FURNACE_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/furnace_%s"); + public static final UITexture OVERLAY_SLOT_GEM = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/gem"); + public static final UITexture OVERLAY_SLOT_HAMMER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/hammer"); + public static final SteamTexture OVERLAY_SLOT_HAMMER_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/hammer_%s"); + public static final UITexture OVERLAY_SLOT_HEATER_1 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/heater_1"); + public static final UITexture OVERLAY_SLOT_HEATER_2 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/heater_2"); + public static final UITexture OVERLAY_SLOT_IMPLOSION = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/implosion"); + public static final UITexture OVERLAY_SLOT_IN = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/in"); + public static final SteamTexture OVERLAY_SLOT_IN_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/in_%s"); + public static final SteamTexture OVERLAY_SLOT_INGOT_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/ingot_%s"); + public static final UITexture OVERLAY_SLOT_INT_CIRCUIT = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/int_circuit"); + public static final UITexture OVERLAY_SLOT_LENS = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/lens"); + public static final UITexture OVERLAY_SLOT_MICROSCOPE = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/microscope"); + public static final UITexture OVERLAY_SLOT_MINING_PIPE = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/mining_pipe"); + public static final UITexture OVERLAY_SLOT_MOLD = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/mold"); + public static final UITexture OVERLAY_SLOT_MOLECULAR_1 = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/molecular_1"); + public static final UITexture OVERLAY_SLOT_MOLECULAR_2 = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/molecular_2"); + public static final UITexture OVERLAY_SLOT_MOLECULAR_3 = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/molecular_3"); + public static final UITexture OVERLAY_SLOT_OUT = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/out"); + public static final SteamTexture OVERLAY_SLOT_OUT_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/overlay_slot/out_%s"); + public static final UITexture OVERLAY_SLOT_PAGE_BLANK = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/page_blank"); + public static final UITexture OVERLAY_SLOT_PAGE_PRINTED = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/page_printed"); + public static final UITexture OVERLAY_SLOT_PRESS_1 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/press_1"); + public static final UITexture OVERLAY_SLOT_PRESS_2 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/press_2"); + public static final UITexture OVERLAY_SLOT_PRESS_3 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/press_3"); + public static final UITexture OVERLAY_SLOT_RECYCLE = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/recycle"); + public static final UITexture OVERLAY_SLOT_ROD_1 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/rod_1"); + public static final UITexture OVERLAY_SLOT_ROD_2 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/rod_2"); + public static final UITexture OVERLAY_SLOT_SLICE_SHAPE = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/slice_shape"); + public static final UITexture OVERLAY_SLOT_SLICER_SLICED = UITexture + .fullImage(GregTech.ID, "gui/overlay_slot/slicer_sliced"); + public static final UITexture OVERLAY_SLOT_SQUARE = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/square"); + public static final UITexture OVERLAY_SLOT_UUA = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/uua"); + public static final UITexture OVERLAY_SLOT_UUM = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/uum"); + public static final UITexture OVERLAY_SLOT_VIAL_1 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/vial_1"); + public static final UITexture OVERLAY_SLOT_VIAL_2 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/vial_2"); + public static final UITexture OVERLAY_SLOT_WIREMILL = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/wiremill"); + public static final UITexture OVERLAY_SLOT_WRENCH = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/wrench"); + public static final UITexture[] OVERLAY_SLOTS_NUMBER = IntStream.range(0, 12) + .mapToObj(i -> UITexture.fullImage(GregTech.ID, "gui/overlay_slot/number_" + i)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + + public static final UITexture PROGRESSBAR_ARROW = UITexture.fullImage(GregTech.ID, "gui/progressbar/arrow"); + public static final SteamTexture PROGRESSBAR_ARROW_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/progressbar/arrow_%s"); + public static final SteamTexture PROGRESSBAR_ARROW_2_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/progressbar/arrow_2_%s"); + public static final UITexture PROGRESSBAR_ARROW_MULTIPLE = UITexture + .fullImage(GregTech.ID, "gui/progressbar/arrow_multiple"); + public static final UITexture PROGRESSBAR_ASSEMBLE = UITexture.fullImage(GregTech.ID, "gui/progressbar/assemble"); + public static final UITexture PROGRESSBAR_ASSEMBLY_LINE_1 = UITexture + .fullImage(GregTech.ID, "gui/progressbar/assemblyline_1"); + public static final UITexture PROGRESSBAR_ASSEMBLY_LINE_2 = UITexture + .fullImage(GregTech.ID, "gui/progressbar/assemblyline_2"); + public static final UITexture PROGRESSBAR_ASSEMBLY_LINE_3 = UITexture + .fullImage(GregTech.ID, "gui/progressbar/assemblyline_3"); + public static final UITexture PROGRESSBAR_BATH = UITexture.fullImage(GregTech.ID, "gui/progressbar/bath"); + public static final UITexture PROGRESSBAR_BENDING = UITexture.fullImage(GregTech.ID, "gui/progressbar/bending"); + public static final SteamTexture PROGRESSBAR_BOILER_EMPTY_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/progressbar/boiler_empty_%s"); + public static final UITexture PROGRESSBAR_BOILER_HEAT = UITexture + .fullImage(GregTech.ID, "gui/progressbar/boiler_heat"); + public static final UITexture PROGRESSBAR_BOILER_STEAM = UITexture + .fullImage(GregTech.ID, "gui/progressbar/boiler_steam"); + public static final UITexture PROGRESSBAR_BOILER_WATER = UITexture + .fullImage(GregTech.ID, "gui/progressbar/boiler_water"); + public static final UITexture PROGRESSBAR_CANNER = UITexture.fullImage(GregTech.ID, "gui/progressbar/canner"); + public static final UITexture PROGRESSBAR_CIRCUIT_ASSEMBLER = UITexture + .fullImage(GregTech.ID, "gui/progressbar/circuit_assembler"); + public static final UITexture PROGRESSBAR_COMPRESS = UITexture.fullImage(GregTech.ID, "gui/progressbar/compress"); + public static final SteamTexture PROGRESSBAR_COMPRESS_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/progressbar/compress_%s"); + public static final UITexture PROGRESSBAR_CUT = UITexture.fullImage(GregTech.ID, "gui/progressbar/cut"); + public static final UITexture PROGRESSBAR_EXTRACT = UITexture.fullImage(GregTech.ID, "gui/progressbar/extract"); + public static final SteamTexture PROGRESSBAR_EXTRACT_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/progressbar/extract_%s"); + public static final UITexture PROGRESSBAR_EXTRUDE = UITexture.fullImage(GregTech.ID, "gui/progressbar/extrude"); + public static final SteamTexture PROGRESSBAR_FUEL_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/progressbar/fuel_%s"); + public static final UITexture PROGRESSBAR_HAMMER = UITexture.fullImage(GregTech.ID, "gui/progressbar/hammer"); + public static final UITexture PROGRESSBAR_HAMMER_BASE = UITexture + .fullImage(GregTech.ID, "gui/progressbar/hammer_base"); + public static final SteamTexture PROGRESSBAR_HAMMER_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/progressbar/hammer_%s"); + public static final SteamTexture PROGRESSBAR_HAMMER_BASE_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/progressbar/hammer_base_%s"); + public static final UITexture PROGRESSBAR_LATHE = UITexture.fullImage(GregTech.ID, "gui/progressbar/lathe"); + public static final UITexture PROGRESSBAR_LATHE_BASE = UITexture + .fullImage(GregTech.ID, "gui/progressbar/lathe_base"); + public static final UITexture PROGRESSBAR_MACERATE = UITexture.fullImage(GregTech.ID, "gui/progressbar/macerate"); + public static final SteamTexture PROGRESSBAR_MACERATE_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/progressbar/macerate_%s"); + public static final UITexture PROGRESSBAR_MAGNET = UITexture.fullImage(GregTech.ID, "gui/progressbar/magnet"); + public static final UITexture PROGRESSBAR_MIXER = UITexture.fullImage(GregTech.ID, "gui/progressbar/mixer"); + public static final UITexture PROGRESSBAR_RECYCLE = UITexture.fullImage(GregTech.ID, "gui/progressbar/recycle"); + public static final UITexture PROGRESSBAR_SIFT = UITexture.fullImage(GregTech.ID, "gui/progressbar/sift"); + public static final UITexture PROGRESSBAR_SLICE = UITexture.fullImage(GregTech.ID, "gui/progressbar/slice"); + public static final UITexture PROGRESSBAR_STORED_EU = UITexture.fullImage(GregTech.ID, "gui/progressbar/stored_eu"); + public static final UITexture PROGRESSBAR_WIREMILL = UITexture.fullImage(GregTech.ID, "gui/progressbar/wiremill"); + public static final UITexture PROGRESSBAR_FLOCCULATION = UITexture + .fullImage(GregTech.ID, "gui/progressbar/flocculation"); + public static final UITexture PROGRESSBAR_CLARIFIER = UITexture.fullImage(GregTech.ID, "gui/progressbar/clarifier"); + public static final UITexture PROGRESSBAR_PH_NEUTRALIZATION = UITexture + .fullImage(GregTech.ID, "gui/progressbar/phneutralization"); + public static final UITexture PROGRESSBAR_OZONATION = UITexture.fullImage(GregTech.ID, "gui/progressbar/ozonation"); + public static final UITexture PROGRESSBAR_PLASMA_HEATER = UITexture + .fullImage(GregTech.ID, "gui/progressbar/water_plasma_heater"); + + public static FallbackableUITexture fallbackableProgressbar(String name, UITexture fallback) { + return new FallbackableUITexture(UITexture.fullImage(GregTech.ID, "gui/progressbar/" + name), fallback); + } + + public static final UITexture TAB_COVER_NORMAL = UITexture.fullImage(GregTech.ID, "gui/tab/cover_normal"); + public static final UITexture TAB_COVER_HIGHLIGHT = UITexture.fullImage(GregTech.ID, "gui/tab/cover_highlight"); + public static final UITexture TAB_COVER_DISABLED = UITexture.fullImage(GregTech.ID, "gui/tab/cover_disabled"); + public static final SteamTexture TAB_COVER_STEAM_NORMAL = SteamTexture + .fullImage(GregTech.ID, "gui/tab/cover_%s_normal"); + public static final SteamTexture TAB_COVER_STEAM_HIGHLIGHT = SteamTexture + .fullImage(GregTech.ID, "gui/tab/cover_%s_highlight"); + public static final SteamTexture TAB_COVER_STEAM_DISABLED = SteamTexture + .fullImage(GregTech.ID, "gui/tab/cover_%s_disabled"); + public static final AdaptableUITexture TAB_TITLE = AdaptableUITexture.of(GregTech.ID, "gui/tab/title", 28, 28, 4); + public static final AdaptableUITexture TAB_TITLE_DARK = AdaptableUITexture + .of(GregTech.ID, "gui/tab/title_dark", 28, 28, 4); + public static final SteamTexture TAB_TITLE_STEAM = SteamTexture + .adaptableTexture(GregTech.ID, "gui/tab/title_%s", 28, 28, 4); + public static final SteamTexture TAB_TITLE_DARK_STEAM = SteamTexture + .adaptableTexture(GregTech.ID, "gui/tab/title_dark_%s", 28, 28, 4); + public static final AdaptableUITexture TAB_TITLE_ANGULAR = AdaptableUITexture + .of(GregTech.ID, "gui/tab/title_angular", 28, 28, 4); + public static final SteamTexture TAB_TITLE_ANGULAR_STEAM = SteamTexture + .adaptableTexture(GregTech.ID, "gui/tab/title_angular_%s", 28, 28, 4); + + public static final UITexture BUTTON_STANDARD = AdaptableUITexture + .of(GregTech.ID, "gui/button/standard", 18, 18, 1); + public static final UITexture BUTTON_STANDARD_PRESSED = AdaptableUITexture + .of(GregTech.ID, "gui/button/standard_pressed", 18, 18, 1); + public static final UITexture BUTTON_STANDARD_DISABLED = AdaptableUITexture + .of(GregTech.ID, "gui/button/standard_disabled", 18, 18, 1); + public static final UITexture BUTTON_STANDARD_TOGGLE = AdaptableUITexture + .of(GregTech.ID, "gui/button/standard_toggle", 18, 18, 1); + public static final UITexture BUTTON_STANDARD_TOGGLE_DISABLED = AdaptableUITexture + .of(GregTech.ID, "gui/button/standard_toggle_disabled", 18, 18, 1); + public static final UITexture BUTTON_COVER_NORMAL = UITexture.fullImage(GregTech.ID, "gui/button/cover_normal"); + public static final UITexture BUTTON_COVER_NORMAL_HOVERED = UITexture + .fullImage(GregTech.ID, "gui/button/cover_normal_hovered"); + public static final UITexture BUTTON_COVER_NORMAL_DISABLED = UITexture + .fullImage(GregTech.ID, "gui/button/cover_normal_disabled"); + + public static final UITexture OVERLAY_BUTTON_DISABLE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/disable"); + public static final UITexture OVERLAY_BUTTON_REDSTONE_OFF = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/redstone_off"); + public static final UITexture OVERLAY_BUTTON_REDSTONE_ON = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/redstone_on"); + public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_ON = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/power_switch_on"); + public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_OFF = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/power_switch_off"); + public static final UITexture OVERLAY_BUTTON_VOID_EXCESS_NONE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/void_excess_none"); + public static final UITexture OVERLAY_BUTTON_VOID_EXCESS_ITEM = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/void_excess_item"); + public static final UITexture OVERLAY_BUTTON_VOID_EXCESS_FLUID = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/void_excess_fluid"); + public static final UITexture OVERLAY_BUTTON_VOID_EXCESS_ALL = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/void_excess_all"); + public static final UITexture OVERLAY_BUTTON_INPUT_SEPARATION_ON = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/input_separation_on"); + public static final UITexture OVERLAY_BUTTON_INPUT_SEPARATION_ON_DISABLED = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/input_separation_on_disabled"); + public static final UITexture OVERLAY_BUTTON_INPUT_SEPARATION_OFF = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/input_separation_off"); + public static final UITexture OVERLAY_BUTTON_INPUT_SEPARATION_OFF_DISABLED = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/input_separation_off_disabled"); + public static final UITexture OVERLAY_BUTTON_RECIPE_LOCKED = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/recipe_locked"); + public static final UITexture OVERLAY_BUTTON_RECIPE_LOCKED_DISABLED = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/recipe_locked_disabled"); + public static final UITexture OVERLAY_BUTTON_RECIPE_UNLOCKED = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/recipe_unlocked"); + public static final UITexture OVERLAY_BUTTON_RECIPE_UNLOCKED_DISABLED = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/recipe_unlocked_disabled"); + public static final UITexture OVERLAY_BUTTON_BATCH_MODE_ON = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/batch_mode_on"); + public static final UITexture OVERLAY_BUTTON_BATCH_MODE_ON_DISABLED = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/batch_mode_on_disabled"); + public static final UITexture OVERLAY_BUTTON_BATCH_MODE_OFF = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/batch_mode_off"); + public static final UITexture OVERLAY_BUTTON_BATCH_MODE_OFF_DISABLED = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/batch_mode_off_disabled"); + public static final UITexture OVERLAY_BUTTON_STRUCTURE_UPDATE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/structure_update"); + public static final UITexture OVERLAY_BUTTON_FORBIDDEN = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/forbidden"); + public static final UITexture OVERLAY_BUTTON_LOCKED = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/lock_small"); + public static final UITexture OVERLAY_BUTTON_DOWN_TIERING_ON = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/down_tiering_on"); + public static final UITexture OVERLAY_BUTTON_DOWN_TIERING_OFF = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/down_tiering_off"); + public static final UITexture OVERLAY_BUTTON_CHECKMARK = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/checkmark"); + public static final UITexture OVERLAY_BUTTON_CROSS = UITexture.fullImage(GregTech.ID, "gui/overlay_button/cross"); + public static final UITexture OVERLAY_BUTTON_WHITELIST = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/whitelist"); + public static final UITexture OVERLAY_BUTTON_BLACKLIST = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/blacklist"); + public static final UITexture OVERLAY_BUTTON_PROGRESS = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/progress"); + public static final UITexture OVERLAY_BUTTON_EXPORT = UITexture.fullImage(GregTech.ID, "gui/overlay_button/export"); + public static final UITexture OVERLAY_BUTTON_IMPORT = UITexture.fullImage(GregTech.ID, "gui/overlay_button/import"); + public static final UITexture OVERLAY_BUTTON_AUTOOUTPUT_ITEM = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/autooutput_item"); + public static final UITexture OVERLAY_BUTTON_AUTOOUTPUT_FLUID = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/autooutput_fluid"); + public static final UITexture OVERLAY_BUTTON_ALLOW_INPUT = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/allow_input"); + public static final UITexture OVERLAY_BUTTON_ALLOW_OUTPUT = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/allow_output"); + public static final UITexture OVERLAY_BUTTON_AUTOPULL_ME = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/auto_pull_me"); + public static final UITexture OVERLAY_BUTTON_AUTOPULL_ME_DISABLED = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/auto_pull_me_disabled"); + public static final UITexture OVERLAY_BUTTON_BLOCK_INPUT = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/block_input"); + public static final UITexture OVERLAY_BUTTON_BLOCK_OUTPUT = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/block_output"); + public static final UITexture OVERLAY_BUTTON_ARROW_GREEN_UP = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/arrow_green_up"); + public static final UITexture OVERLAY_BUTTON_ARROW_GREEN_DOWN = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/arrow_green_down"); + public static final UITexture OVERLAY_BUTTON_CYCLIC = UITexture.fullImage(GregTech.ID, "gui/overlay_button/cyclic"); + public static final UITexture OVERLAY_BUTTON_SHUFFLE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/shuffle"); + public static final UITexture OVERLAY_BUTTON_EMIT_ENERGY = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/emit_energy"); + public static final UITexture OVERLAY_BUTTON_EMIT_REDSTONE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/emit_redstone"); + public static final UITexture OVERLAY_BUTTON_INVERT_REDSTONE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/invert_redstone"); + public static final UITexture OVERLAY_BUTTON_STOCKING_MODE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/stocking_mode"); + public static final UITexture OVERLAY_BUTTON_INVERT_FILTER = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/invert_filter"); + public static final UITexture OVERLAY_BUTTON_NBT = UITexture.fullImage(GregTech.ID, "gui/overlay_button/nbt"); + public static final UITexture OVERLAY_BUTTON_PRINT = UITexture.fullImage(GregTech.ID, "gui/overlay_button/print"); + public static final UITexture OVERLAY_BUTTON_TRANSPOSE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/transpose"); + public static final UITexture OVERLAY_BUTTON_SORTING_MODE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/sorting_mode"); + public static final UITexture OVERLAY_BUTTON_ONE_STACK_LIMIT = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/one_stack_limit"); + public static final UITexture OVERLAY_BUTTON_BOUNDING_BOX = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/bounding_box"); + public static final UITexture OVERLAY_BUTTON_MINUS_SMALL = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/minus_small"); + public static final UITexture OVERLAY_BUTTON_MINUS_LARGE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/minus_large"); + public static final UITexture OVERLAY_BUTTON_PLUS_SMALL = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/plus_small"); + public static final UITexture OVERLAY_BUTTON_PLUS_LARGE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/plus_large"); + public static final UITexture OVERLAY_BUTTON_GATE_AND = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/gate_and"); + public static final UITexture OVERLAY_BUTTON_GATE_NAND = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/gate_nand"); + public static final UITexture OVERLAY_BUTTON_GATE_OR = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/gate_or"); + public static final UITexture OVERLAY_BUTTON_GATE_NOR = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/gate_nor"); + public static final UITexture OVERLAY_BUTTON_ANALOG = UITexture.fullImage(GregTech.ID, "gui/overlay_button/analog"); + public static final UITexture OVERLAY_BUTTON_LOCK = UITexture.fullImage(GregTech.ID, "gui/overlay_button/lock"); + public static final UITexture OVERLAY_BUTTON_INPUT_FROM_OUTPUT_SIDE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/input_from_output_side"); + public static final UITexture OVERLAY_BUTTON_TANK_VOID_EXCESS = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/tank_void_excess"); + public static final UITexture OVERLAY_BUTTON_TANK_VOID_ALL = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/tank_void_all"); + public static final UITexture OVERLAY_BUTTON_NEI = UITexture.fullImage(GregTech.ID, "gui/overlay_button/nei"); + public static final UITexture OVERLAY_BUTTON_USE_PROCESSING_STATE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/use_processing_state.png"); + public static final UITexture OVERLAY_BUTTON_USE_INVERTED_PROCESSING_STATE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/use_inverted_processing_state.png"); + public static final UITexture OVERLAY_BUTTON_CHUNK_LOADING = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/chunkloading"); + public static final UITexture OVERLAY_BUTTON_CHUNK_LOADING_OFF = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/chunkloading_off"); + public static final UITexture OVERLAY_BUTTON_WORK_AREA = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/work_area"); + public static final UITexture OVERLAY_BUTTON_REPLACE_COBBLE_ON = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/replace_cobble_on"); + public static final UITexture OVERLAY_BUTTON_REPLACE_COBBLE_OFF = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/replace_cobble_off"); + public static final UITexture OVERLAY_BUTTON_RETRACT_PIPE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/retract_pipes"); + public static final UITexture OVERLAY_BUTTON_HOURGLASS = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/hourglass"); + + public static final UITexture OVERLAY_BUTTON_LIQUIDMODE = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/LiquidMode"); + + public static final UITexture OVERLAY_BUTTON_LIQUIDMODE_OFF = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/LiquidMode_off"); + + // These icons are for mode switching machine modes + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_DEFAULT = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_default"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_CHEMBATH = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_chembath"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_WASHPLANT = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_washplant"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_SIMPLEWASHER = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_simplewasher"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_PACKAGER = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_packager"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_UNPACKAGER = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_unpackager"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_SEPARATOR = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_separator"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_POLARIZER = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_polarizer"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_LPF_FLUID = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_lpf_fluid"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_LPF_METAL = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_lpf_metal"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_BENDING = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_bending"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_FORMING = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_forming"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_SLICING = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_slicing"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_CUTTING = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_cutting"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_COMPRESSING = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_compressing"); + public static final UITexture OVERLAY_BUTTON_MACHINEMODE_SINGULARITY = UITexture + .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_singularity"); + + /** + * Can adjust size as needed. + */ + public static final AdaptableUITexture PICTURE_SCREEN_BLACK = AdaptableUITexture + .of(GregTech.ID, "gui/picture/screen_black", 16, 16, 2); + + public static final UITexture PICTURE_RADIATION_WARNING = UITexture + .fullImage(GregTech.ID, "gui/picture/radiation_warning"); + public static final UITexture PICTURE_GT_LOGO_17x17_TRANSPARENT = UITexture + .fullImage(GregTech.ID, "gui/picture/gt_logo_17x17_transparent"); + public static final UITexture PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY = UITexture + .fullImage(GregTech.ID, "gui/picture/gt_logo_17x17_transparent_gray"); + public static final SteamTexture PICTURE_GT_LOGO_17x17_TRANSPARENT_STEAM = SteamTexture + .fullImage(GregTech.ID, "gui/picture/gt_logo_17x17_transparent_%s"); + public static final UITexture PICTURE_GT_LOGO_18x18 = UITexture.fullImage(GregTech.ID, "gui/picture/gt_logo_18x18"); + public static final UITexture PICTURE_GT_LOGO_19x19 = UITexture.fullImage(GregTech.ID, "gui/picture/gt_logo_19x19"); + public static final UITexture PICTURE_INFORMATION = UITexture.fullImage(GregTech.ID, "gui/picture/information"); + public static final UITexture PICTURE_STALLED_ELECTRICITY = UITexture + .fullImage(GregTech.ID, "gui/picture/stalled_electricity"); + public static final UITexture PICTURE_STALLED_STEAM = UITexture.fullImage(GregTech.ID, "gui/picture/stalled_steam"); + public static final BiFunction PICTURE_ARROW_22_RED = (width, fromRight) -> UITexture + .partly( + GregTech.ID, + "gui/picture/arrow_22_red", + 87, + 22, + fromRight ? 87 - width : 0, + 0, + fromRight ? 87 : width, + 22); + public static final BiFunction PICTURE_ARROW_22_BLUE = (width, fromRight) -> UITexture + .partly( + GregTech.ID, + "gui/picture/arrow_22_blue", + 87, + 22, + fromRight ? 87 - width : 0, + 0, + fromRight ? 87 : width, + 22); + public static final BiFunction PICTURE_ARROW_22_WHITE = (width, fromRight) -> UITexture + .partly( + GregTech.ID, + "gui/picture/arrow_22_white", + 87, + 22, + fromRight ? 87 - width : 0, + 0, + fromRight ? 87 : width, + 22); + public static final BiFunction PICTURE_ARROW_24_RED = (width, fromRight) -> UITexture + .partly( + GregTech.ID, + "gui/picture/arrow_24_red", + 69, + 24, + fromRight ? 69 - width : 0, + 0, + fromRight ? 69 : width, + 24); + public static final BiFunction PICTURE_ARROW_24_BLUE = (width, fromRight) -> UITexture + .partly( + GregTech.ID, + "gui/picture/arrow_24_blue", + 69, + 24, + fromRight ? 69 - width : 0, + 0, + fromRight ? 69 : width, + 24); + public static final BiFunction PICTURE_ARROW_24_WHITE = (width, fromRight) -> UITexture + .partly( + GregTech.ID, + "gui/picture/arrow_24_white", + 69, + 24, + fromRight ? 69 - width : 0, + 0, + fromRight ? 69 : width, + 24); + public static final UITexture PICTURE_FLUID_WINDOW = UITexture.fullImage(GregTech.ID, "gui/picture/fluid_window"); + public static final UITexture PICTURE_FLUID_TANK = UITexture.fullImage(GregTech.ID, "gui/picture/fluid_tank"); + public static final UITexture PICTURE_SLOTS_HOLO_3BY3 = UITexture + .fullImage(GregTech.ID, "gui/picture/slots_holo_3by3"); + public static final UITexture PICTURE_ARROW_DOUBLE = UITexture.fullImage(GregTech.ID, "gui/picture/arrow_double"); + public static final UITexture PICTURE_SUPER_BUFFER = UITexture.fullImage(GregTech.ID, "gui/picture/super_buffer"); + public static final UITexture PICTURE_SQUARE_LIGHT_GRAY = UITexture + .fullImage(GregTech.ID, "gui/picture/square_light_gray"); + public static final UITexture PICTURE_GAUGE = UITexture.fullImage(GregTech.ID, "gui/picture/gauge"); + public static final UITexture PICTURE_ITEM_IN = UITexture.fullImage(GregTech.ID, "gui/picture/item_in"); + public static final UITexture PICTURE_ITEM_OUT = UITexture.fullImage(GregTech.ID, "gui/picture/item_out"); + public static final UITexture PICTURE_FLUID_IN = UITexture.fullImage(GregTech.ID, "gui/picture/fluid_in"); + public static final UITexture PICTURE_FLUID_OUT = UITexture.fullImage(GregTech.ID, "gui/picture/fluid_out"); +} diff --git a/src/main/java/gregtech/api/gui/modularui/GT_CoverUIBuildContext.java b/src/main/java/gregtech/api/gui/modularui/GT_CoverUIBuildContext.java deleted file mode 100644 index f98d6099fc..0000000000 --- a/src/main/java/gregtech/api/gui/modularui/GT_CoverUIBuildContext.java +++ /dev/null @@ -1,74 +0,0 @@ -package gregtech.api.gui.modularui; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; - -import gregtech.api.interfaces.tileentity.ICoverable; - -public class GT_CoverUIBuildContext extends UIBuildContext { - - // cover data is not synced to client, while ID is - private final int coverID; - private final ForgeDirection side; - private final ICoverable tile; - private final boolean anotherWindow; - private final int guiColorization; - - /** - * @param player Player opened this UI - * @param coverID See {@link ICoverable#getCoverIDAtSide} - * @param side Side this cover is attached to - * @param tile Tile this cover is attached to - * @param anotherWindow If cover UI is shown on top of another window - * @param guiColorization The color used to render machine's GUI - */ - public GT_CoverUIBuildContext(EntityPlayer player, int coverID, ForgeDirection side, ICoverable tile, - boolean anotherWindow, int guiColorization) { - super(player); - this.coverID = coverID; - this.side = side; - this.tile = tile; - this.anotherWindow = anotherWindow; - this.guiColorization = guiColorization; - } - - /** - * @param player Player opened this UI - * @param coverID See {@link ICoverable#getCoverIDAtSide} - * @param side Side this cover is attached to - * @param tile Tile this cover is attached to - * @param anotherWindow If cover GUI is shown in opened on top of another window - */ - public GT_CoverUIBuildContext(EntityPlayer player, int coverID, ForgeDirection side, ICoverable tile, - boolean anotherWindow) { - this(player, coverID, side, tile, anotherWindow, tile.getGUIColorization()); - } - - public int getCoverID() { - return coverID; - } - - public ForgeDirection getCoverSide() { - return side; - } - - /** - * Note that this will return different object between client v.s. server side on SP. - */ - public ICoverable getTile() { - return tile; - } - - /** - * If cover GUI is shown in opened on top of another window. - */ - public boolean isAnotherWindow() { - return anotherWindow; - } - - public int getGuiColorization() { - return guiColorization; - } -} diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java b/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java deleted file mode 100644 index ea9a39bdf8..0000000000 --- a/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java +++ /dev/null @@ -1,189 +0,0 @@ -package gregtech.api.gui.modularui; - -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.UIInfos; -import com.gtnewhorizons.modularui.api.screen.ITileWithModularUI; -import com.gtnewhorizons.modularui.api.screen.ModularUIContext; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.builder.UIBuilder; -import com.gtnewhorizons.modularui.common.builder.UIInfo; -import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; -import com.gtnewhorizons.modularui.common.internal.wrapper.ModularGui; -import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords; -import gregtech.api.net.GT_Packet_SendCoverData; -import gregtech.api.util.GT_CoverBehaviorBase; - -public class GT_UIInfos { - - public static void init() {} - - /** - * Generator for {@link UIInfo} which is responsible for registering and opening UIs. Unlike - * {@link com.gtnewhorizons.modularui.api.UIInfos#TILE_MODULAR_UI}, this accepts custom constructors for UI.
- * Do NOT run {@link UIBuilder#build} on-the-fly, otherwise MP client won't register UIs. Instead, store to static - * field, just like {@link #GTTileEntityDefaultUI}. Such mistake can be easily overlooked by testing only SP. - */ - public static final Function> GTTileEntityUIFactory = containerConstructor -> UIBuilder - .of() - .container((player, world, x, y, z) -> { - TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof ITileWithModularUI mui) { - return createTileEntityContainer(player, mui::createWindow, te::markDirty, containerConstructor); - } - return null; - }) - .gui(((player, world, x, y, z) -> { - if (!world.isRemote) return null; - TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof ITileWithModularUI mui) { - return createTileEntityGuiContainer(player, mui::createWindow, containerConstructor); - } - return null; - })) - .build(); - - private static final UIInfo GTTileEntityDefaultUI = GTTileEntityUIFactory.apply(ModularUIContainer::new); - - private static final Map> coverUI = new HashMap<>(); - - static { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - coverUI.put( - side, - UIBuilder.of() - .container((player, world, x, y, z) -> { - final TileEntity te = world.getTileEntity(x, y, z); - if (!(te instanceof ICoverable gtTileEntity)) return null; - final GT_CoverBehaviorBase cover = gtTileEntity.getCoverBehaviorAtSideNew(side); - return createCoverContainer( - player, - cover::createWindow, - te::markDirty, - gtTileEntity.getCoverIDAtSide(side), - side, - gtTileEntity); - }) - .gui((player, world, x, y, z) -> { - if (!world.isRemote) return null; - final TileEntity te = world.getTileEntity(x, y, z); - if (!(te instanceof ICoverable gtTileEntity)) return null; - final GT_CoverBehaviorBase cover = gtTileEntity.getCoverBehaviorAtSideNew(side); - return createCoverGuiContainer( - player, - cover::createWindow, - gtTileEntity.getCoverIDAtSide(side), - side, - gtTileEntity); - }) - .build()); - } - } - - /** - * Opens TileEntity UI, created by {@link ITileWithModularUI#createWindow}. - */ - public static void openGTTileEntityUI(IHasWorldObjectAndCoords aTileEntity, EntityPlayer aPlayer) { - if (aTileEntity.isClientSide() || aPlayer instanceof FakePlayer) return; - GTTileEntityDefaultUI.open( - aPlayer, - aTileEntity.getWorld(), - aTileEntity.getXCoord(), - aTileEntity.getYCoord(), - aTileEntity.getZCoord()); - } - - /** - * Opens cover UI, created by {@link GT_CoverBehaviorBase#createWindow}. - */ - public static void openCoverUI(ICoverable tileEntity, EntityPlayer player, ForgeDirection side) { - if (tileEntity.isClientSide()) return; - - GT_Values.NW.sendToPlayer( - new GT_Packet_SendCoverData( - side, - tileEntity.getCoverIDAtSide(side), - tileEntity.getComplexCoverDataAtSide(side), - tileEntity), - (EntityPlayerMP) player); - - coverUI.get(side) - .open( - player, - tileEntity.getWorld(), - tileEntity.getXCoord(), - tileEntity.getYCoord(), - tileEntity.getZCoord()); - } - - /** - * Opens UI for player's item, created by - * {@link com.gtnewhorizons.modularui.api.screen.IItemWithModularUI#createWindow}. - */ - public static void openPlayerHeldItemUI(EntityPlayer player) { - if (NetworkUtils.isClient()) return; - UIInfos.PLAYER_HELD_ITEM_UI.open(player); - } - - private static ModularUIContainer createTileEntityContainer(EntityPlayer player, - Function windowCreator, Runnable onWidgetUpdate, - ContainerConstructor containerCreator) { - final UIBuildContext buildContext = new UIBuildContext(player); - final ModularWindow window = windowCreator.apply(buildContext); - if (window == null) return null; - return containerCreator.of(new ModularUIContext(buildContext, onWidgetUpdate), window); - } - - @SideOnly(Side.CLIENT) - private static ModularGui createTileEntityGuiContainer(EntityPlayer player, - Function windowCreator, ContainerConstructor containerConstructor) { - final ModularUIContainer container = createTileEntityContainer( - player, - windowCreator, - null, - containerConstructor); - if (container == null) return null; - return new ModularGui(container); - } - - private static ModularUIContainer createCoverContainer(EntityPlayer player, - Function windowCreator, Runnable onWidgetUpdate, int coverID, - ForgeDirection side, ICoverable tile) { - final GT_CoverUIBuildContext buildContext = new GT_CoverUIBuildContext(player, coverID, side, tile, false); - final ModularWindow window = windowCreator.apply(buildContext); - if (window == null) return null; - return new ModularUIContainer(new ModularUIContext(buildContext, onWidgetUpdate), window); - } - - @SideOnly(Side.CLIENT) - private static ModularGui createCoverGuiContainer(EntityPlayer player, - Function windowCreator, int coverID, ForgeDirection side, - ICoverable tile) { - final ModularUIContainer container = createCoverContainer(player, windowCreator, null, coverID, side, tile); - if (container == null) { - return null; - } - return new ModularGui(container); - } - - @FunctionalInterface - public interface ContainerConstructor { - - ModularUIContainer of(ModularUIContext context, ModularWindow mainWindow); - } -} diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java deleted file mode 100644 index 6031399c06..0000000000 --- a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java +++ /dev/null @@ -1,542 +0,0 @@ -package gregtech.api.gui.modularui; - -import static gregtech.api.enums.Mods.GregTech; - -import java.util.function.BiFunction; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import com.gtnewhorizons.modularui.api.drawable.AdaptableUITexture; -import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; -import com.gtnewhorizons.modularui.api.drawable.UITexture; - -public class GT_UITextures { - - public static final UITexture TRANSPARENT = UITexture.fullImage(GregTech.ID, "gui/picture/transparent"); - - public static final AdaptableUITexture BACKGROUND_SINGLEBLOCK_DEFAULT = AdaptableUITexture - .of(GregTech.ID, "gui/background/singleblock_default", 176, 166, 4); - public static final SteamTexture BACKGROUND_STEAM = SteamTexture - .adaptableTexture(GregTech.ID, "gui/background/%s", 176, 166, 4); - public static final UITexture BACKGROUND_FUSION_COMPUTER = UITexture - .fullImage(GregTech.ID, "gui/background/fusion_computer"); - public static final AdaptableUITexture BACKGROUND_TEXT_FIELD = AdaptableUITexture - .of(GregTech.ID, "gui/background/text_field", 142, 28, 1); - public static final AdaptableUITexture BACKGROUND_TEXT_FIELD_LIGHT_GRAY = AdaptableUITexture - .of(GregTech.ID, "gui/background/text_field_light_gray", 61, 12, 1); - public static final AdaptableUITexture BACKGROUND_NEI_SINGLE_RECIPE = AdaptableUITexture - .of(GregTech.ID, "gui/background/nei_single_recipe.png", 64, 64, 2); - public static final UITexture BACKGROUND_FLOCCULATION_RECIPE = UITexture - .fullImage(GregTech.ID, "gui/background/flocculation_recipe.png"); - public static final SteamTexture SLOT_ITEM_STEAM = SteamTexture.fullImage(GregTech.ID, "gui/slot/item_%s"); - public static final SteamTexture SLOT_FLUID_STEAM = SteamTexture.fullImage(GregTech.ID, "gui/slot/fluid_%s"); - public static final AdaptableUITexture SLOT_DARK_GRAY = AdaptableUITexture - .of(GregTech.ID, "gui/slot/dark_gray", 18, 18, 1); - public static final AdaptableUITexture SLOT_MAINTENANCE = AdaptableUITexture - .of(GregTech.ID, "gui/slot/maintenance", 20, 20, 1); - public static final AdaptableUITexture SLOT_UPLIFTED = AdaptableUITexture - .of(GregTech.ID, "gui/slot/uplifted", 18, 18, 1); - - public static final UITexture OVERLAY_SLOT_ARROW_ME = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/arrow_me"); - public static final UITexture OVERLAY_SLOT_PATTERN_ME = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/pattern_me"); - - public static final UITexture OVERLAY_SLOT_BEAKER_1 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/beaker_1"); - public static final UITexture OVERLAY_SLOT_BEAKER_2 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/beaker_2"); - public static final UITexture OVERLAY_SLOT_BEE_DRONE = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/bee_drone"); - public static final UITexture OVERLAY_SLOT_BEE_QUEEN = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/bee_queen"); - public static final UITexture OVERLAY_SLOT_BENDER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/bender"); - public static final UITexture OVERLAY_SLOT_BOX = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/box"); - public static final UITexture OVERLAY_SLOT_BOXED = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/boxed"); - public static final UITexture OVERLAY_SLOT_CANISTER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/canister"); - public static final SteamTexture OVERLAY_SLOT_CANISTER_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/canister_%s"); - public static final UITexture OVERLAY_SLOT_CANNER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/canner"); - public static final UITexture OVERLAY_SLOT_CAULDRON = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/cauldron"); - public static final UITexture OVERLAY_SLOT_CENTRIFUGE = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/centrifuge"); - public static final UITexture OVERLAY_SLOT_CENTRIFUGE_FLUID = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/centrifuge_fluid"); - public static final SteamTexture OVERLAY_SLOT_CENTRIFUGE_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/centrifuge_%s"); - public static final UITexture OVERLAY_SLOT_CHARGER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/charger"); - public static final UITexture OVERLAY_SLOT_CHARGER_FLUID = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/charger_fluid"); - public static final UITexture OVERLAY_SLOT_CIRCUIT = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/circuit"); - public static final SteamTexture OVERLAY_SLOT_COAL_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/coal_%s"); - public static final UITexture OVERLAY_SLOT_COMPRESSOR = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/compressor"); - public static final SteamTexture OVERLAY_SLOT_COMPRESSOR_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/compressor_%s"); - public static final UITexture OVERLAY_SLOT_CRUSHED_ORE = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/crushed_ore"); - public static final SteamTexture OVERLAY_SLOT_CRUSHED_ORE_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/crushed_ore_%s"); - public static final UITexture OVERLAY_SLOT_CUTTER_SLICED = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/cutter_sliced"); - public static final UITexture OVERLAY_SLOT_DATA_ORB = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/data_orb"); - public static final UITexture OVERLAY_SLOT_DATA_STICK = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/data_stick"); - public static final UITexture OVERLAY_SLOT_DUST = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/dust"); - public static final SteamTexture OVERLAY_SLOT_DUST_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/dust_%s"); - public static final SteamTexture OVERLAY_SLOT_BLOCK_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/block_%s"); - public static final UITexture OVERLAY_SLOT_EXPLOSIVE = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/explosive"); - public static final UITexture OVERLAY_SLOT_EXTRUDER_SHAPE = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/extruder_shape"); - public static final UITexture OVERLAY_SLOT_FILTER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/filter"); - public static final UITexture OVERLAY_SLOT_FURNACE = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/furnace"); - public static final SteamTexture OVERLAY_SLOT_FURNACE_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/furnace_%s"); - public static final UITexture OVERLAY_SLOT_GEM = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/gem"); - public static final UITexture OVERLAY_SLOT_HAMMER = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/hammer"); - public static final SteamTexture OVERLAY_SLOT_HAMMER_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/hammer_%s"); - public static final UITexture OVERLAY_SLOT_HEATER_1 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/heater_1"); - public static final UITexture OVERLAY_SLOT_HEATER_2 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/heater_2"); - public static final UITexture OVERLAY_SLOT_IMPLOSION = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/implosion"); - public static final UITexture OVERLAY_SLOT_IN = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/in"); - public static final SteamTexture OVERLAY_SLOT_IN_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/in_%s"); - public static final SteamTexture OVERLAY_SLOT_INGOT_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/ingot_%s"); - public static final UITexture OVERLAY_SLOT_INT_CIRCUIT = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/int_circuit"); - public static final UITexture OVERLAY_SLOT_LENS = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/lens"); - public static final UITexture OVERLAY_SLOT_MICROSCOPE = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/microscope"); - public static final UITexture OVERLAY_SLOT_MINING_PIPE = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/mining_pipe"); - public static final UITexture OVERLAY_SLOT_MOLD = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/mold"); - public static final UITexture OVERLAY_SLOT_MOLECULAR_1 = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/molecular_1"); - public static final UITexture OVERLAY_SLOT_MOLECULAR_2 = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/molecular_2"); - public static final UITexture OVERLAY_SLOT_MOLECULAR_3 = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/molecular_3"); - public static final UITexture OVERLAY_SLOT_OUT = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/out"); - public static final SteamTexture OVERLAY_SLOT_OUT_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/overlay_slot/out_%s"); - public static final UITexture OVERLAY_SLOT_PAGE_BLANK = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/page_blank"); - public static final UITexture OVERLAY_SLOT_PAGE_PRINTED = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/page_printed"); - public static final UITexture OVERLAY_SLOT_PRESS_1 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/press_1"); - public static final UITexture OVERLAY_SLOT_PRESS_2 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/press_2"); - public static final UITexture OVERLAY_SLOT_PRESS_3 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/press_3"); - public static final UITexture OVERLAY_SLOT_RECYCLE = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/recycle"); - public static final UITexture OVERLAY_SLOT_ROD_1 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/rod_1"); - public static final UITexture OVERLAY_SLOT_ROD_2 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/rod_2"); - public static final UITexture OVERLAY_SLOT_SLICE_SHAPE = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/slice_shape"); - public static final UITexture OVERLAY_SLOT_SLICER_SLICED = UITexture - .fullImage(GregTech.ID, "gui/overlay_slot/slicer_sliced"); - public static final UITexture OVERLAY_SLOT_SQUARE = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/square"); - public static final UITexture OVERLAY_SLOT_UUA = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/uua"); - public static final UITexture OVERLAY_SLOT_UUM = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/uum"); - public static final UITexture OVERLAY_SLOT_VIAL_1 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/vial_1"); - public static final UITexture OVERLAY_SLOT_VIAL_2 = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/vial_2"); - public static final UITexture OVERLAY_SLOT_WIREMILL = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/wiremill"); - public static final UITexture OVERLAY_SLOT_WRENCH = UITexture.fullImage(GregTech.ID, "gui/overlay_slot/wrench"); - public static final UITexture[] OVERLAY_SLOTS_NUMBER = IntStream.range(0, 12) - .mapToObj(i -> UITexture.fullImage(GregTech.ID, "gui/overlay_slot/number_" + i)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - - public static final UITexture PROGRESSBAR_ARROW = UITexture.fullImage(GregTech.ID, "gui/progressbar/arrow"); - public static final SteamTexture PROGRESSBAR_ARROW_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/progressbar/arrow_%s"); - public static final SteamTexture PROGRESSBAR_ARROW_2_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/progressbar/arrow_2_%s"); - public static final UITexture PROGRESSBAR_ARROW_MULTIPLE = UITexture - .fullImage(GregTech.ID, "gui/progressbar/arrow_multiple"); - public static final UITexture PROGRESSBAR_ASSEMBLE = UITexture.fullImage(GregTech.ID, "gui/progressbar/assemble"); - public static final UITexture PROGRESSBAR_ASSEMBLY_LINE_1 = UITexture - .fullImage(GregTech.ID, "gui/progressbar/assemblyline_1"); - public static final UITexture PROGRESSBAR_ASSEMBLY_LINE_2 = UITexture - .fullImage(GregTech.ID, "gui/progressbar/assemblyline_2"); - public static final UITexture PROGRESSBAR_ASSEMBLY_LINE_3 = UITexture - .fullImage(GregTech.ID, "gui/progressbar/assemblyline_3"); - public static final UITexture PROGRESSBAR_BATH = UITexture.fullImage(GregTech.ID, "gui/progressbar/bath"); - public static final UITexture PROGRESSBAR_BENDING = UITexture.fullImage(GregTech.ID, "gui/progressbar/bending"); - public static final SteamTexture PROGRESSBAR_BOILER_EMPTY_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/progressbar/boiler_empty_%s"); - public static final UITexture PROGRESSBAR_BOILER_HEAT = UITexture - .fullImage(GregTech.ID, "gui/progressbar/boiler_heat"); - public static final UITexture PROGRESSBAR_BOILER_STEAM = UITexture - .fullImage(GregTech.ID, "gui/progressbar/boiler_steam"); - public static final UITexture PROGRESSBAR_BOILER_WATER = UITexture - .fullImage(GregTech.ID, "gui/progressbar/boiler_water"); - public static final UITexture PROGRESSBAR_CANNER = UITexture.fullImage(GregTech.ID, "gui/progressbar/canner"); - public static final UITexture PROGRESSBAR_CIRCUIT_ASSEMBLER = UITexture - .fullImage(GregTech.ID, "gui/progressbar/circuit_assembler"); - public static final UITexture PROGRESSBAR_COMPRESS = UITexture.fullImage(GregTech.ID, "gui/progressbar/compress"); - public static final SteamTexture PROGRESSBAR_COMPRESS_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/progressbar/compress_%s"); - public static final UITexture PROGRESSBAR_CUT = UITexture.fullImage(GregTech.ID, "gui/progressbar/cut"); - public static final UITexture PROGRESSBAR_EXTRACT = UITexture.fullImage(GregTech.ID, "gui/progressbar/extract"); - public static final SteamTexture PROGRESSBAR_EXTRACT_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/progressbar/extract_%s"); - public static final UITexture PROGRESSBAR_EXTRUDE = UITexture.fullImage(GregTech.ID, "gui/progressbar/extrude"); - public static final SteamTexture PROGRESSBAR_FUEL_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/progressbar/fuel_%s"); - public static final UITexture PROGRESSBAR_HAMMER = UITexture.fullImage(GregTech.ID, "gui/progressbar/hammer"); - public static final UITexture PROGRESSBAR_HAMMER_BASE = UITexture - .fullImage(GregTech.ID, "gui/progressbar/hammer_base"); - public static final SteamTexture PROGRESSBAR_HAMMER_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/progressbar/hammer_%s"); - public static final SteamTexture PROGRESSBAR_HAMMER_BASE_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/progressbar/hammer_base_%s"); - public static final UITexture PROGRESSBAR_LATHE = UITexture.fullImage(GregTech.ID, "gui/progressbar/lathe"); - public static final UITexture PROGRESSBAR_LATHE_BASE = UITexture - .fullImage(GregTech.ID, "gui/progressbar/lathe_base"); - public static final UITexture PROGRESSBAR_MACERATE = UITexture.fullImage(GregTech.ID, "gui/progressbar/macerate"); - public static final SteamTexture PROGRESSBAR_MACERATE_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/progressbar/macerate_%s"); - public static final UITexture PROGRESSBAR_MAGNET = UITexture.fullImage(GregTech.ID, "gui/progressbar/magnet"); - public static final UITexture PROGRESSBAR_MIXER = UITexture.fullImage(GregTech.ID, "gui/progressbar/mixer"); - public static final UITexture PROGRESSBAR_RECYCLE = UITexture.fullImage(GregTech.ID, "gui/progressbar/recycle"); - public static final UITexture PROGRESSBAR_SIFT = UITexture.fullImage(GregTech.ID, "gui/progressbar/sift"); - public static final UITexture PROGRESSBAR_SLICE = UITexture.fullImage(GregTech.ID, "gui/progressbar/slice"); - public static final UITexture PROGRESSBAR_STORED_EU = UITexture.fullImage(GregTech.ID, "gui/progressbar/stored_eu"); - public static final UITexture PROGRESSBAR_WIREMILL = UITexture.fullImage(GregTech.ID, "gui/progressbar/wiremill"); - public static final UITexture PROGRESSBAR_FLOCCULATION = UITexture - .fullImage(GregTech.ID, "gui/progressbar/flocculation"); - public static final UITexture PROGRESSBAR_CLARIFIER = UITexture.fullImage(GregTech.ID, "gui/progressbar/clarifier"); - public static final UITexture PROGRESSBAR_PH_NEUTRALIZATION = UITexture - .fullImage(GregTech.ID, "gui/progressbar/phneutralization"); - public static final UITexture PROGRESSBAR_OZONATION = UITexture.fullImage(GregTech.ID, "gui/progressbar/ozonation"); - public static final UITexture PROGRESSBAR_PLASMA_HEATER = UITexture - .fullImage(GregTech.ID, "gui/progressbar/water_plasma_heater"); - - public static FallbackableUITexture fallbackableProgressbar(String name, UITexture fallback) { - return new FallbackableUITexture(UITexture.fullImage(GregTech.ID, "gui/progressbar/" + name), fallback); - } - - public static final UITexture TAB_COVER_NORMAL = UITexture.fullImage(GregTech.ID, "gui/tab/cover_normal"); - public static final UITexture TAB_COVER_HIGHLIGHT = UITexture.fullImage(GregTech.ID, "gui/tab/cover_highlight"); - public static final UITexture TAB_COVER_DISABLED = UITexture.fullImage(GregTech.ID, "gui/tab/cover_disabled"); - public static final SteamTexture TAB_COVER_STEAM_NORMAL = SteamTexture - .fullImage(GregTech.ID, "gui/tab/cover_%s_normal"); - public static final SteamTexture TAB_COVER_STEAM_HIGHLIGHT = SteamTexture - .fullImage(GregTech.ID, "gui/tab/cover_%s_highlight"); - public static final SteamTexture TAB_COVER_STEAM_DISABLED = SteamTexture - .fullImage(GregTech.ID, "gui/tab/cover_%s_disabled"); - public static final AdaptableUITexture TAB_TITLE = AdaptableUITexture.of(GregTech.ID, "gui/tab/title", 28, 28, 4); - public static final AdaptableUITexture TAB_TITLE_DARK = AdaptableUITexture - .of(GregTech.ID, "gui/tab/title_dark", 28, 28, 4); - public static final SteamTexture TAB_TITLE_STEAM = SteamTexture - .adaptableTexture(GregTech.ID, "gui/tab/title_%s", 28, 28, 4); - public static final SteamTexture TAB_TITLE_DARK_STEAM = SteamTexture - .adaptableTexture(GregTech.ID, "gui/tab/title_dark_%s", 28, 28, 4); - public static final AdaptableUITexture TAB_TITLE_ANGULAR = AdaptableUITexture - .of(GregTech.ID, "gui/tab/title_angular", 28, 28, 4); - public static final SteamTexture TAB_TITLE_ANGULAR_STEAM = SteamTexture - .adaptableTexture(GregTech.ID, "gui/tab/title_angular_%s", 28, 28, 4); - - public static final UITexture BUTTON_STANDARD = AdaptableUITexture - .of(GregTech.ID, "gui/button/standard", 18, 18, 1); - public static final UITexture BUTTON_STANDARD_PRESSED = AdaptableUITexture - .of(GregTech.ID, "gui/button/standard_pressed", 18, 18, 1); - public static final UITexture BUTTON_STANDARD_DISABLED = AdaptableUITexture - .of(GregTech.ID, "gui/button/standard_disabled", 18, 18, 1); - public static final UITexture BUTTON_STANDARD_TOGGLE = AdaptableUITexture - .of(GregTech.ID, "gui/button/standard_toggle", 18, 18, 1); - public static final UITexture BUTTON_STANDARD_TOGGLE_DISABLED = AdaptableUITexture - .of(GregTech.ID, "gui/button/standard_toggle_disabled", 18, 18, 1); - public static final UITexture BUTTON_COVER_NORMAL = UITexture.fullImage(GregTech.ID, "gui/button/cover_normal"); - public static final UITexture BUTTON_COVER_NORMAL_HOVERED = UITexture - .fullImage(GregTech.ID, "gui/button/cover_normal_hovered"); - public static final UITexture BUTTON_COVER_NORMAL_DISABLED = UITexture - .fullImage(GregTech.ID, "gui/button/cover_normal_disabled"); - - public static final UITexture OVERLAY_BUTTON_DISABLE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/disable"); - public static final UITexture OVERLAY_BUTTON_REDSTONE_OFF = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/redstone_off"); - public static final UITexture OVERLAY_BUTTON_REDSTONE_ON = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/redstone_on"); - public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_ON = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/power_switch_on"); - public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_OFF = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/power_switch_off"); - public static final UITexture OVERLAY_BUTTON_VOID_EXCESS_NONE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/void_excess_none"); - public static final UITexture OVERLAY_BUTTON_VOID_EXCESS_ITEM = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/void_excess_item"); - public static final UITexture OVERLAY_BUTTON_VOID_EXCESS_FLUID = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/void_excess_fluid"); - public static final UITexture OVERLAY_BUTTON_VOID_EXCESS_ALL = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/void_excess_all"); - public static final UITexture OVERLAY_BUTTON_INPUT_SEPARATION_ON = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/input_separation_on"); - public static final UITexture OVERLAY_BUTTON_INPUT_SEPARATION_ON_DISABLED = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/input_separation_on_disabled"); - public static final UITexture OVERLAY_BUTTON_INPUT_SEPARATION_OFF = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/input_separation_off"); - public static final UITexture OVERLAY_BUTTON_INPUT_SEPARATION_OFF_DISABLED = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/input_separation_off_disabled"); - public static final UITexture OVERLAY_BUTTON_RECIPE_LOCKED = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/recipe_locked"); - public static final UITexture OVERLAY_BUTTON_RECIPE_LOCKED_DISABLED = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/recipe_locked_disabled"); - public static final UITexture OVERLAY_BUTTON_RECIPE_UNLOCKED = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/recipe_unlocked"); - public static final UITexture OVERLAY_BUTTON_RECIPE_UNLOCKED_DISABLED = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/recipe_unlocked_disabled"); - public static final UITexture OVERLAY_BUTTON_BATCH_MODE_ON = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/batch_mode_on"); - public static final UITexture OVERLAY_BUTTON_BATCH_MODE_ON_DISABLED = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/batch_mode_on_disabled"); - public static final UITexture OVERLAY_BUTTON_BATCH_MODE_OFF = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/batch_mode_off"); - public static final UITexture OVERLAY_BUTTON_BATCH_MODE_OFF_DISABLED = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/batch_mode_off_disabled"); - public static final UITexture OVERLAY_BUTTON_STRUCTURE_UPDATE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/structure_update"); - public static final UITexture OVERLAY_BUTTON_FORBIDDEN = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/forbidden"); - public static final UITexture OVERLAY_BUTTON_LOCKED = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/lock_small"); - public static final UITexture OVERLAY_BUTTON_DOWN_TIERING_ON = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/down_tiering_on"); - public static final UITexture OVERLAY_BUTTON_DOWN_TIERING_OFF = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/down_tiering_off"); - public static final UITexture OVERLAY_BUTTON_CHECKMARK = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/checkmark"); - public static final UITexture OVERLAY_BUTTON_CROSS = UITexture.fullImage(GregTech.ID, "gui/overlay_button/cross"); - public static final UITexture OVERLAY_BUTTON_WHITELIST = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/whitelist"); - public static final UITexture OVERLAY_BUTTON_BLACKLIST = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/blacklist"); - public static final UITexture OVERLAY_BUTTON_PROGRESS = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/progress"); - public static final UITexture OVERLAY_BUTTON_EXPORT = UITexture.fullImage(GregTech.ID, "gui/overlay_button/export"); - public static final UITexture OVERLAY_BUTTON_IMPORT = UITexture.fullImage(GregTech.ID, "gui/overlay_button/import"); - public static final UITexture OVERLAY_BUTTON_AUTOOUTPUT_ITEM = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/autooutput_item"); - public static final UITexture OVERLAY_BUTTON_AUTOOUTPUT_FLUID = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/autooutput_fluid"); - public static final UITexture OVERLAY_BUTTON_ALLOW_INPUT = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/allow_input"); - public static final UITexture OVERLAY_BUTTON_ALLOW_OUTPUT = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/allow_output"); - public static final UITexture OVERLAY_BUTTON_AUTOPULL_ME = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/auto_pull_me"); - public static final UITexture OVERLAY_BUTTON_AUTOPULL_ME_DISABLED = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/auto_pull_me_disabled"); - public static final UITexture OVERLAY_BUTTON_BLOCK_INPUT = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/block_input"); - public static final UITexture OVERLAY_BUTTON_BLOCK_OUTPUT = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/block_output"); - public static final UITexture OVERLAY_BUTTON_ARROW_GREEN_UP = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/arrow_green_up"); - public static final UITexture OVERLAY_BUTTON_ARROW_GREEN_DOWN = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/arrow_green_down"); - public static final UITexture OVERLAY_BUTTON_CYCLIC = UITexture.fullImage(GregTech.ID, "gui/overlay_button/cyclic"); - public static final UITexture OVERLAY_BUTTON_SHUFFLE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/shuffle"); - public static final UITexture OVERLAY_BUTTON_EMIT_ENERGY = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/emit_energy"); - public static final UITexture OVERLAY_BUTTON_EMIT_REDSTONE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/emit_redstone"); - public static final UITexture OVERLAY_BUTTON_INVERT_REDSTONE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/invert_redstone"); - public static final UITexture OVERLAY_BUTTON_STOCKING_MODE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/stocking_mode"); - public static final UITexture OVERLAY_BUTTON_INVERT_FILTER = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/invert_filter"); - public static final UITexture OVERLAY_BUTTON_NBT = UITexture.fullImage(GregTech.ID, "gui/overlay_button/nbt"); - public static final UITexture OVERLAY_BUTTON_PRINT = UITexture.fullImage(GregTech.ID, "gui/overlay_button/print"); - public static final UITexture OVERLAY_BUTTON_TRANSPOSE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/transpose"); - public static final UITexture OVERLAY_BUTTON_SORTING_MODE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/sorting_mode"); - public static final UITexture OVERLAY_BUTTON_ONE_STACK_LIMIT = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/one_stack_limit"); - public static final UITexture OVERLAY_BUTTON_BOUNDING_BOX = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/bounding_box"); - public static final UITexture OVERLAY_BUTTON_MINUS_SMALL = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/minus_small"); - public static final UITexture OVERLAY_BUTTON_MINUS_LARGE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/minus_large"); - public static final UITexture OVERLAY_BUTTON_PLUS_SMALL = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/plus_small"); - public static final UITexture OVERLAY_BUTTON_PLUS_LARGE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/plus_large"); - public static final UITexture OVERLAY_BUTTON_GATE_AND = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/gate_and"); - public static final UITexture OVERLAY_BUTTON_GATE_NAND = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/gate_nand"); - public static final UITexture OVERLAY_BUTTON_GATE_OR = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/gate_or"); - public static final UITexture OVERLAY_BUTTON_GATE_NOR = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/gate_nor"); - public static final UITexture OVERLAY_BUTTON_ANALOG = UITexture.fullImage(GregTech.ID, "gui/overlay_button/analog"); - public static final UITexture OVERLAY_BUTTON_LOCK = UITexture.fullImage(GregTech.ID, "gui/overlay_button/lock"); - public static final UITexture OVERLAY_BUTTON_INPUT_FROM_OUTPUT_SIDE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/input_from_output_side"); - public static final UITexture OVERLAY_BUTTON_TANK_VOID_EXCESS = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/tank_void_excess"); - public static final UITexture OVERLAY_BUTTON_TANK_VOID_ALL = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/tank_void_all"); - public static final UITexture OVERLAY_BUTTON_NEI = UITexture.fullImage(GregTech.ID, "gui/overlay_button/nei"); - public static final UITexture OVERLAY_BUTTON_USE_PROCESSING_STATE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/use_processing_state.png"); - public static final UITexture OVERLAY_BUTTON_USE_INVERTED_PROCESSING_STATE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/use_inverted_processing_state.png"); - public static final UITexture OVERLAY_BUTTON_CHUNK_LOADING = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/chunkloading"); - public static final UITexture OVERLAY_BUTTON_CHUNK_LOADING_OFF = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/chunkloading_off"); - public static final UITexture OVERLAY_BUTTON_WORK_AREA = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/work_area"); - public static final UITexture OVERLAY_BUTTON_REPLACE_COBBLE_ON = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/replace_cobble_on"); - public static final UITexture OVERLAY_BUTTON_REPLACE_COBBLE_OFF = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/replace_cobble_off"); - public static final UITexture OVERLAY_BUTTON_RETRACT_PIPE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/retract_pipes"); - public static final UITexture OVERLAY_BUTTON_HOURGLASS = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/hourglass"); - - public static final UITexture OVERLAY_BUTTON_LIQUIDMODE = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/LiquidMode"); - - public static final UITexture OVERLAY_BUTTON_LIQUIDMODE_OFF = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/LiquidMode_off"); - - // These icons are for mode switching machine modes - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_DEFAULT = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_default"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_CHEMBATH = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_chembath"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_WASHPLANT = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_washplant"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_SIMPLEWASHER = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_simplewasher"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_PACKAGER = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_packager"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_UNPACKAGER = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_unpackager"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_SEPARATOR = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_separator"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_POLARIZER = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_polarizer"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_LPF_FLUID = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_lpf_fluid"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_LPF_METAL = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_lpf_metal"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_BENDING = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_bending"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_FORMING = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_forming"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_SLICING = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_slicing"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_CUTTING = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_cutting"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_COMPRESSING = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_compressing"); - public static final UITexture OVERLAY_BUTTON_MACHINEMODE_SINGULARITY = UITexture - .fullImage(GregTech.ID, "gui/overlay_button/machine_mode_singularity"); - - /** - * Can adjust size as needed. - */ - public static final AdaptableUITexture PICTURE_SCREEN_BLACK = AdaptableUITexture - .of(GregTech.ID, "gui/picture/screen_black", 16, 16, 2); - - public static final UITexture PICTURE_RADIATION_WARNING = UITexture - .fullImage(GregTech.ID, "gui/picture/radiation_warning"); - public static final UITexture PICTURE_GT_LOGO_17x17_TRANSPARENT = UITexture - .fullImage(GregTech.ID, "gui/picture/gt_logo_17x17_transparent"); - public static final UITexture PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY = UITexture - .fullImage(GregTech.ID, "gui/picture/gt_logo_17x17_transparent_gray"); - public static final SteamTexture PICTURE_GT_LOGO_17x17_TRANSPARENT_STEAM = SteamTexture - .fullImage(GregTech.ID, "gui/picture/gt_logo_17x17_transparent_%s"); - public static final UITexture PICTURE_GT_LOGO_18x18 = UITexture.fullImage(GregTech.ID, "gui/picture/gt_logo_18x18"); - public static final UITexture PICTURE_GT_LOGO_19x19 = UITexture.fullImage(GregTech.ID, "gui/picture/gt_logo_19x19"); - public static final UITexture PICTURE_INFORMATION = UITexture.fullImage(GregTech.ID, "gui/picture/information"); - public static final UITexture PICTURE_STALLED_ELECTRICITY = UITexture - .fullImage(GregTech.ID, "gui/picture/stalled_electricity"); - public static final UITexture PICTURE_STALLED_STEAM = UITexture.fullImage(GregTech.ID, "gui/picture/stalled_steam"); - public static final BiFunction PICTURE_ARROW_22_RED = (width, fromRight) -> UITexture - .partly( - GregTech.ID, - "gui/picture/arrow_22_red", - 87, - 22, - fromRight ? 87 - width : 0, - 0, - fromRight ? 87 : width, - 22); - public static final BiFunction PICTURE_ARROW_22_BLUE = (width, fromRight) -> UITexture - .partly( - GregTech.ID, - "gui/picture/arrow_22_blue", - 87, - 22, - fromRight ? 87 - width : 0, - 0, - fromRight ? 87 : width, - 22); - public static final BiFunction PICTURE_ARROW_22_WHITE = (width, fromRight) -> UITexture - .partly( - GregTech.ID, - "gui/picture/arrow_22_white", - 87, - 22, - fromRight ? 87 - width : 0, - 0, - fromRight ? 87 : width, - 22); - public static final BiFunction PICTURE_ARROW_24_RED = (width, fromRight) -> UITexture - .partly( - GregTech.ID, - "gui/picture/arrow_24_red", - 69, - 24, - fromRight ? 69 - width : 0, - 0, - fromRight ? 69 : width, - 24); - public static final BiFunction PICTURE_ARROW_24_BLUE = (width, fromRight) -> UITexture - .partly( - GregTech.ID, - "gui/picture/arrow_24_blue", - 69, - 24, - fromRight ? 69 - width : 0, - 0, - fromRight ? 69 : width, - 24); - public static final BiFunction PICTURE_ARROW_24_WHITE = (width, fromRight) -> UITexture - .partly( - GregTech.ID, - "gui/picture/arrow_24_white", - 69, - 24, - fromRight ? 69 - width : 0, - 0, - fromRight ? 69 : width, - 24); - public static final UITexture PICTURE_FLUID_WINDOW = UITexture.fullImage(GregTech.ID, "gui/picture/fluid_window"); - public static final UITexture PICTURE_FLUID_TANK = UITexture.fullImage(GregTech.ID, "gui/picture/fluid_tank"); - public static final UITexture PICTURE_SLOTS_HOLO_3BY3 = UITexture - .fullImage(GregTech.ID, "gui/picture/slots_holo_3by3"); - public static final UITexture PICTURE_ARROW_DOUBLE = UITexture.fullImage(GregTech.ID, "gui/picture/arrow_double"); - public static final UITexture PICTURE_SUPER_BUFFER = UITexture.fullImage(GregTech.ID, "gui/picture/super_buffer"); - public static final UITexture PICTURE_SQUARE_LIGHT_GRAY = UITexture - .fullImage(GregTech.ID, "gui/picture/square_light_gray"); - public static final UITexture PICTURE_GAUGE = UITexture.fullImage(GregTech.ID, "gui/picture/gauge"); - public static final UITexture PICTURE_ITEM_IN = UITexture.fullImage(GregTech.ID, "gui/picture/item_in"); - public static final UITexture PICTURE_ITEM_OUT = UITexture.fullImage(GregTech.ID, "gui/picture/item_out"); - public static final UITexture PICTURE_FLUID_IN = UITexture.fullImage(GregTech.ID, "gui/picture/fluid_in"); - public static final UITexture PICTURE_FLUID_OUT = UITexture.fullImage(GregTech.ID, "gui/picture/fluid_out"); -} diff --git a/src/main/java/gregtech/api/gui/modularui/GUITextureSet.java b/src/main/java/gregtech/api/gui/modularui/GUITextureSet.java index 18d7741421..0063d59346 100644 --- a/src/main/java/gregtech/api/gui/modularui/GUITextureSet.java +++ b/src/main/java/gregtech/api/gui/modularui/GUITextureSet.java @@ -30,29 +30,26 @@ public class GUITextureSet { private UITexture gregtechLogo; public static final GUITextureSet DEFAULT = new GUITextureSet() - .setMainBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT) + .setMainBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT) .setItemSlot(ModularUITextures.ITEM_SLOT) .setFluidSlot(ModularUITextures.FLUID_SLOT) - .setCoverTab( - GT_UITextures.TAB_COVER_NORMAL, - GT_UITextures.TAB_COVER_HIGHLIGHT, - GT_UITextures.TAB_COVER_DISABLED) - .setTitleTab(GT_UITextures.TAB_TITLE, GT_UITextures.TAB_TITLE_DARK, GT_UITextures.TAB_TITLE_ANGULAR) - .setGregTechLogo(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT); + .setCoverTab(GTUITextures.TAB_COVER_NORMAL, GTUITextures.TAB_COVER_HIGHLIGHT, GTUITextures.TAB_COVER_DISABLED) + .setTitleTab(GTUITextures.TAB_TITLE, GTUITextures.TAB_TITLE_DARK, GTUITextures.TAB_TITLE_ANGULAR) + .setGregTechLogo(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT); public static final Function STEAM = steamVariant -> new GUITextureSet() - .setMainBackground(GT_UITextures.BACKGROUND_STEAM.get(steamVariant)) - .setItemSlot(GT_UITextures.SLOT_ITEM_STEAM.get(steamVariant)) - .setFluidSlot(GT_UITextures.SLOT_FLUID_STEAM.get(steamVariant)) + .setMainBackground(GTUITextures.BACKGROUND_STEAM.get(steamVariant)) + .setItemSlot(GTUITextures.SLOT_ITEM_STEAM.get(steamVariant)) + .setFluidSlot(GTUITextures.SLOT_FLUID_STEAM.get(steamVariant)) .setCoverTab( - GT_UITextures.TAB_COVER_STEAM_NORMAL.get(steamVariant), - GT_UITextures.TAB_COVER_STEAM_HIGHLIGHT.get(steamVariant), - GT_UITextures.TAB_COVER_STEAM_DISABLED.get(steamVariant)) + GTUITextures.TAB_COVER_STEAM_NORMAL.get(steamVariant), + GTUITextures.TAB_COVER_STEAM_HIGHLIGHT.get(steamVariant), + GTUITextures.TAB_COVER_STEAM_DISABLED.get(steamVariant)) .setTitleTab( - GT_UITextures.TAB_TITLE_STEAM.getAdaptable(steamVariant), - GT_UITextures.TAB_TITLE_DARK_STEAM.getAdaptable(steamVariant), - GT_UITextures.TAB_TITLE_ANGULAR_STEAM.getAdaptable(steamVariant)) - .setGregTechLogo(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_STEAM.get(steamVariant)); + GTUITextures.TAB_TITLE_STEAM.getAdaptable(steamVariant), + GTUITextures.TAB_TITLE_DARK_STEAM.getAdaptable(steamVariant), + GTUITextures.TAB_TITLE_ANGULAR_STEAM.getAdaptable(steamVariant)) + .setGregTechLogo(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_STEAM.get(steamVariant)); public GUITextureSet() {} diff --git a/src/main/java/gregtech/api/gui/widgets/CoverTickRateButton.java b/src/main/java/gregtech/api/gui/widgets/CoverTickRateButton.java new file mode 100644 index 0000000000..ab05a98925 --- /dev/null +++ b/src/main/java/gregtech/api/gui/widgets/CoverTickRateButton.java @@ -0,0 +1,82 @@ +package gregtech.api.gui.widgets; + +import static gregtech.api.gui.modularui.GTUITextures.OVERLAY_BUTTON_HOURGLASS; +import static gregtech.common.covers.CoverInfo.MAX_TICK_RATE_ADDITION; + +import java.util.List; + +import net.minecraft.util.StatCollector; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.common.covers.CoverInfo; + +public class CoverTickRateButton extends ButtonWidget { + + private static final UITexture BACKGROUND = GTUITextures.BUTTON_COVER_NORMAL.getSubArea(0, 0, 1, 0.5f); + + private final CoverInfo coverInfo; + private int clientTickRate; + private int tickRateAddition; + + public CoverTickRateButton(@NotNull CoverInfo coverInfo, @NotNull IWidgetBuilder builder) { + this.coverInfo = coverInfo; + this.clientTickRate = coverInfo.getTickRate(); + this.tickRateAddition = coverInfo.getTickRateAddition(); + + super.setBackground(BACKGROUND, OVERLAY_BUTTON_HOURGLASS); + super.setOnClick(this::onClick); + super.dynamicTooltip(this::dynamicTooltip); + super.attachSyncer( + new FakeSyncWidget.IntegerSyncer(this.coverInfo::getTickRate, integer -> clientTickRate = integer), + builder, + (widget, aInt) -> notifyTooltipChange()) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer( + this.coverInfo::getTickRateAddition, + integer -> tickRateAddition = integer), + builder); + + } + + private void onClick(@NotNull ClickData clickData, @NotNull Widget widget) { + final int iterations = clickData.ctrl ? 5 : 1; + final boolean isDecreasing = clickData.mouseButton == 1; + + // Do five operations at once if Ctrl is held down. Since the actual increase granted by each invocation can be + // different on each call, just call the method several times rather than trying to do a bunch of weird math. + for (int i = 0; i < iterations; i++) { + coverInfo.adjustTickRateMultiplier(isDecreasing); + } + } + + private List dynamicTooltip() { + final String boundsNotification; + + if (tickRateAddition == 0) { + boundsNotification = StatCollector.translateToLocal("gt.cover.info.button.bounds_notification.minimum"); + } else if (tickRateAddition >= MAX_TICK_RATE_ADDITION - 1) { + // Clamping can make tickRateAddition approach but never actually equal MAX_ADDITION, so we need this + // adjustment. + boundsNotification = StatCollector.translateToLocal("gt.cover.info.button.bounds_notification.maximum"); + } else { + boundsNotification = ""; + } + + return ImmutableList.of( + StatCollector.translateToLocalFormatted( + "gt.cover.info.button.tick_rate.1", + new CoverInfo.ClientTickRateFormatter(clientTickRate), + boundsNotification), + StatCollector.translateToLocal("gt.cover.info.button.tick_rate.2"), + StatCollector.translateToLocal("gt.cover.info.button.tick_rate.3")); + } +} diff --git a/src/main/java/gregtech/api/gui/widgets/GT_CoverTickRateButton.java b/src/main/java/gregtech/api/gui/widgets/GT_CoverTickRateButton.java deleted file mode 100644 index 883ffb4079..0000000000 --- a/src/main/java/gregtech/api/gui/widgets/GT_CoverTickRateButton.java +++ /dev/null @@ -1,82 +0,0 @@ -package gregtech.api.gui.widgets; - -import static gregtech.api.gui.modularui.GT_UITextures.OVERLAY_BUTTON_HOURGLASS; -import static gregtech.common.covers.CoverInfo.MAX_TICK_RATE_ADDITION; - -import java.util.List; - -import net.minecraft.util.StatCollector; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.common.covers.CoverInfo; - -public class GT_CoverTickRateButton extends ButtonWidget { - - private static final UITexture BACKGROUND = GT_UITextures.BUTTON_COVER_NORMAL.getSubArea(0, 0, 1, 0.5f); - - private final CoverInfo coverInfo; - private int clientTickRate; - private int tickRateAddition; - - public GT_CoverTickRateButton(@NotNull CoverInfo coverInfo, @NotNull IWidgetBuilder builder) { - this.coverInfo = coverInfo; - this.clientTickRate = coverInfo.getTickRate(); - this.tickRateAddition = coverInfo.getTickRateAddition(); - - super.setBackground(BACKGROUND, OVERLAY_BUTTON_HOURGLASS); - super.setOnClick(this::onClick); - super.dynamicTooltip(this::dynamicTooltip); - super.attachSyncer( - new FakeSyncWidget.IntegerSyncer(this.coverInfo::getTickRate, integer -> clientTickRate = integer), - builder, - (widget, aInt) -> notifyTooltipChange()) - .attachSyncer( - new FakeSyncWidget.IntegerSyncer( - this.coverInfo::getTickRateAddition, - integer -> tickRateAddition = integer), - builder); - - } - - private void onClick(@NotNull ClickData clickData, @NotNull Widget widget) { - final int iterations = clickData.ctrl ? 5 : 1; - final boolean isDecreasing = clickData.mouseButton == 1; - - // Do five operations at once if Ctrl is held down. Since the actual increase granted by each invocation can be - // different on each call, just call the method several times rather than trying to do a bunch of weird math. - for (int i = 0; i < iterations; i++) { - coverInfo.adjustTickRateMultiplier(isDecreasing); - } - } - - private List dynamicTooltip() { - final String boundsNotification; - - if (tickRateAddition == 0) { - boundsNotification = StatCollector.translateToLocal("gt.cover.info.button.bounds_notification.minimum"); - } else if (tickRateAddition >= MAX_TICK_RATE_ADDITION - 1) { - // Clamping can make tickRateAddition approach but never actually equal MAX_ADDITION, so we need this - // adjustment. - boundsNotification = StatCollector.translateToLocal("gt.cover.info.button.bounds_notification.maximum"); - } else { - boundsNotification = ""; - } - - return ImmutableList.of( - StatCollector.translateToLocalFormatted( - "gt.cover.info.button.tick_rate.1", - new CoverInfo.ClientTickRateFormatter(clientTickRate), - boundsNotification), - StatCollector.translateToLocal("gt.cover.info.button.tick_rate.2"), - StatCollector.translateToLocal("gt.cover.info.button.tick_rate.3")); - } -} diff --git a/src/main/java/gregtech/api/gui/widgets/GT_LockedWhileActiveButton.java b/src/main/java/gregtech/api/gui/widgets/GT_LockedWhileActiveButton.java deleted file mode 100644 index 9a93a8fadf..0000000000 --- a/src/main/java/gregtech/api/gui/widgets/GT_LockedWhileActiveButton.java +++ /dev/null @@ -1,90 +0,0 @@ -package gregtech.api.gui.widgets; - -import java.util.Arrays; -import java.util.List; -import java.util.function.BiConsumer; -import java.util.function.Supplier; - -import net.minecraft.util.StatCollector; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.tileentity.IMachineProgress; - -public class GT_LockedWhileActiveButton extends ButtonWidget { - - @NotNull - private final IMachineProgress machine; - - public GT_LockedWhileActiveButton(@NotNull IMachineProgress machine, @NotNull ModularWindow.Builder builder) { - super(); - this.machine = machine; - - super.attachSyncer( - new FakeSyncWidget.BooleanSyncer(machine::isActive, a -> {}), - builder, - (widget, aBoolean) -> widget.notifyTooltipChange()); - - super.dynamicTooltip(this::generateTooltip); - } - - @NotNull - @Override - public ButtonWidget setOnClick(@NotNull BiConsumer clickAction) { - return super.setOnClick((clickData, widget) -> { - if (!machine.isActive()) { - clickAction.accept(clickData, widget); - } - }); - } - - @NotNull - @Override - public Widget setBackground(@NotNull IDrawable... drawables) { - return super.setBackground(() -> appendLockedOverlay(drawables)); - } - - @NotNull - @Override - public Widget setBackground(@NotNull Supplier drawablesSupplier) { - return super.setBackground(() -> appendLockedOverlay(drawablesSupplier.get())); - } - - @NotNull - @Override - public Widget dynamicTooltip(@NotNull Supplier> dynamicTooltip) { - return super.dynamicTooltip(() -> { - ImmutableList.Builder tooltips = ImmutableList.builder() - .addAll(dynamicTooltip.get()); - tooltips.addAll(generateTooltip()); - - return tooltips.build(); - }); - } - - @NotNull - private IDrawable[] appendLockedOverlay(@NotNull IDrawable[] drawables) { - if (machine.isActive()) { - final IDrawable[] copy = Arrays.copyOf(drawables, drawables.length + 1); - copy[drawables.length] = GT_UITextures.OVERLAY_BUTTON_LOCKED; - return copy; - } - return drawables; - } - - @NotNull - private List generateTooltip() { - if (machine.isActive()) { - return ImmutableList.of(StatCollector.translateToLocal("GT5U.gui.button.forbidden_while_running")); - } - return ImmutableList.of(); - } -} diff --git a/src/main/java/gregtech/api/gui/widgets/GT_PhantomItemButton.java b/src/main/java/gregtech/api/gui/widgets/GT_PhantomItemButton.java deleted file mode 100644 index 4e2d144aa7..0000000000 --- a/src/main/java/gregtech/api/gui/widgets/GT_PhantomItemButton.java +++ /dev/null @@ -1,92 +0,0 @@ -package gregtech.api.gui.widgets; - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; - -import org.apache.commons.lang3.NotImplementedException; -import org.jetbrains.annotations.Nullable; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.metatileentity.IItemLockable; - -/** - * Creates a phantom item in a GUI. Useful for filtering. - */ -public class GT_PhantomItemButton extends SlotWidget { - - public static final IDrawable[] FILTER_BACKGROUND = { ModularUITextures.ITEM_SLOT, - GT_UITextures.OVERLAY_SLOT_FILTER }; - - public GT_PhantomItemButton(final IItemLockable delegate) { - super(BaseSlot.phantom(new PhantomItemDelegate(delegate), 0)); - controlsAmount = false; - } - - @Override - public List getTooltip() { - return ImmutableList.of(new Text(StatCollector.translateToLocal("GT5U.bus.filterTooltip.empty"))); - } - - @Override - public List getExtraTooltip() { - return ImmutableList.of(StatCollector.translateToLocal("GT5U.bus.filterTooltip.full")); - } - - @Override - public boolean onMouseScroll(int direction) { - return false; - } - - @SuppressWarnings("ClassCanBeRecord") - private static class PhantomItemDelegate implements IItemHandlerModifiable { - - private final IItemLockable delegate; - - public PhantomItemDelegate(final IItemLockable delegate) { - this.delegate = delegate; - } - - @Override - public void setStackInSlot(int slot, ItemStack itemStack) { - delegate.setLockedItem(itemStack); - } - - @Override - public int getSlots() { - return 1; - } - - @Override - public ItemStack getStackInSlot(int slot) { - return delegate.getLockedItem(); - } - - @Nullable - @Override - public ItemStack insertItem(int slot, ItemStack itemStack, boolean simulate) { - delegate.setLockedItem(itemStack); - return null; - } - - @Nullable - @Override - public ItemStack extractItem(int var1, int var2, boolean var3) { - throw new NotImplementedException("Extract item is disabled for GhostItemButtons."); - } - - @Override - public int getSlotLimit(int slot) { - return 1; - } - } -} diff --git a/src/main/java/gregtech/api/gui/widgets/LockedWhileActiveButton.java b/src/main/java/gregtech/api/gui/widgets/LockedWhileActiveButton.java new file mode 100644 index 0000000000..0e793372c5 --- /dev/null +++ b/src/main/java/gregtech/api/gui/widgets/LockedWhileActiveButton.java @@ -0,0 +1,90 @@ +package gregtech.api.gui.widgets; + +import java.util.Arrays; +import java.util.List; +import java.util.function.BiConsumer; +import java.util.function.Supplier; + +import net.minecraft.util.StatCollector; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.tileentity.IMachineProgress; + +public class LockedWhileActiveButton extends ButtonWidget { + + @NotNull + private final IMachineProgress machine; + + public LockedWhileActiveButton(@NotNull IMachineProgress machine, @NotNull ModularWindow.Builder builder) { + super(); + this.machine = machine; + + super.attachSyncer( + new FakeSyncWidget.BooleanSyncer(machine::isActive, a -> {}), + builder, + (widget, aBoolean) -> widget.notifyTooltipChange()); + + super.dynamicTooltip(this::generateTooltip); + } + + @NotNull + @Override + public ButtonWidget setOnClick(@NotNull BiConsumer clickAction) { + return super.setOnClick((clickData, widget) -> { + if (!machine.isActive()) { + clickAction.accept(clickData, widget); + } + }); + } + + @NotNull + @Override + public Widget setBackground(@NotNull IDrawable... drawables) { + return super.setBackground(() -> appendLockedOverlay(drawables)); + } + + @NotNull + @Override + public Widget setBackground(@NotNull Supplier drawablesSupplier) { + return super.setBackground(() -> appendLockedOverlay(drawablesSupplier.get())); + } + + @NotNull + @Override + public Widget dynamicTooltip(@NotNull Supplier> dynamicTooltip) { + return super.dynamicTooltip(() -> { + ImmutableList.Builder tooltips = ImmutableList.builder() + .addAll(dynamicTooltip.get()); + tooltips.addAll(generateTooltip()); + + return tooltips.build(); + }); + } + + @NotNull + private IDrawable[] appendLockedOverlay(@NotNull IDrawable[] drawables) { + if (machine.isActive()) { + final IDrawable[] copy = Arrays.copyOf(drawables, drawables.length + 1); + copy[drawables.length] = GTUITextures.OVERLAY_BUTTON_LOCKED; + return copy; + } + return drawables; + } + + @NotNull + private List generateTooltip() { + if (machine.isActive()) { + return ImmutableList.of(StatCollector.translateToLocal("GT5U.gui.button.forbidden_while_running")); + } + return ImmutableList.of(); + } +} diff --git a/src/main/java/gregtech/api/gui/widgets/PhantomItemButton.java b/src/main/java/gregtech/api/gui/widgets/PhantomItemButton.java new file mode 100644 index 0000000000..e13266b33f --- /dev/null +++ b/src/main/java/gregtech/api/gui/widgets/PhantomItemButton.java @@ -0,0 +1,92 @@ +package gregtech.api.gui.widgets; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import org.apache.commons.lang3.NotImplementedException; +import org.jetbrains.annotations.Nullable; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.metatileentity.IItemLockable; + +/** + * Creates a phantom item in a GUI. Useful for filtering. + */ +public class PhantomItemButton extends SlotWidget { + + public static final IDrawable[] FILTER_BACKGROUND = { ModularUITextures.ITEM_SLOT, + GTUITextures.OVERLAY_SLOT_FILTER }; + + public PhantomItemButton(final IItemLockable delegate) { + super(BaseSlot.phantom(new PhantomItemDelegate(delegate), 0)); + controlsAmount = false; + } + + @Override + public List getTooltip() { + return ImmutableList.of(new Text(StatCollector.translateToLocal("GT5U.bus.filterTooltip.empty"))); + } + + @Override + public List getExtraTooltip() { + return ImmutableList.of(StatCollector.translateToLocal("GT5U.bus.filterTooltip.full")); + } + + @Override + public boolean onMouseScroll(int direction) { + return false; + } + + @SuppressWarnings("ClassCanBeRecord") + private static class PhantomItemDelegate implements IItemHandlerModifiable { + + private final IItemLockable delegate; + + public PhantomItemDelegate(final IItemLockable delegate) { + this.delegate = delegate; + } + + @Override + public void setStackInSlot(int slot, ItemStack itemStack) { + delegate.setLockedItem(itemStack); + } + + @Override + public int getSlots() { + return 1; + } + + @Override + public ItemStack getStackInSlot(int slot) { + return delegate.getLockedItem(); + } + + @Nullable + @Override + public ItemStack insertItem(int slot, ItemStack itemStack, boolean simulate) { + delegate.setLockedItem(itemStack); + return null; + } + + @Nullable + @Override + public ItemStack extractItem(int var1, int var2, boolean var3) { + throw new NotImplementedException("Extract item is disabled for GhostItemButtons."); + } + + @Override + public int getSlotLimit(int slot) { + return 1; + } + } +} diff --git a/src/main/java/gregtech/api/interfaces/ICleanroomReceiver.java b/src/main/java/gregtech/api/interfaces/ICleanroomReceiver.java index b0d42f9aec..b26c7035c7 100644 --- a/src/main/java/gregtech/api/interfaces/ICleanroomReceiver.java +++ b/src/main/java/gregtech/api/interfaces/ICleanroomReceiver.java @@ -4,9 +4,11 @@ import javax.annotation.Nullable; import net.minecraft.tileentity.TileEntity; +import gregtech.common.Pollution; + /** * Implement this interface for TileEntities that can have association to cleanroom. - * Calling {@link gregtech.common.GT_Pollution#addPollution(TileEntity, int)} from this machine + * Calling {@link Pollution#addPollution(TileEntity, int)} from this machine * will pollute associated cleanroom. */ public interface ICleanroomReceiver { diff --git a/src/main/java/gregtech/api/interfaces/IConfigurationCircuitSupport.java b/src/main/java/gregtech/api/interfaces/IConfigurationCircuitSupport.java index 8dde8163c8..5f225b0b4f 100644 --- a/src/main/java/gregtech/api/interfaces/IConfigurationCircuitSupport.java +++ b/src/main/java/gregtech/api/interfaces/IConfigurationCircuitSupport.java @@ -4,7 +4,7 @@ import java.util.List; import net.minecraft.item.ItemStack; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; /** * Implement this interface if your tileentity (or metatileentity) supports configuration circuits to resolve recipe @@ -24,7 +24,7 @@ public interface IConfigurationCircuitSupport { * This list is unmodifiable. Its elements are not supposed to be modified in any way! */ default List getConfigurationCircuits() { - return GregTech_API.getConfigurationCircuitList(100); + return GregTechAPI.getConfigurationCircuitList(100); } /** diff --git a/src/main/java/gregtech/api/interfaces/IFoodStat.java b/src/main/java/gregtech/api/interfaces/IFoodStat.java index c768c5ca1c..4b1bd121e9 100644 --- a/src/main/java/gregtech/api/interfaces/IFoodStat.java +++ b/src/main/java/gregtech/api/interfaces/IFoodStat.java @@ -4,34 +4,34 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.item.ItemStack; -import gregtech.api.items.GT_MetaBase_Item; +import gregtech.api.items.MetaBaseItem; public interface IFoodStat { /** * Warning the "aPlayer" Parameter may be null! */ - int getFoodLevel(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer); + int getFoodLevel(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer); /** * Warning the "aPlayer" Parameter may be null! */ - float getSaturation(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer); + float getSaturation(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer); /** * Warning the "aPlayer" Parameter may be null! */ - boolean alwaysEdible(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer); + boolean alwaysEdible(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer); /** * Warning the "aPlayer" Parameter may be null! */ - boolean isRotten(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer); + boolean isRotten(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer); /** * Warning the "aPlayer" Parameter may be null! */ - EnumAction getFoodAction(GT_MetaBase_Item aItem, ItemStack aStack); + EnumAction getFoodAction(MetaBaseItem aItem, ItemStack aStack); - void onEaten(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer); + void onEaten(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer); } diff --git a/src/main/java/gregtech/api/interfaces/IGT_ItemWithMaterialRenderer.java b/src/main/java/gregtech/api/interfaces/IGT_ItemWithMaterialRenderer.java index 4bf0311544..1dc460f3de 100644 --- a/src/main/java/gregtech/api/interfaces/IGT_ItemWithMaterialRenderer.java +++ b/src/main/java/gregtech/api/interfaces/IGT_ItemWithMaterialRenderer.java @@ -6,22 +6,24 @@ import net.minecraft.util.IIcon; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.common.render.items.GT_GeneratedMaterial_Renderer; +import gregtech.common.render.items.GeneratedItemRenderer; +import gregtech.common.render.items.GeneratedMaterialRenderer; +import gregtech.common.render.items.MetaGeneratedItemRenderer; public interface IGT_ItemWithMaterialRenderer { /** - * @return If allow using {@link gregtech.common.render.items.GT_MetaGenerated_Item_Renderer} to render item + * @return If allow using {@link MetaGeneratedItemRenderer} to render item */ boolean shouldUseCustomRenderer(int aMetaData); /** * @return Custom renderer of the Material with offset < 32000 */ - GT_GeneratedMaterial_Renderer getMaterialRenderer(int aMetaData); + GeneratedMaterialRenderer getMaterialRenderer(int aMetaData); /** - * If this returns false, renderer falls back to {@link gregtech.common.render.items.GT_GeneratedItem_Renderer} + * If this returns false, renderer falls back to {@link GeneratedItemRenderer} */ boolean allowMaterialRenderer(int aMetaData); diff --git a/src/main/java/gregtech/api/interfaces/IHatchElement.java b/src/main/java/gregtech/api/interfaces/IHatchElement.java index 482b7899ab..9618c1ee1b 100644 --- a/src/main/java/gregtech/api/interfaces/IHatchElement.java +++ b/src/main/java/gregtech/api/interfaces/IHatchElement.java @@ -11,18 +11,17 @@ import net.minecraftforge.common.util.ForgeDirection; import com.google.common.collect.ImmutableList; import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.StructureUtility; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.IGT_HatchAdder; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.IGTHatchAdder; public interface IHatchElement { List> mteClasses(); - IGT_HatchAdder adder(); + IGTHatchAdder adder(); String name(); @@ -44,7 +43,7 @@ public interface IHatchElement { return new HatchElement<>(aClasses, null, null, null, this); } - default IHatchElement withAdder(IGT_HatchAdder aAdder) { + default IHatchElement withAdder(IGTHatchAdder aAdder) { if (aAdder == null) throw new IllegalArgumentException(); return new HatchElement<>(null, aAdder, null, null, this); } @@ -61,7 +60,7 @@ public interface IHatchElement { default IStructureElement newAny(int aCasingIndex, int aDot) { if (aCasingIndex < 0 || aDot < 0) throw new IllegalArgumentException(); - return GT_StructureUtility.buildHatchAdder() + return GTStructureUtility.buildHatchAdder() .anyOf(this) .casingIndex(aCasingIndex) .dot(aDot) @@ -73,17 +72,17 @@ public interface IHatchElement { default IStructureElement newAnyOrCasing(int aCasingIndex, int aDot, Block casingBlock, int casingMeta) { if (aCasingIndex < 0 || aDot < 0) throw new IllegalArgumentException(); - return GT_StructureUtility.buildHatchAdder() + return GTStructureUtility.buildHatchAdder() .anyOf(this) .casingIndex(aCasingIndex) .dot(aDot) .continueIfSuccess() - .buildAndChain(StructureUtility.ofBlock(casingBlock, casingMeta)); + .buildAndChain(com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock(casingBlock, casingMeta)); } default IStructureElement newAny(int aCasingIndex, int aDot, ForgeDirection... allowedFacings) { if (aCasingIndex < 0 || aDot < 0) throw new IllegalArgumentException(); - return GT_StructureUtility.buildHatchAdder() + return GTStructureUtility.buildHatchAdder() .anyOf(this) .casingIndex(aCasingIndex) .dot(aDot) @@ -96,7 +95,7 @@ public interface IHatchElement { default IStructureElement newAny(int aCasingIndex, int aDot, BiPredicate aShouldSkip) { if (aCasingIndex < 0 || aDot < 0 || aShouldSkip == null) throw new IllegalArgumentException(); - return GT_StructureUtility.buildHatchAdder() + return GTStructureUtility.buildHatchAdder() .anyOf(this) .casingIndex(aCasingIndex) .dot(aDot) @@ -131,7 +130,7 @@ class HatchElementEither implements IHatchElement { } @Override - public IGT_HatchAdder adder() { + public IGTHatchAdder adder() { return ((t, te, i) -> first.adder() .apply(t, te, i) || second.adder() @@ -153,12 +152,12 @@ class HatchElementEither implements IHatchElement { class HatchElement implements IHatchElement { private final List> mClasses; - private final IGT_HatchAdder mAdder; + private final IGTHatchAdder mAdder; private final String mName; private final IHatchElement mBacking; private final ToLongFunction mCount; - public HatchElement(List> aMteClasses, IGT_HatchAdder aAdder, + public HatchElement(List> aMteClasses, IGTHatchAdder aAdder, String aName, ToLongFunction aCount, IHatchElement aBacking) { this.mClasses = aMteClasses; this.mAdder = aAdder; @@ -173,7 +172,7 @@ class HatchElement implements IHatchElement { } @Override - public IGT_HatchAdder adder() { + public IGTHatchAdder adder() { return mAdder == null ? mBacking.adder() : mAdder; } @@ -194,7 +193,7 @@ class HatchElement implements IHatchElement { } @Override - public IHatchElement withAdder(IGT_HatchAdder aAdder) { + public IHatchElement withAdder(IGTHatchAdder aAdder) { if (aAdder == null) throw new IllegalArgumentException(); return new HatchElement<>(mClasses, aAdder, mName, mCount, mBacking); } diff --git a/src/main/java/gregtech/api/interfaces/IIconContainer.java b/src/main/java/gregtech/api/interfaces/IIconContainer.java index 525721bb5c..319615b58d 100644 --- a/src/main/java/gregtech/api/interfaces/IIconContainer.java +++ b/src/main/java/gregtech/api/interfaces/IIconContainer.java @@ -1,6 +1,6 @@ package gregtech.api.interfaces; -import static gregtech.api.enums.GT_Values.UNCOLORED_RGBA; +import static gregtech.api.enums.GTValues.UNCOLORED_RGBA; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; diff --git a/src/main/java/gregtech/api/interfaces/IItemBehaviour.java b/src/main/java/gregtech/api/interfaces/IItemBehaviour.java index 67bb505c6b..d9f8706824 100644 --- a/src/main/java/gregtech/api/interfaces/IItemBehaviour.java +++ b/src/main/java/gregtech/api/interfaces/IItemBehaviour.java @@ -13,7 +13,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import gregtech.api.enums.SubTag; -import gregtech.api.items.GT_MetaBase_Item; +import gregtech.api.items.MetaBaseItem; public interface IItemBehaviour { @@ -37,7 +37,7 @@ public interface IItemBehaviour { ItemStack onDispense(E aItem, IBlockSource aSource, ItemStack aStack); - boolean hasProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack); + boolean hasProjectile(MetaBaseItem aItem, SubTag aProjectileType, ItemStack aStack); EntityArrow getProjectile(E aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, double aZ); diff --git a/src/main/java/gregtech/api/interfaces/INetworkUpdatableItem.java b/src/main/java/gregtech/api/interfaces/INetworkUpdatableItem.java index 1dd36d9998..4af8ec232c 100644 --- a/src/main/java/gregtech/api/interfaces/INetworkUpdatableItem.java +++ b/src/main/java/gregtech/api/interfaces/INetworkUpdatableItem.java @@ -4,8 +4,10 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import gregtech.api.net.GTPacketUpdateItem; + /** - * Together with {@link gregtech.api.net.GT_Packet_UpdateItem} you can request server side to update item in hand with a + * Together with {@link GTPacketUpdateItem} you can request server side to update item in hand with a * NBT tag. *

* Usual NBT tag size limit applies. diff --git a/src/main/java/gregtech/api/interfaces/IRecipeMap.java b/src/main/java/gregtech/api/interfaces/IRecipeMap.java index ce48b29927..c6184bee34 100644 --- a/src/main/java/gregtech/api/interfaces/IRecipeMap.java +++ b/src/main/java/gregtech/api/interfaces/IRecipeMap.java @@ -7,9 +7,9 @@ import java.util.function.Function; import javax.annotation.Nonnull; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTUtility; /** * Represents the target of a recipe adding action, usually, but not necessarily, is a recipe map itself. @@ -33,7 +33,7 @@ public interface IRecipeMap { * Actually add the recipe represented by the builder. CAN modify the builder's internal states!!! */ @Nonnull - Collection doAdd(GT_RecipeBuilder builder); + Collection doAdd(GTRecipeBuilder builder); /** * Return a variant of this recipe map that will perform a deep copy on input recipe builder before doing anything @@ -45,7 +45,7 @@ public interface IRecipeMap { return newRecipeMap(b -> doAdd(b.copy())); } - static IRecipeMap newRecipeMap(Function> func) { + static IRecipeMap newRecipeMap(Function> func) { return new IRecipeMap() { private final Collection downstreams = new ArrayList<>(); @@ -57,9 +57,9 @@ public interface IRecipeMap { @Nonnull @Override - public Collection doAdd(GT_RecipeBuilder builder) { - List> ret = new ArrayList<>(); - Collection out = func.apply(builder); + public Collection doAdd(GTRecipeBuilder builder) { + List> ret = new ArrayList<>(); + Collection out = func.apply(builder); ret.add(out); builder.clearInvalid(); if (!out.isEmpty()) { @@ -67,7 +67,7 @@ public interface IRecipeMap { ret.add(downstream.doAdd(builder)); } } - return GT_Utility.concat(ret); + return GTUtility.concat(ret); } }; } diff --git a/src/main/java/gregtech/api/interfaces/IRedstoneCircuitBlock.java b/src/main/java/gregtech/api/interfaces/IRedstoneCircuitBlock.java index 0eea6ca3a4..a0a362c4e5 100644 --- a/src/main/java/gregtech/api/interfaces/IRedstoneCircuitBlock.java +++ b/src/main/java/gregtech/api/interfaces/IRedstoneCircuitBlock.java @@ -5,7 +5,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; +import gregtech.api.util.CoverBehavior; /** * Implemented by the MetaTileEntity of the Redstone Circuit Block @@ -36,7 +36,7 @@ public interface IRedstoneCircuitBlock { /** * If this Side is Covered up and therefor not doing any Redstone */ - GT_CoverBehavior getCover(ForgeDirection side); + CoverBehavior getCover(ForgeDirection side); int getCoverID(ForgeDirection side); diff --git a/src/main/java/gregtech/api/interfaces/IToolStats.java b/src/main/java/gregtech/api/interfaces/IToolStats.java index 9d8da63b6c..6f506a6ee1 100644 --- a/src/main/java/gregtech/api/interfaces/IToolStats.java +++ b/src/main/java/gregtech/api/interfaces/IToolStats.java @@ -16,7 +16,7 @@ import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraftforge.event.world.BlockEvent; -import gregtech.api.items.GT_MetaGenerated_Tool; +import gregtech.api.items.MetaGeneratedTool; /** * The Stats for GT Tools. Not including any Material Modifiers. @@ -33,7 +33,7 @@ public interface IToolStats { /** * Called when this gets added to a Tool Item */ - void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID); + void onStatsAddedToTool(MetaGeneratedTool aItem, int aID); /** * @implNote if you are only modifying drops, override diff --git a/src/main/java/gregtech/api/interfaces/fluid/IGTFluid.java b/src/main/java/gregtech/api/interfaces/fluid/IGTFluid.java new file mode 100644 index 0000000000..b3765d37db --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/fluid/IGTFluid.java @@ -0,0 +1,14 @@ +package gregtech.api.interfaces.fluid; + +import net.minecraftforge.fluids.FluidRegistry; + +@SuppressWarnings("unused") // API might legitimately expose unused methods within this local project's scope +public interface IGTFluid { + + /** + * Adds this {@link IGTFluid} to the {@link FluidRegistry} and internally-implemented registrations + * + * @return {@link IGTRegisteredFluid} The GregTech registered fluid + */ + IGTRegisteredFluid addFluid(); +} diff --git a/src/main/java/gregtech/api/interfaces/fluid/IGTFluidBuilder.java b/src/main/java/gregtech/api/interfaces/fluid/IGTFluidBuilder.java new file mode 100644 index 0000000000..2902824873 --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/fluid/IGTFluidBuilder.java @@ -0,0 +1,96 @@ +package gregtech.api.interfaces.fluid; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import gregtech.api.enums.FluidState; + +@SuppressWarnings("unused") // API might legitimately expose unused methods within this local project's scope +public interface IGTFluidBuilder { + + /** + * @param colorRGBA The {@code short[]} RGBA color of the {@link Fluid} or {@code null} for no defined RGBA color + * @return {@link IGTFluidBuilder} self for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTFluidBuilder withColorRGBA(final short[] colorRGBA); + + /** + * @param localizedName The localized name of this {@link IGTFluidBuilder} + * @return {@link IGTFluidBuilder} self for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTFluidBuilder withLocalizedName(final String localizedName); + + /** + * @param fluidState The {@link FluidState} of this {@link IGTFluidBuilder} + * @param temperature The Kelvin temperature of this {@link IGTFluidBuilder} + * @return {@link IGTFluidBuilder} self for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTFluidBuilder withStateAndTemperature(final FluidState fluidState, final int temperature); + + /** + * @param stillIconResourceLocation the {@link ResourceLocation} of the still fluid icon + * @return {@link IGTFluidBuilder} self for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTFluidBuilder withStillIconResourceLocation(final ResourceLocation stillIconResourceLocation); + + /** + * @param flowingIconResourceLocation the {@link ResourceLocation} of the flowing fluid icon + * @return {@link IGTFluidBuilder} self for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTFluidBuilder withFlowingIconResourceLocation(final ResourceLocation flowingIconResourceLocation); + + /** + * @param textureName The name of the GregTech mod texture of this {@link IGTFluidBuilder} + * @return {@link IGTFluidBuilder} self for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTFluidBuilder withTextureName(final String textureName); + + /** + * @param fluidBlock the {@link Block} implementation of the {@link IGTFluid} + * @return {@link IGTFluidBuilder} self for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTFluidBuilder withFluidBlock(final Block fluidBlock); + + /** + * @param fromFluid the {@link Fluid} to copy the icons from + * @return {@link IGTFluidBuilder} self for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTFluidBuilder withIconsFrom(@Nonnull final Fluid fromFluid); + + /** + * @param stillIconResourceLocation The {@link ResourceLocation} of the still fluid texture + * @param flowingIconResourceLocation The {@link ResourceLocation} of the flowing fluid texture + * @return {@link IGTFluidBuilder} self for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTFluidBuilder withTextures(final ResourceLocation stillIconResourceLocation, + final ResourceLocation flowingIconResourceLocation); + + /** + * Builds the {@link IGTFluid} + * + * @return the built {@link IGTFluid} + */ + IGTFluid build(); + + /** + * Builds, then adds the {@link IGTFluid} to the {@link FluidRegistry} + * + * @return the {@link IGTFluid} + * @see #build() + * @see IGTFluid#addFluid() + */ + IGTRegisteredFluid buildAndRegister(); +} diff --git a/src/main/java/gregtech/api/interfaces/fluid/IGTRegisteredFluid.java b/src/main/java/gregtech/api/interfaces/fluid/IGTRegisteredFluid.java new file mode 100644 index 0000000000..b2796ed3f7 --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/fluid/IGTRegisteredFluid.java @@ -0,0 +1,60 @@ +package gregtech.api.interfaces.fluid; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; + +import gregtech.api.enums.FluidState; +import gregtech.api.enums.Materials; + +public interface IGTRegisteredFluid { + + /** + * Registers the containers in the {@link FluidContainerRegistry} for this {@link IGTRegisteredFluid} + * + * @param fullContainer The full fluid container + * @param emptyContainer The empty fluid container + * @param containerSize The size of the container + * @return The {@link IGTRegisteredFluid} for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTRegisteredFluid registerContainers(final ItemStack fullContainer, final ItemStack emptyContainer, + final int containerSize); + + /** + * Registers the bucket-sized 1000L containers in the {@link FluidContainerRegistry} for this + * {@link IGTRegisteredFluid} + * + * @param fullContainer The full container to associate with this {@link IGTRegisteredFluid} + * @param emptyContainer The empty container associate with this {@link IGTRegisteredFluid} + * @return {@link IGTRegisteredFluid} for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTRegisteredFluid registerBContainers(final ItemStack fullContainer, final ItemStack emptyContainer); + + /** + * Registers the potion-sized 250L containers in the {@link FluidContainerRegistry} for this + * {@link IGTRegisteredFluid} + * + * @param fullContainer The full container to associate with this {@link IGTRegisteredFluid} + * @param emptyContainer The empty container associate with this {@link IGTRegisteredFluid} + * @return {@link IGTRegisteredFluid} self for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTRegisteredFluid registerPContainers(final ItemStack fullContainer, final ItemStack emptyContainer); + + /** + * Updates the {@link Materials}'s fluids from this {@link IGTRegisteredFluid}'s state + * + * @param material the {@link Materials} to configure based on this {@link IGTRegisteredFluid} and + * {@link FluidState} + * @return The {@link IGTRegisteredFluid} for call chaining + */ + @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value + IGTRegisteredFluid configureMaterials(final Materials material); + + /** + * @return this {@link IGTRegisteredFluid} cast to {@link Fluid} + */ + Fluid asFluid(); +} diff --git a/src/main/java/gregtech/api/interfaces/fluid/IGT_Fluid.java b/src/main/java/gregtech/api/interfaces/fluid/IGT_Fluid.java deleted file mode 100644 index 7c8b2b3f11..0000000000 --- a/src/main/java/gregtech/api/interfaces/fluid/IGT_Fluid.java +++ /dev/null @@ -1,14 +0,0 @@ -package gregtech.api.interfaces.fluid; - -import net.minecraftforge.fluids.FluidRegistry; - -@SuppressWarnings("unused") // API might legitimately expose unused methods within this local project's scope -public interface IGT_Fluid { - - /** - * Adds this {@link IGT_Fluid} to the {@link FluidRegistry} and internally-implemented registrations - * - * @return {@link IGT_RegisteredFluid} The GregTech registered fluid - */ - IGT_RegisteredFluid addFluid(); -} diff --git a/src/main/java/gregtech/api/interfaces/fluid/IGT_FluidBuilder.java b/src/main/java/gregtech/api/interfaces/fluid/IGT_FluidBuilder.java deleted file mode 100644 index f15b148fcb..0000000000 --- a/src/main/java/gregtech/api/interfaces/fluid/IGT_FluidBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package gregtech.api.interfaces.fluid; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; - -import gregtech.api.enums.FluidState; - -@SuppressWarnings("unused") // API might legitimately expose unused methods within this local project's scope -public interface IGT_FluidBuilder { - - /** - * @param colorRGBA The {@code short[]} RGBA color of the {@link Fluid} or {@code null} for no defined RGBA color - * @return {@link IGT_FluidBuilder} self for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_FluidBuilder withColorRGBA(final short[] colorRGBA); - - /** - * @param localizedName The localized name of this {@link IGT_FluidBuilder} - * @return {@link IGT_FluidBuilder} self for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_FluidBuilder withLocalizedName(final String localizedName); - - /** - * @param fluidState The {@link FluidState} of this {@link IGT_FluidBuilder} - * @param temperature The Kelvin temperature of this {@link IGT_FluidBuilder} - * @return {@link IGT_FluidBuilder} self for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_FluidBuilder withStateAndTemperature(final FluidState fluidState, final int temperature); - - /** - * @param stillIconResourceLocation the {@link ResourceLocation} of the still fluid icon - * @return {@link IGT_FluidBuilder} self for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_FluidBuilder withStillIconResourceLocation(final ResourceLocation stillIconResourceLocation); - - /** - * @param flowingIconResourceLocation the {@link ResourceLocation} of the flowing fluid icon - * @return {@link IGT_FluidBuilder} self for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_FluidBuilder withFlowingIconResourceLocation(final ResourceLocation flowingIconResourceLocation); - - /** - * @param textureName The name of the GregTech mod texture of this {@link IGT_FluidBuilder} - * @return {@link IGT_FluidBuilder} self for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_FluidBuilder withTextureName(final String textureName); - - /** - * @param fluidBlock the {@link Block} implementation of the {@link IGT_Fluid} - * @return {@link IGT_FluidBuilder} self for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_FluidBuilder withFluidBlock(final Block fluidBlock); - - /** - * @param fromFluid the {@link Fluid} to copy the icons from - * @return {@link IGT_FluidBuilder} self for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_FluidBuilder withIconsFrom(@Nonnull final Fluid fromFluid); - - /** - * @param stillIconResourceLocation The {@link ResourceLocation} of the still fluid texture - * @param flowingIconResourceLocation The {@link ResourceLocation} of the flowing fluid texture - * @return {@link IGT_FluidBuilder} self for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_FluidBuilder withTextures(final ResourceLocation stillIconResourceLocation, - final ResourceLocation flowingIconResourceLocation); - - /** - * Builds the {@link IGT_Fluid} - * - * @return the built {@link IGT_Fluid} - */ - IGT_Fluid build(); - - /** - * Builds, then adds the {@link IGT_Fluid} to the {@link FluidRegistry} - * - * @return the {@link IGT_Fluid} - * @see #build() - * @see IGT_Fluid#addFluid() - */ - IGT_RegisteredFluid buildAndRegister(); -} diff --git a/src/main/java/gregtech/api/interfaces/fluid/IGT_RegisteredFluid.java b/src/main/java/gregtech/api/interfaces/fluid/IGT_RegisteredFluid.java deleted file mode 100644 index 181824874c..0000000000 --- a/src/main/java/gregtech/api/interfaces/fluid/IGT_RegisteredFluid.java +++ /dev/null @@ -1,60 +0,0 @@ -package gregtech.api.interfaces.fluid; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidContainerRegistry; - -import gregtech.api.enums.FluidState; -import gregtech.api.enums.Materials; - -public interface IGT_RegisteredFluid { - - /** - * Registers the containers in the {@link FluidContainerRegistry} for this {@link IGT_RegisteredFluid} - * - * @param fullContainer The full fluid container - * @param emptyContainer The empty fluid container - * @param containerSize The size of the container - * @return The {@link IGT_RegisteredFluid} for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_RegisteredFluid registerContainers(final ItemStack fullContainer, final ItemStack emptyContainer, - final int containerSize); - - /** - * Registers the bucket-sized 1000L containers in the {@link FluidContainerRegistry} for this - * {@link IGT_RegisteredFluid} - * - * @param fullContainer The full container to associate with this {@link IGT_RegisteredFluid} - * @param emptyContainer The empty container associate with this {@link IGT_RegisteredFluid} - * @return {@link IGT_RegisteredFluid} for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_RegisteredFluid registerBContainers(final ItemStack fullContainer, final ItemStack emptyContainer); - - /** - * Registers the potion-sized 250L containers in the {@link FluidContainerRegistry} for this - * {@link IGT_RegisteredFluid} - * - * @param fullContainer The full container to associate with this {@link IGT_RegisteredFluid} - * @param emptyContainer The empty container associate with this {@link IGT_RegisteredFluid} - * @return {@link IGT_RegisteredFluid} self for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_RegisteredFluid registerPContainers(final ItemStack fullContainer, final ItemStack emptyContainer); - - /** - * Updates the {@link Materials}'s fluids from this {@link IGT_RegisteredFluid}'s state - * - * @param material the {@link Materials} to configure based on this {@link IGT_RegisteredFluid} and - * {@link FluidState} - * @return The {@link IGT_RegisteredFluid} for call chaining - */ - @SuppressWarnings("UnusedReturnValue") // Last call in chain, may not use this returned value - IGT_RegisteredFluid configureMaterials(final Materials material); - - /** - * @return this {@link IGT_RegisteredFluid} cast to {@link Fluid} - */ - Fluid asFluid(); -} diff --git a/src/main/java/gregtech/api/interfaces/internal/IGTCraftingRecipe.java b/src/main/java/gregtech/api/interfaces/internal/IGTCraftingRecipe.java new file mode 100644 index 0000000000..beacd71f95 --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/internal/IGTCraftingRecipe.java @@ -0,0 +1,8 @@ +package gregtech.api.interfaces.internal; + +import net.minecraft.item.crafting.IRecipe; + +public interface IGTCraftingRecipe extends IRecipe { + + boolean isRemovable(); +} diff --git a/src/main/java/gregtech/api/interfaces/internal/IGTMod.java b/src/main/java/gregtech/api/interfaces/internal/IGTMod.java new file mode 100644 index 0000000000..f47a7ef645 --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/internal/IGTMod.java @@ -0,0 +1,50 @@ +package gregtech.api.interfaces.internal; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +/** + * Interface used by the Mods Main Class to reference to internals. + *

+ * Don't even think about including this File in your Mod. + */ +public interface IGTMod { + + /** + * This means that Server specific Basefiles are definitely existing! Not if the World is actually server side or + * not! + */ + boolean isServerSide(); + + /** + * This means that Client specific Basefiles are definitely existing! Not if the World is actually client side or + * not! + */ + boolean isClientSide(); + + /** + * This means that Bukkit specific Basefiles are definitely existing! Not if the World is actually bukkit server or + * not! + */ + boolean isBukkitSide(); + + /** + * works only ClientSide otherwise returns null + */ + EntityPlayer getThePlayer(); + + // ---------- Internal Usage Only ---------- + + /** + * works only ClientSide otherwise returns 0 + * + * @return the Index of the added Armor + */ + int addArmor(String aArmorPrefix); + + /** + * Plays the Sonictron Sound for the ItemStack on the Client Side + */ + void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ); +} diff --git a/src/main/java/gregtech/api/interfaces/internal/IGTRecipeAdder.java b/src/main/java/gregtech/api/interfaces/internal/IGTRecipeAdder.java new file mode 100644 index 0000000000..a4d554428e --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/internal/IGTRecipeAdder.java @@ -0,0 +1,8 @@ +package gregtech.api.interfaces.internal; + +import gregtech.api.util.GTRecipeBuilder; + +public interface IGTRecipeAdder { + + GTRecipeBuilder stdBuilder(); +} diff --git a/src/main/java/gregtech/api/interfaces/internal/IGT_CraftingRecipe.java b/src/main/java/gregtech/api/interfaces/internal/IGT_CraftingRecipe.java deleted file mode 100644 index 3f29736470..0000000000 --- a/src/main/java/gregtech/api/interfaces/internal/IGT_CraftingRecipe.java +++ /dev/null @@ -1,8 +0,0 @@ -package gregtech.api.interfaces.internal; - -import net.minecraft.item.crafting.IRecipe; - -public interface IGT_CraftingRecipe extends IRecipe { - - boolean isRemovable(); -} diff --git a/src/main/java/gregtech/api/interfaces/internal/IGT_Mod.java b/src/main/java/gregtech/api/interfaces/internal/IGT_Mod.java deleted file mode 100644 index dbf888ef96..0000000000 --- a/src/main/java/gregtech/api/interfaces/internal/IGT_Mod.java +++ /dev/null @@ -1,50 +0,0 @@ -package gregtech.api.interfaces.internal; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -/** - * Interface used by the Mods Main Class to reference to internals. - *

- * Don't even think about including this File in your Mod. - */ -public interface IGT_Mod { - - /** - * This means that Server specific Basefiles are definitely existing! Not if the World is actually server side or - * not! - */ - boolean isServerSide(); - - /** - * This means that Client specific Basefiles are definitely existing! Not if the World is actually client side or - * not! - */ - boolean isClientSide(); - - /** - * This means that Bukkit specific Basefiles are definitely existing! Not if the World is actually bukkit server or - * not! - */ - boolean isBukkitSide(); - - /** - * works only ClientSide otherwise returns null - */ - EntityPlayer getThePlayer(); - - // ---------- Internal Usage Only ---------- - - /** - * works only ClientSide otherwise returns 0 - * - * @return the Index of the added Armor - */ - int addArmor(String aArmorPrefix); - - /** - * Plays the Sonictron Sound for the ItemStack on the Client Side - */ - void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ); -} diff --git a/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java b/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java deleted file mode 100644 index e3c3a8cbaa..0000000000 --- a/src/main/java/gregtech/api/interfaces/internal/IGT_RecipeAdder.java +++ /dev/null @@ -1,8 +0,0 @@ -package gregtech.api.interfaces.internal; - -import gregtech.api.util.GT_RecipeBuilder; - -public interface IGT_RecipeAdder { - - GT_RecipeBuilder stdBuilder(); -} diff --git a/src/main/java/gregtech/api/interfaces/internal/IThaumcraftCompat.java b/src/main/java/gregtech/api/interfaces/internal/IThaumcraftCompat.java index 5d99f83689..2cb2e6fd84 100644 --- a/src/main/java/gregtech/api/interfaces/internal/IThaumcraftCompat.java +++ b/src/main/java/gregtech/api/interfaces/internal/IThaumcraftCompat.java @@ -6,8 +6,8 @@ import net.minecraft.block.Block; import net.minecraft.enchantment.Enchantment; import net.minecraft.item.ItemStack; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; +import gregtech.api.enums.TCAspects; +import gregtech.api.enums.TCAspects.TC_AspectStack; public interface IThaumcraftCompat { @@ -35,10 +35,10 @@ public interface IThaumcraftCompat { Object addCrucibleRecipe(String aResearch, Object aInput, ItemStack aOutput, List aAspects); Object addInfusionRecipe(String aResearch, ItemStack aMainInput, ItemStack[] aSideInputs, ItemStack aOutput, - int aInstability, List aAspects); + int aInstability, List aAspects); Object addInfusionEnchantmentRecipe(String aResearch, Enchantment aEnchantment, int aInstability, - List aAspects, ItemStack[] aSideInputs); + List aAspects, ItemStack[] aSideInputs); Object addResearch(String aResearch, String aName, String aText, String[] aParentResearches, String aCategory, ItemStack aIcon, int aComplexity, int aType, int aX, int aY, List aAspects, diff --git a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java index 4959f8b060..824925f928 100644 --- a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java +++ b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntity.java @@ -34,8 +34,8 @@ import gregtech.api.interfaces.tileentity.IGearEnergyTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IGregtechWailaProvider; import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_Util; +import gregtech.api.objects.GTItemStack; +import gregtech.api.util.GTUtil; /** * Warning, this Interface has just been made to be able to add multiple kinds of MetaTileEntities (Cables, Pipes, @@ -127,7 +127,7 @@ public interface IMetaTileEntity extends ISidedInventory, IFluidTank, IFluidHand * If a Cover of that Type can be placed on this Side. Also Called when the Facing of the Block Changes and a Cover * is on said Side. */ - boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack); + boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack); /** * When a Player right-clicks the Facing with a Screwdriver. @@ -400,7 +400,7 @@ public interface IMetaTileEntity extends ISidedInventory, IFluidTank, IFluidHand if (getBaseMetaTileEntity() != null) { return getBaseMetaTileEntity().getGUIColorization(); } else { - return GT_Util.getRGBInt(Dyes.MACHINE_METAL.getRGBA()); + return GTUtil.getRGBInt(Dyes.MACHINE_METAL.getRGBA()); } } diff --git a/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java b/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java deleted file mode 100644 index 8574de7007..0000000000 --- a/src/main/java/gregtech/api/interfaces/modularui/ControllerWithOptionalFeatures.java +++ /dev/null @@ -1,393 +0,0 @@ -package gregtech.api.interfaces.modularui; - -import static gregtech.api.metatileentity.BaseTileEntity.BUTTON_FORBIDDEN_TOOLTIP; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Set; - -import net.minecraft.util.StatCollector; - -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.VoidingMode; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.tileentity.IRecipeLockable; -import gregtech.api.interfaces.tileentity.IVoidable; - -/** - * Machines implementing this interface can have logic and GUI buttons - * to configure various behaviors regarding multiblock. - *

    - *
  • Power switch
  • - *
  • Void protection
  • - *
  • Separated input buses
  • - *
  • Batch mode
  • - *
  • Recipe locking
  • - *
  • Multiple machine modes
  • - *
- */ -public interface ControllerWithOptionalFeatures extends IVoidable, IRecipeLockable { - - boolean isAllowedToWork(); - - void disableWorking(); - - void enableWorking(); - - Pos2d getPowerSwitchButtonPos(); - - default ButtonWidget createPowerSwitchButton(IWidgetBuilder builder) { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (isAllowedToWork()) { - disableWorking(); - } else { - enableWorking(); - } - }) - .setPlayClickSoundResource( - () -> isAllowedToWork() ? SoundResource.GUI_BUTTON_UP.resourceLocation - : SoundResource.GUI_BUTTON_DOWN.resourceLocation) - .setBackground(() -> { - if (isAllowedToWork()) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_ON }; - } else { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF }; - } - }) - .attachSyncer(new FakeSyncWidget.BooleanSyncer(this::isAllowedToWork, val -> { - if (val) enableWorking(); - else disableWorking(); - }), builder) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.power_switch")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(getPowerSwitchButtonPos()) - .setSize(16, 16); - return (ButtonWidget) button; - } - - Pos2d getVoidingModeButtonPos(); - - default ButtonWidget createVoidExcessButton(IWidgetBuilder builder) { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (supportsVoidProtection()) { - Set allowed = getAllowedVoidingModes(); - switch (clickData.mouseButton) { - case 0 -> setVoidingMode(getVoidingMode().nextInCollection(allowed)); - case 1 -> setVoidingMode(getVoidingMode().previousInCollection(allowed)); - } - widget.notifyTooltipChange(); - } - }) - .setPlayClickSound(supportsVoidProtection()) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(getVoidingMode().buttonTexture); - ret.add(getVoidingMode().buttonOverlay); - if (!supportsVoidProtection()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_FORBIDDEN); - } - return ret.toArray(new IDrawable[0]); - }) - .attachSyncer( - new FakeSyncWidget.IntegerSyncer( - () -> getVoidingMode().ordinal(), - val -> setVoidingMode(VoidingMode.fromOrdinal(val))), - builder) - .dynamicTooltip( - () -> Arrays.asList( - StatCollector.translateToLocal("GT5U.gui.button.voiding_mode"), - StatCollector.translateToLocal(getVoidingMode().getTransKey()))) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(getVoidingModeButtonPos()) - .setSize(16, 16); - if (!supportsVoidProtection()) { - button.addTooltip(StatCollector.translateToLocal(BUTTON_FORBIDDEN_TOOLTIP)); - } - return (ButtonWidget) button; - } - - /** - * @return if the multi has more than 1 mode - */ - default boolean supportsMachineModeSwitch() { - return false; - } - - /** - * @return the current mode number. This is a getter is used for displaying the icon in the GUI - */ - default int getMachineMode() { - return 0; - } - - /** - * @return name for the current machine mode on this machine. Defaults "Unknown Mode" - */ - default String getMachineModeName() { - return "Unknown Mode"; - } - - /** - * @param index Index of machineModeIcons to pull from - * @return UITexture associated with that machineMode - */ - default UITexture getMachineModeIcon(int index) { - return null; - } - - /** - * @param index Number to set machineMode to - */ - default void setMachineMode(int index) {} - - /** - * @return Returns the next machineMode number in the sequence - */ - default int nextMachineMode() { - return 0; - } - - /** - * @return Returns whether machine supports mode switch by default - */ - default boolean getDefaultModeSwitch() { - return supportsMachineModeSwitch(); - } - - Pos2d getMachineModeSwitchButtonPos(); - - /** - * Called when the mode switch button is clicked - */ - default void onMachineModeSwitchClick() {} - - default ButtonWidget createModeSwitchButton(IWidgetBuilder builder) { - if (!supportsMachineModeSwitch()) return null; - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (supportsMachineModeSwitch()) { - onMachineModeSwitchClick(); - setMachineMode(nextMachineMode()); - } - }) - .setPlayClickSound(supportsMachineModeSwitch()) - .setBackground(() -> { - List ret = new ArrayList<>(); - if (supportsMachineModeSwitch()) { - ret.add(GT_UITextures.BUTTON_STANDARD); - ret.add(getMachineModeIcon(getMachineMode())); - } else return null; - return ret.toArray(new IDrawable[0]); - }) - .attachSyncer(new FakeSyncWidget.IntegerSyncer(this::getMachineMode, this::setMachineMode), builder) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.mode_switch")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(getMachineModeSwitchButtonPos()) - .setSize(16, 16); - return (ButtonWidget) button; - } - - /** - * @return if the multi supports input separation. - */ - boolean supportsInputSeparation(); - - /** - * @return true if input separation is enabled, else false. This is getter is used for displaying the icon in the - * GUI - */ - boolean isInputSeparationEnabled(); - - void setInputSeparation(boolean enabled); - - default boolean getDefaultInputSeparationMode() { - return supportsInputSeparation(); - } - - Pos2d getInputSeparationButtonPos(); - - default ButtonWidget createInputSeparationButton(IWidgetBuilder builder) { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (supportsInputSeparation()) { - setInputSeparation(!isInputSeparationEnabled()); - } - }) - .setPlayClickSound(supportsInputSeparation()) - .setBackground(() -> { - List ret = new ArrayList<>(); - if (isInputSeparationEnabled()) { - ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); - if (supportsInputSeparation()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_ON); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_ON_DISABLED); - } - } else { - ret.add(GT_UITextures.BUTTON_STANDARD); - if (supportsInputSeparation()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_OFF); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_OFF_DISABLED); - } - } - if (!supportsInputSeparation()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_FORBIDDEN); - } - return ret.toArray(new IDrawable[0]); - }) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer(this::isInputSeparationEnabled, this::setInputSeparation), - builder) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.input_separation")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(getInputSeparationButtonPos()) - .setSize(16, 16); - if (!supportsInputSeparation()) { - button.addTooltip(StatCollector.translateToLocal(BUTTON_FORBIDDEN_TOOLTIP)); - } - return (ButtonWidget) button; - } - - /** - * @return if the multi supports batch mode. - */ - boolean supportsBatchMode(); - - /** - * @return true if batch mode is enabled, else false. This is getter is used for displaying the icon in the GUI - */ - boolean isBatchModeEnabled(); - - void setBatchMode(boolean enabled); - - default boolean getDefaultBatchMode() { - return false; - } - - Pos2d getBatchModeButtonPos(); - - default ButtonWidget createBatchModeButton(IWidgetBuilder builder) { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (supportsBatchMode()) { - setBatchMode(!isBatchModeEnabled()); - } - }) - .setPlayClickSound(supportsBatchMode()) - .setBackground(() -> { - List ret = new ArrayList<>(); - if (isBatchModeEnabled()) { - ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); - if (supportsBatchMode()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_ON); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_ON_DISABLED); - } - } else { - ret.add(GT_UITextures.BUTTON_STANDARD); - if (supportsBatchMode()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_OFF); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_OFF_DISABLED); - } - } - if (!supportsBatchMode()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_FORBIDDEN); - } - return ret.toArray(new IDrawable[0]); - }) - .attachSyncer(new FakeSyncWidget.BooleanSyncer(this::isBatchModeEnabled, this::setBatchMode), builder) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.batch_mode")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(getBatchModeButtonPos()) - .setSize(16, 16); - if (!supportsBatchMode()) { - button.addTooltip(StatCollector.translateToLocal(BUTTON_FORBIDDEN_TOOLTIP)); - } - return (ButtonWidget) button; - } - - Pos2d getRecipeLockingButtonPos(); - - default ButtonWidget createLockToSingleRecipeButton(IWidgetBuilder builder) { - Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { - if (supportsSingleRecipeLocking()) { - setRecipeLocking(!isRecipeLockingEnabled()); - } - }) - .setPlayClickSound(supportsSingleRecipeLocking()) - .setBackground(() -> { - List ret = new ArrayList<>(); - if (isRecipeLockingEnabled()) { - ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); - if (supportsSingleRecipeLocking()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_LOCKED); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_LOCKED_DISABLED); - } - } else { - ret.add(GT_UITextures.BUTTON_STANDARD); - if (supportsSingleRecipeLocking()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED); - } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED_DISABLED); - } - } - if (!supportsSingleRecipeLocking()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_FORBIDDEN); - } - return ret.toArray(new IDrawable[0]); - }) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer(this::isRecipeLockingEnabled, this::setRecipeLocking), - builder) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.lock_recipe")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(getRecipeLockingButtonPos()) - .setSize(16, 16); - if (!supportsSingleRecipeLocking()) { - button.addTooltip(StatCollector.translateToLocal(BUTTON_FORBIDDEN_TOOLTIP)); - } - return (ButtonWidget) button; - } - - Pos2d getStructureUpdateButtonPos(); - - int getStructureUpdateTime(); - - void setStructureUpdateTime(int time); - - default ButtonWidget createStructureUpdateButton(IWidgetBuilder builder) { - Widget button = new ButtonWidget() - .setOnClick((clickData, widget) -> { if (getStructureUpdateTime() <= -20) setStructureUpdateTime(1); }) - .setPlayClickSound(true) - .setBackground(() -> { - List ret = new ArrayList<>(); - if (getStructureUpdateTime() > -20) { - ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); - } else { - ret.add(GT_UITextures.BUTTON_STANDARD); - } - ret.add(GT_UITextures.OVERLAY_BUTTON_STRUCTURE_UPDATE); - return ret.toArray(new IDrawable[0]); - }) - .attachSyncer( - new FakeSyncWidget.IntegerSyncer(this::getStructureUpdateTime, this::setStructureUpdateTime), - builder) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.structure_update")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(getStructureUpdateButtonPos()) - .setSize(16, 16); - return (ButtonWidget) button; - } -} diff --git a/src/main/java/gregtech/api/interfaces/modularui/IControllerWithOptionalFeatures.java b/src/main/java/gregtech/api/interfaces/modularui/IControllerWithOptionalFeatures.java new file mode 100644 index 0000000000..d203d9fc87 --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/modularui/IControllerWithOptionalFeatures.java @@ -0,0 +1,393 @@ +package gregtech.api.interfaces.modularui; + +import static gregtech.api.metatileentity.BaseTileEntity.BUTTON_FORBIDDEN_TOOLTIP; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +import net.minecraft.util.StatCollector; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.VoidingMode; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.tileentity.IRecipeLockable; +import gregtech.api.interfaces.tileentity.IVoidable; + +/** + * Machines implementing this interface can have logic and GUI buttons + * to configure various behaviors regarding multiblock. + *
    + *
  • Power switch
  • + *
  • Void protection
  • + *
  • Separated input buses
  • + *
  • Batch mode
  • + *
  • Recipe locking
  • + *
  • Multiple machine modes
  • + *
+ */ +public interface IControllerWithOptionalFeatures extends IVoidable, IRecipeLockable { + + boolean isAllowedToWork(); + + void disableWorking(); + + void enableWorking(); + + Pos2d getPowerSwitchButtonPos(); + + default ButtonWidget createPowerSwitchButton(IWidgetBuilder builder) { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (isAllowedToWork()) { + disableWorking(); + } else { + enableWorking(); + } + }) + .setPlayClickSoundResource( + () -> isAllowedToWork() ? SoundResource.GUI_BUTTON_UP.resourceLocation + : SoundResource.GUI_BUTTON_DOWN.resourceLocation) + .setBackground(() -> { + if (isAllowedToWork()) { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED, + GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON }; + } else { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD, + GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF }; + } + }) + .attachSyncer(new FakeSyncWidget.BooleanSyncer(this::isAllowedToWork, val -> { + if (val) enableWorking(); + else disableWorking(); + }), builder) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.power_switch")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(getPowerSwitchButtonPos()) + .setSize(16, 16); + return (ButtonWidget) button; + } + + Pos2d getVoidingModeButtonPos(); + + default ButtonWidget createVoidExcessButton(IWidgetBuilder builder) { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (supportsVoidProtection()) { + Set allowed = getAllowedVoidingModes(); + switch (clickData.mouseButton) { + case 0 -> setVoidingMode(getVoidingMode().nextInCollection(allowed)); + case 1 -> setVoidingMode(getVoidingMode().previousInCollection(allowed)); + } + widget.notifyTooltipChange(); + } + }) + .setPlayClickSound(supportsVoidProtection()) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(getVoidingMode().buttonTexture); + ret.add(getVoidingMode().buttonOverlay); + if (!supportsVoidProtection()) { + ret.add(GTUITextures.OVERLAY_BUTTON_FORBIDDEN); + } + return ret.toArray(new IDrawable[0]); + }) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer( + () -> getVoidingMode().ordinal(), + val -> setVoidingMode(VoidingMode.fromOrdinal(val))), + builder) + .dynamicTooltip( + () -> Arrays.asList( + StatCollector.translateToLocal("GT5U.gui.button.voiding_mode"), + StatCollector.translateToLocal(getVoidingMode().getTransKey()))) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(getVoidingModeButtonPos()) + .setSize(16, 16); + if (!supportsVoidProtection()) { + button.addTooltip(StatCollector.translateToLocal(BUTTON_FORBIDDEN_TOOLTIP)); + } + return (ButtonWidget) button; + } + + /** + * @return if the multi has more than 1 mode + */ + default boolean supportsMachineModeSwitch() { + return false; + } + + /** + * @return the current mode number. This is a getter is used for displaying the icon in the GUI + */ + default int getMachineMode() { + return 0; + } + + /** + * @return name for the current machine mode on this machine. Defaults "Unknown Mode" + */ + default String getMachineModeName() { + return "Unknown Mode"; + } + + /** + * @param index Index of machineModeIcons to pull from + * @return UITexture associated with that machineMode + */ + default UITexture getMachineModeIcon(int index) { + return null; + } + + /** + * @param index Number to set machineMode to + */ + default void setMachineMode(int index) {} + + /** + * @return Returns the next machineMode number in the sequence + */ + default int nextMachineMode() { + return 0; + } + + /** + * @return Returns whether machine supports mode switch by default + */ + default boolean getDefaultModeSwitch() { + return supportsMachineModeSwitch(); + } + + Pos2d getMachineModeSwitchButtonPos(); + + /** + * Called when the mode switch button is clicked + */ + default void onMachineModeSwitchClick() {} + + default ButtonWidget createModeSwitchButton(IWidgetBuilder builder) { + if (!supportsMachineModeSwitch()) return null; + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (supportsMachineModeSwitch()) { + onMachineModeSwitchClick(); + setMachineMode(nextMachineMode()); + } + }) + .setPlayClickSound(supportsMachineModeSwitch()) + .setBackground(() -> { + List ret = new ArrayList<>(); + if (supportsMachineModeSwitch()) { + ret.add(GTUITextures.BUTTON_STANDARD); + ret.add(getMachineModeIcon(getMachineMode())); + } else return null; + return ret.toArray(new IDrawable[0]); + }) + .attachSyncer(new FakeSyncWidget.IntegerSyncer(this::getMachineMode, this::setMachineMode), builder) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.mode_switch")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(getMachineModeSwitchButtonPos()) + .setSize(16, 16); + return (ButtonWidget) button; + } + + /** + * @return if the multi supports input separation. + */ + boolean supportsInputSeparation(); + + /** + * @return true if input separation is enabled, else false. This is getter is used for displaying the icon in the + * GUI + */ + boolean isInputSeparationEnabled(); + + void setInputSeparation(boolean enabled); + + default boolean getDefaultInputSeparationMode() { + return supportsInputSeparation(); + } + + Pos2d getInputSeparationButtonPos(); + + default ButtonWidget createInputSeparationButton(IWidgetBuilder builder) { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (supportsInputSeparation()) { + setInputSeparation(!isInputSeparationEnabled()); + } + }) + .setPlayClickSound(supportsInputSeparation()) + .setBackground(() -> { + List ret = new ArrayList<>(); + if (isInputSeparationEnabled()) { + ret.add(GTUITextures.BUTTON_STANDARD_PRESSED); + if (supportsInputSeparation()) { + ret.add(GTUITextures.OVERLAY_BUTTON_INPUT_SEPARATION_ON); + } else { + ret.add(GTUITextures.OVERLAY_BUTTON_INPUT_SEPARATION_ON_DISABLED); + } + } else { + ret.add(GTUITextures.BUTTON_STANDARD); + if (supportsInputSeparation()) { + ret.add(GTUITextures.OVERLAY_BUTTON_INPUT_SEPARATION_OFF); + } else { + ret.add(GTUITextures.OVERLAY_BUTTON_INPUT_SEPARATION_OFF_DISABLED); + } + } + if (!supportsInputSeparation()) { + ret.add(GTUITextures.OVERLAY_BUTTON_FORBIDDEN); + } + return ret.toArray(new IDrawable[0]); + }) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(this::isInputSeparationEnabled, this::setInputSeparation), + builder) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.input_separation")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(getInputSeparationButtonPos()) + .setSize(16, 16); + if (!supportsInputSeparation()) { + button.addTooltip(StatCollector.translateToLocal(BUTTON_FORBIDDEN_TOOLTIP)); + } + return (ButtonWidget) button; + } + + /** + * @return if the multi supports batch mode. + */ + boolean supportsBatchMode(); + + /** + * @return true if batch mode is enabled, else false. This is getter is used for displaying the icon in the GUI + */ + boolean isBatchModeEnabled(); + + void setBatchMode(boolean enabled); + + default boolean getDefaultBatchMode() { + return false; + } + + Pos2d getBatchModeButtonPos(); + + default ButtonWidget createBatchModeButton(IWidgetBuilder builder) { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (supportsBatchMode()) { + setBatchMode(!isBatchModeEnabled()); + } + }) + .setPlayClickSound(supportsBatchMode()) + .setBackground(() -> { + List ret = new ArrayList<>(); + if (isBatchModeEnabled()) { + ret.add(GTUITextures.BUTTON_STANDARD_PRESSED); + if (supportsBatchMode()) { + ret.add(GTUITextures.OVERLAY_BUTTON_BATCH_MODE_ON); + } else { + ret.add(GTUITextures.OVERLAY_BUTTON_BATCH_MODE_ON_DISABLED); + } + } else { + ret.add(GTUITextures.BUTTON_STANDARD); + if (supportsBatchMode()) { + ret.add(GTUITextures.OVERLAY_BUTTON_BATCH_MODE_OFF); + } else { + ret.add(GTUITextures.OVERLAY_BUTTON_BATCH_MODE_OFF_DISABLED); + } + } + if (!supportsBatchMode()) { + ret.add(GTUITextures.OVERLAY_BUTTON_FORBIDDEN); + } + return ret.toArray(new IDrawable[0]); + }) + .attachSyncer(new FakeSyncWidget.BooleanSyncer(this::isBatchModeEnabled, this::setBatchMode), builder) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.batch_mode")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(getBatchModeButtonPos()) + .setSize(16, 16); + if (!supportsBatchMode()) { + button.addTooltip(StatCollector.translateToLocal(BUTTON_FORBIDDEN_TOOLTIP)); + } + return (ButtonWidget) button; + } + + Pos2d getRecipeLockingButtonPos(); + + default ButtonWidget createLockToSingleRecipeButton(IWidgetBuilder builder) { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (supportsSingleRecipeLocking()) { + setRecipeLocking(!isRecipeLockingEnabled()); + } + }) + .setPlayClickSound(supportsSingleRecipeLocking()) + .setBackground(() -> { + List ret = new ArrayList<>(); + if (isRecipeLockingEnabled()) { + ret.add(GTUITextures.BUTTON_STANDARD_PRESSED); + if (supportsSingleRecipeLocking()) { + ret.add(GTUITextures.OVERLAY_BUTTON_RECIPE_LOCKED); + } else { + ret.add(GTUITextures.OVERLAY_BUTTON_RECIPE_LOCKED_DISABLED); + } + } else { + ret.add(GTUITextures.BUTTON_STANDARD); + if (supportsSingleRecipeLocking()) { + ret.add(GTUITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED); + } else { + ret.add(GTUITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED_DISABLED); + } + } + if (!supportsSingleRecipeLocking()) { + ret.add(GTUITextures.OVERLAY_BUTTON_FORBIDDEN); + } + return ret.toArray(new IDrawable[0]); + }) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(this::isRecipeLockingEnabled, this::setRecipeLocking), + builder) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.lock_recipe")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(getRecipeLockingButtonPos()) + .setSize(16, 16); + if (!supportsSingleRecipeLocking()) { + button.addTooltip(StatCollector.translateToLocal(BUTTON_FORBIDDEN_TOOLTIP)); + } + return (ButtonWidget) button; + } + + Pos2d getStructureUpdateButtonPos(); + + int getStructureUpdateTime(); + + void setStructureUpdateTime(int time); + + default ButtonWidget createStructureUpdateButton(IWidgetBuilder builder) { + Widget button = new ButtonWidget() + .setOnClick((clickData, widget) -> { if (getStructureUpdateTime() <= -20) setStructureUpdateTime(1); }) + .setPlayClickSound(true) + .setBackground(() -> { + List ret = new ArrayList<>(); + if (getStructureUpdateTime() > -20) { + ret.add(GTUITextures.BUTTON_STANDARD_PRESSED); + } else { + ret.add(GTUITextures.BUTTON_STANDARD); + } + ret.add(GTUITextures.OVERLAY_BUTTON_STRUCTURE_UPDATE); + return ret.toArray(new IDrawable[0]); + }) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer(this::getStructureUpdateTime, this::setStructureUpdateTime), + builder) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.structure_update")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(getStructureUpdateButtonPos()) + .setSize(16, 16); + return (ButtonWidget) button; + } +} diff --git a/src/main/java/gregtech/api/interfaces/modularui/IGetTitleColor.java b/src/main/java/gregtech/api/interfaces/modularui/IGetTitleColor.java index 76d94ee299..442ad05efd 100644 --- a/src/main/java/gregtech/api/interfaces/modularui/IGetTitleColor.java +++ b/src/main/java/gregtech/api/interfaces/modularui/IGetTitleColor.java @@ -1,11 +1,11 @@ package gregtech.api.interfaces.modularui; import gregtech.api.enums.Dyes; -import gregtech.api.util.GT_Util; +import gregtech.api.util.GTUtil; public interface IGetTitleColor { default int getTitleColor() { - return GT_Util.getRGBaInt(Dyes.dyeWhite.getRGBA()); + return GTUtil.getRGBaInt(Dyes.dyeWhite.getRGBA()); } } diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IColoredTileEntity.java b/src/main/java/gregtech/api/interfaces/tileentity/IColoredTileEntity.java index ec760dd346..852817add2 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IColoredTileEntity.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IColoredTileEntity.java @@ -1,7 +1,7 @@ package gregtech.api.interfaces.tileentity; import gregtech.api.enums.Dyes; -import gregtech.api.util.GT_Util; +import gregtech.api.util.GTUtil; public interface IColoredTileEntity { @@ -21,7 +21,6 @@ public interface IColoredTileEntity { * @return Actual color shown on GUI */ default int getGUIColorization() { - return GT_Util - .getRGBInt((getColorization() != -1 ? Dyes.get(getColorization()) : Dyes.MACHINE_METAL).getRGBA()); + return GTUtil.getRGBInt((getColorization() != -1 ? Dyes.get(getColorization()) : Dyes.MACHINE_METAL).getRGBA()); } } diff --git a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java index 8834678984..00ae2db9bd 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java @@ -4,8 +4,8 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_CoverBehaviorBase; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.CoverBehaviorBase; import gregtech.api.util.ISerializableObject; import gregtech.common.covers.CoverInfo; @@ -49,9 +49,9 @@ public interface ICoverable extends IRedstoneTileEntity, IHasInventory, IBasicEn ItemStack getCoverItemAtSide(ForgeDirection side); @Deprecated - GT_CoverBehavior getCoverBehaviorAtSide(ForgeDirection side); + CoverBehavior getCoverBehaviorAtSide(ForgeDirection side); - default GT_CoverBehaviorBase getCoverBehaviorAtSideNew(ForgeDirection side) { + default CoverBehaviorBase getCoverBehaviorAtSideNew(ForgeDirection side) { return getCoverBehaviorAtSide(side); } diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java index 91a9759e47..6dbc6bd5b8 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java @@ -8,10 +8,10 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import cofh.api.energy.IEnergyReceiver; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.logic.PowerLogic; import gregtech.api.logic.interfaces.PowerLogicHost; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import ic2.api.energy.tile.IEnergySink; /** @@ -97,8 +97,8 @@ public interface IEnergyConnected extends IColoredTileEntity { while (amperage > usedAmperes && sink.getDemandedEnergy() > 0 && sink.injectEnergy(oppositeSide, voltage, voltage) < voltage) usedAmperes++; } - } else if (GregTech_API.mOutputRF && tTileEntity instanceof IEnergyReceiver receiver) { - final int rfOut = GT_Utility.safeInt(voltage * GregTech_API.mEUtoRF / 100); + } else if (GregTechAPI.mOutputRF && tTileEntity instanceof IEnergyReceiver receiver) { + final int rfOut = GTUtility.safeInt(voltage * GregTechAPI.mEUtoRF / 100); if (receiver.receiveEnergy(oppositeSide, rfOut, true) == rfOut) { receiver.receiveEnergy(oppositeSide, rfOut, false); usedAmperes++; @@ -152,7 +152,7 @@ public interface IEnergyConnected extends IColoredTileEntity { emitterLogic.removeEnergyUnsafe(usedAmperes * voltage); return; } - + if (tileEntity instanceof IEnergySink sink) { if (sink.acceptsEnergyFrom((TileEntity) emitter, oppositeSide)) { while (amperage > usedAmperes && sink.getDemandedEnergy() > 0 @@ -164,8 +164,8 @@ public interface IEnergyConnected extends IColoredTileEntity { } } - if (GregTech_API.mOutputRF && tileEntity instanceof IEnergyReceiver receiver) { - final int rfOut = GT_Utility.safeInt(voltage * GregTech_API.mEUtoRF / 100); + if (GregTechAPI.mOutputRF && tileEntity instanceof IEnergyReceiver receiver) { + final int rfOut = GTUtility.safeInt(voltage * GregTechAPI.mEUtoRF / 100); if (receiver.receiveEnergy(oppositeSide, rfOut, true) == rfOut) { receiver.receiveEnergy(oppositeSide, rfOut, false); usedAmperes++; diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java b/src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java index d8231ee544..9e6b4c57c0 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java @@ -22,7 +22,7 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.modularui.IAddInventorySlots; import gregtech.api.interfaces.modularui.IGetGUITextureSet; import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.common.blocks.GT_Block_Machines; +import gregtech.common.blocks.BlockMachines; /** * A simple compound Interface for all my TileEntities. @@ -186,7 +186,7 @@ public interface IGregTechTileEntity extends ITexturedTileEntity, IGearEnergyTil /** * A randomly called display update to be able to add particles or other items for display The event is proxied by - * the {@link GT_Block_Machines#randomDisplayTick} + * the {@link BlockMachines#randomDisplayTick} */ @SideOnly(Side.CLIENT) default void onRandomDisplayTick() { diff --git a/src/main/java/gregtech/api/items/BlockLongDistancePipe.java b/src/main/java/gregtech/api/items/BlockLongDistancePipe.java new file mode 100644 index 0000000000..3de95981f5 --- /dev/null +++ b/src/main/java/gregtech/api/items/BlockLongDistancePipe.java @@ -0,0 +1,125 @@ +package gregtech.api.items; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.ItemLongDistancePipe; +import gregtech.common.blocks.MaterialMachines; + +public class BlockLongDistancePipe extends GTGenericBlock { + + public IIconContainer[] mIcons; + + public BlockLongDistancePipe() { + super(ItemLongDistancePipe.class, "gt.block.longdistancepipe", new MaterialMachines()); + setStepSound(soundTypeMetal); + setCreativeTab(GregTechAPI.TAB_GREGTECH); + GregTechAPI.registerMachineBlock(this, -1); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Long Distance Fluid Pipeline Pipe"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Long Distance Item Pipeline Pipe"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + "." + 32767 + ".name", "Any Sub Block of this"); + + ItemList.Long_Distance_Pipeline_Fluid_Pipe.set(new ItemStack(this, 1, 0)); + ItemList.Long_Distance_Pipeline_Item_Pipe.set(new ItemStack(this, 1, 1)); + mIcons = new IIconContainer[] { Textures.BlockIcons.LONG_DISTANCE_PIPE_FLUID, + Textures.BlockIcons.LONG_DISTANCE_PIPE_ITEM }; + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + super.onBlockAdded(aWorld, aX, aY, aZ); + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetaData); + } + + @Override + public String getHarvestTool(int aMeta) { + return "wrench"; + } + + @Override + public int getHarvestLevel(int aMeta) { + return 2; + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + return Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ); + } + + @Override + public float getExplosionResistance(Entity aTNT) { + return Blocks.iron_block.getExplosionResistance(aTNT); + } + + @Override + public String getUnlocalizedName() { + return this.mUnlocalizedName; + } + + @Override + public String getLocalizedName() { + return StatCollector.translateToLocal(this.mUnlocalizedName + ".name"); + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + return mIcons[aMeta % mIcons.length].getIcon(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister aIconRegister) {} + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public int damageDropped(int metadata) { + return metadata; + } + + @Override + public int getDamageValue(World aWorld, int aX, int aY, int aZ) { + return aWorld.getBlockMetadata(aX, aY, aZ); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item aItem, CreativeTabs aCreativeTab, List aList) { + for (int i = 0; i < 3; i++) { + ItemStack aStack = new ItemStack(aItem, 1, i); + if (!aStack.getDisplayName() + .contains(".name")) aList.add(aStack); + } + } +} diff --git a/src/main/java/gregtech/api/items/GTGenericBlock.java b/src/main/java/gregtech/api/items/GTGenericBlock.java new file mode 100644 index 0000000000..314849e8cf --- /dev/null +++ b/src/main/java/gregtech/api/items/GTGenericBlock.java @@ -0,0 +1,22 @@ +package gregtech.api.items; + +import static gregtech.api.enums.GTValues.W; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.ItemBlock; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.util.GTLanguageManager; + +public class GTGenericBlock extends Block { + + protected final String mUnlocalizedName; + + protected GTGenericBlock(Class aItemClass, String aName, Material aMaterial) { + super(aMaterial); + setBlockName(mUnlocalizedName = aName); + GameRegistry.registerBlock(this, aItemClass, getUnlocalizedName()); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + "." + W + ".name", "Any Sub Block of this one"); + } +} diff --git a/src/main/java/gregtech/api/items/GTGenericItem.java b/src/main/java/gregtech/api/items/GTGenericItem.java new file mode 100644 index 0000000000..4f0994bb12 --- /dev/null +++ b/src/main/java/gregtech/api/items/GTGenericItem.java @@ -0,0 +1,162 @@ +package gregtech.api.items; + +import static gregtech.api.enums.Mods.GregTech; + +import java.util.List; + +import net.minecraft.block.BlockDispenser; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.BehaviorProjectileDispense; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.dispenser.IPosition; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SubTag; +import gregtech.api.interfaces.IProjectileItem; +import gregtech.api.util.GTConfig; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +/** + * Extended by most Items, also used as a fallback Item, to prevent the accidental deletion when Errors occur. + */ +public class GTGenericItem extends Item implements IProjectileItem { + + private final String mName, mTooltip; + protected IIcon mIcon; + + public GTGenericItem(String aUnlocalized, String aEnglish, String aEnglishTooltip) { + super(); + mName = "gt." + aUnlocalized; + GTLanguageManager.addStringLocalization(mName + ".name", aEnglish); + if (GTUtility.isStringValid(aEnglishTooltip)) + GTLanguageManager.addStringLocalization(mTooltip = mName + ".tooltip_main", aEnglishTooltip); + else mTooltip = null; + setCreativeTab(GregTechAPI.TAB_GREGTECH); + GameRegistry.registerItem(this, mName, GregTech.ID); + BlockDispenser.dispenseBehaviorRegistry.putObject(this, new GT_Item_Dispense()); + } + + @Override + public final Item setUnlocalizedName(String aName) { + return this; + } + + @Override + public final String getUnlocalizedName() { + return mName; + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return getHasSubtypes() ? mName + "." + getDamage(aStack) : mName; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aIconRegister) { + mIcon = aIconRegister.registerIcon(GregTech.getResourcePath(GTConfig.troll ? "troll" : mName)); + } + + @Override + public boolean doesSneakBypassUse(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer) { + return true; + } + + @Override + public IIcon getIconFromDamage(int aMetaData) { + return mIcon; + } + + public int getTier(ItemStack aStack) { + return 0; + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + if (getMaxDamage() > 0 && !getHasSubtypes()) + aList.add((aStack.getMaxDamage() - getDamage(aStack)) + " / " + aStack.getMaxDamage()); + if (mTooltip != null) aList.add(GTLanguageManager.getTranslation(mTooltip)); + if (GTModHandler.isElectricItem(aStack)) aList.add("Tier: " + getTier(aStack)); + addAdditionalToolTips(aList, aStack, aPlayer); + } + + protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + // + } + + @Override + public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + isItemStackUsable(aStack); + } + + public boolean isItemStackUsable(ItemStack aStack) { + return true; + } + + public ItemStack onDispense(IBlockSource aSource, ItemStack aStack) { + EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata()); + IPosition iposition = BlockDispenser.func_149939_a(aSource); + ItemStack itemstack1 = aStack.splitStack(1); + BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition); + return aStack; + } + + @Override + public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, + double aZ) { + return null; + } + + @Override + public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, + float aSpeed) { + return null; + } + + @Override + public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack) { + return false; + } + + @Override + public ItemStack getContainerItem(ItemStack aStack) { + return null; + } + + @Override + public boolean hasContainerItem(ItemStack aStack) { + return getContainerItem(aStack) != null; + } + + public String transItem(String aKey, String aEnglish) { + return GTLanguageManager.addStringLocalization("Item_DESCRIPTION_Index_" + aKey, aEnglish); + } + + public static class GT_Item_Dispense extends BehaviorProjectileDispense { + + @Override + public ItemStack dispenseStack(IBlockSource aSource, ItemStack aStack) { + return ((GTGenericItem) aStack.getItem()).onDispense(aSource, aStack); + } + + @Override + protected IProjectile getProjectileEntity(World aWorld, IPosition aPosition) { + return null; + } + } +} diff --git a/src/main/java/gregtech/api/items/GT_Block_LongDistancePipe.java b/src/main/java/gregtech/api/items/GT_Block_LongDistancePipe.java deleted file mode 100644 index 31a44f3dbc..0000000000 --- a/src/main/java/gregtech/api/items/GT_Block_LongDistancePipe.java +++ /dev/null @@ -1,125 +0,0 @@ -package gregtech.api.items; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Item_LongDistancePipe; -import gregtech.common.blocks.GT_Material_Machines; - -public class GT_Block_LongDistancePipe extends GT_Generic_Block { - - public IIconContainer[] mIcons; - - public GT_Block_LongDistancePipe() { - super(GT_Item_LongDistancePipe.class, "gt.block.longdistancepipe", new GT_Material_Machines()); - setStepSound(soundTypeMetal); - setCreativeTab(GregTech_API.TAB_GREGTECH); - GregTech_API.registerMachineBlock(this, -1); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Long Distance Fluid Pipeline Pipe"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Long Distance Item Pipeline Pipe"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + 32767 + ".name", "Any Sub Block of this"); - - ItemList.Long_Distance_Pipeline_Fluid_Pipe.set(new ItemStack(this, 1, 0)); - ItemList.Long_Distance_Pipeline_Item_Pipe.set(new ItemStack(this, 1, 1)); - mIcons = new IIconContainer[] { Textures.BlockIcons.LONG_DISTANCE_PIPE_FLUID, - Textures.BlockIcons.LONG_DISTANCE_PIPE_ITEM }; - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - super.onBlockAdded(aWorld, aX, aY, aZ); - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetaData); - } - - @Override - public String getHarvestTool(int aMeta) { - return "wrench"; - } - - @Override - public int getHarvestLevel(int aMeta) { - return 2; - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - return Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ); - } - - @Override - public float getExplosionResistance(Entity aTNT) { - return Blocks.iron_block.getExplosionResistance(aTNT); - } - - @Override - public String getUnlocalizedName() { - return this.mUnlocalizedName; - } - - @Override - public String getLocalizedName() { - return StatCollector.translateToLocal(this.mUnlocalizedName + ".name"); - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - return mIcons[aMeta % mIcons.length].getIcon(); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister aIconRegister) {} - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public int damageDropped(int metadata) { - return metadata; - } - - @Override - public int getDamageValue(World aWorld, int aX, int aY, int aZ) { - return aWorld.getBlockMetadata(aX, aY, aZ); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item aItem, CreativeTabs aCreativeTab, List aList) { - for (int i = 0; i < 3; i++) { - ItemStack aStack = new ItemStack(aItem, 1, i); - if (!aStack.getDisplayName() - .contains(".name")) aList.add(aStack); - } - } -} diff --git a/src/main/java/gregtech/api/items/GT_BreederCell_Item.java b/src/main/java/gregtech/api/items/GT_BreederCell_Item.java deleted file mode 100644 index 438b0f467e..0000000000 --- a/src/main/java/gregtech/api/items/GT_BreederCell_Item.java +++ /dev/null @@ -1,153 +0,0 @@ -package gregtech.api.items; - -import static gregtech.api.util.GT_Utility.formatNumbers; - -import java.util.List; -import java.util.function.Supplier; - -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.EnumChatFormatting; -import net.minecraft.world.World; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Utility; -import ic2.api.reactor.IReactor; -import ic2.api.reactor.IReactorComponent; -import ic2.core.IC2Potion; - -/** - * A {@link ic2.core.item.reactor.ItemReactorLithiumCell}, but can be used to produce anything! - * - * @author glee8e - */ -public class GT_BreederCell_Item extends GT_Generic_Item implements IReactorComponent { - - protected final int mHeatBonusStep; - protected final int mHeatBonusMultiplier; - protected ItemStack mProduct; - protected boolean deflector = false; - protected boolean hidden = false; - protected boolean neiAdded = false; - - public GT_BreederCell_Item(String aUnlocalized, String aEnglish, String aEnglishTooltip, int aHeatBonusStep, - int aHeatBonusMultiplier, int aRequiredPulse, Supplier aProduct) { - super(aUnlocalized, aEnglish, aEnglishTooltip); - this.mHeatBonusStep = aHeatBonusStep; - this.mHeatBonusMultiplier = aHeatBonusMultiplier; - this.setMaxDamage(aRequiredPulse); - setNoRepair(); - GregTech_API.sAfterGTPostload.add(() -> { - mProduct = aProduct.get(); - if (!hidden && !neiAdded) { - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(this)) - .itemOutputs(mProduct) - .setNEIDesc( - deflector ? "Neutron reflecting Breeder" : "Heat neutral Breeder", - String.format("Every %d reactor hull heat", mHeatBonusStep), - String.format("increase speed by %d00%%", mHeatBonusMultiplier), - String.format("Required pulses: %d", getMaxDamage())) - .duration(0) - .eut(0) - .addTo(RecipeMaps.ic2NuclearFakeRecipes); - - neiAdded = true; - } - }); - } - - public GT_BreederCell_Item setDeflector() { - deflector = true; - return this; - } - - public GT_BreederCell_Item setHidden() { - hidden = true; - return this; - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int slotIndex, boolean isCurrentItem) { - if ((entity instanceof EntityLivingBase entityLiving)) { - if (!GT_Utility.isWearingFullRadioHazmat(entityLiving)) { - IC2Potion.radiation.applyTo(entityLiving, 20, 1); - } - } - } - - @Override - public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - aList.add(transItem("019", "Bath with neutron in a hot reactor")); - int rDmg = aStack.getItemDamage() * 4 / getMaxDamage(); - EnumChatFormatting color2 = switch (rDmg) { - case 0 -> EnumChatFormatting.DARK_GRAY; - case 1, 2 -> EnumChatFormatting.GRAY; - default -> EnumChatFormatting.WHITE; - }; - aList.add( - String.format( - transItem("020", "Progress: %s/%s"), - "" + color2 + formatNumbers(aStack.getItemDamage()) + EnumChatFormatting.RESET, - "" + formatNumbers(getMaxDamage()))); - if (aStack.getItemDamage() > 0) aList.add(EnumChatFormatting.RED + transItem("021", "Radiation Hazard")); - } - - @Override - public int getItemStackLimit(ItemStack stack) { - return stack.getItemDamage() == 0 ? maxStackSize : 1; - } - - @Override - public void processChamber(IReactor reactor, ItemStack yourStack, int x, int y, boolean heatrun) {} - - @Override - public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, - int pulseX, int pulseY, boolean heatrun) { - if (heatrun) { - int myLevel = getNewDamage(reactor, yourStack); - if (myLevel >= getMaxDamage()) reactor.setItemAt(youX, youY, mProduct.copy()); - else yourStack.setItemDamage(myLevel); - } - - return deflector; - } - - protected int getNewDamage(IReactor reactor, ItemStack stack) { - return stack.getItemDamage() + 1 + reactor.getHeat() / mHeatBonusStep * mHeatBonusMultiplier; - } - - @Override - public boolean canStoreHeat(IReactor reactor, ItemStack yourStack, int x, int y) { - return false; - } - - @Override - public int getMaxHeat(IReactor reactor, ItemStack yourStack, int x, int y) { - return 0; - } - - @Override - public int getCurrentHeat(IReactor reactor, ItemStack yourStack, int x, int y) { - return 0; - } - - @Override - public int alterHeat(IReactor reactor, ItemStack yourStack, int x, int y, int heat) { - return heat; - } - - @Override - public float influenceExplosion(IReactor reactor, ItemStack yourStack) { - return 0.0F; - } - - @Override - public double getDurabilityForDisplay(ItemStack stack) { - return 1.0D - (double) stack.getItemDamageForDisplay() / (double) stack.getMaxDamage(); - } -} diff --git a/src/main/java/gregtech/api/items/GT_CoolantCellIC_Item.java b/src/main/java/gregtech/api/items/GT_CoolantCellIC_Item.java deleted file mode 100644 index eb3c6276cf..0000000000 --- a/src/main/java/gregtech/api/items/GT_CoolantCellIC_Item.java +++ /dev/null @@ -1,67 +0,0 @@ -package gregtech.api.items; - -import net.minecraft.item.ItemStack; - -import ic2.api.reactor.IReactor; -import ic2.api.reactor.IReactorComponent; - -public class GT_CoolantCellIC_Item extends GT_CoolantCell_Item implements IReactorComponent { - - public GT_CoolantCellIC_Item(String aUnlocalized, String aEnglish, int aMaxStore) { - super(aUnlocalized, aEnglish, aMaxStore); - } - - @Override - public void processChamber(IReactor aReactor, ItemStack aStack, int x, int y, boolean aHeatRun) {} - - @Override - public boolean acceptUraniumPulse(IReactor aReactor, ItemStack aStack, ItemStack pulsingStack, int youX, int youY, - int pulseX, int pulseY, boolean aHeatRun) { - return false; - } - - @Override - public boolean canStoreHeat(IReactor aReactor, ItemStack aStack, int x, int y) { - return !aReactor.isFluidCooled() || getControlTagOfStack(aStack) == 0; - } - - @Override - public int getMaxHeat(IReactor aReactor, ItemStack aStack, int x, int y) { - return this.heatStorage; - } - - @Override - public int getCurrentHeat(IReactor aReactor, ItemStack aStack, int x, int y) { - return getHeatOfStack(aStack); - } - - @Override - public float influenceExplosion(IReactor aReactor, ItemStack aStack) { - return 1.0F + this.heatStorage / 30000.0F; - } - - @Override - public int alterHeat(IReactor aReactor, ItemStack aStack, int x, int y, int aHeat) { - int tHeat = getHeatOfStack(aStack); - if ((tHeat == 0) && (getControlTagOfStack(aStack) != 0)) { - setControlTagOfStack(aStack, 0); - } - tHeat += aHeat; - if (tHeat > this.heatStorage) { - aReactor.setItemAt(x, y, null); - aHeat = this.heatStorage - tHeat + 1; - } else { - if (tHeat < 0) { - aHeat = tHeat; - tHeat = 0; - } else { - aHeat = 0; - } - if ((tHeat > 0) && (getControlTagOfStack(aStack) == 0) && (!aReactor.isFluidCooled())) { - setControlTagOfStack(aStack, 1); - } - setHeatForStack(aStack, tHeat); - } - return aHeat; - } -} diff --git a/src/main/java/gregtech/api/items/GT_CoolantCell_Item.java b/src/main/java/gregtech/api/items/GT_CoolantCell_Item.java deleted file mode 100644 index 6ed7dae3b0..0000000000 --- a/src/main/java/gregtech/api/items/GT_CoolantCell_Item.java +++ /dev/null @@ -1,82 +0,0 @@ -package gregtech.api.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -import gregtech.api.GregTech_API; -import ic2.core.util.StackUtil; - -public class GT_CoolantCell_Item extends GT_Generic_Item { - - protected final int heatStorage; - - public GT_CoolantCell_Item(String aUnlocalized, String aEnglish, int aMaxStore) { - super(aUnlocalized, aEnglish, null); - this.setMaxStackSize(1); - this.setMaxDamage(100); - setNoRepair(); - this.heatStorage = aMaxStore; - this.setCreativeTab(GregTech_API.TAB_GREGTECH); - } - - protected static int getHeatOfStack(ItemStack aStack) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - aStack.setTagCompound(tNBT); - } - return tNBT.getInteger("heat"); - } - - protected void setHeatForStack(ItemStack aStack, int aHeat) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - aStack.setTagCompound(tNBT); - } - tNBT.setInteger("heat", aHeat); - if (this.heatStorage > 0) { - double heatRatio = (double) aHeat / (double) this.heatStorage; - int damage = (int) (aStack.getMaxDamage() * heatRatio); - if (damage >= aStack.getMaxDamage()) { - damage = aStack.getMaxDamage() - 1; - } - aStack.setItemDamage(damage); - } - } - - @Override - public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - super.addAdditionalToolTips(aList, aStack, aPlayer); - int rHeat = getHeatOfStack(aStack) * 10 / this.heatStorage; - EnumChatFormatting color = switch (rHeat) { - case 0 -> EnumChatFormatting.BLUE; - case 1, 2 -> EnumChatFormatting.GREEN; - case 3, 4, 5, 6 -> EnumChatFormatting.YELLOW; - case 7, 8 -> EnumChatFormatting.RED; - default -> EnumChatFormatting.DARK_RED; - }; - aList.add( - EnumChatFormatting.WHITE - + String.format(transItem("000", "Stored Heat: %s"), "" + color + getHeatOfStack(aStack))); - if (getControlTagOfStack(aStack) == 1) { - aList.add(StatCollector.translateToLocal("ic2.reactoritem.heatwarning.line1")); - aList.add(StatCollector.translateToLocal("ic2.reactoritem.heatwarning.line2")); - } - } - - public int getControlTagOfStack(ItemStack stack) { - NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); - return nbtData.getInteger("tag"); - } - - public void setControlTagOfStack(ItemStack stack, int tag) { - NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); - nbtData.setInteger("tag", tag); - } -} diff --git a/src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java b/src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java deleted file mode 100644 index df820f928a..0000000000 --- a/src/main/java/gregtech/api/items/GT_EnergyArmor_Item.java +++ /dev/null @@ -1,332 +0,0 @@ -package gregtech.api.items; - -import static gregtech.api.enums.Mods.GregTech; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemArmor; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.DamageSource; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.common.ISpecialArmor; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.LivingFallEvent; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -public class GT_EnergyArmor_Item extends ItemArmor implements ISpecialArmor { - - public static Map jumpChargeMap = new ConcurrentHashMap<>(); - public int mCharge, mTransfer, mTier, mDamageEnergyCost, mSpecials; - public boolean mChargeProvider; - public double mArmorAbsorbtionPercentage; - - public GT_EnergyArmor_Item(int aID, String aUnlocalized, String aEnglish, int aCharge, int aTransfer, int aTier, - int aDamageEnergyCost, int aSpecials, double aArmorAbsorbtionPercentage, boolean aChargeProvider, int aType, - int aArmorIndex) { - super(ArmorMaterial.DIAMOND, aArmorIndex, aType); - setMaxStackSize(1); - setMaxDamage(100); - setNoRepair(); - setUnlocalizedName(aUnlocalized); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".name", aEnglish); - mCharge = Math.max(1, aCharge); - mTransfer = Math.max(1, aTransfer); - mTier = Math.max(1, aTier); - mSpecials = aSpecials; - mChargeProvider = aChargeProvider; - mDamageEnergyCost = Math.max(0, aDamageEnergyCost); - mArmorAbsorbtionPercentage = aArmorAbsorbtionPercentage; - - setCreativeTab(GregTech_API.TAB_GREGTECH); - - MinecraftForge.EVENT_BUS.register(this); - } - - private static void setCharge(ItemStack aStack) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) tNBT = new NBTTagCompound(); - tNBT.setInteger("charge", 1000000000); - aStack.setTagCompound(tNBT); - } - - @Override - public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - ItemStack tStack = aPlayer.inventory.armorInventory[3 - armorType]; - if (tStack != null) { - for (int i = 0; i < 9; i++) { - if (aPlayer.inventory.mainInventory[i] == aStack) { - aPlayer.inventory.armorInventory[3 - armorType] = aPlayer.inventory.mainInventory[i]; - aPlayer.inventory.mainInventory[i] = tStack; - return tStack; - } - } - } - return super.onItemRightClick(aStack, aWorld, aPlayer); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aIconRegister) { - this.itemIcon = aIconRegister.registerIcon(GregTech.getResourcePath(getUnlocalizedName())); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - aList.add("Tier: " + mTier); - if ((mSpecials & 1) != 0) aList.add("Rebreather"); - if ((mSpecials & 2) != 0) aList.add("Inertia Damper"); - if ((mSpecials & 4) != 0) aList.add("Food Replicator"); - if ((mSpecials & 8) != 0) aList.add("Medicine Module"); - if ((mSpecials & 16) != 0) aList.add("Lamp"); - if ((mSpecials & 32) != 0) aList.add("Solarpanel"); - if ((mSpecials & 64) != 0) aList.add("Extinguisher Module"); - if ((mSpecials & 128) != 0) aList.add("Jump Booster"); - if ((mSpecials & 256) != 0) aList.add("Speed Booster"); - if ((mSpecials & 512) != 0) aList.add("Invisibility Field"); - if ((mSpecials & 1024) != 0) aList.add("Infinite Charge"); - } - - @Override - public void onArmorTick(World aWorld, EntityPlayer aPlayer, ItemStack aStack) { - if (mSpecials == 0) return; - - if (!aPlayer.worldObj.isRemote && (mSpecials & 1) != 0) { - int airSupply = aPlayer.getAir(); - if (GT_ModHandler.canUseElectricItem(aStack, 1000) && airSupply < 50) { - aPlayer.setAir(airSupply + 250); - GT_ModHandler.useElectricItem(aStack, 1000, aPlayer); - } - } - - if (!aPlayer.worldObj.isRemote && (mSpecials & 4) != 0) { - if (GT_ModHandler.canUseElectricItem(aStack, 50000) && aPlayer.getFoodStats() - .needFood()) { - aPlayer.getFoodStats() - .addStats(1, 0.0F); - GT_ModHandler.useElectricItem(aStack, 50000, aPlayer); - } - } - - if ((mSpecials & 8) != 0) { - if (GT_ModHandler.canUseElectricItem(aStack, 10000) && aPlayer.isPotionActive(Potion.poison)) { - GT_Utility.removePotion(aPlayer, Potion.poison.id); - GT_ModHandler.useElectricItem(aStack, 10000, aPlayer); - } - if (GT_ModHandler.canUseElectricItem(aStack, 100000) && aPlayer.isPotionActive(Potion.wither)) { - GT_Utility.removePotion(aPlayer, Potion.wither.id); - GT_ModHandler.useElectricItem(aStack, 100000, aPlayer); - } - } - - if ((mSpecials & 64) != 0) { - aPlayer.setFire(0); - } - - if (!aPlayer.worldObj.isRemote && (mSpecials & 128) != 0) { - float jumpCharge = jumpChargeMap.getOrDefault(aPlayer, 1.0F); - - if (GT_ModHandler.canUseElectricItem(aStack, 1000) && aPlayer.onGround && jumpCharge < 1.0F) { - jumpCharge = 1.0F; - GT_ModHandler.useElectricItem(aStack, 1000, aPlayer); - } - - if (aPlayer.motionY >= 0.0D && jumpCharge > 0.0F && !aPlayer.isInWater()) { - if (jumpCharge < 1.0F) { - jumpCharge = 0.0F; - } - } - - jumpChargeMap.put(aPlayer, jumpCharge); - } - - if ((mSpecials & 256) != 0) { - if (GT_ModHandler.canUseElectricItem(aStack, 100) && aPlayer.isSprinting() - && (aPlayer.onGround && Math.abs(aPlayer.motionX) + Math.abs(aPlayer.motionZ) > 0.10000000149011612D - || aPlayer.isInWater())) { - GT_ModHandler.useElectricItem(aStack, 100, aPlayer); - float bonus = 0.22F; - - if (aPlayer.isInWater()) { - GT_ModHandler.useElectricItem(aStack, 100, aPlayer); - bonus = 0.1F; - - if (aPlayer.motionY > 0) { - aPlayer.motionY += 0.10000000149011612D; - } - } - - aPlayer.moveFlying(0.0F, 1.0F, bonus); - } - } - - if ((mSpecials & 512) != 0) { - if (GT_ModHandler.canUseElectricItem(aStack, 10000)) { - GT_ModHandler.useElectricItem(aStack, 10000, aPlayer); - aPlayer.addPotionEffect(new PotionEffect(Potion.invisibility.getId(), 25, 1, true)); - } - } - - if (!aPlayer.worldObj.isRemote && (mSpecials & (16 | 32)) != 0) { - // if (GregTech_API.sWorldTickCounter%20==0) { - ItemStack tTargetChargeItem = aStack, tTargetDechargeItem = aStack; - - if (GT_ModHandler.chargeElectricItem(tTargetChargeItem, 1, Integer.MAX_VALUE, true, true) < 1) { - tTargetChargeItem = aPlayer.inventory.armorInventory[2]; - } - if (GT_ModHandler.dischargeElectricItem(tTargetDechargeItem, 10, Integer.MAX_VALUE, true, true, true) - < 10) { - tTargetDechargeItem = aPlayer.inventory.armorInventory[2]; - } - - if (tTargetChargeItem == null || !GT_ModHandler.isElectricItem(tTargetChargeItem)) { - tTargetChargeItem = null; - } - - if (aPlayer.worldObj.isDaytime() && aPlayer.worldObj.canBlockSeeTheSky( - MathHelper.floor_double(aPlayer.posX), - MathHelper.floor_double(aPlayer.posY + 1), - MathHelper.floor_double(aPlayer.posZ))) { - if ((mSpecials & 32) != 0 && tTargetChargeItem != null) { - GT_ModHandler.chargeElectricItem(tTargetChargeItem, 20, Integer.MAX_VALUE, true, false); - } - } else { - /* - * TODO: if ((mSpecials & 16) != 0 && tTargetDechargeItem != null && - * GT_ModHandler.canUseElectricItem(tTargetDechargeItem, 10)) { if (aPlayer.worldObj.getBlock - * ((int)aPlayer.posX, (int)aPlayer.posY+1, (int)aPlayer.posZ) == Blocks.air) aPlayer.worldObj.setBlock - * ((int)aPlayer.posX, (int)aPlayer.posY+1, (int)aPlayer.posZ, GregTech_API.sBlockList[3]); - * GT_ModHandler.useElectricItem(tTargetDechargeItem, 10, aPlayer); } - */ - // } - } - } - } - - @Override - public boolean getShareTag() { - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item aItem, CreativeTabs creativeTab, List outputSubItems) { - ItemStack tCharged = new ItemStack(this, 1), tUncharged = new ItemStack(this, 1, getMaxDamage()); - GT_ModHandler.chargeElectricItem(tCharged, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false); - outputSubItems.add(tCharged); - outputSubItems.add(tUncharged); - } - - public boolean canProvideEnergy(ItemStack aStack) { - if ((mSpecials & 1024) != 0) setCharge(aStack); - return mChargeProvider; - } - - public Item getChargedItem(ItemStack aStack) { - if ((mSpecials & 1024) != 0) setCharge(aStack); - return this; - } - - public Item getEmptyItem(ItemStack aStack) { - if ((mSpecials & 1024) != 0) setCharge(aStack); - return this; - } - - public int getMaxCharge(ItemStack aStack) { - if ((mSpecials & 1024) != 0) setCharge(aStack); - return mCharge; - } - - public int getTier(ItemStack aStack) { - if ((mSpecials & 1024) != 0) setCharge(aStack); - return mTier; - } - - public int getTransferLimit(ItemStack aStack) { - if ((mSpecials & 1024) != 0) setCharge(aStack); - return mTransfer; - } - - @Override - public int getItemEnchantability() { - return 0; - } - - @Override - public boolean isBookEnchantable(ItemStack ingredient, ItemStack bookEnchant) { - return false; - } - - @Override - public boolean getIsRepairable(ItemStack toBeRepaired, ItemStack repairWith) { - return false; - } - - // TODO: @ForgeSubscribe - public void onEntityLivingFallEvent(LivingFallEvent event) { - if (!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer player) { - for (int i = 0; i < 4; i++) { - ItemStack armor = player.inventory.armorInventory[i]; - if (armor != null && armor.getItem() == this && (mSpecials & 2) != 0) { - int distanceFactor = (int) event.distance - 3; - int energyCost = (this.mDamageEnergyCost * distanceFactor) / 4; - if (energyCost <= GT_ModHandler - .dischargeElectricItem(armor, Integer.MAX_VALUE, Integer.MAX_VALUE, true, true, true)) { - GT_ModHandler.dischargeElectricItem(armor, energyCost, Integer.MAX_VALUE, true, false, true); - event.setCanceled(true); - break; - } - } - } - } - } - - @Override - public ISpecialArmor.ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, - double damage, int slotIndex) { - return new ISpecialArmor.ArmorProperties( - (source == DamageSource.fall && (mSpecials & 2) != 0) ? 10 : 0, - getBaseAbsorptionRatio() * mArmorAbsorbtionPercentage, - mDamageEnergyCost > 0 ? 25 - * GT_ModHandler.dischargeElectricItem(armor, Integer.MAX_VALUE, Integer.MAX_VALUE, true, true, true) - / mDamageEnergyCost : 0); - } - - @Override - public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slotIndex) { - return (int) Math.round(20.0D * getBaseAbsorptionRatio() * mArmorAbsorbtionPercentage); - } - - @Override - public void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, - int slotIndex) { - GT_ModHandler - .dischargeElectricItem(itemStack, damage * mDamageEnergyCost, Integer.MAX_VALUE, true, false, true); - } - - private double getBaseAbsorptionRatio() { - if (mArmorAbsorbtionPercentage <= 0) return 0.00; - return switch (this.armorType) { - case 0, 3 -> 0.15; - case 1 -> 0.40; - case 2 -> 0.30; - default -> 0.00; - }; - } -} diff --git a/src/main/java/gregtech/api/items/GT_Generic_Block.java b/src/main/java/gregtech/api/items/GT_Generic_Block.java deleted file mode 100644 index 7aaef6d5ca..0000000000 --- a/src/main/java/gregtech/api/items/GT_Generic_Block.java +++ /dev/null @@ -1,22 +0,0 @@ -package gregtech.api.items; - -import static gregtech.api.enums.GT_Values.W; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.item.ItemBlock; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.util.GT_LanguageManager; - -public class GT_Generic_Block extends Block { - - protected final String mUnlocalizedName; - - protected GT_Generic_Block(Class aItemClass, String aName, Material aMaterial) { - super(aMaterial); - setBlockName(mUnlocalizedName = aName); - GameRegistry.registerBlock(this, aItemClass, getUnlocalizedName()); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + W + ".name", "Any Sub Block of this one"); - } -} diff --git a/src/main/java/gregtech/api/items/GT_Generic_Item.java b/src/main/java/gregtech/api/items/GT_Generic_Item.java deleted file mode 100644 index 3fe2083a96..0000000000 --- a/src/main/java/gregtech/api/items/GT_Generic_Item.java +++ /dev/null @@ -1,162 +0,0 @@ -package gregtech.api.items; - -import static gregtech.api.enums.Mods.GregTech; - -import java.util.List; - -import net.minecraft.block.BlockDispenser; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.dispenser.BehaviorDefaultDispenseItem; -import net.minecraft.dispenser.BehaviorProjectileDispense; -import net.minecraft.dispenser.IBlockSource; -import net.minecraft.dispenser.IPosition; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IProjectile; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SubTag; -import gregtech.api.interfaces.IProjectileItem; -import gregtech.api.util.GT_Config; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -/** - * Extended by most Items, also used as a fallback Item, to prevent the accidental deletion when Errors occur. - */ -public class GT_Generic_Item extends Item implements IProjectileItem { - - private final String mName, mTooltip; - protected IIcon mIcon; - - public GT_Generic_Item(String aUnlocalized, String aEnglish, String aEnglishTooltip) { - super(); - mName = "gt." + aUnlocalized; - GT_LanguageManager.addStringLocalization(mName + ".name", aEnglish); - if (GT_Utility.isStringValid(aEnglishTooltip)) - GT_LanguageManager.addStringLocalization(mTooltip = mName + ".tooltip_main", aEnglishTooltip); - else mTooltip = null; - setCreativeTab(GregTech_API.TAB_GREGTECH); - GameRegistry.registerItem(this, mName, GregTech.ID); - BlockDispenser.dispenseBehaviorRegistry.putObject(this, new GT_Item_Dispense()); - } - - @Override - public final Item setUnlocalizedName(String aName) { - return this; - } - - @Override - public final String getUnlocalizedName() { - return mName; - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return getHasSubtypes() ? mName + "." + getDamage(aStack) : mName; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aIconRegister) { - mIcon = aIconRegister.registerIcon(GregTech.getResourcePath(GT_Config.troll ? "troll" : mName)); - } - - @Override - public boolean doesSneakBypassUse(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer) { - return true; - } - - @Override - public IIcon getIconFromDamage(int aMetaData) { - return mIcon; - } - - public int getTier(ItemStack aStack) { - return 0; - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - if (getMaxDamage() > 0 && !getHasSubtypes()) - aList.add((aStack.getMaxDamage() - getDamage(aStack)) + " / " + aStack.getMaxDamage()); - if (mTooltip != null) aList.add(GT_LanguageManager.getTranslation(mTooltip)); - if (GT_ModHandler.isElectricItem(aStack)) aList.add("Tier: " + getTier(aStack)); - addAdditionalToolTips(aList, aStack, aPlayer); - } - - protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - // - } - - @Override - public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - isItemStackUsable(aStack); - } - - public boolean isItemStackUsable(ItemStack aStack) { - return true; - } - - public ItemStack onDispense(IBlockSource aSource, ItemStack aStack) { - EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata()); - IPosition iposition = BlockDispenser.func_149939_a(aSource); - ItemStack itemstack1 = aStack.splitStack(1); - BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition); - return aStack; - } - - @Override - public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, - double aZ) { - return null; - } - - @Override - public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, - float aSpeed) { - return null; - } - - @Override - public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack) { - return false; - } - - @Override - public ItemStack getContainerItem(ItemStack aStack) { - return null; - } - - @Override - public boolean hasContainerItem(ItemStack aStack) { - return getContainerItem(aStack) != null; - } - - public String transItem(String aKey, String aEnglish) { - return GT_LanguageManager.addStringLocalization("Item_DESCRIPTION_Index_" + aKey, aEnglish); - } - - public static class GT_Item_Dispense extends BehaviorProjectileDispense { - - @Override - public ItemStack dispenseStack(IBlockSource aSource, ItemStack aStack) { - return ((GT_Generic_Item) aStack.getItem()).onDispense(aSource, aStack); - } - - @Override - protected IProjectile getProjectileEntity(World aWorld, IPosition aPosition) { - return null; - } - } -} diff --git a/src/main/java/gregtech/api/items/GT_MetaBase_Item.java b/src/main/java/gregtech/api/items/GT_MetaBase_Item.java deleted file mode 100644 index 481c0b5a08..0000000000 --- a/src/main/java/gregtech/api/items/GT_MetaBase_Item.java +++ /dev/null @@ -1,622 +0,0 @@ -package gregtech.api.items; - -import static gregtech.api.enums.GT_Values.D1; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.util.GT_Utility.formatNumbers; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; - -import net.minecraft.dispenser.IBlockSource; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.inventory.Container; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidContainerItem; - -import gregtech.api.enums.SubTag; -import gregtech.api.interfaces.IItemBehaviour; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import ic2.api.item.ElectricItem; -import ic2.api.item.IElectricItem; -import ic2.api.item.IElectricItemManager; -import ic2.api.item.ISpecialElectricItem; - -public abstract class GT_MetaBase_Item extends GT_Generic_Item - implements ISpecialElectricItem, IElectricItemManager, IFluidContainerItem { - - /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ - private final ConcurrentHashMap>> mItemBehaviors = new ConcurrentHashMap<>(); - - /** - * Creates the Item using these Parameters. - * - * @param aUnlocalized The Unlocalized Name of this Item. - */ - public GT_MetaBase_Item(String aUnlocalized) { - super(aUnlocalized, "Generated Item", null); - setHasSubtypes(true); - setMaxDamage(0); - } - - /** - * Adds a special Item Behaviour to the Item. - *

- * Note: the boolean Behaviours sometimes won't be executed if another boolean Behaviour returned true before. - * - * @param aMetaValue the Meta Value of the Item you want to add it to. [0 - 32765] - * @param aBehavior the Click Behavior you want to add. - * @return the Item itself for convenience in constructing. - */ - public final GT_MetaBase_Item addItemBehavior(int aMetaValue, IItemBehaviour aBehavior) { - if (aMetaValue < 0 || aMetaValue >= 32766 || aBehavior == null) return this; - ArrayList> tList = mItemBehaviors - .computeIfAbsent((short) aMetaValue, k -> new ArrayList<>(1)); - tList.add(aBehavior); - return this; - } - - public abstract Long[] getElectricStats(ItemStack aStack); - - public abstract Long[] getFluidContainerStats(ItemStack aStack); - - @Override - public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack) { - ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); - if (tList != null) for (IItemBehaviour tBehavior : tList) - if (tBehavior.hasProjectile(this, aProjectileType, aStack)) return true; - return super.hasProjectile(aProjectileType, aStack); - } - - @Override - public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, - double aZ) { - ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); - if (tList != null) for (IItemBehaviour tBehavior : tList) { - EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aX, aY, aZ); - if (rArrow != null) return rArrow; - } - return super.getProjectile(aProjectileType, aStack, aWorld, aX, aY, aZ); - } - - @Override - public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, - float aSpeed) { - ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); - if (tList != null) for (IItemBehaviour tBehavior : tList) { - EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aEntity, aSpeed); - if (rArrow != null) return rArrow; - } - return super.getProjectile(aProjectileType, aStack, aWorld, aEntity, aSpeed); - } - - @Override - public ItemStack onDispense(IBlockSource aSource, ItemStack aStack) { - ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); - if (tList != null) for (IItemBehaviour tBehavior : tList) - if (tBehavior.canDispense(this, aSource, aStack)) return tBehavior.onDispense(this, aSource, aStack); - return super.onDispense(aSource, aStack); - } - - @Override - public boolean isItemStackUsable(ItemStack aStack) { - ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); - if (tList != null) for (IItemBehaviour tBehavior : tList) - if (!tBehavior.isItemStackUsable(this, aStack)) return false; - return super.isItemStackUsable(aStack); - } - - @Override - public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { - use(aStack, 0, aPlayer); - isItemStackUsable(aStack); - ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); - try { - if (tList != null) for (IItemBehaviour tBehavior : tList) - if (tBehavior.onLeftClickEntity(this, aStack, aPlayer, aEntity)) { - if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem(); - return true; - } - if (aStack.stackSize <= 0) { - aPlayer.destroyCurrentEquippedItem(); - return false; - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - return false; - } - - @Override - public boolean onItemUse(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, - int ordinalSide, float hitX, float hitY, float hitZ) { - use(aStack, 0, aPlayer); - isItemStackUsable(aStack); - ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); - try { - if (tList != null) for (IItemBehaviour tBehavior : tList) - if (tBehavior.onItemUse(this, aStack, aPlayer, aWorld, aX, aY, aZ, ordinalSide, hitX, hitY, hitZ)) { - if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem(); - return true; - } - if (aStack.stackSize <= 0) { - aPlayer.destroyCurrentEquippedItem(); - return false; - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - return false; - } - - @Override - public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, - int ordinalSide, float hitX, float hitY, float hitZ) { - use(aStack, 0, aPlayer); - isItemStackUsable(aStack); - ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); - try { - if (tList != null) for (IItemBehaviour tBehavior : tList) if (tBehavior.onItemUseFirst( - this, - aStack, - aPlayer, - aWorld, - aX, - aY, - aZ, - ForgeDirection.getOrientation(ordinalSide), - hitX, - hitY, - hitZ)) { - if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem(); - return true; - } - if (aStack.stackSize <= 0) { - aPlayer.destroyCurrentEquippedItem(); - return false; - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - return false; - } - - @Override - public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - use(aStack, 0, aPlayer); - isItemStackUsable(aStack); - ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); - try { - if (tList != null) for (IItemBehaviour tBehavior : tList) - aStack = tBehavior.onItemRightClick(this, aStack, aWorld, aPlayer); - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - return aStack; - } - - @Override - public final void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - String tKey = getUnlocalizedName(aStack) + ".tooltip"; - String[] tStrings = GT_LanguageManager.getTranslation(tKey) - .split("/n "); - for (String tString : tStrings) - if (GT_Utility.isStringValid(tString) && !tKey.equals(tString)) aList.add(tString); - - Long[] tStats = getElectricStats(aStack); - if (tStats != null) { - if (tStats[3] > 0) { - aList.add( - EnumChatFormatting.AQUA + String.format( - transItem("009", "Contains %s EU Tier: %s"), - formatNumbers(tStats[3]), - "" + (tStats[2] >= 0 ? tStats[2] : 0)) + EnumChatFormatting.GRAY); - } else { - long tCharge = getRealCharge(aStack); - if (tStats[3] == -2 && tCharge <= 0) { - aList.add( - EnumChatFormatting.AQUA + transItem("010", "Empty. You should recycle it properly.") - + EnumChatFormatting.GRAY); - } else { - aList.add( - EnumChatFormatting.AQUA - + String.format( - transItem("011", "%s / %s EU - Voltage: %s"), - formatNumbers(tCharge), - formatNumbers(Math.abs(tStats[0])), - "" + V[(int) (tStats[2] >= 0 ? tStats[2] < V.length ? tStats[2] : V.length - 1 : 1)]) - + EnumChatFormatting.GRAY); - } - } - } - - tStats = getFluidContainerStats(aStack); - if (tStats != null && tStats[0] > 0) { - FluidStack tFluid = getFluidContent(aStack); - aList.add( - EnumChatFormatting.BLUE + ((tFluid == null ? transItem("012", "No Fluids Contained") - : GT_Utility.getFluidName(tFluid, true))) + EnumChatFormatting.GRAY); - aList.add( - EnumChatFormatting.BLUE + String.format( - transItem("013", "%sL / %sL"), - "" + (tFluid == null ? 0 : formatNumbers(tFluid.amount)), - "" + formatNumbers(tStats[0])) + EnumChatFormatting.GRAY); - } - - ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); - if (tList != null) for (IItemBehaviour tBehavior : tList) - aList = tBehavior.getAdditionalToolTips(this, aList, aStack); - - addAdditionalToolTips(aList, aStack, aPlayer); - } - - @Override - public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) { - ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); - if (tList != null) for (IItemBehaviour tBehavior : tList) - tBehavior.onUpdate(this, aStack, aWorld, aPlayer, aTimer, aIsInHand); - } - - @Override - public final boolean canProvideEnergy(ItemStack aStack) { - Long[] tStats = getElectricStats(aStack); - if (tStats == null) return false; - return tStats[3] > 0 || (aStack.stackSize == 1 && (tStats[3] == -2 || tStats[3] == -3)); - } - - @Override - public final double getMaxCharge(ItemStack aStack) { - Long[] tStats = getElectricStats(aStack); - if (tStats == null) return 0; - return Math.abs(tStats[0]); - } - - @Override - public final double getTransferLimit(ItemStack aStack) { - Long[] tStats = getElectricStats(aStack); - if (tStats == null) return 0; - return Math.max(tStats[1], tStats[3]); - } - - @Override - public final double charge(ItemStack aStack, double aCharge, int aTier, boolean aIgnoreTransferLimit, - boolean aSimulate) { - Long[] tStats = getElectricStats(aStack); - if (tStats == null || tStats[2] > aTier - || !(tStats[3] == -1 || tStats[3] == -3 || (tStats[3] < 0 && aCharge == Integer.MAX_VALUE)) - || aStack.stackSize != 1) return 0; - long tTransfer = aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge); - long tChargeBefore = getRealCharge(aStack), tNewCharge = Math.min( - Math.abs(tStats[0]), - Long.MAX_VALUE - tTransfer >= tChargeBefore ? tChargeBefore + tTransfer : Long.MAX_VALUE); - if (!aSimulate) setCharge(aStack, tNewCharge); - return tNewCharge - tChargeBefore; - } - - @Override - public final double discharge(ItemStack aStack, double aCharge, int aTier, boolean aIgnoreTransferLimit, - boolean aBatteryAlike, boolean aSimulate) { - Long[] tStats = getElectricStats(aStack); - if (tStats == null || tStats[2] > aTier) return 0; - if (aBatteryAlike && !canProvideEnergy(aStack)) return 0; - if (tStats[3] > 0) { - if (aCharge < tStats[3] || aStack.stackSize < 1) return 0; - if (!aSimulate) aStack.stackSize--; - return tStats[3]; - } - long tChargeBefore = getRealCharge(aStack), tNewCharge = Math - .max(0, tChargeBefore - (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge))); - if (!aSimulate) setCharge(aStack, tNewCharge); - return tChargeBefore - tNewCharge; - } - - @Override - public final double getCharge(ItemStack aStack) { - return getRealCharge(aStack); - } - - @Override - public final boolean canUse(ItemStack aStack, double aAmount) { - return getRealCharge(aStack) >= aAmount; - } - - @Override - public final boolean use(ItemStack aStack, double aAmount, EntityLivingBase aPlayer) { - chargeFromArmor(aStack, aPlayer); - if (aPlayer instanceof EntityPlayer && ((EntityPlayer) aPlayer).capabilities.isCreativeMode) return true; - double tTransfer = discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, true); - if (Math.abs(tTransfer - aAmount) < .0000001) { - discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); - chargeFromArmor(aStack, aPlayer); - return true; - } - discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); - chargeFromArmor(aStack, aPlayer); - return false; - } - - @Override - public final void chargeFromArmor(ItemStack aStack, EntityLivingBase aPlayer) { - if (aPlayer == null || aPlayer.worldObj.isRemote) return; - for (int i = 1; i < 5; i++) { - ItemStack tArmor = aPlayer.getEquipmentInSlot(i); - if (GT_ModHandler.isElectricItem(tArmor)) { - IElectricItem tArmorItem = (IElectricItem) tArmor.getItem(); - if (tArmorItem.canProvideEnergy(tArmor) && tArmorItem.getTier(tArmor) >= getTier(aStack)) { - double tCharge = ElectricItem.manager.discharge( - tArmor, - charge(aStack, Integer.MAX_VALUE - 1, Integer.MAX_VALUE, true, true), - Integer.MAX_VALUE, - true, - true, - false); - if (tCharge > 0) { - charge(aStack, tCharge, Integer.MAX_VALUE, true, false); - if (aPlayer instanceof EntityPlayer) { - Container tContainer = ((EntityPlayer) aPlayer).openContainer; - if (tContainer != null) tContainer.detectAndSendChanges(); - } - } - } - } - } - } - - /* - * @Override public final int getMaxCharge(ItemStack aStack) { Long[] tStats = getElectricStats(aStack); if (tStats - * == null) return 0; return (int)Math.abs(tStats[0]); } - * @Override public final int getTransferLimit(ItemStack aStack) { Long[] tStats = getElectricStats(aStack); if - * (tStats == null) return 0; return (int)Math.max(tStats[1], tStats[3]); } - * @Override public final int charge(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreTransferLimit, boolean - * aSimulate) { Long[] tStats = getElectricStats(aStack); if (tStats == null || tStats[2] > aTier || !(tStats[3] == - * -1 || tStats[3] == -3 || (tStats[3] < 0 && aCharge == Integer.MAX_VALUE)) || aStack.stackSize != 1) return 0; - * long tChargeBefore = getRealCharge(aStack), tNewCharge = - * aCharge==Integer.MAX_VALUE?Long.MAX_VALUE:Math.min(Math.abs(tStats[0]), tChargeBefore + - * (aIgnoreTransferLimit?aCharge:Math.min(tStats[1], aCharge))); if (!aSimulate) setCharge(aStack, tNewCharge); - * return (int)(tNewCharge-tChargeBefore); } - * @Override public final int discharge(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreTransferLimit, - * boolean aSimulate) { Long[] tStats = getElectricStats(aStack); if (tStats == null || tStats[2] > aTier) return 0; - * if (tStats[3] > 0) { if (aCharge < tStats[3] || aStack.stackSize < 1) return 0; if (!aSimulate) - * aStack.stackSize--; return (int)(long)tStats[3]; } long tChargeBefore = getRealCharge(aStack), tNewCharge = - * Math.max(0, tChargeBefore - (aIgnoreTransferLimit?aCharge:Math.min(tStats[1], aCharge))); if (!aSimulate) - * setCharge(aStack, tNewCharge); return (int)(tChargeBefore-tNewCharge); } - * @Override public final int getCharge(ItemStack aStack) { return (int)Math.min(Integer.MAX_VALUE, - * getRealCharge(aStack)); } - * @Override public final boolean canUse(ItemStack aStack, int aAmount) { return getRealCharge(aStack) >= aAmount; } - * @Override public final boolean use(ItemStack aStack, int aAmount, EntityLivingBase aPlayer) { - * chargeFromArmor(aStack, aPlayer); if (aPlayer instanceof EntityPlayer && - * ((EntityPlayer)aPlayer).capabilities.isCreativeMode) return true; int tTransfer = discharge(aStack, aAmount, - * Integer.MAX_VALUE, true, true); if (tTransfer == aAmount) { discharge(aStack, aAmount, Integer.MAX_VALUE, true, - * false); chargeFromArmor(aStack, aPlayer); return true; } discharge(aStack, aAmount, Integer.MAX_VALUE, true, - * false); chargeFromArmor(aStack, aPlayer); return false; } - * @Override public final void chargeFromArmor(ItemStack aStack, EntityLivingBase aPlayer) { if (aPlayer == null || - * aPlayer.worldObj.isRemote) return; for (int i = 1; i < 5; i++) { ItemStack tArmor = - * aPlayer.getEquipmentInSlot(i); if (GT_ModHandler.isElectricItem(tArmor)) { IElectricItem tArmorItem = - * (IElectricItem)tArmor.getItem(); if (tArmorItem.canProvideEnergy(tArmor) && tArmorItem.getTier(tArmor) >= - * getTier(aStack)) { int tCharge = ElectricItem.manager.discharge(tArmor, charge(aStack, Integer.MAX_VALUE-1, - * Integer.MAX_VALUE, true, true), Integer.MAX_VALUE, true, false); if (tCharge > 0) { charge(aStack, tCharge, - * Integer.MAX_VALUE, true, false); if (aPlayer instanceof EntityPlayer) { Container tContainer = - * ((EntityPlayer)aPlayer).openContainer; if (tContainer != null) tContainer.detectAndSendChanges(); } } } } } } - */ - public final long getRealCharge(ItemStack aStack) { - Long[] tStats = getElectricStats(aStack); - if (tStats == null) return 0; - if (tStats[3] > 0) return (int) (long) tStats[3]; - NBTTagCompound tNBT = aStack.getTagCompound(); - return tNBT == null ? 0 : tNBT.getLong("GT.ItemCharge"); - } - - public final boolean setCharge(ItemStack aStack, long aCharge) { - Long[] tStats = getElectricStats(aStack); - if (tStats == null || tStats[3] > 0) return false; - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) tNBT = new NBTTagCompound(); - tNBT.removeTag("GT.ItemCharge"); - aCharge = Math.min(tStats[0] < 0 ? Math.abs(tStats[0] / 2) : aCharge, Math.abs(tStats[0])); - if (aCharge > 0) { - aStack.setItemDamage(getChargedMetaData(aStack)); - tNBT.setLong("GT.ItemCharge", aCharge); - } else { - aStack.setItemDamage(getEmptyMetaData(aStack)); - } - if (tNBT.hasNoTags()) aStack.setTagCompound(null); - else aStack.setTagCompound(tNBT); - isItemStackUsable(aStack); - return true; - } - - public short getChargedMetaData(ItemStack aStack) { - return (short) aStack.getItemDamage(); - } - - public short getEmptyMetaData(ItemStack aStack) { - return (short) aStack.getItemDamage(); - } - - @Override - public FluidStack getFluid(ItemStack aStack) { - return getFluidContent(aStack); - } - - @Override - public int getCapacity(ItemStack aStack) { - Long[] tStats = getFluidContainerStats(aStack); - return tStats == null ? 0 : (int) Math.max(0, tStats[0]); - } - - @Override - public int fill(ItemStack aStack, FluidStack aFluid, boolean doFill) { - if (aStack == null || aStack.stackSize != 1) return 0; - - ItemStack tStack = GT_Utility.fillFluidContainer(aFluid, aStack, false, false); - if (tStack != null) { - aStack.setItemDamage(tStack.getItemDamage()); - aStack.func_150996_a(tStack.getItem()); - return GT_Utility.getFluidForFilledItem(tStack, false).amount; - } - - Long[] tStats = getFluidContainerStats(aStack); - if (tStats == null || tStats[0] <= 0 - || aFluid == null - || aFluid.getFluid() - .getID() <= 0 - || aFluid.amount <= 0) return 0; - - FluidStack tFluid = getFluidContent(aStack); - - if (tFluid == null || tFluid.getFluid() - .getID() <= 0) { - if (aFluid.amount <= tStats[0]) { - if (doFill) { - setFluidContent(aStack, aFluid); - } - return aFluid.amount; - } - if (doFill) { - tFluid = aFluid.copy(); - tFluid.amount = (int) (long) tStats[0]; - setFluidContent(aStack, tFluid); - } - return (int) (long) tStats[0]; - } - - if (!tFluid.isFluidEqual(aFluid)) return 0; - - int space = (int) (long) tStats[0] - tFluid.amount; - if (aFluid.amount <= space) { - if (doFill) { - tFluid.amount += aFluid.amount; - setFluidContent(aStack, tFluid); - } - return aFluid.amount; - } - if (doFill) { - tFluid.amount = (int) (long) tStats[0]; - setFluidContent(aStack, tFluid); - } - return space; - } - - @Override - public FluidStack drain(ItemStack aStack, int maxDrain, boolean doDrain) { - if (aStack == null || aStack.stackSize != 1) return null; - - FluidStack tFluid = GT_Utility.getFluidForFilledItem(aStack, false); - if (tFluid != null && maxDrain >= tFluid.amount) { - ItemStack tStack = GT_Utility.getContainerItem(aStack, false); - if (tStack == null) { - if (doDrain) aStack.stackSize = 0; - return tFluid; - } - if (doDrain) { - aStack.setItemDamage(tStack.getItemDamage()); - aStack.func_150996_a(tStack.getItem()); - } - return tFluid; - } - - Long[] tStats = getFluidContainerStats(aStack); - if (tStats == null || tStats[0] <= 0) return null; - - tFluid = getFluidContent(aStack); - if (tFluid == null) return null; - - int used = maxDrain; - if (tFluid.amount < used) used = tFluid.amount; - if (doDrain) { - tFluid.amount -= used; - setFluidContent(aStack, tFluid); - } - - FluidStack drained = tFluid.copy(); - drained.amount = used; - return drained; - } - - public FluidStack getFluidContent(ItemStack aStack) { - Long[] tStats = getFluidContainerStats(aStack); - if (tStats == null || tStats[0] <= 0) return GT_Utility.getFluidForFilledItem(aStack, false); - NBTTagCompound tNBT = aStack.getTagCompound(); - return tNBT == null ? null : FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("GT.FluidContent")); - } - - public void setFluidContent(ItemStack aStack, FluidStack aFluid) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) tNBT = new NBTTagCompound(); - else tNBT.removeTag("GT.FluidContent"); - if (aFluid != null && aFluid.amount > 0) - tNBT.setTag("GT.FluidContent", aFluid.writeToNBT(new NBTTagCompound())); - if (tNBT.hasNoTags()) aStack.setTagCompound(null); - else aStack.setTagCompound(tNBT); - isItemStackUsable(aStack); - } - - @Override - public int getItemStackLimit(ItemStack aStack) { - Long[] tStats = getElectricStats(aStack); - if (tStats != null && (tStats[3] == -1 || tStats[3] == -2 || tStats[3] == -3) && getRealCharge(aStack) > 0) - return 1; - tStats = getFluidContainerStats(aStack); - if (tStats != null) return (int) (long) tStats[1]; - if (getDamage(aStack) == 32763) return 1; - return 64; - } - - @Override - public final Item getChargedItem(ItemStack itemStack) { - return this; - } - - @Override - public final Item getEmptyItem(ItemStack itemStack) { - return this; - } - - @Override - public final int getTier(ItemStack aStack) { - Long[] tStats = getElectricStats(aStack); - return (int) (tStats == null ? Integer.MAX_VALUE : tStats[2]); - } - - @Override - public final String getToolTip(ItemStack aStack) { - return null; - } // This has its own ToolTip Handler, no need to let the IC2 Handler screw us up at this Point - - @Override - public final IElectricItemManager getManager(ItemStack aStack) { - return this; - } // We are our own Manager - - @Override - public final boolean getShareTag() { - return true; - } // just to be sure. - - @Override - public int getItemEnchantability() { - return 0; - } - - @Override - public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) { - return false; - } - - @Override - public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) { - return false; - } -} diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java deleted file mode 100644 index 465c4bc9d6..0000000000 --- a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java +++ /dev/null @@ -1,415 +0,0 @@ -package gregtech.api.items; - -import static gregtech.api.enums.GT_Values.D1; -import static gregtech.api.enums.Mods.AppleCore; -import static gregtech.api.enums.Mods.GregTech; -import static gregtech.api.recipe.RecipeMaps.cannerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.BitSet; -import java.util.List; -import java.util.concurrent.ConcurrentHashMap; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumAction; -import net.minecraft.item.Item; -import net.minecraft.item.ItemFood; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import cpw.mods.fml.common.Optional; -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.Mods; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; -import gregtech.api.interfaces.IFoodStat; -import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.IItemBehaviour; -import gregtech.api.interfaces.IItemContainer; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_Config; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.render.items.GT_GeneratedMaterial_Renderer; -import squeek.applecore.api.food.FoodValues; -import squeek.applecore.api.food.IEdible; -import squeek.applecore.api.food.ItemFoodProxy; - -/** - * @author Gregorius Techneticies - *

- * One Item for everything! - *

- * This brilliant Item Class is used for automatically generating all possible variations of Material Items, - * like Dusts, Ingots, Gems, Plates and similar. It saves me a ton of work, when adding Items, because I always - * have to make a new Item SubType for each OreDict Prefix, when adding a new Material. - *

- * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom - * defined, just to save space and MetaData. - *

- * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike - * Item. - */ -@Optional.Interface(iface = "squeek.applecore.api.food.IEdible", modid = Mods.Names.APPLE_CORE) -public abstract class GT_MetaGenerated_Item extends GT_MetaBase_Item implements IGT_ItemWithMaterialRenderer, IEdible { - - /** - * All instances of this Item Class are listed here. This gets used to register the Renderer to all Items of this - * Type, if useStandardMetaItemRenderer() returns true. - *

- * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item. - */ - public static final ConcurrentHashMap sInstances = new ConcurrentHashMap<>(); - - /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ - - public final short mOffset, mItemAmount; - public final BitSet mEnabledItems; - public final BitSet mVisibleItems; - public final IIcon[][] mIconList; - - public final ConcurrentHashMap mFoodStats = new ConcurrentHashMap<>(); - public final ConcurrentHashMap mElectricStats = new ConcurrentHashMap<>(); - public final ConcurrentHashMap mFluidContainerStats = new ConcurrentHashMap<>(); - public final ConcurrentHashMap mBurnValues = new ConcurrentHashMap<>(); - - /** - * Creates the Item using these Parameters. - * - * @param aUnlocalized The Unlocalized Name of this Item. - */ - public GT_MetaGenerated_Item(String aUnlocalized, short aOffset, short aItemAmount) { - super(aUnlocalized); - setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS); - setHasSubtypes(true); - setMaxDamage(0); - mEnabledItems = new BitSet(aItemAmount); - mVisibleItems = new BitSet(aItemAmount); - - mOffset = (short) Math.min(32766, aOffset); - mItemAmount = (short) Math.min(aItemAmount, 32766 - mOffset); - mIconList = new IIcon[aItemAmount][1]; - - sInstances.put(getUnlocalizedName(), this); - } - - /** - * This adds a Custom Item to the ending Range. - * - * @param aID The Id of the assigned Item [0 - mItemAmount] (The MetaData gets auto-shifted by +mOffset) - * @param aEnglish The Default Localized Name of the created Item - * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip - * @param aRandomData The OreDict Names you want to give the Item. Also used for TC Aspects and some other things. - * @return An ItemStack containing the newly created Item. - */ - public final ItemStack addItem(int aID, String aEnglish, String aToolTip, Object... aRandomData) { - if (aToolTip == null) aToolTip = ""; - if (aID >= 0 && aID < mItemAmount) { - ItemStack rStack = new ItemStack(this, 1, mOffset + aID); - if (mEnabledItems.get(aID)) { - throw new IllegalArgumentException( - String.format("ID %s is already reserved for %s!", aID, rStack.getDisplayName())); - } - mEnabledItems.set(aID); - mVisibleItems.set(aID); - GT_LanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".name", aEnglish); - GT_LanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".tooltip", aToolTip); - List tAspects = new ArrayList<>(); - // Important Stuff to do first - for (Object tRandomData : aRandomData) if (tRandomData instanceof SubTag) { - if (tRandomData == SubTag.INVISIBLE) { - mVisibleItems.set(aID, false); - continue; - } - if (tRandomData == SubTag.NO_UNIFICATION) { - GT_OreDictUnificator.addToBlacklist(rStack); - } - } - // now check for the rest - for (Object tRandomData : aRandomData) if (tRandomData != null) { - boolean tUseOreDict = true; - if (tRandomData instanceof IFoodStat) { - setFoodBehavior(mOffset + aID, (IFoodStat) tRandomData); - if (((IFoodStat) tRandomData).getFoodAction(this, rStack) == EnumAction.eat) { - int tFoodValue = ((IFoodStat) tRandomData).getFoodLevel(this, rStack, null); - if (tFoodValue > 0) { - GT_Values.RA.stdBuilder() - .itemInputs(rStack, ItemList.IC2_Food_Can_Empty.get(tFoodValue)) - .itemOutputs( - ((IFoodStat) tRandomData).isRotten(this, rStack, null) - ? ItemList.IC2_Food_Can_Spoiled.get(tFoodValue) - : ItemList.IC2_Food_Can_Filled.get(tFoodValue)) - .duration(tFoodValue * 5 * SECONDS) - .eut(1) - .addTo(cannerRecipes); - } - } - tUseOreDict = false; - } - if (tRandomData instanceof IItemBehaviour) { - // The cast below from is not safe. If you know how to make it safe, please do. - // noinspection unchecked - addItemBehavior(mOffset + aID, (IItemBehaviour) tRandomData); - tUseOreDict = false; - } - if (tRandomData instanceof IItemContainer) { - ((IItemContainer) tRandomData).set(rStack); - tUseOreDict = false; - } - if (tRandomData instanceof SubTag) { - continue; - } - if (tRandomData instanceof TC_AspectStack) { - ((TC_AspectStack) tRandomData).addToAspectList(tAspects); - continue; - } - if (tRandomData instanceof ItemData) { - if (GT_Utility.isStringValid(tRandomData)) GT_OreDictUnificator.registerOre(tRandomData, rStack); - else GT_OreDictUnificator.addItemData(rStack, (ItemData) tRandomData); - continue; - } - if (tUseOreDict) { - GT_OreDictUnificator.registerOre(tRandomData, rStack); - } - } - if (GregTech_API.sThaumcraftCompat != null) - GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); - return rStack; - } - return null; - } - - /** - * Sets a Food Behavior for the Item. - * - * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] - * @param aFoodBehavior the Food Behavior you want to add. - * @return the Item itself for convenience in constructing. - */ - public final GT_MetaGenerated_Item setFoodBehavior(int aMetaValue, IFoodStat aFoodBehavior) { - if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length()) return this; - if (aFoodBehavior == null) mFoodStats.remove((short) aMetaValue); - else mFoodStats.put((short) aMetaValue, aFoodBehavior); - return this; - } - - /** - * Sets the Furnace Burn Value for the Item. - * - * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] - * @param aValue 200 = 1 Burn Process = 500 EU, max = 32767 (that is 81917.5 EU) - * @return the Item itself for convenience in constructing. - */ - public final GT_MetaGenerated_Item setBurnValue(int aMetaValue, int aValue) { - if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length() || aValue < 0) return this; - if (aValue == 0) mBurnValues.remove((short) aMetaValue); - else mBurnValues.put((short) aMetaValue, aValue > Short.MAX_VALUE ? Short.MAX_VALUE : (short) aValue); - return this; - } - - /** - * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] - * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior) - * @param aTransferLimit Transfer Limit. - * @param aTier The electric Tier. - * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0). Use -1 if you want to - * make this Battery chargeable (the use and canUse Functions will still discharge if you just - * use this) Use -2 if you want to make this Battery dischargeable. Use -3 if you want to make - * this Battery charge/discharge-able. - * @return the Item itself for convenience in constructing. - */ - public final GT_MetaGenerated_Item setElectricStats(int aMetaValue, long aMaxCharge, long aTransferLimit, - long aTier, long aSpecialData, boolean aUseAnimations) { - if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length()) return this; - if (aMaxCharge == 0) mElectricStats.remove((short) aMetaValue); - else { - mElectricStats.put( - (short) aMetaValue, - new Long[] { aMaxCharge, Math.max(0, aTransferLimit), Math.max(-1, aTier), aSpecialData }); - if (aMetaValue >= mOffset && aUseAnimations) mIconList[aMetaValue - mOffset] = Arrays - .copyOf(mIconList[aMetaValue - mOffset], Math.max(9, mIconList[aMetaValue - mOffset].length)); - } - return this; - } - - /** - * - * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] - * @param aCapacity fluid capacity in L or mb - * @param aStacksize item stack size - * @return the Item itself for convenience in constructing. - */ - public final GT_MetaGenerated_Item setFluidContainerStats(int aMetaValue, long aCapacity, long aStacksize) { - if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length()) return this; - if (aCapacity < 0) mElectricStats.remove((short) aMetaValue); - else mFluidContainerStats.put((short) aMetaValue, new Long[] { aCapacity, Math.max(1, aStacksize) }); - return this; - } - - /** - * @return if this MetaGenerated Item should use my Default Renderer System. - */ - public boolean useStandardMetaItemRenderer() { - return true; - } - - @Override - public short[] getRGBa(ItemStack aStack) { - return Materials._NULL.getRGBA(); - } - - /** - * @return the Icon the Material is going to be rendered with. - */ - public IIconContainer getIconContainer(int aMetaData) { - return null; - } - - @Override - public IIcon getIcon(int aMetaData, int pass) { - IIconContainer iconContainer = getIconContainer(aMetaData); - return iconContainer != null ? iconContainer.getIcon() : null; - } - - @Override - public IIcon getOverlayIcon(int aMetaData, int pass) { - IIconContainer iconContainer = getIconContainer(aMetaData); - return iconContainer != null ? iconContainer.getOverlayIcon() : null; - } - - @Override - public boolean shouldUseCustomRenderer(int aMetaData) { - return true; - } - - @Override - public GT_GeneratedMaterial_Renderer getMaterialRenderer(int aMetaData) { - return null; - } - - @Override - public boolean allowMaterialRenderer(int aMetaData) { - return aMetaData < this.mOffset; - } - - /* ---------- INTERNAL OVERRIDES ---------- */ - - @Override - public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - IFoodStat tStat = mFoodStats.get((short) getDamage(aStack)); - if (tStat != null && aPlayer.canEat(tStat.alwaysEdible(this, aStack, aPlayer))) - aPlayer.setItemInUse(aStack, 32); - return super.onItemRightClick(aStack, aWorld, aPlayer); - } - - @Override - public int getMaxItemUseDuration(ItemStack aStack) { - return mFoodStats.get((short) getDamage(aStack)) == null ? 0 : 32; - } - - @Override - public EnumAction getItemUseAction(ItemStack aStack) { - IFoodStat tStat = mFoodStats.get((short) getDamage(aStack)); - return tStat == null ? EnumAction.none : tStat.getFoodAction(this, aStack); - } - - @Override - public final ItemStack onEaten(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - IFoodStat tStat = mFoodStats.get((short) getDamage(aStack)); - if (tStat != null) { - if (AppleCore.isModLoaded()) { - aPlayer.getFoodStats() - .func_151686_a(getFoodProxy(this), aStack); - } else { - aPlayer.getFoodStats() - .addStats(tStat.getFoodLevel(this, aStack, aPlayer), tStat.getSaturation(this, aStack, aPlayer)); - } - tStat.onEaten(this, aStack, aPlayer); - } - return aStack; - } - - @Optional.Method(modid = Mods.Names.APPLE_CORE) - private static ItemFood getFoodProxy(Object edible) { - return new ItemFoodProxy((IEdible) edible); - } - - @Override - @Optional.Method(modid = Mods.Names.APPLE_CORE) - public FoodValues getFoodValues(ItemStack aStack) { - IFoodStat tStat = mFoodStats.get((short) getDamage(aStack)); - return tStat == null ? null - : new FoodValues(tStat.getFoodLevel(this, aStack, null), tStat.getSaturation(this, aStack, null)); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { - int j = mEnabledItems.length(); - for (int i = 0; i < j; i++) if (mVisibleItems.get(i) || (D1 && mEnabledItems.get(i))) { - Long[] tStats = mElectricStats.get((short) (mOffset + i)); - if (tStats != null && tStats[3] < 0) { - ItemStack tStack = new ItemStack(this, 1, mOffset + i); - setCharge(tStack, Math.abs(tStats[0])); - isItemStackUsable(tStack); - aList.add(tStack); - } - if (tStats == null || tStats[3] != -2) { - ItemStack tStack = new ItemStack(this, 1, mOffset + i); - isItemStackUsable(tStack); - aList.add(tStack); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public final void registerIcons(IIconRegister aIconRegister) { - short j = (short) mEnabledItems.length(); - for (short i = 0; i < j; i++) if (mEnabledItems.get(i)) { - for (byte k = 1; k < mIconList[i].length; k++) { - mIconList[i][k] = aIconRegister.registerIcon( - GregTech.getResourcePath(GT_Config.troll ? "troll" : getUnlocalizedName() + "/" + i + "/" + k)); - } - mIconList[i][0] = aIconRegister - .registerIcon(GregTech.getResourcePath(GT_Config.troll ? "troll" : getUnlocalizedName() + "/" + i)); - } - } - - @Override - public final Long[] getElectricStats(ItemStack aStack) { - return mElectricStats.get((short) aStack.getItemDamage()); - } - - @Override - public final Long[] getFluidContainerStats(ItemStack aStack) { - return mFluidContainerStats.get((short) aStack.getItemDamage()); - } - - @Override - public int getItemEnchantability() { - return 0; - } - - @Override - public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) { - return false; - } - - @Override - public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) { - return false; - } -} diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X01.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X01.java deleted file mode 100644 index db41a3c35b..0000000000 --- a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X01.java +++ /dev/null @@ -1,213 +0,0 @@ -package gregtech.api.items; - -import static gregtech.api.enums.GT_Values.M; - -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -/** - * @author Gregorius Techneticies - *

- * One Item for everything! - *

- * This brilliant Item Class is used for automatically generating all possible variations of Material Items, - * like Dusts, Ingots, Gems, Plates and similar. It saves me a ton of work, when adding Items, because I always - * have to make a new Item SubType for each OreDict Prefix, when adding a new Material. - *

- * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom - * defined, just to save space and MetaData. - *

- * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike - * Item. - */ -public abstract class GT_MetaGenerated_Item_X01 extends GT_MetaGenerated_Item { - - protected final OrePrefixes mPrefix; - protected final int mIconSetIndex; - - /** - * Creates the Item using these Parameters. This is for the new 1 Item = 1 Prefix System. - * - * @param aUnlocalized The Unlocalized Name of this Item. - * @param aGeneratedPrefix The OreDict Prefix you want to have generated. - * @param aIconSetIndex The TextureSet Index to be used. -1 for Defaulting to the Data contained in the Prefix. - * (this is only to be used for selecting the Icon in getIconContainer, nothing else) - */ - public GT_MetaGenerated_Item_X01(String aUnlocalized, OrePrefixes aGeneratedPrefix, int aIconSetIndex) { - super(aUnlocalized, (short) 32000, (short) 766); - mPrefix = aGeneratedPrefix; - mIconSetIndex = aIconSetIndex >= 0 ? aIconSetIndex - : aGeneratedPrefix.mTextureIndex >= 0 ? aGeneratedPrefix.mTextureIndex : 0; - - for (int i = 0; i < GregTech_API.sGeneratedMaterials.length; i++) { - OrePrefixes tPrefix = mPrefix; - if (tPrefix == null) continue; - Materials tMaterial = GregTech_API.sGeneratedMaterials[i]; - if (tMaterial == null) continue; - if (mPrefix.doGenerateItem(tMaterial)) { - ItemStack tStack = new ItemStack(this, 1, i); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName(tStack) + ".name", - GT_LanguageManager.i18nPlaceholder ? getDefaultLocalizationFormat(tPrefix, tMaterial, i) - : getDefaultLocalization(tPrefix, tMaterial, i)); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName(tStack) + ".tooltip", - tMaterial.getToolTip(tPrefix.mMaterialAmount / M)); - String tOreName = getOreDictString(tPrefix, tMaterial); - tPrefix = OrePrefixes.getOrePrefix(tOreName); - if (tPrefix != null && tPrefix.mIsUnificatable) { - GT_OreDictUnificator.set(tPrefix, OrePrefixes.getMaterial(tOreName, tPrefix), tStack); - } else { - GT_OreDictUnificator.registerOre(tOreName, tStack); - } - } - } - } - - /* ---------- OVERRIDEABLE FUNCTIONS ---------- */ - - /** - * @param aPrefix the OreDict Prefix - * @param aMaterial the Material - * @param aMetaData a Index from [0 - 31999] - * @return the Localized Name when default LangFiles are used. - */ - public String getDefaultLocalization(OrePrefixes aPrefix, Materials aMaterial, int aMetaData) { - return aPrefix.getDefaultLocalNameForItem(aMaterial); - } - - /** - * @param aPrefix the OreDict Prefix - * @param aMaterial the Material - * @param aMetaData a Index from [0 - 31999] - * @return the Localized Name Format when default LangFiles are used. - */ - public String getDefaultLocalizationFormat(OrePrefixes aPrefix, Materials aMaterial, int aMetaData) { - return aPrefix.getDefaultLocalNameFormatForItem(aMaterial); - } - - /** - * @param aPrefix always != null - * @param aMaterial always != null - * @param aDoShowAllItems this is the Configuration Setting of the User, if he wants to see all the Stuff like Tiny - * Dusts or Crushed Ores as well. - * @return if this Item should be visible in NEI or Creative - */ - public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) { - return true; - } - - /** - * @return the name of the Item to be registered at the OreDict. - */ - public String getOreDictString(OrePrefixes aPrefix, Materials aMaterial) { - return aPrefix.get(aMaterial) - .toString(); - } - - public IIconContainer getIconContainer(int aMetaData, Materials aMaterial) { - return aMaterial.mIconSet.mTextures[mIconSetIndex]; - } - - /* ---------- INTERNAL OVERRIDES ---------- */ - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - String aName = super.getItemStackDisplayName(aStack); - int aDamage = aStack.getItemDamage(); - if (aDamage < 32000 && aDamage >= 0) return Materials.getLocalizedNameForItem(aName, aDamage % 1000); - return aName; - } - - @Override - public ItemStack getContainerItem(ItemStack aStack) { - int aMetaData = aStack.getItemDamage(); - if (aMetaData < GregTech_API.sGeneratedMaterials.length && aMetaData >= 0) { - Materials aMaterial = GregTech_API.sGeneratedMaterials[aMetaData]; - if (aMaterial != null && aMaterial != Materials.Empty && aMaterial != Materials._NULL) { - return GT_Utility.copyAmount(1, mPrefix.mContainerItem); - } - } - return null; - } - - @Override - public short[] getRGBa(ItemStack aStack) { - int aMetaData = getDamage(aStack); - return aMetaData < GregTech_API.sGeneratedMaterials.length - && GregTech_API.sGeneratedMaterials[aMetaData] != null ? GregTech_API.sGeneratedMaterials[aMetaData].mRGBa - : Materials._NULL.mRGBa; - } - - @Override - public final IIconContainer getIconContainer(int aMetaData) { - return aMetaData < GregTech_API.sGeneratedMaterials.length - && GregTech_API.sGeneratedMaterials[aMetaData] != null - ? getIconContainer(aMetaData, GregTech_API.sGeneratedMaterials[aMetaData]) - : null; - } - - @Override - @SideOnly(Side.CLIENT) - public final void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { - for (int i = 0; i < GregTech_API.sGeneratedMaterials.length; i++) - if (mPrefix.doGenerateItem(GregTech_API.sGeneratedMaterials[i]) && doesShowInCreative( - mPrefix, - GregTech_API.sGeneratedMaterials[i], - GregTech_API.sDoShowAllItemsInCreative)) { - ItemStack tStack = new ItemStack(this, 1, i); - isItemStackUsable(tStack); - aList.add(tStack); - } - super.getSubItems(aItem, aCreativeTab, aList); - } - - @Override - public final IIcon getIconFromDamage(int aMetaData) { - if (aMetaData < 0) return null; - if (aMetaData < GregTech_API.sGeneratedMaterials.length) { - Materials tMaterial = GregTech_API.sGeneratedMaterials[aMetaData]; - if (tMaterial == null) return null; - IIconContainer tIcon = getIconContainer(aMetaData, tMaterial); - if (tIcon != null) return tIcon.getIcon(); - return null; - } - return aMetaData >= mOffset && aMetaData - mOffset < mIconList.length ? mIconList[aMetaData - mOffset][0] - : null; - } - - @Override - public int getItemStackLimit(ItemStack aStack) { - return getDamage(aStack) < mOffset ? Math.min(super.getItemStackLimit(aStack), mPrefix.mDefaultStackSize) - : super.getItemStackLimit(aStack); - } - - @Override - public int getItemEnchantability() { - return 0; - } - - @Override - public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) { - return false; - } - - @Override - public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) { - return false; - } -} diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X32.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X32.java deleted file mode 100644 index c344397e4e..0000000000 --- a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item_X32.java +++ /dev/null @@ -1,225 +0,0 @@ -package gregtech.api.items; - -import static gregtech.api.enums.GT_Values.M; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.render.items.GT_GeneratedMaterial_Renderer; - -/** - * @author Gregorius Techneticies - *

- * One Item for everything! - *

- * This brilliant Item Class is used for automatically generating all possible variations of Material Items, - * like Dusts, Ingots, Gems, Plates and similar. It saves me a ton of work, when adding Items, because I always - * have to make a new Item SubType for each OreDict Prefix, when adding a new Material. - *

- * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom - * defined, just to save space and MetaData. - *

- * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike - * Item. - */ -public abstract class GT_MetaGenerated_Item_X32 extends GT_MetaGenerated_Item { - - protected final OrePrefixes[] mGeneratedPrefixList; - - /** - * Creates the Item using these Parameters. - * - * @param aUnlocalized The Unlocalized Name of this Item. - * @param aGeneratedPrefixList The OreDict Prefixes you want to have generated. - */ - public GT_MetaGenerated_Item_X32(String aUnlocalized, OrePrefixes... aGeneratedPrefixList) { - super(aUnlocalized, (short) 32000, (short) 766); - mGeneratedPrefixList = Arrays.copyOf(aGeneratedPrefixList, 32); - - for (int i = 0; i < 32000; i++) { - OrePrefixes tPrefix = mGeneratedPrefixList[i / 1000]; - if (tPrefix == null) continue; - if (tPrefix == OrePrefixes.___placeholder___) continue; - Materials tMaterial = GregTech_API.sGeneratedMaterials[i % 1000]; - if (tMaterial == null) continue; - if (doesMaterialAllowGeneration(tPrefix, tMaterial)) { - ItemStack tStack = new ItemStack(this, 1, i); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName(tStack) + ".name", - GT_LanguageManager.i18nPlaceholder ? getDefaultLocalizationFormat(tPrefix, tMaterial, i) - : getDefaultLocalization(tPrefix, tMaterial, i)); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName(tStack) + ".tooltip", - tMaterial.getToolTip(tPrefix.mMaterialAmount / M)); - if (tPrefix.mIsUnificatable) { - GT_OreDictUnificator.set(tPrefix, tMaterial, tStack); - } else { - GT_OreDictUnificator.registerOre(tPrefix.get(tMaterial), tStack); - } - if ((tPrefix == OrePrefixes.stick || tPrefix == OrePrefixes.wireFine || tPrefix == OrePrefixes.ingot) - && (tMaterial == Materials.Lead || tMaterial == Materials.Tin - || tMaterial == Materials.SolderingAlloy)) { - GregTech_API.sSolderingMetalList.add(tStack); - GT_ModHandler.registerBoxableItemToToolBox(tStack); - } - } - } - } - - /* ---------- OVERRIDEABLE FUNCTIONS ---------- */ - - /** - * @return the Color Modulation the Material is going to be rendered with. - */ - @Override - public short[] getRGBa(ItemStack aStack) { - Materials tMaterial = GregTech_API.sGeneratedMaterials[getDamage(aStack) % 1000]; - return tMaterial == null ? Materials._NULL.mRGBa : tMaterial.mRGBa; - } - - /** - * @param aPrefix this can be null, you have to return false in that case - * @param aMaterial this can be null, you have to return false in that case - * @return if this Item should be generated and visible. - */ - public boolean doesMaterialAllowGeneration(OrePrefixes aPrefix, Materials aMaterial) { - // You have to check for at least these Conditions in every Case! So add a super Call like the following for - // this before executing your Code: - // if (!super.doesMaterialAllowGeneration(aPrefix, aMaterial)) return false; - return aPrefix != null && aPrefix.doGenerateItem(aMaterial); - } - - /* ---------- OVERRIDEABLE FUNCTIONS ---------- */ - - /** - * @param aPrefix the OreDict Prefix - * @param aMaterial the Material - * @param aMetaData a Index from [0 - 31999] - * @return the Localized Name when default LangFiles are used. - */ - public String getDefaultLocalization(OrePrefixes aPrefix, Materials aMaterial, int aMetaData) { - return aPrefix.getDefaultLocalNameForItem(aMaterial); - } - - /** - * @param aPrefix the OreDict Prefix - * @param aMaterial the Material - * @param aMetaData a Index from [0 - 31999] - * @return the Localized Name Format when default LangFiles are used. - */ - public String getDefaultLocalizationFormat(OrePrefixes aPrefix, Materials aMaterial, int aMetaData) { - return aPrefix.getDefaultLocalNameFormatForItem(aMaterial); - } - - /** - * @param aMetaData a Index from [0 - 31999] - * @param aMaterial the Material - * @return an Icon Container for the Item Display. - */ - public final IIconContainer getIconContainer(int aMetaData, Materials aMaterial) { - return mGeneratedPrefixList[aMetaData / 1000] != null - && mGeneratedPrefixList[aMetaData / 1000].mTextureIndex >= 0 - ? aMaterial.mIconSet.mTextures[mGeneratedPrefixList[aMetaData / 1000].mTextureIndex] - : null; - } - - /** - * @param aPrefix always != null - * @param aMaterial always != null - * @param aDoShowAllItems this is the Configuration Setting of the User, if he wants to see all the Stuff like Tiny - * Dusts or Crushed Ores as well. - * @return if this Item should be visible in NEI or Creative - */ - public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) { - return true; - } - - /* ---------- INTERNAL OVERRIDES ---------- */ - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - String aName = super.getItemStackDisplayName(aStack); - int aDamage = aStack.getItemDamage(); - if (aDamage < 32000 && aDamage >= 0) return Materials.getLocalizedNameForItem(aName, aDamage % 1000); - return aName; - } - - @Override - public ItemStack getContainerItem(ItemStack aStack) { - int aDamage = aStack.getItemDamage(); - if (aDamage < 32000 && aDamage >= 0) { - Materials aMaterial = GregTech_API.sGeneratedMaterials[aDamage % 1000]; - if (aMaterial != null && aMaterial != Materials.Empty && aMaterial != Materials._NULL) { - OrePrefixes aPrefix = mGeneratedPrefixList[aDamage / 1000]; - if (aPrefix != null) return GT_Utility.copyAmount(1, aPrefix.mContainerItem); - } - } - return null; - } - - @Override - public final IIconContainer getIconContainer(int aMetaData) { - return GregTech_API.sGeneratedMaterials[aMetaData % 1000] == null ? null - : getIconContainer(aMetaData, GregTech_API.sGeneratedMaterials[aMetaData % 1000]); - } - - @Override - public GT_GeneratedMaterial_Renderer getMaterialRenderer(int aMetaData) { - return GregTech_API.sGeneratedMaterials[aMetaData % 1000] == null ? null - : GregTech_API.sGeneratedMaterials[aMetaData % 1000].renderer; - } - - @Override - @SideOnly(Side.CLIENT) - public final void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { - for (int i = 0; i < 32000; i++) { - OrePrefixes aPrefix = mGeneratedPrefixList[i / 1000]; - Materials aMaterial = GregTech_API.sGeneratedMaterials[i % 1000]; - if (aPrefix != null && aMaterial != null) { - if (doesMaterialAllowGeneration(aPrefix, aMaterial) - && doesShowInCreative(aPrefix, aMaterial, GregTech_API.sDoShowAllItemsInCreative)) { - ItemStack tStack = new ItemStack(this, 1, i); - isItemStackUsable(tStack); - aList.add(tStack); - } - } - } - super.getSubItems(aItem, aCreativeTab, aList); - } - - @Override - public final IIcon getIconFromDamage(int aMetaData) { - if (aMetaData < 0) return null; - if (aMetaData < 32000) { - Materials tMaterial = GregTech_API.sGeneratedMaterials[aMetaData % 1000]; - if (tMaterial == null) return null; - IIconContainer tIcon = getIconContainer(aMetaData, tMaterial); - if (tIcon != null) return tIcon.getIcon(); - return null; - } - return aMetaData - 32000 < mIconList.length ? mIconList[aMetaData - 32000][0] : null; - } - - @Override - public int getItemStackLimit(ItemStack aStack) { - int tDamage = getDamage(aStack); - if (tDamage < 32000 && mGeneratedPrefixList[tDamage / 1000] != null) - return Math.min(super.getItemStackLimit(aStack), mGeneratedPrefixList[tDamage / 1000].mDefaultStackSize); - return super.getItemStackLimit(aStack); - } -} diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java deleted file mode 100644 index cec93169ec..0000000000 --- a/src/main/java/gregtech/api/items/GT_MetaGenerated_Tool.java +++ /dev/null @@ -1,1013 +0,0 @@ -package gregtech.api.items; - -import static gregtech.api.util.GT_Utility.formatNumbers; -import static gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine_Steam.calculateLooseFlow; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; -import java.util.concurrent.ConcurrentHashMap; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.item.EntityMinecart; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumAction; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.stats.AchievementList; -import net.minecraft.stats.StatList; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.IShearable; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.world.BlockEvent; - -import appeng.api.implementations.items.IAEWrench; -import buildcraft.api.tools.IToolWrench; -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.Optional; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import crazypants.enderio.api.tool.ITool; -import forestry.api.arboriculture.IToolGrafter; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enchants.Enchantment_Radioactivity; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; -import gregtech.api.interfaces.IDamagableItem; -import gregtech.api.interfaces.IToolStats; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.tools.GT_Tool_Turbine; -import mods.railcraft.api.core.items.IToolCrowbar; -import mrtjp.projectred.api.IScrewdriver; - -/** - * This is an example on how you can create a Tool ItemStack, in this case a Bismuth Wrench: - * GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01").getToolWithStats(GT_MetaGenerated_Tool_01.WRENCH, 1, - * Materials.Bismuth, Materials.Bismuth, null); - */ -@Optional.InterfaceList( - value = { - @Optional.Interface(iface = "forestry.api.arboriculture.IToolGrafter", modid = "ForestryAPI|arboriculture"), - @Optional.Interface(iface = "mods.railcraft.api.core.items.IToolCrowbar", modid = "RailcraftAPI|items"), - @Optional.Interface(iface = "buildcraft.api.tools.IToolWrench", modid = "BuildCraftAPI|tools"), - @Optional.Interface(iface = "crazypants.enderio.api.tool.ITool", modid = "EnderIOAPI|Tools"), - @Optional.Interface(iface = "mrtjp.projectred.api.IScrewdriver", modid = "ProjRed|Core"), }) -public abstract class GT_MetaGenerated_Tool extends GT_MetaBase_Item - implements IDamagableItem, IToolGrafter, IToolCrowbar, IToolWrench, ITool, IScrewdriver, IAEWrench { - - /** - * All instances of this Item Class are listed here. This gets used to register the Renderer to all Items of this - * Type, if useStandardMetaItemRenderer() returns true. - *

- * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item. - */ - public static final ConcurrentHashMap sInstances = new ConcurrentHashMap<>(); - - /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ - - public final ConcurrentHashMap mToolStats = new ConcurrentHashMap<>(); - - /** - * Creates the Item using these Parameters. - * - * @param aUnlocalized The Unlocalized Name of this Item. - */ - public GT_MetaGenerated_Tool(String aUnlocalized) { - super(aUnlocalized); - setCreativeTab(GregTech_API.TAB_GREGTECH); - setMaxStackSize(1); - sInstances.put(getUnlocalizedName(), this); - } - - /* ---------- FOR ADDING CUSTOM ITEMS INTO THE REMAINING 766 RANGE ---------- */ - - public static final Materials getPrimaryMaterial(ItemStack aStack) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if (aNBT != null) return Materials.getRealMaterial(aNBT.getString("PrimaryMaterial")); - } - return Materials._NULL; - } - - public static final Materials getSecondaryMaterial(ItemStack aStack) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if (aNBT != null) return Materials.getRealMaterial(aNBT.getString("SecondaryMaterial")); - } - return Materials._NULL; - } - - /* ---------- INTERNAL OVERRIDES ---------- */ - - public static final long getToolMaxDamage(ItemStack aStack) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if (aNBT != null) return aNBT.getLong("MaxDamage"); - } - return 0; - } - - public static final long getToolDamage(ItemStack aStack) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if (aNBT != null) return aNBT.getLong("Damage"); - } - return 0; - } - - public static final boolean setToolDamage(ItemStack aStack, long aDamage) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if (aNBT != null) { - aNBT.setLong("Damage", aDamage); - return true; - } - } - return false; - } - - public static final boolean setToolMode(ItemStack aStack, byte aMode) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if (aNBT != null) { - aNBT.setByte("Mode", aMode); - return true; - } - } - return false; - } - - public static final byte getToolMode(ItemStack aStack) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if (aNBT != null) return aNBT.getByte("Mode"); - } - return 0; - } - - /** - * This adds a Custom Item to the ending Range. - * - * @param aID The Id of the assigned Tool Class [0 - 32765] (only even Numbers allowed! Uneven - * ID's are empty electric Items) - * @param aEnglish The Default Localized Name of the created Item - * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no - * ToolTip - * @param aToolStats The Food Value of this Item. Can be null as well. - * @param aOreDictNamesAndAspects The OreDict Names you want to give the Item. Also used to assign Thaumcraft - * Aspects. - * @return An ItemStack containing the newly created Item, but without specific Stats. - */ - public final ItemStack addTool(int aID, String aEnglish, String aToolTip, IToolStats aToolStats, - Object... aOreDictNamesAndAspects) { - if (aToolTip == null) aToolTip = ""; - if (aID >= 0 && aID < 32766 && aID % 2 == 0) { - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + aID + ".name", aEnglish); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + aID + ".tooltip", aToolTip); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + "." + (aID + 1) + ".name", aEnglish + " (Empty)"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + "." + (aID + 1) + ".tooltip", "You need to recharge it"); - mToolStats.put((short) aID, aToolStats); - mToolStats.put((short) (aID + 1), aToolStats); - aToolStats.onStatsAddedToTool(this, aID); - ItemStack rStack = new ItemStack(this, 1, aID); - List tAspects = new ArrayList<>(); - for (Object tOreDictNameOrAspect : aOreDictNamesAndAspects) { - if (tOreDictNameOrAspect instanceof TC_AspectStack) - ((TC_AspectStack) tOreDictNameOrAspect).addToAspectList(tAspects); - else GT_OreDictUnificator.registerOre(tOreDictNameOrAspect, rStack); - } - if (GregTech_API.sThaumcraftCompat != null) - GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); - GT_ModHandler.registerBoxableItemToToolBox(rStack); - return rStack; - } - return null; - } - - /** - * This Function gets an ItemStack Version of this Tool - * - * @param aToolID the ID of the Tool Class - * @param aAmount Amount of Items (well normally you only need 1) - * @param aPrimaryMaterial Primary Material of this Tool - * @param aSecondaryMaterial Secondary (Rod/Handle) Material of this Tool - * @param aElectricArray The Electric Stats of this Tool (or null if not electric) - */ - public final ItemStack getToolWithStats(int aToolID, int aAmount, Materials aPrimaryMaterial, - Materials aSecondaryMaterial, long[] aElectricArray) { - ItemStack rStack = new ItemStack(this, aAmount, aToolID); - IToolStats tToolStats = getToolStats(rStack); - if (tToolStats != null) { - NBTTagCompound tMainNBT = new NBTTagCompound(), tToolNBT = new NBTTagCompound(); - tToolNBT.setByte("Mode", (byte) 0); - if (aPrimaryMaterial != null) { - tToolNBT.setString("PrimaryMaterial", aPrimaryMaterial.mName); - tToolNBT.setLong( - "MaxDamage", - 100L * (long) (aPrimaryMaterial.mDurability * tToolStats.getMaxDurabilityMultiplier())); - } - if (aSecondaryMaterial != null) tToolNBT.setString("SecondaryMaterial", aSecondaryMaterial.mName); - - if (aElectricArray != null) { - tToolNBT.setBoolean("Electric", true); - tToolNBT.setLong("MaxCharge", aElectricArray[0]); - tToolNBT.setLong("Voltage", aElectricArray[1]); - tToolNBT.setLong("Tier", aElectricArray[2]); - tToolNBT.setLong("SpecialData", aElectricArray[3]); - } - - tMainNBT.setTag("GT.ToolStats", tToolNBT); - rStack.setTagCompound(tMainNBT); - } - isItemStackUsable(rStack); - return rStack; - } - - /** - * Called by the Block Harvesting Event within the GT_Proxy - */ - @Mod.EventHandler - public void onHarvestBlockEvent(ArrayList aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, - int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { - IToolStats tStats = getToolStats(aStack); - if (isItemStackUsable(aStack) && getDigSpeed(aStack, aBlock, aMetaData) > 0.0F) doDamage( - aStack, - (long) tStats - .convertBlockDrops(aDrops, aStack, aPlayer, aBlock, aX, aY, aZ, aMetaData, aFortune, aSilkTouch, aEvent) - * tStats.getToolDamagePerDropConversion()); - } - - @Mod.EventHandler - public float onBlockBreakSpeedEvent(float aDefault, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, - int aY, int aZ, byte aMetaData, PlayerEvent.BreakSpeed aEvent) { - IToolStats tStats = getToolStats(aStack); - return tStats == null ? aDefault - : tStats.getMiningSpeed(aBlock, aMetaData, aDefault, aPlayer, aPlayer.worldObj, aX, aY, aZ); - } - - @Override - public boolean onBlockStartBreak(ItemStack aStack, int aX, int aY, int aZ, EntityPlayer aPlayer) { - if (aPlayer.worldObj.isRemote) { - return false; - } - IToolStats tStats = getToolStats(aStack); - Block aBlock = aPlayer.worldObj.getBlock(aX, aY, aZ); - if (tStats.isChainsaw() && (aBlock instanceof IShearable target)) { - if ((target.isShearable(aStack, aPlayer.worldObj, aX, aY, aZ))) { - ArrayList drops = target.onSheared( - aStack, - aPlayer.worldObj, - aX, - aY, - aZ, - EnchantmentHelper.getEnchantmentLevel(Enchantment.fortune.effectId, aStack)); - for (ItemStack stack : drops) { - float f = 0.7F; - double d = itemRand.nextFloat() * f + (1.0F - f) * 0.5D; - double d1 = itemRand.nextFloat() * f + (1.0F - f) * 0.5D; - double d2 = itemRand.nextFloat() * f + (1.0F - f) * 0.5D; - EntityItem entityitem = new EntityItem(aPlayer.worldObj, aX + d, aY + d1, aZ + d2, stack); - entityitem.delayBeforeCanPickup = 10; - aPlayer.worldObj.spawnEntityInWorld(entityitem); - } - aPlayer.addStat(net.minecraft.stats.StatList.mineBlockStatArray[Block.getIdFromBlock(aBlock)], 1); - onBlockDestroyed(aStack, aPlayer.worldObj, aBlock, aX, aY, aZ, aPlayer); - } - return false; - } - return super.onBlockStartBreak(aStack, aX, aY, aZ, aPlayer); - } - - @Override - public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { - IToolStats tStats = getToolStats(aStack); - if (tStats == null || !isItemStackUsable(aStack)) return true; - GT_Utility.doSoundAtClient(tStats.getEntityHitSound(), 1, 1.0F); - if (super.onLeftClickEntity(aStack, aPlayer, aEntity)) return true; - if (aEntity.canAttackWithItem() && !aEntity.hitByEntity(aPlayer)) { - float tMagicDamage = tStats.getMagicDamageAgainstEntity( - aEntity instanceof EntityLivingBase - ? EnchantmentHelper.getEnchantmentModifierLiving(aPlayer, (EntityLivingBase) aEntity) - : 0.0F, - aEntity, - aStack, - aPlayer), - tDamage = tStats.getNormalDamageAgainstEntity( - (float) aPlayer.getEntityAttribute(SharedMonsterAttributes.attackDamage) - .getAttributeValue() + getToolCombatDamage(aStack), - aEntity, - aStack, - aPlayer); - if (tDamage + tMagicDamage > 0.0F) { - boolean tCriticalHit = aPlayer.fallDistance > 0.0F && !aPlayer.onGround - && !aPlayer.isOnLadder() - && !aPlayer.isInWater() - && !aPlayer.isPotionActive(Potion.blindness) - && aPlayer.ridingEntity == null - && aEntity instanceof EntityLivingBase; - if (tCriticalHit && tDamage > 0.0F) tDamage *= 1.5F; - tDamage += tMagicDamage; - if (aEntity.attackEntityFrom(tStats.getDamageSource(aPlayer, aEntity), tDamage)) { - if (aEntity instanceof EntityLivingBase) - aEntity.setFire(EnchantmentHelper.getFireAspectModifier(aPlayer) * 4); - int tKnockcack = (aPlayer.isSprinting() ? 1 : 0) + (aEntity instanceof EntityLivingBase - ? EnchantmentHelper.getKnockbackModifier(aPlayer, (EntityLivingBase) aEntity) - : 0); - if (tKnockcack > 0) { - aEntity.addVelocity( - -MathHelper.sin(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F, - 0.1D, - MathHelper.cos(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F); - aPlayer.motionX *= 0.6D; - aPlayer.motionZ *= 0.6D; - aPlayer.setSprinting(false); - } - if (tCriticalHit) aPlayer.onCriticalHit(aEntity); - if (tMagicDamage > 0.0F) aPlayer.onEnchantmentCritical(aEntity); - if (tDamage >= 18.0F) aPlayer.triggerAchievement(AchievementList.overkill); - aPlayer.setLastAttacker(aEntity); - if (aEntity instanceof EntityLivingBase) - EnchantmentHelper.func_151384_a((EntityLivingBase) aEntity, aPlayer); - EnchantmentHelper.func_151385_b(aPlayer, aEntity); - if (aEntity instanceof EntityLivingBase) - aPlayer.addStat(StatList.damageDealtStat, Math.round(tDamage * 10.0F)); - aEntity.hurtResistantTime = Math - .max(1, tStats.getHurtResistanceTime(aEntity.hurtResistantTime, aEntity)); - aPlayer.addExhaustion(0.3F); - doDamage(aStack, tStats.getToolDamagePerEntityAttack()); - } - } - } - if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem(); - return true; - } - - @Override - public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - IToolStats tStats = getToolStats(aStack); - if (tStats != null && tStats.canBlock()) aPlayer.setItemInUse(aStack, 72000); - return super.onItemRightClick(aStack, aWorld, aPlayer); - } - - @Override - public final int getMaxItemUseDuration(ItemStack aStack) { - return 72000; - } - - @Override - public final EnumAction getItemUseAction(ItemStack aStack) { - IToolStats tStats = getToolStats(aStack); - if (tStats != null && tStats.canBlock()) return EnumAction.block; - return EnumAction.none; - } - - @Override - @SideOnly(Side.CLIENT) - public final void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { - for (int i = 0; i < 32766; i += 2) { - if (getToolStats(new ItemStack(this, 1, i)) != null) { - ItemStack tStack = new ItemStack(this, 1, i); - isItemStackUsable(tStack); - aList.add(tStack); - aList.add(getToolWithStats(i, 1, Materials.Neutronium, Materials.Neutronium, null)); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public final void registerIcons(IIconRegister aIconRegister) { - // - } - - @Override - public final IIcon getIconFromDamage(int aMetaData) { - return null; - } - - @Override - public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - long tMaxDamage = getToolMaxDamage(aStack); - Materials tMaterial = getPrimaryMaterial(aStack); - IToolStats tStats = getToolStats(aStack); - int tOffset = getElectricStats(aStack) != null ? 2 : 1; - if (tStats != null) { - if (tStats instanceof GT_Tool_Turbine) { - - // Durability -> toolMaxDamage - // % Efficiency -> toolCombatDamage -> toolQuality - // Optimal Flow -> toolSpeed - // EU/t -> toolCombatDamage, toolSpeed - // Overflow Tier -> toolQuality - float aBaseEff = (5f + getToolCombatDamage(aStack)) * 1000f; - - // It was noted by IntelliJ that replacing ((GT_MetaGenerated_Tool) aStack.getItem()) with - // GT_MetaGenerated_Tool can have side effects. This refactoring will need tests. - @SuppressWarnings("AccessStaticViaInstance") - float aOptFlow = (Math.max( - Float.MIN_NORMAL, - ((GT_MetaGenerated_Tool) aStack.getItem()).getToolStats(aStack) - .getSpeedMultiplier() - * ((GT_MetaGenerated_Tool) aStack.getItem()).getPrimaryMaterial(aStack).mToolSpeed - * 50F)); - aList.add( - tOffset + 0, - EnumChatFormatting.GRAY + String.format( - transItem("001", "Durability: %s/%s"), - "" + EnumChatFormatting.GREEN + formatNumbers(tMaxDamage - getToolDamage(aStack)) + " ", - " " + formatNumbers(tMaxDamage)) + EnumChatFormatting.GRAY); - aList.add( - tOffset + 1, - EnumChatFormatting.GRAY + String.format( - transItem("002", "%s lvl %s"), - tMaterial.mLocalizedName + EnumChatFormatting.YELLOW, - "" + getHarvestLevel(aStack, "")) + EnumChatFormatting.GRAY); - aList.add( - tOffset + 2, - EnumChatFormatting.WHITE - + String.format( - transItem("005", "Turbine Efficiency: %s"), - "" + EnumChatFormatting.BLUE + (50.0F + (10.0F * getToolCombatDamage(aStack)))) - + "%" - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 3, - EnumChatFormatting.WHITE + String.format( - transItem("006", "Optimal Steam flow: %s L/t"), - "" + EnumChatFormatting.GOLD - + formatNumbers( - GT_Utility.safeInt( - (long) (Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed - * (1000 * getPrimaryMaterial(aStack).mSteamMultiplier / 20))))) - + EnumChatFormatting.GRAY)); - aList.add( - tOffset + 4, - EnumChatFormatting.WHITE + String.format( - transItem("900", "Energy from Optimal Steam Flow: %s EU/t"), - "" + EnumChatFormatting.GOLD - + formatNumbers( - GT_Utility.safeInt( - (long) (Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed - * (1000 * getPrimaryMaterial(aStack).mSteamMultiplier / 20)) - * (50.0F + (10.0F * getToolCombatDamage(aStack))) - / 200))) - + EnumChatFormatting.GRAY)); - { - float[] calculatedFlow = calculateLooseFlow(aOptFlow, aBaseEff); - float aOptFlowLoose = calculatedFlow[0]; - float aBaseEffLoose = calculatedFlow[1]; - - aList.add( - tOffset + 5, - EnumChatFormatting.AQUA + String.format( - transItem("500", "Turbine Efficiency (Loose): %s"), - "" + EnumChatFormatting.BLUE + (long) aBaseEffLoose / 100 + "%" + EnumChatFormatting.GRAY)); - aList.add( - tOffset + 6, - EnumChatFormatting.AQUA + String.format( - transItem("501", "Optimal Steam flow (Loose): %s L/t"), - "" + EnumChatFormatting.GOLD - + formatNumbers(((long) aOptFlowLoose * getPrimaryMaterial(aStack).mSteamMultiplier)) - + EnumChatFormatting.GRAY)); - aList.add( - tOffset + 7, - EnumChatFormatting.AQUA + String.format( - transItem("901", "Energy from Optimal Steam Flow (Loose): %s EU/t"), - "" + EnumChatFormatting.GOLD - + formatNumbers( - ((long) aOptFlowLoose * getPrimaryMaterial(aStack).mSteamMultiplier / 10000) - * ((long) aBaseEffLoose / 2)) - + EnumChatFormatting.GRAY)); - aList.add( - tOffset + 8, - EnumChatFormatting.GRAY + "(Superheated Steam EU values are 2x those of Steam)"); - } - aList.add( - tOffset + 9, - EnumChatFormatting.WHITE + String.format( - transItem("902", "Optimal SC Steam flow: %s L/t"), - "" + EnumChatFormatting.GOLD - + formatNumbers( - GT_Utility.safeInt( - (long) (Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed - * (1000f / 20f))))) - + EnumChatFormatting.GRAY)); - aList.add( - tOffset + 10, - EnumChatFormatting.WHITE + String.format( - transItem("903", "Energy from Optimal SC Steam Flow: %s EU/t"), - "" + EnumChatFormatting.GOLD - + formatNumbers( - GT_Utility.safeInt( - (long) (Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed - * (1000f / 20f)) - * (50.0F + (10.0F * getToolCombatDamage(aStack)))))) - + EnumChatFormatting.GRAY)); - aList.add( - tOffset + 11, - EnumChatFormatting.LIGHT_PURPLE + String.format( - transItem("007", "Energy from Optimal Gas Flow: %s EU/t"), - "" + EnumChatFormatting.GOLD - + formatNumbers( - GT_Utility.safeInt( - (long) (Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed - * 50 - * getPrimaryMaterial(aStack).mGasMultiplier) - * (50.0F + (10.0F * getToolCombatDamage(aStack))) - / 100))) - + EnumChatFormatting.GRAY)); - aList.add( - tOffset + 12, - EnumChatFormatting.LIGHT_PURPLE + String.format( - transItem("008", "Energy from Optimal Plasma Flow: %s EU/t"), - "" + EnumChatFormatting.GOLD - + formatNumbers( - GT_Utility.safeInt( - (long) (Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed - * 2000 - * getPrimaryMaterial(aStack).mPlasmaMultiplier) - * (50.0F + (10.0F * getToolCombatDamage(aStack))) - * (1.05 / 100)))) - + EnumChatFormatting.GRAY)); - aList.add( - tOffset + 14, - EnumChatFormatting.GRAY + "(EU/t values include efficiency and are not 100% accurate)"); - int toolQualityLevel = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolQuality; - int overflowMultiplier = 0; - if (toolQualityLevel >= 6) { - overflowMultiplier = 3; - } else if (toolQualityLevel >= 3) { - overflowMultiplier = 2; - } else { - overflowMultiplier = 1; - } - aList.add( - tOffset + 13, - EnumChatFormatting.LIGHT_PURPLE + String.format( - transItem("502", "Overflow Efficiency Tier: %s"), - "" + EnumChatFormatting.GOLD + overflowMultiplier + EnumChatFormatting.GRAY)); - - } else { - aList.add( - tOffset, - EnumChatFormatting.WHITE + String.format( - transItem("001", "Durability: %s/%s"), - "" + EnumChatFormatting.GREEN + formatNumbers(tMaxDamage - getToolDamage(aStack)) + " ", - " " + formatNumbers(tMaxDamage)) + EnumChatFormatting.GRAY); - aList.add( - tOffset + 1, - EnumChatFormatting.WHITE + String.format( - transItem("002", "%s lvl %s"), - tMaterial.mLocalizedName + EnumChatFormatting.YELLOW, - "" + getHarvestLevel(aStack, "")) + EnumChatFormatting.GRAY); - aList.add( - tOffset + 2, - EnumChatFormatting.WHITE + String.format( - transItem("003", "Attack Damage: %s"), - "" + EnumChatFormatting.BLUE + getToolCombatDamage(aStack)) + EnumChatFormatting.GRAY); - aList.add( - tOffset + 3, - EnumChatFormatting.WHITE - + String.format( - transItem("004", "Mining Speed: %s"), - "" + EnumChatFormatting.GOLD - + Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed)) - + EnumChatFormatting.GRAY); - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if (aNBT != null && aNBT.hasKey("Heat")) { - int tHeat = aNBT.getInteger("Heat"); - long tWorldTime = aPlayer.getEntityWorld() - .getWorldTime(); - if (aNBT.hasKey("HeatTime")) { - long tHeatTime = aNBT.getLong("HeatTime"); - if (tWorldTime > (tHeatTime + 10)) { - tHeat = (int) (tHeat - ((tWorldTime - tHeatTime) / 10)); - if (tHeat < 300 && tHeat > -10000) tHeat = 300; - } - aNBT.setLong("HeatTime", tWorldTime); - if (tHeat > -10000) aNBT.setInteger("Heat", tHeat); - } - - aList.add( - tOffset + 3, - EnumChatFormatting.RED + "Heat: " - + aNBT.getInteger("Heat") - + " K" - + EnumChatFormatting.GRAY); - } - } - } - } - } - - @Override - public Long[] getFluidContainerStats(ItemStack aStack) { - return null; - } - - @Override - public Long[] getElectricStats(ItemStack aStack) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if (aNBT != null && aNBT.getBoolean("Electric")) return new Long[] { aNBT.getLong("MaxCharge"), - aNBT.getLong("Voltage"), aNBT.getLong("Tier"), aNBT.getLong("SpecialData") }; - } - return null; - } - - public float getToolCombatDamage(ItemStack aStack) { - IToolStats tStats = getToolStats(aStack); - if (tStats == null) return 0; - return tStats.getBaseDamage() + getPrimaryMaterial(aStack).mToolQuality; - } - - @Override - public final boolean doDamageToItem(ItemStack aStack, int aVanillaDamage) { - return doDamage(aStack, aVanillaDamage * 100L); - } - - public final boolean doDamage(ItemStack aStack, long aAmount) { - if (!isItemStackUsable(aStack)) return false; - Long[] tElectric = getElectricStats(aStack); - if (tElectric == null) { - long tNewDamage = getToolDamage(aStack) + aAmount; - setToolDamage(aStack, tNewDamage); - if (tNewDamage >= getToolMaxDamage(aStack)) { - IToolStats tStats = getToolStats(aStack); - if (tStats == null || GT_Utility.setStack(aStack, tStats.getBrokenItem(aStack)) == null) { - if (tStats != null) GT_Utility.doSoundAtClient(tStats.getBreakingSound(), 1, 1.0F); - if (aStack.stackSize > 0) aStack.stackSize--; - } - } - return true; - } - if (use(aStack, (int) aAmount, null)) { - if (java.util.concurrent.ThreadLocalRandom.current() - .nextInt(0, 25) == 0) { - long tNewDamage = getToolDamage(aStack) + aAmount; - setToolDamage(aStack, tNewDamage); - if (tNewDamage >= getToolMaxDamage(aStack)) { - IToolStats tStats = getToolStats(aStack); - if (tStats == null || GT_Utility.setStack(aStack, tStats.getBrokenItem(aStack)) == null) { - if (tStats != null) GT_Utility.doSoundAtClient(tStats.getBreakingSound(), 1, 1.0F); - if (aStack.stackSize > 0) aStack.stackSize--; - } - } - } - return true; - } - return false; - } - - @Override - public float getDigSpeed(ItemStack aStack, Block aBlock, int aMetaData) { - if (!isItemStackUsable(aStack)) return 0.0F; - IToolStats tStats = getToolStats(aStack); - if (tStats == null || Math.max(0, getHarvestLevel(aStack, "")) < aBlock.getHarvestLevel(aMetaData)) return 0.0F; - return tStats.isMinableBlock(aBlock, (byte) aMetaData) - ? Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) - : 0.0F; - } - - @Override - public final boolean canHarvestBlock(Block aBlock, ItemStack aStack) { - return getDigSpeed(aStack, aBlock, (byte) 0) > 0.0F; - } - - @Override - public final int getHarvestLevel(ItemStack aStack, String aToolClass) { - IToolStats tStats = getToolStats(aStack); - return tStats == null ? -1 : tStats.getBaseQuality() + getPrimaryMaterial(aStack).mToolQuality; - } - - @Override - public boolean onBlockDestroyed(ItemStack aStack, World aWorld, Block aBlock, int aX, int aY, int aZ, - EntityLivingBase aPlayer) { - if (!isItemStackUsable(aStack)) return false; - IToolStats tStats = getToolStats(aStack); - if (tStats == null) return false; - GT_Utility.doSoundAtClient(tStats.getMiningSound(), 1, 1.0F); - doDamage( - aStack, - (int) Math.max(1, aBlock.getBlockHardness(aWorld, aX, aY, aZ) * tStats.getToolDamagePerBlockBreak())); - return getDigSpeed(aStack, aBlock, aWorld.getBlockMetadata(aX, aY, aZ)) > 0.0F; - } - - @Override - public final ItemStack getContainerItem(ItemStack aStack) { - return getContainerItem(aStack, true); - } - - @Override - public final boolean hasContainerItem(ItemStack aStack) { - return getContainerItem(aStack, false) != null; - } - - private ItemStack getContainerItem(ItemStack aStack, boolean playSound) { - if (!isItemStackUsable(aStack)) return null; - aStack = GT_Utility.copyAmount(1, aStack); - IToolStats tStats = getToolStats(aStack); - if (tStats == null) return null; - doDamage(aStack, tStats.getToolDamagePerContainerCraft()); - aStack = aStack.stackSize > 0 ? aStack : null; - if (playSound && GT_Mod.gregtechproxy.mTicksUntilNextCraftSound <= 0) { - GT_Mod.gregtechproxy.mTicksUntilNextCraftSound = 10; - String sound = (aStack == null) ? tStats.getBreakingSound() : tStats.getCraftingSound(); - GT_Utility.doSoundAtClient(sound, 1, 1.0F); - } - return aStack; - } - - public IToolStats getToolStats(ItemStack aStack) { - isItemStackUsable(aStack); - return getToolStatsInternal(aStack); - } - - public byte getToolMaxMode(ItemStack aStack) { - IToolStats stats = getToolStats(aStack); - if (stats != null) { - return stats.getMaxMode(); - } - return 1; - } - - private IToolStats getToolStatsInternal(ItemStack aStack) { - return aStack == null ? null : mToolStats.get((short) aStack.getItemDamage()); - } - - @Override - public float getSaplingModifier(ItemStack aStack, World aWorld, EntityPlayer aPlayer, int aX, int aY, int aZ) { - IToolStats tStats = getToolStats(aStack); - return tStats != null && tStats.isGrafter() ? Math.min(100.0F, (1 + getHarvestLevel(aStack, "")) * 20.0F) - : 0.0F; - } - - @Override - public boolean canWhack(EntityPlayer aPlayer, ItemStack aStack, int aX, int aY, int aZ) { - if (!isItemStackUsable(aStack)) return false; - IToolStats tStats = getToolStats(aStack); - return tStats != null && tStats.isCrowbar(); - } - - @Override - public void onWhack(EntityPlayer aPlayer, ItemStack aStack, int aX, int aY, int aZ) { - IToolStats tStats = getToolStats(aStack); - if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack()); - } - - @Override - public boolean canWrench(EntityPlayer player, int x, int y, int z) { - if (player == null) return false; - return canWrench(player.getHeldItem(), player, x, y, z); - } - - @Override - public boolean canWrench(ItemStack wrench, EntityPlayer player, int x, int y, int z) { - if (wrench == null) return false; - if (!isItemStackUsable(wrench)) return false; - IToolStats tStats = getToolStats(player.getCurrentEquippedItem()); - return tStats != null && tStats.isWrench(); - } - - @Override - public void wrenchUsed(EntityPlayer player, int x, int y, int z) { - if (player == null) return; - if (player.getCurrentEquippedItem() == null) return; - IToolStats tStats = getToolStats(player.getCurrentEquippedItem()); - if (tStats != null) doDamage(player.getCurrentEquippedItem(), tStats.getToolDamagePerEntityAttack()); - } - - @Override - public boolean canUse(ItemStack stack, EntityPlayer player, int x, int y, int z) { - return canWrench(player, x, y, z); - } - - // ProjectRed screwdriver - @Override - public boolean canUse(EntityPlayer player, ItemStack stack) { - if (player == null) return false; - if (GT_Utility.isStackInvalid(stack) || !isItemStackUsable(stack)) return false; - IToolStats tStats = getToolStats(stack); - return tStats != null && tStats.isScrewdriver(); - } - - @Override - public void damageScrewdriver(EntityPlayer player, ItemStack stack) { - if (player == null) return; - if (GT_Utility.isStackInvalid(stack) || !isItemStackUsable(stack)) return; - IToolStats tStats = getToolStats(stack); - if (tStats != null) doDamage(stack, tStats.getToolDamagePerEntityAttack()); - } - - @Override - public void used(ItemStack stack, EntityPlayer player, int x, int y, int z) { - wrenchUsed(player, x, y, z); - } - - @Override - public boolean shouldHideFacades(ItemStack stack, EntityPlayer player) { - if (player == null) return false; - if (player.getCurrentEquippedItem() == null) return false; - if (!isItemStackUsable(player.getCurrentEquippedItem())) return false; - IToolStats tStats = getToolStats(player.getCurrentEquippedItem()); - return tStats.isWrench(); - } - - @Override - public boolean canLink(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) { - if (!isItemStackUsable(aStack)) return false; - IToolStats tStats = getToolStats(aStack); - return tStats != null && tStats.isCrowbar(); - } - - @Override - public void onLink(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) { - IToolStats tStats = getToolStats(aStack); - if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack()); - } - - @Override - public boolean canBoost(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) { - if (!isItemStackUsable(aStack)) return false; - IToolStats tStats = getToolStats(aStack); - return tStats != null && tStats.isCrowbar(); - } - - @Override - public void onBoost(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) { - IToolStats tStats = getToolStats(aStack); - if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack()); - } - - @Override - public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - IToolStats tStats = getToolStats(aStack); - if (tStats != null && aPlayer != null) tStats.onToolCrafted(aStack, aPlayer); - super.onCreated(aStack, aWorld, aPlayer); - } - - @Override - public final boolean doesContainerItemLeaveCraftingGrid(ItemStack aStack) { - return false; - } - - @Override - public final int getItemStackLimit(ItemStack aStack) { - return 1; - } - - @Override - public boolean isFull3D() { - return true; - } - - @Override - public boolean isItemStackUsable(ItemStack aStack) { - IToolStats tStats = getToolStatsInternal(aStack); - if (aStack.getItemDamage() % 2 != 0 || tStats == null) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) aNBT.removeTag("ench"); - return false; - } - Materials aMaterial = getPrimaryMaterial(aStack); - HashMap tMap = new HashMap<>(), tResult = new HashMap<>(); - if (aMaterial.mEnchantmentTools != null) { - tMap.put(aMaterial.mEnchantmentTools.effectId, (int) aMaterial.mEnchantmentToolsLevel); - if (aMaterial.mEnchantmentTools == Enchantment.fortune) - tMap.put(Enchantment.looting.effectId, (int) aMaterial.mEnchantmentToolsLevel); - if (aMaterial.mEnchantmentTools == Enchantment.knockback) - tMap.put(Enchantment.power.effectId, (int) aMaterial.mEnchantmentToolsLevel); - if (aMaterial.mEnchantmentTools == Enchantment.fireAspect) - tMap.put(Enchantment.flame.effectId, (int) aMaterial.mEnchantmentToolsLevel); - } - Enchantment[] tEnchants = tStats.getEnchantments(aStack); - int[] tLevels = tStats.getEnchantmentLevels(aStack); - for (int i = 0; i < tEnchants.length; i++) if (tLevels[i] > 0) { - Integer tLevel = tMap.get(tEnchants[i].effectId); - tMap.put( - tEnchants[i].effectId, - tLevel == null ? tLevels[i] : tLevel == tLevels[i] ? tLevel + 1 : Math.max(tLevel, tLevels[i])); - } - for (Entry tEntry : tMap.entrySet()) { - if (tEntry.getKey() == 33 || (tEntry.getKey() == 20 && tEntry.getValue() > 2) - || tEntry.getKey() == Enchantment_Radioactivity.INSTANCE.effectId) - tResult.put(tEntry.getKey(), tEntry.getValue()); - else switch (Enchantment.enchantmentsList[tEntry.getKey()].type) { - case weapon: - if (tStats.isWeapon()) tResult.put(tEntry.getKey(), tEntry.getValue()); - break; - case all: - tResult.put(tEntry.getKey(), tEntry.getValue()); - break; - case armor: - case armor_feet: - case armor_head: - case armor_legs: - case armor_torso: - break; - case bow: - if (tStats.isRangedWeapon()) tResult.put(tEntry.getKey(), tEntry.getValue()); - break; - case breakable: - break; - case fishing_rod: - break; - case digger: - if (tStats.isMiningTool()) tResult.put(tEntry.getKey(), tEntry.getValue()); - break; - } - } - EnchantmentHelper.setEnchantments(tResult, aStack); - return true; - } - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - - String result = super.getItemStackDisplayName(aStack); - IToolStats toolStats = getToolStats(aStack); - if (toolStats != null) { - String toolName = toolStats.getToolTypeName(); - if (toolName == null) return result; - - String key = "gt." + toolName + ".mode." + getToolMode(aStack); - if (StatCollector.canTranslate(key)) { - result += " (" + StatCollector.translateToLocal(key) + ")"; - } - } - return result; - - } - - @Override - public short getChargedMetaData(ItemStack aStack) { - return (short) (aStack.getItemDamage() - (aStack.getItemDamage() % 2)); - } - - @Override - public short getEmptyMetaData(ItemStack aStack) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) aNBT.removeTag("ench"); - return (short) (aStack.getItemDamage() + 1 - (aStack.getItemDamage() % 2)); - } - - @Override - public int getItemEnchantability() { - return 0; - } - - @Override - public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) { - return false; - } - - @Override - public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) { - return false; - } -} diff --git a/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java b/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java deleted file mode 100644 index 2509cf6261..0000000000 --- a/src/main/java/gregtech/api/items/GT_RadioactiveCellIC_Item.java +++ /dev/null @@ -1,219 +0,0 @@ -package gregtech.api.items; - -import java.util.ArrayList; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -import gregtech.api.enums.GT_Values; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Utility; -import ic2.api.reactor.IReactor; -import ic2.api.reactor.IReactorComponent; -import ic2.core.IC2Potion; -import ic2.core.init.MainConfig; -import ic2.core.util.ConfigUtil; - -public class GT_RadioactiveCellIC_Item extends GT_RadioactiveCell_Item implements IReactorComponent { - - private static final int MYSTERIOUS_MULTIPLIER_HEAT = 4; - public final int numberOfCells; - public final float sEnergy; - public final int sRadiation; - public final float sHeat; - public final ItemStack sDepleted; - public final boolean sMox; - - public GT_RadioactiveCellIC_Item(String aUnlocalized, String aEnglish, int aCellcount, int maxDamage, float aEnergy, - int aRadiation, float aHeat, ItemStack aDepleted, boolean aMox) { - super(aUnlocalized, aEnglish, aCellcount); - setMaxStackSize(64); - this.maxDmg = maxDamage; - this.numberOfCells = aCellcount; - this.sEnergy = aEnergy; - this.sRadiation = aRadiation; - this.sHeat = aHeat; - this.sDepleted = aDepleted; - this.sMox = aMox; - if (aDepleted != null && aEnergy > 0 && aHeat > 0) { - // avoid adding depleted cells to recipe map - - int pulses = aCellcount / 2 + 1; - - // for the mysterious constant 5.0f, - // see ic2.core.block.reactor.tileentity.TileEntityNuclearReactorElectric.getOfferedEnergy - // don't ask, just accept - float nukePowerMult = 5.0f * ConfigUtil.getFloat(MainConfig.get(), "balance/energy/generator/nuclear"); - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(this)) - .itemOutputs(aDepleted) - .setNEIDesc( - aMox ? "MOX Model" : "Uranium Model", - "Neutron Pulse: " + aCellcount, - aCellcount == 1 - ? String.format("Heat: %.1f * n1 * (n1 + 1)", (aHeat * MYSTERIOUS_MULTIPLIER_HEAT) / 2f) - : String.format( - "Heat: %.1f * (%d + n1) * (%d + n1)", - (aHeat * MYSTERIOUS_MULTIPLIER_HEAT) * aCellcount / 2f, - aCellcount, - aCellcount + 1), - String.format( - "Energy: %.1f + n2 * %.1f EU/t", - aEnergy * aCellcount * pulses * nukePowerMult, - aEnergy * nukePowerMult)) - .duration(0) - .eut(0) - .addTo(RecipeMaps.ic2NuclearFakeRecipes); - } - } - - private static int checkPulseable(IReactor reactor, int x, int y, ItemStack me, int mex, int mey, boolean heatrun) { - ItemStack other = reactor.getItemAt(x, y); - if ((other != null) && ((other.getItem() instanceof IReactorComponent)) - && (((IReactorComponent) other.getItem()) - .acceptUraniumPulse(reactor, other, me, x, y, mex, mey, heatrun))) { - return 1; - } - return 0; - } - - @Override - public void processChamber(IReactor reactor, ItemStack yourStack, int x, int y, boolean heatrun) { - if (!reactor.produceEnergy()) { - return; - } - for (int iteration = 0; iteration < this.numberOfCells; iteration++) { - int pulses = 1 + this.numberOfCells / 2; - if (!heatrun) { - for (int i = 0; i < pulses; i++) { - acceptUraniumPulse(reactor, yourStack, yourStack, x, y, x, y, heatrun); - } - checkPulseable(reactor, x - 1, y, yourStack, x, y, heatrun); - checkPulseable(reactor, x + 1, y, yourStack, x, y, heatrun); - checkPulseable(reactor, x, y - 1, yourStack, x, y, heatrun); - checkPulseable(reactor, x, y + 1, yourStack, x, y, heatrun); - } else { - pulses += checkPulseable(reactor, x - 1, y, yourStack, x, y, heatrun) - + checkPulseable(reactor, x + 1, y, yourStack, x, y, heatrun) - + checkPulseable(reactor, x, y - 1, yourStack, x, y, heatrun) - + checkPulseable(reactor, x, y + 1, yourStack, x, y, heatrun); - - // int heat = sumUp(pulses) * 4; - - int heat = triangularNumber(pulses) * MYSTERIOUS_MULTIPLIER_HEAT; - - heat = getFinalHeat(reactor, yourStack, x, y, heat); - - ArrayList heatAcceptors = new ArrayList<>(); - checkHeatAcceptor(reactor, x - 1, y, heatAcceptors); - checkHeatAcceptor(reactor, x + 1, y, heatAcceptors); - checkHeatAcceptor(reactor, x, y - 1, heatAcceptors); - checkHeatAcceptor(reactor, x, y + 1, heatAcceptors); - heat = Math.round(heat * sHeat); - while ((heatAcceptors.size() > 0) && (heat > 0)) { - - int dheat = heat / heatAcceptors.size(); - heat -= dheat; - dheat = ((IReactorComponent) heatAcceptors.get(0).stack.getItem()).alterHeat( - reactor, - heatAcceptors.get(0).stack, - heatAcceptors.get(0).x, - heatAcceptors.get(0).y, - dheat); - heat += dheat; - heatAcceptors.remove(0); - } - if (heat > 0) { - reactor.addHeat(heat); - } - } - } - if (getDamageOfStack(yourStack) >= getMaxDamageEx() - 1) { - reactor.setItemAt(x, y, sDepleted.copy()); - } else if (heatrun) { - damageItemStack(yourStack, 1); - } - } - - protected int getFinalHeat(IReactor reactor, ItemStack stack, int x, int y, int heat) { - if (sMox && reactor.isFluidCooled()) { - float breedereffectiveness = (float) reactor.getHeat() / (float) reactor.getMaxHeat(); - if (breedereffectiveness > 0.5D) { - heat *= 2; - } - } - return heat; - } - - private void checkHeatAcceptor(IReactor reactor, int x, int y, ArrayList heatAcceptors) { - ItemStack thing = reactor.getItemAt(x, y); - if ((thing != null) && ((thing.getItem() instanceof IReactorComponent)) - && (((IReactorComponent) thing.getItem()).canStoreHeat(reactor, thing, x, y))) { - heatAcceptors.add(new ItemStackCoord(thing, x, y)); - } - } - - @Override - public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, - int pulseX, int pulseY, boolean heatrun) { - if (!heatrun) { - if (sMox) { - float breedereffectiveness = (float) reactor.getHeat() / (float) reactor.getMaxHeat(); - float ReaktorOutput = 1.5F * breedereffectiveness + 1.0F; - reactor.addOutput(ReaktorOutput * this.sEnergy); - } else { - reactor.addOutput(1.0F * this.sEnergy); - } - } - return true; - } - - @Override - public boolean canStoreHeat(IReactor reactor, ItemStack yourStack, int x, int y) { - return false; - } - - @Override - public int getMaxHeat(IReactor reactor, ItemStack yourStack, int x, int y) { - return 0; - } - - @Override - public int getCurrentHeat(IReactor reactor, ItemStack yourStack, int x, int y) { - return 0; - } - - @Override - public int alterHeat(IReactor reactor, ItemStack yourStack, int x, int y, int heat) { - return heat; - } - - @Override - public float influenceExplosion(IReactor reactor, ItemStack yourStack) { - return 2 * this.numberOfCells; - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int slotIndex, boolean isCurrentItem) { - if (this.sRadiation > 0 && (entity instanceof EntityLivingBase entityLiving)) { - if (!GT_Utility.isWearingFullRadioHazmat(entityLiving)) { - IC2Potion.radiation.applyTo(entityLiving, sRadiation * 20, sRadiation * 10); - } - } - } - - private static class ItemStackCoord { - - public ItemStack stack; - public int x; - public int y; - - public ItemStackCoord(ItemStack stack1, int x1, int y1) { - this.stack = stack1; - this.x = x1; - this.y = y1; - } - } -} diff --git a/src/main/java/gregtech/api/items/GT_RadioactiveCell_Item.java b/src/main/java/gregtech/api/items/GT_RadioactiveCell_Item.java deleted file mode 100644 index c927737889..0000000000 --- a/src/main/java/gregtech/api/items/GT_RadioactiveCell_Item.java +++ /dev/null @@ -1,159 +0,0 @@ -package gregtech.api.items; - -import static gregtech.api.util.GT_Utility.formatNumbers; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; - -import gregtech.common.items.GT_DepletetCell_Item; -import ic2.api.item.IBoxable; -import ic2.core.util.StackUtil; - -public class GT_RadioactiveCell_Item extends GT_Generic_Item implements IBoxable { - - protected int cellCount; - protected int maxDmg; - protected int dura; - - public GT_RadioactiveCell_Item(String aUnlocalized, String aEnglish, int aCellcount) { - super(aUnlocalized, aEnglish, null); - this.setMaxStackSize(64); - this.setMaxDamage(100); - setNoRepair(); - this.cellCount = Math.max(1, aCellcount); - } - - public static int getDurabilityOfStack(ItemStack aStack) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - aStack.setTagCompound(tNBT); - } - return tNBT.getInteger("advDmg"); - } - - protected static int sumUp(int a) { - int b = 0; - for (int c = 1; c <= a; c++) { - b += c; - } - return b; - } - - protected static int triangularNumber(int x) { - return (x * x + x) / 2; - } - - protected boolean outputPulseForStack(ItemStack aStack) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - aStack.setTagCompound(tNBT); - } - tNBT.setInteger("output", tNBT.getInteger("output") + 1); - return false; // (this.pulserate > 0) || (tNBT.getInteger("output") % -this.pulserate == 0); - } - - protected boolean incrementPulseForStack(ItemStack aStack) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - aStack.setTagCompound(tNBT); - } - tNBT.setInteger("pulse", tNBT.getInteger("pulse") + 1); - return false; // (this.pulserate > 0) || (tNBT.getInteger("pulse") % -this.pulserate == 0); - } - - protected void setDurabilityForStack(ItemStack aStack, int aDurability) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - aStack.setTagCompound(tNBT); - } - tNBT.setInteger("durability", aDurability); - } - - public int getMaxNuclearDurability() { - return 0; // return this.maxDelay; - } - - public int func_77619_b() { - return 0; - } - - @Override - public boolean isBookEnchantable(ItemStack ingredient, ItemStack bookEnchant) { - return false; - } - - // getIsRepairable - public boolean func_82789_a(ItemStack toBeRepaired, ItemStack repairWith) { - return false; - } - - public void setDamageForStack(ItemStack stack, int advDmg) { - NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); - nbtData.setInteger("advDmg", advDmg); - if (this.maxDmg > 0) { - double p = (double) advDmg / (double) this.maxDmg; - int newDmg = (int) (stack.getMaxDamage() * p); - if (newDmg >= stack.getMaxDamage()) { - newDmg = stack.getMaxDamage() - 1; - } - stack.setItemDamage(newDmg); - this.dura = newDmg; - } - } - - public int getDamageOfStack(ItemStack stack) { - NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); - this.dura = nbtData.getInteger("advDmg"); - return this.dura; - } - - public int getControlTagOfStack(ItemStack stack) { - NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); - return nbtData.getInteger("tag"); - } - - public void setControlTagOfStack(ItemStack stack, int tag) { - NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); - nbtData.setInteger("tag", tag); - } - - public int getMaxDamageEx() { - return this.maxDmg; - } - - public void damageItemStack(ItemStack stack, int Dmg) { - setDamageForStack(stack, getDamageOfStack(stack) + Dmg); - } - - @Override - public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - super.addAdditionalToolTips(aList, aStack, aPlayer); - // aList.add("Time left: " + (this.maxDelay - getDurabilityOfStack(aStack)) + " secs"); - int rDmg = getDurabilityOfStack(aStack) * 6 / this.maxDmg; - EnumChatFormatting color2 = switch (rDmg) { - case 0, 1 -> EnumChatFormatting.WHITE; - case 2, 3, 4 -> EnumChatFormatting.GRAY; - default -> EnumChatFormatting.DARK_GRAY; - }; - EnumChatFormatting color1 = this instanceof GT_DepletetCell_Item ? color2 = EnumChatFormatting.DARK_GRAY - : EnumChatFormatting.WHITE; - aList.add( - color1 + String.format( - transItem("001", "Durability: %s/%s"), - "" + color2 + formatNumbers(this.maxDmg - getDurabilityOfStack(aStack)) + color1, - "" + formatNumbers(this.maxDmg))); - } - - @Override - public boolean canBeStoredInToolbox(ItemStack itemstack) { - return true; - } -} diff --git a/src/main/java/gregtech/api/items/GT_Tool_Item.java b/src/main/java/gregtech/api/items/GT_Tool_Item.java deleted file mode 100644 index 9f78bdc3fc..0000000000 --- a/src/main/java/gregtech/api/items/GT_Tool_Item.java +++ /dev/null @@ -1,41 +0,0 @@ -package gregtech.api.items; - -import net.minecraft.item.ItemStack; - -import gregtech.api.util.GT_ModHandler; - -/** - * This is just a basic Tool, which has normal durability and could break Blocks. - */ -public class GT_Tool_Item extends GT_Generic_Item { - - public GT_Tool_Item(String aUnlocalized, String aEnglish, String aTooltip, int aMaxDamage, int aEntityDamage, - boolean aSwingIfUsed) { - this(aUnlocalized, aEnglish, aTooltip, aMaxDamage, aEntityDamage, aSwingIfUsed, -1, -1); - } - - public GT_Tool_Item(String aUnlocalized, String aEnglish, String aTooltip, int aMaxDamage, int aEntityDamage, - boolean aSwingIfUsed, int aChargedGTID, int aDisChargedGTID) { - this( - aUnlocalized, - aEnglish, - aTooltip, - aMaxDamage, - aEntityDamage, - aSwingIfUsed, - aChargedGTID, - aDisChargedGTID, - 0, - 0.0F); - } - - public GT_Tool_Item(String aUnlocalized, String aEnglish, String aTooltip, int aMaxDamage, int aEntityDamage, - boolean aSwingIfUsed, int aChargedGTID, int aDisChargedGTID, int aToolQuality, float aToolStrength) { - super(aUnlocalized, aEnglish, aTooltip); - setMaxDamage(aMaxDamage); - setMaxStackSize(1); - setNoRepair(); - setFull3D(); - GT_ModHandler.registerBoxableItemToToolBox(new ItemStack(this)); - } -} diff --git a/src/main/java/gregtech/api/items/ItemBreederCell.java b/src/main/java/gregtech/api/items/ItemBreederCell.java new file mode 100644 index 0000000000..33a4ce3253 --- /dev/null +++ b/src/main/java/gregtech/api/items/ItemBreederCell.java @@ -0,0 +1,153 @@ +package gregtech.api.items; + +import static gregtech.api.util.GTUtility.formatNumbers; + +import java.util.List; +import java.util.function.Supplier; + +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.EnumChatFormatting; +import net.minecraft.world.World; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import ic2.api.reactor.IReactor; +import ic2.api.reactor.IReactorComponent; +import ic2.core.IC2Potion; + +/** + * A {@link ic2.core.item.reactor.ItemReactorLithiumCell}, but can be used to produce anything! + * + * @author glee8e + */ +public class ItemBreederCell extends GTGenericItem implements IReactorComponent { + + protected final int mHeatBonusStep; + protected final int mHeatBonusMultiplier; + protected ItemStack mProduct; + protected boolean deflector = false; + protected boolean hidden = false; + protected boolean neiAdded = false; + + public ItemBreederCell(String aUnlocalized, String aEnglish, String aEnglishTooltip, int aHeatBonusStep, + int aHeatBonusMultiplier, int aRequiredPulse, Supplier aProduct) { + super(aUnlocalized, aEnglish, aEnglishTooltip); + this.mHeatBonusStep = aHeatBonusStep; + this.mHeatBonusMultiplier = aHeatBonusMultiplier; + this.setMaxDamage(aRequiredPulse); + setNoRepair(); + GregTechAPI.sAfterGTPostload.add(() -> { + mProduct = aProduct.get(); + if (!hidden && !neiAdded) { + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(this)) + .itemOutputs(mProduct) + .setNEIDesc( + deflector ? "Neutron reflecting Breeder" : "Heat neutral Breeder", + String.format("Every %d reactor hull heat", mHeatBonusStep), + String.format("increase speed by %d00%%", mHeatBonusMultiplier), + String.format("Required pulses: %d", getMaxDamage())) + .duration(0) + .eut(0) + .addTo(RecipeMaps.ic2NuclearFakeRecipes); + + neiAdded = true; + } + }); + } + + public ItemBreederCell setDeflector() { + deflector = true; + return this; + } + + public ItemBreederCell setHidden() { + hidden = true; + return this; + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slotIndex, boolean isCurrentItem) { + if ((entity instanceof EntityLivingBase entityLiving)) { + if (!GTUtility.isWearingFullRadioHazmat(entityLiving)) { + IC2Potion.radiation.applyTo(entityLiving, 20, 1); + } + } + } + + @Override + public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + aList.add(transItem("019", "Bath with neutron in a hot reactor")); + int rDmg = aStack.getItemDamage() * 4 / getMaxDamage(); + EnumChatFormatting color2 = switch (rDmg) { + case 0 -> EnumChatFormatting.DARK_GRAY; + case 1, 2 -> EnumChatFormatting.GRAY; + default -> EnumChatFormatting.WHITE; + }; + aList.add( + String.format( + transItem("020", "Progress: %s/%s"), + "" + color2 + formatNumbers(aStack.getItemDamage()) + EnumChatFormatting.RESET, + "" + formatNumbers(getMaxDamage()))); + if (aStack.getItemDamage() > 0) aList.add(EnumChatFormatting.RED + transItem("021", "Radiation Hazard")); + } + + @Override + public int getItemStackLimit(ItemStack stack) { + return stack.getItemDamage() == 0 ? maxStackSize : 1; + } + + @Override + public void processChamber(IReactor reactor, ItemStack yourStack, int x, int y, boolean heatrun) {} + + @Override + public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, + int pulseX, int pulseY, boolean heatrun) { + if (heatrun) { + int myLevel = getNewDamage(reactor, yourStack); + if (myLevel >= getMaxDamage()) reactor.setItemAt(youX, youY, mProduct.copy()); + else yourStack.setItemDamage(myLevel); + } + + return deflector; + } + + protected int getNewDamage(IReactor reactor, ItemStack stack) { + return stack.getItemDamage() + 1 + reactor.getHeat() / mHeatBonusStep * mHeatBonusMultiplier; + } + + @Override + public boolean canStoreHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return false; + } + + @Override + public int getMaxHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return 0; + } + + @Override + public int getCurrentHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return 0; + } + + @Override + public int alterHeat(IReactor reactor, ItemStack yourStack, int x, int y, int heat) { + return heat; + } + + @Override + public float influenceExplosion(IReactor reactor, ItemStack yourStack) { + return 0.0F; + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + return 1.0D - (double) stack.getItemDamageForDisplay() / (double) stack.getMaxDamage(); + } +} diff --git a/src/main/java/gregtech/api/items/ItemCoolantCell.java b/src/main/java/gregtech/api/items/ItemCoolantCell.java new file mode 100644 index 0000000000..31eb6bc599 --- /dev/null +++ b/src/main/java/gregtech/api/items/ItemCoolantCell.java @@ -0,0 +1,82 @@ +package gregtech.api.items; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; + +import gregtech.api.GregTechAPI; +import ic2.core.util.StackUtil; + +public class ItemCoolantCell extends GTGenericItem { + + protected final int heatStorage; + + public ItemCoolantCell(String aUnlocalized, String aEnglish, int aMaxStore) { + super(aUnlocalized, aEnglish, null); + this.setMaxStackSize(1); + this.setMaxDamage(100); + setNoRepair(); + this.heatStorage = aMaxStore; + this.setCreativeTab(GregTechAPI.TAB_GREGTECH); + } + + protected static int getHeatOfStack(ItemStack aStack) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + aStack.setTagCompound(tNBT); + } + return tNBT.getInteger("heat"); + } + + protected void setHeatForStack(ItemStack aStack, int aHeat) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + aStack.setTagCompound(tNBT); + } + tNBT.setInteger("heat", aHeat); + if (this.heatStorage > 0) { + double heatRatio = (double) aHeat / (double) this.heatStorage; + int damage = (int) (aStack.getMaxDamage() * heatRatio); + if (damage >= aStack.getMaxDamage()) { + damage = aStack.getMaxDamage() - 1; + } + aStack.setItemDamage(damage); + } + } + + @Override + public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + super.addAdditionalToolTips(aList, aStack, aPlayer); + int rHeat = getHeatOfStack(aStack) * 10 / this.heatStorage; + EnumChatFormatting color = switch (rHeat) { + case 0 -> EnumChatFormatting.BLUE; + case 1, 2 -> EnumChatFormatting.GREEN; + case 3, 4, 5, 6 -> EnumChatFormatting.YELLOW; + case 7, 8 -> EnumChatFormatting.RED; + default -> EnumChatFormatting.DARK_RED; + }; + aList.add( + EnumChatFormatting.WHITE + + String.format(transItem("000", "Stored Heat: %s"), "" + color + getHeatOfStack(aStack))); + if (getControlTagOfStack(aStack) == 1) { + aList.add(StatCollector.translateToLocal("ic2.reactoritem.heatwarning.line1")); + aList.add(StatCollector.translateToLocal("ic2.reactoritem.heatwarning.line2")); + } + } + + public int getControlTagOfStack(ItemStack stack) { + NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); + return nbtData.getInteger("tag"); + } + + public void setControlTagOfStack(ItemStack stack, int tag) { + NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); + nbtData.setInteger("tag", tag); + } +} diff --git a/src/main/java/gregtech/api/items/ItemCoolantCellIC.java b/src/main/java/gregtech/api/items/ItemCoolantCellIC.java new file mode 100644 index 0000000000..00643996d3 --- /dev/null +++ b/src/main/java/gregtech/api/items/ItemCoolantCellIC.java @@ -0,0 +1,67 @@ +package gregtech.api.items; + +import net.minecraft.item.ItemStack; + +import ic2.api.reactor.IReactor; +import ic2.api.reactor.IReactorComponent; + +public class ItemCoolantCellIC extends ItemCoolantCell implements IReactorComponent { + + public ItemCoolantCellIC(String aUnlocalized, String aEnglish, int aMaxStore) { + super(aUnlocalized, aEnglish, aMaxStore); + } + + @Override + public void processChamber(IReactor aReactor, ItemStack aStack, int x, int y, boolean aHeatRun) {} + + @Override + public boolean acceptUraniumPulse(IReactor aReactor, ItemStack aStack, ItemStack pulsingStack, int youX, int youY, + int pulseX, int pulseY, boolean aHeatRun) { + return false; + } + + @Override + public boolean canStoreHeat(IReactor aReactor, ItemStack aStack, int x, int y) { + return !aReactor.isFluidCooled() || getControlTagOfStack(aStack) == 0; + } + + @Override + public int getMaxHeat(IReactor aReactor, ItemStack aStack, int x, int y) { + return this.heatStorage; + } + + @Override + public int getCurrentHeat(IReactor aReactor, ItemStack aStack, int x, int y) { + return getHeatOfStack(aStack); + } + + @Override + public float influenceExplosion(IReactor aReactor, ItemStack aStack) { + return 1.0F + this.heatStorage / 30000.0F; + } + + @Override + public int alterHeat(IReactor aReactor, ItemStack aStack, int x, int y, int aHeat) { + int tHeat = getHeatOfStack(aStack); + if ((tHeat == 0) && (getControlTagOfStack(aStack) != 0)) { + setControlTagOfStack(aStack, 0); + } + tHeat += aHeat; + if (tHeat > this.heatStorage) { + aReactor.setItemAt(x, y, null); + aHeat = this.heatStorage - tHeat + 1; + } else { + if (tHeat < 0) { + aHeat = tHeat; + tHeat = 0; + } else { + aHeat = 0; + } + if ((tHeat > 0) && (getControlTagOfStack(aStack) == 0) && (!aReactor.isFluidCooled())) { + setControlTagOfStack(aStack, 1); + } + setHeatForStack(aStack, tHeat); + } + return aHeat; + } +} diff --git a/src/main/java/gregtech/api/items/ItemEnergyArmor.java b/src/main/java/gregtech/api/items/ItemEnergyArmor.java new file mode 100644 index 0000000000..77c8d0991a --- /dev/null +++ b/src/main/java/gregtech/api/items/ItemEnergyArmor.java @@ -0,0 +1,331 @@ +package gregtech.api.items; + +import static gregtech.api.enums.Mods.GregTech; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemArmor; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.common.ISpecialArmor; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.LivingFallEvent; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +public class ItemEnergyArmor extends ItemArmor implements ISpecialArmor { + + public static Map jumpChargeMap = new ConcurrentHashMap<>(); + public int mCharge, mTransfer, mTier, mDamageEnergyCost, mSpecials; + public boolean mChargeProvider; + public double mArmorAbsorbtionPercentage; + + public ItemEnergyArmor(int aID, String aUnlocalized, String aEnglish, int aCharge, int aTransfer, int aTier, + int aDamageEnergyCost, int aSpecials, double aArmorAbsorbtionPercentage, boolean aChargeProvider, int aType, + int aArmorIndex) { + super(ArmorMaterial.DIAMOND, aArmorIndex, aType); + setMaxStackSize(1); + setMaxDamage(100); + setNoRepair(); + setUnlocalizedName(aUnlocalized); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".name", aEnglish); + mCharge = Math.max(1, aCharge); + mTransfer = Math.max(1, aTransfer); + mTier = Math.max(1, aTier); + mSpecials = aSpecials; + mChargeProvider = aChargeProvider; + mDamageEnergyCost = Math.max(0, aDamageEnergyCost); + mArmorAbsorbtionPercentage = aArmorAbsorbtionPercentage; + + setCreativeTab(GregTechAPI.TAB_GREGTECH); + + MinecraftForge.EVENT_BUS.register(this); + } + + private static void setCharge(ItemStack aStack) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) tNBT = new NBTTagCompound(); + tNBT.setInteger("charge", 1000000000); + aStack.setTagCompound(tNBT); + } + + @Override + public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + ItemStack tStack = aPlayer.inventory.armorInventory[3 - armorType]; + if (tStack != null) { + for (int i = 0; i < 9; i++) { + if (aPlayer.inventory.mainInventory[i] == aStack) { + aPlayer.inventory.armorInventory[3 - armorType] = aPlayer.inventory.mainInventory[i]; + aPlayer.inventory.mainInventory[i] = tStack; + return tStack; + } + } + } + return super.onItemRightClick(aStack, aWorld, aPlayer); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aIconRegister) { + this.itemIcon = aIconRegister.registerIcon(GregTech.getResourcePath(getUnlocalizedName())); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + aList.add("Tier: " + mTier); + if ((mSpecials & 1) != 0) aList.add("Rebreather"); + if ((mSpecials & 2) != 0) aList.add("Inertia Damper"); + if ((mSpecials & 4) != 0) aList.add("Food Replicator"); + if ((mSpecials & 8) != 0) aList.add("Medicine Module"); + if ((mSpecials & 16) != 0) aList.add("Lamp"); + if ((mSpecials & 32) != 0) aList.add("Solarpanel"); + if ((mSpecials & 64) != 0) aList.add("Extinguisher Module"); + if ((mSpecials & 128) != 0) aList.add("Jump Booster"); + if ((mSpecials & 256) != 0) aList.add("Speed Booster"); + if ((mSpecials & 512) != 0) aList.add("Invisibility Field"); + if ((mSpecials & 1024) != 0) aList.add("Infinite Charge"); + } + + @Override + public void onArmorTick(World aWorld, EntityPlayer aPlayer, ItemStack aStack) { + if (mSpecials == 0) return; + + if (!aPlayer.worldObj.isRemote && (mSpecials & 1) != 0) { + int airSupply = aPlayer.getAir(); + if (GTModHandler.canUseElectricItem(aStack, 1000) && airSupply < 50) { + aPlayer.setAir(airSupply + 250); + GTModHandler.useElectricItem(aStack, 1000, aPlayer); + } + } + + if (!aPlayer.worldObj.isRemote && (mSpecials & 4) != 0) { + if (GTModHandler.canUseElectricItem(aStack, 50000) && aPlayer.getFoodStats() + .needFood()) { + aPlayer.getFoodStats() + .addStats(1, 0.0F); + GTModHandler.useElectricItem(aStack, 50000, aPlayer); + } + } + + if ((mSpecials & 8) != 0) { + if (GTModHandler.canUseElectricItem(aStack, 10000) && aPlayer.isPotionActive(Potion.poison)) { + GTUtility.removePotion(aPlayer, Potion.poison.id); + GTModHandler.useElectricItem(aStack, 10000, aPlayer); + } + if (GTModHandler.canUseElectricItem(aStack, 100000) && aPlayer.isPotionActive(Potion.wither)) { + GTUtility.removePotion(aPlayer, Potion.wither.id); + GTModHandler.useElectricItem(aStack, 100000, aPlayer); + } + } + + if ((mSpecials & 64) != 0) { + aPlayer.setFire(0); + } + + if (!aPlayer.worldObj.isRemote && (mSpecials & 128) != 0) { + float jumpCharge = jumpChargeMap.getOrDefault(aPlayer, 1.0F); + + if (GTModHandler.canUseElectricItem(aStack, 1000) && aPlayer.onGround && jumpCharge < 1.0F) { + jumpCharge = 1.0F; + GTModHandler.useElectricItem(aStack, 1000, aPlayer); + } + + if (aPlayer.motionY >= 0.0D && jumpCharge > 0.0F && !aPlayer.isInWater()) { + if (jumpCharge < 1.0F) { + jumpCharge = 0.0F; + } + } + + jumpChargeMap.put(aPlayer, jumpCharge); + } + + if ((mSpecials & 256) != 0) { + if (GTModHandler.canUseElectricItem(aStack, 100) && aPlayer.isSprinting() + && (aPlayer.onGround && Math.abs(aPlayer.motionX) + Math.abs(aPlayer.motionZ) > 0.10000000149011612D + || aPlayer.isInWater())) { + GTModHandler.useElectricItem(aStack, 100, aPlayer); + float bonus = 0.22F; + + if (aPlayer.isInWater()) { + GTModHandler.useElectricItem(aStack, 100, aPlayer); + bonus = 0.1F; + + if (aPlayer.motionY > 0) { + aPlayer.motionY += 0.10000000149011612D; + } + } + + aPlayer.moveFlying(0.0F, 1.0F, bonus); + } + } + + if ((mSpecials & 512) != 0) { + if (GTModHandler.canUseElectricItem(aStack, 10000)) { + GTModHandler.useElectricItem(aStack, 10000, aPlayer); + aPlayer.addPotionEffect(new PotionEffect(Potion.invisibility.getId(), 25, 1, true)); + } + } + + if (!aPlayer.worldObj.isRemote && (mSpecials & (16 | 32)) != 0) { + // if (GregTechAPI.sWorldTickCounter%20==0) { + ItemStack tTargetChargeItem = aStack, tTargetDechargeItem = aStack; + + if (GTModHandler.chargeElectricItem(tTargetChargeItem, 1, Integer.MAX_VALUE, true, true) < 1) { + tTargetChargeItem = aPlayer.inventory.armorInventory[2]; + } + if (GTModHandler.dischargeElectricItem(tTargetDechargeItem, 10, Integer.MAX_VALUE, true, true, true) < 10) { + tTargetDechargeItem = aPlayer.inventory.armorInventory[2]; + } + + if (tTargetChargeItem == null || !GTModHandler.isElectricItem(tTargetChargeItem)) { + tTargetChargeItem = null; + } + + if (aPlayer.worldObj.isDaytime() && aPlayer.worldObj.canBlockSeeTheSky( + MathHelper.floor_double(aPlayer.posX), + MathHelper.floor_double(aPlayer.posY + 1), + MathHelper.floor_double(aPlayer.posZ))) { + if ((mSpecials & 32) != 0 && tTargetChargeItem != null) { + GTModHandler.chargeElectricItem(tTargetChargeItem, 20, Integer.MAX_VALUE, true, false); + } + } else { + /* + * TODO: if ((mSpecials & 16) != 0 && tTargetDechargeItem != null && + * GTModHandler.canUseElectricItem(tTargetDechargeItem, 10)) { if (aPlayer.worldObj.getBlock + * ((int)aPlayer.posX, (int)aPlayer.posY+1, (int)aPlayer.posZ) == Blocks.air) aPlayer.worldObj.setBlock + * ((int)aPlayer.posX, (int)aPlayer.posY+1, (int)aPlayer.posZ, GregTechAPI.sBlockList[3]); + * GTModHandler.useElectricItem(tTargetDechargeItem, 10, aPlayer); } + */ + // } + } + } + } + + @Override + public boolean getShareTag() { + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item aItem, CreativeTabs creativeTab, List outputSubItems) { + ItemStack tCharged = new ItemStack(this, 1), tUncharged = new ItemStack(this, 1, getMaxDamage()); + GTModHandler.chargeElectricItem(tCharged, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false); + outputSubItems.add(tCharged); + outputSubItems.add(tUncharged); + } + + public boolean canProvideEnergy(ItemStack aStack) { + if ((mSpecials & 1024) != 0) setCharge(aStack); + return mChargeProvider; + } + + public Item getChargedItem(ItemStack aStack) { + if ((mSpecials & 1024) != 0) setCharge(aStack); + return this; + } + + public Item getEmptyItem(ItemStack aStack) { + if ((mSpecials & 1024) != 0) setCharge(aStack); + return this; + } + + public int getMaxCharge(ItemStack aStack) { + if ((mSpecials & 1024) != 0) setCharge(aStack); + return mCharge; + } + + public int getTier(ItemStack aStack) { + if ((mSpecials & 1024) != 0) setCharge(aStack); + return mTier; + } + + public int getTransferLimit(ItemStack aStack) { + if ((mSpecials & 1024) != 0) setCharge(aStack); + return mTransfer; + } + + @Override + public int getItemEnchantability() { + return 0; + } + + @Override + public boolean isBookEnchantable(ItemStack ingredient, ItemStack bookEnchant) { + return false; + } + + @Override + public boolean getIsRepairable(ItemStack toBeRepaired, ItemStack repairWith) { + return false; + } + + // TODO: @ForgeSubscribe + public void onEntityLivingFallEvent(LivingFallEvent event) { + if (!event.entity.worldObj.isRemote && event.entity instanceof EntityPlayer player) { + for (int i = 0; i < 4; i++) { + ItemStack armor = player.inventory.armorInventory[i]; + if (armor != null && armor.getItem() == this && (mSpecials & 2) != 0) { + int distanceFactor = (int) event.distance - 3; + int energyCost = (this.mDamageEnergyCost * distanceFactor) / 4; + if (energyCost <= GTModHandler + .dischargeElectricItem(armor, Integer.MAX_VALUE, Integer.MAX_VALUE, true, true, true)) { + GTModHandler.dischargeElectricItem(armor, energyCost, Integer.MAX_VALUE, true, false, true); + event.setCanceled(true); + break; + } + } + } + } + } + + @Override + public ISpecialArmor.ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, + double damage, int slotIndex) { + return new ISpecialArmor.ArmorProperties( + (source == DamageSource.fall && (mSpecials & 2) != 0) ? 10 : 0, + getBaseAbsorptionRatio() * mArmorAbsorbtionPercentage, + mDamageEnergyCost > 0 + ? 25 * GTModHandler.dischargeElectricItem(armor, Integer.MAX_VALUE, Integer.MAX_VALUE, true, true, true) + / mDamageEnergyCost + : 0); + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slotIndex) { + return (int) Math.round(20.0D * getBaseAbsorptionRatio() * mArmorAbsorbtionPercentage); + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack itemStack, DamageSource source, int damage, + int slotIndex) { + GTModHandler.dischargeElectricItem(itemStack, damage * mDamageEnergyCost, Integer.MAX_VALUE, true, false, true); + } + + private double getBaseAbsorptionRatio() { + if (mArmorAbsorbtionPercentage <= 0) return 0.00; + return switch (this.armorType) { + case 0, 3 -> 0.15; + case 1 -> 0.40; + case 2 -> 0.30; + default -> 0.00; + }; + } +} diff --git a/src/main/java/gregtech/api/items/ItemRadioactiveCell.java b/src/main/java/gregtech/api/items/ItemRadioactiveCell.java new file mode 100644 index 0000000000..6efc652ef9 --- /dev/null +++ b/src/main/java/gregtech/api/items/ItemRadioactiveCell.java @@ -0,0 +1,159 @@ +package gregtech.api.items; + +import static gregtech.api.util.GTUtility.formatNumbers; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; + +import gregtech.common.items.ItemDepletedCell; +import ic2.api.item.IBoxable; +import ic2.core.util.StackUtil; + +public class ItemRadioactiveCell extends GTGenericItem implements IBoxable { + + protected int cellCount; + protected int maxDmg; + protected int dura; + + public ItemRadioactiveCell(String aUnlocalized, String aEnglish, int aCellcount) { + super(aUnlocalized, aEnglish, null); + this.setMaxStackSize(64); + this.setMaxDamage(100); + setNoRepair(); + this.cellCount = Math.max(1, aCellcount); + } + + public static int getDurabilityOfStack(ItemStack aStack) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + aStack.setTagCompound(tNBT); + } + return tNBT.getInteger("advDmg"); + } + + protected static int sumUp(int a) { + int b = 0; + for (int c = 1; c <= a; c++) { + b += c; + } + return b; + } + + protected static int triangularNumber(int x) { + return (x * x + x) / 2; + } + + protected boolean outputPulseForStack(ItemStack aStack) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + aStack.setTagCompound(tNBT); + } + tNBT.setInteger("output", tNBT.getInteger("output") + 1); + return false; // (this.pulserate > 0) || (tNBT.getInteger("output") % -this.pulserate == 0); + } + + protected boolean incrementPulseForStack(ItemStack aStack) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + aStack.setTagCompound(tNBT); + } + tNBT.setInteger("pulse", tNBT.getInteger("pulse") + 1); + return false; // (this.pulserate > 0) || (tNBT.getInteger("pulse") % -this.pulserate == 0); + } + + protected void setDurabilityForStack(ItemStack aStack, int aDurability) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + aStack.setTagCompound(tNBT); + } + tNBT.setInteger("durability", aDurability); + } + + public int getMaxNuclearDurability() { + return 0; // return this.maxDelay; + } + + public int func_77619_b() { + return 0; + } + + @Override + public boolean isBookEnchantable(ItemStack ingredient, ItemStack bookEnchant) { + return false; + } + + // getIsRepairable + public boolean func_82789_a(ItemStack toBeRepaired, ItemStack repairWith) { + return false; + } + + public void setDamageForStack(ItemStack stack, int advDmg) { + NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); + nbtData.setInteger("advDmg", advDmg); + if (this.maxDmg > 0) { + double p = (double) advDmg / (double) this.maxDmg; + int newDmg = (int) (stack.getMaxDamage() * p); + if (newDmg >= stack.getMaxDamage()) { + newDmg = stack.getMaxDamage() - 1; + } + stack.setItemDamage(newDmg); + this.dura = newDmg; + } + } + + public int getDamageOfStack(ItemStack stack) { + NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); + this.dura = nbtData.getInteger("advDmg"); + return this.dura; + } + + public int getControlTagOfStack(ItemStack stack) { + NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); + return nbtData.getInteger("tag"); + } + + public void setControlTagOfStack(ItemStack stack, int tag) { + NBTTagCompound nbtData = StackUtil.getOrCreateNbtData(stack); + nbtData.setInteger("tag", tag); + } + + public int getMaxDamageEx() { + return this.maxDmg; + } + + public void damageItemStack(ItemStack stack, int Dmg) { + setDamageForStack(stack, getDamageOfStack(stack) + Dmg); + } + + @Override + public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + super.addAdditionalToolTips(aList, aStack, aPlayer); + // aList.add("Time left: " + (this.maxDelay - getDurabilityOfStack(aStack)) + " secs"); + int rDmg = getDurabilityOfStack(aStack) * 6 / this.maxDmg; + EnumChatFormatting color2 = switch (rDmg) { + case 0, 1 -> EnumChatFormatting.WHITE; + case 2, 3, 4 -> EnumChatFormatting.GRAY; + default -> EnumChatFormatting.DARK_GRAY; + }; + EnumChatFormatting color1 = this instanceof ItemDepletedCell ? color2 = EnumChatFormatting.DARK_GRAY + : EnumChatFormatting.WHITE; + aList.add( + color1 + String.format( + transItem("001", "Durability: %s/%s"), + "" + color2 + formatNumbers(this.maxDmg - getDurabilityOfStack(aStack)) + color1, + "" + formatNumbers(this.maxDmg))); + } + + @Override + public boolean canBeStoredInToolbox(ItemStack itemstack) { + return true; + } +} diff --git a/src/main/java/gregtech/api/items/ItemRadioactiveCellIC.java b/src/main/java/gregtech/api/items/ItemRadioactiveCellIC.java new file mode 100644 index 0000000000..de60fe9c33 --- /dev/null +++ b/src/main/java/gregtech/api/items/ItemRadioactiveCellIC.java @@ -0,0 +1,219 @@ +package gregtech.api.items; + +import java.util.ArrayList; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import gregtech.api.enums.GTValues; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import ic2.api.reactor.IReactor; +import ic2.api.reactor.IReactorComponent; +import ic2.core.IC2Potion; +import ic2.core.init.MainConfig; +import ic2.core.util.ConfigUtil; + +public class ItemRadioactiveCellIC extends ItemRadioactiveCell implements IReactorComponent { + + private static final int MYSTERIOUS_MULTIPLIER_HEAT = 4; + public final int numberOfCells; + public final float sEnergy; + public final int sRadiation; + public final float sHeat; + public final ItemStack sDepleted; + public final boolean sMox; + + public ItemRadioactiveCellIC(String aUnlocalized, String aEnglish, int aCellcount, int maxDamage, float aEnergy, + int aRadiation, float aHeat, ItemStack aDepleted, boolean aMox) { + super(aUnlocalized, aEnglish, aCellcount); + setMaxStackSize(64); + this.maxDmg = maxDamage; + this.numberOfCells = aCellcount; + this.sEnergy = aEnergy; + this.sRadiation = aRadiation; + this.sHeat = aHeat; + this.sDepleted = aDepleted; + this.sMox = aMox; + if (aDepleted != null && aEnergy > 0 && aHeat > 0) { + // avoid adding depleted cells to recipe map + + int pulses = aCellcount / 2 + 1; + + // for the mysterious constant 5.0f, + // see ic2.core.block.reactor.tileentity.TileEntityNuclearReactorElectric.getOfferedEnergy + // don't ask, just accept + float nukePowerMult = 5.0f * ConfigUtil.getFloat(MainConfig.get(), "balance/energy/generator/nuclear"); + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(this)) + .itemOutputs(aDepleted) + .setNEIDesc( + aMox ? "MOX Model" : "Uranium Model", + "Neutron Pulse: " + aCellcount, + aCellcount == 1 + ? String.format("Heat: %.1f * n1 * (n1 + 1)", (aHeat * MYSTERIOUS_MULTIPLIER_HEAT) / 2f) + : String.format( + "Heat: %.1f * (%d + n1) * (%d + n1)", + (aHeat * MYSTERIOUS_MULTIPLIER_HEAT) * aCellcount / 2f, + aCellcount, + aCellcount + 1), + String.format( + "Energy: %.1f + n2 * %.1f EU/t", + aEnergy * aCellcount * pulses * nukePowerMult, + aEnergy * nukePowerMult)) + .duration(0) + .eut(0) + .addTo(RecipeMaps.ic2NuclearFakeRecipes); + } + } + + private static int checkPulseable(IReactor reactor, int x, int y, ItemStack me, int mex, int mey, boolean heatrun) { + ItemStack other = reactor.getItemAt(x, y); + if ((other != null) && ((other.getItem() instanceof IReactorComponent)) + && (((IReactorComponent) other.getItem()) + .acceptUraniumPulse(reactor, other, me, x, y, mex, mey, heatrun))) { + return 1; + } + return 0; + } + + @Override + public void processChamber(IReactor reactor, ItemStack yourStack, int x, int y, boolean heatrun) { + if (!reactor.produceEnergy()) { + return; + } + for (int iteration = 0; iteration < this.numberOfCells; iteration++) { + int pulses = 1 + this.numberOfCells / 2; + if (!heatrun) { + for (int i = 0; i < pulses; i++) { + acceptUraniumPulse(reactor, yourStack, yourStack, x, y, x, y, heatrun); + } + checkPulseable(reactor, x - 1, y, yourStack, x, y, heatrun); + checkPulseable(reactor, x + 1, y, yourStack, x, y, heatrun); + checkPulseable(reactor, x, y - 1, yourStack, x, y, heatrun); + checkPulseable(reactor, x, y + 1, yourStack, x, y, heatrun); + } else { + pulses += checkPulseable(reactor, x - 1, y, yourStack, x, y, heatrun) + + checkPulseable(reactor, x + 1, y, yourStack, x, y, heatrun) + + checkPulseable(reactor, x, y - 1, yourStack, x, y, heatrun) + + checkPulseable(reactor, x, y + 1, yourStack, x, y, heatrun); + + // int heat = sumUp(pulses) * 4; + + int heat = triangularNumber(pulses) * MYSTERIOUS_MULTIPLIER_HEAT; + + heat = getFinalHeat(reactor, yourStack, x, y, heat); + + ArrayList heatAcceptors = new ArrayList<>(); + checkHeatAcceptor(reactor, x - 1, y, heatAcceptors); + checkHeatAcceptor(reactor, x + 1, y, heatAcceptors); + checkHeatAcceptor(reactor, x, y - 1, heatAcceptors); + checkHeatAcceptor(reactor, x, y + 1, heatAcceptors); + heat = Math.round(heat * sHeat); + while ((heatAcceptors.size() > 0) && (heat > 0)) { + + int dheat = heat / heatAcceptors.size(); + heat -= dheat; + dheat = ((IReactorComponent) heatAcceptors.get(0).stack.getItem()).alterHeat( + reactor, + heatAcceptors.get(0).stack, + heatAcceptors.get(0).x, + heatAcceptors.get(0).y, + dheat); + heat += dheat; + heatAcceptors.remove(0); + } + if (heat > 0) { + reactor.addHeat(heat); + } + } + } + if (getDamageOfStack(yourStack) >= getMaxDamageEx() - 1) { + reactor.setItemAt(x, y, sDepleted.copy()); + } else if (heatrun) { + damageItemStack(yourStack, 1); + } + } + + protected int getFinalHeat(IReactor reactor, ItemStack stack, int x, int y, int heat) { + if (sMox && reactor.isFluidCooled()) { + float breedereffectiveness = (float) reactor.getHeat() / (float) reactor.getMaxHeat(); + if (breedereffectiveness > 0.5D) { + heat *= 2; + } + } + return heat; + } + + private void checkHeatAcceptor(IReactor reactor, int x, int y, ArrayList heatAcceptors) { + ItemStack thing = reactor.getItemAt(x, y); + if ((thing != null) && ((thing.getItem() instanceof IReactorComponent)) + && (((IReactorComponent) thing.getItem()).canStoreHeat(reactor, thing, x, y))) { + heatAcceptors.add(new ItemStackCoord(thing, x, y)); + } + } + + @Override + public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, + int pulseX, int pulseY, boolean heatrun) { + if (!heatrun) { + if (sMox) { + float breedereffectiveness = (float) reactor.getHeat() / (float) reactor.getMaxHeat(); + float ReaktorOutput = 1.5F * breedereffectiveness + 1.0F; + reactor.addOutput(ReaktorOutput * this.sEnergy); + } else { + reactor.addOutput(1.0F * this.sEnergy); + } + } + return true; + } + + @Override + public boolean canStoreHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return false; + } + + @Override + public int getMaxHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return 0; + } + + @Override + public int getCurrentHeat(IReactor reactor, ItemStack yourStack, int x, int y) { + return 0; + } + + @Override + public int alterHeat(IReactor reactor, ItemStack yourStack, int x, int y, int heat) { + return heat; + } + + @Override + public float influenceExplosion(IReactor reactor, ItemStack yourStack) { + return 2 * this.numberOfCells; + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slotIndex, boolean isCurrentItem) { + if (this.sRadiation > 0 && (entity instanceof EntityLivingBase entityLiving)) { + if (!GTUtility.isWearingFullRadioHazmat(entityLiving)) { + IC2Potion.radiation.applyTo(entityLiving, sRadiation * 20, sRadiation * 10); + } + } + } + + private static class ItemStackCoord { + + public ItemStack stack; + public int x; + public int y; + + public ItemStackCoord(ItemStack stack1, int x1, int y1) { + this.stack = stack1; + this.x = x1; + this.y = y1; + } + } +} diff --git a/src/main/java/gregtech/api/items/ItemTool.java b/src/main/java/gregtech/api/items/ItemTool.java new file mode 100644 index 0000000000..0de68fc90e --- /dev/null +++ b/src/main/java/gregtech/api/items/ItemTool.java @@ -0,0 +1,41 @@ +package gregtech.api.items; + +import net.minecraft.item.ItemStack; + +import gregtech.api.util.GTModHandler; + +/** + * This is just a basic Tool, which has normal durability and could break Blocks. + */ +public class ItemTool extends GTGenericItem { + + public ItemTool(String aUnlocalized, String aEnglish, String aTooltip, int aMaxDamage, int aEntityDamage, + boolean aSwingIfUsed) { + this(aUnlocalized, aEnglish, aTooltip, aMaxDamage, aEntityDamage, aSwingIfUsed, -1, -1); + } + + public ItemTool(String aUnlocalized, String aEnglish, String aTooltip, int aMaxDamage, int aEntityDamage, + boolean aSwingIfUsed, int aChargedGTID, int aDisChargedGTID) { + this( + aUnlocalized, + aEnglish, + aTooltip, + aMaxDamage, + aEntityDamage, + aSwingIfUsed, + aChargedGTID, + aDisChargedGTID, + 0, + 0.0F); + } + + public ItemTool(String aUnlocalized, String aEnglish, String aTooltip, int aMaxDamage, int aEntityDamage, + boolean aSwingIfUsed, int aChargedGTID, int aDisChargedGTID, int aToolQuality, float aToolStrength) { + super(aUnlocalized, aEnglish, aTooltip); + setMaxDamage(aMaxDamage); + setMaxStackSize(1); + setNoRepair(); + setFull3D(); + GTModHandler.registerBoxableItemToToolBox(new ItemStack(this)); + } +} diff --git a/src/main/java/gregtech/api/items/MetaBaseItem.java b/src/main/java/gregtech/api/items/MetaBaseItem.java new file mode 100644 index 0000000000..23726c96e9 --- /dev/null +++ b/src/main/java/gregtech/api/items/MetaBaseItem.java @@ -0,0 +1,622 @@ +package gregtech.api.items; + +import static gregtech.api.enums.GTValues.D1; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.util.GTUtility.formatNumbers; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.inventory.Container; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; + +import gregtech.api.enums.SubTag; +import gregtech.api.interfaces.IItemBehaviour; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; +import ic2.api.item.IElectricItemManager; +import ic2.api.item.ISpecialElectricItem; + +public abstract class MetaBaseItem extends GTGenericItem + implements ISpecialElectricItem, IElectricItemManager, IFluidContainerItem { + + /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ + private final ConcurrentHashMap>> mItemBehaviors = new ConcurrentHashMap<>(); + + /** + * Creates the Item using these Parameters. + * + * @param aUnlocalized The Unlocalized Name of this Item. + */ + public MetaBaseItem(String aUnlocalized) { + super(aUnlocalized, "Generated Item", null); + setHasSubtypes(true); + setMaxDamage(0); + } + + /** + * Adds a special Item Behaviour to the Item. + *

+ * Note: the boolean Behaviours sometimes won't be executed if another boolean Behaviour returned true before. + * + * @param aMetaValue the Meta Value of the Item you want to add it to. [0 - 32765] + * @param aBehavior the Click Behavior you want to add. + * @return the Item itself for convenience in constructing. + */ + public final MetaBaseItem addItemBehavior(int aMetaValue, IItemBehaviour aBehavior) { + if (aMetaValue < 0 || aMetaValue >= 32766 || aBehavior == null) return this; + ArrayList> tList = mItemBehaviors + .computeIfAbsent((short) aMetaValue, k -> new ArrayList<>(1)); + tList.add(aBehavior); + return this; + } + + public abstract Long[] getElectricStats(ItemStack aStack); + + public abstract Long[] getFluidContainerStats(ItemStack aStack); + + @Override + public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack) { + ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); + if (tList != null) for (IItemBehaviour tBehavior : tList) + if (tBehavior.hasProjectile(this, aProjectileType, aStack)) return true; + return super.hasProjectile(aProjectileType, aStack); + } + + @Override + public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, double aY, + double aZ) { + ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); + if (tList != null) for (IItemBehaviour tBehavior : tList) { + EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aX, aY, aZ); + if (rArrow != null) return rArrow; + } + return super.getProjectile(aProjectileType, aStack, aWorld, aX, aY, aZ); + } + + @Override + public EntityArrow getProjectile(SubTag aProjectileType, ItemStack aStack, World aWorld, EntityLivingBase aEntity, + float aSpeed) { + ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); + if (tList != null) for (IItemBehaviour tBehavior : tList) { + EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aEntity, aSpeed); + if (rArrow != null) return rArrow; + } + return super.getProjectile(aProjectileType, aStack, aWorld, aEntity, aSpeed); + } + + @Override + public ItemStack onDispense(IBlockSource aSource, ItemStack aStack) { + ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); + if (tList != null) for (IItemBehaviour tBehavior : tList) + if (tBehavior.canDispense(this, aSource, aStack)) return tBehavior.onDispense(this, aSource, aStack); + return super.onDispense(aSource, aStack); + } + + @Override + public boolean isItemStackUsable(ItemStack aStack) { + ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); + if (tList != null) for (IItemBehaviour tBehavior : tList) + if (!tBehavior.isItemStackUsable(this, aStack)) return false; + return super.isItemStackUsable(aStack); + } + + @Override + public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { + use(aStack, 0, aPlayer); + isItemStackUsable(aStack); + ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); + try { + if (tList != null) for (IItemBehaviour tBehavior : tList) + if (tBehavior.onLeftClickEntity(this, aStack, aPlayer, aEntity)) { + if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem(); + return true; + } + if (aStack.stackSize <= 0) { + aPlayer.destroyCurrentEquippedItem(); + return false; + } + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + return false; + } + + @Override + public boolean onItemUse(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, + int ordinalSide, float hitX, float hitY, float hitZ) { + use(aStack, 0, aPlayer); + isItemStackUsable(aStack); + ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); + try { + if (tList != null) for (IItemBehaviour tBehavior : tList) + if (tBehavior.onItemUse(this, aStack, aPlayer, aWorld, aX, aY, aZ, ordinalSide, hitX, hitY, hitZ)) { + if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem(); + return true; + } + if (aStack.stackSize <= 0) { + aPlayer.destroyCurrentEquippedItem(); + return false; + } + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + return false; + } + + @Override + public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, + int ordinalSide, float hitX, float hitY, float hitZ) { + use(aStack, 0, aPlayer); + isItemStackUsable(aStack); + ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); + try { + if (tList != null) for (IItemBehaviour tBehavior : tList) if (tBehavior.onItemUseFirst( + this, + aStack, + aPlayer, + aWorld, + aX, + aY, + aZ, + ForgeDirection.getOrientation(ordinalSide), + hitX, + hitY, + hitZ)) { + if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem(); + return true; + } + if (aStack.stackSize <= 0) { + aPlayer.destroyCurrentEquippedItem(); + return false; + } + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + return false; + } + + @Override + public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + use(aStack, 0, aPlayer); + isItemStackUsable(aStack); + ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); + try { + if (tList != null) for (IItemBehaviour tBehavior : tList) + aStack = tBehavior.onItemRightClick(this, aStack, aWorld, aPlayer); + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + return aStack; + } + + @Override + public final void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + String tKey = getUnlocalizedName(aStack) + ".tooltip"; + String[] tStrings = GTLanguageManager.getTranslation(tKey) + .split("/n "); + for (String tString : tStrings) + if (GTUtility.isStringValid(tString) && !tKey.equals(tString)) aList.add(tString); + + Long[] tStats = getElectricStats(aStack); + if (tStats != null) { + if (tStats[3] > 0) { + aList.add( + EnumChatFormatting.AQUA + String.format( + transItem("009", "Contains %s EU Tier: %s"), + formatNumbers(tStats[3]), + "" + (tStats[2] >= 0 ? tStats[2] : 0)) + EnumChatFormatting.GRAY); + } else { + long tCharge = getRealCharge(aStack); + if (tStats[3] == -2 && tCharge <= 0) { + aList.add( + EnumChatFormatting.AQUA + transItem("010", "Empty. You should recycle it properly.") + + EnumChatFormatting.GRAY); + } else { + aList.add( + EnumChatFormatting.AQUA + + String.format( + transItem("011", "%s / %s EU - Voltage: %s"), + formatNumbers(tCharge), + formatNumbers(Math.abs(tStats[0])), + "" + V[(int) (tStats[2] >= 0 ? tStats[2] < V.length ? tStats[2] : V.length - 1 : 1)]) + + EnumChatFormatting.GRAY); + } + } + } + + tStats = getFluidContainerStats(aStack); + if (tStats != null && tStats[0] > 0) { + FluidStack tFluid = getFluidContent(aStack); + aList.add( + EnumChatFormatting.BLUE + ((tFluid == null ? transItem("012", "No Fluids Contained") + : GTUtility.getFluidName(tFluid, true))) + EnumChatFormatting.GRAY); + aList.add( + EnumChatFormatting.BLUE + String.format( + transItem("013", "%sL / %sL"), + "" + (tFluid == null ? 0 : formatNumbers(tFluid.amount)), + "" + formatNumbers(tStats[0])) + EnumChatFormatting.GRAY); + } + + ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); + if (tList != null) for (IItemBehaviour tBehavior : tList) + aList = tBehavior.getAdditionalToolTips(this, aList, aStack); + + addAdditionalToolTips(aList, aStack, aPlayer); + } + + @Override + public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) { + ArrayList> tList = mItemBehaviors.get((short) getDamage(aStack)); + if (tList != null) for (IItemBehaviour tBehavior : tList) + tBehavior.onUpdate(this, aStack, aWorld, aPlayer, aTimer, aIsInHand); + } + + @Override + public final boolean canProvideEnergy(ItemStack aStack) { + Long[] tStats = getElectricStats(aStack); + if (tStats == null) return false; + return tStats[3] > 0 || (aStack.stackSize == 1 && (tStats[3] == -2 || tStats[3] == -3)); + } + + @Override + public final double getMaxCharge(ItemStack aStack) { + Long[] tStats = getElectricStats(aStack); + if (tStats == null) return 0; + return Math.abs(tStats[0]); + } + + @Override + public final double getTransferLimit(ItemStack aStack) { + Long[] tStats = getElectricStats(aStack); + if (tStats == null) return 0; + return Math.max(tStats[1], tStats[3]); + } + + @Override + public final double charge(ItemStack aStack, double aCharge, int aTier, boolean aIgnoreTransferLimit, + boolean aSimulate) { + Long[] tStats = getElectricStats(aStack); + if (tStats == null || tStats[2] > aTier + || !(tStats[3] == -1 || tStats[3] == -3 || (tStats[3] < 0 && aCharge == Integer.MAX_VALUE)) + || aStack.stackSize != 1) return 0; + long tTransfer = aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge); + long tChargeBefore = getRealCharge(aStack), tNewCharge = Math.min( + Math.abs(tStats[0]), + Long.MAX_VALUE - tTransfer >= tChargeBefore ? tChargeBefore + tTransfer : Long.MAX_VALUE); + if (!aSimulate) setCharge(aStack, tNewCharge); + return tNewCharge - tChargeBefore; + } + + @Override + public final double discharge(ItemStack aStack, double aCharge, int aTier, boolean aIgnoreTransferLimit, + boolean aBatteryAlike, boolean aSimulate) { + Long[] tStats = getElectricStats(aStack); + if (tStats == null || tStats[2] > aTier) return 0; + if (aBatteryAlike && !canProvideEnergy(aStack)) return 0; + if (tStats[3] > 0) { + if (aCharge < tStats[3] || aStack.stackSize < 1) return 0; + if (!aSimulate) aStack.stackSize--; + return tStats[3]; + } + long tChargeBefore = getRealCharge(aStack), tNewCharge = Math + .max(0, tChargeBefore - (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge))); + if (!aSimulate) setCharge(aStack, tNewCharge); + return tChargeBefore - tNewCharge; + } + + @Override + public final double getCharge(ItemStack aStack) { + return getRealCharge(aStack); + } + + @Override + public final boolean canUse(ItemStack aStack, double aAmount) { + return getRealCharge(aStack) >= aAmount; + } + + @Override + public final boolean use(ItemStack aStack, double aAmount, EntityLivingBase aPlayer) { + chargeFromArmor(aStack, aPlayer); + if (aPlayer instanceof EntityPlayer && ((EntityPlayer) aPlayer).capabilities.isCreativeMode) return true; + double tTransfer = discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, true); + if (Math.abs(tTransfer - aAmount) < .0000001) { + discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); + chargeFromArmor(aStack, aPlayer); + return true; + } + discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); + chargeFromArmor(aStack, aPlayer); + return false; + } + + @Override + public final void chargeFromArmor(ItemStack aStack, EntityLivingBase aPlayer) { + if (aPlayer == null || aPlayer.worldObj.isRemote) return; + for (int i = 1; i < 5; i++) { + ItemStack tArmor = aPlayer.getEquipmentInSlot(i); + if (GTModHandler.isElectricItem(tArmor)) { + IElectricItem tArmorItem = (IElectricItem) tArmor.getItem(); + if (tArmorItem.canProvideEnergy(tArmor) && tArmorItem.getTier(tArmor) >= getTier(aStack)) { + double tCharge = ElectricItem.manager.discharge( + tArmor, + charge(aStack, Integer.MAX_VALUE - 1, Integer.MAX_VALUE, true, true), + Integer.MAX_VALUE, + true, + true, + false); + if (tCharge > 0) { + charge(aStack, tCharge, Integer.MAX_VALUE, true, false); + if (aPlayer instanceof EntityPlayer) { + Container tContainer = ((EntityPlayer) aPlayer).openContainer; + if (tContainer != null) tContainer.detectAndSendChanges(); + } + } + } + } + } + } + + /* + * @Override public final int getMaxCharge(ItemStack aStack) { Long[] tStats = getElectricStats(aStack); if (tStats + * == null) return 0; return (int)Math.abs(tStats[0]); } + * @Override public final int getTransferLimit(ItemStack aStack) { Long[] tStats = getElectricStats(aStack); if + * (tStats == null) return 0; return (int)Math.max(tStats[1], tStats[3]); } + * @Override public final int charge(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreTransferLimit, boolean + * aSimulate) { Long[] tStats = getElectricStats(aStack); if (tStats == null || tStats[2] > aTier || !(tStats[3] == + * -1 || tStats[3] == -3 || (tStats[3] < 0 && aCharge == Integer.MAX_VALUE)) || aStack.stackSize != 1) return 0; + * long tChargeBefore = getRealCharge(aStack), tNewCharge = + * aCharge==Integer.MAX_VALUE?Long.MAX_VALUE:Math.min(Math.abs(tStats[0]), tChargeBefore + + * (aIgnoreTransferLimit?aCharge:Math.min(tStats[1], aCharge))); if (!aSimulate) setCharge(aStack, tNewCharge); + * return (int)(tNewCharge-tChargeBefore); } + * @Override public final int discharge(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreTransferLimit, + * boolean aSimulate) { Long[] tStats = getElectricStats(aStack); if (tStats == null || tStats[2] > aTier) return 0; + * if (tStats[3] > 0) { if (aCharge < tStats[3] || aStack.stackSize < 1) return 0; if (!aSimulate) + * aStack.stackSize--; return (int)(long)tStats[3]; } long tChargeBefore = getRealCharge(aStack), tNewCharge = + * Math.max(0, tChargeBefore - (aIgnoreTransferLimit?aCharge:Math.min(tStats[1], aCharge))); if (!aSimulate) + * setCharge(aStack, tNewCharge); return (int)(tChargeBefore-tNewCharge); } + * @Override public final int getCharge(ItemStack aStack) { return (int)Math.min(Integer.MAX_VALUE, + * getRealCharge(aStack)); } + * @Override public final boolean canUse(ItemStack aStack, int aAmount) { return getRealCharge(aStack) >= aAmount; } + * @Override public final boolean use(ItemStack aStack, int aAmount, EntityLivingBase aPlayer) { + * chargeFromArmor(aStack, aPlayer); if (aPlayer instanceof EntityPlayer && + * ((EntityPlayer)aPlayer).capabilities.isCreativeMode) return true; int tTransfer = discharge(aStack, aAmount, + * Integer.MAX_VALUE, true, true); if (tTransfer == aAmount) { discharge(aStack, aAmount, Integer.MAX_VALUE, true, + * false); chargeFromArmor(aStack, aPlayer); return true; } discharge(aStack, aAmount, Integer.MAX_VALUE, true, + * false); chargeFromArmor(aStack, aPlayer); return false; } + * @Override public final void chargeFromArmor(ItemStack aStack, EntityLivingBase aPlayer) { if (aPlayer == null || + * aPlayer.worldObj.isRemote) return; for (int i = 1; i < 5; i++) { ItemStack tArmor = + * aPlayer.getEquipmentInSlot(i); if (GTModHandler.isElectricItem(tArmor)) { IElectricItem tArmorItem = + * (IElectricItem)tArmor.getItem(); if (tArmorItem.canProvideEnergy(tArmor) && tArmorItem.getTier(tArmor) >= + * getTier(aStack)) { int tCharge = ElectricItem.manager.discharge(tArmor, charge(aStack, Integer.MAX_VALUE-1, + * Integer.MAX_VALUE, true, true), Integer.MAX_VALUE, true, false); if (tCharge > 0) { charge(aStack, tCharge, + * Integer.MAX_VALUE, true, false); if (aPlayer instanceof EntityPlayer) { Container tContainer = + * ((EntityPlayer)aPlayer).openContainer; if (tContainer != null) tContainer.detectAndSendChanges(); } } } } } } + */ + public final long getRealCharge(ItemStack aStack) { + Long[] tStats = getElectricStats(aStack); + if (tStats == null) return 0; + if (tStats[3] > 0) return (int) (long) tStats[3]; + NBTTagCompound tNBT = aStack.getTagCompound(); + return tNBT == null ? 0 : tNBT.getLong("GT.ItemCharge"); + } + + public final boolean setCharge(ItemStack aStack, long aCharge) { + Long[] tStats = getElectricStats(aStack); + if (tStats == null || tStats[3] > 0) return false; + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) tNBT = new NBTTagCompound(); + tNBT.removeTag("GT.ItemCharge"); + aCharge = Math.min(tStats[0] < 0 ? Math.abs(tStats[0] / 2) : aCharge, Math.abs(tStats[0])); + if (aCharge > 0) { + aStack.setItemDamage(getChargedMetaData(aStack)); + tNBT.setLong("GT.ItemCharge", aCharge); + } else { + aStack.setItemDamage(getEmptyMetaData(aStack)); + } + if (tNBT.hasNoTags()) aStack.setTagCompound(null); + else aStack.setTagCompound(tNBT); + isItemStackUsable(aStack); + return true; + } + + public short getChargedMetaData(ItemStack aStack) { + return (short) aStack.getItemDamage(); + } + + public short getEmptyMetaData(ItemStack aStack) { + return (short) aStack.getItemDamage(); + } + + @Override + public FluidStack getFluid(ItemStack aStack) { + return getFluidContent(aStack); + } + + @Override + public int getCapacity(ItemStack aStack) { + Long[] tStats = getFluidContainerStats(aStack); + return tStats == null ? 0 : (int) Math.max(0, tStats[0]); + } + + @Override + public int fill(ItemStack aStack, FluidStack aFluid, boolean doFill) { + if (aStack == null || aStack.stackSize != 1) return 0; + + ItemStack tStack = GTUtility.fillFluidContainer(aFluid, aStack, false, false); + if (tStack != null) { + aStack.setItemDamage(tStack.getItemDamage()); + aStack.func_150996_a(tStack.getItem()); + return GTUtility.getFluidForFilledItem(tStack, false).amount; + } + + Long[] tStats = getFluidContainerStats(aStack); + if (tStats == null || tStats[0] <= 0 + || aFluid == null + || aFluid.getFluid() + .getID() <= 0 + || aFluid.amount <= 0) return 0; + + FluidStack tFluid = getFluidContent(aStack); + + if (tFluid == null || tFluid.getFluid() + .getID() <= 0) { + if (aFluid.amount <= tStats[0]) { + if (doFill) { + setFluidContent(aStack, aFluid); + } + return aFluid.amount; + } + if (doFill) { + tFluid = aFluid.copy(); + tFluid.amount = (int) (long) tStats[0]; + setFluidContent(aStack, tFluid); + } + return (int) (long) tStats[0]; + } + + if (!tFluid.isFluidEqual(aFluid)) return 0; + + int space = (int) (long) tStats[0] - tFluid.amount; + if (aFluid.amount <= space) { + if (doFill) { + tFluid.amount += aFluid.amount; + setFluidContent(aStack, tFluid); + } + return aFluid.amount; + } + if (doFill) { + tFluid.amount = (int) (long) tStats[0]; + setFluidContent(aStack, tFluid); + } + return space; + } + + @Override + public FluidStack drain(ItemStack aStack, int maxDrain, boolean doDrain) { + if (aStack == null || aStack.stackSize != 1) return null; + + FluidStack tFluid = GTUtility.getFluidForFilledItem(aStack, false); + if (tFluid != null && maxDrain >= tFluid.amount) { + ItemStack tStack = GTUtility.getContainerItem(aStack, false); + if (tStack == null) { + if (doDrain) aStack.stackSize = 0; + return tFluid; + } + if (doDrain) { + aStack.setItemDamage(tStack.getItemDamage()); + aStack.func_150996_a(tStack.getItem()); + } + return tFluid; + } + + Long[] tStats = getFluidContainerStats(aStack); + if (tStats == null || tStats[0] <= 0) return null; + + tFluid = getFluidContent(aStack); + if (tFluid == null) return null; + + int used = maxDrain; + if (tFluid.amount < used) used = tFluid.amount; + if (doDrain) { + tFluid.amount -= used; + setFluidContent(aStack, tFluid); + } + + FluidStack drained = tFluid.copy(); + drained.amount = used; + return drained; + } + + public FluidStack getFluidContent(ItemStack aStack) { + Long[] tStats = getFluidContainerStats(aStack); + if (tStats == null || tStats[0] <= 0) return GTUtility.getFluidForFilledItem(aStack, false); + NBTTagCompound tNBT = aStack.getTagCompound(); + return tNBT == null ? null : FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("GT.FluidContent")); + } + + public void setFluidContent(ItemStack aStack, FluidStack aFluid) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) tNBT = new NBTTagCompound(); + else tNBT.removeTag("GT.FluidContent"); + if (aFluid != null && aFluid.amount > 0) + tNBT.setTag("GT.FluidContent", aFluid.writeToNBT(new NBTTagCompound())); + if (tNBT.hasNoTags()) aStack.setTagCompound(null); + else aStack.setTagCompound(tNBT); + isItemStackUsable(aStack); + } + + @Override + public int getItemStackLimit(ItemStack aStack) { + Long[] tStats = getElectricStats(aStack); + if (tStats != null && (tStats[3] == -1 || tStats[3] == -2 || tStats[3] == -3) && getRealCharge(aStack) > 0) + return 1; + tStats = getFluidContainerStats(aStack); + if (tStats != null) return (int) (long) tStats[1]; + if (getDamage(aStack) == 32763) return 1; + return 64; + } + + @Override + public final Item getChargedItem(ItemStack itemStack) { + return this; + } + + @Override + public final Item getEmptyItem(ItemStack itemStack) { + return this; + } + + @Override + public final int getTier(ItemStack aStack) { + Long[] tStats = getElectricStats(aStack); + return (int) (tStats == null ? Integer.MAX_VALUE : tStats[2]); + } + + @Override + public final String getToolTip(ItemStack aStack) { + return null; + } // This has its own ToolTip Handler, no need to let the IC2 Handler screw us up at this Point + + @Override + public final IElectricItemManager getManager(ItemStack aStack) { + return this; + } // We are our own Manager + + @Override + public final boolean getShareTag() { + return true; + } // just to be sure. + + @Override + public int getItemEnchantability() { + return 0; + } + + @Override + public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) { + return false; + } + + @Override + public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) { + return false; + } +} diff --git a/src/main/java/gregtech/api/items/MetaGeneratedItem.java b/src/main/java/gregtech/api/items/MetaGeneratedItem.java new file mode 100644 index 0000000000..449b1ced24 --- /dev/null +++ b/src/main/java/gregtech/api/items/MetaGeneratedItem.java @@ -0,0 +1,415 @@ +package gregtech.api.items; + +import static gregtech.api.enums.GTValues.D1; +import static gregtech.api.enums.Mods.AppleCore; +import static gregtech.api.enums.Mods.GregTech; +import static gregtech.api.recipe.RecipeMaps.cannerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.BitSet; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemFood; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import cpw.mods.fml.common.Optional; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Mods; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TCAspects.TC_AspectStack; +import gregtech.api.interfaces.IFoodStat; +import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.IItemBehaviour; +import gregtech.api.interfaces.IItemContainer; +import gregtech.api.objects.ItemData; +import gregtech.api.util.GTConfig; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.render.items.GeneratedMaterialRenderer; +import squeek.applecore.api.food.FoodValues; +import squeek.applecore.api.food.IEdible; +import squeek.applecore.api.food.ItemFoodProxy; + +/** + * @author Gregorius Techneticies + *

+ * One Item for everything! + *

+ * This brilliant Item Class is used for automatically generating all possible variations of Material Items, + * like Dusts, Ingots, Gems, Plates and similar. It saves me a ton of work, when adding Items, because I always + * have to make a new Item SubType for each OreDict Prefix, when adding a new Material. + *

+ * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom + * defined, just to save space and MetaData. + *

+ * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike + * Item. + */ +@Optional.Interface(iface = "squeek.applecore.api.food.IEdible", modid = Mods.Names.APPLE_CORE) +public abstract class MetaGeneratedItem extends MetaBaseItem implements IGT_ItemWithMaterialRenderer, IEdible { + + /** + * All instances of this Item Class are listed here. This gets used to register the Renderer to all Items of this + * Type, if useStandardMetaItemRenderer() returns true. + *

+ * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item. + */ + public static final ConcurrentHashMap sInstances = new ConcurrentHashMap<>(); + + /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ + + public final short mOffset, mItemAmount; + public final BitSet mEnabledItems; + public final BitSet mVisibleItems; + public final IIcon[][] mIconList; + + public final ConcurrentHashMap mFoodStats = new ConcurrentHashMap<>(); + public final ConcurrentHashMap mElectricStats = new ConcurrentHashMap<>(); + public final ConcurrentHashMap mFluidContainerStats = new ConcurrentHashMap<>(); + public final ConcurrentHashMap mBurnValues = new ConcurrentHashMap<>(); + + /** + * Creates the Item using these Parameters. + * + * @param aUnlocalized The Unlocalized Name of this Item. + */ + public MetaGeneratedItem(String aUnlocalized, short aOffset, short aItemAmount) { + super(aUnlocalized); + setCreativeTab(GregTechAPI.TAB_GREGTECH_MATERIALS); + setHasSubtypes(true); + setMaxDamage(0); + mEnabledItems = new BitSet(aItemAmount); + mVisibleItems = new BitSet(aItemAmount); + + mOffset = (short) Math.min(32766, aOffset); + mItemAmount = (short) Math.min(aItemAmount, 32766 - mOffset); + mIconList = new IIcon[aItemAmount][1]; + + sInstances.put(getUnlocalizedName(), this); + } + + /** + * This adds a Custom Item to the ending Range. + * + * @param aID The Id of the assigned Item [0 - mItemAmount] (The MetaData gets auto-shifted by +mOffset) + * @param aEnglish The Default Localized Name of the created Item + * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip + * @param aRandomData The OreDict Names you want to give the Item. Also used for TC Aspects and some other things. + * @return An ItemStack containing the newly created Item. + */ + public final ItemStack addItem(int aID, String aEnglish, String aToolTip, Object... aRandomData) { + if (aToolTip == null) aToolTip = ""; + if (aID >= 0 && aID < mItemAmount) { + ItemStack rStack = new ItemStack(this, 1, mOffset + aID); + if (mEnabledItems.get(aID)) { + throw new IllegalArgumentException( + String.format("ID %s is already reserved for %s!", aID, rStack.getDisplayName())); + } + mEnabledItems.set(aID); + mVisibleItems.set(aID); + GTLanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".name", aEnglish); + GTLanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".tooltip", aToolTip); + List tAspects = new ArrayList<>(); + // Important Stuff to do first + for (Object tRandomData : aRandomData) if (tRandomData instanceof SubTag) { + if (tRandomData == SubTag.INVISIBLE) { + mVisibleItems.set(aID, false); + continue; + } + if (tRandomData == SubTag.NO_UNIFICATION) { + GTOreDictUnificator.addToBlacklist(rStack); + } + } + // now check for the rest + for (Object tRandomData : aRandomData) if (tRandomData != null) { + boolean tUseOreDict = true; + if (tRandomData instanceof IFoodStat) { + setFoodBehavior(mOffset + aID, (IFoodStat) tRandomData); + if (((IFoodStat) tRandomData).getFoodAction(this, rStack) == EnumAction.eat) { + int tFoodValue = ((IFoodStat) tRandomData).getFoodLevel(this, rStack, null); + if (tFoodValue > 0) { + GTValues.RA.stdBuilder() + .itemInputs(rStack, ItemList.IC2_Food_Can_Empty.get(tFoodValue)) + .itemOutputs( + ((IFoodStat) tRandomData).isRotten(this, rStack, null) + ? ItemList.IC2_Food_Can_Spoiled.get(tFoodValue) + : ItemList.IC2_Food_Can_Filled.get(tFoodValue)) + .duration(tFoodValue * 5 * SECONDS) + .eut(1) + .addTo(cannerRecipes); + } + } + tUseOreDict = false; + } + if (tRandomData instanceof IItemBehaviour) { + // The cast below from is not safe. If you know how to make it safe, please do. + // noinspection unchecked + addItemBehavior(mOffset + aID, (IItemBehaviour) tRandomData); + tUseOreDict = false; + } + if (tRandomData instanceof IItemContainer) { + ((IItemContainer) tRandomData).set(rStack); + tUseOreDict = false; + } + if (tRandomData instanceof SubTag) { + continue; + } + if (tRandomData instanceof TC_AspectStack) { + ((TC_AspectStack) tRandomData).addToAspectList(tAspects); + continue; + } + if (tRandomData instanceof ItemData) { + if (GTUtility.isStringValid(tRandomData)) GTOreDictUnificator.registerOre(tRandomData, rStack); + else GTOreDictUnificator.addItemData(rStack, (ItemData) tRandomData); + continue; + } + if (tUseOreDict) { + GTOreDictUnificator.registerOre(tRandomData, rStack); + } + } + if (GregTechAPI.sThaumcraftCompat != null) + GregTechAPI.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); + return rStack; + } + return null; + } + + /** + * Sets a Food Behavior for the Item. + * + * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] + * @param aFoodBehavior the Food Behavior you want to add. + * @return the Item itself for convenience in constructing. + */ + public final MetaGeneratedItem setFoodBehavior(int aMetaValue, IFoodStat aFoodBehavior) { + if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length()) return this; + if (aFoodBehavior == null) mFoodStats.remove((short) aMetaValue); + else mFoodStats.put((short) aMetaValue, aFoodBehavior); + return this; + } + + /** + * Sets the Furnace Burn Value for the Item. + * + * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] + * @param aValue 200 = 1 Burn Process = 500 EU, max = 32767 (that is 81917.5 EU) + * @return the Item itself for convenience in constructing. + */ + public final MetaGeneratedItem setBurnValue(int aMetaValue, int aValue) { + if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length() || aValue < 0) return this; + if (aValue == 0) mBurnValues.remove((short) aMetaValue); + else mBurnValues.put((short) aMetaValue, aValue > Short.MAX_VALUE ? Short.MAX_VALUE : (short) aValue); + return this; + } + + /** + * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] + * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior) + * @param aTransferLimit Transfer Limit. + * @param aTier The electric Tier. + * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0). Use -1 if you want to + * make this Battery chargeable (the use and canUse Functions will still discharge if you just + * use this) Use -2 if you want to make this Battery dischargeable. Use -3 if you want to make + * this Battery charge/discharge-able. + * @return the Item itself for convenience in constructing. + */ + public final MetaGeneratedItem setElectricStats(int aMetaValue, long aMaxCharge, long aTransferLimit, long aTier, + long aSpecialData, boolean aUseAnimations) { + if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length()) return this; + if (aMaxCharge == 0) mElectricStats.remove((short) aMetaValue); + else { + mElectricStats.put( + (short) aMetaValue, + new Long[] { aMaxCharge, Math.max(0, aTransferLimit), Math.max(-1, aTier), aSpecialData }); + if (aMetaValue >= mOffset && aUseAnimations) mIconList[aMetaValue - mOffset] = Arrays + .copyOf(mIconList[aMetaValue - mOffset], Math.max(9, mIconList[aMetaValue - mOffset].length)); + } + return this; + } + + /** + * + * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] + * @param aCapacity fluid capacity in L or mb + * @param aStacksize item stack size + * @return the Item itself for convenience in constructing. + */ + public final MetaGeneratedItem setFluidContainerStats(int aMetaValue, long aCapacity, long aStacksize) { + if (aMetaValue < 0 || aMetaValue >= mOffset + mEnabledItems.length()) return this; + if (aCapacity < 0) mElectricStats.remove((short) aMetaValue); + else mFluidContainerStats.put((short) aMetaValue, new Long[] { aCapacity, Math.max(1, aStacksize) }); + return this; + } + + /** + * @return if this MetaGenerated Item should use my Default Renderer System. + */ + public boolean useStandardMetaItemRenderer() { + return true; + } + + @Override + public short[] getRGBa(ItemStack aStack) { + return Materials._NULL.getRGBA(); + } + + /** + * @return the Icon the Material is going to be rendered with. + */ + public IIconContainer getIconContainer(int aMetaData) { + return null; + } + + @Override + public IIcon getIcon(int aMetaData, int pass) { + IIconContainer iconContainer = getIconContainer(aMetaData); + return iconContainer != null ? iconContainer.getIcon() : null; + } + + @Override + public IIcon getOverlayIcon(int aMetaData, int pass) { + IIconContainer iconContainer = getIconContainer(aMetaData); + return iconContainer != null ? iconContainer.getOverlayIcon() : null; + } + + @Override + public boolean shouldUseCustomRenderer(int aMetaData) { + return true; + } + + @Override + public GeneratedMaterialRenderer getMaterialRenderer(int aMetaData) { + return null; + } + + @Override + public boolean allowMaterialRenderer(int aMetaData) { + return aMetaData < this.mOffset; + } + + /* ---------- INTERNAL OVERRIDES ---------- */ + + @Override + public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + IFoodStat tStat = mFoodStats.get((short) getDamage(aStack)); + if (tStat != null && aPlayer.canEat(tStat.alwaysEdible(this, aStack, aPlayer))) + aPlayer.setItemInUse(aStack, 32); + return super.onItemRightClick(aStack, aWorld, aPlayer); + } + + @Override + public int getMaxItemUseDuration(ItemStack aStack) { + return mFoodStats.get((short) getDamage(aStack)) == null ? 0 : 32; + } + + @Override + public EnumAction getItemUseAction(ItemStack aStack) { + IFoodStat tStat = mFoodStats.get((short) getDamage(aStack)); + return tStat == null ? EnumAction.none : tStat.getFoodAction(this, aStack); + } + + @Override + public final ItemStack onEaten(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + IFoodStat tStat = mFoodStats.get((short) getDamage(aStack)); + if (tStat != null) { + if (AppleCore.isModLoaded()) { + aPlayer.getFoodStats() + .func_151686_a(getFoodProxy(this), aStack); + } else { + aPlayer.getFoodStats() + .addStats(tStat.getFoodLevel(this, aStack, aPlayer), tStat.getSaturation(this, aStack, aPlayer)); + } + tStat.onEaten(this, aStack, aPlayer); + } + return aStack; + } + + @Optional.Method(modid = Mods.Names.APPLE_CORE) + private static ItemFood getFoodProxy(Object edible) { + return new ItemFoodProxy((IEdible) edible); + } + + @Override + @Optional.Method(modid = Mods.Names.APPLE_CORE) + public FoodValues getFoodValues(ItemStack aStack) { + IFoodStat tStat = mFoodStats.get((short) getDamage(aStack)); + return tStat == null ? null + : new FoodValues(tStat.getFoodLevel(this, aStack, null), tStat.getSaturation(this, aStack, null)); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { + int j = mEnabledItems.length(); + for (int i = 0; i < j; i++) if (mVisibleItems.get(i) || (D1 && mEnabledItems.get(i))) { + Long[] tStats = mElectricStats.get((short) (mOffset + i)); + if (tStats != null && tStats[3] < 0) { + ItemStack tStack = new ItemStack(this, 1, mOffset + i); + setCharge(tStack, Math.abs(tStats[0])); + isItemStackUsable(tStack); + aList.add(tStack); + } + if (tStats == null || tStats[3] != -2) { + ItemStack tStack = new ItemStack(this, 1, mOffset + i); + isItemStackUsable(tStack); + aList.add(tStack); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public final void registerIcons(IIconRegister aIconRegister) { + short j = (short) mEnabledItems.length(); + for (short i = 0; i < j; i++) if (mEnabledItems.get(i)) { + for (byte k = 1; k < mIconList[i].length; k++) { + mIconList[i][k] = aIconRegister.registerIcon( + GregTech.getResourcePath(GTConfig.troll ? "troll" : getUnlocalizedName() + "/" + i + "/" + k)); + } + mIconList[i][0] = aIconRegister + .registerIcon(GregTech.getResourcePath(GTConfig.troll ? "troll" : getUnlocalizedName() + "/" + i)); + } + } + + @Override + public final Long[] getElectricStats(ItemStack aStack) { + return mElectricStats.get((short) aStack.getItemDamage()); + } + + @Override + public final Long[] getFluidContainerStats(ItemStack aStack) { + return mFluidContainerStats.get((short) aStack.getItemDamage()); + } + + @Override + public int getItemEnchantability() { + return 0; + } + + @Override + public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) { + return false; + } + + @Override + public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) { + return false; + } +} diff --git a/src/main/java/gregtech/api/items/MetaGeneratedItemX01.java b/src/main/java/gregtech/api/items/MetaGeneratedItemX01.java new file mode 100644 index 0000000000..29fc849a6f --- /dev/null +++ b/src/main/java/gregtech/api/items/MetaGeneratedItemX01.java @@ -0,0 +1,210 @@ +package gregtech.api.items; + +import static gregtech.api.enums.GTValues.M; + +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +/** + * @author Gregorius Techneticies + *

+ * One Item for everything! + *

+ * This brilliant Item Class is used for automatically generating all possible variations of Material Items, + * like Dusts, Ingots, Gems, Plates and similar. It saves me a ton of work, when adding Items, because I always + * have to make a new Item SubType for each OreDict Prefix, when adding a new Material. + *

+ * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom + * defined, just to save space and MetaData. + *

+ * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike + * Item. + */ +public abstract class MetaGeneratedItemX01 extends MetaGeneratedItem { + + protected final OrePrefixes mPrefix; + protected final int mIconSetIndex; + + /** + * Creates the Item using these Parameters. This is for the new 1 Item = 1 Prefix System. + * + * @param aUnlocalized The Unlocalized Name of this Item. + * @param aGeneratedPrefix The OreDict Prefix you want to have generated. + * @param aIconSetIndex The TextureSet Index to be used. -1 for Defaulting to the Data contained in the Prefix. + * (this is only to be used for selecting the Icon in getIconContainer, nothing else) + */ + public MetaGeneratedItemX01(String aUnlocalized, OrePrefixes aGeneratedPrefix, int aIconSetIndex) { + super(aUnlocalized, (short) 32000, (short) 766); + mPrefix = aGeneratedPrefix; + mIconSetIndex = aIconSetIndex >= 0 ? aIconSetIndex + : aGeneratedPrefix.mTextureIndex >= 0 ? aGeneratedPrefix.mTextureIndex : 0; + + for (int i = 0; i < GregTechAPI.sGeneratedMaterials.length; i++) { + OrePrefixes tPrefix = mPrefix; + if (tPrefix == null) continue; + Materials tMaterial = GregTechAPI.sGeneratedMaterials[i]; + if (tMaterial == null) continue; + if (mPrefix.doGenerateItem(tMaterial)) { + ItemStack tStack = new ItemStack(this, 1, i); + GTLanguageManager.addStringLocalization( + getUnlocalizedName(tStack) + ".name", + GTLanguageManager.i18nPlaceholder ? getDefaultLocalizationFormat(tPrefix, tMaterial, i) + : getDefaultLocalization(tPrefix, tMaterial, i)); + GTLanguageManager.addStringLocalization( + getUnlocalizedName(tStack) + ".tooltip", + tMaterial.getToolTip(tPrefix.mMaterialAmount / M)); + String tOreName = getOreDictString(tPrefix, tMaterial); + tPrefix = OrePrefixes.getOrePrefix(tOreName); + if (tPrefix != null && tPrefix.mIsUnificatable) { + GTOreDictUnificator.set(tPrefix, OrePrefixes.getMaterial(tOreName, tPrefix), tStack); + } else { + GTOreDictUnificator.registerOre(tOreName, tStack); + } + } + } + } + + /* ---------- OVERRIDEABLE FUNCTIONS ---------- */ + + /** + * @param aPrefix the OreDict Prefix + * @param aMaterial the Material + * @param aMetaData a Index from [0 - 31999] + * @return the Localized Name when default LangFiles are used. + */ + public String getDefaultLocalization(OrePrefixes aPrefix, Materials aMaterial, int aMetaData) { + return aPrefix.getDefaultLocalNameForItem(aMaterial); + } + + /** + * @param aPrefix the OreDict Prefix + * @param aMaterial the Material + * @param aMetaData a Index from [0 - 31999] + * @return the Localized Name Format when default LangFiles are used. + */ + public String getDefaultLocalizationFormat(OrePrefixes aPrefix, Materials aMaterial, int aMetaData) { + return aPrefix.getDefaultLocalNameFormatForItem(aMaterial); + } + + /** + * @param aPrefix always != null + * @param aMaterial always != null + * @param aDoShowAllItems this is the Configuration Setting of the User, if he wants to see all the Stuff like Tiny + * Dusts or Crushed Ores as well. + * @return if this Item should be visible in NEI or Creative + */ + public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) { + return true; + } + + /** + * @return the name of the Item to be registered at the OreDict. + */ + public String getOreDictString(OrePrefixes aPrefix, Materials aMaterial) { + return aPrefix.get(aMaterial) + .toString(); + } + + public IIconContainer getIconContainer(int aMetaData, Materials aMaterial) { + return aMaterial.mIconSet.mTextures[mIconSetIndex]; + } + + /* ---------- INTERNAL OVERRIDES ---------- */ + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + String aName = super.getItemStackDisplayName(aStack); + int aDamage = aStack.getItemDamage(); + if (aDamage < 32000 && aDamage >= 0) return Materials.getLocalizedNameForItem(aName, aDamage % 1000); + return aName; + } + + @Override + public ItemStack getContainerItem(ItemStack aStack) { + int aMetaData = aStack.getItemDamage(); + if (aMetaData < GregTechAPI.sGeneratedMaterials.length && aMetaData >= 0) { + Materials aMaterial = GregTechAPI.sGeneratedMaterials[aMetaData]; + if (aMaterial != null && aMaterial != Materials.Empty && aMaterial != Materials._NULL) { + return GTUtility.copyAmount(1, mPrefix.mContainerItem); + } + } + return null; + } + + @Override + public short[] getRGBa(ItemStack aStack) { + int aMetaData = getDamage(aStack); + return aMetaData < GregTechAPI.sGeneratedMaterials.length && GregTechAPI.sGeneratedMaterials[aMetaData] != null + ? GregTechAPI.sGeneratedMaterials[aMetaData].mRGBa + : Materials._NULL.mRGBa; + } + + @Override + public final IIconContainer getIconContainer(int aMetaData) { + return aMetaData < GregTechAPI.sGeneratedMaterials.length && GregTechAPI.sGeneratedMaterials[aMetaData] != null + ? getIconContainer(aMetaData, GregTechAPI.sGeneratedMaterials[aMetaData]) + : null; + } + + @Override + @SideOnly(Side.CLIENT) + public final void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { + for (int i = 0; i < GregTechAPI.sGeneratedMaterials.length; i++) if (mPrefix + .doGenerateItem(GregTechAPI.sGeneratedMaterials[i]) + && doesShowInCreative(mPrefix, GregTechAPI.sGeneratedMaterials[i], GregTechAPI.sDoShowAllItemsInCreative)) { + ItemStack tStack = new ItemStack(this, 1, i); + isItemStackUsable(tStack); + aList.add(tStack); + } + super.getSubItems(aItem, aCreativeTab, aList); + } + + @Override + public final IIcon getIconFromDamage(int aMetaData) { + if (aMetaData < 0) return null; + if (aMetaData < GregTechAPI.sGeneratedMaterials.length) { + Materials tMaterial = GregTechAPI.sGeneratedMaterials[aMetaData]; + if (tMaterial == null) return null; + IIconContainer tIcon = getIconContainer(aMetaData, tMaterial); + if (tIcon != null) return tIcon.getIcon(); + return null; + } + return aMetaData >= mOffset && aMetaData - mOffset < mIconList.length ? mIconList[aMetaData - mOffset][0] + : null; + } + + @Override + public int getItemStackLimit(ItemStack aStack) { + return getDamage(aStack) < mOffset ? Math.min(super.getItemStackLimit(aStack), mPrefix.mDefaultStackSize) + : super.getItemStackLimit(aStack); + } + + @Override + public int getItemEnchantability() { + return 0; + } + + @Override + public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) { + return false; + } + + @Override + public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) { + return false; + } +} diff --git a/src/main/java/gregtech/api/items/MetaGeneratedItemX32.java b/src/main/java/gregtech/api/items/MetaGeneratedItemX32.java new file mode 100644 index 0000000000..cb83804ae1 --- /dev/null +++ b/src/main/java/gregtech/api/items/MetaGeneratedItemX32.java @@ -0,0 +1,225 @@ +package gregtech.api.items; + +import static gregtech.api.enums.GTValues.M; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.render.items.GeneratedMaterialRenderer; + +/** + * @author Gregorius Techneticies + *

+ * One Item for everything! + *

+ * This brilliant Item Class is used for automatically generating all possible variations of Material Items, + * like Dusts, Ingots, Gems, Plates and similar. It saves me a ton of work, when adding Items, because I always + * have to make a new Item SubType for each OreDict Prefix, when adding a new Material. + *

+ * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom + * defined, just to save space and MetaData. + *

+ * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike + * Item. + */ +public abstract class MetaGeneratedItemX32 extends MetaGeneratedItem { + + protected final OrePrefixes[] mGeneratedPrefixList; + + /** + * Creates the Item using these Parameters. + * + * @param aUnlocalized The Unlocalized Name of this Item. + * @param aGeneratedPrefixList The OreDict Prefixes you want to have generated. + */ + public MetaGeneratedItemX32(String aUnlocalized, OrePrefixes... aGeneratedPrefixList) { + super(aUnlocalized, (short) 32000, (short) 766); + mGeneratedPrefixList = Arrays.copyOf(aGeneratedPrefixList, 32); + + for (int i = 0; i < 32000; i++) { + OrePrefixes tPrefix = mGeneratedPrefixList[i / 1000]; + if (tPrefix == null) continue; + if (tPrefix == OrePrefixes.___placeholder___) continue; + Materials tMaterial = GregTechAPI.sGeneratedMaterials[i % 1000]; + if (tMaterial == null) continue; + if (doesMaterialAllowGeneration(tPrefix, tMaterial)) { + ItemStack tStack = new ItemStack(this, 1, i); + GTLanguageManager.addStringLocalization( + getUnlocalizedName(tStack) + ".name", + GTLanguageManager.i18nPlaceholder ? getDefaultLocalizationFormat(tPrefix, tMaterial, i) + : getDefaultLocalization(tPrefix, tMaterial, i)); + GTLanguageManager.addStringLocalization( + getUnlocalizedName(tStack) + ".tooltip", + tMaterial.getToolTip(tPrefix.mMaterialAmount / M)); + if (tPrefix.mIsUnificatable) { + GTOreDictUnificator.set(tPrefix, tMaterial, tStack); + } else { + GTOreDictUnificator.registerOre(tPrefix.get(tMaterial), tStack); + } + if ((tPrefix == OrePrefixes.stick || tPrefix == OrePrefixes.wireFine || tPrefix == OrePrefixes.ingot) + && (tMaterial == Materials.Lead || tMaterial == Materials.Tin + || tMaterial == Materials.SolderingAlloy)) { + GregTechAPI.sSolderingMetalList.add(tStack); + GTModHandler.registerBoxableItemToToolBox(tStack); + } + } + } + } + + /* ---------- OVERRIDEABLE FUNCTIONS ---------- */ + + /** + * @return the Color Modulation the Material is going to be rendered with. + */ + @Override + public short[] getRGBa(ItemStack aStack) { + Materials tMaterial = GregTechAPI.sGeneratedMaterials[getDamage(aStack) % 1000]; + return tMaterial == null ? Materials._NULL.mRGBa : tMaterial.mRGBa; + } + + /** + * @param aPrefix this can be null, you have to return false in that case + * @param aMaterial this can be null, you have to return false in that case + * @return if this Item should be generated and visible. + */ + public boolean doesMaterialAllowGeneration(OrePrefixes aPrefix, Materials aMaterial) { + // You have to check for at least these Conditions in every Case! So add a super Call like the following for + // this before executing your Code: + // if (!super.doesMaterialAllowGeneration(aPrefix, aMaterial)) return false; + return aPrefix != null && aPrefix.doGenerateItem(aMaterial); + } + + /* ---------- OVERRIDEABLE FUNCTIONS ---------- */ + + /** + * @param aPrefix the OreDict Prefix + * @param aMaterial the Material + * @param aMetaData a Index from [0 - 31999] + * @return the Localized Name when default LangFiles are used. + */ + public String getDefaultLocalization(OrePrefixes aPrefix, Materials aMaterial, int aMetaData) { + return aPrefix.getDefaultLocalNameForItem(aMaterial); + } + + /** + * @param aPrefix the OreDict Prefix + * @param aMaterial the Material + * @param aMetaData a Index from [0 - 31999] + * @return the Localized Name Format when default LangFiles are used. + */ + public String getDefaultLocalizationFormat(OrePrefixes aPrefix, Materials aMaterial, int aMetaData) { + return aPrefix.getDefaultLocalNameFormatForItem(aMaterial); + } + + /** + * @param aMetaData a Index from [0 - 31999] + * @param aMaterial the Material + * @return an Icon Container for the Item Display. + */ + public final IIconContainer getIconContainer(int aMetaData, Materials aMaterial) { + return mGeneratedPrefixList[aMetaData / 1000] != null + && mGeneratedPrefixList[aMetaData / 1000].mTextureIndex >= 0 + ? aMaterial.mIconSet.mTextures[mGeneratedPrefixList[aMetaData / 1000].mTextureIndex] + : null; + } + + /** + * @param aPrefix always != null + * @param aMaterial always != null + * @param aDoShowAllItems this is the Configuration Setting of the User, if he wants to see all the Stuff like Tiny + * Dusts or Crushed Ores as well. + * @return if this Item should be visible in NEI or Creative + */ + public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) { + return true; + } + + /* ---------- INTERNAL OVERRIDES ---------- */ + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + String aName = super.getItemStackDisplayName(aStack); + int aDamage = aStack.getItemDamage(); + if (aDamage < 32000 && aDamage >= 0) return Materials.getLocalizedNameForItem(aName, aDamage % 1000); + return aName; + } + + @Override + public ItemStack getContainerItem(ItemStack aStack) { + int aDamage = aStack.getItemDamage(); + if (aDamage < 32000 && aDamage >= 0) { + Materials aMaterial = GregTechAPI.sGeneratedMaterials[aDamage % 1000]; + if (aMaterial != null && aMaterial != Materials.Empty && aMaterial != Materials._NULL) { + OrePrefixes aPrefix = mGeneratedPrefixList[aDamage / 1000]; + if (aPrefix != null) return GTUtility.copyAmount(1, aPrefix.mContainerItem); + } + } + return null; + } + + @Override + public final IIconContainer getIconContainer(int aMetaData) { + return GregTechAPI.sGeneratedMaterials[aMetaData % 1000] == null ? null + : getIconContainer(aMetaData, GregTechAPI.sGeneratedMaterials[aMetaData % 1000]); + } + + @Override + public GeneratedMaterialRenderer getMaterialRenderer(int aMetaData) { + return GregTechAPI.sGeneratedMaterials[aMetaData % 1000] == null ? null + : GregTechAPI.sGeneratedMaterials[aMetaData % 1000].renderer; + } + + @Override + @SideOnly(Side.CLIENT) + public final void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { + for (int i = 0; i < 32000; i++) { + OrePrefixes aPrefix = mGeneratedPrefixList[i / 1000]; + Materials aMaterial = GregTechAPI.sGeneratedMaterials[i % 1000]; + if (aPrefix != null && aMaterial != null) { + if (doesMaterialAllowGeneration(aPrefix, aMaterial) + && doesShowInCreative(aPrefix, aMaterial, GregTechAPI.sDoShowAllItemsInCreative)) { + ItemStack tStack = new ItemStack(this, 1, i); + isItemStackUsable(tStack); + aList.add(tStack); + } + } + } + super.getSubItems(aItem, aCreativeTab, aList); + } + + @Override + public final IIcon getIconFromDamage(int aMetaData) { + if (aMetaData < 0) return null; + if (aMetaData < 32000) { + Materials tMaterial = GregTechAPI.sGeneratedMaterials[aMetaData % 1000]; + if (tMaterial == null) return null; + IIconContainer tIcon = getIconContainer(aMetaData, tMaterial); + if (tIcon != null) return tIcon.getIcon(); + return null; + } + return aMetaData - 32000 < mIconList.length ? mIconList[aMetaData - 32000][0] : null; + } + + @Override + public int getItemStackLimit(ItemStack aStack) { + int tDamage = getDamage(aStack); + if (tDamage < 32000 && mGeneratedPrefixList[tDamage / 1000] != null) + return Math.min(super.getItemStackLimit(aStack), mGeneratedPrefixList[tDamage / 1000].mDefaultStackSize); + return super.getItemStackLimit(aStack); + } +} diff --git a/src/main/java/gregtech/api/items/MetaGeneratedTool.java b/src/main/java/gregtech/api/items/MetaGeneratedTool.java new file mode 100644 index 0000000000..6487a67a6b --- /dev/null +++ b/src/main/java/gregtech/api/items/MetaGeneratedTool.java @@ -0,0 +1,1013 @@ +package gregtech.api.items; + +import static gregtech.api.util.GTUtility.formatNumbers; +import static gregtech.common.tileentities.machines.multi.MTELargeTurbineSteam.calculateLooseFlow; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.stats.AchievementList; +import net.minecraft.stats.StatList; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.IShearable; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.event.world.BlockEvent; + +import appeng.api.implementations.items.IAEWrench; +import buildcraft.api.tools.IToolWrench; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Optional; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import crazypants.enderio.api.tool.ITool; +import forestry.api.arboriculture.IToolGrafter; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enchants.EnchantmentRadioactivity; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TCAspects.TC_AspectStack; +import gregtech.api.interfaces.IDamagableItem; +import gregtech.api.interfaces.IToolStats; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.tools.ToolTurbine; +import mods.railcraft.api.core.items.IToolCrowbar; +import mrtjp.projectred.api.IScrewdriver; + +/** + * This is an example on how you can create a Tool ItemStack, in this case a Bismuth Wrench: + * GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01").getToolWithStats(MetaGeneratedTool01.WRENCH, 1, + * Materials.Bismuth, Materials.Bismuth, null); + */ +@Optional.InterfaceList( + value = { + @Optional.Interface(iface = "forestry.api.arboriculture.IToolGrafter", modid = "ForestryAPI|arboriculture"), + @Optional.Interface(iface = "mods.railcraft.api.core.items.IToolCrowbar", modid = "RailcraftAPI|items"), + @Optional.Interface(iface = "buildcraft.api.tools.IToolWrench", modid = "BuildCraftAPI|tools"), + @Optional.Interface(iface = "crazypants.enderio.api.tool.ITool", modid = "EnderIOAPI|Tools"), + @Optional.Interface(iface = "mrtjp.projectred.api.IScrewdriver", modid = "ProjRed|Core"), }) +public abstract class MetaGeneratedTool extends MetaBaseItem + implements IDamagableItem, IToolGrafter, IToolCrowbar, IToolWrench, ITool, IScrewdriver, IAEWrench { + + /** + * All instances of this Item Class are listed here. This gets used to register the Renderer to all Items of this + * Type, if useStandardMetaItemRenderer() returns true. + *

+ * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item. + */ + public static final ConcurrentHashMap sInstances = new ConcurrentHashMap<>(); + + /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ + + public final ConcurrentHashMap mToolStats = new ConcurrentHashMap<>(); + + /** + * Creates the Item using these Parameters. + * + * @param aUnlocalized The Unlocalized Name of this Item. + */ + public MetaGeneratedTool(String aUnlocalized) { + super(aUnlocalized); + setCreativeTab(GregTechAPI.TAB_GREGTECH); + setMaxStackSize(1); + sInstances.put(getUnlocalizedName(), this); + } + + /* ---------- FOR ADDING CUSTOM ITEMS INTO THE REMAINING 766 RANGE ---------- */ + + public static final Materials getPrimaryMaterial(ItemStack aStack) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if (aNBT != null) return Materials.getRealMaterial(aNBT.getString("PrimaryMaterial")); + } + return Materials._NULL; + } + + public static final Materials getSecondaryMaterial(ItemStack aStack) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if (aNBT != null) return Materials.getRealMaterial(aNBT.getString("SecondaryMaterial")); + } + return Materials._NULL; + } + + /* ---------- INTERNAL OVERRIDES ---------- */ + + public static final long getToolMaxDamage(ItemStack aStack) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if (aNBT != null) return aNBT.getLong("MaxDamage"); + } + return 0; + } + + public static final long getToolDamage(ItemStack aStack) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if (aNBT != null) return aNBT.getLong("Damage"); + } + return 0; + } + + public static final boolean setToolDamage(ItemStack aStack, long aDamage) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if (aNBT != null) { + aNBT.setLong("Damage", aDamage); + return true; + } + } + return false; + } + + public static final boolean setToolMode(ItemStack aStack, byte aMode) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if (aNBT != null) { + aNBT.setByte("Mode", aMode); + return true; + } + } + return false; + } + + public static final byte getToolMode(ItemStack aStack) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if (aNBT != null) return aNBT.getByte("Mode"); + } + return 0; + } + + /** + * This adds a Custom Item to the ending Range. + * + * @param aID The Id of the assigned Tool Class [0 - 32765] (only even Numbers allowed! Uneven + * ID's are empty electric Items) + * @param aEnglish The Default Localized Name of the created Item + * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no + * ToolTip + * @param aToolStats The Food Value of this Item. Can be null as well. + * @param aOreDictNamesAndAspects The OreDict Names you want to give the Item. Also used to assign Thaumcraft + * Aspects. + * @return An ItemStack containing the newly created Item, but without specific Stats. + */ + public final ItemStack addTool(int aID, String aEnglish, String aToolTip, IToolStats aToolStats, + Object... aOreDictNamesAndAspects) { + if (aToolTip == null) aToolTip = ""; + if (aID >= 0 && aID < 32766 && aID % 2 == 0) { + GTLanguageManager.addStringLocalization(getUnlocalizedName() + "." + aID + ".name", aEnglish); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + "." + aID + ".tooltip", aToolTip); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + "." + (aID + 1) + ".name", aEnglish + " (Empty)"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + "." + (aID + 1) + ".tooltip", "You need to recharge it"); + mToolStats.put((short) aID, aToolStats); + mToolStats.put((short) (aID + 1), aToolStats); + aToolStats.onStatsAddedToTool(this, aID); + ItemStack rStack = new ItemStack(this, 1, aID); + List tAspects = new ArrayList<>(); + for (Object tOreDictNameOrAspect : aOreDictNamesAndAspects) { + if (tOreDictNameOrAspect instanceof TC_AspectStack) + ((TC_AspectStack) tOreDictNameOrAspect).addToAspectList(tAspects); + else GTOreDictUnificator.registerOre(tOreDictNameOrAspect, rStack); + } + if (GregTechAPI.sThaumcraftCompat != null) + GregTechAPI.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); + GTModHandler.registerBoxableItemToToolBox(rStack); + return rStack; + } + return null; + } + + /** + * This Function gets an ItemStack Version of this Tool + * + * @param aToolID the ID of the Tool Class + * @param aAmount Amount of Items (well normally you only need 1) + * @param aPrimaryMaterial Primary Material of this Tool + * @param aSecondaryMaterial Secondary (Rod/Handle) Material of this Tool + * @param aElectricArray The Electric Stats of this Tool (or null if not electric) + */ + public final ItemStack getToolWithStats(int aToolID, int aAmount, Materials aPrimaryMaterial, + Materials aSecondaryMaterial, long[] aElectricArray) { + ItemStack rStack = new ItemStack(this, aAmount, aToolID); + IToolStats tToolStats = getToolStats(rStack); + if (tToolStats != null) { + NBTTagCompound tMainNBT = new NBTTagCompound(), tToolNBT = new NBTTagCompound(); + tToolNBT.setByte("Mode", (byte) 0); + if (aPrimaryMaterial != null) { + tToolNBT.setString("PrimaryMaterial", aPrimaryMaterial.mName); + tToolNBT.setLong( + "MaxDamage", + 100L * (long) (aPrimaryMaterial.mDurability * tToolStats.getMaxDurabilityMultiplier())); + } + if (aSecondaryMaterial != null) tToolNBT.setString("SecondaryMaterial", aSecondaryMaterial.mName); + + if (aElectricArray != null) { + tToolNBT.setBoolean("Electric", true); + tToolNBT.setLong("MaxCharge", aElectricArray[0]); + tToolNBT.setLong("Voltage", aElectricArray[1]); + tToolNBT.setLong("Tier", aElectricArray[2]); + tToolNBT.setLong("SpecialData", aElectricArray[3]); + } + + tMainNBT.setTag("GT.ToolStats", tToolNBT); + rStack.setTagCompound(tMainNBT); + } + isItemStackUsable(rStack); + return rStack; + } + + /** + * Called by the Block Harvesting Event within the GTProxy + */ + @Mod.EventHandler + public void onHarvestBlockEvent(ArrayList aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, + int aX, int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { + IToolStats tStats = getToolStats(aStack); + if (isItemStackUsable(aStack) && getDigSpeed(aStack, aBlock, aMetaData) > 0.0F) doDamage( + aStack, + (long) tStats + .convertBlockDrops(aDrops, aStack, aPlayer, aBlock, aX, aY, aZ, aMetaData, aFortune, aSilkTouch, aEvent) + * tStats.getToolDamagePerDropConversion()); + } + + @Mod.EventHandler + public float onBlockBreakSpeedEvent(float aDefault, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, + int aY, int aZ, byte aMetaData, PlayerEvent.BreakSpeed aEvent) { + IToolStats tStats = getToolStats(aStack); + return tStats == null ? aDefault + : tStats.getMiningSpeed(aBlock, aMetaData, aDefault, aPlayer, aPlayer.worldObj, aX, aY, aZ); + } + + @Override + public boolean onBlockStartBreak(ItemStack aStack, int aX, int aY, int aZ, EntityPlayer aPlayer) { + if (aPlayer.worldObj.isRemote) { + return false; + } + IToolStats tStats = getToolStats(aStack); + Block aBlock = aPlayer.worldObj.getBlock(aX, aY, aZ); + if (tStats.isChainsaw() && (aBlock instanceof IShearable target)) { + if ((target.isShearable(aStack, aPlayer.worldObj, aX, aY, aZ))) { + ArrayList drops = target.onSheared( + aStack, + aPlayer.worldObj, + aX, + aY, + aZ, + EnchantmentHelper.getEnchantmentLevel(Enchantment.fortune.effectId, aStack)); + for (ItemStack stack : drops) { + float f = 0.7F; + double d = itemRand.nextFloat() * f + (1.0F - f) * 0.5D; + double d1 = itemRand.nextFloat() * f + (1.0F - f) * 0.5D; + double d2 = itemRand.nextFloat() * f + (1.0F - f) * 0.5D; + EntityItem entityitem = new EntityItem(aPlayer.worldObj, aX + d, aY + d1, aZ + d2, stack); + entityitem.delayBeforeCanPickup = 10; + aPlayer.worldObj.spawnEntityInWorld(entityitem); + } + aPlayer.addStat(net.minecraft.stats.StatList.mineBlockStatArray[Block.getIdFromBlock(aBlock)], 1); + onBlockDestroyed(aStack, aPlayer.worldObj, aBlock, aX, aY, aZ, aPlayer); + } + return false; + } + return super.onBlockStartBreak(aStack, aX, aY, aZ, aPlayer); + } + + @Override + public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { + IToolStats tStats = getToolStats(aStack); + if (tStats == null || !isItemStackUsable(aStack)) return true; + GTUtility.doSoundAtClient(tStats.getEntityHitSound(), 1, 1.0F); + if (super.onLeftClickEntity(aStack, aPlayer, aEntity)) return true; + if (aEntity.canAttackWithItem() && !aEntity.hitByEntity(aPlayer)) { + float tMagicDamage = tStats.getMagicDamageAgainstEntity( + aEntity instanceof EntityLivingBase + ? EnchantmentHelper.getEnchantmentModifierLiving(aPlayer, (EntityLivingBase) aEntity) + : 0.0F, + aEntity, + aStack, + aPlayer), + tDamage = tStats.getNormalDamageAgainstEntity( + (float) aPlayer.getEntityAttribute(SharedMonsterAttributes.attackDamage) + .getAttributeValue() + getToolCombatDamage(aStack), + aEntity, + aStack, + aPlayer); + if (tDamage + tMagicDamage > 0.0F) { + boolean tCriticalHit = aPlayer.fallDistance > 0.0F && !aPlayer.onGround + && !aPlayer.isOnLadder() + && !aPlayer.isInWater() + && !aPlayer.isPotionActive(Potion.blindness) + && aPlayer.ridingEntity == null + && aEntity instanceof EntityLivingBase; + if (tCriticalHit && tDamage > 0.0F) tDamage *= 1.5F; + tDamage += tMagicDamage; + if (aEntity.attackEntityFrom(tStats.getDamageSource(aPlayer, aEntity), tDamage)) { + if (aEntity instanceof EntityLivingBase) + aEntity.setFire(EnchantmentHelper.getFireAspectModifier(aPlayer) * 4); + int tKnockcack = (aPlayer.isSprinting() ? 1 : 0) + (aEntity instanceof EntityLivingBase + ? EnchantmentHelper.getKnockbackModifier(aPlayer, (EntityLivingBase) aEntity) + : 0); + if (tKnockcack > 0) { + aEntity.addVelocity( + -MathHelper.sin(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F, + 0.1D, + MathHelper.cos(aPlayer.rotationYaw * (float) Math.PI / 180.0F) * tKnockcack * 0.5F); + aPlayer.motionX *= 0.6D; + aPlayer.motionZ *= 0.6D; + aPlayer.setSprinting(false); + } + if (tCriticalHit) aPlayer.onCriticalHit(aEntity); + if (tMagicDamage > 0.0F) aPlayer.onEnchantmentCritical(aEntity); + if (tDamage >= 18.0F) aPlayer.triggerAchievement(AchievementList.overkill); + aPlayer.setLastAttacker(aEntity); + if (aEntity instanceof EntityLivingBase) + EnchantmentHelper.func_151384_a((EntityLivingBase) aEntity, aPlayer); + EnchantmentHelper.func_151385_b(aPlayer, aEntity); + if (aEntity instanceof EntityLivingBase) + aPlayer.addStat(StatList.damageDealtStat, Math.round(tDamage * 10.0F)); + aEntity.hurtResistantTime = Math + .max(1, tStats.getHurtResistanceTime(aEntity.hurtResistantTime, aEntity)); + aPlayer.addExhaustion(0.3F); + doDamage(aStack, tStats.getToolDamagePerEntityAttack()); + } + } + } + if (aStack.stackSize <= 0) aPlayer.destroyCurrentEquippedItem(); + return true; + } + + @Override + public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + IToolStats tStats = getToolStats(aStack); + if (tStats != null && tStats.canBlock()) aPlayer.setItemInUse(aStack, 72000); + return super.onItemRightClick(aStack, aWorld, aPlayer); + } + + @Override + public final int getMaxItemUseDuration(ItemStack aStack) { + return 72000; + } + + @Override + public final EnumAction getItemUseAction(ItemStack aStack) { + IToolStats tStats = getToolStats(aStack); + if (tStats != null && tStats.canBlock()) return EnumAction.block; + return EnumAction.none; + } + + @Override + @SideOnly(Side.CLIENT) + public final void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { + for (int i = 0; i < 32766; i += 2) { + if (getToolStats(new ItemStack(this, 1, i)) != null) { + ItemStack tStack = new ItemStack(this, 1, i); + isItemStackUsable(tStack); + aList.add(tStack); + aList.add(getToolWithStats(i, 1, Materials.Neutronium, Materials.Neutronium, null)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public final void registerIcons(IIconRegister aIconRegister) { + // + } + + @Override + public final IIcon getIconFromDamage(int aMetaData) { + return null; + } + + @Override + public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + long tMaxDamage = getToolMaxDamage(aStack); + Materials tMaterial = getPrimaryMaterial(aStack); + IToolStats tStats = getToolStats(aStack); + int tOffset = getElectricStats(aStack) != null ? 2 : 1; + if (tStats != null) { + if (tStats instanceof ToolTurbine) { + + // Durability -> toolMaxDamage + // % Efficiency -> toolCombatDamage -> toolQuality + // Optimal Flow -> toolSpeed + // EU/t -> toolCombatDamage, toolSpeed + // Overflow Tier -> toolQuality + float aBaseEff = (5f + getToolCombatDamage(aStack)) * 1000f; + + // It was noted by IntelliJ that replacing ((GT_MetaGenerated_Tool) aStack.getItem()) with + // GT_MetaGenerated_Tool can have side effects. This refactoring will need tests. + @SuppressWarnings("AccessStaticViaInstance") + float aOptFlow = (Math.max( + Float.MIN_NORMAL, + ((MetaGeneratedTool) aStack.getItem()).getToolStats(aStack) + .getSpeedMultiplier() + * ((MetaGeneratedTool) aStack.getItem()).getPrimaryMaterial(aStack).mToolSpeed + * 50F)); + aList.add( + tOffset + 0, + EnumChatFormatting.GRAY + String.format( + transItem("001", "Durability: %s/%s"), + "" + EnumChatFormatting.GREEN + formatNumbers(tMaxDamage - getToolDamage(aStack)) + " ", + " " + formatNumbers(tMaxDamage)) + EnumChatFormatting.GRAY); + aList.add( + tOffset + 1, + EnumChatFormatting.GRAY + String.format( + transItem("002", "%s lvl %s"), + tMaterial.mLocalizedName + EnumChatFormatting.YELLOW, + "" + getHarvestLevel(aStack, "")) + EnumChatFormatting.GRAY); + aList.add( + tOffset + 2, + EnumChatFormatting.WHITE + + String.format( + transItem("005", "Turbine Efficiency: %s"), + "" + EnumChatFormatting.BLUE + (50.0F + (10.0F * getToolCombatDamage(aStack)))) + + "%" + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 3, + EnumChatFormatting.WHITE + String.format( + transItem("006", "Optimal Steam flow: %s L/t"), + "" + EnumChatFormatting.GOLD + + formatNumbers( + GTUtility.safeInt( + (long) (Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed + * (1000 * getPrimaryMaterial(aStack).mSteamMultiplier / 20))))) + + EnumChatFormatting.GRAY)); + aList.add( + tOffset + 4, + EnumChatFormatting.WHITE + String.format( + transItem("900", "Energy from Optimal Steam Flow: %s EU/t"), + "" + EnumChatFormatting.GOLD + + formatNumbers( + GTUtility.safeInt( + (long) (Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed + * (1000 * getPrimaryMaterial(aStack).mSteamMultiplier / 20)) + * (50.0F + (10.0F * getToolCombatDamage(aStack))) + / 200))) + + EnumChatFormatting.GRAY)); + { + float[] calculatedFlow = calculateLooseFlow(aOptFlow, aBaseEff); + float aOptFlowLoose = calculatedFlow[0]; + float aBaseEffLoose = calculatedFlow[1]; + + aList.add( + tOffset + 5, + EnumChatFormatting.AQUA + String.format( + transItem("500", "Turbine Efficiency (Loose): %s"), + "" + EnumChatFormatting.BLUE + (long) aBaseEffLoose / 100 + "%" + EnumChatFormatting.GRAY)); + aList.add( + tOffset + 6, + EnumChatFormatting.AQUA + String.format( + transItem("501", "Optimal Steam flow (Loose): %s L/t"), + "" + EnumChatFormatting.GOLD + + formatNumbers(((long) aOptFlowLoose * getPrimaryMaterial(aStack).mSteamMultiplier)) + + EnumChatFormatting.GRAY)); + aList.add( + tOffset + 7, + EnumChatFormatting.AQUA + String.format( + transItem("901", "Energy from Optimal Steam Flow (Loose): %s EU/t"), + "" + EnumChatFormatting.GOLD + + formatNumbers( + ((long) aOptFlowLoose * getPrimaryMaterial(aStack).mSteamMultiplier / 10000) + * ((long) aBaseEffLoose / 2)) + + EnumChatFormatting.GRAY)); + aList.add( + tOffset + 8, + EnumChatFormatting.GRAY + "(Superheated Steam EU values are 2x those of Steam)"); + } + aList.add( + tOffset + 9, + EnumChatFormatting.WHITE + String.format( + transItem("902", "Optimal SC Steam flow: %s L/t"), + "" + EnumChatFormatting.GOLD + + formatNumbers( + GTUtility.safeInt( + (long) (Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed + * (1000f / 20f))))) + + EnumChatFormatting.GRAY)); + aList.add( + tOffset + 10, + EnumChatFormatting.WHITE + String.format( + transItem("903", "Energy from Optimal SC Steam Flow: %s EU/t"), + "" + EnumChatFormatting.GOLD + + formatNumbers( + GTUtility.safeInt( + (long) (Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed + * (1000f / 20f)) + * (50.0F + (10.0F * getToolCombatDamage(aStack)))))) + + EnumChatFormatting.GRAY)); + aList.add( + tOffset + 11, + EnumChatFormatting.LIGHT_PURPLE + String.format( + transItem("007", "Energy from Optimal Gas Flow: %s EU/t"), + "" + EnumChatFormatting.GOLD + + formatNumbers( + GTUtility.safeInt( + (long) (Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed + * 50 + * getPrimaryMaterial(aStack).mGasMultiplier) + * (50.0F + (10.0F * getToolCombatDamage(aStack))) + / 100))) + + EnumChatFormatting.GRAY)); + aList.add( + tOffset + 12, + EnumChatFormatting.LIGHT_PURPLE + String.format( + transItem("008", "Energy from Optimal Plasma Flow: %s EU/t"), + "" + EnumChatFormatting.GOLD + + formatNumbers( + GTUtility.safeInt( + (long) (Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed + * 2000 + * getPrimaryMaterial(aStack).mPlasmaMultiplier) + * (50.0F + (10.0F * getToolCombatDamage(aStack))) + * (1.05 / 100)))) + + EnumChatFormatting.GRAY)); + aList.add( + tOffset + 14, + EnumChatFormatting.GRAY + "(EU/t values include efficiency and are not 100% accurate)"); + int toolQualityLevel = MetaGeneratedTool.getPrimaryMaterial(aStack).mToolQuality; + int overflowMultiplier = 0; + if (toolQualityLevel >= 6) { + overflowMultiplier = 3; + } else if (toolQualityLevel >= 3) { + overflowMultiplier = 2; + } else { + overflowMultiplier = 1; + } + aList.add( + tOffset + 13, + EnumChatFormatting.LIGHT_PURPLE + String.format( + transItem("502", "Overflow Efficiency Tier: %s"), + "" + EnumChatFormatting.GOLD + overflowMultiplier + EnumChatFormatting.GRAY)); + + } else { + aList.add( + tOffset, + EnumChatFormatting.WHITE + String.format( + transItem("001", "Durability: %s/%s"), + "" + EnumChatFormatting.GREEN + formatNumbers(tMaxDamage - getToolDamage(aStack)) + " ", + " " + formatNumbers(tMaxDamage)) + EnumChatFormatting.GRAY); + aList.add( + tOffset + 1, + EnumChatFormatting.WHITE + String.format( + transItem("002", "%s lvl %s"), + tMaterial.mLocalizedName + EnumChatFormatting.YELLOW, + "" + getHarvestLevel(aStack, "")) + EnumChatFormatting.GRAY); + aList.add( + tOffset + 2, + EnumChatFormatting.WHITE + String.format( + transItem("003", "Attack Damage: %s"), + "" + EnumChatFormatting.BLUE + getToolCombatDamage(aStack)) + EnumChatFormatting.GRAY); + aList.add( + tOffset + 3, + EnumChatFormatting.WHITE + + String.format( + transItem("004", "Mining Speed: %s"), + "" + EnumChatFormatting.GOLD + + Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed)) + + EnumChatFormatting.GRAY); + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if (aNBT != null && aNBT.hasKey("Heat")) { + int tHeat = aNBT.getInteger("Heat"); + long tWorldTime = aPlayer.getEntityWorld() + .getWorldTime(); + if (aNBT.hasKey("HeatTime")) { + long tHeatTime = aNBT.getLong("HeatTime"); + if (tWorldTime > (tHeatTime + 10)) { + tHeat = (int) (tHeat - ((tWorldTime - tHeatTime) / 10)); + if (tHeat < 300 && tHeat > -10000) tHeat = 300; + } + aNBT.setLong("HeatTime", tWorldTime); + if (tHeat > -10000) aNBT.setInteger("Heat", tHeat); + } + + aList.add( + tOffset + 3, + EnumChatFormatting.RED + "Heat: " + + aNBT.getInteger("Heat") + + " K" + + EnumChatFormatting.GRAY); + } + } + } + } + } + + @Override + public Long[] getFluidContainerStats(ItemStack aStack) { + return null; + } + + @Override + public Long[] getElectricStats(ItemStack aStack) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if (aNBT != null && aNBT.getBoolean("Electric")) return new Long[] { aNBT.getLong("MaxCharge"), + aNBT.getLong("Voltage"), aNBT.getLong("Tier"), aNBT.getLong("SpecialData") }; + } + return null; + } + + public float getToolCombatDamage(ItemStack aStack) { + IToolStats tStats = getToolStats(aStack); + if (tStats == null) return 0; + return tStats.getBaseDamage() + getPrimaryMaterial(aStack).mToolQuality; + } + + @Override + public final boolean doDamageToItem(ItemStack aStack, int aVanillaDamage) { + return doDamage(aStack, aVanillaDamage * 100L); + } + + public final boolean doDamage(ItemStack aStack, long aAmount) { + if (!isItemStackUsable(aStack)) return false; + Long[] tElectric = getElectricStats(aStack); + if (tElectric == null) { + long tNewDamage = getToolDamage(aStack) + aAmount; + setToolDamage(aStack, tNewDamage); + if (tNewDamage >= getToolMaxDamage(aStack)) { + IToolStats tStats = getToolStats(aStack); + if (tStats == null || GTUtility.setStack(aStack, tStats.getBrokenItem(aStack)) == null) { + if (tStats != null) GTUtility.doSoundAtClient(tStats.getBreakingSound(), 1, 1.0F); + if (aStack.stackSize > 0) aStack.stackSize--; + } + } + return true; + } + if (use(aStack, (int) aAmount, null)) { + if (java.util.concurrent.ThreadLocalRandom.current() + .nextInt(0, 25) == 0) { + long tNewDamage = getToolDamage(aStack) + aAmount; + setToolDamage(aStack, tNewDamage); + if (tNewDamage >= getToolMaxDamage(aStack)) { + IToolStats tStats = getToolStats(aStack); + if (tStats == null || GTUtility.setStack(aStack, tStats.getBrokenItem(aStack)) == null) { + if (tStats != null) GTUtility.doSoundAtClient(tStats.getBreakingSound(), 1, 1.0F); + if (aStack.stackSize > 0) aStack.stackSize--; + } + } + } + return true; + } + return false; + } + + @Override + public float getDigSpeed(ItemStack aStack, Block aBlock, int aMetaData) { + if (!isItemStackUsable(aStack)) return 0.0F; + IToolStats tStats = getToolStats(aStack); + if (tStats == null || Math.max(0, getHarvestLevel(aStack, "")) < aBlock.getHarvestLevel(aMetaData)) return 0.0F; + return tStats.isMinableBlock(aBlock, (byte) aMetaData) + ? Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) + : 0.0F; + } + + @Override + public final boolean canHarvestBlock(Block aBlock, ItemStack aStack) { + return getDigSpeed(aStack, aBlock, (byte) 0) > 0.0F; + } + + @Override + public final int getHarvestLevel(ItemStack aStack, String aToolClass) { + IToolStats tStats = getToolStats(aStack); + return tStats == null ? -1 : tStats.getBaseQuality() + getPrimaryMaterial(aStack).mToolQuality; + } + + @Override + public boolean onBlockDestroyed(ItemStack aStack, World aWorld, Block aBlock, int aX, int aY, int aZ, + EntityLivingBase aPlayer) { + if (!isItemStackUsable(aStack)) return false; + IToolStats tStats = getToolStats(aStack); + if (tStats == null) return false; + GTUtility.doSoundAtClient(tStats.getMiningSound(), 1, 1.0F); + doDamage( + aStack, + (int) Math.max(1, aBlock.getBlockHardness(aWorld, aX, aY, aZ) * tStats.getToolDamagePerBlockBreak())); + return getDigSpeed(aStack, aBlock, aWorld.getBlockMetadata(aX, aY, aZ)) > 0.0F; + } + + @Override + public final ItemStack getContainerItem(ItemStack aStack) { + return getContainerItem(aStack, true); + } + + @Override + public final boolean hasContainerItem(ItemStack aStack) { + return getContainerItem(aStack, false) != null; + } + + private ItemStack getContainerItem(ItemStack aStack, boolean playSound) { + if (!isItemStackUsable(aStack)) return null; + aStack = GTUtility.copyAmount(1, aStack); + IToolStats tStats = getToolStats(aStack); + if (tStats == null) return null; + doDamage(aStack, tStats.getToolDamagePerContainerCraft()); + aStack = aStack.stackSize > 0 ? aStack : null; + if (playSound && GTMod.gregtechproxy.mTicksUntilNextCraftSound <= 0) { + GTMod.gregtechproxy.mTicksUntilNextCraftSound = 10; + String sound = (aStack == null) ? tStats.getBreakingSound() : tStats.getCraftingSound(); + GTUtility.doSoundAtClient(sound, 1, 1.0F); + } + return aStack; + } + + public IToolStats getToolStats(ItemStack aStack) { + isItemStackUsable(aStack); + return getToolStatsInternal(aStack); + } + + public byte getToolMaxMode(ItemStack aStack) { + IToolStats stats = getToolStats(aStack); + if (stats != null) { + return stats.getMaxMode(); + } + return 1; + } + + private IToolStats getToolStatsInternal(ItemStack aStack) { + return aStack == null ? null : mToolStats.get((short) aStack.getItemDamage()); + } + + @Override + public float getSaplingModifier(ItemStack aStack, World aWorld, EntityPlayer aPlayer, int aX, int aY, int aZ) { + IToolStats tStats = getToolStats(aStack); + return tStats != null && tStats.isGrafter() ? Math.min(100.0F, (1 + getHarvestLevel(aStack, "")) * 20.0F) + : 0.0F; + } + + @Override + public boolean canWhack(EntityPlayer aPlayer, ItemStack aStack, int aX, int aY, int aZ) { + if (!isItemStackUsable(aStack)) return false; + IToolStats tStats = getToolStats(aStack); + return tStats != null && tStats.isCrowbar(); + } + + @Override + public void onWhack(EntityPlayer aPlayer, ItemStack aStack, int aX, int aY, int aZ) { + IToolStats tStats = getToolStats(aStack); + if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack()); + } + + @Override + public boolean canWrench(EntityPlayer player, int x, int y, int z) { + if (player == null) return false; + return canWrench(player.getHeldItem(), player, x, y, z); + } + + @Override + public boolean canWrench(ItemStack wrench, EntityPlayer player, int x, int y, int z) { + if (wrench == null) return false; + if (!isItemStackUsable(wrench)) return false; + IToolStats tStats = getToolStats(player.getCurrentEquippedItem()); + return tStats != null && tStats.isWrench(); + } + + @Override + public void wrenchUsed(EntityPlayer player, int x, int y, int z) { + if (player == null) return; + if (player.getCurrentEquippedItem() == null) return; + IToolStats tStats = getToolStats(player.getCurrentEquippedItem()); + if (tStats != null) doDamage(player.getCurrentEquippedItem(), tStats.getToolDamagePerEntityAttack()); + } + + @Override + public boolean canUse(ItemStack stack, EntityPlayer player, int x, int y, int z) { + return canWrench(player, x, y, z); + } + + // ProjectRed screwdriver + @Override + public boolean canUse(EntityPlayer player, ItemStack stack) { + if (player == null) return false; + if (GTUtility.isStackInvalid(stack) || !isItemStackUsable(stack)) return false; + IToolStats tStats = getToolStats(stack); + return tStats != null && tStats.isScrewdriver(); + } + + @Override + public void damageScrewdriver(EntityPlayer player, ItemStack stack) { + if (player == null) return; + if (GTUtility.isStackInvalid(stack) || !isItemStackUsable(stack)) return; + IToolStats tStats = getToolStats(stack); + if (tStats != null) doDamage(stack, tStats.getToolDamagePerEntityAttack()); + } + + @Override + public void used(ItemStack stack, EntityPlayer player, int x, int y, int z) { + wrenchUsed(player, x, y, z); + } + + @Override + public boolean shouldHideFacades(ItemStack stack, EntityPlayer player) { + if (player == null) return false; + if (player.getCurrentEquippedItem() == null) return false; + if (!isItemStackUsable(player.getCurrentEquippedItem())) return false; + IToolStats tStats = getToolStats(player.getCurrentEquippedItem()); + return tStats.isWrench(); + } + + @Override + public boolean canLink(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) { + if (!isItemStackUsable(aStack)) return false; + IToolStats tStats = getToolStats(aStack); + return tStats != null && tStats.isCrowbar(); + } + + @Override + public void onLink(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) { + IToolStats tStats = getToolStats(aStack); + if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack()); + } + + @Override + public boolean canBoost(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) { + if (!isItemStackUsable(aStack)) return false; + IToolStats tStats = getToolStats(aStack); + return tStats != null && tStats.isCrowbar(); + } + + @Override + public void onBoost(EntityPlayer aPlayer, ItemStack aStack, EntityMinecart cart) { + IToolStats tStats = getToolStats(aStack); + if (tStats != null) doDamage(aStack, tStats.getToolDamagePerEntityAttack()); + } + + @Override + public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + IToolStats tStats = getToolStats(aStack); + if (tStats != null && aPlayer != null) tStats.onToolCrafted(aStack, aPlayer); + super.onCreated(aStack, aWorld, aPlayer); + } + + @Override + public final boolean doesContainerItemLeaveCraftingGrid(ItemStack aStack) { + return false; + } + + @Override + public final int getItemStackLimit(ItemStack aStack) { + return 1; + } + + @Override + public boolean isFull3D() { + return true; + } + + @Override + public boolean isItemStackUsable(ItemStack aStack) { + IToolStats tStats = getToolStatsInternal(aStack); + if (aStack.getItemDamage() % 2 != 0 || tStats == null) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) aNBT.removeTag("ench"); + return false; + } + Materials aMaterial = getPrimaryMaterial(aStack); + HashMap tMap = new HashMap<>(), tResult = new HashMap<>(); + if (aMaterial.mEnchantmentTools != null) { + tMap.put(aMaterial.mEnchantmentTools.effectId, (int) aMaterial.mEnchantmentToolsLevel); + if (aMaterial.mEnchantmentTools == Enchantment.fortune) + tMap.put(Enchantment.looting.effectId, (int) aMaterial.mEnchantmentToolsLevel); + if (aMaterial.mEnchantmentTools == Enchantment.knockback) + tMap.put(Enchantment.power.effectId, (int) aMaterial.mEnchantmentToolsLevel); + if (aMaterial.mEnchantmentTools == Enchantment.fireAspect) + tMap.put(Enchantment.flame.effectId, (int) aMaterial.mEnchantmentToolsLevel); + } + Enchantment[] tEnchants = tStats.getEnchantments(aStack); + int[] tLevels = tStats.getEnchantmentLevels(aStack); + for (int i = 0; i < tEnchants.length; i++) if (tLevels[i] > 0) { + Integer tLevel = tMap.get(tEnchants[i].effectId); + tMap.put( + tEnchants[i].effectId, + tLevel == null ? tLevels[i] : tLevel == tLevels[i] ? tLevel + 1 : Math.max(tLevel, tLevels[i])); + } + for (Entry tEntry : tMap.entrySet()) { + if (tEntry.getKey() == 33 || (tEntry.getKey() == 20 && tEntry.getValue() > 2) + || tEntry.getKey() == EnchantmentRadioactivity.INSTANCE.effectId) + tResult.put(tEntry.getKey(), tEntry.getValue()); + else switch (Enchantment.enchantmentsList[tEntry.getKey()].type) { + case weapon: + if (tStats.isWeapon()) tResult.put(tEntry.getKey(), tEntry.getValue()); + break; + case all: + tResult.put(tEntry.getKey(), tEntry.getValue()); + break; + case armor: + case armor_feet: + case armor_head: + case armor_legs: + case armor_torso: + break; + case bow: + if (tStats.isRangedWeapon()) tResult.put(tEntry.getKey(), tEntry.getValue()); + break; + case breakable: + break; + case fishing_rod: + break; + case digger: + if (tStats.isMiningTool()) tResult.put(tEntry.getKey(), tEntry.getValue()); + break; + } + } + EnchantmentHelper.setEnchantments(tResult, aStack); + return true; + } + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + + String result = super.getItemStackDisplayName(aStack); + IToolStats toolStats = getToolStats(aStack); + if (toolStats != null) { + String toolName = toolStats.getToolTypeName(); + if (toolName == null) return result; + + String key = "gt." + toolName + ".mode." + getToolMode(aStack); + if (StatCollector.canTranslate(key)) { + result += " (" + StatCollector.translateToLocal(key) + ")"; + } + } + return result; + + } + + @Override + public short getChargedMetaData(ItemStack aStack) { + return (short) (aStack.getItemDamage() - (aStack.getItemDamage() % 2)); + } + + @Override + public short getEmptyMetaData(ItemStack aStack) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) aNBT.removeTag("ench"); + return (short) (aStack.getItemDamage() + 1 - (aStack.getItemDamage() % 2)); + } + + @Override + public int getItemEnchantability() { + return 0; + } + + @Override + public boolean isBookEnchantable(ItemStack aStack, ItemStack aBook) { + return false; + } + + @Override + public boolean getIsRepairable(ItemStack aStack, ItemStack aMaterial) { + return false; + } +} diff --git a/src/main/java/gregtech/api/logic/AbstractProcessingLogic.java b/src/main/java/gregtech/api/logic/AbstractProcessingLogic.java index 3c05d8bed0..ed953d9477 100644 --- a/src/main/java/gregtech/api/logic/AbstractProcessingLogic.java +++ b/src/main/java/gregtech/api/logic/AbstractProcessingLogic.java @@ -11,9 +11,9 @@ import gregtech.api.interfaces.tileentity.IVoidable; import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.ParallelHelper; /** * Logic class to calculate result of recipe check from inputs. @@ -23,7 +23,7 @@ public abstract class AbstractProcessingLogic

> recipeMapSupplier; - protected GT_Recipe lastRecipe; + protected GTRecipe lastRecipe; protected RecipeMap lastRecipeMap; protected ItemStack[] outputItems; protected FluidStack[] outputFluids; @@ -229,8 +229,8 @@ public abstract class AbstractProcessingLogic

= 0 && tSlot < inventory.getSlots()) { - inventory.setStackInSlot(tSlot, GT_Utility.loadItem(tNBT)); + inventory.setStackInSlot(tSlot, GTUtility.loadItem(tNBT)); } } } diff --git a/src/main/java/gregtech/api/logic/MuTEProcessingLogic.java b/src/main/java/gregtech/api/logic/MuTEProcessingLogic.java index da53c8875d..0d6bf4cac9 100644 --- a/src/main/java/gregtech/api/logic/MuTEProcessingLogic.java +++ b/src/main/java/gregtech/api/logic/MuTEProcessingLogic.java @@ -24,10 +24,10 @@ import gregtech.api.logic.interfaces.ProcessingLogicHost; import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.ParallelHelper; /** * Processing logic class, dedicated for MultiTileEntities. @@ -81,13 +81,13 @@ public class MuTEProcessingLogic

> extends Abstr } @Nonnull - protected CheckRecipeResult processRecipe(@Nonnull List recipes, @Nonnull ItemInventoryLogic itemInput, + protected CheckRecipeResult processRecipe(@Nonnull List recipes, @Nonnull ItemInventoryLogic itemInput, @Nonnull FluidInventoryLogic fluidInput) { CheckRecipeResult result = CheckRecipeResultRegistry.INTERNAL_ERROR; - for (GT_Recipe recipe : recipes) { + for (GTRecipe recipe : recipes) { Objects.requireNonNull(recipe); - GT_ParallelHelper helper = createParallelHelper(recipe, itemInput, fluidInput); - GT_OverclockCalculator calculator = createOverclockCalculator(recipe); + ParallelHelper helper = createParallelHelper(recipe, itemInput, fluidInput); + OverclockCalculator calculator = createOverclockCalculator(recipe); helper.setCalculator(calculator); helper.build(); result = helper.getResult(); @@ -112,9 +112,9 @@ public class MuTEProcessingLogic

> extends Abstr } @Nonnull - protected GT_ParallelHelper createParallelHelper(@Nonnull GT_Recipe recipe, @Nonnull ItemInventoryLogic itemInput, + protected ParallelHelper createParallelHelper(@Nonnull GTRecipe recipe, @Nonnull ItemInventoryLogic itemInput, @Nonnull FluidInventoryLogic fluidInput) { - return new GT_ParallelHelper().setRecipe(recipe) + return new ParallelHelper().setRecipe(recipe) .setItemInputInventory(itemInput) .setFluidInputInventory(fluidInput) .setAvailableEUt(availableVoltage * availableAmperage) @@ -197,7 +197,7 @@ public class MuTEProcessingLogic

> extends Abstr if (outputItems != null) { NBTTagList itemOutputsNBT = new NBTTagList(); for (ItemStack item : outputItems) { - itemOutputsNBT.appendTag(GT_Utility.saveItem(item)); + itemOutputsNBT.appendTag(GTUtility.saveItem(item)); } logicNBT.setTag("itemOutputs", itemOutputsNBT); } @@ -226,7 +226,7 @@ public class MuTEProcessingLogic

> extends Abstr NBTTagList itemOutputsNBT = logicNBT.getTagList("itemOutputs", TAG_COMPOUND); outputItems = new ItemStack[itemOutputsNBT.tagCount()]; for (int i = 0; i < itemOutputsNBT.tagCount(); i++) { - outputItems[i] = GT_Utility.loadItem(itemOutputsNBT.getCompoundTagAt(i)); + outputItems[i] = GTUtility.loadItem(itemOutputsNBT.getCompoundTagAt(i)); } } if (logicNBT.hasKey("fluidOutputs")) { diff --git a/src/main/java/gregtech/api/logic/PowerLogic.java b/src/main/java/gregtech/api/logic/PowerLogic.java index ad19987a76..afc1877deb 100644 --- a/src/main/java/gregtech/api/logic/PowerLogic.java +++ b/src/main/java/gregtech/api/logic/PowerLogic.java @@ -8,12 +8,12 @@ import javax.annotation.Nonnull; import net.minecraft.nbt.NBTTagCompound; -import gregtech.api.enums.GT_Values.NBT; +import gregtech.api.enums.GTValues.NBT; /** * Power logic for machines. This is used to store all the important variables for a machine to have energy and use it * in any way. - * + * * @author BlueWeabo, Maxim */ public class PowerLogic { @@ -122,7 +122,7 @@ public class PowerLogic { /** * Injecting energy in the multiblock ampere per ampere until full or until we have added the maximum possible * amperes for this tick - * + * * @param voltage At what voltage are the amps? * @param availableAmperage How much amperage do we have available * @return Amount of amperes used @@ -218,7 +218,7 @@ public class PowerLogic { /** * Saves the power logic to its own nbt tag before saving it to the given one. - * + * * @param nbt Tag where you want to save the power logic tag to. */ public void saveToNBT(NBTTagCompound nbt) { @@ -233,7 +233,7 @@ public class PowerLogic { /** * Loads the power logic from its own nbt after getting it from the given one - * + * * @param nbt Tag where the power logic tag was saved to */ public void loadFromNBT(NBTTagCompound nbt) { diff --git a/src/main/java/gregtech/api/logic/ProcessingLogic.java b/src/main/java/gregtech/api/logic/ProcessingLogic.java index 4d203ed80f..63c8f6494e 100644 --- a/src/main/java/gregtech/api/logic/ProcessingLogic.java +++ b/src/main/java/gregtech/api/logic/ProcessingLogic.java @@ -14,9 +14,9 @@ import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.CheckRecipeResultRegistry; import gregtech.api.recipe.check.SingleRecipeCheck; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.ParallelHelper; /** * Logic class to calculate result of recipe check from inputs, based on recipemap. @@ -119,10 +119,10 @@ public class ProcessingLogic extends AbstractProcessingLogic { recipeLockableMachine.getSingleRecipeCheck() .getRecipe()).checkRecipeResult; } - Stream matchedRecipes = findRecipeMatches(recipeMap); - Iterable recipeIterable = matchedRecipes::iterator; + Stream matchedRecipes = findRecipeMatches(recipeMap); + Iterable recipeIterable = matchedRecipes::iterator; CheckRecipeResult checkRecipeResult = CheckRecipeResultRegistry.NO_RECIPE; - for (GT_Recipe matchedRecipe : recipeIterable) { + for (GTRecipe matchedRecipe : recipeIterable) { CalculationResult foundResult = validateAndCalculateRecipe(matchedRecipe); if (foundResult.successfullyConsumedInputs) { // Successfully found and set recipe, so return it @@ -143,14 +143,14 @@ public class ProcessingLogic extends AbstractProcessingLogic { * @param recipe The recipe which will be checked and processed */ @Nonnull - private CalculationResult validateAndCalculateRecipe(@Nonnull GT_Recipe recipe) { + private CalculationResult validateAndCalculateRecipe(@Nonnull GTRecipe recipe) { CheckRecipeResult result = validateRecipe(recipe); if (!result.wasSuccessful()) { return CalculationResult.ofFailure(result); } - GT_ParallelHelper helper = createParallelHelper(recipe); - GT_OverclockCalculator calculator = createOverclockCalculator(recipe); + ParallelHelper helper = createParallelHelper(recipe); + OverclockCalculator calculator = createOverclockCalculator(recipe); helper.setCalculator(calculator); helper.build(); @@ -170,7 +170,7 @@ public class ProcessingLogic extends AbstractProcessingLogic { * Override this method if it doesn't work with normal recipemaps. */ @Nonnull - protected Stream findRecipeMatches(@Nullable RecipeMap map) { + protected Stream findRecipeMatches(@Nullable RecipeMap map) { if (map == null) { return Stream.empty(); } @@ -186,8 +186,8 @@ public class ProcessingLogic extends AbstractProcessingLogic { * Override to tweak parallel logic if needed. */ @Nonnull - protected GT_ParallelHelper createParallelHelper(@Nonnull GT_Recipe recipe) { - return new GT_ParallelHelper().setRecipe(recipe) + protected ParallelHelper createParallelHelper(@Nonnull GTRecipe recipe) { + return new ParallelHelper().setRecipe(recipe) .setItemInputs(inputItems) .setFluidInputs(inputFluids) .setAvailableEUt(availableVoltage * availableAmperage) diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java index 2bc560f8e7..aae3ddcebb 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java @@ -1,7 +1,7 @@ package gregtech.api.metatileentity; -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.GT_Values.NW; +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.enums.GTValues.NW; import java.util.ArrayList; import java.util.Arrays; @@ -25,8 +25,8 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.enums.SoundResource; import gregtech.api.enums.Textures; import gregtech.api.graphs.Lock; @@ -38,13 +38,13 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IDebugableTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity; -import gregtech.api.net.GT_Packet_TileEntity; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.net.GTPacketTileEntity; +import gregtech.api.objects.GTItemStack; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; import gregtech.common.covers.CoverInfo; import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; @@ -59,7 +59,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity public byte mConnections = IConnectable.NO_CONNECTION; protected MetaPipeEntity mMetaTileEntity; - private final int[] mTimeStatistics = new int[GregTech_API.TICKS_FOR_LAG_AVERAGING]; + private final int[] mTimeStatistics = new int[GregTechAPI.TICKS_FOR_LAG_AVERAGING]; private boolean hasTimeStatisticsStarted; private boolean mWorkUpdate = false, mWorks = true; private byte mColor = 0, oColor = 0, oStrongRedstone = 0, oRedstoneData = 63, oTextureData = 0, oUpdateData = 0, @@ -214,7 +214,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity | IConnectable.HAS_HARDENEDFOAM); } if (mTickTimer > 12 && oldConnections != mConnections) - GregTech_API.causeCableUpdate(worldObj, xCoord, yCoord, zCoord); + GregTechAPI.causeCableUpdate(worldObj, xCoord, yCoord, zCoord); } mMetaTileEntity.onPreTick(this, mTickTimer); if (!hasValidMetaTileEntity()) return; @@ -264,14 +264,14 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity } } catch (Throwable e) { e.printStackTrace(); - e.printStackTrace(GT_Log.err); + e.printStackTrace(GTLog.err); } if (isServerSide() && hasTimeStatisticsStarted && hasValidMetaTileEntity()) { tTime = System.nanoTime() - tTime; mTimeStatisticsIndex = (mTimeStatisticsIndex + 1) % mTimeStatistics.length; mTimeStatistics[mTimeStatisticsIndex] = (int) tTime; - if (tTime > 0 && tTime > (GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING * 1000000L) + if (tTime > 0 && tTime > (GregTechAPI.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING * 1000000L) && mTickTimer > 1000 && getMetaTileEntity().doTickProfilingMessageDuringThisTick() && mLagWarningCount++ < 10) @@ -296,7 +296,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity if (mSendClientData) { NW.sendPacketToAllPlayersInRange( worldObj, - new GT_Packet_TileEntity( + new GTPacketTileEntity( xCoord, (short) yCoord, zCoord, @@ -438,7 +438,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity tList.add( "Caused " + (mLagWarningCount >= 10 ? "more than 10" : mLagWarningCount) + " Lag Spike Warnings (anything taking longer than " - + GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING + + GregTechAPI.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING + "ms) on the Server."); } if (mMetaTileEntity != null) { @@ -491,13 +491,13 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity markDirty(); mInventoryChanged = true; if (canAccessData()) mMetaTileEntity - .setInventorySlotContents(aIndex, worldObj.isRemote ? aStack : GT_OreDictUnificator.setStack(true, aStack)); + .setInventorySlotContents(aIndex, worldObj.isRemote ? aStack : GTOreDictUnificator.setStack(true, aStack)); } @Override public String getInventoryName() { if (canAccessData()) return mMetaTileEntity.getInventoryName(); - if (GregTech_API.METATILEENTITIES[mID] != null) return GregTech_API.METATILEENTITIES[mID].getInventoryName(); + if (GregTechAPI.METATILEENTITIES[mID] != null) return GregTechAPI.METATILEENTITIES[mID].getInventoryName(); return ""; } @@ -776,7 +776,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity @Override public ArrayList getDrops() { - final ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, mID); + final ItemStack rStack = new ItemStack(GregTechAPI.sBlockMachines, 1, mID); final NBTTagCompound tNBT = new NBTTagCompound(); writeCoverNBT(tNBT, true); @@ -799,7 +799,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity // Configure Cover, sneak can also be: screwdriver, wrench, side cutter, soldering iron if (aPlayer.isSneaking()) { final ForgeDirection tSide = (getCoverIDAtSide(side) == 0) - ? GT_Utility.determineWrenchingSide(side, aX, aY, aZ) + ? GTUtility.determineWrenchingSide(side, aX, aY, aZ) : side; return (getCoverInfoAtSide(tSide).hasCoverGUI()); } else if (getCoverBehaviorAtSideNew(side).onCoverRightclickClient(side, this, aPlayer, aX, aY, aZ)) { @@ -810,19 +810,19 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); if (tCurrentItem != null) { if (getColorization() >= 0 - && GT_Utility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) { + && GTUtility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) { mMetaTileEntity.markDirty(); tCurrentItem.func_150996_a(Items.bucket); setColorization((byte) -1); return true; } - final ForgeDirection tSide = GT_Utility.determineWrenchingSide(side, aX, aY, aZ); - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)) { + final ForgeDirection tSide = GTUtility.determineWrenchingSide(side, aX, aY, aZ); + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sWrenchList)) { if (mMetaTileEntity.onWrenchRightClick(side, tSide, aPlayer, aX, aY, aZ, tCurrentItem)) { mMetaTileEntity.markDirty(); - GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer); - GT_Utility.sendSoundToPlayers( + GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer); + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, @@ -833,15 +833,15 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity } return true; } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList)) { + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sScrewdriverList)) { if (getCoverIDAtSide(side) == 0 && getCoverIDAtSide(tSide) != 0) { - if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) { + if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) { setCoverDataAtSide( tSide, getCoverInfoAtSide(tSide).onCoverScrewdriverClick(aPlayer, 0.5F, 0.5F, 0.5F)); mMetaTileEntity.onScrewdriverRightClick(tSide, aPlayer, aX, aY, aZ, tCurrentItem); mMetaTileEntity.markDirty(); - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, @@ -851,13 +851,13 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity zCoord); } } else { - if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { + if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { setCoverDataAtSide( side, getCoverInfoAtSide(side).onCoverScrewdriverClick(aPlayer, aX, aY, aZ)); mMetaTileEntity.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ, tCurrentItem); mMetaTileEntity.markDirty(); - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, @@ -870,21 +870,21 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity return true; } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sHardHammerList)) { + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sHardHammerList)) { return true; } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSoftHammerList)) { - if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSoftHammerList)) { + if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { if (mWorks) disableWorking(); else enableWorking(); mMetaTileEntity.markDirty(); - GT_Utility.sendChatToPlayer( + GTUtility.sendChatToPlayer( aPlayer, - GT_Utility.trans("090", "Machine Processing: ") - + (isAllowedToWork() ? GT_Utility.trans("088", "Enabled") - : GT_Utility.trans("087", "Disabled"))); - GT_Utility.sendSoundToPlayers( + GTUtility.trans("090", "Machine Processing: ") + + (isAllowedToWork() ? GTUtility.trans("088", "Enabled") + : GTUtility.trans("087", "Disabled"))); + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, @@ -896,11 +896,11 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity return true; } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList)) { + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sWireCutterList)) { if (mMetaTileEntity.onWireCutterRightClick(side, tSide, aPlayer, aX, aY, aZ, tCurrentItem)) { mMetaTileEntity.markDirty(); // logic handled internally - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, @@ -913,11 +913,11 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity return true; } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) { + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSolderingToolList)) { if (mMetaTileEntity.onSolderingToolRightClick(side, tSide, aPlayer, aX, aY, aZ, tCurrentItem)) { mMetaTileEntity.markDirty(); // logic handled internally - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_BATTERY_USE, 1.0F, @@ -925,16 +925,16 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity xCoord, yCoord, zCoord); - } else if (GT_ModHandler.useSolderingIron(tCurrentItem, aPlayer)) { + } else if (GTModHandler.useSolderingIron(tCurrentItem, aPlayer)) { mMetaTileEntity.markDirty(); mStrongRedstone ^= tSide.flag; - GT_Utility.sendChatToPlayer( + GTUtility.sendChatToPlayer( aPlayer, - GT_Utility.trans("091", "Redstone Output at Side ") + tSide - + GT_Utility.trans("092", " set to: ") - + ((mStrongRedstone & tSide.flag) != 0 ? GT_Utility.trans("093", "Strong") - : GT_Utility.trans("094", "Weak"))); - GT_Utility.sendSoundToPlayers( + GTUtility.trans("091", "Redstone Output at Side ") + tSide + + GTUtility.trans("092", " set to: ") + + ((mStrongRedstone & tSide.flag) != 0 ? GTUtility.trans("093", "Strong") + : GTUtility.trans("094", "Weak"))); + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_BATTERY_USE, 3.0F, @@ -954,17 +954,17 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity final CoverInfo coverInfo = getCoverInfoAtSide(coverSide); if (coverInfo.getCoverID() == 0) { - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCovers.keySet())) { - final GT_CoverBehaviorBase coverBehavior = GregTech_API.getCoverBehaviorNew(tCurrentItem); + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sCovers.keySet())) { + final CoverBehaviorBase coverBehavior = GregTechAPI.getCoverBehaviorNew(tCurrentItem); if (coverBehavior.isCoverPlaceable(coverSide, tCurrentItem, this) - && mMetaTileEntity.allowCoverOnSide(coverSide, new GT_ItemStack(tCurrentItem))) { + && mMetaTileEntity.allowCoverOnSide(coverSide, new GTItemStack(tCurrentItem))) { setCoverItemAtSide(coverSide, tCurrentItem); coverBehavior.onPlayerAttach(aPlayer, tCurrentItem, this, side); mMetaTileEntity.markDirty(); if (!aPlayer.capabilities.isCreativeMode) tCurrentItem.stackSize--; - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, @@ -976,9 +976,9 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity return true; } } else { - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCrowbarList)) { - if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { - GT_Utility.sendSoundToPlayers( + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sCrowbarList)) { + if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { + GTUtility.sendSoundToPlayers( worldObj, SoundResource.RANDOM_BREAK, 1.0F, @@ -993,7 +993,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity } } } else if (aPlayer.isSneaking()) { // Sneak click, no tool -> open cover config or turn back. - side = (getCoverIDAtSide(side) == 0) ? GT_Utility.determineWrenchingSide(side, aX, aY, aZ) : side; + side = (getCoverIDAtSide(side) == 0) ? GTUtility.determineWrenchingSide(side, aX, aY, aZ) : side; final CoverInfo coverInfo = getCoverInfoAtSide(side); return coverInfo.isValid() && coverInfo.onCoverShiftRightClick(aPlayer); } @@ -1064,7 +1064,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity final CoverInfo coverInfo = getCoverInfoAtSide(ForgeDirection.getOrientation(ordinalSide)); if (canAccessData() && (coverInfo.letsItemsOut(-1) || coverInfo.letsItemsIn(-1))) return mMetaTileEntity.getAccessibleSlotsFromSide(ordinalSide); - return GT_Values.emptyIntArray; + return GTValues.emptyIntArray; } /** @@ -1164,7 +1164,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity @Override public UUID getOwnerUuid() { - return GT_Utility.defaultUuid; + return GTUtility.defaultUuid; } @Override @@ -1276,15 +1276,15 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity @Override public boolean addStackToSlot(int aIndex, ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return true; + if (GTUtility.isStackInvalid(aStack)) return true; if (aIndex < 0 || aIndex >= getSizeInventory()) return false; final ItemStack tStack = getStackInSlot(aIndex); - if (GT_Utility.isStackInvalid(tStack)) { + if (GTUtility.isStackInvalid(tStack)) { setInventorySlotContents(aIndex, aStack); return true; } - aStack = GT_OreDictUnificator.get(aStack); - if (GT_Utility.areStacksEqual(tStack, aStack) + aStack = GTOreDictUnificator.get(aStack); + if (GTUtility.areStacksEqual(tStack, aStack) && tStack.stackSize + aStack.stackSize <= Math.min(aStack.getMaxStackSize(), getInventoryStackLimit())) { markDirty(); tStack.stackSize += aStack.stackSize; @@ -1295,7 +1295,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity @Override public boolean addStackToSlot(int aIndex, ItemStack aStack, int aAmount) { - return addStackToSlot(aIndex, GT_Utility.copyAmount(aAmount, aStack)); + return addStackToSlot(aIndex, GTUtility.copyAmount(aAmount, aStack)); } @Override diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java index 27a6216cff..1229dfcc5b 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java @@ -1,8 +1,8 @@ package gregtech.api.metatileentity; -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.GT_Values.NW; -import static gregtech.api.enums.GT_Values.V; +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.enums.GTValues.NW; +import static gregtech.api.enums.GTValues.V; import static gregtech.api.objects.XSTR.XSTR_INSTANCE; import java.lang.reflect.Field; @@ -54,9 +54,9 @@ import appeng.me.helpers.IGridProxyable; import appeng.tile.TileEvent; import appeng.tile.events.TileEventType; import cpw.mods.fml.relauncher.ReflectionHelper; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.SoundResource; import gregtech.api.enums.Textures; @@ -71,19 +71,19 @@ import gregtech.api.interfaces.tileentity.IDebugableTileEntity; import gregtech.api.interfaces.tileentity.IEnergyConnected; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IGregtechWailaProvider; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.net.GT_Packet_TileEntity; -import gregtech.api.objects.GT_ItemStack; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.net.GTPacketTileEntity; +import gregtech.api.objects.GTItemStack; import gregtech.api.objects.blockupdate.BlockUpdateHandler; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; import gregtech.api.util.shutdown.ShutDownReason; import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.GT_Pollution; +import gregtech.common.Pollution; import gregtech.common.covers.CoverInfo; import ic2.api.Direction; import mcp.mobius.waila.api.IWailaConfigHandler; @@ -102,7 +102,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity .findField(EntityItem.class, "health", "field_70291_e"); private final boolean[] mActiveEUInputs = new boolean[] { false, false, false, false, false, false }; private final boolean[] mActiveEUOutputs = new boolean[] { false, false, false, false, false, false }; - private final int[] mTimeStatistics = new int[GregTech_API.TICKS_FOR_LAG_AVERAGING]; + private final int[] mTimeStatistics = new int[GregTechAPI.TICKS_FOR_LAG_AVERAGING]; private boolean hasTimeStatisticsStarted; public long mLastSoundTick = 0; public boolean mWasShutdown = false; @@ -125,7 +125,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity private long oOutput = 0, mAcceptedAmperes = Long.MAX_VALUE; private long mLastCheckTick = 0; private String mOwnerName = ""; - private UUID mOwnerUuid = GT_Utility.defaultUuid; + private UUID mOwnerUuid = GTUtility.defaultUuid; private NBTTagCompound mRecipeStuff = new NBTTagCompound(); private int cableUpdateDelay = 30; @@ -242,7 +242,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity */ public void chargeItem(ItemStack aStack) { decreaseStoredEU( - GT_ModHandler.chargeElectricItem( + GTModHandler.chargeElectricItem( aStack, (int) Math.min(Integer.MAX_VALUE, getStoredEU()), (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getOutputTier()), @@ -256,7 +256,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity */ public void dischargeItem(ItemStack aStack) { increaseStoredEnergyUnits( - GT_ModHandler.dischargeElectricItem( + GTModHandler.dischargeElectricItem( aStack, (int) Math.min(Integer.MAX_VALUE, getEUCapacity() - getStoredEU()), (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getInputTier()), @@ -351,7 +351,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity } if (mNeedsUpdate) { - if (GT_Mod.gregtechproxy.mUseBlockUpdateHandler) { + if (GTMod.gregtechproxy.mUseBlockUpdateHandler) { BlockUpdateHandler.Instance.enqueueBlockUpdate(worldObj, getLocation()); } else { worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); @@ -424,7 +424,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity if (mMetaTileEntity.isEnetOutput() && oOutput > 0) { final long tOutputVoltage = Math - .max(oOutput, oOutput + (1L << Math.max(0, GT_Utility.getTier(oOutput) - 1))); + .max(oOutput, oOutput + (1L << Math.max(0, GTUtility.getTier(oOutput) - 1))); final long tUsableAmperage = Math.min( getOutputAmperage(), (getStoredEU() - mMetaTileEntity.getMinimumStoredEU()) / tOutputVoltage); @@ -436,7 +436,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity } } if (getEUCapacity() > 0) { - if (GregTech_API.sMachineFireExplosions && getRandomNumber(1000) == 0) { + if (GregTechAPI.sMachineFireExplosions && getRandomNumber(1000) == 0) { final Block tBlock = getBlockAtSide(ForgeDirection.getOrientation(getRandomNumber(6))); if (tBlock instanceof BlockFire) doEnergyExplosion(); } @@ -446,7 +446,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity return; } - if (GregTech_API.sMachineRainExplosions) { + if (GregTechAPI.sMachineRainExplosions) { if (mMetaTileEntity.willExplodeInRain()) { if (getRandomNumber(1000) == 0 && isRainPossible()) { // Short-circuit so raincheck happens before isRainExposed, @@ -457,12 +457,12 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity if (worldObj.isRaining() && isRainExposed()) { if (getRandomNumber(10) == 0) { try { - GT_Mod.achievements.issueAchievement( + GTMod.achievements.issueAchievement( this.getWorldObj() .getPlayerEntityByName(mOwnerName), "badweather"); } catch (Exception ignored) {} - GT_Log.exp.println( + GTLog.exp.println( "Machine at: " + this.getXCoord() + " | " + this.getYCoord() @@ -473,7 +473,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity + " explosion due to rain!"); doEnergyExplosion(); } else { - GT_Log.exp.println( + GTLog.exp.println( "Machine at: " + this.getXCoord() + " | " + this.getYCoord() @@ -489,16 +489,16 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity mRunningThroughTick = false; return; } - if (GregTech_API.sMachineThunderExplosions && worldObj.isThundering() + if (GregTechAPI.sMachineThunderExplosions && worldObj.isThundering() && getRandomNumber(3) == 0 && isRainExposed()) { try { - GT_Mod.achievements.issueAchievement( + GTMod.achievements.issueAchievement( this.getWorldObj() .getPlayerEntityByName(mOwnerName), "badweather"); } catch (Exception ignored) {} - GT_Log.exp.println( + GTLog.exp.println( "Machine at: " + this.getXCoord() + " | " + this.getYCoord() @@ -591,8 +591,8 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity tData = mMetaTileEntity.getUpdateData(); if (tData != oUpdateData) sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, oUpdateData = tData); - if (mMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { - tData = ((GT_MetaTileEntity_Hatch) mMetaTileEntity).getTexturePage(); + if (mMetaTileEntity instanceof MTEHatch) { + tData = ((MTEHatch) mMetaTileEntity).getTexturePage(); if (tData != oTexturePage) sendBlockEvent( GregTechTileClientEvents.CHANGE_CUSTOM_DATA, (byte) ((oTexturePage = tData) | 0x80)); // set last bit as a flag for page @@ -628,12 +628,12 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity } } catch (Throwable e) { e.printStackTrace(); - e.printStackTrace(GT_Log.err); + e.printStackTrace(GTLog.err); try { mMetaTileEntity.onTickFail(this, mTickTimer); } catch (Throwable ex) { ex.printStackTrace(); - ex.printStackTrace(GT_Log.err); + ex.printStackTrace(GTLog.err); } } @@ -641,7 +641,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity tTime = System.nanoTime() - tTime; mTimeStatisticsIndex = (mTimeStatisticsIndex + 1) % mTimeStatistics.length; mTimeStatistics[mTimeStatisticsIndex] = (int) tTime; - if (tTime > 0 && tTime > (GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING * 1_000_000L) + if (tTime > 0 && tTime > (GregTechAPI.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING * 1_000_000L) && mTickTimer > 1000 && getMetaTileEntity().doTickProfilingMessageDuringThisTick() && mLagWarningCount++ < 10) @@ -684,7 +684,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity if (mSendClientData) { NW.sendPacketToAllPlayersInRange( worldObj, - new GT_Packet_TileEntity( + new GTPacketTileEntity( xCoord, (short) yCoord, zCoord, @@ -699,8 +699,8 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity | (mRedstone ? 16 : 0) | (mLockUpgrade ? 32 : 0) | (mWorks ? 64 : 0)), - oTexturePage = (hasValidMetaTileEntity() && mMetaTileEntity instanceof GT_MetaTileEntity_Hatch) - ? ((GT_MetaTileEntity_Hatch) mMetaTileEntity).getTexturePage() + oTexturePage = (hasValidMetaTileEntity() && mMetaTileEntity instanceof MTEHatch) + ? ((MTEHatch) mMetaTileEntity).getTexturePage() : 0, oUpdateData = hasValidMetaTileEntity() ? mMetaTileEntity.getUpdateData() : 0, oRedstoneData = (byte) (((mSidedRedstone[0] > 0) ? 1 : 0) | ((mSidedRedstone[1] > 0) ? 2 : 0) @@ -747,9 +747,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity try { mMetaTileEntity.receiveClientEvent((byte) aEventID, (byte) aValue); } catch (Throwable e) { - GT_Log.err.println( + GTLog.err.println( "Encountered Exception while receiving Data from the Server, the Client should've been crashed by now, but I prevented that. Please report immediately to GregTech Intergalactical!!!"); - e.printStackTrace(GT_Log.err); + e.printStackTrace(GTLog.err); } } @@ -768,8 +768,8 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity if (hasValidMetaTileEntity()) { if ((aValue & 0x80) == 0) // Is texture index mMetaTileEntity.onValueUpdate((byte) (aValue & 0x7F)); - else if (mMetaTileEntity instanceof GT_MetaTileEntity_Hatch) // is texture page and hatch - ((GT_MetaTileEntity_Hatch) mMetaTileEntity).onTexturePageUpdate((byte) (aValue & 0x7F)); + else if (mMetaTileEntity instanceof MTEHatch) // is texture page and hatch + ((MTEHatch) mMetaTileEntity).onTexturePageUpdate((byte) (aValue & 0x7F)); } } case GregTechTileClientEvents.CHANGE_COLOR -> { @@ -836,11 +836,11 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity int samples = mTimeStatistics.length - amountOfZero; if (samples > 0) { tList.add( - "Average CPU load of ~" + GT_Utility.formatNumbers(tAverageTime / samples) + "Average CPU load of ~" + GTUtility.formatNumbers(tAverageTime / samples) + "ns over " - + GT_Utility.formatNumbers(samples) + + GTUtility.formatNumbers(samples) + " ticks with worst time of " - + GT_Utility.formatNumbers(tWorstTime) + + GTUtility.formatNumbers(tWorstTime) + "ns."); } } else { @@ -848,9 +848,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity tList.add("Just started tick time statistics."); } tList.add( - "Recorded " + GT_Utility.formatNumbers(mMetaTileEntity.mSoundRequests) + "Recorded " + GTUtility.formatNumbers(mMetaTileEntity.mSoundRequests) + " sound requests in " - + GT_Utility.formatNumbers(mTickTimer - mLastCheckTick) + + GTUtility.formatNumbers(mTickTimer - mLastCheckTick) + " ticks."); mLastCheckTick = mTickTimer; mMetaTileEntity.mSoundRequests = 0; @@ -858,7 +858,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity tList.add( "Caused " + (mLagWarningCount >= 10 ? "more than 10" : mLagWarningCount) + " Lag Spike Warnings (anything taking longer than " - + GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING + + GregTechAPI.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING + "ms) on the Server."); } tList.add( @@ -867,8 +867,8 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity } if (aLogLevel > 0) { if (getSteamCapacity() > 0 && hasSteamEngineUpgrade()) tList.add( - GT_Utility.formatNumbers(getStoredSteam()) + " of " - + GT_Utility.formatNumbers(getSteamCapacity()) + GTUtility.formatNumbers(getStoredSteam()) + " of " + + GTUtility.formatNumbers(getSteamCapacity()) + " Steam"); tList.add( "Machine is " + (mActive ? EnumChatFormatting.GREEN + "active" + EnumChatFormatting.RESET @@ -907,7 +907,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity if (mMetaTileEntity.shouldTriggerBlockUpdate()) { // If we're triggering a block update this will call onMachineBlockUpdate() - GregTech_API.causeMachineUpdate(worldObj, xCoord, yCoord, zCoord); + GregTechAPI.causeMachineUpdate(worldObj, xCoord, yCoord, zCoord); } else { // If we're not trigger a cascading one, call the update here. onMachineBlockUpdate(); @@ -934,14 +934,14 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity markDirty(); mMetaTileEntity.setInventorySlotContents( aIndex, - worldObj.isRemote ? aStack : GT_OreDictUnificator.setStack(true, aStack)); + worldObj.isRemote ? aStack : GTOreDictUnificator.setStack(true, aStack)); } } @Override public String getInventoryName() { if (canAccessData()) return mMetaTileEntity.getInventoryName(); - if (GregTech_API.METATILEENTITIES[mID] != null) return GregTech_API.METATILEENTITIES[mID].getInventoryName(); + if (GregTechAPI.METATILEENTITIES[mID] != null) return GregTechAPI.METATILEENTITIES[mID].getInventoryName(); return ""; } @@ -1374,7 +1374,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity public void doEnergyExplosion() { if (getUniversalEnergyCapacity() > 0 && getUniversalEnergyStored() >= getUniversalEnergyCapacity() / 5) { - GT_Log.exp.println( + GTLog.exp.println( "Energy Explosion, injected " + getUniversalEnergyStored() + "EU >= " + getUniversalEnergyCapacity() / 5D @@ -1383,7 +1383,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity doExplosion( oOutput * (getUniversalEnergyStored() >= getUniversalEnergyCapacity() ? 4 : getUniversalEnergyStored() >= getUniversalEnergyCapacity() / 2 ? 2 : 1)); - GT_Mod.achievements.issueAchievement( + GTMod.achievements.issueAchievement( this.getWorldObj() .getPlayerEntityByName(mOwnerName), "electricproblems"); @@ -1394,7 +1394,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity public void doExplosion(long aAmount) { if (canAccessData()) { // This is only for Electric Machines - if (GregTech_API.sMachineWireFire && mMetaTileEntity.isElectric()) { + if (GregTechAPI.sMachineWireFire && mMetaTileEntity.isElectric()) { try { mReleaseEnergy = true; IEnergyConnected.Util.emitEnergyToNetwork(V[5], Math.max(1, getStoredEU() / V[5]), this); @@ -1403,7 +1403,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity mReleaseEnergy = false; // Normal Explosion Code mMetaTileEntity.onExplosion(); - if (GT_Mod.gregtechproxy.mExplosionItemDrop) { + if (GTMod.gregtechproxy.mExplosionItemDrop) { for (int i = 0; i < this.getSizeInventory(); i++) { final ItemStack tItem = this.getStackInSlot(i); if ((tItem != null) && (tItem.stackSize > 0) && (this.isValidSlot(i))) { @@ -1415,12 +1415,12 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity if (mRecipeStuff != null) { for (int i = 0; i < 9; i++) { if (this.getRandomNumber(100) < 50) { - dropItems(GT_Utility.loadItem(mRecipeStuff, "Ingredient." + i)); + dropItems(GTUtility.loadItem(mRecipeStuff, "Ingredient." + i)); } } } - GT_Pollution.addPollution((TileEntity) this, GT_Mod.gregtechproxy.mPollutionOnExplosion); + Pollution.addPollution((TileEntity) this, GTMod.gregtechproxy.mPollutionOnExplosion); mMetaTileEntity.doExplosion(aAmount); } } @@ -1453,7 +1453,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity @Override public ArrayList getDrops() { - final ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, mID); + final ItemStack rStack = new ItemStack(GregTechAPI.sBlockMachines, 1, mID); final NBTTagCompound tNBT = new NBTTagCompound(); if (mRecipeStuff != null && !mRecipeStuff.hasNoTags()) tNBT.setTag("GT.CraftingComponents", mRecipeStuff); if (mMuffler) tNBT.setBoolean("mMuffler", mMuffler); @@ -1486,7 +1486,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity // Configure Cover, sneak can also be: screwdriver, wrench, side cutter, soldering iron if (aPlayer.isSneaking()) { final ForgeDirection tSide = (getCoverIDAtSide(side) == 0) - ? GT_Utility.determineWrenchingSide(side, aX, aY, aZ) + ? GTUtility.determineWrenchingSide(side, aX, aY, aZ) : side; return (getCoverBehaviorAtSideNew(tSide).hasCoverGUI()); } else if (getCoverBehaviorAtSideNew(side).onCoverRightclickClient(side, this, aPlayer, aX, aY, aZ)) { @@ -1502,17 +1502,17 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); if (tCurrentItem != null) { if (getColorization() >= 0 - && GT_Utility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) { + && GTUtility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) { tCurrentItem.func_150996_a(Items.bucket); setColorization((byte) (getColorization() >= 16 ? -2 : -1)); return true; } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)) { - if (aPlayer.isSneaking() && mMetaTileEntity instanceof GT_MetaTileEntity_BasicMachine - && ((GT_MetaTileEntity_BasicMachine) mMetaTileEntity) - .setMainFacing(GT_Utility.determineWrenchingSide(side, aX, aY, aZ))) { - GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer); - GT_Utility.sendSoundToPlayers( + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sWrenchList)) { + if (aPlayer.isSneaking() && mMetaTileEntity instanceof MTEBasicMachine + && ((MTEBasicMachine) mMetaTileEntity) + .setMainFacing(GTUtility.determineWrenchingSide(side, aX, aY, aZ))) { + GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer); + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, @@ -1523,14 +1523,14 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity cableUpdateDelay = 10; } else if (mMetaTileEntity.onWrenchRightClick( side, - GT_Utility.determineWrenchingSide(side, aX, aY, aZ), + GTUtility.determineWrenchingSide(side, aX, aY, aZ), aPlayer, aX, aY, aZ, tCurrentItem)) { - GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer); - GT_Utility.sendSoundToPlayers( + GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer); + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, @@ -1543,8 +1543,8 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity return true; } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList)) { - if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) { + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sScrewdriverList)) { + if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) { setCoverDataAtSide( side, getCoverBehaviorAtSideNew(side).onCoverScrewdriverClick( @@ -1557,7 +1557,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity aY, aZ)); mMetaTileEntity.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ, tCurrentItem); - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, @@ -1569,18 +1569,18 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity return true; } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sHardHammerList)) { - if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sHardHammerList)) { + if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { mInputDisabled = !mInputDisabled; if (mInputDisabled) mOutputDisabled = !mOutputDisabled; - GT_Utility.sendChatToPlayer( + GTUtility.sendChatToPlayer( aPlayer, - GT_Utility.trans("086", "Auto-Input: ") + (mInputDisabled - ? GT_Utility.trans("087", "Disabled") - : GT_Utility.trans("088", "Enabled") + GT_Utility.trans("089", " Auto-Output: ") - + (mOutputDisabled ? GT_Utility.trans("087", "Disabled") - : GT_Utility.trans("088", "Enabled")))); - GT_Utility.sendSoundToPlayers( + GTUtility.trans("086", "Auto-Input: ") + + (mInputDisabled ? GTUtility.trans("087", "Disabled") + : GTUtility.trans("088", "Enabled") + GTUtility.trans("089", " Auto-Output: ") + + (mOutputDisabled ? GTUtility.trans("087", "Disabled") + : GTUtility.trans("088", "Enabled")))); + GTUtility.sendSoundToPlayers( worldObj, SoundResource.RANDOM_ANVIL_USE, 1.0F, @@ -1592,19 +1592,19 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity return true; } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSoftHammerList)) { - if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSoftHammerList)) { + if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { if (mWorks) disableWorking(); else enableWorking(); { - String tChat = GT_Utility.trans("090", "Machine Processing: ") - + (isAllowedToWork() ? GT_Utility.trans("088", "Enabled") - : GT_Utility.trans("087", "Disabled")); + String tChat = GTUtility.trans("090", "Machine Processing: ") + + (isAllowedToWork() ? GTUtility.trans("088", "Enabled") + : GTUtility.trans("087", "Disabled")); if (getMetaTileEntity() != null && getMetaTileEntity().hasAlternativeModeText()) tChat = getMetaTileEntity().getAlternativeModeText(); - GT_Utility.sendChatToPlayer(aPlayer, tChat); + GTUtility.sendChatToPlayer(aPlayer, tChat); } - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, @@ -1616,11 +1616,11 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity return true; } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) { - final ForgeDirection tSide = GT_Utility.determineWrenchingSide(side, aX, aY, aZ); + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSolderingToolList)) { + final ForgeDirection tSide = GTUtility.determineWrenchingSide(side, aX, aY, aZ); if (mMetaTileEntity.onSolderingToolRightClick(side, tSide, aPlayer, aX, aY, aZ, tCurrentItem)) { // logic handled internally - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_BATTERY_USE, 1.0F, @@ -1628,15 +1628,15 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity xCoord, yCoord, zCoord); - } else if (GT_ModHandler.useSolderingIron(tCurrentItem, aPlayer)) { + } else if (GTModHandler.useSolderingIron(tCurrentItem, aPlayer)) { mStrongRedstone ^= tSide.flag; - GT_Utility.sendChatToPlayer( + GTUtility.sendChatToPlayer( aPlayer, - GT_Utility.trans("091", "Redstone Output at Side ") + tSide - + GT_Utility.trans("092", " set to: ") - + ((mStrongRedstone & tSide.flag) != 0 ? GT_Utility.trans("093", "Strong") - : GT_Utility.trans("094", "Weak"))); - GT_Utility.sendSoundToPlayers( + GTUtility.trans("091", "Redstone Output at Side ") + tSide + + GTUtility.trans("092", " set to: ") + + ((mStrongRedstone & tSide.flag) != 0 ? GTUtility.trans("093", "Strong") + : GTUtility.trans("094", "Weak"))); + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_BATTERY_USE, 3.0F, @@ -1651,11 +1651,11 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity return true; } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList)) { - final ForgeDirection tSide = GT_Utility.determineWrenchingSide(side, aX, aY, aZ); + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sWireCutterList)) { + final ForgeDirection tSide = GTUtility.determineWrenchingSide(side, aX, aY, aZ); if (mMetaTileEntity.onWireCutterRightClick(side, tSide, aPlayer, aX, aY, aZ, tCurrentItem)) { // logic handled internally - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, @@ -1670,20 +1670,19 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity } ForgeDirection coverSide = side; - if (getCoverIDAtSide(side) == 0) coverSide = GT_Utility.determineWrenchingSide(side, aX, aY, aZ); + if (getCoverIDAtSide(side) == 0) coverSide = GTUtility.determineWrenchingSide(side, aX, aY, aZ); if (getCoverIDAtSide(coverSide) == 0) { - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCovers.keySet())) { - final GT_CoverBehaviorBase coverBehavior = GregTech_API - .getCoverBehaviorNew(tCurrentItem); + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sCovers.keySet())) { + final CoverBehaviorBase coverBehavior = GregTechAPI.getCoverBehaviorNew(tCurrentItem); if (coverBehavior.isCoverPlaceable(coverSide, tCurrentItem, this) - && mMetaTileEntity.allowCoverOnSide(coverSide, new GT_ItemStack(tCurrentItem))) { + && mMetaTileEntity.allowCoverOnSide(coverSide, new GTItemStack(tCurrentItem))) { setCoverItemAtSide(coverSide, tCurrentItem); coverBehavior.onPlayerAttach(aPlayer, tCurrentItem, this, coverSide); if (!aPlayer.capabilities.isCreativeMode) tCurrentItem.stackSize--; - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, @@ -1696,9 +1695,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity return true; } } else { - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCrowbarList)) { - if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { - GT_Utility.sendSoundToPlayers( + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sCrowbarList)) { + if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { + GTUtility.sendSoundToPlayers( worldObj, SoundResource.RANDOM_BREAK, 1.0F, @@ -1709,15 +1708,15 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity dropCover(coverSide, side, false); } return true; - } else if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sJackhammerList)) { + } else if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sJackhammerList)) { // Configuration of delicate electronics calls for a tool with precision and subtlety. - if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { + if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { final CoverInfo info = getCoverInfoAtSide(coverSide); if (info != CoverInfo.EMPTY_INFO) { - final GT_CoverBehaviorBase behavior = info.getCoverBehavior(); + final CoverBehaviorBase behavior = info.getCoverBehavior(); if (behavior.allowsTickRateAddition()) { info.onCoverJackhammer(aPlayer); - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_DRILL_DRILL_SOFT, 1.0F, @@ -1727,7 +1726,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity zCoord); } else { - GT_Utility.sendChatToPlayer( + GTUtility.sendChatToPlayer( aPlayer, StatCollector.translateToLocal("gt.cover.info.chat.tick_rate_not_allowed")); } @@ -1738,7 +1737,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity } // End item != null } else if (aPlayer.isSneaking()) { // Sneak click, no tool -> open cover config if possible. - side = (getCoverIDAtSide(side) == 0) ? GT_Utility.determineWrenchingSide(side, aX, aY, aZ) : side; + side = (getCoverIDAtSide(side) == 0) ? GTUtility.determineWrenchingSide(side, aX, aY, aZ) : side; return getCoverIDAtSide(side) > 0 && getCoverBehaviorAtSideNew(side).onCoverShiftRightClick( side, getCoverIDAtSide(side), @@ -1762,7 +1761,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity if (isUpgradable() && tCurrentItem != null) { if (ItemList.Upgrade_Muffler.isStackEqual(aPlayer.inventory.getCurrentItem())) { if (addMufflerUpgrade()) { - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.RANDOM_CLICK, 1.0F, @@ -1779,7 +1778,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity mLockUpgrade = true; setOwnerName(aPlayer.getDisplayName()); setOwnerUuid(aPlayer.getUniqueID()); - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.RANDOM_CLICK, 1.0F, @@ -1799,9 +1798,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity if (!aPlayer.isSneaking() && hasValidMetaTileEntity()) return mMetaTileEntity.onRightclick(this, aPlayer, side, aX, aY, aZ); } catch (Throwable e) { - GT_Log.err.println( + GTLog.err.println( "Encountered Exception while rightclicking TileEntity, the Game should've crashed now, but I prevented that. Please report immediately to GregTech Intergalactical!!!"); - e.printStackTrace(GT_Log.err); + e.printStackTrace(GTLog.err); e.printStackTrace(); } @@ -1813,9 +1812,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity try { if (aPlayer != null && hasValidMetaTileEntity()) mMetaTileEntity.onLeftclick(this, aPlayer); } catch (Throwable e) { - GT_Log.err.println( + GTLog.err.println( "Encountered Exception while leftclicking TileEntity, the Game should've crashed now, but I prevented that. Please report immediately to GregTech Intergalactical!!!"); - e.printStackTrace(GT_Log.err); + e.printStackTrace(GTLog.err); } } @@ -1859,7 +1858,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity final CoverInfo coverInfo = getCoverInfoAtSide(ForgeDirection.getOrientation(ordinalSide)); if (canAccessData() && (coverInfo.letsItemsOut(-1) || coverInfo.letsItemsIn(-1))) return mMetaTileEntity.getAccessibleSlotsFromSide(ordinalSide); - return GT_Values.emptyIntArray; + return GTValues.emptyIntArray; } /** @@ -1998,13 +1997,13 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity @Override public String getOwnerName() { - if (GT_Utility.isStringInvalid(mOwnerName)) return "Player"; + if (GTUtility.isStringInvalid(mOwnerName)) return "Player"; return mOwnerName; } @Override public String setOwnerName(String aName) { - if (GT_Utility.isStringInvalid(aName)) return mOwnerName = "Player"; + if (GTUtility.isStringInvalid(aName)) return mOwnerName = "Player"; return mOwnerName = aName; } @@ -2041,7 +2040,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity || getStoredEU() >= getEUCapacity() || mMetaTileEntity.maxAmperesIn() <= mAcceptedAmperes) return 0; if (aVoltage > getInputVoltage()) { - GT_Log.exp + GTLog.exp .println("Energy Explosion, injected " + aVoltage + "EU/t in a " + getInputVoltage() + "EU/t Machine!"); doExplosion(aVoltage); return 0; @@ -2245,15 +2244,15 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity @Override public boolean addStackToSlot(int slotIndex, ItemStack stack) { - if (GT_Utility.isStackInvalid(stack)) return true; + if (GTUtility.isStackInvalid(stack)) return true; if (slotIndex < 0 || slotIndex >= getSizeInventory()) return false; final ItemStack toStack = getStackInSlot(slotIndex); - if (GT_Utility.isStackInvalid(toStack)) { + if (GTUtility.isStackInvalid(toStack)) { setInventorySlotContents(slotIndex, stack); return true; } - final ItemStack fromStack = GT_OreDictUnificator.get(stack); - if (GT_Utility.areStacksEqual(toStack, fromStack) && toStack.stackSize + fromStack.stackSize + final ItemStack fromStack = GTOreDictUnificator.get(stack); + if (GTUtility.areStacksEqual(toStack, fromStack) && toStack.stackSize + fromStack.stackSize <= Math.min(fromStack.getMaxStackSize(), getInventoryStackLimit())) { toStack.stackSize += fromStack.stackSize; markDirty(); @@ -2264,7 +2263,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity @Override public boolean addStackToSlot(int aIndex, ItemStack aStack, int aAmount) { - return addStackToSlot(aIndex, GT_Utility.copyAmount(aAmount, aStack)); + return addStackToSlot(aIndex, GTUtility.copyAmount(aAmount, aStack)); } @Override @@ -2343,13 +2342,13 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity final int newInputSize; final int oldOutputSize; final int newOutputSize; - final int chemistryUpdateVersion = GT_Mod.calculateTotalGTVersion(509, 31); - final int configCircuitAdditionVersion = GT_Mod.calculateTotalGTVersion(509, 40); - final int wireAdditionVersion = GT_Mod.calculateTotalGTVersion(509, 41); - final int disassemblerRemoveVersion = GT_Mod.calculateTotalGTVersion(509, 42, 44); + final int chemistryUpdateVersion = GTMod.calculateTotalGTVersion(509, 31); + final int configCircuitAdditionVersion = GTMod.calculateTotalGTVersion(509, 40); + final int wireAdditionVersion = GTMod.calculateTotalGTVersion(509, 41); + final int disassemblerRemoveVersion = GTMod.calculateTotalGTVersion(509, 42, 44); if (nbtVersion < 1000000) nbtVersion *= 1000; // 4 is old GT_MetaTileEntity_BasicMachine.OTHER_SLOT_COUNT - if (nbtVersion < configCircuitAdditionVersion && getMetaTileEntity() instanceof GT_MetaTileEntity_BasicMachine + if (nbtVersion < configCircuitAdditionVersion && getMetaTileEntity() instanceof MTEBasicMachine && slotIndex >= 4) slotIndex += 1; if (mID >= 211 && mID <= 218) { // Assembler if (nbtVersion < chemistryUpdateVersion) { @@ -2415,10 +2414,10 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity } int indexShift = 0; - if (slotIndex >= GT_MetaTileEntity_BasicMachine.OTHER_SLOT_COUNT + oldInputSize) { + if (slotIndex >= MTEBasicMachine.OTHER_SLOT_COUNT + oldInputSize) { indexShift += newInputSize - oldInputSize; } - if (slotIndex >= GT_MetaTileEntity_BasicMachine.OTHER_SLOT_COUNT + oldInputSize + oldOutputSize) { + if (slotIndex >= MTEBasicMachine.OTHER_SLOT_COUNT + oldInputSize + oldOutputSize) { indexShift += newOutputSize - oldOutputSize; } return slotIndex + indexShift; diff --git a/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java index c2cef8628d..7b18565165 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java @@ -1,6 +1,6 @@ package gregtech.api.metatileentity; -import static gregtech.api.enums.GT_Values.NW; +import static gregtech.api.enums.GTValues.NW; import java.util.Arrays; import java.util.List; @@ -47,10 +47,10 @@ import com.gtnewhorizons.modularui.common.widget.TextWidget; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.relauncher.Side; -import gregtech.GT_Mod; +import gregtech.GTMod; import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.enums.GTValues; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.gui.modularui.GUITextureSet; import gregtech.api.interfaces.IConfigurationCircuitSupport; import gregtech.api.interfaces.modularui.IAddGregtechLogo; @@ -60,11 +60,11 @@ import gregtech.api.interfaces.tileentity.IGTEnet; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords; import gregtech.api.interfaces.tileentity.IIC2Enet; -import gregtech.api.net.GT_Packet_Block_Event; -import gregtech.api.net.GT_Packet_SetConfigurationCircuit; +import gregtech.api.net.GTPacketBlockEvent; +import gregtech.api.net.GTPacketSetConfigurationCircuit; +import gregtech.api.util.GTUtil; +import gregtech.api.util.GTUtility; import gregtech.api.util.GT_TooltipDataCache; -import gregtech.api.util.GT_Util; -import gregtech.api.util.GT_Utility; import gregtech.common.gui.modularui.uifactory.SelectItemUIFactory; import ic2.api.energy.event.EnergyTileLoadEvent; import ic2.api.energy.event.EnergyTileUnloadEvent; @@ -103,7 +103,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje public static ForgeDirection getSideForPlayerPlacing(Entity player, ForgeDirection defaultFacing, boolean[] aAllowedFacings) { - final ForgeDirection facingFromPlayer = GT_Utility.getSideFromPlayerFacing(player); + final ForgeDirection facingFromPlayer = GTUtility.getSideFromPlayerFacing(player); if (facingFromPlayer != ForgeDirection.UNKNOWN && aAllowedFacings[facingFromPlayer.ordinal()]) return facingFromPlayer; @@ -424,13 +424,13 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje @Override public final boolean getOpacity(int x, int y, int z) { if (ignoreUnloadedChunks && crossedChunkBorder(x, z) && !worldObj.blockExists(x, y, z)) return false; - return GT_Utility.isOpaqueBlock(worldObj, x, y, z); + return GTUtility.isOpaqueBlock(worldObj, x, y, z); } @Override public final boolean getAir(int x, int y, int z) { if (ignoreUnloadedChunks && crossedChunkBorder(x, z) && !worldObj.blockExists(x, y, z)) return true; - return GT_Utility.isBlockAir(worldObj, x, y, z); + return GTUtility.isBlockAir(worldObj, x, y, z); } @Override @@ -540,7 +540,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje public final void sendBlockEvent(byte aID, byte aValue) { NW.sendPacketToAllPlayersInRange( worldObj, - new GT_Packet_Block_Event(xCoord, (short) yCoord, zCoord, aID, aValue), + new GTPacketBlockEvent(xCoord, (short) yCoord, zCoord, aID, aValue), xCoord, zCoord); } @@ -554,7 +554,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje } public final void setOnFire() { - GT_Utility.setCoordsOnFire(worldObj, xCoord, yCoord, zCoord, false); + GTUtility.setCoordsOnFire(worldObj, xCoord, yCoord, zCoord, false); } public final void setToFire() { @@ -666,7 +666,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje } protected void addTitleToUI(ModularWindow.Builder builder, String title) { - if (GT_Mod.gregtechproxy.mTitleTabStyle == 2) { + if (GTMod.gregtechproxy.mTitleTabStyle == 2) { addTitleItemIconStyle(builder, title); } else { addTitleTextStyle(builder, title); @@ -691,7 +691,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje final TextWidget text = new TextWidget(title).setDefaultColor(getTitleColor()) .setTextAlignment(Alignment.CenterLeft) .setMaxWidth(titleWidth); - if (GT_Mod.gregtechproxy.mTitleTabStyle == 1) { + if (GTMod.gregtechproxy.mTitleTabStyle == 1) { tab.setDrawable(getGUITextureSet().getTitleTabAngular()) .setPos(0, -(titleHeight + TAB_PADDING) + 1) .setSize(getGUIWidth(), titleHeight + TAB_PADDING * 2); @@ -852,9 +852,9 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje } } else { final List tCircuits = ccs.getConfigurationCircuits(); - final int index = GT_Utility.findMatchingStackInList(tCircuits, cursorStack); + final int index = GTUtility.findMatchingStackInList(tCircuits, cursorStack); if (index < 0) { - int curIndex = GT_Utility + int curIndex = GTUtility .findMatchingStackInList(tCircuits, inv.getStackInSlot(ccs.getCircuitSlot())) + 1; if (clickData.mouseButton == 0) { curIndex += 1; @@ -894,7 +894,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje }) .disableShiftInsert() .setHandlePhantomActionClient(true) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_INT_CIRCUIT) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_INT_CIRCUIT) .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.select_circuit.tooltip")) .setTooltipShowUpDelay(TOOLTIP_DELAY) .setPos(ccs.getCircuitSlotX() - 1, ccs.getCircuitSlotY() - 1)); @@ -913,7 +913,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje getStackForm(0), this::onCircuitSelected, circuits, - GT_Utility.findMatchingStackInList(circuits, inv.getStackInSlot(ccs.getCircuitSlot()))) + GTUtility.findMatchingStackInList(circuits, inv.getStackInSlot(ccs.getCircuitSlot()))) .setAnotherWindow(true, dialogOpened) .setGuiTint(getGUIColorization()) .setCurrentGetter(() -> inv.getStackInSlot(ccs.getCircuitSlot())) @@ -926,7 +926,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje if (!(this instanceof IInventory inv)) return; - GT_Values.NW.sendToServer(new GT_Packet_SetConfigurationCircuit(this, selected)); + GTValues.NW.sendToServer(new GTPacketSetConfigurationCircuit(this, selected)); // we will not do any validation on client side // it doesn't get to actually decide what inventory contains anyway inv.setInventorySlotContents(ccs.getCircuitSlot(), selected); @@ -943,7 +943,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje protected Supplier COLOR_TEXT_RED = () -> getTextColorOrDefault("text_red", 0xff0000); public int getGUIColorization() { - return GT_Util.getRGBaInt(Dyes.dyeWhite.getRGBA()); + return GTUtil.getRGBaInt(Dyes.dyeWhite.getRGBA()); } public ItemStack getStackForm(long aAmount) { diff --git a/src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java index c3528d44d7..3b0c9cc89f 100644 --- a/src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java @@ -1,6 +1,6 @@ package gregtech.api.metatileentity; -import static gregtech.GT_Mod.GT_FML_LOGGER; +import static gregtech.GTMod.GT_FML_LOGGER; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; @@ -16,8 +16,8 @@ import appeng.api.crafting.ICraftingIconProvider; import appeng.api.implementations.tiles.ISoundP2PHandler; import appeng.me.cache.helpers.TunnelCollection; import appeng.parts.p2p.PartP2PSound; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; import gregtech.api.enums.ItemList; import gregtech.api.gui.modularui.GUITextureSet; import gregtech.api.interfaces.IConfigurationCircuitSupport; @@ -27,9 +27,9 @@ import gregtech.api.interfaces.modularui.IAddUIWidgets; import gregtech.api.interfaces.modularui.IBindPlayerInventoryUI; import gregtech.api.interfaces.modularui.IGetTitleColor; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; +import gregtech.api.objects.GTItemStack; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; public abstract class CommonMetaTileEntity extends CoverableTileEntity implements IGregTechTileEntity, ICraftingIconProvider, ISoundP2PHandler { @@ -37,11 +37,11 @@ public abstract class CommonMetaTileEntity extends CoverableTileEntity protected boolean mNeedsBlockUpdate = true, mNeedsUpdate = true, mSendClientData = false, mInventoryChanged = false; protected boolean createNewMetatileEntity(short aID) { - if (aID <= 0 || aID >= GregTech_API.METATILEENTITIES.length || GregTech_API.METATILEENTITIES[aID] == null) { - GT_Log.err.println("MetaID " + aID + " not loadable => locking TileEntity!"); + if (aID <= 0 || aID >= GregTechAPI.METATILEENTITIES.length || GregTechAPI.METATILEENTITIES[aID] == null) { + GTLog.err.println("MetaID " + aID + " not loadable => locking TileEntity!"); } else { if (hasValidMetaTileEntity()) getMetaTileEntity().setBaseMetaTileEntity(null); - GregTech_API.METATILEENTITIES[aID].newMetaEntity(this) + GregTechAPI.METATILEENTITIES[aID].newMetaEntity(this) .setBaseMetaTileEntity(this); mTickTimer = 0; mID = aID; @@ -53,7 +53,7 @@ public abstract class CommonMetaTileEntity extends CoverableTileEntity protected void saveMetaTileNBT(NBTTagCompound aNBT) { try { if (hasValidMetaTileEntity()) { - aNBT.setInteger("nbtVersion", GT_Mod.NBT_VERSION); + aNBT.setInteger("nbtVersion", GTMod.NBT_VERSION); final NBTTagList tItemList = new NBTTagList(); for (int i = 0; i < getMetaTileEntity().getRealInventory().length; i++) { final ItemStack tStack = getMetaTileEntity().getRealInventory()[i]; @@ -70,12 +70,12 @@ public abstract class CommonMetaTileEntity extends CoverableTileEntity getMetaTileEntity().saveNBTData(aNBT); } catch (Throwable e) { GT_FML_LOGGER.error("Encountered CRITICAL ERROR while saving MetaTileEntity."); - GT_Mod.logStackTrace(e); + GTMod.logStackTrace(e); } } } catch (Throwable e) { GT_FML_LOGGER.error("Encountered CRITICAL ERROR while saving MetaTileEntity."); - GT_Mod.logStackTrace(e); + GTMod.logStackTrace(e); } } @@ -87,7 +87,7 @@ public abstract class CommonMetaTileEntity extends CoverableTileEntity final NBTTagCompound tTag = tItemList.getCompoundTagAt(i); final int tSlot = migrateInventoryIndex(tTag.getInteger("IntSlot"), nbtVersion); if (tSlot >= 0 && tSlot < getMetaTileEntity().getRealInventory().length) { - ItemStack loadedStack = GT_Utility.loadItem(tTag); + ItemStack loadedStack = GTUtility.loadItem(tTag); // We move away from fluid display item in TEs if (loadedStack != null && loadedStack.getItem() == ItemList.Display_Fluid.getItem()) { loadedStack = null; @@ -100,7 +100,7 @@ public abstract class CommonMetaTileEntity extends CoverableTileEntity getMetaTileEntity().loadNBTData(aNBT); } catch (Throwable e) { GT_FML_LOGGER.error("Encountered Exception while loading MetaTileEntity."); - GT_Mod.logStackTrace(e); + GTMod.logStackTrace(e); } } } @@ -175,7 +175,7 @@ public abstract class CommonMetaTileEntity extends CoverableTileEntity } @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCoverID) { + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCoverID) { return hasValidMetaTileEntity() && getMetaTileEntity().allowCoverOnSide(side, aCoverID); } diff --git a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java index 429e0fc04c..bf62a1ce74 100644 --- a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java @@ -1,9 +1,9 @@ package gregtech.api.metatileentity; -import static gregtech.api.enums.GT_Values.E; -import static gregtech.api.enums.GT_Values.NW; -import static gregtech.api.util.GT_LanguageManager.FACES; -import static gregtech.api.util.GT_LanguageManager.getTranslation; +import static gregtech.api.enums.GTValues.E; +import static gregtech.api.enums.GTValues.NW; +import static gregtech.api.util.GTLanguageManager.FACES; +import static gregtech.api.util.GTLanguageManager.getTranslation; import java.util.ArrayList; import java.util.Arrays; @@ -48,23 +48,23 @@ import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Textures; import gregtech.api.gui.modularui.GUITextureSet; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IGregtechWailaProvider; -import gregtech.api.net.GT_Packet_RequestCoverData; -import gregtech.api.net.GT_Packet_SendCoverData; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_CoverBehaviorBase; +import gregtech.api.net.GTPacketRequestCoverData; +import gregtech.api.net.GTPacketSendCoverData; +import gregtech.api.objects.GTItemStack; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.CoverBehaviorBase; import gregtech.api.util.ISerializableObject; -import gregtech.common.GT_Client; +import gregtech.common.GTClient; +import gregtech.common.covers.CoverFluidfilter; import gregtech.common.covers.CoverInfo; -import gregtech.common.covers.GT_Cover_Fluidfilter; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import mcp.mobius.waila.api.IWailaConfigHandler; @@ -105,7 +105,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov .saveDataToNBT()); } if (tList.tagCount() > 0) { - aNBT.setTag(GT_Values.NBT.COVERS, tList); + aNBT.setTag(GTValues.NBT.COVERS, tList); // Backwards compat, in case of a revert... for now aNBT.setIntArray("mCoverSides", coverSides); } @@ -124,7 +124,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov : new byte[] { 15, 15, 15, 15, 15, 15 }; mStrongRedstone = aNBT.getByte("mStrongRedstone"); - if (aNBT.hasKey(GT_Values.NBT.COVERS)) { + if (aNBT.hasKey(GTValues.NBT.COVERS)) { readCoverInfoNBT(aNBT); } else if (aNBT.hasKey("mCoverSides")) { readLegacyCoverInfoNBT(aNBT); @@ -132,7 +132,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov } public void readCoverInfoNBT(NBTTagCompound aNBT) { - final NBTTagList tList = aNBT.getTagList(GT_Values.NBT.COVERS, 10); + final NBTTagList tList = aNBT.getTagList(GTValues.NBT.COVERS, 10); for (byte i = 0; i < tList.tagCount(); i++) { final NBTTagCompound tNBT = tList.getCompoundTagAt(i); final CoverInfo coverInfo = new CoverInfo(this, tNBT); @@ -152,12 +152,12 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov if (coverIDs[ordinalSide] == 0) continue; final CoverInfo coverInfo = new CoverInfo(side, coverIDs[ordinalSide], this, null); - final GT_CoverBehaviorBase coverBehavior = coverInfo.getCoverBehavior(); - if (coverBehavior == GregTech_API.sNoBehavior) continue; + final CoverBehaviorBase coverBehavior = coverInfo.getCoverBehavior(); + if (coverBehavior == GregTechAPI.sNoBehavior) continue; ISerializableObject coverData = null; if (hasOldCoverData) { - if (coverBehavior instanceof GT_Cover_Fluidfilter) { + if (coverBehavior instanceof CoverFluidfilter) { final String filterKey = String.format("fluidFilter%d", ordinalSide); if (aNBT.hasKey(filterKey)) { coverData = coverInfo.getCoverBehavior() @@ -229,12 +229,12 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov return true; } - public abstract boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCoverID); + public abstract boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCoverID); protected void checkDropCover() { for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { final int coverId = getCoverIDAtSide(side); - if (coverId != 0 && !allowCoverOnSide(side, new GT_ItemStack(coverId))) dropCover(side, side, true); + if (coverId != 0 && !allowCoverOnSide(side, new GTItemStack(coverId))) dropCover(side, side, true); } } @@ -256,20 +256,20 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov public final ITexture getCoverTexture(ForgeDirection side) { final CoverInfo coverInfo = getCoverInfoAtSide(side); if (!coverInfo.isValid()) return null; - if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x1) != 0) { + if (GTMod.instance.isClientSide() && (GTClient.hideValue & 0x1) != 0) { return Textures.BlockIcons.HIDDEN_TEXTURE[0]; // See through } final ITexture coverTexture = (!(this instanceof BaseMetaPipeEntity)) ? coverInfo.getSpecialCoverFGTexture() : coverInfo.getSpecialCoverTexture(); - return coverTexture != null ? coverTexture : GregTech_API.sCovers.get(new GT_ItemStack(getCoverIDAtSide(side))); + return coverTexture != null ? coverTexture : GregTechAPI.sCovers.get(new GTItemStack(getCoverIDAtSide(side))); } protected void requestCoverDataIfNeeded() { if (worldObj == null || !worldObj.isRemote) return; for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { final CoverInfo coverInfo = getCoverInfoAtSide(side); - if (coverInfo.isDataNeededOnClient()) NW.sendToServer(new GT_Packet_RequestCoverData(coverInfo, this)); + if (coverInfo.isDataNeededOnClient()) NW.sendToServer(new GTPacketRequestCoverData(coverInfo, this)); } } @@ -318,15 +318,15 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov @Override @Deprecated - public GT_CoverBehavior getCoverBehaviorAtSide(ForgeDirection side) { - final GT_CoverBehaviorBase behavior = getCoverInfoAtSide(side).getCoverBehavior(); - if (behavior instanceof GT_CoverBehavior) return (GT_CoverBehavior) behavior; - return GregTech_API.sNoBehavior; + public CoverBehavior getCoverBehaviorAtSide(ForgeDirection side) { + final CoverBehaviorBase behavior = getCoverInfoAtSide(side).getCoverBehavior(); + if (behavior instanceof CoverBehavior) return (CoverBehavior) behavior; + return GregTechAPI.sNoBehavior; } @Override public void setCoverItemAtSide(ForgeDirection side, ItemStack aCover) { - GregTech_API.getCoverBehaviorNew(aCover) + GregTechAPI.getCoverBehaviorNew(aCover) .placeCover(side, aCover, this); } @@ -366,7 +366,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov } @Override - public GT_CoverBehaviorBase getCoverBehaviorAtSideNew(ForgeDirection side) { + public CoverBehaviorBase getCoverBehaviorAtSideNew(ForgeDirection side) { return getCoverInfoAtSide(side).getCoverBehavior(); } @@ -546,11 +546,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { final CoverInfo coverInfo = getCoverInfoAtSide(side); if (coverInfo.needsUpdate()) { - NW.sendPacketToAllPlayersInRange( - worldObj, - new GT_Packet_SendCoverData(coverInfo, this), - xCoord, - zCoord); + NW.sendPacketToAllPlayersInRange(worldObj, new GTPacketSendCoverData(coverInfo, this), xCoord, zCoord); coverInfo.setNeedsUpdate(false); } } @@ -562,11 +558,11 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov final NBTTagCompound tag = accessor.getNBTData(); final ForgeDirection currentFacing = accessor.getSide(); - final NBTTagList tList = tag.getTagList(GT_Values.NBT.COVERS, 10); + final NBTTagList tList = tag.getTagList(GTValues.NBT.COVERS, 10); for (byte i = 0; i < tList.tagCount(); i++) { final NBTTagCompound tNBT = tList.getCompoundTagAt(i); final CoverInfo coverInfo = new CoverInfo(this, tNBT); - if (!coverInfo.isValid() || coverInfo.getCoverBehavior() == GregTech_API.sNoBehavior) continue; + if (!coverInfo.isValid() || coverInfo.getCoverBehavior() == GregTechAPI.sNoBehavior) continue; final ItemStack coverStack = coverInfo.getDisplayStack(); if (coverStack != null) { @@ -608,12 +604,12 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov */ public static void addInstalledCoversInformation(NBTTagCompound aNBT, List aList) { if (aNBT == null || aList == null) return; - final NBTTagList tList = aNBT.getTagList(GT_Values.NBT.COVERS, 10); + final NBTTagList tList = aNBT.getTagList(GTValues.NBT.COVERS, 10); for (byte i = 0; i < tList.tagCount(); i++) { final NBTTagCompound tNBT = tList.getCompoundTagAt(i); final CoverInfo coverInfo = new CoverInfo(null, tNBT); - if (!coverInfo.isValid() || coverInfo.getCoverBehavior() == GregTech_API.sNoBehavior) continue; + if (!coverInfo.isValid() || coverInfo.getCoverBehavior() == GregTechAPI.sNoBehavior) continue; final ItemStack coverStack = coverInfo.getDisplayStack(); if (coverStack != null) { @@ -634,8 +630,8 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov final int i = tSide.ordinal(); final int coverId = mCoverSides[i]; if (coverId == 0) continue; - final GT_CoverBehaviorBase behavior = GregTech_API.getCoverBehaviorNew(coverId); - if (behavior == null || behavior == GregTech_API.sNoBehavior) continue; + final CoverBehaviorBase behavior = GregTechAPI.getCoverBehaviorNew(coverId); + if (behavior == null || behavior == GregTechAPI.sNoBehavior) continue; if (!aNBT.hasKey(CoverableTileEntity.COVER_DATA_NBT_KEYS[i])) continue; final ISerializableObject dataObject = behavior .createDataObject(aNBT.getTag(CoverableTileEntity.COVER_DATA_NBT_KEYS[i])); @@ -676,12 +672,12 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov public void addCoverTabs(ModularWindow.Builder builder, UIBuildContext buildContext) { final int COVER_TAB_LEFT = -16, COVER_TAB_TOP = 1, COVER_TAB_HEIGHT = 20, COVER_TAB_WIDTH = 18, COVER_TAB_SPACING = 2, ICON_SIZE = 16; - final boolean flipHorizontally = GT_Mod.gregtechproxy.mCoverTabsFlipped; + final boolean flipHorizontally = GTMod.gregtechproxy.mCoverTabsFlipped; final Column columnWidget = new Column(); builder.widget(columnWidget); final int xPos = flipHorizontally ? (getGUIWidth() - COVER_TAB_LEFT - COVER_TAB_WIDTH) : COVER_TAB_LEFT; - if (GT_Mod.gregtechproxy.mCoverTabsVisible) { + if (GTMod.gregtechproxy.mCoverTabsVisible) { columnWidget.setPos(xPos, COVER_TAB_TOP) .setEnabled( widget -> ((Column) widget).getChildren() diff --git a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java index 8971db2d92..194aef8547 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java @@ -1,6 +1,6 @@ package gregtech.api.metatileentity; -import static gregtech.api.enums.GT_Values.GT; +import static gregtech.api.enums.GTValues.GT; import java.io.File; import java.util.ArrayList; @@ -30,9 +30,9 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gnu.trove.list.TIntList; import gnu.trove.list.array.TIntArrayList; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Textures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IConnectable; @@ -40,15 +40,15 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IColoredTileEntity; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Util; -import gregtech.api.util.GT_Utility; +import gregtech.api.objects.GTItemStack; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtil; +import gregtech.api.util.GTUtility; import gregtech.api.util.ISerializableObject; import gregtech.api.util.WorldSpawnedEventBuilder; -import gregtech.common.GT_Client; +import gregtech.common.GTClient; import gregtech.common.covers.CoverInfo; /** @@ -107,10 +107,10 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { } public MetaPipeEntity(int aID, String aBasicName, String aRegionalName, int aInvSlotCount, boolean aAddInfo) { - if (GregTech_API.sPostloadStarted || !GregTech_API.sPreloadStarted) + if (GregTechAPI.sPostloadStarted || !GregTechAPI.sPreloadStarted) throw new IllegalAccessError("This Constructor has to be called in the load Phase"); - if (GregTech_API.METATILEENTITIES[aID] == null) { - GregTech_API.METATILEENTITIES[aID] = this; + if (GregTechAPI.METATILEENTITIES[aID] == null) { + GregTechAPI.METATILEENTITIES[aID] = this; } else { throw new IllegalArgumentException("MetaMachine-Slot Nr. " + aID + " is already occupied!"); } @@ -118,7 +118,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { .toLowerCase(Locale.ENGLISH); setBaseMetaTileEntity(new BaseMetaPipeEntity()); getBaseMetaTileEntity().setMetaTileID((short) aID); - GT_LanguageManager.addStringLocalization("gt.blockmachines." + mName + ".name", aRegionalName); + GTLanguageManager.addStringLocalization("gt.blockmachines." + mName + ".name", aRegionalName); mInventory = new ItemStack[aInvSlotCount]; if (aAddInfo && GT.isClientSide()) { @@ -129,7 +129,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { protected final void addInfo(int aID) { if (!GT.isClientSide()) return; - ItemStack tStack = new ItemStack(GregTech_API.sBlockMachines, 1, aID); + ItemStack tStack = new ItemStack(GregTechAPI.sBlockMachines, 1, aID); Objects.requireNonNull(tStack.getItem()) .addInformation(tStack, null, new ArrayList<>(), true); } @@ -187,7 +187,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { @Override public ItemStack getStackForm(long aAmount) { - return new ItemStack(GregTech_API.sBlockMachines, (int) aAmount, getBaseMetaTileEntity().getMetaTileID()); + return new ItemStack(GregTechAPI.sBlockMachines, (int) aAmount, getBaseMetaTileEntity().getMetaTileID()); } public boolean isCoverOnSide(BaseMetaPipeEntity aPipe, EntityLivingBase aEntity) { @@ -254,7 +254,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { } @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCoverID) { + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCoverID) { return true; } @@ -322,7 +322,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { @Override public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isClientSide() && GT_Client.changeDetected == 4) { + if (aBaseMetaTileEntity.isClientSide() && GTClient.changeDetected == 4) { /* * Client tick counter that is set to 5 on hiding pipes and covers. It triggers a texture update next client * tick when reaching 4, with provision for 3 more update tasks, spreading client change detection related @@ -598,8 +598,8 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { @Override public String getInventoryName() { - if (GregTech_API.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()] != null) - return GregTech_API.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()].getMetaName(); + if (GregTechAPI.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()] != null) + return GregTechAPI.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()].getMetaName(); return ""; } @@ -615,7 +615,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { @Override public ItemStack decrStackSize(int aIndex, int aAmount) { - ItemStack tStack = getStackInSlot(aIndex), rStack = GT_Utility.copyOrNull(tStack); + ItemStack tStack = getStackInSlot(aIndex), rStack = GTUtility.copyOrNull(tStack); if (tStack != null) { if (tStack.stackSize <= aAmount) { if (setStackToZeroInsteadOfNull(aIndex)) tStack.stackSize = 0; @@ -647,7 +647,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { public boolean canInsertItem(int slotIndex, ItemStack itemStack, int ordinalSide) { return isValidSlot(slotIndex) && itemStack != null && slotIndex < mInventory.length - && (mInventory[slotIndex] == null || GT_Utility.areStacksEqual(itemStack, mInventory[slotIndex])) + && (mInventory[slotIndex] == null || GTUtility.areStacksEqual(itemStack, mInventory[slotIndex])) && allowPutStack(getBaseMetaTileEntity(), slotIndex, ForgeDirection.getOrientation(ordinalSide), itemStack); } @@ -796,12 +796,12 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { @Override public void doExplosion(long aExplosionPower) { - float tStrength = GT_Values.getExplosionPowerForVoltage(aExplosionPower); + float tStrength = GTValues.getExplosionPowerForVoltage(aExplosionPower); int tX = getBaseMetaTileEntity().getXCoord(), tY = getBaseMetaTileEntity().getYCoord(), tZ = getBaseMetaTileEntity().getZCoord(); World tWorld = getBaseMetaTileEntity().getWorld(); tWorld.setBlock(tX, tY, tZ, Blocks.air); - if (GregTech_API.sMachineExplosions) { + if (GregTechAPI.sMachineExplosions) { new WorldSpawnedEventBuilder.ExplosionEffectEventBuilder().setStrength(tStrength) .setSmoking(true) .setPosition(tX + 0.5, tY + 0.5, tZ + 0.5) @@ -949,7 +949,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { return (mConnections & sideDirection.flag) != 0; } - public boolean letsIn(GT_CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, + public boolean letsIn(CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return false; } @@ -958,7 +958,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { return false; } - public boolean letsOut(GT_CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, + public boolean letsOut(CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { return false; } @@ -967,12 +967,12 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { return false; } - public boolean letsIn(GT_CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, + public boolean letsIn(CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, ICoverable aTileEntity) { return false; } - public boolean letsOut(GT_CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, + public boolean letsOut(CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, ICoverable aTileEntity) { return false; } @@ -1000,13 +1000,13 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { @Override public int getGUIColorization() { Dyes dye = Dyes.dyeWhite; - if (GregTech_API.sColoredGUI) { - if (GregTech_API.sMachineMetalGUI) { + if (GregTechAPI.sColoredGUI) { + if (GregTechAPI.sMachineMetalGUI) { dye = Dyes.MACHINE_METAL; } else if (getBaseMetaTileEntity() != null) { dye = Dyes.getDyeFromIndex(getBaseMetaTileEntity().getColorization()); } } - return GT_Util.getRGBInt(dye.getRGBA()); + return GTUtil.getRGBInt(dye.getRGBA()); } } diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index d4f8aa6ba4..1008a64507 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -38,27 +38,27 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gnu.trove.list.TIntList; import gnu.trove.list.array.TIntArrayList; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.SoundResource; import gregtech.api.enums.SteamVariant; -import gregtech.api.gui.GT_GUIColorOverride; +import gregtech.api.gui.GUIColorOverride; import gregtech.api.gui.modularui.GUITextureSet; import gregtech.api.interfaces.ICleanroom; import gregtech.api.interfaces.ICleanroomReceiver; import gregtech.api.interfaces.IConfigurationCircuitSupport; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; +import gregtech.api.metatileentity.implementations.MTECable; +import gregtech.api.objects.GTItemStack; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtil; +import gregtech.api.util.GTUtility; import gregtech.api.util.GT_TooltipDataCache; -import gregtech.api.util.GT_Util; -import gregtech.api.util.GT_Utility; -import gregtech.common.GT_Client; +import gregtech.common.GTClient; import gregtech.common.covers.CoverInfo; import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; @@ -90,7 +90,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei */ public final ItemStackHandler inventoryHandler; - protected GT_GUIColorOverride colorOverride; + protected GUIColorOverride colorOverride; protected GT_TooltipDataCache mTooltipCache = new GT_TooltipDataCache(); @Override @@ -128,18 +128,18 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei * @param aID the machine ID */ public MetaTileEntity(int aID, String aBasicName, String aRegionalName, int aInvSlotCount) { - if (GregTech_API.sPostloadStarted || !GregTech_API.sPreloadStarted) + if (GregTechAPI.sPostloadStarted || !GregTechAPI.sPreloadStarted) throw new IllegalAccessError("This Constructor has to be called in the load Phase"); - if (GregTech_API.METATILEENTITIES[aID] == null) { - GregTech_API.METATILEENTITIES[aID] = this; + if (GregTechAPI.METATILEENTITIES[aID] == null) { + GregTechAPI.METATILEENTITIES[aID] = this; } else { throw new IllegalArgumentException("MetaMachine-Slot Nr. " + aID + " is already occupied!"); } mName = aBasicName.replace(" ", "_") .toLowerCase(Locale.ENGLISH); - setBaseMetaTileEntity(GregTech_API.constructBaseMetaTileEntity()); + setBaseMetaTileEntity(GregTechAPI.constructBaseMetaTileEntity()); getBaseMetaTileEntity().setMetaTileID((short) aID); - GT_LanguageManager.addStringLocalization("gt.blockmachines." + mName + ".name", aRegionalName); + GTLanguageManager.addStringLocalization("gt.blockmachines." + mName + ".name", aRegionalName); mInventory = new ItemStack[aInvSlotCount]; inventoryHandler = new ItemStackHandler(mInventory); } @@ -151,7 +151,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei mInventory = new ItemStack[aInvSlotCount]; mName = aName; inventoryHandler = new ItemStackHandler(mInventory); - colorOverride = GT_GUIColorOverride.get(getGUITextureSet().getMainBackground().location); + colorOverride = GUIColorOverride.get(getGUITextureSet().getMainBackground().location); } @Override @@ -179,12 +179,12 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei @Override public ItemStack getStackForm(long aAmount) { - return new ItemStack(GregTech_API.sBlockMachines, (int) aAmount, getBaseMetaTileEntity().getMetaTileID()); + return new ItemStack(GregTechAPI.sBlockMachines, (int) aAmount, getBaseMetaTileEntity().getMetaTileID()); } @Override public String getLocalName() { - return GT_LanguageManager.getTranslation("gt.blockmachines." + mName + ".name"); + return GTLanguageManager.getTranslation("gt.blockmachines." + mName + ".name"); } @Override @@ -219,7 +219,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei } @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { return true; } @@ -254,8 +254,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei if (!aPlayer.isSneaking()) return false; final ForgeDirection oppositeSide = wrenchingSide.getOpposite(); final TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityAtSide(wrenchingSide); - if ((tTileEntity instanceof IGregTechTileEntity gtTE) - && (gtTE.getMetaTileEntity() instanceof GT_MetaPipeEntity_Cable)) { + if ((tTileEntity instanceof IGregTechTileEntity gtTE) && (gtTE.getMetaTileEntity() instanceof MTECable)) { // The tile entity we're facing is a cable, let's try to connect to it return gtTE.getMetaTileEntity() @@ -276,8 +275,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei if (!aPlayer.isSneaking()) return false; final ForgeDirection oppositeSide = wrenchingSide.getOpposite(); TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityAtSide(wrenchingSide); - if ((tTileEntity instanceof IGregTechTileEntity gtTE) - && (gtTE.getMetaTileEntity() instanceof GT_MetaPipeEntity_Cable)) { + if ((tTileEntity instanceof IGregTechTileEntity gtTE) && (gtTE.getMetaTileEntity() instanceof MTECable)) { // The tile entity we're facing is a cable, let's try to connect to it return gtTE.getMetaTileEntity() @@ -311,7 +309,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei @Override public void onExplosion() { - GT_Log.exp.println( + GTLog.exp.println( "Machine at " + this.getBaseMetaTileEntity() .getXCoord() + " | " @@ -338,7 +336,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei @Override public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isClientSide() && GT_Client.changeDetected == 4) { + if (aBaseMetaTileEntity.isClientSide() && GTClient.changeDetected == 4) { /* * Client tick counter that is set to 5 on hiding pipes and covers. It triggers a texture update next client * tick when reaching 4, with provision for 3 more update tasks, spreading client change detection related @@ -633,14 +631,14 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei * Determines the Tier of the Machine, used for de-charging Tools. */ public long getInputTier() { - return GT_Utility.getTier(getBaseMetaTileEntity().getInputVoltage()); + return GTUtility.getTier(getBaseMetaTileEntity().getInputVoltage()); } /** * Determines the Tier of the Machine, used for charging Tools. */ public long getOutputTier() { - return GT_Utility.getTier(getBaseMetaTileEntity().getOutputVoltage()); + return GTUtility.getTier(getBaseMetaTileEntity().getOutputVoltage()); } /** @@ -888,7 +886,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei markDirty(); if (this instanceof IConfigurationCircuitSupport ccs) { if (ccs.allowSelectCircuit() && aIndex == ccs.getCircuitSlot() && aStack != null) { - mInventory[aIndex] = GT_Utility.copyAmount(0, aStack); + mInventory[aIndex] = GTUtility.copyAmount(0, aStack); return; } } @@ -897,8 +895,8 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei @Override public String getInventoryName() { - if (GregTech_API.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()] != null) - return GregTech_API.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()].getMetaName(); + if (GregTechAPI.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()] != null) + return GregTechAPI.METATILEENTITIES[getBaseMetaTileEntity().getMetaTileID()].getMetaName(); return ""; } @@ -914,7 +912,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei @Override public ItemStack decrStackSize(int aIndex, int aAmount) { - ItemStack tStack = getStackInSlot(aIndex), rStack = GT_Utility.copyOrNull(tStack); + ItemStack tStack = getStackInSlot(aIndex), rStack = GTUtility.copyOrNull(tStack); if (tStack != null) { if (tStack.stackSize <= aAmount) { if (setStackToZeroInsteadOfNull(aIndex)) { @@ -949,7 +947,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { return isValidSlot(aIndex) && aStack != null && aIndex < mInventory.length - && (mInventory[aIndex] == null || GT_Utility.areStacksEqual(aStack, mInventory[aIndex])) + && (mInventory[aIndex] == null || GTUtility.areStacksEqual(aStack, mInventory[aIndex])) && allowPutStack(getBaseMetaTileEntity(), aIndex, ForgeDirection.getOrientation(ordinalSide), aStack); } @@ -986,7 +984,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei @Override public int fill(ForgeDirection side, FluidStack aFluid, boolean doFill) { - if (getBaseMetaTileEntity().hasSteamEngineUpgrade() && GT_ModHandler.isSteam(aFluid) && aFluid.amount > 1) { + if (getBaseMetaTileEntity().hasSteamEngineUpgrade() && GTModHandler.isSteam(aFluid) && aFluid.amount > 1) { int tSteam = (int) Math.min( Integer.MAX_VALUE, Math.min( @@ -1114,15 +1112,14 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei @Override public void doExplosion(long aExplosionPower) { - float tStrength = GT_Values.getExplosionPowerForVoltage(aExplosionPower); + float tStrength = GTValues.getExplosionPowerForVoltage(aExplosionPower); final int tX = getBaseMetaTileEntity().getXCoord(); final int tY = getBaseMetaTileEntity().getYCoord(); final int tZ = getBaseMetaTileEntity().getZCoord(); final World tWorld = getBaseMetaTileEntity().getWorld(); - GT_Utility.sendSoundToPlayers(tWorld, SoundResource.IC2_MACHINES_MACHINE_OVERLOAD, 1.0F, -1, tX, tY, tZ); + GTUtility.sendSoundToPlayers(tWorld, SoundResource.IC2_MACHINES_MACHINE_OVERLOAD, 1.0F, -1, tX, tY, tZ); tWorld.setBlock(tX, tY, tZ, Blocks.air); - if (GregTech_API.sMachineExplosions) - tWorld.createExplosion(null, tX + 0.5, tY + 0.5, tZ + 0.5, tStrength, true); + if (GregTechAPI.sMachineExplosions) tWorld.createExplosion(null, tX + 0.5, tY + 0.5, tZ + 0.5, tStrength, true); } @Override @@ -1266,16 +1263,16 @@ public abstract class MetaTileEntity implements IMetaTileEntity, ICleanroomRecei if (this.colorOverride.sLoaded()) { if (this.colorOverride.sGuiTintingEnabled() && getBaseMetaTileEntity() != null) { dye = Dyes.getDyeFromIndex(getBaseMetaTileEntity().getColorization()); - return this.colorOverride.getGuiTintOrDefault(dye.mName, GT_Util.getRGBInt(dye.getRGBA())); + return this.colorOverride.getGuiTintOrDefault(dye.mName, GTUtil.getRGBInt(dye.getRGBA())); } - } else if (GregTech_API.sColoredGUI) { - if (GregTech_API.sMachineMetalGUI) { + } else if (GregTechAPI.sColoredGUI) { + if (GregTechAPI.sMachineMetalGUI) { dye = Dyes.MACHINE_METAL; } else if (getBaseMetaTileEntity() != null) { dye = Dyes.getDyeFromIndex(getBaseMetaTileEntity().getColorization()); } } - return GT_Util.getRGBInt(dye.getRGBA()); + return GTUtil.getRGBInt(dye.getRGBA()); } @Override diff --git a/src/main/java/gregtech/api/metatileentity/TileIC2EnergySink.java b/src/main/java/gregtech/api/metatileentity/TileIC2EnergySink.java index 6fecb840b4..a793dbbe34 100644 --- a/src/main/java/gregtech/api/metatileentity/TileIC2EnergySink.java +++ b/src/main/java/gregtech/api/metatileentity/TileIC2EnergySink.java @@ -9,21 +9,21 @@ import gregtech.api.interfaces.metatileentity.IConnectable; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.metatileentity.IMetaTileEntityCable; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; -import gregtech.api.util.GT_Utility; +import gregtech.api.metatileentity.implementations.MTECable; +import gregtech.api.util.GTUtility; import ic2.api.energy.tile.IEnergySink; public class TileIC2EnergySink extends TileEntity implements IEnergySink { private final IGregTechTileEntity myMeta; - private GT_MetaPipeEntity_Cable cableMeta = null; + private MTECable cableMeta = null; public TileIC2EnergySink(IGregTechTileEntity meta) { if (meta == null) throw new NullPointerException("no null metas"); myMeta = meta; final IMetaTileEntity metaTile = myMeta.getMetaTileEntity(); if (metaTile instanceof IMetaTileEntityCable) { - cableMeta = (GT_MetaPipeEntity_Cable) metaTile; + cableMeta = (MTECable) metaTile; } setWorldObj(meta.getWorld()); xCoord = meta.getXCoord(); @@ -62,7 +62,7 @@ public class TileIC2EnergySink extends TileEntity implements IEnergySink { */ @Override public int getSinkTier() { - return GT_Utility.getTier(cableMeta != null ? cableMeta.mVoltage : myMeta.getInputVoltage()); + return GTUtility.getTier(cableMeta != null ? cableMeta.mVoltage : myMeta.getInputVoltage()); } /** diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java deleted file mode 100644 index e44860963f..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java +++ /dev/null @@ -1,649 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Mods.GalacticraftCore; -import static net.minecraftforge.common.util.ForgeDirection.DOWN; -import static net.minecraftforge.common.util.ForgeDirection.EAST; -import static net.minecraftforge.common.util.ForgeDirection.NORTH; -import static net.minecraftforge.common.util.ForgeDirection.SOUTH; -import static net.minecraftforge.common.util.ForgeDirection.UP; -import static net.minecraftforge.common.util.ForgeDirection.WEST; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import cofh.api.energy.IEnergyReceiver; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TextureSet; -import gregtech.api.enums.Textures; -import gregtech.api.graphs.Node; -import gregtech.api.graphs.NodeList; -import gregtech.api.graphs.PowerNode; -import gregtech.api.graphs.PowerNodes; -import gregtech.api.graphs.consumers.ConsumerNode; -import gregtech.api.graphs.paths.PowerNodePath; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IConnectable; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.metatileentity.IMetaTileEntityCable; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IEnergyConnected; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.interfaces.PowerLogicHost; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.objects.GT_Cover_None; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_GC_Compat; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.GT_Client; -import gregtech.common.covers.CoverInfo; -import gregtech.common.covers.GT_Cover_SolarPanel; -import ic2.api.energy.EnergyNet; -import ic2.api.energy.tile.IEnergyEmitter; -import ic2.api.energy.tile.IEnergySink; -import ic2.api.energy.tile.IEnergySource; -import ic2.api.energy.tile.IEnergyTile; -import ic2.api.reactor.IReactorChamber; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTileEntityCable { - - public final float mThickNess; - public final Materials mMaterial; - public final long mCableLossPerMeter, mAmperage, mVoltage; - public final boolean mInsulated, mCanShock; - - public int mTransferredAmperage = 0; - - public GT_MetaPipeEntity_Cable(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, - long aCableLossPerMeter, long aAmperage, long aVoltage, boolean aInsulated, boolean aCanShock) { - super(aID, aName, aNameRegional, 0); - mThickNess = aThickNess; - mMaterial = aMaterial; - mAmperage = aAmperage; - mVoltage = aVoltage; - mInsulated = aInsulated; - mCanShock = aCanShock; - mCableLossPerMeter = aCableLossPerMeter; - } - - public GT_MetaPipeEntity_Cable(String aName, float aThickNess, Materials aMaterial, long aCableLossPerMeter, - long aAmperage, long aVoltage, boolean aInsulated, boolean aCanShock) { - super(aName, 0); - mThickNess = aThickNess; - mMaterial = aMaterial; - mAmperage = aAmperage; - mVoltage = aVoltage; - mInsulated = aInsulated; - mCanShock = aCanShock; - mCableLossPerMeter = aCableLossPerMeter; - } - - @Override - public byte getTileEntityBaseType() { - return (byte) (mInsulated ? 9 : 8); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaPipeEntity_Cable( - mName, - mThickNess, - mMaterial, - mCableLossPerMeter, - mAmperage, - mVoltage, - mInsulated, - mCanShock); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - int facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (!mInsulated) return new ITexture[] { TextureFactory - .of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], Dyes.getModulation(colorIndex, mMaterial.mRGBa)) }; - if (active) { - float tThickNess = getThickNess(); - if (tThickNess < 0.124F) return new ITexture[] { TextureFactory - .of(Textures.BlockIcons.INSULATION_FULL, Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - if (tThickNess < 0.374F) // 0.375 x1 - return new ITexture[] { - TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), - TextureFactory.of( - Textures.BlockIcons.INSULATION_TINY, - Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - if (tThickNess < 0.499F) // 0.500 x2 - return new ITexture[] { - TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), - TextureFactory.of( - Textures.BlockIcons.INSULATION_SMALL, - Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - if (tThickNess < 0.624F) // 0.625 x4 - return new ITexture[] { - TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), - TextureFactory.of( - Textures.BlockIcons.INSULATION_MEDIUM, - Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - if (tThickNess < 0.749F) // 0.750 x8 - return new ITexture[] { - TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), - TextureFactory.of( - Textures.BlockIcons.INSULATION_MEDIUM_PLUS, - Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - if (tThickNess < 0.874F) // 0.825 x12 - return new ITexture[] { - TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), - TextureFactory.of( - Textures.BlockIcons.INSULATION_LARGE, - Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - return new ITexture[] { - TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), - TextureFactory.of( - Textures.BlockIcons.INSULATION_HUGE, - Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - } - return new ITexture[] { TextureFactory - .of(Textures.BlockIcons.INSULATION_FULL, Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - } - - @Override - public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity aEntity) { - - if (!mCanShock) return; - - final BaseMetaPipeEntity baseEntity = (BaseMetaPipeEntity) getBaseMetaTileEntity(); - - if (!(aEntity instanceof EntityLivingBase livingEntity)) return; - if (!(baseEntity.getNodePath() instanceof PowerNodePath powerPath)) return; - - if (isCoverOnSide(baseEntity, livingEntity)) return; - if ((baseEntity.mConnections & IConnectable.HAS_HARDENEDFOAM) == 1) return; - - final long amperage = powerPath.getAmperage(); - final long voltage = powerPath.getVoltage(); - - if (amperage == 0L) return; - - GT_Utility.applyElectricityDamage(livingEntity, voltage, amperage); - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return false; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public final boolean renderInside(ForgeDirection side) { - return false; - } - - @Override - public int getProgresstime() { - return (int) mTransferredAmperage * 64; - } - - @Override - public int maxProgresstime() { - return (int) mAmperage * 64; - } - - @Override - public long injectEnergyUnits(ForgeDirection side, long voltage, long amperage) { - if (!isConnectedAtSide(side) && side != ForgeDirection.UNKNOWN) return 0; - if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) - .letsEnergyIn()) return 0; - return transferElectricity(side, voltage, amperage, (HashSet) null); - } - - @Override - @Deprecated - public long transferElectricity(ForgeDirection side, long aVoltage, long aAmperage, - ArrayList aAlreadyPassedTileEntityList) { - return transferElectricity(side, aVoltage, aAmperage, new HashSet<>(aAlreadyPassedTileEntityList)); - } - - @Override - public long transferElectricity(ForgeDirection side, long voltage, long amperage, - HashSet alreadyPassedSet) { - if (!getBaseMetaTileEntity().isServerSide() || !isConnectedAtSide(side) && side != ForgeDirection.UNKNOWN) - return 0; - final BaseMetaPipeEntity tBase = (BaseMetaPipeEntity) getBaseMetaTileEntity(); - if (!(tBase.getNode() instanceof PowerNode tNode)) return 0; - int tPlace = 0; - final Node[] tToPower = new Node[tNode.mConsumers.size()]; - if (tNode.mHadVoltage) { - for (ConsumerNode consumer : tNode.mConsumers) { - if (consumer.needsEnergy()) tToPower[tPlace++] = consumer; - } - } else { - tNode.mHadVoltage = true; - for (ConsumerNode consumer : tNode.mConsumers) { - tToPower[tPlace++] = consumer; - } - } - return PowerNodes.powerNode(tNode, null, new NodeList(tToPower), (int) voltage, (int) amperage); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aTick % 20 == 0 && aBaseMetaTileEntity.isServerSide() - && (!GT_Mod.gregtechproxy.gt6Cable || mCheckConnections)) { - checkConnections(); - } - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (GT_Mod.gregtechproxy.gt6Cable - && GT_ModHandler.damageOrDechargeItem(aPlayer.inventory.getCurrentItem(), 1, 500, aPlayer)) { - if (isConnectedAtSide(wrenchingSide)) { - disconnect(wrenchingSide); - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("215", "Disconnected")); - } else if (!GT_Mod.gregtechproxy.costlyCableConnection) { - if (connect(wrenchingSide) > 0) - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("214", "Connected")); - } - return true; - } - return false; - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (GT_Mod.gregtechproxy.gt6Cable - && GT_ModHandler.damageOrDechargeItem(aPlayer.inventory.getCurrentItem(), 1, 500, aPlayer)) { - if (isConnectedAtSide(wrenchingSide)) { - disconnect(wrenchingSide); - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("215", "Disconnected")); - } else if (!GT_Mod.gregtechproxy.costlyCableConnection || GT_ModHandler.consumeSolderingMaterial(aPlayer)) { - if (connect(wrenchingSide) > 0) - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("214", "Connected")); - } - return true; - } - return false; - } - - @Override - public boolean letsIn(GT_CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return coverBehavior.letsEnergyIn(side, aCoverID, aCoverVariable, aTileEntity); - } - - @Override - public boolean letsOut(GT_CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return coverBehavior.letsEnergyOut(side, aCoverID, aCoverVariable, aTileEntity); - } - - @Override - public boolean letsIn(GT_CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return coverBehavior.letsEnergyIn(side, aCoverID, aCoverVariable, aTileEntity); - } - - @Override - public boolean letsOut(GT_CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return coverBehavior.letsEnergyOut(side, aCoverID, aCoverVariable, aTileEntity); - } - - @Override - public boolean letsIn(CoverInfo coverInfo) { - return coverInfo.letsEnergyIn(); - } - - @Override - public boolean letsOut(CoverInfo coverInfo) { - return coverInfo.letsEnergyOut(); - } - - @Override - public boolean canConnect(ForgeDirection side, TileEntity tileEntity) { - final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity(); - final GT_CoverBehaviorBase coverBehavior = baseMetaTile.getCoverBehaviorAtSideNew(side); - final ForgeDirection oppositeSide = side.getOpposite(); - - // GT Machine handling - if ((tileEntity instanceof PowerLogicHost powerLogic && powerLogic.getPowerLogic(oppositeSide) != null) - || ((tileEntity instanceof IEnergyConnected energyConnected) - && (energyConnected.inputEnergyFrom(oppositeSide, false) - || energyConnected.outputsEnergyTo(oppositeSide, false)))) - return true; - - // Solar Panel Compat - if (coverBehavior instanceof GT_Cover_SolarPanel) return true; - - // ((tIsGregTechTileEntity && tIsTileEntityCable) && (tAlwaysLookConnected || tLetEnergyIn || tLetEnergyOut) ) - // --> Not needed - if (GalacticraftCore.isModLoaded() && GT_GC_Compat.canConnect(tileEntity, oppositeSide)) return true; - - // AE2-p2p Compat - if (tileEntity instanceof appeng.tile.powersink.IC2 ic2sink - && ic2sink.acceptsEnergyFrom((TileEntity) baseMetaTile, oppositeSide)) return true; - - // IC2 Compat - { - final TileEntity ic2Energy; - - if (tileEntity instanceof IReactorChamber) - ic2Energy = (TileEntity) ((IReactorChamber) tileEntity).getReactor(); - else ic2Energy = (tileEntity == null || tileEntity instanceof IEnergyTile || EnergyNet.instance == null) - ? tileEntity - : EnergyNet.instance - .getTileEntity(tileEntity.getWorldObj(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); - - // IC2 Sink Compat - if ((ic2Energy instanceof IEnergySink) - && ((IEnergySink) ic2Energy).acceptsEnergyFrom((TileEntity) baseMetaTile, oppositeSide)) return true; - - // IC2 Source Compat - if (GT_Mod.gregtechproxy.ic2EnergySourceCompat && (ic2Energy instanceof IEnergySource)) { - if (((IEnergySource) ic2Energy).emitsEnergyTo((TileEntity) baseMetaTile, oppositeSide)) { - return true; - } - } - } - // RF Output Compat - if (GregTech_API.mOutputRF && tileEntity instanceof IEnergyReceiver - && ((IEnergyReceiver) tileEntity).canConnectEnergy(oppositeSide)) return true; - - // RF Input Compat - return GregTech_API.mInputRF && (tileEntity instanceof IEnergyEmitter - && ((IEnergyEmitter) tileEntity).emitsEnergyTo((TileEntity) baseMetaTile, oppositeSide)); - } - - @Override - public boolean getGT6StyleConnection() { - // Yes if GT6 Cables are enabled - return GT_Mod.gregtechproxy.gt6Cable; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public String[] getDescription() { - return new String[] { - StatCollector.translateToLocal("GT5U.item.cable.max_voltage") + ": %%%" - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mVoltage) - + " (" - + GT_Utility.getColoredTierNameFromVoltage(mVoltage) - + EnumChatFormatting.GREEN - + ")" - + EnumChatFormatting.GRAY, - StatCollector.translateToLocal("GT5U.item.cable.max_amperage") + ": %%%" - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mAmperage) - + EnumChatFormatting.GRAY, - StatCollector.translateToLocal("GT5U.item.cable.loss") + ": %%%" - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(mCableLossPerMeter) - + EnumChatFormatting.GRAY - + "%%% " - + StatCollector.translateToLocal("GT5U.item.cable.eu_volt") }; - } - - @Override - public float getThickNess() { - if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x1) != 0) return 0.0625F; - return mThickNess; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - if (GT_Mod.gregtechproxy.gt6Cable) aNBT.setByte("mConnections", mConnections); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - if (GT_Mod.gregtechproxy.gt6Cable) { - mConnections = aNBT.getByte("mConnections"); - } - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - final BaseMetaPipeEntity base = (BaseMetaPipeEntity) getBaseMetaTileEntity(); - final PowerNodePath path = (PowerNodePath) base.getNodePath(); - - if (path == null) - return new String[] { EnumChatFormatting.RED + "Failed to get Power Node info" + EnumChatFormatting.RESET }; - - final long currAmp = path.getAmperage(); - final long currVoltage = path.getVoltage(); - - final double avgAmp = path.getAvgAmperage(); - final double avgVoltage = path.getAvgVoltage(); - - final long maxVoltageOut = (mVoltage - mCableLossPerMeter) * mAmperage; - - return new String[] { - "Amperage: " + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(currAmp) - + EnumChatFormatting.RESET - + " / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mAmperage) - + EnumChatFormatting.RESET - + " A", - "Voltage Out: " + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(currVoltage) - + EnumChatFormatting.RESET - + " / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxVoltageOut) - + EnumChatFormatting.RESET - + " EU/t", - "Avg Amperage (20t): " + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(avgAmp) - + EnumChatFormatting.RESET - + " A", - "Avg Output (20t): " + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(avgVoltage) - + EnumChatFormatting.RESET - + " EU/t" }; - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) - return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1); - else return getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - } - - private AxisAlignedBB getActualCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - float tSpace = (1f - mThickNess) / 2; - float spaceDown = tSpace; - float spaceUp = 1f - tSpace; - float spaceNorth = tSpace; - float spaceSouth = 1f - tSpace; - float spaceWest = tSpace; - float spaceEast = 1f - tSpace; - - if (getBaseMetaTileEntity().getCoverIDAtSide(DOWN) != 0) { - spaceDown = spaceNorth = spaceWest = 0; - spaceSouth = spaceEast = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(UP) != 0) { - spaceNorth = spaceWest = 0; - spaceUp = spaceSouth = spaceEast = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(NORTH) != 0) { - spaceDown = spaceNorth = spaceWest = 0; - spaceUp = spaceEast = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(SOUTH) != 0) { - spaceDown = spaceWest = 0; - spaceUp = spaceSouth = spaceEast = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(WEST) != 0) { - spaceDown = spaceNorth = spaceWest = 0; - spaceUp = spaceSouth = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(EAST) != 0) { - spaceDown = spaceNorth = 0; - spaceUp = spaceSouth = spaceEast = 1; - } - - byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; - if ((tConn & DOWN.flag) != 0) spaceDown = 0f; - if ((tConn & UP.flag) != 0) spaceUp = 1f; - if ((tConn & NORTH.flag) != 0) spaceNorth = 0f; - if ((tConn & SOUTH.flag) != 0) spaceSouth = 1f; - if ((tConn & WEST.flag) != 0) spaceWest = 0f; - if ((tConn & EAST.flag) != 0) spaceEast = 1f; - - return AxisAlignedBB.getBoundingBox( - aX + spaceWest, - aY + spaceDown, - aZ + spaceNorth, - aX + spaceEast, - aY + spaceUp, - aZ + spaceSouth); - } - - @Override - public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, - List outputAABB, Entity collider) { - super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); - if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) { - final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb); - } - } - - @Override - public boolean shouldJoinIc2Enet() { - if (!GT_Mod.gregtechproxy.ic2EnergySourceCompat) return false; - - if (mConnections != 0) { - final IGregTechTileEntity baseMeta = getBaseMetaTileEntity(); - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (isConnectedAtSide(side)) { - final TileEntity tTileEntity = baseMeta.getTileEntityAtSide(side); - final TileEntity tEmitter = (tTileEntity == null || tTileEntity instanceof IEnergyTile - || EnergyNet.instance == null) - ? tTileEntity - : EnergyNet.instance.getTileEntity( - tTileEntity.getWorldObj(), - tTileEntity.xCoord, - tTileEntity.yCoord, - tTileEntity.zCoord); - - if (tEmitter instanceof IEnergyEmitter) return true; - } - } - } - return false; - } - - @Override - public void reloadLocks() { - final BaseMetaPipeEntity pipe = (BaseMetaPipeEntity) getBaseMetaTileEntity(); - if (pipe.getNode() != null) { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (isConnectedAtSide(side)) { - final CoverInfo coverInfo = pipe.getCoverInfoAtSide(side); - if (coverInfo.getCoverBehavior() instanceof GT_Cover_None) continue; - if (!letsIn(coverInfo) || !letsOut(coverInfo)) { - pipe.addToLock(pipe, side); - } else { - pipe.removeFromLock(pipe, side); - } - } - } - } else { - boolean dontAllow = false; - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (isConnectedAtSide(side)) { - final CoverInfo coverInfo = pipe.getCoverInfoAtSide(side); - if (coverInfo.getCoverBehavior() instanceof GT_Cover_None) continue; - - if (!letsIn(coverInfo) || !letsOut(coverInfo)) { - dontAllow = true; - } - } - } - if (dontAllow) { - pipe.addToLock(pipe, DOWN); - } else { - pipe.removeFromLock(pipe, DOWN); - } - } - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - - currenttip.add( - StatCollector.translateToLocal("GT5U.item.cable.max_voltage") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mVoltage) - + " (" - + GT_Utility.getColoredTierNameFromVoltage(mVoltage) - + EnumChatFormatting.GREEN - + ")"); - currenttip.add( - StatCollector.translateToLocal("GT5U.item.cable.max_amperage") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mAmperage)); - currenttip.add( - StatCollector.translateToLocal("GT5U.item.cable.loss") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(mCableLossPerMeter) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.item.cable.eu_volt")); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java deleted file mode 100644 index cafd1c9cb7..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java +++ /dev/null @@ -1,979 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; -import static gregtech.api.enums.GT_Values.D1; -import static gregtech.api.enums.Mods.TinkerConstruct; -import static gregtech.api.enums.Mods.Translocator; -import static gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid.Border.BOTTOM; -import static gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid.Border.LEFT; -import static gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid.Border.RIGHT; -import static gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid.Border.TOP; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; -import static net.minecraftforge.common.util.ForgeDirection.DOWN; -import static net.minecraftforge.common.util.ForgeDirection.EAST; -import static net.minecraftforge.common.util.ForgeDirection.NORTH; -import static net.minecraftforge.common.util.ForgeDirection.SOUTH; -import static net.minecraftforge.common.util.ForgeDirection.UP; -import static net.minecraftforge.common.util.ForgeDirection.WEST; - -import java.util.ArrayList; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; - -import org.apache.commons.lang3.tuple.MutableTriple; - -import cpw.mods.fml.common.Optional; -import gregtech.GT_Mod; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Mods; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.ParticleFX; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.enums.ToolModes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; -import gregtech.common.GT_Client; -import gregtech.common.config.other.ConfigGeneral; -import gregtech.common.covers.CoverInfo; -import gregtech.common.covers.GT_Cover_Drain; -import gregtech.common.covers.GT_Cover_FluidRegulator; - -public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { - - protected static final EnumMap> FACE_BORDER_MAP = new EnumMap<>( - ForgeDirection.class); - - static { - FACE_BORDER_MAP.put(DOWN, borderMap(NORTH, SOUTH, EAST, WEST)); - FACE_BORDER_MAP.put(UP, borderMap(NORTH, SOUTH, WEST, EAST)); - FACE_BORDER_MAP.put(NORTH, borderMap(UP, DOWN, EAST, WEST)); - FACE_BORDER_MAP.put(SOUTH, borderMap(UP, DOWN, WEST, EAST)); - FACE_BORDER_MAP.put(WEST, borderMap(UP, DOWN, NORTH, SOUTH)); - FACE_BORDER_MAP.put(EAST, borderMap(UP, DOWN, SOUTH, NORTH)); - } - - protected static final Map RESTR_TEXTURE_MAP = new HashMap<>(); - - static { - RESTR_TEXTURE_MAP.put(TOP.mask, Textures.BlockIcons.PIPE_RESTRICTOR_UP); - RESTR_TEXTURE_MAP.put(BOTTOM.mask, Textures.BlockIcons.PIPE_RESTRICTOR_DOWN); - RESTR_TEXTURE_MAP.put(TOP.mask | BOTTOM.mask, Textures.BlockIcons.PIPE_RESTRICTOR_UD); - RESTR_TEXTURE_MAP.put(LEFT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_LEFT); - RESTR_TEXTURE_MAP.put(TOP.mask | LEFT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_UL); - RESTR_TEXTURE_MAP.put(BOTTOM.mask | LEFT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_DL); - RESTR_TEXTURE_MAP.put(TOP.mask | BOTTOM.mask | LEFT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_NR); - RESTR_TEXTURE_MAP.put(RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_RIGHT); - RESTR_TEXTURE_MAP.put(TOP.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_UR); - RESTR_TEXTURE_MAP.put(BOTTOM.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_DR); - RESTR_TEXTURE_MAP.put(TOP.mask | BOTTOM.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_NL); - RESTR_TEXTURE_MAP.put(LEFT.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_LR); - RESTR_TEXTURE_MAP.put(TOP.mask | LEFT.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_ND); - RESTR_TEXTURE_MAP.put(BOTTOM.mask | LEFT.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_NU); - RESTR_TEXTURE_MAP.put(TOP.mask | BOTTOM.mask | LEFT.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR); - } - - public final float mThickNess; - public final Materials mMaterial; - public final int mCapacity, mHeatResistance, mPipeAmount; - public final boolean mGasProof; - public final FluidStack[] mFluids; - public byte mLastReceivedFrom = 0, oLastReceivedFrom = 0; - /** - * Bitmask for whether disable fluid input form each side. - */ - public byte mDisableInput = 0; - - public GT_MetaPipeEntity_Fluid(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, - int aCapacity, int aHeatResistance, boolean aGasProof) { - this(aID, aName, aNameRegional, aThickNess, aMaterial, aCapacity, aHeatResistance, aGasProof, 1); - } - - public GT_MetaPipeEntity_Fluid(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, - int aCapacity, int aHeatResistance, boolean aGasProof, int aFluidTypes) { - super(aID, aName, aNameRegional, 0, false); - mThickNess = aThickNess; - mMaterial = aMaterial; - mCapacity = aCapacity; - mGasProof = aGasProof; - mHeatResistance = aHeatResistance; - mPipeAmount = aFluidTypes; - mFluids = new FluidStack[mPipeAmount]; - addInfo(aID); - } - - public GT_MetaPipeEntity_Fluid(String aName, float aThickNess, Materials aMaterial, int aCapacity, - int aHeatResistance, boolean aGasProof, int aFluidTypes) { - super(aName, 0); - mThickNess = aThickNess; - mMaterial = aMaterial; - mCapacity = aCapacity; - mGasProof = aGasProof; - mHeatResistance = aHeatResistance; - mPipeAmount = aFluidTypes; - mFluids = new FluidStack[mPipeAmount]; - } - - @Override - public byte getTileEntityBaseType() { - return (byte) (mMaterial == null ? 4 : (byte) (4) + Math.max(0, Math.min(3, mMaterial.mToolQuality))); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaPipeEntity_Fluid( - mName, - mThickNess, - mMaterial, - mCapacity, - mHeatResistance, - mGasProof, - mPipeAmount); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, - int colorIndex, boolean aConnected, boolean redstoneLevel) { - if (side == ForgeDirection.UNKNOWN) return Textures.BlockIcons.ERROR_RENDERING; - final float tThickNess = getThickNess(); - if (mDisableInput == 0) - return new ITexture[] { aConnected ? getBaseTexture(tThickNess, mPipeAmount, mMaterial, colorIndex) - : TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], - Dyes.getModulation(colorIndex, mMaterial.mRGBa)) }; - int borderMask = 0; - for (Border border : Border.values()) { - if (isInputDisabledAtSide(getSideAtBorder(side, border))) borderMask |= border.mask; - } - - return new ITexture[] { aConnected ? getBaseTexture(tThickNess, mPipeAmount, mMaterial, colorIndex) - : TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], - Dyes.getModulation(colorIndex, mMaterial.mRGBa)), - getRestrictorTexture(borderMask) }; - } - - protected static ITexture getBaseTexture(float aThickNess, int aPipeAmount, Materials aMaterial, int colorIndex) { - if (aPipeAmount >= 9) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeNonuple.mTextureIndex], - Dyes.getModulation(colorIndex, aMaterial.mRGBa)); - if (aPipeAmount >= 4) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeQuadruple.mTextureIndex], - Dyes.getModulation(colorIndex, aMaterial.mRGBa)); - if (aThickNess < 0.124F) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], - Dyes.getModulation(colorIndex, aMaterial.mRGBa)); - if (aThickNess < 0.374F) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeTiny.mTextureIndex], - Dyes.getModulation(colorIndex, aMaterial.mRGBa)); - if (aThickNess < 0.499F) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeSmall.mTextureIndex], - Dyes.getModulation(colorIndex, aMaterial.mRGBa)); - if (aThickNess < 0.749F) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeMedium.mTextureIndex], - Dyes.getModulation(colorIndex, aMaterial.mRGBa)); - if (aThickNess < 0.874F) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeLarge.mTextureIndex], - Dyes.getModulation(colorIndex, aMaterial.mRGBa)); - return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeHuge.mTextureIndex], - Dyes.getModulation(colorIndex, aMaterial.mRGBa)); - } - - protected static ITexture getRestrictorTexture(int borderMask) { - final IIconContainer restrictorIcon = RESTR_TEXTURE_MAP.get(borderMask); - return restrictorIcon != null ? TextureFactory.of(restrictorIcon) : null; - } - - @Override - public void onValueUpdate(byte aValue) { - mDisableInput = aValue; - } - - @Override - public byte getUpdateData() { - return mDisableInput; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return false; - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public final boolean renderInside(ForgeDirection side) { - return false; - } - - @Override - public int getProgresstime() { - return getFluidAmount(); - } - - @Override - public int maxProgresstime() { - return getCapacity(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - for (int i = 0; i < mPipeAmount; i++) if (mFluids[i] != null) - aNBT.setTag("mFluid" + (i == 0 ? "" : i), mFluids[i].writeToNBT(new NBTTagCompound())); - aNBT.setByte("mLastReceivedFrom", mLastReceivedFrom); - if (GT_Mod.gregtechproxy.gt6Pipe) { - aNBT.setByte("mConnections", mConnections); - aNBT.setByte("mDisableInput", mDisableInput); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - for (int i = 0; i < mPipeAmount; i++) - mFluids[i] = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid" + (i == 0 ? "" : i))); - mLastReceivedFrom = aNBT.getByte("mLastReceivedFrom"); - if (GT_Mod.gregtechproxy.gt6Pipe) { - mConnections = aNBT.getByte("mConnections"); - mDisableInput = aNBT.getByte("mDisableInput"); - } - } - - @Override - public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity aEntity) { - if ((((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections & -128) == 0 - && aEntity instanceof EntityLivingBase) { - for (FluidStack tFluid : mFluids) { - if (tFluid != null) { - final int tTemperature = tFluid.getFluid() - .getTemperature(tFluid); - if (tTemperature > 320 - && !isCoverOnSide((BaseMetaPipeEntity) getBaseMetaTileEntity(), (EntityLivingBase) aEntity)) { - GT_Utility.applyHeatDamage((EntityLivingBase) aEntity, (tTemperature - 300) / 50.0F); - break; - } else if (tTemperature < 260 - && !isCoverOnSide((BaseMetaPipeEntity) getBaseMetaTileEntity(), (EntityLivingBase) aEntity)) { - GT_Utility.applyFrostDamage((EntityLivingBase) aEntity, (270 - tTemperature) / 25.0F); - break; - } - } - } - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && aTick % 5 == 0) { - mLastReceivedFrom &= 63; - if (mLastReceivedFrom == 63) { - mLastReceivedFrom = 0; - } - - if (!GT_Mod.gregtechproxy.gt6Pipe || mCheckConnections) checkConnections(); - - final boolean shouldDistribute = (oLastReceivedFrom == mLastReceivedFrom); - for (int i = 0, j = aBaseMetaTileEntity.getRandomNumber(mPipeAmount); i < mPipeAmount; i++) { - final int index = (i + j) % mPipeAmount; - if (mFluids[index] != null && mFluids[index].amount <= 0) mFluids[index] = null; - if (mFluids[index] == null) continue; - - if (checkEnvironment(index, aBaseMetaTileEntity)) return; - - if (shouldDistribute) { - distributeFluid(index, aBaseMetaTileEntity); - mLastReceivedFrom = 0; - } - } - - oLastReceivedFrom = mLastReceivedFrom; - } - } - - private boolean checkEnvironment(int index, IGregTechTileEntity aBaseMetaTileEntity) { - // Check for hot liquids that melt the pipe or gasses that escape and burn/freeze people - final FluidStack tFluid = mFluids[index]; - - if (tFluid != null && tFluid.amount > 0) { - final int tTemperature = tFluid.getFluid() - .getTemperature(tFluid); - if (tTemperature > mHeatResistance) { - if (aBaseMetaTileEntity.getRandomNumber(100) == 0) { - // Poof - GT_Log.exp.println( - "Set Pipe to Fire due to to low heat resistance at " + aBaseMetaTileEntity.getXCoord() - + " | " - + aBaseMetaTileEntity.getYCoord() - + " | " - + aBaseMetaTileEntity.getZCoord() - + " DIMID: " - + aBaseMetaTileEntity.getWorld().provider.dimensionId); - aBaseMetaTileEntity.setToFire(); - return true; - } - // Mmhmm, Fire - aBaseMetaTileEntity.setOnFire(); - GT_Log.exp.println( - "Set Blocks around Pipe to Fire due to to low heat resistance at " + aBaseMetaTileEntity.getXCoord() - + " | " - + aBaseMetaTileEntity.getYCoord() - + " | " - + aBaseMetaTileEntity.getZCoord() - + " DIMID: " - + aBaseMetaTileEntity.getWorld().provider.dimensionId); - } - if (!mGasProof && tFluid.getFluid() - .isGaseous(tFluid)) { - tFluid.amount -= 5; - sendSound((byte) 9); - if (tTemperature > 320) { - try { - for (EntityLivingBase tLiving : getBaseMetaTileEntity().getWorld() - .getEntitiesWithinAABB( - EntityLivingBase.class, - AxisAlignedBB.getBoundingBox( - getBaseMetaTileEntity().getXCoord() - 2, - getBaseMetaTileEntity().getYCoord() - 2, - getBaseMetaTileEntity().getZCoord() - 2, - getBaseMetaTileEntity().getXCoord() + 3, - getBaseMetaTileEntity().getYCoord() + 3, - getBaseMetaTileEntity().getZCoord() + 3))) { - GT_Utility.applyHeatDamage(tLiving, (tTemperature - 300) / 25.0F); - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - } else if (tTemperature < 260) { - try { - for (EntityLivingBase tLiving : getBaseMetaTileEntity().getWorld() - .getEntitiesWithinAABB( - EntityLivingBase.class, - AxisAlignedBB.getBoundingBox( - getBaseMetaTileEntity().getXCoord() - 2, - getBaseMetaTileEntity().getYCoord() - 2, - getBaseMetaTileEntity().getZCoord() - 2, - getBaseMetaTileEntity().getXCoord() + 3, - getBaseMetaTileEntity().getYCoord() + 3, - getBaseMetaTileEntity().getZCoord() + 3))) { - GT_Utility.applyFrostDamage(tLiving, (270 - tTemperature) / 12.5F); - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - } - } - if (tFluid.amount <= 0) mFluids[index] = null; - } - return false; - } - - private void distributeFluid(int index, IGregTechTileEntity aBaseMetaTileEntity) { - final FluidStack tFluid = mFluids[index]; - if (tFluid == null) return; - - // Tank, From, Amount to receive - final List> tTanks = new ArrayList<>(); - final int amount = tFluid.amount; - final byte tOffset = (byte) getBaseMetaTileEntity().getRandomNumber(6); - for (final byte i : ALL_VALID_SIDES) { - // Get a list of tanks accepting fluids, and what side they're on - final ForgeDirection side = ForgeDirection.getOrientation((i + tOffset) % 6); - final ForgeDirection oppositeSide = side.getOpposite(); - final IFluidHandler tTank = aBaseMetaTileEntity.getITankContainerAtSide(side); - final IGregTechTileEntity gTank = tTank instanceof IGregTechTileEntity ? (IGregTechTileEntity) tTank : null; - - if (isConnectedAtSide(side) && tTank != null - && (mLastReceivedFrom & side.flag) == 0 - && getBaseMetaTileEntity().getCoverInfoAtSide(side) - .letsFluidOut(tFluid.getFluid()) - && (gTank == null || gTank.getCoverInfoAtSide(oppositeSide) - .letsFluidIn(tFluid.getFluid()))) { - if (tTank.fill(oppositeSide, tFluid, false) > 0) { - tTanks.add(new MutableTriple<>(tTank, oppositeSide, 0)); - } - tFluid.amount = amount; // Because some mods do actually modify input fluid stack - } - } - - // How much of this fluid is available for distribution? - final double tAmount = Math.max(1, Math.min(mCapacity * 10, tFluid.amount)); - - final FluidStack maxFluid = tFluid.copy(); - maxFluid.amount = Integer.MAX_VALUE; - - double availableCapacity = 0; - // Calculate available capacity for distribution from all tanks - for (final MutableTriple tEntry : tTanks) { - tEntry.right = tEntry.left.fill(tEntry.middle, maxFluid, false); - availableCapacity += tEntry.right; - } - - // Now distribute - for (final MutableTriple tEntry : tTanks) { - // Distribue fluids based on percentage available space at destination - if (availableCapacity > tAmount) - tEntry.right = (int) Math.floor(tEntry.right * tAmount / availableCapacity); - - // If the percent is not enough to give at least 1L, try to give 1L - if (tEntry.right == 0) tEntry.right = (int) Math.min(1, tAmount); - - if (tEntry.right <= 0) continue; - - final int tFilledAmount = tEntry.left - .fill(tEntry.middle, drainFromIndex(tEntry.right, false, index), false); - - if (tFilledAmount > 0) tEntry.left.fill(tEntry.middle, drainFromIndex(tFilledAmount, true, index), true); - - if (mFluids[index] == null || mFluids[index].amount <= 0) return; - } - } - - public void connectPipeOnSide(ForgeDirection side, EntityPlayer entityPlayer) { - if (!isConnectedAtSide(side)) { - if (connect(side) > 0) GT_Utility.sendChatToPlayer(entityPlayer, GT_Utility.trans("214", "Connected")); - } else { - disconnect(side); - GT_Utility.sendChatToPlayer(entityPlayer, GT_Utility.trans("215", "Disconnected")); - } - } - - public void blockPipeOnSide(ForgeDirection side, EntityPlayer entityPlayer, byte mask) { - if (isInputDisabledAtSide(side)) { - mDisableInput &= ~mask; - GT_Utility.sendChatToPlayer(entityPlayer, GT_Utility.trans("212", "Input enabled")); - if (!isConnectedAtSide(side)) connect(side); - } else { - mDisableInput |= mask; - GT_Utility.sendChatToPlayer(entityPlayer, GT_Utility.trans("213", "Input disabled")); - } - } - - @Override - public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer, - float aX, float aY, float aZ, ItemStack aTool) { - - if (GT_Mod.gregtechproxy.gt6Pipe) { - final int mode = GT_MetaGenerated_Tool.getToolMode(aTool); - IGregTechTileEntity currentPipeBase = getBaseMetaTileEntity(); - GT_MetaPipeEntity_Fluid currentPipe = (GT_MetaPipeEntity_Fluid) currentPipeBase.getMetaTileEntity(); - final ForgeDirection tSide = GT_Utility.determineWrenchingSide(side, aX, aY, aZ); - final byte tMask = (byte) (tSide.flag); - - if (mode == ToolModes.REGULAR.get()) { - if (entityPlayer.isSneaking()) { - currentPipe.blockPipeOnSide(tSide, entityPlayer, tMask); - } else currentPipe.connectPipeOnSide(tSide, entityPlayer); - return true; - } - - if (mode == ToolModes.WRENCH_LINE.get()) { - - boolean initialState = entityPlayer.isSneaking() ? currentPipe.isInputDisabledAtSide(tSide) - : currentPipe.isConnectedAtSide(tSide); - - boolean wasActionPerformed = false; - - int limit = ConfigGeneral.pipeWrenchingChainRange; - for (int connected = 0; connected < limit; connected++) { - - TileEntity nextPipeBaseTile = currentPipeBase.getTileEntityAtSide(tSide); - - // if next tile doesn't exist or if next tile is not GT tile - if (!(nextPipeBaseTile instanceof IGregTechTileEntity nextPipeBase)) { - return wasActionPerformed; - } - - // if next tile is wrong color - if (!currentPipe.connectableColor(nextPipeBaseTile)) { - return wasActionPerformed; - } - - GT_MetaPipeEntity_Fluid nextPipe = nextPipeBase - .getMetaTileEntity() instanceof GT_MetaPipeEntity_Fluid - ? (GT_MetaPipeEntity_Fluid) nextPipeBase.getMetaTileEntity() - : null; - - // if next tile entity is not a pipe - if (nextPipe == null) { - return wasActionPerformed; - } - - // if pipes are same size - if (mPipeAmount != nextPipe.mPipeAmount) { - return wasActionPerformed; - } - - // making sure next pipe has same fluid - for (int i = 0; i < mPipeAmount; i++) { - if (mFluids[i] != null && nextPipe.mFluids[i] != null) { - if (!mFluids[i].isFluidEqual(nextPipe.mFluids[i])) { - return wasActionPerformed; - } - } else if (mFluids[i] != nextPipe.mFluids[i]) { - return wasActionPerformed; - } - } - - boolean currentState = entityPlayer.isSneaking() ? currentPipe.isInputDisabledAtSide(tSide) - : currentPipe.isConnectedAtSide(tSide); - - /* - * Making sure next pipe will have same action applied to it - * e.g. Connecting pipe won`t trigger disconnect if next pipe is already connected - */ - if (currentState != initialState) { - return wasActionPerformed; - } - - if (entityPlayer.isSneaking()) { - currentPipe.blockPipeOnSide(tSide, entityPlayer, tMask); - } else currentPipe.connectPipeOnSide(tSide, entityPlayer); - - wasActionPerformed = true; - - currentPipeBase = (IGregTechTileEntity) nextPipeBase; - currentPipe = nextPipe; - - } - return wasActionPerformed; - } - } - return false; - } - - @Override - public boolean letsIn(GT_CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return coverBehavior.letsFluidIn(side, aCoverID, aCoverVariable, null, aTileEntity); - } - - @Override - public boolean letsOut(GT_CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return coverBehavior.letsFluidOut(side, aCoverID, aCoverVariable, null, aTileEntity); - } - - @Override - public boolean letsIn(GT_CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return coverBehavior.letsFluidIn(side, aCoverID, aCoverVariable, null, aTileEntity); - } - - @Override - public boolean letsOut(GT_CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return coverBehavior.letsFluidOut(side, aCoverID, aCoverVariable, null, aTileEntity); - } - - @Override - public boolean letsIn(CoverInfo coverInfo) { - return coverInfo.letsFluidIn(null); - } - - @Override - public boolean letsOut(CoverInfo coverInfo) { - return coverInfo.letsFluidOut(null); - } - - @Override - public boolean canConnect(ForgeDirection side, TileEntity tileEntity) { - if (tileEntity == null) return false; - - final ForgeDirection tSide = side.getOpposite(); - final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity(); - if (baseMetaTile == null) return false; - - final GT_CoverBehaviorBase coverBehavior = baseMetaTile.getCoverBehaviorAtSideNew(side); - final IGregTechTileEntity gTileEntity = (tileEntity instanceof IGregTechTileEntity) - ? (IGregTechTileEntity) tileEntity - : null; - - if (coverBehavior instanceof GT_Cover_Drain - || (TinkerConstruct.isModLoaded() && isTConstructFaucet(tileEntity))) return true; - - final IFluidHandler fTileEntity = (tileEntity instanceof IFluidHandler) ? (IFluidHandler) tileEntity : null; - - if (fTileEntity != null) { - final FluidTankInfo[] tInfo = fTileEntity.getTankInfo(tSide); - if (tInfo != null) { - return tInfo.length > 0 || (Translocator.isModLoaded() && isTranslocator(tileEntity)) - || gTileEntity != null - && gTileEntity.getCoverBehaviorAtSideNew(tSide) instanceof GT_Cover_FluidRegulator; - } - } - return false; - } - - @Optional.Method(modid = Mods.Names.TINKER_CONSTRUCT) - private boolean isTConstructFaucet(TileEntity tTileEntity) { - // Tinker Construct Faucets return a null tank info, so check the class - return tTileEntity instanceof tconstruct.smeltery.logic.FaucetLogic; - } - - @Optional.Method(modid = Mods.Names.TRANSLOCATOR) - private boolean isTranslocator(TileEntity tTileEntity) { - // Translocators return a TankInfo, but it's of 0 length - so check the class if we see this pattern - return tTileEntity instanceof codechicken.translocator.TileLiquidTranslocator; - } - - @Override - public boolean getGT6StyleConnection() { - // Yes if GT6 pipes are enabled - return GT_Mod.gregtechproxy.gt6Pipe; - } - - @Override - public void doSound(byte aIndex, double aX, double aY, double aZ) { - super.doSound(aIndex, aX, aY, aZ); - if (aIndex == 9) { - GT_Utility.doSoundAtClient(SoundResource.RANDOM_FIZZ, 5, 1.0F, aX, aY, aZ); - - new ParticleEventBuilder().setIdentifier(ParticleFX.CLOUD) - .setWorld(getBaseMetaTileEntity().getWorld()) - .times( - 6, - (x, i) -> x - .setMotion( - ForgeDirection.getOrientation(i).offsetX / 5.0, - ForgeDirection.getOrientation(i).offsetY / 5.0, - ForgeDirection.getOrientation(i).offsetZ / 5.0) - .setPosition( - aX - 0.5 + XSTR_INSTANCE.nextFloat(), - aY - 0.5 + XSTR_INSTANCE.nextFloat(), - aZ - 0.5 + XSTR_INSTANCE.nextFloat()) - .run()); - } - } - - @Override - public final int getCapacity() { - return mCapacity * 20 * mPipeAmount; - } - - @Override - public FluidTankInfo getInfo() { - for (FluidStack tFluid : mFluids) { - if (tFluid != null) return new FluidTankInfo(tFluid, mCapacity * 20); - } - return new FluidTankInfo(null, mCapacity * 20); - } - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection side) { - if (getCapacity() <= 0 && !getBaseMetaTileEntity().hasSteamEngineUpgrade()) return new FluidTankInfo[] {}; - ArrayList tList = new ArrayList<>(); - for (FluidStack tFluid : mFluids) tList.add(new FluidTankInfo(tFluid, mCapacity * 20)); - return tList.toArray(new FluidTankInfo[mPipeAmount]); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public final FluidStack getFluid() { - for (FluidStack tFluid : mFluids) { - if (tFluid != null) return tFluid; - } - return null; - } - - @Override - public final int getFluidAmount() { - int rAmount = 0; - for (FluidStack tFluid : mFluids) { - if (tFluid != null) rAmount += tFluid.amount; - } - return rAmount; - } - - @Override - public final int fill_default(ForgeDirection side, FluidStack aFluid, boolean doFill) { - if (aFluid == null || aFluid.getFluid() - .getID() <= 0) return 0; - - int index = -1; - for (int i = 0; i < mPipeAmount; i++) { - if (mFluids[i] != null && mFluids[i].isFluidEqual(aFluid)) { - index = i; - break; - } else if ((mFluids[i] == null || mFluids[i].getFluid() - .getID() <= 0) && index < 0) { - index = i; - } - } - - return fill_default_intoIndex(side, aFluid, doFill, index); - } - - private int fill_default_intoIndex(ForgeDirection side, FluidStack aFluid, boolean doFill, int index) { - if (index < 0 || index >= mPipeAmount) return 0; - if (aFluid == null || aFluid.getFluid() - .getID() <= 0) return 0; - - final int ordinalSide = side.ordinal(); - - if (mFluids[index] == null || mFluids[index].getFluid() - .getID() <= 0) { - if (aFluid.amount * mPipeAmount <= getCapacity()) { - if (doFill) { - mFluids[index] = aFluid.copy(); - mLastReceivedFrom |= (1 << ordinalSide); - } - return aFluid.amount; - } - if (doFill) { - mFluids[index] = aFluid.copy(); - mLastReceivedFrom |= (1 << ordinalSide); - mFluids[index].amount = getCapacity() / mPipeAmount; - } - return getCapacity() / mPipeAmount; - } - - if (!mFluids[index].isFluidEqual(aFluid)) return 0; - - final int space = getCapacity() / mPipeAmount - mFluids[index].amount; - if (aFluid.amount <= space) { - if (doFill) { - mFluids[index].amount += aFluid.amount; - mLastReceivedFrom |= (1 << ordinalSide); - } - return aFluid.amount; - } - if (doFill) { - mFluids[index].amount = getCapacity() / mPipeAmount; - mLastReceivedFrom |= (1 << ordinalSide); - } - return space; - } - - @Override - public final FluidStack drain(int maxDrain, boolean doDrain) { - FluidStack drained; - for (int i = 0; i < mPipeAmount; i++) { - if ((drained = drainFromIndex(maxDrain, doDrain, i)) != null) return drained; - } - return null; - } - - private FluidStack drainFromIndex(int maxDrain, boolean doDrain, int index) { - if (index < 0 || index >= mPipeAmount) return null; - if (mFluids[index] == null) return null; - if (mFluids[index].amount <= 0) { - mFluids[index] = null; - return null; - } - - int used = maxDrain; - if (mFluids[index].amount < used) used = mFluids[index].amount; - - if (doDrain) { - mFluids[index].amount -= used; - } - - final FluidStack drained = mFluids[index].copy(); - drained.amount = used; - - if (mFluids[index].amount <= 0) { - mFluids[index] = null; - } - - return drained; - } - - @Override - public int getTankPressure() { - return getFluidAmount() - (getCapacity() / 2); - } - - @Override - public String[] getDescription() { - List descriptions = new ArrayList<>(); - descriptions.add( - EnumChatFormatting.BLUE + "Fluid Capacity: %%%" - + GT_Utility.formatNumbers(mCapacity * 20L) - + "%%% L/sec" - + EnumChatFormatting.GRAY); - descriptions.add( - EnumChatFormatting.RED + "Heat Limit: %%%" - + GT_Utility.formatNumbers(mHeatResistance) - + "%%% K" - + EnumChatFormatting.GRAY); - if (!mGasProof) { - descriptions.add(EnumChatFormatting.DARK_GREEN + "Cannot handle gas" + EnumChatFormatting.GRAY); - } - if (mPipeAmount != 1) { - descriptions.add(EnumChatFormatting.AQUA + "Pipe Amount: %%%" + mPipeAmount + EnumChatFormatting.GRAY); - } - return descriptions.toArray(new String[0]); - } - - @Override - public float getThickNess() { - if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x1) != 0) return 0.0625F; - return mThickNess; - } - - @Override - public boolean isLiquidInput(ForgeDirection side) { - return !isInputDisabledAtSide(side); - } - - @Override - public boolean isLiquidOutput(ForgeDirection side) { - return true; - } - - public boolean isInputDisabledAtSide(ForgeDirection side) { - return (mDisableInput & side.flag) != 0; - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) - return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1); - else return getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - } - - private AxisAlignedBB getActualCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - final float tSpace = (1f - mThickNess) / 2; - float tSide0 = tSpace; - float tSide1 = 1f - tSpace; - float tSide2 = tSpace; - float tSide3 = 1f - tSpace; - float tSide4 = tSpace; - float tSide5 = 1f - tSpace; - - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.DOWN) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) { - tSide2 = tSide4 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide1 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) { - tSide0 = tSide4 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) { - tSide0 = tSide2 = tSide4 = 0; - tSide1 = tSide3 = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) { - tSide0 = tSide2 = 0; - tSide1 = tSide3 = tSide5 = 1; - } - - final byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; - if ((tConn & ForgeDirection.DOWN.flag) != 0) tSide0 = 0f; - if ((tConn & ForgeDirection.UP.flag) != 0) tSide1 = 1f; - if ((tConn & ForgeDirection.NORTH.flag) != 0) tSide2 = 0f; - if ((tConn & ForgeDirection.SOUTH.flag) != 0) tSide3 = 1f; - if ((tConn & ForgeDirection.WEST.flag) != 0) tSide4 = 0f; - if ((tConn & ForgeDirection.EAST.flag) != 0) tSide5 = 1f; - - return AxisAlignedBB - .getBoundingBox(aX + tSide4, aY + tSide0, aZ + tSide2, aX + tSide5, aY + tSide1, aZ + tSide3); - } - - @Override - public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, - List outputAABB, Entity collider) { - super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); - if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) { - final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb); - } - } - - @Override - public FluidStack drain(ForgeDirection side, FluidStack aFluid, boolean doDrain) { - if (aFluid == null) return null; - for (int i = 0; i < mFluids.length; ++i) { - final FluidStack f = mFluids[i]; - if (f == null || !f.isFluidEqual(aFluid)) continue; - return drainFromIndex(aFluid.amount, doDrain, i); - } - return null; - } - - private static EnumMap borderMap(ForgeDirection topSide, ForgeDirection bottomSide, - ForgeDirection leftSide, ForgeDirection rightSide) { - final EnumMap sideMap = new EnumMap<>(Border.class); - sideMap.put(TOP, topSide); - sideMap.put(BOTTOM, bottomSide); - sideMap.put(LEFT, leftSide); - sideMap.put(RIGHT, rightSide); - return sideMap; - } - - protected static ForgeDirection getSideAtBorder(ForgeDirection side, Border border) { - return FACE_BORDER_MAP.get(side) - .get(border); - } - - protected enum Border { - - TOP(), - BOTTOM(), - LEFT(), - RIGHT(); - - public final int mask; - - Border() { - mask = 1 << this.ordinal(); - } - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Frame.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Frame.java deleted file mode 100644 index 7cb2b3a9bd..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Frame.java +++ /dev/null @@ -1,119 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; - -public class GT_MetaPipeEntity_Frame extends MetaPipeEntity { - - private static final String localizedDescFormat = GT_LanguageManager - .addStringLocalization("gt.blockmachines.gt_frame.desc.format", "Just something you can put covers on."); - public final Materials mMaterial; - - public GT_MetaPipeEntity_Frame(int aID, String aName, String aNameRegional, Materials aMaterial) { - super(aID, aName, aNameRegional, 0); - mMaterial = aMaterial; - // Hide TileEntity frame in NEI, since we have the block version now that should always be used - codechicken.nei.api.API.hideItem(this.getStackForm(1)); - } - - public GT_MetaPipeEntity_Frame(String aName, Materials aMaterial) { - super(aName, 0); - mMaterial = aMaterial; - } - - @Override - public byte getTileEntityBaseType() { - return (byte) (mMaterial == null ? 4 : (byte) (4) + Math.max(0, Math.min(3, mMaterial.mToolQuality))); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaPipeEntity_Frame(mName, mMaterial); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, int connections, - int colorIndex, boolean active, boolean redstoneLevel) { - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex], - Dyes.getModulation(colorIndex, mMaterial.mRGBa)) }; - } - - @Override - public String[] getDescription() { - return localizedDescFormat.split("\\R"); - } - - @Override - public final boolean isSimpleMachine() { - return true; - } - - @Override - public final boolean isFacingValid(ForgeDirection facing) { - return false; - } - - @Override - public final boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public final boolean renderInside(ForgeDirection side) { - return true; - } - - @Override - public final float getThickNess() { - return 1.0F; - } - - @Override - public final void saveNBTData(NBTTagCompound aNBT) { - /* Do nothing */ - } - - @Override - public final void loadNBTData(NBTTagCompound aNBT) { - /* Do nothing */ - } - - @Override - public final boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public final boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public int connect(ForgeDirection side) { - return 0; - } - - @Override - public void disconnect(ForgeDirection side) { - /* Do nothing */ - } - - @Override - public boolean isMachineBlockUpdateRecursive() { - return true; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java deleted file mode 100644 index 660230660e..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java +++ /dev/null @@ -1,530 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; -import static gregtech.api.enums.Textures.BlockIcons.PIPE_RESTRICTOR; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityDispenser; -import net.minecraft.tileentity.TileEntityHopper; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.GT_Mod; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.metatileentity.IMetaTileEntityItemPipe; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.GT_Client; -import gregtech.common.covers.CoverInfo; - -public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileEntityItemPipe { - - public final float mThickNess; - public final Materials mMaterial; - public final int mStepSize; - public final int mTickTime; - public int mTransferredItems = 0; - public long mCurrentTransferStartTick = 0; - public ForgeDirection mLastReceivedFrom = ForgeDirection.UNKNOWN, oLastReceivedFrom = ForgeDirection.UNKNOWN; - public boolean mIsRestrictive = false; - private int[] cacheSides; - - public GT_MetaPipeEntity_Item(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, - int aInvSlotCount, int aStepSize, boolean aIsRestrictive, int aTickTime) { - super(aID, aName, aNameRegional, aInvSlotCount, false); - mIsRestrictive = aIsRestrictive; - mThickNess = aThickNess; - mMaterial = aMaterial; - mStepSize = aStepSize; - mTickTime = aTickTime; - addInfo(aID); - } - - public GT_MetaPipeEntity_Item(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, - int aInvSlotCount, int aStepSize, boolean aIsRestrictive) { - this(aID, aName, aNameRegional, aThickNess, aMaterial, aInvSlotCount, aStepSize, aIsRestrictive, 20); - } - - public GT_MetaPipeEntity_Item(String aName, float aThickNess, Materials aMaterial, int aInvSlotCount, int aStepSize, - boolean aIsRestrictive, int aTickTime) { - super(aName, aInvSlotCount); - mIsRestrictive = aIsRestrictive; - mThickNess = aThickNess; - mMaterial = aMaterial; - mStepSize = aStepSize; - mTickTime = aTickTime; - } - - @Override - public byte getTileEntityBaseType() { - return (byte) (mMaterial == null ? 4 : (byte) (4) + Math.max(0, Math.min(3, mMaterial.mToolQuality))); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaPipeEntity_Item( - mName, - mThickNess, - mMaterial, - mInventory.length, - mStepSize, - mIsRestrictive, - mTickTime); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, - int aColorIndex, boolean aConnected, boolean redstoneLevel) { - if (mIsRestrictive) { - if (aConnected) { - float tThickNess = getThickNess(); - if (tThickNess < 0.124F) return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; - if (tThickNess < 0.374F) // 0.375 - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipeTiny.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; - if (tThickNess < 0.499F) // 0.500 - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipeSmall.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; - if (tThickNess < 0.749F) // 0.750 - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipeMedium.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; - if (tThickNess < 0.874F) // 0.825 - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipeLarge.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipeHuge.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; - } - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; - } - if (aConnected) { - float tThickNess = getThickNess(); - if (tThickNess < 0.124F) return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; - if (tThickNess < 0.374F) // 0.375 - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipeTiny.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; - if (tThickNess < 0.499F) // 0.500 - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipeSmall.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; - if (tThickNess < 0.749F) // 0.750 - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipeMedium.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; - if (tThickNess < 0.874F) // 0.825 - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipeLarge.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipeHuge.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; - } - return new ITexture[] { TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return false; - } - - @Override - public boolean isValidSlot(int ignoredSlotIndex) { - return true; - } - - @Override - public final boolean renderInside(ForgeDirection side) { - return false; - } - - @Override - public int getProgresstime() { - return getPipeContent() * 64; - } - - @Override - public int maxProgresstime() { - return getMaxPipeCapacity() * 64; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setByte("mLastReceivedFrom", (byte) mLastReceivedFrom.ordinal()); - if (GT_Mod.gregtechproxy.gt6Pipe) aNBT.setByte("mConnections", mConnections); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mLastReceivedFrom = ForgeDirection.getOrientation(aNBT.getByte("mLastReceivedFrom")); - if (GT_Mod.gregtechproxy.gt6Pipe) { - mConnections = aNBT.getByte("mConnections"); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && (aTick - mCurrentTransferStartTick) % 10 == 0) { - if ((aTick - mCurrentTransferStartTick) % mTickTime == 0) { - mTransferredItems = 0; - mCurrentTransferStartTick = 0; - } - - if (!GT_Mod.gregtechproxy.gt6Pipe || mCheckConnections) checkConnections(); - - if (oLastReceivedFrom == mLastReceivedFrom) { - doTickProfilingInThisTick = false; - - final ArrayList tPipeList = new ArrayList<>(); - - for (boolean temp = true; temp && !isInventoryEmpty() && pipeCapacityCheck();) { - temp = false; - tPipeList.clear(); - for (IMetaTileEntityItemPipe tTileEntity : GT_Utility - .sortMapByValuesAcending( - IMetaTileEntityItemPipe.Util.scanPipes(this, new HashMap<>(), 0, false, false)) - .keySet()) { - if (temp) break; - tPipeList.add(tTileEntity); - while (!temp && !isInventoryEmpty() && tTileEntity.sendItemStack(aBaseMetaTileEntity)) - for (IMetaTileEntityItemPipe tPipe : tPipeList) - if (!tPipe.incrementTransferCounter(1)) temp = true; - } - } - } - - if (isInventoryEmpty()) mLastReceivedFrom = ForgeDirection.UNKNOWN; - oLastReceivedFrom = mLastReceivedFrom; - } - } - - @Override - public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer, - float aX, float aY, float aZ) { - if (GT_Mod.gregtechproxy.gt6Pipe) { - final ForgeDirection tSide = GT_Utility.determineWrenchingSide(side, aX, aY, aZ); - if (isConnectedAtSide(tSide)) { - disconnect(tSide); - GT_Utility.sendChatToPlayer(entityPlayer, GT_Utility.trans("215", "Disconnected")); - } else { - if (connect(tSide) > 0) GT_Utility.sendChatToPlayer(entityPlayer, GT_Utility.trans("214", "Connected")); - } - return true; - } - return false; - } - - @Override - public boolean letsIn(GT_CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return coverBehavior.letsItemsIn(side, aCoverID, aCoverVariable, -1, aTileEntity); - } - - @Override - public boolean letsOut(GT_CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return coverBehavior.letsItemsOut(side, aCoverID, aCoverVariable, -1, aTileEntity); - } - - @Override - public boolean letsIn(GT_CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return coverBehavior.letsItemsIn(side, aCoverID, aCoverVariable, -1, aTileEntity); - } - - @Override - public boolean letsOut(GT_CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return coverBehavior.letsItemsOut(side, aCoverID, aCoverVariable, -1, aTileEntity); - } - - @Override - public boolean letsIn(CoverInfo coverInfo) { - return coverInfo.letsItemsOut(-1); - } - - @Override - public boolean letsOut(CoverInfo coverInfo) { - return coverInfo.letsItemsOut(-1); - } - - @Override - public boolean canConnect(ForgeDirection side, TileEntity tileEntity) { - if (tileEntity == null) return false; - - final ForgeDirection oppositeSide = side.getOpposite(); - boolean connectable = GT_Utility.isConnectableNonInventoryPipe(tileEntity, oppositeSide); - - final IGregTechTileEntity gTileEntity = (tileEntity instanceof IGregTechTileEntity) - ? (IGregTechTileEntity) tileEntity - : null; - if (gTileEntity != null) { - if (gTileEntity.getMetaTileEntity() == null) return false; - if (gTileEntity.getMetaTileEntity() - .connectsToItemPipe(oppositeSide)) return true; - connectable = true; - } - - if (tileEntity instanceof IInventory) { - if (((IInventory) tileEntity).getSizeInventory() <= 0) return false; - connectable = true; - } - if (tileEntity instanceof ISidedInventory) { - final int[] tSlots = ((ISidedInventory) tileEntity).getAccessibleSlotsFromSide(oppositeSide.ordinal()); - if (tSlots == null || tSlots.length == 0) return false; - connectable = true; - } - - return connectable; - } - - @Override - public boolean getGT6StyleConnection() { - // Yes if GT6 pipes are enabled - return GT_Mod.gregtechproxy.gt6Pipe; - } - - @Override - public boolean incrementTransferCounter(int aIncrement) { - if (mTransferredItems == 0) mCurrentTransferStartTick = getBaseMetaTileEntity().getTimer(); - mTransferredItems += aIncrement; - return pipeCapacityCheck(); - } - - @Override - public boolean sendItemStack(Object aSender) { - if (pipeCapacityCheck()) { - final byte tOffset = (byte) getBaseMetaTileEntity().getRandomNumber(6); - for (final byte i : ALL_VALID_SIDES) { - final ForgeDirection tSide = ForgeDirection.getOrientation((i + tOffset) % 6); - if (isConnectedAtSide(tSide) - && (isInventoryEmpty() || (tSide != mLastReceivedFrom || aSender != getBaseMetaTileEntity()))) { - if (insertItemStackIntoTileEntity(aSender, tSide)) return true; - } - } - } - return false; - } - - @Override - public boolean insertItemStackIntoTileEntity(Object aSender, ForgeDirection side) { - if (getBaseMetaTileEntity().getCoverInfoAtSide(side) - .letsItemsOut(-1)) { - final TileEntity tInventory = getBaseMetaTileEntity().getTileEntityAtSide(side); - if (tInventory != null && !(tInventory instanceof BaseMetaPipeEntity)) { - if ((!(tInventory instanceof TileEntityHopper) && !(tInventory instanceof TileEntityDispenser)) - || getBaseMetaTileEntity().getMetaIDAtSide(side) != side.getOpposite() - .ordinal()) { - return GT_Utility.moveMultipleItemStacks( - aSender, - tInventory, - ForgeDirection.UNKNOWN, - side.getOpposite(), - null, - false, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1, - 1) > 0; - } - } - } - return false; - } - - @Override - public boolean pipeCapacityCheck() { - return mTransferredItems <= 0 || getPipeContent() < getMaxPipeCapacity(); - } - - private int getPipeContent() { - return mTransferredItems; - } - - private int getMaxPipeCapacity() { - return Math.max(1, getPipeCapacity()); - } - - /** - * Amount of ItemStacks this Pipe can conduct per Second. - */ - public int getPipeCapacity() { - return mInventory.length; - } - - @Override - public int getStepSize() { - return mStepSize; - } - - @Override - public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { - return isConnectedAtSide(ForgeDirection.getOrientation(ordinalSide)) - && super.canInsertItem(aIndex, aStack, ordinalSide); - } - - @Override - public boolean canExtractItem(int aIndex, ItemStack aStack, int ordinalSide) { - return isConnectedAtSide(ForgeDirection.getOrientation(ordinalSide)); - } - - @Override - public int[] getAccessibleSlotsFromSide(int ordinalSide) { - final IGregTechTileEntity tTileEntity = getBaseMetaTileEntity(); - final CoverInfo coverInfo = tTileEntity.getCoverInfoAtSide(ForgeDirection.getOrientation(ordinalSide)); - final boolean tAllow = coverInfo.letsItemsIn(-2) || coverInfo.letsItemsOut(-2); - if (tAllow) { - if (cacheSides == null) cacheSides = super.getAccessibleSlotsFromSide(ordinalSide); - return cacheSides; - } else { - return GT_Values.emptyIntArray; - } - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return isConnectedAtSide(side); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (!isConnectedAtSide(side)) return false; - if (isInventoryEmpty()) mLastReceivedFrom = side; - return mLastReceivedFrom == side && mInventory[aIndex] == null; - } - - @Override - public String[] getDescription() { - if (mTickTime == 20) return new String[] { "Item Capacity: %%%" + getMaxPipeCapacity() + "%%% Stacks/sec", - "Routing Value: %%%" + GT_Utility.formatNumbers(mStepSize) }; - else if (mTickTime % 20 == 0) return new String[] { - "Item Capacity: %%%" + getMaxPipeCapacity() + "%%% Stacks/%%%" + (mTickTime / 20) + "%%% sec", - "Routing Value: %%%" + GT_Utility.formatNumbers(mStepSize) }; - else return new String[] { - "Item Capacity: %%%" + getMaxPipeCapacity() + "%%% Stacks/%%%" + mTickTime + "%%% ticks", - "Routing Value: %%%" + GT_Utility.formatNumbers(mStepSize) }; - } - - private boolean isInventoryEmpty() { - for (ItemStack tStack : mInventory) if (tStack != null) return false; - return true; - } - - @Override - public float getThickNess() { - if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x1) != 0) return 0.0625F; - return mThickNess; - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) - return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1); - else return getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - } - - private AxisAlignedBB getActualCollisionBoundingBoxFromPool(World ignoredAWorld, int aX, int aY, int aZ) { - final float tSpace = (1f - mThickNess) / 2; - float spaceDown = tSpace; - float spaceUp = 1f - tSpace; - float spaceNorth = tSpace; - float spaceSouth = 1f - tSpace; - float spaceWest = tSpace; - float spaceEast = 1f - tSpace; - - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.DOWN) != 0) { - spaceDown = spaceNorth = spaceWest = 0; - spaceSouth = spaceEast = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) { - spaceNorth = spaceWest = 0; - spaceUp = spaceSouth = spaceEast = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) { - spaceDown = spaceNorth = spaceWest = 0; - spaceUp = spaceEast = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) { - spaceDown = spaceWest = 0; - spaceUp = spaceSouth = spaceEast = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) { - spaceDown = spaceNorth = spaceWest = 0; - spaceUp = spaceSouth = 1; - } - if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) { - spaceDown = spaceNorth = 0; - spaceUp = spaceSouth = spaceEast = 1; - } - - final byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; - if ((tConn & ForgeDirection.DOWN.flag) != 0) spaceDown = 0f; - if ((tConn & ForgeDirection.UP.flag) != 0) spaceUp = 1f; - if ((tConn & ForgeDirection.NORTH.flag) != 0) spaceNorth = 0f; - if ((tConn & ForgeDirection.SOUTH.flag) != 0) spaceSouth = 1f; - if ((tConn & ForgeDirection.WEST.flag) != 0) spaceWest = 0f; - if ((tConn & ForgeDirection.EAST.flag) != 0) spaceEast = 1f; - - return AxisAlignedBB.getBoundingBox( - aX + spaceWest, - aY + spaceDown, - aZ + spaceNorth, - aX + spaceEast, - aY + spaceUp, - aZ + spaceSouth); - } - - @Override - public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, - List outputAABB, Entity collider) { - super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); - if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) { - final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb); - } - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicBatteryBuffer.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicBatteryBuffer.java deleted file mode 100644 index cff63caeb5..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicBatteryBuffer.java +++ /dev/null @@ -1,436 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; - -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import ic2.api.item.IElectricItem; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -/** - * NEVER INCLUDE THIS FILE IN YOUR MOD!!! - *

- * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple - * Machine - */ -public class GT_MetaTileEntity_BasicBatteryBuffer extends GT_MetaTileEntity_TieredMachineBlock - implements IAddUIWidgets { - - public boolean mCharge = false, mDecharge = false; - public int mBatteryCount = 0, mChargeableCount = 0; - private long count = 0; - private long mStored = 0; - private long mMax = 0; - - public GT_MetaTileEntity_BasicBatteryBuffer(int aID, String aName, String aNameRegional, int aTier, - String aDescription, int aSlotCount) { - super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); - } - - public GT_MetaTileEntity_BasicBatteryBuffer(String aName, int aTier, String aDescription, ITexture[][][] aTextures, - int aSlotCount) { - super(aName, aTier, aSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicBatteryBuffer(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures, int aSlotCount) { - super(aName, aTier, aSlotCount, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - String[] desc = new String[mDescriptionArray.length + 1]; - System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); - desc[mDescriptionArray.length] = mInventory.length + " Slots"; - return desc; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[2][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1] }; - rTextures[1][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - mInventory.length == 16 ? Textures.BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier] - : mInventory.length > 4 ? Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] - : Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; - } - return rTextures; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - return mTextures[side == aFacing ? 1 : 0][colorIndex + 1]; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_BasicBatteryBuffer(mName, mTier, mDescriptionArray, mTextures, mInventory.length); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side != getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return V[mTier] * 16L * mInventory.length; - } - - @Override - public long maxEUStore() { - return V[mTier] * 64L * mInventory.length; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxEUOutput() { - return V[mTier]; - } - - @Override - public long maxAmperesIn() { - return mChargeableCount * 2L; - } - - @Override - public long maxAmperesOut() { - return mBatteryCount; - } - - @Override - public int rechargerSlotStartIndex() { - return 0; - } - - @Override - public int dechargerSlotStartIndex() { - return 0; - } - - @Override - public int rechargerSlotCount() { - return mCharge ? mInventory.length : 0; - } - - @Override - public int dechargerSlotCount() { - return mDecharge ? mInventory.length : 0; - } - - @Override - public int getProgresstime() { - return (int) getBaseMetaTileEntity().getUniversalEnergyStored(); - } - - @Override - public int maxProgresstime() { - return (int) getBaseMetaTileEntity().getUniversalEnergyCapacity(); - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - // - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - // - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - mCharge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3; - mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3; - mBatteryCount = 0; - mChargeableCount = 0; - for (ItemStack tStack : mInventory) if (GT_ModHandler.isElectricItem(tStack, mTier)) { - if (GT_ModHandler.isChargerItem(tStack)) mBatteryCount++; - mChargeableCount++; - } - } - count++; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (GT_ModHandler.isElectricItem(aStack) && aStack.getUnlocalizedName() - .startsWith("gt.metaitem.01.")) { - String name = aStack.getUnlocalizedName(); - if (name.equals("gt.metaitem.01.32510") || name.equals("gt.metaitem.01.32511") - || name.equals("gt.metaitem.01.32520") - || name.equals("gt.metaitem.01.32521") - || name.equals("gt.metaitem.01.32530") - || name.equals("gt.metaitem.01.32531")) { - return ic2.api.item.ElectricItem.manager.getCharge(aStack) == 0; - } - } - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (!GT_Utility.isStackValid(aStack)) { - return false; - } - return mInventory[aIndex] == null && GT_ModHandler.isElectricItem(aStack, this.mTier); - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - public long[] getStoredEnergy() { - boolean scaleOverflow = false; - boolean storedOverflow = false; - long tScale = getBaseMetaTileEntity().getEUCapacity(); - long tStored = getBaseMetaTileEntity().getStoredEU(); - long tStep = 0; - if (mInventory != null) { - for (ItemStack aStack : mInventory) { - if (GT_ModHandler.isElectricItem(aStack)) { - - if (aStack.getItem() instanceof GT_MetaBase_Item) { - Long[] stats = ((GT_MetaBase_Item) aStack.getItem()).getElectricStats(aStack); - if (stats != null) { - if (stats[0] > Long.MAX_VALUE / 2) { - scaleOverflow = true; - } - tScale = tScale + stats[0]; - tStep = ((GT_MetaBase_Item) aStack.getItem()).getRealCharge(aStack); - if (tStep > Long.MAX_VALUE / 2) { - storedOverflow = true; - } - tStored = tStored + tStep; - } - } else if (aStack.getItem() instanceof IElectricItem) { - tStored = tStored + (long) ic2.api.item.ElectricItem.manager.getCharge(aStack); - tScale = tScale + (long) ((IElectricItem) aStack.getItem()).getMaxCharge(aStack); - } - } - } - } - if (scaleOverflow) { - tScale = Long.MAX_VALUE; - } - if (storedOverflow) { - tStored = Long.MAX_VALUE; - } - return new long[] { tStored, tScale }; - } - - @Override - public String[] getInfoData() { - updateStorageInfo(); - - return new String[] { EnumChatFormatting.BLUE + getLocalName() + EnumChatFormatting.RESET, "Stored Items:", - EnumChatFormatting.GREEN + GT_Utility.formatNumbers(mStored) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMax) - + EnumChatFormatting.RESET - + " EU", - "Average input:", GT_Utility.formatNumbers(getBaseMetaTileEntity().getAverageElectricInput()) + " EU/t", - "Average output:", GT_Utility.formatNumbers(getBaseMetaTileEntity().getAverageElectricOutput()) + " EU/t" }; - } - - private void updateStorageInfo() { - if (mMax == 0 || (count > 20)) { - long[] tmp = getStoredEnergy(); - mStored = tmp[0]; - mMax = tmp[1]; - count = 0; - } - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - NBTTagCompound tag = accessor.getNBTData(); - currenttip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.energy.stored", - GT_Utility.formatNumbers(tag.getLong("mStored")), - GT_Utility.formatNumbers(tag.getLong("mMax")))); - long avgIn = tag.getLong("AvgIn"); - long avgOut = tag.getLong("AvgOut"); - currenttip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.energy.avg_in_with_amperage", - GT_Utility.formatNumbers(avgIn), - GT_Utility.getAmperageForTier(avgIn, (byte) getInputTier()), - GT_Utility.getColoredTierNameFromTier((byte) getInputTier()))); - currenttip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.energy.avg_out_with_amperage", - GT_Utility.formatNumbers(avgOut), - GT_Utility.getAmperageForTier(avgOut, (byte) getOutputTier()), - GT_Utility.getColoredTierNameFromTier((byte) getOutputTier()))); - super.getWailaBody(itemStack, currenttip, accessor, config); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - updateStorageInfo(); - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setLong("mStored", mStored); - tag.setLong("mMax", mMax); - tag.setLong("AvgIn", getBaseMetaTileEntity().getAverageElectricInput()); - tag.setLong("AvgOut", getBaseMetaTileEntity().getAverageElectricOutput()); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - switch (mInventory.length) { - case 4 -> builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 2) - .startFromSlot(0) - .endAtSlot(3) - .slotCreator(index -> new BaseSlot(inventoryHandler, index) { - - @Override - public int getSlotStackLimit() { - return 1; - } - }) - .background(getGUITextureSet().getItemSlot()) - .build() - .setPos(70, 25)); - case 9 -> builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 3) - .startFromSlot(0) - .endAtSlot(8) - .slotCreator(index -> new BaseSlot(inventoryHandler, index) { - - @Override - public int getSlotStackLimit() { - return 1; - } - }) - .background(getGUITextureSet().getItemSlot()) - .build() - .setPos(61, 16)); - case 16 -> builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 4) - .startFromSlot(0) - .endAtSlot(15) - .slotCreator(index -> new BaseSlot(inventoryHandler, index) { - - @Override - public int getSlotStackLimit() { - return 1; - } - }) - .background(getGUITextureSet().getItemSlot()) - .build() - .setPos(52, 7)); - default -> builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 1) - .startFromSlot(0) - .endAtSlot(0) - .slotCreator(index -> new BaseSlot(inventoryHandler, index) { - - @Override - public int getSlotStackLimit() { - return 1; - } - }) - .background(getGUITextureSet().getItemSlot()) - .build() - .setPos(79, 34)); - } - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicGenerator.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicGenerator.java deleted file mode 100644 index 7a968afc4b..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicGenerator.java +++ /dev/null @@ -1,339 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidContainerItem; -import net.minecraftforge.fluids.IFluidHandler; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.RecipeMapWorkable; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.maps.FuelBackend; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.GT_Pollution; - -public abstract class GT_MetaTileEntity_BasicGenerator extends GT_MetaTileEntity_BasicTank - implements RecipeMapWorkable { - - public GT_MetaTileEntity_BasicGenerator(int aID, String aName, String aNameRegional, int aTier, String aDescription, - ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, 3, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicGenerator(int aID, String aName, String aNameRegional, int aTier, - String[] aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, 3, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicGenerator(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = getFront(i); - rTextures[1][i + 1] = getBack(i); - rTextures[2][i + 1] = getBottom(i); - rTextures[3][i + 1] = getTop(i); - rTextures[4][i + 1] = getSides(i); - rTextures[5][i + 1] = getFrontActive(i); - rTextures[6][i + 1] = getBackActive(i); - rTextures[7][i + 1] = getBottomActive(i); - rTextures[8][i + 1] = getTopActive(i); - rTextures[9][i + 1] = getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - return mTextures[(active ? 5 : 0) + (side == facingDirection ? 0 - : side == facingDirection.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][colorIndex + 1]; - } - - @Override - public String[] getDescription() { - String[] desc = new String[mDescriptionArray.length + 1]; - System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); - desc[mDescriptionArray.length] = "Fuel Efficiency: " + getEfficiency() + "%"; - return desc; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - public ITexture[] getFront(byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getBack(byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getTop(byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getSides(byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getFrontActive(byte aColor) { - return getFront(aColor); - } - - public ITexture[] getBackActive(byte aColor) { - return getBack(aColor); - } - - public ITexture[] getBottomActive(byte aColor) { - return getBottom(aColor); - } - - public ITexture[] getTopActive(byte aColor) { - return getTop(aColor); - } - - public ITexture[] getSidesActive(byte aColor) { - return getSides(aColor); - } - - @Override - public boolean isFacingValid(ForgeDirection side) { - return true; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex < 2; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public long maxEUOutput() { - return getBaseMetaTileEntity().isAllowedToWork() ? V[mTier] : 0L; - } - - @Override - public long maxEUStore() { - return Math.max(getEUVar(), V[mTier] * 80L + getMinimumStoredEU()); - } - - @Override - public boolean doesFillContainers() { - return getBaseMetaTileEntity().isAllowedToWork(); - // return false; - } - - @Override - public boolean doesEmptyContainers() { - return getBaseMetaTileEntity().isAllowedToWork(); - } - - @Override - public boolean canTankBeFilled() { - return getBaseMetaTileEntity().isAllowedToWork(); - } - - @Override - public boolean canTankBeEmptied() { - return getBaseMetaTileEntity().isAllowedToWork(); - } - - @Override - public boolean displaysItemStack() { - return true; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return getFuelValue(aFluid) > 0; - } - - @Override - public boolean isLiquidOutput(ForgeDirection side) { - // return super.isLiquidOutput(aSide); - return false; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && aTick % 10 == 0) { - if (mFluid != null) { - long tFuelValue = getFuelValue(mFluid), tConsumed = consumedFluidPerOperation(mFluid); - if (tFuelValue > 0 && tConsumed > 0 && mFluid.amount >= tConsumed) { - long tFluidAmountToUse = Math.min( - mFluid.amount / tConsumed, - (maxEUStore() - aBaseMetaTileEntity.getUniversalEnergyStored()) / tFuelValue); - if (tFluidAmountToUse > 0 - && aBaseMetaTileEntity.increaseStoredEnergyUnits(tFluidAmountToUse * tFuelValue, true)) { - // divided by two because this is called every 10 ticks, not 20 - GT_Pollution.addPollution(getBaseMetaTileEntity(), getPollution() / 2); - mFluid.amount -= tFluidAmountToUse * tConsumed; - } - } - } - - if (mInventory[getInputSlot()] != null - && aBaseMetaTileEntity.getUniversalEnergyStored() < (maxEUOutput() * 20 + getMinimumStoredEU()) - && ((GT_Utility.getFluidForFilledItem(mInventory[getInputSlot()], true) != null) - || solidFuelOverride(mInventory[getInputSlot()]))) { - long tFuelValue = getFuelValue(mInventory[getInputSlot()]); - if (tFuelValue <= 0) tFuelValue = getFuelValue(mInventory[getInputSlot()], true); - // System.out.println(" tFuelValue : " + tFuelValue ); - if (tFuelValue > 0) { - ItemStack tEmptyContainer = getEmptyContainer(mInventory[getInputSlot()]); - if (aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), tEmptyContainer)) { - aBaseMetaTileEntity.increaseStoredEnergyUnits(tFuelValue, true); - aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); - // divided by two because this is called every 10 ticks, not 20 - GT_Pollution.addPollution(getBaseMetaTileEntity(), getPollution() / 2); - } - } - } - } - - if (aBaseMetaTileEntity.isServerSide()) aBaseMetaTileEntity.setActive( - aBaseMetaTileEntity.isAllowedToWork() - && aBaseMetaTileEntity.getUniversalEnergyStored() >= maxEUOutput() + getMinimumStoredEU()); - } - - /** - * @param stack the fuel stack - * @return if the stack is a solid fuel - */ - public boolean solidFuelOverride(ItemStack stack) { - // this could be used for a coal generator for example aswell... - ItemData association = GT_OreDictUnificator.getAssociation(stack); - // if it is a gregtech Item, make sure its not a VOLUMETRIC_FLASK or any type of cell, else do vanilla checks - if (association != null) { - return !OrePrefixes.CELL_TYPES.contains(association.mPrefix) - && !GT_Utility.areStacksEqual(ItemList.VOLUMETRIC_FLASK.get(1L), stack, true); - } else { - return stack != null && // when the stack is null its not a solid - stack.getItem() != null && // when the item in the stack is null its not a solid - !(stack.getItem() instanceof IFluidContainerItem) && // when the item is a fluid container its not a - // solid... - !(stack.getItem() instanceof IFluidHandler) && // when the item is a fluid handler its not a - // solid... - !stack.getItem() - .getUnlocalizedName() - .contains("bucket"); // since we cant really check for - // buckets... - } - } - - public abstract int getPollution(); - - @Override - public abstract RecipeMap getRecipeMap(); - - public abstract int getEfficiency(); - - public int consumedFluidPerOperation(FluidStack aLiquid) { - return 1; - } - - public int getFuelValue(FluidStack aLiquid) { - long value = getFuelValue(aLiquid, true); - return (value > Integer.MAX_VALUE) ? 0 : (int) value; - } - - public long getFuelValue(FluidStack aLiquid, boolean aLong) { - RecipeMap tRecipes = getRecipeMap(); - if (aLiquid == null || !(tRecipes.getBackend() instanceof FuelBackend tFuels)) return 0; - GT_Recipe tFuel = tFuels.findFuel(aLiquid); - if (tFuel == null) return 0; - - return (long) tFuel.mSpecialValue * getEfficiency() * consumedFluidPerOperation(aLiquid) / 100; - } - - public int getFuelValue(ItemStack aStack) { - long value = getFuelValue(aStack, true); - return (value > Integer.MAX_VALUE) ? 0 : (int) value; - } - - public long getFuelValue(ItemStack aStack, boolean aLong) { - if (GT_Utility.isStackInvalid(aStack) || getRecipeMap() == null) return 0; - GT_Recipe tFuel = getRecipeMap().findRecipe(getBaseMetaTileEntity(), false, Long.MAX_VALUE, null, aStack); - if (tFuel == null) return 0; - - long liters = 10L; // 1000mb/100 - return (long) tFuel.mSpecialValue * liters * getEfficiency(); - } - - public ItemStack getEmptyContainer(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack) || getRecipeMap() == null) return null; - GT_Recipe tFuel = getRecipeMap().findRecipe(getBaseMetaTileEntity(), false, Long.MAX_VALUE, null, aStack); - if (tFuel != null) return GT_Utility.copyOrNull(tFuel.getOutput(0)); - return GT_Utility.getContainerItem(aStack, true); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack) && (getFuelValue(aStack, true) > 0 - || getFuelValue(GT_Utility.getFluidForFilledItem(aStack, true), true) > 0); - } - - @Override - public int getCapacity() { - return 16000; - } - - @Override - public int getTankPressure() { - return -100; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull.java deleted file mode 100644 index e5766eee39..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull.java +++ /dev/null @@ -1,175 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class GT_MetaTileEntity_BasicHull extends GT_MetaTileEntity_BasicTank { - - public GT_MetaTileEntity_BasicHull(int aID, String aName, String aNameRegional, int aTier, String aDescription, - ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, 1, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicHull(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicHull(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicHull(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_BasicHull(mName, mTier, mInventory.length, mDescriptionArray, mTextures); - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return !isOutputFacing(side); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public long getMinimumStoredEU() { - return 512; - } - - @Override - public long maxEUStore() { - return 512 + V[mTier] * 50; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxEUOutput() { - return V[mTier]; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return true; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aConnected, boolean redstoneLevel) { - return mTextures[Math.min(2, side.ordinal()) + (side == aFacing ? 3 : 0)][colorIndex + 1]; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[6][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1] }; - rTextures[1][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1] }; - rTextures[2][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1] }; - rTextures[3][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; - rTextures[4][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; - rTextures[5][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; - } - return rTextures; - } - - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public boolean displaysItemStack() { - return false; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public int getCapacity() { - return (mTier + 1) * 1000; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull_NonElectric.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull_NonElectric.java deleted file mode 100644 index b6584b50ab..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicHull_NonElectric.java +++ /dev/null @@ -1,78 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public abstract class GT_MetaTileEntity_BasicHull_NonElectric extends GT_MetaTileEntity_BasicHull { - - public GT_MetaTileEntity_BasicHull_NonElectric(int aID, String aName, String aNameRegional, int aTier, - String aDescription) { - super(aID, aName, aNameRegional, aTier, aDescription); - } - - public GT_MetaTileEntity_BasicHull_NonElectric(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicHull_NonElectric(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - return mTextures[Math.min(2, sideDirection.ordinal())][colorIndex + 1]; - } - - @Override - public boolean isElectric() { - return false; - } - - @Override - public boolean isEnetInput() { - return false; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 0; - } - - @Override - public long maxEUStore() { - return 0; - } - - @Override - public long maxEUInput() { - return 0; - } - - @Override - public long maxEUOutput() { - return 0; - } - - @Override - public abstract ITexture[][][] getTextureSet(ITexture[] aTextures); -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java deleted file mode 100644 index 377646f85a..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java +++ /dev/null @@ -1,1563 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.GT_Values.debugCleanroom; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; -import static gregtech.api.metatileentity.BaseTileEntity.FLUID_TRANSFER_TOOLTIP; -import static gregtech.api.metatileentity.BaseTileEntity.ITEM_TRANSFER_TOOLTIP; -import static gregtech.api.metatileentity.BaseTileEntity.NEI_TRANSFER_STEAM_TOOLTIP; -import static gregtech.api.metatileentity.BaseTileEntity.NEI_TRANSFER_VOLTAGE_TOOLTIP; -import static gregtech.api.metatileentity.BaseTileEntity.POWER_SOURCE_KEY; -import static gregtech.api.metatileentity.BaseTileEntity.SPECIAL_SLOT_TOOLTIP; -import static gregtech.api.metatileentity.BaseTileEntity.STALLED_STUTTERING_TOOLTIP; -import static gregtech.api.metatileentity.BaseTileEntity.STALLED_VENT_TOOLTIP; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.metatileentity.BaseTileEntity.UNUSED_SLOT_TOOLTIP; -import static gregtech.api.util.GT_RecipeConstants.EXPLODE; -import static gregtech.api.util.GT_RecipeConstants.ON_FIRE; -import static gregtech.api.util.GT_Utility.moveMultipleItemStacks; -import static net.minecraftforge.common.util.ForgeDirection.DOWN; -import static net.minecraftforge.common.util.ForgeDirection.UNKNOWN; -import static net.minecraftforge.common.util.ForgeDirection.UP; - -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; - -import org.apache.commons.lang3.tuple.Pair; - -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.fluid.FluidStackTank; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.SteamTexture; -import gregtech.api.interfaces.ICleanroom; -import gregtech.api.interfaces.IConfigurationCircuitSupport; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IOverclockDescriptionProvider; -import gregtech.api.interfaces.tileentity.RecipeMapWorkable; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.overclockdescriber.EUOverclockDescriber; -import gregtech.api.objects.overclockdescriber.OverclockDescriber; -import gregtech.api.recipe.BasicUIProperties; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ClientPreference; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_TooltipDataCache; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.GT_Waila; -import gregtech.common.gui.modularui.UIHelper; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -/** - * NEVER INCLUDE THIS FILE IN YOUR MOD!!! - *

- * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple - * Machine - */ -public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_BasicTank implements RecipeMapWorkable, - IConfigurationCircuitSupport, IOverclockDescriptionProvider, IAddGregtechLogo, IAddUIWidgets { - - /** - * return values for checkRecipe() - */ - protected static final int DID_NOT_FIND_RECIPE = 0, FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS = 1, - FOUND_AND_SUCCESSFULLY_USED_RECIPE = 2; - - public static final int OTHER_SLOT_COUNT = 5; - public final ItemStack[] mOutputItems; - public final int mInputSlotCount, mAmperage; - public boolean mAllowInputFromOutputSide = false, mFluidTransfer = false, mItemTransfer = false, - mHasBeenUpdated = false, mStuttering = false, mCharge = false, mDecharge = false; - public boolean mDisableFilter = true; - public boolean mDisableMultiStack = true; - public int mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mOutputBlocked = 0; - public ForgeDirection mMainFacing = ForgeDirection.WEST; - public FluidStack mOutputFluid; - protected final OverclockDescriber overclockDescriber; - - /** - * Contains the Recipe which has been previously used, or null if there was no previous Recipe, which could have - * been buffered - */ - protected GT_Recipe mLastRecipe = null; - - private FluidStack mFluidOut; - protected final FluidStackTank fluidOutputTank = new FluidStackTank( - () -> mFluidOut, - fluidStack -> mFluidOut = fluidStack, - this::getCapacity); - - /** - * Registers machine with single-line description. - * - * @param aOverlays 0 = SideFacingActive 1 = SideFacingInactive 2 = FrontFacingActive 3 = FrontFacingInactive 4 = - * TopFacingActive 5 = TopFacingInactive 6 = BottomFacingActive 7 = BottomFacingInactive ----- Not - * all Array Elements have to be initialised, you can also just use 8 Parameters for the Default - * Pipe Texture Overlays ----- 8 = BottomFacingPipeActive 9 = BottomFacingPipeInactive 10 = - * TopFacingPipeActive 11 = TopFacingPipeInactive 12 = SideFacingPipeActive 13 = - * SideFacingPipeInactive - */ - public GT_MetaTileEntity_BasicMachine(int aID, String aName, String aNameRegional, int aTier, int aAmperage, - String aDescription, int aInputSlotCount, int aOutputSlotCount, ITexture... aOverlays) { - super( - aID, - aName, - aNameRegional, - aTier, - OTHER_SLOT_COUNT + aInputSlotCount + aOutputSlotCount + 1, - aDescription, - aOverlays); - mInputSlotCount = Math.max(0, aInputSlotCount); - mOutputItems = new ItemStack[Math.max(0, aOutputSlotCount)]; - mAmperage = aAmperage; - overclockDescriber = createOverclockDescriber(); - } - - /** - * Registers machine with multi-line descriptions. - */ - public GT_MetaTileEntity_BasicMachine(int aID, String aName, String aNameRegional, int aTier, int aAmperage, - String[] aDescription, int aInputSlotCount, int aOutputSlotCount, ITexture... aOverlays) { - super( - aID, - aName, - aNameRegional, - aTier, - OTHER_SLOT_COUNT + aInputSlotCount + aOutputSlotCount + 1, - aDescription, - aOverlays); - mInputSlotCount = Math.max(0, aInputSlotCount); - mOutputItems = new ItemStack[Math.max(0, aOutputSlotCount)]; - mAmperage = aAmperage; - overclockDescriber = createOverclockDescriber(); - } - - /** - * For {@link #newMetaEntity}. - */ - public GT_MetaTileEntity_BasicMachine(String aName, int aTier, int aAmperage, String[] aDescription, - ITexture[][][] aTextures, int aInputSlotCount, int aOutputSlotCount) { - super(aName, aTier, OTHER_SLOT_COUNT + aInputSlotCount + aOutputSlotCount + 1, aDescription, aTextures); - mInputSlotCount = Math.max(0, aInputSlotCount); - mOutputItems = new ItemStack[Math.max(0, aOutputSlotCount)]; - mAmperage = aAmperage; - overclockDescriber = createOverclockDescriber(); - } - - /** - * To be called by the constructor to initialize this instance's overclock behavior - */ - protected OverclockDescriber createOverclockDescriber() { - return new EUOverclockDescriber(mTier, mAmperage); - } - - protected boolean isValidMainFacing(ForgeDirection side) { - return (side.flag & (UP.flag | DOWN.flag | UNKNOWN.flag)) == 0; // Horizontal - } - - public boolean setMainFacing(ForgeDirection side) { - if (!isValidMainFacing(side)) return false; - mMainFacing = side; - if (getBaseMetaTileEntity().getFrontFacing() == mMainFacing) { - getBaseMetaTileEntity().setFrontFacing(side.getOpposite()); - } - onFacingChange(); - onMachineBlockUpdate(); - return true; - } - - @Override - public void onFacingChange() { - super.onFacingChange(); - // Set up the correct facing (front towards player, output opposite) client-side before the server packet - // arrives - if (mMainFacing == UNKNOWN) { - IGregTechTileEntity te = getBaseMetaTileEntity(); - if (te != null && te.getWorld().isRemote) { - mMainFacing = te.getFrontFacing(); - te.setFrontFacing(te.getBackFacing()); - } - } - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[14][17][]; - aTextures = Arrays.copyOf(aTextures, 14); - - for (int i = 0; i < aTextures.length; i++) if (aTextures[i] != null) for (byte c = -1; c < 16; c++) { - if (rTextures[i][c + 1] == null) - rTextures[i][c + 1] = new ITexture[] { MACHINE_CASINGS[mTier][c + 1], aTextures[i] }; - } - - 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; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - final int textureIndex; - if ((mMainFacing.flag & (UP.flag | DOWN.flag)) != 0) { // UP or DOWN - if (sideDirection == facingDirection) { - textureIndex = active ? 2 : 3; - } else { - textureIndex = switch (sideDirection) { - case DOWN -> active ? 6 : 7; - case UP -> active ? 4 : 5; - default -> active ? 0 : 1; - }; - } - } else { - if (sideDirection == mMainFacing) { - textureIndex = active ? 2 : 3; - } else { - if (showPipeFacing() && sideDirection == facingDirection) { - textureIndex = switch (sideDirection) { - case DOWN -> active ? 8 : 9; - case UP -> active ? 10 : 11; - default -> active ? 12 : 13; - }; - } else { - textureIndex = switch (sideDirection) { - case DOWN -> active ? 6 : 7; - case UP -> active ? 4 : 5; - default -> active ? 0 : 1; - }; - } - } - } - return mTextures[textureIndex][colorIndex + 1]; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isOverclockerUpgradable() { - return false; - } - - @Override - public boolean isTransformerUpgradable() { - return false; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex > 0 && super.isValidSlot(aIndex) - && aIndex != getCircuitSlot() - && aIndex != OTHER_SLOT_COUNT + mInputSlotCount + mOutputItems.length; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - // Either mMainFacing or mMainFacing is horizontal - return ((facing.flag | mMainFacing.flag) & ~(UP.flag | DOWN.flag | UNKNOWN.flag)) != 0; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side != mMainFacing; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public boolean isLiquidInput(ForgeDirection side) { - return side != mMainFacing && (mAllowInputFromOutputSide || side != getBaseMetaTileEntity().getFrontFacing()); - } - - @Override - public boolean isLiquidOutput(ForgeDirection side) { - return side != mMainFacing; - } - - @Override - public long getMinimumStoredEU() { - return V[mTier] * 16L; - } - - @Override - public long maxEUStore() { - return V[mTier] * 64L; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxSteamStore() { - return maxEUStore(); - } - - @Override - public long maxAmperesIn() { - return ((long) mEUt * 2L) / V[mTier] + 1L; - } - - @Override - public int getInputSlot() { - return OTHER_SLOT_COUNT; - } - - @Override - public int getOutputSlot() { - return OTHER_SLOT_COUNT + mInputSlotCount; - } - - public int getSpecialSlotIndex() { - return 3; - } - - @Override - public int getStackDisplaySlot() { - return 2; - } - - @Override - public int rechargerSlotStartIndex() { - return 1; - } - - @Override - public int dechargerSlotStartIndex() { - return 1; - } - - @Override - public int rechargerSlotCount() { - return mCharge ? 1 : 0; - } - - @Override - public int dechargerSlotCount() { - return mDecharge ? 1 : 0; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public int getProgresstime() { - return mProgresstime; - } - - @Override - public int maxProgresstime() { - return mMaxProgresstime; - } - - @Override - public int increaseProgress(int aProgress) { - mProgresstime += aProgress; - return mMaxProgresstime - mProgresstime; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return getFillableStack() != null || (getRecipeMap() != null && getRecipeMap().containsInput(aFluid)); - } - - @Override - public boolean isFluidChangingAllowed() { - return true; - } - - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public boolean displaysItemStack() { - return true; - } - - @Override - public boolean displaysStackSize() { - return true; - } - - @Override - public FluidStack getDrainableStack() { - return mFluidOut; - } - - @Override - public FluidStack setDrainableStack(FluidStack aFluid) { - markDirty(); - mFluidOut = aFluid; - return mFluidOut; - } - - @Override - public boolean isDrainableStackSeparate() { - return true; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) return true; - if (!GT_Mod.gregtechproxy.mForceFreeFace) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (aBaseMetaTileEntity.getAirAtSide(side)) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - } - GT_Utility.sendChatToPlayer(aPlayer, "No free Side!"); - return true; - } - - @Override - public void initDefaultModes(NBTTagCompound aNBT) { - mMainFacing = ForgeDirection.UNKNOWN; - if (!getBaseMetaTileEntity().getWorld().isRemote) { - final GT_ClientPreference tPreference = GT_Mod.gregtechproxy - .getClientPreference(getBaseMetaTileEntity().getOwnerUuid()); - if (tPreference != null) { - mDisableFilter = !tPreference.isSingleBlockInitialFilterEnabled(); - mDisableMultiStack = !tPreference.isSingleBlockInitialMultiStackEnabled(); - } - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("mFluidTransfer", mFluidTransfer); - aNBT.setBoolean("mItemTransfer", mItemTransfer); - aNBT.setBoolean("mHasBeenUpdated", mHasBeenUpdated); - aNBT.setBoolean("mAllowInputFromOutputSide", mAllowInputFromOutputSide); - aNBT.setBoolean("mDisableFilter", mDisableFilter); - aNBT.setBoolean("mDisableMultiStack", mDisableMultiStack); - aNBT.setInteger("mEUt", mEUt); - aNBT.setInteger("mMainFacing", mMainFacing.ordinal()); - aNBT.setInteger("mProgresstime", mProgresstime); - aNBT.setInteger("mMaxProgresstime", mMaxProgresstime); - if (mOutputFluid != null) aNBT.setTag("mOutputFluid", mOutputFluid.writeToNBT(new NBTTagCompound())); - if (mFluidOut != null) aNBT.setTag("mFluidOut", mFluidOut.writeToNBT(new NBTTagCompound())); - - for (int i = 0; i < mOutputItems.length; i++) - if (mOutputItems[i] != null) GT_Utility.saveItem(aNBT, "mOutputItem" + i, mOutputItems[i]); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mFluidTransfer = aNBT.getBoolean("mFluidTransfer"); - mItemTransfer = aNBT.getBoolean("mItemTransfer"); - mHasBeenUpdated = aNBT.getBoolean("mHasBeenUpdated"); - mAllowInputFromOutputSide = aNBT.getBoolean("mAllowInputFromOutputSide"); - mDisableFilter = aNBT.getBoolean("mDisableFilter"); - mDisableMultiStack = aNBT.getBoolean("mDisableMultiStack"); - mEUt = aNBT.getInteger("mEUt"); - mMainFacing = ForgeDirection.getOrientation(aNBT.getInteger("mMainFacing")); - mProgresstime = aNBT.getInteger("mProgresstime"); - mMaxProgresstime = aNBT.getInteger("mMaxProgresstime"); - mOutputFluid = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mOutputFluid")); - mFluidOut = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluidOut")); - - for (int i = 0; i < mOutputItems.length; i++) mOutputItems[i] = GT_Utility.loadItem(aNBT, "mOutputItem" + i); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (aBaseMetaTileEntity.isServerSide()) { - mCharge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3; - mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3; - - doDisplayThings(); - - boolean tSucceeded = false; - - if (mMaxProgresstime > 0 && (mProgresstime >= 0 || aBaseMetaTileEntity.isAllowedToWork())) { - markDirty(); - aBaseMetaTileEntity.setActive(true); - if (mProgresstime < 0 || drainEnergyForProcess(mEUt)) { - if (++mProgresstime >= mMaxProgresstime) { - for (int i = 0; i < mOutputItems.length; i++) - for (int j = 0; j < mOutputItems.length; j++) if (aBaseMetaTileEntity - .addStackToSlot(getOutputSlot() + ((j + i) % mOutputItems.length), mOutputItems[i])) - break; - if (mOutputFluid != null) - if (getDrainableStack() == null) setDrainableStack(mOutputFluid.copy()); - else if (mOutputFluid.isFluidEqual(getDrainableStack())) - getDrainableStack().amount += mOutputFluid.amount; - Arrays.fill(mOutputItems, null); - mOutputFluid = null; - mEUt = 0; - mProgresstime = 0; - mMaxProgresstime = 0; - mStuttering = false; - tSucceeded = true; - endProcess(); - } - if (mProgresstime > 5) mStuttering = false; - } else { - if (!mStuttering) { - stutterProcess(); - if (canHaveInsufficientEnergy()) mProgresstime = -100; - mStuttering = true; - } - } - } else { - aBaseMetaTileEntity.setActive(false); - } - - boolean tRemovedOutputFluid = false; - - if (doesAutoOutputFluids() && getDrainableStack() != null - && aBaseMetaTileEntity.getFrontFacing() != mMainFacing - && (tSucceeded || aTick % 20 == 0)) { - IFluidHandler tTank = aBaseMetaTileEntity.getITankContainerAtSide(aBaseMetaTileEntity.getFrontFacing()); - if (tTank != null) { - FluidStack tDrained = drain(1000, false); - if (tDrained != null) { - final int tFilledAmount = tTank.fill(aBaseMetaTileEntity.getBackFacing(), tDrained, false); - if (tFilledAmount > 0) - tTank.fill(aBaseMetaTileEntity.getBackFacing(), drain(tFilledAmount, true), true); - } - } - if (getDrainableStack() == null) tRemovedOutputFluid = true; - } - - if (doesAutoOutput() && !isOutputEmpty() - && aBaseMetaTileEntity.getFrontFacing() != mMainFacing - && (tSucceeded || mOutputBlocked % 300 == 1 - || aBaseMetaTileEntity.hasInventoryBeenModified() - || aTick % 600 == 0)) { - TileEntity tTileEntity2 = aBaseMetaTileEntity.getTileEntityAtSide(aBaseMetaTileEntity.getFrontFacing()); - long tStoredEnergy = aBaseMetaTileEntity.getUniversalEnergyStored(); - int tMaxStacks = (int) (tStoredEnergy / 64L); - if (tMaxStacks > mOutputItems.length) tMaxStacks = mOutputItems.length; - - moveMultipleItemStacks( - aBaseMetaTileEntity, - tTileEntity2, - aBaseMetaTileEntity.getFrontFacing(), - aBaseMetaTileEntity.getBackFacing(), - null, - false, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1, - tMaxStacks); - } - - if (mOutputBlocked != 0) if (isOutputEmpty()) mOutputBlocked = 0; - else mOutputBlocked++; - - if (allowToCheckRecipe()) { - if (mMaxProgresstime <= 0 && aBaseMetaTileEntity.isAllowedToWork() - && (tRemovedOutputFluid || tSucceeded - || aBaseMetaTileEntity.hasInventoryBeenModified() - || aTick % 600 == 0 - || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) - && hasEnoughEnergyToCheckRecipe()) { - if (checkRecipe() == FOUND_AND_SUCCESSFULLY_USED_RECIPE) { - if (getSpecialSlot() != null && getSpecialSlot().stackSize <= 0) - mInventory[getSpecialSlotIndex()] = null; - for (int i = getInputSlot(), j = i + mInputSlotCount; i < j; i++) - if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null; - for (int i = 0; i < mOutputItems.length; i++) { - mOutputItems[i] = GT_Utility.copyOrNull(mOutputItems[i]); - if (mOutputItems[i] != null && mOutputItems[i].stackSize > 64) - mOutputItems[i].stackSize = 64; - mOutputItems[i] = GT_OreDictUnificator.get(true, mOutputItems[i]); - } - if (mFluid != null && mFluid.amount <= 0) mFluid = null; - mMaxProgresstime = Math.max(1, mMaxProgresstime); - if (GT_Utility.isDebugItem(mInventory[dechargerSlotStartIndex()])) { - mEUt = mMaxProgresstime = 1; - } - startProcess(); - } else { - mMaxProgresstime = 0; - Arrays.fill(mOutputItems, null); - mOutputFluid = null; - } - } - } else { - if (!mStuttering) { - stutterProcess(); - mStuttering = true; - } - } - } - // Only using mNeedsSteamVenting right now and assigning it to 64 to space in the range for more single block - // machine problems. - // Value | Class | Field - // 1 | GT_MetaTileEntity_BasicMachine | mStuttering - // 64 | GT_MetaTileEntity_BasicMachine_Bronze | mNeedsSteamVenting - aBaseMetaTileEntity.setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID() & ~127)); // | (mStuttering ? 1 : - // 0)); - } - - protected void doDisplayThings() { - if (!isValidMainFacing(mMainFacing) && isValidMainFacing(getBaseMetaTileEntity().getFrontFacing())) { - mMainFacing = getBaseMetaTileEntity().getFrontFacing(); - } - if (isValidMainFacing(mMainFacing) && !mHasBeenUpdated) { - mHasBeenUpdated = true; - getBaseMetaTileEntity().setFrontFacing(getBaseMetaTileEntity().getBackFacing()); - } - } - - protected boolean hasEnoughEnergyToCheckRecipe() { - return getBaseMetaTileEntity().isUniversalEnergyStored(getMinimumStoredEU() / 2); - } - - protected boolean drainEnergyForProcess(long aEUt) { - return getBaseMetaTileEntity().decreaseStoredEnergyUnits(aEUt, false); - } - - /** - * Calculates overclock based on {@link #overclockDescriber}. - */ - protected void calculateCustomOverclock(GT_Recipe recipe) { - GT_OverclockCalculator calculator = overclockDescriber.createCalculator( - new GT_OverclockCalculator().setRecipeEUt(recipe.mEUt) - .setDuration(recipe.mDuration) - .setOneTickDiscount(true), - recipe); - calculator.calculate(); - mEUt = (int) calculator.getConsumption(); - mMaxProgresstime = calculator.getDuration(); - } - - /** - * Helper method for calculating simple overclock. - */ - protected void calculateOverclockedNess(int eut, int duration) { - GT_OverclockCalculator calculator = new GT_OverclockCalculator().setRecipeEUt(eut) - .setEUt(V[mTier] * mAmperage) - .setDuration(duration) - .setOneTickDiscount(true) - .calculate(); - mEUt = (int) calculator.getConsumption(); - mMaxProgresstime = calculator.getDuration(); - } - - protected ItemStack getSpecialSlot() { - return mInventory[getSpecialSlotIndex()]; - } - - protected ItemStack getOutputAt(int aIndex) { - return mInventory[getOutputSlot() + aIndex]; - } - - protected ItemStack[] getAllOutputs() { - ItemStack[] rOutputs = new ItemStack[mOutputItems.length]; - for (int i = 0; i < mOutputItems.length; i++) rOutputs[i] = getOutputAt(i); - return rOutputs; - } - - protected boolean canOutput(GT_Recipe aRecipe) { - return aRecipe != null && (aRecipe.mNeedsEmptyOutput ? isOutputEmpty() && getDrainableStack() == null - : canOutput(aRecipe.getFluidOutput(0)) && canOutput(aRecipe.mOutputs)); - } - - protected boolean canOutput(ItemStack... aOutputs) { - if (aOutputs == null) return true; - ItemStack[] tOutputSlots = getAllOutputs(); - for (int i = 0; i < tOutputSlots.length && i < aOutputs.length; i++) - if (tOutputSlots[i] != null && aOutputs[i] != null - && (!GT_Utility.areStacksEqual(tOutputSlots[i], aOutputs[i], false) - || tOutputSlots[i].stackSize + aOutputs[i].stackSize > tOutputSlots[i].getMaxStackSize())) { - mOutputBlocked++; - return false; - } - return true; - } - - protected boolean canOutput(FluidStack aOutput) { - if (aOutput == null) return true; - FluidStack drainableStack = getDrainableStack(); - if (drainableStack != null && !drainableStack.isFluidEqual(aOutput)) return false; - return (drainableStack != null ? drainableStack.amount : 0) + aOutput.amount <= getCapacity(); - } - - protected ItemStack getInputAt(int aIndex) { - return mInventory[getInputSlot() + aIndex]; - } - - protected ItemStack[] getAllInputs() { - int tRealInputSlotCount = this.mInputSlotCount + (allowSelectCircuit() ? 1 : 0); - ItemStack[] rInputs = new ItemStack[tRealInputSlotCount]; - for (int i = 0; i < mInputSlotCount; i++) rInputs[i] = getInputAt(i); - if (allowSelectCircuit()) rInputs[mInputSlotCount] = getStackInSlot(getCircuitSlot()); - return rInputs; - } - - protected boolean isOutputEmpty() { - boolean rIsEmpty = true; - for (ItemStack tOutputSlotContent : getAllOutputs()) if (tOutputSlotContent != null) { - rIsEmpty = false; - break; - } - return rIsEmpty; - } - - @Override - public void onValueUpdate(byte aValue) { - mMainFacing = ForgeDirection.getOrientation(aValue); - } - - @Override - public byte getUpdateData() { - return (byte) mMainFacing.ordinal(); - } - - @Override - public void doSound(byte aIndex, double aX, double aY, double aZ) { - super.doSound(aIndex, aX, aY, aZ); - if (aIndex == 8) GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_INTERRUPT_ONE, 100, 1.0F, aX, aY, aZ); - } - - public boolean doesAutoOutput() { - return mItemTransfer; - } - - public boolean doesAutoOutputFluids() { - return mFluidTransfer; - } - - public boolean allowToCheckRecipe() { - return true; - } - - public boolean showPipeFacing() { - return true; - } - - /** - * Called whenever the Machine successfully started a Process, useful for Sound Effects - */ - public void startProcess() { - // - } - - /** - * Called whenever the Machine successfully finished a Process, useful for Sound Effects - */ - public void endProcess() { - // - } - - /** - * Called whenever the Machine aborted a Process, useful for Sound Effects - */ - public void abortProcess() { - // - } - - /** - * Called whenever the Machine aborted a Process but still works on it, useful for Sound Effects - */ - public void stutterProcess() { - if (useStandardStutterSound()) sendSound((byte) 8); - } - - /** - * If this Machine can have the Insufficient Energy Line Problem - */ - public boolean canHaveInsufficientEnergy() { - return true; - } - - public boolean useStandardStutterSound() { - return true; - } - - @Override - public String[] getInfoData() { - return new String[] { "Progress:", - EnumChatFormatting.GREEN + GT_Utility.formatNumbers((mProgresstime / 20)) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - "Stored Energy:", - EnumChatFormatting.GREEN + GT_Utility.formatNumbers(getBaseMetaTileEntity().getStoredEU()) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getBaseMetaTileEntity().getEUCapacity()) - + EnumChatFormatting.RESET - + " EU", - "Probably uses: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(mEUt) - + EnumChatFormatting.RESET - + " EU/t at " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(mEUt == 0 ? 0 : mAmperage) - + EnumChatFormatting.RESET - + " A" }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getFrontFacing() || side == mMainFacing) { - if (aPlayer.isSneaking()) { - mDisableFilter = !mDisableFilter; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.hatch.disableFilter." + mDisableFilter)); - } else { - mAllowInputFromOutputSide = !mAllowInputFromOutputSide; - GT_Utility.sendChatToPlayer( - aPlayer, - mAllowInputFromOutputSide ? GT_Utility.trans("095", "Input from Output Side allowed") - : GT_Utility.trans("096", "Input from Output Side forbidden")); - } - } - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, - EntityPlayer entityPlayer, float aX, float aY, float aZ) { - if (!entityPlayer.isSneaking()) return false; - final boolean click = super.onSolderingToolRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ); - if (click) return true; - if (wrenchingSide != mMainFacing) return false; - mDisableMultiStack = !mDisableMultiStack; - GT_Utility.sendChatToPlayer( - entityPlayer, - StatCollector.translateToLocal("GT5U.hatch.disableMultiStack." + mDisableMultiStack)); - return true; - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCoverID) { - if (side != mMainFacing) return true; - GT_CoverBehaviorBase tBehavior = GregTech_API.getCoverBehaviorNew(aCoverID.toStack()); - return tBehavior.isGUIClickable( - side, - GT_Utility.stackToInt(aCoverID.toStack()), - tBehavior.createDataObject(), - getBaseMetaTileEntity()); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side != mMainFacing && aIndex >= getOutputSlot() && aIndex < getOutputSlot() + mOutputItems.length; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (side == mMainFacing || aIndex < getInputSlot() - || aIndex >= getInputSlot() + mInputSlotCount - || (!mAllowInputFromOutputSide && side == aBaseMetaTileEntity.getFrontFacing())) return false; - for (int i = getInputSlot(), j = i + mInputSlotCount; i < j; i++) - if (GT_Utility.areStacksEqual(GT_OreDictUnificator.get(aStack), mInventory[i]) && mDisableMultiStack) - return i == aIndex; - return mDisableFilter || allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack); - } - - /** - * Test if given stack can be inserted into specified slot. If mDisableMultiStack is false, before execution of this - * method it is ensured there is no such kind of item inside any input slots already. Otherwise, you don't need to - * check for it anyway. - */ - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return !mDisableMultiStack || mInventory[aIndex] == null; - } - - @Override - public boolean allowSelectCircuit() { - return false; - } - - protected final ItemStack[] appendSelectedCircuit(ItemStack... inputs) { - if (allowSelectCircuit()) { - ItemStack circuit = getStackInSlot(getCircuitSlot()); - if (circuit != null) { - ItemStack[] result = Arrays.copyOf(inputs, inputs.length + 1); - result[inputs.length] = circuit; - return result; - } - } - return inputs; - } - - @Override - public int getCircuitSlot() { - return 4; - } - - @Override - public int getCircuitGUISlot() { - return 3; - } - - @Override - public List getConfigurationCircuits() { - return GregTech_API.getConfigurationCircuitList(mTier); - } - - @Override - public RecipeMap getRecipeMap() { - return null; - } - - /** - * Override this to check the Recipes yourself, super calls to this could be useful if you just want to add a - * special case - *

- * I thought about Enum too, but Enum doesn't add support for people adding other return Systems. - *

- * Funny how Eclipse marks the word Enum as not correctly spelled. - * - * @return see constants above - */ - public int checkRecipe() { - return checkRecipe(false); - } - - public static boolean isValidForLowGravity(GT_Recipe tRecipe, int dimId) { - return // TODO check or get a better solution - DimensionManager.getProvider(dimId) - .getClass() - .getName() - .contains("Orbit") - || DimensionManager.getProvider(dimId) - .getClass() - .getName() - .endsWith("Space") - || DimensionManager.getProvider(dimId) - .getClass() - .getName() - .endsWith("Asteroids") - || DimensionManager.getProvider(dimId) - .getClass() - .getName() - .endsWith("SS") - || DimensionManager.getProvider(dimId) - .getClass() - .getName() - .contains("SpaceStation"); - } - - /** - * - * @param skipOC disables OverclockedNess calculation and check - if you do you must implement your own method... - * @return DID_NOT_FIND_RECIPE = 0, FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS = 1, - * FOUND_AND_SUCCESSFULLY_USED_RECIPE = 2; - */ - public int checkRecipe(boolean skipOC) { - RecipeMap tMap = getRecipeMap(); - if (tMap == null) return DID_NOT_FIND_RECIPE; - GT_Recipe tRecipe = tMap.findRecipeQuery() - .items(getAllInputs()) - .fluids(getFillableStack()) - .specialSlot(getSpecialSlot()) - .voltage(V[mTier]) - .cachedRecipe(mLastRecipe) - .find(); - if (tRecipe == null) { - return DID_NOT_FIND_RECIPE; - } - if (tRecipe.getMetadataOrDefault(EXPLODE, false) && getBaseMetaTileEntity() != null) { - getBaseMetaTileEntity().doExplosion(V[mTier] * 4); - return DID_NOT_FIND_RECIPE; - } - if (tRecipe.getMetadataOrDefault(ON_FIRE, false) && getBaseMetaTileEntity() != null) { - getBaseMetaTileEntity().setOnFire(); - return DID_NOT_FIND_RECIPE; - } - - if (GT_Mod.gregtechproxy.mLowGravProcessing && (tRecipe.mSpecialValue == -100 || tRecipe.mSpecialValue == -300) - && !isValidForLowGravity(tRecipe, getBaseMetaTileEntity().getWorld().provider.dimensionId)) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - if (tRecipe.mCanBeBuffered) mLastRecipe = tRecipe; - if (!canOutput(tRecipe)) { - mOutputBlocked++; - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - } - ICleanroom cleanroom = getCleanroom(); - if (tRecipe.mSpecialValue == -200 || tRecipe.mSpecialValue == -300) { - if (cleanroom == null || !cleanroom.isValidCleanroom() || cleanroom.getCleanness() == 0) { - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - } - } - if (!tRecipe.isRecipeInputEqual(true, new FluidStack[] { getFillableStack() }, getAllInputs())) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - for (int i = 0; i < mOutputItems.length; i++) - if (getBaseMetaTileEntity().getRandomNumber(10000) < tRecipe.getOutputChance(i)) - mOutputItems[i] = tRecipe.getOutput(i); - if (tRecipe.mSpecialValue == -200 || tRecipe.mSpecialValue == -300) { - assert cleanroom != null; - for (int i = 0; i < mOutputItems.length; i++) if (mOutputItems[i] != null - && getBaseMetaTileEntity().getRandomNumber(10000) > cleanroom.getCleanness()) { - if (debugCleanroom) { - GT_Log.out.println( - "BasicMachine: Voiding output due to cleanness failure. Cleanness = " - + cleanroom.getCleanness()); - } - mOutputItems[i] = null; - } - } - mOutputFluid = tRecipe.getFluidOutput(0); - if (!skipOC) { - calculateCustomOverclock(tRecipe); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - } - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getBottomFacingPipeActive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - public ITexture[] getBottomFacingPipeInactive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - public ITexture[] getTopFacingPipeActive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - public ITexture[] getTopFacingPipeInactive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - public ITexture[] getSideFacingPipeActive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - public ITexture[] getSideFacingPipeInactive(byte aColor) { - return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - final NBTTagCompound tag = accessor.getNBTData(); - - if (tag.getBoolean("stutteringSingleBlock")) { - currenttip.add("Status: insufficient energy"); - } else { - boolean isActive = tag.getBoolean("isActiveSingleBlock"); - if (isActive) { - int mEUt = tag.getInteger("eut"); - if (!isSteampowered()) { - if (mEUt > 0) { - currenttip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.energy.use_with_amperage", - GT_Utility.formatNumbers(mEUt), - GT_Utility.getAmperageForTier(mEUt, (byte) getInputTier()), - GT_Utility.getColoredTierNameFromTier((byte) getInputTier()))); - } else if (mEUt < 0) { - currenttip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.energy.produce_with_amperage", - GT_Utility.formatNumbers(-mEUt), - GT_Utility.getAmperageForTier(-mEUt, (byte) getOutputTier()), - GT_Utility.getColoredTierNameFromTier((byte) getOutputTier()))); - } - } else { - if (mEUt > 0) { - currenttip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.energy.use", - GT_Utility.formatNumbers(mEUt), - GT_Utility.getColoredTierNameFromVoltage(mEUt))); - } else if (mEUt < 0) { - currenttip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.energy.produce", - GT_Utility.formatNumbers(-mEUt), - GT_Utility.getColoredTierNameFromVoltage(-mEUt))); - } - } - } - currenttip.add( - GT_Waila.getMachineProgressString( - isActive, - tag.getInteger("maxProgressSingleBlock"), - tag.getInteger("progressSingleBlock"))); - } - - currenttip.add( - String.format( - "Machine Facing: %s", - ForgeDirection.getOrientation(tag.getInteger("mainFacingSingleBlock")) - .name())); - - currenttip.add( - String.format( - "Output Facing: %s", - ForgeDirection.getOrientation(tag.getInteger("outputFacingSingleBlock")) - .name())); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - - tag.setInteger("progressSingleBlock", mProgresstime); - tag.setInteger("maxProgressSingleBlock", mMaxProgresstime); - tag.setInteger("mainFacingSingleBlock", mMainFacing.ordinal()); - tag.setBoolean("stutteringSingleBlock", mStuttering); - - final IGregTechTileEntity tileEntity = getBaseMetaTileEntity(); - if (tileEntity != null) { - tag.setBoolean("isActiveSingleBlock", tileEntity.isActive()); - tag.setInteger( - "outputFacingSingleBlock", - tileEntity.getFrontFacing() - .ordinal()); - if (tileEntity.isActive()) tag.setInteger("eut", mEUt); - } - } - - @Nonnull - @Override - public OverclockDescriber getOverclockDescriber() { - return overclockDescriber; - } - - // GUI stuff - - @Override - public int getCircuitSlotX() { - return 153; - } - - @Override - public int getCircuitSlotY() { - return 63; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - if (getRecipeMap() != null) { - getRecipeMap().getFrontend() - .addGregTechLogo(builder, new Pos2d(0, 0)); - } else { - builder.widget( - new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) - .setSize(17, 17) - .setPos(152, 63)); - } - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - if (!isSteampowered()) { - builder.widget(createFluidAutoOutputButton()); - builder.widget(createItemAutoOutputButton()); - } - - BasicUIProperties uiProperties = getUIProperties(); - addIOSlots(builder, uiProperties); - - builder.widget(createChargerSlot(79, 62)); - - addProgressBar(builder, uiProperties); - - builder.widget( - createErrorStatusArea( - builder, - isSteampowered() ? GT_UITextures.PICTURE_STALLED_STEAM : GT_UITextures.PICTURE_STALLED_ELECTRICITY)); - } - - /** - * Override to specify UI properties if this machine doesn't work with recipemap. - */ - protected BasicUIProperties getUIProperties() { - if (getRecipeMap() != null) { - BasicUIProperties originalProperties = getRecipeMap().getFrontend() - .getUIProperties(); - return originalProperties.toBuilder() - .maxItemInputs(mInputSlotCount) - .maxItemOutputs(mOutputItems.length) - .maxFluidInputs(Math.min(originalProperties.maxFluidInputs, 1)) - .maxFluidOutputs(Math.min(originalProperties.maxFluidOutputs, 1)) - .build(); - } - return BasicUIProperties.builder() - .maxItemInputs(mInputSlotCount) - .maxItemOutputs(mOutputItems.length) - .maxFluidInputs(getCapacity() != 0 ? 1 : 0) - .maxFluidOutputs(0) - .build(); - } - - /** - * Adds item I/O, special item, and fluid I/O slots. - */ - protected void addIOSlots(ModularWindow.Builder builder, BasicUIProperties uiProperties) { - UIHelper.forEachSlots( - (i, backgrounds, pos) -> builder.widget(createItemInputSlot(i, backgrounds, pos)), - (i, backgrounds, pos) -> builder.widget(createItemOutputSlot(i, backgrounds, pos)), - (i, backgrounds, pos) -> builder.widget(createSpecialSlot(backgrounds, pos, uiProperties)), - (i, backgrounds, pos) -> builder.widget(createFluidInputSlot(backgrounds, pos)), - (i, backgrounds, pos) -> builder.widget(createFluidOutputSlot(backgrounds, pos)), - getGUITextureSet().getItemSlot(), - getGUITextureSet().getFluidSlot(), - uiProperties, - uiProperties.maxItemInputs, - uiProperties.maxItemOutputs, - uiProperties.maxFluidInputs, - uiProperties.maxFluidOutputs, - getSteamVariant(), - Pos2d.ZERO); - } - - protected void addProgressBar(ModularWindow.Builder builder, BasicUIProperties uiProperties) { - boolean isSteamPowered = isSteampowered(); - RecipeMap recipeMap = getRecipeMap(); - if (!isSteamPowered && uiProperties.progressBarTexture == null) { - if (recipeMap != null) { - // Require progress bar texture for machines working with recipemap, otherwise permit - throw new RuntimeException("Missing progressbar texture for " + recipeMap.unlocalizedName); - } else { - return; - } - } - if (isSteamPowered && uiProperties.progressBarTextureSteam == null) { - if (recipeMap != null) { - throw new RuntimeException("Missing steam progressbar texture for " + recipeMap.unlocalizedName); - } else { - return; - } - } - - builder.widget( - setNEITransferRect( - new ProgressBar() - .setProgress(() -> maxProgresstime() != 0 ? (float) getProgresstime() / maxProgresstime() : 0) - .setTexture( - isSteamPowered ? uiProperties.progressBarTextureSteam.get(getSteamVariant()) - : uiProperties.progressBarTexture.get(), - uiProperties.progressBarImageSize) - .setDirection(uiProperties.progressBarDirection) - .setPos(uiProperties.progressBarPos) - .setSize(uiProperties.progressBarSize), - uiProperties.neiTransferRectId)); - addProgressBarSpecialTextures(builder, uiProperties); - } - - /** - * Override this as needed instead of calling. - */ - protected SlotWidget createItemInputSlot(int index, IDrawable[] backgrounds, Pos2d pos) { - return (SlotWidget) new SlotWidget(inventoryHandler, getInputSlot() + index).setAccess(true, true) - .setBackground(backgrounds) - .setPos(pos); - } - - /** - * Override this as needed instead of calling. - */ - protected SlotWidget createItemOutputSlot(int index, IDrawable[] backgrounds, Pos2d pos) { - return (SlotWidget) new SlotWidget(inventoryHandler, getOutputSlot() + index).setAccess(true, false) - .setBackground(backgrounds) - .setPos(pos); - } - - /** - * Override this as needed instead of calling. - */ - protected SlotWidget createSpecialSlot(IDrawable[] backgrounds, Pos2d pos, BasicUIProperties uiProperties) { - return (SlotWidget) new SlotWidget(inventoryHandler, getSpecialSlotIndex()).setAccess(true, true) - .disableShiftInsert() - .setGTTooltip( - () -> mTooltipCache.getData(uiProperties.useSpecialSlot ? SPECIAL_SLOT_TOOLTIP : UNUSED_SLOT_TOOLTIP)) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setBackground(backgrounds) - .setPos(pos); - } - - protected FluidSlotWidget createFluidInputSlot(IDrawable[] backgrounds, Pos2d pos) { - return (FluidSlotWidget) new FluidSlotWidget(fluidTank).setBackground(backgrounds) - .setPos(pos); - } - - protected FluidSlotWidget createFluidOutputSlot(IDrawable[] backgrounds, Pos2d pos) { - return (FluidSlotWidget) new FluidSlotWidget(fluidOutputTank).setInteraction(true, false) - .setBackground(backgrounds) - .setPos(pos); - } - - @Override - protected SlotWidget createChargerSlot(int x, int y) { - if (isSteampowered()) { - return (SlotWidget) createChargerSlot(x, y, UNUSED_SLOT_TOOLTIP, new String[0]) - .setBackground(getGUITextureSet().getItemSlot()); - } else { - return super.createChargerSlot(x, y); - } - } - - protected CycleButtonWidget createItemAutoOutputButton() { - return (CycleButtonWidget) new CycleButtonWidget().setToggle(() -> mItemTransfer, val -> mItemTransfer = val) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_AUTOOUTPUT_ITEM) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setGTTooltip(() -> mTooltipCache.getData(ITEM_TRANSFER_TOOLTIP)) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(25, 62) - .setSize(18, 18); - } - - protected CycleButtonWidget createFluidAutoOutputButton() { - return (CycleButtonWidget) new CycleButtonWidget().setToggle(() -> mFluidTransfer, val -> mFluidTransfer = val) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_AUTOOUTPUT_FLUID) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setGTTooltip(() -> mTooltipCache.getData(FLUID_TRANSFER_TOOLTIP)) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(7, 62) - .setSize(18, 18); - } - - protected Widget setNEITransferRect(Widget widget, String transferRectID) { - if (GT_Utility.isStringInvalid(transferRectID)) { - return widget; - } - final String transferRectTooltip; - if (isSteampowered()) { - transferRectTooltip = StatCollector - .translateToLocalFormatted(NEI_TRANSFER_STEAM_TOOLTIP, overclockDescriber.getTierString()); - } else { - transferRectTooltip = StatCollector - .translateToLocalFormatted(NEI_TRANSFER_VOLTAGE_TOOLTIP, overclockDescriber.getTierString()); - } - widget.setNEITransferRect(transferRectID, new Object[] { overclockDescriber }, transferRectTooltip); - return widget; - } - - protected void addProgressBarSpecialTextures(ModularWindow.Builder builder, BasicUIProperties uiProperties) { - if (isSteampowered()) { - for (Pair> specialTexture : uiProperties.specialTexturesSteam) { - builder.widget( - new DrawableWidget().setDrawable( - specialTexture.getLeft() - .get(getSteamVariant())) - .setSize( - specialTexture.getRight() - .getLeft()) - .setPos( - specialTexture.getRight() - .getRight())); - } - } else { - for (Pair> specialTexture : uiProperties.specialTextures) { - builder.widget( - new DrawableWidget().setDrawable(specialTexture.getLeft()) - .setSize( - specialTexture.getRight() - .getLeft()) - .setPos( - specialTexture.getRight() - .getRight())); - } - } - } - - protected DrawableWidget createErrorStatusArea(ModularWindow.Builder builder, IDrawable picture) { - return (DrawableWidget) new DrawableWidget().setDrawable(picture) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setEnabled( - widget -> !widget.getTooltip() - .isEmpty()) - .dynamicTooltip(this::getErrorDescriptions) - .dynamicTooltipShift(this::getErrorDescriptionsShift) - .setPos(79, 44) - .setSize(18, 18) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer(() -> mStuttering, val -> mStuttering = val), - builder, - (widget, val) -> widget.notifyTooltipChange()) - .attachSyncer( - new FakeSyncWidget.IntegerSyncer( - () -> getBaseMetaTileEntity().getErrorDisplayID(), - val -> getBaseMetaTileEntity().setErrorDisplayID(val)), - builder, - (widget, val) -> widget.notifyTooltipChange()); - } - - protected List getErrorDescriptions() { - final GT_TooltipDataCache.TooltipData tooltip = getErrorTooltip(); - return tooltip != null ? tooltip.text : Collections.emptyList(); - } - - protected List getErrorDescriptionsShift() { - final GT_TooltipDataCache.TooltipData tooltip = getErrorTooltip(); - return tooltip != null ? tooltip.shiftText : Collections.emptyList(); - } - - protected GT_TooltipDataCache.TooltipData getErrorTooltip() { - if (isSteampowered()) { - if ((getBaseMetaTileEntity().getErrorDisplayID() & 64) != 0) { - return mTooltipCache.getData(STALLED_VENT_TOOLTIP); - } - } - if (mStuttering) { - return mTooltipCache.getData( - STALLED_STUTTERING_TOOLTIP, - StatCollector.translateToLocal(POWER_SOURCE_KEY + (isSteampowered() ? "steam" : "power"))); - } - return null; - } - - protected static int getCapacityForTier(int tier) { - return switch (tier) { - case 0 -> 8000; - case 1 -> 16000; - case 2 -> 32000; - case 3 -> 64000; - case 4 -> 128000; - default -> 256000; - }; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java deleted file mode 100644 index 5eb648d560..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Bronze.java +++ /dev/null @@ -1,387 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.D1; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZE_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZE_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZE_TOP; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import java.util.Arrays; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.ParticleFX; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.SteamVariant; -import gregtech.api.enums.TierEU; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.overclockdescriber.OverclockDescriber; -import gregtech.api.objects.overclockdescriber.SteamOverclockDescriber; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; - -/** - * NEVER INCLUDE THIS FILE IN YOUR MOD!!! - *

- * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple - * Machine - */ -public abstract class GT_MetaTileEntity_BasicMachine_Bronze extends GT_MetaTileEntity_BasicMachine { - - private static final String TT_machineType = "GT5U.MBTT.MachineType"; - private static final int NEEDS_STEAM_VENTING = 64; - public boolean mNeedsSteamVenting = false; - - public GT_MetaTileEntity_BasicMachine_Bronze(int aID, String aName, String aNameRegional, String aDescription, - int aInputSlotCount, int aOutputSlotCount, boolean aHighPressure) { - super(aID, aName, aNameRegional, aHighPressure ? 2 : 1, 0, aDescription, aInputSlotCount, aOutputSlotCount); - } - - public GT_MetaTileEntity_BasicMachine_Bronze(String aName, String[] aDescription, ITexture[][][] aTextures, - int aInputSlotCount, int aOutputSlotCount, boolean aHighPressure) { - super(aName, aHighPressure ? 2 : 1, 0, aDescription, aTextures, aInputSlotCount, aOutputSlotCount); - } - - protected boolean isBricked() { - return false; - } - - @Override - public OverclockDescriber createOverclockDescriber() { - return new SteamOverclockDescriber(SteamVariant.BRONZE, 1, 2); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("mNeedsSteamVenting", mNeedsSteamVenting); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mNeedsSteamVenting = aNBT.getBoolean("mNeedsSteamVenting"); - } - - @Override - public boolean isElectric() { - return false; - } - - @Override - public boolean isEnetInput() { - return false; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return false; - } - - @Override - public long maxEUStore() { - return 0; - } - - @Override - public long maxEUInput() { - return 0; - } - - @Override - public int rechargerSlotCount() { - return 0; - } - - @Override - public int dechargerSlotCount() { - return 0; - } - - @Override - public boolean isSteampowered() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return super.isFacingValid(facing) && facing != mMainFacing; - } - - @Override - public long getMinimumStoredEU() { - return 1000; - } - - @Override - public long maxSteamStore() { - return 16000; - } - - @Override - public boolean isLiquidInput(ForgeDirection side) { - return side != mMainFacing; - } - - @Override - public boolean isLiquidOutput(ForgeDirection side) { - return side != mMainFacing; - } - - @Override - public boolean doesAutoOutput() { - return false; - } - - @Override - public boolean allowToCheckRecipe() { - if (mNeedsSteamVenting - && getBaseMetaTileEntity().getCoverIDAtSide(getBaseMetaTileEntity().getFrontFacing()) == 0 - && !GT_Utility.hasBlockHitBox( - getBaseMetaTileEntity().getWorld(), - getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 1), - getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 1), - getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 1))) { - sendSound((byte) 9); - mNeedsSteamVenting = false; - try { - for (EntityLivingBase tLiving : getBaseMetaTileEntity().getWorld() - .getEntitiesWithinAABB( - EntityLivingBase.class, - AxisAlignedBB.getBoundingBox( - getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 1), - getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 1), - getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 1), - getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 1) + 1, - getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 1) + 1, - getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 1) + 1))) { - GT_Utility.applyHeatDamage(tLiving, getSteamDamage()); - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - } - return !mNeedsSteamVenting; - } - - @Override - public int checkRecipe() { - GT_Recipe tRecipe = getRecipeMap().findRecipe(getBaseMetaTileEntity(), false, TierEU.LV, null, getAllInputs()); - if ((tRecipe != null) && (canOutput(tRecipe.mOutputs)) - && (tRecipe.isRecipeInputEqual(true, null, getAllInputs()))) { - this.mOutputItems[0] = tRecipe.getOutput(0); - calculateCustomOverclock(tRecipe); - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - return DID_NOT_FIND_RECIPE; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - // Super already zeroed out setErrorDisplayID, add additional error codes here. - aBaseMetaTileEntity.setErrorDisplayID(aBaseMetaTileEntity.getErrorDisplayID() | (mNeedsSteamVenting ? 64 : 0)); - } - - @Override - public void endProcess() { - if (isSteampowered()) mNeedsSteamVenting = true; - } - - @Override - public void doSound(byte aIndex, double aX, double aY, double aZ) { - super.doSound(aIndex, aX, aY, aZ); - if (aIndex == 9) { - GT_Utility.doSoundAtClient(SoundResource.RANDOM_FIZZ, 5, 1.0F, aX, aY, aZ); - - new ParticleEventBuilder().setIdentifier(ParticleFX.CLOUD) - .setWorld(getBaseMetaTileEntity().getWorld()) - .setMotion( - getBaseMetaTileEntity().getFrontFacing().offsetX / 5.0, - getBaseMetaTileEntity().getFrontFacing().offsetY / 5.0, - getBaseMetaTileEntity().getFrontFacing().offsetZ / 5.0) - .times( - 8, - x -> x - .setPosition( - aX - 0.5 + XSTR_INSTANCE.nextFloat(), - aY - 0.5 + XSTR_INSTANCE.nextFloat(), - aZ - 0.5 + XSTR_INSTANCE.nextFloat()) - .run()); - } - } - - @Override - public boolean isGivingInformation() { - return false; - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCoverID) { - return GregTech_API.getCoverBehaviorNew(aCoverID.toStack()) - .isSimpleCover() && super.allowCoverOnSide(side, aCoverID); - } - - public float getSteamDamage() { - return 6.0F * mTier; - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_TOP : MACHINE_BRONZE_TOP, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_TOP : MACHINE_BRONZE_TOP, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_BOTTOM : MACHINE_BRONZE_BOTTOM, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_BOTTOM : MACHINE_BRONZE_BOTTOM, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getBottomFacingPipeActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_BOTTOM : MACHINE_BRONZE_BOTTOM, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getBottomFacingPipeInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_BOTTOM : MACHINE_BRONZE_BOTTOM, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getTopFacingPipeActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_TOP : MACHINE_BRONZE_TOP, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getTopFacingPipeInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_TOP : MACHINE_BRONZE_TOP, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getSideFacingPipeActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getSideFacingPipeInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public SteamVariant getSteamVariant() { - return SteamVariant.BRONZE; - } - - @Override - public GUITextureSet getGUITextureSet() { - return GUITextureSet.STEAM.apply(getSteamVariant()); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) - .setSize(17, 17) - .setPos(152, 63)); - } - - @Override - protected FluidSlotWidget createFluidInputSlot(IDrawable[] backgrounds, Pos2d pos) { - return null; - } - - @Override - protected FluidSlotWidget createFluidOutputSlot(IDrawable[] backgrounds, Pos2d pos) { - return null; - } - - @Override - public String[] getDescription() { - String[] description = Arrays.copyOf(mDescriptionArray, mDescriptionArray.length + 1); - description[mDescriptionArray.length] = StatCollector.translateToLocal(TT_machineType) + ": " - + EnumChatFormatting.YELLOW - + StatCollector.translateToLocal(this.getRecipeMap().unlocalizedName) - + EnumChatFormatting.RESET; - return description; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java deleted file mode 100644 index a10e735843..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_GT_Recipe.java +++ /dev/null @@ -1,818 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.GT_Values.W; -import static gregtech.api.enums.GT_Values.ticksBetweenSounds; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; -import static net.minecraftforge.common.util.ForgeDirection.UP; - -import java.util.Locale; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; -import com.gtnewhorizons.modularui.api.drawable.UITexture; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.ParticleFX; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures.BlockIcons.CustomIcon; -import gregtech.api.enums.Tier; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.recipe.BasicUIProperties; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.ExternalMaterials; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; - -/** - * NEVER INCLUDE THIS FILE IN YOUR MOD!!! - *

- * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple - * Machine - */ -public class GT_MetaTileEntity_BasicMachine_GT_Recipe extends GT_MetaTileEntity_BasicMachine { - - private final RecipeMap mRecipes; - private final int mTankCapacity; - private final SpecialEffects mSpecialEffect; - private final ResourceLocation mSoundResourceLocation; - private FallbackableUITexture progressBarTexture; - private int recipeCatalystPriority; - - /** - * Registers machine with single-line description, specific tank capacity, and sound specified by ResourceLocation. - */ - public GT_MetaTileEntity_BasicMachine_GT_Recipe(int aID, String aName, String aNameRegional, int aTier, - String aDescription, RecipeMap aRecipes, int aInputSlots, int aOutputSlots, int aTankCapacity, - ResourceLocation aSound, SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { - this( - aID, - aName, - aNameRegional, - aTier, - new String[] { aDescription }, - aRecipes, - aInputSlots, - aOutputSlots, - aTankCapacity, - aSound, - aSpecialEffect, - aOverlays, - aRecipe); - } - - /** - * Registers machine with multi-line descriptions, specific tank capacity, and sound specified by ResourceLocation. - */ - public GT_MetaTileEntity_BasicMachine_GT_Recipe(int aID, String aName, String aNameRegional, int aTier, - String[] aDescription, RecipeMap aRecipes, int aInputSlots, int aOutputSlots, int aTankCapacity, - ResourceLocation aSound, SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { - super( - aID, - aName, - aNameRegional, - aTier, - aRecipes.getAmperage(), - aDescription, - aInputSlots, - aOutputSlots, - TextureFactory.of( - TextureFactory.of( - new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_SIDE_ACTIVE")), - TextureFactory.builder() - .addIcon( - (new CustomIcon( - "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_SIDE_ACTIVE_GLOW"))) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_SIDE")), - TextureFactory.builder() - .addIcon( - (new CustomIcon( - "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_SIDE_GLOW"))) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of( - new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_FRONT_ACTIVE")), - TextureFactory.builder() - .addIcon( - (new CustomIcon( - "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_FRONT_ACTIVE_GLOW"))) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_FRONT")), - TextureFactory.builder() - .addIcon( - (new CustomIcon( - "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_FRONT_GLOW"))) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of( - new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_TOP_ACTIVE")), - TextureFactory.builder() - .addIcon( - (new CustomIcon( - "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_TOP_ACTIVE_GLOW"))) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_TOP")), - TextureFactory.builder() - .addIcon( - (new CustomIcon( - "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_TOP_GLOW"))) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of( - new CustomIcon( - "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_BOTTOM_ACTIVE")), - TextureFactory.builder() - .addIcon( - (new CustomIcon( - "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_BOTTOM_ACTIVE_GLOW"))) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_BOTTOM")), - TextureFactory.builder() - .addIcon( - (new CustomIcon( - "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_BOTTOM_GLOW"))) - .glow() - .build())); - this.mTankCapacity = aTankCapacity; - this.mSpecialEffect = aSpecialEffect; - this.mRecipes = aRecipes; - this.mSoundResourceLocation = aSound; - this.progressBarTexture = mRecipes.getFrontend() - .getUIProperties().progressBarTexture; - - // TODO: CHECK - if (aRecipe != null) { - for (int i = 3; i < aRecipe.length; i++) { - if (!(aRecipe[i] instanceof X)) continue; - - // spotless:off - aRecipe[i] = switch ((X) aRecipe[i]) { - case CIRCUIT -> Tier.ELECTRIC[this.mTier].mManagingObject; - case BETTER_CIRCUIT -> Tier.ELECTRIC[this.mTier].mBetterManagingObject; - case HULL -> Tier.ELECTRIC[this.mTier].mHullObject; - case WIRE -> Tier.ELECTRIC[this.mTier].mConductingObject; - case WIRE4 -> Tier.ELECTRIC[this.mTier].mLargerConductingObject; - case STICK_DISTILLATION -> OrePrefixes.stick.get(Materials.Blaze); - - case GLASS -> switch (this.mTier) { - case 0, 1, 2, 3 -> new ItemStack(Blocks.glass, 1, W); - case 4, 5, 6, 7, 8 -> "blockGlass" + VN[aTier]; - default -> "blockGlass" + VN[8]; - }; - - case PLATE -> switch (this.mTier) { - case 0, 1 -> OrePrefixes.plate.get(Materials.Steel); - case 2 -> OrePrefixes.plate.get(Materials.Aluminium); - case 3 -> OrePrefixes.plate.get(Materials.StainlessSteel); - case 4 -> OrePrefixes.plate.get(Materials.Titanium); - case 5 -> OrePrefixes.plate.get(Materials.TungstenSteel); - case 6 -> OrePrefixes.plate.get(Materials.HSSG); - case 7 -> OrePrefixes.plate.get(Materials.HSSE); - default -> OrePrefixes.plate.get(Materials.Neutronium); - }; - - case PIPE -> switch (this.mTier) { - case 0, 1 -> OrePrefixes.pipeMedium.get(Materials.Bronze); - case 2 -> OrePrefixes.pipeMedium.get(Materials.Steel); - case 3 -> OrePrefixes.pipeMedium.get(Materials.StainlessSteel); - case 4 -> OrePrefixes.pipeMedium.get(Materials.Titanium); - case 5 -> OrePrefixes.pipeMedium.get(Materials.TungstenSteel); - case 6 -> OrePrefixes.pipeSmall.get(Materials.Ultimate); - case 7 -> OrePrefixes.pipeMedium.get(Materials.Ultimate); - case 8 -> OrePrefixes.pipeLarge.get(Materials.Ultimate); - default -> OrePrefixes.pipeHuge.get(Materials.Ultimate); - }; - - case COIL_HEATING -> switch (this.mTier) { - case 0, 1 -> OrePrefixes.wireGt02.get(Materials.AnyCopper); - case 2 -> OrePrefixes.wireGt02.get(Materials.Cupronickel); - case 3 -> OrePrefixes.wireGt02.get(Materials.Kanthal); - case 4 -> OrePrefixes.wireGt02.get(Materials.Nichrome); - case 5 -> OrePrefixes.wireGt02.get(Materials.TPV); - case 6 -> OrePrefixes.wireGt02.get(Materials.HSSG); - case 7 -> OrePrefixes.wireGt02.get(Materials.Naquadah); - case 8 -> OrePrefixes.wireGt02.get(Materials.NaquadahAlloy); - case 9 -> OrePrefixes.wireGt04.get(Materials.NaquadahAlloy); - default -> OrePrefixes.wireGt08.get(Materials.NaquadahAlloy); - }; - - case COIL_HEATING_DOUBLE -> switch (this.mTier) { - case 0, 1 -> OrePrefixes.wireGt04.get(Materials.AnyCopper); - case 2 -> OrePrefixes.wireGt04.get(Materials.Cupronickel); - case 3 -> OrePrefixes.wireGt04.get(Materials.Kanthal); - case 4 -> OrePrefixes.wireGt04.get(Materials.Nichrome); - case 5 -> OrePrefixes.wireGt04.get(Materials.TPV); - case 6 -> OrePrefixes.wireGt04.get(Materials.HSSG); - case 7 -> OrePrefixes.wireGt04.get(Materials.Naquadah); - case 8 -> OrePrefixes.wireGt04.get(Materials.NaquadahAlloy); - case 9 -> OrePrefixes.wireGt08.get(Materials.NaquadahAlloy); - default -> OrePrefixes.wireGt16.get(Materials.NaquadahAlloy); - }; - - case STICK_MAGNETIC -> switch (this.mTier) { - case 0, 1 -> OrePrefixes.stick.get(Materials.IronMagnetic); - case 2, 3 -> OrePrefixes.stick.get(Materials.SteelMagnetic); - case 4, 5 -> OrePrefixes.stick.get(Materials.NeodymiumMagnetic); - case 6, 7, 8, 9 -> OrePrefixes.stick.get(Materials.SamariumMagnetic); - default -> OrePrefixes.stick.get(Materials.TengamAttuned); - }; - - case STICK_ELECTROMAGNETIC -> switch (this.mTier) { - case 0, 1 -> OrePrefixes.stick.get(Materials.AnyIron); - case 2, 3 -> OrePrefixes.stick.get(Materials.Steel); - case 4 -> OrePrefixes.stick.get(Materials.Neodymium); - default -> OrePrefixes.stick.get(Materials.VanadiumGallium); - }; - - case COIL_ELECTRIC -> switch (this.mTier) { - case 0 -> OrePrefixes.wireGt01.get(Materials.Lead); - case 1 -> OrePrefixes.wireGt02.get(Materials.Tin); - case 2 -> OrePrefixes.wireGt02.get(Materials.AnyCopper); - case 3 -> OrePrefixes.wireGt04.get(Materials.AnyCopper); - case 4 -> OrePrefixes.wireGt08.get(Materials.AnnealedCopper); - case 5 -> OrePrefixes.wireGt16.get(Materials.AnnealedCopper); - case 6 -> OrePrefixes.wireGt04.get(Materials.YttriumBariumCuprate); - case 7 -> OrePrefixes.wireGt08.get(Materials.Iridium); - default -> OrePrefixes.wireGt16.get(Materials.Osmium); - }; - - case ROBOT_ARM -> switch (this.mTier) { - case 0, 1 -> ItemList.Robot_Arm_LV; - case 2 -> ItemList.Robot_Arm_MV; - case 3 -> ItemList.Robot_Arm_HV; - case 4 -> ItemList.Robot_Arm_EV; - case 5 -> ItemList.Robot_Arm_IV; - case 6 -> ItemList.Robot_Arm_LuV; - case 7 -> ItemList.Robot_Arm_ZPM; - case 8 -> ItemList.Robot_Arm_UV; - case 9 -> ItemList.Robot_Arm_UHV; - case 10 -> ItemList.Robot_Arm_UEV; - case 11 -> ItemList.Robot_Arm_UIV; - case 12 -> ItemList.Robot_Arm_UMV; - case 13 -> ItemList.Robot_Arm_UXV; - default -> ItemList.Robot_Arm_MAX; - }; - - case PUMP -> switch (this.mTier) { - case 0, 1 -> ItemList.Electric_Pump_LV; - case 2 -> ItemList.Electric_Pump_MV; - case 3 -> ItemList.Electric_Pump_HV; - case 4 -> ItemList.Electric_Pump_EV; - case 5 -> ItemList.Electric_Pump_IV; - case 6 -> ItemList.Electric_Pump_LuV; - case 7 -> ItemList.Electric_Pump_ZPM; - case 8 -> ItemList.Electric_Pump_UV; - case 9 -> ItemList.Electric_Pump_UHV; - case 10 -> ItemList.Electric_Pump_UEV; - case 11 -> ItemList.Electric_Pump_UIV; - case 12 -> ItemList.Electric_Pump_UMV; - case 13 -> ItemList.Electric_Pump_UXV; - default -> ItemList.Electric_Pump_MAX; - }; - - case MOTOR -> switch (this.mTier) { - case 0, 1 -> ItemList.Electric_Motor_LV; - case 2 -> ItemList.Electric_Motor_MV; - case 3 -> ItemList.Electric_Motor_HV; - case 4 -> ItemList.Electric_Motor_EV; - case 5 -> ItemList.Electric_Motor_IV; - case 6 -> ItemList.Electric_Motor_LuV; - case 7 -> ItemList.Electric_Motor_ZPM; - case 8 -> ItemList.Electric_Motor_UV; - case 9 -> ItemList.Electric_Motor_UHV; - case 10 -> ItemList.Electric_Motor_UEV; - case 11 -> ItemList.Electric_Motor_UIV; - case 12 -> ItemList.Electric_Motor_UMV; - case 13 -> ItemList.Electric_Motor_UXV; - default -> ItemList.Electric_Motor_MAX; - }; - - case PISTON -> switch (this.mTier) { - case 0, 1 -> ItemList.Electric_Piston_LV; - case 2 -> ItemList.Electric_Piston_MV; - case 3 -> ItemList.Electric_Piston_HV; - case 4 -> ItemList.Electric_Piston_EV; - case 5 -> ItemList.Electric_Piston_IV; - case 6 -> ItemList.Electric_Piston_LuV; - case 7 -> ItemList.Electric_Piston_ZPM; - case 8 -> ItemList.Electric_Piston_UV; - case 9 -> ItemList.Electric_Piston_UHV; - case 10 -> ItemList.Electric_Piston_UEV; - case 11 -> ItemList.Electric_Piston_UIV; - case 12 -> ItemList.Electric_Piston_UMV; - case 13 -> ItemList.Electric_Piston_UXV; - default -> ItemList.Electric_Piston_MAX; - }; - - case CONVEYOR -> switch (this.mTier) { - case 0, 1 -> ItemList.Conveyor_Module_LV; - case 2 -> ItemList.Conveyor_Module_MV; - case 3 -> ItemList.Conveyor_Module_HV; - case 4 -> ItemList.Conveyor_Module_EV; - case 5 -> ItemList.Conveyor_Module_IV; - case 6 -> ItemList.Conveyor_Module_LuV; - case 7 -> ItemList.Conveyor_Module_ZPM; - case 8 -> ItemList.Conveyor_Module_UV; - case 9 -> ItemList.Conveyor_Module_UHV; - case 10 -> ItemList.Conveyor_Module_UEV; - case 11 -> ItemList.Conveyor_Module_UIV; - case 12 -> ItemList.Conveyor_Module_UMV; - case 13 -> ItemList.Conveyor_Module_UXV; - default -> ItemList.Conveyor_Module_MAX; - }; - - case EMITTER -> switch (this.mTier) { - case 0, 1 -> ItemList.Emitter_LV; - case 2 -> ItemList.Emitter_MV; - case 3 -> ItemList.Emitter_HV; - case 4 -> ItemList.Emitter_EV; - case 5 -> ItemList.Emitter_IV; - case 6 -> ItemList.Emitter_LuV; - case 7 -> ItemList.Emitter_ZPM; - case 8 -> ItemList.Emitter_UV; - case 9 -> ItemList.Emitter_UHV; - case 10 -> ItemList.Emitter_UEV; - case 11 -> ItemList.Emitter_UIV; - case 12 -> ItemList.Emitter_UMV; - case 13 -> ItemList.Emitter_UXV; - default -> ItemList.Emitter_MAX; - }; - - case SENSOR -> switch (this.mTier) { - case 0, 1 -> ItemList.Sensor_LV; - case 2 -> ItemList.Sensor_MV; - case 3 -> ItemList.Sensor_HV; - case 4 -> ItemList.Sensor_EV; - case 5 -> ItemList.Sensor_IV; - case 6 -> ItemList.Sensor_LuV; - case 7 -> ItemList.Sensor_ZPM; - case 8 -> ItemList.Sensor_UV; - case 9 -> ItemList.Sensor_UHV; - case 10 -> ItemList.Sensor_UEV; - case 11 -> ItemList.Sensor_UIV; - case 12 -> ItemList.Sensor_UMV; - case 13 -> ItemList.Sensor_UXV; - default -> ItemList.Sensor_MAX; - }; - - case FIELD_GENERATOR -> switch (this.mTier) { - case 0, 1 -> ItemList.Field_Generator_LV; - case 2 -> ItemList.Field_Generator_MV; - case 3 -> ItemList.Field_Generator_HV; - case 4 -> ItemList.Field_Generator_EV; - case 5 -> ItemList.Field_Generator_IV; - case 6 -> ItemList.Field_Generator_LuV; - case 7 -> ItemList.Field_Generator_ZPM; - case 8 -> ItemList.Field_Generator_UV; - case 9 -> ItemList.Field_Generator_UHV; - case 10 -> ItemList.Field_Generator_UEV; - case 11 -> ItemList.Field_Generator_UIV; - case 12 -> ItemList.Field_Generator_UMV; - case 13 -> ItemList.Field_Generator_UXV; - default -> ItemList.Field_Generator_MAX; - }; - - case ROTOR -> switch (this.mTier) { - case 0, 1 -> OrePrefixes.rotor.get(Materials.Tin); - case 2 -> OrePrefixes.rotor.get(Materials.Bronze); - case 3 -> OrePrefixes.rotor.get(Materials.Steel); - case 4 -> OrePrefixes.rotor.get(Materials.StainlessSteel); - case 5 -> OrePrefixes.rotor.get(Materials.TungstenSteel); - case 6 -> OrePrefixes.rotor.get(ExternalMaterials.getRhodiumPlatedPalladium()); - case 7 -> OrePrefixes.rotor.get(Materials.Iridium); - default -> OrePrefixes.rotor.get(Materials.Osmium); - }; - - default -> throw new IllegalArgumentException("MISSING TIER MAPPING FOR: " + aRecipe[i] + " AT TIER " + this.mTier); - }; - // spotless:on - } - - if (!GT_ModHandler.addCraftingRecipe( - getStackForm(1), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.BUFFERED - | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - aRecipe)) { - throw new IllegalArgumentException("INVALID CRAFTING RECIPE FOR: " + getStackForm(1).getDisplayName()); - } - } - } - - /** - * Registers machine with single-line description, auto-scaled fluid tank, and sound specified by SoundResource. - */ - public GT_MetaTileEntity_BasicMachine_GT_Recipe(int aID, String aName, String aNameRegional, int aTier, - String aDescription, RecipeMap aRecipes, int aInputSlots, int aOutputSlots, boolean usesFluids, - SoundResource aSound, SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { - this( - aID, - aName, - aNameRegional, - aTier, - aDescription, - aRecipes, - aInputSlots, - aOutputSlots, - usesFluids ? getCapacityForTier(aTier) : 0, - aSound.resourceLocation, - aSpecialEffect, - aOverlays, - aRecipe); - } - - /** - * Registers machine with multi-line descriptions, auto-scaled fluid tank, and sound specified by SoundResource. - */ - public GT_MetaTileEntity_BasicMachine_GT_Recipe(int aID, String aName, String aNameRegional, int aTier, - String[] aDescription, RecipeMap aRecipes, int aInputSlots, int aOutputSlots, boolean usesFluids, - SoundResource aSound, SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { - this( - aID, - aName, - aNameRegional, - aTier, - aDescription, - aRecipes, - aInputSlots, - aOutputSlots, - usesFluids ? getCapacityForTier(aTier) : 0, - aSound.resourceLocation, - aSpecialEffect, - aOverlays, - aRecipe); - } - - /** - * Registers machine with single-line description, specific tank capacity, and sound specified by SoundResource. - */ - public GT_MetaTileEntity_BasicMachine_GT_Recipe(int aID, String aName, String aNameRegional, int aTier, - String aDescription, RecipeMap aRecipes, int aInputSlots, int aOutputSlots, int aTankCapacity, - SoundResource aSound, SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { - this( - aID, - aName, - aNameRegional, - aTier, - aDescription, - aRecipes, - aInputSlots, - aOutputSlots, - aTankCapacity, - aSound.resourceLocation, - aSpecialEffect, - aOverlays, - aRecipe); - } - - /** - * Registers machine with multi-line descriptions, specific tank capacity, and sound specified by SoundResource. - */ - public GT_MetaTileEntity_BasicMachine_GT_Recipe(int aID, String aName, String aNameRegional, int aTier, - String[] aDescription, RecipeMap aRecipes, int aInputSlots, int aOutputSlots, int aTankCapacity, - SoundResource aSound, SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { - this( - aID, - aName, - aNameRegional, - aTier, - aDescription, - aRecipes, - aInputSlots, - aOutputSlots, - aTankCapacity, - aSound.resourceLocation, - aSpecialEffect, - aOverlays, - aRecipe); - } - - /** - * For {@link #newMetaEntity}. - */ - public GT_MetaTileEntity_BasicMachine_GT_Recipe(String aName, int aTier, String[] aDescription, - RecipeMap aRecipes, int aInputSlots, int aOutputSlots, int aTankCapacity, int aAmperage, - ITexture[][][] aTextures, ResourceLocation aSound, SpecialEffects aSpecialEffect) { - super(aName, aTier, aAmperage, aDescription, aTextures, aInputSlots, aOutputSlots); - this.mTankCapacity = aTankCapacity; - this.mSpecialEffect = aSpecialEffect; - this.mRecipes = aRecipes; - this.mSoundResourceLocation = aSound; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_BasicMachine_GT_Recipe( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mRecipes, - this.mInputSlotCount, - this.mOutputItems == null ? 0 : this.mOutputItems.length, - this.mTankCapacity, - this.mAmperage, - this.mTextures, - this.mSoundResourceLocation, - this.mSpecialEffect).setProgressBarTexture(this.progressBarTexture) - .setRecipeCatalystPriority(this.recipeCatalystPriority); - } - - public GT_MetaTileEntity_BasicMachine_GT_Recipe setProgressBarTexture(FallbackableUITexture progressBarTexture) { - this.progressBarTexture = progressBarTexture; - return this; - } - - public GT_MetaTileEntity_BasicMachine_GT_Recipe setProgressBarTextureName(String name, UITexture fallback) { - return setProgressBarTexture(GT_UITextures.fallbackableProgressbar(name, fallback)); - } - - public GT_MetaTileEntity_BasicMachine_GT_Recipe setProgressBarTextureName(String name) { - return setProgressBarTextureName(name, GT_UITextures.PROGRESSBAR_ARROW); - } - - @Override - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (!super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack)) return false; - switch (this.mInputSlotCount) { - case 0 -> { - return false; - } - case 1 -> { - if (this.getFillableStack() == null) return this.getRecipeMap() - .containsInput(aStack); - else return this.getRecipeMap() - .findRecipe( - this.getBaseMetaTileEntity(), - this.mLastRecipe, - true, - true, - V[this.mTier], - new FluidStack[] { this.getFillableStack() }, - this.getSpecialSlot(), - appendSelectedCircuit(aStack)) - != null; - } - case 2 -> { - return ((this.getInputAt(0) != null && this.getInputAt(1) != null) - || (this.getInputAt(0) == null && this.getInputAt(1) == null ? this.getRecipeMap() - .containsInput(aStack) - : (this.getRecipeMap() - .containsInput(aStack) - && this.getRecipeMap() - .findRecipe( - this.getBaseMetaTileEntity(), - this.mLastRecipe, - true, - true, - V[this.mTier], - new FluidStack[] { this.getFillableStack() }, - this.getSpecialSlot(), - aIndex == this.getInputSlot() ? appendSelectedCircuit(aStack, this.getInputAt(1)) - : appendSelectedCircuit(this.getInputAt(0), aStack)) - != null))); - } - default -> { - int tID = this.getBaseMetaTileEntity() - .getMetaTileID(); - if (tID >= 211 && tID <= 218 || tID >= 1180 && tID <= 1187 || tID >= 10780 && tID <= 10786) { // assembler - // lv-iv; - // circuit - // asseblers - // lv - - // uv; - // assemblers - // luv-uev - if (GT_Utility.isStackValid(aStack)) for (int oreID : OreDictionary.getOreIDs(aStack)) { - if (OreDictionary.getOreName(oreID) - .startsWith("circuit")) return true; - } - } - return this.getRecipeMap() - .containsInput(aStack); - } - } - } - - @Override - public boolean allowSelectCircuit() { - return true; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isClientSide() && aBaseMetaTileEntity.isActive()) { - // noinspection SwitchStatementWithTooFewBranches - switch (this.mSpecialEffect) { - case TOP_SMOKE -> { - if (aBaseMetaTileEntity.getFrontFacing() != UP && aBaseMetaTileEntity.getCoverIDAtSide(UP) == 0 - && !aBaseMetaTileEntity.getOpacityAtSide(UP)) { - - new ParticleEventBuilder().setMotion(0.0D, 0.0D, 0.0D) - .setIdentifier(ParticleFX.SMOKE) - .setPosition( - aBaseMetaTileEntity.getXCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F, - aBaseMetaTileEntity.getYCoord() + 0.9F + XSTR_INSTANCE.nextFloat() * 0.2F, - aBaseMetaTileEntity.getZCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F) - .setWorld(aBaseMetaTileEntity.getWorld()) - .run(); - } - } - default -> {} - } - } - } - - /** - * Handles {@link Block#randomDisplayTick} driven Special Effects - * - * @param aBaseMetaTileEntity The entity that will handle the {@see Block#randomDisplayTick} - */ - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { - - // noinspection SwitchStatementWithTooFewBranches - switch (this.mSpecialEffect) { - case MAIN_RANDOM_SPARKS -> { - // Random Sparkles at main face - if (aBaseMetaTileEntity.isActive() && XSTR_INSTANCE.nextInt(3) == 0) { - - final ForgeDirection mainFacing = this.mMainFacing; - - if ((mainFacing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 - && aBaseMetaTileEntity.getCoverIDAtSide(mainFacing) == 0 - && !aBaseMetaTileEntity.getOpacityAtSide(mainFacing)) { - - final double oX = aBaseMetaTileEntity.getXCoord(); - final double oY = aBaseMetaTileEntity.getYCoord(); - final double oZ = aBaseMetaTileEntity.getZCoord(); - final double offset = 0.02D; - final double horizontal = 0.5D + XSTR_INSTANCE.nextFloat() * 8D / 16D - 4D / 16D; - - final double x, y, z, mX, mZ; - - y = oY + XSTR_INSTANCE.nextFloat() * 10D / 16D + 5D / 16D; - - if (mainFacing == ForgeDirection.WEST) { - x = oX - offset; - mX = -.05D; - z = oZ + horizontal; - mZ = 0D; - } else if (mainFacing == ForgeDirection.EAST) { - x = oX + offset; - mX = .05D; - z = oZ + horizontal; - mZ = 0D; - } else if (mainFacing == ForgeDirection.NORTH) { - x = oX + horizontal; - mX = 0D; - z = oZ - offset; - mZ = -.05D; - } else // if (frontFacing == ForgeDirection.SOUTH.ordinal()) - { - x = oX + horizontal; - mX = 0D; - z = oZ + offset; - mZ = .05D; - } - - ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(mX, 0, mZ) - .setPosition(x, y, z) - .setWorld(getBaseMetaTileEntity().getWorld()); - particleEventBuilder.setIdentifier(ParticleFX.LAVA) - .run(); - } - } - } - default -> {} - } - } - - @Override - public RecipeMap getRecipeMap() { - return this.mRecipes; - } - - @Override - public int getRecipeCatalystPriority() { - return recipeCatalystPriority; - } - - public GT_MetaTileEntity_BasicMachine_GT_Recipe setRecipeCatalystPriority(int recipeCatalystPriority) { - this.recipeCatalystPriority = recipeCatalystPriority; - return this; - } - - @Override - public int getCapacity() { - return this.mTankCapacity; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1 && this.mSoundResourceLocation != null - && GT_Utility.isStringValid(this.mSoundResourceLocation.getResourceDomain()) - && GT_Utility.isStringValid(this.mSoundResourceLocation.getResourcePath())) - GT_Utility.doSoundAtClient(this.mSoundResourceLocation, 100, 1.0F, aX, aY, aZ); - } - - @Override - public void startProcess() { - BaseMetaTileEntity myMetaTileEntity = ((BaseMetaTileEntity) this.getBaseMetaTileEntity()); - // Added to throttle sounds. To reduce lag, this is on the server side so BlockUpdate packets aren't sent. - if (myMetaTileEntity.mTickTimer > (myMetaTileEntity.mLastSoundTick + ticksBetweenSounds)) { - if (this.mSoundResourceLocation != null - && GT_Utility.isStringValid(this.mSoundResourceLocation.getResourceDomain()) - && GT_Utility.isStringValid(this.mSoundResourceLocation.getResourcePath())) - this.sendLoopStart((byte) 1); - // Does not have overflow protection, but they are longs. - myMetaTileEntity.mLastSoundTick = myMetaTileEntity.mTickTimer; - } - } - - @Override - protected BasicUIProperties getUIProperties() { - return super.getUIProperties().toBuilder() - .progressBarTexture(progressBarTexture) - .build(); - } - - public enum X { - PUMP, - WIRE, - WIRE4, - HULL, - PIPE, - GLASS, - PLATE, - MOTOR, - ROTOR, - SENSOR, - PISTON, - CIRCUIT, - EMITTER, - CONVEYOR, - ROBOT_ARM, - COIL_HEATING, - COIL_ELECTRIC, - STICK_MAGNETIC, - STICK_DISTILLATION, - BETTER_CIRCUIT, - FIELD_GENERATOR, - COIL_HEATING_DOUBLE, - STICK_ELECTROMAGNETIC - } - - /** - * Special Effects - */ - public enum SpecialEffects { - - NONE, - TOP_SMOKE, - MAIN_RANDOM_SPARKS; - - static final SpecialEffects[] VALID_SPECIAL_EFFECTS = { NONE, TOP_SMOKE, MAIN_RANDOM_SPARKS }; - - static SpecialEffects fromId(int id) { - return id >= 0 && id < VALID_SPECIAL_EFFECTS.length ? VALID_SPECIAL_EFFECTS[id] : NONE; - } - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Steel.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Steel.java deleted file mode 100644 index d6ae385430..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine_Steel.java +++ /dev/null @@ -1,150 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_TOP; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEEL_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEEL_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEEL_TOP; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.SteamVariant; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IGetTitleColor; -import gregtech.api.objects.overclockdescriber.OverclockDescriber; -import gregtech.api.objects.overclockdescriber.SteamOverclockDescriber; -import gregtech.api.render.TextureFactory; - -/** - * NEVER INCLUDE THIS FILE IN YOUR MOD!!! - *

- * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple - * Machine - */ -public abstract class GT_MetaTileEntity_BasicMachine_Steel extends GT_MetaTileEntity_BasicMachine_Bronze - implements IGetTitleColor { - - public GT_MetaTileEntity_BasicMachine_Steel(int aID, String aName, String aNameRegional, String aDescription, - int aInputSlotCount, int aOutputSlotCount, boolean aHighPressure) { - super(aID, aName, aNameRegional, aDescription, aInputSlotCount, aOutputSlotCount, aHighPressure); - } - - public GT_MetaTileEntity_BasicMachine_Steel(String aName, String[] aDescription, ITexture[][][] aTextures, - int aInputSlotCount, int aOutputSlotCount, boolean aHighPressure) { - super(aName, aDescription, aTextures, aInputSlotCount, aOutputSlotCount, aHighPressure); - } - - @Override - public OverclockDescriber createOverclockDescriber() { - return new SteamOverclockDescriber(SteamVariant.STEEL, 2, 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_TOP : MACHINE_STEEL_TOP, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_TOP : MACHINE_STEEL_TOP, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_BOTTOM : MACHINE_STEEL_BOTTOM, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_BOTTOM : MACHINE_STEEL_BOTTOM, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; - } - - @Override - public ITexture[] getBottomFacingPipeActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_BOTTOM : MACHINE_STEEL_BOTTOM, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getBottomFacingPipeInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_BOTTOM : MACHINE_STEEL_BOTTOM, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getTopFacingPipeActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_TOP : MACHINE_STEEL_TOP, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getTopFacingPipeInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_TOP : MACHINE_STEEL_TOP, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getSideFacingPipeActive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getSideFacingPipeInactive(byte aColor) { - return new ITexture[] { TextureFactory.of( - isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, - Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public SteamVariant getSteamVariant() { - return SteamVariant.STEEL; - } - - @Override - public int getTitleColor() { - return COLOR_TITLE_WHITE.get(); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java deleted file mode 100644 index 25fc7e7855..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicTank.java +++ /dev/null @@ -1,331 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; - -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.fluid.FluidStackTank; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Utility; - -/** - * NEVER INCLUDE THIS FILE IN YOUR MOD!!! - *

- * This is the main construct for my generic Tanks. Filling and emptying behavior have to be implemented manually - */ -public abstract class GT_MetaTileEntity_BasicTank extends GT_MetaTileEntity_TieredMachineBlock - implements IAddUIWidgets { - - public FluidStack mFluid; - // Due to class initializing order, getCapacity might not work properly at this time. - // So we pass supplier instead of current value here. - protected final FluidStackTank fluidTank = new FluidStackTank( - () -> mFluid, - fluidStack -> mFluid = fluidStack, - this::getRealCapacity); - - /** - * @param aInvSlotCount should be 3 - */ - public GT_MetaTileEntity_BasicTank(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicTank(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String[] aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicTank(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicTank(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex != getStackDisplaySlot(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - if (mFluid != null) aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mFluid = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid")); - } - - public abstract boolean doesFillContainers(); - - public abstract boolean doesEmptyContainers(); - - public abstract boolean canTankBeFilled(); - - public abstract boolean canTankBeEmptied(); - - public abstract boolean displaysItemStack(); - - /** - * @return If fluid amount is shown on FluidDisplayItem - */ - public abstract boolean displaysStackSize(); - - public int getInputSlot() { - return 0; - } - - public int getOutputSlot() { - return 1; - } - - public int getStackDisplaySlot() { - return 2; - } - - public boolean isFluidInputAllowed(FluidStack aFluid) { - return true; - } - - public boolean isFluidChangingAllowed() { - return true; - } - - public FluidStack getFillableStack() { - return mFluid; - } - - public FluidStack setFillableStack(FluidStack aFluid) { - mFluid = aFluid; - return mFluid; - } - - /** - * If you override this and change the field returned, be sure to override {@link #isDrainableStackSeparate()} as - * well! - */ - public FluidStack getDrainableStack() { - return mFluid; - } - - public FluidStack setDrainableStack(FluidStack aFluid) { - mFluid = aFluid; - return mFluid; - } - - public boolean isDrainableStackSeparate() { - return false; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (isFluidChangingAllowed() && getFillableStack() != null && getFillableStack().amount <= 0) { - setFillableStack(null); - } - - final int inputSlot = getInputSlot(); - - if (doesEmptyContainers()) { - FluidStack tFluid = GT_Utility.getFluidForFilledItem(mInventory[inputSlot], true); - if (tFluid != null && isFluidInputAllowed(tFluid)) { - if (getFillableStack() == null) { - if (isFluidInputAllowed(tFluid) && tFluid.amount <= getCapacity()) { - if (aBaseMetaTileEntity.addStackToSlot( - getOutputSlot(), - GT_Utility.getContainerForFilledItem(mInventory[inputSlot], true), - 1)) { - setFillableStack(tFluid.copy()); - this.onEmptyingContainerWhenEmpty(); - aBaseMetaTileEntity.decrStackSize(inputSlot, 1); - } - } - } else { - if (tFluid.isFluidEqual(getFillableStack()) - && ((long) tFluid.amount + getFillableStack().amount) <= (long) getCapacity()) { - if (aBaseMetaTileEntity.addStackToSlot( - getOutputSlot(), - GT_Utility.getContainerForFilledItem(mInventory[inputSlot], true), - 1)) { - getFillableStack().amount += tFluid.amount; - aBaseMetaTileEntity.decrStackSize(inputSlot, 1); - } - } - } - } - } - - if (doesFillContainers()) { - ItemStack tOutput = GT_Utility - .fillFluidContainer(getDrainableStack(), mInventory[inputSlot], false, true); - if (tOutput != null && aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), tOutput, 1)) { - FluidStack tFluid = GT_Utility.getFluidForFilledItem(tOutput, true); - aBaseMetaTileEntity.decrStackSize(inputSlot, 1); - if (tFluid != null) getDrainableStack().amount -= tFluid.amount; - if (getDrainableStack().amount <= 0 && isFluidChangingAllowed()) setDrainableStack(null); - } - } - } - } - - @Override - public FluidStack getFluid() { - return getDrainableStack(); - } - - @Override - public int getFluidAmount() { - return getDrainableStack() != null ? getDrainableStack().amount : 0; - } - - @Override - public int fill(FluidStack aFluid, boolean doFill) { - if (aFluid == null || aFluid.getFluid() - .getID() <= 0 || aFluid.amount <= 0 || !canTankBeFilled() || !isFluidInputAllowed(aFluid)) return 0; - - if (getFillableStack() == null || getFillableStack().getFluid() - .getID() <= 0) { - if (aFluid.amount <= getCapacity()) { - if (doFill) { - setFillableStack(aFluid.copy()); - getBaseMetaTileEntity().markDirty(); - } - return aFluid.amount; - } - if (doFill) { - setFillableStack(aFluid.copy()); - getFillableStack().amount = getCapacity(); - getBaseMetaTileEntity().markDirty(); - } - return getCapacity(); - } - - if (!getFillableStack().isFluidEqual(aFluid)) return 0; - - int space = getCapacity() - getFillableStack().amount; - if (aFluid.amount <= space) { - if (doFill) { - getFillableStack().amount += aFluid.amount; - getBaseMetaTileEntity().markDirty(); - } - return aFluid.amount; - } - if (doFill) getFillableStack().amount = getCapacity(); - return space; - } - - @Override - public FluidStack drain(int maxDrain, boolean doDrain) { - if (getDrainableStack() == null || !canTankBeEmptied()) return null; - if (getDrainableStack().amount <= 0 && isFluidChangingAllowed()) { - setDrainableStack(null); - getBaseMetaTileEntity().markDirty(); - return null; - } - - int used = maxDrain; - if (getDrainableStack().amount < used) used = getDrainableStack().amount; - - if (doDrain) { - getDrainableStack().amount -= used; - getBaseMetaTileEntity().markDirty(); - } - - FluidStack drained = getDrainableStack().copy(); - drained.amount = used; - - if (getDrainableStack().amount <= 0 && isFluidChangingAllowed()) { - setDrainableStack(null); - getBaseMetaTileEntity().markDirty(); - } - - return drained; - } - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection side) { - if (getCapacity() <= 0 && !getBaseMetaTileEntity().hasSteamEngineUpgrade()) return new FluidTankInfo[] {}; - if (isDrainableStackSeparate()) { - return new FluidTankInfo[] { new FluidTankInfo(getFillableStack(), getCapacity()), - new FluidTankInfo(getDrainableStack(), getCapacity()) }; - } else { - return new FluidTankInfo[] { new FluidTankInfo(this) }; - } - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return aIndex == getOutputSlot(); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return aIndex == getInputSlot(); - } - - protected void onEmptyingContainerWhenEmpty() { - // Do nothing - } - - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(7, 16) - .setSize(71, 45)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_GAUGE) - .setPos(79, 34) - .setSize(18, 18)) - .widget( - new SlotWidget(inventoryHandler, getInputSlot()) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_IN) - .setPos(79, 16)) - .widget( - new SlotWidget(inventoryHandler, getOutputSlot()).setAccess(true, false) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_OUT) - .setPos(79, 52)) - .widget( - createFluidSlot().setBackground(GT_UITextures.TRANSPARENT) - .setPos(58, 41)) - .widget( - new TextWidget("Liquid Amount").setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(10, 20)) - .widget( - new TextWidget().setStringSupplier(() -> numberFormat.format(mFluid != null ? mFluid.amount : 0)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(10, 30)); - } - - protected FluidSlotWidget createFluidSlot() { - return new FluidSlotWidget(fluidTank); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java deleted file mode 100644 index ef64d99db8..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Buffer.java +++ /dev/null @@ -1,563 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Textures.BlockIcons.ARROW_DOWN; -import static gregtech.api.enums.Textures.BlockIcons.ARROW_DOWN_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.ARROW_LEFT; -import static gregtech.api.enums.Textures.BlockIcons.ARROW_LEFT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.ARROW_RIGHT; -import static gregtech.api.enums.Textures.BlockIcons.ARROW_RIGHT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.ARROW_UP; -import static gregtech.api.enums.Textures.BlockIcons.ARROW_UP_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Supplier; -import java.util.stream.IntStream; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; - -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_TooltipDataCache; -import gregtech.api.util.GT_Utility; - -public abstract class GT_MetaTileEntity_Buffer extends GT_MetaTileEntity_TieredMachineBlock implements IAddUIWidgets { - - private static final int OUTPUT_INDEX = 0; - private static final int ARROW_RIGHT_INDEX = 1; - private static final int ARROW_DOWN_INDEX = 2; - private static final int ARROW_LEFT_INDEX = 3; - private static final int ARROW_UP_INDEX = 4; - private static final int FRONT_INDEX = 5; - - private static final String EMIT_ENERGY_TOOLTIP = "GT5U.machines.emit_energy.tooltip"; - private static final String EMIT_REDSTONE_IF_FULL_TOOLTIP = "GT5U.machines.emit_redstone_if_full.tooltip"; - private static final String INVERT_REDSTONE_TOOLTIP = "GT5U.machines.invert_redstone.tooltip"; - private static final String STOCKING_MODE_TOOLTIP = "GT5U.machines.buffer_stocking_mode.tooltip"; - private static final String SORTING_MODE_TOOLTIP = "GT5U.machines.sorting_mode.tooltip"; - private static final int BUTTON_SIZE = 18; - - public int mMaxStackSize = 64; - public static int MAX = 8; - public boolean bOutput = false, bRedstoneIfFull = false, bInvert = false, bStockingMode = false, - bSortStacks = false; - public int mSuccess = 0, mTargetStackSize = 0; - private int uiButtonCount = 0; - - public GT_MetaTileEntity_Buffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String aDescription) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); - } - - public GT_MetaTileEntity_Buffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String[] aDescription) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); - } - - public GT_MetaTileEntity_Buffer(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_Buffer(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[ForgeDirection.VALID_DIRECTIONS.length][17][]; - ITexture tIcon = getOverlayIcon(); - ITexture tOut = TextureFactory.of(OVERLAY_PIPE_OUT); - ITexture tUp = TextureFactory.of( - TextureFactory.of(ARROW_UP), - TextureFactory.builder() - .addIcon(ARROW_UP_GLOW) - .glow() - .build()); - ITexture tDown = TextureFactory.of( - TextureFactory.of(ARROW_DOWN), - TextureFactory.builder() - .addIcon(ARROW_DOWN_GLOW) - .glow() - .build()); - ITexture tLeft = TextureFactory.of( - TextureFactory.of(ARROW_LEFT), - TextureFactory.builder() - .addIcon(ARROW_LEFT_GLOW) - .glow() - .build()); - ITexture tRight = TextureFactory.of( - TextureFactory.of(ARROW_RIGHT), - TextureFactory.builder() - .addIcon(ARROW_RIGHT_GLOW) - .glow() - .build()); - for (int i = 0; i < rTextures[0].length; i++) { - rTextures[OUTPUT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tOut }; - rTextures[ARROW_RIGHT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tRight, tIcon }; - rTextures[ARROW_DOWN_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tDown, tIcon }; - rTextures[ARROW_LEFT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tLeft, tIcon }; - rTextures[ARROW_UP_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tUp, tIcon }; - rTextures[FRONT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tIcon }; - } - return rTextures; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - colorIndex = colorIndex + 1; - if (sideDirection == facingDirection) return mTextures[FRONT_INDEX][colorIndex]; - if (sideDirection.getOpposite() == facingDirection) return mTextures[OUTPUT_INDEX][colorIndex]; - switch (facingDirection) { - case DOWN -> { - return mTextures[ARROW_UP_INDEX][colorIndex]; // ARROW_UP - } - case UP -> { - return mTextures[ARROW_DOWN_INDEX][colorIndex]; // ARROW_DOWN - } - case NORTH -> { - switch (sideDirection) { - case DOWN, UP -> { - return mTextures[ARROW_DOWN_INDEX][colorIndex]; // ARROW_DOWN - } - case WEST -> { - return mTextures[ARROW_RIGHT_INDEX][colorIndex]; // ARROW_RIGHT - } - case EAST -> { - return mTextures[ARROW_LEFT_INDEX][colorIndex]; // ARROW_LEFT - } - default -> {} - } - } - case SOUTH -> { - switch (sideDirection) { - case DOWN, UP -> { - return mTextures[ARROW_UP_INDEX][colorIndex]; // ARROW_UP - } - case WEST -> { - return mTextures[ARROW_LEFT_INDEX][colorIndex]; // ARROW_LEFT - } - case EAST -> { - return mTextures[ARROW_RIGHT_INDEX][colorIndex]; // ARROW_RIGHT - } - default -> {} - } - } - case WEST -> { - switch (sideDirection) { - case UP, SOUTH -> { - return mTextures[ARROW_RIGHT_INDEX][colorIndex]; // ARROW_RIGHT - } - case DOWN, NORTH -> { - return mTextures[ARROW_LEFT_INDEX][colorIndex]; // ARROW_LEFT - } - default -> {} - } - } - case EAST -> { - switch (sideDirection) { - case UP, SOUTH -> { - return mTextures[ARROW_LEFT_INDEX][colorIndex]; // ARROW_LEFT - } - case DOWN, NORTH -> { - return mTextures[ARROW_RIGHT_INDEX][colorIndex]; // ARROW_RIGHT - } - default -> {} - } - } - default -> {} - } - return mTextures[FRONT_INDEX][colorIndex]; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex < mInventory.length - 1; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return !isOutputFacing(side); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return getBaseMetaTileEntity().getBackFacing() == side; - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 512L; - } - - @Override - public long maxEUStore() { - return 512L + V[mTier] * 50L; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxEUOutput() { - // Return full value if we're an item and don't exist in the world for tooltip purposes - return getBaseMetaTileEntity().getWorld() == null || bOutput ? V[mTier] : 0L; - } - - @Override - public long maxAmperesIn() { - return 2; - } - - @Override - public long maxAmperesOut() { - return 2; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - public abstract ITexture getOverlayIcon(); - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setBoolean("bInvert", bInvert); - aNBT.setBoolean("bOutput", bOutput); - aNBT.setBoolean("bRedstoneIfFull", bRedstoneIfFull); - aNBT.setBoolean("bStockingMode", bStockingMode); - aNBT.setInteger("mTargetStackSize", mTargetStackSize); - aNBT.setBoolean("bSortStacks", bSortStacks); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - bInvert = aNBT.getBoolean("bInvert"); - bOutput = aNBT.getBoolean("bOutput"); - bRedstoneIfFull = aNBT.getBoolean("bRedstoneIfFull"); - bSortStacks = aNBT.getBoolean("bSortStacks"); - bStockingMode = aNBT.getBoolean("bStockingMode"); - mTargetStackSize = aNBT.getInteger("mTargetStackSize"); - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - super.setItemNBT(aNBT); - if (mTargetStackSize > 0) aNBT.setInteger("mTargetStackSize", mTargetStackSize); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getBackFacing()) { - - mTargetStackSize = (byte) ((mTargetStackSize + (aPlayer.isSneaking() ? -1 : 1)) % 65); - if (mTargetStackSize < 0) { - mTargetStackSize = mMaxStackSize; - } - if (mTargetStackSize == 0) { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("098", "Do not regulate Item Stack Size")); - } else { - GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("099", "Regulate Item Stack Size to: ") + mTargetStackSize); - } - } - } - - @Override - public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer, - float aX, float aY, float aZ) { - wrenchingSide = wrenchingSide.getOpposite(); - if (getBaseMetaTileEntity().isValidFacing(wrenchingSide)) { - getBaseMetaTileEntity().setFrontFacing(wrenchingSide); - return true; - } - return false; - } - - protected void handleRedstoneOutput(IGregTechTileEntity aBaseMetaTileEntity) { - int redstoneOutput = getRedstoneOutput(); - Arrays.stream(ForgeDirection.VALID_DIRECTIONS) - .forEach(side -> aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) redstoneOutput)); - } - - protected int getRedstoneOutput() { - return (!bRedstoneIfFull || (bInvert ^ hasEmptySlots())) ? 0 : 15; - } - - private boolean hasEmptySlots() { - return IntStream.range(0, mInventory.length) - .anyMatch(i -> isValidSlot(i) && mInventory[i] == null); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (aBaseMetaTileEntity.isAllowedToWork() && aBaseMetaTileEntity.isServerSide() - && (aBaseMetaTileEntity.hasWorkJustBeenEnabled() || aBaseMetaTileEntity.hasInventoryBeenModified() - || aTimer % 200 == 0 - || mSuccess > 0)) { - mSuccess--; - updateSlots(); - moveItems(aBaseMetaTileEntity, aTimer); - handleRedstoneOutput(aBaseMetaTileEntity); - } - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) - aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 0); - } - - protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - moveItems(aBaseMetaTileEntity, aTimer, 1); - } - - protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long ignoredTimer, int stacks) { - int tCost; - if (bStockingMode) tCost = GT_Utility.moveMultipleItemStacks( - aBaseMetaTileEntity, - aBaseMetaTileEntity.getTileEntityAtSide(aBaseMetaTileEntity.getBackFacing()), - aBaseMetaTileEntity.getBackFacing(), - aBaseMetaTileEntity.getFrontFacing(), - null, - false, - mTargetStackSize == 0 ? 64 : (byte) mTargetStackSize, - mTargetStackSize == 0 ? 1 : (byte) mTargetStackSize, - (byte) 64, - (byte) 1, - stacks); - else tCost = GT_Utility.moveMultipleItemStacks( - aBaseMetaTileEntity, - aBaseMetaTileEntity.getTileEntityAtSide(aBaseMetaTileEntity.getBackFacing()), - aBaseMetaTileEntity.getBackFacing(), - aBaseMetaTileEntity.getFrontFacing(), - null, - false, - (byte) 64, - (byte) 1, - mTargetStackSize == 0 ? 64 : (byte) mTargetStackSize, - mTargetStackSize == 0 ? 1 : (byte) mTargetStackSize, - stacks); - - if (tCost > 0 || aBaseMetaTileEntity.hasInventoryBeenModified()) { - mSuccess = 50; - } - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return true; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side != aBaseMetaTileEntity.getBackFacing(); - } - - @Override - public boolean allowGeneralRedstoneOutput() { - return true; - } - - public void updateSlots() { - for (int i = 0; i < mInventory.length; i++) - if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null; - if (bSortStacks) fillStacksIntoFirstSlots(); - } - - protected void fillStacksIntoFirstSlots() { - HashMap slots = new HashMap<>(mInventory.length); - HashMap stacks = new HashMap<>(mInventory.length); - List order = new ArrayList<>(mInventory.length); - List validSlots = new ArrayList<>(mInventory.length); - for (int i = 0; i < mInventory.length - 1; i++) { - if (!isValidSlot(i)) continue; - validSlots.add(i); - ItemStack s = mInventory[i]; - if (s == null) continue; - GT_Utility.ItemId sID = GT_Utility.ItemId.createNoCopy(s); - slots.merge(sID, s.stackSize, Integer::sum); - if (!stacks.containsKey(sID)) stacks.put(sID, s); - order.add(sID); - mInventory[i] = null; - } - int slotindex = 0; - for (GT_Utility.ItemId sID : order) { - int toSet = slots.get(sID); - if (toSet == 0) continue; - int slot = validSlots.get(slotindex); - slotindex++; - mInventory[slot] = stacks.get(sID) - .copy(); - toSet = Math.min(toSet, mInventory[slot].getMaxStackSize()); - mInventory[slot].stackSize = toSet; - slots.merge(sID, toSet, (a, b) -> a - b); - } - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, - EntityPlayer entityPlayer, float aX, float aY, float aZ) { - if (entityPlayer.isSneaking()) { - // I was so proud of all this but I literally just copied code from OutputBus - bSortStacks = !bSortStacks; - GT_Utility.sendChatToPlayer( - entityPlayer, - GT_Utility.trans("200", "Sort mode: ") - + (bSortStacks ? GT_Utility.trans("088", "Enabled") : GT_Utility.trans("087", "Disabled"))); - return true; - } - return super.onSolderingToolRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ); - } - - protected void addEmitEnergyButton(ModularWindow.Builder builder) { - builder.widget( - createToggleButton( - () -> bOutput, - val -> bOutput = val, - GT_UITextures.OVERLAY_BUTTON_EMIT_ENERGY, - this::getEmitEnergyButtonTooltip)); - } - - private GT_TooltipDataCache.TooltipData getEmitEnergyButtonTooltip() { - return mTooltipCache.getData( - EMIT_ENERGY_TOOLTIP, - EnumChatFormatting.GREEN + GT_Utility.formatNumbers(V[mTier]) - + " (" - + GT_Utility.getColoredTierNameFromTier(mTier) - + EnumChatFormatting.GREEN - + ")" - + EnumChatFormatting.GRAY, - maxAmperesOut()); - } - - protected void addEmitRedstoneIfFullButton(ModularWindow.Builder builder) { - builder.widget( - createToggleButton( - () -> bRedstoneIfFull, - val -> bRedstoneIfFull = val, - GT_UITextures.OVERLAY_BUTTON_EMIT_REDSTONE, - this::getEmitRedstoneIfFullButtonTooltip).setUpdateTooltipEveryTick(true)); - } - - private GT_TooltipDataCache.TooltipData getEmitRedstoneIfFullButtonTooltip() { - return mTooltipCache.getUncachedTooltipData( - EMIT_REDSTONE_IF_FULL_TOOLTIP, - StatCollector.translateToLocal(hasEmptySlots() ? "gui.yes" : "gui.no"), - getRedstoneOutput()); - } - - protected void addInvertRedstoneButton(ModularWindow.Builder builder) { - builder.widget( - createToggleButton( - () -> bInvert, - val -> bInvert = val, - GT_UITextures.OVERLAY_BUTTON_INVERT_REDSTONE, - () -> mTooltipCache.getData(INVERT_REDSTONE_TOOLTIP))); - } - - protected void addStockingModeButton(ModularWindow.Builder builder) { - builder.widget( - createToggleButton( - () -> bStockingMode, - val -> bStockingMode = val, - GT_UITextures.OVERLAY_BUTTON_STOCKING_MODE, - () -> mTooltipCache.getData(STOCKING_MODE_TOOLTIP))); - } - - protected void addSortStacksButton(ModularWindow.Builder builder) { - builder.widget( - createToggleButton( - () -> bSortStacks, - val -> bSortStacks = val, - GT_UITextures.OVERLAY_BUTTON_SORTING_MODE, - () -> mTooltipCache.getData(SORTING_MODE_TOOLTIP))); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - buildContext.addCloseListener(() -> uiButtonCount = 0); - addEmitEnergyButton(builder); - } - - protected Widget createToggleButton(Supplier getter, Consumer setter, UITexture picture, - Supplier tooltipDataSupplier) { - return new CycleButtonWidget().setToggle(getter, setter) - .setStaticTexture(picture) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(7 + (uiButtonCount++ * BUTTON_SIZE), 62) - .setSize(BUTTON_SIZE, BUTTON_SIZE) - .setGTTooltip(tooltipDataSupplier); - } - - protected void addInventorySlots(ModularWindow.Builder builder) { - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 9) - .endAtSlot(26) - .build() - .setPos(7, 4)); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_CubicMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_CubicMultiBlockBase.java deleted file mode 100644 index efb91e3a26..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_CubicMultiBlockBase.java +++ /dev/null @@ -1,141 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; - -import java.util.List; - -import net.minecraft.item.ItemStack; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_StructureUtility; - -/** - * A simple 3x3x3 hollow cubic multiblock, that can be arbitrarily rotated, made of a single type of machine casing and - * accepts hatches everywhere. Controller will be placed in front center of the structure. - *

- * Note: You cannot use different casing for the same Class. Make a new subclass for it. You also should not change the - * casing dynamically, i.e. it should be a dumb method returning some sort of constant. - *

- * Implementation tips: 1. To restrict hatches, override {@link #addDynamoToMachineList(IGregTechTileEntity, int)} and - * its cousins instead of overriding the whole {@link #getStructureDefinition()} or change - * {@link #checkHatches(IGregTechTileEntity, ItemStack)}. The former is a total overkill, while the later cannot stop - * the structure check early. 2. To limit rotation, override {@link #getInitialAlignmentLimits()} - * - * @param - */ -public abstract class GT_MetaTileEntity_CubicMultiBlockBase> - extends GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - protected static final String STRUCTURE_PIECE_MAIN = "main"; - protected static final ClassValue>> STRUCTURE_DEFINITION = new ClassValue<>() { - - @Override - protected IStructureDefinition> computeValue(Class type) { - return StructureDefinition.>builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { "hhh", "hhh", "hhh" }, { "h~h", "h-h", "hhh" }, { "hhh", "hhh", "hhh" }, })) - .addElement( - 'h', - ofChain( - lazy( - t -> GT_StructureUtility.>buildHatchAdder() - .atLeastList(t.getAllowedHatches()) - .casingIndex(t.getHatchTextureIndex()) - .dot(1) - .build()), - onElementPass( - GT_MetaTileEntity_CubicMultiBlockBase::onCorrectCasingAdded, - lazy(GT_MetaTileEntity_CubicMultiBlockBase::getCasingElement)))) - .build(); - } - }; - private int mCasingAmount = 0; - - protected GT_MetaTileEntity_CubicMultiBlockBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - protected GT_MetaTileEntity_CubicMultiBlockBase(String aName) { - super(aName); - } - - /** - * Create a simple 3x3x3 hollow cubic structure made of a single type of machine casing and accepts hatches - * everywhere. - *

- * The created definition contains a single piece named {@link #STRUCTURE_PIECE_MAIN}. - */ - @Override - @SuppressWarnings("unchecked") - public IStructureDefinition getStructureDefinition() { - return (IStructureDefinition) STRUCTURE_DEFINITION.get(getClass()); - } - - @Override - public void construct(ItemStack aStack, boolean aHintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasingAmount = 0; - return checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 0) && mCasingAmount >= getRequiredCasingCount() - && checkHatches(aBaseMetaTileEntity, aStack); - } - - /** - * Called by {@link #checkMachine(IGregTechTileEntity, ItemStack)} to check if all required hatches are present. - *

- * Default implementation requires EXACTLY ONE maintenance hatch to be present, and ignore all other conditions. - * - * @param aBaseMetaTileEntity the tile entity of self - * @param aStack The item stack inside the controller - * @return true if the test passes, false otherwise - */ - protected boolean checkHatches(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return mMaintenanceHatches.size() == 1; - } - - protected abstract IStructureElement> getCasingElement(); - - protected List>> getAllowedHatches() { - return ImmutableList.of(InputHatch, OutputHatch, InputBus, OutputBus, Muffler, Maintenance, Energy); - } - - /** - * The hatch's texture index. - */ - protected abstract int getHatchTextureIndex(); - - protected abstract int getRequiredCasingCount(); - - protected void onCorrectCasingAdded() { - mCasingAmount++; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java deleted file mode 100644 index 15ce78fae3..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java +++ /dev/null @@ -1,318 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.IAlignment; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; -import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; -import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; -import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; - -import cpw.mods.fml.common.network.NetworkRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; - -/** - * Enhanced multiblock base class, featuring following improvement over {@link GT_MetaTileEntity_MultiBlockBase} - *

- * 1. TecTech style declarative structure check utilizing StructureLib. 2. Arbitrarily rotating the whole structure, if - * allowed to. - * - * @param type of this - */ -public abstract class GT_MetaTileEntity_EnhancedMultiBlockBase> - extends GT_MetaTileEntity_TooltipMultiBlockBase implements IAlignment, IConstructable { - - private ExtendedFacing mExtendedFacing = ExtendedFacing.DEFAULT; - private IAlignmentLimits mLimits = getInitialAlignmentLimits(); - - protected GT_MetaTileEntity_EnhancedMultiBlockBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - protected GT_MetaTileEntity_EnhancedMultiBlockBase(String aName) { - super(aName); - } - - @Override - public ExtendedFacing getExtendedFacing() { - return mExtendedFacing; - } - - @Override - public void setExtendedFacing(ExtendedFacing newExtendedFacing) { - if (mExtendedFacing != newExtendedFacing) { - if (mMachine) stopMachine(ShutDownReasonRegistry.STRUCTURE_INCOMPLETE); - mExtendedFacing = newExtendedFacing; - final IGregTechTileEntity base = getBaseMetaTileEntity(); - mMachine = false; - mUpdated = false; - mUpdate = 50; - if (getBaseMetaTileEntity().isServerSide() - && !GregTech_API.isDummyWorld(getBaseMetaTileEntity().getWorld())) { - StructureLibAPI.sendAlignment( - (IAlignmentProvider) base, - new NetworkRegistry.TargetPoint( - base.getWorld().provider.dimensionId, - base.getXCoord(), - base.getYCoord(), - base.getZCoord(), - 512)); - } else { - base.issueTextureUpdate(); - } - } - } - - @Override - public final boolean isFacingValid(ForgeDirection facing) { - return canSetToDirectionAny(facing); - } - - @Override - public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer, - float aX, float aY, float aZ) { - if (wrenchingSide != getBaseMetaTileEntity().getFrontFacing()) - return super.onWrenchRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ); - if (entityPlayer.isSneaking()) { - if (isFlipChangeAllowed()) { - toolSetFlip(getFlip().isHorizontallyFlipped() ? Flip.NONE : Flip.HORIZONTAL); - } else { - return false; - } - } else { - if (isRotationChangeAllowed()) { - toolSetRotation(null); - } else { - return false; - } - } - return true; - } - - @Override - public void onFacingChange() { - toolSetDirection(getBaseMetaTileEntity().getFrontFacing()); - } - - @Override - public IAlignmentLimits getAlignmentLimits() { - return mLimits; - } - - protected void setAlignmentLimits(IAlignmentLimits mLimits) { - this.mLimits = mLimits; - } - - /** - * Due to limitation of Java type system, you might need to do an unchecked cast. HOWEVER, the returned - * IStructureDefinition is expected to be evaluated against current instance only, and should not be used against - * other instances, even for those of the same class. - */ - public abstract IStructureDefinition getStructureDefinition(); - - protected abstract GT_Multiblock_Tooltip_Builder createTooltip(); - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return getTooltip().getStructureHint(); - } - - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> !f.isVerticallyFliped(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setByte( - "eRotation", - (byte) mExtendedFacing.getRotation() - .getIndex()); - aNBT.setByte( - "eFlip", - (byte) mExtendedFacing.getFlip() - .getIndex()); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mExtendedFacing = ExtendedFacing.of( - getBaseMetaTileEntity().getFrontFacing(), - Rotation.byIndex(aNBT.getByte("eRotation")), - Flip.byIndex(aNBT.getByte("eFlip"))); - if (!getAlignmentLimits().isNewExtendedFacingValid(mExtendedFacing)) { - mExtendedFacing = getCorrectedAlignment(mExtendedFacing); - } - } - - /** - * When an old {@link ExtendedFacing} is loaded upon MTE deserialization, and the loaded facing cannot pass test of - * current {@link #getAlignmentLimits()}, this method will be called to retrieve a corrected version. This method - * is currently only intended to be used as a mean to migrate alignment limits, so if you never change the alignment - * limit then you can probably just use the default implementation. - * - * The returned new facing must be able to pass the test of {@link #isNewExtendedFacingValid(ExtendedFacing)} - */ - protected ExtendedFacing getCorrectedAlignment(ExtendedFacing aOldFacing) { - if (isNewExtendedFacingValid(ExtendedFacing.DEFAULT)) { - return ExtendedFacing.DEFAULT; - } - for (ExtendedFacing facing : ExtendedFacing.VALUES) { - if (facing.getFlip() - .isVerticallyFliped()) { - continue; - } - if (isNewExtendedFacingValid(facing)) { - return facing; - } - } - throw new AssertionError("No ExtendedFacing can pass the test of isNewExtendedFacingValid"); - } - - @SuppressWarnings("unchecked") - private IStructureDefinition> getCastedStructureDefinition() { - return (IStructureDefinition>) getStructureDefinition(); - } - - /** - * Explanation of the world coordinate these offset means: - *

- * Imagine you stand in front of the controller, with controller facing towards you not rotated or flipped. - *

- * The horizontalOffset would be the number of blocks on the left side of the controller, not counting controller - * itself. The verticalOffset would be the number of blocks on the top side of the controller, not counting - * controller itself. The depthOffset would be the number of blocks between you and controller, not counting - * controller itself. - *

- * All these offsets can be negative. - */ - protected final boolean checkPiece(String piece, int horizontalOffset, int verticalOffset, int depthOffset) { - final IGregTechTileEntity tTile = getBaseMetaTileEntity(); - return getCastedStructureDefinition().check( - this, - piece, - tTile.getWorld(), - getExtendedFacing(), - tTile.getXCoord(), - tTile.getYCoord(), - tTile.getZCoord(), - horizontalOffset, - verticalOffset, - depthOffset, - !mMachine); - } - - protected final boolean buildPiece(String piece, ItemStack trigger, boolean hintOnly, int horizontalOffset, - int verticalOffset, int depthOffset) { - final IGregTechTileEntity tTile = getBaseMetaTileEntity(); - return getCastedStructureDefinition().buildOrHints( - this, - trigger, - piece, - tTile.getWorld(), - getExtendedFacing(), - tTile.getXCoord(), - tTile.getYCoord(), - tTile.getZCoord(), - horizontalOffset, - verticalOffset, - depthOffset, - hintOnly); - } - - @Deprecated - protected final int survivialBuildPiece(String piece, ItemStack trigger, int horizontalOffset, int verticalOffset, - int depthOffset, int elementsBudget, IItemSource source, EntityPlayerMP actor, boolean check) { - final IGregTechTileEntity tTile = getBaseMetaTileEntity(); - return getCastedStructureDefinition().survivalBuild( - this, - trigger, - piece, - tTile.getWorld(), - getExtendedFacing(), - tTile.getXCoord(), - tTile.getYCoord(), - tTile.getZCoord(), - horizontalOffset, - verticalOffset, - depthOffset, - elementsBudget, - source, - actor, - check); - } - - protected final int survivialBuildPiece(String piece, ItemStack trigger, int horizontalOffset, int verticalOffset, - int depthOffset, int elementsBudget, ISurvivalBuildEnvironment env, boolean check) { - final IGregTechTileEntity tTile = getBaseMetaTileEntity(); - return getCastedStructureDefinition().survivalBuild( - this, - trigger, - piece, - tTile.getWorld(), - getExtendedFacing(), - tTile.getXCoord(), - tTile.getYCoord(), - tTile.getZCoord(), - horizontalOffset, - verticalOffset, - depthOffset, - elementsBudget, - env, - check); - } - - @Deprecated - protected final int survivialBuildPiece(String piece, ItemStack trigger, int horizontalOffset, int verticalOffset, - int depthOffset, int elementsBudget, IItemSource source, EntityPlayerMP actor, boolean check, - boolean checkIfPlaced) { - int built = survivialBuildPiece( - piece, - trigger, - horizontalOffset, - verticalOffset, - depthOffset, - elementsBudget, - source, - actor, - check); - if (checkIfPlaced && built > 0) checkStructure(true, getBaseMetaTileEntity()); - return built; - } - - protected final int survivialBuildPiece(String piece, ItemStack trigger, int horizontalOffset, int verticalOffset, - int depthOffset, int elementsBudget, ISurvivalBuildEnvironment env, boolean check, boolean checkIfPlaced) { - int built = survivialBuildPiece( - piece, - trigger, - horizontalOffset, - verticalOffset, - depthOffset, - elementsBudget, - env, - check); - if (checkIfPlaced && built > 0) checkStructure(true, getBaseMetaTileEntity()); - return built; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - if (aBaseMetaTileEntity.isClientSide()) - StructureLibAPI.queryAlignment((IAlignmentProvider) aBaseMetaTileEntity); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java deleted file mode 100644 index f430114319..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ExtendedPowerMultiBlockBase.java +++ /dev/null @@ -1,242 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import org.jetbrains.annotations.NotNull; - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.util.GT_ExoticEnergyInputHelper; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; - -/** - * Multiblock base class that allows machine to use power over int. - */ -public abstract class GT_MetaTileEntity_ExtendedPowerMultiBlockBase> - extends GT_MetaTileEntity_EnhancedMultiBlockBase { - - public long lEUt; - - protected GT_MetaTileEntity_ExtendedPowerMultiBlockBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - protected GT_MetaTileEntity_ExtendedPowerMultiBlockBase(String aName) { - super(aName); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - // NBT can be loaded as any primitive type, so we can load it as long. - this.lEUt = aNBT.getLong("mEUt"); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setLong("mEUt", this.lEUt); - } - - @Override - protected void calculateOverclockedNessMultiInternal(long aEUt, int aDuration, int mAmperage, long maxInputVoltage, - boolean perfectOC) { - GT_OverclockCalculator calculator = new GT_OverclockCalculator().setRecipeEUt(aEUt) - .setEUt(maxInputVoltage * mAmperage) - .setDuration(aDuration) - .setDurationDecreasePerOC(perfectOC ? 4.0 : 2.0) - .calculate(); - lEUt = calculator.getConsumption(); - mMaxProgresstime = calculator.getDuration(); - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (this.lEUt > 0) { - addEnergyOutput((this.lEUt * mEfficiency) / 10000); - return true; - } - if (this.lEUt < 0) { - if (!drainEnergyInput(getActualEnergyUsage())) { - stopMachine(ShutDownReasonRegistry.POWER_LOSS); - return false; - } - } - return true; - } - - @Override - public void stopMachine(@NotNull ShutDownReason reason) { - this.lEUt = 0; - super.stopMachine(reason); - } - - @Override - protected long getActualEnergyUsage() { - return (-this.lEUt * 10000) / Math.max(1000, mEfficiency); - } - - public List getExoticAndNormalEnergyHatchList() { - List tHatches = new ArrayList<>(); - tHatches.addAll(filterValidMTEs(mExoticEnergyHatches)); - tHatches.addAll(filterValidMTEs(mEnergyHatches)); - return tHatches; - } - - @Override - public boolean drainEnergyInput(long aEU) { - return GT_ExoticEnergyInputHelper.drainEnergy(aEU, getExoticAndNormalEnergyHatchList()); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - - final IGregTechTileEntity tileEntity = getBaseMetaTileEntity(); - if (tileEntity != null) { - if (tileEntity.isActive()) { - if (lEUt < 0) tag.setLong("energyUsage", getActualEnergyUsage()); - else tag.setLong("energyUsage", -lEUt * mEfficiency / 10000); - } - } - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(getAverageInputVoltage()); - logic.setAvailableAmperage(getMaxInputAmps()); - logic.setAmperageOC(true); - } - - @Nonnull - @Override - protected CheckRecipeResult postCheckRecipe(@Nonnull CheckRecipeResult result, - @Nonnull ProcessingLogic processingLogic) { - return result; - } - - @Override - protected void setEnergyUsage(ProcessingLogic processingLogic) { - lEUt = processingLogic.getCalculatedEut(); - if (lEUt > 0) { - lEUt = (-lEUt); - } - } - - @Override - public String[] getInfoData() { - int mPollutionReduction = 0; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); - } - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch tHatch : getExoticAndNormalEnergyHatchList()) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - long voltage = getAverageInputVoltage(); - long amps = getMaxInputAmps(); - - return new String[] { - /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(getActualEnergyUsage()) - + EnumChatFormatting.RESET - + " EU/t", - /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(voltage) - + EnumChatFormatting.RESET - + " EU/t(*" - + amps - + " A)" - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + VN[GT_Utility.getTier(voltage)] - + EnumChatFormatting.RESET, - /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - /* 6 */ StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %" }; - } - - @Override - public long getMaxInputVoltage() { - return GT_ExoticEnergyInputHelper.getMaxInputVoltageMulti(getExoticAndNormalEnergyHatchList()); - } - - @Override - public long getAverageInputVoltage() { - return GT_ExoticEnergyInputHelper.getAverageInputVoltageMulti(getExoticAndNormalEnergyHatchList()); - } - - @Override - public long getMaxInputAmps() { - return GT_ExoticEnergyInputHelper.getMaxWorkingInputAmpsMulti(getExoticAndNormalEnergyHatchList()); - } - - @Override - public long getMaxInputEu() { - return GT_ExoticEnergyInputHelper.getTotalEuMulti(getExoticAndNormalEnergyHatchList()); - } - - @Override - public void clearHatches() { - super.clearHatches(); - mExoticEnergyHatches.clear(); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_FilterBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_FilterBase.java deleted file mode 100644 index 896cb223f3..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_FilterBase.java +++ /dev/null @@ -1,106 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import net.minecraft.nbt.NBTTagCompound; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.util.GT_TooltipDataCache; - -public abstract class GT_MetaTileEntity_FilterBase extends GT_MetaTileEntity_Buffer { - - private static final String INVERT_FILTER_TOOLTIP = "GT5U.machines.invert_filter.tooltip"; - protected static final int FILTER_SLOT_INDEX = 9; - protected static final int NUM_INVENTORY_SLOTS = 9; - private static final String EMIT_REDSTONE_GRADUALLY_TOOLTIP = "GT5U" + ".machines.emit_redstone_gradually.tooltip"; - protected boolean invertFilter = false; - - public GT_MetaTileEntity_FilterBase(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String aDescription) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); - } - - public GT_MetaTileEntity_FilterBase(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String[] aDescription) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); - } - - public GT_MetaTileEntity_FilterBase(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_FilterBase(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex < NUM_INVENTORY_SLOTS; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("bInvertFilter", this.invertFilter); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.invertFilter = aNBT.getBoolean("bInvertFilter"); - } - - @Override - protected int getRedstoneOutput() { - if (!bRedstoneIfFull) { - return 0; - } - int redstoneOutput = getEmptySlots(); - if (!bInvert) redstoneOutput = NUM_INVENTORY_SLOTS - redstoneOutput; - return redstoneOutput; - } - - private int getEmptySlots() { - int emptySlots = 0; - for (int i = 0; i < NUM_INVENTORY_SLOTS; i++) { - if (mInventory[i] == null) ++emptySlots; - } - return emptySlots; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - addSortStacksButton(builder); - addEmitRedstoneGraduallyButton(builder); - addInvertRedstoneButton(builder); - addInvertFilterButton(builder); - } - - private void addEmitRedstoneGraduallyButton(ModularWindow.Builder builder) { - builder.widget( - createToggleButton( - () -> bRedstoneIfFull, - val -> bRedstoneIfFull = val, - GT_UITextures.OVERLAY_BUTTON_EMIT_REDSTONE, - this::getEmitRedstoneGraduallyButtonTooltip).setUpdateTooltipEveryTick(true)); - } - - private GT_TooltipDataCache.TooltipData getEmitRedstoneGraduallyButtonTooltip() { - return mTooltipCache - .getUncachedTooltipData(EMIT_REDSTONE_GRADUALLY_TOOLTIP, getEmptySlots(), getRedstoneOutput()); - } - - private void addInvertFilterButton(ModularWindow.Builder builder) { - builder.widget( - createToggleButton( - () -> invertFilter, - val -> invertFilter = val, - GT_UITextures.OVERLAY_BUTTON_INVERT_FILTER, - () -> mTooltipCache.getData(INVERT_FILTER_TOOLTIP))); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch.java deleted file mode 100644 index 1e974f5e9d..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch.java +++ /dev/null @@ -1,252 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import appeng.api.crafting.ICraftingIconProvider; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -/** - * Handles texture changes internally. No special calls are necessary other than updateTexture in add***ToMachineList. - */ -public abstract class GT_MetaTileEntity_Hatch extends GT_MetaTileEntity_BasicTank implements ICraftingIconProvider { - - public enum ConnectionType { - CABLE, - WIRELESS, - LASER - } - - /** - * Uses new texture changing methods to avoid limitations of byte as texture index... - */ - @Deprecated - public byte mMachineBlock = 0; - - private byte mTexturePage = 0; - private byte actualTexture = 0; - - private ItemStack ae2CraftingIcon; - - public GT_MetaTileEntity_Hatch(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String[] aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public static int getSlots(int aTier) { - return aTier < 1 ? 1 : aTier == 1 ? 4 : aTier == 2 ? 9 : 16; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return new ITexture[0][0][0]; - } - - public abstract ITexture[] getTexturesActive(ITexture aBaseTexture); - - public abstract ITexture[] getTexturesInactive(ITexture aBaseTexture); - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - int texturePointer = (byte) (actualTexture & 0x7F); // just to be sure, from my testing the 8th bit cannot be - // set clientside - int textureIndex = texturePointer | (mTexturePage << 7); // Shift seven since one page is 128 textures! - try { - if (side != aFacing) { - if (textureIndex > 0) - return new ITexture[] { Textures.BlockIcons.casingTexturePages[mTexturePage][texturePointer] }; - else return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1] }; - } else { - if (textureIndex > 0) { - if (aActive) - return getTexturesActive(Textures.BlockIcons.casingTexturePages[mTexturePage][texturePointer]); - else return getTexturesInactive( - Textures.BlockIcons.casingTexturePages[mTexturePage][texturePointer]); - } else { - if (aActive) return getTexturesActive(Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1]); - else return getTexturesInactive(Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1]); - } - } - } catch (NullPointerException npe) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[0][0] }; - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setByte("mMachineBlock", actualTexture); - aNBT.setByte("mTexturePage", mTexturePage); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - actualTexture = aNBT.getByte("mMachineBlock"); - mTexturePage = aNBT.getByte("mTexturePage"); - - if (mTexturePage != 0 && GT_Values.GT.isServerSide()) actualTexture |= 0x80; // <- lets just hope no one needs - // the correct value for that on - // server - mMachineBlock = actualTexture; - } - - /** - * Sets texture with page and index, called on add to machine list - * - * @param id (page<<7)+index of the texture - */ - public final void updateTexture(int id) { - onValueUpdate((byte) id); - onTexturePageUpdate((byte) (id >> 7)); - } - - /** - * Sets the icon for the owning multiblock used for AE2 crafting display of attached interfaces, called on add to - * machine list - */ - public final void updateCraftingIcon(ItemStack icon) { - this.ae2CraftingIcon = icon; - } - - @Override - public ItemStack getMachineCraftingIcon() { - return this.ae2CraftingIcon; - } - - /** - * Some multiblocks restrict hatches by tier. This method allows hatches to specify custom tier used for - * structure check, while keeping {@link #mTier} for other uses. - * - * @return Tier used for multiblock structure - */ - public byte getTierForStructure() { - return mTier; - } - - /** - * Sets texture with page and index, rather unusable, but kept FFS - * - * @param page page of texure - * @param index index of texure - */ - @Deprecated - public final void updateTexture(byte page, byte index) { - onValueUpdate(index); - onTexturePageUpdate(page); - } - - @Override - public final void onValueUpdate(byte aValue) { - actualTexture = (byte) (aValue & 0x7F); - mMachineBlock = actualTexture; - mTexturePage = 0; - } - - /** - * Get the maximum amount of amperes to work with, which excludes the additional amps in for loss - * - * @return Working amps - */ - public long maxWorkingAmperesIn() { - return maxAmperesIn(); - } - - /** - * Get the type of connection this hatch allows - * - * @return Connection type - */ - public ConnectionType getConnectionType() { - return ConnectionType.CABLE; - } - - @Override - public final byte getUpdateData() { - return (byte) (actualTexture & 0x7F); - } - - public final void onTexturePageUpdate(byte aValue) { - mTexturePage = (byte) (aValue & 0x7F); - if (mTexturePage != 0 && getBaseMetaTileEntity().isServerSide()) { // just to be sure - mMachineBlock |= 0x80; // <- lets just hope no one needs the correct value for that on server - actualTexture = mMachineBlock; - } - // set last bit to allow working of the page reset-er to 0 in rare case when texture id is the same but page - // changes to 0 - } - - public final byte getTexturePage() { - return (byte) (mTexturePage & 0x7F); - } - - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return false; - } - - @Override - public boolean canTankBeEmptied() { - return false; - } - - @Override - public boolean displaysItemStack() { - return false; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { // in that method since it is usually - // not overriden, especially for - // hatches. - if (actualTexture != mMachineBlock) { // revert to page 0 on edition of the field - old code way - actualTexture = (byte) (mMachineBlock & 0x7F); - mMachineBlock = actualTexture; // clear last bit in mMachineBlock since now we are at page 0 after the - // direct field - // change - mTexturePage = 0; // assuming old code only supports page 0 - } - super.onPreTick(aBaseMetaTileEntity, aTick); - } - - // To change to other page -> use the setter method -> updateTexture - - public int getCircuitSlot() { - return -1; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_DataAccess.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_DataAccess.java deleted file mode 100644 index 18344082ea..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_DataAccess.java +++ /dev/null @@ -1,170 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DATA_ACCESS; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Predicate; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; - -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_AssemblyLineUtils; - -public class GT_MetaTileEntity_Hatch_DataAccess extends GT_MetaTileEntity_Hatch implements IAddUIWidgets { - - private int timeout = 4; - - public GT_MetaTileEntity_Hatch_DataAccess(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 16, - new String[] { "Data Access for Multiblocks", - "Adds " + (aTier == 4 ? 4 : 16) + " extra slots for Data Sticks" }); - } - - public GT_MetaTileEntity_Hatch_DataAccess(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aTier == 4 ? 4 : 16, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_DataAccess(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aTier == 4 ? 4 : 16, aDescription, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_DATA_ACCESS) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_DATA_ACCESS) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - 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_DataAccess(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return mTier >= 8 && !aBaseMetaTileEntity.isActive(); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return mTier >= 8 && !aBaseMetaTileEntity.isActive(); - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isActive()) { - timeout--; - if (timeout <= 0) { - aBaseMetaTileEntity.setActive(false); - } - } - } - - public void setActive(boolean mActive) { - getBaseMetaTileEntity().setActive(mActive); - timeout = mActive ? 4 : 0; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.getByte("mSticksUpdated") != 1) { - for (int i = 0; i < getSizeInventory(); i++) { - GT_AssemblyLineUtils.processDataStick(getStackInSlot(i)); - } - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - // reminder: remove this marker after many years - aNBT.setByte("mSticksUpdated", (byte) 1); - } - - @Override - public void setInventorySlotContents(int aIndex, ItemStack aStack) { - super.setInventorySlotContents(aIndex, aStack); - GT_AssemblyLineUtils.processDataStick(aStack); - } - - public List getInventoryItems(Predicate filter) { - ArrayList items = new ArrayList<>(); - IGregTechTileEntity te = getBaseMetaTileEntity(); - for (int i = 0; i < te.getSizeInventory(); ++i) { - ItemStack slot = te.getStackInSlot(i); - if (slot != null) { - if (filter != null && filter.test(slot)) { - items.add(slot); - } - } - } - return items; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - if (mTier == 4) { - getBaseMetaTileEntity() - .add2by2Slots(builder, getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_CIRCUIT); - } else { - getBaseMetaTileEntity() - .add4by4Slots(builder, getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_CIRCUIT); - } - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Dynamo.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Dynamo.java deleted file mode 100644 index 8e621434db..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Dynamo.java +++ /dev/null @@ -1,110 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -public class GT_MetaTileEntity_Hatch_Dynamo extends GT_MetaTileEntity_Hatch { - - public GT_MetaTileEntity_Hatch_Dynamo(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { "Generating electric Energy from Multiblocks", "Puts out up to 1 Amp" }); - } - - public GT_MetaTileEntity_Hatch_Dynamo(int aID, String aName, String aNameRegional, int aTier, - String[] aDescription) { - super(aID, aName, aNameRegional, aTier, 0, aDescription); - } - - public GT_MetaTileEntity_Hatch_Dynamo(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_Dynamo(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 512; - } - - @Override - public long maxEUOutput() { - return V[mTier]; - } - - @Override - public long maxEUStore() { - return 512L + V[mTier + 1] * 2L; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Dynamo(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy.java deleted file mode 100644 index d9be12671d..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Energy.java +++ /dev/null @@ -1,125 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -public class GT_MetaTileEntity_Hatch_Energy extends GT_MetaTileEntity_Hatch { - - public GT_MetaTileEntity_Hatch_Energy(int aID, String aName, String aNameRegional, int aTier, - String[] aDescription) { - super(aID, aName, aNameRegional, aTier, 0, aDescription); - } - - public GT_MetaTileEntity_Hatch_Energy(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - new String[] { "Energy Injector for Multiblocks", "Accepts up to 2 Amps" }); - } - - public GT_MetaTileEntity_Hatch_Energy(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String[] aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_Energy(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_Energy(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_Energy(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 512; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxEUStore() { - return 512L + V[mTier] * 8L; - } - - @Override - public long maxAmperesIn() { - return 2; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Energy(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java deleted file mode 100644 index 705a3e6248..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Input.java +++ /dev/null @@ -1,196 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.FLUID_IN_SIGN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_IN; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.GT_Mod; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Hatch_Input extends GT_MetaTileEntity_Hatch { - - public RecipeMap mRecipeMap = null; - - public GT_MetaTileEntity_Hatch_Input(int aID, String aName, String aNameRegional, int aTier) { - this( - aID, - aName, - aNameRegional, - aTier, - new String[] { "Fluid Input for Multiblocks", - "Capacity: " + GT_Utility.formatNumbers(8000L * (1L << aTier)) + "L" }); - } - - public GT_MetaTileEntity_Hatch_Input(int aID, String aName, String aNameRegional, int aTier, - String[] aDescription) { - this(aID, 3, aName, aNameRegional, aTier, aDescription); - } - - public GT_MetaTileEntity_Hatch_Input(int aID, int aSlot, String aName, String aNameRegional, int aTier) { - this( - aID, - aSlot, - aName, - aNameRegional, - aTier, - new String[] { "Fluid Input for Multiblocks", "", "Can hold " + aSlot + " types of fluid." }); - mDescriptionArray[1] = "Capacity: " + GT_Utility.formatNumbers(getCapacityPerTank(aTier, aSlot)) + "L"; - } - - public GT_MetaTileEntity_Hatch_Input(int aID, int aSlot, String aName, String aNameRegional, int aTier, - String[] aDescription) { - super(aID, aName, aNameRegional, aTier, aSlot, aDescription); - } - - public GT_MetaTileEntity_Hatch_Input(int aID, String aName, String aNameRegional, int aTier, int allSlotCount, - String[] strings) { - super(aID, aName, aNameRegional, aTier, allSlotCount, strings); - } - - public int getCapacityPerTank(int aTier, int aSlot) { - return (int) (8000L * (1L << aTier) / aSlot); - } - - public GT_MetaTileEntity_Hatch_Input(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_Input(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_Input(String aName, int aSlots, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aSlots, aDescription, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(FLUID_IN_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(FLUID_IN_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Input(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (mRecipeMap != null) { - aNBT.setString("recipeMap", mRecipeMap.unlocalizedName); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mRecipeMap = RecipeMap.getFromOldIdentifier(aNBT.getString("recipeMap")); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean doesFillContainers() { - // return true; - return false; - } - - @Override - public boolean doesEmptyContainers() { - return true; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public boolean displaysItemStack() { - return true; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - public void updateSlots() { - if (mInventory[getInputSlot()] != null && mInventory[getInputSlot()].stackSize <= 0) - mInventory[getInputSlot()] = null; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return mRecipeMap == null || mRecipeMap.containsInput(aFluid); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 1; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 0 - && (mRecipeMap == null || mRecipeMap.containsInput(aStack) - || mRecipeMap.containsInput(GT_Utility.getFluidForFilledItem(aStack, true))); - } - - @Override - public int getCapacity() { - return 8000 * (1 << mTier); - } - - @Override - public int getTankPressure() { - return -100; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java deleted file mode 100644 index 8c99e813e2..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java +++ /dev/null @@ -1,318 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.ITEM_IN_SIGN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_IN; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Supplier; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; - -import gregtech.GT_Mod; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IConfigurationCircuitSupport; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ClientPreference; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_TooltipDataCache; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.extensions.ArrayExt; - -public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch - implements IConfigurationCircuitSupport, IAddUIWidgets { - - private static final String SORTING_MODE_TOOLTIP = "GT5U.machines.sorting_mode.tooltip"; - private static final String ONE_STACK_LIMIT_TOOLTIP = "GT5U.machines.one_stack_limit.tooltip"; - private static final int BUTTON_SIZE = 18; - - public RecipeMap mRecipeMap = null; - public boolean disableSort; - public boolean disableFilter = true; - public boolean disableLimited = true; - private int uiButtonCount = 0; - - public GT_MetaTileEntity_Hatch_InputBus(int id, String name, String nameRegional, int tier) { - this(id, name, nameRegional, tier, getSlots(tier) + 1); - } - - protected GT_MetaTileEntity_Hatch_InputBus(int id, String name, String nameRegional, int tier, int slots, - String[] description) { - super(id, name, nameRegional, tier, slots, description); - } - - public GT_MetaTileEntity_Hatch_InputBus(int id, String name, String nameRegional, int tier, int slots) { - super( - id, - name, - nameRegional, - tier, - slots, - ArrayExt.of( - "Item Input for Multiblocks", - "Shift + right click with screwdriver to turn Sort mode on/off", - "Capacity: " + getSlots(tier) + " stack" + (getSlots(tier) >= 2 ? "s" : ""))); - } - - public GT_MetaTileEntity_Hatch_InputBus(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - this(aName, aTier, getSlots(aTier) + 1, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_InputBus(String aName, int aTier, int aSlots, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aSlots, aDescription, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(ITEM_IN_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(ITEM_IN_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex != getCircuitSlot(); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_InputBus(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public int getCircuitSlotX() { - return 153; - } - - @Override - public int getCircuitSlotY() { - return 63; - } - - @Override - public void initDefaultModes(NBTTagCompound aNBT) { - if (!getBaseMetaTileEntity().getWorld().isRemote) { - GT_ClientPreference tPreference = GT_Mod.gregtechproxy - .getClientPreference(getBaseMetaTileEntity().getOwnerUuid()); - if (tPreference != null) disableFilter = !tPreference.isInputBusInitialFilterEnabled(); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { - updateSlots(); - } - } - - public void updateSlots() { - for (int i = 0; i < mInventory.length - 1; i++) - if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null; - if (!disableSort) fillStacksIntoFirstSlots(); - } - - protected void fillStacksIntoFirstSlots() { - final int L = mInventory.length - 1; - HashMap slots = new HashMap<>(L); - HashMap stacks = new HashMap<>(L); - List order = new ArrayList<>(L); - List validSlots = new ArrayList<>(L); - for (int i = 0; i < L; i++) { - if (!isValidSlot(i)) continue; - validSlots.add(i); - ItemStack s = mInventory[i]; - if (s == null) continue; - GT_Utility.ItemId sID = GT_Utility.ItemId.createNoCopy(s); - slots.merge(sID, s.stackSize, Integer::sum); - if (!stacks.containsKey(sID)) stacks.put(sID, s); - order.add(sID); - mInventory[i] = null; - } - int slotindex = 0; - for (GT_Utility.ItemId sID : order) { - int toSet = slots.get(sID); - if (toSet == 0) continue; - int slot = validSlots.get(slotindex); - slotindex++; - mInventory[slot] = stacks.get(sID) - .copy(); - toSet = Math.min(toSet, mInventory[slot].getMaxStackSize()); - mInventory[slot].stackSize = toSet; - slots.merge(sID, toSet, (a, b) -> a - b); - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("disableSort", disableSort); - aNBT.setBoolean("disableFilter", disableFilter); - aNBT.setBoolean("disableLimited", disableLimited); - if (mRecipeMap != null) { - aNBT.setString("recipeMap", mRecipeMap.unlocalizedName); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - disableSort = aNBT.getBoolean("disableSort"); - disableFilter = aNBT.getBoolean("disableFilter"); - if (aNBT.hasKey("disableLimited")) { - disableLimited = aNBT.getBoolean("disableLimited"); - } - mRecipeMap = RecipeMap.getFromOldIdentifier(aNBT.getString("recipeMap")); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) - .isGUIClickable()) return; - if (aPlayer.isSneaking()) { - if (disableSort) { - disableSort = false; - } else { - if (disableLimited) { - disableLimited = false; - } else { - disableSort = true; - disableLimited = true; - } - } - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.hatch.disableSort." + disableSort) + " " - + StatCollector.translateToLocal("GT5U.hatch.disableLimited." + disableLimited)); - } else { - disableFilter = !disableFilter; - GT_Utility - .sendChatToPlayer(aPlayer, StatCollector.translateToLocal("GT5U.hatch.disableFilter." + disableFilter)); - } - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (aIndex == getCircuitSlot()) return false; - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == getBaseMetaTileEntity().getFrontFacing() && aIndex != getCircuitSlot() - && (mRecipeMap == null || disableFilter || mRecipeMap.containsInput(aStack)) - && (disableLimited || limitedAllowPutStack(aIndex, aStack)); - } - - protected boolean limitedAllowPutStack(int aIndex, ItemStack aStack) { - for (int i = 0; i < getSizeInventory(); i++) - if (GT_Utility.areStacksEqual(GT_OreDictUnificator.get_nocopy(aStack), mInventory[i])) return i == aIndex; - return mInventory[aIndex] == null; - } - - @Override - public boolean allowSelectCircuit() { - return true; - } - - @Override - public int getCircuitSlot() { - return getSlots(mTier); - } - - private void addSortStacksButton(ModularWindow.Builder builder) { - builder.widget( - createToggleButton( - () -> !disableSort, - val -> disableSort = !val, - GT_UITextures.OVERLAY_BUTTON_SORTING_MODE, - () -> mTooltipCache.getData(SORTING_MODE_TOOLTIP))); - } - - private void addOneStackLimitButton(ModularWindow.Builder builder) { - builder.widget(createToggleButton(() -> !disableLimited, val -> { - disableLimited = !val; - updateSlots(); - }, GT_UITextures.OVERLAY_BUTTON_ONE_STACK_LIMIT, () -> mTooltipCache.getData(ONE_STACK_LIMIT_TOOLTIP))); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - buildContext.addCloseListener(() -> uiButtonCount = 0); - addSortStacksButton(builder); - addOneStackLimitButton(builder); - // Remove one for ghost circuit slot - int slotCount = getSizeInventory(); - if (allowSelectCircuit()) { - slotCount = slotCount - 1; - } - // We do this to decouple slot count from tier in here, since there is no reason to do so. - switch (slotCount) { - case 1 -> getBaseMetaTileEntity().add1by1Slot(builder); - case 4 -> getBaseMetaTileEntity().add2by2Slots(builder); - case 9 -> getBaseMetaTileEntity().add3by3Slots(builder); - case 16 -> getBaseMetaTileEntity().add4by4Slots(builder); - default -> {} - } - } - - private Widget createToggleButton(Supplier getter, Consumer setter, UITexture picture, - Supplier tooltipDataSupplier) { - return new CycleButtonWidget().setToggle(getter, setter) - .setStaticTexture(picture) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(7 + (uiButtonCount++ * BUTTON_SIZE), 62) - .setSize(BUTTON_SIZE, BUTTON_SIZE) - .setGTTooltip(tooltipDataSupplier); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java deleted file mode 100644 index 8a4d718244..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Maintenance.java +++ /dev/null @@ -1,459 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_AUTOMAINTENANCE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_AUTOMAINTENANCE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_AUTOMAINTENANCE_IDLE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_AUTOMAINTENANCE_IDLE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DUCTTAPE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MAINTENANCE; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.IAlignment; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; -import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; -import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; -import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.common.network.NetworkRegistry; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import ic2.core.IHasGui; -import ic2.core.item.ItemToolbox; - -public class GT_MetaTileEntity_Hatch_Maintenance extends GT_MetaTileEntity_Hatch implements IAddUIWidgets, IAlignment { - - private Rotation rotation = Rotation.NORMAL; - - private static ItemStack[] sAutoMaintenanceInputs; - public boolean mWrench = false, mScrewdriver = false, mSoftHammer = false, mHardHammer = false, - mSolderingTool = false, mCrowbar = false, mAuto; - - public GT_MetaTileEntity_Hatch_Maintenance(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 1, "For maintaining Multiblocks"); - mAuto = false; - } - - public GT_MetaTileEntity_Hatch_Maintenance(int aID, String aName, String aNameRegional, int aTier, boolean aAuto) { - super(aID, aName, aNameRegional, aTier, 4, "For automatically maintaining Multiblocks"); - mAuto = aAuto; - } - - public GT_MetaTileEntity_Hatch_Maintenance(String aName, int aTier, String aDescription, ITexture[][][] aTextures, - boolean aAuto) { - super(aName, aTier, aAuto ? 4 : 1, aDescription, aTextures); - mAuto = aAuto; - } - - public GT_MetaTileEntity_Hatch_Maintenance(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, - boolean aAuto) { - super(aName, aTier, aAuto ? 4 : 1, aDescription, aTextures); - mAuto = aAuto; - } - - private static ItemStack[] getAutoMaintenanceInputs() { - if (sAutoMaintenanceInputs == null) sAutoMaintenanceInputs = new ItemStack[] { ItemList.Duct_Tape.get(4), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Lubricant, 2), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 4), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2) }; - return sAutoMaintenanceInputs; - } - - @Override - public String[] getDescription() { - String[] desc; - if (mAuto) { - desc = new String[mDescriptionArray.length + 3]; - System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); - desc[mDescriptionArray.length] = "4 Ducttape, 2 Lubricant Cells"; - desc[mDescriptionArray.length + 1] = "4 Steel Screws, 2 HV Circuits"; - desc[mDescriptionArray.length + 2] = "For each autorepair"; - } else { - desc = new String[mDescriptionArray.length + 1]; - System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); - desc[mDescriptionArray.length] = "Cannot be shared between Multiblocks!"; - } - return desc; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - if (mAuto) return new ITexture[] { aBaseTexture, TextureFactory.builder() - .addIcon(OVERLAY_AUTOMAINTENANCE_IDLE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_AUTOMAINTENANCE_IDLE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { aBaseTexture, TextureFactory.builder() - .addIcon(OVERLAY_MAINTENANCE) - .extFacing() - .build() }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - if (mAuto) return new ITexture[] { aBaseTexture, TextureFactory.builder() - .addIcon(OVERLAY_AUTOMAINTENANCE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_AUTOMAINTENANCE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { aBaseTexture, TextureFactory.builder() - .addIcon(OVERLAY_MAINTENANCE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_DUCTTAPE) - .extFacing() - .build() }; - } - - @Override - public void initDefaultModes(NBTTagCompound aNBT) { - getBaseMetaTileEntity().setActive(true); - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return mAuto && GT_Mod.gregtechproxy.mAMHInteraction; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - if (aTileEntity.getMetaTileID() == 111) - return new GT_MetaTileEntity_Hatch_Maintenance(mName, mTier, mDescriptionArray, mTextures, true); - return new GT_MetaTileEntity_Hatch_Maintenance(mName, mTier, mDescriptionArray, mTextures, false); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - if (aBaseMetaTileEntity.isClientSide()) return true; - if (side == aBaseMetaTileEntity.getFrontFacing()) { - // only allow OC robot fake player - if (aPlayer instanceof FakePlayer && !aPlayer.getGameProfile() - .getName() - .endsWith(".robot")) return false; - ItemStack tStack = aPlayer.getCurrentEquippedItem(); - if (tStack != null) { - if (tStack.getItem() instanceof ItemToolbox) { - applyToolbox(tStack, aPlayer); - } else if (ItemList.Duct_Tape.isStackEqual(tStack)) { - mWrench = mScrewdriver = mSoftHammer = mHardHammer = mCrowbar = mSolderingTool = true; - getBaseMetaTileEntity().setActive(false); - if (--tStack.stackSize == 0) { - aPlayer.inventory.mainInventory[aPlayer.inventory.currentItem] = null; - } - } else GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - } else { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - } - 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; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - if (aBaseMetaTileEntity.isClientSide()) - StructureLibAPI.queryAlignment((IAlignmentProvider) aBaseMetaTileEntity); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && mAuto && aTick % 100L == 0L) { - aBaseMetaTileEntity.setActive(!isRecipeInputEqual(false)); - } - } - - @Override - public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer, - float aX, float aY, float aZ) { - if (wrenchingSide != getBaseMetaTileEntity().getFrontFacing()) - return super.onWrenchRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ); - if (!entityPlayer.isSneaking() && isRotationChangeAllowed()) { - toolSetRotation(null); - return true; - } - return false; - } - - public boolean autoMaintainance() { - return isRecipeInputEqual(true); - } - - public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess) { - ItemStack[] mInputs = getAutoMaintenanceInputs(); - - int amt; - - for (ItemStack tStack : mInputs) { - if (tStack != null) { - amt = tStack.stackSize; - boolean temp = true; - for (ItemStack aStack : mInventory) { - if ((GT_Utility.areUnificationsEqual(aStack, tStack, true) - || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true))) { - amt -= aStack.stackSize; - if (amt < 1) { - temp = false; - break; - } - } - } - if (temp) return false; - } - } - - if (aDecreaseStacksizeBySuccess) { - for (ItemStack tStack : mInputs) { - if (tStack != null) { - amt = tStack.stackSize; - for (ItemStack aStack : mInventory) { - if ((GT_Utility.areUnificationsEqual(aStack, tStack, true) || GT_Utility - .areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tStack, true))) { - if (aStack.stackSize < amt) { - amt -= aStack.stackSize; - aStack.stackSize = 0; - } else { - aStack.stackSize -= amt; - amt = 0; - break; - } - } - } - } - } - mCrowbar = true; - mHardHammer = true; - mScrewdriver = true; - mSoftHammer = true; - mSolderingTool = true; - mWrench = true; - updateSlots(); - } - return true; - } - - public void onToolClick(ItemStack aStack, EntityLivingBase aPlayer, IInventory aToolboxInventory) { - if (aStack == null || aPlayer == null) return; - - // Allow IC2 Toolbox with tools to function for maint issues. - if (aStack.getItem() instanceof ItemToolbox && aPlayer instanceof EntityPlayer) { - applyToolbox(aStack, (EntityPlayer) aPlayer); - return; - } - - if (GT_Utility.isStackInList(aStack, GregTech_API.sWrenchList) && !mWrench - && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mWrench = true; - if (GT_Utility.isStackInList(aStack, GregTech_API.sScrewdriverList) && !mScrewdriver - && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mScrewdriver = true; - if (GT_Utility.isStackInList(aStack, GregTech_API.sSoftHammerList) && !mSoftHammer - && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mSoftHammer = true; - if (GT_Utility.isStackInList(aStack, GregTech_API.sHardHammerList) && !mHardHammer - && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mHardHammer = true; - if (GT_Utility.isStackInList(aStack, GregTech_API.sCrowbarList) && !mCrowbar - && GT_ModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mCrowbar = true; - if (!mSolderingTool && GT_ModHandler.useSolderingIron(aStack, aPlayer, aToolboxInventory)) - mSolderingTool = true; - if (GT_OreDictUnificator.isItemStackInstanceOf(aStack, "craftingDuctTape")) { - mWrench = mScrewdriver = mSoftHammer = mHardHammer = mCrowbar = mSolderingTool = true; - getBaseMetaTileEntity().setActive(false); - aStack.stackSize--; - } - if (mSolderingTool && aPlayer instanceof EntityPlayerMP tPlayer) { - try { - GT_Mod.achievements.issueAchievement(tPlayer, "maintainance"); - } catch (Exception ignored) {} - } - } - - public void onToolClick(ItemStack aStack, EntityLivingBase aPlayer) { - onToolClick(aStack, aPlayer, null); - } - - private void applyToolbox(ItemStack aStack, EntityPlayer aPlayer) { - final ItemToolbox aToolbox = (ItemToolbox) aStack.getItem(); - final IHasGui aToolboxGUI = aToolbox.getInventory(aPlayer, aStack); - for (int i = 0; i < aToolboxGUI.getSizeInventory(); i++) { - if (aToolboxGUI.getStackInSlot(i) != null) { - onToolClick(aToolboxGUI.getStackInSlot(i), aPlayer, aToolboxGUI); - if (aToolboxGUI.getStackInSlot(i) != null && aToolboxGUI.getStackInSlot(i).stackSize <= 0) - aToolboxGUI.setInventorySlotContents(i, null); - } - } - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return mAuto && GT_Mod.gregtechproxy.mAMHInteraction; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (mAuto && GT_Mod.gregtechproxy.mAMHInteraction) { - for (int i = 0; i < getSizeInventory(); i++) if (GT_Utility.areStacksEqual( - GT_OreDictUnificator.get(false, aStack), - GT_OreDictUnificator.get(false, getStackInSlot(i)))) return i == aIndex; - for (ItemStack tInput : getAutoMaintenanceInputs()) - if (GT_Utility.areUnificationsEqual(tInput, aStack, true) - || GT_Utility.areUnificationsEqual(GT_OreDictUnificator.get(false, aStack), tInput, true)) - return true; - } - return false; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - if (mAuto) { - getBaseMetaTileEntity().add2by2Slots(builder); - } else { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.SLOT_MAINTENANCE) - .setPos(78, 33) - .setSize(20, 20)) - .widget(new SlotWidget(BaseSlot.empty()) { - - @Override - public boolean handleDragAndDrop(ItemStack draggedStack, int button) { - return false; - } - - @Override - protected void phantomClick(ClickData clickData, ItemStack cursorStack) { - if (cursorStack == null) return; - onToolClick(cursorStack, getContext().getPlayer()); - if (cursorStack.stackSize < 1) { - getContext().getPlayer().inventory.setItemStack(null); - } - if (getContext().getPlayer() instanceof EntityPlayerMP) { - ((EntityPlayerMP) getContext().getPlayer()).updateHeldItem(); - } - } - }.disableShiftInsert() - .setBackground(GT_UITextures.TRANSPARENT) - .setPos(79, 34)) - .widget( - new TextWidget("Click with Tool to repair.").setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(8, 12)); - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setByte("mRotation", (byte) rotation.getIndex()); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - rotation = Rotation.byIndex(aNBT.getByte("mRotation")); - super.loadNBTData(aNBT); - } - - @Override - public ExtendedFacing getExtendedFacing() { - return ExtendedFacing.of(getBaseMetaTileEntity().getFrontFacing(), rotation, Flip.NONE); - } - - @Override - public void setExtendedFacing(ExtendedFacing alignment) { - boolean changed = false; - final IGregTechTileEntity base = getBaseMetaTileEntity(); - if (base.getFrontFacing() != alignment.getDirection()) { - base.setFrontFacing(alignment.getDirection()); - changed = true; - } - if (rotation != alignment.getRotation()) { - rotation = alignment.getRotation(); - changed = true; - } - if (changed) { - if (base.isServerSide() && !GregTech_API.isDummyWorld(base.getWorld())) { - StructureLibAPI.sendAlignment( - (IAlignmentProvider) base, - new NetworkRegistry.TargetPoint( - base.getWorld().provider.dimensionId, - base.getXCoord(), - base.getYCoord(), - base.getZCoord(), - 512)); - } else { - base.issueTextureUpdate(); - } - } - } - - @Override - public IAlignmentLimits getAlignmentLimits() { - return (d, r, f) -> f.isNotFlipped(); - } - - @Override - public boolean isFlipChangeAllowed() { - return false; - } - - @Override - public boolean isRotationChangeAllowed() { - return true; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java deleted file mode 100644 index 8707d0f804..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler.java +++ /dev/null @@ -1,208 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MUFFLER; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.enums.ParticleFX; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.WorldSpawnedEventBuilder; -import gregtech.common.GT_Pollution; - -@SuppressWarnings("unused") // Unused API is expected within scope -public class GT_MetaTileEntity_Hatch_Muffler extends GT_MetaTileEntity_Hatch { - - private static final String localizedDescFormat = GT_LanguageManager.addStringLocalization( - "gt.blockmachines.hatch.muffler.desc.format", - "Outputs the Pollution (Might cause ... things)%n" + "DO NOT OBSTRUCT THE OUTPUT!%n" - + "Reduces Pollution to %d%%%n" - + "Recovers %d%% of CO2/CO/SO2"); - private final int pollutionReduction = calculatePollutionReduction(100); - private final int pollutionRecover = 100 - pollutionReduction; - private final String[] description = String.format(localizedDescFormat, pollutionReduction, pollutionRecover) - .split("\\R"); - - public GT_MetaTileEntity_Hatch_Muffler(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 0, ""); - } - - public GT_MetaTileEntity_Hatch_Muffler(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String[] aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_Muffler(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - this(aName, aTier, new String[] { aDescription }, aTextures); - } - - public GT_MetaTileEntity_Hatch_Muffler(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - this(aName, aTier, 0, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_Muffler(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - return description; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_MUFFLER) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_MUFFLER) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Muffler(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isClientSide() && this.getBaseMetaTileEntity() - .isActive()) { - pollutionParticles( - this.getBaseMetaTileEntity() - .getWorld(), - ParticleFX.LARGE_SMOKE.toString()); - } - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @SideOnly(Side.CLIENT) - public void pollutionParticles(World aWorld, String name) { - boolean chk1, chk2, chk3; - float ran1 = XSTR_INSTANCE.nextFloat(), ran2, ran3; - chk1 = ran1 * 100 < calculatePollutionReduction(100); - if (GT_Pollution.getPollution(getBaseMetaTileEntity()) >= GT_Mod.gregtechproxy.mPollutionSmogLimit) { - ran2 = XSTR_INSTANCE.nextFloat(); - ran3 = XSTR_INSTANCE.nextFloat(); - chk2 = ran2 * 100 < calculatePollutionReduction(100); - chk3 = ran3 * 100 < calculatePollutionReduction(100); - if (!(chk1 || chk2 || chk3)) return; - } else { - if (!chk1) return; - ran2 = ran3 = 0.0F; - chk2 = chk3 = false; - } - - final IGregTechTileEntity aMuffler = this.getBaseMetaTileEntity(); - final ForgeDirection aDir = aMuffler.getFrontFacing(); - final float xPos = aDir.offsetX * 0.76F + aMuffler.getXCoord() + 0.25F; - final float yPos = aDir.offsetY * 0.76F + aMuffler.getYCoord() + 0.25F; - final float zPos = aDir.offsetZ * 0.76F + aMuffler.getZCoord() + 0.25F; - - final float ySpd = aDir.offsetY * 0.1F + 0.2F + 0.1F * XSTR_INSTANCE.nextFloat(); - final float xSpd; - final float zSpd; - - if (aDir.offsetY == -1) { - final float temp = XSTR_INSTANCE.nextFloat() * 2 * (float) Math.PI; - xSpd = (float) Math.sin(temp) * 0.1F; - zSpd = (float) Math.cos(temp) * 0.1F; - } else { - xSpd = aDir.offsetX * (0.1F + 0.2F * XSTR_INSTANCE.nextFloat()); - zSpd = aDir.offsetZ * (0.1F + 0.2F * XSTR_INSTANCE.nextFloat()); - } - - final WorldSpawnedEventBuilder.ParticleEventBuilder events = new WorldSpawnedEventBuilder.ParticleEventBuilder() - .setIdentifier(name) - .setWorld(aWorld) - .setMotion(xSpd, ySpd, zSpd); - - if (chk1) { - events - .setPosition( - xPos + ran1 * 0.5F, - yPos + XSTR_INSTANCE.nextFloat() * 0.5F, - zPos + XSTR_INSTANCE.nextFloat() * 0.5F) - .run(); - } - if (chk2) { - events - .setPosition( - xPos + ran2 * 0.5F, - yPos + XSTR_INSTANCE.nextFloat() * 0.5F, - zPos + XSTR_INSTANCE.nextFloat() * 0.5F) - .run(); - } - if (chk3) { - events - .setPosition( - xPos + ran3 * 0.5F, - yPos + XSTR_INSTANCE.nextFloat() * 0.5F, - zPos + XSTR_INSTANCE.nextFloat() * 0.5F) - .run(); - } - } - - public int calculatePollutionReduction(int aPollution) { - if (mTier < 2) { - return aPollution; - } - return (int) ((float) aPollution * ((100F - 12.5F * ((float) mTier - 1F)) / 100F)); - } - - /** - * @param mte The multi-block controller's {@link MetaTileEntity} MetaTileEntity is passed so newer muffler hatches - * can do wacky things with the multis - * @return pollution success - */ - public boolean polluteEnvironment(MetaTileEntity mte) { - if (getBaseMetaTileEntity().getAirAtSide(getBaseMetaTileEntity().getFrontFacing())) { - GT_Pollution.addPollution(getBaseMetaTileEntity(), calculatePollutionReduction(10000)); - return true; - } - return false; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_MultiInput.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_MultiInput.java deleted file mode 100644 index 267c2d0f1c..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_MultiInput.java +++ /dev/null @@ -1,300 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_INPUT_HATCH_2x2; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; - -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.fluid.FluidStackTank; -import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_Hatch_MultiInput extends GT_MetaTileEntity_Hatch_Input implements IAddUIWidgets { - - private final FluidStack[] mStoredFluid; - private final FluidStackTank[] fluidTanks; - public final int mCapacityPer; - - public GT_MetaTileEntity_Hatch_MultiInput(int aID, int aSlot, String aName, String aNameRegional, int aTier) { - super(aID, aSlot, aName, aNameRegional, aTier); - this.mStoredFluid = new FluidStack[aSlot]; - fluidTanks = new FluidStackTank[aSlot]; - mCapacityPer = getCapacityPerTank(aTier, aSlot); - } - - public GT_MetaTileEntity_Hatch_MultiInput(int aID, int aSlot, String aName, String aNameRegional, int aTier, - String[] aDescription) { - super(aID, aSlot, aName, aNameRegional, aTier, aDescription); - this.mStoredFluid = new FluidStack[aSlot]; - fluidTanks = new FluidStackTank[aSlot]; - mCapacityPer = getCapacityPerTank(aTier, aSlot); - } - - public GT_MetaTileEntity_Hatch_MultiInput(String aName, int aSlot, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aSlot, aTier, aDescription, aTextures); - this.mStoredFluid = new FluidStack[aSlot]; - fluidTanks = new FluidStackTank[aSlot]; - mCapacityPer = getCapacityPerTank(aTier, aSlot); - for (int i = 0; i < aSlot; i++) { - final int index = i; - fluidTanks[i] = new FluidStackTank( - () -> mStoredFluid[index], - fluid -> mStoredFluid[index] = fluid, - mCapacityPer); - } - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_MultiInput(mName, getMaxType(), mTier, mDescriptionArray, mTextures); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (mStoredFluid != null) { - for (int i = 0; i < mStoredFluid.length; i++) { - if (mStoredFluid[i] != null) - aNBT.setTag("mFluid" + i, mStoredFluid[i].writeToNBT(new NBTTagCompound())); - } - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (mStoredFluid != null) { - for (int i = 0; i < mStoredFluid.length; i++) { - if (aNBT.hasKey("mFluid" + i)) { - mStoredFluid[i] = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid" + i)); - } - } - } - } - - @Override - public boolean displaysStackSize() { - return true; - } - - public FluidStack[] getStoredFluid() { - return mStoredFluid; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_INPUT_HATCH_2x2) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_INPUT_HATCH_2x2) }; - } - - public int getMaxType() { - return mStoredFluid.length; - } - - @Override - public FluidStack getFluid() { - for (FluidStack tFluid : mStoredFluid) { - if (tFluid != null && tFluid.amount > 0) return tFluid; - } - return null; - } - - public FluidStack getFluid(int aSlot) { - if (mStoredFluid == null || aSlot < 0 || aSlot >= getMaxType()) return null; - return mStoredFluid[aSlot]; - } - - @Override - public int getFluidAmount() { - if (getFluid() != null) { - return getFluid().amount; - } - return 0; - } - - @Override - public int getCapacity() { - return mCapacityPer; - } - - public int getFirstEmptySlot() { - for (int i = 0; i < mStoredFluid.length; i++) { - if (mStoredFluid[i] == null) return i; - } - return -1; - } - - public boolean hasFluid(FluidStack aFluid) { - if (aFluid == null) return false; - for (FluidStack tFluid : mStoredFluid) { - if (aFluid.isFluidEqual(tFluid)) return true; - } - return false; - } - - public int getFluidSlot(FluidStack tFluid) { - if (tFluid == null) return -1; - for (int i = 0; i < mStoredFluid.length; i++) { - if (tFluid.equals(mStoredFluid[i])) return i; - } - return -1; - } - - public int getFluidAmount(FluidStack tFluid) { - int tSlot = getFluidSlot(tFluid); - if (tSlot != -1) { - return mStoredFluid[tSlot].amount; - } - return 0; - } - - public void setFluid(FluidStack aFluid, int aSlot) { - if (aSlot < 0 || aSlot >= getMaxType()) return; - mStoredFluid[aSlot] = aFluid; - } - - public void addFluid(FluidStack aFluid, int aSlot) { - if (aSlot < 0 || aSlot >= getMaxType()) return; - if (aFluid.equals(mStoredFluid[aSlot])) mStoredFluid[aSlot].amount += aFluid.amount; - if (mStoredFluid[aSlot] == null) mStoredFluid[aSlot] = aFluid.copy(); - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - mFluid = getFluid(); - } - super.onPreTick(aBaseMetaTileEntity, aTick); - } - - @Override - public int fill(FluidStack aFluid, boolean doFill) { - if (aFluid == null || aFluid.getFluid() - .getID() <= 0 || aFluid.amount <= 0 || !canTankBeFilled() || !isFluidInputAllowed(aFluid)) return 0; - if (!hasFluid(aFluid) && getFirstEmptySlot() != -1) { - int tFilled = Math.min(aFluid.amount, mCapacityPer); - if (doFill) { - FluidStack tFluid = aFluid.copy(); - tFluid.amount = tFilled; - addFluid(tFluid, getFirstEmptySlot()); - getBaseMetaTileEntity().markDirty(); - } - return tFilled; - } - if (hasFluid(aFluid)) { - int tLeft = mCapacityPer - getFluidAmount(aFluid); - int tFilled = Math.min(tLeft, aFluid.amount); - if (doFill) { - FluidStack tFluid = aFluid.copy(); - tFluid.amount = tFilled; - addFluid(tFluid, getFluidSlot(tFluid)); - getBaseMetaTileEntity().markDirty(); - } - return tFilled; - } - return 0; - } - - @Override - public FluidStack drain(int maxDrain, boolean doDrain) { - if (getFluid() == null || !canTankBeEmptied()) return null; - if (getFluid().amount <= 0 && isFluidChangingAllowed()) { - setFluid(null, getFluidSlot(getFluid())); - getBaseMetaTileEntity().markDirty(); - return null; - } - FluidStack tRemove = getFluid().copy(); - tRemove.amount = Math.min(maxDrain, tRemove.amount); - if (doDrain) { - getFluid().amount -= tRemove.amount; - getBaseMetaTileEntity().markDirty(); - } - if (getFluid() == null || getFluid().amount <= 0 && isFluidChangingAllowed()) { - setFluid(null, getFluidSlot(getFluid())); - getBaseMetaTileEntity().markDirty(); - } - return tRemove; - } - - @Override - public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { - return fill(resource, doFill); - } - - @Override - public FluidStack drain(ForgeDirection from, FluidStack aFluid, boolean doDrain) { - if (aFluid == null || !hasFluid(aFluid)) return null; - FluidStack tStored = mStoredFluid[getFluidSlot(aFluid)]; - if (tStored.amount <= 0 && isFluidChangingAllowed()) { - setFluid(null, getFluidSlot(tStored)); - getBaseMetaTileEntity().markDirty(); - return null; - } - FluidStack tRemove = tStored.copy(); - tRemove.amount = Math.min(aFluid.amount, tRemove.amount); - if (doDrain) { - tStored.amount -= tRemove.amount; - getBaseMetaTileEntity().markDirty(); - } - if (tStored.amount <= 0 && isFluidChangingAllowed()) { - setFluid(null, getFluidSlot(tStored)); - getBaseMetaTileEntity().markDirty(); - } - return tRemove; - } - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection from) { - FluidTankInfo[] FTI = new FluidTankInfo[getMaxType()]; - for (int i = 0; i < getMaxType(); i++) { - FTI[i] = new FluidTankInfo(mStoredFluid[i], mCapacityPer); - } - return FTI; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide() && mStoredFluid != null) { - for (int i = 0; i < getMaxType(); i++) { - if (mStoredFluid[i] != null && mStoredFluid[i].amount <= 0) { - mStoredFluid[i] = null; - } - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex >= 4; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - final int SLOT_NUMBER = 4; - final Pos2d[] positions = new Pos2d[] { new Pos2d(70, 25), new Pos2d(88, 25), new Pos2d(70, 43), - new Pos2d(88, 43), }; - - for (int i = 0; i < SLOT_NUMBER; i++) { - builder.widget( - new FluidSlotWidget(fluidTanks[i]).setBackground(ModularUITextures.FLUID_SLOT) - .setPos(positions[i])); - } - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java deleted file mode 100644 index 2aa2410bd1..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java +++ /dev/null @@ -1,497 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.FLUID_OUT_SIGN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; - -import java.lang.ref.WeakReference; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidContainerItem; -import net.minecraftforge.fluids.IFluidHandler; - -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.GT_Mod; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.fluid.IFluidStore; -import gregtech.api.interfaces.metatileentity.IFluidLockable; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.common.gui.modularui.widget.FluidLockWidget; - -public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch - implements IFluidStore, IFluidLockable, IAddUIWidgets { - - private String lockedFluidName = null; - private WeakReference playerThatLockedfluid = null; - public byte mMode = 0; - - public GT_MetaTileEntity_Hatch_Output(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 4, - new String[] { "Fluid Output for Multiblocks", - "Capacity: " + GT_Utility.formatNumbers(8000L * (1L << aTier)) + "L", - "Right click with screwdriver to restrict output", - "Can be restricted to put out Items and/or Steam/No Steam/1 specific Fluid", - "Restricted Output Hatches are given priority for Multiblock Fluid output" }); - } - - public GT_MetaTileEntity_Hatch_Output(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 4, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_Output(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 4, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_Output(int aID, String aName, String aNameRegional, int aTier, String[] aDescription, - int inventorySize) { - super(aID, aName, aNameRegional, aTier, inventorySize, aDescription); - } - - public GT_MetaTileEntity_Hatch_Output(String name, int tier, int slots, String[] description, - ITexture[][][] textures) { - super(name, tier, slots, description, textures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(FLUID_OUT_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(FLUID_OUT_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isLiquidInput(ForgeDirection side) { - return false; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Output(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && mFluid != null) { - IFluidHandler tTileEntity = aBaseMetaTileEntity - .getITankContainerAtSide(aBaseMetaTileEntity.getFrontFacing()); - if (tTileEntity != null) { - GT_Utility.moveFluid( - aBaseMetaTileEntity, - tTileEntity, - aBaseMetaTileEntity.getFrontFacing(), - Math.max(1, mFluid.amount), - null); - } - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setByte("mMode", mMode); - if (isFluidLocked() && lockedFluidName != null && lockedFluidName.length() != 0) - aNBT.setString("lockedFluidName", lockedFluidName); - else aNBT.removeTag("lockedFluidName"); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mMode = aNBT.getByte("mMode"); - if (isFluidLocked()) { - lockedFluidName = aNBT.getString("lockedFluidName"); - } - lockedFluidName = GT_Utility.isStringInvalid(lockedFluidName) ? null : lockedFluidName; - } - - @Override - public boolean doesFillContainers() { - return true; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public boolean displaysItemStack() { - return true; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - public int getLockedDisplaySlot() { - return 3; - } - - @Override - public boolean isValidSlot(int aIndex) { - // Because getStackDisplaySlot() only allow return one int, this place I only can manually set. - return aIndex != getStackDisplaySlot() && aIndex != getLockedDisplaySlot(); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 1; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 0; - } - - @Override - public int getCapacity() { - return 8000 * (1 << mTier); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) - .isGUIClickable()) return; - if (aPlayer.isSneaking()) { - mMode = (byte) ((mMode + 9) % 10); - } else { - mMode = (byte) ((mMode + 1) % 10); - } - final String inBrackets; - switch (mMode) { - case 0 -> { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("108", "Outputs misc. Fluids, Steam and Items")); - this.setLockedFluidName(null); - } - case 1 -> { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("109", "Outputs Steam and Items")); - this.setLockedFluidName(null); - } - case 2 -> { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("110", "Outputs Steam and misc. Fluids")); - this.setLockedFluidName(null); - } - case 3 -> { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("111", "Outputs Steam")); - this.setLockedFluidName(null); - } - case 4 -> { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("112", "Outputs misc. Fluids and Items")); - this.setLockedFluidName(null); - } - case 5 -> { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("113", "Outputs only Items")); - this.setLockedFluidName(null); - } - case 6 -> { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("114", "Outputs only misc. Fluids")); - this.setLockedFluidName(null); - } - case 7 -> { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("115", "Outputs nothing")); - this.setLockedFluidName(null); - } - case 8 -> { - playerThatLockedfluid = new WeakReference<>(aPlayer); - if (mFluid == null) { - this.setLockedFluidName(null); - inBrackets = GT_Utility.trans( - "115.3", - "currently none, will be locked to the next that is put in (or use fluid cell to lock)"); - } else { - this.setLockedFluidName( - this.getDrainableStack() - .getFluid() - .getName()); - inBrackets = this.getDrainableStack() - .getLocalizedName(); - } - GT_Utility.sendChatToPlayer( - aPlayer, - String.format( - "%s (%s)", - GT_Utility.trans("151.1", "Outputs items and 1 specific Fluid"), - inBrackets)); - } - case 9 -> { - playerThatLockedfluid = new WeakReference<>(aPlayer); - if (mFluid == null) { - this.setLockedFluidName(null); - inBrackets = GT_Utility.trans( - "115.3", - "currently none, will be locked to the next that is put in (or use fluid cell to lock)"); - } else { - this.setLockedFluidName( - this.getDrainableStack() - .getFluid() - .getName()); - inBrackets = this.getDrainableStack() - .getLocalizedName(); - } - GT_Utility.sendChatToPlayer( - aPlayer, - String.format("%s (%s)", GT_Utility.trans("151.2", "Outputs 1 specific Fluid"), inBrackets)); - } - } - } - - private boolean tryToLockHatch(EntityPlayer aPlayer, ForgeDirection side) { - if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) - .isGUIClickable()) return false; - if (!isFluidLocked()) return false; - final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); - if (tCurrentItem == null) return false; - FluidStack tFluid = FluidContainerRegistry.getFluidForFilledItem(tCurrentItem); - if (tFluid == null && tCurrentItem.getItem() instanceof IFluidContainerItem) - tFluid = ((IFluidContainerItem) tCurrentItem.getItem()).getFluid(tCurrentItem); - if (tFluid != null) { - if (getLockedFluidName() != null && !getLockedFluidName().equals( - tFluid.getFluid() - .getName())) { - GT_Utility.sendChatToPlayer( - aPlayer, - String.format( - "%s %s", - GT_Utility.trans( - "151.3", - "Hatch is locked to a different fluid. To change the locking, empty it and made it locked to the next fluid with a screwdriver. Currently locked to"), - StatCollector.translateToLocal(getLockedFluidName()))); - } else { - setLockedFluidName( - tFluid.getFluid() - .getName()); - if (mMode == 8) GT_Utility.sendChatToPlayer( - aPlayer, - String.format( - "%s (%s)", - GT_Utility.trans("151.1", "Outputs items and 1 specific Fluid"), - tFluid.getLocalizedName())); - else GT_Utility.sendChatToPlayer( - aPlayer, - String.format( - "%s (%s)", - GT_Utility.trans("151.2", "Outputs 1 specific Fluid"), - tFluid.getLocalizedName())); - } - return true; - } - return false; - } - - public byte getMode() { - return mMode; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - if (tryToLockHatch(aPlayer, side)) return true; - return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - } - - public boolean outputsSteam() { - return mMode < 4; - } - - public boolean outputsLiquids() { - return mMode % 2 == 0 || mMode == 9; - } - - public boolean outputsItems() { - return mMode % 4 < 2 && mMode != 9; - } - - @Override - public String getLockedFluidName() { - return lockedFluidName; - } - - @Override - public void setLockedFluidName(String lockedFluidName) { - this.lockedFluidName = lockedFluidName; - markDirty(); - } - - @Override - public void lockFluid(boolean lock) { - if (lock) { - if (!isFluidLocked()) { - this.mMode = 9; - markDirty(); - } - } else { - this.mMode = 0; - setLockedFluidName(null); - markDirty(); - } - } - - @Override - public boolean isFluidLocked() { - return mMode == 8 || mMode == 9; - } - - @Override - public boolean acceptsFluidLock(String name) { - return true; - } - - @Override - public boolean isEmptyAndAcceptsAnyFluid() { - return mMode == 0 && getFluidAmount() == 0; - } - - @Override - public boolean canStoreFluid(@Nonnull FluidStack fluidStack) { - if (mFluid != null && !GT_Utility.areFluidsEqual(mFluid, fluidStack)) { - return false; - } - if (isFluidLocked()) { - if (lockedFluidName == null) { - return true; - } - return lockedFluidName.equals( - fluidStack.getFluid() - .getName()); - } - if (GT_ModHandler.isSteam(fluidStack)) { - return outputsSteam(); - } - return outputsLiquids(); - } - - @Override - public int getTankPressure() { - return +100; - } - - @Override - protected void onEmptyingContainerWhenEmpty() { - if (this.lockedFluidName == null && this.mFluid != null && isFluidLocked()) { - this.setLockedFluidName( - this.mFluid.getFluid() - .getName()); - final EntityPlayer player; - if (playerThatLockedfluid == null || (player = playerThatLockedfluid.get()) == null) return; - GT_Utility.sendChatToPlayer( - player, - String.format(GT_Utility.trans("151.4", "Successfully locked Fluid to %s"), mFluid.getLocalizedName())); - playerThatLockedfluid = null; - } - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return new String[] { EnumChatFormatting.BLUE + "Output Hatch" + EnumChatFormatting.RESET, "Stored Fluid:", - EnumChatFormatting.GOLD + (mFluid == null ? "No Fluid" : mFluid.getLocalizedName()) - + EnumChatFormatting.RESET, - EnumChatFormatting.GREEN + GT_Utility.formatNumbers(mFluid == null ? 0 : mFluid.amount) - + " L" - + EnumChatFormatting.RESET - + " " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getCapacity()) - + " L" - + EnumChatFormatting.RESET, - (!isFluidLocked() || lockedFluidName == null) ? "Not Locked" - : ("Locked to " + StatCollector.translateToLocal( - FluidRegistry.getFluidStack(lockedFluidName, 1) - .getUnlocalizedName())) }; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(98, 16) - .setSize(71, 45)) - .widget(new FluidLockWidget(this).setPos(149, 41)) - .widget( - new TextWidget("Locked Fluid").setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(101, 20)) - .widget(TextWidget.dynamicString(() -> { - FluidStack fluidStack = FluidRegistry.getFluidStack(lockedFluidName, 1); - return fluidStack != null ? fluidStack.getLocalizedName() : "None"; - }) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setTextAlignment(Alignment.CenterLeft) - .setMaxWidth(65) - .setPos(101, 30)) - .widget(new FakeSyncWidget.ByteSyncer(() -> mMode, val -> mMode = val)); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBus.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBus.java deleted file mode 100644 index 0bfe55cac1..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBus.java +++ /dev/null @@ -1,323 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.ITEM_OUT_SIGN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; -import static gregtech.api.util.GT_Utility.moveMultipleItemStacks; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.Nullable; - -import com.gtnewhorizons.modularui.api.forge.ItemHandlerHelper; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; - -import gregtech.GT_Mod; -import gregtech.api.enums.ItemList; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.widgets.GT_PhantomItemButton; -import gregtech.api.interfaces.IDataCopyable; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IItemLockable; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.extensions.ArrayExt; - -public class GT_MetaTileEntity_Hatch_OutputBus extends GT_MetaTileEntity_Hatch - implements IAddUIWidgets, IItemLockable, IDataCopyable { - - private static final String DATA_STICK_DATA_TYPE = "outputBusFilter"; - private static final String LOCKED_ITEM_NBT_KEY = "lockedItem"; - - protected ItemStack lockedItem = null; - - public GT_MetaTileEntity_Hatch_OutputBus(int aID, String aName, String aNameRegional, int aTier) { - this(aID, aName, aNameRegional, aTier, getSlots(aTier)); - } - - public GT_MetaTileEntity_Hatch_OutputBus(int id, String name, String nameRegional, int tier, int slots) { - super( - id, - name, - nameRegional, - tier, - slots, - ArrayExt.of( - "Item Output for Multiblocks", - "Capacity: " + getSlots(tier) + " stack" + (getSlots(tier) >= 2 ? "s" : ""), - "Left click with data stick to save filter config", - "Right click with data stick to load filter config")); - } - - public GT_MetaTileEntity_Hatch_OutputBus(int aID, String aName, String aNameRegional, int aTier, - String[] aDescription) { - super(aID, aName, aNameRegional, aTier, getSlots(aTier), aDescription); - } - - public GT_MetaTileEntity_Hatch_OutputBus(int aID, String aName, String aNameRegional, int aTier, - String[] aDescription, int inventorySize) { - super(aID, aName, aNameRegional, aTier, inventorySize, aDescription); - } - - public GT_MetaTileEntity_Hatch_OutputBus(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, getSlots(aTier), aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_OutputBus(String name, int tier, int slots, String[] description, - ITexture[][][] textures) { - super(name, tier, slots, description, textures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(ITEM_OUT_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(ITEM_OUT_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - 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_OutputBus(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (!acceptsItemLock() || !(aPlayer instanceof EntityPlayerMP)) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return super.onRightclick(aBaseMetaTileEntity, aPlayer); - } - - final ItemStack dataStick = aPlayer.inventory.getCurrentItem(); - if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return super.onRightclick(aBaseMetaTileEntity, aPlayer); - } - - if (!pasteCopiedData(aPlayer, dataStick.stackTagCompound)) { - aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.output_bus.invalid")); - return false; - } - - aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.output_bus.loaded")); - return true; - - } - - @Override - public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (!acceptsItemLock() || !(aPlayer instanceof EntityPlayerMP)) { - return; - } - final ItemStack dataStick = aPlayer.inventory.getCurrentItem(); - if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) { - return; - } - - dataStick.stackTagCompound = getCopiedData(aPlayer); - dataStick.setStackDisplayName("Output Bus Configuration"); - aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.output_bus.saved")); - } - - @Override - public NBTTagCompound getCopiedData(EntityPlayer player) { - final NBTTagCompound nbt = new NBTTagCompound(); - nbt.setString("type", DATA_STICK_DATA_TYPE); - if (lockedItem != null) { - nbt.setTag(LOCKED_ITEM_NBT_KEY, lockedItem.writeToNBT(new NBTTagCompound())); - } - return nbt; - } - - @Override - public boolean pasteCopiedData(EntityPlayer player, NBTTagCompound nbt) { - if (nbt == null || !DATA_STICK_DATA_TYPE.equals(nbt.getString("type"))) return false; - if (nbt.hasKey(LOCKED_ITEM_NBT_KEY)) { - lockedItem = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag(LOCKED_ITEM_NBT_KEY)); - } else { - lockedItem = null; - } - return true; - } - - @Override - public String getCopiedDataIdentifier(EntityPlayer player) { - return DATA_STICK_DATA_TYPE; - } - - /** - * Attempt to store as many items as possible into the internal inventory of this output bus. If you need atomicity - * you should use {@link gregtech.api.interfaces.tileentity.IHasInventory#addStackToSlot(int, ItemStack)} - * - * @param aStack Assume valid. Will be mutated. Take over the ownership. Caller should not retain a reference to - * this stack if the call returns true. - * @return true if stack is fully accepted. false is stack is partially accepted or nothing is accepted - */ - public boolean storeAll(ItemStack aStack) { - markDirty(); - - if (lockedItem != null && !lockedItem.isItemEqual(aStack)) { - return false; - } - - for (int i = 0, mInventoryLength = mInventory.length; i < mInventoryLength && aStack.stackSize > 0; i++) { - ItemStack tSlot = mInventory[i]; - if (GT_Utility.isStackInvalid(tSlot)) { - int tRealStackLimit = Math.min(getInventoryStackLimit(), aStack.getMaxStackSize()); - if (aStack.stackSize <= tRealStackLimit) { - mInventory[i] = aStack; - return true; - } - mInventory[i] = aStack.splitStack(tRealStackLimit); - } else { - int tRealStackLimit = Math.min(getInventoryStackLimit(), tSlot.getMaxStackSize()); - if (tSlot.stackSize < tRealStackLimit && tSlot.isItemEqual(aStack) - && ItemStack.areItemStackTagsEqual(tSlot, aStack)) { - if (aStack.stackSize + tSlot.stackSize <= tRealStackLimit) { - mInventory[i].stackSize += aStack.stackSize; - return true; - } else { - // more to serve - aStack.stackSize -= tRealStackLimit - tSlot.stackSize; - mInventory[i].stackSize = tRealStackLimit; - } - } - } - } - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing(); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && (aTick & 0x7) == 0) { - final IInventory tTileEntity = aBaseMetaTileEntity - .getIInventoryAtSide(aBaseMetaTileEntity.getFrontFacing()); - if (tTileEntity != null) { - moveMultipleItemStacks( - aBaseMetaTileEntity, - tTileEntity, - aBaseMetaTileEntity.getFrontFacing(), - aBaseMetaTileEntity.getBackFacing(), - null, - false, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1, - mInventory.length); - 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); - if (lockedItem != null) { - aNBT.setTag(LOCKED_ITEM_NBT_KEY, lockedItem.writeToNBT(new NBTTagCompound())); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey(LOCKED_ITEM_NBT_KEY)) { - lockedItem = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag(LOCKED_ITEM_NBT_KEY)); - } - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - switch (mTier) { - case 0 -> getBaseMetaTileEntity().add1by1Slot(builder); - case 1 -> getBaseMetaTileEntity().add2by2Slots(builder); - case 2 -> getBaseMetaTileEntity().add3by3Slots(builder); - default -> getBaseMetaTileEntity().add4by4Slots(builder); - } - - if (acceptsItemLock()) { - builder.widget( - new GT_PhantomItemButton(this).setPos(getGUIWidth() - 25, 40) - .setBackground(GT_PhantomItemButton.FILTER_BACKGROUND)); - } - } - - @Override - public void setLockedItem(@Nullable ItemStack itemStack) { - if (itemStack == null) { - clearLock(); - } else { - lockedItem = ItemHandlerHelper.copyStackWithSize(itemStack, 1); - } - } - - @Nullable - @Override - public ItemStack getLockedItem() { - return lockedItem; - } - - @Override - public void clearLock() { - lockedItem = null; - } - - @Override - public boolean isLocked() { - return lockedItem != null; - } - - @Override - public boolean acceptsItemLock() { - return true; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_QuadrupleHumongous.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_QuadrupleHumongous.java deleted file mode 100644 index e0ab7acf95..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_QuadrupleHumongous.java +++ /dev/null @@ -1,27 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -public class GT_MetaTileEntity_Hatch_QuadrupleHumongous extends GT_MetaTileEntity_Hatch_MultiInput { - - public GT_MetaTileEntity_Hatch_QuadrupleHumongous(int aID, int aSlot, String aName, String aNameRegional) { - super(aID, aSlot, aName, aNameRegional, 13); - } - - public GT_MetaTileEntity_Hatch_QuadrupleHumongous(String aName, int aSlot, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aSlot, aTier, aDescription, aTextures); - } - - @Override - public int getCapacityPerTank(int aTier, int aSlot) { - return 500_000_000; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_QuadrupleHumongous(mName, getMaxType(), mTier, mDescriptionArray, mTextures); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MagHatch.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MagHatch.java deleted file mode 100644 index 8a462d12c6..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MagHatch.java +++ /dev/null @@ -1,103 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.AuthorFourIsTheNumber; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_EMS_HOUSING; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_EMS_HOUSING_GLOW; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_IndustrialElectromagneticSeparator; - -public class GT_MetaTileEntity_MagHatch extends GT_MetaTileEntity_Hatch { - - public GT_MetaTileEntity_MagHatch(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 5, 1, "Holds electromagnet for the Magnetic Flux Exhibitor"); - } - - public GT_MetaTileEntity_MagHatch(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription[0], aTextures); - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll(this.mDescriptionArray, AuthorFourIsTheNumber); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new SlotWidget(inventoryHandler, 0) - .setFilter(GT_MetaTileEntity_IndustrialElectromagneticSeparator::isValidElectromagnet) - .setAccess(true, true) - .setPos(79, 34)); - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.builder() - .addIcon(OVERLAY_EMS_HOUSING) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_EMS_HOUSING_GLOW) - .extFacing() - .glow() - .build() }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.builder() - .addIcon(OVERLAY_EMS_HOUSING) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_EMS_HOUSING_GLOW) - .extFacing() - .glow() - .build() }; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_MagHatch(mName, mTier, mDescriptionArray, mTextures); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java deleted file mode 100644 index 6c2df9b082..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java +++ /dev/null @@ -1,2754 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static mcp.mobius.waila.api.SpecialChars.GREEN; -import static mcp.mobius.waila.api.SpecialChars.RED; -import static mcp.mobius.waila.api.SpecialChars.RESET; - -import java.time.Duration; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.function.IntConsumer; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.TestOnly; - -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.VoidingMode; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.fluid.IFluidStore; -import gregtech.api.interfaces.metatileentity.IItemLockable; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.ControllerWithOptionalFeatures; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.modularui.IBindPlayerInventoryUI; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SingleRecipeCheck; -import gregtech.api.util.GT_ClientPreference; -import gregtech.api.util.GT_ExoticEnergyInputHelper; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Util; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.GT_Waila; -import gregtech.api.util.OutputHatchWrapper; -import gregtech.api.util.VoidProtectionHelper; -import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.client.GT_SoundLoop; -import gregtech.common.GT_Pollution; -import gregtech.common.config.machinestats.ConfigMachines; -import gregtech.common.gui.modularui.widget.CheckRecipeResultSyncer; -import gregtech.common.gui.modularui.widget.ShutDownReasonSyncer; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_CraftingInput_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Input_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Output_ME; -import gregtech.common.tileentities.machines.IDualInputHatch; -import gregtech.common.tileentities.machines.IDualInputInventory; -import gregtech.common.tileentities.machines.IRecipeProcessingAwareHatch; -import gregtech.common.tileentities.machines.ISmartInputHatch; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine; -import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; -import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity - implements ControllerWithOptionalFeatures, IAddGregtechLogo, IAddUIWidgets, IBindPlayerInventoryUI { - - public static boolean disableMaintenance; - public boolean hasMaintenanceChecks = getDefaultHasMaintenanceChecks(); - public boolean mMachine = false, mWrench = false, mScrewdriver = false, mSoftHammer = false, mHardHammer = false, - mSolderingTool = false, mCrowbar = false, mRunningOnLoad = false; - public boolean mStructureChanged = false; - public int mPollution = 0, mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mEfficiencyIncrease = 0, - mStartUpCheck = 100, mRuntime = 0, mEfficiency = 0; - public volatile boolean mUpdated = false; - public int mUpdate = 0; - public ItemStack[] mOutputItems = null; - public FluidStack[] mOutputFluids = null; - public String mNEI; - public int damageFactorLow = 5; - public float damageFactorHigh = 0.6f; - public int machineMode = 0; - public List machineModeIcons = new ArrayList(); - - public boolean mLockedToSingleRecipe = getDefaultRecipeLockingMode(); - protected boolean inputSeparation = getDefaultInputSeparationMode(); - protected VoidingMode voidingMode = getDefaultVoidingMode(); - protected boolean batchMode = getDefaultBatchMode(); - protected @Nonnull CheckRecipeResult checkRecipeResult = CheckRecipeResultRegistry.NONE; - - protected static final String INPUT_SEPARATION_NBT_KEY = "inputSeparation"; - protected static final String VOID_EXCESS_NBT_KEY = "voidExcess"; - protected static final String VOIDING_MODE_NBT_KEY = "voidingMode"; - protected static final String BATCH_MODE_NBT_KEY = "batchMode"; - protected SingleRecipeCheck mSingleRecipeCheck = null; - - public ArrayList mInputHatches = new ArrayList<>(); - public ArrayList mOutputHatches = new ArrayList<>(); - public ArrayList mInputBusses = new ArrayList<>(); - public ArrayList mOutputBusses = new ArrayList<>(); - public ArrayList mDualInputHatches = new ArrayList<>(); - public ArrayList mSmartInputHatches = new ArrayList<>(); - public ArrayList mDynamoHatches = new ArrayList<>(); - public ArrayList mMufflerHatches = new ArrayList<>(); - public ArrayList mEnergyHatches = new ArrayList<>(); - public ArrayList mMaintenanceHatches = new ArrayList<>(); - protected List mExoticEnergyHatches = new ArrayList<>(); - protected final ProcessingLogic processingLogic; - @SideOnly(Side.CLIENT) - protected GT_SoundLoop activitySoundLoop; - - protected long mLastWorkingTick = 0, mTotalRunTime = 0; - private static final int CHECK_INTERVAL = 100; // How often should we check for a new recipe on an idle machine? - private final int randomTickOffset = (int) (Math.random() * CHECK_INTERVAL + 1); - - protected static final byte INTERRUPT_SOUND_INDEX = 8; - protected static final byte PROCESS_START_SOUND_INDEX = 1; - - public GT_MetaTileEntity_MultiBlockBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 2); - this.processingLogic = null; - GT_MetaTileEntity_MultiBlockBase.disableMaintenance = ConfigMachines.disableMaintenanceChecks; - this.damageFactorLow = ConfigMachines.damageFactorLow; - this.damageFactorHigh = ConfigMachines.damageFactorHigh; - this.mNEI = ""; - if (!shouldCheckMaintenance()) fixAllIssues(); - } - - public GT_MetaTileEntity_MultiBlockBase(String aName) { - super(aName, 2); - this.processingLogic = createProcessingLogic(); - GT_MetaTileEntity_MultiBlockBase.disableMaintenance = ConfigMachines.disableMaintenanceChecks; - this.damageFactorLow = ConfigMachines.damageFactorLow; - this.damageFactorHigh = ConfigMachines.damageFactorHigh; - if (!shouldCheckMaintenance()) fixAllIssues(); - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCoverID) { - return side != getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (supportsSingleRecipeLocking()) { - mLockedToSingleRecipe = !mLockedToSingleRecipe; - if (mLockedToSingleRecipe) { - GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("223", "Single recipe locking enabled. Will lock to next recipe.")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("220", "Single recipe locking disabled.")); - mSingleRecipeCheck = null; - } - } - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex > 0; - } - - @Override - public int getProgresstime() { - return mProgresstime; - } - - @Override - public int maxProgresstime() { - return mMaxProgresstime; - } - - public long getTotalRuntimeInTicks() { - return mTotalRunTime; - } - - @Override - public int increaseProgress(int aProgress) { - return aProgress; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mEUt", mEUt); - aNBT.setInteger("mProgresstime", mProgresstime); - aNBT.setInteger("mMaxProgresstime", mMaxProgresstime); - aNBT.setInteger("mEfficiencyIncrease", mEfficiencyIncrease); - aNBT.setInteger("mEfficiency", mEfficiency); - aNBT.setInteger("mPollution", mPollution); - aNBT.setInteger("mRuntime", mRuntime); - aNBT.setLong("mTotalRunTime", mTotalRunTime); - aNBT.setLong("mLastWorkingTick", mLastWorkingTick); - aNBT.setString("checkRecipeResultID", checkRecipeResult.getID()); - aNBT.setTag("checkRecipeResult", checkRecipeResult.writeToNBT(new NBTTagCompound())); - - if (supportsMachineModeSwitch()) { - aNBT.setInteger("machineMode", machineMode); - } - - if (supportsSingleRecipeLocking()) { - aNBT.setBoolean("mLockedToSingleRecipe", mLockedToSingleRecipe); - if (mLockedToSingleRecipe && mSingleRecipeCheck != null) - aNBT.setTag("mSingleRecipeCheck", mSingleRecipeCheck.writeToNBT()); - } - - if (mOutputItems != null) { - aNBT.setInteger("mOutputItemsLength", mOutputItems.length); - for (int i = 0; i < mOutputItems.length; i++) if (mOutputItems[i] != null) { - GT_Utility.saveItem(aNBT, "mOutputItem" + i, mOutputItems[i]); - } - } - if (mOutputFluids != null) { - aNBT.setInteger("mOutputFluidsLength", mOutputFluids.length); - for (int i = 0; i < mOutputFluids.length; i++) if (mOutputFluids[i] != null) { - NBTTagCompound tNBT = new NBTTagCompound(); - mOutputFluids[i].writeToNBT(tNBT); - aNBT.setTag("mOutputFluids" + i, tNBT); - } - } - aNBT.setBoolean("mWrench", mWrench); - aNBT.setBoolean("mScrewdriver", mScrewdriver); - aNBT.setBoolean("mSoftHammer", mSoftHammer); - aNBT.setBoolean("mHardHammer", mHardHammer); - aNBT.setBoolean("mSolderingTool", mSolderingTool); - aNBT.setBoolean("mCrowbar", mCrowbar); - aNBT.setBoolean(BATCH_MODE_NBT_KEY, batchMode); - aNBT.setBoolean(INPUT_SEPARATION_NBT_KEY, inputSeparation); - aNBT.setString(VOIDING_MODE_NBT_KEY, voidingMode.name); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mEUt = aNBT.getInteger("mEUt"); - mProgresstime = aNBT.getInteger("mProgresstime"); - mMaxProgresstime = aNBT.getInteger("mMaxProgresstime"); - if (mMaxProgresstime > 0) mRunningOnLoad = true; - mEfficiencyIncrease = aNBT.getInteger("mEfficiencyIncrease"); - mEfficiency = aNBT.getInteger("mEfficiency"); - mPollution = aNBT.getInteger("mPollution"); - mRuntime = aNBT.getInteger("mRuntime"); - mTotalRunTime = aNBT.getLong("mTotalRunTime"); - mLastWorkingTick = aNBT.getLong("mLastWorkingTick"); - - String checkRecipeResultID = aNBT.getString("checkRecipeResultID"); - if (CheckRecipeResultRegistry.isRegistered(checkRecipeResultID)) { - CheckRecipeResult result = CheckRecipeResultRegistry.getSampleFromRegistry(checkRecipeResultID) - .newInstance(); - result.readFromNBT(aNBT.getCompoundTag("checkRecipeResult")); - checkRecipeResult = result; - } - - if (aNBT.hasKey("machineMode")) { - machineMode = aNBT.getInteger("machineMode"); - } - if (supportsSingleRecipeLocking()) { - mLockedToSingleRecipe = aNBT.getBoolean("mLockedToSingleRecipe"); - if (mLockedToSingleRecipe && aNBT.hasKey("mSingleRecipeCheck", Constants.NBT.TAG_COMPOUND)) { - SingleRecipeCheck c = loadSingleRecipeChecker(aNBT.getCompoundTag("mSingleRecipeCheck")); - if (c != null) mSingleRecipeCheck = c; - // the old recipe is gone. we disable the machine to prevent making garbage in case of shared inputs - // maybe use a better way to inform player in the future. - else getBaseMetaTileEntity().disableWorking(); - } - } - batchMode = aNBT.getBoolean(BATCH_MODE_NBT_KEY); - inputSeparation = aNBT.getBoolean(INPUT_SEPARATION_NBT_KEY); - if (aNBT.hasKey(VOIDING_MODE_NBT_KEY, Constants.NBT.TAG_STRING)) { - voidingMode = VoidingMode.fromName(aNBT.getString(VOIDING_MODE_NBT_KEY)); - } else if (aNBT.hasKey(VOID_EXCESS_NBT_KEY)) { - // backward compatibility - voidingMode = aNBT.getBoolean(VOID_EXCESS_NBT_KEY) ? VoidingMode.VOID_ALL : VoidingMode.VOID_NONE; - } - if (!getAllowedVoidingModes().contains(voidingMode)) voidingMode = getDefaultVoidingMode(); - - int aOutputItemsLength = aNBT.getInteger("mOutputItemsLength"); - if (aOutputItemsLength > 0) { - mOutputItems = new ItemStack[aOutputItemsLength]; - for (int i = 0; i < mOutputItems.length; i++) - mOutputItems[i] = GT_Utility.loadItem(aNBT, "mOutputItem" + i); - } - - int aOutputFluidsLength = aNBT.getInteger("mOutputFluidsLength"); - if (aOutputFluidsLength > 0) { - mOutputFluids = new FluidStack[aOutputFluidsLength]; - for (int i = 0; i < mOutputFluids.length; i++) - mOutputFluids[i] = GT_Utility.loadFluid(aNBT, "mOutputFluids" + i); - } - if (shouldCheckMaintenance()) { - mWrench = aNBT.getBoolean("mWrench"); - mScrewdriver = aNBT.getBoolean("mScrewdriver"); - mSoftHammer = aNBT.getBoolean("mSoftHammer"); - mHardHammer = aNBT.getBoolean("mHardHammer"); - mSolderingTool = aNBT.getBoolean("mSolderingTool"); - mCrowbar = aNBT.getBoolean("mCrowbar"); - } else fixAllIssues(); - } - - protected SingleRecipeCheck loadSingleRecipeChecker(NBTTagCompound aNBT) { - return SingleRecipeCheck.tryLoad(getRecipeMap(), aNBT); - } - - public boolean saveOtherHatchConfiguration(EntityPlayer player) { - return true; - } - - public boolean loadOtherHatchConfiguration(EntityPlayer player) { - return true; - } - - @Override - public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isServerSide() && GT_Util.saveMultiblockInputConfiguration(this, aPlayer)) { - aPlayer.addChatComponentMessage(new ChatComponentTranslation("GT5U.MULTI_MACHINE_CONFIG.SAVE")); - return; - } - super.onLeftclick(aBaseMetaTileEntity, aPlayer); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (GT_Util.hasMultiblockInputConfiguration(aPlayer.getHeldItem())) { - if (aBaseMetaTileEntity.isServerSide()) { - if (GT_Util.loadMultiblockInputConfiguration(this, aPlayer)) { - aPlayer.addChatComponentMessage(new ChatComponentTranslation("GT5U.MULTI_MACHINE_CONFIG.LOAD")); - } else { - aPlayer - .addChatComponentMessage(new ChatComponentTranslation("GT5U.MULTI_MACHINE_CONFIG.LOAD.FAIL")); - } - } - return true; - } - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public byte getTileEntityBaseType() { - return 2; - } - - /** - * Set the structure as having changed, and trigger an update. - */ - public void onStructureChange() { - mStructureChanged = true; - } - - @Override - public void onMachineBlockUpdate() { - mUpdated = true; - } - - /** - * ClearHatches as a part of structure check. If your multiblock has any hatches that need clearing override this - * method, call super, and clear your own hatches - */ - public void clearHatches() { - mInputHatches.clear(); - mInputBusses.clear(); - mOutputHatches.clear(); - mOutputBusses.clear(); - mDynamoHatches.clear(); - mEnergyHatches.clear(); - setMufflers(false); - mMufflerHatches.clear(); - mMaintenanceHatches.clear(); - mDualInputHatches.clear(); - mSmartInputHatches.clear(); - } - - public boolean checkStructure(boolean aForceReset) { - return checkStructure(aForceReset, getBaseMetaTileEntity()); - } - - public boolean checkStructure(boolean aForceReset, IGregTechTileEntity aBaseMetaTileEntity) { - if (!aBaseMetaTileEntity.isServerSide()) return mMachine; - // Only trigger an update if forced (from onPostTick, generally), or if the structure has changed - if ((mStructureChanged || aForceReset)) { - clearHatches(); - mMachine = checkMachine(aBaseMetaTileEntity, mInventory[1]); - } - mStructureChanged = false; - return mMachine; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - // Time Counter - mTotalRunTime++; - if (mEfficiency < 0) mEfficiency = 0; - if (mUpdated) { - // duct tape fix for too many updates on an overloaded server, causing the structure check to not run - if (mUpdate <= 0) mUpdate = 50; - mUpdated = false; - } - if (--mUpdate == 0 || --mStartUpCheck == 0) { - checkStructure(true, aBaseMetaTileEntity); - } - - if (mStartUpCheck < 0) { - if (mMachine) { - checkMaintenance(); - if (getRepairStatus() > 0) { - runMachine(aBaseMetaTileEntity, aTick); - } else if (aBaseMetaTileEntity.isAllowedToWork()) { - stopMachine(ShutDownReasonRegistry.NO_REPAIR); - } - } else if (aBaseMetaTileEntity.isAllowedToWork()) { - stopMachine(ShutDownReasonRegistry.STRUCTURE_INCOMPLETE); - } - } - aBaseMetaTileEntity.setErrorDisplayID( - (aBaseMetaTileEntity.getErrorDisplayID() & ~127) | (mWrench ? 0 : 1) - | (mScrewdriver ? 0 : 2) - | (mSoftHammer ? 0 : 4) - | (mHardHammer ? 0 : 8) - | (mSolderingTool ? 0 : 16) - | (mCrowbar ? 0 : 32) - | (mMachine ? 0 : 64)); - aBaseMetaTileEntity.setActive(mMaxProgresstime > 0); - boolean active = aBaseMetaTileEntity.isActive() && mPollution > 0; - setMufflers(active); - } else { - if (!aBaseMetaTileEntity.hasMufflerUpgrade()) { - doActivitySound(getActivitySoundLoop()); - } - } - } - - @Override - public void onTickFail(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onTickFail(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - aBaseMetaTileEntity.disableWorking(); - checkRecipeResult = CheckRecipeResultRegistry.CRASH; - } - } - - public void checkMaintenance() { - if (!shouldCheckMaintenance()) return; - - if (getRepairStatus() != getIdealStatus()) { - for (GT_MetaTileEntity_Hatch_Maintenance tHatch : filterValidMTEs(mMaintenanceHatches)) { - if (tHatch.mAuto) tHatch.autoMaintainance(); - if (tHatch.mWrench) mWrench = true; - if (tHatch.mScrewdriver) mScrewdriver = true; - if (tHatch.mSoftHammer) mSoftHammer = true; - if (tHatch.mHardHammer) mHardHammer = true; - if (tHatch.mSolderingTool) mSolderingTool = true; - if (tHatch.mCrowbar) mCrowbar = true; - - tHatch.mWrench = false; - tHatch.mScrewdriver = false; - tHatch.mSoftHammer = false; - tHatch.mHardHammer = false; - tHatch.mSolderingTool = false; - tHatch.mCrowbar = false; - } - } - } - - /** - * Starts checking recipe with some operations needed to actually run the check. Overriding this without due care - * may result in dupe of items, hence it's marked as final. - *

- * See {@link #createProcessingLogic()} or {@link #checkProcessing()} for what you want to override. - * - * @return If successfully found recipe and/or started processing - */ - protected final boolean checkRecipe() { - startRecipeProcessing(); - CheckRecipeResult result = checkProcessing(); - if (!CheckRecipeResultRegistry.isRegistered(result.getID())) { - throw new RuntimeException(String.format("Result %s is not registered for registry", result.getID())); - } - if (result.wasSuccessful()) { - sendStartMultiBlockSoundLoop(); - } - this.checkRecipeResult = result; - endRecipeProcessing(); - // Don't use `result` here because `endRecipeProcessing()` might mutate `this.checkRecipeResult` - return this.checkRecipeResult.wasSuccessful(); - } - - private boolean shouldCheckRecipeThisTick(long aTick) { - // do a recipe check if any crafting input hatch just got pushed in items - boolean shouldCheck = false; - // check all of them (i.e. do not return early) to reset the state of all of them. - for (IDualInputHatch craftingInputMe : mDualInputHatches) { - shouldCheck |= craftingInputMe.justUpdated(); - } - if (shouldCheck) return true; - // Do the same for Smart Input Hatches - for (ISmartInputHatch smartInputHatch : mSmartInputHatches) { - shouldCheck |= smartInputHatch.justUpdated(); - } - if (shouldCheck) return true; - - // Perform more frequent recipe change after the machine just shuts down. - long timeElapsed = mTotalRunTime - mLastWorkingTick; - - if (timeElapsed >= CHECK_INTERVAL) return (mTotalRunTime + randomTickOffset) % CHECK_INTERVAL == 0; - // Batch mode should be a lot less aggressive at recipe checking - if (!isBatchModeEnabled()) { - return timeElapsed == 5 || timeElapsed == 12 - || timeElapsed == 20 - || timeElapsed == 30 - || timeElapsed == 40 - || timeElapsed == 55 - || timeElapsed == 70 - || timeElapsed == 85; - } - return false; - } - - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (mMaxProgresstime > 0 && doRandomMaintenanceDamage()) { - if (onRunningTick(mInventory[1])) { - markDirty(); - if (!polluteEnvironment(getPollutionPerTick(mInventory[1]))) { - stopMachine(ShutDownReasonRegistry.POLLUTION_FAIL); - } - if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) { - if (mOutputItems != null) { - for (ItemStack tStack : mOutputItems) { - if (tStack != null) { - try { - GT_Mod.achievements.issueAchivementHatch( - aBaseMetaTileEntity.getWorld() - .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), - tStack); - } catch (Exception ignored) {} - addOutput(tStack); - } - } - mOutputItems = null; - } - if (mOutputFluids != null) { - addFluidOutputs(mOutputFluids); - if (mOutputFluids.length > 1) { - try { - GT_Mod.achievements.issueAchievement( - aBaseMetaTileEntity.getWorld() - .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), - "oilplant"); - } catch (Exception ignored) {} - } - mOutputFluids = null; - } - mEfficiency = Math.max( - 0, - Math.min( - mEfficiency + mEfficiencyIncrease, - getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000))); - mOutputItems = null; - mProgresstime = 0; - mMaxProgresstime = 0; - mEfficiencyIncrease = 0; - mLastWorkingTick = mTotalRunTime; - if (aBaseMetaTileEntity.isAllowedToWork()) { - checkRecipe(); - } - } - } - } else { - // Check if the machine is enabled in the first place! - if (aBaseMetaTileEntity.isAllowedToWork()) { - - if (shouldCheckRecipeThisTick(aTick) || aBaseMetaTileEntity.hasWorkJustBeenEnabled() - || aBaseMetaTileEntity.hasInventoryBeenModified()) { - if (checkRecipe()) { - markDirty(); - } - } - if (mMaxProgresstime <= 0) mEfficiency = Math.max(0, mEfficiency - 1000); - } - } - } - - public boolean polluteEnvironment(int aPollutionLevel) { - mPollution += aPollutionLevel; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - if (mPollution >= 10000) { - if (tHatch.polluteEnvironment(this)) { - mPollution -= 10000; - } - } else { - break; - } - } - return mPollution < 10000; - } - - protected void sendStartMultiBlockSoundLoop() { - if (getProcessStartSound() != null) { - sendLoopStart(PROCESS_START_SOUND_INDEX); - } - } - - @Override - public void doSound(byte aIndex, double aX, double aY, double aZ) { - super.doSound(aIndex, aX, aY, aZ); - switch (aIndex) { - case PROCESS_START_SOUND_INDEX -> { - if (getProcessStartSound() != null) - GT_Utility.doSoundAtClient(getProcessStartSound(), getTimeBetweenProcessSounds(), 1.0F, aX, aY, aZ); - } - case INTERRUPT_SOUND_INDEX -> GT_Utility - .doSoundAtClient(SoundResource.IC2_MACHINES_INTERRUPT_ONE, 100, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == PROCESS_START_SOUND_INDEX) { - if (getProcessStartSound() != null) - GT_Utility.doSoundAtClient(getProcessStartSound(), getTimeBetweenProcessSounds(), 1.0F, aX, aY, aZ); - } - } - - @SideOnly(Side.CLIENT) - protected void doActivitySound(ResourceLocation activitySound) { - if (getBaseMetaTileEntity().isActive() && activitySound != null) { - if (activitySoundLoop == null) { - activitySoundLoop = new GT_SoundLoop(activitySound, getBaseMetaTileEntity(), false, true); - Minecraft.getMinecraft() - .getSoundHandler() - .playSound(activitySoundLoop); - } - } else { - if (activitySoundLoop != null) { - activitySoundLoop = null; - } - } - } - - /** - * @return Time before the start process sound is played again - */ - protected int getTimeBetweenProcessSounds() { - return 100; - } - - /** - * @return Sound that will be played once, when the recipe check was valid - */ - protected SoundResource getProcessStartSound() { - return null; - } - - /** - * @return Sound that will be looped for as long as the machine is doing a recipe - */ - @SideOnly(Side.CLIENT) - protected ResourceLocation getActivitySoundLoop() { - return null; - } - - /** - * Called every tick the Machine runs - */ - public boolean onRunningTick(ItemStack aStack) { - if (mEUt > 0) { - addEnergyOutput(((long) mEUt * mEfficiency) / 10000); - return true; - } - if (mEUt < 0) { - if (!drainEnergyInput(getActualEnergyUsage())) { - stopMachine(ShutDownReasonRegistry.POWER_LOSS); - return false; - } - } - return true; - } - - protected long getActualEnergyUsage() { - return ((long) -mEUt * 10_000) / Math.max(1000, mEfficiency); - } - - /** - * Checks if this is a Correct Machine Part for this kind of Machine (Turbine Rotor for example) - */ - public abstract boolean isCorrectMachinePart(ItemStack aStack); - - /** - * @deprecated Use {@link #createProcessingLogic()} or {@link #checkProcessing()} - */ - @Deprecated - public boolean checkRecipe(ItemStack aStack) { - return false; - } - - /** - * Checks recipe and setup machine if it's successful. - *

- * For generic machine working with recipemap, use {@link #createProcessingLogic()} to make use of shared codebase. - */ - @Nonnull - public CheckRecipeResult checkProcessing() { - // If no logic is found, try legacy checkRecipe - if (processingLogic == null) { - return checkRecipe(mInventory[1]) ? CheckRecipeResultRegistry.SUCCESSFUL - : CheckRecipeResultRegistry.NO_RECIPE; - } - - setupProcessingLogic(processingLogic); - - CheckRecipeResult result = doCheckRecipe(); - result = postCheckRecipe(result, processingLogic); - // inputs are consumed at this point - updateSlots(); - if (!result.wasSuccessful()) return result; - - mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - mEfficiencyIncrease = 10000; - mMaxProgresstime = processingLogic.getDuration(); - setEnergyUsage(processingLogic); - - mOutputItems = processingLogic.getOutputItems(); - mOutputFluids = processingLogic.getOutputFluids(); - - return result; - } - - /** - * @return If controller slot should be considered as inputs for {@link #doCheckRecipe} - */ - protected boolean canUseControllerSlotForRecipe() { - return true; - } - - /** - * Initializes processing logic for use. Unlike {@link #createProcessingLogic}, this method is called - * every time checking for recipes. - */ - protected void setupProcessingLogic(ProcessingLogic logic) { - logic.clear(); - logic.setMachine(this); - logic.setRecipeMapSupplier(this::getRecipeMap); - logic.setVoidProtection(protectsExcessItem(), protectsExcessFluid()); - logic.setBatchSize(isBatchModeEnabled() ? getMaxBatchSize() : 1); - logic.setRecipeLocking(this, isRecipeLockingEnabled()); - setProcessingLogicPower(logic); - } - - /** - * Initializes processing logic for use, specifically for power-related parameters. - * Unlike {@link #createProcessingLogic}, this method is called every time checking for recipes. - */ - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(getAverageInputVoltage()); - logic.setAvailableAmperage(getMaxInputAmps()); - logic.setAmperageOC(mEnergyHatches.size() != 1); - } - - protected boolean supportsCraftingMEBuffer() { - return true; - } - - /** - * Iterates over hatches and tries to find recipe. Assume {@link #processingLogic} is already set up for use. - * If return value is successful, inputs are consumed. - */ - @Nonnull - protected CheckRecipeResult doCheckRecipe() { - CheckRecipeResult result = CheckRecipeResultRegistry.NO_RECIPE; - // check crafting input hatches first - if (supportsCraftingMEBuffer()) { - for (IDualInputHatch dualInputHatch : mDualInputHatches) { - for (var it = dualInputHatch.inventories(); it.hasNext();) { - IDualInputInventory slot = it.next(); - processingLogic.setInputItems(slot.getItemInputs()); - processingLogic.setInputFluids(slot.getFluidInputs()); - CheckRecipeResult foundResult = processingLogic.process(); - if (foundResult.wasSuccessful()) { - return foundResult; - } - if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { - // Recipe failed in interesting way, so remember that and continue searching - result = foundResult; - } - } - } - } - - processingLogic.setInputFluids(getStoredFluids()); - - if (isInputSeparationEnabled()) { - if (mInputBusses.isEmpty()) { - CheckRecipeResult foundResult = processingLogic.process(); - if (foundResult.wasSuccessful()) { - return foundResult; - } - if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { - // Recipe failed in interesting way, so remember that and continue searching - result = foundResult; - } - } else { - for (GT_MetaTileEntity_Hatch_InputBus bus : mInputBusses) { - if (bus instanceof GT_MetaTileEntity_Hatch_CraftingInput_ME) { - continue; - } - List inputItems = new ArrayList<>(); - for (int i = bus.getSizeInventory() - 1; i >= 0; i--) { - ItemStack stored = bus.getStackInSlot(i); - if (stored != null) { - inputItems.add(stored); - } - } - if (canUseControllerSlotForRecipe() && getControllerSlot() != null) { - inputItems.add(getControllerSlot()); - } - processingLogic.setInputItems(inputItems.toArray(new ItemStack[0])); - CheckRecipeResult foundResult = processingLogic.process(); - if (foundResult.wasSuccessful()) { - return foundResult; - } - if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { - // Recipe failed in interesting way, so remember that and continue searching - result = foundResult; - } - } - } - } else { - List inputItems = getStoredInputs(); - if (canUseControllerSlotForRecipe() && getControllerSlot() != null) { - inputItems.add(getControllerSlot()); - } - processingLogic.setInputItems(inputItems); - CheckRecipeResult foundResult = processingLogic.process(); - if (foundResult.wasSuccessful()) { - return foundResult; - } - if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { - // Recipe failed in interesting way, so remember that - result = foundResult; - } - } - return result; - } - - /** - * Performs additional check for {@link #processingLogic} after all the calculations are done. - * As many as checks should be done inside of custom {@link ProcessingLogic}, which you can specify with - * {@link #createProcessingLogic()}, because when this method is called, inputs might have been already consumed. - * However, certain checks cannot be done like that; Checking energy overflow should be suppressed for - * long-power machines for example. - * - * @return Modified (or not modified) result - */ - @Nonnull - protected CheckRecipeResult postCheckRecipe(@Nonnull CheckRecipeResult result, - @Nonnull ProcessingLogic processingLogic) { - if (result.wasSuccessful() && processingLogic.getCalculatedEut() > Integer.MAX_VALUE) { - return CheckRecipeResultRegistry.POWER_OVERFLOW; - } - return result; - } - - /** - * Called after {@link #doCheckRecipe} and {@link #postCheckRecipe} being successful. - * Override to set energy usage for this machine. - */ - protected void setEnergyUsage(ProcessingLogic processingLogic) { - // getCalculatedEut() is guaranteed to not exceed int by postCheckRecipe() - mEUt = (int) processingLogic.getCalculatedEut(); - if (mEUt > 0) { - mEUt = (-mEUt); - } - } - - protected int getMaxBatchSize() { - return 128; - } - - /** - * Checks the Machine. You have to assign the MetaTileEntities for the Hatches here. - */ - public abstract boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack); - - /** - * Gets the maximum Efficiency that spare Part can get (0 - 10000) - */ - public abstract int getMaxEfficiency(ItemStack aStack); - - /** - * Gets the pollution this Device outputs to a Muffler per tick (10000 = one Pullution Block) - */ - public int getPollutionPerTick(ItemStack aStack) { - return getPollutionPerSecond(aStack) / 20; - } - - /** - * Gets the pollution produced per second by this multiblock, default to 0. Override this with its actual value in - * the code of the multiblock. - */ - public int getPollutionPerSecond(ItemStack aStack) { - return 0; - } - - /** - * Gets the damage to the ItemStack, usually 0 or 1. - */ - public abstract int getDamageToComponent(ItemStack aStack); - - /** - * If it explodes when the Component has to be replaced. - */ - public abstract boolean explodesOnComponentBreak(ItemStack aStack); - - /** - * @deprecated Use {@link #stopMachine(ShutDownReason)} - */ - @Deprecated - public void stopMachine() { - stopMachine(ShutDownReasonRegistry.NONE); - } - - /** - * @deprecated Use {@link #stopMachine(ShutDownReason)} - */ - @Deprecated - public void criticalStopMachine() { - stopMachine(ShutDownReasonRegistry.CRITICAL_NONE); - } - - public void stopMachine(@Nonnull ShutDownReason reason) { - if (!ShutDownReasonRegistry.isRegistered(reason.getID())) { - throw new RuntimeException(String.format("Reason %s is not registered for registry", reason.getID())); - } - mLastWorkingTick = mTotalRunTime; - mOutputItems = null; - mOutputFluids = null; - mEUt = 0; - mEfficiency = 0; - mProgresstime = 0; - mMaxProgresstime = 0; - mEfficiencyIncrease = 0; - getBaseMetaTileEntity().disableWorking(); - getBaseMetaTileEntity().setShutDownReason(reason); - getBaseMetaTileEntity().setShutdownStatus(true); - if (reason.wasCritical()) { - sendSound(INTERRUPT_SOUND_INDEX); - } - } - - public int getRepairStatus() { - return (mWrench ? 1 : 0) + (mScrewdriver ? 1 : 0) - + (mSoftHammer ? 1 : 0) - + (mHardHammer ? 1 : 0) - + (mSolderingTool ? 1 : 0) - + (mCrowbar ? 1 : 0); - } - - public int getIdealStatus() { - return 6; - } - - public int getCurrentEfficiency(ItemStack itemStack) { - int maxEff = getMaxEfficiency(itemStack); - return maxEff - (getIdealStatus() - getRepairStatus()) * maxEff / 10; - } - - public boolean doRandomMaintenanceDamage() { - if (!isCorrectMachinePart(mInventory[1])) { - stopMachine(ShutDownReasonRegistry.NO_MACHINE_PART); - return false; - } - if (shouldCheckMaintenance() && getRepairStatus() == 0) { - stopMachine(ShutDownReasonRegistry.NO_REPAIR); - return false; - } - if (mRuntime++ > 1000) { - mRuntime = 0; - if (shouldCheckMaintenance() && getBaseMetaTileEntity().getRandomNumber(6000) == 0) { - causeMaintenanceIssue(); - } - if (mInventory[1] != null && getBaseMetaTileEntity().getRandomNumber(2) == 0 - && !mInventory[1].getUnlocalizedName() - .startsWith("gt.blockmachines.basicmachine.")) { - if (mInventory[1].getItem() instanceof GT_MetaGenerated_Tool_01) { - NBTTagCompound tNBT = mInventory[1].getTagCompound(); - ((GT_MetaGenerated_Tool) mInventory[1].getItem()).doDamage( - mInventory[1], - (long) getDamageToComponent(mInventory[1]) - * (long) Math.min(mEUt / this.damageFactorLow, Math.pow(mEUt, this.damageFactorHigh))); - if (mInventory[1].stackSize == 0) mInventory[1] = null; - } - } - } - return true; - } - - public void causeMaintenanceIssue() { - switch (getBaseMetaTileEntity().getRandomNumber(6)) { - case 0 -> mWrench = false; - case 1 -> mScrewdriver = false; - case 2 -> mSoftHammer = false; - case 3 -> mHardHammer = false; - case 4 -> mSolderingTool = false; - case 5 -> mCrowbar = false; - } - } - - public void explodeMultiblock() { - - GT_Log.exp.println( - "MultiBlockExplosion at: " + this.getBaseMetaTileEntity() - .getXCoord() - + " | " - + this.getBaseMetaTileEntity() - .getYCoord() - + " | " - + this.getBaseMetaTileEntity() - .getZCoord() - + " DIMID: " - + this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId - + "."); - - GT_Pollution.addPollution(getBaseMetaTileEntity(), GT_Mod.gregtechproxy.mPollutionOnExplosion); - mInventory[1] = null; - // noinspection unchecked // In this case, the inspection only indicates that the array can be abused in runtime - Iterable allHatches = Iterables.concat( - mInputBusses, - mOutputBusses, - mInputHatches, - mOutputHatches, - mDynamoHatches, - mMufflerHatches, - mEnergyHatches, - mMaintenanceHatches); - for (MetaTileEntity tTileEntity : allHatches) { - if (tTileEntity != null && tTileEntity.getBaseMetaTileEntity() != null) { - tTileEntity.getBaseMetaTileEntity() - .doExplosion(V[8]); - } - } - getBaseMetaTileEntity().doExplosion(V[8]); - } - - public boolean addEnergyOutput(long aEU) { - if (aEU <= 0) { - return true; - } - if (mDynamoHatches.size() > 0) { - return addEnergyOutputMultipleDynamos(aEU, true); - } - return false; - } - - public boolean addEnergyOutputMultipleDynamos(long aEU, boolean aAllowMixedVoltageDynamos) { - int injected = 0; - long totalOutput = 0; - long aFirstVoltageFound = -1; - boolean aFoundMixedDynamos = false; - for (GT_MetaTileEntity_Hatch_Dynamo aDynamo : filterValidMTEs(mDynamoHatches)) { - long aVoltage = aDynamo.maxEUOutput(); - long aTotal = aDynamo.maxAmperesOut() * aVoltage; - // Check against voltage to check when hatch mixing - if (aFirstVoltageFound == -1) { - aFirstVoltageFound = aVoltage; - } else { - if (aFirstVoltageFound != aVoltage) { - aFoundMixedDynamos = true; - } - } - totalOutput += aTotal; - } - - if (totalOutput < aEU || (aFoundMixedDynamos && !aAllowMixedVoltageDynamos)) { - explodeMultiblock(); - return false; - } - - long leftToInject; - long aVoltage; - int aAmpsToInject; - int aRemainder; - int ampsOnCurrentHatch; - for (GT_MetaTileEntity_Hatch_Dynamo aDynamo : filterValidMTEs(mDynamoHatches)) { - leftToInject = aEU - injected; - aVoltage = aDynamo.maxEUOutput(); - aAmpsToInject = (int) (leftToInject / aVoltage); - aRemainder = (int) (leftToInject - (aAmpsToInject * aVoltage)); - ampsOnCurrentHatch = (int) Math.min(aDynamo.maxAmperesOut(), aAmpsToInject); - for (int i = 0; i < ampsOnCurrentHatch; i++) { - aDynamo.getBaseMetaTileEntity() - .increaseStoredEnergyUnits(aVoltage, false); - } - injected += aVoltage * ampsOnCurrentHatch; - if (aRemainder > 0 && ampsOnCurrentHatch < aDynamo.maxAmperesOut()) { - aDynamo.getBaseMetaTileEntity() - .increaseStoredEnergyUnits(aRemainder, false); - injected += aRemainder; - } - } - return injected > 0; - } - - /** - * Sums up voltage of energy hatches. Amperage does not matter. - */ - public long getMaxInputVoltage() { - long rVoltage = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) - rVoltage += tHatch.getBaseMetaTileEntity() - .getInputVoltage(); - return rVoltage; - } - - public long getAverageInputVoltage() { - return GT_ExoticEnergyInputHelper.getAverageInputVoltageMulti(mEnergyHatches); - } - - public long getMaxInputAmps() { - return GT_ExoticEnergyInputHelper.getMaxWorkingInputAmpsMulti(mEnergyHatches); - } - - public long getMaxInputEu() { - return GT_ExoticEnergyInputHelper.getTotalEuMulti(mEnergyHatches); - } - - /** - * Sums up max input EU/t of energy hatches, amperage included. - */ - public long getMaxInputPower() { - long eut = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - IGregTechTileEntity baseTile = tHatch.getBaseMetaTileEntity(); - eut += baseTile.getInputVoltage() * baseTile.getInputAmperage(); - } - return eut; - } - - /** - * Returns voltage tier of energy hatches. If multiple tiers are found, returns 0. - */ - public long getInputVoltageTier() { - long rTier = 0; - if (mEnergyHatches.size() > 0) { - rTier = mEnergyHatches.get(0) - .getInputTier(); - for (int i = 1; i < mEnergyHatches.size(); i++) { - if (mEnergyHatches.get(i) - .getInputTier() != rTier) return 0; - } - } - - return rTier; - } - - /** - * Calcualtes the overclockedness using long integers - * - * @param aEUt - recipe EUt - * @param aDuration - recipe Duration - * @param mAmperage - should be 1 ? - * @param maxInputVoltage - Multiblock Max input voltage. Voltage is rounded up to higher tier voltage. - * @param perfectOC - If the Multiblock OCs perfectly, i.e. the large Chemical Reactor - */ - protected void calculateOverclockedNessMultiInternal(long aEUt, int aDuration, int mAmperage, long maxInputVoltage, - boolean perfectOC) { - byte tier = (byte) Math.max(0, GT_Utility.getTier(maxInputVoltage)); - GT_OverclockCalculator calculator = new GT_OverclockCalculator().setRecipeEUt(aEUt) - .setEUt(V[tier] * mAmperage) - .setDuration(aDuration) - .setDurationDecreasePerOC(perfectOC ? 4.0 : 2.0) - .calculate(); - mEUt = (int) calculator.getConsumption(); - mMaxProgresstime = calculator.getDuration(); - } - - @Deprecated - protected void calculateOverclockedNessMulti(int aEUt, int aDuration, int mAmperage, long maxInputVoltage) { - calculateOverclockedNessMultiInternal(aEUt, aDuration, mAmperage, maxInputVoltage, false); - } - - protected void calculateOverclockedNessMulti(long aEUt, int aDuration, int mAmperage, long maxInputVoltage) { - calculateOverclockedNessMultiInternal(aEUt, aDuration, mAmperage, maxInputVoltage, false); - } - - @Deprecated - protected void calculatePerfectOverclockedNessMulti(int aEUt, int aDuration, int mAmperage, long maxInputVoltage) { - calculateOverclockedNessMultiInternal(aEUt, aDuration, mAmperage, maxInputVoltage, true); - } - - protected void calculatePerfectOverclockedNessMulti(long aEUt, int aDuration, int mAmperage, long maxInputVoltage) { - calculateOverclockedNessMultiInternal(aEUt, aDuration, mAmperage, maxInputVoltage, true); - } - - public boolean drainEnergyInput(long aEU) { - if (aEU <= 0) return true; - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - if (tHatch.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(aEU, false)) return true; - } - return false; - } - - protected static boolean dumpFluid(List aOutputHatches, FluidStack copiedFluidStack, - boolean restrictiveHatchesOnly) { - for (GT_MetaTileEntity_Hatch_Output tHatch : filterValidMTEs(aOutputHatches)) { - if (restrictiveHatchesOnly && tHatch.mMode == 0) { - continue; - } - if (!tHatch.canStoreFluid(copiedFluidStack)) continue; - int tAmount = tHatch.fill(copiedFluidStack, false); - if (tAmount >= copiedFluidStack.amount) { - boolean filled = tHatch.fill(copiedFluidStack, true) >= copiedFluidStack.amount; - tHatch.onEmptyingContainerWhenEmpty(); - return filled; - } else if (tAmount > 0) { - copiedFluidStack.amount = copiedFluidStack.amount - tHatch.fill(copiedFluidStack, true); - tHatch.onEmptyingContainerWhenEmpty(); - } - } - return false; - } - - public boolean addOutput(FluidStack aLiquid) { - if (aLiquid == null) return false; - FluidStack copiedFluidStack = aLiquid.copy(); - if (!dumpFluid(mOutputHatches, copiedFluidStack, true)) { - dumpFluid(mOutputHatches, copiedFluidStack, false); - } - return false; - } - - protected void addFluidOutputs(FluidStack[] mOutputFluids2) { - for (FluidStack outputFluidStack : mOutputFluids2) { - addOutput(outputFluidStack); - } - } - - public boolean depleteInput(FluidStack aLiquid) { - return depleteInput(aLiquid, false); - } - - public boolean depleteInput(FluidStack aLiquid, boolean simulate) { - if (aLiquid == null) return false; - for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) { - setHatchRecipeMap(tHatch); - FluidStack tLiquid = tHatch.drain(ForgeDirection.UNKNOWN, aLiquid, false); - if (tLiquid != null && tLiquid.amount >= aLiquid.amount) { - if (simulate) { - return true; - } - tLiquid = tHatch.drain(ForgeDirection.UNKNOWN, aLiquid, true); - return tLiquid != null && tLiquid.amount >= aLiquid.amount; - } - } - return false; - } - - public boolean addOutput(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return false; - aStack = GT_Utility.copyOrNull(aStack); - - final List filteredBuses = filterValidMTEs(mOutputBusses); - if (dumpItem(filteredBuses, aStack, true) || dumpItem(filteredBuses, aStack, false)) { - return true; - } - - boolean outputSuccess = true; - // noinspection DataFlowIssue - while (outputSuccess && aStack.stackSize > 0) { - outputSuccess = false; - ItemStack single = aStack.splitStack(1); - for (GT_MetaTileEntity_Hatch_Output tHatch : filterValidMTEs(mOutputHatches)) { - if (!outputSuccess && tHatch.outputsItems()) { - if (tHatch.getBaseMetaTileEntity() - .addStackToSlot(1, single)) outputSuccess = true; - } - } - } - return outputSuccess; - } - - private boolean dumpItem(List outputBuses, ItemStack itemStack, - boolean restrictiveBusesOnly) { - for (GT_MetaTileEntity_Hatch_OutputBus outputBus : outputBuses) { - if (restrictiveBusesOnly && !outputBus.isLocked()) { - continue; - } - - if (outputBus.storeAll(itemStack)) { - return true; - } - } - - return false; - } - - 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 : filterValidMTEs(mInputHatches)) { - setHatchRecipeMap(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_InputBus tHatch : filterValidMTEs(mInputBusses)) { - tHatch.mRecipeMap = getRecipeMap(); - for (int i = tHatch.getBaseMetaTileEntity() - .getSizeInventory() - 1; i >= 0; i--) { - if (GT_Utility.areStacksEqual( - aStack, - tHatch.getBaseMetaTileEntity() - .getStackInSlot(i))) { - if (tHatch.getBaseMetaTileEntity() - .getStackInSlot(i).stackSize >= aStack.stackSize) { - tHatch.getBaseMetaTileEntity() - .decrStackSize(i, aStack.stackSize); - return true; - } - } - } - } - return false; - } - - public ArrayList getStoredOutputs() { - ArrayList rList = new ArrayList<>(); - for (GT_MetaTileEntity_Hatch_OutputBus tHatch : filterValidMTEs(mOutputBusses)) { - for (int i = tHatch.getBaseMetaTileEntity() - .getSizeInventory() - 1; i >= 0; i--) { - rList.add( - tHatch.getBaseMetaTileEntity() - .getStackInSlot(i)); - } - } - return rList; - } - - public ArrayList getStoredFluids() { - ArrayList rList = new ArrayList<>(); - Map inputsFromME = new HashMap<>(); - for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) { - setHatchRecipeMap(tHatch); - if (tHatch instanceof GT_MetaTileEntity_Hatch_MultiInput multiInputHatch) { - for (FluidStack tFluid : multiInputHatch.getStoredFluid()) { - if (tFluid != null) { - rList.add(tFluid); - } - } - } else if (tHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { - for (FluidStack fluidStack : meHatch.getStoredFluids()) { - if (fluidStack != null) { - // Prevent the same fluid from different ME hatches from being recognized - inputsFromME.put(fluidStack.getFluid(), fluidStack); - } - } - } else { - if (tHatch.getFillableStack() != null) { - rList.add(tHatch.getFillableStack()); - } - } - } - - if (!inputsFromME.isEmpty()) { - rList.addAll(inputsFromME.values()); - } - return rList; - } - - /** - * Drains fluid from the given hatch, including {@link IDualInputHatch}. Should never be used during recipe check! - * - * @param doDrain If false, fluid will not actually be consumed - * @return Whether the hatch contains enough fluid to drain - */ - public boolean drain(GT_MetaTileEntity_Hatch hatch, FluidStack fluid, boolean doDrain) { - if (fluid == null || hatch == null) return false; - if (supportsCraftingMEBuffer() && hatch instanceof IDualInputHatch tHatch && tHatch.supportsFluids()) { - Optional inventory = tHatch.getFirstNonEmptyInventory(); - if (inventory.isPresent()) { - for (FluidStack storedFluid : Lists.newArrayList( - inventory.get() - .getFluidInputs())) { - if (fluid.isFluidEqual(storedFluid)) { - if (doDrain) storedFluid.amount = Math.max(storedFluid.amount - fluid.amount, 0); - return storedFluid.amount >= fluid.amount; - } - } - } - } - - if (hatch instanceof GT_MetaTileEntity_Hatch_Input tHatch && tHatch.isValid()) { - if (tHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { - meHatch.startRecipeProcessing(); - FluidStack tFluid = meHatch.drain(ForgeDirection.UNKNOWN, fluid, doDrain); - meHatch.endRecipeProcessing(this); - return tFluid != null && tFluid.amount >= fluid.amount; - } else { - FluidStack tFluid = tHatch.drain(ForgeDirection.UNKNOWN, fluid, doDrain); - return tFluid != null && tFluid.amount >= fluid.amount; - } - } - - return false; - } - - public ArrayList getStoredInputs() { - ArrayList rList = new ArrayList<>(); - Map inputsFromME = new HashMap<>(); - for (GT_MetaTileEntity_Hatch_InputBus tHatch : filterValidMTEs(mInputBusses)) { - if (tHatch instanceof GT_MetaTileEntity_Hatch_CraftingInput_ME) { - continue; - } - tHatch.mRecipeMap = getRecipeMap(); - IGregTechTileEntity tileEntity = tHatch.getBaseMetaTileEntity(); - boolean isMEBus = tHatch instanceof GT_MetaTileEntity_Hatch_InputBus_ME; - for (int i = tileEntity.getSizeInventory() - 1; i >= 0; i--) { - ItemStack itemStack = tileEntity.getStackInSlot(i); - if (itemStack != null) { - if (isMEBus) { - // Prevent the same item from different ME buses from being recognized - inputsFromME.put(GT_Utility.ItemId.createNoCopy(itemStack), itemStack); - } else { - rList.add(itemStack); - } - } - } - } - - if (getStackInSlot(1) != null && getStackInSlot(1).getUnlocalizedName() - .startsWith("gt.integrated_circuit")) rList.add(getStackInSlot(1)); - if (!inputsFromME.isEmpty()) { - rList.addAll(inputsFromME.values()); - } - return rList; - } - - /** - * Anything that is usually separated off in {@link #getStoredInputs()} (like crafting input bus/buffer) is also - * included here. - */ - public ArrayList getAllStoredInputs() { - ArrayList rList = new ArrayList<>(); - - if (supportsCraftingMEBuffer()) { - for (IDualInputHatch dualInputHatch : mDualInputHatches) { - Iterator inventoryIterator = dualInputHatch.inventories(); - while (inventoryIterator.hasNext()) { - ItemStack[] items = inventoryIterator.next() - .getItemInputs(); - if (items == null) { - continue; - } - for (int i = 0; i < items.length; i++) { - ItemStack item = items[i]; - if (item != null) { - rList.add(item); - } - } - } - } - } - - Map inputsFromME = new HashMap<>(); - for (GT_MetaTileEntity_Hatch_InputBus tHatch : filterValidMTEs(mInputBusses)) { - if (tHatch instanceof GT_MetaTileEntity_Hatch_CraftingInput_ME) { - continue; - } - tHatch.mRecipeMap = getRecipeMap(); - IGregTechTileEntity tileEntity = tHatch.getBaseMetaTileEntity(); - boolean isMEBus = tHatch instanceof GT_MetaTileEntity_Hatch_InputBus_ME; - for (int i = tileEntity.getSizeInventory() - 1; i >= 0; i--) { - ItemStack itemStack = tileEntity.getStackInSlot(i); - if (itemStack != null) { - if (isMEBus) { - // Prevent the same item from different ME buses from being recognized - inputsFromME.put(GT_Utility.ItemId.createNoCopy(itemStack), itemStack); - } else { - rList.add(itemStack); - } - } - } - } - - if (getStackInSlot(1) != null && getStackInSlot(1).getUnlocalizedName() - .startsWith("gt.integrated_circuit")) rList.add(getStackInSlot(1)); - if (!inputsFromME.isEmpty()) { - rList.addAll(inputsFromME.values()); - } - return rList; - } - - public Map getStoredInputsFromME() { - Map inputsFromME = new Object2ReferenceOpenHashMap<>(); - for (GT_MetaTileEntity_Hatch_InputBus tHatch : filterValidMTEs(mInputBusses)) { - if (tHatch instanceof GT_MetaTileEntity_Hatch_InputBus_ME meBus) { - for (int i = meBus.getSizeInventory() - 1; i >= 0; i--) { - ItemStack itemStack = meBus.getStackInSlot(i); - if (itemStack != null) { - // Prevent the same item from different ME buses from being recognized - inputsFromME.put(GT_Utility.ItemId.createNoCopy(itemStack), itemStack); - } - } - } - } - return inputsFromME; - } - - public Map getStoredFluidsFromME() { - Map fluidsFromME = new Reference2ReferenceOpenHashMap<>(); - for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) { - if (tHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { - for (FluidStack fluid : meHatch.getStoredFluids()) { - if (fluid != null) { - // Prevent the same fluid from different ME hatches from being recognized - fluidsFromME.put(fluid.getFluid(), fluid); - } - } - } - } - return fluidsFromME; - } - - @Override - public RecipeMap getRecipeMap() { - return null; - } - - /** - * Creates logic to run recipe check based on recipemap. This runs only once, on class instantiation. - *

- * If this machine doesn't use recipemap or does some complex things, override {@link #checkProcessing()}. - */ - @ApiStatus.OverrideOnly - protected ProcessingLogic createProcessingLogic() { - return null; - } - - public void updateSlots() { - for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) tHatch.updateSlots(); - for (GT_MetaTileEntity_Hatch_InputBus tHatch : filterValidMTEs(mInputBusses)) tHatch.updateSlots(); - } - - protected void startRecipeProcessing() { - for (GT_MetaTileEntity_Hatch_InputBus hatch : filterValidMTEs(mInputBusses)) { - if (hatch instanceof IRecipeProcessingAwareHatch aware) { - aware.startRecipeProcessing(); - } - } - for (GT_MetaTileEntity_Hatch_Input hatch : filterValidMTEs(mInputHatches)) { - if (hatch instanceof IRecipeProcessingAwareHatch aware) { - aware.startRecipeProcessing(); - } - } - } - - public void setResultIfFailure(CheckRecipeResult result) { - if (!result.wasSuccessful()) { - this.checkRecipeResult = result; - } - } - - protected void endRecipeProcessing() { - for (GT_MetaTileEntity_Hatch_InputBus hatch : filterValidMTEs(mInputBusses)) { - if (hatch instanceof IRecipeProcessingAwareHatch aware) { - setResultIfFailure(aware.endRecipeProcessing(this)); - } - } - for (GT_MetaTileEntity_Hatch_Input hatch : filterValidMTEs(mInputHatches)) { - if (hatch instanceof IRecipeProcessingAwareHatch aware) { - setResultIfFailure(aware.endRecipeProcessing(this)); - } - } - } - - public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch hatch) { - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - } - if (aMetaTileEntity instanceof IDualInputHatch hatch) { - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - return mDualInputHatches.add(hatch); - } - if (aMetaTileEntity instanceof ISmartInputHatch hatch) { - // Only add them to be iterated if enabled for performance reasons - if (hatch.doFastRecipeCheck()) { - mSmartInputHatches.add(hatch); - } - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - setHatchRecipeMap((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - return mInputHatches.add((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - ((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity).mRecipeMap = getRecipeMap(); - return mInputBusses.add((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) - return mOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) - return mOutputBusses.add((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) - return mEnergyHatches.add((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) - return mDynamoHatches.add((GT_MetaTileEntity_Hatch_Dynamo) aMetaTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) - return mMaintenanceHatches.add((GT_MetaTileEntity_Hatch_Maintenance) aMetaTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) - return mMufflerHatches.add((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity); - return false; - } - - public boolean addMaintenanceToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance hatch) { - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - return mMaintenanceHatches.add(hatch); - } - return false; - } - - public boolean addEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy hatch) { - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - return mEnergyHatches.add(hatch); - } - return false; - } - - public boolean addExoticEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch hatch - && GT_ExoticEnergyInputHelper.isExoticEnergyInput(aMetaTileEntity)) { - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - return mExoticEnergyHatches.add(hatch); - } - return false; - } - - public boolean addDynamoToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo hatch) { - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - return mDynamoHatches.add(hatch); - } - return false; - } - - public boolean addMufflerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler hatch) { - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - return mMufflerHatches.add(hatch); - } - return false; - } - - public boolean addInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - return addInputBusToMachineList(aTileEntity, aBaseCasingIndex) - || addInputHatchToMachineList(aTileEntity, aBaseCasingIndex); - } - - public boolean addOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - return addOutputBusToMachineList(aTileEntity, aBaseCasingIndex) - || addOutputHatchToMachineList(aTileEntity, aBaseCasingIndex); - } - - public boolean addInputBusToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof IDualInputHatch hatch) { - if (!supportsCraftingMEBuffer()) return false; - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - return mDualInputHatches.add(hatch); - } - if (aMetaTileEntity instanceof ISmartInputHatch hatch) { - mSmartInputHatches.add(hatch); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus hatch) { - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - hatch.mRecipeMap = getRecipeMap(); - return mInputBusses.add(hatch); - } - return false; - } - - public boolean addOutputBusToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus hatch) { - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - return mOutputBusses.add(hatch); - } - return false; - } - - public boolean addInputHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof ISmartInputHatch hatch) { - mSmartInputHatches.add(hatch); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input hatch) { - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - setHatchRecipeMap(hatch); - return mInputHatches.add(hatch); - } - return false; - } - - public boolean addOutputHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output hatch) { - hatch.updateTexture(aBaseCasingIndex); - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - return mOutputHatches.add(hatch); - } - return false; - } - - protected void setHatchRecipeMap(GT_MetaTileEntity_Hatch_Input hatch) { - if (filtersFluid()) { - hatch.mRecipeMap = getRecipeMap(); - } - } - - /** - * @return If this multi filters fluid input for hatches based on recipemap. - */ - protected boolean filtersFluid() { - return true; - } - - @Override - public String[] getInfoData() { - int mPollutionReduction = 0; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); - } - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - - return new String[] { - /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + formatNumbers(getActualEnergyUsage()) - + EnumChatFormatting.RESET - + " EU/t", - /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + formatNumbers(getMaxInputVoltage()) - + EnumChatFormatting.RESET - + " EU/t(*2A) " - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + VN[GT_Utility.getTier(getMaxInputVoltage())] - + EnumChatFormatting.RESET, - /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - /* 6 */ StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %" }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return supportsSlotAutomation(aIndex); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return supportsSlotAutomation(aIndex); - } - - protected ItemStack[] getCompactedInputs() { - // TODO: repalce method with a cleaner one - ArrayList tInputList = getStoredInputs(); - int tInputList_sS = tInputList.size(); - for (int i = 0; i < tInputList_sS - 1; i++) { - for (int j = i + 1; j < tInputList_sS; j++) { - if (!GT_Utility.areStacksEqual(tInputList.get(i), tInputList.get(j))) continue; - if (tInputList.get(i).stackSize >= tInputList.get(j).stackSize) { - tInputList.remove(j--); - tInputList_sS = tInputList.size(); - } else { - tInputList.remove(i--); - tInputList_sS = tInputList.size(); - break; - } - } - } - return tInputList.toArray(new ItemStack[0]); - } - - protected FluidStack[] getCompactedFluids() { - // TODO: repalce method with a cleaner one - ArrayList tFluidList = getStoredFluids(); - int tFluidList_sS = tFluidList.size(); - for (int i = 0; i < tFluidList_sS - 1; i++) { - for (int j = i + 1; j < tFluidList_sS; j++) { - if (!GT_Utility.areFluidsEqual(tFluidList.get(i), tFluidList.get(j))) continue; - - if (tFluidList.get(i).amount >= tFluidList.get(j).amount) { - tFluidList.remove(j--); - tFluidList_sS = tFluidList.size(); - } else { - tFluidList.remove(i--); - tFluidList_sS = tFluidList.size(); - break; - } - } - } - return tFluidList.toArray(new FluidStack[0]); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - final NBTTagCompound tag = accessor.getNBTData(); - - if (tag.getBoolean("incompleteStructure")) { - currentTip.add(RED + "** INCOMPLETE STRUCTURE **" + RESET); - } - String efficiency = RESET + " Efficiency: " + tag.getFloat("efficiency") + "%"; - if (tag.getBoolean("hasProblems")) { - currentTip.add(RED + "** HAS PROBLEMS **" + efficiency); - } else if (!tag.getBoolean("incompleteStructure")) { - currentTip.add(GREEN + "Running Fine" + efficiency); - } - - boolean isActive = tag.getBoolean("isActive"); - if (isActive) { - long energyTier = tag.getLong("energyTier"); - long actualEnergyUsage = tag.getLong("energyUsage"); - if (energyTier > 0) { - if (actualEnergyUsage > 0) { - currentTip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.energy.use_with_amperage", - formatNumbers(actualEnergyUsage), - GT_Utility.getAmperageForTier(actualEnergyUsage, (byte) energyTier), - GT_Utility.getColoredTierNameFromTier((byte) energyTier))); - } else if (actualEnergyUsage < 0) { - currentTip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.energy.produce_with_amperage", - formatNumbers(-actualEnergyUsage), - GT_Utility.getAmperageForTier(-actualEnergyUsage, (byte) energyTier), - GT_Utility.getColoredTierNameFromTier((byte) energyTier))); - } - } else { - if (actualEnergyUsage > 0) { - currentTip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.energy.use", - formatNumbers(actualEnergyUsage), - GT_Utility.getColoredTierNameFromVoltage(actualEnergyUsage))); - } else if (actualEnergyUsage < 0) { - currentTip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.energy.produce", - formatNumbers(-actualEnergyUsage), - GT_Utility.getColoredTierNameFromVoltage(-actualEnergyUsage))); - } - } - } - currentTip.add( - GT_Waila.getMachineProgressString(isActive, tag.getInteger("maxProgress"), tag.getInteger("progress"))); - // Show ns on the tooltip - if (GT_Mod.gregtechproxy.wailaAverageNS && tag.hasKey("averageNS")) { - int tAverageTime = tag.getInteger("averageNS"); - currentTip.add("Average CPU load of ~" + formatNumbers(tAverageTime) + " ns"); - } - super.getWailaBody(itemStack, currentTip, accessor, config); - } - - public final void getMTEWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - - tag.setBoolean("hasProblems", (getIdealStatus() - getRepairStatus()) > 0); - tag.setFloat("efficiency", mEfficiency / 100.0F); - tag.setInteger("progress", mProgresstime); - tag.setInteger("maxProgress", mMaxProgresstime); - tag.setBoolean("incompleteStructure", (getBaseMetaTileEntity().getErrorDisplayID() & 64) != 0); - - final IGregTechTileEntity tileEntity = getBaseMetaTileEntity(); - if (tileEntity != null) { - tag.setBoolean("isActive", tileEntity.isActive()); - if (tileEntity.isActive()) { - if (mEUt < 0) tag.setLong("energyUsage", getActualEnergyUsage()); - else tag.setLong("energyUsage", (long) -mEUt * mEfficiency / 10000); - tag.setLong("energyTier", getInputVoltageTier()); - } - } - - final GT_ClientPreference preference = GT_Mod.gregtechproxy.getClientPreference(player.getUniqueID()); - if (preference != null && preference.isWailaAverageNSEnabled()) { - getBaseMetaTileEntity().startTimeStatistics(); - int tAverageTime = 0; - int amountOfZero = 0; - for (int tTime : this.getBaseMetaTileEntity() - .getTimeStatistics()) { - tAverageTime += tTime; - if (tTime == 0) { - amountOfZero += 1; - } - } - - // tick time zero means it has not been updated yet - int samples = getBaseMetaTileEntity().getTimeStatistics().length - amountOfZero; - if (samples > 0) { - tag.setInteger("averageNS", tAverageTime / samples); - } - } - } - - protected void setMufflers(boolean state) { - for (GT_MetaTileEntity_Hatch_Muffler aMuffler : mMufflerHatches) { - final IGregTechTileEntity iGTTileEntity = aMuffler.getBaseMetaTileEntity(); - if (iGTTileEntity != null && !iGTTileEntity.isDead()) { - iGTTileEntity.setActive(state); - } - } - } - - @Override - public void onRemoval() { - super.onRemoval(); - // Deactivate mufflers - setMufflers(false); - } - - public List getExoticEnergyHatches() { - return mExoticEnergyHatches; - } - - /** - * @return Returns true if there is 1 TT Energy Hatch OR up to 2 Energy Hatches - */ - public boolean checkExoticAndNormalEnergyHatches() { - if (mExoticEnergyHatches.isEmpty() && mEnergyHatches.isEmpty()) { - return false; - } - - if (!mExoticEnergyHatches.isEmpty()) { - if (!mEnergyHatches.isEmpty()) { - return false; - } - - if (mExoticEnergyHatches.size() != 1) { - return false; - } - } - - return mEnergyHatches.size() <= 2; - } - - /** - * Checks if all the item / fluid outputs of the recipe can be outputted to the buses / hatches. - * If void protection is enabled, it also checks for {@link #protectsExcessItem()} and - * {@link #protectsExcessFluid()}, so you don't need to call them along with this method. - *

- * If you're using {@link GT_ParallelHelper}, it will handle void protection and return 0 parallel - * if all the output cannot be dumped into buses / hatches. In that case you won't use this method. - */ - protected boolean canOutputAll(@Nonnull GT_Recipe recipe) { - return canOutputAll(recipe.mOutputs, recipe.mFluidOutputs); - } - - /** - * Checks if all the items can be outputted to the output buses. - * If void protection is enabled, it also checks for {@link #protectsExcessItem()}, - * so you don't need to call it along with this method. - */ - @SuppressWarnings("BooleanMethodIsAlwaysInverted") - protected boolean canOutputAll(ItemStack[] items) { - return canOutputAll(items, null); - } - - /** - * Checks if all the fluids can be outputted to the output hatches. - * If void protection is enabled, it also checks for {@link #protectsExcessFluid()}, - * so you don't need to call it along with this method. - */ - protected boolean canOutputAll(FluidStack[] fluids) { - return canOutputAll(null, fluids); - } - - /** - * Checks if all the items / fluids can be outputted to output buses / hatches. - * If void protection is enabled, it also checks for {@link #protectsExcessItem()} and - * {@link #protectsExcessFluid()}, so you don't need to call them along with this method. - */ - protected boolean canOutputAll(@Nullable ItemStack[] items, @Nullable FluidStack[] fluids) { - if (!protectsExcessItem() && !protectsExcessFluid()) { - return true; - } - - VoidProtectionHelper voidProtectionHelper = new VoidProtectionHelper().setMachine(this) - .setItemOutputs(items) - .setFluidOutputs(fluids) - .build(); - return voidProtectionHelper.getMaxParallel() > 0; - } - - @Override - public boolean isAllowedToWork() { - return getBaseMetaTileEntity() != null && getBaseMetaTileEntity().isAllowedToWork(); - } - - @Override - public void disableWorking() { - if (getBaseMetaTileEntity() != null) { - getBaseMetaTileEntity().disableWorking(); - } - } - - @Override - public void enableWorking() { - if (getBaseMetaTileEntity() != null) { - getBaseMetaTileEntity().enableWorking(); - } - } - - public ItemStack getControllerSlot() { - return mInventory[getControllerSlotIndex()]; - } - - public final int getControllerSlotIndex() { - return 1; - } - - // True if the slot with index aSlot may be interacted with through automation - protected boolean supportsSlotAutomation(int aSlot) { - return false; - } - - @Override - public Pos2d getPowerSwitchButtonPos() { - return new Pos2d(174, 148); - } - - @Override - public Pos2d getStructureUpdateButtonPos() { - return new Pos2d(174, 130); - } - - @Override - public int getStructureUpdateTime() { - return mUpdate; - } - - @Override - public void setStructureUpdateTime(int time) { - mUpdate = time; - } - - @Override - public boolean supportsVoidProtection() { - return false; - } - - @Override - public VoidingMode getVoidingMode() { - return voidingMode; - } - - @Override - public void setVoidingMode(VoidingMode mode) { - this.voidingMode = mode; - } - - @Override - public List getItemOutputSlots(ItemStack[] toOutput) { - List ret = new ArrayList<>(); - for (final GT_MetaTileEntity_Hatch tBus : filterValidMTEs(mOutputBusses)) { - if (!(tBus instanceof GT_MetaTileEntity_Hatch_OutputBus_ME)) { - final IInventory tBusInv = tBus.getBaseMetaTileEntity(); - for (int i = 0; i < tBusInv.getSizeInventory(); i++) { - final ItemStack stackInSlot = tBus.getStackInSlot(i); - - if (stackInSlot == null && tBus instanceof IItemLockable lockable && lockable.isLocked()) { - // getItemOutputSlots is only used to calculate free room for the purposes of parallels and - // void protection. We can use a fake item stack here without creating weirdness in the output - // bus' actual inventory. - assert lockable.getLockedItem() != null; - ItemStack fakeItemStack = lockable.getLockedItem() - .copy(); - fakeItemStack.stackSize = 0; - ret.add(fakeItemStack); - } else { - ret.add(stackInSlot); - } - } - } - } - return ret; - } - - @Override - public List getFluidOutputSlots(FluidStack[] toOutput) { - return filterValidMTEs(mOutputHatches); - } - - /** - * Util method for DT-like structure to collect list of output hatches. - */ - protected List getFluidOutputSlotsByLayer( - FluidStack[] toOutput, List> hatchesByLayer) { - List ret = new ArrayList<>(); - for (int i = 0; i < toOutput.length; i++) { - if (i >= hatchesByLayer.size()) { - break; - } - FluidStack fluidOutputForLayer = toOutput[i]; - for (GT_MetaTileEntity_Hatch_Output hatch : hatchesByLayer.get(i)) { - if (!hatch.isValid()) continue; - if (fluidOutputForLayer != null) { - ret.add(new OutputHatchWrapper(hatch, f -> GT_Utility.areFluidsEqual(f, fluidOutputForLayer))); - } else { - ret.add(hatch); - } - } - } - return ret; - } - - @Override - public boolean canDumpItemToME() { - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(mOutputBusses)) { - if (tHatch instanceof GT_MetaTileEntity_Hatch_OutputBus_ME) { - if ((((GT_MetaTileEntity_Hatch_OutputBus_ME) tHatch).canAcceptItem())) { - return true; - } - } - } - return false; - } - - @Override - public boolean canDumpFluidToME() { - for (IFluidStore tHatch : getFluidOutputSlots(new FluidStack[0])) { - if (tHatch instanceof GT_MetaTileEntity_Hatch_Output_ME) { - if ((((GT_MetaTileEntity_Hatch_Output_ME) tHatch).canAcceptFluid())) { - return true; - } - } - } - return false; - } - - @Override - public Pos2d getVoidingModeButtonPos() { - return new Pos2d(8, 91); - } - - @Override - public boolean supportsInputSeparation() { - return false; - } - - @Override - public boolean isInputSeparationEnabled() { - return inputSeparation; - } - - @Override - public void setInputSeparation(boolean enabled) { - this.inputSeparation = enabled; - } - - @Override - public Pos2d getInputSeparationButtonPos() { - return new Pos2d(26, 91); - } - - /** - * Creates the icon list for this machine. Override this and add the overlays to machineModeIcons in order. - */ - public void setMachineModeIcons() { - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_DEFAULT); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_DEFAULT); - } - - /** - * Override this if you are a multi-machine and want a GUI button. You will also want to override - * setMachineModeIcons(). - * Override nextMachineMode() if you have more than 2 modes. - */ - @Override - public boolean supportsMachineModeSwitch() { - return false; - } - - @Override - public int getMachineMode() { - return machineMode; - } - - @Override - public UITexture getMachineModeIcon(int index) { - return machineModeIcons.get(index); - } - - @Override - public void setMachineMode(int index) { - machineMode = index; - } - - @Override - public int nextMachineMode() { - if (machineMode == 0) return 1; - else return 0; - } - - @Override - public Pos2d getMachineModeSwitchButtonPos() { - return new Pos2d(80, 91); - } - - @Override - public boolean supportsBatchMode() { - return false; - } - - @Override - public boolean isBatchModeEnabled() { - return batchMode; - } - - @Override - public void setBatchMode(boolean enabled) { - this.batchMode = enabled; - } - - @Override - public Pos2d getBatchModeButtonPos() { - return new Pos2d(44, 91); - } - - @Override - public boolean supportsSingleRecipeLocking() { - return false; - } - - @Override - public boolean isRecipeLockingEnabled() { - return mLockedToSingleRecipe; - } - - @Override - public void setRecipeLocking(boolean enabled) { - mLockedToSingleRecipe = enabled; - if (!enabled) { - setSingleRecipeCheck(null); - } - } - - @Override - public void setSingleRecipeCheck(SingleRecipeCheck recipeCheck) { - mSingleRecipeCheck = recipeCheck; - } - - @Override - public SingleRecipeCheck getSingleRecipeCheck() { - return mSingleRecipeCheck; - } - - @Override - public Pos2d getRecipeLockingButtonPos() { - return new Pos2d(62, 91); - } - - @Override - public int getGUIWidth() { - return 198; - } - - @Override - public int getGUIHeight() { - return 192; - } - - @Override - public void bindPlayerInventoryUI(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.bindPlayerInventory(buildContext.getPlayer(), new Pos2d(7, 109), getGUITextureSet().getItemSlot()); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(4, 4) - .setSize(190, 85)); - final SlotWidget inventorySlot = new SlotWidget(inventoryHandler, 1); - builder.widget( - inventorySlot.setPos(173, 167) - .setBackground(GT_UITextures.SLOT_DARK_GRAY)); - - final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); - drawTexts(screenElements, inventorySlot); - builder.widget(screenElements); - - setMachineModeIcons(); - builder.widget(createPowerSwitchButton(builder)) - .widget(createVoidExcessButton(builder)) - .widget(createInputSeparationButton(builder)) - .widget(createModeSwitchButton(builder)) - .widget(createBatchModeButton(builder)) - .widget(createLockToSingleRecipeButton(builder)) - .widget(createStructureUpdateButton(builder)); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) {} - - protected boolean shouldDisplayCheckRecipeResult() { - return true; - } - - public boolean shouldDisplayShutDownReason() { - return true; - } - - protected final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - protected String generateCurrentRecipeInfoString() { - StringBuffer ret = new StringBuffer(EnumChatFormatting.WHITE + "Progress: "); - - numberFormat.setMinimumFractionDigits(2); - numberFormat.setMaximumFractionDigits(2); - numberFormat.format((double) mProgresstime / 20, ret); - ret.append("s / "); - numberFormat.format((double) mMaxProgresstime / 20, ret); - ret.append("s ("); - numberFormat.setMinimumFractionDigits(1); - numberFormat.setMaximumFractionDigits(1); - numberFormat.format((double) mProgresstime / mMaxProgresstime * 100, ret); - ret.append("%)\n"); - numberFormat.setMinimumFractionDigits(0); - numberFormat.setMaximumFractionDigits(2); - - IntConsumer appendRate = (amount) -> { - double processPerTick = (double) amount / mMaxProgresstime * 20; - if (processPerTick > 1) { - ret.append(" ("); - numberFormat.format(Math.round(processPerTick * 10) / 10.0, ret); - ret.append("/s)"); - } else { - ret.append(" ("); - numberFormat.format(Math.round(1 / processPerTick * 10) / 10.0, ret); - ret.append("s/ea)"); - } - }; - - int lines = 0; - int MAX_LINES = 5; - - if (mOutputItems != null) { - for (var item : mOutputItems) { - if (item == null) continue; - if (lines >= MAX_LINES) { - ret.append("..."); - return ret.toString(); - } - lines++; - ret.append(EnumChatFormatting.AQUA) - .append(item.getDisplayName()) - .append(EnumChatFormatting.WHITE) - .append(" x ") - .append(EnumChatFormatting.GOLD); - numberFormat.format(item.stackSize, ret); - ret.append(EnumChatFormatting.WHITE); - appendRate.accept(item.stackSize); - ret.append('\n'); - } - } - if (mOutputFluids != null) { - for (var fluid : mOutputFluids) { - if (fluid == null) continue; - if (lines >= MAX_LINES) { - ret.append("..."); - return ret.toString(); - } - lines++; - ret.append(EnumChatFormatting.AQUA) - .append(fluid.getLocalizedName()) - .append(EnumChatFormatting.WHITE) - .append(" x ") - .append(EnumChatFormatting.GOLD); - numberFormat.format(fluid.amount, ret); - ret.append("L") - .append(EnumChatFormatting.WHITE); - appendRate.accept(fluid.amount); - ret.append('\n'); - } - } - return ret.toString(); - } - - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - screenElements.setSynced(false) - .setSpace(0) - .setPos(10, 7); - if (supportsMachineModeSwitch()) { - screenElements.widget( - TextWidget.dynamicString( - () -> EnumChatFormatting.WHITE + GT_Utility.trans("400", "Running mode: ") - + EnumChatFormatting.GOLD - + getMachineModeName())); - } - screenElements - .widget( - new TextWidget(GT_Utility.trans("132", "Pipe is loose.")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> !mWrench)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mWrench, val -> mWrench = val)); - screenElements - .widget( - new TextWidget(GT_Utility.trans("133", "Screws are loose.")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> !mScrewdriver)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mScrewdriver, val -> mScrewdriver = val)); - screenElements - .widget( - new TextWidget(GT_Utility.trans("134", "Something is stuck.")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> !mSoftHammer)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mSoftHammer, val -> mSoftHammer = val)); - screenElements - .widget( - new TextWidget(GT_Utility.trans("135", "Platings are dented.")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> !mHardHammer)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mHardHammer, val -> mHardHammer = val)); - screenElements - .widget( - new TextWidget(GT_Utility.trans("136", "Circuitry burned out.")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> !mSolderingTool)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mSolderingTool, val -> mSolderingTool = val)); - screenElements - .widget( - new TextWidget(GT_Utility.trans("137", "That doesn't belong there.")) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> !mCrowbar)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mCrowbar, val -> mCrowbar = val)); - screenElements - .widget( - new TextWidget(GT_Utility.trans("138", "Incomplete Structure.")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> !mMachine)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val)); - screenElements.widget( - new TextWidget("Too Uncertain.").setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> (getBaseMetaTileEntity().getErrorDisplayID() & 128) != 0)); - screenElements.widget( - new TextWidget("Invalid Parameters.").setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> (getBaseMetaTileEntity().getErrorDisplayID() & 256) != 0)); - - screenElements.widget( - new TextWidget(GT_Utility.trans("139", "Hit with Soft Mallet")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled( - widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && !getBaseMetaTileEntity().isActive())) - .widget( - new FakeSyncWidget.IntegerSyncer( - () -> getBaseMetaTileEntity().getErrorDisplayID(), - val -> getBaseMetaTileEntity().setErrorDisplayID(val))) - .widget( - new FakeSyncWidget.BooleanSyncer( - () -> getBaseMetaTileEntity().isActive(), - val -> getBaseMetaTileEntity().setActive(val))); - screenElements.widget( - new TextWidget(GT_Utility.trans("140", "to (re-)start the Machine")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled( - widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && !getBaseMetaTileEntity().isActive())); - screenElements.widget( - new TextWidget(GT_Utility.trans("141", "if it doesn't start.")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled( - widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && !getBaseMetaTileEntity().isActive())); - screenElements.widget( - new TextWidget(GT_Utility.trans("142", "Running perfectly.")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled( - widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && getBaseMetaTileEntity().isActive())); - - screenElements.widget(TextWidget.dynamicString(() -> { - Duration time = Duration.ofSeconds((mTotalRunTime - mLastWorkingTick) / 20); - return StatCollector.translateToLocalFormatted( - "GT5U.gui.text.shutdown_duration", - time.toHours(), - time.toMinutes() % 60, - time.getSeconds() % 60); - }) - .setEnabled( - widget -> shouldDisplayShutDownReason() && !getBaseMetaTileEntity().isActive() - && getBaseMetaTileEntity().wasShutdown())) - .widget(new FakeSyncWidget.LongSyncer(() -> mTotalRunTime, time -> mTotalRunTime = time)) - .widget(new FakeSyncWidget.LongSyncer(() -> mLastWorkingTick, time -> mLastWorkingTick = time)); - screenElements.widget( - TextWidget.dynamicString( - () -> getBaseMetaTileEntity().getLastShutDownReason() - .getDisplayString()) - .setSynced(false) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled( - widget -> shouldDisplayShutDownReason() && !getBaseMetaTileEntity().isActive() - && GT_Utility.isStringValid( - getBaseMetaTileEntity().getLastShutDownReason() - .getDisplayString()) - && getBaseMetaTileEntity().wasShutdown())) - .widget( - new ShutDownReasonSyncer( - () -> getBaseMetaTileEntity().getLastShutDownReason(), - reason -> getBaseMetaTileEntity().setShutDownReason(reason))) - .widget( - new FakeSyncWidget.BooleanSyncer( - () -> getBaseMetaTileEntity().wasShutdown(), - wasShutDown -> getBaseMetaTileEntity().setShutdownStatus(wasShutDown))); - - screenElements.widget( - TextWidget.dynamicString(() -> checkRecipeResult.getDisplayString()) - .setSynced(false) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled( - widget -> shouldDisplayCheckRecipeResult() - && GT_Utility.isStringValid(checkRecipeResult.getDisplayString()) - && (isAllowedToWork() || getBaseMetaTileEntity().isActive() - || checkRecipeResult.persistsOnShutdown()))) - .widget(new CheckRecipeResultSyncer(() -> checkRecipeResult, (result) -> checkRecipeResult = result)); - - if (showRecipeTextInGUI()) { - // Display current recipe - screenElements.widget( - TextWidget.dynamicString(this::generateCurrentRecipeInfoString) - .setSynced(false) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled( - widget -> (mOutputFluids != null && mOutputFluids.length > 0) - || (mOutputItems != null && mOutputItems.length > 0))) - .widget( - new FakeSyncWidget.ListSyncer<>( - () -> mOutputFluids != null ? Arrays.asList(mOutputFluids) : Collections.emptyList(), - val -> mOutputFluids = val.toArray(new FluidStack[0]), - NetworkUtils::writeFluidStack, - NetworkUtils::readFluidStack)) - .widget( - new FakeSyncWidget.ListSyncer<>( - () -> mOutputItems != null ? Arrays.asList(mOutputItems) : Collections.emptyList(), - val -> mOutputItems = val.toArray(new ItemStack[0]), - NetworkUtils::writeItemStack, - NetworkUtils::readItemStack)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> mProgresstime, val -> mProgresstime = val)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> mMaxProgresstime, val -> mMaxProgresstime = val)); - } - - screenElements.widget( - new TextWidget(GT_Utility.trans("144", "Missing Turbine Rotor")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> { - if (getBaseMetaTileEntity().isAllowedToWork()) return false; - if (getBaseMetaTileEntity().getErrorDisplayID() == 0 - && this instanceof GT_MetaTileEntity_LargeTurbine) { - final ItemStack tItem = inventorySlot.getMcSlot() - .getStack(); - return tItem == null - || !(tItem.getItem() == GT_MetaGenerated_Tool_01.INSTANCE && tItem.getItemDamage() >= 170 - && tItem.getItemDamage() <= 177); - } - return false; - })); - } - - protected boolean showRecipeTextInGUI() { - return true; - } - - @TestOnly - protected void setEnergyHatches(ArrayList EnergyHatches) { - this.mEnergyHatches = EnergyHatches; - } - - @TestOnly - protected void setExoticEnergyHatches(List ExoticEnergyHatches) { - this.mExoticEnergyHatches = ExoticEnergyHatches; - } - - public void fixAllIssues() { - mWrench = true; - mScrewdriver = true; - mSoftHammer = true; - mHardHammer = true; - mSolderingTool = true; - mCrowbar = true; - } - - public boolean getDefaultHasMaintenanceChecks() { - return true; - } - - public boolean shouldCheckMaintenance() { - return !disableMaintenance && hasMaintenanceChecks; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SpecialFilter.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SpecialFilter.java deleted file mode 100644 index 1a71f17ec8..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SpecialFilter.java +++ /dev/null @@ -1,134 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import java.util.List; -import java.util.function.Function; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public abstract class GT_MetaTileEntity_SpecialFilter extends GT_MetaTileEntity_FilterBase { - - private static final String ALLOW_NBT_TOOLTIP = "GT5U.machines.allow_nbt.tooltip"; - private boolean allowNbt = false; - - public GT_MetaTileEntity_SpecialFilter(int aID, String aName, String aNameRegional, int aTier, - String[] aDescription) { - // 9 buffer slot, 1 representation slot, 1 holo slot. last seems not needed... - super(aID, aName, aNameRegional, aTier, 11, aDescription); - } - - public GT_MetaTileEntity_SpecialFilter(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_SpecialFilter(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("bNBTAllowed", this.allowNbt); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.allowNbt = aNBT.getBoolean("bNBTAllowed"); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return (super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack)) - && ((this.allowNbt) || (!aStack.hasTagCompound())) - && (this.isStackAllowed(aStack) != this.invertFilter); - } - - protected abstract boolean isStackAllowed(ItemStack aStack); - - protected List getEmptySlotTooltip() { - return null; - } - - protected Function, List> getItemStackReplacementTooltip() { - return list -> list; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - addAllowNbtButton(builder); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_24_WHITE.apply(27, false)) - .setPos(6, 19) - .setSize(27, 24)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_24_BLUE.apply(42, true)) - .setPos(53, 19) - .setSize(42, 24)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_24_RED.apply(19, true)) - .setPos(152, 19) - .setSize(19, 24)) - .widget( - createFilterIconSlot(BaseSlot.phantom(inventoryHandler, 9)).disableShiftInsert() - .setPos(34, 22) - .setBackground(GT_UITextures.BUTTON_STANDARD)) - .widget( - SlotGroup.ofItemHandler(inventoryHandler, 3) - .endAtSlot(8) - .build() - .setPos(97, 4)); - } - - private void addAllowNbtButton(ModularWindow.Builder builder) { - builder.widget( - createToggleButton( - () -> allowNbt, - val -> allowNbt = val, - GT_UITextures.OVERLAY_BUTTON_NBT, - () -> mTooltipCache.getData(ALLOW_NBT_TOOLTIP))); - } - - protected abstract SlotWidget createFilterIconSlot(BaseSlot slot); - - protected abstract class FilterIconSlotWidget extends SlotWidget { - - public FilterIconSlotWidget(BaseSlot slot) { - super(slot); - } - - @Override - protected abstract void phantomClick(ClickData clickData, ItemStack cursorStack); - - @Override - public void buildTooltip(List tooltip) { - super.buildTooltip(tooltip); - List emptySlotTooltip = getEmptySlotTooltip(); - if (emptySlotTooltip != null) { - tooltip.addAll(emptySlotTooltip); - } - } - - @Override - public Function, List> getOverwriteItemStackTooltip() { - return getItemStackReplacementTooltip(); - } - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TieredMachineBlock.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TieredMachineBlock.java deleted file mode 100644 index a08e49fd6c..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TieredMachineBlock.java +++ /dev/null @@ -1,119 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.GT; -import static gregtech.api.metatileentity.BaseTileEntity.BATTERY_SLOT_TOOLTIP; -import static gregtech.api.metatileentity.BaseTileEntity.BATTERY_SLOT_TOOLTIP_ALT; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; - -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.enums.GT_Values; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.util.GT_Utility; - -public abstract class GT_MetaTileEntity_TieredMachineBlock extends MetaTileEntity { - - /** - * Value between [0 - 9] to describe the Tier of this Machine. PLZ [0-15] works - READ! GT_Values class. - */ - public final byte mTier; - - /** - * A simple Description. - */ - public final String[] mDescriptionArray; - - /** - * Contains all Textures used by this Block. - */ - public final ITexture[][][] mTextures; - - public GT_MetaTileEntity_TieredMachineBlock(int aID, String aName, String aNameRegional, int aTier, - int aInvSlotCount, String aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aInvSlotCount); - mTier = (byte) Math.max(0, Math.min(aTier, 14)); - mDescriptionArray = aDescription == null ? new String[0] : new String[] { aDescription }; - // must always be the last call! - if (GT.isClientSide()) mTextures = getTextureSet(aTextures); - else mTextures = null; - } - - public GT_MetaTileEntity_TieredMachineBlock(int aID, String aName, String aNameRegional, int aTier, - int aInvSlotCount, String[] aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aInvSlotCount); - mTier = (byte) Math.max(0, Math.min(aTier, 15)); - mDescriptionArray = aDescription == null ? new String[0] : aDescription; - - // must always be the last call! - if (GT.isClientSide()) mTextures = getTextureSet(aTextures); - else mTextures = null; - } - - public GT_MetaTileEntity_TieredMachineBlock(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aInvSlotCount); - mTier = (byte) aTier; - mDescriptionArray = aDescription == null ? new String[0] : new String[] { aDescription }; - mTextures = aTextures; - } - - public GT_MetaTileEntity_TieredMachineBlock(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aInvSlotCount); - mTier = (byte) aTier; - mDescriptionArray = aDescription == null ? new String[0] : aDescription; - mTextures = aTextures; - } - - @Override - public byte getTileEntityBaseType() { - return (byte) (Math.min(3, mTier <= 0 ? 0 : 1 + ((mTier - 1) / 4))); - } - - @Override - public long getInputTier() { - return mTier; - } - - @Override - public long getOutputTier() { - return mTier; - } - - @Override - public String[] getDescription() { - return mDescriptionArray; - } - - /** - * Used Client Side to get a Texture Set for this Block. Called after setting the Tier and the Description so that - * those two are accessible. - * - * @param aTextures is the optional Array you can give to the Constructor. - */ - public abstract ITexture[][][] getTextureSet(ITexture[] aTextures); - - protected SlotWidget createChargerSlot(int x, int y) { - final String batterySlotTooltipKey; - final Object[] batterySlotTooltipArgs; - final String pTier1 = GT_Utility.getColoredTierNameFromTier(mTier); - if (mTier == GT_Values.VN.length - 1) { - batterySlotTooltipKey = BATTERY_SLOT_TOOLTIP_ALT; - batterySlotTooltipArgs = new String[] { pTier1 }; - } else { - batterySlotTooltipKey = BATTERY_SLOT_TOOLTIP; - batterySlotTooltipArgs = new String[] { pTier1, GT_Utility.getColoredTierNameFromTier((byte) (mTier + 1)) }; - } - return createChargerSlot(x, y, batterySlotTooltipKey, batterySlotTooltipArgs); - } - - protected SlotWidget createChargerSlot(int x, int y, String tooltipKey, Object[] tooltipArgs) { - return (SlotWidget) new SlotWidget(inventoryHandler, rechargerSlotStartIndex()).disableShiftInsert() - .setGTTooltip(() -> mTooltipCache.getData(tooltipKey, tooltipArgs)) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_CHARGER) - .setPos(x, y); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TooltipMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TooltipMultiBlockBase.java deleted file mode 100644 index c12c7c1442..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_TooltipMultiBlockBase.java +++ /dev/null @@ -1,57 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import java.util.concurrent.atomic.AtomicReferenceArray; - -import org.lwjgl.input.Keyboard; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ISecondaryDescribable; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -/** - * A multiblock with tooltip {@link GT_Multiblock_Tooltip_Builder} - */ -public abstract class GT_MetaTileEntity_TooltipMultiBlockBase extends GT_MetaTileEntity_MultiBlockBase - implements ISecondaryDescribable { - - private static final AtomicReferenceArray tooltips = new AtomicReferenceArray<>( - GregTech_API.METATILEENTITIES.length); - - public GT_MetaTileEntity_TooltipMultiBlockBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_TooltipMultiBlockBase(String aName) { - super(aName); - } - - protected GT_Multiblock_Tooltip_Builder getTooltip() { - int tId = getBaseMetaTileEntity().getMetaTileID(); - GT_Multiblock_Tooltip_Builder tooltip = tooltips.get(tId); - if (tooltip == null) { - tooltip = createTooltip(); - tooltips.set(tId, tooltip); - } - return tooltip; - } - - protected abstract GT_Multiblock_Tooltip_Builder createTooltip(); - - @Override - public String[] getDescription() { - return getCurrentDescription(); - } - - @Override - public boolean isDisplaySecondaryDescription() { - return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT); - } - - public String[] getPrimaryDescription() { - return getTooltip().getInformation(); - } - - public String[] getSecondaryDescription() { - return getTooltip().getStructureInformation(); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java deleted file mode 100644 index de7019b292..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Transformer.java +++ /dev/null @@ -1,326 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Mods.EnderIO; -import static mcp.mobius.waila.api.SpecialChars.BLUE; -import static mcp.mobius.waila.api.SpecialChars.GOLD; -import static mcp.mobius.waila.api.SpecialChars.GREEN; -import static mcp.mobius.waila.api.SpecialChars.RED; -import static mcp.mobius.waila.api.SpecialChars.RESET; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import cofh.api.energy.IEnergyProvider; -import cofh.api.energy.IEnergyStorage; -import crazypants.enderio.machine.capbank.TileCapBank; -import crazypants.enderio.machine.capbank.network.ICapBankNetwork; -import crazypants.enderio.power.IPowerContainer; -import gregtech.GT_Mod; -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.util.GT_Utility; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -/** - * NEVER INCLUDE THIS FILE IN YOUR MOD!!! - *

- * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple - * Machine - */ -public class GT_MetaTileEntity_Transformer extends GT_MetaTileEntity_TieredMachineBlock { - - public GT_MetaTileEntity_Transformer(int aID, String aName, String aNameRegional, int aTier, String aDescription) { - super(aID, aName, aNameRegional, aTier, 0, aDescription); - } - - public GT_MetaTileEntity_Transformer(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - public GT_MetaTileEntity_Transformer(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[12][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; - rTextures[1][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; - rTextures[2][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; - rTextures[3][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; - rTextures[4][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; - rTextures[5][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; - rTextures[6][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; - rTextures[7][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; - rTextures[8][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; - rTextures[9][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; - rTextures[10][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; - rTextures[11][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; - } - return rTextures; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - return mTextures[Math.min(2, side.ordinal()) + (side == facingDirection ? 3 : 0) - + (baseMetaTileEntity.isAllowedToWork() ? 0 : 6)][colorIndex + 1]; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Transformer(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - ForgeDirection blockFrontFacing = getBaseMetaTileEntity().getFrontFacing(); - - if (getBaseMetaTileEntity().isAllowedToWork()) { - return side == blockFrontFacing; - } else { - return side != blockFrontFacing; - } - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return !isInputFacing(side); - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return V[mTier + 1]; - } - - @Override - public long maxEUStore() { - return Math.max(512L, 1L << (mTier + 2)) + V[mTier + 1] * 4L; - } - - @Override - public long maxEUInput() { - return V[getBaseMetaTileEntity().isAllowedToWork() ? mTier + 1 : mTier]; - } - - @Override - public long maxEUOutput() { - return V[getBaseMetaTileEntity().isAllowedToWork() ? mTier : mTier + 1]; - } - - @Override - public long maxAmperesOut() { - return getBaseMetaTileEntity().isAllowedToWork() ? 4 : 1; - } - - @Override - public long maxAmperesIn() { - return getBaseMetaTileEntity().isAllowedToWork() ? 1 : 4; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide() && GregTech_API.mInputRF) { - aBaseMetaTileEntity.setActive(aBaseMetaTileEntity.isAllowedToWork()); - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (aBaseMetaTileEntity.getStoredEU() >= aBaseMetaTileEntity.getEUCapacity()) break; - if (!aBaseMetaTileEntity.inputEnergyFrom(side)) continue; - final TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(side); - if (tTileEntity instanceof IEnergyProvider energyProvider - && energyProvider.extractEnergy(side.getOpposite(), 1, true) == 1) { - long tEU = ((IEnergyProvider) tTileEntity).extractEnergy( - side.getOpposite(), - GT_Utility.safeInt(maxEUInput() * 100L / GregTech_API.mRFtoEU), - false); - tEU = tEU * GregTech_API.mRFtoEU / 100; - aBaseMetaTileEntity.injectEnergyUnits(ForgeDirection.UNKNOWN, Math.min(tEU, maxEUInput()), 1); - } else if (tTileEntity instanceof IEnergyStorage energyStorage - && energyStorage.extractEnergy(1, true) == 1) { - long tEU = ((IEnergyStorage) tTileEntity) - .extractEnergy(GT_Utility.safeInt(maxEUInput() * 100L / GregTech_API.mRFtoEU), false); - tEU = tEU * GregTech_API.mRFtoEU / 100; - aBaseMetaTileEntity.injectEnergyUnits(ForgeDirection.UNKNOWN, Math.min(tEU, maxEUInput()), 1); - } else if (EnderIO.isModLoaded() && tTileEntity instanceof IPowerContainer powerContainer - && powerContainer.getEnergyStored() > 0) { - final int storedRF = powerContainer.getEnergyStored(); - final int extractRF = GT_Utility.safeInt(maxEUInput() * 100L / GregTech_API.mRFtoEU); - long tEU = 0; - if (tTileEntity instanceof TileCapBank capBank) { - ICapBankNetwork network = capBank.getNetwork(); - if (network != null && network.getEnergyStoredL() > 0) { - tEU = Math.min( - (Math.min( - Math.min(network.getEnergyStoredL(), storedRF - extractRF), - network.getMaxOutput())) * (long) GregTech_API.mRFtoEU / 100L, - maxEUInput()); - network.addEnergy(GT_Utility.safeInt(-(tEU * 100 / GregTech_API.mRFtoEU))); - } - } else { - if (storedRF > extractRF) { - powerContainer.setEnergyStored(storedRF - extractRF); - tEU = maxEUInput(); - } else { - powerContainer.setEnergyStored(0); - tEU = storedRF * (long) GregTech_API.mRFtoEU / 100L; - } - } - aBaseMetaTileEntity - .injectEnergyUnits(ForgeDirection.UNKNOWN, Math.min(tEU, maxEUInput()), 1); - } - } - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - // - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - // - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean hasAlternativeModeText() { - return true; - } - - @Override - public String getAlternativeModeText() { - return (getBaseMetaTileEntity().isAllowedToWork() ? GT_Utility.trans("145", "Step Down, In: ") - : GT_Utility.trans("146", "Step Up, In: ")) + maxEUInput() - + GT_Utility.trans("148", "V ") - + maxAmperesIn() - + GT_Utility.trans("147", "A, Out: ") - + maxEUOutput() - + GT_Utility.trans("148", "V ") - + maxAmperesOut() - + GT_Utility.trans("149", "A"); - } - - @Override - public boolean shouldJoinIc2Enet() { - return true; - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - final ForgeDirection facing = getBaseMetaTileEntity().getFrontFacing(); - final NBTTagCompound tag = accessor.getNBTData(); - final ForgeDirection side = accessor.getSide(); - final boolean allowedToWork = tag.getBoolean("isAllowedToWork"); - - final byte inputTier = GT_Utility.getTier(tag.getLong("maxEUInput")); - final byte outputTier = GT_Utility.getTier(tag.getLong("maxEUOutput")); - - currenttip.add( - String.format( - "%s %s(%dA) -> %s(%dA)", - (allowedToWork ? (GREEN + "Step Down") : (RED + "Step Up")) + RESET, - GT_Mod.gregtechproxy.mWailaTransformerVoltageTier ? GT_Utility.getColoredTierNameFromTier(inputTier) - : tag.getLong("maxEUInput"), - tag.getLong("maxAmperesIn"), - GT_Mod.gregtechproxy.mWailaTransformerVoltageTier ? GT_Utility.getColoredTierNameFromTier(outputTier) - : tag.getLong("maxEUOutput"), - tag.getLong("maxAmperesOut"))); - - if ((side == facing && allowedToWork) || (side != facing && !allowedToWork)) { - currenttip.add( - String.format( - GOLD + "Input:" + RESET + " %s(%dA)", - GT_Mod.gregtechproxy.mWailaTransformerVoltageTier ? GT_Utility.getColoredTierNameFromTier(inputTier) - : tag.getLong("maxEUInput"), - tag.getLong("maxAmperesIn"))); - } else { - currenttip.add( - String.format( - BLUE + "Output:" + RESET + " %s(%dA)", - GT_Mod.gregtechproxy.mWailaTransformerVoltageTier - ? GT_Utility.getColoredTierNameFromTier(outputTier) - : tag.getLong("maxEUOutput"), - tag.getLong("maxAmperesOut"))); - } - - super.getWailaBody(itemStack, currenttip, accessor, config); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setBoolean("isAllowedToWork", getBaseMetaTileEntity().isAllowedToWork()); - tag.setLong("maxEUInput", maxEUInput()); - tag.setLong("maxAmperesIn", maxAmperesIn()); - tag.setLong("maxEUOutput", maxEUOutput()); - tag.setLong("maxAmperesOut", maxAmperesOut()); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_WetTransformer.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_WetTransformer.java deleted file mode 100644 index f865a5ea8a..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_WetTransformer.java +++ /dev/null @@ -1,93 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; - -import net.minecraft.util.EnumChatFormatting; - -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; - -public class GT_MetaTileEntity_WetTransformer extends GT_MetaTileEntity_Transformer { - - public GT_MetaTileEntity_WetTransformer(int aID, String aName, String aNameRegional, int aTier, - String aDescription) { - super(aID, aName, aNameRegional, aTier, aDescription); - } - - public GT_MetaTileEntity_WetTransformer(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_WetTransformer(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[12][17][]; - for (byte b = -1; b < 16; b++) { - rTextures[0][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; - rTextures[1][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; - rTextures[2][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; - rTextures[3][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_POWER[mTier + 1] }; - rTextures[4][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_POWER[mTier + 1] }; - rTextures[5][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_POWER[mTier + 1] }; - rTextures[6][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; - rTextures[7][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; - rTextures[8][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; - rTextures[9][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier + 1] }; - rTextures[10][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier + 1] }; - rTextures[11][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier + 1] }; - } - return rTextures; - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll( - mDescriptionArray, - "Accepts 16A and outputs 64A", - EnumChatFormatting.BLUE + "Tec" - + EnumChatFormatting.DARK_BLUE - + "Tech" - + EnumChatFormatting.BLUE - + ": Interdimensional"); - } - - @Override - public long getMinimumStoredEU() { - return V[mTier + 1]; - } - - @Override - public long maxEUStore() { - return 512L + V[mTier + 1] * 128L; - } - - @Override - public long maxAmperesOut() { - return getBaseMetaTileEntity().isAllowedToWork() ? 64 : 16; - } - - @Override - public long maxAmperesIn() { - return getBaseMetaTileEntity().isAllowedToWork() ? 16 : 64; - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Dynamo.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Dynamo.java deleted file mode 100644 index a04f5cd986..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Dynamo.java +++ /dev/null @@ -1,146 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.AuthorColen; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static gregtech.common.misc.WirelessNetworkManager.strongCheckOrAddUser; - -import java.util.UUID; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IWirelessEnergyHatchInformation; -import gregtech.api.metatileentity.MetaTileEntity; - -public class GT_MetaTileEntity_Wireless_Dynamo extends GT_MetaTileEntity_Hatch_Dynamo - implements IWirelessEnergyHatchInformation { - - private UUID owner_uuid; - - public GT_MetaTileEntity_Wireless_Dynamo(String aName, byte aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_Wireless_Dynamo(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, new String[] { "" }); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI_WIRELESS_ON[mTier] }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI_WIRELESS_ON[mTier] }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 2 * V[mTier]; - } - - @Override - public long maxEUOutput() { - return V[mTier]; - } - - @Override - public long maxEUStore() { - return totalStorage(V[mTier]); - } - - @Override - public String[] getDescription() { - return new String[] { EnumChatFormatting.GRAY + "Stores energy globally in a network, up to 2^(2^31) EU.", - EnumChatFormatting.GRAY + "Does not connect to wires. This block accepts EU into the network.", - AuthorColen }; - } - - @Override - public long maxAmperesOut() { - return 2; - } - - @Override - public ConnectionType getConnectionType() { - return ConnectionType.WIRELESS; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Wireless_Dynamo(mName, mTier, new String[] { "" }, mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - - if (aBaseMetaTileEntity.isServerSide()) { - - // On first tick find the player name and attempt to add them to the map. - if (aTick == 1) { - - // UUID and username of the owner. - owner_uuid = aBaseMetaTileEntity.getOwnerUuid(); - - strongCheckOrAddUser(owner_uuid); - } - - // Every ticks_between_energy_addition ticks change the energy content of the machine. - if (aTick % ticks_between_energy_addition == 0L) { - addEUToGlobalEnergyMap(owner_uuid, getEUVar()); - setEUVar(0L); - } - } - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java deleted file mode 100644 index bf624eadd7..0000000000 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Wireless_Hatch.java +++ /dev/null @@ -1,168 +0,0 @@ -package gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.AuthorColen; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static java.lang.Long.min; - -import java.math.BigInteger; -import java.util.UUID; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IWirelessEnergyHatchInformation; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.common.misc.spaceprojects.SpaceProjectManager; - -public class GT_MetaTileEntity_Wireless_Hatch extends GT_MetaTileEntity_Hatch_Energy - implements IWirelessEnergyHatchInformation { - - private final BigInteger eu_transferred_per_operation = BigInteger - .valueOf(2 * V[mTier] * ticks_between_energy_addition); - private final long eu_transferred_per_operation_long = eu_transferred_per_operation.longValue(); - - private UUID owner_uuid; - - public GT_MetaTileEntity_Wireless_Hatch(String aName, byte aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - public GT_MetaTileEntity_Wireless_Hatch(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, new String[] { "" }); - } - - @Override - public String[] getDescription() { - return new String[] { EnumChatFormatting.GRAY + "Stores energy globally in a network, up to 2^(2^31) EU.", - EnumChatFormatting.GRAY + "Does not connect to wires. This block withdraws EU from the network.", - AuthorColen }; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI_WIRELESS_ON[mTier] }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI_WIRELESS_ON[mTier] }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isEnetInput() { - return false; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 2 * V[mTier]; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxEUStore() { - return totalStorage(V[mTier]); - } - - @Override - public long maxAmperesIn() { - return 2; - } - - @Override - public ConnectionType getConnectionType() { - return ConnectionType.WIRELESS; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Wireless_Hatch(mName, mTier, new String[] { "" }, mTextures); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - - if (!aBaseMetaTileEntity.isServerSide()) return; - - // UUID of the owner. - owner_uuid = aBaseMetaTileEntity.getOwnerUuid(); - - SpaceProjectManager.checkOrCreateTeam(owner_uuid);; - - tryFetchingEnergy(); - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - - super.onPreTick(aBaseMetaTileEntity, aTick); - - if (aBaseMetaTileEntity.isServerSide()) { - // This is set up in a way to be as optimised as possible. If a user has a relatively plentiful energy - // network - // it should make no difference to them. Minimising the number of operations on BigInteger is essential. - - // Every ticks_between_energy_addition add eu_transferred_per_operation to internal EU storage from network. - if (aTick % ticks_between_energy_addition == 0L) { - tryFetchingEnergy(); - } - } - } - - private void tryFetchingEnergy() { - long currentEU = getBaseMetaTileEntity().getStoredEU(); - long maxEU = maxEUStore(); - long euToTransfer = min(maxEU - currentEU, eu_transferred_per_operation_long); - if (euToTransfer <= 0) return; // nothing to transfer - if (!addEUToGlobalEnergyMap(owner_uuid, -euToTransfer)) return; - setEUVar(currentEU + euToTransfer); - } -} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicBatteryBuffer.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicBatteryBuffer.java new file mode 100644 index 0000000000..7ca8cce273 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicBatteryBuffer.java @@ -0,0 +1,435 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; + +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import ic2.api.item.IElectricItem; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + *

+ * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple + * Machine + */ +public class MTEBasicBatteryBuffer extends MTETieredMachineBlock implements IAddUIWidgets { + + public boolean mCharge = false, mDecharge = false; + public int mBatteryCount = 0, mChargeableCount = 0; + private long count = 0; + private long mStored = 0; + private long mMax = 0; + + public MTEBasicBatteryBuffer(int aID, String aName, String aNameRegional, int aTier, String aDescription, + int aSlotCount) { + super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); + } + + public MTEBasicBatteryBuffer(String aName, int aTier, String aDescription, ITexture[][][] aTextures, + int aSlotCount) { + super(aName, aTier, aSlotCount, aDescription, aTextures); + } + + public MTEBasicBatteryBuffer(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, + int aSlotCount) { + super(aName, aTier, aSlotCount, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + String[] desc = new String[mDescriptionArray.length + 1]; + System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); + desc[mDescriptionArray.length] = mInventory.length + " Slots"; + return desc; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[2][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1] }; + rTextures[1][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + mInventory.length == 16 ? Textures.BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier] + : mInventory.length > 4 ? Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] + : Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; + } + return rTextures; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + return mTextures[side == aFacing ? 1 : 0][colorIndex + 1]; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBasicBatteryBuffer(mName, mTier, mDescriptionArray, mTextures, mInventory.length); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return V[mTier] * 16L * mInventory.length; + } + + @Override + public long maxEUStore() { + return V[mTier] * 64L * mInventory.length; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxEUOutput() { + return V[mTier]; + } + + @Override + public long maxAmperesIn() { + return mChargeableCount * 2L; + } + + @Override + public long maxAmperesOut() { + return mBatteryCount; + } + + @Override + public int rechargerSlotStartIndex() { + return 0; + } + + @Override + public int dechargerSlotStartIndex() { + return 0; + } + + @Override + public int rechargerSlotCount() { + return mCharge ? mInventory.length : 0; + } + + @Override + public int dechargerSlotCount() { + return mDecharge ? mInventory.length : 0; + } + + @Override + public int getProgresstime() { + return (int) getBaseMetaTileEntity().getUniversalEnergyStored(); + } + + @Override + public int maxProgresstime() { + return (int) getBaseMetaTileEntity().getUniversalEnergyCapacity(); + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + // + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + // + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + mCharge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3; + mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3; + mBatteryCount = 0; + mChargeableCount = 0; + for (ItemStack tStack : mInventory) if (GTModHandler.isElectricItem(tStack, mTier)) { + if (GTModHandler.isChargerItem(tStack)) mBatteryCount++; + mChargeableCount++; + } + } + count++; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (GTModHandler.isElectricItem(aStack) && aStack.getUnlocalizedName() + .startsWith("gt.metaitem.01.")) { + String name = aStack.getUnlocalizedName(); + if (name.equals("gt.metaitem.01.32510") || name.equals("gt.metaitem.01.32511") + || name.equals("gt.metaitem.01.32520") + || name.equals("gt.metaitem.01.32521") + || name.equals("gt.metaitem.01.32530") + || name.equals("gt.metaitem.01.32531")) { + return ic2.api.item.ElectricItem.manager.getCharge(aStack) == 0; + } + } + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (!GTUtility.isStackValid(aStack)) { + return false; + } + return mInventory[aIndex] == null && GTModHandler.isElectricItem(aStack, this.mTier); + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + public long[] getStoredEnergy() { + boolean scaleOverflow = false; + boolean storedOverflow = false; + long tScale = getBaseMetaTileEntity().getEUCapacity(); + long tStored = getBaseMetaTileEntity().getStoredEU(); + long tStep = 0; + if (mInventory != null) { + for (ItemStack aStack : mInventory) { + if (GTModHandler.isElectricItem(aStack)) { + + if (aStack.getItem() instanceof MetaBaseItem) { + Long[] stats = ((MetaBaseItem) aStack.getItem()).getElectricStats(aStack); + if (stats != null) { + if (stats[0] > Long.MAX_VALUE / 2) { + scaleOverflow = true; + } + tScale = tScale + stats[0]; + tStep = ((MetaBaseItem) aStack.getItem()).getRealCharge(aStack); + if (tStep > Long.MAX_VALUE / 2) { + storedOverflow = true; + } + tStored = tStored + tStep; + } + } else if (aStack.getItem() instanceof IElectricItem) { + tStored = tStored + (long) ic2.api.item.ElectricItem.manager.getCharge(aStack); + tScale = tScale + (long) ((IElectricItem) aStack.getItem()).getMaxCharge(aStack); + } + } + } + } + if (scaleOverflow) { + tScale = Long.MAX_VALUE; + } + if (storedOverflow) { + tStored = Long.MAX_VALUE; + } + return new long[] { tStored, tScale }; + } + + @Override + public String[] getInfoData() { + updateStorageInfo(); + + return new String[] { EnumChatFormatting.BLUE + getLocalName() + EnumChatFormatting.RESET, "Stored Items:", + EnumChatFormatting.GREEN + GTUtility.formatNumbers(mStored) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMax) + + EnumChatFormatting.RESET + + " EU", + "Average input:", GTUtility.formatNumbers(getBaseMetaTileEntity().getAverageElectricInput()) + " EU/t", + "Average output:", GTUtility.formatNumbers(getBaseMetaTileEntity().getAverageElectricOutput()) + " EU/t" }; + } + + private void updateStorageInfo() { + if (mMax == 0 || (count > 20)) { + long[] tmp = getStoredEnergy(); + mStored = tmp[0]; + mMax = tmp[1]; + count = 0; + } + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + NBTTagCompound tag = accessor.getNBTData(); + currenttip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.energy.stored", + GTUtility.formatNumbers(tag.getLong("mStored")), + GTUtility.formatNumbers(tag.getLong("mMax")))); + long avgIn = tag.getLong("AvgIn"); + long avgOut = tag.getLong("AvgOut"); + currenttip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.energy.avg_in_with_amperage", + GTUtility.formatNumbers(avgIn), + GTUtility.getAmperageForTier(avgIn, (byte) getInputTier()), + GTUtility.getColoredTierNameFromTier((byte) getInputTier()))); + currenttip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.energy.avg_out_with_amperage", + GTUtility.formatNumbers(avgOut), + GTUtility.getAmperageForTier(avgOut, (byte) getOutputTier()), + GTUtility.getColoredTierNameFromTier((byte) getOutputTier()))); + super.getWailaBody(itemStack, currenttip, accessor, config); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + updateStorageInfo(); + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setLong("mStored", mStored); + tag.setLong("mMax", mMax); + tag.setLong("AvgIn", getBaseMetaTileEntity().getAverageElectricInput()); + tag.setLong("AvgOut", getBaseMetaTileEntity().getAverageElectricOutput()); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + switch (mInventory.length) { + case 4 -> builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 2) + .startFromSlot(0) + .endAtSlot(3) + .slotCreator(index -> new BaseSlot(inventoryHandler, index) { + + @Override + public int getSlotStackLimit() { + return 1; + } + }) + .background(getGUITextureSet().getItemSlot()) + .build() + .setPos(70, 25)); + case 9 -> builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 3) + .startFromSlot(0) + .endAtSlot(8) + .slotCreator(index -> new BaseSlot(inventoryHandler, index) { + + @Override + public int getSlotStackLimit() { + return 1; + } + }) + .background(getGUITextureSet().getItemSlot()) + .build() + .setPos(61, 16)); + case 16 -> builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 4) + .startFromSlot(0) + .endAtSlot(15) + .slotCreator(index -> new BaseSlot(inventoryHandler, index) { + + @Override + public int getSlotStackLimit() { + return 1; + } + }) + .background(getGUITextureSet().getItemSlot()) + .build() + .setPos(52, 7)); + default -> builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 1) + .startFromSlot(0) + .endAtSlot(0) + .slotCreator(index -> new BaseSlot(inventoryHandler, index) { + + @Override + public int getSlotStackLimit() { + return 1; + } + }) + .background(getGUITextureSet().getItemSlot()) + .build() + .setPos(79, 34)); + } + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicGenerator.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicGenerator.java new file mode 100644 index 0000000000..ac923bc699 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicGenerator.java @@ -0,0 +1,338 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.IFluidHandler; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.RecipeMapWorkable; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.maps.FuelBackend; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.common.Pollution; + +public abstract class MTEBasicGenerator extends MTEBasicTank implements RecipeMapWorkable { + + public MTEBasicGenerator(int aID, String aName, String aNameRegional, int aTier, String aDescription, + ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, 3, aDescription, aTextures); + } + + public MTEBasicGenerator(int aID, String aName, String aNameRegional, int aTier, String[] aDescription, + ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, 3, aDescription, aTextures); + } + + public MTEBasicGenerator(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + public MTEBasicGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = getFront(i); + rTextures[1][i + 1] = getBack(i); + rTextures[2][i + 1] = getBottom(i); + rTextures[3][i + 1] = getTop(i); + rTextures[4][i + 1] = getSides(i); + rTextures[5][i + 1] = getFrontActive(i); + rTextures[6][i + 1] = getBackActive(i); + rTextures[7][i + 1] = getBottomActive(i); + rTextures[8][i + 1] = getTopActive(i); + rTextures[9][i + 1] = getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + return mTextures[(active ? 5 : 0) + (side == facingDirection ? 0 + : side == facingDirection.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][colorIndex + 1]; + } + + @Override + public String[] getDescription() { + String[] desc = new String[mDescriptionArray.length + 1]; + System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); + desc[mDescriptionArray.length] = "Fuel Efficiency: " + getEfficiency() + "%"; + return desc; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + public ITexture[] getFront(byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getBack(byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getTop(byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getSides(byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getFrontActive(byte aColor) { + return getFront(aColor); + } + + public ITexture[] getBackActive(byte aColor) { + return getBack(aColor); + } + + public ITexture[] getBottomActive(byte aColor) { + return getBottom(aColor); + } + + public ITexture[] getTopActive(byte aColor) { + return getTop(aColor); + } + + public ITexture[] getSidesActive(byte aColor) { + return getSides(aColor); + } + + @Override + public boolean isFacingValid(ForgeDirection side) { + return true; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex < 2; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public long maxEUOutput() { + return getBaseMetaTileEntity().isAllowedToWork() ? V[mTier] : 0L; + } + + @Override + public long maxEUStore() { + return Math.max(getEUVar(), V[mTier] * 80L + getMinimumStoredEU()); + } + + @Override + public boolean doesFillContainers() { + return getBaseMetaTileEntity().isAllowedToWork(); + // return false; + } + + @Override + public boolean doesEmptyContainers() { + return getBaseMetaTileEntity().isAllowedToWork(); + } + + @Override + public boolean canTankBeFilled() { + return getBaseMetaTileEntity().isAllowedToWork(); + } + + @Override + public boolean canTankBeEmptied() { + return getBaseMetaTileEntity().isAllowedToWork(); + } + + @Override + public boolean displaysItemStack() { + return true; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return getFuelValue(aFluid) > 0; + } + + @Override + public boolean isLiquidOutput(ForgeDirection side) { + // return super.isLiquidOutput(aSide); + return false; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && aTick % 10 == 0) { + if (mFluid != null) { + long tFuelValue = getFuelValue(mFluid), tConsumed = consumedFluidPerOperation(mFluid); + if (tFuelValue > 0 && tConsumed > 0 && mFluid.amount >= tConsumed) { + long tFluidAmountToUse = Math.min( + mFluid.amount / tConsumed, + (maxEUStore() - aBaseMetaTileEntity.getUniversalEnergyStored()) / tFuelValue); + if (tFluidAmountToUse > 0 + && aBaseMetaTileEntity.increaseStoredEnergyUnits(tFluidAmountToUse * tFuelValue, true)) { + // divided by two because this is called every 10 ticks, not 20 + Pollution.addPollution(getBaseMetaTileEntity(), getPollution() / 2); + mFluid.amount -= tFluidAmountToUse * tConsumed; + } + } + } + + if (mInventory[getInputSlot()] != null + && aBaseMetaTileEntity.getUniversalEnergyStored() < (maxEUOutput() * 20 + getMinimumStoredEU()) + && ((GTUtility.getFluidForFilledItem(mInventory[getInputSlot()], true) != null) + || solidFuelOverride(mInventory[getInputSlot()]))) { + long tFuelValue = getFuelValue(mInventory[getInputSlot()]); + if (tFuelValue <= 0) tFuelValue = getFuelValue(mInventory[getInputSlot()], true); + // System.out.println(" tFuelValue : " + tFuelValue ); + if (tFuelValue > 0) { + ItemStack tEmptyContainer = getEmptyContainer(mInventory[getInputSlot()]); + if (aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), tEmptyContainer)) { + aBaseMetaTileEntity.increaseStoredEnergyUnits(tFuelValue, true); + aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); + // divided by two because this is called every 10 ticks, not 20 + Pollution.addPollution(getBaseMetaTileEntity(), getPollution() / 2); + } + } + } + } + + if (aBaseMetaTileEntity.isServerSide()) aBaseMetaTileEntity.setActive( + aBaseMetaTileEntity.isAllowedToWork() + && aBaseMetaTileEntity.getUniversalEnergyStored() >= maxEUOutput() + getMinimumStoredEU()); + } + + /** + * @param stack the fuel stack + * @return if the stack is a solid fuel + */ + public boolean solidFuelOverride(ItemStack stack) { + // this could be used for a coal generator for example aswell... + ItemData association = GTOreDictUnificator.getAssociation(stack); + // if it is a gregtech Item, make sure its not a VOLUMETRIC_FLASK or any type of cell, else do vanilla checks + if (association != null) { + return !OrePrefixes.CELL_TYPES.contains(association.mPrefix) + && !GTUtility.areStacksEqual(ItemList.VOLUMETRIC_FLASK.get(1L), stack, true); + } else { + return stack != null && // when the stack is null its not a solid + stack.getItem() != null && // when the item in the stack is null its not a solid + !(stack.getItem() instanceof IFluidContainerItem) && // when the item is a fluid container its not a + // solid... + !(stack.getItem() instanceof IFluidHandler) && // when the item is a fluid handler its not a + // solid... + !stack.getItem() + .getUnlocalizedName() + .contains("bucket"); // since we cant really check for + // buckets... + } + } + + public abstract int getPollution(); + + @Override + public abstract RecipeMap getRecipeMap(); + + public abstract int getEfficiency(); + + public int consumedFluidPerOperation(FluidStack aLiquid) { + return 1; + } + + public int getFuelValue(FluidStack aLiquid) { + long value = getFuelValue(aLiquid, true); + return (value > Integer.MAX_VALUE) ? 0 : (int) value; + } + + public long getFuelValue(FluidStack aLiquid, boolean aLong) { + RecipeMap tRecipes = getRecipeMap(); + if (aLiquid == null || !(tRecipes.getBackend() instanceof FuelBackend tFuels)) return 0; + GTRecipe tFuel = tFuels.findFuel(aLiquid); + if (tFuel == null) return 0; + + return (long) tFuel.mSpecialValue * getEfficiency() * consumedFluidPerOperation(aLiquid) / 100; + } + + public int getFuelValue(ItemStack aStack) { + long value = getFuelValue(aStack, true); + return (value > Integer.MAX_VALUE) ? 0 : (int) value; + } + + public long getFuelValue(ItemStack aStack, boolean aLong) { + if (GTUtility.isStackInvalid(aStack) || getRecipeMap() == null) return 0; + GTRecipe tFuel = getRecipeMap().findRecipe(getBaseMetaTileEntity(), false, Long.MAX_VALUE, null, aStack); + if (tFuel == null) return 0; + + long liters = 10L; // 1000mb/100 + return (long) tFuel.mSpecialValue * liters * getEfficiency(); + } + + public ItemStack getEmptyContainer(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack) || getRecipeMap() == null) return null; + GTRecipe tFuel = getRecipeMap().findRecipe(getBaseMetaTileEntity(), false, Long.MAX_VALUE, null, aStack); + if (tFuel != null) return GTUtility.copyOrNull(tFuel.getOutput(0)); + return GTUtility.getContainerItem(aStack, true); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack) && (getFuelValue(aStack, true) > 0 + || getFuelValue(GTUtility.getFluidForFilledItem(aStack, true), true) > 0); + } + + @Override + public int getCapacity() { + return 16000; + } + + @Override + public int getTankPressure() { + return -100; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicHull.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicHull.java new file mode 100644 index 0000000000..35b6003c24 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicHull.java @@ -0,0 +1,173 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class MTEBasicHull extends MTEBasicTank { + + public MTEBasicHull(int aID, String aName, String aNameRegional, int aTier, String aDescription, + ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, 1, aDescription, aTextures); + } + + public MTEBasicHull(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String aDescription, + ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEBasicHull(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEBasicHull(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBasicHull(mName, mTier, mInventory.length, mDescriptionArray, mTextures); + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return !isOutputFacing(side); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public long getMinimumStoredEU() { + return 512; + } + + @Override + public long maxEUStore() { + return 512 + V[mTier] * 50; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxEUOutput() { + return V[mTier]; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return true; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aConnected, boolean redstoneLevel) { + return mTextures[Math.min(2, side.ordinal()) + (side == aFacing ? 3 : 0)][colorIndex + 1]; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[6][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1] }; + rTextures[1][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1] }; + rTextures[2][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1] }; + rTextures[3][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; + rTextures[4][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; + rTextures[5][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; + } + return rTextures; + } + + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public boolean displaysItemStack() { + return false; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public int getCapacity() { + return (mTier + 1) * 1000; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicHullNonElectric.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicHullNonElectric.java new file mode 100644 index 0000000000..ec01af0408 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicHullNonElectric.java @@ -0,0 +1,75 @@ +package gregtech.api.metatileentity.implementations; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public abstract class MTEBasicHullNonElectric extends MTEBasicHull { + + public MTEBasicHullNonElectric(int aID, String aName, String aNameRegional, int aTier, String aDescription) { + super(aID, aName, aNameRegional, aTier, aDescription); + } + + public MTEBasicHullNonElectric(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures); + } + + public MTEBasicHullNonElectric(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + return mTextures[Math.min(2, sideDirection.ordinal())][colorIndex + 1]; + } + + @Override + public boolean isElectric() { + return false; + } + + @Override + public boolean isEnetInput() { + return false; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 0; + } + + @Override + public long maxEUStore() { + return 0; + } + + @Override + public long maxEUInput() { + return 0; + } + + @Override + public long maxEUOutput() { + return 0; + } + + @Override + public abstract ITexture[][][] getTextureSet(ITexture[] aTextures); +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachine.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachine.java new file mode 100644 index 0000000000..25dfb9b58b --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachine.java @@ -0,0 +1,1563 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.GTValues.debugCleanroom; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; +import static gregtech.api.metatileentity.BaseTileEntity.FLUID_TRANSFER_TOOLTIP; +import static gregtech.api.metatileentity.BaseTileEntity.ITEM_TRANSFER_TOOLTIP; +import static gregtech.api.metatileentity.BaseTileEntity.NEI_TRANSFER_STEAM_TOOLTIP; +import static gregtech.api.metatileentity.BaseTileEntity.NEI_TRANSFER_VOLTAGE_TOOLTIP; +import static gregtech.api.metatileentity.BaseTileEntity.POWER_SOURCE_KEY; +import static gregtech.api.metatileentity.BaseTileEntity.SPECIAL_SLOT_TOOLTIP; +import static gregtech.api.metatileentity.BaseTileEntity.STALLED_STUTTERING_TOOLTIP; +import static gregtech.api.metatileentity.BaseTileEntity.STALLED_VENT_TOOLTIP; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.metatileentity.BaseTileEntity.UNUSED_SLOT_TOOLTIP; +import static gregtech.api.util.GTRecipeConstants.EXPLODE; +import static gregtech.api.util.GTRecipeConstants.ON_FIRE; +import static gregtech.api.util.GTUtility.moveMultipleItemStacks; +import static net.minecraftforge.common.util.ForgeDirection.DOWN; +import static net.minecraftforge.common.util.ForgeDirection.UNKNOWN; +import static net.minecraftforge.common.util.ForgeDirection.UP; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; + +import org.apache.commons.lang3.tuple.Pair; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.fluid.FluidStackTank; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.SteamTexture; +import gregtech.api.interfaces.ICleanroom; +import gregtech.api.interfaces.IConfigurationCircuitSupport; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IOverclockDescriptionProvider; +import gregtech.api.interfaces.tileentity.RecipeMapWorkable; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.overclockdescriber.EUOverclockDescriber; +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.recipe.BasicUIProperties; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTClientPreference; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.GTWaila; +import gregtech.api.util.GT_TooltipDataCache; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.gui.modularui.UIHelper; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + *

+ * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple + * Machine + */ +public abstract class MTEBasicMachine extends MTEBasicTank implements RecipeMapWorkable, IConfigurationCircuitSupport, + IOverclockDescriptionProvider, IAddGregtechLogo, IAddUIWidgets { + + /** + * return values for checkRecipe() + */ + protected static final int DID_NOT_FIND_RECIPE = 0, FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS = 1, + FOUND_AND_SUCCESSFULLY_USED_RECIPE = 2; + + public static final int OTHER_SLOT_COUNT = 5; + public final ItemStack[] mOutputItems; + public final int mInputSlotCount, mAmperage; + public boolean mAllowInputFromOutputSide = false, mFluidTransfer = false, mItemTransfer = false, + mHasBeenUpdated = false, mStuttering = false, mCharge = false, mDecharge = false; + public boolean mDisableFilter = true; + public boolean mDisableMultiStack = true; + public int mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mOutputBlocked = 0; + public ForgeDirection mMainFacing = ForgeDirection.WEST; + public FluidStack mOutputFluid; + protected final OverclockDescriber overclockDescriber; + + /** + * Contains the Recipe which has been previously used, or null if there was no previous Recipe, which could have + * been buffered + */ + protected GTRecipe mLastRecipe = null; + + private FluidStack mFluidOut; + protected final FluidStackTank fluidOutputTank = new FluidStackTank( + () -> mFluidOut, + fluidStack -> mFluidOut = fluidStack, + this::getCapacity); + + /** + * Registers machine with single-line description. + * + * @param aOverlays 0 = SideFacingActive 1 = SideFacingInactive 2 = FrontFacingActive 3 = FrontFacingInactive 4 = + * TopFacingActive 5 = TopFacingInactive 6 = BottomFacingActive 7 = BottomFacingInactive ----- Not + * all Array Elements have to be initialised, you can also just use 8 Parameters for the Default + * Pipe Texture Overlays ----- 8 = BottomFacingPipeActive 9 = BottomFacingPipeInactive 10 = + * TopFacingPipeActive 11 = TopFacingPipeInactive 12 = SideFacingPipeActive 13 = + * SideFacingPipeInactive + */ + public MTEBasicMachine(int aID, String aName, String aNameRegional, int aTier, int aAmperage, String aDescription, + int aInputSlotCount, int aOutputSlotCount, ITexture... aOverlays) { + super( + aID, + aName, + aNameRegional, + aTier, + OTHER_SLOT_COUNT + aInputSlotCount + aOutputSlotCount + 1, + aDescription, + aOverlays); + mInputSlotCount = Math.max(0, aInputSlotCount); + mOutputItems = new ItemStack[Math.max(0, aOutputSlotCount)]; + mAmperage = aAmperage; + overclockDescriber = createOverclockDescriber(); + } + + /** + * Registers machine with multi-line descriptions. + */ + public MTEBasicMachine(int aID, String aName, String aNameRegional, int aTier, int aAmperage, String[] aDescription, + int aInputSlotCount, int aOutputSlotCount, ITexture... aOverlays) { + super( + aID, + aName, + aNameRegional, + aTier, + OTHER_SLOT_COUNT + aInputSlotCount + aOutputSlotCount + 1, + aDescription, + aOverlays); + mInputSlotCount = Math.max(0, aInputSlotCount); + mOutputItems = new ItemStack[Math.max(0, aOutputSlotCount)]; + mAmperage = aAmperage; + overclockDescriber = createOverclockDescriber(); + } + + /** + * For {@link #newMetaEntity}. + */ + public MTEBasicMachine(String aName, int aTier, int aAmperage, String[] aDescription, ITexture[][][] aTextures, + int aInputSlotCount, int aOutputSlotCount) { + super(aName, aTier, OTHER_SLOT_COUNT + aInputSlotCount + aOutputSlotCount + 1, aDescription, aTextures); + mInputSlotCount = Math.max(0, aInputSlotCount); + mOutputItems = new ItemStack[Math.max(0, aOutputSlotCount)]; + mAmperage = aAmperage; + overclockDescriber = createOverclockDescriber(); + } + + /** + * To be called by the constructor to initialize this instance's overclock behavior + */ + protected OverclockDescriber createOverclockDescriber() { + return new EUOverclockDescriber(mTier, mAmperage); + } + + protected boolean isValidMainFacing(ForgeDirection side) { + return (side.flag & (UP.flag | DOWN.flag | UNKNOWN.flag)) == 0; // Horizontal + } + + public boolean setMainFacing(ForgeDirection side) { + if (!isValidMainFacing(side)) return false; + mMainFacing = side; + if (getBaseMetaTileEntity().getFrontFacing() == mMainFacing) { + getBaseMetaTileEntity().setFrontFacing(side.getOpposite()); + } + onFacingChange(); + onMachineBlockUpdate(); + return true; + } + + @Override + public void onFacingChange() { + super.onFacingChange(); + // Set up the correct facing (front towards player, output opposite) client-side before the server packet + // arrives + if (mMainFacing == UNKNOWN) { + IGregTechTileEntity te = getBaseMetaTileEntity(); + if (te != null && te.getWorld().isRemote) { + mMainFacing = te.getFrontFacing(); + te.setFrontFacing(te.getBackFacing()); + } + } + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[14][17][]; + aTextures = Arrays.copyOf(aTextures, 14); + + for (int i = 0; i < aTextures.length; i++) if (aTextures[i] != null) for (byte c = -1; c < 16; c++) { + if (rTextures[i][c + 1] == null) + rTextures[i][c + 1] = new ITexture[] { MACHINE_CASINGS[mTier][c + 1], aTextures[i] }; + } + + 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; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + final int textureIndex; + if ((mMainFacing.flag & (UP.flag | DOWN.flag)) != 0) { // UP or DOWN + if (sideDirection == facingDirection) { + textureIndex = active ? 2 : 3; + } else { + textureIndex = switch (sideDirection) { + case DOWN -> active ? 6 : 7; + case UP -> active ? 4 : 5; + default -> active ? 0 : 1; + }; + } + } else { + if (sideDirection == mMainFacing) { + textureIndex = active ? 2 : 3; + } else { + if (showPipeFacing() && sideDirection == facingDirection) { + textureIndex = switch (sideDirection) { + case DOWN -> active ? 8 : 9; + case UP -> active ? 10 : 11; + default -> active ? 12 : 13; + }; + } else { + textureIndex = switch (sideDirection) { + case DOWN -> active ? 6 : 7; + case UP -> active ? 4 : 5; + default -> active ? 0 : 1; + }; + } + } + } + return mTextures[textureIndex][colorIndex + 1]; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isOverclockerUpgradable() { + return false; + } + + @Override + public boolean isTransformerUpgradable() { + return false; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex > 0 && super.isValidSlot(aIndex) + && aIndex != getCircuitSlot() + && aIndex != OTHER_SLOT_COUNT + mInputSlotCount + mOutputItems.length; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + // Either mMainFacing or mMainFacing is horizontal + return ((facing.flag | mMainFacing.flag) & ~(UP.flag | DOWN.flag | UNKNOWN.flag)) != 0; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side != mMainFacing; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public boolean isLiquidInput(ForgeDirection side) { + return side != mMainFacing && (mAllowInputFromOutputSide || side != getBaseMetaTileEntity().getFrontFacing()); + } + + @Override + public boolean isLiquidOutput(ForgeDirection side) { + return side != mMainFacing; + } + + @Override + public long getMinimumStoredEU() { + return V[mTier] * 16L; + } + + @Override + public long maxEUStore() { + return V[mTier] * 64L; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxSteamStore() { + return maxEUStore(); + } + + @Override + public long maxAmperesIn() { + return ((long) mEUt * 2L) / V[mTier] + 1L; + } + + @Override + public int getInputSlot() { + return OTHER_SLOT_COUNT; + } + + @Override + public int getOutputSlot() { + return OTHER_SLOT_COUNT + mInputSlotCount; + } + + public int getSpecialSlotIndex() { + return 3; + } + + @Override + public int getStackDisplaySlot() { + return 2; + } + + @Override + public int rechargerSlotStartIndex() { + return 1; + } + + @Override + public int dechargerSlotStartIndex() { + return 1; + } + + @Override + public int rechargerSlotCount() { + return mCharge ? 1 : 0; + } + + @Override + public int dechargerSlotCount() { + return mDecharge ? 1 : 0; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public int getProgresstime() { + return mProgresstime; + } + + @Override + public int maxProgresstime() { + return mMaxProgresstime; + } + + @Override + public int increaseProgress(int aProgress) { + mProgresstime += aProgress; + return mMaxProgresstime - mProgresstime; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return getFillableStack() != null || (getRecipeMap() != null && getRecipeMap().containsInput(aFluid)); + } + + @Override + public boolean isFluidChangingAllowed() { + return true; + } + + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public boolean displaysItemStack() { + return true; + } + + @Override + public boolean displaysStackSize() { + return true; + } + + @Override + public FluidStack getDrainableStack() { + return mFluidOut; + } + + @Override + public FluidStack setDrainableStack(FluidStack aFluid) { + markDirty(); + mFluidOut = aFluid; + return mFluidOut; + } + + @Override + public boolean isDrainableStackSeparate() { + return true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) return true; + if (!GTMod.gregtechproxy.mForceFreeFace) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (aBaseMetaTileEntity.getAirAtSide(side)) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + } + GTUtility.sendChatToPlayer(aPlayer, "No free Side!"); + return true; + } + + @Override + public void initDefaultModes(NBTTagCompound aNBT) { + mMainFacing = ForgeDirection.UNKNOWN; + if (!getBaseMetaTileEntity().getWorld().isRemote) { + final GTClientPreference tPreference = GTMod.gregtechproxy + .getClientPreference(getBaseMetaTileEntity().getOwnerUuid()); + if (tPreference != null) { + mDisableFilter = !tPreference.isSingleBlockInitialFilterEnabled(); + mDisableMultiStack = !tPreference.isSingleBlockInitialMultiStackEnabled(); + } + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("mFluidTransfer", mFluidTransfer); + aNBT.setBoolean("mItemTransfer", mItemTransfer); + aNBT.setBoolean("mHasBeenUpdated", mHasBeenUpdated); + aNBT.setBoolean("mAllowInputFromOutputSide", mAllowInputFromOutputSide); + aNBT.setBoolean("mDisableFilter", mDisableFilter); + aNBT.setBoolean("mDisableMultiStack", mDisableMultiStack); + aNBT.setInteger("mEUt", mEUt); + aNBT.setInteger("mMainFacing", mMainFacing.ordinal()); + aNBT.setInteger("mProgresstime", mProgresstime); + aNBT.setInteger("mMaxProgresstime", mMaxProgresstime); + if (mOutputFluid != null) aNBT.setTag("mOutputFluid", mOutputFluid.writeToNBT(new NBTTagCompound())); + if (mFluidOut != null) aNBT.setTag("mFluidOut", mFluidOut.writeToNBT(new NBTTagCompound())); + + for (int i = 0; i < mOutputItems.length; i++) + if (mOutputItems[i] != null) GTUtility.saveItem(aNBT, "mOutputItem" + i, mOutputItems[i]); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mFluidTransfer = aNBT.getBoolean("mFluidTransfer"); + mItemTransfer = aNBT.getBoolean("mItemTransfer"); + mHasBeenUpdated = aNBT.getBoolean("mHasBeenUpdated"); + mAllowInputFromOutputSide = aNBT.getBoolean("mAllowInputFromOutputSide"); + mDisableFilter = aNBT.getBoolean("mDisableFilter"); + mDisableMultiStack = aNBT.getBoolean("mDisableMultiStack"); + mEUt = aNBT.getInteger("mEUt"); + mMainFacing = ForgeDirection.getOrientation(aNBT.getInteger("mMainFacing")); + mProgresstime = aNBT.getInteger("mProgresstime"); + mMaxProgresstime = aNBT.getInteger("mMaxProgresstime"); + mOutputFluid = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mOutputFluid")); + mFluidOut = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluidOut")); + + for (int i = 0; i < mOutputItems.length; i++) mOutputItems[i] = GTUtility.loadItem(aNBT, "mOutputItem" + i); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (aBaseMetaTileEntity.isServerSide()) { + mCharge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3; + mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3; + + doDisplayThings(); + + boolean tSucceeded = false; + + if (mMaxProgresstime > 0 && (mProgresstime >= 0 || aBaseMetaTileEntity.isAllowedToWork())) { + markDirty(); + aBaseMetaTileEntity.setActive(true); + if (mProgresstime < 0 || drainEnergyForProcess(mEUt)) { + if (++mProgresstime >= mMaxProgresstime) { + for (int i = 0; i < mOutputItems.length; i++) + for (int j = 0; j < mOutputItems.length; j++) if (aBaseMetaTileEntity + .addStackToSlot(getOutputSlot() + ((j + i) % mOutputItems.length), mOutputItems[i])) + break; + if (mOutputFluid != null) + if (getDrainableStack() == null) setDrainableStack(mOutputFluid.copy()); + else if (mOutputFluid.isFluidEqual(getDrainableStack())) + getDrainableStack().amount += mOutputFluid.amount; + Arrays.fill(mOutputItems, null); + mOutputFluid = null; + mEUt = 0; + mProgresstime = 0; + mMaxProgresstime = 0; + mStuttering = false; + tSucceeded = true; + endProcess(); + } + if (mProgresstime > 5) mStuttering = false; + } else { + if (!mStuttering) { + stutterProcess(); + if (canHaveInsufficientEnergy()) mProgresstime = -100; + mStuttering = true; + } + } + } else { + aBaseMetaTileEntity.setActive(false); + } + + boolean tRemovedOutputFluid = false; + + if (doesAutoOutputFluids() && getDrainableStack() != null + && aBaseMetaTileEntity.getFrontFacing() != mMainFacing + && (tSucceeded || aTick % 20 == 0)) { + IFluidHandler tTank = aBaseMetaTileEntity.getITankContainerAtSide(aBaseMetaTileEntity.getFrontFacing()); + if (tTank != null) { + FluidStack tDrained = drain(1000, false); + if (tDrained != null) { + final int tFilledAmount = tTank.fill(aBaseMetaTileEntity.getBackFacing(), tDrained, false); + if (tFilledAmount > 0) + tTank.fill(aBaseMetaTileEntity.getBackFacing(), drain(tFilledAmount, true), true); + } + } + if (getDrainableStack() == null) tRemovedOutputFluid = true; + } + + if (doesAutoOutput() && !isOutputEmpty() + && aBaseMetaTileEntity.getFrontFacing() != mMainFacing + && (tSucceeded || mOutputBlocked % 300 == 1 + || aBaseMetaTileEntity.hasInventoryBeenModified() + || aTick % 600 == 0)) { + TileEntity tTileEntity2 = aBaseMetaTileEntity.getTileEntityAtSide(aBaseMetaTileEntity.getFrontFacing()); + long tStoredEnergy = aBaseMetaTileEntity.getUniversalEnergyStored(); + int tMaxStacks = (int) (tStoredEnergy / 64L); + if (tMaxStacks > mOutputItems.length) tMaxStacks = mOutputItems.length; + + moveMultipleItemStacks( + aBaseMetaTileEntity, + tTileEntity2, + aBaseMetaTileEntity.getFrontFacing(), + aBaseMetaTileEntity.getBackFacing(), + null, + false, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1, + tMaxStacks); + } + + if (mOutputBlocked != 0) if (isOutputEmpty()) mOutputBlocked = 0; + else mOutputBlocked++; + + if (allowToCheckRecipe()) { + if (mMaxProgresstime <= 0 && aBaseMetaTileEntity.isAllowedToWork() + && (tRemovedOutputFluid || tSucceeded + || aBaseMetaTileEntity.hasInventoryBeenModified() + || aTick % 600 == 0 + || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) + && hasEnoughEnergyToCheckRecipe()) { + if (checkRecipe() == FOUND_AND_SUCCESSFULLY_USED_RECIPE) { + if (getSpecialSlot() != null && getSpecialSlot().stackSize <= 0) + mInventory[getSpecialSlotIndex()] = null; + for (int i = getInputSlot(), j = i + mInputSlotCount; i < j; i++) + if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null; + for (int i = 0; i < mOutputItems.length; i++) { + mOutputItems[i] = GTUtility.copyOrNull(mOutputItems[i]); + if (mOutputItems[i] != null && mOutputItems[i].stackSize > 64) + mOutputItems[i].stackSize = 64; + mOutputItems[i] = GTOreDictUnificator.get(true, mOutputItems[i]); + } + if (mFluid != null && mFluid.amount <= 0) mFluid = null; + mMaxProgresstime = Math.max(1, mMaxProgresstime); + if (GTUtility.isDebugItem(mInventory[dechargerSlotStartIndex()])) { + mEUt = mMaxProgresstime = 1; + } + startProcess(); + } else { + mMaxProgresstime = 0; + Arrays.fill(mOutputItems, null); + mOutputFluid = null; + } + } + } else { + if (!mStuttering) { + stutterProcess(); + mStuttering = true; + } + } + } + // Only using mNeedsSteamVenting right now and assigning it to 64 to space in the range for more single block + // machine problems. + // Value | Class | Field + // 1 | GT_MetaTileEntity_BasicMachine | mStuttering + // 64 | GT_MetaTileEntity_BasicMachine_Bronze | mNeedsSteamVenting + aBaseMetaTileEntity.setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID() & ~127)); // | (mStuttering ? 1 : + // 0)); + } + + protected void doDisplayThings() { + if (!isValidMainFacing(mMainFacing) && isValidMainFacing(getBaseMetaTileEntity().getFrontFacing())) { + mMainFacing = getBaseMetaTileEntity().getFrontFacing(); + } + if (isValidMainFacing(mMainFacing) && !mHasBeenUpdated) { + mHasBeenUpdated = true; + getBaseMetaTileEntity().setFrontFacing(getBaseMetaTileEntity().getBackFacing()); + } + } + + protected boolean hasEnoughEnergyToCheckRecipe() { + return getBaseMetaTileEntity().isUniversalEnergyStored(getMinimumStoredEU() / 2); + } + + protected boolean drainEnergyForProcess(long aEUt) { + return getBaseMetaTileEntity().decreaseStoredEnergyUnits(aEUt, false); + } + + /** + * Calculates overclock based on {@link #overclockDescriber}. + */ + protected void calculateCustomOverclock(GTRecipe recipe) { + OverclockCalculator calculator = overclockDescriber.createCalculator( + new OverclockCalculator().setRecipeEUt(recipe.mEUt) + .setDuration(recipe.mDuration) + .setOneTickDiscount(true), + recipe); + calculator.calculate(); + mEUt = (int) calculator.getConsumption(); + mMaxProgresstime = calculator.getDuration(); + } + + /** + * Helper method for calculating simple overclock. + */ + protected void calculateOverclockedNess(int eut, int duration) { + OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(eut) + .setEUt(V[mTier] * mAmperage) + .setDuration(duration) + .setOneTickDiscount(true) + .calculate(); + mEUt = (int) calculator.getConsumption(); + mMaxProgresstime = calculator.getDuration(); + } + + protected ItemStack getSpecialSlot() { + return mInventory[getSpecialSlotIndex()]; + } + + protected ItemStack getOutputAt(int aIndex) { + return mInventory[getOutputSlot() + aIndex]; + } + + protected ItemStack[] getAllOutputs() { + ItemStack[] rOutputs = new ItemStack[mOutputItems.length]; + for (int i = 0; i < mOutputItems.length; i++) rOutputs[i] = getOutputAt(i); + return rOutputs; + } + + protected boolean canOutput(GTRecipe aRecipe) { + return aRecipe != null && (aRecipe.mNeedsEmptyOutput ? isOutputEmpty() && getDrainableStack() == null + : canOutput(aRecipe.getFluidOutput(0)) && canOutput(aRecipe.mOutputs)); + } + + protected boolean canOutput(ItemStack... aOutputs) { + if (aOutputs == null) return true; + ItemStack[] tOutputSlots = getAllOutputs(); + for (int i = 0; i < tOutputSlots.length && i < aOutputs.length; i++) + if (tOutputSlots[i] != null && aOutputs[i] != null + && (!GTUtility.areStacksEqual(tOutputSlots[i], aOutputs[i], false) + || tOutputSlots[i].stackSize + aOutputs[i].stackSize > tOutputSlots[i].getMaxStackSize())) { + mOutputBlocked++; + return false; + } + return true; + } + + protected boolean canOutput(FluidStack aOutput) { + if (aOutput == null) return true; + FluidStack drainableStack = getDrainableStack(); + if (drainableStack != null && !drainableStack.isFluidEqual(aOutput)) return false; + return (drainableStack != null ? drainableStack.amount : 0) + aOutput.amount <= getCapacity(); + } + + protected ItemStack getInputAt(int aIndex) { + return mInventory[getInputSlot() + aIndex]; + } + + protected ItemStack[] getAllInputs() { + int tRealInputSlotCount = this.mInputSlotCount + (allowSelectCircuit() ? 1 : 0); + ItemStack[] rInputs = new ItemStack[tRealInputSlotCount]; + for (int i = 0; i < mInputSlotCount; i++) rInputs[i] = getInputAt(i); + if (allowSelectCircuit()) rInputs[mInputSlotCount] = getStackInSlot(getCircuitSlot()); + return rInputs; + } + + protected boolean isOutputEmpty() { + boolean rIsEmpty = true; + for (ItemStack tOutputSlotContent : getAllOutputs()) if (tOutputSlotContent != null) { + rIsEmpty = false; + break; + } + return rIsEmpty; + } + + @Override + public void onValueUpdate(byte aValue) { + mMainFacing = ForgeDirection.getOrientation(aValue); + } + + @Override + public byte getUpdateData() { + return (byte) mMainFacing.ordinal(); + } + + @Override + public void doSound(byte aIndex, double aX, double aY, double aZ) { + super.doSound(aIndex, aX, aY, aZ); + if (aIndex == 8) GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_INTERRUPT_ONE, 100, 1.0F, aX, aY, aZ); + } + + public boolean doesAutoOutput() { + return mItemTransfer; + } + + public boolean doesAutoOutputFluids() { + return mFluidTransfer; + } + + public boolean allowToCheckRecipe() { + return true; + } + + public boolean showPipeFacing() { + return true; + } + + /** + * Called whenever the Machine successfully started a Process, useful for Sound Effects + */ + public void startProcess() { + // + } + + /** + * Called whenever the Machine successfully finished a Process, useful for Sound Effects + */ + public void endProcess() { + // + } + + /** + * Called whenever the Machine aborted a Process, useful for Sound Effects + */ + public void abortProcess() { + // + } + + /** + * Called whenever the Machine aborted a Process but still works on it, useful for Sound Effects + */ + public void stutterProcess() { + if (useStandardStutterSound()) sendSound((byte) 8); + } + + /** + * If this Machine can have the Insufficient Energy Line Problem + */ + public boolean canHaveInsufficientEnergy() { + return true; + } + + public boolean useStandardStutterSound() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { "Progress:", + EnumChatFormatting.GREEN + GTUtility.formatNumbers((mProgresstime / 20)) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + "Stored Energy:", + EnumChatFormatting.GREEN + GTUtility.formatNumbers(getBaseMetaTileEntity().getStoredEU()) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getBaseMetaTileEntity().getEUCapacity()) + + EnumChatFormatting.RESET + + " EU", + "Probably uses: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(mEUt) + + EnumChatFormatting.RESET + + " EU/t at " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(mEUt == 0 ? 0 : mAmperage) + + EnumChatFormatting.RESET + + " A" }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing() || side == mMainFacing) { + if (aPlayer.isSneaking()) { + mDisableFilter = !mDisableFilter; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.hatch.disableFilter." + mDisableFilter)); + } else { + mAllowInputFromOutputSide = !mAllowInputFromOutputSide; + GTUtility.sendChatToPlayer( + aPlayer, + mAllowInputFromOutputSide ? GTUtility.trans("095", "Input from Output Side allowed") + : GTUtility.trans("096", "Input from Output Side forbidden")); + } + } + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, + EntityPlayer entityPlayer, float aX, float aY, float aZ) { + if (!entityPlayer.isSneaking()) return false; + final boolean click = super.onSolderingToolRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ); + if (click) return true; + if (wrenchingSide != mMainFacing) return false; + mDisableMultiStack = !mDisableMultiStack; + GTUtility.sendChatToPlayer( + entityPlayer, + StatCollector.translateToLocal("GT5U.hatch.disableMultiStack." + mDisableMultiStack)); + return true; + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCoverID) { + if (side != mMainFacing) return true; + CoverBehaviorBase tBehavior = GregTechAPI.getCoverBehaviorNew(aCoverID.toStack()); + return tBehavior.isGUIClickable( + side, + GTUtility.stackToInt(aCoverID.toStack()), + tBehavior.createDataObject(), + getBaseMetaTileEntity()); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side != mMainFacing && aIndex >= getOutputSlot() && aIndex < getOutputSlot() + mOutputItems.length; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (side == mMainFacing || aIndex < getInputSlot() + || aIndex >= getInputSlot() + mInputSlotCount + || (!mAllowInputFromOutputSide && side == aBaseMetaTileEntity.getFrontFacing())) return false; + for (int i = getInputSlot(), j = i + mInputSlotCount; i < j; i++) + if (GTUtility.areStacksEqual(GTOreDictUnificator.get(aStack), mInventory[i]) && mDisableMultiStack) + return i == aIndex; + return mDisableFilter || allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack); + } + + /** + * Test if given stack can be inserted into specified slot. If mDisableMultiStack is false, before execution of this + * method it is ensured there is no such kind of item inside any input slots already. Otherwise, you don't need to + * check for it anyway. + */ + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return !mDisableMultiStack || mInventory[aIndex] == null; + } + + @Override + public boolean allowSelectCircuit() { + return false; + } + + protected final ItemStack[] appendSelectedCircuit(ItemStack... inputs) { + if (allowSelectCircuit()) { + ItemStack circuit = getStackInSlot(getCircuitSlot()); + if (circuit != null) { + ItemStack[] result = Arrays.copyOf(inputs, inputs.length + 1); + result[inputs.length] = circuit; + return result; + } + } + return inputs; + } + + @Override + public int getCircuitSlot() { + return 4; + } + + @Override + public int getCircuitGUISlot() { + return 3; + } + + @Override + public List getConfigurationCircuits() { + return GregTechAPI.getConfigurationCircuitList(mTier); + } + + @Override + public RecipeMap getRecipeMap() { + return null; + } + + /** + * Override this to check the Recipes yourself, super calls to this could be useful if you just want to add a + * special case + *

+ * I thought about Enum too, but Enum doesn't add support for people adding other return Systems. + *

+ * Funny how Eclipse marks the word Enum as not correctly spelled. + * + * @return see constants above + */ + public int checkRecipe() { + return checkRecipe(false); + } + + public static boolean isValidForLowGravity(GTRecipe tRecipe, int dimId) { + return // TODO check or get a better solution + DimensionManager.getProvider(dimId) + .getClass() + .getName() + .contains("Orbit") + || DimensionManager.getProvider(dimId) + .getClass() + .getName() + .endsWith("Space") + || DimensionManager.getProvider(dimId) + .getClass() + .getName() + .endsWith("Asteroids") + || DimensionManager.getProvider(dimId) + .getClass() + .getName() + .endsWith("SS") + || DimensionManager.getProvider(dimId) + .getClass() + .getName() + .contains("SpaceStation"); + } + + /** + * + * @param skipOC disables OverclockedNess calculation and check - if you do you must implement your own method... + * @return DID_NOT_FIND_RECIPE = 0, FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS = 1, + * FOUND_AND_SUCCESSFULLY_USED_RECIPE = 2; + */ + public int checkRecipe(boolean skipOC) { + RecipeMap tMap = getRecipeMap(); + if (tMap == null) return DID_NOT_FIND_RECIPE; + GTRecipe tRecipe = tMap.findRecipeQuery() + .items(getAllInputs()) + .fluids(getFillableStack()) + .specialSlot(getSpecialSlot()) + .voltage(V[mTier]) + .cachedRecipe(mLastRecipe) + .find(); + if (tRecipe == null) { + return DID_NOT_FIND_RECIPE; + } + if (tRecipe.getMetadataOrDefault(EXPLODE, false) && getBaseMetaTileEntity() != null) { + getBaseMetaTileEntity().doExplosion(V[mTier] * 4); + return DID_NOT_FIND_RECIPE; + } + if (tRecipe.getMetadataOrDefault(ON_FIRE, false) && getBaseMetaTileEntity() != null) { + getBaseMetaTileEntity().setOnFire(); + return DID_NOT_FIND_RECIPE; + } + + if (GTMod.gregtechproxy.mLowGravProcessing && (tRecipe.mSpecialValue == -100 || tRecipe.mSpecialValue == -300) + && !isValidForLowGravity(tRecipe, getBaseMetaTileEntity().getWorld().provider.dimensionId)) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + if (tRecipe.mCanBeBuffered) mLastRecipe = tRecipe; + if (!canOutput(tRecipe)) { + mOutputBlocked++; + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + } + ICleanroom cleanroom = getCleanroom(); + if (tRecipe.mSpecialValue == -200 || tRecipe.mSpecialValue == -300) { + if (cleanroom == null || !cleanroom.isValidCleanroom() || cleanroom.getCleanness() == 0) { + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + } + } + if (!tRecipe.isRecipeInputEqual(true, new FluidStack[] { getFillableStack() }, getAllInputs())) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + for (int i = 0; i < mOutputItems.length; i++) + if (getBaseMetaTileEntity().getRandomNumber(10000) < tRecipe.getOutputChance(i)) + mOutputItems[i] = tRecipe.getOutput(i); + if (tRecipe.mSpecialValue == -200 || tRecipe.mSpecialValue == -300) { + assert cleanroom != null; + for (int i = 0; i < mOutputItems.length; i++) if (mOutputItems[i] != null + && getBaseMetaTileEntity().getRandomNumber(10000) > cleanroom.getCleanness()) { + if (debugCleanroom) { + GTLog.out.println( + "BasicMachine: Voiding output due to cleanness failure. Cleanness = " + + cleanroom.getCleanness()); + } + mOutputItems[i] = null; + } + } + mOutputFluid = tRecipe.getFluidOutput(0); + if (!skipOC) { + calculateCustomOverclock(tRecipe); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + } + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getBottomFacingPipeActive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getBottomFacingPipeInactive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getTopFacingPipeActive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getTopFacingPipeInactive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getSideFacingPipeActive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getSideFacingPipeInactive(byte aColor) { + return new ITexture[] { MACHINE_CASINGS[mTier][aColor + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + final NBTTagCompound tag = accessor.getNBTData(); + + if (tag.getBoolean("stutteringSingleBlock")) { + currenttip.add("Status: insufficient energy"); + } else { + boolean isActive = tag.getBoolean("isActiveSingleBlock"); + if (isActive) { + int mEUt = tag.getInteger("eut"); + if (!isSteampowered()) { + if (mEUt > 0) { + currenttip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.energy.use_with_amperage", + GTUtility.formatNumbers(mEUt), + GTUtility.getAmperageForTier(mEUt, (byte) getInputTier()), + GTUtility.getColoredTierNameFromTier((byte) getInputTier()))); + } else if (mEUt < 0) { + currenttip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.energy.produce_with_amperage", + GTUtility.formatNumbers(-mEUt), + GTUtility.getAmperageForTier(-mEUt, (byte) getOutputTier()), + GTUtility.getColoredTierNameFromTier((byte) getOutputTier()))); + } + } else { + if (mEUt > 0) { + currenttip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.energy.use", + GTUtility.formatNumbers(mEUt), + GTUtility.getColoredTierNameFromVoltage(mEUt))); + } else if (mEUt < 0) { + currenttip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.energy.produce", + GTUtility.formatNumbers(-mEUt), + GTUtility.getColoredTierNameFromVoltage(-mEUt))); + } + } + } + currenttip.add( + GTWaila.getMachineProgressString( + isActive, + tag.getInteger("maxProgressSingleBlock"), + tag.getInteger("progressSingleBlock"))); + } + + currenttip.add( + String.format( + "Machine Facing: %s", + ForgeDirection.getOrientation(tag.getInteger("mainFacingSingleBlock")) + .name())); + + currenttip.add( + String.format( + "Output Facing: %s", + ForgeDirection.getOrientation(tag.getInteger("outputFacingSingleBlock")) + .name())); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + + tag.setInteger("progressSingleBlock", mProgresstime); + tag.setInteger("maxProgressSingleBlock", mMaxProgresstime); + tag.setInteger("mainFacingSingleBlock", mMainFacing.ordinal()); + tag.setBoolean("stutteringSingleBlock", mStuttering); + + final IGregTechTileEntity tileEntity = getBaseMetaTileEntity(); + if (tileEntity != null) { + tag.setBoolean("isActiveSingleBlock", tileEntity.isActive()); + tag.setInteger( + "outputFacingSingleBlock", + tileEntity.getFrontFacing() + .ordinal()); + if (tileEntity.isActive()) tag.setInteger("eut", mEUt); + } + } + + @Nonnull + @Override + public OverclockDescriber getOverclockDescriber() { + return overclockDescriber; + } + + // GUI stuff + + @Override + public int getCircuitSlotX() { + return 153; + } + + @Override + public int getCircuitSlotY() { + return 63; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + if (getRecipeMap() != null) { + getRecipeMap().getFrontend() + .addGregTechLogo(builder, new Pos2d(0, 0)); + } else { + builder.widget( + new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) + .setSize(17, 17) + .setPos(152, 63)); + } + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + if (!isSteampowered()) { + builder.widget(createFluidAutoOutputButton()); + builder.widget(createItemAutoOutputButton()); + } + + BasicUIProperties uiProperties = getUIProperties(); + addIOSlots(builder, uiProperties); + + builder.widget(createChargerSlot(79, 62)); + + addProgressBar(builder, uiProperties); + + builder.widget( + createErrorStatusArea( + builder, + isSteampowered() ? GTUITextures.PICTURE_STALLED_STEAM : GTUITextures.PICTURE_STALLED_ELECTRICITY)); + } + + /** + * Override to specify UI properties if this machine doesn't work with recipemap. + */ + protected BasicUIProperties getUIProperties() { + if (getRecipeMap() != null) { + BasicUIProperties originalProperties = getRecipeMap().getFrontend() + .getUIProperties(); + return originalProperties.toBuilder() + .maxItemInputs(mInputSlotCount) + .maxItemOutputs(mOutputItems.length) + .maxFluidInputs(Math.min(originalProperties.maxFluidInputs, 1)) + .maxFluidOutputs(Math.min(originalProperties.maxFluidOutputs, 1)) + .build(); + } + return BasicUIProperties.builder() + .maxItemInputs(mInputSlotCount) + .maxItemOutputs(mOutputItems.length) + .maxFluidInputs(getCapacity() != 0 ? 1 : 0) + .maxFluidOutputs(0) + .build(); + } + + /** + * Adds item I/O, special item, and fluid I/O slots. + */ + protected void addIOSlots(ModularWindow.Builder builder, BasicUIProperties uiProperties) { + UIHelper.forEachSlots( + (i, backgrounds, pos) -> builder.widget(createItemInputSlot(i, backgrounds, pos)), + (i, backgrounds, pos) -> builder.widget(createItemOutputSlot(i, backgrounds, pos)), + (i, backgrounds, pos) -> builder.widget(createSpecialSlot(backgrounds, pos, uiProperties)), + (i, backgrounds, pos) -> builder.widget(createFluidInputSlot(backgrounds, pos)), + (i, backgrounds, pos) -> builder.widget(createFluidOutputSlot(backgrounds, pos)), + getGUITextureSet().getItemSlot(), + getGUITextureSet().getFluidSlot(), + uiProperties, + uiProperties.maxItemInputs, + uiProperties.maxItemOutputs, + uiProperties.maxFluidInputs, + uiProperties.maxFluidOutputs, + getSteamVariant(), + Pos2d.ZERO); + } + + protected void addProgressBar(ModularWindow.Builder builder, BasicUIProperties uiProperties) { + boolean isSteamPowered = isSteampowered(); + RecipeMap recipeMap = getRecipeMap(); + if (!isSteamPowered && uiProperties.progressBarTexture == null) { + if (recipeMap != null) { + // Require progress bar texture for machines working with recipemap, otherwise permit + throw new RuntimeException("Missing progressbar texture for " + recipeMap.unlocalizedName); + } else { + return; + } + } + if (isSteamPowered && uiProperties.progressBarTextureSteam == null) { + if (recipeMap != null) { + throw new RuntimeException("Missing steam progressbar texture for " + recipeMap.unlocalizedName); + } else { + return; + } + } + + builder.widget( + setNEITransferRect( + new ProgressBar() + .setProgress(() -> maxProgresstime() != 0 ? (float) getProgresstime() / maxProgresstime() : 0) + .setTexture( + isSteamPowered ? uiProperties.progressBarTextureSteam.get(getSteamVariant()) + : uiProperties.progressBarTexture.get(), + uiProperties.progressBarImageSize) + .setDirection(uiProperties.progressBarDirection) + .setPos(uiProperties.progressBarPos) + .setSize(uiProperties.progressBarSize), + uiProperties.neiTransferRectId)); + addProgressBarSpecialTextures(builder, uiProperties); + } + + /** + * Override this as needed instead of calling. + */ + protected SlotWidget createItemInputSlot(int index, IDrawable[] backgrounds, Pos2d pos) { + return (SlotWidget) new SlotWidget(inventoryHandler, getInputSlot() + index).setAccess(true, true) + .setBackground(backgrounds) + .setPos(pos); + } + + /** + * Override this as needed instead of calling. + */ + protected SlotWidget createItemOutputSlot(int index, IDrawable[] backgrounds, Pos2d pos) { + return (SlotWidget) new SlotWidget(inventoryHandler, getOutputSlot() + index).setAccess(true, false) + .setBackground(backgrounds) + .setPos(pos); + } + + /** + * Override this as needed instead of calling. + */ + protected SlotWidget createSpecialSlot(IDrawable[] backgrounds, Pos2d pos, BasicUIProperties uiProperties) { + return (SlotWidget) new SlotWidget(inventoryHandler, getSpecialSlotIndex()).setAccess(true, true) + .disableShiftInsert() + .setGTTooltip( + () -> mTooltipCache.getData(uiProperties.useSpecialSlot ? SPECIAL_SLOT_TOOLTIP : UNUSED_SLOT_TOOLTIP)) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setBackground(backgrounds) + .setPos(pos); + } + + protected FluidSlotWidget createFluidInputSlot(IDrawable[] backgrounds, Pos2d pos) { + return (FluidSlotWidget) new FluidSlotWidget(fluidTank).setBackground(backgrounds) + .setPos(pos); + } + + protected FluidSlotWidget createFluidOutputSlot(IDrawable[] backgrounds, Pos2d pos) { + return (FluidSlotWidget) new FluidSlotWidget(fluidOutputTank).setInteraction(true, false) + .setBackground(backgrounds) + .setPos(pos); + } + + @Override + protected SlotWidget createChargerSlot(int x, int y) { + if (isSteampowered()) { + return (SlotWidget) createChargerSlot(x, y, UNUSED_SLOT_TOOLTIP, new String[0]) + .setBackground(getGUITextureSet().getItemSlot()); + } else { + return super.createChargerSlot(x, y); + } + } + + protected CycleButtonWidget createItemAutoOutputButton() { + return (CycleButtonWidget) new CycleButtonWidget().setToggle(() -> mItemTransfer, val -> mItemTransfer = val) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_AUTOOUTPUT_ITEM) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setGTTooltip(() -> mTooltipCache.getData(ITEM_TRANSFER_TOOLTIP)) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(25, 62) + .setSize(18, 18); + } + + protected CycleButtonWidget createFluidAutoOutputButton() { + return (CycleButtonWidget) new CycleButtonWidget().setToggle(() -> mFluidTransfer, val -> mFluidTransfer = val) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_AUTOOUTPUT_FLUID) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setGTTooltip(() -> mTooltipCache.getData(FLUID_TRANSFER_TOOLTIP)) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(7, 62) + .setSize(18, 18); + } + + protected Widget setNEITransferRect(Widget widget, String transferRectID) { + if (GTUtility.isStringInvalid(transferRectID)) { + return widget; + } + final String transferRectTooltip; + if (isSteampowered()) { + transferRectTooltip = StatCollector + .translateToLocalFormatted(NEI_TRANSFER_STEAM_TOOLTIP, overclockDescriber.getTierString()); + } else { + transferRectTooltip = StatCollector + .translateToLocalFormatted(NEI_TRANSFER_VOLTAGE_TOOLTIP, overclockDescriber.getTierString()); + } + widget.setNEITransferRect(transferRectID, new Object[] { overclockDescriber }, transferRectTooltip); + return widget; + } + + protected void addProgressBarSpecialTextures(ModularWindow.Builder builder, BasicUIProperties uiProperties) { + if (isSteampowered()) { + for (Pair> specialTexture : uiProperties.specialTexturesSteam) { + builder.widget( + new DrawableWidget().setDrawable( + specialTexture.getLeft() + .get(getSteamVariant())) + .setSize( + specialTexture.getRight() + .getLeft()) + .setPos( + specialTexture.getRight() + .getRight())); + } + } else { + for (Pair> specialTexture : uiProperties.specialTextures) { + builder.widget( + new DrawableWidget().setDrawable(specialTexture.getLeft()) + .setSize( + specialTexture.getRight() + .getLeft()) + .setPos( + specialTexture.getRight() + .getRight())); + } + } + } + + protected DrawableWidget createErrorStatusArea(ModularWindow.Builder builder, IDrawable picture) { + return (DrawableWidget) new DrawableWidget().setDrawable(picture) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setEnabled( + widget -> !widget.getTooltip() + .isEmpty()) + .dynamicTooltip(this::getErrorDescriptions) + .dynamicTooltipShift(this::getErrorDescriptionsShift) + .setPos(79, 44) + .setSize(18, 18) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> mStuttering, val -> mStuttering = val), + builder, + (widget, val) -> widget.notifyTooltipChange()) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer( + () -> getBaseMetaTileEntity().getErrorDisplayID(), + val -> getBaseMetaTileEntity().setErrorDisplayID(val)), + builder, + (widget, val) -> widget.notifyTooltipChange()); + } + + protected List getErrorDescriptions() { + final GT_TooltipDataCache.TooltipData tooltip = getErrorTooltip(); + return tooltip != null ? tooltip.text : Collections.emptyList(); + } + + protected List getErrorDescriptionsShift() { + final GT_TooltipDataCache.TooltipData tooltip = getErrorTooltip(); + return tooltip != null ? tooltip.shiftText : Collections.emptyList(); + } + + protected GT_TooltipDataCache.TooltipData getErrorTooltip() { + if (isSteampowered()) { + if ((getBaseMetaTileEntity().getErrorDisplayID() & 64) != 0) { + return mTooltipCache.getData(STALLED_VENT_TOOLTIP); + } + } + if (mStuttering) { + return mTooltipCache.getData( + STALLED_STUTTERING_TOOLTIP, + StatCollector.translateToLocal(POWER_SOURCE_KEY + (isSteampowered() ? "steam" : "power"))); + } + return null; + } + + protected static int getCapacityForTier(int tier) { + return switch (tier) { + case 0 -> 8000; + case 1 -> 16000; + case 2 -> 32000; + case 3 -> 64000; + case 4 -> 128000; + default -> 256000; + }; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineBronze.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineBronze.java new file mode 100644 index 0000000000..507a807a76 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineBronze.java @@ -0,0 +1,387 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.D1; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZE_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZE_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZE_TOP; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import java.util.Arrays; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.ParticleFX; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.SteamVariant; +import gregtech.api.enums.TierEU; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.objects.overclockdescriber.SteamOverclockDescriber; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + *

+ * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple + * Machine + */ +public abstract class MTEBasicMachineBronze extends MTEBasicMachine { + + private static final String TT_machineType = "GT5U.MBTT.MachineType"; + private static final int NEEDS_STEAM_VENTING = 64; + public boolean mNeedsSteamVenting = false; + + public MTEBasicMachineBronze(int aID, String aName, String aNameRegional, String aDescription, int aInputSlotCount, + int aOutputSlotCount, boolean aHighPressure) { + super(aID, aName, aNameRegional, aHighPressure ? 2 : 1, 0, aDescription, aInputSlotCount, aOutputSlotCount); + } + + public MTEBasicMachineBronze(String aName, String[] aDescription, ITexture[][][] aTextures, int aInputSlotCount, + int aOutputSlotCount, boolean aHighPressure) { + super(aName, aHighPressure ? 2 : 1, 0, aDescription, aTextures, aInputSlotCount, aOutputSlotCount); + } + + protected boolean isBricked() { + return false; + } + + @Override + public OverclockDescriber createOverclockDescriber() { + return new SteamOverclockDescriber(SteamVariant.BRONZE, 1, 2); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("mNeedsSteamVenting", mNeedsSteamVenting); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mNeedsSteamVenting = aNBT.getBoolean("mNeedsSteamVenting"); + } + + @Override + public boolean isElectric() { + return false; + } + + @Override + public boolean isEnetInput() { + return false; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return false; + } + + @Override + public long maxEUStore() { + return 0; + } + + @Override + public long maxEUInput() { + return 0; + } + + @Override + public int rechargerSlotCount() { + return 0; + } + + @Override + public int dechargerSlotCount() { + return 0; + } + + @Override + public boolean isSteampowered() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return super.isFacingValid(facing) && facing != mMainFacing; + } + + @Override + public long getMinimumStoredEU() { + return 1000; + } + + @Override + public long maxSteamStore() { + return 16000; + } + + @Override + public boolean isLiquidInput(ForgeDirection side) { + return side != mMainFacing; + } + + @Override + public boolean isLiquidOutput(ForgeDirection side) { + return side != mMainFacing; + } + + @Override + public boolean doesAutoOutput() { + return false; + } + + @Override + public boolean allowToCheckRecipe() { + if (mNeedsSteamVenting + && getBaseMetaTileEntity().getCoverIDAtSide(getBaseMetaTileEntity().getFrontFacing()) == 0 + && !GTUtility.hasBlockHitBox( + getBaseMetaTileEntity().getWorld(), + getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 1), + getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 1), + getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 1))) { + sendSound((byte) 9); + mNeedsSteamVenting = false; + try { + for (EntityLivingBase tLiving : getBaseMetaTileEntity().getWorld() + .getEntitiesWithinAABB( + EntityLivingBase.class, + AxisAlignedBB.getBoundingBox( + getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 1), + getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 1), + getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 1), + getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 1) + 1, + getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 1) + 1, + getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 1) + 1))) { + GTUtility.applyHeatDamage(tLiving, getSteamDamage()); + } + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + } + return !mNeedsSteamVenting; + } + + @Override + public int checkRecipe() { + GTRecipe tRecipe = getRecipeMap().findRecipe(getBaseMetaTileEntity(), false, TierEU.LV, null, getAllInputs()); + if ((tRecipe != null) && (canOutput(tRecipe.mOutputs)) + && (tRecipe.isRecipeInputEqual(true, null, getAllInputs()))) { + this.mOutputItems[0] = tRecipe.getOutput(0); + calculateCustomOverclock(tRecipe); + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + return DID_NOT_FIND_RECIPE; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + // Super already zeroed out setErrorDisplayID, add additional error codes here. + aBaseMetaTileEntity.setErrorDisplayID(aBaseMetaTileEntity.getErrorDisplayID() | (mNeedsSteamVenting ? 64 : 0)); + } + + @Override + public void endProcess() { + if (isSteampowered()) mNeedsSteamVenting = true; + } + + @Override + public void doSound(byte aIndex, double aX, double aY, double aZ) { + super.doSound(aIndex, aX, aY, aZ); + if (aIndex == 9) { + GTUtility.doSoundAtClient(SoundResource.RANDOM_FIZZ, 5, 1.0F, aX, aY, aZ); + + new ParticleEventBuilder().setIdentifier(ParticleFX.CLOUD) + .setWorld(getBaseMetaTileEntity().getWorld()) + .setMotion( + getBaseMetaTileEntity().getFrontFacing().offsetX / 5.0, + getBaseMetaTileEntity().getFrontFacing().offsetY / 5.0, + getBaseMetaTileEntity().getFrontFacing().offsetZ / 5.0) + .times( + 8, + x -> x + .setPosition( + aX - 0.5 + XSTR_INSTANCE.nextFloat(), + aY - 0.5 + XSTR_INSTANCE.nextFloat(), + aZ - 0.5 + XSTR_INSTANCE.nextFloat()) + .run()); + } + } + + @Override + public boolean isGivingInformation() { + return false; + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCoverID) { + return GregTechAPI.getCoverBehaviorNew(aCoverID.toStack()) + .isSimpleCover() && super.allowCoverOnSide(side, aCoverID); + } + + public float getSteamDamage() { + return 6.0F * mTier; + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_TOP : MACHINE_BRONZE_TOP, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_TOP : MACHINE_BRONZE_TOP, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_BOTTOM : MACHINE_BRONZE_BOTTOM, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_BOTTOM : MACHINE_BRONZE_BOTTOM, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getBottomFacingPipeActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_BOTTOM : MACHINE_BRONZE_BOTTOM, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getBottomFacingPipeInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_BOTTOM : MACHINE_BRONZE_BOTTOM, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getTopFacingPipeActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_TOP : MACHINE_BRONZE_TOP, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getTopFacingPipeInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_TOP : MACHINE_BRONZE_TOP, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getSideFacingPipeActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getSideFacingPipeInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_BRONZEBRICKS_SIDE : MACHINE_BRONZE_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public SteamVariant getSteamVariant() { + return SteamVariant.BRONZE; + } + + @Override + public GUITextureSet getGUITextureSet() { + return GUITextureSet.STEAM.apply(getSteamVariant()); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) + .setSize(17, 17) + .setPos(152, 63)); + } + + @Override + protected FluidSlotWidget createFluidInputSlot(IDrawable[] backgrounds, Pos2d pos) { + return null; + } + + @Override + protected FluidSlotWidget createFluidOutputSlot(IDrawable[] backgrounds, Pos2d pos) { + return null; + } + + @Override + public String[] getDescription() { + String[] description = Arrays.copyOf(mDescriptionArray, mDescriptionArray.length + 1); + description[mDescriptionArray.length] = StatCollector.translateToLocal(TT_machineType) + ": " + + EnumChatFormatting.YELLOW + + StatCollector.translateToLocal(this.getRecipeMap().unlocalizedName) + + EnumChatFormatting.RESET; + return description; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineSteel.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineSteel.java new file mode 100644 index 0000000000..8d6f5568d5 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineSteel.java @@ -0,0 +1,149 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_TOP; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEEL_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEEL_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEEL_TOP; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.SteamVariant; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IGetTitleColor; +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.objects.overclockdescriber.SteamOverclockDescriber; +import gregtech.api.render.TextureFactory; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + *

+ * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple + * Machine + */ +public abstract class MTEBasicMachineSteel extends MTEBasicMachineBronze implements IGetTitleColor { + + public MTEBasicMachineSteel(int aID, String aName, String aNameRegional, String aDescription, int aInputSlotCount, + int aOutputSlotCount, boolean aHighPressure) { + super(aID, aName, aNameRegional, aDescription, aInputSlotCount, aOutputSlotCount, aHighPressure); + } + + public MTEBasicMachineSteel(String aName, String[] aDescription, ITexture[][][] aTextures, int aInputSlotCount, + int aOutputSlotCount, boolean aHighPressure) { + super(aName, aDescription, aTextures, aInputSlotCount, aOutputSlotCount, aHighPressure); + } + + @Override + public OverclockDescriber createOverclockDescriber() { + return new SteamOverclockDescriber(SteamVariant.STEEL, 2, 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_TOP : MACHINE_STEEL_TOP, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_TOP : MACHINE_STEEL_TOP, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_BOTTOM : MACHINE_STEEL_BOTTOM, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_BOTTOM : MACHINE_STEEL_BOTTOM, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)) }; + } + + @Override + public ITexture[] getBottomFacingPipeActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_BOTTOM : MACHINE_STEEL_BOTTOM, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getBottomFacingPipeInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_BOTTOM : MACHINE_STEEL_BOTTOM, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getTopFacingPipeActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_TOP : MACHINE_STEEL_TOP, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getTopFacingPipeInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_TOP : MACHINE_STEEL_TOP, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getSideFacingPipeActive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getSideFacingPipeInactive(byte aColor) { + return new ITexture[] { TextureFactory.of( + isBricked() ? MACHINE_STEELBRICKS_SIDE : MACHINE_STEEL_SIDE, + Dyes.getModulation(aColor, Dyes._NULL.mRGBa)), TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public SteamVariant getSteamVariant() { + return SteamVariant.STEEL; + } + + @Override + public int getTitleColor() { + return COLOR_TITLE_WHITE.get(); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineWithRecipe.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineWithRecipe.java new file mode 100644 index 0000000000..b5bd3d77e1 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicMachineWithRecipe.java @@ -0,0 +1,817 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.GTValues.W; +import static gregtech.api.enums.GTValues.ticksBetweenSounds; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; +import static net.minecraftforge.common.util.ForgeDirection.UP; + +import java.util.Locale; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; +import com.gtnewhorizons.modularui.api.drawable.UITexture; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.ParticleFX; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures.BlockIcons.CustomIcon; +import gregtech.api.enums.Tier; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.recipe.BasicUIProperties; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.ExternalMaterials; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + *

+ * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple + * Machine + */ +public class MTEBasicMachineWithRecipe extends MTEBasicMachine { + + private final RecipeMap mRecipes; + private final int mTankCapacity; + private final SpecialEffects mSpecialEffect; + private final ResourceLocation mSoundResourceLocation; + private FallbackableUITexture progressBarTexture; + private int recipeCatalystPriority; + + /** + * Registers machine with single-line description, specific tank capacity, and sound specified by ResourceLocation. + */ + public MTEBasicMachineWithRecipe(int aID, String aName, String aNameRegional, int aTier, String aDescription, + RecipeMap aRecipes, int aInputSlots, int aOutputSlots, int aTankCapacity, ResourceLocation aSound, + SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { + this( + aID, + aName, + aNameRegional, + aTier, + new String[] { aDescription }, + aRecipes, + aInputSlots, + aOutputSlots, + aTankCapacity, + aSound, + aSpecialEffect, + aOverlays, + aRecipe); + } + + /** + * Registers machine with multi-line descriptions, specific tank capacity, and sound specified by ResourceLocation. + */ + public MTEBasicMachineWithRecipe(int aID, String aName, String aNameRegional, int aTier, String[] aDescription, + RecipeMap aRecipes, int aInputSlots, int aOutputSlots, int aTankCapacity, ResourceLocation aSound, + SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { + super( + aID, + aName, + aNameRegional, + aTier, + aRecipes.getAmperage(), + aDescription, + aInputSlots, + aOutputSlots, + TextureFactory.of( + TextureFactory.of( + new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_SIDE_ACTIVE")), + TextureFactory.builder() + .addIcon( + (new CustomIcon( + "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_SIDE_ACTIVE_GLOW"))) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_SIDE")), + TextureFactory.builder() + .addIcon( + (new CustomIcon( + "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_SIDE_GLOW"))) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of( + new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_FRONT_ACTIVE")), + TextureFactory.builder() + .addIcon( + (new CustomIcon( + "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_FRONT_ACTIVE_GLOW"))) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_FRONT")), + TextureFactory.builder() + .addIcon( + (new CustomIcon( + "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_FRONT_GLOW"))) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of( + new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_TOP_ACTIVE")), + TextureFactory.builder() + .addIcon( + (new CustomIcon( + "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_TOP_ACTIVE_GLOW"))) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_TOP")), + TextureFactory.builder() + .addIcon( + (new CustomIcon( + "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_TOP_GLOW"))) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of( + new CustomIcon( + "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_BOTTOM_ACTIVE")), + TextureFactory.builder() + .addIcon( + (new CustomIcon( + "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_BOTTOM_ACTIVE_GLOW"))) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new CustomIcon("basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_BOTTOM")), + TextureFactory.builder() + .addIcon( + (new CustomIcon( + "basicmachines/" + aOverlays.toLowerCase(Locale.ENGLISH) + "/OVERLAY_BOTTOM_GLOW"))) + .glow() + .build())); + this.mTankCapacity = aTankCapacity; + this.mSpecialEffect = aSpecialEffect; + this.mRecipes = aRecipes; + this.mSoundResourceLocation = aSound; + this.progressBarTexture = mRecipes.getFrontend() + .getUIProperties().progressBarTexture; + + // TODO: CHECK + if (aRecipe != null) { + for (int i = 3; i < aRecipe.length; i++) { + if (!(aRecipe[i] instanceof X)) continue; + + // spotless:off + aRecipe[i] = switch ((X) aRecipe[i]) { + case CIRCUIT -> Tier.ELECTRIC[this.mTier].mManagingObject; + case BETTER_CIRCUIT -> Tier.ELECTRIC[this.mTier].mBetterManagingObject; + case HULL -> Tier.ELECTRIC[this.mTier].mHullObject; + case WIRE -> Tier.ELECTRIC[this.mTier].mConductingObject; + case WIRE4 -> Tier.ELECTRIC[this.mTier].mLargerConductingObject; + case STICK_DISTILLATION -> OrePrefixes.stick.get(Materials.Blaze); + + case GLASS -> switch (this.mTier) { + case 0, 1, 2, 3 -> new ItemStack(Blocks.glass, 1, W); + case 4, 5, 6, 7, 8 -> "blockGlass" + VN[aTier]; + default -> "blockGlass" + VN[8]; + }; + + case PLATE -> switch (this.mTier) { + case 0, 1 -> OrePrefixes.plate.get(Materials.Steel); + case 2 -> OrePrefixes.plate.get(Materials.Aluminium); + case 3 -> OrePrefixes.plate.get(Materials.StainlessSteel); + case 4 -> OrePrefixes.plate.get(Materials.Titanium); + case 5 -> OrePrefixes.plate.get(Materials.TungstenSteel); + case 6 -> OrePrefixes.plate.get(Materials.HSSG); + case 7 -> OrePrefixes.plate.get(Materials.HSSE); + default -> OrePrefixes.plate.get(Materials.Neutronium); + }; + + case PIPE -> switch (this.mTier) { + case 0, 1 -> OrePrefixes.pipeMedium.get(Materials.Bronze); + case 2 -> OrePrefixes.pipeMedium.get(Materials.Steel); + case 3 -> OrePrefixes.pipeMedium.get(Materials.StainlessSteel); + case 4 -> OrePrefixes.pipeMedium.get(Materials.Titanium); + case 5 -> OrePrefixes.pipeMedium.get(Materials.TungstenSteel); + case 6 -> OrePrefixes.pipeSmall.get(Materials.Ultimate); + case 7 -> OrePrefixes.pipeMedium.get(Materials.Ultimate); + case 8 -> OrePrefixes.pipeLarge.get(Materials.Ultimate); + default -> OrePrefixes.pipeHuge.get(Materials.Ultimate); + }; + + case COIL_HEATING -> switch (this.mTier) { + case 0, 1 -> OrePrefixes.wireGt02.get(Materials.AnyCopper); + case 2 -> OrePrefixes.wireGt02.get(Materials.Cupronickel); + case 3 -> OrePrefixes.wireGt02.get(Materials.Kanthal); + case 4 -> OrePrefixes.wireGt02.get(Materials.Nichrome); + case 5 -> OrePrefixes.wireGt02.get(Materials.TPV); + case 6 -> OrePrefixes.wireGt02.get(Materials.HSSG); + case 7 -> OrePrefixes.wireGt02.get(Materials.Naquadah); + case 8 -> OrePrefixes.wireGt02.get(Materials.NaquadahAlloy); + case 9 -> OrePrefixes.wireGt04.get(Materials.NaquadahAlloy); + default -> OrePrefixes.wireGt08.get(Materials.NaquadahAlloy); + }; + + case COIL_HEATING_DOUBLE -> switch (this.mTier) { + case 0, 1 -> OrePrefixes.wireGt04.get(Materials.AnyCopper); + case 2 -> OrePrefixes.wireGt04.get(Materials.Cupronickel); + case 3 -> OrePrefixes.wireGt04.get(Materials.Kanthal); + case 4 -> OrePrefixes.wireGt04.get(Materials.Nichrome); + case 5 -> OrePrefixes.wireGt04.get(Materials.TPV); + case 6 -> OrePrefixes.wireGt04.get(Materials.HSSG); + case 7 -> OrePrefixes.wireGt04.get(Materials.Naquadah); + case 8 -> OrePrefixes.wireGt04.get(Materials.NaquadahAlloy); + case 9 -> OrePrefixes.wireGt08.get(Materials.NaquadahAlloy); + default -> OrePrefixes.wireGt16.get(Materials.NaquadahAlloy); + }; + + case STICK_MAGNETIC -> switch (this.mTier) { + case 0, 1 -> OrePrefixes.stick.get(Materials.IronMagnetic); + case 2, 3 -> OrePrefixes.stick.get(Materials.SteelMagnetic); + case 4, 5 -> OrePrefixes.stick.get(Materials.NeodymiumMagnetic); + case 6, 7, 8, 9 -> OrePrefixes.stick.get(Materials.SamariumMagnetic); + default -> OrePrefixes.stick.get(Materials.TengamAttuned); + }; + + case STICK_ELECTROMAGNETIC -> switch (this.mTier) { + case 0, 1 -> OrePrefixes.stick.get(Materials.AnyIron); + case 2, 3 -> OrePrefixes.stick.get(Materials.Steel); + case 4 -> OrePrefixes.stick.get(Materials.Neodymium); + default -> OrePrefixes.stick.get(Materials.VanadiumGallium); + }; + + case COIL_ELECTRIC -> switch (this.mTier) { + case 0 -> OrePrefixes.wireGt01.get(Materials.Lead); + case 1 -> OrePrefixes.wireGt02.get(Materials.Tin); + case 2 -> OrePrefixes.wireGt02.get(Materials.AnyCopper); + case 3 -> OrePrefixes.wireGt04.get(Materials.AnyCopper); + case 4 -> OrePrefixes.wireGt08.get(Materials.AnnealedCopper); + case 5 -> OrePrefixes.wireGt16.get(Materials.AnnealedCopper); + case 6 -> OrePrefixes.wireGt04.get(Materials.YttriumBariumCuprate); + case 7 -> OrePrefixes.wireGt08.get(Materials.Iridium); + default -> OrePrefixes.wireGt16.get(Materials.Osmium); + }; + + case ROBOT_ARM -> switch (this.mTier) { + case 0, 1 -> ItemList.Robot_Arm_LV; + case 2 -> ItemList.Robot_Arm_MV; + case 3 -> ItemList.Robot_Arm_HV; + case 4 -> ItemList.Robot_Arm_EV; + case 5 -> ItemList.Robot_Arm_IV; + case 6 -> ItemList.Robot_Arm_LuV; + case 7 -> ItemList.Robot_Arm_ZPM; + case 8 -> ItemList.Robot_Arm_UV; + case 9 -> ItemList.Robot_Arm_UHV; + case 10 -> ItemList.Robot_Arm_UEV; + case 11 -> ItemList.Robot_Arm_UIV; + case 12 -> ItemList.Robot_Arm_UMV; + case 13 -> ItemList.Robot_Arm_UXV; + default -> ItemList.Robot_Arm_MAX; + }; + + case PUMP -> switch (this.mTier) { + case 0, 1 -> ItemList.Electric_Pump_LV; + case 2 -> ItemList.Electric_Pump_MV; + case 3 -> ItemList.Electric_Pump_HV; + case 4 -> ItemList.Electric_Pump_EV; + case 5 -> ItemList.Electric_Pump_IV; + case 6 -> ItemList.Electric_Pump_LuV; + case 7 -> ItemList.Electric_Pump_ZPM; + case 8 -> ItemList.Electric_Pump_UV; + case 9 -> ItemList.Electric_Pump_UHV; + case 10 -> ItemList.Electric_Pump_UEV; + case 11 -> ItemList.Electric_Pump_UIV; + case 12 -> ItemList.Electric_Pump_UMV; + case 13 -> ItemList.Electric_Pump_UXV; + default -> ItemList.Electric_Pump_MAX; + }; + + case MOTOR -> switch (this.mTier) { + case 0, 1 -> ItemList.Electric_Motor_LV; + case 2 -> ItemList.Electric_Motor_MV; + case 3 -> ItemList.Electric_Motor_HV; + case 4 -> ItemList.Electric_Motor_EV; + case 5 -> ItemList.Electric_Motor_IV; + case 6 -> ItemList.Electric_Motor_LuV; + case 7 -> ItemList.Electric_Motor_ZPM; + case 8 -> ItemList.Electric_Motor_UV; + case 9 -> ItemList.Electric_Motor_UHV; + case 10 -> ItemList.Electric_Motor_UEV; + case 11 -> ItemList.Electric_Motor_UIV; + case 12 -> ItemList.Electric_Motor_UMV; + case 13 -> ItemList.Electric_Motor_UXV; + default -> ItemList.Electric_Motor_MAX; + }; + + case PISTON -> switch (this.mTier) { + case 0, 1 -> ItemList.Electric_Piston_LV; + case 2 -> ItemList.Electric_Piston_MV; + case 3 -> ItemList.Electric_Piston_HV; + case 4 -> ItemList.Electric_Piston_EV; + case 5 -> ItemList.Electric_Piston_IV; + case 6 -> ItemList.Electric_Piston_LuV; + case 7 -> ItemList.Electric_Piston_ZPM; + case 8 -> ItemList.Electric_Piston_UV; + case 9 -> ItemList.Electric_Piston_UHV; + case 10 -> ItemList.Electric_Piston_UEV; + case 11 -> ItemList.Electric_Piston_UIV; + case 12 -> ItemList.Electric_Piston_UMV; + case 13 -> ItemList.Electric_Piston_UXV; + default -> ItemList.Electric_Piston_MAX; + }; + + case CONVEYOR -> switch (this.mTier) { + case 0, 1 -> ItemList.Conveyor_Module_LV; + case 2 -> ItemList.Conveyor_Module_MV; + case 3 -> ItemList.Conveyor_Module_HV; + case 4 -> ItemList.Conveyor_Module_EV; + case 5 -> ItemList.Conveyor_Module_IV; + case 6 -> ItemList.Conveyor_Module_LuV; + case 7 -> ItemList.Conveyor_Module_ZPM; + case 8 -> ItemList.Conveyor_Module_UV; + case 9 -> ItemList.Conveyor_Module_UHV; + case 10 -> ItemList.Conveyor_Module_UEV; + case 11 -> ItemList.Conveyor_Module_UIV; + case 12 -> ItemList.Conveyor_Module_UMV; + case 13 -> ItemList.Conveyor_Module_UXV; + default -> ItemList.Conveyor_Module_MAX; + }; + + case EMITTER -> switch (this.mTier) { + case 0, 1 -> ItemList.Emitter_LV; + case 2 -> ItemList.Emitter_MV; + case 3 -> ItemList.Emitter_HV; + case 4 -> ItemList.Emitter_EV; + case 5 -> ItemList.Emitter_IV; + case 6 -> ItemList.Emitter_LuV; + case 7 -> ItemList.Emitter_ZPM; + case 8 -> ItemList.Emitter_UV; + case 9 -> ItemList.Emitter_UHV; + case 10 -> ItemList.Emitter_UEV; + case 11 -> ItemList.Emitter_UIV; + case 12 -> ItemList.Emitter_UMV; + case 13 -> ItemList.Emitter_UXV; + default -> ItemList.Emitter_MAX; + }; + + case SENSOR -> switch (this.mTier) { + case 0, 1 -> ItemList.Sensor_LV; + case 2 -> ItemList.Sensor_MV; + case 3 -> ItemList.Sensor_HV; + case 4 -> ItemList.Sensor_EV; + case 5 -> ItemList.Sensor_IV; + case 6 -> ItemList.Sensor_LuV; + case 7 -> ItemList.Sensor_ZPM; + case 8 -> ItemList.Sensor_UV; + case 9 -> ItemList.Sensor_UHV; + case 10 -> ItemList.Sensor_UEV; + case 11 -> ItemList.Sensor_UIV; + case 12 -> ItemList.Sensor_UMV; + case 13 -> ItemList.Sensor_UXV; + default -> ItemList.Sensor_MAX; + }; + + case FIELD_GENERATOR -> switch (this.mTier) { + case 0, 1 -> ItemList.Field_Generator_LV; + case 2 -> ItemList.Field_Generator_MV; + case 3 -> ItemList.Field_Generator_HV; + case 4 -> ItemList.Field_Generator_EV; + case 5 -> ItemList.Field_Generator_IV; + case 6 -> ItemList.Field_Generator_LuV; + case 7 -> ItemList.Field_Generator_ZPM; + case 8 -> ItemList.Field_Generator_UV; + case 9 -> ItemList.Field_Generator_UHV; + case 10 -> ItemList.Field_Generator_UEV; + case 11 -> ItemList.Field_Generator_UIV; + case 12 -> ItemList.Field_Generator_UMV; + case 13 -> ItemList.Field_Generator_UXV; + default -> ItemList.Field_Generator_MAX; + }; + + case ROTOR -> switch (this.mTier) { + case 0, 1 -> OrePrefixes.rotor.get(Materials.Tin); + case 2 -> OrePrefixes.rotor.get(Materials.Bronze); + case 3 -> OrePrefixes.rotor.get(Materials.Steel); + case 4 -> OrePrefixes.rotor.get(Materials.StainlessSteel); + case 5 -> OrePrefixes.rotor.get(Materials.TungstenSteel); + case 6 -> OrePrefixes.rotor.get(ExternalMaterials.getRhodiumPlatedPalladium()); + case 7 -> OrePrefixes.rotor.get(Materials.Iridium); + default -> OrePrefixes.rotor.get(Materials.Osmium); + }; + + default -> throw new IllegalArgumentException("MISSING TIER MAPPING FOR: " + aRecipe[i] + " AT TIER " + this.mTier); + }; + // spotless:on + } + + if (!GTModHandler.addCraftingRecipe( + getStackForm(1), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.BUFFERED + | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + aRecipe)) { + throw new IllegalArgumentException("INVALID CRAFTING RECIPE FOR: " + getStackForm(1).getDisplayName()); + } + } + } + + /** + * Registers machine with single-line description, auto-scaled fluid tank, and sound specified by SoundResource. + */ + public MTEBasicMachineWithRecipe(int aID, String aName, String aNameRegional, int aTier, String aDescription, + RecipeMap aRecipes, int aInputSlots, int aOutputSlots, boolean usesFluids, SoundResource aSound, + SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { + this( + aID, + aName, + aNameRegional, + aTier, + aDescription, + aRecipes, + aInputSlots, + aOutputSlots, + usesFluids ? getCapacityForTier(aTier) : 0, + aSound.resourceLocation, + aSpecialEffect, + aOverlays, + aRecipe); + } + + /** + * Registers machine with multi-line descriptions, auto-scaled fluid tank, and sound specified by SoundResource. + */ + public MTEBasicMachineWithRecipe(int aID, String aName, String aNameRegional, int aTier, String[] aDescription, + RecipeMap aRecipes, int aInputSlots, int aOutputSlots, boolean usesFluids, SoundResource aSound, + SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { + this( + aID, + aName, + aNameRegional, + aTier, + aDescription, + aRecipes, + aInputSlots, + aOutputSlots, + usesFluids ? getCapacityForTier(aTier) : 0, + aSound.resourceLocation, + aSpecialEffect, + aOverlays, + aRecipe); + } + + /** + * Registers machine with single-line description, specific tank capacity, and sound specified by SoundResource. + */ + public MTEBasicMachineWithRecipe(int aID, String aName, String aNameRegional, int aTier, String aDescription, + RecipeMap aRecipes, int aInputSlots, int aOutputSlots, int aTankCapacity, SoundResource aSound, + SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { + this( + aID, + aName, + aNameRegional, + aTier, + aDescription, + aRecipes, + aInputSlots, + aOutputSlots, + aTankCapacity, + aSound.resourceLocation, + aSpecialEffect, + aOverlays, + aRecipe); + } + + /** + * Registers machine with multi-line descriptions, specific tank capacity, and sound specified by SoundResource. + */ + public MTEBasicMachineWithRecipe(int aID, String aName, String aNameRegional, int aTier, String[] aDescription, + RecipeMap aRecipes, int aInputSlots, int aOutputSlots, int aTankCapacity, SoundResource aSound, + SpecialEffects aSpecialEffect, String aOverlays, Object[] aRecipe) { + this( + aID, + aName, + aNameRegional, + aTier, + aDescription, + aRecipes, + aInputSlots, + aOutputSlots, + aTankCapacity, + aSound.resourceLocation, + aSpecialEffect, + aOverlays, + aRecipe); + } + + /** + * For {@link #newMetaEntity}. + */ + public MTEBasicMachineWithRecipe(String aName, int aTier, String[] aDescription, RecipeMap aRecipes, + int aInputSlots, int aOutputSlots, int aTankCapacity, int aAmperage, ITexture[][][] aTextures, + ResourceLocation aSound, SpecialEffects aSpecialEffect) { + super(aName, aTier, aAmperage, aDescription, aTextures, aInputSlots, aOutputSlots); + this.mTankCapacity = aTankCapacity; + this.mSpecialEffect = aSpecialEffect; + this.mRecipes = aRecipes; + this.mSoundResourceLocation = aSound; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBasicMachineWithRecipe( + this.mName, + this.mTier, + this.mDescriptionArray, + this.mRecipes, + this.mInputSlotCount, + this.mOutputItems == null ? 0 : this.mOutputItems.length, + this.mTankCapacity, + this.mAmperage, + this.mTextures, + this.mSoundResourceLocation, + this.mSpecialEffect).setProgressBarTexture(this.progressBarTexture) + .setRecipeCatalystPriority(this.recipeCatalystPriority); + } + + public MTEBasicMachineWithRecipe setProgressBarTexture(FallbackableUITexture progressBarTexture) { + this.progressBarTexture = progressBarTexture; + return this; + } + + public MTEBasicMachineWithRecipe setProgressBarTextureName(String name, UITexture fallback) { + return setProgressBarTexture(GTUITextures.fallbackableProgressbar(name, fallback)); + } + + public MTEBasicMachineWithRecipe setProgressBarTextureName(String name) { + return setProgressBarTextureName(name, GTUITextures.PROGRESSBAR_ARROW); + } + + @Override + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (!super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack)) return false; + switch (this.mInputSlotCount) { + case 0 -> { + return false; + } + case 1 -> { + if (this.getFillableStack() == null) return this.getRecipeMap() + .containsInput(aStack); + else return this.getRecipeMap() + .findRecipe( + this.getBaseMetaTileEntity(), + this.mLastRecipe, + true, + true, + V[this.mTier], + new FluidStack[] { this.getFillableStack() }, + this.getSpecialSlot(), + appendSelectedCircuit(aStack)) + != null; + } + case 2 -> { + return ((this.getInputAt(0) != null && this.getInputAt(1) != null) + || (this.getInputAt(0) == null && this.getInputAt(1) == null ? this.getRecipeMap() + .containsInput(aStack) + : (this.getRecipeMap() + .containsInput(aStack) + && this.getRecipeMap() + .findRecipe( + this.getBaseMetaTileEntity(), + this.mLastRecipe, + true, + true, + V[this.mTier], + new FluidStack[] { this.getFillableStack() }, + this.getSpecialSlot(), + aIndex == this.getInputSlot() ? appendSelectedCircuit(aStack, this.getInputAt(1)) + : appendSelectedCircuit(this.getInputAt(0), aStack)) + != null))); + } + default -> { + int tID = this.getBaseMetaTileEntity() + .getMetaTileID(); + if (tID >= 211 && tID <= 218 || tID >= 1180 && tID <= 1187 || tID >= 10780 && tID <= 10786) { // assembler + // lv-iv; + // circuit + // asseblers + // lv - + // uv; + // assemblers + // luv-uev + if (GTUtility.isStackValid(aStack)) for (int oreID : OreDictionary.getOreIDs(aStack)) { + if (OreDictionary.getOreName(oreID) + .startsWith("circuit")) return true; + } + } + return this.getRecipeMap() + .containsInput(aStack); + } + } + } + + @Override + public boolean allowSelectCircuit() { + return true; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isClientSide() && aBaseMetaTileEntity.isActive()) { + // noinspection SwitchStatementWithTooFewBranches + switch (this.mSpecialEffect) { + case TOP_SMOKE -> { + if (aBaseMetaTileEntity.getFrontFacing() != UP && aBaseMetaTileEntity.getCoverIDAtSide(UP) == 0 + && !aBaseMetaTileEntity.getOpacityAtSide(UP)) { + + new ParticleEventBuilder().setMotion(0.0D, 0.0D, 0.0D) + .setIdentifier(ParticleFX.SMOKE) + .setPosition( + aBaseMetaTileEntity.getXCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F, + aBaseMetaTileEntity.getYCoord() + 0.9F + XSTR_INSTANCE.nextFloat() * 0.2F, + aBaseMetaTileEntity.getZCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F) + .setWorld(aBaseMetaTileEntity.getWorld()) + .run(); + } + } + default -> {} + } + } + } + + /** + * Handles {@link Block#randomDisplayTick} driven Special Effects + * + * @param aBaseMetaTileEntity The entity that will handle the {@see Block#randomDisplayTick} + */ + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { + + // noinspection SwitchStatementWithTooFewBranches + switch (this.mSpecialEffect) { + case MAIN_RANDOM_SPARKS -> { + // Random Sparkles at main face + if (aBaseMetaTileEntity.isActive() && XSTR_INSTANCE.nextInt(3) == 0) { + + final ForgeDirection mainFacing = this.mMainFacing; + + if ((mainFacing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 + && aBaseMetaTileEntity.getCoverIDAtSide(mainFacing) == 0 + && !aBaseMetaTileEntity.getOpacityAtSide(mainFacing)) { + + final double oX = aBaseMetaTileEntity.getXCoord(); + final double oY = aBaseMetaTileEntity.getYCoord(); + final double oZ = aBaseMetaTileEntity.getZCoord(); + final double offset = 0.02D; + final double horizontal = 0.5D + XSTR_INSTANCE.nextFloat() * 8D / 16D - 4D / 16D; + + final double x, y, z, mX, mZ; + + y = oY + XSTR_INSTANCE.nextFloat() * 10D / 16D + 5D / 16D; + + if (mainFacing == ForgeDirection.WEST) { + x = oX - offset; + mX = -.05D; + z = oZ + horizontal; + mZ = 0D; + } else if (mainFacing == ForgeDirection.EAST) { + x = oX + offset; + mX = .05D; + z = oZ + horizontal; + mZ = 0D; + } else if (mainFacing == ForgeDirection.NORTH) { + x = oX + horizontal; + mX = 0D; + z = oZ - offset; + mZ = -.05D; + } else // if (frontFacing == ForgeDirection.SOUTH.ordinal()) + { + x = oX + horizontal; + mX = 0D; + z = oZ + offset; + mZ = .05D; + } + + ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(mX, 0, mZ) + .setPosition(x, y, z) + .setWorld(getBaseMetaTileEntity().getWorld()); + particleEventBuilder.setIdentifier(ParticleFX.LAVA) + .run(); + } + } + } + default -> {} + } + } + + @Override + public RecipeMap getRecipeMap() { + return this.mRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return recipeCatalystPriority; + } + + public MTEBasicMachineWithRecipe setRecipeCatalystPriority(int recipeCatalystPriority) { + this.recipeCatalystPriority = recipeCatalystPriority; + return this; + } + + @Override + public int getCapacity() { + return this.mTankCapacity; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1 && this.mSoundResourceLocation != null + && GTUtility.isStringValid(this.mSoundResourceLocation.getResourceDomain()) + && GTUtility.isStringValid(this.mSoundResourceLocation.getResourcePath())) + GTUtility.doSoundAtClient(this.mSoundResourceLocation, 100, 1.0F, aX, aY, aZ); + } + + @Override + public void startProcess() { + BaseMetaTileEntity myMetaTileEntity = ((BaseMetaTileEntity) this.getBaseMetaTileEntity()); + // Added to throttle sounds. To reduce lag, this is on the server side so BlockUpdate packets aren't sent. + if (myMetaTileEntity.mTickTimer > (myMetaTileEntity.mLastSoundTick + ticksBetweenSounds)) { + if (this.mSoundResourceLocation != null + && GTUtility.isStringValid(this.mSoundResourceLocation.getResourceDomain()) + && GTUtility.isStringValid(this.mSoundResourceLocation.getResourcePath())) this.sendLoopStart((byte) 1); + // Does not have overflow protection, but they are longs. + myMetaTileEntity.mLastSoundTick = myMetaTileEntity.mTickTimer; + } + } + + @Override + protected BasicUIProperties getUIProperties() { + return super.getUIProperties().toBuilder() + .progressBarTexture(progressBarTexture) + .build(); + } + + public enum X { + PUMP, + WIRE, + WIRE4, + HULL, + PIPE, + GLASS, + PLATE, + MOTOR, + ROTOR, + SENSOR, + PISTON, + CIRCUIT, + EMITTER, + CONVEYOR, + ROBOT_ARM, + COIL_HEATING, + COIL_ELECTRIC, + STICK_MAGNETIC, + STICK_DISTILLATION, + BETTER_CIRCUIT, + FIELD_GENERATOR, + COIL_HEATING_DOUBLE, + STICK_ELECTROMAGNETIC + } + + /** + * Special Effects + */ + public enum SpecialEffects { + + NONE, + TOP_SMOKE, + MAIN_RANDOM_SPARKS; + + static final SpecialEffects[] VALID_SPECIAL_EFFECTS = { NONE, TOP_SMOKE, MAIN_RANDOM_SPARKS }; + + static SpecialEffects fromId(int id) { + return id >= 0 && id < VALID_SPECIAL_EFFECTS.length ? VALID_SPECIAL_EFFECTS[id] : NONE; + } + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicTank.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicTank.java new file mode 100644 index 0000000000..003b8c893e --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEBasicTank.java @@ -0,0 +1,328 @@ +package gregtech.api.metatileentity.implementations; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.fluid.FluidStackTank; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GTUtility; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + *

+ * This is the main construct for my generic Tanks. Filling and emptying behavior have to be implemented manually + */ +public abstract class MTEBasicTank extends MTETieredMachineBlock implements IAddUIWidgets { + + public FluidStack mFluid; + // Due to class initializing order, getCapacity might not work properly at this time. + // So we pass supplier instead of current value here. + protected final FluidStackTank fluidTank = new FluidStackTank( + () -> mFluid, + fluidStack -> mFluid = fluidStack, + this::getRealCapacity); + + /** + * @param aInvSlotCount should be 3 + */ + public MTEBasicTank(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String aDescription, + ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEBasicTank(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String[] aDescription, ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEBasicTank(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEBasicTank(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex != getStackDisplaySlot(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + if (mFluid != null) aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mFluid = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid")); + } + + public abstract boolean doesFillContainers(); + + public abstract boolean doesEmptyContainers(); + + public abstract boolean canTankBeFilled(); + + public abstract boolean canTankBeEmptied(); + + public abstract boolean displaysItemStack(); + + /** + * @return If fluid amount is shown on FluidDisplayItem + */ + public abstract boolean displaysStackSize(); + + public int getInputSlot() { + return 0; + } + + public int getOutputSlot() { + return 1; + } + + public int getStackDisplaySlot() { + return 2; + } + + public boolean isFluidInputAllowed(FluidStack aFluid) { + return true; + } + + public boolean isFluidChangingAllowed() { + return true; + } + + public FluidStack getFillableStack() { + return mFluid; + } + + public FluidStack setFillableStack(FluidStack aFluid) { + mFluid = aFluid; + return mFluid; + } + + /** + * If you override this and change the field returned, be sure to override {@link #isDrainableStackSeparate()} as + * well! + */ + public FluidStack getDrainableStack() { + return mFluid; + } + + public FluidStack setDrainableStack(FluidStack aFluid) { + mFluid = aFluid; + return mFluid; + } + + public boolean isDrainableStackSeparate() { + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (isFluidChangingAllowed() && getFillableStack() != null && getFillableStack().amount <= 0) { + setFillableStack(null); + } + + final int inputSlot = getInputSlot(); + + if (doesEmptyContainers()) { + FluidStack tFluid = GTUtility.getFluidForFilledItem(mInventory[inputSlot], true); + if (tFluid != null && isFluidInputAllowed(tFluid)) { + if (getFillableStack() == null) { + if (isFluidInputAllowed(tFluid) && tFluid.amount <= getCapacity()) { + if (aBaseMetaTileEntity.addStackToSlot( + getOutputSlot(), + GTUtility.getContainerForFilledItem(mInventory[inputSlot], true), + 1)) { + setFillableStack(tFluid.copy()); + this.onEmptyingContainerWhenEmpty(); + aBaseMetaTileEntity.decrStackSize(inputSlot, 1); + } + } + } else { + if (tFluid.isFluidEqual(getFillableStack()) + && ((long) tFluid.amount + getFillableStack().amount) <= (long) getCapacity()) { + if (aBaseMetaTileEntity.addStackToSlot( + getOutputSlot(), + GTUtility.getContainerForFilledItem(mInventory[inputSlot], true), + 1)) { + getFillableStack().amount += tFluid.amount; + aBaseMetaTileEntity.decrStackSize(inputSlot, 1); + } + } + } + } + } + + if (doesFillContainers()) { + ItemStack tOutput = GTUtility + .fillFluidContainer(getDrainableStack(), mInventory[inputSlot], false, true); + if (tOutput != null && aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), tOutput, 1)) { + FluidStack tFluid = GTUtility.getFluidForFilledItem(tOutput, true); + aBaseMetaTileEntity.decrStackSize(inputSlot, 1); + if (tFluid != null) getDrainableStack().amount -= tFluid.amount; + if (getDrainableStack().amount <= 0 && isFluidChangingAllowed()) setDrainableStack(null); + } + } + } + } + + @Override + public FluidStack getFluid() { + return getDrainableStack(); + } + + @Override + public int getFluidAmount() { + return getDrainableStack() != null ? getDrainableStack().amount : 0; + } + + @Override + public int fill(FluidStack aFluid, boolean doFill) { + if (aFluid == null || aFluid.getFluid() + .getID() <= 0 || aFluid.amount <= 0 || !canTankBeFilled() || !isFluidInputAllowed(aFluid)) return 0; + + if (getFillableStack() == null || getFillableStack().getFluid() + .getID() <= 0) { + if (aFluid.amount <= getCapacity()) { + if (doFill) { + setFillableStack(aFluid.copy()); + getBaseMetaTileEntity().markDirty(); + } + return aFluid.amount; + } + if (doFill) { + setFillableStack(aFluid.copy()); + getFillableStack().amount = getCapacity(); + getBaseMetaTileEntity().markDirty(); + } + return getCapacity(); + } + + if (!getFillableStack().isFluidEqual(aFluid)) return 0; + + int space = getCapacity() - getFillableStack().amount; + if (aFluid.amount <= space) { + if (doFill) { + getFillableStack().amount += aFluid.amount; + getBaseMetaTileEntity().markDirty(); + } + return aFluid.amount; + } + if (doFill) getFillableStack().amount = getCapacity(); + return space; + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) { + if (getDrainableStack() == null || !canTankBeEmptied()) return null; + if (getDrainableStack().amount <= 0 && isFluidChangingAllowed()) { + setDrainableStack(null); + getBaseMetaTileEntity().markDirty(); + return null; + } + + int used = maxDrain; + if (getDrainableStack().amount < used) used = getDrainableStack().amount; + + if (doDrain) { + getDrainableStack().amount -= used; + getBaseMetaTileEntity().markDirty(); + } + + FluidStack drained = getDrainableStack().copy(); + drained.amount = used; + + if (getDrainableStack().amount <= 0 && isFluidChangingAllowed()) { + setDrainableStack(null); + getBaseMetaTileEntity().markDirty(); + } + + return drained; + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection side) { + if (getCapacity() <= 0 && !getBaseMetaTileEntity().hasSteamEngineUpgrade()) return new FluidTankInfo[] {}; + if (isDrainableStackSeparate()) { + return new FluidTankInfo[] { new FluidTankInfo(getFillableStack(), getCapacity()), + new FluidTankInfo(getDrainableStack(), getCapacity()) }; + } else { + return new FluidTankInfo[] { new FluidTankInfo(this) }; + } + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return aIndex == getOutputSlot(); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return aIndex == getInputSlot(); + } + + protected void onEmptyingContainerWhenEmpty() { + // Do nothing + } + + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(7, 16) + .setSize(71, 45)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_GAUGE) + .setPos(79, 34) + .setSize(18, 18)) + .widget( + new SlotWidget(inventoryHandler, getInputSlot()) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_IN) + .setPos(79, 16)) + .widget( + new SlotWidget(inventoryHandler, getOutputSlot()).setAccess(true, false) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_OUT) + .setPos(79, 52)) + .widget( + createFluidSlot().setBackground(GTUITextures.TRANSPARENT) + .setPos(58, 41)) + .widget( + new TextWidget("Liquid Amount").setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(10, 20)) + .widget( + new TextWidget().setStringSupplier(() -> numberFormat.format(mFluid != null ? mFluid.amount : 0)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(10, 30)); + } + + protected FluidSlotWidget createFluidSlot() { + return new FluidSlotWidget(fluidTank); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEBuffer.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEBuffer.java new file mode 100644 index 0000000000..c8b4e6bfca --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEBuffer.java @@ -0,0 +1,559 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Textures.BlockIcons.ARROW_DOWN; +import static gregtech.api.enums.Textures.BlockIcons.ARROW_DOWN_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.ARROW_LEFT; +import static gregtech.api.enums.Textures.BlockIcons.ARROW_LEFT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.ARROW_RIGHT; +import static gregtech.api.enums.Textures.BlockIcons.ARROW_RIGHT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.ARROW_UP; +import static gregtech.api.enums.Textures.BlockIcons.ARROW_UP_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Supplier; +import java.util.stream.IntStream; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.GT_TooltipDataCache; + +public abstract class MTEBuffer extends MTETieredMachineBlock implements IAddUIWidgets { + + private static final int OUTPUT_INDEX = 0; + private static final int ARROW_RIGHT_INDEX = 1; + private static final int ARROW_DOWN_INDEX = 2; + private static final int ARROW_LEFT_INDEX = 3; + private static final int ARROW_UP_INDEX = 4; + private static final int FRONT_INDEX = 5; + + private static final String EMIT_ENERGY_TOOLTIP = "GT5U.machines.emit_energy.tooltip"; + private static final String EMIT_REDSTONE_IF_FULL_TOOLTIP = "GT5U.machines.emit_redstone_if_full.tooltip"; + private static final String INVERT_REDSTONE_TOOLTIP = "GT5U.machines.invert_redstone.tooltip"; + private static final String STOCKING_MODE_TOOLTIP = "GT5U.machines.buffer_stocking_mode.tooltip"; + private static final String SORTING_MODE_TOOLTIP = "GT5U.machines.sorting_mode.tooltip"; + private static final int BUTTON_SIZE = 18; + + public int mMaxStackSize = 64; + public static int MAX = 8; + public boolean bOutput = false, bRedstoneIfFull = false, bInvert = false, bStockingMode = false, + bSortStacks = false; + public int mSuccess = 0, mTargetStackSize = 0; + private int uiButtonCount = 0; + + public MTEBuffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String aDescription) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); + } + + public MTEBuffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String[] aDescription) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); + } + + public MTEBuffer(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEBuffer(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[ForgeDirection.VALID_DIRECTIONS.length][17][]; + ITexture tIcon = getOverlayIcon(); + ITexture tOut = TextureFactory.of(OVERLAY_PIPE_OUT); + ITexture tUp = TextureFactory.of( + TextureFactory.of(ARROW_UP), + TextureFactory.builder() + .addIcon(ARROW_UP_GLOW) + .glow() + .build()); + ITexture tDown = TextureFactory.of( + TextureFactory.of(ARROW_DOWN), + TextureFactory.builder() + .addIcon(ARROW_DOWN_GLOW) + .glow() + .build()); + ITexture tLeft = TextureFactory.of( + TextureFactory.of(ARROW_LEFT), + TextureFactory.builder() + .addIcon(ARROW_LEFT_GLOW) + .glow() + .build()); + ITexture tRight = TextureFactory.of( + TextureFactory.of(ARROW_RIGHT), + TextureFactory.builder() + .addIcon(ARROW_RIGHT_GLOW) + .glow() + .build()); + for (int i = 0; i < rTextures[0].length; i++) { + rTextures[OUTPUT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tOut }; + rTextures[ARROW_RIGHT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tRight, tIcon }; + rTextures[ARROW_DOWN_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tDown, tIcon }; + rTextures[ARROW_LEFT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tLeft, tIcon }; + rTextures[ARROW_UP_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tUp, tIcon }; + rTextures[FRONT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], tIcon }; + } + return rTextures; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + colorIndex = colorIndex + 1; + if (sideDirection == facingDirection) return mTextures[FRONT_INDEX][colorIndex]; + if (sideDirection.getOpposite() == facingDirection) return mTextures[OUTPUT_INDEX][colorIndex]; + switch (facingDirection) { + case DOWN -> { + return mTextures[ARROW_UP_INDEX][colorIndex]; // ARROW_UP + } + case UP -> { + return mTextures[ARROW_DOWN_INDEX][colorIndex]; // ARROW_DOWN + } + case NORTH -> { + switch (sideDirection) { + case DOWN, UP -> { + return mTextures[ARROW_DOWN_INDEX][colorIndex]; // ARROW_DOWN + } + case WEST -> { + return mTextures[ARROW_RIGHT_INDEX][colorIndex]; // ARROW_RIGHT + } + case EAST -> { + return mTextures[ARROW_LEFT_INDEX][colorIndex]; // ARROW_LEFT + } + default -> {} + } + } + case SOUTH -> { + switch (sideDirection) { + case DOWN, UP -> { + return mTextures[ARROW_UP_INDEX][colorIndex]; // ARROW_UP + } + case WEST -> { + return mTextures[ARROW_LEFT_INDEX][colorIndex]; // ARROW_LEFT + } + case EAST -> { + return mTextures[ARROW_RIGHT_INDEX][colorIndex]; // ARROW_RIGHT + } + default -> {} + } + } + case WEST -> { + switch (sideDirection) { + case UP, SOUTH -> { + return mTextures[ARROW_RIGHT_INDEX][colorIndex]; // ARROW_RIGHT + } + case DOWN, NORTH -> { + return mTextures[ARROW_LEFT_INDEX][colorIndex]; // ARROW_LEFT + } + default -> {} + } + } + case EAST -> { + switch (sideDirection) { + case UP, SOUTH -> { + return mTextures[ARROW_LEFT_INDEX][colorIndex]; // ARROW_LEFT + } + case DOWN, NORTH -> { + return mTextures[ARROW_RIGHT_INDEX][colorIndex]; // ARROW_RIGHT + } + default -> {} + } + } + default -> {} + } + return mTextures[FRONT_INDEX][colorIndex]; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex < mInventory.length - 1; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return !isOutputFacing(side); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return getBaseMetaTileEntity().getBackFacing() == side; + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 512L; + } + + @Override + public long maxEUStore() { + return 512L + V[mTier] * 50L; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxEUOutput() { + // Return full value if we're an item and don't exist in the world for tooltip purposes + return getBaseMetaTileEntity().getWorld() == null || bOutput ? V[mTier] : 0L; + } + + @Override + public long maxAmperesIn() { + return 2; + } + + @Override + public long maxAmperesOut() { + return 2; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + public abstract ITexture getOverlayIcon(); + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setBoolean("bInvert", bInvert); + aNBT.setBoolean("bOutput", bOutput); + aNBT.setBoolean("bRedstoneIfFull", bRedstoneIfFull); + aNBT.setBoolean("bStockingMode", bStockingMode); + aNBT.setInteger("mTargetStackSize", mTargetStackSize); + aNBT.setBoolean("bSortStacks", bSortStacks); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + bInvert = aNBT.getBoolean("bInvert"); + bOutput = aNBT.getBoolean("bOutput"); + bRedstoneIfFull = aNBT.getBoolean("bRedstoneIfFull"); + bSortStacks = aNBT.getBoolean("bSortStacks"); + bStockingMode = aNBT.getBoolean("bStockingMode"); + mTargetStackSize = aNBT.getInteger("mTargetStackSize"); + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + super.setItemNBT(aNBT); + if (mTargetStackSize > 0) aNBT.setInteger("mTargetStackSize", mTargetStackSize); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getBackFacing()) { + + mTargetStackSize = (byte) ((mTargetStackSize + (aPlayer.isSneaking() ? -1 : 1)) % 65); + if (mTargetStackSize < 0) { + mTargetStackSize = mMaxStackSize; + } + if (mTargetStackSize == 0) { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("098", "Do not regulate Item Stack Size")); + } else { + GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("099", "Regulate Item Stack Size to: ") + mTargetStackSize); + } + } + } + + @Override + public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer, + float aX, float aY, float aZ) { + wrenchingSide = wrenchingSide.getOpposite(); + if (getBaseMetaTileEntity().isValidFacing(wrenchingSide)) { + getBaseMetaTileEntity().setFrontFacing(wrenchingSide); + return true; + } + return false; + } + + protected void handleRedstoneOutput(IGregTechTileEntity aBaseMetaTileEntity) { + int redstoneOutput = getRedstoneOutput(); + Arrays.stream(ForgeDirection.VALID_DIRECTIONS) + .forEach(side -> aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) redstoneOutput)); + } + + protected int getRedstoneOutput() { + return (!bRedstoneIfFull || (bInvert ^ hasEmptySlots())) ? 0 : 15; + } + + private boolean hasEmptySlots() { + return IntStream.range(0, mInventory.length) + .anyMatch(i -> isValidSlot(i) && mInventory[i] == null); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (aBaseMetaTileEntity.isAllowedToWork() && aBaseMetaTileEntity.isServerSide() + && (aBaseMetaTileEntity.hasWorkJustBeenEnabled() || aBaseMetaTileEntity.hasInventoryBeenModified() + || aTimer % 200 == 0 + || mSuccess > 0)) { + mSuccess--; + updateSlots(); + moveItems(aBaseMetaTileEntity, aTimer); + handleRedstoneOutput(aBaseMetaTileEntity); + } + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 0); + } + + protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + moveItems(aBaseMetaTileEntity, aTimer, 1); + } + + protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long ignoredTimer, int stacks) { + int tCost; + if (bStockingMode) tCost = GTUtility.moveMultipleItemStacks( + aBaseMetaTileEntity, + aBaseMetaTileEntity.getTileEntityAtSide(aBaseMetaTileEntity.getBackFacing()), + aBaseMetaTileEntity.getBackFacing(), + aBaseMetaTileEntity.getFrontFacing(), + null, + false, + mTargetStackSize == 0 ? 64 : (byte) mTargetStackSize, + mTargetStackSize == 0 ? 1 : (byte) mTargetStackSize, + (byte) 64, + (byte) 1, + stacks); + else tCost = GTUtility.moveMultipleItemStacks( + aBaseMetaTileEntity, + aBaseMetaTileEntity.getTileEntityAtSide(aBaseMetaTileEntity.getBackFacing()), + aBaseMetaTileEntity.getBackFacing(), + aBaseMetaTileEntity.getFrontFacing(), + null, + false, + (byte) 64, + (byte) 1, + mTargetStackSize == 0 ? 64 : (byte) mTargetStackSize, + mTargetStackSize == 0 ? 1 : (byte) mTargetStackSize, + stacks); + + if (tCost > 0 || aBaseMetaTileEntity.hasInventoryBeenModified()) { + mSuccess = 50; + } + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return true; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side != aBaseMetaTileEntity.getBackFacing(); + } + + @Override + public boolean allowGeneralRedstoneOutput() { + return true; + } + + public void updateSlots() { + for (int i = 0; i < mInventory.length; i++) + if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null; + if (bSortStacks) fillStacksIntoFirstSlots(); + } + + protected void fillStacksIntoFirstSlots() { + HashMap slots = new HashMap<>(mInventory.length); + HashMap stacks = new HashMap<>(mInventory.length); + List order = new ArrayList<>(mInventory.length); + List validSlots = new ArrayList<>(mInventory.length); + for (int i = 0; i < mInventory.length - 1; i++) { + if (!isValidSlot(i)) continue; + validSlots.add(i); + ItemStack s = mInventory[i]; + if (s == null) continue; + GTUtility.ItemId sID = GTUtility.ItemId.createNoCopy(s); + slots.merge(sID, s.stackSize, Integer::sum); + if (!stacks.containsKey(sID)) stacks.put(sID, s); + order.add(sID); + mInventory[i] = null; + } + int slotindex = 0; + for (GTUtility.ItemId sID : order) { + int toSet = slots.get(sID); + if (toSet == 0) continue; + int slot = validSlots.get(slotindex); + slotindex++; + mInventory[slot] = stacks.get(sID) + .copy(); + toSet = Math.min(toSet, mInventory[slot].getMaxStackSize()); + mInventory[slot].stackSize = toSet; + slots.merge(sID, toSet, (a, b) -> a - b); + } + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, + EntityPlayer entityPlayer, float aX, float aY, float aZ) { + if (entityPlayer.isSneaking()) { + // I was so proud of all this but I literally just copied code from OutputBus + bSortStacks = !bSortStacks; + GTUtility.sendChatToPlayer( + entityPlayer, + GTUtility.trans("200", "Sort mode: ") + + (bSortStacks ? GTUtility.trans("088", "Enabled") : GTUtility.trans("087", "Disabled"))); + return true; + } + return super.onSolderingToolRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ); + } + + protected void addEmitEnergyButton(ModularWindow.Builder builder) { + builder.widget( + createToggleButton( + () -> bOutput, + val -> bOutput = val, + GTUITextures.OVERLAY_BUTTON_EMIT_ENERGY, + this::getEmitEnergyButtonTooltip)); + } + + private GT_TooltipDataCache.TooltipData getEmitEnergyButtonTooltip() { + return mTooltipCache.getData( + EMIT_ENERGY_TOOLTIP, + EnumChatFormatting.GREEN + GTUtility.formatNumbers(V[mTier]) + + " (" + + GTUtility.getColoredTierNameFromTier(mTier) + + EnumChatFormatting.GREEN + + ")" + + EnumChatFormatting.GRAY, + maxAmperesOut()); + } + + protected void addEmitRedstoneIfFullButton(ModularWindow.Builder builder) { + builder.widget( + createToggleButton( + () -> bRedstoneIfFull, + val -> bRedstoneIfFull = val, + GTUITextures.OVERLAY_BUTTON_EMIT_REDSTONE, + this::getEmitRedstoneIfFullButtonTooltip).setUpdateTooltipEveryTick(true)); + } + + private GT_TooltipDataCache.TooltipData getEmitRedstoneIfFullButtonTooltip() { + return mTooltipCache.getUncachedTooltipData( + EMIT_REDSTONE_IF_FULL_TOOLTIP, + StatCollector.translateToLocal(hasEmptySlots() ? "gui.yes" : "gui.no"), + getRedstoneOutput()); + } + + protected void addInvertRedstoneButton(ModularWindow.Builder builder) { + builder.widget( + createToggleButton( + () -> bInvert, + val -> bInvert = val, + GTUITextures.OVERLAY_BUTTON_INVERT_REDSTONE, + () -> mTooltipCache.getData(INVERT_REDSTONE_TOOLTIP))); + } + + protected void addStockingModeButton(ModularWindow.Builder builder) { + builder.widget( + createToggleButton( + () -> bStockingMode, + val -> bStockingMode = val, + GTUITextures.OVERLAY_BUTTON_STOCKING_MODE, + () -> mTooltipCache.getData(STOCKING_MODE_TOOLTIP))); + } + + protected void addSortStacksButton(ModularWindow.Builder builder) { + builder.widget( + createToggleButton( + () -> bSortStacks, + val -> bSortStacks = val, + GTUITextures.OVERLAY_BUTTON_SORTING_MODE, + () -> mTooltipCache.getData(SORTING_MODE_TOOLTIP))); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + buildContext.addCloseListener(() -> uiButtonCount = 0); + addEmitEnergyButton(builder); + } + + protected Widget createToggleButton(Supplier getter, Consumer setter, UITexture picture, + Supplier tooltipDataSupplier) { + return new CycleButtonWidget().setToggle(getter, setter) + .setStaticTexture(picture) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(7 + (uiButtonCount++ * BUTTON_SIZE), 62) + .setSize(BUTTON_SIZE, BUTTON_SIZE) + .setGTTooltip(tooltipDataSupplier); + } + + protected void addInventorySlots(ModularWindow.Builder builder) { + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 9) + .endAtSlot(26) + .build() + .setPos(7, 4)); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTECable.java b/src/main/java/gregtech/api/metatileentity/implementations/MTECable.java new file mode 100644 index 0000000000..b56769c59b --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTECable.java @@ -0,0 +1,649 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Mods.GalacticraftCore; +import static net.minecraftforge.common.util.ForgeDirection.DOWN; +import static net.minecraftforge.common.util.ForgeDirection.EAST; +import static net.minecraftforge.common.util.ForgeDirection.NORTH; +import static net.minecraftforge.common.util.ForgeDirection.SOUTH; +import static net.minecraftforge.common.util.ForgeDirection.UP; +import static net.minecraftforge.common.util.ForgeDirection.WEST; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import cofh.api.energy.IEnergyReceiver; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TextureSet; +import gregtech.api.enums.Textures; +import gregtech.api.graphs.Node; +import gregtech.api.graphs.NodeList; +import gregtech.api.graphs.PowerNode; +import gregtech.api.graphs.PowerNodes; +import gregtech.api.graphs.consumers.ConsumerNode; +import gregtech.api.graphs.paths.PowerNodePath; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IConnectable; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.metatileentity.IMetaTileEntityCable; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IEnergyConnected; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.interfaces.PowerLogicHost; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.api.objects.GTCoverNone; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTGCCompat; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.GTClient; +import gregtech.common.covers.CoverInfo; +import gregtech.common.covers.CoverSolarPanel; +import ic2.api.energy.EnergyNet; +import ic2.api.energy.tile.IEnergyEmitter; +import ic2.api.energy.tile.IEnergySink; +import ic2.api.energy.tile.IEnergySource; +import ic2.api.energy.tile.IEnergyTile; +import ic2.api.reactor.IReactorChamber; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTECable extends MetaPipeEntity implements IMetaTileEntityCable { + + public final float mThickNess; + public final Materials mMaterial; + public final long mCableLossPerMeter, mAmperage, mVoltage; + public final boolean mInsulated, mCanShock; + + public int mTransferredAmperage = 0; + + public MTECable(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, + long aCableLossPerMeter, long aAmperage, long aVoltage, boolean aInsulated, boolean aCanShock) { + super(aID, aName, aNameRegional, 0); + mThickNess = aThickNess; + mMaterial = aMaterial; + mAmperage = aAmperage; + mVoltage = aVoltage; + mInsulated = aInsulated; + mCanShock = aCanShock; + mCableLossPerMeter = aCableLossPerMeter; + } + + public MTECable(String aName, float aThickNess, Materials aMaterial, long aCableLossPerMeter, long aAmperage, + long aVoltage, boolean aInsulated, boolean aCanShock) { + super(aName, 0); + mThickNess = aThickNess; + mMaterial = aMaterial; + mAmperage = aAmperage; + mVoltage = aVoltage; + mInsulated = aInsulated; + mCanShock = aCanShock; + mCableLossPerMeter = aCableLossPerMeter; + } + + @Override + public byte getTileEntityBaseType() { + return (byte) (mInsulated ? 9 : 8); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTECable( + mName, + mThickNess, + mMaterial, + mCableLossPerMeter, + mAmperage, + mVoltage, + mInsulated, + mCanShock); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + int facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (!mInsulated) return new ITexture[] { TextureFactory + .of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], Dyes.getModulation(colorIndex, mMaterial.mRGBa)) }; + if (active) { + float tThickNess = getThickNess(); + if (tThickNess < 0.124F) return new ITexture[] { TextureFactory + .of(Textures.BlockIcons.INSULATION_FULL, Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + if (tThickNess < 0.374F) // 0.375 x1 + return new ITexture[] { + TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), + TextureFactory.of( + Textures.BlockIcons.INSULATION_TINY, + Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + if (tThickNess < 0.499F) // 0.500 x2 + return new ITexture[] { + TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), + TextureFactory.of( + Textures.BlockIcons.INSULATION_SMALL, + Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + if (tThickNess < 0.624F) // 0.625 x4 + return new ITexture[] { + TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), + TextureFactory.of( + Textures.BlockIcons.INSULATION_MEDIUM, + Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + if (tThickNess < 0.749F) // 0.750 x8 + return new ITexture[] { + TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), + TextureFactory.of( + Textures.BlockIcons.INSULATION_MEDIUM_PLUS, + Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + if (tThickNess < 0.874F) // 0.825 x12 + return new ITexture[] { + TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), + TextureFactory.of( + Textures.BlockIcons.INSULATION_LARGE, + Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + return new ITexture[] { + TextureFactory.of(mMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], mMaterial.mRGBa), + TextureFactory.of( + Textures.BlockIcons.INSULATION_HUGE, + Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + } + return new ITexture[] { TextureFactory + .of(Textures.BlockIcons.INSULATION_FULL, Dyes.getModulation(colorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + } + + @Override + public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity aEntity) { + + if (!mCanShock) return; + + final BaseMetaPipeEntity baseEntity = (BaseMetaPipeEntity) getBaseMetaTileEntity(); + + if (!(aEntity instanceof EntityLivingBase livingEntity)) return; + if (!(baseEntity.getNodePath() instanceof PowerNodePath powerPath)) return; + + if (isCoverOnSide(baseEntity, livingEntity)) return; + if ((baseEntity.mConnections & IConnectable.HAS_HARDENEDFOAM) == 1) return; + + final long amperage = powerPath.getAmperage(); + final long voltage = powerPath.getVoltage(); + + if (amperage == 0L) return; + + GTUtility.applyElectricityDamage(livingEntity, voltage, amperage); + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return false; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public final boolean renderInside(ForgeDirection side) { + return false; + } + + @Override + public int getProgresstime() { + return (int) mTransferredAmperage * 64; + } + + @Override + public int maxProgresstime() { + return (int) mAmperage * 64; + } + + @Override + public long injectEnergyUnits(ForgeDirection side, long voltage, long amperage) { + if (!isConnectedAtSide(side) && side != ForgeDirection.UNKNOWN) return 0; + if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) + .letsEnergyIn()) return 0; + return transferElectricity(side, voltage, amperage, (HashSet) null); + } + + @Override + @Deprecated + public long transferElectricity(ForgeDirection side, long aVoltage, long aAmperage, + ArrayList aAlreadyPassedTileEntityList) { + return transferElectricity(side, aVoltage, aAmperage, new HashSet<>(aAlreadyPassedTileEntityList)); + } + + @Override + public long transferElectricity(ForgeDirection side, long voltage, long amperage, + HashSet alreadyPassedSet) { + if (!getBaseMetaTileEntity().isServerSide() || !isConnectedAtSide(side) && side != ForgeDirection.UNKNOWN) + return 0; + final BaseMetaPipeEntity tBase = (BaseMetaPipeEntity) getBaseMetaTileEntity(); + if (!(tBase.getNode() instanceof PowerNode tNode)) return 0; + int tPlace = 0; + final Node[] tToPower = new Node[tNode.mConsumers.size()]; + if (tNode.mHadVoltage) { + for (ConsumerNode consumer : tNode.mConsumers) { + if (consumer.needsEnergy()) tToPower[tPlace++] = consumer; + } + } else { + tNode.mHadVoltage = true; + for (ConsumerNode consumer : tNode.mConsumers) { + tToPower[tPlace++] = consumer; + } + } + return PowerNodes.powerNode(tNode, null, new NodeList(tToPower), (int) voltage, (int) amperage); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aTick % 20 == 0 && aBaseMetaTileEntity.isServerSide() + && (!GTMod.gregtechproxy.gt6Cable || mCheckConnections)) { + checkConnections(); + } + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (GTMod.gregtechproxy.gt6Cable + && GTModHandler.damageOrDechargeItem(aPlayer.inventory.getCurrentItem(), 1, 500, aPlayer)) { + if (isConnectedAtSide(wrenchingSide)) { + disconnect(wrenchingSide); + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("215", "Disconnected")); + } else if (!GTMod.gregtechproxy.costlyCableConnection) { + if (connect(wrenchingSide) > 0) + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("214", "Connected")); + } + return true; + } + return false; + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (GTMod.gregtechproxy.gt6Cable + && GTModHandler.damageOrDechargeItem(aPlayer.inventory.getCurrentItem(), 1, 500, aPlayer)) { + if (isConnectedAtSide(wrenchingSide)) { + disconnect(wrenchingSide); + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("215", "Disconnected")); + } else if (!GTMod.gregtechproxy.costlyCableConnection || GTModHandler.consumeSolderingMaterial(aPlayer)) { + if (connect(wrenchingSide) > 0) + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("214", "Connected")); + } + return true; + } + return false; + } + + @Override + public boolean letsIn(CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return coverBehavior.letsEnergyIn(side, aCoverID, aCoverVariable, aTileEntity); + } + + @Override + public boolean letsOut(CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return coverBehavior.letsEnergyOut(side, aCoverID, aCoverVariable, aTileEntity); + } + + @Override + public boolean letsIn(CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, + ISerializableObject aCoverVariable, ICoverable aTileEntity) { + return coverBehavior.letsEnergyIn(side, aCoverID, aCoverVariable, aTileEntity); + } + + @Override + public boolean letsOut(CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, + ISerializableObject aCoverVariable, ICoverable aTileEntity) { + return coverBehavior.letsEnergyOut(side, aCoverID, aCoverVariable, aTileEntity); + } + + @Override + public boolean letsIn(CoverInfo coverInfo) { + return coverInfo.letsEnergyIn(); + } + + @Override + public boolean letsOut(CoverInfo coverInfo) { + return coverInfo.letsEnergyOut(); + } + + @Override + public boolean canConnect(ForgeDirection side, TileEntity tileEntity) { + final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity(); + final CoverBehaviorBase coverBehavior = baseMetaTile.getCoverBehaviorAtSideNew(side); + final ForgeDirection oppositeSide = side.getOpposite(); + + // GT Machine handling + if ((tileEntity instanceof PowerLogicHost powerLogic && powerLogic.getPowerLogic(oppositeSide) != null) + || ((tileEntity instanceof IEnergyConnected energyConnected) + && (energyConnected.inputEnergyFrom(oppositeSide, false) + || energyConnected.outputsEnergyTo(oppositeSide, false)))) + return true; + + // Solar Panel Compat + if (coverBehavior instanceof CoverSolarPanel) return true; + + // ((tIsGregTechTileEntity && tIsTileEntityCable) && (tAlwaysLookConnected || tLetEnergyIn || tLetEnergyOut) ) + // --> Not needed + if (GalacticraftCore.isModLoaded() && GTGCCompat.canConnect(tileEntity, oppositeSide)) return true; + + // AE2-p2p Compat + if (tileEntity instanceof appeng.tile.powersink.IC2 ic2sink + && ic2sink.acceptsEnergyFrom((TileEntity) baseMetaTile, oppositeSide)) return true; + + // IC2 Compat + { + final TileEntity ic2Energy; + + if (tileEntity instanceof IReactorChamber) + ic2Energy = (TileEntity) ((IReactorChamber) tileEntity).getReactor(); + else ic2Energy = (tileEntity == null || tileEntity instanceof IEnergyTile || EnergyNet.instance == null) + ? tileEntity + : EnergyNet.instance + .getTileEntity(tileEntity.getWorldObj(), tileEntity.xCoord, tileEntity.yCoord, tileEntity.zCoord); + + // IC2 Sink Compat + if ((ic2Energy instanceof IEnergySink) + && ((IEnergySink) ic2Energy).acceptsEnergyFrom((TileEntity) baseMetaTile, oppositeSide)) return true; + + // IC2 Source Compat + if (GTMod.gregtechproxy.ic2EnergySourceCompat && (ic2Energy instanceof IEnergySource)) { + if (((IEnergySource) ic2Energy).emitsEnergyTo((TileEntity) baseMetaTile, oppositeSide)) { + return true; + } + } + } + // RF Output Compat + if (GregTechAPI.mOutputRF && tileEntity instanceof IEnergyReceiver + && ((IEnergyReceiver) tileEntity).canConnectEnergy(oppositeSide)) return true; + + // RF Input Compat + return GregTechAPI.mInputRF && (tileEntity instanceof IEnergyEmitter + && ((IEnergyEmitter) tileEntity).emitsEnergyTo((TileEntity) baseMetaTile, oppositeSide)); + } + + @Override + public boolean getGT6StyleConnection() { + // Yes if GT6 Cables are enabled + return GTMod.gregtechproxy.gt6Cable; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public String[] getDescription() { + return new String[] { + StatCollector.translateToLocal("GT5U.item.cable.max_voltage") + ": %%%" + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mVoltage) + + " (" + + GTUtility.getColoredTierNameFromVoltage(mVoltage) + + EnumChatFormatting.GREEN + + ")" + + EnumChatFormatting.GRAY, + StatCollector.translateToLocal("GT5U.item.cable.max_amperage") + ": %%%" + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mAmperage) + + EnumChatFormatting.GRAY, + StatCollector.translateToLocal("GT5U.item.cable.loss") + ": %%%" + + EnumChatFormatting.RED + + GTUtility.formatNumbers(mCableLossPerMeter) + + EnumChatFormatting.GRAY + + "%%% " + + StatCollector.translateToLocal("GT5U.item.cable.eu_volt") }; + } + + @Override + public float getThickNess() { + if (GTMod.instance.isClientSide() && (GTClient.hideValue & 0x1) != 0) return 0.0625F; + return mThickNess; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + if (GTMod.gregtechproxy.gt6Cable) aNBT.setByte("mConnections", mConnections); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (GTMod.gregtechproxy.gt6Cable) { + mConnections = aNBT.getByte("mConnections"); + } + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + final BaseMetaPipeEntity base = (BaseMetaPipeEntity) getBaseMetaTileEntity(); + final PowerNodePath path = (PowerNodePath) base.getNodePath(); + + if (path == null) + return new String[] { EnumChatFormatting.RED + "Failed to get Power Node info" + EnumChatFormatting.RESET }; + + final long currAmp = path.getAmperage(); + final long currVoltage = path.getVoltage(); + + final double avgAmp = path.getAvgAmperage(); + final double avgVoltage = path.getAvgVoltage(); + + final long maxVoltageOut = (mVoltage - mCableLossPerMeter) * mAmperage; + + return new String[] { + "Amperage: " + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(currAmp) + + EnumChatFormatting.RESET + + " / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mAmperage) + + EnumChatFormatting.RESET + + " A", + "Voltage Out: " + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(currVoltage) + + EnumChatFormatting.RESET + + " / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxVoltageOut) + + EnumChatFormatting.RESET + + " EU/t", + "Avg Amperage (20t): " + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(avgAmp) + + EnumChatFormatting.RESET + + " A", + "Avg Output (20t): " + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(avgVoltage) + + EnumChatFormatting.RESET + + " EU/t" }; + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + if (GTMod.instance.isClientSide() && (GTClient.hideValue & 0x2) != 0) + return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1); + else return getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + } + + private AxisAlignedBB getActualCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + float tSpace = (1f - mThickNess) / 2; + float spaceDown = tSpace; + float spaceUp = 1f - tSpace; + float spaceNorth = tSpace; + float spaceSouth = 1f - tSpace; + float spaceWest = tSpace; + float spaceEast = 1f - tSpace; + + if (getBaseMetaTileEntity().getCoverIDAtSide(DOWN) != 0) { + spaceDown = spaceNorth = spaceWest = 0; + spaceSouth = spaceEast = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(UP) != 0) { + spaceNorth = spaceWest = 0; + spaceUp = spaceSouth = spaceEast = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(NORTH) != 0) { + spaceDown = spaceNorth = spaceWest = 0; + spaceUp = spaceEast = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(SOUTH) != 0) { + spaceDown = spaceWest = 0; + spaceUp = spaceSouth = spaceEast = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(WEST) != 0) { + spaceDown = spaceNorth = spaceWest = 0; + spaceUp = spaceSouth = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(EAST) != 0) { + spaceDown = spaceNorth = 0; + spaceUp = spaceSouth = spaceEast = 1; + } + + byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; + if ((tConn & DOWN.flag) != 0) spaceDown = 0f; + if ((tConn & UP.flag) != 0) spaceUp = 1f; + if ((tConn & NORTH.flag) != 0) spaceNorth = 0f; + if ((tConn & SOUTH.flag) != 0) spaceSouth = 1f; + if ((tConn & WEST.flag) != 0) spaceWest = 0f; + if ((tConn & EAST.flag) != 0) spaceEast = 1f; + + return AxisAlignedBB.getBoundingBox( + aX + spaceWest, + aY + spaceDown, + aZ + spaceNorth, + aX + spaceEast, + aY + spaceUp, + aZ + spaceSouth); + } + + @Override + public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, + List outputAABB, Entity collider) { + super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); + if (GTMod.instance.isClientSide() && (GTClient.hideValue & 0x2) != 0) { + final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb); + } + } + + @Override + public boolean shouldJoinIc2Enet() { + if (!GTMod.gregtechproxy.ic2EnergySourceCompat) return false; + + if (mConnections != 0) { + final IGregTechTileEntity baseMeta = getBaseMetaTileEntity(); + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (isConnectedAtSide(side)) { + final TileEntity tTileEntity = baseMeta.getTileEntityAtSide(side); + final TileEntity tEmitter = (tTileEntity == null || tTileEntity instanceof IEnergyTile + || EnergyNet.instance == null) + ? tTileEntity + : EnergyNet.instance.getTileEntity( + tTileEntity.getWorldObj(), + tTileEntity.xCoord, + tTileEntity.yCoord, + tTileEntity.zCoord); + + if (tEmitter instanceof IEnergyEmitter) return true; + } + } + } + return false; + } + + @Override + public void reloadLocks() { + final BaseMetaPipeEntity pipe = (BaseMetaPipeEntity) getBaseMetaTileEntity(); + if (pipe.getNode() != null) { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (isConnectedAtSide(side)) { + final CoverInfo coverInfo = pipe.getCoverInfoAtSide(side); + if (coverInfo.getCoverBehavior() instanceof GTCoverNone) continue; + if (!letsIn(coverInfo) || !letsOut(coverInfo)) { + pipe.addToLock(pipe, side); + } else { + pipe.removeFromLock(pipe, side); + } + } + } + } else { + boolean dontAllow = false; + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (isConnectedAtSide(side)) { + final CoverInfo coverInfo = pipe.getCoverInfoAtSide(side); + if (coverInfo.getCoverBehavior() instanceof GTCoverNone) continue; + + if (!letsIn(coverInfo) || !letsOut(coverInfo)) { + dontAllow = true; + } + } + } + if (dontAllow) { + pipe.addToLock(pipe, DOWN); + } else { + pipe.removeFromLock(pipe, DOWN); + } + } + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + + currenttip.add( + StatCollector.translateToLocal("GT5U.item.cable.max_voltage") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mVoltage) + + " (" + + GTUtility.getColoredTierNameFromVoltage(mVoltage) + + EnumChatFormatting.GREEN + + ")"); + currenttip.add( + StatCollector.translateToLocal("GT5U.item.cable.max_amperage") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mAmperage)); + currenttip.add( + StatCollector.translateToLocal("GT5U.item.cable.loss") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(mCableLossPerMeter) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.item.cable.eu_volt")); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTECubicMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTECubicMultiBlockBase.java new file mode 100644 index 0000000000..c8b0c8ce3f --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTECubicMultiBlockBase.java @@ -0,0 +1,141 @@ +package gregtech.api.metatileentity.implementations; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; + +import java.util.List; + +import net.minecraft.item.ItemStack; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GTStructureUtility; + +/** + * A simple 3x3x3 hollow cubic multiblock, that can be arbitrarily rotated, made of a single type of machine casing and + * accepts hatches everywhere. Controller will be placed in front center of the structure. + *

+ * Note: You cannot use different casing for the same Class. Make a new subclass for it. You also should not change the + * casing dynamically, i.e. it should be a dumb method returning some sort of constant. + *

+ * Implementation tips: 1. To restrict hatches, override {@link #addDynamoToMachineList(IGregTechTileEntity, int)} and + * its cousins instead of overriding the whole {@link #getStructureDefinition()} or change + * {@link #checkHatches(IGregTechTileEntity, ItemStack)}. The former is a total overkill, while the later cannot stop + * the structure check early. 2. To limit rotation, override {@link #getInitialAlignmentLimits()} + * + * @param + */ +public abstract class MTECubicMultiBlockBase> extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable { + + protected static final String STRUCTURE_PIECE_MAIN = "main"; + protected static final ClassValue>> STRUCTURE_DEFINITION = new ClassValue<>() { + + @Override + protected IStructureDefinition> computeValue(Class type) { + return StructureDefinition.>builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { "hhh", "hhh", "hhh" }, { "h~h", "h-h", "hhh" }, { "hhh", "hhh", "hhh" }, })) + .addElement( + 'h', + ofChain( + lazy( + t -> GTStructureUtility.>buildHatchAdder() + .atLeastList(t.getAllowedHatches()) + .casingIndex(t.getHatchTextureIndex()) + .dot(1) + .build()), + onElementPass( + MTECubicMultiBlockBase::onCorrectCasingAdded, + lazy(MTECubicMultiBlockBase::getCasingElement)))) + .build(); + } + }; + private int mCasingAmount = 0; + + protected MTECubicMultiBlockBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + protected MTECubicMultiBlockBase(String aName) { + super(aName); + } + + /** + * Create a simple 3x3x3 hollow cubic structure made of a single type of machine casing and accepts hatches + * everywhere. + *

+ * The created definition contains a single piece named {@link #STRUCTURE_PIECE_MAIN}. + */ + @Override + @SuppressWarnings("unchecked") + public IStructureDefinition getStructureDefinition() { + return (IStructureDefinition) STRUCTURE_DEFINITION.get(getClass()); + } + + @Override + public void construct(ItemStack aStack, boolean aHintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + return checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 0) && mCasingAmount >= getRequiredCasingCount() + && checkHatches(aBaseMetaTileEntity, aStack); + } + + /** + * Called by {@link #checkMachine(IGregTechTileEntity, ItemStack)} to check if all required hatches are present. + *

+ * Default implementation requires EXACTLY ONE maintenance hatch to be present, and ignore all other conditions. + * + * @param aBaseMetaTileEntity the tile entity of self + * @param aStack The item stack inside the controller + * @return true if the test passes, false otherwise + */ + protected boolean checkHatches(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return mMaintenanceHatches.size() == 1; + } + + protected abstract IStructureElement> getCasingElement(); + + protected List>> getAllowedHatches() { + return ImmutableList.of(InputHatch, OutputHatch, InputBus, OutputBus, Muffler, Maintenance, Energy); + } + + /** + * The hatch's texture index. + */ + protected abstract int getHatchTextureIndex(); + + protected abstract int getRequiredCasingCount(); + + protected void onCorrectCasingAdded() { + mCasingAmount++; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEEnhancedMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEEnhancedMultiBlockBase.java new file mode 100644 index 0000000000..2cf4398e87 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEEnhancedMultiBlockBase.java @@ -0,0 +1,318 @@ +package gregtech.api.metatileentity.implementations; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.IAlignment; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; +import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; + +import cpw.mods.fml.common.network.NetworkRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; + +/** + * Enhanced multiblock base class, featuring following improvement over {@link MTEMultiBlockBase} + *

+ * 1. TecTech style declarative structure check utilizing StructureLib. 2. Arbitrarily rotating the whole structure, if + * allowed to. + * + * @param type of this + */ +public abstract class MTEEnhancedMultiBlockBase> extends MTETooltipMultiBlockBase + implements IAlignment, IConstructable { + + private ExtendedFacing mExtendedFacing = ExtendedFacing.DEFAULT; + private IAlignmentLimits mLimits = getInitialAlignmentLimits(); + + protected MTEEnhancedMultiBlockBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + protected MTEEnhancedMultiBlockBase(String aName) { + super(aName); + } + + @Override + public ExtendedFacing getExtendedFacing() { + return mExtendedFacing; + } + + @Override + public void setExtendedFacing(ExtendedFacing newExtendedFacing) { + if (mExtendedFacing != newExtendedFacing) { + if (mMachine) stopMachine(ShutDownReasonRegistry.STRUCTURE_INCOMPLETE); + mExtendedFacing = newExtendedFacing; + final IGregTechTileEntity base = getBaseMetaTileEntity(); + mMachine = false; + mUpdated = false; + mUpdate = 50; + if (getBaseMetaTileEntity().isServerSide() + && !GregTechAPI.isDummyWorld(getBaseMetaTileEntity().getWorld())) { + StructureLibAPI.sendAlignment( + (IAlignmentProvider) base, + new NetworkRegistry.TargetPoint( + base.getWorld().provider.dimensionId, + base.getXCoord(), + base.getYCoord(), + base.getZCoord(), + 512)); + } else { + base.issueTextureUpdate(); + } + } + } + + @Override + public final boolean isFacingValid(ForgeDirection facing) { + return canSetToDirectionAny(facing); + } + + @Override + public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer, + float aX, float aY, float aZ) { + if (wrenchingSide != getBaseMetaTileEntity().getFrontFacing()) + return super.onWrenchRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ); + if (entityPlayer.isSneaking()) { + if (isFlipChangeAllowed()) { + toolSetFlip(getFlip().isHorizontallyFlipped() ? Flip.NONE : Flip.HORIZONTAL); + } else { + return false; + } + } else { + if (isRotationChangeAllowed()) { + toolSetRotation(null); + } else { + return false; + } + } + return true; + } + + @Override + public void onFacingChange() { + toolSetDirection(getBaseMetaTileEntity().getFrontFacing()); + } + + @Override + public IAlignmentLimits getAlignmentLimits() { + return mLimits; + } + + protected void setAlignmentLimits(IAlignmentLimits mLimits) { + this.mLimits = mLimits; + } + + /** + * Due to limitation of Java type system, you might need to do an unchecked cast. HOWEVER, the returned + * IStructureDefinition is expected to be evaluated against current instance only, and should not be used against + * other instances, even for those of the same class. + */ + public abstract IStructureDefinition getStructureDefinition(); + + protected abstract MultiblockTooltipBuilder createTooltip(); + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return getTooltip().getStructureHint(); + } + + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> !f.isVerticallyFliped(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByte( + "eRotation", + (byte) mExtendedFacing.getRotation() + .getIndex()); + aNBT.setByte( + "eFlip", + (byte) mExtendedFacing.getFlip() + .getIndex()); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mExtendedFacing = ExtendedFacing.of( + getBaseMetaTileEntity().getFrontFacing(), + Rotation.byIndex(aNBT.getByte("eRotation")), + Flip.byIndex(aNBT.getByte("eFlip"))); + if (!getAlignmentLimits().isNewExtendedFacingValid(mExtendedFacing)) { + mExtendedFacing = getCorrectedAlignment(mExtendedFacing); + } + } + + /** + * When an old {@link ExtendedFacing} is loaded upon MTE deserialization, and the loaded facing cannot pass test of + * current {@link #getAlignmentLimits()}, this method will be called to retrieve a corrected version. This method + * is currently only intended to be used as a mean to migrate alignment limits, so if you never change the alignment + * limit then you can probably just use the default implementation. + * + * The returned new facing must be able to pass the test of {@link #isNewExtendedFacingValid(ExtendedFacing)} + */ + protected ExtendedFacing getCorrectedAlignment(ExtendedFacing aOldFacing) { + if (isNewExtendedFacingValid(ExtendedFacing.DEFAULT)) { + return ExtendedFacing.DEFAULT; + } + for (ExtendedFacing facing : ExtendedFacing.VALUES) { + if (facing.getFlip() + .isVerticallyFliped()) { + continue; + } + if (isNewExtendedFacingValid(facing)) { + return facing; + } + } + throw new AssertionError("No ExtendedFacing can pass the test of isNewExtendedFacingValid"); + } + + @SuppressWarnings("unchecked") + private IStructureDefinition> getCastedStructureDefinition() { + return (IStructureDefinition>) getStructureDefinition(); + } + + /** + * Explanation of the world coordinate these offset means: + *

+ * Imagine you stand in front of the controller, with controller facing towards you not rotated or flipped. + *

+ * The horizontalOffset would be the number of blocks on the left side of the controller, not counting controller + * itself. The verticalOffset would be the number of blocks on the top side of the controller, not counting + * controller itself. The depthOffset would be the number of blocks between you and controller, not counting + * controller itself. + *

+ * All these offsets can be negative. + */ + protected final boolean checkPiece(String piece, int horizontalOffset, int verticalOffset, int depthOffset) { + final IGregTechTileEntity tTile = getBaseMetaTileEntity(); + return getCastedStructureDefinition().check( + this, + piece, + tTile.getWorld(), + getExtendedFacing(), + tTile.getXCoord(), + tTile.getYCoord(), + tTile.getZCoord(), + horizontalOffset, + verticalOffset, + depthOffset, + !mMachine); + } + + protected final boolean buildPiece(String piece, ItemStack trigger, boolean hintOnly, int horizontalOffset, + int verticalOffset, int depthOffset) { + final IGregTechTileEntity tTile = getBaseMetaTileEntity(); + return getCastedStructureDefinition().buildOrHints( + this, + trigger, + piece, + tTile.getWorld(), + getExtendedFacing(), + tTile.getXCoord(), + tTile.getYCoord(), + tTile.getZCoord(), + horizontalOffset, + verticalOffset, + depthOffset, + hintOnly); + } + + @Deprecated + protected final int survivialBuildPiece(String piece, ItemStack trigger, int horizontalOffset, int verticalOffset, + int depthOffset, int elementsBudget, IItemSource source, EntityPlayerMP actor, boolean check) { + final IGregTechTileEntity tTile = getBaseMetaTileEntity(); + return getCastedStructureDefinition().survivalBuild( + this, + trigger, + piece, + tTile.getWorld(), + getExtendedFacing(), + tTile.getXCoord(), + tTile.getYCoord(), + tTile.getZCoord(), + horizontalOffset, + verticalOffset, + depthOffset, + elementsBudget, + source, + actor, + check); + } + + protected final int survivialBuildPiece(String piece, ItemStack trigger, int horizontalOffset, int verticalOffset, + int depthOffset, int elementsBudget, ISurvivalBuildEnvironment env, boolean check) { + final IGregTechTileEntity tTile = getBaseMetaTileEntity(); + return getCastedStructureDefinition().survivalBuild( + this, + trigger, + piece, + tTile.getWorld(), + getExtendedFacing(), + tTile.getXCoord(), + tTile.getYCoord(), + tTile.getZCoord(), + horizontalOffset, + verticalOffset, + depthOffset, + elementsBudget, + env, + check); + } + + @Deprecated + protected final int survivialBuildPiece(String piece, ItemStack trigger, int horizontalOffset, int verticalOffset, + int depthOffset, int elementsBudget, IItemSource source, EntityPlayerMP actor, boolean check, + boolean checkIfPlaced) { + int built = survivialBuildPiece( + piece, + trigger, + horizontalOffset, + verticalOffset, + depthOffset, + elementsBudget, + source, + actor, + check); + if (checkIfPlaced && built > 0) checkStructure(true, getBaseMetaTileEntity()); + return built; + } + + protected final int survivialBuildPiece(String piece, ItemStack trigger, int horizontalOffset, int verticalOffset, + int depthOffset, int elementsBudget, ISurvivalBuildEnvironment env, boolean check, boolean checkIfPlaced) { + int built = survivialBuildPiece( + piece, + trigger, + horizontalOffset, + verticalOffset, + depthOffset, + elementsBudget, + env, + check); + if (checkIfPlaced && built > 0) checkStructure(true, getBaseMetaTileEntity()); + return built; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + if (aBaseMetaTileEntity.isClientSide()) + StructureLibAPI.queryAlignment((IAlignmentProvider) aBaseMetaTileEntity); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEExtendedPowerMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEExtendedPowerMultiBlockBase.java new file mode 100644 index 0000000000..64bade97e8 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEExtendedPowerMultiBlockBase.java @@ -0,0 +1,242 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import org.jetbrains.annotations.NotNull; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.util.ExoticEnergyInputHelper; +import gregtech.api.util.GTUtility; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; + +/** + * Multiblock base class that allows machine to use power over int. + */ +public abstract class MTEExtendedPowerMultiBlockBase> + extends MTEEnhancedMultiBlockBase { + + public long lEUt; + + protected MTEExtendedPowerMultiBlockBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + protected MTEExtendedPowerMultiBlockBase(String aName) { + super(aName); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + // NBT can be loaded as any primitive type, so we can load it as long. + this.lEUt = aNBT.getLong("mEUt"); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setLong("mEUt", this.lEUt); + } + + @Override + protected void calculateOverclockedNessMultiInternal(long aEUt, int aDuration, int mAmperage, long maxInputVoltage, + boolean perfectOC) { + OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(aEUt) + .setEUt(maxInputVoltage * mAmperage) + .setDuration(aDuration) + .setDurationDecreasePerOC(perfectOC ? 4.0 : 2.0) + .calculate(); + lEUt = calculator.getConsumption(); + mMaxProgresstime = calculator.getDuration(); + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (this.lEUt > 0) { + addEnergyOutput((this.lEUt * mEfficiency) / 10000); + return true; + } + if (this.lEUt < 0) { + if (!drainEnergyInput(getActualEnergyUsage())) { + stopMachine(ShutDownReasonRegistry.POWER_LOSS); + return false; + } + } + return true; + } + + @Override + public void stopMachine(@NotNull ShutDownReason reason) { + this.lEUt = 0; + super.stopMachine(reason); + } + + @Override + protected long getActualEnergyUsage() { + return (-this.lEUt * 10000) / Math.max(1000, mEfficiency); + } + + public List getExoticAndNormalEnergyHatchList() { + List tHatches = new ArrayList<>(); + tHatches.addAll(filterValidMTEs(mExoticEnergyHatches)); + tHatches.addAll(filterValidMTEs(mEnergyHatches)); + return tHatches; + } + + @Override + public boolean drainEnergyInput(long aEU) { + return ExoticEnergyInputHelper.drainEnergy(aEU, getExoticAndNormalEnergyHatchList()); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + + final IGregTechTileEntity tileEntity = getBaseMetaTileEntity(); + if (tileEntity != null) { + if (tileEntity.isActive()) { + if (lEUt < 0) tag.setLong("energyUsage", getActualEnergyUsage()); + else tag.setLong("energyUsage", -lEUt * mEfficiency / 10000); + } + } + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getAverageInputVoltage()); + logic.setAvailableAmperage(getMaxInputAmps()); + logic.setAmperageOC(true); + } + + @Nonnull + @Override + protected CheckRecipeResult postCheckRecipe(@Nonnull CheckRecipeResult result, + @Nonnull ProcessingLogic processingLogic) { + return result; + } + + @Override + protected void setEnergyUsage(ProcessingLogic processingLogic) { + lEUt = processingLogic.getCalculatedEut(); + if (lEUt > 0) { + lEUt = (-lEUt); + } + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = 0; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); + } + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatch tHatch : getExoticAndNormalEnergyHatchList()) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + long voltage = getAverageInputVoltage(); + long amps = getMaxInputAmps(); + + return new String[] { + /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(getActualEnergyUsage()) + + EnumChatFormatting.RESET + + " EU/t", + /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(voltage) + + EnumChatFormatting.RESET + + " EU/t(*" + + amps + + " A)" + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + VN[GTUtility.getTier(voltage)] + + EnumChatFormatting.RESET, + /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + /* 6 */ StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %" }; + } + + @Override + public long getMaxInputVoltage() { + return ExoticEnergyInputHelper.getMaxInputVoltageMulti(getExoticAndNormalEnergyHatchList()); + } + + @Override + public long getAverageInputVoltage() { + return ExoticEnergyInputHelper.getAverageInputVoltageMulti(getExoticAndNormalEnergyHatchList()); + } + + @Override + public long getMaxInputAmps() { + return ExoticEnergyInputHelper.getMaxWorkingInputAmpsMulti(getExoticAndNormalEnergyHatchList()); + } + + @Override + public long getMaxInputEu() { + return ExoticEnergyInputHelper.getTotalEuMulti(getExoticAndNormalEnergyHatchList()); + } + + @Override + public void clearHatches() { + super.clearHatches(); + mExoticEnergyHatches.clear(); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEFilterBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEFilterBase.java new file mode 100644 index 0000000000..32e224e50f --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEFilterBase.java @@ -0,0 +1,104 @@ +package gregtech.api.metatileentity.implementations; + +import net.minecraft.nbt.NBTTagCompound; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.util.GT_TooltipDataCache; + +public abstract class MTEFilterBase extends MTEBuffer { + + private static final String INVERT_FILTER_TOOLTIP = "GT5U.machines.invert_filter.tooltip"; + protected static final int FILTER_SLOT_INDEX = 9; + protected static final int NUM_INVENTORY_SLOTS = 9; + private static final String EMIT_REDSTONE_GRADUALLY_TOOLTIP = "GT5U" + ".machines.emit_redstone_gradually.tooltip"; + protected boolean invertFilter = false; + + public MTEFilterBase(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String aDescription) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); + } + + public MTEFilterBase(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String[] aDescription) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); + } + + public MTEFilterBase(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEFilterBase(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex < NUM_INVENTORY_SLOTS; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("bInvertFilter", this.invertFilter); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.invertFilter = aNBT.getBoolean("bInvertFilter"); + } + + @Override + protected int getRedstoneOutput() { + if (!bRedstoneIfFull) { + return 0; + } + int redstoneOutput = getEmptySlots(); + if (!bInvert) redstoneOutput = NUM_INVENTORY_SLOTS - redstoneOutput; + return redstoneOutput; + } + + private int getEmptySlots() { + int emptySlots = 0; + for (int i = 0; i < NUM_INVENTORY_SLOTS; i++) { + if (mInventory[i] == null) ++emptySlots; + } + return emptySlots; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + addSortStacksButton(builder); + addEmitRedstoneGraduallyButton(builder); + addInvertRedstoneButton(builder); + addInvertFilterButton(builder); + } + + private void addEmitRedstoneGraduallyButton(ModularWindow.Builder builder) { + builder.widget( + createToggleButton( + () -> bRedstoneIfFull, + val -> bRedstoneIfFull = val, + GTUITextures.OVERLAY_BUTTON_EMIT_REDSTONE, + this::getEmitRedstoneGraduallyButtonTooltip).setUpdateTooltipEveryTick(true)); + } + + private GT_TooltipDataCache.TooltipData getEmitRedstoneGraduallyButtonTooltip() { + return mTooltipCache + .getUncachedTooltipData(EMIT_REDSTONE_GRADUALLY_TOOLTIP, getEmptySlots(), getRedstoneOutput()); + } + + private void addInvertFilterButton(ModularWindow.Builder builder) { + builder.widget( + createToggleButton( + () -> invertFilter, + val -> invertFilter = val, + GTUITextures.OVERLAY_BUTTON_INVERT_FILTER, + () -> mTooltipCache.getData(INVERT_FILTER_TOOLTIP))); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEFluid.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEFluid.java new file mode 100644 index 0000000000..ddc0e28723 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEFluid.java @@ -0,0 +1,971 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.ALL_VALID_SIDES; +import static gregtech.api.enums.GTValues.D1; +import static gregtech.api.enums.Mods.TinkerConstruct; +import static gregtech.api.enums.Mods.Translocator; +import static gregtech.api.metatileentity.implementations.MTEFluid.Border.BOTTOM; +import static gregtech.api.metatileentity.implementations.MTEFluid.Border.LEFT; +import static gregtech.api.metatileentity.implementations.MTEFluid.Border.RIGHT; +import static gregtech.api.metatileentity.implementations.MTEFluid.Border.TOP; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; +import static net.minecraftforge.common.util.ForgeDirection.DOWN; +import static net.minecraftforge.common.util.ForgeDirection.EAST; +import static net.minecraftforge.common.util.ForgeDirection.NORTH; +import static net.minecraftforge.common.util.ForgeDirection.SOUTH; +import static net.minecraftforge.common.util.ForgeDirection.UP; +import static net.minecraftforge.common.util.ForgeDirection.WEST; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import org.apache.commons.lang3.tuple.MutableTriple; + +import cpw.mods.fml.common.Optional; +import gregtech.GTMod; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Mods; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.ParticleFX; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.enums.ToolModes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; +import gregtech.common.GTClient; +import gregtech.common.config.other.ConfigGeneral; +import gregtech.common.covers.CoverDrain; +import gregtech.common.covers.CoverFluidRegulator; +import gregtech.common.covers.CoverInfo; + +public class MTEFluid extends MetaPipeEntity { + + protected static final EnumMap> FACE_BORDER_MAP = new EnumMap<>( + ForgeDirection.class); + + static { + FACE_BORDER_MAP.put(DOWN, borderMap(NORTH, SOUTH, EAST, WEST)); + FACE_BORDER_MAP.put(UP, borderMap(NORTH, SOUTH, WEST, EAST)); + FACE_BORDER_MAP.put(NORTH, borderMap(UP, DOWN, EAST, WEST)); + FACE_BORDER_MAP.put(SOUTH, borderMap(UP, DOWN, WEST, EAST)); + FACE_BORDER_MAP.put(WEST, borderMap(UP, DOWN, NORTH, SOUTH)); + FACE_BORDER_MAP.put(EAST, borderMap(UP, DOWN, SOUTH, NORTH)); + } + + protected static final Map RESTR_TEXTURE_MAP = new HashMap<>(); + + static { + RESTR_TEXTURE_MAP.put(TOP.mask, Textures.BlockIcons.PIPE_RESTRICTOR_UP); + RESTR_TEXTURE_MAP.put(BOTTOM.mask, Textures.BlockIcons.PIPE_RESTRICTOR_DOWN); + RESTR_TEXTURE_MAP.put(TOP.mask | BOTTOM.mask, Textures.BlockIcons.PIPE_RESTRICTOR_UD); + RESTR_TEXTURE_MAP.put(LEFT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_LEFT); + RESTR_TEXTURE_MAP.put(TOP.mask | LEFT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_UL); + RESTR_TEXTURE_MAP.put(BOTTOM.mask | LEFT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_DL); + RESTR_TEXTURE_MAP.put(TOP.mask | BOTTOM.mask | LEFT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_NR); + RESTR_TEXTURE_MAP.put(RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_RIGHT); + RESTR_TEXTURE_MAP.put(TOP.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_UR); + RESTR_TEXTURE_MAP.put(BOTTOM.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_DR); + RESTR_TEXTURE_MAP.put(TOP.mask | BOTTOM.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_NL); + RESTR_TEXTURE_MAP.put(LEFT.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_LR); + RESTR_TEXTURE_MAP.put(TOP.mask | LEFT.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_ND); + RESTR_TEXTURE_MAP.put(BOTTOM.mask | LEFT.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR_NU); + RESTR_TEXTURE_MAP.put(TOP.mask | BOTTOM.mask | LEFT.mask | RIGHT.mask, Textures.BlockIcons.PIPE_RESTRICTOR); + } + + public final float mThickNess; + public final Materials mMaterial; + public final int mCapacity, mHeatResistance, mPipeAmount; + public final boolean mGasProof; + public final FluidStack[] mFluids; + public byte mLastReceivedFrom = 0, oLastReceivedFrom = 0; + /** + * Bitmask for whether disable fluid input form each side. + */ + public byte mDisableInput = 0; + + public MTEFluid(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, int aCapacity, + int aHeatResistance, boolean aGasProof) { + this(aID, aName, aNameRegional, aThickNess, aMaterial, aCapacity, aHeatResistance, aGasProof, 1); + } + + public MTEFluid(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, int aCapacity, + int aHeatResistance, boolean aGasProof, int aFluidTypes) { + super(aID, aName, aNameRegional, 0, false); + mThickNess = aThickNess; + mMaterial = aMaterial; + mCapacity = aCapacity; + mGasProof = aGasProof; + mHeatResistance = aHeatResistance; + mPipeAmount = aFluidTypes; + mFluids = new FluidStack[mPipeAmount]; + addInfo(aID); + } + + public MTEFluid(String aName, float aThickNess, Materials aMaterial, int aCapacity, int aHeatResistance, + boolean aGasProof, int aFluidTypes) { + super(aName, 0); + mThickNess = aThickNess; + mMaterial = aMaterial; + mCapacity = aCapacity; + mGasProof = aGasProof; + mHeatResistance = aHeatResistance; + mPipeAmount = aFluidTypes; + mFluids = new FluidStack[mPipeAmount]; + } + + @Override + public byte getTileEntityBaseType() { + return (byte) (mMaterial == null ? 4 : (byte) (4) + Math.max(0, Math.min(3, mMaterial.mToolQuality))); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEFluid(mName, mThickNess, mMaterial, mCapacity, mHeatResistance, mGasProof, mPipeAmount); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, + int colorIndex, boolean aConnected, boolean redstoneLevel) { + if (side == ForgeDirection.UNKNOWN) return Textures.BlockIcons.ERROR_RENDERING; + final float tThickNess = getThickNess(); + if (mDisableInput == 0) + return new ITexture[] { aConnected ? getBaseTexture(tThickNess, mPipeAmount, mMaterial, colorIndex) + : TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], + Dyes.getModulation(colorIndex, mMaterial.mRGBa)) }; + int borderMask = 0; + for (Border border : Border.values()) { + if (isInputDisabledAtSide(getSideAtBorder(side, border))) borderMask |= border.mask; + } + + return new ITexture[] { aConnected ? getBaseTexture(tThickNess, mPipeAmount, mMaterial, colorIndex) + : TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], + Dyes.getModulation(colorIndex, mMaterial.mRGBa)), + getRestrictorTexture(borderMask) }; + } + + protected static ITexture getBaseTexture(float aThickNess, int aPipeAmount, Materials aMaterial, int colorIndex) { + if (aPipeAmount >= 9) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeNonuple.mTextureIndex], + Dyes.getModulation(colorIndex, aMaterial.mRGBa)); + if (aPipeAmount >= 4) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeQuadruple.mTextureIndex], + Dyes.getModulation(colorIndex, aMaterial.mRGBa)); + if (aThickNess < 0.124F) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], + Dyes.getModulation(colorIndex, aMaterial.mRGBa)); + if (aThickNess < 0.374F) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeTiny.mTextureIndex], + Dyes.getModulation(colorIndex, aMaterial.mRGBa)); + if (aThickNess < 0.499F) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeSmall.mTextureIndex], + Dyes.getModulation(colorIndex, aMaterial.mRGBa)); + if (aThickNess < 0.749F) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeMedium.mTextureIndex], + Dyes.getModulation(colorIndex, aMaterial.mRGBa)); + if (aThickNess < 0.874F) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeLarge.mTextureIndex], + Dyes.getModulation(colorIndex, aMaterial.mRGBa)); + return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeHuge.mTextureIndex], + Dyes.getModulation(colorIndex, aMaterial.mRGBa)); + } + + protected static ITexture getRestrictorTexture(int borderMask) { + final IIconContainer restrictorIcon = RESTR_TEXTURE_MAP.get(borderMask); + return restrictorIcon != null ? TextureFactory.of(restrictorIcon) : null; + } + + @Override + public void onValueUpdate(byte aValue) { + mDisableInput = aValue; + } + + @Override + public byte getUpdateData() { + return mDisableInput; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return false; + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public final boolean renderInside(ForgeDirection side) { + return false; + } + + @Override + public int getProgresstime() { + return getFluidAmount(); + } + + @Override + public int maxProgresstime() { + return getCapacity(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + for (int i = 0; i < mPipeAmount; i++) if (mFluids[i] != null) + aNBT.setTag("mFluid" + (i == 0 ? "" : i), mFluids[i].writeToNBT(new NBTTagCompound())); + aNBT.setByte("mLastReceivedFrom", mLastReceivedFrom); + if (GTMod.gregtechproxy.gt6Pipe) { + aNBT.setByte("mConnections", mConnections); + aNBT.setByte("mDisableInput", mDisableInput); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + for (int i = 0; i < mPipeAmount; i++) + mFluids[i] = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid" + (i == 0 ? "" : i))); + mLastReceivedFrom = aNBT.getByte("mLastReceivedFrom"); + if (GTMod.gregtechproxy.gt6Pipe) { + mConnections = aNBT.getByte("mConnections"); + mDisableInput = aNBT.getByte("mDisableInput"); + } + } + + @Override + public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity aEntity) { + if ((((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections & -128) == 0 + && aEntity instanceof EntityLivingBase) { + for (FluidStack tFluid : mFluids) { + if (tFluid != null) { + final int tTemperature = tFluid.getFluid() + .getTemperature(tFluid); + if (tTemperature > 320 + && !isCoverOnSide((BaseMetaPipeEntity) getBaseMetaTileEntity(), (EntityLivingBase) aEntity)) { + GTUtility.applyHeatDamage((EntityLivingBase) aEntity, (tTemperature - 300) / 50.0F); + break; + } else if (tTemperature < 260 + && !isCoverOnSide((BaseMetaPipeEntity) getBaseMetaTileEntity(), (EntityLivingBase) aEntity)) { + GTUtility.applyFrostDamage((EntityLivingBase) aEntity, (270 - tTemperature) / 25.0F); + break; + } + } + } + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && aTick % 5 == 0) { + mLastReceivedFrom &= 63; + if (mLastReceivedFrom == 63) { + mLastReceivedFrom = 0; + } + + if (!GTMod.gregtechproxy.gt6Pipe || mCheckConnections) checkConnections(); + + final boolean shouldDistribute = (oLastReceivedFrom == mLastReceivedFrom); + for (int i = 0, j = aBaseMetaTileEntity.getRandomNumber(mPipeAmount); i < mPipeAmount; i++) { + final int index = (i + j) % mPipeAmount; + if (mFluids[index] != null && mFluids[index].amount <= 0) mFluids[index] = null; + if (mFluids[index] == null) continue; + + if (checkEnvironment(index, aBaseMetaTileEntity)) return; + + if (shouldDistribute) { + distributeFluid(index, aBaseMetaTileEntity); + mLastReceivedFrom = 0; + } + } + + oLastReceivedFrom = mLastReceivedFrom; + } + } + + private boolean checkEnvironment(int index, IGregTechTileEntity aBaseMetaTileEntity) { + // Check for hot liquids that melt the pipe or gasses that escape and burn/freeze people + final FluidStack tFluid = mFluids[index]; + + if (tFluid != null && tFluid.amount > 0) { + final int tTemperature = tFluid.getFluid() + .getTemperature(tFluid); + if (tTemperature > mHeatResistance) { + if (aBaseMetaTileEntity.getRandomNumber(100) == 0) { + // Poof + GTLog.exp.println( + "Set Pipe to Fire due to to low heat resistance at " + aBaseMetaTileEntity.getXCoord() + + " | " + + aBaseMetaTileEntity.getYCoord() + + " | " + + aBaseMetaTileEntity.getZCoord() + + " DIMID: " + + aBaseMetaTileEntity.getWorld().provider.dimensionId); + aBaseMetaTileEntity.setToFire(); + return true; + } + // Mmhmm, Fire + aBaseMetaTileEntity.setOnFire(); + GTLog.exp.println( + "Set Blocks around Pipe to Fire due to to low heat resistance at " + aBaseMetaTileEntity.getXCoord() + + " | " + + aBaseMetaTileEntity.getYCoord() + + " | " + + aBaseMetaTileEntity.getZCoord() + + " DIMID: " + + aBaseMetaTileEntity.getWorld().provider.dimensionId); + } + if (!mGasProof && tFluid.getFluid() + .isGaseous(tFluid)) { + tFluid.amount -= 5; + sendSound((byte) 9); + if (tTemperature > 320) { + try { + for (EntityLivingBase tLiving : getBaseMetaTileEntity().getWorld() + .getEntitiesWithinAABB( + EntityLivingBase.class, + AxisAlignedBB.getBoundingBox( + getBaseMetaTileEntity().getXCoord() - 2, + getBaseMetaTileEntity().getYCoord() - 2, + getBaseMetaTileEntity().getZCoord() - 2, + getBaseMetaTileEntity().getXCoord() + 3, + getBaseMetaTileEntity().getYCoord() + 3, + getBaseMetaTileEntity().getZCoord() + 3))) { + GTUtility.applyHeatDamage(tLiving, (tTemperature - 300) / 25.0F); + } + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + } else if (tTemperature < 260) { + try { + for (EntityLivingBase tLiving : getBaseMetaTileEntity().getWorld() + .getEntitiesWithinAABB( + EntityLivingBase.class, + AxisAlignedBB.getBoundingBox( + getBaseMetaTileEntity().getXCoord() - 2, + getBaseMetaTileEntity().getYCoord() - 2, + getBaseMetaTileEntity().getZCoord() - 2, + getBaseMetaTileEntity().getXCoord() + 3, + getBaseMetaTileEntity().getYCoord() + 3, + getBaseMetaTileEntity().getZCoord() + 3))) { + GTUtility.applyFrostDamage(tLiving, (270 - tTemperature) / 12.5F); + } + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + } + } + if (tFluid.amount <= 0) mFluids[index] = null; + } + return false; + } + + private void distributeFluid(int index, IGregTechTileEntity aBaseMetaTileEntity) { + final FluidStack tFluid = mFluids[index]; + if (tFluid == null) return; + + // Tank, From, Amount to receive + final List> tTanks = new ArrayList<>(); + final int amount = tFluid.amount; + final byte tOffset = (byte) getBaseMetaTileEntity().getRandomNumber(6); + for (final byte i : ALL_VALID_SIDES) { + // Get a list of tanks accepting fluids, and what side they're on + final ForgeDirection side = ForgeDirection.getOrientation((i + tOffset) % 6); + final ForgeDirection oppositeSide = side.getOpposite(); + final IFluidHandler tTank = aBaseMetaTileEntity.getITankContainerAtSide(side); + final IGregTechTileEntity gTank = tTank instanceof IGregTechTileEntity ? (IGregTechTileEntity) tTank : null; + + if (isConnectedAtSide(side) && tTank != null + && (mLastReceivedFrom & side.flag) == 0 + && getBaseMetaTileEntity().getCoverInfoAtSide(side) + .letsFluidOut(tFluid.getFluid()) + && (gTank == null || gTank.getCoverInfoAtSide(oppositeSide) + .letsFluidIn(tFluid.getFluid()))) { + if (tTank.fill(oppositeSide, tFluid, false) > 0) { + tTanks.add(new MutableTriple<>(tTank, oppositeSide, 0)); + } + tFluid.amount = amount; // Because some mods do actually modify input fluid stack + } + } + + // How much of this fluid is available for distribution? + final double tAmount = Math.max(1, Math.min(mCapacity * 10, tFluid.amount)); + + final FluidStack maxFluid = tFluid.copy(); + maxFluid.amount = Integer.MAX_VALUE; + + double availableCapacity = 0; + // Calculate available capacity for distribution from all tanks + for (final MutableTriple tEntry : tTanks) { + tEntry.right = tEntry.left.fill(tEntry.middle, maxFluid, false); + availableCapacity += tEntry.right; + } + + // Now distribute + for (final MutableTriple tEntry : tTanks) { + // Distribue fluids based on percentage available space at destination + if (availableCapacity > tAmount) + tEntry.right = (int) Math.floor(tEntry.right * tAmount / availableCapacity); + + // If the percent is not enough to give at least 1L, try to give 1L + if (tEntry.right == 0) tEntry.right = (int) Math.min(1, tAmount); + + if (tEntry.right <= 0) continue; + + final int tFilledAmount = tEntry.left + .fill(tEntry.middle, drainFromIndex(tEntry.right, false, index), false); + + if (tFilledAmount > 0) tEntry.left.fill(tEntry.middle, drainFromIndex(tFilledAmount, true, index), true); + + if (mFluids[index] == null || mFluids[index].amount <= 0) return; + } + } + + public void connectPipeOnSide(ForgeDirection side, EntityPlayer entityPlayer) { + if (!isConnectedAtSide(side)) { + if (connect(side) > 0) GTUtility.sendChatToPlayer(entityPlayer, GTUtility.trans("214", "Connected")); + } else { + disconnect(side); + GTUtility.sendChatToPlayer(entityPlayer, GTUtility.trans("215", "Disconnected")); + } + } + + public void blockPipeOnSide(ForgeDirection side, EntityPlayer entityPlayer, byte mask) { + if (isInputDisabledAtSide(side)) { + mDisableInput &= ~mask; + GTUtility.sendChatToPlayer(entityPlayer, GTUtility.trans("212", "Input enabled")); + if (!isConnectedAtSide(side)) connect(side); + } else { + mDisableInput |= mask; + GTUtility.sendChatToPlayer(entityPlayer, GTUtility.trans("213", "Input disabled")); + } + } + + @Override + public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer, + float aX, float aY, float aZ, ItemStack aTool) { + + if (GTMod.gregtechproxy.gt6Pipe) { + final int mode = MetaGeneratedTool.getToolMode(aTool); + IGregTechTileEntity currentPipeBase = getBaseMetaTileEntity(); + MTEFluid currentPipe = (MTEFluid) currentPipeBase.getMetaTileEntity(); + final ForgeDirection tSide = GTUtility.determineWrenchingSide(side, aX, aY, aZ); + final byte tMask = (byte) (tSide.flag); + + if (mode == ToolModes.REGULAR.get()) { + if (entityPlayer.isSneaking()) { + currentPipe.blockPipeOnSide(tSide, entityPlayer, tMask); + } else currentPipe.connectPipeOnSide(tSide, entityPlayer); + return true; + } + + if (mode == ToolModes.WRENCH_LINE.get()) { + + boolean initialState = entityPlayer.isSneaking() ? currentPipe.isInputDisabledAtSide(tSide) + : currentPipe.isConnectedAtSide(tSide); + + boolean wasActionPerformed = false; + + int limit = ConfigGeneral.pipeWrenchingChainRange; + for (int connected = 0; connected < limit; connected++) { + + TileEntity nextPipeBaseTile = currentPipeBase.getTileEntityAtSide(tSide); + + // if next tile doesn't exist or if next tile is not GT tile + if (!(nextPipeBaseTile instanceof IGregTechTileEntity nextPipeBase)) { + return wasActionPerformed; + } + + // if next tile is wrong color + if (!currentPipe.connectableColor(nextPipeBaseTile)) { + return wasActionPerformed; + } + + MTEFluid nextPipe = nextPipeBase.getMetaTileEntity() instanceof MTEFluid + ? (MTEFluid) nextPipeBase.getMetaTileEntity() + : null; + + // if next tile entity is not a pipe + if (nextPipe == null) { + return wasActionPerformed; + } + + // if pipes are same size + if (mPipeAmount != nextPipe.mPipeAmount) { + return wasActionPerformed; + } + + // making sure next pipe has same fluid + for (int i = 0; i < mPipeAmount; i++) { + if (mFluids[i] != null && nextPipe.mFluids[i] != null) { + if (!mFluids[i].isFluidEqual(nextPipe.mFluids[i])) { + return wasActionPerformed; + } + } else if (mFluids[i] != nextPipe.mFluids[i]) { + return wasActionPerformed; + } + } + + boolean currentState = entityPlayer.isSneaking() ? currentPipe.isInputDisabledAtSide(tSide) + : currentPipe.isConnectedAtSide(tSide); + + /* + * Making sure next pipe will have same action applied to it + * e.g. Connecting pipe won`t trigger disconnect if next pipe is already connected + */ + if (currentState != initialState) { + return wasActionPerformed; + } + + if (entityPlayer.isSneaking()) { + currentPipe.blockPipeOnSide(tSide, entityPlayer, tMask); + } else currentPipe.connectPipeOnSide(tSide, entityPlayer); + + wasActionPerformed = true; + + currentPipeBase = (IGregTechTileEntity) nextPipeBase; + currentPipe = nextPipe; + + } + return wasActionPerformed; + } + } + return false; + } + + @Override + public boolean letsIn(CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return coverBehavior.letsFluidIn(side, aCoverID, aCoverVariable, null, aTileEntity); + } + + @Override + public boolean letsOut(CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return coverBehavior.letsFluidOut(side, aCoverID, aCoverVariable, null, aTileEntity); + } + + @Override + public boolean letsIn(CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, + ISerializableObject aCoverVariable, ICoverable aTileEntity) { + return coverBehavior.letsFluidIn(side, aCoverID, aCoverVariable, null, aTileEntity); + } + + @Override + public boolean letsOut(CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, + ISerializableObject aCoverVariable, ICoverable aTileEntity) { + return coverBehavior.letsFluidOut(side, aCoverID, aCoverVariable, null, aTileEntity); + } + + @Override + public boolean letsIn(CoverInfo coverInfo) { + return coverInfo.letsFluidIn(null); + } + + @Override + public boolean letsOut(CoverInfo coverInfo) { + return coverInfo.letsFluidOut(null); + } + + @Override + public boolean canConnect(ForgeDirection side, TileEntity tileEntity) { + if (tileEntity == null) return false; + + final ForgeDirection tSide = side.getOpposite(); + final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity(); + if (baseMetaTile == null) return false; + + final CoverBehaviorBase coverBehavior = baseMetaTile.getCoverBehaviorAtSideNew(side); + final IGregTechTileEntity gTileEntity = (tileEntity instanceof IGregTechTileEntity) + ? (IGregTechTileEntity) tileEntity + : null; + + if (coverBehavior instanceof CoverDrain || (TinkerConstruct.isModLoaded() && isTConstructFaucet(tileEntity))) + return true; + + final IFluidHandler fTileEntity = (tileEntity instanceof IFluidHandler) ? (IFluidHandler) tileEntity : null; + + if (fTileEntity != null) { + final FluidTankInfo[] tInfo = fTileEntity.getTankInfo(tSide); + if (tInfo != null) { + return tInfo.length > 0 || (Translocator.isModLoaded() && isTranslocator(tileEntity)) + || gTileEntity != null + && gTileEntity.getCoverBehaviorAtSideNew(tSide) instanceof CoverFluidRegulator; + } + } + return false; + } + + @Optional.Method(modid = Mods.Names.TINKER_CONSTRUCT) + private boolean isTConstructFaucet(TileEntity tTileEntity) { + // Tinker Construct Faucets return a null tank info, so check the class + return tTileEntity instanceof tconstruct.smeltery.logic.FaucetLogic; + } + + @Optional.Method(modid = Mods.Names.TRANSLOCATOR) + private boolean isTranslocator(TileEntity tTileEntity) { + // Translocators return a TankInfo, but it's of 0 length - so check the class if we see this pattern + return tTileEntity instanceof codechicken.translocator.TileLiquidTranslocator; + } + + @Override + public boolean getGT6StyleConnection() { + // Yes if GT6 pipes are enabled + return GTMod.gregtechproxy.gt6Pipe; + } + + @Override + public void doSound(byte aIndex, double aX, double aY, double aZ) { + super.doSound(aIndex, aX, aY, aZ); + if (aIndex == 9) { + GTUtility.doSoundAtClient(SoundResource.RANDOM_FIZZ, 5, 1.0F, aX, aY, aZ); + + new ParticleEventBuilder().setIdentifier(ParticleFX.CLOUD) + .setWorld(getBaseMetaTileEntity().getWorld()) + .times( + 6, + (x, i) -> x + .setMotion( + ForgeDirection.getOrientation(i).offsetX / 5.0, + ForgeDirection.getOrientation(i).offsetY / 5.0, + ForgeDirection.getOrientation(i).offsetZ / 5.0) + .setPosition( + aX - 0.5 + XSTR_INSTANCE.nextFloat(), + aY - 0.5 + XSTR_INSTANCE.nextFloat(), + aZ - 0.5 + XSTR_INSTANCE.nextFloat()) + .run()); + } + } + + @Override + public final int getCapacity() { + return mCapacity * 20 * mPipeAmount; + } + + @Override + public FluidTankInfo getInfo() { + for (FluidStack tFluid : mFluids) { + if (tFluid != null) return new FluidTankInfo(tFluid, mCapacity * 20); + } + return new FluidTankInfo(null, mCapacity * 20); + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection side) { + if (getCapacity() <= 0 && !getBaseMetaTileEntity().hasSteamEngineUpgrade()) return new FluidTankInfo[] {}; + ArrayList tList = new ArrayList<>(); + for (FluidStack tFluid : mFluids) tList.add(new FluidTankInfo(tFluid, mCapacity * 20)); + return tList.toArray(new FluidTankInfo[mPipeAmount]); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public final FluidStack getFluid() { + for (FluidStack tFluid : mFluids) { + if (tFluid != null) return tFluid; + } + return null; + } + + @Override + public final int getFluidAmount() { + int rAmount = 0; + for (FluidStack tFluid : mFluids) { + if (tFluid != null) rAmount += tFluid.amount; + } + return rAmount; + } + + @Override + public final int fill_default(ForgeDirection side, FluidStack aFluid, boolean doFill) { + if (aFluid == null || aFluid.getFluid() + .getID() <= 0) return 0; + + int index = -1; + for (int i = 0; i < mPipeAmount; i++) { + if (mFluids[i] != null && mFluids[i].isFluidEqual(aFluid)) { + index = i; + break; + } else if ((mFluids[i] == null || mFluids[i].getFluid() + .getID() <= 0) && index < 0) { + index = i; + } + } + + return fill_default_intoIndex(side, aFluid, doFill, index); + } + + private int fill_default_intoIndex(ForgeDirection side, FluidStack aFluid, boolean doFill, int index) { + if (index < 0 || index >= mPipeAmount) return 0; + if (aFluid == null || aFluid.getFluid() + .getID() <= 0) return 0; + + final int ordinalSide = side.ordinal(); + + if (mFluids[index] == null || mFluids[index].getFluid() + .getID() <= 0) { + if (aFluid.amount * mPipeAmount <= getCapacity()) { + if (doFill) { + mFluids[index] = aFluid.copy(); + mLastReceivedFrom |= (1 << ordinalSide); + } + return aFluid.amount; + } + if (doFill) { + mFluids[index] = aFluid.copy(); + mLastReceivedFrom |= (1 << ordinalSide); + mFluids[index].amount = getCapacity() / mPipeAmount; + } + return getCapacity() / mPipeAmount; + } + + if (!mFluids[index].isFluidEqual(aFluid)) return 0; + + final int space = getCapacity() / mPipeAmount - mFluids[index].amount; + if (aFluid.amount <= space) { + if (doFill) { + mFluids[index].amount += aFluid.amount; + mLastReceivedFrom |= (1 << ordinalSide); + } + return aFluid.amount; + } + if (doFill) { + mFluids[index].amount = getCapacity() / mPipeAmount; + mLastReceivedFrom |= (1 << ordinalSide); + } + return space; + } + + @Override + public final FluidStack drain(int maxDrain, boolean doDrain) { + FluidStack drained; + for (int i = 0; i < mPipeAmount; i++) { + if ((drained = drainFromIndex(maxDrain, doDrain, i)) != null) return drained; + } + return null; + } + + private FluidStack drainFromIndex(int maxDrain, boolean doDrain, int index) { + if (index < 0 || index >= mPipeAmount) return null; + if (mFluids[index] == null) return null; + if (mFluids[index].amount <= 0) { + mFluids[index] = null; + return null; + } + + int used = maxDrain; + if (mFluids[index].amount < used) used = mFluids[index].amount; + + if (doDrain) { + mFluids[index].amount -= used; + } + + final FluidStack drained = mFluids[index].copy(); + drained.amount = used; + + if (mFluids[index].amount <= 0) { + mFluids[index] = null; + } + + return drained; + } + + @Override + public int getTankPressure() { + return getFluidAmount() - (getCapacity() / 2); + } + + @Override + public String[] getDescription() { + List descriptions = new ArrayList<>(); + descriptions.add( + EnumChatFormatting.BLUE + "Fluid Capacity: %%%" + + GTUtility.formatNumbers(mCapacity * 20L) + + "%%% L/sec" + + EnumChatFormatting.GRAY); + descriptions.add( + EnumChatFormatting.RED + "Heat Limit: %%%" + + GTUtility.formatNumbers(mHeatResistance) + + "%%% K" + + EnumChatFormatting.GRAY); + if (!mGasProof) { + descriptions.add(EnumChatFormatting.DARK_GREEN + "Cannot handle gas" + EnumChatFormatting.GRAY); + } + if (mPipeAmount != 1) { + descriptions.add(EnumChatFormatting.AQUA + "Pipe Amount: %%%" + mPipeAmount + EnumChatFormatting.GRAY); + } + return descriptions.toArray(new String[0]); + } + + @Override + public float getThickNess() { + if (GTMod.instance.isClientSide() && (GTClient.hideValue & 0x1) != 0) return 0.0625F; + return mThickNess; + } + + @Override + public boolean isLiquidInput(ForgeDirection side) { + return !isInputDisabledAtSide(side); + } + + @Override + public boolean isLiquidOutput(ForgeDirection side) { + return true; + } + + public boolean isInputDisabledAtSide(ForgeDirection side) { + return (mDisableInput & side.flag) != 0; + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + if (GTMod.instance.isClientSide() && (GTClient.hideValue & 0x2) != 0) + return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1); + else return getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + } + + private AxisAlignedBB getActualCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + final float tSpace = (1f - mThickNess) / 2; + float tSide0 = tSpace; + float tSide1 = 1f - tSpace; + float tSide2 = tSpace; + float tSide3 = 1f - tSpace; + float tSide4 = tSpace; + float tSide5 = 1f - tSpace; + + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.DOWN) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) { + tSide2 = tSide4 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide1 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) { + tSide0 = tSide4 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide1 = tSide3 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) { + tSide0 = tSide2 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + + final byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; + if ((tConn & ForgeDirection.DOWN.flag) != 0) tSide0 = 0f; + if ((tConn & ForgeDirection.UP.flag) != 0) tSide1 = 1f; + if ((tConn & ForgeDirection.NORTH.flag) != 0) tSide2 = 0f; + if ((tConn & ForgeDirection.SOUTH.flag) != 0) tSide3 = 1f; + if ((tConn & ForgeDirection.WEST.flag) != 0) tSide4 = 0f; + if ((tConn & ForgeDirection.EAST.flag) != 0) tSide5 = 1f; + + return AxisAlignedBB + .getBoundingBox(aX + tSide4, aY + tSide0, aZ + tSide2, aX + tSide5, aY + tSide1, aZ + tSide3); + } + + @Override + public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, + List outputAABB, Entity collider) { + super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); + if (GTMod.instance.isClientSide() && (GTClient.hideValue & 0x2) != 0) { + final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb); + } + } + + @Override + public FluidStack drain(ForgeDirection side, FluidStack aFluid, boolean doDrain) { + if (aFluid == null) return null; + for (int i = 0; i < mFluids.length; ++i) { + final FluidStack f = mFluids[i]; + if (f == null || !f.isFluidEqual(aFluid)) continue; + return drainFromIndex(aFluid.amount, doDrain, i); + } + return null; + } + + private static EnumMap borderMap(ForgeDirection topSide, ForgeDirection bottomSide, + ForgeDirection leftSide, ForgeDirection rightSide) { + final EnumMap sideMap = new EnumMap<>(Border.class); + sideMap.put(TOP, topSide); + sideMap.put(BOTTOM, bottomSide); + sideMap.put(LEFT, leftSide); + sideMap.put(RIGHT, rightSide); + return sideMap; + } + + protected static ForgeDirection getSideAtBorder(ForgeDirection side, Border border) { + return FACE_BORDER_MAP.get(side) + .get(border); + } + + protected enum Border { + + TOP(), + BOTTOM(), + LEFT(), + RIGHT(); + + public final int mask; + + Border() { + mask = 1 << this.ordinal(); + } + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java new file mode 100644 index 0000000000..ec000b6e9c --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEFrame.java @@ -0,0 +1,119 @@ +package gregtech.api.metatileentity.implementations; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; + +public class MTEFrame extends MetaPipeEntity { + + private static final String localizedDescFormat = GTLanguageManager + .addStringLocalization("gt.blockmachines.gt_frame.desc.format", "Just something you can put covers on."); + public final Materials mMaterial; + + public MTEFrame(int aID, String aName, String aNameRegional, Materials aMaterial) { + super(aID, aName, aNameRegional, 0); + mMaterial = aMaterial; + // Hide TileEntity frame in NEI, since we have the block version now that should always be used + codechicken.nei.api.API.hideItem(this.getStackForm(1)); + } + + public MTEFrame(String aName, Materials aMaterial) { + super(aName, 0); + mMaterial = aMaterial; + } + + @Override + public byte getTileEntityBaseType() { + return (byte) (mMaterial == null ? 4 : (byte) (4) + Math.max(0, Math.min(3, mMaterial.mToolQuality))); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEFrame(mName, mMaterial); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, int connections, + int colorIndex, boolean active, boolean redstoneLevel) { + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex], + Dyes.getModulation(colorIndex, mMaterial.mRGBa)) }; + } + + @Override + public String[] getDescription() { + return localizedDescFormat.split("\\R"); + } + + @Override + public final boolean isSimpleMachine() { + return true; + } + + @Override + public final boolean isFacingValid(ForgeDirection facing) { + return false; + } + + @Override + public final boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public final boolean renderInside(ForgeDirection side) { + return true; + } + + @Override + public final float getThickNess() { + return 1.0F; + } + + @Override + public final void saveNBTData(NBTTagCompound aNBT) { + /* Do nothing */ + } + + @Override + public final void loadNBTData(NBTTagCompound aNBT) { + /* Do nothing */ + } + + @Override + public final boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public final boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public int connect(ForgeDirection side) { + return 0; + } + + @Override + public void disconnect(ForgeDirection side) { + /* Do nothing */ + } + + @Override + public boolean isMachineBlockUpdateRecursive() { + return true; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatch.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatch.java new file mode 100644 index 0000000000..bd0b3b6f61 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatch.java @@ -0,0 +1,250 @@ +package gregtech.api.metatileentity.implementations; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import appeng.api.crafting.ICraftingIconProvider; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +/** + * Handles texture changes internally. No special calls are necessary other than updateTexture in add***ToMachineList. + */ +public abstract class MTEHatch extends MTEBasicTank implements ICraftingIconProvider { + + public enum ConnectionType { + CABLE, + WIRELESS, + LASER + } + + /** + * Uses new texture changing methods to avoid limitations of byte as texture index... + */ + @Deprecated + public byte mMachineBlock = 0; + + private byte mTexturePage = 0; + private byte actualTexture = 0; + + private ItemStack ae2CraftingIcon; + + public MTEHatch(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String aDescription, + ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEHatch(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, String[] aDescription, + ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEHatch(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEHatch(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public static int getSlots(int aTier) { + return aTier < 1 ? 1 : aTier == 1 ? 4 : aTier == 2 ? 9 : 16; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return new ITexture[0][0][0]; + } + + public abstract ITexture[] getTexturesActive(ITexture aBaseTexture); + + public abstract ITexture[] getTexturesInactive(ITexture aBaseTexture); + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + int texturePointer = (byte) (actualTexture & 0x7F); // just to be sure, from my testing the 8th bit cannot be + // set clientside + int textureIndex = texturePointer | (mTexturePage << 7); // Shift seven since one page is 128 textures! + try { + if (side != aFacing) { + if (textureIndex > 0) + return new ITexture[] { Textures.BlockIcons.casingTexturePages[mTexturePage][texturePointer] }; + else return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1] }; + } else { + if (textureIndex > 0) { + if (aActive) + return getTexturesActive(Textures.BlockIcons.casingTexturePages[mTexturePage][texturePointer]); + else return getTexturesInactive( + Textures.BlockIcons.casingTexturePages[mTexturePage][texturePointer]); + } else { + if (aActive) return getTexturesActive(Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1]); + else return getTexturesInactive(Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1]); + } + } + } catch (NullPointerException npe) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[0][0] }; + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByte("mMachineBlock", actualTexture); + aNBT.setByte("mTexturePage", mTexturePage); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + actualTexture = aNBT.getByte("mMachineBlock"); + mTexturePage = aNBT.getByte("mTexturePage"); + + if (mTexturePage != 0 && GTValues.GT.isServerSide()) actualTexture |= 0x80; // <- lets just hope no one needs + // the correct value for that on + // server + mMachineBlock = actualTexture; + } + + /** + * Sets texture with page and index, called on add to machine list + * + * @param id (page<<7)+index of the texture + */ + public final void updateTexture(int id) { + onValueUpdate((byte) id); + onTexturePageUpdate((byte) (id >> 7)); + } + + /** + * Sets the icon for the owning multiblock used for AE2 crafting display of attached interfaces, called on add to + * machine list + */ + public final void updateCraftingIcon(ItemStack icon) { + this.ae2CraftingIcon = icon; + } + + @Override + public ItemStack getMachineCraftingIcon() { + return this.ae2CraftingIcon; + } + + /** + * Some multiblocks restrict hatches by tier. This method allows hatches to specify custom tier used for + * structure check, while keeping {@link #mTier} for other uses. + * + * @return Tier used for multiblock structure + */ + public byte getTierForStructure() { + return mTier; + } + + /** + * Sets texture with page and index, rather unusable, but kept FFS + * + * @param page page of texure + * @param index index of texure + */ + @Deprecated + public final void updateTexture(byte page, byte index) { + onValueUpdate(index); + onTexturePageUpdate(page); + } + + @Override + public final void onValueUpdate(byte aValue) { + actualTexture = (byte) (aValue & 0x7F); + mMachineBlock = actualTexture; + mTexturePage = 0; + } + + /** + * Get the maximum amount of amperes to work with, which excludes the additional amps in for loss + * + * @return Working amps + */ + public long maxWorkingAmperesIn() { + return maxAmperesIn(); + } + + /** + * Get the type of connection this hatch allows + * + * @return Connection type + */ + public ConnectionType getConnectionType() { + return ConnectionType.CABLE; + } + + @Override + public final byte getUpdateData() { + return (byte) (actualTexture & 0x7F); + } + + public final void onTexturePageUpdate(byte aValue) { + mTexturePage = (byte) (aValue & 0x7F); + if (mTexturePage != 0 && getBaseMetaTileEntity().isServerSide()) { // just to be sure + mMachineBlock |= 0x80; // <- lets just hope no one needs the correct value for that on server + actualTexture = mMachineBlock; + } + // set last bit to allow working of the page reset-er to 0 in rare case when texture id is the same but page + // changes to 0 + } + + public final byte getTexturePage() { + return (byte) (mTexturePage & 0x7F); + } + + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return false; + } + + @Override + public boolean canTankBeEmptied() { + return false; + } + + @Override + public boolean displaysItemStack() { + return false; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { // in that method since it is usually + // not overriden, especially for + // hatches. + if (actualTexture != mMachineBlock) { // revert to page 0 on edition of the field - old code way + actualTexture = (byte) (mMachineBlock & 0x7F); + mMachineBlock = actualTexture; // clear last bit in mMachineBlock since now we are at page 0 after the + // direct field + // change + mTexturePage = 0; // assuming old code only supports page 0 + } + super.onPreTick(aBaseMetaTileEntity, aTick); + } + + // To change to other page -> use the setter method -> updateTexture + + public int getCircuitSlot() { + return -1; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchDataAccess.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchDataAccess.java new file mode 100644 index 0000000000..38c3102ff2 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchDataAccess.java @@ -0,0 +1,169 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DATA_ACCESS; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Predicate; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.AssemblyLineUtils; + +public class MTEHatchDataAccess extends MTEHatch implements IAddUIWidgets { + + private int timeout = 4; + + public MTEHatchDataAccess(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 16, + new String[] { "Data Access for Multiblocks", + "Adds " + (aTier == 4 ? 4 : 16) + " extra slots for Data Sticks" }); + } + + public MTEHatchDataAccess(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aTier == 4 ? 4 : 16, aDescription, aTextures); + } + + public MTEHatchDataAccess(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aTier == 4 ? 4 : 16, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_DATA_ACCESS) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_DATA_ACCESS) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + 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 MTEHatchDataAccess(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return mTier >= 8 && !aBaseMetaTileEntity.isActive(); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return mTier >= 8 && !aBaseMetaTileEntity.isActive(); + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isActive()) { + timeout--; + if (timeout <= 0) { + aBaseMetaTileEntity.setActive(false); + } + } + } + + public void setActive(boolean mActive) { + getBaseMetaTileEntity().setActive(mActive); + timeout = mActive ? 4 : 0; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.getByte("mSticksUpdated") != 1) { + for (int i = 0; i < getSizeInventory(); i++) { + AssemblyLineUtils.processDataStick(getStackInSlot(i)); + } + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + // reminder: remove this marker after many years + aNBT.setByte("mSticksUpdated", (byte) 1); + } + + @Override + public void setInventorySlotContents(int aIndex, ItemStack aStack) { + super.setInventorySlotContents(aIndex, aStack); + AssemblyLineUtils.processDataStick(aStack); + } + + public List getInventoryItems(Predicate filter) { + ArrayList items = new ArrayList<>(); + IGregTechTileEntity te = getBaseMetaTileEntity(); + for (int i = 0; i < te.getSizeInventory(); ++i) { + ItemStack slot = te.getStackInSlot(i); + if (slot != null) { + if (filter != null && filter.test(slot)) { + items.add(slot); + } + } + } + return items; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + if (mTier == 4) { + getBaseMetaTileEntity() + .add2by2Slots(builder, getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_CIRCUIT); + } else { + getBaseMetaTileEntity() + .add4by4Slots(builder, getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_CIRCUIT); + } + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchDynamo.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchDynamo.java new file mode 100644 index 0000000000..00f46fe9eb --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchDynamo.java @@ -0,0 +1,109 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; + +public class MTEHatchDynamo extends MTEHatch { + + public MTEHatchDynamo(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { "Generating electric Energy from Multiblocks", "Puts out up to 1 Amp" }); + } + + public MTEHatchDynamo(int aID, String aName, String aNameRegional, int aTier, String[] aDescription) { + super(aID, aName, aNameRegional, aTier, 0, aDescription); + } + + public MTEHatchDynamo(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + public MTEHatchDynamo(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 512; + } + + @Override + public long maxEUOutput() { + return V[mTier]; + } + + @Override + public long maxEUStore() { + return 512L + V[mTier + 1] * 2L; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchDynamo(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchEnergy.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchEnergy.java new file mode 100644 index 0000000000..12d22d3bc7 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchEnergy.java @@ -0,0 +1,123 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; + +public class MTEHatchEnergy extends MTEHatch { + + public MTEHatchEnergy(int aID, String aName, String aNameRegional, int aTier, String[] aDescription) { + super(aID, aName, aNameRegional, aTier, 0, aDescription); + } + + public MTEHatchEnergy(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { "Energy Injector for Multiblocks", "Accepts up to 2 Amps" }); + } + + public MTEHatchEnergy(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String[] aDescription, ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEHatchEnergy(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + public MTEHatchEnergy(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + public MTEHatchEnergy(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 512; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxEUStore() { + return 512L + V[mTier] * 8L; + } + + @Override + public long maxAmperesIn() { + return 2; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchEnergy(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchInput.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchInput.java new file mode 100644 index 0000000000..c660bcc8f8 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchInput.java @@ -0,0 +1,192 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.FLUID_IN_SIGN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_IN; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.GTMod; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTEHatchInput extends MTEHatch { + + public RecipeMap mRecipeMap = null; + + public MTEHatchInput(int aID, String aName, String aNameRegional, int aTier) { + this( + aID, + aName, + aNameRegional, + aTier, + new String[] { "Fluid Input for Multiblocks", + "Capacity: " + GTUtility.formatNumbers(8000L * (1L << aTier)) + "L" }); + } + + public MTEHatchInput(int aID, String aName, String aNameRegional, int aTier, String[] aDescription) { + this(aID, 3, aName, aNameRegional, aTier, aDescription); + } + + public MTEHatchInput(int aID, int aSlot, String aName, String aNameRegional, int aTier) { + this( + aID, + aSlot, + aName, + aNameRegional, + aTier, + new String[] { "Fluid Input for Multiblocks", "", "Can hold " + aSlot + " types of fluid." }); + mDescriptionArray[1] = "Capacity: " + GTUtility.formatNumbers(getCapacityPerTank(aTier, aSlot)) + "L"; + } + + public MTEHatchInput(int aID, int aSlot, String aName, String aNameRegional, int aTier, String[] aDescription) { + super(aID, aName, aNameRegional, aTier, aSlot, aDescription); + } + + public MTEHatchInput(int aID, String aName, String aNameRegional, int aTier, int allSlotCount, String[] strings) { + super(aID, aName, aNameRegional, aTier, allSlotCount, strings); + } + + public int getCapacityPerTank(int aTier, int aSlot) { + return (int) (8000L * (1L << aTier) / aSlot); + } + + public MTEHatchInput(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + public MTEHatchInput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + public MTEHatchInput(String aName, int aSlots, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aSlots, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(FLUID_IN_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(FLUID_IN_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchInput(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (mRecipeMap != null) { + aNBT.setString("recipeMap", mRecipeMap.unlocalizedName); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mRecipeMap = RecipeMap.getFromOldIdentifier(aNBT.getString("recipeMap")); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean doesFillContainers() { + // return true; + return false; + } + + @Override + public boolean doesEmptyContainers() { + return true; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public boolean displaysItemStack() { + return true; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + public void updateSlots() { + if (mInventory[getInputSlot()] != null && mInventory[getInputSlot()].stackSize <= 0) + mInventory[getInputSlot()] = null; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return mRecipeMap == null || mRecipeMap.containsInput(aFluid); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 1; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 0 + && (mRecipeMap == null || mRecipeMap.containsInput(aStack) + || mRecipeMap.containsInput(GTUtility.getFluidForFilledItem(aStack, true))); + } + + @Override + public int getCapacity() { + return 8000 * (1 << mTier); + } + + @Override + public int getTankPressure() { + return -100; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchInputBus.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchInputBus.java new file mode 100644 index 0000000000..f4f04c38a3 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchInputBus.java @@ -0,0 +1,315 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.ITEM_IN_SIGN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_IN; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Supplier; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; + +import gregtech.GTMod; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IConfigurationCircuitSupport; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTClientPreference; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.api.util.GT_TooltipDataCache; +import gregtech.api.util.extensions.ArrayExt; + +public class MTEHatchInputBus extends MTEHatch implements IConfigurationCircuitSupport, IAddUIWidgets { + + private static final String SORTING_MODE_TOOLTIP = "GT5U.machines.sorting_mode.tooltip"; + private static final String ONE_STACK_LIMIT_TOOLTIP = "GT5U.machines.one_stack_limit.tooltip"; + private static final int BUTTON_SIZE = 18; + + public RecipeMap mRecipeMap = null; + public boolean disableSort; + public boolean disableFilter = true; + public boolean disableLimited = true; + private int uiButtonCount = 0; + + public MTEHatchInputBus(int id, String name, String nameRegional, int tier) { + this(id, name, nameRegional, tier, getSlots(tier) + 1); + } + + protected MTEHatchInputBus(int id, String name, String nameRegional, int tier, int slots, String[] description) { + super(id, name, nameRegional, tier, slots, description); + } + + public MTEHatchInputBus(int id, String name, String nameRegional, int tier, int slots) { + super( + id, + name, + nameRegional, + tier, + slots, + ArrayExt.of( + "Item Input for Multiblocks", + "Shift + right click with screwdriver to turn Sort mode on/off", + "Capacity: " + getSlots(tier) + " stack" + (getSlots(tier) >= 2 ? "s" : ""))); + } + + public MTEHatchInputBus(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + this(aName, aTier, getSlots(aTier) + 1, aDescription, aTextures); + } + + public MTEHatchInputBus(String aName, int aTier, int aSlots, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aSlots, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(ITEM_IN_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(ITEM_IN_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex != getCircuitSlot(); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchInputBus(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public int getCircuitSlotX() { + return 153; + } + + @Override + public int getCircuitSlotY() { + return 63; + } + + @Override + public void initDefaultModes(NBTTagCompound aNBT) { + if (!getBaseMetaTileEntity().getWorld().isRemote) { + GTClientPreference tPreference = GTMod.gregtechproxy + .getClientPreference(getBaseMetaTileEntity().getOwnerUuid()); + if (tPreference != null) disableFilter = !tPreference.isInputBusInitialFilterEnabled(); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { + updateSlots(); + } + } + + public void updateSlots() { + for (int i = 0; i < mInventory.length - 1; i++) + if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null; + if (!disableSort) fillStacksIntoFirstSlots(); + } + + protected void fillStacksIntoFirstSlots() { + final int L = mInventory.length - 1; + HashMap slots = new HashMap<>(L); + HashMap stacks = new HashMap<>(L); + List order = new ArrayList<>(L); + List validSlots = new ArrayList<>(L); + for (int i = 0; i < L; i++) { + if (!isValidSlot(i)) continue; + validSlots.add(i); + ItemStack s = mInventory[i]; + if (s == null) continue; + GTUtility.ItemId sID = GTUtility.ItemId.createNoCopy(s); + slots.merge(sID, s.stackSize, Integer::sum); + if (!stacks.containsKey(sID)) stacks.put(sID, s); + order.add(sID); + mInventory[i] = null; + } + int slotindex = 0; + for (GTUtility.ItemId sID : order) { + int toSet = slots.get(sID); + if (toSet == 0) continue; + int slot = validSlots.get(slotindex); + slotindex++; + mInventory[slot] = stacks.get(sID) + .copy(); + toSet = Math.min(toSet, mInventory[slot].getMaxStackSize()); + mInventory[slot].stackSize = toSet; + slots.merge(sID, toSet, (a, b) -> a - b); + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("disableSort", disableSort); + aNBT.setBoolean("disableFilter", disableFilter); + aNBT.setBoolean("disableLimited", disableLimited); + if (mRecipeMap != null) { + aNBT.setString("recipeMap", mRecipeMap.unlocalizedName); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + disableSort = aNBT.getBoolean("disableSort"); + disableFilter = aNBT.getBoolean("disableFilter"); + if (aNBT.hasKey("disableLimited")) { + disableLimited = aNBT.getBoolean("disableLimited"); + } + mRecipeMap = RecipeMap.getFromOldIdentifier(aNBT.getString("recipeMap")); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) + .isGUIClickable()) return; + if (aPlayer.isSneaking()) { + if (disableSort) { + disableSort = false; + } else { + if (disableLimited) { + disableLimited = false; + } else { + disableSort = true; + disableLimited = true; + } + } + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.hatch.disableSort." + disableSort) + " " + + StatCollector.translateToLocal("GT5U.hatch.disableLimited." + disableLimited)); + } else { + disableFilter = !disableFilter; + GTUtility + .sendChatToPlayer(aPlayer, StatCollector.translateToLocal("GT5U.hatch.disableFilter." + disableFilter)); + } + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (aIndex == getCircuitSlot()) return false; + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == getBaseMetaTileEntity().getFrontFacing() && aIndex != getCircuitSlot() + && (mRecipeMap == null || disableFilter || mRecipeMap.containsInput(aStack)) + && (disableLimited || limitedAllowPutStack(aIndex, aStack)); + } + + protected boolean limitedAllowPutStack(int aIndex, ItemStack aStack) { + for (int i = 0; i < getSizeInventory(); i++) + if (GTUtility.areStacksEqual(GTOreDictUnificator.get_nocopy(aStack), mInventory[i])) return i == aIndex; + return mInventory[aIndex] == null; + } + + @Override + public boolean allowSelectCircuit() { + return true; + } + + @Override + public int getCircuitSlot() { + return getSlots(mTier); + } + + private void addSortStacksButton(ModularWindow.Builder builder) { + builder.widget( + createToggleButton( + () -> !disableSort, + val -> disableSort = !val, + GTUITextures.OVERLAY_BUTTON_SORTING_MODE, + () -> mTooltipCache.getData(SORTING_MODE_TOOLTIP))); + } + + private void addOneStackLimitButton(ModularWindow.Builder builder) { + builder.widget(createToggleButton(() -> !disableLimited, val -> { + disableLimited = !val; + updateSlots(); + }, GTUITextures.OVERLAY_BUTTON_ONE_STACK_LIMIT, () -> mTooltipCache.getData(ONE_STACK_LIMIT_TOOLTIP))); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + buildContext.addCloseListener(() -> uiButtonCount = 0); + addSortStacksButton(builder); + addOneStackLimitButton(builder); + // Remove one for ghost circuit slot + int slotCount = getSizeInventory(); + if (allowSelectCircuit()) { + slotCount = slotCount - 1; + } + // We do this to decouple slot count from tier in here, since there is no reason to do so. + switch (slotCount) { + case 1 -> getBaseMetaTileEntity().add1by1Slot(builder); + case 4 -> getBaseMetaTileEntity().add2by2Slots(builder); + case 9 -> getBaseMetaTileEntity().add3by3Slots(builder); + case 16 -> getBaseMetaTileEntity().add4by4Slots(builder); + default -> {} + } + } + + private Widget createToggleButton(Supplier getter, Consumer setter, UITexture picture, + Supplier tooltipDataSupplier) { + return new CycleButtonWidget().setToggle(getter, setter) + .setStaticTexture(picture) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(7 + (uiButtonCount++ * BUTTON_SIZE), 62) + .setSize(BUTTON_SIZE, BUTTON_SIZE) + .setGTTooltip(tooltipDataSupplier); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMagnet.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMagnet.java new file mode 100644 index 0000000000..660894d0df --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMagnet.java @@ -0,0 +1,102 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.AuthorFourIsTheNumber; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_EMS_HOUSING; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_EMS_HOUSING_GLOW; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.common.tileentities.machines.multi.MTEIndustrialElectromagneticSeparator; + +public class MTEHatchMagnet extends MTEHatch { + + public MTEHatchMagnet(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 5, 1, "Holds electromagnet for the Magnetic Flux Exhibitor"); + } + + public MTEHatchMagnet(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription[0], aTextures); + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll(this.mDescriptionArray, AuthorFourIsTheNumber); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new SlotWidget(inventoryHandler, 0).setFilter(MTEIndustrialElectromagneticSeparator::isValidElectromagnet) + .setAccess(true, true) + .setPos(79, 34)); + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.builder() + .addIcon(OVERLAY_EMS_HOUSING) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_EMS_HOUSING_GLOW) + .extFacing() + .glow() + .build() }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.builder() + .addIcon(OVERLAY_EMS_HOUSING) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_EMS_HOUSING_GLOW) + .extFacing() + .glow() + .build() }; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchMagnet(mName, mTier, mDescriptionArray, mTextures); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMaintenance.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMaintenance.java new file mode 100644 index 0000000000..3a715a541a --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMaintenance.java @@ -0,0 +1,455 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_AUTOMAINTENANCE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_AUTOMAINTENANCE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_AUTOMAINTENANCE_IDLE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_AUTOMAINTENANCE_IDLE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DUCTTAPE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MAINTENANCE; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.IAlignment; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; +import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.common.network.NetworkRegistry; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import ic2.core.IHasGui; +import ic2.core.item.ItemToolbox; + +public class MTEHatchMaintenance extends MTEHatch implements IAddUIWidgets, IAlignment { + + private Rotation rotation = Rotation.NORMAL; + + private static ItemStack[] sAutoMaintenanceInputs; + public boolean mWrench = false, mScrewdriver = false, mSoftHammer = false, mHardHammer = false, + mSolderingTool = false, mCrowbar = false, mAuto; + + public MTEHatchMaintenance(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 1, "For maintaining Multiblocks"); + mAuto = false; + } + + public MTEHatchMaintenance(int aID, String aName, String aNameRegional, int aTier, boolean aAuto) { + super(aID, aName, aNameRegional, aTier, 4, "For automatically maintaining Multiblocks"); + mAuto = aAuto; + } + + public MTEHatchMaintenance(String aName, int aTier, String aDescription, ITexture[][][] aTextures, boolean aAuto) { + super(aName, aTier, aAuto ? 4 : 1, aDescription, aTextures); + mAuto = aAuto; + } + + public MTEHatchMaintenance(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, + boolean aAuto) { + super(aName, aTier, aAuto ? 4 : 1, aDescription, aTextures); + mAuto = aAuto; + } + + private static ItemStack[] getAutoMaintenanceInputs() { + if (sAutoMaintenanceInputs == null) sAutoMaintenanceInputs = new ItemStack[] { ItemList.Duct_Tape.get(4), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Lubricant, 2), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 4), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2) }; + return sAutoMaintenanceInputs; + } + + @Override + public String[] getDescription() { + String[] desc; + if (mAuto) { + desc = new String[mDescriptionArray.length + 3]; + System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); + desc[mDescriptionArray.length] = "4 Ducttape, 2 Lubricant Cells"; + desc[mDescriptionArray.length + 1] = "4 Steel Screws, 2 HV Circuits"; + desc[mDescriptionArray.length + 2] = "For each autorepair"; + } else { + desc = new String[mDescriptionArray.length + 1]; + System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); + desc[mDescriptionArray.length] = "Cannot be shared between Multiblocks!"; + } + return desc; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + if (mAuto) return new ITexture[] { aBaseTexture, TextureFactory.builder() + .addIcon(OVERLAY_AUTOMAINTENANCE_IDLE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_AUTOMAINTENANCE_IDLE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { aBaseTexture, TextureFactory.builder() + .addIcon(OVERLAY_MAINTENANCE) + .extFacing() + .build() }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + if (mAuto) return new ITexture[] { aBaseTexture, TextureFactory.builder() + .addIcon(OVERLAY_AUTOMAINTENANCE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_AUTOMAINTENANCE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { aBaseTexture, TextureFactory.builder() + .addIcon(OVERLAY_MAINTENANCE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_DUCTTAPE) + .extFacing() + .build() }; + } + + @Override + public void initDefaultModes(NBTTagCompound aNBT) { + getBaseMetaTileEntity().setActive(true); + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return mAuto && GTMod.gregtechproxy.mAMHInteraction; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + if (aTileEntity.getMetaTileID() == 111) + return new MTEHatchMaintenance(mName, mTier, mDescriptionArray, mTextures, true); + return new MTEHatchMaintenance(mName, mTier, mDescriptionArray, mTextures, false); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + if (aBaseMetaTileEntity.isClientSide()) return true; + if (side == aBaseMetaTileEntity.getFrontFacing()) { + // only allow OC robot fake player + if (aPlayer instanceof FakePlayer && !aPlayer.getGameProfile() + .getName() + .endsWith(".robot")) return false; + ItemStack tStack = aPlayer.getCurrentEquippedItem(); + if (tStack != null) { + if (tStack.getItem() instanceof ItemToolbox) { + applyToolbox(tStack, aPlayer); + } else if (ItemList.Duct_Tape.isStackEqual(tStack)) { + mWrench = mScrewdriver = mSoftHammer = mHardHammer = mCrowbar = mSolderingTool = true; + getBaseMetaTileEntity().setActive(false); + if (--tStack.stackSize == 0) { + aPlayer.inventory.mainInventory[aPlayer.inventory.currentItem] = null; + } + } else GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + } else { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + } + 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; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + if (aBaseMetaTileEntity.isClientSide()) + StructureLibAPI.queryAlignment((IAlignmentProvider) aBaseMetaTileEntity); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && mAuto && aTick % 100L == 0L) { + aBaseMetaTileEntity.setActive(!isRecipeInputEqual(false)); + } + } + + @Override + public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer, + float aX, float aY, float aZ) { + if (wrenchingSide != getBaseMetaTileEntity().getFrontFacing()) + return super.onWrenchRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ); + if (!entityPlayer.isSneaking() && isRotationChangeAllowed()) { + toolSetRotation(null); + return true; + } + return false; + } + + public boolean autoMaintainance() { + return isRecipeInputEqual(true); + } + + public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess) { + ItemStack[] mInputs = getAutoMaintenanceInputs(); + + int amt; + + for (ItemStack tStack : mInputs) { + if (tStack != null) { + amt = tStack.stackSize; + boolean temp = true; + for (ItemStack aStack : mInventory) { + if ((GTUtility.areUnificationsEqual(aStack, tStack, true) + || GTUtility.areUnificationsEqual(GTOreDictUnificator.get(false, aStack), tStack, true))) { + amt -= aStack.stackSize; + if (amt < 1) { + temp = false; + break; + } + } + } + if (temp) return false; + } + } + + if (aDecreaseStacksizeBySuccess) { + for (ItemStack tStack : mInputs) { + if (tStack != null) { + amt = tStack.stackSize; + for (ItemStack aStack : mInventory) { + if ((GTUtility.areUnificationsEqual(aStack, tStack, true) + || GTUtility.areUnificationsEqual(GTOreDictUnificator.get(false, aStack), tStack, true))) { + if (aStack.stackSize < amt) { + amt -= aStack.stackSize; + aStack.stackSize = 0; + } else { + aStack.stackSize -= amt; + amt = 0; + break; + } + } + } + } + } + mCrowbar = true; + mHardHammer = true; + mScrewdriver = true; + mSoftHammer = true; + mSolderingTool = true; + mWrench = true; + updateSlots(); + } + return true; + } + + public void onToolClick(ItemStack aStack, EntityLivingBase aPlayer, IInventory aToolboxInventory) { + if (aStack == null || aPlayer == null) return; + + // Allow IC2 Toolbox with tools to function for maint issues. + if (aStack.getItem() instanceof ItemToolbox && aPlayer instanceof EntityPlayer) { + applyToolbox(aStack, (EntityPlayer) aPlayer); + return; + } + + if (GTUtility.isStackInList(aStack, GregTechAPI.sWrenchList) && !mWrench + && GTModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mWrench = true; + if (GTUtility.isStackInList(aStack, GregTechAPI.sScrewdriverList) && !mScrewdriver + && GTModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mScrewdriver = true; + if (GTUtility.isStackInList(aStack, GregTechAPI.sSoftHammerList) && !mSoftHammer + && GTModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mSoftHammer = true; + if (GTUtility.isStackInList(aStack, GregTechAPI.sHardHammerList) && !mHardHammer + && GTModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mHardHammer = true; + if (GTUtility.isStackInList(aStack, GregTechAPI.sCrowbarList) && !mCrowbar + && GTModHandler.damageOrDechargeItem(aStack, 1, 1000, aPlayer)) mCrowbar = true; + if (!mSolderingTool && GTModHandler.useSolderingIron(aStack, aPlayer, aToolboxInventory)) mSolderingTool = true; + if (GTOreDictUnificator.isItemStackInstanceOf(aStack, "craftingDuctTape")) { + mWrench = mScrewdriver = mSoftHammer = mHardHammer = mCrowbar = mSolderingTool = true; + getBaseMetaTileEntity().setActive(false); + aStack.stackSize--; + } + if (mSolderingTool && aPlayer instanceof EntityPlayerMP tPlayer) { + try { + GTMod.achievements.issueAchievement(tPlayer, "maintainance"); + } catch (Exception ignored) {} + } + } + + public void onToolClick(ItemStack aStack, EntityLivingBase aPlayer) { + onToolClick(aStack, aPlayer, null); + } + + private void applyToolbox(ItemStack aStack, EntityPlayer aPlayer) { + final ItemToolbox aToolbox = (ItemToolbox) aStack.getItem(); + final IHasGui aToolboxGUI = aToolbox.getInventory(aPlayer, aStack); + for (int i = 0; i < aToolboxGUI.getSizeInventory(); i++) { + if (aToolboxGUI.getStackInSlot(i) != null) { + onToolClick(aToolboxGUI.getStackInSlot(i), aPlayer, aToolboxGUI); + if (aToolboxGUI.getStackInSlot(i) != null && aToolboxGUI.getStackInSlot(i).stackSize <= 0) + aToolboxGUI.setInventorySlotContents(i, null); + } + } + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return mAuto && GTMod.gregtechproxy.mAMHInteraction; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (mAuto && GTMod.gregtechproxy.mAMHInteraction) { + for (int i = 0; i < getSizeInventory(); i++) if (GTUtility.areStacksEqual( + GTOreDictUnificator.get(false, aStack), + GTOreDictUnificator.get(false, getStackInSlot(i)))) return i == aIndex; + for (ItemStack tInput : getAutoMaintenanceInputs()) if (GTUtility.areUnificationsEqual(tInput, aStack, true) + || GTUtility.areUnificationsEqual(GTOreDictUnificator.get(false, aStack), tInput, true)) return true; + } + return false; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + if (mAuto) { + getBaseMetaTileEntity().add2by2Slots(builder); + } else { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.SLOT_MAINTENANCE) + .setPos(78, 33) + .setSize(20, 20)) + .widget(new SlotWidget(BaseSlot.empty()) { + + @Override + public boolean handleDragAndDrop(ItemStack draggedStack, int button) { + return false; + } + + @Override + protected void phantomClick(ClickData clickData, ItemStack cursorStack) { + if (cursorStack == null) return; + onToolClick(cursorStack, getContext().getPlayer()); + if (cursorStack.stackSize < 1) { + getContext().getPlayer().inventory.setItemStack(null); + } + if (getContext().getPlayer() instanceof EntityPlayerMP) { + ((EntityPlayerMP) getContext().getPlayer()).updateHeldItem(); + } + } + }.disableShiftInsert() + .setBackground(GTUITextures.TRANSPARENT) + .setPos(79, 34)) + .widget( + new TextWidget("Click with Tool to repair.").setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(8, 12)); + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByte("mRotation", (byte) rotation.getIndex()); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + rotation = Rotation.byIndex(aNBT.getByte("mRotation")); + super.loadNBTData(aNBT); + } + + @Override + public ExtendedFacing getExtendedFacing() { + return ExtendedFacing.of(getBaseMetaTileEntity().getFrontFacing(), rotation, Flip.NONE); + } + + @Override + public void setExtendedFacing(ExtendedFacing alignment) { + boolean changed = false; + final IGregTechTileEntity base = getBaseMetaTileEntity(); + if (base.getFrontFacing() != alignment.getDirection()) { + base.setFrontFacing(alignment.getDirection()); + changed = true; + } + if (rotation != alignment.getRotation()) { + rotation = alignment.getRotation(); + changed = true; + } + if (changed) { + if (base.isServerSide() && !GregTechAPI.isDummyWorld(base.getWorld())) { + StructureLibAPI.sendAlignment( + (IAlignmentProvider) base, + new NetworkRegistry.TargetPoint( + base.getWorld().provider.dimensionId, + base.getXCoord(), + base.getYCoord(), + base.getZCoord(), + 512)); + } else { + base.issueTextureUpdate(); + } + } + } + + @Override + public IAlignmentLimits getAlignmentLimits() { + return (d, r, f) -> f.isNotFlipped(); + } + + @Override + public boolean isFlipChangeAllowed() { + return false; + } + + @Override + public boolean isRotationChangeAllowed() { + return true; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMuffler.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMuffler.java new file mode 100644 index 0000000000..179ba56254 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMuffler.java @@ -0,0 +1,208 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MUFFLER; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.enums.ParticleFX; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.WorldSpawnedEventBuilder; +import gregtech.common.Pollution; + +@SuppressWarnings("unused") // Unused API is expected within scope +public class MTEHatchMuffler extends MTEHatch { + + private static final String localizedDescFormat = GTLanguageManager.addStringLocalization( + "gt.blockmachines.hatch.muffler.desc.format", + "Outputs the Pollution (Might cause ... things)%n" + "DO NOT OBSTRUCT THE OUTPUT!%n" + + "Reduces Pollution to %d%%%n" + + "Recovers %d%% of CO2/CO/SO2"); + private final int pollutionReduction = calculatePollutionReduction(100); + private final int pollutionRecover = 100 - pollutionReduction; + private final String[] description = String.format(localizedDescFormat, pollutionReduction, pollutionRecover) + .split("\\R"); + + public MTEHatchMuffler(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 0, ""); + } + + public MTEHatchMuffler(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String[] aDescription, ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEHatchMuffler(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + this(aName, aTier, new String[] { aDescription }, aTextures); + } + + public MTEHatchMuffler(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + this(aName, aTier, 0, aDescription, aTextures); + } + + public MTEHatchMuffler(String aName, int aTier, int aInvSlotCount, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + return description; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_MUFFLER) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_MUFFLER) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchMuffler(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isClientSide() && this.getBaseMetaTileEntity() + .isActive()) { + pollutionParticles( + this.getBaseMetaTileEntity() + .getWorld(), + ParticleFX.LARGE_SMOKE.toString()); + } + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @SideOnly(Side.CLIENT) + public void pollutionParticles(World aWorld, String name) { + boolean chk1, chk2, chk3; + float ran1 = XSTR_INSTANCE.nextFloat(), ran2, ran3; + chk1 = ran1 * 100 < calculatePollutionReduction(100); + if (Pollution.getPollution(getBaseMetaTileEntity()) >= GTMod.gregtechproxy.mPollutionSmogLimit) { + ran2 = XSTR_INSTANCE.nextFloat(); + ran3 = XSTR_INSTANCE.nextFloat(); + chk2 = ran2 * 100 < calculatePollutionReduction(100); + chk3 = ran3 * 100 < calculatePollutionReduction(100); + if (!(chk1 || chk2 || chk3)) return; + } else { + if (!chk1) return; + ran2 = ran3 = 0.0F; + chk2 = chk3 = false; + } + + final IGregTechTileEntity aMuffler = this.getBaseMetaTileEntity(); + final ForgeDirection aDir = aMuffler.getFrontFacing(); + final float xPos = aDir.offsetX * 0.76F + aMuffler.getXCoord() + 0.25F; + final float yPos = aDir.offsetY * 0.76F + aMuffler.getYCoord() + 0.25F; + final float zPos = aDir.offsetZ * 0.76F + aMuffler.getZCoord() + 0.25F; + + final float ySpd = aDir.offsetY * 0.1F + 0.2F + 0.1F * XSTR_INSTANCE.nextFloat(); + final float xSpd; + final float zSpd; + + if (aDir.offsetY == -1) { + final float temp = XSTR_INSTANCE.nextFloat() * 2 * (float) Math.PI; + xSpd = (float) Math.sin(temp) * 0.1F; + zSpd = (float) Math.cos(temp) * 0.1F; + } else { + xSpd = aDir.offsetX * (0.1F + 0.2F * XSTR_INSTANCE.nextFloat()); + zSpd = aDir.offsetZ * (0.1F + 0.2F * XSTR_INSTANCE.nextFloat()); + } + + final WorldSpawnedEventBuilder.ParticleEventBuilder events = new WorldSpawnedEventBuilder.ParticleEventBuilder() + .setIdentifier(name) + .setWorld(aWorld) + .setMotion(xSpd, ySpd, zSpd); + + if (chk1) { + events + .setPosition( + xPos + ran1 * 0.5F, + yPos + XSTR_INSTANCE.nextFloat() * 0.5F, + zPos + XSTR_INSTANCE.nextFloat() * 0.5F) + .run(); + } + if (chk2) { + events + .setPosition( + xPos + ran2 * 0.5F, + yPos + XSTR_INSTANCE.nextFloat() * 0.5F, + zPos + XSTR_INSTANCE.nextFloat() * 0.5F) + .run(); + } + if (chk3) { + events + .setPosition( + xPos + ran3 * 0.5F, + yPos + XSTR_INSTANCE.nextFloat() * 0.5F, + zPos + XSTR_INSTANCE.nextFloat() * 0.5F) + .run(); + } + } + + public int calculatePollutionReduction(int aPollution) { + if (mTier < 2) { + return aPollution; + } + return (int) ((float) aPollution * ((100F - 12.5F * ((float) mTier - 1F)) / 100F)); + } + + /** + * @param mte The multi-block controller's {@link MetaTileEntity} MetaTileEntity is passed so newer muffler hatches + * can do wacky things with the multis + * @return pollution success + */ + public boolean polluteEnvironment(MetaTileEntity mte) { + if (getBaseMetaTileEntity().getAirAtSide(getBaseMetaTileEntity().getFrontFacing())) { + Pollution.addPollution(getBaseMetaTileEntity(), calculatePollutionReduction(10000)); + return true; + } + return false; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMultiInput.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMultiInput.java new file mode 100644 index 0000000000..9bf061573b --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchMultiInput.java @@ -0,0 +1,299 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_INPUT_HATCH_2x2; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.fluid.FluidStackTank; +import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; + +public class MTEHatchMultiInput extends MTEHatchInput implements IAddUIWidgets { + + private final FluidStack[] mStoredFluid; + private final FluidStackTank[] fluidTanks; + public final int mCapacityPer; + + public MTEHatchMultiInput(int aID, int aSlot, String aName, String aNameRegional, int aTier) { + super(aID, aSlot, aName, aNameRegional, aTier); + this.mStoredFluid = new FluidStack[aSlot]; + fluidTanks = new FluidStackTank[aSlot]; + mCapacityPer = getCapacityPerTank(aTier, aSlot); + } + + public MTEHatchMultiInput(int aID, int aSlot, String aName, String aNameRegional, int aTier, + String[] aDescription) { + super(aID, aSlot, aName, aNameRegional, aTier, aDescription); + this.mStoredFluid = new FluidStack[aSlot]; + fluidTanks = new FluidStackTank[aSlot]; + mCapacityPer = getCapacityPerTank(aTier, aSlot); + } + + public MTEHatchMultiInput(String aName, int aSlot, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aSlot, aTier, aDescription, aTextures); + this.mStoredFluid = new FluidStack[aSlot]; + fluidTanks = new FluidStackTank[aSlot]; + mCapacityPer = getCapacityPerTank(aTier, aSlot); + for (int i = 0; i < aSlot; i++) { + final int index = i; + fluidTanks[i] = new FluidStackTank( + () -> mStoredFluid[index], + fluid -> mStoredFluid[index] = fluid, + mCapacityPer); + } + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchMultiInput(mName, getMaxType(), mTier, mDescriptionArray, mTextures); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (mStoredFluid != null) { + for (int i = 0; i < mStoredFluid.length; i++) { + if (mStoredFluid[i] != null) + aNBT.setTag("mFluid" + i, mStoredFluid[i].writeToNBT(new NBTTagCompound())); + } + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (mStoredFluid != null) { + for (int i = 0; i < mStoredFluid.length; i++) { + if (aNBT.hasKey("mFluid" + i)) { + mStoredFluid[i] = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid" + i)); + } + } + } + } + + @Override + public boolean displaysStackSize() { + return true; + } + + public FluidStack[] getStoredFluid() { + return mStoredFluid; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_INPUT_HATCH_2x2) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_INPUT_HATCH_2x2) }; + } + + public int getMaxType() { + return mStoredFluid.length; + } + + @Override + public FluidStack getFluid() { + for (FluidStack tFluid : mStoredFluid) { + if (tFluid != null && tFluid.amount > 0) return tFluid; + } + return null; + } + + public FluidStack getFluid(int aSlot) { + if (mStoredFluid == null || aSlot < 0 || aSlot >= getMaxType()) return null; + return mStoredFluid[aSlot]; + } + + @Override + public int getFluidAmount() { + if (getFluid() != null) { + return getFluid().amount; + } + return 0; + } + + @Override + public int getCapacity() { + return mCapacityPer; + } + + public int getFirstEmptySlot() { + for (int i = 0; i < mStoredFluid.length; i++) { + if (mStoredFluid[i] == null) return i; + } + return -1; + } + + public boolean hasFluid(FluidStack aFluid) { + if (aFluid == null) return false; + for (FluidStack tFluid : mStoredFluid) { + if (aFluid.isFluidEqual(tFluid)) return true; + } + return false; + } + + public int getFluidSlot(FluidStack tFluid) { + if (tFluid == null) return -1; + for (int i = 0; i < mStoredFluid.length; i++) { + if (tFluid.equals(mStoredFluid[i])) return i; + } + return -1; + } + + public int getFluidAmount(FluidStack tFluid) { + int tSlot = getFluidSlot(tFluid); + if (tSlot != -1) { + return mStoredFluid[tSlot].amount; + } + return 0; + } + + public void setFluid(FluidStack aFluid, int aSlot) { + if (aSlot < 0 || aSlot >= getMaxType()) return; + mStoredFluid[aSlot] = aFluid; + } + + public void addFluid(FluidStack aFluid, int aSlot) { + if (aSlot < 0 || aSlot >= getMaxType()) return; + if (aFluid.equals(mStoredFluid[aSlot])) mStoredFluid[aSlot].amount += aFluid.amount; + if (mStoredFluid[aSlot] == null) mStoredFluid[aSlot] = aFluid.copy(); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + mFluid = getFluid(); + } + super.onPreTick(aBaseMetaTileEntity, aTick); + } + + @Override + public int fill(FluidStack aFluid, boolean doFill) { + if (aFluid == null || aFluid.getFluid() + .getID() <= 0 || aFluid.amount <= 0 || !canTankBeFilled() || !isFluidInputAllowed(aFluid)) return 0; + if (!hasFluid(aFluid) && getFirstEmptySlot() != -1) { + int tFilled = Math.min(aFluid.amount, mCapacityPer); + if (doFill) { + FluidStack tFluid = aFluid.copy(); + tFluid.amount = tFilled; + addFluid(tFluid, getFirstEmptySlot()); + getBaseMetaTileEntity().markDirty(); + } + return tFilled; + } + if (hasFluid(aFluid)) { + int tLeft = mCapacityPer - getFluidAmount(aFluid); + int tFilled = Math.min(tLeft, aFluid.amount); + if (doFill) { + FluidStack tFluid = aFluid.copy(); + tFluid.amount = tFilled; + addFluid(tFluid, getFluidSlot(tFluid)); + getBaseMetaTileEntity().markDirty(); + } + return tFilled; + } + return 0; + } + + @Override + public FluidStack drain(int maxDrain, boolean doDrain) { + if (getFluid() == null || !canTankBeEmptied()) return null; + if (getFluid().amount <= 0 && isFluidChangingAllowed()) { + setFluid(null, getFluidSlot(getFluid())); + getBaseMetaTileEntity().markDirty(); + return null; + } + FluidStack tRemove = getFluid().copy(); + tRemove.amount = Math.min(maxDrain, tRemove.amount); + if (doDrain) { + getFluid().amount -= tRemove.amount; + getBaseMetaTileEntity().markDirty(); + } + if (getFluid() == null || getFluid().amount <= 0 && isFluidChangingAllowed()) { + setFluid(null, getFluidSlot(getFluid())); + getBaseMetaTileEntity().markDirty(); + } + return tRemove; + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { + return fill(resource, doFill); + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack aFluid, boolean doDrain) { + if (aFluid == null || !hasFluid(aFluid)) return null; + FluidStack tStored = mStoredFluid[getFluidSlot(aFluid)]; + if (tStored.amount <= 0 && isFluidChangingAllowed()) { + setFluid(null, getFluidSlot(tStored)); + getBaseMetaTileEntity().markDirty(); + return null; + } + FluidStack tRemove = tStored.copy(); + tRemove.amount = Math.min(aFluid.amount, tRemove.amount); + if (doDrain) { + tStored.amount -= tRemove.amount; + getBaseMetaTileEntity().markDirty(); + } + if (tStored.amount <= 0 && isFluidChangingAllowed()) { + setFluid(null, getFluidSlot(tStored)); + getBaseMetaTileEntity().markDirty(); + } + return tRemove; + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) { + FluidTankInfo[] FTI = new FluidTankInfo[getMaxType()]; + for (int i = 0; i < getMaxType(); i++) { + FTI[i] = new FluidTankInfo(mStoredFluid[i], mCapacityPer); + } + return FTI; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && mStoredFluid != null) { + for (int i = 0; i < getMaxType(); i++) { + if (mStoredFluid[i] != null && mStoredFluid[i].amount <= 0) { + mStoredFluid[i] = null; + } + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex >= 4; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + final int SLOT_NUMBER = 4; + final Pos2d[] positions = new Pos2d[] { new Pos2d(70, 25), new Pos2d(88, 25), new Pos2d(70, 43), + new Pos2d(88, 43), }; + + for (int i = 0; i < SLOT_NUMBER; i++) { + builder.widget( + new FluidSlotWidget(fluidTanks[i]).setBackground(ModularUITextures.FLUID_SLOT) + .setPos(positions[i])); + } + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchOutput.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchOutput.java new file mode 100644 index 0000000000..3a9dd0dc96 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchOutput.java @@ -0,0 +1,493 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.FLUID_OUT_SIGN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; + +import java.lang.ref.WeakReference; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.IFluidHandler; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.GTMod; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.fluid.IFluidStore; +import gregtech.api.interfaces.metatileentity.IFluidLockable; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.common.gui.modularui.widget.FluidLockWidget; + +public class MTEHatchOutput extends MTEHatch implements IFluidStore, IFluidLockable, IAddUIWidgets { + + private String lockedFluidName = null; + private WeakReference playerThatLockedfluid = null; + public byte mMode = 0; + + public MTEHatchOutput(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 4, + new String[] { "Fluid Output for Multiblocks", + "Capacity: " + GTUtility.formatNumbers(8000L * (1L << aTier)) + "L", + "Right click with screwdriver to restrict output", + "Can be restricted to put out Items and/or Steam/No Steam/1 specific Fluid", + "Restricted Output Hatches are given priority for Multiblock Fluid output" }); + } + + public MTEHatchOutput(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + public MTEHatchOutput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + public MTEHatchOutput(int aID, String aName, String aNameRegional, int aTier, String[] aDescription, + int inventorySize) { + super(aID, aName, aNameRegional, aTier, inventorySize, aDescription); + } + + public MTEHatchOutput(String name, int tier, int slots, String[] description, ITexture[][][] textures) { + super(name, tier, slots, description, textures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(FLUID_OUT_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(FLUID_OUT_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isLiquidInput(ForgeDirection side) { + return false; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchOutput(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && mFluid != null) { + IFluidHandler tTileEntity = aBaseMetaTileEntity + .getITankContainerAtSide(aBaseMetaTileEntity.getFrontFacing()); + if (tTileEntity != null) { + GTUtility.moveFluid( + aBaseMetaTileEntity, + tTileEntity, + aBaseMetaTileEntity.getFrontFacing(), + Math.max(1, mFluid.amount), + null); + } + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByte("mMode", mMode); + if (isFluidLocked() && lockedFluidName != null && lockedFluidName.length() != 0) + aNBT.setString("lockedFluidName", lockedFluidName); + else aNBT.removeTag("lockedFluidName"); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mMode = aNBT.getByte("mMode"); + if (isFluidLocked()) { + lockedFluidName = aNBT.getString("lockedFluidName"); + } + lockedFluidName = GTUtility.isStringInvalid(lockedFluidName) ? null : lockedFluidName; + } + + @Override + public boolean doesFillContainers() { + return true; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public boolean displaysItemStack() { + return true; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + public int getLockedDisplaySlot() { + return 3; + } + + @Override + public boolean isValidSlot(int aIndex) { + // Because getStackDisplaySlot() only allow return one int, this place I only can manually set. + return aIndex != getStackDisplaySlot() && aIndex != getLockedDisplaySlot(); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 1; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 0; + } + + @Override + public int getCapacity() { + return 8000 * (1 << mTier); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) + .isGUIClickable()) return; + if (aPlayer.isSneaking()) { + mMode = (byte) ((mMode + 9) % 10); + } else { + mMode = (byte) ((mMode + 1) % 10); + } + final String inBrackets; + switch (mMode) { + case 0 -> { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("108", "Outputs misc. Fluids, Steam and Items")); + this.setLockedFluidName(null); + } + case 1 -> { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("109", "Outputs Steam and Items")); + this.setLockedFluidName(null); + } + case 2 -> { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("110", "Outputs Steam and misc. Fluids")); + this.setLockedFluidName(null); + } + case 3 -> { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("111", "Outputs Steam")); + this.setLockedFluidName(null); + } + case 4 -> { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("112", "Outputs misc. Fluids and Items")); + this.setLockedFluidName(null); + } + case 5 -> { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("113", "Outputs only Items")); + this.setLockedFluidName(null); + } + case 6 -> { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("114", "Outputs only misc. Fluids")); + this.setLockedFluidName(null); + } + case 7 -> { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("115", "Outputs nothing")); + this.setLockedFluidName(null); + } + case 8 -> { + playerThatLockedfluid = new WeakReference<>(aPlayer); + if (mFluid == null) { + this.setLockedFluidName(null); + inBrackets = GTUtility.trans( + "115.3", + "currently none, will be locked to the next that is put in (or use fluid cell to lock)"); + } else { + this.setLockedFluidName( + this.getDrainableStack() + .getFluid() + .getName()); + inBrackets = this.getDrainableStack() + .getLocalizedName(); + } + GTUtility.sendChatToPlayer( + aPlayer, + String + .format("%s (%s)", GTUtility.trans("151.1", "Outputs items and 1 specific Fluid"), inBrackets)); + } + case 9 -> { + playerThatLockedfluid = new WeakReference<>(aPlayer); + if (mFluid == null) { + this.setLockedFluidName(null); + inBrackets = GTUtility.trans( + "115.3", + "currently none, will be locked to the next that is put in (or use fluid cell to lock)"); + } else { + this.setLockedFluidName( + this.getDrainableStack() + .getFluid() + .getName()); + inBrackets = this.getDrainableStack() + .getLocalizedName(); + } + GTUtility.sendChatToPlayer( + aPlayer, + String.format("%s (%s)", GTUtility.trans("151.2", "Outputs 1 specific Fluid"), inBrackets)); + } + } + } + + private boolean tryToLockHatch(EntityPlayer aPlayer, ForgeDirection side) { + if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) + .isGUIClickable()) return false; + if (!isFluidLocked()) return false; + final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + if (tCurrentItem == null) return false; + FluidStack tFluid = FluidContainerRegistry.getFluidForFilledItem(tCurrentItem); + if (tFluid == null && tCurrentItem.getItem() instanceof IFluidContainerItem) + tFluid = ((IFluidContainerItem) tCurrentItem.getItem()).getFluid(tCurrentItem); + if (tFluid != null) { + if (getLockedFluidName() != null && !getLockedFluidName().equals( + tFluid.getFluid() + .getName())) { + GTUtility.sendChatToPlayer( + aPlayer, + String.format( + "%s %s", + GTUtility.trans( + "151.3", + "Hatch is locked to a different fluid. To change the locking, empty it and made it locked to the next fluid with a screwdriver. Currently locked to"), + StatCollector.translateToLocal(getLockedFluidName()))); + } else { + setLockedFluidName( + tFluid.getFluid() + .getName()); + if (mMode == 8) GTUtility.sendChatToPlayer( + aPlayer, + String.format( + "%s (%s)", + GTUtility.trans("151.1", "Outputs items and 1 specific Fluid"), + tFluid.getLocalizedName())); + else GTUtility.sendChatToPlayer( + aPlayer, + String.format( + "%s (%s)", + GTUtility.trans("151.2", "Outputs 1 specific Fluid"), + tFluid.getLocalizedName())); + } + return true; + } + return false; + } + + public byte getMode() { + return mMode; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + if (tryToLockHatch(aPlayer, side)) return true; + return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + } + + public boolean outputsSteam() { + return mMode < 4; + } + + public boolean outputsLiquids() { + return mMode % 2 == 0 || mMode == 9; + } + + public boolean outputsItems() { + return mMode % 4 < 2 && mMode != 9; + } + + @Override + public String getLockedFluidName() { + return lockedFluidName; + } + + @Override + public void setLockedFluidName(String lockedFluidName) { + this.lockedFluidName = lockedFluidName; + markDirty(); + } + + @Override + public void lockFluid(boolean lock) { + if (lock) { + if (!isFluidLocked()) { + this.mMode = 9; + markDirty(); + } + } else { + this.mMode = 0; + setLockedFluidName(null); + markDirty(); + } + } + + @Override + public boolean isFluidLocked() { + return mMode == 8 || mMode == 9; + } + + @Override + public boolean acceptsFluidLock(String name) { + return true; + } + + @Override + public boolean isEmptyAndAcceptsAnyFluid() { + return mMode == 0 && getFluidAmount() == 0; + } + + @Override + public boolean canStoreFluid(@Nonnull FluidStack fluidStack) { + if (mFluid != null && !GTUtility.areFluidsEqual(mFluid, fluidStack)) { + return false; + } + if (isFluidLocked()) { + if (lockedFluidName == null) { + return true; + } + return lockedFluidName.equals( + fluidStack.getFluid() + .getName()); + } + if (GTModHandler.isSteam(fluidStack)) { + return outputsSteam(); + } + return outputsLiquids(); + } + + @Override + public int getTankPressure() { + return +100; + } + + @Override + protected void onEmptyingContainerWhenEmpty() { + if (this.lockedFluidName == null && this.mFluid != null && isFluidLocked()) { + this.setLockedFluidName( + this.mFluid.getFluid() + .getName()); + final EntityPlayer player; + if (playerThatLockedfluid == null || (player = playerThatLockedfluid.get()) == null) return; + GTUtility.sendChatToPlayer( + player, + String.format(GTUtility.trans("151.4", "Successfully locked Fluid to %s"), mFluid.getLocalizedName())); + playerThatLockedfluid = null; + } + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { EnumChatFormatting.BLUE + "Output Hatch" + EnumChatFormatting.RESET, "Stored Fluid:", + EnumChatFormatting.GOLD + (mFluid == null ? "No Fluid" : mFluid.getLocalizedName()) + + EnumChatFormatting.RESET, + EnumChatFormatting.GREEN + GTUtility.formatNumbers(mFluid == null ? 0 : mFluid.amount) + + " L" + + EnumChatFormatting.RESET + + " " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getCapacity()) + + " L" + + EnumChatFormatting.RESET, + (!isFluidLocked() || lockedFluidName == null) ? "Not Locked" + : ("Locked to " + StatCollector.translateToLocal( + FluidRegistry.getFluidStack(lockedFluidName, 1) + .getUnlocalizedName())) }; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(98, 16) + .setSize(71, 45)) + .widget(new FluidLockWidget(this).setPos(149, 41)) + .widget( + new TextWidget("Locked Fluid").setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(101, 20)) + .widget(TextWidget.dynamicString(() -> { + FluidStack fluidStack = FluidRegistry.getFluidStack(lockedFluidName, 1); + return fluidStack != null ? fluidStack.getLocalizedName() : "None"; + }) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setTextAlignment(Alignment.CenterLeft) + .setMaxWidth(65) + .setPos(101, 30)) + .widget(new FakeSyncWidget.ByteSyncer(() -> mMode, val -> mMode = val)); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchOutputBus.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchOutputBus.java new file mode 100644 index 0000000000..31973f935b --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchOutputBus.java @@ -0,0 +1,320 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.ITEM_OUT_SIGN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; +import static gregtech.api.util.GTUtility.moveMultipleItemStacks; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.Nullable; + +import com.gtnewhorizons.modularui.api.forge.ItemHandlerHelper; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; + +import gregtech.GTMod; +import gregtech.api.enums.ItemList; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.widgets.PhantomItemButton; +import gregtech.api.interfaces.IDataCopyable; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IItemLockable; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.extensions.ArrayExt; + +public class MTEHatchOutputBus extends MTEHatch implements IAddUIWidgets, IItemLockable, IDataCopyable { + + private static final String DATA_STICK_DATA_TYPE = "outputBusFilter"; + private static final String LOCKED_ITEM_NBT_KEY = "lockedItem"; + + protected ItemStack lockedItem = null; + + public MTEHatchOutputBus(int aID, String aName, String aNameRegional, int aTier) { + this(aID, aName, aNameRegional, aTier, getSlots(aTier)); + } + + public MTEHatchOutputBus(int id, String name, String nameRegional, int tier, int slots) { + super( + id, + name, + nameRegional, + tier, + slots, + ArrayExt.of( + "Item Output for Multiblocks", + "Capacity: " + getSlots(tier) + " stack" + (getSlots(tier) >= 2 ? "s" : ""), + "Left click with data stick to save filter config", + "Right click with data stick to load filter config")); + } + + public MTEHatchOutputBus(int aID, String aName, String aNameRegional, int aTier, String[] aDescription) { + super(aID, aName, aNameRegional, aTier, getSlots(aTier), aDescription); + } + + public MTEHatchOutputBus(int aID, String aName, String aNameRegional, int aTier, String[] aDescription, + int inventorySize) { + super(aID, aName, aNameRegional, aTier, inventorySize, aDescription); + } + + public MTEHatchOutputBus(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, getSlots(aTier), aDescription, aTextures); + } + + public MTEHatchOutputBus(String name, int tier, int slots, String[] description, ITexture[][][] textures) { + super(name, tier, slots, description, textures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(ITEM_OUT_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(ITEM_OUT_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + 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 MTEHatchOutputBus(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (!acceptsItemLock() || !(aPlayer instanceof EntityPlayerMP)) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return super.onRightclick(aBaseMetaTileEntity, aPlayer); + } + + final ItemStack dataStick = aPlayer.inventory.getCurrentItem(); + if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return super.onRightclick(aBaseMetaTileEntity, aPlayer); + } + + if (!pasteCopiedData(aPlayer, dataStick.stackTagCompound)) { + aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.output_bus.invalid")); + return false; + } + + aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.output_bus.loaded")); + return true; + + } + + @Override + public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (!acceptsItemLock() || !(aPlayer instanceof EntityPlayerMP)) { + return; + } + final ItemStack dataStick = aPlayer.inventory.getCurrentItem(); + if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) { + return; + } + + dataStick.stackTagCompound = getCopiedData(aPlayer); + dataStick.setStackDisplayName("Output Bus Configuration"); + aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.output_bus.saved")); + } + + @Override + public NBTTagCompound getCopiedData(EntityPlayer player) { + final NBTTagCompound nbt = new NBTTagCompound(); + nbt.setString("type", DATA_STICK_DATA_TYPE); + if (lockedItem != null) { + nbt.setTag(LOCKED_ITEM_NBT_KEY, lockedItem.writeToNBT(new NBTTagCompound())); + } + return nbt; + } + + @Override + public boolean pasteCopiedData(EntityPlayer player, NBTTagCompound nbt) { + if (nbt == null || !DATA_STICK_DATA_TYPE.equals(nbt.getString("type"))) return false; + if (nbt.hasKey(LOCKED_ITEM_NBT_KEY)) { + lockedItem = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag(LOCKED_ITEM_NBT_KEY)); + } else { + lockedItem = null; + } + return true; + } + + @Override + public String getCopiedDataIdentifier(EntityPlayer player) { + return DATA_STICK_DATA_TYPE; + } + + /** + * Attempt to store as many items as possible into the internal inventory of this output bus. If you need atomicity + * you should use {@link gregtech.api.interfaces.tileentity.IHasInventory#addStackToSlot(int, ItemStack)} + * + * @param aStack Assume valid. Will be mutated. Take over the ownership. Caller should not retain a reference to + * this stack if the call returns true. + * @return true if stack is fully accepted. false is stack is partially accepted or nothing is accepted + */ + public boolean storeAll(ItemStack aStack) { + markDirty(); + + if (lockedItem != null && !lockedItem.isItemEqual(aStack)) { + return false; + } + + for (int i = 0, mInventoryLength = mInventory.length; i < mInventoryLength && aStack.stackSize > 0; i++) { + ItemStack tSlot = mInventory[i]; + if (GTUtility.isStackInvalid(tSlot)) { + int tRealStackLimit = Math.min(getInventoryStackLimit(), aStack.getMaxStackSize()); + if (aStack.stackSize <= tRealStackLimit) { + mInventory[i] = aStack; + return true; + } + mInventory[i] = aStack.splitStack(tRealStackLimit); + } else { + int tRealStackLimit = Math.min(getInventoryStackLimit(), tSlot.getMaxStackSize()); + if (tSlot.stackSize < tRealStackLimit && tSlot.isItemEqual(aStack) + && ItemStack.areItemStackTagsEqual(tSlot, aStack)) { + if (aStack.stackSize + tSlot.stackSize <= tRealStackLimit) { + mInventory[i].stackSize += aStack.stackSize; + return true; + } else { + // more to serve + aStack.stackSize -= tRealStackLimit - tSlot.stackSize; + mInventory[i].stackSize = tRealStackLimit; + } + } + } + } + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing(); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && (aTick & 0x7) == 0) { + final IInventory tTileEntity = aBaseMetaTileEntity + .getIInventoryAtSide(aBaseMetaTileEntity.getFrontFacing()); + if (tTileEntity != null) { + moveMultipleItemStacks( + aBaseMetaTileEntity, + tTileEntity, + aBaseMetaTileEntity.getFrontFacing(), + aBaseMetaTileEntity.getBackFacing(), + null, + false, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1, + mInventory.length); + 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); + if (lockedItem != null) { + aNBT.setTag(LOCKED_ITEM_NBT_KEY, lockedItem.writeToNBT(new NBTTagCompound())); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey(LOCKED_ITEM_NBT_KEY)) { + lockedItem = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag(LOCKED_ITEM_NBT_KEY)); + } + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + switch (mTier) { + case 0 -> getBaseMetaTileEntity().add1by1Slot(builder); + case 1 -> getBaseMetaTileEntity().add2by2Slots(builder); + case 2 -> getBaseMetaTileEntity().add3by3Slots(builder); + default -> getBaseMetaTileEntity().add4by4Slots(builder); + } + + if (acceptsItemLock()) { + builder.widget( + new PhantomItemButton(this).setPos(getGUIWidth() - 25, 40) + .setBackground(PhantomItemButton.FILTER_BACKGROUND)); + } + } + + @Override + public void setLockedItem(@Nullable ItemStack itemStack) { + if (itemStack == null) { + clearLock(); + } else { + lockedItem = ItemHandlerHelper.copyStackWithSize(itemStack, 1); + } + } + + @Nullable + @Override + public ItemStack getLockedItem() { + return lockedItem; + } + + @Override + public void clearLock() { + lockedItem = null; + } + + @Override + public boolean isLocked() { + return lockedItem != null; + } + + @Override + public boolean acceptsItemLock() { + return true; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchQuadrupleHumongous.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchQuadrupleHumongous.java new file mode 100644 index 0000000000..b0040d0c6a --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEHatchQuadrupleHumongous.java @@ -0,0 +1,27 @@ +package gregtech.api.metatileentity.implementations; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; + +public class MTEHatchQuadrupleHumongous extends MTEHatchMultiInput { + + public MTEHatchQuadrupleHumongous(int aID, int aSlot, String aName, String aNameRegional) { + super(aID, aSlot, aName, aNameRegional, 13); + } + + public MTEHatchQuadrupleHumongous(String aName, int aSlot, int aTier, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aSlot, aTier, aDescription, aTextures); + } + + @Override + public int getCapacityPerTank(int aTier, int aSlot) { + return 500_000_000; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchQuadrupleHumongous(mName, getMaxType(), mTier, mDescriptionArray, mTextures); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEItem.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEItem.java new file mode 100644 index 0000000000..ba804e834e --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEItem.java @@ -0,0 +1,523 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.ALL_VALID_SIDES; +import static gregtech.api.enums.Textures.BlockIcons.PIPE_RESTRICTOR; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityDispenser; +import net.minecraft.tileentity.TileEntityHopper; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.GTMod; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.metatileentity.IMetaTileEntityItemPipe; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.GTClient; +import gregtech.common.covers.CoverInfo; + +public class MTEItem extends MetaPipeEntity implements IMetaTileEntityItemPipe { + + public final float mThickNess; + public final Materials mMaterial; + public final int mStepSize; + public final int mTickTime; + public int mTransferredItems = 0; + public long mCurrentTransferStartTick = 0; + public ForgeDirection mLastReceivedFrom = ForgeDirection.UNKNOWN, oLastReceivedFrom = ForgeDirection.UNKNOWN; + public boolean mIsRestrictive = false; + private int[] cacheSides; + + public MTEItem(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, + int aInvSlotCount, int aStepSize, boolean aIsRestrictive, int aTickTime) { + super(aID, aName, aNameRegional, aInvSlotCount, false); + mIsRestrictive = aIsRestrictive; + mThickNess = aThickNess; + mMaterial = aMaterial; + mStepSize = aStepSize; + mTickTime = aTickTime; + addInfo(aID); + } + + public MTEItem(int aID, String aName, String aNameRegional, float aThickNess, Materials aMaterial, + int aInvSlotCount, int aStepSize, boolean aIsRestrictive) { + this(aID, aName, aNameRegional, aThickNess, aMaterial, aInvSlotCount, aStepSize, aIsRestrictive, 20); + } + + public MTEItem(String aName, float aThickNess, Materials aMaterial, int aInvSlotCount, int aStepSize, + boolean aIsRestrictive, int aTickTime) { + super(aName, aInvSlotCount); + mIsRestrictive = aIsRestrictive; + mThickNess = aThickNess; + mMaterial = aMaterial; + mStepSize = aStepSize; + mTickTime = aTickTime; + } + + @Override + public byte getTileEntityBaseType() { + return (byte) (mMaterial == null ? 4 : (byte) (4) + Math.max(0, Math.min(3, mMaterial.mToolQuality))); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEItem(mName, mThickNess, mMaterial, mInventory.length, mStepSize, mIsRestrictive, mTickTime); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, + int aColorIndex, boolean aConnected, boolean redstoneLevel) { + if (mIsRestrictive) { + if (aConnected) { + float tThickNess = getThickNess(); + if (tThickNess < 0.124F) return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; + if (tThickNess < 0.374F) // 0.375 + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipeTiny.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; + if (tThickNess < 0.499F) // 0.500 + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipeSmall.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; + if (tThickNess < 0.749F) // 0.750 + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipeMedium.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; + if (tThickNess < 0.874F) // 0.825 + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipeLarge.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipeHuge.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; + } + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), TextureFactory.of(PIPE_RESTRICTOR) }; + } + if (aConnected) { + float tThickNess = getThickNess(); + if (tThickNess < 0.124F) return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; + if (tThickNess < 0.374F) // 0.375 + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipeTiny.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; + if (tThickNess < 0.499F) // 0.500 + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipeSmall.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; + if (tThickNess < 0.749F) // 0.750 + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipeMedium.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; + if (tThickNess < 0.874F) // 0.825 + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipeLarge.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipeHuge.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; + } + return new ITexture[] { TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return false; + } + + @Override + public boolean isValidSlot(int ignoredSlotIndex) { + return true; + } + + @Override + public final boolean renderInside(ForgeDirection side) { + return false; + } + + @Override + public int getProgresstime() { + return getPipeContent() * 64; + } + + @Override + public int maxProgresstime() { + return getMaxPipeCapacity() * 64; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setByte("mLastReceivedFrom", (byte) mLastReceivedFrom.ordinal()); + if (GTMod.gregtechproxy.gt6Pipe) aNBT.setByte("mConnections", mConnections); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mLastReceivedFrom = ForgeDirection.getOrientation(aNBT.getByte("mLastReceivedFrom")); + if (GTMod.gregtechproxy.gt6Pipe) { + mConnections = aNBT.getByte("mConnections"); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && (aTick - mCurrentTransferStartTick) % 10 == 0) { + if ((aTick - mCurrentTransferStartTick) % mTickTime == 0) { + mTransferredItems = 0; + mCurrentTransferStartTick = 0; + } + + if (!GTMod.gregtechproxy.gt6Pipe || mCheckConnections) checkConnections(); + + if (oLastReceivedFrom == mLastReceivedFrom) { + doTickProfilingInThisTick = false; + + final ArrayList tPipeList = new ArrayList<>(); + + for (boolean temp = true; temp && !isInventoryEmpty() && pipeCapacityCheck();) { + temp = false; + tPipeList.clear(); + for (IMetaTileEntityItemPipe tTileEntity : GTUtility + .sortMapByValuesAcending( + IMetaTileEntityItemPipe.Util.scanPipes(this, new HashMap<>(), 0, false, false)) + .keySet()) { + if (temp) break; + tPipeList.add(tTileEntity); + while (!temp && !isInventoryEmpty() && tTileEntity.sendItemStack(aBaseMetaTileEntity)) + for (IMetaTileEntityItemPipe tPipe : tPipeList) + if (!tPipe.incrementTransferCounter(1)) temp = true; + } + } + } + + if (isInventoryEmpty()) mLastReceivedFrom = ForgeDirection.UNKNOWN; + oLastReceivedFrom = mLastReceivedFrom; + } + } + + @Override + public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer entityPlayer, + float aX, float aY, float aZ) { + if (GTMod.gregtechproxy.gt6Pipe) { + final ForgeDirection tSide = GTUtility.determineWrenchingSide(side, aX, aY, aZ); + if (isConnectedAtSide(tSide)) { + disconnect(tSide); + GTUtility.sendChatToPlayer(entityPlayer, GTUtility.trans("215", "Disconnected")); + } else { + if (connect(tSide) > 0) GTUtility.sendChatToPlayer(entityPlayer, GTUtility.trans("214", "Connected")); + } + return true; + } + return false; + } + + @Override + public boolean letsIn(CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return coverBehavior.letsItemsIn(side, aCoverID, aCoverVariable, -1, aTileEntity); + } + + @Override + public boolean letsOut(CoverBehavior coverBehavior, ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return coverBehavior.letsItemsOut(side, aCoverID, aCoverVariable, -1, aTileEntity); + } + + @Override + public boolean letsIn(CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, + ISerializableObject aCoverVariable, ICoverable aTileEntity) { + return coverBehavior.letsItemsIn(side, aCoverID, aCoverVariable, -1, aTileEntity); + } + + @Override + public boolean letsOut(CoverBehaviorBase coverBehavior, ForgeDirection side, int aCoverID, + ISerializableObject aCoverVariable, ICoverable aTileEntity) { + return coverBehavior.letsItemsOut(side, aCoverID, aCoverVariable, -1, aTileEntity); + } + + @Override + public boolean letsIn(CoverInfo coverInfo) { + return coverInfo.letsItemsOut(-1); + } + + @Override + public boolean letsOut(CoverInfo coverInfo) { + return coverInfo.letsItemsOut(-1); + } + + @Override + public boolean canConnect(ForgeDirection side, TileEntity tileEntity) { + if (tileEntity == null) return false; + + final ForgeDirection oppositeSide = side.getOpposite(); + boolean connectable = GTUtility.isConnectableNonInventoryPipe(tileEntity, oppositeSide); + + final IGregTechTileEntity gTileEntity = (tileEntity instanceof IGregTechTileEntity) + ? (IGregTechTileEntity) tileEntity + : null; + if (gTileEntity != null) { + if (gTileEntity.getMetaTileEntity() == null) return false; + if (gTileEntity.getMetaTileEntity() + .connectsToItemPipe(oppositeSide)) return true; + connectable = true; + } + + if (tileEntity instanceof IInventory) { + if (((IInventory) tileEntity).getSizeInventory() <= 0) return false; + connectable = true; + } + if (tileEntity instanceof ISidedInventory) { + final int[] tSlots = ((ISidedInventory) tileEntity).getAccessibleSlotsFromSide(oppositeSide.ordinal()); + if (tSlots == null || tSlots.length == 0) return false; + connectable = true; + } + + return connectable; + } + + @Override + public boolean getGT6StyleConnection() { + // Yes if GT6 pipes are enabled + return GTMod.gregtechproxy.gt6Pipe; + } + + @Override + public boolean incrementTransferCounter(int aIncrement) { + if (mTransferredItems == 0) mCurrentTransferStartTick = getBaseMetaTileEntity().getTimer(); + mTransferredItems += aIncrement; + return pipeCapacityCheck(); + } + + @Override + public boolean sendItemStack(Object aSender) { + if (pipeCapacityCheck()) { + final byte tOffset = (byte) getBaseMetaTileEntity().getRandomNumber(6); + for (final byte i : ALL_VALID_SIDES) { + final ForgeDirection tSide = ForgeDirection.getOrientation((i + tOffset) % 6); + if (isConnectedAtSide(tSide) + && (isInventoryEmpty() || (tSide != mLastReceivedFrom || aSender != getBaseMetaTileEntity()))) { + if (insertItemStackIntoTileEntity(aSender, tSide)) return true; + } + } + } + return false; + } + + @Override + public boolean insertItemStackIntoTileEntity(Object aSender, ForgeDirection side) { + if (getBaseMetaTileEntity().getCoverInfoAtSide(side) + .letsItemsOut(-1)) { + final TileEntity tInventory = getBaseMetaTileEntity().getTileEntityAtSide(side); + if (tInventory != null && !(tInventory instanceof BaseMetaPipeEntity)) { + if ((!(tInventory instanceof TileEntityHopper) && !(tInventory instanceof TileEntityDispenser)) + || getBaseMetaTileEntity().getMetaIDAtSide(side) != side.getOpposite() + .ordinal()) { + return GTUtility.moveMultipleItemStacks( + aSender, + tInventory, + ForgeDirection.UNKNOWN, + side.getOpposite(), + null, + false, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1, + 1) > 0; + } + } + } + return false; + } + + @Override + public boolean pipeCapacityCheck() { + return mTransferredItems <= 0 || getPipeContent() < getMaxPipeCapacity(); + } + + private int getPipeContent() { + return mTransferredItems; + } + + private int getMaxPipeCapacity() { + return Math.max(1, getPipeCapacity()); + } + + /** + * Amount of ItemStacks this Pipe can conduct per Second. + */ + public int getPipeCapacity() { + return mInventory.length; + } + + @Override + public int getStepSize() { + return mStepSize; + } + + @Override + public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { + return isConnectedAtSide(ForgeDirection.getOrientation(ordinalSide)) + && super.canInsertItem(aIndex, aStack, ordinalSide); + } + + @Override + public boolean canExtractItem(int aIndex, ItemStack aStack, int ordinalSide) { + return isConnectedAtSide(ForgeDirection.getOrientation(ordinalSide)); + } + + @Override + public int[] getAccessibleSlotsFromSide(int ordinalSide) { + final IGregTechTileEntity tTileEntity = getBaseMetaTileEntity(); + final CoverInfo coverInfo = tTileEntity.getCoverInfoAtSide(ForgeDirection.getOrientation(ordinalSide)); + final boolean tAllow = coverInfo.letsItemsIn(-2) || coverInfo.letsItemsOut(-2); + if (tAllow) { + if (cacheSides == null) cacheSides = super.getAccessibleSlotsFromSide(ordinalSide); + return cacheSides; + } else { + return GTValues.emptyIntArray; + } + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return isConnectedAtSide(side); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (!isConnectedAtSide(side)) return false; + if (isInventoryEmpty()) mLastReceivedFrom = side; + return mLastReceivedFrom == side && mInventory[aIndex] == null; + } + + @Override + public String[] getDescription() { + if (mTickTime == 20) return new String[] { "Item Capacity: %%%" + getMaxPipeCapacity() + "%%% Stacks/sec", + "Routing Value: %%%" + GTUtility.formatNumbers(mStepSize) }; + else if (mTickTime % 20 == 0) return new String[] { + "Item Capacity: %%%" + getMaxPipeCapacity() + "%%% Stacks/%%%" + (mTickTime / 20) + "%%% sec", + "Routing Value: %%%" + GTUtility.formatNumbers(mStepSize) }; + else return new String[] { + "Item Capacity: %%%" + getMaxPipeCapacity() + "%%% Stacks/%%%" + mTickTime + "%%% ticks", + "Routing Value: %%%" + GTUtility.formatNumbers(mStepSize) }; + } + + private boolean isInventoryEmpty() { + for (ItemStack tStack : mInventory) if (tStack != null) return false; + return true; + } + + @Override + public float getThickNess() { + if (GTMod.instance.isClientSide() && (GTClient.hideValue & 0x1) != 0) return 0.0625F; + return mThickNess; + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + if (GTMod.instance.isClientSide() && (GTClient.hideValue & 0x2) != 0) + return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1); + else return getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + } + + private AxisAlignedBB getActualCollisionBoundingBoxFromPool(World ignoredAWorld, int aX, int aY, int aZ) { + final float tSpace = (1f - mThickNess) / 2; + float spaceDown = tSpace; + float spaceUp = 1f - tSpace; + float spaceNorth = tSpace; + float spaceSouth = 1f - tSpace; + float spaceWest = tSpace; + float spaceEast = 1f - tSpace; + + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.DOWN) != 0) { + spaceDown = spaceNorth = spaceWest = 0; + spaceSouth = spaceEast = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) { + spaceNorth = spaceWest = 0; + spaceUp = spaceSouth = spaceEast = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) { + spaceDown = spaceNorth = spaceWest = 0; + spaceUp = spaceEast = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) { + spaceDown = spaceWest = 0; + spaceUp = spaceSouth = spaceEast = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) { + spaceDown = spaceNorth = spaceWest = 0; + spaceUp = spaceSouth = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) { + spaceDown = spaceNorth = 0; + spaceUp = spaceSouth = spaceEast = 1; + } + + final byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; + if ((tConn & ForgeDirection.DOWN.flag) != 0) spaceDown = 0f; + if ((tConn & ForgeDirection.UP.flag) != 0) spaceUp = 1f; + if ((tConn & ForgeDirection.NORTH.flag) != 0) spaceNorth = 0f; + if ((tConn & ForgeDirection.SOUTH.flag) != 0) spaceSouth = 1f; + if ((tConn & ForgeDirection.WEST.flag) != 0) spaceWest = 0f; + if ((tConn & ForgeDirection.EAST.flag) != 0) spaceEast = 1f; + + return AxisAlignedBB.getBoundingBox( + aX + spaceWest, + aY + spaceDown, + aZ + spaceNorth, + aX + spaceEast, + aY + spaceUp, + aZ + spaceSouth); + } + + @Override + public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, + List outputAABB, Entity collider) { + super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); + if (GTMod.instance.isClientSide() && (GTClient.hideValue & 0x2) != 0) { + final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb); + } + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java new file mode 100644 index 0000000000..ab70cf25ae --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEMultiBlockBase.java @@ -0,0 +1,2742 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static gregtech.api.util.GTUtility.formatNumbers; +import static mcp.mobius.waila.api.SpecialChars.GREEN; +import static mcp.mobius.waila.api.SpecialChars.RED; +import static mcp.mobius.waila.api.SpecialChars.RESET; + +import java.time.Duration; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.IntConsumer; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.TestOnly; + +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.VoidingMode; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.fluid.IFluidStore; +import gregtech.api.interfaces.metatileentity.IItemLockable; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.modularui.IBindPlayerInventoryUI; +import gregtech.api.interfaces.modularui.IControllerWithOptionalFeatures; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTItemStack; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SingleRecipeCheck; +import gregtech.api.util.ExoticEnergyInputHelper; +import gregtech.api.util.GTClientPreference; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtil; +import gregtech.api.util.GTUtility; +import gregtech.api.util.GTWaila; +import gregtech.api.util.OutputHatchWrapper; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.ParallelHelper; +import gregtech.api.util.VoidProtectionHelper; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.client.GTSoundLoop; +import gregtech.common.Pollution; +import gregtech.common.config.machinestats.ConfigMachines; +import gregtech.common.gui.modularui.widget.CheckRecipeResultSyncer; +import gregtech.common.gui.modularui.widget.ShutDownReasonSyncer; +import gregtech.common.items.MetaGeneratedTool01; +import gregtech.common.tileentities.machines.IDualInputHatch; +import gregtech.common.tileentities.machines.IDualInputInventory; +import gregtech.common.tileentities.machines.IRecipeProcessingAwareHatch; +import gregtech.common.tileentities.machines.ISmartInputHatch; +import gregtech.common.tileentities.machines.MTEHatchCraftingInputME; +import gregtech.common.tileentities.machines.MTEHatchInputBusME; +import gregtech.common.tileentities.machines.MTEHatchInputME; +import gregtech.common.tileentities.machines.MTEHatchOutputBusME; +import gregtech.common.tileentities.machines.MTEHatchOutputME; +import gregtech.common.tileentities.machines.multi.MTELargeTurbine; +import it.unimi.dsi.fastutil.objects.Object2ReferenceOpenHashMap; +import it.unimi.dsi.fastutil.objects.Reference2ReferenceOpenHashMap; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public abstract class MTEMultiBlockBase extends MetaTileEntity + implements IControllerWithOptionalFeatures, IAddGregtechLogo, IAddUIWidgets, IBindPlayerInventoryUI { + + public static boolean disableMaintenance; + public boolean hasMaintenanceChecks = getDefaultHasMaintenanceChecks(); + public boolean mMachine = false, mWrench = false, mScrewdriver = false, mSoftHammer = false, mHardHammer = false, + mSolderingTool = false, mCrowbar = false, mRunningOnLoad = false; + public boolean mStructureChanged = false; + public int mPollution = 0, mProgresstime = 0, mMaxProgresstime = 0, mEUt = 0, mEfficiencyIncrease = 0, + mStartUpCheck = 100, mRuntime = 0, mEfficiency = 0; + public volatile boolean mUpdated = false; + public int mUpdate = 0; + public ItemStack[] mOutputItems = null; + public FluidStack[] mOutputFluids = null; + public String mNEI; + public int damageFactorLow = 5; + public float damageFactorHigh = 0.6f; + public int machineMode = 0; + public List machineModeIcons = new ArrayList(); + + public boolean mLockedToSingleRecipe = getDefaultRecipeLockingMode(); + protected boolean inputSeparation = getDefaultInputSeparationMode(); + protected VoidingMode voidingMode = getDefaultVoidingMode(); + protected boolean batchMode = getDefaultBatchMode(); + protected @Nonnull CheckRecipeResult checkRecipeResult = CheckRecipeResultRegistry.NONE; + + protected static final String INPUT_SEPARATION_NBT_KEY = "inputSeparation"; + protected static final String VOID_EXCESS_NBT_KEY = "voidExcess"; + protected static final String VOIDING_MODE_NBT_KEY = "voidingMode"; + protected static final String BATCH_MODE_NBT_KEY = "batchMode"; + protected SingleRecipeCheck mSingleRecipeCheck = null; + + public ArrayList mInputHatches = new ArrayList<>(); + public ArrayList mOutputHatches = new ArrayList<>(); + public ArrayList mInputBusses = new ArrayList<>(); + public ArrayList mOutputBusses = new ArrayList<>(); + public ArrayList mDualInputHatches = new ArrayList<>(); + public ArrayList mSmartInputHatches = new ArrayList<>(); + public ArrayList mDynamoHatches = new ArrayList<>(); + public ArrayList mMufflerHatches = new ArrayList<>(); + public ArrayList mEnergyHatches = new ArrayList<>(); + public ArrayList mMaintenanceHatches = new ArrayList<>(); + protected List mExoticEnergyHatches = new ArrayList<>(); + protected final ProcessingLogic processingLogic; + @SideOnly(Side.CLIENT) + protected GTSoundLoop activitySoundLoop; + + protected long mLastWorkingTick = 0, mTotalRunTime = 0; + private static final int CHECK_INTERVAL = 100; // How often should we check for a new recipe on an idle machine? + private final int randomTickOffset = (int) (Math.random() * CHECK_INTERVAL + 1); + + protected static final byte INTERRUPT_SOUND_INDEX = 8; + protected static final byte PROCESS_START_SOUND_INDEX = 1; + + public MTEMultiBlockBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 2); + this.processingLogic = null; + MTEMultiBlockBase.disableMaintenance = ConfigMachines.disableMaintenanceChecks; + this.damageFactorLow = ConfigMachines.damageFactorLow; + this.damageFactorHigh = ConfigMachines.damageFactorHigh; + this.mNEI = ""; + if (!shouldCheckMaintenance()) fixAllIssues(); + } + + public MTEMultiBlockBase(String aName) { + super(aName, 2); + this.processingLogic = createProcessingLogic(); + MTEMultiBlockBase.disableMaintenance = ConfigMachines.disableMaintenanceChecks; + this.damageFactorLow = ConfigMachines.damageFactorLow; + this.damageFactorHigh = ConfigMachines.damageFactorHigh; + if (!shouldCheckMaintenance()) fixAllIssues(); + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCoverID) { + return side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (supportsSingleRecipeLocking()) { + mLockedToSingleRecipe = !mLockedToSingleRecipe; + if (mLockedToSingleRecipe) { + GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("223", "Single recipe locking enabled. Will lock to next recipe.")); + } else { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("220", "Single recipe locking disabled.")); + mSingleRecipeCheck = null; + } + } + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex > 0; + } + + @Override + public int getProgresstime() { + return mProgresstime; + } + + @Override + public int maxProgresstime() { + return mMaxProgresstime; + } + + public long getTotalRuntimeInTicks() { + return mTotalRunTime; + } + + @Override + public int increaseProgress(int aProgress) { + return aProgress; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mEUt", mEUt); + aNBT.setInteger("mProgresstime", mProgresstime); + aNBT.setInteger("mMaxProgresstime", mMaxProgresstime); + aNBT.setInteger("mEfficiencyIncrease", mEfficiencyIncrease); + aNBT.setInteger("mEfficiency", mEfficiency); + aNBT.setInteger("mPollution", mPollution); + aNBT.setInteger("mRuntime", mRuntime); + aNBT.setLong("mTotalRunTime", mTotalRunTime); + aNBT.setLong("mLastWorkingTick", mLastWorkingTick); + aNBT.setString("checkRecipeResultID", checkRecipeResult.getID()); + aNBT.setTag("checkRecipeResult", checkRecipeResult.writeToNBT(new NBTTagCompound())); + + if (supportsMachineModeSwitch()) { + aNBT.setInteger("machineMode", machineMode); + } + + if (supportsSingleRecipeLocking()) { + aNBT.setBoolean("mLockedToSingleRecipe", mLockedToSingleRecipe); + if (mLockedToSingleRecipe && mSingleRecipeCheck != null) + aNBT.setTag("mSingleRecipeCheck", mSingleRecipeCheck.writeToNBT()); + } + + if (mOutputItems != null) { + aNBT.setInteger("mOutputItemsLength", mOutputItems.length); + for (int i = 0; i < mOutputItems.length; i++) if (mOutputItems[i] != null) { + GTUtility.saveItem(aNBT, "mOutputItem" + i, mOutputItems[i]); + } + } + if (mOutputFluids != null) { + aNBT.setInteger("mOutputFluidsLength", mOutputFluids.length); + for (int i = 0; i < mOutputFluids.length; i++) if (mOutputFluids[i] != null) { + NBTTagCompound tNBT = new NBTTagCompound(); + mOutputFluids[i].writeToNBT(tNBT); + aNBT.setTag("mOutputFluids" + i, tNBT); + } + } + aNBT.setBoolean("mWrench", mWrench); + aNBT.setBoolean("mScrewdriver", mScrewdriver); + aNBT.setBoolean("mSoftHammer", mSoftHammer); + aNBT.setBoolean("mHardHammer", mHardHammer); + aNBT.setBoolean("mSolderingTool", mSolderingTool); + aNBT.setBoolean("mCrowbar", mCrowbar); + aNBT.setBoolean(BATCH_MODE_NBT_KEY, batchMode); + aNBT.setBoolean(INPUT_SEPARATION_NBT_KEY, inputSeparation); + aNBT.setString(VOIDING_MODE_NBT_KEY, voidingMode.name); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mEUt = aNBT.getInteger("mEUt"); + mProgresstime = aNBT.getInteger("mProgresstime"); + mMaxProgresstime = aNBT.getInteger("mMaxProgresstime"); + if (mMaxProgresstime > 0) mRunningOnLoad = true; + mEfficiencyIncrease = aNBT.getInteger("mEfficiencyIncrease"); + mEfficiency = aNBT.getInteger("mEfficiency"); + mPollution = aNBT.getInteger("mPollution"); + mRuntime = aNBT.getInteger("mRuntime"); + mTotalRunTime = aNBT.getLong("mTotalRunTime"); + mLastWorkingTick = aNBT.getLong("mLastWorkingTick"); + + String checkRecipeResultID = aNBT.getString("checkRecipeResultID"); + if (CheckRecipeResultRegistry.isRegistered(checkRecipeResultID)) { + CheckRecipeResult result = CheckRecipeResultRegistry.getSampleFromRegistry(checkRecipeResultID) + .newInstance(); + result.readFromNBT(aNBT.getCompoundTag("checkRecipeResult")); + checkRecipeResult = result; + } + + if (aNBT.hasKey("machineMode")) { + machineMode = aNBT.getInteger("machineMode"); + } + if (supportsSingleRecipeLocking()) { + mLockedToSingleRecipe = aNBT.getBoolean("mLockedToSingleRecipe"); + if (mLockedToSingleRecipe && aNBT.hasKey("mSingleRecipeCheck", Constants.NBT.TAG_COMPOUND)) { + SingleRecipeCheck c = loadSingleRecipeChecker(aNBT.getCompoundTag("mSingleRecipeCheck")); + if (c != null) mSingleRecipeCheck = c; + // the old recipe is gone. we disable the machine to prevent making garbage in case of shared inputs + // maybe use a better way to inform player in the future. + else getBaseMetaTileEntity().disableWorking(); + } + } + batchMode = aNBT.getBoolean(BATCH_MODE_NBT_KEY); + inputSeparation = aNBT.getBoolean(INPUT_SEPARATION_NBT_KEY); + if (aNBT.hasKey(VOIDING_MODE_NBT_KEY, Constants.NBT.TAG_STRING)) { + voidingMode = VoidingMode.fromName(aNBT.getString(VOIDING_MODE_NBT_KEY)); + } else if (aNBT.hasKey(VOID_EXCESS_NBT_KEY)) { + // backward compatibility + voidingMode = aNBT.getBoolean(VOID_EXCESS_NBT_KEY) ? VoidingMode.VOID_ALL : VoidingMode.VOID_NONE; + } + if (!getAllowedVoidingModes().contains(voidingMode)) voidingMode = getDefaultVoidingMode(); + + int aOutputItemsLength = aNBT.getInteger("mOutputItemsLength"); + if (aOutputItemsLength > 0) { + mOutputItems = new ItemStack[aOutputItemsLength]; + for (int i = 0; i < mOutputItems.length; i++) mOutputItems[i] = GTUtility.loadItem(aNBT, "mOutputItem" + i); + } + + int aOutputFluidsLength = aNBT.getInteger("mOutputFluidsLength"); + if (aOutputFluidsLength > 0) { + mOutputFluids = new FluidStack[aOutputFluidsLength]; + for (int i = 0; i < mOutputFluids.length; i++) + mOutputFluids[i] = GTUtility.loadFluid(aNBT, "mOutputFluids" + i); + } + if (shouldCheckMaintenance()) { + mWrench = aNBT.getBoolean("mWrench"); + mScrewdriver = aNBT.getBoolean("mScrewdriver"); + mSoftHammer = aNBT.getBoolean("mSoftHammer"); + mHardHammer = aNBT.getBoolean("mHardHammer"); + mSolderingTool = aNBT.getBoolean("mSolderingTool"); + mCrowbar = aNBT.getBoolean("mCrowbar"); + } else fixAllIssues(); + } + + protected SingleRecipeCheck loadSingleRecipeChecker(NBTTagCompound aNBT) { + return SingleRecipeCheck.tryLoad(getRecipeMap(), aNBT); + } + + public boolean saveOtherHatchConfiguration(EntityPlayer player) { + return true; + } + + public boolean loadOtherHatchConfiguration(EntityPlayer player) { + return true; + } + + @Override + public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isServerSide() && GTUtil.saveMultiblockInputConfiguration(this, aPlayer)) { + aPlayer.addChatComponentMessage(new ChatComponentTranslation("GT5U.MULTI_MACHINE_CONFIG.SAVE")); + return; + } + super.onLeftclick(aBaseMetaTileEntity, aPlayer); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (GTUtil.hasMultiblockInputConfiguration(aPlayer.getHeldItem())) { + if (aBaseMetaTileEntity.isServerSide()) { + if (GTUtil.loadMultiblockInputConfiguration(this, aPlayer)) { + aPlayer.addChatComponentMessage(new ChatComponentTranslation("GT5U.MULTI_MACHINE_CONFIG.LOAD")); + } else { + aPlayer + .addChatComponentMessage(new ChatComponentTranslation("GT5U.MULTI_MACHINE_CONFIG.LOAD.FAIL")); + } + } + return true; + } + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public byte getTileEntityBaseType() { + return 2; + } + + /** + * Set the structure as having changed, and trigger an update. + */ + public void onStructureChange() { + mStructureChanged = true; + } + + @Override + public void onMachineBlockUpdate() { + mUpdated = true; + } + + /** + * ClearHatches as a part of structure check. If your multiblock has any hatches that need clearing override this + * method, call super, and clear your own hatches + */ + public void clearHatches() { + mInputHatches.clear(); + mInputBusses.clear(); + mOutputHatches.clear(); + mOutputBusses.clear(); + mDynamoHatches.clear(); + mEnergyHatches.clear(); + setMufflers(false); + mMufflerHatches.clear(); + mMaintenanceHatches.clear(); + mDualInputHatches.clear(); + mSmartInputHatches.clear(); + } + + public boolean checkStructure(boolean aForceReset) { + return checkStructure(aForceReset, getBaseMetaTileEntity()); + } + + public boolean checkStructure(boolean aForceReset, IGregTechTileEntity aBaseMetaTileEntity) { + if (!aBaseMetaTileEntity.isServerSide()) return mMachine; + // Only trigger an update if forced (from onPostTick, generally), or if the structure has changed + if ((mStructureChanged || aForceReset)) { + clearHatches(); + mMachine = checkMachine(aBaseMetaTileEntity, mInventory[1]); + } + mStructureChanged = false; + return mMachine; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + // Time Counter + mTotalRunTime++; + if (mEfficiency < 0) mEfficiency = 0; + if (mUpdated) { + // duct tape fix for too many updates on an overloaded server, causing the structure check to not run + if (mUpdate <= 0) mUpdate = 50; + mUpdated = false; + } + if (--mUpdate == 0 || --mStartUpCheck == 0) { + checkStructure(true, aBaseMetaTileEntity); + } + + if (mStartUpCheck < 0) { + if (mMachine) { + checkMaintenance(); + if (getRepairStatus() > 0) { + runMachine(aBaseMetaTileEntity, aTick); + } else if (aBaseMetaTileEntity.isAllowedToWork()) { + stopMachine(ShutDownReasonRegistry.NO_REPAIR); + } + } else if (aBaseMetaTileEntity.isAllowedToWork()) { + stopMachine(ShutDownReasonRegistry.STRUCTURE_INCOMPLETE); + } + } + aBaseMetaTileEntity.setErrorDisplayID( + (aBaseMetaTileEntity.getErrorDisplayID() & ~127) | (mWrench ? 0 : 1) + | (mScrewdriver ? 0 : 2) + | (mSoftHammer ? 0 : 4) + | (mHardHammer ? 0 : 8) + | (mSolderingTool ? 0 : 16) + | (mCrowbar ? 0 : 32) + | (mMachine ? 0 : 64)); + aBaseMetaTileEntity.setActive(mMaxProgresstime > 0); + boolean active = aBaseMetaTileEntity.isActive() && mPollution > 0; + setMufflers(active); + } else { + if (!aBaseMetaTileEntity.hasMufflerUpgrade()) { + doActivitySound(getActivitySoundLoop()); + } + } + } + + @Override + public void onTickFail(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onTickFail(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + aBaseMetaTileEntity.disableWorking(); + checkRecipeResult = CheckRecipeResultRegistry.CRASH; + } + } + + public void checkMaintenance() { + if (!shouldCheckMaintenance()) return; + + if (getRepairStatus() != getIdealStatus()) { + for (MTEHatchMaintenance tHatch : filterValidMTEs(mMaintenanceHatches)) { + if (tHatch.mAuto) tHatch.autoMaintainance(); + if (tHatch.mWrench) mWrench = true; + if (tHatch.mScrewdriver) mScrewdriver = true; + if (tHatch.mSoftHammer) mSoftHammer = true; + if (tHatch.mHardHammer) mHardHammer = true; + if (tHatch.mSolderingTool) mSolderingTool = true; + if (tHatch.mCrowbar) mCrowbar = true; + + tHatch.mWrench = false; + tHatch.mScrewdriver = false; + tHatch.mSoftHammer = false; + tHatch.mHardHammer = false; + tHatch.mSolderingTool = false; + tHatch.mCrowbar = false; + } + } + } + + /** + * Starts checking recipe with some operations needed to actually run the check. Overriding this without due care + * may result in dupe of items, hence it's marked as final. + *

+ * See {@link #createProcessingLogic()} or {@link #checkProcessing()} for what you want to override. + * + * @return If successfully found recipe and/or started processing + */ + protected final boolean checkRecipe() { + startRecipeProcessing(); + CheckRecipeResult result = checkProcessing(); + if (!CheckRecipeResultRegistry.isRegistered(result.getID())) { + throw new RuntimeException(String.format("Result %s is not registered for registry", result.getID())); + } + if (result.wasSuccessful()) { + sendStartMultiBlockSoundLoop(); + } + this.checkRecipeResult = result; + endRecipeProcessing(); + // Don't use `result` here because `endRecipeProcessing()` might mutate `this.checkRecipeResult` + return this.checkRecipeResult.wasSuccessful(); + } + + private boolean shouldCheckRecipeThisTick(long aTick) { + // do a recipe check if any crafting input hatch just got pushed in items + boolean shouldCheck = false; + // check all of them (i.e. do not return early) to reset the state of all of them. + for (IDualInputHatch craftingInputMe : mDualInputHatches) { + shouldCheck |= craftingInputMe.justUpdated(); + } + if (shouldCheck) return true; + // Do the same for Smart Input Hatches + for (ISmartInputHatch smartInputHatch : mSmartInputHatches) { + shouldCheck |= smartInputHatch.justUpdated(); + } + if (shouldCheck) return true; + + // Perform more frequent recipe change after the machine just shuts down. + long timeElapsed = mTotalRunTime - mLastWorkingTick; + + if (timeElapsed >= CHECK_INTERVAL) return (mTotalRunTime + randomTickOffset) % CHECK_INTERVAL == 0; + // Batch mode should be a lot less aggressive at recipe checking + if (!isBatchModeEnabled()) { + return timeElapsed == 5 || timeElapsed == 12 + || timeElapsed == 20 + || timeElapsed == 30 + || timeElapsed == 40 + || timeElapsed == 55 + || timeElapsed == 70 + || timeElapsed == 85; + } + return false; + } + + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (mMaxProgresstime > 0 && doRandomMaintenanceDamage()) { + if (onRunningTick(mInventory[1])) { + markDirty(); + if (!polluteEnvironment(getPollutionPerTick(mInventory[1]))) { + stopMachine(ShutDownReasonRegistry.POLLUTION_FAIL); + } + if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) { + if (mOutputItems != null) { + for (ItemStack tStack : mOutputItems) { + if (tStack != null) { + try { + GTMod.achievements.issueAchivementHatch( + aBaseMetaTileEntity.getWorld() + .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), + tStack); + } catch (Exception ignored) {} + addOutput(tStack); + } + } + mOutputItems = null; + } + if (mOutputFluids != null) { + addFluidOutputs(mOutputFluids); + if (mOutputFluids.length > 1) { + try { + GTMod.achievements.issueAchievement( + aBaseMetaTileEntity.getWorld() + .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), + "oilplant"); + } catch (Exception ignored) {} + } + mOutputFluids = null; + } + mEfficiency = Math.max( + 0, + Math.min( + mEfficiency + mEfficiencyIncrease, + getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000))); + mOutputItems = null; + mProgresstime = 0; + mMaxProgresstime = 0; + mEfficiencyIncrease = 0; + mLastWorkingTick = mTotalRunTime; + if (aBaseMetaTileEntity.isAllowedToWork()) { + checkRecipe(); + } + } + } + } else { + // Check if the machine is enabled in the first place! + if (aBaseMetaTileEntity.isAllowedToWork()) { + + if (shouldCheckRecipeThisTick(aTick) || aBaseMetaTileEntity.hasWorkJustBeenEnabled() + || aBaseMetaTileEntity.hasInventoryBeenModified()) { + if (checkRecipe()) { + markDirty(); + } + } + if (mMaxProgresstime <= 0) mEfficiency = Math.max(0, mEfficiency - 1000); + } + } + } + + public boolean polluteEnvironment(int aPollutionLevel) { + mPollution += aPollutionLevel; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + if (mPollution >= 10000) { + if (tHatch.polluteEnvironment(this)) { + mPollution -= 10000; + } + } else { + break; + } + } + return mPollution < 10000; + } + + protected void sendStartMultiBlockSoundLoop() { + if (getProcessStartSound() != null) { + sendLoopStart(PROCESS_START_SOUND_INDEX); + } + } + + @Override + public void doSound(byte aIndex, double aX, double aY, double aZ) { + super.doSound(aIndex, aX, aY, aZ); + switch (aIndex) { + case PROCESS_START_SOUND_INDEX -> { + if (getProcessStartSound() != null) + GTUtility.doSoundAtClient(getProcessStartSound(), getTimeBetweenProcessSounds(), 1.0F, aX, aY, aZ); + } + case INTERRUPT_SOUND_INDEX -> GTUtility + .doSoundAtClient(SoundResource.IC2_MACHINES_INTERRUPT_ONE, 100, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == PROCESS_START_SOUND_INDEX) { + if (getProcessStartSound() != null) + GTUtility.doSoundAtClient(getProcessStartSound(), getTimeBetweenProcessSounds(), 1.0F, aX, aY, aZ); + } + } + + @SideOnly(Side.CLIENT) + protected void doActivitySound(ResourceLocation activitySound) { + if (getBaseMetaTileEntity().isActive() && activitySound != null) { + if (activitySoundLoop == null) { + activitySoundLoop = new GTSoundLoop(activitySound, getBaseMetaTileEntity(), false, true); + Minecraft.getMinecraft() + .getSoundHandler() + .playSound(activitySoundLoop); + } + } else { + if (activitySoundLoop != null) { + activitySoundLoop = null; + } + } + } + + /** + * @return Time before the start process sound is played again + */ + protected int getTimeBetweenProcessSounds() { + return 100; + } + + /** + * @return Sound that will be played once, when the recipe check was valid + */ + protected SoundResource getProcessStartSound() { + return null; + } + + /** + * @return Sound that will be looped for as long as the machine is doing a recipe + */ + @SideOnly(Side.CLIENT) + protected ResourceLocation getActivitySoundLoop() { + return null; + } + + /** + * Called every tick the Machine runs + */ + public boolean onRunningTick(ItemStack aStack) { + if (mEUt > 0) { + addEnergyOutput(((long) mEUt * mEfficiency) / 10000); + return true; + } + if (mEUt < 0) { + if (!drainEnergyInput(getActualEnergyUsage())) { + stopMachine(ShutDownReasonRegistry.POWER_LOSS); + return false; + } + } + return true; + } + + protected long getActualEnergyUsage() { + return ((long) -mEUt * 10_000) / Math.max(1000, mEfficiency); + } + + /** + * Checks if this is a Correct Machine Part for this kind of Machine (Turbine Rotor for example) + */ + public abstract boolean isCorrectMachinePart(ItemStack aStack); + + /** + * @deprecated Use {@link #createProcessingLogic()} or {@link #checkProcessing()} + */ + @Deprecated + public boolean checkRecipe(ItemStack aStack) { + return false; + } + + /** + * Checks recipe and setup machine if it's successful. + *

+ * For generic machine working with recipemap, use {@link #createProcessingLogic()} to make use of shared codebase. + */ + @Nonnull + public CheckRecipeResult checkProcessing() { + // If no logic is found, try legacy checkRecipe + if (processingLogic == null) { + return checkRecipe(mInventory[1]) ? CheckRecipeResultRegistry.SUCCESSFUL + : CheckRecipeResultRegistry.NO_RECIPE; + } + + setupProcessingLogic(processingLogic); + + CheckRecipeResult result = doCheckRecipe(); + result = postCheckRecipe(result, processingLogic); + // inputs are consumed at this point + updateSlots(); + if (!result.wasSuccessful()) return result; + + mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + mEfficiencyIncrease = 10000; + mMaxProgresstime = processingLogic.getDuration(); + setEnergyUsage(processingLogic); + + mOutputItems = processingLogic.getOutputItems(); + mOutputFluids = processingLogic.getOutputFluids(); + + return result; + } + + /** + * @return If controller slot should be considered as inputs for {@link #doCheckRecipe} + */ + protected boolean canUseControllerSlotForRecipe() { + return true; + } + + /** + * Initializes processing logic for use. Unlike {@link #createProcessingLogic}, this method is called + * every time checking for recipes. + */ + protected void setupProcessingLogic(ProcessingLogic logic) { + logic.clear(); + logic.setMachine(this); + logic.setRecipeMapSupplier(this::getRecipeMap); + logic.setVoidProtection(protectsExcessItem(), protectsExcessFluid()); + logic.setBatchSize(isBatchModeEnabled() ? getMaxBatchSize() : 1); + logic.setRecipeLocking(this, isRecipeLockingEnabled()); + setProcessingLogicPower(logic); + } + + /** + * Initializes processing logic for use, specifically for power-related parameters. + * Unlike {@link #createProcessingLogic}, this method is called every time checking for recipes. + */ + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getAverageInputVoltage()); + logic.setAvailableAmperage(getMaxInputAmps()); + logic.setAmperageOC(mEnergyHatches.size() != 1); + } + + protected boolean supportsCraftingMEBuffer() { + return true; + } + + /** + * Iterates over hatches and tries to find recipe. Assume {@link #processingLogic} is already set up for use. + * If return value is successful, inputs are consumed. + */ + @Nonnull + protected CheckRecipeResult doCheckRecipe() { + CheckRecipeResult result = CheckRecipeResultRegistry.NO_RECIPE; + // check crafting input hatches first + if (supportsCraftingMEBuffer()) { + for (IDualInputHatch dualInputHatch : mDualInputHatches) { + for (var it = dualInputHatch.inventories(); it.hasNext();) { + IDualInputInventory slot = it.next(); + processingLogic.setInputItems(slot.getItemInputs()); + processingLogic.setInputFluids(slot.getFluidInputs()); + CheckRecipeResult foundResult = processingLogic.process(); + if (foundResult.wasSuccessful()) { + return foundResult; + } + if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { + // Recipe failed in interesting way, so remember that and continue searching + result = foundResult; + } + } + } + } + + processingLogic.setInputFluids(getStoredFluids()); + + if (isInputSeparationEnabled()) { + if (mInputBusses.isEmpty()) { + CheckRecipeResult foundResult = processingLogic.process(); + if (foundResult.wasSuccessful()) { + return foundResult; + } + if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { + // Recipe failed in interesting way, so remember that and continue searching + result = foundResult; + } + } else { + for (MTEHatchInputBus bus : mInputBusses) { + if (bus instanceof MTEHatchCraftingInputME) { + continue; + } + List inputItems = new ArrayList<>(); + for (int i = bus.getSizeInventory() - 1; i >= 0; i--) { + ItemStack stored = bus.getStackInSlot(i); + if (stored != null) { + inputItems.add(stored); + } + } + if (canUseControllerSlotForRecipe() && getControllerSlot() != null) { + inputItems.add(getControllerSlot()); + } + processingLogic.setInputItems(inputItems.toArray(new ItemStack[0])); + CheckRecipeResult foundResult = processingLogic.process(); + if (foundResult.wasSuccessful()) { + return foundResult; + } + if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { + // Recipe failed in interesting way, so remember that and continue searching + result = foundResult; + } + } + } + } else { + List inputItems = getStoredInputs(); + if (canUseControllerSlotForRecipe() && getControllerSlot() != null) { + inputItems.add(getControllerSlot()); + } + processingLogic.setInputItems(inputItems); + CheckRecipeResult foundResult = processingLogic.process(); + if (foundResult.wasSuccessful()) { + return foundResult; + } + if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { + // Recipe failed in interesting way, so remember that + result = foundResult; + } + } + return result; + } + + /** + * Performs additional check for {@link #processingLogic} after all the calculations are done. + * As many as checks should be done inside of custom {@link ProcessingLogic}, which you can specify with + * {@link #createProcessingLogic()}, because when this method is called, inputs might have been already consumed. + * However, certain checks cannot be done like that; Checking energy overflow should be suppressed for + * long-power machines for example. + * + * @return Modified (or not modified) result + */ + @Nonnull + protected CheckRecipeResult postCheckRecipe(@Nonnull CheckRecipeResult result, + @Nonnull ProcessingLogic processingLogic) { + if (result.wasSuccessful() && processingLogic.getCalculatedEut() > Integer.MAX_VALUE) { + return CheckRecipeResultRegistry.POWER_OVERFLOW; + } + return result; + } + + /** + * Called after {@link #doCheckRecipe} and {@link #postCheckRecipe} being successful. + * Override to set energy usage for this machine. + */ + protected void setEnergyUsage(ProcessingLogic processingLogic) { + // getCalculatedEut() is guaranteed to not exceed int by postCheckRecipe() + mEUt = (int) processingLogic.getCalculatedEut(); + if (mEUt > 0) { + mEUt = (-mEUt); + } + } + + protected int getMaxBatchSize() { + return 128; + } + + /** + * Checks the Machine. You have to assign the MetaTileEntities for the Hatches here. + */ + public abstract boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack); + + /** + * Gets the maximum Efficiency that spare Part can get (0 - 10000) + */ + public abstract int getMaxEfficiency(ItemStack aStack); + + /** + * Gets the pollution this Device outputs to a Muffler per tick (10000 = one Pullution Block) + */ + public int getPollutionPerTick(ItemStack aStack) { + return getPollutionPerSecond(aStack) / 20; + } + + /** + * Gets the pollution produced per second by this multiblock, default to 0. Override this with its actual value in + * the code of the multiblock. + */ + public int getPollutionPerSecond(ItemStack aStack) { + return 0; + } + + /** + * Gets the damage to the ItemStack, usually 0 or 1. + */ + public abstract int getDamageToComponent(ItemStack aStack); + + /** + * If it explodes when the Component has to be replaced. + */ + public abstract boolean explodesOnComponentBreak(ItemStack aStack); + + /** + * @deprecated Use {@link #stopMachine(ShutDownReason)} + */ + @Deprecated + public void stopMachine() { + stopMachine(ShutDownReasonRegistry.NONE); + } + + /** + * @deprecated Use {@link #stopMachine(ShutDownReason)} + */ + @Deprecated + public void criticalStopMachine() { + stopMachine(ShutDownReasonRegistry.CRITICAL_NONE); + } + + public void stopMachine(@Nonnull ShutDownReason reason) { + if (!ShutDownReasonRegistry.isRegistered(reason.getID())) { + throw new RuntimeException(String.format("Reason %s is not registered for registry", reason.getID())); + } + mLastWorkingTick = mTotalRunTime; + mOutputItems = null; + mOutputFluids = null; + mEUt = 0; + mEfficiency = 0; + mProgresstime = 0; + mMaxProgresstime = 0; + mEfficiencyIncrease = 0; + getBaseMetaTileEntity().disableWorking(); + getBaseMetaTileEntity().setShutDownReason(reason); + getBaseMetaTileEntity().setShutdownStatus(true); + if (reason.wasCritical()) { + sendSound(INTERRUPT_SOUND_INDEX); + } + } + + public int getRepairStatus() { + return (mWrench ? 1 : 0) + (mScrewdriver ? 1 : 0) + + (mSoftHammer ? 1 : 0) + + (mHardHammer ? 1 : 0) + + (mSolderingTool ? 1 : 0) + + (mCrowbar ? 1 : 0); + } + + public int getIdealStatus() { + return 6; + } + + public int getCurrentEfficiency(ItemStack itemStack) { + int maxEff = getMaxEfficiency(itemStack); + return maxEff - (getIdealStatus() - getRepairStatus()) * maxEff / 10; + } + + public boolean doRandomMaintenanceDamage() { + if (!isCorrectMachinePart(mInventory[1])) { + stopMachine(ShutDownReasonRegistry.NO_MACHINE_PART); + return false; + } + if (shouldCheckMaintenance() && getRepairStatus() == 0) { + stopMachine(ShutDownReasonRegistry.NO_REPAIR); + return false; + } + if (mRuntime++ > 1000) { + mRuntime = 0; + if (shouldCheckMaintenance() && getBaseMetaTileEntity().getRandomNumber(6000) == 0) { + causeMaintenanceIssue(); + } + if (mInventory[1] != null && getBaseMetaTileEntity().getRandomNumber(2) == 0 + && !mInventory[1].getUnlocalizedName() + .startsWith("gt.blockmachines.basicmachine.")) { + if (mInventory[1].getItem() instanceof MetaGeneratedTool01) { + NBTTagCompound tNBT = mInventory[1].getTagCompound(); + ((MetaGeneratedTool) mInventory[1].getItem()).doDamage( + mInventory[1], + (long) getDamageToComponent(mInventory[1]) + * (long) Math.min(mEUt / this.damageFactorLow, Math.pow(mEUt, this.damageFactorHigh))); + if (mInventory[1].stackSize == 0) mInventory[1] = null; + } + } + } + return true; + } + + public void causeMaintenanceIssue() { + switch (getBaseMetaTileEntity().getRandomNumber(6)) { + case 0 -> mWrench = false; + case 1 -> mScrewdriver = false; + case 2 -> mSoftHammer = false; + case 3 -> mHardHammer = false; + case 4 -> mSolderingTool = false; + case 5 -> mCrowbar = false; + } + } + + public void explodeMultiblock() { + + GTLog.exp.println( + "MultiBlockExplosion at: " + this.getBaseMetaTileEntity() + .getXCoord() + + " | " + + this.getBaseMetaTileEntity() + .getYCoord() + + " | " + + this.getBaseMetaTileEntity() + .getZCoord() + + " DIMID: " + + this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId + + "."); + + Pollution.addPollution(getBaseMetaTileEntity(), GTMod.gregtechproxy.mPollutionOnExplosion); + mInventory[1] = null; + // noinspection unchecked // In this case, the inspection only indicates that the array can be abused in runtime + Iterable allHatches = Iterables.concat( + mInputBusses, + mOutputBusses, + mInputHatches, + mOutputHatches, + mDynamoHatches, + mMufflerHatches, + mEnergyHatches, + mMaintenanceHatches); + for (MetaTileEntity tTileEntity : allHatches) { + if (tTileEntity != null && tTileEntity.getBaseMetaTileEntity() != null) { + tTileEntity.getBaseMetaTileEntity() + .doExplosion(V[8]); + } + } + getBaseMetaTileEntity().doExplosion(V[8]); + } + + public boolean addEnergyOutput(long aEU) { + if (aEU <= 0) { + return true; + } + if (mDynamoHatches.size() > 0) { + return addEnergyOutputMultipleDynamos(aEU, true); + } + return false; + } + + public boolean addEnergyOutputMultipleDynamos(long aEU, boolean aAllowMixedVoltageDynamos) { + int injected = 0; + long totalOutput = 0; + long aFirstVoltageFound = -1; + boolean aFoundMixedDynamos = false; + for (MTEHatchDynamo aDynamo : filterValidMTEs(mDynamoHatches)) { + long aVoltage = aDynamo.maxEUOutput(); + long aTotal = aDynamo.maxAmperesOut() * aVoltage; + // Check against voltage to check when hatch mixing + if (aFirstVoltageFound == -1) { + aFirstVoltageFound = aVoltage; + } else { + if (aFirstVoltageFound != aVoltage) { + aFoundMixedDynamos = true; + } + } + totalOutput += aTotal; + } + + if (totalOutput < aEU || (aFoundMixedDynamos && !aAllowMixedVoltageDynamos)) { + explodeMultiblock(); + return false; + } + + long leftToInject; + long aVoltage; + int aAmpsToInject; + int aRemainder; + int ampsOnCurrentHatch; + for (MTEHatchDynamo aDynamo : filterValidMTEs(mDynamoHatches)) { + leftToInject = aEU - injected; + aVoltage = aDynamo.maxEUOutput(); + aAmpsToInject = (int) (leftToInject / aVoltage); + aRemainder = (int) (leftToInject - (aAmpsToInject * aVoltage)); + ampsOnCurrentHatch = (int) Math.min(aDynamo.maxAmperesOut(), aAmpsToInject); + for (int i = 0; i < ampsOnCurrentHatch; i++) { + aDynamo.getBaseMetaTileEntity() + .increaseStoredEnergyUnits(aVoltage, false); + } + injected += aVoltage * ampsOnCurrentHatch; + if (aRemainder > 0 && ampsOnCurrentHatch < aDynamo.maxAmperesOut()) { + aDynamo.getBaseMetaTileEntity() + .increaseStoredEnergyUnits(aRemainder, false); + injected += aRemainder; + } + } + return injected > 0; + } + + /** + * Sums up voltage of energy hatches. Amperage does not matter. + */ + public long getMaxInputVoltage() { + long rVoltage = 0; + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) rVoltage += tHatch.getBaseMetaTileEntity() + .getInputVoltage(); + return rVoltage; + } + + public long getAverageInputVoltage() { + return ExoticEnergyInputHelper.getAverageInputVoltageMulti(mEnergyHatches); + } + + public long getMaxInputAmps() { + return ExoticEnergyInputHelper.getMaxWorkingInputAmpsMulti(mEnergyHatches); + } + + public long getMaxInputEu() { + return ExoticEnergyInputHelper.getTotalEuMulti(mEnergyHatches); + } + + /** + * Sums up max input EU/t of energy hatches, amperage included. + */ + public long getMaxInputPower() { + long eut = 0; + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + IGregTechTileEntity baseTile = tHatch.getBaseMetaTileEntity(); + eut += baseTile.getInputVoltage() * baseTile.getInputAmperage(); + } + return eut; + } + + /** + * Returns voltage tier of energy hatches. If multiple tiers are found, returns 0. + */ + public long getInputVoltageTier() { + long rTier = 0; + if (mEnergyHatches.size() > 0) { + rTier = mEnergyHatches.get(0) + .getInputTier(); + for (int i = 1; i < mEnergyHatches.size(); i++) { + if (mEnergyHatches.get(i) + .getInputTier() != rTier) return 0; + } + } + + return rTier; + } + + /** + * Calcualtes the overclockedness using long integers + * + * @param aEUt - recipe EUt + * @param aDuration - recipe Duration + * @param mAmperage - should be 1 ? + * @param maxInputVoltage - Multiblock Max input voltage. Voltage is rounded up to higher tier voltage. + * @param perfectOC - If the Multiblock OCs perfectly, i.e. the large Chemical Reactor + */ + protected void calculateOverclockedNessMultiInternal(long aEUt, int aDuration, int mAmperage, long maxInputVoltage, + boolean perfectOC) { + byte tier = (byte) Math.max(0, GTUtility.getTier(maxInputVoltage)); + OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(aEUt) + .setEUt(V[tier] * mAmperage) + .setDuration(aDuration) + .setDurationDecreasePerOC(perfectOC ? 4.0 : 2.0) + .calculate(); + mEUt = (int) calculator.getConsumption(); + mMaxProgresstime = calculator.getDuration(); + } + + @Deprecated + protected void calculateOverclockedNessMulti(int aEUt, int aDuration, int mAmperage, long maxInputVoltage) { + calculateOverclockedNessMultiInternal(aEUt, aDuration, mAmperage, maxInputVoltage, false); + } + + protected void calculateOverclockedNessMulti(long aEUt, int aDuration, int mAmperage, long maxInputVoltage) { + calculateOverclockedNessMultiInternal(aEUt, aDuration, mAmperage, maxInputVoltage, false); + } + + @Deprecated + protected void calculatePerfectOverclockedNessMulti(int aEUt, int aDuration, int mAmperage, long maxInputVoltage) { + calculateOverclockedNessMultiInternal(aEUt, aDuration, mAmperage, maxInputVoltage, true); + } + + protected void calculatePerfectOverclockedNessMulti(long aEUt, int aDuration, int mAmperage, long maxInputVoltage) { + calculateOverclockedNessMultiInternal(aEUt, aDuration, mAmperage, maxInputVoltage, true); + } + + public boolean drainEnergyInput(long aEU) { + if (aEU <= 0) return true; + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + if (tHatch.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(aEU, false)) return true; + } + return false; + } + + protected static boolean dumpFluid(List aOutputHatches, FluidStack copiedFluidStack, + boolean restrictiveHatchesOnly) { + for (MTEHatchOutput tHatch : filterValidMTEs(aOutputHatches)) { + if (restrictiveHatchesOnly && tHatch.mMode == 0) { + continue; + } + if (!tHatch.canStoreFluid(copiedFluidStack)) continue; + int tAmount = tHatch.fill(copiedFluidStack, false); + if (tAmount >= copiedFluidStack.amount) { + boolean filled = tHatch.fill(copiedFluidStack, true) >= copiedFluidStack.amount; + tHatch.onEmptyingContainerWhenEmpty(); + return filled; + } else if (tAmount > 0) { + copiedFluidStack.amount = copiedFluidStack.amount - tHatch.fill(copiedFluidStack, true); + tHatch.onEmptyingContainerWhenEmpty(); + } + } + return false; + } + + public boolean addOutput(FluidStack aLiquid) { + if (aLiquid == null) return false; + FluidStack copiedFluidStack = aLiquid.copy(); + if (!dumpFluid(mOutputHatches, copiedFluidStack, true)) { + dumpFluid(mOutputHatches, copiedFluidStack, false); + } + return false; + } + + protected void addFluidOutputs(FluidStack[] mOutputFluids2) { + for (FluidStack outputFluidStack : mOutputFluids2) { + addOutput(outputFluidStack); + } + } + + public boolean depleteInput(FluidStack aLiquid) { + return depleteInput(aLiquid, false); + } + + public boolean depleteInput(FluidStack aLiquid, boolean simulate) { + if (aLiquid == null) return false; + for (MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) { + setHatchRecipeMap(tHatch); + FluidStack tLiquid = tHatch.drain(ForgeDirection.UNKNOWN, aLiquid, false); + if (tLiquid != null && tLiquid.amount >= aLiquid.amount) { + if (simulate) { + return true; + } + tLiquid = tHatch.drain(ForgeDirection.UNKNOWN, aLiquid, true); + return tLiquid != null && tLiquid.amount >= aLiquid.amount; + } + } + return false; + } + + public boolean addOutput(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return false; + aStack = GTUtility.copyOrNull(aStack); + + final List filteredBuses = filterValidMTEs(mOutputBusses); + if (dumpItem(filteredBuses, aStack, true) || dumpItem(filteredBuses, aStack, false)) { + return true; + } + + boolean outputSuccess = true; + // noinspection DataFlowIssue + while (outputSuccess && aStack.stackSize > 0) { + outputSuccess = false; + ItemStack single = aStack.splitStack(1); + for (MTEHatchOutput tHatch : filterValidMTEs(mOutputHatches)) { + if (!outputSuccess && tHatch.outputsItems()) { + if (tHatch.getBaseMetaTileEntity() + .addStackToSlot(1, single)) outputSuccess = true; + } + } + } + return outputSuccess; + } + + private boolean dumpItem(List outputBuses, ItemStack itemStack, boolean restrictiveBusesOnly) { + for (MTEHatchOutputBus outputBus : outputBuses) { + if (restrictiveBusesOnly && !outputBus.isLocked()) { + continue; + } + + if (outputBus.storeAll(itemStack)) { + return true; + } + } + + return false; + } + + public boolean depleteInput(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return false; + FluidStack aLiquid = GTUtility.getFluidForFilledItem(aStack, true); + if (aLiquid != null) return depleteInput(aLiquid); + for (MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) { + setHatchRecipeMap(tHatch); + if (GTUtility.areStacksEqual( + aStack, + tHatch.getBaseMetaTileEntity() + .getStackInSlot(0))) { + if (tHatch.getBaseMetaTileEntity() + .getStackInSlot(0).stackSize >= aStack.stackSize) { + tHatch.getBaseMetaTileEntity() + .decrStackSize(0, aStack.stackSize); + return true; + } + } + } + for (MTEHatchInputBus tHatch : filterValidMTEs(mInputBusses)) { + tHatch.mRecipeMap = getRecipeMap(); + for (int i = tHatch.getBaseMetaTileEntity() + .getSizeInventory() - 1; i >= 0; i--) { + if (GTUtility.areStacksEqual( + aStack, + tHatch.getBaseMetaTileEntity() + .getStackInSlot(i))) { + if (tHatch.getBaseMetaTileEntity() + .getStackInSlot(i).stackSize >= aStack.stackSize) { + tHatch.getBaseMetaTileEntity() + .decrStackSize(i, aStack.stackSize); + return true; + } + } + } + } + return false; + } + + public ArrayList getStoredOutputs() { + ArrayList rList = new ArrayList<>(); + for (MTEHatchOutputBus tHatch : filterValidMTEs(mOutputBusses)) { + for (int i = tHatch.getBaseMetaTileEntity() + .getSizeInventory() - 1; i >= 0; i--) { + rList.add( + tHatch.getBaseMetaTileEntity() + .getStackInSlot(i)); + } + } + return rList; + } + + public ArrayList getStoredFluids() { + ArrayList rList = new ArrayList<>(); + Map inputsFromME = new HashMap<>(); + for (MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) { + setHatchRecipeMap(tHatch); + if (tHatch instanceof MTEHatchMultiInput multiInputHatch) { + for (FluidStack tFluid : multiInputHatch.getStoredFluid()) { + if (tFluid != null) { + rList.add(tFluid); + } + } + } else if (tHatch instanceof MTEHatchInputME meHatch) { + for (FluidStack fluidStack : meHatch.getStoredFluids()) { + if (fluidStack != null) { + // Prevent the same fluid from different ME hatches from being recognized + inputsFromME.put(fluidStack.getFluid(), fluidStack); + } + } + } else { + if (tHatch.getFillableStack() != null) { + rList.add(tHatch.getFillableStack()); + } + } + } + + if (!inputsFromME.isEmpty()) { + rList.addAll(inputsFromME.values()); + } + return rList; + } + + /** + * Drains fluid from the given hatch, including {@link IDualInputHatch}. Should never be used during recipe check! + * + * @param doDrain If false, fluid will not actually be consumed + * @return Whether the hatch contains enough fluid to drain + */ + public boolean drain(MTEHatch hatch, FluidStack fluid, boolean doDrain) { + if (fluid == null || hatch == null) return false; + if (supportsCraftingMEBuffer() && hatch instanceof IDualInputHatch tHatch && tHatch.supportsFluids()) { + Optional inventory = tHatch.getFirstNonEmptyInventory(); + if (inventory.isPresent()) { + for (FluidStack storedFluid : Lists.newArrayList( + inventory.get() + .getFluidInputs())) { + if (fluid.isFluidEqual(storedFluid)) { + if (doDrain) storedFluid.amount = Math.max(storedFluid.amount - fluid.amount, 0); + return storedFluid.amount >= fluid.amount; + } + } + } + } + + if (hatch instanceof MTEHatchInput tHatch && tHatch.isValid()) { + if (tHatch instanceof MTEHatchInputME meHatch) { + meHatch.startRecipeProcessing(); + FluidStack tFluid = meHatch.drain(ForgeDirection.UNKNOWN, fluid, doDrain); + meHatch.endRecipeProcessing(this); + return tFluid != null && tFluid.amount >= fluid.amount; + } else { + FluidStack tFluid = tHatch.drain(ForgeDirection.UNKNOWN, fluid, doDrain); + return tFluid != null && tFluid.amount >= fluid.amount; + } + } + + return false; + } + + public ArrayList getStoredInputs() { + ArrayList rList = new ArrayList<>(); + Map inputsFromME = new HashMap<>(); + for (MTEHatchInputBus tHatch : filterValidMTEs(mInputBusses)) { + if (tHatch instanceof MTEHatchCraftingInputME) { + continue; + } + tHatch.mRecipeMap = getRecipeMap(); + IGregTechTileEntity tileEntity = tHatch.getBaseMetaTileEntity(); + boolean isMEBus = tHatch instanceof MTEHatchInputBusME; + for (int i = tileEntity.getSizeInventory() - 1; i >= 0; i--) { + ItemStack itemStack = tileEntity.getStackInSlot(i); + if (itemStack != null) { + if (isMEBus) { + // Prevent the same item from different ME buses from being recognized + inputsFromME.put(GTUtility.ItemId.createNoCopy(itemStack), itemStack); + } else { + rList.add(itemStack); + } + } + } + } + + if (getStackInSlot(1) != null && getStackInSlot(1).getUnlocalizedName() + .startsWith("gt.integrated_circuit")) rList.add(getStackInSlot(1)); + if (!inputsFromME.isEmpty()) { + rList.addAll(inputsFromME.values()); + } + return rList; + } + + /** + * Anything that is usually separated off in {@link #getStoredInputs()} (like crafting input bus/buffer) is also + * included here. + */ + public ArrayList getAllStoredInputs() { + ArrayList rList = new ArrayList<>(); + + if (supportsCraftingMEBuffer()) { + for (IDualInputHatch dualInputHatch : mDualInputHatches) { + Iterator inventoryIterator = dualInputHatch.inventories(); + while (inventoryIterator.hasNext()) { + ItemStack[] items = inventoryIterator.next() + .getItemInputs(); + if (items == null) { + continue; + } + for (int i = 0; i < items.length; i++) { + ItemStack item = items[i]; + if (item != null) { + rList.add(item); + } + } + } + } + } + + Map inputsFromME = new HashMap<>(); + for (MTEHatchInputBus tHatch : filterValidMTEs(mInputBusses)) { + if (tHatch instanceof MTEHatchCraftingInputME) { + continue; + } + tHatch.mRecipeMap = getRecipeMap(); + IGregTechTileEntity tileEntity = tHatch.getBaseMetaTileEntity(); + boolean isMEBus = tHatch instanceof MTEHatchInputBusME; + for (int i = tileEntity.getSizeInventory() - 1; i >= 0; i--) { + ItemStack itemStack = tileEntity.getStackInSlot(i); + if (itemStack != null) { + if (isMEBus) { + // Prevent the same item from different ME buses from being recognized + inputsFromME.put(GTUtility.ItemId.createNoCopy(itemStack), itemStack); + } else { + rList.add(itemStack); + } + } + } + } + + if (getStackInSlot(1) != null && getStackInSlot(1).getUnlocalizedName() + .startsWith("gt.integrated_circuit")) rList.add(getStackInSlot(1)); + if (!inputsFromME.isEmpty()) { + rList.addAll(inputsFromME.values()); + } + return rList; + } + + public Map getStoredInputsFromME() { + Map inputsFromME = new Object2ReferenceOpenHashMap<>(); + for (MTEHatchInputBus tHatch : filterValidMTEs(mInputBusses)) { + if (tHatch instanceof MTEHatchInputBusME meBus) { + for (int i = meBus.getSizeInventory() - 1; i >= 0; i--) { + ItemStack itemStack = meBus.getStackInSlot(i); + if (itemStack != null) { + // Prevent the same item from different ME buses from being recognized + inputsFromME.put(GTUtility.ItemId.createNoCopy(itemStack), itemStack); + } + } + } + } + return inputsFromME; + } + + public Map getStoredFluidsFromME() { + Map fluidsFromME = new Reference2ReferenceOpenHashMap<>(); + for (MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) { + if (tHatch instanceof MTEHatchInputME meHatch) { + for (FluidStack fluid : meHatch.getStoredFluids()) { + if (fluid != null) { + // Prevent the same fluid from different ME hatches from being recognized + fluidsFromME.put(fluid.getFluid(), fluid); + } + } + } + } + return fluidsFromME; + } + + @Override + public RecipeMap getRecipeMap() { + return null; + } + + /** + * Creates logic to run recipe check based on recipemap. This runs only once, on class instantiation. + *

+ * If this machine doesn't use recipemap or does some complex things, override {@link #checkProcessing()}. + */ + @ApiStatus.OverrideOnly + protected ProcessingLogic createProcessingLogic() { + return null; + } + + public void updateSlots() { + for (MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) tHatch.updateSlots(); + for (MTEHatchInputBus tHatch : filterValidMTEs(mInputBusses)) tHatch.updateSlots(); + } + + protected void startRecipeProcessing() { + for (MTEHatchInputBus hatch : filterValidMTEs(mInputBusses)) { + if (hatch instanceof IRecipeProcessingAwareHatch aware) { + aware.startRecipeProcessing(); + } + } + for (MTEHatchInput hatch : filterValidMTEs(mInputHatches)) { + if (hatch instanceof IRecipeProcessingAwareHatch aware) { + aware.startRecipeProcessing(); + } + } + } + + public void setResultIfFailure(CheckRecipeResult result) { + if (!result.wasSuccessful()) { + this.checkRecipeResult = result; + } + } + + protected void endRecipeProcessing() { + for (MTEHatchInputBus hatch : filterValidMTEs(mInputBusses)) { + if (hatch instanceof IRecipeProcessingAwareHatch aware) { + setResultIfFailure(aware.endRecipeProcessing(this)); + } + } + for (MTEHatchInput hatch : filterValidMTEs(mInputHatches)) { + if (hatch instanceof IRecipeProcessingAwareHatch aware) { + setResultIfFailure(aware.endRecipeProcessing(this)); + } + } + } + + public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatch hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + } + if (aMetaTileEntity instanceof IDualInputHatch hatch) { + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + return mDualInputHatches.add(hatch); + } + if (aMetaTileEntity instanceof ISmartInputHatch hatch) { + // Only add them to be iterated if enabled for performance reasons + if (hatch.doFastRecipeCheck()) { + mSmartInputHatches.add(hatch); + } + } + if (aMetaTileEntity instanceof MTEHatchInput) { + setHatchRecipeMap((MTEHatchInput) aMetaTileEntity); + return mInputHatches.add((MTEHatchInput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchInputBus) { + ((MTEHatchInputBus) aMetaTileEntity).mRecipeMap = getRecipeMap(); + return mInputBusses.add((MTEHatchInputBus) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchOutput) return mOutputHatches.add((MTEHatchOutput) aMetaTileEntity); + if (aMetaTileEntity instanceof MTEHatchOutputBus) return mOutputBusses.add((MTEHatchOutputBus) aMetaTileEntity); + if (aMetaTileEntity instanceof MTEHatchEnergy) return mEnergyHatches.add((MTEHatchEnergy) aMetaTileEntity); + if (aMetaTileEntity instanceof MTEHatchDynamo) return mDynamoHatches.add((MTEHatchDynamo) aMetaTileEntity); + if (aMetaTileEntity instanceof MTEHatchMaintenance) + return mMaintenanceHatches.add((MTEHatchMaintenance) aMetaTileEntity); + if (aMetaTileEntity instanceof MTEHatchMuffler) return mMufflerHatches.add((MTEHatchMuffler) aMetaTileEntity); + return false; + } + + public boolean addMaintenanceToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchMaintenance hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + return mMaintenanceHatches.add(hatch); + } + return false; + } + + public boolean addEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchEnergy hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + return mEnergyHatches.add(hatch); + } + return false; + } + + public boolean addExoticEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatch hatch && ExoticEnergyInputHelper.isExoticEnergyInput(aMetaTileEntity)) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + return mExoticEnergyHatches.add(hatch); + } + return false; + } + + public boolean addDynamoToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchDynamo hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + return mDynamoHatches.add(hatch); + } + return false; + } + + public boolean addMufflerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchMuffler hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + return mMufflerHatches.add(hatch); + } + return false; + } + + public boolean addInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + return addInputBusToMachineList(aTileEntity, aBaseCasingIndex) + || addInputHatchToMachineList(aTileEntity, aBaseCasingIndex); + } + + public boolean addOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + return addOutputBusToMachineList(aTileEntity, aBaseCasingIndex) + || addOutputHatchToMachineList(aTileEntity, aBaseCasingIndex); + } + + public boolean addInputBusToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof IDualInputHatch hatch) { + if (!supportsCraftingMEBuffer()) return false; + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + return mDualInputHatches.add(hatch); + } + if (aMetaTileEntity instanceof ISmartInputHatch hatch) { + mSmartInputHatches.add(hatch); + } + if (aMetaTileEntity instanceof MTEHatchInputBus hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + hatch.mRecipeMap = getRecipeMap(); + return mInputBusses.add(hatch); + } + return false; + } + + public boolean addOutputBusToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchOutputBus hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + return mOutputBusses.add(hatch); + } + return false; + } + + public boolean addInputHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof ISmartInputHatch hatch) { + mSmartInputHatches.add(hatch); + } + if (aMetaTileEntity instanceof MTEHatchInput hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + setHatchRecipeMap(hatch); + return mInputHatches.add(hatch); + } + return false; + } + + public boolean addOutputHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchOutput hatch) { + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + return mOutputHatches.add(hatch); + } + return false; + } + + protected void setHatchRecipeMap(MTEHatchInput hatch) { + if (filtersFluid()) { + hatch.mRecipeMap = getRecipeMap(); + } + } + + /** + * @return If this multi filters fluid input for hatches based on recipemap. + */ + protected boolean filtersFluid() { + return true; + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = 0; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); + } + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + return new String[] { + /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + formatNumbers(getActualEnergyUsage()) + + EnumChatFormatting.RESET + + " EU/t", + /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + formatNumbers(getMaxInputVoltage()) + + EnumChatFormatting.RESET + + " EU/t(*2A) " + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + VN[GTUtility.getTier(getMaxInputVoltage())] + + EnumChatFormatting.RESET, + /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + /* 6 */ StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %" }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return supportsSlotAutomation(aIndex); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return supportsSlotAutomation(aIndex); + } + + protected ItemStack[] getCompactedInputs() { + // TODO: repalce method with a cleaner one + ArrayList tInputList = getStoredInputs(); + int tInputList_sS = tInputList.size(); + for (int i = 0; i < tInputList_sS - 1; i++) { + for (int j = i + 1; j < tInputList_sS; j++) { + if (!GTUtility.areStacksEqual(tInputList.get(i), tInputList.get(j))) continue; + if (tInputList.get(i).stackSize >= tInputList.get(j).stackSize) { + tInputList.remove(j--); + tInputList_sS = tInputList.size(); + } else { + tInputList.remove(i--); + tInputList_sS = tInputList.size(); + break; + } + } + } + return tInputList.toArray(new ItemStack[0]); + } + + protected FluidStack[] getCompactedFluids() { + // TODO: repalce method with a cleaner one + ArrayList tFluidList = getStoredFluids(); + int tFluidList_sS = tFluidList.size(); + for (int i = 0; i < tFluidList_sS - 1; i++) { + for (int j = i + 1; j < tFluidList_sS; j++) { + if (!GTUtility.areFluidsEqual(tFluidList.get(i), tFluidList.get(j))) continue; + + if (tFluidList.get(i).amount >= tFluidList.get(j).amount) { + tFluidList.remove(j--); + tFluidList_sS = tFluidList.size(); + } else { + tFluidList.remove(i--); + tFluidList_sS = tFluidList.size(); + break; + } + } + } + return tFluidList.toArray(new FluidStack[0]); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + final NBTTagCompound tag = accessor.getNBTData(); + + if (tag.getBoolean("incompleteStructure")) { + currentTip.add(RED + "** INCOMPLETE STRUCTURE **" + RESET); + } + String efficiency = RESET + " Efficiency: " + tag.getFloat("efficiency") + "%"; + if (tag.getBoolean("hasProblems")) { + currentTip.add(RED + "** HAS PROBLEMS **" + efficiency); + } else if (!tag.getBoolean("incompleteStructure")) { + currentTip.add(GREEN + "Running Fine" + efficiency); + } + + boolean isActive = tag.getBoolean("isActive"); + if (isActive) { + long energyTier = tag.getLong("energyTier"); + long actualEnergyUsage = tag.getLong("energyUsage"); + if (energyTier > 0) { + if (actualEnergyUsage > 0) { + currentTip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.energy.use_with_amperage", + formatNumbers(actualEnergyUsage), + GTUtility.getAmperageForTier(actualEnergyUsage, (byte) energyTier), + GTUtility.getColoredTierNameFromTier((byte) energyTier))); + } else if (actualEnergyUsage < 0) { + currentTip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.energy.produce_with_amperage", + formatNumbers(-actualEnergyUsage), + GTUtility.getAmperageForTier(-actualEnergyUsage, (byte) energyTier), + GTUtility.getColoredTierNameFromTier((byte) energyTier))); + } + } else { + if (actualEnergyUsage > 0) { + currentTip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.energy.use", + formatNumbers(actualEnergyUsage), + GTUtility.getColoredTierNameFromVoltage(actualEnergyUsage))); + } else if (actualEnergyUsage < 0) { + currentTip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.energy.produce", + formatNumbers(-actualEnergyUsage), + GTUtility.getColoredTierNameFromVoltage(-actualEnergyUsage))); + } + } + } + currentTip + .add(GTWaila.getMachineProgressString(isActive, tag.getInteger("maxProgress"), tag.getInteger("progress"))); + // Show ns on the tooltip + if (GTMod.gregtechproxy.wailaAverageNS && tag.hasKey("averageNS")) { + int tAverageTime = tag.getInteger("averageNS"); + currentTip.add("Average CPU load of ~" + formatNumbers(tAverageTime) + " ns"); + } + super.getWailaBody(itemStack, currentTip, accessor, config); + } + + public final void getMTEWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + + tag.setBoolean("hasProblems", (getIdealStatus() - getRepairStatus()) > 0); + tag.setFloat("efficiency", mEfficiency / 100.0F); + tag.setInteger("progress", mProgresstime); + tag.setInteger("maxProgress", mMaxProgresstime); + tag.setBoolean("incompleteStructure", (getBaseMetaTileEntity().getErrorDisplayID() & 64) != 0); + + final IGregTechTileEntity tileEntity = getBaseMetaTileEntity(); + if (tileEntity != null) { + tag.setBoolean("isActive", tileEntity.isActive()); + if (tileEntity.isActive()) { + if (mEUt < 0) tag.setLong("energyUsage", getActualEnergyUsage()); + else tag.setLong("energyUsage", (long) -mEUt * mEfficiency / 10000); + tag.setLong("energyTier", getInputVoltageTier()); + } + } + + final GTClientPreference preference = GTMod.gregtechproxy.getClientPreference(player.getUniqueID()); + if (preference != null && preference.isWailaAverageNSEnabled()) { + getBaseMetaTileEntity().startTimeStatistics(); + int tAverageTime = 0; + int amountOfZero = 0; + for (int tTime : this.getBaseMetaTileEntity() + .getTimeStatistics()) { + tAverageTime += tTime; + if (tTime == 0) { + amountOfZero += 1; + } + } + + // tick time zero means it has not been updated yet + int samples = getBaseMetaTileEntity().getTimeStatistics().length - amountOfZero; + if (samples > 0) { + tag.setInteger("averageNS", tAverageTime / samples); + } + } + } + + protected void setMufflers(boolean state) { + for (MTEHatchMuffler aMuffler : mMufflerHatches) { + final IGregTechTileEntity iGTTileEntity = aMuffler.getBaseMetaTileEntity(); + if (iGTTileEntity != null && !iGTTileEntity.isDead()) { + iGTTileEntity.setActive(state); + } + } + } + + @Override + public void onRemoval() { + super.onRemoval(); + // Deactivate mufflers + setMufflers(false); + } + + public List getExoticEnergyHatches() { + return mExoticEnergyHatches; + } + + /** + * @return Returns true if there is 1 TT Energy Hatch OR up to 2 Energy Hatches + */ + public boolean checkExoticAndNormalEnergyHatches() { + if (mExoticEnergyHatches.isEmpty() && mEnergyHatches.isEmpty()) { + return false; + } + + if (!mExoticEnergyHatches.isEmpty()) { + if (!mEnergyHatches.isEmpty()) { + return false; + } + + if (mExoticEnergyHatches.size() != 1) { + return false; + } + } + + return mEnergyHatches.size() <= 2; + } + + /** + * Checks if all the item / fluid outputs of the recipe can be outputted to the buses / hatches. + * If void protection is enabled, it also checks for {@link #protectsExcessItem()} and + * {@link #protectsExcessFluid()}, so you don't need to call them along with this method. + *

+ * If you're using {@link ParallelHelper}, it will handle void protection and return 0 parallel + * if all the output cannot be dumped into buses / hatches. In that case you won't use this method. + */ + protected boolean canOutputAll(@Nonnull GTRecipe recipe) { + return canOutputAll(recipe.mOutputs, recipe.mFluidOutputs); + } + + /** + * Checks if all the items can be outputted to the output buses. + * If void protection is enabled, it also checks for {@link #protectsExcessItem()}, + * so you don't need to call it along with this method. + */ + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + protected boolean canOutputAll(ItemStack[] items) { + return canOutputAll(items, null); + } + + /** + * Checks if all the fluids can be outputted to the output hatches. + * If void protection is enabled, it also checks for {@link #protectsExcessFluid()}, + * so you don't need to call it along with this method. + */ + protected boolean canOutputAll(FluidStack[] fluids) { + return canOutputAll(null, fluids); + } + + /** + * Checks if all the items / fluids can be outputted to output buses / hatches. + * If void protection is enabled, it also checks for {@link #protectsExcessItem()} and + * {@link #protectsExcessFluid()}, so you don't need to call them along with this method. + */ + protected boolean canOutputAll(@Nullable ItemStack[] items, @Nullable FluidStack[] fluids) { + if (!protectsExcessItem() && !protectsExcessFluid()) { + return true; + } + + VoidProtectionHelper voidProtectionHelper = new VoidProtectionHelper().setMachine(this) + .setItemOutputs(items) + .setFluidOutputs(fluids) + .build(); + return voidProtectionHelper.getMaxParallel() > 0; + } + + @Override + public boolean isAllowedToWork() { + return getBaseMetaTileEntity() != null && getBaseMetaTileEntity().isAllowedToWork(); + } + + @Override + public void disableWorking() { + if (getBaseMetaTileEntity() != null) { + getBaseMetaTileEntity().disableWorking(); + } + } + + @Override + public void enableWorking() { + if (getBaseMetaTileEntity() != null) { + getBaseMetaTileEntity().enableWorking(); + } + } + + public ItemStack getControllerSlot() { + return mInventory[getControllerSlotIndex()]; + } + + public final int getControllerSlotIndex() { + return 1; + } + + // True if the slot with index aSlot may be interacted with through automation + protected boolean supportsSlotAutomation(int aSlot) { + return false; + } + + @Override + public Pos2d getPowerSwitchButtonPos() { + return new Pos2d(174, 148); + } + + @Override + public Pos2d getStructureUpdateButtonPos() { + return new Pos2d(174, 130); + } + + @Override + public int getStructureUpdateTime() { + return mUpdate; + } + + @Override + public void setStructureUpdateTime(int time) { + mUpdate = time; + } + + @Override + public boolean supportsVoidProtection() { + return false; + } + + @Override + public VoidingMode getVoidingMode() { + return voidingMode; + } + + @Override + public void setVoidingMode(VoidingMode mode) { + this.voidingMode = mode; + } + + @Override + public List getItemOutputSlots(ItemStack[] toOutput) { + List ret = new ArrayList<>(); + for (final MTEHatch tBus : filterValidMTEs(mOutputBusses)) { + if (!(tBus instanceof MTEHatchOutputBusME)) { + final IInventory tBusInv = tBus.getBaseMetaTileEntity(); + for (int i = 0; i < tBusInv.getSizeInventory(); i++) { + final ItemStack stackInSlot = tBus.getStackInSlot(i); + + if (stackInSlot == null && tBus instanceof IItemLockable lockable && lockable.isLocked()) { + // getItemOutputSlots is only used to calculate free room for the purposes of parallels and + // void protection. We can use a fake item stack here without creating weirdness in the output + // bus' actual inventory. + assert lockable.getLockedItem() != null; + ItemStack fakeItemStack = lockable.getLockedItem() + .copy(); + fakeItemStack.stackSize = 0; + ret.add(fakeItemStack); + } else { + ret.add(stackInSlot); + } + } + } + } + return ret; + } + + @Override + public List getFluidOutputSlots(FluidStack[] toOutput) { + return filterValidMTEs(mOutputHatches); + } + + /** + * Util method for DT-like structure to collect list of output hatches. + */ + protected List getFluidOutputSlotsByLayer(FluidStack[] toOutput, + List> hatchesByLayer) { + List ret = new ArrayList<>(); + for (int i = 0; i < toOutput.length; i++) { + if (i >= hatchesByLayer.size()) { + break; + } + FluidStack fluidOutputForLayer = toOutput[i]; + for (MTEHatchOutput hatch : hatchesByLayer.get(i)) { + if (!hatch.isValid()) continue; + if (fluidOutputForLayer != null) { + ret.add(new OutputHatchWrapper(hatch, f -> GTUtility.areFluidsEqual(f, fluidOutputForLayer))); + } else { + ret.add(hatch); + } + } + } + return ret; + } + + @Override + public boolean canDumpItemToME() { + for (MTEHatch tHatch : filterValidMTEs(mOutputBusses)) { + if (tHatch instanceof MTEHatchOutputBusME) { + if ((((MTEHatchOutputBusME) tHatch).canAcceptItem())) { + return true; + } + } + } + return false; + } + + @Override + public boolean canDumpFluidToME() { + for (IFluidStore tHatch : getFluidOutputSlots(new FluidStack[0])) { + if (tHatch instanceof MTEHatchOutputME) { + if ((((MTEHatchOutputME) tHatch).canAcceptFluid())) { + return true; + } + } + } + return false; + } + + @Override + public Pos2d getVoidingModeButtonPos() { + return new Pos2d(8, 91); + } + + @Override + public boolean supportsInputSeparation() { + return false; + } + + @Override + public boolean isInputSeparationEnabled() { + return inputSeparation; + } + + @Override + public void setInputSeparation(boolean enabled) { + this.inputSeparation = enabled; + } + + @Override + public Pos2d getInputSeparationButtonPos() { + return new Pos2d(26, 91); + } + + /** + * Creates the icon list for this machine. Override this and add the overlays to machineModeIcons in order. + */ + public void setMachineModeIcons() { + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_DEFAULT); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_DEFAULT); + } + + /** + * Override this if you are a multi-machine and want a GUI button. You will also want to override + * setMachineModeIcons(). + * Override nextMachineMode() if you have more than 2 modes. + */ + @Override + public boolean supportsMachineModeSwitch() { + return false; + } + + @Override + public int getMachineMode() { + return machineMode; + } + + @Override + public UITexture getMachineModeIcon(int index) { + return machineModeIcons.get(index); + } + + @Override + public void setMachineMode(int index) { + machineMode = index; + } + + @Override + public int nextMachineMode() { + if (machineMode == 0) return 1; + else return 0; + } + + @Override + public Pos2d getMachineModeSwitchButtonPos() { + return new Pos2d(80, 91); + } + + @Override + public boolean supportsBatchMode() { + return false; + } + + @Override + public boolean isBatchModeEnabled() { + return batchMode; + } + + @Override + public void setBatchMode(boolean enabled) { + this.batchMode = enabled; + } + + @Override + public Pos2d getBatchModeButtonPos() { + return new Pos2d(44, 91); + } + + @Override + public boolean supportsSingleRecipeLocking() { + return false; + } + + @Override + public boolean isRecipeLockingEnabled() { + return mLockedToSingleRecipe; + } + + @Override + public void setRecipeLocking(boolean enabled) { + mLockedToSingleRecipe = enabled; + if (!enabled) { + setSingleRecipeCheck(null); + } + } + + @Override + public void setSingleRecipeCheck(SingleRecipeCheck recipeCheck) { + mSingleRecipeCheck = recipeCheck; + } + + @Override + public SingleRecipeCheck getSingleRecipeCheck() { + return mSingleRecipeCheck; + } + + @Override + public Pos2d getRecipeLockingButtonPos() { + return new Pos2d(62, 91); + } + + @Override + public int getGUIWidth() { + return 198; + } + + @Override + public int getGUIHeight() { + return 192; + } + + @Override + public void bindPlayerInventoryUI(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.bindPlayerInventory(buildContext.getPlayer(), new Pos2d(7, 109), getGUITextureSet().getItemSlot()); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(4, 4) + .setSize(190, 85)); + final SlotWidget inventorySlot = new SlotWidget(inventoryHandler, 1); + builder.widget( + inventorySlot.setPos(173, 167) + .setBackground(GTUITextures.SLOT_DARK_GRAY)); + + final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); + drawTexts(screenElements, inventorySlot); + builder.widget(screenElements); + + setMachineModeIcons(); + builder.widget(createPowerSwitchButton(builder)) + .widget(createVoidExcessButton(builder)) + .widget(createInputSeparationButton(builder)) + .widget(createModeSwitchButton(builder)) + .widget(createBatchModeButton(builder)) + .widget(createLockToSingleRecipeButton(builder)) + .widget(createStructureUpdateButton(builder)); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) {} + + protected boolean shouldDisplayCheckRecipeResult() { + return true; + } + + public boolean shouldDisplayShutDownReason() { + return true; + } + + protected final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + protected String generateCurrentRecipeInfoString() { + StringBuffer ret = new StringBuffer(EnumChatFormatting.WHITE + "Progress: "); + + numberFormat.setMinimumFractionDigits(2); + numberFormat.setMaximumFractionDigits(2); + numberFormat.format((double) mProgresstime / 20, ret); + ret.append("s / "); + numberFormat.format((double) mMaxProgresstime / 20, ret); + ret.append("s ("); + numberFormat.setMinimumFractionDigits(1); + numberFormat.setMaximumFractionDigits(1); + numberFormat.format((double) mProgresstime / mMaxProgresstime * 100, ret); + ret.append("%)\n"); + numberFormat.setMinimumFractionDigits(0); + numberFormat.setMaximumFractionDigits(2); + + IntConsumer appendRate = (amount) -> { + double processPerTick = (double) amount / mMaxProgresstime * 20; + if (processPerTick > 1) { + ret.append(" ("); + numberFormat.format(Math.round(processPerTick * 10) / 10.0, ret); + ret.append("/s)"); + } else { + ret.append(" ("); + numberFormat.format(Math.round(1 / processPerTick * 10) / 10.0, ret); + ret.append("s/ea)"); + } + }; + + int lines = 0; + int MAX_LINES = 5; + + if (mOutputItems != null) { + for (var item : mOutputItems) { + if (item == null) continue; + if (lines >= MAX_LINES) { + ret.append("..."); + return ret.toString(); + } + lines++; + ret.append(EnumChatFormatting.AQUA) + .append(item.getDisplayName()) + .append(EnumChatFormatting.WHITE) + .append(" x ") + .append(EnumChatFormatting.GOLD); + numberFormat.format(item.stackSize, ret); + ret.append(EnumChatFormatting.WHITE); + appendRate.accept(item.stackSize); + ret.append('\n'); + } + } + if (mOutputFluids != null) { + for (var fluid : mOutputFluids) { + if (fluid == null) continue; + if (lines >= MAX_LINES) { + ret.append("..."); + return ret.toString(); + } + lines++; + ret.append(EnumChatFormatting.AQUA) + .append(fluid.getLocalizedName()) + .append(EnumChatFormatting.WHITE) + .append(" x ") + .append(EnumChatFormatting.GOLD); + numberFormat.format(fluid.amount, ret); + ret.append("L") + .append(EnumChatFormatting.WHITE); + appendRate.accept(fluid.amount); + ret.append('\n'); + } + } + return ret.toString(); + } + + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + screenElements.setSynced(false) + .setSpace(0) + .setPos(10, 7); + if (supportsMachineModeSwitch()) { + screenElements.widget( + TextWidget.dynamicString( + () -> EnumChatFormatting.WHITE + GTUtility.trans("400", "Running mode: ") + + EnumChatFormatting.GOLD + + getMachineModeName())); + } + screenElements + .widget( + new TextWidget(GTUtility.trans("132", "Pipe is loose.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> !mWrench)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mWrench, val -> mWrench = val)); + screenElements + .widget( + new TextWidget(GTUtility.trans("133", "Screws are loose.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> !mScrewdriver)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mScrewdriver, val -> mScrewdriver = val)); + screenElements + .widget( + new TextWidget(GTUtility.trans("134", "Something is stuck.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> !mSoftHammer)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mSoftHammer, val -> mSoftHammer = val)); + screenElements + .widget( + new TextWidget(GTUtility.trans("135", "Platings are dented.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> !mHardHammer)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mHardHammer, val -> mHardHammer = val)); + screenElements + .widget( + new TextWidget(GTUtility.trans("136", "Circuitry burned out.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> !mSolderingTool)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mSolderingTool, val -> mSolderingTool = val)); + screenElements.widget( + new TextWidget(GTUtility.trans("137", "That doesn't belong there.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> !mCrowbar)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mCrowbar, val -> mCrowbar = val)); + screenElements + .widget( + new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> !mMachine)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val)); + screenElements.widget( + new TextWidget("Too Uncertain.").setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> (getBaseMetaTileEntity().getErrorDisplayID() & 128) != 0)); + screenElements.widget( + new TextWidget("Invalid Parameters.").setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> (getBaseMetaTileEntity().getErrorDisplayID() & 256) != 0)); + + screenElements.widget( + new TextWidget(GTUtility.trans("139", "Hit with Soft Mallet")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled( + widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && !getBaseMetaTileEntity().isActive())) + .widget( + new FakeSyncWidget.IntegerSyncer( + () -> getBaseMetaTileEntity().getErrorDisplayID(), + val -> getBaseMetaTileEntity().setErrorDisplayID(val))) + .widget( + new FakeSyncWidget.BooleanSyncer( + () -> getBaseMetaTileEntity().isActive(), + val -> getBaseMetaTileEntity().setActive(val))); + screenElements.widget( + new TextWidget(GTUtility.trans("140", "to (re-)start the Machine")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled( + widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && !getBaseMetaTileEntity().isActive())); + screenElements.widget( + new TextWidget(GTUtility.trans("141", "if it doesn't start.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled( + widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && !getBaseMetaTileEntity().isActive())); + screenElements.widget( + new TextWidget(GTUtility.trans("142", "Running perfectly.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled( + widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && getBaseMetaTileEntity().isActive())); + + screenElements.widget(TextWidget.dynamicString(() -> { + Duration time = Duration.ofSeconds((mTotalRunTime - mLastWorkingTick) / 20); + return StatCollector.translateToLocalFormatted( + "GT5U.gui.text.shutdown_duration", + time.toHours(), + time.toMinutes() % 60, + time.getSeconds() % 60); + }) + .setEnabled( + widget -> shouldDisplayShutDownReason() && !getBaseMetaTileEntity().isActive() + && getBaseMetaTileEntity().wasShutdown())) + .widget(new FakeSyncWidget.LongSyncer(() -> mTotalRunTime, time -> mTotalRunTime = time)) + .widget(new FakeSyncWidget.LongSyncer(() -> mLastWorkingTick, time -> mLastWorkingTick = time)); + screenElements.widget( + TextWidget.dynamicString( + () -> getBaseMetaTileEntity().getLastShutDownReason() + .getDisplayString()) + .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled( + widget -> shouldDisplayShutDownReason() && !getBaseMetaTileEntity().isActive() + && GTUtility.isStringValid( + getBaseMetaTileEntity().getLastShutDownReason() + .getDisplayString()) + && getBaseMetaTileEntity().wasShutdown())) + .widget( + new ShutDownReasonSyncer( + () -> getBaseMetaTileEntity().getLastShutDownReason(), + reason -> getBaseMetaTileEntity().setShutDownReason(reason))) + .widget( + new FakeSyncWidget.BooleanSyncer( + () -> getBaseMetaTileEntity().wasShutdown(), + wasShutDown -> getBaseMetaTileEntity().setShutdownStatus(wasShutDown))); + + screenElements.widget( + TextWidget.dynamicString(() -> checkRecipeResult.getDisplayString()) + .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled( + widget -> shouldDisplayCheckRecipeResult() + && GTUtility.isStringValid(checkRecipeResult.getDisplayString()) + && (isAllowedToWork() || getBaseMetaTileEntity().isActive() + || checkRecipeResult.persistsOnShutdown()))) + .widget(new CheckRecipeResultSyncer(() -> checkRecipeResult, (result) -> checkRecipeResult = result)); + + if (showRecipeTextInGUI()) { + // Display current recipe + screenElements.widget( + TextWidget.dynamicString(this::generateCurrentRecipeInfoString) + .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled( + widget -> (mOutputFluids != null && mOutputFluids.length > 0) + || (mOutputItems != null && mOutputItems.length > 0))) + .widget( + new FakeSyncWidget.ListSyncer<>( + () -> mOutputFluids != null ? Arrays.asList(mOutputFluids) : Collections.emptyList(), + val -> mOutputFluids = val.toArray(new FluidStack[0]), + NetworkUtils::writeFluidStack, + NetworkUtils::readFluidStack)) + .widget( + new FakeSyncWidget.ListSyncer<>( + () -> mOutputItems != null ? Arrays.asList(mOutputItems) : Collections.emptyList(), + val -> mOutputItems = val.toArray(new ItemStack[0]), + NetworkUtils::writeItemStack, + NetworkUtils::readItemStack)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> mProgresstime, val -> mProgresstime = val)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> mMaxProgresstime, val -> mMaxProgresstime = val)); + } + + screenElements.widget( + new TextWidget(GTUtility.trans("144", "Missing Turbine Rotor")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> { + if (getBaseMetaTileEntity().isAllowedToWork()) return false; + if (getBaseMetaTileEntity().getErrorDisplayID() == 0 && this instanceof MTELargeTurbine) { + final ItemStack tItem = inventorySlot.getMcSlot() + .getStack(); + return tItem == null + || !(tItem.getItem() == MetaGeneratedTool01.INSTANCE && tItem.getItemDamage() >= 170 + && tItem.getItemDamage() <= 177); + } + return false; + })); + } + + protected boolean showRecipeTextInGUI() { + return true; + } + + @TestOnly + protected void setEnergyHatches(ArrayList EnergyHatches) { + this.mEnergyHatches = EnergyHatches; + } + + @TestOnly + protected void setExoticEnergyHatches(List ExoticEnergyHatches) { + this.mExoticEnergyHatches = ExoticEnergyHatches; + } + + public void fixAllIssues() { + mWrench = true; + mScrewdriver = true; + mSoftHammer = true; + mHardHammer = true; + mSolderingTool = true; + mCrowbar = true; + } + + public boolean getDefaultHasMaintenanceChecks() { + return true; + } + + public boolean shouldCheckMaintenance() { + return !disableMaintenance && hasMaintenanceChecks; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTESpecialFilter.java b/src/main/java/gregtech/api/metatileentity/implementations/MTESpecialFilter.java new file mode 100644 index 0000000000..c93b542805 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTESpecialFilter.java @@ -0,0 +1,132 @@ +package gregtech.api.metatileentity.implementations; + +import java.util.List; +import java.util.function.Function; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public abstract class MTESpecialFilter extends MTEFilterBase { + + private static final String ALLOW_NBT_TOOLTIP = "GT5U.machines.allow_nbt.tooltip"; + private boolean allowNbt = false; + + public MTESpecialFilter(int aID, String aName, String aNameRegional, int aTier, String[] aDescription) { + // 9 buffer slot, 1 representation slot, 1 holo slot. last seems not needed... + super(aID, aName, aNameRegional, aTier, 11, aDescription); + } + + public MTESpecialFilter(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTESpecialFilter(String aName, int aTier, int aInvSlotCount, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("bNBTAllowed", this.allowNbt); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.allowNbt = aNBT.getBoolean("bNBTAllowed"); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return (super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack)) + && ((this.allowNbt) || (!aStack.hasTagCompound())) + && (this.isStackAllowed(aStack) != this.invertFilter); + } + + protected abstract boolean isStackAllowed(ItemStack aStack); + + protected List getEmptySlotTooltip() { + return null; + } + + protected Function, List> getItemStackReplacementTooltip() { + return list -> list; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + addAllowNbtButton(builder); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_ARROW_24_WHITE.apply(27, false)) + .setPos(6, 19) + .setSize(27, 24)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_ARROW_24_BLUE.apply(42, true)) + .setPos(53, 19) + .setSize(42, 24)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_ARROW_24_RED.apply(19, true)) + .setPos(152, 19) + .setSize(19, 24)) + .widget( + createFilterIconSlot(BaseSlot.phantom(inventoryHandler, 9)).disableShiftInsert() + .setPos(34, 22) + .setBackground(GTUITextures.BUTTON_STANDARD)) + .widget( + SlotGroup.ofItemHandler(inventoryHandler, 3) + .endAtSlot(8) + .build() + .setPos(97, 4)); + } + + private void addAllowNbtButton(ModularWindow.Builder builder) { + builder.widget( + createToggleButton( + () -> allowNbt, + val -> allowNbt = val, + GTUITextures.OVERLAY_BUTTON_NBT, + () -> mTooltipCache.getData(ALLOW_NBT_TOOLTIP))); + } + + protected abstract SlotWidget createFilterIconSlot(BaseSlot slot); + + protected abstract class FilterIconSlotWidget extends SlotWidget { + + public FilterIconSlotWidget(BaseSlot slot) { + super(slot); + } + + @Override + protected abstract void phantomClick(ClickData clickData, ItemStack cursorStack); + + @Override + public void buildTooltip(List tooltip) { + super.buildTooltip(tooltip); + List emptySlotTooltip = getEmptySlotTooltip(); + if (emptySlotTooltip != null) { + tooltip.addAll(emptySlotTooltip); + } + } + + @Override + public Function, List> getOverwriteItemStackTooltip() { + return getItemStackReplacementTooltip(); + } + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTETieredMachineBlock.java b/src/main/java/gregtech/api/metatileentity/implementations/MTETieredMachineBlock.java new file mode 100644 index 0000000000..8bffeaf17e --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTETieredMachineBlock.java @@ -0,0 +1,119 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.GT; +import static gregtech.api.metatileentity.BaseTileEntity.BATTERY_SLOT_TOOLTIP; +import static gregtech.api.metatileentity.BaseTileEntity.BATTERY_SLOT_TOOLTIP_ALT; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; + +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.enums.GTValues; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.util.GTUtility; + +public abstract class MTETieredMachineBlock extends MetaTileEntity { + + /** + * Value between [0 - 9] to describe the Tier of this Machine. PLZ [0-15] works - READ! GT_Values class. + */ + public final byte mTier; + + /** + * A simple Description. + */ + public final String[] mDescriptionArray; + + /** + * Contains all Textures used by this Block. + */ + public final ITexture[][][] mTextures; + + public MTETieredMachineBlock(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String aDescription, ITexture... aTextures) { + super(aID, aName, aNameRegional, aInvSlotCount); + mTier = (byte) Math.max(0, Math.min(aTier, 14)); + mDescriptionArray = aDescription == null ? new String[0] : new String[] { aDescription }; + // must always be the last call! + if (GT.isClientSide()) mTextures = getTextureSet(aTextures); + else mTextures = null; + } + + public MTETieredMachineBlock(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String[] aDescription, ITexture... aTextures) { + super(aID, aName, aNameRegional, aInvSlotCount); + mTier = (byte) Math.max(0, Math.min(aTier, 15)); + mDescriptionArray = aDescription == null ? new String[0] : aDescription; + + // must always be the last call! + if (GT.isClientSide()) mTextures = getTextureSet(aTextures); + else mTextures = null; + } + + public MTETieredMachineBlock(String aName, int aTier, int aInvSlotCount, String aDescription, + ITexture[][][] aTextures) { + super(aName, aInvSlotCount); + mTier = (byte) aTier; + mDescriptionArray = aDescription == null ? new String[0] : new String[] { aDescription }; + mTextures = aTextures; + } + + public MTETieredMachineBlock(String aName, int aTier, int aInvSlotCount, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aInvSlotCount); + mTier = (byte) aTier; + mDescriptionArray = aDescription == null ? new String[0] : aDescription; + mTextures = aTextures; + } + + @Override + public byte getTileEntityBaseType() { + return (byte) (Math.min(3, mTier <= 0 ? 0 : 1 + ((mTier - 1) / 4))); + } + + @Override + public long getInputTier() { + return mTier; + } + + @Override + public long getOutputTier() { + return mTier; + } + + @Override + public String[] getDescription() { + return mDescriptionArray; + } + + /** + * Used Client Side to get a Texture Set for this Block. Called after setting the Tier and the Description so that + * those two are accessible. + * + * @param aTextures is the optional Array you can give to the Constructor. + */ + public abstract ITexture[][][] getTextureSet(ITexture[] aTextures); + + protected SlotWidget createChargerSlot(int x, int y) { + final String batterySlotTooltipKey; + final Object[] batterySlotTooltipArgs; + final String pTier1 = GTUtility.getColoredTierNameFromTier(mTier); + if (mTier == GTValues.VN.length - 1) { + batterySlotTooltipKey = BATTERY_SLOT_TOOLTIP_ALT; + batterySlotTooltipArgs = new String[] { pTier1 }; + } else { + batterySlotTooltipKey = BATTERY_SLOT_TOOLTIP; + batterySlotTooltipArgs = new String[] { pTier1, GTUtility.getColoredTierNameFromTier((byte) (mTier + 1)) }; + } + return createChargerSlot(x, y, batterySlotTooltipKey, batterySlotTooltipArgs); + } + + protected SlotWidget createChargerSlot(int x, int y, String tooltipKey, Object[] tooltipArgs) { + return (SlotWidget) new SlotWidget(inventoryHandler, rechargerSlotStartIndex()).disableShiftInsert() + .setGTTooltip(() -> mTooltipCache.getData(tooltipKey, tooltipArgs)) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_CHARGER) + .setPos(x, y); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTETooltipMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/MTETooltipMultiBlockBase.java new file mode 100644 index 0000000000..71fce08c7e --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTETooltipMultiBlockBase.java @@ -0,0 +1,56 @@ +package gregtech.api.metatileentity.implementations; + +import java.util.concurrent.atomic.AtomicReferenceArray; + +import org.lwjgl.input.Keyboard; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ISecondaryDescribable; +import gregtech.api.util.MultiblockTooltipBuilder; + +/** + * A multiblock with tooltip {@link MultiblockTooltipBuilder} + */ +public abstract class MTETooltipMultiBlockBase extends MTEMultiBlockBase implements ISecondaryDescribable { + + private static final AtomicReferenceArray tooltips = new AtomicReferenceArray<>( + GregTechAPI.METATILEENTITIES.length); + + public MTETooltipMultiBlockBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTETooltipMultiBlockBase(String aName) { + super(aName); + } + + protected MultiblockTooltipBuilder getTooltip() { + int tId = getBaseMetaTileEntity().getMetaTileID(); + MultiblockTooltipBuilder tooltip = tooltips.get(tId); + if (tooltip == null) { + tooltip = createTooltip(); + tooltips.set(tId, tooltip); + } + return tooltip; + } + + protected abstract MultiblockTooltipBuilder createTooltip(); + + @Override + public String[] getDescription() { + return getCurrentDescription(); + } + + @Override + public boolean isDisplaySecondaryDescription() { + return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT); + } + + public String[] getPrimaryDescription() { + return getTooltip().getInformation(); + } + + public String[] getSecondaryDescription() { + return getTooltip().getStructureInformation(); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTETransformer.java b/src/main/java/gregtech/api/metatileentity/implementations/MTETransformer.java new file mode 100644 index 0000000000..d2b88d26bc --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTETransformer.java @@ -0,0 +1,325 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Mods.EnderIO; +import static mcp.mobius.waila.api.SpecialChars.BLUE; +import static mcp.mobius.waila.api.SpecialChars.GOLD; +import static mcp.mobius.waila.api.SpecialChars.GREEN; +import static mcp.mobius.waila.api.SpecialChars.RED; +import static mcp.mobius.waila.api.SpecialChars.RESET; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import cofh.api.energy.IEnergyProvider; +import cofh.api.energy.IEnergyStorage; +import crazypants.enderio.machine.capbank.TileCapBank; +import crazypants.enderio.machine.capbank.network.ICapBankNetwork; +import crazypants.enderio.power.IPowerContainer; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +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.util.GTUtility; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + *

+ * This is the main construct for my Basic Machines such as the Automatic Extractor Extend this class to make a simple + * Machine + */ +public class MTETransformer extends MTETieredMachineBlock { + + public MTETransformer(int aID, String aName, String aNameRegional, int aTier, String aDescription) { + super(aID, aName, aNameRegional, aTier, 0, aDescription); + } + + public MTETransformer(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + public MTETransformer(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[12][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; + rTextures[1][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; + rTextures[2][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; + rTextures[3][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; + rTextures[4][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; + rTextures[5][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; + rTextures[6][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; + rTextures[7][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; + rTextures[8][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; + rTextures[9][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; + rTextures[10][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; + rTextures[11][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; + } + return rTextures; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + return mTextures[Math.min(2, side.ordinal()) + (side == facingDirection ? 3 : 0) + + (baseMetaTileEntity.isAllowedToWork() ? 0 : 6)][colorIndex + 1]; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTETransformer(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + ForgeDirection blockFrontFacing = getBaseMetaTileEntity().getFrontFacing(); + + if (getBaseMetaTileEntity().isAllowedToWork()) { + return side == blockFrontFacing; + } else { + return side != blockFrontFacing; + } + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return !isInputFacing(side); + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return V[mTier + 1]; + } + + @Override + public long maxEUStore() { + return Math.max(512L, 1L << (mTier + 2)) + V[mTier + 1] * 4L; + } + + @Override + public long maxEUInput() { + return V[getBaseMetaTileEntity().isAllowedToWork() ? mTier + 1 : mTier]; + } + + @Override + public long maxEUOutput() { + return V[getBaseMetaTileEntity().isAllowedToWork() ? mTier : mTier + 1]; + } + + @Override + public long maxAmperesOut() { + return getBaseMetaTileEntity().isAllowedToWork() ? 4 : 1; + } + + @Override + public long maxAmperesIn() { + return getBaseMetaTileEntity().isAllowedToWork() ? 1 : 4; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && GregTechAPI.mInputRF) { + aBaseMetaTileEntity.setActive(aBaseMetaTileEntity.isAllowedToWork()); + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (aBaseMetaTileEntity.getStoredEU() >= aBaseMetaTileEntity.getEUCapacity()) break; + if (!aBaseMetaTileEntity.inputEnergyFrom(side)) continue; + final TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(side); + if (tTileEntity instanceof IEnergyProvider energyProvider + && energyProvider.extractEnergy(side.getOpposite(), 1, true) == 1) { + long tEU = ((IEnergyProvider) tTileEntity).extractEnergy( + side.getOpposite(), + GTUtility.safeInt(maxEUInput() * 100L / GregTechAPI.mRFtoEU), + false); + tEU = tEU * GregTechAPI.mRFtoEU / 100; + aBaseMetaTileEntity.injectEnergyUnits(ForgeDirection.UNKNOWN, Math.min(tEU, maxEUInput()), 1); + } else if (tTileEntity instanceof IEnergyStorage energyStorage + && energyStorage.extractEnergy(1, true) == 1) { + long tEU = ((IEnergyStorage) tTileEntity) + .extractEnergy(GTUtility.safeInt(maxEUInput() * 100L / GregTechAPI.mRFtoEU), false); + tEU = tEU * GregTechAPI.mRFtoEU / 100; + aBaseMetaTileEntity.injectEnergyUnits(ForgeDirection.UNKNOWN, Math.min(tEU, maxEUInput()), 1); + } else if (EnderIO.isModLoaded() && tTileEntity instanceof IPowerContainer powerContainer + && powerContainer.getEnergyStored() > 0) { + final int storedRF = powerContainer.getEnergyStored(); + final int extractRF = GTUtility.safeInt(maxEUInput() * 100L / GregTechAPI.mRFtoEU); + long tEU = 0; + if (tTileEntity instanceof TileCapBank capBank) { + ICapBankNetwork network = capBank.getNetwork(); + if (network != null && network.getEnergyStoredL() > 0) { + tEU = Math.min( + (Math.min( + Math.min(network.getEnergyStoredL(), storedRF - extractRF), + network.getMaxOutput())) * (long) GregTechAPI.mRFtoEU / 100L, + maxEUInput()); + network.addEnergy(GTUtility.safeInt(-(tEU * 100 / GregTechAPI.mRFtoEU))); + } + } else { + if (storedRF > extractRF) { + powerContainer.setEnergyStored(storedRF - extractRF); + tEU = maxEUInput(); + } else { + powerContainer.setEnergyStored(0); + tEU = storedRF * (long) GregTechAPI.mRFtoEU / 100L; + } + } + aBaseMetaTileEntity + .injectEnergyUnits(ForgeDirection.UNKNOWN, Math.min(tEU, maxEUInput()), 1); + } + } + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + // + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + // + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean hasAlternativeModeText() { + return true; + } + + @Override + public String getAlternativeModeText() { + return (getBaseMetaTileEntity().isAllowedToWork() ? GTUtility.trans("145", "Step Down, In: ") + : GTUtility.trans("146", "Step Up, In: ")) + maxEUInput() + + GTUtility.trans("148", "V ") + + maxAmperesIn() + + GTUtility.trans("147", "A, Out: ") + + maxEUOutput() + + GTUtility.trans("148", "V ") + + maxAmperesOut() + + GTUtility.trans("149", "A"); + } + + @Override + public boolean shouldJoinIc2Enet() { + return true; + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + final ForgeDirection facing = getBaseMetaTileEntity().getFrontFacing(); + final NBTTagCompound tag = accessor.getNBTData(); + final ForgeDirection side = accessor.getSide(); + final boolean allowedToWork = tag.getBoolean("isAllowedToWork"); + + final byte inputTier = GTUtility.getTier(tag.getLong("maxEUInput")); + final byte outputTier = GTUtility.getTier(tag.getLong("maxEUOutput")); + + currenttip.add( + String.format( + "%s %s(%dA) -> %s(%dA)", + (allowedToWork ? (GREEN + "Step Down") : (RED + "Step Up")) + RESET, + GTMod.gregtechproxy.mWailaTransformerVoltageTier ? GTUtility.getColoredTierNameFromTier(inputTier) + : tag.getLong("maxEUInput"), + tag.getLong("maxAmperesIn"), + GTMod.gregtechproxy.mWailaTransformerVoltageTier ? GTUtility.getColoredTierNameFromTier(outputTier) + : tag.getLong("maxEUOutput"), + tag.getLong("maxAmperesOut"))); + + if ((side == facing && allowedToWork) || (side != facing && !allowedToWork)) { + currenttip.add( + String.format( + GOLD + "Input:" + RESET + " %s(%dA)", + GTMod.gregtechproxy.mWailaTransformerVoltageTier ? GTUtility.getColoredTierNameFromTier(inputTier) + : tag.getLong("maxEUInput"), + tag.getLong("maxAmperesIn"))); + } else { + currenttip.add( + String.format( + BLUE + "Output:" + RESET + " %s(%dA)", + GTMod.gregtechproxy.mWailaTransformerVoltageTier ? GTUtility.getColoredTierNameFromTier(outputTier) + : tag.getLong("maxEUOutput"), + tag.getLong("maxAmperesOut"))); + } + + super.getWailaBody(itemStack, currenttip, accessor, config); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setBoolean("isAllowedToWork", getBaseMetaTileEntity().isAllowedToWork()); + tag.setLong("maxEUInput", maxEUInput()); + tag.setLong("maxAmperesIn", maxAmperesIn()); + tag.setLong("maxEUOutput", maxEUOutput()); + tag.setLong("maxAmperesOut", maxAmperesOut()); + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEWetTransformer.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEWetTransformer.java new file mode 100644 index 0000000000..e2c2437311 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEWetTransformer.java @@ -0,0 +1,92 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; + +import net.minecraft.util.EnumChatFormatting; + +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; + +public class MTEWetTransformer extends MTETransformer { + + public MTEWetTransformer(int aID, String aName, String aNameRegional, int aTier, String aDescription) { + super(aID, aName, aNameRegional, aTier, aDescription); + } + + public MTEWetTransformer(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEWetTransformer(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[12][17][]; + for (byte b = -1; b < 16; b++) { + rTextures[0][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; + rTextures[1][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; + rTextures[2][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier] }; + rTextures[3][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_POWER[mTier + 1] }; + rTextures[4][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_POWER[mTier + 1] }; + rTextures[5][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_POWER[mTier + 1] }; + rTextures[6][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; + rTextures[7][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; + rTextures[8][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier] }; + rTextures[9][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier + 1] }; + rTextures[10][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier + 1] }; + rTextures[11][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier + 1] }; + } + return rTextures; + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll( + mDescriptionArray, + "Accepts 16A and outputs 64A", + EnumChatFormatting.BLUE + "Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.BLUE + + ": Interdimensional"); + } + + @Override + public long getMinimumStoredEU() { + return V[mTier + 1]; + } + + @Override + public long maxEUStore() { + return 512L + V[mTier + 1] * 128L; + } + + @Override + public long maxAmperesOut() { + return getBaseMetaTileEntity().isAllowedToWork() ? 64 : 16; + } + + @Override + public long maxAmperesIn() { + return getBaseMetaTileEntity().isAllowedToWork() ? 16 : 64; + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEWirelessDynamo.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEWirelessDynamo.java new file mode 100644 index 0000000000..fc7bc3fae2 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEWirelessDynamo.java @@ -0,0 +1,144 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.AuthorColen; +import static gregtech.api.enums.GTValues.V; +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static gregtech.common.misc.WirelessNetworkManager.strongCheckOrAddUser; + +import java.util.UUID; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IWirelessEnergyHatchInformation; +import gregtech.api.metatileentity.MetaTileEntity; + +public class MTEWirelessDynamo extends MTEHatchDynamo implements IWirelessEnergyHatchInformation { + + private UUID owner_uuid; + + public MTEWirelessDynamo(String aName, byte aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEWirelessDynamo(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, new String[] { "" }); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI_WIRELESS_ON[mTier] }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI_WIRELESS_ON[mTier] }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 2 * V[mTier]; + } + + @Override + public long maxEUOutput() { + return V[mTier]; + } + + @Override + public long maxEUStore() { + return totalStorage(V[mTier]); + } + + @Override + public String[] getDescription() { + return new String[] { EnumChatFormatting.GRAY + "Stores energy globally in a network, up to 2^(2^31) EU.", + EnumChatFormatting.GRAY + "Does not connect to wires. This block accepts EU into the network.", + AuthorColen }; + } + + @Override + public long maxAmperesOut() { + return 2; + } + + @Override + public ConnectionType getConnectionType() { + return ConnectionType.WIRELESS; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEWirelessDynamo(mName, mTier, new String[] { "" }, mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + + if (aBaseMetaTileEntity.isServerSide()) { + + // On first tick find the player name and attempt to add them to the map. + if (aTick == 1) { + + // UUID and username of the owner. + owner_uuid = aBaseMetaTileEntity.getOwnerUuid(); + + strongCheckOrAddUser(owner_uuid); + } + + // Every ticks_between_energy_addition ticks change the energy content of the machine. + if (aTick % ticks_between_energy_addition == 0L) { + addEUToGlobalEnergyMap(owner_uuid, getEUVar()); + setEUVar(0L); + } + } + } +} diff --git a/src/main/java/gregtech/api/metatileentity/implementations/MTEWirelessEnergy.java b/src/main/java/gregtech/api/metatileentity/implementations/MTEWirelessEnergy.java new file mode 100644 index 0000000000..e195b4ab08 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/implementations/MTEWirelessEnergy.java @@ -0,0 +1,167 @@ +package gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.AuthorColen; +import static gregtech.api.enums.GTValues.V; +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static java.lang.Long.min; + +import java.math.BigInteger; +import java.util.UUID; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IWirelessEnergyHatchInformation; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.common.misc.spaceprojects.SpaceProjectManager; + +public class MTEWirelessEnergy extends MTEHatchEnergy implements IWirelessEnergyHatchInformation { + + private final BigInteger eu_transferred_per_operation = BigInteger + .valueOf(2 * V[mTier] * ticks_between_energy_addition); + private final long eu_transferred_per_operation_long = eu_transferred_per_operation.longValue(); + + private UUID owner_uuid; + + public MTEWirelessEnergy(String aName, byte aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + public MTEWirelessEnergy(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, new String[] { "" }); + } + + @Override + public String[] getDescription() { + return new String[] { EnumChatFormatting.GRAY + "Stores energy globally in a network, up to 2^(2^31) EU.", + EnumChatFormatting.GRAY + "Does not connect to wires. This block withdraws EU from the network.", + AuthorColen }; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI_WIRELESS_ON[mTier] }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI_WIRELESS_ON[mTier] }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isEnetInput() { + return false; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 2 * V[mTier]; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxEUStore() { + return totalStorage(V[mTier]); + } + + @Override + public long maxAmperesIn() { + return 2; + } + + @Override + public ConnectionType getConnectionType() { + return ConnectionType.WIRELESS; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEWirelessEnergy(mName, mTier, new String[] { "" }, mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + + if (!aBaseMetaTileEntity.isServerSide()) return; + + // UUID of the owner. + owner_uuid = aBaseMetaTileEntity.getOwnerUuid(); + + SpaceProjectManager.checkOrCreateTeam(owner_uuid);; + + tryFetchingEnergy(); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + + super.onPreTick(aBaseMetaTileEntity, aTick); + + if (aBaseMetaTileEntity.isServerSide()) { + // This is set up in a way to be as optimised as possible. If a user has a relatively plentiful energy + // network + // it should make no difference to them. Minimising the number of operations on BigInteger is essential. + + // Every ticks_between_energy_addition add eu_transferred_per_operation to internal EU storage from network. + if (aTick % ticks_between_energy_addition == 0L) { + tryFetchingEnergy(); + } + } + } + + private void tryFetchingEnergy() { + long currentEU = getBaseMetaTileEntity().getStoredEU(); + long maxEU = maxEUStore(); + long euToTransfer = min(maxEU - currentEU, eu_transferred_per_operation_long); + if (euToTransfer <= 0) return; // nothing to transfer + if (!addEUToGlobalEnergyMap(owner_uuid, -euToTransfer)) return; + setEUVar(currentEU + euToTransfer); + } +} diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java index f5cf261be1..f1f4b8591a 100644 --- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java +++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java @@ -1,11 +1,11 @@ package gregtech.api.multitileentity; -import static gregtech.api.enums.GT_Values.OFFX; -import static gregtech.api.enums.GT_Values.OFFY; -import static gregtech.api.enums.GT_Values.OFFZ; -import static gregtech.api.util.GT_Util.LAST_BROKEN_TILEENTITY; -import static gregtech.api.util.GT_Util.getTileEntity; -import static gregtech.api.util.GT_Util.setTileEntity; +import static gregtech.api.enums.GTValues.OFFX; +import static gregtech.api.enums.GTValues.OFFY; +import static gregtech.api.enums.GTValues.OFFZ; +import static gregtech.api.util.GTUtil.LAST_BROKEN_TILEENTITY; +import static gregtech.api.util.GTUtil.getTileEntity; +import static gregtech.api.util.GTUtil.setTileEntity; import java.util.ArrayList; import java.util.List; @@ -44,7 +44,7 @@ import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.enums.ItemList; import gregtech.api.enums.Textures; import gregtech.api.interfaces.IDebugableBlock; @@ -53,10 +53,10 @@ import gregtech.api.metatileentity.BaseTileEntity; import gregtech.api.metatileentity.CoverableTileEntity; import gregtech.api.multitileentity.interfaces.IMultiTileEntity; import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Util; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtil; import gregtech.common.covers.CoverInfo; -import gregtech.common.render.GT_MultiTile_Renderer; +import gregtech.common.render.MultiTileRenderer; /* * MultiTileEntityBlock ported from GT6 @@ -85,7 +85,7 @@ public class MultiTileEntityBlock extends BlockContainer implements IDebugableBl public MultiTileEntityBlock(Material material) { super(material); - if (GregTech_API.sPreloadFinished) + if (GregTechAPI.sPreloadFinished) throw new IllegalStateException("Blocks can only be initialized within preInit!"); } @@ -121,7 +121,7 @@ public class MultiTileEntityBlock extends BlockContainer implements IDebugableBl public MultiTileEntityBlock register() { if (registered) throw new IllegalStateException("Block already registered " + internalName); - if (GregTech_API.sPreloadFinished) + if (GregTechAPI.sPreloadFinished) throw new IllegalStateException("Blocks can only be initialized within preInit!"); registered = true; @@ -141,7 +141,7 @@ public class MultiTileEntityBlock extends BlockContainer implements IDebugableBl // spotless:off // if (aTileEntity instanceof IMTE_HasMultiBlockMachineRelevantData // && ((IMTE_HasMultiBlockMachineRelevantData) aTileEntity).hasMultiBlockMachineRelevantData()) - // GregTech_API.causeMachineUpdate(world, x, y, z); + // GregTechAPI.causeMachineUpdate(world, x, y, z); // spotless:on world.removeTileEntity(x, y, z); @@ -160,8 +160,7 @@ public class MultiTileEntityBlock extends BlockContainer implements IDebugableBl @Override public int getRenderType() { - return GT_MultiTile_Renderer.INSTANCE == null ? super.getRenderType() - : GT_MultiTile_Renderer.INSTANCE.getRenderId(); + return MultiTileRenderer.INSTANCE == null ? super.getRenderType() : MultiTileRenderer.INSTANCE.getRenderId(); } @Override @@ -455,7 +454,7 @@ public class MultiTileEntityBlock extends BlockContainer implements IDebugableBl @Override public boolean removedByPlayer(World world, EntityPlayer aPlayer, int x, int y, int z, boolean aWillHarvest) { - final TileEntity tileEntity = GT_Util.getTileEntity(world, x, y, z, true); + final TileEntity tileEntity = GTUtil.getTileEntity(world, x, y, z, true); if (tileEntity != null) LAST_BROKEN_TILEENTITY.set(tileEntity); return super.removedByPlayer(world, aPlayer, x, y, z, aWillHarvest); } @@ -467,7 +466,7 @@ public class MultiTileEntityBlock extends BlockContainer implements IDebugableBl @Override public int getFireSpreadSpeed(IBlockAccess world, int x, int y, int z, ForgeDirection face) { - return GregTech_API.sMachineFlammable && (world.getBlockMetadata(x, y, z) == 0) ? 100 : 0; + return GregTechAPI.sMachineFlammable && (world.getBlockMetadata(x, y, z) == 0) ? 100 : 0; } @Override @@ -502,7 +501,7 @@ public class MultiTileEntityBlock extends BlockContainer implements IDebugableBl final TileEntity tileEntity = getTileEntity(world, x, y, z, true); if (tileEntity != null) LAST_BROKEN_TILEENTITY.set(tileEntity); if (tileEntity instanceof IMultiTileEntity mute) { - GT_Log.exp.printf( + GTLog.exp.printf( "Explosion at : %d | %d | %d DIMID: %s due to near explosion!%n", x, y, diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java index 325f583149..ca265e529e 100644 --- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java +++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityClassContainer.java @@ -1,6 +1,6 @@ package gregtech.api.multitileentity; -import static gregtech.api.enums.GT_Values.NBT; +import static gregtech.api.enums.GTValues.NBT; import java.lang.ref.WeakReference; @@ -11,7 +11,7 @@ import gregtech.api.enums.Materials; import gregtech.api.multitileentity.base.MultiTileEntity; import gregtech.api.multitileentity.multiblock.casing.FunctionalCasing; import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing; -import gregtech.api.util.GT_Util; +import gregtech.api.util.GTUtil; import gregtech.common.tileentities.casings.upgrade.Inventory; import gregtech.common.tileentities.casings.upgrade.Tank; @@ -43,7 +43,7 @@ public class MultiTileEntityClassContainer { if (parameters.hasKey(NBT.MATERIAL) && !parameters.hasKey(NBT.COLOR)) parameters.setInteger( NBT.COLOR, - GT_Util.getRGBInt( + GTUtil.getRGBInt( Materials.get(parameters.getString(NBT.MATERIAL)) .getRGBA())); @@ -80,7 +80,7 @@ public class MultiTileEntityClassContainer { public MultiTileEntityClassContainer material(Materials material) { // Sets the material, and the color from the material, if not already set parameters.setString(NBT.MATERIAL, material.toString()); - if (!parameters.hasKey(NBT.COLOR)) parameters.setInteger(NBT.COLOR, GT_Util.getRGBInt(material.getRGBA())); + if (!parameters.hasKey(NBT.COLOR)) parameters.setInteger(NBT.COLOR, GTUtil.getRGBInt(material.getRGBA())); return this; } @@ -90,7 +90,7 @@ public class MultiTileEntityClassContainer { } public MultiTileEntityClassContainer color(short[] rgba) { - parameters.setInteger(NBT.COLOR, GT_Util.getRGBInt(rgba)); + parameters.setInteger(NBT.COLOR, GTUtil.getRGBInt(rgba)); return this; } @@ -154,7 +154,7 @@ public class MultiTileEntityClassContainer { * Merge in arbitrary NBT tuples of (key, value). Useful for anything for which a custom method has not yet been * exposed */ - parameters = GT_Util.fuseNBT(parameters, GT_Util.makeNBT(aTags)); + parameters = GTUtil.fuseNBT(parameters, GTUtil.makeNBT(aTags)); return this; } diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java index e67ab61e96..bf7259626f 100644 --- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java +++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityItem.java @@ -1,7 +1,7 @@ package gregtech.api.multitileentity; -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.GT_Values.SIDE_TOP; +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.enums.GTValues.SIDE_TOP; import java.util.List; @@ -132,7 +132,7 @@ public class MultiTileEntityItem extends ItemBlock { * Add back if needed */ // try { - // GregTech_API.causeMachineUpdate(world, x, y, z); + // GregTechAPI.causeMachineUpdate(world, x, y, z); // } catch (Throwable e) { // GT_FML_LOGGER.error("causeMachineUpdate", e); // } diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java index 0b5afbb043..186110abb7 100644 --- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java +++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityRegistry.java @@ -1,6 +1,6 @@ package gregtech.api.multitileentity; -import static gregtech.GT_Mod.GT_FML_LOGGER; +import static gregtech.GTMod.GT_FML_LOGGER; import java.util.ArrayList; import java.util.HashMap; @@ -21,12 +21,12 @@ import com.gtnewhorizon.gtnhlib.util.map.ItemStackMap; import appeng.core.CreativeTab; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.LoaderState; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.multitileentity.base.MultiTileEntity; import gregtech.api.multitileentity.interfaces.IMultiTileEntity; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Util; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtil; +import gregtech.api.util.GTUtility; import it.unimi.dsi.fastutil.shorts.Short2ObjectMap; import it.unimi.dsi.fastutil.shorts.Short2ObjectOpenHashMap; @@ -61,7 +61,7 @@ public class MultiTileEntityRegistry { this.block = block; GT_FML_LOGGER.info(internalName + " " + Block.getIdFromBlock(block) + " This is the answer"); this.block.setRegistry(this); - REGISTRIES.put(new ItemStack(Item.getItemById(Block.getIdFromBlock(block)), 1, GT_Values.W), this); + REGISTRIES.put(new ItemStack(Item.getItemById(Block.getIdFromBlock(block)), 1, GTValues.W), this); NAMED_REGISTRIES.put(internalName, this); } @@ -84,7 +84,7 @@ public class MultiTileEntityRegistry { } public static MultiTileEntityRegistry getRegistry(int aRegistryID) { - return REGISTRIES.get(new ItemStack(Item.getItemById(aRegistryID), 1, GT_Values.W)); + return REGISTRIES.get(new ItemStack(Item.getItemById(aRegistryID), 1, GTValues.W)); } public static MultiTileEntityRegistry getRegistry(String aRegistryName) { @@ -101,7 +101,7 @@ public class MultiTileEntityRegistry { */ public ItemStack add(String aLocalised, MultiTileEntityClassContainer aClassContainer) { boolean tFailed = false; - if (GT_Utility.isStringInvalid(aLocalised)) { + if (GTUtility.isStringInvalid(aLocalised)) { GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Localisation Missing!"); tFailed = true; } @@ -113,7 +113,7 @@ public class MultiTileEntityRegistry { GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Class inside Class Container is null!"); tFailed = true; } - if (aClassContainer.getMuteID() == GT_Values.W) { + if (aClassContainer.getMuteID() == GTValues.W) { GT_FML_LOGGER.error("MULTI-TILE REGISTRY ERROR: Class Container uses Wildcard MetaData!"); tFailed = true; } @@ -138,8 +138,7 @@ public class MultiTileEntityRegistry { return null; } - GT_LanguageManager - .addStringLocalization(internalName + "." + aClassContainer.getMuteID() + ".name", aLocalised); + GTLanguageManager.addStringLocalization(internalName + "." + aClassContainer.getMuteID() + ".name", aLocalised); registry.put(aClassContainer.getMuteID(), aClassContainer); mLastRegisteredID = aClassContainer.getMuteID(); registrations.add(aClassContainer); @@ -154,7 +153,7 @@ public class MultiTileEntityRegistry { return getItem(aClassContainer.getMuteID()); } - public short mLastRegisteredID = GT_Values.W; + public short mLastRegisteredID = GTValues.W; public ItemStack getItem() { return getItem(mLastRegisteredID, 1, null); @@ -206,14 +205,14 @@ public class MultiTileEntityRegistry { public TileEntity getNewTileEntity(World aWorld, int x, int y, int z, int metaID, NBTTagCompound nbt) { final MultiTileEntityClassContainer container = registry.get((short) metaID); if (container == null) return null; - final MultiTileEntity te = (MultiTileEntity) GT_Utility + final MultiTileEntity te = (MultiTileEntity) GTUtility .callConstructor(container.getMuteClass(), -1, null, true); te.setWorldObj(aWorld); te.xCoord = x; te.yCoord = y; te.zCoord = z; nbt = (nbt == null || nbt.hasNoTags()) ? container.getParameters() - : GT_Util.fuseNBT(nbt, container.getParameters()); + : GTUtil.fuseNBT(nbt, container.getParameters()); te.initFromNBT(nbt, (short) metaID, (short) Block.getIdFromBlock(block)); return te; } diff --git a/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java index eeadfe7602..24163f9c20 100644 --- a/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java +++ b/src/main/java/gregtech/api/multitileentity/base/MultiTileEntity.java @@ -1,7 +1,7 @@ package gregtech.api.multitileentity.base; -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.GT_Values.VALID_SIDES; +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.enums.GTValues.VALID_SIDES; import java.io.IOException; import java.util.ArrayList; @@ -35,15 +35,15 @@ import net.minecraftforge.fluids.Fluid; import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.GT_Values.NBT; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.GTValues.NBT; import gregtech.api.enums.Materials; import gregtech.api.enums.Mods; import gregtech.api.enums.SoundResource; import gregtech.api.enums.Textures; import gregtech.api.enums.Textures.BlockIcons.CustomIcon; -import gregtech.api.gui.modularui.GT_UIInfos; +import gregtech.api.gui.modularui.GTUIInfos; import gregtech.api.interfaces.ITexture; import gregtech.api.metatileentity.CoverableTileEntity; import gregtech.api.metatileentity.GregTechTileClientEvents; @@ -52,18 +52,18 @@ import gregtech.api.multitileentity.MultiTileEntityClassContainer; import gregtech.api.multitileentity.MultiTileEntityRegistry; import gregtech.api.multitileentity.interfaces.IMultiTileEntity; import gregtech.api.multitileentity.interfaces.SyncedMultiTileEntity; -import gregtech.api.net.GT_Packet_MultiTileEntity; -import gregtech.api.net.GT_Packet_New; +import gregtech.api.net.GTPacketMultiTileEntity; +import gregtech.api.net.GTPacketNew; import gregtech.api.net.data.CommonData; import gregtech.api.net.data.CoordinateData; import gregtech.api.net.data.MultiTileEntityData; -import gregtech.api.objects.GT_ItemStack; +import gregtech.api.objects.GTItemStack; import gregtech.api.objects.XSTR; import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Util; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtil; +import gregtech.api.util.GTUtility; import gregtech.common.render.MultiTileBasicRender; import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; @@ -98,16 +98,16 @@ public abstract class MultiTileEntity extends CoverableTileEntity protected ForgeDirection facing = ForgeDirection.WEST; // Default to WEST, so it renders facing Left in the // inventory protected byte color; - protected int rgba = GT_Values.UNCOLORED; - private short mteID = GT_Values.W, mteRegistry = GT_Values.W; + protected int rgba = GTValues.UNCOLORED; + private short mteID = GTValues.W, mteRegistry = GTValues.W; private String customName = null; private String ownerName = ""; - private UUID ownerUUID = GT_Utility.defaultUuid; + private UUID ownerUUID = GTUtility.defaultUuid; private boolean lockUpgrade = false; - private final GT_Packet_MultiTileEntity fullPacket = new GT_Packet_MultiTileEntity(false); - private final GT_Packet_MultiTileEntity timedPacket = new GT_Packet_MultiTileEntity(false); - private final GT_Packet_MultiTileEntity graphicPacket = new GT_Packet_MultiTileEntity(false); + private final GTPacketMultiTileEntity fullPacket = new GTPacketMultiTileEntity(false); + private final GTPacketMultiTileEntity timedPacket = new GTPacketMultiTileEntity(false); + private final GTPacketMultiTileEntity graphicPacket = new GTPacketMultiTileEntity(false); public MultiTileEntity(boolean isTicking) { this.isTicking = isTicking; @@ -213,7 +213,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity @Override public void readFromNBT(NBTTagCompound nbt) { // Check if it is a World/Chunk-Loading Process calling readFromNBT - if (mteID == GT_Values.W || mteRegistry == GT_Values.W) { + if (mteID == GTValues.W || mteRegistry == GTValues.W) { // Read the ID Tags first mteID = nbt.getShort(NBT.MTE_ID); mteRegistry = nbt.getShort(NBT.MTE_REG); @@ -224,7 +224,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity if (tClass != null) { // Add the Default Parameters. Useful for things that differ between different tiers/types of the // same machine - nbt = GT_Util.fuseNBT(nbt, tClass.getParameters()); + nbt = GTUtil.fuseNBT(nbt, tClass.getParameters()); } } } @@ -255,7 +255,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity readMultiTileNBT(nbt); if (NetworkUtils.isDedicatedClient()) { - if (GregTech_API.sBlockIcons == null && nbt.hasKey(NBT.TEXTURE_FOLDER)) { + if (GregTechAPI.sBlockIcons == null && nbt.hasKey(NBT.TEXTURE_FOLDER)) { loadTextures(nbt.getString(NBT.TEXTURE_FOLDER)); } else { copyTextures(); @@ -284,7 +284,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity nbt.setShort(NBT.MTE_ID, mteID); nbt.setShort(NBT.MTE_REG, mteRegistry); // write the Custom Name - if (GT_Utility.isStringValid(customName)) { + if (GTUtility.isStringValid(customName)) { final NBTTagCompound displayNBT; if (nbt.hasKey(NBT.DISPLAY)) { displayNBT = nbt.getCompoundTag(NBT.DISPLAY); @@ -349,7 +349,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity public TileEntity getTileEntity(int aX, int aY, int aZ) { if (worldObj == null || (ignoreUnloadedChunks && crossedChunkBorder(aX, aZ) && !worldObj.blockExists(aX, aY, aZ))) return null; - return GT_Util.getTileEntity(worldObj, aX, aY, aZ, true); + return GTUtil.getTileEntity(worldObj, aX, aY, aZ, true); } @Override @@ -410,7 +410,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity @Override public String getCustomName() { - return GT_Utility.isStringValid(customName) ? customName : null; + return GTUtility.isStringValid(customName) ? customName : null; } @Override @@ -468,7 +468,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity if (shouldTriggerBlockUpdate()) { // If we're triggering a block update this will call onMachineBlockUpdate() - GregTech_API.causeMachineUpdate(worldObj, xCoord, yCoord, zCoord); + GregTechAPI.causeMachineUpdate(worldObj, xCoord, yCoord, zCoord); } else { // If we're not trigger a cascading one, call the update here. onMachineBlockUpdate(); @@ -653,7 +653,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity } @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCoverID) { + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCoverID) { return true; } @@ -696,13 +696,13 @@ public abstract class MultiTileEntity extends CoverableTileEntity @Override public String getOwnerName() { - if (GT_Utility.isStringInvalid(ownerName)) return "Player"; + if (GTUtility.isStringInvalid(ownerName)) return "Player"; return ownerName; } @Override public String setOwnerName(String aName) { - if (GT_Utility.isStringInvalid(aName)) return ownerName = "Player"; + if (GTUtility.isStringInvalid(aName)) return ownerName = "Player"; return ownerName = aName; } @@ -741,7 +741,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity return allowRightclick(aPlayer) && onRightClick(aPlayer, side, aX, aY, aZ); } catch (Throwable e) { GT_FML_LOGGER.error("onBlockActivated Failed", e); - e.printStackTrace(GT_Log.err); + e.printStackTrace(GTLog.err); return true; } } @@ -752,7 +752,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity // Configure Cover, sneak can also be: screwdriver, wrench, side cutter, soldering iron if (aPlayer.isSneaking()) { final ForgeDirection tSide = (getCoverIDAtSide(side) == 0) - ? GT_Utility.determineWrenchingSide(side, aX, aY, aZ) + ? GTUtility.determineWrenchingSide(side, aX, aY, aZ) : side; return (getCoverBehaviorAtSideNew(tSide).hasCoverGUI()); } else if (getCoverBehaviorAtSideNew(side).onCoverRightclickClient(side, this, aPlayer, aX, aY, aZ)) { @@ -764,37 +764,37 @@ public abstract class MultiTileEntity extends CoverableTileEntity if (!privateAccess() || aPlayer.getDisplayName() .equalsIgnoreCase(getOwnerName())) { final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); - final ForgeDirection wrenchSide = GT_Utility.determineWrenchingSide(side, aX, aY, aZ); + final ForgeDirection wrenchSide = GTUtility.determineWrenchingSide(side, aX, aY, aZ); if (tCurrentItem != null) { if (getColorization() >= 0 - && GT_Utility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) { + && GTUtility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) { // TODO (Colorization) } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)) + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sWrenchList)) return onWrenchRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem); - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList)) + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sScrewdriverList)) return onScrewdriverRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem); - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sHardHammerList)) + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sHardHammerList)) return onHammerRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem); - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSoftHammerList)) + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSoftHammerList)) return onMalletRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem); - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSolderingToolList)) return onSolderingRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem); - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList)) + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sWireCutterList)) return onWireCutterRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ, tCurrentItem); final ForgeDirection coverSide = getCoverIDAtSide(side) == 0 ? wrenchSide : side; if (getCoverIDAtSide(coverSide) == 0) { - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCovers.keySet())) { - if (GregTech_API.getCoverBehaviorNew(tCurrentItem) + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sCovers.keySet())) { + if (GregTechAPI.getCoverBehaviorNew(tCurrentItem) .isCoverPlaceable(coverSide, tCurrentItem, this) - && allowCoverOnSide(coverSide, new GT_ItemStack(tCurrentItem))) { + && allowCoverOnSide(coverSide, new GTItemStack(tCurrentItem))) { setCoverItemAtSide(coverSide, tCurrentItem); if (!aPlayer.capabilities.isCreativeMode) tCurrentItem.stackSize--; - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, @@ -808,9 +808,9 @@ public abstract class MultiTileEntity extends CoverableTileEntity return true; } } else { - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCrowbarList)) { - if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { - GT_Utility.sendSoundToPlayers( + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sCrowbarList)) { + if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { + GTUtility.sendSoundToPlayers( worldObj, SoundResource.RANDOM_BREAK, 1.0F, @@ -825,7 +825,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity } } } else if (aPlayer.isSneaking()) { // Sneak click, no tool -> open cover config if possible. - side = (getCoverIDAtSide(side) == 0) ? GT_Utility.determineWrenchingSide(side, aX, aY, aZ) : side; + side = (getCoverIDAtSide(side) == 0) ? GTUtility.determineWrenchingSide(side, aX, aY, aZ) : side; return getCoverIDAtSide(side) > 0 && getCoverBehaviorAtSideNew(side).onCoverShiftRightClick( side, getCoverIDAtSide(side), @@ -867,7 +867,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity return false; } - GT_UIInfos.openGTTileEntityUI(this, aPlayer); + GTUIInfos.openGTTileEntityUI(this, aPlayer); System.out.println("Trying to open a UI"); return true; } @@ -875,15 +875,15 @@ public abstract class MultiTileEntity extends CoverableTileEntity public boolean onWrenchRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide, float aX, float aY, float aZ, ItemStack aTool) { if (setMainFacing(wrenchSide)) { - GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer); - GT_Utility.sendSoundToPlayers(worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1, xCoord, yCoord, zCoord); + GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer); + GTUtility.sendSoundToPlayers(worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1, xCoord, yCoord, zCoord); } return onWrenchRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ); } public boolean onScrewdriverRightClick(EntityPlayer aPlayer, ItemStack tCurrentItem, ForgeDirection wrenchSide, float aX, float aY, float aZ, ItemStack aTool) { - if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) { + if (GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) { setCoverDataAtSide( wrenchSide, getCoverBehaviorAtSideNew(wrenchSide).onCoverScrewdriverClick( @@ -896,7 +896,7 @@ public abstract class MultiTileEntity extends CoverableTileEntity aY, aZ)); // TODO: Update connections! - GT_Utility.sendSoundToPlayers(worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1, xCoord, yCoord, zCoord); + GTUtility.sendSoundToPlayers(worldObj, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1, xCoord, yCoord, zCoord); } return onScrewdriverRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ); } @@ -1033,20 +1033,20 @@ public abstract class MultiTileEntity extends CoverableTileEntity /** * @return a Packet containing all Data which has to be synchronised to the Client - Override as needed */ - public GT_Packet_MultiTileEntity getClientDataPacket() { + public GTPacketMultiTileEntity getClientDataPacket() { - final GT_Packet_MultiTileEntity packet = new GT_Packet_MultiTileEntity(false); + final GTPacketMultiTileEntity packet = new GTPacketMultiTileEntity(false); return packet; } @Override public void sendClientData(EntityPlayerMP aPlayer) { if (worldObj == null || worldObj.isRemote) return; - final GT_Packet_New tPacket = getClientDataPacket(); + final GTPacketNew tPacket = getClientDataPacket(); if (aPlayer == null) { - GT_Values.NW.sendPacketToAllPlayersInRange(worldObj, tPacket, getXCoord(), getZCoord()); + GTValues.NW.sendPacketToAllPlayersInRange(worldObj, tPacket, getXCoord(), getZCoord()); } else { - GT_Values.NW.sendToPlayer(tPacket, aPlayer); + GTValues.NW.sendToPlayer(tPacket, aPlayer); } sendCoverDataIfNeeded(); } @@ -1339,20 +1339,20 @@ public abstract class MultiTileEntity extends CoverableTileEntity } @Override - public void getFullPacketData(GT_Packet_MultiTileEntity packet) { + public void getFullPacketData(GTPacketMultiTileEntity packet) { packet.addData(new CoordinateData(getCoords())); packet.addData(new CommonData(mStrongRedstone, color, (byte) 0)); packet.addData(new MultiTileEntityData(mteRegistry, mteID)); } @Override - public void getGraphicPacketData(GT_Packet_MultiTileEntity packet) { + public void getGraphicPacketData(GTPacketMultiTileEntity packet) { packet.addData(new CoordinateData(getCoords())); packet.addData(new MultiTileEntityData(mteRegistry, mteID)); } @Override - public void getTimedPacketData(GT_Packet_MultiTileEntity packet) { + public void getTimedPacketData(GTPacketMultiTileEntity packet) { packet.addData(new CoordinateData(getCoords())); packet.addData(new MultiTileEntityData(mteRegistry, mteID)); } @@ -1361,21 +1361,21 @@ public abstract class MultiTileEntity extends CoverableTileEntity public void sendFullPacket(@Nonnull EntityPlayerMP player) { fullPacket.clearData(); getFullPacketData(fullPacket); - GT_Values.NW.sendToPlayer(fullPacket, player); + GTValues.NW.sendToPlayer(fullPacket, player); } @Override public void sendGraphicPacket() { graphicPacket.clearData(); getGraphicPacketData(graphicPacket); - GT_Values.NW.sendPacketToAllPlayersInRange(worldObj, graphicPacket, getXCoord(), getZCoord()); + GTValues.NW.sendPacketToAllPlayersInRange(worldObj, graphicPacket, getXCoord(), getZCoord()); } @Override public void sendTimedPacket() { timedPacket.clearData(); getTimedPacketData(timedPacket); - GT_Values.NW.sendPacketToAllPlayersInRange(worldObj, timedPacket, getXCoord(), getZCoord()); + GTValues.NW.sendPacketToAllPlayersInRange(worldObj, timedPacket, getXCoord(), getZCoord()); } @Override diff --git a/src/main/java/gregtech/api/multitileentity/base/NonTickableMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/NonTickableMultiTileEntity.java index 2837a88180..7866ad69dc 100644 --- a/src/main/java/gregtech/api/multitileentity/base/NonTickableMultiTileEntity.java +++ b/src/main/java/gregtech/api/multitileentity/base/NonTickableMultiTileEntity.java @@ -1,12 +1,12 @@ package gregtech.api.multitileentity.base; -import static gregtech.api.enums.GT_Values.NW; +import static gregtech.api.enums.GTValues.NW; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.network.Packet; import net.minecraftforge.common.util.ForgeDirection; -import gregtech.api.net.GT_Packet_SendCoverData; +import gregtech.api.net.GTPacketSendCoverData; import gregtech.api.util.ISerializableObject; import gregtech.common.covers.CoverInfo; @@ -45,7 +45,7 @@ public abstract class NonTickableMultiTileEntity extends MultiTileEntity { } else { // Otherwise, send the data right away final CoverInfo coverInfo = getCoverInfoAtSide(side); - NW.sendPacketToAllPlayersInRange(worldObj, new GT_Packet_SendCoverData(coverInfo, this), xCoord, zCoord); + NW.sendPacketToAllPlayersInRange(worldObj, new GTPacketSendCoverData(coverInfo, this), xCoord, zCoord); // Just in case coverInfo.setNeedsUpdate(false); diff --git a/src/main/java/gregtech/api/multitileentity/base/TickableMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/TickableMultiTileEntity.java index 987a4c18b3..dfc600483b 100644 --- a/src/main/java/gregtech/api/multitileentity/base/TickableMultiTileEntity.java +++ b/src/main/java/gregtech/api/multitileentity/base/TickableMultiTileEntity.java @@ -1,6 +1,6 @@ package gregtech.api.multitileentity.base; -import static gregtech.GT_Mod.GT_FML_LOGGER; +import static gregtech.GTMod.GT_FML_LOGGER; import java.util.HashMap; import java.util.Map; @@ -14,11 +14,11 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.task.TaskHost; import gregtech.api.task.TickableTask; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Util; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtil; public abstract class TickableMultiTileEntity extends MultiTileEntity implements TaskHost { @@ -57,7 +57,7 @@ public abstract class TickableMultiTileEntity extends MultiTileEntity implements try { if (timer++ == 0) { markDirty(); - GT_Util.markChunkDirty(this); + GTUtil.markChunkDirty(this); onFirstTick(isServerSide); } if (isDead()) { @@ -80,7 +80,7 @@ public abstract class TickableMultiTileEntity extends MultiTileEntity implements } catch (Throwable e) { GT_FML_LOGGER.error("UpdateEntity Failed", e); - e.printStackTrace(GT_Log.err); + e.printStackTrace(GTLog.err); try { onTickFailed(timer, isServerSide); } catch (Throwable e2) { @@ -133,8 +133,8 @@ public abstract class TickableMultiTileEntity extends MultiTileEntity implements @Override protected final void readTasksNBT(NBTTagCompound nbt) { - if (nbt.hasKey(GT_Values.NBT.TASKS)) { - NBTTagCompound tasksTag = nbt.getCompoundTag(GT_Values.NBT.TASKS); + if (nbt.hasKey(GTValues.NBT.TASKS)) { + NBTTagCompound tasksTag = nbt.getCompoundTag(GTValues.NBT.TASKS); for (TickableTask task : tasks.values()) { if (tasksTag.hasKey(task.getName())) { task.readFromNBT(tasksTag.getCompoundTag(task.getName())); @@ -151,7 +151,7 @@ public abstract class TickableMultiTileEntity extends MultiTileEntity implements task.writeToNBT(tag); tasksTag.setTag(task.getName(), tag); } - aNBT.setTag(GT_Values.NBT.TASKS, tasksTag); + aNBT.setTag(GTValues.NBT.TASKS, tasksTag); } @Override diff --git a/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileCasing.java b/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileCasing.java index 73bd55738a..4efaff34d7 100644 --- a/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileCasing.java +++ b/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileCasing.java @@ -3,7 +3,7 @@ package gregtech.api.multitileentity.enums; import static gregtech.api.util.GT_StructureUtilityMuTE.createMuTEStructureCasing; import static gregtech.loaders.preload.GT_Loader_MultiTileEntities.CASING_REGISTRY_NAME; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.util.GT_StructureUtilityMuTE; public enum GT_MultiTileCasing { @@ -19,7 +19,7 @@ public enum GT_MultiTileCasing { LaserEngraverUpgrade2(8), LaserEngraverUpgrade3(9), LaserEngraverUpgrade4(10), - NONE(GT_Values.W); + NONE(GTValues.W); private final int meta; private final GT_StructureUtilityMuTE.MuTEStructureCasing casing; diff --git a/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileComponentCasing.java b/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileComponentCasing.java index e062ecc705..431da32353 100644 --- a/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileComponentCasing.java +++ b/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileComponentCasing.java @@ -1,6 +1,6 @@ package gregtech.api.multitileentity.enums; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; public enum GT_MultiTileComponentCasing { @@ -116,7 +116,7 @@ public enum GT_MultiTileComponentCasing { UMV_FieldGenerator(109), UXV_FieldGenerator(110), MAX_FieldGenerator(111), - NONE(GT_Values.W); + NONE(GTValues.W); private final int meta; diff --git a/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileMachine.java b/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileMachine.java index 7cdde78986..6787ab00d7 100644 --- a/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileMachine.java +++ b/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileMachine.java @@ -1,11 +1,11 @@ package gregtech.api.multitileentity.enums; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; public enum GT_MultiTileMachine { CokeOven(0), - NONE(GT_Values.W); + NONE(GTValues.W); private final int meta; diff --git a/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileUpgradeCasing.java b/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileUpgradeCasing.java index 296bae546d..5acdd5aeef 100644 --- a/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileUpgradeCasing.java +++ b/src/main/java/gregtech/api/multitileentity/enums/GT_MultiTileUpgradeCasing.java @@ -1,6 +1,6 @@ package gregtech.api.multitileentity.enums; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; public enum GT_MultiTileUpgradeCasing { @@ -57,7 +57,7 @@ public enum GT_MultiTileUpgradeCasing { Insulator_NextGen(107), Insulator_Omnipotent(108), Insulator_OmegaType(109), - NONE(GT_Values.W); + NONE(GTValues.W); private final int meta; diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/SyncedMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/interfaces/SyncedMultiTileEntity.java index 2045f28d67..0f959c6bce 100644 --- a/src/main/java/gregtech/api/multitileentity/interfaces/SyncedMultiTileEntity.java +++ b/src/main/java/gregtech/api/multitileentity/interfaces/SyncedMultiTileEntity.java @@ -4,7 +4,7 @@ import javax.annotation.Nonnull; import net.minecraft.entity.player.EntityPlayerMP; -import gregtech.api.net.GT_Packet_MultiTileEntity; +import gregtech.api.net.GTPacketMultiTileEntity; public interface SyncedMultiTileEntity { @@ -19,10 +19,10 @@ public interface SyncedMultiTileEntity { /** * Should always collect all the data that the controller or casing has and should send * Called by {@link #sendFullPacket()} - * + * * @param packet The packet which will be sent */ - void getFullPacketData(GT_Packet_MultiTileEntity packet); + void getFullPacketData(GTPacketMultiTileEntity packet); /** * Will send a packet at a certain period of time, defined by {@link #getTimedPacketPeriod()}, to all players around @@ -35,10 +35,10 @@ public interface SyncedMultiTileEntity { * Collects all the data that should be sent out at a certain period of time defined by * {@link #getTimedPacketPeriod()} * Called by {@link #sendTimedPacket()} - * + * * @param packet The packet which will be sent */ - void getTimedPacketData(GT_Packet_MultiTileEntity packet); + void getTimedPacketData(GTPacketMultiTileEntity packet); /** * Defines the period of time at which a timed packet should be sent out. Default 20 ticks @@ -56,8 +56,8 @@ public interface SyncedMultiTileEntity { /** * Collects all the data that is needed to be send every single tick * Called by {@link #sendGraphicPacket()} - * + * * @param packet The packet which will be sent */ - void getGraphicPacketData(GT_Packet_MultiTileEntity packet); + void getGraphicPacketData(GTPacketMultiTileEntity packet); } diff --git a/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java b/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java index 0953b4905c..32b87126ca 100644 --- a/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java +++ b/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java @@ -1,6 +1,6 @@ package gregtech.api.multitileentity.machine; -import static gregtech.api.enums.GT_Values.*; +import static gregtech.api.enums.GTValues.*; import static gregtech.api.enums.TickTime.MINUTE; import java.io.IOException; @@ -30,8 +30,8 @@ import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.GT_Values.NBT; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.GTValues.NBT; import gregtech.api.enums.InventoryType; import gregtech.api.enums.Mods; import gregtech.api.enums.SoundResource; @@ -55,8 +55,8 @@ import gregtech.api.multitileentity.base.TickableMultiTileEntity; import gregtech.api.multitileentity.interfaces.IMultiTileMachine; import gregtech.api.render.TextureFactory; import gregtech.api.task.tasks.ProcessingTask; -import gregtech.api.util.GT_Utility; -import gregtech.client.GT_SoundLoop; +import gregtech.api.util.GTUtility; +import gregtech.client.GTSoundLoop; import gregtech.common.gui.MachineGUIProvider; public abstract class MultiTileBasicMachine

> extends TickableMultiTileEntity @@ -106,7 +106,7 @@ public abstract class MultiTileBasicMachine

> ex protected GUIProvider guiProvider = createGUIProvider(); @SideOnly(Side.CLIENT) - protected GT_SoundLoop activitySoundLoop; + protected GTSoundLoop activitySoundLoop; public MultiTileBasicMachine() { new ProcessingTask<>(this); @@ -388,16 +388,16 @@ public abstract class MultiTileBasicMachine

> ex switch (aIndex) { case PROCESS_START_SOUND_INDEX -> { if (getProcessStartSound() != null) - GT_Utility.doSoundAtClient(getProcessStartSound(), getTimeBetweenProcessSounds(), 1.0F, aX, aY, aZ); + GTUtility.doSoundAtClient(getProcessStartSound(), getTimeBetweenProcessSounds(), 1.0F, aX, aY, aZ); } - case INTERRUPT_SOUND_INDEX -> GT_Utility + case INTERRUPT_SOUND_INDEX -> GTUtility .doSoundAtClient(SoundResource.IC2_MACHINES_INTERRUPT_ONE, 100, 1.0F, aX, aY, aZ); } } public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { if (aIndex == PROCESS_START_SOUND_INDEX && getProcessStartSound() != null) { - GT_Utility.doSoundAtClient(getProcessStartSound(), getTimeBetweenProcessSounds(), 1.0F, aX, aY, aZ); + GTUtility.doSoundAtClient(getProcessStartSound(), getTimeBetweenProcessSounds(), 1.0F, aX, aY, aZ); } } @@ -412,7 +412,7 @@ public abstract class MultiTileBasicMachine

> ex @SideOnly(Side.CLIENT) protected void doActivitySound(ResourceLocation activitySound) { if (isActive() && activitySound != null && activitySoundLoop == null) { - activitySoundLoop = new GT_SoundLoop(activitySound, this, false, true); + activitySoundLoop = new GTSoundLoop(activitySound, this, false, true); Minecraft.getMinecraft() .getSoundHandler() .playSound(activitySoundLoop); @@ -549,7 +549,7 @@ public abstract class MultiTileBasicMachine

> ex @Override protected void addDebugInfo(EntityPlayer player, int logLevel, ArrayList list) { list.add( - GT_Utility.trans("186", "Owned by: ") + EnumChatFormatting.BLUE + GTUtility.trans("186", "Owned by: ") + EnumChatFormatting.BLUE + getOwnerName() + EnumChatFormatting.RESET + " (" @@ -567,30 +567,30 @@ public abstract class MultiTileBasicMachine

> ex list.add( StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(logic.getStoredEnergy()) + + GTUtility.formatNumbers(logic.getStoredEnergy()) + EnumChatFormatting.RESET + " EU / " + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(logic.getCapacity()) + + GTUtility.formatNumbers(logic.getCapacity()) + EnumChatFormatting.RESET + " EU"); list.add( StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(getProcessingLogic().getCalculatedEut()) + + GTUtility.formatNumbers(getProcessingLogic().getCalculatedEut()) + EnumChatFormatting.RESET + " EU/t"); list.add( StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(logic.getVoltage()) + + GTUtility.formatNumbers(logic.getVoltage()) + EnumChatFormatting.RESET // TODO: Put ampere getter here, once that's variable + " EU/t(*2A) " + StatCollector.translateToLocal("GT5U.machines.tier") + ": " + EnumChatFormatting.YELLOW - + VN[GT_Utility.getTier(logic.getVoltage())] + + VN[GTUtility.getTier(logic.getVoltage())] + EnumChatFormatting.RESET); } @@ -598,11 +598,11 @@ public abstract class MultiTileBasicMachine

> ex // TODO: Add CPU load calculator list.add( - "Average CPU load of ~" + GT_Utility.formatNumbers(0) + "Average CPU load of ~" + GTUtility.formatNumbers(0) + "ns over " - + GT_Utility.formatNumbers(0) + + GTUtility.formatNumbers(0) + " ticks with worst time of " - + GT_Utility.formatNumbers(0) + + GTUtility.formatNumbers(0) + "ns."); } @@ -613,11 +613,11 @@ public abstract class MultiTileBasicMachine

> ex list.add( StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(progressTime > 20 ? progressTime / 20 : progressTime) + + GTUtility.formatNumbers(progressTime > 20 ? progressTime / 20 : progressTime) + EnumChatFormatting.RESET + (progressTime > 20 ? " s / " : " ticks / ") + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxProgressTime > 20 ? maxProgressTime / 20 : maxProgressTime) + + GTUtility.formatNumbers(maxProgressTime > 20 ? maxProgressTime / 20 : maxProgressTime) + EnumChatFormatting.RESET + (maxProgressTime > 20 ? " s" : " ticks")); } @@ -678,7 +678,7 @@ public abstract class MultiTileBasicMachine

> ex switch (soundEventValue) { case PROCESS_START_SOUND_INDEX -> { - if (getProcessStartSound() != null) GT_Utility.doSoundAtClient( + if (getProcessStartSound() != null) GTUtility.doSoundAtClient( getProcessStartSound(), getTimeBetweenProcessSounds(), 1.0F, @@ -686,7 +686,7 @@ public abstract class MultiTileBasicMachine

> ex getYCoord(), getZCoord()); } - case INTERRUPT_SOUND_INDEX -> GT_Utility.doSoundAtClient( + case INTERRUPT_SOUND_INDEX -> GTUtility.doSoundAtClient( SoundResource.IC2_MACHINES_INTERRUPT_ONE, 100, 1.0F, @@ -765,8 +765,8 @@ public abstract class MultiTileBasicMachine

> ex } protected void updatePowerLogic() { - power.setEnergyCapacity(GT_Values.V[tier] * power.getMaxAmperage() * 2 * MINUTE); - power.setMaxVoltage(GT_Values.V[tier]); + power.setEnergyCapacity(GTValues.V[tier] * power.getMaxAmperage() * 2 * MINUTE); + power.setMaxVoltage(GTValues.V[tier]); power.setMaxAmperage(1); } diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/ComplexParallelController.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/ComplexParallelController.java index cdcb77d6e5..3abb69dd51 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/ComplexParallelController.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/ComplexParallelController.java @@ -15,8 +15,8 @@ import net.minecraft.util.StatCollector; import net.minecraft.world.World; import gregtech.api.logic.ComplexParallelProcessingLogic; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.GT_Waila; +import gregtech.api.util.GTUtility; +import gregtech.api.util.GTWaila; import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; @@ -56,12 +56,12 @@ public abstract class ComplexParallelController 20 ? processing.getProgress(i) / 20 : processing.getProgress(i)) + EnumChatFormatting.RESET + (processing.getProgress(i) > 20 ? " s / " : " ticks / ") + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers( + + GTUtility.formatNumbers( processing.getDuration(i) > 20 ? processing.getDuration(i) / 20 : processing.getDuration(i)) + EnumChatFormatting.RESET + (processing.getDuration(i) > 20 ? " s" : " ticks")); @@ -92,7 +92,7 @@ public abstract class ComplexParallelController 0 && maxProgress >= progress, maxProgress, progress)); } } diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java index 552cf6d94e..1eaae5997d 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/Controller.java @@ -1,6 +1,6 @@ package gregtech.api.multitileentity.multiblock.base; -import static gregtech.api.util.GT_Utility.moveMultipleItemStacks; +import static gregtech.api.util.GTUtility.moveMultipleItemStacks; import static gregtech.common.misc.WirelessNetworkManager.strongCheckOrAddUser; import static mcp.mobius.waila.api.SpecialChars.*; @@ -46,7 +46,7 @@ import com.gtnewhorizon.structurelib.util.Vec3Impl; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import cpw.mods.fml.common.network.NetworkRegistry; -import gregtech.api.enums.GT_Values.NBT; +import gregtech.api.enums.GTValues.NBT; import gregtech.api.enums.InventoryType; import gregtech.api.enums.VoidingMode; import gregtech.api.interfaces.IDescribable; @@ -64,11 +64,11 @@ import gregtech.api.multitileentity.interfaces.IMultiBlockPart; import gregtech.api.multitileentity.machine.MultiTileBasicMachine; import gregtech.api.multitileentity.multiblock.casing.FunctionalCasing; import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing; -import gregtech.api.net.GT_Packet_MultiTileEntity; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.GT_Waila; +import gregtech.api.net.GTPacketMultiTileEntity; +import gregtech.api.objects.GTItemStack; +import gregtech.api.util.GTUtility; +import gregtech.api.util.GTWaila; +import gregtech.api.util.MultiblockTooltipBuilder; import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; @@ -81,7 +81,7 @@ public abstract class Controller, P extends MuTEProce public static final String ALL_INVENTORIES_NAME = "all"; protected static final int AUTO_OUTPUT_FREQUENCY_TICK = 20; - private static final Map tooltip = new ConcurrentHashMap<>(); + private static final Map tooltip = new ConcurrentHashMap<>(); private final List> upgradeCasings = new ArrayList<>(); private final List> functionalCasings = new ArrayList<>(); protected BuildState buildState = new BuildState(); @@ -131,7 +131,7 @@ public abstract class Controller, P extends MuTEProce /** * Create the tooltip for this multi block controller. */ - protected abstract GT_Multiblock_Tooltip_Builder createTooltip(); + protected abstract MultiblockTooltipBuilder createTooltip(); /** * @return The starting offset for the structure builder @@ -269,8 +269,8 @@ public abstract class Controller, P extends MuTEProce return getMultiTileEntityRegistryID() << 16 + getMultiTileEntityID(); } - protected GT_Multiblock_Tooltip_Builder getTooltip() { - GT_Multiblock_Tooltip_Builder builder = tooltip.get(getToolTipID()); + protected MultiblockTooltipBuilder getTooltip() { + MultiblockTooltipBuilder builder = tooltip.get(getToolTipID()); if (builder == null) { builder = createTooltip(); tooltip.put(getToolTipID(), builder); @@ -423,7 +423,7 @@ public abstract class Controller, P extends MuTEProce if (aPlayer.isSneaking()) { // we won't be allowing horizontal flips, as it can be perfectly emulated by rotating twice and flipping // horizontally allowing an extra round of flip make it hard to draw meaningful flip markers in - // GT_Proxy#drawGrid + // GTProxy#drawGrid toolSetFlip(getFlip().isHorizontallyFlipped() ? Flip.NONE : Flip.HORIZONTAL); } else { toolSetRotation(null); @@ -615,7 +615,7 @@ public abstract class Controller, P extends MuTEProce } @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCoverID) { + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCoverID) { return side != facing; } @@ -992,7 +992,7 @@ public abstract class Controller, P extends MuTEProce if (isSimpleMachine) { boolean isActive = tag.getBoolean("isActive"); currentTip.add( - GT_Waila.getMachineProgressString(isActive, tag.getInteger("maxProgress"), tag.getInteger("progress"))); + GTWaila.getMachineProgressString(isActive, tag.getInteger("maxProgress"), tag.getInteger("progress"))); } boolean isActive = tag.getBoolean("isActive"); if (isActive) { @@ -1002,23 +1002,23 @@ public abstract class Controller, P extends MuTEProce currentTip.add( StatCollector.translateToLocalFormatted( "GT5U.waila.energy.use_with_amperage", - GT_Utility.formatNumbers(actualEnergyUsage), - GT_Utility.getAmperageForTier(actualEnergyUsage, (byte) energyTier), - GT_Utility.getColoredTierNameFromTier((byte) energyTier))); + GTUtility.formatNumbers(actualEnergyUsage), + GTUtility.getAmperageForTier(actualEnergyUsage, (byte) energyTier), + GTUtility.getColoredTierNameFromTier((byte) energyTier))); } else if (actualEnergyUsage < 0) { currentTip.add( StatCollector.translateToLocalFormatted( "GT5U.waila.energy.produce_with_amperage", - GT_Utility.formatNumbers(-actualEnergyUsage), - GT_Utility.getAmperageForTier(-actualEnergyUsage, (byte) energyTier), - GT_Utility.getColoredTierNameFromTier((byte) energyTier))); + GTUtility.formatNumbers(-actualEnergyUsage), + GTUtility.getAmperageForTier(-actualEnergyUsage, (byte) energyTier), + GTUtility.getColoredTierNameFromTier((byte) energyTier))); } } } @Override - public GT_Packet_MultiTileEntity getClientDataPacket() { - final GT_Packet_MultiTileEntity packet = super.getClientDataPacket(); + public GTPacketMultiTileEntity getClientDataPacket() { + final GTPacketMultiTileEntity packet = super.getClientDataPacket(); return packet; diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java index 5a16ed4b38..2c3cafc67d 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java @@ -1,7 +1,7 @@ package gregtech.api.multitileentity.multiblock.base; import static com.google.common.math.LongMath.log2; -import static gregtech.api.enums.GT_Values.B; +import static gregtech.api.enums.GTValues.B; import static gregtech.api.enums.Textures.BlockIcons.FLUID_IN_SIGN; import static gregtech.api.enums.Textures.BlockIcons.FLUID_OUT_SIGN; import static gregtech.api.enums.Textures.BlockIcons.ITEM_IN_SIGN; @@ -36,9 +36,9 @@ import com.gtnewhorizons.modularui.api.screen.ModularWindow.Builder; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import gregtech.api.enums.GT_Values.NBT; +import gregtech.api.enums.GTValues.NBT; import gregtech.api.enums.InventoryType; -import gregtech.api.fluid.FluidTankGT; +import gregtech.api.fluid.GTFluidTank; import gregtech.api.gui.GUIHost; import gregtech.api.gui.GUIProvider; import gregtech.api.interfaces.ITexture; @@ -54,7 +54,7 @@ import gregtech.api.multitileentity.enums.MultiTileCasingPurpose; import gregtech.api.multitileentity.interfaces.IMultiBlockController; import gregtech.api.multitileentity.interfaces.IMultiBlockPart; import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.common.covers.CoverInfo; import gregtech.common.gui.PartGUIProvider; import mcp.mobius.waila.api.IWailaConfigHandler; @@ -80,7 +80,7 @@ public abstract class MultiBlockPart extends NonTickableMultiTileEntity protected UUID lockedInventory; protected int mLockedInventoryIndex = 0; - protected FluidTankGT configurationTank = new FluidTankGT(); + protected GTFluidTank configurationTank = new GTFluidTank(); @Nonnull protected final GUIProvider guiProvider = createGUIProvider(); @@ -436,7 +436,7 @@ public abstract class MultiBlockPart extends NonTickableMultiTileEntity if (aPlayer.isSneaking()) { facing = wrenchSide; } - GT_Utility.sendChatToPlayer(aPlayer, "Mode set to `" + getModeName(mode) + "' (" + mode + ")"); + GTUtility.sendChatToPlayer(aPlayer, "Mode set to `" + getModeName(mode) + "' (" + mode + ")"); sendClientData((EntityPlayerMP) aPlayer); return true; } diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/casing/FunctionalCasing.java b/src/main/java/gregtech/api/multitileentity/multiblock/casing/FunctionalCasing.java index bc3c857fd6..d48bbd03fd 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/casing/FunctionalCasing.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/casing/FunctionalCasing.java @@ -2,7 +2,7 @@ package gregtech.api.multitileentity.multiblock.casing; import net.minecraft.nbt.NBTTagCompound; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.multitileentity.multiblock.base.MultiBlockPart; public abstract class FunctionalCasing extends MultiBlockPart { @@ -19,7 +19,7 @@ public abstract class FunctionalCasing extends MultiBlockPart { @Override public void readMultiTileNBT(NBTTagCompound nbt) { super.readMultiTileNBT(nbt); - tier = nbt.getInteger(GT_Values.NBT.TIER); + tier = nbt.getInteger(GTValues.NBT.TIER); } @Override diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/casing/UpgradeCasing.java b/src/main/java/gregtech/api/multitileentity/multiblock/casing/UpgradeCasing.java index 566afcd770..ae5b36c1e0 100644 --- a/src/main/java/gregtech/api/multitileentity/multiblock/casing/UpgradeCasing.java +++ b/src/main/java/gregtech/api/multitileentity/multiblock/casing/UpgradeCasing.java @@ -2,7 +2,7 @@ package gregtech.api.multitileentity.multiblock.casing; import net.minecraft.nbt.NBTTagCompound; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.multitileentity.interfaces.IMultiBlockController; import gregtech.api.multitileentity.multiblock.base.MultiBlockPart; @@ -27,7 +27,7 @@ public abstract class UpgradeCasing extends MultiBlockPart { @Override public void readMultiTileNBT(NBTTagCompound aNBT) { super.readMultiTileNBT(aNBT); - tier = aNBT.getInteger(GT_Values.NBT.TIER); + tier = aNBT.getInteger(GTValues.NBT.TIER); } protected abstract void customWork(IMultiBlockController aTarget); diff --git a/src/main/java/gregtech/api/net/GTPacket.java b/src/main/java/gregtech/api/net/GTPacket.java new file mode 100644 index 0000000000..1d2de3303b --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacket.java @@ -0,0 +1,59 @@ +package gregtech.api.net; + +import net.minecraft.network.INetHandler; +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import io.netty.buffer.ByteBuf; + +/** + * @deprecated Use {@link GTPacketNew} instead + */ +@Deprecated +public abstract class GTPacket { + + public GTPacket(boolean aIsReference) { + // + } + + /** + * I use constant IDs instead of Dynamic ones, since that is much more fail safe + * + * @return a Packet ID for this Class + */ + public abstract byte getPacketID(); + + /** + * @return encoded byte Stream + * @deprecated Use {@link #encode(ByteBuf)} instead + */ + @Deprecated + public abstract byte[] encode(); + + /** + * Encode the data into given byte buffer without creating an intermediate byte array. Default implementation just + * throw {@link UnsupportedOperationException}. + */ + public void encode(ByteBuf aOut) { + throw new UnsupportedOperationException(); + } + + /** + * @return encoded byte Stream + */ + public abstract GTPacket decode(ByteArrayDataInput aData); + + /** + * Process the packet + * + * @param aWorld null if message is received on server side, the client world if message is received on client side + */ + public abstract void process(IBlockAccess aWorld); + + /** + * This will be called just before {@link #process(IBlockAccess)} to inform the handler about the source and type of + * connection + */ + public void setINetHandler(INetHandler aHandler) {} +} diff --git a/src/main/java/gregtech/api/net/GTPacketBlockEvent.java b/src/main/java/gregtech/api/net/GTPacketBlockEvent.java new file mode 100644 index 0000000000..a2164f4f07 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketBlockEvent.java @@ -0,0 +1,63 @@ +package gregtech.api.net; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import io.netty.buffer.ByteBuf; + +/** + * Used to transfer Block Events in a much better fashion + */ +public class GTPacketBlockEvent extends GTPacketNew { + + private int mX, mZ; + private short mY; + private byte mID, mValue; + + public GTPacketBlockEvent() { + super(true); + } + + public GTPacketBlockEvent(int aX, short aY, int aZ, byte aID, byte aValue) { + super(false); + mX = aX; + mY = aY; + mZ = aZ; + mID = aID; + mValue = aValue; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(mX); + aOut.writeShort(mY); + aOut.writeInt(mZ); + aOut.writeByte(mID); + aOut.writeByte(mValue); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + return new GTPacketBlockEvent( + aData.readInt(), + aData.readShort(), + aData.readInt(), + aData.readByte(), + aData.readByte()); + } + + @Override + public void process(IBlockAccess aWorld) { + if (aWorld != null) { + final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ); + if (tTileEntity != null) tTileEntity.receiveClientEvent(mID, mValue); + } + } + + @Override + public byte getPacketID() { + return GTPacketTypes.BLOCK_EVENT.id; + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketClientPreference.java b/src/main/java/gregtech/api/net/GTPacketClientPreference.java new file mode 100644 index 0000000000..ea5d9ec476 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketClientPreference.java @@ -0,0 +1,58 @@ +package gregtech.api.net; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.GTMod; +import gregtech.api.util.GTClientPreference; +import io.netty.buffer.ByteBuf; + +public class GTPacketClientPreference extends GTPacketNew { + + private GTClientPreference mPreference; + private EntityPlayerMP mPlayer; + + public GTPacketClientPreference() { + super(true); + } + + public GTPacketClientPreference(GTClientPreference mPreference) { + super(false); + this.mPreference = mPreference; + } + + @Override + public byte getPacketID() { + return GTPacketTypes.CLIENT_PREFERENCE.id; + } + + @Override + public void setINetHandler(INetHandler aHandler) { + if (aHandler instanceof NetHandlerPlayServer) { + mPlayer = ((NetHandlerPlayServer) aHandler).playerEntity; + } + } + + @Override + public void process(IBlockAccess aWorld) { + if (mPlayer != null) GTMod.gregtechproxy.setClientPreference(mPlayer.getUniqueID(), mPreference); + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeBoolean(mPreference.isSingleBlockInitialFilterEnabled()); + aOut.writeBoolean(mPreference.isSingleBlockInitialMultiStackEnabled()); + aOut.writeBoolean(mPreference.isInputBusInitialFilterEnabled()); + aOut.writeBoolean(mPreference.isWailaAverageNSEnabled()); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + return new GTPacketClientPreference( + new GTClientPreference(aData.readBoolean(), aData.readBoolean(), aData.readBoolean(), aData.readBoolean())); + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketMultiTileEntity.java b/src/main/java/gregtech/api/net/GTPacketMultiTileEntity.java new file mode 100644 index 0000000000..b151f8eb5f --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketMultiTileEntity.java @@ -0,0 +1,254 @@ +package gregtech.api.net; + +import static gregtech.api.enums.GTValues.B; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; + +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.api.net.data.CasingData; +import gregtech.api.net.data.CommonData; +import gregtech.api.net.data.CoordinateData; +import gregtech.api.net.data.MultiTileEntityData; +import gregtech.api.net.data.MultiTileEntityProcess; +import gregtech.api.net.data.PacketData; +import io.netty.buffer.ByteBuf; + +public class GTPacketMultiTileEntity extends GTPacketNew { + + private final Set> data = new HashSet<>(); + public static final int COVERS = B[0], REDSTONE = B[1], MODES = B[2], CONTROLLER = B[3], INVENTORY_INDEX = B[4], + INVENTORY_NAME_ID = B[5], BOOLEANS = B[6], SOUND = B[7]; + + public GTPacketMultiTileEntity(boolean reference) { + super(reference); + } + + @Override + public void encode(ByteBuf aOut) { + Set> set = data.stream() + .sorted() + .collect( + HashSet>::new, + HashSet>::add, + HashSet>::addAll); + clearData(); + data.addAll(set); + int features = 0; + for (PacketData data : data) { + features |= 1 << data.getId(); + } + + aOut.writeInt(features); + + for (PacketData data : data) { + data.encode(aOut); + } + /* + * TODO Move to new system + * if ((features & COVERS) == COVERS) { + * aOut.writeInt(mC0); + * aOut.writeInt(mC1); + * aOut.writeInt(mC2); + * aOut.writeInt(mC3); + * aOut.writeInt(mC4); + * aOut.writeInt(mC5); + * } + * if ((features & MODES) == MODES) { + * aOut.writeInt(mode); + * aOut.writeInt(allowedModes); + * } + * if ((features & CONTROLLER) == CONTROLLER) { + * aOut.writeInt(mTargetPos.posX); + * aOut.writeShort(mTargetPos.posY); + * aOut.writeInt(mTargetPos.posZ); + * } + * if ((features & INVENTORY_INDEX) == INVENTORY_INDEX) { + * aOut.writeInt(mLockedInventoryIndex); + * } + * if ((features & INVENTORY_NAME_ID) == INVENTORY_NAME_ID) { + * if (mInventoryName != null && mInventoryName.length() > 0) { + * byte[] bytes = mInventoryName.getBytes(); + * aOut.writeInt(bytes.length); + * aOut.writeBytes(bytes); + * } else { + * aOut.writeInt(0); + * } + * if (inventoryID != null && inventoryID.length() > 0) { + * byte[] bytes = inventoryID.getBytes(); + * aOut.writeInt(bytes.length); + * aOut.writeBytes(bytes); + * } else { + * aOut.writeInt(0); + * } + * } + * if ((features & BOOLEANS) == BOOLEANS) { + * aOut.writeInt(booleans); + * } + * if ((features & SOUND) == SOUND) { + * aOut.writeByte(soundEvent); + * aOut.writeInt(soundEventValue); + * } + */ + } + + @Override + public GTPacketNew decode(ByteArrayDataInput in) { + Objects.requireNonNull(in); + final int packetFeatures = in.readInt(); + + final GTPacketMultiTileEntity packet = new GTPacketMultiTileEntity(false); + + if (containsBit(packetFeatures, CoordinateData.COORDINATE_DATA_ID)) { + packet.addData(new CoordinateData()); + } + if (containsBit(packetFeatures, MultiTileEntityData.MULTI_TILE_ENTITY_DATA_ID)) { + packet.addData(new MultiTileEntityData()); + } + if (containsBit(packetFeatures, CommonData.COMMON_DATA_ID)) { + packet.addData(new CommonData()); + } + if (containsBit(packetFeatures, CasingData.CASING_DATA_ID)) { + packet.addData(new CasingData()); + } + + Set> set = packet.data.stream() + .sorted() + .collect( + HashSet>::new, + HashSet>::add, + HashSet>::addAll); + packet.clearData(); + packet.data.addAll(set); + for (PacketData data : packet.data) { + data.decode(in); + } + /* + * if ((packetFeatures & COVERS) == COVERS) { + * packet.setCoverData( + * in.readInt(), + * in.readInt(), + * in.readInt(), + * in.readInt(), + * in.readInt(), + * in.readInt()); + * } + * if ((packetFeatures & INVENTORY_INDEX) == INVENTORY_INDEX) { + * packet.setInventoryIndex(aData.readInt()); + * } + * if ((packetFeatures & INVENTORY_NAME_ID) == INVENTORY_NAME_ID) { + * int nameLength = aData.readInt(); + * String inventoryName; + * if (nameLength > 0) { + * byte[] bytes = new byte[nameLength]; + * for (int i = 0; i < nameLength; i++) { + * bytes[i] = aData.readByte(); + * } + * inventoryName = new String(bytes); + * } else { + * inventoryName = null; + * } + * int idLength = aData.readInt(); + * String inventoryID; + * if (idLength > 0) { + * byte[] bytes = new byte[idLength]; + * for (int i = 0; i < idLength; i++) { + * bytes[i] = aData.readByte(); + * } + * inventoryID = new String(bytes); + * } else { + * inventoryID = null; + * } + * packet.setInventoryName(inventoryName, inventoryID); + * } + * if ((packetFeatures & BOOLEANS) == BOOLEANS) { + * packet.setBooleans(aData.readInt()); + * } + * if ((packetFeatures & SOUND) == SOUND) { + * packet.setSoundEvent(aData.readByte(), aData.readInt()); + * } + */ + return packet; + } + + @Override + public void process(IBlockAccess aWorld) { + if (aWorld == null) return; + MultiTileEntityProcess process = new MultiTileEntityProcess(aWorld); + for (PacketData data : data) { + data.process(process); + } + process.process(); + /* + * final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ); + * try { + * final Block tBlock = aWorld.getBlock(mX, mY, mZ); + * if (tBlock instanceof MultiTileEntityBlock mteBlock) { + * final IMultiTileEntity mte = mteBlock.receiveMultiTileEntityData(aWorld, mX, mY, mZ, mRID, mID); + * if (mte == null) return; + * mte.receiveClientData(GregTechTileClientEvents.CHANGE_COMMON_DATA, mCommonData); + * mte.receiveClientData(GregTechTileClientEvents.CHANGE_COLOR, mColor); + * if ((features & COVERS) == COVERS) { + * mteBlock.receiveCoverData(mte, mC0, mC1, mC2, mC3, mC4, mC5); + * } + * if ((features & REDSTONE) == REDSTONE) { + * mte.receiveClientData(GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT, mRedstone); + * } + * if ((features & MODES) == MODES && mte instanceof IMultiTileEntity.IMTE_HasModes mteModes) { + * mteModes.setMode(mode); + * mteModes.setAllowedModes(allowedModes); + * } + * if ((features & INVENTORY_NAME_ID) == INVENTORY_NAME_ID && mte instanceof Inventory invUpg) { + * invUpg.setInventoryName(mInventoryName); + * invUpg.setInventoryId(inventoryID); + * } + * if ((features & CONTROLLER) == CONTROLLER && mte instanceof IMultiBlockPart) { + * final IMultiBlockPart mtePart = (IMultiBlockPart) mte; + * mtePart.setTargetPos(mTargetPos); + * } + * if ((features & INVENTORY_INDEX) == INVENTORY_INDEX && mte instanceof IMultiBlockPart) { + * final IMultiBlockPart mtePart = (IMultiBlockPart) mte; + * mtePart.setLockedInventoryIndex(mLockedInventoryIndex); + * } + * if ((features & BOOLEANS) == BOOLEANS && mte instanceof IMultiTileMachine) { + * final IMultiTileMachine machine = (IMultiTileMachine) mte; + * machine.setBooleans(booleans); + * } + * if ((features & SOUND) == SOUND && mte instanceof IMultiTileMachine) { + * final IMultiTileMachine machine = (IMultiTileMachine) mte; + * machine.setSound(soundEvent, soundEventValue); + * } + * } + * } catch (Exception e) { + * e.printStackTrace(); + * GTMod.GT_FML_LOGGER.error( + * "Exception setting tile entity data for tile entity {} at ({}, {}, {})", + * tTileEntity, + * mX, + * mY, + * mZ); + * } + */ + } + + @Override + public byte getPacketID() { + return GTPacketTypes.MULTI_TILE_ENTITY.id; + } + + public void clearData() { + data.clear(); + } + + public void addData(PacketData data) { + this.data.add(data); + } + + private static boolean containsBit(int toCheck, int bit) { + return (toCheck & (1 << bit)) > 0; + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketMusicSystemData.java b/src/main/java/gregtech/api/net/GTPacketMusicSystemData.java new file mode 100644 index 0000000000..c650188594 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketMusicSystemData.java @@ -0,0 +1,58 @@ +package gregtech.api.net; + +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.api.util.GTMusicSystem; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; + +public class GTPacketMusicSystemData extends GTPacketNew { + + ByteBuf storedData; + + public GTPacketMusicSystemData() { + super(true); + } + + public GTPacketMusicSystemData(ByteBuf data) { + super(false); + this.storedData = data; + } + + @Override + public byte getPacketID() { + return GTPacketTypes.MUSIC_SYSTEM_DATA.id; + } + + @Override + public void encode(ByteBuf aOut) { + if (storedData == null) { + return; + } + storedData.markReaderIndex(); + final int len = storedData.readableBytes(); + aOut.writeInt(len); + aOut.writeBytes(storedData); + storedData.resetReaderIndex(); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + final int len = aData.readInt(); + final byte[] fullData = new byte[len]; + aData.readFully(fullData); + return new GTPacketMusicSystemData(Unpooled.wrappedBuffer(fullData)); + } + + @Override + public void process(IBlockAccess aWorld) { + if (aWorld == null || storedData == null) { + return; + } + storedData.markReaderIndex(); + GTMusicSystem.ClientSystem.loadUpdatedSources(storedData); + storedData.resetReaderIndex(); + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketNew.java b/src/main/java/gregtech/api/net/GTPacketNew.java new file mode 100644 index 0000000000..d3fee800c6 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketNew.java @@ -0,0 +1,30 @@ +package gregtech.api.net; + +import com.google.common.io.ByteArrayDataInput; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; + +@SuppressWarnings("deprecation") +public abstract class GTPacketNew extends GTPacket { + + public GTPacketNew(boolean aIsReference) { + super(aIsReference); + } + + @Override + @Deprecated + public final byte[] encode() { + final ByteBuf tOut = Unpooled.buffer(); + encode(tOut); + final byte[] bytes = new byte[tOut.readableBytes()]; + tOut.readBytes(bytes); + return bytes; + } + + @Override + public abstract void encode(ByteBuf aOut); + + @Override + public abstract GTPacketNew decode(ByteArrayDataInput aData); +} diff --git a/src/main/java/gregtech/api/net/GTPacketPollution.java b/src/main/java/gregtech/api/net/GTPacketPollution.java new file mode 100644 index 0000000000..2f4805aad8 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketPollution.java @@ -0,0 +1,47 @@ +package gregtech.api.net; + +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.common.GTClient; +import io.netty.buffer.ByteBuf; + +public class GTPacketPollution extends GTPacketNew { + + private ChunkCoordIntPair chunk; + private int pollution; + + public GTPacketPollution() { + super(true); + } + + public GTPacketPollution(ChunkCoordIntPair chunk, int pollution) { + super(false); + this.chunk = chunk; + this.pollution = pollution; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(chunk.chunkXPos) + .writeInt(chunk.chunkZPos) + .writeInt(pollution); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + return new GTPacketPollution(new ChunkCoordIntPair(aData.readInt(), aData.readInt()), aData.readInt()); + } + + @Override + public void process(IBlockAccess aWorld) { + GTClient.recieveChunkPollutionPacket(chunk, pollution); + } + + @Override + public byte getPacketID() { + return GTPacketTypes.POLLUTION.id; + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketRequestCoverData.java b/src/main/java/gregtech/api/net/GTPacketRequestCoverData.java new file mode 100644 index 0000000000..4679643624 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketRequestCoverData.java @@ -0,0 +1,113 @@ +package gregtech.api.net; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.metatileentity.CoverableTileEntity; +import gregtech.common.covers.CoverInfo; +import io.netty.buffer.ByteBuf; + +/** + * Client -> Server : ask for cover data + */ +public class GTPacketRequestCoverData extends GTPacketNew { + + protected int mX; + protected short mY; + protected int mZ; + + protected ForgeDirection side; + protected int coverID; + + protected EntityPlayerMP mPlayer; + + public GTPacketRequestCoverData() { + super(true); + } + + public GTPacketRequestCoverData(CoverInfo info, ICoverable tile) { + super(false); + this.mX = tile.getXCoord(); + this.mY = tile.getYCoord(); + this.mZ = tile.getZCoord(); + + this.side = info.getSide(); + this.coverID = info.getCoverID(); + } + + public GTPacketRequestCoverData(int mX, short mY, int mZ, ForgeDirection coverSide, int coverID) { + super(false); + this.mX = mX; + this.mY = mY; + this.mZ = mZ; + + this.side = coverSide; + this.coverID = coverID; + } + + public GTPacketRequestCoverData(ForgeDirection coverSide, int coverID, ICoverable tile) { + super(false); + this.mX = tile.getXCoord(); + this.mY = tile.getYCoord(); + this.mZ = tile.getZCoord(); + + this.side = coverSide; + this.coverID = coverID; + } + + @Override + public byte getPacketID() { + return GTPacketTypes.REQUEST_COVER_DATA.id; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(mX); + aOut.writeShort(mY); + aOut.writeInt(mZ); + + aOut.writeByte(side.ordinal()); + aOut.writeInt(coverID); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + return new GTPacketRequestCoverData( + aData.readInt(), + aData.readShort(), + aData.readInt(), + ForgeDirection.getOrientation(aData.readByte()), + aData.readInt()); + } + + @Override + public void setINetHandler(INetHandler aHandler) { + if (aHandler instanceof NetHandlerPlayServer) { + mPlayer = ((NetHandlerPlayServer) aHandler).playerEntity; + } + } + + @Override + public void process(IBlockAccess aWorld) { + // impossible, but who knows + if (mPlayer == null) return; + final World world = DimensionManager.getWorld(mPlayer.dimension); + if (world != null) { + final TileEntity tile = world.getTileEntity(mX, mY, mZ); + if (tile instanceof CoverableTileEntity te) { + if (!te.isDead() && te.getCoverIDAtSide(side) == coverID) { + te.issueCoverUpdate(side); + } + } + } + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketSendCoverData.java b/src/main/java/gregtech/api/net/GTPacketSendCoverData.java new file mode 100644 index 0000000000..76adb75d31 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketSendCoverData.java @@ -0,0 +1,107 @@ +package gregtech.api.net; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.metatileentity.CoverableTileEntity; +import gregtech.api.util.ISerializableObject; +import gregtech.common.covers.CoverInfo; +import io.netty.buffer.ByteBuf; + +/** + * Server -> Client : Update cover data + */ +public class GTPacketSendCoverData extends GTPacketNew { + + protected int mX; + protected short mY; + protected int mZ; + + protected ForgeDirection side; + protected int coverID; + protected ISerializableObject coverData; + + public GTPacketSendCoverData() { + super(true); + } + + public GTPacketSendCoverData(int mX, short mY, int mZ, ForgeDirection coverSide, int coverID, + ISerializableObject coverData) { + super(false); + this.mX = mX; + this.mY = mY; + this.mZ = mZ; + + this.side = coverSide; + this.coverID = coverID; + this.coverData = coverData; + } + + public GTPacketSendCoverData(CoverInfo info, ICoverable tile) { + super(false); + this.mX = tile.getXCoord(); + this.mY = tile.getYCoord(); + this.mZ = tile.getZCoord(); + + this.side = info.getSide(); + this.coverID = info.getCoverID(); + this.coverData = info.getCoverData(); + } + + public GTPacketSendCoverData(ForgeDirection coverSide, int coverID, ISerializableObject coverData, + ICoverable tile) { + super(false); + this.mX = tile.getXCoord(); + this.mY = tile.getYCoord(); + this.mZ = tile.getZCoord(); + + this.side = coverSide; + this.coverID = coverID; + this.coverData = coverData; + } + + @Override + public byte getPacketID() { + return GTPacketTypes.SEND_COVER_DATA.id; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(mX); + aOut.writeShort(mY); + aOut.writeInt(mZ); + + aOut.writeByte(side.ordinal()); + aOut.writeInt(coverID); + coverData.writeToByteBuf(aOut); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + final int coverId; + return new GTPacketSendCoverData( + aData.readInt(), + aData.readShort(), + aData.readInt(), + ForgeDirection.getOrientation(aData.readByte()), + coverId = aData.readInt(), + GregTechAPI.getCoverBehaviorNew(coverId) + .createDataObject() + .readFromPacket(aData, null)); + } + + @Override + public void process(IBlockAccess aWorld) { + if (aWorld != null) { + final TileEntity tile = aWorld.getTileEntity(mX, mY, mZ); + if (tile instanceof CoverableTileEntity coverable && !coverable.isDead()) { + coverable.receiveCoverData(side, coverID, coverData, null); + } + } + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketSendOregenPattern.java b/src/main/java/gregtech/api/net/GTPacketSendOregenPattern.java new file mode 100644 index 0000000000..9db0e9a471 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketSendOregenPattern.java @@ -0,0 +1,56 @@ +package gregtech.api.net; + +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.api.util.GTLog; +import gregtech.common.GTWorldgenerator; +import gregtech.common.GTWorldgenerator.OregenPattern; +import io.netty.buffer.ByteBuf; + +public class GTPacketSendOregenPattern extends GTPacketNew { + + protected OregenPattern pattern = OregenPattern.AXISSYMMETRICAL; + + public GTPacketSendOregenPattern() { + super(true); + } + + public GTPacketSendOregenPattern(OregenPattern pattern) { + super(false); + this.pattern = pattern; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(this.pattern.ordinal()); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + int ordinal = aData.readInt(); + // make sure we get valid data: + if (ordinal >= 0 && ordinal < OregenPattern.values().length) { + return new GTPacketSendOregenPattern(OregenPattern.values()[ordinal]); + } + // invalid data, default to AXISSYMMETRICAL: + GTLog.err.println( + String.format( + "Received invalid data! Received %d but value must be between 0 and %d! Default (0) will be used.", + ordinal, + OregenPattern.values().length - 1)); + return new GTPacketSendOregenPattern(); + } + + @Override + public byte getPacketID() { + return GTPacketTypes.SEND_OREGEN_PATTERN.id; + } + + @Override + public void process(IBlockAccess aWorld) { + GTWorldgenerator.oregenPattern = this.pattern; + } + +} diff --git a/src/main/java/gregtech/api/net/GTPacketSetConfigurationCircuit.java b/src/main/java/gregtech/api/net/GTPacketSetConfigurationCircuit.java new file mode 100644 index 0000000000..8984cea509 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketSetConfigurationCircuit.java @@ -0,0 +1,110 @@ +package gregtech.api.net; + +import net.minecraft.item.ItemStack; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +import com.google.common.io.ByteArrayDataInput; + +import cpw.mods.fml.common.network.ByteBufUtils; +import gregtech.api.interfaces.IConfigurationCircuitSupport; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IHasInventory; +import gregtech.api.metatileentity.BaseTileEntity; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import io.netty.buffer.ByteBuf; + +/** + * Client -> Server: Update machine configuration data + */ +public class GTPacketSetConfigurationCircuit extends GTPacketNew { + + protected int mX; + protected short mY; + protected int mZ; + protected int dimId; + + protected ItemStack circuit; + + public GTPacketSetConfigurationCircuit() { + super(true); + } + + public GTPacketSetConfigurationCircuit(IGregTechTileEntity tile, ItemStack circuit) { + this(tile.getXCoord(), tile.getYCoord(), tile.getZCoord(), circuit); + } + + public GTPacketSetConfigurationCircuit(BaseTileEntity tile, ItemStack circuit) { + this(tile.getXCoord(), tile.getYCoord(), tile.getZCoord(), circuit); + } + + public GTPacketSetConfigurationCircuit(int x, short y, int z, ItemStack circuit) { + super(false); + + this.mX = x; + this.mY = y; + this.mZ = z; + + this.circuit = circuit; + } + + @Override + public byte getPacketID() { + return GTPacketTypes.SET_CONFIGURATION_CIRCUIT.id; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(mX); + aOut.writeShort(mY); + aOut.writeInt(mZ); + + // no null check needed. ByteBufUtils will handle it + ByteBufUtils.writeItemStack(aOut, this.circuit); + } + + @Override + public void setINetHandler(INetHandler aHandler) { + if (aHandler instanceof NetHandlerPlayServer) { + dimId = ((NetHandlerPlayServer) aHandler).playerEntity.dimension; + } else { + // packet sent to wrong side, so we need to ignore this one + // but there is no way to disrupt packet pipeline + // so we will instead go find world -2, which (hopefully) doesn't exist + // then we will fail silently in process() + dimId = -2; + } + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + return new GTPacketSetConfigurationCircuit( + aData.readInt(), + aData.readShort(), + aData.readInt(), + ISerializableObject.readItemStackFromGreggyByteBuf(aData)); + } + + @Override + public void process(IBlockAccess aWorld) { + final World world = DimensionManager.getWorld(dimId); + if (world == null) return; + + final TileEntity tile = world.getTileEntity(mX, mY, mZ); + if (!(tile instanceof BaseTileEntity) || ((BaseTileEntity) tile).isDead()) return; + + final IConfigurationCircuitSupport machine = ((BaseTileEntity) tile).getConfigurationCircuitSupport(); + if (machine == null) return; + if (!machine.allowSelectCircuit()) return; + machine.getConfigurationCircuits() + .stream() + .filter(stack -> GTUtility.areStacksEqual(stack, circuit)) + .findFirst() + .ifPresent(stack -> ((IHasInventory) tile).setInventorySlotContents(machine.getCircuitSlot(), stack)); + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketSound.java b/src/main/java/gregtech/api/net/GTPacketSound.java new file mode 100644 index 0000000000..95f95e641d --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketSound.java @@ -0,0 +1,73 @@ +package gregtech.api.net; + +import java.io.IOException; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufOutputStream; + +public class GTPacketSound extends GTPacketNew { + + private int mX, mZ; + private short mY; + private String mSoundName; + private float mSoundStrength, mSoundPitch; + + public GTPacketSound() { + super(true); + } + + public GTPacketSound(String aSoundName, float aSoundStrength, float aSoundPitch, int aX, short aY, int aZ) { + super(false); + mX = aX; + mY = aY; + mZ = aZ; + mSoundName = aSoundName; + mSoundStrength = aSoundStrength; + mSoundPitch = aSoundPitch; + } + + @Override + public void encode(ByteBuf aOut) { + try (ByteBufOutputStream byteOutputStream = new ByteBufOutputStream(aOut)) { + byteOutputStream.writeUTF(mSoundName); + byteOutputStream.writeFloat(mSoundStrength); + byteOutputStream.writeFloat(mSoundPitch); + byteOutputStream.writeInt(mX); + byteOutputStream.writeShort(mY); + byteOutputStream.writeInt(mZ); + } catch (IOException e) { + // this really shouldn't happen, but whatever + e.printStackTrace(GTLog.err); + } + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + return new GTPacketSound( + aData.readUTF(), + aData.readFloat(), + aData.readFloat(), + aData.readInt(), + aData.readShort(), + aData.readInt()); + } + + @Override + public void process(IBlockAccess aWorld) { + if (mSoundName != null) { + GTUtility.doSoundAtClient(new ResourceLocation(mSoundName), 1, mSoundStrength, mSoundPitch, mX, mY, mZ); + } + } + + @Override + public byte getPacketID() { + return GTPacketTypes.SOUND.id; + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketTileEntity.java b/src/main/java/gregtech/api/net/GTPacketTileEntity.java new file mode 100644 index 0000000000..eecb16d6da --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketTileEntity.java @@ -0,0 +1,157 @@ +package gregtech.api.net; + +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.GTMod; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import io.netty.buffer.ByteBuf; + +public class GTPacketTileEntity extends GTPacketNew { + + private int mX, mZ, mC0, mC1, mC2, mC3, mC4, mC5; + private short mY, mID, mRID; + private byte mTexture, mTexturePage, mUpdate, mRedstone, mColor; + + public GTPacketTileEntity() { + super(true); + } + + // For multi tiles + public GTPacketTileEntity(int aX, short aY, int aZ, short aRID, short aID, int aC0, int aC1, int aC2, int aC3, + int aC4, int aC5, byte aTexture, byte aTexturePage, byte aUpdate, byte aRedstone, byte aColor) { + super(false); + mX = aX; + mY = aY; + mZ = aZ; + mC0 = aC0; + mC1 = aC1; + mC2 = aC2; + mC3 = aC3; + mC4 = aC4; + mC5 = aC5; + mRID = aRID; + mID = aID; + mTexture = aTexture; + mTexturePage = aTexturePage; + mUpdate = aUpdate; + mRedstone = aRedstone; + mColor = aColor; + } + + // For meta tiles + public GTPacketTileEntity(int aX, short aY, int aZ, short aID, int aC0, int aC1, int aC2, int aC3, int aC4, int aC5, + byte aTexture, byte aTexturePage, byte aUpdate, byte aRedstone, byte aColor) { + this( + aX, + aY, + aZ, + (short) 0, + aID, + aC0, + aC1, + aC2, + aC3, + aC4, + aC5, + aTexture, + aTexturePage, + aUpdate, + aRedstone, + aColor); + } + + // For pipes + public GTPacketTileEntity(int aX, short aY, int aZ, short aID, int aC0, int aC1, int aC2, int aC3, int aC4, int aC5, + byte aTexture, byte aUpdate, byte aRedstone, byte aColor) { + this(aX, aY, aZ, (short) 0, aID, aC0, aC1, aC2, aC3, aC4, aC5, aTexture, (byte) 0, aUpdate, aRedstone, aColor); + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(mX); + aOut.writeShort(mY); + aOut.writeInt(mZ); + + aOut.writeShort(mRID); + aOut.writeShort(mID); + + aOut.writeInt(mC0); + aOut.writeInt(mC1); + aOut.writeInt(mC2); + aOut.writeInt(mC3); + aOut.writeInt(mC4); + aOut.writeInt(mC5); + + aOut.writeByte(mTexture); + aOut.writeByte(mTexturePage); + aOut.writeByte(mUpdate); + aOut.writeByte(mRedstone); + aOut.writeByte(mColor); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + return new GTPacketTileEntity( + // Coords + aData.readInt(), + aData.readShort(), + aData.readInt(), + // Registry & ID + aData.readShort(), + aData.readShort(), + // Covers + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt(), + aData.readInt(), + // Everything else + aData.readByte(), + aData.readByte(), + aData.readByte(), + aData.readByte(), + aData.readByte()); + } + + @Override + public void process(IBlockAccess aWorld) { + if (aWorld == null) return; + final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ); + try { + final Block tBlock; + if (tTileEntity instanceof BaseMetaTileEntity) ((BaseMetaTileEntity) tTileEntity).receiveMetaTileEntityData( + mID, + mC0, + mC1, + mC2, + mC3, + mC4, + mC5, + mTexture, + mTexturePage, + mUpdate, + mRedstone, + mColor); + else if (tTileEntity instanceof BaseMetaPipeEntity) ((BaseMetaPipeEntity) tTileEntity) + .receiveMetaTileEntityData(mID, mC0, mC1, mC2, mC3, mC4, mC5, mTexture, mUpdate, mRedstone, mColor); + } catch (Exception e) { + GTMod.GT_FML_LOGGER.error( + "Exception setting tile entity data for tile entity {} at ({}, {}, {})", + tTileEntity, + mX, + mY, + mZ); + } + } + + @Override + public byte getPacketID() { + return GTPacketTypes.TILE_ENTITY.id; + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketToolSwitchMode.java b/src/main/java/gregtech/api/net/GTPacketToolSwitchMode.java new file mode 100644 index 0000000000..57cabcf2bf --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketToolSwitchMode.java @@ -0,0 +1,52 @@ +package gregtech.api.net; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.api.items.MetaGeneratedTool; +import io.netty.buffer.ByteBuf; + +public class GTPacketToolSwitchMode extends GTPacketNew { + + private EntityPlayerMP player; + + public GTPacketToolSwitchMode() { + super(true); + } + + @Override + public byte getPacketID() { + return GTPacketTypes.TOOL_SWITCH_MODE.id; + } + + @Override + public void encode(ByteBuf aOut) { + + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + return new GTPacketToolSwitchMode(); + } + + @Override + public void setINetHandler(INetHandler aHandler) { + player = ((NetHandlerPlayServer) aHandler).playerEntity; + } + + @Override + public void process(IBlockAccess aWorld) { + ItemStack currentItem = player.inventory.getCurrentItem(); + if (currentItem == null || (!(currentItem.getItem() instanceof MetaGeneratedTool item))) return; + byte maxMode = item.getToolMaxMode(currentItem); + if (maxMode <= 1) return; + byte newMode = (byte) ((MetaGeneratedTool.getToolMode(currentItem) + 1) % maxMode); + MetaGeneratedTool.setToolMode(currentItem, newMode); + player.sendSlotContents(player.inventoryContainer, player.inventory.currentItem, currentItem); + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketTypes.java b/src/main/java/gregtech/api/net/GTPacketTypes.java new file mode 100644 index 0000000000..d635706e68 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketTypes.java @@ -0,0 +1,64 @@ +package gregtech.api.net; + +import java.util.Arrays; + +import gregtech.common.blocks.PacketOres; +import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; + +/** + * Centralized place to keep all the GT packet ID constants + */ +public enum GTPacketTypes { + + TILE_ENTITY(0, new GTPacketTileEntity()), + SOUND(1, new GTPacketSound()), + BLOCK_EVENT(2, new GTPacketBlockEvent()), + ORES(3, new PacketOres()), + POLLUTION(4, new GTPacketPollution()), + CLIENT_PREFERENCE(9, new GTPacketClientPreference()), + SET_CONFIGURATION_CIRCUIT(12, new GTPacketSetConfigurationCircuit()), + UPDATE_ITEM(13, new GTPacketUpdateItem()), + SEND_COVER_DATA(16, new GTPacketSendCoverData()), + REQUEST_COVER_DATA(17, new GTPacketRequestCoverData()), + MULTI_TILE_ENTITY(18, new GTPacketMultiTileEntity(true)), + SEND_OREGEN_PATTERN(19, new GTPacketSendOregenPattern()), + TOOL_SWITCH_MODE(20, new GTPacketToolSwitchMode()), + MUSIC_SYSTEM_DATA(21, new GTPacketMusicSystemData()), + // merge conflict prevention comment, keep a trailing comma above + ; + + static { + // Validate no duplicate IDs + final GTPacketTypes[] types = values(); + final Int2ObjectOpenHashMap foundIds = new Int2ObjectOpenHashMap<>(types.length); + for (GTPacketTypes type : types) { + final GTPacketNew previous = foundIds.get(type.id); + if (previous != null) { + throw new IllegalStateException( + "Duplicate packet IDs defined: " + type.id + + " for " + + type.getClass() + + " and " + + previous.getClass()); + } + foundIds.put(type.id, type.referencePacket); + } + } + + public final byte id; + public final GTPacketNew referencePacket; + + GTPacketTypes(int id, GTPacketNew referencePacket) { + if (((int) (byte) id) != id) { + throw new IllegalArgumentException("Value outside of byte normal range: " + id); + } + this.id = (byte) id; + this.referencePacket = referencePacket; + } + + public static GTPacketNew[] referencePackets() { + return Arrays.stream(values()) + .map(p -> p.referencePacket) + .toArray(GTPacketNew[]::new); + } +} diff --git a/src/main/java/gregtech/api/net/GTPacketUpdateItem.java b/src/main/java/gregtech/api/net/GTPacketUpdateItem.java new file mode 100644 index 0000000000..54846cdcc9 --- /dev/null +++ b/src/main/java/gregtech/api/net/GTPacketUpdateItem.java @@ -0,0 +1,64 @@ +package gregtech.api.net; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.INetHandler; +import net.minecraft.network.NetHandlerPlayServer; +import net.minecraft.world.IBlockAccess; + +import com.google.common.io.ByteArrayDataInput; + +import cpw.mods.fml.common.network.ByteBufUtils; +import gregtech.api.interfaces.INetworkUpdatableItem; +import gregtech.api.util.ISerializableObject; +import io.netty.buffer.ByteBuf; + +/** + * Client -> Server: send arbitrary data to server and update the currently held item. + */ +public class GTPacketUpdateItem extends GTPacketNew { + + private NBTTagCompound tag; + private EntityPlayerMP mPlayer; + + public GTPacketUpdateItem() { + super(true); + } + + public GTPacketUpdateItem(NBTTagCompound tag) { + super(false); + this.tag = tag; + } + + @Override + public byte getPacketID() { + return GTPacketTypes.UPDATE_ITEM.id; + } + + @Override + public void setINetHandler(INetHandler aHandler) { + if (aHandler instanceof NetHandlerPlayServer) { + mPlayer = ((NetHandlerPlayServer) aHandler).playerEntity; + } + } + + @Override + public void encode(ByteBuf aOut) { + ByteBufUtils.writeTag(aOut, tag); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + return new GTPacketUpdateItem(ISerializableObject.readCompoundTagFromGreggyByteBuf(aData)); + } + + @Override + public void process(IBlockAccess aWorld) { + if (mPlayer == null) return; + ItemStack stack = mPlayer.inventory.getCurrentItem(); + if (stack != null && stack.getItem() instanceof INetworkUpdatableItem) { + ((INetworkUpdatableItem) stack.getItem()).receive(stack, mPlayer, tag); + } + } +} diff --git a/src/main/java/gregtech/api/net/GT_Packet.java b/src/main/java/gregtech/api/net/GT_Packet.java deleted file mode 100644 index d06ea7d0d3..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet.java +++ /dev/null @@ -1,59 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.network.INetHandler; -import net.minecraft.world.IBlockAccess; - -import com.google.common.io.ByteArrayDataInput; - -import io.netty.buffer.ByteBuf; - -/** - * @deprecated Use {@link GT_Packet_New} instead - */ -@Deprecated -public abstract class GT_Packet { - - public GT_Packet(boolean aIsReference) { - // - } - - /** - * I use constant IDs instead of Dynamic ones, since that is much more fail safe - * - * @return a Packet ID for this Class - */ - public abstract byte getPacketID(); - - /** - * @return encoded byte Stream - * @deprecated Use {@link #encode(ByteBuf)} instead - */ - @Deprecated - public abstract byte[] encode(); - - /** - * Encode the data into given byte buffer without creating an intermediate byte array. Default implementation just - * throw {@link UnsupportedOperationException}. - */ - public void encode(ByteBuf aOut) { - throw new UnsupportedOperationException(); - } - - /** - * @return encoded byte Stream - */ - public abstract GT_Packet decode(ByteArrayDataInput aData); - - /** - * Process the packet - * - * @param aWorld null if message is received on server side, the client world if message is received on client side - */ - public abstract void process(IBlockAccess aWorld); - - /** - * This will be called just before {@link #process(IBlockAccess)} to inform the handler about the source and type of - * connection - */ - public void setINetHandler(INetHandler aHandler) {} -} diff --git a/src/main/java/gregtech/api/net/GT_PacketTypes.java b/src/main/java/gregtech/api/net/GT_PacketTypes.java deleted file mode 100644 index 5907b2176b..0000000000 --- a/src/main/java/gregtech/api/net/GT_PacketTypes.java +++ /dev/null @@ -1,64 +0,0 @@ -package gregtech.api.net; - -import java.util.Arrays; - -import gregtech.common.blocks.GT_Packet_Ores; -import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; - -/** - * Centralized place to keep all the GT packet ID constants - */ -public enum GT_PacketTypes { - - TILE_ENTITY(0, new GT_Packet_TileEntity()), - SOUND(1, new GT_Packet_Sound()), - BLOCK_EVENT(2, new GT_Packet_Block_Event()), - ORES(3, new GT_Packet_Ores()), - POLLUTION(4, new GT_Packet_Pollution()), - CLIENT_PREFERENCE(9, new GT_Packet_ClientPreference()), - SET_CONFIGURATION_CIRCUIT(12, new GT_Packet_SetConfigurationCircuit()), - UPDATE_ITEM(13, new GT_Packet_UpdateItem()), - SEND_COVER_DATA(16, new GT_Packet_SendCoverData()), - REQUEST_COVER_DATA(17, new GT_Packet_RequestCoverData()), - MULTI_TILE_ENTITY(18, new GT_Packet_MultiTileEntity(true)), - SEND_OREGEN_PATTERN(19, new GT_Packet_SendOregenPattern()), - TOOL_SWITCH_MODE(20, new GT_Packet_ToolSwitchMode()), - MUSIC_SYSTEM_DATA(21, new GT_Packet_MusicSystemData()), - // merge conflict prevention comment, keep a trailing comma above - ; - - static { - // Validate no duplicate IDs - final GT_PacketTypes[] types = values(); - final Int2ObjectOpenHashMap foundIds = new Int2ObjectOpenHashMap<>(types.length); - for (GT_PacketTypes type : types) { - final GT_Packet_New previous = foundIds.get(type.id); - if (previous != null) { - throw new IllegalStateException( - "Duplicate packet IDs defined: " + type.id - + " for " - + type.getClass() - + " and " - + previous.getClass()); - } - foundIds.put(type.id, type.referencePacket); - } - } - - public final byte id; - public final GT_Packet_New referencePacket; - - GT_PacketTypes(int id, GT_Packet_New referencePacket) { - if (((int) (byte) id) != id) { - throw new IllegalArgumentException("Value outside of byte normal range: " + id); - } - this.id = (byte) id; - this.referencePacket = referencePacket; - } - - public static GT_Packet_New[] referencePackets() { - return Arrays.stream(values()) - .map(p -> p.referencePacket) - .toArray(GT_Packet_New[]::new); - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java b/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java deleted file mode 100644 index 9adf583698..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java +++ /dev/null @@ -1,63 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; - -import com.google.common.io.ByteArrayDataInput; - -import io.netty.buffer.ByteBuf; - -/** - * Used to transfer Block Events in a much better fashion - */ -public class GT_Packet_Block_Event extends GT_Packet_New { - - private int mX, mZ; - private short mY; - private byte mID, mValue; - - public GT_Packet_Block_Event() { - super(true); - } - - public GT_Packet_Block_Event(int aX, short aY, int aZ, byte aID, byte aValue) { - super(false); - mX = aX; - mY = aY; - mZ = aZ; - mID = aID; - mValue = aValue; - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeInt(mX); - aOut.writeShort(mY); - aOut.writeInt(mZ); - aOut.writeByte(mID); - aOut.writeByte(mValue); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new GT_Packet_Block_Event( - aData.readInt(), - aData.readShort(), - aData.readInt(), - aData.readByte(), - aData.readByte()); - } - - @Override - public void process(IBlockAccess aWorld) { - if (aWorld != null) { - final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ); - if (tTileEntity != null) tTileEntity.receiveClientEvent(mID, mValue); - } - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.BLOCK_EVENT.id; - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_ClientPreference.java b/src/main/java/gregtech/api/net/GT_Packet_ClientPreference.java deleted file mode 100644 index a5fd8a2e08..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_ClientPreference.java +++ /dev/null @@ -1,62 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.network.INetHandler; -import net.minecraft.network.NetHandlerPlayServer; -import net.minecraft.world.IBlockAccess; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.GT_Mod; -import gregtech.api.util.GT_ClientPreference; -import io.netty.buffer.ByteBuf; - -public class GT_Packet_ClientPreference extends GT_Packet_New { - - private GT_ClientPreference mPreference; - private EntityPlayerMP mPlayer; - - public GT_Packet_ClientPreference() { - super(true); - } - - public GT_Packet_ClientPreference(GT_ClientPreference mPreference) { - super(false); - this.mPreference = mPreference; - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.CLIENT_PREFERENCE.id; - } - - @Override - public void setINetHandler(INetHandler aHandler) { - if (aHandler instanceof NetHandlerPlayServer) { - mPlayer = ((NetHandlerPlayServer) aHandler).playerEntity; - } - } - - @Override - public void process(IBlockAccess aWorld) { - if (mPlayer != null) GT_Mod.gregtechproxy.setClientPreference(mPlayer.getUniqueID(), mPreference); - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeBoolean(mPreference.isSingleBlockInitialFilterEnabled()); - aOut.writeBoolean(mPreference.isSingleBlockInitialMultiStackEnabled()); - aOut.writeBoolean(mPreference.isInputBusInitialFilterEnabled()); - aOut.writeBoolean(mPreference.isWailaAverageNSEnabled()); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new GT_Packet_ClientPreference( - new GT_ClientPreference( - aData.readBoolean(), - aData.readBoolean(), - aData.readBoolean(), - aData.readBoolean())); - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java b/src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java deleted file mode 100644 index 33cb4f2dcf..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java +++ /dev/null @@ -1,254 +0,0 @@ -package gregtech.api.net; - -import static gregtech.api.enums.GT_Values.B; - -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; - -import net.minecraft.world.IBlockAccess; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.net.data.CasingData; -import gregtech.api.net.data.CommonData; -import gregtech.api.net.data.CoordinateData; -import gregtech.api.net.data.MultiTileEntityData; -import gregtech.api.net.data.MultiTileEntityProcess; -import gregtech.api.net.data.PacketData; -import io.netty.buffer.ByteBuf; - -public class GT_Packet_MultiTileEntity extends GT_Packet_New { - - private final Set> data = new HashSet<>(); - public static final int COVERS = B[0], REDSTONE = B[1], MODES = B[2], CONTROLLER = B[3], INVENTORY_INDEX = B[4], - INVENTORY_NAME_ID = B[5], BOOLEANS = B[6], SOUND = B[7]; - - public GT_Packet_MultiTileEntity(boolean reference) { - super(reference); - } - - @Override - public void encode(ByteBuf aOut) { - Set> set = data.stream() - .sorted() - .collect( - HashSet>::new, - HashSet>::add, - HashSet>::addAll); - clearData(); - data.addAll(set); - int features = 0; - for (PacketData data : data) { - features |= 1 << data.getId(); - } - - aOut.writeInt(features); - - for (PacketData data : data) { - data.encode(aOut); - } - /* - * TODO Move to new system - * if ((features & COVERS) == COVERS) { - * aOut.writeInt(mC0); - * aOut.writeInt(mC1); - * aOut.writeInt(mC2); - * aOut.writeInt(mC3); - * aOut.writeInt(mC4); - * aOut.writeInt(mC5); - * } - * if ((features & MODES) == MODES) { - * aOut.writeInt(mode); - * aOut.writeInt(allowedModes); - * } - * if ((features & CONTROLLER) == CONTROLLER) { - * aOut.writeInt(mTargetPos.posX); - * aOut.writeShort(mTargetPos.posY); - * aOut.writeInt(mTargetPos.posZ); - * } - * if ((features & INVENTORY_INDEX) == INVENTORY_INDEX) { - * aOut.writeInt(mLockedInventoryIndex); - * } - * if ((features & INVENTORY_NAME_ID) == INVENTORY_NAME_ID) { - * if (mInventoryName != null && mInventoryName.length() > 0) { - * byte[] bytes = mInventoryName.getBytes(); - * aOut.writeInt(bytes.length); - * aOut.writeBytes(bytes); - * } else { - * aOut.writeInt(0); - * } - * if (inventoryID != null && inventoryID.length() > 0) { - * byte[] bytes = inventoryID.getBytes(); - * aOut.writeInt(bytes.length); - * aOut.writeBytes(bytes); - * } else { - * aOut.writeInt(0); - * } - * } - * if ((features & BOOLEANS) == BOOLEANS) { - * aOut.writeInt(booleans); - * } - * if ((features & SOUND) == SOUND) { - * aOut.writeByte(soundEvent); - * aOut.writeInt(soundEventValue); - * } - */ - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput in) { - Objects.requireNonNull(in); - final int packetFeatures = in.readInt(); - - final GT_Packet_MultiTileEntity packet = new GT_Packet_MultiTileEntity(false); - - if (containsBit(packetFeatures, CoordinateData.COORDINATE_DATA_ID)) { - packet.addData(new CoordinateData()); - } - if (containsBit(packetFeatures, MultiTileEntityData.MULTI_TILE_ENTITY_DATA_ID)) { - packet.addData(new MultiTileEntityData()); - } - if (containsBit(packetFeatures, CommonData.COMMON_DATA_ID)) { - packet.addData(new CommonData()); - } - if (containsBit(packetFeatures, CasingData.CASING_DATA_ID)) { - packet.addData(new CasingData()); - } - - Set> set = packet.data.stream() - .sorted() - .collect( - HashSet>::new, - HashSet>::add, - HashSet>::addAll); - packet.clearData(); - packet.data.addAll(set); - for (PacketData data : packet.data) { - data.decode(in); - } - /* - * if ((packetFeatures & COVERS) == COVERS) { - * packet.setCoverData( - * in.readInt(), - * in.readInt(), - * in.readInt(), - * in.readInt(), - * in.readInt(), - * in.readInt()); - * } - * if ((packetFeatures & INVENTORY_INDEX) == INVENTORY_INDEX) { - * packet.setInventoryIndex(aData.readInt()); - * } - * if ((packetFeatures & INVENTORY_NAME_ID) == INVENTORY_NAME_ID) { - * int nameLength = aData.readInt(); - * String inventoryName; - * if (nameLength > 0) { - * byte[] bytes = new byte[nameLength]; - * for (int i = 0; i < nameLength; i++) { - * bytes[i] = aData.readByte(); - * } - * inventoryName = new String(bytes); - * } else { - * inventoryName = null; - * } - * int idLength = aData.readInt(); - * String inventoryID; - * if (idLength > 0) { - * byte[] bytes = new byte[idLength]; - * for (int i = 0; i < idLength; i++) { - * bytes[i] = aData.readByte(); - * } - * inventoryID = new String(bytes); - * } else { - * inventoryID = null; - * } - * packet.setInventoryName(inventoryName, inventoryID); - * } - * if ((packetFeatures & BOOLEANS) == BOOLEANS) { - * packet.setBooleans(aData.readInt()); - * } - * if ((packetFeatures & SOUND) == SOUND) { - * packet.setSoundEvent(aData.readByte(), aData.readInt()); - * } - */ - return packet; - } - - @Override - public void process(IBlockAccess aWorld) { - if (aWorld == null) return; - MultiTileEntityProcess process = new MultiTileEntityProcess(aWorld); - for (PacketData data : data) { - data.process(process); - } - process.process(); - /* - * final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ); - * try { - * final Block tBlock = aWorld.getBlock(mX, mY, mZ); - * if (tBlock instanceof MultiTileEntityBlock mteBlock) { - * final IMultiTileEntity mte = mteBlock.receiveMultiTileEntityData(aWorld, mX, mY, mZ, mRID, mID); - * if (mte == null) return; - * mte.receiveClientData(GregTechTileClientEvents.CHANGE_COMMON_DATA, mCommonData); - * mte.receiveClientData(GregTechTileClientEvents.CHANGE_COLOR, mColor); - * if ((features & COVERS) == COVERS) { - * mteBlock.receiveCoverData(mte, mC0, mC1, mC2, mC3, mC4, mC5); - * } - * if ((features & REDSTONE) == REDSTONE) { - * mte.receiveClientData(GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT, mRedstone); - * } - * if ((features & MODES) == MODES && mte instanceof IMultiTileEntity.IMTE_HasModes mteModes) { - * mteModes.setMode(mode); - * mteModes.setAllowedModes(allowedModes); - * } - * if ((features & INVENTORY_NAME_ID) == INVENTORY_NAME_ID && mte instanceof Inventory invUpg) { - * invUpg.setInventoryName(mInventoryName); - * invUpg.setInventoryId(inventoryID); - * } - * if ((features & CONTROLLER) == CONTROLLER && mte instanceof IMultiBlockPart) { - * final IMultiBlockPart mtePart = (IMultiBlockPart) mte; - * mtePart.setTargetPos(mTargetPos); - * } - * if ((features & INVENTORY_INDEX) == INVENTORY_INDEX && mte instanceof IMultiBlockPart) { - * final IMultiBlockPart mtePart = (IMultiBlockPart) mte; - * mtePart.setLockedInventoryIndex(mLockedInventoryIndex); - * } - * if ((features & BOOLEANS) == BOOLEANS && mte instanceof IMultiTileMachine) { - * final IMultiTileMachine machine = (IMultiTileMachine) mte; - * machine.setBooleans(booleans); - * } - * if ((features & SOUND) == SOUND && mte instanceof IMultiTileMachine) { - * final IMultiTileMachine machine = (IMultiTileMachine) mte; - * machine.setSound(soundEvent, soundEventValue); - * } - * } - * } catch (Exception e) { - * e.printStackTrace(); - * GT_Mod.GT_FML_LOGGER.error( - * "Exception setting tile entity data for tile entity {} at ({}, {}, {})", - * tTileEntity, - * mX, - * mY, - * mZ); - * } - */ - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.MULTI_TILE_ENTITY.id; - } - - public void clearData() { - data.clear(); - } - - public void addData(PacketData data) { - this.data.add(data); - } - - private static boolean containsBit(int toCheck, int bit) { - return (toCheck & (1 << bit)) > 0; - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_MusicSystemData.java b/src/main/java/gregtech/api/net/GT_Packet_MusicSystemData.java deleted file mode 100644 index 13ebf49205..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_MusicSystemData.java +++ /dev/null @@ -1,58 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.world.IBlockAccess; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.util.GT_MusicSystem; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; - -public class GT_Packet_MusicSystemData extends GT_Packet_New { - - ByteBuf storedData; - - public GT_Packet_MusicSystemData() { - super(true); - } - - public GT_Packet_MusicSystemData(ByteBuf data) { - super(false); - this.storedData = data; - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.MUSIC_SYSTEM_DATA.id; - } - - @Override - public void encode(ByteBuf aOut) { - if (storedData == null) { - return; - } - storedData.markReaderIndex(); - final int len = storedData.readableBytes(); - aOut.writeInt(len); - aOut.writeBytes(storedData); - storedData.resetReaderIndex(); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - final int len = aData.readInt(); - final byte[] fullData = new byte[len]; - aData.readFully(fullData); - return new GT_Packet_MusicSystemData(Unpooled.wrappedBuffer(fullData)); - } - - @Override - public void process(IBlockAccess aWorld) { - if (aWorld == null || storedData == null) { - return; - } - storedData.markReaderIndex(); - GT_MusicSystem.ClientSystem.loadUpdatedSources(storedData); - storedData.resetReaderIndex(); - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_New.java b/src/main/java/gregtech/api/net/GT_Packet_New.java deleted file mode 100644 index 41eb1740b3..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_New.java +++ /dev/null @@ -1,30 +0,0 @@ -package gregtech.api.net; - -import com.google.common.io.ByteArrayDataInput; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; - -@SuppressWarnings("deprecation") -public abstract class GT_Packet_New extends GT_Packet { - - public GT_Packet_New(boolean aIsReference) { - super(aIsReference); - } - - @Override - @Deprecated - public final byte[] encode() { - final ByteBuf tOut = Unpooled.buffer(); - encode(tOut); - final byte[] bytes = new byte[tOut.readableBytes()]; - tOut.readBytes(bytes); - return bytes; - } - - @Override - public abstract void encode(ByteBuf aOut); - - @Override - public abstract GT_Packet_New decode(ByteArrayDataInput aData); -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_Pollution.java b/src/main/java/gregtech/api/net/GT_Packet_Pollution.java deleted file mode 100644 index 9b4a367dc4..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_Pollution.java +++ /dev/null @@ -1,47 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.IBlockAccess; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.common.GT_Client; -import io.netty.buffer.ByteBuf; - -public class GT_Packet_Pollution extends GT_Packet_New { - - private ChunkCoordIntPair chunk; - private int pollution; - - public GT_Packet_Pollution() { - super(true); - } - - public GT_Packet_Pollution(ChunkCoordIntPair chunk, int pollution) { - super(false); - this.chunk = chunk; - this.pollution = pollution; - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeInt(chunk.chunkXPos) - .writeInt(chunk.chunkZPos) - .writeInt(pollution); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new GT_Packet_Pollution(new ChunkCoordIntPair(aData.readInt(), aData.readInt()), aData.readInt()); - } - - @Override - public void process(IBlockAccess aWorld) { - GT_Client.recieveChunkPollutionPacket(chunk, pollution); - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.POLLUTION.id; - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java b/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java deleted file mode 100644 index bca97b69a5..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java +++ /dev/null @@ -1,113 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.network.INetHandler; -import net.minecraft.network.NetHandlerPlayServer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.metatileentity.CoverableTileEntity; -import gregtech.common.covers.CoverInfo; -import io.netty.buffer.ByteBuf; - -/** - * Client -> Server : ask for cover data - */ -public class GT_Packet_RequestCoverData extends GT_Packet_New { - - protected int mX; - protected short mY; - protected int mZ; - - protected ForgeDirection side; - protected int coverID; - - protected EntityPlayerMP mPlayer; - - public GT_Packet_RequestCoverData() { - super(true); - } - - public GT_Packet_RequestCoverData(CoverInfo info, ICoverable tile) { - super(false); - this.mX = tile.getXCoord(); - this.mY = tile.getYCoord(); - this.mZ = tile.getZCoord(); - - this.side = info.getSide(); - this.coverID = info.getCoverID(); - } - - public GT_Packet_RequestCoverData(int mX, short mY, int mZ, ForgeDirection coverSide, int coverID) { - super(false); - this.mX = mX; - this.mY = mY; - this.mZ = mZ; - - this.side = coverSide; - this.coverID = coverID; - } - - public GT_Packet_RequestCoverData(ForgeDirection coverSide, int coverID, ICoverable tile) { - super(false); - this.mX = tile.getXCoord(); - this.mY = tile.getYCoord(); - this.mZ = tile.getZCoord(); - - this.side = coverSide; - this.coverID = coverID; - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.REQUEST_COVER_DATA.id; - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeInt(mX); - aOut.writeShort(mY); - aOut.writeInt(mZ); - - aOut.writeByte(side.ordinal()); - aOut.writeInt(coverID); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new GT_Packet_RequestCoverData( - aData.readInt(), - aData.readShort(), - aData.readInt(), - ForgeDirection.getOrientation(aData.readByte()), - aData.readInt()); - } - - @Override - public void setINetHandler(INetHandler aHandler) { - if (aHandler instanceof NetHandlerPlayServer) { - mPlayer = ((NetHandlerPlayServer) aHandler).playerEntity; - } - } - - @Override - public void process(IBlockAccess aWorld) { - // impossible, but who knows - if (mPlayer == null) return; - final World world = DimensionManager.getWorld(mPlayer.dimension); - if (world != null) { - final TileEntity tile = world.getTileEntity(mX, mY, mZ); - if (tile instanceof CoverableTileEntity te) { - if (!te.isDead() && te.getCoverIDAtSide(side) == coverID) { - te.issueCoverUpdate(side); - } - } - } - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java b/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java deleted file mode 100644 index 268aaab803..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java +++ /dev/null @@ -1,107 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.metatileentity.CoverableTileEntity; -import gregtech.api.util.ISerializableObject; -import gregtech.common.covers.CoverInfo; -import io.netty.buffer.ByteBuf; - -/** - * Server -> Client : Update cover data - */ -public class GT_Packet_SendCoverData extends GT_Packet_New { - - protected int mX; - protected short mY; - protected int mZ; - - protected ForgeDirection side; - protected int coverID; - protected ISerializableObject coverData; - - public GT_Packet_SendCoverData() { - super(true); - } - - public GT_Packet_SendCoverData(int mX, short mY, int mZ, ForgeDirection coverSide, int coverID, - ISerializableObject coverData) { - super(false); - this.mX = mX; - this.mY = mY; - this.mZ = mZ; - - this.side = coverSide; - this.coverID = coverID; - this.coverData = coverData; - } - - public GT_Packet_SendCoverData(CoverInfo info, ICoverable tile) { - super(false); - this.mX = tile.getXCoord(); - this.mY = tile.getYCoord(); - this.mZ = tile.getZCoord(); - - this.side = info.getSide(); - this.coverID = info.getCoverID(); - this.coverData = info.getCoverData(); - } - - public GT_Packet_SendCoverData(ForgeDirection coverSide, int coverID, ISerializableObject coverData, - ICoverable tile) { - super(false); - this.mX = tile.getXCoord(); - this.mY = tile.getYCoord(); - this.mZ = tile.getZCoord(); - - this.side = coverSide; - this.coverID = coverID; - this.coverData = coverData; - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.SEND_COVER_DATA.id; - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeInt(mX); - aOut.writeShort(mY); - aOut.writeInt(mZ); - - aOut.writeByte(side.ordinal()); - aOut.writeInt(coverID); - coverData.writeToByteBuf(aOut); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - final int coverId; - return new GT_Packet_SendCoverData( - aData.readInt(), - aData.readShort(), - aData.readInt(), - ForgeDirection.getOrientation(aData.readByte()), - coverId = aData.readInt(), - GregTech_API.getCoverBehaviorNew(coverId) - .createDataObject() - .readFromPacket(aData, null)); - } - - @Override - public void process(IBlockAccess aWorld) { - if (aWorld != null) { - final TileEntity tile = aWorld.getTileEntity(mX, mY, mZ); - if (tile instanceof CoverableTileEntity coverable && !coverable.isDead()) { - coverable.receiveCoverData(side, coverID, coverData, null); - } - } - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_SendOregenPattern.java b/src/main/java/gregtech/api/net/GT_Packet_SendOregenPattern.java deleted file mode 100644 index 8213ee9c71..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_SendOregenPattern.java +++ /dev/null @@ -1,56 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.world.IBlockAccess; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.util.GT_Log; -import gregtech.common.GT_Worldgenerator; -import gregtech.common.GT_Worldgenerator.OregenPattern; -import io.netty.buffer.ByteBuf; - -public class GT_Packet_SendOregenPattern extends GT_Packet_New { - - protected OregenPattern pattern = OregenPattern.AXISSYMMETRICAL; - - public GT_Packet_SendOregenPattern() { - super(true); - } - - public GT_Packet_SendOregenPattern(OregenPattern pattern) { - super(false); - this.pattern = pattern; - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeInt(this.pattern.ordinal()); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - int ordinal = aData.readInt(); - // make sure we get valid data: - if (ordinal >= 0 && ordinal < OregenPattern.values().length) { - return new GT_Packet_SendOregenPattern(OregenPattern.values()[ordinal]); - } - // invalid data, default to AXISSYMMETRICAL: - GT_Log.err.println( - String.format( - "Received invalid data! Received %d but value must be between 0 and %d! Default (0) will be used.", - ordinal, - OregenPattern.values().length - 1)); - return new GT_Packet_SendOregenPattern(); - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.SEND_OREGEN_PATTERN.id; - } - - @Override - public void process(IBlockAccess aWorld) { - GT_Worldgenerator.oregenPattern = this.pattern; - } - -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit.java b/src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit.java deleted file mode 100644 index 2bfdbca9d2..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit.java +++ /dev/null @@ -1,110 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.item.ItemStack; -import net.minecraft.network.INetHandler; -import net.minecraft.network.NetHandlerPlayServer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; - -import com.google.common.io.ByteArrayDataInput; - -import cpw.mods.fml.common.network.ByteBufUtils; -import gregtech.api.interfaces.IConfigurationCircuitSupport; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IHasInventory; -import gregtech.api.metatileentity.BaseTileEntity; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import io.netty.buffer.ByteBuf; - -/** - * Client -> Server: Update machine configuration data - */ -public class GT_Packet_SetConfigurationCircuit extends GT_Packet_New { - - protected int mX; - protected short mY; - protected int mZ; - protected int dimId; - - protected ItemStack circuit; - - public GT_Packet_SetConfigurationCircuit() { - super(true); - } - - public GT_Packet_SetConfigurationCircuit(IGregTechTileEntity tile, ItemStack circuit) { - this(tile.getXCoord(), tile.getYCoord(), tile.getZCoord(), circuit); - } - - public GT_Packet_SetConfigurationCircuit(BaseTileEntity tile, ItemStack circuit) { - this(tile.getXCoord(), tile.getYCoord(), tile.getZCoord(), circuit); - } - - public GT_Packet_SetConfigurationCircuit(int x, short y, int z, ItemStack circuit) { - super(false); - - this.mX = x; - this.mY = y; - this.mZ = z; - - this.circuit = circuit; - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.SET_CONFIGURATION_CIRCUIT.id; - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeInt(mX); - aOut.writeShort(mY); - aOut.writeInt(mZ); - - // no null check needed. ByteBufUtils will handle it - ByteBufUtils.writeItemStack(aOut, this.circuit); - } - - @Override - public void setINetHandler(INetHandler aHandler) { - if (aHandler instanceof NetHandlerPlayServer) { - dimId = ((NetHandlerPlayServer) aHandler).playerEntity.dimension; - } else { - // packet sent to wrong side, so we need to ignore this one - // but there is no way to disrupt packet pipeline - // so we will instead go find world -2, which (hopefully) doesn't exist - // then we will fail silently in process() - dimId = -2; - } - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new GT_Packet_SetConfigurationCircuit( - aData.readInt(), - aData.readShort(), - aData.readInt(), - ISerializableObject.readItemStackFromGreggyByteBuf(aData)); - } - - @Override - public void process(IBlockAccess aWorld) { - final World world = DimensionManager.getWorld(dimId); - if (world == null) return; - - final TileEntity tile = world.getTileEntity(mX, mY, mZ); - if (!(tile instanceof BaseTileEntity) || ((BaseTileEntity) tile).isDead()) return; - - final IConfigurationCircuitSupport machine = ((BaseTileEntity) tile).getConfigurationCircuitSupport(); - if (machine == null) return; - if (!machine.allowSelectCircuit()) return; - machine.getConfigurationCircuits() - .stream() - .filter(stack -> GT_Utility.areStacksEqual(stack, circuit)) - .findFirst() - .ifPresent(stack -> ((IHasInventory) tile).setInventorySlotContents(machine.getCircuitSlot(), stack)); - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_Sound.java b/src/main/java/gregtech/api/net/GT_Packet_Sound.java deleted file mode 100644 index 93bfdfd3aa..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_Sound.java +++ /dev/null @@ -1,73 +0,0 @@ -package gregtech.api.net; - -import java.io.IOException; - -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.IBlockAccess; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufOutputStream; - -public class GT_Packet_Sound extends GT_Packet_New { - - private int mX, mZ; - private short mY; - private String mSoundName; - private float mSoundStrength, mSoundPitch; - - public GT_Packet_Sound() { - super(true); - } - - public GT_Packet_Sound(String aSoundName, float aSoundStrength, float aSoundPitch, int aX, short aY, int aZ) { - super(false); - mX = aX; - mY = aY; - mZ = aZ; - mSoundName = aSoundName; - mSoundStrength = aSoundStrength; - mSoundPitch = aSoundPitch; - } - - @Override - public void encode(ByteBuf aOut) { - try (ByteBufOutputStream byteOutputStream = new ByteBufOutputStream(aOut)) { - byteOutputStream.writeUTF(mSoundName); - byteOutputStream.writeFloat(mSoundStrength); - byteOutputStream.writeFloat(mSoundPitch); - byteOutputStream.writeInt(mX); - byteOutputStream.writeShort(mY); - byteOutputStream.writeInt(mZ); - } catch (IOException e) { - // this really shouldn't happen, but whatever - e.printStackTrace(GT_Log.err); - } - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new GT_Packet_Sound( - aData.readUTF(), - aData.readFloat(), - aData.readFloat(), - aData.readInt(), - aData.readShort(), - aData.readInt()); - } - - @Override - public void process(IBlockAccess aWorld) { - if (mSoundName != null) { - GT_Utility.doSoundAtClient(new ResourceLocation(mSoundName), 1, mSoundStrength, mSoundPitch, mX, mY, mZ); - } - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.SOUND.id; - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java b/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java deleted file mode 100644 index b07277dc00..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java +++ /dev/null @@ -1,157 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.block.Block; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.GT_Mod; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import io.netty.buffer.ByteBuf; - -public class GT_Packet_TileEntity extends GT_Packet_New { - - private int mX, mZ, mC0, mC1, mC2, mC3, mC4, mC5; - private short mY, mID, mRID; - private byte mTexture, mTexturePage, mUpdate, mRedstone, mColor; - - public GT_Packet_TileEntity() { - super(true); - } - - // For multi tiles - public GT_Packet_TileEntity(int aX, short aY, int aZ, short aRID, short aID, int aC0, int aC1, int aC2, int aC3, - int aC4, int aC5, byte aTexture, byte aTexturePage, byte aUpdate, byte aRedstone, byte aColor) { - super(false); - mX = aX; - mY = aY; - mZ = aZ; - mC0 = aC0; - mC1 = aC1; - mC2 = aC2; - mC3 = aC3; - mC4 = aC4; - mC5 = aC5; - mRID = aRID; - mID = aID; - mTexture = aTexture; - mTexturePage = aTexturePage; - mUpdate = aUpdate; - mRedstone = aRedstone; - mColor = aColor; - } - - // For meta tiles - public GT_Packet_TileEntity(int aX, short aY, int aZ, short aID, int aC0, int aC1, int aC2, int aC3, int aC4, - int aC5, byte aTexture, byte aTexturePage, byte aUpdate, byte aRedstone, byte aColor) { - this( - aX, - aY, - aZ, - (short) 0, - aID, - aC0, - aC1, - aC2, - aC3, - aC4, - aC5, - aTexture, - aTexturePage, - aUpdate, - aRedstone, - aColor); - } - - // For pipes - public GT_Packet_TileEntity(int aX, short aY, int aZ, short aID, int aC0, int aC1, int aC2, int aC3, int aC4, - int aC5, byte aTexture, byte aUpdate, byte aRedstone, byte aColor) { - this(aX, aY, aZ, (short) 0, aID, aC0, aC1, aC2, aC3, aC4, aC5, aTexture, (byte) 0, aUpdate, aRedstone, aColor); - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeInt(mX); - aOut.writeShort(mY); - aOut.writeInt(mZ); - - aOut.writeShort(mRID); - aOut.writeShort(mID); - - aOut.writeInt(mC0); - aOut.writeInt(mC1); - aOut.writeInt(mC2); - aOut.writeInt(mC3); - aOut.writeInt(mC4); - aOut.writeInt(mC5); - - aOut.writeByte(mTexture); - aOut.writeByte(mTexturePage); - aOut.writeByte(mUpdate); - aOut.writeByte(mRedstone); - aOut.writeByte(mColor); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new GT_Packet_TileEntity( - // Coords - aData.readInt(), - aData.readShort(), - aData.readInt(), - // Registry & ID - aData.readShort(), - aData.readShort(), - // Covers - aData.readInt(), - aData.readInt(), - aData.readInt(), - aData.readInt(), - aData.readInt(), - aData.readInt(), - // Everything else - aData.readByte(), - aData.readByte(), - aData.readByte(), - aData.readByte(), - aData.readByte()); - } - - @Override - public void process(IBlockAccess aWorld) { - if (aWorld == null) return; - final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ); - try { - final Block tBlock; - if (tTileEntity instanceof BaseMetaTileEntity) ((BaseMetaTileEntity) tTileEntity).receiveMetaTileEntityData( - mID, - mC0, - mC1, - mC2, - mC3, - mC4, - mC5, - mTexture, - mTexturePage, - mUpdate, - mRedstone, - mColor); - else if (tTileEntity instanceof BaseMetaPipeEntity) ((BaseMetaPipeEntity) tTileEntity) - .receiveMetaTileEntityData(mID, mC0, mC1, mC2, mC3, mC4, mC5, mTexture, mUpdate, mRedstone, mColor); - } catch (Exception e) { - GT_Mod.GT_FML_LOGGER.error( - "Exception setting tile entity data for tile entity {} at ({}, {}, {})", - tTileEntity, - mX, - mY, - mZ); - } - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.TILE_ENTITY.id; - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_ToolSwitchMode.java b/src/main/java/gregtech/api/net/GT_Packet_ToolSwitchMode.java deleted file mode 100644 index c7984d7434..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_ToolSwitchMode.java +++ /dev/null @@ -1,52 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.network.INetHandler; -import net.minecraft.network.NetHandlerPlayServer; -import net.minecraft.world.IBlockAccess; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.items.GT_MetaGenerated_Tool; -import io.netty.buffer.ByteBuf; - -public class GT_Packet_ToolSwitchMode extends GT_Packet_New { - - private EntityPlayerMP player; - - public GT_Packet_ToolSwitchMode() { - super(true); - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.TOOL_SWITCH_MODE.id; - } - - @Override - public void encode(ByteBuf aOut) { - - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new GT_Packet_ToolSwitchMode(); - } - - @Override - public void setINetHandler(INetHandler aHandler) { - player = ((NetHandlerPlayServer) aHandler).playerEntity; - } - - @Override - public void process(IBlockAccess aWorld) { - ItemStack currentItem = player.inventory.getCurrentItem(); - if (currentItem == null || (!(currentItem.getItem() instanceof GT_MetaGenerated_Tool item))) return; - byte maxMode = item.getToolMaxMode(currentItem); - if (maxMode <= 1) return; - byte newMode = (byte) ((GT_MetaGenerated_Tool.getToolMode(currentItem) + 1) % maxMode); - GT_MetaGenerated_Tool.setToolMode(currentItem, newMode); - player.sendSlotContents(player.inventoryContainer, player.inventory.currentItem, currentItem); - } -} diff --git a/src/main/java/gregtech/api/net/GT_Packet_UpdateItem.java b/src/main/java/gregtech/api/net/GT_Packet_UpdateItem.java deleted file mode 100644 index 1b8a453234..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_UpdateItem.java +++ /dev/null @@ -1,64 +0,0 @@ -package gregtech.api.net; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.INetHandler; -import net.minecraft.network.NetHandlerPlayServer; -import net.minecraft.world.IBlockAccess; - -import com.google.common.io.ByteArrayDataInput; - -import cpw.mods.fml.common.network.ByteBufUtils; -import gregtech.api.interfaces.INetworkUpdatableItem; -import gregtech.api.util.ISerializableObject; -import io.netty.buffer.ByteBuf; - -/** - * Client -> Server: send arbitrary data to server and update the currently held item. - */ -public class GT_Packet_UpdateItem extends GT_Packet_New { - - private NBTTagCompound tag; - private EntityPlayerMP mPlayer; - - public GT_Packet_UpdateItem() { - super(true); - } - - public GT_Packet_UpdateItem(NBTTagCompound tag) { - super(false); - this.tag = tag; - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.UPDATE_ITEM.id; - } - - @Override - public void setINetHandler(INetHandler aHandler) { - if (aHandler instanceof NetHandlerPlayServer) { - mPlayer = ((NetHandlerPlayServer) aHandler).playerEntity; - } - } - - @Override - public void encode(ByteBuf aOut) { - ByteBufUtils.writeTag(aOut, tag); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new GT_Packet_UpdateItem(ISerializableObject.readCompoundTagFromGreggyByteBuf(aData)); - } - - @Override - public void process(IBlockAccess aWorld) { - if (mPlayer == null) return; - ItemStack stack = mPlayer.inventory.getCurrentItem(); - if (stack != null && stack.getItem() instanceof INetworkUpdatableItem) { - ((INetworkUpdatableItem) stack.getItem()).receive(stack, mPlayer, tag); - } - } -} diff --git a/src/main/java/gregtech/api/net/IGT_NetworkHandler.java b/src/main/java/gregtech/api/net/IGT_NetworkHandler.java index 8436a89e9b..3569317b01 100644 --- a/src/main/java/gregtech/api/net/IGT_NetworkHandler.java +++ b/src/main/java/gregtech/api/net/IGT_NetworkHandler.java @@ -8,15 +8,15 @@ import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @SuppressWarnings("deprecation") public interface IGT_NetworkHandler { - void sendToPlayer(GT_Packet aPacket, EntityPlayerMP aPlayer); + void sendToPlayer(GTPacket aPacket, EntityPlayerMP aPlayer); - void sendToAllAround(GT_Packet aPacket, TargetPoint aPosition); + void sendToAllAround(GTPacket aPacket, TargetPoint aPosition); - default void sendToAll(GT_Packet aPacket) { + default void sendToAll(GTPacket aPacket) { throw new UnsupportedOperationException("sendToAll not implemented"); } - void sendToServer(GT_Packet aPacket); + void sendToServer(GTPacket aPacket); - void sendPacketToAllPlayersInRange(World aWorld, GT_Packet aPacket, int aX, int aZ); + void sendPacketToAllPlayersInRange(World aWorld, GTPacket aPacket, int aX, int aZ); } diff --git a/src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java b/src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java index c2e0556de9..3ede25f5ea 100644 --- a/src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java +++ b/src/main/java/gregtech/api/objects/AE2DigitalChestHandler.java @@ -4,7 +4,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalChestBase; +import gregtech.common.tileentities.storage.MTEDigitalChestBase; public class AE2DigitalChestHandler implements appeng.api.storage.IExternalStorageHandler { @@ -12,14 +12,14 @@ public class AE2DigitalChestHandler implements appeng.api.storage.IExternalStora public boolean canHandle(final TileEntity te, final ForgeDirection d, final appeng.api.storage.StorageChannel chan, final appeng.api.networking.security.BaseActionSource mySrc) { return chan == appeng.api.storage.StorageChannel.ITEMS && te instanceof BaseMetaTileEntity - && ((BaseMetaTileEntity) te).getMetaTileEntity() instanceof GT_MetaTileEntity_DigitalChestBase; + && ((BaseMetaTileEntity) te).getMetaTileEntity() instanceof MTEDigitalChestBase; } @Override public appeng.api.storage.IMEInventory getInventory(final TileEntity te, final ForgeDirection d, final appeng.api.storage.StorageChannel chan, final appeng.api.networking.security.BaseActionSource src) { if (chan == appeng.api.storage.StorageChannel.ITEMS) { - return ((GT_MetaTileEntity_DigitalChestBase) (((BaseMetaTileEntity) te).getMetaTileEntity())); + return ((MTEDigitalChestBase) (((BaseMetaTileEntity) te).getMetaTileEntity())); } return null; } diff --git a/src/main/java/gregtech/api/objects/GTArrayList.java b/src/main/java/gregtech/api/objects/GTArrayList.java new file mode 100644 index 0000000000..33fbb18571 --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTArrayList.java @@ -0,0 +1,73 @@ +package gregtech.api.objects; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Objects; + +import com.google.common.collect.Collections2; + +public class GTArrayList extends ArrayList { + + private static final long serialVersionUID = 1L; + private int size_sS; + + private final boolean mAllowNulls; + + public GTArrayList(boolean aAllowNulls, int aCapacity) { + super(aCapacity); + mAllowNulls = aAllowNulls; + } + + @SafeVarargs + public GTArrayList(boolean aAllowNulls, E... aArray) { + super(Arrays.asList(aArray)); + mAllowNulls = aAllowNulls; + if (!mAllowNulls) { + size_sS = size(); + for (int i = 0; i < size_sS; i++) if (get(i) == null) { + remove(i--); + size_sS = size(); + } + } + } + + public GTArrayList(boolean aAllowNulls, Collection aList) { + super(aList); + mAllowNulls = aAllowNulls; + if (!mAllowNulls) { + size_sS = size(); + for (int i = 0; i < size_sS; i++) if (get(i) == null) { + remove(i--); + size_sS = size(); + } + } + } + + @Override + public E set(int aIndex, E aElement) { + if (mAllowNulls || aElement != null) return super.set(aIndex, aElement); + return null; + } + + @Override + public boolean add(E aElement) { + if (mAllowNulls || aElement != null) return super.add(aElement); + return false; + } + + @Override + public void add(int aIndex, E aElement) { + if (mAllowNulls || aElement != null) super.add(aIndex, aElement); + } + + @Override + public boolean addAll(Collection aList) { + return super.addAll(Collections2.filter(aList, Objects::nonNull)); + } + + @Override + public boolean addAll(int aIndex, Collection aList) { + return super.addAll(aIndex, Collections2.filter(aList, Objects::nonNull)); + } +} diff --git a/src/main/java/gregtech/api/objects/GTChunkManager.java b/src/main/java/gregtech/api/objects/GTChunkManager.java new file mode 100644 index 0000000000..59bc90aa1c --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTChunkManager.java @@ -0,0 +1,204 @@ +package gregtech.api.objects; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; +import net.minecraftforge.common.ForgeChunkManager; +import net.minecraftforge.common.ForgeChunkManager.Ticket; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.ListMultimap; + +import gregtech.GTMod; +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.IChunkLoader; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GTLog; + +/** + * Handles re-initialization of chunks after a server restart. + */ +public class GTChunkManager + implements ForgeChunkManager.OrderedLoadingCallback, ForgeChunkManager.PlayerOrderedLoadingCallback { + + private final Map registeredTickets = new HashMap<>(); + public static GTChunkManager instance = new GTChunkManager(); + + public static void init() { + ForgeChunkManager.setForcedChunkLoadingCallback(GTMod.instance, instance); + } + + @Override + public void ticketsLoaded(List tickets, World world) {} + + /** + * Determines if tickets should be kept. Based on if the ticket is a machine or a working-chunk ticket. + * Working-chunk tickets are tossed and recreated when the machine reactivates. + * Machine tickets are kept only if the config {@code alwaysReloadChunkloaders} is true. + * Otherwise, machine chunks are tossed and recreated only when the machine reactivates, + * similarly to a Passive Anchor. + * + * @param tickets The tickets that you will want to select from. + * The list is immutable and cannot be manipulated directly. Copy it first. + * @param world The world + * @param maxTicketCount The maximum number of tickets that will be allowed. + * @return list of tickets + */ + + @Override + public List ticketsLoaded(List tickets, World world, int maxTicketCount) { + List validTickets = new ArrayList<>(); + if (GTValues.alwaysReloadChunkloaders) { + for (Ticket ticket : tickets) { + int x = ticket.getModData() + .getInteger("OwnerX"); + int y = ticket.getModData() + .getInteger("OwnerY"); + int z = ticket.getModData() + .getInteger("OwnerZ"); + if (y > 0) { + TileEntity tile = world.getTileEntity(x, y, z); + if (tile instanceof IGregTechTileEntity && ((IGregTechTileEntity) tile).isAllowedToWork()) { + ForgeChunkManager.forceChunk(ticket, new ChunkCoordIntPair(x >> 4, z >> 4)); + if (!registeredTickets.containsKey(tile)) { + registeredTickets.put(tile, ticket); + if (((IGregTechTileEntity) tile).getMetaTileEntity() instanceof IChunkLoader) + ForgeChunkManager.forceChunk( + ticket, + ((IChunkLoader) ((IGregTechTileEntity) tile).getMetaTileEntity()).getActiveChunk()); + validTickets.add(ticket); + } + } + } + } + } + return validTickets; + } + + /** + * Determines if player tickets should be kept. This is where a ticket list per-player would be created and + * maintained. When a player joins, an event occurs, their name/UUID/etc is compared against tickets on this list + * and those tickets are reactivated. + * Since that info would be maintained/dealt with on a per-player startup, the list returned back to Forge is empty. + * + * @param tickets The tickets that you will want to select from. + * The list is immutable and cannot be manipulated directly. Copy it first. + * @param world The world + * @return the list of string-ticket paris + */ + @Override + public ListMultimap playerTicketsLoaded(ListMultimap tickets, World world) { + // Not currently used, so just return an empty list. + return ArrayListMultimap.create(); + } + + /** + * Requests a chunk to be loaded for this machine. May pass a {@code null} chunk to load just the machine itself if + * {@code alwaysReloadChunkloaders} is enabled in config. + * + * @param owner owner of the TileEntity + * @param chunkXZ chunk coordinates + * @param player player + * @return if the chunk was loaded successfully + */ + public static boolean requestPlayerChunkLoad(TileEntity owner, ChunkCoordIntPair chunkXZ, String player) { + if (!GTValues.enableChunkloaders) return false; + if (!GTValues.alwaysReloadChunkloaders && chunkXZ == null) return false; + if (GTValues.debugChunkloaders && chunkXZ != null) + GTLog.out.println("GT_ChunkManager: Chunk request: (" + chunkXZ.chunkXPos + ", " + chunkXZ.chunkZPos + ")"); + if (instance.registeredTickets.containsKey(owner)) { + ForgeChunkManager.forceChunk(instance.registeredTickets.get(owner), chunkXZ); + } else { + Ticket ticket; + if (player.equals("")) ticket = ForgeChunkManager + .requestTicket(GTMod.instance, owner.getWorldObj(), ForgeChunkManager.Type.NORMAL); + else ticket = ForgeChunkManager + .requestPlayerTicket(GTMod.instance, player, owner.getWorldObj(), ForgeChunkManager.Type.NORMAL); + if (ticket == null) { + if (GTValues.debugChunkloaders) + GTLog.out.println("GT_ChunkManager: ForgeChunkManager.requestTicket failed"); + return false; + } + if (GTValues.debugChunkloaders) GTLog.out.println( + "GT_ChunkManager: ticket issued for machine at: (" + owner.xCoord + + ", " + + owner.yCoord + + ", " + + owner.zCoord + + ")"); + NBTTagCompound tag = ticket.getModData(); + tag.setInteger("OwnerX", owner.xCoord); + tag.setInteger("OwnerY", owner.yCoord); + tag.setInteger("OwnerZ", owner.zCoord); + ForgeChunkManager.forceChunk(ticket, chunkXZ); + if (GTValues.alwaysReloadChunkloaders) + ForgeChunkManager.forceChunk(ticket, new ChunkCoordIntPair(owner.xCoord >> 4, owner.zCoord >> 4)); + instance.registeredTickets.put(owner, ticket); + } + return true; + } + + @SuppressWarnings("UnusedReturnValue") + public static boolean requestChunkLoad(TileEntity owner, ChunkCoordIntPair chunkXZ) { + return requestPlayerChunkLoad(owner, chunkXZ, ""); + } + + public static void releaseChunk(TileEntity owner, ChunkCoordIntPair chunkXZ) { + if (!GTValues.enableChunkloaders) return; + Ticket ticket = instance.registeredTickets.get(owner); + if (ticket != null) { + if (GTValues.debugChunkloaders) GTLog.out + .println("GT_ChunkManager: Chunk release: (" + chunkXZ.chunkXPos + ", " + chunkXZ.chunkZPos + ")"); + ForgeChunkManager.unforceChunk(ticket, chunkXZ); + } + } + + public static void releaseTicket(TileEntity owner) { + if (!GTValues.enableChunkloaders) return; + Ticket ticket = instance.registeredTickets.get(owner); + if (ticket != null) { + if (GTValues.debugChunkloaders) { + GTLog.out.println( + "GT_ChunkManager: ticket released by machine at: (" + owner.xCoord + + ", " + + owner.yCoord + + ", " + + owner.zCoord + + ")"); + for (ChunkCoordIntPair chunk : ticket.getChunkList()) GTLog.out + .println("GT_ChunkManager: Chunk release: (" + chunk.chunkXPos + ", " + chunk.chunkZPos + ")"); + } + ForgeChunkManager.releaseTicket(ticket); + instance.registeredTickets.remove(owner); + } + } + + public static void printTickets() { + GTLog.out.println("GT_ChunkManager: Start forced chunks dump:"); + instance.registeredTickets.forEach((machine, ticket) -> { + GTLog.out.print( + "GT_ChunkManager: Chunks forced by the machine at (" + machine.xCoord + + ", " + + machine.yCoord + + ", " + + machine.zCoord + + ")"); + if (ticket.isPlayerTicket()) GTLog.out.print(" Owner: " + ticket.getPlayerName()); + GTLog.out.print(" :"); + for (ChunkCoordIntPair c : ticket.getChunkList()) { + GTLog.out.print("("); + GTLog.out.print(c.chunkXPos); + GTLog.out.print(", "); + GTLog.out.print(c.chunkZPos); + GTLog.out.print("), "); + } + }); + GTLog.out.println("GT_ChunkManager: End forced chunks dump:"); + } +} diff --git a/src/main/java/gregtech/api/objects/GTCopiedBlockTexture.java b/src/main/java/gregtech/api/objects/GTCopiedBlockTexture.java new file mode 100644 index 0000000000..79be90c3b6 --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTCopiedBlockTexture.java @@ -0,0 +1,36 @@ +package gregtech.api.objects; + +import net.minecraft.block.Block; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.ITexture; +import gregtech.common.render.GTCopiedBlockTextureRender; + +/** + * @deprecated Replaced by the {@link gregtech.api.render.TextureFactory} API. + */ +@Deprecated +public class GTCopiedBlockTexture extends GTCopiedBlockTextureRender implements ITexture { + + // Backwards Compat + @Deprecated + public short[] mRGBa; + + public GTCopiedBlockTexture(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa, boolean aAllowAlpha) { + super(aBlock, ordinalSide, aMeta, aRGBa, aAllowAlpha); + GTCopiedBlockTexture.this.mRGBa = aRGBa; + } + + public GTCopiedBlockTexture(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa) { + this(aBlock, ordinalSide, aMeta, aRGBa, true); + } + + public GTCopiedBlockTexture(Block aBlock, int ordinalSide, int aMeta) { + this(aBlock, ordinalSide, aMeta, Dyes._NULL.mRGBa); + } + + @Override + public boolean isOldTexture() { + return true; + } +} diff --git a/src/main/java/gregtech/api/objects/GTCoverDefault.java b/src/main/java/gregtech/api/objects/GTCoverDefault.java new file mode 100644 index 0000000000..6e9664c355 --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTCoverDefault.java @@ -0,0 +1,81 @@ +package gregtech.api.objects; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; + +public class GTCoverDefault extends CoverBehavior { + + /** + * This is the Dummy, if there is a generic Cover without behavior + */ + public GTCoverDefault() { + super(); + } + + @Override + public boolean isSimpleCover() { + return true; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = ((aCoverVariable + 1) & 15); + GTUtility.sendChatToPlayer( + aPlayer, + ((aCoverVariable & 1) != 0 ? GTUtility.trans("128.1", "Redstone ") : "") + + ((aCoverVariable & 2) != 0 ? GTUtility.trans("129.1", "Energy ") : "") + + ((aCoverVariable & 4) != 0 ? GTUtility.trans("130.1", "Fluids ") : "") + + ((aCoverVariable & 8) != 0 ? GTUtility.trans("131.1", "Items ") : "")); + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return (aCoverVariable & 1) != 0; + } + + @Override + public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return (aCoverVariable & 1) != 0; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return (aCoverVariable & 2) != 0; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return (aCoverVariable & 2) != 0; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return (aCoverVariable & 4) != 0; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return (aCoverVariable & 4) != 0; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return (aCoverVariable & 8) != 0; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return (aCoverVariable & 8) != 0; + } +} diff --git a/src/main/java/gregtech/api/objects/GTCoverNone.java b/src/main/java/gregtech/api/objects/GTCoverNone.java new file mode 100644 index 0000000000..2c07538186 --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTCoverNone.java @@ -0,0 +1,237 @@ +package gregtech.api.objects; + +import static gregtech.api.enums.GTValues.E; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.ISerializableObject; + +public class GTCoverNone extends CoverBehavior { + + /** + * This is the Dummy, if there is no Cover + */ + public GTCoverNone() {} + + @Override + public float getBlastProofLevel(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 10.0F; + } + + @Override + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean isGUIClickable(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return false; + } + + @Override + public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + return false; + } + + @Override + public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + boolean aForced) { + return true; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return 0; + } + + @Override + public boolean isSimpleCover() { + return true; + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { + return false; + } + + @Override + protected ISerializableObject.LegacyCoverData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, + int aCoverID, ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { + return aCoverVariable; + } + + @Override + protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, + float aY, float aZ) { + return false; + } + + @Override + protected ISerializableObject.LegacyCoverData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, + float aY, float aZ) { + return aCoverVariable; + } + + @Override + protected boolean onCoverShiftRightClickImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer) { + return false; + } + + @Override + protected boolean onCoverRemovalImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, boolean aForced) { + return true; + } + + @Override + protected String getDescriptionImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return E; + } + + @Override + protected float getBlastProofLevelImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return 10.0F; + } + + @Override + protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, int aSlot, ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, int aSlot, ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return false; + } + + @Override + protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return false; + } + + @Override + protected byte getRedstoneInputImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return aInputRedstone; + } + + @Override + protected int getTickRateImpl(ForgeDirection side, int aCoverID, ISerializableObject.LegacyCoverData aCoverVariable, + ICoverable aTileEntity) { + return 0; + } + + @Override + protected byte getLensColorImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return -1; + } + + @Override + protected ItemStack getDropImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return null; + } +} diff --git a/src/main/java/gregtech/api/objects/GTFluid.java b/src/main/java/gregtech/api/objects/GTFluid.java new file mode 100644 index 0000000000..9ffeac5b8f --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTFluid.java @@ -0,0 +1,36 @@ +package gregtech.api.objects; + +import static gregtech.api.enums.Mods.GregTech; + +import net.minecraftforge.fluids.Fluid; + +import gregtech.api.GregTechAPI; +import gregtech.api.fluid.GTFluidFactory; + +/** + * @deprecated use {@link GTFluidFactory#builder} + */ +@Deprecated +public class GTFluid extends Fluid implements Runnable { + + public final String mTextureName; + private final short[] mRGBa; + + public GTFluid(String aName, String aTextureName, short[] aRGBa) { + super(aName); + mRGBa = aRGBa; + mTextureName = aTextureName; + GregTechAPI.sGTBlockIconload.add(this); + } + + @Override + public int getColor() { + return (Math.max(0, Math.min(255, mRGBa[0])) << 16) | (Math.max(0, Math.min(255, mRGBa[1])) << 8) + | Math.max(0, Math.min(255, mRGBa[2])); + } + + @Override + public void run() { + setIcons(GregTechAPI.sBlockIcons.registerIcon(GregTech.getResourcePath("fluids", "fluid." + mTextureName))); + } +} diff --git a/src/main/java/gregtech/api/objects/GTHashSet.java b/src/main/java/gregtech/api/objects/GTHashSet.java new file mode 100644 index 0000000000..df012c05f7 --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTHashSet.java @@ -0,0 +1,91 @@ +package gregtech.api.objects; + +import java.util.AbstractSet; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; + +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.util.GTUtility; + +public class GTHashSet extends AbstractSet { + + private static final Object OBJECT = new Object(); + private final transient HashMap map; + + public GTHashSet() { + map = new HashMap<>(); + GregTechAPI.sItemStackMappings.add(map); + } + + public GTHashSet(Collection c) { + map = new HashMap<>(Math.max((int) (c.size() / .75f) + 1, 16)); + addAll(c); + GregTechAPI.sItemStackMappings.add(map); + } + + public GTHashSet(int initialCapacity, float loadFactor) { + map = new HashMap<>(initialCapacity, loadFactor); + GregTechAPI.sItemStackMappings.add(map); + } + + public GTHashSet(int initialCapacity) { + map = new HashMap<>(initialCapacity); + GregTechAPI.sItemStackMappings.add(map); + } + + GTHashSet(int initialCapacity, float loadFactor, boolean dummy) { + map = new LinkedHashMap<>(initialCapacity, loadFactor); + GregTechAPI.sItemStackMappings.add(map); + } + + public Map getMap() { + return map; + } + + @SuppressWarnings("unchecked") // The downcasting below will throw ClassCastException unless E is GT_ItemStack. + @Override + public Iterator iterator() { + return (Iterator) map.keySet() + .iterator(); + } + + @Override + public int size() { + return map.size(); + } + + @Override + public boolean isEmpty() { + return map.isEmpty(); + } + + @Override + public boolean contains(Object o) { + return map.containsKey(o); + } + + public boolean add(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return false; + return map.put(new GTItemStack(aStack), OBJECT) == null; + } + + @Override + public boolean add(E e) { + return map.put(e, OBJECT) == null; + } + + @Override + public boolean remove(Object o) { + return map.remove(o) == OBJECT; + } + + @Override + public void clear() { + map.clear(); + } +} diff --git a/src/main/java/gregtech/api/objects/GTItemStack.java b/src/main/java/gregtech/api/objects/GTItemStack.java new file mode 100644 index 0000000000..3ddfcd706a --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTItemStack.java @@ -0,0 +1,107 @@ +package gregtech.api.objects; + +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTUtility; +import gregtech.api.util.item.ItemHolder; +import it.unimi.dsi.fastutil.Hash; + +/** + * An optimization of {@link ItemStack} to have a better {@code hashcode} and {@code equals} in order to improve + * {@code HashMap} and {@code Set} performance + */ +public class GTItemStack extends ItemHolder { + + /** + * A better {@link Hash.Strategy} for {@link ItemStack}. Implementation originally from {@code GT_ItemStack2}. + */ + public static final Hash.Strategy ITEMSTACK_HASH_STRATEGY2 = new Hash.Strategy<>() { + + @Override + public int hashCode(ItemStack o) { + return o.getItem() + .hashCode() * 38197 + Items.feather.getDamage(o); + } + + @Override + public boolean equals(ItemStack a, ItemStack b) { + if (a == b) return true; + if (a == null || b == null) return false; + return a.getItem() == b.getItem() && Items.feather.getDamage(a) == Items.feather.getDamage(b); + } + }; + + public final Item mItem; + public final byte mStackSize; + public final short mMetaData; + + public GTItemStack(Item aItem, long aStackSize, long aMetaData) { + super(new ItemStack(aItem, 1, (int) aMetaData)); + mItem = aItem; + mStackSize = (byte) aStackSize; + mMetaData = (short) aMetaData; + } + + public GTItemStack(ItemStack aStack) { + this(aStack, false); + } + + public GTItemStack(ItemStack aStack, boolean wildcard) { + this( + aStack == null ? null : aStack.getItem(), + aStack == null ? 0 : aStack.stackSize, + aStack == null ? 0 : wildcard ? GTValues.W : Items.feather.getDamage(aStack)); + } + + public GTItemStack(int aHashCode) { + this(GTUtility.intToStack(aHashCode)); + } + + public final ItemStack toStack() { + if (mItem == null) return null; + return new ItemStack(mItem, 1, mMetaData); + } + + public final boolean isStackEqual(ItemStack aStack) { + return GTUtility.areStacksEqual(toStack(), aStack); + } + + public final boolean isStackEqual(GTItemStack aStack) { + return GTUtility.areStacksEqual(toStack(), aStack.toStack()); + } + + @Override + public boolean equals(Object aStack) { + if (aStack == this) return true; + if (aStack instanceof GTItemStack) { + return ((GTItemStack) aStack).mItem == mItem && ((GTItemStack) aStack).mMetaData == mMetaData; + } + return false; + } + + @Override + public int hashCode() { + return GTUtility.stackToInt(toStack()); + } + + /** + * @see #internalCopyStack(ItemStack, boolean) + */ + public static ItemStack internalCopyStack(ItemStack aStack) { + return internalCopyStack(aStack, false); + } + + /** + * Replicates the copy behavior of {@link #toStack()} but for normal {@link ItemStack}s. + * + * @param aStack the stack to copy + * @param wildcard whether to use wildcard damage value + * @return a copy of the stack with stack size 1 and no NBT + */ + public static ItemStack internalCopyStack(ItemStack aStack, boolean wildcard) { + return new ItemStack(aStack.getItem(), 1, wildcard ? GTValues.W : Items.feather.getDamage(aStack)); + } +} diff --git a/src/main/java/gregtech/api/objects/GTItemStack2.java b/src/main/java/gregtech/api/objects/GTItemStack2.java new file mode 100644 index 0000000000..798915d848 --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTItemStack2.java @@ -0,0 +1,41 @@ +package gregtech.api.objects; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +/** + * GT_ItemStack, but with a better hashCode(). Due to this change, it should not be placed in the same hash based data + * structure with GT_ItemStack. It also shouldn't be used to construct search query into a hash based data structure + * that contains GT_ItemStack. + * + * @deprecated See {@link GTItemStack#ITEMSTACK_HASH_STRATEGY2} + */ +@Deprecated +public class GTItemStack2 extends GTItemStack { + + public GTItemStack2(Item aItem, long aStackSize, long aMetaData) { + super(aItem, aStackSize, aMetaData); + } + + public GTItemStack2(ItemStack aStack) { + super(aStack); + } + + public GTItemStack2(ItemStack aStack, boolean wildcard) { + super(aStack, wildcard); + } + + @Override + public boolean equals(Object aStack) { + if (aStack == this) return true; + if (aStack instanceof GTItemStack) { + return ((GTItemStack) aStack).mItem == mItem && ((GTItemStack) aStack).mMetaData == mMetaData; + } + return false; + } + + @Override + public int hashCode() { + return mItem.hashCode() * 38197 + mMetaData; + } +} diff --git a/src/main/java/gregtech/api/objects/GTMultiTexture.java b/src/main/java/gregtech/api/objects/GTMultiTexture.java new file mode 100644 index 0000000000..ecd2f55661 --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTMultiTexture.java @@ -0,0 +1,27 @@ +package gregtech.api.objects; + +import gregtech.api.interfaces.ITexture; +import gregtech.common.render.GTMultiTextureRender; + +/** + *

+ * Lets Multiple ITextures Render overlay over each other.< + *

+ *

+ * I should have done this much earlier... + *

+ * + * @deprecated Replaced by the {@link gregtech.api.render.TextureFactory} API. + */ +@Deprecated +public class GTMultiTexture extends GTMultiTextureRender implements ITexture { + + public GTMultiTexture(ITexture... aTextures) { + super(aTextures); + } + + @Override + public boolean isOldTexture() { + return true; + } +} diff --git a/src/main/java/gregtech/api/objects/GTRenderedTexture.java b/src/main/java/gregtech/api/objects/GTRenderedTexture.java new file mode 100644 index 0000000000..a4d0a064ff --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTRenderedTexture.java @@ -0,0 +1,33 @@ +package gregtech.api.objects; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.IColorModulationContainer; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; + +@Deprecated +public class GTRenderedTexture extends gregtech.common.render.GTRenderedTexture + implements ITexture, IColorModulationContainer { + + @Deprecated + public short[] mRGBa; + + public GTRenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) { + super(aIcon, aRGBa, aAllowAlpha, false, true, false); + if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture"); + mRGBa = aRGBa; + } + + public GTRenderedTexture(IIconContainer aIcon, short[] aRGBa) { + this(aIcon, aRGBa, true); + } + + public GTRenderedTexture(IIconContainer aIcon) { + this(aIcon, Dyes._NULL.mRGBa); + } + + @Override + public boolean isOldTexture() { + return true; + } +} diff --git a/src/main/java/gregtech/api/objects/GTSidedTexture.java b/src/main/java/gregtech/api/objects/GTSidedTexture.java new file mode 100644 index 0000000000..d7b2291386 --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTSidedTexture.java @@ -0,0 +1,48 @@ +package gregtech.api.objects; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.IColorModulationContainer; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.common.render.GTSidedTextureRender; + +/** + * @deprecated Replaced by the {@link gregtech.api.render.TextureFactory} API. + */ +@Deprecated +public class GTSidedTexture extends GTSidedTextureRender implements ITexture, IColorModulationContainer { + + @Deprecated + public short[] mRGBa; + + public GTSidedTexture(IIconContainer aIcon0, IIconContainer aIcon1, IIconContainer aIcon2, IIconContainer aIcon3, + IIconContainer aIcon4, IIconContainer aIcon5, short[] aRGBa, boolean aAllowAlpha) { + super(aIcon0, aIcon1, aIcon2, aIcon3, aIcon4, aIcon5, aRGBa, aAllowAlpha); + + // Backwards Compat + GTSidedTexture.this.mRGBa = aRGBa; + } + + public GTSidedTexture(IIconContainer aIcon0, IIconContainer aIcon1, IIconContainer aIcon2, IIconContainer aIcon3, + IIconContainer aIcon4, IIconContainer aIcon5, short[] aRGBa) { + this(aIcon0, aIcon1, aIcon2, aIcon3, aIcon4, aIcon5, aRGBa, true); + } + + public GTSidedTexture(IIconContainer aIcon0, IIconContainer aIcon1, IIconContainer aIcon2, IIconContainer aIcon3, + IIconContainer aIcon4, IIconContainer aIcon5) { + this(aIcon0, aIcon1, aIcon2, aIcon3, aIcon4, aIcon5, Dyes._NULL.mRGBa); + } + + public GTSidedTexture(IIconContainer aBottom, IIconContainer aTop, IIconContainer aSides, short[] aRGBa) { + this(aBottom, aTop, aSides, aSides, aSides, aSides, aRGBa); + } + + public GTSidedTexture(IIconContainer aBottom, IIconContainer aTop, IIconContainer aSides) { + this(aBottom, aTop, aSides, Dyes._NULL.mRGBa); + } + + @Override + public boolean isOldTexture() { + return true; + } +} diff --git a/src/main/java/gregtech/api/objects/GTStdRenderedTexture.java b/src/main/java/gregtech/api/objects/GTStdRenderedTexture.java new file mode 100644 index 0000000000..11a3a4818f --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTStdRenderedTexture.java @@ -0,0 +1,46 @@ +package gregtech.api.objects; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.util.LightingHelper; + +/** + * This ITexture implementation extends the GT_RenderedTexture class to render with bottom side flipped as with dumb + * blocks rendering. It is used in Ore blocks rendering so they better blends with dumb block ores from vanilla or other + * mods, when seen from bottom. + * + * @deprecated Replaced by the {@link gregtech.api.render.TextureFactory} API. + */ +@Deprecated +public class GTStdRenderedTexture extends GTRenderedTexture { + + @SuppressWarnings("unused") + public GTStdRenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) { + super(aIcon, aRGBa, aAllowAlpha); + } + + public GTStdRenderedTexture(IIconContainer aIcon, short[] aRGBa) { + super(aIcon, aRGBa, true); + } + + @SuppressWarnings("unused") + public GTStdRenderedTexture(IIconContainer aIcon) { + super(aIcon, Dyes._NULL.mRGBa); + } + + @Override + public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + LightingHelper lighting = new LightingHelper(aRenderer); + lighting.setupLightingYNeg(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.DOWN, mRGBa); + aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon()); + if (mIconContainer.getOverlayIcon() != null) { + lighting.setupColor(ForgeDirection.DOWN, 0xffffff); + aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon()); + } + } +} diff --git a/src/main/java/gregtech/api/objects/GTUODimension.java b/src/main/java/gregtech/api/objects/GTUODimension.java new file mode 100644 index 0000000000..2fe10196bd --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTUODimension.java @@ -0,0 +1,54 @@ +package gregtech.api.objects; + +import java.util.Random; + +import net.minecraftforge.common.config.ConfigCategory; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; + +public class GTUODimension { + + private final BiMap fFluids; + private int maxChance; + public String Dimension = "null"; + + public GTUODimension(ConfigCategory aConfigCategory) { // TODO CONFIGURE + fFluids = HashBiMap.create(); + if (aConfigCategory.containsKey("Dimension")) { + aConfigCategory.get("Dimension").comment = "Dimension ID or Class Name"; + Dimension = aConfigCategory.get("Dimension") + .getString(); + } + maxChance = 0; + // GT_FML_LOGGER.info("GT UO "+aConfigCategory.getName()+" Dimension:"+Dimension); + for (int i = 0; i < aConfigCategory.getChildren() + .size(); i++) { + GTUOFluid fluid = new GTUOFluid( + (ConfigCategory) aConfigCategory.getChildren() + .toArray()[i]); + fFluids.put(fluid.Registry, fluid); + maxChance += fluid.Chance; + } + } + + public GTUOFluid getRandomFluid(Random aRandom) { + int random = aRandom.nextInt(1000); + for (BiMap.Entry fl : fFluids.entrySet()) { + int chance = fl.getValue().Chance * 1000 / maxChance; + if (random <= chance) return fl.getValue(); + // GT_FML_LOGGER.info("GT UO "+fl.getValue().Registry+" Chance:"+chance+" Random:"+random); + random -= chance; + } + return null; + } + + public String getUOFluidKey(GTUOFluid uoFluid) { + return fFluids.inverse() + .get(uoFluid); + } + + public GTUOFluid getUOFluid(String key) { + return fFluids.get(key); + } +} diff --git a/src/main/java/gregtech/api/objects/GTUODimensionList.java b/src/main/java/gregtech/api/objects/GTUODimensionList.java new file mode 100644 index 0000000000..60d11fdaa7 --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTUODimensionList.java @@ -0,0 +1,648 @@ +package gregtech.api.objects; + +import static gregtech.api.enums.Dimensions.AlphaCentauriBb; +import static gregtech.api.enums.Dimensions.BarnardaC; +import static gregtech.api.enums.Dimensions.BarnardaE; +import static gregtech.api.enums.Dimensions.BarnardaF; +import static gregtech.api.enums.Dimensions.Callisto; +import static gregtech.api.enums.Dimensions.Europa; +import static gregtech.api.enums.Dimensions.Io; +import static gregtech.api.enums.Dimensions.Makemake; +import static gregtech.api.enums.Dimensions.Mars; +import static gregtech.api.enums.Dimensions.Mercury; +import static gregtech.api.enums.Dimensions.Miranda; +import static gregtech.api.enums.Dimensions.Moon; +import static gregtech.api.enums.Dimensions.Oberon; +import static gregtech.api.enums.Dimensions.Overworld; +import static gregtech.api.enums.Dimensions.Pluto; +import static gregtech.api.enums.Dimensions.Proteus; +import static gregtech.api.enums.Dimensions.Ross128b; +import static gregtech.api.enums.Dimensions.Ross128ba; +import static gregtech.api.enums.Dimensions.TCetiE; +import static gregtech.api.enums.Dimensions.Titan; +import static gregtech.api.enums.Dimensions.Triton; +import static gregtech.api.enums.Dimensions.Venus; +import static gregtech.api.enums.UndergroundFluidNames.carbonDioxide; +import static gregtech.api.enums.UndergroundFluidNames.carbonMonoxide; +import static gregtech.api.enums.UndergroundFluidNames.chlorobenzene; +import static gregtech.api.enums.UndergroundFluidNames.deuterium; +import static gregtech.api.enums.UndergroundFluidNames.distilledWater; +import static gregtech.api.enums.UndergroundFluidNames.ethane; +import static gregtech.api.enums.UndergroundFluidNames.ethylene; +import static gregtech.api.enums.UndergroundFluidNames.fluorine; +import static gregtech.api.enums.UndergroundFluidNames.heavyOil; +import static gregtech.api.enums.UndergroundFluidNames.helium3; +import static gregtech.api.enums.UndergroundFluidNames.hydrofluoricAcid; +import static gregtech.api.enums.UndergroundFluidNames.hydrogen; +import static gregtech.api.enums.UndergroundFluidNames.hydrogenSulfide; +import static gregtech.api.enums.UndergroundFluidNames.lava; +import static gregtech.api.enums.UndergroundFluidNames.lightOil; +import static gregtech.api.enums.UndergroundFluidNames.liquidAir; +import static gregtech.api.enums.UndergroundFluidNames.mediumOil; +import static gregtech.api.enums.UndergroundFluidNames.methane; +import static gregtech.api.enums.UndergroundFluidNames.moltenCopper; +import static gregtech.api.enums.UndergroundFluidNames.moltenIron; +import static gregtech.api.enums.UndergroundFluidNames.moltenLead; +import static gregtech.api.enums.UndergroundFluidNames.moltenTin; +import static gregtech.api.enums.UndergroundFluidNames.naturalGas; +import static gregtech.api.enums.UndergroundFluidNames.nitrogen; +import static gregtech.api.enums.UndergroundFluidNames.oil; +import static gregtech.api.enums.UndergroundFluidNames.oxygen; +import static gregtech.api.enums.UndergroundFluidNames.saltWater; +import static gregtech.api.enums.UndergroundFluidNames.sulfuricAcid; +import static gregtech.api.enums.UndergroundFluidNames.unknownWater; +import static gregtech.api.enums.UndergroundFluidNames.veryHeavyOil; + +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.config.ConfigCategory; +import net.minecraftforge.common.config.Configuration; + +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; + +import gregtech.api.enums.Dimensions; +import gregtech.api.enums.UndergroundFluidNames; + +public class GTUODimensionList { + + private Configuration fConfig; + private String fCategory; + private final BiMap fDimensionList; + + public int[] blackList = new int[0]; + + public GTUODimensionList() { + fDimensionList = HashBiMap.create(); + } + + public void save() { + fConfig.save(); + } + + public GTUODimension GetDimension(int aDimension) { + if (CheckBlackList(aDimension)) return null; + if (fDimensionList.containsKey(Integer.toString(aDimension))) + return fDimensionList.get(Integer.toString(aDimension)); + for (BiMap.Entry dl : fDimensionList.entrySet()) + if (DimensionManager.getProvider(aDimension) + .getClass() + .getName() + .contains(dl.getValue().Dimension)) return dl.getValue(); + return fDimensionList.get("Default"); + } + + private boolean CheckBlackList(int aDimensionId) { + try { + return java.util.Arrays.binarySearch(blackList, aDimensionId) >= 0; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + public void SetConfigValues(String aDimensionName, String aDimension, String aName, String aRegistry, + int aMinAmount, int aMaxAmount, int aChance, int aDecreasePerOperationAmount) { + String Category = fCategory + "." + aDimensionName; + fConfig.get(Category, "Dimension", aDimension) + .getString(); + Category += "." + aName; + fConfig.get(Category, "Registry", aRegistry) + .getString(); + fConfig.get(Category, "MinAmount", aMinAmount) + .getInt(aMinAmount); + fConfig.get(Category, "MaxAmount", aMaxAmount) + .getInt(aMaxAmount); + fConfig.get(Category, "Chance", aChance) + .getInt(aChance); + fConfig.get(Category, "DecreasePerOperationAmount", aDecreasePerOperationAmount) + .getInt(aDecreasePerOperationAmount); + // IT IS IN BUCKETS!!! + } + + private void setOverworldValues() { + new ConfigSetter().dimension(Overworld) + .fluid(naturalGas) + .chance(20) + .decreaseAmount(5) + .maxAmount(350) + .minAmount(10) + .writeToConfig(); + + new ConfigSetter().dimension(Overworld) + .fluid(lightOil) + .chance(20) + .decreaseAmount(5) + .maxAmount(350) + .minAmount(10) + .writeToConfig(); + + new ConfigSetter().dimension(Overworld) + .fluid(mediumOil) + .chance(20) + .decreaseAmount(5) + .maxAmount(625) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Overworld) + .fluid(heavyOil) + .chance(20) + .decreaseAmount(5) + .maxAmount(625) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Overworld) + .fluid(oil) + .chance(20) + .decreaseAmount(5) + .maxAmount(625) + .minAmount(0) + .writeToConfig(); + } + + private void setMoonValues() { + new ConfigSetter().dimension(Moon) + .fluid(helium3) + .chance(100) + .decreaseAmount(5) + .maxAmount(425) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Moon) + .fluid(saltWater) + .chance(20) + .decreaseAmount(5) + .maxAmount(200) + .minAmount(0) + .writeToConfig(); + } + + private void setMercuryValues() { + new ConfigSetter().dimension(Mercury) + .fluid(helium3) + .chance(100) + .decreaseAmount(5) + .maxAmount(800) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Mercury) + .fluid(moltenIron) + .chance(30) + .decreaseAmount(5) + .maxAmount(400) + .minAmount(0) + .writeToConfig(); + } + + private void setVenusValues() { + new ConfigSetter().dimension(Venus) + .fluid(moltenLead) + .chance(100) + .decreaseAmount(5) + .maxAmount(1600) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Venus) + .fluid(sulfuricAcid) + .chance(100) + .decreaseAmount(5) + .maxAmount(250) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Venus) + .fluid(carbonDioxide) + .chance(100) + .decreaseAmount(5) + .maxAmount(1500) + .minAmount(0) + .writeToConfig(); + } + + private void setMarsValues() { + new ConfigSetter().dimension(Mars) + .fluid(saltWater) + .chance(100) + .decreaseAmount(5) + .maxAmount(400) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Mars) + .fluid(chlorobenzene) + .chance(100) + .decreaseAmount(5) + .maxAmount(400) + .minAmount(0) + .writeToConfig(); + } + + private void setIoValues() { + new ConfigSetter().dimension(Io) + .fluid(moltenLead) + .chance(20) + .decreaseAmount(5) + .maxAmount(650) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Io) + .fluid(sulfuricAcid) + .chance(80) + .decreaseAmount(5) + .maxAmount(350) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Io) + .fluid(carbonDioxide) + .chance(80) + .decreaseAmount(5) + .maxAmount(750) + .minAmount(0) + .writeToConfig(); + } + + private void setEuropaValues() { + new ConfigSetter().dimension(Europa) + .fluid(saltWater) + .chance(100) + .decreaseAmount(5) + .maxAmount(800) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Europa) + .fluid(veryHeavyOil) + .chance(20) + .decreaseAmount(5) + .maxAmount(200) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Europa) + .fluid(distilledWater) + .chance(80) + .decreaseAmount(5) + .maxAmount(3500) + .minAmount(0) + .writeToConfig(); + } + + private void setCallistoValues() { + new ConfigSetter().dimension(Callisto) + .fluid(oxygen) + .chance(100) + .decreaseAmount(5) + .maxAmount(200) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Callisto) + .fluid(liquidAir) + .chance(100) + .decreaseAmount(5) + .maxAmount(200) + .minAmount(0) + .writeToConfig(); + } + + private void setTitanValues() { + new ConfigSetter().dimension(Titan) + .fluid(methane) + .chance(100) + .decreaseAmount(5) + .maxAmount(800) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Titan) + .fluid(ethane) + .chance(100) + .decreaseAmount(5) + .maxAmount(200) + .minAmount(0) + .writeToConfig(); + } + + private void setMirandaValues() { + new ConfigSetter().dimension(Miranda) + .fluid(hydrogenSulfide) + .chance(100) + .decreaseAmount(5) + .maxAmount(900) + .minAmount(0) + .writeToConfig(); + } + + private void setOberonValues() { + new ConfigSetter().dimension(Oberon) + .fluid(carbonMonoxide) + .chance(100) + .decreaseAmount(5) + .maxAmount(2000) + .minAmount(0) + .writeToConfig(); + } + + private void setTritonValues() { + new ConfigSetter().dimension(Triton) + .fluid(nitrogen) + .chance(100) + .decreaseAmount(5) + .maxAmount(800) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Triton) + .fluid(ethylene) + .chance(100) + .decreaseAmount(5) + .maxAmount(800) + .minAmount(0) + .writeToConfig(); + } + + private void setProteusValues() { + new ConfigSetter().dimension(Proteus) + .fluid(deuterium) + .chance(100) + .decreaseAmount(5) + .maxAmount(700) + .minAmount(0) + .writeToConfig(); + } + + private void setPlutoValues() { + new ConfigSetter().dimension(Pluto) + .fluid(nitrogen) + .chance(100) + .decreaseAmount(5) + .maxAmount(800) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Pluto) + .fluid(oxygen) + .chance(100) + .decreaseAmount(5) + .maxAmount(800) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Pluto) + .fluid(liquidAir) + .chance(40) + .decreaseAmount(5) + .maxAmount(300) + .minAmount(4) + .writeToConfig(); + + new ConfigSetter().dimension(Pluto) + .fluid(fluorine) + .chance(80) + .decreaseAmount(5) + .maxAmount(800) + .minAmount(4) + .writeToConfig(); + } + + private void setMakeMakeValues() { + new ConfigSetter().dimension(Makemake) + .fluid(hydrofluoricAcid) + .chance(80) + .decreaseAmount(5) + .maxAmount(300) + .minAmount(0) + .writeToConfig(); + } + + private void setAlphaCentauriBBValues() { + new ConfigSetter().dimension(AlphaCentauriBb) + .fluid(moltenCopper) + .chance(10) + .decreaseAmount(5) + .maxAmount(300) + .minAmount(0) + .writeToConfig(); + } + + private void setBarnardaCValues() { + new ConfigSetter().dimension(BarnardaC) + .fluid(veryHeavyOil) + .chance(100) + .decreaseAmount(5) + .maxAmount(800) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(BarnardaC) + .fluid(unknownWater) + .chance(100) + .decreaseAmount(5) + .maxAmount(300) + .minAmount(0) + .writeToConfig(); + } + + private void setBarnardaEValues() { + new ConfigSetter().dimension(BarnardaE) + .fluid(liquidAir) + .chance(20) + .decreaseAmount(5) + .maxAmount(400) + .minAmount(0) + .writeToConfig(); + } + + private void setBarnardaFValues() { + new ConfigSetter().dimension(BarnardaF) + .fluid(moltenTin) + .chance(15) + .decreaseAmount(5) + .maxAmount(400) + .minAmount(0) + .writeToConfig(); + } + + private void setTcetiEValues() { + new ConfigSetter().dimension(TCetiE) + .fluid(veryHeavyOil) + .chance(100) + .decreaseAmount(5) + .maxAmount(200) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(TCetiE) + .fluid(hydrogen) + .chance(50) + .decreaseAmount(5) + .maxAmount(700) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(TCetiE) + .fluid(distilledWater) + .chance(100) + .decreaseAmount(5) + .maxAmount(10_000) + .minAmount(0) + .writeToConfig(); + } + + private void setRoss128bValues() { + new ConfigSetter().dimension(Ross128b) + .fluid(veryHeavyOil) + .chance(40) + .decreaseAmount(5) + .maxAmount(625) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Ross128b) + .fluid(lava) + .chance(5) + .decreaseAmount(5) + .maxAmount(820) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Ross128b) + .fluid(naturalGas) + .chance(65) + .decreaseAmount(5) + .maxAmount(625) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Ross128b) + .fluid(distilledWater) + .chance(100) + .decreaseAmount(5) + .maxAmount(5000) + .minAmount(0) + .writeToConfig(); + } + + private void setRoss128baValues() { + new ConfigSetter().dimension(Ross128ba) + .fluid(saltWater) + .chance(40) + .decreaseAmount(5) + .maxAmount(1250) + .minAmount(0) + .writeToConfig(); + + new ConfigSetter().dimension(Ross128ba) + .fluid(helium3) + .chance(60) + .decreaseAmount(5) + .maxAmount(1250) + .minAmount(0) + .writeToConfig(); + } + + public void setDefaultValues() { + setOverworldValues(); + setMoonValues(); + setMercuryValues(); + setVenusValues(); + setMarsValues(); + setIoValues(); + setEuropaValues(); + setCallistoValues(); + setTitanValues(); + setMirandaValues(); + setOberonValues(); + setTritonValues(); + setProteusValues(); + setPlutoValues(); + setMakeMakeValues(); + setAlphaCentauriBBValues(); + setBarnardaCValues(); + setBarnardaEValues(); + setBarnardaFValues(); + setTcetiEValues(); + setRoss128bValues(); + setRoss128baValues(); + } + + public void getConfig(Configuration aConfig, String aCategory) { + fCategory = aCategory; + fConfig = aConfig; + if (!fConfig.hasCategory(fCategory)) setDefaultValues(); + + blackList = new int[] { -1, 1 }; + blackList = aConfig.get(fCategory, "DimBlackList", blackList, "Dimension IDs Black List") + .getIntList(); + java.util.Arrays.sort(blackList); + + for (int i = 0; i < fConfig.getCategory(fCategory) + .getChildren() + .size(); i++) { + GTUODimension Dimension = new GTUODimension( + (ConfigCategory) fConfig.getCategory(fCategory) + .getChildren() + .toArray()[i]); + fDimensionList.put(Dimension.Dimension, Dimension); + } + save(); + } + + public class ConfigSetter { + + private int chance; + private int decreaseAmount; + private int maxAmount; + private int minAmount; + private UndergroundFluidNames fluid; + private Dimensions dim; + + public ConfigSetter chance(int chance) { + this.chance = chance; + return this; + } + + public ConfigSetter decreaseAmount(int decreaseAmount) { + this.decreaseAmount = decreaseAmount; + return this; + } + + public ConfigSetter maxAmount(int maxAmount) { + this.maxAmount = maxAmount; + return this; + } + + public ConfigSetter minAmount(int minAmount) { + this.minAmount = minAmount; + return this; + } + + public ConfigSetter fluid(UndergroundFluidNames fluid) { + this.fluid = fluid; + return this; + } + + public ConfigSetter dimension(Dimensions dim) { + this.dim = dim; + return this; + } + + public void writeToConfig() { + SetConfigValues( + dim.toString(), + dim.id, + fluid.toString(), + fluid.name, + minAmount, + maxAmount, + chance, + decreaseAmount); + } + } +} diff --git a/src/main/java/gregtech/api/objects/GTUOFluid.java b/src/main/java/gregtech/api/objects/GTUOFluid.java new file mode 100644 index 0000000000..cd019dbc8e --- /dev/null +++ b/src/main/java/gregtech/api/objects/GTUOFluid.java @@ -0,0 +1,69 @@ +package gregtech.api.objects; + +import static gregtech.common.UndergroundOil.DIVIDER; + +import java.util.Random; + +import net.minecraftforge.common.config.ConfigCategory; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +public class GTUOFluid { + + public String Registry = "null"; + public int MaxAmount = 0; + public int MinAmount = 0; + public int Chance = 0; + public int DecreasePerOperationAmount = 5; + + public GTUOFluid(ConfigCategory aConfigCategory) { // TODO CONFIGURE + if (aConfigCategory.containsKey("Registry")) { + aConfigCategory.get("Registry").comment = "Fluid registry name"; + Registry = aConfigCategory.get("Registry") + .getString(); + } + if (aConfigCategory.containsKey("MaxAmount")) { + aConfigCategory + .get("MaxAmount").comment = "Max amount generation (per operation, sets the VeinData) 80000 MAX"; + MaxAmount = aConfigCategory.get("MaxAmount") + .getInt(0); + } + if (aConfigCategory.containsKey("MinAmount")) { + aConfigCategory.get("MinAmount").comment = "Min amount generation (per operation, sets the VeinData) 0 MIN"; + MinAmount = aConfigCategory.get("MinAmount") + .getInt(0); + } + if (aConfigCategory.containsKey("Chance")) { + aConfigCategory + .get("Chance").comment = "Chance generating (weighted chance!, there will be a fluid in chunk always!)"; + Chance = aConfigCategory.get("Chance") + .getInt(0); + } + if (aConfigCategory.containsKey("DecreasePerOperationAmount")) { + aConfigCategory.get( + "DecreasePerOperationAmount").comment = "Decrease per operation (actual fluid gained works like (Litre)VeinData/5000)"; + DecreasePerOperationAmount = aConfigCategory.get("DecreasePerOperationAmount") + .getInt(5); + } + // GT_FML_LOGGER.info("GT UO "+aConfigCategory.getName()+" Fluid:"+Registry+" Max:"+MaxAmount+" + // Min:"+MinAmount+" Chance:"+Chance); + } + + public Fluid getFluid() { + try { + return FluidRegistry.getFluid(this.Registry); + } catch (Exception e) { + return null; + } + } + + public int getRandomAmount(Random aRandom) { // generates some random ass number that correlates to extraction + // speeds + int smax = (int) Math.floor(Math.pow(MaxAmount * 100.d * DIVIDER, 0.2d)); // use scaled max and min values for + // the randomness to make high values + // more rare. + double smin = Math.pow(MinAmount * 100.d * DIVIDER, 0.2d); + double samount = Math.max(smin, aRandom.nextInt(smax) + aRandom.nextDouble()); + return (int) (Math.pow(samount, 5) / 100); // reverses the computation above + } +} diff --git a/src/main/java/gregtech/api/objects/GT_ArrayList.java b/src/main/java/gregtech/api/objects/GT_ArrayList.java deleted file mode 100644 index 9124ef8616..0000000000 --- a/src/main/java/gregtech/api/objects/GT_ArrayList.java +++ /dev/null @@ -1,73 +0,0 @@ -package gregtech.api.objects; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Objects; - -import com.google.common.collect.Collections2; - -public class GT_ArrayList extends ArrayList { - - private static final long serialVersionUID = 1L; - private int size_sS; - - private final boolean mAllowNulls; - - public GT_ArrayList(boolean aAllowNulls, int aCapacity) { - super(aCapacity); - mAllowNulls = aAllowNulls; - } - - @SafeVarargs - public GT_ArrayList(boolean aAllowNulls, E... aArray) { - super(Arrays.asList(aArray)); - mAllowNulls = aAllowNulls; - if (!mAllowNulls) { - size_sS = size(); - for (int i = 0; i < size_sS; i++) if (get(i) == null) { - remove(i--); - size_sS = size(); - } - } - } - - public GT_ArrayList(boolean aAllowNulls, Collection aList) { - super(aList); - mAllowNulls = aAllowNulls; - if (!mAllowNulls) { - size_sS = size(); - for (int i = 0; i < size_sS; i++) if (get(i) == null) { - remove(i--); - size_sS = size(); - } - } - } - - @Override - public E set(int aIndex, E aElement) { - if (mAllowNulls || aElement != null) return super.set(aIndex, aElement); - return null; - } - - @Override - public boolean add(E aElement) { - if (mAllowNulls || aElement != null) return super.add(aElement); - return false; - } - - @Override - public void add(int aIndex, E aElement) { - if (mAllowNulls || aElement != null) super.add(aIndex, aElement); - } - - @Override - public boolean addAll(Collection aList) { - return super.addAll(Collections2.filter(aList, Objects::nonNull)); - } - - @Override - public boolean addAll(int aIndex, Collection aList) { - return super.addAll(aIndex, Collections2.filter(aList, Objects::nonNull)); - } -} diff --git a/src/main/java/gregtech/api/objects/GT_ChunkManager.java b/src/main/java/gregtech/api/objects/GT_ChunkManager.java deleted file mode 100644 index 14baaddd3d..0000000000 --- a/src/main/java/gregtech/api/objects/GT_ChunkManager.java +++ /dev/null @@ -1,204 +0,0 @@ -package gregtech.api.objects; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.World; -import net.minecraftforge.common.ForgeChunkManager; -import net.minecraftforge.common.ForgeChunkManager.Ticket; - -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.ListMultimap; - -import gregtech.GT_Mod; -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.IChunkLoader; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Log; - -/** - * Handles re-initialization of chunks after a server restart. - */ -public class GT_ChunkManager - implements ForgeChunkManager.OrderedLoadingCallback, ForgeChunkManager.PlayerOrderedLoadingCallback { - - private final Map registeredTickets = new HashMap<>(); - public static GT_ChunkManager instance = new GT_ChunkManager(); - - public static void init() { - ForgeChunkManager.setForcedChunkLoadingCallback(GT_Mod.instance, instance); - } - - @Override - public void ticketsLoaded(List tickets, World world) {} - - /** - * Determines if tickets should be kept. Based on if the ticket is a machine or a working-chunk ticket. - * Working-chunk tickets are tossed and recreated when the machine reactivates. - * Machine tickets are kept only if the config {@code alwaysReloadChunkloaders} is true. - * Otherwise, machine chunks are tossed and recreated only when the machine reactivates, - * similarly to a Passive Anchor. - * - * @param tickets The tickets that you will want to select from. - * The list is immutable and cannot be manipulated directly. Copy it first. - * @param world The world - * @param maxTicketCount The maximum number of tickets that will be allowed. - * @return list of tickets - */ - - @Override - public List ticketsLoaded(List tickets, World world, int maxTicketCount) { - List validTickets = new ArrayList<>(); - if (GT_Values.alwaysReloadChunkloaders) { - for (Ticket ticket : tickets) { - int x = ticket.getModData() - .getInteger("OwnerX"); - int y = ticket.getModData() - .getInteger("OwnerY"); - int z = ticket.getModData() - .getInteger("OwnerZ"); - if (y > 0) { - TileEntity tile = world.getTileEntity(x, y, z); - if (tile instanceof IGregTechTileEntity && ((IGregTechTileEntity) tile).isAllowedToWork()) { - ForgeChunkManager.forceChunk(ticket, new ChunkCoordIntPair(x >> 4, z >> 4)); - if (!registeredTickets.containsKey(tile)) { - registeredTickets.put(tile, ticket); - if (((IGregTechTileEntity) tile).getMetaTileEntity() instanceof IChunkLoader) - ForgeChunkManager.forceChunk( - ticket, - ((IChunkLoader) ((IGregTechTileEntity) tile).getMetaTileEntity()).getActiveChunk()); - validTickets.add(ticket); - } - } - } - } - } - return validTickets; - } - - /** - * Determines if player tickets should be kept. This is where a ticket list per-player would be created and - * maintained. When a player joins, an event occurs, their name/UUID/etc is compared against tickets on this list - * and those tickets are reactivated. - * Since that info would be maintained/dealt with on a per-player startup, the list returned back to Forge is empty. - * - * @param tickets The tickets that you will want to select from. - * The list is immutable and cannot be manipulated directly. Copy it first. - * @param world The world - * @return the list of string-ticket paris - */ - @Override - public ListMultimap playerTicketsLoaded(ListMultimap tickets, World world) { - // Not currently used, so just return an empty list. - return ArrayListMultimap.create(); - } - - /** - * Requests a chunk to be loaded for this machine. May pass a {@code null} chunk to load just the machine itself if - * {@code alwaysReloadChunkloaders} is enabled in config. - * - * @param owner owner of the TileEntity - * @param chunkXZ chunk coordinates - * @param player player - * @return if the chunk was loaded successfully - */ - public static boolean requestPlayerChunkLoad(TileEntity owner, ChunkCoordIntPair chunkXZ, String player) { - if (!GT_Values.enableChunkloaders) return false; - if (!GT_Values.alwaysReloadChunkloaders && chunkXZ == null) return false; - if (GT_Values.debugChunkloaders && chunkXZ != null) GT_Log.out - .println("GT_ChunkManager: Chunk request: (" + chunkXZ.chunkXPos + ", " + chunkXZ.chunkZPos + ")"); - if (instance.registeredTickets.containsKey(owner)) { - ForgeChunkManager.forceChunk(instance.registeredTickets.get(owner), chunkXZ); - } else { - Ticket ticket; - if (player.equals("")) ticket = ForgeChunkManager - .requestTicket(GT_Mod.instance, owner.getWorldObj(), ForgeChunkManager.Type.NORMAL); - else ticket = ForgeChunkManager - .requestPlayerTicket(GT_Mod.instance, player, owner.getWorldObj(), ForgeChunkManager.Type.NORMAL); - if (ticket == null) { - if (GT_Values.debugChunkloaders) - GT_Log.out.println("GT_ChunkManager: ForgeChunkManager.requestTicket failed"); - return false; - } - if (GT_Values.debugChunkloaders) GT_Log.out.println( - "GT_ChunkManager: ticket issued for machine at: (" + owner.xCoord - + ", " - + owner.yCoord - + ", " - + owner.zCoord - + ")"); - NBTTagCompound tag = ticket.getModData(); - tag.setInteger("OwnerX", owner.xCoord); - tag.setInteger("OwnerY", owner.yCoord); - tag.setInteger("OwnerZ", owner.zCoord); - ForgeChunkManager.forceChunk(ticket, chunkXZ); - if (GT_Values.alwaysReloadChunkloaders) - ForgeChunkManager.forceChunk(ticket, new ChunkCoordIntPair(owner.xCoord >> 4, owner.zCoord >> 4)); - instance.registeredTickets.put(owner, ticket); - } - return true; - } - - @SuppressWarnings("UnusedReturnValue") - public static boolean requestChunkLoad(TileEntity owner, ChunkCoordIntPair chunkXZ) { - return requestPlayerChunkLoad(owner, chunkXZ, ""); - } - - public static void releaseChunk(TileEntity owner, ChunkCoordIntPair chunkXZ) { - if (!GT_Values.enableChunkloaders) return; - Ticket ticket = instance.registeredTickets.get(owner); - if (ticket != null) { - if (GT_Values.debugChunkloaders) GT_Log.out - .println("GT_ChunkManager: Chunk release: (" + chunkXZ.chunkXPos + ", " + chunkXZ.chunkZPos + ")"); - ForgeChunkManager.unforceChunk(ticket, chunkXZ); - } - } - - public static void releaseTicket(TileEntity owner) { - if (!GT_Values.enableChunkloaders) return; - Ticket ticket = instance.registeredTickets.get(owner); - if (ticket != null) { - if (GT_Values.debugChunkloaders) { - GT_Log.out.println( - "GT_ChunkManager: ticket released by machine at: (" + owner.xCoord - + ", " - + owner.yCoord - + ", " - + owner.zCoord - + ")"); - for (ChunkCoordIntPair chunk : ticket.getChunkList()) GT_Log.out - .println("GT_ChunkManager: Chunk release: (" + chunk.chunkXPos + ", " + chunk.chunkZPos + ")"); - } - ForgeChunkManager.releaseTicket(ticket); - instance.registeredTickets.remove(owner); - } - } - - public static void printTickets() { - GT_Log.out.println("GT_ChunkManager: Start forced chunks dump:"); - instance.registeredTickets.forEach((machine, ticket) -> { - GT_Log.out.print( - "GT_ChunkManager: Chunks forced by the machine at (" + machine.xCoord - + ", " - + machine.yCoord - + ", " - + machine.zCoord - + ")"); - if (ticket.isPlayerTicket()) GT_Log.out.print(" Owner: " + ticket.getPlayerName()); - GT_Log.out.print(" :"); - for (ChunkCoordIntPair c : ticket.getChunkList()) { - GT_Log.out.print("("); - GT_Log.out.print(c.chunkXPos); - GT_Log.out.print(", "); - GT_Log.out.print(c.chunkZPos); - GT_Log.out.print("), "); - } - }); - GT_Log.out.println("GT_ChunkManager: End forced chunks dump:"); - } -} diff --git a/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java b/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java deleted file mode 100644 index c5307b4803..0000000000 --- a/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java +++ /dev/null @@ -1,35 +0,0 @@ -package gregtech.api.objects; - -import net.minecraft.block.Block; - -import gregtech.api.enums.Dyes; -import gregtech.api.interfaces.ITexture; - -/** - * @deprecated Replaced by the {@link gregtech.api.render.TextureFactory} API. - */ -@Deprecated -public class GT_CopiedBlockTexture extends gregtech.common.render.GT_CopiedBlockTexture implements ITexture { - - // Backwards Compat - @Deprecated - public short[] mRGBa; - - public GT_CopiedBlockTexture(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa, boolean aAllowAlpha) { - super(aBlock, ordinalSide, aMeta, aRGBa, aAllowAlpha); - GT_CopiedBlockTexture.this.mRGBa = aRGBa; - } - - public GT_CopiedBlockTexture(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa) { - this(aBlock, ordinalSide, aMeta, aRGBa, true); - } - - public GT_CopiedBlockTexture(Block aBlock, int ordinalSide, int aMeta) { - this(aBlock, ordinalSide, aMeta, Dyes._NULL.mRGBa); - } - - @Override - public boolean isOldTexture() { - return true; - } -} diff --git a/src/main/java/gregtech/api/objects/GT_Cover_Default.java b/src/main/java/gregtech/api/objects/GT_Cover_Default.java deleted file mode 100644 index cc5f96eef3..0000000000 --- a/src/main/java/gregtech/api/objects/GT_Cover_Default.java +++ /dev/null @@ -1,81 +0,0 @@ -package gregtech.api.objects; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; - -public class GT_Cover_Default extends GT_CoverBehavior { - - /** - * This is the Dummy, if there is a generic Cover without behavior - */ - public GT_Cover_Default() { - super(); - } - - @Override - public boolean isSimpleCover() { - return true; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = ((aCoverVariable + 1) & 15); - GT_Utility.sendChatToPlayer( - aPlayer, - ((aCoverVariable & 1) != 0 ? GT_Utility.trans("128.1", "Redstone ") : "") - + ((aCoverVariable & 2) != 0 ? GT_Utility.trans("129.1", "Energy ") : "") - + ((aCoverVariable & 4) != 0 ? GT_Utility.trans("130.1", "Fluids ") : "") - + ((aCoverVariable & 8) != 0 ? GT_Utility.trans("131.1", "Items ") : "")); - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return (aCoverVariable & 1) != 0; - } - - @Override - public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return (aCoverVariable & 1) != 0; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return (aCoverVariable & 2) != 0; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return (aCoverVariable & 2) != 0; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return (aCoverVariable & 4) != 0; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return (aCoverVariable & 4) != 0; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return (aCoverVariable & 8) != 0; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return (aCoverVariable & 8) != 0; - } -} diff --git a/src/main/java/gregtech/api/objects/GT_Cover_None.java b/src/main/java/gregtech/api/objects/GT_Cover_None.java deleted file mode 100644 index 279efe63d8..0000000000 --- a/src/main/java/gregtech/api/objects/GT_Cover_None.java +++ /dev/null @@ -1,237 +0,0 @@ -package gregtech.api.objects; - -import static gregtech.api.enums.GT_Values.E; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.ISerializableObject; - -public class GT_Cover_None extends GT_CoverBehavior { - - /** - * This is the Dummy, if there is no Cover - */ - public GT_Cover_None() {} - - @Override - public float getBlastProofLevel(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 10.0F; - } - - @Override - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean isGUIClickable(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - @Override - public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - return false; - } - - @Override - public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - boolean aForced) { - return true; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return 0; - } - - @Override - public boolean isSimpleCover() { - return true; - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { - return false; - } - - @Override - protected ISerializableObject.LegacyCoverData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, - int aCoverID, ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { - return aCoverVariable; - } - - @Override - protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, - float aY, float aZ) { - return false; - } - - @Override - protected ISerializableObject.LegacyCoverData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, - float aY, float aZ) { - return aCoverVariable; - } - - @Override - protected boolean onCoverShiftRightClickImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer) { - return false; - } - - @Override - protected boolean onCoverRemovalImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, boolean aForced) { - return true; - } - - @Override - protected String getDescriptionImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return E; - } - - @Override - protected float getBlastProofLevelImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return 10.0F; - } - - @Override - protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, int aSlot, ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, int aSlot, ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return false; - } - - @Override - protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return false; - } - - @Override - protected byte getRedstoneInputImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return aInputRedstone; - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, ISerializableObject.LegacyCoverData aCoverVariable, - ICoverable aTileEntity) { - return 0; - } - - @Override - protected byte getLensColorImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return -1; - } - - @Override - protected ItemStack getDropImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return null; - } -} diff --git a/src/main/java/gregtech/api/objects/GT_Fluid.java b/src/main/java/gregtech/api/objects/GT_Fluid.java deleted file mode 100644 index 10824d6327..0000000000 --- a/src/main/java/gregtech/api/objects/GT_Fluid.java +++ /dev/null @@ -1,36 +0,0 @@ -package gregtech.api.objects; - -import static gregtech.api.enums.Mods.GregTech; - -import net.minecraftforge.fluids.Fluid; - -import gregtech.api.GregTech_API; -import gregtech.api.fluid.GT_FluidFactory; - -/** - * @deprecated use {@link GT_FluidFactory#builder} - */ -@Deprecated -public class GT_Fluid extends Fluid implements Runnable { - - public final String mTextureName; - private final short[] mRGBa; - - public GT_Fluid(String aName, String aTextureName, short[] aRGBa) { - super(aName); - mRGBa = aRGBa; - mTextureName = aTextureName; - GregTech_API.sGTBlockIconload.add(this); - } - - @Override - public int getColor() { - return (Math.max(0, Math.min(255, mRGBa[0])) << 16) | (Math.max(0, Math.min(255, mRGBa[1])) << 8) - | Math.max(0, Math.min(255, mRGBa[2])); - } - - @Override - public void run() { - setIcons(GregTech_API.sBlockIcons.registerIcon(GregTech.getResourcePath("fluids", "fluid." + mTextureName))); - } -} diff --git a/src/main/java/gregtech/api/objects/GT_HashSet.java b/src/main/java/gregtech/api/objects/GT_HashSet.java deleted file mode 100644 index d42f194e5d..0000000000 --- a/src/main/java/gregtech/api/objects/GT_HashSet.java +++ /dev/null @@ -1,91 +0,0 @@ -package gregtech.api.objects; - -import java.util.AbstractSet; -import java.util.Collection; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.Map; - -import net.minecraft.item.ItemStack; - -import gregtech.api.GregTech_API; -import gregtech.api.util.GT_Utility; - -public class GT_HashSet extends AbstractSet { - - private static final Object OBJECT = new Object(); - private final transient HashMap map; - - public GT_HashSet() { - map = new HashMap<>(); - GregTech_API.sItemStackMappings.add(map); - } - - public GT_HashSet(Collection c) { - map = new HashMap<>(Math.max((int) (c.size() / .75f) + 1, 16)); - addAll(c); - GregTech_API.sItemStackMappings.add(map); - } - - public GT_HashSet(int initialCapacity, float loadFactor) { - map = new HashMap<>(initialCapacity, loadFactor); - GregTech_API.sItemStackMappings.add(map); - } - - public GT_HashSet(int initialCapacity) { - map = new HashMap<>(initialCapacity); - GregTech_API.sItemStackMappings.add(map); - } - - GT_HashSet(int initialCapacity, float loadFactor, boolean dummy) { - map = new LinkedHashMap<>(initialCapacity, loadFactor); - GregTech_API.sItemStackMappings.add(map); - } - - public Map getMap() { - return map; - } - - @SuppressWarnings("unchecked") // The downcasting below will throw ClassCastException unless E is GT_ItemStack. - @Override - public Iterator iterator() { - return (Iterator) map.keySet() - .iterator(); - } - - @Override - public int size() { - return map.size(); - } - - @Override - public boolean isEmpty() { - return map.isEmpty(); - } - - @Override - public boolean contains(Object o) { - return map.containsKey(o); - } - - public boolean add(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return false; - return map.put(new GT_ItemStack(aStack), OBJECT) == null; - } - - @Override - public boolean add(E e) { - return map.put(e, OBJECT) == null; - } - - @Override - public boolean remove(Object o) { - return map.remove(o) == OBJECT; - } - - @Override - public void clear() { - map.clear(); - } -} diff --git a/src/main/java/gregtech/api/objects/GT_ItemStack.java b/src/main/java/gregtech/api/objects/GT_ItemStack.java deleted file mode 100644 index 492655740d..0000000000 --- a/src/main/java/gregtech/api/objects/GT_ItemStack.java +++ /dev/null @@ -1,107 +0,0 @@ -package gregtech.api.objects; - -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.item.ItemHolder; -import it.unimi.dsi.fastutil.Hash; - -/** - * An optimization of {@link ItemStack} to have a better {@code hashcode} and {@code equals} in order to improve - * {@code HashMap} and {@code Set} performance - */ -public class GT_ItemStack extends ItemHolder { - - /** - * A better {@link Hash.Strategy} for {@link ItemStack}. Implementation originally from {@code GT_ItemStack2}. - */ - public static final Hash.Strategy ITEMSTACK_HASH_STRATEGY2 = new Hash.Strategy<>() { - - @Override - public int hashCode(ItemStack o) { - return o.getItem() - .hashCode() * 38197 + Items.feather.getDamage(o); - } - - @Override - public boolean equals(ItemStack a, ItemStack b) { - if (a == b) return true; - if (a == null || b == null) return false; - return a.getItem() == b.getItem() && Items.feather.getDamage(a) == Items.feather.getDamage(b); - } - }; - - public final Item mItem; - public final byte mStackSize; - public final short mMetaData; - - public GT_ItemStack(Item aItem, long aStackSize, long aMetaData) { - super(new ItemStack(aItem, 1, (int) aMetaData)); - mItem = aItem; - mStackSize = (byte) aStackSize; - mMetaData = (short) aMetaData; - } - - public GT_ItemStack(ItemStack aStack) { - this(aStack, false); - } - - public GT_ItemStack(ItemStack aStack, boolean wildcard) { - this( - aStack == null ? null : aStack.getItem(), - aStack == null ? 0 : aStack.stackSize, - aStack == null ? 0 : wildcard ? GT_Values.W : Items.feather.getDamage(aStack)); - } - - public GT_ItemStack(int aHashCode) { - this(GT_Utility.intToStack(aHashCode)); - } - - public final ItemStack toStack() { - if (mItem == null) return null; - return new ItemStack(mItem, 1, mMetaData); - } - - public final boolean isStackEqual(ItemStack aStack) { - return GT_Utility.areStacksEqual(toStack(), aStack); - } - - public final boolean isStackEqual(GT_ItemStack aStack) { - return GT_Utility.areStacksEqual(toStack(), aStack.toStack()); - } - - @Override - public boolean equals(Object aStack) { - if (aStack == this) return true; - if (aStack instanceof GT_ItemStack) { - return ((GT_ItemStack) aStack).mItem == mItem && ((GT_ItemStack) aStack).mMetaData == mMetaData; - } - return false; - } - - @Override - public int hashCode() { - return GT_Utility.stackToInt(toStack()); - } - - /** - * @see #internalCopyStack(ItemStack, boolean) - */ - public static ItemStack internalCopyStack(ItemStack aStack) { - return internalCopyStack(aStack, false); - } - - /** - * Replicates the copy behavior of {@link #toStack()} but for normal {@link ItemStack}s. - * - * @param aStack the stack to copy - * @param wildcard whether to use wildcard damage value - * @return a copy of the stack with stack size 1 and no NBT - */ - public static ItemStack internalCopyStack(ItemStack aStack, boolean wildcard) { - return new ItemStack(aStack.getItem(), 1, wildcard ? GT_Values.W : Items.feather.getDamage(aStack)); - } -} diff --git a/src/main/java/gregtech/api/objects/GT_ItemStack2.java b/src/main/java/gregtech/api/objects/GT_ItemStack2.java deleted file mode 100644 index aa93876830..0000000000 --- a/src/main/java/gregtech/api/objects/GT_ItemStack2.java +++ /dev/null @@ -1,41 +0,0 @@ -package gregtech.api.objects; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -/** - * GT_ItemStack, but with a better hashCode(). Due to this change, it should not be placed in the same hash based data - * structure with GT_ItemStack. It also shouldn't be used to construct search query into a hash based data structure - * that contains GT_ItemStack. - * - * @deprecated See {@link GT_ItemStack#ITEMSTACK_HASH_STRATEGY2} - */ -@Deprecated -public class GT_ItemStack2 extends GT_ItemStack { - - public GT_ItemStack2(Item aItem, long aStackSize, long aMetaData) { - super(aItem, aStackSize, aMetaData); - } - - public GT_ItemStack2(ItemStack aStack) { - super(aStack); - } - - public GT_ItemStack2(ItemStack aStack, boolean wildcard) { - super(aStack, wildcard); - } - - @Override - public boolean equals(Object aStack) { - if (aStack == this) return true; - if (aStack instanceof GT_ItemStack) { - return ((GT_ItemStack) aStack).mItem == mItem && ((GT_ItemStack) aStack).mMetaData == mMetaData; - } - return false; - } - - @Override - public int hashCode() { - return mItem.hashCode() * 38197 + mMetaData; - } -} diff --git a/src/main/java/gregtech/api/objects/GT_MultiTexture.java b/src/main/java/gregtech/api/objects/GT_MultiTexture.java deleted file mode 100644 index 9748ecb934..0000000000 --- a/src/main/java/gregtech/api/objects/GT_MultiTexture.java +++ /dev/null @@ -1,26 +0,0 @@ -package gregtech.api.objects; - -import gregtech.api.interfaces.ITexture; - -/** - *

- * Lets Multiple ITextures Render overlay over each other.< - *

- *

- * I should have done this much earlier... - *

- * - * @deprecated Replaced by the {@link gregtech.api.render.TextureFactory} API. - */ -@Deprecated -public class GT_MultiTexture extends gregtech.common.render.GT_MultiTexture implements ITexture { - - public GT_MultiTexture(ITexture... aTextures) { - super(aTextures); - } - - @Override - public boolean isOldTexture() { - return true; - } -} diff --git a/src/main/java/gregtech/api/objects/GT_RenderedTexture.java b/src/main/java/gregtech/api/objects/GT_RenderedTexture.java deleted file mode 100644 index bbb22e7d36..0000000000 --- a/src/main/java/gregtech/api/objects/GT_RenderedTexture.java +++ /dev/null @@ -1,33 +0,0 @@ -package gregtech.api.objects; - -import gregtech.api.enums.Dyes; -import gregtech.api.interfaces.IColorModulationContainer; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; - -@Deprecated -public class GT_RenderedTexture extends gregtech.common.render.GT_RenderedTexture - implements ITexture, IColorModulationContainer { - - @Deprecated - public short[] mRGBa; - - public GT_RenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) { - super(aIcon, aRGBa, aAllowAlpha, false, true, false); - if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture"); - mRGBa = aRGBa; - } - - public GT_RenderedTexture(IIconContainer aIcon, short[] aRGBa) { - this(aIcon, aRGBa, true); - } - - public GT_RenderedTexture(IIconContainer aIcon) { - this(aIcon, Dyes._NULL.mRGBa); - } - - @Override - public boolean isOldTexture() { - return true; - } -} diff --git a/src/main/java/gregtech/api/objects/GT_SidedTexture.java b/src/main/java/gregtech/api/objects/GT_SidedTexture.java deleted file mode 100644 index d042ebede9..0000000000 --- a/src/main/java/gregtech/api/objects/GT_SidedTexture.java +++ /dev/null @@ -1,48 +0,0 @@ -package gregtech.api.objects; - -import gregtech.api.enums.Dyes; -import gregtech.api.interfaces.IColorModulationContainer; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; - -/** - * @deprecated Replaced by the {@link gregtech.api.render.TextureFactory} API. - */ -@Deprecated -public class GT_SidedTexture extends gregtech.common.render.GT_SidedTexture - implements ITexture, IColorModulationContainer { - - @Deprecated - public short[] mRGBa; - - public GT_SidedTexture(IIconContainer aIcon0, IIconContainer aIcon1, IIconContainer aIcon2, IIconContainer aIcon3, - IIconContainer aIcon4, IIconContainer aIcon5, short[] aRGBa, boolean aAllowAlpha) { - super(aIcon0, aIcon1, aIcon2, aIcon3, aIcon4, aIcon5, aRGBa, aAllowAlpha); - - // Backwards Compat - GT_SidedTexture.this.mRGBa = aRGBa; - } - - public GT_SidedTexture(IIconContainer aIcon0, IIconContainer aIcon1, IIconContainer aIcon2, IIconContainer aIcon3, - IIconContainer aIcon4, IIconContainer aIcon5, short[] aRGBa) { - this(aIcon0, aIcon1, aIcon2, aIcon3, aIcon4, aIcon5, aRGBa, true); - } - - public GT_SidedTexture(IIconContainer aIcon0, IIconContainer aIcon1, IIconContainer aIcon2, IIconContainer aIcon3, - IIconContainer aIcon4, IIconContainer aIcon5) { - this(aIcon0, aIcon1, aIcon2, aIcon3, aIcon4, aIcon5, Dyes._NULL.mRGBa); - } - - public GT_SidedTexture(IIconContainer aBottom, IIconContainer aTop, IIconContainer aSides, short[] aRGBa) { - this(aBottom, aTop, aSides, aSides, aSides, aSides, aRGBa); - } - - public GT_SidedTexture(IIconContainer aBottom, IIconContainer aTop, IIconContainer aSides) { - this(aBottom, aTop, aSides, Dyes._NULL.mRGBa); - } - - @Override - public boolean isOldTexture() { - return true; - } -} diff --git a/src/main/java/gregtech/api/objects/GT_StdRenderedTexture.java b/src/main/java/gregtech/api/objects/GT_StdRenderedTexture.java deleted file mode 100644 index d4b8d16da6..0000000000 --- a/src/main/java/gregtech/api/objects/GT_StdRenderedTexture.java +++ /dev/null @@ -1,46 +0,0 @@ -package gregtech.api.objects; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Dyes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.util.LightingHelper; - -/** - * This ITexture implementation extends the GT_RenderedTexture class to render with bottom side flipped as with dumb - * blocks rendering. It is used in Ore blocks rendering so they better blends with dumb block ores from vanilla or other - * mods, when seen from bottom. - * - * @deprecated Replaced by the {@link gregtech.api.render.TextureFactory} API. - */ -@Deprecated -public class GT_StdRenderedTexture extends GT_RenderedTexture { - - @SuppressWarnings("unused") - public GT_StdRenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) { - super(aIcon, aRGBa, aAllowAlpha); - } - - public GT_StdRenderedTexture(IIconContainer aIcon, short[] aRGBa) { - super(aIcon, aRGBa, true); - } - - @SuppressWarnings("unused") - public GT_StdRenderedTexture(IIconContainer aIcon) { - super(aIcon, Dyes._NULL.mRGBa); - } - - @Override - public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - LightingHelper lighting = new LightingHelper(aRenderer); - lighting.setupLightingYNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.DOWN, mRGBa); - aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, mIconContainer.getIcon()); - if (mIconContainer.getOverlayIcon() != null) { - lighting.setupColor(ForgeDirection.DOWN, 0xffffff); - aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, mIconContainer.getOverlayIcon()); - } - } -} diff --git a/src/main/java/gregtech/api/objects/GT_UO_Dimension.java b/src/main/java/gregtech/api/objects/GT_UO_Dimension.java deleted file mode 100644 index af82c35dab..0000000000 --- a/src/main/java/gregtech/api/objects/GT_UO_Dimension.java +++ /dev/null @@ -1,54 +0,0 @@ -package gregtech.api.objects; - -import java.util.Random; - -import net.minecraftforge.common.config.ConfigCategory; - -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; - -public class GT_UO_Dimension { - - private final BiMap fFluids; - private int maxChance; - public String Dimension = "null"; - - public GT_UO_Dimension(ConfigCategory aConfigCategory) { // TODO CONFIGURE - fFluids = HashBiMap.create(); - if (aConfigCategory.containsKey("Dimension")) { - aConfigCategory.get("Dimension").comment = "Dimension ID or Class Name"; - Dimension = aConfigCategory.get("Dimension") - .getString(); - } - maxChance = 0; - // GT_FML_LOGGER.info("GT UO "+aConfigCategory.getName()+" Dimension:"+Dimension); - for (int i = 0; i < aConfigCategory.getChildren() - .size(); i++) { - GT_UO_Fluid fluid = new GT_UO_Fluid( - (ConfigCategory) aConfigCategory.getChildren() - .toArray()[i]); - fFluids.put(fluid.Registry, fluid); - maxChance += fluid.Chance; - } - } - - public GT_UO_Fluid getRandomFluid(Random aRandom) { - int random = aRandom.nextInt(1000); - for (BiMap.Entry fl : fFluids.entrySet()) { - int chance = fl.getValue().Chance * 1000 / maxChance; - if (random <= chance) return fl.getValue(); - // GT_FML_LOGGER.info("GT UO "+fl.getValue().Registry+" Chance:"+chance+" Random:"+random); - random -= chance; - } - return null; - } - - public String getUOFluidKey(GT_UO_Fluid uoFluid) { - return fFluids.inverse() - .get(uoFluid); - } - - public GT_UO_Fluid getUOFluid(String key) { - return fFluids.get(key); - } -} diff --git a/src/main/java/gregtech/api/objects/GT_UO_DimensionList.java b/src/main/java/gregtech/api/objects/GT_UO_DimensionList.java deleted file mode 100644 index f057614ccf..0000000000 --- a/src/main/java/gregtech/api/objects/GT_UO_DimensionList.java +++ /dev/null @@ -1,648 +0,0 @@ -package gregtech.api.objects; - -import static gregtech.api.enums.Dimensions.AlphaCentauriBb; -import static gregtech.api.enums.Dimensions.BarnardaC; -import static gregtech.api.enums.Dimensions.BarnardaE; -import static gregtech.api.enums.Dimensions.BarnardaF; -import static gregtech.api.enums.Dimensions.Callisto; -import static gregtech.api.enums.Dimensions.Europa; -import static gregtech.api.enums.Dimensions.Io; -import static gregtech.api.enums.Dimensions.Makemake; -import static gregtech.api.enums.Dimensions.Mars; -import static gregtech.api.enums.Dimensions.Mercury; -import static gregtech.api.enums.Dimensions.Miranda; -import static gregtech.api.enums.Dimensions.Moon; -import static gregtech.api.enums.Dimensions.Oberon; -import static gregtech.api.enums.Dimensions.Overworld; -import static gregtech.api.enums.Dimensions.Pluto; -import static gregtech.api.enums.Dimensions.Proteus; -import static gregtech.api.enums.Dimensions.Ross128b; -import static gregtech.api.enums.Dimensions.Ross128ba; -import static gregtech.api.enums.Dimensions.TCetiE; -import static gregtech.api.enums.Dimensions.Titan; -import static gregtech.api.enums.Dimensions.Triton; -import static gregtech.api.enums.Dimensions.Venus; -import static gregtech.api.enums.UndergroundFluidNames.carbonDioxide; -import static gregtech.api.enums.UndergroundFluidNames.carbonMonoxide; -import static gregtech.api.enums.UndergroundFluidNames.chlorobenzene; -import static gregtech.api.enums.UndergroundFluidNames.deuterium; -import static gregtech.api.enums.UndergroundFluidNames.distilledWater; -import static gregtech.api.enums.UndergroundFluidNames.ethane; -import static gregtech.api.enums.UndergroundFluidNames.ethylene; -import static gregtech.api.enums.UndergroundFluidNames.fluorine; -import static gregtech.api.enums.UndergroundFluidNames.heavyOil; -import static gregtech.api.enums.UndergroundFluidNames.helium3; -import static gregtech.api.enums.UndergroundFluidNames.hydrofluoricAcid; -import static gregtech.api.enums.UndergroundFluidNames.hydrogen; -import static gregtech.api.enums.UndergroundFluidNames.hydrogenSulfide; -import static gregtech.api.enums.UndergroundFluidNames.lava; -import static gregtech.api.enums.UndergroundFluidNames.lightOil; -import static gregtech.api.enums.UndergroundFluidNames.liquidAir; -import static gregtech.api.enums.UndergroundFluidNames.mediumOil; -import static gregtech.api.enums.UndergroundFluidNames.methane; -import static gregtech.api.enums.UndergroundFluidNames.moltenCopper; -import static gregtech.api.enums.UndergroundFluidNames.moltenIron; -import static gregtech.api.enums.UndergroundFluidNames.moltenLead; -import static gregtech.api.enums.UndergroundFluidNames.moltenTin; -import static gregtech.api.enums.UndergroundFluidNames.naturalGas; -import static gregtech.api.enums.UndergroundFluidNames.nitrogen; -import static gregtech.api.enums.UndergroundFluidNames.oil; -import static gregtech.api.enums.UndergroundFluidNames.oxygen; -import static gregtech.api.enums.UndergroundFluidNames.saltWater; -import static gregtech.api.enums.UndergroundFluidNames.sulfuricAcid; -import static gregtech.api.enums.UndergroundFluidNames.unknownWater; -import static gregtech.api.enums.UndergroundFluidNames.veryHeavyOil; - -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.config.ConfigCategory; -import net.minecraftforge.common.config.Configuration; - -import com.google.common.collect.BiMap; -import com.google.common.collect.HashBiMap; - -import gregtech.api.enums.Dimensions; -import gregtech.api.enums.UndergroundFluidNames; - -public class GT_UO_DimensionList { - - private Configuration fConfig; - private String fCategory; - private final BiMap fDimensionList; - - public int[] blackList = new int[0]; - - public GT_UO_DimensionList() { - fDimensionList = HashBiMap.create(); - } - - public void save() { - fConfig.save(); - } - - public GT_UO_Dimension GetDimension(int aDimension) { - if (CheckBlackList(aDimension)) return null; - if (fDimensionList.containsKey(Integer.toString(aDimension))) - return fDimensionList.get(Integer.toString(aDimension)); - for (BiMap.Entry dl : fDimensionList.entrySet()) - if (DimensionManager.getProvider(aDimension) - .getClass() - .getName() - .contains(dl.getValue().Dimension)) return dl.getValue(); - return fDimensionList.get("Default"); - } - - private boolean CheckBlackList(int aDimensionId) { - try { - return java.util.Arrays.binarySearch(blackList, aDimensionId) >= 0; - } catch (Exception e) { - e.printStackTrace(); - return false; - } - } - - public void SetConfigValues(String aDimensionName, String aDimension, String aName, String aRegistry, - int aMinAmount, int aMaxAmount, int aChance, int aDecreasePerOperationAmount) { - String Category = fCategory + "." + aDimensionName; - fConfig.get(Category, "Dimension", aDimension) - .getString(); - Category += "." + aName; - fConfig.get(Category, "Registry", aRegistry) - .getString(); - fConfig.get(Category, "MinAmount", aMinAmount) - .getInt(aMinAmount); - fConfig.get(Category, "MaxAmount", aMaxAmount) - .getInt(aMaxAmount); - fConfig.get(Category, "Chance", aChance) - .getInt(aChance); - fConfig.get(Category, "DecreasePerOperationAmount", aDecreasePerOperationAmount) - .getInt(aDecreasePerOperationAmount); - // IT IS IN BUCKETS!!! - } - - private void setOverworldValues() { - new ConfigSetter().dimension(Overworld) - .fluid(naturalGas) - .chance(20) - .decreaseAmount(5) - .maxAmount(350) - .minAmount(10) - .writeToConfig(); - - new ConfigSetter().dimension(Overworld) - .fluid(lightOil) - .chance(20) - .decreaseAmount(5) - .maxAmount(350) - .minAmount(10) - .writeToConfig(); - - new ConfigSetter().dimension(Overworld) - .fluid(mediumOil) - .chance(20) - .decreaseAmount(5) - .maxAmount(625) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Overworld) - .fluid(heavyOil) - .chance(20) - .decreaseAmount(5) - .maxAmount(625) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Overworld) - .fluid(oil) - .chance(20) - .decreaseAmount(5) - .maxAmount(625) - .minAmount(0) - .writeToConfig(); - } - - private void setMoonValues() { - new ConfigSetter().dimension(Moon) - .fluid(helium3) - .chance(100) - .decreaseAmount(5) - .maxAmount(425) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Moon) - .fluid(saltWater) - .chance(20) - .decreaseAmount(5) - .maxAmount(200) - .minAmount(0) - .writeToConfig(); - } - - private void setMercuryValues() { - new ConfigSetter().dimension(Mercury) - .fluid(helium3) - .chance(100) - .decreaseAmount(5) - .maxAmount(800) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Mercury) - .fluid(moltenIron) - .chance(30) - .decreaseAmount(5) - .maxAmount(400) - .minAmount(0) - .writeToConfig(); - } - - private void setVenusValues() { - new ConfigSetter().dimension(Venus) - .fluid(moltenLead) - .chance(100) - .decreaseAmount(5) - .maxAmount(1600) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Venus) - .fluid(sulfuricAcid) - .chance(100) - .decreaseAmount(5) - .maxAmount(250) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Venus) - .fluid(carbonDioxide) - .chance(100) - .decreaseAmount(5) - .maxAmount(1500) - .minAmount(0) - .writeToConfig(); - } - - private void setMarsValues() { - new ConfigSetter().dimension(Mars) - .fluid(saltWater) - .chance(100) - .decreaseAmount(5) - .maxAmount(400) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Mars) - .fluid(chlorobenzene) - .chance(100) - .decreaseAmount(5) - .maxAmount(400) - .minAmount(0) - .writeToConfig(); - } - - private void setIoValues() { - new ConfigSetter().dimension(Io) - .fluid(moltenLead) - .chance(20) - .decreaseAmount(5) - .maxAmount(650) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Io) - .fluid(sulfuricAcid) - .chance(80) - .decreaseAmount(5) - .maxAmount(350) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Io) - .fluid(carbonDioxide) - .chance(80) - .decreaseAmount(5) - .maxAmount(750) - .minAmount(0) - .writeToConfig(); - } - - private void setEuropaValues() { - new ConfigSetter().dimension(Europa) - .fluid(saltWater) - .chance(100) - .decreaseAmount(5) - .maxAmount(800) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Europa) - .fluid(veryHeavyOil) - .chance(20) - .decreaseAmount(5) - .maxAmount(200) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Europa) - .fluid(distilledWater) - .chance(80) - .decreaseAmount(5) - .maxAmount(3500) - .minAmount(0) - .writeToConfig(); - } - - private void setCallistoValues() { - new ConfigSetter().dimension(Callisto) - .fluid(oxygen) - .chance(100) - .decreaseAmount(5) - .maxAmount(200) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Callisto) - .fluid(liquidAir) - .chance(100) - .decreaseAmount(5) - .maxAmount(200) - .minAmount(0) - .writeToConfig(); - } - - private void setTitanValues() { - new ConfigSetter().dimension(Titan) - .fluid(methane) - .chance(100) - .decreaseAmount(5) - .maxAmount(800) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Titan) - .fluid(ethane) - .chance(100) - .decreaseAmount(5) - .maxAmount(200) - .minAmount(0) - .writeToConfig(); - } - - private void setMirandaValues() { - new ConfigSetter().dimension(Miranda) - .fluid(hydrogenSulfide) - .chance(100) - .decreaseAmount(5) - .maxAmount(900) - .minAmount(0) - .writeToConfig(); - } - - private void setOberonValues() { - new ConfigSetter().dimension(Oberon) - .fluid(carbonMonoxide) - .chance(100) - .decreaseAmount(5) - .maxAmount(2000) - .minAmount(0) - .writeToConfig(); - } - - private void setTritonValues() { - new ConfigSetter().dimension(Triton) - .fluid(nitrogen) - .chance(100) - .decreaseAmount(5) - .maxAmount(800) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Triton) - .fluid(ethylene) - .chance(100) - .decreaseAmount(5) - .maxAmount(800) - .minAmount(0) - .writeToConfig(); - } - - private void setProteusValues() { - new ConfigSetter().dimension(Proteus) - .fluid(deuterium) - .chance(100) - .decreaseAmount(5) - .maxAmount(700) - .minAmount(0) - .writeToConfig(); - } - - private void setPlutoValues() { - new ConfigSetter().dimension(Pluto) - .fluid(nitrogen) - .chance(100) - .decreaseAmount(5) - .maxAmount(800) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Pluto) - .fluid(oxygen) - .chance(100) - .decreaseAmount(5) - .maxAmount(800) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Pluto) - .fluid(liquidAir) - .chance(40) - .decreaseAmount(5) - .maxAmount(300) - .minAmount(4) - .writeToConfig(); - - new ConfigSetter().dimension(Pluto) - .fluid(fluorine) - .chance(80) - .decreaseAmount(5) - .maxAmount(800) - .minAmount(4) - .writeToConfig(); - } - - private void setMakeMakeValues() { - new ConfigSetter().dimension(Makemake) - .fluid(hydrofluoricAcid) - .chance(80) - .decreaseAmount(5) - .maxAmount(300) - .minAmount(0) - .writeToConfig(); - } - - private void setAlphaCentauriBBValues() { - new ConfigSetter().dimension(AlphaCentauriBb) - .fluid(moltenCopper) - .chance(10) - .decreaseAmount(5) - .maxAmount(300) - .minAmount(0) - .writeToConfig(); - } - - private void setBarnardaCValues() { - new ConfigSetter().dimension(BarnardaC) - .fluid(veryHeavyOil) - .chance(100) - .decreaseAmount(5) - .maxAmount(800) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(BarnardaC) - .fluid(unknownWater) - .chance(100) - .decreaseAmount(5) - .maxAmount(300) - .minAmount(0) - .writeToConfig(); - } - - private void setBarnardaEValues() { - new ConfigSetter().dimension(BarnardaE) - .fluid(liquidAir) - .chance(20) - .decreaseAmount(5) - .maxAmount(400) - .minAmount(0) - .writeToConfig(); - } - - private void setBarnardaFValues() { - new ConfigSetter().dimension(BarnardaF) - .fluid(moltenTin) - .chance(15) - .decreaseAmount(5) - .maxAmount(400) - .minAmount(0) - .writeToConfig(); - } - - private void setTcetiEValues() { - new ConfigSetter().dimension(TCetiE) - .fluid(veryHeavyOil) - .chance(100) - .decreaseAmount(5) - .maxAmount(200) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(TCetiE) - .fluid(hydrogen) - .chance(50) - .decreaseAmount(5) - .maxAmount(700) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(TCetiE) - .fluid(distilledWater) - .chance(100) - .decreaseAmount(5) - .maxAmount(10_000) - .minAmount(0) - .writeToConfig(); - } - - private void setRoss128bValues() { - new ConfigSetter().dimension(Ross128b) - .fluid(veryHeavyOil) - .chance(40) - .decreaseAmount(5) - .maxAmount(625) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Ross128b) - .fluid(lava) - .chance(5) - .decreaseAmount(5) - .maxAmount(820) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Ross128b) - .fluid(naturalGas) - .chance(65) - .decreaseAmount(5) - .maxAmount(625) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Ross128b) - .fluid(distilledWater) - .chance(100) - .decreaseAmount(5) - .maxAmount(5000) - .minAmount(0) - .writeToConfig(); - } - - private void setRoss128baValues() { - new ConfigSetter().dimension(Ross128ba) - .fluid(saltWater) - .chance(40) - .decreaseAmount(5) - .maxAmount(1250) - .minAmount(0) - .writeToConfig(); - - new ConfigSetter().dimension(Ross128ba) - .fluid(helium3) - .chance(60) - .decreaseAmount(5) - .maxAmount(1250) - .minAmount(0) - .writeToConfig(); - } - - public void setDefaultValues() { - setOverworldValues(); - setMoonValues(); - setMercuryValues(); - setVenusValues(); - setMarsValues(); - setIoValues(); - setEuropaValues(); - setCallistoValues(); - setTitanValues(); - setMirandaValues(); - setOberonValues(); - setTritonValues(); - setProteusValues(); - setPlutoValues(); - setMakeMakeValues(); - setAlphaCentauriBBValues(); - setBarnardaCValues(); - setBarnardaEValues(); - setBarnardaFValues(); - setTcetiEValues(); - setRoss128bValues(); - setRoss128baValues(); - } - - public void getConfig(Configuration aConfig, String aCategory) { - fCategory = aCategory; - fConfig = aConfig; - if (!fConfig.hasCategory(fCategory)) setDefaultValues(); - - blackList = new int[] { -1, 1 }; - blackList = aConfig.get(fCategory, "DimBlackList", blackList, "Dimension IDs Black List") - .getIntList(); - java.util.Arrays.sort(blackList); - - for (int i = 0; i < fConfig.getCategory(fCategory) - .getChildren() - .size(); i++) { - GT_UO_Dimension Dimension = new GT_UO_Dimension( - (ConfigCategory) fConfig.getCategory(fCategory) - .getChildren() - .toArray()[i]); - fDimensionList.put(Dimension.Dimension, Dimension); - } - save(); - } - - public class ConfigSetter { - - private int chance; - private int decreaseAmount; - private int maxAmount; - private int minAmount; - private UndergroundFluidNames fluid; - private Dimensions dim; - - public ConfigSetter chance(int chance) { - this.chance = chance; - return this; - } - - public ConfigSetter decreaseAmount(int decreaseAmount) { - this.decreaseAmount = decreaseAmount; - return this; - } - - public ConfigSetter maxAmount(int maxAmount) { - this.maxAmount = maxAmount; - return this; - } - - public ConfigSetter minAmount(int minAmount) { - this.minAmount = minAmount; - return this; - } - - public ConfigSetter fluid(UndergroundFluidNames fluid) { - this.fluid = fluid; - return this; - } - - public ConfigSetter dimension(Dimensions dim) { - this.dim = dim; - return this; - } - - public void writeToConfig() { - SetConfigValues( - dim.toString(), - dim.id, - fluid.toString(), - fluid.name, - minAmount, - maxAmount, - chance, - decreaseAmount); - } - } -} diff --git a/src/main/java/gregtech/api/objects/GT_UO_Fluid.java b/src/main/java/gregtech/api/objects/GT_UO_Fluid.java deleted file mode 100644 index 7f9898e02e..0000000000 --- a/src/main/java/gregtech/api/objects/GT_UO_Fluid.java +++ /dev/null @@ -1,69 +0,0 @@ -package gregtech.api.objects; - -import static gregtech.common.GT_UndergroundOil.DIVIDER; - -import java.util.Random; - -import net.minecraftforge.common.config.ConfigCategory; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; - -public class GT_UO_Fluid { - - public String Registry = "null"; - public int MaxAmount = 0; - public int MinAmount = 0; - public int Chance = 0; - public int DecreasePerOperationAmount = 5; - - public GT_UO_Fluid(ConfigCategory aConfigCategory) { // TODO CONFIGURE - if (aConfigCategory.containsKey("Registry")) { - aConfigCategory.get("Registry").comment = "Fluid registry name"; - Registry = aConfigCategory.get("Registry") - .getString(); - } - if (aConfigCategory.containsKey("MaxAmount")) { - aConfigCategory - .get("MaxAmount").comment = "Max amount generation (per operation, sets the VeinData) 80000 MAX"; - MaxAmount = aConfigCategory.get("MaxAmount") - .getInt(0); - } - if (aConfigCategory.containsKey("MinAmount")) { - aConfigCategory.get("MinAmount").comment = "Min amount generation (per operation, sets the VeinData) 0 MIN"; - MinAmount = aConfigCategory.get("MinAmount") - .getInt(0); - } - if (aConfigCategory.containsKey("Chance")) { - aConfigCategory - .get("Chance").comment = "Chance generating (weighted chance!, there will be a fluid in chunk always!)"; - Chance = aConfigCategory.get("Chance") - .getInt(0); - } - if (aConfigCategory.containsKey("DecreasePerOperationAmount")) { - aConfigCategory.get( - "DecreasePerOperationAmount").comment = "Decrease per operation (actual fluid gained works like (Litre)VeinData/5000)"; - DecreasePerOperationAmount = aConfigCategory.get("DecreasePerOperationAmount") - .getInt(5); - } - // GT_FML_LOGGER.info("GT UO "+aConfigCategory.getName()+" Fluid:"+Registry+" Max:"+MaxAmount+" - // Min:"+MinAmount+" Chance:"+Chance); - } - - public Fluid getFluid() { - try { - return FluidRegistry.getFluid(this.Registry); - } catch (Exception e) { - return null; - } - } - - public int getRandomAmount(Random aRandom) { // generates some random ass number that correlates to extraction - // speeds - int smax = (int) Math.floor(Math.pow(MaxAmount * 100.d * DIVIDER, 0.2d)); // use scaled max and min values for - // the randomness to make high values - // more rare. - double smin = Math.pow(MinAmount * 100.d * DIVIDER, 0.2d); - double samount = Math.max(smin, aRandom.nextInt(smax) + aRandom.nextDouble()); - return (int) (Math.pow(samount, 5) / 100); // reverses the computation above - } -} diff --git a/src/main/java/gregtech/api/objects/ItemData.java b/src/main/java/gregtech/api/objects/ItemData.java index 779e45ac8b..071b09a55f 100644 --- a/src/main/java/gregtech/api/objects/ItemData.java +++ b/src/main/java/gregtech/api/objects/ItemData.java @@ -13,7 +13,7 @@ public class ItemData { private static final MaterialStack[] EMPTY_MATERIALSTACK_ARRAY = new MaterialStack[0]; - public final List mExtraData = new GT_ArrayList<>(false, 1); + public final List mExtraData = new GTArrayList<>(false, 1); public final OrePrefixes mPrefix; public final MaterialStack mMaterial; public final MaterialStack[] mByProducts; diff --git a/src/main/java/gregtech/api/objects/MaterialStack.java b/src/main/java/gregtech/api/objects/MaterialStack.java index 0a433e0d99..742c210901 100644 --- a/src/main/java/gregtech/api/objects/MaterialStack.java +++ b/src/main/java/gregtech/api/objects/MaterialStack.java @@ -1,7 +1,7 @@ package gregtech.api.objects; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class MaterialStack implements Cloneable { @@ -44,7 +44,7 @@ public class MaterialStack implements Cloneable { public String toString(boolean single) { String temp1 = "", temp2 = mMaterial.getToolTip(true), temp3 = "", temp4 = ""; if (mAmount > 1) { - temp4 = GT_Utility.toSubscript(mAmount); + temp4 = GTUtility.toSubscript(mAmount); } if ((!single || mAmount > 1) && isMaterialListComplex(this)) { temp1 = "("; diff --git a/src/main/java/gregtech/api/objects/overclockdescriber/EUNoOverclockDescriber.java b/src/main/java/gregtech/api/objects/overclockdescriber/EUNoOverclockDescriber.java index 1e29e2d812..6f73b5467a 100644 --- a/src/main/java/gregtech/api/objects/overclockdescriber/EUNoOverclockDescriber.java +++ b/src/main/java/gregtech/api/objects/overclockdescriber/EUNoOverclockDescriber.java @@ -1,13 +1,13 @@ package gregtech.api.objects.overclockdescriber; -import static gregtech.api.util.GT_Utility.trans; +import static gregtech.api.util.GTUtility.trans; import javax.annotation.ParametersAreNonnullByDefault; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.api.util.OverclockCalculator; import gregtech.nei.RecipeDisplayInfo; @ParametersAreNonnullByDefault @@ -28,13 +28,13 @@ public class EUNoOverclockDescriber extends OverclockDescriber { } @Override - public GT_OverclockCalculator createCalculator(GT_OverclockCalculator template, GT_Recipe recipe) { - return GT_OverclockCalculator.ofNoOverclock(recipe); + public OverclockCalculator createCalculator(OverclockCalculator template, GTRecipe recipe) { + return OverclockCalculator.ofNoOverclock(recipe); } @Override public String getTierString() { - return GT_Utility.getColoredTierNameFromTier(tier); + return GTUtility.getColoredTierNameFromTier(tier); } @Override @@ -60,48 +60,48 @@ public class EUNoOverclockDescriber extends OverclockDescriber { } } - protected String getTotalPowerString(GT_OverclockCalculator calculator) { - return GT_Utility.formatNumbers(calculator.getConsumption() * calculator.getDuration()) + " EU"; + protected String getTotalPowerString(OverclockCalculator calculator) { + return GTUtility.formatNumbers(calculator.getConsumption() * calculator.getDuration()) + " EU"; } /** * @return If amperage should be shown on NEI. */ - protected boolean shouldShowAmperage(GT_OverclockCalculator calculator) { + protected boolean shouldShowAmperage(OverclockCalculator calculator) { return amperage != 1; } /** * @return Whole EU/t usage, without tier display. */ - protected String getEUtWithoutTier(GT_OverclockCalculator calculator) { - return GT_Utility.formatNumbers(calculator.getConsumption()) + " EU/t"; + protected String getEUtWithoutTier(OverclockCalculator calculator) { + return GTUtility.formatNumbers(calculator.getConsumption()) + " EU/t"; } /** * @return Whole EU/t usage, with tier display. */ - protected String getEUtWithTier(GT_OverclockCalculator calculator) { - return getEUtWithoutTier(calculator) + GT_Utility.getTierNameWithParentheses(calculator.getConsumption()); + protected String getEUtWithTier(OverclockCalculator calculator) { + return getEUtWithoutTier(calculator) + GTUtility.getTierNameWithParentheses(calculator.getConsumption()); } /** * @return Whole EU/t usage. Also displays voltage tier if it should be shown. */ - protected String getEUtDisplay(GT_OverclockCalculator calculator) { + protected String getEUtDisplay(OverclockCalculator calculator) { return shouldShowAmperage(calculator) ? getEUtWithoutTier(calculator) : getEUtWithTier(calculator); } /** * @return EU/t usage, divided by amperage. With tier display. */ - protected String getVoltageString(GT_OverclockCalculator calculator) { + protected String getVoltageString(OverclockCalculator calculator) { long voltage = computeVoltageForEURate(calculator.getConsumption()); - return GT_Utility.formatNumbers(voltage) + " EU/t" + GT_Utility.getTierNameWithParentheses(voltage); + return GTUtility.formatNumbers(voltage) + " EU/t" + GTUtility.getTierNameWithParentheses(voltage); } - protected String getAmperageString(GT_OverclockCalculator calculator) { - return GT_Utility.formatNumbers(amperage); + protected String getAmperageString(OverclockCalculator calculator) { + return GTUtility.formatNumbers(amperage); } protected long computeVoltageForEURate(long euPerTick) { diff --git a/src/main/java/gregtech/api/objects/overclockdescriber/EUOverclockDescriber.java b/src/main/java/gregtech/api/objects/overclockdescriber/EUOverclockDescriber.java index 9d53711515..42b459e874 100644 --- a/src/main/java/gregtech/api/objects/overclockdescriber/EUOverclockDescriber.java +++ b/src/main/java/gregtech/api/objects/overclockdescriber/EUOverclockDescriber.java @@ -1,17 +1,17 @@ package gregtech.api.objects.overclockdescriber; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.util.GT_Utility.trans; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.util.GTUtility.trans; import javax.annotation.ParametersAreNonnullByDefault; import com.google.common.primitives.Ints; -import gregtech.GT_Mod; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.GTMod; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.api.util.OverclockCalculator; import gregtech.nei.RecipeDisplayInfo; @ParametersAreNonnullByDefault @@ -23,7 +23,7 @@ public class EUOverclockDescriber extends EUNoOverclockDescriber { } @Override - public GT_OverclockCalculator createCalculator(GT_OverclockCalculator template, GT_Recipe recipe) { + public OverclockCalculator createCalculator(OverclockCalculator template, GTRecipe recipe) { return template.setEUt(Ints.saturatedCast(V[tier] * amperage)); } @@ -38,9 +38,9 @@ public class EUOverclockDescriber extends EUNoOverclockDescriber { if (shouldShowAmperage(recipeInfo.calculator)) { recipeInfo.drawText(trans("154", "Voltage: ") + getVoltageString(recipeInfo.calculator)); } - if (GT_Mod.gregtechproxy.mNEIOriginalVoltage) { + if (GTMod.gregtechproxy.mNEIOriginalVoltage) { EUNoOverclockDescriber originalPower = new EUNoOverclockDescriber(tier, amperage); - GT_OverclockCalculator originalPowerCalculator = GT_OverclockCalculator.ofNoOverclock(recipeInfo.recipe) + OverclockCalculator originalPowerCalculator = OverclockCalculator.ofNoOverclock(recipeInfo.recipe) .calculate(); recipeInfo .drawText(trans("275", "Original usage: ") + originalPower.getEUtDisplay(originalPowerCalculator)); @@ -51,30 +51,30 @@ public class EUOverclockDescriber extends EUNoOverclockDescriber { } @Override - protected String getEUtWithoutTier(GT_OverclockCalculator calculator) { + protected String getEUtWithoutTier(OverclockCalculator calculator) { return decorateWithOverclockLabel(super.getEUtWithoutTier(calculator), calculator); } @Override - protected String getEUtWithTier(GT_OverclockCalculator calculator) { - return this.getEUtWithoutTier(calculator) + GT_Utility.getTierNameWithParentheses(calculator.getConsumption()); + protected String getEUtWithTier(OverclockCalculator calculator) { + return this.getEUtWithoutTier(calculator) + GTUtility.getTierNameWithParentheses(calculator.getConsumption()); } @Override - protected String getVoltageString(GT_OverclockCalculator calculator) { + protected String getVoltageString(OverclockCalculator calculator) { long voltage = computeVoltageForEURate(calculator.getConsumption()); - return decorateWithOverclockLabel(GT_Utility.formatNumbers(voltage) + " EU/t", calculator) - + GT_Utility.getTierNameWithParentheses(voltage); + return decorateWithOverclockLabel(GTUtility.formatNumbers(voltage) + " EU/t", calculator) + + GTUtility.getTierNameWithParentheses(voltage); } - protected String decorateWithOverclockLabel(String s, GT_OverclockCalculator calculator) { + protected String decorateWithOverclockLabel(String s, OverclockCalculator calculator) { if (wasOverclocked(calculator)) { s += " (OC)"; } return s; } - protected boolean wasOverclocked(GT_OverclockCalculator calculator) { + protected boolean wasOverclocked(OverclockCalculator calculator) { return calculator.getPerformedOverclocks() > 0; } } diff --git a/src/main/java/gregtech/api/objects/overclockdescriber/FusionOverclockDescriber.java b/src/main/java/gregtech/api/objects/overclockdescriber/FusionOverclockDescriber.java index b570ebcab5..019af073f0 100644 --- a/src/main/java/gregtech/api/objects/overclockdescriber/FusionOverclockDescriber.java +++ b/src/main/java/gregtech/api/objects/overclockdescriber/FusionOverclockDescriber.java @@ -4,11 +4,11 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.util.EnumChatFormatting; -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.api.util.OverclockCalculator; import gregtech.nei.formatter.FusionSpecialValueFormatter; @ParametersAreNonnullByDefault @@ -23,7 +23,7 @@ public class FusionOverclockDescriber extends EUOverclockDescriber { } @Override - public GT_OverclockCalculator createCalculator(GT_OverclockCalculator template, GT_Recipe recipe) { + public OverclockCalculator createCalculator(OverclockCalculator template, GTRecipe recipe) { return super.createCalculator(template, recipe) .limitOverclockCount(overclock(recipe.mSpecialValue, recipe.mEUt)) .setEUtIncreasePerOC(getEUtIncreasePerOC()) @@ -40,12 +40,12 @@ public class FusionOverclockDescriber extends EUOverclockDescriber { @Override public String getTierString() { - return GT_Values.TIER_COLORS[tier] + "MK " + getFusionTier() + EnumChatFormatting.RESET; + return GTValues.TIER_COLORS[tier] + "MK " + getFusionTier() + EnumChatFormatting.RESET; } @Override - public boolean canHandle(GT_Recipe recipe) { - byte tier = GT_Utility.getTier(recipe.mEUt); + public boolean canHandle(GTRecipe recipe) { + byte tier = GTUtility.getTier(recipe.mEUt); if (this.tier < tier) { return false; } diff --git a/src/main/java/gregtech/api/objects/overclockdescriber/OverclockDescriber.java b/src/main/java/gregtech/api/objects/overclockdescriber/OverclockDescriber.java index 0b253c95fa..9f995e4758 100644 --- a/src/main/java/gregtech/api/objects/overclockdescriber/OverclockDescriber.java +++ b/src/main/java/gregtech/api/objects/overclockdescriber/OverclockDescriber.java @@ -1,14 +1,14 @@ package gregtech.api.objects.overclockdescriber; -import static gregtech.api.util.GT_Utility.trans; +import static gregtech.api.util.GTUtility.trans; import javax.annotation.ParametersAreNonnullByDefault; -import gregtech.GT_Mod; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.GTMod; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.api.util.OverclockCalculator; import gregtech.nei.RecipeDisplayInfo; /** @@ -45,12 +45,12 @@ public abstract class OverclockDescriber { /** * Creates overclock calculator from given template. This template should be used instead of building from the * ground to avoid issues coming from different caller using different templates, but it's not applicable when using - * {@link GT_OverclockCalculator#ofNoOverclock(GT_Recipe)}. + * {@link OverclockCalculator#ofNoOverclock(GTRecipe)}. * * @param template Calculator that can be used as template. Recipe EU/t and duration are already set. * @param recipe Recipe to calculate. */ - public abstract GT_OverclockCalculator createCalculator(GT_OverclockCalculator template, GT_Recipe recipe); + public abstract OverclockCalculator createCalculator(OverclockCalculator template, GTRecipe recipe); /** * Draws info about the energy this object can handle on NEI recipe GUI. @@ -61,7 +61,7 @@ public abstract class OverclockDescriber { if (getDurationTicks(recipeInfo.calculator) <= 0) return; String textToDraw = trans("158", "Time: "); - if (GT_Mod.gregtechproxy.mNEIRecipeSecondMode) { + if (GTMod.gregtechproxy.mNEIRecipeSecondMode) { textToDraw += getDurationStringSeconds(recipeInfo.calculator); if (getDurationSeconds(recipeInfo.calculator) <= 1.0d) { textToDraw += String.format(" (%s)", getDurationStringTicks(recipeInfo.calculator)); @@ -81,26 +81,26 @@ public abstract class OverclockDescriber { * * @return If this object can handle the supplied recipe */ - public boolean canHandle(GT_Recipe recipe) { - byte tier = GT_Utility.getTier(recipe.mEUt); + public boolean canHandle(GTRecipe recipe) { + byte tier = GTUtility.getTier(recipe.mEUt); return this.tier >= tier; } - private int getDurationTicks(GT_OverclockCalculator calculator) { + private int getDurationTicks(OverclockCalculator calculator) { return calculator.getDuration(); } - private double getDurationSeconds(GT_OverclockCalculator calculator) { + private double getDurationSeconds(OverclockCalculator calculator) { return 0.05d * getDurationTicks(calculator); } - private String getDurationStringSeconds(GT_OverclockCalculator calculator) { - return GT_Utility.formatNumbers(getDurationSeconds(calculator)) + GT_Utility.trans("161", " secs"); + private String getDurationStringSeconds(OverclockCalculator calculator) { + return GTUtility.formatNumbers(getDurationSeconds(calculator)) + GTUtility.trans("161", " secs"); } - private String getDurationStringTicks(GT_OverclockCalculator calculator) { - String ticksString = getDurationTicks(calculator) == 1 ? GT_Utility.trans("209.1", " tick") - : GT_Utility.trans("209", " ticks"); - return GT_Utility.formatNumbers(getDurationTicks(calculator)) + ticksString; + private String getDurationStringTicks(OverclockCalculator calculator) { + String ticksString = getDurationTicks(calculator) == 1 ? GTUtility.trans("209.1", " tick") + : GTUtility.trans("209", " ticks"); + return GTUtility.formatNumbers(getDurationTicks(calculator)) + ticksString; } } diff --git a/src/main/java/gregtech/api/objects/overclockdescriber/SteamOverclockDescriber.java b/src/main/java/gregtech/api/objects/overclockdescriber/SteamOverclockDescriber.java index 5da64d4028..3a2da01b08 100644 --- a/src/main/java/gregtech/api/objects/overclockdescriber/SteamOverclockDescriber.java +++ b/src/main/java/gregtech/api/objects/overclockdescriber/SteamOverclockDescriber.java @@ -1,16 +1,16 @@ package gregtech.api.objects.overclockdescriber; -import static gregtech.api.util.GT_Utility.trans; +import static gregtech.api.util.GTUtility.trans; import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.util.StatCollector; import gregtech.api.enums.SteamVariant; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.api.util.OverclockCalculator; import gregtech.nei.RecipeDisplayInfo; @ParametersAreNonnullByDefault @@ -34,8 +34,8 @@ public class SteamOverclockDescriber extends OverclockDescriber { } @Override - public GT_OverclockCalculator createCalculator(GT_OverclockCalculator template, GT_Recipe recipe) { - return GT_OverclockCalculator.ofNoOverclock(recipe) + public OverclockCalculator createCalculator(OverclockCalculator template, GTRecipe recipe) { + return OverclockCalculator.ofNoOverclock(recipe) .setEUtDiscount(euPerTickMultiplier) .setSpeedBoost(durationMultiplier); } @@ -48,13 +48,13 @@ public class SteamOverclockDescriber extends OverclockDescriber { recipeInfo.drawText(trans("153", "Usage: ") + getSteamUsageString(recipeInfo.calculator)); } - private String getTotalPowerString(GT_OverclockCalculator calculator) { - return GT_Utility.formatNumbers(convertEUToSteam(calculator.getConsumption() * calculator.getDuration())) + private String getTotalPowerString(OverclockCalculator calculator) { + return GTUtility.formatNumbers(convertEUToSteam(calculator.getConsumption() * calculator.getDuration())) + " Steam"; } - private String getSteamUsageString(GT_OverclockCalculator calculator) { - return GT_Utility.formatNumbers(20 * convertEUToSteam(calculator.getConsumption())) + " L/s Steam"; + private String getSteamUsageString(OverclockCalculator calculator) { + return GTUtility.formatNumbers(20 * convertEUToSteam(calculator.getConsumption())) + " L/s Steam"; } private static long convertEUToSteam(long eu) { diff --git a/src/main/java/gregtech/api/recipe/BasicUIPropertiesBuilder.java b/src/main/java/gregtech/api/recipe/BasicUIPropertiesBuilder.java index 7be2c94b23..adb2ee40e8 100644 --- a/src/main/java/gregtech/api/recipe/BasicUIPropertiesBuilder.java +++ b/src/main/java/gregtech/api/recipe/BasicUIPropertiesBuilder.java @@ -20,7 +20,7 @@ import com.gtnewhorizons.modularui.api.math.Size; import com.gtnewhorizons.modularui.common.widget.ProgressBar; import gregtech.api.gui.modularui.FallbackableSteamTexture; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.gui.modularui.SteamTexture; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.common.gui.modularui.UIHelper; @@ -59,7 +59,7 @@ public final class BasicUIPropertiesBuilder { private final ImmutableList.Builder>> specialTexturesSteam = ImmutableList .builder(); - private IDrawable logo = GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT; + private IDrawable logo = GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT; private Size logoSize = new Size(17, 17); private Pos2d logoPos = new Pos2d(152, 63); diff --git a/src/main/java/gregtech/api/recipe/FindRecipeQuery.java b/src/main/java/gregtech/api/recipe/FindRecipeQuery.java index 77c0648688..16702b6be6 100644 --- a/src/main/java/gregtech/api/recipe/FindRecipeQuery.java +++ b/src/main/java/gregtech/api/recipe/FindRecipeQuery.java @@ -9,7 +9,7 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; // spotless:off spotless likes formatting @code to @code @@ -20,7 +20,7 @@ import gregtech.api.util.MethodsReturnNonnullByDefault; * *
  * {@code
- *     GT_Recipe recipe = recipeMap.findRecipeQuery()
+ *     GTRecipe recipe = recipeMap.findRecipeQuery()
  *         .items(inputItems)
  *         .fluids(inputFluids)
  *         .find();
@@ -33,7 +33,7 @@ import gregtech.api.util.MethodsReturnNonnullByDefault;
 @MethodsReturnNonnullByDefault
 public final class FindRecipeQuery {
 
-    private static final Predicate ALWAYS = r -> true;
+    private static final Predicate ALWAYS = r -> true;
 
     private final RecipeMap recipeMap;
 
@@ -43,10 +43,10 @@ public final class FindRecipeQuery {
     private FluidStack[] fluids;
     @Nullable
     private ItemStack specialSlot;
-    private Predicate filter = ALWAYS;
+    private Predicate filter = ALWAYS;
     private long voltage = Integer.MAX_VALUE;
     @Nullable
-    private GT_Recipe cachedRecipe;
+    private GTRecipe cachedRecipe;
     private boolean notUnificated;
     private boolean dontCheckStackSizes;
     private boolean forCollisionCheck;
@@ -61,7 +61,7 @@ public final class FindRecipeQuery {
      * @return The first matched recipe, or null if not found.
      */
     @Nullable
-    public GT_Recipe find() {
+    public GTRecipe find() {
         return findAll().findFirst()
             .orElse(null);
     }
@@ -69,7 +69,7 @@ public final class FindRecipeQuery {
     /**
      * @return All the matched recipes in the form of Stream.
      */
-    public Stream findAll() {
+    public Stream findAll() {
         if (items == null) {
             items = new ItemStack[0];
         }
@@ -135,7 +135,7 @@ public final class FindRecipeQuery {
      * @param filter Matched recipe will be tested by this function. If it returns false, the query will attempt to
      *               find next recipe.
      */
-    public FindRecipeQuery filter(Predicate filter) {
+    public FindRecipeQuery filter(Predicate filter) {
         this.filter = filter;
         return this;
     }
@@ -152,7 +152,7 @@ public final class FindRecipeQuery {
     /**
      * @param cachedRecipe If this is not null, the query tests it before all other recipes.
      */
-    public FindRecipeQuery cachedRecipe(@Nullable GT_Recipe cachedRecipe) {
+    public FindRecipeQuery cachedRecipe(@Nullable GTRecipe cachedRecipe) {
         this.cachedRecipe = cachedRecipe;
         return this;
     }
diff --git a/src/main/java/gregtech/api/recipe/NEIRecipeProperties.java b/src/main/java/gregtech/api/recipe/NEIRecipeProperties.java
index 2ba49f5da1..1b62ca0390 100644
--- a/src/main/java/gregtech/api/recipe/NEIRecipeProperties.java
+++ b/src/main/java/gregtech/api/recipe/NEIRecipeProperties.java
@@ -12,7 +12,7 @@ import com.gtnewhorizons.modularui.api.math.Size;
 import codechicken.nei.recipe.HandlerInfo;
 import gregtech.api.objects.overclockdescriber.OverclockDescriber;
 import gregtech.api.util.FieldsAreNonnullByDefault;
-import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GTRecipe;
 import gregtech.api.util.MethodsReturnNonnullByDefault;
 import gregtech.nei.formatter.INEISpecialInfoFormatter;
 
@@ -49,7 +49,7 @@ public final class NEIRecipeProperties {
     public final Pos2d recipeBackgroundOffset;
 
     /**
-     * Formats special description for the recipe, mainly {@link gregtech.api.util.GT_Recipe#mSpecialValue}.
+     * Formats special description for the recipe, mainly {@link GTRecipe#mSpecialValue}.
      */
     public final INEISpecialInfoFormatter neiSpecialInfoFormatter;
 
@@ -68,14 +68,14 @@ public final class NEIRecipeProperties {
     public final boolean renderRealStackSizes;
 
     /**
-     * Comparator for NEI recipe sort. {@link GT_Recipe#compareTo(GT_Recipe)} by default.
+     * Comparator for NEI recipe sort. {@link GTRecipe#compareTo(GTRecipe)} by default.
      */
-    public final Comparator comparator;
+    public final Comparator comparator;
 
     NEIRecipeProperties(boolean registerNEI, @Nullable UnaryOperator handlerInfoCreator,
         Size recipeBackgroundSize, Pos2d recipeBackgroundOffset, INEISpecialInfoFormatter neiSpecialInfoFormatter,
         boolean unificateOutput, boolean useCustomFilter, boolean renderRealStackSizes,
-        Comparator comparator) {
+        Comparator comparator) {
         this.registerNEI = registerNEI;
         this.handlerInfoCreator = handlerInfoCreator;
         this.recipeBackgroundOffset = recipeBackgroundOffset;
diff --git a/src/main/java/gregtech/api/recipe/NEIRecipePropertiesBuilder.java b/src/main/java/gregtech/api/recipe/NEIRecipePropertiesBuilder.java
index 050a1c4920..3b47e9ce13 100644
--- a/src/main/java/gregtech/api/recipe/NEIRecipePropertiesBuilder.java
+++ b/src/main/java/gregtech/api/recipe/NEIRecipePropertiesBuilder.java
@@ -10,7 +10,7 @@ import com.gtnewhorizons.modularui.api.math.Pos2d;
 import com.gtnewhorizons.modularui.api.math.Size;
 
 import codechicken.nei.recipe.HandlerInfo;
-import gregtech.api.util.GT_Recipe;
+import gregtech.api.util.GTRecipe;
 import gregtech.api.util.MethodsReturnNonnullByDefault;
 import gregtech.nei.formatter.DefaultSpecialValueFormatter;
 import gregtech.nei.formatter.INEISpecialInfoFormatter;
@@ -36,7 +36,7 @@ public final class NEIRecipePropertiesBuilder {
     private boolean useCustomFilter;
     private boolean renderRealStackSizes = true;
 
-    private Comparator comparator = GT_Recipe::compareTo;
+    private Comparator comparator = GTRecipe::compareTo;
 
     NEIRecipePropertiesBuilder() {}
 
@@ -93,7 +93,7 @@ public final class NEIRecipePropertiesBuilder {
         return this;
     }
 
-    public NEIRecipePropertiesBuilder recipeComparator(Comparator comparator) {
+    public NEIRecipePropertiesBuilder recipeComparator(Comparator comparator) {
         this.comparator = comparator;
         return this;
     }
diff --git a/src/main/java/gregtech/api/recipe/RecipeMap.java b/src/main/java/gregtech/api/recipe/RecipeMap.java
index 46b32d18dd..669c7de2cf 100644
--- a/src/main/java/gregtech/api/recipe/RecipeMap.java
+++ b/src/main/java/gregtech/api/recipe/RecipeMap.java
@@ -1,6 +1,6 @@
 package gregtech.api.recipe;
 
-import static gregtech.api.util.GT_RecipeBuilder.ENABLE_COLLISION_CHECK;
+import static gregtech.api.util.GTRecipeBuilder.ENABLE_COLLISION_CHECK;
 
 import java.util.Collection;
 import java.util.HashMap;
@@ -23,8 +23,8 @@ import org.jetbrains.annotations.Unmodifiable;
 import gregtech.api.interfaces.IRecipeMap;
 import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords;
 import gregtech.api.util.FieldsAreNonnullByDefault;
-import gregtech.api.util.GT_Recipe;
-import gregtech.api.util.GT_RecipeBuilder;
+import gregtech.api.util.GTRecipe;
+import gregtech.api.util.GTRecipeBuilder;
 import gregtech.api.util.MethodsReturnNonnullByDefault;
 
 /**
@@ -82,7 +82,7 @@ public final class RecipeMap implements IRecipeMap {
      * @return All the recipes belonging to this recipemap.
      */
     @Unmodifiable
-    public Collection getAllRecipes() {
+    public Collection getAllRecipes() {
         return backend.getAllRecipes();
     }
 
@@ -116,13 +116,13 @@ public final class RecipeMap implements IRecipeMap {
     // region add recipe
     @Deprecated
     @Nullable
-    public GT_Recipe addRecipe(GT_Recipe aRecipe) {
+    public GTRecipe addRecipe(GTRecipe aRecipe) {
         return addRecipe(aRecipe, true, false, false);
     }
 
     @Deprecated
     @Nullable
-    public GT_Recipe addRecipe(GT_Recipe aRecipe, boolean aCheckForCollisions, boolean aFakeRecipe, boolean aHidden) {
+    public GTRecipe addRecipe(GTRecipe aRecipe, boolean aCheckForCollisions, boolean aFakeRecipe, boolean aHidden) {
         aRecipe.mHidden = aHidden;
         aRecipe.mFakeRecipe = aFakeRecipe;
         if (aRecipe.mFluidInputs.length < backend.properties.minFluidInputs
@@ -137,13 +137,13 @@ public final class RecipeMap implements IRecipeMap {
      */
     @Deprecated
     @Nullable
-    public GT_Recipe addFakeRecipe(boolean aCheckForCollisions, @Nullable ItemStack[] aInputs,
+    public GTRecipe addFakeRecipe(boolean aCheckForCollisions, @Nullable ItemStack[] aInputs,
         @Nullable ItemStack[] aOutputs, @Nullable Object aSpecial, @Nullable FluidStack[] aFluidInputs,
         @Nullable FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue, ItemStack[][] aAlt,
         boolean hidden) {
         return addFakeRecipe(
             aCheckForCollisions,
-            new GT_Recipe.GT_Recipe_WithAlt(
+            new GTRecipe.GTRecipe_WithAlt(
                 false,
                 aInputs,
                 aOutputs,
@@ -164,23 +164,23 @@ public final class RecipeMap implements IRecipeMap {
      */
     @Deprecated
     @Nullable
-    public GT_Recipe addFakeRecipe(boolean aCheckForCollisions, GT_Recipe aRecipe) {
+    public GTRecipe addFakeRecipe(boolean aCheckForCollisions, GTRecipe aRecipe) {
         return addRecipe(aRecipe, aCheckForCollisions, true, false);
     }
 
     @Deprecated
     @Nullable
-    public GT_Recipe addFakeRecipe(boolean aCheckForCollisions, GT_Recipe aRecipe, boolean hidden) {
+    public GTRecipe addFakeRecipe(boolean aCheckForCollisions, GTRecipe aRecipe, boolean hidden) {
         return addRecipe(aRecipe, aCheckForCollisions, true, hidden);
     }
 
     @Nonnull
     @Override
-    public Collection doAdd(GT_RecipeBuilder builder) {
+    public Collection doAdd(GTRecipeBuilder builder) {
         return backend.doAdd(builder);
     }
 
-    public GT_Recipe add(GT_Recipe aRecipe) {
+    public GTRecipe add(GTRecipe aRecipe) {
         return backend.compileRecipe(aRecipe);
     }
 
@@ -217,26 +217,26 @@ public final class RecipeMap implements IRecipeMap {
     }
 
     @Nullable
-    public GT_Recipe findRecipe(@Nullable IHasWorldObjectAndCoords aTileEntity, boolean aNotUnificated, long aVoltage,
+    public GTRecipe findRecipe(@Nullable IHasWorldObjectAndCoords aTileEntity, boolean aNotUnificated, long aVoltage,
         @Nullable FluidStack[] aFluids, @Nullable ItemStack... aInputs) {
         return findRecipe(aTileEntity, null, aNotUnificated, aVoltage, aFluids, null, aInputs);
     }
 
     @Nullable
-    public GT_Recipe findRecipe(@Nullable IHasWorldObjectAndCoords aTileEntity, boolean aNotUnificated,
+    public GTRecipe findRecipe(@Nullable IHasWorldObjectAndCoords aTileEntity, boolean aNotUnificated,
         boolean aDontCheckStackSizes, long aVoltage, @Nullable FluidStack[] aFluids, @Nullable ItemStack... aInputs) {
         return findRecipe(aTileEntity, null, aNotUnificated, aDontCheckStackSizes, aVoltage, aFluids, null, aInputs);
     }
 
     @Nullable
-    public GT_Recipe findRecipe(@Nullable IHasWorldObjectAndCoords aTileEntity, @Nullable GT_Recipe aRecipe,
+    public GTRecipe findRecipe(@Nullable IHasWorldObjectAndCoords aTileEntity, @Nullable GTRecipe aRecipe,
         boolean aNotUnificated, long aVoltage, @Nullable FluidStack[] aFluids, @Nullable ItemStack aSpecialSlot,
         @Nullable ItemStack... aInputs) {
         return findRecipe(aTileEntity, aRecipe, aNotUnificated, false, aVoltage, aFluids, aSpecialSlot, aInputs);
     }
 
     @Nullable
-    public GT_Recipe findRecipe(@Nullable IHasWorldObjectAndCoords aTileEntity, @Nullable GT_Recipe aRecipe,
+    public GTRecipe findRecipe(@Nullable IHasWorldObjectAndCoords aTileEntity, @Nullable GTRecipe aRecipe,
         boolean aNotUnificated, boolean aDontCheckStackSizes, long aVoltage, @Nullable FluidStack[] aFluids,
         @Nullable ItemStack aSpecialSlot, @Nullable ItemStack... aInputs) {
         return findRecipeQuery().items(aInputs != null ? aInputs : new ItemStack[0])
diff --git a/src/main/java/gregtech/api/recipe/RecipeMapBackend.java b/src/main/java/gregtech/api/recipe/RecipeMapBackend.java
index 8ba0895a7f..f78e367adf 100644
--- a/src/main/java/gregtech/api/recipe/RecipeMapBackend.java
+++ b/src/main/java/gregtech/api/recipe/RecipeMapBackend.java
@@ -1,9 +1,9 @@
 package gregtech.api.recipe;
 
-import static gregtech.api.util.GT_RecipeBuilder.ENABLE_COLLISION_CHECK;
-import static gregtech.api.util.GT_RecipeBuilder.handleInvalidRecipe;
-import static gregtech.api.util.GT_RecipeBuilder.handleRecipeCollision;
-import static gregtech.api.util.GT_Utility.areStacksEqualOrNull;
+import static gregtech.api.util.GTRecipeBuilder.ENABLE_COLLISION_CHECK;
+import static gregtech.api.util.GTRecipeBuilder.handleInvalidRecipe;
+import static gregtech.api.util.GTRecipeBuilder.handleRecipeCollision;
+import static gregtech.api.util.GTUtility.areStacksEqualOrNull;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -28,13 +28,13 @@ import org.jetbrains.annotations.Unmodifiable;
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.SetMultimap;
 
-import gregtech.api.GregTech_API;
+import gregtech.api.GregTechAPI;
 import gregtech.api.interfaces.IRecipeMap;
-import gregtech.api.objects.GT_ItemStack;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Recipe;
-import gregtech.api.util.GT_RecipeBuilder;
-import gregtech.api.util.GT_StreamUtil;
+import gregtech.api.objects.GTItemStack;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipe;
+import gregtech.api.util.GTRecipeBuilder;
+import gregtech.api.util.GTStreamUtil;
 import gregtech.api.util.MethodsReturnNonnullByDefault;
 
 /**
@@ -52,16 +52,16 @@ public class RecipeMapBackend {
     /**
      * Recipe index based on items.
      */
-    private final SetMultimap itemIndex = HashMultimap.create();
+    private final SetMultimap itemIndex = HashMultimap.create();
     /**
      * Recipe index based on fluids.
      */
-    private final SetMultimap fluidIndex = HashMultimap.create();
+    private final SetMultimap fluidIndex = HashMultimap.create();
 
     /**
      * All the recipes belonging to this backend, indexed by recipe category.
      */
-    private final Map> recipesByCategory = new HashMap<>();
+    private final Map> recipesByCategory = new HashMap<>();
 
     /**
      * List of recipemaps that also receive recipe addition from this backend.
@@ -75,7 +75,7 @@ public class RecipeMapBackend {
 
     public RecipeMapBackend(RecipeMapBackendPropertiesBuilder propertiesBuilder) {
         this.properties = propertiesBuilder.build();
-        GregTech_API.itemStackMultiMaps.add(itemIndex);
+        GregTechAPI.itemStackMultiMaps.add(itemIndex);
     }
 
     void setRecipeMap(RecipeMap recipeMap) {
@@ -94,14 +94,14 @@ public class RecipeMapBackend {
      *         use {@link #compileRecipe} to add / {@link #removeRecipes} to remove.
      */
     @Unmodifiable
-    public Collection getAllRecipes() {
+    public Collection getAllRecipes() {
         return Collections.unmodifiableCollection(allRecipes());
     }
 
     /**
      * @return Raw recipe list
      */
-    private Collection allRecipes() {
+    private Collection allRecipes() {
         return recipesByCategory.values()
             .stream()
             .flatMap(Collection::stream)
@@ -112,13 +112,13 @@ public class RecipeMapBackend {
      * @return All the recipes belonging to this backend, indexed by recipe category.
      */
     @Unmodifiable
-    public Collection getRecipesByCategory(RecipeCategory recipeCategory) {
+    public Collection getRecipesByCategory(RecipeCategory recipeCategory) {
         return Collections
             .unmodifiableCollection(recipesByCategory.getOrDefault(recipeCategory, Collections.emptyList()));
     }
 
     @Unmodifiable
-    public Map> getRecipeCategoryMap() {
+    public Map> getRecipeCategoryMap() {
         return Collections.unmodifiableMap(recipesByCategory);
     }
 
@@ -129,7 +129,7 @@ public class RecipeMapBackend {
      *
      * @return Supplied recipe.
      */
-    public GT_Recipe compileRecipe(GT_Recipe recipe) {
+    public GTRecipe compileRecipe(GTRecipe recipe) {
         if (recipe.getRecipeCategory() == null) {
             recipe.setRecipeCategory(recipeMap.getDefaultRecipeCategory());
         }
@@ -148,17 +148,17 @@ public class RecipeMapBackend {
     /**
      * Adds the supplied recipe to the item cache.
      */
-    protected GT_Recipe addToItemMap(GT_Recipe recipe) {
+    protected GTRecipe addToItemMap(GTRecipe recipe) {
         for (ItemStack item : recipe.mInputs) {
             if (item == null) continue;
-            itemIndex.put(new GT_ItemStack(item), recipe);
+            itemIndex.put(new GTItemStack(item), recipe);
         }
-        if (recipe instanceof GT_Recipe.GT_Recipe_WithAlt recipeWithAlt) {
+        if (recipe instanceof GTRecipe.GTRecipe_WithAlt recipeWithAlt) {
             for (ItemStack[] itemStacks : recipeWithAlt.mOreDictAlt) {
                 if (itemStacks == null) continue;
                 for (ItemStack item : itemStacks) {
                     if (item == null) continue;
-                    itemIndex.put(new GT_ItemStack(item), recipe);
+                    itemIndex.put(new GTItemStack(item), recipe);
                 }
             }
         }
@@ -168,10 +168,10 @@ public class RecipeMapBackend {
     /**
      * Builds recipe from supplied recipe builder and adds it.
      */
-    protected Collection doAdd(GT_RecipeBuilder builder) {
-        Iterable recipes = properties.recipeEmitter.apply(builder);
-        Collection ret = new ArrayList<>();
-        for (GT_Recipe recipe : recipes) {
+    protected Collection doAdd(GTRecipeBuilder builder) {
+        Iterable recipes = properties.recipeEmitter.apply(builder);
+        Collection ret = new ArrayList<>();
+        for (GTRecipe recipe : recipes) {
             if (recipe.mFluidInputs.length < properties.minFluidInputs
                 || recipe.mInputs.length < properties.minItemInputs) {
                 return Collections.emptyList();
@@ -199,7 +199,7 @@ public class RecipeMapBackend {
         return ret;
     }
 
-    private void handleCollision(GT_Recipe recipe) {
+    private void handleCollision(GTRecipe recipe) {
         StringBuilder errorInfo = new StringBuilder();
         boolean hasAnEntry = false;
         for (FluidStack fluid : recipe.mFluidInputs) {
@@ -241,11 +241,11 @@ public class RecipeMapBackend {
     /**
      * Removes supplied recipes from recipe list. Do not use unless absolute necessity!
      */
-    public void removeRecipes(Collection recipesToRemove) {
-        for (Collection recipes : recipesByCategory.values()) {
+    public void removeRecipes(Collection recipesToRemove) {
+        for (Collection recipes : recipesByCategory.values()) {
             recipes.removeAll(recipesToRemove);
         }
-        for (GT_ItemStack key : new HashMap<>(itemIndex.asMap()).keySet()) {
+        for (GTItemStack key : new HashMap<>(itemIndex.asMap()).keySet()) {
             itemIndex.get(key)
                 .removeAll(recipesToRemove);
         }
@@ -258,7 +258,7 @@ public class RecipeMapBackend {
     /**
      * Removes supplied recipe from recipe list. Do not use unless absolute necessity!
      */
-    public void removeRecipe(GT_Recipe recipe) {
+    public void removeRecipe(GTRecipe recipe) {
         removeRecipes(Collections.singleton(recipe));
     }
 
@@ -276,9 +276,9 @@ public class RecipeMapBackend {
      */
     public void reInit() {
         itemIndex.clear();
-        for (GT_Recipe recipe : allRecipes()) {
-            GT_OreDictUnificator.setStackArray(true, recipe.mInputs);
-            GT_OreDictUnificator.setStackArray(true, recipe.mOutputs);
+        for (GTRecipe recipe : allRecipes()) {
+            GTOreDictUnificator.setStackArray(true, recipe.mInputs);
+            GTOreDictUnificator.setStackArray(true, recipe.mOutputs);
             addToItemMap(recipe);
         }
     }
@@ -287,7 +287,7 @@ public class RecipeMapBackend {
      * @return If supplied item is a valid input for any of the recipes
      */
     public boolean containsInput(ItemStack item) {
-        return itemIndex.containsKey(new GT_ItemStack(item)) || itemIndex.containsKey(new GT_ItemStack(item, true));
+        return itemIndex.containsKey(new GTItemStack(item)) || itemIndex.containsKey(new GTItemStack(item, true));
     }
 
     /**
@@ -304,7 +304,7 @@ public class RecipeMapBackend {
      *
      * @return True if collision is found.
      */
-    boolean checkCollision(GT_Recipe recipe) {
+    boolean checkCollision(GTRecipe recipe) {
         return matchRecipeStream(recipe.mInputs, recipe.mFluidInputs, null, null, false, true, true).findAny()
             .isPresent();
     }
@@ -313,8 +313,8 @@ public class RecipeMapBackend {
      * Overwrites {@link #matchRecipeStream} method. Also override {@link #doesOverwriteFindRecipe} to make it work.
      */
     @Nullable
-    protected GT_Recipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot,
-        @Nullable GT_Recipe cachedRecipe) {
+    protected GTRecipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot,
+        @Nullable GTRecipe cachedRecipe) {
         return null;
     }
 
@@ -329,7 +329,7 @@ public class RecipeMapBackend {
      * Modifies successfully found recipe. Make sure not to mutate the found recipe but use copy!
      */
     @Nullable
-    protected GT_Recipe modifyFoundRecipe(GT_Recipe recipe, ItemStack[] items, FluidStack[] fluids,
+    protected GTRecipe modifyFoundRecipe(GTRecipe recipe, ItemStack[] items, FluidStack[] fluids,
         @Nullable ItemStack specialSlot) {
         return recipe;
     }
@@ -338,7 +338,7 @@ public class RecipeMapBackend {
      * Called when {@link #matchRecipeStream} cannot find recipe.
      */
     @Nullable
-    protected GT_Recipe findFallback(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) {
+    protected GTRecipe findFallback(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) {
         return null;
     }
 
@@ -357,11 +357,11 @@ public class RecipeMapBackend {
      * @param forCollisionCheck   If this method is called to check collision with already registered recipes.
      * @return Stream of matches recipes.
      */
-    Stream matchRecipeStream(ItemStack[] rawItems, FluidStack[] fluids, @Nullable ItemStack specialSlot,
-        @Nullable GT_Recipe cachedRecipe, boolean notUnificated, boolean dontCheckStackSizes,
+    Stream matchRecipeStream(ItemStack[] rawItems, FluidStack[] fluids, @Nullable ItemStack specialSlot,
+        @Nullable GTRecipe cachedRecipe, boolean notUnificated, boolean dontCheckStackSizes,
         boolean forCollisionCheck) {
         if (doesOverwriteFindRecipe()) {
-            return GT_StreamUtil.ofNullable(overwriteFindRecipe(rawItems, fluids, specialSlot, cachedRecipe));
+            return GTStreamUtil.ofNullable(overwriteFindRecipe(rawItems, fluids, specialSlot, cachedRecipe));
         }
 
         if (recipesByCategory.isEmpty()) {
@@ -393,22 +393,22 @@ public class RecipeMapBackend {
         ItemStack[] items;
         // Unification happens here in case the item input isn't already unificated.
         if (notUnificated) {
-            items = GT_OreDictUnificator.getStackArray(true, (Object[]) rawItems);
+            items = GTOreDictUnificator.getStackArray(true, (Object[]) rawItems);
         } else {
             items = rawItems;
         }
 
-        return Stream.>of(
+        return Stream.>of(
             // Check the recipe which has been used last time in order to not have to search for it again, if possible.
-            GT_StreamUtil.ofNullable(cachedRecipe)
+            GTStreamUtil.ofNullable(cachedRecipe)
                 .filter(recipe -> recipe.mCanBeBuffered)
                 .filter(recipe -> filterFindRecipe(recipe, items, fluids, specialSlot, dontCheckStackSizes))
                 .map(recipe -> modifyFoundRecipe(recipe, items, fluids, specialSlot))
                 .filter(Objects::nonNull),
             // Now look for the recipes inside the item index, but only when the recipes actually can have items inputs.
-            GT_StreamUtil.ofConditional(!itemIndex.isEmpty(), items)
+            GTStreamUtil.ofConditional(!itemIndex.isEmpty(), items)
                 .filter(Objects::nonNull)
-                .flatMap(item -> Stream.of(new GT_ItemStack(item), new GT_ItemStack(item, true)))
+                .flatMap(item -> Stream.of(new GTItemStack(item), new GTItemStack(item, true)))
                 .map(itemIndex::get)
                 .flatMap(Collection::stream)
                 .filter(recipe -> filterFindRecipe(recipe, items, fluids, specialSlot, dontCheckStackSizes))
@@ -416,7 +416,7 @@ public class RecipeMapBackend {
                 .filter(Objects::nonNull),
             // If the minimum amount of items required for the recipes is 0, then it could match to fluid-only recipes,
             // so check fluid index too.
-            GT_StreamUtil.ofConditional(properties.minItemInputs == 0, fluids)
+            GTStreamUtil.ofConditional(properties.minItemInputs == 0, fluids)
                 .filter(Objects::nonNull)
                 .map(
                     fluidStack -> fluidIndex.get(
@@ -428,7 +428,7 @@ public class RecipeMapBackend {
                 .filter(Objects::nonNull),
             // Lastly, find fallback.
             forCollisionCheck ? Stream.empty()
-                : GT_StreamUtil.ofSupplier(() -> findFallback(items, fluids, specialSlot))
+                : GTStreamUtil.ofSupplier(() -> findFallback(items, fluids, specialSlot))
                     .filter(Objects::nonNull))
             .flatMap(Function.identity());
     }
@@ -440,7 +440,7 @@ public class RecipeMapBackend {
      * 

* Note that this won't be called if {@link #doesOverwriteFindRecipe} is true. */ - protected boolean filterFindRecipe(GT_Recipe recipe, ItemStack[] items, FluidStack[] fluids, + protected boolean filterFindRecipe(GTRecipe recipe, ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot, boolean dontCheckStackSizes) { if (recipe.mEnabled && !recipe.mFakeRecipe && recipe.isRecipeInputEqual(false, dontCheckStackSizes, fluids, items)) { diff --git a/src/main/java/gregtech/api/recipe/RecipeMapBackendProperties.java b/src/main/java/gregtech/api/recipe/RecipeMapBackendProperties.java index 0cd08279a7..47c400a3dd 100644 --- a/src/main/java/gregtech/api/recipe/RecipeMapBackendProperties.java +++ b/src/main/java/gregtech/api/recipe/RecipeMapBackendProperties.java @@ -6,8 +6,8 @@ import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; import gregtech.api.util.FieldsAreNonnullByDefault; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeBuilder; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeBuilder; import gregtech.api.util.MethodsReturnNonnullByDefault; /** @@ -44,18 +44,18 @@ public final class RecipeMapBackendProperties { /** * Changes how recipes are emitted by a particular recipe builder. */ - public final Function> recipeEmitter; + public final Function> recipeEmitter; /** * Runs a custom hook on all recipes added via builder. */ @Nullable - public final Function recipeTransformer; + public final Function recipeTransformer; RecipeMapBackendProperties(int minItemInputs, int minFluidInputs, boolean specialSlotSensitive, boolean disableOptimize, - Function> recipeEmitter, - @Nullable Function recipeTransformer) { + Function> recipeEmitter, + @Nullable Function recipeTransformer) { if (minItemInputs < 0 || minFluidInputs < 0) { throw new IllegalArgumentException("minItemInputs and minFluidInputs cannot be negative"); } diff --git a/src/main/java/gregtech/api/recipe/RecipeMapBackendPropertiesBuilder.java b/src/main/java/gregtech/api/recipe/RecipeMapBackendPropertiesBuilder.java index 48a27fa42e..aad0748fa9 100644 --- a/src/main/java/gregtech/api/recipe/RecipeMapBackendPropertiesBuilder.java +++ b/src/main/java/gregtech/api/recipe/RecipeMapBackendPropertiesBuilder.java @@ -1,6 +1,6 @@ package gregtech.api.recipe; -import static gregtech.api.util.GT_RecipeMapUtil.buildOrEmpty; +import static gregtech.api.util.GTRecipeMapUtil.buildOrEmpty; import java.util.function.Function; @@ -9,8 +9,8 @@ import javax.annotation.ParametersAreNonnullByDefault; import com.google.common.collect.Iterables; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeBuilder; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeBuilder; import gregtech.api.util.MethodsReturnNonnullByDefault; /** @@ -28,10 +28,10 @@ public final class RecipeMapBackendPropertiesBuilder { private boolean disableOptimize; - private Function> recipeEmitter = this::defaultBuildRecipe; + private Function> recipeEmitter = this::defaultBuildRecipe; @Nullable - private Function recipeTransformer; + private Function recipeTransformer; RecipeMapBackendPropertiesBuilder() {} @@ -66,40 +66,40 @@ public final class RecipeMapBackendPropertiesBuilder { } public RecipeMapBackendPropertiesBuilder recipeEmitter( - Function> recipeEmitter) { + Function> recipeEmitter) { this.recipeEmitter = recipeEmitter; return this; } public RecipeMapBackendPropertiesBuilder combineRecipeEmitter( - Function> func) { + Function> func) { // move recipeEmitter to local variable, so lambda capture the function itself instead of this - Function> cur = this.recipeEmitter; + Function> cur = this.recipeEmitter; return recipeEmitter(b -> Iterables.concat(cur.apply(b), func.apply(b))); } public RecipeMapBackendPropertiesBuilder recipeTransformer( - Function recipeTransformer) { + Function recipeTransformer) { this.recipeTransformer = recipeTransformer; return this; } public RecipeMapBackendPropertiesBuilder chainRecipeTransformer( - Function func) { + Function func) { this.recipeTransformer = this.recipeTransformer == null ? func : this.recipeTransformer.andThen(func); return this; } - private Iterable defaultBuildRecipe(GT_RecipeBuilder builder) { + private Iterable defaultBuildRecipe(GTRecipeBuilder builder) { // TODO sensible validation - GT_RecipeBuilder b = builder; + GTRecipeBuilder b = builder; if (disableOptimize && builder.isOptimize()) { b = copy(builder, b).noOptimize(); } return buildOrEmpty(b); } - private static GT_RecipeBuilder copy(GT_RecipeBuilder original, GT_RecipeBuilder b) { + private static GTRecipeBuilder copy(GTRecipeBuilder original, GTRecipeBuilder b) { return b == original ? b.copy() : b; } } diff --git a/src/main/java/gregtech/api/recipe/RecipeMapBuilder.java b/src/main/java/gregtech/api/recipe/RecipeMapBuilder.java index a1638a5a34..2b7bc39066 100644 --- a/src/main/java/gregtech/api/recipe/RecipeMapBuilder.java +++ b/src/main/java/gregtech/api/recipe/RecipeMapBuilder.java @@ -20,11 +20,11 @@ import com.gtnewhorizons.modularui.common.widget.ProgressBar; import codechicken.nei.recipe.HandlerInfo; import gregtech.api.gui.modularui.FallbackableSteamTexture; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.gui.modularui.SteamTexture; import gregtech.api.objects.overclockdescriber.OverclockDescriber; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeBuilder; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeBuilder; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.nei.formatter.INEISpecialInfoFormatter; @@ -84,7 +84,7 @@ public final class RecipeMapBuilder { this.unlocalizedName = unlocalizedName; this.backendCreator = backendCreator; this.uiPropertiesBuilder = BasicUIProperties.builder() - .progressBarTexture(GT_UITextures.fallbackableProgressbar(unlocalizedName, GT_UITextures.PROGRESSBAR_ARROW)) + .progressBarTexture(GTUITextures.fallbackableProgressbar(unlocalizedName, GTUITextures.PROGRESSBAR_ARROW)) .neiTransferRectId(unlocalizedName); } @@ -119,7 +119,7 @@ public final class RecipeMapBuilder { * Changes how recipes are emitted by a particular recipe builder. Can emit multiple recipe per builder. */ public RecipeMapBuilder recipeEmitter( - Function> recipeEmitter) { + Function> recipeEmitter) { backendPropertiesBuilder.recipeEmitter(recipeEmitter); return this; } @@ -130,7 +130,7 @@ public final class RecipeMapBuilder { * Recipes added via one of the overloads of addRecipe will NOT be affected by this function. */ public RecipeMapBuilder recipeEmitterSingle( - Function recipeEmitter) { + Function recipeEmitter) { return recipeEmitter(recipeEmitter.andThen(Collections::singletonList)); } @@ -142,7 +142,7 @@ public final class RecipeMapBuilder { * Unlike {@link #recipeEmitter(Function)}, this one does not clear the existing recipe being emitted, if any */ public RecipeMapBuilder combineRecipeEmitter( - Function> recipeEmitter) { + Function> recipeEmitter) { backendPropertiesBuilder.combineRecipeEmitter(recipeEmitter); return this; } @@ -156,7 +156,7 @@ public final class RecipeMapBuilder { * Unlike {@link #recipeEmitter(Function)}, this one does not clear the existing recipe being emitted, if any */ public RecipeMapBuilder combineRecipeEmitterSingle( - Function recipeEmitter) { + Function recipeEmitter) { return combineRecipeEmitter(recipeEmitter.andThen(Collections::singletonList)); } @@ -166,7 +166,7 @@ public final class RecipeMapBuilder { *

* Recipes added via one of the overloads of addRecipe will NOT be affected by this function. */ - public RecipeMapBuilder recipeTransformer(Function recipeTransformer) { + public RecipeMapBuilder recipeTransformer(Function recipeTransformer) { backendPropertiesBuilder.recipeTransformer(recipeTransformer); return this; } @@ -177,7 +177,7 @@ public final class RecipeMapBuilder { *

* Recipes added via one of the overloads of addRecipe will NOT be affected by this function. */ - public RecipeMapBuilder recipeTransformer(Consumer recipeTransformer) { + public RecipeMapBuilder recipeTransformer(Consumer recipeTransformer) { return recipeTransformer(withIdentityReturn(recipeTransformer)); } @@ -191,7 +191,7 @@ public final class RecipeMapBuilder { * The supplied function will be given the output of existing handler when a recipe is added. */ public RecipeMapBuilder chainRecipeTransformer( - Function recipeTransformer) { + Function recipeTransformer) { backendPropertiesBuilder.chainRecipeTransformer(recipeTransformer); return this; } @@ -205,7 +205,7 @@ public final class RecipeMapBuilder { * Unlike {@link #recipeTransformer(Function)}, this one will not replace the existing special handler. * The supplied function will be given the output of existing handler when a recipe is added. */ - public RecipeMapBuilder chainRecipeTransformer(Consumer recipeTransformer) { + public RecipeMapBuilder chainRecipeTransformer(Consumer recipeTransformer) { return chainRecipeTransformer(withIdentityReturn(recipeTransformer)); } @@ -250,7 +250,7 @@ public final class RecipeMapBuilder { * By default, it's set to {@code GT_UITextures.PROGRESSBAR_ARROW, ProgressBar.Direction.RIGHT}. */ public RecipeMapBuilder progressBar(UITexture texture, ProgressBar.Direction direction) { - return progressBarWithFallback(GT_UITextures.fallbackableProgressbar(unlocalizedName, texture), direction); + return progressBarWithFallback(GTUITextures.fallbackableProgressbar(unlocalizedName, texture), direction); } /** @@ -438,7 +438,7 @@ public final class RecipeMapBuilder { } /** - * Sets formatter for special description for the recipe, mainly {@link gregtech.api.util.GT_Recipe#mSpecialValue}. + * Sets formatter for special description for the recipe, mainly {@link GTRecipe#mSpecialValue}. */ public RecipeMapBuilder neiSpecialInfoFormatter(INEISpecialInfoFormatter neiSpecialInfoFormatter) { neiPropertiesBuilder.neiSpecialInfoFormatter(neiSpecialInfoFormatter); @@ -478,7 +478,7 @@ public final class RecipeMapBuilder { /** * Sets custom comparator for NEI recipe sort. */ - public RecipeMapBuilder neiRecipeComparator(Comparator comparator) { + public RecipeMapBuilder neiRecipeComparator(Comparator comparator) { neiPropertiesBuilder.recipeComparator(comparator); return this; } diff --git a/src/main/java/gregtech/api/recipe/RecipeMapFrontend.java b/src/main/java/gregtech/api/recipe/RecipeMapFrontend.java index 63daa00dc7..36aee2872f 100644 --- a/src/main/java/gregtech/api/recipe/RecipeMapFrontend.java +++ b/src/main/java/gregtech/api/recipe/RecipeMapFrontend.java @@ -1,6 +1,6 @@ package gregtech.api.recipe; -import static gregtech.api.util.GT_Utility.trans; +import static gregtech.api.util.GTUtility.trans; import static net.minecraft.util.EnumChatFormatting.GRAY; import java.util.ArrayList; @@ -30,15 +30,15 @@ import com.gtnewhorizons.modularui.common.widget.ProgressBar; import com.gtnewhorizons.modularui.common.widget.SlotWidget; import codechicken.nei.PositionedStack; -import gregtech.GT_Mod; +import gregtech.GTMod; import gregtech.api.enums.SteamVariant; -import gregtech.api.gui.GT_GUIColorOverride; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.GUIColorOverride; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.recipe.metadata.IRecipeMetadataStorage; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.common.gui.modularui.UIHelper; -import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.nei.GTNEIDefaultHandler; import gregtech.nei.RecipeDisplayInfo; /** @@ -60,8 +60,8 @@ public class RecipeMapFrontend { */ protected final NEIRecipeProperties neiProperties; - protected final GT_GUIColorOverride colorOverride = GT_GUIColorOverride - .get(GT_UITextures.BACKGROUND_NEI_SINGLE_RECIPE.location); + protected final GUIColorOverride colorOverride = GUIColorOverride + .get(GTUITextures.BACKGROUND_NEI_SINGLE_RECIPE.location); public RecipeMapFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, NEIRecipePropertiesBuilder neiPropertiesBuilder) { @@ -96,7 +96,7 @@ public class RecipeMapFrontend { IItemHandlerModifiable fluidInputsInventory, IItemHandlerModifiable fluidOutputsInventory, Supplier progressSupplier, Pos2d windowOffset) { ModularWindow.Builder builder = ModularWindow.builder(neiProperties.recipeBackgroundSize) - .setBackground(GT_UITextures.BACKGROUND_NEI_SINGLE_RECIPE); + .setBackground(GTUITextures.BACKGROUND_NEI_SINGLE_RECIPE); UIHelper.forEachSlots( (i, backgrounds, pos) -> builder.widget( @@ -245,8 +245,8 @@ public class RecipeMapFrontend { } protected void drawRecipeOwnerInfo(RecipeDisplayInfo recipeInfo) { - GT_Recipe recipe = recipeInfo.recipe; - if (GT_Mod.gregtechproxy.mNEIRecipeOwner) { + GTRecipe recipe = recipeInfo.recipe; + if (GTMod.gregtechproxy.mNEIRecipeOwner) { if (recipe.owners.size() > 1) { recipeInfo.drawText( EnumChatFormatting.ITALIC + trans("273", "Original Recipe by: ") @@ -265,7 +265,7 @@ public class RecipeMapFrontend { .getName()); } } - if (GT_Mod.gregtechproxy.mNEIRecipeOwnerStackTrace && recipe.stackTraces != null + if (GTMod.gregtechproxy.mNEIRecipeOwnerStackTrace && recipe.stackTraces != null && !recipe.stackTraces.isEmpty()) { recipeInfo.drawText("stackTrace:"); // todo: good way to show all stacktraces @@ -276,23 +276,23 @@ public class RecipeMapFrontend { } public List handleNEIItemTooltip(ItemStack stack, List currentTip, - GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { for (PositionedStack pStack : neiCachedRecipe.mInputs) { if (stack == pStack.item) { - if (pStack instanceof GT_NEI_DefaultHandler.FixedPositionedStack) { + if (pStack instanceof GTNEIDefaultHandler.FixedPositionedStack) { currentTip = handleNEIItemInputTooltip( currentTip, - (GT_NEI_DefaultHandler.FixedPositionedStack) pStack); + (GTNEIDefaultHandler.FixedPositionedStack) pStack); } break; } } for (PositionedStack pStack : neiCachedRecipe.mOutputs) { if (stack == pStack.item) { - if (pStack instanceof GT_NEI_DefaultHandler.FixedPositionedStack) { + if (pStack instanceof GTNEIDefaultHandler.FixedPositionedStack) { currentTip = handleNEIItemOutputTooltip( currentTip, - (GT_NEI_DefaultHandler.FixedPositionedStack) pStack); + (GTNEIDefaultHandler.FixedPositionedStack) pStack); } break; } @@ -301,7 +301,7 @@ public class RecipeMapFrontend { } protected List handleNEIItemInputTooltip(List currentTip, - GT_NEI_DefaultHandler.FixedPositionedStack pStack) { + GTNEIDefaultHandler.FixedPositionedStack pStack) { if (pStack.isNotConsumed()) { currentTip.add(GRAY + trans("151", "Does not get consumed in the process")); } @@ -309,33 +309,33 @@ public class RecipeMapFrontend { } protected List handleNEIItemOutputTooltip(List currentTip, - GT_NEI_DefaultHandler.FixedPositionedStack pStack) { + GTNEIDefaultHandler.FixedPositionedStack pStack) { if (pStack.isChanceBased()) { currentTip.add(GRAY + trans("150", "Chance: ") + pStack.getChanceText()); } return currentTip; } - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + public void drawNEIOverlays(GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { for (PositionedStack stack : neiCachedRecipe.mInputs) { - if (stack instanceof GT_NEI_DefaultHandler.FixedPositionedStack) { - drawNEIOverlayForInput((GT_NEI_DefaultHandler.FixedPositionedStack) stack); + if (stack instanceof GTNEIDefaultHandler.FixedPositionedStack) { + drawNEIOverlayForInput((GTNEIDefaultHandler.FixedPositionedStack) stack); } } for (PositionedStack stack : neiCachedRecipe.mOutputs) { - if (stack instanceof GT_NEI_DefaultHandler.FixedPositionedStack) { - drawNEIOverlayForOutput((GT_NEI_DefaultHandler.FixedPositionedStack) stack); + if (stack instanceof GTNEIDefaultHandler.FixedPositionedStack) { + drawNEIOverlayForOutput((GTNEIDefaultHandler.FixedPositionedStack) stack); } } } - protected void drawNEIOverlayForInput(GT_NEI_DefaultHandler.FixedPositionedStack stack) { + protected void drawNEIOverlayForInput(GTNEIDefaultHandler.FixedPositionedStack stack) { if (stack.isNotConsumed()) { drawNEIOverlayText("NC", stack); } } - protected void drawNEIOverlayForOutput(GT_NEI_DefaultHandler.FixedPositionedStack stack) { + protected void drawNEIOverlayForOutput(GTNEIDefaultHandler.FixedPositionedStack stack) { if (stack.isChanceBased()) { drawNEIOverlayText(stack.getChanceText(), stack); } diff --git a/src/main/java/gregtech/api/recipe/RecipeMaps.java b/src/main/java/gregtech/api/recipe/RecipeMaps.java index 293b4f36b5..b43b1144ee 100644 --- a/src/main/java/gregtech/api/recipe/RecipeMaps.java +++ b/src/main/java/gregtech/api/recipe/RecipeMaps.java @@ -4,18 +4,18 @@ import static gregtech.api.enums.Mods.Avaritia; import static gregtech.api.enums.Mods.GTNHIntergalactic; import static gregtech.api.enums.Mods.NEICustomDiagrams; import static gregtech.api.enums.Mods.Railcraft; -import static gregtech.api.util.GT_ModHandler.getModItem; -import static gregtech.api.util.GT_RecipeConstants.ADDITIVE_AMOUNT; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; -import static gregtech.api.util.GT_RecipeMapUtil.GT_RecipeTemplate; -import static gregtech.api.util.GT_RecipeMapUtil.asTemplate; -import static gregtech.api.util.GT_RecipeMapUtil.buildOrEmpty; -import static gregtech.api.util.GT_Utility.clamp; -import static gregtech.api.util.GT_Utility.copyAmount; -import static gregtech.api.util.GT_Utility.getFluidForFilledItem; -import static gregtech.api.util.GT_Utility.isArrayEmptyOrNull; -import static gregtech.api.util.GT_Utility.isArrayOfLength; -import static gregtech.api.util.GT_Utility.multiplyStack; +import static gregtech.api.util.GTModHandler.getModItem; +import static gregtech.api.util.GTRecipeConstants.ADDITIVE_AMOUNT; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; +import static gregtech.api.util.GTRecipeMapUtil.GTRecipeTemplate; +import static gregtech.api.util.GTRecipeMapUtil.asTemplate; +import static gregtech.api.util.GTRecipeMapUtil.buildOrEmpty; +import static gregtech.api.util.GTUtility.clamp; +import static gregtech.api.util.GTUtility.copyAmount; +import static gregtech.api.util.GTUtility.getFluidForFilledItem; +import static gregtech.api.util.GTUtility.isArrayEmptyOrNull; +import static gregtech.api.util.GTUtility.isArrayOfLength; +import static gregtech.api.util.GTUtility.multiplyStack; import java.util.ArrayList; import java.util.Collection; @@ -32,11 +32,11 @@ import org.apache.commons.lang3.ArrayUtils; import com.gtnewhorizons.modularui.api.drawable.UITexture; import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.interfaces.IRecipeMap; import gregtech.api.objects.ItemData; import gregtech.api.recipe.maps.AssemblerBackend; @@ -68,12 +68,12 @@ import gregtech.api.recipe.maps.UnpackagerBackend; import gregtech.api.recipe.metadata.CompressionTierKey; import gregtech.api.recipe.metadata.PCBFactoryTierKey; import gregtech.api.recipe.metadata.PurificationPlantBaseChanceKey; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeConstants; -import gregtech.api.util.GT_RecipeMapUtil; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeConstants; +import gregtech.api.util.GTRecipeMapUtil; +import gregtech.api.util.GTUtility; import gregtech.common.tileentities.machines.multi.purification.PurifiedWaterHelpers; import gregtech.nei.formatter.FuelSpecialValueFormatter; import gregtech.nei.formatter.FusionSpecialValueFormatter; @@ -94,12 +94,12 @@ public final class RecipeMaps { return null; } if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_DUST; + return GTUITextures.OVERLAY_SLOT_DUST; } else { - return GT_UITextures.OVERLAY_SLOT_CRUSHED_ORE; + return GTUITextures.OVERLAY_SLOT_CRUSHED_ORE; } }) - .progressBar(GT_UITextures.PROGRESSBAR_BATH, ProgressBar.Direction.CIRCULAR_CW) + .progressBar(GTUITextures.PROGRESSBAR_BATH, ProgressBar.Direction.CIRCULAR_CW) .build(); public static final RecipeMap thermalCentrifugeRecipes = RecipeMapBuilder .of("gt.recipe.thermalcentrifuge") @@ -111,9 +111,9 @@ public final class RecipeMaps { return null; } if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_DUST; + return GTUITextures.OVERLAY_SLOT_DUST; } else { - return GT_UITextures.OVERLAY_SLOT_CRUSHED_ORE; + return GTUITextures.OVERLAY_SLOT_CRUSHED_ORE; } }) .build(); @@ -121,17 +121,17 @@ public final class RecipeMaps { .maxIO(1, 1, 0, 0) .minInputs(1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_COMPRESSOR + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_COMPRESSOR : null) - .progressBar(GT_UITextures.PROGRESSBAR_COMPRESS) + .progressBar(GTUITextures.PROGRESSBAR_COMPRESS) .slotOverlaysSteam( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_COMPRESSOR_STEAM + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_COMPRESSOR_STEAM : null) - .progressBarSteam(GT_UITextures.PROGRESSBAR_COMPRESS_STEAM) + .progressBarSteam(GTUITextures.PROGRESSBAR_COMPRESS_STEAM) .neiRecipeComparator( Comparator - .comparing(recipe -> recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 0)) - .thenComparing(GT_Recipe::compareTo)) + .comparing(recipe -> recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 0)) + .thenComparing(GTRecipe::compareTo)) // Avoid steam machine being used as handler icon .neiHandlerInfo(builder -> builder.setDisplayStack(ItemList.Machine_LV_Compressor.get(1))) .build(); @@ -139,27 +139,27 @@ public final class RecipeMaps { .of("gt.recipe.neutroniumcompressor") .maxIO(1, 1, 1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_COMPRESSOR + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_COMPRESSOR : null) - .progressBar(GT_UITextures.PROGRESSBAR_COMPRESS) + .progressBar(GTUITextures.PROGRESSBAR_COMPRESS) .neiHandlerInfo(builder -> builder.setDisplayStack(getModItem(Avaritia.ID, "Singularity", 1L, 0))) .disableOptimize() .neiRecipeComparator( Comparator - .comparing(recipe -> recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 0)) - .thenComparing(GT_Recipe::compareTo)) + .comparing(recipe -> recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 0)) + .thenComparing(GTRecipe::compareTo)) .build(); public static final RecipeMap extractorRecipes = RecipeMapBuilder.of("gt.recipe.extractor") .maxIO(1, 1, 0, 0) .minInputs(1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_CENTRIFUGE + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_CENTRIFUGE : null) - .progressBar(GT_UITextures.PROGRESSBAR_EXTRACT) + .progressBar(GTUITextures.PROGRESSBAR_EXTRACT) .slotOverlaysSteam( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_CENTRIFUGE_STEAM + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_CENTRIFUGE_STEAM : null) - .progressBarSteam(GT_UITextures.PROGRESSBAR_EXTRACT_STEAM) + .progressBarSteam(GTUITextures.PROGRESSBAR_EXTRACT_STEAM) // Avoid steam machine being used as handler icon .neiHandlerInfo(builder -> builder.setDisplayStack(ItemList.Machine_LV_Extractor.get(1))) .build(); @@ -168,8 +168,8 @@ public final class RecipeMaps { .maxIO(1, 1, 0, 0) .minInputs(1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_RECYCLE : null) - .progressBar(GT_UITextures.PROGRESSBAR_RECYCLE, ProgressBar.Direction.CIRCULAR_CW) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_RECYCLE : null) + .progressBar(GTUITextures.PROGRESSBAR_RECYCLE, ProgressBar.Direction.CIRCULAR_CW) .neiTransferRectId("ic2.recycler") .disableRegisterNEI() .build(); @@ -178,11 +178,11 @@ public final class RecipeMaps { .maxIO(1, 1, 0, 0) .minInputs(1, 9) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_FURNACE : null) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_FURNACE : null) .slotOverlaysSteam( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_FURNACE_STEAM + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_FURNACE_STEAM : null) - .progressBarSteam(GT_UITextures.PROGRESSBAR_ARROW_STEAM) + .progressBarSteam(GTUITextures.PROGRESSBAR_ARROW_STEAM) .neiTransferRectId("smelting") .disableRegisterNEI() .build(); @@ -191,7 +191,7 @@ public final class RecipeMaps { .maxIO(1, 1, 0, 0) .minInputs(1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_FURNACE : null) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_FURNACE : null) .neiTransferRectId("smelting") .disableRegisterNEI() .build(); @@ -201,10 +201,10 @@ public final class RecipeMaps { .useSpecialSlot() .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (isSpecial) { - return GT_UITextures.OVERLAY_SLOT_DATA_ORB; + return GTUITextures.OVERLAY_SLOT_DATA_ORB; } if (!isFluid && !isOutput) { - return GT_UITextures.OVERLAY_SLOT_MICROSCOPE; + return GTUITextures.OVERLAY_SLOT_MICROSCOPE; } return null; }) @@ -214,12 +214,12 @@ public final class RecipeMaps { .maxIO(2, 1, 0, 0) .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_CRUSHED_ORE; + return GTUITextures.OVERLAY_SLOT_CRUSHED_ORE; } else { - return GT_UITextures.OVERLAY_SLOT_DUST; + return GTUITextures.OVERLAY_SLOT_DUST; } }) - .progressBar(GT_UITextures.PROGRESSBAR_MACERATE) + .progressBar(GTUITextures.PROGRESSBAR_MACERATE) .build(); public static final RecipeMap replicatorRecipes = RecipeMapBuilder .of("gt.recipe.replicator", ReplicatorBackend::new) @@ -228,23 +228,23 @@ public final class RecipeMaps { .useSpecialSlot() .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (isSpecial) { - return GT_UITextures.OVERLAY_SLOT_DATA_ORB; + return GTUITextures.OVERLAY_SLOT_DATA_ORB; } if (isFluid && !isOutput) { - return GT_UITextures.OVERLAY_SLOT_UUM; + return GTUITextures.OVERLAY_SLOT_UUM; } return null; }) .build(); /** - * Use {@link GT_RecipeConstants#AssemblyLine} for recipe addition. + * Use {@link GTRecipeConstants#AssemblyLine} for recipe addition. */ public static final RecipeMap assemblylineVisualRecipes = RecipeMapBuilder .of("gt.recipe.fakeAssemblylineProcess") .maxIO(16, 1, 4, 0) .minInputs(1, 0) .useSpecialSlot() - .slotOverlays((index, isFluid, isOutput, isSpecial) -> isSpecial ? GT_UITextures.OVERLAY_SLOT_DATA_ORB : null) + .slotOverlays((index, isFluid, isOutput, isSpecial) -> isSpecial ? GTUITextures.OVERLAY_SLOT_DATA_ORB : null) .disableOptimize() .neiTransferRect(88, 8, 18, 72) .neiTransferRect(124, 8, 18, 72) @@ -252,7 +252,7 @@ public final class RecipeMaps { .frontend(AssemblyLineFrontend::new) .build(); /** - * Usually, but not always, you should use {@link GT_RecipeConstants#UniversalArcFurnace} instead. + * Usually, but not always, you should use {@link GTRecipeConstants#UniversalArcFurnace} instead. */ public static final RecipeMap plasmaArcFurnaceRecipes = RecipeMapBuilder .of("gt.recipe.plasmaarcfurnace") @@ -260,7 +260,7 @@ public final class RecipeMaps { .minInputs(1, 1) .build(); /** - * Usually, but not always, you should use {@link GT_RecipeConstants#UniversalArcFurnace} instead. + * Usually, but not always, you should use {@link GTRecipeConstants#UniversalArcFurnace} instead. */ public static final RecipeMap arcFurnaceRecipes = RecipeMapBuilder.of("gt.recipe.arcfurnace") .maxIO(1, 9, 1, 0) @@ -274,20 +274,20 @@ public final class RecipeMaps { .useSpecialSlot() .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (isSpecial) { - return GT_UITextures.OVERLAY_SLOT_DATA_STICK; + return GTUITextures.OVERLAY_SLOT_DATA_STICK; } if (isFluid) { return null; } if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_PAGE_PRINTED; + return GTUITextures.OVERLAY_SLOT_PAGE_PRINTED; } - return GT_UITextures.OVERLAY_SLOT_PAGE_BLANK; + return GTUITextures.OVERLAY_SLOT_PAGE_BLANK; }) .build(); public static final RecipeMap sifterRecipes = RecipeMapBuilder.of("gt.recipe.sifter") .maxIO(1, 9, 1, 1) - .progressBar(GT_UITextures.PROGRESSBAR_SIFT, ProgressBar.Direction.DOWN) + .progressBar(GTUITextures.PROGRESSBAR_SIFT, ProgressBar.Direction.DOWN) .build(); public static final RecipeMap formingPressRecipes = RecipeMapBuilder .of("gt.recipe.press", FormingPressBackend::new) @@ -295,32 +295,32 @@ public final class RecipeMaps { .minInputs(2, 0) .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_PRESS_3; + return GTUITextures.OVERLAY_SLOT_PRESS_3; } if (index == 0) { - return GT_UITextures.OVERLAY_SLOT_PRESS_1; + return GTUITextures.OVERLAY_SLOT_PRESS_1; } - return GT_UITextures.OVERLAY_SLOT_PRESS_2; + return GTUITextures.OVERLAY_SLOT_PRESS_2; }) - .progressBar(GT_UITextures.PROGRESSBAR_COMPRESS) + .progressBar(GTUITextures.PROGRESSBAR_COMPRESS) .build(); public static final RecipeMap laserEngraverRecipes = RecipeMapBuilder .of("gt.recipe.laserengraver") .maxIO(4, 4, 2, 2) .slotOverlays( (index, isFluid, isOutput, - isSpecial) -> !isFluid && !isOutput && index != 0 ? GT_UITextures.OVERLAY_SLOT_LENS : null) + isSpecial) -> !isFluid && !isOutput && index != 0 ? GTUITextures.OVERLAY_SLOT_LENS : null) // Add a simple ordering so lower tier purified water is displayed first, otherwise it gets really confusing .neiRecipeComparator( (a, b) -> Comparator.comparing(PurifiedWaterHelpers::getWaterTierFromRecipe) - .thenComparing(GT_Recipe::compareTo) + .thenComparing(GTRecipe::compareTo) .compare(a, b)) .build(); public static final RecipeMap mixerRecipes = RecipeMapBuilder.of("gt.recipe.mixer") .maxIO(9, 4, 1, 1) .minInputs(1, 0) - .slotOverlays((index, isFluid, isOutput, isSpecial) -> !isFluid ? GT_UITextures.OVERLAY_SLOT_DUST : null) - .progressBar(GT_UITextures.PROGRESSBAR_MIXER, ProgressBar.Direction.CIRCULAR_CW) + .slotOverlays((index, isFluid, isOutput, isSpecial) -> !isFluid ? GTUITextures.OVERLAY_SLOT_DUST : null) + .progressBar(GTUITextures.PROGRESSBAR_MIXER, ProgressBar.Direction.CIRCULAR_CW) .build(); public static final RecipeMap autoclaveRecipes = RecipeMapBuilder.of("gt.recipe.autoclave") .maxIO(2, 4, 1, 1) @@ -331,11 +331,11 @@ public final class RecipeMaps { } if (isOutput) { if (index == 0) { - return GT_UITextures.OVERLAY_SLOT_GEM; + return GTUITextures.OVERLAY_SLOT_GEM; } - return GT_UITextures.OVERLAY_SLOT_DUST; + return GTUITextures.OVERLAY_SLOT_DUST; } - return GT_UITextures.OVERLAY_SLOT_DUST; + return GTUITextures.OVERLAY_SLOT_DUST; }) .build(); public static final RecipeMap electroMagneticSeparatorRecipes = RecipeMapBuilder @@ -343,47 +343,47 @@ public final class RecipeMaps { .maxIO(1, 3, 0, 0) .minInputs(1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> isOutput ? GT_UITextures.OVERLAY_SLOT_DUST - : GT_UITextures.OVERLAY_SLOT_CRUSHED_ORE) - .progressBar(GT_UITextures.PROGRESSBAR_MAGNET) + (index, isFluid, isOutput, isSpecial) -> isOutput ? GTUITextures.OVERLAY_SLOT_DUST + : GTUITextures.OVERLAY_SLOT_CRUSHED_ORE) + .progressBar(GTUITextures.PROGRESSBAR_MAGNET) .build(); public static final RecipeMap polarizerRecipes = RecipeMapBuilder.of("gt.recipe.polarizer") .maxIO(1, 1, 0, 0) .minInputs(1, 0) - .progressBar(GT_UITextures.PROGRESSBAR_MAGNET) + .progressBar(GTUITextures.PROGRESSBAR_MAGNET) .build(); public static final RecipeMap maceratorRecipes = RecipeMapBuilder.of("gt.recipe.macerator") .maxIO(1, 4, 0, 0) .minInputs(1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> isOutput ? GT_UITextures.OVERLAY_SLOT_DUST - : GT_UITextures.OVERLAY_SLOT_CRUSHED_ORE) + (index, isFluid, isOutput, isSpecial) -> isOutput ? GTUITextures.OVERLAY_SLOT_DUST + : GTUITextures.OVERLAY_SLOT_CRUSHED_ORE) .slotOverlaysSteam( - (index, isFluid, isOutput, isSpecial) -> isOutput ? GT_UITextures.OVERLAY_SLOT_DUST_STEAM - : GT_UITextures.OVERLAY_SLOT_CRUSHED_ORE_STEAM) - .progressBar(GT_UITextures.PROGRESSBAR_MACERATE) - .progressBarSteam(GT_UITextures.PROGRESSBAR_MACERATE_STEAM) + (index, isFluid, isOutput, isSpecial) -> isOutput ? GTUITextures.OVERLAY_SLOT_DUST_STEAM + : GTUITextures.OVERLAY_SLOT_CRUSHED_ORE_STEAM) + .progressBar(GTUITextures.PROGRESSBAR_MACERATE) + .progressBarSteam(GTUITextures.PROGRESSBAR_MACERATE_STEAM) // Avoid steam machine being used as handler icon .neiHandlerInfo(builder -> builder.setDisplayStack(ItemList.Machine_LV_Macerator.get(1))) .build(); public static final RecipeMap chemicalBathRecipes = RecipeMapBuilder.of("gt.recipe.chemicalbath") .maxIO(1, 3, 1, 1) .minInputs(1, 1) - .progressBar(GT_UITextures.PROGRESSBAR_BATH, ProgressBar.Direction.CIRCULAR_CW) + .progressBar(GTUITextures.PROGRESSBAR_BATH, ProgressBar.Direction.CIRCULAR_CW) .build(); public static final RecipeMap fluidCannerRecipes = RecipeMapBuilder .of("gt.recipe.fluidcanner", FluidCannerBackend::new) .maxIO(1, 1, 1, 1) .minInputs(1, 0) - .slotOverlays((index, isFluid, isOutput, isSpecial) -> !isFluid ? GT_UITextures.OVERLAY_SLOT_CANISTER : null) - .progressBar(GT_UITextures.PROGRESSBAR_CANNER) + .slotOverlays((index, isFluid, isOutput, isSpecial) -> !isFluid ? GTUITextures.OVERLAY_SLOT_CANISTER : null) + .progressBar(GTUITextures.PROGRESSBAR_CANNER) .build(); public static final RecipeMap brewingRecipes = RecipeMapBuilder.of("gt.recipe.brewer") .maxIO(1, 0, 1, 1) .minInputs(1, 1) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_CAULDRON : null) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_CAULDRON : null) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .build(); public static final RecipeMap fluidHeaterRecipes = RecipeMapBuilder.of("gt.recipe.fluidheater") .maxIO(1, 0, 1, 1) @@ -392,11 +392,11 @@ public final class RecipeMaps { return null; } if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_HEATER_2; + return GTUITextures.OVERLAY_SLOT_HEATER_2; } - return GT_UITextures.OVERLAY_SLOT_HEATER_1; + return GTUITextures.OVERLAY_SLOT_HEATER_1; }) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .build(); public static final RecipeMap distilleryRecipes = RecipeMapBuilder.of("gt.recipe.distillery") .maxIO(1, 1, 1, 1) @@ -406,11 +406,11 @@ public final class RecipeMaps { return null; } if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_BEAKER_2; + return GTUITextures.OVERLAY_SLOT_BEAKER_2; } - return GT_UITextures.OVERLAY_SLOT_BEAKER_1; + return GTUITextures.OVERLAY_SLOT_BEAKER_1; }) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .recipeTransformer(r -> { int aInput = r.mFluidInputs[0].amount, aOutput = r.mFluidOutputs[0].amount, aDuration = r.mDuration; @@ -434,14 +434,14 @@ public final class RecipeMaps { aInput = (aInput + tScale - 1) / tScale; aOutput = aOutput / tScale; if (!isArrayEmptyOrNull(r.mOutputs)) { - ItemData tData = GT_OreDictUnificator.getItemData(r.mOutputs[0]); + ItemData tData = GTOreDictUnificator.getItemData(r.mOutputs[0]); if (tData != null && (tData.mPrefix == OrePrefixes.dust || OrePrefixes.dust.mFamiliarPrefixes.contains(tData.mPrefix))) { - r.mOutputs[0] = GT_OreDictUnificator.getDust( + r.mOutputs[0] = GTOreDictUnificator.getDust( tData.mMaterial.mMaterial, tData.mMaterial.mAmount * r.mOutputs[0].stackSize / tScale); } else { - if (r.mOutputs[0].stackSize / tScale == 0) r.mOutputs[0] = GT_Values.NI; + if (r.mOutputs[0].stackSize / tScale == 0) r.mOutputs[0] = GTValues.NI; else r.mOutputs[0] = copyAmount(r.mOutputs[0].stackSize / tScale, r.mOutputs[0]); } } @@ -455,14 +455,14 @@ public final class RecipeMaps { public static final RecipeMap fermentingRecipes = RecipeMapBuilder.of("gt.recipe.fermenter") .maxIO(0, 0, 1, 1) .minInputs(0, 1) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .build(); public static final RecipeMap fluidSolidifierRecipes = RecipeMapBuilder .of("gt.recipe.fluidsolidifier") .maxIO(1, 1, 1, 0) .minInputs(1, 1) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_MOLD : null) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_MOLD : null) .recipeTransformer(r -> { if (ArrayUtils.isNotEmpty(r.mFluidInputs)) { if (Materials.PhasedGold.getMolten(1) @@ -479,9 +479,9 @@ public final class RecipeMaps { .maxIO(1, 1, 0, 1) .minInputs(1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_CENTRIFUGE + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_CENTRIFUGE : null) - .progressBar(GT_UITextures.PROGRESSBAR_EXTRACT) + .progressBar(GTUITextures.PROGRESSBAR_EXTRACT) .recipeTransformer(r -> { if (ArrayUtils.isNotEmpty(r.mFluidOutputs)) { if (Materials.PhasedGold.getMolten(1) @@ -498,10 +498,10 @@ public final class RecipeMaps { .minInputs(2, 0) .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_BOXED; + return GTUITextures.OVERLAY_SLOT_BOXED; } if (index != 0) { - return GT_UITextures.OVERLAY_SLOT_BOX; + return GTUITextures.OVERLAY_SLOT_BOX; } return null; }) @@ -510,7 +510,7 @@ public final class RecipeMaps { .of("gt.recipe.unpackager", UnpackagerBackend::new) .maxIO(1, 2, 0, 0) .minInputs(1, 0) - .slotOverlays((index, isFluid, isOutput, isSpecial) -> !isOutput ? GT_UITextures.OVERLAY_SLOT_BOXED : null) + .slotOverlays((index, isFluid, isOutput, isSpecial) -> !isOutput ? GTUITextures.OVERLAY_SLOT_BOXED : null) .build(); public static final RecipeMap fusionRecipes = RecipeMapBuilder.of("gt.recipe.fusionreactor") .maxIO(0, 0, 2, 1) @@ -520,9 +520,9 @@ public final class RecipeMaps { .neiSpecialInfoFormatter(FusionSpecialValueFormatter.INSTANCE) .neiRecipeComparator( Comparator - .comparing( + .comparing( recipe -> FusionSpecialValueFormatter.getFusionTier(recipe.mSpecialValue, recipe.mEUt)) - .thenComparing(GT_Recipe::compareTo)) + .thenComparing(GTRecipe::compareTo)) .frontend(FluidOnlyFrontend::new) .build(); public static final RecipeMap centrifugeRecipes = RecipeMapBuilder.of("gt.recipe.centrifuge") @@ -532,15 +532,15 @@ public final class RecipeMaps { return null; } if (isFluid) { - return GT_UITextures.OVERLAY_SLOT_CENTRIFUGE_FLUID; + return GTUITextures.OVERLAY_SLOT_CENTRIFUGE_FLUID; } else { if (index == 0) { - return GT_UITextures.OVERLAY_SLOT_CENTRIFUGE; + return GTUITextures.OVERLAY_SLOT_CENTRIFUGE; } - return GT_UITextures.OVERLAY_SLOT_CANISTER; + return GTUITextures.OVERLAY_SLOT_CANISTER; } }) - .progressBar(GT_UITextures.PROGRESSBAR_EXTRACT) + .progressBar(GTUITextures.PROGRESSBAR_EXTRACT) .build(); public static final RecipeMap electrolyzerRecipes = RecipeMapBuilder.of("gt.recipe.electrolyzer") .maxIO(2, 6, 1, 1) @@ -549,18 +549,18 @@ public final class RecipeMaps { return null; } if (isFluid) { - return GT_UITextures.OVERLAY_SLOT_CHARGER_FLUID; + return GTUITextures.OVERLAY_SLOT_CHARGER_FLUID; } else { if (index == 0) { - return GT_UITextures.OVERLAY_SLOT_CHARGER; + return GTUITextures.OVERLAY_SLOT_CHARGER; } - return GT_UITextures.OVERLAY_SLOT_CANISTER; + return GTUITextures.OVERLAY_SLOT_CANISTER; } }) - .progressBar(GT_UITextures.PROGRESSBAR_EXTRACT) + .progressBar(GTUITextures.PROGRESSBAR_EXTRACT) .build(); /** - * Use {@link GT_RecipeConstants#COIL_HEAT} as heat level. + * Use {@link GTRecipeConstants#COIL_HEAT} as heat level. */ public static final RecipeMap blastFurnaceRecipes = RecipeMapBuilder.of("gt.recipe.blastfurnace") .maxIO(6, 6, 1, 1) @@ -568,7 +568,7 @@ public final class RecipeMaps { .neiSpecialInfoFormatter(HeatingCoilSpecialValueFormatter.INSTANCE) .build(); /** - * Use {@link GT_RecipeConstants#COIL_HEAT} as heat level. + * Use {@link GTRecipeConstants#COIL_HEAT} as heat level. */ public static final RecipeMap plasmaForgeRecipes = RecipeMapBuilder.of("gt.recipe.plasmaforge") .maxIO(9, 9, 9, 9) @@ -606,14 +606,14 @@ public final class RecipeMaps { .disableOptimize() .build(); /** - * Uses {@link GT_RecipeConstants#ADDITIVE_AMOUNT} for coal/charcoal amount. + * Uses {@link GTRecipeConstants#ADDITIVE_AMOUNT} for coal/charcoal amount. */ public static final RecipeMap primitiveBlastRecipes = RecipeMapBuilder .of("gt.recipe.primitiveblastfurnace") .maxIO(3, 3, 0, 0) .minInputs(1, 0) .recipeEmitter(builder -> { - Optional rr = builder.eut(0) + Optional rr = builder.eut(0) .validateInputCount(1, 2) .validateOutputCount(1, 2) .validateNoInputFluid() @@ -629,7 +629,7 @@ public final class RecipeMaps { return Collections.emptyList(); int aCoalAmount = builder.getMetadataOrDefault(ADDITIVE_AMOUNT, 0); if (aCoalAmount <= 0) return Collections.emptyList(); - GT_RecipeTemplate coll = asTemplate(rr.get()); + GTRecipeTemplate coll = asTemplate(rr.get()); for (Materials coal : new Materials[] { Materials.Coal, Materials.Charcoal }) { coll.derive() .setInputs(aInput1, aInput2, coal.getGems(aCoalAmount)) @@ -684,7 +684,7 @@ public final class RecipeMaps { }) .build(); /** - * Uses {@link GT_RecipeConstants#ADDITIVE_AMOUNT} for TNT/ITNT/... amount. Value is truncated to [0, 64] + * Uses {@link GTRecipeConstants#ADDITIVE_AMOUNT} for TNT/ITNT/... amount. Value is truncated to [0, 64] */ public static final RecipeMap implosionRecipes = RecipeMapBuilder .of("gt.recipe.implosioncompressor") @@ -693,13 +693,13 @@ public final class RecipeMaps { .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (!isFluid && !isOutput) { if (index == 0) { - return GT_UITextures.OVERLAY_SLOT_IMPLOSION; + return GTUITextures.OVERLAY_SLOT_IMPLOSION; } - return GT_UITextures.OVERLAY_SLOT_EXPLOSIVE; + return GTUITextures.OVERLAY_SLOT_EXPLOSIVE; } return null; }) - .progressBar(GT_UITextures.PROGRESSBAR_COMPRESS) + .progressBar(GTUITextures.PROGRESSBAR_COMPRESS) .disableOptimize() .recipeEmitter(b -> { switch (b.getItemInputsBasic().length) { @@ -712,7 +712,7 @@ public final class RecipeMaps { .map(Collections::singletonList) .orElse(Collections.emptyList()); } - Optional t = b.noOptimize() + Optional t = b.noOptimize() .duration(20) .eut(30) .validateInputCount(1, 1) @@ -720,7 +720,7 @@ public final class RecipeMaps { .build(); if (!t.isPresent()) return Collections.emptyList(); ItemStack input = b.getItemInputBasic(0); - GT_RecipeTemplate coll = asTemplate(t.get()); + GTRecipeTemplate coll = asTemplate(t.get()); int tExplosives = Math.min(b.getMetadataOrDefault(ADDITIVE_AMOUNT, 0), 64); int tGunpowder = tExplosives << 1; // Worst int tDynamite = Math.max(1, tExplosives >> 1); // good @@ -730,11 +730,11 @@ public final class RecipeMaps { if (tGunpowder < 65) coll.derive() .setInputs(input, ItemList.Block_Powderbarrel.get(tGunpowder)); if (tDynamite < 17) coll.derive() - .setInputs(input, GT_ModHandler.getIC2Item("dynamite", tDynamite, null)); + .setInputs(input, GTModHandler.getIC2Item("dynamite", tDynamite, null)); coll.derive() .setInputs(input, new ItemStack(Blocks.tnt, tTNT)); coll.derive() - .setInputs(input, GT_ModHandler.getIC2Item("industrialTnt", tITNT, null)); + .setInputs(input, GTModHandler.getIC2Item("industrialTnt", tITNT, null)); return coll.getAll(); }) .build(); @@ -749,7 +749,7 @@ public final class RecipeMaps { && isArrayEmptyOrNull(b.getFluidOutputs()) && (in = getFluidForFilledItem(b.getItemInputBasic(0), true)) != null && (out = getFluidForFilledItem(b.getItemOutput(0), true)) != null) { - Collection ret = new ArrayList<>(); + Collection ret = new ArrayList<>(); b.build() .ifPresent(ret::add); b.itemInputs() @@ -765,7 +765,7 @@ public final class RecipeMaps { .build(); /** * Using {@code .addTo(chemicalReactorRecipes)} will cause the recipe to be added to single block recipe map ONLY! - * Use {@link GT_RecipeConstants#UniversalChemical} to add to both. + * Use {@link GTRecipeConstants#UniversalChemical} to add to both. */ public static final RecipeMap chemicalReactorRecipes = RecipeMapBuilder .of("gt.recipe.chemicalreactor") @@ -774,30 +774,30 @@ public final class RecipeMaps { .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (isFluid) { if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_VIAL_2; + return GTUITextures.OVERLAY_SLOT_VIAL_2; } - return GT_UITextures.OVERLAY_SLOT_MOLECULAR_3; + return GTUITextures.OVERLAY_SLOT_MOLECULAR_3; } else { if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_VIAL_1; + return GTUITextures.OVERLAY_SLOT_VIAL_1; } if (index == 0) { - return GT_UITextures.OVERLAY_SLOT_MOLECULAR_1; + return GTUITextures.OVERLAY_SLOT_MOLECULAR_1; } - return GT_UITextures.OVERLAY_SLOT_MOLECULAR_2; + return GTUITextures.OVERLAY_SLOT_MOLECULAR_2; } }) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .disableOptimize() .build(); /** * Using {@code .addTo(multiblockChemicalReactorRecipes)} will cause the recipe to be added to - * multiblock recipe map ONLY! Use {@link GT_RecipeConstants#UniversalChemical} to add to both. + * multiblock recipe map ONLY! Use {@link GTRecipeConstants#UniversalChemical} to add to both. */ public static final RecipeMap multiblockChemicalReactorRecipes = RecipeMapBuilder .of("gt.recipe.largechemicalreactor") .maxIO(6, 6, 6, 6) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .disableOptimize() .frontend(LargeNEIFrontend::new) .build(); @@ -809,12 +809,12 @@ public final class RecipeMaps { return null; } if (isFluid) { - return GT_UITextures.OVERLAY_SLOTS_NUMBER[index + 1]; + return GTUITextures.OVERLAY_SLOTS_NUMBER[index + 1]; } else { - return GT_UITextures.OVERLAY_SLOTS_NUMBER[0]; + return GTUITextures.OVERLAY_SLOTS_NUMBER[0]; } }) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .logoPos(80, 62) .frontend(DistillationTowerFrontend::new) .disableOptimize() @@ -823,7 +823,7 @@ public final class RecipeMaps { .of("gt.recipe.craker", OilCrackerBackend::new) .maxIO(1, 1, 2, 1) .minInputs(1, 2) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .build(); public static final RecipeMap pyrolyseRecipes = RecipeMapBuilder.of("gt.recipe.pyro") .maxIO(2, 1, 1, 1) @@ -834,26 +834,26 @@ public final class RecipeMaps { .maxIO(2, 1, 0, 0) .minInputs(1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_WIREMILL : null) - .progressBar(GT_UITextures.PROGRESSBAR_WIREMILL) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_WIREMILL : null) + .progressBar(GTUITextures.PROGRESSBAR_WIREMILL) .build(); public static final RecipeMap benderRecipes = RecipeMapBuilder.of("gt.recipe.metalbender") .maxIO(2, 1, 0, 0) .minInputs(2, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_BENDER : null) - .progressBar(GT_UITextures.PROGRESSBAR_BENDING) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_BENDER : null) + .progressBar(GTUITextures.PROGRESSBAR_BENDING) .build(); public static final RecipeMap alloySmelterRecipes = RecipeMapBuilder.of("gt.recipe.alloysmelter") .maxIO(2, 1, 0, 0) .minInputs(2, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_FURNACE : null) - .slotOverlaysSteam((index, isFluid, isOutput, isSpecial) -> GT_UITextures.OVERLAY_SLOT_FURNACE_STEAM) - .progressBarSteam(GT_UITextures.PROGRESSBAR_ARROW_STEAM) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_FURNACE : null) + .slotOverlaysSteam((index, isFluid, isOutput, isSpecial) -> GTUITextures.OVERLAY_SLOT_FURNACE_STEAM) + .progressBarSteam(GTUITextures.PROGRESSBAR_ARROW_STEAM) .recipeEmitter(b -> { if (Materials.Graphite.contains(b.getItemInputBasic(0))) return Collections.emptyList(); - if (GT_Utility.isArrayOfLength(b.getItemInputsBasic(), 1)) { + if (GTUtility.isArrayOfLength(b.getItemInputsBasic(), 1)) { ItemStack aInput1 = b.getItemInputBasic(0); if (((OrePrefixes.ingot.contains(aInput1)) || (OrePrefixes.dust.contains(aInput1)) || (OrePrefixes.gem.contains(aInput1)))) return Collections.emptyList(); @@ -872,8 +872,8 @@ public final class RecipeMaps { .maxIO(9, 1, 1, 0) .minInputs(1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_CIRCUIT : null) - .progressBar(GT_UITextures.PROGRESSBAR_ASSEMBLE) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_CIRCUIT : null) + .progressBar(GTUITextures.PROGRESSBAR_ASSEMBLE) .disableOptimize() .build(); public static final RecipeMap circuitAssemblerRecipes = RecipeMapBuilder @@ -881,8 +881,8 @@ public final class RecipeMaps { .maxIO(6, 1, 1, 0) .minInputs(1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_CIRCUIT : null) - .progressBar(GT_UITextures.PROGRESSBAR_CIRCUIT_ASSEMBLER) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_CIRCUIT : null) + .progressBar(GTUITextures.PROGRESSBAR_CIRCUIT_ASSEMBLER) .unificateOutputNEI(!NEICustomDiagrams.isModLoaded()) .build(); public static final RecipeMap cannerRecipes = RecipeMapBuilder.of("gt.recipe.canner") @@ -893,11 +893,11 @@ public final class RecipeMaps { return null; } if (index == 0) { - return GT_UITextures.OVERLAY_SLOT_CANNER; + return GTUITextures.OVERLAY_SLOT_CANNER; } - return GT_UITextures.OVERLAY_SLOT_CANISTER; + return GTUITextures.OVERLAY_SLOT_CANISTER; }) - .progressBar(GT_UITextures.PROGRESSBAR_CANNER) + .progressBar(GTUITextures.PROGRESSBAR_CANNER) .build(); public static final RecipeMap latheRecipes = RecipeMapBuilder.of("gt.recipe.lathe") .maxIO(1, 2, 0, 0) @@ -905,14 +905,14 @@ public final class RecipeMaps { .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (isOutput) { if (index == 0) { - return GT_UITextures.OVERLAY_SLOT_ROD_2; + return GTUITextures.OVERLAY_SLOT_ROD_2; } - return GT_UITextures.OVERLAY_SLOT_DUST; + return GTUITextures.OVERLAY_SLOT_DUST; } - return GT_UITextures.OVERLAY_SLOT_ROD_1; + return GTUITextures.OVERLAY_SLOT_ROD_1; }) - .progressBar(GT_UITextures.PROGRESSBAR_LATHE) - .addSpecialTexture(98, 24, 5, 18, GT_UITextures.PROGRESSBAR_LATHE_BASE) + .progressBar(GTUITextures.PROGRESSBAR_LATHE) + .addSpecialTexture(98, 24, 5, 18, GTUITextures.PROGRESSBAR_LATHE_BASE) .build(); public static final RecipeMap cutterRecipes = RecipeMapBuilder.of("gt.recipe.cuttingsaw") .maxIO(2, 4, 1, 0) @@ -923,13 +923,13 @@ public final class RecipeMaps { } if (isOutput) { if (index == 0) { - return GT_UITextures.OVERLAY_SLOT_CUTTER_SLICED; + return GTUITextures.OVERLAY_SLOT_CUTTER_SLICED; } - return GT_UITextures.OVERLAY_SLOT_DUST; + return GTUITextures.OVERLAY_SLOT_DUST; } - return GT_UITextures.OVERLAY_SLOT_BOX; + return GTUITextures.OVERLAY_SLOT_BOX; }) - .progressBar(GT_UITextures.PROGRESSBAR_CUT) + .progressBar(GTUITextures.PROGRESSBAR_CUT) .recipeEmitter(b -> { b.validateInputCount(1, 2) .validateOutputCount(1, 4) @@ -937,14 +937,14 @@ public final class RecipeMaps { if ((b.getFluidInputs() != null && b.getFluidInputs().length > 0) || !b.isValid()) return buildOrEmpty(b.validateInputFluidCount(1, 1)); int aDuration = b.getDuration(), aEUt = b.getEUt(); - Collection ret = new ArrayList<>(); + Collection ret = new ArrayList<>(); b.copy() .fluidInputs(Materials.Water.getFluid(clamp(aDuration * aEUt / 320, 4, 1000))) .duration(aDuration * 2) .build() .ifPresent(ret::add); b.copy() - .fluidInputs(GT_ModHandler.getDistilledWater(clamp(aDuration * aEUt / 426, 3, 750))) + .fluidInputs(GTModHandler.getDistilledWater(clamp(aDuration * aEUt / 426, 3, 750))) .duration(aDuration * 2) .build() .ifPresent(ret::add); @@ -960,34 +960,34 @@ public final class RecipeMaps { .minInputs(2, 0) .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_SLICER_SLICED; + return GTUITextures.OVERLAY_SLOT_SLICER_SLICED; } if (index == 0) { - return GT_UITextures.OVERLAY_SLOT_SQUARE; + return GTUITextures.OVERLAY_SLOT_SQUARE; } - return GT_UITextures.OVERLAY_SLOT_SLICE_SHAPE; + return GTUITextures.OVERLAY_SLOT_SLICE_SHAPE; }) - .progressBar(GT_UITextures.PROGRESSBAR_SLICE) + .progressBar(GTUITextures.PROGRESSBAR_SLICE) .build(); public static final RecipeMap extruderRecipes = RecipeMapBuilder.of("gt.recipe.extruder") .maxIO(2, 1, 0, 0) .minInputs(2, 0) .slotOverlays( (index, isFluid, isOutput, - isSpecial) -> !isFluid && !isOutput && index != 0 ? GT_UITextures.OVERLAY_SLOT_EXTRUDER_SHAPE : null) - .progressBar(GT_UITextures.PROGRESSBAR_EXTRUDE) + isSpecial) -> !isFluid && !isOutput && index != 0 ? GTUITextures.OVERLAY_SLOT_EXTRUDER_SHAPE : null) + .progressBar(GTUITextures.PROGRESSBAR_EXTRUDE) .build(); public static final RecipeMap hammerRecipes = RecipeMapBuilder.of("gt.recipe.hammer") .maxIO(2, 2, 2, 2) .minInputs(1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_HAMMER : null) - .progressBar(GT_UITextures.PROGRESSBAR_HAMMER, ProgressBar.Direction.DOWN) - .addSpecialTexture(78, 42, 20, 6, GT_UITextures.PROGRESSBAR_HAMMER_BASE) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_HAMMER : null) + .progressBar(GTUITextures.PROGRESSBAR_HAMMER, ProgressBar.Direction.DOWN) + .addSpecialTexture(78, 42, 20, 6, GTUITextures.PROGRESSBAR_HAMMER_BASE) .slotOverlaysSteam( - (index, isFluid, isOutput, isSpecial) -> !isOutput ? GT_UITextures.OVERLAY_SLOT_HAMMER_STEAM : null) - .progressBarSteam(GT_UITextures.PROGRESSBAR_HAMMER_STEAM) - .addSpecialTextureSteam(78, 42, 20, 6, GT_UITextures.PROGRESSBAR_HAMMER_BASE_STEAM) + (index, isFluid, isOutput, isSpecial) -> !isOutput ? GTUITextures.OVERLAY_SLOT_HAMMER_STEAM : null) + .progressBarSteam(GTUITextures.PROGRESSBAR_HAMMER_STEAM) + .addSpecialTextureSteam(78, 42, 20, 6, GTUITextures.PROGRESSBAR_HAMMER_BASE_STEAM) // Avoid steam machine being used as handler icon .neiHandlerInfo(builder -> builder.setDisplayStack(ItemList.Machine_LV_Hammer.get(1))) .build(); @@ -996,14 +996,14 @@ public final class RecipeMaps { .minInputs(1, 0) .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (isFluid) { - return GT_UITextures.OVERLAY_SLOT_UUA; + return GTUITextures.OVERLAY_SLOT_UUA; } if (!isOutput) { - return GT_UITextures.OVERLAY_SLOT_CENTRIFUGE; + return GTUITextures.OVERLAY_SLOT_CENTRIFUGE; } return null; }) - .progressBar(GT_UITextures.PROGRESSBAR_EXTRACT) + .progressBar(GTUITextures.PROGRESSBAR_EXTRACT) .build(); public static final RecipeMap massFabFakeRecipes = RecipeMapBuilder.of("gt.recipe.massfab") .maxIO(1, 0, 1, 1) @@ -1014,9 +1014,9 @@ public final class RecipeMaps { return null; } if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_UUM; + return GTUITextures.OVERLAY_SLOT_UUM; } - return GT_UITextures.OVERLAY_SLOT_UUA; + return GTUITextures.OVERLAY_SLOT_UUA; }) .build(); public static final RecipeMap dieselFuels = RecipeMapBuilder @@ -1083,20 +1083,20 @@ public final class RecipeMaps { .of("gt.recipe.largeelectrolyzer") .maxIO(1, 6, 1, 6) .disableRegisterNEI() - .recipeEmitter(GT_RecipeMapUtil::buildRecipeForMultiblock) + .recipeEmitter(GTRecipeMapUtil::buildRecipeForMultiblock) .build(); public static final RecipeMap centrifugeNonCellRecipes = RecipeMapBuilder .of("gt.recipe.largecentrifuge") .maxIO(2, 6, 1, 6) .disableOptimize() .disableRegisterNEI() - .recipeEmitter(GT_RecipeMapUtil::buildRecipeForMultiblock) + .recipeEmitter(GTRecipeMapUtil::buildRecipeForMultiblock) .build(); public static final RecipeMap mixerNonCellRecipes = RecipeMapBuilder.of("gt.recipe.largemixer") .maxIO(9, 4, 6, 4) .disableOptimize() .disableRegisterNEI() - .recipeEmitter(GT_RecipeMapUtil::buildRecipeForMultiblockNoCircuit) + .recipeEmitter(GTRecipeMapUtil::buildRecipeForMultiblockNoCircuit) .build(); public static final RecipeMap largeBoilerFakeFuels = RecipeMapBuilder .of("gt.recipe.largeboilerfakefuels", LargeBoilerFuelBackend::new) @@ -1110,20 +1110,20 @@ public final class RecipeMaps { .minInputs(2, 1) .slotOverlays( (index, isFluid, isOutput, - isSpecial) -> !isFluid && !isOutput && index == 0 ? GT_UITextures.OVERLAY_SLOT_LENS : null) - .progressBar(GT_UITextures.PROGRESSBAR_ASSEMBLE) + isSpecial) -> !isFluid && !isOutput && index == 0 ? GTUITextures.OVERLAY_SLOT_LENS : null) + .progressBar(GTUITextures.PROGRESSBAR_ASSEMBLE) .disableOptimize() .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("GT5U.nei.tier")) .build(); public static final RecipeMap pcbFactoryRecipes = RecipeMapBuilder.of("gt.recipe.pcbfactory") .maxIO(6, 9, 3, 0) .minInputs(3, 1) - .progressBar(GT_UITextures.PROGRESSBAR_ASSEMBLE) + .progressBar(GTUITextures.PROGRESSBAR_ASSEMBLE) .disableOptimize() .neiRecipeComparator( Comparator - .comparing(recipe -> recipe.getMetadataOrDefault(PCBFactoryTierKey.INSTANCE, 1)) - .thenComparing(GT_Recipe::compareTo)) + .comparing(recipe -> recipe.getMetadataOrDefault(PCBFactoryTierKey.INSTANCE, 1)) + .thenComparing(GTRecipe::compareTo)) .build(); public static final RecipeMap purificationClarifierRecipes = RecipeMapBuilder .of("gt.recipe.purificationplantclarifier") @@ -1136,12 +1136,12 @@ public final class RecipeMaps { .of("gt.recipe.purificationplantozonation") .maxIO(0, 4, 2, 1) .minInputs(0, 2) - .progressBar(GT_UITextures.PROGRESSBAR_BATH) + .progressBar(GTUITextures.PROGRESSBAR_BATH) .neiRecipeComparator( Comparator - .comparing( + .comparing( recipe -> recipe.getMetadataOrDefault(PurificationPlantBaseChanceKey.INSTANCE, 0.0f)) - .thenComparing(GT_Recipe::compareTo)) + .thenComparing(GTRecipe::compareTo)) .frontend(PurificationUnitOzonationFrontend::new) .disableOptimize() .build(); @@ -1149,12 +1149,12 @@ public final class RecipeMaps { .of("gt.recipe.purificationplantflocculation") .maxIO(0, 3, 2, 2) .minInputs(0, 1) - .progressBar(GT_UITextures.PROGRESSBAR_BATH) + .progressBar(GTUITextures.PROGRESSBAR_BATH) .neiRecipeComparator( Comparator - .comparing( + .comparing( recipe -> recipe.getMetadataOrDefault(PurificationPlantBaseChanceKey.INSTANCE, 0.0f)) - .thenComparing(GT_Recipe::compareTo)) + .thenComparing(GTRecipe::compareTo)) .frontend(PurificationUnitFlocculatorFrontend::new) .disableOptimize() .build(); @@ -1163,7 +1163,7 @@ public final class RecipeMaps { .of("gt.recipe.purificationplantphadjustment") .maxIO(0, 0, 1, 1) .minInputs(0, 1) - .progressBar(GT_UITextures.PROGRESSBAR_MIXER) + .progressBar(GTUITextures.PROGRESSBAR_MIXER) .frontend(PurificationUnitPhAdjustmentFrontend::new) .disableOptimize() .build(); @@ -1172,7 +1172,7 @@ public final class RecipeMaps { .of("gt.recipe.purificationplantplasmaheating") .maxIO(0, 0, 1, 1) .minInputs(0, 1) - .progressBar(GT_UITextures.PROGRESSBAR_BOILER_HEAT) + .progressBar(GTUITextures.PROGRESSBAR_BOILER_HEAT) .frontend(PurificationUnitPlasmaHeaterFrontend::new) .disableOptimize() .build(); @@ -1180,7 +1180,7 @@ public final class RecipeMaps { .of("gt.recipe.purificationplantuvtreatment") .maxIO(9, 0, 1, 1) .minInputs(0, 1) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW) + .progressBar(GTUITextures.PROGRESSBAR_ARROW) .frontend(PurificationUnitLaserFrontend::new) .disableOptimize() .build(); @@ -1188,14 +1188,14 @@ public final class RecipeMaps { .of("gt.recipe.purificationplantdegasifier") .maxIO(0, 3, 1, 2) .minInputs(0, 1) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW) + .progressBar(GTUITextures.PROGRESSBAR_ARROW) .disableOptimize() .build(); public static final RecipeMap purificationParticleExtractionRecipes = RecipeMapBuilder .of("gt.recipe.purificationplantquarkextractor") .maxIO(2, 2, 1, 2) .minInputs(0, 1) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW) + .progressBar(GTUITextures.PROGRESSBAR_ARROW) .frontend(PurificationUnitParticleExtractorFrontend::new) .disableOptimize() .build(); @@ -1203,10 +1203,10 @@ public final class RecipeMaps { .maxIO(1, 1, 0, 0) .minInputs(1, 0) .disableOptimize() - .logo(GT_UITextures.PICTURE_RADIATION_WARNING) + .logo(GTUITextures.PICTURE_RADIATION_WARNING) .logoPos(152, 41) .neiRecipeBackgroundSize(170, 60) - .neiHandlerInfo(builder -> builder.setDisplayStack(GT_ModHandler.getIC2Item("nuclearReactor", 1, null))) + .neiHandlerInfo(builder -> builder.setDisplayStack(GTModHandler.getIC2Item("nuclearReactor", 1, null))) .build(); static { diff --git a/src/main/java/gregtech/api/recipe/check/ResultInsufficientHeat.java b/src/main/java/gregtech/api/recipe/check/ResultInsufficientHeat.java index 9383abad9d..18edab74e7 100644 --- a/src/main/java/gregtech/api/recipe/check/ResultInsufficientHeat.java +++ b/src/main/java/gregtech/api/recipe/check/ResultInsufficientHeat.java @@ -11,7 +11,7 @@ import net.minecraft.util.StatCollector; import org.jetbrains.annotations.NotNull; import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class ResultInsufficientHeat implements CheckRecipeResult { @@ -38,7 +38,7 @@ public class ResultInsufficientHeat implements CheckRecipeResult { return Objects.requireNonNull( StatCollector.translateToLocalFormatted( "GT5U.gui.text.insufficient_heat", - GT_Utility.formatNumbers(required), + GTUtility.formatNumbers(required), HeatingCoilLevel.getDisplayNameFromHeat(required, true))); } diff --git a/src/main/java/gregtech/api/recipe/check/ResultInsufficientMachineTier.java b/src/main/java/gregtech/api/recipe/check/ResultInsufficientMachineTier.java index 1fb2183edb..2f144049f1 100644 --- a/src/main/java/gregtech/api/recipe/check/ResultInsufficientMachineTier.java +++ b/src/main/java/gregtech/api/recipe/check/ResultInsufficientMachineTier.java @@ -10,7 +10,7 @@ import net.minecraft.util.StatCollector; import org.jetbrains.annotations.NotNull; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class ResultInsufficientMachineTier implements CheckRecipeResult { @@ -37,7 +37,7 @@ public class ResultInsufficientMachineTier implements CheckRecipeResult { return Objects.requireNonNull( StatCollector.translateToLocalFormatted( "GT5U.gui.text.insufficient_machine_tier", - GT_Utility.formatNumbers(required))); + GTUtility.formatNumbers(required))); } @Override diff --git a/src/main/java/gregtech/api/recipe/check/ResultInsufficientPower.java b/src/main/java/gregtech/api/recipe/check/ResultInsufficientPower.java index 45b50aebf6..33b86ecbf8 100644 --- a/src/main/java/gregtech/api/recipe/check/ResultInsufficientPower.java +++ b/src/main/java/gregtech/api/recipe/check/ResultInsufficientPower.java @@ -10,7 +10,7 @@ import net.minecraft.util.StatCollector; import org.jetbrains.annotations.NotNull; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class ResultInsufficientPower implements CheckRecipeResult { @@ -37,8 +37,8 @@ public class ResultInsufficientPower implements CheckRecipeResult { return Objects.requireNonNull( StatCollector.translateToLocalFormatted( "GT5U.gui.text.insufficient_power", - GT_Utility.formatNumbers(required), - GT_Utility.getColoredTierNameFromVoltage(required))); + GTUtility.formatNumbers(required), + GTUtility.getColoredTierNameFromVoltage(required))); } @Override diff --git a/src/main/java/gregtech/api/recipe/check/ResultInsufficientStartupPower.java b/src/main/java/gregtech/api/recipe/check/ResultInsufficientStartupPower.java index c33e9bfff1..9adf82aa28 100644 --- a/src/main/java/gregtech/api/recipe/check/ResultInsufficientStartupPower.java +++ b/src/main/java/gregtech/api/recipe/check/ResultInsufficientStartupPower.java @@ -10,7 +10,7 @@ import net.minecraft.util.StatCollector; import org.jetbrains.annotations.NotNull; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class ResultInsufficientStartupPower implements CheckRecipeResult { @@ -37,7 +37,7 @@ public class ResultInsufficientStartupPower implements CheckRecipeResult { return Objects.requireNonNull( StatCollector.translateToLocalFormatted( "GT5U.gui.text.insufficient_startup_power", - GT_Utility.formatNumbers(required))); + GTUtility.formatNumbers(required))); } @Override diff --git a/src/main/java/gregtech/api/recipe/check/ResultInsufficientStartupPowerBigInt.java b/src/main/java/gregtech/api/recipe/check/ResultInsufficientStartupPowerBigInt.java index f4b186c9a1..32aab79465 100644 --- a/src/main/java/gregtech/api/recipe/check/ResultInsufficientStartupPowerBigInt.java +++ b/src/main/java/gregtech/api/recipe/check/ResultInsufficientStartupPowerBigInt.java @@ -1,6 +1,6 @@ package gregtech.api.recipe.check; -import static util.Util.toStandardForm; +import static kekztech.util.Util.toStandardForm; import java.math.BigInteger; import java.util.Objects; diff --git a/src/main/java/gregtech/api/recipe/check/SingleRecipeCheck.java b/src/main/java/gregtech/api/recipe/check/SingleRecipeCheck.java index 8683812d84..d339f8acfd 100644 --- a/src/main/java/gregtech/api/recipe/check/SingleRecipeCheck.java +++ b/src/main/java/gregtech/api/recipe/check/SingleRecipeCheck.java @@ -22,11 +22,11 @@ import net.minecraftforge.fluids.FluidStack; import com.google.common.collect.ImmutableMap; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.GT_Utility.ItemId; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.GTUtility.ItemId; /** * Used by machines that are locked to a single recipe, for faster recipe check. @@ -37,10 +37,10 @@ import gregtech.api.util.GT_Utility.ItemId; *

    * {@link gregtech.api.recipe.FindRecipeQuery#find Find recipe from recipemap}: O(NCR) * where N = number of machine inputs, C = average amount of recipe candidates found for specific input, - * R = computation time to {@link GT_Recipe#isRecipeInputEqual check if inputs match to recipe} + * R = computation time to {@link GTRecipe#isRecipeInputEqual check if inputs match to recipe} *
*
    - * {@link GT_Recipe#isRecipeInputEqual Check if inputs match to recipe}: O(NM) + * {@link GTRecipe#isRecipeInputEqual Check if inputs match to recipe}: O(NM) * where N = number of machine inputs, M = number of recipe inputs *
* @@ -52,7 +52,7 @@ import gregtech.api.util.GT_Utility.ItemId; public class SingleRecipeCheck { @Nonnull - private final GT_Recipe recipe; + private final GTRecipe recipe; @Nonnull private final RecipeMap recipeMap; @Nonnull @@ -63,7 +63,7 @@ public class SingleRecipeCheck { private final int totalItemCost; private final int totalFluidCost; - private SingleRecipeCheck(@Nonnull GT_Recipe recipe, @Nonnull RecipeMap recipeMap, + private SingleRecipeCheck(@Nonnull GTRecipe recipe, @Nonnull RecipeMap recipeMap, @Nonnull ImmutableMap itemCost, @Nonnull ImmutableMap fluidCost) { this.recipe = recipe; this.recipeMap = recipeMap; @@ -81,7 +81,7 @@ public class SingleRecipeCheck { } @Nonnull - public GT_Recipe getRecipe() { + public GTRecipe getRecipe() { return recipe; } @@ -188,14 +188,14 @@ public class SingleRecipeCheck { // At load time we do a recipe check again, so in case the recipe is gone, we can stop tracking. // Of course the next step would be auto migrating to new recipe (if any), but given // we don't yet have a mean to uniquely name a recipe, this will have to make do. - // Consider move serialization code to GT_Recipe once this has been proven to work + // Consider move serialization code to GTRecipe once this has been proven to work NBTTagCompound tag = new NBTTagCompound(); tag.setString("recipemap", recipeMap.unlocalizedName); if (recipe.mInputs != null) { - tag.setTag("inputs", writeList(recipe.mInputs, GT_Utility::saveItem)); + tag.setTag("inputs", writeList(recipe.mInputs, GTUtility::saveItem)); } if (recipe.mOutputs != null) { - tag.setTag("outputs", writeList(recipe.mOutputs, GT_Utility::saveItem)); + tag.setTag("outputs", writeList(recipe.mOutputs, GTUtility::saveItem)); } if (recipe.mChances != null) { tag.setIntArray("chances", recipe.mChances); @@ -270,45 +270,44 @@ public class SingleRecipeCheck { return null; } - GT_Recipe foundRecipe = tryFindRecipe(mapToUse, tag); + GTRecipe foundRecipe = tryFindRecipe(mapToUse, tag); if (foundRecipe == null) return null; return new SingleRecipeCheck(foundRecipe, mapToUse, loadItemCost(tag), loadFluidCost(tag)); } private static ImmutableMap loadFluidCost(NBTTagCompound tag) { - return GT_Utility.streamCompounds(tag.getTagList("fluidCost", Constants.NBT.TAG_COMPOUND)) + return GTUtility.streamCompounds(tag.getTagList("fluidCost", Constants.NBT.TAG_COMPOUND)) .collect( - GT_Utility + GTUtility .toImmutableMapSerial(t -> FluidRegistry.getFluid(t.getString("id")), t -> t.getInteger("count"))); } private static ImmutableMap loadItemCost(NBTTagCompound tag) { - return GT_Utility.streamCompounds(tag.getTagList("itemCost", Constants.NBT.TAG_COMPOUND)) + return GTUtility.streamCompounds(tag.getTagList("itemCost", Constants.NBT.TAG_COMPOUND)) .collect( - GT_Utility - .toImmutableMapSerial(t -> ItemId.create(t.getCompoundTag("id")), t -> t.getInteger("count"))); + GTUtility.toImmutableMapSerial(t -> ItemId.create(t.getCompoundTag("id")), t -> t.getInteger("count"))); } - private static GT_Recipe tryFindRecipe(@Nonnull RecipeMap recipeMap, NBTTagCompound tag) { - ItemStack[] inputs = GT_Utility.streamCompounds(tag.getTagList("inputs", Constants.NBT.TAG_COMPOUND)) - .map(GT_Utility::loadItem) + private static GTRecipe tryFindRecipe(@Nonnull RecipeMap recipeMap, NBTTagCompound tag) { + ItemStack[] inputs = GTUtility.streamCompounds(tag.getTagList("inputs", Constants.NBT.TAG_COMPOUND)) + .map(GTUtility::loadItem) .toArray(ItemStack[]::new); - ItemStack[] outputs = GT_Utility.streamCompounds(tag.getTagList("outputs", Constants.NBT.TAG_COMPOUND)) - .map(GT_Utility::loadItem) + ItemStack[] outputs = GTUtility.streamCompounds(tag.getTagList("outputs", Constants.NBT.TAG_COMPOUND)) + .map(GTUtility::loadItem) .toArray(ItemStack[]::new); - FluidStack[] fInputs = GT_Utility.streamCompounds(tag.getTagList("fInputs", Constants.NBT.TAG_COMPOUND)) + FluidStack[] fInputs = GTUtility.streamCompounds(tag.getTagList("fInputs", Constants.NBT.TAG_COMPOUND)) .map(FluidStack::loadFluidStackFromNBT) .toArray(FluidStack[]::new); - FluidStack[] fOutputs = GT_Utility.streamCompounds(tag.getTagList("fOutputs", Constants.NBT.TAG_COMPOUND)) + FluidStack[] fOutputs = GTUtility.streamCompounds(tag.getTagList("fOutputs", Constants.NBT.TAG_COMPOUND)) .map(FluidStack::loadFluidStackFromNBT) .toArray(FluidStack[]::new); int eut = tag.getInteger("eut"); - GT_Recipe found = recipeMap.findRecipe(null, false, GT_Values.V[GT_Utility.getTier(eut)], fInputs, inputs); + GTRecipe found = recipeMap.findRecipe(null, false, GTValues.V[GTUtility.getTier(eut)], fInputs, inputs); int[] chances = tag.getIntArray("chances"); if (chances.length == 0) chances = null; - if (found == null || !GT_Utility.equals(inputs, found.mInputs) + if (found == null || !GTUtility.equals(inputs, found.mInputs) || !Arrays.equals(fInputs, found.mFluidInputs) - || !GT_Utility.equals(outputs, found.mOutputs) + || !GTUtility.equals(outputs, found.mOutputs) || !Arrays.equals(fOutputs, found.mFluidOutputs) || !Arrays.equals(chances, found.mChances) || found.mDuration != tag.getInteger("duration") @@ -350,7 +349,7 @@ public class SingleRecipeCheck { private Map afterItems; private Map afterFluids; - private GT_Recipe recipe; + private GTRecipe recipe; private Builder(@Nonnull RecipeMap recipeMap) { this.recipeMap = recipeMap; @@ -368,7 +367,7 @@ public class SingleRecipeCheck { return this; } - public Builder setRecipe(@Nonnull GT_Recipe recipe) { + public Builder setRecipe(@Nonnull GTRecipe recipe) { this.recipe = recipe; return this; } diff --git a/src/main/java/gregtech/api/recipe/maps/AssemblerBackend.java b/src/main/java/gregtech/api/recipe/maps/AssemblerBackend.java index cfa25e9fe2..8273c895b2 100644 --- a/src/main/java/gregtech/api/recipe/maps/AssemblerBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/AssemblerBackend.java @@ -9,7 +9,7 @@ import net.minecraftforge.fluids.FluidStack; import gregtech.api.enums.ItemList; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; @ParametersAreNonnullByDefault @@ -21,7 +21,7 @@ public class AssemblerBackend extends RecipeMapBackend { } @Override - protected GT_Recipe modifyFoundRecipe(GT_Recipe recipe, ItemStack[] items, FluidStack[] fluids, + protected GTRecipe modifyFoundRecipe(GTRecipe recipe, ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) { for (ItemStack item : items) { if (ItemList.Paper_Printed_Pages.isStackEqual(item, false, true)) { diff --git a/src/main/java/gregtech/api/recipe/maps/AssemblyLineFrontend.java b/src/main/java/gregtech/api/recipe/maps/AssemblyLineFrontend.java index 3d56c96b82..4bf3f7f56e 100644 --- a/src/main/java/gregtech/api/recipe/maps/AssemblyLineFrontend.java +++ b/src/main/java/gregtech/api/recipe/maps/AssemblyLineFrontend.java @@ -10,7 +10,7 @@ import com.gtnewhorizons.modularui.api.math.Pos2d; import com.gtnewhorizons.modularui.api.screen.ModularWindow; import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.recipe.RecipeMapFrontend; @@ -52,21 +52,21 @@ public class AssemblyLineFrontend extends RecipeMapFrontend { int bar2Width = 18; List> splitProgress = splitProgress(progressSupplier, bar1Width, bar2Width); builder.widget( - new ProgressBar().setTexture(GT_UITextures.PROGRESSBAR_ASSEMBLY_LINE_1, bar1Width) + new ProgressBar().setTexture(GTUITextures.PROGRESSBAR_ASSEMBLY_LINE_1, bar1Width) .setDirection(ProgressBar.Direction.RIGHT) .setProgress(splitProgress.get(0)) .setSynced(false, false) .setPos(new Pos2d(88, 8).add(windowOffset)) .setSize(bar1Width, 72)); builder.widget( - new ProgressBar().setTexture(GT_UITextures.PROGRESSBAR_ASSEMBLY_LINE_2, bar2Width) + new ProgressBar().setTexture(GTUITextures.PROGRESSBAR_ASSEMBLY_LINE_2, bar2Width) .setDirection(ProgressBar.Direction.RIGHT) .setProgress(splitProgress.get(1)) .setSynced(false, false) .setPos(new Pos2d(124, 8).add(windowOffset)) .setSize(bar2Width, 72)); builder.widget( - new ProgressBar().setTexture(GT_UITextures.PROGRESSBAR_ASSEMBLY_LINE_3, 18) + new ProgressBar().setTexture(GTUITextures.PROGRESSBAR_ASSEMBLY_LINE_3, 18) .setDirection(ProgressBar.Direction.UP) .setProgress(progressSupplier) .setSynced(false, false) diff --git a/src/main/java/gregtech/api/recipe/maps/FluidCannerBackend.java b/src/main/java/gregtech/api/recipe/maps/FluidCannerBackend.java index e5681f59aa..9bbe087e54 100644 --- a/src/main/java/gregtech/api/recipe/maps/FluidCannerBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/FluidCannerBackend.java @@ -8,11 +8,11 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidContainerItem; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; @ParametersAreNonnullByDefault @@ -24,17 +24,17 @@ public class FluidCannerBackend extends RecipeMapBackend { } @Override - protected GT_Recipe findFallback(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) { + protected GTRecipe findFallback(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) { if (items.length == 0 || items[0] == null) { return null; } if (fluids.length > 0 && fluids[0] != null) { - ItemStack filledItem = GT_Utility.fillFluidContainer(fluids[0], items[0], false, true); - FluidStack fluidToTake = GT_Utility.getFluidForFilledItem(filledItem, true); + ItemStack filledItem = GTUtility.fillFluidContainer(fluids[0], items[0], false, true); + FluidStack fluidToTake = GTUtility.getFluidForFilledItem(filledItem, true); if (fluidToTake != null) { - return GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1, items[0])) + return GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1, items[0])) .itemOutputs(filledItem) .fluidInputs(fluidToTake) .duration(Math.max(fluidToTake.amount / 64, 16)) @@ -45,11 +45,11 @@ public class FluidCannerBackend extends RecipeMapBackend { .orElse(null); } } - FluidStack drainedFluid = GT_Utility.getFluidForFilledItem(items[0], true); + FluidStack drainedFluid = GTUtility.getFluidForFilledItem(items[0], true); if (drainedFluid != null) { - return GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1, items[0])) - .itemOutputs(GT_Utility.getContainerItem(items[0], true)) + return GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1, items[0])) + .itemOutputs(GTUtility.getContainerItem(items[0], true)) .fluidOutputs(drainedFluid) .duration(Math.max(drainedFluid.amount / 64, 16)) .eut(1) diff --git a/src/main/java/gregtech/api/recipe/maps/FormingPressBackend.java b/src/main/java/gregtech/api/recipe/maps/FormingPressBackend.java index ce3ea3e89c..ccf6e63c29 100644 --- a/src/main/java/gregtech/api/recipe/maps/FormingPressBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/FormingPressBackend.java @@ -7,12 +7,12 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; /** @@ -27,7 +27,7 @@ public class FormingPressBackend extends RecipeMapBackend { } @Override - protected GT_Recipe modifyFoundRecipe(GT_Recipe recipe, ItemStack[] items, FluidStack[] fluids, + protected GTRecipe modifyFoundRecipe(GTRecipe recipe, ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) { for (ItemStack mold : items) { if (ItemList.Shape_Mold_Credit.isStackEqual(mold, false, true)) { @@ -46,7 +46,7 @@ public class FormingPressBackend extends RecipeMapBackend { } @Override - protected GT_Recipe findFallback(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) { + protected GTRecipe findFallback(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) { if (items.length < 2) { return null; } @@ -54,16 +54,16 @@ public class FormingPressBackend extends RecipeMapBackend { } @Nullable - private GT_Recipe findRenamingRecipe(ItemStack[] inputs) { + private GTRecipe findRenamingRecipe(ItemStack[] inputs) { ItemStack mold = findNameMoldIndex(inputs); if (mold == null) return null; ItemStack input = findStackToRename(inputs, mold); if (input == null) return null; - ItemStack output = GT_Utility.copyAmount(1, input); + ItemStack output = GTUtility.copyAmount(1, input); if (output == null) return null; output.setStackDisplayName(mold.getDisplayName()); - return GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(0, mold), GT_Utility.copyAmount(1, input)) + return GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(0, mold), GTUtility.copyAmount(1, input)) .itemOutputs(output) .duration(128) .eut(8) diff --git a/src/main/java/gregtech/api/recipe/maps/FuelBackend.java b/src/main/java/gregtech/api/recipe/maps/FuelBackend.java index 49c989e174..e5f0ab40d1 100644 --- a/src/main/java/gregtech/api/recipe/maps/FuelBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/FuelBackend.java @@ -12,23 +12,23 @@ import net.minecraftforge.fluids.FluidStack; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class FuelBackend extends RecipeMapBackend { - private final Map recipesByFluidInput = new HashMap<>(); + private final Map recipesByFluidInput = new HashMap<>(); public FuelBackend(RecipeMapBackendPropertiesBuilder propertiesBuilder) { super(propertiesBuilder.disableOptimize()); } @Override - protected Collection doAdd(GT_RecipeBuilder builder) { + protected Collection doAdd(GTRecipeBuilder builder) { if (builder.getDuration() == -1) { builder.duration(0); } @@ -39,11 +39,11 @@ public class FuelBackend extends RecipeMapBackend { } @Override - public GT_Recipe compileRecipe(GT_Recipe recipe) { + public GTRecipe compileRecipe(GTRecipe recipe) { super.compileRecipe(recipe); - if (recipe.mInputs != null && GT_Utility.getNonnullElementCount(recipe.mInputs) == 1 - && (recipe.mFluidInputs == null || GT_Utility.getNonnullElementCount(recipe.mFluidInputs) == 0)) { - FluidStack fluidStack = GT_Utility.getFluidForFilledItem(recipe.mInputs[0], true); + if (recipe.mInputs != null && GTUtility.getNonnullElementCount(recipe.mInputs) == 1 + && (recipe.mFluidInputs == null || GTUtility.getNonnullElementCount(recipe.mFluidInputs) == 0)) { + FluidStack fluidStack = GTUtility.getFluidForFilledItem(recipe.mInputs[0], true); if (fluidStack != null) { fluidStack.amount = 0; recipesByFluidInput.put( @@ -51,9 +51,9 @@ public class FuelBackend extends RecipeMapBackend { .getName(), recipe); } - } else if ((recipe.mInputs == null || GT_Utility.getNonnullElementCount(recipe.mInputs) == 0) + } else if ((recipe.mInputs == null || GTUtility.getNonnullElementCount(recipe.mInputs) == 0) && recipe.mFluidInputs != null - && GT_Utility.getNonnullElementCount(recipe.mFluidInputs) >= 1 + && GTUtility.getNonnullElementCount(recipe.mFluidInputs) >= 1 && recipe.mFluidInputs[0] != null) { recipesByFluidInput.put( recipe.mFluidInputs[0].getFluid() @@ -64,12 +64,12 @@ public class FuelBackend extends RecipeMapBackend { } @Nullable - public GT_Recipe findFuel(FluidStack fluidStack) { + public GTRecipe findFuel(FluidStack fluidStack) { return findFuel(fluidStack.getFluid()); } @Nullable - public GT_Recipe findFuel(Fluid fluid) { + public GTRecipe findFuel(Fluid fluid) { return recipesByFluidInput.get(fluid.getName()); } } diff --git a/src/main/java/gregtech/api/recipe/maps/FurnaceBackend.java b/src/main/java/gregtech/api/recipe/maps/FurnaceBackend.java index c4095eeb4e..e501db3c40 100644 --- a/src/main/java/gregtech/api/recipe/maps/FurnaceBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/FurnaceBackend.java @@ -6,11 +6,11 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; /** @@ -25,18 +25,18 @@ public class FurnaceBackend extends NonGTBackend { } @Override - protected GT_Recipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot, - @Nullable GT_Recipe cachedRecipe) { + protected GTRecipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot, + @Nullable GTRecipe cachedRecipe) { if (items.length == 0 || items[0] == null) { return null; } if (cachedRecipe != null && cachedRecipe.isRecipeInputEqual(false, true, fluids, items)) { return cachedRecipe; } - ItemStack output = GT_ModHandler.getSmeltingOutput(items[0], false, null); + ItemStack output = GTModHandler.getSmeltingOutput(items[0], false, null); return output == null ? null - : GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1, items[0])) + : GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1, items[0])) .itemOutputs(output) .duration(128) .eut(4) @@ -47,6 +47,6 @@ public class FurnaceBackend extends NonGTBackend { @Override public boolean containsInput(ItemStack item) { - return GT_ModHandler.getSmeltingOutput(item, false, null) != null; + return GTModHandler.getSmeltingOutput(item, false, null) != null; } } diff --git a/src/main/java/gregtech/api/recipe/maps/LargeBoilerFuelBackend.java b/src/main/java/gregtech/api/recipe/maps/LargeBoilerFuelBackend.java index b38b66e41b..a27e425efb 100644 --- a/src/main/java/gregtech/api/recipe/maps/LargeBoilerFuelBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/LargeBoilerFuelBackend.java @@ -9,11 +9,11 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; @SuppressWarnings({ "unused", "UnusedReturnValue" }) @@ -46,11 +46,11 @@ public class LargeBoilerFuelBackend extends RecipeMapBackend { return ALLOWED_SOLID_FUELS.add(itemregistryName + ":" + meta); } - public GT_Recipe addDenseLiquidRecipe(GT_Recipe recipe) { + public GTRecipe addDenseLiquidRecipe(GTRecipe recipe) { return addRecipe(recipe, ((double) recipe.mSpecialValue) / 10, false); } - public GT_Recipe addDieselRecipe(GT_Recipe recipe) { + public GTRecipe addDieselRecipe(GTRecipe recipe) { return addRecipe(recipe, ((double) recipe.mSpecialValue) / 40, false); } @@ -61,12 +61,12 @@ public class LargeBoilerFuelBackend extends RecipeMapBackend { } @Nullable - public GT_Recipe addSolidRecipe(@Nullable ItemStack fuelItemStack) { + public GTRecipe addSolidRecipe(@Nullable ItemStack fuelItemStack) { if (fuelItemStack == null) { return null; } if (!addedGeneralDesc) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .duration(1) .eut(1) .specialValue(1) @@ -82,17 +82,17 @@ public class LargeBoilerFuelBackend extends RecipeMapBackend { String registryName = Item.itemRegistry.getNameForObject(fuelItemStack.getItem()); boolean isHighTierAllowed = ALLOWED_SOLID_FUELS.contains(registryName + ":" + fuelItemStack.getItemDamage()); - return GT_Values.RA.stdBuilder() + return GTValues.RA.stdBuilder() .itemInputs(fuelItemStack) .duration(1) .eut(0) - .specialValue(GT_ModHandler.getFuelValue(fuelItemStack) / 1600) + .specialValue(GTModHandler.getFuelValue(fuelItemStack) / 1600) .build() - .map(r -> addRecipe(r, ((double) GT_ModHandler.getFuelValue(fuelItemStack)) / 1600, isHighTierAllowed)) + .map(r -> addRecipe(r, ((double) GTModHandler.getFuelValue(fuelItemStack)) / 1600, isHighTierAllowed)) .orElse(null); } - private GT_Recipe addRecipe(GT_Recipe recipe, double baseBurnTime, boolean isHighTierAllowed) { + private GTRecipe addRecipe(GTRecipe recipe, double baseBurnTime, boolean isHighTierAllowed) { // Some recipes will have a burn time like 15.9999999 and % always rounds down double floatErrorCorrection = 0.0001; diff --git a/src/main/java/gregtech/api/recipe/maps/MicrowaveBackend.java b/src/main/java/gregtech/api/recipe/maps/MicrowaveBackend.java index 53623cb0c7..ae4b5f5d35 100644 --- a/src/main/java/gregtech/api/recipe/maps/MicrowaveBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/MicrowaveBackend.java @@ -1,8 +1,8 @@ package gregtech.api.recipe.maps; -import static gregtech.api.enums.GT_Values.W; -import static gregtech.api.util.GT_RecipeConstants.EXPLODE; -import static gregtech.api.util.GT_RecipeConstants.ON_FIRE; +import static gregtech.api.enums.GTValues.W; +import static gregtech.api.util.GTRecipeConstants.EXPLODE; +import static gregtech.api.util.GTRecipeConstants.ON_FIRE; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -13,18 +13,18 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntityFurnace; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.SubTag; import gregtech.api.objects.ItemData; import gregtech.api.objects.MaterialStack; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; /** @@ -39,8 +39,8 @@ public class MicrowaveBackend extends NonGTBackend { } @Override - protected GT_Recipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot, - @Nullable GT_Recipe cachedRecipe) { + protected GTRecipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot, + @Nullable GTRecipe cachedRecipe) { if (items.length == 0 || items[0] == null) { return null; } @@ -48,12 +48,12 @@ public class MicrowaveBackend extends NonGTBackend { return cachedRecipe; } - ItemStack output = GT_ModHandler.getSmeltingOutput(items[0], false, null); + ItemStack output = GTModHandler.getSmeltingOutput(items[0], false, null); - if (GT_Utility.areStacksEqual(items[0], new ItemStack(Items.book, 1, W))) { - return GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1, items[0])) - .itemOutputs(GT_Utility.getWrittenBook("Manual_Microwave", ItemList.Book_Written_03.get(1))) + if (GTUtility.areStacksEqual(items[0], new ItemStack(Items.book, 1, W))) { + return GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1, items[0])) + .itemOutputs(GTUtility.getWrittenBook("Manual_Microwave", ItemList.Book_Written_03.get(1))) .duration(32) .eut(4) .noOptimize() @@ -63,37 +63,36 @@ public class MicrowaveBackend extends NonGTBackend { // Check Container Item of Input since it is around the Input, then the Input itself, then Container Item of // Output and last check the Output itself - for (ItemStack item : new ItemStack[] { GT_Utility.getContainerItem(items[0], true), items[0], - GT_Utility.getContainerItem(output, true), output }) { + for (ItemStack item : new ItemStack[] { GTUtility.getContainerItem(items[0], true), items[0], + GTUtility.getContainerItem(output, true), output }) { if (item == null) continue; - if (GT_Utility.areStacksEqual(item, new ItemStack(Blocks.netherrack, 1, W), true) - || GT_Utility.areStacksEqual(item, new ItemStack(Blocks.tnt, 1, W), true) - || GT_Utility.areStacksEqual(item, new ItemStack(Items.egg, 1, W), true) - || GT_Utility.areStacksEqual(item, new ItemStack(Items.firework_charge, 1, W), true) - || GT_Utility.areStacksEqual(item, new ItemStack(Items.fireworks, 1, W), true) - || GT_Utility.areStacksEqual(item, new ItemStack(Items.fire_charge, 1, W), true)) { - GT_Log.exp - .println("Microwave Explosion due to TNT || EGG || FIREWORKCHARGE || FIREWORK || FIRE CHARGE"); - return GT_RecipeBuilder.empty() + if (GTUtility.areStacksEqual(item, new ItemStack(Blocks.netherrack, 1, W), true) + || GTUtility.areStacksEqual(item, new ItemStack(Blocks.tnt, 1, W), true) + || GTUtility.areStacksEqual(item, new ItemStack(Items.egg, 1, W), true) + || GTUtility.areStacksEqual(item, new ItemStack(Items.firework_charge, 1, W), true) + || GTUtility.areStacksEqual(item, new ItemStack(Items.fireworks, 1, W), true) + || GTUtility.areStacksEqual(item, new ItemStack(Items.fire_charge, 1, W), true)) { + GTLog.exp.println("Microwave Explosion due to TNT || EGG || FIREWORKCHARGE || FIREWORK || FIRE CHARGE"); + return GTRecipeBuilder.empty() .metadata(EXPLODE, true) .build() .orElse(null); } - ItemData itemData = GT_OreDictUnificator.getItemData(item); + ItemData itemData = GTOreDictUnificator.getItemData(item); if (itemData != null) { if (itemData.mMaterial != null && itemData.mMaterial.mMaterial != null) { if (itemData.mMaterial.mMaterial.contains(SubTag.METAL) || itemData.mMaterial.mMaterial.contains(SubTag.EXPLOSIVE)) { - GT_Log.exp.println("Microwave Explosion due to METAL insertion"); - return GT_RecipeBuilder.empty() + GTLog.exp.println("Microwave Explosion due to METAL insertion"); + return GTRecipeBuilder.empty() .metadata(EXPLODE, true) .build() .orElse(null); } if (itemData.mMaterial.mMaterial.contains(SubTag.FLAMMABLE)) { - GT_Log.exp.println("Microwave INFLAMMATION due to FLAMMABLE insertion"); - return GT_RecipeBuilder.empty() + GTLog.exp.println("Microwave INFLAMMATION due to FLAMMABLE insertion"); + return GTRecipeBuilder.empty() .metadata(ON_FIRE, true) .build() .orElse(null); @@ -103,15 +102,15 @@ public class MicrowaveBackend extends NonGTBackend { if (materialStack == null) continue; if (materialStack.mMaterial.contains(SubTag.METAL) || materialStack.mMaterial.contains(SubTag.EXPLOSIVE)) { - GT_Log.exp.println("Microwave Explosion due to METAL insertion"); - return GT_RecipeBuilder.empty() + GTLog.exp.println("Microwave Explosion due to METAL insertion"); + return GTRecipeBuilder.empty() .metadata(EXPLODE, true) .build() .orElse(null); } if (materialStack.mMaterial.contains(SubTag.FLAMMABLE)) { - GT_Log.exp.println("Microwave INFLAMMATION due to FLAMMABLE insertion"); - return GT_RecipeBuilder.empty() + GTLog.exp.println("Microwave INFLAMMATION due to FLAMMABLE insertion"); + return GTRecipeBuilder.empty() .metadata(ON_FIRE, true) .build() .orElse(null); @@ -119,8 +118,8 @@ public class MicrowaveBackend extends NonGTBackend { } } if (TileEntityFurnace.getItemBurnTime(item) > 0) { - GT_Log.exp.println("Microwave INFLAMMATION due to BURNABLE insertion"); - return GT_RecipeBuilder.empty() + GTLog.exp.println("Microwave INFLAMMATION due to BURNABLE insertion"); + return GTRecipeBuilder.empty() .metadata(ON_FIRE, true) .build() .orElse(null); @@ -128,8 +127,8 @@ public class MicrowaveBackend extends NonGTBackend { } return output == null ? null - : GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1, items[0])) + : GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1, items[0])) .itemOutputs(output) .duration(32) .eut(4) @@ -140,6 +139,6 @@ public class MicrowaveBackend extends NonGTBackend { @Override public boolean containsInput(ItemStack item) { - return GT_ModHandler.getSmeltingOutput(item, false, null) != null; + return GTModHandler.getSmeltingOutput(item, false, null) != null; } } diff --git a/src/main/java/gregtech/api/recipe/maps/NonGTBackend.java b/src/main/java/gregtech/api/recipe/maps/NonGTBackend.java index 1e871df372..3a66a1c980 100644 --- a/src/main/java/gregtech/api/recipe/maps/NonGTBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/NonGTBackend.java @@ -9,7 +9,7 @@ import net.minecraftforge.fluids.FluidStack; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; /** @@ -24,8 +24,8 @@ public abstract class NonGTBackend extends RecipeMapBackend { } @Override - protected abstract GT_Recipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, - @Nullable ItemStack specialSlot, @Nullable GT_Recipe cachedRecipe); + protected abstract GTRecipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, + @Nullable ItemStack specialSlot, @Nullable GTRecipe cachedRecipe); @Override protected boolean doesOverwriteFindRecipe() { @@ -46,7 +46,7 @@ public abstract class NonGTBackend extends RecipeMapBackend { public void reInit() {} @Override - protected GT_Recipe addToItemMap(GT_Recipe recipe) { + protected GTRecipe addToItemMap(GTRecipe recipe) { return recipe; } } diff --git a/src/main/java/gregtech/api/recipe/maps/OilCrackerBackend.java b/src/main/java/gregtech/api/recipe/maps/OilCrackerBackend.java index c2c312a48a..6417334d34 100644 --- a/src/main/java/gregtech/api/recipe/maps/OilCrackerBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/OilCrackerBackend.java @@ -9,7 +9,7 @@ import net.minecraftforge.fluids.FluidStack; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; @ParametersAreNonnullByDefault @@ -23,7 +23,7 @@ public class OilCrackerBackend extends RecipeMapBackend { } @Override - public GT_Recipe compileRecipe(GT_Recipe recipe) { + public GTRecipe compileRecipe(GTRecipe recipe) { super.compileRecipe(recipe); if (recipe.mFluidInputs != null && recipe.mFluidInputs.length > 1 && recipe.mFluidInputs[1] != null) { validCatalystFluidNames.add( diff --git a/src/main/java/gregtech/api/recipe/maps/PrinterBackend.java b/src/main/java/gregtech/api/recipe/maps/PrinterBackend.java index a933886447..788828df52 100644 --- a/src/main/java/gregtech/api/recipe/maps/PrinterBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/PrinterBackend.java @@ -1,6 +1,6 @@ package gregtech.api.recipe.maps; -import static gregtech.api.enums.GT_Values.L; +import static gregtech.api.enums.GTValues.L; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; @@ -12,13 +12,13 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; /** @@ -33,14 +33,14 @@ public class PrinterBackend extends RecipeMapBackend { } @Override - protected GT_Recipe modifyFoundRecipe(GT_Recipe recipe, ItemStack[] items, FluidStack[] fluids, + protected GTRecipe modifyFoundRecipe(GTRecipe recipe, ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) { if (items[0].getItem() == Items.paper) { assert specialSlot != null; if (!ItemList.Tool_DataStick.isStackEqual(specialSlot, false, true)) return null; NBTTagCompound nbt = specialSlot.getTagCompound(); - if (nbt == null || GT_Utility.isStringInvalid(nbt.getString("title")) - || GT_Utility.isStringInvalid(nbt.getString("author"))) return null; + if (nbt == null || GTUtility.isStringInvalid(nbt.getString("title")) + || GTUtility.isStringInvalid(nbt.getString("author"))) return null; recipe = recipe.copy(); recipe.mCanBeBuffered = false; @@ -67,7 +67,7 @@ public class PrinterBackend extends RecipeMapBackend { recipe = recipe.copy(); recipe.mCanBeBuffered = false; recipe.mOutputs[0].setTagCompound( - GT_Utility.getNBTContainingString( + GTUtility.getNBTContainingString( new NBTTagCompound(), "GT.PunchCardData", nbt.getString("GT.PunchCardData"))); @@ -77,7 +77,7 @@ public class PrinterBackend extends RecipeMapBackend { } @Override - protected GT_Recipe findFallback(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) { + protected GTRecipe findFallback(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) { if (items.length == 0 || items[0] == null || fluids.length == 0 || fluids[0] == null) { return null; } @@ -88,7 +88,7 @@ public class PrinterBackend extends RecipeMapBackend { } if (dye == null) return null; - ItemStack batchRecolorOutput = GT_ModHandler.getAllRecipeOutput( + ItemStack batchRecolorOutput = GTModHandler.getAllRecipeOutput( null, items[0], items[0], @@ -100,8 +100,8 @@ public class PrinterBackend extends RecipeMapBackend { items[0], items[0]); if (batchRecolorOutput != null) { - return GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(8, items[0])) + return GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(8, items[0])) .itemOutputs(batchRecolorOutput) .fluidInputs(new FluidStack(fluids[0].getFluid(), (int) L)) .duration(256) @@ -112,11 +112,11 @@ public class PrinterBackend extends RecipeMapBackend { .orElse(null); } - ItemStack singleRecolorOutput = GT_ModHandler + ItemStack singleRecolorOutput = GTModHandler .getAllRecipeOutput(null, items[0], ItemList.DYE_ONLY_ITEMS[dye.mIndex].get(1)); if (singleRecolorOutput != null) { - return GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1, items[0])) + return GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1, items[0])) .itemOutputs(singleRecolorOutput) .fluidInputs(new FluidStack(fluids[0].getFluid(), (int) L)) .duration(32) diff --git a/src/main/java/gregtech/api/recipe/maps/PurificationUnitClarifierFrontend.java b/src/main/java/gregtech/api/recipe/maps/PurificationUnitClarifierFrontend.java index c7dad7ea3a..e681c95403 100644 --- a/src/main/java/gregtech/api/recipe/maps/PurificationUnitClarifierFrontend.java +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitClarifierFrontend.java @@ -11,13 +11,13 @@ import com.gtnewhorizons.modularui.api.math.Size; import codechicken.nei.PositionedStack; import gregtech.api.enums.ItemList; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.common.gui.modularui.UIHelper; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitClarifier; -import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitClarifier; +import gregtech.nei.GTNEIDefaultHandler; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -28,7 +28,7 @@ public class PurificationUnitClarifierFrontend extends PurificationUnitRecipeMap super( 80, uiPropertiesBuilder.logoPos(new Pos2d(160, 100)) - .progressBarTexture(new FallbackableUITexture(GT_UITextures.PROGRESSBAR_CLARIFIER)) + .progressBarTexture(new FallbackableUITexture(GTUITextures.PROGRESSBAR_CLARIFIER)) .logoPos(new Pos2d(152, 90)), neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 120))); } @@ -60,12 +60,12 @@ public class PurificationUnitClarifierFrontend extends PurificationUnitRecipeMap } @Override - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + public void drawNEIOverlays(GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { super.drawNEIOverlays(neiCachedRecipe); for (PositionedStack stack : neiCachedRecipe.mInputs) { if (stack.item.isItemEqual(ItemList.ActivatedCarbonFilterMesh.get(1))) { - drawNEIOverlayText((int) (GT_MetaTileEntity_PurificationUnitClarifier.FILTER_DAMAGE_RATE) + "%", stack); + drawNEIOverlayText((int) (MTEPurificationUnitClarifier.FILTER_DAMAGE_RATE) + "%", stack); } } } diff --git a/src/main/java/gregtech/api/recipe/maps/PurificationUnitFlocculatorFrontend.java b/src/main/java/gregtech/api/recipe/maps/PurificationUnitFlocculatorFrontend.java index 9366237b67..d0373d4310 100644 --- a/src/main/java/gregtech/api/recipe/maps/PurificationUnitFlocculatorFrontend.java +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitFlocculatorFrontend.java @@ -15,14 +15,14 @@ import com.gtnewhorizons.modularui.api.math.Size; import codechicken.nei.PositionedStack; import gregtech.api.enums.Materials; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.common.gui.modularui.UIHelper; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitFlocculation; -import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitFlocculation; +import gregtech.nei.GTNEIDefaultHandler; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -33,7 +33,7 @@ public class PurificationUnitFlocculatorFrontend extends PurificationUnitRecipeM super( 80, uiPropertiesBuilder.logoPos(new Pos2d(160, 100)) - .progressBarTexture(new FallbackableUITexture(GT_UITextures.PROGRESSBAR_FLOCCULATION)) + .progressBarTexture(new FallbackableUITexture(GTUITextures.PROGRESSBAR_FLOCCULATION)) .logoPos(new Pos2d(152, 100)), neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 120))); } @@ -60,30 +60,29 @@ public class PurificationUnitFlocculatorFrontend extends PurificationUnitRecipeM @Override @NotNull public List handleNEIItemTooltip(ItemStack stack, List currentTip, - GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { - if (stack - .isItemEqual(GT_Utility.getFluidDisplayStack(Materials.PolyAluminiumChloride.getFluid(1000L), false))) { + GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + if (stack.isItemEqual(GTUtility.getFluidDisplayStack(Materials.PolyAluminiumChloride.getFluid(1000L), false))) { currentTip.add("Consumed during operation"); currentTip.add( - "+" + GT_MetaTileEntity_PurificationUnitFlocculation.SUCCESS_PER_LEVEL + "+" + MTEPurificationUnitFlocculation.SUCCESS_PER_LEVEL + "%/" - + GT_MetaTileEntity_PurificationUnitFlocculation.INPUT_CHEMICAL_PER_LEVEL + + MTEPurificationUnitFlocculation.INPUT_CHEMICAL_PER_LEVEL + "L"); } else if (stack - .isItemEqual(GT_Utility.getFluidDisplayStack(Materials.FlocculationWasteLiquid.getFluid(1000L), false))) { + .isItemEqual(GTUtility.getFluidDisplayStack(Materials.FlocculationWasteLiquid.getFluid(1000L), false))) { currentTip.add("Returned in amount equivalent to consumed flocculant."); } return super.handleNEIItemTooltip(stack, currentTip, neiCachedRecipe); } @Override - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + public void drawNEIOverlays(GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { super.drawNEIOverlays(neiCachedRecipe); // Display flocculation chemical neiCachedRecipe.mInputs.add( new PositionedStack( - GT_Utility.getFluidDisplayStack(Materials.PolyAluminiumChloride.getFluid(100000L), true), + GTUtility.getFluidDisplayStack(Materials.PolyAluminiumChloride.getFluid(100000L), true), 5, -1, false)); @@ -91,7 +90,7 @@ public class PurificationUnitFlocculatorFrontend extends PurificationUnitRecipeM // Display waste output neiCachedRecipe.mOutputs.add( new PositionedStack( - GT_Utility.getFluidDisplayStack(Materials.FlocculationWasteLiquid.getFluid(100000L), true), + GTUtility.getFluidDisplayStack(Materials.FlocculationWasteLiquid.getFluid(100000L), true), 147, 48, false)); diff --git a/src/main/java/gregtech/api/recipe/maps/PurificationUnitLaserFrontend.java b/src/main/java/gregtech/api/recipe/maps/PurificationUnitLaserFrontend.java index df42259864..9c90acd8ad 100644 --- a/src/main/java/gregtech/api/recipe/maps/PurificationUnitLaserFrontend.java +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitLaserFrontend.java @@ -11,8 +11,8 @@ import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.recipe.RecipeMapFrontend; import gregtech.common.gui.modularui.UIHelper; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitUVTreatment; -import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitUVTreatment; +import gregtech.nei.GTNEIDefaultHandler; public class PurificationUnitLaserFrontend extends RecipeMapFrontend { @@ -22,13 +22,13 @@ public class PurificationUnitLaserFrontend extends RecipeMapFrontend { } @Override - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { - final int numLenses = GT_MetaTileEntity_PurificationUnitUVTreatment.LENS_ITEMS.size(); + public void drawNEIOverlays(GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + final int numLenses = MTEPurificationUnitUVTreatment.LENS_ITEMS.size(); List positions = UIHelper.getGridPositions(numLenses, 12, -4, 3, 3); // Put in lens items for (int i = 0; i < numLenses; ++i) { Pos2d position = positions.get(i); - ItemStack lens = GT_MetaTileEntity_PurificationUnitUVTreatment.LENS_ITEMS.get(i); + ItemStack lens = MTEPurificationUnitUVTreatment.LENS_ITEMS.get(i); neiCachedRecipe.mInputs.add(new PositionedStack(lens, position.x, position.y, false)); } super.drawNEIOverlays(neiCachedRecipe); diff --git a/src/main/java/gregtech/api/recipe/maps/PurificationUnitOzonationFrontend.java b/src/main/java/gregtech/api/recipe/maps/PurificationUnitOzonationFrontend.java index cdfd41b78c..e9c1277cb3 100644 --- a/src/main/java/gregtech/api/recipe/maps/PurificationUnitOzonationFrontend.java +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitOzonationFrontend.java @@ -9,7 +9,7 @@ import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; import com.gtnewhorizons.modularui.api.math.Pos2d; import com.gtnewhorizons.modularui.api.math.Size; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.util.MethodsReturnNonnullByDefault; @@ -24,7 +24,7 @@ public class PurificationUnitOzonationFrontend extends PurificationUnitRecipeMap super( 120, uiPropertiesBuilder.logoPos(new Pos2d(160, 100)) - .progressBarTexture(new FallbackableUITexture(GT_UITextures.PROGRESSBAR_OZONATION)) + .progressBarTexture(new FallbackableUITexture(GTUITextures.PROGRESSBAR_OZONATION)) .logoPos(new Pos2d(152, 97)), neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 180))); } diff --git a/src/main/java/gregtech/api/recipe/maps/PurificationUnitParticleExtractorFrontend.java b/src/main/java/gregtech/api/recipe/maps/PurificationUnitParticleExtractorFrontend.java index bbbd88fd5f..d738ce0750 100644 --- a/src/main/java/gregtech/api/recipe/maps/PurificationUnitParticleExtractorFrontend.java +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitParticleExtractorFrontend.java @@ -12,7 +12,7 @@ import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.recipe.RecipeMapFrontend; import gregtech.common.gui.modularui.UIHelper; -import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.nei.GTNEIDefaultHandler; public class PurificationUnitParticleExtractorFrontend extends RecipeMapFrontend { @@ -25,7 +25,7 @@ public class PurificationUnitParticleExtractorFrontend extends RecipeMapFrontend } @Override - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + public void drawNEIOverlays(GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { List positions = UIHelper.getGridPositions(2, 30, 14, 2, 1); Pos2d pos1 = positions.get(0); Pos2d pos2 = positions.get(1); diff --git a/src/main/java/gregtech/api/recipe/maps/PurificationUnitPhAdjustmentFrontend.java b/src/main/java/gregtech/api/recipe/maps/PurificationUnitPhAdjustmentFrontend.java index 7e9eded675..e78d2a395a 100644 --- a/src/main/java/gregtech/api/recipe/maps/PurificationUnitPhAdjustmentFrontend.java +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitPhAdjustmentFrontend.java @@ -15,13 +15,13 @@ import com.gtnewhorizons.modularui.api.math.Size; import codechicken.nei.PositionedStack; import gregtech.api.enums.Materials; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitPhAdjustment; -import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitPhAdjustment; +import gregtech.nei.GTNEIDefaultHandler; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -32,7 +32,7 @@ public class PurificationUnitPhAdjustmentFrontend extends PurificationUnitRecipe super( 80, uiPropertiesBuilder.logoPos(new Pos2d(160, 100)) - .progressBarTexture(new FallbackableUITexture(GT_UITextures.PROGRESSBAR_PH_NEUTRALIZATION)) + .progressBarTexture(new FallbackableUITexture(GTUITextures.PROGRESSBAR_PH_NEUTRALIZATION)) .logoPos(new Pos2d(152, 90)), neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 120))); } @@ -54,24 +54,23 @@ public class PurificationUnitPhAdjustmentFrontend extends PurificationUnitRecipe @Override @NotNull public List handleNEIItemTooltip(ItemStack stack, List currentTip, - GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { // Add pH adjustment values if (stack.isItemEqual(Materials.SodiumHydroxide.getDust(1))) { - currentTip - .add("+" + GT_MetaTileEntity_PurificationUnitPhAdjustment.PH_PER_ALKALINE_DUST * 64 + " pH/stack"); + currentTip.add("+" + MTEPurificationUnitPhAdjustment.PH_PER_ALKALINE_DUST * 64 + " pH/stack"); } else - if (stack.isItemEqual(GT_Utility.getFluidDisplayStack(Materials.HydrochloricAcid.getFluid(1000L), false))) { - currentTip.add(GT_MetaTileEntity_PurificationUnitPhAdjustment.PH_PER_10_ACID_LITER * 100 + " pH/1000L"); + if (stack.isItemEqual(GTUtility.getFluidDisplayStack(Materials.HydrochloricAcid.getFluid(1000L), false))) { + currentTip.add(MTEPurificationUnitPhAdjustment.PH_PER_10_ACID_LITER * 100 + " pH/1000L"); } return super.handleNEIItemTooltip(stack, currentTip, neiCachedRecipe); } @Override - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + public void drawNEIOverlays(GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { neiCachedRecipe.mInputs.add(new PositionedStack(Materials.SodiumHydroxide.getDust(64), 3, 1, false)); neiCachedRecipe.mInputs.add( new PositionedStack( - GT_Utility.getFluidDisplayStack(Materials.HydrochloricAcid.getFluid(1000L), true), + GTUtility.getFluidDisplayStack(Materials.HydrochloricAcid.getFluid(1000L), true), 147, 1, false)); diff --git a/src/main/java/gregtech/api/recipe/maps/PurificationUnitPlasmaHeaterFrontend.java b/src/main/java/gregtech/api/recipe/maps/PurificationUnitPlasmaHeaterFrontend.java index 5c63353b98..a7f35c86a5 100644 --- a/src/main/java/gregtech/api/recipe/maps/PurificationUnitPlasmaHeaterFrontend.java +++ b/src/main/java/gregtech/api/recipe/maps/PurificationUnitPlasmaHeaterFrontend.java @@ -11,12 +11,12 @@ import com.gtnewhorizons.modularui.api.math.Size; import codechicken.nei.PositionedStack; import gregtech.api.enums.Materials; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.nei.GTNEIDefaultHandler; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -27,7 +27,7 @@ public class PurificationUnitPlasmaHeaterFrontend extends PurificationUnitRecipe super( 120, uiPropertiesBuilder.logoPos(new Pos2d(152, 90)) - .progressBarTexture(new FallbackableUITexture(GT_UITextures.PROGRESSBAR_PLASMA_HEATER)), + .progressBarTexture(new FallbackableUITexture(GTUITextures.PROGRESSBAR_PLASMA_HEATER)), neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 120))); } @@ -46,12 +46,12 @@ public class PurificationUnitPlasmaHeaterFrontend extends PurificationUnitRecipe } @Override - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + public void drawNEIOverlays(GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { neiCachedRecipe.mInputs.add( - new PositionedStack(GT_Utility.getFluidDisplayStack(Materials.Helium.getPlasma(10L), true), 26, 53, false)); + new PositionedStack(GTUtility.getFluidDisplayStack(Materials.Helium.getPlasma(10L), true), 26, 53, false)); neiCachedRecipe.mInputs.add( new PositionedStack( - GT_Utility.getFluidDisplayStack(Materials.SuperCoolant.getFluid(100L), true), + GTUtility.getFluidDisplayStack(Materials.SuperCoolant.getFluid(100L), true), 107, 52, false)); diff --git a/src/main/java/gregtech/api/recipe/maps/RecyclerBackend.java b/src/main/java/gregtech/api/recipe/maps/RecyclerBackend.java index 55fb9b4cc4..c149be4219 100644 --- a/src/main/java/gregtech/api/recipe/maps/RecyclerBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/RecyclerBackend.java @@ -6,12 +6,12 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; /** @@ -26,17 +26,17 @@ public class RecyclerBackend extends NonGTBackend { } @Override - protected GT_Recipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot, - @Nullable GT_Recipe cachedRecipe) { + protected GTRecipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot, + @Nullable GTRecipe cachedRecipe) { if (items.length == 0 || items[0] == null) { return null; } if (cachedRecipe != null && cachedRecipe.isRecipeInputEqual(false, true, fluids, items)) { return cachedRecipe; } - GT_RecipeBuilder builder = GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1, items[0])); - ItemStack output = GT_ModHandler.getRecyclerOutput(items[0], 0); + GTRecipeBuilder builder = GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1, items[0])); + ItemStack output = GTModHandler.getRecyclerOutput(items[0], 0); if (output != null) { builder.itemOutputs(output) .outputChances(1250); @@ -50,6 +50,6 @@ public class RecyclerBackend extends NonGTBackend { @Override public boolean containsInput(ItemStack item) { - return GT_ModHandler.getRecyclerOutput(item, 0) != null; + return GTModHandler.getRecyclerOutput(item, 0) != null; } } diff --git a/src/main/java/gregtech/api/recipe/maps/ReplicatorBackend.java b/src/main/java/gregtech/api/recipe/maps/ReplicatorBackend.java index f201698457..b40b3dd082 100644 --- a/src/main/java/gregtech/api/recipe/maps/ReplicatorBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/ReplicatorBackend.java @@ -12,34 +12,34 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import gregtech.GT_Mod; +import gregtech.GTMod; import gregtech.api.enums.Element; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.TierEU; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_RecipeConstants; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTRecipeConstants; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.common.items.behaviors.Behaviour_DataOrb; +import gregtech.common.items.behaviors.BehaviourDataOrb; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault public class ReplicatorBackend extends RecipeMapBackend { - private final Map recipesByMaterial = new HashMap<>(); + private final Map recipesByMaterial = new HashMap<>(); public ReplicatorBackend(RecipeMapBackendPropertiesBuilder propertiesBuilder) { super(propertiesBuilder.recipeEmitter(ReplicatorBackend::replicatorRecipeEmitter)); } @Override - public GT_Recipe compileRecipe(GT_Recipe recipe) { + public GTRecipe compileRecipe(GTRecipe recipe) { super.compileRecipe(recipe); - Materials material = recipe.getMetadata(GT_RecipeConstants.MATERIAL); + Materials material = recipe.getMetadata(GTRecipeConstants.MATERIAL); assert material != null; // checked by replicatorRecipeEmitter recipesByMaterial.put(material, recipe); return recipe; @@ -51,8 +51,8 @@ public class ReplicatorBackend extends RecipeMapBackend { } @Override - protected GT_Recipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot, - @Nullable GT_Recipe cachedRecipe) { + protected GTRecipe overwriteFindRecipe(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot, + @Nullable GTRecipe cachedRecipe) { if (specialSlot == null) { return null; } @@ -65,19 +65,19 @@ public class ReplicatorBackend extends RecipeMapBackend { @Nullable private static Materials getMaterialFromDataOrb(ItemStack stack) { - if (ItemList.Tool_DataOrb.isStackEqual(stack, false, true) && Behaviour_DataOrb.getDataTitle(stack) + if (ItemList.Tool_DataOrb.isStackEqual(stack, false, true) && BehaviourDataOrb.getDataTitle(stack) .equals("Elemental-Scan")) { - return Element.get(Behaviour_DataOrb.getDataName(stack)).mLinkedMaterials.stream() + return Element.get(BehaviourDataOrb.getDataName(stack)).mLinkedMaterials.stream() .findFirst() .orElse(null); } return null; } - private static Collection replicatorRecipeEmitter(GT_RecipeBuilder builder) { - Materials material = builder.getMetadata(GT_RecipeConstants.MATERIAL); + private static Collection replicatorRecipeEmitter(GTRecipeBuilder builder) { + Materials material = builder.getMetadata(GTRecipeConstants.MATERIAL); if (material == null) { - throw new IllegalStateException("GT_RecipeConstants.MATERIAL must be set for replicator recipe"); + throw new IllegalStateException("GTRecipeConstants.MATERIAL must be set for replicator recipe"); } return Optional.of(material) .map(material1 -> material1.mElement) @@ -85,7 +85,7 @@ public class ReplicatorBackend extends RecipeMapBackend { .map(ReplicatorBackend::getUUMAmountFromMass) .flatMap( uum -> builder.fluidInputs(Materials.UUMatter.getFluid(uum)) - .duration(GT_Utility.safeInt(uum * 512L, 1)) + .duration(GTUtility.safeInt(uum * 512L, 1)) .eut(TierEU.RECIPE_LV) .ignoreCollision() .noOptimize() @@ -95,6 +95,6 @@ public class ReplicatorBackend extends RecipeMapBackend { } private static int getUUMAmountFromMass(long mass) { - return GT_Utility.safeInt((long) Math.pow(mass, GT_Mod.gregtechproxy.replicatorExponent), 1); + return GTUtility.safeInt((long) Math.pow(mass, GTMod.gregtechproxy.replicatorExponent), 1); } } diff --git a/src/main/java/gregtech/api/recipe/maps/SpaceProjectFrontend.java b/src/main/java/gregtech/api/recipe/maps/SpaceProjectFrontend.java index 98463dcc4d..70c9605e1b 100644 --- a/src/main/java/gregtech/api/recipe/maps/SpaceProjectFrontend.java +++ b/src/main/java/gregtech/api/recipe/maps/SpaceProjectFrontend.java @@ -1,6 +1,6 @@ package gregtech.api.recipe.maps; -import static gregtech.api.util.GT_Utility.formatNumbers; +import static gregtech.api.util.GTUtility.formatNumbers; import static net.minecraft.util.EnumChatFormatting.GRAY; import static net.minecraft.util.StatCollector.translateToLocal; @@ -22,7 +22,7 @@ import com.gtnewhorizons.modularui.common.widget.ProgressBar; import appeng.util.ReadableNumberConverter; import codechicken.lib.gui.GuiDraw; import codechicken.nei.PositionedStack; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.recipe.RecipeMapFrontend; @@ -31,7 +31,7 @@ import gregtech.common.gui.modularui.UIHelper; import gregtech.common.misc.spaceprojects.SpaceProjectManager; import gregtech.common.misc.spaceprojects.SpaceProjectManager.FakeSpaceProjectRecipe; import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject; -import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.nei.GTNEIDefaultHandler; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -76,7 +76,7 @@ public class SpaceProjectFrontend extends RecipeMapFrontend { @Override protected List handleNEIItemInputTooltip(List currentTip, - GT_NEI_DefaultHandler.FixedPositionedStack pStack) { + GTNEIDefaultHandler.FixedPositionedStack pStack) { super.handleNEIItemOutputTooltip(currentTip, pStack); if (pStack.isFluid()) return currentTip; currentTip.add(GRAY + translateToLocal("Item Count: ") + formatNumbers(pStack.realStackSize)); @@ -84,11 +84,11 @@ public class SpaceProjectFrontend extends RecipeMapFrontend { } @Override - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + public void drawNEIOverlays(GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { for (PositionedStack stack : neiCachedRecipe.mInputs) { - if (stack instanceof GT_NEI_DefaultHandler.FixedPositionedStack pStack && stack.item != null + if (stack instanceof GTNEIDefaultHandler.FixedPositionedStack pStack && stack.item != null && !pStack.isFluid()) { - int stackSize = ((GT_NEI_DefaultHandler.FixedPositionedStack) stack).realStackSize; + int stackSize = ((GTNEIDefaultHandler.FixedPositionedStack) stack).realStackSize; String displayString; if (stack.item.stackSize > 9999) { displayString = ReadableNumberConverter.INSTANCE.toWideReadableForm(stackSize); @@ -114,14 +114,14 @@ public class SpaceProjectFrontend extends RecipeMapFrontend { int bar2Width = 18; List> splitProgress = splitProgress(progressSupplier, bar1Width, bar2Width); builder.widget( - new ProgressBar().setTexture(GT_UITextures.PROGRESSBAR_ASSEMBLY_LINE_1, 17) + new ProgressBar().setTexture(GTUITextures.PROGRESSBAR_ASSEMBLY_LINE_1, 17) .setDirection(ProgressBar.Direction.RIGHT) .setProgress(splitProgress.get(0)) .setSynced(false, false) .setPos(new Pos2d(70, 28).add(windowOffset)) .setSize(bar1Width, 72)); builder.widget( - new ProgressBar().setTexture(GT_UITextures.PROGRESSBAR_ASSEMBLY_LINE_2, 18) + new ProgressBar().setTexture(GTUITextures.PROGRESSBAR_ASSEMBLY_LINE_2, 18) .setDirection(ProgressBar.Direction.RIGHT) .setProgress(splitProgress.get(1)) .setSynced(false, false) diff --git a/src/main/java/gregtech/api/recipe/maps/TranscendentPlasmaMixerFrontend.java b/src/main/java/gregtech/api/recipe/maps/TranscendentPlasmaMixerFrontend.java index 7a5d7ff164..7a4036e7ba 100644 --- a/src/main/java/gregtech/api/recipe/maps/TranscendentPlasmaMixerFrontend.java +++ b/src/main/java/gregtech/api/recipe/maps/TranscendentPlasmaMixerFrontend.java @@ -1,6 +1,6 @@ package gregtech.api.recipe.maps; -import static gregtech.api.util.GT_Utility.formatNumbers; +import static gregtech.api.util.GTUtility.formatNumbers; import java.util.List; @@ -11,7 +11,7 @@ import com.gtnewhorizons.modularui.api.math.Pos2d; import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.common.gui.modularui.UIHelper; import gregtech.nei.RecipeDisplayInfo; @@ -45,12 +45,12 @@ public class TranscendentPlasmaMixerFrontend extends RecipeMapFrontend { // These look odd because recipeInfo.recipe.mEUt is actually the EU per litre of fluid processed, not // the EU/t. recipeInfo.drawText( - GT_Utility.trans("152", "Total: ") + GTUtility.trans("152", "Total: ") + formatNumbers(1000L * recipeInfo.recipe.mDuration / 100L * recipeInfo.recipe.mEUt) + " EU"); // 1000 / (20 ticks * 5 seconds) = 10L/t. 10L/t * x EU/L = 10 * x EU/t. long averageUsage = 10L * recipeInfo.recipe.mEUt; recipeInfo.drawText( - "Average: " + formatNumbers(averageUsage) + " EU/t" + GT_Utility.getTierNameWithParentheses(averageUsage)); + "Average: " + formatNumbers(averageUsage) + " EU/t" + GTUtility.getTierNameWithParentheses(averageUsage)); } } diff --git a/src/main/java/gregtech/api/recipe/maps/UnpackagerBackend.java b/src/main/java/gregtech/api/recipe/maps/UnpackagerBackend.java index e7297f0609..9ea34609f6 100644 --- a/src/main/java/gregtech/api/recipe/maps/UnpackagerBackend.java +++ b/src/main/java/gregtech/api/recipe/maps/UnpackagerBackend.java @@ -6,12 +6,12 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBackendPropertiesBuilder; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; @ParametersAreNonnullByDefault @@ -23,16 +23,16 @@ public class UnpackagerBackend extends RecipeMapBackend { } @Override - protected GT_Recipe findFallback(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) { + protected GTRecipe findFallback(ItemStack[] items, FluidStack[] fluids, @Nullable ItemStack specialSlot) { if (items.length == 0 || !ItemList.IC2_Scrapbox.isStackEqual(items[0], false, true)) { return null; } - ItemStack output = GT_ModHandler.getRandomScrapboxDrop(); + ItemStack output = GTModHandler.getRandomScrapboxDrop(); if (output == null) { return null; } - return GT_Values.RA.stdBuilder() + return GTValues.RA.stdBuilder() .itemInputs(ItemList.IC2_Scrapbox.get(1)) .itemOutputs(output) .duration(16) diff --git a/src/main/java/gregtech/api/recipe/metadata/CompressionTierKey.java b/src/main/java/gregtech/api/recipe/metadata/CompressionTierKey.java index 384b5ce2d9..88bd3d6664 100644 --- a/src/main/java/gregtech/api/recipe/metadata/CompressionTierKey.java +++ b/src/main/java/gregtech/api/recipe/metadata/CompressionTierKey.java @@ -1,6 +1,6 @@ package gregtech.api.recipe.metadata; -import static gregtech.api.util.GT_Utility.trans; +import static gregtech.api.util.GTUtility.trans; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/gregtech/api/recipe/metadata/PCBFactoryTierKey.java b/src/main/java/gregtech/api/recipe/metadata/PCBFactoryTierKey.java index 05db919b57..ada5574b01 100644 --- a/src/main/java/gregtech/api/recipe/metadata/PCBFactoryTierKey.java +++ b/src/main/java/gregtech/api/recipe/metadata/PCBFactoryTierKey.java @@ -1,6 +1,6 @@ package gregtech.api.recipe.metadata; -import static gregtech.api.util.GT_Utility.trans; +import static gregtech.api.util.GTUtility.trans; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/gregtech/api/recipe/metadata/PCBFactoryUpgradeKey.java b/src/main/java/gregtech/api/recipe/metadata/PCBFactoryUpgradeKey.java index 8257f1e6ef..4891c88848 100644 --- a/src/main/java/gregtech/api/recipe/metadata/PCBFactoryUpgradeKey.java +++ b/src/main/java/gregtech/api/recipe/metadata/PCBFactoryUpgradeKey.java @@ -1,6 +1,6 @@ package gregtech.api.recipe.metadata; -import static gregtech.api.util.GT_Utility.trans; +import static gregtech.api.util.GTUtility.trans; import javax.annotation.Nullable; import javax.annotation.ParametersAreNonnullByDefault; diff --git a/src/main/java/gregtech/api/registries/LHECoolantRegistry.java b/src/main/java/gregtech/api/registries/LHECoolantRegistry.java index 7944132572..084086c841 100644 --- a/src/main/java/gregtech/api/registries/LHECoolantRegistry.java +++ b/src/main/java/gregtech/api/registries/LHECoolantRegistry.java @@ -7,6 +7,8 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; +import gregtech.common.tileentities.machines.multi.MTEHeatExchanger; + public class LHECoolantRegistry { private static final Map lheCoolants = new HashMap<>(); @@ -15,9 +17,9 @@ public class LHECoolantRegistry { * Registers a coolant for use in Large Heat Exchangers and Whakawhiti Weras. * See the constants in {@link #registerBaseCoolants()} as a reference for what the multipliers should be. * The multipliers are used in - * {@link gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_HeatExchanger#checkProcessing()} - * and {@link gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_HeatExchanger#onRunningTick()}. - * + * {@link MTEHeatExchanger#checkProcessing()} + * and {@link MTEHeatExchanger#onRunningTick()}. + * * @param coldFluidName The fluid name of the resulting cold coolant * @param hotFluidName The fluid name of the input hot coolant * @param steamMultiplier The steam multiplier diff --git a/src/main/java/gregtech/api/render/TextureFactory.java b/src/main/java/gregtech/api/render/TextureFactory.java index 26142fd606..a87b20ccb4 100644 --- a/src/main/java/gregtech/api/render/TextureFactory.java +++ b/src/main/java/gregtech/api/render/TextureFactory.java @@ -6,7 +6,7 @@ import net.minecraftforge.common.util.ForgeDirection; import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.ITextureBuilder; -import gregtech.common.render.GT_TextureBuilder; +import gregtech.common.render.GTTextureBuilder; /** *

@@ -152,6 +152,6 @@ public final class TextureFactory { * @return An instance of the {@link ITextureBuilder} implementation */ public static ITextureBuilder builder() { - return new GT_TextureBuilder(); + return new GTTextureBuilder(); } } diff --git a/src/main/java/gregtech/api/task/tasks/PollutionTask.java b/src/main/java/gregtech/api/task/tasks/PollutionTask.java index 060a91acab..3770409fb1 100644 --- a/src/main/java/gregtech/api/task/tasks/PollutionTask.java +++ b/src/main/java/gregtech/api/task/tasks/PollutionTask.java @@ -8,7 +8,7 @@ import gregtech.api.enums.TickTime; import gregtech.api.interfaces.tileentity.IMachineProgress; import gregtech.api.task.TaskHost; import gregtech.api.task.TickableTask; -import gregtech.common.GT_Pollution; +import gregtech.common.Pollution; public class PollutionTask extends TickableTask { @@ -38,7 +38,7 @@ public class PollutionTask extends Tickab public void update(long tick, boolean isServerSide) { if (isServerSide && tick % POLLUTION_TICK == 0 && taskHost.hasThingsToDo()) { if (taskHost instanceof final TileEntity entity) { - GT_Pollution.addPollution(entity, getPollutionPerSecond()); + Pollution.addPollution(entity, getPollutionPerSecond()); } } } diff --git a/src/main/java/gregtech/api/threads/GT_Runnable_Cable_Update.java b/src/main/java/gregtech/api/threads/GT_Runnable_Cable_Update.java deleted file mode 100644 index 5e3b36f473..0000000000 --- a/src/main/java/gregtech/api/threads/GT_Runnable_Cable_Update.java +++ /dev/null @@ -1,87 +0,0 @@ -package gregtech.api.threads; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.gtnhlib.util.CoordinatePacker; - -import gregtech.GT_Mod; -import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; -import gregtech.common.GT_Proxy; - -public class GT_Runnable_Cable_Update extends GT_Runnable_MachineBlockUpdate { - - protected GT_Runnable_Cable_Update(World aWorld, int posX, int posY, int posZ) { - super(aWorld, posX, posY, posZ); - } - - public static void setCableUpdateValues(World aWorld, int posX, int posY, int posZ) { - if (isEnabled) { - EXECUTOR_SERVICE.submit(new GT_Runnable_Cable_Update(aWorld, posX, posY, posZ)); - } - } - - @Override - public void run() { - int posX, posY, posZ; - try { - while (!tQueue.isEmpty()) { - final long packedCoords = tQueue.dequeueLong(); - posX = CoordinatePacker.unpackX(packedCoords); - posY = CoordinatePacker.unpackY(packedCoords); - posZ = CoordinatePacker.unpackZ(packedCoords); - - final TileEntity tTileEntity; - - GT_Proxy.TICK_LOCK.lock(); - try { - // we dont want to go over cables that are in unloaded chunks - // keeping the lock just to make sure no CME happens - if (world.blockExists(posX, posY, posZ)) { - tTileEntity = world.getTileEntity(posX, posY, posZ); - } else { - tTileEntity = null; - } - } finally { - GT_Proxy.TICK_LOCK.unlock(); - } - - // See if the block itself needs an update - if (tTileEntity instanceof IMachineBlockUpdateable) - ((IMachineBlockUpdateable) tTileEntity).onMachineBlockUpdate(); - - // Now see if we should add the nearby blocks to the queue: - // only add blocks the cable is connected to - if (tTileEntity instanceof BaseMetaPipeEntity metaPipe - && metaPipe.getMetaTileEntity() instanceof GT_MetaPipeEntity_Cable cable) { - for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { - final ForgeDirection side = ForgeDirection.VALID_DIRECTIONS[i]; - if (cable.isConnectedAtSide(side)) { - final long tCoords = CoordinatePacker - .pack(posX + side.offsetX, posY + side.offsetY, posZ + side.offsetZ); - if (visited.add(tCoords)) { - tQueue.enqueue(tCoords); - } - } - } - } - } - } catch (Exception e) { - GT_Mod.GT_FML_LOGGER.error( - "Well this update was broken... " + initialX - + ", " - + initialY - + ", " - + initialZ - + ", mWorld={" - + world.getProviderName() - + " @dimId " - + world.provider.dimensionId - + "}", - e); - } - } -} diff --git a/src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java b/src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java deleted file mode 100644 index 339556e246..0000000000 --- a/src/main/java/gregtech/api/threads/GT_Runnable_MachineBlockUpdate.java +++ /dev/null @@ -1,184 +0,0 @@ -package gregtech.api.threads; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; -import java.util.concurrent.TimeUnit; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.gtnhlib.util.CoordinatePacker; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; -import gregtech.common.GT_Proxy; -import it.unimi.dsi.fastutil.longs.LongArrayFIFOQueue; -import it.unimi.dsi.fastutil.longs.LongOpenHashSet; -import it.unimi.dsi.fastutil.longs.LongSet; - -public class GT_Runnable_MachineBlockUpdate implements Runnable { - - // used by runner thread - protected final int initialX, initialY, initialZ; - protected final World world; - protected final LongSet visited = new LongOpenHashSet(); - protected final LongArrayFIFOQueue tQueue = new LongArrayFIFOQueue(); - - // Threading - private static final ThreadFactory THREAD_FACTORY = r -> { - Thread thread = new Thread(r); - thread.setName("GT_MachineBlockUpdate"); - return thread; - }; - protected static ExecutorService EXECUTOR_SERVICE; - - // This class should never be initiated outside of this class! - protected GT_Runnable_MachineBlockUpdate(World aWorld, int posX, int posY, int posZ) { - this.world = aWorld; - this.initialX = posX; - this.initialY = posY; - this.initialZ = posZ; - final long coords = CoordinatePacker.pack(posX, posY, posZ); - visited.add(coords); - tQueue.enqueue(coords); - } - - public static boolean isEnabled() { - return isEnabled; - } - - public static void setEnabled() { - GT_Runnable_MachineBlockUpdate.isEnabled = true; - } - - public static void setDisabled() { - GT_Runnable_MachineBlockUpdate.isEnabled = false; - } - - public static void setEnabled(boolean isEnabled) { - GT_Runnable_MachineBlockUpdate.isEnabled = isEnabled; - } - - public static boolean isCurrentThreadEnabled() { - return perThreadEnable.get(); - } - - public static void setCurrentThreadEnabled(boolean perThreadEnable) { - GT_Runnable_MachineBlockUpdate.perThreadEnable.set(perThreadEnable); - } - - protected static boolean isEnabled = true; - protected static final ThreadLocal perThreadEnable = ThreadLocal.withInitial(() -> true); - - public static void setMachineUpdateValues(World aWorld, int posX, int posY, int posZ) { - if (isEnabled() && isCurrentThreadEnabled()) { - EXECUTOR_SERVICE.submit(new GT_Runnable_MachineBlockUpdate(aWorld, posX, posY, posZ)); - } - } - - public static void initExecutorService() { - EXECUTOR_SERVICE = Executors.newFixedThreadPool( - Math.max( - 1, - (Runtime.getRuntime() - .availableProcessors() * 2 - / 3)), - THREAD_FACTORY); - } - - public static void shutdownExecutorService() { - try { - GT_Mod.GT_FML_LOGGER.info("Shutting down Machine block update executor service"); - EXECUTOR_SERVICE.shutdown(); // Disable new tasks from being submitted - // Wait a while for existing tasks to terminate - if (!EXECUTOR_SERVICE.awaitTermination(60, TimeUnit.SECONDS)) { - EXECUTOR_SERVICE.shutdownNow(); // Cancel currently executing tasks - // Wait a while for tasks to respond to being cancelled - if (!EXECUTOR_SERVICE.awaitTermination(60, TimeUnit.SECONDS)) { - GT_Mod.GT_FML_LOGGER.error( - "Well this didn't terminated well... GT_Runnable_MachineBlockUpdate.shutdownExecutorService"); - } - } - } catch (InterruptedException ie) { - GT_Mod.GT_FML_LOGGER.error("Well this interruption got interrupted...", ie); - // (Re-)Cancel if current thread also interrupted - EXECUTOR_SERVICE.shutdownNow(); - // Preserve interrupt status - Thread.currentThread() - .interrupt(); - } catch (Exception e) { - GT_Mod.GT_FML_LOGGER.error("Well this didn't terminated well...", e); - // (Re-)Cancel in case - EXECUTOR_SERVICE.shutdownNow(); - } finally { - GT_Mod.GT_FML_LOGGER.info("Leaving... GT_Runnable_MachineBlockUpdate.shutdownExecutorService"); - } - } - - @Override - public void run() { - int posX, posY, posZ; - try { - while (!tQueue.isEmpty()) { - final long packedCoords = tQueue.dequeueLong(); - posX = CoordinatePacker.unpackX(packedCoords); - posY = CoordinatePacker.unpackY(packedCoords); - posZ = CoordinatePacker.unpackZ(packedCoords); - - final TileEntity tTileEntity; - final boolean isMachineBlock; - - // This might load a chunk... which might load a TileEntity... which might get added to - // `loadedTileEntityList`... which might be in the process - // of being iterated over during `UpdateEntities()`... which might cause a - // ConcurrentModificationException. So, lock that shit. - GT_Proxy.TICK_LOCK.lock(); - try { - tTileEntity = world.getTileEntity(posX, posY, posZ); - isMachineBlock = GregTech_API - .isMachineBlock(world.getBlock(posX, posY, posZ), world.getBlockMetadata(posX, posY, posZ)); - } finally { - GT_Proxy.TICK_LOCK.unlock(); - } - - // See if the block itself needs an update - if (tTileEntity instanceof IMachineBlockUpdateable) - ((IMachineBlockUpdateable) tTileEntity).onMachineBlockUpdate(); - - // Now see if we should add the nearby blocks to the queue: - // 1) If we've visited less than 5 blocks, then yes - // 2) If the tile says we should recursively updated (pipes don't, machine blocks do) - // 3) If the block at the coordinates is marked as a machine block - if (visited.size() < 5 - || (tTileEntity instanceof IMachineBlockUpdateable - && ((IMachineBlockUpdateable) tTileEntity).isMachineBlockUpdateRecursive()) - || isMachineBlock) { - for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { - final ForgeDirection side = ForgeDirection.VALID_DIRECTIONS[i]; - final long tCoords = CoordinatePacker - .pack(posX + side.offsetX, posY + side.offsetY, posZ + side.offsetZ); - if (visited.add(tCoords)) { - tQueue.enqueue(tCoords); - } - } - } - } - } catch (Exception e) { - GT_Mod.GT_FML_LOGGER.error( - "Well this update was broken... " + initialX - + ", " - + initialY - + ", " - + initialZ - + ", mWorld={" - + world.getProviderName() - + " @dimId " - + world.provider.dimensionId - + "}", - e); - } - } -} diff --git a/src/main/java/gregtech/api/threads/GT_Runnable_Sound.java b/src/main/java/gregtech/api/threads/GT_Runnable_Sound.java deleted file mode 100644 index 9021a60e89..0000000000 --- a/src/main/java/gregtech/api/threads/GT_Runnable_Sound.java +++ /dev/null @@ -1,41 +0,0 @@ -package gregtech.api.threads; - -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; - -import gregtech.api.util.GT_PlayedSound; -import gregtech.api.util.GT_Utility; - -public class GT_Runnable_Sound implements Runnable { - - private final double mX, mY, mZ; - private final int mTimeUntilNextSound; - private final World mWorld; - private final ResourceLocation mSoundResourceLocation; - private final float mSoundStrength, mSoundModulation; - - public GT_Runnable_Sound(World aWorld, double aX, double aY, double aZ, int aTimeUntilNextSound, - ResourceLocation aSoundResourceLocation, float aSoundStrength, float aSoundModulation) { - mWorld = aWorld; - mX = aX; - mY = aY; - mZ = aZ; - mTimeUntilNextSound = aTimeUntilNextSound; - mSoundResourceLocation = aSoundResourceLocation; - mSoundStrength = aSoundStrength; - mSoundModulation = aSoundModulation; - } - - @Override - public void run() { - try { - GT_PlayedSound tSound; - if (GT_Utility.sPlayedSoundMap.containsKey(tSound = new GT_PlayedSound(mSoundResourceLocation, mX, mY, mZ))) - return; - mWorld.playSound(mX, mY, mZ, mSoundResourceLocation.toString(), mSoundStrength, mSoundModulation, false); - GT_Utility.sPlayedSoundMap.put(tSound, mTimeUntilNextSound); - } catch (Throwable e) { - /**/ - } - } -} diff --git a/src/main/java/gregtech/api/threads/RunnableCableUpdate.java b/src/main/java/gregtech/api/threads/RunnableCableUpdate.java new file mode 100644 index 0000000000..7ed4e28554 --- /dev/null +++ b/src/main/java/gregtech/api/threads/RunnableCableUpdate.java @@ -0,0 +1,87 @@ +package gregtech.api.threads; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.gtnhlib.util.CoordinatePacker; + +import gregtech.GTMod; +import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.implementations.MTECable; +import gregtech.common.GTProxy; + +public class RunnableCableUpdate extends RunnableMachineUpdate { + + protected RunnableCableUpdate(World aWorld, int posX, int posY, int posZ) { + super(aWorld, posX, posY, posZ); + } + + public static void setCableUpdateValues(World aWorld, int posX, int posY, int posZ) { + if (isEnabled) { + EXECUTOR_SERVICE.submit(new RunnableCableUpdate(aWorld, posX, posY, posZ)); + } + } + + @Override + public void run() { + int posX, posY, posZ; + try { + while (!tQueue.isEmpty()) { + final long packedCoords = tQueue.dequeueLong(); + posX = CoordinatePacker.unpackX(packedCoords); + posY = CoordinatePacker.unpackY(packedCoords); + posZ = CoordinatePacker.unpackZ(packedCoords); + + final TileEntity tTileEntity; + + GTProxy.TICK_LOCK.lock(); + try { + // we dont want to go over cables that are in unloaded chunks + // keeping the lock just to make sure no CME happens + if (world.blockExists(posX, posY, posZ)) { + tTileEntity = world.getTileEntity(posX, posY, posZ); + } else { + tTileEntity = null; + } + } finally { + GTProxy.TICK_LOCK.unlock(); + } + + // See if the block itself needs an update + if (tTileEntity instanceof IMachineBlockUpdateable) + ((IMachineBlockUpdateable) tTileEntity).onMachineBlockUpdate(); + + // Now see if we should add the nearby blocks to the queue: + // only add blocks the cable is connected to + if (tTileEntity instanceof BaseMetaPipeEntity metaPipe + && metaPipe.getMetaTileEntity() instanceof MTECable cable) { + for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { + final ForgeDirection side = ForgeDirection.VALID_DIRECTIONS[i]; + if (cable.isConnectedAtSide(side)) { + final long tCoords = CoordinatePacker + .pack(posX + side.offsetX, posY + side.offsetY, posZ + side.offsetZ); + if (visited.add(tCoords)) { + tQueue.enqueue(tCoords); + } + } + } + } + } + } catch (Exception e) { + GTMod.GT_FML_LOGGER.error( + "Well this update was broken... " + initialX + + ", " + + initialY + + ", " + + initialZ + + ", mWorld={" + + world.getProviderName() + + " @dimId " + + world.provider.dimensionId + + "}", + e); + } + } +} diff --git a/src/main/java/gregtech/api/threads/RunnableMachineUpdate.java b/src/main/java/gregtech/api/threads/RunnableMachineUpdate.java new file mode 100644 index 0000000000..d11e176f3d --- /dev/null +++ b/src/main/java/gregtech/api/threads/RunnableMachineUpdate.java @@ -0,0 +1,184 @@ +package gregtech.api.threads; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.gtnhlib.util.CoordinatePacker; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; +import gregtech.common.GTProxy; +import it.unimi.dsi.fastutil.longs.LongArrayFIFOQueue; +import it.unimi.dsi.fastutil.longs.LongOpenHashSet; +import it.unimi.dsi.fastutil.longs.LongSet; + +public class RunnableMachineUpdate implements Runnable { + + // used by runner thread + protected final int initialX, initialY, initialZ; + protected final World world; + protected final LongSet visited = new LongOpenHashSet(); + protected final LongArrayFIFOQueue tQueue = new LongArrayFIFOQueue(); + + // Threading + private static final ThreadFactory THREAD_FACTORY = r -> { + Thread thread = new Thread(r); + thread.setName("GT_MachineBlockUpdate"); + return thread; + }; + protected static ExecutorService EXECUTOR_SERVICE; + + // This class should never be initiated outside of this class! + protected RunnableMachineUpdate(World aWorld, int posX, int posY, int posZ) { + this.world = aWorld; + this.initialX = posX; + this.initialY = posY; + this.initialZ = posZ; + final long coords = CoordinatePacker.pack(posX, posY, posZ); + visited.add(coords); + tQueue.enqueue(coords); + } + + public static boolean isEnabled() { + return isEnabled; + } + + public static void setEnabled() { + RunnableMachineUpdate.isEnabled = true; + } + + public static void setDisabled() { + RunnableMachineUpdate.isEnabled = false; + } + + public static void setEnabled(boolean isEnabled) { + RunnableMachineUpdate.isEnabled = isEnabled; + } + + public static boolean isCurrentThreadEnabled() { + return perThreadEnable.get(); + } + + public static void setCurrentThreadEnabled(boolean perThreadEnable) { + RunnableMachineUpdate.perThreadEnable.set(perThreadEnable); + } + + protected static boolean isEnabled = true; + protected static final ThreadLocal perThreadEnable = ThreadLocal.withInitial(() -> true); + + public static void setMachineUpdateValues(World aWorld, int posX, int posY, int posZ) { + if (isEnabled() && isCurrentThreadEnabled()) { + EXECUTOR_SERVICE.submit(new RunnableMachineUpdate(aWorld, posX, posY, posZ)); + } + } + + public static void initExecutorService() { + EXECUTOR_SERVICE = Executors.newFixedThreadPool( + Math.max( + 1, + (Runtime.getRuntime() + .availableProcessors() * 2 + / 3)), + THREAD_FACTORY); + } + + public static void shutdownExecutorService() { + try { + GTMod.GT_FML_LOGGER.info("Shutting down Machine block update executor service"); + EXECUTOR_SERVICE.shutdown(); // Disable new tasks from being submitted + // Wait a while for existing tasks to terminate + if (!EXECUTOR_SERVICE.awaitTermination(60, TimeUnit.SECONDS)) { + EXECUTOR_SERVICE.shutdownNow(); // Cancel currently executing tasks + // Wait a while for tasks to respond to being cancelled + if (!EXECUTOR_SERVICE.awaitTermination(60, TimeUnit.SECONDS)) { + GTMod.GT_FML_LOGGER.error( + "Well this didn't terminated well... GT_Runnable_MachineBlockUpdate.shutdownExecutorService"); + } + } + } catch (InterruptedException ie) { + GTMod.GT_FML_LOGGER.error("Well this interruption got interrupted...", ie); + // (Re-)Cancel if current thread also interrupted + EXECUTOR_SERVICE.shutdownNow(); + // Preserve interrupt status + Thread.currentThread() + .interrupt(); + } catch (Exception e) { + GTMod.GT_FML_LOGGER.error("Well this didn't terminated well...", e); + // (Re-)Cancel in case + EXECUTOR_SERVICE.shutdownNow(); + } finally { + GTMod.GT_FML_LOGGER.info("Leaving... GT_Runnable_MachineBlockUpdate.shutdownExecutorService"); + } + } + + @Override + public void run() { + int posX, posY, posZ; + try { + while (!tQueue.isEmpty()) { + final long packedCoords = tQueue.dequeueLong(); + posX = CoordinatePacker.unpackX(packedCoords); + posY = CoordinatePacker.unpackY(packedCoords); + posZ = CoordinatePacker.unpackZ(packedCoords); + + final TileEntity tTileEntity; + final boolean isMachineBlock; + + // This might load a chunk... which might load a TileEntity... which might get added to + // `loadedTileEntityList`... which might be in the process + // of being iterated over during `UpdateEntities()`... which might cause a + // ConcurrentModificationException. So, lock that shit. + GTProxy.TICK_LOCK.lock(); + try { + tTileEntity = world.getTileEntity(posX, posY, posZ); + isMachineBlock = GregTechAPI + .isMachineBlock(world.getBlock(posX, posY, posZ), world.getBlockMetadata(posX, posY, posZ)); + } finally { + GTProxy.TICK_LOCK.unlock(); + } + + // See if the block itself needs an update + if (tTileEntity instanceof IMachineBlockUpdateable) + ((IMachineBlockUpdateable) tTileEntity).onMachineBlockUpdate(); + + // Now see if we should add the nearby blocks to the queue: + // 1) If we've visited less than 5 blocks, then yes + // 2) If the tile says we should recursively updated (pipes don't, machine blocks do) + // 3) If the block at the coordinates is marked as a machine block + if (visited.size() < 5 + || (tTileEntity instanceof IMachineBlockUpdateable + && ((IMachineBlockUpdateable) tTileEntity).isMachineBlockUpdateRecursive()) + || isMachineBlock) { + for (int i = 0; i < ForgeDirection.VALID_DIRECTIONS.length; i++) { + final ForgeDirection side = ForgeDirection.VALID_DIRECTIONS[i]; + final long tCoords = CoordinatePacker + .pack(posX + side.offsetX, posY + side.offsetY, posZ + side.offsetZ); + if (visited.add(tCoords)) { + tQueue.enqueue(tCoords); + } + } + } + } + } catch (Exception e) { + GTMod.GT_FML_LOGGER.error( + "Well this update was broken... " + initialX + + ", " + + initialY + + ", " + + initialZ + + ", mWorld={" + + world.getProviderName() + + " @dimId " + + world.provider.dimensionId + + "}", + e); + } + } +} diff --git a/src/main/java/gregtech/api/threads/RunnableSound.java b/src/main/java/gregtech/api/threads/RunnableSound.java new file mode 100644 index 0000000000..30704f2a97 --- /dev/null +++ b/src/main/java/gregtech/api/threads/RunnableSound.java @@ -0,0 +1,41 @@ +package gregtech.api.threads; + +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +import gregtech.api.util.GTPlayedSound; +import gregtech.api.util.GTUtility; + +public class RunnableSound implements Runnable { + + private final double mX, mY, mZ; + private final int mTimeUntilNextSound; + private final World mWorld; + private final ResourceLocation mSoundResourceLocation; + private final float mSoundStrength, mSoundModulation; + + public RunnableSound(World aWorld, double aX, double aY, double aZ, int aTimeUntilNextSound, + ResourceLocation aSoundResourceLocation, float aSoundStrength, float aSoundModulation) { + mWorld = aWorld; + mX = aX; + mY = aY; + mZ = aZ; + mTimeUntilNextSound = aTimeUntilNextSound; + mSoundResourceLocation = aSoundResourceLocation; + mSoundStrength = aSoundStrength; + mSoundModulation = aSoundModulation; + } + + @Override + public void run() { + try { + GTPlayedSound tSound; + if (GTUtility.sPlayedSoundMap.containsKey(tSound = new GTPlayedSound(mSoundResourceLocation, mX, mY, mZ))) + return; + mWorld.playSound(mX, mY, mZ, mSoundResourceLocation.toString(), mSoundStrength, mSoundModulation, false); + GTUtility.sPlayedSoundMap.put(tSound, mTimeUntilNextSound); + } catch (Throwable e) { + /**/ + } + } +} diff --git a/src/main/java/gregtech/api/util/AssemblyLineServer.java b/src/main/java/gregtech/api/util/AssemblyLineServer.java new file mode 100644 index 0000000000..49e3882982 --- /dev/null +++ b/src/main/java/gregtech/api/util/AssemblyLineServer.java @@ -0,0 +1,297 @@ +package gregtech.api.util; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +import net.minecraftforge.common.config.ConfigCategory; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsBotania; + +public class AssemblyLineServer { + + public static LinkedHashMap lServerNames = new LinkedHashMap<>(); + private static LinkedHashMap internal2 = new LinkedHashMap<>(), internal3 = new LinkedHashMap<>(), + internal4 = new LinkedHashMap<>(); + private static HashMap internal = new HashMap<>(); + + public static void fillMap(FMLPreInitializationEvent aEvent) { + Configuration conf = GTLanguageManager.sEnglishFile; + + ConfigCategory cat = conf.getCategory("languagefile"); + internal.putAll(cat.getValues()); + for (Map.Entry entry : internal.entrySet()) { + try { + String s = entry.getValue() + .getString() + .replaceAll("%", ""); + + if (entry.getKey() + .contains("metaitem") && s.contains("material")) internal2.put(entry.getKey(), s); + else if (entry.getKey() + .contains("blockmachines") && s.contains("material")) internal3.put(entry.getKey(), s); + else if ((entry.getKey() + .contains("blockores") + || (entry.getKey() + .contains("blockmetal") + || entry.getKey() + .contains("blockgem"))) + && s.contains("material")) internal4.put(entry.getKey(), s); + else lServerNames.put(entry.getKey(), s); + } catch (Exception ignored) {} + } + for (Map.Entry entry : internal2.entrySet()) { + try { + if (entry.getKey() + .contains("name")) { + int i = Integer.parseInt( + entry.getKey() + .substring( + "gt.metaitem.01.".length(), + entry.getKey() + .length() - ".name".length())); + i = i % 1000; + if (GregTechAPI.sGeneratedMaterials[i] != null) lServerNames.put( + entry.getKey(), + entry.getValue() + .replace("material", GregTechAPI.sGeneratedMaterials[i].toString())); + else lServerNames.put(entry.getKey(), null); + } + } catch (Exception ignored) {} + } + for (Map.Entry entry : internal3.entrySet()) { + try { + if (entry.getKey() + .contains("cable")) + lServerNames.put( + entry.getKey(), + entry.getValue() + .replace( + "material", + entry.getKey() + .substring( + "gt.blockmachines.cable.".length(), + entry.getKey() + .length() - ".01.name".length()))); + else if (entry.getKey() + .contains("gt_frame_")) + lServerNames.put( + entry.getKey(), + entry.getValue() + .replace( + "material", + entry.getKey() + .substring( + "gt.blockmachines.gt_frame_".length(), + entry.getKey() + .length() - ".name".length()))); + else if (entry.getKey() + .contains("gt_pipe_")) { + if (!entry.getKey() + .contains("_huge") + && !entry.getKey() + .contains("_large") + && !entry.getKey() + .contains("_nonuple") + && !entry.getKey() + .contains("_quadruple") + && !entry.getKey() + .contains("_small") + && !entry.getKey() + .contains("_tiny")) + lServerNames.put( + entry.getKey(), + entry.getValue() + .replace( + "material", + entry.getKey() + .substring( + "gt.blockmachines.gt_pipe_".length(), + entry.getKey() + .length() - ".name".length()))); + else if (entry.getKey() + .contains("_huge") + || entry.getKey() + .contains("_tiny")) + lServerNames.put( + entry.getKey(), + entry.getValue() + .replace( + "material", + entry.getKey() + .substring( + "gt.blockmachines.gt_pipe_".length(), + entry.getKey() + .length() - "_tiny.name".length()))); + else if (entry.getKey() + .contains("_large") + || entry.getKey() + .contains("_small")) + lServerNames.put( + entry.getKey(), + entry.getValue() + .replace( + "material", + entry.getKey() + .substring( + "gt.blockmachines.gt_pipe_".length(), + entry.getKey() + .length() - "_large.name".length()))); + else if (entry.getKey() + .contains("_nonuple")) + lServerNames.put( + entry.getKey(), + entry.getValue() + .replace( + "material", + entry.getKey() + .substring( + "gt.blockmachines.gt_pipe_".length(), + entry.getKey() + .length() - "_nonuple.name".length()))); + else if (entry.getKey() + .contains("_quadruple")) + lServerNames.put( + entry.getKey(), + entry.getValue() + .replace( + "material", + entry.getKey() + .substring( + "gt.blockmachines.gt_pipe_".length(), + entry.getKey() + .length() - "_quadruple.name".length()))); + } else if (entry.getKey() + .contains("wire")) + lServerNames.put( + entry.getKey(), + entry.getValue() + .replace( + "material", + entry.getKey() + .substring( + "gt.blockmachines.wire.".length(), + entry.getKey() + .length() - ".01.name".length()))); + else lServerNames.put(entry.getKey(), entry.getValue()); + } catch (Exception ignored) {} + } + for (Map.Entry entry : internal4.entrySet()) { + try { + if (entry.getKey() + .contains("blockores")) { + int i = Integer.parseInt( + entry.getKey() + .substring( + "gt.blockores.".length(), + entry.getKey() + .length() - ".name".length())); + i = i % 1000; + if (GregTechAPI.sGeneratedMaterials[i] != null) lServerNames.put( + entry.getKey(), + entry.getValue() + .replace("material", GregTechAPI.sGeneratedMaterials[i].toString())); + else lServerNames.put(entry.getKey(), null); + } else if (entry.getKey() + .contains("blockmetal")) { + Materials[] mMats = null; + String t = entry.getKey() + .substring("gt.blockmetal".length()); + t = t.substring(0, 1); + int i = Integer.parseInt(t); + switch (i) { + case 1 -> mMats = new Materials[] { Materials.Adamantium, Materials.Aluminium, + Materials.Americium, Materials.AnnealedCopper, Materials.Antimony, Materials.Arsenic, + Materials.AstralSilver, Materials.BatteryAlloy, Materials.Beryllium, Materials.Bismuth, + Materials.BismuthBronze, Materials.BlackBronze, Materials.BlackSteel, + Materials.BlueAlloy, Materials.BlueSteel, Materials.Brass }; + case 2 -> mMats = new Materials[] { Materials.Bronze, Materials.Caesium, Materials.Cerium, + Materials.Chrome, Materials.ChromiumDioxide, Materials.Cobalt, Materials.CobaltBrass, + Materials.Copper, Materials.Cupronickel, Materials.DamascusSteel, Materials.DarkIron, + Materials.DeepIron, Materials.Desh, Materials.Duranium, Materials.Dysprosium, + Materials.Electrum }; + case 3 -> mMats = new Materials[] { Materials.ElectrumFlux, Materials.Enderium, + Materials.Erbium, Materials.Europium, Materials.FierySteel, Materials.Gadolinium, + Materials.Gallium, Materials.Holmium, Materials.HSLA, Materials.Indium, + Materials.InfusedGold, Materials.Invar, Materials.Iridium, Materials.IronMagnetic, + Materials.IronWood, Materials.Kanthal }; + case 4 -> mMats = new Materials[] { Materials.Knightmetal, Materials.Lanthanum, + Materials.Lead, Materials.Lutetium, Materials.Magnalium, Materials.Magnesium, + Materials.Manganese, Materials.MeteoricIron, Materials.MeteoricSteel, Materials.Trinium, + Materials.Mithril, Materials.Molybdenum, Materials.Naquadah, Materials.NaquadahAlloy, + Materials.NaquadahEnriched, Materials.Naquadria }; + case 5 -> mMats = new Materials[] { Materials.Neodymium, Materials.NeodymiumMagnetic, + Materials.Neutronium, Materials.Nichrome, Materials.Nickel, Materials.Niobium, + Materials.NiobiumNitride, Materials.NiobiumTitanium, Materials.Osmiridium, + Materials.Osmium, Materials.Palladium, Materials.PigIron, Materials.Platinum, + Materials.Plutonium, Materials.Plutonium241, Materials.Praseodymium }; + case 6 -> mMats = new Materials[] { Materials.Promethium, Materials.RedAlloy, + Materials.RedSteel, Materials.RoseGold, Materials.Rubidium, Materials.Samarium, + Materials.Scandium, Materials.ShadowIron, Materials.ShadowSteel, Materials.Silicon, + Materials.Silver, Materials.SolderingAlloy, Materials.StainlessSteel, Materials.Steel, + Materials.SteelMagnetic, Materials.SterlingSilver }; + case 7 -> mMats = new Materials[] { Materials.Sunnarium, Materials.Tantalum, + Materials.Tellurium, Materials.Terbium, Materials.Thaumium, Materials.Thorium, + Materials.Thulium, Materials.Tin, Materials.TinAlloy, Materials.Titanium, + Materials.Tritanium, Materials.Tungsten, Materials.TungstenSteel, Materials.Ultimet, + Materials.Uranium, Materials.Uranium235 }; + case 8 -> mMats = new Materials[] { Materials.Vanadium, Materials.VanadiumGallium, + Materials.WroughtIron, Materials.Ytterbium, Materials.Yttrium, + Materials.YttriumBariumCuprate, Materials.Zinc, Materials.TungstenCarbide, + Materials.VanadiumSteel, Materials.HSSG, Materials.HSSE, Materials.HSSS, + Materials.Steeleaf, Materials.Ichorium, Materials.Firestone }; + } + t = entry.getKey() + .substring( + "gt.blockmetal1.".length(), + entry.getKey() + .length() - ".name".length()); + i = Integer.parseInt(t); + lServerNames.put(entry.getKey(), "Block of " + mMats[i].toString()); + mMats = null; + } else if (entry.getKey() + .contains("blockgem")) { + Materials[] mMats = null; + String t = entry.getKey() + .substring("gt.blockgem".length()); + t = t.substring(0, 1); + int i = Integer.parseInt(t); + switch (i) { + case 1 -> mMats = new Materials[] { Materials.InfusedAir, Materials.Amber, + Materials.Amethyst, Materials.InfusedWater, Materials.BlueTopaz, + Materials.CertusQuartz, Materials.Dilithium, Materials.EnderEye, + Materials.EnderPearl, Materials.FoolsRuby, Materials.Force, Materials.Forcicium, + Materials.Forcillium, Materials.GreenSapphire, Materials.InfusedFire, + Materials.Jasper, MaterialsBotania.ManaDiamond, + MaterialsBotania.BotaniaDragonstone }; + case 2 -> mMats = new Materials[] { Materials.Lazurite, Materials.Lignite, + Materials.Monazite, Materials.Niter, Materials.Olivine, Materials.Opal, + Materials.InfusedOrder, Materials.InfusedEntropy, Materials.Phosphorus, + Materials.Quartzite, Materials.GarnetRed, Materials.Ruby, Materials.Sapphire, + Materials.Sodalite, Materials.Tanzanite, Materials.InfusedEarth }; + case 3 -> mMats = new Materials[] { Materials.Topaz, Materials.Vinteum, + Materials.GarnetYellow, Materials.NetherStar, Materials.Charcoal, Materials.Blaze }; + } + t = entry.getKey() + .substring( + "gt.blockgem1.".length(), + entry.getKey() + .length() - ".name".length()); + i = Integer.parseInt(t); + lServerNames.put(entry.getKey(), "Block of " + mMats[i].toString()); + mMats = null; + } + } catch (Exception ignored) {} + } + + internal = null; + internal2 = null; + internal3 = null; + internal4 = null; + } +} diff --git a/src/main/java/gregtech/api/util/AssemblyLineUtils.java b/src/main/java/gregtech/api/util/AssemblyLineUtils.java new file mode 100644 index 0000000000..22bed1884b --- /dev/null +++ b/src/main/java/gregtech/api/util/AssemblyLineUtils.java @@ -0,0 +1,561 @@ +package gregtech.api.util; + +import static gregtech.GTMod.GT_FML_LOGGER; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Objects; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraftforge.common.util.Constants.NBT; +import net.minecraftforge.fluids.FluidStack; + +import cpw.mods.fml.common.FMLCommonHandler; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.objects.GTItemStack; +import gregtech.api.util.GTRecipe.RecipeAssemblyLine; + +public class AssemblyLineUtils { + + /** + * A cache of Recipes using the Output as Key. + */ + private static final HashMap sRecipeCacheByOutput = new HashMap<>(); + /** + * A cache of Recipes using the Recipe Hash String as Key. + */ + private static final HashMap sRecipeCacheByRecipeHash = new HashMap<>(); + + /** + * Checks the DataStick for deprecated/invalid recipes, updating them as required. + * + * @param aDataStick - The DataStick to process + * @return Is this DataStick now valid with a current recipe? + */ + public static GTRecipe.RecipeAssemblyLine processDataStick(ItemStack aDataStick) { + if (!isItemDataStick(aDataStick)) { + return null; + } + if (doesDataStickNeedUpdate(aDataStick)) { + ItemStack aStickOutput = getDataStickOutput(aDataStick); + if (aStickOutput != null) { + GTRecipe.RecipeAssemblyLine aIntendedRecipe = findAssemblyLineRecipeByOutput(aStickOutput); + if (aIntendedRecipe != null && setAssemblyLineRecipeOnDataStick(aDataStick, aIntendedRecipe)) + return aIntendedRecipe; + } + } + return null; + } + + /** + * Finds an Assembly Line recipe from a DataStick. + * + * @param aDataStick - The DataStick to check. + * @return The GTRecipe_AssemblyLine recipe contained on the DataStick, if any. + */ + public static RecipeAssemblyLine findAssemblyLineRecipeFromDataStick(ItemStack aDataStick) { + return findAssemblyLineRecipeFromDataStick(aDataStick, false).getRecipe(); + } + + /** + * Finds an Assembly Line recipe from a DataStick. + * + * @param aDataStick - The DataStick to check. + * @param aReturnBuiltRecipe - Do we return a GTRecipe_AssemblyLine built from the data on the Data Stick instead + * of searching the Recipe Map? + * @return The GTRecipe_AssemblyLine recipe contained on the DataStick, if any. + */ + @Nonnull + public static LookupResult findAssemblyLineRecipeFromDataStick(ItemStack aDataStick, boolean aReturnBuiltRecipe) { + if (!isItemDataStick(aDataStick) || !doesDataStickHaveOutput(aDataStick)) { + return LookupResultType.INVALID_STICK.getResult(); + } + List aInputs = new ArrayList<>(16); + ItemStack aOutput = getDataStickOutput(aDataStick); + List> mOreDictAlt = new ArrayList<>(16); + List aFluidInputs = new ArrayList<>(4); + + NBTTagCompound aTag = aDataStick.getTagCompound(); + if (aTag == null) { + return LookupResultType.INVALID_STICK.getResult(); + } + + // Get From Cache + if (doesDataStickHaveRecipeHash(aDataStick)) { + GTRecipe.RecipeAssemblyLine aRecipeFromCache = sRecipeCacheByRecipeHash + .get(getHashFromDataStack(aDataStick)); + if (aRecipeFromCache != null && GTUtility.areStacksEqual(aOutput, aRecipeFromCache.mOutput)) { + return LookupResultType.VALID_STACK_AND_VALID_HASH.getResult(aRecipeFromCache); + } // else: no cache, or the old recipe run into a hash collision with a different new recipe + } + + for (int i = 0; i < 16; i++) { + int count = aTag.getInteger("a" + i); + if (!aTag.hasKey("" + i) && count <= 0) { + continue; + } + + List tAltCurrent = new ArrayList<>(); + for (int j = 0; j < count; j++) { + ItemStack tLoaded = GTUtility.loadItem(aTag, "a" + i + ":" + j); + if (tLoaded == null) { + continue; + } + tAltCurrent.add(tLoaded); + if (GTValues.D1) { + GT_FML_LOGGER.info("Item Alt " + i + " : " + tLoaded.getUnlocalizedName()); + } + } + mOreDictAlt.add(tAltCurrent); + ItemStack tLoaded = GTUtility.loadItem(aTag, "" + i); + if (tLoaded == null) { + continue; + } + aInputs.add(tLoaded); + if (GTValues.D1) { + GT_FML_LOGGER.info("Item " + i + " : " + tLoaded.getUnlocalizedName()); + } + } + + if (GTValues.D1) { + GT_FML_LOGGER.info("All Items done, start fluid check"); + } + for (int i = 0; i < 4; i++) { + if (!aTag.hasKey("f" + i)) continue; + FluidStack tLoaded = GTUtility.loadFluid(aTag, "f" + i); + if (tLoaded == null) continue; + aFluidInputs.add(tLoaded); + if (GTValues.D1) { + GT_FML_LOGGER.info("Fluid " + i + " " + tLoaded.getUnlocalizedName()); + } + } + if (!aTag.hasKey("output") || !aTag.hasKey("time") + || aTag.getInteger("time") <= 0 + || !aTag.hasKey("eu") + || !GTUtility.isStackValid(aOutput)) { + return LookupResultType.INVALID_STICK.getResult(); + } + if (GTValues.D1) { + GT_FML_LOGGER.info("Found Data Stick recipe"); + } + + int aTime = aTag.getInteger("time"); + int aEU = aTag.getInteger("eu"); + + // Try build a recipe instance + if (aReturnBuiltRecipe) { + return LookupResultType.VALID_STACK_AND_VALID_HASH.getResult( + new GTRecipe.RecipeAssemblyLine( + null, + 0, + aInputs.toArray(new ItemStack[0]), + aFluidInputs.toArray(new FluidStack[0]), + aOutput, + aTime, + aEU)); + } + + for (GTRecipe.RecipeAssemblyLine aRecipe : RecipeAssemblyLine.sAssemblylineRecipes) { + if (aRecipe.mEUt != aEU || aRecipe.mDuration != aTime) continue; + if (!GTUtility.areStacksEqual(aOutput, aRecipe.mOutput, true)) continue; + if (!GTUtility.areStackListsEqual(Arrays.asList(aRecipe.mInputs), aInputs, false, true)) continue; + if (!Objects.equals(Arrays.asList(aRecipe.mFluidInputs), aFluidInputs)) continue; + if (!areStacksEqual(aRecipe.mOreDictAlt, mOreDictAlt)) continue; + + // Cache it + String aRecipeHash = generateRecipeHash(aRecipe); + sRecipeCacheByRecipeHash.put(aRecipeHash, aRecipe); + sRecipeCacheByOutput.put(new GTItemStack(aRecipe.mOutput), aRecipe); + if (doesDataStickHaveRecipeHash(aDataStick)) { + String aStickHash = getHashFromDataStack(aDataStick); + if (aRecipeHash.equals(aStickHash)) + return LookupResultType.VALID_STACK_AND_VALID_HASH.getResult(aRecipe); + } + return LookupResultType.VALID_STACK_AND_VALID_RECIPE.getResult(aRecipe); + } + return LookupResultType.VALID_STACK_BUT_INVALID_RECIPE.getResult(); + } + + private static boolean areStacksEqual(ItemStack[][] lhs, List> rhs) { + for (int i = 0; i < lhs.length; i++) { + if (!areStacksEqual(lhs[i], rhs.get(i))) return false; + } + return true; + } + + private static boolean areStacksEqual(ItemStack[] lhs, List rhs) { + return lhs == null ? rhs.isEmpty() + : !rhs.isEmpty() && GTUtility.areStackListsEqual(Arrays.asList(lhs), rhs, false, true); + } + + /** + * Finds a GTRecipe_AssemblyLine based on the expected output ItemStack. + * + * @param aOutput - The Output of a GTRecipe_AssemblyLine. + * @return First found GTRecipe_AssemblyLine with matching output. + */ + public static GTRecipe.RecipeAssemblyLine findAssemblyLineRecipeByOutput(ItemStack aOutput) { + if (aOutput == null) { + return null; + } + + // Check the cache + GTItemStack aCacheStack = new GTItemStack(aOutput); + RecipeAssemblyLine aRecipeFromCache = sRecipeCacheByOutput.get(aCacheStack); + if (aRecipeFromCache != null) { + return aRecipeFromCache; + } + + // Iterate all recipes and return the first matching based on Output. + for (RecipeAssemblyLine aRecipe : GTRecipe.RecipeAssemblyLine.sAssemblylineRecipes) { + ItemStack aRecipeOutput = aRecipe.mOutput; + if (GTUtility.areStacksEqual(aRecipeOutput, aOutput)) { + // Cache it to prevent future iterations of all recipes + sRecipeCacheByOutput.put(aCacheStack, aRecipe); + sRecipeCacheByRecipeHash.put(generateRecipeHash(aRecipe), aRecipe); + return aRecipe; + } + } + return null; + } + + /** + * @param aRecipe - The recipe to generate a Recipe Hash String from. + * @return The Recipe Hash String. + */ + public static String generateRecipeHash(GTRecipe.RecipeAssemblyLine aRecipe) { + String aHash = "Invalid.Recipe.Hash"; + if (aRecipe != null) { + aHash = "Hash." + aRecipe.getPersistentHash(); + } + return aHash; + } + + /** + * @param aRecipe - The recipe to add to internal caches + * @throws IllegalArgumentException if given recipe collide with any existing recipe in the cache + */ + public static void addRecipeToCache(RecipeAssemblyLine aRecipe) { + if (aRecipe != null) { + String aHash = "Hash." + aRecipe.getPersistentHash(); + GTRecipe.RecipeAssemblyLine existing = sRecipeCacheByOutput.put(new GTItemStack(aRecipe.mOutput), aRecipe); + if (existing != null) throw new IllegalArgumentException("Duplicate assline recipe for " + aRecipe.mOutput); + existing = sRecipeCacheByRecipeHash.put(aHash, aRecipe); + if (existing != null && !existing.equals(aRecipe)) + throw new IllegalArgumentException("Recipe hash collision for " + aRecipe + " and " + existing); + } + } + + /** + * @param aHash - Recipe hash String, may be null but will just be treated as invalid. + * @return Is this Recipe Hash String valid? + */ + public static boolean isValidHash(String aHash) { + if (aHash != null && aHash.length() > 0) { + // persistent hash can never be 0 + return !aHash.equals("Invalid.Recipe.Hash") && !aHash.equals("Hash.0"); + } + return false; + } + + /** + * @param aStack - The ItemStack to check. + * @return Is this ItemStack a Data Stick? + */ + public static boolean isItemDataStick(ItemStack aStack) { + return GTUtility.isStackValid(aStack) && ItemList.Tool_DataStick.isStackEqual(aStack, false, true); + } + + /** + * @param aDataStick - The Data Stick to check. + * @return Does this Data Stick have a valid output ItemStack? + */ + public static boolean doesDataStickHaveOutput(ItemStack aDataStick) { + return isItemDataStick(aDataStick) && aDataStick.hasTagCompound() + && aDataStick.getTagCompound() + .hasKey("output"); + } + + /** + * @param aDataStick - The Data Stick to check. + * @return Does this Data Stick need recipe data updated. + */ + public static boolean doesDataStickNeedUpdate(ItemStack aDataStick) { + if (isItemDataStick(aDataStick) && doesDataStickHaveRecipeHash(aDataStick)) { + String aStickHash = getHashFromDataStack(aDataStick); + if (isValidHash(aStickHash) && doesDataStickHaveOutput(aDataStick)) { + ItemStack aStickOutput = getDataStickOutput(aDataStick); + GTRecipe.RecipeAssemblyLine aIntendedRecipe = findAssemblyLineRecipeByOutput(aStickOutput); + return !aStickHash.equals(generateRecipeHash(aIntendedRecipe)); + } + } + return true; + } + + /** + * @param aDataStick - The Data Stick to check. + * @return Does this have a Recipe Hash String at all? + */ + public static boolean doesDataStickHaveRecipeHash(ItemStack aDataStick) { + if (isItemDataStick(aDataStick) && aDataStick.hasTagCompound()) { + NBTTagCompound aNBT = aDataStick.getTagCompound(); + return aNBT.hasKey("Data.Recipe.Hash") && !aNBT.getString("Data.Recipe.Hash") + .equals("Hash.0"); + } + return false; + } + + /** + * Get the Output ItemStack from a Data Stick. + * + * @param aDataStick - The Data Stick to check. + * @return Output ItemStack contained on the Data Stick. + */ + public static ItemStack getDataStickOutput(ItemStack aDataStick) { + if (doesDataStickHaveOutput(aDataStick)) { + return GTUtility.loadItem(aDataStick.getTagCompound(), "output"); + } + return null; + } + + /** + * @param aDataStick - The Data Stick to process. + * @return The stored Recipe Hash String on the Data Stick, will return an invalid Hash if one is not found. + *

+ * The hash will be guaranteed to pass isValidHash(). + *

+ * Will not return Null. + */ + public static String getHashFromDataStack(ItemStack aDataStick) { + if (isItemDataStick(aDataStick) && aDataStick.hasTagCompound()) { + NBTTagCompound aNBT = aDataStick.getTagCompound(); + if (aNBT.hasKey("Data.Recipe.Hash", NBT.TAG_STRING)) { + String hash = aNBT.getString("Data.Recipe.Hash"); + if (isValidHash(hash)) return hash; + } + } + return "Invalid.Recipe.Hash"; + } + + /** + * + * @param aDataStick - The Data Stick to update. + * @param aRecipeHash - The Recipe Hash String to update with. + * @return Did we update the Recipe Hash String on the Data Stick? + */ + public static boolean setRecipeHashOnDataStick(ItemStack aDataStick, String aRecipeHash) { + if (isItemDataStick(aDataStick) && aDataStick.hasTagCompound()) { + NBTTagCompound aNBT = aDataStick.getTagCompound(); + aNBT.setString("Data.Recipe.Hash", aRecipeHash); + aDataStick.setTagCompound(aNBT); + return true; + } + return false; + } + + /** + * + * @param aDataStick - The Data Stick to update. + * @param aNewRecipe - The New GTRecipe_AssemblyLine recipe to update it with. + * @return Did we set the new recipe data & Recipe Hash String on the Data Stick? + */ + public static boolean setAssemblyLineRecipeOnDataStick(ItemStack aDataStick, + GTRecipe.RecipeAssemblyLine aNewRecipe) { + return setAssemblyLineRecipeOnDataStick(aDataStick, aNewRecipe, true); + } + + public static boolean setAssemblyLineRecipeOnDataStick(ItemStack aDataStick, GTRecipe.RecipeAssemblyLine aNewRecipe, + boolean setUpdateTime) { + if (isItemDataStick(aDataStick) && aNewRecipe.mOutput != null) { + String s = aNewRecipe.mOutput.getDisplayName(); + if (FMLCommonHandler.instance() + .getEffectiveSide() + .isServer()) { + s = AssemblyLineServer.lServerNames.get(aNewRecipe.mOutput.getDisplayName()); + if (s == null) { + s = aNewRecipe.mOutput.getDisplayName(); + } + } + + String aHash = generateRecipeHash(aNewRecipe); + if (GTValues.D1) { + GTRecipe.RecipeAssemblyLine aOldRecipe = findAssemblyLineRecipeFromDataStick(aDataStick, true).recipe; + GT_FML_LOGGER.info( + "Updating data stick: " + aDataStick.getDisplayName() + + " | Old Recipe Hash: " + + generateRecipeHash(aOldRecipe) + + ", New Recipe Hash: " + + aHash); + } + + String author = "Assembling Line Recipe Generator"; + String displayName = null; + if (aDataStick.hasTagCompound()) { + NBTTagCompound tag = aDataStick.getTagCompound(); + if (tag.hasKey("author", NBT.TAG_STRING)) { + author = tag.getString("author"); + } + if (tag.hasKey("display", NBT.TAG_COMPOUND)) { + NBTTagCompound displayTag = tag.getCompoundTag("display"); + if (displayTag.hasKey("Name", NBT.TAG_STRING)) displayName = displayTag.getString("Name"); + } + } + + // remove possible old NBTTagCompound + aDataStick.setTagCompound(new NBTTagCompound()); + if (displayName != null) aDataStick.setStackDisplayName(displayName); + if (GTValues.D1) { + GTUtility.ItemNBT.setBookTitle(aDataStick, s + " Construction Data (" + aHash + ")"); + } else { + GTUtility.ItemNBT.setBookTitle(aDataStick, s + " Construction Data"); + } + + NBTTagCompound tNBT = aDataStick.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } + + tNBT.setTag("output", aNewRecipe.mOutput.writeToNBT(new NBTTagCompound())); + tNBT.setInteger("time", aNewRecipe.mDuration); + tNBT.setInteger("eu", aNewRecipe.mEUt); + tNBT.setString("author", author); + NBTTagList tNBTList = new NBTTagList(); + tNBTList.appendTag( + new NBTTagString( + "Construction plan for " + aNewRecipe.mOutput.stackSize + + " " + + s + + ". Needed EU/t: " + + aNewRecipe.mEUt + + " Production time: " + + (aNewRecipe.mDuration / 20))); + for (int i = 0; i < aNewRecipe.mInputs.length; i++) { + boolean hasSetOreDictAlt = false; + + if (aNewRecipe.mOreDictAlt[i] != null && aNewRecipe.mOreDictAlt[i].length > 0) { + tNBT.setInteger("a" + i, aNewRecipe.mOreDictAlt[i].length); + int count = 0; + StringBuilder tBuilder = new StringBuilder("Input Bus " + (i + 1) + ": "); + for (int j = 0; j < aNewRecipe.mOreDictAlt[i].length; j++) { + ItemStack tStack = aNewRecipe.mOreDictAlt[i][j]; + if (tStack != null) { + tNBT.setTag("a" + i + ":" + j, tStack.writeToNBT(new NBTTagCompound())); + + s = tStack.getDisplayName(); + if (FMLCommonHandler.instance() + .getEffectiveSide() + .isServer()) { + s = AssemblyLineServer.lServerNames.get(tStack.getDisplayName()); + if (s == null) s = tStack.getDisplayName(); + } + + tBuilder.append(count == 0 ? "" : "\nOr ") + .append(tStack.stackSize) + .append(" ") + .append(s); + count++; + } + } + if (count > 0) { + tNBTList.appendTag(new NBTTagString(tBuilder.toString())); + hasSetOreDictAlt = true; + } + } + + if (aNewRecipe.mInputs[i] != null) { + tNBT.setTag("" + i, aNewRecipe.mInputs[i].writeToNBT(new NBTTagCompound())); + + if (!hasSetOreDictAlt) { + s = aNewRecipe.mInputs[i].getDisplayName(); + if (FMLCommonHandler.instance() + .getEffectiveSide() + .isServer()) { + s = AssemblyLineServer.lServerNames.get(aNewRecipe.mInputs[i].getDisplayName()); + if (s == null) s = aNewRecipe.mInputs[i].getDisplayName(); + } + tNBTList.appendTag( + new NBTTagString( + "Input Bus " + (i + 1) + ": " + aNewRecipe.mInputs[i].stackSize + " " + s)); + } + } + } + for (int i = 0; i < aNewRecipe.mFluidInputs.length; i++) { + if (aNewRecipe.mFluidInputs[i] != null) { + tNBT.setTag("f" + i, aNewRecipe.mFluidInputs[i].writeToNBT(new NBTTagCompound())); + + s = aNewRecipe.mFluidInputs[i].getLocalizedName(); + if (FMLCommonHandler.instance() + .getEffectiveSide() + .isServer()) { + s = AssemblyLineServer.lServerNames.get(aNewRecipe.mFluidInputs[i].getLocalizedName()); + if (s == null) s = aNewRecipe.mFluidInputs[i].getLocalizedName(); + } + tNBTList.appendTag( + new NBTTagString( + "Input Hatch " + (i + 1) + ": " + aNewRecipe.mFluidInputs[i].amount + "L " + s)); + } + } + tNBT.setTag("pages", tNBTList); + if (setUpdateTime) tNBT.setLong("lastUpdate", System.currentTimeMillis()); + aDataStick.setTagCompound(tNBT); + // Set recipe hash + setRecipeHashOnDataStick(aDataStick, aHash); + return true; + } + return false; + } + + public enum LookupResultType { + + INVALID_STICK(true), + VALID_STACK_BUT_INVALID_RECIPE(true), + VALID_STACK_AND_VALID_RECIPE(false), + VALID_STACK_AND_VALID_HASH(false); + + private final boolean recipeNull; + private LookupResult singletonResult; + + LookupResultType(boolean recipeNull) { + this.recipeNull = recipeNull; + } + + public LookupResult getResult() { + if (!recipeNull) throw new IllegalArgumentException("This result type require a nonnull recipe"); + if (singletonResult == null) singletonResult = new LookupResult(null, this); + return singletonResult; + } + + public LookupResult getResult(GTRecipe.RecipeAssemblyLine recipe) { + if ((recipe == null) != recipeNull) + throw new IllegalArgumentException("This result type does not allow given input"); + return new LookupResult(recipe, this); + } + } + + public static class LookupResult { + + private final GTRecipe.RecipeAssemblyLine recipe; + private final LookupResultType type; + + LookupResult(GTRecipe.RecipeAssemblyLine recipe, LookupResultType type) { + this.recipe = recipe; + this.type = type; + } + + public GTRecipe.RecipeAssemblyLine getRecipe() { + return recipe; + } + + public LookupResultType getType() { + return type; + } + } +} diff --git a/src/main/java/gregtech/api/util/BlastFurnaceGasStat.java b/src/main/java/gregtech/api/util/BlastFurnaceGasStat.java index ac1601e846..822e2f036e 100644 --- a/src/main/java/gregtech/api/util/BlastFurnaceGasStat.java +++ b/src/main/java/gregtech/api/util/BlastFurnaceGasStat.java @@ -6,9 +6,8 @@ import java.util.List; import net.minecraftforge.fluids.FluidStack; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; import gregtech.api.enums.Materials; public class BlastFurnaceGasStat { diff --git a/src/main/java/gregtech/api/util/CircuitryBehavior.java b/src/main/java/gregtech/api/util/CircuitryBehavior.java new file mode 100644 index 0000000000..3859be590a --- /dev/null +++ b/src/main/java/gregtech/api/util/CircuitryBehavior.java @@ -0,0 +1,212 @@ +package gregtech.api.util; + +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.IRedstoneCircuitBlock; + +/** + * Redstone Circuit Control Code + *

+ * This should make everything possible what a Redstone Computer or BuildCraft Gate could do. It is intended to use this + * similar to BC-Gates (for acquiring Data) and RP Logic Gates. You could write an extremely specified and complex Logic + * Gate, which works only for you Setup, like with ComputerCraft, but you would have to write an extra Mod to add that, + * as it doesn't work Ingame. + *

+ * One can make use of the fact, that ItemStacks can be stored as Integer, so that you can scan Inventories for specific + * Items using that. Luckily the Buttons in the GUI enable Copy/Paste of ItemID+MetaData to Integer, including the + * WildCard Damage Value when you use rightclick to place it. You just need to use @GT_Utility.stackToInt(ItemStack + * aStack) to get it. + *

+ * All Functions run usually in a seperate try/catch Block, so that failed Logic won't crash the TileEntity. + */ +public abstract class CircuitryBehavior { + + /** + * @param aIndex 0 - 1023 are my own Indices, so use other Numbers! + */ + public CircuitryBehavior(int aIndex) { + GregTechAPI.sCircuitryBehaviors.put(aIndex, this); + } + + /** + * returns if there is Redstone applied to any of the valid Inputs (OR) + */ + public static boolean getAnyRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) + .letsRedstoneGoIn( + side, + aRedstoneCircuitBlock.getCoverID(side), + aRedstoneCircuitBlock.getCoverVariable(side), + aRedstoneCircuitBlock.getOwnTileEntity())) { + if (aRedstoneCircuitBlock.getInputRedstone(side) > 0) { + return true; + } + } + } + return false; + } + + /** + * returns if there is Redstone applied to all the valid Inputs (AND) + */ + public static boolean getAllRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) + .letsRedstoneGoIn( + side, + aRedstoneCircuitBlock.getCoverID(side), + aRedstoneCircuitBlock.getCoverVariable(side), + aRedstoneCircuitBlock.getOwnTileEntity())) { + if (aRedstoneCircuitBlock.getInputRedstone(side) == 0) { + return false; + } + } + } + return true; + } + + /** + * returns if there is Redstone applied to exactly one of the valid Inputs (XOR) + */ + public static boolean getOneRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + int tRedstoneAmount = 0; + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) + .letsRedstoneGoIn( + side, + aRedstoneCircuitBlock.getCoverID(side), + aRedstoneCircuitBlock.getCoverVariable(side), + aRedstoneCircuitBlock.getOwnTileEntity())) { + if (aRedstoneCircuitBlock.getInputRedstone(side) > 0) { + tRedstoneAmount++; + } + } + } + return tRedstoneAmount == 1; + } + + /** + * returns the strongest incoming RS-Power + */ + public static byte getStrongestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + byte tRedstoneAmount = 0; + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) + .letsRedstoneGoIn( + side, + aRedstoneCircuitBlock.getCoverID(side), + aRedstoneCircuitBlock.getCoverVariable(side), + aRedstoneCircuitBlock.getOwnTileEntity())) { + tRedstoneAmount = (byte) Math.max(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(side)); + } + } + return tRedstoneAmount; + } + + // region GUI Functions + + /** + * returns the weakest incoming non-zero RS-Power + */ + public static byte getWeakestNonZeroRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0; + byte tRedstoneAmount = 15; + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) + .letsRedstoneGoIn( + side, + aRedstoneCircuitBlock.getCoverID(side), + aRedstoneCircuitBlock.getCoverVariable(side), + aRedstoneCircuitBlock.getOwnTileEntity())) { + if (aRedstoneCircuitBlock.getInputRedstone(side) > 0) + tRedstoneAmount = (byte) Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(side)); + } + } + return tRedstoneAmount; + } + + /** + * returns the weakest incoming RS-Power + */ + public static byte getWeakestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0; + byte tRedstoneAmount = 15; + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) + .letsRedstoneGoIn( + side, + aRedstoneCircuitBlock.getCoverID(side), + aRedstoneCircuitBlock.getCoverVariable(side), + aRedstoneCircuitBlock.getOwnTileEntity())) { + tRedstoneAmount = (byte) Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(side)); + } + } + return tRedstoneAmount; + } + + /** + * Initializes the Parameters of this Circuit, all Parameters have been set to 0 right before calling this + * + * @param aCircuitData, The Data Storage you can use (8 Slots) + * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself + */ + public abstract void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); + + /** + * Validates the Parameters of this Circuit when a value has been changed by the GUI Also called right + * after @initParameters and when the Chunk reloads + * + * @param aCircuitData, The Data Storage you can use (8 Slots and only the first 4 are User definable) + * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself + */ + public abstract void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); + + // endregion + + // region Utility Functions + + /** + * Called every tick if the Block has enough Energy and if the Block is Active + * + * @param aCircuitData, The Data Storage you can use (8 Slots) + * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself + */ + public abstract void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); + + /** + * If the ItemStack should be displayed. Parameters are between 0 and 3. + */ + public abstract boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, + int aIndex); + + /** + * The Name of the Gate for the GUI + */ + @SideOnly(Side.CLIENT) + public abstract String getName(); + + /** + * The Description of the Gate for the GUI + */ + @SideOnly(Side.CLIENT) + public abstract String getDescription(); + + /** + * The Description of the Data Field for the GUI + */ + @SideOnly(Side.CLIENT) + public abstract String getDataDescription(int[] aCircuitData, int aCircuitDataIndex); + + /** + * How the Integer should be displayed in the GUI. null means, that it just displays as regular Number. + */ + @SideOnly(Side.CLIENT) + public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { + return null; + } + // endregion +} diff --git a/src/main/java/gregtech/api/util/ColorsMetadataSection.java b/src/main/java/gregtech/api/util/ColorsMetadataSection.java index fb9cc6dd56..7e420f3451 100644 --- a/src/main/java/gregtech/api/util/ColorsMetadataSection.java +++ b/src/main/java/gregtech/api/util/ColorsMetadataSection.java @@ -37,7 +37,7 @@ public class ColorsMetadataSection implements IMetadataSection { try { if (!hex.isEmpty()) colorValue = Integer.parseUnsignedInt(hex, 16); } catch (final NumberFormatException e) { - GT_Log.err.println("Couldn't format color correctly of " + key + " -> " + hex); + GTLog.err.println("Couldn't format color correctly of " + key + " -> " + hex); } intMap.put(key, colorValue); } diff --git a/src/main/java/gregtech/api/util/ColorsMetadataSectionSerializer.java b/src/main/java/gregtech/api/util/ColorsMetadataSectionSerializer.java index 389662d041..8eb91802cb 100644 --- a/src/main/java/gregtech/api/util/ColorsMetadataSectionSerializer.java +++ b/src/main/java/gregtech/api/util/ColorsMetadataSectionSerializer.java @@ -14,8 +14,8 @@ import com.google.gson.JsonSerializationContext; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; import gregtech.api.enums.Dyes; @SideOnly(Side.CLIENT) @@ -24,7 +24,7 @@ public class ColorsMetadataSectionSerializer extends BaseMetadataSectionSerializ public ColorsMetadataSection deserialize(JsonElement metadataColors, Type type, JsonDeserializationContext context) { // Default values - boolean enableGuiTint = GregTech_API.sColoredGUI; + boolean enableGuiTint = GregTechAPI.sColoredGUI; Map hexGuiTintMap = new HashMap<>(); Map hexTextColorMap = new HashMap<>(); @@ -39,7 +39,7 @@ public class ColorsMetadataSectionSerializer extends BaseMetadataSectionSerializ entry.getValue() .getAsString()); } else { - GT_Mod.GT_FML_LOGGER.warn("ColorOverride expects primitive value for key `textColor`"); + GTMod.GT_FML_LOGGER.warn("ColorOverride expects primitive value for key `textColor`"); } } } @@ -50,7 +50,7 @@ public class ColorsMetadataSectionSerializer extends BaseMetadataSectionSerializ .getJsonObjectBooleanFieldValueOrDefault(guiTints, "enableGuiTintWhenPainted", true); for (Dyes dye : Dyes.values()) { - hexGuiTintMap.put(dye.mName, GT_Util.toHexString(dye.getRGBA())); + hexGuiTintMap.put(dye.mName, GTUtil.toHexString(dye.getRGBA())); } for (String key : hexGuiTintMap.keySet()) { @@ -59,7 +59,7 @@ public class ColorsMetadataSectionSerializer extends BaseMetadataSectionSerializ key, JsonUtils.getJsonObjectStringFieldValueOrDefault(guiTints, key, hexGuiTintMap.get(key))); } else { - hexGuiTintMap.replace(key, GT_Util.toHexString(Dyes.dyeWhite.getRGBA())); + hexGuiTintMap.replace(key, GTUtil.toHexString(Dyes.dyeWhite.getRGBA())); } } } diff --git a/src/main/java/gregtech/api/util/CoverBehavior.java b/src/main/java/gregtech/api/util/CoverBehavior.java new file mode 100644 index 0000000000..7e6f1049e9 --- /dev/null +++ b/src/main/java/gregtech/api/util/CoverBehavior.java @@ -0,0 +1,402 @@ +package gregtech.api.util; + +import static gregtech.api.enums.GTValues.E; + +import java.lang.ref.WeakReference; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; + +/** + * For Covers with a special behavior. Has fixed storage format of 4 byte. Not very convenient... + */ +public abstract class CoverBehavior extends CoverBehaviorBase { + + public boolean mPlayerNotified = false; + + public CoverBehavior() { + this(null); + } + + public CoverBehavior(ITexture coverTexture) { + super(ISerializableObject.LegacyCoverData.class, coverTexture); + } + + protected static int convert(ISerializableObject.LegacyCoverData data) { + return data == null ? 0 : data.get(); + } + + // region bridge the parent call to legacy calls + + @Override + public final ISerializableObject.LegacyCoverData createDataObject() { + return new ISerializableObject.LegacyCoverData(); + } + + @Override + public ISerializableObject.LegacyCoverData createDataObject(int aLegacyData) { + return new ISerializableObject.LegacyCoverData(aLegacyData); + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { + return isRedstoneSensitive(side, aCoverID, aCoverVariable.get(), aTileEntity, aTimer); + } + + @Override + protected ISerializableObject.LegacyCoverData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, + int aCoverID, ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { + if (aCoverVariable == null) aCoverVariable = new ISerializableObject.LegacyCoverData(); + aCoverVariable.set(doCoverThings(side, aInputRedstone, aCoverID, aCoverVariable.get(), aTileEntity, aTimer)); + return aCoverVariable; + } + + @Override + protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, + float aY, float aZ) { + return onCoverRightclick(side, aCoverID, convert(aCoverVariable), aTileEntity, aPlayer, aX, aY, aZ); + } + + @Override + protected ISerializableObject.LegacyCoverData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, + float aY, float aZ) { + if (aCoverVariable == null) aCoverVariable = new ISerializableObject.LegacyCoverData(); + aCoverVariable + .set(onCoverScrewdriverclick(side, aCoverID, convert(aCoverVariable), aTileEntity, aPlayer, aX, aY, aZ)); + return aCoverVariable; + } + + @Override + protected boolean onCoverShiftRightClickImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer) { + return onCoverShiftRightclick(side, aCoverID, convert(aCoverVariable), aTileEntity, aPlayer); + } + + @Override + protected boolean onCoverRemovalImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, boolean aForced) { + return onCoverRemoval(side, aCoverID, convert(aCoverVariable), aTileEntity, aForced); + } + + @Override + protected void onBaseTEDestroyedImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + onBaseTEDestroyed(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected void onCoverUnloadImpl(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + onCoverUnload(aTileEntity); + } + + @Override + protected String getDescriptionImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return getDescription(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected float getBlastProofLevelImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return getBlastProofLevel(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return letsRedstoneGoIn(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return letsRedstoneGoOut(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return letsEnergyIn(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return letsEnergyOut(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { + return letsFluidIn(side, aCoverID, convert(aCoverVariable), aFluid, aTileEntity); + } + + @Override + protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { + return letsFluidOut(side, aCoverID, convert(aCoverVariable), aFluid, aTileEntity); + } + + @Override + protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, int aSlot, ICoverable aTileEntity) { + return letsItemsIn(side, aCoverID, convert(aCoverVariable), aSlot, aTileEntity); + } + + @Override + protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, int aSlot, ICoverable aTileEntity) { + return letsItemsOut(side, aCoverID, convert(aCoverVariable), aSlot, aTileEntity); + } + + @Override + protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return isGUIClickable(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return manipulatesSidedRedstoneOutput(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return alwaysLookConnected(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected byte getRedstoneInputImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return getRedstoneInput(side, aInputRedstone, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected int getTickRateImpl(ForgeDirection side, int aCoverID, ISerializableObject.LegacyCoverData aCoverVariable, + ICoverable aTileEntity) { + return getTickRate(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected byte getLensColorImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return getLensColor(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + @Override + protected ItemStack getDropImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return getDrop(side, aCoverID, convert(aCoverVariable), aTileEntity); + } + + // endregion + + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return true; + } + + /** + * Called by updateEntity inside the covered TileEntity. aCoverVariable is the Value you returned last time. + */ + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return aCoverVariable; + } + + /** + * Called when someone rightclicks this Cover. + *

+ * return true, if something actually happens. + */ + public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + return false; + } + + /** + * Called when someone rightclicks this Cover with a Screwdriver. Doesn't call @onCoverRightclick in this Case. + *

+ * return the new Value of the Cover Variable + */ + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + return aCoverVariable; + } + + /** + * Called when someone shift-rightclicks this Cover with no tool. Doesn't call @onCoverRightclick in this Case. + */ + public boolean onCoverShiftRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer) { + if (hasCoverGUI() && aPlayer instanceof EntityPlayerMP) { + lastPlayer = new WeakReference<>(aPlayer); + mPlayerNotified = false; + GTUIInfos.openCoverUI(aTileEntity, aPlayer, side); + return true; + } + return false; + } + + /** + * Removes the Cover if this returns true, or if aForced is true. Doesn't get called when the Machine Block is + * getting broken, only if you break the Cover away from the Machine. + */ + public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + boolean aForced) { + return true; + } + + public void onCoverUnload(ICoverable aTileEntity) { + + } + + public void onBaseTEDestroyed(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {} + + /** + * Gives a small Text for the status of the Cover. + */ + public String getDescription(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return E; + } + + /** + * How Blast Proof the Cover is. 30 is normal. + */ + public float getBlastProofLevel(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 10.0F; + } + + /** + * If it lets RS-Signals into the Block + *

+ * This is just Informative so that Machines know if their Redstone Input is blocked or not + */ + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return false; + } + + /** + * If it lets RS-Signals out of the Block + */ + public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Energy into the Block + */ + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Energy out of the Block + */ + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Liquids into the Block, aFluid can be null meaning if this is generally allowing Fluids or not. + */ + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Liquids out of the Block, aFluid can be null meaning if this is generally allowing Fluids or not. + */ + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Items into the Block, aSlot = -1 means if it is generally accepting Items (return false for no + * Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each + * Slot). + */ + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Items out of the Block, aSlot = -1 means if it is generally accepting Items (return false for no + * Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each + * Slot). + */ + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return false; + } + + /** + * If it lets you rightclick the Machine normally + */ + public boolean isGUIClickable(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + /** + * Needs to return true for Covers, which have a Redstone Output on their Facing. + */ + public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return false; + } + + /** + * if this Cover should let Pipe Connections look connected even if it is not the case. + */ + public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return false; + } + + /** + * Called to determine the incoming Redstone Signal of a Machine. Returns the original Redstone per default. The + * Cover should @letsRedstoneGoIn or the aInputRedstone Parameter is always 0. + */ + public byte getRedstoneInput(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return letsRedstoneGoIn(side, aCoverID, aCoverVariable, aTileEntity) ? aInputRedstone : 0; + } + + /** + * Gets the Tick Rate for doCoverThings of the Cover + *

+ * 0 = No Ticks! Yes, 0 is Default, you have to override this + */ + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 0; + } + + /** + * The MC Color of this Lens. -1 for no Color (meaning this isn't a Lens then). + */ + public byte getLensColor(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return -1; + } + + /** + * @return the ItemStack dropped by this Cover + */ + public ItemStack getDrop(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return GTOreDictUnificator.get(true, aTileEntity.getCoverItemAtSide(side)); + } +} diff --git a/src/main/java/gregtech/api/util/CoverBehaviorBase.java b/src/main/java/gregtech/api/util/CoverBehaviorBase.java new file mode 100644 index 0000000000..0c8ef81533 --- /dev/null +++ b/src/main/java/gregtech/api/util/CoverBehaviorBase.java @@ -0,0 +1,839 @@ +package gregtech.api.util; + +import static gregtech.api.enums.GTValues.E; + +import java.lang.ref.WeakReference; +import java.util.List; +import java.util.function.Supplier; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagInt; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.gui.GUIColorOverride; +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.gui.widgets.CoverTickRateButton; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.common.covers.CoverInfo; + +/** + * For Covers with a special behavior. + * + * @author glease + */ +public abstract class CoverBehaviorBase { + + public WeakReference lastPlayer = null; + private final Class typeToken; + private final ITexture coverFGTexture; + + protected CoverBehaviorBase(Class typeToken) { + this(typeToken, null); + } + + protected CoverBehaviorBase(Class typeToken, ITexture coverTexture) { + this.typeToken = typeToken; + this.coverFGTexture = coverTexture; + reloadColorOverride(); + } + + public void reloadColorOverride() { + this.colorOverride = GUIColorOverride.get(guiTexturePath); + } + + public abstract T createDataObject(int aLegacyData); + + public abstract T createDataObject(); + + public final T createDataObject(NBTBase aNBT) { + // Handle legacy data (migrating from GT_CoverBehavior to GT_CoverBehaviorBase) + if (aNBT instanceof NBTTagInt) { + return createDataObject(((NBTTagInt) aNBT).func_150287_d()); + } + + final T ret = createDataObject(); + ret.loadDataFromNBT(aNBT); + return ret; + } + + public final T cast(ISerializableObject aData) { + if (typeToken.isInstance(aData)) return forceCast(aData); + return null; + } + + private T forceCast(ISerializableObject aData) { + try { + return typeToken.cast(aData); + } catch (Exception e) { + throw new RuntimeException("Casting data in " + this.getClass() + ", data " + aData, e); + } + } + + // region facade + + /** + * Get target facade block. Does not affect rendering of **this** block. It is only used as a hint for other block + * in case of CTM + * + * @return null if none, otherwise return facade target block + */ + public final Block getFacadeBlock(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return getFacadeBlockImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Get target facade block. Does not affect rendering of **this** block. It is only used as a hint for other block + * in case of CTM + * + * @return 0 if none, otherwise return facade target meta + */ + public final int getFacadeMeta(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return getFacadeMetaImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Get the display stack. Default to {@code int2Stack(aCoverID)} + */ + public final ItemStack getDisplayStack(int aCoverID, ISerializableObject aCoverVariable) { + return getDisplayStackImpl(aCoverID, forceCast(aCoverVariable)); + } + + /** + * Get the special foreground cover texture associated with this cover. Return null if one should use the texture + * passed to {@link GregTechAPI#registerCover(ItemStack, ITexture, CoverBehaviorBase)} or its + * overloads. + */ + public final ITexture getSpecialCoverFGTexture(ForgeDirection side, int aCoverID, + ISerializableObject aCoverVariable, ICoverable aTileEntity) { + return getSpecialCoverFGTextureImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Get the special cover texture associated with this cover. Return null if one should use the texture passed to + * {@link GregTechAPI#registerCover(ItemStack, ITexture, CoverBehaviorBase)} or its overloads. + */ + public final ITexture getSpecialCoverTexture(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return getSpecialCoverTextureImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Return whether cover data needs to be synced to client upon tile entity creation or cover placement. + *

+ * Note if you want to sync the data afterwards you will have to manually do it by calling + * {@link ICoverable#issueCoverUpdate(ForgeDirection)} This option only affects the initial sync. + */ + public final boolean isDataNeededOnClient(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return isDataNeededOnClientImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Called upon receiving data from network. Use {@link ICoverable#isClientSide()} to determine the side. + */ + public final void onDataChanged(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + onDataChangedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Called before receiving data from network. Use {@link ICoverable#isClientSide()} to determine the side. + */ + public final void preDataChanged(ForgeDirection side, int aCoverID, int aNewCoverId, + ISerializableObject aCoverVariable, ISerializableObject aNewCoverVariable, ICoverable aTileEntity) { + preDataChangedImpl( + side, + aCoverID, + aNewCoverId, + forceCast(aCoverVariable), + forceCast(aNewCoverVariable), + aTileEntity); + } + + /** + * Called upon cover being removed. Called on both server and client. + */ + public final void onDropped(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + onDroppedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + public final boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return isRedstoneSensitiveImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aTimer); + } + + /** + * Called by updateEntity inside the covered TileEntity. aCoverVariable is the Value you returned last time. + */ + public final T doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, + ISerializableObject aCoverVariable, ICoverable aTileEntity, long aTimer) { + return doCoverThingsImpl(side, aInputRedstone, aCoverID, forceCast(aCoverVariable), aTileEntity, aTimer); + } + + /** + * Called when someone rightclicks this Cover. + *

+ * return true, if something actually happens. + */ + public final boolean onCoverRightClick(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + return onCoverRightClickImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aPlayer, aX, aY, aZ); + } + + /** + * Called when someone rightclicks this Cover with a Screwdriver. Doesn't call @onCoverRightclick in this Case. + *

+ * return the new Value of the Cover Variable + */ + public final T onCoverScrewdriverClick(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + return onCoverScrewdriverClickImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aPlayer, aX, aY, aZ); + } + + /** + * Called when someone shift-rightclicks this Cover with no tool. Doesn't call @onCoverRightclick in this Case. + */ + public final boolean onCoverShiftRightClick(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity, EntityPlayer aPlayer) { + return onCoverShiftRightClickImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aPlayer); + } + + /** + * Removes the Cover if this returns true, or if aForced is true. Doesn't get called when the Machine Block is + * getting broken, only if you break the Cover away from the Machine. + */ + public final boolean onCoverRemoval(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity, boolean aForced) { + return onCoverRemovalImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aForced); + } + + /** + * Called upon Base TE being destroyed (once getDrops is called), thus getting called only when destroyed in + * survival. + */ + public final void onBaseTEDestroyed(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + onBaseTEDestroyedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Gives a small Text for the status of the Cover. + */ + public final String getDescription(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return getDescriptionImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Called when Base TE being unloaded. + */ + public void onCoverUnload(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + onCoverUnloadImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * How Blast Proof the Cover is. 30 is normal. + */ + public final float getBlastProofLevel(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return getBlastProofLevelImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * If it lets RS-Signals into the Block + *

+ * This is just Informative so that Machines know if their Redstone Input is blocked or not + */ + public final boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return letsRedstoneGoInImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * If it lets RS-Signals out of the Block + */ + public final boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return letsRedstoneGoOutImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * If it lets Energy into the Block + */ + public final boolean letsEnergyIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return letsEnergyInImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * If it lets Energy out of the Block + */ + public final boolean letsEnergyOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return letsEnergyOutImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * If it lets Liquids into the Block, aFluid can be null meaning if this is generally allowing Fluids or not. + */ + public final boolean letsFluidIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + Fluid aFluid, ICoverable aTileEntity) { + return letsFluidInImpl(side, aCoverID, forceCast(aCoverVariable), aFluid, aTileEntity); + } + + /** + * If it lets Liquids out of the Block, aFluid can be null meaning if this is generally allowing Fluids or not. + */ + public final boolean letsFluidOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + Fluid aFluid, ICoverable aTileEntity) { + return letsFluidOutImpl(side, aCoverID, forceCast(aCoverVariable), aFluid, aTileEntity); + } + + /** + * If it lets Items into the Block, aSlot = -1 means if it is generally accepting Items (return false for no + * reaction at all), aSlot = -2 means if it would accept for all Slots Impl(return true to skip the Checks for each + * Slot). + */ + public final boolean letsItemsIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return letsItemsInImpl(side, aCoverID, forceCast(aCoverVariable), aSlot, aTileEntity); + } + + /** + * If it lets Items out of the Block, aSlot = -1 means if it is generally accepting Items (return false for no + * reaction at all), aSlot = -2 means if it would accept for all Slots Impl(return true to skip the Checks for each + * Slot). + */ + public final boolean letsItemsOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return letsItemsOutImpl(side, aCoverID, forceCast(aCoverVariable), aSlot, aTileEntity); + } + + /** + * If it lets you rightclick the Machine normally + */ + public final boolean isGUIClickable(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return isGUIClickableImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Needs to return true for Covers, which have a Redstone Output on their Facing. + */ + public final boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, + ISerializableObject aCoverVariable, ICoverable aTileEntity) { + return manipulatesSidedRedstoneOutputImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * if this Cover should let Pipe Connections look connected even if it is not the case. + */ + public final boolean alwaysLookConnected(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return alwaysLookConnectedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Called to determine the incoming Redstone Signal of a Machine. Returns the original Redstone per default. The + * Cover should @letsRedstoneGoIn or the aInputRedstone Parameter is always 0. + */ + public final byte getRedstoneInput(ForgeDirection side, byte aInputRedstone, int aCoverID, + ISerializableObject aCoverVariable, ICoverable aTileEntity) { + return getRedstoneInputImpl(side, aInputRedstone, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Gets the Tick Rate for doCoverThings of the Cover + *

+ * 0 = No Ticks! Yes, 0 is Default, you have to override this + */ + public final int getTickRate(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return getTickRateImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * The MC Color of this Lens. -1 for no Color (meaning this isn't a Lens then). + */ + public final byte getLensColor(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return getLensColorImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * @return the ItemStack dropped by this Cover + */ + public final ItemStack getDrop(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) { + return getDropImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); + } + + /** + * Called when the cover is initially attached to a machine. + * + * @param player The attaching player + * @param aCover An {@link ItemStack} containing the cover + * @param aTileEntity The machine receiving the cover + * @param side Which side the cover is attached to + */ + public void onPlayerAttach(EntityPlayer player, ItemStack aCover, ICoverable aTileEntity, ForgeDirection side) { + // Do nothing by default. + } + + // endregion + + // region UI stuff + + protected GT_TooltipDataCache mTooltipCache = new GT_TooltipDataCache(); + protected GUIColorOverride colorOverride; + private static final String guiTexturePath = "gregtech:textures/gui/GuiCover.png"; + + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new UIFactory(buildContext).createWindow(); + } + + /** + * Creates {@link ModularWindow} for this cover. This is separated from base class, as attaching the same covers in + * different sides of the same tile needs different UI with different context. + */ + protected class UIFactory { + + private final CoverUIBuildContext uiBuildContext; + + public UIFactory(CoverUIBuildContext buildContext) { + this.uiBuildContext = buildContext; + } + + public ModularWindow createWindow() { + ModularWindow.Builder builder = ModularWindow.builder(getGUIWidth(), getGUIHeight()); + builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); + builder.setGuiTint(getUIBuildContext().getGuiColorization()); + maybeBindPlayerInventory(builder); + addTitleToUI(builder); + addUIWidgets(builder); + if (getUIBuildContext().isAnotherWindow()) { + builder.widget( + ButtonWidget.closeWindowButton(true) + .setPos(getGUIWidth() - 15, 3)); + } + + final CoverInfo coverInfo = uiBuildContext.getTile() + .getCoverInfoAtSide(uiBuildContext.getCoverSide()); + final CoverBehaviorBase behavior = coverInfo.getCoverBehavior(); + if (coverInfo.getMinimumTickRate() > 0 && behavior.allowsTickRateAddition()) { + builder.widget( + new CoverTickRateButton(coverInfo, builder).setPos(getGUIWidth() - 24, getGUIHeight() - 24)); + } + + return builder.build(); + } + + protected void maybeBindPlayerInventory(ModularWindow.Builder builder) { + if (doesBindPlayerInventory() && !getUIBuildContext().isAnotherWindow()) { + builder.bindPlayerInventory(getUIBuildContext().getPlayer(), 7, GUITextureSet.DEFAULT.getItemSlot()); + } + } + + /** + * Override this to add widgets for your UI. + */ + protected void addUIWidgets(ModularWindow.Builder builder) {} + + public CoverUIBuildContext getUIBuildContext() { + return uiBuildContext; + } + + /** + * Can return null when cover data is invalid e.g. tile is broken or cover is removed + */ + @Nullable + public T getCoverData() { + if (isCoverValid()) { + return forceCast( + getUIBuildContext().getTile() + .getComplexCoverDataAtSide(getUIBuildContext().getCoverSide())); + } else { + return null; + } + } + + public boolean setCoverData(T data) { + if (isCoverValid()) { + getUIBuildContext().getTile() + .receiveCoverData( + getUIBuildContext().getCoverSide(), + getUIBuildContext().getCoverID(), + data, + getUIBuildContext().getPlayer() instanceof EntityPlayerMP + ? (EntityPlayerMP) getUIBuildContext().getPlayer() + : null); + return true; + } else { + return false; + } + } + + public boolean isCoverValid() { + return !getUIBuildContext().getTile() + .isDead() + && getUIBuildContext().getTile() + .getCoverBehaviorAtSideNew(getUIBuildContext().getCoverSide()) != GregTechAPI.sNoBehavior; + } + + protected void addTitleToUI(ModularWindow.Builder builder) { + ItemStack coverItem = GTUtility.intToStack(getUIBuildContext().getCoverID()); + if (coverItem != null) { + builder.widget( + new ItemDrawable(coverItem).asWidget() + .setPos(5, 5) + .setSize(16, 16)) + .widget( + new TextWidget(coverItem.getDisplayName()).setDefaultColor(COLOR_TITLE.get()) + .setPos(25, 9)); + } + } + + protected int getGUIWidth() { + return 176; + } + + protected int getGUIHeight() { + return 107; + } + + protected boolean doesBindPlayerInventory() { + return false; + } + + protected int getTextColorOrDefault(String textType, int defaultColor) { + return colorOverride.getTextColorOrDefault(textType, defaultColor); + } + + protected final Supplier COLOR_TITLE = () -> getTextColorOrDefault("title", 0x222222); + protected final Supplier COLOR_TEXT_GRAY = () -> getTextColorOrDefault("text_gray", 0x555555); + protected final Supplier COLOR_TEXT_WARN = () -> getTextColorOrDefault("text_warn", 0xff0000); + } + + // endregion + + // region impl + + protected Block getFacadeBlockImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return null; + } + + protected int getFacadeMetaImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return 0; + } + + protected ItemStack getDisplayStackImpl(int aCoverID, T aCoverVariable) { + return GTUtility.intToStack(aCoverID); + } + + protected ITexture getSpecialCoverFGTextureImpl(ForgeDirection side, int aCoverID, T aCoverVariable, + ICoverable aTileEntity) { + return coverFGTexture; + } + + protected ITexture getSpecialCoverTextureImpl(ForgeDirection side, int aCoverID, T aCoverVariable, + ICoverable aTileEntity) { + return null; + } + + protected boolean isDataNeededOnClientImpl(ForgeDirection side, int aCoverID, T aCoverVariable, + ICoverable aTileEntity) { + return false; + } + + protected void onDataChangedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} + + protected void preDataChangedImpl(ForgeDirection side, int aCoverID, int aNewCoverId, T aCoverVariable, + T aNewCoverVariable, ICoverable aTileEntity) {} + + protected void onDroppedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} + + protected void onBaseTEDestroyedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} + + protected void onCoverUnloadImpl(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, + ICoverable aTileEntity) {} + + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, T aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return false; + } + + /** + * Called by updateEntity inside the covered TileEntity. aCoverVariable is the Value you returned last time. + */ + protected T doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, T aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return aCoverVariable; + } + + /** + * Called when someone rightclicks this Cover. + *

+ * return true, if something actually happens. + */ + protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + return false; + } + + /** + * Called when someone rightclicks this Cover with a Screwdriver. Doesn't call @onCoverRightclick in this Case. + *

+ * return the new Value of the Cover Variable + */ + protected T onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + return aCoverVariable; + } + + /** + * Called when someone shift-rightclicks this Cover with no tool. Doesn't call @onCoverRightclick in this Case. + */ + protected boolean onCoverShiftRightClickImpl(ForgeDirection side, int aCoverID, T aCoverVariable, + ICoverable aTileEntity, EntityPlayer aPlayer) { + if (hasCoverGUI() && aPlayer instanceof EntityPlayerMP) { + lastPlayer = new WeakReference<>(aPlayer); + GTUIInfos.openCoverUI(aTileEntity, aPlayer, side); + return true; + } + return false; + } + + /** + * Removes the Cover if this returns true, or if aForced is true. Doesn't get called when the Machine Block is + * getting broken, only if you break the Cover away from the Machine. + */ + protected boolean onCoverRemovalImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, + boolean aForced) { + return true; + } + + /** + * Gives a small Text for the status of the Cover. + */ + protected String getDescriptionImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return E; + } + + /** + * How Blast Proof the Cover is. 30 is normal. + */ + protected float getBlastProofLevelImpl(ForgeDirection side, int aCoverID, T aCoverVariable, + ICoverable aTileEntity) { + return 10.0F; + } + + /** + * If it lets RS-Signals into the Block + *

+ * This is just Informative so that Machines know if their Redstone Input is blocked or not + */ + protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, + ICoverable aTileEntity) { + return false; + } + + /** + * If it lets RS-Signals out of the Block + */ + protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, + ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Energy into the Block + */ + protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Energy out of the Block + */ + protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Liquids into the Block, aFluid can be null meaning if this is generally allowing Fluids or not. + */ + protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Liquids out of the Block, aFluid can be null meaning if this is generally allowing Fluids or not. + */ + protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Items into the Block, aSlot = -1 means if it is generally accepting Items (return false for no + * Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each + * Slot). + */ + protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return false; + } + + /** + * If it lets Items out of the Block, aSlot = -1 means if it is generally accepting Items (return false for no + * Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each + * Slot). + */ + protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return false; + } + + /** + * If it lets you rightclick the Machine normally + */ + protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return true; + } + + /** + * Needs to return true for Covers, which have a Redstone Output on their Facing. + */ + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, T aCoverVariable, + ICoverable aTileEntity) { + return false; + } + + /** + * if this Cover should let Pipe Connections look connected even if it is not the case. + */ + protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, + ICoverable aTileEntity) { + return false; + } + + /** + * Called to determine the incoming Redstone Signal of a Machine. Returns the original Redstone per default. The + * Cover should @letsRedstoneGoIn or the aInputRedstone Parameter is always 0. + */ + protected byte getRedstoneInputImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, T aCoverVariable, + ICoverable aTileEntity) { + return letsRedstoneGoIn(side, aCoverID, aCoverVariable, aTileEntity) ? aInputRedstone : 0; + } + + /** + * Gets the Tick Rate for doCoverThings of the Cover + *

+ * 0 = No Ticks! Yes, 0 is Default, you have to override this + */ + protected int getTickRateImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return 0; + } + + /** + * The MC Color of this Lens. -1 for no Color (meaning this isn't a Lens then). + */ + protected byte getLensColorImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return -1; + } + + /** + * @return the ItemStack dropped by this Cover + */ + protected ItemStack getDropImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return GTOreDictUnificator.get(true, aTileEntity.getCoverItemAtSide(side)); + } + + // endregion + + // region no data + + /** + * Checks if the Cover can be placed on this. + */ + public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { + return true; + } + + public boolean hasCoverGUI() { + return false; + } + + /** + * Called when someone rightclicks this Cover Client Side + *

+ * return true, if something actually happens. + */ + public boolean onCoverRightclickClient(ForgeDirection side, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, + float aY, float aZ) { + return false; + } + + /** + * If this is a simple Cover, which can also be used on Bronze Machines and similar. + */ + public boolean isSimpleCover() { + return false; + } + + /** + * sets the Cover upon placement. + */ + public void placeCover(ForgeDirection side, ItemStack aCover, ICoverable aTileEntity) { + aTileEntity.setCoverIDAtSide(side, GTUtility.stackToInt(aCover)); + } + + public boolean allowsCopyPasteTool() { + return true; + } + + public boolean allowsTickRateAddition() { + return true; + } + + @NotNull + public final List getAdditionalTooltip(ISerializableObject coverData) { + return getAdditionalTooltipImpl(forceCast(coverData)); + } + + /** + * Override to add to the tooltip generated when a user hovers over the cover on the left side of a machine's UI. + * + * @param coverData The cover data associated with the cover on a particular side. + * @return A list of new tooltip entries. Entries are inserted at the top, just after the name and direction line. + */ + protected List getAdditionalTooltipImpl(T coverData) { + return ImmutableList.of(); + } + // endregion +} diff --git a/src/main/java/gregtech/api/util/ExoticEnergyInputHelper.java b/src/main/java/gregtech/api/util/ExoticEnergyInputHelper.java new file mode 100644 index 0000000000..6640f03835 --- /dev/null +++ b/src/main/java/gregtech/api/util/ExoticEnergyInputHelper.java @@ -0,0 +1,103 @@ +package gregtech.api.util; + +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyTunnel; + +public class ExoticEnergyInputHelper { + + /** + * The Valid Types of TecTech Hatch List. + */ + private static final List> sExoticEnergyHatchType = new ArrayList<>(); + + static { + register(MTEHatchEnergyMulti.class); + register(MTEHatchEnergyTunnel.class); + } + + public static void register(Class clazz) { + if (!MTEHatch.class.isAssignableFrom(clazz)) + throw new IllegalArgumentException(clazz.getName() + " is not a subclass of " + MTEHatch.class.getName()); + sExoticEnergyHatchType.add(clazz); + } + + public static boolean drainEnergy(long aEU, Collection hatches) { + for (MTEHatch tHatch : hatches) { + long tDrain = Math.min( + tHatch.getBaseMetaTileEntity() + .getStoredEU(), + aEU); + tHatch.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(tDrain, false); + aEU -= tDrain; + } + return aEU <= 0; + } + + public static boolean isExoticEnergyInput(IMetaTileEntity aHatch) { + for (Class clazz : sExoticEnergyHatchType) { + if (clazz.isInstance(aHatch)) return true; + } + return false; + } + + public static long getTotalEuMulti(Collection hatches) { + long rEU = 0L; + for (MTEHatch tHatch : filterValidMTEs(hatches)) { + rEU += tHatch.getBaseMetaTileEntity() + .getInputVoltage() * tHatch.maxWorkingAmperesIn(); + } + return rEU; + } + + public static long getMaxInputVoltageMulti(Collection hatches) { + long rVoltage = 0; + for (MTEHatch tHatch : filterValidMTEs(hatches)) { + rVoltage += tHatch.getBaseMetaTileEntity() + .getInputVoltage(); + } + return rVoltage; + } + + public static long getAverageInputVoltageMulti(Collection hatches) { + long rVoltage = 0; + for (MTEHatch tHatch : filterValidMTEs(hatches)) { + rVoltage += tHatch.getBaseMetaTileEntity() + .getInputVoltage(); + } + if (hatches.isEmpty()) { + return 0; + } + return rVoltage / hatches.size(); + } + + public static long getMaxInputAmpsMulti(Collection hatches) { + long rAmp = 0; + for (MTEHatch tHatch : filterValidMTEs(hatches)) { + rAmp += tHatch.getBaseMetaTileEntity() + .getInputAmperage(); + } + return rAmp; + } + + public static long getMaxWorkingInputAmpsMulti(Collection hatches) { + long rAmp = 0; + for (MTEHatch tHatch : filterValidMTEs(hatches)) { + rAmp += tHatch.maxWorkingAmperesIn(); + } + return rAmp; + } + + public static List> getAllClasses() { + return Collections.unmodifiableList(sExoticEnergyHatchType); + } +} diff --git a/src/main/java/gregtech/api/util/FishPondFakeRecipe.java b/src/main/java/gregtech/api/util/FishPondFakeRecipe.java index b5bfff9e29..8f36600e2a 100644 --- a/src/main/java/gregtech/api/util/FishPondFakeRecipe.java +++ b/src/main/java/gregtech/api/util/FishPondFakeRecipe.java @@ -1,6 +1,6 @@ package gregtech.api.util; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.fishPondRecipes; import java.util.ArrayList; @@ -9,7 +9,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.WeightedRandomFishable; import net.minecraftforge.common.FishingHooks; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -50,8 +50,8 @@ public class FishPondFakeRecipe { ItemStack t = (ItemStack) ReflectionUtils .getField(WeightedRandomFishable.class, "field_150711_b") .get(u); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(mType)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(mType)) .itemOutputs(t) .duration(5 * SECONDS) .eut(0) diff --git a/src/main/java/gregtech/api/util/GTApiaryModifier.java b/src/main/java/gregtech/api/util/GTApiaryModifier.java new file mode 100644 index 0000000000..955b2e60f9 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTApiaryModifier.java @@ -0,0 +1,24 @@ +package gregtech.api.util; + +import net.minecraft.world.biome.BiomeGenBase; + +public class GTApiaryModifier { + + public float territory = 1f; + public float mutation = 1f; + public float lifespan = 1f; + public float production = 2f; + public float flowering = 1f; + public float geneticDecay = 1f; + public boolean isSealed = false; + public boolean isSelfLighted = false; + public boolean isSelfUnlighted = false; + public boolean isSunlightSimulated = false; + public boolean isAutomated = false; + public boolean isCollectingPollen = false; + public BiomeGenBase biomeOverride = null; + public float energy = 1f; + public float temperature = 0f; + public float humidity = 0f; + public int maxSpeed = 0; +} diff --git a/src/main/java/gregtech/api/util/GTApiaryUpgrade.java b/src/main/java/gregtech/api/util/GTApiaryUpgrade.java new file mode 100644 index 0000000000..5de373a57e --- /dev/null +++ b/src/main/java/gregtech/api/util/GTApiaryUpgrade.java @@ -0,0 +1,224 @@ +package gregtech.api.util; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +import net.minecraft.item.ItemStack; +import net.minecraft.world.biome.BiomeGenBase; + +import gregtech.api.enums.OrePrefixes; +import gregtech.common.items.MetaGeneratedItem03; + +/** + * Actual items are defined in {@link MetaGeneratedItem03} + */ +public enum GTApiaryUpgrade { + + speed1(UNIQUE_INDEX.SPEED_UPGRADE, 32200, 1, (mods, n) -> mods.maxSpeed = 1), + speed2(UNIQUE_INDEX.SPEED_UPGRADE, 32201, 1, (mods, n) -> mods.maxSpeed = 2), + speed3(UNIQUE_INDEX.SPEED_UPGRADE, 32202, 1, (mods, n) -> mods.maxSpeed = 3), + speed4(UNIQUE_INDEX.SPEED_UPGRADE, 32203, 1, (mods, n) -> mods.maxSpeed = 4), + speed5(UNIQUE_INDEX.SPEED_UPGRADE, 32204, 1, (mods, n) -> mods.maxSpeed = 5), + speed6(UNIQUE_INDEX.SPEED_UPGRADE, 32205, 1, (mods, n) -> mods.maxSpeed = 6), + speed7(UNIQUE_INDEX.SPEED_UPGRADE, 32206, 1, (mods, n) -> mods.maxSpeed = 7), + speed8(UNIQUE_INDEX.SPEED_UPGRADE, 32207, 1, (mods, n) -> mods.maxSpeed = 8), + speed8upgraded(UNIQUE_INDEX.SPEED_UPGRADE, 32208, 1, (mods, n) -> { + mods.maxSpeed = 8; + mods.production = 17.19926784f; + mods.energy *= 14.75; + }), + production(UNIQUE_INDEX.PRODUCTION_UPGRADE, 32209, 8, (mods, n) -> { + mods.production = 4.f * (float) Math.pow(1.2d, n); + mods.energy *= Math.pow(1.4f, n); + }), + plains(UNIQUE_INDEX.PLAINS_UPGRADE, 32210, 1, (mods, n) -> { + mods.biomeOverride = BiomeGenBase.plains; + mods.energy *= 1.2f; + }), + light(UNIQUE_INDEX.LIGHT_UPGRADE, 32211, 1, (mods, n) -> { + mods.isSelfLighted = true; + mods.energy *= 1.05f; + }), + flowering(UNIQUE_INDEX.FLOWERING_UPGRADE, 32212, 8, (mods, n) -> { + mods.flowering *= Math.pow(1.2f, n); + mods.energy *= Math.pow(1.1f, n); + }), + winter(UNIQUE_INDEX.WINTER_UPGRADE, 32213, 1, (mods, n) -> { + mods.biomeOverride = BiomeGenBase.taiga; + mods.energy *= 1.5f; + }), + dryer(UNIQUE_INDEX.DRYER_UPGRADE, 32214, 16, (mods, n) -> { + mods.humidity -= 0.125f * n; + mods.energy *= Math.pow(1.025f, n); + }), + automation(UNIQUE_INDEX.AUTOMATION_UPGRADE, 32215, 1, (mods, n) -> { + mods.isAutomated = true; + mods.energy *= 1.1f; + }), + humidifier(UNIQUE_INDEX.HUMIDIFIER_UPGRADE, 32216, 16, (mods, n) -> { + mods.humidity += 0.125f * n; + mods.energy *= Math.pow(1.05f, n); + }), + hell(UNIQUE_INDEX.HELL_UPGRADE, 32217, 1, (mods, n) -> { + mods.biomeOverride = BiomeGenBase.hell; + mods.energy *= 1.5f; + }), + pollen(UNIQUE_INDEX.POLLEN_UPGRADE, 32218, 1, (mods, n) -> { + mods.flowering = 0f; + mods.energy *= 1.3f; + }), + desert(UNIQUE_INDEX.DESERT_UPGRADE, 32219, 1, (mods, n) -> { + mods.biomeOverride = BiomeGenBase.desert; + mods.energy *= 1.2f; + }), + cooler(UNIQUE_INDEX.COOLER_UPGRADE, 32220, 16, (mods, n) -> { + mods.temperature -= 0.125f * n; + mods.energy *= Math.pow(1.025f, n); + }), + lifespan(UNIQUE_INDEX.LIFESPAN_UPGRADE, 32221, 4, (mods, n) -> { + mods.lifespan /= Math.pow(1.5f, n); + mods.energy *= Math.pow(1.05f, n); + }), + seal(UNIQUE_INDEX.SEAL_UPGRADE, 32222, 1, (mods, n) -> { + mods.isSealed = true; + mods.energy *= 1.05f; + }), + stabilizer(UNIQUE_INDEX.STABILIZER_UPGRADE, 32223, 1, (mods, n) -> { + mods.geneticDecay = 0f; + mods.energy *= 2.50f; + }), + jungle(UNIQUE_INDEX.JUNGLE_UPGRADE, 32224, 1, (mods, n) -> { + mods.biomeOverride = BiomeGenBase.jungle; + mods.energy *= 1.20f; + }), + territory(UNIQUE_INDEX.TERRITORY_UPGRADE, 32225, 4, (mods, n) -> { + mods.territory *= Math.pow(1.5f, n); + mods.energy *= Math.pow(1.05f, n); + }), + ocean(UNIQUE_INDEX.OCEAN_UPGRADE, 32226, 1, (mods, n) -> { + mods.biomeOverride = BiomeGenBase.ocean; + mods.energy *= 1.20f; + }), + sky(UNIQUE_INDEX.SKY_UPGRADE, 32227, 1, (mods, n) -> { + mods.isSunlightSimulated = true; + mods.energy *= 1.05f; + }), + heater(UNIQUE_INDEX.HEATER_UPGRADE, 32228, 16, (mods, n) -> { + mods.temperature += 0.125f * n; + mods.energy *= Math.pow(1.025f, n); + }), + sieve(UNIQUE_INDEX.SIEVE_UPGRADE, 32229, 1, (mods, n) -> { + mods.isCollectingPollen = true; + mods.energy *= 1.05f; + }), + unlight(UNIQUE_INDEX.LIGHT_UPGRADE, 32231, 1, (mods, n) -> { + mods.isSelfUnlighted = true; + mods.energy *= 1.05f; + }),; + + private enum UNIQUE_INDEX { + + SPEED_UPGRADE, + PRODUCTION_UPGRADE, + PLAINS_UPGRADE, + LIGHT_UPGRADE, // also unlight + FLOWERING_UPGRADE, + WINTER_UPGRADE, + DRYER_UPGRADE, + AUTOMATION_UPGRADE, + HUMIDIFIER_UPGRADE, + HELL_UPGRADE, + POLLEN_UPGRADE, + DESERT_UPGRADE, + COOLER_UPGRADE, + LIFESPAN_UPGRADE, + SEAL_UPGRADE, + STABILIZER_UPGRADE, + JUNGLE_UPGRADE, + TERRITORY_UPGRADE, + OCEAN_UPGRADE, + SKY_UPGRADE, + HEATER_UPGRADE, + SIEVE_UPGRADE,; + + void apply(Consumer fn) { + UNIQUE_UPGRADE_LIST.get(this) + .forEach(fn); + } + } + + private static final EnumMap> UNIQUE_UPGRADE_LIST = new EnumMap<>( + UNIQUE_INDEX.class); + + private int meta = 0; + private int maxnumber = 1; + + private final GTUtility.ItemId id; + private final UNIQUE_INDEX unique_index; + private final BiConsumer applier; + + private final HashSet blacklistedUpgrades = new HashSet<>(); + + GTApiaryUpgrade(UNIQUE_INDEX unique_index, int meta, int maxnumber, BiConsumer applier) { + this.unique_index = unique_index; + this.meta = meta; + this.maxnumber = maxnumber; + this.applier = applier; + this.id = GTUtility.ItemId.createNoCopy(get(1)); + } + + private void setup_static_variables() { + quickLookup.put(this.meta, this); + ArrayList un = UNIQUE_UPGRADE_LIST.get(this.unique_index); + if (un != null) un.forEach((u) -> { + u.blacklistedUpgrades.add(this.id); + this.blacklistedUpgrades.add(u.id); + }); + else { + un = new ArrayList<>(1); + UNIQUE_UPGRADE_LIST.put(this.unique_index, un); + } + un.add(this); + } + + public static GTApiaryUpgrade getUpgrade(ItemStack s) { + if (s == null) return null; + if (!isUpgrade(s)) return null; + return quickLookup.get(s.getItemDamage()); + } + + public boolean isAllowedToWorkWith(ItemStack s) { + GTUtility.ItemId id = GTUtility.ItemId.createNoCopy(s); + return !blacklistedUpgrades.contains(id); + } + + public int getMaxNumber() { + return maxnumber; + } + + public void applyModifiers(GTApiaryModifier mods, ItemStack stack) { + if (applier != null) applier.accept(mods, stack.stackSize); + } + + public ItemStack get(int count) { + return new ItemStack(MetaGeneratedItem03.INSTANCE, count, meta); + } + + public static boolean isUpgrade(ItemStack s) { + return OrePrefixes.apiaryUpgrade.contains(s); + } + + private static final HashMap quickLookup = new HashMap<>(); + + static { + EnumSet.allOf(GTApiaryUpgrade.class) + .forEach(GTApiaryUpgrade::setup_static_variables); + speed8upgraded.blacklistedUpgrades.add(production.id); + production.blacklistedUpgrades.add(speed8upgraded.id); + } +} diff --git a/src/main/java/gregtech/api/util/GTBaseCrop.java b/src/main/java/gregtech/api/util/GTBaseCrop.java new file mode 100644 index 0000000000..2ddf37bbeb --- /dev/null +++ b/src/main/java/gregtech/api/util/GTBaseCrop.java @@ -0,0 +1,311 @@ +package gregtech.api.util; + +import static gregtech.api.enums.GTValues.E; +import static gregtech.api.enums.Mods.IC2CropPlugin; + +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ConfigCategories; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.objects.ItemData; +import gregtech.common.blocks.BlockOresAbstract; +import gregtech.common.blocks.TileEntityOres; +import ic2.api.crops.CropCard; +import ic2.api.crops.Crops; +import ic2.api.crops.ICropTile; +import speiger.src.crops.api.ICropCardInfo; + +public class GTBaseCrop extends CropCard implements ICropCardInfo { + + public static ArrayList sCropList = new ArrayList<>(); + private String mName = E; + private String mDiscoveredBy = "Gregorius Techneticies"; + private String[] mAttributes; + private int mTier = 0; + private int mMaxSize = 0; + private int mAfterHarvestSize = 0; + private int mHarvestSize = 0; + private final int[] mStats = new int[5]; + private final int mGrowthSpeed = 0; + private ItemStack mDrop = null; + private ItemStack[] mSpecialDrops = null; + private Materials mBlock = null; + private static boolean bIc2NeiLoaded = IC2CropPlugin.isModLoaded(); + + /** + * To create new Crops + * + * @param aID Default ID + * @param aCropName Name of the Crop + * @param aDiscoveredBy The one who discovered the Crop + * @param aDrop The Item which is dropped by the Crop. must be != null + * @param aBaseSeed Baseseed to plant this Crop. null == crossbreed only + * @param aTier tier of the Crop. forced to be >= 1 + * @param aMaxSize maximum Size of the Crop. forced to be >= 3 + * @param aGrowthSpeed how fast the Crop grows. if < 0 then its set to Tier*300 + * @param aHarvestSize the size the Crop needs to be harvested. forced to be between 2 and max size + */ + public GTBaseCrop(int aID, String aCropName, String aDiscoveredBy, ItemStack aBaseSeed, int aTier, int aMaxSize, + int aGrowthSpeed, int aAfterHarvestSize, int aHarvestSize, int aStatChemical, int aStatFood, int aStatDefensive, + int aStatColor, int aStatWeed, String[] aAttributes, ItemStack aDrop, ItemStack[] aSpecialDrops) { + new GTBaseCrop( + aID, + aCropName, + aDiscoveredBy, + aBaseSeed, + aTier, + aMaxSize, + aGrowthSpeed, + aAfterHarvestSize, + aHarvestSize, + aStatChemical, + aStatFood, + aStatDefensive, + aStatColor, + aStatWeed, + aAttributes, + null, + aDrop, + aSpecialDrops); + } + + /** + * To create new Crops + * + * @param aID Default ID + * @param aCropName Name of the Crop + * @param aDiscoveredBy The one who discovered the Crop + * @param aDrop The Item which is dropped by the Crop. must be != null + * @param aBaseSeed Baseseed to plant this Crop. null == crossbreed only + * @param aTier tier of the Crop. forced to be >= 1 + * @param aMaxSize maximum Size of the Crop. forced to be >= 3 + * @param aGrowthSpeed how fast the Crop grows. if < 0 then its set to Tier*300 + * @param aHarvestSize the size the Crop needs to be harvested. forced to be between 2 and max size + * @param aBlock the block below needed for crop to grow. If null no block needed + */ + public GTBaseCrop(int aID, String aCropName, String aDiscoveredBy, ItemStack aBaseSeed, int aTier, int aMaxSize, + int aGrowthSpeed, int aAfterHarvestSize, int aHarvestSize, int aStatChemical, int aStatFood, int aStatDefensive, + int aStatColor, int aStatWeed, String[] aAttributes, Materials aBlock, ItemStack aDrop, + ItemStack[] aSpecialDrops) { + mName = aCropName; + aID = GTConfig.addIDConfig(ConfigCategories.IDs.crops, mName.replaceAll(" ", "_"), aID); + if (aDiscoveredBy != null && !aDiscoveredBy.equals(E)) mDiscoveredBy = aDiscoveredBy; + if (aDrop != null && aID > 0 && aID < 256) { + mDrop = GTUtility.copyOrNull(aDrop); + mSpecialDrops = aSpecialDrops; + mTier = Math.max(1, aTier); + mMaxSize = Math.max(3, aMaxSize); + mHarvestSize = Math.min(Math.max(aHarvestSize, 2), mMaxSize); + mAfterHarvestSize = Math.min(Math.max(aAfterHarvestSize, 1), mMaxSize - 1); + mStats[0] = aStatChemical; + mStats[1] = aStatFood; + mStats[2] = aStatDefensive; + mStats[3] = aStatColor; + mStats[4] = aStatWeed; + mAttributes = aAttributes; + mBlock = aBlock; + if (!Crops.instance.registerCrop(this, aID)) + throw new GTItsNotMyFaultException("Make sure the Crop ID is valid!"); + if (aBaseSeed != null) Crops.instance.registerBaseSeed(aBaseSeed, this, 1, 1, 1, 1); + sCropList.add(this); + } + if (bIc2NeiLoaded) { + try { + Class.forName("speiger.src.crops.api.CropPluginAPI") + .getMethod("registerCropInfo", Class.forName("speiger.src.crops.api.ICropCardInfo")) + .invoke( + Class.forName("speiger.src.crops.api.CropPluginAPI") + .getField("instance"), + this); + } catch (IllegalAccessException | ClassNotFoundException | SecurityException | NoSuchMethodException + | NoSuchFieldException | InvocationTargetException | IllegalArgumentException ex) { + bIc2NeiLoaded = false; + } + } + } + + @Override + public byte getSizeAfterHarvest(ICropTile crop) { + return (byte) mAfterHarvestSize; + } + + @Override + public int growthDuration(ICropTile aCrop) { + if (mGrowthSpeed < 200) return super.growthDuration(aCrop); + return tier() * mGrowthSpeed; + } + + @Override + public int getrootslength(ICropTile crop) { + return 5; + } + + @Override + public String[] attributes() { + return mAttributes; + } + + @Override + public String discoveredBy() { + return mDiscoveredBy; + } + + @Override + public final boolean canGrow(ICropTile aCrop) { + // block check is only performed at the last stage of growth + if (this.needsBlockBelow() && aCrop.getSize() == mMaxSize - 1) { + return isBlockBelow(aCrop); + } + return aCrop.getSize() < maxSize(); + } + + @Override + public final boolean canBeHarvested(ICropTile aCrop) { + return aCrop.getSize() >= mHarvestSize; + } + + @Override + public boolean canCross(ICropTile aCrop) { + return aCrop.getSize() + 2 > maxSize(); + } + + @Override + public int stat(int n) { + if (n < 0 || n >= mStats.length) return 0; + return mStats[n]; + } + + @Override + public String name() { + return mName; + } + + @Override + public int tier() { + return mTier; + } + + @Override + public int maxSize() { + return mMaxSize; + } + + @Override + public ItemStack getGain(ICropTile aCrop) { + int tDrop = 0; + if (mSpecialDrops != null && (tDrop = java.util.concurrent.ThreadLocalRandom.current() + .nextInt(0, (mSpecialDrops.length * 2) + 2)) < mSpecialDrops.length && mSpecialDrops[tDrop] != null) { + return GTUtility.copyOrNull(mSpecialDrops[tDrop]); + } + return GTUtility.copyOrNull(mDrop); + } + + @Override + public boolean rightclick(ICropTile aCrop, EntityPlayer aPlayer) { + if (!canBeHarvested(aCrop)) return false; + return aCrop.harvest(aPlayer instanceof EntityPlayerMP); + } + + @Override + public int getOptimalHavestSize(ICropTile crop) { + return maxSize(); + } + + /** + * Checks if the crop needs a block below it + * + * @return True if the crop needs a block below it to grow to its max size + */ + public boolean needsBlockBelow() { + return GTMod.gregtechproxy.mCropNeedBlock && this.mBlock != null; + } + + public boolean isBlockBelow(ICropTile aCrop) { + if (aCrop == null) { + return false; + } + for (int i = 1; i < this.getrootslength(aCrop); i++) { + Block tBlock = aCrop.getWorld() + .getBlock(aCrop.getLocation().posX, aCrop.getLocation().posY - i, aCrop.getLocation().posZ); + if ((tBlock instanceof BlockOresAbstract)) { + TileEntity tTileEntity = aCrop.getWorld() + .getTileEntity(aCrop.getLocation().posX, aCrop.getLocation().posY - i, aCrop.getLocation().posZ); + if ((tTileEntity instanceof TileEntityOres)) { + Materials tMaterial = GregTechAPI.sGeneratedMaterials[(((TileEntityOres) tTileEntity).mMetaData + % 1000)]; + if ((tMaterial != null) && (tMaterial != Materials._NULL)) { + return tMaterial == mBlock; + } + } + } else { + int tMetaID = aCrop.getWorld() + .getBlockMetadata(aCrop.getLocation().posX, aCrop.getLocation().posY - i, aCrop.getLocation().posZ); + if (isBlockBelow(new ItemStack(tBlock, 1, tMetaID))) { + return true; + } + } + } + return false; + } + + /** + * An isolated function to check if an item stack is a block that should be below this crop + * + * @param aItem a stack of the block placed under the crop + * @return The result of the check + */ + public boolean isBlockBelow(ItemStack aItem) { + // safety in case someone calls this without checking if we have a block + if (!this.needsBlockBelow()) return true; + + // get material from stack + ItemData tAssociation = GTOreDictUnificator.getAssociation(aItem); + if (tAssociation == null) return false; + + // return true if it's an ore of the material + // note: some ores don't appear to have associations in testing, naq ore is an example of that + if (tAssociation.mPrefix.toString() + .startsWith("ore") && tAssociation.mMaterial.mMaterial == mBlock) { + return true; + } + + // return true if it's a block of the material + if (tAssociation.mPrefix == OrePrefixes.block && tAssociation.mMaterial.mMaterial == mBlock) { + return true; + } + return false; + } + + @Override + public List getCropInformation() { + if (mBlock != null) { + ArrayList result = new ArrayList<>(1); + result.add( + String.format( + "Requires %s Ore or Block of %s as soil block to reach full growth.", + mBlock.mName, + mBlock.mName)); + return result; + } + return null; + } + + @Override + public ItemStack getDisplayItem() { + if (mSpecialDrops != null && mSpecialDrops[mSpecialDrops.length - 1] != null) { + return GTUtility.copyOrNull(mSpecialDrops[mSpecialDrops.length - 1]); + } + return GTUtility.copyOrNull(mDrop); + } +} diff --git a/src/main/java/gregtech/api/util/GTBlockMap.java b/src/main/java/gregtech/api/util/GTBlockMap.java new file mode 100644 index 0000000000..a5ac98d427 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTBlockMap.java @@ -0,0 +1,134 @@ +package gregtech.api.util; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.BiFunction; + +import net.minecraft.block.Block; + +import gnu.trove.map.TByteObjectMap; +import gnu.trove.map.hash.TByteObjectHashMap; + +public class GTBlockMap { + + public static final byte WILDCARD = -1; + private final ConcurrentHashMap> backing = new ConcurrentHashMap<>(); + private int size = 0; + + private TByteObjectMap getSubmap(Block block) { + return backing.computeIfAbsent(block, b -> new TByteObjectHashMap<>()); + } + + /** + * Associate a value with that union key + * + * @param block block + * @param meta meta + * @return old mapping, or null if that doesn't exist + */ + public V put(Block block, byte meta, V value) { + V v = getSubmap(block).put(meta, value); + if (v == null) size++; + return v; + } + + /** + * Associate a value with that union key ONLY IF there isn't a prior EXACT mapping + * + * @param block block + * @param meta meta + * @return old mapping, or null if that doesn't exist + */ + public V putIfAbsent(Block block, byte meta, V value) { + V v = getSubmap(block).putIfAbsent(meta, value); + if (v == null) size++; + return v; + } + + /** + * Associate a value with that union key ONLY IF there isn't a prior EXACT mapping + * + * @param block block + * @param meta meta + * @return old mapping, or null if that doesn't exist + */ + public V computeIfAbsent(Block block, byte meta, BiFunction function) { + TByteObjectMap submap = getSubmap(block); + V v = submap.get(meta); + if (v == null) { + v = function.apply(block, meta); + submap.put(meta, v); + size++; + } + return v; + } + + /** + * Contains an associated value + * + * @param block block + * @param meta meta + * @return current mapping OR wildcard of that mapping exists + */ + public boolean containsKey(Block block, byte meta) { + TByteObjectMap submap = backing.get(block); + if (submap == null) return false; + return submap.containsKey(meta) || submap.containsKey(WILDCARD); + } + + /** + * Get the associated value + * + * @param block block + * @param meta meta + * @return current mapping OR wildcard of that block. null if neither exists + */ + public V get(Block block, byte meta) { + TByteObjectMap submap = backing.get(block); + if (submap == null) return null; + V v = submap.get(meta); + if (v != null) return v; + return submap.get(WILDCARD); + } + + /** + * Remove a mapping + * + * @param block block + * @param meta meta + * @return old value, or null if none + */ + public V remove(Block block, byte meta) { + TByteObjectMap submap = backing.get(block); + if (submap == null) return null; + V v = submap.remove(meta); + if (v != null) { + size--; + if (submap.isEmpty()) backing.remove(block); + } + return v; + } + + /** + * Size of all mappings + * + * @return size + */ + public int size() { + return size; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GTBlockMap that = (GTBlockMap) o; + + return backing.equals(that.backing); + } + + @Override + public int hashCode() { + return backing.hashCode(); + } +} diff --git a/src/main/java/gregtech/api/util/GTBlockSet.java b/src/main/java/gregtech/api/util/GTBlockSet.java new file mode 100644 index 0000000000..6c91193832 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTBlockSet.java @@ -0,0 +1,39 @@ +package gregtech.api.util; + +import net.minecraft.block.Block; + +public class GTBlockSet { + + private final GTBlockMap backing = new GTBlockMap<>(); + + public boolean add(Block block, byte meta) { + return backing.put(block, meta, this) != this; + } + + public boolean contains(Block block, byte meta) { + return backing.get(block, meta) == this; + } + + public boolean remove(Block block, byte meta) { + return backing.remove(block, meta) == this; + } + + public int size() { + return backing.size(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + GTBlockSet that = (GTBlockSet) o; + + return backing.equals(that.backing); + } + + @Override + public int hashCode() { + return backing.hashCode(); + } +} diff --git a/src/main/java/gregtech/api/util/GTCLSCompat.java b/src/main/java/gregtech/api/util/GTCLSCompat.java new file mode 100644 index 0000000000..823a7b850e --- /dev/null +++ b/src/main/java/gregtech/api/util/GTCLSCompat.java @@ -0,0 +1,157 @@ +package gregtech.api.util; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.Optional; +import java.util.Set; +import java.util.function.Consumer; +import java.util.function.Function; + +import cpw.mods.fml.common.ProgressManager; +import gregtech.GTMod; +import gregtech.api.enums.Materials; +import gregtech.common.GTProxy; +import gregtech.loaders.postload.GTPostLoad; + +@SuppressWarnings("rawtypes, unchecked, deprecation") +public class GTCLSCompat { + + private static Class alexiilMinecraftDisplayer; + private static Class alexiilProgressDisplayer; + private static Class cpwProgressBar; + + private static Method getLastPercent; + private static Method displayProgress; + + private static Field isReplacingVanillaMaterials; + private static Field isRegisteringGTmaterials; + private static Field progressBarStep; + + static { + // CLS + try { + alexiilMinecraftDisplayer = Class.forName("alexiil.mods.load.MinecraftDisplayer"); + alexiilProgressDisplayer = Class.forName("alexiil.mods.load.ProgressDisplayer"); + } catch (ClassNotFoundException ex) { + GTMod.GT_FML_LOGGER.catching(ex); + } + + try { + cpwProgressBar = Class.forName("cpw.mods.fml.common.ProgressManager$ProgressBar"); + } catch (ClassNotFoundException ex) { + GTMod.GT_FML_LOGGER.catching(ex); + } + + Optional.ofNullable(alexiilMinecraftDisplayer) + .ifPresent(e -> { + try { + getLastPercent = e.getMethod("getLastPercent"); + isReplacingVanillaMaterials = e.getField("isReplacingVanillaMaterials"); + isRegisteringGTmaterials = e.getField("isRegisteringGTmaterials"); + } catch (NoSuchMethodException | NoSuchFieldException ex) { + GTMod.GT_FML_LOGGER.catching(ex); + } + }); + + Optional.ofNullable(alexiilProgressDisplayer) + .ifPresent(e -> { + try { + displayProgress = e.getMethod("displayProgress", String.class, float.class); + } catch (NoSuchMethodException ex) { + GTMod.GT_FML_LOGGER.catching(ex); + } + }); + + try { + progressBarStep = cpwProgressBar.getDeclaredField("step"); + progressBarStep.setAccessible(true); + } catch (NoSuchFieldException ex) { + GTMod.GT_FML_LOGGER.catching(ex); + } + } + + private GTCLSCompat() {} + + private static void registerAndReportProgression(String materialsType, Collection materials, + ProgressManager.ProgressBar progressBar, Function getName, Consumer action) { + int sizeStep = materials.size(); + final long progressionReportsEvery = 100; + final long bakingMsgEvery = 1000; + long nextProgressionReportAt = 0; + long nextBakingMsgAt = 0; + int currentStep = 0; + + for (T m : materials) { + long now = System.currentTimeMillis(); + + if (nextProgressionReportAt < now) { + nextProgressionReportAt = now + progressionReportsEvery; + String materialName = getName.apply(m) + .toString(); + try { + displayProgress.invoke(null, materialName, (float) currentStep / sizeStep); + } catch (IllegalAccessException | InvocationTargetException iae) { + GTMod.GT_FML_LOGGER.error("While updating progression", iae); + } + try { + progressBarStep.set(progressBar, currentStep); + } catch (IllegalAccessException iae) { + GTMod.GT_FML_LOGGER.error("While updating intermediate progression steps number", iae); + } + progressBar.step(materialName); + } + if (nextBakingMsgAt < now) { + nextBakingMsgAt = now + bakingMsgEvery; + GTMod.GT_FML_LOGGER + .info(String.format("%s - Baking: %d%%", materialsType, currentStep * 100 / sizeStep)); + } + action.accept(m); + currentStep += 1; + } + GTMod.GT_FML_LOGGER.info(String.format("%s - Baking: Done", materialsType)); + try { + progressBarStep.set(progressBar, currentStep); + } catch (IllegalAccessException iae) { + GTMod.GT_FML_LOGGER.error("While updating final progression steps number", iae); + } + } + + public static void stepMaterialsCLS(Collection mEvents, + ProgressManager.ProgressBar progressBar) throws IllegalAccessException { + try { + isRegisteringGTmaterials.set(null, true); + } catch (IllegalArgumentException | IllegalAccessException e) { + GTMod.GT_FML_LOGGER.catching(e); + } + registerAndReportProgression( + "GregTech materials", + mEvents, + progressBar, + m -> m.mMaterial, + GTProxy::registerRecipes); + ProgressManager.pop(progressBar); + isRegisteringGTmaterials.set(null, false); + } + + public static void doActualRegistrationCLS(ProgressManager.ProgressBar progressBar, + Set replacedVanillaItemsSet) { + try { + isReplacingVanillaMaterials.set(null, true); + } catch (IllegalArgumentException | IllegalAccessException e) { + GTMod.GT_FML_LOGGER.catching(e); + } + registerAndReportProgression( + "Vanilla materials", + replacedVanillaItemsSet, + progressBar, + m -> m.mDefaultLocalName, + GTPostLoad::doActualRegistration); + } + + public static void pushToDisplayProgress() throws InvocationTargetException, IllegalAccessException { + isReplacingVanillaMaterials.set(null, false); + displayProgress.invoke(null, "Post Initialization: loading GregTech", getLastPercent.invoke(null)); + } +} diff --git a/src/main/java/gregtech/api/util/GTChunkAssociatedData.java b/src/main/java/gregtech/api/util/GTChunkAssociatedData.java new file mode 100644 index 0000000000..7a81c715cb --- /dev/null +++ b/src/main/java/gregtech/api/util/GTChunkAssociatedData.java @@ -0,0 +1,494 @@ +package gregtech.api.util; + +import static gregtech.api.enums.Mods.GregTech; + +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.UncheckedIOException; +import java.lang.ref.WeakReference; +import java.lang.reflect.Array; +import java.nio.file.AtomicMoveNotSupportedException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.Arrays; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.WorldEvent; + +import org.apache.commons.io.FileUtils; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +/** + * A utility to save all kinds of data that is a function of any chunk. + *

+ * GregTech takes care of saving and loading the data from disk, and an efficient mechanism to locate it. Subclass only + * need to define the exact scheme of each element data (by overriding the three protected abstract method) + *

+ * Oh, there is no limit on how large your data is, though you'd not have the familiar NBT interface, but DataOutput + * should be reasonably common anyway. + *

+ * It should be noted this class is NOT thread safe. + *

+ * Element cannot be null. + *

+ * TODO: Implement automatic region unloading. + * + * @param data element type + * @author glease + */ +@ParametersAreNonnullByDefault +public abstract class GTChunkAssociatedData { + + private static final Map> instances = new ConcurrentHashMap<>(); + private static final int IO_PARALLELISM = Math.min( + 8, + Math.max( + 1, + Runtime.getRuntime() + .availableProcessors() * 2 + / 3)); + private static final ExecutorService IO_WORKERS = Executors.newWorkStealingPool(IO_PARALLELISM); + private static final Pattern FILE_PATTERN = Pattern.compile("(.+)\\.(-?\\d+)\\.(-?\\d+)\\.dat"); + + static { + // register event handler + new EventHandler(); + } + + protected final String mId; + protected final Class elementtype; + private final int regionLength; + private final int version; + private final boolean saveDefaults; + /** + * Data is stored as a `(world id -> (super region id -> super region data))` hash map. where super region's size is + * determined by regionSize. Here it is called super region, to not confuse with vanilla's regions. + */ + private final Map> masterMap = new ConcurrentHashMap<>(); + + /** + * Initialize this instance. + * + * @param aId An arbitrary, but globally unique identifier for what this data is + * @param elementType The class of this element type. Used to create arrays. + * @param regionLength The length of one super region. Each super region will contain + * {@code regionLength * regionLength} chunks + * @param version An integer marking the version of this data. Useful later when the data's serialized form + * changed. + */ + protected GTChunkAssociatedData(String aId, Class elementType, int regionLength, byte version, + boolean saveDefaults) { + if (regionLength * regionLength > Short.MAX_VALUE || regionLength <= 0) + throw new IllegalArgumentException("Region invalid: " + regionLength); + if (!IData.class.isAssignableFrom(elementType)) throw new IllegalArgumentException("Data type invalid"); + if (aId.contains(".")) throw new IllegalArgumentException("ID cannot contains dot"); + this.mId = aId; + this.elementtype = elementType; + this.regionLength = regionLength; + this.version = version; + this.saveDefaults = saveDefaults; + if (instances.putIfAbsent(aId, this) != null) + throw new IllegalArgumentException("Duplicate GT_ChunkAssociatedData: " + aId); + } + + private ChunkCoordIntPair getRegionID(int aChunkX, int aChunkZ) { + return new ChunkCoordIntPair(Math.floorDiv(aChunkX, regionLength), Math.floorDiv(aChunkZ, regionLength)); + } + + /** + * Get a reference to data of the chunk that tile entity is in. The returned reference should be mutable. + */ + public final T get(IGregTechTileEntity tileEntity) { + return get(tileEntity.getWorld(), tileEntity.getXCoord() >> 4, tileEntity.getZCoord() >> 4); + } + + public final T get(Chunk chunk) { + return get(chunk.worldObj, chunk.xPosition, chunk.zPosition); + } + + public final T get(World world, ChunkCoordIntPair coord) { + return get(world, coord.chunkXPos, coord.chunkZPos); + } + + public final T get(World world, int chunkX, int chunkZ) { + SuperRegion region = masterMap.computeIfAbsent(world.provider.dimensionId, ignored -> new ConcurrentHashMap<>()) + .computeIfAbsent(getRegionID(chunkX, chunkZ), c -> new SuperRegion(world, c)); + return region.get(Math.floorMod(chunkX, regionLength), Math.floorMod(chunkZ, regionLength)); + } + + protected final void set(World world, int chunkX, int chunkZ, T data) { + SuperRegion region = masterMap.computeIfAbsent(world.provider.dimensionId, ignored -> new ConcurrentHashMap<>()) + .computeIfAbsent(getRegionID(chunkX, chunkZ), c -> new SuperRegion(world, c)); + region.set(Math.floorMod(chunkX, regionLength), Math.floorMod(chunkZ, regionLength), data); + } + + protected final boolean isCreated(int dimId, int chunkX, int chunkZ) { + Map dimData = masterMap.getOrDefault(dimId, null); + if (dimData == null) return false; + + SuperRegion region = dimData.getOrDefault(getRegionID(chunkX, chunkZ), null); + if (region == null) return false; + + return region.isCreated(Math.floorMod(chunkX, regionLength), Math.floorMod(chunkZ, regionLength)); + } + + public void clear() { + if (GTValues.debugWorldData) { + long dirtyRegionCount = masterMap.values() + .stream() + .flatMap( + m -> m.values() + .stream()) + .filter(SuperRegion::isDirty) + .count(); + if (dirtyRegionCount > 0) GTLog.out.println( + "Clearing ChunkAssociatedData with " + dirtyRegionCount + " regions dirty. Data might have been lost!"); + } + masterMap.clear(); + } + + public void save() { + saveRegions( + masterMap.values() + .stream() + .flatMap( + m -> m.values() + .stream())); + } + + public void save(World world) { + Map map = masterMap.get(world.provider.dimensionId); + if (map != null) saveRegions( + map.values() + .stream()); + } + + private void saveRegions(Stream stream) { + stream.filter(SuperRegion::isDirty) + .map(c -> (Runnable) c::save) + .map(r -> CompletableFuture.runAsync(r, IO_WORKERS)) + .reduce(CompletableFuture::allOf) + .ifPresent(f -> { + try { + f.get(); + } catch (Exception e) { + GTLog.err.println("Data save error: " + mId); + e.printStackTrace(GTLog.err); + } + }); + } + + protected abstract void writeElement(DataOutput output, T element, World world, int chunkX, int chunkZ) + throws IOException; + + protected abstract T readElement(DataInput input, int version, World world, int chunkX, int chunkZ) + throws IOException; + + protected abstract T createElement(World world, int chunkX, int chunkZ); + + /** + * Clear all mappings, regardless of whether they are dirty + */ + public static void clearAll() { + for (GTChunkAssociatedData d : instances.values()) d.clear(); + } + + /** + * Save all mappings + */ + public static void saveAll() { + for (GTChunkAssociatedData d : instances.values()) d.save(); + } + + /** + * Load data for all chunks for a given world. Current data for that world will be discarded. If this is what you + * intended, call {@link #save(World)} beforehand. + *

+ * Be aware of the memory consumption though. + */ + protected void loadAll(World w) { + if (GTValues.debugWorldData && masterMap.containsKey(w.provider.dimensionId)) GTLog.err.println( + "Reloading ChunkAssociatedData " + mId + " for world " + w.provider.dimensionId + " discards old data!"); + if (!getSaveDirectory(w).isDirectory()) + // nothing to load... + return; + try (Stream stream = Files.list(getSaveDirectory(w).toPath())) { + Map worldData = stream.map(f -> { + Matcher matcher = FILE_PATTERN.matcher( + f.getFileName() + .toString()); + return matcher.matches() ? matcher : null; + }) + .filter(Objects::nonNull) + .filter(m -> mId.equals(m.group(1))) + .map( + m -> CompletableFuture.supplyAsync( + () -> new SuperRegion(w, Integer.parseInt(m.group(2)), Integer.parseInt(m.group(3))), + IO_WORKERS)) + .map(f -> { + try { + return f.get(); + } catch (Exception e) { + GTLog.err.println("Error loading region"); + e.printStackTrace(GTLog.err); + return null; + } + }) + .filter(Objects::nonNull) + .collect(Collectors.toMap(SuperRegion::getCoord, Function.identity())); + masterMap.put(w.provider.dimensionId, worldData); + } catch (IOException | UncheckedIOException e) { + GTLog.err.println("Error loading all region"); + e.printStackTrace(GTLog.err); + } + } + + protected File getSaveDirectory(World w) { + File base; + if (w.provider.getSaveFolder() == null) base = w.getSaveHandler() + .getWorldDirectory(); + else base = new File( + w.getSaveHandler() + .getWorldDirectory(), + w.provider.getSaveFolder()); + return new File(base, GregTech.ID); + } + + public interface IData { + + /** + * @return Whether the data is different from chunk default + */ + boolean isSameAsDefault(); + } + + protected final class SuperRegion { + + private final T[] data = createData(); + private final File backingStorage; + private final WeakReference world; + /** + * Be aware, this means region coord, not bottom-left chunk coord + */ + private final ChunkCoordIntPair coord; + + private SuperRegion(World world, int regionX, int regionZ) { + this.world = new WeakReference<>(world); + this.coord = new ChunkCoordIntPair(regionX, regionZ); + backingStorage = new File(getSaveDirectory(world), String.format("%s.%d.%d.dat", mId, regionX, regionZ)); + if (backingStorage.isFile()) load(); + } + + private SuperRegion(World world, ChunkCoordIntPair regionCoord) { + this.world = new WeakReference<>(world); + this.coord = regionCoord; + backingStorage = new File( + getSaveDirectory(world), + String.format("%s.%d.%d.dat", mId, regionCoord.chunkXPos, regionCoord.chunkZPos)); + if (backingStorage.isFile()) load(); + } + + @SuppressWarnings("unchecked") + private T[] createData() { + return (T[]) Array.newInstance(elementtype, regionLength * regionLength); + } + + public T get(int subRegionX, int subRegionZ) { + int index = getIndex(subRegionX, subRegionZ); + T datum = data[index]; + if (datum == null) { + World world = Objects.requireNonNull(this.world.get()); + T newElem = createElement( + world, + coord.chunkXPos * regionLength + subRegionX, + coord.chunkZPos * regionLength + subRegionZ); + data[index] = newElem; + return newElem; + } + return datum; + } + + public void set(int subRegionX, int subRegionZ, T data) { + this.data[getIndex(subRegionX, subRegionZ)] = data; + } + + public boolean isCreated(int subRegionX, int subRegionZ) { + return this.data[getIndex(subRegionX, subRegionZ)] != null; + } + + public ChunkCoordIntPair getCoord() { + return coord; + } + + private int getIndex(int subRegionX, int subRegionY) { + return subRegionX * regionLength + subRegionY; + } + + private int getChunkX(int index) { + return index / regionLength + coord.chunkXPos * regionLength; + } + + private int getChunkZ(int index) { + return index % regionLength + coord.chunkZPos * regionLength; + } + + public boolean isDirty() { + for (T datum : data) { + if (datum != null && !datum.isSameAsDefault()) return true; + } + return false; + } + + public void save() { + try { + save0(); + } catch (IOException e) { + GTLog.err.println("Error saving data " + backingStorage.getPath()); + e.printStackTrace(GTLog.err); + } + } + + private void save0() throws IOException { + // noinspection ResultOfMethodCallIgnored + backingStorage.getParentFile() + .mkdirs(); + File tmpFile = getTmpFile(); + World world = Objects.requireNonNull(this.world.get(), "Attempting to save region of another world!"); + try (DataOutputStream output = new DataOutputStream(new FileOutputStream(tmpFile))) { + int ptr = 0; + boolean nullRange = data[0] == null; + // write a magic byte as storage format version + output.writeByte(0); + // write a magic byte as data format version + output.writeByte(version); + output.writeBoolean(nullRange); + while (ptr < data.length) { + // work out how long is this range + int rangeStart = ptr; + while (ptr < data.length + && (data[ptr] == null || (!saveDefaults && data[ptr].isSameAsDefault())) == nullRange) ptr++; + // write range length + output.writeShort(ptr - rangeStart); + if (!nullRange) + // write element data + for (int i = rangeStart; i < ptr; i++) + writeElement(output, data[i], world, getChunkX(ptr), getChunkZ(ptr)); + // or not + nullRange = !nullRange; + } + } + // first try to replace the destination file + // since atomic operation, no need to keep the backup in place + try { + Files.move( + tmpFile.toPath(), + backingStorage.toPath(), + StandardCopyOption.REPLACE_EXISTING, + StandardCopyOption.ATOMIC_MOVE); + } catch (AtomicMoveNotSupportedException ignored) { + // in case some dumb system/jre combination would cause this + // or if **somehow** two file inside the same directory belongs two separate filesystem + FileUtils.copyFile(tmpFile, backingStorage); + } + } + + public void load() { + try { + loadFromFile(backingStorage); + } catch (IOException | RuntimeException e) { + GTLog.err.println("Primary storage file broken in " + backingStorage.getPath()); + e.printStackTrace(GTLog.err); + // in case the primary storage is broken + try { + loadFromFile(getTmpFile()); + } catch (IOException | RuntimeException e2) { + GTLog.err.println("Backup storage file broken in " + backingStorage.getPath()); + e2.printStackTrace(GTLog.err); + } + } + } + + private void loadFromFile(File file) throws IOException { + World world = Objects.requireNonNull(this.world.get(), "Attempting to load region of another world!"); + try (DataInputStream input = new DataInputStream(new FileInputStream(file))) { + byte b = input.readByte(); + if (b == 0) { + loadV0(input, world); + } else { + GTLog.err.printf("Unknown ChunkAssociatedData version %d\n", b); + } + } + } + + private void loadV0(DataInput input, World world) throws IOException { + int version = input.readByte(); + boolean nullRange = input.readBoolean(); + int ptr = 0; + while (ptr != data.length) { + int rangeEnd = ptr + input.readUnsignedShort(); + if (!nullRange) { + for (; ptr < rangeEnd; ptr++) { + data[ptr] = readElement(input, version, world, getChunkX(ptr), getChunkZ(ptr)); + } + } else { + Arrays.fill(data, ptr, rangeEnd, null); + ptr = rangeEnd; + } + nullRange = !nullRange; + } + } + + private File getTmpFile() { + return new File(backingStorage.getParentFile(), backingStorage.getName() + ".tmp"); + } + } + + public static class EventHandler { + + private EventHandler() { + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + public void onWorldSave(WorldEvent.Save e) { + for (GTChunkAssociatedData d : instances.values()) { + d.save(e.world); + } + } + + @SubscribeEvent + public void onWorldUnload(WorldEvent.Unload e) { + for (GTChunkAssociatedData d : instances.values()) { + // there is no need to explicitly do a save here + // forge will send a WorldEvent.Save on server thread before this event is distributed + d.masterMap.remove(e.world.provider.dimensionId); + } + } + } +} diff --git a/src/main/java/gregtech/api/util/GTClientPreference.java b/src/main/java/gregtech/api/util/GTClientPreference.java new file mode 100644 index 0000000000..f265094ca3 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTClientPreference.java @@ -0,0 +1,43 @@ +package gregtech.api.util; + +import gregtech.common.config.client.ConfigPreference; +import gregtech.common.config.client.ConfigWaila; + +public class GTClientPreference { + + private final boolean mSingleBlockInitialFilter; + private final boolean mSingleBlockInitialMultiStack; + private final boolean mInputBusInitialFilter; + private final boolean wailaAverageNS; + + public GTClientPreference(boolean mSingleBlockInitialFilter, boolean mSingleBlockInitialMultiStack, + boolean mInputBusInitialFilter, boolean wailaAverageNS) { + this.mSingleBlockInitialFilter = mSingleBlockInitialFilter; + this.mSingleBlockInitialMultiStack = mSingleBlockInitialMultiStack; + this.mInputBusInitialFilter = mInputBusInitialFilter; + this.wailaAverageNS = wailaAverageNS; + } + + public GTClientPreference() { + this.mSingleBlockInitialFilter = ConfigPreference.singleBlockInitialFilter; + this.mSingleBlockInitialMultiStack = ConfigPreference.singleBlockInitialAllowMultiStack; + this.mInputBusInitialFilter = ConfigPreference.inputBusInitialFilter; + this.wailaAverageNS = ConfigWaila.wailaAverageNS; + } + + public boolean isSingleBlockInitialFilterEnabled() { + return mSingleBlockInitialFilter; + } + + public boolean isSingleBlockInitialMultiStackEnabled() { + return mSingleBlockInitialMultiStack; + } + + public boolean isInputBusInitialFilterEnabled() { + return mInputBusInitialFilter; + } + + public boolean isWailaAverageNSEnabled() { + return wailaAverageNS; + } +} diff --git a/src/main/java/gregtech/api/util/GTConfig.java b/src/main/java/gregtech/api/util/GTConfig.java new file mode 100644 index 0000000000..68ff810414 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTConfig.java @@ -0,0 +1,162 @@ +package gregtech.api.util; + +import static gregtech.api.enums.GTValues.E; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; + +public class GTConfig implements Runnable { + + public static boolean troll = false; + + public static Configuration sConfigFileIDs; + public static Configuration cleanroomFile; + public static Configuration undergroundFluidsFile; + public final Configuration mConfig; + + public GTConfig(Configuration aConfig) { + mConfig = aConfig; + mConfig.load(); + mConfig.save(); + GregTechAPI.sAfterGTPreload.add(this); // in case of crash on startup + GregTechAPI.sAfterGTLoad.add(this); // in case of crash on startup + GregTechAPI.sAfterGTPostload.add(this); + if (GTValues.lateConfigSave) GregTechAPI.sFirstWorldTick.add(this); + } + + private static boolean shouldSave() { + return GTValues.lateConfigSave ? GTValues.worldTickHappened : GregTechAPI.sPostloadFinished; + } + + public static int addIDConfig(Object aCategory, String aName, int aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = sConfigFileIDs.get( + aCategory.toString() + .replaceAll("\\|", "."), + aName.replaceAll("\\|", "."), + aDefault); + int rResult = tProperty.getInt(aDefault); + sConfigFileIDs.save(); + return rResult; + } + + public static String getStackConfigName(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return E; + Object rName = GTOreDictUnificator.getAssociation(aStack); + if (rName != null) return rName.toString(); + try { + if (GTUtility.isStringValid(rName = aStack.getUnlocalizedName())) return rName.toString(); + } catch (Throwable e) { + /* Do nothing */ + } + String sName = aStack.getItem() + .toString(); + String[] tmp = sName.split("@"); + if (tmp.length > 0) sName = tmp[0]; + return sName + "." + aStack.getItemDamage(); + } + + public boolean get(Object aCategory, ItemStack aStack, boolean aDefault) { + String aName = getStackConfigName(aStack); + return get(aCategory, aName, aDefault); + } + + public boolean get(Object aCategory, String aName, boolean aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = mConfig.get( + aCategory.toString() + .replaceAll("\\|", "_"), + (aName + "_" + aDefault).replaceAll("\\|", "_"), + aDefault); + boolean rResult = tProperty.getBoolean(aDefault); + if (!tProperty.wasRead() && shouldSave()) mConfig.save(); + return rResult; + } + + public int get(Object aCategory, ItemStack aStack, int aDefault) { + return get(aCategory, getStackConfigName(aStack), aDefault); + } + + public int get(Object aCategory, String aName, int aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = mConfig.get( + aCategory.toString() + .replaceAll("\\|", "_"), + (aName + "_" + aDefault).replaceAll("\\|", "_"), + aDefault); + int rResult = tProperty.getInt(aDefault); + if (!tProperty.wasRead() && shouldSave()) mConfig.save(); + return rResult; + } + + public double get(Object aCategory, ItemStack aStack, double aDefault) { + return get(aCategory, getStackConfigName(aStack), aDefault); + } + + public double get(Object aCategory, String aName, double aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = mConfig.get( + aCategory.toString() + .replaceAll("\\|", "_"), + (aName + "_" + aDefault).replaceAll("\\|", "_"), + aDefault); + double rResult = tProperty.getDouble(aDefault); + if (!tProperty.wasRead() && shouldSave()) mConfig.save(); + return rResult; + } + + public String get(Object aCategory, ItemStack aStack, String aDefault) { + return get(aCategory, getStackConfigName(aStack), aDefault); + } + + public String get(Object aCategory, String aName, String aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = mConfig.get( + aCategory.toString() + .replaceAll("\\|", "_"), + (aName + "_" + aDefault).replaceAll("\\|", "_"), + aDefault); + String rResult = tProperty.getString(); + if (!tProperty.wasRead() && shouldSave()) mConfig.save(); + return rResult; + } + + public String[] get(Object aCategory, ItemStack aStack, String... aDefault) { + return get(aCategory, getStackConfigName(aStack), aDefault); + } + + public String[] get(Object aCategory, String aName, String... aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = mConfig.get( + aCategory.toString() + .replaceAll("\\|", "_"), + aName.replaceAll("\\|", "_"), + aDefault); + String[] rResult = tProperty.getStringList(); + if (!tProperty.wasRead() && GregTechAPI.sPostloadFinished) mConfig.save(); + return rResult; + } + + public String getWithValidValues(Object aCategory, String aName, String[] validValues, String aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = mConfig.get( + aCategory.toString() + .replaceAll("\\|", "_"), + aName.replaceAll("\\|", "_"), + aDefault, + null, + validValues); + String rResult = tProperty.getString(); + if (!tProperty.wasRead() && GregTechAPI.sPostloadFinished) mConfig.save(); + return rResult; + } + + @Override + public void run() { + mConfig.save(); + } +} diff --git a/src/main/java/gregtech/api/util/GTCreativeTab.java b/src/main/java/gregtech/api/util/GTCreativeTab.java new file mode 100644 index 0000000000..54d8877a83 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTCreativeTab.java @@ -0,0 +1,26 @@ +package gregtech.api.util; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.ItemList; + +public class GTCreativeTab extends CreativeTabs { + + public GTCreativeTab(String aName, String aLocalName) { + super("GregTech." + aName); + GTLanguageManager.addStringLocalization("itemGroup.GregTech." + aName, aLocalName); + } + + @Override + public ItemStack getIconItemStack() { + return ItemList.Tool_Cheat.get(1, new ItemStack(Blocks.iron_block, 1)); + } + + @Override + public Item getTabIconItem() { + return ItemList.Circuit_Integrated.getItem(); + } +} diff --git a/src/main/java/gregtech/api/util/GTFoodStat.java b/src/main/java/gregtech/api/util/GTFoodStat.java new file mode 100644 index 0000000000..51e8818f62 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTFoodStat.java @@ -0,0 +1,122 @@ +package gregtech.api.util; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.PotionEffect; + +import gregtech.api.damagesources.GTDamageSources; +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IFoodStat; +import gregtech.api.items.MetaBaseItem; + +public class GTFoodStat implements IFoodStat { + + private final int mFoodLevel; + private final int[] mPotionEffects; + private final float mSaturation; + private final EnumAction mAction; + private final ItemStack mEmptyContainer; + private final boolean mAlwaysEdible, mInvisibleParticles, mIsRotten; + private boolean mExplosive = false, mMilk = false; + + /** + * @param aFoodLevel Amount of Food in Half Bacon [0 - 20] + * @param aSaturation Amount of Saturation [0.0F - 1.0F] + * @param aAction The Action to be used. If this is null, it uses the Eating Action + * @param aEmptyContainer An empty Container (Optional) + * @param aAlwaysEdible If this Item is always edible, like Golden Apples or Potions + * @param aInvisibleParticles If the Particles of the Potion Effects are invisible + * @param aPotionEffects An Array of Potion Effects with %4==0 Elements as follows ID of a Potion Effect. 0 for + * none Duration of the Potion in Ticks Level of the Effect. [0, 1, 2] are for [I, II, + * III] The likelihood that this Potion Effect takes place upon being eaten [1 - 100] + */ + public GTFoodStat(int aFoodLevel, float aSaturation, EnumAction aAction, ItemStack aEmptyContainer, + boolean aAlwaysEdible, boolean aInvisibleParticles, boolean aIsRotten, int... aPotionEffects) { + mFoodLevel = aFoodLevel; + mSaturation = aSaturation; + mAction = aAction == null ? EnumAction.eat : aAction; + mPotionEffects = aPotionEffects; + mEmptyContainer = GTUtility.copyOrNull(aEmptyContainer); + mInvisibleParticles = aInvisibleParticles; + mAlwaysEdible = aAlwaysEdible; + mIsRotten = aIsRotten; + } + + public GTFoodStat setExplosive() { + mExplosive = true; + return this; + } + + public GTFoodStat setMilk() { + mMilk = true; + return this; + } + + @Override + public int getFoodLevel(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer) { + return mFoodLevel; + } + + @Override + public float getSaturation(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer) { + return mSaturation; + } + + @Override + public void onEaten(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer) { + aStack.stackSize--; + ItemStack tStack = GTOreDictUnificator.get(GTUtility.copyOrNull(mEmptyContainer)); + if (tStack != null && !aPlayer.inventory.addItemStackToInventory(tStack)) + aPlayer.dropPlayerItemWithRandomChoice(tStack, true); + + new WorldSpawnedEventBuilder.SoundAtEntityEventBuilder().setIdentifier(SoundResource.RANDOM_BURP) + .setVolume(0.5F) + .setPitch(aPlayer.worldObj.rand.nextFloat() * 0.1F + 0.9F) + .setEntity(aPlayer) + .setWorld(aPlayer.worldObj) + .run(); + + if (!aPlayer.worldObj.isRemote) { + if (mMilk) { + aPlayer.curePotionEffects(new ItemStack(Items.milk_bucket, 1, 0)); + } + for (int i = 3; i < mPotionEffects.length; i += 4) { + if (aPlayer.worldObj.rand.nextInt(100) < mPotionEffects[i]) { + aPlayer.addPotionEffect( + new PotionEffect( + mPotionEffects[i - 3], + mPotionEffects[i - 2], + mPotionEffects[i - 1], + mInvisibleParticles)); + } + } + if (mExplosive) { + new WorldSpawnedEventBuilder.ExplosionEffectEventBuilder().setSmoking(true) + .setFlaming(true) + .setStrength(4f) + .setPosition(aPlayer.posX, aPlayer.posY, aPlayer.posZ) + .setEntity(aPlayer) + .setWorld(aPlayer.worldObj) + .run(); + aPlayer.attackEntityFrom(GTDamageSources.getExplodingDamage(), Float.MAX_VALUE); + } + } + } + + @Override + public EnumAction getFoodAction(MetaBaseItem aItem, ItemStack aStack) { + return mAction; + } + + @Override + public boolean alwaysEdible(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer) { + return mAlwaysEdible; + } + + @Override + public boolean isRotten(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer) { + return mIsRotten; + } +} diff --git a/src/main/java/gregtech/api/util/GTForestryCompat.java b/src/main/java/gregtech/api/util/GTForestryCompat.java new file mode 100644 index 0000000000..379604205a --- /dev/null +++ b/src/main/java/gregtech/api/util/GTForestryCompat.java @@ -0,0 +1,193 @@ +package gregtech.api.util; + +import static gregtech.api.recipe.RecipeMaps.centrifugeNonCellRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import java.util.Map; + +import net.minecraft.item.ItemStack; + +import forestry.api.recipes.ICentrifugeRecipe; +import forestry.api.recipes.ISqueezerRecipe; +import forestry.api.recipes.RecipeManagers; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.recipe.RecipeMaps; + +public class GTForestryCompat { + + public static void populateFakeNeiRecipes() { + if (ItemList.FR_Bee_Drone.get(1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.FR_Bee_Drone.getWildcard(1L)) + .itemOutputs(ItemList.FR_Bee_Drone.getWithName(1L, "Scanned Drone")) + .fluidInputs(Materials.Honey.getFluid(100L)) + .duration(25 * SECONDS) + .eut(2) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(scannerFakeRecipes); + } + if (ItemList.FR_Bee_Princess.get(1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.FR_Bee_Princess.getWildcard(1L)) + .itemOutputs(ItemList.FR_Bee_Princess.getWithName(1L, "Scanned Princess")) + .fluidInputs(Materials.Honey.getFluid(100L)) + .duration(25 * SECONDS) + .eut(2) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(scannerFakeRecipes); + } + if (ItemList.FR_Bee_Queen.get(1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.FR_Bee_Queen.getWildcard(1L)) + .itemOutputs(ItemList.FR_Bee_Queen.getWithName(1L, "Scanned Queen")) + .fluidInputs(Materials.Honey.getFluid(100L)) + .duration(25 * SECONDS) + .eut(2) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(scannerFakeRecipes); + } + if (ItemList.FR_Tree_Sapling.get(1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.FR_Tree_Sapling.getWildcard(1L)) + .itemOutputs(ItemList.FR_Tree_Sapling.getWithName(1L, "Scanned Sapling")) + .fluidInputs(Materials.Honey.getFluid(100L)) + .duration(25 * SECONDS) + .eut(2) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(scannerFakeRecipes); + } + if (ItemList.FR_Butterfly.get(1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.FR_Butterfly.getWildcard(1L)) + .itemOutputs(ItemList.FR_Butterfly.getWithName(1L, "Scanned Butterfly")) + .fluidInputs(Materials.Honey.getFluid(100L)) + .duration(25 * SECONDS) + .eut(2) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(scannerFakeRecipes); + } + if (ItemList.FR_Larvae.get(1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.FR_Larvae.getWildcard(1L)) + .itemOutputs(ItemList.FR_Larvae.getWithName(1L, "Scanned Larvae")) + .fluidInputs(Materials.Honey.getFluid(100L)) + .duration(25 * SECONDS) + .eut(2) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(scannerFakeRecipes); + } + if (ItemList.FR_Serum.get(1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.FR_Serum.getWildcard(1L)) + .itemOutputs(ItemList.FR_Serum.getWithName(1L, "Scanned Serum")) + .fluidInputs(Materials.Honey.getFluid(100L)) + .duration(25 * SECONDS) + .eut(2) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(scannerFakeRecipes); + } + if (ItemList.FR_Caterpillar.get(1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.FR_Caterpillar.getWildcard(1L)) + .itemOutputs(ItemList.FR_Caterpillar.getWithName(1L, "Scanned Caterpillar")) + .fluidInputs(Materials.Honey.getFluid(100L)) + .duration(25 * SECONDS) + .eut(2) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(scannerFakeRecipes); + } + if (ItemList.FR_PollenFertile.get(1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.FR_PollenFertile.getWildcard(1L)) + .itemOutputs(ItemList.FR_PollenFertile.getWithName(1L, "Scanned Pollen")) + .fluidInputs(Materials.Honey.getFluid(100L)) + .duration(25 * SECONDS) + .eut(2) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(scannerFakeRecipes); + } + } + + public static void transferCentrifugeRecipes() { + try { + for (ICentrifugeRecipe tRecipe : RecipeManagers.centrifugeManager.recipes()) { + Map outputs = tRecipe.getAllProducts(); + ItemStack[] tOutputs = new ItemStack[outputs.size()]; + int[] tChances = new int[outputs.size()]; + int i = 0; + for (Map.Entry entry : outputs.entrySet()) { + tChances[i] = (int) (entry.getValue() * 10000); + tOutputs[i] = entry.getKey() + .copy(); + i++; + } + GTValues.RA.stdBuilder() + .itemInputs(tRecipe.getInput()) + .itemOutputs(tOutputs) + .outputChances(tChances) + .duration(6 * SECONDS + 8 * TICKS) + .eut(5) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(tRecipe.getInput()) + .itemOutputs(tOutputs) + .outputChances(tChances) + .duration(6 * SECONDS + 8 * TICKS) + .eut(5) + .addTo(centrifugeNonCellRecipes); + } + } catch (Throwable e) { + if (GTValues.D1) { + e.printStackTrace(GTLog.err); + } + } + } + + public static void transferSqueezerRecipes() { + try { + for (ISqueezerRecipe tRecipe : RecipeManagers.squeezerManager.recipes()) { + if ((tRecipe.getResources().length == 1) && (tRecipe.getFluidOutput() != null) + && (tRecipe.getResources()[0] != null)) { + GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder(); + recipeBuilder.itemInputs(tRecipe.getResources()[0]); + if (tRecipe.getRemnants() != null) { + recipeBuilder.itemOutputs(tRecipe.getRemnants()) + .outputChances((int) (tRecipe.getRemnantsChance() * 10000)); + } + recipeBuilder.fluidOutputs(tRecipe.getFluidOutput()) + .duration(1 * SECONDS + 12 * TICKS) + .eut(8) + .addTo(RecipeMaps.fluidExtractionRecipes); + } + } + } catch (Throwable e) { + if (GTValues.D1) { + e.printStackTrace(GTLog.err); + } + } + } +} diff --git a/src/main/java/gregtech/api/util/GTGCCompat.java b/src/main/java/gregtech/api/util/GTGCCompat.java new file mode 100644 index 0000000000..0491d0f9f4 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTGCCompat.java @@ -0,0 +1,52 @@ +package gregtech.api.util; + +import static gregtech.api.enums.Mods.GalacticraftCore; + +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +import micdoodle8.mods.galacticraft.api.power.EnergySource; +import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceAdjacent; +import micdoodle8.mods.galacticraft.api.power.IEnergyHandlerGC; +import micdoodle8.mods.galacticraft.api.transmission.NetworkType; +import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; +import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; + +public class GTGCCompat { + + public static long insertEnergyInto(TileEntity tTileEntity, long aVoltage, ForgeDirection tDirection) { + // GC Compat + if (GalacticraftCore.isModLoaded() && tTileEntity instanceof IEnergyHandlerGC) { + if (!(tTileEntity instanceof IConnector) + || ((IConnector) tTileEntity).canConnect(tDirection, NetworkType.POWER)) { + EnergySource eSource = new EnergySourceAdjacent(tDirection); + + float tSizeToReceive = aVoltage * EnergyConfigHandler.IC2_RATIO, + tStored = ((IEnergyHandlerGC) tTileEntity).getEnergyStoredGC(eSource); + if (tSizeToReceive >= tStored + || tSizeToReceive <= ((IEnergyHandlerGC) tTileEntity).getMaxEnergyStoredGC(eSource) - tStored) { + float tReceived = ((IEnergyHandlerGC) tTileEntity).receiveEnergyGC(eSource, tSizeToReceive, false); + if (tReceived > 0) { + tSizeToReceive -= tReceived; + while (tSizeToReceive > 0) { + tReceived = ((IEnergyHandlerGC) tTileEntity) + .receiveEnergyGC(eSource, tSizeToReceive, false); + if (tReceived < 1) break; + tSizeToReceive -= tReceived; + } + return 1; + } + } + } + return 0; + } + return 2; + } + + public static boolean canConnect(TileEntity tTileEntity, ForgeDirection tDirection) { + // GC Compat + return GalacticraftCore.isModLoaded() && tTileEntity instanceof IEnergyHandlerGC + && (!(tTileEntity instanceof IConnector) + || ((IConnector) tTileEntity).canConnect(tDirection, NetworkType.POWER)); + } +} diff --git a/src/main/java/gregtech/api/util/GTIBoxableWrapper.java b/src/main/java/gregtech/api/util/GTIBoxableWrapper.java new file mode 100644 index 0000000000..fcb7846a20 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTIBoxableWrapper.java @@ -0,0 +1,13 @@ +package gregtech.api.util; + +import net.minecraft.item.ItemStack; + +import ic2.api.item.IBoxable; + +public class GTIBoxableWrapper implements IBoxable { + + @Override + public boolean canBeStoredInToolbox(ItemStack itemstack) { + return GTUtility.isStackInList(itemstack, GTModHandler.sBoxableItems); + } +} diff --git a/src/main/java/gregtech/api/util/GTItsNotMyFaultException.java b/src/main/java/gregtech/api/util/GTItsNotMyFaultException.java new file mode 100644 index 0000000000..5d21fd2420 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTItsNotMyFaultException.java @@ -0,0 +1,18 @@ +package gregtech.api.util; + +public class GTItsNotMyFaultException extends RuntimeException { + + private static final long serialVersionUID = -8752778866486460495L; + + private final String mError; + + public GTItsNotMyFaultException(String aError) { + mError = aError; + } + + @Override + public String toString() { + return "The GregTech-Addon has a Problem.\nIT'S NOT MY FAULT!!! Below is how to fix it.\n" + mError + + "\nDO NOT COME TO ME WITH THIS CRASH. YOU CAUSED IT YOURSELF, AND I TOLD YOU HOW TO FIX IT!!!"; + } +} diff --git a/src/main/java/gregtech/api/util/GTLanguageManager.java b/src/main/java/gregtech/api/util/GTLanguageManager.java new file mode 100644 index 0000000000..d68b438027 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTLanguageManager.java @@ -0,0 +1,603 @@ +package gregtech.api.util; + +import static gregtech.api.enums.GTValues.E; + +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +import cpw.mods.fml.common.registry.LanguageRegistry; +import cpw.mods.fml.relauncher.ReflectionHelper; +import gregtech.api.GregTechAPI; + +public class GTLanguageManager { + + /** + * Buffer to reduce memory allocation when injecting data to LanguageRegistry. + */ + private static final HashMap TEMPMAP = new HashMap<>(); + /** + * Buffer used when something is trying to add new lang entry while config file is not set up yet. + */ + public static final Map BUFFERMAP = new HashMap<>(); + /** + * Map containing all the translation data coming into this class. + */ + private static final Map LANGMAP = new HashMap<>(); + /** + * Config file handler bound to GregTech.lang or GregTech_(locale_name).lang. Even though it says English file, + * it's not necessarily English, but on system it's always treated as English (as in, "default" language.) + */ + public static Configuration sEnglishFile; + /** + * If the game is running with en_US language. This does not get updated when user changes language in game; + * GT lang system cannot handle that anyway. + */ + public static boolean isEN_US; + /** + * If placeholder like %material should be used for writing lang entries to file. + */ + public static boolean i18nPlaceholder = true; + /** + * If there's any lang entry that is not found on lang file and waiting to be written. + */ + private static boolean hasUnsavedEntry = false; + + // TODO: convert to enum + public static String FACE_ANY = "gt.lang.face.any", FACE_BOTTOM = "gt.lang.face.bottom", + FACE_TOP = "gt.lang.face.top", FACE_LEFT = "gt.lang.face.left", FACE_FRONT = "gt.lang.face.front", + FACE_RIGHT = "gt.lang.face.right", FACE_BACK = "gt.lang.face.back", FACE_NONE = "gt.lang.face.none"; + + public static String[] FACES = { FACE_BOTTOM, FACE_TOP, FACE_LEFT, FACE_FRONT, FACE_RIGHT, FACE_BACK, FACE_NONE }; + + /** + * Map referencing private field of StringTranslate, used by StatCollector. Used to inject lang entries there. + */ + private static final Map stringTranslateLanguageList; + + static { + try { + Field fieldStringTranslateLanguageList = ReflectionHelper + .findField(net.minecraft.util.StringTranslate.class, "languageList", "field_74816_c"); + Field fieldStringTranslateInstance = ReflectionHelper + .findField(net.minecraft.util.StringTranslate.class, "instance", "field_74817_a"); + // noinspection unchecked + stringTranslateLanguageList = (Map) fieldStringTranslateLanguageList + .get(fieldStringTranslateInstance.get(null)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + /** + * @deprecated Parameter aWriteIntoLangFile is no longer used, + * use {@link #addStringLocalization(String, String)} or consider migrating to MC lang system instead. + */ + @Deprecated + public static synchronized String addStringLocalization(String aKey, String aEnglish, boolean aWriteIntoLangFile) { + return addStringLocalization(aKey, aEnglish); + } + + /** + * If you newly use this method, please consider using MC lang system instead. + */ + public static synchronized String addStringLocalization(String aKey, String aEnglish) { + String trimmedKey = aKey != null ? aKey.trim() : ""; + if (trimmedKey.isEmpty()) return E; // RIP cascading class loading, don't use GT_Utility here + if (sEnglishFile == null) { + // Lang file is not set up yet + BUFFERMAP.put(trimmedKey, aEnglish); + return aEnglish; + } + if (!BUFFERMAP.isEmpty()) { + // Lang file is now set up, resolve all the buffers + // This won't be visited twice + for (Entry tEntry : BUFFERMAP.entrySet()) { + storeTranslation(tEntry.getKey(), tEntry.getValue()); + } + BUFFERMAP.clear(); + } + + if (!LANGMAP.containsKey(trimmedKey)) { + return storeTranslation(trimmedKey, aEnglish); + } + return LANGMAP.get(trimmedKey); + } + + private static synchronized String storeTranslation(String trimmedKey, String english) { + String translation = writeToLangFile(trimmedKey, english); + LANGMAP.put(trimmedKey, translation); + addToMCLangList(trimmedKey, translation); + TEMPMAP.put(trimmedKey, translation); + LanguageRegistry.instance() + // If we use the actual user configured locale here, switching lang to others while running game + // turns everything into unlocalized string. So we make it "default" and call it a day. + .injectLanguage("en_US", TEMPMAP); + TEMPMAP.clear(); + return translation; + } + + private static synchronized String writeToLangFile(String trimmedKey, String aEnglish) { + Property tProperty = sEnglishFile.get("LanguageFile", trimmedKey, aEnglish); + if (hasUnsavedEntry && GregTechAPI.sPostloadFinished) { + sEnglishFile.save(); + hasUnsavedEntry = false; + } + String translation = tProperty.getString(); + if (tProperty.wasRead()) { + if (isEN_US && !aEnglish.equals(translation)) { + tProperty.set(aEnglish); + markFileDirty(); + return aEnglish; + } + } else { + markFileDirty(); + } + return translation; + } + + private static synchronized void markFileDirty() { + if (GregTechAPI.sPostloadFinished) { + sEnglishFile.save(); + } else { + hasUnsavedEntry = true; + } + } + + public static String getTranslation(String aKey) { + String tTrimmedKey = aKey != null ? aKey.trim() : ""; + if (tTrimmedKey.isEmpty()) return E; + + if (StatCollector.canTranslate(tTrimmedKey)) { + return StatCollector.translateToLocal(tTrimmedKey); + } + String anotherKeyToTry; + if (tTrimmedKey.endsWith(".name")) { + anotherKeyToTry = tTrimmedKey.substring(0, tTrimmedKey.length() - 5); + } else { + anotherKeyToTry = tTrimmedKey + ".name"; + } + if (StatCollector.canTranslate(anotherKeyToTry)) { + return StatCollector.translateToLocal(anotherKeyToTry); + } + return tTrimmedKey; + } + + public static String getTranslation(String aKey, String aSeperator) { + if (aKey == null) return E; + String rTranslation = E; + StringBuilder rTranslationSB = new StringBuilder(rTranslation); + for (String tString : aKey.split(aSeperator)) { + rTranslationSB.append(getTranslation(tString)); + } + rTranslation = String.valueOf(rTranslationSB); + return rTranslation; + } + + @SuppressWarnings("unused") + public static String getTranslateableItemStackName(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return "null"; + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT != null && tNBT.hasKey("display")) { + String tName = tNBT.getCompoundTag("display") + .getString("Name"); + if (GTUtility.isStringValid(tName)) { + return tName; + } + } + return aStack.getUnlocalizedName() + ".name"; + } + + public static void writePlaceholderStrings() { + addStringLocalization("Interaction_DESCRIPTION_Index_001", "Puts out into adjacent Slot #"); + addStringLocalization("Interaction_DESCRIPTION_Index_002", "Grabs in for own Slot #"); + addStringLocalization("Interaction_DESCRIPTION_Index_003", "Enable with Signal"); + addStringLocalization("Interaction_DESCRIPTION_Index_004", "Disable with Signal"); + addStringLocalization("Interaction_DESCRIPTION_Index_005", "Disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_006", "Export"); + addStringLocalization("Interaction_DESCRIPTION_Index_007", "Import"); + addStringLocalization("Interaction_DESCRIPTION_Index_008", "Export (conditional)"); + addStringLocalization("Interaction_DESCRIPTION_Index_009", "Import (conditional)"); + addStringLocalization("Interaction_DESCRIPTION_Index_010", "Export (invert cond)"); + addStringLocalization("Interaction_DESCRIPTION_Index_011", "Import (invert cond)"); + addStringLocalization("Interaction_DESCRIPTION_Index_012", "Export allow Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_013", "Import allow Output"); + addStringLocalization("Interaction_DESCRIPTION_Index_014", "Export allow Input (conditional)"); + addStringLocalization("Interaction_DESCRIPTION_Index_015", "Import allow Output (conditional)"); + addStringLocalization("Interaction_DESCRIPTION_Index_016", "Export allow Input (invert cond)"); + addStringLocalization("Interaction_DESCRIPTION_Index_017", "Import allow Output (invert cond)"); + addStringLocalization("Interaction_DESCRIPTION_Index_018", "Normal"); + addStringLocalization("Interaction_DESCRIPTION_Index_019", "Inverted"); + addStringLocalization("Interaction_DESCRIPTION_Index_020", "Ready to work"); + addStringLocalization("Interaction_DESCRIPTION_Index_021", "Not ready to work"); + addStringLocalization("Interaction_DESCRIPTION_Index_022", "Import"); + addStringLocalization("Interaction_DESCRIPTION_Index_023", "Import (conditional)"); + addStringLocalization("Interaction_DESCRIPTION_Index_024", "Import (invert cond)"); + addStringLocalization("Interaction_DESCRIPTION_Index_025", "Keep Liquids Away"); + addStringLocalization("Interaction_DESCRIPTION_Index_026", "Keep Liquids Away (conditional)"); + addStringLocalization("Interaction_DESCRIPTION_Index_027", "Keep Liquids Away (invert cond)"); + addStringLocalization("Interaction_DESCRIPTION_Index_031", "Normal Universal Storage"); + addStringLocalization("Interaction_DESCRIPTION_Index_032", "Inverted Universal Storage"); + addStringLocalization("Interaction_DESCRIPTION_Index_033", "Normal Electricity Storage"); + addStringLocalization("Interaction_DESCRIPTION_Index_034", "Inverted Electricity Storage"); + addStringLocalization("Interaction_DESCRIPTION_Index_035", "Normal Steam Storage"); + addStringLocalization("Interaction_DESCRIPTION_Index_036", "Inverted Steam Storage"); + addStringLocalization("Interaction_DESCRIPTION_Index_037", "Normal Average Electric Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_038", "Inverted Average Electric Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_039", "Normal Average Electric Output"); + addStringLocalization("Interaction_DESCRIPTION_Index_040", "Inverted Average Electric Output"); + addStringLocalization("Interaction_DESCRIPTION_Index_041", "Normal Electricity Storage(Including Batteries)"); + addStringLocalization("Interaction_DESCRIPTION_Index_042", "Inverted Electricity Storage(Including Batteries)"); + addStringLocalization("Interaction_DESCRIPTION_Index_043", "Filter input, Deny output"); + addStringLocalization("Interaction_DESCRIPTION_Index_044", "Invert input, Deny output"); + addStringLocalization("Interaction_DESCRIPTION_Index_045", "Filter input, Permit any output"); + addStringLocalization("Interaction_DESCRIPTION_Index_046", "Invert input, Permit any output"); + addStringLocalization("Interaction_DESCRIPTION_Index_047", "Filter Fluid: "); + addStringLocalization("Interaction_DESCRIPTION_Index_048", "Pump speed: "); + addStringLocalization("Interaction_DESCRIPTION_Index_049", "L/tick "); + addStringLocalization("Interaction_DESCRIPTION_Index_050", "L/sec"); + addStringLocalization("Interaction_DESCRIPTION_Index_053", "Slot: "); + addStringLocalization("Interaction_DESCRIPTION_Index_054", "Inverted"); + addStringLocalization("Interaction_DESCRIPTION_Index_055", "Normal"); + addStringLocalization("Interaction_DESCRIPTION_Index_056", "Emit if 1 Maintenance Needed"); + addStringLocalization("Interaction_DESCRIPTION_Index_057", "Emit if 1 Maintenance Needed(inverted)"); + addStringLocalization("Interaction_DESCRIPTION_Index_058", "Emit if 2 Maintenance Needed"); + addStringLocalization("Interaction_DESCRIPTION_Index_059", "Emit if 2 Maintenance Needed(inverted)"); + addStringLocalization("Interaction_DESCRIPTION_Index_060", "Emit if 3 Maintenance Needed"); + addStringLocalization("Interaction_DESCRIPTION_Index_061", "Emit if 3 Maintenance Needed(inverted)"); + addStringLocalization("Interaction_DESCRIPTION_Index_062", "Emit if 4 Maintenance Needed"); + addStringLocalization("Interaction_DESCRIPTION_Index_063", "Emit if 4 Maintenance Needed(inverted)"); + addStringLocalization("Interaction_DESCRIPTION_Index_064", "Emit if 5 Maintenance Needed"); + addStringLocalization("Interaction_DESCRIPTION_Index_065", "Emit if 5 Maintenance Needed(inverted)"); + addStringLocalization("Interaction_DESCRIPTION_Index_066", "Emit if rotor needs maintenance low accuracy mod"); + addStringLocalization( + "Interaction_DESCRIPTION_Index_067", + "Emit if rotor needs maintenance low accuracy mod(inverted)"); + addStringLocalization("Interaction_DESCRIPTION_Index_068", "Emit if rotor needs maintenance high accuracy mod"); + addStringLocalization("Interaction_DESCRIPTION_Index_068.1", "Emit if any Player is close"); + addStringLocalization( + "Interaction_DESCRIPTION_Index_069", + "Emit if rotor needs maintenance high accuracy mod(inverted)"); + addStringLocalization("Interaction_DESCRIPTION_Index_069.1", "Emit if other Player is close"); + addStringLocalization("Interaction_DESCRIPTION_Index_070", "Emit if you are close"); + addStringLocalization("Interaction_DESCRIPTION_Index_071", "Conducts strongest Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_072", "Conducts from bottom Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_073", "Conducts from top Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_074", "Conducts from north Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_075", "Conducts from south Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_076", "Conducts from west Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_077", "Conducts from east Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_078", "Signal = "); + addStringLocalization("Interaction_DESCRIPTION_Index_079", "Conditional Signal = "); + addStringLocalization("Interaction_DESCRIPTION_Index_080", "Inverted Conditional Signal = "); + addStringLocalization("Interaction_DESCRIPTION_Index_081", "Frequency: "); + addStringLocalization("Interaction_DESCRIPTION_Index_082", "Open if work enabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_083", "Open if work disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_084", "Only Output allowed"); + addStringLocalization("Interaction_DESCRIPTION_Index_085", "Only Input allowed"); + addStringLocalization("Interaction_DESCRIPTION_Index_086", "Auto-Input: "); + addStringLocalization("Interaction_DESCRIPTION_Index_087", "Disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_088", "Enabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_089", " Auto-Output: "); + addStringLocalization("Interaction_DESCRIPTION_Index_090", "Machine Processing: "); + addStringLocalization("Interaction_DESCRIPTION_Index_091", "Redstone Output at Side "); + addStringLocalization("Interaction_DESCRIPTION_Index_092", " set to: "); + addStringLocalization("Interaction_DESCRIPTION_Index_093", "Strong"); + addStringLocalization("Interaction_DESCRIPTION_Index_094", "Weak"); + addStringLocalization("Interaction_DESCRIPTION_Index_094.1", "Not enough soldering material!"); + addStringLocalization("Interaction_DESCRIPTION_Index_095", "Input from Output Side allowed"); + addStringLocalization("Interaction_DESCRIPTION_Index_096", "Input from Output Side forbidden"); + addStringLocalization("Interaction_DESCRIPTION_Index_098", "Do not regulate Item Stack Size"); + addStringLocalization("Interaction_DESCRIPTION_Index_099", "Regulate Item Stack Size to: "); + addStringLocalization("Interaction_DESCRIPTION_Index_100", "This is "); + addStringLocalization("Interaction_DESCRIPTION_Index_101", " Ore."); + addStringLocalization("Interaction_DESCRIPTION_Index_102", "There is Lava behind this Rock."); + addStringLocalization("Interaction_DESCRIPTION_Index_103", "There is a Liquid behind this Rock."); + addStringLocalization("Interaction_DESCRIPTION_Index_104", "There is an Air Pocket behind this Rock."); + addStringLocalization("Interaction_DESCRIPTION_Index_105", "Material is changing behind this Rock."); + addStringLocalization("Interaction_DESCRIPTION_Index_106", "Found traces of "); + addStringLocalization("Interaction_DESCRIPTION_Index_107", "No Ores found."); + addStringLocalization("Interaction_DESCRIPTION_Index_108", "Outputs misc. Fluids, Steam and Items"); + addStringLocalization("Interaction_DESCRIPTION_Index_109", "Outputs Steam and Items"); + addStringLocalization("Interaction_DESCRIPTION_Index_110", "Outputs Steam and misc. Fluids"); + addStringLocalization("Interaction_DESCRIPTION_Index_111", "Outputs Steam"); + addStringLocalization("Interaction_DESCRIPTION_Index_112", "Outputs misc. Fluids and Items"); + addStringLocalization("Interaction_DESCRIPTION_Index_113", "Outputs only Items"); + addStringLocalization("Interaction_DESCRIPTION_Index_114", "Outputs only misc. Fluids"); + addStringLocalization("Interaction_DESCRIPTION_Index_115", "Outputs nothing"); + // 116 moved to lang files + // 117 obsolete + // 118 moved to lang files + // 119 obsolete + // 120 moved to lang files + // 121 obsolete + addStringLocalization("Interaction_DESCRIPTION_Index_122", "Emit Redstone if slots contain something"); + addStringLocalization("Interaction_DESCRIPTION_Index_123", "Don't emit Redstone"); + // 124 moved to lang files + addStringLocalization("Interaction_DESCRIPTION_Index_124.1", "Blacklist Mode"); + // 125 obsolete + addStringLocalization("Interaction_DESCRIPTION_Index_125.1", "Whitelist Mode"); + // 126 moved to lang files + // 127 obsolete + addStringLocalization("Interaction_DESCRIPTION_Index_128", "Redstone"); + addStringLocalization("Interaction_DESCRIPTION_Index_128.1", "Redstone "); + addStringLocalization("Interaction_DESCRIPTION_Index_129", "Energy"); + addStringLocalization("Interaction_DESCRIPTION_Index_129.1", "Energy "); + addStringLocalization("Interaction_DESCRIPTION_Index_130", "Fluids"); + addStringLocalization("Interaction_DESCRIPTION_Index_130.1", "Fluids "); + addStringLocalization("Interaction_DESCRIPTION_Index_131", "Items"); + addStringLocalization("Interaction_DESCRIPTION_Index_131.1", "Items "); + addStringLocalization("Interaction_DESCRIPTION_Index_132", "Pipe is loose."); + addStringLocalization("Interaction_DESCRIPTION_Index_133", "Screws are loose."); + addStringLocalization("Interaction_DESCRIPTION_Index_134", "Something is stuck."); + addStringLocalization("Interaction_DESCRIPTION_Index_135", "Platings are dented."); + addStringLocalization("Interaction_DESCRIPTION_Index_136", "Circuitry burned out."); + addStringLocalization("Interaction_DESCRIPTION_Index_137", "That doesn't belong there."); + addStringLocalization("Interaction_DESCRIPTION_Index_138", "Incomplete Structure."); + addStringLocalization("Interaction_DESCRIPTION_Index_139", "Hit with Soft Mallet"); + addStringLocalization("Interaction_DESCRIPTION_Index_140", "to (re-)start the Machine"); + addStringLocalization("Interaction_DESCRIPTION_Index_141", "if it doesn't start."); + addStringLocalization("Interaction_DESCRIPTION_Index_142", "Running perfectly."); + addStringLocalization("Interaction_DESCRIPTION_Index_143", "Missing Mining Pipe"); + addStringLocalization("Interaction_DESCRIPTION_Index_144", "Missing Turbine Rotor"); + addStringLocalization("Interaction_DESCRIPTION_Index_145", "Step Down, In: "); + addStringLocalization("Interaction_DESCRIPTION_Index_146", "Step Up, In: "); + addStringLocalization("Interaction_DESCRIPTION_Index_147", "A, Out: "); + addStringLocalization("Interaction_DESCRIPTION_Index_148", "V "); + addStringLocalization("Interaction_DESCRIPTION_Index_149", "A"); + addStringLocalization("Interaction_DESCRIPTION_Index_150", "Chance: "); + addStringLocalization("Interaction_DESCRIPTION_Index_151", "Does not get consumed in the process"); + addStringLocalization("Interaction_DESCRIPTION_Index_151.1", "Outputs items and 1 specific Fluid"); + addStringLocalization("Interaction_DESCRIPTION_Index_151.2", "Outputs 1 specific Fluid"); + addStringLocalization("Interaction_DESCRIPTION_Index_151.4", "Successfully locked Fluid to %s"); + addStringLocalization("Interaction_DESCRIPTION_Index_152", "Total: "); + addStringLocalization("Interaction_DESCRIPTION_Index_153", "Usage: "); + addStringLocalization("Interaction_DESCRIPTION_Index_154", "Voltage: "); + addStringLocalization("Interaction_DESCRIPTION_Index_155", "Amperage: "); + addStringLocalization("Interaction_DESCRIPTION_Index_156", "Voltage: unspecified"); + addStringLocalization("Interaction_DESCRIPTION_Index_157", "Amperage: unspecified"); + addStringLocalization("Interaction_DESCRIPTION_Index_158", "Time: "); + addStringLocalization("Interaction_DESCRIPTION_Index_159", "Needs Low Gravity"); + addStringLocalization("Interaction_DESCRIPTION_Index_160", "Needs Cleanroom"); + addStringLocalization("Interaction_DESCRIPTION_Index_160.1", "Needs Cleanroom & LowGrav"); + addStringLocalization("Interaction_DESCRIPTION_Index_161", " secs"); + addStringLocalization("Interaction_DESCRIPTION_Index_162", "Name: "); + addStringLocalization("Interaction_DESCRIPTION_Index_163", " MetaData: "); + addStringLocalization("Interaction_DESCRIPTION_Index_164", "Hardness: "); + addStringLocalization("Interaction_DESCRIPTION_Index_165", " Blast Resistance: "); + addStringLocalization("Interaction_DESCRIPTION_Index_166", "Is valid Beacon Pyramid Material"); + addStringLocalization("Interaction_DESCRIPTION_Index_167", "Tank "); + addStringLocalization("Interaction_DESCRIPTION_Index_168", "Heat: "); + addStringLocalization("Interaction_DESCRIPTION_Index_169", "HEM: "); + addStringLocalization("Interaction_DESCRIPTION_Index_170", " Base EU Output: "); + addStringLocalization("Interaction_DESCRIPTION_Index_171", "Facing: "); + addStringLocalization("Interaction_DESCRIPTION_Index_172", " / Chance: "); + addStringLocalization("Interaction_DESCRIPTION_Index_173", "You can remove this with a Wrench"); + addStringLocalization("Interaction_DESCRIPTION_Index_174", "You can NOT remove this with a Wrench"); + addStringLocalization("Interaction_DESCRIPTION_Index_175", "Conduction Loss: "); + addStringLocalization("Interaction_DESCRIPTION_Index_176", "Contained Energy: "); + addStringLocalization("Interaction_DESCRIPTION_Index_177", "Has Muffler Upgrade"); + addStringLocalization("Interaction_DESCRIPTION_Index_178", "Progress/Load: "); + addStringLocalization("Interaction_DESCRIPTION_Index_179", "Max IN: "); + addStringLocalization("Interaction_DESCRIPTION_Index_181", "Max OUT: "); + addStringLocalization("Interaction_DESCRIPTION_Index_182", " EU at "); + addStringLocalization("Interaction_DESCRIPTION_Index_183", " A"); + addStringLocalization("Interaction_DESCRIPTION_Index_184", "Energy: "); + addStringLocalization("Interaction_DESCRIPTION_Index_186", "Owned by: "); + addStringLocalization("Interaction_DESCRIPTION_Index_187", "Type -- Crop-Name: "); + addStringLocalization("Interaction_DESCRIPTION_Index_188", " Growth: "); + addStringLocalization("Interaction_DESCRIPTION_Index_189", " Gain: "); + addStringLocalization("Interaction_DESCRIPTION_Index_190", " Resistance: "); + addStringLocalization("Interaction_DESCRIPTION_Index_191", "Plant -- Fertilizer: "); + addStringLocalization("Interaction_DESCRIPTION_Index_192", " Water: "); + addStringLocalization("Interaction_DESCRIPTION_Index_193", " Weed-Ex: "); + addStringLocalization("Interaction_DESCRIPTION_Index_194", " Scan-Level: "); + addStringLocalization("Interaction_DESCRIPTION_Index_195", "Environment -- Nutrients: "); + addStringLocalization("Interaction_DESCRIPTION_Index_196", " Humidity: "); + addStringLocalization("Interaction_DESCRIPTION_Index_197", " Air-Quality: "); + addStringLocalization("Interaction_DESCRIPTION_Index_198", "Attributes:"); + addStringLocalization("Interaction_DESCRIPTION_Index_199", "Discovered by: "); + addStringLocalization("Interaction_DESCRIPTION_Index_200", "Sort mode: "); + addStringLocalization("Interaction_DESCRIPTION_Index_200.1", "Automatic Item Shuffling: "); + addStringLocalization("Interaction_DESCRIPTION_Index_201", "Nothing"); + addStringLocalization("Interaction_DESCRIPTION_Index_202", "Pollution in Chunk: "); + addStringLocalization("Interaction_DESCRIPTION_Index_203", " gibbl"); + addStringLocalization("Interaction_DESCRIPTION_Index_204", "No Pollution in Chunk! HAYO!"); + addStringLocalization("Interaction_DESCRIPTION_Index_206", "Scan for Assembly Line"); + addStringLocalization( + "Interaction_DESCRIPTION_Index_207", + "Pump speed: %dL every %d ticks, %.2f L/sec on average"); + addStringLocalization("Interaction_DESCRIPTION_Index_208", " L"); + addStringLocalization("Interaction_DESCRIPTION_Index_209", " ticks"); + addStringLocalization("Interaction_DESCRIPTION_Index_209.1", " tick"); + addStringLocalization("Interaction_DESCRIPTION_Index_210", "Average: %.2f L/sec"); + addStringLocalization("Interaction_DESCRIPTION_Index_211", "Items per side: "); + addStringLocalization("Interaction_DESCRIPTION_Index_212", "Input enabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_213", "Input disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_214", "Connected"); + addStringLocalization("Interaction_DESCRIPTION_Index_215", "Disconnected"); + addStringLocalization("Interaction_DESCRIPTION_Index_216", "Deprecated Recipe"); + addStringLocalization("Interaction_DESCRIPTION_Index_219", "Extended Facing: "); + addStringLocalization("Interaction_DESCRIPTION_Index_220", "Single recipe locking disabled."); + addStringLocalization("Interaction_DESCRIPTION_Index_221", "Item threshold"); + addStringLocalization("Interaction_DESCRIPTION_Index_222", "Fluid threshold"); + addStringLocalization("Interaction_DESCRIPTION_Index_222.1", "Energy threshold"); + addStringLocalization( + "Interaction_DESCRIPTION_Index_223", + "Single recipe locking enabled. Will lock to next recipe."); + addStringLocalization("Interaction_DESCRIPTION_Index_224", "Always On"); + addStringLocalization("Interaction_DESCRIPTION_Index_225", "Active with Redstone Signal"); + addStringLocalization("Interaction_DESCRIPTION_Index_226", "Inactive with Redstone Signal"); + addStringLocalization("Interaction_DESCRIPTION_Index_227", "Allow Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_228", "Block Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_229", "Export/Import"); + addStringLocalization("Interaction_DESCRIPTION_Index_230", "Conditional"); + addStringLocalization("Interaction_DESCRIPTION_Index_231", "Enable Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_232", "Filter Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_233", "Filter Output"); + addStringLocalization("Interaction_DESCRIPTION_Index_234", "Block Output"); + addStringLocalization("Interaction_DESCRIPTION_Index_235", "Allow Output"); + addStringLocalization("Interaction_DESCRIPTION_Index_236", "Whitelist Fluid"); + addStringLocalization("Interaction_DESCRIPTION_Index_237", "Blacklist Fluid"); + addStringLocalization("Interaction_DESCRIPTION_Index_238", "Filter Direction"); + addStringLocalization("Interaction_DESCRIPTION_Index_239", "Filter Type"); + addStringLocalization("Interaction_DESCRIPTION_Index_240", "Block Flow"); + addStringLocalization("Interaction_DESCRIPTION_Index_241", "Recipe progress"); + addStringLocalization("Interaction_DESCRIPTION_Index_242", "Machine idle"); + addStringLocalization("Interaction_DESCRIPTION_Index_243", "Enable with Redstone"); + addStringLocalization("Interaction_DESCRIPTION_Index_244", "Disable with Redstone"); + addStringLocalization("Interaction_DESCRIPTION_Index_245", "Disable machine"); + addStringLocalization("Interaction_DESCRIPTION_Index_246", "Frequency"); + addStringLocalization("Interaction_DESCRIPTION_Index_247", "1 Issue"); + addStringLocalization("Interaction_DESCRIPTION_Index_248", "2 Issues"); + addStringLocalization("Interaction_DESCRIPTION_Index_249", "3 Issues"); + addStringLocalization("Interaction_DESCRIPTION_Index_250", "4 Issues"); + addStringLocalization("Interaction_DESCRIPTION_Index_251", "5 Issues"); + addStringLocalization("Interaction_DESCRIPTION_Index_252", "Rotor < 20%"); + addStringLocalization("Interaction_DESCRIPTION_Index_253", "Rotor ≈ 0%"); + addStringLocalization("Interaction_DESCRIPTION_Index_254", "Detect slot#"); + addStringLocalization("Interaction_DESCRIPTION_Index_254.0", "Detect Slot"); + addStringLocalization("Interaction_DESCRIPTION_Index_254.1", "Internal slot#"); + addStringLocalization("Interaction_DESCRIPTION_Index_255", "Adjacent slot#"); + addStringLocalization("Interaction_DESCRIPTION_Index_256", "Universal Storage"); + addStringLocalization("Interaction_DESCRIPTION_Index_257", "Electricity Storage"); + addStringLocalization("Interaction_DESCRIPTION_Index_258", "Steam Storage"); + addStringLocalization("Interaction_DESCRIPTION_Index_259", "Average Electric Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_260", "Average Electric Output"); + addStringLocalization("Interaction_DESCRIPTION_Index_261", "Electricity Storage(Including Batteries)"); + addStringLocalization("Interaction_DESCRIPTION_Index_262", "Fluid Auto Output Disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_263", "Fluid Auto Output Enabled"); + addStringLocalization( + "Interaction_DESCRIPTION_Index_264", + "currently none, will be locked to the next that is put in"); + addStringLocalization("Interaction_DESCRIPTION_Index_265", "1 specific Fluid"); + addStringLocalization("Interaction_DESCRIPTION_Index_266", "Lock Fluid Mode Disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_267", "Overflow Voiding Mode Disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_268", "Overflow Voiding Mode Enabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_269", "Void Full Mode Disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_270", "Void Full Mode Enabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_271", "unspecified"); + addStringLocalization("Interaction_DESCRIPTION_Index_272", "Recipe by: "); + addStringLocalization("Interaction_DESCRIPTION_Index_273", "Original Recipe by: "); + addStringLocalization("Interaction_DESCRIPTION_Index_274", "Modified by: "); + addStringLocalization("Interaction_DESCRIPTION_Index_275", "Original voltage: "); + addStringLocalization("Interaction_DESCRIPTION_Index_299", "Item Filter: "); + addStringLocalization("Interaction_DESCRIPTION_Index_300", "Filter Cleared!"); + addStringLocalization("Interaction_DESCRIPTION_Index_300.1", "Fluid Lock Cleared."); + addStringLocalization("Interaction_DESCRIPTION_Index_301", "Universal"); + addStringLocalization("Interaction_DESCRIPTION_Index_302", "Int. EU"); + addStringLocalization("Interaction_DESCRIPTION_Index_303", "Steam"); + addStringLocalization("Interaction_DESCRIPTION_Index_304", "Avg. Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_305", "Avg. Output"); + addStringLocalization("Interaction_DESCRIPTION_Index_306", "EU stored"); + addStringLocalization("Interaction_DESCRIPTION_Index_307", "Deny input, Filter output"); + addStringLocalization("Interaction_DESCRIPTION_Index_308", "Deny input, Invert output"); + addStringLocalization("Interaction_DESCRIPTION_Index_309", "Permit any input, Filter output"); + addStringLocalization("Interaction_DESCRIPTION_Index_310", "Permit any input, Invert output"); + addStringLocalization("Interaction_DESCRIPTION_Index_311", "Block Output"); + addStringLocalization("Interaction_DESCRIPTION_Index_312", "Allow Output"); + addStringLocalization("Interaction_DESCRIPTION_Index_313", "Block Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_314", "Allow Input"); + addStringLocalization("Interaction_DESCRIPTION_Index_315", "Filter Empty"); + addStringLocalization("Interaction_DESCRIPTION_Index_316", "Pump speed limit reached!"); + addStringLocalization("Interaction_DESCRIPTION_Index_317", "Filter: "); + addStringLocalization("Interaction_DESCRIPTION_Index_318", "Check Mode"); + addStringLocalization("Interaction_DESCRIPTION_Index_319", "Any player"); + addStringLocalization("Interaction_DESCRIPTION_Index_320", "Other players"); + addStringLocalization("Interaction_DESCRIPTION_Index_321", "Only owner"); + addStringLocalization("Interaction_DESCRIPTION_Index_322", "Overflow point: "); + addStringLocalization("Interaction_DESCRIPTION_Index_323", "L"); + addStringLocalization("Interaction_DESCRIPTION_Index_324", "Now"); + addStringLocalization("Interaction_DESCRIPTION_Index_325", "Max"); + addStringLocalization("Interaction_DESCRIPTION_Index_326", "Public"); + addStringLocalization("Interaction_DESCRIPTION_Index_327", "Private"); + addStringLocalization("Interaction_DESCRIPTION_Index_328", "Channel"); + addStringLocalization("Interaction_DESCRIPTION_Index_329", "Public/Private"); + addStringLocalization("Interaction_DESCRIPTION_Index_330", "Sneak Rightclick to switch Mode"); + addStringLocalization("Interaction_DESCRIPTION_Index_331", "AND Gate"); + addStringLocalization("Interaction_DESCRIPTION_Index_332", "NAND Gate"); + addStringLocalization("Interaction_DESCRIPTION_Index_333", "OR Gate"); + addStringLocalization("Interaction_DESCRIPTION_Index_334", "NOR Gate"); + addStringLocalization("Interaction_DESCRIPTION_Index_335", "Gate Mode"); + addStringLocalization("Interaction_DESCRIPTION_Index_336", "PCB Factory Tier: "); + addStringLocalization("Interaction_DESCRIPTION_Index_337", "Upgrade Required: "); + addStringLocalization("Interaction_DESCRIPTION_Index_338", "Bio"); + addStringLocalization("Interaction_DESCRIPTION_Index_339", "Biochamber Upgrade Enabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_339.1", "Biochamber Upgrade Disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_340", "Rotated biochamber enabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_340.1", "Rotated biochamber disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_341", "Tier 1 cooling enabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_341.1", "Tier 1 cooling disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_342", "Tier 2 cooling enabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_342.1", "Tier 2 cooling disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_343", "Use Machine Processing State"); + addStringLocalization("Interaction_DESCRIPTION_Index_343.1", "Use Inverted Machine Processing State"); + addStringLocalization("Interaction_DESCRIPTION_Index_344", "Input Blocking"); + addStringLocalization("Interaction_DESCRIPTION_Index_344.1", "Output Blocking"); + addStringLocalization("Interaction_DESCRIPTION_Index_400", "Running mode: "); + addStringLocalization("Interaction_DESCRIPTION_Index_500", "Fitting: Loose - More Flow"); + addStringLocalization("Interaction_DESCRIPTION_Index_501", "Fitting: Tight - More Efficiency"); + addStringLocalization("Interaction_DESCRIPTION_Index_502", "Mining chunk loading enabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_503", "Mining chunk loading disabled"); + addStringLocalization("Interaction_DESCRIPTION_Index_505", "Enable with Signal (Safe)"); + addStringLocalization("Interaction_DESCRIPTION_Index_506", "Disable with Signal (Safe)"); + addStringLocalization("Interaction_DESCRIPTION_Index_507", "Safe Mode"); + addStringLocalization("Interaction_DESCRIPTION_Index_508", "Needs Stabilized Black Hole"); + addStringLocalization("Interaction_DESCRIPTION_Index_509", "Requires HIP Unit"); + addStringLocalization("Interaction_DESCRIPTION_Index_602", "Use Private Frequency"); + addStringLocalization("Interaction_DESCRIPTION_Index_756", "Connectable: "); + addStringLocalization("Interaction_DESCRIPTION_Index_ALL", "All"); + addStringLocalization("Interaction_DESCRIPTION_Index_ANY", "Any"); + addStringLocalization("Interaction_DESCRIPTION_Index_INVERTED", "Inverted"); + addStringLocalization("Interaction_DESCRIPTION_Index_NORMAL", "Normal"); + addStringLocalization("Interaction_DESCRIPTION_Index_SIDE", "Side: "); + + addStringLocalization("Item_DESCRIPTION_Index_000", "Stored Heat: %s"); + addStringLocalization("Item_DESCRIPTION_Index_001", "Durability: %s/%s"); + addStringLocalization("Item_DESCRIPTION_Index_002", "%s lvl %s"); + addStringLocalization("Item_DESCRIPTION_Index_003", "Attack Damage: %s"); + addStringLocalization("Item_DESCRIPTION_Index_004", "Mining Speed: %s"); + addStringLocalization("Item_DESCRIPTION_Index_005", "Turbine Efficiency: %s"); + addStringLocalization("Item_DESCRIPTION_Index_006", "Optimal Steam flow: %s L/t"); + addStringLocalization("Item_DESCRIPTION_Index_007", "Energy from Optimal Gas Flow: %s EU/t"); + addStringLocalization("Item_DESCRIPTION_Index_008", "Energy from Optimal Plasma Flow: %s EU/t"); + addStringLocalization("Item_DESCRIPTION_Index_009", "Contains %s EU Tier: %s"); + addStringLocalization("Item_DESCRIPTION_Index_010", "Empty. You should recycle it properly."); + addStringLocalization("Item_DESCRIPTION_Index_011", "%s / %s EU - Voltage: %s"); + addStringLocalization("Item_DESCRIPTION_Index_012", "No Fluids Contained"); + addStringLocalization("Item_DESCRIPTION_Index_013", "%sL / %sL"); + addStringLocalization("Item_DESCRIPTION_Index_014", "Missing Coodinates!"); + addStringLocalization("Item_DESCRIPTION_Index_015", "Device at:"); + addStringLocalization("Item_DESCRIPTION_Index_018", "State: %s"); + addStringLocalization("Item_DESCRIPTION_Index_019", "Bath with neutron in a hot reactor"); + addStringLocalization("Item_DESCRIPTION_Index_020", "Progress: %s/%s"); + addStringLocalization("Item_DESCRIPTION_Index_021", "Radiation Hazard"); + addStringLocalization("Item_DESCRIPTION_Index_500", "Turbine Efficiency (Loose): %s"); + addStringLocalization("Item_DESCRIPTION_Index_501", "Optimal Steam flow (Loose): %s L/t"); + addStringLocalization("Item_DESCRIPTION_Index_502", "Overflow Efficiency Tier: %s"); + addStringLocalization("Item_DESCRIPTION_Index_900", "Energy from Optimal Steam Flow: %s EU/t"); + addStringLocalization("Item_DESCRIPTION_Index_901", "Energy from Optimal Steam Flow (Loose): %s EU/t"); + + addStringLocalization(FACE_ANY, "Any Side"); + addStringLocalization(FACE_BOTTOM, "Bottom"); + addStringLocalization(FACE_TOP, "Top"); + addStringLocalization(FACE_LEFT, "Left"); + addStringLocalization(FACE_FRONT, "Front"); + addStringLocalization(FACE_RIGHT, "Right"); + addStringLocalization(FACE_BACK, "Back"); + addStringLocalization(FACE_NONE, "None"); + } + + private static void addToMCLangList(String aKey, String translation) { + if (stringTranslateLanguageList != null) { + stringTranslateLanguageList.put(aKey, translation); + } + } +} diff --git a/src/main/java/gregtech/api/util/GTLog.java b/src/main/java/gregtech/api/util/GTLog.java new file mode 100644 index 0000000000..eba6b0fe50 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTLog.java @@ -0,0 +1,45 @@ +package gregtech.api.util; + +import java.io.File; +import java.io.OutputStream; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.List; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + *

+ * Just a simple Logging Function. If on Server, then this will point to System.out and System.err + */ +public class GTLog { + + public static PrintStream out = System.out; + public static PrintStream err = System.err; + public static PrintStream ore = new LogBuffer(); + public static PrintStream pal = null; + public static PrintStream exp = new LogBuffer(); + public static File mLogFile; + public static File mOreDictLogFile; + public static File mPlayerActivityLogFile; + public static File mExplosionLog; + + public static class LogBuffer extends PrintStream { + + public final List mBufferedOreDictLog = new ArrayList<>(); + + public LogBuffer() { + super(new OutputStream() { + + @Override + public void write(int arg0) { + /* Do nothing */ + } + }); + } + + @Override + public void println(String aString) { + mBufferedOreDictLog.add(aString); + } + } +} diff --git a/src/main/java/gregtech/api/util/GTModHandler.java b/src/main/java/gregtech/api/util/GTModHandler.java new file mode 100644 index 0000000000..8c06f2ad47 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTModHandler.java @@ -0,0 +1,2435 @@ +package gregtech.api.util; + +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.enums.GTValues.B; +import static gregtech.api.enums.GTValues.D1; +import static gregtech.api.enums.GTValues.DW; +import static gregtech.api.enums.GTValues.E; +import static gregtech.api.enums.GTValues.M; +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.GTValues.W; +import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; +import static gregtech.api.recipe.RecipeMaps.oreWasherRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.FurnaceRecipes; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OreDictNames; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.Tier; +import gregtech.api.enums.ToolDictNames; +import gregtech.api.interfaces.IDamagableItem; +import gregtech.api.interfaces.IItemContainer; +import gregtech.api.interfaces.internal.IGTCraftingRecipe; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe; +import gregtech.api.objects.GTHashSet; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeCategories; +import gregtech.api.recipe.RecipeMap; +import ic2.api.item.IBoxable; +import ic2.api.item.IC2Items; +import ic2.api.item.IElectricItem; +import ic2.api.reactor.IReactorComponent; +import ic2.api.recipe.IRecipeInput; +import ic2.api.recipe.RecipeInputItemStack; +import ic2.api.recipe.RecipeOutput; +import ic2.core.item.ItemToolbox; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + *

+ * This is the Interface I use for interacting with other Mods. + *

+ * Due to the many imports, this File can cause compile Problems if not all the APIs are installed + */ +public class GTModHandler { + + public static final List sSingleNonBlockDamagableRecipeList = new ArrayList<>(1000); + private static final Map sIC2ItemMap = new HashMap<>(); + + // public for bartworks + public static final List sAllRecipeList = new ArrayList<>(5000), sBufferRecipeList = new ArrayList<>(1000); + private static final List delayedRemovalByOutput = new ArrayList<>(); + private static final List delayedRemovalByRecipe = new ArrayList<>(); + + public static Collection sNativeRecipeClasses = new HashSet<>(), sSpecialRecipeClasses = new HashSet<>(); + public static GTHashSet sNonReplaceableItems = new GTHashSet<>(); + public static Object sBoxableWrapper = new GTIBoxableWrapper(); + public static Collection sBoxableItems = new ArrayList<>(); + private static final Map emptyRecipeMap = new HashMap<>(); + private static Set recyclerWhitelist; + private static Set recyclerBlacklist; + + private static boolean sBufferCraftingRecipes = true; + public static List sSingleNonBlockDamagableRecipeList_list = new ArrayList<>(100); + private static final boolean sSingleNonBlockDamagableRecipeList_create = true; + private static final ItemStack sMt1 = new ItemStack(Blocks.dirt, 1, 0), sMt2 = new ItemStack(Blocks.dirt, 1, 0); + private static final String s_H = "h", s_F = "f", s_I = "I", s_P = "P", s_R = "R"; + private static final ItemStack[][] sShapes1 = new ItemStack[][] { + { sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1, null }, + { sMt1, null, sMt1, sMt1, null, sMt1, sMt1, sMt1, sMt1 }, + { null, sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1 }, + { sMt1, sMt1, sMt1, sMt1, null, sMt1, null, null, null }, + { sMt1, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1 }, + { sMt1, sMt1, sMt1, sMt1, null, sMt1, sMt1, null, sMt1 }, + { null, null, null, sMt1, null, sMt1, sMt1, null, sMt1 }, + { null, sMt1, null, null, sMt1, null, null, sMt2, null }, + { sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2, null }, + { null, sMt1, null, null, sMt2, null, null, sMt2, null }, + { sMt1, sMt1, null, sMt1, sMt2, null, null, sMt2, null }, + { null, sMt1, sMt1, null, sMt2, sMt1, null, sMt2, null }, + { sMt1, sMt1, null, null, sMt2, null, null, sMt2, null }, + { null, sMt1, sMt1, null, sMt2, null, null, sMt2, null }, + { null, sMt1, null, sMt1, null, null, null, sMt1, sMt2 }, + { null, sMt1, null, null, null, sMt1, sMt2, sMt1, null }, + { null, sMt1, null, sMt1, null, sMt1, null, null, sMt2 }, + { null, sMt1, null, sMt1, null, sMt1, sMt2, null, null }, + { null, sMt2, null, null, sMt1, null, null, sMt1, null }, + { null, sMt2, null, null, sMt2, null, sMt1, sMt1, sMt1 }, + { null, sMt2, null, null, sMt2, null, null, sMt1, null }, + { null, sMt2, null, sMt1, sMt2, null, sMt1, sMt1, null }, + { null, sMt2, null, null, sMt2, sMt1, null, sMt1, sMt1 }, + { null, sMt2, null, null, sMt2, null, sMt1, sMt1, null }, + { sMt1, null, null, null, sMt2, null, null, null, sMt2 }, + { null, null, sMt1, null, sMt2, null, sMt2, null, null }, + { sMt1, null, null, null, sMt2, null, null, null, null }, + { null, null, sMt1, null, sMt2, null, null, null, null }, + { sMt1, sMt2, null, null, null, null, null, null, null }, + { sMt2, sMt1, null, null, null, null, null, null, null }, + { sMt1, null, null, sMt2, null, null, null, null, null }, + { sMt2, null, null, sMt1, null, null, null, null, null }, + { sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, null, sMt2, null }, + { sMt1, sMt1, null, sMt1, sMt1, sMt2, sMt1, sMt1, null }, + { null, sMt1, sMt1, sMt2, sMt1, sMt1, null, sMt1, sMt1 }, + { null, sMt2, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1 }, + { sMt1, sMt1, sMt1, sMt1, sMt2, sMt1, null, sMt2, null }, + { sMt1, sMt1, null, sMt1, sMt2, sMt2, sMt1, sMt1, null }, + { null, sMt1, sMt1, sMt2, sMt2, sMt1, null, sMt1, sMt1 }, + { null, sMt2, null, sMt1, sMt2, sMt1, sMt1, sMt1, sMt1 }, + { sMt1, null, null, null, sMt1, null, null, null, null }, + { null, sMt1, null, sMt1, null, null, null, null, null }, + { sMt1, sMt1, null, sMt2, null, sMt1, sMt2, null, null }, + { null, sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2 } }; + public static List sSingleNonBlockDamagableRecipeList_validsShapes1 = new ArrayList<>(44); + public static boolean sSingleNonBlockDamagableRecipeList_validsShapes1_update = false; + public static List sSingleNonBlockDamagableRecipeList_warntOutput = new ArrayList<>(50); + public static List sVanillaRecipeList_warntOutput = new ArrayList<>(50); + public static final List sSingleNonBlockDamagableRecipeList_verified = new ArrayList<>(1000); + public static List sAnySteamFluidIDs = new ArrayList<>(); + public static List sSuperHeatedSteamFluidIDs = new ArrayList<>(); + + static { + sNativeRecipeClasses.add(ShapedRecipes.class.getName()); + sNativeRecipeClasses.add(ShapedOreRecipe.class.getName()); + sNativeRecipeClasses.add(GTShapedRecipe.class.getName()); + sNativeRecipeClasses.add(ShapelessRecipes.class.getName()); + sNativeRecipeClasses.add(ShapelessOreRecipe.class.getName()); + sNativeRecipeClasses.add(GTShapelessRecipe.class.getName()); + sNativeRecipeClasses.add(ic2.core.AdvRecipe.class.getName()); + sNativeRecipeClasses.add(ic2.core.AdvShapelessRecipe.class.getName()); + sNativeRecipeClasses.add("appeng.recipes.game.ShapedRecipe"); + sNativeRecipeClasses.add("appeng.recipes.game.ShapelessRecipe"); + sNativeRecipeClasses.add("forestry.core.utils.ShapedRecipeCustom"); + + // Recipe Classes, which should never be removed. + sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipeFireworks.class.getName()); + sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipesArmorDyes.class.getName()); + sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipeBookCloning.class.getName()); + sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipesMapCloning.class.getName()); + sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipesMapExtending.class.getName()); + sSpecialRecipeClasses.add("jds.bibliocraft.BiblioSpecialRecipes"); + sSpecialRecipeClasses.add("dan200.qcraft.shared.EntangledQBlockRecipe"); + sSpecialRecipeClasses.add("dan200.qcraft.shared.EntangledQuantumComputerRecipe"); + sSpecialRecipeClasses.add("dan200.qcraft.shared.QBlockRecipe"); + sSpecialRecipeClasses.add("appeng.recipes.game.FacadeRecipe"); + sSpecialRecipeClasses.add("appeng.recipes.game.DisassembleRecipe"); + sSpecialRecipeClasses.add("mods.railcraft.common.carts.LocomotivePaintingRecipe"); + sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.RotorRepairRecipe"); + sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.RoutingTableCopyRecipe"); + sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.RoutingTicketCopyRecipe"); + sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.TankCartFilterRecipe"); + sSpecialRecipeClasses.add("mods.railcraft.common.emblems.LocomotiveEmblemRecipe"); + sSpecialRecipeClasses.add("mods.railcraft.common.emblems.EmblemPostColorRecipe"); + sSpecialRecipeClasses.add("mods.railcraft.common.emblems.EmblemPostEmblemRecipe"); + sSpecialRecipeClasses.add("mods.immibis.redlogic.interaction.RecipeDyeLumarButton"); + sSpecialRecipeClasses.add("thaumcraft.common.items.armor.RecipesRobeArmorDyes"); + sSpecialRecipeClasses.add("thaumcraft.common.items.armor.RecipesVoidRobeArmorDyes"); + sSpecialRecipeClasses.add("thaumcraft.common.lib.crafting.ShapelessNBTOreRecipe"); + sSpecialRecipeClasses.add("twilightforest.item.TFMapCloningRecipe"); + sSpecialRecipeClasses.add("forestry.lepidopterology.MatingRecipe"); + sSpecialRecipeClasses.add("micdoodle8.mods.galacticraft.planets.asteroids.recipe.CanisterRecipes"); + sSpecialRecipeClasses.add("shedar.mods.ic2.nuclearcontrol.StorageArrayRecipe"); + } + + /** + * Returns if that Liquid is Water or Distilled Water + */ + public static boolean isWater(FluidStack aFluid) { + if (aFluid == null) return false; + return aFluid.isFluidEqual(getWater(1)) || aFluid.isFluidEqual(getDistilledWater(1)); + } + + /** + * Returns a Liquid Stack with given amount of Water. + */ + public static FluidStack getWater(long aAmount) { + return FluidRegistry.getFluidStack("water", (int) aAmount); + } + + /** + * Returns a Liquid Stack with given amount of distilled Water. + */ + public static FluidStack getDistilledWater(long aAmount) { + FluidStack tFluid = FluidRegistry.getFluidStack("ic2distilledwater", (int) aAmount); + if (tFluid == null) tFluid = getWater(aAmount); + return tFluid; + } + + /** + * Returns if that Liquid is Lava + */ + public static boolean isLava(FluidStack aFluid) { + if (aFluid == null) return false; + return aFluid.isFluidEqual(getLava(1)); + } + + /** + * Returns a Liquid Stack with given amount of Lava. + */ + public static FluidStack getLava(long aAmount) { + return FluidRegistry.getFluidStack("lava", (int) aAmount); + } + + /** + * Returns if that Liquid is Steam + */ + public static boolean isSteam(FluidStack aFluid) { + if (aFluid == null) return false; + return aFluid.isFluidEqual(getSteam(1)); + } + + /** + * Returns if that Liquid is Any Steam (including other mods) + */ + public static boolean isAnySteam(FluidStack aFluid) { + return (aFluid != null && (isSteam(aFluid) || sAnySteamFluidIDs.contains(aFluid.getFluidID()))); + } + + /** + * Returns if that Liquid is Super Heated Steam (including other mods) + */ + public static boolean isSuperHeatedSteam(FluidStack aFluid) { + return (aFluid != null && sSuperHeatedSteamFluidIDs.contains(aFluid.getFluidID())); + } + + /** + * Returns a Liquid Stack with given amount of Steam. + */ + public static FluidStack getSteam(long aAmount) { + return FluidRegistry.getFluidStack("steam", (int) aAmount); + } + + /** + * Returns if that Liquid is Milk + */ + public static boolean isMilk(FluidStack aFluid) { + if (aFluid == null) return false; + return aFluid.isFluidEqual(getMilk(1)); + } + + /** + * Returns a Liquid Stack with given amount of Milk. + */ + public static FluidStack getMilk(long aAmount) { + return FluidRegistry.getFluidStack("milk", (int) aAmount); + } + + public static ItemStack getEmptyCell(long aAmount) { + return ItemList.Cell_Empty.get(aAmount); + } + + public static ItemStack getAirCell(long aAmount) { + return ItemList.Cell_Air.get(aAmount); + } + + public static ItemStack getWaterCell(long aAmount) { + return ItemList.Cell_Water.get(aAmount); + } + + public static ItemStack getLavaCell(long aAmount) { + return ItemList.Cell_Lava.get(aAmount); + } + + /** + * @param aValue the Value of this Stack, when burning inside a Furnace (200 = 1 Burn Process = 500 EU, max = 32767 + * (that is 81917.5 EU)), limited to Short because the vanilla Furnace otherwise can't handle it + * properly, stupid Mojang... + */ + public static ItemStack setFuelValue(ItemStack aStack, short aValue) { + aStack.setTagCompound(GTUtility.getNBTContainingShort(aStack.getTagCompound(), "GT.ItemFuelValue", aValue)); + return aStack; + } + + /** + * @return the Value of this Stack, when burning inside a Furnace (200 = 1 Burn Process = 500 EU, max = 32767 (that + * is 81917.5 EU)), limited to Short because the vanilla Furnace otherwise can't handle it properly, stupid + * Mojang... + */ + public static int getFuelValue(ItemStack aStack) { + return TileEntityFurnace.getItemBurnTime(aStack); + } + + /** + * Gets an Item from IndustrialCraft, and returns a Replacement Item if not possible + */ + public static ItemStack getIC2Item(String aItem, long aAmount, ItemStack aReplacement) { + if (GTUtility.isStringInvalid(aItem) || !GregTechAPI.sPreloadStarted) return null; + // if (D1) GTLog.out.println("Requested the Item '" + aItem + "' from the IC2-API"); + if (!sIC2ItemMap.containsKey(aItem)) try { + ItemStack tStack = IC2Items.getItem(aItem); + sIC2ItemMap.put(aItem, tStack); + if (tStack == null && D1) GTLog.err.println(aItem + " is not found in the IC2 Items!"); + } catch (Throwable e) { + /* Do nothing */ + } + return GTUtility.copyAmount(aAmount, sIC2ItemMap.get(aItem), aReplacement); + } + + /** + * Gets an Item from IndustrialCraft, but the Damage Value can be specified, and returns a Replacement Item with the + * same Damage if not possible + */ + public static ItemStack getIC2Item(String aItem, long aAmount, int aMeta, ItemStack aReplacement) { + ItemStack rStack = getIC2Item(aItem, aAmount, aReplacement); + if (rStack == null) return null; + Items.feather.setDamage(rStack, aMeta); + return rStack; + } + + /** + * Gets an Item from IndustrialCraft, but the Damage Value can be specified + */ + public static ItemStack getIC2Item(String aItem, long aAmount, int aMeta) { + return getIC2Item(aItem, aAmount, aMeta, null); + } + + /** + * Gets an Item from IndustrialCraft + */ + public static ItemStack getIC2Item(String aItem, long aAmount) { + return getIC2Item(aItem, aAmount, null); + } + + /** + * Gets an Item from the specified mod + */ + public static ItemStack getModItem(String aModID, String aItem, long aAmount) { + return getModItem(aModID, aItem, aAmount, null); + } + + /** + * Gets an Item from the specified mod, and returns a Replacement Item if not possible + */ + public static ItemStack getModItem(String aModID, String aItem, long aAmount, ItemStack aReplacement) { + ItemStack result; + if (GTUtility.isStringInvalid(aItem) || !GregTechAPI.sPreloadStarted) { + result = null; + } else { + result = GTUtility + .copyAmount(aAmount, GameRegistry.findItemStack(aModID, aItem, (int) aAmount), aReplacement); + } + + if (result == null) { + String reason; + if (GTUtility.isStringInvalid(aItem)) { + reason = "the name of the item is an invalid string"; + } else if (!GregTechAPI.sPreloadStarted) { + reason = "the GT5U preloading phase has not yet started"; + } else { + reason = "the item was not found in the game registry"; + } + String log_message = "getModItem call: object \"" + aItem + + "\" with mod id \"" + + aModID + + "\" has returned null because " + + reason; + GTLog.out.println(log_message); + new Exception().printStackTrace(GTLog.out); + } + return result; + } + + /** + * Gets an Item from the specified mod, but the Damage Value can be specified + */ + public static ItemStack getModItem(String aModID, String aItem, long aAmount, int aMeta) { + ItemStack rStack = getModItem(aModID, aItem, aAmount); + if (rStack == null) return null; + Items.feather.setDamage(rStack, aMeta); + return rStack; + } + + /** + * Gets an Item from the specified mod, but the Damage Value can be specified, and returns a Replacement Item with + * the same Damage if not possible + */ + public static ItemStack getModItem(String aModID, String aItem, long aAmount, int aMeta, ItemStack aReplacement) { + ItemStack rStack = getModItem(aModID, aItem, aAmount, aReplacement); + if (rStack == null) return null; + Items.feather.setDamage(rStack, aMeta); + return rStack; + } + + /** + * OUT OF ORDER + */ + @Deprecated + public static boolean getModeKeyDown(EntityPlayer aPlayer) { + return false; + } + + /** + * OUT OF ORDER + */ + @Deprecated + public static boolean getBoostKeyDown(EntityPlayer aPlayer) { + return false; + } + + /** + * OUT OF ORDER + */ + @Deprecated + public static boolean getJumpKeyDown(EntityPlayer aPlayer) { + return false; + } + + /** + * Adds a Valuable Ore to the Miner + */ + public static boolean addValuableOre(Block aBlock, int aMeta, int aValue) { + if (aValue <= 0) return false; + try { + Class.forName("ic2.core.IC2") + .getMethod("addValuableOre", IRecipeInput.class, int.class) + .invoke(null, new RecipeInputItemStack(new ItemStack(aBlock, 1, aMeta)), aValue); + } catch (Throwable e) { + /* Do nothing */ + } + return true; + } + + /** + * Adds a Scrapbox Drop. Fails at April first for the "suddenly Hoes"-Feature of IC2 + */ + public static boolean addScrapboxDrop(float aChance, ItemStack aOutput) { + aOutput = GTOreDictUnificator.get(true, aOutput); + if (aOutput == null || aChance <= 0) return false; + aOutput.stackSize = 1; + if (GTConfig.troll && !GTUtility.areStacksEqual(aOutput, new ItemStack(Items.wooden_hoe, 1, 0))) return false; + try { + GTUtility.callMethod( + GTUtility.getFieldContent("ic2.api.recipe.Recipes", "scrapboxDrops", true, true), + "addDrop", + true, + false, + true, + GTUtility.copyOrNull(aOutput), + aChance); + GTUtility.callMethod( + GTUtility.getFieldContent("ic2.api.recipe.Recipes", "scrapboxDrops", true, true), + "addRecipe", + true, + true, + false, + GTUtility.copyOrNull(aOutput), + aChance); + } catch (Throwable e) { + /* Do nothing */ + } + return true; + } + + /** + * Adds an Item to the Recycler Blacklist + */ + public static boolean addToRecyclerBlackList(ItemStack aRecycledStack) { + if (aRecycledStack == null) return false; + try { + ic2.api.recipe.Recipes.recyclerBlacklist.add(new RecipeInputItemStack(aRecycledStack)); + } catch (Throwable e) { + /* Do nothing */ + } + return true; + } + + /** + * Just simple Furnace smelting. Unbelievable how Minecraft fails at making a simple ItemStack->ItemStack mapping... + */ + public static boolean addSmeltingRecipe(ItemStack aInput, ItemStack aOutput) { + aOutput = GTOreDictUnificator.get(true, aOutput); + if (aInput == null || aOutput == null) return false; + FurnaceRecipes.smelting() + .func_151394_a(aInput, GTUtility.copyOrNull(aOutput), 0.0F); + return true; + } + + /** + * Adds to Furnace AND Alloy Smelter + */ + public static boolean addSmeltingAndAlloySmeltingRecipe(ItemStack aInput, ItemStack aOutput, boolean hidden) { + if (aInput == null || aOutput == null) { + return false; + } + boolean temp = aInput.stackSize == 1 && addSmeltingRecipe(aInput, aOutput); + ItemStack input2 = OrePrefixes.ingot.contains(aOutput) ? ItemList.Shape_Mold_Ingot.get(0) + : OrePrefixes.block.contains(aOutput) ? ItemList.Shape_Mold_Block.get(0) + : OrePrefixes.nugget.contains(aOutput) ? ItemList.Shape_Mold_Nugget.get(0) : null; + if (Materials.Graphite.contains(aInput)) { + return false; + } + if ((input2 == null) && ((OrePrefixes.ingot.contains(aInput)) || (OrePrefixes.dust.contains(aInput)) + || (OrePrefixes.gem.contains(aInput)))) { + return false; + } + GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder(); + if (input2 == null) { + recipeBuilder.itemInputs(aInput); + } else { + recipeBuilder.itemInputs(aInput, input2); + } + recipeBuilder.itemOutputs(aOutput) + .duration(6 * SECONDS + 10 * TICKS) + .eut(3) + .recipeCategory(RecipeCategories.alloySmelterRecycling); + if (hidden) { + recipeBuilder.hidden(); + } + recipeBuilder.addTo(alloySmelterRecipes); + return true; + } + + /** + * Removes IC2 recipes. + */ + public static void removeAllIC2Recipes() { + getMaceratorRecipeList().entrySet() + .clear(); + getCompressorRecipeList().entrySet() + .clear(); + getExtractorRecipeList().entrySet() + .clear(); + getOreWashingRecipeList().entrySet() + .clear(); + getThermalCentrifugeRecipeList().entrySet() + .clear(); + } + + /** + * Adds GT versions of the IC2 recipes from the supplied IC2RecipeList. Deprecated because all IC2 recipes + * have been manually added to GT. + */ + @Deprecated + public static void addIC2RecipesToGT(Map aIC2RecipeList, RecipeMap aGTRecipeMap, + boolean aAddGTRecipe, boolean aRemoveIC2Recipe, boolean aExcludeGTIC2Items) { + Map aRecipesToRemove = new HashMap<>(); + for (Entry iRecipeInputRecipeOutputEntry : aIC2RecipeList.entrySet()) { + if (iRecipeInputRecipeOutputEntry.getValue().items.isEmpty()) { + continue; + } + + for (ItemStack tStack : (iRecipeInputRecipeOutputEntry.getKey()).getInputs()) { + if (!GTUtility.isStackValid(tStack)) { + continue; + } + + if (aAddGTRecipe) { + try { + if (aExcludeGTIC2Items && ((tStack.getUnlocalizedName() + .contains("gt.metaitem.01") + || tStack.getUnlocalizedName() + .contains("gt.blockores") + || tStack.getUnlocalizedName() + .contains("ic2.itemCrushed") + || tStack.getUnlocalizedName() + .contains("ic2.itemPurifiedCrushed")))) + continue; + switch (aGTRecipeMap.unlocalizedName) { + case "gt.recipe.macerator", "gt.recipe.extractor", "gt.recipe.compressor" -> GTValues.RA + .stdBuilder() + .itemInputs( + GTUtility.copyAmount( + iRecipeInputRecipeOutputEntry.getKey() + .getAmount(), + tStack)) + .itemOutputs(iRecipeInputRecipeOutputEntry.getValue().items.toArray(new ItemStack[0])) + .duration(15 * SECONDS) + .eut(2) + .addTo(aGTRecipeMap); + case "gt.recipe.thermalcentrifuge" -> GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.copyAmount( + iRecipeInputRecipeOutputEntry.getKey() + .getAmount(), + tStack)) + .itemOutputs(iRecipeInputRecipeOutputEntry.getValue().items.toArray(new ItemStack[0])) + .duration(25 * SECONDS) + .eut(48) + .addTo(aGTRecipeMap); + } + } catch (Exception e) { + e.printStackTrace(GTLog.err); + } + } + if (aRemoveIC2Recipe) { + aRecipesToRemove.put(tStack, iRecipeInputRecipeOutputEntry.getValue().items.get(0)); + } + + } + + } + GTUtility.bulkRemoveSimpleIC2MachineRecipe(aRecipesToRemove, aIC2RecipeList); + } + + public static Map getExtractorRecipeList() { + try { + return ic2.api.recipe.Recipes.extractor.getRecipes(); + } catch (Throwable e) { + /* Do nothing */ + } + return emptyRecipeMap; + } + + public static Map getCompressorRecipeList() { + try { + return ic2.api.recipe.Recipes.compressor.getRecipes(); + } catch (Throwable e) { + /* Do nothing */ + } + return emptyRecipeMap; + } + + public static Map getMaceratorRecipeList() { + try { + return ic2.api.recipe.Recipes.macerator.getRecipes(); + } catch (Throwable e) { + /* Do nothing */ + } + return emptyRecipeMap; + } + + public static Map getThermalCentrifugeRecipeList() { + try { + return ic2.api.recipe.Recipes.centrifuge.getRecipes(); + } catch (Throwable e) { + /* Do nothing */ + } + return emptyRecipeMap; + } + + public static Map getOreWashingRecipeList() { + try { + return ic2.api.recipe.Recipes.oreWashing.getRecipes(); + } catch (Throwable e) { + /* Do nothing */ + } + return emptyRecipeMap; + } + + /** + * IC2-OreWasher Recipe. Overloads old Recipes automatically + */ + @Deprecated + public static boolean addOreWasherRecipe(ItemStack aInput, int[] aChances, int aWaterAmount, Object... aOutput) { + if (aInput == null || aOutput == null || aOutput.length == 0 || aOutput[0] == null) return false; + RA.stdBuilder() + .itemInputs(aInput) + .itemOutputs((ItemStack) aOutput[0], (ItemStack) aOutput[1], (ItemStack) aOutput[2]) + .outputChances(aChances) + .fluidInputs(GTModHandler.getWater(aWaterAmount)) + .duration(25 * SECONDS) + .eut(16) + .addTo(oreWasherRecipes); + + RA.stdBuilder() + .itemInputs(aInput) + .itemOutputs((ItemStack) aOutput[0], (ItemStack) aOutput[1], (ItemStack) aOutput[2]) + .outputChances(aChances) + .fluidInputs(GTModHandler.getDistilledWater(aWaterAmount / 5)) + .duration(15 * SECONDS) + .eut(16) + .addTo(oreWasherRecipes); + return true; + } + + public static void stopBufferingCraftingRecipes() { + sBufferCraftingRecipes = false; + + bulkRemoveRecipeByOutput(delayedRemovalByOutput); + bulkRemoveByRecipe(delayedRemovalByRecipe); + sBufferRecipeList.forEach(GameRegistry::addRecipe); + + delayedRemovalByOutput.clear(); + delayedRemovalByRecipe.clear(); + sBufferRecipeList.clear(); + } + + /** + * Shapeless Crafting Recipes. Deletes conflicting Recipes too. + */ + public static boolean addCraftingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, + int[] aEnchantmentLevelsAdded, Object[] aRecipe) { + return addCraftingRecipe( + aResult, + aEnchantmentsAdded, + aEnchantmentLevelsAdded, + false, + true, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + true, + aRecipe); + } + + /** + * Regular Crafting Recipes. Deletes conflicting Recipes too. + *

+ * You can insert instances of IItemContainer into the Recipe Input Array directly without having to call "get(1)" + * on them. + *

+ * Enums are automatically getting their "name()"-Method called in order to deliver an OreDict String. + *

+ * Lowercase Letters are reserved for Tools. They are as follows: + *

+ * 'b' ToolDictNames.craftingToolBlade 'c' ToolDictNames.craftingToolCrowbar, 'd' + * ToolDictNames.craftingToolScrewdriver, 'f' ToolDictNames.craftingToolFile, 'h' + * ToolDictNames.craftingToolHardHammer, 'i' ToolDictNames.craftingToolSolderingIron, 'j' + * ToolDictNames.craftingToolSolderingMetal, 'k' ToolDictNames.craftingToolKnive 'm' + * ToolDictNames.craftingToolMortar, 'p' ToolDictNames.craftingToolDrawplate, 'r' + * ToolDictNames.craftingToolSoftHammer, 's' ToolDictNames.craftingToolSaw, 'w' ToolDictNames.craftingToolWrench, + * 'x' ToolDictNames.craftingToolWireCutter, + */ + public static boolean addCraftingRecipe(ItemStack aResult, Object[] aRecipe) { + return addCraftingRecipe(aResult, 0, aRecipe); + } + + /** + * Regular Crafting Recipes. Deletes conflicting Recipes too. + *

+ * You can insert instances of IItemContainer into the Recipe Input Array directly without having to call "get(1)" + * on them. + *

+ * Enums are automatically getting their "name()"-Method called in order to deliver an OreDict String. + *

+ * Lowercase Letters are reserved for Tools. They are as follows: + *

+ * 'b' ToolDictNames.craftingToolBlade 'c' ToolDictNames.craftingToolCrowbar, 'd' + * ToolDictNames.craftingToolScrewdriver, 'f' ToolDictNames.craftingToolFile, 'h' + * ToolDictNames.craftingToolHardHammer, 'i' ToolDictNames.craftingToolSolderingIron, 'j' + * ToolDictNames.craftingToolSolderingMetal, 'k' ToolDictNames.craftingToolKnive 'm' + * ToolDictNames.craftingToolMortar, 'p' ToolDictNames.craftingToolDrawplate, 'r' + * ToolDictNames.craftingToolSoftHammer, 's' ToolDictNames.craftingToolSaw, 'w' ToolDictNames.craftingToolWrench, + * 'x' ToolDictNames.craftingToolWireCutter, + */ + public static boolean addCraftingRecipe(ItemStack aResult, long aBitMask, Object[] aRecipe) { + return addCraftingRecipe( + aResult, + new Enchantment[0], + new int[0], + (aBitMask & RecipeBits.MIRRORED) != 0, + (aBitMask & RecipeBits.BUFFERED) != 0, + (aBitMask & RecipeBits.KEEPNBT) != 0, + (aBitMask & RecipeBits.DISMANTLEABLE) != 0, + (aBitMask & RecipeBits.NOT_REMOVABLE) == 0, + (aBitMask & RecipeBits.REVERSIBLE) != 0, + (aBitMask & RecipeBits.DELETE_ALL_OTHER_RECIPES) != 0, + (aBitMask & RecipeBits.DELETE_ALL_OTHER_RECIPES_IF_SAME_NBT) != 0, + (aBitMask & RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES) != 0, + (aBitMask & RecipeBits.DELETE_ALL_OTHER_NATIVE_RECIPES) != 0, + (aBitMask & RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS) == 0, + (aBitMask & RecipeBits.ONLY_ADD_IF_THERE_IS_ANOTHER_RECIPE_FOR_IT) != 0, + (aBitMask & RecipeBits.ONLY_ADD_IF_RESULT_IS_NOT_NULL) != 0, + aRecipe); + } + + public static boolean addMachineCraftingRecipe(ItemStack aResult, long aBitMask, Object[] aRecipe, + int machineTier) { + if (aRecipe != null) { + for (int i = 3; i < aRecipe.length; i++) { + if (!(aRecipe[i] instanceof MTEBasicMachineWithRecipe.X)) continue; + + // spotless:off + aRecipe[i] = switch ((MTEBasicMachineWithRecipe.X) aRecipe[i]) { + case CIRCUIT -> Tier.ELECTRIC[machineTier].mManagingObject; + case BETTER_CIRCUIT -> Tier.ELECTRIC[machineTier].mBetterManagingObject; + case HULL -> Tier.ELECTRIC[machineTier].mHullObject; + case WIRE -> Tier.ELECTRIC[machineTier].mConductingObject; + case WIRE4 -> Tier.ELECTRIC[machineTier].mLargerConductingObject; + case STICK_DISTILLATION -> OrePrefixes.stick.get(Materials.Blaze); + + case GLASS -> switch (machineTier) { + case 0, 1, 2, 3 -> new ItemStack(Blocks.glass, 1, W); + case 4, 5, 6, 7, 8 -> "blockGlass" + VN[machineTier]; + default -> "blockGlass" + VN[8]; + }; + + case PLATE -> switch (machineTier) { + case 0, 1 -> OrePrefixes.plate.get(Materials.Steel); + case 2 -> OrePrefixes.plate.get(Materials.Aluminium); + case 3 -> OrePrefixes.plate.get(Materials.StainlessSteel); + case 4 -> OrePrefixes.plate.get(Materials.Titanium); + case 5 -> OrePrefixes.plate.get(Materials.TungstenSteel); + case 6 -> OrePrefixes.plate.get(Materials.HSSG); + case 7 -> OrePrefixes.plate.get(Materials.HSSE); + default -> OrePrefixes.plate.get(Materials.Neutronium); + }; + + case PIPE -> switch (machineTier) { + case 0, 1 -> OrePrefixes.pipeMedium.get(Materials.Bronze); + case 2 -> OrePrefixes.pipeMedium.get(Materials.Steel); + case 3 -> OrePrefixes.pipeMedium.get(Materials.StainlessSteel); + case 4 -> OrePrefixes.pipeMedium.get(Materials.Titanium); + case 5 -> OrePrefixes.pipeMedium.get(Materials.TungstenSteel); + case 6 -> OrePrefixes.pipeSmall.get(Materials.Ultimate); + case 7 -> OrePrefixes.pipeMedium.get(Materials.Ultimate); + case 8 -> OrePrefixes.pipeLarge.get(Materials.Ultimate); + default -> OrePrefixes.pipeHuge.get(Materials.Ultimate); + }; + + case COIL_HEATING -> switch (machineTier) { + case 0, 1 -> OrePrefixes.wireGt02.get(Materials.AnyCopper); + case 2 -> OrePrefixes.wireGt02.get(Materials.Cupronickel); + case 3 -> OrePrefixes.wireGt02.get(Materials.Kanthal); + case 4 -> OrePrefixes.wireGt02.get(Materials.Nichrome); + case 5 -> OrePrefixes.wireGt02.get(Materials.TPV); + case 6 -> OrePrefixes.wireGt02.get(Materials.HSSG); + case 7 -> OrePrefixes.wireGt02.get(Materials.Naquadah); + case 8 -> OrePrefixes.wireGt02.get(Materials.NaquadahAlloy); + case 9 -> OrePrefixes.wireGt04.get(Materials.NaquadahAlloy); + default -> OrePrefixes.wireGt08.get(Materials.NaquadahAlloy); + }; + + case COIL_HEATING_DOUBLE -> switch (machineTier) { + case 0, 1 -> OrePrefixes.wireGt04.get(Materials.AnyCopper); + case 2 -> OrePrefixes.wireGt04.get(Materials.Cupronickel); + case 3 -> OrePrefixes.wireGt04.get(Materials.Kanthal); + case 4 -> OrePrefixes.wireGt04.get(Materials.Nichrome); + case 5 -> OrePrefixes.wireGt04.get(Materials.TPV); + case 6 -> OrePrefixes.wireGt04.get(Materials.HSSG); + case 7 -> OrePrefixes.wireGt04.get(Materials.Naquadah); + case 8 -> OrePrefixes.wireGt04.get(Materials.NaquadahAlloy); + case 9 -> OrePrefixes.wireGt08.get(Materials.NaquadahAlloy); + default -> OrePrefixes.wireGt16.get(Materials.NaquadahAlloy); + }; + + case STICK_MAGNETIC -> switch (machineTier) { + case 0, 1 -> OrePrefixes.stick.get(Materials.IronMagnetic); + case 2, 3 -> OrePrefixes.stick.get(Materials.SteelMagnetic); + case 4, 5 -> OrePrefixes.stick.get(Materials.NeodymiumMagnetic); + case 6, 7, 8, 9 -> OrePrefixes.stick.get(Materials.SamariumMagnetic); + default -> OrePrefixes.stick.get(Materials.TengamAttuned); + }; + + case STICK_ELECTROMAGNETIC -> switch (machineTier) { + case 0, 1 -> OrePrefixes.stick.get(Materials.AnyIron); + case 2, 3 -> OrePrefixes.stick.get(Materials.Steel); + case 4 -> OrePrefixes.stick.get(Materials.Neodymium); + default -> OrePrefixes.stick.get(Materials.VanadiumGallium); + }; + + case COIL_ELECTRIC -> switch (machineTier) { + case 0 -> OrePrefixes.wireGt01.get(Materials.Lead); + case 1 -> OrePrefixes.wireGt02.get(Materials.Tin); + case 2 -> OrePrefixes.wireGt02.get(Materials.AnyCopper); + case 3 -> OrePrefixes.wireGt04.get(Materials.AnyCopper); + case 4 -> OrePrefixes.wireGt08.get(Materials.AnnealedCopper); + case 5 -> OrePrefixes.wireGt16.get(Materials.AnnealedCopper); + case 6 -> OrePrefixes.wireGt04.get(Materials.YttriumBariumCuprate); + case 7 -> OrePrefixes.wireGt08.get(Materials.Iridium); + default -> OrePrefixes.wireGt16.get(Materials.Osmium); + }; + + case ROBOT_ARM -> switch (machineTier) { + case 0, 1 -> ItemList.Robot_Arm_LV; + case 2 -> ItemList.Robot_Arm_MV; + case 3 -> ItemList.Robot_Arm_HV; + case 4 -> ItemList.Robot_Arm_EV; + case 5 -> ItemList.Robot_Arm_IV; + case 6 -> ItemList.Robot_Arm_LuV; + case 7 -> ItemList.Robot_Arm_ZPM; + case 8 -> ItemList.Robot_Arm_UV; + case 9 -> ItemList.Robot_Arm_UHV; + case 10 -> ItemList.Robot_Arm_UEV; + case 11 -> ItemList.Robot_Arm_UIV; + case 12 -> ItemList.Robot_Arm_UMV; + case 13 -> ItemList.Robot_Arm_UXV; + default -> ItemList.Robot_Arm_MAX; + }; + + case PUMP -> switch (machineTier) { + case 0, 1 -> ItemList.Electric_Pump_LV; + case 2 -> ItemList.Electric_Pump_MV; + case 3 -> ItemList.Electric_Pump_HV; + case 4 -> ItemList.Electric_Pump_EV; + case 5 -> ItemList.Electric_Pump_IV; + case 6 -> ItemList.Electric_Pump_LuV; + case 7 -> ItemList.Electric_Pump_ZPM; + case 8 -> ItemList.Electric_Pump_UV; + case 9 -> ItemList.Electric_Pump_UHV; + case 10 -> ItemList.Electric_Pump_UEV; + case 11 -> ItemList.Electric_Pump_UIV; + case 12 -> ItemList.Electric_Pump_UMV; + case 13 -> ItemList.Electric_Pump_UXV; + default -> ItemList.Electric_Pump_MAX; + }; + + case MOTOR -> switch (machineTier) { + case 0, 1 -> ItemList.Electric_Motor_LV; + case 2 -> ItemList.Electric_Motor_MV; + case 3 -> ItemList.Electric_Motor_HV; + case 4 -> ItemList.Electric_Motor_EV; + case 5 -> ItemList.Electric_Motor_IV; + case 6 -> ItemList.Electric_Motor_LuV; + case 7 -> ItemList.Electric_Motor_ZPM; + case 8 -> ItemList.Electric_Motor_UV; + case 9 -> ItemList.Electric_Motor_UHV; + case 10 -> ItemList.Electric_Motor_UEV; + case 11 -> ItemList.Electric_Motor_UIV; + case 12 -> ItemList.Electric_Motor_UMV; + case 13 -> ItemList.Electric_Motor_UXV; + default -> ItemList.Electric_Motor_MAX; + }; + + case PISTON -> switch (machineTier) { + case 0, 1 -> ItemList.Electric_Piston_LV; + case 2 -> ItemList.Electric_Piston_MV; + case 3 -> ItemList.Electric_Piston_HV; + case 4 -> ItemList.Electric_Piston_EV; + case 5 -> ItemList.Electric_Piston_IV; + case 6 -> ItemList.Electric_Piston_LuV; + case 7 -> ItemList.Electric_Piston_ZPM; + case 8 -> ItemList.Electric_Piston_UV; + case 9 -> ItemList.Electric_Piston_UHV; + case 10 -> ItemList.Electric_Piston_UEV; + case 11 -> ItemList.Electric_Piston_UIV; + case 12 -> ItemList.Electric_Piston_UMV; + case 13 -> ItemList.Electric_Piston_UXV; + default -> ItemList.Electric_Piston_MAX; + }; + + case CONVEYOR -> switch (machineTier) { + case 0, 1 -> ItemList.Conveyor_Module_LV; + case 2 -> ItemList.Conveyor_Module_MV; + case 3 -> ItemList.Conveyor_Module_HV; + case 4 -> ItemList.Conveyor_Module_EV; + case 5 -> ItemList.Conveyor_Module_IV; + case 6 -> ItemList.Conveyor_Module_LuV; + case 7 -> ItemList.Conveyor_Module_ZPM; + case 8 -> ItemList.Conveyor_Module_UV; + case 9 -> ItemList.Conveyor_Module_UHV; + case 10 -> ItemList.Conveyor_Module_UEV; + case 11 -> ItemList.Conveyor_Module_UIV; + case 12 -> ItemList.Conveyor_Module_UMV; + case 13 -> ItemList.Conveyor_Module_UXV; + default -> ItemList.Conveyor_Module_MAX; + }; + + case EMITTER -> switch (machineTier) { + case 0, 1 -> ItemList.Emitter_LV; + case 2 -> ItemList.Emitter_MV; + case 3 -> ItemList.Emitter_HV; + case 4 -> ItemList.Emitter_EV; + case 5 -> ItemList.Emitter_IV; + case 6 -> ItemList.Emitter_LuV; + case 7 -> ItemList.Emitter_ZPM; + case 8 -> ItemList.Emitter_UV; + case 9 -> ItemList.Emitter_UHV; + case 10 -> ItemList.Emitter_UEV; + case 11 -> ItemList.Emitter_UIV; + case 12 -> ItemList.Emitter_UMV; + case 13 -> ItemList.Emitter_UXV; + default -> ItemList.Emitter_MAX; + }; + + case SENSOR -> switch (machineTier) { + case 0, 1 -> ItemList.Sensor_LV; + case 2 -> ItemList.Sensor_MV; + case 3 -> ItemList.Sensor_HV; + case 4 -> ItemList.Sensor_EV; + case 5 -> ItemList.Sensor_IV; + case 6 -> ItemList.Sensor_LuV; + case 7 -> ItemList.Sensor_ZPM; + case 8 -> ItemList.Sensor_UV; + case 9 -> ItemList.Sensor_UHV; + case 10 -> ItemList.Sensor_UEV; + case 11 -> ItemList.Sensor_UIV; + case 12 -> ItemList.Sensor_UMV; + case 13 -> ItemList.Sensor_UXV; + default -> ItemList.Sensor_MAX; + }; + + case FIELD_GENERATOR -> switch (machineTier) { + case 0, 1 -> ItemList.Field_Generator_LV; + case 2 -> ItemList.Field_Generator_MV; + case 3 -> ItemList.Field_Generator_HV; + case 4 -> ItemList.Field_Generator_EV; + case 5 -> ItemList.Field_Generator_IV; + case 6 -> ItemList.Field_Generator_LuV; + case 7 -> ItemList.Field_Generator_ZPM; + case 8 -> ItemList.Field_Generator_UV; + case 9 -> ItemList.Field_Generator_UHV; + case 10 -> ItemList.Field_Generator_UEV; + case 11 -> ItemList.Field_Generator_UIV; + case 12 -> ItemList.Field_Generator_UMV; + case 13 -> ItemList.Field_Generator_UXV; + default -> ItemList.Field_Generator_MAX; + }; + + case ROTOR -> switch (machineTier) { + case 0, 1 -> OrePrefixes.rotor.get(Materials.Tin); + case 2 -> OrePrefixes.rotor.get(Materials.Bronze); + case 3 -> OrePrefixes.rotor.get(Materials.Steel); + case 4 -> OrePrefixes.rotor.get(Materials.StainlessSteel); + case 5 -> OrePrefixes.rotor.get(Materials.TungstenSteel); + case 6 -> OrePrefixes.rotor.get(ExternalMaterials.getRhodiumPlatedPalladium()); + case 7 -> OrePrefixes.rotor.get(Materials.Iridium); + default -> OrePrefixes.rotor.get(Materials.Osmium); + }; + + default -> throw new IllegalArgumentException("MISSING TIER MAPPING FOR: " + aRecipe[i] + " AT TIER " + machineTier); + }; + // spotless:on + } + + if (!GTModHandler.addCraftingRecipe( + aResult, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.BUFFERED + | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + aRecipe)) { + throw new IllegalArgumentException("INVALID CRAFTING RECIPE FOR: " + aResult.getDisplayName()); + } + } + return true; + } + + /** + * Internal realisation of the Crafting Recipe adding Process. + */ + private static boolean addCraftingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, + int[] aEnchantmentLevelsAdded, boolean aMirrored, boolean aBuffered, boolean aKeepNBT, boolean aDismantleable, + boolean aRemovable, boolean aReversible, boolean aRemoveAllOthersWithSameOutput, + boolean aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT, boolean aRemoveAllOtherShapedsWithSameOutput, + boolean aRemoveAllOtherNativeRecipes, boolean aCheckForCollisions, + boolean aOnlyAddIfThereIsAnyRecipeOutputtingThis, boolean aOnlyAddIfResultIsNotNull, Object[] aRecipe) { + + aResult = GTOreDictUnificator.get(true, aResult); + if (aOnlyAddIfResultIsNotNull && aResult == null) return false; + if (aResult != null && Items.feather.getDamage(aResult) == W) Items.feather.setDamage(aResult, 0); + if (aRecipe == null || aRecipe.length == 0) return false; + + // The renamed variable clarifies what's happening + // noinspection UnnecessaryLocalVariable + boolean tDoWeCareIfThereWasARecipe = aOnlyAddIfThereIsAnyRecipeOutputtingThis; + boolean tThereWasARecipe = false; + + for (byte i = 0; i < aRecipe.length; i++) { + if (aRecipe[i] instanceof IItemContainer) aRecipe[i] = ((IItemContainer) aRecipe[i]).get(1); + else if (aRecipe[i] instanceof Enum) aRecipe[i] = ((Enum) aRecipe[i]).name(); + else if (!(aRecipe[i] == null || aRecipe[i] instanceof ItemStack + || aRecipe[i] instanceof ItemData + || aRecipe[i] instanceof String + || aRecipe[i] instanceof Character)) aRecipe[i] = aRecipe[i].toString(); + } + + try { + StringBuilder shape = new StringBuilder(E); + int idx = 0; + if (aRecipe[idx] instanceof Boolean) { + throw new IllegalArgumentException(); + } + + ArrayList tRecipeList = new ArrayList<>(Arrays.asList(aRecipe)); + + while (aRecipe[idx] instanceof String) { + StringBuilder s = new StringBuilder((String) aRecipe[idx++]); + shape.append(s); + while (s.length() < 3) s.append(" "); + if (s.length() > 3) throw new IllegalArgumentException(); + + for (char c : s.toString() + .toCharArray()) { + switch (c) { + case 'b' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolBlade.name()); + } + case 'c' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolCrowbar.name()); + } + case 'd' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolScrewdriver.name()); + } + case 'f' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolFile.name()); + } + case 'h' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolHardHammer.name()); + } + case 'i' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolSolderingIron.name()); + } + case 'j' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolSolderingMetal.name()); + } + case 'k' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolKnife.name()); + } + case 'm' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolMortar.name()); + } + case 'p' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolDrawplate.name()); + } + case 'r' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolSoftHammer.name()); + } + case 's' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolSaw.name()); + } + case 'w' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolWrench.name()); + } + case 'x' -> { + tRecipeList.add(c); + tRecipeList.add(ToolDictNames.craftingToolWireCutter.name()); + } + } + } + } + + aRecipe = tRecipeList.toArray(); + + if (aRecipe[idx] instanceof Boolean) { + idx++; + } + Map tItemStackMap = new HashMap<>(); + Map tItemDataMap = new HashMap<>(); + tItemStackMap.put(' ', null); + + boolean tRemoveRecipe = true; + + for (; idx < aRecipe.length; idx += 2) { + if (aRecipe[idx] == null || aRecipe[idx + 1] == null) { + if (D1) { + GTLog.err.println( + "WARNING: Missing Item for shaped Recipe: " + + (aResult == null ? "null" : aResult.getDisplayName())); + for (Object tContent : aRecipe) GTLog.err.println(tContent); + } + return false; + } + Character chr = (Character) aRecipe[idx]; + Object in = aRecipe[idx + 1]; + if (in instanceof ItemStack is) { + tItemStackMap.put(chr, GTUtility.copyOrNull(is)); + tItemDataMap.put(chr, GTOreDictUnificator.getItemData(is)); + } else if (in instanceof ItemData) { + String tString = in.toString(); + switch (tString) { + case "plankWood" -> tItemDataMap.put(chr, new ItemData(Materials.Wood, M)); + case "stoneNetherrack" -> tItemDataMap.put(chr, new ItemData(Materials.Netherrack, M)); + case "stoneObsidian" -> tItemDataMap.put(chr, new ItemData(Materials.Obsidian, M)); + case "stoneEndstone" -> tItemDataMap.put(chr, new ItemData(Materials.Endstone, M)); + default -> tItemDataMap.put(chr, (ItemData) in); + } + ItemStack tStack = GTOreDictUnificator.getFirstOre(in, 1); + if (tStack == null) tRemoveRecipe = false; + else tItemStackMap.put(chr, tStack); + in = aRecipe[idx + 1] = in.toString(); + } else if (in instanceof String) { + if (in.equals(OreDictNames.craftingChest.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Wood, M * 8)); + else if (in.equals(OreDictNames.craftingBook.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Paper, M * 3)); + else if (in.equals(OreDictNames.craftingPiston.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Stone, M * 4, Materials.Wood, M * 3)); + else if (in.equals(OreDictNames.craftingFurnace.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Stone, M * 8)); + else if (in.equals(OreDictNames.craftingIndustrialDiamond.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Diamond, M)); + else if (in.equals(OreDictNames.craftingAnvil.toString())) + tItemDataMap.put(chr, new ItemData(Materials.Iron, M * 10)); + ItemStack tStack = GTOreDictUnificator.getFirstOre(in, 1); + if (tStack == null) tRemoveRecipe = false; + else tItemStackMap.put(chr, tStack); + } else { + throw new IllegalArgumentException(); + } + } + + if (aReversible && aResult != null) { + ItemData[] tData = new ItemData[9]; + int x = -1; + for (char chr : shape.toString() + .toCharArray()) tData[++x] = tItemDataMap.get(chr); + if (GTUtility.arrayContainsNonNull(tData)) + GTOreDictUnificator.addItemData(aResult, new ItemData(tData)); + } + + if (aCheckForCollisions && tRemoveRecipe) { + ItemStack[] tRecipe = new ItemStack[9]; + int x = -1; + for (char chr : shape.toString() + .toCharArray()) { + tRecipe[++x] = tItemStackMap.get(chr); + if (tRecipe[x] != null && Items.feather.getDamage(tRecipe[x]) == W) + Items.feather.setDamage(tRecipe[x], 0); + } + if (tDoWeCareIfThereWasARecipe || !aBuffered) tThereWasARecipe = removeRecipe(tRecipe) != null; + else removeRecipeDelayed(tRecipe); + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + + if (aResult == null || aResult.stackSize <= 0) return false; + + if (aRemoveAllOthersWithSameOutput || aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT + || aRemoveAllOtherShapedsWithSameOutput + || aRemoveAllOtherNativeRecipes) { + if (tDoWeCareIfThereWasARecipe || !aBuffered) tThereWasARecipe = removeRecipeByOutput( + aResult, + !aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT, + aRemoveAllOtherShapedsWithSameOutput, + aRemoveAllOtherNativeRecipes) || tThereWasARecipe; + else removeRecipeByOutputDelayed(aResult); + } + + if (aOnlyAddIfThereIsAnyRecipeOutputtingThis && !tDoWeCareIfThereWasARecipe && !tThereWasARecipe) { + ArrayList tList = (ArrayList) CraftingManager.getInstance() + .getRecipeList(); + int tList_sS = tList.size(); + for (int i = 0; i < tList_sS && !tThereWasARecipe; i++) { + IRecipe tRecipe = tList.get(i); + if (sSpecialRecipeClasses.contains( + tRecipe.getClass() + .getName())) + continue; + if (GTUtility.areStacksEqual(GTOreDictUnificator.get(tRecipe.getRecipeOutput()), aResult, true)) { + tList.remove(i--); + tList_sS = tList.size(); + tThereWasARecipe = true; + } + } + } + + if (Items.feather.getDamage(aResult) == W || Items.feather.getDamage(aResult) < 0) + Items.feather.setDamage(aResult, 0); + + GTUtility.updateItemStack(aResult); + + if (tThereWasARecipe || !aOnlyAddIfThereIsAnyRecipeOutputtingThis) { + if (sBufferCraftingRecipes && aBuffered) sBufferRecipeList.add( + new GTShapedRecipe( + GTUtility.copyOrNull(aResult), + aDismantleable, + aRemovable, + aKeepNBT, + aEnchantmentsAdded, + aEnchantmentLevelsAdded, + aRecipe).setMirrored(aMirrored)); + else GameRegistry.addRecipe( + new GTShapedRecipe( + GTUtility.copyOrNull(aResult), + aDismantleable, + aRemovable, + aKeepNBT, + aEnchantmentsAdded, + aEnchantmentLevelsAdded, + aRecipe).setMirrored(aMirrored)); + } + return true; + } + + /** + * Shapeless Crafting Recipes. Deletes conflicting Recipes too. + */ + public static boolean addShapelessEnchantingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, + int[] aEnchantmentLevelsAdded, Object[] aRecipe) { + return addShapelessCraftingRecipe( + aResult, + aEnchantmentsAdded, + aEnchantmentLevelsAdded, + true, + false, + false, + false, + aRecipe); + } + + /** + * Shapeless Crafting Recipes. Deletes conflicting Recipes too. + */ + public static boolean addShapelessCraftingRecipe(ItemStack aResult, Object[] aRecipe) { + return addShapelessCraftingRecipe( + aResult, + RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | RecipeBits.BUFFERED, + aRecipe); + } + + /** + * Shapeless Crafting Recipes. Deletes conflicting Recipes too. + */ + public static boolean addShapelessCraftingRecipe(ItemStack aResult, long aBitMask, Object[] aRecipe) { + return addShapelessCraftingRecipe( + aResult, + new Enchantment[0], + new int[0], + (aBitMask & RecipeBits.BUFFERED) != 0, + (aBitMask & RecipeBits.KEEPNBT) != 0, + (aBitMask & RecipeBits.DISMANTLEABLE) != 0, + (aBitMask & RecipeBits.NOT_REMOVABLE) == 0, + aRecipe); + } + + /** + * Shapeless Crafting Recipes. Deletes conflicting Recipes too. + */ + private static boolean addShapelessCraftingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, + int[] aEnchantmentLevelsAdded, boolean aBuffered, boolean aKeepNBT, boolean aDismantleable, boolean aRemovable, + Object[] aRecipe) { + aResult = GTOreDictUnificator.get(true, aResult); + if (aRecipe == null || aRecipe.length == 0) return false; + for (byte i = 0; i < aRecipe.length; i++) { + if (aRecipe[i] instanceof IItemContainer) aRecipe[i] = ((IItemContainer) aRecipe[i]).get(1); + else if (aRecipe[i] instanceof Enum) aRecipe[i] = ((Enum) aRecipe[i]).name(); + else if (!(aRecipe[i] == null || aRecipe[i] instanceof ItemStack + || aRecipe[i] instanceof String + || aRecipe[i] instanceof Character)) aRecipe[i] = aRecipe[i].toString(); + } + try { + ItemStack[] tRecipe = new ItemStack[9]; + int i = 0; + for (Object tObject : aRecipe) { + if (tObject == null) { + if (D1) GTLog.err.println( + "WARNING: Missing Item for shapeless Recipe: " + + (aResult == null ? "null" : aResult.getDisplayName())); + for (Object tContent : aRecipe) GTLog.err.println(tContent); + return false; + } + if (tObject instanceof ItemStack) { + tRecipe[i] = (ItemStack) tObject; + } else if (tObject instanceof String) { + tRecipe[i] = GTOreDictUnificator.getFirstOre(tObject, 1); + if (tRecipe[i] == null) break; + } + i++; + } + if (sBufferCraftingRecipes && aBuffered) removeRecipeDelayed(tRecipe); + else removeRecipe(tRecipe); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + + if (aResult == null || aResult.stackSize <= 0) return false; + + if (Items.feather.getDamage(aResult) == W || Items.feather.getDamage(aResult) < 0) + Items.feather.setDamage(aResult, 0); + + GTUtility.updateItemStack(aResult); + + if (sBufferCraftingRecipes && aBuffered) sBufferRecipeList.add( + new GTShapelessRecipe( + GTUtility.copyOrNull(aResult), + aDismantleable, + aRemovable, + aKeepNBT, + aEnchantmentsAdded, + aEnchantmentLevelsAdded, + aRecipe)); + else GameRegistry.addRecipe( + new GTShapelessRecipe( + GTUtility.copyOrNull(aResult), + aDismantleable, + aRemovable, + aKeepNBT, + aEnchantmentsAdded, + aEnchantmentLevelsAdded, + aRecipe)); + return true; + } + + /** + * Removes a Smelting Recipe + */ + public static boolean removeFurnaceSmelting(ItemStack aInput) { + if (aInput != null) { + for (ItemStack tInput : FurnaceRecipes.smelting() + .getSmeltingList() + .keySet()) { + if (GTUtility.isStackValid(tInput) && GTUtility.areStacksEqual(aInput, tInput, true)) { + FurnaceRecipes.smelting() + .getSmeltingList() + .remove(tInput); + return true; + } + } + } + return false; + } + + /** + * Removes all matching Smelting Recipes by output + */ + public static boolean removeFurnaceSmeltingByOutput(ItemStack aOutput) { + if (aOutput != null) { + return FurnaceRecipes.smelting() + .getSmeltingList() + .values() + .removeIf( + tOutput -> GTUtility.isStackValid(tOutput) && GTUtility.areStacksEqual(aOutput, tOutput, true)); + } + return false; + } + + /** + * Removes a Crafting Recipe and gives you the former output of it. + * + * @param aRecipe The content of the Crafting Grid as ItemStackArray with length 9 + * @return the output of the old Recipe or null if there was nothing. + */ + public static ItemStack removeRecipe(ItemStack... aRecipe) { + if (aRecipe == null) return null; + if (Arrays.stream(aRecipe) + .noneMatch(Objects::nonNull)) return null; + + ItemStack rReturn = null; + InventoryCrafting aCrafting = new InventoryCrafting(new Container() { + + @Override + public boolean canInteractWith(EntityPlayer player) { + return false; + } + }, 3, 3); + for (int i = 0; i < aRecipe.length && i < 9; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]); + ArrayList tList = (ArrayList) CraftingManager.getInstance() + .getRecipeList(); + int tList_sS = tList.size(); + try { + for (int i = 0; i < tList_sS; i++) { + for (; i < tList_sS; i++) { + if ((!(tList.get(i) instanceof IGTCraftingRecipe) + || ((IGTCraftingRecipe) tList.get(i)).isRemovable()) && tList.get(i) + .matches(aCrafting, DW)) { + rReturn = tList.get(i) + .getCraftingResult(aCrafting); + if (rReturn != null) tList.remove(i--); + tList_sS = tList.size(); + } + } + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + return rReturn; + } + + public static void removeRecipeDelayed(ItemStack... aRecipe) { + if (!sBufferCraftingRecipes) { + removeRecipe(aRecipe); + return; + } + + if (aRecipe == null) return; + if (Arrays.stream(aRecipe) + .noneMatch(Objects::nonNull)) return; + + InventoryCrafting aCrafting = new InventoryCrafting(new Container() { + + @Override + public boolean canInteractWith(EntityPlayer player) { + return false; + } + }, 3, 3); + for (int i = 0; i < aRecipe.length && i < 9; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]); + delayedRemovalByRecipe.add(aCrafting); + } + + public static void bulkRemoveByRecipe(List toRemove) { + ArrayList tList = (ArrayList) CraftingManager.getInstance() + .getRecipeList(); + GT_FML_LOGGER.info("BulkRemoveByRecipe: tList: " + tList.size() + " toRemove: " + toRemove.size()); + + Set tListToRemove = tList.parallelStream() + .filter(tRecipe -> { + if ((tRecipe instanceof IGTCraftingRecipe) && !((IGTCraftingRecipe) tRecipe).isRemovable()) + return false; + return toRemove.stream() + .anyMatch(aCrafting -> tRecipe.matches(aCrafting, DW)); + }) + .collect(Collectors.toSet()); + + tList.removeIf(tListToRemove::contains); + } + + public static boolean removeRecipeByOutputDelayed(ItemStack aOutput) { + if (sBufferCraftingRecipes) return delayedRemovalByOutput.add(aOutput); + else return removeRecipeByOutput(aOutput); + } + + public static boolean removeRecipeByOutputDelayed(ItemStack aOutput, boolean aIgnoreNBT, + boolean aNotRemoveShapelessRecipes, boolean aOnlyRemoveNativeHandlers) { + if (sBufferCraftingRecipes && (aIgnoreNBT && !aNotRemoveShapelessRecipes && !aOnlyRemoveNativeHandlers)) + // Too lazy to handle deferred versions of the parameters that aren't used very often + return delayedRemovalByOutput.add(aOutput); + else return removeRecipeByOutput(aOutput, aIgnoreNBT, aNotRemoveShapelessRecipes, aOnlyRemoveNativeHandlers); + } + + public static boolean removeRecipeByOutput(ItemStack aOutput) { + return removeRecipeByOutput(aOutput, true, false, false); + } + + /** + * Removes a Crafting Recipe. + * + * @param aOutput The output of the Recipe. + * @return if it has removed at least one Recipe. + */ + public static boolean removeRecipeByOutput(ItemStack aOutput, boolean aIgnoreNBT, + boolean aNotRemoveShapelessRecipes, boolean aOnlyRemoveNativeHandlers) { + if (aOutput == null) return false; + boolean rReturn = false; + final ArrayList tList = (ArrayList) CraftingManager.getInstance() + .getRecipeList(); + aOutput = GTOreDictUnificator.get(aOutput); + int tList_sS = tList.size(); + for (int i = 0; i < tList_sS; i++) { + final IRecipe tRecipe = tList.get(i); + if (aNotRemoveShapelessRecipes + && (tRecipe instanceof ShapelessRecipes || tRecipe instanceof ShapelessOreRecipe)) continue; + if (aOnlyRemoveNativeHandlers) { + if (!sNativeRecipeClasses.contains( + tRecipe.getClass() + .getName())) + continue; + } else { + if (sSpecialRecipeClasses.contains( + tRecipe.getClass() + .getName())) + continue; + } + ItemStack tStack = tRecipe.getRecipeOutput(); + if ((!(tRecipe instanceof IGTCraftingRecipe) || ((IGTCraftingRecipe) tRecipe).isRemovable()) + && GTUtility.areStacksEqual(GTOreDictUnificator.get(tStack), aOutput, aIgnoreNBT)) { + tList.remove(i--); + tList_sS = tList.size(); + rReturn = true; + } + } + return rReturn; + } + + public static boolean bulkRemoveRecipeByOutput(List toRemove) { + ArrayList tList = (ArrayList) CraftingManager.getInstance() + .getRecipeList(); + + Set setToRemove = toRemove.parallelStream() + .map(GTOreDictUnificator::get_nocopy) + .collect(Collectors.toSet()); + + GT_FML_LOGGER.info("BulkRemoveRecipeByOutput: tList: " + tList.size() + " setToRemove: " + setToRemove.size()); + + Set tListToRemove = tList.parallelStream() + .filter(tRecipe -> { + if ((tRecipe instanceof IGTCraftingRecipe) && !((IGTCraftingRecipe) tRecipe).isRemovable()) + return false; + if (sSpecialRecipeClasses.contains( + tRecipe.getClass() + .getName())) + return false; + final ItemStack tStack = GTOreDictUnificator.get_nocopy(tRecipe.getRecipeOutput()); + return setToRemove.stream() + .anyMatch(aOutput -> GTUtility.areStacksEqual(tStack, aOutput, true)); + }) + .collect(Collectors.toSet()); + + tList.removeIf(tListToRemove::contains); + return true; + } + + /** + * Checks all Crafting Handlers for Recipe Output Used for the Autocrafting Table + */ + public static ItemStack getAllRecipeOutput(World aWorld, ItemStack... aRecipe) { + if (aRecipe == null || aRecipe.length == 0) return null; + + if (aWorld == null) aWorld = DW; + + boolean temp = false; + for (ItemStack itemStack : aRecipe) { + if (itemStack != null) { + temp = true; + break; + } + } + if (!temp) return null; + InventoryCrafting aCrafting = new InventoryCrafting(new Container() { + + @Override + public boolean canInteractWith(EntityPlayer player) { + return false; + } + }, 3, 3); + for (int i = 0; i < 9 && i < aRecipe.length; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]); + List tList = CraftingManager.getInstance() + .getRecipeList(); + synchronized (sAllRecipeList) { + if (sAllRecipeList.size() != tList.size()) { + sAllRecipeList.clear(); + sAllRecipeList.addAll(tList); + } + for (int i = 0, j = sAllRecipeList.size(); i < j; i++) { + IRecipe tRecipe = sAllRecipeList.get(i); + if (tRecipe.matches(aCrafting, aWorld)) { + if (i > 10) { + sAllRecipeList.remove(i); + sAllRecipeList.add(i - 10, tRecipe); + } + return tRecipe.getCraftingResult(aCrafting); + } + } + } + + int tIndex = 0; + ItemStack tStack1 = null, tStack2 = null; + for (int i = 0, j = aCrafting.getSizeInventory(); i < j; i++) { + ItemStack tStack = aCrafting.getStackInSlot(i); + if (tStack != null) { + if (tIndex == 0) tStack1 = tStack; + if (tIndex == 1) tStack2 = tStack; + tIndex++; + } + } + + if (tIndex == 2 && tStack2 != null) { + if (tStack1.getItem() == tStack2.getItem() && tStack1.stackSize == 1 + && tStack2.stackSize == 1 + && tStack1.getItem() + .isRepairable()) { + int tNewDamage = tStack1.getMaxDamage() + tStack1.getItemDamage() + - tStack2.getItemDamage() + + tStack1.getMaxDamage() / 20; + return new ItemStack(tStack1.getItem(), 1, Math.max(tNewDamage, 0)); + } + } + + return null; + } + + /** + * Gives you a copy of the Output from a Crafting Recipe Used for Recipe Detection. + */ + public static ItemStack getRecipeOutput(ItemStack... aRecipe) { + return getRecipeOutput(false, true, aRecipe); + } + + public static ItemStack getRecipeOutputNoOreDict(ItemStack... aRecipe) { + return getRecipeOutput(false, false, aRecipe); + } + + public static ItemStack getRecipeOutput(boolean aUncopiedStack, ItemStack... aRecipe) { + return getRecipeOutput(aUncopiedStack, true, aRecipe); + } + + /** + * Gives you a copy of the Output from a Crafting Recipe Used for Recipe Detection. + */ + public static ItemStack getRecipeOutput(boolean aUncopiedStack, boolean allowOreDict, ItemStack... aRecipe) { + if (aRecipe == null || Arrays.stream(aRecipe) + .noneMatch(Objects::nonNull)) return null; + + InventoryCrafting aCrafting = new InventoryCrafting(new Container() { + + @Override + public boolean canInteractWith(EntityPlayer player) { + return false; + } + }, 3, 3); + for (int i = 0; i < 9 && i < aRecipe.length; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]); + ArrayList tList = (ArrayList) CraftingManager.getInstance() + .getRecipeList(); + boolean found = false; + + for (IRecipe iRecipe : tList) { + found = false; + if (!allowOreDict && iRecipe instanceof ShapedOreRecipe) continue; + + try { + found = iRecipe.matches(aCrafting, DW); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + if (found) { + ItemStack tOutput = aUncopiedStack ? iRecipe.getRecipeOutput() : iRecipe.getCraftingResult(aCrafting); + if (tOutput == null || tOutput.stackSize <= 0) { + // Seriously, who would ever do that shit? + if (!GregTechAPI.sPostloadFinished) throw new GTItsNotMyFaultException( + "Seems another Mod added a Crafting Recipe with null Output. Tell the Developer of said Mod to fix that."); + } else { + if (aUncopiedStack) return tOutput; + return GTUtility.copyOrNull(tOutput); + } + } + } + return null; + } + + /** + * Gives you a list of the Outputs from a Crafting Recipe If you have multiple Mods, which add Bronze Armor for + * example This also removes old Recipes from the List. + */ + public static List getVanillyToolRecipeOutputs(ItemStack... aRecipe) { + if (!GregTechAPI.sPostloadStarted || GregTechAPI.sPostloadFinished) sSingleNonBlockDamagableRecipeList.clear(); + if (sSingleNonBlockDamagableRecipeList.isEmpty()) { + for (IRecipe tRecipe : CraftingManager.getInstance() + .getRecipeList()) { + ItemStack tStack = tRecipe.getRecipeOutput(); + if (GTUtility.isStackValid(tStack) && tStack.getMaxStackSize() == 1 + && tStack.getMaxDamage() > 0 + && !(tStack.getItem() instanceof ItemBlock) + && !(tStack.getItem() instanceof IReactorComponent) + && !isElectricItem(tStack) + && !GTUtility.isStackInList(tStack, sNonReplaceableItems)) { + if (!(tRecipe instanceof ShapelessRecipes || tRecipe instanceof ShapelessOreRecipe)) { + if (tRecipe instanceof ShapedOreRecipe) { + boolean temp = true; + for (Object tObject : ((ShapedOreRecipe) tRecipe).getInput()) if (tObject != null) { + if (tObject instanceof ItemStack && (((ItemStack) tObject).getItem() == null + || ((ItemStack) tObject).getMaxStackSize() < 2 + || ((ItemStack) tObject).getMaxDamage() > 0 + || ((ItemStack) tObject).getItem() instanceof ItemBlock)) { + temp = false; + break; + } + if (tObject instanceof List && ((List) tObject).isEmpty()) { + temp = false; + break; + } + } + if (temp) sSingleNonBlockDamagableRecipeList.add(tRecipe); + } else if (tRecipe instanceof ShapedRecipes) { + boolean temp = true; + for (ItemStack tObject : ((ShapedRecipes) tRecipe).recipeItems) { + if (tObject != null && (tObject.getItem() == null || tObject.getMaxStackSize() < 2 + || tObject.getMaxDamage() > 0 + || tObject.getItem() instanceof ItemBlock)) { + temp = false; + break; + } + } + if (temp) sSingleNonBlockDamagableRecipeList.add(tRecipe); + } else { + sSingleNonBlockDamagableRecipeList.add(tRecipe); + } + } + } + } + GTLog.out.println( + "GTMod: Created a List of Tool Recipes containing " + sSingleNonBlockDamagableRecipeList.size() + + " Recipes for recycling." + + (sSingleNonBlockDamagableRecipeList.size() > 1024 + ? " Scanning all these Recipes is the reason for the startup Lag you receive right now." + : E)); + } + List rList = getRecipeOutputs(sSingleNonBlockDamagableRecipeList, true, aRecipe); + if (!GregTechAPI.sPostloadStarted || GregTechAPI.sPostloadFinished) sSingleNonBlockDamagableRecipeList.clear(); + return rList; + } + + /** + * Gives you a list of the Outputs from a Crafting Recipe If you have multiple Mods, which add Bronze Armor for + * example + */ + public static List getRecipeOutputs(ItemStack... aRecipe) { + return getRecipeOutputs( + CraftingManager.getInstance() + .getRecipeList(), + false, + aRecipe); + } + + private static List bufferedRecipes = null; + + /** + * Gives you a list of the Outputs from a Crafting Recipe If you have multiple Mods, which add Bronze Armor for + * example Buffers a List which only has armor-alike crafting in it + */ + public static List getRecipeOutputsBuffered(ItemStack... aRecipe) { + + if (bufferedRecipes == null) bufferedRecipes = CraftingManager.getInstance() + .getRecipeList() + .stream() + .filter( + tRecipe -> !(tRecipe instanceof ShapelessRecipes) && !(tRecipe instanceof ShapelessOreRecipe) + && !(tRecipe instanceof IGTCraftingRecipe)) + .filter(tRecipe -> { + try { + ItemStack tOutput = tRecipe.getRecipeOutput(); + if (tOutput.stackSize == 1 && tOutput.getMaxDamage() > 0 && tOutput.getMaxStackSize() == 1) { + return true; + } + } catch (Exception ignored) {} + return false; + }) + .collect(Collectors.toList()); + return getRecipeOutputs(bufferedRecipes, false, aRecipe); + } + + /** + * Gives you a list of the Outputs from a Crafting Recipe If you have multiple Mods, which add Bronze Armor for + * example + */ + public static List getRecipeOutputs(List aList, boolean aDeleteFromList, ItemStack... aRecipe) { + List rList = new ArrayList<>(); + if (aRecipe == null || Arrays.stream(aRecipe) + .noneMatch(Objects::nonNull)) return rList; + InventoryCrafting aCrafting = new InventoryCrafting(new Container() { + + @Override + public boolean canInteractWith(EntityPlayer player) { + return false; + } + }, 3, 3); + for (int i = 0; i < 9 && i < aRecipe.length; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]); + if (!aDeleteFromList) { + HashSet stacks = new HashSet<>(); + aList.stream() + .filter(tRecipe -> { + if (tRecipe instanceof ShapelessRecipes || tRecipe instanceof ShapelessOreRecipe + || tRecipe instanceof IGTCraftingRecipe) return false; + try { + return tRecipe.matches(aCrafting, DW); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + return false; + } + }) + .forEach(tRecipe -> stacks.add(tRecipe.getCraftingResult(aCrafting))); + rList = stacks.stream() + .filter( + tOutput -> tOutput.stackSize == 1 && tOutput.getMaxDamage() > 0 && tOutput.getMaxStackSize() == 1) + .collect(Collectors.toList()); + } else for (Iterator iterator = aList.iterator(); iterator.hasNext();) { + IRecipe tRecipe = iterator.next(); + boolean matched = false; + + try { + matched = tRecipe.matches(aCrafting, DW); + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + if (matched) { + ItemStack tOutput = tRecipe.getCraftingResult(aCrafting); + + if (tOutput == null || tOutput.stackSize <= 0) { + // Seriously, who would ever do that shit? + if (!GregTechAPI.sPostloadFinished) throw new GTItsNotMyFaultException( + "Seems another Mod added a Crafting Recipe with null Output. Tell the Developer of said Mod to fix that."); + continue; + } + if (tOutput.stackSize != 1) continue; + if (tOutput.getMaxDamage() <= 0) continue; + if (tOutput.getMaxStackSize() != 1) continue; + if (tRecipe instanceof ShapelessRecipes) continue; + if (tRecipe instanceof ShapelessOreRecipe) continue; + if (tRecipe instanceof IGTCraftingRecipe) continue; + rList.add(GTUtility.copyOrNull(tOutput)); + iterator.remove(); + } + } + return rList; + } + + /** + * Used in my own Furnace. + */ + public static ItemStack getSmeltingOutput(ItemStack aInput, boolean aRemoveInput, ItemStack aOutputSlot) { + if (aInput == null || aInput.stackSize < 1) return null; + ItemStack rStack = GTOreDictUnificator.get( + FurnaceRecipes.smelting() + .getSmeltingResult(aInput)); + + if (rStack != null && (aOutputSlot == null || (GTUtility.areStacksEqual(rStack, aOutputSlot) + && rStack.stackSize + aOutputSlot.stackSize <= aOutputSlot.getMaxStackSize()))) { + if (aRemoveInput) aInput.stackSize--; + return rStack; + } + return null; + } + + /** + * Used in my own Machines. Decreases StackSize of the Input if wanted. + *

+ * Checks also if there is enough Space in the Output Slots. + */ + public static ItemStack[] getMachineOutput(ItemStack aInput, Map aRecipeList, + boolean aRemoveInput, NBTTagCompound rRecipeMetaData, ItemStack... aOutputSlots) { + if (aOutputSlots == null || aOutputSlots.length == 0) return new ItemStack[0]; + if (aInput == null) return new ItemStack[aOutputSlots.length]; + try { + for (Entry tEntry : aRecipeList.entrySet()) { + if (tEntry.getKey() + .matches(aInput)) { + if (tEntry.getKey() + .getAmount() <= aInput.stackSize) { + ItemStack[] tList = tEntry.getValue().items.toArray(new ItemStack[0]); + if (tList.length == 0) break; + ItemStack[] rList = new ItemStack[aOutputSlots.length]; + rRecipeMetaData.setTag("return", tEntry.getValue().metadata); + for (byte i = 0; i < aOutputSlots.length && i < tList.length; i++) { + if (tList[i] != null) { + if (aOutputSlots[i] == null || (GTUtility.areStacksEqual(tList[i], aOutputSlots[i]) + && tList[i].stackSize + aOutputSlots[i].stackSize + <= aOutputSlots[i].getMaxStackSize())) { + rList[i] = GTUtility.copyOrNull(tList[i]); + } else { + return new ItemStack[aOutputSlots.length]; + } + } + } + + if (aRemoveInput) aInput.stackSize -= tEntry.getKey() + .getAmount(); + return rList; + } + break; + } + } + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + return new ItemStack[aOutputSlots.length]; + } + + /** + * Used in my own Recycler. + *

+ * Only produces Scrap if aScrapChance == 0. aScrapChance is usually the random Number I give to the Function If you + * directly insert 0 as aScrapChance then you can check if its Recycler-Blacklisted or similar + */ + @Nullable + public static ItemStack getRecyclerOutput(ItemStack aInput, int aScrapChance) { + if (aInput == null || aScrapChance != 0) return null; + if (recyclerWhitelist == null) { + generateRecyclerCache(); + } + + if (recyclerWhitelist.isEmpty()) { + if (searchRecyclerCache(aInput, recyclerBlacklist)) { + return null; + } else { + return ItemList.IC2_Scrap.get(1); + } + } else { + if (searchRecyclerCache(aInput, recyclerWhitelist)) { + return ItemList.IC2_Scrap.get(1); + } else { + return null; + } + } + } + + private static void generateRecyclerCache() { + recyclerWhitelist = new HashSet<>(); + for (IRecipeInput input : ic2.api.recipe.Recipes.recyclerWhitelist) { + for (ItemStack stack : input.getInputs()) { + recyclerWhitelist.add(GTUtility.ItemId.create(stack.getItem(), stack.getItemDamage(), null)); + } + } + recyclerBlacklist = new HashSet<>(); + for (IRecipeInput input : ic2.api.recipe.Recipes.recyclerBlacklist) { + for (ItemStack stack : input.getInputs()) { + recyclerBlacklist.add(GTUtility.ItemId.create(stack.getItem(), stack.getItemDamage(), null)); + } + } + } + + private static boolean searchRecyclerCache(ItemStack stack, Set set) { + if (set.contains(GTUtility.ItemId.createWithoutNBT(stack))) { + return true; + } + // ic2.api.recipe.RecipeInputItemStack#matches expects item with wildcard meta to accept arbitrary meta + return set.contains(GTUtility.ItemId.createAsWildcard(stack)); + } + + /** + * For the Scrapboxinator + */ + public static ItemStack getRandomScrapboxDrop() { + return ic2.api.recipe.Recipes.scrapboxDrops.getDrop(ItemList.IC2_Scrapbox.get(1), false); + } + + /** + * Charges an Electric Item. Only if it's a valid Electric Item of course. This forces the Usage of proper Voltages + * (so not the transfer limits defined by the Items) unless you ignore the Transfer Limit. If aTier is + * Integer.MAX_VALUE it will ignore Tier based Limitations. + * + * @return the actually used Energy. + */ + public static int chargeElectricItem(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreLimit, + boolean aSimulate) { + try { + if (isElectricItem(aStack)) { + int tTier = ((ic2.api.item.IElectricItem) aStack.getItem()).getTier(aStack); + if (tTier < 0 || tTier == aTier || aTier == Integer.MAX_VALUE) { + if (!aIgnoreLimit && tTier >= 0) + aCharge = (int) Math.min(aCharge, V[Math.max(0, Math.min(V.length - 1, tTier))]); + if (aCharge > 0) { + int rCharge = (int) Math.max( + 0.0, + ic2.api.item.ElectricItem.manager.charge(aStack, aCharge, tTier, true, aSimulate)); + return rCharge + (rCharge * 4 > aTier ? aTier : 0); + } + } + } + } catch (Throwable e) { + /* Do nothing */ + } + return 0; + } + + /** + * Discharges an Electric Item. Only if it's a valid Electric Item for that of course. This forces the Usage of + * proper Voltages (so not the transfer limits defined by the Items) unless you ignore the Transfer Limit. If aTier + * is Integer.MAX_VALUE it will ignore Tier based Limitations. + * + * @return the Energy got from the Item. + */ + public static int dischargeElectricItem(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreLimit, + boolean aSimulate, boolean aIgnoreDischargability) { + try { + // if (isElectricItem(aStack) && (aIgnoreDischargability || + // ((ic2.api.item.IElectricItem)aStack.getItem()).canProvideEnergy(aStack))) { + if (isElectricItem(aStack)) { + int tTier = ((ic2.api.item.IElectricItem) aStack.getItem()).getTier(aStack); + if (tTier < 0 || tTier == aTier || aTier == Integer.MAX_VALUE) { + if (!aIgnoreLimit && tTier >= 0) aCharge = (int) Math.min( + aCharge, + V[Math.max(0, Math.min(V.length - 1, tTier))] + B[Math.max(0, Math.min(V.length - 1, tTier))]); + if (aCharge > 0) { + int rCharge = (int) Math.max( + 0, + ic2.api.item.ElectricItem.manager.discharge( + aStack, + aCharge + (aCharge * 4 > aTier ? aTier : 0), + tTier, + true, + !aIgnoreDischargability, + aSimulate)); + return rCharge - (rCharge * 4 > aTier ? aTier : 0); + } + } + } + } catch (Throwable e) { + /* Do nothing */ + } + return 0; + } + + /** + * Uses an Electric Item. Only if it's a valid Electric Item for that of course. + * + * @return if the action was successful + */ + public static boolean canUseElectricItem(ItemStack aStack, int aCharge) { + try { + if (isElectricItem(aStack)) { + return ic2.api.item.ElectricItem.manager.canUse(aStack, aCharge); + } + } catch (Throwable e) { + /* Do nothing */ + } + return false; + } + + /** + * Uses an Electric Item. Only if it's a valid Electric Item for that of course. + * + * @return if the action was successful + */ + public static boolean useElectricItem(ItemStack aStack, int aCharge, EntityPlayer aPlayer) { + try { + if (isElectricItem(aStack)) { + ic2.api.item.ElectricItem.manager.use(aStack, 0, aPlayer); + if (ic2.api.item.ElectricItem.manager.canUse(aStack, aCharge)) { + return ic2.api.item.ElectricItem.manager.use(aStack, aCharge, aPlayer); + } + } + } catch (Throwable e) { + /* Do nothing */ + } + return false; + } + + /** + * Uses an Item. Tries to discharge in case of Electric Items + */ + public static boolean damageOrDechargeItem(ItemStack aStack, int aDamage, int aDecharge, EntityLivingBase aPlayer) { + if (GTUtility.isStackInvalid(aStack) || (aStack.getMaxStackSize() <= 1 && aStack.stackSize > 1)) return false; + if (aPlayer instanceof EntityPlayer && ((EntityPlayer) aPlayer).capabilities.isCreativeMode) return true; + if (aStack.getItem() instanceof IDamagableItem) { + return ((IDamagableItem) aStack.getItem()).doDamageToItem(aStack, aDamage); + } else if (GTModHandler.isElectricItem(aStack)) { + if (canUseElectricItem(aStack, aDecharge)) { + if (aPlayer instanceof EntityPlayer) { + return GTModHandler.useElectricItem(aStack, aDecharge, (EntityPlayer) aPlayer); + } + return GTModHandler.dischargeElectricItem(aStack, aDecharge, Integer.MAX_VALUE, true, false, true) + >= aDecharge; + } + } else if (aStack.getItem() + .isDamageable()) { + if (aPlayer == null) { + aStack.setItemDamage(aStack.getItemDamage() + aDamage); + } else { + aStack.damageItem(aDamage, aPlayer); + } + if (aStack.getItemDamage() >= aStack.getMaxDamage()) { + aStack.setItemDamage(aStack.getMaxDamage() + 1); + ItemStack tStack = GTUtility.getContainerItem(aStack, true); + if (tStack != null) { + aStack.func_150996_a(tStack.getItem()); + aStack.setItemDamage(tStack.getItemDamage()); + aStack.stackSize = tStack.stackSize; + aStack.setTagCompound(tStack.getTagCompound()); + } else if (aStack.stackSize > 0) { + aStack.stackSize--; + } + } + return true; + } + return false; + } + + /** + * Uses a Soldering Iron from player or external inventory + */ + public static boolean useSolderingIron(ItemStack aStack, EntityLivingBase aPlayer, IInventory aExternalInventory) { + if (aPlayer == null || aStack == null) return false; + if (GTUtility.isStackInList(aStack, GregTechAPI.sSolderingToolList)) { + if (aPlayer instanceof EntityPlayer tPlayer) { + if (tPlayer.capabilities.isCreativeMode) return true; + if (isElectricItem(aStack) && ic2.api.item.ElectricItem.manager.getCharge(aStack) > 1000.0d) { + if (consumeSolderingMaterial(tPlayer) + || (aExternalInventory != null && consumeSolderingMaterial(aExternalInventory))) { + if (canUseElectricItem(aStack, 10000)) { + return GTModHandler.useElectricItem(aStack, 10000, (EntityPlayer) aPlayer); + } + GTModHandler.useElectricItem( + aStack, + (int) ic2.api.item.ElectricItem.manager.getCharge(aStack), + (EntityPlayer) aPlayer); + return false; + } else { + GTUtility.sendChatToPlayer( + (EntityPlayer) aPlayer, + GTUtility.trans("094.1", "Not enough soldering material!")); + } + } + } else { + damageOrDechargeItem(aStack, 1, 1000, aPlayer); + return true; + } + } + return false; + } + + public static boolean useSolderingIron(ItemStack aStack, EntityLivingBase aPlayer) { + return useSolderingIron(aStack, aPlayer, null); + } + + public static boolean consumeSolderingMaterial(EntityPlayer aPlayer) { + if (aPlayer.capabilities.isCreativeMode) return true; + IInventory tInventory = aPlayer.inventory; + if (consumeSolderingMaterial(tInventory)) { + if (aPlayer.inventoryContainer != null) { + aPlayer.inventoryContainer.detectAndSendChanges(); + } + return true; + } + for (int i = 0; i < tInventory.getSizeInventory(); i++) { + ItemStack tStack = tInventory.getStackInSlot(i); + if (tStack != null && tStack.getItem() instanceof ItemToolbox) { + IInventory tToolboxInventory = ((ItemToolbox) tStack.getItem()).getInventory(aPlayer, tStack); + if (consumeSolderingMaterial(tToolboxInventory)) { + tInventory.markDirty(); + if (aPlayer.inventoryContainer != null) { + aPlayer.inventoryContainer.detectAndSendChanges(); + } + return true; + } + } + } + return false; + } + + /** + * Consumes soldering material from given inventory + */ + public static boolean consumeSolderingMaterial(IInventory aInventory) { + for (int i = 0; i < aInventory.getSizeInventory(); i++) { + ItemStack tStack = aInventory.getStackInSlot(i); + if (GTUtility.isStackInList(tStack, GregTechAPI.sSolderingMetalList)) { + if (tStack.stackSize < 1) return false; + if (tStack.stackSize == 1) { + tStack = null; + } else { + tStack.stackSize--; + } + aInventory.setInventorySlotContents(i, tStack); + aInventory.markDirty(); + return true; + } + } + return false; + } + + /** + * Is this an electric Item, which can charge other Items? + */ + public static boolean isChargerItem(ItemStack aStack) { + try { + if (isElectricItem(aStack)) { + return ((ic2.api.item.IElectricItem) aStack.getItem()).canProvideEnergy(aStack); + } + } catch (Throwable e) { + /* Do nothing */ + } + return false; + } + + /** + * Is this an electric Item? + */ + public static boolean isElectricItem(ItemStack aStack) { + try { + return aStack != null && aStack.getItem() instanceof ic2.api.item.IElectricItem + && ((IElectricItem) aStack.getItem()).getTier(aStack) < Integer.MAX_VALUE; + } catch (Throwable e) { + /* Do nothing */ + } + return false; + } + + public static boolean isElectricItem(ItemStack aStack, byte aTier) { + try { + return aStack != null && aStack.getItem() instanceof ic2.api.item.IElectricItem + && ((IElectricItem) aStack.getItem()).getTier(aStack) == aTier; + } catch (Throwable e) { + /* Do nothing */ + } + return false; + } + + /** + * Returns the current charge and maximum charge of an ItemStack. + * + * @param aStack Any ItemStack. + * @return Optional.empty() if the stack is null or not an electric item, or an Optional containing a payload of an + * array containing [ current_charge, maximum_charge ] on success. + */ + public static Optional getElectricItemCharge(ItemStack aStack) { + if (aStack == null || !isElectricItem(aStack)) { + return Optional.empty(); + } + + final Item item = aStack.getItem(); + + if (item instanceof final MetaBaseItem metaBaseItem) { + final Long[] stats = metaBaseItem.getElectricStats(aStack); + if (stats != null && stats.length > 0) { + return Optional.of(new Long[] { metaBaseItem.getRealCharge(aStack), stats[0] }); + } + + } else if (item instanceof final IElectricItem ic2ElectricItem) { + return Optional.of( + new Long[] { (long) ic2.api.item.ElectricItem.manager.getCharge(aStack), + (long) ic2ElectricItem.getMaxCharge(aStack) }); + } + + return Optional.empty(); + } + + /** + * Allow item to be inserted into ic2 toolbox + */ + public static void registerBoxableItemToToolBox(ItemStack aStack) { + if (aStack != null) { + try { + ic2.api.item.ItemWrapper.registerBoxable(aStack.getItem(), (IBoxable) sBoxableWrapper); + } catch (Throwable ignored) { + /* Do nothing */ + } + sBoxableItems.add(new GTItemStack(aStack)); + } + } + + public static int getCapsuleCellContainerCountMultipliedWithStackSize(ItemStack... aStacks) { + int rAmount = 0; + for (ItemStack tStack : aStacks) + if (tStack != null) rAmount += getCapsuleCellContainerCount(tStack) * tStack.stackSize; + return rAmount; + } + + public static int getCapsuleCellContainerCount(ItemStack aStack) { + if (aStack == null) return 0; + + if (GTUtility.areStacksEqual(GTUtility.getContainerForFilledItem(aStack, true), ItemList.Cell_Empty.get(1))) { + return 1; + } + + if (GTUtility.areStacksEqual(aStack, getIC2Item("waterCell", 1, W))) { + return 1; + } + + for (OrePrefixes cellType : OrePrefixes.CELL_TYPES) { + if (cellType.contains(aStack)) { + return 1; + } + } + + return 0; + } + + public static class RecipeBits { + + /** + * Mirrors the Recipe + */ + public static long MIRRORED = B[0]; + /** + * Buffers the Recipe for later addition. This makes things more efficient. + */ + public static long BUFFERED = B[1]; + /** + * This is a special Tag I used for crafting Coins up and down. + */ + public static long KEEPNBT = B[2]; + /** + * Makes the Recipe Reverse Craftable in the Disassembler. + */ + public static long DISMANTLEABLE = B[3]; + /** + * Prevents the Recipe from accidentally getting removed by my own Handlers. + */ + public static long NOT_REMOVABLE = B[4]; + /** + * Reverses the Output of the Recipe for smelting and pulverising. + */ + public static long REVERSIBLE = B[5]; + /** + * Removes all Recipes with the same Output Item regardless of NBT, unless another Recipe Deletion Bit is added + * too. + */ + public static long DELETE_ALL_OTHER_RECIPES = B[6]; + /** + * Removes all Recipes with the same Output Item limited to the same NBT. + */ + public static long DELETE_ALL_OTHER_RECIPES_IF_SAME_NBT = B[7]; + /** + * Removes all Recipes with the same Output Item limited to Shaped Recipes. + */ + public static long DELETE_ALL_OTHER_SHAPED_RECIPES = B[8]; + /** + * Removes all Recipes with the same Output Item limited to native Recipe Handlers. + */ + public static long DELETE_ALL_OTHER_NATIVE_RECIPES = B[9]; + /** + * Disables the check for colliding Recipes. + */ + public static long DO_NOT_CHECK_FOR_COLLISIONS = B[10]; + /** + * Only adds the Recipe if there is another Recipe having that Output + */ + public static long ONLY_ADD_IF_THERE_IS_ANOTHER_RECIPE_FOR_IT = B[11]; + /** + * Only adds the Recipe if it has an Output + */ + public static long ONLY_ADD_IF_RESULT_IS_NOT_NULL = B[12]; + /** + * Don't remove shapeless recipes with this output + */ + public static long DONT_REMOVE_SHAPELESS = B[13]; + } +} diff --git a/src/main/java/gregtech/api/util/GTMusicSystem.java b/src/main/java/gregtech/api/util/GTMusicSystem.java new file mode 100644 index 0000000000..362c397e67 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTMusicSystem.java @@ -0,0 +1,667 @@ +package gregtech.api.util; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Map; +import java.util.TreeMap; +import java.util.UUID; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.SoundEventAccessorComposite; +import net.minecraft.client.audio.SoundRegistry; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemRecord; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.IOUtils; +import org.jetbrains.annotations.ApiStatus; +import org.joml.Vector4i; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.jcraft.jorbis.VorbisFile; + +import baubles.api.BaublesApi; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.network.ByteBufUtils; +import gregtech.GTMod; +import gregtech.api.enums.GTValues; +import gregtech.api.net.GTPacketMusicSystemData; +import gregtech.client.ElectricJukeboxSound; +import gregtech.common.items.ItemWirelessHeadphones; +import gregtech.common.tileentities.machines.basic.MTEBetterJukebox; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; + +/** + * A system that keeps track of jukebox music tracks playing in different locations. + * Compared to vanilla jukebox handling, this allows music to resume playing after reloading the chunk the jukeboxes are + * in. + * It also allows the headphone item to modify the hearing range of a given disc, including other dimensions. + *

+ * Vector4i coordinates point to X,Y,Z,Dimension of the source + * + * @author eigenraven + */ +public final class GTMusicSystem { + + private GTMusicSystem() {} + + public static final class MusicSource { + + /** Flag keeping track of when the data of this source needs to be sent to clients again */ + public boolean modified; + public final UUID sourceID; + /** Currently playing track */ + public ResourceLocation currentRecord; + /** Headphone range */ + public MTEBetterJukebox.HeadphoneLimit headphoneLimit; + /** + * {@link System#currentTimeMillis()} at the time this record started playing, in server time + */ + public long startedPlayingAtMs; + /** Time the record was playing for at the time it was serialized. */ + public long playingForMs; + /** The origin of this source used for wireless headphone range calculations */ + public final Vector4i originPosition = new Vector4i(); + /** Number of blocks from {@link MusicSource#originPosition} the headphones can work */ + public int headphoneBlockRange; + /** Densely packed parameters for each "emitter" associated with the source, for fast iteration */ + public int[] emitterParameters; // [{x,y,z,dim,volume}, {x, ...}, {x, ...}, ...] + /** Offsets into the parameters array */ + public static final int EMITTER_X = 0; + /** Offsets into the parameters array */ + public static final int EMITTER_Y = 1; + /** Offsets into the parameters array */ + public static final int EMITTER_Z = 2; + /** Offsets into the parameters array */ + public static final int EMITTER_DIMENSION = 3; + /** 100 times the floating point "volume" used by the sound system for range calculations */ + public static final int EMITTER_VOLUME_X_100 = 4; + /** Iteration stride for packed emitter parameters */ + public static final int EMITTER_STRIDE = EMITTER_VOLUME_X_100 + 1; + + public MusicSource(UUID sourceID) { + this.sourceID = sourceID; + } + + public void resizeEmitterArray(int count) { + int len = count * EMITTER_STRIDE; + if (emitterParameters == null || emitterParameters.length != len) { + if (emitterParameters == null) { + emitterParameters = new int[len]; + } else { + emitterParameters = Arrays.copyOf(emitterParameters, len); + } + modified = true; + } + } + + public void setEmitter(int index, Vector4i position, float volume) { + int arrIndex = index * EMITTER_STRIDE; + if (arrIndex < 0 || arrIndex >= emitterParameters.length) { + throw new IndexOutOfBoundsException( + "Trying to access emitter with index " + index + + " in an array of " + + emitterParameters.length / EMITTER_STRIDE); + } + + if (emitterParameters[arrIndex + EMITTER_X] != position.x) { + modified = true; + emitterParameters[arrIndex + EMITTER_X] = position.x; + } + if (emitterParameters[arrIndex + EMITTER_Y] != position.y) { + modified = true; + emitterParameters[arrIndex + EMITTER_Y] = position.y; + } + if (emitterParameters[arrIndex + EMITTER_Z] != position.z) { + modified = true; + emitterParameters[arrIndex + EMITTER_Z] = position.z; + } + if (emitterParameters[arrIndex + EMITTER_DIMENSION] != position.w) { + modified = true; + emitterParameters[arrIndex + EMITTER_DIMENSION] = position.w; + } + final int intVolume = (int) (volume * 100.0f); + if (emitterParameters[arrIndex + EMITTER_VOLUME_X_100] != intVolume) { + modified = true; + emitterParameters[arrIndex + EMITTER_VOLUME_X_100] = intVolume; + } + } + + /** x squared */ + private static int sq(int x) { + return x * x; + } + + /** @return Index of closest emitter in range, or -1 if none is nearby. */ + public int closestEmitter(int x, int y, int z, int dim) { + int closest = -1; + int closestDistanceSq = Integer.MAX_VALUE; + final int emittersCount = emitterParameters.length / EMITTER_STRIDE; + for (int i = 0; i < emittersCount; i++) { + final int offset = i * EMITTER_STRIDE; + final int eDim = emitterParameters[offset + EMITTER_DIMENSION]; + if (eDim != dim) { + continue; + } + final int eX = emitterParameters[offset + EMITTER_X]; + final int eY = emitterParameters[offset + EMITTER_Y]; + final int eZ = emitterParameters[offset + EMITTER_Z]; + final int distanceSq = sq(x - eX) + sq(y - eY) + sq(z - eZ); + if (distanceSq < closestDistanceSq) { + closestDistanceSq = distanceSq; + closest = i; + } + } + return closest; + } + + public boolean inHeadphoneRange(int x, int y, int z, int dim) { + return switch (headphoneLimit) { + case BETWEEN_DIMENSIONS -> true; + case INSIDE_DIMENSION -> dim == originPosition.w; + case BLOCK_RANGE -> dim == originPosition.w + && originPosition.distanceSquared(x, y, z, dim) <= sq(headphoneBlockRange); + }; + } + + public void encode(final ByteBuf target) { + target.writeLong(sourceID.getMostSignificantBits()); + target.writeLong(sourceID.getLeastSignificantBits()); + if (currentRecord != null) { + final int duration = getMusicRecordDurations().getOrDefault(currentRecord, Integer.MAX_VALUE); + if (playingForMs >= duration) { + // Record already finished playing, let's not send it to the client anymore. + target.writeBoolean(false); + } else { + target.writeBoolean(true); + ByteBufUtils.writeUTF8String(target, currentRecord.getResourceDomain()); + ByteBufUtils.writeUTF8String(target, currentRecord.getResourcePath()); + } + } else { + target.writeBoolean(false); + } + target.writeByte((byte) headphoneLimit.ordinal()); + ByteBufUtils.writeVarInt(target, headphoneBlockRange, 5); + target.writeLong(startedPlayingAtMs); + target.writeLong(playingForMs); + ByteBufUtils.writeVarInt(target, originPosition.x, 5); + ByteBufUtils.writeVarInt(target, originPosition.y, 5); + ByteBufUtils.writeVarInt(target, originPosition.z, 5); + ByteBufUtils.writeVarInt(target, originPosition.w, 5); + ByteBufUtils.writeVarInt(target, emitterParameters.length, 5); + for (int emitterParameter : emitterParameters) { + ByteBufUtils.writeVarInt(target, emitterParameter, 5); + } + } + + public static MusicSource decode(final ByteBuf bytes) { + final long uuidMsb = bytes.readLong(); + final long uuidLsb = bytes.readLong(); + final MusicSource source = new MusicSource(new UUID(uuidMsb, uuidLsb)); + final boolean hasRecord = bytes.readBoolean(); + if (hasRecord) { + final String domain = ByteBufUtils.readUTF8String(bytes); + final String path = ByteBufUtils.readUTF8String(bytes); + source.currentRecord = new ResourceLocation(domain, path); + } + source.headphoneLimit = MTEBetterJukebox.HeadphoneLimit.ENTRIES.get(bytes.readByte()); + source.headphoneBlockRange = ByteBufUtils.readVarInt(bytes, 5); + source.startedPlayingAtMs = bytes.readLong(); + source.playingForMs = bytes.readLong(); + final int originX = ByteBufUtils.readVarInt(bytes, 5); + final int originY = ByteBufUtils.readVarInt(bytes, 5); + final int originZ = ByteBufUtils.readVarInt(bytes, 5); + final int originW = ByteBufUtils.readVarInt(bytes, 5); + source.originPosition.set(originX, originY, originZ, originW); + final int emittersLength = ByteBufUtils.readVarInt(bytes, 5); + source.emitterParameters = new int[emittersLength]; + for (int i = 0; i < emittersLength; i++) { + source.emitterParameters[i] = ByteBufUtils.readVarInt(bytes, 5); + } + + return source; + } + + public void setRecord(final ResourceLocation record) { + setRecord(record, 0); + } + + public void setRecord(final ResourceLocation record, long seekOffset) { + modified = true; + currentRecord = record; + playingForMs = seekOffset; + startedPlayingAtMs = System.currentTimeMillis() - seekOffset; + } + } + + public static final class ServerSystem { + + static final Object2ObjectOpenHashMap musicSources = new Object2ObjectOpenHashMap<>(32); + static boolean musicSourcesDirty = false; + + // Everything is synchronized to allow calling into here from the client when singleplayer synchronization is + // needed. + + public static synchronized MusicSource registerOrGetMusicSource(UUID uuid) { + return musicSources.computeIfAbsent(uuid, (UUID id) -> { + musicSourcesDirty = true; + return new MusicSource(id); + }); + } + + public static synchronized void removeMusicSource(UUID uuid) { + musicSources.remove(uuid); + musicSourcesDirty = true; + } + + public static synchronized void reset() { + musicSources.clear(); + musicSourcesDirty = true; + } + + public static synchronized ByteBuf serialize() { + final ByteBuf out = Unpooled.buffer(); + ByteBufUtils.writeVarInt(out, musicSources.size(), 5); + musicSources.forEach((uuid, source) -> source.encode(out)); + return out; + } + + private static boolean tickAnyDirty; + + public static synchronized void tick() { + final long now = System.currentTimeMillis(); + tickAnyDirty = false; + musicSources.forEach((uuid, source) -> { + source.playingForMs = now - source.startedPlayingAtMs; + tickAnyDirty |= source.modified; + source.modified = false; + }); + if (tickAnyDirty || musicSourcesDirty) { + musicSourcesDirty = false; + GTValues.NW.sendToAll(new GTPacketMusicSystemData(serialize())); + } + } + + static synchronized void onPauseMs(long pauseDurationMs) { + musicSources.forEach((uuid, source) -> { source.startedPlayingAtMs += pauseDurationMs; }); + } + } + + public static final class ClientSystem { + + private static final class ClientSourceData { + + /** Currently playing sound data */ + public ElectricJukeboxSound currentSound = null; + /** Currently playing sound data */ + public ResourceLocation currentSoundResource = null; + /** + * Server's timer value of when the music started, mostly meaningless except for checking for replays of the + * same music file. + */ + public long originalStartTime = 0; + /** + * Computed client value of {@link System#currentTimeMillis()} of the time when the playback would have + * started if it was synchronized with the server. + */ + public long clientReferenceStartTime = 0; + /** Flag for mark and sweep removal of outdated sounds */ + public boolean markFlag = false; + + public void resetMark() { + markFlag = false; + } + + public void mark() { + markFlag = true; + } + + public void clearSound(final Minecraft mc) { + currentSoundResource = null; + if (currentSound != null) { + mc.getSoundHandler() + .stopSound(currentSound); + currentSound = null; + originalStartTime = 0; + } + } + + public boolean equalSound(final MusicSource source) { + if (source == null || source.currentRecord == null) { + return currentSoundResource == null; + } else { + return source.currentRecord.equals(currentSoundResource) + && originalStartTime == source.startedPlayingAtMs; + } + } + + public void resetSound(final Minecraft mc, final MusicSource source, final boolean onHeadphones) { + clearSound(mc); + if (source == null || source.emitterParameters.length == 0) { + return; + } + int closestEmitter = onHeadphones ? 0 + : source.closestEmitter( + (int) Math.floor(mc.thePlayer.posX), + (int) Math.floor(mc.thePlayer.posY), + (int) Math.floor(mc.thePlayer.posZ), + currentDimension); + if (closestEmitter < 0) { + return; + } + this.currentSoundResource = source.currentRecord; + this.originalStartTime = source.startedPlayingAtMs; + this.clientReferenceStartTime = System.currentTimeMillis() - source.playingForMs; + if (currentSoundResource != null) { + this.currentSound = makeRecord(source, closestEmitter); + if (onHeadphones) { + this.currentSound.volume = 1.0e20f; + } + mc.getSoundHandler() + .playSound(this.currentSound); + } + } + + public void updateSound(final Minecraft mc, final MusicSource source, final boolean onHeadphones) { + if (source == null || currentSound == null || source.emitterParameters.length == 0) { + return; + } + int closestEmitter = onHeadphones ? 0 + : source.closestEmitter( + (int) Math.floor(mc.thePlayer.posX), + (int) Math.floor(mc.thePlayer.posY), + (int) Math.floor(mc.thePlayer.posZ), + currentDimension); + if (closestEmitter < 0) { + currentSound.volume = 0.0f; + return; + } + final int offset = closestEmitter * MusicSource.EMITTER_STRIDE; + currentSound.xPosition = source.emitterParameters[offset + MusicSource.EMITTER_X]; + currentSound.yPosition = source.emitterParameters[offset + MusicSource.EMITTER_Y]; + currentSound.zPosition = source.emitterParameters[offset + MusicSource.EMITTER_Z]; + currentSound.volume = onHeadphones ? 1.0e20f + : source.emitterParameters[offset + MusicSource.EMITTER_VOLUME_X_100] / 100.0f; + } + } + + /** Latest music source list as synchronized from the server */ + public static final Object2ObjectOpenHashMap musicSources = new Object2ObjectOpenHashMap<>(); + + private static final Object2ObjectOpenHashMap activelyPlayingMusic = new Object2ObjectOpenHashMap<>( + 16); + + private static final ObjectOpenHashSet wornHeadphones = new ObjectOpenHashSet<>(); + + private static int currentDimension = Integer.MIN_VALUE; + + private static boolean soundsPaused = false; + private static long pauseTimeMs = 0; + private static int tickCounter = 0; + + public static void loadUpdatedSources(ByteBuf bytes) { + final int sourceCount = ByteBufUtils.readVarInt(bytes, 5); + musicSources.clear(); + for (int i = 0; i < sourceCount; i++) { + final MusicSource source = MusicSource.decode(bytes); + musicSources.put(source.sourceID, source); + } + } + + private static ElectricJukeboxSound makeRecord(MusicSource source, int emitter) { + final int x = source.emitterParameters[emitter * MusicSource.EMITTER_STRIDE + MusicSource.EMITTER_X]; + final int y = source.emitterParameters[emitter * MusicSource.EMITTER_STRIDE + MusicSource.EMITTER_Y]; + final int z = source.emitterParameters[emitter * MusicSource.EMITTER_STRIDE + MusicSource.EMITTER_Z]; + final float volume = source.emitterParameters[emitter * MusicSource.EMITTER_STRIDE + + MusicSource.EMITTER_VOLUME_X_100] / 100.0f; + return new ElectricJukeboxSound(source.currentRecord, volume, source.playingForMs, x, y, z); + } + + public static void dumpAllRecordDurations() { + try { + final Minecraft mc = Minecraft.getMinecraft(); + final SoundRegistry sm = mc.getSoundHandler().sndRegistry; + final SoundDurationsJson json = new SoundDurationsJson(); + @SuppressWarnings("unchecked") + final Map allRecords = ItemRecord.field_150928_b; + // Cursed hack because JOrbis does not support seeking in anything other than filesystem files. + // This is only a dev tool, so it can be a bit slow and use real files here. + final File tempFile = File.createTempFile("mcdecode", ".ogg"); + for (final ItemRecord record : allRecords.values()) { + try { + final ResourceLocation res = record.getRecordResource(record.recordName); + SoundEventAccessorComposite registryEntry = (SoundEventAccessorComposite) sm.getObject(res); + if (registryEntry == null) { + registryEntry = (SoundEventAccessorComposite) sm.getObject( + new ResourceLocation(res.getResourceDomain(), "records." + res.getResourcePath())); + } + final ResourceLocation realPath = registryEntry.func_148720_g() + .getSoundPoolEntryLocation(); + try (final InputStream is = mc.getResourceManager() + .getResource(realPath) + .getInputStream(); final OutputStream os = FileUtils.openOutputStream(tempFile)) { + IOUtils.copy(is, os); + os.close(); + final VorbisFile vf = new VorbisFile(tempFile.getAbsolutePath()); + final float totalSeconds = vf.time_total(-1); + json.soundDurationsMs.put(res.toString(), (int) Math.ceil(totalSeconds * 1000.0f)); + } + } catch (Exception e) { + GTMod.GT_FML_LOGGER.warn("Skipping {}", record.recordName, e); + } + } + GTMod.GT_FML_LOGGER.info( + "Sound durations json: \n{}", + new GsonBuilder().setPrettyPrinting() + .create() + .toJson(json)); + tempFile.delete(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static void reset() { + musicSources.clear(); + tick(); + } + + public static void tick() { + final Minecraft mc = Minecraft.getMinecraft(); + if (mc == null || mc.renderGlobal == null + || mc.theWorld == null + || mc.thePlayer == null + || mc.theWorld.provider == null) { + return; + } + tickCounter++; + final long now = System.currentTimeMillis(); + currentDimension = mc.theWorld.provider.dimensionId; + + headphoneCheck: if ((tickCounter % 20) == 0) { + wornHeadphones.clear(); + final IInventory baubles = BaublesApi.getBaubles(mc.thePlayer); + if (baubles == null) { + break headphoneCheck; + } + final int baublesSize = baubles.getSizeInventory(); + for (int i = 0; i < baublesSize; i++) { + final ItemStack item = baubles.getStackInSlot(i); + if (item != null && item.getItem() instanceof ItemWirelessHeadphones headphones) { + final UUID id = headphones.getBoundJukeboxUUID(item); + if (id != null) { + wornHeadphones.add(id); + } + } + } + } + + activelyPlayingMusic.forEach((uuid, data) -> data.resetMark()); + + // Update and mark all present music streams + musicSources.forEach((uuid, musicSource) -> { + final ClientSourceData data = activelyPlayingMusic + .computeIfAbsent(uuid, ignored -> new ClientSourceData()); + data.mark(); + if (data.currentSound != null && !mc.getSoundHandler() + .isSoundPlaying(data.currentSound) + && (now - data.clientReferenceStartTime) + < getMusicRecordDurations().getOrDefault(data.currentSoundResource, Integer.MAX_VALUE)) { + data.currentSound = null; + data.currentSoundResource = null; + } + final boolean onHeadphones = wornHeadphones.contains(uuid); + if (!data.equalSound(musicSource)) { + data.resetSound(mc, musicSource, onHeadphones); + } else { + data.updateSound(mc, musicSource, onHeadphones); + } + }); + + // Sweep no longer present music streams + final var entries = activelyPlayingMusic.object2ObjectEntrySet() + .fastIterator(); + while (entries.hasNext()) { + final ClientSourceData entry = entries.next() + .getValue(); + if (!entry.markFlag) { + entry.clearSound(mc); + entries.remove(); + } + } + } + + @ApiStatus.Internal + public static void onSoundBatchStop() { + // All music was forcibly stopped, we can forget about the currently playing music + // and let the update loop re-start them on next tick + long now = System.currentTimeMillis(); + activelyPlayingMusic.forEach((uuid, data) -> { + data.currentSound = null; + data.currentSoundResource = null; + final MusicSource source = musicSources.get(uuid); + if (source == null) { + return; + } + source.playingForMs = now - data.clientReferenceStartTime; + }); + } + + @ApiStatus.Internal + public static void onSoundBatchPause() { + if (soundsPaused) { + return; + } + soundsPaused = true; + pauseTimeMs = System.currentTimeMillis(); + } + + @ApiStatus.Internal + public static void onSoundBatchResume() { + if (!soundsPaused) { + return; + } + final Minecraft mc = Minecraft.getMinecraft(); + if (mc == null || mc.renderGlobal == null + || mc.theWorld == null + || mc.thePlayer == null + || mc.theWorld.provider == null) { + return; + } + soundsPaused = false; + + if (!(mc.isSingleplayer() && !mc.getIntegratedServer() + .getPublic())) { + return; + } + final long now = System.currentTimeMillis(); + final long pauseDurationMs = now - pauseTimeMs; + + // We manipulate server state here, because we've checked this is singleplayer pausing. + GTMusicSystem.ServerSystem.onPauseMs(pauseDurationMs); + musicSources.forEach((uuid, source) -> { source.startedPlayingAtMs += pauseDurationMs; }); + activelyPlayingMusic.forEach((uuid, data) -> { + data.originalStartTime += pauseDurationMs; + data.clientReferenceStartTime += pauseDurationMs; + }); + + } + } + + private static final Object2IntOpenHashMap musicRecordDurations = new Object2IntOpenHashMap<>(); + private static volatile boolean musicRecordsInitialized; + + /** For GSON consumption */ + public static class SoundDurationsJson { + + public Map soundDurationsMs = new TreeMap<>(); + } + + public static Object2IntOpenHashMap getMusicRecordDurations() { + if (musicRecordsInitialized) { + return musicRecordDurations; + } + // double-checked locking for efficiency + synchronized (musicRecordDurations) { + if (musicRecordsInitialized) { + return musicRecordDurations; + } + + final Gson gson = new Gson(); + + try { + final ArrayList candidates = Collections.list( + GTMusicSystem.class.getClassLoader() + .getResources("soundmeta/durations.json")); + final Path configPath = Loader.instance() + .getConfigDir() + .toPath() + .resolve("soundmeta") + .resolve("durations.json"); + if (Files.exists(configPath)) { + candidates.add( + configPath.toUri() + .toURL()); + } + for (final URL url : candidates) { + try { + final String objectJson = IOUtils.toString(url); + final SoundDurationsJson object = gson.fromJson(objectJson, SoundDurationsJson.class); + if (object == null || object.soundDurationsMs == null || object.soundDurationsMs.isEmpty()) { + continue; + } + for (final var entry : object.soundDurationsMs.entrySet()) { + musicRecordDurations.put( + new ResourceLocation(entry.getKey()), + entry.getValue() + .intValue()); + } + } catch (Exception e) { + GTMod.GT_FML_LOGGER.error("Could not parse sound durations from {}", url, e); + } + } + } catch (IOException e) { + throw new RuntimeException(e); + } + + musicRecordsInitialized = true; + return musicRecordDurations; + } + } + +} diff --git a/src/main/java/gregtech/api/util/GTOreDictUnificator.java b/src/main/java/gregtech/api/util/GTOreDictUnificator.java new file mode 100644 index 0000000000..6168b03211 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTOreDictUnificator.java @@ -0,0 +1,578 @@ +package gregtech.api.util; + +import static gregtech.api.enums.GTValues.E; +import static gregtech.api.enums.GTValues.M; +import static gregtech.api.enums.GTValues.W; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import javax.annotation.Nullable; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.ItemData; +import gregtech.api.objects.MaterialStack; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; +import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + *

+ * This is the Core of my OreDict Unification Code + *

+ * If you just want to use this to unificate your Items, then use the Function in the GregTechAPI File + *

+ * P.S. It is intended to be named "Unificator" and not "Unifier", because that sounds more awesome. + */ +public class GTOreDictUnificator { + + private static final Map sName2StackMap = new HashMap<>(); + private static final Map sItemStack2DataMap = new Object2ObjectOpenCustomHashMap<>( + GTItemStack.ITEMSTACK_HASH_STRATEGY2); + private static final Map> sUnificationTable = new Object2ObjectOpenCustomHashMap<>( + GTItemStack.ITEMSTACK_HASH_STRATEGY2); + private static final Set sNoUnificationList = new ObjectOpenCustomHashSet<>( + GTItemStack.ITEMSTACK_HASH_STRATEGY2); + private static int isRegisteringOre = 0, isAddingOre = 0; + private static boolean mRunThroughTheList = true; + + static { + GregTechAPI.sItemStackMappings.add(sItemStack2DataMap); + GregTechAPI.sItemStackMappings.add(sUnificationTable); + } + + /** + * The Blacklist just prevents the Item from being unificated into something else. Useful if you have things like + * the Industrial Diamond, which is better than regular Diamond, but also usable in absolutely all Diamond Recipes. + */ + public static void addToBlacklist(ItemStack aStack) { + if (GTUtility.isStackValid(aStack) && !GTUtility.isStackInStackSet(aStack, sNoUnificationList)) + sNoUnificationList.add(aStack); + } + + public static boolean isBlacklisted(ItemStack aStack) { + return GTUtility.isStackInStackSet(aStack, sNoUnificationList); + } + + public static void add(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack) { + set(aPrefix, aMaterial, aStack, false, false); + } + + public static void set(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack) { + set(aPrefix, aMaterial, aStack, true, false); + } + + public static void set(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack, boolean aOverwrite, + boolean aAlreadyRegistered) { + if (aMaterial == null || aPrefix == null + || GTUtility.isStackInvalid(aStack) + || Items.feather.getDamage(aStack) == W) return; + isAddingOre++; + aStack = GTUtility.copyAmount(1, aStack); + if (!aAlreadyRegistered) registerOre(aPrefix.get(aMaterial), aStack); + addAssociation(aPrefix, aMaterial, aStack, isBlacklisted(aStack)); + if (aOverwrite || GTUtility.isStackInvalid( + sName2StackMap.get( + aPrefix.get(aMaterial) + .toString()))) + sName2StackMap.put( + aPrefix.get(aMaterial) + .toString(), + aStack); + isAddingOre--; + } + + public static ItemStack getFirstOre(Object aName, long aAmount) { + if (GTUtility.isStringInvalid(aName)) return null; + ItemStack tStack = sName2StackMap.get(aName.toString()); + if (GTUtility.isStackValid(tStack)) return GTUtility.copyAmount(aAmount, tStack); + return GTUtility.copyAmount(aAmount, getOresImmutable(aName).toArray()); + } + + public static ItemStack get(Object aName, long aAmount) { + return get(aName, null, aAmount, true, true); + } + + public static ItemStack get(Object aName, ItemStack aReplacement, long aAmount) { + return get(aName, aReplacement, aAmount, true, true); + } + + public static ItemStack get(OrePrefixes aPrefix, Object aMaterial, long aAmount) { + return get(aPrefix, aMaterial, null, aAmount); + } + + public static ItemStack get(OrePrefixes aPrefix, Object aMaterial, ItemStack aReplacement, long aAmount) { + if (OrePrefixes.mPreventableComponents.contains(aPrefix) && aPrefix.mDisabledItems.contains(aMaterial)) + return aReplacement; + return get(aPrefix.get(aMaterial), aReplacement, aAmount, false, true); + } + + public static ItemStack get(OrePrefixes aPrefix, Object aMaterial, long aAmount, boolean aNoInvalidAmounts) { + if (OrePrefixes.mPreventableComponents.contains(aPrefix) && aPrefix.mDisabledItems.contains(aMaterial)) + return null; + return get(aPrefix.get(aMaterial), null, aAmount, false, aNoInvalidAmounts); + } + + public static ItemStack get(Object aName, ItemStack aReplacement, long aAmount, boolean aMentionPossibleTypos, + boolean aNoInvalidAmounts) { + if (aNoInvalidAmounts && aAmount < 1) return null; + final ItemStack stackFromName = sName2StackMap.get(aName.toString()); + if (stackFromName != null) return GTUtility.copyAmount(aAmount, stackFromName); + if (aMentionPossibleTypos) { + GTLog.err.println("Unknown Key for Unification, Typo? " + aName); + } + final ItemStack stackFirstOre = getFirstOre(aName, aAmount); + if (stackFirstOre != null) return GTUtility.copyAmount(aAmount, stackFirstOre); + return GTUtility.copyAmount(aAmount, aReplacement); + } + + public static ItemStack[] setStackArray(boolean aUseBlackList, ItemStack... aStacks) { + for (int i = 0; i < aStacks.length; i++) aStacks[i] = get(aUseBlackList, GTUtility.copyOrNull(aStacks[i])); + return aStacks; + } + + public static ItemStack[] getStackArray(boolean aUseBlackList, Object... aStacks) { + ItemStack[] rStacks = new ItemStack[aStacks.length]; + for (int i = 0; i < aStacks.length; i++) { + rStacks[i] = get(aUseBlackList, GTUtility.copy(aStacks[i]), true); + } + return rStacks; + } + + public static ItemStack setStack(ItemStack aStack) { + return setStack(true, aStack); + } + + public static ItemStack setStack(boolean aUseBlackList, ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return aStack; + ItemStack tStack = get(aUseBlackList, aStack); + if (GTUtility.areStacksEqual(aStack, tStack)) return aStack; + aStack.func_150996_a(tStack.getItem()); + Items.feather.setDamage(aStack, Items.feather.getDamage(tStack)); + return aStack; + } + + public static ItemStack get(ItemStack aStack) { + return get(true, aStack); + } + + public static ItemStack get(boolean aUseBlackList, ItemStack aStack) { + return get(aUseBlackList, aStack, false); + } + + /** + * @param unsafe If true, it does not limit stack size by 64. + */ + public static ItemStack get(boolean aUseBlackList, ItemStack aStack, boolean unsafe) { + if (GTUtility.isStackInvalid(aStack)) return null; + ItemData tPrefixMaterial = getAssociation(aStack); + if (tPrefixMaterial == null || !tPrefixMaterial.hasValidPrefixMaterialData() + || (aUseBlackList && tPrefixMaterial.mBlackListed)) return GTUtility.copyOrNull(aStack); + if (aUseBlackList && !GregTechAPI.sUnificationEntriesRegistered && isBlacklisted(aStack)) { + tPrefixMaterial.mBlackListed = true; + return GTUtility.copyOrNull(aStack); + } + if (tPrefixMaterial.mUnificationTarget == null) + tPrefixMaterial.mUnificationTarget = sName2StackMap.get(tPrefixMaterial.toString()); + ItemStack rStack = tPrefixMaterial.mUnificationTarget; + if (GTUtility.isStackInvalid(rStack)) return GTUtility.copyOrNull(aStack); + ItemStack newStack; + if (unsafe) { + newStack = GTUtility.copyAmountUnsafe(aStack.stackSize, rStack); + } else { + newStack = GTUtility.copyAmount(aStack.stackSize, rStack); + } + // NBT is assigned by reference here, so mutating it may have unexpected side effects. + newStack.setTagCompound(aStack.getTagCompound()); + return newStack; + } + + /** + * Doesn't copy the returned stack or set quantity. Be careful and do not mutate it; intended only to optimize + * comparisons + */ + public static ItemStack get_nocopy(ItemStack aStack) { + return get_nocopy(true, aStack); + } + + /** + * Doesn't copy the returned stack or set quantity. Be careful and do not mutate it; intended only to optimize + * comparisons + */ + static ItemStack get_nocopy(boolean aUseBlackList, ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return null; + ItemData tPrefixMaterial = getAssociation(aStack); + if (tPrefixMaterial == null || !tPrefixMaterial.hasValidPrefixMaterialData() + || (aUseBlackList && tPrefixMaterial.mBlackListed)) return aStack; + if (aUseBlackList && !GregTechAPI.sUnificationEntriesRegistered && isBlacklisted(aStack)) { + tPrefixMaterial.mBlackListed = true; + return aStack; + } + if (tPrefixMaterial.mUnificationTarget == null) + tPrefixMaterial.mUnificationTarget = sName2StackMap.get(tPrefixMaterial.toString()); + ItemStack rStack = tPrefixMaterial.mUnificationTarget; + if (GTUtility.isStackInvalid(rStack)) return aStack; + + // Yes, == and not .equals(). + // This check is primarily intended to optimize for the case where both rStack and aStack + // do not have NBT, and so we would be comparing null == null. + // + // Even if aStack and rStack may have equal NBT, we prefer to do an inexpensive + // new ItemStack() over the potentially expensive NBTTagCompound.equals(). + if (aStack.getTagCompound() == rStack.getTagCompound()) { + // Warning: rStack's stack size may not be equal to aStack's stack size. + return rStack; + } + + // Okay, okay, I lied, we actually do need to make a copy. + // This is to fix a long-standing bug where we were mutating NBT directly on rStack, + // which had unexpected and unpredictable ripple effects. + // + // We will do some custom copying here, to avoid ItemStack.copy(), + // which calls the potentially expensive NBTTagCompound.copy() + // NBT is assigned by reference here, so mutating it may have unexpected side effects. + ItemStack newStack = new ItemStack(rStack.getItem(), aStack.stackSize, Items.feather.getDamage(rStack)); + newStack.setTagCompound(aStack.getTagCompound()); + return newStack; + } + + /** + * Compares the first argument against an already-unificated second argument as if aUseBlackList was both true and + * false. + */ + public static boolean isInputStackEqual(ItemStack aStack, ItemStack unified_tStack) { + if (GTUtility.isStackInvalid(aStack)) return false; + return isInputStackEqual(aStack, getAssociation(aStack), unified_tStack); + } + + /** + * Compares the first argument against an already-unificated second argument as if aUseBlackList was both true and + * false. + */ + public static boolean isInputStackEqual(ItemStack aStack, ItemData aStackPrefixData, ItemStack unified_tStack) { + boolean alreadyCompared = false; + if (GTUtility.isStackInvalid(aStack)) return false; + ItemStack rStack = null; + if (aStackPrefixData == null || !aStackPrefixData.hasValidPrefixMaterialData()) + return GTUtility.areStacksEqual(aStack, unified_tStack, true); + else if (aStackPrefixData.mBlackListed) { + if (GTUtility.areStacksEqual(aStack, unified_tStack, true)) return true; + else alreadyCompared = true; + } + if (!alreadyCompared && !GregTechAPI.sUnificationEntriesRegistered && isBlacklisted(aStack)) { + aStackPrefixData.mBlackListed = true; + if (GTUtility.areStacksEqual(aStack, unified_tStack, true)) return true; + else alreadyCompared = true; + } + if (aStackPrefixData.mUnificationTarget == null) + aStackPrefixData.mUnificationTarget = sName2StackMap.get(aStackPrefixData.toString()); + rStack = aStackPrefixData.mUnificationTarget; + if (GTUtility.isStackInvalid(rStack)) + return !alreadyCompared && GTUtility.areStacksEqual(aStack, unified_tStack, true); + return GTUtility.areStacksEqual(rStack, unified_tStack, true); + } + + public static List getNonUnifiedStacks(Object obj) { + if (sUnificationTable.isEmpty() && !sItemStack2DataMap.isEmpty()) { + // use something akin to double check lock. this synchronization overhead is causing lag whenever my + // 5900x tries to do NEI lookup + synchronized (sUnificationTable) { + if (sUnificationTable.isEmpty() && !sItemStack2DataMap.isEmpty()) { + for (ItemStack tGTStack0 : sItemStack2DataMap.keySet()) { + ItemStack tStack0 = GTItemStack.internalCopyStack(tGTStack0); + ItemStack tStack1 = get_nocopy(false, tStack0); + if (!GTUtility.areStacksEqual(tStack0, tStack1)) { + List list = sUnificationTable.computeIfAbsent(tStack1, k -> new ArrayList<>()); + // greg's original code tries to dedupe the list using List#contains, which won't work + // on vanilla ItemStack. I removed it since it never worked and can be slow. + 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 rList = new ArrayList<>(); + for (ItemStack aStack : aStacks) { + if (aStack == null) continue; + rList.add(aStack); + List tList = sUnificationTable.get(aStack); + if (tList != null) { + for (ItemStack tStack : tList) { + ItemStack tStack1 = GTUtility.copyAmount(aStack.stackSize, tStack); + rList.add(tStack1); + } + } + } + return rList; + } + + public static void addItemData(ItemStack aStack, ItemData aData) { + if (GTUtility.isStackValid(aStack) && getItemData(aStack) == null && aData != null) setItemData(aStack, aData); + } + + public static void addItemDataFromInputs(ItemStack output, Object... inputs) { + int length = inputs.length; + ItemData[] tData = new ItemData[length]; + for (int i = 0; i < length; i++) { + if (inputs[i] instanceof ItemStack) { + tData[i] = GTOreDictUnificator.getItemData((ItemStack) inputs[i]); + } else if (inputs[i] instanceof ItemData) { + tData[i] = (ItemData) inputs[i]; + } else { + throw new IllegalArgumentException(); + } + } + if (GTUtility.arrayContainsNonNull(tData)) { + GTOreDictUnificator.addItemData(output, new ItemData(tData)); + } + } + + public static void setItemData(ItemStack aStack, ItemData aData) { + if (GTUtility.isStackInvalid(aStack) || aData == null) return; + ItemData tData = getItemData(aStack); + if (tData == null || !tData.hasValidPrefixMaterialData()) { + if (tData != null) for (Object tObject : tData.mExtraData) + if (!aData.mExtraData.contains(tObject)) aData.mExtraData.add(tObject); + if (aStack.stackSize > 1) { + if (aData.mMaterial != null) aData.mMaterial.mAmount /= aStack.stackSize; + for (MaterialStack tMaterial : aData.mByProducts) tMaterial.mAmount /= aStack.stackSize; + aStack = GTUtility.copyAmount(1, aStack); + } + sItemStack2DataMap.put(aStack, aData); + if (aData.hasValidMaterialData()) { + long tValidMaterialAmount = aData.mMaterial.mMaterial.contains(SubTag.NO_RECYCLING) ? 0 + : aData.mMaterial.mAmount >= 0 ? aData.mMaterial.mAmount : M; + for (MaterialStack tMaterial : aData.mByProducts) + tValidMaterialAmount += tMaterial.mMaterial.contains(SubTag.NO_RECYCLING) ? 0 + : tMaterial.mAmount >= 0 ? tMaterial.mAmount : M; + if (tValidMaterialAmount < M) GTModHandler.addToRecyclerBlackList(aStack); + } + if (mRunThroughTheList) { + if (GregTechAPI.sLoadStarted) { + mRunThroughTheList = false; + for (Entry tEntry : sItemStack2DataMap.entrySet()) if (!tEntry.getValue() + .hasValidPrefixData() || tEntry.getValue().mPrefix.mAllowNormalRecycling) + GTRecipeRegistrator.registerMaterialRecycling( + GTItemStack.internalCopyStack(tEntry.getKey()), + tEntry.getValue()); + } + } else { + if (!aData.hasValidPrefixData() || aData.mPrefix.mAllowNormalRecycling) + GTRecipeRegistrator.registerMaterialRecycling(aStack, aData); + } + } else { + for (Object tObject : aData.mExtraData) + if (!tData.mExtraData.contains(tObject)) tData.mExtraData.add(tObject); + } + } + + public static void removeItemData(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) { + return; + } + sItemStack2DataMap.remove(aStack); + } + + public static void addAssociation(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack, + boolean aBlackListed) { + if (aPrefix == null || aMaterial == null || GTUtility.isStackInvalid(aStack)) return; + if (Items.feather.getDamage(aStack) == W) for (byte i = 0; i < 16; i++) + setItemData(GTUtility.copyAmountAndMetaData(1, i, aStack), new ItemData(aPrefix, aMaterial, aBlackListed)); + setItemData(aStack, new ItemData(aPrefix, aMaterial, aBlackListed)); + } + + @Nullable + public static ItemData getItemData(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return null; + ItemData rData = sItemStack2DataMap.get(aStack); + if (rData == null) { // Try the lookup again but with wildcard damage value + rData = sItemStack2DataMap.get(GTItemStack.internalCopyStack(aStack, true)); + } + return rData; + } + + @Nullable + public static ItemData getAssociation(ItemStack aStack) { + ItemData rData = getItemData(aStack); + return rData != null && rData.hasValidPrefixMaterialData() ? rData : null; + } + + public static boolean isItemStackInstanceOf(ItemStack aStack, Object aName) { + if (GTUtility.isStringInvalid(aName) || GTUtility.isStackInvalid(aStack)) return false; + for (ItemStack tOreStack : getOresImmutable(aName.toString())) + if (GTUtility.areStacksEqual(tOreStack, aStack, true)) return true; + return false; + } + + public static boolean isItemStackDye(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return false; + + for (Dyes tDye : Dyes.VALUES) if (isItemStackInstanceOf(aStack, tDye.toString())) return true; + + return false; + } + + public static boolean registerOre(OrePrefixes aPrefix, Object aMaterial, ItemStack aStack) { + return registerOre(aPrefix.get(aMaterial), aStack); + } + + public static boolean registerOre(Object aName, ItemStack aStack) { + if (aName == null || GTUtility.isStackInvalid(aStack)) return false; + + String tName = aName.toString(); + + if (GTUtility.isStringInvalid(tName)) return false; + + for (ItemStack itemStack : getOresImmutable(tName)) + if (GTUtility.areStacksEqual(itemStack, aStack, true)) return false; + + isRegisteringOre++; + OreDictionary.registerOre(tName, GTUtility.copyAmount(1, aStack)); + isRegisteringOre--; + return true; + } + + public static boolean isRegisteringOres() { + return isRegisteringOre > 0; + } + + public static boolean isAddingOres() { + return isAddingOre > 0; + } + + public static void resetUnificationEntries() { + for (ItemData tPrefixMaterial : sItemStack2DataMap.values()) tPrefixMaterial.mUnificationTarget = null; + } + + public static ItemStack getGem(MaterialStack aMaterial) { + return aMaterial == null ? null : getGem(aMaterial.mMaterial, aMaterial.mAmount); + } + + public static ItemStack getGem(Materials aMaterial, OrePrefixes aPrefix) { + return aMaterial == null ? null : getGem(aMaterial, aPrefix.mMaterialAmount); + } + + public static ItemStack getGem(Materials aMaterial, long aMaterialAmount) { + ItemStack rStack = null; + if (((aMaterialAmount >= M))) rStack = get(OrePrefixes.gem, aMaterial, aMaterialAmount / M); + if (rStack == null) { + if ((((aMaterialAmount * 2) % M == 0) || aMaterialAmount >= M * 16)) + rStack = get(OrePrefixes.gemFlawed, aMaterial, (aMaterialAmount * 2) / M); + if ((((aMaterialAmount * 4) >= M))) + rStack = get(OrePrefixes.gemChipped, aMaterial, (aMaterialAmount * 4) / M); + } + return rStack; + } + + public static ItemStack getDust(MaterialStack aMaterial) { + return aMaterial == null ? null : getDust(aMaterial.mMaterial, aMaterial.mAmount); + } + + public static ItemStack getDust(Materials aMaterial, OrePrefixes aPrefix) { + return aMaterial == null ? null : getDust(aMaterial, aPrefix.mMaterialAmount); + } + + public static ItemStack getDust(Materials aMaterial, long aMaterialAmount) { + if (aMaterialAmount <= 0) return null; + ItemStack rStack = null; + if (((aMaterialAmount % M == 0) || aMaterialAmount >= M * 16)) + rStack = get(OrePrefixes.dust, aMaterial, aMaterialAmount / M); + if (rStack == null && (((aMaterialAmount * 4) % M == 0) || aMaterialAmount >= M * 8)) + rStack = get(OrePrefixes.dustSmall, aMaterial, (aMaterialAmount * 4) / M); + if (rStack == null && (((aMaterialAmount * 9) >= M))) + rStack = get(OrePrefixes.dustTiny, aMaterial, (aMaterialAmount * 9) / M); + return rStack; + } + + public static ItemStack getIngot(MaterialStack aMaterial) { + return aMaterial == null ? null : getIngot(aMaterial.mMaterial, aMaterial.mAmount); + } + + public static ItemStack getIngot(Materials aMaterial, OrePrefixes aPrefix) { + return aMaterial == null ? null : getIngot(aMaterial, aPrefix.mMaterialAmount); + } + + public static ItemStack getIngot(Materials aMaterial, long aMaterialAmount) { + if (aMaterialAmount <= 0) return null; + ItemStack rStack = null; + if (((aMaterialAmount % (M * 9) == 0 && aMaterialAmount / (M * 9) > 1) || aMaterialAmount >= M * 72)) + rStack = get(OrePrefixes.block, aMaterial, aMaterialAmount / (M * 9)); + if (rStack == null && ((aMaterialAmount % M == 0) || aMaterialAmount >= M * 8)) + rStack = get(OrePrefixes.ingot, aMaterial, aMaterialAmount / M); + if (rStack == null && (((aMaterialAmount * 9) >= M))) + rStack = get(OrePrefixes.nugget, aMaterial, (aMaterialAmount * 9) / M); + return rStack; + } + + public static ItemStack getIngotOrDust(Materials aMaterial, long aMaterialAmount) { + if (aMaterialAmount <= 0) return null; + ItemStack rStack = getIngot(aMaterial, aMaterialAmount); + if (rStack == null) rStack = getDust(aMaterial, aMaterialAmount); + return rStack; + } + + public static ItemStack getIngotOrDust(MaterialStack aMaterial) { + ItemStack rStack = getIngot(aMaterial); + if (rStack == null) rStack = getDust(aMaterial); + return rStack; + } + + public static ItemStack getDustOrIngot(Materials aMaterial, long aMaterialAmount) { + if (aMaterialAmount <= 0) return null; + ItemStack rStack = getDust(aMaterial, aMaterialAmount); + if (rStack == null) rStack = getIngot(aMaterial, aMaterialAmount); + return rStack; + } + + public static ItemStack getDustOrIngot(MaterialStack aMaterial) { + ItemStack rStack = getDust(aMaterial); + if (rStack == null) rStack = getIngot(aMaterial); + return rStack; + } + + /** + * @return a Copy of the OreDictionary.getOres() List + */ + public static ArrayList getOres(OrePrefixes aPrefix, Object aMaterial) { + return getOres(aPrefix.get(aMaterial)); + } + + /** + * @return a Copy of the OreDictionary.getOres() List + */ + public static ArrayList getOres(Object aOreName) { + String aName = aOreName == null ? E : aOreName.toString(); + ArrayList rList = new ArrayList<>(); + if (GTUtility.isStringValid(aName)) rList.addAll(OreDictionary.getOres(aName)); + return rList; + } + + /** + * Fast version of {@link #getOres(Object)}, which doesn't call + * {@link System#arraycopy(Object, int, Object, int, int)} in {@link ArrayList#addAll} + */ + public static List getOresImmutable(@Nullable Object aOreName) { + String aName = aOreName == null ? E : aOreName.toString(); + + return GTUtility.isStringValid(aName) ? Collections.unmodifiableList(OreDictionary.getOres(aName)) + : Collections.emptyList(); + } +} diff --git a/src/main/java/gregtech/api/util/GTPlayedSound.java b/src/main/java/gregtech/api/util/GTPlayedSound.java new file mode 100644 index 0000000000..0b527136b3 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTPlayedSound.java @@ -0,0 +1,31 @@ +package gregtech.api.util; + +import net.minecraft.util.ResourceLocation; + +public class GTPlayedSound { + + public final String mSoundName; + public final int mX, mY, mZ; + + public GTPlayedSound(ResourceLocation aSoundResourceLocation, double aX, double aY, double aZ) { + mSoundName = aSoundResourceLocation.toString(); + mX = (int) aX; + mY = (int) aY; + mZ = (int) aZ; + } + + @Override + public boolean equals(Object aObject) { + if (aObject instanceof GTPlayedSound) { + return ((GTPlayedSound) aObject).mX == mX && ((GTPlayedSound) aObject).mY == mY + && ((GTPlayedSound) aObject).mZ == mZ + && ((GTPlayedSound) aObject).mSoundName.equals(mSoundName); + } + return false; + } + + @Override + public int hashCode() { + return mX + mY + mZ + mSoundName.hashCode(); + } +} diff --git a/src/main/java/gregtech/api/util/GTRecipe.java b/src/main/java/gregtech/api/util/GTRecipe.java new file mode 100644 index 0000000000..7aa3dfbdfb --- /dev/null +++ b/src/main/java/gregtech/api/util/GTRecipe.java @@ -0,0 +1,1366 @@ +package gregtech.api.util; + +import static gregtech.api.enums.GTValues.D2; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Objects; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; + +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.ModContainer; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.logic.FluidInventoryLogic; +import gregtech.api.logic.ItemInventoryLogic; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEHatchMultiInput; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeCategory; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.RecipeMetadataKey; +import gregtech.api.recipe.metadata.EmptyRecipeMetadataStorage; +import gregtech.api.recipe.metadata.IRecipeMetadataStorage; +import gregtech.api.util.extensions.ArrayExt; +import gregtech.api.util.item.ItemHolder; +import gregtech.common.tileentities.machines.MTEHatchInputBusME; +import gregtech.common.tileentities.machines.MTEHatchInputME; +import gregtech.nei.GTNEIDefaultHandler; +import ic2.core.Ic2Items; +import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import it.unimi.dsi.fastutil.objects.Reference2LongArrayMap; +import it.unimi.dsi.fastutil.objects.Reference2LongMap; +import it.unimi.dsi.fastutil.objects.Reference2LongOpenHashMap; + +public class GTRecipe implements Comparable { + + private static ItemStack dataStick; + private static ItemStack dataOrb; + private static ItemStack ic2FluidCell; + + public static void setItemStacks() { + ic2FluidCell = Ic2Items.FluidCell.copy(); + dataStick = ItemList.Tool_DataStick.get(1L); + dataOrb = ItemList.Tool_DataOrb.get(1L); + } + + /** + * If you want to change the Output, feel free to modify or even replace the whole ItemStack Array, for Inputs, + * please add a new Recipe, because of the HashMaps. + */ + public ItemStack[] mInputs, mOutputs; + /** + * If you want to change the Output, feel free to modify or even replace the whole ItemStack Array, for Inputs, + * please add a new Recipe, because of the HashMaps. + */ + public FluidStack[] mFluidInputs, mFluidOutputs; + /** + * If you changed the amount of Array-Items inside the Output Array then the length of this Array must be larger or + * equal to the Output Array. A chance of 10000 equals 100% + */ + public int[] mChances; + /** + * An Item that needs to be inside the Special Slot, like for example the Copy Slot inside the Printer. This is only + * useful for Fake Recipes in NEI, since findRecipe() and containsInput() don't give a shit about this Field. Lists + * are also possible. + */ + public Object mSpecialItems; + + public int mDuration, mEUt, mSpecialValue; + /** + * Use this to just disable a specific Recipe, but the Configuration enables that already for every single Recipe. + */ + public boolean mEnabled = true; + /** + * If this Recipe is hidden from NEI + */ + public boolean mHidden = false; + /** + * If this Recipe is Fake and therefore doesn't get found by the findRecipe Function (It is still in the HashMaps, + * so that containsInput does return T on those fake Inputs) + */ + public boolean mFakeRecipe = false; + /** + * If this Recipe can be stored inside a Machine in order to make Recipe searching more Efficient by trying the + * previously used Recipe first. In case you have a Recipe Map overriding things and returning one time use Recipes, + * you have to set this to F. + */ + public boolean mCanBeBuffered = true; + /** + * If this Recipe needs the Output Slots to be completely empty. Needed in case you have randomised Outputs + */ + public boolean mNeedsEmptyOutput = false; + /** + * If this is set to true, NBT equality is required for recipe check. + */ + public boolean isNBTSensitive = false; + /** + * Used for describing recipes that do not fit the default recipe pattern (for example Large Boiler Fuels) + */ + private String[] neiDesc = null; + /** + * Holds a set of metadata for this recipe. + */ + @Nonnull + private final IRecipeMetadataStorage metadataStorage; + /** + * Category this recipe belongs to. Recipes belonging to recipemap are forced to have non-null category when added, + * otherwise it can be null. + */ + private RecipeCategory recipeCategory; + /** + * Stores which mod added this recipe + */ + public List owners = new ArrayList<>(); + /** + * Stores stack traces where this recipe was added + */ + // BW wants to overwrite it, so no final + public List> stackTraces = new ArrayList<>(); + + /** Used for simple cache validation */ + private ItemStack[] inputsAtCacheTime = null; + /** Unified and type-merged stacks of mInputs, each item is guaranteed to be unique */ + private RecipeItemInput[] mergedInputCache = null; + private static final RecipeItemInput[] EMPTY_INPUT_CACHE = new RecipeItemInput[0]; + + /** A single recipe input, used for an internal cache to speed up recipe matching */ + public static final class RecipeItemInput { + + /** Item count is ignored on this stack, do not mutate it either */ + public final ItemStack unifiedStack; + /** Number of input items required */ + public long inputAmount; + /** True if the input is NBT-sensitive */ + public final boolean usesNbtMatching; + + public RecipeItemInput(ItemStack stack, boolean recipeIsNBTSensitive) { + Objects.requireNonNull(stack); + this.inputAmount = stack.stackSize; + final boolean stackNeedsNBT = GTRecipe.shouldCheckNBT(stack); + this.usesNbtMatching = recipeIsNBTSensitive | stackNeedsNBT; + if (stackNeedsNBT) { + this.unifiedStack = stack; + } else { + this.unifiedStack = GTOreDictUnificator.get_nocopy(true, stack); + if (!this.usesNbtMatching) { + this.unifiedStack.setTagCompound(null); + } + } + } + + /** + * @return True if the passed in stack is of the same item type as this input (respecting + * {@link RecipeItemInput#usesNbtMatching}). + */ + public boolean matchesType(final ItemStack other) { + return GTUtility.areStacksEqual(this.unifiedStack, other, !usesNbtMatching); + } + + /** + * @return True if the given input+oredict data for that input can be used as a valid recipe ingredient. + */ + public boolean matchesRecipe(final ItemData oredictOther, final ItemStack other) { + if (usesNbtMatching) { + return GTUtility.areStacksEqual(this.unifiedStack, other, false); + } else { + return GTOreDictUnificator.isInputStackEqual(other, oredictOther, unifiedStack); + } + } + } + + private GTRecipe(GTRecipe aRecipe, boolean shallow) { + mInputs = shallow ? aRecipe.mInputs : GTUtility.copyItemArray(aRecipe.mInputs); + mOutputs = shallow ? aRecipe.mOutputs : GTUtility.copyItemArray(aRecipe.mOutputs); + mSpecialItems = aRecipe.mSpecialItems; + mChances = aRecipe.mChances; + mFluidInputs = shallow ? aRecipe.mFluidInputs : GTUtility.copyFluidArray(aRecipe.mFluidInputs); + mFluidOutputs = shallow ? aRecipe.mFluidOutputs : GTUtility.copyFluidArray(aRecipe.mFluidOutputs); + mDuration = aRecipe.mDuration; + mSpecialValue = aRecipe.mSpecialValue; + mEUt = aRecipe.mEUt; + mNeedsEmptyOutput = aRecipe.mNeedsEmptyOutput; + isNBTSensitive = aRecipe.isNBTSensitive; + mCanBeBuffered = aRecipe.mCanBeBuffered; + mFakeRecipe = aRecipe.mFakeRecipe; + mEnabled = aRecipe.mEnabled; + mHidden = aRecipe.mHidden; + metadataStorage = EmptyRecipeMetadataStorage.INSTANCE; + owners = new ArrayList<>(aRecipe.owners); + reloadOwner(); + } + + /** + * Only for {@link GTRecipeBuilder}. + */ + GTRecipe(ItemStack[] mInputs, ItemStack[] mOutputs, FluidStack[] mFluidInputs, FluidStack[] mFluidOutputs, + int[] mChances, Object mSpecialItems, int mDuration, int mEUt, int mSpecialValue, boolean mEnabled, + boolean mHidden, boolean mFakeRecipe, boolean mCanBeBuffered, boolean mNeedsEmptyOutput, boolean nbtSensitive, + String[] neiDesc, @Nullable IRecipeMetadataStorage metadataStorage, RecipeCategory recipeCategory) { + this.mInputs = mInputs; + this.mOutputs = mOutputs; + this.mFluidInputs = mFluidInputs; + this.mFluidOutputs = mFluidOutputs; + this.mChances = mChances; + this.mSpecialItems = mSpecialItems; + this.mDuration = mDuration; + this.mEUt = mEUt; + this.mSpecialValue = mSpecialValue; + this.mEnabled = mEnabled; + this.mHidden = mHidden; + this.mFakeRecipe = mFakeRecipe; + this.mCanBeBuffered = mCanBeBuffered; + this.mNeedsEmptyOutput = mNeedsEmptyOutput; + this.isNBTSensitive = nbtSensitive; + this.neiDesc = neiDesc; + this.metadataStorage = metadataStorage == null ? EmptyRecipeMetadataStorage.INSTANCE : metadataStorage.copy(); + this.recipeCategory = recipeCategory; + + reloadOwner(); + } + + public GTRecipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, int[] aChances, + FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) { + if (aInputs == null) aInputs = new ItemStack[0]; + if (aOutputs == null) aOutputs = new ItemStack[0]; + if (aFluidInputs == null) aFluidInputs = new FluidStack[0]; + if (aFluidOutputs == null) aFluidOutputs = new FluidStack[0]; + if (aChances == null) aChances = new int[aOutputs.length]; + if (aChances.length < aOutputs.length) aChances = Arrays.copyOf(aChances, aOutputs.length); + + aInputs = ArrayExt.withoutTrailingNulls(aInputs, ItemStack[]::new); + aOutputs = ArrayExt.withoutTrailingNulls(aOutputs, ItemStack[]::new); + aFluidInputs = ArrayExt.withoutNulls(aFluidInputs, FluidStack[]::new); + aFluidOutputs = ArrayExt.withoutNulls(aFluidOutputs, FluidStack[]::new); + + GTOreDictUnificator.setStackArray(true, aInputs); + GTOreDictUnificator.setStackArray(true, aOutputs); + + for (ItemStack tStack : aOutputs) GTUtility.updateItemStack(tStack); + + for (int i = 0; i < aChances.length; i++) if (aChances[i] <= 0) aChances[i] = 10000; + for (int i = 0; i < aFluidInputs.length; i++) aFluidInputs[i] = aFluidInputs[i].copy(); + for (int i = 0; i < aFluidOutputs.length; i++) aFluidOutputs[i] = aFluidOutputs[i].copy(); + + if (aOptimize && aDuration >= 32) { + ArrayList tList = new ArrayList<>(); + tList.addAll(Arrays.asList(aInputs)); + tList.addAll(Arrays.asList(aOutputs)); + for (int i = 0; i < tList.size(); i++) if (tList.get(i) == null) tList.remove(i--); + + for (byte i = (byte) Math.min(64, aDuration / 16); i > 1; i--) if (aDuration / i >= 16) { + boolean temp = true; + for (ItemStack stack : tList) if (stack.stackSize % i != 0) { + temp = false; + break; + } + if (temp) for (FluidStack aFluidInput : aFluidInputs) if (aFluidInput.amount % i != 0) { + temp = false; + break; + } + if (temp) for (FluidStack aFluidOutput : aFluidOutputs) if (aFluidOutput.amount % i != 0) { + temp = false; + break; + } + if (temp) { + for (ItemStack itemStack : tList) itemStack.stackSize /= i; + for (FluidStack aFluidInput : aFluidInputs) aFluidInput.amount /= i; + for (FluidStack aFluidOutput : aFluidOutputs) aFluidOutput.amount /= i; + aDuration /= i; + } + } + } + + mInputs = aInputs; + mOutputs = aOutputs; + mSpecialItems = aSpecialItems; + mChances = aChances; + mFluidInputs = aFluidInputs; + mFluidOutputs = aFluidOutputs; + mDuration = aDuration; + mSpecialValue = aSpecialValue; + mEUt = aEUt; + metadataStorage = EmptyRecipeMetadataStorage.INSTANCE; + // checkCellBalance(); + reloadOwner(); + } + + // aSpecialValue = EU per Liter! If there is no Liquid for this Object, then it gets multiplied with 1000! + public GTRecipe(ItemStack aInput1, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, + int aSpecialValue, int aType) { + this( + true, + new ItemStack[] { aInput1 }, + new ItemStack[] { aOutput1, aOutput2, aOutput3, aOutput4 }, + null, + null, + null, + null, + 0, + 0, + Math.max(1, aSpecialValue)); + + if (mInputs.length > 0 && aSpecialValue > 0) { + switch (aType) { + // Diesel Generator + case 0 -> { + RecipeMaps.dieselFuels.addRecipe(this); + RecipeMaps.largeBoilerFakeFuels.getBackend() + .addDieselRecipe(this); + } + // Gas Turbine + case 1 -> RecipeMaps.gasTurbineFuels.addRecipe(this); + + // Thermal Generator + case 2 -> RecipeMaps.hotFuels.addRecipe(this); + + // Plasma Generator + case 4 -> RecipeMaps.plasmaFuels.addRecipe(this); + + // Magic Generator + case 5 -> RecipeMaps.magicFuels.addRecipe(this); + + // Fluid Generator. Usually 3. Every wrong Type ends up in the Semifluid Generator + default -> { + RecipeMaps.denseLiquidFuels.addRecipe(this); + RecipeMaps.largeBoilerFakeFuels.getBackend() + .addDenseLiquidRecipe(this); + } + } + } + } + + // Dummy GTRecipe maker... + public GTRecipe(ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, int[] aChances, + FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) { + this( + true, + aInputs, + aOutputs, + aSpecialItems, + aChances, + aFluidInputs, + aFluidOutputs, + aDuration, + aEUt, + aSpecialValue); + } + + /** + * Re-unificates all the items present in recipes. + */ + public static void reInit() { + GTLog.out.println("GTMod: Re-Unificating Recipes."); + for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { + map.getBackend() + .reInit(); + } + } + + public ItemStack getRepresentativeInput(int aIndex) { + if (aIndex < 0 || aIndex >= mInputs.length) return null; + return GTUtility.copyOrNull(mInputs[aIndex]); + } + + public ItemStack getOutput(int aIndex) { + if (aIndex < 0 || aIndex >= mOutputs.length) return null; + return GTUtility.copyOrNull(mOutputs[aIndex]); + } + + /** + * Dictates the ItemStacks displayed in the output slots of any NEI page handled by the default GT NEI handler. + * Override to make shown items differ from a GTRecipe's item output array + * + * @see GTNEIDefaultHandler + * @param i Slot index + * @return ItemStack to be displayed in the slot + */ + public ItemStack getRepresentativeOutput(int i) { + return getOutput(i); + } + + public int getOutputChance(int aIndex) { + if (mChances == null) return 10000; + if (aIndex < 0 || aIndex >= mChances.length) return 10000; + return mChances[aIndex]; + } + + public FluidStack getRepresentativeFluidInput(int aIndex) { + if (aIndex < 0 || aIndex >= mFluidInputs.length || mFluidInputs[aIndex] == null) return null; + return mFluidInputs[aIndex].copy(); + } + + public FluidStack getFluidOutput(int aIndex) { + if (aIndex < 0 || aIndex >= mFluidOutputs.length || mFluidOutputs[aIndex] == null) return null; + return mFluidOutputs[aIndex].copy(); + } + + public void checkCellBalance() { + if (!D2 || mInputs.length < 1) return; + + int tInputAmount = GTModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(mInputs); + int tOutputAmount = GTModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(mOutputs); + + if (tInputAmount < tOutputAmount) { + if (!Materials.Tin.contains(mInputs)) { + GTLog.err.println("You get more Cells, than you put in? There must be something wrong."); + new Exception().printStackTrace(GTLog.err); + } + } else if (tInputAmount > tOutputAmount) { + if (!Materials.Tin.contains(mOutputs)) { + GTLog.err.println("You get less Cells, than you put in? GT Machines usually don't destroy Cells."); + new Exception().printStackTrace(GTLog.err); + } + } + } + + public GTRecipe copy() { + return new GTRecipe(this, false); + } + + public GTRecipe copyShallow() { + return new GTRecipe(this, true); + } + + public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess, FluidStack[] aFluidInputs, + ItemStack... aInputs) { + return isRecipeInputEqual(aDecreaseStacksizeBySuccess, false, 1, aFluidInputs, aInputs); + } + + // For non-multiplied recipe amount values + public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess, boolean aDontCheckStackSizes, + FluidStack[] aFluidInputs, ItemStack... aInputs) { + return isRecipeInputEqual(aDecreaseStacksizeBySuccess, aDontCheckStackSizes, 1, aFluidInputs, aInputs); + } + + /** + * Okay, did some code archeology to figure out what's going on here. + * + *

+ * This variable was added in this + * commit, in order to fix the issues mentioned in the PR. + * + *

+ * It looks like it controls checking NBT. At this point, since we are still using universal fluid cells which store + * their fluids in NBT, it probably will not be safe to disable the NBT checks in the near future. Data sticks may + * be another case. Anyway, we probably can't get rid of this without some significant changes to clean up recipe + * inputs. + */ + public static boolean GTppRecipeHelper; + + /** + * @return Computes a (cached) array of all input items, combined by type into stacks. Do not mutate. + */ + private @NotNull RecipeItemInput @NotNull [] getCachedCombinedItemInputs() { + if (mergedInputCache != null) { + if (mInputs != inputsAtCacheTime) { + throw new IllegalStateException( + "Inputs to this recipe have been modified since first recipe match: " + this); + } + return mergedInputCache; + } + + synchronized (this) { + // In case another thread initialized it while this synchronized block was locked: + if (mergedInputCache != null) { + if (mInputs != inputsAtCacheTime) { + throw new IllegalStateException( + "Inputs to this recipe have been modified since first recipe match: " + this); + } + return mergedInputCache; + } + + final ItemStack[] inputs = mInputs; + inputsAtCacheTime = inputs; + if (inputs == null || inputs.length == 0) { + mergedInputCache = EMPTY_INPUT_CACHE; + return mergedInputCache; + } + final ObjectArrayList<@NotNull RecipeItemInput> newCache = ObjectArrayList + .wrap(new RecipeItemInput[inputs.length], 0); + for (final ItemStack itemStack : inputs) { + if (itemStack == null) continue; + final RecipeItemInput existingInput = newCache.stream() + .filter(existing -> existing.matchesType(itemStack)) + .findAny() + .orElse(null); + if (existingInput == null) { + newCache.add(new RecipeItemInput(itemStack, isNBTSensitive)); + } else { + existingInput.inputAmount = Math.addExact(existingInput.inputAmount, itemStack.stackSize); + } + } + final RecipeItemInput[] frozenCache = newCache.toArray(new RecipeItemInput[0]); + if (GregTechAPI.sFullLoadFinished) { + mergedInputCache = frozenCache; + } + return frozenCache; + } + } + + /** + * WARNING: Do not call this method with both {@code aDecreaseStacksizeBySuccess} and {@code aDontCheckStackSizes} + * set to {@code true}! You'll get weird behavior. + */ + public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess, boolean aDontCheckStackSizes, + int amountMultiplier, FluidStack[] aFluidInputs, ItemStack... aInputs) { + double maxParallel = maxParallelCalculatedByInputs(amountMultiplier, aFluidInputs, aInputs); + if (aDontCheckStackSizes) { + return maxParallel > 0; + } else if (maxParallel >= amountMultiplier) { + if (aDecreaseStacksizeBySuccess) { + consumeInput(amountMultiplier, aFluidInputs, aInputs); + } + return true; + } + return false; + } + + /** + * WARNING: Ensure that item inputs and fluid inputs are enough to be consumed with + * {@link #maxParallelCalculatedByInputs} before calling this method! + */ + public void consumeInput(int amountMultiplier, FluidStack[] aFluidInputs, ItemStack... aInputs) { + if (amountMultiplier <= 0) return; + + if (aFluidInputs != null) { + for (FluidStack recipeFluidCost : mFluidInputs) { + if (recipeFluidCost != null) { + long remainingCost = (long) recipeFluidCost.amount * amountMultiplier; + + for (FluidStack providedFluid : aFluidInputs) { + if (providedFluid != null && providedFluid.isFluidEqual(recipeFluidCost)) { + if (providedFluid.amount >= remainingCost) { + providedFluid.amount -= remainingCost; + break; + } else { + remainingCost -= providedFluid.amount; + providedFluid.amount = 0; + } + } + } + } + } + } + + if (aInputs == null || aInputs.length == 0) { + return; + } + + final ItemData[] unifiedProvidedInputs = new ItemData[aInputs.length]; + for (int i = 0; i < aInputs.length; i++) { + unifiedProvidedInputs[i] = GTOreDictUnificator.getAssociation(aInputs[i]); + } + final @NotNull RecipeItemInput @NotNull [] combinedInputs = getCachedCombinedItemInputs(); + + for (final RecipeItemInput recipeItemCost : combinedInputs) { + long remainingCost = recipeItemCost.inputAmount * amountMultiplier; + + for (int iProvided = 0; iProvided < aInputs.length && remainingCost > 0; iProvided++) { + final ItemStack providedItem = aInputs[iProvided]; + if (providedItem == null || providedItem.stackSize == 0) { + continue; + } + + final ItemData providedUnifiedItem = unifiedProvidedInputs[iProvided]; + if (!recipeItemCost.matchesRecipe(providedUnifiedItem, providedItem)) { + continue; + } + + if (providedItem.stackSize >= remainingCost) { + providedItem.stackSize -= (int) remainingCost; + break; + } else { + remainingCost -= providedItem.stackSize; + providedItem.stackSize = 0; + } + } + } + } + + /** + * Returns the number of parallel recipes, or 0 if recipe is not satisfied at all. 0 < number < 1 means that inputs + * are found but not enough. + */ + public double maxParallelCalculatedByInputs(int maxParallel, FluidStack[] aFluidInputs, ItemStack... aInputs) { + if (mInputs.length > 0 && aInputs == null) return 0; + if (mFluidInputs.length > 0 && aFluidInputs == null) return 0; + + double currentParallel = maxParallel; + + // We need to have any fluids inputs, otherwise the code below does nothing. The second check is always true + // because of early exit condition above. + if (mFluidInputs.length > 0 /* && aFluidInputs != null */) { + // Create map for fluid -> stored amount + Reference2LongMap fluidMap = new Reference2LongArrayMap<>(2); + Reference2LongMap fluidCost = new Reference2LongArrayMap<>(2); + for (FluidStack fluidStack : aFluidInputs) { + if (fluidStack == null) continue; + fluidMap.mergeLong(fluidStack.getFluid(), fluidStack.amount, Long::sum); + } + for (FluidStack fluidStack : mFluidInputs) { + if (fluidStack == null) continue; + fluidCost.mergeLong(fluidStack.getFluid(), fluidStack.amount, Long::sum); + } + + // Check how many parallels can it perform for each fluid + for (Reference2LongMap.Entry costEntry : fluidCost.reference2LongEntrySet()) { + if (costEntry.getLongValue() > 0) { + currentParallel = Math.min( + currentParallel, + (double) fluidMap.getOrDefault(costEntry.getKey(), 0L) / costEntry.getLongValue()); + } + if (currentParallel <= 0) { + return 0; + } + } + } + + if (mInputs.length > 0) { + final @NotNull RecipeItemInput @NotNull [] combinedInputs = getCachedCombinedItemInputs(); + + if (aInputs.length < combinedInputs.length) { + // Fewer item types provided than required by the recipe, making it impossible to satisfy. + return 0; + } + final ItemData[] unifiedProvidedInputs = new ItemData[aInputs.length]; + for (int i = 0; i < aInputs.length; i++) { + unifiedProvidedInputs[i] = GTOreDictUnificator.getAssociation(aInputs[i]); + } + + recipeItemLoop: for (final RecipeItemInput combinedInput : combinedInputs) { + double remainingCost = combinedInput.inputAmount * currentParallel; + long providedAmount = 0; + + for (int i = 0; i < unifiedProvidedInputs.length; i++) { + final ItemData providedUnifiedItem = unifiedProvidedInputs[i]; + final ItemStack providedItem = aInputs[i]; + if (!combinedInput.matchesRecipe(providedUnifiedItem, providedItem)) { + continue; + } + + providedAmount += providedItem.stackSize; + + if (providedAmount >= remainingCost) { + continue recipeItemLoop; + } + } + if (providedAmount == 0) { + return 0; + } + currentParallel = Math.min(currentParallel, (double) providedAmount / combinedInput.inputAmount); + } + } + return currentParallel; + } + + /** + * Please see JavaDoc on {@link #GTppRecipeHelper} for why this is here. + */ + private static boolean shouldCheckNBT(ItemStack item) { + if (GTppRecipeHelper) { + return GTUtility.areStacksEqual(item, ic2FluidCell, true) || GTUtility.areStacksEqual(item, dataStick, true) + || GTUtility.areStacksEqual(item, dataOrb, true); + } + return false; + } + + public boolean isRecipePossible(@Nullable ItemInventoryLogic itemInput, @Nullable FluidInventoryLogic fluidInput) { + return getAmountOfRecipesDone(itemInput, fluidInput, 1, true) > 0; + } + + public long getAmountOfRecipesDone(@Nullable ItemInventoryLogic itemInput, @Nullable FluidInventoryLogic fluidInput, + long maxParallel, boolean simulate) { + if (itemInput == null) { + itemInput = new ItemInventoryLogic(0); + } + + if (fluidInput == null) { + fluidInput = new FluidInventoryLogic(0, 0); + } + + itemInput.startRecipeCheck(); + Map recipeItems = getItemInputsAsItemMap(); + for (Entry entry : recipeItems.entrySet()) { + maxParallel = Math + .min(maxParallel, itemInput.calculateAmountOfTimesItemCanBeTaken(entry.getKey(), entry.getValue())); + } + + for (FluidStack fluid : mFluidInputs) { + if (fluid == null) continue; + maxParallel = Math + .min(maxParallel, fluidInput.calculateAmountOfTimesFluidCanBeTaken(fluid.getFluid(), fluid.amount)); + } + + if (simulate) { + itemInput.stopRecipeCheck(); + return maxParallel; + } + + for (Entry entry : recipeItems.entrySet()) { + itemInput.subtractItemAmount(entry.getKey(), entry.getValue() * maxParallel, false); + } + + for (FluidStack fluid : mFluidInputs) { + if (fluid == null) continue; + fluidInput.drain(fluid.getFluid(), fluid.amount * maxParallel, false); + } + itemInput.stopRecipeCheck(); + return maxParallel; + } + + private Map getItemInputsAsItemMap() { + Map items = new HashMap<>(); + for (ItemStack item : mInputs) { + if (item == null) continue; + ItemHolder itemHolder = new ItemHolder(item); + items.put(itemHolder, items.getOrDefault(itemHolder, 0L) + item.stackSize); + } + return items; + } + + @Override + public int compareTo(GTRecipe recipe) { + // first lowest tier recipes + // then fastest + // then with lowest special value + // then dry recipes + // then with fewer inputs + if (this.mEUt != recipe.mEUt) { + return Integer.compare(this.mEUt, recipe.mEUt); + } else if (this.mDuration != recipe.mDuration) { + return Integer.compare(this.mDuration, recipe.mDuration); + } else if (this.mSpecialValue != recipe.mSpecialValue) { + return Integer.compare(this.mSpecialValue, recipe.mSpecialValue); + } else if (this.mFluidInputs.length != recipe.mFluidInputs.length) { + return Integer.compare(this.mFluidInputs.length, recipe.mFluidInputs.length); + } else if (this.mInputs.length != recipe.mInputs.length) { + return Integer.compare(this.mInputs.length, recipe.mInputs.length); + } + return 0; + } + + public String[] getNeiDesc() { + return neiDesc; + } + + /** + * Sets description shown on NEI.
+ * If you have a large number of recipes for the recipemap, this is not efficient memory wise, so use + * {@link gregtech.api.recipe.RecipeMapBuilder#neiSpecialInfoFormatter} instead. + */ + public void setNeiDesc(String... neiDesc) { + this.neiDesc = neiDesc; + } + + // region metadata + + // Don't try implementing setMetadata, as metadataStorage can be EmptyRecipeMetadataStorage + + /** + * Gets metadata associated with this recipe. Can return null. Use + * {@link #getMetadataOrDefault(RecipeMetadataKey, Object)} + * if you want to specify default value. + */ + @Nullable + public T getMetadata(RecipeMetadataKey key) { + return key.cast(metadataStorage.getMetadata(key)); + } + + /** + * Gets metadata associated with this recipe with default value. Does not return null unless default value is null. + */ + @Contract("_, !null -> !null") + @Nullable + public T getMetadataOrDefault(RecipeMetadataKey key, @Nullable T defaultValue) { + return key.cast(metadataStorage.getMetadataOrDefault(key, defaultValue)); + } + + @Nonnull + public IRecipeMetadataStorage getMetadataStorage() { + return metadataStorage; + } + + // endregion + + public RecipeCategory getRecipeCategory() { + return recipeCategory; + } + + /** + * Exists only for recipe copying from external. For ordinal use case, use {@link GTRecipeBuilder#recipeCategory}. + */ + public void setRecipeCategory(RecipeCategory recipeCategory) { + this.recipeCategory = recipeCategory; + } + + private static final List excludedStacktraces = Arrays.asList( + "java.lang.Thread", + "gregtech.api.interfaces.IRecipeMap", + "gregtech.api.interfaces.IRecipeMap$1", + "gregtech.api.recipe.RecipeMap", + "gregtech.api.recipe.RecipeMapBackend", + "gregtech.api.recipe.RecipeMapBackendPropertiesBuilder", + "gregtech.api.util.GTRecipe", + "gregtech.api.util.GTRecipeBuilder", + "gregtech.api.util.GTRecipeConstants", + "gregtech.api.util.GTRecipeMapUtil", + "gregtech.common.GTRecipeAdder"); + + public void reloadOwner() { + setOwner( + Loader.instance() + .activeModContainer()); + + if (GTMod.gregtechproxy.mNEIRecipeOwnerStackTrace) { + List toAdd = new ArrayList<>(); + for (StackTraceElement stackTrace : Thread.currentThread() + .getStackTrace()) { + if (excludedStacktraces.stream() + .noneMatch( + c -> stackTrace.getClassName() + .equals(c))) { + toAdd.add(formatStackTrace(stackTrace)); + } + } + stackTraces.add(toAdd); + } + } + + private static String formatStackTrace(StackTraceElement stackTraceElement) { + String raw = stackTraceElement.toString(); + int startParen = raw.lastIndexOf('('); + int colon = raw.lastIndexOf(':'); + if (colon == -1) { + // native or unknown source + return raw; + } + // strip class name and leave line number, as class name is already shown + return raw.substring(0, startParen + 1) + raw.substring(colon); + } + + public void setOwner(ModContainer newOwner) { + ModContainer oldOwner = !owners.isEmpty() ? this.owners.get(owners.size() - 1) : null; + if (newOwner != null && newOwner != oldOwner) { + owners.add(newOwner); + } + } + + /** + * Use in case {@link Loader#activeModContainer()} isn't helpful + */ + public void setOwner(String modId) { + for (ModContainer mod : Loader.instance() + .getModList()) { + if (mod.getModId() + .equals(modId)) { + setOwner(mod); + return; + } + } + } + + public GTRecipe setInputs(ItemStack... aInputs) { + // TODO determine if we need this without trailing nulls call + this.mInputs = ArrayExt.withoutTrailingNulls(aInputs, ItemStack[]::new); + return this; + } + + public GTRecipe setOutputs(ItemStack... aOutputs) { + this.mOutputs = ArrayExt.withoutTrailingNulls(aOutputs, ItemStack[]::new); + return this; + } + + public GTRecipe setFluidInputs(FluidStack... aInputs) { + this.mFluidInputs = ArrayExt.withoutTrailingNulls(aInputs, FluidStack[]::new); + return this; + } + + public GTRecipe setFluidOutputs(FluidStack... aOutputs) { + this.mFluidOutputs = ArrayExt.withoutTrailingNulls(aOutputs, FluidStack[]::new); + return this; + } + + public GTRecipe setDuration(int aDuration) { + this.mDuration = aDuration; + return this; + } + + public GTRecipe setEUt(int aEUt) { + this.mEUt = aEUt; + return this; + } + + public static class RecipeAssemblyLine { + + public static final ArrayList sAssemblylineRecipes = new ArrayList<>(); + + static { + if (!Boolean.getBoolean("com.gtnh.gt5u.ignore-invalid-assline-recipe")) + GregTechAPI.sFirstWorldTick.add(RecipeAssemblyLine::checkInvalidRecipes); + else GTLog.out.println("NOT CHECKING INVALID ASSLINE RECIPE."); + } + + private static void checkInvalidRecipes() { + int invalidCount = 0; + GTLog.out.println("Started assline validation"); + for (RecipeAssemblyLine recipe : sAssemblylineRecipes) { + if (recipe.getPersistentHash() == 0) { + invalidCount++; + GTLog.err.printf("Invalid recipe: %s%n", recipe); + } + } + if (invalidCount > 0) throw new RuntimeException( + "There are " + invalidCount + " invalid assembly line recipe(s)! Check GregTech.log for details!"); + } + + public ItemStack mResearchItem; + public int mResearchTime; + public ItemStack[] mInputs; + public FluidStack[] mFluidInputs; + public ItemStack mOutput; + public int mDuration; + public int mEUt; + public ItemStack[][] mOreDictAlt; + private int mPersistentHash; + + /** + * THIS CONSTRUCTOR DOES SET THE PERSISTENT HASH. + *

+ * if you set one yourself, it will give you one of the RunetimeExceptions! + */ + public RecipeAssemblyLine(ItemStack aResearchItem, int aResearchTime, ItemStack[] aInputs, + FluidStack[] aFluidInputs, ItemStack aOutput, int aDuration, int aEUt) { + this( + aResearchItem, + aResearchTime, + aInputs, + aFluidInputs, + aOutput, + aDuration, + aEUt, + new ItemStack[aInputs.length][]); + int tPersistentHash = 1; + for (ItemStack tInput : aInputs) + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(tInput, true, false); + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(aResearchItem, true, false); + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(aOutput, true, false); + for (FluidStack tFluidInput : aFluidInputs) + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(tFluidInput, true, false); + tPersistentHash = tPersistentHash * 31 + aResearchTime; + tPersistentHash = tPersistentHash * 31 + aDuration; + tPersistentHash = tPersistentHash * 31 + aEUt; + setPersistentHash(tPersistentHash); + } + + /** + * THIS CONSTRUCTOR DOES NOT SET THE PERSISTENT HASH. + *

+ * if you don't set one yourself, it will break a lot of stuff! + */ + public RecipeAssemblyLine(ItemStack aResearchItem, int aResearchTime, ItemStack[] aInputs, + FluidStack[] aFluidInputs, ItemStack aOutput, int aDuration, int aEUt, ItemStack[][] aAlt) { + mResearchItem = aResearchItem; + mResearchTime = aResearchTime; + mInputs = aInputs; + mFluidInputs = aFluidInputs; + mOutput = aOutput; + mDuration = aDuration; + mEUt = aEUt; + mOreDictAlt = aAlt; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + GTItemStack[] thisInputs = new GTItemStack[this.mInputs.length]; + int totalInputStackSize = 0; + for (int i = 0; i < this.mInputs.length; i++) { + thisInputs[i] = new GTItemStack(this.mInputs[i]); + totalInputStackSize += thisInputs[i].mStackSize; + } + int inputHash = Arrays.deepHashCode(thisInputs); + int inputFluidHash = Arrays.deepHashCode(this.mFluidInputs); + GTItemStack thisOutput = new GTItemStack(mOutput); + GTItemStack thisResearch = new GTItemStack(mResearchItem); + int miscRecipeDataHash = Arrays.deepHashCode( + new Object[] { totalInputStackSize, mDuration, mEUt, thisOutput, thisResearch, mResearchTime }); + result = prime * result + inputFluidHash; + result = prime * result + inputHash; + result = prime * result + miscRecipeDataHash; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof RecipeAssemblyLine other)) { + return false; + } + if (this.mInputs.length != other.mInputs.length) { + return false; + } + if (this.mFluidInputs.length != other.mFluidInputs.length) { + return false; + } + // Check Outputs Match + GTItemStack output1 = new GTItemStack(this.mOutput); + GTItemStack output2 = new GTItemStack(other.mOutput); + if (!output1.equals(output2)) { + return false; + } + // Check Scanned Item Match + GTItemStack scan1 = new GTItemStack(this.mResearchItem); + GTItemStack scan2 = new GTItemStack(other.mResearchItem); + if (!scan1.equals(scan2)) { + return false; + } + // Check Items Match + GTItemStack[] thisInputs = new GTItemStack[this.mInputs.length]; + GTItemStack[] otherInputs = new GTItemStack[other.mInputs.length]; + for (int i = 0; i < thisInputs.length; i++) { + thisInputs[i] = new GTItemStack(this.mInputs[i]); + otherInputs[i] = new GTItemStack(other.mInputs[i]); + } + for (int i = 0; i < thisInputs.length; i++) { + if (!thisInputs[i].equals(otherInputs[i]) || thisInputs[i].mStackSize != otherInputs[i].mStackSize) { + return false; + } + } + // Check Fluids Match + for (int i = 0; i < this.mFluidInputs.length; i++) { + if (!this.mFluidInputs[i].isFluidStackIdentical(other.mFluidInputs[i])) { + return false; + } + } + + return this.mDuration == other.mDuration && this.mEUt == other.mEUt + && this.mResearchTime == other.mResearchTime; + } + + public int getPersistentHash() { + if (mPersistentHash == 0) + GTLog.err.println("Assline recipe persistent hash has not been set! Recipe: " + mOutput); + return mPersistentHash; + } + + @Override + public String toString() { + return "GTRecipe_AssemblyLine{" + "mResearchItem=" + + mResearchItem + + ", mResearchTime=" + + mResearchTime + + ", mInputs=" + + Arrays.toString(mInputs) + + ", mFluidInputs=" + + Arrays.toString(mFluidInputs) + + ", mOutput=" + + mOutput + + ", mDuration=" + + mDuration + + ", mEUt=" + + mEUt + + ", mOreDictAlt=" + + Arrays.toString(mOreDictAlt) + + '}'; + } + + /** + * @param aPersistentHash the persistent hash. it should reflect the exact input used to generate this recipe If + * 0 is passed in, the actual persistent hash will be automatically remapped to 1 + * instead. + * @throws IllegalStateException if the persistent hash has been set already + */ + public void setPersistentHash(int aPersistentHash) { + if (this.mPersistentHash != 0) throw new IllegalStateException("Cannot set persistent hash twice!"); + if (aPersistentHash == 0) this.mPersistentHash = 1; + else this.mPersistentHash = aPersistentHash; + } + + /** + * @param inputBusses List of input busses to check. + * @return An array containing the amount of item to consume from the first slot of every input bus. + * {@code null} if at least one item fails to match the recipe ingredient. + */ + public static int[] getItemConsumptionAmountArray(ArrayList inputBusses, + RecipeAssemblyLine recipe) { + int itemCount = recipe.mInputs.length; + if (itemCount == 0) return null; + int[] tStacks = new int[itemCount]; + for (int i = 0; i < itemCount; i++) { + MTEHatchInputBus inputBus = inputBusses.get(i); + if (!inputBus.isValid()) return null; + ItemStack slotStack; + if (inputBus instanceof MTEHatchInputBusME meBus) { + slotStack = meBus.getShadowItemStack(0); + } else { + slotStack = inputBus.getStackInSlot(0); + } + if (slotStack == null) return null; + + int amount = getMatchedIngredientAmount(slotStack, recipe.mInputs[i], recipe.mOreDictAlt[i]); + if (amount < 0) return null; + + tStacks[i] = amount; + } + return tStacks; + } + + public static int getMatchedIngredientAmount(ItemStack aSlotStack, ItemStack aIngredient, ItemStack[] alts) { + if (alts == null || alts.length == 0) { + if (GTUtility.areStacksEqual(aSlotStack, aIngredient, true)) { + return aIngredient.stackSize; + } + return -1; + } + for (ItemStack tAltStack : alts) { + if (GTUtility.areStacksEqual(aSlotStack, tAltStack, true)) { + return tAltStack.stackSize; + } + } + return -1; + } + + /** + * @param inputBusses Input bus list to check. Usually the input bus list of multi. + * @param itemConsumptions Should be generated by {@link RecipeAssemblyLine#getItemConsumptionAmountArray}. + * @Return The number of parallel recipes, or 0 if recipe is not satisfied at all. 0 < number < 1 means that + * inputs are found but not enough. + */ + public static double maxParallelCalculatedByInputItems(ArrayList inputBusses, int maxParallel, + int[] itemConsumptions, Map inputsFromME) { + // Recipe item matching is done in the generation of itemConsumptions. + + Map itemConsumptionsFromME = new Object2LongOpenHashMap<>(); + double currentParallel = maxParallel; + + // Calculate the amount of each item to consume from ME + for (int i = 0; i < itemConsumptions.length; i++) { + MTEHatchInputBus inputBus = inputBusses.get(i); + if (!inputBus.isValid()) return 0; + if (inputBus instanceof MTEHatchInputBusME meBus) { + ItemStack item = meBus.getShadowItemStack(0); + if (item == null) return 0; + GTUtility.ItemId id = GTUtility.ItemId.createNoCopy(item); + itemConsumptionsFromME.merge(id, (long) itemConsumptions[i], Long::sum); + } + } + // Calculate parallel from ME input busses + for (Entry entry : itemConsumptionsFromME.entrySet()) { + if (!inputsFromME.containsKey(entry.getKey())) return 0; + long consume = entry.getValue(); + // For non-consumed inputs + if (consume == 0) continue; + currentParallel = Math + .min(currentParallel, (double) inputsFromME.get(entry.getKey()).stackSize / consume); + if (currentParallel <= 0) return 0; + } + + // Calculate parallel from regular input busses + for (int i = 0; i < itemConsumptions.length; i++) { + MTEHatchInputBus inputBus = inputBusses.get(i); + if (!inputBus.isValid()) return 0; + if (inputBus instanceof MTEHatchInputBusME) continue; + + ItemStack item = inputBus.getStackInSlot(0); + if (item == null) return 0; + // For non-consumed inputs + if (itemConsumptions[i] == 0) continue; + currentParallel = Math.min(currentParallel, (double) item.stackSize / itemConsumptions[i]); + if (currentParallel <= 0) return 0; + } + return currentParallel; + } + + /** + * @param inputHatches Input hatch list to check. Usually the input hatch list of multi. + * @param fluidConsumptions Fluid inputs of the recipe. + * @return The number of parallel recipes, or 0 if recipe is not satisfied at all. 0 < number < 1 means that + * fluids are found but not enough. + */ + public static double maxParallelCalculatedByInputFluids(ArrayList inputHatches, int maxParallel, + FluidStack[] fluidConsumptions, Map fluidsFromME) { + Map fluidConsumptionsFromME = new Reference2LongOpenHashMap<>(); + double currentParallel = maxParallel; + + // Calculate the amount of each fluid to consume from ME + for (int i = 0; i < fluidConsumptions.length; i++) { + MTEHatchInput inputHatch = inputHatches.get(i); + if (!inputHatch.isValid()) return 0; + if (inputHatch instanceof MTEHatchInputME meHatch) { + FluidStack fluid = meHatch.getShadowFluidStack(0); + if (fluid == null) return 0; + if (!GTUtility.areFluidsEqual(fluid, fluidConsumptions[i])) return 0; + fluidConsumptionsFromME.merge(fluid.getFluid(), (long) fluidConsumptions[i].amount, Long::sum); + } + } + // Calculate parallel from ME input hatches + for (Entry entry : fluidConsumptionsFromME.entrySet()) { + Fluid fluid = entry.getKey(); + if (!fluidsFromME.containsKey(fluid)) return 0; + long consume = entry.getValue(); + currentParallel = Math.min(currentParallel, (double) fluidsFromME.get(fluid).amount / consume); + if (currentParallel <= 0) return 0; + } + + // Calculate parallel from regular input hatches + for (int i = 0; i < fluidConsumptions.length; i++) { + MTEHatchInput inputHatch = inputHatches.get(i); + if (!inputHatch.isValid()) return 0; + if (inputHatch instanceof MTEHatchInputME) continue; + + FluidStack fluid; + if (inputHatch instanceof MTEHatchMultiInput multiInput) { + fluid = multiInput.getFluid(0); + } else { + fluid = inputHatch.getFillableStack(); + } + if (fluid == null) return 0; + if (!GTUtility.areFluidsEqual(fluid, fluidConsumptions[i])) return 0; + currentParallel = Math.min(currentParallel, (double) fluid.amount / fluidConsumptions[i].amount); + if (currentParallel <= 0) return 0; + } + return currentParallel; + } + + /** + * WARNING: Ensure that item inputs are enough to be consumed with + * {@link RecipeAssemblyLine#maxParallelCalculatedByInputItems} before calling this method! + * + * @param inputBusses Input bus list to check. Usually the input bus list of multi. + * @param itemConsumptions Should be generated by {@link RecipeAssemblyLine#getItemConsumptionAmountArray}. + */ + public static void consumeInputItems(ArrayList inputBusses, int amountMultiplier, + int[] itemConsumptions, Map inputsFromME) { + for (int i = 0; i < itemConsumptions.length; i++) { + MTEHatchInputBus inputBus = inputBusses.get(i); + if (!inputBus.isValid()) continue; + ItemStack item; + if (inputBus instanceof MTEHatchInputBusME meBus) { + item = inputsFromME.get(GTUtility.ItemId.createNoCopy(meBus.getShadowItemStack(0))); + } else { + item = inputBus.getStackInSlot(0); + } + item.stackSize -= itemConsumptions[i] * amountMultiplier; + } + } + + /** + * WARNING: Ensure that fluid inputs are enough to be consumed with + * {@link RecipeAssemblyLine#maxParallelCalculatedByInputFluids} before calling this method! + * + * @param inputHatches Input hatch list to check. Usually the input hatch list of multi. + * @param fluidConsumptions Fluid inputs of the recipe. + */ + public static void consumeInputFluids(ArrayList inputHatches, int amountMultiplier, + FluidStack[] fluidConsumptions, Map fluidsFromME) { + for (int i = 0; i < fluidConsumptions.length; i++) { + MTEHatchInput inputHatch = inputHatches.get(i); + if (!inputHatch.isValid()) continue; + FluidStack fluid; + if (inputHatch instanceof MTEHatchInputME meHatch) { + fluid = fluidsFromME.get( + meHatch.getShadowFluidStack(0) + .getFluid()); + } else if (inputHatch instanceof MTEHatchMultiInput multiInput) { + fluid = multiInput.getFluid(0); + } else { + fluid = inputHatch.getFillableStack(); + } + fluid.amount -= fluidConsumptions[i].amount * amountMultiplier; + } + } + } + + public static class GTRecipe_WithAlt extends GTRecipe { + + public ItemStack[][] mOreDictAlt; + + /** + * Only for {@link GTRecipeBuilder}. + */ + GTRecipe_WithAlt(ItemStack[] mInputs, ItemStack[] mOutputs, FluidStack[] mFluidInputs, + FluidStack[] mFluidOutputs, int[] mChances, Object mSpecialItems, int mDuration, int mEUt, + int mSpecialValue, boolean mEnabled, boolean mHidden, boolean mFakeRecipe, boolean mCanBeBuffered, + boolean mNeedsEmptyOutput, boolean nbtSensitive, String[] neiDesc, + @Nullable IRecipeMetadataStorage metadataStorage, RecipeCategory recipeCategory, + ItemStack[][] mOreDictAlt) { + super( + mInputs, + mOutputs, + mFluidInputs, + mFluidOutputs, + mChances, + mSpecialItems, + mDuration, + mEUt, + mSpecialValue, + mEnabled, + mHidden, + mFakeRecipe, + mCanBeBuffered, + mNeedsEmptyOutput, + nbtSensitive, + neiDesc, + metadataStorage, + recipeCategory); + this.mOreDictAlt = mOreDictAlt; + } + + public GTRecipe_WithAlt(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, + int[] aChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, + int aSpecialValue, ItemStack[][] aAlt) { + super( + aOptimize, + aInputs, + aOutputs, + aSpecialItems, + aChances, + aFluidInputs, + aFluidOutputs, + aDuration, + aEUt, + aSpecialValue); + mOreDictAlt = aAlt; + } + + public Object getAltRepresentativeInput(int aIndex) { + if (aIndex < 0) return null; + if (aIndex < mOreDictAlt.length) { + if (mOreDictAlt[aIndex] != null && mOreDictAlt[aIndex].length > 0) { + ItemStack[] rStacks = new ItemStack[mOreDictAlt[aIndex].length]; + for (int i = 0; i < mOreDictAlt[aIndex].length; i++) { + rStacks[i] = GTUtility.copyOrNull(mOreDictAlt[aIndex][i]); + } + return rStacks; + } + } + if (aIndex >= mInputs.length) return null; + return GTUtility.copyOrNull(mInputs[aIndex]); + } + } +} diff --git a/src/main/java/gregtech/api/util/GTRecipeBuilder.java b/src/main/java/gregtech/api/util/GTRecipeBuilder.java new file mode 100644 index 0000000000..6f8acfb2dc --- /dev/null +++ b/src/main/java/gregtech/api/util/GTRecipeBuilder.java @@ -0,0 +1,946 @@ +package gregtech.api.util; + +import static gregtech.api.util.GTRecipeMapUtil.SPECIAL_VALUE_ALIASES; +import static gregtech.api.util.GTUtility.copyFluidArray; +import static gregtech.api.util.GTUtility.copyItemArray; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraft.launchwrapper.Launch; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.Contract; + +import gregtech.GTMod; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Mods; +import gregtech.api.interfaces.IRecipeMap; +import gregtech.api.recipe.RecipeCategory; +import gregtech.api.recipe.RecipeMetadataKey; +import gregtech.api.recipe.metadata.IRecipeMetadataStorage; +import gregtech.api.recipe.metadata.RecipeMetadataStorage; +import gregtech.api.util.extensions.ArrayExt; + +@SuppressWarnings({ "unused", "UnusedReturnValue" }) +public class GTRecipeBuilder { + + // debug mode expose problems. panic mode help you check nothing is wrong-ish without you actively monitoring + private static final boolean DEBUG_MODE_NULL; + // Any stable release should be tested at least once with this: -Dgt.recipebuilder.panic.null=true + private static boolean PANIC_MODE_NULL; + private static final boolean DEBUG_MODE_INVALID; + private static final boolean DEBUG_MODE_FULL_ENERGY; + // Any stable release should be tested at least once with this: -Dgt.recipebuilder.panic.invalid=true + private static final boolean PANIC_MODE_INVALID; + private static final boolean DEBUG_MODE_COLLISION; + + // Any stable release should be tested at least once with this: -Dgt.recipebuilder.panic.collision=true + private static final boolean PANIC_MODE_COLLISION; + + // This should only be enabled in non stable instances only with -Dgt.recipebuilder.recipe_collision_check=true + public static final boolean ENABLE_COLLISION_CHECK; + + public static final int WILDCARD = 32767; + + // time units + public static final int HOURS = 20 * 60 * 60; + public static final int MINUTES = 20 * 60; + public static final int SECONDS = 20; + public static final int TICKS = 1; + + // fluid units + public static final int INGOTS = 144; + public static final int HALF_INGOT = 72; + public static final int QUARTER_INGOT = 36; + public static final int EIGHTH_INGOT = 18; + public static final int NUGGETS = 16; + public static final int BUCKETS = 1000; + + static { + final boolean debugAll; + if (System.getProperties() + .containsKey("gt.recipebuilder.debug")) { + debugAll = Boolean.getBoolean("gt.recipebuilder.debug"); + } else { + // turn on debug by default in dev mode + debugAll = (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); + } + DEBUG_MODE_NULL = debugAll || Boolean.getBoolean("gt.recipebuilder.debug.null"); + DEBUG_MODE_INVALID = debugAll || Boolean.getBoolean("gt.recipebuilder.debug.invalid"); + DEBUG_MODE_COLLISION = debugAll || Boolean.getBoolean("gt.recipebuilder.debug.collision"); + DEBUG_MODE_FULL_ENERGY = debugAll || Boolean.getBoolean("gt.recipebuilder.debug.fullenergy"); + + final boolean panicAll = Boolean.getBoolean("gt.recipebuilder.panic"); + PANIC_MODE_NULL = panicAll || Boolean.getBoolean("gt.recipebuilder.panic.null"); + PANIC_MODE_INVALID = panicAll || Boolean.getBoolean("gt.recipebuilder.panic.invalid"); + PANIC_MODE_COLLISION = panicAll || Boolean.getBoolean("gt.recipebuilder.panic.collision"); + ENABLE_COLLISION_CHECK = Boolean.getBoolean("gt.recipebuilder.recipe_collision_check"); + } + + protected ItemStack[] inputsBasic = new ItemStack[0]; + protected Object[] inputsOreDict; + protected ItemStack[] outputs = new ItemStack[0]; + protected ItemStack[][] alts; + protected FluidStack[] fluidInputs = new FluidStack[0]; + protected FluidStack[] fluidOutputs = new FluidStack[0]; + protected int[] chances; + protected Object special; + protected int duration = -1; + protected int eut = -1; + protected int specialValue; + protected boolean enabled = true; + protected boolean hidden = false; + protected boolean fakeRecipe = false; + protected boolean mCanBeBuffered = true; + protected boolean mNeedsEmptyOutput = false; + protected boolean nbtSensitive = false; + protected String[] neiDesc; + protected RecipeCategory recipeCategory; + protected boolean optimize = true; + @Nullable + protected IRecipeMetadataStorage metadataStorage; + protected boolean checkForCollision = true; + /** + * If recipe addition should be skipped. + */ + protected boolean skip = false; + protected boolean valid = true; + + GTRecipeBuilder() {} + + private GTRecipeBuilder(ItemStack[] inputsBasic, Object[] inputsOreDict, ItemStack[] outputs, ItemStack[][] alts, + FluidStack[] fluidInputs, FluidStack[] fluidOutputs, int[] chances, Object special, int duration, int eut, + int specialValue, boolean enabled, boolean hidden, boolean fakeRecipe, boolean mCanBeBuffered, + boolean mNeedsEmptyOutput, boolean nbtSensitive, String[] neiDesc, RecipeCategory recipeCategory, + boolean optimize, @Nullable IRecipeMetadataStorage metadataStorage, boolean checkForCollision, boolean skip, + boolean valid) { + this.inputsBasic = inputsBasic; + this.inputsOreDict = inputsOreDict; + this.outputs = outputs; + this.alts = alts; + this.fluidInputs = fluidInputs; + this.fluidOutputs = fluidOutputs; + this.chances = chances; + this.special = special; + this.duration = duration; + this.eut = eut; + this.specialValue = specialValue; + this.enabled = enabled; + this.hidden = hidden; + this.fakeRecipe = fakeRecipe; + this.mCanBeBuffered = mCanBeBuffered; + this.mNeedsEmptyOutput = mNeedsEmptyOutput; + this.nbtSensitive = nbtSensitive; + this.neiDesc = neiDesc; + this.recipeCategory = recipeCategory; + this.optimize = optimize; + this.metadataStorage = metadataStorage; + if (this.metadataStorage != null) { + this.metadataStorage = this.metadataStorage.copy(); + } + this.checkForCollision = checkForCollision; + this.skip = skip; + this.valid = valid; + } + + // region helper methods + + private static FluidStack[] fix(FluidStack[] fluidInputs) { + return Arrays.stream(fluidInputs) + .filter(Objects::nonNull) + .map(FluidStack::copy) + .toArray(FluidStack[]::new); + } + + private static ItemStack[] fix(ItemStack[] inputs) { + return GTOreDictUnificator.setStackArray(true, ArrayExt.withoutTrailingNulls(inputs, ItemStack[]::new)); + } + + public static GTRecipeBuilder builder() { + return new GTRecipeBuilder(); + } + + /** + * Creates empty builder where only duration and EU/t are set to 0. + */ + public static GTRecipeBuilder empty() { + return new GTRecipeBuilder().duration(0) + .eut(0); + } + + private static boolean containsNull(Object[] arr) { + return arr == null || Arrays.stream(arr) + .anyMatch(Objects::isNull); + } + + private static void handleNullRecipeComponents(String componentType) { + // place a breakpoint here to catch all these issues + GTLog.err.print("null detected in "); + GTLog.err.println(componentType); + new NullPointerException().printStackTrace(GTLog.err); + if (PANIC_MODE_NULL) { + throw new IllegalArgumentException("null in argument"); + } + } + + private static boolean debugNull() { + return DEBUG_MODE_NULL || PANIC_MODE_NULL; + } + + public static void handleInvalidRecipe() { + if (!DEBUG_MODE_INVALID && !PANIC_MODE_INVALID) { + return; + } + // place a breakpoint here to catch all these issues + GTLog.err.print("invalid recipe"); + new IllegalArgumentException().printStackTrace(GTLog.err); + if (PANIC_MODE_INVALID) { + throw new IllegalArgumentException("invalid recipe"); + } + } + + public static void handleRecipeCollision(String details) { + if (!DEBUG_MODE_COLLISION && !PANIC_MODE_COLLISION) { + return; + } + GTLog.err.print("Recipe collision resulting in recipe loss detected with "); + GTLog.err.println(details); + if (PANIC_MODE_COLLISION) { + throw new IllegalArgumentException("Recipe Collision"); + } else { + // place a breakpoint here to catch all these issues + new IllegalArgumentException().printStackTrace(GTLog.err); + } + } + + public static void onConfigLoad() { + PANIC_MODE_NULL |= GTMod.gregtechproxy.crashOnNullRecipeInput; + } + + // endregion + + // region setter + + /** + * Non-OreDicted item inputs. Assumes input is unified. + */ + public GTRecipeBuilder itemInputsUnified(ItemStack... inputs) { + if (skip) return this; + if (debugNull() && containsNull(inputs)) handleNullRecipeComponents("itemInputUnified"); + inputsBasic = ArrayExt.withoutTrailingNulls(inputs, ItemStack[]::new); + inputsOreDict = null; + alts = null; + return this; + } + + /** + * Non-OreDicted item inputs. Assumes input is not unified. + */ + public GTRecipeBuilder itemInputs(ItemStack... inputs) { + if (skip) return this; + if (debugNull() && containsNull(inputs)) handleNullRecipeComponents("itemInputs"); + inputsBasic = fix(inputs); + inputsOreDict = null; + alts = null; + return this; + } + + /** + * OreDicted item inputs. Currently only used for assline recipes adder. + */ + public GTRecipeBuilder itemInputs(Object... inputs) { + if (skip) return this; + inputsOreDict = inputs; + alts = new ItemStack[inputs.length][]; + for (int i = 0, inputsLength = inputs.length; i < inputsLength; i++) { + Object input = inputs[i]; + if (input instanceof ItemStack) { + alts[i] = new ItemStack[] { (ItemStack) input }; + } else if (input instanceof ItemStack[]) { + alts[i] = ((ItemStack[]) input).clone(); + } else if (input instanceof Object[]arr) { + if (arr.length != 2) continue; + List ores = GTOreDictUnificator.getOres(arr[0]); + if (ores.isEmpty()) continue; + int size = ((Number) arr[1]).intValue(); + alts[i] = ores.stream() + .map(s -> GTUtility.copyAmount(size, s)) + .filter(GTUtility::isStackValid) + .toArray(ItemStack[]::new); + } else if (input == null) { + handleNullRecipeComponents("recipe oredict input"); + alts[i] = new ItemStack[0]; + } else { + throw new IllegalArgumentException("index " + i + ", unexpected type: " + input.getClass()); + } + } + inputsBasic = Arrays.stream(alts) + .map(ss -> ss.length > 0 ? ss[0] : null) + .toArray(ItemStack[]::new); + // optimize cannot handle recipes with alts + return noOptimize(); + } + + public GTRecipeBuilder itemOutputs(ItemStack... outputs) { + if (skip) return this; + if (debugNull() && containsNull(outputs)) handleNullRecipeComponents("itemOutputs"); + this.outputs = outputs; + if (chances != null && chances.length != outputs.length) { + throw new IllegalArgumentException("Output chances array and items array length differs"); + } + return this; + } + + /** + * Not intended to be used by recipe authors. + * Intended for recipe rewrite middlewares. + */ + public GTRecipeBuilder itemOutputs(ItemStack[] outputs, int[] chances) { + if (skip) return this; + if (debugNull() && containsNull(outputs)) handleNullRecipeComponents("itemOutputs"); + this.outputs = outputs; + this.chances = chances; + if (chances != null && chances.length != outputs.length) { + throw new IllegalArgumentException("Output chances array and items array length differs"); + } + return this; + } + + public GTRecipeBuilder fluidInputs(FluidStack... fluidInputs) { + if (skip) return this; + if (debugNull() && containsNull(fluidInputs)) handleNullRecipeComponents("fluidInputs"); + this.fluidInputs = fix(fluidInputs); + return this; + } + + public GTRecipeBuilder fluidOutputs(FluidStack... fluidOutputs) { + if (skip) return this; + if (debugNull() && containsNull(fluidOutputs)) handleNullRecipeComponents("fluidOutputs"); + this.fluidOutputs = fix(fluidOutputs); + return this; + } + + public GTRecipeBuilder outputChances(int... chances) { + if (skip) return this; + if (outputs != null && chances.length != outputs.length) { + throw new IllegalArgumentException("Output chances array and items array length differs"); + } + this.chances = chances; + return this; + } + + public GTRecipeBuilder special(Object special) { + this.special = special; + return this; + } + + public GTRecipeBuilder duration(int duration) { + this.duration = duration; + return this; + } + + public GTRecipeBuilder duration(long duration) { + this.duration = (int) duration; + return this; + } + + public GTRecipeBuilder eut(int eut) { + if (DEBUG_MODE_FULL_ENERGY) { + // Ignores ULV voltage + for (int i = 1; i < GTValues.VP.length; i++) { + if (eut <= GTValues.V[i] && eut > GTValues.VP[i]) { + GTLog.err.println( + "EUt > Practical Voltage detected. EUt: " + eut + ", Practical Voltage: " + GTValues.VP[i]); + new IllegalArgumentException().printStackTrace(GTLog.err); + break; + } + } + } + this.eut = eut; + return this; + } + + public GTRecipeBuilder eut(long eut) { + return eut((int) eut); + } + + /** + * prefer to use metadata over this. should only use when the target recipe map does not yet support metadata + * system, or it's to bridge legacy code and modern code. + */ + public GTRecipeBuilder specialValue(int specialValue) { + this.specialValue = specialValue; + return this; + } + + // I don't expect anyone to actually call this... + public GTRecipeBuilder disabled() { + this.enabled = false; + return this; + } + + public GTRecipeBuilder hidden() { + this.hidden = true; + return this; + } + + public GTRecipeBuilder fake() { + this.fakeRecipe = true; + return this; + } + + public GTRecipeBuilder noBuffer() { + this.mCanBeBuffered = false; + return this; + } + + public GTRecipeBuilder needsEmptyOutput() { + this.mNeedsEmptyOutput = true; + return this; + } + + public GTRecipeBuilder nbtSensitive() { + this.nbtSensitive = true; + return this; + } + + public GTRecipeBuilder setNEIDesc(String... neiDesc) { + this.neiDesc = neiDesc; + return this; + } + + public GTRecipeBuilder recipeCategory(RecipeCategory recipeCategory) { + this.recipeCategory = recipeCategory; + return this; + } + + /** + * Prevent the resulting recipe from optimizing recipe, which is a process that reduce recipe batch size. + */ + public GTRecipeBuilder noOptimize() { + this.optimize = false; + return this; + } + + /** + * Prevents checking collision with existing recipes when adding the built recipe. + */ + public GTRecipeBuilder ignoreCollision() { + this.checkForCollision = false; + return this; + } + + /** + * Sets metadata of the recipe. It can be used for recipe emitter to do special things, or for being stored in the + * built recipe and used for actual recipe processing. + *

+ * {@link GTRecipeConstants} has a series of metadata keys. Or you can create one by yourself. + */ + public GTRecipeBuilder metadata(RecipeMetadataKey key, T value) { + if (skip) return this; + if (metadataStorage == null) { + metadataStorage = new RecipeMetadataStorage(); + } + metadataStorage.store(key, value); + return this; + } + + /** + * Gets metadata already set for this builder. Can return null. Use + * {@link #getMetadataOrDefault(RecipeMetadataKey, Object)} + * if you want to specify default value. + */ + @Nullable + public T getMetadata(RecipeMetadataKey key) { + if (metadataStorage == null) { + return null; + } + return key.cast(metadataStorage.getMetadata(key)); + } + + /** + * Gets metadata already set for this builder with default value. Does not return null unless default value is null. + */ + @Contract("_, !null -> !null") + @Nullable + public T getMetadataOrDefault(RecipeMetadataKey key, T defaultValue) { + if (metadataStorage == null) { + return defaultValue; + } + return key.cast(metadataStorage.getMetadataOrDefault(key, defaultValue)); + } + + /** + * Specifies mods required to add the recipe. If any of the mods is not loaded, all the operations for this builder + * will be ignored. + * + * @param mods Mod(s) required for the recipe. + */ + public GTRecipeBuilder requireMods(Mods... mods) { + skip = Stream.of(mods) + .anyMatch(mod -> !mod.isModLoaded()); + return this; + } + + public GTRecipeBuilder requiresCleanRoom() { + return metadata(GTRecipeConstants.CLEANROOM, true); + } + + public GTRecipeBuilder requiresLowGravity() { + return metadata(GTRecipeConstants.LOW_GRAVITY, true); + } + + // endregion + + private static T[] copy(T[] arr) { + return arr == null ? null : arr.clone(); + } + + private static int[] copy(int[] arr) { + return arr == null ? null : arr.clone(); + } + + /** + * produce a deep copy of current values. anything unset will remain unset. IMPORTANT: If metadata contains mutable + * value, they will not be cloned! + *

+ * checkout docs/RecipeBuilder.md for more info on whether to copy or not. + */ + public GTRecipeBuilder copy() { + return new GTRecipeBuilder( + copyItemArray(inputsBasic), + copy(inputsOreDict), + copyItemArray(outputs), + copy(alts), + copyFluidArray(fluidInputs), + copyFluidArray(fluidOutputs), + copy(chances), + special, + duration, + eut, + specialValue, + enabled, + hidden, + fakeRecipe, + mCanBeBuffered, + mNeedsEmptyOutput, + nbtSensitive, + copy(neiDesc), + recipeCategory, + optimize, + metadataStorage, + checkForCollision, + skip, + valid); + } + + /** + * produce a deep copy of current values. anything unset will remain unset. discard all existing metadata + */ + public GTRecipeBuilder copyNoMetadata() { + return new GTRecipeBuilder( + copyItemArray(inputsBasic), + copy(inputsOreDict), + copyItemArray(outputs), + copy(alts), + copyFluidArray(fluidInputs), + copyFluidArray(fluidOutputs), + copy(chances), + special, + duration, + eut, + specialValue, + enabled, + hidden, + fakeRecipe, + mCanBeBuffered, + mNeedsEmptyOutput, + nbtSensitive, + copy(neiDesc), + recipeCategory, + optimize, + null, + checkForCollision, + skip, + valid); + } + + // region getter + + public ItemStack getItemInputBasic(int index) { + return index < inputsBasic.length ? inputsBasic[index] : null; + } + + public Object getItemInputOreDict(int index) { + return index < inputsOreDict.length ? inputsOreDict[index] : null; + } + + public ItemStack getItemOutput(int index) { + return index < outputs.length ? outputs[index] : null; + } + + public FluidStack getFluidInput(int index) { + return index < fluidInputs.length ? fluidInputs[index] : null; + } + + public FluidStack getFluidOutput(int index) { + return index < fluidOutputs.length ? fluidOutputs[index] : null; + } + + public ItemStack[] getItemInputsBasic() { + return inputsBasic; + } + + public Object[] getItemInputsOreDict() { + return inputsOreDict; + } + + public ItemStack[] getItemOutputs() { + return outputs; + } + + public FluidStack[] getFluidInputs() { + return fluidInputs; + } + + public FluidStack[] getFluidOutputs() { + return fluidOutputs; + } + + public int getDuration() { + return duration; + } + + public int[] getChances() { + return chances; + } + + public int getEUt() { + return eut; + } + + public RecipeCategory getRecipeCategory() { + return recipeCategory; + } + + public boolean isOptimize() { + return optimize; + } + + public boolean isCheckForCollision() { + return checkForCollision; + } + + // endregion + + // region validator + + public GTRecipeBuilder clearInvalid() { + valid = true; + return this; + } + + public GTRecipeBuilder invalidate() { + valid = false; + return this; + } + + public boolean isValid() { + return valid; + } + + private static boolean isArrayValid(@Nonnull Object[] arr, int min, int max) { + int count = 0; + for (Object o : arr) { + if (o != null) count += 1; + } + return min <= count && max >= count; + } + + /** + * Validate if input item match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow + * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. + */ + public GTRecipeBuilder validateNoInput() { + if (skip) return this; + return GTUtility.isArrayEmptyOrNull(inputsBasic) ? this : invalidate(); + } + + /** + * Validate if input fluid match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow + * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. + */ + public GTRecipeBuilder validateNoInputFluid() { + if (skip) return this; + return GTUtility.isArrayEmptyOrNull(fluidInputs) ? this : invalidate(); + } + + /** + * Validate if output item match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow + * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. + */ + public GTRecipeBuilder validateNoOutput() { + if (skip) return this; + return GTUtility.isArrayEmptyOrNull(outputs) ? this : invalidate(); + } + + /** + * Validate if output fluid match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow + * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. + */ + public GTRecipeBuilder validateNoOutputFluid() { + if (skip) return this; + return GTUtility.isArrayEmptyOrNull(fluidOutputs) ? this : invalidate(); + } + + /** + * Validate if input item match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow + * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. + */ + public GTRecipeBuilder validateInputCount(int min, int max) { + if (skip) return this; + if (inputsBasic == null) return min < 0 ? this : invalidate(); + return isArrayValid(inputsBasic, min, max) ? this : invalidate(); + } + + /** + * Validate if input fluid match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow + * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. + */ + public GTRecipeBuilder validateInputFluidCount(int min, int max) { + if (skip) return this; + if (fluidInputs == null) return min < 0 ? this : invalidate(); + return isArrayValid(fluidInputs, min, max) ? this : invalidate(); + } + + /** + * Validate if output item match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow + * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. + */ + public GTRecipeBuilder validateOutputCount(int min, int max) { + if (skip) return this; + if (outputs == null) return min < 0 ? this : invalidate(); + return isArrayValid(outputs, min, max) ? this : invalidate(); + } + + /** + * Validate if output fluid match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow + * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. + */ + public GTRecipeBuilder validateOutputFluidCount(int min, int max) { + if (skip) return this; + if (fluidOutputs == null) return min < 0 ? this : invalidate(); + return isArrayValid(fluidOutputs, min, max) ? this : invalidate(); + } + + public GTRecipeBuilder validateAnyInput() { + if (skip) return this; + if (fluidInputs != null && isArrayValid(fluidInputs, 1, Integer.MAX_VALUE)) { + return this; + } + if (inputsBasic != null && isArrayValid(inputsBasic, 1, Integer.MAX_VALUE)) { + return this; + } + return invalidate(); + } + + public GTRecipeBuilder validateAnyOutput() { + if (skip) return this; + if (fluidOutputs != null && isArrayValid(fluidOutputs, 1, Integer.MAX_VALUE)) { + return this; + } + if (outputs != null && isArrayValid(outputs, 1, Integer.MAX_VALUE)) { + return this; + } + return invalidate(); + } + + // endregion + + /** + * Builds new recipe, without custom behavior of recipemaps. For adding recipe to recipemap, + * use {@link #addTo} instead. + * + * @return Built recipe. Returns empty if failed to build. + */ + public Optional build() { + if (skip) { + return Optional.empty(); + } + if (!valid) { + handleInvalidRecipe(); + return Optional.empty(); + } + preBuildChecks(); + optimize(); + return Optional.of( + decorate( + new GTRecipe( + inputsBasic, + outputs, + fluidInputs, + fluidOutputs, + chances, + special, + duration, + eut, + specialValue, + enabled, + hidden, + fakeRecipe, + mCanBeBuffered, + mNeedsEmptyOutput, + nbtSensitive, + neiDesc, + metadataStorage, + recipeCategory))); + } + + public GTRecipeBuilder forceOreDictInput() { + if (inputsOreDict != null || inputsBasic == null) return this; + return itemInputs((Object[]) inputsBasic); + } + + public Optional buildWithAlt() { + if (skip) { + return Optional.empty(); + } + if (inputsOreDict == null) { + throw new UnsupportedOperationException(); + } + if (!valid) { + handleInvalidRecipe(); + return Optional.empty(); + } + preBuildChecks(); + // no optimize. + return Optional.of( + decorate( + new GTRecipe.GTRecipe_WithAlt( + inputsBasic, + outputs, + fluidInputs, + fluidOutputs, + chances, + special, + duration, + eut, + specialValue, + enabled, + hidden, + fakeRecipe, + mCanBeBuffered, + mNeedsEmptyOutput, + nbtSensitive, + neiDesc, + metadataStorage, + recipeCategory, + alts))); + } + + private void preBuildChecks() { + if (duration == -1) throw new IllegalStateException("no duration"); + if (eut == -1) throw new IllegalStateException("no eut"); + } + + private void optimize() { + if (optimize) { + ArrayList l = new ArrayList<>(); + l.addAll(Arrays.asList(inputsBasic)); + l.addAll(Arrays.asList(outputs)); + for (int i = 0; i < l.size(); i++) if (l.get(i) == null) l.remove(i--); + + outer: for (byte i = (byte) Math.min(64, duration / 16); i > 1; i--) { + if (duration / i >= 16) { + for (ItemStack stack : l) { + if (stack.stackSize % i != 0) continue outer; + } + for (FluidStack fluidInput : fluidInputs) { + if (fluidInput.amount % i != 0) continue outer; + } + for (FluidStack fluidOutput : fluidOutputs) { + if (fluidOutput.amount % i != 0) continue outer; + } + for (ItemStack itemStack : l) itemStack.stackSize /= i; + for (FluidStack fluidInput : fluidInputs) fluidInput.amount /= i; + for (FluidStack fluidOutput : fluidOutputs) fluidOutput.amount /= i; + duration /= i; + } + } + optimize = false; + } + } + + private T decorate(T r) { + r.mHidden = hidden; + r.mCanBeBuffered = mCanBeBuffered; + r.mNeedsEmptyOutput = mNeedsEmptyOutput; + r.isNBTSensitive = nbtSensitive; + r.mFakeRecipe = fakeRecipe; + r.mEnabled = enabled; + if (neiDesc != null) r.setNeiDesc(neiDesc); + applyDefaultSpecialValues(r); + return r; + } + + private void applyDefaultSpecialValues(GTRecipe recipe) { + if (recipe.mSpecialValue != 0) return; + + int specialValue = 0; + if (getMetadataOrDefault(GTRecipeConstants.LOW_GRAVITY, false)) specialValue -= 100; + if (getMetadataOrDefault(GTRecipeConstants.CLEANROOM, false)) specialValue -= 200; + for (RecipeMetadataKey ident : SPECIAL_VALUE_ALIASES) { + Integer metadata = getMetadataOrDefault(ident, null); + if (metadata != null) { + specialValue = metadata; + break; + } + } + recipe.mSpecialValue = specialValue; + } + + public Collection addTo(IRecipeMap recipeMap) { + if (skip) { + return Collections.emptyList(); + } + return recipeMap.doAdd(this); + } + + public GTRecipeBuilder reset() { + metadataStorage = null; + alts = null; + chances = null; + duration = -1; + enabled = true; + eut = -1; + fakeRecipe = false; + fluidInputs = null; + fluidOutputs = null; + hidden = false; + inputsBasic = null; + inputsOreDict = null; + mCanBeBuffered = true; + mNeedsEmptyOutput = false; + nbtSensitive = false; + neiDesc = null; + recipeCategory = null; + optimize = true; + outputs = null; + special = null; + specialValue = 0; + skip = false; + valid = true; + return this; + } +} diff --git a/src/main/java/gregtech/api/util/GTRecipeConstants.java b/src/main/java/gregtech/api/util/GTRecipeConstants.java new file mode 100644 index 0000000000..82a477756a --- /dev/null +++ b/src/main/java/gregtech/api/util/GTRecipeConstants.java @@ -0,0 +1,691 @@ +package gregtech.api.util; + +import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes; +import static gregtech.api.util.GTRecipeMapUtil.convertCellToFluid; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Optional; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IRecipeMap; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeCategories; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.RecipeMetadataKey; +import gregtech.api.recipe.metadata.SimpleRecipeMetadataKey; +import gregtech.common.items.IDMetaItem03; +import gregtech.common.items.MetaGeneratedItem03; +import gtnhlanth.common.item.ItemPhotolithographicMask; +import gtnhlanth.common.item.MaskList; +import gtnhlanth.common.register.LanthItemList; + +// this class is intended to be import-static-ed on every recipe script +// so take care to not put unrelated stuff here! +public class GTRecipeConstants { + + /** + * Set to true to signal the recipe require low gravity. do nothing if recipe set specialValue explicitly. Can + * coexist with CLEANROOM just fine + */ + public static final RecipeMetadataKey LOW_GRAVITY = SimpleRecipeMetadataKey + .create(Boolean.class, "low_gravity"); + /** + * Set to true to signal the recipe require cleanroom. do nothing if recipe set specialValue explicitly. Can coexist + * with LOW_GRAVITY just fine + */ + public static final RecipeMetadataKey CLEANROOM = SimpleRecipeMetadataKey + .create(Boolean.class, "cleanroom"); + /** + * Common additive to use in recipe, e.g. for PBF, this is coal amount. + */ + public static final RecipeMetadataKey ADDITIVE_AMOUNT = SimpleRecipeMetadataKey + .create(Integer.class, "additives"); + /** + * Used for fusion reactor. Denotes ignition threshold. + */ + public static final RecipeMetadataKey FUSION_THRESHOLD = SimpleRecipeMetadataKey + .create(Integer.class, "fusion_threshold"); + /** + * Research time in a scanner used in ticks. + */ + public static final RecipeMetadataKey RESEARCH_TIME = SimpleRecipeMetadataKey + .create(Integer.class, "research_time"); + /** + * Fuel type. TODO should we use enum directly? + */ + public static final RecipeMetadataKey FUEL_TYPE = SimpleRecipeMetadataKey + .create(Integer.class, "fuel_type"); + /** + * Fuel value. + */ + public static final RecipeMetadataKey FUEL_VALUE = SimpleRecipeMetadataKey + .create(Integer.class, "fuel_value"); + /** + * Required heat for heating coil (Kelvin). + */ + public static final RecipeMetadataKey COIL_HEAT = SimpleRecipeMetadataKey + .create(Integer.class, "coil_heat"); + /** + * Research item used by assline recipes. + */ + public static final RecipeMetadataKey RESEARCH_ITEM = SimpleRecipeMetadataKey + .create(ItemStack.class, "research_item"); + /** + * For assembler. It accepts a single item as oredict. It looks like no one uses this anyway... + */ + public static final RecipeMetadataKey OREDICT_INPUT = SimpleRecipeMetadataKey + .create(Object.class, "oredict_input"); + /** + * Replicator output material. + */ + public static final RecipeMetadataKey MATERIAL = SimpleRecipeMetadataKey + .create(Materials.class, "material"); + /** + * Marker for {@link #UniversalArcFurnace} to tell that the recipe belongs to recycling category. + */ + public static final RecipeMetadataKey RECYCLE = SimpleRecipeMetadataKey.create(Boolean.class, "recycle"); + /** + * For Microwave. + */ + public static final RecipeMetadataKey EXPLODE = SimpleRecipeMetadataKey.create(Boolean.class, "explode"); + /** + * For Microwave. + */ + public static final RecipeMetadataKey ON_FIRE = SimpleRecipeMetadataKey.create(Boolean.class, "on_fire"); + + /** + * Nano Forge Tier. + */ + public static final RecipeMetadataKey NANO_FORGE_TIER = SimpleRecipeMetadataKey + .create(Integer.class, "nano_forge_tier"); + + /** + * FOG Exotic recipe tier. + */ + public static final RecipeMetadataKey FOG_EXOTIC_TIER = SimpleRecipeMetadataKey + .create(Integer.class, "fog_exotic_tier"); + + /** + * FOG Plasma recipe tier. + */ + public static final RecipeMetadataKey FOG_PLASMA_TIER = SimpleRecipeMetadataKey + .create(Integer.class, "fog_plasma_tier"); + + /** + * DEFC Casing tier. + */ + public static final RecipeMetadataKey DEFC_CASING_TIER = SimpleRecipeMetadataKey + .create(Integer.class, "defc_casing_tier"); + + /** + * Chemplant Casing tier. Beware, codewise index starts at 0, but it is tier 1. + */ + public static final RecipeMetadataKey CHEMPLANT_CASING_TIER = SimpleRecipeMetadataKey + .create(Integer.class, "chemplant_casing_tier"); + + /** + * QFT Focus tier. + */ + public static final RecipeMetadataKey QFT_FOCUS_TIER = SimpleRecipeMetadataKey + .create(Integer.class, "qft_focus_tier"); + + /** + * Tier of advanced compression (HIP/black hole) + */ + public static final RecipeMetadataKey COMPRESSION_TIER = SimpleRecipeMetadataKey + .create(Integer.class, "compression"); + + /** + * Dissolution Tank Ratio. + */ + public static final RecipeMetadataKey DISSOLUTION_TANK_RATIO = SimpleRecipeMetadataKey + .create(Integer.class, "dissolution_tank_ratio"); + + /** + * Duration in days for the RTG. + */ + public static final RecipeMetadataKey RTG_DURATION_IN_DAYS = SimpleRecipeMetadataKey + .create(Integer.class, "rtg_duration_in_days"); + + /** + * Basic output for the Large Naquadah Generator. + */ + public static final RecipeMetadataKey LNG_BASIC_OUTPUT = SimpleRecipeMetadataKey + .create(Integer.class, "lng_basic_output"); + + /** + * Coil tier for the Naquadah Fuel Refinery. + */ + public static final RecipeMetadataKey NFR_COIL_TIER = SimpleRecipeMetadataKey + .create(Integer.class, "nfr_coil_tier"); + + /** + * NKE range for the neutron activator. + */ + public static final RecipeMetadataKey NKE_RANGE = SimpleRecipeMetadataKey + .create(Integer.class, "nke_range"); + /** + * Precise Assembler casing tier. + */ + public static final RecipeMetadataKey PRECISE_ASSEMBLER_CASING_TIER = SimpleRecipeMetadataKey + .create(Integer.class, "precise_assembler_casing_tier"); + /** + * CoAL casing tier. + */ + public static final RecipeMetadataKey COAL_CASING_TIER = SimpleRecipeMetadataKey + .create(Integer.class, "coal_casing_tier"); + + /** + * LFTR output power. + */ + public static final RecipeMetadataKey LFTR_OUTPUT_POWER = SimpleRecipeMetadataKey + .create(Integer.class, "lftr_output_power"); + + /** + * Research Station data. + */ + public static final RecipeMetadataKey RESEARCH_STATION_DATA = SimpleRecipeMetadataKey + .create(Integer.class, "research_station_data"); + + /** + * glass tier required for the biovat recipes. + */ + public static final RecipeMetadataKey SIEVERTS = SimpleRecipeMetadataKey.create(Integer.class, "sieverts"); + + public static final RecipeMetadataKey DECAY_TICKS = SimpleRecipeMetadataKey + .create(Integer.class, "decay_ticks"); + + public static final RecipeMetadataKey NOBLE_GASES = SimpleRecipeMetadataKey + .create(Boolean.class, "noble_gases"); + + public static final RecipeMetadataKey ANAEROBE_GASES = SimpleRecipeMetadataKey + .create(Boolean.class, "anaerobe_gases"); + + public static final RecipeMetadataKey NO_GAS = SimpleRecipeMetadataKey.create(Boolean.class, "no_gas"); + + /** + * Add a arc furnace recipe. Adds to both normal arc furnace and plasma arc furnace. + * Will override the fluid input with oxygen/plasma for the respective recipe maps, so there is no point setting it. + */ + public static final IRecipeMap UniversalArcFurnace = IRecipeMap.newRecipeMap(builder -> { + if (!GTUtility.isArrayOfLength(builder.getItemInputsBasic(), 1) + || GTUtility.isArrayEmptyOrNull(builder.getItemOutputs())) return Collections.emptyList(); + int aDuration = builder.getDuration(); + if (aDuration <= 0) { + return Collections.emptyList(); + } + builder.duration(aDuration); + boolean recycle = builder.getMetadataOrDefault(RECYCLE, false); + Collection ret = new ArrayList<>(); + for (Materials mat : new Materials[] { Materials.Argon, Materials.Nitrogen }) { + int tPlasmaAmount = (int) Math.max(1L, aDuration / (mat.getMass() * 16L)); + GTRecipeBuilder plasmaBuilder = builder.copy() + .fluidInputs(mat.getPlasma(tPlasmaAmount)) + .fluidOutputs(mat.getGas(tPlasmaAmount)); + if (recycle) { + plasmaBuilder.recipeCategory(RecipeCategories.plasmaArcFurnaceRecycling); + } + ret.addAll(RecipeMaps.plasmaArcFurnaceRecipes.doAdd(plasmaBuilder)); + } + GTRecipeBuilder arcBuilder = builder.copy() + .fluidInputs(Materials.Oxygen.getGas(aDuration)); + if (recycle) { + arcBuilder.recipeCategory(RecipeCategories.arcFurnaceRecycling); + } + ret.addAll(RecipeMaps.arcFurnaceRecipes.doAdd(arcBuilder)); + return ret; + }); + + /** + * Add a chemical reactor recipe to both LCR and singleblocks. + */ + public static final IRecipeMap UniversalChemical = IRecipeMap.newRecipeMap(builder -> { + for (ItemStack input : builder.getItemInputsBasic()) { + // config >= 10 -> this is a special chemical recipe that output fluid/canned fluid variant. + // it doesn't belong to multiblocks + if (GTUtility.isAnyIntegratedCircuit(input) && input.getItemDamage() >= 10) { + return builder.addTo(RecipeMaps.chemicalReactorRecipes); + } + } + return GTUtility.concat( + builder.copy() + .addTo(RecipeMaps.chemicalReactorRecipes), + convertCellToFluid(builder, false) + // LCR does not need cleanroom. + .metadata(CLEANROOM, false) + .addTo(RecipeMaps.multiblockChemicalReactorRecipes)); + }); + + /** + * Adds an engraver recipe that might use purified water. Still added to the regular recipemap if it ends up not + * needing it. + */ + public static final IRecipeMap WaferEngravingRecipes = IRecipeMap.newRecipeMap(builder -> { + // spotless:off + enum Wafer{ + Naquadah, + Europium, + Americium, + // Beamline masks + MaskT1, + MaskT2, + MaskT3, + } + // spotless:on + // Find the wafer used + Wafer wafer = null; + ItemPhotolithographicMask t1Item = (ItemPhotolithographicMask) LanthItemList.maskMap.get(MaskList.BLANK1); + ItemPhotolithographicMask t2Item = (ItemPhotolithographicMask) LanthItemList.maskMap.get(MaskList.BLANK2); + ItemPhotolithographicMask t3Item = (ItemPhotolithographicMask) LanthItemList.maskMap.get(MaskList.BLANK3); + for (ItemStack input : builder.getItemInputsBasic()) { + if (input.getItem() instanceof MetaGeneratedItem03) { + int meta = input.getItemDamage() - 32000; + // Check if this input item is indicating a wafer recipe we want to modify + if (meta == IDMetaItem03.Circuit_Silicon_Wafer3.ID) wafer = Wafer.Naquadah; + else if (meta == IDMetaItem03.Circuit_Silicon_Wafer4.ID) wafer = Wafer.Europium; + else if (meta == IDMetaItem03.Circuit_Silicon_Wafer5.ID) wafer = Wafer.Americium; + } + + // Now look for beamline masks + if (input.getItem() instanceof ItemPhotolithographicMask mask) { + String spectrum = mask.getDescSpectrum(); + if (spectrum.equals(t1Item.getDescSpectrum())) wafer = Wafer.MaskT1; + else if (spectrum.equals(t2Item.getDescSpectrum())) wafer = Wafer.MaskT2; + else if (spectrum.equals(t3Item.getDescSpectrum())) wafer = Wafer.MaskT3; + } + + // Found a wafer, stop checking inputs + if (wafer != null) break; + } + + int recipeTime = builder.duration; + // Bonus for using purified water of a higher tier than necessary + int halfBoostedRecipeTime = (int) (recipeTime * 0.75); + int boostedRecipeTime = (int) (recipeTime * 0.5); + + // If this recipe does not use a wafer, exit without modifying it. + if (wafer == null) return builder.addTo(RecipeMaps.laserEngraverRecipes); + switch (wafer) { + case Naquadah -> { + ArrayList items = new ArrayList<>(Arrays.asList(builder.getItemInputsBasic())); + ItemStack[] itemInputs = items.toArray(new ItemStack[] {}); + // Naquadah wafers can use grade 1-2 purified water for a bonus, otherwise use distilled so we don't + // have to + // deal with circuits + return GTUtility.concat( + builder.copy() + .itemInputs(itemInputs) + .fluidInputs(GTModHandler.getDistilledWater(100L)) + .addTo(RecipeMaps.laserEngraverRecipes), + builder.copy() + .itemInputs(itemInputs) + .fluidInputs(Materials.Grade1PurifiedWater.getFluid(100L)) + .duration(halfBoostedRecipeTime) + .addTo(RecipeMaps.laserEngraverRecipes), + builder.copy() + .itemInputs(itemInputs) + .fluidInputs(Materials.Grade2PurifiedWater.getFluid(100L)) + .duration(boostedRecipeTime) + .addTo(RecipeMaps.laserEngraverRecipes)); + } + case Europium -> { + // Require purified water for europium wafers, at least grade 3 + return GTUtility.concat( + builder.copy() + .fluidInputs(Materials.Grade3PurifiedWater.getFluid(100L)) + .duration(recipeTime) + .addTo(RecipeMaps.laserEngraverRecipes), + builder.copy() + .fluidInputs(Materials.Grade4PurifiedWater.getFluid(100L)) + .duration(boostedRecipeTime) + .addTo(RecipeMaps.laserEngraverRecipes)); + } + case Americium -> { + // Require purified water for americium wafers, at least grade 5 + return GTUtility.concat( + builder.copy() + .fluidInputs(Materials.Grade5PurifiedWater.getFluid(100L)) + .duration(recipeTime) + .addTo(RecipeMaps.laserEngraverRecipes), + builder.copy() + .fluidInputs(Materials.Grade6PurifiedWater.getFluid(100L)) + .duration(boostedRecipeTime) + .addTo(RecipeMaps.laserEngraverRecipes)); + } + // Masks require much more purified water because they can make many wafers at once + case MaskT1 -> { + // T1 masks require grade 1, 2 or 3 purified water + return GTUtility.concat( + builder.copy() + .fluidInputs(Materials.Grade1PurifiedWater.getFluid(32000L)) + .duration(recipeTime) + .addTo(RecipeMaps.laserEngraverRecipes), + builder.copy() + .fluidInputs(Materials.Grade2PurifiedWater.getFluid(32000L)) + .duration(halfBoostedRecipeTime) + .addTo(RecipeMaps.laserEngraverRecipes), + builder.copy() + .fluidInputs(Materials.Grade3PurifiedWater.getFluid(32000L)) + .duration(boostedRecipeTime) + .addTo(RecipeMaps.laserEngraverRecipes)); + } + case MaskT2 -> { + // T2 masks require grade 4 or 5 purified water + return GTUtility.concat( + builder.copy() + .fluidInputs(Materials.Grade4PurifiedWater.getFluid(32000L)) + .duration(recipeTime) + .addTo(RecipeMaps.laserEngraverRecipes), + builder.copy() + .fluidInputs(Materials.Grade5PurifiedWater.getFluid(32000L)) + .duration(boostedRecipeTime) + .addTo(RecipeMaps.laserEngraverRecipes)); + } + case MaskT3 -> { + // T3 masks require grade 6, 7 or 8 purified water + return GTUtility.concat( + builder.copy() + .fluidInputs(Materials.Grade6PurifiedWater.getFluid(32000L)) + .duration(recipeTime) + .addTo(RecipeMaps.laserEngraverRecipes), + builder.copy() + .fluidInputs(Materials.Grade7PurifiedWater.getFluid(32000L)) + .duration(halfBoostedRecipeTime) + .addTo(RecipeMaps.laserEngraverRecipes), + builder.copy() + .fluidInputs(Materials.Grade8PurifiedWater.getFluid(32000L)) + .duration(boostedRecipeTime) + .addTo(RecipeMaps.laserEngraverRecipes)); + } + } + + throw new RuntimeException("Unreachable code reached in Laser Engraver Recipe Transformer"); + }); + + /** + * The one and only :tm: assline recipe adder. + * Uses {@link #RESEARCH_ITEM} metadata as research item, and {@link #RESEARCH_TIME} metadata as research time, unit + * in ticks. + */ + public static final IRecipeMap AssemblyLine = IRecipeMap.newRecipeMap(builder -> { + Optional rr = builder.forceOreDictInput() + .validateInputCount(4, 16) + .validateOutputCount(1, 1) + .validateOutputFluidCount(-1, 0) + .validateInputFluidCount(1, 4) + .buildWithAlt(); + // noinspection SimplifyOptionalCallChains + if (!rr.isPresent()) return Collections.emptyList(); + GTRecipe.GTRecipe_WithAlt r = rr.get(); + ItemStack[][] mOreDictAlt = r.mOreDictAlt; + Object[] inputs = builder.getItemInputsOreDict(); + ItemStack aResearchItem = builder.getMetadata(RESEARCH_ITEM); + if (aResearchItem == null) { + return Collections.emptyList(); + } + ItemStack aOutput = r.mOutputs[0]; + int tPersistentHash = 1; + for (int i = 0, mOreDictAltLength = mOreDictAlt.length; i < mOreDictAltLength; i++) { + ItemStack[] alts = mOreDictAlt[i]; + Object input = inputs[i]; + if (input == null) { + GTLog.err.println( + "addAssemblingLineRecipe " + aResearchItem.getDisplayName() + + " --> " + + aOutput.getUnlocalizedName() + + " there is some null item in that recipe"); + } + if (input instanceof ItemStack) { + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash((ItemStack) input, true, false); + } else if (input instanceof ItemStack[]) { + for (ItemStack alt : ((ItemStack[]) input)) { + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(alt, true, false); + if (alt == null) { + GTLog.err.println( + "addAssemblingLineRecipe " + aResearchItem.getDisplayName() + + " --> " + + aOutput.getUnlocalizedName() + + " there is some null alt item in that recipe"); + } + } + tPersistentHash *= 31; + } else if (input instanceof Object[]objs) { + Arrays.sort( + alts, + Comparator + .comparing(s -> GameRegistry.findUniqueIdentifierFor(s.getItem()).modId) + .thenComparing(s -> GameRegistry.findUniqueIdentifierFor(s.getItem()).name) + .thenComparingInt(Items.feather::getDamage) + .thenComparingInt(s -> s.stackSize)); + + tPersistentHash = tPersistentHash * 31 + (objs[0] == null ? "" : objs[0].toString()).hashCode(); + tPersistentHash = tPersistentHash * 31 + ((Number) objs[1]).intValue(); + } + } + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(aResearchItem, true, false); + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(aOutput, true, false); + for (FluidStack fluidInput : r.mFluidInputs) { + if (fluidInput == null) continue; + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(fluidInput, true, false); + } + int aResearchTime = builder.getMetadataOrDefault(RESEARCH_TIME, 0); + tPersistentHash = tPersistentHash * 31 + aResearchTime; + tPersistentHash = tPersistentHash * 31 + r.mDuration; + tPersistentHash = tPersistentHash * 31 + r.mEUt; + + GTRecipe.RecipeAssemblyLine tRecipe = new GTRecipe.RecipeAssemblyLine( + aResearchItem, + aResearchTime, + r.mInputs, + r.mFluidInputs, + aOutput, + r.mDuration, + r.mEUt, + r.mOreDictAlt); + tRecipe.setPersistentHash(tPersistentHash); + GTRecipe.RecipeAssemblyLine.sAssemblylineRecipes.add(tRecipe); + AssemblyLineUtils.addRecipeToCache(tRecipe); + + ItemStack writesDataStick = ItemList.Tool_DataStick.getWithName(1L, "Writes Research result"); + AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(writesDataStick, tRecipe, false); + Collection ret = new ArrayList<>(3); + ret.addAll( + GTValues.RA.stdBuilder() + .itemInputs(aResearchItem) + .itemOutputs(aOutput) + .special(writesDataStick) + .duration(aResearchTime) + .eut(TierEU.RECIPE_LV) + .specialValue(-201) // means it's scanned + .noOptimize() + .ignoreCollision() + .fake() + .addTo(scannerFakeRecipes)); + + ItemStack readsDataStick = ItemList.Tool_DataStick.getWithName(1L, "Reads Research result"); + AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(readsDataStick, tRecipe, false); + ret.add( + RecipeMaps.assemblylineVisualRecipes.addFakeRecipe( + false, + r.mInputs, + new ItemStack[] { aOutput }, + new ItemStack[] { readsDataStick }, + r.mFluidInputs, + null, + r.mDuration, + r.mEUt, + 0, + r.mOreDictAlt, + false)); + + return ret; + }); + + /** + * Adds an Electric Blast Furnace recipe that might use gas. + */ + public static final IRecipeMap BlastFurnaceWithGas = IRecipeMap.newRecipeMap(builder -> { + Collection ret = new ArrayList<>(); + int basicGasAmount = builder.getMetadataOrDefault(ADDITIVE_AMOUNT, 1000); + double durationBase = builder.getDuration(); + ArrayList items = new ArrayList<>(Arrays.asList(builder.getItemInputsBasic())); + int circuitConfig = 1; + if (items.size() == 1) {// Set circuit config if it is a dust -> ingot recipe. + ItemData data = GTOreDictUnificator.getAssociation(items.get(0)); + if (data != null) { + OrePrefixes prefix = data.mPrefix; + if (OrePrefixes.dust.equals(prefix)) { + circuitConfig = 1; + } else if (OrePrefixes.dustSmall.equals(prefix)) { + circuitConfig = 4; + } else if (OrePrefixes.dustTiny.equals(prefix)) { + circuitConfig = 9; + } + } + } else { // Set circuit config if there is an integrated circuit + for (int i = 0; i < items.size(); i++) { + if (GTUtility.isAnyIntegratedCircuit(items.get(i))) { + circuitConfig = items.get(i) + .getItemDamage(); + items.remove(i--); + } + } + } + + if (builder.getMetadataOrDefault(NO_GAS, false)) { + items.add(GTUtility.getIntegratedCircuit(circuitConfig)); + ret.addAll( + builder.copy() + .itemInputs(items.toArray(new ItemStack[0])) + .fluidInputs() + .duration((int) Math.max(durationBase * 1.1, 1)) + .addTo(RecipeMaps.blastFurnaceRecipes)); + items.remove(items.size() - 1); + circuitConfig += 10; + } + + items.add(GTUtility.getIntegratedCircuit(circuitConfig)); + boolean nobleGases = builder.getMetadataOrDefault(NOBLE_GASES, false); + boolean anaerobeGases = builder.getMetadataOrDefault(ANAEROBE_GASES, false); + Collection gases = new ArrayList<>(); + + if (nobleGases && anaerobeGases) { + gases = BlastFurnaceGasStat.getNobleAndAnaerobeGases(); + } else if (nobleGases) { + gases = BlastFurnaceGasStat.getNobleGases(); + } else if (anaerobeGases) { + gases = BlastFurnaceGasStat.getAnaerobeGases(); + } + for (BlastFurnaceGasStat gas : gases) { + int gasAmount = (int) (gas.recipeConsumedAmountMultiplier * basicGasAmount); + int duration = (int) Math.max(gas.recipeTimeMultiplier * durationBase, 1); + ret.addAll( + builder.copy() + .itemInputs(items.toArray(new ItemStack[0])) + .fluidInputs(GTUtility.copyAmount(gasAmount, gas.gas)) + .duration(duration) + .addTo(RecipeMaps.blastFurnaceRecipes)); + } + return ret; + }); + + /** + * Just like any normal assembler recipe, however it accepts one input item to be oredicted. Pass in the item to + * oredict via {@link #OREDICT_INPUT}. It will be used along all other item inputs as input of this recipe. + */ + public static IRecipeMap AssemblerOD = IRecipeMap.newRecipeMap(builder -> { + Collection ret = new ArrayList<>(); + for (ItemStack input : GTOreDictUnificator.getOresImmutable(builder.getMetadata(OREDICT_INPUT))) { + ret.addAll( + builder.copy() + .itemInputs(GTRecipeMapUtil.appendArray(builder.getItemInputsBasic(), input)) + .addTo(RecipeMaps.assemblerRecipes)); + } + return ret; + }); + + /** + * A universal fuel adder. It's actually just a dispatcher towards all actual fuel recipe maps. + * Dispatch based on {@link #FUEL_TYPE}. Uses {@link #FUEL_VALUE} as fuel value. + * Can use {@link FuelType#ordinal()} as a human-readable form of what FUEL_TYPE should be. + * You can bypass this and add to relevant fuel maps directly if you wish. + */ + public static IRecipeMap Fuel = IRecipeMap.newRecipeMap(builder -> { + builder.validateInputCount(1, 1) + .validateNoInputFluid() + .validateOutputCount(-1, 1) + .validateNoOutputFluid(); + if (!builder.isValid()) return Collections.emptyList(); + Integer fuelType = builder.getMetadata(FUEL_TYPE); + if (fuelType == null) return Collections.emptyList(); + builder.metadata(FUEL_VALUE, builder.getMetadataOrDefault(FUEL_VALUE, 0)); + return FuelType.get(fuelType) + .getTarget() + .doAdd(builder); + }); + + public enum FuelType { + + // ORDER MATTERS. DO NOT INSERT ELEMENT BETWEEN EXISTING ONES + DieselFuel(RecipeMaps.dieselFuels), + GasTurbine(RecipeMaps.gasTurbineFuels), + // appears unused + HotFuel(RecipeMaps.hotFuels), + SemiFluid(RecipeMaps.denseLiquidFuels), + PlasmaTurbine(RecipeMaps.plasmaFuels), + Magic(RecipeMaps.magicFuels),; + + private static final FuelType[] VALUES = values(); + private final IRecipeMap target; + + FuelType(IRecipeMap target) { + this.target = target; + } + + public static FuelType get(int fuelType) { + if (fuelType < 0 || fuelType >= VALUES.length) return SemiFluid; + return VALUES[fuelType]; + } + + public IRecipeMap getTarget() { + return target; + } + } + + static { + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(COIL_HEAT); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(FUSION_THRESHOLD); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(FUEL_VALUE); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(NANO_FORGE_TIER); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(FOG_EXOTIC_TIER); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(FOG_PLASMA_TIER); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(DEFC_CASING_TIER); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(CHEMPLANT_CASING_TIER); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(QFT_FOCUS_TIER); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(DISSOLUTION_TANK_RATIO); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(RTG_DURATION_IN_DAYS); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(LNG_BASIC_OUTPUT); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(NFR_COIL_TIER); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(NKE_RANGE); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(PRECISE_ASSEMBLER_CASING_TIER); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(COAL_CASING_TIER); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(COMPRESSION_TIER); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(RESEARCH_STATION_DATA); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(SIEVERTS); + GTRecipeMapUtil.SPECIAL_VALUE_ALIASES.add(DECAY_TICKS); + + } +} diff --git a/src/main/java/gregtech/api/util/GTRecipeMapUtil.java b/src/main/java/gregtech/api/util/GTRecipeMapUtil.java new file mode 100644 index 0000000000..86ef5b4031 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTRecipeMapUtil.java @@ -0,0 +1,198 @@ +package gregtech.api.util; + +import static gregtech.api.enums.Mods.GregTech; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.function.Consumer; +import java.util.function.Function; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Multimap; + +import cpw.mods.fml.common.Loader; +import gnu.trove.list.TIntList; +import gnu.trove.list.array.TIntArrayList; +import gregtech.api.interfaces.IRecipeMap; +import gregtech.api.recipe.RecipeMetadataKey; + +/** + * Define helpers useful in the creation of recipe maps. + */ +public class GTRecipeMapUtil { + + public static final Function ALL_FAKE_RECIPE = r -> { + r.mFakeRecipe = true; + return r; + }; + + private static final Map addonRecipeMaps = new HashMap<>(); + private static final Multimap> delayedActions = ArrayListMultimap.create(); + + /** + * Set of metadata that work as alias for special values. + */ + public static final Set> SPECIAL_VALUE_ALIASES = new HashSet<>(); + + public static T[] appendArray(T[] arr, T val) { + T[] newArr = Arrays.copyOf(arr, arr.length + 1); + newArr[arr.length] = val; + return newArr; + } + + public static GTRecipeTemplate asTemplate(GTRecipe r) { + return asTemplate(r, false); + } + + public static GTRecipeTemplate asTemplate(GTRecipe r, boolean includeTemplate) { + return new GTRecipeTemplate(r, includeTemplate); + } + + public static List buildRecipeForMultiblock(GTRecipeBuilder b) { + return buildOrEmpty(convertCellToFluid(b, true)); + + } + + public static List buildRecipeForMultiblockNoCircuit(GTRecipeBuilder b) { + return buildOrEmpty(convertCellToFluid(b, false)); + } + + public static GTRecipeBuilder convertCellToFluid(GTRecipeBuilder b, boolean removeIntegratedCircuit) { + List itemInputs = new ArrayList<>(Arrays.asList(b.getItemInputsBasic())); + List itemOutputs = new ArrayList<>(Arrays.asList(b.getItemOutputs())); + List fluidInputs = new ArrayList<>(Arrays.asList(b.getFluidInputs())); + List fluidOutputs = new ArrayList<>(Arrays.asList(b.getFluidOutputs())); + TIntList chances = b.getChances() != null ? new TIntArrayList(b.getChances()) : null; + cellToFluid(itemInputs, fluidInputs, removeIntegratedCircuit, null); + cellToFluid(itemOutputs, fluidOutputs, removeIntegratedCircuit, chances); + itemInputs.removeIf(Objects::isNull); + if (chances == null) { + itemOutputs.removeIf(Objects::isNull); + } + fluidInputs.removeIf(Objects::isNull); + fluidOutputs.removeIf(Objects::isNull); + b.itemInputs(itemInputs.toArray(new ItemStack[0])); + b.itemOutputs(itemOutputs.toArray(new ItemStack[0]), chances != null ? chances.toArray() : null); + b.fluidInputs(fluidInputs.toArray(new FluidStack[0])); + b.fluidOutputs(fluidOutputs.toArray(new FluidStack[0])); + return b; + } + + private static void cellToFluid(List items, List fluids, boolean removeIntegratedCircuit, + TIntList chances) { + for (int i = items.size() - 1; i >= 0; i--) { + ItemStack item = items.get(i); + if (GTUtility.getFluidForFilledItem(item, true) != null || GTUtility.isCellEmpty(item) + || (removeIntegratedCircuit && GTUtility.isAnyIntegratedCircuit(item))) { + fluids.add(GTUtility.convertCellToFluid(item)); + items.remove(i); + if (chances != null) chances.removeAt(i); + } + } + } + + public static List buildOrEmpty(GTRecipeBuilder builder) { + return builder.build() + .map(Collections::singletonList) + .orElse(Collections.emptyList()); + } + + /** + * Register a recipe map as part of your mod's public API under your modID and your given identifier. + * + * @param identifier map name + * @param recipeMap the map to register + * @param dependencies fully qualified identifier of dependent recipe maps. scheduler will only add recipes to one + * of the dependent recipe maps and this recipe map concurrently, guaranteeing thread safety. + * Currently unused, but you are advised to fill them, so that when The Day (tm) comes we don't + * end up with a bunch of weird concurrency bugs. + */ + public static void registerRecipeMap(String identifier, IRecipeMap recipeMap, RecipeMapDependency... dependencies) { + String modId = Loader.instance() + .activeModContainer() + .getModId(); + if (GregTech.ID.equals(modId)) throw new IllegalStateException( + "do not register recipe map under the name of gregtech! do it in your own preinit!"); + String id = modId + "@" + identifier; + addonRecipeMaps.put(id, recipeMap); + for (Consumer action : delayedActions.get(id)) { + action.accept(recipeMap); + } + } + + /** + * Use this to register recipes for a recipe map in addon not present at compile time. + *

+ * Do not use this for recipes maps already in {@link GTRecipeConstants}. None of them will be available via this + * interface! + * + * @param identifier recipe map id + * @param registerAction DO NOT ADD RECIPES TO MAPS OTHER THAN THE ONE PASSED TO YOU. DO NOT DO ANYTHING OTHER THAN + * ADDING RECIPES TO THIS R + */ + public static void registerRecipesFor(String modid, String identifier, Consumer registerAction) { + String id = modid + "@" + identifier; + IRecipeMap map = addonRecipeMaps.get(id); + if (map == null) delayedActions.put(id, registerAction); + else registerAction.accept(map); + } + + public static final class GTRecipeTemplate { + + private final GTRecipe template; + private final List derivatives = new ArrayList<>(); + + private GTRecipeTemplate(GTRecipe template, boolean includeTemplate) { + this.template = template; + if (includeTemplate) derivatives.add(template); + } + + public GTRecipe derive() { + GTRecipe derived = template.copyShallow(); + derivatives.add(derived); + return derived; + } + + public List getAll() { + // fix shallow references + Set references = Collections.newSetFromMap(new IdentityHashMap<>()); + for (GTRecipe r : derivatives) { + if (!references.add(r.mInputs)) r.mInputs = r.mInputs.clone(); + if (!references.add(r.mOutputs)) r.mOutputs = r.mOutputs.clone(); + if (!references.add(r.mFluidInputs)) r.mFluidInputs = r.mFluidInputs.clone(); + if (!references.add(r.mFluidOutputs)) r.mFluidOutputs = r.mFluidOutputs.clone(); + } + return derivatives; + } + } + + public static final class RecipeMapDependency { + + private final IRecipeMap obj; + private final String id; + + public RecipeMapDependency(IRecipeMap obj, String id) { + this.obj = obj; + this.id = id; + } + + public static RecipeMapDependency create(String id) { + return new RecipeMapDependency(null, id); + } + + public static RecipeMapDependency create(IRecipeMap obj) { + return new RecipeMapDependency(obj, null); + } + } +} diff --git a/src/main/java/gregtech/api/util/GTRecipeRegistrator.java b/src/main/java/gregtech/api/util/GTRecipeRegistrator.java new file mode 100644 index 0000000000..919b37e7d9 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTRecipeRegistrator.java @@ -0,0 +1,872 @@ +package gregtech.api.util; + +import static gregtech.api.enums.GTValues.L; +import static gregtech.api.enums.GTValues.M; +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.enums.GTValues.VP; +import static gregtech.api.enums.Materials.Bronze; +import static gregtech.api.enums.Materials.Cobalt; +import static gregtech.api.enums.Materials.DarkSteel; +import static gregtech.api.enums.Materials.Diamond; +import static gregtech.api.enums.Materials.FierySteel; +import static gregtech.api.enums.Materials.Gold; +import static gregtech.api.enums.Materials.Iron; +import static gregtech.api.enums.Materials.IronWood; +import static gregtech.api.enums.Materials.Knightmetal; +import static gregtech.api.enums.Materials.Lead; +import static gregtech.api.enums.Materials.Ruby; +import static gregtech.api.enums.Materials.Sapphire; +import static gregtech.api.enums.Materials.Steel; +import static gregtech.api.enums.Materials.Steeleaf; +import static gregtech.api.enums.Materials.Thaumium; +import static gregtech.api.enums.Materials.Void; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.wiremillRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.RECYCLE; +import static gregtech.api.util.GTRecipeConstants.UniversalArcFurnace; +import static gregtech.api.util.GTUtility.calculateRecipeEU; +import static gregtech.api.util.GTUtility.getTier; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.IdentityHashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +import com.google.common.collect.HashMultimap; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.SetMultimap; + +import cpw.mods.fml.relauncher.ReflectionHelper; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TierEU; +import gregtech.api.objects.ItemData; +import gregtech.api.objects.MaterialStack; +import gregtech.api.recipe.RecipeCategories; +import ic2.api.reactor.IReactorComponent; + +/** + * Class for Automatic Recipe registering. + */ +public class GTRecipeRegistrator { + + /** + * List of Materials, which are used in the Creation of Sticks. All Rod Materials are automatically added to this + * List. + */ + public static final List sRodMaterialList = new ArrayList<>(); + + private static final ItemStack sMt1 = new ItemStack(Blocks.dirt, 1, 0), sMt2 = new ItemStack(Blocks.dirt, 1, 0); + private static final String s_H = "h", s_F = "f", s_I = "I", s_P = "P", s_R = "R"; + private static final RecipeShape[] sShapes = new RecipeShape[] { + new RecipeShape(sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1, null), + new RecipeShape(sMt1, null, sMt1, sMt1, null, sMt1, sMt1, sMt1, sMt1), + new RecipeShape(null, sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1), + new RecipeShape(sMt1, sMt1, sMt1, sMt1, null, sMt1, null, null, null), + new RecipeShape(sMt1, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1), + new RecipeShape(sMt1, sMt1, sMt1, sMt1, null, sMt1, sMt1, null, sMt1), + new RecipeShape(null, null, null, sMt1, null, sMt1, sMt1, null, sMt1), + new RecipeShape(null, sMt1, null, null, sMt1, null, null, sMt2, null), + new RecipeShape(sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2, null), + new RecipeShape(null, sMt1, null, null, sMt2, null, null, sMt2, null), + new RecipeShape(sMt1, sMt1, null, sMt1, sMt2, null, null, sMt2, null), + new RecipeShape(null, sMt1, sMt1, null, sMt2, sMt1, null, sMt2, null), + new RecipeShape(sMt1, sMt1, null, null, sMt2, null, null, sMt2, null), + new RecipeShape(null, sMt1, sMt1, null, sMt2, null, null, sMt2, null), + new RecipeShape(null, sMt1, null, sMt1, null, null, null, sMt1, sMt2), + new RecipeShape(null, sMt1, null, null, null, sMt1, sMt2, sMt1, null), + new RecipeShape(null, sMt1, null, sMt1, null, sMt1, null, null, sMt2), + new RecipeShape(null, sMt1, null, sMt1, null, sMt1, sMt2, null, null), + new RecipeShape(null, sMt2, null, null, sMt1, null, null, sMt1, null), + new RecipeShape(null, sMt2, null, null, sMt2, null, sMt1, sMt1, sMt1), + new RecipeShape(null, sMt2, null, null, sMt2, null, null, sMt1, null), + new RecipeShape(null, sMt2, null, sMt1, sMt2, null, sMt1, sMt1, null), + new RecipeShape(null, sMt2, null, null, sMt2, sMt1, null, sMt1, sMt1), + new RecipeShape(null, sMt2, null, null, sMt2, null, sMt1, sMt1, null), + new RecipeShape(sMt1, null, null, null, sMt2, null, null, null, sMt2), + new RecipeShape(null, null, sMt1, null, sMt2, null, sMt2, null, null), + new RecipeShape(sMt1, null, null, null, sMt2, null, null, null, null), + new RecipeShape(null, null, sMt1, null, sMt2, null, null, null, null), + new RecipeShape(sMt1, sMt2, null, null, null, null, null, null, null), + new RecipeShape(sMt2, sMt1, null, null, null, null, null, null, null), + new RecipeShape(sMt1, null, null, sMt2, null, null, null, null, null), + new RecipeShape(sMt2, null, null, sMt1, null, null, null, null, null), + new RecipeShape(sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, null, sMt2, null), + new RecipeShape(sMt1, sMt1, null, sMt1, sMt1, sMt2, sMt1, sMt1, null), + new RecipeShape(null, sMt1, sMt1, sMt2, sMt1, sMt1, null, sMt1, sMt1), + new RecipeShape(null, sMt2, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1), + new RecipeShape(sMt1, sMt1, sMt1, sMt1, sMt2, sMt1, null, sMt2, null), + new RecipeShape(sMt1, sMt1, null, sMt1, sMt2, sMt2, sMt1, sMt1, null), + new RecipeShape(null, sMt1, sMt1, sMt2, sMt2, sMt1, null, sMt1, sMt1), + new RecipeShape(null, sMt2, null, sMt1, sMt2, sMt1, sMt1, sMt1, sMt1), + new RecipeShape(sMt1, null, null, null, sMt1, null, null, null, null), + new RecipeShape(null, sMt1, null, sMt1, null, null, null, null, null), + new RecipeShape(sMt1, sMt1, null, sMt2, null, sMt1, sMt2, null, null), + new RecipeShape(null, sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2) }; + public static final Field SHAPED_ORE_RECIPE_WIDTH = ReflectionHelper.findField(ShapedOreRecipe.class, "width"); + public static final Field SHAPED_ORE_RECIPE_HEIGHT = ReflectionHelper.findField(ShapedOreRecipe.class, "height"); + private static volatile Map> indexedRecipeListCache; + private static final String[][] sShapesA = new String[][] { null, null, null, + { "Helmet", s_P + s_P + s_P, s_P + s_H + s_P }, + { "ChestPlate", s_P + s_H + s_P, s_P + s_P + s_P, s_P + s_P + s_P }, + { "Pants", s_P + s_P + s_P, s_P + s_H + s_P, s_P + " " + s_P }, { "Boots", s_P + " " + s_P, s_P + s_H + s_P }, + { "Sword", " " + s_P + " ", s_F + s_P + s_H, " " + s_R + " " }, + { "Pickaxe", s_P + s_I + s_I, s_F + s_R + s_H, " " + s_R + " " }, + { "Shovel", s_F + s_P + s_H, " " + s_R + " ", " " + s_R + " " }, + { "Axe", s_P + s_I + s_H, s_P + s_R + " ", s_F + s_R + " " }, + { "Axe", s_P + s_I + s_H, s_P + s_R + " ", s_F + s_R + " " }, + { "Hoe", s_P + s_I + s_H, s_F + s_R + " ", " " + s_R + " " }, + { "Hoe", s_P + s_I + s_H, s_F + s_R + " ", " " + s_R + " " }, + { "Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R }, + { "Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R }, + { "Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R }, + { "Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R }, + { "Sword", " " + s_R + " ", s_F + s_P + s_H, " " + s_P + " " }, + { "Pickaxe", " " + s_R + " ", s_F + s_R + s_H, s_P + s_I + s_I }, + { "Shovel", " " + s_R + " ", " " + s_R + " ", s_F + s_P + s_H }, + { "Axe", s_F + s_R + " ", s_P + s_R + " ", s_P + s_I + s_H }, + { "Axe", s_F + s_R + " ", s_P + s_R + " ", s_P + s_I + s_H }, + { "Hoe", " " + s_R + " ", s_F + s_R + " ", s_P + s_I + s_H }, + { "Hoe", " " + s_R + " ", s_F + s_R + " ", s_P + s_I + s_H }, + { "Spear", s_P + s_H + " ", s_F + s_R + " ", " " + " " + s_R }, + { "Spear", s_P + s_H + " ", s_F + s_R + " ", " " + " " + s_R }, { "Knive", s_H + s_P, s_R + s_F }, + { "Knive", s_F + s_H, s_P + s_R }, { "Knive", s_F + s_H, s_P + s_R }, { "Knive", s_P + s_F, s_R + s_H }, + { "Knive", s_P + s_F, s_R + s_H }, null, null, null, null, + { "WarAxe", s_P + s_P + s_P, s_P + s_R + s_P, s_F + s_R + s_H }, null, null, null, + { "Shears", s_H + s_P, s_P + s_F }, { "Shears", s_H + s_P, s_P + s_F }, + { "Scythe", s_I + s_P + s_H, s_R + s_F + s_P, s_R + " " + " " }, + { "Scythe", s_H + s_P + s_I, s_P + s_F + s_R, " " + " " + s_R } }; + + static { + // flush the cache on post load finish + GregTechAPI.sAfterGTPostload.add(() -> indexedRecipeListCache = null); + } + + public static void registerMaterialRecycling(ItemStack aStack, Materials aMaterial, long aMaterialAmount, + MaterialStack aByproduct) { + if (GTUtility.isStackInvalid(aStack)) return; + if (aByproduct != null) { + aByproduct = aByproduct.clone(); + aByproduct.mAmount /= aStack.stackSize; + } + GTOreDictUnificator.addItemData( + GTUtility.copyAmount(1, aStack), + new ItemData(aMaterial, aMaterialAmount / aStack.stackSize, aByproduct)); + } + + public static void registerMaterialRecycling(ItemStack aStack, ItemData aData) { + if (GTUtility.isStackInvalid(aStack) || GTUtility.areStacksEqual(new ItemStack(Items.blaze_rod), aStack) + || aData == null + || !aData.hasValidMaterialData() + || !aData.mMaterial.mMaterial.mAutoGenerateRecycleRecipes + || aData.mMaterial.mAmount <= 0 + || GTUtility.getFluidForFilledItem(aStack, false) != null + || aData.mMaterial.mMaterial.mSubTags.contains(SubTag.NO_RECIPES)) return; + registerReverseMacerating(GTUtility.copyAmount(1, aStack), aData, aData.mPrefix == null); + if (!GTUtility.areStacksEqual(GTModHandler.getIC2Item("iridiumOre", 1L), aStack)) { + registerReverseSmelting( + GTUtility.copyAmount(1, aStack), + aData.mMaterial.mMaterial, + aData.mMaterial.mAmount, + true); + registerReverseFluidSmelting( + GTUtility.copyAmount(1, aStack), + aData.mMaterial.mMaterial, + aData.mMaterial.mAmount, + aData.getByProduct(0)); + registerReverseArcSmelting(GTUtility.copyAmount(1, aStack), aData); + } + } + + /** + * @param aStack the stack to be recycled. + * @param aMaterial the Material. + * @param aMaterialAmount the amount of it in Material Units. + */ + public static void registerReverseFluidSmelting(ItemStack aStack, Materials aMaterial, long aMaterialAmount, + MaterialStack aByproduct) { + if (aStack == null || aMaterial == null + || aMaterial.mSmeltInto.mStandardMoltenFluid == null + || !aMaterial.contains(SubTag.SMELTING_TO_FLUID) + || (L * aMaterialAmount) / (M * aStack.stackSize) <= 0) return; + + ItemStack recipeOutput = aByproduct == null ? null + : aByproduct.mMaterial.contains(SubTag.NO_SMELTING) || !aByproduct.mMaterial.contains(SubTag.METAL) + ? aByproduct.mMaterial.contains(SubTag.FLAMMABLE) + ? GTOreDictUnificator.getDust(Materials.Ash, aByproduct.mAmount / 2) + : aByproduct.mMaterial.contains(SubTag.UNBURNABLE) + ? GTOreDictUnificator.getDustOrIngot(aByproduct.mMaterial.mSmeltInto, aByproduct.mAmount) + : null + : GTOreDictUnificator.getIngotOrDust(aByproduct.mMaterial.mSmeltInto, aByproduct.mAmount); + + GTRecipeBuilder builder = RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1, aStack)); + if (recipeOutput != null) { + builder.itemOutputs(recipeOutput); + } + long powerUsage = Math.max(8, (long) Math.sqrt(2 * aMaterial.mSmeltInto.mStandardMoltenFluid.getTemperature())); + // avoid full amp recipes + int powerTier = getTier(powerUsage); + if (powerTier > 0 && powerTier < VP.length && powerUsage > VP[powerTier]) { + powerUsage = VP[powerTier]; + } + builder.fluidOutputs(aMaterial.mSmeltInto.getMolten((L * aMaterialAmount) / (M * aStack.stackSize))) + .duration((int) Math.max(1, (24 * aMaterialAmount) / M)) + .eut(powerUsage) + .recipeCategory(RecipeCategories.fluidExtractorRecycling) + .addTo(fluidExtractionRecipes); + } + + /** + * @param aStack the stack to be recycled. + * @param aMaterial the Material. + * @param aMaterialAmount the amount of it in Material Units. + * @param aAllowAlloySmelter if it is allowed to be recycled inside the Alloy Smelter. + */ + public static void registerReverseSmelting(ItemStack aStack, Materials aMaterial, long aMaterialAmount, + boolean aAllowAlloySmelter) { + if (aStack == null || aMaterial == null + || aMaterialAmount <= 0 + || aMaterial.contains(SubTag.NO_SMELTING) + || (aMaterialAmount > M && aMaterial.contains(SubTag.METAL)) + || (aMaterial.getProcessingMaterialTierEU() > TierEU.IV)) return; + if (aMaterial == Materials.Naquadah || aMaterial == Materials.NaquadahEnriched) return; + + aMaterialAmount /= aStack.stackSize; + + if (aAllowAlloySmelter) GTModHandler.addSmeltingAndAlloySmeltingRecipe( + GTUtility.copyAmount(1, aStack), + GTOreDictUnificator.getIngot(aMaterial.mSmeltInto, aMaterialAmount), + false); + else GTModHandler.addSmeltingRecipe( + GTUtility.copyAmount(1, aStack), + GTOreDictUnificator.getIngot(aMaterial.mSmeltInto, aMaterialAmount)); + } + + public static void registerReverseArcSmelting(ItemStack aStack, Materials aMaterial, long aMaterialAmount, + MaterialStack aByProduct01, MaterialStack aByProduct02, MaterialStack aByProduct03) { + registerReverseArcSmelting( + aStack, + new ItemData( + aMaterial == null ? null : new MaterialStack(aMaterial, aMaterialAmount), + aByProduct01, + aByProduct02, + aByProduct03)); + } + + public static void registerReverseArcSmelting(ItemStack aStack, ItemData aData) { + if (aStack == null || aData == null) return; + aData = new ItemData(aData); + + if (!aData.hasValidMaterialData()) return; + boolean isRecycle = true; + + for (MaterialStack tMaterial : aData.getAllMaterialStacks()) { + if (tMaterial.mMaterial == Materials.Iron || tMaterial.mMaterial == Materials.Copper + || tMaterial.mMaterial == Materials.WroughtIron + || tMaterial.mMaterial == Materials.AnnealedCopper) { + ItemData stackData = GTOreDictUnificator.getItemData(aStack); + if (stackData != null + && (stackData.mPrefix == OrePrefixes.ingot || stackData.mPrefix == OrePrefixes.dust)) { + // iron ingot/dust -> wrought iron, copper ingot/dust -> annealed copper + isRecycle = false; + } + } + + if (tMaterial.mMaterial.contains(SubTag.UNBURNABLE)) { + tMaterial.mMaterial = tMaterial.mMaterial.mSmeltInto.mArcSmeltInto; + continue; + } + if (tMaterial.mMaterial.contains(SubTag.EXPLOSIVE)) { + tMaterial.mMaterial = Materials.Ash; + tMaterial.mAmount /= 16; + continue; + } + if (tMaterial.mMaterial.contains(SubTag.FLAMMABLE)) { + tMaterial.mMaterial = Materials.Ash; + tMaterial.mAmount /= 8; + continue; + } + if (tMaterial.mMaterial.contains(SubTag.NO_SMELTING)) { + tMaterial.mAmount = 0; + continue; + } + if (tMaterial.mMaterial.contains(SubTag.METAL)) { + + tMaterial.mMaterial = tMaterial.mMaterial.mSmeltInto.mArcSmeltInto; + continue; + } + tMaterial.mAmount = 0; + } + + aData = new ItemData(aData); + if (aData.mByProducts.length > 3) for (MaterialStack tMaterial : aData.getAllMaterialStacks()) { + if (tMaterial.mMaterial == Materials.Ash) tMaterial.mAmount = 0; + } + + aData = new ItemData(aData); + + if (!aData.hasValidMaterialData()) return; + + long tAmount = 0; + for (MaterialStack tMaterial : aData.getAllMaterialStacks()) + tAmount += tMaterial.mAmount * tMaterial.mMaterial.getMass(); + + ArrayList outputs = new ArrayList<>(); + if (GTOreDictUnificator.getIngotOrDust(aData.mMaterial) != null) { + outputs.add(GTOreDictUnificator.getIngotOrDust(aData.mMaterial)); + } + for (int i = 0; i < 8; i++) { + if (GTOreDictUnificator.getIngotOrDust(aData.getByProduct(i)) != null) { + outputs.add(GTOreDictUnificator.getIngotOrDust(aData.getByProduct(i))); + } + } + if (!outputs.isEmpty()) { + GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder(); + recipeBuilder.itemInputs(aStack) + .itemOutputs(outputs.toArray(new ItemStack[0])) + .fluidInputs(Materials.Oxygen.getGas((int) Math.max(16, tAmount / M))) + .duration(((int) Math.max(16, tAmount / M)) * TICKS) + .eut(90) + .metadata(RECYCLE, isRecycle) + .addTo(UniversalArcFurnace); + } + + } + + public static void registerReverseMacerating(ItemStack aStack, Materials aMaterial, long aMaterialAmount, + MaterialStack aByProduct01, MaterialStack aByProduct02, MaterialStack aByProduct03, boolean aAllowHammer) { + registerReverseMacerating( + aStack, + new ItemData( + aMaterial == null ? null : new MaterialStack(aMaterial, aMaterialAmount), + aByProduct01, + aByProduct02, + aByProduct03), + aAllowHammer); + } + + public static void registerReverseMacerating(ItemStack aStack, ItemData aData, boolean aAllowHammer) { + if (aStack == null || aData == null) return; + aData = new ItemData(aData); + + if (!aData.hasValidMaterialData()) return; + + for (MaterialStack tMaterial : aData.getAllMaterialStacks()) + tMaterial.mMaterial = tMaterial.mMaterial.mMacerateInto; + + aData = new ItemData(aData); + + if (!aData.hasValidMaterialData()) return; + + long tAmount = 0; + for (MaterialStack tMaterial : aData.getAllMaterialStacks()) { + tAmount += tMaterial.mAmount * tMaterial.mMaterial.getMass(); + } + + { + ArrayList outputs = new ArrayList<>(); + if (GTOreDictUnificator.getDust(aData.mMaterial) != null) { + outputs.add(GTOreDictUnificator.getDust(aData.mMaterial)); + } + for (int i = 0; i < 3; i++) { + if (GTOreDictUnificator.getDust(aData.getByProduct(i)) != null) { + outputs.add(GTOreDictUnificator.getDust(aData.getByProduct(i))); + } + } + if (!outputs.isEmpty()) { + ItemStack[] outputsArray = outputs.toArray(new ItemStack[0]); + GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder(); + recipeBuilder.itemInputs(aStack) + .itemOutputs(outputsArray) + .duration( + (aData.mMaterial.mMaterial == Materials.Marble ? 1 : (int) Math.max(16, tAmount / M)) * TICKS) + .eut(4) + .recipeCategory(RecipeCategories.maceratorRecycling) + .addTo(maceratorRecipes); + } + } + + if (!aAllowHammer) { + return; + } + + for (MaterialStack tMaterial : aData.getAllMaterialStacks()) { + if (tMaterial.mMaterial.contains(SubTag.CRYSTAL) && !tMaterial.mMaterial.contains(SubTag.METAL) + && tMaterial.mMaterial != Materials.Glass + && GTOreDictUnificator.getDust(aData.mMaterial) != null) { + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1, aStack)) + .itemOutputs(GTOreDictUnificator.getDust(aData.mMaterial)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LV) + .recipeCategory(RecipeCategories.forgeHammerRecycling) + .addTo(hammerRecipes); + break; + } + } + + } + + /** + * Place Materials which you want to replace in Non-GT-Recipes here (warning HUGHE impact on loading times!) + */ + private static final Materials[] VANILLA_MATS = { Cobalt, Gold, Iron, Lead, FierySteel, Void, Bronze, Diamond, Ruby, + Sapphire, Steel, IronWood, Steeleaf, Knightmetal, Thaumium, DarkSteel, }; + + /** + * You give this Function a Material and it will scan almost everything for adding recycling Recipes and replacing + * Ingots, Gems etc. + * + * @param aMats Materials, for example an Ingot or a Gem. + * @param aPlate the Plate referenced to aMat + * @param aRecipeReplacing allows to replace the Recipe with a Plate variant + */ + public static synchronized void registerUsagesForMaterials(String aPlate, boolean aRecipeReplacing, + ItemStack... aMats) { + for (ItemStack aMat : aMats) { + aMat = GTUtility.copyOrNull(aMat); + + if (aMat == null) continue; + + ItemData aItemData = GTOreDictUnificator.getItemData(aMat); + if (aItemData == null || aItemData.mPrefix != OrePrefixes.ingot) aPlate = null; + if (aPlate != null && GTOreDictUnificator.getFirstOre(aPlate, 1) == null) aPlate = null; + + sMt1.func_150996_a(aMat.getItem()); + sMt1.stackSize = 1; + Items.feather.setDamage(sMt1, Items.feather.getDamage(aMat)); + + sMt2.func_150996_a(new ItemStack(Blocks.dirt).getItem()); + sMt2.stackSize = 1; + Items.feather.setDamage(sMt2, 0); + + if (aItemData != null && aItemData.hasValidPrefixMaterialData()) { + for (RecipeShape tRecipe : sShapes) { + for (ItemStack tCrafted : GTModHandler.getRecipeOutputsBuffered(tRecipe.shape)) { + GTOreDictUnificator.addItemData( + tCrafted, + new ItemData(aItemData.mMaterial.mMaterial, aItemData.mMaterial.mAmount * tRecipe.amount1)); + // + // GTLog.out.println("###################################################################################"); + // GTLog.out.println("registerUsagesForMaterials used aPlate: "+aPlate); + // GTLog.out.println("registerUsagesForMaterials used aPlate: + // "+aMat.getUnlocalizedName()); + // GTLog.out.println("registerUsagesForMaterials used aPlate: + // "+aMat.getDisplayName()); + // + // GTLog.out.println("###################################################################################"); + } + } + } + registerStickStuff(aPlate, aItemData, aRecipeReplacing); + } + } + + private static List getRecipeList(RecipeShape shape) { + boolean force = !GregTechAPI.sPostloadStarted || GregTechAPI.sPostloadFinished; + if (force || indexedRecipeListCache == null) { + synchronized (GTRecipeRegistrator.class) { + if (indexedRecipeListCache == null || force) { + indexedRecipeListCache = createIndexedRecipeListCache(); + } + } + } + return indexedRecipeListCache.get(shape); + } + + private static Map> createIndexedRecipeListCache() { + Map> result = new IdentityHashMap<>(); + ArrayList allRecipeList = (ArrayList) CraftingManager.getInstance() + .getRecipeList(); + // filter using the empty slots in the shape. + // if the empty slots doesn't match, the recipe will definitely fail + SetMultimap, RecipeShape> filter = HashMultimap.create(); + for (RecipeShape shape : sShapes) { + for (List list : shape.getEmptySlotsAllVariants()) { + filter.put(list, shape); + } + } + List buffer = new ArrayList<>(9); + for (IRecipe tRecipe : allRecipeList) { + if (tRecipe instanceof ShapelessRecipes || tRecipe instanceof ShapelessOreRecipe) { + // we don't target shapeless recipes + continue; + } + buffer.clear(); + ItemStack tStack = tRecipe.getRecipeOutput(); + if (GTUtility.isStackValid(tStack) && tStack.getMaxStackSize() == 1 + && tStack.getMaxDamage() > 0 + && !(tStack.getItem() instanceof ItemBlock) + && !(tStack.getItem() instanceof IReactorComponent) + && !GTModHandler.isElectricItem(tStack) + && !GTUtility.isStackInList(tStack, GTModHandler.sNonReplaceableItems)) { + if (tRecipe instanceof ShapedOreRecipe tShapedRecipe) { + if (checkRecipeShape( + buffer, + tShapedRecipe.getInput(), + getRecipeWidth(tShapedRecipe), + getRecipeHeight(tShapedRecipe))) { + for (RecipeShape s : filter.get(buffer)) { + result.computeIfAbsent(s, k -> new ArrayList<>()) + .add(tRecipe); + } + } + } else if (tRecipe instanceof ShapedRecipes tShapedRecipe) { + if (checkRecipeShape( + buffer, + tShapedRecipe.recipeItems, + getRecipeWidth(tShapedRecipe), + getRecipeHeight(tShapedRecipe))) { + for (RecipeShape s : filter.get(buffer)) { + result.computeIfAbsent(s, k -> new ArrayList<>()) + .add(tRecipe); + } + } + } else { + for (RecipeShape s : sShapes) { + // unknown recipe type. cannot determine empty slots. we choose to add to the recipe list for + // all shapes + result.computeIfAbsent(s, k -> new ArrayList<>()) + .add(tRecipe); + } + } + } + } + return result; + } + + private static boolean checkRecipeShape(List emptySlotIndexesBuffer, Object[] input, int tRecipeWidth, + int tRecipeHeight) { + for (int y = 0; y < 3; y++) { + for (int x = 0; x < 3; x++) { + if (x >= tRecipeWidth || y >= tRecipeHeight) { + emptySlotIndexesBuffer.add(x + y * 3); + continue; + } + Object tObject = input[x + y * tRecipeWidth]; + if (tObject == null) { + emptySlotIndexesBuffer.add(x + y * 3); + continue; + } + if (tObject instanceof ItemStack + && (((ItemStack) tObject).getItem() == null || ((ItemStack) tObject).getMaxStackSize() < 2 + || ((ItemStack) tObject).getMaxDamage() > 0 + || ((ItemStack) tObject).getItem() instanceof ItemBlock)) { + return false; + } + if (tObject instanceof List && ((List) tObject).isEmpty()) { + return false; + } + } + } + return true; + } + + private static synchronized void registerStickStuff(String aPlate, ItemData aItemData, boolean aRecipeReplacing) { + ItemStack tStack; + for (Materials tMaterial : sRodMaterialList) { + ItemStack tMt2 = GTOreDictUnificator.get(OrePrefixes.stick, tMaterial, 1); + if (tMt2 != null) { + sMt2.func_150996_a(tMt2.getItem()); + sMt2.stackSize = 1; + Items.feather.setDamage(sMt2, Items.feather.getDamage(tMt2)); + + for (int i = 0; i < sShapes.length; i++) { + RecipeShape tRecipe = sShapes[i]; + + for (ItemStack tCrafted : GTModHandler + .getRecipeOutputs(getRecipeList(tRecipe), true, tRecipe.shape)) { + if (aItemData != null && aItemData.hasValidPrefixMaterialData()) + GTOreDictUnificator.addItemData( + tCrafted, + new ItemData( + aItemData.mMaterial.mMaterial, + aItemData.mMaterial.mAmount * tRecipe.amount1, + new MaterialStack(tMaterial, OrePrefixes.stick.mMaterialAmount * tRecipe.amount2))); + + if (aRecipeReplacing && aPlate != null && sShapesA[i] != null && sShapesA[i].length > 1) { + assert aItemData != null; + + if (null != (tStack = GTModHandler.removeRecipe(tRecipe.shape))) { + switch (sShapesA[i].length) { + case 2 -> GTModHandler.addCraftingRecipe( + tStack, + GTModHandler.RecipeBits.BUFFERED, + new Object[] { sShapesA[i][1], s_P.charAt(0), aPlate, s_R.charAt(0), + OrePrefixes.stick.get(tMaterial), s_I.charAt(0), aItemData }); + case 3 -> GTModHandler.addCraftingRecipe( + tStack, + GTModHandler.RecipeBits.BUFFERED, + new Object[] { sShapesA[i][1], sShapesA[i][2], s_P.charAt(0), aPlate, + s_R.charAt(0), OrePrefixes.stick.get(tMaterial), s_I.charAt(0), + aItemData }); + default -> GTModHandler.addCraftingRecipe( + tStack, + GTModHandler.RecipeBits.BUFFERED, + new Object[] { sShapesA[i][1], sShapesA[i][2], sShapesA[i][3], s_P.charAt(0), + aPlate, s_R.charAt(0), OrePrefixes.stick.get(tMaterial), s_I.charAt(0), + aItemData }); + } + } + } + } + } + } + } + } + + /** + * Registers wiremill recipes for given material using integrated circuits. + * + * @param aMaterial material to register + * @param baseDuration base duration ticks for ingot -> 1x wire recipe + * @param aEUt EU/t for recipe If you provide a proper EU tier for recipe processing then aEUt will be + * overriden with it. + */ + public static void registerWiremillRecipes(Materials aMaterial, int baseDuration, int aEUt) { + registerWiremillRecipes( + aMaterial, + baseDuration, + calculateRecipeEU(aMaterial, aEUt), + OrePrefixes.ingot, + OrePrefixes.stick, + 2); + } + + /** + * Registers wiremill recipes for given material using integrated circuits. + * + * @param aMaterial material to register + * @param baseDuration base duration ticks for ingot -> 1x wire recipe + * @param aEUt EU/t for recipe + * @param prefix1 prefix corresponds to ingot + * @param prefix2 prefix corresponds to stick + * @param multiplier amount of wires created from 1 ingot + */ + public static void registerWiremillRecipes(Materials aMaterial, int baseDuration, int aEUt, OrePrefixes prefix1, + OrePrefixes prefix2, int multiplier) { + if (GTOreDictUnificator.get(prefix1, aMaterial, 1L) != null + && GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(prefix1, aMaterial, 1L), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, multiplier)) + .duration(baseDuration * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(prefix1, aMaterial, 2L / multiplier), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt02, aMaterial, 1L)) + .duration(((int) (baseDuration * 1.5f)) * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(prefix1, aMaterial, 4L / multiplier), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt04, aMaterial, 1L)) + .duration(baseDuration * 2 * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(prefix1, aMaterial, 8L / multiplier), + GTUtility.getIntegratedCircuit(8)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt08, aMaterial, 1L)) + .duration(((int) (baseDuration * 2.5f)) * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(prefix1, aMaterial, 12L / multiplier), + GTUtility.getIntegratedCircuit(12)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt12, aMaterial, 1L)) + .duration(baseDuration * 3 * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(prefix1, aMaterial, 16L / multiplier), + GTUtility.getIntegratedCircuit(16)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt16, aMaterial, 1L)) + .duration(((int) (baseDuration * 3.5f)) * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + } + + if (GTOreDictUnificator.get(prefix2, aMaterial, 1L) != null + && GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(prefix2, aMaterial, 1L), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 2L / multiplier)) + .duration(((int) (baseDuration * 0.5f)) * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(prefix2, aMaterial, 4L / multiplier), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt02, aMaterial, 1L)) + .duration(baseDuration * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(prefix2, aMaterial, 8L / multiplier), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt04, aMaterial, 1L)) + .duration(((int) (baseDuration * 1.5f)) * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(prefix2, aMaterial, 16L / multiplier), + GTUtility.getIntegratedCircuit(8)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt08, aMaterial, 1L)) + .duration(baseDuration * 2 * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(prefix2, aMaterial, 24L / multiplier), + GTUtility.getIntegratedCircuit(12)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt12, aMaterial, 1L)) + .duration(((int) (baseDuration * 2.5f)) * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(prefix2, aMaterial, 32L / multiplier), + GTUtility.getIntegratedCircuit(16)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt16, aMaterial, 1L)) + .duration(baseDuration * 3 * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + } + if (GTOreDictUnificator.get(prefix1, aMaterial, 1L) != null + && GTOreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(prefix1, aMaterial, 1L), GTUtility.getIntegratedCircuit(3)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 4L * multiplier)) + .duration(baseDuration * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + } + if (GTOreDictUnificator.get(prefix2, aMaterial, 1L) != null + && GTOreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 1L) != null) { + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(prefix2, aMaterial, 1L), GTUtility.getIntegratedCircuit(3)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 2L * multiplier)) + .duration(((int) (baseDuration * 0.5f)) * TICKS) + .eut(aEUt) + .addTo(wiremillRecipes); + } + } + + public static boolean hasVanillaRecipes(Materials materials) { + return Arrays.stream(VANILLA_MATS) + .anyMatch(mat -> mat == materials); + } + + private static int getRecipeWidth(ShapedOreRecipe r) { + try { + return (int) SHAPED_ORE_RECIPE_WIDTH.get(r); + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); + } + } + + private static int getRecipeHeight(ShapedOreRecipe r) { + try { + return (int) SHAPED_ORE_RECIPE_HEIGHT.get(r); + } catch (ReflectiveOperationException e) { + throw new RuntimeException(e); + } + } + + private static int getRecipeHeight(ShapedRecipes r) { + return r.recipeHeight; + } + + private static int getRecipeWidth(ShapedRecipes r) { + return r.recipeWidth; + } + + private static class RecipeShape { + + private final ItemStack[] shape; + private int amount1; + private int amount2; + + public RecipeShape(ItemStack... shape) { + this.shape = shape; + + for (ItemStack stack : shape) { + if (stack == sMt1) this.amount1++; + if (stack == sMt2) this.amount2++; + } + } + + public List> getEmptySlotsAllVariants() { + // "shake" the grid in 8 direction and see if the recipe shape is still valid + // also include the "no movement" case + ImmutableList.Builder> b = ImmutableList.builder(); + for (int i = -1; i < 2; i++) { + if (i != 0 && !isColClear(i + 1)) continue; + for (int j = -1; j < 2; j++) { + if (j != 0 && !isRowClear(j + 1)) continue; + b.add(getEmptySlots(i, j)); + } + } + return b.build(); + } + + private boolean isRowClear(int row) { + for (int i = 0; i < 3; i++) { + if (shape[i + row * 3] != null) return false; + } + return true; + } + + private boolean isColClear(int col) { + for (int i = 0; i < 3; i++) { + if (shape[col + i * 3] != null) return false; + } + return true; + } + + private List getEmptySlots(int offsetX, int offsetY) { + ImmutableList.Builder b = ImmutableList.builder(); + for (int i = 0; i < shape.length; i++) { + int mappedIndex = i - offsetX - offsetY * 3; + // empty slot if it either + // 1) map to a slot outside the original shape + // 2) map to an empty slot in original shape + if (mappedIndex < 0 || mappedIndex > 8 || shape[mappedIndex] == null) b.add(i); + } + return b.build(); + } + } +} diff --git a/src/main/java/gregtech/api/util/GTRenderingWorld.java b/src/main/java/gregtech/api/util/GTRenderingWorld.java new file mode 100644 index 0000000000..ace0e9cd8d --- /dev/null +++ b/src/main/java/gregtech/api/util/GTRenderingWorld.java @@ -0,0 +1,195 @@ +package gregtech.api.util; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Objects; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.ChunkPosition; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.world.ChunkEvent; +import net.minecraftforge.event.world.WorldEvent; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.EventPriority; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; + +/** + * Provide a fake IBlockAccess to support CTM. Facade are supposed to set these when they are placed/received by client. + */ +public class GTRenderingWorld implements IBlockAccess { + + private static final GTRenderingWorld INSTANCE = new GTRenderingWorld(); + /* + * I do not think this map would ever grow too huge, so I won't go too overcomplicated on this one + */ + private final Map infos = new HashMap<>(); + private final Map> index = new HashMap<>(); + private IBlockAccess mWorld = Minecraft.getMinecraft().theWorld; + + private GTRenderingWorld() { + new FMLEventHandler(); + new ForgeEventHandler(); + } + + public static GTRenderingWorld getInstance() { + return INSTANCE; + } + + public static GTRenderingWorld getInstance(IBlockAccess aWorld) { + if (aWorld == INSTANCE) return INSTANCE; + if (aWorld == null) INSTANCE.mWorld = Minecraft.getMinecraft().theWorld; + else INSTANCE.mWorld = aWorld; + return INSTANCE; + } + + private void setWorld(IBlockAccess aWorld) { + if (aWorld == null) mWorld = Minecraft.getMinecraft().theWorld; + else mWorld = aWorld; + } + + public void register(int x, int y, int z, Block block, int meta) { + ChunkPosition key = new ChunkPosition(x, y, z); + infos.put(key, new BlockInfo(block, meta)); + index.computeIfAbsent(new ChunkCoordIntPair(x >> 4, z >> 4), p -> new HashSet<>()) + .add(key); + } + + public void unregister(int x, int y, int z, Block block, int meta) { + ChunkPosition key = new ChunkPosition(x, y, z); + if (infos.remove(key, new BlockInfo(block, meta))) { + ChunkCoordIntPair chunkKey = new ChunkCoordIntPair(x >> 4, z >> 4); + Set set = index.get(chunkKey); + set.remove(key); + if (set.isEmpty()) index.remove(chunkKey); + } + } + + @Override + public Block getBlock(int p_147439_1_, int p_147439_2_, int p_147439_3_) { + BlockInfo blockInfo = infos.get(new ChunkPosition(p_147439_1_, p_147439_2_, p_147439_3_)); + return blockInfo != null ? blockInfo.block : mWorld.getBlock(p_147439_1_, p_147439_2_, p_147439_3_); + } + + @Override + public TileEntity getTileEntity(int p_147438_1_, int p_147438_2_, int p_147438_3_) { + return mWorld.getTileEntity(p_147438_1_, p_147438_2_, p_147438_3_); + } + + @Override + public int getLightBrightnessForSkyBlocks(int p_72802_1_, int p_72802_2_, int p_72802_3_, int p_72802_4_) { + return mWorld.getLightBrightnessForSkyBlocks(p_72802_1_, p_72802_2_, p_72802_3_, p_72802_4_); + } + + @Override + public int getBlockMetadata(int p_72805_1_, int p_72805_2_, int p_72805_3_) { + BlockInfo blockInfo = infos.get(new ChunkPosition(p_72805_1_, p_72805_2_, p_72805_3_)); + return blockInfo != null ? blockInfo.meta : mWorld.getBlockMetadata(p_72805_1_, p_72805_2_, p_72805_3_); + } + + @Override + public int isBlockProvidingPowerTo(int p_72879_1_, int p_72879_2_, int p_72879_3_, int p_72879_4_) { + return mWorld.isBlockProvidingPowerTo(p_72879_1_, p_72879_2_, p_72879_3_, p_72879_4_); + } + + @Override + public boolean isAirBlock(int p_147437_1_, int p_147437_2_, int p_147437_3_) { + return getBlock(p_147437_1_, p_147437_2_, p_147437_3_).isAir(mWorld, p_147437_1_, p_147437_2_, p_147437_3_); + } + + @Override + public BiomeGenBase getBiomeGenForCoords(int p_72807_1_, int p_72807_2_) { + return mWorld.getBiomeGenForCoords(p_72807_1_, p_72807_2_); + } + + @Override + public int getHeight() { + return mWorld.getHeight(); + } + + @Override + public boolean extendedLevelsInChunkCache() { + return mWorld.extendedLevelsInChunkCache(); + } + + @Override + public boolean isSideSolid(int x, int y, int z, ForgeDirection side, boolean _default) { + return getBlock(x, y, z).isSideSolid(this, x, y, z, side); + } + + public class FMLEventHandler { + + public FMLEventHandler() { + FMLCommonHandler.instance() + .bus() + .register(this); + } + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onRenderTickStart(TickEvent.RenderTickEvent e) { + if (e.phase == TickEvent.Phase.START) mWorld = Minecraft.getMinecraft().theWorld; + } + } + + public class ForgeEventHandler { + + private ForgeEventHandler() { + MinecraftForge.EVENT_BUS.register(this); + } + + @SubscribeEvent + public void onChunkUnloaded(ChunkEvent.Unload e) { + if (!e.world.isRemote) return; + Set set = index.remove( + e.getChunk() + .getChunkCoordIntPair()); + if (set != null) infos.keySet() + .removeAll(set); + } + + @SubscribeEvent + public void onWorldUnloaded(WorldEvent.Unload e) { + if (!e.world.isRemote) return; + infos.clear(); + index.clear(); + } + } + + private static class BlockInfo { + + private final Block block; + private final int meta; + + public BlockInfo(Block block, int meta) { + this.block = block; + this.meta = meta; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + BlockInfo blockInfo = (BlockInfo) o; + + if (meta != blockInfo.meta) return false; + return Objects.equals(block, blockInfo.block); + } + + @Override + public int hashCode() { + int result = block != null ? block.hashCode() : 0; + result = 31 * result + meta; + return result; + } + } +} diff --git a/src/main/java/gregtech/api/util/GTShapedRecipe.java b/src/main/java/gregtech/api/util/GTShapedRecipe.java new file mode 100644 index 0000000000..587f3fa852 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTShapedRecipe.java @@ -0,0 +1,100 @@ +package gregtech.api.util; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.oredict.ShapedOreRecipe; + +import gregtech.api.interfaces.internal.IGTCraftingRecipe; + +public class GTShapedRecipe extends ShapedOreRecipe implements IGTCraftingRecipe { + + public final boolean mRemovableByGT, mKeepingNBT; + private final Enchantment[] mEnchantmentsAdded; + private final int[] mEnchantmentLevelsAdded; + + public GTShapedRecipe(ItemStack aResult, boolean aDismantleAble, boolean aRemovableByGT, boolean aKeepingNBT, + Enchantment[] aEnchantmentsAdded, int[] aEnchantmentLevelsAdded, Object... aRecipe) { + super(aResult, aRecipe); + mEnchantmentsAdded = aEnchantmentsAdded; + mEnchantmentLevelsAdded = aEnchantmentLevelsAdded; + mRemovableByGT = aRemovableByGT; + mKeepingNBT = aKeepingNBT; + } + + @Override + public boolean matches(InventoryCrafting aGrid, World aWorld) { + if (mKeepingNBT) { + ItemStack tStack = null; + for (int i = 0; i < aGrid.getSizeInventory(); i++) { + if (aGrid.getStackInSlot(i) != null) { + if (tStack != null) { + if ((tStack.hasTagCompound() != aGrid.getStackInSlot(i) + .hasTagCompound()) || (tStack.hasTagCompound() + && !tStack.getTagCompound() + .equals( + aGrid.getStackInSlot(i) + .getTagCompound()))) + return false; + } + tStack = aGrid.getStackInSlot(i); + } + } + } + return super.matches(aGrid, aWorld); + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting aGrid) { + ItemStack rStack = super.getCraftingResult(aGrid); + if (rStack != null) { + // Update the Stack + GTUtility.updateItemStack(rStack); + + // Keeping NBT + if (mKeepingNBT) for (int i = 0; i < aGrid.getSizeInventory(); i++) { + if (aGrid.getStackInSlot(i) != null && aGrid.getStackInSlot(i) + .hasTagCompound()) { + rStack.setTagCompound( + (NBTTagCompound) aGrid.getStackInSlot(i) + .getTagCompound() + .copy()); + break; + } + } + + // Charge Values + if (GTModHandler.isElectricItem(rStack)) { + GTModHandler.dischargeElectricItem(rStack, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false, true); + int tCharge = 0; + for (int i = 0; i < aGrid.getSizeInventory(); i++) tCharge += GTModHandler.dischargeElectricItem( + aGrid.getStackInSlot(i), + Integer.MAX_VALUE, + Integer.MAX_VALUE, + true, + true, + true); + if (tCharge > 0) GTModHandler.chargeElectricItem(rStack, tCharge, Integer.MAX_VALUE, true, false); + } + + // Add Enchantments + for (int i = 0; i < mEnchantmentsAdded.length; i++) GTUtility.ItemNBT.addEnchantment( + rStack, + mEnchantmentsAdded[i], + EnchantmentHelper.getEnchantmentLevel(mEnchantmentsAdded[i].effectId, rStack) + + mEnchantmentLevelsAdded[i]); + + // Update the Stack again + GTUtility.updateItemStack(rStack); + } + return rStack; + } + + @Override + public boolean isRemovable() { + return mRemovableByGT; + } +} diff --git a/src/main/java/gregtech/api/util/GTShapelessRecipe.java b/src/main/java/gregtech/api/util/GTShapelessRecipe.java new file mode 100644 index 0000000000..20c1d361be --- /dev/null +++ b/src/main/java/gregtech/api/util/GTShapelessRecipe.java @@ -0,0 +1,100 @@ +package gregtech.api.util; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +import gregtech.api.interfaces.internal.IGTCraftingRecipe; + +public class GTShapelessRecipe extends ShapelessOreRecipe implements IGTCraftingRecipe { + + public final boolean mRemovableByGT, mKeepingNBT; + private final Enchantment[] mEnchantmentsAdded; + private final int[] mEnchantmentLevelsAdded; + + public GTShapelessRecipe(ItemStack aResult, boolean aDismantleAble, boolean aRemovableByGT, boolean aKeepingNBT, + Enchantment[] aEnchantmentsAdded, int[] aEnchantmentLevelsAdded, Object... aRecipe) { + super(aResult, aRecipe); + mEnchantmentsAdded = aEnchantmentsAdded; + mEnchantmentLevelsAdded = aEnchantmentLevelsAdded; + mRemovableByGT = aRemovableByGT; + mKeepingNBT = aKeepingNBT; + } + + @Override + public boolean matches(InventoryCrafting aGrid, World aWorld) { + if (mKeepingNBT) { + ItemStack tStack = null; + for (int i = 0; i < aGrid.getSizeInventory(); i++) { + if (aGrid.getStackInSlot(i) != null) { + if (tStack != null) { + if ((tStack.hasTagCompound() != aGrid.getStackInSlot(i) + .hasTagCompound()) || (tStack.hasTagCompound() + && !tStack.getTagCompound() + .equals( + aGrid.getStackInSlot(i) + .getTagCompound()))) + return false; + } + tStack = aGrid.getStackInSlot(i); + } + } + } + return super.matches(aGrid, aWorld); + } + + @Override + public ItemStack getCraftingResult(InventoryCrafting aGrid) { + ItemStack rStack = super.getCraftingResult(aGrid); + if (rStack != null) { + // Update the Stack + GTUtility.updateItemStack(rStack); + + // Keeping NBT + if (mKeepingNBT) for (int i = 0; i < aGrid.getSizeInventory(); i++) { + if (aGrid.getStackInSlot(i) != null && aGrid.getStackInSlot(i) + .hasTagCompound()) { + rStack.setTagCompound( + (NBTTagCompound) aGrid.getStackInSlot(i) + .getTagCompound() + .copy()); + break; + } + } + + // Charge Values + if (GTModHandler.isElectricItem(rStack)) { + GTModHandler.dischargeElectricItem(rStack, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false, true); + int tCharge = 0; + for (int i = 0; i < aGrid.getSizeInventory(); i++) tCharge += GTModHandler.dischargeElectricItem( + aGrid.getStackInSlot(i), + Integer.MAX_VALUE, + Integer.MAX_VALUE, + true, + true, + true); + if (tCharge > 0) GTModHandler.chargeElectricItem(rStack, tCharge, Integer.MAX_VALUE, true, false); + } + + // Add Enchantments + for (int i = 0; i < mEnchantmentsAdded.length; i++) GTUtility.ItemNBT.addEnchantment( + rStack, + mEnchantmentsAdded[i], + EnchantmentHelper.getEnchantmentLevel(mEnchantmentsAdded[i].effectId, rStack) + + mEnchantmentLevelsAdded[i]); + + // Update the Stack again + GTUtility.updateItemStack(rStack); + } + return rStack; + } + + @Override + public boolean isRemovable() { + return mRemovableByGT; + } +} diff --git a/src/main/java/gregtech/api/util/GTSpawnEventHandler.java b/src/main/java/gregtech/api/util/GTSpawnEventHandler.java new file mode 100644 index 0000000000..2e86fef136 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTSpawnEventHandler.java @@ -0,0 +1,81 @@ +package gregtech.api.util; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.entity.monster.EntitySlime; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.living.LivingSpawnEvent.CheckSpawn; + +import cpw.mods.fml.common.eventhandler.Event; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import gregtech.api.enums.GTValues; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.common.tileentities.machines.basic.MTEMonsterRepellent; + +public class GTSpawnEventHandler { + + public static volatile List mobReps = new CopyOnWriteArrayList<>(); + // Future Optimiztation ideas, if this isn't sufficient + // 1: Keep a weakref list of mob repellents so we already have the tile + // 2: Have the tick method update a HashMap of (int[], range) so we don't have to load the tile at all + + public GTSpawnEventHandler() { + MinecraftForge.EVENT_BUS.register(this); + } + + // Range of a powered repellent + public static int getPoweredRepellentRange(int aTier) { + return 16 + (48 * aTier); + } + + // Range of an unpowered repellent + public static int getUnpoweredRepellentRange(int aTier) { + return 4 + (12 * aTier); + } + + @SubscribeEvent + public void denyMobSpawn(CheckSpawn event) { + if (event.getResult() == Event.Result.DENY) return; + + if (event.entityLiving instanceof EntitySlime slime && !slime.hasCustomNameTag() + && event.getResult() == Event.Result.ALLOW) { + event.setResult(Event.Result.DEFAULT); + } + + if (event.getResult() == Event.Result.ALLOW) { + return; + } + + if (event.entityLiving.isCreatureType(EnumCreatureType.monster, false)) { + final double maxRangeCheck = Math.pow(getPoweredRepellentRange(GTValues.V.length - 1), 2); + for (int[] rep : mobReps) { + if (rep[3] == event.entity.worldObj.provider.dimensionId) { + // If the chunk isn't loaded, we ignore this Repellent + if (!event.entity.worldObj.blockExists(rep[0], rep[1], rep[2])) continue; + final double dx = rep[0] + 0.5F - event.entity.posX; + final double dy = rep[1] + 0.5F - event.entity.posY; + final double dz = rep[2] + 0.5F - event.entity.posZ; + + final double check = (dx * dx + dz * dz + dy * dy); + // Fail early if outside of max range + if (check > maxRangeCheck) continue; + + final TileEntity tTile = event.entity.worldObj.getTileEntity(rep[0], rep[1], rep[2]); + if (tTile instanceof BaseMetaTileEntity metaTile + && metaTile.getMetaTileEntity() instanceof MTEMonsterRepellent repellent + && check <= Math.pow(repellent.mRange, 2)) { + if (event.entityLiving instanceof EntitySlime slime) { + slime.setCustomNameTag("DoNotSpawnSlimes"); + } + event.setResult(Event.Result.DENY); + // We're already DENYing it. No reason to keep checking + return; + } + } + } + } + } +} diff --git a/src/main/java/gregtech/api/util/GTStreamUtil.java b/src/main/java/gregtech/api/util/GTStreamUtil.java new file mode 100644 index 0000000000..4b71fe5ee8 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTStreamUtil.java @@ -0,0 +1,44 @@ +package gregtech.api.util; + +import java.util.Arrays; +import java.util.function.Supplier; +import java.util.stream.Stream; + +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public final class GTStreamUtil { + + /** + * Backport of {@link Stream#ofNullable}. + */ + public static Stream ofNullable(@Nullable T value) { + return value == null ? Stream.empty() : Stream.of(value); + } + + /** + * Returns a sequential ordered {@code Stream} whose elements are the specified values, + * if {@code condition} is true, otherwise returns an empty {@code Stream}. + * + * @param the type of stream elements + * @param values the elements of the new stream + * @return the new stream + */ + public static Stream ofConditional(boolean condition, T[] values) { + return condition ? Arrays.stream(values) : Stream.empty(); + } + + /** + * Returns a sequential {@code Stream} containing a single element, which will be lazily evaluated from supplier. + * + * @param the type of stream elements + * @param supplier the supplier for single stream element + * @return the new stream + */ + public static Stream ofSupplier(Supplier supplier) { + return Stream.generate(supplier) + .limit(1); + } +} diff --git a/src/main/java/gregtech/api/util/GTStructureUtility.java b/src/main/java/gregtech/api/util/GTStructureUtility.java new file mode 100644 index 0000000000..2109a7e75b --- /dev/null +++ b/src/main/java/gregtech/api/util/GTStructureUtility.java @@ -0,0 +1,616 @@ +package gregtech.api.util; + +import static com.gtnewhorizon.structurelib.structure.IStructureElement.PlaceResult.ACCEPT; +import static com.gtnewhorizon.structurelib.structure.IStructureElement.PlaceResult.ACCEPT_STOP; +import static com.gtnewhorizon.structurelib.structure.IStructureElement.PlaceResult.REJECT; +import static com.gtnewhorizon.structurelib.structure.IStructureElement.PlaceResult.SKIP; +import static com.gtnewhorizon.structurelib.util.ItemStackPredicate.NBTMode.EXACT; + +import java.util.Arrays; +import java.util.List; +import java.util.function.BiConsumer; +import java.util.function.BiPredicate; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.ToIntFunction; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.IChatComponent; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement; +import com.gtnewhorizon.structurelib.util.ItemStackPredicate; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IHeatingCoil; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.common.blocks.BlockCasings5; +import gregtech.common.blocks.BlockCyclotronCoils; +import gregtech.common.blocks.BlockFrameBox; +import gregtech.common.blocks.ItemMachines; + +public class GTStructureUtility { + + // private static final Map, String> customNames = new HashMap<>(); + private GTStructureUtility() { + throw new AssertionError("Not instantiable"); + } + + public static boolean hasMTE(IGregTechTileEntity aTile, Class clazz) { + return aTile != null && clazz.isInstance(aTile.getMetaTileEntity()); + } + + public static IStructureElementNoPlacement ofHatchAdder(IGTHatchAdder aHatchAdder, int aTextureIndex, + int aDots) { + return ofHatchAdder(aHatchAdder, aTextureIndex, StructureLibAPI.getBlockHint(), aDots - 1); + } + + public static IStructureElement ofFrame(Materials aFrameMaterial) { + if (aFrameMaterial == null) throw new IllegalArgumentException(); + return new IStructureElement<>() { + + private IIcon[] mIcons; + + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + if (block instanceof BlockFrameBox frameBox) { + int meta = world.getBlockMetadata(x, y, z); + Materials material = frameBox.getMaterial(meta); + return aFrameMaterial == material; + } + return false; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + if (mIcons == null) { + mIcons = new IIcon[6]; + Arrays.fill(mIcons, aFrameMaterial.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex].getIcon()); + } + StructureLibAPI.hintParticleTinted(world, x, y, z, mIcons, aFrameMaterial.mRGBa); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + ItemStack tFrameStack = getFrameStack(); + if (!GTUtility.isStackValid(tFrameStack) + || !(tFrameStack.getItem() instanceof ItemBlock tFrameStackItem)) return false; + return tFrameStackItem + .placeBlockAt(tFrameStack, null, world, x, y, z, 6, 0, 0, 0, Items.feather.getDamage(tFrameStack)); + } + + private ItemStack getFrameStack() { + return GTOreDictUnificator.get(OrePrefixes.frameGt, aFrameMaterial, 1); + } + + @Override + public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + ItemStack tFrameStack = getFrameStack(); + if (!GTUtility.isStackValid(tFrameStack) || !(tFrameStack.getItem() instanceof ItemBlock)) + return BlocksToPlace.errored; + return BlocksToPlace.create(tFrameStack); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + IItemSource s, EntityPlayerMP actor, Consumer chatter) { + return survivalPlaceBlock( + t, + world, + x, + y, + z, + trigger, + AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + if (check(t, world, x, y, z)) return SKIP; + ItemStack tFrameStack = getFrameStack(); + if (!GTUtility.isStackValid(tFrameStack) || !(tFrameStack.getItem() instanceof ItemBlock)) + return REJECT; // honestly, this is more like a programming error or pack issue + return com.gtnewhorizon.structurelib.structure.StructureUtility.survivalPlaceBlock( + tFrameStack, + ItemStackPredicate.NBTMode.IGNORE_KNOWN_INSIGNIFICANT_TAGS, + null, + false, + world, + x, + y, + z, + env.getSource(), + env.getActor(), + env.getChatter()); + } + }; + } + + public static HatchElementBuilder buildHatchAdder() { + return HatchElementBuilder.builder(); + } + + /** + * Completely equivalent to {@link #buildHatchAdder()}, except it plays nicer with type inference when statically + * imported + */ + public static HatchElementBuilder buildHatchAdder(Class typeToken) { + return HatchElementBuilder.builder(); + } + + public static IStructureElementNoPlacement ofHatchAdder(IGTHatchAdder aHatchAdder, int aTextureIndex, + Block aHintBlock, int aHintMeta) { + if (aHatchAdder == null || aHintBlock == null) { + throw new IllegalArgumentException(); + } + return new IStructureElementNoPlacement<>() { + + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity + && aHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) aTextureIndex); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, aHintBlock, aHintMeta); + return true; + } + }; + } + + public static IStructureElement ofHatchAdder(IGTHatchAdder aHatchAdder, int aTextureIndex, + Block aHintBlock, int aHintMeta, BiPredicate shouldSkip, + Function> aMetaId, final IStructureElement.PlaceResult acceptType) { + if (aHatchAdder == null) { + throw new IllegalArgumentException(); + } + return new IStructureElement<>() { + + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity + && aHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) aTextureIndex); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, aHintBlock, aHintMeta); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int i, int i1, int i2, ItemStack itemStack) { + // TODO + return false; + } + + @Override + public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + Class clazz = aMetaId.apply(t); + if (clazz == null) return BlocksToPlace.createEmpty(); + return BlocksToPlace.create(is -> clazz.isInstance(ItemMachines.getMetaTileEntity(is))); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + IItemSource s, EntityPlayerMP actor, Consumer chatter) { + return survivalPlaceBlock( + t, + world, + x, + y, + z, + trigger, + AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + if (shouldSkip != null) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + if (tileEntity instanceof IGregTechTileEntity + && shouldSkip.test(t, (IGregTechTileEntity) tileEntity)) return SKIP; + } + if (!StructureLibAPI.isBlockTriviallyReplaceable(world, x, y, z, env.getActor())) return REJECT; + Class clazz = aMetaId.apply(t); + if (clazz == null) return REJECT; + ItemStack taken = env.getSource() + .takeOne(is -> clazz.isInstance(ItemMachines.getMetaTileEntity(is)), true); + if (GTUtility.isStackInvalid(taken)) { + env.getChatter() + .accept( + new ChatComponentTranslation( + "GT5U.autoplace.error.no_mte.class_name", + clazz.getSimpleName())); + return REJECT; + } + if (com.gtnewhorizon.structurelib.structure.StructureUtility + .survivalPlaceBlock(taken, EXACT, null, true, world, x, y, z, env.getSource(), env.getActor()) + == ACCEPT) return acceptType; + return REJECT; + } + }; + } + + public static IStructureElement ofHatchAdder(IGTHatchAdder aHatchAdder, int aTextureIndex, + Block aHintBlock, int aHintMeta, BiPredicate shouldSkip, ToIntFunction aMetaId) { + if (aHatchAdder == null) { + throw new IllegalArgumentException(); + } + return new IStructureElement<>() { + + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity + && aHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) aTextureIndex); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, aHintBlock, aHintMeta); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int i, int i1, int i2, ItemStack itemStack) { + // TODO + return false; + } + + @Override + public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + ItemMachines item = (ItemMachines) Item.getItemFromBlock(GregTechAPI.sBlockMachines); + int meta = aMetaId.applyAsInt(t); + if (meta < 0) return BlocksToPlace.createEmpty(); + return BlocksToPlace.create( + ItemStackPredicate.from(item) + .setMeta(meta)); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + IItemSource s, EntityPlayerMP actor, Consumer chatter) { + return survivalPlaceBlock( + t, + world, + x, + y, + z, + trigger, + AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + if (shouldSkip != null) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + if (tileEntity instanceof IGregTechTileEntity + && shouldSkip.test(t, (IGregTechTileEntity) tileEntity)) return SKIP; + } + if (!StructureLibAPI.isBlockTriviallyReplaceable(world, x, y, z, env.getActor())) return REJECT; + ItemMachines item = (ItemMachines) Item.getItemFromBlock(GregTechAPI.sBlockMachines); + int meta = aMetaId.applyAsInt(t); + if (meta < 0) return REJECT; + ItemStack taken = env.getSource() + .takeOne( + ItemStackPredicate.from(item) + .setMeta(meta), + true); + if (GTUtility.isStackInvalid(taken)) { + env.getChatter() + .accept(new ChatComponentTranslation("GT5U.autoplace.error.no_mte.id", meta)); + return REJECT; + } + return com.gtnewhorizon.structurelib.structure.StructureUtility + .survivalPlaceBlock(taken, EXACT, null, true, world, x, y, z, env.getSource(), env.getActor()) + == ACCEPT ? ACCEPT_STOP : REJECT; + } + }; + } + + public static IStructureElement ofHatchAdderOptional(IGTHatchAdder aHatchAdder, int textureIndex, + int dots, Block placeCasing, int placeCasingMeta) { + return ofHatchAdderOptional( + aHatchAdder, + textureIndex, + StructureLibAPI.getBlockHint(), + dots - 1, + placeCasing, + placeCasingMeta); + } + + public static IStructureElement ofHatchAdderOptional(IGTHatchAdder aHatchAdder, int aTextureIndex, + Block aHintBlock, int hintMeta, Block placeCasing, int placeCasingMeta) { + if (aHatchAdder == null || aHintBlock == null) { + throw new IllegalArgumentException(); + } + return new IStructureElement<>() { + + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + Block worldBlock = world.getBlock(x, y, z); + return (tileEntity instanceof IGregTechTileEntity + && aHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) aTextureIndex)) + || (worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, aHintBlock, hintMeta); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + world.setBlock(x, y, z, placeCasing, placeCasingMeta, 2); + return true; + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + IItemSource s, EntityPlayerMP actor, Consumer chatter) { + if (check(t, world, x, y, z)) return SKIP; + return com.gtnewhorizon.structurelib.structure.StructureUtility + .survivalPlaceBlock(placeCasing, placeCasingMeta, world, x, y, z, s, actor, chatter); + } + }; + } + + /** + * Assume all coils accepted. + * + * @see #ofCoil(BiPredicate, Function) + */ + public static IStructureElement ofCoil(BiConsumer aHeatingCoilSetter, + Function aHeatingCoilGetter) { + return ofCoil((t, l) -> { + aHeatingCoilSetter.accept(t, l); + return true; + }, aHeatingCoilGetter); + } + + /** + * Heating coil structure element. + * + * @param aHeatingCoilSetter Notify the controller of this new coil. Got called exactly once per coil. Might be + * called less times if structure test fails. If the setter returns false then it assumes + * the coil is rejected. + * @param aHeatingCoilGetter Get the current heating level. Null means no coil recorded yet. + */ + public static IStructureElement ofCoil(BiPredicate aHeatingCoilSetter, + Function aHeatingCoilGetter) { + if (aHeatingCoilSetter == null || aHeatingCoilGetter == null) { + throw new IllegalArgumentException(); + } + return new IStructureElement<>() { + + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + if (!(block instanceof IHeatingCoil)) return false; + HeatingCoilLevel existingLevel = aHeatingCoilGetter.apply(t), + newLevel = ((IHeatingCoil) block).getCoilHeat(world.getBlockMetadata(x, y, z)); + if (existingLevel == null || existingLevel == HeatingCoilLevel.None) { + return aHeatingCoilSetter.test(t, newLevel); + } else { + return newLevel == existingLevel; + } + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, GregTechAPI.sBlockCasings5, getMetaFromHint(trigger)); + return true; + } + + private int getMetaFromHint(ItemStack trigger) { + return BlockCasings5.getMetaFromCoilHeat(getHeatFromHint(trigger)); + } + + private HeatingCoilLevel getHeatFromHint(ItemStack trigger) { + return HeatingCoilLevel + .getFromTier((byte) Math.min(HeatingCoilLevel.getMaxTier(), Math.max(0, trigger.stackSize - 1))); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return world.setBlock(x, y, z, GregTechAPI.sBlockCasings5, getMetaFromHint(trigger), 3); + } + + @Override + public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + return BlocksToPlace.create(GregTechAPI.sBlockCasings5, getMetaFromHint(trigger)); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + IItemSource s, EntityPlayerMP actor, Consumer chatter) { + return survivalPlaceBlock( + t, + world, + x, + y, + z, + trigger, + AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + Block block = world.getBlock(x, y, z); + boolean isCoil = block instanceof IHeatingCoil + && ((IHeatingCoil) block).getCoilHeat(world.getBlockMetadata(x, y, z)) == getHeatFromHint(trigger); + if (isCoil) return SKIP; + return com.gtnewhorizon.structurelib.structure.StructureUtility.survivalPlaceBlock( + GregTechAPI.sBlockCasings5, + getMetaFromHint(trigger), + world, + x, + y, + z, + env.getSource(), + env.getActor(), + env.getChatter()); + } + }; + } + + /** + * Assumes all solenoids are accepted. + * + * @see #ofSolenoidCoil(BiPredicate, Function) + */ + public static IStructureElement ofSolenoidCoil(BiConsumer aSolenoidTierSetter, + Function aSolenoidTierGetter) { + return ofSolenoidCoil((t, l) -> { + aSolenoidTierSetter.accept(t, l); + return true; + }, aSolenoidTierGetter); + } + + /** + * Solenoid coil structure element. + * + * @param aSolenoidTierSetter Notify the controller of this new solenoid. Got called exactly once per solenoid. + * Might be + * called less times if structure test fails. If the setter returns false then it assumes + * the solenoid is rejected. + * @param aSolenoidTierGetter Get the solenoid voltage tier. Null means no tier recorded yet. + */ + public static IStructureElement ofSolenoidCoil(BiPredicate aSolenoidTierSetter, + Function aSolenoidTierGetter) { + if (aSolenoidTierSetter == null || aSolenoidTierGetter == null) { + throw new IllegalArgumentException(); + } + return new IStructureElement<>() { + + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + + if (block != GregTechAPI.sSolenoidCoilCasings) return false; + + var coils = ((BlockCyclotronCoils) GregTechAPI.sSolenoidCoilCasings); + + Byte existingLevel = aSolenoidTierGetter.apply(t); + byte newLevel = (byte) (coils.getVoltageTier(world.getBlockMetadata(x, y, z))); + + if (existingLevel == null) { + return aSolenoidTierSetter.test(t, newLevel); + } else { + return newLevel == existingLevel; + } + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI + .hintParticle(world, x, y, z, GregTechAPI.sSolenoidCoilCasings, getMetaFromHint(trigger)); + return true; + } + + private int getMetaFromHint(ItemStack trigger) { + return Math.min(Math.max(trigger.stackSize - 1, 0), 10); + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return world.setBlock(x, y, z, GregTechAPI.sSolenoidCoilCasings, getMetaFromHint(trigger), 3); + } + + @Override + public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + return BlocksToPlace.create(GregTechAPI.sSolenoidCoilCasings, getMetaFromHint(trigger)); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + IItemSource s, EntityPlayerMP actor, Consumer chatter) { + return survivalPlaceBlock( + t, + world, + x, + y, + z, + trigger, + AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + Block block = world.getBlock(x, y, z); + + boolean isCoil = block == GregTechAPI.sSolenoidCoilCasings + && world.getBlockMetadata(x, y, z) == getMetaFromHint(trigger); + + if (isCoil) return SKIP; + + return com.gtnewhorizon.structurelib.structure.StructureUtility.survivalPlaceBlock( + GregTechAPI.sSolenoidCoilCasings, + getMetaFromHint(trigger), + world, + x, + y, + z, + env.getSource(), + env.getActor(), + env.getChatter()); + } + }; + } + + @Nonnull + public static Predicate filterByMTEClass(List> list) { + return is -> { + IMetaTileEntity tile = ItemMachines.getMetaTileEntity(is); + return tile != null && list.stream() + .anyMatch(c -> c.isInstance(tile)); + }; + } + + @Nonnull + public static Predicate filterByMTETier(int aMinTier, int aMaxTier) { + return is -> { + IMetaTileEntity tile = ItemMachines.getMetaTileEntity(is); + return tile instanceof MTETieredMachineBlock && ((MTETieredMachineBlock) tile).mTier <= aMaxTier + && ((MTETieredMachineBlock) tile).mTier >= aMinTier; + }; + } +} diff --git a/src/main/java/gregtech/api/util/GTToolHarvestHelper.java b/src/main/java/gregtech/api/util/GTToolHarvestHelper.java new file mode 100644 index 0000000000..8dd5d6b93c --- /dev/null +++ b/src/main/java/gregtech/api/util/GTToolHarvestHelper.java @@ -0,0 +1,71 @@ +package gregtech.api.util; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; + +import ic2.core.block.BlockMultiID; +import ic2.core.block.BlockScaffold; +import ic2.core.block.machine.BlockMiningPipe; +import ic2.core.block.machine.BlockMiningTip; +import ic2.core.block.wiring.BlockCable; +import ic2.core.crop.BlockCrop; + +public class GTToolHarvestHelper { + + public static boolean isAppropriateTool(Block aBlock, byte aMetaData, String... tTools) { + + if (aBlock == null || tTools == null) { + return false; + } + String targetTool = aBlock.getHarvestTool(aMetaData); + return !isStringEmpty(targetTool) && isArrayContains(targetTool, tTools); + } + + public static boolean isAppropriateMaterial(Block aBlock, Material... tMats) { + if (aBlock == null || tMats == null) { + return false; + } + return isArrayContains(aBlock.getMaterial(), tMats); + } + + public static boolean isSpecialBlock(Block aBlock, Block... tBlocks) { + if (aBlock == null || tBlocks == null) { + return false; + } + return isArrayContains(aBlock, tBlocks); + } + + public static boolean isArrayContains(T obj, T[] list) { + + if (obj == null || list == null) { + return false; + } + + for (T iObj : list) { + if (obj == iObj || obj.equals(iObj)) { + return true; + } + } + return false; + } + + public static boolean isStringEmpty(String s) { + return s == null || s.isEmpty(); + } + + public static boolean isIC2Wrenchable(Block block) { + return (block instanceof BlockMultiID && !(block instanceof BlockCable) && !(block instanceof BlockCrop)) + || block instanceof BlockScaffold + || block instanceof BlockMiningPipe + || block instanceof BlockMiningTip; + } + + public static boolean hasNull(Object... obj) { + for (Object iObj : obj) { + if (iObj == null) { + return true; + } + } + return false; + } +} diff --git a/src/main/java/gregtech/api/util/GTTooltipDataCache.java b/src/main/java/gregtech/api/util/GTTooltipDataCache.java new file mode 100644 index 0000000000..a26f7a84d8 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTTooltipDataCache.java @@ -0,0 +1,104 @@ +package gregtech.api.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.util.StatCollector; + +import gregtech.GTMod; + +public class GTTooltipDataCache { + + public static class TooltipData { + + public List text; + public List shiftText; + + public TooltipData(List text, List shiftText) { + this.text = text; + this.shiftText = shiftText; + } + } + + private final Map fetchedTooltipData = new HashMap<>(); + + /** + * Returns tooltip data respecting the user's configured verbosity levels, applying any formatting arguments. + * + * @param key the key to lookup + * @param args arguments for string formatting (prefer using positional arguments) + * @return The tooltip data the user asked for + */ + public TooltipData getData(String key, Object... args) { + TooltipData tooltipData = fetchedTooltipData.get(key); + if (tooltipData == null) { + tooltipData = getUncachedTooltipData(key, args); + fetchedTooltipData.put(key, tooltipData); + } + return tooltipData; + } + + /** + * Builds tooltip data respecting the user's configured verbosity levels, applying any formatting arguments. + * + * @param key the key to lookup + * @param args arguments for string formatting (prefer using positional arguments) + * @return The tooltip data the user asked for + */ + public TooltipData getUncachedTooltipData(String key, Object... args) { + List lines = getAllLines(key, args); + int normalLines = lines.size(); + if (Math.max(GTMod.gregtechproxy.mTooltipVerbosity, GTMod.gregtechproxy.mTooltipShiftVerbosity) >= 3) { + lines.addAll(getAllLines(key + ".extended", args)); // Are extended lines enabled? If so add them to the + // lines + } + if (lines.size() == 0) { + lines.add(key); // Fallback in case no lines could be found at all + } + return new TooltipData( + lines.subList(0, getVerbosityIndex(GTMod.gregtechproxy.mTooltipVerbosity, normalLines, lines.size())), + lines.subList(0, getVerbosityIndex(GTMod.gregtechproxy.mTooltipShiftVerbosity, normalLines, lines.size()))); + } + + /** + * Gets all the lines for the given key and every other subsequent consecutive key with a .n suffix, n in {1,2,3...} + * + * @param key the key to lookup + * @param args arguments for string formatting (prefer using positional arguments) + * @return The lines for the key and all of it's subkeys + */ + private List getAllLines(String key, Object... args) { + List lines = new ArrayList<>(); + String keyToLookup = key; + int i = 1; // First loop has no .number postfix + while (StatCollector.canTranslate(keyToLookup)) { + lines.add(StatCollector.translateToLocalFormatted(keyToLookup, args)); + keyToLookup = key + "." + i++; + } + return lines; + } + + /** + * Determines how many lines from a tooltip to include from the full line list to respect a given verbosity level. + * + * @param tooltipVerbosity the verbosity level we're applying + * @param defaultIndex return if tooltipVerbosity is 2 + * @param maxIndex return if tooltipVerbosity is greater than 2 + * @return verbosity appropriate index + */ + private static int getVerbosityIndex(int tooltipVerbosity, int defaultIndex, int maxIndex) { + int index; + if (tooltipVerbosity < 1) { + index = 0; + } else if (tooltipVerbosity == 1) { + index = 1; + } else if (tooltipVerbosity == 2) { + index = defaultIndex; + } else { + index = maxIndex; + } + return index; + } +} diff --git a/src/main/java/gregtech/api/util/GTUtil.java b/src/main/java/gregtech/api/util/GTUtil.java new file mode 100644 index 0000000000..db2a628bbe --- /dev/null +++ b/src/main/java/gregtech/api/util/GTUtil.java @@ -0,0 +1,344 @@ +package gregtech.api.util; + +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.Tuple; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.util.Constants; + +import gregtech.api.enums.ItemList; +import gregtech.api.interfaces.IDataCopyable; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.multitileentity.interfaces.IMultiTileEntity; +import gregtech.common.items.behaviors.BehaviourDataOrb; + +public class GTUtil { + + // Last broken tile entity + public static final ThreadLocal LAST_BROKEN_TILEENTITY = new ThreadLocal<>(); + + public static Tuple tuple(String key, Object value) { + return new Tuple(key, value); + } + + public static NBTTagCompound fuseNBT(NBTTagCompound nbt1, NBTTagCompound nbt2) { + if (nbt1 == null) return nbt2 == null ? new NBTTagCompound() : (NBTTagCompound) nbt2.copy(); + final NBTTagCompound rNBT = (NBTTagCompound) nbt1.copy(); + if (nbt2 == null) return rNBT; + for (Object tKey : nbt2.func_150296_c /* getKeySet */()) + if (!rNBT.hasKey(tKey.toString())) rNBT.setTag(tKey.toString(), nbt2.getTag(tKey.toString())); + return rNBT; + } + + /** + * Construct a NBTTagCompound from a series of key, value pairs. Inspired from GT6. + */ + public static NBTTagCompound makeNBT(Tuple... tags) { + final NBTTagCompound nbt = new NBTTagCompound(); + for (Tuple t : tags) { + if (t.getSecond() == null) continue; + + if (t.getSecond() instanceof Boolean) nbt.setBoolean( + t.getFirst() + .toString(), + (Boolean) t.getSecond()); + else if (t.getSecond() instanceof Byte) nbt.setByte( + t.getFirst() + .toString(), + (Byte) t.getSecond()); + else if (t.getSecond() instanceof Short) nbt.setShort( + t.getFirst() + .toString(), + (Short) t.getSecond()); + else if (t.getSecond() instanceof Integer) nbt.setInteger( + t.getFirst() + .toString(), + (Integer) t.getSecond()); + else if (t.getSecond() instanceof Long) nbt.setLong( + t.getFirst() + .toString(), + (Long) t.getSecond()); + else if (t.getSecond() instanceof Float) nbt.setFloat( + t.getFirst() + .toString(), + (Float) t.getSecond()); + else if (t.getSecond() instanceof Double) nbt.setDouble( + t.getFirst() + .toString(), + (Double) t.getSecond()); + else if (t.getSecond() instanceof String) nbt.setString( + t.getFirst() + .toString(), + (String) t.getSecond()); + else if (t.getSecond() instanceof NBTBase) nbt.setTag( + t.getFirst() + .toString(), + (NBTBase) t.getSecond()); + else nbt.setString( + t.getFirst() + .toString(), + t.getSecond() + .toString()); + } + + return nbt; + } + + /** + * Get a TileEntity + */ + public static TileEntity getTileEntity(World world, int x, int y, int z, boolean aLoadUnloadedChunks) { + if (aLoadUnloadedChunks || world.blockExists(x, y, z)) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + if (tileEntity instanceof IMultiTileEntity && ((IMultiTileEntity) tileEntity).isDead()) return null; + if (tileEntity != null) return tileEntity; + tileEntity = LAST_BROKEN_TILEENTITY.get(); + if (tileEntity != null && tileEntity.xCoord == x && tileEntity.yCoord == y && tileEntity.zCoord == z) + return tileEntity; + } + return null; + } + + /** + * Sets the TileEntity at the passed position, with the option of turning adjacent TileEntity updates off. + */ + public static TileEntity setTileEntity(World world, int x, int y, int z, TileEntity aTileEntity, + boolean aCauseTileEntityUpdates) { + if (aCauseTileEntityUpdates) world.setTileEntity(x, y, z, aTileEntity); + else { + final Chunk tChunk = world.getChunkFromChunkCoords(x >> 4, z >> 4); + if (tChunk != null) { + world.addTileEntity(aTileEntity); + tChunk.func_150812_a /* setBlockTileEntityInChunk */(x & 15, y, z & 15, aTileEntity); + tChunk.setChunkModified(); + } + } + return aTileEntity; + } + + public static boolean setBlock(World world, int x, int y, int z, Block block, short aMeta, long aFlags, + boolean aRemoveGrassBelow) { + if (aRemoveGrassBelow) { + final Block blockBelow = world.getBlock(x, y - 1, z); + if (blockBelow == Blocks.grass || blockBelow == Blocks.mycelium) + world.setBlock(x, y - 1, z, Blocks.dirt, 0, (byte) aFlags); + } + return world.setBlock(x, y, z, block, aMeta, (byte) aFlags); + } + + public static TileEntity getTileEntity(World world, ChunkCoordinates coords, boolean loadUnloadedChunks) { + return getTileEntity(world, coords.posX, coords.posY, coords.posZ, loadUnloadedChunks); + } + + /** + * Marks a Chunk dirty so it is saved + */ + public static boolean markChunkDirty(World world, int x, int z) { + if (world == null || world.isRemote) return false; + Chunk aChunk = world.getChunkFromBlockCoords(x, z); + if (aChunk == null) { + world.getBlockMetadata(x, 0, z); + aChunk = world.getChunkFromBlockCoords(x, z); + if (aChunk == null) { + GTLog.err.println( + "Some important Chunk does not exist for some reason at Coordinates X: " + x + " and Z: " + z); + return false; + } + } + aChunk.setChunkModified(); + return true; + } + + /** + * Marks a Chunk dirty so it is saved + */ + public static boolean markChunkDirty(Object maybeTile) { + return maybeTile instanceof TileEntity tileEntity + && markChunkDirty(tileEntity.getWorldObj(), tileEntity.xCoord, tileEntity.zCoord); + } + + public static int mixRGBInt(int aRGB1, int aRGB2) { + return getRGBInt( + new short[] { (short) ((getR(aRGB1) + getR(aRGB2)) >> 1), (short) ((getG(aRGB1) + getG(aRGB2)) >> 1), + (short) ((getB(aRGB1) + getB(aRGB2)) >> 1) }); + } + + public static int getRGBInt(short[] aColors) { + return aColors == null ? 16777215 : (aColors[0] << 16) | (aColors[1] << 8) | aColors[2]; + } + + public static int getRGBaInt(short[] aColors) { + return aColors == null ? 16777215 : (aColors[0]) << 16 | (aColors[1] << 8) | aColors[2] | (aColors[3] << 24); + } + + public static String toHexString(short[] aColors) { + return aColors == null ? "FFFFFF" : Integer.toHexString((aColors[0] << 16) | (aColors[1] << 8) | aColors[2]); + } + + public static int getRGBInt(short aR, short aG, short aB) { + return (aR << 16) | (aG << 8) | aB; + } + + public static int getRGBaInt(short aR, short aG, short aB, short aA) { + return (aR << 16) | (aG << 8) | aB | (aA << 24); + } + + public static short[] getRGBaArray(int aColors) { + return new short[] { (short) ((aColors >>> 16) & 255), (short) ((aColors >>> 8) & 255), (short) (aColors & 255), + (short) ((aColors >>> 24) & 255) }; + } + + public static short getR(int aColors) { + return (short) ((aColors >>> 16) & 255); + } + + public static short getG(int aColors) { + return (short) ((aColors >>> 8) & 255); + } + + public static short getB(int aColors) { + return (short) (aColors & 255); + } + + public static short getA(int aColors) { + return (short) ((aColors >>> 24) & 255); + } + + public static boolean saveMultiblockInputConfiguration(MTEMultiBlockBase controller, EntityPlayer player) { + NBTTagCompound newTag = new NBTTagCompound(); + ItemStack dataOrb = player.getHeldItem(); + if (GTUtility.isStackInvalid(dataOrb) || !ItemList.Tool_DataOrb.isStackEqual(dataOrb, false, true)) { + return false; + } + if (!controller.saveOtherHatchConfiguration(player)) { + return false; + } + newTag.setString("type", "MultiblockConfiguration"); + int count = 0; + NBTTagList list = saveConfigurationToDataStick(player, controller.mInputBusses); + if (list == null) return false; + newTag.setTag("mInputBusses", list); + count += list.tagCount(); + list = saveConfigurationToDataStick(player, controller.mInputHatches); + if (list == null) return false; + newTag.setTag("mInputHatches", list); + count += list.tagCount(); + list = saveConfigurationToDataStick(player, controller.mOutputBusses); + if (list == null) return false; + newTag.setTag("mOutputBusses", list); + count += list.tagCount(); + // Output hatch config currently cannot be copied, so we omit this part for now + // TODO this doesn't work for now + // newTag.setTag("mDualInputHatches", saveToDataStick(player, controller.mDualInputHatches)); + dataOrb.setTagCompound(newTag); + BehaviourDataOrb.setDataTitle(dataOrb, "Multiblock Hatch Configuration"); + BehaviourDataOrb.setDataName(dataOrb, String.format("%s configuration saved", count)); + return true; + } + + public static boolean hasMultiblockInputConfiguration(ItemStack dataOrb) { + return !GTUtility.isStackInvalid(dataOrb) && ItemList.Tool_DataOrb.isStackEqual(dataOrb, false, true) + && dataOrb.getTagCompound() != null + && "MultiblockConfiguration".equals( + dataOrb.getTagCompound() + .getString("type")); + } + + public static boolean loadMultiblockInputConfiguration(MTEMultiBlockBase controller, EntityPlayer player) { + ItemStack dataOrb = player.getHeldItem(); + if (!hasMultiblockInputConfiguration(dataOrb)) { + return false; + } + if (!controller.loadOtherHatchConfiguration(player)) { + return false; + } + NBTTagCompound tag = dataOrb.getTagCompound(); + if (!checkCanLoadConfigurationFromDataStick( + tag.getTagList("mInputBusses", Constants.NBT.TAG_COMPOUND), + player, + controller.mInputBusses) + || !checkCanLoadConfigurationFromDataStick( + tag.getTagList("mInputHatches", Constants.NBT.TAG_COMPOUND), + player, + controller.mInputHatches) + || !checkCanLoadConfigurationFromDataStick( + tag.getTagList("mOutputBusses", Constants.NBT.TAG_COMPOUND), + player, + controller.mOutputBusses)) + return false; + + if (!loadConfigurationFromDataStick( + tag.getTagList("mInputBusses", Constants.NBT.TAG_COMPOUND), + player, + controller.mInputBusses)) return false; + if (!loadConfigurationFromDataStick( + tag.getTagList("mInputHatches", Constants.NBT.TAG_COMPOUND), + player, + controller.mInputHatches)) return false; + if (!loadConfigurationFromDataStick( + tag.getTagList("mOutputBusses", Constants.NBT.TAG_COMPOUND), + player, + controller.mOutputBusses)) return false; + return true; + } + + private static NBTTagList saveConfigurationToDataStick(EntityPlayer player, List hatches) { + NBTTagList list = new NBTTagList(); + for (MTEHatch tHatch : filterValidMTEs(hatches)) { + if (!(tHatch instanceof IDataCopyable copyable)) { + list.appendTag(new NBTTagCompound()); + continue; + } + NBTTagCompound tag = copyable.getCopiedData(player); + if (tag == null) return null; + list.appendTag(tag); + } + return list; + } + + private static boolean loadConfigurationFromDataStick(NBTTagList list, EntityPlayer player, + List hatches) { + if (list == null || list.tagList.isEmpty()) return false; + List validMTEs = filterValidMTEs(hatches); + int end = Math.min(validMTEs.size(), list.tagCount()); + for (int i = 0; i < end; i++) { + MTEHatch tHatch = validMTEs.get(i); + NBTTagCompound tag = list.getCompoundTagAt(i); + if (!(tHatch instanceof IDataCopyable copyable)) { + if (tag.hasNoTags()) continue; + return false; + } + if (tag.hasNoTags()) return false; + if (!copyable.pasteCopiedData(player, tag)) return false; + } + return true; + } + + private static boolean checkCanLoadConfigurationFromDataStick(NBTTagList list, EntityPlayer player, + List hatches) { + if (list == null || list.tagList.isEmpty()) return false; + List validMTEs = filterValidMTEs(hatches); + int end = Math.min(validMTEs.size(), list.tagCount()); + for (int i = 0; i < end; i++) { + MTEHatch tHatch = validMTEs.get(i); + NBTTagCompound tag = list.getCompoundTagAt(i); + if (tag.hasNoTags()) continue; + if (!(tHatch instanceof IDataCopyable copyable) || !copyable.getCopiedDataIdentifier(player) + .equals(tag.getString("type"))) return false; + } + return true; + } +} diff --git a/src/main/java/gregtech/api/util/GTUtility.java b/src/main/java/gregtech/api/util/GTUtility.java new file mode 100644 index 0000000000..08a1711b97 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTUtility.java @@ -0,0 +1,4852 @@ +package gregtech.api.util; + +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.enums.GTValues.COMPASS_DIRECTIONS; +import static gregtech.api.enums.GTValues.D1; +import static gregtech.api.enums.GTValues.E; +import static gregtech.api.enums.GTValues.GT; +import static gregtech.api.enums.GTValues.L; +import static gregtech.api.enums.GTValues.M; +import static gregtech.api.enums.GTValues.NW; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.GTValues.W; +import static gregtech.api.enums.Materials.FLUID_MAP; +import static gregtech.api.enums.Mods.Translocator; +import static gregtech.common.UndergroundOil.undergroundOilReadInformation; +import static net.minecraftforge.common.util.ForgeDirection.DOWN; +import static net.minecraftforge.common.util.ForgeDirection.EAST; +import static net.minecraftforge.common.util.ForgeDirection.NORTH; +import static net.minecraftforge.common.util.ForgeDirection.SOUTH; +import static net.minecraftforge.common.util.ForgeDirection.UNKNOWN; +import static net.minecraftforge.common.util.ForgeDirection.UP; +import static net.minecraftforge.common.util.ForgeDirection.WEST; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.AbstractCollection; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.UUID; +import java.util.function.Function; +import java.util.function.IntFunction; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collector; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTBase.NBTPrimitive; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.network.play.server.S07PacketRespawn; +import net.minecraft.network.play.server.S1DPacketEntityEffect; +import net.minecraft.network.play.server.S1FPacketSetExperience; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.tileentity.TileEntityChest; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.BlockSnapshot; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.FakePlayerFactory; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.IFluidHandler; +import net.minecraftforge.oredict.OreDictionary; + +import com.google.auto.value.AutoValue; +import com.google.common.base.Suppliers; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Maps; +import com.google.common.collect.SetMultimap; +import com.gtnewhorizon.structurelib.alignment.IAlignment; +import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; +import com.mojang.authlib.GameProfile; + +import buildcraft.api.transport.IPipeTile; +import cofh.api.energy.IEnergyReceiver; +import cofh.api.transport.IItemDuct; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.damagesources.GTDamageSources; +import gregtech.api.damagesources.GTDamageSources.DamageSourceHotItem; +import gregtech.api.enchants.EnchantmentHazmat; +import gregtech.api.enchants.EnchantmentRadioactivity; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Mods; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.Textures; +import gregtech.api.enums.ToolDictNames; +import gregtech.api.events.BlockScanningEvent; +import gregtech.api.interfaces.IBlockContainer; +import gregtech.api.interfaces.IDebugableBlock; +import gregtech.api.interfaces.IHasIndexedTexture; +import gregtech.api.interfaces.IProjectileItem; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IBasicEnergyContainer; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.interfaces.tileentity.IUpgradableMachine; +import gregtech.api.items.GTGenericItem; +import gregtech.api.items.ItemEnergyArmor; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.net.GTPacketSound; +import gregtech.api.objects.CollectorUtils; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.GTItemStack2; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.threads.RunnableSound; +import gregtech.api.util.extensions.ArrayExt; +import gregtech.common.Pollution; +import gregtech.common.blocks.BlockOresAbstract; +import ic2.api.recipe.IRecipeInput; +import ic2.api.recipe.RecipeInputItemStack; +import ic2.api.recipe.RecipeInputOreDict; +import ic2.api.recipe.RecipeOutput; +import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; +import it.unimi.dsi.fastutil.objects.Reference2LongOpenHashMap; + +/** + * NEVER INCLUDE THIS FILE IN YOUR MOD!!! + *

+ * Just a few Utility Functions I use. + */ +public class GTUtility { + + /** + * Formats a number with group separator and at most 2 fraction digits. + */ + private static final Map decimalFormatters = new HashMap<>(); + + /** + * Forge screwed the Fluid Registry up again, so I make my own, which is also much more efficient than the stupid + * Stuff over there. + */ + private static final List sFluidContainerList = new ArrayList<>(); + + private static final Map sFilledContainerToData = new /* Concurrent */ HashMap<>(); + private static final Map> sEmptyContainerToFluidToData = new HashMap<>(); + private static final Map> sFluidToContainers = new HashMap<>(); + /** + * Must use {@code Supplier} here because the ore prefixes have not yet been registered at class load time. + */ + private static final Map> sOreToCobble = new HashMap<>(); + + private static final Map sOreTable = new HashMap<>(); + public static boolean TE_CHECK = false, BC_CHECK = false, CHECK_ALL = true, RF_CHECK = false; + public static Map sPlayedSoundMap = new /* Concurrent */ HashMap<>(); + private static int sBookCount = 0; + public static UUID defaultUuid = null; // maybe default non-null? + // UUID.fromString("00000000-0000-0000-0000-000000000000"); + + static { + GregTechAPI.sItemStackMappings.add(sFilledContainerToData); + GregTechAPI.sItemStackMappings.add(sEmptyContainerToFluidToData); + + // 1 is the magic index to get the cobblestone block. + // See: GT_Block_Stones.java, GT_Block_Granites.java + Function> materialToCobble = m -> Suppliers.memoize( + () -> GTOreDictUnificator.getOres(OrePrefixes.stone, m) + .get(1))::get; + sOreToCobble.put(OrePrefixes.oreBlackgranite, materialToCobble.apply(Materials.GraniteBlack)); + sOreToCobble.put(OrePrefixes.oreRedgranite, materialToCobble.apply(Materials.GraniteRed)); + sOreToCobble.put(OrePrefixes.oreMarble, materialToCobble.apply(Materials.Marble)); + sOreToCobble.put(OrePrefixes.oreBasalt, materialToCobble.apply(Materials.Basalt)); + sOreToCobble.put(OrePrefixes.oreNetherrack, () -> new ItemStack(Blocks.netherrack)); + sOreToCobble.put(OrePrefixes.oreEndstone, () -> new ItemStack(Blocks.end_stone)); + } + + public static int safeInt(long number, int margin) { + return number > Integer.MAX_VALUE - margin ? Integer.MAX_VALUE - margin : (int) number; + } + + public static int safeInt(long number) { + return number > V[V.length - 1] ? safeInt(V[V.length - 1], 1) + : number < Integer.MIN_VALUE ? Integer.MIN_VALUE : (int) number; + } + + public static Field getPublicField(Object aObject, String aField) { + Field rField = null; + try { + rField = aObject.getClass() + .getDeclaredField(aField); + } catch (Throwable e) { + /* Do nothing */ + } + return rField; + } + + public static Field getField(Object aObject, String aField) { + Field rField = null; + try { + rField = aObject.getClass() + .getDeclaredField(aField); + rField.setAccessible(true); + } catch (Throwable e) { + /* Do nothing */ + } + return rField; + } + + public static Field getField(Class aObject, String aField) { + Field rField = null; + try { + rField = aObject.getDeclaredField(aField); + rField.setAccessible(true); + } catch (Throwable e) { + /* Do nothing */ + } + return rField; + } + + public static Method getMethod(Class aObject, String aMethod, Class... aParameterTypes) { + Method rMethod = null; + try { + rMethod = aObject.getMethod(aMethod, aParameterTypes); + rMethod.setAccessible(true); + } catch (Throwable e) { + /* Do nothing */ + } + return rMethod; + } + + public static Method getMethod(Object aObject, String aMethod, Class... aParameterTypes) { + Method rMethod = null; + try { + rMethod = aObject.getClass() + .getMethod(aMethod, aParameterTypes); + rMethod.setAccessible(true); + } catch (Throwable e) { + /* Do nothing */ + } + return rMethod; + } + + public static Field getField(Object aObject, String aField, boolean aPrivate, boolean aLogErrors) { + try { + Field tField = (aObject instanceof Class) ? ((Class) aObject).getDeclaredField(aField) + : (aObject instanceof String) ? Class.forName((String) aObject) + .getDeclaredField(aField) + : aObject.getClass() + .getDeclaredField(aField); + if (aPrivate) tField.setAccessible(true); + return tField; + } catch (Throwable e) { + if (aLogErrors) e.printStackTrace(GTLog.err); + } + return null; + } + + public static Object getFieldContent(Object aObject, String aField, boolean aPrivate, boolean aLogErrors) { + try { + Field tField = (aObject instanceof Class) ? ((Class) aObject).getDeclaredField(aField) + : (aObject instanceof String) ? Class.forName((String) aObject) + .getDeclaredField(aField) + : aObject.getClass() + .getDeclaredField(aField); + if (aPrivate) tField.setAccessible(true); + return tField.get(aObject instanceof Class || aObject instanceof String ? null : aObject); + } catch (Throwable e) { + if (aLogErrors) e.printStackTrace(GTLog.err); + } + return null; + } + + public static Object callPublicMethod(Object aObject, String aMethod, Object... aParameters) { + return callMethod(aObject, aMethod, false, false, true, aParameters); + } + + public static Object callPrivateMethod(Object aObject, String aMethod, Object... aParameters) { + return callMethod(aObject, aMethod, true, false, true, aParameters); + } + + public static Object callMethod(Object aObject, String aMethod, boolean aPrivate, boolean aUseUpperCasedDataTypes, + boolean aLogErrors, Object... aParameters) { + try { + Class[] tParameterTypes = new Class[aParameters.length]; + for (byte i = 0; i < aParameters.length; i++) { + if (aParameters[i] instanceof Class) { + tParameterTypes[i] = (Class) aParameters[i]; + aParameters[i] = null; + } else { + tParameterTypes[i] = aParameters[i].getClass(); + } + if (!aUseUpperCasedDataTypes) { + if (tParameterTypes[i] == Boolean.class) tParameterTypes[i] = boolean.class; + else if (tParameterTypes[i] == Byte.class) tParameterTypes[i] = byte.class; + else if (tParameterTypes[i] == Short.class) tParameterTypes[i] = short.class; + else if (tParameterTypes[i] == Integer.class) tParameterTypes[i] = int.class; + else if (tParameterTypes[i] == Long.class) tParameterTypes[i] = long.class; + else if (tParameterTypes[i] == Float.class) tParameterTypes[i] = float.class; + else if (tParameterTypes[i] == Double.class) tParameterTypes[i] = double.class; + } + } + + Method tMethod = (aObject instanceof Class) ? ((Class) aObject).getMethod(aMethod, tParameterTypes) + : aObject.getClass() + .getMethod(aMethod, tParameterTypes); + if (aPrivate) tMethod.setAccessible(true); + return tMethod.invoke(aObject, aParameters); + } catch (Throwable e) { + if (aLogErrors) e.printStackTrace(GTLog.err); + } + return null; + } + + public static Object callConstructor(String aClass, int aConstructorIndex, Object aReplacementObject, + boolean aLogErrors, Object... aParameters) { + try { + return callConstructor( + Class.forName(aClass), + aConstructorIndex, + aReplacementObject, + aLogErrors, + aParameters); + } catch (Throwable e) { + if (aLogErrors) e.printStackTrace(GTLog.err); + } + return aReplacementObject; + } + + public static Object callConstructor(Class aClass, int aConstructorIndex, Object aReplacementObject, + boolean aLogErrors, Object... aParameters) { + if (aConstructorIndex < 0) { + try { + for (Constructor tConstructor : aClass.getConstructors()) { + try { + return tConstructor.newInstance(aParameters); + } catch (Throwable ignored) {} + } + } catch (Throwable e) { + if (aLogErrors) e.printStackTrace(GTLog.err); + } + } else { + try { + return aClass.getConstructors()[aConstructorIndex].newInstance(aParameters); + } catch (Throwable e) { + if (aLogErrors) e.printStackTrace(GTLog.err); + } + } + return aReplacementObject; + } + + public static String capitalizeString(String aString) { + if (aString != null && aString.length() > 0) return aString.substring(0, 1) + .toUpperCase() + aString.substring(1); + return E; + } + + public static boolean getPotion(EntityLivingBase aPlayer, int aPotionIndex) { + try { + Field tPotionHashmap = null; + + Field[] fields = EntityLiving.class.getDeclaredFields(); + + for (Field field : fields) { + if (field.getType() == HashMap.class) { + tPotionHashmap = field; + tPotionHashmap.setAccessible(true); + break; + } + } + + if (tPotionHashmap != null) return ((HashMap) tPotionHashmap.get(aPlayer)).get(aPotionIndex) != null; + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + return false; + } + + public static String getClassName(Object aObject) { + if (aObject == null) return "null"; + return aObject.getClass() + .getName() + .substring( + aObject.getClass() + .getName() + .lastIndexOf(".") + 1); + } + + public static void removePotion(EntityLivingBase aPlayer, int aPotionIndex) { + try { + Field tPotionHashmap = null; + + Field[] fields = EntityLiving.class.getDeclaredFields(); + + for (Field field : fields) { + if (field.getType() == HashMap.class) { + tPotionHashmap = field; + tPotionHashmap.setAccessible(true); + break; + } + } + + if (tPotionHashmap != null) ((HashMap) tPotionHashmap.get(aPlayer)).remove(aPotionIndex); + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + } + + public static boolean getFullInvisibility(EntityPlayer aPlayer) { + try { + if (aPlayer.isInvisible()) { + for (int i = 0; i < 4; i++) { + if (aPlayer.inventory.armorInventory[i] != null) { + if (aPlayer.inventory.armorInventory[i].getItem() instanceof ItemEnergyArmor) { + if ((((ItemEnergyArmor) aPlayer.inventory.armorInventory[i].getItem()).mSpecials & 512) + != 0) { + if (GTModHandler.canUseElectricItem(aPlayer.inventory.armorInventory[i], 10000)) { + return true; + } + } + } + } + } + } + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + return false; + } + + public static ItemStack suckOneItemStackAt(World aWorld, double aX, double aY, double aZ, double aL, double aH, + double aW) { + for (EntityItem tItem : aWorld.getEntitiesWithinAABB( + EntityItem.class, + AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + aL, aY + aH, aZ + aW))) { + if (!tItem.isDead) { + aWorld.removeEntity(tItem); + tItem.setDead(); + return tItem.getEntityItem(); + } + } + return null; + } + + public static byte getOppositeSide(ForgeDirection side) { + return (byte) side.getOpposite() + .ordinal(); + } + + public static byte getTier(long l) { + byte i = -1; + while (++i < V.length) if (l <= V[i]) return i; + return (byte) (V.length - 1); + } + + public static long getAmperageForTier(long voltage, byte tier) { + return ceilDiv(voltage, GTValues.V[tier]); + } + + /** + * Rounds up partial voltage that exceeds tiered voltage, e.g. 4,096 -> 8,192(IV) + */ + public static long roundUpVoltage(long voltage) { + if (voltage > V[V.length - 1]) { + return voltage; + } + return V[GTUtility.getTier(voltage)]; + } + + public static String getColoredTierNameFromVoltage(long voltage) { + return getColoredTierNameFromTier(getTier(voltage)); + } + + public static String getColoredTierNameFromTier(byte tier) { + return GTValues.TIER_COLORS[tier] + GTValues.VN[tier] + EnumChatFormatting.RESET; + } + + /** + * @return e.g. {@code " (LV)"} + */ + @Nonnull + public static String getTierNameWithParentheses(long voltage) { + byte tier = getTier(voltage); + if (tier < 0) { + return ""; + } else if (tier == 0) { + return " (" + GTValues.VN[1] + ")"; + } else if (tier >= GTValues.VN.length - 1) { + return " (MAX+)"; + } + return " (" + GTValues.VN[tier] + ")"; + } + + public static void sendChatToPlayer(EntityPlayer aPlayer, String aChatMessage) { + if (aPlayer instanceof EntityPlayerMP && aChatMessage != null) { + aPlayer.addChatComponentMessage(new ChatComponentText(aChatMessage)); + } + } + + public static void checkAvailabilities() { + if (CHECK_ALL) { + try { + Class tClass = IItemDuct.class; + tClass.getCanonicalName(); + TE_CHECK = true; + } catch (Throwable e) { + /**/ + } + try { + Class tClass = buildcraft.api.transport.IPipeTile.class; + tClass.getCanonicalName(); + BC_CHECK = true; + } catch (Throwable e) { + /**/ + } + try { + Class tClass = cofh.api.energy.IEnergyReceiver.class; + tClass.getCanonicalName(); + RF_CHECK = true; + } catch (Throwable e) { + /**/ + } + CHECK_ALL = false; + } + } + + public static boolean isConnectableNonInventoryPipe(TileEntity tileEntity, ForgeDirection side) { + if (tileEntity == null) return false; + checkAvailabilities(); + if (TE_CHECK && tileEntity instanceof IItemDuct) return true; + if (BC_CHECK && tileEntity instanceof buildcraft.api.transport.IPipeTile pipeTile) + return pipeTile.isPipeConnected(side); + return Translocator.isModLoaded() && tileEntity instanceof codechicken.translocator.TileItemTranslocator; + } + + /** + * Moves Stack from Inv-Slot to Inv-Slot, without checking if its even allowed. + * + * @return the Amount of moved Items + */ + public static byte moveStackIntoPipe(IInventory aTileEntity1, Object aTileEntity2, int[] aGrabSlots, + ForgeDirection fromSide, ForgeDirection putSide, List aFilter, boolean aInvertFilter, + byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { + return moveStackIntoPipe( + aTileEntity1, + aTileEntity2, + aGrabSlots, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + true); + } + + /** + * Moves Stack from Inv-Slot to Inv-Slot, without checking if it is even allowed. + * + * @return the Amount of moved Items + */ + public static byte moveStackIntoPipe(IInventory fromInventory, Object toObject, int[] fromSlots, + ForgeDirection fromSide, ForgeDirection putSide, List aFilter, boolean aInvertFilter, + byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, + boolean dropItem) { + if (fromInventory == null || aMaxTargetStackSize <= 0 + || aMinTargetStackSize <= 0 + || aMinTargetStackSize > aMaxTargetStackSize + || aMaxMoveAtOnce <= 0 + || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; + if (toObject != null) { + checkAvailabilities(); + if (TE_CHECK && toObject instanceof IItemDuct itemDuct) { + for (final int aGrabSlot : fromSlots) { + if (listContainsItem(aFilter, fromInventory.getStackInSlot(aGrabSlot), true, aInvertFilter)) { + if (isAllowedToTakeFromSlot( + fromInventory, + aGrabSlot, + fromSide, + fromInventory.getStackInSlot(aGrabSlot))) { + if (Math.max(aMinMoveAtOnce, aMinTargetStackSize) + <= fromInventory.getStackInSlot(aGrabSlot).stackSize) { + ItemStack tStack = copyAmount( + Math.min( + fromInventory.getStackInSlot(aGrabSlot).stackSize, + Math.min(aMaxMoveAtOnce, aMaxTargetStackSize)), + fromInventory.getStackInSlot(aGrabSlot)); + ItemStack rStack = itemDuct.insertItem(putSide, copyOrNull(tStack)); + byte tMovedItemCount = (byte) (tStack.stackSize + - (rStack == null ? 0 : rStack.stackSize)); + if (tMovedItemCount >= 1 /* Math.max(aMinMoveAtOnce, aMinTargetStackSize) */) { + fromInventory.decrStackSize(aGrabSlot, tMovedItemCount); + fromInventory.markDirty(); + return tMovedItemCount; + } + } + } + } + } + return 0; + } + if (BC_CHECK && toObject instanceof buildcraft.api.transport.IPipeTile bcPipe) { + for (int fromSlot : fromSlots) { + if (listContainsItem(aFilter, fromInventory.getStackInSlot(fromSlot), true, aInvertFilter)) { + if (isAllowedToTakeFromSlot( + fromInventory, + fromSlot, + fromSide, + fromInventory.getStackInSlot(fromSlot))) { + if (Math.max(aMinMoveAtOnce, aMinTargetStackSize) + <= fromInventory.getStackInSlot(fromSlot).stackSize) { + ItemStack tStack = copyAmount( + Math.min( + fromInventory.getStackInSlot(fromSlot).stackSize, + Math.min(aMaxMoveAtOnce, aMaxTargetStackSize)), + fromInventory.getStackInSlot(fromSlot)); + byte tMovedItemCount = (byte) bcPipe.injectItem(copyOrNull(tStack), false, putSide); + if (tMovedItemCount >= Math.max(aMinMoveAtOnce, aMinTargetStackSize)) { + tMovedItemCount = (byte) (bcPipe + .injectItem(copyAmount(tMovedItemCount, tStack), true, putSide)); + fromInventory.decrStackSize(fromSlot, tMovedItemCount); + fromInventory.markDirty(); + return tMovedItemCount; + } + } + } + } + } + return 0; + } + } + + if (fromInventory instanceof TileEntity fromTileEntity && fromSide != ForgeDirection.UNKNOWN + && fromSide.getOpposite() == ForgeDirection.getOrientation(putSide.ordinal())) { + int tX = fromTileEntity.xCoord + fromSide.offsetX, tY = fromTileEntity.yCoord + fromSide.offsetY, + tZ = fromTileEntity.zCoord + fromSide.offsetZ; + if (!hasBlockHitBox(((TileEntity) fromInventory).getWorldObj(), tX, tY, tZ) && dropItem) { + for (final int fromSlot : fromSlots) { + if (listContainsItem(aFilter, fromInventory.getStackInSlot(fromSlot), true, aInvertFilter)) { + if (isAllowedToTakeFromSlot( + fromInventory, + fromSlot, + fromSide, + fromInventory.getStackInSlot(fromSlot))) { + if (Math.max(aMinMoveAtOnce, aMinTargetStackSize) + <= fromInventory.getStackInSlot(fromSlot).stackSize) { + final ItemStack tStack = copyAmount( + Math.min( + fromInventory.getStackInSlot(fromSlot).stackSize, + Math.min(aMaxMoveAtOnce, aMaxTargetStackSize)), + fromInventory.getStackInSlot(fromSlot)); + final EntityItem tEntity = new EntityItem( + ((TileEntity) fromInventory).getWorldObj(), + tX + 0.5, + tY + 0.5, + tZ + 0.5, + tStack); + tEntity.motionX = tEntity.motionY = tEntity.motionZ = 0; + ((TileEntity) fromInventory).getWorldObj() + .spawnEntityInWorld(tEntity); + assert tStack != null; + fromInventory.decrStackSize(fromSlot, tStack.stackSize); + fromInventory.markDirty(); + return (byte) tStack.stackSize; + } + } + } + } + } + } + return 0; + } + + /** + * Moves Stack from Inv-Slot to Inv-Slot, without checking if its even allowed. (useful for internal Inventory + * Operations) + * + * @return the Amount of moved Items + */ + public static byte moveStackFromSlotAToSlotB(IInventory aTileEntity1, IInventory aTileEntity2, int aGrabFrom, + int aPutTo, byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { + if (aTileEntity1 == null || aTileEntity2 == null + || aMinTargetStackSize <= 0 + || aMinTargetStackSize > aMaxTargetStackSize + || aMaxMoveAtOnce <= 0 + || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; + + ItemStack tStack1 = aTileEntity1.getStackInSlot(aGrabFrom), tStack2 = aTileEntity2.getStackInSlot(aPutTo), + tStack3; + if (tStack1 != null) { + if (tStack2 != null && !areStacksEqual(tStack1, tStack2)) return 0; + tStack3 = copyOrNull(tStack1); + aMaxTargetStackSize = (byte) Math.min( + aMaxTargetStackSize, + Math.min( + tStack3.getMaxStackSize(), + Math.min( + tStack2 == null ? Integer.MAX_VALUE : tStack2.getMaxStackSize(), + aTileEntity2.getInventoryStackLimit()))); + tStack3.stackSize = Math + .min(tStack3.stackSize, aMaxTargetStackSize - (tStack2 == null ? 0 : tStack2.stackSize)); + if (tStack3.stackSize > aMaxMoveAtOnce) tStack3.stackSize = aMaxMoveAtOnce; + if (tStack3.stackSize + (tStack2 == null ? 0 : tStack2.stackSize) + >= Math.min(tStack3.getMaxStackSize(), aMinTargetStackSize) && tStack3.stackSize >= aMinMoveAtOnce) { + tStack3 = aTileEntity1.decrStackSize(aGrabFrom, tStack3.stackSize); + aTileEntity1.markDirty(); + if (tStack3 != null) { + if (tStack2 == null) { + aTileEntity2.setInventorySlotContents(aPutTo, copyOrNull(tStack3)); + } else { + tStack2.stackSize += tStack3.stackSize; + } + aTileEntity2.markDirty(); + return (byte) tStack3.stackSize; + } + } + } + return 0; + } + + public static boolean isAllowedToTakeFromSlot(IInventory aTileEntity, int aSlot, ForgeDirection side, + ItemStack aStack) { + if (side == ForgeDirection.UNKNOWN) { + return Arrays.stream(ForgeDirection.VALID_DIRECTIONS) + .anyMatch(d -> isAllowedToTakeFromSlot(aTileEntity, aSlot, d, aStack)); + } + if (aTileEntity instanceof ISidedInventory sided) return sided.canExtractItem(aSlot, aStack, side.ordinal()); + return true; + } + + public static boolean isAllowedToPutIntoSlot(IInventory aTileEntity, int aSlot, ForgeDirection side, + ItemStack aStack, byte aMaxStackSize) { + ItemStack tStack = aTileEntity.getStackInSlot(aSlot); + if (tStack != null && (!areStacksEqual(tStack, aStack) || tStack.stackSize >= tStack.getMaxStackSize())) + return false; + if (side == ForgeDirection.UNKNOWN) { + return Arrays.stream(ForgeDirection.VALID_DIRECTIONS) + .anyMatch(d -> isAllowedToPutIntoSlot(aTileEntity, aSlot, d, aStack, aMaxStackSize)); + } + if (aTileEntity instanceof ISidedInventory + && !((ISidedInventory) aTileEntity).canInsertItem(aSlot, aStack, side.ordinal())) return false; + return aSlot < aTileEntity.getSizeInventory() && aTileEntity.isItemValidForSlot(aSlot, aStack); + } + + /** + * moves multiple stacks from Inv-Side to Inv-Side + * + * @return the Amount of moved Items + */ + public static int moveMultipleItemStacks(Object aTileEntity1, Object aTileEntity2, ForgeDirection fromSide, + ForgeDirection putSide, List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, + byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, int aStackAmount) { + if (aTileEntity1 instanceof IInventory) return moveMultipleItemStacks( + (IInventory) aTileEntity1, + aTileEntity2, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aStackAmount, + true); + return 0; + } + + public static int moveMultipleItemStacks(IInventory fromInventory, Object toObject, ForgeDirection fromSide, + ForgeDirection putSide, List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, + byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, int aMaxStackTransfer, + boolean aDoCheckChests) { + if (fromInventory == null || aMaxTargetStackSize <= 0 + || aMinTargetStackSize <= 0 + || aMaxMoveAtOnce <= 0 + || aMinTargetStackSize > aMaxTargetStackSize + || aMinMoveAtOnce > aMaxMoveAtOnce + || aMaxStackTransfer == 0) return 0; + + // find where to take from + final int[] tGrabSlots = new int[fromInventory.getSizeInventory()]; + int tGrabSlotsSize = 0; + if (fromInventory instanceof ISidedInventory) { + for (int i : ((ISidedInventory) fromInventory).getAccessibleSlotsFromSide(fromSide.ordinal())) { + final ItemStack s = fromInventory.getStackInSlot(i); + if (s == null || !isAllowedToTakeFromSlot(fromInventory, i, fromSide, s) + || s.stackSize < aMinMoveAtOnce + || !listContainsItem(aFilter, s, true, aInvertFilter)) continue; + tGrabSlots[tGrabSlotsSize++] = i; + } + } else { + for (int i = 0; i < tGrabSlots.length; i++) { + ItemStack s = fromInventory.getStackInSlot(i); + if (s == null || s.stackSize < aMinMoveAtOnce || !listContainsItem(aFilter, s, true, aInvertFilter)) + continue; + tGrabSlots[tGrabSlotsSize++] = i; + } + } + + // no source, bail out + if (tGrabSlotsSize == 0) { + // maybe source is a double chest. check it + if (aDoCheckChests && fromInventory instanceof TileEntityChest chest) return moveFromAdjacentChests( + chest, + toObject, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer); + return 0; + } + + // if target is an inventory, e.g. chest, machine, drawers... + if (toObject instanceof IInventory toInventory) { + + // partially filled slot spare space mapping. + // value is the sum of all spare space left not counting completely empty slot + final HashMap tPutItems = new HashMap<>(toInventory.getSizeInventory()); + // partially filled slot contents + final HashMap> tPutItemStacks = new HashMap<>(toInventory.getSizeInventory()); + // completely empty slots + final List tPutFreeSlots = new ArrayList<>(toInventory.getSizeInventory()); + + // find possible target slots + int[] accessibleSlots = null; + if (toObject instanceof ISidedInventory sided) + accessibleSlots = sided.getAccessibleSlotsFromSide(putSide.ordinal()); + for (int i = 0; i < toInventory.getSizeInventory(); i++) { + int slot = i; + if (accessibleSlots != null) { + if (accessibleSlots.length <= i) break; + slot = accessibleSlots[slot]; + } + ItemStack s = toInventory.getStackInSlot(slot); + if (s == null) { + tPutFreeSlots.add(slot); + } else if ((s.stackSize < s.getMaxStackSize() && s.stackSize < toInventory.getInventoryStackLimit()) + && aMinMoveAtOnce <= s.getMaxStackSize() - s.stackSize + && isAllowedToPutIntoSlot(toInventory, slot, putSide, s, (byte) 64)) { + ItemId sID = ItemId.createNoCopy(s); + tPutItems.merge( + sID, + (Math.min(s.getMaxStackSize(), toInventory.getInventoryStackLimit()) - s.stackSize), + Integer::sum); + tPutItemStacks.computeIfAbsent(sID, k -> new ArrayList<>()) + .add(s); + } + } + + // target completely filled, bail out + if (tPutItems.isEmpty() && tPutFreeSlots.isEmpty()) { + // maybe target is a double chest. check it. + if (aDoCheckChests && toObject instanceof TileEntityChest chest) return moveToAdjacentChests( + fromInventory, + chest, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer); + return 0; + } + + // go over source stacks one by one + int tStacksMoved = 0, tTotalItemsMoved = 0; + for (int j = 0; j < tGrabSlotsSize; j++) { + final int grabSlot = tGrabSlots[j]; + int tMovedItems; + int tStackSize; + do { + tMovedItems = 0; + final ItemStack tGrabStack = fromInventory.getStackInSlot(grabSlot); + if (tGrabStack == null) break; + tStackSize = tGrabStack.stackSize; + final ItemId sID = ItemId.createNoCopy(tGrabStack); + + if (tPutItems.containsKey(sID)) { + // there is a partially filled slot, try merging + final int canPut = Math.min(tPutItems.get(sID), aMaxMoveAtOnce); + if (canPut >= aMinMoveAtOnce) { + final List putStack = tPutItemStacks.get(sID); + if (!putStack.isEmpty()) { + // can move, do merge + int toPut = Math.min(canPut, tStackSize); + tMovedItems = toPut; + for (int i = 0; i < putStack.size(); i++) { + final ItemStack s = putStack.get(i); + final int sToPut = Math.min( + Math.min( + Math.min(toPut, s.getMaxStackSize() - s.stackSize), + toInventory.getInventoryStackLimit() - s.stackSize), + aMaxTargetStackSize - s.stackSize); + if (sToPut <= 0) continue; + if (sToPut < aMinMoveAtOnce) continue; + if (s.stackSize + sToPut < aMinTargetStackSize) continue; + toPut -= sToPut; + s.stackSize += sToPut; + if (s.stackSize == s.getMaxStackSize() + || s.stackSize == toInventory.getInventoryStackLimit()) { + // this slot is full. remove this stack from candidate list + putStack.remove(i); + i--; + } + if (toPut == 0) break; + } + tMovedItems -= toPut; + if (tMovedItems > 0) { + tStackSize -= tMovedItems; + tTotalItemsMoved += tMovedItems; + // deduct spare space + tPutItems.merge(sID, tMovedItems, (a, b) -> a.equals(b) ? null : a - b); + + if (tStackSize == 0) fromInventory.setInventorySlotContents(grabSlot, null); + else tGrabStack.stackSize = tStackSize; + + fromInventory.markDirty(); + toInventory.markDirty(); + } + } + } + } + // still stuff to move & have completely empty slots + if (tStackSize > 0 && !tPutFreeSlots.isEmpty()) { + for (int i = 0; i < tPutFreeSlots.size(); i++) { + final int tPutSlot = tPutFreeSlots.get(i); + if (isAllowedToPutIntoSlot(toInventory, tPutSlot, putSide, tGrabStack, (byte) 64)) { + // allowed, now do moving + final int tMoved = moveStackFromSlotAToSlotB( + fromInventory, + toInventory, + grabSlot, + tPutSlot, + aMaxTargetStackSize, + aMinTargetStackSize, + (byte) (aMaxMoveAtOnce - tMovedItems), + aMinMoveAtOnce); + if (tMoved > 0) { + final ItemStack s = toInventory.getStackInSlot(tPutSlot); + if (s != null) { + // s might be null if tPutInventory is very special, e.g. infinity chest + // if s is null, we will not mark this slot as target candidate for anything + final int spare = Math + .min(s.getMaxStackSize(), toInventory.getInventoryStackLimit()) + - s.stackSize; + if (spare > 0) { + final ItemId ssID = ItemId.createNoCopy(s); + // add back to spare space count + tPutItems.merge(ssID, spare, Integer::sum); + // add to partially filled slot list + tPutItemStacks.computeIfAbsent(ssID, k -> new ArrayList<>()) + .add(s); + } + // this is no longer free + tPutFreeSlots.remove(i); + i--; + } + // else -> noop + // this is still a free slot. no need to do anything. + tTotalItemsMoved += tMoved; + tMovedItems += tMoved; + tStackSize -= tMoved; + if (tStackSize == 0) break; + } + } + } + } + + if (tMovedItems > 0) { + // check if we have moved enough stacks + if (++tStacksMoved >= aMaxStackTransfer) return tTotalItemsMoved; + } + } while (tMovedItems > 0 && tStackSize > 0); // support inventories that store more than a stack in a + // slot + } + + // check if source is a double chest, if yes, try move from the adjacent as well + if (aDoCheckChests && fromInventory instanceof TileEntityChest chest) { + final int tAmount = moveFromAdjacentChests( + chest, + toObject, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer - tStacksMoved); + if (tAmount != 0) return tAmount + tTotalItemsMoved; + } + + // check if target is a double chest, if yes, try move to the adjacent as well + if (aDoCheckChests && toObject instanceof TileEntityChest chest) { + final int tAmount = moveToAdjacentChests( + fromInventory, + chest, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer - tStacksMoved); + if (tAmount != 0) return tAmount + tTotalItemsMoved; + } + + return tTotalItemsMoved; + } + // there should be a function to transfer more than 1 stack in a pipe + // however I do not see any ways to improve it. too much work for what it is worth + int tTotalItemsMoved = 0; + final int tGrabInventorySize = tGrabSlots.length; + for (int i = 0; i < tGrabInventorySize; i++) { + final int tMoved = moveStackIntoPipe( + fromInventory, + toObject, + tGrabSlots, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aDoCheckChests); + if (tMoved == 0) return tTotalItemsMoved; + else tTotalItemsMoved += tMoved; + } + return 0; + } + + private static int moveToAdjacentChests(IInventory aTileEntity1, TileEntityChest aTargetChest, + ForgeDirection fromSide, ForgeDirection putSide, List aFilter, boolean aInvertFilter, + byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, + int aMaxStackTransfer) { + if (aTargetChest.adjacentChestChecked) { + if (aTargetChest.adjacentChestXNeg != null) { + return moveMultipleItemStacks( + aTileEntity1, + aTargetChest.adjacentChestXNeg, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer, + false); + } else if (aTargetChest.adjacentChestZNeg != null) { + return moveMultipleItemStacks( + aTileEntity1, + aTargetChest.adjacentChestZNeg, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer, + false); + } else if (aTargetChest.adjacentChestXPos != null) { + return moveMultipleItemStacks( + aTileEntity1, + aTargetChest.adjacentChestXPos, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer, + false); + } else if (aTargetChest.adjacentChestZPos != null) { + return moveMultipleItemStacks( + aTileEntity1, + aTargetChest.adjacentChestZPos, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer, + false); + } + } + return 0; + } + + private static int moveFromAdjacentChests(TileEntityChest fromTileEntityChest, Object toObject, + ForgeDirection fromSide, ForgeDirection putSide, List aFilter, boolean aInvertFilter, + byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, + int aMaxStackTransfer) { + if (fromTileEntityChest.adjacentChestXNeg != null) { + return moveMultipleItemStacks( + fromTileEntityChest.adjacentChestXNeg, + toObject, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer, + false); + } else if (fromTileEntityChest.adjacentChestZNeg != null) { + return moveMultipleItemStacks( + fromTileEntityChest.adjacentChestZNeg, + toObject, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer, + false); + } else if (fromTileEntityChest.adjacentChestXPos != null) { + return moveMultipleItemStacks( + fromTileEntityChest.adjacentChestXPos, + toObject, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer, + false); + } else if (fromTileEntityChest.adjacentChestZPos != null) { + return moveMultipleItemStacks( + fromTileEntityChest.adjacentChestZPos, + toObject, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aMaxStackTransfer, + false); + } + return 0; + } + + /** + * Moves Stack from Inv-Side to Inv-Side. + * + * @return the Amount of moved Items + */ + public static byte moveOneItemStack(Object fromObject, Object toObject, ForgeDirection fromSide, + ForgeDirection putSide, List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, + byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { + if (fromObject instanceof IInventory inv) return moveOneItemStack( + inv, + toObject, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + true); + return 0; + } + + /** + * This is only because I needed an additional Parameter for the Double Chest Check. + */ + private static byte moveOneItemStack(IInventory fromInventory, Object toObject, ForgeDirection fromSide, + ForgeDirection putSide, List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, + byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, boolean aDoCheckChests) { + if (fromInventory == null || aMaxTargetStackSize <= 0 + || aMinTargetStackSize <= 0 + || aMaxMoveAtOnce <= 0 + || aMinTargetStackSize > aMaxTargetStackSize + || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; + + int[] tGrabSlots = null; + if (fromInventory instanceof ISidedInventory) + tGrabSlots = ((ISidedInventory) fromInventory).getAccessibleSlotsFromSide(fromSide.ordinal()); + if (tGrabSlots == null) { + tGrabSlots = new int[fromInventory.getSizeInventory()]; + for (int i = 0; i < tGrabSlots.length; i++) tGrabSlots[i] = i; + } + + if (toObject instanceof IInventory inv) { + int[] tPutSlots = null; + if (toObject instanceof ISidedInventory sided) + tPutSlots = sided.getAccessibleSlotsFromSide(putSide.ordinal()); + + if (tPutSlots == null) { + tPutSlots = new int[inv.getSizeInventory()]; + for (int i = 0; i < tPutSlots.length; i++) tPutSlots[i] = i; + } + + for (final int tGrabSlot : tGrabSlots) { + byte tMovedItemCount = 0; + final ItemStack tGrabStack = fromInventory.getStackInSlot(tGrabSlot); + if (listContainsItem(aFilter, tGrabStack, true, aInvertFilter) + && (tGrabStack.stackSize >= aMinMoveAtOnce + && isAllowedToTakeFromSlot(fromInventory, tGrabSlot, fromSide, tGrabStack))) { + for (final int tPutSlot : tPutSlots) { + if (isAllowedToPutIntoSlot(inv, tPutSlot, putSide, tGrabStack, aMaxTargetStackSize)) { + tMovedItemCount += moveStackFromSlotAToSlotB( + fromInventory, + inv, + tGrabSlot, + tPutSlot, + aMaxTargetStackSize, + aMinTargetStackSize, + (byte) (aMaxMoveAtOnce - tMovedItemCount), + aMinMoveAtOnce); + if (tMovedItemCount >= aMaxMoveAtOnce || (tMovedItemCount > 0 && aMaxTargetStackSize < 64)) + return tMovedItemCount; + } + } + + } + if (tMovedItemCount > 0) return tMovedItemCount; + } + + if (aDoCheckChests && fromInventory instanceof TileEntityChest fromChest + && (fromChest.adjacentChestChecked)) { + byte tAmount = 0; + if (fromChest.adjacentChestXNeg != null) { + tAmount = moveOneItemStack( + fromChest.adjacentChestXNeg, + toObject, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } else if (fromChest.adjacentChestZNeg != null) { + tAmount = moveOneItemStack( + fromChest.adjacentChestZNeg, + toObject, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } else if (fromChest.adjacentChestXPos != null) { + tAmount = moveOneItemStack( + fromChest.adjacentChestXPos, + toObject, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } else if (fromChest.adjacentChestZPos != null) { + tAmount = moveOneItemStack( + fromChest.adjacentChestZPos, + toObject, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } + if (tAmount != 0) return tAmount; + + } + if (aDoCheckChests && toObject instanceof TileEntityChest toChest && (toChest.adjacentChestChecked)) { + byte tAmount = 0; + if (toChest.adjacentChestXNeg != null) { + tAmount = moveOneItemStack( + fromInventory, + toChest.adjacentChestXNeg, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } else if (toChest.adjacentChestZNeg != null) { + tAmount = moveOneItemStack( + fromInventory, + toChest.adjacentChestZNeg, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } else if (toChest.adjacentChestXPos != null) { + tAmount = moveOneItemStack( + fromInventory, + toChest.adjacentChestXPos, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } else if (toChest.adjacentChestZPos != null) { + tAmount = moveOneItemStack( + fromInventory, + toChest.adjacentChestZPos, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } + if (tAmount != 0) return tAmount; + + } + } + + return moveStackIntoPipe( + fromInventory, + toObject, + tGrabSlots, + fromSide, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aDoCheckChests); + } + + /** + * Moves Stack from Inv-Side to Inv-Slot. + * + * @return the Amount of moved Items + */ + public static byte moveOneItemStackIntoSlot(Object fromTileEntity, Object toTileEntity, ForgeDirection fromSide, + int putSlot, List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, + byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { + if (!(fromTileEntity instanceof IInventory fromInv) || aMaxTargetStackSize <= 0 + || aMinTargetStackSize <= 0 + || aMaxMoveAtOnce <= 0 + || aMinTargetStackSize > aMaxTargetStackSize + || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; + + int[] tGrabSlots = null; + if (fromTileEntity instanceof ISidedInventory sided) + tGrabSlots = sided.getAccessibleSlotsFromSide(fromSide.ordinal()); + if (tGrabSlots == null) { + tGrabSlots = new int[fromInv.getSizeInventory()]; + for (int i = 0; i < tGrabSlots.length; i++) tGrabSlots[i] = i; + } + + if (toTileEntity instanceof IInventory toInv) { + for (final int tGrabSlot : tGrabSlots) { + if (listContainsItem(aFilter, fromInv.getStackInSlot(tGrabSlot), true, aInvertFilter)) { + if (isAllowedToTakeFromSlot(fromInv, tGrabSlot, fromSide, fromInv.getStackInSlot(tGrabSlot))) { + if (isAllowedToPutIntoSlot( + toInv, + putSlot, + ForgeDirection.UNKNOWN, + fromInv.getStackInSlot(tGrabSlot), + aMaxTargetStackSize)) { + byte tMovedItemCount = moveStackFromSlotAToSlotB( + fromInv, + toInv, + tGrabSlot, + putSlot, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce); + if (tMovedItemCount > 0) return tMovedItemCount; + } + } + } + } + } + + final ForgeDirection toSide = fromSide.getOpposite(); + moveStackIntoPipe( + fromInv, + toTileEntity, + tGrabSlots, + fromSide, + ForgeDirection.UNKNOWN, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce); + return 0; + } + + /** + * Moves Stack from Inv-Slot to Inv-Slot. + * + * @return the Amount of moved Items + */ + public static byte moveFromSlotToSlot(IInventory fromInv, IInventory toInv, int aGrabFrom, int aPutTo, + List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, + byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { + if (fromInv == null || toInv == null + || aGrabFrom < 0 + || aPutTo < 0 + || aMinTargetStackSize <= 0 + || aMaxMoveAtOnce <= 0 + || aMinTargetStackSize > aMaxTargetStackSize + || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; + if (listContainsItem(aFilter, fromInv.getStackInSlot(aGrabFrom), true, aInvertFilter)) { + if (isAllowedToTakeFromSlot( + fromInv, + aGrabFrom, + ForgeDirection.UNKNOWN, + fromInv.getStackInSlot(aGrabFrom))) { + if (isAllowedToPutIntoSlot( + toInv, + aPutTo, + ForgeDirection.UNKNOWN, + fromInv.getStackInSlot(aGrabFrom), + aMaxTargetStackSize)) { + byte tMovedItemCount = moveStackFromSlotAToSlotB( + fromInv, + toInv, + aGrabFrom, + aPutTo, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce); + if (tMovedItemCount > 0) return tMovedItemCount; + } + } + } + return 0; + } + + /** + * Moves Stack from Inv-Side to Inv-Slot. + * + * @return the Amount of moved Items + */ + public static byte moveFromSlotToSide(IInventory fromTile, Object toTile, int fromSlot, ForgeDirection putSide, + List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, + byte aMaxMoveAtOnce, byte aMinMoveAtOnce, boolean aDoCheckChests) { + if (fromTile == null || fromSlot < 0 + || aMinTargetStackSize <= 0 + || aMaxMoveAtOnce <= 0 + || aMinTargetStackSize > aMaxTargetStackSize + || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; + + if (!listContainsItem(aFilter, fromTile.getStackInSlot(fromSlot), true, aInvertFilter) + || !isAllowedToTakeFromSlot(fromTile, fromSlot, ForgeDirection.UNKNOWN, fromTile.getStackInSlot(fromSlot))) + return 0; + + if (toTile instanceof IInventory) { + int[] tPutSlots = null; + if (toTile instanceof ISidedInventory sided) + tPutSlots = sided.getAccessibleSlotsFromSide(putSide.ordinal()); + + if (tPutSlots == null) { + tPutSlots = new int[((IInventory) toTile).getSizeInventory()]; + for (int i = 0; i < tPutSlots.length; i++) tPutSlots[i] = i; + } + + byte tMovedItemCount = 0; + for (final int tPutSlot : tPutSlots) { + if (isAllowedToPutIntoSlot( + (IInventory) toTile, + tPutSlot, + putSide, + fromTile.getStackInSlot(fromSlot), + aMaxTargetStackSize)) { + tMovedItemCount += moveStackFromSlotAToSlotB( + fromTile, + (IInventory) toTile, + fromSlot, + tPutSlot, + aMaxTargetStackSize, + aMinTargetStackSize, + (byte) (aMaxMoveAtOnce - tMovedItemCount), + aMinMoveAtOnce); + if (tMovedItemCount >= aMaxMoveAtOnce) { + return tMovedItemCount; + } + } + } + if (tMovedItemCount > 0) return tMovedItemCount; + + if (aDoCheckChests && toTile instanceof TileEntityChest tTileEntity2) { + if (tTileEntity2.adjacentChestChecked) { + if (tTileEntity2.adjacentChestXNeg != null) { + tMovedItemCount = moveFromSlotToSide( + fromTile, + tTileEntity2.adjacentChestXNeg, + fromSlot, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } else if (tTileEntity2.adjacentChestZNeg != null) { + tMovedItemCount = moveFromSlotToSide( + fromTile, + tTileEntity2.adjacentChestZNeg, + fromSlot, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } else if (tTileEntity2.adjacentChestXPos != null) { + tMovedItemCount = moveFromSlotToSide( + fromTile, + tTileEntity2.adjacentChestXPos, + fromSlot, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } else if (tTileEntity2.adjacentChestZPos != null) { + tMovedItemCount = moveFromSlotToSide( + fromTile, + tTileEntity2.adjacentChestZPos, + fromSlot, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + false); + } + if (tMovedItemCount > 0) return tMovedItemCount; + } + } + } + return moveStackIntoPipe( + fromTile, + toTile, + new int[] { fromSlot }, + ForgeDirection.UNKNOWN, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + aDoCheckChests); + } + + public static byte moveFromSlotToSide(IInventory fromTile, Object toTile, int fromSlot, ForgeDirection putSide, + List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, + byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { + return moveFromSlotToSide( + fromTile, + toTile, + fromSlot, + putSide, + aFilter, + aInvertFilter, + aMaxTargetStackSize, + aMinTargetStackSize, + aMaxMoveAtOnce, + aMinMoveAtOnce, + true); + } + + /** + * Move up to maxAmount amount of fluid from source to dest, with optional filtering via allowMove. note that this + * filter cannot bypass filtering done by IFluidHandlers themselves. + * + * this overload will assume the fill side is the opposite of drainSide + * + * @param source tank to drain from. method become noop if this is null + * @param dest tank to fill to. method become noop if this is null + * @param drainSide side used during draining operation + * @param maxAmount max amount of fluid to transfer. method become noop if this is not a positive integer + * @param allowMove filter. can be null to signal all fluids are accepted + */ + public static void moveFluid(IFluidHandler source, IFluidHandler dest, ForgeDirection drainSide, int maxAmount, + @Nullable Predicate allowMove) { + moveFluid(source, dest, drainSide, drainSide.getOpposite(), maxAmount, allowMove); + } + + /** + * Move up to maxAmount amount of fluid from source to dest, with optional filtering via allowMove. note that this + * filter cannot bypass filtering done by IFluidHandlers themselves. + * + * @param source tank to drain from. method become noop if this is null + * @param dest tank to fill to. method become noop if this is null + * @param drainSide side used during draining operation + * @param fillSide side used during filling operation + * @param maxAmount max amount of fluid to transfer. method become noop if this is not a positive integer + * @param allowMove filter. can be null to signal all fluids are accepted + */ + public static void moveFluid(IFluidHandler source, IFluidHandler dest, ForgeDirection drainSide, + ForgeDirection fillSide, int maxAmount, @Nullable Predicate allowMove) { + if (source == null || dest == null || maxAmount <= 0) return; + FluidStack liquid = source.drain(drainSide, maxAmount, false); + if (liquid == null) return; + liquid = liquid.copy(); + liquid.amount = dest.fill(fillSide, liquid, false); + if (liquid.amount > 0 && (allowMove == null || allowMove.test(liquid))) { + dest.fill(fillSide, source.drain(drainSide, liquid.amount, true), true); + } + } + + public static boolean listContainsItem(Collection aList, ItemStack aStack, boolean aTIfListEmpty, + boolean aInvertFilter) { + if (aStack == null || aStack.stackSize < 1) return false; + if (aList == null) return aTIfListEmpty; + boolean tEmpty = true; + for (ItemStack tStack : aList) { + if (tStack != null) { + tEmpty = false; + if (areStacksEqual(aStack, tStack)) { + return !aInvertFilter; + } + } + } + return tEmpty ? aTIfListEmpty : aInvertFilter; + } + + public static boolean areStacksOrToolsEqual(ItemStack aStack1, ItemStack aStack2) { + if (aStack1 != null && aStack2 != null && aStack1.getItem() == aStack2.getItem()) { + if (aStack1.getItem() + .isDamageable()) return true; + return ((aStack1.getTagCompound() == null) == (aStack2.getTagCompound() == null)) + && (aStack1.getTagCompound() == null || aStack1.getTagCompound() + .equals(aStack2.getTagCompound())) + && (Items.feather.getDamage(aStack1) == Items.feather.getDamage(aStack2) + || Items.feather.getDamage(aStack1) == W + || Items.feather.getDamage(aStack2) == W); + } + return false; + } + + public static boolean areFluidsEqual(FluidStack aFluid1, FluidStack aFluid2) { + return areFluidsEqual(aFluid1, aFluid2, false); + } + + public static boolean areFluidsEqual(FluidStack aFluid1, FluidStack aFluid2, boolean aIgnoreNBT) { + return aFluid1 != null && aFluid2 != null + && aFluid1.getFluid() == aFluid2.getFluid() + && (aIgnoreNBT || ((aFluid1.tag == null) == (aFluid2.tag == null)) + && (aFluid1.tag == null || aFluid1.tag.equals(aFluid2.tag))); + } + + public static boolean areStacksEqual(ItemStack aStack1, ItemStack aStack2) { + return areStacksEqual(aStack1, aStack2, false); + } + + public static boolean areStacksEqual(ItemStack aStack1, ItemStack aStack2, boolean aIgnoreNBT) { + return aStack1 != null && aStack2 != null + && aStack1.getItem() == aStack2.getItem() + && (Items.feather.getDamage(aStack1) == Items.feather.getDamage(aStack2) + || Items.feather.getDamage(aStack1) == W + || Items.feather.getDamage(aStack2) == W) + && (aIgnoreNBT || (((aStack1.getTagCompound() == null) == (aStack2.getTagCompound() == null)) + && (aStack1.getTagCompound() == null || aStack1.getTagCompound() + .equals(aStack2.getTagCompound())))); + } + + public static boolean areStacksEqualOrNull(ItemStack stack1, ItemStack stack2) { + return (stack1 == null && stack2 == null) || GTUtility.areStacksEqual(stack1, stack2); + } + + /** + * Treat both null list, or both null item stack at same list position as equal. + *

+ * Since ItemStack doesn't override equals and hashCode, you cannot just use Objects.equals + */ + public static boolean areStackListsEqual(List lhs, List rhs, boolean ignoreStackSize, + boolean ignoreNBT) { + if (lhs == null) return rhs == null; + if (rhs == null) return false; + if (lhs.size() != rhs.size()) return false; + for (Iterator it1 = lhs.iterator(), it2 = rhs.iterator(); it1.hasNext() && it2.hasNext();) { + if (!areStacksEqualExtended(it1.next(), it2.next(), ignoreStackSize, ignoreNBT)) return false; + } + return true; + } + + private static boolean areStacksEqualExtended(ItemStack lhs, ItemStack rhs, boolean ignoreStackSize, + boolean ignoreNBT) { + if (lhs == null) return rhs == null; + if (rhs == null) return false; + return lhs.getItem() == rhs.getItem() + && (ignoreNBT || Objects.equals(lhs.stackTagCompound, rhs.stackTagCompound)) + && (ignoreStackSize || lhs.stackSize == rhs.stackSize); + } + + public static boolean areUnificationsEqual(ItemStack aStack1, ItemStack aStack2) { + return areUnificationsEqual(aStack1, aStack2, false); + } + + public static boolean areUnificationsEqual(ItemStack aStack1, ItemStack aStack2, boolean aIgnoreNBT) { + return areStacksEqual( + GTOreDictUnificator.get_nocopy(aStack1), + GTOreDictUnificator.get_nocopy(aStack2), + aIgnoreNBT); + } + + public static String getFluidName(Fluid aFluid, boolean aLocalized) { + if (aFluid == null) return E; + String rName = aLocalized ? aFluid.getLocalizedName(new FluidStack(aFluid, 0)) : aFluid.getUnlocalizedName(); + if (rName.contains("fluid.") || rName.contains("tile.")) return capitalizeString( + rName.replaceAll("fluid.", E) + .replaceAll("tile.", E)); + return rName; + } + + public static String getFluidName(FluidStack aFluid, boolean aLocalized) { + if (aFluid == null) return E; + return getFluidName(aFluid.getFluid(), aLocalized); + } + + public static void reInit() { + sFilledContainerToData.clear(); + sEmptyContainerToFluidToData.clear(); + sFluidToContainers.clear(); + for (FluidContainerData tData : sFluidContainerList) { + String fluidName = tData.fluid.getFluid() + .getName(); + sFilledContainerToData.put(new GTItemStack(tData.filledContainer), tData); + Map tFluidToContainer = sEmptyContainerToFluidToData + .get(new GTItemStack(tData.emptyContainer)); + List tContainers = sFluidToContainers.get(fluidName); + if (tFluidToContainer == null) { + sEmptyContainerToFluidToData + .put(new GTItemStack(tData.emptyContainer), tFluidToContainer = new /* Concurrent */ HashMap<>()); + } + tFluidToContainer.put(fluidName, tData); + if (tContainers == null) { + tContainers = new ArrayList<>(); + tContainers.add(tData.filledContainer); + sFluidToContainers.put(fluidName, tContainers); + } else tContainers.add(tData.filledContainer); + } + } + + public static void addFluidContainerData(FluidContainerData aData) { + String fluidName = aData.fluid.getFluid() + .getName(); + sFluidContainerList.add(aData); + sFilledContainerToData.put(new GTItemStack(aData.filledContainer), aData); + Map tFluidToContainer = sEmptyContainerToFluidToData + .get(new GTItemStack(aData.emptyContainer)); + List tContainers = sFluidToContainers.get(fluidName); + if (tFluidToContainer == null) { + sEmptyContainerToFluidToData + .put(new GTItemStack(aData.emptyContainer), tFluidToContainer = new /* Concurrent */ HashMap<>()); + } + tFluidToContainer.put(fluidName, aData); + if (tContainers == null) { + tContainers = new ArrayList<>(); + tContainers.add(aData.filledContainer); + sFluidToContainers.put(fluidName, tContainers); + } else tContainers.add(aData.filledContainer); + } + + public static List getContainersFromFluid(FluidStack tFluidStack) { + if (tFluidStack != null) { + List tContainers = sFluidToContainers.get( + tFluidStack.getFluid() + .getName()); + if (tContainers == null) return new ArrayList<>(); + return tContainers; + } + return new ArrayList<>(); + } + + public static ItemStack fillFluidContainer(FluidStack aFluid, ItemStack aStack, boolean aRemoveFluidDirectly, + boolean aCheckIFluidContainerItems) { + if (isStackInvalid(aStack) || aFluid == null) return null; + if (GTModHandler.isWater(aFluid) && ItemList.Bottle_Empty.isStackEqual(aStack)) { + if (aFluid.amount >= 1000) { + return new ItemStack(Items.potionitem, 1, 0); + } + return null; + } + if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem + && ((IFluidContainerItem) aStack.getItem()).getFluid(aStack) == null + && ((IFluidContainerItem) aStack.getItem()).getCapacity(aStack) <= aFluid.amount) { + if (aRemoveFluidDirectly) aFluid.amount -= ((IFluidContainerItem) aStack.getItem()) + .fill(aStack = copyAmount(1, aStack), aFluid, true); + else((IFluidContainerItem) aStack.getItem()).fill(aStack = copyAmount(1, aStack), aFluid, true); + return aStack; + } + Map tFluidToContainer = sEmptyContainerToFluidToData.get(new GTItemStack(aStack)); + if (tFluidToContainer == null) return null; + FluidContainerData tData = tFluidToContainer.get( + aFluid.getFluid() + .getName()); + if (tData == null || tData.fluid.amount > aFluid.amount) return null; + if (aRemoveFluidDirectly) aFluid.amount -= tData.fluid.amount; + return copyAmount(1, tData.filledContainer); + } + + public static int calculateRecipeEU(Materials aMaterial, int defaultRecipeEUPerTick) { + return aMaterial.getProcessingMaterialTierEU() == 0 ? defaultRecipeEUPerTick + : aMaterial.getProcessingMaterialTierEU(); + } + + public static ItemStack getFluidDisplayStack(Fluid aFluid) { + return aFluid == null ? null : getFluidDisplayStack(new FluidStack(aFluid, 0), false); + } + + public static ItemStack getFluidDisplayStack(FluidStack aFluid, boolean aUseStackSize) { + return getFluidDisplayStack(aFluid, aUseStackSize, false); + } + + public static ItemStack getFluidDisplayStack(FluidStack aFluid, boolean aUseStackSize, boolean aHideStackSize) { + if (aFluid == null || aFluid.getFluid() == null) return null; + int tmp = 0; + try { + tmp = aFluid.getFluid() + .getID(); + } catch (Exception e) { + System.err.println(e); + } + ItemStack rStack = ItemList.Display_Fluid.getWithDamage(1, tmp); + NBTTagCompound tNBT = new NBTTagCompound(); + tNBT.setLong("mFluidDisplayAmount", aUseStackSize ? aFluid.amount : 0); + tNBT.setLong( + "mFluidDisplayHeat", + aFluid.getFluid() + .getTemperature(aFluid)); + tNBT.setBoolean( + "mFluidState", + aFluid.getFluid() + .isGaseous(aFluid)); + tNBT.setBoolean("mHideStackSize", aHideStackSize); + try { + tNBT.setString("mFluidMaterialName", FLUID_MAP.get(aFluid.getFluid()).mName); + } catch (Exception ignored) {} + rStack.setTagCompound(tNBT); + return rStack; + } + + public static FluidStack getFluidFromDisplayStack(ItemStack aDisplayStack) { + if (!isStackValid(aDisplayStack) || aDisplayStack.getItem() != ItemList.Display_Fluid.getItem() + || !aDisplayStack.hasTagCompound()) return null; + Fluid tFluid = FluidRegistry.getFluid( + ItemList.Display_Fluid.getItem() + .getDamage(aDisplayStack)); + return new FluidStack( + tFluid, + (int) aDisplayStack.getTagCompound() + .getLong("mFluidDisplayAmount")); + } + + public static boolean containsFluid(ItemStack aStack, FluidStack aFluid, boolean aCheckIFluidContainerItems) { + if (isStackInvalid(aStack) || aFluid == null) return false; + if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem + && ((IFluidContainerItem) aStack.getItem()).getCapacity(aStack) > 0) + return aFluid + .isFluidEqual(((IFluidContainerItem) aStack.getItem()).getFluid(aStack = copyAmount(1, aStack))); + FluidContainerData tData = sFilledContainerToData.get(new GTItemStack(aStack)); + return tData != null && tData.fluid.isFluidEqual(aFluid); + } + + public static FluidStack getFluidForFilledItem(ItemStack aStack, boolean aCheckIFluidContainerItems) { + if (isStackInvalid(aStack)) return null; + if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem + && ((IFluidContainerItem) aStack.getItem()).getCapacity(aStack) > 0) + return ((IFluidContainerItem) aStack.getItem()).drain(copyAmount(1, aStack), Integer.MAX_VALUE, true); + FluidContainerData tData = sFilledContainerToData.get(new GTItemStack(aStack)); + return tData == null ? null : tData.fluid.copy(); + } + + /** + * Get empty fluid container from filled one. + */ + public static ItemStack getContainerForFilledItem(ItemStack aStack, boolean aCheckIFluidContainerItems) { + if (isStackInvalid(aStack)) return null; + FluidContainerData tData = sFilledContainerToData.get(new GTItemStack(aStack)); + if (tData != null) return copyAmount(1, tData.emptyContainer); + if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem + && ((IFluidContainerItem) aStack.getItem()).getCapacity(aStack) > 0) { + ((IFluidContainerItem) aStack.getItem()).drain(aStack = copyAmount(1, aStack), Integer.MAX_VALUE, true); + return aStack; + } + return null; + } + + /** + * This is NOT meant for fluid manipulation! It's for getting item container, which is generally used for + * crafting recipes. While it also works for many of the fluid containers, some don't. + *

+ * Use {@link #getContainerForFilledItem} for getting empty fluid container. + */ + public static ItemStack getContainerItem(ItemStack aStack, boolean aCheckIFluidContainerItems) { + if (isStackInvalid(aStack)) return null; + if (aStack.getItem() + .hasContainerItem(aStack)) + return aStack.getItem() + .getContainerItem(aStack); + /* + * These are all special Cases, in which it is intended to have only GT Blocks outputting those Container Items + */ + if (ItemList.Cell_Empty.isStackEqual(aStack, false, true)) return null; + if (aStack.getItem() == Items.potionitem || aStack.getItem() == Items.experience_bottle + || ItemList.TF_Vial_FieryBlood.isStackEqual(aStack) + || ItemList.TF_Vial_FieryTears.isStackEqual(aStack)) return ItemList.Bottle_Empty.get(1); + + if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem + && ((IFluidContainerItem) aStack.getItem()).getCapacity(aStack) > 0) { + ItemStack tStack = copyAmount(1, aStack); + ((IFluidContainerItem) aStack.getItem()).drain(tStack, Integer.MAX_VALUE, true); + if (!areStacksEqual(aStack, tStack)) return tStack; + return null; + } + + int tCapsuleCount = GTModHandler.getCapsuleCellContainerCount(aStack); + if (tCapsuleCount > 0) return ItemList.Cell_Empty.get(tCapsuleCount); + + if (ItemList.IC2_ForgeHammer.isStackEqual(aStack) || ItemList.IC2_WireCutter.isStackEqual(aStack)) + return copyMetaData(Items.feather.getDamage(aStack) + 1, aStack); + return null; + } + + public static FluidStack getFluidFromContainerOrFluidDisplay(ItemStack stack) { + FluidStack fluidStack = GTUtility.getFluidForFilledItem(stack, true); + if (fluidStack == null) { + fluidStack = GTUtility.getFluidFromDisplayStack(stack); + } + return fluidStack; + } + + public static synchronized boolean removeIC2BottleRecipe(ItemStack aContainer, ItemStack aInput, + Map aRecipeList, ItemStack aOutput) { + if ((isStackInvalid(aInput) && isStackInvalid(aOutput) && isStackInvalid(aContainer)) || aRecipeList == null) + return false; + boolean rReturn = false; + Iterator> tIterator = aRecipeList + .entrySet() + .iterator(); + aOutput = GTOreDictUnificator.get(aOutput); + while (tIterator.hasNext()) { + Map.Entry tEntry = tIterator.next(); + if (aInput == null || tEntry.getKey() + .matches(aContainer, aInput)) { + List tList = tEntry.getValue().items; + if (tList != null) for (ItemStack tOutput : tList) + if (aOutput == null || areStacksEqual(GTOreDictUnificator.get(tOutput), aOutput)) { + tIterator.remove(); + rReturn = true; + break; + } + } + } + return rReturn; + } + + public static synchronized boolean removeSimpleIC2MachineRecipe(ItemStack aInput, + Map aRecipeList, ItemStack aOutput) { + if ((isStackInvalid(aInput) && isStackInvalid(aOutput)) || aRecipeList == null) return false; + boolean rReturn = false; + Iterator> tIterator = aRecipeList.entrySet() + .iterator(); + aOutput = GTOreDictUnificator.get(aOutput); + while (tIterator.hasNext()) { + Map.Entry tEntry = tIterator.next(); + if (aInput == null || tEntry.getKey() + .matches(aInput)) { + List tList = tEntry.getValue().items; + if (tList != null) for (ItemStack tOutput : tList) + if (aOutput == null || areStacksEqual(GTOreDictUnificator.get(tOutput), aOutput)) { + tIterator.remove(); + rReturn = true; + break; + } + } + } + return rReturn; + } + + public static synchronized void bulkRemoveSimpleIC2MachineRecipe(Map toRemove, + Map aRecipeList) { + if (aRecipeList == null || aRecipeList.isEmpty()) return; + toRemove.entrySet() + .removeIf(aEntry -> (isStackInvalid(aEntry.getKey()) && isStackInvalid(aEntry.getValue()))); + final Map finalToRemove = Maps.transformValues(toRemove, GTOreDictUnificator::get_nocopy); + + aRecipeList.entrySet() + .removeIf( + tEntry -> finalToRemove.entrySet() + .stream() + .anyMatch(aEntry -> { + final ItemStack aInput = aEntry.getKey(), aOutput = aEntry.getValue(); + final List tList = tEntry.getValue().items; + + if (tList == null) return false; + if (aInput != null && !tEntry.getKey() + .matches(aInput)) return false; + + return tList.stream() + .anyMatch( + tOutput -> (aOutput == null + || areStacksEqual(GTOreDictUnificator.get(tOutput), aOutput))); + })); + } + + public static boolean addSimpleIC2MachineRecipe(ItemStack aInput, Map aRecipeList, + NBTTagCompound aNBT, Object... aOutput) { + if (isStackInvalid(aInput) || aOutput.length == 0 || aRecipeList == null) return false; + ItemData tOreName = GTOreDictUnificator.getAssociation(aInput); + for (Object o : aOutput) { + if (o == null) { + GT_FML_LOGGER.info("EmptyIC2Output!" + aInput.getUnlocalizedName()); + return false; + } + } + ItemStack[] tStack = GTOreDictUnificator.getStackArray(true, aOutput); + if (tStack.length > 0 && areStacksEqual(aInput, tStack[0])) return false; + if (tOreName != null) { + if (tOreName.toString() + .equals("dustAsh") + && tStack[0].getUnlocalizedName() + .equals("tile.volcanicAsh")) + return false; + aRecipeList + .put(new RecipeInputOreDict(tOreName.toString(), aInput.stackSize), new RecipeOutput(aNBT, tStack)); + } else { + aRecipeList + .put(new RecipeInputItemStack(copyOrNull(aInput), aInput.stackSize), new RecipeOutput(aNBT, tStack)); + } + return true; + } + + public static ItemStack getWrittenBook(String aMapping, ItemStack aStackToPutNBT) { + if (isStringInvalid(aMapping)) return null; + ItemStack rStack = GregTechAPI.sBookList.get(aMapping); + if (rStack == null) return aStackToPutNBT; + if (aStackToPutNBT != null) { + aStackToPutNBT.setTagCompound(rStack.getTagCompound()); + return aStackToPutNBT; + } + return copyAmount(1, rStack); + } + + public static ItemStack getWrittenBook(String aMapping, String aTitle, String aAuthor, String... aPages) { + if (isStringInvalid(aMapping)) return null; + ItemStack rStack = GregTechAPI.sBookList.get(aMapping); + if (rStack != null) return copyAmount(1, rStack); + if (isStringInvalid(aTitle) || isStringInvalid(aAuthor) || aPages.length == 0) return null; + sBookCount++; + rStack = new ItemStack(Items.written_book, 1); + NBTTagCompound tNBT = new NBTTagCompound(); + tNBT.setString("title", GTLanguageManager.addStringLocalization("Book." + aTitle + ".Name", aTitle)); + tNBT.setString("author", aAuthor); + NBTTagList tNBTList = new NBTTagList(); + for (byte i = 0; i < aPages.length; i++) { + aPages[i] = GTLanguageManager + .addStringLocalization("Book." + aTitle + ".Page" + ((i < 10) ? "0" + i : i), aPages[i]); + if (i < 48) { + if (aPages[i].length() < 256) tNBTList.appendTag(new NBTTagString(aPages[i])); + else GTLog.err.println("WARNING: String for written Book too long! -> " + aPages[i]); + } else { + GTLog.err.println("WARNING: Too much Pages for written Book! -> " + aTitle); + break; + } + } + tNBTList.appendTag( + new NBTTagString( + "Credits to " + aAuthor + + " for writing this Book. This was Book Nr. " + + sBookCount + + " at its creation. Gotta get 'em all!")); + tNBT.setTag("pages", tNBTList); + rStack.setTagCompound(tNBT); + GTLog.out.println( + "GTMod: Added Book to Book List - Mapping: '" + aMapping + + "' - Name: '" + + aTitle + + "' - Author: '" + + aAuthor + + "'"); + GregTechAPI.sBookList.put(aMapping, rStack); + return copyOrNull(rStack); + } + + public static boolean doSoundAtClient(String aSoundName, int aTimeUntilNextSound, float aSoundStrength) { + if (aSoundName == null) return false; + return doSoundAtClient(aSoundName, aTimeUntilNextSound, aSoundStrength, GT.getThePlayer()); + } + + public static boolean doSoundAtClient(SoundResource sound, int aTimeUntilNextSound, float aSoundStrength) { + return doSoundAtClient(sound.resourceLocation, aTimeUntilNextSound, aSoundStrength, GT.getThePlayer()); + } + + public static boolean doSoundAtClient(ResourceLocation aSoundResourceLocation, int aTimeUntilNextSound, + float aSoundStrength) { + return doSoundAtClient(aSoundResourceLocation, aTimeUntilNextSound, aSoundStrength, GT.getThePlayer()); + } + + public static boolean doSoundAtClient(String aSoundName, int aTimeUntilNextSound, float aSoundStrength, + Entity aEntity) { + if (aEntity == null || aSoundName == null) return false; + return doSoundAtClient( + aSoundName, + aTimeUntilNextSound, + aSoundStrength, + aEntity.posX, + aEntity.posY, + aEntity.posZ); + } + + public static boolean doSoundAtClient(ResourceLocation aSoundResourceLocation, int aTimeUntilNextSound, + float aSoundStrength, Entity aEntity) { + if (aEntity == null) return false; + return doSoundAtClient( + aSoundResourceLocation.toString(), + aTimeUntilNextSound, + aSoundStrength, + aEntity.posX, + aEntity.posY, + aEntity.posZ); + } + + public static boolean doSoundAtClient(ResourceLocation aSoundResourceLocation, int aTimeUntilNextSound, + float aSoundStrength, double aX, double aY, double aZ) { + return doSoundAtClient(aSoundResourceLocation, aTimeUntilNextSound, aSoundStrength, 1.01818028F, aX, aY, aZ); + } + + /** + * @inheritDoc + * @deprecated Use {@link #doSoundAtClient(ResourceLocation, int, float, double, double, double)} + */ + @Deprecated + public static boolean doSoundAtClient(String aSoundName, int aTimeUntilNextSound, float aSoundStrength, double aX, + double aY, double aZ) { + if (aSoundName == null) return false; + return doSoundAtClient( + new ResourceLocation(aSoundName), + aTimeUntilNextSound, + aSoundStrength, + 1.01818028F, + aX, + aY, + aZ); + } + + public static boolean doSoundAtClient(SoundResource aSound, int aTimeUntilNextSound, float aSoundStrength, + double aX, double aY, double aZ) { + return doSoundAtClient(aSound.resourceLocation, aTimeUntilNextSound, aSoundStrength, aX, aY, aZ); + } + + public static boolean doSoundAtClient(SoundResource aSound, int aTimeUntilNextSound, float aSoundStrength, + float aSoundModulation, double aX, double aY, double aZ) { + return doSoundAtClient( + aSound.resourceLocation, + aTimeUntilNextSound, + aSoundStrength, + aSoundModulation, + aX, + aY, + aZ); + } + + public static boolean doSoundAtClient(ResourceLocation aSoundResourceLocation, int aTimeUntilNextSound, + float aSoundStrength, float aSoundModulation, double aX, double aY, double aZ) { + if (!FMLCommonHandler.instance() + .getEffectiveSide() + .isClient() || GT.getThePlayer() == null || !GT.getThePlayer().worldObj.isRemote) return false; + if (GregTechAPI.sMultiThreadedSounds) new Thread( + new RunnableSound( + GT.getThePlayer().worldObj, + aX, + aY, + aZ, + aTimeUntilNextSound, + aSoundResourceLocation, + aSoundStrength, + aSoundModulation), + "Sound Effect").start(); + else new RunnableSound( + GT.getThePlayer().worldObj, + aX, + aY, + aZ, + aTimeUntilNextSound, + aSoundResourceLocation, + aSoundStrength, + aSoundModulation).run(); + return true; + } + + public static boolean sendSoundToPlayers(World aWorld, String aSoundName, float aSoundStrength, + float aSoundModulation, int aX, int aY, int aZ) { + if (isStringInvalid(aSoundName) || aWorld == null || aWorld.isRemote) return false; + NW.sendPacketToAllPlayersInRange( + aWorld, + new GTPacketSound(aSoundName, aSoundStrength, aSoundModulation, aX, (short) aY, aZ), + aX, + aZ); + return true; + } + + public static boolean sendSoundToPlayers(World aWorld, SoundResource sound, float aSoundStrength, + float aSoundModulation, int aX, int aY, int aZ) { + if (aWorld == null || aWorld.isRemote) return false; + NW.sendPacketToAllPlayersInRange( + aWorld, + new GTPacketSound(sound.resourceLocation.toString(), aSoundStrength, aSoundModulation, aX, (short) aY, aZ), + aX, + aZ); + return true; + } + + public static int stackToInt(ItemStack aStack) { + if (isStackInvalid(aStack)) return 0; + return itemToInt(aStack.getItem(), Items.feather.getDamage(aStack)); + } + + public static int itemToInt(Item aItem, int aMeta) { + return Item.getIdFromItem(aItem) | (aMeta << 16); + } + + public static int stackToWildcard(ItemStack aStack) { + if (isStackInvalid(aStack)) return 0; + return Item.getIdFromItem(aStack.getItem()) | (W << 16); + } + + public static ItemStack intToStack(int aStack) { + int tID = aStack & (~0 >>> 16), tMeta = aStack >>> 16; + Item tItem = Item.getItemById(tID); + if (tItem != null) return new ItemStack(tItem, 1, tMeta); + return null; + } + + public static Integer[] stacksToIntegerArray(ItemStack... aStacks) { + Integer[] rArray = new Integer[aStacks.length]; + for (int i = 0; i < rArray.length; i++) { + rArray[i] = stackToInt(aStacks[i]); + } + return rArray; + } + + public static int[] stacksToIntArray(ItemStack... aStacks) { + int[] rArray = new int[aStacks.length]; + for (int i = 0; i < rArray.length; i++) { + rArray[i] = stackToInt(aStacks[i]); + } + return rArray; + } + + public static boolean arrayContains(Object aObject, Object... aObjects) { + return listContains(aObject, Arrays.asList(aObjects)); + } + + public static boolean listContains(Object aObject, Collection aObjects) { + if (aObjects == null) return false; + return aObjects.contains(aObject); + } + + @SafeVarargs + public static boolean arrayContainsNonNull(T... aArray) { + if (aArray != null) for (Object tObject : aArray) if (tObject != null) return true; + return false; + } + + /** + * Note: use {@link ArrayExt#withoutNulls(Object[], IntFunction)} if you want an array as a result. + */ + @SafeVarargs + public static ArrayList getArrayListWithoutNulls(T... aArray) { + if (aArray == null) return new ArrayList<>(); + ArrayList rList = new ArrayList<>(Arrays.asList(aArray)); + for (int i = 0; i < rList.size(); i++) if (rList.get(i) == null) rList.remove(i--); + return rList; + } + + /** + * Note: use {@link ArrayExt#withoutTrailingNulls(Object[], IntFunction)} if you want an array as a result. + */ + @SafeVarargs + public static ArrayList getArrayListWithoutTrailingNulls(T... aArray) { + if (aArray == null) return new ArrayList<>(); + ArrayList rList = new ArrayList<>(Arrays.asList(aArray)); + for (int i = rList.size() - 1; i >= 0 && rList.get(i) == null;) rList.remove(i--); + return rList; + } + + public static Block getBlockFromStack(ItemStack itemStack) { + if (isStackInvalid(itemStack)) return Blocks.air; + return getBlockFromItem(itemStack.getItem()); + } + + public static Block getBlockFromItem(Item item) { + return Block.getBlockFromItem(item); + } + + public static boolean isStringValid(Object aString) { + return aString != null && !aString.toString() + .isEmpty(); + } + + public static boolean isStringInvalid(Object aString) { + return aString == null || aString.toString() + .isEmpty(); + } + + @Deprecated + public static boolean isStackValid(Object aStack) { + return (aStack instanceof ItemStack stack) && isStackValid(stack); + } + + public static boolean isStackValid(ItemStack aStack) { + return (aStack != null) && aStack.getItem() != null && aStack.stackSize >= 0; + } + + @Deprecated + public static boolean isStackInvalid(Object aStack) { + return !(aStack instanceof ItemStack stack) || isStackInvalid(stack); + } + + public static boolean isStackInvalid(ItemStack aStack) { + return aStack == null || aStack.getItem() == null || aStack.stackSize < 0; + } + + public static boolean isDebugItem(ItemStack aStack) { + return /* ItemList.Armor_Cheat.isStackEqual(aStack, T, T) || */ areStacksEqual( + GTModHandler.getIC2Item("debug", 1), + aStack, + true); + } + + public static ItemStack updateItemStack(ItemStack aStack) { + if (isStackValid(aStack) && aStack.getItem() instanceof GTGenericItem) + ((GTGenericItem) aStack.getItem()).isItemStackUsable(aStack); + return aStack; + } + + public static boolean isOpaqueBlock(World aWorld, int aX, int aY, int aZ) { + return aWorld.getBlock(aX, aY, aZ) + .isOpaqueCube(); + } + + public static boolean isBlockAir(World aWorld, int aX, int aY, int aZ) { + return aWorld.getBlock(aX, aY, aZ) + .isAir(aWorld, aX, aY, aZ); + } + + public static boolean hasBlockHitBox(World aWorld, int aX, int aY, int aZ) { + return aWorld.getBlock(aX, aY, aZ) + .getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ) != null; + } + + public static void setCoordsOnFire(World aWorld, int aX, int aY, int aZ, boolean aReplaceCenter) { + if (aReplaceCenter) if (aWorld.getBlock(aX, aY, aZ) + .getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ) == null) aWorld.setBlock(aX, aY, aZ, Blocks.fire); + if (aWorld.getBlock(aX + 1, aY, aZ) + .getCollisionBoundingBoxFromPool(aWorld, aX + 1, aY, aZ) == null) + aWorld.setBlock(aX + 1, aY, aZ, Blocks.fire); + if (aWorld.getBlock(aX - 1, aY, aZ) + .getCollisionBoundingBoxFromPool(aWorld, aX - 1, aY, aZ) == null) + aWorld.setBlock(aX - 1, aY, aZ, Blocks.fire); + if (aWorld.getBlock(aX, aY + 1, aZ) + .getCollisionBoundingBoxFromPool(aWorld, aX, aY + 1, aZ) == null) + aWorld.setBlock(aX, aY + 1, aZ, Blocks.fire); + if (aWorld.getBlock(aX, aY - 1, aZ) + .getCollisionBoundingBoxFromPool(aWorld, aX, aY - 1, aZ) == null) + aWorld.setBlock(aX, aY - 1, aZ, Blocks.fire); + if (aWorld.getBlock(aX, aY, aZ + 1) + .getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ + 1) == null) + aWorld.setBlock(aX, aY, aZ + 1, Blocks.fire); + if (aWorld.getBlock(aX, aY, aZ - 1) + .getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ - 1) == null) + aWorld.setBlock(aX, aY, aZ - 1, Blocks.fire); + } + + public static ItemStack getProjectile(SubTag aProjectileType, IInventory aInventory) { + if (aInventory != null) for (int i = 0, j = aInventory.getSizeInventory(); i < j; i++) { + ItemStack rStack = aInventory.getStackInSlot(i); + if (isStackValid(rStack) && rStack.getItem() instanceof IProjectileItem + && ((IProjectileItem) rStack.getItem()).hasProjectile(aProjectileType, rStack)) + return updateItemStack(rStack); + } + return null; + } + + public static void removeNullStacksFromInventory(IInventory aInventory) { + if (aInventory != null) for (int i = 0, j = aInventory.getSizeInventory(); i < j; i++) { + ItemStack tStack = aInventory.getStackInSlot(i); + if (tStack != null && (tStack.stackSize == 0 || tStack.getItem() == null)) + aInventory.setInventorySlotContents(i, null); + } + } + + /** + * Initializes new empty texture page for casings page 0 is old CASING_BLOCKS + *

+ * Then casings should be registered like this: for (byte i = MIN_USED_META; i < MAX_USED_META; i = (byte) (i + 1)) + * { Textures.BlockIcons.casingTexturePages[PAGE][i+START_INDEX] = new GT_CopiedBlockTexture(this, 6, i); } + * + * @param page 0 to 127 + * @return true if it made empty page, false if one already existed... + */ + public static boolean addTexturePage(byte page) { + if (Textures.BlockIcons.casingTexturePages[page] == null) { + Textures.BlockIcons.casingTexturePages[page] = new ITexture[128]; + return true; + } + return false; + } + + /** + * Return texture id from page and index, for use when determining hatches, but can also be precomputed from: + * (page<<7)+index + * + * @param page 0 to 127 page + * @param index 0 to 127 texture index + * @return casing texture 0 to 16383 + */ + public static int getTextureId(byte page, byte index) { + if (page >= 0 && index >= 0) { + return (page << 7) + index; + } + throw new RuntimeException("Index out of range: [" + page + "][" + index + "]"); + } + + /** + * Return texture id from page and index, for use when determining hatches, but can also be precomputed from: + * (page<<7)+index + * + * @param page 0 to 127 page + * @param startIndex 0 to 127 start texture index + * @param blockMeta meta of the block + * @return casing texture 0 to 16383 + */ + public static int getTextureId(byte page, byte startIndex, byte blockMeta) { + if (page >= 0 && startIndex >= 0 && blockMeta >= 0 && (startIndex + blockMeta) <= 127) { + return (page << 7) + (startIndex + blockMeta); + } + throw new RuntimeException( + "Index out of range: [" + page + + "][" + + startIndex + + "+" + + blockMeta + + "=" + + (startIndex + blockMeta) + + "]"); + } + + /** + * Return texture id from item stack, unoptimized but readable? + * + * @return casing texture 0 to 16383 + */ + public static int getTextureId(Block blockFromBlock, byte metaFromBlock) { + for (int page = 0; page < Textures.BlockIcons.casingTexturePages.length; page++) { + ITexture[] casingTexturePage = Textures.BlockIcons.casingTexturePages[page]; + if (casingTexturePage != null) { + for (int index = 0; index < casingTexturePage.length; index++) { + ITexture iTexture = casingTexturePage[index]; + if (iTexture instanceof IBlockContainer) { + Block block = ((IBlockContainer) iTexture).getBlock(); + byte meta = ((IBlockContainer) iTexture).getMeta(); + if (meta == metaFromBlock && blockFromBlock == block) { + return (page << 7) + index; + } + } + } + } + } + throw new RuntimeException( + "Probably missing mapping or different texture class used for: " + blockFromBlock.getUnlocalizedName() + + " meta:" + + metaFromBlock); + } + + /** + * Converts a Number to a String + */ + public static String parseNumberToString(int aNumber) { + boolean temp = true, negative = false; + + if (aNumber < 0) { + aNumber *= -1; + negative = true; + } + + StringBuilder tStringB = new StringBuilder(); + for (int i = 1000000000; i > 0; i /= 10) { + int tDigit = (aNumber / i) % 10; + if (temp && tDigit != 0) temp = false; + if (!temp) { + tStringB.append(tDigit); + if (i != 1) for (int j = i; j > 0; j /= 1000) if (j == 1) tStringB.append(","); + } + } + + String tString = tStringB.toString(); + + if (tString.equals(E)) tString = "0"; + + return negative ? "-" + tString : tString; + } + + public static NBTTagCompound getNBTContainingBoolean(NBTTagCompound aNBT, Object aTag, boolean aValue) { + if (aNBT == null) aNBT = new NBTTagCompound(); + aNBT.setBoolean(aTag.toString(), aValue); + return aNBT; + } + + public static NBTTagCompound getNBTContainingByte(NBTTagCompound aNBT, Object aTag, byte aValue) { + if (aNBT == null) aNBT = new NBTTagCompound(); + aNBT.setByte(aTag.toString(), aValue); + return aNBT; + } + + public static NBTTagCompound getNBTContainingShort(NBTTagCompound aNBT, Object aTag, short aValue) { + if (aNBT == null) aNBT = new NBTTagCompound(); + aNBT.setShort(aTag.toString(), aValue); + return aNBT; + } + + public static NBTTagCompound getNBTContainingInteger(NBTTagCompound aNBT, Object aTag, int aValue) { + if (aNBT == null) aNBT = new NBTTagCompound(); + aNBT.setInteger(aTag.toString(), aValue); + return aNBT; + } + + public static NBTTagCompound getNBTContainingFloat(NBTTagCompound aNBT, Object aTag, float aValue) { + if (aNBT == null) aNBT = new NBTTagCompound(); + aNBT.setFloat(aTag.toString(), aValue); + return aNBT; + } + + public static NBTTagCompound getNBTContainingDouble(NBTTagCompound aNBT, Object aTag, double aValue) { + if (aNBT == null) aNBT = new NBTTagCompound(); + aNBT.setDouble(aTag.toString(), aValue); + return aNBT; + } + + public static NBTTagCompound getNBTContainingString(NBTTagCompound aNBT, Object aTag, Object aValue) { + if (aNBT == null) aNBT = new NBTTagCompound(); + if (aValue == null) return aNBT; + aNBT.setString(aTag.toString(), aValue.toString()); + return aNBT; + } + + public static boolean isWearingFullFrostHazmat(EntityLivingBase aEntity) { + for (byte i = 1; i < 5; i++) { + ItemStack tStack = aEntity.getEquipmentInSlot(i); + + if (!isStackInList(tStack, GregTechAPI.sFrostHazmatList) && !hasHazmatEnchant(tStack)) { + return false; + } + } + return true; + } + + public static boolean isWearingFullHeatHazmat(EntityLivingBase aEntity) { + for (byte i = 1; i < 5; i++) { + ItemStack tStack = aEntity.getEquipmentInSlot(i); + + if (!isStackInList(tStack, GregTechAPI.sHeatHazmatList) && !hasHazmatEnchant(tStack)) { + return false; + } + } + + return true; + } + + public static boolean isWearingFullBioHazmat(EntityLivingBase aEntity) { + for (byte i = 1; i < 5; i++) { + ItemStack tStack = aEntity.getEquipmentInSlot(i); + + if (!isStackInList(tStack, GregTechAPI.sBioHazmatList) && !hasHazmatEnchant(tStack)) { + return false; + } + } + return true; + } + + public static boolean isWearingFullRadioHazmat(EntityLivingBase aEntity) { + for (byte i = 1; i < 5; i++) { + ItemStack tStack = aEntity.getEquipmentInSlot(i); + + if (!isStackInList(tStack, GregTechAPI.sRadioHazmatList) && !hasHazmatEnchant(tStack)) { + return false; + } + } + return true; + } + + public static boolean isWearingFullElectroHazmat(EntityLivingBase aEntity) { + for (byte i = 1; i < 5; i++) { + ItemStack tStack = aEntity.getEquipmentInSlot(i); + + if (!isStackInList(tStack, GregTechAPI.sElectroHazmatList) && !hasHazmatEnchant(tStack)) { + return false; + } + } + return true; + } + + public static boolean isWearingFullGasHazmat(EntityLivingBase aEntity) { + for (byte i = 1; i < 5; i++) { + ItemStack tStack = aEntity.getEquipmentInSlot(i); + + if (!isStackInList(tStack, GregTechAPI.sGasHazmatList) && !hasHazmatEnchant(tStack)) { + return false; + } + } + return true; + } + + public static boolean hasHazmatEnchant(ItemStack aStack) { + if (aStack == null) return false; + Map tEnchantments = EnchantmentHelper.getEnchantments(aStack); + Integer tLevel = tEnchantments.get(EnchantmentHazmat.INSTANCE.effectId); + + return tLevel != null && tLevel >= 1; + } + + public static float getHeatDamageFromItem(ItemStack aStack) { + ItemData tData = GTOreDictUnificator.getItemData(aStack); + return tData == null ? 0 + : (tData.mPrefix == null ? 0 : tData.mPrefix.mHeatDamage) + + (tData.hasValidMaterialData() ? tData.mMaterial.mMaterial.mHeatDamage : 0); + } + + public static int getRadioactivityLevel(ItemStack aStack) { + ItemData tData = GTOreDictUnificator.getItemData(aStack); + if (tData != null && tData.hasValidMaterialData()) { + if (tData.mMaterial.mMaterial.mEnchantmentArmors instanceof EnchantmentRadioactivity) + return tData.mMaterial.mMaterial.mEnchantmentArmorsLevel; + if (tData.mMaterial.mMaterial.mEnchantmentTools instanceof EnchantmentRadioactivity) + return tData.mMaterial.mMaterial.mEnchantmentToolsLevel; + } + return EnchantmentHelper.getEnchantmentLevel(EnchantmentRadioactivity.INSTANCE.effectId, aStack); + } + + public static boolean isImmuneToBreathingGasses(EntityLivingBase aEntity) { + return isWearingFullGasHazmat(aEntity); + } + + public static boolean applyHeatDamage(EntityLivingBase entity, float damage) { + return applyHeatDamage(entity, damage, GTDamageSources.getHeatDamage()); + } + + public static boolean applyHeatDamageFromItem(EntityLivingBase entity, float damage, ItemStack item) { + return applyHeatDamage(entity, damage, new DamageSourceHotItem(item)); + } + + private static boolean applyHeatDamage(EntityLivingBase aEntity, float aDamage, DamageSource source) { + if (aDamage > 0 && aEntity != null && !isWearingFullHeatHazmat(aEntity)) { + return aEntity.attackEntityFrom(source, aDamage); + } + return false; + } + + public static boolean applyFrostDamage(EntityLivingBase aEntity, float aDamage) { + if (aDamage > 0 && aEntity != null && !isWearingFullFrostHazmat(aEntity)) { + return aEntity.attackEntityFrom(GTDamageSources.getFrostDamage(), aDamage); + } + return false; + } + + public static boolean applyElectricityDamage(EntityLivingBase aEntity, long aVoltage, long aAmperage) { + long aDamage = getTier(aVoltage) * aAmperage * 4; + if (aDamage > 0 && aEntity != null && !isWearingFullElectroHazmat(aEntity)) { + return aEntity.attackEntityFrom(GTDamageSources.getElectricDamage(), aDamage); + } + return false; + } + + public static boolean applyRadioactivity(EntityLivingBase aEntity, int aLevel, int aAmountOfItems) { + if (aLevel > 0 && aEntity != null + && aEntity.getCreatureAttribute() != EnumCreatureAttribute.UNDEAD + && aEntity.getCreatureAttribute() != EnumCreatureAttribute.ARTHROPOD + && !isWearingFullRadioHazmat(aEntity)) { + PotionEffect tEffect = null; + aEntity.addPotionEffect( + new PotionEffect( + Potion.moveSlowdown.id, + aLevel * 140 * aAmountOfItems + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.moveSlowdown)) == null ? 0 + : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); + aEntity.addPotionEffect( + new PotionEffect( + Potion.digSlowdown.id, + aLevel * 150 * aAmountOfItems + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.digSlowdown)) == null ? 0 + : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); + aEntity.addPotionEffect( + new PotionEffect( + Potion.confusion.id, + aLevel * 130 * aAmountOfItems + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.confusion)) == null ? 0 + : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); + aEntity.addPotionEffect( + new PotionEffect( + Potion.weakness.id, + aLevel * 150 * aAmountOfItems + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.weakness)) == null ? 0 + : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); + aEntity.addPotionEffect( + new PotionEffect( + Potion.hunger.id, + aLevel * 130 * aAmountOfItems + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.hunger)) == null ? 0 : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); + aEntity.addPotionEffect( + new PotionEffect( + 24 /* IC2 Radiation */, + aLevel * 180 * aAmountOfItems + Math.max( + 0, + ((tEffect = aEntity.getActivePotionEffect(Potion.potionTypes[24])) == null ? 0 + : tEffect.getDuration())), + Math.max(0, (5 * aLevel) / 7))); + return true; + } + return false; + } + + public static ItemStack setStack(ItemStack aSetStack, ItemStack aToStack) { + if (isStackInvalid(aSetStack) || isStackInvalid(aToStack)) return null; + aSetStack.func_150996_a(aToStack.getItem()); + aSetStack.stackSize = aToStack.stackSize; + Items.feather.setDamage(aSetStack, Items.feather.getDamage(aToStack)); + aSetStack.setTagCompound(aToStack.getTagCompound()); + return aSetStack; + } + + public static FluidStack[] copyFluidArray(FluidStack... aStacks) { + if (aStacks == null) return null; + FluidStack[] rStacks = new FluidStack[aStacks.length]; + for (int i = 0; i < aStacks.length; i++) if (aStacks[i] != null) rStacks[i] = aStacks[i].copy(); + return rStacks; + } + + public static ItemStack[] copyItemArray(ItemStack... aStacks) { + if (aStacks == null) return null; + ItemStack[] rStacks = new ItemStack[aStacks.length]; + for (int i = 0; i < aStacks.length; i++) rStacks[i] = copy(aStacks[i]); + return rStacks; + } + + /** + * @deprecated use {@link #copy(ItemStack)} instead + */ + @Deprecated + public static ItemStack copy(Object... aStacks) { + for (Object tStack : aStacks) if (isStackValid(tStack)) return ((ItemStack) tStack).copy(); + return null; + } + + public static ItemStack copy(ItemStack aStack) { + if (isStackValid(aStack)) return aStack.copy(); + return null; + } + + @Deprecated + private static ItemStack firstStackOrNull(Object... aStacks) { + for (Object tStack : aStacks) if (tStack instanceof ItemStack stack) return stack; + return null; + } + + @Nullable + public static ItemStack copyOrNull(@Nullable ItemStack stack) { + if (isStackValid(stack)) return stack.copy(); + return null; + } + + public static FluidStack copyAmount(int aAmount, FluidStack aStack) { + if (aStack == null) return null; + FluidStack rStack = aStack.copy(); + rStack.amount = aAmount; + return rStack; + } + + /** + * @deprecated use {@link #copyAmount(int, ItemStack)} instead + */ + @Deprecated + public static ItemStack copyAmount(long aAmount, Object... aStacks) { + return copyAmount(aAmount, firstStackOrNull(aStacks)); + } + + /** + * @deprecated use {@link #copyAmount(int, ItemStack)} instead + */ + @Deprecated + public static ItemStack copyAmount(long aAmount, ItemStack aStack) { + return copyAmount((int) aAmount, aStack); + } + + public static ItemStack copyAmount(int aAmount, ItemStack aStack) { + ItemStack rStack = copy(aStack); + if (isStackInvalid(rStack)) return null; + if (aAmount > 64) aAmount = 64; + else if (aAmount == -1) aAmount = 111; + else if (aAmount < 0) aAmount = 0; + rStack.stackSize = (byte) aAmount; + return rStack; + } + + public static ItemStack multiplyStack(int aMultiplier, ItemStack aStack) { + ItemStack rStack = copy(aStack); + if (isStackInvalid(rStack)) return null; + int tAmount = rStack.stackSize * aMultiplier; + if (tAmount > 64) tAmount = 64; + else if (tAmount == -1) tAmount = 111; + else if (tAmount < 0) tAmount = 0; + rStack.stackSize = (byte) tAmount; + return rStack; + } + + /** + * Unlike {@link #copyAmount(int, ItemStack)}, this method does not restrict stack size by 64. + */ + public static ItemStack copyAmountUnsafe(int aAmount, ItemStack aStack) { + ItemStack rStack = copy(aStack); + if (isStackInvalid(rStack)) return null; + else if (aAmount < 0) aAmount = 0; + rStack.stackSize = (int) aAmount; + return rStack; + } + + public static ItemStack copyMetaData(int aMetaData, ItemStack aStack) { + ItemStack rStack = copy(aStack); + if (isStackInvalid(rStack)) return null; + Items.feather.setDamage(rStack, aMetaData); + return rStack; + } + + /** + * @deprecated use {@link #copyAmountAndMetaData(int, int, ItemStack)} instead + */ + @Deprecated + public static ItemStack copyAmountAndMetaData(long aAmount, long aMetaData, ItemStack aStack) { + return copyAmountAndMetaData((int) aAmount, (int) aMetaData, aStack); + } + + public static ItemStack copyAmountAndMetaData(int aAmount, int aMetaData, ItemStack aStack) { + ItemStack rStack = copyAmount(aAmount, aStack); + if (isStackInvalid(rStack)) return null; + Items.feather.setDamage(rStack, aMetaData); + return rStack; + } + + /** + * returns a copy of an ItemStack with its Stacksize being multiplied by aMultiplier + */ + public static ItemStack mul(int aMultiplier, ItemStack aStack) { + ItemStack rStack = copy(aStack); + if (rStack == null) return null; + rStack.stackSize *= aMultiplier; + return rStack; + } + + /** + * Loads an ItemStack properly. + */ + public static ItemStack loadItem(NBTTagCompound aNBT, String aTagName) { + return loadItem(aNBT.getCompoundTag(aTagName)); + } + + public static FluidStack loadFluid(NBTTagCompound aNBT, String aTagName) { + return loadFluid(aNBT.getCompoundTag(aTagName)); + } + + /** + * Loads an ItemStack properly. + */ + public static ItemStack loadItem(NBTTagCompound aNBT) { + if (aNBT == null) return null; + ItemStack tRawStack = ItemStack.loadItemStackFromNBT(aNBT); + int tRealStackSize = 0; + if (tRawStack != null && aNBT.hasKey("Count", Constants.NBT.TAG_INT)) { + tRealStackSize = aNBT.getInteger("Count"); + tRawStack.stackSize = tRealStackSize; + } else if (tRawStack != null) { + tRealStackSize = tRawStack.stackSize; + } + ItemStack tRet = GTOreDictUnificator.get(true, tRawStack); + if (tRet != null) tRet.stackSize = tRealStackSize; + return tRet; + } + + public static void saveItem(NBTTagCompound aParentTag, String aTagName, ItemStack aStack) { + if (aStack != null) aParentTag.setTag(aTagName, saveItem(aStack)); + } + + public static NBTTagCompound saveItem(ItemStack aStack) { + if (aStack == null) return new NBTTagCompound(); + NBTTagCompound t = new NBTTagCompound(); + aStack.writeToNBT(t); + if (aStack.stackSize > Byte.MAX_VALUE) t.setInteger("Count", aStack.stackSize); + return t; + } + + /** + * Loads an FluidStack properly. + */ + public static FluidStack loadFluid(NBTTagCompound aNBT) { + if (aNBT == null) return null; + return FluidStack.loadFluidStackFromNBT(aNBT); + } + + public static E selectItemInList(int aIndex, E aReplacement, List aList) { + if (aList == null || aList.isEmpty()) return aReplacement; + if (aList.size() <= aIndex) return aList.get(aList.size() - 1); + if (aIndex < 0) return aList.get(0); + return aList.get(aIndex); + } + + @SafeVarargs + public static E selectItemInList(int aIndex, E aReplacement, E... aList) { + if (aList == null || aList.length == 0) return aReplacement; + if (aList.length <= aIndex) return aList[aList.length - 1]; + if (aIndex < 0) return aList[0]; + return aList[aIndex]; + } + + public static boolean isStackInStackSet(ItemStack aStack, Set aSet) { + if (aStack == null) return false; + if (aSet.contains(aStack)) return true; + + return aSet.contains(GTItemStack.internalCopyStack(aStack, true)); + } + + public static boolean isStackInList(ItemStack aStack, Collection aList) { + if (aStack == null) { + return false; + } + return isStackInList(new GTItemStack(aStack), aList); + } + + public static boolean isStackInList(ItemStack aStack, Set aList) { + if (aStack == null) { + return false; + } + return isStackInList(new GTItemStack2(aStack), aList); + } + + public static boolean isStackInList(GTItemStack aStack, Collection aList) { + return aStack != null + && (aList.contains(aStack) || aList.contains(new GTItemStack(aStack.mItem, aStack.mStackSize, W))); + } + + public static boolean isStackInList(GTItemStack2 aStack, Set aList) { + return aStack != null + && (aList.contains(aStack) || aList.contains(new GTItemStack2(aStack.mItem, aStack.mStackSize, W))); + } + + /** + * re-maps all Keys of a Map after the Keys were weakened. + */ + public static Map reMap(Map aMap) { + Map tMap = null; + // We try to clone the Map first (most Maps are Cloneable) in order to retain as much state of the Map as + // possible when rehashing. For example, "Custom" HashMaps from fastutil may have a custom hash function which + // would not be used to rehash if we just create a new HashMap. + if (aMap instanceof Cloneable) { + try { + tMap = (Map) aMap.getClass() + .getMethod("clone") + .invoke(aMap); + } catch (Throwable e) { + GTLog.err.println("Failed to clone Map of type " + aMap.getClass()); + e.printStackTrace(GTLog.err); + } + } + + if (tMap == null) { + tMap = new HashMap<>(aMap); + } + + aMap.clear(); + aMap.putAll(tMap); + return aMap; + } + + /** + * re-maps all Keys of a Map after the Keys were weakened. + */ + public static SetMultimap reMap(SetMultimap aMap) { + @SuppressWarnings("unchecked") + Map.Entry[] entries = aMap.entries() + .toArray(new Map.Entry[0]); + aMap.clear(); + for (Map.Entry entry : entries) { + aMap.put(entry.getKey(), entry.getValue()); + } + return aMap; + } + + public static > LinkedHashMap sortMapByValuesAcending(Map map) { + return map.entrySet() + .stream() + .sorted(Map.Entry.comparingByValue()) + .collect(CollectorUtils.entriesToMap(LinkedHashMap::new)); + } + + /** + * Why the fuck do neither Java nor Guava have a Function to do this? + */ + public static > LinkedHashMap sortMapByValuesDescending(Map aMap) { + List> tEntrySet = new LinkedList<>(aMap.entrySet()); + tEntrySet.sort((aValue1, aValue2) -> { + return aValue2.getValue() + .compareTo(aValue1.getValue()); // FB: RV - RV_NEGATING_RESULT_OF_COMPARETO + }); + LinkedHashMap rMap = new LinkedHashMap<>(); + for (Map.Entry tEntry : tEntrySet) rMap.put(tEntry.getKey(), tEntry.getValue()); + return rMap; + } + + /** + * Translates a Material Amount into an Amount of Fluid in Fluid Material Units. + */ + public static long translateMaterialToFluidAmount(long aMaterialAmount, boolean aRoundUp) { + return translateMaterialToAmount(aMaterialAmount, L, aRoundUp); + } + + /** + * Translates a Material Amount into an Amount of Fluid. Second Parameter for things like Bucket Amounts (1000) and + * similar + */ + public static long translateMaterialToAmount(long aMaterialAmount, long aAmountPerUnit, boolean aRoundUp) { + return Math.max( + 0, + ((aMaterialAmount * aAmountPerUnit) / M) + + (aRoundUp && (aMaterialAmount * aAmountPerUnit) % M > 0 ? 1 : 0)); + } + + /** + * This checks if the Dimension is really a Dimension and not another Planet or something. Used for my Teleporter. + */ + public static boolean isRealDimension(int aDimensionID) { + if (aDimensionID <= 1 && aDimensionID >= -1 && !GregTechAPI.sDimensionalList.contains(aDimensionID)) + return true; + return !GregTechAPI.sDimensionalList.contains(aDimensionID) + && DimensionManager.isDimensionRegistered(aDimensionID); + } + + public static boolean moveEntityToDimensionAtCoords(Entity entity, int aDimension, double aX, double aY, + double aZ) { + // Credit goes to BrandonCore Author :!: + + if (entity == null || entity.worldObj.isRemote) return false; + if (entity.ridingEntity != null) entity.mountEntity(null); + if (entity.riddenByEntity != null) entity.riddenByEntity.mountEntity(null); + + World startWorld = entity.worldObj; + WorldServer destinationWorld = FMLCommonHandler.instance() + .getMinecraftServerInstance() + .worldServerForDimension(aDimension); + + if (destinationWorld == null) { + return false; + } + + boolean interDimensional = startWorld.provider.dimensionId != destinationWorld.provider.dimensionId; + if (!interDimensional) return false; + startWorld.updateEntityWithOptionalForce(entity, false); // added + + if (entity instanceof EntityPlayerMP player) { + player.closeScreen(); // added + player.dimension = aDimension; + player.playerNetServerHandler.sendPacket( + new S07PacketRespawn( + player.dimension, + player.worldObj.difficultySetting, + destinationWorld.getWorldInfo() + .getTerrainType(), + player.theItemInWorldManager.getGameType())); + ((WorldServer) startWorld).getPlayerManager() + .removePlayer(player); + + startWorld.playerEntities.remove(player); + startWorld.updateAllPlayersSleepingFlag(); + int i = entity.chunkCoordX; + int j = entity.chunkCoordZ; + if ((entity.addedToChunk) && (startWorld.getChunkProvider() + .chunkExists(i, j))) { + startWorld.getChunkFromChunkCoords(i, j) + .removeEntity(entity); + startWorld.getChunkFromChunkCoords(i, j).isModified = true; + } + startWorld.loadedEntityList.remove(entity); + startWorld.onEntityRemoved(entity); + } + + entity.setLocationAndAngles(aX, aY, aZ, entity.rotationYaw, entity.rotationPitch); + + destinationWorld.theChunkProviderServer.loadChunk((int) aX >> 4, (int) aZ >> 4); + + destinationWorld.theProfiler.startSection("placing"); + if (!(entity instanceof EntityPlayer)) { + NBTTagCompound entityNBT = new NBTTagCompound(); + entity.isDead = false; + entityNBT.setString("id", EntityList.getEntityString(entity)); + entity.writeToNBT(entityNBT); + entity.isDead = true; + entity = EntityList.createEntityFromNBT(entityNBT, destinationWorld); + if (entity == null) { + return false; + } + entity.dimension = destinationWorld.provider.dimensionId; + } + destinationWorld.spawnEntityInWorld(entity); + entity.setWorld(destinationWorld); + entity.setLocationAndAngles(aX, aY, aZ, entity.rotationYaw, entity.rotationPitch); + + destinationWorld.updateEntityWithOptionalForce(entity, false); + entity.setLocationAndAngles(aX, aY, aZ, entity.rotationYaw, entity.rotationPitch); + + if ((entity instanceof EntityPlayerMP player)) { + player.mcServer.getConfigurationManager() + .func_72375_a(player, destinationWorld); + player.playerNetServerHandler.setPlayerLocation(aX, aY, aZ, player.rotationYaw, player.rotationPitch); + } + + destinationWorld.updateEntityWithOptionalForce(entity, false); + + if (entity instanceof EntityPlayerMP player) { + player.theItemInWorldManager.setWorld(destinationWorld); + player.mcServer.getConfigurationManager() + .updateTimeAndWeatherForPlayer(player, destinationWorld); + player.mcServer.getConfigurationManager() + .syncPlayerInventory(player); + + for (PotionEffect potionEffect : player.getActivePotionEffects()) { + player.playerNetServerHandler.sendPacket(new S1DPacketEntityEffect(player.getEntityId(), potionEffect)); + } + + player.playerNetServerHandler.sendPacket( + new S1FPacketSetExperience(player.experience, player.experienceTotal, player.experienceLevel)); + FMLCommonHandler.instance() + .firePlayerChangedDimensionEvent( + player, + startWorld.provider.dimensionId, + destinationWorld.provider.dimensionId); + } + entity.setLocationAndAngles(aX, aY, aZ, entity.rotationYaw, entity.rotationPitch); + + destinationWorld.theProfiler.endSection(); + entity.fallDistance = 0; + return true; + } + + public static int getScaleCoordinates(double aValue, int aScale) { + return (int) Math.floor(aValue / aScale); + } + + public static int getCoordinateScan(ArrayList aList, EntityPlayer aPlayer, World aWorld, int aScanLevel, + int aX, int aY, int aZ, ForgeDirection side, float aClickX, float aClickY, float aClickZ) { + if (aList == null) return 0; + + ArrayList tList = new ArrayList<>(); + int rEUAmount = 0; + + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + + final Block tBlock = aWorld.getBlock(aX, aY, aZ); + + addBaseInfo(aPlayer, aWorld, aX, aY, aZ, tList, tTileEntity, tBlock); + + if (tTileEntity != null) { + rEUAmount += addFluidHandlerInfo(side, tList, tTileEntity); + + try { + if (tTileEntity instanceof ic2.api.reactor.IReactorChamber chamber) { + rEUAmount += 500; + // Redirect the rest of the scans to the reactor itself + tTileEntity = (TileEntity) chamber.getReactor(); + } + } catch (Throwable e) { + if (D1) e.printStackTrace(GTLog.err); + } + rEUAmount += addReactorInfo(tList, tTileEntity); + rEUAmount += addAlignmentInfo(tList, tTileEntity); + rEUAmount += addIC2WrenchableInfo(aPlayer, tList, tTileEntity); + rEUAmount += addIC2EnergyConductorInfo(tList, tTileEntity); + rEUAmount += addIC2EnergyStorageInfo(tList, tTileEntity); + rEUAmount += addUpgradableMachineInfo(tList, tTileEntity); + rEUAmount += addMachineProgressInfo(tList, tTileEntity); + rEUAmount += addCoverableInfo(side, tList, tTileEntity); + addEnergyContainerInfo(tList, tTileEntity); + addOwnerInfo(tList, tTileEntity); + addDeviceInfo(tList, tTileEntity); + + rEUAmount += addIC2CropInfo(tList, tTileEntity); + + rEUAmount += addForestryLeavesInfo(tList, tTileEntity); + } + + final Chunk currentChunk = aWorld.getChunkFromBlockCoords(aX, aZ); + addUndergroundFluidInfo(aPlayer, tList, currentChunk); + addPollutionInfo(tList, currentChunk); + + rEUAmount += addDebuggableBlockInfo(aPlayer, aX, aY, aZ, tList, tBlock); + + final BlockScanningEvent tEvent = new BlockScanningEvent( + aWorld, + aPlayer, + aX, + aY, + aZ, + side, + aScanLevel, + tBlock, + tTileEntity, + tList, + aClickX, + aClickY, + aClickZ); + tEvent.mEUCost = rEUAmount; + MinecraftForge.EVENT_BUS.post(tEvent); + if (!tEvent.isCanceled()) aList.addAll(tList); + return tEvent.mEUCost; + } + + private static void addBaseInfo(EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, ArrayList tList, + TileEntity tTileEntity, Block tBlock) { + tList.add( + "----- X: " + EnumChatFormatting.AQUA + + formatNumbers(aX) + + EnumChatFormatting.RESET + + " Y: " + + EnumChatFormatting.AQUA + + formatNumbers(aY) + + EnumChatFormatting.RESET + + " Z: " + + EnumChatFormatting.AQUA + + formatNumbers(aZ) + + EnumChatFormatting.RESET + + " D: " + + EnumChatFormatting.AQUA + + aWorld.provider.dimensionId + + EnumChatFormatting.RESET + + " -----"); + try { + tList.add( + GTUtility.trans("162", "Name: ") + EnumChatFormatting.BLUE + + ((tTileEntity instanceof IInventory inv) ? inv.getInventoryName() : tBlock.getUnlocalizedName()) + + EnumChatFormatting.RESET + + GTUtility.trans("163", " MetaData: ") + + EnumChatFormatting.AQUA + + aWorld.getBlockMetadata(aX, aY, aZ) + + EnumChatFormatting.RESET); + tList.add( + GTUtility.trans("164", "Hardness: ") + EnumChatFormatting.YELLOW + + tBlock.getBlockHardness(aWorld, aX, aY, aZ) + + EnumChatFormatting.RESET + + GTUtility.trans("165", " Blast Resistance: ") + + EnumChatFormatting.YELLOW + + tBlock + .getExplosionResistance(aPlayer, aWorld, aX, aY, aZ, aPlayer.posX, aPlayer.posY, aPlayer.posZ) + + EnumChatFormatting.RESET); + if (tBlock.isBeaconBase(aWorld, aX, aY, aZ, aX, aY + 1, aZ)) tList.add( + EnumChatFormatting.GOLD + GTUtility.trans("166", "Is valid Beacon Pyramid Material") + + EnumChatFormatting.RESET); + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this block's info.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + } + + private static int addFluidHandlerInfo(ForgeDirection side, ArrayList tList, TileEntity tTileEntity) { + int rEUAmount = 0; + try { + if (tTileEntity instanceof IFluidHandler fluidHandler) { + rEUAmount += 500; + final FluidTankInfo[] tTanks = fluidHandler.getTankInfo(side); + if (tTanks != null) for (byte i = 0; i < tTanks.length; i++) { + tList.add( + GTUtility.trans("167", "Tank ") + i + + ": " + + EnumChatFormatting.GREEN + + formatNumbers((tTanks[i].fluid == null ? 0 : tTanks[i].fluid.amount)) + + EnumChatFormatting.RESET + + " L / " + + EnumChatFormatting.YELLOW + + formatNumbers(tTanks[i].capacity) + + EnumChatFormatting.RESET + + " L " + + EnumChatFormatting.GOLD + + getFluidName(tTanks[i].fluid, true) + + EnumChatFormatting.RESET); + } + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this tile's fluid tank info.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + private static int addDebuggableBlockInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, ArrayList tList, + Block tBlock) { + int rEUAmount = 0; + try { + if (tBlock instanceof IDebugableBlock debugableBlock) { + rEUAmount += 500; + final ArrayList temp = debugableBlock.getDebugInfo(aPlayer, aX, aY, aZ, 3); + if (temp != null) tList.addAll(temp); + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this block's debug info.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + private static void addPollutionInfo(ArrayList tList, Chunk currentChunk) { + if (Pollution.hasPollution(currentChunk)) { + tList.add( + GTUtility.trans("202", "Pollution in Chunk: ") + EnumChatFormatting.RED + + formatNumbers(Pollution.getPollution(currentChunk)) + + EnumChatFormatting.RESET + + GTUtility.trans("203", " gibbl")); + } else { + tList.add( + EnumChatFormatting.GREEN + GTUtility.trans("204", "No Pollution in Chunk! HAYO!") + + EnumChatFormatting.RESET); + } + } + + private static void addUndergroundFluidInfo(EntityPlayer aPlayer, ArrayList tList, Chunk currentChunk) { + if (aPlayer.capabilities.isCreativeMode) { + final FluidStack tFluid = undergroundOilReadInformation(currentChunk); // -# to only read + if (tFluid != null) tList.add( + EnumChatFormatting.GOLD + tFluid.getLocalizedName() + + EnumChatFormatting.RESET + + ": " + + EnumChatFormatting.YELLOW + + formatNumbers(tFluid.amount) + + EnumChatFormatting.RESET + + " L"); + else tList.add( + EnumChatFormatting.GOLD + GTUtility.trans("201", "Nothing") + + EnumChatFormatting.RESET + + ": " + + EnumChatFormatting.YELLOW + + '0' + + EnumChatFormatting.RESET + + " L"); + } + } + + private static int addForestryLeavesInfo(ArrayList tList, TileEntity tTileEntity) { + int rEUAmount = 0; + try { + if (Mods.Forestry.isModLoaded() + && tTileEntity instanceof forestry.arboriculture.tiles.TileLeaves tileLeaves) { + final forestry.api.arboriculture.ITree tree = tileLeaves.getTree(); + if (tree != null) { + rEUAmount += 1000; + if (!tree.isAnalyzed()) tree.analyze(); + tree.addTooltip(tList); + } + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this leaves' info.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + private static int addIC2CropInfo(ArrayList tList, TileEntity tTileEntity) { + int rEUAmount = 0; + try { + if (tTileEntity instanceof ic2.api.crops.ICropTile crop) { + rEUAmount += 1000; + if (crop.getScanLevel() < 4) crop.setScanLevel((byte) 4); + if (crop.getCrop() != null) { + tList.add( + GTUtility.trans("187", "Type -- Crop-Name: ") + crop.getCrop() + .name() + + GTUtility.trans("188", " Growth: ") + + crop.getGrowth() + + GTUtility.trans("189", " Gain: ") + + crop.getGain() + + GTUtility.trans("190", " Resistance: ") + + crop.getResistance()); + } + tList.add( + GTUtility.trans("191", "Plant -- Fertilizer: ") + crop.getNutrientStorage() + + GTUtility.trans("192", " Water: ") + + crop.getHydrationStorage() + + GTUtility.trans("193", " Weed-Ex: ") + + crop.getWeedExStorage() + + GTUtility.trans("194", " Scan-Level: ") + + crop.getScanLevel()); + tList.add( + GTUtility.trans("195", "Environment -- Nutrients: ") + crop.getNutrients() + + GTUtility.trans("196", " Humidity: ") + + crop.getHumidity() + + GTUtility.trans("197", " Air-Quality: ") + + crop.getAirQuality()); + if (crop.getCrop() != null) { + final StringBuilder tStringB = new StringBuilder(); + for (final String tAttribute : crop.getCrop() + .attributes()) { + tStringB.append(", ") + .append(tAttribute); + } + final String tString = tStringB.toString(); + tList.add(GTUtility.trans("198", "Attributes:") + tString.replaceFirst(",", E)); + tList.add( + GTUtility.trans("199", "Discovered by: ") + crop.getCrop() + .discoveredBy()); + } + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this crop's info.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + private static void addDeviceInfo(ArrayList tList, TileEntity tTileEntity) { + try { + if (tTileEntity instanceof IGregTechDeviceInformation info && info.isGivingInformation()) { + tList.addAll(Arrays.asList(info.getInfoData())); + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this device's info.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + } + + private static void addOwnerInfo(ArrayList tList, TileEntity tTileEntity) { + try { + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + tList.add( + GTUtility.trans("186", "Owned by: ") + EnumChatFormatting.BLUE + + gtTE.getOwnerName() + + EnumChatFormatting.RESET); + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this device's owner.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + } + + private static void addEnergyContainerInfo(ArrayList tList, TileEntity tTileEntity) { + try { + if (tTileEntity instanceof IBasicEnergyContainer energyContainer && energyContainer.getEUCapacity() > 0) { + tList.add( + GTUtility.trans("179", "Max IN: ") + EnumChatFormatting.RED + + formatNumbers(energyContainer.getInputVoltage()) + + " (" + + GTValues.VN[getTier(energyContainer.getInputVoltage())] + + ") " + + EnumChatFormatting.RESET + + GTUtility.trans("182", " EU at ") + + EnumChatFormatting.RED + + formatNumbers(energyContainer.getInputAmperage()) + + EnumChatFormatting.RESET + + GTUtility.trans("183", " A")); + tList.add( + GTUtility.trans("181", "Max OUT: ") + EnumChatFormatting.RED + + formatNumbers(energyContainer.getOutputVoltage()) + + " (" + + GTValues.VN[getTier(energyContainer.getOutputVoltage())] + + ") " + + EnumChatFormatting.RESET + + GTUtility.trans("182", " EU at ") + + EnumChatFormatting.RED + + formatNumbers(energyContainer.getOutputAmperage()) + + EnumChatFormatting.RESET + + GTUtility.trans("183", " A")); + tList.add( + GTUtility.trans("184", "Energy: ") + EnumChatFormatting.GREEN + + formatNumbers(energyContainer.getStoredEU()) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + formatNumbers(energyContainer.getEUCapacity()) + + EnumChatFormatting.RESET + + " EU"); + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this device's energy info.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + } + + private static int addCoverableInfo(ForgeDirection side, ArrayList tList, TileEntity tTileEntity) { + int rEUAmount = 0; + try { + if (tTileEntity instanceof ICoverable coverable) { + rEUAmount += 300; + final String tString = coverable.getCoverInfoAtSide(side) + .getBehaviorDescription(); + if (tString != null && !tString.equals(E)) tList.add(tString); + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this device's covers.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + private static int addMachineProgressInfo(ArrayList tList, TileEntity tTileEntity) { + int rEUAmount = 0; + try { + if (tTileEntity instanceof IMachineProgress progress) { + if (progress.isAllowedToWork() && !progress.hasThingsToDo()) { + tList.add(EnumChatFormatting.RED + "Disabled." + EnumChatFormatting.RESET); + } + if (progress.wasShutdown() && isStringValid( + progress.getLastShutDownReason() + .getDisplayString())) { + tList.add( + progress.getLastShutDownReason() + .getDisplayString()); + } + rEUAmount += 400; + int tValue = 0; + if (0 < (tValue = progress.getMaxProgress())) tList.add( + GTUtility.trans("178", "Progress/Load: ") + EnumChatFormatting.GREEN + + formatNumbers(progress.getProgress()) + + EnumChatFormatting.RESET + + " / " + + EnumChatFormatting.YELLOW + + formatNumbers(tValue) + + EnumChatFormatting.RESET); + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this device's progress.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + private static int addUpgradableMachineInfo(ArrayList tList, TileEntity tTileEntity) { + int rEUAmount = 0; + try { + if (tTileEntity instanceof IUpgradableMachine upgradableMachine) { + rEUAmount += 500; + if (upgradableMachine.hasMufflerUpgrade()) tList.add( + EnumChatFormatting.GREEN + GTUtility.trans("177", "Has Muffler Upgrade") + + EnumChatFormatting.RESET); + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this device's upgrades.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + private static int addIC2EnergyStorageInfo(ArrayList tList, TileEntity tTileEntity) { + int rEUAmount = 0; + try { + if (tTileEntity instanceof ic2.api.tile.IEnergyStorage storage) { + rEUAmount += 200; + tList.add( + GTUtility.trans("176", "Contained Energy: ") + EnumChatFormatting.YELLOW + + formatNumbers(storage.getStored()) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + formatNumbers(storage.getCapacity()) + + EnumChatFormatting.RESET + + " EU"); + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this device's IC2 energy info.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + private static int addIC2EnergyConductorInfo(ArrayList tList, TileEntity tTileEntity) { + int rEUAmount = 0; + try { + if (tTileEntity instanceof ic2.api.energy.tile.IEnergyConductor conductor) { + rEUAmount += 200; + tList.add( + GTUtility.trans("175", "Conduction Loss: ") + EnumChatFormatting.YELLOW + + conductor.getConductionLoss() + + EnumChatFormatting.RESET); + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this device's EU conduction info.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + private static int addIC2WrenchableInfo(EntityPlayer aPlayer, ArrayList tList, TileEntity tTileEntity) { + int rEUAmount = 0; + try { + if (tTileEntity instanceof ic2.api.tile.IWrenchable wrenchable) { + rEUAmount += 100; + tList.add( + GTUtility.trans("171", "Facing: ") + EnumChatFormatting.GREEN + + wrenchable.getFacing() + + EnumChatFormatting.RESET + + GTUtility.trans("172", " / Chance: ") + + EnumChatFormatting.YELLOW + + (wrenchable.getWrenchDropRate() * 100) + + EnumChatFormatting.RESET + + "%"); + tList.add( + wrenchable.wrenchCanRemove(aPlayer) + ? EnumChatFormatting.GREEN + GTUtility.trans("173", "You can remove this with a Wrench") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + GTUtility.trans("174", "You can NOT remove this with a Wrench") + + EnumChatFormatting.RESET); + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this device's IC@ wrenchability.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + private static int addAlignmentInfo(ArrayList tList, TileEntity tTileEntity) { + int rEUAmount = 0; + try { + if (tTileEntity instanceof IAlignmentProvider alignmentProvider) { + final IAlignment tAlignment = alignmentProvider.getAlignment(); + if (tAlignment != null) { + rEUAmount += 100; + tList.add( + GTUtility.trans("219", "Extended Facing: ") + EnumChatFormatting.GREEN + + tAlignment.getExtendedFacing() + + EnumChatFormatting.RESET); + } + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this device's alignment info.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + private static int addReactorInfo(ArrayList tList, TileEntity tTileEntity) { + int rEUAmount = 0; + try { + if (tTileEntity instanceof ic2.api.reactor.IReactor reactor) { + rEUAmount += 500; + tList.add( + GTUtility.trans("168", "Heat: ") + EnumChatFormatting.GREEN + + formatNumbers(reactor.getHeat()) + + EnumChatFormatting.RESET + + " / " + + EnumChatFormatting.YELLOW + + formatNumbers(reactor.getMaxHeat()) + + EnumChatFormatting.RESET); + tList.add( + GTUtility.trans("169", "HEM: ") + EnumChatFormatting.YELLOW + + reactor.getHeatEffectModifier() + + EnumChatFormatting.RESET); + } + } catch (Throwable e) { + tList.add(String.format("§cAn exception was thrown while fetching this reactor's info.§r")); + if (D1) e.printStackTrace(GTLog.err); + } + return rEUAmount; + } + + public static String trans(String aKey, String aEnglish) { + return GTLanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_" + aKey, aEnglish); + } + + public static String getTrans(String aKey) { + return GTLanguageManager.getTranslation("Interaction_DESCRIPTION_Index_" + aKey); + } + + /** + * @return an Array containing the X and the Y Coordinate of the clicked Point, with the top left Corner as Origin, + * like on the Texture Sheet. return values should always be between [0.0F and 0.99F]. + */ + // TODO: use clamp() + public static float[] getClickedFacingCoords(ForgeDirection side, float aX, float aY, float aZ) { + return switch (side) { + case DOWN -> new float[] { Math.min(0.99F, Math.max(0, 1 - aX)), Math.min(0.99F, Math.max(0, aZ)) }; + case UP -> new float[] { Math.min(0.99F, Math.max(0, aX)), Math.min(0.99F, Math.max(0, aZ)) }; + case NORTH -> new float[] { Math.min(0.99F, Math.max(0, 1 - aX)), Math.min(0.99F, Math.max(0, 1 - aY)) }; + case SOUTH -> new float[] { Math.min(0.99F, Math.max(0, aX)), Math.min(0.99F, Math.max(0, 1 - aY)) }; + case WEST -> new float[] { Math.min(0.99F, Math.max(0, aZ)), Math.min(0.99F, Math.max(0, 1 - aY)) }; + case EAST -> new float[] { Math.min(0.99F, Math.max(0, 1 - aZ)), Math.min(0.99F, Math.max(0, 1 - aY)) }; + default -> new float[] { 0.5F, 0.5F }; + }; + } + + /** + * This Function determines the direction a Block gets when being Wrenched. returns -1 if invalid. Even though that + * could never happen. + */ + public static ForgeDirection determineWrenchingSide(ForgeDirection side, float aX, float aY, float aZ) { + ForgeDirection tBack = side.getOpposite(); + switch (side) { + case DOWN, UP -> { + if (aX < 0.25) { + if (aZ < 0.25) return tBack; + if (aZ > 0.75) return tBack; + return WEST; + } + if (aX > 0.75) { + if (aZ < 0.25) return tBack; + if (aZ > 0.75) return tBack; + return EAST; + } + if (aZ < 0.25) return NORTH; + if (aZ > 0.75) return SOUTH; + return side; + } + case NORTH, SOUTH -> { + if (aX < 0.25) { + if (aY < 0.25) return tBack; + if (aY > 0.75) return tBack; + return WEST; + } + if (aX > 0.75) { + if (aY < 0.25) return tBack; + if (aY > 0.75) return tBack; + return EAST; + } + if (aY < 0.25) return DOWN; + if (aY > 0.75) return UP; + return side; + } + case WEST, EAST -> { + if (aZ < 0.25) { + if (aY < 0.25) return tBack; + if (aY > 0.75) return tBack; + return NORTH; + } + if (aZ > 0.75) { + if (aY < 0.25) return tBack; + if (aY > 0.75) return tBack; + return SOUTH; + } + if (aY < 0.25) return DOWN; + if (aY > 0.75) return UP; + return side; + } + } + return UNKNOWN; + } + + private static DecimalFormat getDecimalFormat() { + return decimalFormatters.computeIfAbsent(Locale.getDefault(Locale.Category.FORMAT), locale -> { + DecimalFormat numberFormat = new DecimalFormat(); // uses the necessary locale inside anyway + numberFormat.setGroupingUsed(true); + numberFormat.setMaximumFractionDigits(2); + numberFormat.setRoundingMode(RoundingMode.HALF_UP); + DecimalFormatSymbols decimalFormatSymbols = numberFormat.getDecimalFormatSymbols(); + decimalFormatSymbols.setGroupingSeparator(','); // Use sensible separator for best clarity. + numberFormat.setDecimalFormatSymbols(decimalFormatSymbols); + return numberFormat; + }); + } + + public static String formatNumbers(BigInteger aNumber) { + return getDecimalFormat().format(aNumber); + } + + public static String formatNumbers(long aNumber) { + return getDecimalFormat().format(aNumber); + } + + public static String formatNumbers(double aNumber) { + return getDecimalFormat().format(aNumber); + } + + /* + * Check if stack has enough items of given type and subtract from stack, if there's no creative or 111 stack. + */ + public static boolean consumeItems(EntityPlayer player, ItemStack stack, Item item, int count) { + if (stack != null && stack.getItem() == item && stack.stackSize >= count) { + if ((!player.capabilities.isCreativeMode) && (stack.stackSize != 111)) stack.stackSize -= count; + return true; + } + return false; + } + + /* + * Check if stack has enough items of given gregtech material (will be oredicted) and subtract from stack, if + * there's no creative or 111 stack. + */ + public static boolean consumeItems(EntityPlayer player, ItemStack stack, gregtech.api.enums.Materials mat, + int count) { + if (stack != null && GTOreDictUnificator.getItemData(stack).mMaterial.mMaterial == mat + && stack.stackSize >= count) { + if ((!player.capabilities.isCreativeMode) && (stack.stackSize != 111)) stack.stackSize -= count; + return true; + } + return false; + } + + public static ArrayList sortByValueToList(Map map) { + List> list = new LinkedList<>(map.entrySet()); + list.sort((o1, o2) -> o2.getValue() - o1.getValue()); + + ArrayList result = new ArrayList<>(); + for (Map.Entry e : list) result.add(e.getKey()); + return result; + } + + public static String joinListToString(List list) { + StringBuilder result = new StringBuilder(32); + for (String s : list) result.append(result.length() == 0 ? s : '|' + s); + return result.toString(); + } + + public static ItemStack getIntegratedCircuit(int config) { + return ItemList.Circuit_Integrated.getWithDamage(0, config); + } + + public static float getBlockHardnessAt(World aWorld, int aX, int aY, int aZ) { + return aWorld.getBlock(aX, aY, aZ) + .getBlockHardness(aWorld, aX, aY, aZ); + } + + public static FakePlayer getFakePlayer(IGregTechTileEntity aBaseMetaTileEntity) { + if (aBaseMetaTileEntity.getWorld() instanceof WorldServer) { + return FakePlayerFactory.get( + (WorldServer) aBaseMetaTileEntity.getWorld(), + new GameProfile(aBaseMetaTileEntity.getOwnerUuid(), aBaseMetaTileEntity.getOwnerName())); + } + return null; + } + + public static boolean eraseBlockByFakePlayer(FakePlayer aPlayer, int aX, int aY, int aZ, boolean isSimulate) { + if (aPlayer == null) return false; + World aWorld = aPlayer.worldObj; + BlockEvent.BreakEvent event = new BlockEvent.BreakEvent( + aX, + aY, + aZ, + aWorld, + aWorld.getBlock(aX, aY, aZ), + aWorld.getBlockMetadata(aX, aY, aZ), + aPlayer); + MinecraftForge.EVENT_BUS.post(event); + if (!event.isCanceled()) { + if (!isSimulate) return aWorld.setBlockToAir(aX, aY, aZ); + return true; + } + return false; + } + + public static boolean setBlockByFakePlayer(FakePlayer aPlayer, int aX, int aY, int aZ, Block aBlock, int aMeta, + boolean isSimulate) { + if (aPlayer == null) return false; + World aWorld = aPlayer.worldObj; + BlockEvent.PlaceEvent event = ForgeEventFactory + .onPlayerBlockPlace(aPlayer, new BlockSnapshot(aWorld, aX, aY, aZ, aBlock, aMeta), UNKNOWN); + if (!event.isCanceled()) { + if (!isSimulate) return aWorld.setBlock(aX, aY, aZ, aBlock, aMeta, 3); + return true; + } + return false; + } + + public static int findMatchingStackInList(List aStacks, ItemStack aStack) { + if (isStackInvalid(aStack)) return -1; + for (int i = 0, aStacksSize = aStacks.size(); i < aStacksSize; i++) { + ItemStack tStack = aStacks.get(i); + if (areStacksEqual(aStack, tStack)) return i; + } + return -1; + } + + public static Map convertItemListToMap(Collection itemStacks) { + Map result = new Object2LongOpenHashMap<>(); + for (ItemStack itemStack : itemStacks) { + if (itemStack != null && itemStack.stackSize > 0) { + GTUtility.ItemId itemId = GTUtility.ItemId.createNoCopy(itemStack); + result.merge(itemId, (long) itemStack.stackSize, Long::sum); + } + } + return result; + } + + public static Map convertFluidListToMap(Collection fluidStacks) { + Map result = new Reference2LongOpenHashMap<>(); + for (FluidStack fluidStack : fluidStacks) { + if (fluidStack != null && fluidStack.amount > 0) { + result.merge(fluidStack.getFluid(), (long) fluidStack.amount, Long::sum); + } + } + return result; + } + + /** + * @return Supplied collection that doesn't contain invalid MetaTileEntities + */ + public static , E extends MetaTileEntity> T filterValidMTEs(T metaTileEntities) { + metaTileEntities.removeIf(mte -> mte == null || !mte.isValid()); + return metaTileEntities; + } + + public static ForgeDirection getSideFromPlayerFacing(Entity player) { + if (player == null) return ForgeDirection.UNKNOWN; + if (player.rotationPitch >= 65) return ForgeDirection.UP; + if (player.rotationPitch <= -65) return ForgeDirection.DOWN; + final byte facing = COMPASS_DIRECTIONS[MathHelper.floor_double(0.5D + 4.0F * player.rotationYaw / 360.0F) + & 0x3]; + return ForgeDirection.getOrientation(facing); + } + + public static class ItemNBT { + + public static void setNBT(ItemStack aStack, NBTTagCompound aNBT) { + if (aNBT == null) { + aStack.setTagCompound(null); + return; + } + ArrayList tTagsToRemove = new ArrayList<>(); + for (String tKey : aNBT.func_150296_c()) { + NBTBase tValue = aNBT.getTag(tKey); + if (tValue == null || (tValue instanceof NBTPrimitive && ((NBTPrimitive) tValue).func_150291_c() == 0) + || (tValue instanceof NBTTagString && isStringInvalid(((NBTTagString) tValue).func_150285_a_()))) + tTagsToRemove.add(tKey); + } + for (String tKey : tTagsToRemove) aNBT.removeTag(tKey); + aStack.setTagCompound(aNBT.hasNoTags() ? null : aNBT); + } + + public static NBTTagCompound getNBT(ItemStack aStack) { + NBTTagCompound rNBT = aStack.getTagCompound(); + return rNBT == null ? new NBTTagCompound() : rNBT; + } + + public static void setPunchCardData(ItemStack aStack, String aPunchCardData) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setString("GT.PunchCardData", aPunchCardData); + setNBT(aStack, tNBT); + } + + public static String getPunchCardData(ItemStack aStack) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getString("GT.PunchCardData"); + } + + public static void setLighterFuel(ItemStack aStack, long aFuel) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setLong("GT.LighterFuel", aFuel); + setNBT(aStack, tNBT); + } + + public static long getLighterFuel(ItemStack aStack) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getLong("GT.LighterFuel"); + } + + public static void setMapID(ItemStack aStack, short aMapID) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setShort("map_id", aMapID); + setNBT(aStack, tNBT); + } + + public static short getMapID(ItemStack aStack) { + NBTTagCompound tNBT = getNBT(aStack); + if (!tNBT.hasKey("map_id")) return -1; + return tNBT.getShort("map_id"); + } + + public static void setBookTitle(ItemStack aStack, String aTitle) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setString("title", aTitle); + setNBT(aStack, tNBT); + } + + public static String getBookTitle(ItemStack aStack) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getString("title"); + } + + public static void setBookAuthor(ItemStack aStack, String aAuthor) { + NBTTagCompound tNBT = getNBT(aStack); + tNBT.setString("author", aAuthor); + setNBT(aStack, tNBT); + } + + public static String getBookAuthor(ItemStack aStack) { + NBTTagCompound tNBT = getNBT(aStack); + return tNBT.getString("author"); + } + + public static void setProspectionData(ItemStack aStack, int aX, int aY, int aZ, int aDim, FluidStack aFluid, + String... aOres) { + NBTTagCompound tNBT = getNBT(aStack); + StringBuilder tData = new StringBuilder(aX + "," + aY + "," + aZ + "," + aDim + ","); + if (aFluid != null) tData.append(aFluid.amount) + .append(",") + .append(aFluid.getLocalizedName()) + .append(","); // TODO + // CHECK + // IF + // THAT + // /5000 + // is + // needed + // (Not + // needed) + for (String tString : aOres) { + tData.append(tString) + .append(","); + } + tNBT.setString("prospection", tData.toString()); + setNBT(aStack, tNBT); + } + + public static void setAdvancedProspectionData(byte aTier, ItemStack aStack, int aX, short aY, int aZ, int aDim, + ArrayList aOils, ArrayList aOres, int aRadius) { + + setBookTitle(aStack, "Raw Prospection Data"); + + NBTTagCompound tNBT = getNBT(aStack); + + tNBT.setByte("prospection_tier", aTier); + tNBT.setString("prospection_pos", "Dim: " + aDim + "\nX: " + aX + " Y: " + aY + " Z: " + aZ); + + // ores + Collections.sort(aOres); + tNBT.setString("prospection_ores", joinListToString(aOres)); + + // oils + ArrayList tOilsTransformed = new ArrayList<>(aOils.size()); + for (String aStr : aOils) { + String[] aStats = aStr.split(","); + tOilsTransformed.add(aStats[0] + ": " + aStats[1] + "L " + aStats[2]); + } + + tNBT.setString("prospection_oils", joinListToString(tOilsTransformed)); + + String tOilsPosStr = "X: " + Math.floorDiv(aX, 16 * 8) * 16 * 8 + + " Z: " + + Math.floorDiv(aZ, 16 * 8) * 16 * 8 + + "\n"; + int xOff = aX - Math.floorDiv(aX, 16 * 8) * 16 * 8; + xOff = xOff / 16; + int xOffRemain = 7 - xOff; + + int zOff = aZ - Math.floorDiv(aZ, 16 * 8) * 16 * 8; + zOff = zOff / 16; + int zOffRemain = 7 - zOff; + + for (; zOff > 0; zOff--) { + tOilsPosStr = tOilsPosStr.concat("--------\n"); + } + for (; xOff > 0; xOff--) { + tOilsPosStr = tOilsPosStr.concat("-"); + } + + tOilsPosStr = tOilsPosStr.concat("P"); + + for (; xOffRemain > 0; xOffRemain--) { + tOilsPosStr = tOilsPosStr.concat("-"); + } + tOilsPosStr = tOilsPosStr.concat("\n"); + for (; zOffRemain > 0; zOffRemain--) { + tOilsPosStr = tOilsPosStr.concat("--------\n"); + } + tOilsPosStr = tOilsPosStr.concat( + " X: " + (Math.floorDiv(aX, 16 * 8) + 1) * 16 * 8 + + " Z: " + + (Math.floorDiv(aZ, 16 * 8) + 1) * 16 * 8); // +1 oilfied to find bottomright of [5] + + tNBT.setString("prospection_oils_pos", tOilsPosStr); + + tNBT.setString("prospection_radius", String.valueOf(aRadius)); + + setNBT(aStack, tNBT); + } + + public static void convertProspectionData(ItemStack aStack) { + NBTTagCompound tNBT = getNBT(aStack); + byte tTier = tNBT.getByte("prospection_tier"); + + if (tTier == 0) { // basic prospection data + String tData = tNBT.getString("prospection"); + String[] tDataArray = tData.split(","); + if (tDataArray.length > 6) { + tNBT.setString( + "author", + " Dim: " + tDataArray[3] + + "X: " + + tDataArray[0] + + " Y: " + + tDataArray[1] + + " Z: " + + tDataArray[2]); + NBTTagList tNBTList = new NBTTagList(); + StringBuilder tOres = new StringBuilder(" Prospected Ores: "); + for (int i = 6; tDataArray.length > i; i++) { + tOres.append(tDataArray[i]) + .append(" "); + } + tNBTList.appendTag( + new NBTTagString( + "Tier " + tTier + + " Prospecting Data From: X" + + tDataArray[0] + + " Z:" + + tDataArray[2] + + " Dim:" + + tDataArray[3] + + " Produces " + + tDataArray[4] + + "L " + + tDataArray[5] + + " " + + tOres)); + tNBT.setTag("pages", tNBTList); + } + } else { // advanced prospection data + String tPos = tNBT.getString("prospection_pos"); + String tRadius = tNBT.getString("prospection_radius"); + + String tOresStr = tNBT.getString("prospection_ores"); + String tOilsStr = tNBT.getString("prospection_oils"); + String tOilsPosStr = tNBT.getString("prospection_oils_pos"); + + String[] tOres = tOresStr.isEmpty() ? null : tOresStr.split("\\|"); + String[] tOils = tOilsStr.isEmpty() ? null : tOilsStr.split("\\|"); + + NBTTagList tNBTList = new NBTTagList(); + + String tPageText = "Prospector report\n" + tPos + + "\n\n" + + "Oils: " + + (tOils != null ? tOils.length : 0) + + "\n\n" + + "Ores within " + + tRadius + + " blocks\n\n" + + "Location is center of orevein\n\n" + + "Check NEI to confirm orevein type"; + tNBTList.appendTag(new NBTTagString(tPageText)); + + if (tOres != null) fillBookWithList(tNBTList, "Ores Found %s\n\n", "\n", 7, tOres); + + if (tOils != null) fillBookWithList(tNBTList, "Oils%s\n\n", "\n", 9, tOils); + + tPageText = """ + Oil notes + + Prospects from NW to SE 576 chunks(9 8x8 oilfields) + around and gives min-max amount + + [1][2][3] + [4][5][6] + [7][8][9] + + [5] - Prospector in this 8x8 area"""; + tNBTList.appendTag(new NBTTagString(tPageText)); + + tPageText = "Corners of [5] are \n" + tOilsPosStr + "\n" + "P - Prospector in 8x8 field"; + tNBTList.appendTag(new NBTTagString(tPageText)); + + tNBT.setString("author", tPos.replace("\n", " ")); + tNBT.setTag("pages", tNBTList); + } + setNBT(aStack, tNBT); + } + + public static void fillBookWithList(NBTTagList aBook, String aPageHeader, String aListDelimiter, + int aItemsPerPage, String[] list) { + String aPageFormatter = " %d/%d"; + int tTotalPages = list.length / aItemsPerPage + (list.length % aItemsPerPage > 0 ? 1 : 0); + int tPage = 0; + StringBuilder tPageText; + do { + tPageText = new StringBuilder(); + for (int i = tPage * aItemsPerPage; i < (tPage + 1) * aItemsPerPage && i < list.length; i += 1) + tPageText.append((tPageText.length() == 0) ? "" : aListDelimiter) + .append(list[i]); + + if (tPageText.length() > 0) { + String tPageCounter = tTotalPages > 1 ? String.format(aPageFormatter, tPage + 1, tTotalPages) : ""; + NBTTagString tPageTag = new NBTTagString(String.format(aPageHeader, tPageCounter) + tPageText); + aBook.appendTag(tPageTag); + } + + ++tPage; + } while (tPageText.length() > 0); + } + + public static void addEnchantment(ItemStack aStack, Enchantment aEnchantment, int aLevel) { + NBTTagCompound tNBT = getNBT(aStack), tEnchantmentTag; + if (!tNBT.hasKey("ench", 9)) tNBT.setTag("ench", new NBTTagList()); + NBTTagList tList = tNBT.getTagList("ench", 10); + + boolean temp = true; + + for (int i = 0; i < tList.tagCount(); i++) { + tEnchantmentTag = tList.getCompoundTagAt(i); + if (tEnchantmentTag.getShort("id") == aEnchantment.effectId) { + tEnchantmentTag.setShort("id", (short) aEnchantment.effectId); + tEnchantmentTag.setShort("lvl", (byte) aLevel); + temp = false; + break; + } + } + + if (temp) { + tEnchantmentTag = new NBTTagCompound(); + tEnchantmentTag.setShort("id", (short) aEnchantment.effectId); + tEnchantmentTag.setShort("lvl", (byte) aLevel); + tList.appendTag(tEnchantmentTag); + } + aStack.setTagCompound(tNBT); + } + } + + public static String toSubscript(long no) { + char[] chars = Long.toString(no) + .toCharArray(); + for (int i = 0; i < chars.length; i++) { + chars[i] += 8272; + } + return new String(chars); + } + + public static boolean isPartOfMaterials(ItemStack aStack, Materials aMaterials) { + return GTOreDictUnificator.getAssociation(aStack) != null + && GTOreDictUnificator.getAssociation(aStack).mMaterial.mMaterial.equals(aMaterials); + } + + public static boolean isPartOfOrePrefix(ItemStack aStack, OrePrefixes aPrefix) { + return GTOreDictUnificator.getAssociation(aStack) != null + && GTOreDictUnificator.getAssociation(aStack).mPrefix.equals(aPrefix); + } + + public static final ImmutableSet ORE_BLOCK_CLASSES = ImmutableSet.of( + "bartworks.system.material.BWMetaGeneratedOres", + "bartworks.system.material.BWMetaGeneratedSmallOres", + "gtPlusPlus.core.block.base.BlockBaseOre"); + + public static boolean isOre(Block aBlock, int aMeta) { + return (aBlock instanceof BlockOresAbstract) || isOre(new ItemStack(aBlock, 1, aMeta)) + || ORE_BLOCK_CLASSES.contains( + aBlock.getClass() + .getName()); + } + + public static boolean isOre(ItemStack aStack) { + int tItem = GTUtility.stackToInt(aStack); + if (sOreTable.containsKey(tItem)) { + return sOreTable.get(tItem); + } + for (int id : OreDictionary.getOreIDs(aStack)) { + if (OreDictionary.getOreName(id) + .startsWith("ore")) { + sOreTable.put(tItem, true); + return true; + } + } + sOreTable.put(tItem, false); + return false; + } + + /** + * Do NOT mutate the returned {@code ItemStack}! We return {@code ItemStack} instead of {@code Block} so that + * we can include metadata. + */ + public static ItemStack getCobbleForOre(Block ore, short metaData) { + // We need to convert small ores to regular ores because small ores don't have associated ItemData. + // We take the modulus of the metadata by 16000 because that is the magic number to convert small ores to + // regular ores. + // See: GT_TileEntity_Ores.java + ItemData association = GTOreDictUnificator + .getAssociation(new ItemStack(Item.getItemFromBlock(ore), 1, metaData % 16000)); + if (association != null) { + Supplier supplier = sOreToCobble.get(association.mPrefix); + if (supplier != null) { + return supplier.get(); + } + } + return new ItemStack(Blocks.cobblestone); + } + + public static Optional reverseShapelessRecipe(ItemStack output, Object... aRecipe) { + if (output == null) { + return Optional.empty(); + } + + List inputs = new ArrayList<>(); + + for (Object o : aRecipe) { + if (o instanceof ItemStack) { + ItemStack toAdd = ((ItemStack) o).copy(); + inputs.add(toAdd); + } else if (o instanceof String) { + ItemStack stack = GTOreDictUnificator.get(o, 1); + if (stack == null) { + Optional oStack = OreDictionary.getOres((String) o) + .stream() + .findAny(); + if (oStack.isPresent()) { + ItemStack copy = oStack.get() + .copy(); + inputs.add(copy); + } + } else { + ItemStack copy = stack.copy(); + inputs.add(copy); + } + } else if (o instanceof Item) inputs.add(new ItemStack((Item) o)); + else if (o instanceof Block) inputs.add(new ItemStack((Block) o)); + else throw new IllegalStateException("A Recipe contains an invalid input! Output: " + output); + } + + inputs.removeIf(x -> x.getItem() instanceof MetaGeneratedTool); + + return Optional.of( + new GTRecipe( + false, + new ItemStack[] { output }, + inputs.toArray(new ItemStack[0]), + null, + null, + null, + null, + 300, + 30, + 0)); + } + + public static Optional reverseShapedRecipe(ItemStack output, Object... aRecipe) { + if (output == null) { + return Optional.empty(); + } + + Map recipeAsMap = new HashMap<>(); + Map ingridients = new HashMap<>(); + Map amounts = new HashMap<>(); + boolean startFound = false; + for (int i = 0, aRecipeLength = aRecipe.length; i < aRecipeLength; i++) { + Object o = aRecipe[i]; + if (!startFound) { + if (o instanceof String) { + for (Character c : ((String) o).toCharArray()) amounts.merge(c, 1, (a, b) -> ++a); + } else if (o instanceof Character) startFound = true; + } else if (!(o instanceof Character)) ingridients.put((Character) aRecipe[i - 1], o); + } + for (Map.Entry characterObjectEntry : ingridients.entrySet()) { + for (Map.Entry characterIntegerEntry : amounts.entrySet()) { + if (characterObjectEntry.getKey() != characterIntegerEntry.getKey()) continue; + recipeAsMap.put(characterObjectEntry.getValue(), characterIntegerEntry.getValue()); + } + } + List inputs = new ArrayList<>(); + + for (Map.Entry o : recipeAsMap.entrySet()) { + final int amount = o.getValue(); + if (o.getKey() instanceof ItemStack) { + ItemStack toAdd = ((ItemStack) o.getKey()).copy(); + toAdd.stackSize = amount; + inputs.add(toAdd); + } else if (o.getKey() instanceof String dictName) { + // Do not register tools dictName in inputs + if (ToolDictNames.contains(dictName)) continue; + ItemStack stack = GTOreDictUnificator.get(dictName, null, amount, false, true); + if (stack == null) { + Optional oStack = OreDictionary.getOres(dictName) + .stream() + .findAny(); + if (oStack.isPresent()) { + ItemStack copy = oStack.get() + .copy(); + copy.stackSize = amount; + inputs.add(copy); + } + } else { + ItemStack copy = stack.copy(); + copy.stackSize = amount; + inputs.add(copy); + } + } else if (o.getKey() instanceof Item) inputs.add(new ItemStack((Item) o.getKey(), amount)); + else if (o.getKey() instanceof Block) inputs.add(new ItemStack((Block) o.getKey(), amount)); + else throw new IllegalStateException("A Recipe contains an invalid input! Output: " + output); + } + + // Remove tools from inputs in case a recipe has one as a direct Item or ItemStack reference + inputs.removeIf(x -> x.getItem() instanceof MetaGeneratedTool); + + return Optional.of( + new GTRecipe( + false, + new ItemStack[] { output }, + inputs.toArray(new ItemStack[0]), + null, + null, + null, + null, + 300, + 30, + 0)); + } + + /** + * Add an itemstack to player inventory, or drop on ground if full. Can be called on client but it probably won't + * work very well. + */ + public static void addItemToPlayerInventory(EntityPlayer aPlayer, ItemStack aStack) { + if (isStackInvalid(aStack)) return; + if (!aPlayer.inventory.addItemStackToInventory(aStack) && !aPlayer.worldObj.isRemote) { + EntityItem dropItem = aPlayer.entityDropItem(aStack, 0); + dropItem.delayBeforeCanPickup = 0; + } + } + + public static long getNonnullElementCount(Object[] tArray) { + return Arrays.stream(tArray) + .filter(Objects::nonNull) + .count(); + } + + public static int clamp(int val, int lo, int hi) { + return MathHelper.clamp_int(val, lo, hi); + } + + public static int ceilDiv(int lhs, int rhs) { + return (lhs + rhs - 1) / rhs; + } + + public static long ceilDiv(long lhs, long rhs) { + return (lhs + rhs - 1) / rhs; + } + + /** + * Hash an item stack for the purpose of storing hash across launches + */ + public static int persistentHash(ItemStack aStack, boolean aUseStackSize, boolean aUseNBT) { + if (aStack == null) return 0; + int result = Objects.hashCode(GameRegistry.findUniqueIdentifierFor(aStack.getItem())); + result = result * 31 + Items.feather.getDamage(aStack); + + if (aUseStackSize) result = result * 31 + aStack.stackSize; + if (aUseNBT) result = result * 31 + Objects.hashCode(aStack.stackTagCompound); + return result; + } + + /** + * Hash an item stack for the purpose of storing hash across launches + */ + public static int persistentHash(FluidStack aStack, boolean aUseStackSize, boolean aUseNBT) { + if (aStack == null) return 0; + int base = Objects.hashCode( + aStack.getFluid() + .getName()); + + if (aUseStackSize) base = base * 31 + aStack.amount; + if (aUseNBT) base = base * 31 + Objects.hashCode(aStack.tag); + return base; + } + + public static int getCasingTextureIndex(Block block, int meta) { + if (block instanceof IHasIndexedTexture) return ((IHasIndexedTexture) block).getTextureIndex(meta); + return Textures.BlockIcons.ERROR_TEXTURE_INDEX; + } + + public static boolean isCellEmpty(ItemStack itemStack) { + if (itemStack == null) return false; + ItemStack tStack = ItemList.Cell_Empty.get(1); + tStack.stackSize = itemStack.stackSize; + return GTUtility.areStacksEqual(itemStack, tStack); + } + + /** + * Convert a cell to fluid. If given itemstack does not contain any fluid, return null. Will correctly multiple + * output fluid amount if input stack size is greater than 1. + */ + public static FluidStack convertCellToFluid(ItemStack itemStack) { + if (itemStack == null) return null; + if (getFluidForFilledItem(itemStack, true) != null) { + FluidStack fluidStack = getFluidForFilledItem(itemStack, true); + if (fluidStack != null) fluidStack.amount = fluidStack.amount * itemStack.stackSize; + return fluidStack; + } + return null; + } + + public static boolean isAnyIntegratedCircuit(ItemStack itemStack) { + if (itemStack == null) return false; + return itemStack.getItem() == ItemList.Circuit_Integrated.getItem() && 0 <= itemStack.getItemDamage() + && itemStack.getItemDamage() < 25; + } + + public static byte convertRatioToRedstone(long used, long max, int threshold, boolean inverted) { + byte signal; + if (used <= 0) { // Empty + signal = 0; + } else if (used >= max) { // Full + signal = 15; + } else { // Range 1-14 + signal = (byte) (1 + (14 * used) / max); + } + + if (inverted) { + signal = (byte) (15 - signal); + } + + if (threshold > 0) { + if (inverted && used >= threshold) { + return 0; + } else if (!inverted && used < threshold) { + return 0; + } + } + + return signal; + } + + public static ItemStack getNaniteAsCatalyst(Materials material) { + ItemStack aItem = material.getNanite(1); + return new ItemStack(aItem.getItem(), 0, aItem.getItemDamage()); + } + + public static Stream streamCompounds(NBTTagList list) { + if (list == null) return Stream.empty(); + return IntStream.range(0, list.tagCount()) + .mapToObj(list::getCompoundTagAt); + } + + public static boolean equals(ItemStack[] a, ItemStack[] b) { + // because stupid mojang didn't override equals for us + if (a == null && b == null) return true; + if ((a == null) != (b == null)) return false; + if (a.length != b.length) return false; + for (int i = 0; i < a.length; i++) { + if (!areStacksEqual(a[i], b[i], false)) return false; + } + return true; + } + + /** + * Guava ImmutableMap variant of Collectors.toMap. Optimized for serial streams. + */ + public static Collector> toImmutableMapSerial( + Function keyMapper, Function valueMapper) { + // petty type inference cannot work out the correct type parameter + return Collector., ImmutableMap>of( + ImmutableMap::builder, + (b, t) -> b.put(keyMapper.apply(t), valueMapper.apply(t)), + (b1, b2) -> b1.putAll(b2.build()), + ImmutableMap.Builder::build); + } + + public static boolean isArrayEmptyOrNull(Object[] arr) { + return arr == null || arr.length == 0; + } + + public static boolean isArrayOfLength(Object[] arr, int expectedLength) { + return arr != null && arr.length == expectedLength; + } + + @SafeVarargs + public static Collection concat(Collection... colls) { + return concat(Arrays.asList(colls)); + } + + public static Collection concat(Collection> colls) { + return new ConcatCollection<>(colls); + } + + private static class ConcatCollection extends AbstractCollection { + + private final Collection> colls; + private final int size; + + public ConcatCollection(Collection> lists) { + Collection> colls1 = null; + for (Collection list : lists) { + if (list == null || list.isEmpty()) { + colls1 = lists.stream() + .filter(c -> c != null && !c.isEmpty()) + .collect(Collectors.toList()); + break; + } + } + if (colls1 == null) colls1 = lists; + colls = colls1; + int sum = 0; + for (Collection list : colls) { + sum += list.size(); + } + size = sum; + } + + @Nonnull + @Override + public Iterator iterator() { + return colls.stream() + .flatMap(Collection::stream) + .iterator(); + } + + @Override + public int size() { + return size; + } + } + + @AutoValue + public abstract static class ItemId { + + public static ItemId create(NBTTagCompound tag) { + return new AutoValue_GTUtility_ItemId( + Item.getItemById(tag.getShort("item")), + tag.getShort("meta"), + tag.hasKey("tag", Constants.NBT.TAG_COMPOUND) ? tag.getCompoundTag("tag") : null); + } + + /** + * This method copies NBT, as it is mutable. + */ + public static ItemId create(ItemStack itemStack) { + NBTTagCompound nbt = itemStack.getTagCompound(); + if (nbt != null) { + nbt = (NBTTagCompound) nbt.copy(); + } + + return new AutoValue_GTUtility_ItemId(itemStack.getItem(), Items.feather.getDamage(itemStack), nbt); + } + + /** + * This method copies NBT, as it is mutable. + */ + public static ItemId create(Item item, int metaData, @Nullable NBTTagCompound nbt) { + if (nbt != null) { + nbt = (NBTTagCompound) nbt.copy(); + } + return new AutoValue_GTUtility_ItemId(item, metaData, nbt); + } + + /** + * This method stores metadata as wildcard and NBT as null. + */ + public static ItemId createAsWildcard(ItemStack itemStack) { + return new AutoValue_GTUtility_ItemId(itemStack.getItem(), W, null); + } + + /** + * This method stores NBT as null. + */ + public static ItemId createWithoutNBT(ItemStack itemStack) { + return new AutoValue_GTUtility_ItemId(itemStack.getItem(), Items.feather.getDamage(itemStack), null); + } + + /** + * This method does not copy NBT in order to save time. Make sure not to mutate it! + */ + public static ItemId createNoCopy(ItemStack itemStack) { + return new AutoValue_GTUtility_ItemId( + itemStack.getItem(), + Items.feather.getDamage(itemStack), + itemStack.getTagCompound()); + } + + /** + * This method does not copy NBT in order to save time. Make sure not to mutate it! + */ + public static ItemId createNoCopy(Item item, int metaData, @Nullable NBTTagCompound nbt) { + return new AutoValue_GTUtility_ItemId(item, metaData, nbt); + } + + protected abstract Item item(); + + protected abstract int metaData(); + + @Nullable + protected abstract NBTTagCompound nbt(); + + public NBTTagCompound writeToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setShort("item", (short) Item.getIdFromItem(item())); + tag.setShort("meta", (short) metaData()); + if (nbt() != null) tag.setTag("tag", nbt()); + return tag; + } + + @Nonnull + public ItemStack getItemStack() { + ItemStack itemStack = new ItemStack(item(), 1, metaData()); + itemStack.setTagCompound(nbt()); + return itemStack; + } + } + + public static int getPlasmaFuelValueInEUPerLiterFromMaterial(Materials material) { + return getPlasmaFuelValueInEUPerLiterFromFluid(material.getPlasma(1)); + } + + public static int getPlasmaFuelValueInEUPerLiterFromFluid(FluidStack aLiquid) { + if (aLiquid == null) return 0; + GTRecipe tFuel = RecipeMaps.plasmaFuels.getBackend() + .findFuel(aLiquid); + if (tFuel != null) return tFuel.mSpecialValue; + return 0; + } + + public static MovingObjectPosition getPlayerLookingTarget(EntityPlayer viewpoint) { + double reachDistance = viewpoint instanceof EntityPlayerMP mp ? mp.theItemInWorldManager.getBlockReachDistance() + : getClientReachDistance(); + Vec3 posVec = Vec3.createVectorHelper( + viewpoint.posX, + viewpoint.posY + (viewpoint.getEyeHeight() - viewpoint.getDefaultEyeHeight()), + viewpoint.posZ); + Vec3 lookVec = viewpoint.getLook(0); + Vec3 modifiedPosVec = posVec + .addVector(lookVec.xCoord * reachDistance, lookVec.yCoord * reachDistance, lookVec.zCoord * reachDistance); + + return viewpoint.worldObj.rayTraceBlocks(posVec, modifiedPosVec); + } + + public static float getClientReachDistance() { + return Minecraft.getMinecraft().playerController.getBlockReachDistance(); + } +} diff --git a/src/main/java/gregtech/api/util/GTUtilityClient.java b/src/main/java/gregtech/api/util/GTUtilityClient.java new file mode 100644 index 0000000000..a6039e10d3 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTUtilityClient.java @@ -0,0 +1,52 @@ +package gregtech.api.util; + +import java.lang.reflect.Field; +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import com.google.common.collect.Lists; + +import cpw.mods.fml.relauncher.ReflectionHelper; + +public class GTUtilityClient { + + private static final Field isDrawingField = ReflectionHelper + .findField(Tessellator.class, "isDrawing", "field_78415_z"); + + public static boolean isDrawing(Tessellator tess) { + try { + return isDrawingField.getBoolean(tess); + } catch (IllegalAccessException e) { + e.printStackTrace(); + return false; + } + } + + public static List getTooltip(ItemStack aStack, boolean aGuiStyle) { + try { + List tooltip = aStack.getTooltip( + Minecraft.getMinecraft().thePlayer, + Minecraft.getMinecraft().gameSettings.advancedItemTooltips); + if (aGuiStyle) { + tooltip.set( + 0, + (aStack.getRarity() == null ? EnumRarity.common : aStack.getRarity()).rarityColor + tooltip.get(0)); + for (int i = 1; i < tooltip.size(); i++) { + tooltip.set(i, EnumChatFormatting.GRAY + tooltip.get(i)); + } + } + return tooltip; + } catch (RuntimeException e) { + // Collections.singletonList() can not be added to. we don't want that + if (aGuiStyle) return Lists.newArrayList( + (aStack.getRarity() == null ? EnumRarity.common : aStack.getRarity()).rarityColor + + aStack.getDisplayName()); + return Lists.newArrayList(aStack.getDisplayName()); + } + } +} diff --git a/src/main/java/gregtech/api/util/GTWaila.java b/src/main/java/gregtech/api/util/GTWaila.java new file mode 100644 index 0000000000..a52dd2e459 --- /dev/null +++ b/src/main/java/gregtech/api/util/GTWaila.java @@ -0,0 +1,23 @@ +package gregtech.api.util; + +public abstract class GTWaila { + + public static String getMachineProgressString(boolean isActive, int maxProgresstime, int progresstime) { + return getMachineProgressString(isActive, (long) maxProgresstime, (long) progresstime); + } + + public static String getMachineProgressString(boolean isActive, long maxProgresstime, long progresstime) { + + if (!isActive) return "Idle"; + + StringBuilder ret = new StringBuilder("In progress: ") + .append(String.format("%,.2f", (double) progresstime / 20)) + .append("s / ") + .append(String.format("%,.2f", (double) maxProgresstime / 20)) + .append("s (") + .append(GTUtility.formatNumbers((Math.round((double) progresstime / maxProgresstime * 1000) / 10.0))) + .append("%)"); + + return ret.toString(); + } +} diff --git a/src/main/java/gregtech/api/util/GT_ApiaryModifier.java b/src/main/java/gregtech/api/util/GT_ApiaryModifier.java deleted file mode 100644 index 4a89345670..0000000000 --- a/src/main/java/gregtech/api/util/GT_ApiaryModifier.java +++ /dev/null @@ -1,24 +0,0 @@ -package gregtech.api.util; - -import net.minecraft.world.biome.BiomeGenBase; - -public class GT_ApiaryModifier { - - public float territory = 1f; - public float mutation = 1f; - public float lifespan = 1f; - public float production = 2f; - public float flowering = 1f; - public float geneticDecay = 1f; - public boolean isSealed = false; - public boolean isSelfLighted = false; - public boolean isSelfUnlighted = false; - public boolean isSunlightSimulated = false; - public boolean isAutomated = false; - public boolean isCollectingPollen = false; - public BiomeGenBase biomeOverride = null; - public float energy = 1f; - public float temperature = 0f; - public float humidity = 0f; - public int maxSpeed = 0; -} diff --git a/src/main/java/gregtech/api/util/GT_ApiaryUpgrade.java b/src/main/java/gregtech/api/util/GT_ApiaryUpgrade.java deleted file mode 100644 index 9ed7a56e1e..0000000000 --- a/src/main/java/gregtech/api/util/GT_ApiaryUpgrade.java +++ /dev/null @@ -1,225 +0,0 @@ -package gregtech.api.util; - -import java.util.ArrayList; -import java.util.EnumMap; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.HashSet; -import java.util.function.BiConsumer; -import java.util.function.Consumer; - -import net.minecraft.item.ItemStack; -import net.minecraft.world.biome.BiomeGenBase; - -import gregtech.api.enums.OrePrefixes; -import gregtech.common.items.GT_MetaGenerated_Item_03; - -/** - * Actual items are defined in {@link GT_MetaGenerated_Item_03} - */ -public enum GT_ApiaryUpgrade { - - speed1(UNIQUE_INDEX.SPEED_UPGRADE, 32200, 1, (mods, n) -> mods.maxSpeed = 1), - speed2(UNIQUE_INDEX.SPEED_UPGRADE, 32201, 1, (mods, n) -> mods.maxSpeed = 2), - speed3(UNIQUE_INDEX.SPEED_UPGRADE, 32202, 1, (mods, n) -> mods.maxSpeed = 3), - speed4(UNIQUE_INDEX.SPEED_UPGRADE, 32203, 1, (mods, n) -> mods.maxSpeed = 4), - speed5(UNIQUE_INDEX.SPEED_UPGRADE, 32204, 1, (mods, n) -> mods.maxSpeed = 5), - speed6(UNIQUE_INDEX.SPEED_UPGRADE, 32205, 1, (mods, n) -> mods.maxSpeed = 6), - speed7(UNIQUE_INDEX.SPEED_UPGRADE, 32206, 1, (mods, n) -> mods.maxSpeed = 7), - speed8(UNIQUE_INDEX.SPEED_UPGRADE, 32207, 1, (mods, n) -> mods.maxSpeed = 8), - speed8upgraded(UNIQUE_INDEX.SPEED_UPGRADE, 32208, 1, (mods, n) -> { - mods.maxSpeed = 8; - mods.production = 17.19926784f; - mods.energy *= 14.75; - }), - production(UNIQUE_INDEX.PRODUCTION_UPGRADE, 32209, 8, (mods, n) -> { - mods.production = 4.f * (float) Math.pow(1.2d, n); - mods.energy *= Math.pow(1.4f, n); - }), - plains(UNIQUE_INDEX.PLAINS_UPGRADE, 32210, 1, (mods, n) -> { - mods.biomeOverride = BiomeGenBase.plains; - mods.energy *= 1.2f; - }), - light(UNIQUE_INDEX.LIGHT_UPGRADE, 32211, 1, (mods, n) -> { - mods.isSelfLighted = true; - mods.energy *= 1.05f; - }), - flowering(UNIQUE_INDEX.FLOWERING_UPGRADE, 32212, 8, (mods, n) -> { - mods.flowering *= Math.pow(1.2f, n); - mods.energy *= Math.pow(1.1f, n); - }), - winter(UNIQUE_INDEX.WINTER_UPGRADE, 32213, 1, (mods, n) -> { - mods.biomeOverride = BiomeGenBase.taiga; - mods.energy *= 1.5f; - }), - dryer(UNIQUE_INDEX.DRYER_UPGRADE, 32214, 16, (mods, n) -> { - mods.humidity -= 0.125f * n; - mods.energy *= Math.pow(1.025f, n); - }), - automation(UNIQUE_INDEX.AUTOMATION_UPGRADE, 32215, 1, (mods, n) -> { - mods.isAutomated = true; - mods.energy *= 1.1f; - }), - humidifier(UNIQUE_INDEX.HUMIDIFIER_UPGRADE, 32216, 16, (mods, n) -> { - mods.humidity += 0.125f * n; - mods.energy *= Math.pow(1.05f, n); - }), - hell(UNIQUE_INDEX.HELL_UPGRADE, 32217, 1, (mods, n) -> { - mods.biomeOverride = BiomeGenBase.hell; - mods.energy *= 1.5f; - }), - pollen(UNIQUE_INDEX.POLLEN_UPGRADE, 32218, 1, (mods, n) -> { - mods.flowering = 0f; - mods.energy *= 1.3f; - }), - desert(UNIQUE_INDEX.DESERT_UPGRADE, 32219, 1, (mods, n) -> { - mods.biomeOverride = BiomeGenBase.desert; - mods.energy *= 1.2f; - }), - cooler(UNIQUE_INDEX.COOLER_UPGRADE, 32220, 16, (mods, n) -> { - mods.temperature -= 0.125f * n; - mods.energy *= Math.pow(1.025f, n); - }), - lifespan(UNIQUE_INDEX.LIFESPAN_UPGRADE, 32221, 4, (mods, n) -> { - mods.lifespan /= Math.pow(1.5f, n); - mods.energy *= Math.pow(1.05f, n); - }), - seal(UNIQUE_INDEX.SEAL_UPGRADE, 32222, 1, (mods, n) -> { - mods.isSealed = true; - mods.energy *= 1.05f; - }), - stabilizer(UNIQUE_INDEX.STABILIZER_UPGRADE, 32223, 1, (mods, n) -> { - mods.geneticDecay = 0f; - mods.energy *= 2.50f; - }), - jungle(UNIQUE_INDEX.JUNGLE_UPGRADE, 32224, 1, (mods, n) -> { - mods.biomeOverride = BiomeGenBase.jungle; - mods.energy *= 1.20f; - }), - territory(UNIQUE_INDEX.TERRITORY_UPGRADE, 32225, 4, (mods, n) -> { - mods.territory *= Math.pow(1.5f, n); - mods.energy *= Math.pow(1.05f, n); - }), - ocean(UNIQUE_INDEX.OCEAN_UPGRADE, 32226, 1, (mods, n) -> { - mods.biomeOverride = BiomeGenBase.ocean; - mods.energy *= 1.20f; - }), - sky(UNIQUE_INDEX.SKY_UPGRADE, 32227, 1, (mods, n) -> { - mods.isSunlightSimulated = true; - mods.energy *= 1.05f; - }), - heater(UNIQUE_INDEX.HEATER_UPGRADE, 32228, 16, (mods, n) -> { - mods.temperature += 0.125f * n; - mods.energy *= Math.pow(1.025f, n); - }), - sieve(UNIQUE_INDEX.SIEVE_UPGRADE, 32229, 1, (mods, n) -> { - mods.isCollectingPollen = true; - mods.energy *= 1.05f; - }), - unlight(UNIQUE_INDEX.LIGHT_UPGRADE, 32231, 1, (mods, n) -> { - mods.isSelfUnlighted = true; - mods.energy *= 1.05f; - }),; - - private enum UNIQUE_INDEX { - - SPEED_UPGRADE, - PRODUCTION_UPGRADE, - PLAINS_UPGRADE, - LIGHT_UPGRADE, // also unlight - FLOWERING_UPGRADE, - WINTER_UPGRADE, - DRYER_UPGRADE, - AUTOMATION_UPGRADE, - HUMIDIFIER_UPGRADE, - HELL_UPGRADE, - POLLEN_UPGRADE, - DESERT_UPGRADE, - COOLER_UPGRADE, - LIFESPAN_UPGRADE, - SEAL_UPGRADE, - STABILIZER_UPGRADE, - JUNGLE_UPGRADE, - TERRITORY_UPGRADE, - OCEAN_UPGRADE, - SKY_UPGRADE, - HEATER_UPGRADE, - SIEVE_UPGRADE,; - - void apply(Consumer fn) { - UNIQUE_UPGRADE_LIST.get(this) - .forEach(fn); - } - } - - private static final EnumMap> UNIQUE_UPGRADE_LIST = new EnumMap<>( - UNIQUE_INDEX.class); - - private int meta = 0; - private int maxnumber = 1; - - private final GT_Utility.ItemId id; - private final UNIQUE_INDEX unique_index; - private final BiConsumer applier; - - private final HashSet blacklistedUpgrades = new HashSet<>(); - - GT_ApiaryUpgrade(UNIQUE_INDEX unique_index, int meta, int maxnumber, - BiConsumer applier) { - this.unique_index = unique_index; - this.meta = meta; - this.maxnumber = maxnumber; - this.applier = applier; - this.id = GT_Utility.ItemId.createNoCopy(get(1)); - } - - private void setup_static_variables() { - quickLookup.put(this.meta, this); - ArrayList un = UNIQUE_UPGRADE_LIST.get(this.unique_index); - if (un != null) un.forEach((u) -> { - u.blacklistedUpgrades.add(this.id); - this.blacklistedUpgrades.add(u.id); - }); - else { - un = new ArrayList<>(1); - UNIQUE_UPGRADE_LIST.put(this.unique_index, un); - } - un.add(this); - } - - public static GT_ApiaryUpgrade getUpgrade(ItemStack s) { - if (s == null) return null; - if (!isUpgrade(s)) return null; - return quickLookup.get(s.getItemDamage()); - } - - public boolean isAllowedToWorkWith(ItemStack s) { - GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(s); - return !blacklistedUpgrades.contains(id); - } - - public int getMaxNumber() { - return maxnumber; - } - - public void applyModifiers(GT_ApiaryModifier mods, ItemStack stack) { - if (applier != null) applier.accept(mods, stack.stackSize); - } - - public ItemStack get(int count) { - return new ItemStack(GT_MetaGenerated_Item_03.INSTANCE, count, meta); - } - - public static boolean isUpgrade(ItemStack s) { - return OrePrefixes.apiaryUpgrade.contains(s); - } - - private static final HashMap quickLookup = new HashMap<>(); - - static { - EnumSet.allOf(GT_ApiaryUpgrade.class) - .forEach(GT_ApiaryUpgrade::setup_static_variables); - speed8upgraded.blacklistedUpgrades.add(production.id); - production.blacklistedUpgrades.add(speed8upgraded.id); - } -} diff --git a/src/main/java/gregtech/api/util/GT_AssemblyLineUtils.java b/src/main/java/gregtech/api/util/GT_AssemblyLineUtils.java deleted file mode 100644 index dbe0ff2c40..0000000000 --- a/src/main/java/gregtech/api/util/GT_AssemblyLineUtils.java +++ /dev/null @@ -1,559 +0,0 @@ -package gregtech.api.util; - -import static gregtech.GT_Mod.GT_FML_LOGGER; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; - -import javax.annotation.Nonnull; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.nbt.NBTTagString; -import net.minecraftforge.common.util.Constants.NBT; -import net.minecraftforge.fluids.FluidStack; - -import cpw.mods.fml.common.FMLCommonHandler; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_Recipe.GT_Recipe_AssemblyLine; - -public class GT_AssemblyLineUtils { - - /** - * A cache of Recipes using the Output as Key. - */ - private static final HashMap sRecipeCacheByOutput = new HashMap<>(); - /** - * A cache of Recipes using the Recipe Hash String as Key. - */ - private static final HashMap sRecipeCacheByRecipeHash = new HashMap<>(); - - /** - * Checks the DataStick for deprecated/invalid recipes, updating them as required. - * - * @param aDataStick - The DataStick to process - * @return Is this DataStick now valid with a current recipe? - */ - public static GT_Recipe_AssemblyLine processDataStick(ItemStack aDataStick) { - if (!isItemDataStick(aDataStick)) { - return null; - } - if (doesDataStickNeedUpdate(aDataStick)) { - ItemStack aStickOutput = getDataStickOutput(aDataStick); - if (aStickOutput != null) { - GT_Recipe_AssemblyLine aIntendedRecipe = findAssemblyLineRecipeByOutput(aStickOutput); - if (aIntendedRecipe != null && setAssemblyLineRecipeOnDataStick(aDataStick, aIntendedRecipe)) - return aIntendedRecipe; - } - } - return null; - } - - /** - * Finds an Assembly Line recipe from a DataStick. - * - * @param aDataStick - The DataStick to check. - * @return The GT_Recipe_AssemblyLine recipe contained on the DataStick, if any. - */ - public static GT_Recipe_AssemblyLine findAssemblyLineRecipeFromDataStick(ItemStack aDataStick) { - return findAssemblyLineRecipeFromDataStick(aDataStick, false).getRecipe(); - } - - /** - * Finds an Assembly Line recipe from a DataStick. - * - * @param aDataStick - The DataStick to check. - * @param aReturnBuiltRecipe - Do we return a GT_Recipe_AssemblyLine built from the data on the Data Stick instead - * of searching the Recipe Map? - * @return The GT_Recipe_AssemblyLine recipe contained on the DataStick, if any. - */ - @Nonnull - public static LookupResult findAssemblyLineRecipeFromDataStick(ItemStack aDataStick, boolean aReturnBuiltRecipe) { - if (!isItemDataStick(aDataStick) || !doesDataStickHaveOutput(aDataStick)) { - return LookupResultType.INVALID_STICK.getResult(); - } - List aInputs = new ArrayList<>(16); - ItemStack aOutput = getDataStickOutput(aDataStick); - List> mOreDictAlt = new ArrayList<>(16); - List aFluidInputs = new ArrayList<>(4); - - NBTTagCompound aTag = aDataStick.getTagCompound(); - if (aTag == null) { - return LookupResultType.INVALID_STICK.getResult(); - } - - // Get From Cache - if (doesDataStickHaveRecipeHash(aDataStick)) { - GT_Recipe_AssemblyLine aRecipeFromCache = sRecipeCacheByRecipeHash.get(getHashFromDataStack(aDataStick)); - if (aRecipeFromCache != null && GT_Utility.areStacksEqual(aOutput, aRecipeFromCache.mOutput)) { - return LookupResultType.VALID_STACK_AND_VALID_HASH.getResult(aRecipeFromCache); - } // else: no cache, or the old recipe run into a hash collision with a different new recipe - } - - for (int i = 0; i < 16; i++) { - int count = aTag.getInteger("a" + i); - if (!aTag.hasKey("" + i) && count <= 0) { - continue; - } - - List tAltCurrent = new ArrayList<>(); - for (int j = 0; j < count; j++) { - ItemStack tLoaded = GT_Utility.loadItem(aTag, "a" + i + ":" + j); - if (tLoaded == null) { - continue; - } - tAltCurrent.add(tLoaded); - if (GT_Values.D1) { - GT_FML_LOGGER.info("Item Alt " + i + " : " + tLoaded.getUnlocalizedName()); - } - } - mOreDictAlt.add(tAltCurrent); - ItemStack tLoaded = GT_Utility.loadItem(aTag, "" + i); - if (tLoaded == null) { - continue; - } - aInputs.add(tLoaded); - if (GT_Values.D1) { - GT_FML_LOGGER.info("Item " + i + " : " + tLoaded.getUnlocalizedName()); - } - } - - if (GT_Values.D1) { - GT_FML_LOGGER.info("All Items done, start fluid check"); - } - for (int i = 0; i < 4; i++) { - if (!aTag.hasKey("f" + i)) continue; - FluidStack tLoaded = GT_Utility.loadFluid(aTag, "f" + i); - if (tLoaded == null) continue; - aFluidInputs.add(tLoaded); - if (GT_Values.D1) { - GT_FML_LOGGER.info("Fluid " + i + " " + tLoaded.getUnlocalizedName()); - } - } - if (!aTag.hasKey("output") || !aTag.hasKey("time") - || aTag.getInteger("time") <= 0 - || !aTag.hasKey("eu") - || !GT_Utility.isStackValid(aOutput)) { - return LookupResultType.INVALID_STICK.getResult(); - } - if (GT_Values.D1) { - GT_FML_LOGGER.info("Found Data Stick recipe"); - } - - int aTime = aTag.getInteger("time"); - int aEU = aTag.getInteger("eu"); - - // Try build a recipe instance - if (aReturnBuiltRecipe) { - return LookupResultType.VALID_STACK_AND_VALID_HASH.getResult( - new GT_Recipe_AssemblyLine( - null, - 0, - aInputs.toArray(new ItemStack[0]), - aFluidInputs.toArray(new FluidStack[0]), - aOutput, - aTime, - aEU)); - } - - for (GT_Recipe_AssemblyLine aRecipe : GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes) { - if (aRecipe.mEUt != aEU || aRecipe.mDuration != aTime) continue; - if (!GT_Utility.areStacksEqual(aOutput, aRecipe.mOutput, true)) continue; - if (!GT_Utility.areStackListsEqual(Arrays.asList(aRecipe.mInputs), aInputs, false, true)) continue; - if (!Objects.equals(Arrays.asList(aRecipe.mFluidInputs), aFluidInputs)) continue; - if (!areStacksEqual(aRecipe.mOreDictAlt, mOreDictAlt)) continue; - - // Cache it - String aRecipeHash = generateRecipeHash(aRecipe); - sRecipeCacheByRecipeHash.put(aRecipeHash, aRecipe); - sRecipeCacheByOutput.put(new GT_ItemStack(aRecipe.mOutput), aRecipe); - if (doesDataStickHaveRecipeHash(aDataStick)) { - String aStickHash = getHashFromDataStack(aDataStick); - if (aRecipeHash.equals(aStickHash)) - return LookupResultType.VALID_STACK_AND_VALID_HASH.getResult(aRecipe); - } - return LookupResultType.VALID_STACK_AND_VALID_RECIPE.getResult(aRecipe); - } - return LookupResultType.VALID_STACK_BUT_INVALID_RECIPE.getResult(); - } - - private static boolean areStacksEqual(ItemStack[][] lhs, List> rhs) { - for (int i = 0; i < lhs.length; i++) { - if (!areStacksEqual(lhs[i], rhs.get(i))) return false; - } - return true; - } - - private static boolean areStacksEqual(ItemStack[] lhs, List rhs) { - return lhs == null ? rhs.isEmpty() - : !rhs.isEmpty() && GT_Utility.areStackListsEqual(Arrays.asList(lhs), rhs, false, true); - } - - /** - * Finds a GT_Recipe_AssemblyLine based on the expected output ItemStack. - * - * @param aOutput - The Output of a GT_Recipe_AssemblyLine. - * @return First found GT_Recipe_AssemblyLine with matching output. - */ - public static GT_Recipe_AssemblyLine findAssemblyLineRecipeByOutput(ItemStack aOutput) { - if (aOutput == null) { - return null; - } - - // Check the cache - GT_ItemStack aCacheStack = new GT_ItemStack(aOutput); - GT_Recipe_AssemblyLine aRecipeFromCache = sRecipeCacheByOutput.get(aCacheStack); - if (aRecipeFromCache != null) { - return aRecipeFromCache; - } - - // Iterate all recipes and return the first matching based on Output. - for (GT_Recipe_AssemblyLine aRecipe : GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes) { - ItemStack aRecipeOutput = aRecipe.mOutput; - if (GT_Utility.areStacksEqual(aRecipeOutput, aOutput)) { - // Cache it to prevent future iterations of all recipes - sRecipeCacheByOutput.put(aCacheStack, aRecipe); - sRecipeCacheByRecipeHash.put(generateRecipeHash(aRecipe), aRecipe); - return aRecipe; - } - } - return null; - } - - /** - * @param aRecipe - The recipe to generate a Recipe Hash String from. - * @return The Recipe Hash String. - */ - public static String generateRecipeHash(GT_Recipe_AssemblyLine aRecipe) { - String aHash = "Invalid.Recipe.Hash"; - if (aRecipe != null) { - aHash = "Hash." + aRecipe.getPersistentHash(); - } - return aHash; - } - - /** - * @param aRecipe - The recipe to add to internal caches - * @throws IllegalArgumentException if given recipe collide with any existing recipe in the cache - */ - public static void addRecipeToCache(GT_Recipe_AssemblyLine aRecipe) { - if (aRecipe != null) { - String aHash = "Hash." + aRecipe.getPersistentHash(); - GT_Recipe_AssemblyLine existing = sRecipeCacheByOutput.put(new GT_ItemStack(aRecipe.mOutput), aRecipe); - if (existing != null) throw new IllegalArgumentException("Duplicate assline recipe for " + aRecipe.mOutput); - existing = sRecipeCacheByRecipeHash.put(aHash, aRecipe); - if (existing != null && !existing.equals(aRecipe)) - throw new IllegalArgumentException("Recipe hash collision for " + aRecipe + " and " + existing); - } - } - - /** - * @param aHash - Recipe hash String, may be null but will just be treated as invalid. - * @return Is this Recipe Hash String valid? - */ - public static boolean isValidHash(String aHash) { - if (aHash != null && aHash.length() > 0) { - // persistent hash can never be 0 - return !aHash.equals("Invalid.Recipe.Hash") && !aHash.equals("Hash.0"); - } - return false; - } - - /** - * @param aStack - The ItemStack to check. - * @return Is this ItemStack a Data Stick? - */ - public static boolean isItemDataStick(ItemStack aStack) { - return GT_Utility.isStackValid(aStack) && ItemList.Tool_DataStick.isStackEqual(aStack, false, true); - } - - /** - * @param aDataStick - The Data Stick to check. - * @return Does this Data Stick have a valid output ItemStack? - */ - public static boolean doesDataStickHaveOutput(ItemStack aDataStick) { - return isItemDataStick(aDataStick) && aDataStick.hasTagCompound() - && aDataStick.getTagCompound() - .hasKey("output"); - } - - /** - * @param aDataStick - The Data Stick to check. - * @return Does this Data Stick need recipe data updated. - */ - public static boolean doesDataStickNeedUpdate(ItemStack aDataStick) { - if (isItemDataStick(aDataStick) && doesDataStickHaveRecipeHash(aDataStick)) { - String aStickHash = getHashFromDataStack(aDataStick); - if (isValidHash(aStickHash) && doesDataStickHaveOutput(aDataStick)) { - ItemStack aStickOutput = getDataStickOutput(aDataStick); - GT_Recipe_AssemblyLine aIntendedRecipe = findAssemblyLineRecipeByOutput(aStickOutput); - return !aStickHash.equals(generateRecipeHash(aIntendedRecipe)); - } - } - return true; - } - - /** - * @param aDataStick - The Data Stick to check. - * @return Does this have a Recipe Hash String at all? - */ - public static boolean doesDataStickHaveRecipeHash(ItemStack aDataStick) { - if (isItemDataStick(aDataStick) && aDataStick.hasTagCompound()) { - NBTTagCompound aNBT = aDataStick.getTagCompound(); - return aNBT.hasKey("Data.Recipe.Hash") && !aNBT.getString("Data.Recipe.Hash") - .equals("Hash.0"); - } - return false; - } - - /** - * Get the Output ItemStack from a Data Stick. - * - * @param aDataStick - The Data Stick to check. - * @return Output ItemStack contained on the Data Stick. - */ - public static ItemStack getDataStickOutput(ItemStack aDataStick) { - if (doesDataStickHaveOutput(aDataStick)) { - return GT_Utility.loadItem(aDataStick.getTagCompound(), "output"); - } - return null; - } - - /** - * @param aDataStick - The Data Stick to process. - * @return The stored Recipe Hash String on the Data Stick, will return an invalid Hash if one is not found. - *

- * The hash will be guaranteed to pass isValidHash(). - *

- * Will not return Null. - */ - public static String getHashFromDataStack(ItemStack aDataStick) { - if (isItemDataStick(aDataStick) && aDataStick.hasTagCompound()) { - NBTTagCompound aNBT = aDataStick.getTagCompound(); - if (aNBT.hasKey("Data.Recipe.Hash", NBT.TAG_STRING)) { - String hash = aNBT.getString("Data.Recipe.Hash"); - if (isValidHash(hash)) return hash; - } - } - return "Invalid.Recipe.Hash"; - } - - /** - * - * @param aDataStick - The Data Stick to update. - * @param aRecipeHash - The Recipe Hash String to update with. - * @return Did we update the Recipe Hash String on the Data Stick? - */ - public static boolean setRecipeHashOnDataStick(ItemStack aDataStick, String aRecipeHash) { - if (isItemDataStick(aDataStick) && aDataStick.hasTagCompound()) { - NBTTagCompound aNBT = aDataStick.getTagCompound(); - aNBT.setString("Data.Recipe.Hash", aRecipeHash); - aDataStick.setTagCompound(aNBT); - return true; - } - return false; - } - - /** - * - * @param aDataStick - The Data Stick to update. - * @param aNewRecipe - The New GT_Recipe_AssemblyLine recipe to update it with. - * @return Did we set the new recipe data & Recipe Hash String on the Data Stick? - */ - public static boolean setAssemblyLineRecipeOnDataStick(ItemStack aDataStick, GT_Recipe_AssemblyLine aNewRecipe) { - return setAssemblyLineRecipeOnDataStick(aDataStick, aNewRecipe, true); - } - - public static boolean setAssemblyLineRecipeOnDataStick(ItemStack aDataStick, GT_Recipe_AssemblyLine aNewRecipe, - boolean setUpdateTime) { - if (isItemDataStick(aDataStick) && aNewRecipe.mOutput != null) { - String s = aNewRecipe.mOutput.getDisplayName(); - if (FMLCommonHandler.instance() - .getEffectiveSide() - .isServer()) { - s = GT_Assemblyline_Server.lServerNames.get(aNewRecipe.mOutput.getDisplayName()); - if (s == null) { - s = aNewRecipe.mOutput.getDisplayName(); - } - } - - String aHash = generateRecipeHash(aNewRecipe); - if (GT_Values.D1) { - GT_Recipe_AssemblyLine aOldRecipe = findAssemblyLineRecipeFromDataStick(aDataStick, true).recipe; - GT_FML_LOGGER.info( - "Updating data stick: " + aDataStick.getDisplayName() - + " | Old Recipe Hash: " - + generateRecipeHash(aOldRecipe) - + ", New Recipe Hash: " - + aHash); - } - - String author = "Assembling Line Recipe Generator"; - String displayName = null; - if (aDataStick.hasTagCompound()) { - NBTTagCompound tag = aDataStick.getTagCompound(); - if (tag.hasKey("author", NBT.TAG_STRING)) { - author = tag.getString("author"); - } - if (tag.hasKey("display", NBT.TAG_COMPOUND)) { - NBTTagCompound displayTag = tag.getCompoundTag("display"); - if (displayTag.hasKey("Name", NBT.TAG_STRING)) displayName = displayTag.getString("Name"); - } - } - - // remove possible old NBTTagCompound - aDataStick.setTagCompound(new NBTTagCompound()); - if (displayName != null) aDataStick.setStackDisplayName(displayName); - if (GT_Values.D1) { - GT_Utility.ItemNBT.setBookTitle(aDataStick, s + " Construction Data (" + aHash + ")"); - } else { - GT_Utility.ItemNBT.setBookTitle(aDataStick, s + " Construction Data"); - } - - NBTTagCompound tNBT = aDataStick.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - } - - tNBT.setTag("output", aNewRecipe.mOutput.writeToNBT(new NBTTagCompound())); - tNBT.setInteger("time", aNewRecipe.mDuration); - tNBT.setInteger("eu", aNewRecipe.mEUt); - tNBT.setString("author", author); - NBTTagList tNBTList = new NBTTagList(); - tNBTList.appendTag( - new NBTTagString( - "Construction plan for " + aNewRecipe.mOutput.stackSize - + " " - + s - + ". Needed EU/t: " - + aNewRecipe.mEUt - + " Production time: " - + (aNewRecipe.mDuration / 20))); - for (int i = 0; i < aNewRecipe.mInputs.length; i++) { - boolean hasSetOreDictAlt = false; - - if (aNewRecipe.mOreDictAlt[i] != null && aNewRecipe.mOreDictAlt[i].length > 0) { - tNBT.setInteger("a" + i, aNewRecipe.mOreDictAlt[i].length); - int count = 0; - StringBuilder tBuilder = new StringBuilder("Input Bus " + (i + 1) + ": "); - for (int j = 0; j < aNewRecipe.mOreDictAlt[i].length; j++) { - ItemStack tStack = aNewRecipe.mOreDictAlt[i][j]; - if (tStack != null) { - tNBT.setTag("a" + i + ":" + j, tStack.writeToNBT(new NBTTagCompound())); - - s = tStack.getDisplayName(); - if (FMLCommonHandler.instance() - .getEffectiveSide() - .isServer()) { - s = GT_Assemblyline_Server.lServerNames.get(tStack.getDisplayName()); - if (s == null) s = tStack.getDisplayName(); - } - - tBuilder.append(count == 0 ? "" : "\nOr ") - .append(tStack.stackSize) - .append(" ") - .append(s); - count++; - } - } - if (count > 0) { - tNBTList.appendTag(new NBTTagString(tBuilder.toString())); - hasSetOreDictAlt = true; - } - } - - if (aNewRecipe.mInputs[i] != null) { - tNBT.setTag("" + i, aNewRecipe.mInputs[i].writeToNBT(new NBTTagCompound())); - - if (!hasSetOreDictAlt) { - s = aNewRecipe.mInputs[i].getDisplayName(); - if (FMLCommonHandler.instance() - .getEffectiveSide() - .isServer()) { - s = GT_Assemblyline_Server.lServerNames.get(aNewRecipe.mInputs[i].getDisplayName()); - if (s == null) s = aNewRecipe.mInputs[i].getDisplayName(); - } - tNBTList.appendTag( - new NBTTagString( - "Input Bus " + (i + 1) + ": " + aNewRecipe.mInputs[i].stackSize + " " + s)); - } - } - } - for (int i = 0; i < aNewRecipe.mFluidInputs.length; i++) { - if (aNewRecipe.mFluidInputs[i] != null) { - tNBT.setTag("f" + i, aNewRecipe.mFluidInputs[i].writeToNBT(new NBTTagCompound())); - - s = aNewRecipe.mFluidInputs[i].getLocalizedName(); - if (FMLCommonHandler.instance() - .getEffectiveSide() - .isServer()) { - s = GT_Assemblyline_Server.lServerNames.get(aNewRecipe.mFluidInputs[i].getLocalizedName()); - if (s == null) s = aNewRecipe.mFluidInputs[i].getLocalizedName(); - } - tNBTList.appendTag( - new NBTTagString( - "Input Hatch " + (i + 1) + ": " + aNewRecipe.mFluidInputs[i].amount + "L " + s)); - } - } - tNBT.setTag("pages", tNBTList); - if (setUpdateTime) tNBT.setLong("lastUpdate", System.currentTimeMillis()); - aDataStick.setTagCompound(tNBT); - // Set recipe hash - setRecipeHashOnDataStick(aDataStick, aHash); - return true; - } - return false; - } - - public enum LookupResultType { - - INVALID_STICK(true), - VALID_STACK_BUT_INVALID_RECIPE(true), - VALID_STACK_AND_VALID_RECIPE(false), - VALID_STACK_AND_VALID_HASH(false); - - private final boolean recipeNull; - private LookupResult singletonResult; - - LookupResultType(boolean recipeNull) { - this.recipeNull = recipeNull; - } - - public LookupResult getResult() { - if (!recipeNull) throw new IllegalArgumentException("This result type require a nonnull recipe"); - if (singletonResult == null) singletonResult = new LookupResult(null, this); - return singletonResult; - } - - public LookupResult getResult(GT_Recipe_AssemblyLine recipe) { - if ((recipe == null) != recipeNull) - throw new IllegalArgumentException("This result type does not allow given input"); - return new LookupResult(recipe, this); - } - } - - public static class LookupResult { - - private final GT_Recipe_AssemblyLine recipe; - private final LookupResultType type; - - LookupResult(GT_Recipe_AssemblyLine recipe, LookupResultType type) { - this.recipe = recipe; - this.type = type; - } - - public GT_Recipe_AssemblyLine getRecipe() { - return recipe; - } - - public LookupResultType getType() { - return type; - } - } -} diff --git a/src/main/java/gregtech/api/util/GT_Assemblyline_Server.java b/src/main/java/gregtech/api/util/GT_Assemblyline_Server.java deleted file mode 100644 index 4c0348683a..0000000000 --- a/src/main/java/gregtech/api/util/GT_Assemblyline_Server.java +++ /dev/null @@ -1,297 +0,0 @@ -package gregtech.api.util; - -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; - -import net.minecraftforge.common.config.ConfigCategory; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.common.config.Property; - -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsBotania; - -public class GT_Assemblyline_Server { - - public static LinkedHashMap lServerNames = new LinkedHashMap<>(); - private static LinkedHashMap internal2 = new LinkedHashMap<>(), internal3 = new LinkedHashMap<>(), - internal4 = new LinkedHashMap<>(); - private static HashMap internal = new HashMap<>(); - - public static void fillMap(FMLPreInitializationEvent aEvent) { - Configuration conf = GT_LanguageManager.sEnglishFile; - - ConfigCategory cat = conf.getCategory("languagefile"); - internal.putAll(cat.getValues()); - for (Map.Entry entry : internal.entrySet()) { - try { - String s = entry.getValue() - .getString() - .replaceAll("%", ""); - - if (entry.getKey() - .contains("metaitem") && s.contains("material")) internal2.put(entry.getKey(), s); - else if (entry.getKey() - .contains("blockmachines") && s.contains("material")) internal3.put(entry.getKey(), s); - else if ((entry.getKey() - .contains("blockores") - || (entry.getKey() - .contains("blockmetal") - || entry.getKey() - .contains("blockgem"))) - && s.contains("material")) internal4.put(entry.getKey(), s); - else lServerNames.put(entry.getKey(), s); - } catch (Exception ignored) {} - } - for (Map.Entry entry : internal2.entrySet()) { - try { - if (entry.getKey() - .contains("name")) { - int i = Integer.parseInt( - entry.getKey() - .substring( - "gt.metaitem.01.".length(), - entry.getKey() - .length() - ".name".length())); - i = i % 1000; - if (GregTech_API.sGeneratedMaterials[i] != null) lServerNames.put( - entry.getKey(), - entry.getValue() - .replace("material", GregTech_API.sGeneratedMaterials[i].toString())); - else lServerNames.put(entry.getKey(), null); - } - } catch (Exception ignored) {} - } - for (Map.Entry entry : internal3.entrySet()) { - try { - if (entry.getKey() - .contains("cable")) - lServerNames.put( - entry.getKey(), - entry.getValue() - .replace( - "material", - entry.getKey() - .substring( - "gt.blockmachines.cable.".length(), - entry.getKey() - .length() - ".01.name".length()))); - else if (entry.getKey() - .contains("gt_frame_")) - lServerNames.put( - entry.getKey(), - entry.getValue() - .replace( - "material", - entry.getKey() - .substring( - "gt.blockmachines.gt_frame_".length(), - entry.getKey() - .length() - ".name".length()))); - else if (entry.getKey() - .contains("gt_pipe_")) { - if (!entry.getKey() - .contains("_huge") - && !entry.getKey() - .contains("_large") - && !entry.getKey() - .contains("_nonuple") - && !entry.getKey() - .contains("_quadruple") - && !entry.getKey() - .contains("_small") - && !entry.getKey() - .contains("_tiny")) - lServerNames.put( - entry.getKey(), - entry.getValue() - .replace( - "material", - entry.getKey() - .substring( - "gt.blockmachines.gt_pipe_".length(), - entry.getKey() - .length() - ".name".length()))); - else if (entry.getKey() - .contains("_huge") - || entry.getKey() - .contains("_tiny")) - lServerNames.put( - entry.getKey(), - entry.getValue() - .replace( - "material", - entry.getKey() - .substring( - "gt.blockmachines.gt_pipe_".length(), - entry.getKey() - .length() - "_tiny.name".length()))); - else if (entry.getKey() - .contains("_large") - || entry.getKey() - .contains("_small")) - lServerNames.put( - entry.getKey(), - entry.getValue() - .replace( - "material", - entry.getKey() - .substring( - "gt.blockmachines.gt_pipe_".length(), - entry.getKey() - .length() - "_large.name".length()))); - else if (entry.getKey() - .contains("_nonuple")) - lServerNames.put( - entry.getKey(), - entry.getValue() - .replace( - "material", - entry.getKey() - .substring( - "gt.blockmachines.gt_pipe_".length(), - entry.getKey() - .length() - "_nonuple.name".length()))); - else if (entry.getKey() - .contains("_quadruple")) - lServerNames.put( - entry.getKey(), - entry.getValue() - .replace( - "material", - entry.getKey() - .substring( - "gt.blockmachines.gt_pipe_".length(), - entry.getKey() - .length() - "_quadruple.name".length()))); - } else if (entry.getKey() - .contains("wire")) - lServerNames.put( - entry.getKey(), - entry.getValue() - .replace( - "material", - entry.getKey() - .substring( - "gt.blockmachines.wire.".length(), - entry.getKey() - .length() - ".01.name".length()))); - else lServerNames.put(entry.getKey(), entry.getValue()); - } catch (Exception ignored) {} - } - for (Map.Entry entry : internal4.entrySet()) { - try { - if (entry.getKey() - .contains("blockores")) { - int i = Integer.parseInt( - entry.getKey() - .substring( - "gt.blockores.".length(), - entry.getKey() - .length() - ".name".length())); - i = i % 1000; - if (GregTech_API.sGeneratedMaterials[i] != null) lServerNames.put( - entry.getKey(), - entry.getValue() - .replace("material", GregTech_API.sGeneratedMaterials[i].toString())); - else lServerNames.put(entry.getKey(), null); - } else if (entry.getKey() - .contains("blockmetal")) { - Materials[] mMats = null; - String t = entry.getKey() - .substring("gt.blockmetal".length()); - t = t.substring(0, 1); - int i = Integer.parseInt(t); - switch (i) { - case 1 -> mMats = new Materials[] { Materials.Adamantium, Materials.Aluminium, - Materials.Americium, Materials.AnnealedCopper, Materials.Antimony, Materials.Arsenic, - Materials.AstralSilver, Materials.BatteryAlloy, Materials.Beryllium, Materials.Bismuth, - Materials.BismuthBronze, Materials.BlackBronze, Materials.BlackSteel, - Materials.BlueAlloy, Materials.BlueSteel, Materials.Brass }; - case 2 -> mMats = new Materials[] { Materials.Bronze, Materials.Caesium, Materials.Cerium, - Materials.Chrome, Materials.ChromiumDioxide, Materials.Cobalt, Materials.CobaltBrass, - Materials.Copper, Materials.Cupronickel, Materials.DamascusSteel, Materials.DarkIron, - Materials.DeepIron, Materials.Desh, Materials.Duranium, Materials.Dysprosium, - Materials.Electrum }; - case 3 -> mMats = new Materials[] { Materials.ElectrumFlux, Materials.Enderium, - Materials.Erbium, Materials.Europium, Materials.FierySteel, Materials.Gadolinium, - Materials.Gallium, Materials.Holmium, Materials.HSLA, Materials.Indium, - Materials.InfusedGold, Materials.Invar, Materials.Iridium, Materials.IronMagnetic, - Materials.IronWood, Materials.Kanthal }; - case 4 -> mMats = new Materials[] { Materials.Knightmetal, Materials.Lanthanum, - Materials.Lead, Materials.Lutetium, Materials.Magnalium, Materials.Magnesium, - Materials.Manganese, Materials.MeteoricIron, Materials.MeteoricSteel, Materials.Trinium, - Materials.Mithril, Materials.Molybdenum, Materials.Naquadah, Materials.NaquadahAlloy, - Materials.NaquadahEnriched, Materials.Naquadria }; - case 5 -> mMats = new Materials[] { Materials.Neodymium, Materials.NeodymiumMagnetic, - Materials.Neutronium, Materials.Nichrome, Materials.Nickel, Materials.Niobium, - Materials.NiobiumNitride, Materials.NiobiumTitanium, Materials.Osmiridium, - Materials.Osmium, Materials.Palladium, Materials.PigIron, Materials.Platinum, - Materials.Plutonium, Materials.Plutonium241, Materials.Praseodymium }; - case 6 -> mMats = new Materials[] { Materials.Promethium, Materials.RedAlloy, - Materials.RedSteel, Materials.RoseGold, Materials.Rubidium, Materials.Samarium, - Materials.Scandium, Materials.ShadowIron, Materials.ShadowSteel, Materials.Silicon, - Materials.Silver, Materials.SolderingAlloy, Materials.StainlessSteel, Materials.Steel, - Materials.SteelMagnetic, Materials.SterlingSilver }; - case 7 -> mMats = new Materials[] { Materials.Sunnarium, Materials.Tantalum, - Materials.Tellurium, Materials.Terbium, Materials.Thaumium, Materials.Thorium, - Materials.Thulium, Materials.Tin, Materials.TinAlloy, Materials.Titanium, - Materials.Tritanium, Materials.Tungsten, Materials.TungstenSteel, Materials.Ultimet, - Materials.Uranium, Materials.Uranium235 }; - case 8 -> mMats = new Materials[] { Materials.Vanadium, Materials.VanadiumGallium, - Materials.WroughtIron, Materials.Ytterbium, Materials.Yttrium, - Materials.YttriumBariumCuprate, Materials.Zinc, Materials.TungstenCarbide, - Materials.VanadiumSteel, Materials.HSSG, Materials.HSSE, Materials.HSSS, - Materials.Steeleaf, Materials.Ichorium, Materials.Firestone }; - } - t = entry.getKey() - .substring( - "gt.blockmetal1.".length(), - entry.getKey() - .length() - ".name".length()); - i = Integer.parseInt(t); - lServerNames.put(entry.getKey(), "Block of " + mMats[i].toString()); - mMats = null; - } else if (entry.getKey() - .contains("blockgem")) { - Materials[] mMats = null; - String t = entry.getKey() - .substring("gt.blockgem".length()); - t = t.substring(0, 1); - int i = Integer.parseInt(t); - switch (i) { - case 1 -> mMats = new Materials[] { Materials.InfusedAir, Materials.Amber, - Materials.Amethyst, Materials.InfusedWater, Materials.BlueTopaz, - Materials.CertusQuartz, Materials.Dilithium, Materials.EnderEye, - Materials.EnderPearl, Materials.FoolsRuby, Materials.Force, Materials.Forcicium, - Materials.Forcillium, Materials.GreenSapphire, Materials.InfusedFire, - Materials.Jasper, MaterialsBotania.ManaDiamond, - MaterialsBotania.BotaniaDragonstone }; - case 2 -> mMats = new Materials[] { Materials.Lazurite, Materials.Lignite, - Materials.Monazite, Materials.Niter, Materials.Olivine, Materials.Opal, - Materials.InfusedOrder, Materials.InfusedEntropy, Materials.Phosphorus, - Materials.Quartzite, Materials.GarnetRed, Materials.Ruby, Materials.Sapphire, - Materials.Sodalite, Materials.Tanzanite, Materials.InfusedEarth }; - case 3 -> mMats = new Materials[] { Materials.Topaz, Materials.Vinteum, - Materials.GarnetYellow, Materials.NetherStar, Materials.Charcoal, Materials.Blaze }; - } - t = entry.getKey() - .substring( - "gt.blockgem1.".length(), - entry.getKey() - .length() - ".name".length()); - i = Integer.parseInt(t); - lServerNames.put(entry.getKey(), "Block of " + mMats[i].toString()); - mMats = null; - } - } catch (Exception ignored) {} - } - - internal = null; - internal2 = null; - internal3 = null; - internal4 = null; - } -} diff --git a/src/main/java/gregtech/api/util/GT_BaseCrop.java b/src/main/java/gregtech/api/util/GT_BaseCrop.java deleted file mode 100644 index d8608c85a0..0000000000 --- a/src/main/java/gregtech/api/util/GT_BaseCrop.java +++ /dev/null @@ -1,311 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.GT_Values.E; -import static gregtech.api.enums.Mods.IC2CropPlugin; - -import java.lang.reflect.InvocationTargetException; -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.ConfigCategories; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.objects.ItemData; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_TileEntity_Ores; -import ic2.api.crops.CropCard; -import ic2.api.crops.Crops; -import ic2.api.crops.ICropTile; -import speiger.src.crops.api.ICropCardInfo; - -public class GT_BaseCrop extends CropCard implements ICropCardInfo { - - public static ArrayList sCropList = new ArrayList<>(); - private String mName = E; - private String mDiscoveredBy = "Gregorius Techneticies"; - private String[] mAttributes; - private int mTier = 0; - private int mMaxSize = 0; - private int mAfterHarvestSize = 0; - private int mHarvestSize = 0; - private final int[] mStats = new int[5]; - private final int mGrowthSpeed = 0; - private ItemStack mDrop = null; - private ItemStack[] mSpecialDrops = null; - private Materials mBlock = null; - private static boolean bIc2NeiLoaded = IC2CropPlugin.isModLoaded(); - - /** - * To create new Crops - * - * @param aID Default ID - * @param aCropName Name of the Crop - * @param aDiscoveredBy The one who discovered the Crop - * @param aDrop The Item which is dropped by the Crop. must be != null - * @param aBaseSeed Baseseed to plant this Crop. null == crossbreed only - * @param aTier tier of the Crop. forced to be >= 1 - * @param aMaxSize maximum Size of the Crop. forced to be >= 3 - * @param aGrowthSpeed how fast the Crop grows. if < 0 then its set to Tier*300 - * @param aHarvestSize the size the Crop needs to be harvested. forced to be between 2 and max size - */ - public GT_BaseCrop(int aID, String aCropName, String aDiscoveredBy, ItemStack aBaseSeed, int aTier, int aMaxSize, - int aGrowthSpeed, int aAfterHarvestSize, int aHarvestSize, int aStatChemical, int aStatFood, int aStatDefensive, - int aStatColor, int aStatWeed, String[] aAttributes, ItemStack aDrop, ItemStack[] aSpecialDrops) { - new GT_BaseCrop( - aID, - aCropName, - aDiscoveredBy, - aBaseSeed, - aTier, - aMaxSize, - aGrowthSpeed, - aAfterHarvestSize, - aHarvestSize, - aStatChemical, - aStatFood, - aStatDefensive, - aStatColor, - aStatWeed, - aAttributes, - null, - aDrop, - aSpecialDrops); - } - - /** - * To create new Crops - * - * @param aID Default ID - * @param aCropName Name of the Crop - * @param aDiscoveredBy The one who discovered the Crop - * @param aDrop The Item which is dropped by the Crop. must be != null - * @param aBaseSeed Baseseed to plant this Crop. null == crossbreed only - * @param aTier tier of the Crop. forced to be >= 1 - * @param aMaxSize maximum Size of the Crop. forced to be >= 3 - * @param aGrowthSpeed how fast the Crop grows. if < 0 then its set to Tier*300 - * @param aHarvestSize the size the Crop needs to be harvested. forced to be between 2 and max size - * @param aBlock the block below needed for crop to grow. If null no block needed - */ - public GT_BaseCrop(int aID, String aCropName, String aDiscoveredBy, ItemStack aBaseSeed, int aTier, int aMaxSize, - int aGrowthSpeed, int aAfterHarvestSize, int aHarvestSize, int aStatChemical, int aStatFood, int aStatDefensive, - int aStatColor, int aStatWeed, String[] aAttributes, Materials aBlock, ItemStack aDrop, - ItemStack[] aSpecialDrops) { - mName = aCropName; - aID = GT_Config.addIDConfig(ConfigCategories.IDs.crops, mName.replaceAll(" ", "_"), aID); - if (aDiscoveredBy != null && !aDiscoveredBy.equals(E)) mDiscoveredBy = aDiscoveredBy; - if (aDrop != null && aID > 0 && aID < 256) { - mDrop = GT_Utility.copyOrNull(aDrop); - mSpecialDrops = aSpecialDrops; - mTier = Math.max(1, aTier); - mMaxSize = Math.max(3, aMaxSize); - mHarvestSize = Math.min(Math.max(aHarvestSize, 2), mMaxSize); - mAfterHarvestSize = Math.min(Math.max(aAfterHarvestSize, 1), mMaxSize - 1); - mStats[0] = aStatChemical; - mStats[1] = aStatFood; - mStats[2] = aStatDefensive; - mStats[3] = aStatColor; - mStats[4] = aStatWeed; - mAttributes = aAttributes; - mBlock = aBlock; - if (!Crops.instance.registerCrop(this, aID)) - throw new GT_ItsNotMyFaultException("Make sure the Crop ID is valid!"); - if (aBaseSeed != null) Crops.instance.registerBaseSeed(aBaseSeed, this, 1, 1, 1, 1); - sCropList.add(this); - } - if (bIc2NeiLoaded) { - try { - Class.forName("speiger.src.crops.api.CropPluginAPI") - .getMethod("registerCropInfo", Class.forName("speiger.src.crops.api.ICropCardInfo")) - .invoke( - Class.forName("speiger.src.crops.api.CropPluginAPI") - .getField("instance"), - this); - } catch (IllegalAccessException | ClassNotFoundException | SecurityException | NoSuchMethodException - | NoSuchFieldException | InvocationTargetException | IllegalArgumentException ex) { - bIc2NeiLoaded = false; - } - } - } - - @Override - public byte getSizeAfterHarvest(ICropTile crop) { - return (byte) mAfterHarvestSize; - } - - @Override - public int growthDuration(ICropTile aCrop) { - if (mGrowthSpeed < 200) return super.growthDuration(aCrop); - return tier() * mGrowthSpeed; - } - - @Override - public int getrootslength(ICropTile crop) { - return 5; - } - - @Override - public String[] attributes() { - return mAttributes; - } - - @Override - public String discoveredBy() { - return mDiscoveredBy; - } - - @Override - public final boolean canGrow(ICropTile aCrop) { - // block check is only performed at the last stage of growth - if (this.needsBlockBelow() && aCrop.getSize() == mMaxSize - 1) { - return isBlockBelow(aCrop); - } - return aCrop.getSize() < maxSize(); - } - - @Override - public final boolean canBeHarvested(ICropTile aCrop) { - return aCrop.getSize() >= mHarvestSize; - } - - @Override - public boolean canCross(ICropTile aCrop) { - return aCrop.getSize() + 2 > maxSize(); - } - - @Override - public int stat(int n) { - if (n < 0 || n >= mStats.length) return 0; - return mStats[n]; - } - - @Override - public String name() { - return mName; - } - - @Override - public int tier() { - return mTier; - } - - @Override - public int maxSize() { - return mMaxSize; - } - - @Override - public ItemStack getGain(ICropTile aCrop) { - int tDrop = 0; - if (mSpecialDrops != null && (tDrop = java.util.concurrent.ThreadLocalRandom.current() - .nextInt(0, (mSpecialDrops.length * 2) + 2)) < mSpecialDrops.length && mSpecialDrops[tDrop] != null) { - return GT_Utility.copyOrNull(mSpecialDrops[tDrop]); - } - return GT_Utility.copyOrNull(mDrop); - } - - @Override - public boolean rightclick(ICropTile aCrop, EntityPlayer aPlayer) { - if (!canBeHarvested(aCrop)) return false; - return aCrop.harvest(aPlayer instanceof EntityPlayerMP); - } - - @Override - public int getOptimalHavestSize(ICropTile crop) { - return maxSize(); - } - - /** - * Checks if the crop needs a block below it - * - * @return True if the crop needs a block below it to grow to its max size - */ - public boolean needsBlockBelow() { - return GT_Mod.gregtechproxy.mCropNeedBlock && this.mBlock != null; - } - - public boolean isBlockBelow(ICropTile aCrop) { - if (aCrop == null) { - return false; - } - for (int i = 1; i < this.getrootslength(aCrop); i++) { - Block tBlock = aCrop.getWorld() - .getBlock(aCrop.getLocation().posX, aCrop.getLocation().posY - i, aCrop.getLocation().posZ); - if ((tBlock instanceof GT_Block_Ores_Abstract)) { - TileEntity tTileEntity = aCrop.getWorld() - .getTileEntity(aCrop.getLocation().posX, aCrop.getLocation().posY - i, aCrop.getLocation().posZ); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - Materials tMaterial = GregTech_API.sGeneratedMaterials[(((GT_TileEntity_Ores) tTileEntity).mMetaData - % 1000)]; - if ((tMaterial != null) && (tMaterial != Materials._NULL)) { - return tMaterial == mBlock; - } - } - } else { - int tMetaID = aCrop.getWorld() - .getBlockMetadata(aCrop.getLocation().posX, aCrop.getLocation().posY - i, aCrop.getLocation().posZ); - if (isBlockBelow(new ItemStack(tBlock, 1, tMetaID))) { - return true; - } - } - } - return false; - } - - /** - * An isolated function to check if an item stack is a block that should be below this crop - * - * @param aItem a stack of the block placed under the crop - * @return The result of the check - */ - public boolean isBlockBelow(ItemStack aItem) { - // safety in case someone calls this without checking if we have a block - if (!this.needsBlockBelow()) return true; - - // get material from stack - ItemData tAssociation = GT_OreDictUnificator.getAssociation(aItem); - if (tAssociation == null) return false; - - // return true if it's an ore of the material - // note: some ores don't appear to have associations in testing, naq ore is an example of that - if (tAssociation.mPrefix.toString() - .startsWith("ore") && tAssociation.mMaterial.mMaterial == mBlock) { - return true; - } - - // return true if it's a block of the material - if (tAssociation.mPrefix == OrePrefixes.block && tAssociation.mMaterial.mMaterial == mBlock) { - return true; - } - return false; - } - - @Override - public List getCropInformation() { - if (mBlock != null) { - ArrayList result = new ArrayList<>(1); - result.add( - String.format( - "Requires %s Ore or Block of %s as soil block to reach full growth.", - mBlock.mName, - mBlock.mName)); - return result; - } - return null; - } - - @Override - public ItemStack getDisplayItem() { - if (mSpecialDrops != null && mSpecialDrops[mSpecialDrops.length - 1] != null) { - return GT_Utility.copyOrNull(mSpecialDrops[mSpecialDrops.length - 1]); - } - return GT_Utility.copyOrNull(mDrop); - } -} diff --git a/src/main/java/gregtech/api/util/GT_BlockMap.java b/src/main/java/gregtech/api/util/GT_BlockMap.java deleted file mode 100644 index 9ffe273cac..0000000000 --- a/src/main/java/gregtech/api/util/GT_BlockMap.java +++ /dev/null @@ -1,134 +0,0 @@ -package gregtech.api.util; - -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.BiFunction; - -import net.minecraft.block.Block; - -import gnu.trove.map.TByteObjectMap; -import gnu.trove.map.hash.TByteObjectHashMap; - -public class GT_BlockMap { - - public static final byte WILDCARD = -1; - private final ConcurrentHashMap> backing = new ConcurrentHashMap<>(); - private int size = 0; - - private TByteObjectMap getSubmap(Block block) { - return backing.computeIfAbsent(block, b -> new TByteObjectHashMap<>()); - } - - /** - * Associate a value with that union key - * - * @param block block - * @param meta meta - * @return old mapping, or null if that doesn't exist - */ - public V put(Block block, byte meta, V value) { - V v = getSubmap(block).put(meta, value); - if (v == null) size++; - return v; - } - - /** - * Associate a value with that union key ONLY IF there isn't a prior EXACT mapping - * - * @param block block - * @param meta meta - * @return old mapping, or null if that doesn't exist - */ - public V putIfAbsent(Block block, byte meta, V value) { - V v = getSubmap(block).putIfAbsent(meta, value); - if (v == null) size++; - return v; - } - - /** - * Associate a value with that union key ONLY IF there isn't a prior EXACT mapping - * - * @param block block - * @param meta meta - * @return old mapping, or null if that doesn't exist - */ - public V computeIfAbsent(Block block, byte meta, BiFunction function) { - TByteObjectMap submap = getSubmap(block); - V v = submap.get(meta); - if (v == null) { - v = function.apply(block, meta); - submap.put(meta, v); - size++; - } - return v; - } - - /** - * Contains an associated value - * - * @param block block - * @param meta meta - * @return current mapping OR wildcard of that mapping exists - */ - public boolean containsKey(Block block, byte meta) { - TByteObjectMap submap = backing.get(block); - if (submap == null) return false; - return submap.containsKey(meta) || submap.containsKey(WILDCARD); - } - - /** - * Get the associated value - * - * @param block block - * @param meta meta - * @return current mapping OR wildcard of that block. null if neither exists - */ - public V get(Block block, byte meta) { - TByteObjectMap submap = backing.get(block); - if (submap == null) return null; - V v = submap.get(meta); - if (v != null) return v; - return submap.get(WILDCARD); - } - - /** - * Remove a mapping - * - * @param block block - * @param meta meta - * @return old value, or null if none - */ - public V remove(Block block, byte meta) { - TByteObjectMap submap = backing.get(block); - if (submap == null) return null; - V v = submap.remove(meta); - if (v != null) { - size--; - if (submap.isEmpty()) backing.remove(block); - } - return v; - } - - /** - * Size of all mappings - * - * @return size - */ - public int size() { - return size; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - GT_BlockMap that = (GT_BlockMap) o; - - return backing.equals(that.backing); - } - - @Override - public int hashCode() { - return backing.hashCode(); - } -} diff --git a/src/main/java/gregtech/api/util/GT_BlockSet.java b/src/main/java/gregtech/api/util/GT_BlockSet.java deleted file mode 100644 index 1d13afd056..0000000000 --- a/src/main/java/gregtech/api/util/GT_BlockSet.java +++ /dev/null @@ -1,39 +0,0 @@ -package gregtech.api.util; - -import net.minecraft.block.Block; - -public class GT_BlockSet { - - private final GT_BlockMap backing = new GT_BlockMap<>(); - - public boolean add(Block block, byte meta) { - return backing.put(block, meta, this) != this; - } - - public boolean contains(Block block, byte meta) { - return backing.get(block, meta) == this; - } - - public boolean remove(Block block, byte meta) { - return backing.remove(block, meta) == this; - } - - public int size() { - return backing.size(); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - GT_BlockSet that = (GT_BlockSet) o; - - return backing.equals(that.backing); - } - - @Override - public int hashCode() { - return backing.hashCode(); - } -} diff --git a/src/main/java/gregtech/api/util/GT_CLS_Compat.java b/src/main/java/gregtech/api/util/GT_CLS_Compat.java deleted file mode 100644 index c560435e30..0000000000 --- a/src/main/java/gregtech/api/util/GT_CLS_Compat.java +++ /dev/null @@ -1,157 +0,0 @@ -package gregtech.api.util; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.Collection; -import java.util.Optional; -import java.util.Set; -import java.util.function.Consumer; -import java.util.function.Function; - -import cpw.mods.fml.common.ProgressManager; -import gregtech.GT_Mod; -import gregtech.api.enums.Materials; -import gregtech.common.GT_Proxy; -import gregtech.loaders.postload.GT_PostLoad; - -@SuppressWarnings("rawtypes, unchecked, deprecation") -public class GT_CLS_Compat { - - private static Class alexiilMinecraftDisplayer; - private static Class alexiilProgressDisplayer; - private static Class cpwProgressBar; - - private static Method getLastPercent; - private static Method displayProgress; - - private static Field isReplacingVanillaMaterials; - private static Field isRegisteringGTmaterials; - private static Field progressBarStep; - - static { - // CLS - try { - alexiilMinecraftDisplayer = Class.forName("alexiil.mods.load.MinecraftDisplayer"); - alexiilProgressDisplayer = Class.forName("alexiil.mods.load.ProgressDisplayer"); - } catch (ClassNotFoundException ex) { - GT_Mod.GT_FML_LOGGER.catching(ex); - } - - try { - cpwProgressBar = Class.forName("cpw.mods.fml.common.ProgressManager$ProgressBar"); - } catch (ClassNotFoundException ex) { - GT_Mod.GT_FML_LOGGER.catching(ex); - } - - Optional.ofNullable(alexiilMinecraftDisplayer) - .ifPresent(e -> { - try { - getLastPercent = e.getMethod("getLastPercent"); - isReplacingVanillaMaterials = e.getField("isReplacingVanillaMaterials"); - isRegisteringGTmaterials = e.getField("isRegisteringGTmaterials"); - } catch (NoSuchMethodException | NoSuchFieldException ex) { - GT_Mod.GT_FML_LOGGER.catching(ex); - } - }); - - Optional.ofNullable(alexiilProgressDisplayer) - .ifPresent(e -> { - try { - displayProgress = e.getMethod("displayProgress", String.class, float.class); - } catch (NoSuchMethodException ex) { - GT_Mod.GT_FML_LOGGER.catching(ex); - } - }); - - try { - progressBarStep = cpwProgressBar.getDeclaredField("step"); - progressBarStep.setAccessible(true); - } catch (NoSuchFieldException ex) { - GT_Mod.GT_FML_LOGGER.catching(ex); - } - } - - private GT_CLS_Compat() {} - - private static void registerAndReportProgression(String materialsType, Collection materials, - ProgressManager.ProgressBar progressBar, Function getName, Consumer action) { - int sizeStep = materials.size(); - final long progressionReportsEvery = 100; - final long bakingMsgEvery = 1000; - long nextProgressionReportAt = 0; - long nextBakingMsgAt = 0; - int currentStep = 0; - - for (T m : materials) { - long now = System.currentTimeMillis(); - - if (nextProgressionReportAt < now) { - nextProgressionReportAt = now + progressionReportsEvery; - String materialName = getName.apply(m) - .toString(); - try { - displayProgress.invoke(null, materialName, (float) currentStep / sizeStep); - } catch (IllegalAccessException | InvocationTargetException iae) { - GT_Mod.GT_FML_LOGGER.error("While updating progression", iae); - } - try { - progressBarStep.set(progressBar, currentStep); - } catch (IllegalAccessException iae) { - GT_Mod.GT_FML_LOGGER.error("While updating intermediate progression steps number", iae); - } - progressBar.step(materialName); - } - if (nextBakingMsgAt < now) { - nextBakingMsgAt = now + bakingMsgEvery; - GT_Mod.GT_FML_LOGGER - .info(String.format("%s - Baking: %d%%", materialsType, currentStep * 100 / sizeStep)); - } - action.accept(m); - currentStep += 1; - } - GT_Mod.GT_FML_LOGGER.info(String.format("%s - Baking: Done", materialsType)); - try { - progressBarStep.set(progressBar, currentStep); - } catch (IllegalAccessException iae) { - GT_Mod.GT_FML_LOGGER.error("While updating final progression steps number", iae); - } - } - - public static void stepMaterialsCLS(Collection mEvents, - ProgressManager.ProgressBar progressBar) throws IllegalAccessException { - try { - isRegisteringGTmaterials.set(null, true); - } catch (IllegalArgumentException | IllegalAccessException e) { - GT_Mod.GT_FML_LOGGER.catching(e); - } - registerAndReportProgression( - "GregTech materials", - mEvents, - progressBar, - m -> m.mMaterial, - GT_Proxy::registerRecipes); - ProgressManager.pop(progressBar); - isRegisteringGTmaterials.set(null, false); - } - - public static void doActualRegistrationCLS(ProgressManager.ProgressBar progressBar, - Set replacedVanillaItemsSet) { - try { - isReplacingVanillaMaterials.set(null, true); - } catch (IllegalArgumentException | IllegalAccessException e) { - GT_Mod.GT_FML_LOGGER.catching(e); - } - registerAndReportProgression( - "Vanilla materials", - replacedVanillaItemsSet, - progressBar, - m -> m.mDefaultLocalName, - GT_PostLoad::doActualRegistration); - } - - public static void pushToDisplayProgress() throws InvocationTargetException, IllegalAccessException { - isReplacingVanillaMaterials.set(null, false); - displayProgress.invoke(null, "Post Initialization: loading GregTech", getLastPercent.invoke(null)); - } -} diff --git a/src/main/java/gregtech/api/util/GT_ChunkAssociatedData.java b/src/main/java/gregtech/api/util/GT_ChunkAssociatedData.java deleted file mode 100644 index bb73cf77ed..0000000000 --- a/src/main/java/gregtech/api/util/GT_ChunkAssociatedData.java +++ /dev/null @@ -1,494 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.Mods.GregTech; - -import java.io.DataInput; -import java.io.DataInputStream; -import java.io.DataOutput; -import java.io.DataOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.UncheckedIOException; -import java.lang.ref.WeakReference; -import java.lang.reflect.Array; -import java.nio.file.AtomicMoveNotSupportedException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardCopyOption; -import java.util.Arrays; -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.function.Function; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.annotation.ParametersAreNonnullByDefault; - -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.world.WorldEvent; - -import org.apache.commons.io.FileUtils; - -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -/** - * A utility to save all kinds of data that is a function of any chunk. - *

- * GregTech takes care of saving and loading the data from disk, and an efficient mechanism to locate it. Subclass only - * need to define the exact scheme of each element data (by overriding the three protected abstract method) - *

- * Oh, there is no limit on how large your data is, though you'd not have the familiar NBT interface, but DataOutput - * should be reasonably common anyway. - *

- * It should be noted this class is NOT thread safe. - *

- * Element cannot be null. - *

- * TODO: Implement automatic region unloading. - * - * @param data element type - * @author glease - */ -@ParametersAreNonnullByDefault -public abstract class GT_ChunkAssociatedData { - - private static final Map> instances = new ConcurrentHashMap<>(); - private static final int IO_PARALLELISM = Math.min( - 8, - Math.max( - 1, - Runtime.getRuntime() - .availableProcessors() * 2 - / 3)); - private static final ExecutorService IO_WORKERS = Executors.newWorkStealingPool(IO_PARALLELISM); - private static final Pattern FILE_PATTERN = Pattern.compile("(.+)\\.(-?\\d+)\\.(-?\\d+)\\.dat"); - - static { - // register event handler - new EventHandler(); - } - - protected final String mId; - protected final Class elementtype; - private final int regionLength; - private final int version; - private final boolean saveDefaults; - /** - * Data is stored as a `(world id -> (super region id -> super region data))` hash map. where super region's size is - * determined by regionSize. Here it is called super region, to not confuse with vanilla's regions. - */ - private final Map> masterMap = new ConcurrentHashMap<>(); - - /** - * Initialize this instance. - * - * @param aId An arbitrary, but globally unique identifier for what this data is - * @param elementType The class of this element type. Used to create arrays. - * @param regionLength The length of one super region. Each super region will contain - * {@code regionLength * regionLength} chunks - * @param version An integer marking the version of this data. Useful later when the data's serialized form - * changed. - */ - protected GT_ChunkAssociatedData(String aId, Class elementType, int regionLength, byte version, - boolean saveDefaults) { - if (regionLength * regionLength > Short.MAX_VALUE || regionLength <= 0) - throw new IllegalArgumentException("Region invalid: " + regionLength); - if (!IData.class.isAssignableFrom(elementType)) throw new IllegalArgumentException("Data type invalid"); - if (aId.contains(".")) throw new IllegalArgumentException("ID cannot contains dot"); - this.mId = aId; - this.elementtype = elementType; - this.regionLength = regionLength; - this.version = version; - this.saveDefaults = saveDefaults; - if (instances.putIfAbsent(aId, this) != null) - throw new IllegalArgumentException("Duplicate GT_ChunkAssociatedData: " + aId); - } - - private ChunkCoordIntPair getRegionID(int aChunkX, int aChunkZ) { - return new ChunkCoordIntPair(Math.floorDiv(aChunkX, regionLength), Math.floorDiv(aChunkZ, regionLength)); - } - - /** - * Get a reference to data of the chunk that tile entity is in. The returned reference should be mutable. - */ - public final T get(IGregTechTileEntity tileEntity) { - return get(tileEntity.getWorld(), tileEntity.getXCoord() >> 4, tileEntity.getZCoord() >> 4); - } - - public final T get(Chunk chunk) { - return get(chunk.worldObj, chunk.xPosition, chunk.zPosition); - } - - public final T get(World world, ChunkCoordIntPair coord) { - return get(world, coord.chunkXPos, coord.chunkZPos); - } - - public final T get(World world, int chunkX, int chunkZ) { - SuperRegion region = masterMap.computeIfAbsent(world.provider.dimensionId, ignored -> new ConcurrentHashMap<>()) - .computeIfAbsent(getRegionID(chunkX, chunkZ), c -> new SuperRegion(world, c)); - return region.get(Math.floorMod(chunkX, regionLength), Math.floorMod(chunkZ, regionLength)); - } - - protected final void set(World world, int chunkX, int chunkZ, T data) { - SuperRegion region = masterMap.computeIfAbsent(world.provider.dimensionId, ignored -> new ConcurrentHashMap<>()) - .computeIfAbsent(getRegionID(chunkX, chunkZ), c -> new SuperRegion(world, c)); - region.set(Math.floorMod(chunkX, regionLength), Math.floorMod(chunkZ, regionLength), data); - } - - protected final boolean isCreated(int dimId, int chunkX, int chunkZ) { - Map dimData = masterMap.getOrDefault(dimId, null); - if (dimData == null) return false; - - SuperRegion region = dimData.getOrDefault(getRegionID(chunkX, chunkZ), null); - if (region == null) return false; - - return region.isCreated(Math.floorMod(chunkX, regionLength), Math.floorMod(chunkZ, regionLength)); - } - - public void clear() { - if (GT_Values.debugWorldData) { - long dirtyRegionCount = masterMap.values() - .stream() - .flatMap( - m -> m.values() - .stream()) - .filter(SuperRegion::isDirty) - .count(); - if (dirtyRegionCount > 0) GT_Log.out.println( - "Clearing ChunkAssociatedData with " + dirtyRegionCount + " regions dirty. Data might have been lost!"); - } - masterMap.clear(); - } - - public void save() { - saveRegions( - masterMap.values() - .stream() - .flatMap( - m -> m.values() - .stream())); - } - - public void save(World world) { - Map map = masterMap.get(world.provider.dimensionId); - if (map != null) saveRegions( - map.values() - .stream()); - } - - private void saveRegions(Stream stream) { - stream.filter(SuperRegion::isDirty) - .map(c -> (Runnable) c::save) - .map(r -> CompletableFuture.runAsync(r, IO_WORKERS)) - .reduce(CompletableFuture::allOf) - .ifPresent(f -> { - try { - f.get(); - } catch (Exception e) { - GT_Log.err.println("Data save error: " + mId); - e.printStackTrace(GT_Log.err); - } - }); - } - - protected abstract void writeElement(DataOutput output, T element, World world, int chunkX, int chunkZ) - throws IOException; - - protected abstract T readElement(DataInput input, int version, World world, int chunkX, int chunkZ) - throws IOException; - - protected abstract T createElement(World world, int chunkX, int chunkZ); - - /** - * Clear all mappings, regardless of whether they are dirty - */ - public static void clearAll() { - for (GT_ChunkAssociatedData d : instances.values()) d.clear(); - } - - /** - * Save all mappings - */ - public static void saveAll() { - for (GT_ChunkAssociatedData d : instances.values()) d.save(); - } - - /** - * Load data for all chunks for a given world. Current data for that world will be discarded. If this is what you - * intended, call {@link #save(World)} beforehand. - *

- * Be aware of the memory consumption though. - */ - protected void loadAll(World w) { - if (GT_Values.debugWorldData && masterMap.containsKey(w.provider.dimensionId)) GT_Log.err.println( - "Reloading ChunkAssociatedData " + mId + " for world " + w.provider.dimensionId + " discards old data!"); - if (!getSaveDirectory(w).isDirectory()) - // nothing to load... - return; - try (Stream stream = Files.list(getSaveDirectory(w).toPath())) { - Map worldData = stream.map(f -> { - Matcher matcher = FILE_PATTERN.matcher( - f.getFileName() - .toString()); - return matcher.matches() ? matcher : null; - }) - .filter(Objects::nonNull) - .filter(m -> mId.equals(m.group(1))) - .map( - m -> CompletableFuture.supplyAsync( - () -> new SuperRegion(w, Integer.parseInt(m.group(2)), Integer.parseInt(m.group(3))), - IO_WORKERS)) - .map(f -> { - try { - return f.get(); - } catch (Exception e) { - GT_Log.err.println("Error loading region"); - e.printStackTrace(GT_Log.err); - return null; - } - }) - .filter(Objects::nonNull) - .collect(Collectors.toMap(SuperRegion::getCoord, Function.identity())); - masterMap.put(w.provider.dimensionId, worldData); - } catch (IOException | UncheckedIOException e) { - GT_Log.err.println("Error loading all region"); - e.printStackTrace(GT_Log.err); - } - } - - protected File getSaveDirectory(World w) { - File base; - if (w.provider.getSaveFolder() == null) base = w.getSaveHandler() - .getWorldDirectory(); - else base = new File( - w.getSaveHandler() - .getWorldDirectory(), - w.provider.getSaveFolder()); - return new File(base, GregTech.ID); - } - - public interface IData { - - /** - * @return Whether the data is different from chunk default - */ - boolean isSameAsDefault(); - } - - protected final class SuperRegion { - - private final T[] data = createData(); - private final File backingStorage; - private final WeakReference world; - /** - * Be aware, this means region coord, not bottom-left chunk coord - */ - private final ChunkCoordIntPair coord; - - private SuperRegion(World world, int regionX, int regionZ) { - this.world = new WeakReference<>(world); - this.coord = new ChunkCoordIntPair(regionX, regionZ); - backingStorage = new File(getSaveDirectory(world), String.format("%s.%d.%d.dat", mId, regionX, regionZ)); - if (backingStorage.isFile()) load(); - } - - private SuperRegion(World world, ChunkCoordIntPair regionCoord) { - this.world = new WeakReference<>(world); - this.coord = regionCoord; - backingStorage = new File( - getSaveDirectory(world), - String.format("%s.%d.%d.dat", mId, regionCoord.chunkXPos, regionCoord.chunkZPos)); - if (backingStorage.isFile()) load(); - } - - @SuppressWarnings("unchecked") - private T[] createData() { - return (T[]) Array.newInstance(elementtype, regionLength * regionLength); - } - - public T get(int subRegionX, int subRegionZ) { - int index = getIndex(subRegionX, subRegionZ); - T datum = data[index]; - if (datum == null) { - World world = Objects.requireNonNull(this.world.get()); - T newElem = createElement( - world, - coord.chunkXPos * regionLength + subRegionX, - coord.chunkZPos * regionLength + subRegionZ); - data[index] = newElem; - return newElem; - } - return datum; - } - - public void set(int subRegionX, int subRegionZ, T data) { - this.data[getIndex(subRegionX, subRegionZ)] = data; - } - - public boolean isCreated(int subRegionX, int subRegionZ) { - return this.data[getIndex(subRegionX, subRegionZ)] != null; - } - - public ChunkCoordIntPair getCoord() { - return coord; - } - - private int getIndex(int subRegionX, int subRegionY) { - return subRegionX * regionLength + subRegionY; - } - - private int getChunkX(int index) { - return index / regionLength + coord.chunkXPos * regionLength; - } - - private int getChunkZ(int index) { - return index % regionLength + coord.chunkZPos * regionLength; - } - - public boolean isDirty() { - for (T datum : data) { - if (datum != null && !datum.isSameAsDefault()) return true; - } - return false; - } - - public void save() { - try { - save0(); - } catch (IOException e) { - GT_Log.err.println("Error saving data " + backingStorage.getPath()); - e.printStackTrace(GT_Log.err); - } - } - - private void save0() throws IOException { - // noinspection ResultOfMethodCallIgnored - backingStorage.getParentFile() - .mkdirs(); - File tmpFile = getTmpFile(); - World world = Objects.requireNonNull(this.world.get(), "Attempting to save region of another world!"); - try (DataOutputStream output = new DataOutputStream(new FileOutputStream(tmpFile))) { - int ptr = 0; - boolean nullRange = data[0] == null; - // write a magic byte as storage format version - output.writeByte(0); - // write a magic byte as data format version - output.writeByte(version); - output.writeBoolean(nullRange); - while (ptr < data.length) { - // work out how long is this range - int rangeStart = ptr; - while (ptr < data.length - && (data[ptr] == null || (!saveDefaults && data[ptr].isSameAsDefault())) == nullRange) ptr++; - // write range length - output.writeShort(ptr - rangeStart); - if (!nullRange) - // write element data - for (int i = rangeStart; i < ptr; i++) - writeElement(output, data[i], world, getChunkX(ptr), getChunkZ(ptr)); - // or not - nullRange = !nullRange; - } - } - // first try to replace the destination file - // since atomic operation, no need to keep the backup in place - try { - Files.move( - tmpFile.toPath(), - backingStorage.toPath(), - StandardCopyOption.REPLACE_EXISTING, - StandardCopyOption.ATOMIC_MOVE); - } catch (AtomicMoveNotSupportedException ignored) { - // in case some dumb system/jre combination would cause this - // or if **somehow** two file inside the same directory belongs two separate filesystem - FileUtils.copyFile(tmpFile, backingStorage); - } - } - - public void load() { - try { - loadFromFile(backingStorage); - } catch (IOException | RuntimeException e) { - GT_Log.err.println("Primary storage file broken in " + backingStorage.getPath()); - e.printStackTrace(GT_Log.err); - // in case the primary storage is broken - try { - loadFromFile(getTmpFile()); - } catch (IOException | RuntimeException e2) { - GT_Log.err.println("Backup storage file broken in " + backingStorage.getPath()); - e2.printStackTrace(GT_Log.err); - } - } - } - - private void loadFromFile(File file) throws IOException { - World world = Objects.requireNonNull(this.world.get(), "Attempting to load region of another world!"); - try (DataInputStream input = new DataInputStream(new FileInputStream(file))) { - byte b = input.readByte(); - if (b == 0) { - loadV0(input, world); - } else { - GT_Log.err.printf("Unknown ChunkAssociatedData version %d\n", b); - } - } - } - - private void loadV0(DataInput input, World world) throws IOException { - int version = input.readByte(); - boolean nullRange = input.readBoolean(); - int ptr = 0; - while (ptr != data.length) { - int rangeEnd = ptr + input.readUnsignedShort(); - if (!nullRange) { - for (; ptr < rangeEnd; ptr++) { - data[ptr] = readElement(input, version, world, getChunkX(ptr), getChunkZ(ptr)); - } - } else { - Arrays.fill(data, ptr, rangeEnd, null); - ptr = rangeEnd; - } - nullRange = !nullRange; - } - } - - private File getTmpFile() { - return new File(backingStorage.getParentFile(), backingStorage.getName() + ".tmp"); - } - } - - public static class EventHandler { - - private EventHandler() { - MinecraftForge.EVENT_BUS.register(this); - } - - @SubscribeEvent - public void onWorldSave(WorldEvent.Save e) { - for (GT_ChunkAssociatedData d : instances.values()) { - d.save(e.world); - } - } - - @SubscribeEvent - public void onWorldUnload(WorldEvent.Unload e) { - for (GT_ChunkAssociatedData d : instances.values()) { - // there is no need to explicitly do a save here - // forge will send a WorldEvent.Save on server thread before this event is distributed - d.masterMap.remove(e.world.provider.dimensionId); - } - } - } -} diff --git a/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java b/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java deleted file mode 100644 index 63fb7d1e70..0000000000 --- a/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java +++ /dev/null @@ -1,212 +0,0 @@ -package gregtech.api.util; - -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.IRedstoneCircuitBlock; - -/** - * Redstone Circuit Control Code - *

- * This should make everything possible what a Redstone Computer or BuildCraft Gate could do. It is intended to use this - * similar to BC-Gates (for acquiring Data) and RP Logic Gates. You could write an extremely specified and complex Logic - * Gate, which works only for you Setup, like with ComputerCraft, but you would have to write an extra Mod to add that, - * as it doesn't work Ingame. - *

- * One can make use of the fact, that ItemStacks can be stored as Integer, so that you can scan Inventories for specific - * Items using that. Luckily the Buttons in the GUI enable Copy/Paste of ItemID+MetaData to Integer, including the - * WildCard Damage Value when you use rightclick to place it. You just need to use @GT_Utility.stackToInt(ItemStack - * aStack) to get it. - *

- * All Functions run usually in a seperate try/catch Block, so that failed Logic won't crash the TileEntity. - */ -public abstract class GT_CircuitryBehavior { - - /** - * @param aIndex 0 - 1023 are my own Indices, so use other Numbers! - */ - public GT_CircuitryBehavior(int aIndex) { - GregTech_API.sCircuitryBehaviors.put(aIndex, this); - } - - /** - * returns if there is Redstone applied to any of the valid Inputs (OR) - */ - public static boolean getAnyRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) - .letsRedstoneGoIn( - side, - aRedstoneCircuitBlock.getCoverID(side), - aRedstoneCircuitBlock.getCoverVariable(side), - aRedstoneCircuitBlock.getOwnTileEntity())) { - if (aRedstoneCircuitBlock.getInputRedstone(side) > 0) { - return true; - } - } - } - return false; - } - - /** - * returns if there is Redstone applied to all the valid Inputs (AND) - */ - public static boolean getAllRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) - .letsRedstoneGoIn( - side, - aRedstoneCircuitBlock.getCoverID(side), - aRedstoneCircuitBlock.getCoverVariable(side), - aRedstoneCircuitBlock.getOwnTileEntity())) { - if (aRedstoneCircuitBlock.getInputRedstone(side) == 0) { - return false; - } - } - } - return true; - } - - /** - * returns if there is Redstone applied to exactly one of the valid Inputs (XOR) - */ - public static boolean getOneRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - int tRedstoneAmount = 0; - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) - .letsRedstoneGoIn( - side, - aRedstoneCircuitBlock.getCoverID(side), - aRedstoneCircuitBlock.getCoverVariable(side), - aRedstoneCircuitBlock.getOwnTileEntity())) { - if (aRedstoneCircuitBlock.getInputRedstone(side) > 0) { - tRedstoneAmount++; - } - } - } - return tRedstoneAmount == 1; - } - - /** - * returns the strongest incoming RS-Power - */ - public static byte getStrongestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - byte tRedstoneAmount = 0; - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) - .letsRedstoneGoIn( - side, - aRedstoneCircuitBlock.getCoverID(side), - aRedstoneCircuitBlock.getCoverVariable(side), - aRedstoneCircuitBlock.getOwnTileEntity())) { - tRedstoneAmount = (byte) Math.max(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(side)); - } - } - return tRedstoneAmount; - } - - // region GUI Functions - - /** - * returns the weakest incoming non-zero RS-Power - */ - public static byte getWeakestNonZeroRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0; - byte tRedstoneAmount = 15; - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) - .letsRedstoneGoIn( - side, - aRedstoneCircuitBlock.getCoverID(side), - aRedstoneCircuitBlock.getCoverVariable(side), - aRedstoneCircuitBlock.getOwnTileEntity())) { - if (aRedstoneCircuitBlock.getInputRedstone(side) > 0) - tRedstoneAmount = (byte) Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(side)); - } - } - return tRedstoneAmount; - } - - /** - * returns the weakest incoming RS-Power - */ - public static byte getWeakestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0; - byte tRedstoneAmount = 15; - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (side != aRedstoneCircuitBlock.getOutputFacing() && aRedstoneCircuitBlock.getCover(side) - .letsRedstoneGoIn( - side, - aRedstoneCircuitBlock.getCoverID(side), - aRedstoneCircuitBlock.getCoverVariable(side), - aRedstoneCircuitBlock.getOwnTileEntity())) { - tRedstoneAmount = (byte) Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(side)); - } - } - return tRedstoneAmount; - } - - /** - * Initializes the Parameters of this Circuit, all Parameters have been set to 0 right before calling this - * - * @param aCircuitData, The Data Storage you can use (8 Slots) - * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself - */ - public abstract void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); - - /** - * Validates the Parameters of this Circuit when a value has been changed by the GUI Also called right - * after @initParameters and when the Chunk reloads - * - * @param aCircuitData, The Data Storage you can use (8 Slots and only the first 4 are User definable) - * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself - */ - public abstract void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); - - // endregion - - // region Utility Functions - - /** - * Called every tick if the Block has enough Energy and if the Block is Active - * - * @param aCircuitData, The Data Storage you can use (8 Slots) - * @param aRedstoneCircuitBlock, The Circuit Block MetaTileEntity itself - */ - public abstract void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock); - - /** - * If the ItemStack should be displayed. Parameters are between 0 and 3. - */ - public abstract boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, - int aIndex); - - /** - * The Name of the Gate for the GUI - */ - @SideOnly(Side.CLIENT) - public abstract String getName(); - - /** - * The Description of the Gate for the GUI - */ - @SideOnly(Side.CLIENT) - public abstract String getDescription(); - - /** - * The Description of the Data Field for the GUI - */ - @SideOnly(Side.CLIENT) - public abstract String getDataDescription(int[] aCircuitData, int aCircuitDataIndex); - - /** - * How the Integer should be displayed in the GUI. null means, that it just displays as regular Number. - */ - @SideOnly(Side.CLIENT) - public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { - return null; - } - // endregion -} diff --git a/src/main/java/gregtech/api/util/GT_ClientPreference.java b/src/main/java/gregtech/api/util/GT_ClientPreference.java deleted file mode 100644 index 3ea2730a0c..0000000000 --- a/src/main/java/gregtech/api/util/GT_ClientPreference.java +++ /dev/null @@ -1,43 +0,0 @@ -package gregtech.api.util; - -import gregtech.common.config.client.ConfigPreference; -import gregtech.common.config.client.ConfigWaila; - -public class GT_ClientPreference { - - private final boolean mSingleBlockInitialFilter; - private final boolean mSingleBlockInitialMultiStack; - private final boolean mInputBusInitialFilter; - private final boolean wailaAverageNS; - - public GT_ClientPreference(boolean mSingleBlockInitialFilter, boolean mSingleBlockInitialMultiStack, - boolean mInputBusInitialFilter, boolean wailaAverageNS) { - this.mSingleBlockInitialFilter = mSingleBlockInitialFilter; - this.mSingleBlockInitialMultiStack = mSingleBlockInitialMultiStack; - this.mInputBusInitialFilter = mInputBusInitialFilter; - this.wailaAverageNS = wailaAverageNS; - } - - public GT_ClientPreference() { - this.mSingleBlockInitialFilter = ConfigPreference.singleBlockInitialFilter; - this.mSingleBlockInitialMultiStack = ConfigPreference.singleBlockInitialAllowMultiStack; - this.mInputBusInitialFilter = ConfigPreference.inputBusInitialFilter; - this.wailaAverageNS = ConfigWaila.wailaAverageNS; - } - - public boolean isSingleBlockInitialFilterEnabled() { - return mSingleBlockInitialFilter; - } - - public boolean isSingleBlockInitialMultiStackEnabled() { - return mSingleBlockInitialMultiStack; - } - - public boolean isInputBusInitialFilterEnabled() { - return mInputBusInitialFilter; - } - - public boolean isWailaAverageNSEnabled() { - return wailaAverageNS; - } -} diff --git a/src/main/java/gregtech/api/util/GT_Config.java b/src/main/java/gregtech/api/util/GT_Config.java deleted file mode 100644 index e1157febb4..0000000000 --- a/src/main/java/gregtech/api/util/GT_Config.java +++ /dev/null @@ -1,162 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.GT_Values.E; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.common.config.Property; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; - -public class GT_Config implements Runnable { - - public static boolean troll = false; - - public static Configuration sConfigFileIDs; - public static Configuration cleanroomFile; - public static Configuration undergroundFluidsFile; - public final Configuration mConfig; - - public GT_Config(Configuration aConfig) { - mConfig = aConfig; - mConfig.load(); - mConfig.save(); - GregTech_API.sAfterGTPreload.add(this); // in case of crash on startup - GregTech_API.sAfterGTLoad.add(this); // in case of crash on startup - GregTech_API.sAfterGTPostload.add(this); - if (GT_Values.lateConfigSave) GregTech_API.sFirstWorldTick.add(this); - } - - private static boolean shouldSave() { - return GT_Values.lateConfigSave ? GT_Values.worldTickHappened : GregTech_API.sPostloadFinished; - } - - public static int addIDConfig(Object aCategory, String aName, int aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = sConfigFileIDs.get( - aCategory.toString() - .replaceAll("\\|", "."), - aName.replaceAll("\\|", "."), - aDefault); - int rResult = tProperty.getInt(aDefault); - sConfigFileIDs.save(); - return rResult; - } - - public static String getStackConfigName(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return E; - Object rName = GT_OreDictUnificator.getAssociation(aStack); - if (rName != null) return rName.toString(); - try { - if (GT_Utility.isStringValid(rName = aStack.getUnlocalizedName())) return rName.toString(); - } catch (Throwable e) { - /* Do nothing */ - } - String sName = aStack.getItem() - .toString(); - String[] tmp = sName.split("@"); - if (tmp.length > 0) sName = tmp[0]; - return sName + "." + aStack.getItemDamage(); - } - - public boolean get(Object aCategory, ItemStack aStack, boolean aDefault) { - String aName = getStackConfigName(aStack); - return get(aCategory, aName, aDefault); - } - - public boolean get(Object aCategory, String aName, boolean aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = mConfig.get( - aCategory.toString() - .replaceAll("\\|", "_"), - (aName + "_" + aDefault).replaceAll("\\|", "_"), - aDefault); - boolean rResult = tProperty.getBoolean(aDefault); - if (!tProperty.wasRead() && shouldSave()) mConfig.save(); - return rResult; - } - - public int get(Object aCategory, ItemStack aStack, int aDefault) { - return get(aCategory, getStackConfigName(aStack), aDefault); - } - - public int get(Object aCategory, String aName, int aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = mConfig.get( - aCategory.toString() - .replaceAll("\\|", "_"), - (aName + "_" + aDefault).replaceAll("\\|", "_"), - aDefault); - int rResult = tProperty.getInt(aDefault); - if (!tProperty.wasRead() && shouldSave()) mConfig.save(); - return rResult; - } - - public double get(Object aCategory, ItemStack aStack, double aDefault) { - return get(aCategory, getStackConfigName(aStack), aDefault); - } - - public double get(Object aCategory, String aName, double aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = mConfig.get( - aCategory.toString() - .replaceAll("\\|", "_"), - (aName + "_" + aDefault).replaceAll("\\|", "_"), - aDefault); - double rResult = tProperty.getDouble(aDefault); - if (!tProperty.wasRead() && shouldSave()) mConfig.save(); - return rResult; - } - - public String get(Object aCategory, ItemStack aStack, String aDefault) { - return get(aCategory, getStackConfigName(aStack), aDefault); - } - - public String get(Object aCategory, String aName, String aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = mConfig.get( - aCategory.toString() - .replaceAll("\\|", "_"), - (aName + "_" + aDefault).replaceAll("\\|", "_"), - aDefault); - String rResult = tProperty.getString(); - if (!tProperty.wasRead() && shouldSave()) mConfig.save(); - return rResult; - } - - public String[] get(Object aCategory, ItemStack aStack, String... aDefault) { - return get(aCategory, getStackConfigName(aStack), aDefault); - } - - public String[] get(Object aCategory, String aName, String... aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = mConfig.get( - aCategory.toString() - .replaceAll("\\|", "_"), - aName.replaceAll("\\|", "_"), - aDefault); - String[] rResult = tProperty.getStringList(); - if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) mConfig.save(); - return rResult; - } - - public String getWithValidValues(Object aCategory, String aName, String[] validValues, String aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = mConfig.get( - aCategory.toString() - .replaceAll("\\|", "_"), - aName.replaceAll("\\|", "_"), - aDefault, - null, - validValues); - String rResult = tProperty.getString(); - if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) mConfig.save(); - return rResult; - } - - @Override - public void run() { - mConfig.save(); - } -} diff --git a/src/main/java/gregtech/api/util/GT_CoverBehavior.java b/src/main/java/gregtech/api/util/GT_CoverBehavior.java deleted file mode 100644 index 9394b3957f..0000000000 --- a/src/main/java/gregtech/api/util/GT_CoverBehavior.java +++ /dev/null @@ -1,402 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.GT_Values.E; - -import java.lang.ref.WeakReference; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; - -/** - * For Covers with a special behavior. Has fixed storage format of 4 byte. Not very convenient... - */ -public abstract class GT_CoverBehavior extends GT_CoverBehaviorBase { - - public boolean mPlayerNotified = false; - - public GT_CoverBehavior() { - this(null); - } - - public GT_CoverBehavior(ITexture coverTexture) { - super(ISerializableObject.LegacyCoverData.class, coverTexture); - } - - protected static int convert(ISerializableObject.LegacyCoverData data) { - return data == null ? 0 : data.get(); - } - - // region bridge the parent call to legacy calls - - @Override - public final ISerializableObject.LegacyCoverData createDataObject() { - return new ISerializableObject.LegacyCoverData(); - } - - @Override - public ISerializableObject.LegacyCoverData createDataObject(int aLegacyData) { - return new ISerializableObject.LegacyCoverData(aLegacyData); - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { - return isRedstoneSensitive(side, aCoverID, aCoverVariable.get(), aTileEntity, aTimer); - } - - @Override - protected ISerializableObject.LegacyCoverData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, - int aCoverID, ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { - if (aCoverVariable == null) aCoverVariable = new ISerializableObject.LegacyCoverData(); - aCoverVariable.set(doCoverThings(side, aInputRedstone, aCoverID, aCoverVariable.get(), aTileEntity, aTimer)); - return aCoverVariable; - } - - @Override - protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, - float aY, float aZ) { - return onCoverRightclick(side, aCoverID, convert(aCoverVariable), aTileEntity, aPlayer, aX, aY, aZ); - } - - @Override - protected ISerializableObject.LegacyCoverData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, - float aY, float aZ) { - if (aCoverVariable == null) aCoverVariable = new ISerializableObject.LegacyCoverData(); - aCoverVariable - .set(onCoverScrewdriverclick(side, aCoverID, convert(aCoverVariable), aTileEntity, aPlayer, aX, aY, aZ)); - return aCoverVariable; - } - - @Override - protected boolean onCoverShiftRightClickImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer) { - return onCoverShiftRightclick(side, aCoverID, convert(aCoverVariable), aTileEntity, aPlayer); - } - - @Override - protected boolean onCoverRemovalImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, boolean aForced) { - return onCoverRemoval(side, aCoverID, convert(aCoverVariable), aTileEntity, aForced); - } - - @Override - protected void onBaseTEDestroyedImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - onBaseTEDestroyed(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected void onCoverUnloadImpl(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - onCoverUnload(aTileEntity); - } - - @Override - protected String getDescriptionImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return getDescription(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected float getBlastProofLevelImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return getBlastProofLevel(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return letsRedstoneGoIn(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return letsRedstoneGoOut(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return letsEnergyIn(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return letsEnergyOut(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { - return letsFluidIn(side, aCoverID, convert(aCoverVariable), aFluid, aTileEntity); - } - - @Override - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, Fluid aFluid, ICoverable aTileEntity) { - return letsFluidOut(side, aCoverID, convert(aCoverVariable), aFluid, aTileEntity); - } - - @Override - protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, int aSlot, ICoverable aTileEntity) { - return letsItemsIn(side, aCoverID, convert(aCoverVariable), aSlot, aTileEntity); - } - - @Override - protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, int aSlot, ICoverable aTileEntity) { - return letsItemsOut(side, aCoverID, convert(aCoverVariable), aSlot, aTileEntity); - } - - @Override - protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return isGUIClickable(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return manipulatesSidedRedstoneOutput(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return alwaysLookConnected(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected byte getRedstoneInputImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return getRedstoneInput(side, aInputRedstone, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, ISerializableObject.LegacyCoverData aCoverVariable, - ICoverable aTileEntity) { - return getTickRate(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected byte getLensColorImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return getLensColor(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - @Override - protected ItemStack getDropImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return getDrop(side, aCoverID, convert(aCoverVariable), aTileEntity); - } - - // endregion - - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return true; - } - - /** - * Called by updateEntity inside the covered TileEntity. aCoverVariable is the Value you returned last time. - */ - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return aCoverVariable; - } - - /** - * Called when someone rightclicks this Cover. - *

- * return true, if something actually happens. - */ - public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - return false; - } - - /** - * Called when someone rightclicks this Cover with a Screwdriver. Doesn't call @onCoverRightclick in this Case. - *

- * return the new Value of the Cover Variable - */ - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - return aCoverVariable; - } - - /** - * Called when someone shift-rightclicks this Cover with no tool. Doesn't call @onCoverRightclick in this Case. - */ - public boolean onCoverShiftRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer) { - if (hasCoverGUI() && aPlayer instanceof EntityPlayerMP) { - lastPlayer = new WeakReference<>(aPlayer); - mPlayerNotified = false; - GT_UIInfos.openCoverUI(aTileEntity, aPlayer, side); - return true; - } - return false; - } - - /** - * Removes the Cover if this returns true, or if aForced is true. Doesn't get called when the Machine Block is - * getting broken, only if you break the Cover away from the Machine. - */ - public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - boolean aForced) { - return true; - } - - public void onCoverUnload(ICoverable aTileEntity) { - - } - - public void onBaseTEDestroyed(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {} - - /** - * Gives a small Text for the status of the Cover. - */ - public String getDescription(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return E; - } - - /** - * How Blast Proof the Cover is. 30 is normal. - */ - public float getBlastProofLevel(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 10.0F; - } - - /** - * If it lets RS-Signals into the Block - *

- * This is just Informative so that Machines know if their Redstone Input is blocked or not - */ - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return false; - } - - /** - * If it lets RS-Signals out of the Block - */ - public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Energy into the Block - */ - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Energy out of the Block - */ - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Liquids into the Block, aFluid can be null meaning if this is generally allowing Fluids or not. - */ - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Liquids out of the Block, aFluid can be null meaning if this is generally allowing Fluids or not. - */ - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Items into the Block, aSlot = -1 means if it is generally accepting Items (return false for no - * Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each - * Slot). - */ - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Items out of the Block, aSlot = -1 means if it is generally accepting Items (return false for no - * Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each - * Slot). - */ - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets you rightclick the Machine normally - */ - public boolean isGUIClickable(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - /** - * Needs to return true for Covers, which have a Redstone Output on their Facing. - */ - public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - /** - * if this Cover should let Pipe Connections look connected even if it is not the case. - */ - public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return false; - } - - /** - * Called to determine the incoming Redstone Signal of a Machine. Returns the original Redstone per default. The - * Cover should @letsRedstoneGoIn or the aInputRedstone Parameter is always 0. - */ - public byte getRedstoneInput(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return letsRedstoneGoIn(side, aCoverID, aCoverVariable, aTileEntity) ? aInputRedstone : 0; - } - - /** - * Gets the Tick Rate for doCoverThings of the Cover - *

- * 0 = No Ticks! Yes, 0 is Default, you have to override this - */ - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 0; - } - - /** - * The MC Color of this Lens. -1 for no Color (meaning this isn't a Lens then). - */ - public byte getLensColor(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return -1; - } - - /** - * @return the ItemStack dropped by this Cover - */ - public ItemStack getDrop(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return GT_OreDictUnificator.get(true, aTileEntity.getCoverItemAtSide(side)); - } -} diff --git a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java deleted file mode 100644 index f5bd7a92f4..0000000000 --- a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java +++ /dev/null @@ -1,839 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.GT_Values.E; - -import java.lang.ref.WeakReference; -import java.util.List; -import java.util.function.Supplier; - -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagInt; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.gui.GT_GUIColorOverride; -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.gui.widgets.GT_CoverTickRateButton; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.common.covers.CoverInfo; - -/** - * For Covers with a special behavior. - * - * @author glease - */ -public abstract class GT_CoverBehaviorBase { - - public WeakReference lastPlayer = null; - private final Class typeToken; - private final ITexture coverFGTexture; - - protected GT_CoverBehaviorBase(Class typeToken) { - this(typeToken, null); - } - - protected GT_CoverBehaviorBase(Class typeToken, ITexture coverTexture) { - this.typeToken = typeToken; - this.coverFGTexture = coverTexture; - reloadColorOverride(); - } - - public void reloadColorOverride() { - this.colorOverride = GT_GUIColorOverride.get(guiTexturePath); - } - - public abstract T createDataObject(int aLegacyData); - - public abstract T createDataObject(); - - public final T createDataObject(NBTBase aNBT) { - // Handle legacy data (migrating from GT_CoverBehavior to GT_CoverBehaviorBase) - if (aNBT instanceof NBTTagInt) { - return createDataObject(((NBTTagInt) aNBT).func_150287_d()); - } - - final T ret = createDataObject(); - ret.loadDataFromNBT(aNBT); - return ret; - } - - public final T cast(ISerializableObject aData) { - if (typeToken.isInstance(aData)) return forceCast(aData); - return null; - } - - private T forceCast(ISerializableObject aData) { - try { - return typeToken.cast(aData); - } catch (Exception e) { - throw new RuntimeException("Casting data in " + this.getClass() + ", data " + aData, e); - } - } - - // region facade - - /** - * Get target facade block. Does not affect rendering of **this** block. It is only used as a hint for other block - * in case of CTM - * - * @return null if none, otherwise return facade target block - */ - public final Block getFacadeBlock(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getFacadeBlockImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Get target facade block. Does not affect rendering of **this** block. It is only used as a hint for other block - * in case of CTM - * - * @return 0 if none, otherwise return facade target meta - */ - public final int getFacadeMeta(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getFacadeMetaImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Get the display stack. Default to {@code int2Stack(aCoverID)} - */ - public final ItemStack getDisplayStack(int aCoverID, ISerializableObject aCoverVariable) { - return getDisplayStackImpl(aCoverID, forceCast(aCoverVariable)); - } - - /** - * Get the special foreground cover texture associated with this cover. Return null if one should use the texture - * passed to {@link gregtech.api.GregTech_API#registerCover(ItemStack, ITexture, GT_CoverBehaviorBase)} or its - * overloads. - */ - public final ITexture getSpecialCoverFGTexture(ForgeDirection side, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return getSpecialCoverFGTextureImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Get the special cover texture associated with this cover. Return null if one should use the texture passed to - * {@link gregtech.api.GregTech_API#registerCover(ItemStack, ITexture, GT_CoverBehaviorBase)} or its overloads. - */ - public final ITexture getSpecialCoverTexture(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getSpecialCoverTextureImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Return whether cover data needs to be synced to client upon tile entity creation or cover placement. - *

- * Note if you want to sync the data afterwards you will have to manually do it by calling - * {@link ICoverable#issueCoverUpdate(ForgeDirection)} This option only affects the initial sync. - */ - public final boolean isDataNeededOnClient(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return isDataNeededOnClientImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Called upon receiving data from network. Use {@link ICoverable#isClientSide()} to determine the side. - */ - public final void onDataChanged(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - onDataChangedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Called before receiving data from network. Use {@link ICoverable#isClientSide()} to determine the side. - */ - public final void preDataChanged(ForgeDirection side, int aCoverID, int aNewCoverId, - ISerializableObject aCoverVariable, ISerializableObject aNewCoverVariable, ICoverable aTileEntity) { - preDataChangedImpl( - side, - aCoverID, - aNewCoverId, - forceCast(aCoverVariable), - forceCast(aNewCoverVariable), - aTileEntity); - } - - /** - * Called upon cover being removed. Called on both server and client. - */ - public final void onDropped(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - onDroppedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - public final boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return isRedstoneSensitiveImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aTimer); - } - - /** - * Called by updateEntity inside the covered TileEntity. aCoverVariable is the Value you returned last time. - */ - public final T doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity, long aTimer) { - return doCoverThingsImpl(side, aInputRedstone, aCoverID, forceCast(aCoverVariable), aTileEntity, aTimer); - } - - /** - * Called when someone rightclicks this Cover. - *

- * return true, if something actually happens. - */ - public final boolean onCoverRightClick(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - return onCoverRightClickImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aPlayer, aX, aY, aZ); - } - - /** - * Called when someone rightclicks this Cover with a Screwdriver. Doesn't call @onCoverRightclick in this Case. - *

- * return the new Value of the Cover Variable - */ - public final T onCoverScrewdriverClick(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - return onCoverScrewdriverClickImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aPlayer, aX, aY, aZ); - } - - /** - * Called when someone shift-rightclicks this Cover with no tool. Doesn't call @onCoverRightclick in this Case. - */ - public final boolean onCoverShiftRightClick(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer) { - return onCoverShiftRightClickImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aPlayer); - } - - /** - * Removes the Cover if this returns true, or if aForced is true. Doesn't get called when the Machine Block is - * getting broken, only if you break the Cover away from the Machine. - */ - public final boolean onCoverRemoval(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity, boolean aForced) { - return onCoverRemovalImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity, aForced); - } - - /** - * Called upon Base TE being destroyed (once getDrops is called), thus getting called only when destroyed in - * survival. - */ - public final void onBaseTEDestroyed(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - onBaseTEDestroyedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Gives a small Text for the status of the Cover. - */ - public final String getDescription(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getDescriptionImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Called when Base TE being unloaded. - */ - public void onCoverUnload(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - onCoverUnloadImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * How Blast Proof the Cover is. 30 is normal. - */ - public final float getBlastProofLevel(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getBlastProofLevelImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * If it lets RS-Signals into the Block - *

- * This is just Informative so that Machines know if their Redstone Input is blocked or not - */ - public final boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return letsRedstoneGoInImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * If it lets RS-Signals out of the Block - */ - public final boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return letsRedstoneGoOutImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * If it lets Energy into the Block - */ - public final boolean letsEnergyIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return letsEnergyInImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * If it lets Energy out of the Block - */ - public final boolean letsEnergyOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return letsEnergyOutImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * If it lets Liquids into the Block, aFluid can be null meaning if this is generally allowing Fluids or not. - */ - public final boolean letsFluidIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - Fluid aFluid, ICoverable aTileEntity) { - return letsFluidInImpl(side, aCoverID, forceCast(aCoverVariable), aFluid, aTileEntity); - } - - /** - * If it lets Liquids out of the Block, aFluid can be null meaning if this is generally allowing Fluids or not. - */ - public final boolean letsFluidOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - Fluid aFluid, ICoverable aTileEntity) { - return letsFluidOutImpl(side, aCoverID, forceCast(aCoverVariable), aFluid, aTileEntity); - } - - /** - * If it lets Items into the Block, aSlot = -1 means if it is generally accepting Items (return false for no - * reaction at all), aSlot = -2 means if it would accept for all Slots Impl(return true to skip the Checks for each - * Slot). - */ - public final boolean letsItemsIn(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return letsItemsInImpl(side, aCoverID, forceCast(aCoverVariable), aSlot, aTileEntity); - } - - /** - * If it lets Items out of the Block, aSlot = -1 means if it is generally accepting Items (return false for no - * reaction at all), aSlot = -2 means if it would accept for all Slots Impl(return true to skip the Checks for each - * Slot). - */ - public final boolean letsItemsOut(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return letsItemsOutImpl(side, aCoverID, forceCast(aCoverVariable), aSlot, aTileEntity); - } - - /** - * If it lets you rightclick the Machine normally - */ - public final boolean isGUIClickable(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return isGUIClickableImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Needs to return true for Covers, which have a Redstone Output on their Facing. - */ - public final boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return manipulatesSidedRedstoneOutputImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * if this Cover should let Pipe Connections look connected even if it is not the case. - */ - public final boolean alwaysLookConnected(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return alwaysLookConnectedImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Called to determine the incoming Redstone Signal of a Machine. Returns the original Redstone per default. The - * Cover should @letsRedstoneGoIn or the aInputRedstone Parameter is always 0. - */ - public final byte getRedstoneInput(ForgeDirection side, byte aInputRedstone, int aCoverID, - ISerializableObject aCoverVariable, ICoverable aTileEntity) { - return getRedstoneInputImpl(side, aInputRedstone, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Gets the Tick Rate for doCoverThings of the Cover - *

- * 0 = No Ticks! Yes, 0 is Default, you have to override this - */ - public final int getTickRate(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getTickRateImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * The MC Color of this Lens. -1 for no Color (meaning this isn't a Lens then). - */ - public final byte getLensColor(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getLensColorImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * @return the ItemStack dropped by this Cover - */ - public final ItemStack getDrop(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) { - return getDropImpl(side, aCoverID, forceCast(aCoverVariable), aTileEntity); - } - - /** - * Called when the cover is initially attached to a machine. - * - * @param player The attaching player - * @param aCover An {@link ItemStack} containing the cover - * @param aTileEntity The machine receiving the cover - * @param side Which side the cover is attached to - */ - public void onPlayerAttach(EntityPlayer player, ItemStack aCover, ICoverable aTileEntity, ForgeDirection side) { - // Do nothing by default. - } - - // endregion - - // region UI stuff - - protected GT_TooltipDataCache mTooltipCache = new GT_TooltipDataCache(); - protected GT_GUIColorOverride colorOverride; - private static final String guiTexturePath = "gregtech:textures/gui/GuiCover.png"; - - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new UIFactory(buildContext).createWindow(); - } - - /** - * Creates {@link ModularWindow} for this cover. This is separated from base class, as attaching the same covers in - * different sides of the same tile needs different UI with different context. - */ - protected class UIFactory { - - private final GT_CoverUIBuildContext uiBuildContext; - - public UIFactory(GT_CoverUIBuildContext buildContext) { - this.uiBuildContext = buildContext; - } - - public ModularWindow createWindow() { - ModularWindow.Builder builder = ModularWindow.builder(getGUIWidth(), getGUIHeight()); - builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); - builder.setGuiTint(getUIBuildContext().getGuiColorization()); - maybeBindPlayerInventory(builder); - addTitleToUI(builder); - addUIWidgets(builder); - if (getUIBuildContext().isAnotherWindow()) { - builder.widget( - ButtonWidget.closeWindowButton(true) - .setPos(getGUIWidth() - 15, 3)); - } - - final CoverInfo coverInfo = uiBuildContext.getTile() - .getCoverInfoAtSide(uiBuildContext.getCoverSide()); - final GT_CoverBehaviorBase behavior = coverInfo.getCoverBehavior(); - if (coverInfo.getMinimumTickRate() > 0 && behavior.allowsTickRateAddition()) { - builder.widget( - new GT_CoverTickRateButton(coverInfo, builder).setPos(getGUIWidth() - 24, getGUIHeight() - 24)); - } - - return builder.build(); - } - - protected void maybeBindPlayerInventory(ModularWindow.Builder builder) { - if (doesBindPlayerInventory() && !getUIBuildContext().isAnotherWindow()) { - builder.bindPlayerInventory(getUIBuildContext().getPlayer(), 7, GUITextureSet.DEFAULT.getItemSlot()); - } - } - - /** - * Override this to add widgets for your UI. - */ - protected void addUIWidgets(ModularWindow.Builder builder) {} - - public GT_CoverUIBuildContext getUIBuildContext() { - return uiBuildContext; - } - - /** - * Can return null when cover data is invalid e.g. tile is broken or cover is removed - */ - @Nullable - public T getCoverData() { - if (isCoverValid()) { - return forceCast( - getUIBuildContext().getTile() - .getComplexCoverDataAtSide(getUIBuildContext().getCoverSide())); - } else { - return null; - } - } - - public boolean setCoverData(T data) { - if (isCoverValid()) { - getUIBuildContext().getTile() - .receiveCoverData( - getUIBuildContext().getCoverSide(), - getUIBuildContext().getCoverID(), - data, - getUIBuildContext().getPlayer() instanceof EntityPlayerMP - ? (EntityPlayerMP) getUIBuildContext().getPlayer() - : null); - return true; - } else { - return false; - } - } - - public boolean isCoverValid() { - return !getUIBuildContext().getTile() - .isDead() - && getUIBuildContext().getTile() - .getCoverBehaviorAtSideNew(getUIBuildContext().getCoverSide()) != GregTech_API.sNoBehavior; - } - - protected void addTitleToUI(ModularWindow.Builder builder) { - ItemStack coverItem = GT_Utility.intToStack(getUIBuildContext().getCoverID()); - if (coverItem != null) { - builder.widget( - new ItemDrawable(coverItem).asWidget() - .setPos(5, 5) - .setSize(16, 16)) - .widget( - new TextWidget(coverItem.getDisplayName()).setDefaultColor(COLOR_TITLE.get()) - .setPos(25, 9)); - } - } - - protected int getGUIWidth() { - return 176; - } - - protected int getGUIHeight() { - return 107; - } - - protected boolean doesBindPlayerInventory() { - return false; - } - - protected int getTextColorOrDefault(String textType, int defaultColor) { - return colorOverride.getTextColorOrDefault(textType, defaultColor); - } - - protected final Supplier COLOR_TITLE = () -> getTextColorOrDefault("title", 0x222222); - protected final Supplier COLOR_TEXT_GRAY = () -> getTextColorOrDefault("text_gray", 0x555555); - protected final Supplier COLOR_TEXT_WARN = () -> getTextColorOrDefault("text_warn", 0xff0000); - } - - // endregion - - // region impl - - protected Block getFacadeBlockImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return null; - } - - protected int getFacadeMetaImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return 0; - } - - protected ItemStack getDisplayStackImpl(int aCoverID, T aCoverVariable) { - return GT_Utility.intToStack(aCoverID); - } - - protected ITexture getSpecialCoverFGTextureImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return coverFGTexture; - } - - protected ITexture getSpecialCoverTextureImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return null; - } - - protected boolean isDataNeededOnClientImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - protected void onDataChangedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} - - protected void preDataChangedImpl(ForgeDirection side, int aCoverID, int aNewCoverId, T aCoverVariable, - T aNewCoverVariable, ICoverable aTileEntity) {} - - protected void onDroppedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} - - protected void onBaseTEDestroyedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) {} - - protected void onCoverUnloadImpl(ForgeDirection side, int aCoverID, ISerializableObject aCoverVariable, - ICoverable aTileEntity) {} - - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return false; - } - - /** - * Called by updateEntity inside the covered TileEntity. aCoverVariable is the Value you returned last time. - */ - protected T doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, T aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return aCoverVariable; - } - - /** - * Called when someone rightclicks this Cover. - *

- * return true, if something actually happens. - */ - protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - return false; - } - - /** - * Called when someone rightclicks this Cover with a Screwdriver. Doesn't call @onCoverRightclick in this Case. - *

- * return the new Value of the Cover Variable - */ - protected T onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - return aCoverVariable; - } - - /** - * Called when someone shift-rightclicks this Cover with no tool. Doesn't call @onCoverRightclick in this Case. - */ - protected boolean onCoverShiftRightClickImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer) { - if (hasCoverGUI() && aPlayer instanceof EntityPlayerMP) { - lastPlayer = new WeakReference<>(aPlayer); - GT_UIInfos.openCoverUI(aTileEntity, aPlayer, side); - return true; - } - return false; - } - - /** - * Removes the Cover if this returns true, or if aForced is true. Doesn't get called when the Machine Block is - * getting broken, only if you break the Cover away from the Machine. - */ - protected boolean onCoverRemovalImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, - boolean aForced) { - return true; - } - - /** - * Gives a small Text for the status of the Cover. - */ - protected String getDescriptionImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return E; - } - - /** - * How Blast Proof the Cover is. 30 is normal. - */ - protected float getBlastProofLevelImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return 10.0F; - } - - /** - * If it lets RS-Signals into the Block - *

- * This is just Informative so that Machines know if their Redstone Input is blocked or not - */ - protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets RS-Signals out of the Block - */ - protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Energy into the Block - */ - protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Energy out of the Block - */ - protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Liquids into the Block, aFluid can be null meaning if this is generally allowing Fluids or not. - */ - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Liquids out of the Block, aFluid can be null meaning if this is generally allowing Fluids or not. - */ - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Items into the Block, aSlot = -1 means if it is generally accepting Items (return false for no - * Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each - * Slot). - */ - protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets Items out of the Block, aSlot = -1 means if it is generally accepting Items (return false for no - * Interaction at all), aSlot = -2 means if it would accept for all Slots (return true to skip the Checks for each - * Slot). - */ - protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return false; - } - - /** - * If it lets you rightclick the Machine normally - */ - protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return true; - } - - /** - * Needs to return true for Covers, which have a Redstone Output on their Facing. - */ - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - /** - * if this Cover should let Pipe Connections look connected even if it is not the case. - */ - protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - /** - * Called to determine the incoming Redstone Signal of a Machine. Returns the original Redstone per default. The - * Cover should @letsRedstoneGoIn or the aInputRedstone Parameter is always 0. - */ - protected byte getRedstoneInputImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, T aCoverVariable, - ICoverable aTileEntity) { - return letsRedstoneGoIn(side, aCoverID, aCoverVariable, aTileEntity) ? aInputRedstone : 0; - } - - /** - * Gets the Tick Rate for doCoverThings of the Cover - *

- * 0 = No Ticks! Yes, 0 is Default, you have to override this - */ - protected int getTickRateImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return 0; - } - - /** - * The MC Color of this Lens. -1 for no Color (meaning this isn't a Lens then). - */ - protected byte getLensColorImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return -1; - } - - /** - * @return the ItemStack dropped by this Cover - */ - protected ItemStack getDropImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return GT_OreDictUnificator.get(true, aTileEntity.getCoverItemAtSide(side)); - } - - // endregion - - // region no data - - /** - * Checks if the Cover can be placed on this. - */ - public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { - return true; - } - - public boolean hasCoverGUI() { - return false; - } - - /** - * Called when someone rightclicks this Cover Client Side - *

- * return true, if something actually happens. - */ - public boolean onCoverRightclickClient(ForgeDirection side, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, - float aY, float aZ) { - return false; - } - - /** - * If this is a simple Cover, which can also be used on Bronze Machines and similar. - */ - public boolean isSimpleCover() { - return false; - } - - /** - * sets the Cover upon placement. - */ - public void placeCover(ForgeDirection side, ItemStack aCover, ICoverable aTileEntity) { - aTileEntity.setCoverIDAtSide(side, GT_Utility.stackToInt(aCover)); - } - - public boolean allowsCopyPasteTool() { - return true; - } - - public boolean allowsTickRateAddition() { - return true; - } - - @NotNull - public final List getAdditionalTooltip(ISerializableObject coverData) { - return getAdditionalTooltipImpl(forceCast(coverData)); - } - - /** - * Override to add to the tooltip generated when a user hovers over the cover on the left side of a machine's UI. - * - * @param coverData The cover data associated with the cover on a particular side. - * @return A list of new tooltip entries. Entries are inserted at the top, just after the name and direction line. - */ - protected List getAdditionalTooltipImpl(T coverData) { - return ImmutableList.of(); - } - // endregion -} diff --git a/src/main/java/gregtech/api/util/GT_CreativeTab.java b/src/main/java/gregtech/api/util/GT_CreativeTab.java deleted file mode 100644 index 1049f40278..0000000000 --- a/src/main/java/gregtech/api/util/GT_CreativeTab.java +++ /dev/null @@ -1,26 +0,0 @@ -package gregtech.api.util; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.ItemList; - -public class GT_CreativeTab extends CreativeTabs { - - public GT_CreativeTab(String aName, String aLocalName) { - super("GregTech." + aName); - GT_LanguageManager.addStringLocalization("itemGroup.GregTech." + aName, aLocalName); - } - - @Override - public ItemStack getIconItemStack() { - return ItemList.Tool_Cheat.get(1, new ItemStack(Blocks.iron_block, 1)); - } - - @Override - public Item getTabIconItem() { - return ItemList.Circuit_Integrated.getItem(); - } -} diff --git a/src/main/java/gregtech/api/util/GT_ExoticEnergyInputHelper.java b/src/main/java/gregtech/api/util/GT_ExoticEnergyInputHelper.java deleted file mode 100644 index d59796b251..0000000000 --- a/src/main/java/gregtech/api/util/GT_ExoticEnergyInputHelper.java +++ /dev/null @@ -1,114 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; - -public class GT_ExoticEnergyInputHelper { - - /** - * The Valid Types of TecTech Hatch List. - */ - private static final List> sExoticEnergyHatchType = new ArrayList<>(); - - static { - tryRegister("com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti"); - tryRegister("com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyTunnel"); - } - - public static void register(Class clazz) { - if (!GT_MetaTileEntity_Hatch.class.isAssignableFrom(clazz)) throw new IllegalArgumentException( - clazz.getName() + " is not a subclass of " + GT_MetaTileEntity_Hatch.class.getName()); - sExoticEnergyHatchType.add(clazz); - } - - @SuppressWarnings("unchecked") - public static void tryRegister(String className) { - Class clazz; - try { - clazz = Class.forName(className); - } catch (ClassNotFoundException e) { - return; - } - if (!GT_MetaTileEntity_Hatch.class.isAssignableFrom(clazz)) throw new IllegalArgumentException( - clazz.getName() + " is not a subclass of " + GT_MetaTileEntity_Hatch.class.getName()); - sExoticEnergyHatchType.add((Class) clazz); - } - - public static boolean drainEnergy(long aEU, Collection hatches) { - for (GT_MetaTileEntity_Hatch tHatch : hatches) { - long tDrain = Math.min( - tHatch.getBaseMetaTileEntity() - .getStoredEU(), - aEU); - tHatch.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(tDrain, false); - aEU -= tDrain; - } - return aEU <= 0; - } - - public static boolean isExoticEnergyInput(IMetaTileEntity aHatch) { - for (Class clazz : sExoticEnergyHatchType) { - if (clazz.isInstance(aHatch)) return true; - } - return false; - } - - public static long getTotalEuMulti(Collection hatches) { - long rEU = 0L; - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(hatches)) { - rEU += tHatch.getBaseMetaTileEntity() - .getInputVoltage() * tHatch.maxWorkingAmperesIn(); - } - return rEU; - } - - public static long getMaxInputVoltageMulti(Collection hatches) { - long rVoltage = 0; - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(hatches)) { - rVoltage += tHatch.getBaseMetaTileEntity() - .getInputVoltage(); - } - return rVoltage; - } - - public static long getAverageInputVoltageMulti(Collection hatches) { - long rVoltage = 0; - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(hatches)) { - rVoltage += tHatch.getBaseMetaTileEntity() - .getInputVoltage(); - } - if (hatches.isEmpty()) { - return 0; - } - return rVoltage / hatches.size(); - } - - public static long getMaxInputAmpsMulti(Collection hatches) { - long rAmp = 0; - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(hatches)) { - rAmp += tHatch.getBaseMetaTileEntity() - .getInputAmperage(); - } - return rAmp; - } - - public static long getMaxWorkingInputAmpsMulti(Collection hatches) { - long rAmp = 0; - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(hatches)) { - rAmp += tHatch.maxWorkingAmperesIn(); - } - return rAmp; - } - - public static List> getAllClasses() { - return Collections.unmodifiableList(sExoticEnergyHatchType); - } -} diff --git a/src/main/java/gregtech/api/util/GT_FoodStat.java b/src/main/java/gregtech/api/util/GT_FoodStat.java deleted file mode 100644 index 5eda76f9d0..0000000000 --- a/src/main/java/gregtech/api/util/GT_FoodStat.java +++ /dev/null @@ -1,122 +0,0 @@ -package gregtech.api.util; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.PotionEffect; - -import gregtech.api.damagesources.GT_DamageSources; -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.IFoodStat; -import gregtech.api.items.GT_MetaBase_Item; - -public class GT_FoodStat implements IFoodStat { - - private final int mFoodLevel; - private final int[] mPotionEffects; - private final float mSaturation; - private final EnumAction mAction; - private final ItemStack mEmptyContainer; - private final boolean mAlwaysEdible, mInvisibleParticles, mIsRotten; - private boolean mExplosive = false, mMilk = false; - - /** - * @param aFoodLevel Amount of Food in Half Bacon [0 - 20] - * @param aSaturation Amount of Saturation [0.0F - 1.0F] - * @param aAction The Action to be used. If this is null, it uses the Eating Action - * @param aEmptyContainer An empty Container (Optional) - * @param aAlwaysEdible If this Item is always edible, like Golden Apples or Potions - * @param aInvisibleParticles If the Particles of the Potion Effects are invisible - * @param aPotionEffects An Array of Potion Effects with %4==0 Elements as follows ID of a Potion Effect. 0 for - * none Duration of the Potion in Ticks Level of the Effect. [0, 1, 2] are for [I, II, - * III] The likelihood that this Potion Effect takes place upon being eaten [1 - 100] - */ - public GT_FoodStat(int aFoodLevel, float aSaturation, EnumAction aAction, ItemStack aEmptyContainer, - boolean aAlwaysEdible, boolean aInvisibleParticles, boolean aIsRotten, int... aPotionEffects) { - mFoodLevel = aFoodLevel; - mSaturation = aSaturation; - mAction = aAction == null ? EnumAction.eat : aAction; - mPotionEffects = aPotionEffects; - mEmptyContainer = GT_Utility.copyOrNull(aEmptyContainer); - mInvisibleParticles = aInvisibleParticles; - mAlwaysEdible = aAlwaysEdible; - mIsRotten = aIsRotten; - } - - public GT_FoodStat setExplosive() { - mExplosive = true; - return this; - } - - public GT_FoodStat setMilk() { - mMilk = true; - return this; - } - - @Override - public int getFoodLevel(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer) { - return mFoodLevel; - } - - @Override - public float getSaturation(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer) { - return mSaturation; - } - - @Override - public void onEaten(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer) { - aStack.stackSize--; - ItemStack tStack = GT_OreDictUnificator.get(GT_Utility.copyOrNull(mEmptyContainer)); - if (tStack != null && !aPlayer.inventory.addItemStackToInventory(tStack)) - aPlayer.dropPlayerItemWithRandomChoice(tStack, true); - - new WorldSpawnedEventBuilder.SoundAtEntityEventBuilder().setIdentifier(SoundResource.RANDOM_BURP) - .setVolume(0.5F) - .setPitch(aPlayer.worldObj.rand.nextFloat() * 0.1F + 0.9F) - .setEntity(aPlayer) - .setWorld(aPlayer.worldObj) - .run(); - - if (!aPlayer.worldObj.isRemote) { - if (mMilk) { - aPlayer.curePotionEffects(new ItemStack(Items.milk_bucket, 1, 0)); - } - for (int i = 3; i < mPotionEffects.length; i += 4) { - if (aPlayer.worldObj.rand.nextInt(100) < mPotionEffects[i]) { - aPlayer.addPotionEffect( - new PotionEffect( - mPotionEffects[i - 3], - mPotionEffects[i - 2], - mPotionEffects[i - 1], - mInvisibleParticles)); - } - } - if (mExplosive) { - new WorldSpawnedEventBuilder.ExplosionEffectEventBuilder().setSmoking(true) - .setFlaming(true) - .setStrength(4f) - .setPosition(aPlayer.posX, aPlayer.posY, aPlayer.posZ) - .setEntity(aPlayer) - .setWorld(aPlayer.worldObj) - .run(); - aPlayer.attackEntityFrom(GT_DamageSources.getExplodingDamage(), Float.MAX_VALUE); - } - } - } - - @Override - public EnumAction getFoodAction(GT_MetaBase_Item aItem, ItemStack aStack) { - return mAction; - } - - @Override - public boolean alwaysEdible(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer) { - return mAlwaysEdible; - } - - @Override - public boolean isRotten(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer) { - return mIsRotten; - } -} diff --git a/src/main/java/gregtech/api/util/GT_Forestry_Compat.java b/src/main/java/gregtech/api/util/GT_Forestry_Compat.java deleted file mode 100644 index 554964a4ed..0000000000 --- a/src/main/java/gregtech/api/util/GT_Forestry_Compat.java +++ /dev/null @@ -1,193 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.recipe.RecipeMaps.centrifugeNonCellRecipes; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import java.util.Map; - -import net.minecraft.item.ItemStack; - -import forestry.api.recipes.ICentrifugeRecipe; -import forestry.api.recipes.ISqueezerRecipe; -import forestry.api.recipes.RecipeManagers; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.recipe.RecipeMaps; - -public class GT_Forestry_Compat { - - public static void populateFakeNeiRecipes() { - if (ItemList.FR_Bee_Drone.get(1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.FR_Bee_Drone.getWildcard(1L)) - .itemOutputs(ItemList.FR_Bee_Drone.getWithName(1L, "Scanned Drone")) - .fluidInputs(Materials.Honey.getFluid(100L)) - .duration(25 * SECONDS) - .eut(2) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(scannerFakeRecipes); - } - if (ItemList.FR_Bee_Princess.get(1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.FR_Bee_Princess.getWildcard(1L)) - .itemOutputs(ItemList.FR_Bee_Princess.getWithName(1L, "Scanned Princess")) - .fluidInputs(Materials.Honey.getFluid(100L)) - .duration(25 * SECONDS) - .eut(2) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(scannerFakeRecipes); - } - if (ItemList.FR_Bee_Queen.get(1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.FR_Bee_Queen.getWildcard(1L)) - .itemOutputs(ItemList.FR_Bee_Queen.getWithName(1L, "Scanned Queen")) - .fluidInputs(Materials.Honey.getFluid(100L)) - .duration(25 * SECONDS) - .eut(2) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(scannerFakeRecipes); - } - if (ItemList.FR_Tree_Sapling.get(1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.FR_Tree_Sapling.getWildcard(1L)) - .itemOutputs(ItemList.FR_Tree_Sapling.getWithName(1L, "Scanned Sapling")) - .fluidInputs(Materials.Honey.getFluid(100L)) - .duration(25 * SECONDS) - .eut(2) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(scannerFakeRecipes); - } - if (ItemList.FR_Butterfly.get(1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.FR_Butterfly.getWildcard(1L)) - .itemOutputs(ItemList.FR_Butterfly.getWithName(1L, "Scanned Butterfly")) - .fluidInputs(Materials.Honey.getFluid(100L)) - .duration(25 * SECONDS) - .eut(2) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(scannerFakeRecipes); - } - if (ItemList.FR_Larvae.get(1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.FR_Larvae.getWildcard(1L)) - .itemOutputs(ItemList.FR_Larvae.getWithName(1L, "Scanned Larvae")) - .fluidInputs(Materials.Honey.getFluid(100L)) - .duration(25 * SECONDS) - .eut(2) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(scannerFakeRecipes); - } - if (ItemList.FR_Serum.get(1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.FR_Serum.getWildcard(1L)) - .itemOutputs(ItemList.FR_Serum.getWithName(1L, "Scanned Serum")) - .fluidInputs(Materials.Honey.getFluid(100L)) - .duration(25 * SECONDS) - .eut(2) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(scannerFakeRecipes); - } - if (ItemList.FR_Caterpillar.get(1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.FR_Caterpillar.getWildcard(1L)) - .itemOutputs(ItemList.FR_Caterpillar.getWithName(1L, "Scanned Caterpillar")) - .fluidInputs(Materials.Honey.getFluid(100L)) - .duration(25 * SECONDS) - .eut(2) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(scannerFakeRecipes); - } - if (ItemList.FR_PollenFertile.get(1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.FR_PollenFertile.getWildcard(1L)) - .itemOutputs(ItemList.FR_PollenFertile.getWithName(1L, "Scanned Pollen")) - .fluidInputs(Materials.Honey.getFluid(100L)) - .duration(25 * SECONDS) - .eut(2) - .noOptimize() - .ignoreCollision() - .fake() - .addTo(scannerFakeRecipes); - } - } - - public static void transferCentrifugeRecipes() { - try { - for (ICentrifugeRecipe tRecipe : RecipeManagers.centrifugeManager.recipes()) { - Map outputs = tRecipe.getAllProducts(); - ItemStack[] tOutputs = new ItemStack[outputs.size()]; - int[] tChances = new int[outputs.size()]; - int i = 0; - for (Map.Entry entry : outputs.entrySet()) { - tChances[i] = (int) (entry.getValue() * 10000); - tOutputs[i] = entry.getKey() - .copy(); - i++; - } - GT_Values.RA.stdBuilder() - .itemInputs(tRecipe.getInput()) - .itemOutputs(tOutputs) - .outputChances(tChances) - .duration(6 * SECONDS + 8 * TICKS) - .eut(5) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(tRecipe.getInput()) - .itemOutputs(tOutputs) - .outputChances(tChances) - .duration(6 * SECONDS + 8 * TICKS) - .eut(5) - .addTo(centrifugeNonCellRecipes); - } - } catch (Throwable e) { - if (GT_Values.D1) { - e.printStackTrace(GT_Log.err); - } - } - } - - public static void transferSqueezerRecipes() { - try { - for (ISqueezerRecipe tRecipe : RecipeManagers.squeezerManager.recipes()) { - if ((tRecipe.getResources().length == 1) && (tRecipe.getFluidOutput() != null) - && (tRecipe.getResources()[0] != null)) { - GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder(); - recipeBuilder.itemInputs(tRecipe.getResources()[0]); - if (tRecipe.getRemnants() != null) { - recipeBuilder.itemOutputs(tRecipe.getRemnants()) - .outputChances((int) (tRecipe.getRemnantsChance() * 10000)); - } - recipeBuilder.fluidOutputs(tRecipe.getFluidOutput()) - .duration(1 * SECONDS + 12 * TICKS) - .eut(8) - .addTo(RecipeMaps.fluidExtractionRecipes); - } - } - } catch (Throwable e) { - if (GT_Values.D1) { - e.printStackTrace(GT_Log.err); - } - } - } -} diff --git a/src/main/java/gregtech/api/util/GT_GC_Compat.java b/src/main/java/gregtech/api/util/GT_GC_Compat.java deleted file mode 100644 index 24710ab0ac..0000000000 --- a/src/main/java/gregtech/api/util/GT_GC_Compat.java +++ /dev/null @@ -1,52 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.Mods.GalacticraftCore; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; - -import micdoodle8.mods.galacticraft.api.power.EnergySource; -import micdoodle8.mods.galacticraft.api.power.EnergySource.EnergySourceAdjacent; -import micdoodle8.mods.galacticraft.api.power.IEnergyHandlerGC; -import micdoodle8.mods.galacticraft.api.transmission.NetworkType; -import micdoodle8.mods.galacticraft.api.transmission.tile.IConnector; -import micdoodle8.mods.galacticraft.core.energy.EnergyConfigHandler; - -public class GT_GC_Compat { - - public static long insertEnergyInto(TileEntity tTileEntity, long aVoltage, ForgeDirection tDirection) { - // GC Compat - if (GalacticraftCore.isModLoaded() && tTileEntity instanceof IEnergyHandlerGC) { - if (!(tTileEntity instanceof IConnector) - || ((IConnector) tTileEntity).canConnect(tDirection, NetworkType.POWER)) { - EnergySource eSource = new EnergySourceAdjacent(tDirection); - - float tSizeToReceive = aVoltage * EnergyConfigHandler.IC2_RATIO, - tStored = ((IEnergyHandlerGC) tTileEntity).getEnergyStoredGC(eSource); - if (tSizeToReceive >= tStored - || tSizeToReceive <= ((IEnergyHandlerGC) tTileEntity).getMaxEnergyStoredGC(eSource) - tStored) { - float tReceived = ((IEnergyHandlerGC) tTileEntity).receiveEnergyGC(eSource, tSizeToReceive, false); - if (tReceived > 0) { - tSizeToReceive -= tReceived; - while (tSizeToReceive > 0) { - tReceived = ((IEnergyHandlerGC) tTileEntity) - .receiveEnergyGC(eSource, tSizeToReceive, false); - if (tReceived < 1) break; - tSizeToReceive -= tReceived; - } - return 1; - } - } - } - return 0; - } - return 2; - } - - public static boolean canConnect(TileEntity tTileEntity, ForgeDirection tDirection) { - // GC Compat - return GalacticraftCore.isModLoaded() && tTileEntity instanceof IEnergyHandlerGC - && (!(tTileEntity instanceof IConnector) - || ((IConnector) tTileEntity).canConnect(tDirection, NetworkType.POWER)); - } -} diff --git a/src/main/java/gregtech/api/util/GT_HatchElementBuilder.java b/src/main/java/gregtech/api/util/GT_HatchElementBuilder.java deleted file mode 100644 index 416edc9c11..0000000000 --- a/src/main/java/gregtech/api/util/GT_HatchElementBuilder.java +++ /dev/null @@ -1,547 +0,0 @@ -package gregtech.api.util; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.EnumSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.function.BiFunction; -import java.util.function.BiPredicate; -import java.util.function.Consumer; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.stream.Collectors; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.IChatComponent; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor; -import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.IStructureElementChain; -import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement; -import com.gtnewhorizon.structurelib.structure.StructureUtility; -import com.gtnewhorizon.structurelib.util.ItemStackPredicate; - -import gnu.trove.TIntCollection; -import gnu.trove.list.array.TIntArrayList; -import gnu.trove.set.hash.TIntHashSet; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.common.blocks.GT_Item_Machines; - -public class GT_HatchElementBuilder { - - private interface Builtin { - } - - private IGT_HatchAdder mAdder; - private int mCasingIndex = -1; - private int mDot = -1; - private BiPredicate mShouldSkip; - private BiFunction> mHatchItemFilter; - private Supplier mHatchItemType; - private Predicate mReject; - private boolean mCacheHint; - private boolean mNoStop; - private boolean mExclusive; - private EnumSet mDisallowedDirection = EnumSet.noneOf(ForgeDirection.class); - - private GT_HatchElementBuilder() {} - - public static GT_HatchElementBuilder builder() { - return new GT_HatchElementBuilder<>(); - } - - // region composite - - /** - * Set all of adder, hint and hatchItemFilter. Provide a reasonable default for shouldSkip. TODO add doc - */ - @SafeVarargs - public final GT_HatchElementBuilder anyOf(IHatchElement... elements) { - if (elements == null || elements.length == 0) throw new IllegalArgumentException(); - return adder( - Arrays.stream(elements) - .map( - e -> e.adder() - .rebrand()) - .reduce(IGT_HatchAdder::orElse) - .get()).hatchClasses( - Arrays.stream(elements) - .map(IHatchElement::mteClasses) - .flatMap(Collection::stream) - .collect(Collectors.toList())) - .cacheHint( - () -> Arrays.stream(elements) - .map(IHatchElement::name) - .sorted() - .collect(Collectors.joining(" or ", "of type ", ""))); - } - - /** - * Set all of adder, hint and hatchItemFilter. Provide a reasonable default for shouldSkip. - *

- * Will rotate through all elements TODO add doc - */ - @SafeVarargs - public final GT_HatchElementBuilder atLeast(IHatchElement... elements) { - if (elements == null || elements.length == 0) throw new IllegalArgumentException(); - return atLeast( - Arrays.stream(elements) - .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting()))); - } - - /** - * Set all of adder, hint and hatchItemFilter. Provide a reasonable default for shouldSkip. - *

- * Will rotate through all elements TODO add doc - */ - public final GT_HatchElementBuilder atLeastList(List> elements) { - if (elements == null || elements.isEmpty()) throw new IllegalArgumentException(); - return atLeast( - elements.stream() - .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting()))); - } - - /** - * Set all of adder, hint and hatchItemFilter. Provide a reasonable default for shouldSkip. TODO add doc - */ - public final GT_HatchElementBuilder atLeast(Map, ? extends Number> elements) { - if (elements == null || elements.isEmpty() || elements.containsKey(null) || elements.containsValue(null)) - throw new IllegalArgumentException(); - List> list = elements.keySet() - .stream() - .map(IHatchElement::mteClasses) - .flatMap(Collection::stream) - .collect(Collectors.toList()); - // map cannot be null or empty, so assert Optional isPresent - return adder( - elements.keySet() - .stream() - .map( - e -> e.adder() - .rebrand()) - .reduce(IGT_HatchAdder::orElse) - .orElseThrow(AssertionError::new)) - .hatchItemFilter( - obj -> GT_StructureUtility.filterByMTEClass( - elements.entrySet() - .stream() - .filter( - entry -> entry.getKey() - .count(obj) - < entry.getValue() - .longValue()) - .flatMap( - entry -> entry.getKey() - .mteClasses() - .stream()) - .collect(Collectors.toList()))) - .shouldReject( - obj -> elements.entrySet() - .stream() - .allMatch( - e -> e.getKey() - .count(obj) - >= e.getValue() - .longValue())) - .shouldSkip( - (BiPredicate & Builtin) (c, - t) -> t != null && list.stream() - .anyMatch(clazz -> clazz.isInstance(t.getMetaTileEntity()))) - .cacheHint( - () -> elements.keySet() - .stream() - .map(IHatchElement::name) - .sorted() - .collect(Collectors.joining(" or ", "of type ", ""))); - } - // endregion - - // region primitives - - /** - * Mark this hatch element as the only candidate of given structure element. (e.g. muffler hatch on top of EBF) - * Currently, this will make the built IStructureElement to ignore gt_no_hatch directive from player - * - * Do note that {@link #buildAndChain(IStructureElement[])} and its overloads will force the resulting structure - * element - * to be non-exclusive. - */ - public GT_HatchElementBuilder exclusive() { - mExclusive = true; - return this; - } - - public GT_HatchElementBuilder adder(IGT_HatchAdder aAdder) { - if (aAdder == null) throw new IllegalArgumentException(); - mAdder = aAdder; - return this; - } - - public GT_HatchElementBuilder casingIndex(int aCasingIndex) { - if (aCasingIndex <= 0) throw new IllegalArgumentException(); - mCasingIndex = aCasingIndex; - return this; - } - - public GT_HatchElementBuilder dot(int aDot) { - if (aDot <= 0) throw new IllegalArgumentException(); - mDot = aDot; - return this; - } - - public GT_HatchElementBuilder shouldSkip(BiPredicate aShouldSkip) { - if (!(aShouldSkip instanceof Builtin) || mShouldSkip != null) { - if (!(mShouldSkip instanceof Builtin) && mShouldSkip != null) throw new IllegalStateException(); - if (aShouldSkip == null) throw new IllegalArgumentException(); - } - mShouldSkip = aShouldSkip; - return this; - } - - public GT_HatchElementBuilder shouldReject(Predicate aShouldReject) { - if (aShouldReject == null) throw new IllegalArgumentException(); - mReject = aShouldReject; - return this; - } - - public GT_HatchElementBuilder hatchItemFilter( - Function> aHatchItemFilter) { - if (aHatchItemFilter == null) throw new IllegalArgumentException(); - mHatchItemFilter = (t, s) -> aHatchItemFilter.apply(t); - return this; - } - - public GT_HatchElementBuilder hatchItemFilterAnd( - Function> aHatchItemFilter) { - if (aHatchItemFilter == null) throw new IllegalArgumentException(); - BiFunction> tOldFilter = mHatchItemFilter; - mHatchItemFilter = (t, s) -> tOldFilter.apply(t, s) - .and(aHatchItemFilter.apply(t)); - return this; - } - - public GT_HatchElementBuilder hatchItemFilter( - BiFunction> aHatchItemFilter) { - if (aHatchItemFilter == null) throw new IllegalArgumentException(); - mHatchItemFilter = aHatchItemFilter; - return this; - } - - public GT_HatchElementBuilder hatchItemFilterAnd( - BiFunction> aHatchItemFilter) { - if (aHatchItemFilter == null) throw new IllegalArgumentException(); - BiFunction> tOldFilter = mHatchItemFilter; - mHatchItemFilter = (t, s) -> tOldFilter.apply(t, s) - .and(aHatchItemFilter.apply(t, s)); - return this; - } - - // region hint - public GT_HatchElementBuilder hint(Supplier aSupplier) { - if (aSupplier == null) throw new IllegalArgumentException(); - mHatchItemType = aSupplier; - mCacheHint = false; - return this; - } - - public GT_HatchElementBuilder cacheHint(Supplier aSupplier) { - if (aSupplier == null) throw new IllegalArgumentException(); - mHatchItemType = aSupplier; - mCacheHint = true; - return this; - } - - public GT_HatchElementBuilder cacheHint() { - if (mHatchItemType == null) throw new IllegalStateException(); - mCacheHint = true; - return this; - } - // endregion - - public GT_HatchElementBuilder continueIfSuccess() { - mNoStop = true; - return this; - } - - public GT_HatchElementBuilder stopIfSuccess() { - mNoStop = false; - return this; - } - - /** - * Help automatic hatch side determination code by ruling out some directions. Note the automatic hatch side - * determination code will choose to use the default facing if the final allowed facing set is empty. - *

- * This will clear the sides set by previous call to this or {@link #allowOnly(ForgeDirection...)} - *

- * Usually mandatory for multis with multiple slices, and otherwise not needed if it contains a single slice only. - * - * @param facings disallowed direction in ABC coordinate system - */ - public GT_HatchElementBuilder disallowOnly(ForgeDirection... facings) { - if (facings == null) throw new IllegalArgumentException(); - mDisallowedDirection = EnumSet.copyOf(Arrays.asList(facings)); - return this; - } - - /** - * Help automatic hatch side determination code by allowing only some directions. Note the automatic hatch side - * determination code will choose to use the default facing if the final allowed facing set is empty. - *

- * This will clear the sides set by previous call to this or {@link #disallowOnly(ForgeDirection...)} - *

- * Usually mandatory for multis with multiple slices, and otherwise not needed if it contains a single slice only. - * - * @param facings allowed direction in ABC coordinate system - */ - public GT_HatchElementBuilder allowOnly(ForgeDirection... facings) { - if (facings == null) throw new IllegalArgumentException(); - mDisallowedDirection = EnumSet.complementOf(EnumSet.copyOf(Arrays.asList(facings))); - mDisallowedDirection.remove(ForgeDirection.UNKNOWN); - return this; - } - // endregion - - // region intermediate - public GT_HatchElementBuilder hatchClass(Class clazz) { - return hatchItemFilter(c -> is -> clazz.isInstance(GT_Item_Machines.getMetaTileEntity(is))) - .cacheHint(() -> "of class " + clazz.getSimpleName()) - .shouldSkip( - (BiPredicate & Builtin) (c, t) -> clazz - .isInstance(t.getMetaTileEntity())); - } - - @SafeVarargs - public final GT_HatchElementBuilder hatchClasses(Class... classes) { - return hatchClasses(Arrays.asList(classes)); - } - - public final GT_HatchElementBuilder hatchClasses(List> classes) { - List> list = new ArrayList<>(classes); - return hatchItemFilter(obj -> GT_StructureUtility.filterByMTEClass(list)).cacheHint( - () -> list.stream() - .map(Class::getSimpleName) - .sorted() - .collect(Collectors.joining(" or ", "of class ", ""))) - .shouldSkip( - (BiPredicate & Builtin) (c, t) -> t != null && list.stream() - .anyMatch(clazz -> clazz.isInstance(t.getMetaTileEntity()))); - } - - public GT_HatchElementBuilder hatchId(int aId) { - return hatchItemFilter( - c -> is -> GT_Utility.isStackValid(is) && is.getItem() instanceof GT_Item_Machines - && is.getItemDamage() == aId).cacheHint(() -> "of id " + aId) - .shouldSkip( - (BiPredicate & Builtin) (c, t) -> t != null - && t.getMetaTileID() == aId); - } - - public GT_HatchElementBuilder hatchIds(int... aIds) { - if (aIds == null || aIds.length == 0) throw new IllegalArgumentException(); - if (aIds.length == 1) return hatchId(aIds[0]); - TIntCollection coll = aIds.length < 16 ? new TIntArrayList(aIds) : new TIntHashSet(aIds); - return hatchItemFilter( - c -> is -> GT_Utility.isStackValid(is) && is.getItem() instanceof GT_Item_Machines - && coll.contains(is.getItemDamage())).cacheHint( - () -> Arrays.stream(coll.toArray()) - .sorted() - .mapToObj(String::valueOf) - .collect(Collectors.joining(" or ", "of id ", ""))) - .shouldSkip( - (BiPredicate & Builtin) (c, t) -> t != null - && coll.contains(t.getMetaTileID())); - } - - // endregion - - @SuppressWarnings("unchecked") - @SafeVarargs - public final IStructureElementChain buildAndChain(IStructureElement... elements) { - // just in case - mExclusive = false; - List> l = new ArrayList<>(); - l.add(build()); - l.addAll(Arrays.asList(elements)); - IStructureElement[] array = l.toArray(new IStructureElement[0]); - return () -> array; - } - - public final IStructureElementChain buildAndChain(Block block, int meta) { - return buildAndChain(ofBlock(block, meta)); - } - - public IStructureElement build() { - if (mAdder == null || mCasingIndex == -1 || mDot == -1) { - throw new IllegalArgumentException(); - } - if (mHatchItemFilter == null) { - // no item filter -> no placement - return new IStructureElementNoPlacement<>() { - - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity - && mAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) mCasingIndex); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), mDot - 1); - return true; - } - }; - } - return new IStructureElement<>() { - - private String mHint = mHatchItemType == null ? "unspecified GT hatch" : mHatchItemType.get(); - - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity - && mAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) mCasingIndex); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), mDot - 1); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int i, int i1, int i2, ItemStack itemStack) { - // TODO - return false; - } - - private String getHint() { - if (mHint != null) return mHint; - String tHint = mHatchItemType.get(); - if (tHint == null) return "?"; - // TODO move this to some .lang instead of half ass it into the crappy gt lang file - tHint = GT_LanguageManager.addStringLocalization("Hatch_Type_" + tHint.replace(' ', '_'), tHint); - if (mCacheHint) { - mHint = tHint; - if (mHint != null) - // yeet the getter, since its product is retrieved and cached - mHatchItemType = null; - } - return tHint; - } - - @Override - public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - return BlocksToPlace.create(mHatchItemFilter.apply(t, trigger)); - } - - @Deprecated - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - IItemSource s, EntityPlayerMP actor, Consumer chatter) { - return survivalPlaceBlock( - t, - world, - x, - y, - z, - trigger, - AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - if (mShouldSkip != null) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - if (tileEntity instanceof IGregTechTileEntity - && mShouldSkip.test(t, (IGregTechTileEntity) tileEntity)) return PlaceResult.SKIP; - } - if (!StructureLibAPI.isBlockTriviallyReplaceable(world, x, y, z, env.getActor())) - return PlaceResult.REJECT; - if (mReject != null && mReject.test(t)) return PlaceResult.REJECT; - if (ChannelDataAccessor.hasSubChannel(trigger, "gt_no_hatch") && !mExclusive) { - String type = getHint(); - env.getChatter() - .accept(new ChatComponentTranslation("GT5U.autoplace.error.no_hatch", type)); - return PlaceResult.REJECT; - } - ItemStack taken = env.getSource() - .takeOne(mHatchItemFilter.apply(t, trigger), true); - if (GT_Utility.isStackInvalid(taken)) { - String type = getHint(); - env.getChatter() - .accept(new ChatComponentTranslation("GT5U.autoplace.error.no_hatch", type)); - return PlaceResult.REJECT; - } - if (StructureUtility.survivalPlaceBlock( - taken, - ItemStackPredicate.NBTMode.IGNORE, - null, - true, - world, - x, - y, - z, - env.getSource(), - env.getActor()) != PlaceResult.ACCEPT) { - return PlaceResult.REJECT; - } - // try to infer facing - EnumSet allowed = EnumSet.noneOf(ForgeDirection.class); - // first find which face of block is not contained in structure - if (env.getAPILevel() == AutoPlaceEnvironment.APILevel.Legacy) { - // a legacy decorator isn't passing down necessary information - // in that case, we just assume all facing is allowed - allowed.addAll(Arrays.asList(ForgeDirection.VALID_DIRECTIONS)); - } else { - for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { - // as noted on getWorldDirection Y axis should be flipped before use - if (env.isContainedInPiece(direction.offsetX, -direction.offsetY, direction.offsetZ)) continue; - // explicitly rejected, probably obstructed by another slice - if (mDisallowedDirection.contains(direction)) continue; - ForgeDirection rotated = env.getFacing() - .getWorldDirection( - (direction.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) != 0 - ? direction.getOpposite() - : direction); - allowed.add(rotated); - } - } - if (!allowed.isEmpty()) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - if (tileEntity instanceof IGregTechTileEntity) { - ForgeDirection result = null; - // find the first facing available, but prefer a facing that isn't up/down - for (ForgeDirection facing : allowed) { - result = facing; - if ((facing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0) break; // Horizontal - } - assert result != null; - ((IGregTechTileEntity) tileEntity).setFrontFacing(result); - } - } - return mNoStop ? PlaceResult.ACCEPT : PlaceResult.ACCEPT_STOP; - } - }; - } -} diff --git a/src/main/java/gregtech/api/util/GT_IBoxableWrapper.java b/src/main/java/gregtech/api/util/GT_IBoxableWrapper.java deleted file mode 100644 index 796699c261..0000000000 --- a/src/main/java/gregtech/api/util/GT_IBoxableWrapper.java +++ /dev/null @@ -1,13 +0,0 @@ -package gregtech.api.util; - -import net.minecraft.item.ItemStack; - -import ic2.api.item.IBoxable; - -public class GT_IBoxableWrapper implements IBoxable { - - @Override - public boolean canBeStoredInToolbox(ItemStack itemstack) { - return GT_Utility.isStackInList(itemstack, GT_ModHandler.sBoxableItems); - } -} diff --git a/src/main/java/gregtech/api/util/GT_ItsNotMyFaultException.java b/src/main/java/gregtech/api/util/GT_ItsNotMyFaultException.java deleted file mode 100644 index f47a356d7b..0000000000 --- a/src/main/java/gregtech/api/util/GT_ItsNotMyFaultException.java +++ /dev/null @@ -1,18 +0,0 @@ -package gregtech.api.util; - -public class GT_ItsNotMyFaultException extends RuntimeException { - - private static final long serialVersionUID = -8752778866486460495L; - - private final String mError; - - public GT_ItsNotMyFaultException(String aError) { - mError = aError; - } - - @Override - public String toString() { - return "The GregTech-Addon has a Problem.\nIT'S NOT MY FAULT!!! Below is how to fix it.\n" + mError - + "\nDO NOT COME TO ME WITH THIS CRASH. YOU CAUSED IT YOURSELF, AND I TOLD YOU HOW TO FIX IT!!!"; - } -} diff --git a/src/main/java/gregtech/api/util/GT_JubilanceMegaApiary.java b/src/main/java/gregtech/api/util/GT_JubilanceMegaApiary.java deleted file mode 100644 index f20a58c34a..0000000000 --- a/src/main/java/gregtech/api/util/GT_JubilanceMegaApiary.java +++ /dev/null @@ -1,23 +0,0 @@ -package gregtech.api.util; - -import forestry.api.apiculture.IAlleleBeeSpecies; -import forestry.api.apiculture.IBeeGenome; -import forestry.api.apiculture.IBeeHousing; -import forestry.api.apiculture.IJubilanceProvider; - -public class GT_JubilanceMegaApiary implements IJubilanceProvider { - - public static final GT_JubilanceMegaApiary instance = new GT_JubilanceMegaApiary(); - - protected GT_JubilanceMegaApiary() {} - - @Override - public boolean isJubilant(IAlleleBeeSpecies species, IBeeGenome genome, IBeeHousing housing) { - return false; - } - - @Override - public String getDescription() { - return "Will only be produced in mega Apiary"; - } -} diff --git a/src/main/java/gregtech/api/util/GT_LanguageManager.java b/src/main/java/gregtech/api/util/GT_LanguageManager.java deleted file mode 100644 index 4a9dc878ed..0000000000 --- a/src/main/java/gregtech/api/util/GT_LanguageManager.java +++ /dev/null @@ -1,603 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.GT_Values.E; - -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.common.config.Property; - -import cpw.mods.fml.common.registry.LanguageRegistry; -import cpw.mods.fml.relauncher.ReflectionHelper; -import gregtech.api.GregTech_API; - -public class GT_LanguageManager { - - /** - * Buffer to reduce memory allocation when injecting data to LanguageRegistry. - */ - private static final HashMap TEMPMAP = new HashMap<>(); - /** - * Buffer used when something is trying to add new lang entry while config file is not set up yet. - */ - public static final Map BUFFERMAP = new HashMap<>(); - /** - * Map containing all the translation data coming into this class. - */ - private static final Map LANGMAP = new HashMap<>(); - /** - * Config file handler bound to GregTech.lang or GregTech_(locale_name).lang. Even though it says English file, - * it's not necessarily English, but on system it's always treated as English (as in, "default" language.) - */ - public static Configuration sEnglishFile; - /** - * If the game is running with en_US language. This does not get updated when user changes language in game; - * GT lang system cannot handle that anyway. - */ - public static boolean isEN_US; - /** - * If placeholder like %material should be used for writing lang entries to file. - */ - public static boolean i18nPlaceholder = true; - /** - * If there's any lang entry that is not found on lang file and waiting to be written. - */ - private static boolean hasUnsavedEntry = false; - - // TODO: convert to enum - public static String FACE_ANY = "gt.lang.face.any", FACE_BOTTOM = "gt.lang.face.bottom", - FACE_TOP = "gt.lang.face.top", FACE_LEFT = "gt.lang.face.left", FACE_FRONT = "gt.lang.face.front", - FACE_RIGHT = "gt.lang.face.right", FACE_BACK = "gt.lang.face.back", FACE_NONE = "gt.lang.face.none"; - - public static String[] FACES = { FACE_BOTTOM, FACE_TOP, FACE_LEFT, FACE_FRONT, FACE_RIGHT, FACE_BACK, FACE_NONE }; - - /** - * Map referencing private field of StringTranslate, used by StatCollector. Used to inject lang entries there. - */ - private static final Map stringTranslateLanguageList; - - static { - try { - Field fieldStringTranslateLanguageList = ReflectionHelper - .findField(net.minecraft.util.StringTranslate.class, "languageList", "field_74816_c"); - Field fieldStringTranslateInstance = ReflectionHelper - .findField(net.minecraft.util.StringTranslate.class, "instance", "field_74817_a"); - // noinspection unchecked - stringTranslateLanguageList = (Map) fieldStringTranslateLanguageList - .get(fieldStringTranslateInstance.get(null)); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - /** - * @deprecated Parameter aWriteIntoLangFile is no longer used, - * use {@link #addStringLocalization(String, String)} or consider migrating to MC lang system instead. - */ - @Deprecated - public static synchronized String addStringLocalization(String aKey, String aEnglish, boolean aWriteIntoLangFile) { - return addStringLocalization(aKey, aEnglish); - } - - /** - * If you newly use this method, please consider using MC lang system instead. - */ - public static synchronized String addStringLocalization(String aKey, String aEnglish) { - String trimmedKey = aKey != null ? aKey.trim() : ""; - if (trimmedKey.isEmpty()) return E; // RIP cascading class loading, don't use GT_Utility here - if (sEnglishFile == null) { - // Lang file is not set up yet - BUFFERMAP.put(trimmedKey, aEnglish); - return aEnglish; - } - if (!BUFFERMAP.isEmpty()) { - // Lang file is now set up, resolve all the buffers - // This won't be visited twice - for (Entry tEntry : BUFFERMAP.entrySet()) { - storeTranslation(tEntry.getKey(), tEntry.getValue()); - } - BUFFERMAP.clear(); - } - - if (!LANGMAP.containsKey(trimmedKey)) { - return storeTranslation(trimmedKey, aEnglish); - } - return LANGMAP.get(trimmedKey); - } - - private static synchronized String storeTranslation(String trimmedKey, String english) { - String translation = writeToLangFile(trimmedKey, english); - LANGMAP.put(trimmedKey, translation); - addToMCLangList(trimmedKey, translation); - TEMPMAP.put(trimmedKey, translation); - LanguageRegistry.instance() - // If we use the actual user configured locale here, switching lang to others while running game - // turns everything into unlocalized string. So we make it "default" and call it a day. - .injectLanguage("en_US", TEMPMAP); - TEMPMAP.clear(); - return translation; - } - - private static synchronized String writeToLangFile(String trimmedKey, String aEnglish) { - Property tProperty = sEnglishFile.get("LanguageFile", trimmedKey, aEnglish); - if (hasUnsavedEntry && GregTech_API.sPostloadFinished) { - sEnglishFile.save(); - hasUnsavedEntry = false; - } - String translation = tProperty.getString(); - if (tProperty.wasRead()) { - if (isEN_US && !aEnglish.equals(translation)) { - tProperty.set(aEnglish); - markFileDirty(); - return aEnglish; - } - } else { - markFileDirty(); - } - return translation; - } - - private static synchronized void markFileDirty() { - if (GregTech_API.sPostloadFinished) { - sEnglishFile.save(); - } else { - hasUnsavedEntry = true; - } - } - - public static String getTranslation(String aKey) { - String tTrimmedKey = aKey != null ? aKey.trim() : ""; - if (tTrimmedKey.isEmpty()) return E; - - if (StatCollector.canTranslate(tTrimmedKey)) { - return StatCollector.translateToLocal(tTrimmedKey); - } - String anotherKeyToTry; - if (tTrimmedKey.endsWith(".name")) { - anotherKeyToTry = tTrimmedKey.substring(0, tTrimmedKey.length() - 5); - } else { - anotherKeyToTry = tTrimmedKey + ".name"; - } - if (StatCollector.canTranslate(anotherKeyToTry)) { - return StatCollector.translateToLocal(anotherKeyToTry); - } - return tTrimmedKey; - } - - public static String getTranslation(String aKey, String aSeperator) { - if (aKey == null) return E; - String rTranslation = E; - StringBuilder rTranslationSB = new StringBuilder(rTranslation); - for (String tString : aKey.split(aSeperator)) { - rTranslationSB.append(getTranslation(tString)); - } - rTranslation = String.valueOf(rTranslationSB); - return rTranslation; - } - - @SuppressWarnings("unused") - public static String getTranslateableItemStackName(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return "null"; - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT != null && tNBT.hasKey("display")) { - String tName = tNBT.getCompoundTag("display") - .getString("Name"); - if (GT_Utility.isStringValid(tName)) { - return tName; - } - } - return aStack.getUnlocalizedName() + ".name"; - } - - public static void writePlaceholderStrings() { - addStringLocalization("Interaction_DESCRIPTION_Index_001", "Puts out into adjacent Slot #"); - addStringLocalization("Interaction_DESCRIPTION_Index_002", "Grabs in for own Slot #"); - addStringLocalization("Interaction_DESCRIPTION_Index_003", "Enable with Signal"); - addStringLocalization("Interaction_DESCRIPTION_Index_004", "Disable with Signal"); - addStringLocalization("Interaction_DESCRIPTION_Index_005", "Disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_006", "Export"); - addStringLocalization("Interaction_DESCRIPTION_Index_007", "Import"); - addStringLocalization("Interaction_DESCRIPTION_Index_008", "Export (conditional)"); - addStringLocalization("Interaction_DESCRIPTION_Index_009", "Import (conditional)"); - addStringLocalization("Interaction_DESCRIPTION_Index_010", "Export (invert cond)"); - addStringLocalization("Interaction_DESCRIPTION_Index_011", "Import (invert cond)"); - addStringLocalization("Interaction_DESCRIPTION_Index_012", "Export allow Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_013", "Import allow Output"); - addStringLocalization("Interaction_DESCRIPTION_Index_014", "Export allow Input (conditional)"); - addStringLocalization("Interaction_DESCRIPTION_Index_015", "Import allow Output (conditional)"); - addStringLocalization("Interaction_DESCRIPTION_Index_016", "Export allow Input (invert cond)"); - addStringLocalization("Interaction_DESCRIPTION_Index_017", "Import allow Output (invert cond)"); - addStringLocalization("Interaction_DESCRIPTION_Index_018", "Normal"); - addStringLocalization("Interaction_DESCRIPTION_Index_019", "Inverted"); - addStringLocalization("Interaction_DESCRIPTION_Index_020", "Ready to work"); - addStringLocalization("Interaction_DESCRIPTION_Index_021", "Not ready to work"); - addStringLocalization("Interaction_DESCRIPTION_Index_022", "Import"); - addStringLocalization("Interaction_DESCRIPTION_Index_023", "Import (conditional)"); - addStringLocalization("Interaction_DESCRIPTION_Index_024", "Import (invert cond)"); - addStringLocalization("Interaction_DESCRIPTION_Index_025", "Keep Liquids Away"); - addStringLocalization("Interaction_DESCRIPTION_Index_026", "Keep Liquids Away (conditional)"); - addStringLocalization("Interaction_DESCRIPTION_Index_027", "Keep Liquids Away (invert cond)"); - addStringLocalization("Interaction_DESCRIPTION_Index_031", "Normal Universal Storage"); - addStringLocalization("Interaction_DESCRIPTION_Index_032", "Inverted Universal Storage"); - addStringLocalization("Interaction_DESCRIPTION_Index_033", "Normal Electricity Storage"); - addStringLocalization("Interaction_DESCRIPTION_Index_034", "Inverted Electricity Storage"); - addStringLocalization("Interaction_DESCRIPTION_Index_035", "Normal Steam Storage"); - addStringLocalization("Interaction_DESCRIPTION_Index_036", "Inverted Steam Storage"); - addStringLocalization("Interaction_DESCRIPTION_Index_037", "Normal Average Electric Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_038", "Inverted Average Electric Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_039", "Normal Average Electric Output"); - addStringLocalization("Interaction_DESCRIPTION_Index_040", "Inverted Average Electric Output"); - addStringLocalization("Interaction_DESCRIPTION_Index_041", "Normal Electricity Storage(Including Batteries)"); - addStringLocalization("Interaction_DESCRIPTION_Index_042", "Inverted Electricity Storage(Including Batteries)"); - addStringLocalization("Interaction_DESCRIPTION_Index_043", "Filter input, Deny output"); - addStringLocalization("Interaction_DESCRIPTION_Index_044", "Invert input, Deny output"); - addStringLocalization("Interaction_DESCRIPTION_Index_045", "Filter input, Permit any output"); - addStringLocalization("Interaction_DESCRIPTION_Index_046", "Invert input, Permit any output"); - addStringLocalization("Interaction_DESCRIPTION_Index_047", "Filter Fluid: "); - addStringLocalization("Interaction_DESCRIPTION_Index_048", "Pump speed: "); - addStringLocalization("Interaction_DESCRIPTION_Index_049", "L/tick "); - addStringLocalization("Interaction_DESCRIPTION_Index_050", "L/sec"); - addStringLocalization("Interaction_DESCRIPTION_Index_053", "Slot: "); - addStringLocalization("Interaction_DESCRIPTION_Index_054", "Inverted"); - addStringLocalization("Interaction_DESCRIPTION_Index_055", "Normal"); - addStringLocalization("Interaction_DESCRIPTION_Index_056", "Emit if 1 Maintenance Needed"); - addStringLocalization("Interaction_DESCRIPTION_Index_057", "Emit if 1 Maintenance Needed(inverted)"); - addStringLocalization("Interaction_DESCRIPTION_Index_058", "Emit if 2 Maintenance Needed"); - addStringLocalization("Interaction_DESCRIPTION_Index_059", "Emit if 2 Maintenance Needed(inverted)"); - addStringLocalization("Interaction_DESCRIPTION_Index_060", "Emit if 3 Maintenance Needed"); - addStringLocalization("Interaction_DESCRIPTION_Index_061", "Emit if 3 Maintenance Needed(inverted)"); - addStringLocalization("Interaction_DESCRIPTION_Index_062", "Emit if 4 Maintenance Needed"); - addStringLocalization("Interaction_DESCRIPTION_Index_063", "Emit if 4 Maintenance Needed(inverted)"); - addStringLocalization("Interaction_DESCRIPTION_Index_064", "Emit if 5 Maintenance Needed"); - addStringLocalization("Interaction_DESCRIPTION_Index_065", "Emit if 5 Maintenance Needed(inverted)"); - addStringLocalization("Interaction_DESCRIPTION_Index_066", "Emit if rotor needs maintenance low accuracy mod"); - addStringLocalization( - "Interaction_DESCRIPTION_Index_067", - "Emit if rotor needs maintenance low accuracy mod(inverted)"); - addStringLocalization("Interaction_DESCRIPTION_Index_068", "Emit if rotor needs maintenance high accuracy mod"); - addStringLocalization("Interaction_DESCRIPTION_Index_068.1", "Emit if any Player is close"); - addStringLocalization( - "Interaction_DESCRIPTION_Index_069", - "Emit if rotor needs maintenance high accuracy mod(inverted)"); - addStringLocalization("Interaction_DESCRIPTION_Index_069.1", "Emit if other Player is close"); - addStringLocalization("Interaction_DESCRIPTION_Index_070", "Emit if you are close"); - addStringLocalization("Interaction_DESCRIPTION_Index_071", "Conducts strongest Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_072", "Conducts from bottom Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_073", "Conducts from top Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_074", "Conducts from north Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_075", "Conducts from south Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_076", "Conducts from west Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_077", "Conducts from east Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_078", "Signal = "); - addStringLocalization("Interaction_DESCRIPTION_Index_079", "Conditional Signal = "); - addStringLocalization("Interaction_DESCRIPTION_Index_080", "Inverted Conditional Signal = "); - addStringLocalization("Interaction_DESCRIPTION_Index_081", "Frequency: "); - addStringLocalization("Interaction_DESCRIPTION_Index_082", "Open if work enabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_083", "Open if work disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_084", "Only Output allowed"); - addStringLocalization("Interaction_DESCRIPTION_Index_085", "Only Input allowed"); - addStringLocalization("Interaction_DESCRIPTION_Index_086", "Auto-Input: "); - addStringLocalization("Interaction_DESCRIPTION_Index_087", "Disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_088", "Enabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_089", " Auto-Output: "); - addStringLocalization("Interaction_DESCRIPTION_Index_090", "Machine Processing: "); - addStringLocalization("Interaction_DESCRIPTION_Index_091", "Redstone Output at Side "); - addStringLocalization("Interaction_DESCRIPTION_Index_092", " set to: "); - addStringLocalization("Interaction_DESCRIPTION_Index_093", "Strong"); - addStringLocalization("Interaction_DESCRIPTION_Index_094", "Weak"); - addStringLocalization("Interaction_DESCRIPTION_Index_094.1", "Not enough soldering material!"); - addStringLocalization("Interaction_DESCRIPTION_Index_095", "Input from Output Side allowed"); - addStringLocalization("Interaction_DESCRIPTION_Index_096", "Input from Output Side forbidden"); - addStringLocalization("Interaction_DESCRIPTION_Index_098", "Do not regulate Item Stack Size"); - addStringLocalization("Interaction_DESCRIPTION_Index_099", "Regulate Item Stack Size to: "); - addStringLocalization("Interaction_DESCRIPTION_Index_100", "This is "); - addStringLocalization("Interaction_DESCRIPTION_Index_101", " Ore."); - addStringLocalization("Interaction_DESCRIPTION_Index_102", "There is Lava behind this Rock."); - addStringLocalization("Interaction_DESCRIPTION_Index_103", "There is a Liquid behind this Rock."); - addStringLocalization("Interaction_DESCRIPTION_Index_104", "There is an Air Pocket behind this Rock."); - addStringLocalization("Interaction_DESCRIPTION_Index_105", "Material is changing behind this Rock."); - addStringLocalization("Interaction_DESCRIPTION_Index_106", "Found traces of "); - addStringLocalization("Interaction_DESCRIPTION_Index_107", "No Ores found."); - addStringLocalization("Interaction_DESCRIPTION_Index_108", "Outputs misc. Fluids, Steam and Items"); - addStringLocalization("Interaction_DESCRIPTION_Index_109", "Outputs Steam and Items"); - addStringLocalization("Interaction_DESCRIPTION_Index_110", "Outputs Steam and misc. Fluids"); - addStringLocalization("Interaction_DESCRIPTION_Index_111", "Outputs Steam"); - addStringLocalization("Interaction_DESCRIPTION_Index_112", "Outputs misc. Fluids and Items"); - addStringLocalization("Interaction_DESCRIPTION_Index_113", "Outputs only Items"); - addStringLocalization("Interaction_DESCRIPTION_Index_114", "Outputs only misc. Fluids"); - addStringLocalization("Interaction_DESCRIPTION_Index_115", "Outputs nothing"); - // 116 moved to lang files - // 117 obsolete - // 118 moved to lang files - // 119 obsolete - // 120 moved to lang files - // 121 obsolete - addStringLocalization("Interaction_DESCRIPTION_Index_122", "Emit Redstone if slots contain something"); - addStringLocalization("Interaction_DESCRIPTION_Index_123", "Don't emit Redstone"); - // 124 moved to lang files - addStringLocalization("Interaction_DESCRIPTION_Index_124.1", "Blacklist Mode"); - // 125 obsolete - addStringLocalization("Interaction_DESCRIPTION_Index_125.1", "Whitelist Mode"); - // 126 moved to lang files - // 127 obsolete - addStringLocalization("Interaction_DESCRIPTION_Index_128", "Redstone"); - addStringLocalization("Interaction_DESCRIPTION_Index_128.1", "Redstone "); - addStringLocalization("Interaction_DESCRIPTION_Index_129", "Energy"); - addStringLocalization("Interaction_DESCRIPTION_Index_129.1", "Energy "); - addStringLocalization("Interaction_DESCRIPTION_Index_130", "Fluids"); - addStringLocalization("Interaction_DESCRIPTION_Index_130.1", "Fluids "); - addStringLocalization("Interaction_DESCRIPTION_Index_131", "Items"); - addStringLocalization("Interaction_DESCRIPTION_Index_131.1", "Items "); - addStringLocalization("Interaction_DESCRIPTION_Index_132", "Pipe is loose."); - addStringLocalization("Interaction_DESCRIPTION_Index_133", "Screws are loose."); - addStringLocalization("Interaction_DESCRIPTION_Index_134", "Something is stuck."); - addStringLocalization("Interaction_DESCRIPTION_Index_135", "Platings are dented."); - addStringLocalization("Interaction_DESCRIPTION_Index_136", "Circuitry burned out."); - addStringLocalization("Interaction_DESCRIPTION_Index_137", "That doesn't belong there."); - addStringLocalization("Interaction_DESCRIPTION_Index_138", "Incomplete Structure."); - addStringLocalization("Interaction_DESCRIPTION_Index_139", "Hit with Soft Mallet"); - addStringLocalization("Interaction_DESCRIPTION_Index_140", "to (re-)start the Machine"); - addStringLocalization("Interaction_DESCRIPTION_Index_141", "if it doesn't start."); - addStringLocalization("Interaction_DESCRIPTION_Index_142", "Running perfectly."); - addStringLocalization("Interaction_DESCRIPTION_Index_143", "Missing Mining Pipe"); - addStringLocalization("Interaction_DESCRIPTION_Index_144", "Missing Turbine Rotor"); - addStringLocalization("Interaction_DESCRIPTION_Index_145", "Step Down, In: "); - addStringLocalization("Interaction_DESCRIPTION_Index_146", "Step Up, In: "); - addStringLocalization("Interaction_DESCRIPTION_Index_147", "A, Out: "); - addStringLocalization("Interaction_DESCRIPTION_Index_148", "V "); - addStringLocalization("Interaction_DESCRIPTION_Index_149", "A"); - addStringLocalization("Interaction_DESCRIPTION_Index_150", "Chance: "); - addStringLocalization("Interaction_DESCRIPTION_Index_151", "Does not get consumed in the process"); - addStringLocalization("Interaction_DESCRIPTION_Index_151.1", "Outputs items and 1 specific Fluid"); - addStringLocalization("Interaction_DESCRIPTION_Index_151.2", "Outputs 1 specific Fluid"); - addStringLocalization("Interaction_DESCRIPTION_Index_151.4", "Successfully locked Fluid to %s"); - addStringLocalization("Interaction_DESCRIPTION_Index_152", "Total: "); - addStringLocalization("Interaction_DESCRIPTION_Index_153", "Usage: "); - addStringLocalization("Interaction_DESCRIPTION_Index_154", "Voltage: "); - addStringLocalization("Interaction_DESCRIPTION_Index_155", "Amperage: "); - addStringLocalization("Interaction_DESCRIPTION_Index_156", "Voltage: unspecified"); - addStringLocalization("Interaction_DESCRIPTION_Index_157", "Amperage: unspecified"); - addStringLocalization("Interaction_DESCRIPTION_Index_158", "Time: "); - addStringLocalization("Interaction_DESCRIPTION_Index_159", "Needs Low Gravity"); - addStringLocalization("Interaction_DESCRIPTION_Index_160", "Needs Cleanroom"); - addStringLocalization("Interaction_DESCRIPTION_Index_160.1", "Needs Cleanroom & LowGrav"); - addStringLocalization("Interaction_DESCRIPTION_Index_161", " secs"); - addStringLocalization("Interaction_DESCRIPTION_Index_162", "Name: "); - addStringLocalization("Interaction_DESCRIPTION_Index_163", " MetaData: "); - addStringLocalization("Interaction_DESCRIPTION_Index_164", "Hardness: "); - addStringLocalization("Interaction_DESCRIPTION_Index_165", " Blast Resistance: "); - addStringLocalization("Interaction_DESCRIPTION_Index_166", "Is valid Beacon Pyramid Material"); - addStringLocalization("Interaction_DESCRIPTION_Index_167", "Tank "); - addStringLocalization("Interaction_DESCRIPTION_Index_168", "Heat: "); - addStringLocalization("Interaction_DESCRIPTION_Index_169", "HEM: "); - addStringLocalization("Interaction_DESCRIPTION_Index_170", " Base EU Output: "); - addStringLocalization("Interaction_DESCRIPTION_Index_171", "Facing: "); - addStringLocalization("Interaction_DESCRIPTION_Index_172", " / Chance: "); - addStringLocalization("Interaction_DESCRIPTION_Index_173", "You can remove this with a Wrench"); - addStringLocalization("Interaction_DESCRIPTION_Index_174", "You can NOT remove this with a Wrench"); - addStringLocalization("Interaction_DESCRIPTION_Index_175", "Conduction Loss: "); - addStringLocalization("Interaction_DESCRIPTION_Index_176", "Contained Energy: "); - addStringLocalization("Interaction_DESCRIPTION_Index_177", "Has Muffler Upgrade"); - addStringLocalization("Interaction_DESCRIPTION_Index_178", "Progress/Load: "); - addStringLocalization("Interaction_DESCRIPTION_Index_179", "Max IN: "); - addStringLocalization("Interaction_DESCRIPTION_Index_181", "Max OUT: "); - addStringLocalization("Interaction_DESCRIPTION_Index_182", " EU at "); - addStringLocalization("Interaction_DESCRIPTION_Index_183", " A"); - addStringLocalization("Interaction_DESCRIPTION_Index_184", "Energy: "); - addStringLocalization("Interaction_DESCRIPTION_Index_186", "Owned by: "); - addStringLocalization("Interaction_DESCRIPTION_Index_187", "Type -- Crop-Name: "); - addStringLocalization("Interaction_DESCRIPTION_Index_188", " Growth: "); - addStringLocalization("Interaction_DESCRIPTION_Index_189", " Gain: "); - addStringLocalization("Interaction_DESCRIPTION_Index_190", " Resistance: "); - addStringLocalization("Interaction_DESCRIPTION_Index_191", "Plant -- Fertilizer: "); - addStringLocalization("Interaction_DESCRIPTION_Index_192", " Water: "); - addStringLocalization("Interaction_DESCRIPTION_Index_193", " Weed-Ex: "); - addStringLocalization("Interaction_DESCRIPTION_Index_194", " Scan-Level: "); - addStringLocalization("Interaction_DESCRIPTION_Index_195", "Environment -- Nutrients: "); - addStringLocalization("Interaction_DESCRIPTION_Index_196", " Humidity: "); - addStringLocalization("Interaction_DESCRIPTION_Index_197", " Air-Quality: "); - addStringLocalization("Interaction_DESCRIPTION_Index_198", "Attributes:"); - addStringLocalization("Interaction_DESCRIPTION_Index_199", "Discovered by: "); - addStringLocalization("Interaction_DESCRIPTION_Index_200", "Sort mode: "); - addStringLocalization("Interaction_DESCRIPTION_Index_200.1", "Automatic Item Shuffling: "); - addStringLocalization("Interaction_DESCRIPTION_Index_201", "Nothing"); - addStringLocalization("Interaction_DESCRIPTION_Index_202", "Pollution in Chunk: "); - addStringLocalization("Interaction_DESCRIPTION_Index_203", " gibbl"); - addStringLocalization("Interaction_DESCRIPTION_Index_204", "No Pollution in Chunk! HAYO!"); - addStringLocalization("Interaction_DESCRIPTION_Index_206", "Scan for Assembly Line"); - addStringLocalization( - "Interaction_DESCRIPTION_Index_207", - "Pump speed: %dL every %d ticks, %.2f L/sec on average"); - addStringLocalization("Interaction_DESCRIPTION_Index_208", " L"); - addStringLocalization("Interaction_DESCRIPTION_Index_209", " ticks"); - addStringLocalization("Interaction_DESCRIPTION_Index_209.1", " tick"); - addStringLocalization("Interaction_DESCRIPTION_Index_210", "Average: %.2f L/sec"); - addStringLocalization("Interaction_DESCRIPTION_Index_211", "Items per side: "); - addStringLocalization("Interaction_DESCRIPTION_Index_212", "Input enabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_213", "Input disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_214", "Connected"); - addStringLocalization("Interaction_DESCRIPTION_Index_215", "Disconnected"); - addStringLocalization("Interaction_DESCRIPTION_Index_216", "Deprecated Recipe"); - addStringLocalization("Interaction_DESCRIPTION_Index_219", "Extended Facing: "); - addStringLocalization("Interaction_DESCRIPTION_Index_220", "Single recipe locking disabled."); - addStringLocalization("Interaction_DESCRIPTION_Index_221", "Item threshold"); - addStringLocalization("Interaction_DESCRIPTION_Index_222", "Fluid threshold"); - addStringLocalization("Interaction_DESCRIPTION_Index_222.1", "Energy threshold"); - addStringLocalization( - "Interaction_DESCRIPTION_Index_223", - "Single recipe locking enabled. Will lock to next recipe."); - addStringLocalization("Interaction_DESCRIPTION_Index_224", "Always On"); - addStringLocalization("Interaction_DESCRIPTION_Index_225", "Active with Redstone Signal"); - addStringLocalization("Interaction_DESCRIPTION_Index_226", "Inactive with Redstone Signal"); - addStringLocalization("Interaction_DESCRIPTION_Index_227", "Allow Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_228", "Block Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_229", "Export/Import"); - addStringLocalization("Interaction_DESCRIPTION_Index_230", "Conditional"); - addStringLocalization("Interaction_DESCRIPTION_Index_231", "Enable Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_232", "Filter Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_233", "Filter Output"); - addStringLocalization("Interaction_DESCRIPTION_Index_234", "Block Output"); - addStringLocalization("Interaction_DESCRIPTION_Index_235", "Allow Output"); - addStringLocalization("Interaction_DESCRIPTION_Index_236", "Whitelist Fluid"); - addStringLocalization("Interaction_DESCRIPTION_Index_237", "Blacklist Fluid"); - addStringLocalization("Interaction_DESCRIPTION_Index_238", "Filter Direction"); - addStringLocalization("Interaction_DESCRIPTION_Index_239", "Filter Type"); - addStringLocalization("Interaction_DESCRIPTION_Index_240", "Block Flow"); - addStringLocalization("Interaction_DESCRIPTION_Index_241", "Recipe progress"); - addStringLocalization("Interaction_DESCRIPTION_Index_242", "Machine idle"); - addStringLocalization("Interaction_DESCRIPTION_Index_243", "Enable with Redstone"); - addStringLocalization("Interaction_DESCRIPTION_Index_244", "Disable with Redstone"); - addStringLocalization("Interaction_DESCRIPTION_Index_245", "Disable machine"); - addStringLocalization("Interaction_DESCRIPTION_Index_246", "Frequency"); - addStringLocalization("Interaction_DESCRIPTION_Index_247", "1 Issue"); - addStringLocalization("Interaction_DESCRIPTION_Index_248", "2 Issues"); - addStringLocalization("Interaction_DESCRIPTION_Index_249", "3 Issues"); - addStringLocalization("Interaction_DESCRIPTION_Index_250", "4 Issues"); - addStringLocalization("Interaction_DESCRIPTION_Index_251", "5 Issues"); - addStringLocalization("Interaction_DESCRIPTION_Index_252", "Rotor < 20%"); - addStringLocalization("Interaction_DESCRIPTION_Index_253", "Rotor ≈ 0%"); - addStringLocalization("Interaction_DESCRIPTION_Index_254", "Detect slot#"); - addStringLocalization("Interaction_DESCRIPTION_Index_254.0", "Detect Slot"); - addStringLocalization("Interaction_DESCRIPTION_Index_254.1", "Internal slot#"); - addStringLocalization("Interaction_DESCRIPTION_Index_255", "Adjacent slot#"); - addStringLocalization("Interaction_DESCRIPTION_Index_256", "Universal Storage"); - addStringLocalization("Interaction_DESCRIPTION_Index_257", "Electricity Storage"); - addStringLocalization("Interaction_DESCRIPTION_Index_258", "Steam Storage"); - addStringLocalization("Interaction_DESCRIPTION_Index_259", "Average Electric Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_260", "Average Electric Output"); - addStringLocalization("Interaction_DESCRIPTION_Index_261", "Electricity Storage(Including Batteries)"); - addStringLocalization("Interaction_DESCRIPTION_Index_262", "Fluid Auto Output Disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_263", "Fluid Auto Output Enabled"); - addStringLocalization( - "Interaction_DESCRIPTION_Index_264", - "currently none, will be locked to the next that is put in"); - addStringLocalization("Interaction_DESCRIPTION_Index_265", "1 specific Fluid"); - addStringLocalization("Interaction_DESCRIPTION_Index_266", "Lock Fluid Mode Disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_267", "Overflow Voiding Mode Disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_268", "Overflow Voiding Mode Enabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_269", "Void Full Mode Disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_270", "Void Full Mode Enabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_271", "unspecified"); - addStringLocalization("Interaction_DESCRIPTION_Index_272", "Recipe by: "); - addStringLocalization("Interaction_DESCRIPTION_Index_273", "Original Recipe by: "); - addStringLocalization("Interaction_DESCRIPTION_Index_274", "Modified by: "); - addStringLocalization("Interaction_DESCRIPTION_Index_275", "Original voltage: "); - addStringLocalization("Interaction_DESCRIPTION_Index_299", "Item Filter: "); - addStringLocalization("Interaction_DESCRIPTION_Index_300", "Filter Cleared!"); - addStringLocalization("Interaction_DESCRIPTION_Index_300.1", "Fluid Lock Cleared."); - addStringLocalization("Interaction_DESCRIPTION_Index_301", "Universal"); - addStringLocalization("Interaction_DESCRIPTION_Index_302", "Int. EU"); - addStringLocalization("Interaction_DESCRIPTION_Index_303", "Steam"); - addStringLocalization("Interaction_DESCRIPTION_Index_304", "Avg. Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_305", "Avg. Output"); - addStringLocalization("Interaction_DESCRIPTION_Index_306", "EU stored"); - addStringLocalization("Interaction_DESCRIPTION_Index_307", "Deny input, Filter output"); - addStringLocalization("Interaction_DESCRIPTION_Index_308", "Deny input, Invert output"); - addStringLocalization("Interaction_DESCRIPTION_Index_309", "Permit any input, Filter output"); - addStringLocalization("Interaction_DESCRIPTION_Index_310", "Permit any input, Invert output"); - addStringLocalization("Interaction_DESCRIPTION_Index_311", "Block Output"); - addStringLocalization("Interaction_DESCRIPTION_Index_312", "Allow Output"); - addStringLocalization("Interaction_DESCRIPTION_Index_313", "Block Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_314", "Allow Input"); - addStringLocalization("Interaction_DESCRIPTION_Index_315", "Filter Empty"); - addStringLocalization("Interaction_DESCRIPTION_Index_316", "Pump speed limit reached!"); - addStringLocalization("Interaction_DESCRIPTION_Index_317", "Filter: "); - addStringLocalization("Interaction_DESCRIPTION_Index_318", "Check Mode"); - addStringLocalization("Interaction_DESCRIPTION_Index_319", "Any player"); - addStringLocalization("Interaction_DESCRIPTION_Index_320", "Other players"); - addStringLocalization("Interaction_DESCRIPTION_Index_321", "Only owner"); - addStringLocalization("Interaction_DESCRIPTION_Index_322", "Overflow point: "); - addStringLocalization("Interaction_DESCRIPTION_Index_323", "L"); - addStringLocalization("Interaction_DESCRIPTION_Index_324", "Now"); - addStringLocalization("Interaction_DESCRIPTION_Index_325", "Max"); - addStringLocalization("Interaction_DESCRIPTION_Index_326", "Public"); - addStringLocalization("Interaction_DESCRIPTION_Index_327", "Private"); - addStringLocalization("Interaction_DESCRIPTION_Index_328", "Channel"); - addStringLocalization("Interaction_DESCRIPTION_Index_329", "Public/Private"); - addStringLocalization("Interaction_DESCRIPTION_Index_330", "Sneak Rightclick to switch Mode"); - addStringLocalization("Interaction_DESCRIPTION_Index_331", "AND Gate"); - addStringLocalization("Interaction_DESCRIPTION_Index_332", "NAND Gate"); - addStringLocalization("Interaction_DESCRIPTION_Index_333", "OR Gate"); - addStringLocalization("Interaction_DESCRIPTION_Index_334", "NOR Gate"); - addStringLocalization("Interaction_DESCRIPTION_Index_335", "Gate Mode"); - addStringLocalization("Interaction_DESCRIPTION_Index_336", "PCB Factory Tier: "); - addStringLocalization("Interaction_DESCRIPTION_Index_337", "Upgrade Required: "); - addStringLocalization("Interaction_DESCRIPTION_Index_338", "Bio"); - addStringLocalization("Interaction_DESCRIPTION_Index_339", "Biochamber Upgrade Enabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_339.1", "Biochamber Upgrade Disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_340", "Rotated biochamber enabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_340.1", "Rotated biochamber disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_341", "Tier 1 cooling enabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_341.1", "Tier 1 cooling disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_342", "Tier 2 cooling enabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_342.1", "Tier 2 cooling disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_343", "Use Machine Processing State"); - addStringLocalization("Interaction_DESCRIPTION_Index_343.1", "Use Inverted Machine Processing State"); - addStringLocalization("Interaction_DESCRIPTION_Index_344", "Input Blocking"); - addStringLocalization("Interaction_DESCRIPTION_Index_344.1", "Output Blocking"); - addStringLocalization("Interaction_DESCRIPTION_Index_400", "Running mode: "); - addStringLocalization("Interaction_DESCRIPTION_Index_500", "Fitting: Loose - More Flow"); - addStringLocalization("Interaction_DESCRIPTION_Index_501", "Fitting: Tight - More Efficiency"); - addStringLocalization("Interaction_DESCRIPTION_Index_502", "Mining chunk loading enabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_503", "Mining chunk loading disabled"); - addStringLocalization("Interaction_DESCRIPTION_Index_505", "Enable with Signal (Safe)"); - addStringLocalization("Interaction_DESCRIPTION_Index_506", "Disable with Signal (Safe)"); - addStringLocalization("Interaction_DESCRIPTION_Index_507", "Safe Mode"); - addStringLocalization("Interaction_DESCRIPTION_Index_508", "Needs Stabilized Black Hole"); - addStringLocalization("Interaction_DESCRIPTION_Index_509", "Requires HIP Unit"); - addStringLocalization("Interaction_DESCRIPTION_Index_602", "Use Private Frequency"); - addStringLocalization("Interaction_DESCRIPTION_Index_756", "Connectable: "); - addStringLocalization("Interaction_DESCRIPTION_Index_ALL", "All"); - addStringLocalization("Interaction_DESCRIPTION_Index_ANY", "Any"); - addStringLocalization("Interaction_DESCRIPTION_Index_INVERTED", "Inverted"); - addStringLocalization("Interaction_DESCRIPTION_Index_NORMAL", "Normal"); - addStringLocalization("Interaction_DESCRIPTION_Index_SIDE", "Side: "); - - addStringLocalization("Item_DESCRIPTION_Index_000", "Stored Heat: %s"); - addStringLocalization("Item_DESCRIPTION_Index_001", "Durability: %s/%s"); - addStringLocalization("Item_DESCRIPTION_Index_002", "%s lvl %s"); - addStringLocalization("Item_DESCRIPTION_Index_003", "Attack Damage: %s"); - addStringLocalization("Item_DESCRIPTION_Index_004", "Mining Speed: %s"); - addStringLocalization("Item_DESCRIPTION_Index_005", "Turbine Efficiency: %s"); - addStringLocalization("Item_DESCRIPTION_Index_006", "Optimal Steam flow: %s L/t"); - addStringLocalization("Item_DESCRIPTION_Index_007", "Energy from Optimal Gas Flow: %s EU/t"); - addStringLocalization("Item_DESCRIPTION_Index_008", "Energy from Optimal Plasma Flow: %s EU/t"); - addStringLocalization("Item_DESCRIPTION_Index_009", "Contains %s EU Tier: %s"); - addStringLocalization("Item_DESCRIPTION_Index_010", "Empty. You should recycle it properly."); - addStringLocalization("Item_DESCRIPTION_Index_011", "%s / %s EU - Voltage: %s"); - addStringLocalization("Item_DESCRIPTION_Index_012", "No Fluids Contained"); - addStringLocalization("Item_DESCRIPTION_Index_013", "%sL / %sL"); - addStringLocalization("Item_DESCRIPTION_Index_014", "Missing Coodinates!"); - addStringLocalization("Item_DESCRIPTION_Index_015", "Device at:"); - addStringLocalization("Item_DESCRIPTION_Index_018", "State: %s"); - addStringLocalization("Item_DESCRIPTION_Index_019", "Bath with neutron in a hot reactor"); - addStringLocalization("Item_DESCRIPTION_Index_020", "Progress: %s/%s"); - addStringLocalization("Item_DESCRIPTION_Index_021", "Radiation Hazard"); - addStringLocalization("Item_DESCRIPTION_Index_500", "Turbine Efficiency (Loose): %s"); - addStringLocalization("Item_DESCRIPTION_Index_501", "Optimal Steam flow (Loose): %s L/t"); - addStringLocalization("Item_DESCRIPTION_Index_502", "Overflow Efficiency Tier: %s"); - addStringLocalization("Item_DESCRIPTION_Index_900", "Energy from Optimal Steam Flow: %s EU/t"); - addStringLocalization("Item_DESCRIPTION_Index_901", "Energy from Optimal Steam Flow (Loose): %s EU/t"); - - addStringLocalization(FACE_ANY, "Any Side"); - addStringLocalization(FACE_BOTTOM, "Bottom"); - addStringLocalization(FACE_TOP, "Top"); - addStringLocalization(FACE_LEFT, "Left"); - addStringLocalization(FACE_FRONT, "Front"); - addStringLocalization(FACE_RIGHT, "Right"); - addStringLocalization(FACE_BACK, "Back"); - addStringLocalization(FACE_NONE, "None"); - } - - private static void addToMCLangList(String aKey, String translation) { - if (stringTranslateLanguageList != null) { - stringTranslateLanguageList.put(aKey, translation); - } - } -} diff --git a/src/main/java/gregtech/api/util/GT_Log.java b/src/main/java/gregtech/api/util/GT_Log.java deleted file mode 100644 index 2d00c2e061..0000000000 --- a/src/main/java/gregtech/api/util/GT_Log.java +++ /dev/null @@ -1,45 +0,0 @@ -package gregtech.api.util; - -import java.io.File; -import java.io.OutputStream; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.List; - -/** - * NEVER INCLUDE THIS FILE IN YOUR MOD!!! - *

- * Just a simple Logging Function. If on Server, then this will point to System.out and System.err - */ -public class GT_Log { - - public static PrintStream out = System.out; - public static PrintStream err = System.err; - public static PrintStream ore = new LogBuffer(); - public static PrintStream pal = null; - public static PrintStream exp = new LogBuffer(); - public static File mLogFile; - public static File mOreDictLogFile; - public static File mPlayerActivityLogFile; - public static File mExplosionLog; - - public static class LogBuffer extends PrintStream { - - public final List mBufferedOreDictLog = new ArrayList<>(); - - public LogBuffer() { - super(new OutputStream() { - - @Override - public void write(int arg0) { - /* Do nothing */ - } - }); - } - - @Override - public void println(String aString) { - mBufferedOreDictLog.add(aString); - } - } -} diff --git a/src/main/java/gregtech/api/util/GT_ModHandler.java b/src/main/java/gregtech/api/util/GT_ModHandler.java deleted file mode 100644 index b5c7c6fb6e..0000000000 --- a/src/main/java/gregtech/api/util/GT_ModHandler.java +++ /dev/null @@ -1,2437 +0,0 @@ -package gregtech.api.util; - -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.GT_Values.B; -import static gregtech.api.enums.GT_Values.D1; -import static gregtech.api.enums.GT_Values.DW; -import static gregtech.api.enums.GT_Values.E; -import static gregtech.api.enums.GT_Values.M; -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.GT_Values.W; -import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; -import static gregtech.api.recipe.RecipeMaps.oreWasherRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; - -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.FurnaceRecipes; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.item.crafting.ShapedRecipes; -import net.minecraft.item.crafting.ShapelessRecipes; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntityFurnace; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.ShapedOreRecipe; -import net.minecraftforge.oredict.ShapelessOreRecipe; - -import cpw.mods.fml.common.registry.GameRegistry; -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.OreDictNames; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Tier; -import gregtech.api.enums.ToolDictNames; -import gregtech.api.interfaces.IDamagableItem; -import gregtech.api.interfaces.IItemContainer; -import gregtech.api.interfaces.internal.IGT_CraftingRecipe; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe; -import gregtech.api.objects.GT_HashSet; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeCategories; -import gregtech.api.recipe.RecipeMap; -import ic2.api.item.IBoxable; -import ic2.api.item.IC2Items; -import ic2.api.item.IElectricItem; -import ic2.api.reactor.IReactorComponent; -import ic2.api.recipe.IRecipeInput; -import ic2.api.recipe.RecipeInputItemStack; -import ic2.api.recipe.RecipeOutput; -import ic2.core.item.ItemToolbox; - -/** - * NEVER INCLUDE THIS FILE IN YOUR MOD!!! - *

- * This is the Interface I use for interacting with other Mods. - *

- * Due to the many imports, this File can cause compile Problems if not all the APIs are installed - */ -public class GT_ModHandler { - - public static final List sSingleNonBlockDamagableRecipeList = new ArrayList<>(1000); - private static final Map sIC2ItemMap = new HashMap<>(); - - // public for bartworks - public static final List sAllRecipeList = new ArrayList<>(5000), sBufferRecipeList = new ArrayList<>(1000); - private static final List delayedRemovalByOutput = new ArrayList<>(); - private static final List delayedRemovalByRecipe = new ArrayList<>(); - - public static Collection sNativeRecipeClasses = new HashSet<>(), sSpecialRecipeClasses = new HashSet<>(); - public static GT_HashSet sNonReplaceableItems = new GT_HashSet<>(); - public static Object sBoxableWrapper = new GT_IBoxableWrapper(); - public static Collection sBoxableItems = new ArrayList<>(); - private static final Map emptyRecipeMap = new HashMap<>(); - private static Set recyclerWhitelist; - private static Set recyclerBlacklist; - - private static boolean sBufferCraftingRecipes = true; - public static List sSingleNonBlockDamagableRecipeList_list = new ArrayList<>(100); - private static final boolean sSingleNonBlockDamagableRecipeList_create = true; - private static final ItemStack sMt1 = new ItemStack(Blocks.dirt, 1, 0), sMt2 = new ItemStack(Blocks.dirt, 1, 0); - private static final String s_H = "h", s_F = "f", s_I = "I", s_P = "P", s_R = "R"; - private static final ItemStack[][] sShapes1 = new ItemStack[][] { - { sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1, null }, - { sMt1, null, sMt1, sMt1, null, sMt1, sMt1, sMt1, sMt1 }, - { null, sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1 }, - { sMt1, sMt1, sMt1, sMt1, null, sMt1, null, null, null }, - { sMt1, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1 }, - { sMt1, sMt1, sMt1, sMt1, null, sMt1, sMt1, null, sMt1 }, - { null, null, null, sMt1, null, sMt1, sMt1, null, sMt1 }, - { null, sMt1, null, null, sMt1, null, null, sMt2, null }, - { sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2, null }, - { null, sMt1, null, null, sMt2, null, null, sMt2, null }, - { sMt1, sMt1, null, sMt1, sMt2, null, null, sMt2, null }, - { null, sMt1, sMt1, null, sMt2, sMt1, null, sMt2, null }, - { sMt1, sMt1, null, null, sMt2, null, null, sMt2, null }, - { null, sMt1, sMt1, null, sMt2, null, null, sMt2, null }, - { null, sMt1, null, sMt1, null, null, null, sMt1, sMt2 }, - { null, sMt1, null, null, null, sMt1, sMt2, sMt1, null }, - { null, sMt1, null, sMt1, null, sMt1, null, null, sMt2 }, - { null, sMt1, null, sMt1, null, sMt1, sMt2, null, null }, - { null, sMt2, null, null, sMt1, null, null, sMt1, null }, - { null, sMt2, null, null, sMt2, null, sMt1, sMt1, sMt1 }, - { null, sMt2, null, null, sMt2, null, null, sMt1, null }, - { null, sMt2, null, sMt1, sMt2, null, sMt1, sMt1, null }, - { null, sMt2, null, null, sMt2, sMt1, null, sMt1, sMt1 }, - { null, sMt2, null, null, sMt2, null, sMt1, sMt1, null }, - { sMt1, null, null, null, sMt2, null, null, null, sMt2 }, - { null, null, sMt1, null, sMt2, null, sMt2, null, null }, - { sMt1, null, null, null, sMt2, null, null, null, null }, - { null, null, sMt1, null, sMt2, null, null, null, null }, - { sMt1, sMt2, null, null, null, null, null, null, null }, - { sMt2, sMt1, null, null, null, null, null, null, null }, - { sMt1, null, null, sMt2, null, null, null, null, null }, - { sMt2, null, null, sMt1, null, null, null, null, null }, - { sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, null, sMt2, null }, - { sMt1, sMt1, null, sMt1, sMt1, sMt2, sMt1, sMt1, null }, - { null, sMt1, sMt1, sMt2, sMt1, sMt1, null, sMt1, sMt1 }, - { null, sMt2, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1 }, - { sMt1, sMt1, sMt1, sMt1, sMt2, sMt1, null, sMt2, null }, - { sMt1, sMt1, null, sMt1, sMt2, sMt2, sMt1, sMt1, null }, - { null, sMt1, sMt1, sMt2, sMt2, sMt1, null, sMt1, sMt1 }, - { null, sMt2, null, sMt1, sMt2, sMt1, sMt1, sMt1, sMt1 }, - { sMt1, null, null, null, sMt1, null, null, null, null }, - { null, sMt1, null, sMt1, null, null, null, null, null }, - { sMt1, sMt1, null, sMt2, null, sMt1, sMt2, null, null }, - { null, sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2 } }; - public static List sSingleNonBlockDamagableRecipeList_validsShapes1 = new ArrayList<>(44); - public static boolean sSingleNonBlockDamagableRecipeList_validsShapes1_update = false; - public static List sSingleNonBlockDamagableRecipeList_warntOutput = new ArrayList<>(50); - public static List sVanillaRecipeList_warntOutput = new ArrayList<>(50); - public static final List sSingleNonBlockDamagableRecipeList_verified = new ArrayList<>(1000); - public static List sAnySteamFluidIDs = new ArrayList<>(); - public static List sSuperHeatedSteamFluidIDs = new ArrayList<>(); - - static { - sNativeRecipeClasses.add(ShapedRecipes.class.getName()); - sNativeRecipeClasses.add(ShapedOreRecipe.class.getName()); - sNativeRecipeClasses.add(GT_Shaped_Recipe.class.getName()); - sNativeRecipeClasses.add(ShapelessRecipes.class.getName()); - sNativeRecipeClasses.add(ShapelessOreRecipe.class.getName()); - sNativeRecipeClasses.add(GT_Shapeless_Recipe.class.getName()); - sNativeRecipeClasses.add(ic2.core.AdvRecipe.class.getName()); - sNativeRecipeClasses.add(ic2.core.AdvShapelessRecipe.class.getName()); - sNativeRecipeClasses.add("appeng.recipes.game.ShapedRecipe"); - sNativeRecipeClasses.add("appeng.recipes.game.ShapelessRecipe"); - sNativeRecipeClasses.add("forestry.core.utils.ShapedRecipeCustom"); - - // Recipe Classes, which should never be removed. - sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipeFireworks.class.getName()); - sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipesArmorDyes.class.getName()); - sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipeBookCloning.class.getName()); - sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipesMapCloning.class.getName()); - sSpecialRecipeClasses.add(net.minecraft.item.crafting.RecipesMapExtending.class.getName()); - sSpecialRecipeClasses.add("jds.bibliocraft.BiblioSpecialRecipes"); - sSpecialRecipeClasses.add("dan200.qcraft.shared.EntangledQBlockRecipe"); - sSpecialRecipeClasses.add("dan200.qcraft.shared.EntangledQuantumComputerRecipe"); - sSpecialRecipeClasses.add("dan200.qcraft.shared.QBlockRecipe"); - sSpecialRecipeClasses.add("appeng.recipes.game.FacadeRecipe"); - sSpecialRecipeClasses.add("appeng.recipes.game.DisassembleRecipe"); - sSpecialRecipeClasses.add("mods.railcraft.common.carts.LocomotivePaintingRecipe"); - sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.RotorRepairRecipe"); - sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.RoutingTableCopyRecipe"); - sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.RoutingTicketCopyRecipe"); - sSpecialRecipeClasses.add("mods.railcraft.common.util.crafting.TankCartFilterRecipe"); - sSpecialRecipeClasses.add("mods.railcraft.common.emblems.LocomotiveEmblemRecipe"); - sSpecialRecipeClasses.add("mods.railcraft.common.emblems.EmblemPostColorRecipe"); - sSpecialRecipeClasses.add("mods.railcraft.common.emblems.EmblemPostEmblemRecipe"); - sSpecialRecipeClasses.add("mods.immibis.redlogic.interaction.RecipeDyeLumarButton"); - sSpecialRecipeClasses.add("thaumcraft.common.items.armor.RecipesRobeArmorDyes"); - sSpecialRecipeClasses.add("thaumcraft.common.items.armor.RecipesVoidRobeArmorDyes"); - sSpecialRecipeClasses.add("thaumcraft.common.lib.crafting.ShapelessNBTOreRecipe"); - sSpecialRecipeClasses.add("twilightforest.item.TFMapCloningRecipe"); - sSpecialRecipeClasses.add("forestry.lepidopterology.MatingRecipe"); - sSpecialRecipeClasses.add("micdoodle8.mods.galacticraft.planets.asteroids.recipe.CanisterRecipes"); - sSpecialRecipeClasses.add("shedar.mods.ic2.nuclearcontrol.StorageArrayRecipe"); - } - - /** - * Returns if that Liquid is Water or Distilled Water - */ - public static boolean isWater(FluidStack aFluid) { - if (aFluid == null) return false; - return aFluid.isFluidEqual(getWater(1)) || aFluid.isFluidEqual(getDistilledWater(1)); - } - - /** - * Returns a Liquid Stack with given amount of Water. - */ - public static FluidStack getWater(long aAmount) { - return FluidRegistry.getFluidStack("water", (int) aAmount); - } - - /** - * Returns a Liquid Stack with given amount of distilled Water. - */ - public static FluidStack getDistilledWater(long aAmount) { - FluidStack tFluid = FluidRegistry.getFluidStack("ic2distilledwater", (int) aAmount); - if (tFluid == null) tFluid = getWater(aAmount); - return tFluid; - } - - /** - * Returns if that Liquid is Lava - */ - public static boolean isLava(FluidStack aFluid) { - if (aFluid == null) return false; - return aFluid.isFluidEqual(getLava(1)); - } - - /** - * Returns a Liquid Stack with given amount of Lava. - */ - public static FluidStack getLava(long aAmount) { - return FluidRegistry.getFluidStack("lava", (int) aAmount); - } - - /** - * Returns if that Liquid is Steam - */ - public static boolean isSteam(FluidStack aFluid) { - if (aFluid == null) return false; - return aFluid.isFluidEqual(getSteam(1)); - } - - /** - * Returns if that Liquid is Any Steam (including other mods) - */ - public static boolean isAnySteam(FluidStack aFluid) { - return (aFluid != null && (isSteam(aFluid) || sAnySteamFluidIDs.contains(aFluid.getFluidID()))); - } - - /** - * Returns if that Liquid is Super Heated Steam (including other mods) - */ - public static boolean isSuperHeatedSteam(FluidStack aFluid) { - return (aFluid != null && sSuperHeatedSteamFluidIDs.contains(aFluid.getFluidID())); - } - - /** - * Returns a Liquid Stack with given amount of Steam. - */ - public static FluidStack getSteam(long aAmount) { - return FluidRegistry.getFluidStack("steam", (int) aAmount); - } - - /** - * Returns if that Liquid is Milk - */ - public static boolean isMilk(FluidStack aFluid) { - if (aFluid == null) return false; - return aFluid.isFluidEqual(getMilk(1)); - } - - /** - * Returns a Liquid Stack with given amount of Milk. - */ - public static FluidStack getMilk(long aAmount) { - return FluidRegistry.getFluidStack("milk", (int) aAmount); - } - - public static ItemStack getEmptyCell(long aAmount) { - return ItemList.Cell_Empty.get(aAmount); - } - - public static ItemStack getAirCell(long aAmount) { - return ItemList.Cell_Air.get(aAmount); - } - - public static ItemStack getWaterCell(long aAmount) { - return ItemList.Cell_Water.get(aAmount); - } - - public static ItemStack getLavaCell(long aAmount) { - return ItemList.Cell_Lava.get(aAmount); - } - - /** - * @param aValue the Value of this Stack, when burning inside a Furnace (200 = 1 Burn Process = 500 EU, max = 32767 - * (that is 81917.5 EU)), limited to Short because the vanilla Furnace otherwise can't handle it - * properly, stupid Mojang... - */ - public static ItemStack setFuelValue(ItemStack aStack, short aValue) { - aStack.setTagCompound(GT_Utility.getNBTContainingShort(aStack.getTagCompound(), "GT.ItemFuelValue", aValue)); - return aStack; - } - - /** - * @return the Value of this Stack, when burning inside a Furnace (200 = 1 Burn Process = 500 EU, max = 32767 (that - * is 81917.5 EU)), limited to Short because the vanilla Furnace otherwise can't handle it properly, stupid - * Mojang... - */ - public static int getFuelValue(ItemStack aStack) { - return TileEntityFurnace.getItemBurnTime(aStack); - } - - /** - * Gets an Item from IndustrialCraft, and returns a Replacement Item if not possible - */ - public static ItemStack getIC2Item(String aItem, long aAmount, ItemStack aReplacement) { - if (GT_Utility.isStringInvalid(aItem) || !GregTech_API.sPreloadStarted) return null; - // if (D1) GT_Log.out.println("Requested the Item '" + aItem + "' from the IC2-API"); - if (!sIC2ItemMap.containsKey(aItem)) try { - ItemStack tStack = IC2Items.getItem(aItem); - sIC2ItemMap.put(aItem, tStack); - if (tStack == null && D1) GT_Log.err.println(aItem + " is not found in the IC2 Items!"); - } catch (Throwable e) { - /* Do nothing */ - } - return GT_Utility.copyAmount(aAmount, sIC2ItemMap.get(aItem), aReplacement); - } - - /** - * Gets an Item from IndustrialCraft, but the Damage Value can be specified, and returns a Replacement Item with the - * same Damage if not possible - */ - public static ItemStack getIC2Item(String aItem, long aAmount, int aMeta, ItemStack aReplacement) { - ItemStack rStack = getIC2Item(aItem, aAmount, aReplacement); - if (rStack == null) return null; - Items.feather.setDamage(rStack, aMeta); - return rStack; - } - - /** - * Gets an Item from IndustrialCraft, but the Damage Value can be specified - */ - public static ItemStack getIC2Item(String aItem, long aAmount, int aMeta) { - return getIC2Item(aItem, aAmount, aMeta, null); - } - - /** - * Gets an Item from IndustrialCraft - */ - public static ItemStack getIC2Item(String aItem, long aAmount) { - return getIC2Item(aItem, aAmount, null); - } - - /** - * Gets an Item from the specified mod - */ - public static ItemStack getModItem(String aModID, String aItem, long aAmount) { - return getModItem(aModID, aItem, aAmount, null); - } - - /** - * Gets an Item from the specified mod, and returns a Replacement Item if not possible - */ - public static ItemStack getModItem(String aModID, String aItem, long aAmount, ItemStack aReplacement) { - ItemStack result; - if (GT_Utility.isStringInvalid(aItem) || !GregTech_API.sPreloadStarted) { - result = null; - } else { - result = GT_Utility - .copyAmount(aAmount, GameRegistry.findItemStack(aModID, aItem, (int) aAmount), aReplacement); - } - - if (result == null) { - String reason; - if (GT_Utility.isStringInvalid(aItem)) { - reason = "the name of the item is an invalid string"; - } else if (!GregTech_API.sPreloadStarted) { - reason = "the GT5U preloading phase has not yet started"; - } else { - reason = "the item was not found in the game registry"; - } - String log_message = "getModItem call: object \"" + aItem - + "\" with mod id \"" - + aModID - + "\" has returned null because " - + reason; - GT_Log.out.println(log_message); - new Exception().printStackTrace(GT_Log.out); - } - return result; - } - - /** - * Gets an Item from the specified mod, but the Damage Value can be specified - */ - public static ItemStack getModItem(String aModID, String aItem, long aAmount, int aMeta) { - ItemStack rStack = getModItem(aModID, aItem, aAmount); - if (rStack == null) return null; - Items.feather.setDamage(rStack, aMeta); - return rStack; - } - - /** - * Gets an Item from the specified mod, but the Damage Value can be specified, and returns a Replacement Item with - * the same Damage if not possible - */ - public static ItemStack getModItem(String aModID, String aItem, long aAmount, int aMeta, ItemStack aReplacement) { - ItemStack rStack = getModItem(aModID, aItem, aAmount, aReplacement); - if (rStack == null) return null; - Items.feather.setDamage(rStack, aMeta); - return rStack; - } - - /** - * OUT OF ORDER - */ - @Deprecated - public static boolean getModeKeyDown(EntityPlayer aPlayer) { - return false; - } - - /** - * OUT OF ORDER - */ - @Deprecated - public static boolean getBoostKeyDown(EntityPlayer aPlayer) { - return false; - } - - /** - * OUT OF ORDER - */ - @Deprecated - public static boolean getJumpKeyDown(EntityPlayer aPlayer) { - return false; - } - - /** - * Adds a Valuable Ore to the Miner - */ - public static boolean addValuableOre(Block aBlock, int aMeta, int aValue) { - if (aValue <= 0) return false; - try { - Class.forName("ic2.core.IC2") - .getMethod("addValuableOre", IRecipeInput.class, int.class) - .invoke(null, new RecipeInputItemStack(new ItemStack(aBlock, 1, aMeta)), aValue); - } catch (Throwable e) { - /* Do nothing */ - } - return true; - } - - /** - * Adds a Scrapbox Drop. Fails at April first for the "suddenly Hoes"-Feature of IC2 - */ - public static boolean addScrapboxDrop(float aChance, ItemStack aOutput) { - aOutput = GT_OreDictUnificator.get(true, aOutput); - if (aOutput == null || aChance <= 0) return false; - aOutput.stackSize = 1; - if (GT_Config.troll && !GT_Utility.areStacksEqual(aOutput, new ItemStack(Items.wooden_hoe, 1, 0))) return false; - try { - GT_Utility.callMethod( - GT_Utility.getFieldContent("ic2.api.recipe.Recipes", "scrapboxDrops", true, true), - "addDrop", - true, - false, - true, - GT_Utility.copyOrNull(aOutput), - aChance); - GT_Utility.callMethod( - GT_Utility.getFieldContent("ic2.api.recipe.Recipes", "scrapboxDrops", true, true), - "addRecipe", - true, - true, - false, - GT_Utility.copyOrNull(aOutput), - aChance); - } catch (Throwable e) { - /* Do nothing */ - } - return true; - } - - /** - * Adds an Item to the Recycler Blacklist - */ - public static boolean addToRecyclerBlackList(ItemStack aRecycledStack) { - if (aRecycledStack == null) return false; - try { - ic2.api.recipe.Recipes.recyclerBlacklist.add(new RecipeInputItemStack(aRecycledStack)); - } catch (Throwable e) { - /* Do nothing */ - } - return true; - } - - /** - * Just simple Furnace smelting. Unbelievable how Minecraft fails at making a simple ItemStack->ItemStack mapping... - */ - public static boolean addSmeltingRecipe(ItemStack aInput, ItemStack aOutput) { - aOutput = GT_OreDictUnificator.get(true, aOutput); - if (aInput == null || aOutput == null) return false; - FurnaceRecipes.smelting() - .func_151394_a(aInput, GT_Utility.copyOrNull(aOutput), 0.0F); - return true; - } - - /** - * Adds to Furnace AND Alloy Smelter - */ - public static boolean addSmeltingAndAlloySmeltingRecipe(ItemStack aInput, ItemStack aOutput, boolean hidden) { - if (aInput == null || aOutput == null) { - return false; - } - boolean temp = aInput.stackSize == 1 && addSmeltingRecipe(aInput, aOutput); - ItemStack input2 = OrePrefixes.ingot.contains(aOutput) ? ItemList.Shape_Mold_Ingot.get(0) - : OrePrefixes.block.contains(aOutput) ? ItemList.Shape_Mold_Block.get(0) - : OrePrefixes.nugget.contains(aOutput) ? ItemList.Shape_Mold_Nugget.get(0) : null; - if (Materials.Graphite.contains(aInput)) { - return false; - } - if ((input2 == null) && ((OrePrefixes.ingot.contains(aInput)) || (OrePrefixes.dust.contains(aInput)) - || (OrePrefixes.gem.contains(aInput)))) { - return false; - } - GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder(); - if (input2 == null) { - recipeBuilder.itemInputs(aInput); - } else { - recipeBuilder.itemInputs(aInput, input2); - } - recipeBuilder.itemOutputs(aOutput) - .duration(6 * SECONDS + 10 * TICKS) - .eut(3) - .recipeCategory(RecipeCategories.alloySmelterRecycling); - if (hidden) { - recipeBuilder.hidden(); - } - recipeBuilder.addTo(alloySmelterRecipes); - return true; - } - - /** - * Removes IC2 recipes. - */ - public static void removeAllIC2Recipes() { - getMaceratorRecipeList().entrySet() - .clear(); - getCompressorRecipeList().entrySet() - .clear(); - getExtractorRecipeList().entrySet() - .clear(); - getOreWashingRecipeList().entrySet() - .clear(); - getThermalCentrifugeRecipeList().entrySet() - .clear(); - } - - /** - * Adds GT versions of the IC2 recipes from the supplied IC2RecipeList. Deprecated because all IC2 recipes - * have been manually added to GT. - */ - @Deprecated - public static void addIC2RecipesToGT(Map aIC2RecipeList, RecipeMap aGTRecipeMap, - boolean aAddGTRecipe, boolean aRemoveIC2Recipe, boolean aExcludeGTIC2Items) { - Map aRecipesToRemove = new HashMap<>(); - for (Entry iRecipeInputRecipeOutputEntry : aIC2RecipeList.entrySet()) { - if (iRecipeInputRecipeOutputEntry.getValue().items.isEmpty()) { - continue; - } - - for (ItemStack tStack : (iRecipeInputRecipeOutputEntry.getKey()).getInputs()) { - if (!GT_Utility.isStackValid(tStack)) { - continue; - } - - if (aAddGTRecipe) { - try { - if (aExcludeGTIC2Items && ((tStack.getUnlocalizedName() - .contains("gt.metaitem.01") - || tStack.getUnlocalizedName() - .contains("gt.blockores") - || tStack.getUnlocalizedName() - .contains("ic2.itemCrushed") - || tStack.getUnlocalizedName() - .contains("ic2.itemPurifiedCrushed")))) - continue; - switch (aGTRecipeMap.unlocalizedName) { - case "gt.recipe.macerator", "gt.recipe.extractor", "gt.recipe.compressor" -> GT_Values.RA - .stdBuilder() - .itemInputs( - GT_Utility.copyAmount( - iRecipeInputRecipeOutputEntry.getKey() - .getAmount(), - tStack)) - .itemOutputs(iRecipeInputRecipeOutputEntry.getValue().items.toArray(new ItemStack[0])) - .duration(15 * SECONDS) - .eut(2) - .addTo(aGTRecipeMap); - case "gt.recipe.thermalcentrifuge" -> GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.copyAmount( - iRecipeInputRecipeOutputEntry.getKey() - .getAmount(), - tStack)) - .itemOutputs(iRecipeInputRecipeOutputEntry.getValue().items.toArray(new ItemStack[0])) - .duration(25 * SECONDS) - .eut(48) - .addTo(aGTRecipeMap); - } - } catch (Exception e) { - e.printStackTrace(GT_Log.err); - } - } - if (aRemoveIC2Recipe) { - aRecipesToRemove.put(tStack, iRecipeInputRecipeOutputEntry.getValue().items.get(0)); - } - - } - - } - GT_Utility.bulkRemoveSimpleIC2MachineRecipe(aRecipesToRemove, aIC2RecipeList); - } - - public static Map getExtractorRecipeList() { - try { - return ic2.api.recipe.Recipes.extractor.getRecipes(); - } catch (Throwable e) { - /* Do nothing */ - } - return emptyRecipeMap; - } - - public static Map getCompressorRecipeList() { - try { - return ic2.api.recipe.Recipes.compressor.getRecipes(); - } catch (Throwable e) { - /* Do nothing */ - } - return emptyRecipeMap; - } - - public static Map getMaceratorRecipeList() { - try { - return ic2.api.recipe.Recipes.macerator.getRecipes(); - } catch (Throwable e) { - /* Do nothing */ - } - return emptyRecipeMap; - } - - public static Map getThermalCentrifugeRecipeList() { - try { - return ic2.api.recipe.Recipes.centrifuge.getRecipes(); - } catch (Throwable e) { - /* Do nothing */ - } - return emptyRecipeMap; - } - - public static Map getOreWashingRecipeList() { - try { - return ic2.api.recipe.Recipes.oreWashing.getRecipes(); - } catch (Throwable e) { - /* Do nothing */ - } - return emptyRecipeMap; - } - - /** - * IC2-OreWasher Recipe. Overloads old Recipes automatically - */ - @Deprecated - public static boolean addOreWasherRecipe(ItemStack aInput, int[] aChances, int aWaterAmount, Object... aOutput) { - if (aInput == null || aOutput == null || aOutput.length == 0 || aOutput[0] == null) return false; - RA.stdBuilder() - .itemInputs(aInput) - .itemOutputs((ItemStack) aOutput[0], (ItemStack) aOutput[1], (ItemStack) aOutput[2]) - .outputChances(aChances) - .fluidInputs(GT_ModHandler.getWater(aWaterAmount)) - .duration(25 * SECONDS) - .eut(16) - .addTo(oreWasherRecipes); - - RA.stdBuilder() - .itemInputs(aInput) - .itemOutputs((ItemStack) aOutput[0], (ItemStack) aOutput[1], (ItemStack) aOutput[2]) - .outputChances(aChances) - .fluidInputs(GT_ModHandler.getDistilledWater(aWaterAmount / 5)) - .duration(15 * SECONDS) - .eut(16) - .addTo(oreWasherRecipes); - return true; - } - - public static void stopBufferingCraftingRecipes() { - sBufferCraftingRecipes = false; - - bulkRemoveRecipeByOutput(delayedRemovalByOutput); - bulkRemoveByRecipe(delayedRemovalByRecipe); - sBufferRecipeList.forEach(GameRegistry::addRecipe); - - delayedRemovalByOutput.clear(); - delayedRemovalByRecipe.clear(); - sBufferRecipeList.clear(); - } - - /** - * Shapeless Crafting Recipes. Deletes conflicting Recipes too. - */ - public static boolean addCraftingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, - int[] aEnchantmentLevelsAdded, Object[] aRecipe) { - return addCraftingRecipe( - aResult, - aEnchantmentsAdded, - aEnchantmentLevelsAdded, - false, - true, - false, - false, - false, - false, - false, - false, - false, - false, - false, - false, - true, - aRecipe); - } - - /** - * Regular Crafting Recipes. Deletes conflicting Recipes too. - *

- * You can insert instances of IItemContainer into the Recipe Input Array directly without having to call "get(1)" - * on them. - *

- * Enums are automatically getting their "name()"-Method called in order to deliver an OreDict String. - *

- * Lowercase Letters are reserved for Tools. They are as follows: - *

- * 'b' ToolDictNames.craftingToolBlade 'c' ToolDictNames.craftingToolCrowbar, 'd' - * ToolDictNames.craftingToolScrewdriver, 'f' ToolDictNames.craftingToolFile, 'h' - * ToolDictNames.craftingToolHardHammer, 'i' ToolDictNames.craftingToolSolderingIron, 'j' - * ToolDictNames.craftingToolSolderingMetal, 'k' ToolDictNames.craftingToolKnive 'm' - * ToolDictNames.craftingToolMortar, 'p' ToolDictNames.craftingToolDrawplate, 'r' - * ToolDictNames.craftingToolSoftHammer, 's' ToolDictNames.craftingToolSaw, 'w' ToolDictNames.craftingToolWrench, - * 'x' ToolDictNames.craftingToolWireCutter, - */ - public static boolean addCraftingRecipe(ItemStack aResult, Object[] aRecipe) { - return addCraftingRecipe(aResult, 0, aRecipe); - } - - /** - * Regular Crafting Recipes. Deletes conflicting Recipes too. - *

- * You can insert instances of IItemContainer into the Recipe Input Array directly without having to call "get(1)" - * on them. - *

- * Enums are automatically getting their "name()"-Method called in order to deliver an OreDict String. - *

- * Lowercase Letters are reserved for Tools. They are as follows: - *

- * 'b' ToolDictNames.craftingToolBlade 'c' ToolDictNames.craftingToolCrowbar, 'd' - * ToolDictNames.craftingToolScrewdriver, 'f' ToolDictNames.craftingToolFile, 'h' - * ToolDictNames.craftingToolHardHammer, 'i' ToolDictNames.craftingToolSolderingIron, 'j' - * ToolDictNames.craftingToolSolderingMetal, 'k' ToolDictNames.craftingToolKnive 'm' - * ToolDictNames.craftingToolMortar, 'p' ToolDictNames.craftingToolDrawplate, 'r' - * ToolDictNames.craftingToolSoftHammer, 's' ToolDictNames.craftingToolSaw, 'w' ToolDictNames.craftingToolWrench, - * 'x' ToolDictNames.craftingToolWireCutter, - */ - public static boolean addCraftingRecipe(ItemStack aResult, long aBitMask, Object[] aRecipe) { - return addCraftingRecipe( - aResult, - new Enchantment[0], - new int[0], - (aBitMask & RecipeBits.MIRRORED) != 0, - (aBitMask & RecipeBits.BUFFERED) != 0, - (aBitMask & RecipeBits.KEEPNBT) != 0, - (aBitMask & RecipeBits.DISMANTLEABLE) != 0, - (aBitMask & RecipeBits.NOT_REMOVABLE) == 0, - (aBitMask & RecipeBits.REVERSIBLE) != 0, - (aBitMask & RecipeBits.DELETE_ALL_OTHER_RECIPES) != 0, - (aBitMask & RecipeBits.DELETE_ALL_OTHER_RECIPES_IF_SAME_NBT) != 0, - (aBitMask & RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES) != 0, - (aBitMask & RecipeBits.DELETE_ALL_OTHER_NATIVE_RECIPES) != 0, - (aBitMask & RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS) == 0, - (aBitMask & RecipeBits.ONLY_ADD_IF_THERE_IS_ANOTHER_RECIPE_FOR_IT) != 0, - (aBitMask & RecipeBits.ONLY_ADD_IF_RESULT_IS_NOT_NULL) != 0, - aRecipe); - } - - public static boolean addMachineCraftingRecipe(ItemStack aResult, long aBitMask, Object[] aRecipe, - int machineTier) { - if (aRecipe != null) { - for (int i = 3; i < aRecipe.length; i++) { - if (!(aRecipe[i] instanceof GT_MetaTileEntity_BasicMachine_GT_Recipe.X)) continue; - - // spotless:off - aRecipe[i] = switch ((GT_MetaTileEntity_BasicMachine_GT_Recipe.X) aRecipe[i]) { - case CIRCUIT -> Tier.ELECTRIC[machineTier].mManagingObject; - case BETTER_CIRCUIT -> Tier.ELECTRIC[machineTier].mBetterManagingObject; - case HULL -> Tier.ELECTRIC[machineTier].mHullObject; - case WIRE -> Tier.ELECTRIC[machineTier].mConductingObject; - case WIRE4 -> Tier.ELECTRIC[machineTier].mLargerConductingObject; - case STICK_DISTILLATION -> OrePrefixes.stick.get(Materials.Blaze); - - case GLASS -> switch (machineTier) { - case 0, 1, 2, 3 -> new ItemStack(Blocks.glass, 1, W); - case 4, 5, 6, 7, 8 -> "blockGlass" + VN[machineTier]; - default -> "blockGlass" + VN[8]; - }; - - case PLATE -> switch (machineTier) { - case 0, 1 -> OrePrefixes.plate.get(Materials.Steel); - case 2 -> OrePrefixes.plate.get(Materials.Aluminium); - case 3 -> OrePrefixes.plate.get(Materials.StainlessSteel); - case 4 -> OrePrefixes.plate.get(Materials.Titanium); - case 5 -> OrePrefixes.plate.get(Materials.TungstenSteel); - case 6 -> OrePrefixes.plate.get(Materials.HSSG); - case 7 -> OrePrefixes.plate.get(Materials.HSSE); - default -> OrePrefixes.plate.get(Materials.Neutronium); - }; - - case PIPE -> switch (machineTier) { - case 0, 1 -> OrePrefixes.pipeMedium.get(Materials.Bronze); - case 2 -> OrePrefixes.pipeMedium.get(Materials.Steel); - case 3 -> OrePrefixes.pipeMedium.get(Materials.StainlessSteel); - case 4 -> OrePrefixes.pipeMedium.get(Materials.Titanium); - case 5 -> OrePrefixes.pipeMedium.get(Materials.TungstenSteel); - case 6 -> OrePrefixes.pipeSmall.get(Materials.Ultimate); - case 7 -> OrePrefixes.pipeMedium.get(Materials.Ultimate); - case 8 -> OrePrefixes.pipeLarge.get(Materials.Ultimate); - default -> OrePrefixes.pipeHuge.get(Materials.Ultimate); - }; - - case COIL_HEATING -> switch (machineTier) { - case 0, 1 -> OrePrefixes.wireGt02.get(Materials.AnyCopper); - case 2 -> OrePrefixes.wireGt02.get(Materials.Cupronickel); - case 3 -> OrePrefixes.wireGt02.get(Materials.Kanthal); - case 4 -> OrePrefixes.wireGt02.get(Materials.Nichrome); - case 5 -> OrePrefixes.wireGt02.get(Materials.TPV); - case 6 -> OrePrefixes.wireGt02.get(Materials.HSSG); - case 7 -> OrePrefixes.wireGt02.get(Materials.Naquadah); - case 8 -> OrePrefixes.wireGt02.get(Materials.NaquadahAlloy); - case 9 -> OrePrefixes.wireGt04.get(Materials.NaquadahAlloy); - default -> OrePrefixes.wireGt08.get(Materials.NaquadahAlloy); - }; - - case COIL_HEATING_DOUBLE -> switch (machineTier) { - case 0, 1 -> OrePrefixes.wireGt04.get(Materials.AnyCopper); - case 2 -> OrePrefixes.wireGt04.get(Materials.Cupronickel); - case 3 -> OrePrefixes.wireGt04.get(Materials.Kanthal); - case 4 -> OrePrefixes.wireGt04.get(Materials.Nichrome); - case 5 -> OrePrefixes.wireGt04.get(Materials.TPV); - case 6 -> OrePrefixes.wireGt04.get(Materials.HSSG); - case 7 -> OrePrefixes.wireGt04.get(Materials.Naquadah); - case 8 -> OrePrefixes.wireGt04.get(Materials.NaquadahAlloy); - case 9 -> OrePrefixes.wireGt08.get(Materials.NaquadahAlloy); - default -> OrePrefixes.wireGt16.get(Materials.NaquadahAlloy); - }; - - case STICK_MAGNETIC -> switch (machineTier) { - case 0, 1 -> OrePrefixes.stick.get(Materials.IronMagnetic); - case 2, 3 -> OrePrefixes.stick.get(Materials.SteelMagnetic); - case 4, 5 -> OrePrefixes.stick.get(Materials.NeodymiumMagnetic); - case 6, 7, 8, 9 -> OrePrefixes.stick.get(Materials.SamariumMagnetic); - default -> OrePrefixes.stick.get(Materials.TengamAttuned); - }; - - case STICK_ELECTROMAGNETIC -> switch (machineTier) { - case 0, 1 -> OrePrefixes.stick.get(Materials.AnyIron); - case 2, 3 -> OrePrefixes.stick.get(Materials.Steel); - case 4 -> OrePrefixes.stick.get(Materials.Neodymium); - default -> OrePrefixes.stick.get(Materials.VanadiumGallium); - }; - - case COIL_ELECTRIC -> switch (machineTier) { - case 0 -> OrePrefixes.wireGt01.get(Materials.Lead); - case 1 -> OrePrefixes.wireGt02.get(Materials.Tin); - case 2 -> OrePrefixes.wireGt02.get(Materials.AnyCopper); - case 3 -> OrePrefixes.wireGt04.get(Materials.AnyCopper); - case 4 -> OrePrefixes.wireGt08.get(Materials.AnnealedCopper); - case 5 -> OrePrefixes.wireGt16.get(Materials.AnnealedCopper); - case 6 -> OrePrefixes.wireGt04.get(Materials.YttriumBariumCuprate); - case 7 -> OrePrefixes.wireGt08.get(Materials.Iridium); - default -> OrePrefixes.wireGt16.get(Materials.Osmium); - }; - - case ROBOT_ARM -> switch (machineTier) { - case 0, 1 -> ItemList.Robot_Arm_LV; - case 2 -> ItemList.Robot_Arm_MV; - case 3 -> ItemList.Robot_Arm_HV; - case 4 -> ItemList.Robot_Arm_EV; - case 5 -> ItemList.Robot_Arm_IV; - case 6 -> ItemList.Robot_Arm_LuV; - case 7 -> ItemList.Robot_Arm_ZPM; - case 8 -> ItemList.Robot_Arm_UV; - case 9 -> ItemList.Robot_Arm_UHV; - case 10 -> ItemList.Robot_Arm_UEV; - case 11 -> ItemList.Robot_Arm_UIV; - case 12 -> ItemList.Robot_Arm_UMV; - case 13 -> ItemList.Robot_Arm_UXV; - default -> ItemList.Robot_Arm_MAX; - }; - - case PUMP -> switch (machineTier) { - case 0, 1 -> ItemList.Electric_Pump_LV; - case 2 -> ItemList.Electric_Pump_MV; - case 3 -> ItemList.Electric_Pump_HV; - case 4 -> ItemList.Electric_Pump_EV; - case 5 -> ItemList.Electric_Pump_IV; - case 6 -> ItemList.Electric_Pump_LuV; - case 7 -> ItemList.Electric_Pump_ZPM; - case 8 -> ItemList.Electric_Pump_UV; - case 9 -> ItemList.Electric_Pump_UHV; - case 10 -> ItemList.Electric_Pump_UEV; - case 11 -> ItemList.Electric_Pump_UIV; - case 12 -> ItemList.Electric_Pump_UMV; - case 13 -> ItemList.Electric_Pump_UXV; - default -> ItemList.Electric_Pump_MAX; - }; - - case MOTOR -> switch (machineTier) { - case 0, 1 -> ItemList.Electric_Motor_LV; - case 2 -> ItemList.Electric_Motor_MV; - case 3 -> ItemList.Electric_Motor_HV; - case 4 -> ItemList.Electric_Motor_EV; - case 5 -> ItemList.Electric_Motor_IV; - case 6 -> ItemList.Electric_Motor_LuV; - case 7 -> ItemList.Electric_Motor_ZPM; - case 8 -> ItemList.Electric_Motor_UV; - case 9 -> ItemList.Electric_Motor_UHV; - case 10 -> ItemList.Electric_Motor_UEV; - case 11 -> ItemList.Electric_Motor_UIV; - case 12 -> ItemList.Electric_Motor_UMV; - case 13 -> ItemList.Electric_Motor_UXV; - default -> ItemList.Electric_Motor_MAX; - }; - - case PISTON -> switch (machineTier) { - case 0, 1 -> ItemList.Electric_Piston_LV; - case 2 -> ItemList.Electric_Piston_MV; - case 3 -> ItemList.Electric_Piston_HV; - case 4 -> ItemList.Electric_Piston_EV; - case 5 -> ItemList.Electric_Piston_IV; - case 6 -> ItemList.Electric_Piston_LuV; - case 7 -> ItemList.Electric_Piston_ZPM; - case 8 -> ItemList.Electric_Piston_UV; - case 9 -> ItemList.Electric_Piston_UHV; - case 10 -> ItemList.Electric_Piston_UEV; - case 11 -> ItemList.Electric_Piston_UIV; - case 12 -> ItemList.Electric_Piston_UMV; - case 13 -> ItemList.Electric_Piston_UXV; - default -> ItemList.Electric_Piston_MAX; - }; - - case CONVEYOR -> switch (machineTier) { - case 0, 1 -> ItemList.Conveyor_Module_LV; - case 2 -> ItemList.Conveyor_Module_MV; - case 3 -> ItemList.Conveyor_Module_HV; - case 4 -> ItemList.Conveyor_Module_EV; - case 5 -> ItemList.Conveyor_Module_IV; - case 6 -> ItemList.Conveyor_Module_LuV; - case 7 -> ItemList.Conveyor_Module_ZPM; - case 8 -> ItemList.Conveyor_Module_UV; - case 9 -> ItemList.Conveyor_Module_UHV; - case 10 -> ItemList.Conveyor_Module_UEV; - case 11 -> ItemList.Conveyor_Module_UIV; - case 12 -> ItemList.Conveyor_Module_UMV; - case 13 -> ItemList.Conveyor_Module_UXV; - default -> ItemList.Conveyor_Module_MAX; - }; - - case EMITTER -> switch (machineTier) { - case 0, 1 -> ItemList.Emitter_LV; - case 2 -> ItemList.Emitter_MV; - case 3 -> ItemList.Emitter_HV; - case 4 -> ItemList.Emitter_EV; - case 5 -> ItemList.Emitter_IV; - case 6 -> ItemList.Emitter_LuV; - case 7 -> ItemList.Emitter_ZPM; - case 8 -> ItemList.Emitter_UV; - case 9 -> ItemList.Emitter_UHV; - case 10 -> ItemList.Emitter_UEV; - case 11 -> ItemList.Emitter_UIV; - case 12 -> ItemList.Emitter_UMV; - case 13 -> ItemList.Emitter_UXV; - default -> ItemList.Emitter_MAX; - }; - - case SENSOR -> switch (machineTier) { - case 0, 1 -> ItemList.Sensor_LV; - case 2 -> ItemList.Sensor_MV; - case 3 -> ItemList.Sensor_HV; - case 4 -> ItemList.Sensor_EV; - case 5 -> ItemList.Sensor_IV; - case 6 -> ItemList.Sensor_LuV; - case 7 -> ItemList.Sensor_ZPM; - case 8 -> ItemList.Sensor_UV; - case 9 -> ItemList.Sensor_UHV; - case 10 -> ItemList.Sensor_UEV; - case 11 -> ItemList.Sensor_UIV; - case 12 -> ItemList.Sensor_UMV; - case 13 -> ItemList.Sensor_UXV; - default -> ItemList.Sensor_MAX; - }; - - case FIELD_GENERATOR -> switch (machineTier) { - case 0, 1 -> ItemList.Field_Generator_LV; - case 2 -> ItemList.Field_Generator_MV; - case 3 -> ItemList.Field_Generator_HV; - case 4 -> ItemList.Field_Generator_EV; - case 5 -> ItemList.Field_Generator_IV; - case 6 -> ItemList.Field_Generator_LuV; - case 7 -> ItemList.Field_Generator_ZPM; - case 8 -> ItemList.Field_Generator_UV; - case 9 -> ItemList.Field_Generator_UHV; - case 10 -> ItemList.Field_Generator_UEV; - case 11 -> ItemList.Field_Generator_UIV; - case 12 -> ItemList.Field_Generator_UMV; - case 13 -> ItemList.Field_Generator_UXV; - default -> ItemList.Field_Generator_MAX; - }; - - case ROTOR -> switch (machineTier) { - case 0, 1 -> OrePrefixes.rotor.get(Materials.Tin); - case 2 -> OrePrefixes.rotor.get(Materials.Bronze); - case 3 -> OrePrefixes.rotor.get(Materials.Steel); - case 4 -> OrePrefixes.rotor.get(Materials.StainlessSteel); - case 5 -> OrePrefixes.rotor.get(Materials.TungstenSteel); - case 6 -> OrePrefixes.rotor.get(ExternalMaterials.getRhodiumPlatedPalladium()); - case 7 -> OrePrefixes.rotor.get(Materials.Iridium); - default -> OrePrefixes.rotor.get(Materials.Osmium); - }; - - default -> throw new IllegalArgumentException("MISSING TIER MAPPING FOR: " + aRecipe[i] + " AT TIER " + machineTier); - }; - // spotless:on - } - - if (!GT_ModHandler.addCraftingRecipe( - aResult, - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.BUFFERED - | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - aRecipe)) { - throw new IllegalArgumentException("INVALID CRAFTING RECIPE FOR: " + aResult.getDisplayName()); - } - } - return true; - } - - /** - * Internal realisation of the Crafting Recipe adding Process. - */ - private static boolean addCraftingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, - int[] aEnchantmentLevelsAdded, boolean aMirrored, boolean aBuffered, boolean aKeepNBT, boolean aDismantleable, - boolean aRemovable, boolean aReversible, boolean aRemoveAllOthersWithSameOutput, - boolean aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT, boolean aRemoveAllOtherShapedsWithSameOutput, - boolean aRemoveAllOtherNativeRecipes, boolean aCheckForCollisions, - boolean aOnlyAddIfThereIsAnyRecipeOutputtingThis, boolean aOnlyAddIfResultIsNotNull, Object[] aRecipe) { - - aResult = GT_OreDictUnificator.get(true, aResult); - if (aOnlyAddIfResultIsNotNull && aResult == null) return false; - if (aResult != null && Items.feather.getDamage(aResult) == W) Items.feather.setDamage(aResult, 0); - if (aRecipe == null || aRecipe.length == 0) return false; - - // The renamed variable clarifies what's happening - // noinspection UnnecessaryLocalVariable - boolean tDoWeCareIfThereWasARecipe = aOnlyAddIfThereIsAnyRecipeOutputtingThis; - boolean tThereWasARecipe = false; - - for (byte i = 0; i < aRecipe.length; i++) { - if (aRecipe[i] instanceof IItemContainer) aRecipe[i] = ((IItemContainer) aRecipe[i]).get(1); - else if (aRecipe[i] instanceof Enum) aRecipe[i] = ((Enum) aRecipe[i]).name(); - else if (!(aRecipe[i] == null || aRecipe[i] instanceof ItemStack - || aRecipe[i] instanceof ItemData - || aRecipe[i] instanceof String - || aRecipe[i] instanceof Character)) aRecipe[i] = aRecipe[i].toString(); - } - - try { - StringBuilder shape = new StringBuilder(E); - int idx = 0; - if (aRecipe[idx] instanceof Boolean) { - throw new IllegalArgumentException(); - } - - ArrayList tRecipeList = new ArrayList<>(Arrays.asList(aRecipe)); - - while (aRecipe[idx] instanceof String) { - StringBuilder s = new StringBuilder((String) aRecipe[idx++]); - shape.append(s); - while (s.length() < 3) s.append(" "); - if (s.length() > 3) throw new IllegalArgumentException(); - - for (char c : s.toString() - .toCharArray()) { - switch (c) { - case 'b' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolBlade.name()); - } - case 'c' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolCrowbar.name()); - } - case 'd' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolScrewdriver.name()); - } - case 'f' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolFile.name()); - } - case 'h' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolHardHammer.name()); - } - case 'i' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolSolderingIron.name()); - } - case 'j' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolSolderingMetal.name()); - } - case 'k' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolKnife.name()); - } - case 'm' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolMortar.name()); - } - case 'p' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolDrawplate.name()); - } - case 'r' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolSoftHammer.name()); - } - case 's' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolSaw.name()); - } - case 'w' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolWrench.name()); - } - case 'x' -> { - tRecipeList.add(c); - tRecipeList.add(ToolDictNames.craftingToolWireCutter.name()); - } - } - } - } - - aRecipe = tRecipeList.toArray(); - - if (aRecipe[idx] instanceof Boolean) { - idx++; - } - Map tItemStackMap = new HashMap<>(); - Map tItemDataMap = new HashMap<>(); - tItemStackMap.put(' ', null); - - boolean tRemoveRecipe = true; - - for (; idx < aRecipe.length; idx += 2) { - if (aRecipe[idx] == null || aRecipe[idx + 1] == null) { - if (D1) { - GT_Log.err.println( - "WARNING: Missing Item for shaped Recipe: " - + (aResult == null ? "null" : aResult.getDisplayName())); - for (Object tContent : aRecipe) GT_Log.err.println(tContent); - } - return false; - } - Character chr = (Character) aRecipe[idx]; - Object in = aRecipe[idx + 1]; - if (in instanceof ItemStack is) { - tItemStackMap.put(chr, GT_Utility.copyOrNull(is)); - tItemDataMap.put(chr, GT_OreDictUnificator.getItemData(is)); - } else if (in instanceof ItemData) { - String tString = in.toString(); - switch (tString) { - case "plankWood" -> tItemDataMap.put(chr, new ItemData(Materials.Wood, M)); - case "stoneNetherrack" -> tItemDataMap.put(chr, new ItemData(Materials.Netherrack, M)); - case "stoneObsidian" -> tItemDataMap.put(chr, new ItemData(Materials.Obsidian, M)); - case "stoneEndstone" -> tItemDataMap.put(chr, new ItemData(Materials.Endstone, M)); - default -> tItemDataMap.put(chr, (ItemData) in); - } - ItemStack tStack = GT_OreDictUnificator.getFirstOre(in, 1); - if (tStack == null) tRemoveRecipe = false; - else tItemStackMap.put(chr, tStack); - in = aRecipe[idx + 1] = in.toString(); - } else if (in instanceof String) { - if (in.equals(OreDictNames.craftingChest.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Wood, M * 8)); - else if (in.equals(OreDictNames.craftingBook.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Paper, M * 3)); - else if (in.equals(OreDictNames.craftingPiston.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Stone, M * 4, Materials.Wood, M * 3)); - else if (in.equals(OreDictNames.craftingFurnace.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Stone, M * 8)); - else if (in.equals(OreDictNames.craftingIndustrialDiamond.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Diamond, M)); - else if (in.equals(OreDictNames.craftingAnvil.toString())) - tItemDataMap.put(chr, new ItemData(Materials.Iron, M * 10)); - ItemStack tStack = GT_OreDictUnificator.getFirstOre(in, 1); - if (tStack == null) tRemoveRecipe = false; - else tItemStackMap.put(chr, tStack); - } else { - throw new IllegalArgumentException(); - } - } - - if (aReversible && aResult != null) { - ItemData[] tData = new ItemData[9]; - int x = -1; - for (char chr : shape.toString() - .toCharArray()) tData[++x] = tItemDataMap.get(chr); - if (GT_Utility.arrayContainsNonNull(tData)) - GT_OreDictUnificator.addItemData(aResult, new ItemData(tData)); - } - - if (aCheckForCollisions && tRemoveRecipe) { - ItemStack[] tRecipe = new ItemStack[9]; - int x = -1; - for (char chr : shape.toString() - .toCharArray()) { - tRecipe[++x] = tItemStackMap.get(chr); - if (tRecipe[x] != null && Items.feather.getDamage(tRecipe[x]) == W) - Items.feather.setDamage(tRecipe[x], 0); - } - if (tDoWeCareIfThereWasARecipe || !aBuffered) tThereWasARecipe = removeRecipe(tRecipe) != null; - else removeRecipeDelayed(tRecipe); - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - - if (aResult == null || aResult.stackSize <= 0) return false; - - if (aRemoveAllOthersWithSameOutput || aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT - || aRemoveAllOtherShapedsWithSameOutput - || aRemoveAllOtherNativeRecipes) { - if (tDoWeCareIfThereWasARecipe || !aBuffered) tThereWasARecipe = removeRecipeByOutput( - aResult, - !aRemoveAllOthersWithSameOutputIfTheyHaveSameNBT, - aRemoveAllOtherShapedsWithSameOutput, - aRemoveAllOtherNativeRecipes) || tThereWasARecipe; - else removeRecipeByOutputDelayed(aResult); - } - - if (aOnlyAddIfThereIsAnyRecipeOutputtingThis && !tDoWeCareIfThereWasARecipe && !tThereWasARecipe) { - ArrayList tList = (ArrayList) CraftingManager.getInstance() - .getRecipeList(); - int tList_sS = tList.size(); - for (int i = 0; i < tList_sS && !tThereWasARecipe; i++) { - IRecipe tRecipe = tList.get(i); - if (sSpecialRecipeClasses.contains( - tRecipe.getClass() - .getName())) - continue; - if (GT_Utility.areStacksEqual(GT_OreDictUnificator.get(tRecipe.getRecipeOutput()), aResult, true)) { - tList.remove(i--); - tList_sS = tList.size(); - tThereWasARecipe = true; - } - } - } - - if (Items.feather.getDamage(aResult) == W || Items.feather.getDamage(aResult) < 0) - Items.feather.setDamage(aResult, 0); - - GT_Utility.updateItemStack(aResult); - - if (tThereWasARecipe || !aOnlyAddIfThereIsAnyRecipeOutputtingThis) { - if (sBufferCraftingRecipes && aBuffered) sBufferRecipeList.add( - new GT_Shaped_Recipe( - GT_Utility.copyOrNull(aResult), - aDismantleable, - aRemovable, - aKeepNBT, - aEnchantmentsAdded, - aEnchantmentLevelsAdded, - aRecipe).setMirrored(aMirrored)); - else GameRegistry.addRecipe( - new GT_Shaped_Recipe( - GT_Utility.copyOrNull(aResult), - aDismantleable, - aRemovable, - aKeepNBT, - aEnchantmentsAdded, - aEnchantmentLevelsAdded, - aRecipe).setMirrored(aMirrored)); - } - return true; - } - - /** - * Shapeless Crafting Recipes. Deletes conflicting Recipes too. - */ - public static boolean addShapelessEnchantingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, - int[] aEnchantmentLevelsAdded, Object[] aRecipe) { - return addShapelessCraftingRecipe( - aResult, - aEnchantmentsAdded, - aEnchantmentLevelsAdded, - true, - false, - false, - false, - aRecipe); - } - - /** - * Shapeless Crafting Recipes. Deletes conflicting Recipes too. - */ - public static boolean addShapelessCraftingRecipe(ItemStack aResult, Object[] aRecipe) { - return addShapelessCraftingRecipe( - aResult, - RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | RecipeBits.BUFFERED, - aRecipe); - } - - /** - * Shapeless Crafting Recipes. Deletes conflicting Recipes too. - */ - public static boolean addShapelessCraftingRecipe(ItemStack aResult, long aBitMask, Object[] aRecipe) { - return addShapelessCraftingRecipe( - aResult, - new Enchantment[0], - new int[0], - (aBitMask & RecipeBits.BUFFERED) != 0, - (aBitMask & RecipeBits.KEEPNBT) != 0, - (aBitMask & RecipeBits.DISMANTLEABLE) != 0, - (aBitMask & RecipeBits.NOT_REMOVABLE) == 0, - aRecipe); - } - - /** - * Shapeless Crafting Recipes. Deletes conflicting Recipes too. - */ - private static boolean addShapelessCraftingRecipe(ItemStack aResult, Enchantment[] aEnchantmentsAdded, - int[] aEnchantmentLevelsAdded, boolean aBuffered, boolean aKeepNBT, boolean aDismantleable, boolean aRemovable, - Object[] aRecipe) { - aResult = GT_OreDictUnificator.get(true, aResult); - if (aRecipe == null || aRecipe.length == 0) return false; - for (byte i = 0; i < aRecipe.length; i++) { - if (aRecipe[i] instanceof IItemContainer) aRecipe[i] = ((IItemContainer) aRecipe[i]).get(1); - else if (aRecipe[i] instanceof Enum) aRecipe[i] = ((Enum) aRecipe[i]).name(); - else if (!(aRecipe[i] == null || aRecipe[i] instanceof ItemStack - || aRecipe[i] instanceof String - || aRecipe[i] instanceof Character)) aRecipe[i] = aRecipe[i].toString(); - } - try { - ItemStack[] tRecipe = new ItemStack[9]; - int i = 0; - for (Object tObject : aRecipe) { - if (tObject == null) { - if (D1) GT_Log.err.println( - "WARNING: Missing Item for shapeless Recipe: " - + (aResult == null ? "null" : aResult.getDisplayName())); - for (Object tContent : aRecipe) GT_Log.err.println(tContent); - return false; - } - if (tObject instanceof ItemStack) { - tRecipe[i] = (ItemStack) tObject; - } else if (tObject instanceof String) { - tRecipe[i] = GT_OreDictUnificator.getFirstOre(tObject, 1); - if (tRecipe[i] == null) break; - } - i++; - } - if (sBufferCraftingRecipes && aBuffered) removeRecipeDelayed(tRecipe); - else removeRecipe(tRecipe); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - - if (aResult == null || aResult.stackSize <= 0) return false; - - if (Items.feather.getDamage(aResult) == W || Items.feather.getDamage(aResult) < 0) - Items.feather.setDamage(aResult, 0); - - GT_Utility.updateItemStack(aResult); - - if (sBufferCraftingRecipes && aBuffered) sBufferRecipeList.add( - new GT_Shapeless_Recipe( - GT_Utility.copyOrNull(aResult), - aDismantleable, - aRemovable, - aKeepNBT, - aEnchantmentsAdded, - aEnchantmentLevelsAdded, - aRecipe)); - else GameRegistry.addRecipe( - new GT_Shapeless_Recipe( - GT_Utility.copyOrNull(aResult), - aDismantleable, - aRemovable, - aKeepNBT, - aEnchantmentsAdded, - aEnchantmentLevelsAdded, - aRecipe)); - return true; - } - - /** - * Removes a Smelting Recipe - */ - public static boolean removeFurnaceSmelting(ItemStack aInput) { - if (aInput != null) { - for (ItemStack tInput : FurnaceRecipes.smelting() - .getSmeltingList() - .keySet()) { - if (GT_Utility.isStackValid(tInput) && GT_Utility.areStacksEqual(aInput, tInput, true)) { - FurnaceRecipes.smelting() - .getSmeltingList() - .remove(tInput); - return true; - } - } - } - return false; - } - - /** - * Removes all matching Smelting Recipes by output - */ - public static boolean removeFurnaceSmeltingByOutput(ItemStack aOutput) { - if (aOutput != null) { - return FurnaceRecipes.smelting() - .getSmeltingList() - .values() - .removeIf( - tOutput -> GT_Utility.isStackValid(tOutput) && GT_Utility.areStacksEqual(aOutput, tOutput, true)); - } - return false; - } - - /** - * Removes a Crafting Recipe and gives you the former output of it. - * - * @param aRecipe The content of the Crafting Grid as ItemStackArray with length 9 - * @return the output of the old Recipe or null if there was nothing. - */ - public static ItemStack removeRecipe(ItemStack... aRecipe) { - if (aRecipe == null) return null; - if (Arrays.stream(aRecipe) - .noneMatch(Objects::nonNull)) return null; - - ItemStack rReturn = null; - InventoryCrafting aCrafting = new InventoryCrafting(new Container() { - - @Override - public boolean canInteractWith(EntityPlayer player) { - return false; - } - }, 3, 3); - for (int i = 0; i < aRecipe.length && i < 9; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]); - ArrayList tList = (ArrayList) CraftingManager.getInstance() - .getRecipeList(); - int tList_sS = tList.size(); - try { - for (int i = 0; i < tList_sS; i++) { - for (; i < tList_sS; i++) { - if ((!(tList.get(i) instanceof IGT_CraftingRecipe) - || ((IGT_CraftingRecipe) tList.get(i)).isRemovable()) && tList.get(i) - .matches(aCrafting, DW)) { - rReturn = tList.get(i) - .getCraftingResult(aCrafting); - if (rReturn != null) tList.remove(i--); - tList_sS = tList.size(); - } - } - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - return rReturn; - } - - public static void removeRecipeDelayed(ItemStack... aRecipe) { - if (!sBufferCraftingRecipes) { - removeRecipe(aRecipe); - return; - } - - if (aRecipe == null) return; - if (Arrays.stream(aRecipe) - .noneMatch(Objects::nonNull)) return; - - InventoryCrafting aCrafting = new InventoryCrafting(new Container() { - - @Override - public boolean canInteractWith(EntityPlayer player) { - return false; - } - }, 3, 3); - for (int i = 0; i < aRecipe.length && i < 9; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]); - delayedRemovalByRecipe.add(aCrafting); - } - - public static void bulkRemoveByRecipe(List toRemove) { - ArrayList tList = (ArrayList) CraftingManager.getInstance() - .getRecipeList(); - GT_FML_LOGGER.info("BulkRemoveByRecipe: tList: " + tList.size() + " toRemove: " + toRemove.size()); - - Set tListToRemove = tList.parallelStream() - .filter(tRecipe -> { - if ((tRecipe instanceof IGT_CraftingRecipe) && !((IGT_CraftingRecipe) tRecipe).isRemovable()) - return false; - return toRemove.stream() - .anyMatch(aCrafting -> tRecipe.matches(aCrafting, DW)); - }) - .collect(Collectors.toSet()); - - tList.removeIf(tListToRemove::contains); - } - - public static boolean removeRecipeByOutputDelayed(ItemStack aOutput) { - if (sBufferCraftingRecipes) return delayedRemovalByOutput.add(aOutput); - else return removeRecipeByOutput(aOutput); - } - - public static boolean removeRecipeByOutputDelayed(ItemStack aOutput, boolean aIgnoreNBT, - boolean aNotRemoveShapelessRecipes, boolean aOnlyRemoveNativeHandlers) { - if (sBufferCraftingRecipes && (aIgnoreNBT && !aNotRemoveShapelessRecipes && !aOnlyRemoveNativeHandlers)) - // Too lazy to handle deferred versions of the parameters that aren't used very often - return delayedRemovalByOutput.add(aOutput); - else return removeRecipeByOutput(aOutput, aIgnoreNBT, aNotRemoveShapelessRecipes, aOnlyRemoveNativeHandlers); - } - - public static boolean removeRecipeByOutput(ItemStack aOutput) { - return removeRecipeByOutput(aOutput, true, false, false); - } - - /** - * Removes a Crafting Recipe. - * - * @param aOutput The output of the Recipe. - * @return if it has removed at least one Recipe. - */ - public static boolean removeRecipeByOutput(ItemStack aOutput, boolean aIgnoreNBT, - boolean aNotRemoveShapelessRecipes, boolean aOnlyRemoveNativeHandlers) { - if (aOutput == null) return false; - boolean rReturn = false; - final ArrayList tList = (ArrayList) CraftingManager.getInstance() - .getRecipeList(); - aOutput = GT_OreDictUnificator.get(aOutput); - int tList_sS = tList.size(); - for (int i = 0; i < tList_sS; i++) { - final IRecipe tRecipe = tList.get(i); - if (aNotRemoveShapelessRecipes - && (tRecipe instanceof ShapelessRecipes || tRecipe instanceof ShapelessOreRecipe)) continue; - if (aOnlyRemoveNativeHandlers) { - if (!sNativeRecipeClasses.contains( - tRecipe.getClass() - .getName())) - continue; - } else { - if (sSpecialRecipeClasses.contains( - tRecipe.getClass() - .getName())) - continue; - } - ItemStack tStack = tRecipe.getRecipeOutput(); - if ((!(tRecipe instanceof IGT_CraftingRecipe) || ((IGT_CraftingRecipe) tRecipe).isRemovable()) - && GT_Utility.areStacksEqual(GT_OreDictUnificator.get(tStack), aOutput, aIgnoreNBT)) { - tList.remove(i--); - tList_sS = tList.size(); - rReturn = true; - } - } - return rReturn; - } - - public static boolean bulkRemoveRecipeByOutput(List toRemove) { - ArrayList tList = (ArrayList) CraftingManager.getInstance() - .getRecipeList(); - - Set setToRemove = toRemove.parallelStream() - .map(GT_OreDictUnificator::get_nocopy) - .collect(Collectors.toSet()); - - GT_FML_LOGGER.info("BulkRemoveRecipeByOutput: tList: " + tList.size() + " setToRemove: " + setToRemove.size()); - - Set tListToRemove = tList.parallelStream() - .filter(tRecipe -> { - if ((tRecipe instanceof IGT_CraftingRecipe) && !((IGT_CraftingRecipe) tRecipe).isRemovable()) - return false; - if (sSpecialRecipeClasses.contains( - tRecipe.getClass() - .getName())) - return false; - final ItemStack tStack = GT_OreDictUnificator.get_nocopy(tRecipe.getRecipeOutput()); - return setToRemove.stream() - .anyMatch(aOutput -> GT_Utility.areStacksEqual(tStack, aOutput, true)); - }) - .collect(Collectors.toSet()); - - tList.removeIf(tListToRemove::contains); - return true; - } - - /** - * Checks all Crafting Handlers for Recipe Output Used for the Autocrafting Table - */ - public static ItemStack getAllRecipeOutput(World aWorld, ItemStack... aRecipe) { - if (aRecipe == null || aRecipe.length == 0) return null; - - if (aWorld == null) aWorld = DW; - - boolean temp = false; - for (ItemStack itemStack : aRecipe) { - if (itemStack != null) { - temp = true; - break; - } - } - if (!temp) return null; - InventoryCrafting aCrafting = new InventoryCrafting(new Container() { - - @Override - public boolean canInteractWith(EntityPlayer player) { - return false; - } - }, 3, 3); - for (int i = 0; i < 9 && i < aRecipe.length; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]); - List tList = CraftingManager.getInstance() - .getRecipeList(); - synchronized (sAllRecipeList) { - if (sAllRecipeList.size() != tList.size()) { - sAllRecipeList.clear(); - sAllRecipeList.addAll(tList); - } - for (int i = 0, j = sAllRecipeList.size(); i < j; i++) { - IRecipe tRecipe = sAllRecipeList.get(i); - if (tRecipe.matches(aCrafting, aWorld)) { - if (i > 10) { - sAllRecipeList.remove(i); - sAllRecipeList.add(i - 10, tRecipe); - } - return tRecipe.getCraftingResult(aCrafting); - } - } - } - - int tIndex = 0; - ItemStack tStack1 = null, tStack2 = null; - for (int i = 0, j = aCrafting.getSizeInventory(); i < j; i++) { - ItemStack tStack = aCrafting.getStackInSlot(i); - if (tStack != null) { - if (tIndex == 0) tStack1 = tStack; - if (tIndex == 1) tStack2 = tStack; - tIndex++; - } - } - - if (tIndex == 2 && tStack2 != null) { - if (tStack1.getItem() == tStack2.getItem() && tStack1.stackSize == 1 - && tStack2.stackSize == 1 - && tStack1.getItem() - .isRepairable()) { - int tNewDamage = tStack1.getMaxDamage() + tStack1.getItemDamage() - - tStack2.getItemDamage() - + tStack1.getMaxDamage() / 20; - return new ItemStack(tStack1.getItem(), 1, Math.max(tNewDamage, 0)); - } - } - - return null; - } - - /** - * Gives you a copy of the Output from a Crafting Recipe Used for Recipe Detection. - */ - public static ItemStack getRecipeOutput(ItemStack... aRecipe) { - return getRecipeOutput(false, true, aRecipe); - } - - public static ItemStack getRecipeOutputNoOreDict(ItemStack... aRecipe) { - return getRecipeOutput(false, false, aRecipe); - } - - public static ItemStack getRecipeOutput(boolean aUncopiedStack, ItemStack... aRecipe) { - return getRecipeOutput(aUncopiedStack, true, aRecipe); - } - - /** - * Gives you a copy of the Output from a Crafting Recipe Used for Recipe Detection. - */ - public static ItemStack getRecipeOutput(boolean aUncopiedStack, boolean allowOreDict, ItemStack... aRecipe) { - if (aRecipe == null || Arrays.stream(aRecipe) - .noneMatch(Objects::nonNull)) return null; - - InventoryCrafting aCrafting = new InventoryCrafting(new Container() { - - @Override - public boolean canInteractWith(EntityPlayer player) { - return false; - } - }, 3, 3); - for (int i = 0; i < 9 && i < aRecipe.length; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]); - ArrayList tList = (ArrayList) CraftingManager.getInstance() - .getRecipeList(); - boolean found = false; - - for (IRecipe iRecipe : tList) { - found = false; - if (!allowOreDict && iRecipe instanceof ShapedOreRecipe) continue; - - try { - found = iRecipe.matches(aCrafting, DW); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - if (found) { - ItemStack tOutput = aUncopiedStack ? iRecipe.getRecipeOutput() : iRecipe.getCraftingResult(aCrafting); - if (tOutput == null || tOutput.stackSize <= 0) { - // Seriously, who would ever do that shit? - if (!GregTech_API.sPostloadFinished) throw new GT_ItsNotMyFaultException( - "Seems another Mod added a Crafting Recipe with null Output. Tell the Developer of said Mod to fix that."); - } else { - if (aUncopiedStack) return tOutput; - return GT_Utility.copyOrNull(tOutput); - } - } - } - return null; - } - - /** - * Gives you a list of the Outputs from a Crafting Recipe If you have multiple Mods, which add Bronze Armor for - * example This also removes old Recipes from the List. - */ - public static List getVanillyToolRecipeOutputs(ItemStack... aRecipe) { - if (!GregTech_API.sPostloadStarted || GregTech_API.sPostloadFinished) - sSingleNonBlockDamagableRecipeList.clear(); - if (sSingleNonBlockDamagableRecipeList.isEmpty()) { - for (IRecipe tRecipe : CraftingManager.getInstance() - .getRecipeList()) { - ItemStack tStack = tRecipe.getRecipeOutput(); - if (GT_Utility.isStackValid(tStack) && tStack.getMaxStackSize() == 1 - && tStack.getMaxDamage() > 0 - && !(tStack.getItem() instanceof ItemBlock) - && !(tStack.getItem() instanceof IReactorComponent) - && !isElectricItem(tStack) - && !GT_Utility.isStackInList(tStack, sNonReplaceableItems)) { - if (!(tRecipe instanceof ShapelessRecipes || tRecipe instanceof ShapelessOreRecipe)) { - if (tRecipe instanceof ShapedOreRecipe) { - boolean temp = true; - for (Object tObject : ((ShapedOreRecipe) tRecipe).getInput()) if (tObject != null) { - if (tObject instanceof ItemStack && (((ItemStack) tObject).getItem() == null - || ((ItemStack) tObject).getMaxStackSize() < 2 - || ((ItemStack) tObject).getMaxDamage() > 0 - || ((ItemStack) tObject).getItem() instanceof ItemBlock)) { - temp = false; - break; - } - if (tObject instanceof List && ((List) tObject).isEmpty()) { - temp = false; - break; - } - } - if (temp) sSingleNonBlockDamagableRecipeList.add(tRecipe); - } else if (tRecipe instanceof ShapedRecipes) { - boolean temp = true; - for (ItemStack tObject : ((ShapedRecipes) tRecipe).recipeItems) { - if (tObject != null && (tObject.getItem() == null || tObject.getMaxStackSize() < 2 - || tObject.getMaxDamage() > 0 - || tObject.getItem() instanceof ItemBlock)) { - temp = false; - break; - } - } - if (temp) sSingleNonBlockDamagableRecipeList.add(tRecipe); - } else { - sSingleNonBlockDamagableRecipeList.add(tRecipe); - } - } - } - } - GT_Log.out.println( - "GT_Mod: Created a List of Tool Recipes containing " + sSingleNonBlockDamagableRecipeList.size() - + " Recipes for recycling." - + (sSingleNonBlockDamagableRecipeList.size() > 1024 - ? " Scanning all these Recipes is the reason for the startup Lag you receive right now." - : E)); - } - List rList = getRecipeOutputs(sSingleNonBlockDamagableRecipeList, true, aRecipe); - if (!GregTech_API.sPostloadStarted || GregTech_API.sPostloadFinished) - sSingleNonBlockDamagableRecipeList.clear(); - return rList; - } - - /** - * Gives you a list of the Outputs from a Crafting Recipe If you have multiple Mods, which add Bronze Armor for - * example - */ - public static List getRecipeOutputs(ItemStack... aRecipe) { - return getRecipeOutputs( - CraftingManager.getInstance() - .getRecipeList(), - false, - aRecipe); - } - - private static List bufferedRecipes = null; - - /** - * Gives you a list of the Outputs from a Crafting Recipe If you have multiple Mods, which add Bronze Armor for - * example Buffers a List which only has armor-alike crafting in it - */ - public static List getRecipeOutputsBuffered(ItemStack... aRecipe) { - - if (bufferedRecipes == null) bufferedRecipes = CraftingManager.getInstance() - .getRecipeList() - .stream() - .filter( - tRecipe -> !(tRecipe instanceof ShapelessRecipes) && !(tRecipe instanceof ShapelessOreRecipe) - && !(tRecipe instanceof IGT_CraftingRecipe)) - .filter(tRecipe -> { - try { - ItemStack tOutput = tRecipe.getRecipeOutput(); - if (tOutput.stackSize == 1 && tOutput.getMaxDamage() > 0 && tOutput.getMaxStackSize() == 1) { - return true; - } - } catch (Exception ignored) {} - return false; - }) - .collect(Collectors.toList()); - return getRecipeOutputs(bufferedRecipes, false, aRecipe); - } - - /** - * Gives you a list of the Outputs from a Crafting Recipe If you have multiple Mods, which add Bronze Armor for - * example - */ - public static List getRecipeOutputs(List aList, boolean aDeleteFromList, ItemStack... aRecipe) { - List rList = new ArrayList<>(); - if (aRecipe == null || Arrays.stream(aRecipe) - .noneMatch(Objects::nonNull)) return rList; - InventoryCrafting aCrafting = new InventoryCrafting(new Container() { - - @Override - public boolean canInteractWith(EntityPlayer player) { - return false; - } - }, 3, 3); - for (int i = 0; i < 9 && i < aRecipe.length; i++) aCrafting.setInventorySlotContents(i, aRecipe[i]); - if (!aDeleteFromList) { - HashSet stacks = new HashSet<>(); - aList.stream() - .filter(tRecipe -> { - if (tRecipe instanceof ShapelessRecipes || tRecipe instanceof ShapelessOreRecipe - || tRecipe instanceof IGT_CraftingRecipe) return false; - try { - return tRecipe.matches(aCrafting, DW); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - return false; - } - }) - .forEach(tRecipe -> stacks.add(tRecipe.getCraftingResult(aCrafting))); - rList = stacks.stream() - .filter( - tOutput -> tOutput.stackSize == 1 && tOutput.getMaxDamage() > 0 && tOutput.getMaxStackSize() == 1) - .collect(Collectors.toList()); - } else for (Iterator iterator = aList.iterator(); iterator.hasNext();) { - IRecipe tRecipe = iterator.next(); - boolean matched = false; - - try { - matched = tRecipe.matches(aCrafting, DW); - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - if (matched) { - ItemStack tOutput = tRecipe.getCraftingResult(aCrafting); - - if (tOutput == null || tOutput.stackSize <= 0) { - // Seriously, who would ever do that shit? - if (!GregTech_API.sPostloadFinished) throw new GT_ItsNotMyFaultException( - "Seems another Mod added a Crafting Recipe with null Output. Tell the Developer of said Mod to fix that."); - continue; - } - if (tOutput.stackSize != 1) continue; - if (tOutput.getMaxDamage() <= 0) continue; - if (tOutput.getMaxStackSize() != 1) continue; - if (tRecipe instanceof ShapelessRecipes) continue; - if (tRecipe instanceof ShapelessOreRecipe) continue; - if (tRecipe instanceof IGT_CraftingRecipe) continue; - rList.add(GT_Utility.copyOrNull(tOutput)); - iterator.remove(); - } - } - return rList; - } - - /** - * Used in my own Furnace. - */ - public static ItemStack getSmeltingOutput(ItemStack aInput, boolean aRemoveInput, ItemStack aOutputSlot) { - if (aInput == null || aInput.stackSize < 1) return null; - ItemStack rStack = GT_OreDictUnificator.get( - FurnaceRecipes.smelting() - .getSmeltingResult(aInput)); - - if (rStack != null && (aOutputSlot == null || (GT_Utility.areStacksEqual(rStack, aOutputSlot) - && rStack.stackSize + aOutputSlot.stackSize <= aOutputSlot.getMaxStackSize()))) { - if (aRemoveInput) aInput.stackSize--; - return rStack; - } - return null; - } - - /** - * Used in my own Machines. Decreases StackSize of the Input if wanted. - *

- * Checks also if there is enough Space in the Output Slots. - */ - public static ItemStack[] getMachineOutput(ItemStack aInput, Map aRecipeList, - boolean aRemoveInput, NBTTagCompound rRecipeMetaData, ItemStack... aOutputSlots) { - if (aOutputSlots == null || aOutputSlots.length == 0) return new ItemStack[0]; - if (aInput == null) return new ItemStack[aOutputSlots.length]; - try { - for (Entry tEntry : aRecipeList.entrySet()) { - if (tEntry.getKey() - .matches(aInput)) { - if (tEntry.getKey() - .getAmount() <= aInput.stackSize) { - ItemStack[] tList = tEntry.getValue().items.toArray(new ItemStack[0]); - if (tList.length == 0) break; - ItemStack[] rList = new ItemStack[aOutputSlots.length]; - rRecipeMetaData.setTag("return", tEntry.getValue().metadata); - for (byte i = 0; i < aOutputSlots.length && i < tList.length; i++) { - if (tList[i] != null) { - if (aOutputSlots[i] == null || (GT_Utility.areStacksEqual(tList[i], aOutputSlots[i]) - && tList[i].stackSize + aOutputSlots[i].stackSize - <= aOutputSlots[i].getMaxStackSize())) { - rList[i] = GT_Utility.copyOrNull(tList[i]); - } else { - return new ItemStack[aOutputSlots.length]; - } - } - } - - if (aRemoveInput) aInput.stackSize -= tEntry.getKey() - .getAmount(); - return rList; - } - break; - } - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - return new ItemStack[aOutputSlots.length]; - } - - /** - * Used in my own Recycler. - *

- * Only produces Scrap if aScrapChance == 0. aScrapChance is usually the random Number I give to the Function If you - * directly insert 0 as aScrapChance then you can check if its Recycler-Blacklisted or similar - */ - @Nullable - public static ItemStack getRecyclerOutput(ItemStack aInput, int aScrapChance) { - if (aInput == null || aScrapChance != 0) return null; - if (recyclerWhitelist == null) { - generateRecyclerCache(); - } - - if (recyclerWhitelist.isEmpty()) { - if (searchRecyclerCache(aInput, recyclerBlacklist)) { - return null; - } else { - return ItemList.IC2_Scrap.get(1); - } - } else { - if (searchRecyclerCache(aInput, recyclerWhitelist)) { - return ItemList.IC2_Scrap.get(1); - } else { - return null; - } - } - } - - private static void generateRecyclerCache() { - recyclerWhitelist = new HashSet<>(); - for (IRecipeInput input : ic2.api.recipe.Recipes.recyclerWhitelist) { - for (ItemStack stack : input.getInputs()) { - recyclerWhitelist.add(GT_Utility.ItemId.create(stack.getItem(), stack.getItemDamage(), null)); - } - } - recyclerBlacklist = new HashSet<>(); - for (IRecipeInput input : ic2.api.recipe.Recipes.recyclerBlacklist) { - for (ItemStack stack : input.getInputs()) { - recyclerBlacklist.add(GT_Utility.ItemId.create(stack.getItem(), stack.getItemDamage(), null)); - } - } - } - - private static boolean searchRecyclerCache(ItemStack stack, Set set) { - if (set.contains(GT_Utility.ItemId.createWithoutNBT(stack))) { - return true; - } - // ic2.api.recipe.RecipeInputItemStack#matches expects item with wildcard meta to accept arbitrary meta - return set.contains(GT_Utility.ItemId.createAsWildcard(stack)); - } - - /** - * For the Scrapboxinator - */ - public static ItemStack getRandomScrapboxDrop() { - return ic2.api.recipe.Recipes.scrapboxDrops.getDrop(ItemList.IC2_Scrapbox.get(1), false); - } - - /** - * Charges an Electric Item. Only if it's a valid Electric Item of course. This forces the Usage of proper Voltages - * (so not the transfer limits defined by the Items) unless you ignore the Transfer Limit. If aTier is - * Integer.MAX_VALUE it will ignore Tier based Limitations. - * - * @return the actually used Energy. - */ - public static int chargeElectricItem(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreLimit, - boolean aSimulate) { - try { - if (isElectricItem(aStack)) { - int tTier = ((ic2.api.item.IElectricItem) aStack.getItem()).getTier(aStack); - if (tTier < 0 || tTier == aTier || aTier == Integer.MAX_VALUE) { - if (!aIgnoreLimit && tTier >= 0) - aCharge = (int) Math.min(aCharge, V[Math.max(0, Math.min(V.length - 1, tTier))]); - if (aCharge > 0) { - int rCharge = (int) Math.max( - 0.0, - ic2.api.item.ElectricItem.manager.charge(aStack, aCharge, tTier, true, aSimulate)); - return rCharge + (rCharge * 4 > aTier ? aTier : 0); - } - } - } - } catch (Throwable e) { - /* Do nothing */ - } - return 0; - } - - /** - * Discharges an Electric Item. Only if it's a valid Electric Item for that of course. This forces the Usage of - * proper Voltages (so not the transfer limits defined by the Items) unless you ignore the Transfer Limit. If aTier - * is Integer.MAX_VALUE it will ignore Tier based Limitations. - * - * @return the Energy got from the Item. - */ - public static int dischargeElectricItem(ItemStack aStack, int aCharge, int aTier, boolean aIgnoreLimit, - boolean aSimulate, boolean aIgnoreDischargability) { - try { - // if (isElectricItem(aStack) && (aIgnoreDischargability || - // ((ic2.api.item.IElectricItem)aStack.getItem()).canProvideEnergy(aStack))) { - if (isElectricItem(aStack)) { - int tTier = ((ic2.api.item.IElectricItem) aStack.getItem()).getTier(aStack); - if (tTier < 0 || tTier == aTier || aTier == Integer.MAX_VALUE) { - if (!aIgnoreLimit && tTier >= 0) aCharge = (int) Math.min( - aCharge, - V[Math.max(0, Math.min(V.length - 1, tTier))] + B[Math.max(0, Math.min(V.length - 1, tTier))]); - if (aCharge > 0) { - int rCharge = (int) Math.max( - 0, - ic2.api.item.ElectricItem.manager.discharge( - aStack, - aCharge + (aCharge * 4 > aTier ? aTier : 0), - tTier, - true, - !aIgnoreDischargability, - aSimulate)); - return rCharge - (rCharge * 4 > aTier ? aTier : 0); - } - } - } - } catch (Throwable e) { - /* Do nothing */ - } - return 0; - } - - /** - * Uses an Electric Item. Only if it's a valid Electric Item for that of course. - * - * @return if the action was successful - */ - public static boolean canUseElectricItem(ItemStack aStack, int aCharge) { - try { - if (isElectricItem(aStack)) { - return ic2.api.item.ElectricItem.manager.canUse(aStack, aCharge); - } - } catch (Throwable e) { - /* Do nothing */ - } - return false; - } - - /** - * Uses an Electric Item. Only if it's a valid Electric Item for that of course. - * - * @return if the action was successful - */ - public static boolean useElectricItem(ItemStack aStack, int aCharge, EntityPlayer aPlayer) { - try { - if (isElectricItem(aStack)) { - ic2.api.item.ElectricItem.manager.use(aStack, 0, aPlayer); - if (ic2.api.item.ElectricItem.manager.canUse(aStack, aCharge)) { - return ic2.api.item.ElectricItem.manager.use(aStack, aCharge, aPlayer); - } - } - } catch (Throwable e) { - /* Do nothing */ - } - return false; - } - - /** - * Uses an Item. Tries to discharge in case of Electric Items - */ - public static boolean damageOrDechargeItem(ItemStack aStack, int aDamage, int aDecharge, EntityLivingBase aPlayer) { - if (GT_Utility.isStackInvalid(aStack) || (aStack.getMaxStackSize() <= 1 && aStack.stackSize > 1)) return false; - if (aPlayer instanceof EntityPlayer && ((EntityPlayer) aPlayer).capabilities.isCreativeMode) return true; - if (aStack.getItem() instanceof IDamagableItem) { - return ((IDamagableItem) aStack.getItem()).doDamageToItem(aStack, aDamage); - } else if (GT_ModHandler.isElectricItem(aStack)) { - if (canUseElectricItem(aStack, aDecharge)) { - if (aPlayer instanceof EntityPlayer) { - return GT_ModHandler.useElectricItem(aStack, aDecharge, (EntityPlayer) aPlayer); - } - return GT_ModHandler.dischargeElectricItem(aStack, aDecharge, Integer.MAX_VALUE, true, false, true) - >= aDecharge; - } - } else if (aStack.getItem() - .isDamageable()) { - if (aPlayer == null) { - aStack.setItemDamage(aStack.getItemDamage() + aDamage); - } else { - aStack.damageItem(aDamage, aPlayer); - } - if (aStack.getItemDamage() >= aStack.getMaxDamage()) { - aStack.setItemDamage(aStack.getMaxDamage() + 1); - ItemStack tStack = GT_Utility.getContainerItem(aStack, true); - if (tStack != null) { - aStack.func_150996_a(tStack.getItem()); - aStack.setItemDamage(tStack.getItemDamage()); - aStack.stackSize = tStack.stackSize; - aStack.setTagCompound(tStack.getTagCompound()); - } else if (aStack.stackSize > 0) { - aStack.stackSize--; - } - } - return true; - } - return false; - } - - /** - * Uses a Soldering Iron from player or external inventory - */ - public static boolean useSolderingIron(ItemStack aStack, EntityLivingBase aPlayer, IInventory aExternalInventory) { - if (aPlayer == null || aStack == null) return false; - if (GT_Utility.isStackInList(aStack, GregTech_API.sSolderingToolList)) { - if (aPlayer instanceof EntityPlayer tPlayer) { - if (tPlayer.capabilities.isCreativeMode) return true; - if (isElectricItem(aStack) && ic2.api.item.ElectricItem.manager.getCharge(aStack) > 1000.0d) { - if (consumeSolderingMaterial(tPlayer) - || (aExternalInventory != null && consumeSolderingMaterial(aExternalInventory))) { - if (canUseElectricItem(aStack, 10000)) { - return GT_ModHandler.useElectricItem(aStack, 10000, (EntityPlayer) aPlayer); - } - GT_ModHandler.useElectricItem( - aStack, - (int) ic2.api.item.ElectricItem.manager.getCharge(aStack), - (EntityPlayer) aPlayer); - return false; - } else { - GT_Utility.sendChatToPlayer( - (EntityPlayer) aPlayer, - GT_Utility.trans("094.1", "Not enough soldering material!")); - } - } - } else { - damageOrDechargeItem(aStack, 1, 1000, aPlayer); - return true; - } - } - return false; - } - - public static boolean useSolderingIron(ItemStack aStack, EntityLivingBase aPlayer) { - return useSolderingIron(aStack, aPlayer, null); - } - - public static boolean consumeSolderingMaterial(EntityPlayer aPlayer) { - if (aPlayer.capabilities.isCreativeMode) return true; - IInventory tInventory = aPlayer.inventory; - if (consumeSolderingMaterial(tInventory)) { - if (aPlayer.inventoryContainer != null) { - aPlayer.inventoryContainer.detectAndSendChanges(); - } - return true; - } - for (int i = 0; i < tInventory.getSizeInventory(); i++) { - ItemStack tStack = tInventory.getStackInSlot(i); - if (tStack != null && tStack.getItem() instanceof ItemToolbox) { - IInventory tToolboxInventory = ((ItemToolbox) tStack.getItem()).getInventory(aPlayer, tStack); - if (consumeSolderingMaterial(tToolboxInventory)) { - tInventory.markDirty(); - if (aPlayer.inventoryContainer != null) { - aPlayer.inventoryContainer.detectAndSendChanges(); - } - return true; - } - } - } - return false; - } - - /** - * Consumes soldering material from given inventory - */ - public static boolean consumeSolderingMaterial(IInventory aInventory) { - for (int i = 0; i < aInventory.getSizeInventory(); i++) { - ItemStack tStack = aInventory.getStackInSlot(i); - if (GT_Utility.isStackInList(tStack, GregTech_API.sSolderingMetalList)) { - if (tStack.stackSize < 1) return false; - if (tStack.stackSize == 1) { - tStack = null; - } else { - tStack.stackSize--; - } - aInventory.setInventorySlotContents(i, tStack); - aInventory.markDirty(); - return true; - } - } - return false; - } - - /** - * Is this an electric Item, which can charge other Items? - */ - public static boolean isChargerItem(ItemStack aStack) { - try { - if (isElectricItem(aStack)) { - return ((ic2.api.item.IElectricItem) aStack.getItem()).canProvideEnergy(aStack); - } - } catch (Throwable e) { - /* Do nothing */ - } - return false; - } - - /** - * Is this an electric Item? - */ - public static boolean isElectricItem(ItemStack aStack) { - try { - return aStack != null && aStack.getItem() instanceof ic2.api.item.IElectricItem - && ((IElectricItem) aStack.getItem()).getTier(aStack) < Integer.MAX_VALUE; - } catch (Throwable e) { - /* Do nothing */ - } - return false; - } - - public static boolean isElectricItem(ItemStack aStack, byte aTier) { - try { - return aStack != null && aStack.getItem() instanceof ic2.api.item.IElectricItem - && ((IElectricItem) aStack.getItem()).getTier(aStack) == aTier; - } catch (Throwable e) { - /* Do nothing */ - } - return false; - } - - /** - * Returns the current charge and maximum charge of an ItemStack. - * - * @param aStack Any ItemStack. - * @return Optional.empty() if the stack is null or not an electric item, or an Optional containing a payload of an - * array containing [ current_charge, maximum_charge ] on success. - */ - public static Optional getElectricItemCharge(ItemStack aStack) { - if (aStack == null || !isElectricItem(aStack)) { - return Optional.empty(); - } - - final Item item = aStack.getItem(); - - if (item instanceof final GT_MetaBase_Item metaBaseItem) { - final Long[] stats = metaBaseItem.getElectricStats(aStack); - if (stats != null && stats.length > 0) { - return Optional.of(new Long[] { metaBaseItem.getRealCharge(aStack), stats[0] }); - } - - } else if (item instanceof final IElectricItem ic2ElectricItem) { - return Optional.of( - new Long[] { (long) ic2.api.item.ElectricItem.manager.getCharge(aStack), - (long) ic2ElectricItem.getMaxCharge(aStack) }); - } - - return Optional.empty(); - } - - /** - * Allow item to be inserted into ic2 toolbox - */ - public static void registerBoxableItemToToolBox(ItemStack aStack) { - if (aStack != null) { - try { - ic2.api.item.ItemWrapper.registerBoxable(aStack.getItem(), (IBoxable) sBoxableWrapper); - } catch (Throwable ignored) { - /* Do nothing */ - } - sBoxableItems.add(new GT_ItemStack(aStack)); - } - } - - public static int getCapsuleCellContainerCountMultipliedWithStackSize(ItemStack... aStacks) { - int rAmount = 0; - for (ItemStack tStack : aStacks) - if (tStack != null) rAmount += getCapsuleCellContainerCount(tStack) * tStack.stackSize; - return rAmount; - } - - public static int getCapsuleCellContainerCount(ItemStack aStack) { - if (aStack == null) return 0; - - if (GT_Utility.areStacksEqual(GT_Utility.getContainerForFilledItem(aStack, true), ItemList.Cell_Empty.get(1))) { - return 1; - } - - if (GT_Utility.areStacksEqual(aStack, getIC2Item("waterCell", 1, W))) { - return 1; - } - - for (OrePrefixes cellType : OrePrefixes.CELL_TYPES) { - if (cellType.contains(aStack)) { - return 1; - } - } - - return 0; - } - - public static class RecipeBits { - - /** - * Mirrors the Recipe - */ - public static long MIRRORED = B[0]; - /** - * Buffers the Recipe for later addition. This makes things more efficient. - */ - public static long BUFFERED = B[1]; - /** - * This is a special Tag I used for crafting Coins up and down. - */ - public static long KEEPNBT = B[2]; - /** - * Makes the Recipe Reverse Craftable in the Disassembler. - */ - public static long DISMANTLEABLE = B[3]; - /** - * Prevents the Recipe from accidentally getting removed by my own Handlers. - */ - public static long NOT_REMOVABLE = B[4]; - /** - * Reverses the Output of the Recipe for smelting and pulverising. - */ - public static long REVERSIBLE = B[5]; - /** - * Removes all Recipes with the same Output Item regardless of NBT, unless another Recipe Deletion Bit is added - * too. - */ - public static long DELETE_ALL_OTHER_RECIPES = B[6]; - /** - * Removes all Recipes with the same Output Item limited to the same NBT. - */ - public static long DELETE_ALL_OTHER_RECIPES_IF_SAME_NBT = B[7]; - /** - * Removes all Recipes with the same Output Item limited to Shaped Recipes. - */ - public static long DELETE_ALL_OTHER_SHAPED_RECIPES = B[8]; - /** - * Removes all Recipes with the same Output Item limited to native Recipe Handlers. - */ - public static long DELETE_ALL_OTHER_NATIVE_RECIPES = B[9]; - /** - * Disables the check for colliding Recipes. - */ - public static long DO_NOT_CHECK_FOR_COLLISIONS = B[10]; - /** - * Only adds the Recipe if there is another Recipe having that Output - */ - public static long ONLY_ADD_IF_THERE_IS_ANOTHER_RECIPE_FOR_IT = B[11]; - /** - * Only adds the Recipe if it has an Output - */ - public static long ONLY_ADD_IF_RESULT_IS_NOT_NULL = B[12]; - /** - * Don't remove shapeless recipes with this output - */ - public static long DONT_REMOVE_SHAPELESS = B[13]; - } -} diff --git a/src/main/java/gregtech/api/util/GT_Multiblock_Tooltip_Builder.java b/src/main/java/gregtech/api/util/GT_Multiblock_Tooltip_Builder.java deleted file mode 100644 index 2d6712788a..0000000000 --- a/src/main/java/gregtech/api/util/GT_Multiblock_Tooltip_Builder.java +++ /dev/null @@ -1,735 +0,0 @@ -package gregtech.api.util; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.stream.IntStream; -import java.util.stream.Stream; - -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; - -import com.google.common.collect.Multimaps; -import com.google.common.collect.SetMultimap; -import com.gtnewhorizon.structurelib.StructureLibAPI; - -/** - * This makes it easier to build multi tooltips, with a standardized format.
- * Info section order should be:
- * addMachineType
- * addInfo, for what it does, special notes, etc.
- * addSeparator, if you need it
- * addPollutionAmount
- *
- * Structure order should be:
- * beginStructureBlock
- * addController
- * addCasingInfo
- * addOtherStructurePart, for secondary structure block info (pipes, coils, etc)
- * addEnergyHatch/addDynamoHatch
- * addMaintenanceHatch
- * addMufflerHatch
- * addInputBus/addInputHatch/addOutputBus/addOutputHatch, in that order
- * Use addStructureInfo for any comments on nonstandard structure info wherever needed
- * toolTipFinisher goes at the very end
- *
- * Originally created by kekzdealer - */ -public class GT_Multiblock_Tooltip_Builder { - - private static final String TAB = " "; - private static final String COLON = ": "; - private static final String SEPARATOR = ", "; - - private final List iLines; - private final List sLines; - private final List hLines; - private final SetMultimap hBlocks; - - private String[] iArray; - private String[] sArray; - private String[] hArray; - - // Localized tooltips - private static final String TT_machineType = StatCollector.translateToLocal("GT5U.MBTT.MachineType"); - private static final String TT_dimensions = StatCollector.translateToLocal("GT5U.MBTT.Dimensions"); - private static final String TT_hollow = StatCollector.translateToLocal("GT5U.MBTT.Hollow"); - private static final String TT_structure = StatCollector.translateToLocal("GT5U.MBTT.Structure"); - private static final String TT_controller = StatCollector.translateToLocal("GT5U.MBTT.Controller"); - private static final String TT_minimum = StatCollector.translateToLocal("GT5U.MBTT.Minimum"); - private static final String TT_tiered = StatCollector.translateToLocal("GT5U.MBTT.Tiered"); - private static final String TT_maintenancehatch = StatCollector.translateToLocal("GT5U.MBTT.MaintenanceHatch"); - private static final String TT_energyhatch = StatCollector.translateToLocal("GT5U.MBTT.EnergyHatch"); - private static final String TT_dynamohatch = StatCollector.translateToLocal("GT5U.MBTT.DynamoHatch"); - private static final String TT_mufflerhatch = StatCollector.translateToLocal("GT5U.MBTT.MufflerHatch"); - private static final String TT_inputbus = StatCollector.translateToLocal("GT5U.MBTT.InputBus"); - private static final String TT_inputhatch = StatCollector.translateToLocal("GT5U.MBTT.InputHatch"); - private static final String TT_outputbus = StatCollector.translateToLocal("GT5U.MBTT.OutputBus"); - private static final String TT_outputhatch = StatCollector.translateToLocal("GT5U.MBTT.OutputHatch"); - private static final String TT_causes = StatCollector.translateToLocal("GT5U.MBTT.Causes"); - private static final String TT_pps = StatCollector.translateToLocal("GT5U.MBTT.PPS"); - private static final String TT_hold = StatCollector.translateToLocal("GT5U.MBTT.Hold"); - private static final String TT_todisplay = StatCollector.translateToLocal("GT5U.MBTT.Display"); - private static final String TT_structurehint = StatCollector.translateToLocal("GT5U.MBTT.StructureHint"); - private static final String TT_mod = StatCollector.translateToLocal("GT5U.MBTT.Mod"); - private static final String TT_air = StatCollector.translateToLocal("GT5U.MBTT.Air"); - private static final String[] TT_dots = IntStream.range(0, 16) - .mapToObj(i -> StatCollector.translateToLocal("structurelib.blockhint." + i + ".name")) - .toArray(String[]::new); - - public GT_Multiblock_Tooltip_Builder() { - iLines = new LinkedList<>(); - sLines = new LinkedList<>(); - hLines = new LinkedList<>(); - hBlocks = Multimaps.newSetMultimap(new HashMap<>(), HashSet::new); - hBlocks.put(StructureLibAPI.HINT_BLOCK_META_AIR, TT_air); - } - - /** - * Add a line telling you what the machine type is. Usually, this will be the name of a SB version.
- * Machine Type: machine - * - * @param machine Name of the machine type - * - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addMachineType(String machine) { - iLines.add(TT_machineType + COLON + EnumChatFormatting.YELLOW + machine + EnumChatFormatting.RESET); - return this; - } - - /** - * Add a basic line of information about this structure - * - * @param info The line to be added. - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addInfo(String info) { - iLines.add(info); - return this; - } - - /** - * Add a number of basic lines of information about this structure - * - * @param infoStrings The lines to be added. - * @return Instance this method was called on. - */ - - public GT_Multiblock_Tooltip_Builder addInfoAll(String... infoStrings) { - for (String str : infoStrings) { - iLines.add(str); - } - return this; - } - - /** - * Add a separator line like this:
- * ----------------------------------------- - * - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addSeparator() { - iLines.add("-----------------------------------------"); - return this; - } - - /** - * Add a line telling how much this machine pollutes. - * - * @param pollution Amount of pollution per second when active - * - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addPollutionAmount(int pollution) { - iLines.add( - TT_causes + COLON + EnumChatFormatting.DARK_PURPLE + pollution + " " + EnumChatFormatting.GRAY + TT_pps); - return this; - } - - /** - * Begin adding structural information by adding a line about the structure's dimensions and then inserting a - * "Structure:" line. - * - * @param w Structure width. - * @param h Structure height. - * @param l Structure depth/length. - * @param hollow T/F, adds a (hollow) comment if true - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder beginStructureBlock(int w, int h, int l, boolean hollow) { - sLines.add( - EnumChatFormatting.WHITE + TT_dimensions - + COLON - + EnumChatFormatting.GOLD - + w - + EnumChatFormatting.GRAY - + "x" - + EnumChatFormatting.GOLD - + h - + EnumChatFormatting.GRAY - + "x" - + EnumChatFormatting.GOLD - + l - + EnumChatFormatting.GRAY - + " (" - + EnumChatFormatting.GOLD - + "W" - + EnumChatFormatting.GRAY - + "x" - + EnumChatFormatting.GOLD - + "H" - + EnumChatFormatting.GRAY - + "x" - + EnumChatFormatting.GOLD - + "L" - + EnumChatFormatting.GRAY - + ") " - + EnumChatFormatting.RED - + (hollow ? EnumChatFormatting.RED + TT_hollow : "")); - sLines.add(EnumChatFormatting.WHITE + TT_structure + COLON); - return this; - } - - /** - * Begin adding structural information by adding a line about the structure's dimensions
- * and then inserting a "Structure:" line. Variable version displays min and max - * - * @param wmin Structure min width. - * @param wmax Structure max width. - * @param hmin Structure min height. - * @param hmax Structure max height. - * @param lmin Structure min depth/length. - * @param lmax Structure max depth/length. - * @param hollow T/F, adds a (hollow) comment if true - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder beginVariableStructureBlock(int wmin, int wmax, int hmin, int hmax, int lmin, - int lmax, boolean hollow) { - sLines.add( - EnumChatFormatting.WHITE + TT_dimensions - + COLON - + EnumChatFormatting.GOLD - + wmin - + (wmin != wmax ? "-" + wmax : "") - + EnumChatFormatting.GRAY - + "x" - + EnumChatFormatting.GOLD - + hmin - + (hmin != hmax ? "-" + hmax : "") - + EnumChatFormatting.GRAY - + "x" - + EnumChatFormatting.GOLD - + lmin - + (lmin != lmax ? "-" + lmax : "") - + EnumChatFormatting.GRAY - + " (" - + EnumChatFormatting.GOLD - + "W" - + EnumChatFormatting.GRAY - + "x" - + EnumChatFormatting.GOLD - + "H" - + EnumChatFormatting.GRAY - + "x" - + EnumChatFormatting.GOLD - + "L" - + EnumChatFormatting.GRAY - + ") " - + (hollow ? EnumChatFormatting.RED + TT_hollow : "")); - sLines.add(EnumChatFormatting.WHITE + TT_structure + COLON); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Controller: info - * - * @param info Positional information. - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addController(String info) { - sLines.add(TAB + EnumChatFormatting.WHITE + TT_controller + COLON + EnumChatFormatting.GRAY + info); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)minCountx casingName (minimum) (tiered) - * - * @param casingName Name of the Casing. - * @param minCount Minimum needed for valid structure check. - * @return Instance this method was called on. - * - * @deprecated Replaced by {@link #addCasingInfoMin(String, int, boolean)} - * - */ - @Deprecated - public GT_Multiblock_Tooltip_Builder addCasingInfo(String casingName, int minCount) { - return addCasingInfoMin(casingName, minCount, false); - } - - /** - * Add a line of information about the structure:
- * (indent)countx casingName (tiered) - * - * @param casingName Name of the Casing. - * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addCasingInfoExactly(String casingName, int count, boolean isTiered) { - return addCasingInfoExactlyColored( - casingName, - EnumChatFormatting.GRAY, - count, - EnumChatFormatting.GOLD, - isTiered); - } - - /** - * Add a line of information about the structure:
- * (indent)countx casingName (tiered) - * - * @param casingName Name of the Casing. - * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) - * @param countColor Color of the casing count text - * @param textColor Color of the casing name text - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addCasingInfoExactlyColored(String casingName, EnumChatFormatting textColor, - int count, EnumChatFormatting countColor, boolean isTiered) { - sLines.add( - countColor + TAB - + count - + "x " - + EnumChatFormatting.RESET - + textColor - + casingName - + (isTiered ? " " + TT_tiered : "")); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)minCountx casingName (minimum) (tiered) - * - * @param casingName Name of the Casing. - * @param minCount Minimum needed for valid structure check. - * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addCasingInfoMin(String casingName, int minCount, boolean isTiered) { - return addCasingInfoMinColored( - casingName, - EnumChatFormatting.GRAY, - minCount, - EnumChatFormatting.GOLD, - isTiered); - } - - /** - * Add a line of information about the structure:
- * (indent)minCountx casingName (minimum) (tiered) - * - * @param casingName Name of the Casing. - * @param minCount Minimum needed for valid structure check. - * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) - * @param countColor Color of the casing count text - * @param textColor Color of the casing name text - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addCasingInfoMinColored(String casingName, EnumChatFormatting textColor, - int minCount, EnumChatFormatting countColor, boolean isTiered) { - sLines.add( - countColor + TAB - + minCount - + "x " - + EnumChatFormatting.RESET - + textColor - + casingName - + " " - + TT_minimum - + (isTiered ? " " + TT_tiered : "")); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)minCountx - maxCountx casingName (minimum) (tiered) - * - * @param casingName Name of the Casing. - * @param minCount Minimum needed for valid structure check. - * @param maxCount Maximum needed for valid structure check. - * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addCasingInfoRange(String casingName, int minCount, int maxCount, - boolean isTiered) { - return addCasingInfoRangeColored( - casingName, - EnumChatFormatting.GRAY, - minCount, - maxCount, - EnumChatFormatting.GOLD, - isTiered); - } - - /** - * Add a line of information about the structure:
- * (indent)minCountx - maxCountx casingName (minimum) (tiered) - * - * @param casingName Name of the Casing. - * @param minCount Minimum needed for valid structure check. - * @param maxCount Maximum needed for valid structure check. - * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) - * @param countColor Color of the casing count text - * @param textColor Color of the casing name text - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addCasingInfoRangeColored(String casingName, EnumChatFormatting textColor, - int minCount, int maxCount, EnumChatFormatting countColor, boolean isTiered) { - sLines.add( - countColor + TAB - + minCount - + "x" - + EnumChatFormatting.GRAY - + " - " - + countColor - + maxCount - + "x " - + EnumChatFormatting.RESET - + textColor - + casingName - + (isTiered ? " " + TT_tiered : "")); - return this; - } - - /** - * Use this method to add a structural part that isn't covered by the other methods.
- * (indent)name: info - * - * @param name Name of the hatch or other component. - * @param info Positional information. - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addOtherStructurePart(String name, String info) { - sLines.add(EnumChatFormatting.WHITE + TAB + name + COLON + EnumChatFormatting.GRAY + info); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Maintenance Hatch: info - * - * @param info Positional information. - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addMaintenanceHatch(String info) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_maintenancehatch + COLON + EnumChatFormatting.GRAY + info); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Muffler Hatch: info - * - * @param info Location where the hatch goes - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addMufflerHatch(String info) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_mufflerhatch + COLON + EnumChatFormatting.GRAY + info); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Energy Hatch: info - * - * @param info Positional information. - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addEnergyHatch(String info) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_energyhatch + COLON + EnumChatFormatting.GRAY + info); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Dynamo Hatch: info - * - * @param info Positional information. - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addDynamoHatch(String info) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_dynamohatch + COLON + EnumChatFormatting.GRAY + info); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Input Bus: info - * - * @param info Location where the bus goes - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addInputBus(String info) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_inputbus + COLON + EnumChatFormatting.GRAY + info); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Input Hatch: info - * - * @param info Location where the hatch goes - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addInputHatch(String info) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_inputhatch + COLON + EnumChatFormatting.GRAY + info); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Output Bus: info - * - * @param info Location where the bus goes - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addOutputBus(String info) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_outputbus + COLON + EnumChatFormatting.GRAY + info); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Output Hatch: info - * - * @param info Location where the bus goes - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addOutputHatch(String info) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_outputhatch + COLON + EnumChatFormatting.GRAY + info); - return this; - } - - /** - * Use this method to add a structural part that isn't covered by the other methods.
- * (indent)name: info - * - * @param name Name of the hatch or other component. - * @param info Positional information. - * @param dots The valid locations for this part when asked to display hints - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addOtherStructurePart(String name, String info, int... dots) { - sLines.add(EnumChatFormatting.WHITE + TAB + name + COLON + EnumChatFormatting.GRAY + info); - for (int dot : dots) hBlocks.put(dot, name); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Maintenance Hatch: info - * - * @param info Positional information. - * @param dots The valid locations for this part when asked to display hints - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addMaintenanceHatch(String info, int... dots) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_maintenancehatch + COLON + EnumChatFormatting.GRAY + info); - for (int dot : dots) hBlocks.put(dot, TT_maintenancehatch); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Muffler Hatch: info - * - * @param info Location where the hatch goes - * @param dots The valid locations for this part when asked to display hints - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addMufflerHatch(String info, int... dots) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_mufflerhatch + COLON + EnumChatFormatting.GRAY + info); - for (int dot : dots) hBlocks.put(dot, TT_mufflerhatch); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Energy Hatch: info - * - * @param info Positional information. - * @param dots The valid locations for this part when asked to display hints - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addEnergyHatch(String info, int... dots) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_energyhatch + COLON + EnumChatFormatting.GRAY + info); - for (int dot : dots) hBlocks.put(dot, TT_energyhatch); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Dynamo Hatch: info - * - * @param info Positional information. - * @param dots The valid locations for this part when asked to display hints - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addDynamoHatch(String info, int... dots) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_dynamohatch + COLON + EnumChatFormatting.GRAY + info); - for (int dot : dots) hBlocks.put(dot, TT_dynamohatch); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Input Bus: info - * - * @param info Location where the bus goes - * @param dots The valid locations for this part when asked to display hints - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addInputBus(String info, int... dots) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_inputbus + COLON + EnumChatFormatting.GRAY + info); - for (int dot : dots) hBlocks.put(dot, TT_inputbus); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Input Hatch: info - * - * @param info Location where the hatch goes - * @param dots The valid locations for this part when asked to display hints - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addInputHatch(String info, int... dots) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_inputhatch + COLON + EnumChatFormatting.GRAY + info); - for (int dot : dots) hBlocks.put(dot, TT_inputhatch); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Output Bus: info - * - * @param info Location where the bus goes - * @param dots The valid locations for this part when asked to display hints - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addOutputBus(String info, int... dots) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_outputbus + COLON + EnumChatFormatting.GRAY + info); - for (int dot : dots) hBlocks.put(dot, TT_outputbus); - return this; - } - - /** - * Add a line of information about the structure:
- * (indent)Output Hatch: info - * - * @param info Location where the bus goes - * @param dots The valid locations for this part when asked to display hints - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addOutputHatch(String info, int... dots) { - sLines.add(EnumChatFormatting.WHITE + TAB + TT_outputhatch + COLON + EnumChatFormatting.GRAY + info); - for (int dot : dots) hBlocks.put(dot, TT_outputhatch); - return this; - } - - /** - * Use this method to add non-standard structural info.
- * (indent)info - * - * @param info The line to be added. - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addStructureInfo(String info) { - sLines.add(TAB + info); - return this; - } - - /** - * Use this method to add non-standard structural info.
- * (indent)info - * - * @param channel the name of subchannel - * @param purpose the purpose of subchannel - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addSubChannelUsage(String channel, String purpose) { - sLines.add(TAB + StatCollector.translateToLocalFormatted("GT5U.MBTT.subchannel", channel, purpose)); - return this; - } - - /** - * Use this method to add non-standard structural hint. This info will appear before the standard structural hint. - * - * @param info The line to be added. This should be an entry into minecraft's localization system. - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addStructureHint(String info) { - hLines.add(StatCollector.translateToLocal(info)); - return this; - } - - /** - * Use this method to add an entry to standard structural hint without creating a corresponding line in structure - * information - * - * @param name The name of block This should be an entry into minecraft's localization system. - * @param dots Possible locations of this block - * @return Instance this method was called on. - */ - public GT_Multiblock_Tooltip_Builder addStructureHint(String name, int... dots) { - for (int dot : dots) hBlocks.put(dot, StatCollector.translateToLocal(name)); - return this; - } - - /** - * Call at the very end.
- * Adds a final line with the mod name and information on how to display the structure guidelines.
- * Ends the building process. - * - * @param mod Name of the mod that adds this multiblock machine - */ - public GT_Multiblock_Tooltip_Builder toolTipFinisher(String mod) { - iLines.add( - TT_hold + " " - + EnumChatFormatting.BOLD - + "[LSHIFT]" - + EnumChatFormatting.RESET - + EnumChatFormatting.GRAY - + " " - + TT_todisplay); - iLines.add(TT_mod + COLON + EnumChatFormatting.GREEN + mod + EnumChatFormatting.GRAY); - hLines.add(TT_structurehint); - iArray = iLines.toArray(new String[0]); - sArray = sLines.toArray(new String[0]); - // e.getKey() - 1 because 1 dot is meta 0. - hArray = Stream.concat( - hLines.stream(), - hBlocks.asMap() - .entrySet() - .stream() - .map(e -> TT_dots[e.getKey() - 1] + COLON + String.join(SEPARATOR, e.getValue()))) - .toArray(String[]::new); - return this; - } - - public String[] getInformation() { - return iArray; - } - - public String[] getStructureInformation() { - return sArray; - } - - public String[] getStructureHint() { - return hArray; - } -} diff --git a/src/main/java/gregtech/api/util/GT_MusicSystem.java b/src/main/java/gregtech/api/util/GT_MusicSystem.java deleted file mode 100644 index 7c0ec929e9..0000000000 --- a/src/main/java/gregtech/api/util/GT_MusicSystem.java +++ /dev/null @@ -1,667 +0,0 @@ -package gregtech.api.util; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Map; -import java.util.TreeMap; -import java.util.UUID; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.audio.SoundEventAccessorComposite; -import net.minecraft.client.audio.SoundRegistry; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemRecord; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.IOUtils; -import org.jetbrains.annotations.ApiStatus; -import org.joml.Vector4i; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.jcraft.jorbis.VorbisFile; - -import baubles.api.BaublesApi; -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.network.ByteBufUtils; -import gregtech.GT_Mod; -import gregtech.api.enums.GT_Values; -import gregtech.api.net.GT_Packet_MusicSystemData; -import gregtech.client.ElectricJukeboxSound; -import gregtech.common.items.GT_WirelessHeadphones; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_BetterJukebox; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; - -/** - * A system that keeps track of jukebox music tracks playing in different locations. - * Compared to vanilla jukebox handling, this allows music to resume playing after reloading the chunk the jukeboxes are - * in. - * It also allows the headphone item to modify the hearing range of a given disc, including other dimensions. - *

- * Vector4i coordinates point to X,Y,Z,Dimension of the source - * - * @author eigenraven - */ -public final class GT_MusicSystem { - - private GT_MusicSystem() {} - - public static final class MusicSource { - - /** Flag keeping track of when the data of this source needs to be sent to clients again */ - public boolean modified; - public final UUID sourceID; - /** Currently playing track */ - public ResourceLocation currentRecord; - /** Headphone range */ - public GT_MetaTileEntity_BetterJukebox.HeadphoneLimit headphoneLimit; - /** - * {@link System#currentTimeMillis()} at the time this record started playing, in server time - */ - public long startedPlayingAtMs; - /** Time the record was playing for at the time it was serialized. */ - public long playingForMs; - /** The origin of this source used for wireless headphone range calculations */ - public final Vector4i originPosition = new Vector4i(); - /** Number of blocks from {@link MusicSource#originPosition} the headphones can work */ - public int headphoneBlockRange; - /** Densely packed parameters for each "emitter" associated with the source, for fast iteration */ - public int[] emitterParameters; // [{x,y,z,dim,volume}, {x, ...}, {x, ...}, ...] - /** Offsets into the parameters array */ - public static final int EMITTER_X = 0; - /** Offsets into the parameters array */ - public static final int EMITTER_Y = 1; - /** Offsets into the parameters array */ - public static final int EMITTER_Z = 2; - /** Offsets into the parameters array */ - public static final int EMITTER_DIMENSION = 3; - /** 100 times the floating point "volume" used by the sound system for range calculations */ - public static final int EMITTER_VOLUME_X_100 = 4; - /** Iteration stride for packed emitter parameters */ - public static final int EMITTER_STRIDE = EMITTER_VOLUME_X_100 + 1; - - public MusicSource(UUID sourceID) { - this.sourceID = sourceID; - } - - public void resizeEmitterArray(int count) { - int len = count * EMITTER_STRIDE; - if (emitterParameters == null || emitterParameters.length != len) { - if (emitterParameters == null) { - emitterParameters = new int[len]; - } else { - emitterParameters = Arrays.copyOf(emitterParameters, len); - } - modified = true; - } - } - - public void setEmitter(int index, Vector4i position, float volume) { - int arrIndex = index * EMITTER_STRIDE; - if (arrIndex < 0 || arrIndex >= emitterParameters.length) { - throw new IndexOutOfBoundsException( - "Trying to access emitter with index " + index - + " in an array of " - + emitterParameters.length / EMITTER_STRIDE); - } - - if (emitterParameters[arrIndex + EMITTER_X] != position.x) { - modified = true; - emitterParameters[arrIndex + EMITTER_X] = position.x; - } - if (emitterParameters[arrIndex + EMITTER_Y] != position.y) { - modified = true; - emitterParameters[arrIndex + EMITTER_Y] = position.y; - } - if (emitterParameters[arrIndex + EMITTER_Z] != position.z) { - modified = true; - emitterParameters[arrIndex + EMITTER_Z] = position.z; - } - if (emitterParameters[arrIndex + EMITTER_DIMENSION] != position.w) { - modified = true; - emitterParameters[arrIndex + EMITTER_DIMENSION] = position.w; - } - final int intVolume = (int) (volume * 100.0f); - if (emitterParameters[arrIndex + EMITTER_VOLUME_X_100] != intVolume) { - modified = true; - emitterParameters[arrIndex + EMITTER_VOLUME_X_100] = intVolume; - } - } - - /** x squared */ - private static int sq(int x) { - return x * x; - } - - /** @return Index of closest emitter in range, or -1 if none is nearby. */ - public int closestEmitter(int x, int y, int z, int dim) { - int closest = -1; - int closestDistanceSq = Integer.MAX_VALUE; - final int emittersCount = emitterParameters.length / EMITTER_STRIDE; - for (int i = 0; i < emittersCount; i++) { - final int offset = i * EMITTER_STRIDE; - final int eDim = emitterParameters[offset + EMITTER_DIMENSION]; - if (eDim != dim) { - continue; - } - final int eX = emitterParameters[offset + EMITTER_X]; - final int eY = emitterParameters[offset + EMITTER_Y]; - final int eZ = emitterParameters[offset + EMITTER_Z]; - final int distanceSq = sq(x - eX) + sq(y - eY) + sq(z - eZ); - if (distanceSq < closestDistanceSq) { - closestDistanceSq = distanceSq; - closest = i; - } - } - return closest; - } - - public boolean inHeadphoneRange(int x, int y, int z, int dim) { - return switch (headphoneLimit) { - case BETWEEN_DIMENSIONS -> true; - case INSIDE_DIMENSION -> dim == originPosition.w; - case BLOCK_RANGE -> dim == originPosition.w - && originPosition.distanceSquared(x, y, z, dim) <= sq(headphoneBlockRange); - }; - } - - public void encode(final ByteBuf target) { - target.writeLong(sourceID.getMostSignificantBits()); - target.writeLong(sourceID.getLeastSignificantBits()); - if (currentRecord != null) { - final int duration = getMusicRecordDurations().getOrDefault(currentRecord, Integer.MAX_VALUE); - if (playingForMs >= duration) { - // Record already finished playing, let's not send it to the client anymore. - target.writeBoolean(false); - } else { - target.writeBoolean(true); - ByteBufUtils.writeUTF8String(target, currentRecord.getResourceDomain()); - ByteBufUtils.writeUTF8String(target, currentRecord.getResourcePath()); - } - } else { - target.writeBoolean(false); - } - target.writeByte((byte) headphoneLimit.ordinal()); - ByteBufUtils.writeVarInt(target, headphoneBlockRange, 5); - target.writeLong(startedPlayingAtMs); - target.writeLong(playingForMs); - ByteBufUtils.writeVarInt(target, originPosition.x, 5); - ByteBufUtils.writeVarInt(target, originPosition.y, 5); - ByteBufUtils.writeVarInt(target, originPosition.z, 5); - ByteBufUtils.writeVarInt(target, originPosition.w, 5); - ByteBufUtils.writeVarInt(target, emitterParameters.length, 5); - for (int emitterParameter : emitterParameters) { - ByteBufUtils.writeVarInt(target, emitterParameter, 5); - } - } - - public static MusicSource decode(final ByteBuf bytes) { - final long uuidMsb = bytes.readLong(); - final long uuidLsb = bytes.readLong(); - final MusicSource source = new MusicSource(new UUID(uuidMsb, uuidLsb)); - final boolean hasRecord = bytes.readBoolean(); - if (hasRecord) { - final String domain = ByteBufUtils.readUTF8String(bytes); - final String path = ByteBufUtils.readUTF8String(bytes); - source.currentRecord = new ResourceLocation(domain, path); - } - source.headphoneLimit = GT_MetaTileEntity_BetterJukebox.HeadphoneLimit.ENTRIES.get(bytes.readByte()); - source.headphoneBlockRange = ByteBufUtils.readVarInt(bytes, 5); - source.startedPlayingAtMs = bytes.readLong(); - source.playingForMs = bytes.readLong(); - final int originX = ByteBufUtils.readVarInt(bytes, 5); - final int originY = ByteBufUtils.readVarInt(bytes, 5); - final int originZ = ByteBufUtils.readVarInt(bytes, 5); - final int originW = ByteBufUtils.readVarInt(bytes, 5); - source.originPosition.set(originX, originY, originZ, originW); - final int emittersLength = ByteBufUtils.readVarInt(bytes, 5); - source.emitterParameters = new int[emittersLength]; - for (int i = 0; i < emittersLength; i++) { - source.emitterParameters[i] = ByteBufUtils.readVarInt(bytes, 5); - } - - return source; - } - - public void setRecord(final ResourceLocation record) { - setRecord(record, 0); - } - - public void setRecord(final ResourceLocation record, long seekOffset) { - modified = true; - currentRecord = record; - playingForMs = seekOffset; - startedPlayingAtMs = System.currentTimeMillis() - seekOffset; - } - } - - public static final class ServerSystem { - - static final Object2ObjectOpenHashMap musicSources = new Object2ObjectOpenHashMap<>(32); - static boolean musicSourcesDirty = false; - - // Everything is synchronized to allow calling into here from the client when singleplayer synchronization is - // needed. - - public static synchronized MusicSource registerOrGetMusicSource(UUID uuid) { - return musicSources.computeIfAbsent(uuid, (UUID id) -> { - musicSourcesDirty = true; - return new MusicSource(id); - }); - } - - public static synchronized void removeMusicSource(UUID uuid) { - musicSources.remove(uuid); - musicSourcesDirty = true; - } - - public static synchronized void reset() { - musicSources.clear(); - musicSourcesDirty = true; - } - - public static synchronized ByteBuf serialize() { - final ByteBuf out = Unpooled.buffer(); - ByteBufUtils.writeVarInt(out, musicSources.size(), 5); - musicSources.forEach((uuid, source) -> source.encode(out)); - return out; - } - - private static boolean tickAnyDirty; - - public static synchronized void tick() { - final long now = System.currentTimeMillis(); - tickAnyDirty = false; - musicSources.forEach((uuid, source) -> { - source.playingForMs = now - source.startedPlayingAtMs; - tickAnyDirty |= source.modified; - source.modified = false; - }); - if (tickAnyDirty || musicSourcesDirty) { - musicSourcesDirty = false; - GT_Values.NW.sendToAll(new GT_Packet_MusicSystemData(serialize())); - } - } - - static synchronized void onPauseMs(long pauseDurationMs) { - musicSources.forEach((uuid, source) -> { source.startedPlayingAtMs += pauseDurationMs; }); - } - } - - public static final class ClientSystem { - - private static final class ClientSourceData { - - /** Currently playing sound data */ - public ElectricJukeboxSound currentSound = null; - /** Currently playing sound data */ - public ResourceLocation currentSoundResource = null; - /** - * Server's timer value of when the music started, mostly meaningless except for checking for replays of the - * same music file. - */ - public long originalStartTime = 0; - /** - * Computed client value of {@link System#currentTimeMillis()} of the time when the playback would have - * started if it was synchronized with the server. - */ - public long clientReferenceStartTime = 0; - /** Flag for mark and sweep removal of outdated sounds */ - public boolean markFlag = false; - - public void resetMark() { - markFlag = false; - } - - public void mark() { - markFlag = true; - } - - public void clearSound(final Minecraft mc) { - currentSoundResource = null; - if (currentSound != null) { - mc.getSoundHandler() - .stopSound(currentSound); - currentSound = null; - originalStartTime = 0; - } - } - - public boolean equalSound(final MusicSource source) { - if (source == null || source.currentRecord == null) { - return currentSoundResource == null; - } else { - return source.currentRecord.equals(currentSoundResource) - && originalStartTime == source.startedPlayingAtMs; - } - } - - public void resetSound(final Minecraft mc, final MusicSource source, final boolean onHeadphones) { - clearSound(mc); - if (source == null || source.emitterParameters.length == 0) { - return; - } - int closestEmitter = onHeadphones ? 0 - : source.closestEmitter( - (int) Math.floor(mc.thePlayer.posX), - (int) Math.floor(mc.thePlayer.posY), - (int) Math.floor(mc.thePlayer.posZ), - currentDimension); - if (closestEmitter < 0) { - return; - } - this.currentSoundResource = source.currentRecord; - this.originalStartTime = source.startedPlayingAtMs; - this.clientReferenceStartTime = System.currentTimeMillis() - source.playingForMs; - if (currentSoundResource != null) { - this.currentSound = makeRecord(source, closestEmitter); - if (onHeadphones) { - this.currentSound.volume = 1.0e20f; - } - mc.getSoundHandler() - .playSound(this.currentSound); - } - } - - public void updateSound(final Minecraft mc, final MusicSource source, final boolean onHeadphones) { - if (source == null || currentSound == null || source.emitterParameters.length == 0) { - return; - } - int closestEmitter = onHeadphones ? 0 - : source.closestEmitter( - (int) Math.floor(mc.thePlayer.posX), - (int) Math.floor(mc.thePlayer.posY), - (int) Math.floor(mc.thePlayer.posZ), - currentDimension); - if (closestEmitter < 0) { - currentSound.volume = 0.0f; - return; - } - final int offset = closestEmitter * MusicSource.EMITTER_STRIDE; - currentSound.xPosition = source.emitterParameters[offset + MusicSource.EMITTER_X]; - currentSound.yPosition = source.emitterParameters[offset + MusicSource.EMITTER_Y]; - currentSound.zPosition = source.emitterParameters[offset + MusicSource.EMITTER_Z]; - currentSound.volume = onHeadphones ? 1.0e20f - : source.emitterParameters[offset + MusicSource.EMITTER_VOLUME_X_100] / 100.0f; - } - } - - /** Latest music source list as synchronized from the server */ - public static final Object2ObjectOpenHashMap musicSources = new Object2ObjectOpenHashMap<>(); - - private static final Object2ObjectOpenHashMap activelyPlayingMusic = new Object2ObjectOpenHashMap<>( - 16); - - private static final ObjectOpenHashSet wornHeadphones = new ObjectOpenHashSet<>(); - - private static int currentDimension = Integer.MIN_VALUE; - - private static boolean soundsPaused = false; - private static long pauseTimeMs = 0; - private static int tickCounter = 0; - - public static void loadUpdatedSources(ByteBuf bytes) { - final int sourceCount = ByteBufUtils.readVarInt(bytes, 5); - musicSources.clear(); - for (int i = 0; i < sourceCount; i++) { - final MusicSource source = MusicSource.decode(bytes); - musicSources.put(source.sourceID, source); - } - } - - private static ElectricJukeboxSound makeRecord(MusicSource source, int emitter) { - final int x = source.emitterParameters[emitter * MusicSource.EMITTER_STRIDE + MusicSource.EMITTER_X]; - final int y = source.emitterParameters[emitter * MusicSource.EMITTER_STRIDE + MusicSource.EMITTER_Y]; - final int z = source.emitterParameters[emitter * MusicSource.EMITTER_STRIDE + MusicSource.EMITTER_Z]; - final float volume = source.emitterParameters[emitter * MusicSource.EMITTER_STRIDE - + MusicSource.EMITTER_VOLUME_X_100] / 100.0f; - return new ElectricJukeboxSound(source.currentRecord, volume, source.playingForMs, x, y, z); - } - - public static void dumpAllRecordDurations() { - try { - final Minecraft mc = Minecraft.getMinecraft(); - final SoundRegistry sm = mc.getSoundHandler().sndRegistry; - final SoundDurationsJson json = new SoundDurationsJson(); - @SuppressWarnings("unchecked") - final Map allRecords = ItemRecord.field_150928_b; - // Cursed hack because JOrbis does not support seeking in anything other than filesystem files. - // This is only a dev tool, so it can be a bit slow and use real files here. - final File tempFile = File.createTempFile("mcdecode", ".ogg"); - for (final ItemRecord record : allRecords.values()) { - try { - final ResourceLocation res = record.getRecordResource(record.recordName); - SoundEventAccessorComposite registryEntry = (SoundEventAccessorComposite) sm.getObject(res); - if (registryEntry == null) { - registryEntry = (SoundEventAccessorComposite) sm.getObject( - new ResourceLocation(res.getResourceDomain(), "records." + res.getResourcePath())); - } - final ResourceLocation realPath = registryEntry.func_148720_g() - .getSoundPoolEntryLocation(); - try (final InputStream is = mc.getResourceManager() - .getResource(realPath) - .getInputStream(); final OutputStream os = FileUtils.openOutputStream(tempFile)) { - IOUtils.copy(is, os); - os.close(); - final VorbisFile vf = new VorbisFile(tempFile.getAbsolutePath()); - final float totalSeconds = vf.time_total(-1); - json.soundDurationsMs.put(res.toString(), (int) Math.ceil(totalSeconds * 1000.0f)); - } - } catch (Exception e) { - GT_Mod.GT_FML_LOGGER.warn("Skipping {}", record.recordName, e); - } - } - GT_Mod.GT_FML_LOGGER.info( - "Sound durations json: \n{}", - new GsonBuilder().setPrettyPrinting() - .create() - .toJson(json)); - tempFile.delete(); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - - public static void reset() { - musicSources.clear(); - tick(); - } - - public static void tick() { - final Minecraft mc = Minecraft.getMinecraft(); - if (mc == null || mc.renderGlobal == null - || mc.theWorld == null - || mc.thePlayer == null - || mc.theWorld.provider == null) { - return; - } - tickCounter++; - final long now = System.currentTimeMillis(); - currentDimension = mc.theWorld.provider.dimensionId; - - headphoneCheck: if ((tickCounter % 20) == 0) { - wornHeadphones.clear(); - final IInventory baubles = BaublesApi.getBaubles(mc.thePlayer); - if (baubles == null) { - break headphoneCheck; - } - final int baublesSize = baubles.getSizeInventory(); - for (int i = 0; i < baublesSize; i++) { - final ItemStack item = baubles.getStackInSlot(i); - if (item != null && item.getItem() instanceof GT_WirelessHeadphones headphones) { - final UUID id = headphones.getBoundJukeboxUUID(item); - if (id != null) { - wornHeadphones.add(id); - } - } - } - } - - activelyPlayingMusic.forEach((uuid, data) -> data.resetMark()); - - // Update and mark all present music streams - musicSources.forEach((uuid, musicSource) -> { - final ClientSourceData data = activelyPlayingMusic - .computeIfAbsent(uuid, ignored -> new ClientSourceData()); - data.mark(); - if (data.currentSound != null && !mc.getSoundHandler() - .isSoundPlaying(data.currentSound) - && (now - data.clientReferenceStartTime) - < getMusicRecordDurations().getOrDefault(data.currentSoundResource, Integer.MAX_VALUE)) { - data.currentSound = null; - data.currentSoundResource = null; - } - final boolean onHeadphones = wornHeadphones.contains(uuid); - if (!data.equalSound(musicSource)) { - data.resetSound(mc, musicSource, onHeadphones); - } else { - data.updateSound(mc, musicSource, onHeadphones); - } - }); - - // Sweep no longer present music streams - final var entries = activelyPlayingMusic.object2ObjectEntrySet() - .fastIterator(); - while (entries.hasNext()) { - final ClientSourceData entry = entries.next() - .getValue(); - if (!entry.markFlag) { - entry.clearSound(mc); - entries.remove(); - } - } - } - - @ApiStatus.Internal - public static void onSoundBatchStop() { - // All music was forcibly stopped, we can forget about the currently playing music - // and let the update loop re-start them on next tick - long now = System.currentTimeMillis(); - activelyPlayingMusic.forEach((uuid, data) -> { - data.currentSound = null; - data.currentSoundResource = null; - final MusicSource source = musicSources.get(uuid); - if (source == null) { - return; - } - source.playingForMs = now - data.clientReferenceStartTime; - }); - } - - @ApiStatus.Internal - public static void onSoundBatchPause() { - if (soundsPaused) { - return; - } - soundsPaused = true; - pauseTimeMs = System.currentTimeMillis(); - } - - @ApiStatus.Internal - public static void onSoundBatchResume() { - if (!soundsPaused) { - return; - } - final Minecraft mc = Minecraft.getMinecraft(); - if (mc == null || mc.renderGlobal == null - || mc.theWorld == null - || mc.thePlayer == null - || mc.theWorld.provider == null) { - return; - } - soundsPaused = false; - - if (!(mc.isSingleplayer() && !mc.getIntegratedServer() - .getPublic())) { - return; - } - final long now = System.currentTimeMillis(); - final long pauseDurationMs = now - pauseTimeMs; - - // We manipulate server state here, because we've checked this is singleplayer pausing. - GT_MusicSystem.ServerSystem.onPauseMs(pauseDurationMs); - musicSources.forEach((uuid, source) -> { source.startedPlayingAtMs += pauseDurationMs; }); - activelyPlayingMusic.forEach((uuid, data) -> { - data.originalStartTime += pauseDurationMs; - data.clientReferenceStartTime += pauseDurationMs; - }); - - } - } - - private static final Object2IntOpenHashMap musicRecordDurations = new Object2IntOpenHashMap<>(); - private static volatile boolean musicRecordsInitialized; - - /** For GSON consumption */ - public static class SoundDurationsJson { - - public Map soundDurationsMs = new TreeMap<>(); - } - - public static Object2IntOpenHashMap getMusicRecordDurations() { - if (musicRecordsInitialized) { - return musicRecordDurations; - } - // double-checked locking for efficiency - synchronized (musicRecordDurations) { - if (musicRecordsInitialized) { - return musicRecordDurations; - } - - final Gson gson = new Gson(); - - try { - final ArrayList candidates = Collections.list( - GT_MusicSystem.class.getClassLoader() - .getResources("soundmeta/durations.json")); - final Path configPath = Loader.instance() - .getConfigDir() - .toPath() - .resolve("soundmeta") - .resolve("durations.json"); - if (Files.exists(configPath)) { - candidates.add( - configPath.toUri() - .toURL()); - } - for (final URL url : candidates) { - try { - final String objectJson = IOUtils.toString(url); - final SoundDurationsJson object = gson.fromJson(objectJson, SoundDurationsJson.class); - if (object == null || object.soundDurationsMs == null || object.soundDurationsMs.isEmpty()) { - continue; - } - for (final var entry : object.soundDurationsMs.entrySet()) { - musicRecordDurations.put( - new ResourceLocation(entry.getKey()), - entry.getValue() - .intValue()); - } - } catch (Exception e) { - GT_Mod.GT_FML_LOGGER.error("Could not parse sound durations from {}", url, e); - } - } - } catch (IOException e) { - throw new RuntimeException(e); - } - - musicRecordsInitialized = true; - return musicRecordDurations; - } - } - -} diff --git a/src/main/java/gregtech/api/util/GT_OreDictUnificator.java b/src/main/java/gregtech/api/util/GT_OreDictUnificator.java deleted file mode 100644 index 82c14f2aeb..0000000000 --- a/src/main/java/gregtech/api/util/GT_OreDictUnificator.java +++ /dev/null @@ -1,578 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.GT_Values.E; -import static gregtech.api.enums.GT_Values.M; -import static gregtech.api.enums.GT_Values.W; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import javax.annotation.Nullable; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.ItemData; -import gregtech.api.objects.MaterialStack; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenCustomHashMap; -import it.unimi.dsi.fastutil.objects.ObjectOpenCustomHashSet; - -/** - * NEVER INCLUDE THIS FILE IN YOUR MOD!!! - *

- * This is the Core of my OreDict Unification Code - *

- * If you just want to use this to unificate your Items, then use the Function in the GregTech_API File - *

- * P.S. It is intended to be named "Unificator" and not "Unifier", because that sounds more awesome. - */ -public class GT_OreDictUnificator { - - private static final Map sName2StackMap = new HashMap<>(); - private static final Map sItemStack2DataMap = new Object2ObjectOpenCustomHashMap<>( - GT_ItemStack.ITEMSTACK_HASH_STRATEGY2); - private static final Map> sUnificationTable = new Object2ObjectOpenCustomHashMap<>( - GT_ItemStack.ITEMSTACK_HASH_STRATEGY2); - private static final Set sNoUnificationList = new ObjectOpenCustomHashSet<>( - GT_ItemStack.ITEMSTACK_HASH_STRATEGY2); - private static int isRegisteringOre = 0, isAddingOre = 0; - private static boolean mRunThroughTheList = true; - - static { - GregTech_API.sItemStackMappings.add(sItemStack2DataMap); - GregTech_API.sItemStackMappings.add(sUnificationTable); - } - - /** - * The Blacklist just prevents the Item from being unificated into something else. Useful if you have things like - * the Industrial Diamond, which is better than regular Diamond, but also usable in absolutely all Diamond Recipes. - */ - public static void addToBlacklist(ItemStack aStack) { - if (GT_Utility.isStackValid(aStack) && !GT_Utility.isStackInStackSet(aStack, sNoUnificationList)) - sNoUnificationList.add(aStack); - } - - public static boolean isBlacklisted(ItemStack aStack) { - return GT_Utility.isStackInStackSet(aStack, sNoUnificationList); - } - - public static void add(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack) { - set(aPrefix, aMaterial, aStack, false, false); - } - - public static void set(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack) { - set(aPrefix, aMaterial, aStack, true, false); - } - - public static void set(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack, boolean aOverwrite, - boolean aAlreadyRegistered) { - if (aMaterial == null || aPrefix == null - || GT_Utility.isStackInvalid(aStack) - || Items.feather.getDamage(aStack) == W) return; - isAddingOre++; - aStack = GT_Utility.copyAmount(1, aStack); - if (!aAlreadyRegistered) registerOre(aPrefix.get(aMaterial), aStack); - addAssociation(aPrefix, aMaterial, aStack, isBlacklisted(aStack)); - if (aOverwrite || GT_Utility.isStackInvalid( - sName2StackMap.get( - aPrefix.get(aMaterial) - .toString()))) - sName2StackMap.put( - aPrefix.get(aMaterial) - .toString(), - aStack); - isAddingOre--; - } - - public static ItemStack getFirstOre(Object aName, long aAmount) { - if (GT_Utility.isStringInvalid(aName)) return null; - ItemStack tStack = sName2StackMap.get(aName.toString()); - if (GT_Utility.isStackValid(tStack)) return GT_Utility.copyAmount(aAmount, tStack); - return GT_Utility.copyAmount(aAmount, getOresImmutable(aName).toArray()); - } - - public static ItemStack get(Object aName, long aAmount) { - return get(aName, null, aAmount, true, true); - } - - public static ItemStack get(Object aName, ItemStack aReplacement, long aAmount) { - return get(aName, aReplacement, aAmount, true, true); - } - - public static ItemStack get(OrePrefixes aPrefix, Object aMaterial, long aAmount) { - return get(aPrefix, aMaterial, null, aAmount); - } - - public static ItemStack get(OrePrefixes aPrefix, Object aMaterial, ItemStack aReplacement, long aAmount) { - if (OrePrefixes.mPreventableComponents.contains(aPrefix) && aPrefix.mDisabledItems.contains(aMaterial)) - return aReplacement; - return get(aPrefix.get(aMaterial), aReplacement, aAmount, false, true); - } - - public static ItemStack get(OrePrefixes aPrefix, Object aMaterial, long aAmount, boolean aNoInvalidAmounts) { - if (OrePrefixes.mPreventableComponents.contains(aPrefix) && aPrefix.mDisabledItems.contains(aMaterial)) - return null; - return get(aPrefix.get(aMaterial), null, aAmount, false, aNoInvalidAmounts); - } - - public static ItemStack get(Object aName, ItemStack aReplacement, long aAmount, boolean aMentionPossibleTypos, - boolean aNoInvalidAmounts) { - if (aNoInvalidAmounts && aAmount < 1) return null; - final ItemStack stackFromName = sName2StackMap.get(aName.toString()); - if (stackFromName != null) return GT_Utility.copyAmount(aAmount, stackFromName); - if (aMentionPossibleTypos) { - GT_Log.err.println("Unknown Key for Unification, Typo? " + aName); - } - final ItemStack stackFirstOre = getFirstOre(aName, aAmount); - if (stackFirstOre != null) return GT_Utility.copyAmount(aAmount, stackFirstOre); - return GT_Utility.copyAmount(aAmount, aReplacement); - } - - public static ItemStack[] setStackArray(boolean aUseBlackList, ItemStack... aStacks) { - for (int i = 0; i < aStacks.length; i++) aStacks[i] = get(aUseBlackList, GT_Utility.copyOrNull(aStacks[i])); - return aStacks; - } - - public static ItemStack[] getStackArray(boolean aUseBlackList, Object... aStacks) { - ItemStack[] rStacks = new ItemStack[aStacks.length]; - for (int i = 0; i < aStacks.length; i++) { - rStacks[i] = get(aUseBlackList, GT_Utility.copy(aStacks[i]), true); - } - return rStacks; - } - - public static ItemStack setStack(ItemStack aStack) { - return setStack(true, aStack); - } - - public static ItemStack setStack(boolean aUseBlackList, ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return aStack; - ItemStack tStack = get(aUseBlackList, aStack); - if (GT_Utility.areStacksEqual(aStack, tStack)) return aStack; - aStack.func_150996_a(tStack.getItem()); - Items.feather.setDamage(aStack, Items.feather.getDamage(tStack)); - return aStack; - } - - public static ItemStack get(ItemStack aStack) { - return get(true, aStack); - } - - public static ItemStack get(boolean aUseBlackList, ItemStack aStack) { - return get(aUseBlackList, aStack, false); - } - - /** - * @param unsafe If true, it does not limit stack size by 64. - */ - public static ItemStack get(boolean aUseBlackList, ItemStack aStack, boolean unsafe) { - if (GT_Utility.isStackInvalid(aStack)) return null; - ItemData tPrefixMaterial = getAssociation(aStack); - if (tPrefixMaterial == null || !tPrefixMaterial.hasValidPrefixMaterialData() - || (aUseBlackList && tPrefixMaterial.mBlackListed)) return GT_Utility.copyOrNull(aStack); - if (aUseBlackList && !GregTech_API.sUnificationEntriesRegistered && isBlacklisted(aStack)) { - tPrefixMaterial.mBlackListed = true; - return GT_Utility.copyOrNull(aStack); - } - if (tPrefixMaterial.mUnificationTarget == null) - tPrefixMaterial.mUnificationTarget = sName2StackMap.get(tPrefixMaterial.toString()); - ItemStack rStack = tPrefixMaterial.mUnificationTarget; - if (GT_Utility.isStackInvalid(rStack)) return GT_Utility.copyOrNull(aStack); - ItemStack newStack; - if (unsafe) { - newStack = GT_Utility.copyAmountUnsafe(aStack.stackSize, rStack); - } else { - newStack = GT_Utility.copyAmount(aStack.stackSize, rStack); - } - // NBT is assigned by reference here, so mutating it may have unexpected side effects. - newStack.setTagCompound(aStack.getTagCompound()); - return newStack; - } - - /** - * Doesn't copy the returned stack or set quantity. Be careful and do not mutate it; intended only to optimize - * comparisons - */ - public static ItemStack get_nocopy(ItemStack aStack) { - return get_nocopy(true, aStack); - } - - /** - * Doesn't copy the returned stack or set quantity. Be careful and do not mutate it; intended only to optimize - * comparisons - */ - static ItemStack get_nocopy(boolean aUseBlackList, ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return null; - ItemData tPrefixMaterial = getAssociation(aStack); - if (tPrefixMaterial == null || !tPrefixMaterial.hasValidPrefixMaterialData() - || (aUseBlackList && tPrefixMaterial.mBlackListed)) return aStack; - if (aUseBlackList && !GregTech_API.sUnificationEntriesRegistered && isBlacklisted(aStack)) { - tPrefixMaterial.mBlackListed = true; - return aStack; - } - if (tPrefixMaterial.mUnificationTarget == null) - tPrefixMaterial.mUnificationTarget = sName2StackMap.get(tPrefixMaterial.toString()); - ItemStack rStack = tPrefixMaterial.mUnificationTarget; - if (GT_Utility.isStackInvalid(rStack)) return aStack; - - // Yes, == and not .equals(). - // This check is primarily intended to optimize for the case where both rStack and aStack - // do not have NBT, and so we would be comparing null == null. - // - // Even if aStack and rStack may have equal NBT, we prefer to do an inexpensive - // new ItemStack() over the potentially expensive NBTTagCompound.equals(). - if (aStack.getTagCompound() == rStack.getTagCompound()) { - // Warning: rStack's stack size may not be equal to aStack's stack size. - return rStack; - } - - // Okay, okay, I lied, we actually do need to make a copy. - // This is to fix a long-standing bug where we were mutating NBT directly on rStack, - // which had unexpected and unpredictable ripple effects. - // - // We will do some custom copying here, to avoid ItemStack.copy(), - // which calls the potentially expensive NBTTagCompound.copy() - // NBT is assigned by reference here, so mutating it may have unexpected side effects. - ItemStack newStack = new ItemStack(rStack.getItem(), aStack.stackSize, Items.feather.getDamage(rStack)); - newStack.setTagCompound(aStack.getTagCompound()); - return newStack; - } - - /** - * Compares the first argument against an already-unificated second argument as if aUseBlackList was both true and - * false. - */ - public static boolean isInputStackEqual(ItemStack aStack, ItemStack unified_tStack) { - if (GT_Utility.isStackInvalid(aStack)) return false; - return isInputStackEqual(aStack, getAssociation(aStack), unified_tStack); - } - - /** - * Compares the first argument against an already-unificated second argument as if aUseBlackList was both true and - * false. - */ - public static boolean isInputStackEqual(ItemStack aStack, ItemData aStackPrefixData, ItemStack unified_tStack) { - boolean alreadyCompared = false; - if (GT_Utility.isStackInvalid(aStack)) return false; - ItemStack rStack = null; - if (aStackPrefixData == null || !aStackPrefixData.hasValidPrefixMaterialData()) - return GT_Utility.areStacksEqual(aStack, unified_tStack, true); - else if (aStackPrefixData.mBlackListed) { - if (GT_Utility.areStacksEqual(aStack, unified_tStack, true)) return true; - else alreadyCompared = true; - } - if (!alreadyCompared && !GregTech_API.sUnificationEntriesRegistered && isBlacklisted(aStack)) { - aStackPrefixData.mBlackListed = true; - if (GT_Utility.areStacksEqual(aStack, unified_tStack, true)) return true; - else alreadyCompared = true; - } - if (aStackPrefixData.mUnificationTarget == null) - aStackPrefixData.mUnificationTarget = sName2StackMap.get(aStackPrefixData.toString()); - rStack = aStackPrefixData.mUnificationTarget; - if (GT_Utility.isStackInvalid(rStack)) - return !alreadyCompared && GT_Utility.areStacksEqual(aStack, unified_tStack, true); - return GT_Utility.areStacksEqual(rStack, unified_tStack, true); - } - - public static List getNonUnifiedStacks(Object obj) { - if (sUnificationTable.isEmpty() && !sItemStack2DataMap.isEmpty()) { - // use something akin to double check lock. this synchronization overhead is causing lag whenever my - // 5900x tries to do NEI lookup - synchronized (sUnificationTable) { - if (sUnificationTable.isEmpty() && !sItemStack2DataMap.isEmpty()) { - for (ItemStack tGTStack0 : sItemStack2DataMap.keySet()) { - ItemStack tStack0 = GT_ItemStack.internalCopyStack(tGTStack0); - ItemStack tStack1 = get_nocopy(false, tStack0); - if (!GT_Utility.areStacksEqual(tStack0, tStack1)) { - List list = sUnificationTable.computeIfAbsent(tStack1, k -> new ArrayList<>()); - // greg's original code tries to dedupe the list using List#contains, which won't work - // on vanilla ItemStack. I removed it since it never worked and can be slow. - 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 rList = new ArrayList<>(); - for (ItemStack aStack : aStacks) { - if (aStack == null) continue; - rList.add(aStack); - List tList = sUnificationTable.get(aStack); - if (tList != null) { - for (ItemStack tStack : tList) { - ItemStack tStack1 = GT_Utility.copyAmount(aStack.stackSize, tStack); - rList.add(tStack1); - } - } - } - return rList; - } - - public static void addItemData(ItemStack aStack, ItemData aData) { - if (GT_Utility.isStackValid(aStack) && getItemData(aStack) == null && aData != null) setItemData(aStack, aData); - } - - public static void addItemDataFromInputs(ItemStack output, Object... inputs) { - int length = inputs.length; - ItemData[] tData = new ItemData[length]; - for (int i = 0; i < length; i++) { - if (inputs[i] instanceof ItemStack) { - tData[i] = GT_OreDictUnificator.getItemData((ItemStack) inputs[i]); - } else if (inputs[i] instanceof ItemData) { - tData[i] = (ItemData) inputs[i]; - } else { - throw new IllegalArgumentException(); - } - } - if (GT_Utility.arrayContainsNonNull(tData)) { - GT_OreDictUnificator.addItemData(output, new ItemData(tData)); - } - } - - public static void setItemData(ItemStack aStack, ItemData aData) { - if (GT_Utility.isStackInvalid(aStack) || aData == null) return; - ItemData tData = getItemData(aStack); - if (tData == null || !tData.hasValidPrefixMaterialData()) { - if (tData != null) for (Object tObject : tData.mExtraData) - if (!aData.mExtraData.contains(tObject)) aData.mExtraData.add(tObject); - if (aStack.stackSize > 1) { - if (aData.mMaterial != null) aData.mMaterial.mAmount /= aStack.stackSize; - for (MaterialStack tMaterial : aData.mByProducts) tMaterial.mAmount /= aStack.stackSize; - aStack = GT_Utility.copyAmount(1, aStack); - } - sItemStack2DataMap.put(aStack, aData); - if (aData.hasValidMaterialData()) { - long tValidMaterialAmount = aData.mMaterial.mMaterial.contains(SubTag.NO_RECYCLING) ? 0 - : aData.mMaterial.mAmount >= 0 ? aData.mMaterial.mAmount : M; - for (MaterialStack tMaterial : aData.mByProducts) - tValidMaterialAmount += tMaterial.mMaterial.contains(SubTag.NO_RECYCLING) ? 0 - : tMaterial.mAmount >= 0 ? tMaterial.mAmount : M; - if (tValidMaterialAmount < M) GT_ModHandler.addToRecyclerBlackList(aStack); - } - if (mRunThroughTheList) { - if (GregTech_API.sLoadStarted) { - mRunThroughTheList = false; - for (Entry tEntry : sItemStack2DataMap.entrySet()) if (!tEntry.getValue() - .hasValidPrefixData() || tEntry.getValue().mPrefix.mAllowNormalRecycling) - GT_RecipeRegistrator.registerMaterialRecycling( - GT_ItemStack.internalCopyStack(tEntry.getKey()), - tEntry.getValue()); - } - } else { - if (!aData.hasValidPrefixData() || aData.mPrefix.mAllowNormalRecycling) - GT_RecipeRegistrator.registerMaterialRecycling(aStack, aData); - } - } else { - for (Object tObject : aData.mExtraData) - if (!tData.mExtraData.contains(tObject)) tData.mExtraData.add(tObject); - } - } - - public static void removeItemData(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) { - return; - } - sItemStack2DataMap.remove(aStack); - } - - public static void addAssociation(OrePrefixes aPrefix, Materials aMaterial, ItemStack aStack, - boolean aBlackListed) { - if (aPrefix == null || aMaterial == null || GT_Utility.isStackInvalid(aStack)) return; - if (Items.feather.getDamage(aStack) == W) for (byte i = 0; i < 16; i++) - setItemData(GT_Utility.copyAmountAndMetaData(1, i, aStack), new ItemData(aPrefix, aMaterial, aBlackListed)); - setItemData(aStack, new ItemData(aPrefix, aMaterial, aBlackListed)); - } - - @Nullable - public static ItemData getItemData(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return null; - ItemData rData = sItemStack2DataMap.get(aStack); - if (rData == null) { // Try the lookup again but with wildcard damage value - rData = sItemStack2DataMap.get(GT_ItemStack.internalCopyStack(aStack, true)); - } - return rData; - } - - @Nullable - public static ItemData getAssociation(ItemStack aStack) { - ItemData rData = getItemData(aStack); - return rData != null && rData.hasValidPrefixMaterialData() ? rData : null; - } - - public static boolean isItemStackInstanceOf(ItemStack aStack, Object aName) { - if (GT_Utility.isStringInvalid(aName) || GT_Utility.isStackInvalid(aStack)) return false; - for (ItemStack tOreStack : getOresImmutable(aName.toString())) - if (GT_Utility.areStacksEqual(tOreStack, aStack, true)) return true; - return false; - } - - public static boolean isItemStackDye(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return false; - - for (Dyes tDye : Dyes.VALUES) if (isItemStackInstanceOf(aStack, tDye.toString())) return true; - - return false; - } - - public static boolean registerOre(OrePrefixes aPrefix, Object aMaterial, ItemStack aStack) { - return registerOre(aPrefix.get(aMaterial), aStack); - } - - public static boolean registerOre(Object aName, ItemStack aStack) { - if (aName == null || GT_Utility.isStackInvalid(aStack)) return false; - - String tName = aName.toString(); - - if (GT_Utility.isStringInvalid(tName)) return false; - - for (ItemStack itemStack : getOresImmutable(tName)) - if (GT_Utility.areStacksEqual(itemStack, aStack, true)) return false; - - isRegisteringOre++; - OreDictionary.registerOre(tName, GT_Utility.copyAmount(1, aStack)); - isRegisteringOre--; - return true; - } - - public static boolean isRegisteringOres() { - return isRegisteringOre > 0; - } - - public static boolean isAddingOres() { - return isAddingOre > 0; - } - - public static void resetUnificationEntries() { - for (ItemData tPrefixMaterial : sItemStack2DataMap.values()) tPrefixMaterial.mUnificationTarget = null; - } - - public static ItemStack getGem(MaterialStack aMaterial) { - return aMaterial == null ? null : getGem(aMaterial.mMaterial, aMaterial.mAmount); - } - - public static ItemStack getGem(Materials aMaterial, OrePrefixes aPrefix) { - return aMaterial == null ? null : getGem(aMaterial, aPrefix.mMaterialAmount); - } - - public static ItemStack getGem(Materials aMaterial, long aMaterialAmount) { - ItemStack rStack = null; - if (((aMaterialAmount >= M))) rStack = get(OrePrefixes.gem, aMaterial, aMaterialAmount / M); - if (rStack == null) { - if ((((aMaterialAmount * 2) % M == 0) || aMaterialAmount >= M * 16)) - rStack = get(OrePrefixes.gemFlawed, aMaterial, (aMaterialAmount * 2) / M); - if ((((aMaterialAmount * 4) >= M))) - rStack = get(OrePrefixes.gemChipped, aMaterial, (aMaterialAmount * 4) / M); - } - return rStack; - } - - public static ItemStack getDust(MaterialStack aMaterial) { - return aMaterial == null ? null : getDust(aMaterial.mMaterial, aMaterial.mAmount); - } - - public static ItemStack getDust(Materials aMaterial, OrePrefixes aPrefix) { - return aMaterial == null ? null : getDust(aMaterial, aPrefix.mMaterialAmount); - } - - public static ItemStack getDust(Materials aMaterial, long aMaterialAmount) { - if (aMaterialAmount <= 0) return null; - ItemStack rStack = null; - if (((aMaterialAmount % M == 0) || aMaterialAmount >= M * 16)) - rStack = get(OrePrefixes.dust, aMaterial, aMaterialAmount / M); - if (rStack == null && (((aMaterialAmount * 4) % M == 0) || aMaterialAmount >= M * 8)) - rStack = get(OrePrefixes.dustSmall, aMaterial, (aMaterialAmount * 4) / M); - if (rStack == null && (((aMaterialAmount * 9) >= M))) - rStack = get(OrePrefixes.dustTiny, aMaterial, (aMaterialAmount * 9) / M); - return rStack; - } - - public static ItemStack getIngot(MaterialStack aMaterial) { - return aMaterial == null ? null : getIngot(aMaterial.mMaterial, aMaterial.mAmount); - } - - public static ItemStack getIngot(Materials aMaterial, OrePrefixes aPrefix) { - return aMaterial == null ? null : getIngot(aMaterial, aPrefix.mMaterialAmount); - } - - public static ItemStack getIngot(Materials aMaterial, long aMaterialAmount) { - if (aMaterialAmount <= 0) return null; - ItemStack rStack = null; - if (((aMaterialAmount % (M * 9) == 0 && aMaterialAmount / (M * 9) > 1) || aMaterialAmount >= M * 72)) - rStack = get(OrePrefixes.block, aMaterial, aMaterialAmount / (M * 9)); - if (rStack == null && ((aMaterialAmount % M == 0) || aMaterialAmount >= M * 8)) - rStack = get(OrePrefixes.ingot, aMaterial, aMaterialAmount / M); - if (rStack == null && (((aMaterialAmount * 9) >= M))) - rStack = get(OrePrefixes.nugget, aMaterial, (aMaterialAmount * 9) / M); - return rStack; - } - - public static ItemStack getIngotOrDust(Materials aMaterial, long aMaterialAmount) { - if (aMaterialAmount <= 0) return null; - ItemStack rStack = getIngot(aMaterial, aMaterialAmount); - if (rStack == null) rStack = getDust(aMaterial, aMaterialAmount); - return rStack; - } - - public static ItemStack getIngotOrDust(MaterialStack aMaterial) { - ItemStack rStack = getIngot(aMaterial); - if (rStack == null) rStack = getDust(aMaterial); - return rStack; - } - - public static ItemStack getDustOrIngot(Materials aMaterial, long aMaterialAmount) { - if (aMaterialAmount <= 0) return null; - ItemStack rStack = getDust(aMaterial, aMaterialAmount); - if (rStack == null) rStack = getIngot(aMaterial, aMaterialAmount); - return rStack; - } - - public static ItemStack getDustOrIngot(MaterialStack aMaterial) { - ItemStack rStack = getDust(aMaterial); - if (rStack == null) rStack = getIngot(aMaterial); - return rStack; - } - - /** - * @return a Copy of the OreDictionary.getOres() List - */ - public static ArrayList getOres(OrePrefixes aPrefix, Object aMaterial) { - return getOres(aPrefix.get(aMaterial)); - } - - /** - * @return a Copy of the OreDictionary.getOres() List - */ - public static ArrayList getOres(Object aOreName) { - String aName = aOreName == null ? E : aOreName.toString(); - ArrayList rList = new ArrayList<>(); - if (GT_Utility.isStringValid(aName)) rList.addAll(OreDictionary.getOres(aName)); - return rList; - } - - /** - * Fast version of {@link #getOres(Object)}, which doesn't call - * {@link System#arraycopy(Object, int, Object, int, int)} in {@link ArrayList#addAll} - */ - public static List getOresImmutable(@Nullable Object aOreName) { - String aName = aOreName == null ? E : aOreName.toString(); - - return GT_Utility.isStringValid(aName) ? Collections.unmodifiableList(OreDictionary.getOres(aName)) - : Collections.emptyList(); - } -} diff --git a/src/main/java/gregtech/api/util/GT_OverclockCalculator.java b/src/main/java/gregtech/api/util/GT_OverclockCalculator.java deleted file mode 100644 index 5dda0b5c01..0000000000 --- a/src/main/java/gregtech/api/util/GT_OverclockCalculator.java +++ /dev/null @@ -1,621 +0,0 @@ -package gregtech.api.util; - -import java.util.function.Function; -import java.util.function.Supplier; - -import javax.annotation.Nonnull; - -public class GT_OverclockCalculator { - - // region variables - // region basic properties - /** - * EUt the recipe originally runs at - */ - private long recipeEUt = 0; - /** - * Voltage of the machine - */ - private long machineVoltage = 0; - /** - * Amperage of the machine - */ - private long machineAmperage = 1; - /** - * Duration of the recipe - */ - private int duration = 0; - /** - * A supplier used for machines which have a custom way of calculating base duration, like Neutron Activator - */ - private Supplier durationUnderOneTickSupplier; - /** - * The parallel the machine has when trying to overclock - */ - private int parallel = 1; - // endregion - // region extra factors - /** - * Discount for EUt at the beginning of calculating overclocks, like GT++ machines - */ - private double eutDiscount = 1; - /** - * Speeding/Slowing up/down the duration of a recipe at the beginning of calculating overclocks, like GT++ machines - */ - private double speedBoost = 1; - // endregion - // region overclock parameters - /** - * How much the energy would be multiplied by per overclock available - */ - private double eutIncreasePerOC = 4; - /** - * A supplier used for machines which have a custom way of calculating energy increase multipliers for every - * overclock, like Advanced Assembling Line - */ - private Function eutIncreasePerOCSupplier = getDefaultEutIncreasePerOCSupplier(); - /** - * How much the duration would be divided by per overclock made that isn't an overclock from HEAT - */ - private double durationDecreasePerOC = 2; - /** - * A supplier used for machines which have a custom way of calculating duration decrease multipliers for every - * overclock - */ - private Function durationDecreasePerOCSupplier = getDefaultDurationDecreasePerOCSupplier(); - /** - * Whether at least one of {@link #eutIncreasePerOCSupplier} and {@link #durationDecreasePerOCSupplier} has been set - */ - private boolean hasAtLeastOneSupplierBeenSet; - /** - * Whether to give EUt Discount when the duration goes below one tick - */ - private boolean oneTickDiscount; - /** - * Whether the multi should use amperage to overclock normally. - */ - private boolean amperageOC; - /** - * If the OC calculator should only do a given amount of overclocks. Mainly used in fusion reactors - */ - private boolean limitOverclocks; - /** - * Maximum amount of overclocks to perform, when limitOverclocks = true - */ - private int maxOverclocks; - /** - * How many overclocks have been performed - */ - private int overclockCount; - /** - * Should we actually try to calculate overclocking - */ - private boolean noOverclock; - /** - * The parallel the machine actually used. - */ - private int currentParallel; - // endregion - // region heat overclock - /** - * The min heat required for the recipe - */ - private int recipeHeat = 0; - /** - * The heat the machine has when starting the recipe - */ - private int machineHeat = 0; - /** - * How much the duration should be divided by for each 1800K above recipe heat - */ - private double durationDecreasePerHeatOC = 4; - /** - * Whether to enable overclocking with heat like the EBF every 1800 heat difference - */ - private boolean heatOC; - /** - * Whether to enable heat discounts every 900 heat difference - */ - private boolean heatDiscount; - /** - * The value used for discount final eut per 900 heat - */ - private double heatDiscountExponent = 0.95; - // endregion - // region result - /** - * variable to check whether the overclocks have been calculated - */ - private boolean calculated; - /** - * The calculated duration result. - */ - private int calculatedDuration; - /** - * The calculated energy consumption result. - */ - private long calculatedConsumption; - // endregion - // region constants - private static final int HEAT_DISCOUNT_THRESHOLD = 900; - private static final int HEAT_PERFECT_OVERCLOCK_THRESHOLD = 1800; - private static final double LOG2 = Math.log(2); - // endregion - // endregion - - /** - * Creates calculator that doesn't do OC at all. Will use recipe duration. - */ - public static GT_OverclockCalculator ofNoOverclock(@Nonnull GT_Recipe recipe) { - return ofNoOverclock(recipe.mEUt, recipe.mDuration); - } - - /** - * Creates calculator that doesn't do OC at all, with set duration. - */ - public static GT_OverclockCalculator ofNoOverclock(long eut, int duration) { - return new GT_OverclockCalculator().setRecipeEUt(eut) - .setDuration(duration) - .setEUt(eut) - .setNoOverclock(true); - } - - /** - * An Overclock helper for calculating overclocks in many different situations - */ - public GT_OverclockCalculator() {} - - // region setters - /** - * @param recipeEUt Sets the Recipe's starting voltage - */ - @Nonnull - public GT_OverclockCalculator setRecipeEUt(long recipeEUt) { - this.recipeEUt = recipeEUt; - return this; - } - - /** - * @param machineVoltage Sets the EUt that the machine can use. This is the voltage of the machine - */ - @Nonnull - public GT_OverclockCalculator setEUt(long machineVoltage) { - this.machineVoltage = machineVoltage; - return this; - } - - /** - * @param duration Sets the duration of the recipe - */ - @Nonnull - public GT_OverclockCalculator setDuration(int duration) { - this.duration = duration; - return this; - } - - /** - * @param machineAmperage Sets the Amperage that the machine can support - */ - @Nonnull - public GT_OverclockCalculator setAmperage(long machineAmperage) { - this.machineAmperage = machineAmperage; - return this; - } - - /** - * Enables Perfect OC in calculation - */ - @Nonnull - public GT_OverclockCalculator enablePerfectOC() { - this.durationDecreasePerOC = 4; - return this; - } - - /** - * Set if we should be calculating overclocking using EBF's perfectOC - */ - @Nonnull - public GT_OverclockCalculator setHeatOC(boolean heatOC) { - this.heatOC = heatOC; - return this; - } - - /** - * Sets if we should add a heat discount at the end of calculating an overclock, just like the EBF - */ - @Nonnull - public GT_OverclockCalculator setHeatDiscount(boolean heatDiscount) { - this.heatDiscount = heatDiscount; - return this; - } - - /** - * Sets the starting heat of the recipe - */ - @Nonnull - public GT_OverclockCalculator setRecipeHeat(int recipeHeat) { - this.recipeHeat = recipeHeat; - return this; - } - - /** - * Sets the heat of the coils on the machine - */ - @Nonnull - public GT_OverclockCalculator setMachineHeat(int machineHeat) { - this.machineHeat = machineHeat; - return this; - } - - /** - * Sets an EUtDiscount. 0.9 is 10% less energy. 1.1 is 10% more energy - */ - @Nonnull - public GT_OverclockCalculator setEUtDiscount(float aEUtDiscount) { - this.eutDiscount = aEUtDiscount; - return this; - } - - /** - * Sets a Speed Boost for the multiblock. 0.9 is 10% faster. 1.1 is 10% slower - */ - @Nonnull - public GT_OverclockCalculator setSpeedBoost(float aSpeedBoost) { - this.speedBoost = aSpeedBoost; - return this; - } - - /** - * Sets the parallel that the multiblock uses - */ - @Nonnull - public GT_OverclockCalculator setParallel(int aParallel) { - this.parallel = aParallel; - return this; - } - - /** - * Sets the heat discount during OC calculation if HeatOC is used. Default: 0.95 = 5% discount Used like a EU/t - * Discount - */ - @Nonnull - public GT_OverclockCalculator setHeatDiscountMultiplier(float heatDiscountExponent) { - this.heatDiscountExponent = heatDiscountExponent; - return this; - } - - /** - * Sets the Overclock that should be calculated when a heat OC is applied. - */ - @Nonnull - public GT_OverclockCalculator setHeatPerfectOC(double heatPerfectOC) { - if (heatPerfectOC <= 0) throw new IllegalArgumentException("Heat OC can't be a negative number or zero"); - this.durationDecreasePerHeatOC = heatPerfectOC; - return this; - } - - /** - * Sets the amount that the eut would be multiplied by per overclock. Do not set as 1(ONE) if the duration decrease - * is also 1(ONE)! - */ - @Nonnull - public GT_OverclockCalculator setEUtIncreasePerOC(double eutIncreasePerOC) { - if (eutIncreasePerOC <= 0) - throw new IllegalArgumentException("EUt increase can't be a negative number or zero"); - this.eutIncreasePerOC = eutIncreasePerOC; - return this; - } - - /** - * Sets the amount that the duration would be divided by per overclock. Do not set as 1(ONE) if the eut increase is - * also 1(ONE)! - */ - @Nonnull - public GT_OverclockCalculator setDurationDecreasePerOC(double durationDecreasePerOC) { - if (durationDecreasePerOC <= 0) - throw new IllegalArgumentException("Duration decrease can't be a negative number or zero"); - this.durationDecreasePerOC = durationDecreasePerOC; - return this; - } - - /** - * Set One Tick Discount on EUt based on Duration Decrease Per Overclock. This functions the same as single blocks. - */ - @Nonnull - public GT_OverclockCalculator setOneTickDiscount(boolean oneTickDiscount) { - this.oneTickDiscount = oneTickDiscount; - return this; - } - - /** - * Limit the amount of overclocks that can be performed, regardless of how much power is available. Mainly used for - * fusion reactors. - */ - @Nonnull - public GT_OverclockCalculator limitOverclockCount(int maxOverclocks) { - this.limitOverclocks = true; - this.maxOverclocks = maxOverclocks; - return this; - } - - @Nonnull - public GT_OverclockCalculator setAmperageOC(boolean amperageOC) { - this.amperageOC = amperageOC; - return this; - } - - /** - * Set a supplier for calculating custom duration for when its needed under one tick - */ - @Nonnull - public GT_OverclockCalculator setDurationUnderOneTickSupplier(Supplier supplier) { - this.durationUnderOneTickSupplier = supplier; - return this; - } - - /** - * Sets if we should do overclocking or not - */ - @Nonnull - public GT_OverclockCalculator setNoOverclock(boolean noOverclock) { - this.noOverclock = noOverclock; - return this; - } - - /** - * Set a supplier for calculating custom EUt increase multipliers for every overclock - */ - public GT_OverclockCalculator setEutIncreasePerOCSupplier(Function eutIncreasePerOCSupplier) { - this.eutIncreasePerOCSupplier = eutIncreasePerOCSupplier; - this.hasAtLeastOneSupplierBeenSet = true; - return this; - } - - /** - * Set a supplier for calculating custom duration decrease multipliers for every overclock - */ - public GT_OverclockCalculator setDurationDecreasePerOCSupplier( - Function durationDecreasePerOCSupplier) { - this.durationDecreasePerOCSupplier = durationDecreasePerOCSupplier; - this.hasAtLeastOneSupplierBeenSet = true; - return this; - } - - /** - * Set actually performed parallel - */ - public GT_OverclockCalculator setCurrentParallel(int currentParallel) { - this.currentParallel = currentParallel; - // Sets parallel to the actually performed one if machine's parallel is underused. - this.parallel = Math.min(parallel, currentParallel); - return this; - } - - // endregion - // region calculate - /** - * Call this when all values have been put it. - */ - @Nonnull - public GT_OverclockCalculator calculate() { - if (calculated) { - throw new IllegalStateException("Tried to calculate overclocks twice"); - } - calculateOverclock(); - calculated = true; - return this; - } - - private void calculateOverclock() { - double durationInDouble = durationUnderOneTickSupplier != null ? durationUnderOneTickSupplier.get() - : duration * speedBoost; - calculatedConsumption = recipeEUt; - double heatDiscountMultiplier = calculateHeatDiscountMultiplier(); - // Usually a safeguard when currentParallel is not set: We assume parallel is fully used. - currentParallel = Math.max(currentParallel, parallel); - - if (noOverclock) { - calculatedConsumption = calculateFinalRecipeEUt(heatDiscountMultiplier); - calculatedDuration = (int) Math.ceil(durationInDouble); - return; - } - - // First we need to overclock to reach 1 tick. - // Then we need to overclock under one tick to get more extra parallels. - // We stop overclocking if we've already reached 1 tick and got enough parallels to actually perform. - double requiredUnderOneTickMultiplier = durationInDouble * currentParallel / parallel; - if (hasAtLeastOneSupplierBeenSet) { // custom overclock - double currentEutIncrease = eutIncreasePerOCSupplier.apply(overclockCount + 1); - double currentDurationDecrease = durationDecreasePerOCSupplier.apply(overclockCount + 1); - double machinePower = calculateMachinePower(); - double currentConsumption = calculateRecipePower(heatDiscountMultiplier); - double currentUnderOneTickMultiplier = 1; - // Whether we have enough power for the next overclock; - // whether we need more overclock to reach 1 tick and get enough extra parallel; - // whether we have reached the overclock limit - while (machinePower > currentConsumption * currentEutIncrease - && requiredUnderOneTickMultiplier > currentUnderOneTickMultiplier - && (!limitOverclocks || overclockCount < maxOverclocks)) { - currentConsumption *= currentEutIncrease; - durationInDouble /= currentDurationDecrease; - overclockCount++; - currentEutIncrease = eutIncreasePerOCSupplier.apply(overclockCount + 1); - currentDurationDecrease = durationDecreasePerOCSupplier.apply(overclockCount + 1); - } - calculatedConsumption = (long) Math.max(currentConsumption, 1); - calculatedDuration = (int) Math.max(durationInDouble, 1); - } else { // general overclock - double recipePowerTier = calculateRecipePowerTier(heatDiscountMultiplier); - double machinePowerTier = calculateMachinePowerTier(); - - int maxOverclockCount = calculateAmountOfOverclocks(machinePowerTier, recipePowerTier); - if (limitOverclocks) maxOverclockCount = Math.min(maxOverclocks, maxOverclockCount); - if (!amperageOC) { - // Limit overclocks by voltage tier. - maxOverclockCount = Math.min(maxOverclockCount, calculateRecipeToMachineVoltageDifference()); - } - overclockCount = calculateAmountOfNeededOverclocks(maxOverclockCount, requiredUnderOneTickMultiplier); - - // If triggered, it indicates that recipe power > machine power. - // Not just a safeguard. This also means that you can run a 1.2A recipe on a single hatch for a regular gt - // multi. - // This is intended, including the fact that you don't get an OC with a one tier upgrade in that case. - overclockCount = Math.max(overclockCount, 0); - - int heatOverclockCount = Math.min(calculateMaxAmountOfHeatOverclocks(), overclockCount); - calculatedConsumption = (long) Math.floor(recipeEUt * Math.pow(eutIncreasePerOC, overclockCount)); - durationInDouble /= Math.pow(durationDecreasePerHeatOC, heatOverclockCount) - * Math.pow(durationDecreasePerOC, overclockCount - heatOverclockCount); - if (oneTickDiscount) { - calculatedConsumption = (long) Math - .floor(calculatedConsumption / Math.pow(durationDecreasePerOC, maxOverclockCount - overclockCount)); - calculatedConsumption = Math.max(calculatedConsumption, 1); - } - calculatedConsumption = calculateFinalRecipeEUt(heatDiscountMultiplier); - calculatedDuration = (int) Math.max(durationInDouble, 1); - } - } - - private double calculateRecipePower(double heatDiscountMultiplier) { - return recipeEUt * parallel * eutDiscount * heatDiscountMultiplier; - } - - private double calculateRecipePowerTier(double heatDiscountMultiplier) { - return calculatePowerTier(calculateRecipePower(heatDiscountMultiplier)); - } - - private double calculateMachinePower() { - return machineVoltage * (amperageOC ? machineAmperage : Math.min(machineAmperage, parallel)); - } - - private double calculateMachinePowerTier() { - return calculatePowerTier(calculateMachinePower()); - } - - private int calculateRecipeToMachineVoltageDifference() { - return (int) (Math.ceil(calculatePowerTier(machineVoltage)) - Math.ceil(calculatePowerTier(recipeEUt))); - } - - private double calculatePowerTier(double voltage) { - return 1 + Math.max(0, (Math.log(voltage) / LOG2) - 5) / 2; - } - - private long calculateFinalRecipeEUt(double heatDiscountMultiplier) { - return (long) Math.ceil(calculatedConsumption * eutDiscount * heatDiscountMultiplier * parallel); - } - - private int calculateMaxAmountOfHeatOverclocks() { - return heatOC ? (machineHeat - recipeHeat) / HEAT_PERFECT_OVERCLOCK_THRESHOLD : 0; - } - - /** - * Calculate maximum possible overclocks ignoring if we are going to go under 1 tick - */ - private int calculateAmountOfOverclocks(double machinePowerTier, double recipePowerTier) { - return (int) (machinePowerTier - recipePowerTier); - } - - private int calculateAmountOfNeededOverclocks(int maxOverclockCount, double requiredUnderOneTickMultiplier) { - int neededHeatOC = (int) Math.min( - calculateMaxAmountOfHeatOverclocks(), - Math.ceil(Math.log(requiredUnderOneTickMultiplier) / Math.log(durationDecreasePerHeatOC))); - neededHeatOC = Math.max(neededHeatOC, 0); - int neededNormalOC = (int) Math.ceil( - (Math.log(requiredUnderOneTickMultiplier) - Math.log(durationDecreasePerHeatOC) * neededHeatOC) - / Math.log(durationDecreasePerOC)); - neededNormalOC = Math.max(neededNormalOC, 0); - return Math.min(maxOverclockCount, neededHeatOC + neededNormalOC); - } - - private double calculateHeatDiscountMultiplier() { - int heatDiscounts = heatDiscount ? (machineHeat - recipeHeat) / HEAT_DISCOUNT_THRESHOLD : 0; - return Math.pow(heatDiscountExponent, heatDiscounts); - } - - // endregion - // region result getters - /** - * @return The consumption after overclock has been calculated - */ - public long getConsumption() { - if (!calculated) { - throw new IllegalStateException("Tried to get consumption before calculating"); - } - return calculatedConsumption; - } - - /** - * @return The duration of the recipe after overclock has been calculated - */ - public int getDuration() { - if (!calculated) { - throw new IllegalStateException("Tried to get duration before calculating"); - } - return calculatedDuration; - } - - /** - * @return Number of performed overclocks - */ - public int getPerformedOverclocks() { - if (!calculated) { - throw new IllegalStateException("Tried to get performed overclocks before calculating"); - } - return overclockCount; - } - - /** - * @return Whether the calculation has happened - */ - public boolean getCalculationStatus() { - return calculated; - } - - // endregion - // region misc - /** - * Returns duration as a double to show how much it is overclocking too much to determine extra parallel. This - * doesn't count as calculating - */ - public double calculateDurationUnderOneTick() { - double durationInDouble = durationUnderOneTickSupplier != null ? durationUnderOneTickSupplier.get() - : duration * speedBoost; - if (noOverclock) return durationInDouble; - double heatDiscountMultiplier = calculateHeatDiscountMultiplier(); - if (hasAtLeastOneSupplierBeenSet) { - int overclockCount = 0; - double currentEutIncrease = eutIncreasePerOCSupplier.apply(overclockCount + 1); - double currentDurationDecrease = durationDecreasePerOCSupplier.apply(overclockCount + 1); - double machinePower = calculateMachinePower(); - double recipePower = calculateRecipePower(heatDiscountMultiplier); - while (machinePower > recipePower * currentEutIncrease - && (!limitOverclocks || overclockCount < maxOverclocks)) { - recipePower *= currentEutIncrease; - durationInDouble /= currentDurationDecrease; - overclockCount++; - currentEutIncrease = eutIncreasePerOCSupplier.apply(overclockCount + 1); - currentDurationDecrease = durationDecreasePerOCSupplier.apply(overclockCount + 1); - } - } else { - int maxOverclockCount = calculateAmountOfOverclocks( - calculateMachinePowerTier(), - calculateRecipePowerTier(heatDiscountMultiplier)); - if (limitOverclocks) maxOverclockCount = Math.min(maxOverclocks, maxOverclockCount); - int heatOverclocks = Math.min(calculateMaxAmountOfHeatOverclocks(), maxOverclockCount); - durationInDouble /= Math.pow(durationDecreasePerOC, maxOverclockCount - heatOverclocks) - * Math.pow(durationDecreasePerHeatOC, heatOverclocks); - } - return durationInDouble; - } - - private Function getDefaultEutIncreasePerOCSupplier() { - return overclockCount -> eutIncreasePerOC; - } - - private Function getDefaultDurationDecreasePerOCSupplier() { - return overclockCount -> overclockCount <= calculateMaxAmountOfHeatOverclocks() ? durationDecreasePerHeatOC - : durationDecreasePerOC; - } - - // endregion -} diff --git a/src/main/java/gregtech/api/util/GT_PCBFactoryManager.java b/src/main/java/gregtech/api/util/GT_PCBFactoryManager.java deleted file mode 100644 index 990e9bd174..0000000000 --- a/src/main/java/gregtech/api/util/GT_PCBFactoryManager.java +++ /dev/null @@ -1,25 +0,0 @@ -package gregtech.api.util; - -import com.google.common.collect.HashBiMap; - -import gregtech.api.enums.Materials; - -public class GT_PCBFactoryManager { - - private static final HashBiMap mPlasticTiers = HashBiMap.create(); - public static int mTiersOfPlastics = 0; - - public static void addPlasticTier(Materials aMaterial, int aTier) { - mPlasticTiers.put(aMaterial, aTier); - mTiersOfPlastics++; - } - - public static int getPlasticTier(Materials aMaterial) { - return mPlasticTiers.get(aMaterial); - } - - public static Materials getPlasticMaterialFromTier(int aTier) { - return mPlasticTiers.inverse() - .get(aTier); - } -} diff --git a/src/main/java/gregtech/api/util/GT_ParallelHelper.java b/src/main/java/gregtech/api/util/GT_ParallelHelper.java deleted file mode 100644 index 157488a8ca..0000000000 --- a/src/main/java/gregtech/api/util/GT_ParallelHelper.java +++ /dev/null @@ -1,713 +0,0 @@ -package gregtech.api.util; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Objects; -import java.util.Random; -import java.util.function.Function; - -import javax.annotation.Nonnull; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.interfaces.tileentity.IRecipeLockable; -import gregtech.api.interfaces.tileentity.IVoidable; -import gregtech.api.logic.FluidInventoryLogic; -import gregtech.api.logic.ItemInventoryLogic; -import gregtech.api.objects.XSTR; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SingleRecipeCheck; - -@SuppressWarnings({ "unused", "UnusedReturnValue" }) -public class GT_ParallelHelper { - - private static final double MAX_BATCH_MODE_TICK_TIME = 128; - /** - * Machine used for calculation - */ - private IVoidable machine; - /** - * Machine used for single recipe locking calculation - */ - private IRecipeLockable singleRecipeMachine; - /** - * Is locked to a single recipe? - */ - private boolean isRecipeLocked; - /** - * Recipe used when trying to calculate parallels - */ - private GT_Recipe recipe; - /** - * EUt available to the multiblock (This should be the total eut available) - */ - private long availableEUt; - /** - * The current parallel possible for the multiblock - */ - private int currentParallel = 0; - /** - * The maximum possible parallel possible for the multiblock - */ - private int maxParallel = 1; - /** - * The Batch Modifier applied when batch mode is enabled. 1 does nothing. 2 doubles max possible - * parallel, but also duration - */ - private int batchModifier = 1; - /** - * The inputs of the multiblock for the current recipe check - */ - private ItemStack[] itemInputs; - /** - * The inputs of the machine for current recipe check - */ - private ItemInventoryLogic itemInputInventory; - /** - * The output item inventory of the machine - */ - private ItemInventoryLogic itemOutputInventory; - /** - * The outputs of the recipe with the applied parallel - */ - private ItemStack[] itemOutputs; - /** - * The inputs of the multiblock for the current recipe check - */ - private FluidStack[] fluidInputs; - /** - * The inputs of the machine for the current recipe check - */ - private FluidInventoryLogic fluidInputInventory; - /** - * The output fluid inventory of the machine; - */ - private FluidInventoryLogic fluidOutputInventory; - /** - * The outputs of the recipe with the applied parallel - */ - private FluidStack[] fluidOutputs; - /** - * Does the multi have void protection enabled for items - */ - private boolean protectExcessItem; - /** - * Does the multi have void protection enabled for fluids - */ - private boolean protectExcessFluid; - /** - * Should the Parallel Helper automatically consume for the multi - */ - private boolean consume; - /** - * Is batch mode turned on? - */ - private boolean batchMode; - /** - * Should the Parallel Helper automatically calculate the outputs of the recipe with current parallel? - */ - private boolean calculateOutputs; - /** - * Has the Parallel Helper been built? - */ - private boolean built; - /** - * What is the duration multiplier with batch mode enabled - */ - private double durationMultiplier; - /** - * Modifier which is applied on the recipe eut. Useful for GT++ machines - */ - private float eutModifier = 1; - /** - * Multiplier that is applied on the output chances - */ - private double chanceMultiplier = 1; - /** - * Multiplier by which the output will be multiplied - */ - private int outputMultiplier = 1; - /** - * Method for calculating max parallel from given inputs. - */ - private MaxParallelCalculator maxParallelCalculator = GT_Recipe::maxParallelCalculatedByInputs; - /** - * Method for consuming inputs after determining how many parallels it can execute. - */ - private InputConsumer inputConsumer = GT_Recipe::consumeInput; - - /** - * Calculator to use for overclocking - */ - private GT_OverclockCalculator calculator; - @Nonnull - private CheckRecipeResult result = CheckRecipeResultRegistry.NONE; - - private Function customItemOutputCalculation; - - private Function customFluidOutputCalculation; - - /** - * MuTE Mode this is a mode for changing how the GT_ParallelHelper works as Mutes don't use ItemStack and FluidStack - * arrays for inputs - */ - private boolean muteMode = false; - - public GT_ParallelHelper() {} - - /** - * Sets machine, with current configuration for void protection mode. - */ - @Nonnull - public GT_ParallelHelper setMachine(IVoidable machine) { - return setMachine(machine, machine.protectsExcessItem(), machine.protectsExcessFluid()); - } - - /** - * Sets machine, with void protection mode forcibly. - */ - @Nonnull - public GT_ParallelHelper setMachine(IVoidable machine, boolean protectExcessItem, boolean protectExcessFluid) { - this.protectExcessItem = protectExcessItem; - this.protectExcessFluid = protectExcessFluid; - this.machine = machine; - return this; - } - - /** - * Sets the recipe, which will be used for the parallel calculation - */ - @Nonnull - public GT_ParallelHelper setRecipe(@Nonnull GT_Recipe aRecipe) { - recipe = Objects.requireNonNull(aRecipe); - return this; - } - - @Nonnull - public GT_ParallelHelper setRecipeLocked(IRecipeLockable singleRecipeMachine, boolean isRecipeLocked) { - this.singleRecipeMachine = singleRecipeMachine; - this.isRecipeLocked = isRecipeLocked; - return this; - } - - /** - * Sets the items available for the recipe check - */ - @Nonnull - public GT_ParallelHelper setItemInputs(ItemStack... aItemInputs) { - this.itemInputs = aItemInputs; - return this; - } - - /** - * Sets the fluid inputs available for the recipe check - */ - @Nonnull - public GT_ParallelHelper setFluidInputs(FluidStack... aFluidInputs) { - this.fluidInputs = aFluidInputs; - return this; - } - - /** - * Sets the available eut when trying for more parallels - */ - @Nonnull - public GT_ParallelHelper setAvailableEUt(long aAvailableEUt) { - this.availableEUt = aAvailableEUt; - return this; - } - - /** - * Sets the modifier for recipe eut. 1 does nothing 0.9 is 10% less. 1.1 is 10% more - */ - @Nonnull - public GT_ParallelHelper setEUtModifier(float aEUtModifier) { - this.eutModifier = aEUtModifier; - return this; - } - - /** - * Sets the multiplier that is applied on output chances. 1 does nothing. 0.9 is 10% less. 1.1 is 10% more. - * Only useful for item outputs for sure. - */ - @Nonnull - public GT_ParallelHelper setChanceMultiplier(double chanceMultiplier) { - this.chanceMultiplier = chanceMultiplier; - return this; - } - - /** - * Sets the item/fluid output multiplier. 1 does nothing. 2 doubles the item and fluid outputs. - */ - @Nonnull - public GT_ParallelHelper setOutputMultiplier(int outputMultiplier) { - this.outputMultiplier = outputMultiplier; - return this; - } - - @Nonnull - public GT_ParallelHelper setCalculator(GT_OverclockCalculator calculator) { - this.calculator = calculator; - return this; - } - - /** - * Set if we should consume inputs or not when trying for parallels - * - * @param consume Should we consume inputs - */ - @Nonnull - public GT_ParallelHelper setConsumption(boolean consume) { - this.consume = consume; - return this; - } - - /** - * Sets the MaxParallel a multi can handle - */ - @Nonnull - public GT_ParallelHelper setMaxParallel(int maxParallel) { - this.maxParallel = maxParallel; - return this; - } - - /** - * Enables Batch mode. Can do up to an additional processed recipes of mCurrentParallel * mBatchModifier A batch - * modifier of 1 does nothing - */ - @Nonnull - public GT_ParallelHelper enableBatchMode(int batchModifier) { - this.batchMode = batchModifier > 1; - this.batchModifier = batchModifier; - return this; - } - - /** - * Sets if we should calculate outputs with the parallels we found or not - * - * @param calculateOutputs Should we calculate outputs with the helper or not - */ - @Nonnull - public GT_ParallelHelper setOutputCalculation(boolean calculateOutputs) { - this.calculateOutputs = calculateOutputs; - return this; - } - - /** - * Set a custom way to calculate item outputs. You are given the amount of parallels and must return an ItemStack - * array - */ - @Nonnull - public GT_ParallelHelper setCustomItemOutputCalculation(Function custom) { - customItemOutputCalculation = custom; - return this; - } - - /** - * Set a custom way to calculate item outputs. You are given the amount of parallels and must return a FluidStack - * array - */ - @Nonnull - public GT_ParallelHelper setCustomFluidOutputCalculation(Function custom) { - customFluidOutputCalculation = custom; - return this; - } - - @Nonnull - public GT_ParallelHelper setMuTEMode(boolean muteMode) { - this.muteMode = muteMode; - return this; - } - - @Nonnull - public GT_ParallelHelper setItemInputInventory(ItemInventoryLogic itemInputInventory) { - this.itemInputInventory = itemInputInventory; - return this; - } - - @Nonnull - public GT_ParallelHelper setFluidInputInventory(FluidInventoryLogic fluidInputInventory) { - this.fluidInputInventory = fluidInputInventory; - return this; - } - - /** - * Sets method for calculating max parallel from given inputs. - */ - public GT_ParallelHelper setMaxParallelCalculator(MaxParallelCalculator maxParallelCalculator) { - this.maxParallelCalculator = maxParallelCalculator; - return this; - } - - /** - * Sets method for consuming inputs after determining how many parallels it can execute. - */ - public GT_ParallelHelper setInputConsumer(InputConsumer inputConsumer) { - this.inputConsumer = inputConsumer; - return this; - } - - @Nonnull - public GT_ParallelHelper setItemOutputInventory(ItemInventoryLogic itemOutputInventory) { - this.itemOutputInventory = itemOutputInventory; - return this; - } - - @Nonnull - public GT_ParallelHelper setFluidOutputInventory(FluidInventoryLogic fluidOutputInventory) { - this.fluidOutputInventory = fluidOutputInventory; - return this; - } - - /** - * Finishes the GT_ParallelHelper. Anything changed after this will not effect anything - */ - @Nonnull - public GT_ParallelHelper build() { - if (built) { - throw new IllegalStateException("Tried to build twice"); - } - if (recipe == null) { - throw new IllegalStateException("Recipe is not set"); - } - built = true; - determineParallel(); - return this; - } - - /** - * @return The current parallels possible by the multiblock - */ - public int getCurrentParallel() { - if (!built) { - throw new IllegalStateException("Tried to get parallels before building"); - } - return currentParallel; - } - - /** - * @return The duration multiplier if batch mode was enabled for the multiblock - */ - public double getDurationMultiplierDouble() { - if (!built) { - throw new IllegalStateException("Tried to get duration multiplier before building"); - } - if (batchMode && durationMultiplier > 0) { - return durationMultiplier; - } - return 1; - } - - /** - * @return The ItemOutputs from the recipe - */ - @Nonnull - public ItemStack[] getItemOutputs() { - if (!built || !calculateOutputs) { - throw new IllegalStateException( - "Tried to get item outputs before building or without enabling calculation of outputs"); - } - return itemOutputs; - } - - /** - * @return The FluidOutputs from the recipe - */ - @Nonnull - public FluidStack[] getFluidOutputs() { - if (!built || !calculateOutputs) { - throw new IllegalStateException( - "Tried to get fluid outputs before building or without enabling calculation of outputs"); - } - return fluidOutputs; - } - - /** - * @return The result of why a recipe could've failed or succeeded - */ - @Nonnull - public CheckRecipeResult getResult() { - if (!built) { - throw new IllegalStateException("Tried to get recipe result before building"); - } - return result; - } - - /** - * Called by build(). Determines the parallels and everything else that needs to be done at build time - */ - protected void determineParallel() { - if (maxParallel <= 0) { - return; - } - if (itemInputs == null) { - itemInputs = new ItemStack[0]; - } - if (fluidInputs == null) { - fluidInputs = new FluidStack[0]; - } - - if (!consume) { - copyInputs(); - } - - if (calculator == null) { - calculator = new GT_OverclockCalculator().setEUt(availableEUt) - .setRecipeEUt(recipe.mEUt) - .setDuration(recipe.mDuration) - .setEUtDiscount(eutModifier); - } - - final int tRecipeEUt = (int) Math.ceil(recipe.mEUt * eutModifier); - if (availableEUt < tRecipeEUt) { - result = CheckRecipeResultRegistry.insufficientPower(tRecipeEUt); - return; - } - - // Save the original max parallel before calculating our overclocking under 1 tick - int originalMaxParallel = maxParallel; - calculator.setParallel(originalMaxParallel); - double tickTimeAfterOC = calculator.calculateDurationUnderOneTick(); - if (tickTimeAfterOC < 1) { - maxParallel = GT_Utility.safeInt((long) (maxParallel / tickTimeAfterOC), 0); - } - - int maxParallelBeforeBatchMode = maxParallel; - if (batchMode) { - maxParallel = GT_Utility.safeInt((long) maxParallel * batchModifier, 0); - } - - final ItemStack[] truncatedItemOutputs = recipe.mOutputs != null - ? Arrays.copyOfRange(recipe.mOutputs, 0, Math.min(machine.getItemOutputLimit(), recipe.mOutputs.length)) - : new ItemStack[0]; - final FluidStack[] truncatedFluidOutputs = recipe.mFluidOutputs != null ? Arrays - .copyOfRange(recipe.mFluidOutputs, 0, Math.min(machine.getFluidOutputLimit(), recipe.mFluidOutputs.length)) - : new FluidStack[0]; - - SingleRecipeCheck recipeCheck = null; - SingleRecipeCheck.Builder tSingleRecipeCheckBuilder = null; - if (isRecipeLocked && singleRecipeMachine != null) { - recipeCheck = singleRecipeMachine.getSingleRecipeCheck(); - if (recipeCheck == null) { - // Machine is configured to lock to a single recipe, but haven't built the recipe checker yet. - // Build the checker on next successful recipe. - RecipeMap recipeMap = singleRecipeMachine.getRecipeMap(); - if (recipeMap != null) { - tSingleRecipeCheckBuilder = SingleRecipeCheck.builder(recipeMap) - .setBefore(itemInputs, fluidInputs); - } - } - } - - // Let's look at how many parallels we can get with void protection - if (protectExcessItem || protectExcessFluid) { - if (machine == null && !muteMode) { - throw new IllegalStateException("Tried to calculate void protection, but machine is not set"); - } - VoidProtectionHelper voidProtectionHelper = new VoidProtectionHelper(); - voidProtectionHelper.setMachine(machine) - .setItemOutputs(truncatedItemOutputs) - .setFluidOutputs(truncatedFluidOutputs) - .setChangeGetter(recipe::getOutputChance) - .setOutputMultiplier(outputMultiplier) - .setChanceMultiplier(chanceMultiplier) - .setMaxParallel(maxParallel) - .setItemOutputInventory(itemOutputInventory) - .setFluidOutputInventory(fluidOutputInventory) - .setMuTEMode(muteMode) - .build(); - maxParallel = Math.min(voidProtectionHelper.getMaxParallel(), maxParallel); - if (voidProtectionHelper.isItemFull()) { - result = CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; - return; - } - if (voidProtectionHelper.isFluidFull()) { - result = CheckRecipeResultRegistry.FLUID_OUTPUT_FULL; - return; - } - } - - maxParallelBeforeBatchMode = Math.min(maxParallel, maxParallelBeforeBatchMode); - - // determine normal parallel - int actualMaxParallel = tRecipeEUt > 0 ? (int) Math.min(maxParallelBeforeBatchMode, availableEUt / tRecipeEUt) - : maxParallelBeforeBatchMode; - if (recipeCheck != null) { - currentParallel = recipeCheck.checkRecipeInputs(true, actualMaxParallel, itemInputs, fluidInputs); - } else { - currentParallel = (int) maxParallelCalculator.calculate(recipe, actualMaxParallel, fluidInputs, itemInputs); - if (currentParallel > 0) { - if (tSingleRecipeCheckBuilder != null) { - // If recipe checker is not built yet, build and set it - inputConsumer.consume(recipe, 1, fluidInputs, itemInputs); - SingleRecipeCheck builtCheck = tSingleRecipeCheckBuilder.setAfter(itemInputs, fluidInputs) - .setRecipe(recipe) - .build(); - singleRecipeMachine.setSingleRecipeCheck(builtCheck); - inputConsumer.consume(recipe, currentParallel - 1, fluidInputs, itemInputs); - } else { - inputConsumer.consume(recipe, currentParallel, fluidInputs, itemInputs); - } - } - } - - if (currentParallel <= 0) { - result = CheckRecipeResultRegistry.INTERNAL_ERROR; - return; - } - - calculator.setCurrentParallel(currentParallel) - .calculate(); - // If Batch Mode is enabled determine how many extra parallels we can get - if (batchMode && currentParallel > 0 && calculator.getDuration() < MAX_BATCH_MODE_TICK_TIME) { - int tExtraParallels; - double batchMultiplierMax = MAX_BATCH_MODE_TICK_TIME / calculator.getDuration(); - final int maxExtraParallels = (int) Math.floor( - Math.min( - currentParallel * Math.min(batchMultiplierMax - 1, batchModifier - 1), - maxParallel - currentParallel)); - if (recipeCheck != null) { - tExtraParallels = recipeCheck.checkRecipeInputs(true, maxExtraParallels, itemInputs, fluidInputs); - } else { - tExtraParallels = (int) maxParallelCalculator - .calculate(recipe, maxExtraParallels, fluidInputs, itemInputs); - inputConsumer.consume(recipe, tExtraParallels, fluidInputs, itemInputs); - } - durationMultiplier = 1.0f + (float) tExtraParallels / currentParallel; - currentParallel += tExtraParallels; - } - - // If we want to calculate outputs we do it here - if (calculateOutputs && currentParallel > 0) { - calculateItemOutputs(truncatedItemOutputs); - calculateFluidOutputs(truncatedFluidOutputs); - } - result = CheckRecipeResultRegistry.SUCCESSFUL; - } - - protected void copyInputs() { - ItemStack[] itemInputsToUse; - FluidStack[] fluidInputsToUse; - itemInputsToUse = new ItemStack[itemInputs.length]; - for (int i = 0; i < itemInputs.length; i++) { - itemInputsToUse[i] = itemInputs[i].copy(); - } - fluidInputsToUse = new FluidStack[fluidInputs.length]; - for (int i = 0; i < fluidInputs.length; i++) { - fluidInputsToUse[i] = fluidInputs[i].copy(); - } - itemInputs = itemInputsToUse; - fluidInputs = fluidInputsToUse; - } - - private void calculateItemOutputs(ItemStack[] truncatedItemOutputs) { - if (customItemOutputCalculation != null) { - itemOutputs = customItemOutputCalculation.apply(currentParallel); - return; - } - if (truncatedItemOutputs.length == 0) return; - ArrayList itemOutputsList = new ArrayList<>(); - for (int i = 0; i < truncatedItemOutputs.length; i++) { - if (recipe.getOutput(i) == null) continue; - ItemStack origin = recipe.getOutput(i) - .copy(); - final long itemStackSize = origin.stackSize; - double chancedOutputMultiplier = calculateChancedOutputMultiplier( - (int) (recipe.getOutputChance(i) * chanceMultiplier), - currentParallel); - long items = (long) Math.ceil(itemStackSize * chancedOutputMultiplier * outputMultiplier); - addItemsLong(itemOutputsList, origin, items); - } - itemOutputs = itemOutputsList.toArray(new ItemStack[0]); - } - - private void calculateFluidOutputs(FluidStack[] truncatedFluidOutputs) { - if (customFluidOutputCalculation != null) { - fluidOutputs = customFluidOutputCalculation.apply(currentParallel); - return; - } - if (truncatedFluidOutputs.length == 0) return; - ArrayList fluidOutputsList = new ArrayList<>(); - for (int i = 0; i < truncatedFluidOutputs.length; i++) { - if (recipe.getFluidOutput(i) == null) continue; - FluidStack origin = recipe.getFluidOutput(i) - .copy(); - long fluids = (long) this.outputMultiplier * origin.amount * currentParallel; - - addFluidsLong(fluidOutputsList, origin, fluids); - } - fluidOutputs = fluidOutputsList.toArray(new FluidStack[0]); - } - - private static final Random rand = new Random(); - - public static double calculateChancedOutputMultiplier(int chanceInt, int parallel) { - // Multiply the integer part of the chance directly with parallel - double multiplier = Math.floorDiv(chanceInt, 10000) * parallel; - int transformedChanceInt = chanceInt % 10000; - if (transformedChanceInt == 0) return multiplier; - // Calculation of the Decimal Part of chance - double chance = transformedChanceInt / 10000.0; - double mean = parallel * chance; - double stdDev = Math.sqrt(parallel * chance * (1 - chance)); - // Check if everything within 3 standard deviations of mean is within the range - // of possible values (0 ~ currentParallel) - boolean isSuitableForFittingWithNormalDistribution = mean - 3 * stdDev >= 0 && mean + 3 * stdDev <= parallel; - if (isSuitableForFittingWithNormalDistribution) { - // Use Normal Distribution to fit Binomial Distribution - double tMultiplier = stdDev * rand.nextGaussian() + mean; - multiplier += Math.max(Math.min(tMultiplier, parallel), 0); - } else { - // Do Binomial Distribution by loop - for (int roll = 0; roll < parallel; roll++) { - if (transformedChanceInt > XSTR.XSTR_INSTANCE.nextInt(10000)) { - multiplier += 1; - } - } - } - return multiplier; - } - - public static void addItemsLong(ArrayList itemList, ItemStack origin, long amount) { - if (amount > 0) { - while (amount > Integer.MAX_VALUE) { - ItemStack item = origin.copy(); - item.stackSize = Integer.MAX_VALUE; - itemList.add(item); - amount -= Integer.MAX_VALUE; - } - ItemStack item = origin.copy(); - item.stackSize = (int) amount; - itemList.add(item); - } - } - - public static void addFluidsLong(ArrayList fluidList, FluidStack origin, long amount) { - if (amount > 0) { - while (amount > Integer.MAX_VALUE) { - FluidStack fluid = origin.copy(); - fluid.amount = Integer.MAX_VALUE; - fluidList.add(fluid); - amount -= Integer.MAX_VALUE; - } - FluidStack fluid = origin.copy(); - fluid.amount = (int) amount; - fluidList.add(fluid); - } - } - - @FunctionalInterface - public interface MaxParallelCalculator { - - double calculate(GT_Recipe recipe, int maxParallel, FluidStack[] fluids, ItemStack[] items); - } - - @FunctionalInterface - public interface InputConsumer { - - void consume(GT_Recipe recipe, int amountMultiplier, FluidStack[] aFluidInputs, ItemStack[] aInputs); - } -} diff --git a/src/main/java/gregtech/api/util/GT_PlayedSound.java b/src/main/java/gregtech/api/util/GT_PlayedSound.java deleted file mode 100644 index 8604d9b81f..0000000000 --- a/src/main/java/gregtech/api/util/GT_PlayedSound.java +++ /dev/null @@ -1,31 +0,0 @@ -package gregtech.api.util; - -import net.minecraft.util.ResourceLocation; - -public class GT_PlayedSound { - - public final String mSoundName; - public final int mX, mY, mZ; - - public GT_PlayedSound(ResourceLocation aSoundResourceLocation, double aX, double aY, double aZ) { - mSoundName = aSoundResourceLocation.toString(); - mX = (int) aX; - mY = (int) aY; - mZ = (int) aZ; - } - - @Override - public boolean equals(Object aObject) { - if (aObject instanceof GT_PlayedSound) { - return ((GT_PlayedSound) aObject).mX == mX && ((GT_PlayedSound) aObject).mY == mY - && ((GT_PlayedSound) aObject).mZ == mZ - && ((GT_PlayedSound) aObject).mSoundName.equals(mSoundName); - } - return false; - } - - @Override - public int hashCode() { - return mX + mY + mZ + mSoundName.hashCode(); - } -} diff --git a/src/main/java/gregtech/api/util/GT_ProcessingArray_Manager.java b/src/main/java/gregtech/api/util/GT_ProcessingArray_Manager.java deleted file mode 100644 index ead9393d0e..0000000000 --- a/src/main/java/gregtech/api/util/GT_ProcessingArray_Manager.java +++ /dev/null @@ -1,51 +0,0 @@ -package gregtech.api.util; - -import java.util.HashMap; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.SoundResource; -import gregtech.api.recipe.RecipeMap; - -@Deprecated -public class GT_ProcessingArray_Manager { - - private static final HashMap> mRecipeSaves = new HashMap<>(); - private static final HashMap machineSounds = new HashMap<>(); - - // Adds recipe Maps to the PA using the machines unlocalized name. - // Example: basicmachine.electrolyzer, with its recipe map will add the electrolyzer's recipe map to the PA - public static void addRecipeMapToPA(String aMachineName, RecipeMap aMap) { - if (aMachineName != null) { - mRecipeSaves.put(aMachineName, aMap); - } - } - - // Allows the PA to extract the recipe map for the machine inside it. - public static RecipeMap giveRecipeMap(String aMachineName) { - if (aMachineName != null) { - return mRecipeSaves.get(aMachineName); - } - return null; - } - - public static void addSoundResourceToPA(String machineName, SoundResource soundResource) { - if (machineName != null) { - machineSounds.put(machineName, soundResource); - } - } - - public static SoundResource getSoundResource(String machineName) { - if (machineName != null) { - return machineSounds.get(machineName); - } - return null; - } - - public static String getMachineName(ItemStack stack) { - int length = stack.getUnlocalizedName() - .length(); - return stack.getUnlocalizedName() - .substring(17, length - 8); // trim "gt.blockmachines." and ".tier.xx" - } -} diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java deleted file mode 100644 index c0812dcaef..0000000000 --- a/src/main/java/gregtech/api/util/GT_Recipe.java +++ /dev/null @@ -1,1366 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.GT_Values.D2; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Objects; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.ModContainer; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.logic.FluidInventoryLogic; -import gregtech.api.logic.ItemInventoryLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeCategory; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.RecipeMetadataKey; -import gregtech.api.recipe.metadata.EmptyRecipeMetadataStorage; -import gregtech.api.recipe.metadata.IRecipeMetadataStorage; -import gregtech.api.util.extensions.ArrayExt; -import gregtech.api.util.item.ItemHolder; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Input_ME; -import ic2.core.Ic2Items; -import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; -import it.unimi.dsi.fastutil.objects.Reference2LongArrayMap; -import it.unimi.dsi.fastutil.objects.Reference2LongMap; -import it.unimi.dsi.fastutil.objects.Reference2LongOpenHashMap; - -public class GT_Recipe implements Comparable { - - private static ItemStack dataStick; - private static ItemStack dataOrb; - private static ItemStack ic2FluidCell; - - public static void setItemStacks() { - ic2FluidCell = Ic2Items.FluidCell.copy(); - dataStick = ItemList.Tool_DataStick.get(1L); - dataOrb = ItemList.Tool_DataOrb.get(1L); - } - - /** - * If you want to change the Output, feel free to modify or even replace the whole ItemStack Array, for Inputs, - * please add a new Recipe, because of the HashMaps. - */ - public ItemStack[] mInputs, mOutputs; - /** - * If you want to change the Output, feel free to modify or even replace the whole ItemStack Array, for Inputs, - * please add a new Recipe, because of the HashMaps. - */ - public FluidStack[] mFluidInputs, mFluidOutputs; - /** - * If you changed the amount of Array-Items inside the Output Array then the length of this Array must be larger or - * equal to the Output Array. A chance of 10000 equals 100% - */ - public int[] mChances; - /** - * An Item that needs to be inside the Special Slot, like for example the Copy Slot inside the Printer. This is only - * useful for Fake Recipes in NEI, since findRecipe() and containsInput() don't give a shit about this Field. Lists - * are also possible. - */ - public Object mSpecialItems; - - public int mDuration, mEUt, mSpecialValue; - /** - * Use this to just disable a specific Recipe, but the Configuration enables that already for every single Recipe. - */ - public boolean mEnabled = true; - /** - * If this Recipe is hidden from NEI - */ - public boolean mHidden = false; - /** - * If this Recipe is Fake and therefore doesn't get found by the findRecipe Function (It is still in the HashMaps, - * so that containsInput does return T on those fake Inputs) - */ - public boolean mFakeRecipe = false; - /** - * If this Recipe can be stored inside a Machine in order to make Recipe searching more Efficient by trying the - * previously used Recipe first. In case you have a Recipe Map overriding things and returning one time use Recipes, - * you have to set this to F. - */ - public boolean mCanBeBuffered = true; - /** - * If this Recipe needs the Output Slots to be completely empty. Needed in case you have randomised Outputs - */ - public boolean mNeedsEmptyOutput = false; - /** - * If this is set to true, NBT equality is required for recipe check. - */ - public boolean isNBTSensitive = false; - /** - * Used for describing recipes that do not fit the default recipe pattern (for example Large Boiler Fuels) - */ - private String[] neiDesc = null; - /** - * Holds a set of metadata for this recipe. - */ - @Nonnull - private final IRecipeMetadataStorage metadataStorage; - /** - * Category this recipe belongs to. Recipes belonging to recipemap are forced to have non-null category when added, - * otherwise it can be null. - */ - private RecipeCategory recipeCategory; - /** - * Stores which mod added this recipe - */ - public List owners = new ArrayList<>(); - /** - * Stores stack traces where this recipe was added - */ - // BW wants to overwrite it, so no final - public List> stackTraces = new ArrayList<>(); - - /** Used for simple cache validation */ - private ItemStack[] inputsAtCacheTime = null; - /** Unified and type-merged stacks of mInputs, each item is guaranteed to be unique */ - private RecipeItemInput[] mergedInputCache = null; - private static final RecipeItemInput[] EMPTY_INPUT_CACHE = new RecipeItemInput[0]; - - /** A single recipe input, used for an internal cache to speed up recipe matching */ - public static final class RecipeItemInput { - - /** Item count is ignored on this stack, do not mutate it either */ - public final ItemStack unifiedStack; - /** Number of input items required */ - public long inputAmount; - /** True if the input is NBT-sensitive */ - public final boolean usesNbtMatching; - - public RecipeItemInput(ItemStack stack, boolean recipeIsNBTSensitive) { - Objects.requireNonNull(stack); - this.inputAmount = stack.stackSize; - final boolean stackNeedsNBT = GT_Recipe.shouldCheckNBT(stack); - this.usesNbtMatching = recipeIsNBTSensitive | stackNeedsNBT; - if (stackNeedsNBT) { - this.unifiedStack = stack; - } else { - this.unifiedStack = GT_OreDictUnificator.get_nocopy(true, stack); - if (!this.usesNbtMatching) { - this.unifiedStack.setTagCompound(null); - } - } - } - - /** - * @return True if the passed in stack is of the same item type as this input (respecting - * {@link RecipeItemInput#usesNbtMatching}). - */ - public boolean matchesType(final ItemStack other) { - return GT_Utility.areStacksEqual(this.unifiedStack, other, !usesNbtMatching); - } - - /** - * @return True if the given input+oredict data for that input can be used as a valid recipe ingredient. - */ - public boolean matchesRecipe(final ItemData oredictOther, final ItemStack other) { - if (usesNbtMatching) { - return GT_Utility.areStacksEqual(this.unifiedStack, other, false); - } else { - return GT_OreDictUnificator.isInputStackEqual(other, oredictOther, unifiedStack); - } - } - } - - private GT_Recipe(GT_Recipe aRecipe, boolean shallow) { - mInputs = shallow ? aRecipe.mInputs : GT_Utility.copyItemArray(aRecipe.mInputs); - mOutputs = shallow ? aRecipe.mOutputs : GT_Utility.copyItemArray(aRecipe.mOutputs); - mSpecialItems = aRecipe.mSpecialItems; - mChances = aRecipe.mChances; - mFluidInputs = shallow ? aRecipe.mFluidInputs : GT_Utility.copyFluidArray(aRecipe.mFluidInputs); - mFluidOutputs = shallow ? aRecipe.mFluidOutputs : GT_Utility.copyFluidArray(aRecipe.mFluidOutputs); - mDuration = aRecipe.mDuration; - mSpecialValue = aRecipe.mSpecialValue; - mEUt = aRecipe.mEUt; - mNeedsEmptyOutput = aRecipe.mNeedsEmptyOutput; - isNBTSensitive = aRecipe.isNBTSensitive; - mCanBeBuffered = aRecipe.mCanBeBuffered; - mFakeRecipe = aRecipe.mFakeRecipe; - mEnabled = aRecipe.mEnabled; - mHidden = aRecipe.mHidden; - metadataStorage = EmptyRecipeMetadataStorage.INSTANCE; - owners = new ArrayList<>(aRecipe.owners); - reloadOwner(); - } - - /** - * Only for {@link GT_RecipeBuilder}. - */ - GT_Recipe(ItemStack[] mInputs, ItemStack[] mOutputs, FluidStack[] mFluidInputs, FluidStack[] mFluidOutputs, - int[] mChances, Object mSpecialItems, int mDuration, int mEUt, int mSpecialValue, boolean mEnabled, - boolean mHidden, boolean mFakeRecipe, boolean mCanBeBuffered, boolean mNeedsEmptyOutput, boolean nbtSensitive, - String[] neiDesc, @Nullable IRecipeMetadataStorage metadataStorage, RecipeCategory recipeCategory) { - this.mInputs = mInputs; - this.mOutputs = mOutputs; - this.mFluidInputs = mFluidInputs; - this.mFluidOutputs = mFluidOutputs; - this.mChances = mChances; - this.mSpecialItems = mSpecialItems; - this.mDuration = mDuration; - this.mEUt = mEUt; - this.mSpecialValue = mSpecialValue; - this.mEnabled = mEnabled; - this.mHidden = mHidden; - this.mFakeRecipe = mFakeRecipe; - this.mCanBeBuffered = mCanBeBuffered; - this.mNeedsEmptyOutput = mNeedsEmptyOutput; - this.isNBTSensitive = nbtSensitive; - this.neiDesc = neiDesc; - this.metadataStorage = metadataStorage == null ? EmptyRecipeMetadataStorage.INSTANCE : metadataStorage.copy(); - this.recipeCategory = recipeCategory; - - reloadOwner(); - } - - public GT_Recipe(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, int[] aChances, - FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) { - if (aInputs == null) aInputs = new ItemStack[0]; - if (aOutputs == null) aOutputs = new ItemStack[0]; - if (aFluidInputs == null) aFluidInputs = new FluidStack[0]; - if (aFluidOutputs == null) aFluidOutputs = new FluidStack[0]; - if (aChances == null) aChances = new int[aOutputs.length]; - if (aChances.length < aOutputs.length) aChances = Arrays.copyOf(aChances, aOutputs.length); - - aInputs = ArrayExt.withoutTrailingNulls(aInputs, ItemStack[]::new); - aOutputs = ArrayExt.withoutTrailingNulls(aOutputs, ItemStack[]::new); - aFluidInputs = ArrayExt.withoutNulls(aFluidInputs, FluidStack[]::new); - aFluidOutputs = ArrayExt.withoutNulls(aFluidOutputs, FluidStack[]::new); - - GT_OreDictUnificator.setStackArray(true, aInputs); - GT_OreDictUnificator.setStackArray(true, aOutputs); - - for (ItemStack tStack : aOutputs) GT_Utility.updateItemStack(tStack); - - for (int i = 0; i < aChances.length; i++) if (aChances[i] <= 0) aChances[i] = 10000; - for (int i = 0; i < aFluidInputs.length; i++) aFluidInputs[i] = aFluidInputs[i].copy(); - for (int i = 0; i < aFluidOutputs.length; i++) aFluidOutputs[i] = aFluidOutputs[i].copy(); - - if (aOptimize && aDuration >= 32) { - ArrayList tList = new ArrayList<>(); - tList.addAll(Arrays.asList(aInputs)); - tList.addAll(Arrays.asList(aOutputs)); - for (int i = 0; i < tList.size(); i++) if (tList.get(i) == null) tList.remove(i--); - - for (byte i = (byte) Math.min(64, aDuration / 16); i > 1; i--) if (aDuration / i >= 16) { - boolean temp = true; - for (ItemStack stack : tList) if (stack.stackSize % i != 0) { - temp = false; - break; - } - if (temp) for (FluidStack aFluidInput : aFluidInputs) if (aFluidInput.amount % i != 0) { - temp = false; - break; - } - if (temp) for (FluidStack aFluidOutput : aFluidOutputs) if (aFluidOutput.amount % i != 0) { - temp = false; - break; - } - if (temp) { - for (ItemStack itemStack : tList) itemStack.stackSize /= i; - for (FluidStack aFluidInput : aFluidInputs) aFluidInput.amount /= i; - for (FluidStack aFluidOutput : aFluidOutputs) aFluidOutput.amount /= i; - aDuration /= i; - } - } - } - - mInputs = aInputs; - mOutputs = aOutputs; - mSpecialItems = aSpecialItems; - mChances = aChances; - mFluidInputs = aFluidInputs; - mFluidOutputs = aFluidOutputs; - mDuration = aDuration; - mSpecialValue = aSpecialValue; - mEUt = aEUt; - metadataStorage = EmptyRecipeMetadataStorage.INSTANCE; - // checkCellBalance(); - reloadOwner(); - } - - // aSpecialValue = EU per Liter! If there is no Liquid for this Object, then it gets multiplied with 1000! - public GT_Recipe(ItemStack aInput1, ItemStack aOutput1, ItemStack aOutput2, ItemStack aOutput3, ItemStack aOutput4, - int aSpecialValue, int aType) { - this( - true, - new ItemStack[] { aInput1 }, - new ItemStack[] { aOutput1, aOutput2, aOutput3, aOutput4 }, - null, - null, - null, - null, - 0, - 0, - Math.max(1, aSpecialValue)); - - if (mInputs.length > 0 && aSpecialValue > 0) { - switch (aType) { - // Diesel Generator - case 0 -> { - RecipeMaps.dieselFuels.addRecipe(this); - RecipeMaps.largeBoilerFakeFuels.getBackend() - .addDieselRecipe(this); - } - // Gas Turbine - case 1 -> RecipeMaps.gasTurbineFuels.addRecipe(this); - - // Thermal Generator - case 2 -> RecipeMaps.hotFuels.addRecipe(this); - - // Plasma Generator - case 4 -> RecipeMaps.plasmaFuels.addRecipe(this); - - // Magic Generator - case 5 -> RecipeMaps.magicFuels.addRecipe(this); - - // Fluid Generator. Usually 3. Every wrong Type ends up in the Semifluid Generator - default -> { - RecipeMaps.denseLiquidFuels.addRecipe(this); - RecipeMaps.largeBoilerFakeFuels.getBackend() - .addDenseLiquidRecipe(this); - } - } - } - } - - // Dummy GT_Recipe maker... - public GT_Recipe(ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, int[] aChances, - FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int aSpecialValue) { - this( - true, - aInputs, - aOutputs, - aSpecialItems, - aChances, - aFluidInputs, - aFluidOutputs, - aDuration, - aEUt, - aSpecialValue); - } - - /** - * Re-unificates all the items present in recipes. - */ - public static void reInit() { - GT_Log.out.println("GT_Mod: Re-Unificating Recipes."); - for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { - map.getBackend() - .reInit(); - } - } - - public ItemStack getRepresentativeInput(int aIndex) { - if (aIndex < 0 || aIndex >= mInputs.length) return null; - return GT_Utility.copyOrNull(mInputs[aIndex]); - } - - public ItemStack getOutput(int aIndex) { - if (aIndex < 0 || aIndex >= mOutputs.length) return null; - return GT_Utility.copyOrNull(mOutputs[aIndex]); - } - - /** - * Dictates the ItemStacks displayed in the output slots of any NEI page handled by the default GT NEI handler. - * Override to make shown items differ from a GT_Recipe's item output array - * - * @see gregtech.nei.GT_NEI_DefaultHandler - * @param i Slot index - * @return ItemStack to be displayed in the slot - */ - public ItemStack getRepresentativeOutput(int i) { - return getOutput(i); - } - - public int getOutputChance(int aIndex) { - if (mChances == null) return 10000; - if (aIndex < 0 || aIndex >= mChances.length) return 10000; - return mChances[aIndex]; - } - - public FluidStack getRepresentativeFluidInput(int aIndex) { - if (aIndex < 0 || aIndex >= mFluidInputs.length || mFluidInputs[aIndex] == null) return null; - return mFluidInputs[aIndex].copy(); - } - - public FluidStack getFluidOutput(int aIndex) { - if (aIndex < 0 || aIndex >= mFluidOutputs.length || mFluidOutputs[aIndex] == null) return null; - return mFluidOutputs[aIndex].copy(); - } - - public void checkCellBalance() { - if (!D2 || mInputs.length < 1) return; - - int tInputAmount = GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(mInputs); - int tOutputAmount = GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(mOutputs); - - if (tInputAmount < tOutputAmount) { - if (!Materials.Tin.contains(mInputs)) { - GT_Log.err.println("You get more Cells, than you put in? There must be something wrong."); - new Exception().printStackTrace(GT_Log.err); - } - } else if (tInputAmount > tOutputAmount) { - if (!Materials.Tin.contains(mOutputs)) { - GT_Log.err.println("You get less Cells, than you put in? GT Machines usually don't destroy Cells."); - new Exception().printStackTrace(GT_Log.err); - } - } - } - - public GT_Recipe copy() { - return new GT_Recipe(this, false); - } - - public GT_Recipe copyShallow() { - return new GT_Recipe(this, true); - } - - public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess, FluidStack[] aFluidInputs, - ItemStack... aInputs) { - return isRecipeInputEqual(aDecreaseStacksizeBySuccess, false, 1, aFluidInputs, aInputs); - } - - // For non-multiplied recipe amount values - public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess, boolean aDontCheckStackSizes, - FluidStack[] aFluidInputs, ItemStack... aInputs) { - return isRecipeInputEqual(aDecreaseStacksizeBySuccess, aDontCheckStackSizes, 1, aFluidInputs, aInputs); - } - - /** - * Okay, did some code archeology to figure out what's going on here. - * - *

- * This variable was added in this - * commit, in order to fix the issues mentioned in the PR. - * - *

- * It looks like it controls checking NBT. At this point, since we are still using universal fluid cells which store - * their fluids in NBT, it probably will not be safe to disable the NBT checks in the near future. Data sticks may - * be another case. Anyway, we probably can't get rid of this without some significant changes to clean up recipe - * inputs. - */ - public static boolean GTppRecipeHelper; - - /** - * @return Computes a (cached) array of all input items, combined by type into stacks. Do not mutate. - */ - private @NotNull RecipeItemInput @NotNull [] getCachedCombinedItemInputs() { - if (mergedInputCache != null) { - if (mInputs != inputsAtCacheTime) { - throw new IllegalStateException( - "Inputs to this recipe have been modified since first recipe match: " + this); - } - return mergedInputCache; - } - - synchronized (this) { - // In case another thread initialized it while this synchronized block was locked: - if (mergedInputCache != null) { - if (mInputs != inputsAtCacheTime) { - throw new IllegalStateException( - "Inputs to this recipe have been modified since first recipe match: " + this); - } - return mergedInputCache; - } - - final ItemStack[] inputs = mInputs; - inputsAtCacheTime = inputs; - if (inputs == null || inputs.length == 0) { - mergedInputCache = EMPTY_INPUT_CACHE; - return mergedInputCache; - } - final ObjectArrayList<@NotNull RecipeItemInput> newCache = ObjectArrayList - .wrap(new RecipeItemInput[inputs.length], 0); - for (final ItemStack itemStack : inputs) { - if (itemStack == null) continue; - final RecipeItemInput existingInput = newCache.stream() - .filter(existing -> existing.matchesType(itemStack)) - .findAny() - .orElse(null); - if (existingInput == null) { - newCache.add(new RecipeItemInput(itemStack, isNBTSensitive)); - } else { - existingInput.inputAmount = Math.addExact(existingInput.inputAmount, itemStack.stackSize); - } - } - final RecipeItemInput[] frozenCache = newCache.toArray(new RecipeItemInput[0]); - if (GregTech_API.sFullLoadFinished) { - mergedInputCache = frozenCache; - } - return frozenCache; - } - } - - /** - * WARNING: Do not call this method with both {@code aDecreaseStacksizeBySuccess} and {@code aDontCheckStackSizes} - * set to {@code true}! You'll get weird behavior. - */ - public boolean isRecipeInputEqual(boolean aDecreaseStacksizeBySuccess, boolean aDontCheckStackSizes, - int amountMultiplier, FluidStack[] aFluidInputs, ItemStack... aInputs) { - double maxParallel = maxParallelCalculatedByInputs(amountMultiplier, aFluidInputs, aInputs); - if (aDontCheckStackSizes) { - return maxParallel > 0; - } else if (maxParallel >= amountMultiplier) { - if (aDecreaseStacksizeBySuccess) { - consumeInput(amountMultiplier, aFluidInputs, aInputs); - } - return true; - } - return false; - } - - /** - * WARNING: Ensure that item inputs and fluid inputs are enough to be consumed with - * {@link #maxParallelCalculatedByInputs} before calling this method! - */ - public void consumeInput(int amountMultiplier, FluidStack[] aFluidInputs, ItemStack... aInputs) { - if (amountMultiplier <= 0) return; - - if (aFluidInputs != null) { - for (FluidStack recipeFluidCost : mFluidInputs) { - if (recipeFluidCost != null) { - long remainingCost = (long) recipeFluidCost.amount * amountMultiplier; - - for (FluidStack providedFluid : aFluidInputs) { - if (providedFluid != null && providedFluid.isFluidEqual(recipeFluidCost)) { - if (providedFluid.amount >= remainingCost) { - providedFluid.amount -= remainingCost; - break; - } else { - remainingCost -= providedFluid.amount; - providedFluid.amount = 0; - } - } - } - } - } - } - - if (aInputs == null || aInputs.length == 0) { - return; - } - - final ItemData[] unifiedProvidedInputs = new ItemData[aInputs.length]; - for (int i = 0; i < aInputs.length; i++) { - unifiedProvidedInputs[i] = GT_OreDictUnificator.getAssociation(aInputs[i]); - } - final @NotNull RecipeItemInput @NotNull [] combinedInputs = getCachedCombinedItemInputs(); - - for (final RecipeItemInput recipeItemCost : combinedInputs) { - long remainingCost = recipeItemCost.inputAmount * amountMultiplier; - - for (int iProvided = 0; iProvided < aInputs.length && remainingCost > 0; iProvided++) { - final ItemStack providedItem = aInputs[iProvided]; - if (providedItem == null || providedItem.stackSize == 0) { - continue; - } - - final ItemData providedUnifiedItem = unifiedProvidedInputs[iProvided]; - if (!recipeItemCost.matchesRecipe(providedUnifiedItem, providedItem)) { - continue; - } - - if (providedItem.stackSize >= remainingCost) { - providedItem.stackSize -= (int) remainingCost; - break; - } else { - remainingCost -= providedItem.stackSize; - providedItem.stackSize = 0; - } - } - } - } - - /** - * Returns the number of parallel recipes, or 0 if recipe is not satisfied at all. 0 < number < 1 means that inputs - * are found but not enough. - */ - public double maxParallelCalculatedByInputs(int maxParallel, FluidStack[] aFluidInputs, ItemStack... aInputs) { - if (mInputs.length > 0 && aInputs == null) return 0; - if (mFluidInputs.length > 0 && aFluidInputs == null) return 0; - - double currentParallel = maxParallel; - - // We need to have any fluids inputs, otherwise the code below does nothing. The second check is always true - // because of early exit condition above. - if (mFluidInputs.length > 0 /* && aFluidInputs != null */) { - // Create map for fluid -> stored amount - Reference2LongMap fluidMap = new Reference2LongArrayMap<>(2); - Reference2LongMap fluidCost = new Reference2LongArrayMap<>(2); - for (FluidStack fluidStack : aFluidInputs) { - if (fluidStack == null) continue; - fluidMap.mergeLong(fluidStack.getFluid(), fluidStack.amount, Long::sum); - } - for (FluidStack fluidStack : mFluidInputs) { - if (fluidStack == null) continue; - fluidCost.mergeLong(fluidStack.getFluid(), fluidStack.amount, Long::sum); - } - - // Check how many parallels can it perform for each fluid - for (Reference2LongMap.Entry costEntry : fluidCost.reference2LongEntrySet()) { - if (costEntry.getLongValue() > 0) { - currentParallel = Math.min( - currentParallel, - (double) fluidMap.getOrDefault(costEntry.getKey(), 0L) / costEntry.getLongValue()); - } - if (currentParallel <= 0) { - return 0; - } - } - } - - if (mInputs.length > 0) { - final @NotNull RecipeItemInput @NotNull [] combinedInputs = getCachedCombinedItemInputs(); - - if (aInputs.length < combinedInputs.length) { - // Fewer item types provided than required by the recipe, making it impossible to satisfy. - return 0; - } - final ItemData[] unifiedProvidedInputs = new ItemData[aInputs.length]; - for (int i = 0; i < aInputs.length; i++) { - unifiedProvidedInputs[i] = GT_OreDictUnificator.getAssociation(aInputs[i]); - } - - recipeItemLoop: for (final RecipeItemInput combinedInput : combinedInputs) { - double remainingCost = combinedInput.inputAmount * currentParallel; - long providedAmount = 0; - - for (int i = 0; i < unifiedProvidedInputs.length; i++) { - final ItemData providedUnifiedItem = unifiedProvidedInputs[i]; - final ItemStack providedItem = aInputs[i]; - if (!combinedInput.matchesRecipe(providedUnifiedItem, providedItem)) { - continue; - } - - providedAmount += providedItem.stackSize; - - if (providedAmount >= remainingCost) { - continue recipeItemLoop; - } - } - if (providedAmount == 0) { - return 0; - } - currentParallel = Math.min(currentParallel, (double) providedAmount / combinedInput.inputAmount); - } - } - return currentParallel; - } - - /** - * Please see JavaDoc on {@link #GTppRecipeHelper} for why this is here. - */ - private static boolean shouldCheckNBT(ItemStack item) { - if (GTppRecipeHelper) { - return GT_Utility.areStacksEqual(item, ic2FluidCell, true) - || GT_Utility.areStacksEqual(item, dataStick, true) - || GT_Utility.areStacksEqual(item, dataOrb, true); - } - return false; - } - - public boolean isRecipePossible(@Nullable ItemInventoryLogic itemInput, @Nullable FluidInventoryLogic fluidInput) { - return getAmountOfRecipesDone(itemInput, fluidInput, 1, true) > 0; - } - - public long getAmountOfRecipesDone(@Nullable ItemInventoryLogic itemInput, @Nullable FluidInventoryLogic fluidInput, - long maxParallel, boolean simulate) { - if (itemInput == null) { - itemInput = new ItemInventoryLogic(0); - } - - if (fluidInput == null) { - fluidInput = new FluidInventoryLogic(0, 0); - } - - itemInput.startRecipeCheck(); - Map recipeItems = getItemInputsAsItemMap(); - for (Entry entry : recipeItems.entrySet()) { - maxParallel = Math - .min(maxParallel, itemInput.calculateAmountOfTimesItemCanBeTaken(entry.getKey(), entry.getValue())); - } - - for (FluidStack fluid : mFluidInputs) { - if (fluid == null) continue; - maxParallel = Math - .min(maxParallel, fluidInput.calculateAmountOfTimesFluidCanBeTaken(fluid.getFluid(), fluid.amount)); - } - - if (simulate) { - itemInput.stopRecipeCheck(); - return maxParallel; - } - - for (Entry entry : recipeItems.entrySet()) { - itemInput.subtractItemAmount(entry.getKey(), entry.getValue() * maxParallel, false); - } - - for (FluidStack fluid : mFluidInputs) { - if (fluid == null) continue; - fluidInput.drain(fluid.getFluid(), fluid.amount * maxParallel, false); - } - itemInput.stopRecipeCheck(); - return maxParallel; - } - - private Map getItemInputsAsItemMap() { - Map items = new HashMap<>(); - for (ItemStack item : mInputs) { - if (item == null) continue; - ItemHolder itemHolder = new ItemHolder(item); - items.put(itemHolder, items.getOrDefault(itemHolder, 0L) + item.stackSize); - } - return items; - } - - @Override - public int compareTo(GT_Recipe recipe) { - // first lowest tier recipes - // then fastest - // then with lowest special value - // then dry recipes - // then with fewer inputs - if (this.mEUt != recipe.mEUt) { - return Integer.compare(this.mEUt, recipe.mEUt); - } else if (this.mDuration != recipe.mDuration) { - return Integer.compare(this.mDuration, recipe.mDuration); - } else if (this.mSpecialValue != recipe.mSpecialValue) { - return Integer.compare(this.mSpecialValue, recipe.mSpecialValue); - } else if (this.mFluidInputs.length != recipe.mFluidInputs.length) { - return Integer.compare(this.mFluidInputs.length, recipe.mFluidInputs.length); - } else if (this.mInputs.length != recipe.mInputs.length) { - return Integer.compare(this.mInputs.length, recipe.mInputs.length); - } - return 0; - } - - public String[] getNeiDesc() { - return neiDesc; - } - - /** - * Sets description shown on NEI.
- * If you have a large number of recipes for the recipemap, this is not efficient memory wise, so use - * {@link gregtech.api.recipe.RecipeMapBuilder#neiSpecialInfoFormatter} instead. - */ - public void setNeiDesc(String... neiDesc) { - this.neiDesc = neiDesc; - } - - // region metadata - - // Don't try implementing setMetadata, as metadataStorage can be EmptyRecipeMetadataStorage - - /** - * Gets metadata associated with this recipe. Can return null. Use - * {@link #getMetadataOrDefault(RecipeMetadataKey, Object)} - * if you want to specify default value. - */ - @Nullable - public T getMetadata(RecipeMetadataKey key) { - return key.cast(metadataStorage.getMetadata(key)); - } - - /** - * Gets metadata associated with this recipe with default value. Does not return null unless default value is null. - */ - @Contract("_, !null -> !null") - @Nullable - public T getMetadataOrDefault(RecipeMetadataKey key, @Nullable T defaultValue) { - return key.cast(metadataStorage.getMetadataOrDefault(key, defaultValue)); - } - - @Nonnull - public IRecipeMetadataStorage getMetadataStorage() { - return metadataStorage; - } - - // endregion - - public RecipeCategory getRecipeCategory() { - return recipeCategory; - } - - /** - * Exists only for recipe copying from external. For ordinal use case, use {@link GT_RecipeBuilder#recipeCategory}. - */ - public void setRecipeCategory(RecipeCategory recipeCategory) { - this.recipeCategory = recipeCategory; - } - - private static final List excludedStacktraces = Arrays.asList( - "java.lang.Thread", - "gregtech.api.interfaces.IRecipeMap", - "gregtech.api.interfaces.IRecipeMap$1", - "gregtech.api.recipe.RecipeMap", - "gregtech.api.recipe.RecipeMapBackend", - "gregtech.api.recipe.RecipeMapBackendPropertiesBuilder", - "gregtech.api.util.GT_Recipe", - "gregtech.api.util.GT_RecipeBuilder", - "gregtech.api.util.GT_RecipeConstants", - "gregtech.api.util.GT_RecipeMapUtil", - "gregtech.common.GT_RecipeAdder"); - - public void reloadOwner() { - setOwner( - Loader.instance() - .activeModContainer()); - - if (GT_Mod.gregtechproxy.mNEIRecipeOwnerStackTrace) { - List toAdd = new ArrayList<>(); - for (StackTraceElement stackTrace : Thread.currentThread() - .getStackTrace()) { - if (excludedStacktraces.stream() - .noneMatch( - c -> stackTrace.getClassName() - .equals(c))) { - toAdd.add(formatStackTrace(stackTrace)); - } - } - stackTraces.add(toAdd); - } - } - - private static String formatStackTrace(StackTraceElement stackTraceElement) { - String raw = stackTraceElement.toString(); - int startParen = raw.lastIndexOf('('); - int colon = raw.lastIndexOf(':'); - if (colon == -1) { - // native or unknown source - return raw; - } - // strip class name and leave line number, as class name is already shown - return raw.substring(0, startParen + 1) + raw.substring(colon); - } - - public void setOwner(ModContainer newOwner) { - ModContainer oldOwner = !owners.isEmpty() ? this.owners.get(owners.size() - 1) : null; - if (newOwner != null && newOwner != oldOwner) { - owners.add(newOwner); - } - } - - /** - * Use in case {@link Loader#activeModContainer()} isn't helpful - */ - public void setOwner(String modId) { - for (ModContainer mod : Loader.instance() - .getModList()) { - if (mod.getModId() - .equals(modId)) { - setOwner(mod); - return; - } - } - } - - public GT_Recipe setInputs(ItemStack... aInputs) { - // TODO determine if we need this without trailing nulls call - this.mInputs = ArrayExt.withoutTrailingNulls(aInputs, ItemStack[]::new); - return this; - } - - public GT_Recipe setOutputs(ItemStack... aOutputs) { - this.mOutputs = ArrayExt.withoutTrailingNulls(aOutputs, ItemStack[]::new); - return this; - } - - public GT_Recipe setFluidInputs(FluidStack... aInputs) { - this.mFluidInputs = ArrayExt.withoutTrailingNulls(aInputs, FluidStack[]::new); - return this; - } - - public GT_Recipe setFluidOutputs(FluidStack... aOutputs) { - this.mFluidOutputs = ArrayExt.withoutTrailingNulls(aOutputs, FluidStack[]::new); - return this; - } - - public GT_Recipe setDuration(int aDuration) { - this.mDuration = aDuration; - return this; - } - - public GT_Recipe setEUt(int aEUt) { - this.mEUt = aEUt; - return this; - } - - public static class GT_Recipe_AssemblyLine { - - public static final ArrayList sAssemblylineRecipes = new ArrayList<>(); - - static { - if (!Boolean.getBoolean("com.gtnh.gt5u.ignore-invalid-assline-recipe")) - GregTech_API.sFirstWorldTick.add(GT_Recipe_AssemblyLine::checkInvalidRecipes); - else GT_Log.out.println("NOT CHECKING INVALID ASSLINE RECIPE."); - } - - private static void checkInvalidRecipes() { - int invalidCount = 0; - GT_Log.out.println("Started assline validation"); - for (GT_Recipe_AssemblyLine recipe : sAssemblylineRecipes) { - if (recipe.getPersistentHash() == 0) { - invalidCount++; - GT_Log.err.printf("Invalid recipe: %s%n", recipe); - } - } - if (invalidCount > 0) throw new RuntimeException( - "There are " + invalidCount + " invalid assembly line recipe(s)! Check GregTech.log for details!"); - } - - public ItemStack mResearchItem; - public int mResearchTime; - public ItemStack[] mInputs; - public FluidStack[] mFluidInputs; - public ItemStack mOutput; - public int mDuration; - public int mEUt; - public ItemStack[][] mOreDictAlt; - private int mPersistentHash; - - /** - * THIS CONSTRUCTOR DOES SET THE PERSISTENT HASH. - *

- * if you set one yourself, it will give you one of the RunetimeExceptions! - */ - public GT_Recipe_AssemblyLine(ItemStack aResearchItem, int aResearchTime, ItemStack[] aInputs, - FluidStack[] aFluidInputs, ItemStack aOutput, int aDuration, int aEUt) { - this( - aResearchItem, - aResearchTime, - aInputs, - aFluidInputs, - aOutput, - aDuration, - aEUt, - new ItemStack[aInputs.length][]); - int tPersistentHash = 1; - for (ItemStack tInput : aInputs) - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(tInput, true, false); - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(aResearchItem, true, false); - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(aOutput, true, false); - for (FluidStack tFluidInput : aFluidInputs) - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(tFluidInput, true, false); - tPersistentHash = tPersistentHash * 31 + aResearchTime; - tPersistentHash = tPersistentHash * 31 + aDuration; - tPersistentHash = tPersistentHash * 31 + aEUt; - setPersistentHash(tPersistentHash); - } - - /** - * THIS CONSTRUCTOR DOES NOT SET THE PERSISTENT HASH. - *

- * if you don't set one yourself, it will break a lot of stuff! - */ - public GT_Recipe_AssemblyLine(ItemStack aResearchItem, int aResearchTime, ItemStack[] aInputs, - FluidStack[] aFluidInputs, ItemStack aOutput, int aDuration, int aEUt, ItemStack[][] aAlt) { - mResearchItem = aResearchItem; - mResearchTime = aResearchTime; - mInputs = aInputs; - mFluidInputs = aFluidInputs; - mOutput = aOutput; - mDuration = aDuration; - mEUt = aEUt; - mOreDictAlt = aAlt; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - GT_ItemStack[] thisInputs = new GT_ItemStack[this.mInputs.length]; - int totalInputStackSize = 0; - for (int i = 0; i < this.mInputs.length; i++) { - thisInputs[i] = new GT_ItemStack(this.mInputs[i]); - totalInputStackSize += thisInputs[i].mStackSize; - } - int inputHash = Arrays.deepHashCode(thisInputs); - int inputFluidHash = Arrays.deepHashCode(this.mFluidInputs); - GT_ItemStack thisOutput = new GT_ItemStack(mOutput); - GT_ItemStack thisResearch = new GT_ItemStack(mResearchItem); - int miscRecipeDataHash = Arrays.deepHashCode( - new Object[] { totalInputStackSize, mDuration, mEUt, thisOutput, thisResearch, mResearchTime }); - result = prime * result + inputFluidHash; - result = prime * result + inputHash; - result = prime * result + miscRecipeDataHash; - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof GT_Recipe_AssemblyLine other)) { - return false; - } - if (this.mInputs.length != other.mInputs.length) { - return false; - } - if (this.mFluidInputs.length != other.mFluidInputs.length) { - return false; - } - // Check Outputs Match - GT_ItemStack output1 = new GT_ItemStack(this.mOutput); - GT_ItemStack output2 = new GT_ItemStack(other.mOutput); - if (!output1.equals(output2)) { - return false; - } - // Check Scanned Item Match - GT_ItemStack scan1 = new GT_ItemStack(this.mResearchItem); - GT_ItemStack scan2 = new GT_ItemStack(other.mResearchItem); - if (!scan1.equals(scan2)) { - return false; - } - // Check Items Match - GT_ItemStack[] thisInputs = new GT_ItemStack[this.mInputs.length]; - GT_ItemStack[] otherInputs = new GT_ItemStack[other.mInputs.length]; - for (int i = 0; i < thisInputs.length; i++) { - thisInputs[i] = new GT_ItemStack(this.mInputs[i]); - otherInputs[i] = new GT_ItemStack(other.mInputs[i]); - } - for (int i = 0; i < thisInputs.length; i++) { - if (!thisInputs[i].equals(otherInputs[i]) || thisInputs[i].mStackSize != otherInputs[i].mStackSize) { - return false; - } - } - // Check Fluids Match - for (int i = 0; i < this.mFluidInputs.length; i++) { - if (!this.mFluidInputs[i].isFluidStackIdentical(other.mFluidInputs[i])) { - return false; - } - } - - return this.mDuration == other.mDuration && this.mEUt == other.mEUt - && this.mResearchTime == other.mResearchTime; - } - - public int getPersistentHash() { - if (mPersistentHash == 0) - GT_Log.err.println("Assline recipe persistent hash has not been set! Recipe: " + mOutput); - return mPersistentHash; - } - - @Override - public String toString() { - return "GT_Recipe_AssemblyLine{" + "mResearchItem=" - + mResearchItem - + ", mResearchTime=" - + mResearchTime - + ", mInputs=" - + Arrays.toString(mInputs) - + ", mFluidInputs=" - + Arrays.toString(mFluidInputs) - + ", mOutput=" - + mOutput - + ", mDuration=" - + mDuration - + ", mEUt=" - + mEUt - + ", mOreDictAlt=" - + Arrays.toString(mOreDictAlt) - + '}'; - } - - /** - * @param aPersistentHash the persistent hash. it should reflect the exact input used to generate this recipe If - * 0 is passed in, the actual persistent hash will be automatically remapped to 1 - * instead. - * @throws IllegalStateException if the persistent hash has been set already - */ - public void setPersistentHash(int aPersistentHash) { - if (this.mPersistentHash != 0) throw new IllegalStateException("Cannot set persistent hash twice!"); - if (aPersistentHash == 0) this.mPersistentHash = 1; - else this.mPersistentHash = aPersistentHash; - } - - /** - * @param inputBusses List of input busses to check. - * @return An array containing the amount of item to consume from the first slot of every input bus. - * {@code null} if at least one item fails to match the recipe ingredient. - */ - public static int[] getItemConsumptionAmountArray(ArrayList inputBusses, - GT_Recipe_AssemblyLine recipe) { - int itemCount = recipe.mInputs.length; - if (itemCount == 0) return null; - int[] tStacks = new int[itemCount]; - for (int i = 0; i < itemCount; i++) { - GT_MetaTileEntity_Hatch_InputBus inputBus = inputBusses.get(i); - if (!inputBus.isValid()) return null; - ItemStack slotStack; - if (inputBus instanceof GT_MetaTileEntity_Hatch_InputBus_ME meBus) { - slotStack = meBus.getShadowItemStack(0); - } else { - slotStack = inputBus.getStackInSlot(0); - } - if (slotStack == null) return null; - - int amount = getMatchedIngredientAmount(slotStack, recipe.mInputs[i], recipe.mOreDictAlt[i]); - if (amount < 0) return null; - - tStacks[i] = amount; - } - return tStacks; - } - - public static int getMatchedIngredientAmount(ItemStack aSlotStack, ItemStack aIngredient, ItemStack[] alts) { - if (alts == null || alts.length == 0) { - if (GT_Utility.areStacksEqual(aSlotStack, aIngredient, true)) { - return aIngredient.stackSize; - } - return -1; - } - for (ItemStack tAltStack : alts) { - if (GT_Utility.areStacksEqual(aSlotStack, tAltStack, true)) { - return tAltStack.stackSize; - } - } - return -1; - } - - /** - * @param inputBusses Input bus list to check. Usually the input bus list of multi. - * @param itemConsumptions Should be generated by {@link GT_Recipe_AssemblyLine#getItemConsumptionAmountArray}. - * @Return The number of parallel recipes, or 0 if recipe is not satisfied at all. 0 < number < 1 means that - * inputs are found but not enough. - */ - public static double maxParallelCalculatedByInputItems(ArrayList inputBusses, - int maxParallel, int[] itemConsumptions, Map inputsFromME) { - // Recipe item matching is done in the generation of itemConsumptions. - - Map itemConsumptionsFromME = new Object2LongOpenHashMap<>(); - double currentParallel = maxParallel; - - // Calculate the amount of each item to consume from ME - for (int i = 0; i < itemConsumptions.length; i++) { - GT_MetaTileEntity_Hatch_InputBus inputBus = inputBusses.get(i); - if (!inputBus.isValid()) return 0; - if (inputBus instanceof GT_MetaTileEntity_Hatch_InputBus_ME meBus) { - ItemStack item = meBus.getShadowItemStack(0); - if (item == null) return 0; - GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(item); - itemConsumptionsFromME.merge(id, (long) itemConsumptions[i], Long::sum); - } - } - // Calculate parallel from ME input busses - for (Entry entry : itemConsumptionsFromME.entrySet()) { - if (!inputsFromME.containsKey(entry.getKey())) return 0; - long consume = entry.getValue(); - // For non-consumed inputs - if (consume == 0) continue; - currentParallel = Math - .min(currentParallel, (double) inputsFromME.get(entry.getKey()).stackSize / consume); - if (currentParallel <= 0) return 0; - } - - // Calculate parallel from regular input busses - for (int i = 0; i < itemConsumptions.length; i++) { - GT_MetaTileEntity_Hatch_InputBus inputBus = inputBusses.get(i); - if (!inputBus.isValid()) return 0; - if (inputBus instanceof GT_MetaTileEntity_Hatch_InputBus_ME) continue; - - ItemStack item = inputBus.getStackInSlot(0); - if (item == null) return 0; - // For non-consumed inputs - if (itemConsumptions[i] == 0) continue; - currentParallel = Math.min(currentParallel, (double) item.stackSize / itemConsumptions[i]); - if (currentParallel <= 0) return 0; - } - return currentParallel; - } - - /** - * @param inputHatches Input hatch list to check. Usually the input hatch list of multi. - * @param fluidConsumptions Fluid inputs of the recipe. - * @return The number of parallel recipes, or 0 if recipe is not satisfied at all. 0 < number < 1 means that - * fluids are found but not enough. - */ - public static double maxParallelCalculatedByInputFluids(ArrayList inputHatches, - int maxParallel, FluidStack[] fluidConsumptions, Map fluidsFromME) { - Map fluidConsumptionsFromME = new Reference2LongOpenHashMap<>(); - double currentParallel = maxParallel; - - // Calculate the amount of each fluid to consume from ME - for (int i = 0; i < fluidConsumptions.length; i++) { - GT_MetaTileEntity_Hatch_Input inputHatch = inputHatches.get(i); - if (!inputHatch.isValid()) return 0; - if (inputHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { - FluidStack fluid = meHatch.getShadowFluidStack(0); - if (fluid == null) return 0; - if (!GT_Utility.areFluidsEqual(fluid, fluidConsumptions[i])) return 0; - fluidConsumptionsFromME.merge(fluid.getFluid(), (long) fluidConsumptions[i].amount, Long::sum); - } - } - // Calculate parallel from ME input hatches - for (Entry entry : fluidConsumptionsFromME.entrySet()) { - Fluid fluid = entry.getKey(); - if (!fluidsFromME.containsKey(fluid)) return 0; - long consume = entry.getValue(); - currentParallel = Math.min(currentParallel, (double) fluidsFromME.get(fluid).amount / consume); - if (currentParallel <= 0) return 0; - } - - // Calculate parallel from regular input hatches - for (int i = 0; i < fluidConsumptions.length; i++) { - GT_MetaTileEntity_Hatch_Input inputHatch = inputHatches.get(i); - if (!inputHatch.isValid()) return 0; - if (inputHatch instanceof GT_MetaTileEntity_Hatch_Input_ME) continue; - - FluidStack fluid; - if (inputHatch instanceof GT_MetaTileEntity_Hatch_MultiInput multiInput) { - fluid = multiInput.getFluid(0); - } else { - fluid = inputHatch.getFillableStack(); - } - if (fluid == null) return 0; - if (!GT_Utility.areFluidsEqual(fluid, fluidConsumptions[i])) return 0; - currentParallel = Math.min(currentParallel, (double) fluid.amount / fluidConsumptions[i].amount); - if (currentParallel <= 0) return 0; - } - return currentParallel; - } - - /** - * WARNING: Ensure that item inputs are enough to be consumed with - * {@link GT_Recipe_AssemblyLine#maxParallelCalculatedByInputItems} before calling this method! - * - * @param inputBusses Input bus list to check. Usually the input bus list of multi. - * @param itemConsumptions Should be generated by {@link GT_Recipe_AssemblyLine#getItemConsumptionAmountArray}. - */ - public static void consumeInputItems(ArrayList inputBusses, - int amountMultiplier, int[] itemConsumptions, Map inputsFromME) { - for (int i = 0; i < itemConsumptions.length; i++) { - GT_MetaTileEntity_Hatch_InputBus inputBus = inputBusses.get(i); - if (!inputBus.isValid()) continue; - ItemStack item; - if (inputBus instanceof GT_MetaTileEntity_Hatch_InputBus_ME meBus) { - item = inputsFromME.get(GT_Utility.ItemId.createNoCopy(meBus.getShadowItemStack(0))); - } else { - item = inputBus.getStackInSlot(0); - } - item.stackSize -= itemConsumptions[i] * amountMultiplier; - } - } - - /** - * WARNING: Ensure that fluid inputs are enough to be consumed with - * {@link GT_Recipe_AssemblyLine#maxParallelCalculatedByInputFluids} before calling this method! - * - * @param inputHatches Input hatch list to check. Usually the input hatch list of multi. - * @param fluidConsumptions Fluid inputs of the recipe. - */ - public static void consumeInputFluids(ArrayList inputHatches, - int amountMultiplier, FluidStack[] fluidConsumptions, Map fluidsFromME) { - for (int i = 0; i < fluidConsumptions.length; i++) { - GT_MetaTileEntity_Hatch_Input inputHatch = inputHatches.get(i); - if (!inputHatch.isValid()) continue; - FluidStack fluid; - if (inputHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { - fluid = fluidsFromME.get( - meHatch.getShadowFluidStack(0) - .getFluid()); - } else if (inputHatch instanceof GT_MetaTileEntity_Hatch_MultiInput multiInput) { - fluid = multiInput.getFluid(0); - } else { - fluid = inputHatch.getFillableStack(); - } - fluid.amount -= fluidConsumptions[i].amount * amountMultiplier; - } - } - } - - public static class GT_Recipe_WithAlt extends GT_Recipe { - - public ItemStack[][] mOreDictAlt; - - /** - * Only for {@link GT_RecipeBuilder}. - */ - GT_Recipe_WithAlt(ItemStack[] mInputs, ItemStack[] mOutputs, FluidStack[] mFluidInputs, - FluidStack[] mFluidOutputs, int[] mChances, Object mSpecialItems, int mDuration, int mEUt, - int mSpecialValue, boolean mEnabled, boolean mHidden, boolean mFakeRecipe, boolean mCanBeBuffered, - boolean mNeedsEmptyOutput, boolean nbtSensitive, String[] neiDesc, - @Nullable IRecipeMetadataStorage metadataStorage, RecipeCategory recipeCategory, - ItemStack[][] mOreDictAlt) { - super( - mInputs, - mOutputs, - mFluidInputs, - mFluidOutputs, - mChances, - mSpecialItems, - mDuration, - mEUt, - mSpecialValue, - mEnabled, - mHidden, - mFakeRecipe, - mCanBeBuffered, - mNeedsEmptyOutput, - nbtSensitive, - neiDesc, - metadataStorage, - recipeCategory); - this.mOreDictAlt = mOreDictAlt; - } - - public GT_Recipe_WithAlt(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, - int[] aChances, FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, - int aSpecialValue, ItemStack[][] aAlt) { - super( - aOptimize, - aInputs, - aOutputs, - aSpecialItems, - aChances, - aFluidInputs, - aFluidOutputs, - aDuration, - aEUt, - aSpecialValue); - mOreDictAlt = aAlt; - } - - public Object getAltRepresentativeInput(int aIndex) { - if (aIndex < 0) return null; - if (aIndex < mOreDictAlt.length) { - if (mOreDictAlt[aIndex] != null && mOreDictAlt[aIndex].length > 0) { - ItemStack[] rStacks = new ItemStack[mOreDictAlt[aIndex].length]; - for (int i = 0; i < mOreDictAlt[aIndex].length; i++) { - rStacks[i] = GT_Utility.copyOrNull(mOreDictAlt[aIndex][i]); - } - return rStacks; - } - } - if (aIndex >= mInputs.length) return null; - return GT_Utility.copyOrNull(mInputs[aIndex]); - } - } -} diff --git a/src/main/java/gregtech/api/util/GT_RecipeBuilder.java b/src/main/java/gregtech/api/util/GT_RecipeBuilder.java deleted file mode 100644 index 137b7d6c86..0000000000 --- a/src/main/java/gregtech/api/util/GT_RecipeBuilder.java +++ /dev/null @@ -1,946 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.util.GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES; -import static gregtech.api.util.GT_Utility.copyFluidArray; -import static gregtech.api.util.GT_Utility.copyItemArray; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Stream; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.item.ItemStack; -import net.minecraft.launchwrapper.Launch; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.Contract; - -import gregtech.GT_Mod; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Mods; -import gregtech.api.interfaces.IRecipeMap; -import gregtech.api.recipe.RecipeCategory; -import gregtech.api.recipe.RecipeMetadataKey; -import gregtech.api.recipe.metadata.IRecipeMetadataStorage; -import gregtech.api.recipe.metadata.RecipeMetadataStorage; -import gregtech.api.util.extensions.ArrayExt; - -@SuppressWarnings({ "unused", "UnusedReturnValue" }) -public class GT_RecipeBuilder { - - // debug mode expose problems. panic mode help you check nothing is wrong-ish without you actively monitoring - private static final boolean DEBUG_MODE_NULL; - // Any stable release should be tested at least once with this: -Dgt.recipebuilder.panic.null=true - private static boolean PANIC_MODE_NULL; - private static final boolean DEBUG_MODE_INVALID; - private static final boolean DEBUG_MODE_FULL_ENERGY; - // Any stable release should be tested at least once with this: -Dgt.recipebuilder.panic.invalid=true - private static final boolean PANIC_MODE_INVALID; - private static final boolean DEBUG_MODE_COLLISION; - - // Any stable release should be tested at least once with this: -Dgt.recipebuilder.panic.collision=true - private static final boolean PANIC_MODE_COLLISION; - - // This should only be enabled in non stable instances only with -Dgt.recipebuilder.recipe_collision_check=true - public static final boolean ENABLE_COLLISION_CHECK; - - public static final int WILDCARD = 32767; - - // time units - public static final int HOURS = 20 * 60 * 60; - public static final int MINUTES = 20 * 60; - public static final int SECONDS = 20; - public static final int TICKS = 1; - - // fluid units - public static final int INGOTS = 144; - public static final int HALF_INGOT = 72; - public static final int QUARTER_INGOT = 36; - public static final int EIGHTH_INGOT = 18; - public static final int NUGGETS = 16; - public static final int BUCKETS = 1000; - - static { - final boolean debugAll; - if (System.getProperties() - .containsKey("gt.recipebuilder.debug")) { - debugAll = Boolean.getBoolean("gt.recipebuilder.debug"); - } else { - // turn on debug by default in dev mode - debugAll = (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); - } - DEBUG_MODE_NULL = debugAll || Boolean.getBoolean("gt.recipebuilder.debug.null"); - DEBUG_MODE_INVALID = debugAll || Boolean.getBoolean("gt.recipebuilder.debug.invalid"); - DEBUG_MODE_COLLISION = debugAll || Boolean.getBoolean("gt.recipebuilder.debug.collision"); - DEBUG_MODE_FULL_ENERGY = debugAll || Boolean.getBoolean("gt.recipebuilder.debug.fullenergy"); - - final boolean panicAll = Boolean.getBoolean("gt.recipebuilder.panic"); - PANIC_MODE_NULL = panicAll || Boolean.getBoolean("gt.recipebuilder.panic.null"); - PANIC_MODE_INVALID = panicAll || Boolean.getBoolean("gt.recipebuilder.panic.invalid"); - PANIC_MODE_COLLISION = panicAll || Boolean.getBoolean("gt.recipebuilder.panic.collision"); - ENABLE_COLLISION_CHECK = Boolean.getBoolean("gt.recipebuilder.recipe_collision_check"); - } - - protected ItemStack[] inputsBasic = new ItemStack[0]; - protected Object[] inputsOreDict; - protected ItemStack[] outputs = new ItemStack[0]; - protected ItemStack[][] alts; - protected FluidStack[] fluidInputs = new FluidStack[0]; - protected FluidStack[] fluidOutputs = new FluidStack[0]; - protected int[] chances; - protected Object special; - protected int duration = -1; - protected int eut = -1; - protected int specialValue; - protected boolean enabled = true; - protected boolean hidden = false; - protected boolean fakeRecipe = false; - protected boolean mCanBeBuffered = true; - protected boolean mNeedsEmptyOutput = false; - protected boolean nbtSensitive = false; - protected String[] neiDesc; - protected RecipeCategory recipeCategory; - protected boolean optimize = true; - @Nullable - protected IRecipeMetadataStorage metadataStorage; - protected boolean checkForCollision = true; - /** - * If recipe addition should be skipped. - */ - protected boolean skip = false; - protected boolean valid = true; - - GT_RecipeBuilder() {} - - private GT_RecipeBuilder(ItemStack[] inputsBasic, Object[] inputsOreDict, ItemStack[] outputs, ItemStack[][] alts, - FluidStack[] fluidInputs, FluidStack[] fluidOutputs, int[] chances, Object special, int duration, int eut, - int specialValue, boolean enabled, boolean hidden, boolean fakeRecipe, boolean mCanBeBuffered, - boolean mNeedsEmptyOutput, boolean nbtSensitive, String[] neiDesc, RecipeCategory recipeCategory, - boolean optimize, @Nullable IRecipeMetadataStorage metadataStorage, boolean checkForCollision, boolean skip, - boolean valid) { - this.inputsBasic = inputsBasic; - this.inputsOreDict = inputsOreDict; - this.outputs = outputs; - this.alts = alts; - this.fluidInputs = fluidInputs; - this.fluidOutputs = fluidOutputs; - this.chances = chances; - this.special = special; - this.duration = duration; - this.eut = eut; - this.specialValue = specialValue; - this.enabled = enabled; - this.hidden = hidden; - this.fakeRecipe = fakeRecipe; - this.mCanBeBuffered = mCanBeBuffered; - this.mNeedsEmptyOutput = mNeedsEmptyOutput; - this.nbtSensitive = nbtSensitive; - this.neiDesc = neiDesc; - this.recipeCategory = recipeCategory; - this.optimize = optimize; - this.metadataStorage = metadataStorage; - if (this.metadataStorage != null) { - this.metadataStorage = this.metadataStorage.copy(); - } - this.checkForCollision = checkForCollision; - this.skip = skip; - this.valid = valid; - } - - // region helper methods - - private static FluidStack[] fix(FluidStack[] fluidInputs) { - return Arrays.stream(fluidInputs) - .filter(Objects::nonNull) - .map(FluidStack::copy) - .toArray(FluidStack[]::new); - } - - private static ItemStack[] fix(ItemStack[] inputs) { - return GT_OreDictUnificator.setStackArray(true, ArrayExt.withoutTrailingNulls(inputs, ItemStack[]::new)); - } - - public static GT_RecipeBuilder builder() { - return new GT_RecipeBuilder(); - } - - /** - * Creates empty builder where only duration and EU/t are set to 0. - */ - public static GT_RecipeBuilder empty() { - return new GT_RecipeBuilder().duration(0) - .eut(0); - } - - private static boolean containsNull(Object[] arr) { - return arr == null || Arrays.stream(arr) - .anyMatch(Objects::isNull); - } - - private static void handleNullRecipeComponents(String componentType) { - // place a breakpoint here to catch all these issues - GT_Log.err.print("null detected in "); - GT_Log.err.println(componentType); - new NullPointerException().printStackTrace(GT_Log.err); - if (PANIC_MODE_NULL) { - throw new IllegalArgumentException("null in argument"); - } - } - - private static boolean debugNull() { - return DEBUG_MODE_NULL || PANIC_MODE_NULL; - } - - public static void handleInvalidRecipe() { - if (!DEBUG_MODE_INVALID && !PANIC_MODE_INVALID) { - return; - } - // place a breakpoint here to catch all these issues - GT_Log.err.print("invalid recipe"); - new IllegalArgumentException().printStackTrace(GT_Log.err); - if (PANIC_MODE_INVALID) { - throw new IllegalArgumentException("invalid recipe"); - } - } - - public static void handleRecipeCollision(String details) { - if (!DEBUG_MODE_COLLISION && !PANIC_MODE_COLLISION) { - return; - } - GT_Log.err.print("Recipe collision resulting in recipe loss detected with "); - GT_Log.err.println(details); - if (PANIC_MODE_COLLISION) { - throw new IllegalArgumentException("Recipe Collision"); - } else { - // place a breakpoint here to catch all these issues - new IllegalArgumentException().printStackTrace(GT_Log.err); - } - } - - public static void onConfigLoad() { - PANIC_MODE_NULL |= GT_Mod.gregtechproxy.crashOnNullRecipeInput; - } - - // endregion - - // region setter - - /** - * Non-OreDicted item inputs. Assumes input is unified. - */ - public GT_RecipeBuilder itemInputsUnified(ItemStack... inputs) { - if (skip) return this; - if (debugNull() && containsNull(inputs)) handleNullRecipeComponents("itemInputUnified"); - inputsBasic = ArrayExt.withoutTrailingNulls(inputs, ItemStack[]::new); - inputsOreDict = null; - alts = null; - return this; - } - - /** - * Non-OreDicted item inputs. Assumes input is not unified. - */ - public GT_RecipeBuilder itemInputs(ItemStack... inputs) { - if (skip) return this; - if (debugNull() && containsNull(inputs)) handleNullRecipeComponents("itemInputs"); - inputsBasic = fix(inputs); - inputsOreDict = null; - alts = null; - return this; - } - - /** - * OreDicted item inputs. Currently only used for assline recipes adder. - */ - public GT_RecipeBuilder itemInputs(Object... inputs) { - if (skip) return this; - inputsOreDict = inputs; - alts = new ItemStack[inputs.length][]; - for (int i = 0, inputsLength = inputs.length; i < inputsLength; i++) { - Object input = inputs[i]; - if (input instanceof ItemStack) { - alts[i] = new ItemStack[] { (ItemStack) input }; - } else if (input instanceof ItemStack[]) { - alts[i] = ((ItemStack[]) input).clone(); - } else if (input instanceof Object[]arr) { - if (arr.length != 2) continue; - List ores = GT_OreDictUnificator.getOres(arr[0]); - if (ores.isEmpty()) continue; - int size = ((Number) arr[1]).intValue(); - alts[i] = ores.stream() - .map(s -> GT_Utility.copyAmount(size, s)) - .filter(GT_Utility::isStackValid) - .toArray(ItemStack[]::new); - } else if (input == null) { - handleNullRecipeComponents("recipe oredict input"); - alts[i] = new ItemStack[0]; - } else { - throw new IllegalArgumentException("index " + i + ", unexpected type: " + input.getClass()); - } - } - inputsBasic = Arrays.stream(alts) - .map(ss -> ss.length > 0 ? ss[0] : null) - .toArray(ItemStack[]::new); - // optimize cannot handle recipes with alts - return noOptimize(); - } - - public GT_RecipeBuilder itemOutputs(ItemStack... outputs) { - if (skip) return this; - if (debugNull() && containsNull(outputs)) handleNullRecipeComponents("itemOutputs"); - this.outputs = outputs; - if (chances != null && chances.length != outputs.length) { - throw new IllegalArgumentException("Output chances array and items array length differs"); - } - return this; - } - - /** - * Not intended to be used by recipe authors. - * Intended for recipe rewrite middlewares. - */ - public GT_RecipeBuilder itemOutputs(ItemStack[] outputs, int[] chances) { - if (skip) return this; - if (debugNull() && containsNull(outputs)) handleNullRecipeComponents("itemOutputs"); - this.outputs = outputs; - this.chances = chances; - if (chances != null && chances.length != outputs.length) { - throw new IllegalArgumentException("Output chances array and items array length differs"); - } - return this; - } - - public GT_RecipeBuilder fluidInputs(FluidStack... fluidInputs) { - if (skip) return this; - if (debugNull() && containsNull(fluidInputs)) handleNullRecipeComponents("fluidInputs"); - this.fluidInputs = fix(fluidInputs); - return this; - } - - public GT_RecipeBuilder fluidOutputs(FluidStack... fluidOutputs) { - if (skip) return this; - if (debugNull() && containsNull(fluidOutputs)) handleNullRecipeComponents("fluidOutputs"); - this.fluidOutputs = fix(fluidOutputs); - return this; - } - - public GT_RecipeBuilder outputChances(int... chances) { - if (skip) return this; - if (outputs != null && chances.length != outputs.length) { - throw new IllegalArgumentException("Output chances array and items array length differs"); - } - this.chances = chances; - return this; - } - - public GT_RecipeBuilder special(Object special) { - this.special = special; - return this; - } - - public GT_RecipeBuilder duration(int duration) { - this.duration = duration; - return this; - } - - public GT_RecipeBuilder duration(long duration) { - this.duration = (int) duration; - return this; - } - - public GT_RecipeBuilder eut(int eut) { - if (DEBUG_MODE_FULL_ENERGY) { - // Ignores ULV voltage - for (int i = 1; i < GT_Values.VP.length; i++) { - if (eut <= GT_Values.V[i] && eut > GT_Values.VP[i]) { - GT_Log.err.println( - "EUt > Practical Voltage detected. EUt: " + eut + ", Practical Voltage: " + GT_Values.VP[i]); - new IllegalArgumentException().printStackTrace(GT_Log.err); - break; - } - } - } - this.eut = eut; - return this; - } - - public GT_RecipeBuilder eut(long eut) { - return eut((int) eut); - } - - /** - * prefer to use metadata over this. should only use when the target recipe map does not yet support metadata - * system, or it's to bridge legacy code and modern code. - */ - public GT_RecipeBuilder specialValue(int specialValue) { - this.specialValue = specialValue; - return this; - } - - // I don't expect anyone to actually call this... - public GT_RecipeBuilder disabled() { - this.enabled = false; - return this; - } - - public GT_RecipeBuilder hidden() { - this.hidden = true; - return this; - } - - public GT_RecipeBuilder fake() { - this.fakeRecipe = true; - return this; - } - - public GT_RecipeBuilder noBuffer() { - this.mCanBeBuffered = false; - return this; - } - - public GT_RecipeBuilder needsEmptyOutput() { - this.mNeedsEmptyOutput = true; - return this; - } - - public GT_RecipeBuilder nbtSensitive() { - this.nbtSensitive = true; - return this; - } - - public GT_RecipeBuilder setNEIDesc(String... neiDesc) { - this.neiDesc = neiDesc; - return this; - } - - public GT_RecipeBuilder recipeCategory(RecipeCategory recipeCategory) { - this.recipeCategory = recipeCategory; - return this; - } - - /** - * Prevent the resulting recipe from optimizing recipe, which is a process that reduce recipe batch size. - */ - public GT_RecipeBuilder noOptimize() { - this.optimize = false; - return this; - } - - /** - * Prevents checking collision with existing recipes when adding the built recipe. - */ - public GT_RecipeBuilder ignoreCollision() { - this.checkForCollision = false; - return this; - } - - /** - * Sets metadata of the recipe. It can be used for recipe emitter to do special things, or for being stored in the - * built recipe and used for actual recipe processing. - *

- * {@link GT_RecipeConstants} has a series of metadata keys. Or you can create one by yourself. - */ - public GT_RecipeBuilder metadata(RecipeMetadataKey key, T value) { - if (skip) return this; - if (metadataStorage == null) { - metadataStorage = new RecipeMetadataStorage(); - } - metadataStorage.store(key, value); - return this; - } - - /** - * Gets metadata already set for this builder. Can return null. Use - * {@link #getMetadataOrDefault(RecipeMetadataKey, Object)} - * if you want to specify default value. - */ - @Nullable - public T getMetadata(RecipeMetadataKey key) { - if (metadataStorage == null) { - return null; - } - return key.cast(metadataStorage.getMetadata(key)); - } - - /** - * Gets metadata already set for this builder with default value. Does not return null unless default value is null. - */ - @Contract("_, !null -> !null") - @Nullable - public T getMetadataOrDefault(RecipeMetadataKey key, T defaultValue) { - if (metadataStorage == null) { - return defaultValue; - } - return key.cast(metadataStorage.getMetadataOrDefault(key, defaultValue)); - } - - /** - * Specifies mods required to add the recipe. If any of the mods is not loaded, all the operations for this builder - * will be ignored. - * - * @param mods Mod(s) required for the recipe. - */ - public GT_RecipeBuilder requireMods(Mods... mods) { - skip = Stream.of(mods) - .anyMatch(mod -> !mod.isModLoaded()); - return this; - } - - public GT_RecipeBuilder requiresCleanRoom() { - return metadata(GT_RecipeConstants.CLEANROOM, true); - } - - public GT_RecipeBuilder requiresLowGravity() { - return metadata(GT_RecipeConstants.LOW_GRAVITY, true); - } - - // endregion - - private static T[] copy(T[] arr) { - return arr == null ? null : arr.clone(); - } - - private static int[] copy(int[] arr) { - return arr == null ? null : arr.clone(); - } - - /** - * produce a deep copy of current values. anything unset will remain unset. IMPORTANT: If metadata contains mutable - * value, they will not be cloned! - *

- * checkout docs/RecipeBuilder.md for more info on whether to copy or not. - */ - public GT_RecipeBuilder copy() { - return new GT_RecipeBuilder( - copyItemArray(inputsBasic), - copy(inputsOreDict), - copyItemArray(outputs), - copy(alts), - copyFluidArray(fluidInputs), - copyFluidArray(fluidOutputs), - copy(chances), - special, - duration, - eut, - specialValue, - enabled, - hidden, - fakeRecipe, - mCanBeBuffered, - mNeedsEmptyOutput, - nbtSensitive, - copy(neiDesc), - recipeCategory, - optimize, - metadataStorage, - checkForCollision, - skip, - valid); - } - - /** - * produce a deep copy of current values. anything unset will remain unset. discard all existing metadata - */ - public GT_RecipeBuilder copyNoMetadata() { - return new GT_RecipeBuilder( - copyItemArray(inputsBasic), - copy(inputsOreDict), - copyItemArray(outputs), - copy(alts), - copyFluidArray(fluidInputs), - copyFluidArray(fluidOutputs), - copy(chances), - special, - duration, - eut, - specialValue, - enabled, - hidden, - fakeRecipe, - mCanBeBuffered, - mNeedsEmptyOutput, - nbtSensitive, - copy(neiDesc), - recipeCategory, - optimize, - null, - checkForCollision, - skip, - valid); - } - - // region getter - - public ItemStack getItemInputBasic(int index) { - return index < inputsBasic.length ? inputsBasic[index] : null; - } - - public Object getItemInputOreDict(int index) { - return index < inputsOreDict.length ? inputsOreDict[index] : null; - } - - public ItemStack getItemOutput(int index) { - return index < outputs.length ? outputs[index] : null; - } - - public FluidStack getFluidInput(int index) { - return index < fluidInputs.length ? fluidInputs[index] : null; - } - - public FluidStack getFluidOutput(int index) { - return index < fluidOutputs.length ? fluidOutputs[index] : null; - } - - public ItemStack[] getItemInputsBasic() { - return inputsBasic; - } - - public Object[] getItemInputsOreDict() { - return inputsOreDict; - } - - public ItemStack[] getItemOutputs() { - return outputs; - } - - public FluidStack[] getFluidInputs() { - return fluidInputs; - } - - public FluidStack[] getFluidOutputs() { - return fluidOutputs; - } - - public int getDuration() { - return duration; - } - - public int[] getChances() { - return chances; - } - - public int getEUt() { - return eut; - } - - public RecipeCategory getRecipeCategory() { - return recipeCategory; - } - - public boolean isOptimize() { - return optimize; - } - - public boolean isCheckForCollision() { - return checkForCollision; - } - - // endregion - - // region validator - - public GT_RecipeBuilder clearInvalid() { - valid = true; - return this; - } - - public GT_RecipeBuilder invalidate() { - valid = false; - return this; - } - - public boolean isValid() { - return valid; - } - - private static boolean isArrayValid(@Nonnull Object[] arr, int min, int max) { - int count = 0; - for (Object o : arr) { - if (o != null) count += 1; - } - return min <= count && max >= count; - } - - /** - * Validate if input item match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow - * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. - */ - public GT_RecipeBuilder validateNoInput() { - if (skip) return this; - return GT_Utility.isArrayEmptyOrNull(inputsBasic) ? this : invalidate(); - } - - /** - * Validate if input fluid match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow - * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. - */ - public GT_RecipeBuilder validateNoInputFluid() { - if (skip) return this; - return GT_Utility.isArrayEmptyOrNull(fluidInputs) ? this : invalidate(); - } - - /** - * Validate if output item match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow - * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. - */ - public GT_RecipeBuilder validateNoOutput() { - if (skip) return this; - return GT_Utility.isArrayEmptyOrNull(outputs) ? this : invalidate(); - } - - /** - * Validate if output fluid match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow - * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. - */ - public GT_RecipeBuilder validateNoOutputFluid() { - if (skip) return this; - return GT_Utility.isArrayEmptyOrNull(fluidOutputs) ? this : invalidate(); - } - - /** - * Validate if input item match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow - * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. - */ - public GT_RecipeBuilder validateInputCount(int min, int max) { - if (skip) return this; - if (inputsBasic == null) return min < 0 ? this : invalidate(); - return isArrayValid(inputsBasic, min, max) ? this : invalidate(); - } - - /** - * Validate if input fluid match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow - * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. - */ - public GT_RecipeBuilder validateInputFluidCount(int min, int max) { - if (skip) return this; - if (fluidInputs == null) return min < 0 ? this : invalidate(); - return isArrayValid(fluidInputs, min, max) ? this : invalidate(); - } - - /** - * Validate if output item match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow - * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. - */ - public GT_RecipeBuilder validateOutputCount(int min, int max) { - if (skip) return this; - if (outputs == null) return min < 0 ? this : invalidate(); - return isArrayValid(outputs, min, max) ? this : invalidate(); - } - - /** - * Validate if output fluid match requirement. Return as invalidated if fails prereq. Specify -1 as min to allow - * unset. Both bound inclusive. Only supposed to be called by IRecipeMap and not client code. - */ - public GT_RecipeBuilder validateOutputFluidCount(int min, int max) { - if (skip) return this; - if (fluidOutputs == null) return min < 0 ? this : invalidate(); - return isArrayValid(fluidOutputs, min, max) ? this : invalidate(); - } - - public GT_RecipeBuilder validateAnyInput() { - if (skip) return this; - if (fluidInputs != null && isArrayValid(fluidInputs, 1, Integer.MAX_VALUE)) { - return this; - } - if (inputsBasic != null && isArrayValid(inputsBasic, 1, Integer.MAX_VALUE)) { - return this; - } - return invalidate(); - } - - public GT_RecipeBuilder validateAnyOutput() { - if (skip) return this; - if (fluidOutputs != null && isArrayValid(fluidOutputs, 1, Integer.MAX_VALUE)) { - return this; - } - if (outputs != null && isArrayValid(outputs, 1, Integer.MAX_VALUE)) { - return this; - } - return invalidate(); - } - - // endregion - - /** - * Builds new recipe, without custom behavior of recipemaps. For adding recipe to recipemap, - * use {@link #addTo} instead. - * - * @return Built recipe. Returns empty if failed to build. - */ - public Optional build() { - if (skip) { - return Optional.empty(); - } - if (!valid) { - handleInvalidRecipe(); - return Optional.empty(); - } - preBuildChecks(); - optimize(); - return Optional.of( - decorate( - new GT_Recipe( - inputsBasic, - outputs, - fluidInputs, - fluidOutputs, - chances, - special, - duration, - eut, - specialValue, - enabled, - hidden, - fakeRecipe, - mCanBeBuffered, - mNeedsEmptyOutput, - nbtSensitive, - neiDesc, - metadataStorage, - recipeCategory))); - } - - public GT_RecipeBuilder forceOreDictInput() { - if (inputsOreDict != null || inputsBasic == null) return this; - return itemInputs((Object[]) inputsBasic); - } - - public Optional buildWithAlt() { - if (skip) { - return Optional.empty(); - } - if (inputsOreDict == null) { - throw new UnsupportedOperationException(); - } - if (!valid) { - handleInvalidRecipe(); - return Optional.empty(); - } - preBuildChecks(); - // no optimize. - return Optional.of( - decorate( - new GT_Recipe.GT_Recipe_WithAlt( - inputsBasic, - outputs, - fluidInputs, - fluidOutputs, - chances, - special, - duration, - eut, - specialValue, - enabled, - hidden, - fakeRecipe, - mCanBeBuffered, - mNeedsEmptyOutput, - nbtSensitive, - neiDesc, - metadataStorage, - recipeCategory, - alts))); - } - - private void preBuildChecks() { - if (duration == -1) throw new IllegalStateException("no duration"); - if (eut == -1) throw new IllegalStateException("no eut"); - } - - private void optimize() { - if (optimize) { - ArrayList l = new ArrayList<>(); - l.addAll(Arrays.asList(inputsBasic)); - l.addAll(Arrays.asList(outputs)); - for (int i = 0; i < l.size(); i++) if (l.get(i) == null) l.remove(i--); - - outer: for (byte i = (byte) Math.min(64, duration / 16); i > 1; i--) { - if (duration / i >= 16) { - for (ItemStack stack : l) { - if (stack.stackSize % i != 0) continue outer; - } - for (FluidStack fluidInput : fluidInputs) { - if (fluidInput.amount % i != 0) continue outer; - } - for (FluidStack fluidOutput : fluidOutputs) { - if (fluidOutput.amount % i != 0) continue outer; - } - for (ItemStack itemStack : l) itemStack.stackSize /= i; - for (FluidStack fluidInput : fluidInputs) fluidInput.amount /= i; - for (FluidStack fluidOutput : fluidOutputs) fluidOutput.amount /= i; - duration /= i; - } - } - optimize = false; - } - } - - private T decorate(T r) { - r.mHidden = hidden; - r.mCanBeBuffered = mCanBeBuffered; - r.mNeedsEmptyOutput = mNeedsEmptyOutput; - r.isNBTSensitive = nbtSensitive; - r.mFakeRecipe = fakeRecipe; - r.mEnabled = enabled; - if (neiDesc != null) r.setNeiDesc(neiDesc); - applyDefaultSpecialValues(r); - return r; - } - - private void applyDefaultSpecialValues(GT_Recipe recipe) { - if (recipe.mSpecialValue != 0) return; - - int specialValue = 0; - if (getMetadataOrDefault(GT_RecipeConstants.LOW_GRAVITY, false)) specialValue -= 100; - if (getMetadataOrDefault(GT_RecipeConstants.CLEANROOM, false)) specialValue -= 200; - for (RecipeMetadataKey ident : SPECIAL_VALUE_ALIASES) { - Integer metadata = getMetadataOrDefault(ident, null); - if (metadata != null) { - specialValue = metadata; - break; - } - } - recipe.mSpecialValue = specialValue; - } - - public Collection addTo(IRecipeMap recipeMap) { - if (skip) { - return Collections.emptyList(); - } - return recipeMap.doAdd(this); - } - - public GT_RecipeBuilder reset() { - metadataStorage = null; - alts = null; - chances = null; - duration = -1; - enabled = true; - eut = -1; - fakeRecipe = false; - fluidInputs = null; - fluidOutputs = null; - hidden = false; - inputsBasic = null; - inputsOreDict = null; - mCanBeBuffered = true; - mNeedsEmptyOutput = false; - nbtSensitive = false; - neiDesc = null; - recipeCategory = null; - optimize = true; - outputs = null; - special = null; - specialValue = 0; - skip = false; - valid = true; - return this; - } -} diff --git a/src/main/java/gregtech/api/util/GT_RecipeConstants.java b/src/main/java/gregtech/api/util/GT_RecipeConstants.java deleted file mode 100644 index c8a002c6c2..0000000000 --- a/src/main/java/gregtech/api/util/GT_RecipeConstants.java +++ /dev/null @@ -1,692 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes; -import static gregtech.api.util.GT_RecipeMapUtil.convertCellToFluid; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Optional; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.elisis.gtnhlanth.common.item.MaskList; -import com.elisis.gtnhlanth.common.item.PhotolithographicMask; -import com.elisis.gtnhlanth.common.register.LanthItemList; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IRecipeMap; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeCategories; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.RecipeMetadataKey; -import gregtech.api.recipe.metadata.SimpleRecipeMetadataKey; -import gregtech.common.items.GT_MetaGenerated_Item_03; -import gregtech.common.items.ID_MetaItem_03; - -// this class is intended to be import-static-ed on every recipe script -// so take care to not put unrelated stuff here! -public class GT_RecipeConstants { - - /** - * Set to true to signal the recipe require low gravity. do nothing if recipe set specialValue explicitly. Can - * coexist with CLEANROOM just fine - */ - public static final RecipeMetadataKey LOW_GRAVITY = SimpleRecipeMetadataKey - .create(Boolean.class, "low_gravity"); - /** - * Set to true to signal the recipe require cleanroom. do nothing if recipe set specialValue explicitly. Can coexist - * with LOW_GRAVITY just fine - */ - public static final RecipeMetadataKey CLEANROOM = SimpleRecipeMetadataKey - .create(Boolean.class, "cleanroom"); - /** - * Common additive to use in recipe, e.g. for PBF, this is coal amount. - */ - public static final RecipeMetadataKey ADDITIVE_AMOUNT = SimpleRecipeMetadataKey - .create(Integer.class, "additives"); - /** - * Used for fusion reactor. Denotes ignition threshold. - */ - public static final RecipeMetadataKey FUSION_THRESHOLD = SimpleRecipeMetadataKey - .create(Integer.class, "fusion_threshold"); - /** - * Research time in a scanner used in ticks. - */ - public static final RecipeMetadataKey RESEARCH_TIME = SimpleRecipeMetadataKey - .create(Integer.class, "research_time"); - /** - * Fuel type. TODO should we use enum directly? - */ - public static final RecipeMetadataKey FUEL_TYPE = SimpleRecipeMetadataKey - .create(Integer.class, "fuel_type"); - /** - * Fuel value. - */ - public static final RecipeMetadataKey FUEL_VALUE = SimpleRecipeMetadataKey - .create(Integer.class, "fuel_value"); - /** - * Required heat for heating coil (Kelvin). - */ - public static final RecipeMetadataKey COIL_HEAT = SimpleRecipeMetadataKey - .create(Integer.class, "coil_heat"); - /** - * Research item used by assline recipes. - */ - public static final RecipeMetadataKey RESEARCH_ITEM = SimpleRecipeMetadataKey - .create(ItemStack.class, "research_item"); - /** - * For assembler. It accepts a single item as oredict. It looks like no one uses this anyway... - */ - public static final RecipeMetadataKey OREDICT_INPUT = SimpleRecipeMetadataKey - .create(Object.class, "oredict_input"); - /** - * Replicator output material. - */ - public static final RecipeMetadataKey MATERIAL = SimpleRecipeMetadataKey - .create(Materials.class, "material"); - /** - * Marker for {@link #UniversalArcFurnace} to tell that the recipe belongs to recycling category. - */ - public static final RecipeMetadataKey RECYCLE = SimpleRecipeMetadataKey.create(Boolean.class, "recycle"); - /** - * For Microwave. - */ - public static final RecipeMetadataKey EXPLODE = SimpleRecipeMetadataKey.create(Boolean.class, "explode"); - /** - * For Microwave. - */ - public static final RecipeMetadataKey ON_FIRE = SimpleRecipeMetadataKey.create(Boolean.class, "on_fire"); - - /** - * Nano Forge Tier. - */ - public static final RecipeMetadataKey NANO_FORGE_TIER = SimpleRecipeMetadataKey - .create(Integer.class, "nano_forge_tier"); - - /** - * FOG Exotic recipe tier. - */ - public static final RecipeMetadataKey FOG_EXOTIC_TIER = SimpleRecipeMetadataKey - .create(Integer.class, "fog_exotic_tier"); - - /** - * FOG Plasma recipe tier. - */ - public static final RecipeMetadataKey FOG_PLASMA_TIER = SimpleRecipeMetadataKey - .create(Integer.class, "fog_plasma_tier"); - - /** - * DEFC Casing tier. - */ - public static final RecipeMetadataKey DEFC_CASING_TIER = SimpleRecipeMetadataKey - .create(Integer.class, "defc_casing_tier"); - - /** - * Chemplant Casing tier. Beware, codewise index starts at 0, but it is tier 1. - */ - public static final RecipeMetadataKey CHEMPLANT_CASING_TIER = SimpleRecipeMetadataKey - .create(Integer.class, "chemplant_casing_tier"); - - /** - * QFT Focus tier. - */ - public static final RecipeMetadataKey QFT_FOCUS_TIER = SimpleRecipeMetadataKey - .create(Integer.class, "qft_focus_tier"); - - /** - * Tier of advanced compression (HIP/black hole) - */ - public static final RecipeMetadataKey COMPRESSION_TIER = SimpleRecipeMetadataKey - .create(Integer.class, "compression"); - - /** - * Dissolution Tank Ratio. - */ - public static final RecipeMetadataKey DISSOLUTION_TANK_RATIO = SimpleRecipeMetadataKey - .create(Integer.class, "dissolution_tank_ratio"); - - /** - * Duration in days for the RTG. - */ - public static final RecipeMetadataKey RTG_DURATION_IN_DAYS = SimpleRecipeMetadataKey - .create(Integer.class, "rtg_duration_in_days"); - - /** - * Basic output for the Large Naquadah Generator. - */ - public static final RecipeMetadataKey LNG_BASIC_OUTPUT = SimpleRecipeMetadataKey - .create(Integer.class, "lng_basic_output"); - - /** - * Coil tier for the Naquadah Fuel Refinery. - */ - public static final RecipeMetadataKey NFR_COIL_TIER = SimpleRecipeMetadataKey - .create(Integer.class, "nfr_coil_tier"); - - /** - * NKE range for the neutron activator. - */ - public static final RecipeMetadataKey NKE_RANGE = SimpleRecipeMetadataKey - .create(Integer.class, "nke_range"); - /** - * Precise Assembler casing tier. - */ - public static final RecipeMetadataKey PRECISE_ASSEMBLER_CASING_TIER = SimpleRecipeMetadataKey - .create(Integer.class, "precise_assembler_casing_tier"); - /** - * CoAL casing tier. - */ - public static final RecipeMetadataKey COAL_CASING_TIER = SimpleRecipeMetadataKey - .create(Integer.class, "coal_casing_tier"); - - /** - * LFTR output power. - */ - public static final RecipeMetadataKey LFTR_OUTPUT_POWER = SimpleRecipeMetadataKey - .create(Integer.class, "lftr_output_power"); - - /** - * Research Station data. - */ - public static final RecipeMetadataKey RESEARCH_STATION_DATA = SimpleRecipeMetadataKey - .create(Integer.class, "research_station_data"); - - /** - * glass tier required for the biovat recipes. - */ - public static final RecipeMetadataKey SIEVERTS = SimpleRecipeMetadataKey.create(Integer.class, "sieverts"); - - public static final RecipeMetadataKey DECAY_TICKS = SimpleRecipeMetadataKey - .create(Integer.class, "decay_ticks"); - - public static final RecipeMetadataKey NOBLE_GASES = SimpleRecipeMetadataKey - .create(Boolean.class, "noble_gases"); - - public static final RecipeMetadataKey ANAEROBE_GASES = SimpleRecipeMetadataKey - .create(Boolean.class, "anaerobe_gases"); - - public static final RecipeMetadataKey NO_GAS = SimpleRecipeMetadataKey.create(Boolean.class, "no_gas"); - - /** - * Add a arc furnace recipe. Adds to both normal arc furnace and plasma arc furnace. - * Will override the fluid input with oxygen/plasma for the respective recipe maps, so there is no point setting it. - */ - public static final IRecipeMap UniversalArcFurnace = IRecipeMap.newRecipeMap(builder -> { - if (!GT_Utility.isArrayOfLength(builder.getItemInputsBasic(), 1) - || GT_Utility.isArrayEmptyOrNull(builder.getItemOutputs())) return Collections.emptyList(); - int aDuration = builder.getDuration(); - if (aDuration <= 0) { - return Collections.emptyList(); - } - builder.duration(aDuration); - boolean recycle = builder.getMetadataOrDefault(RECYCLE, false); - Collection ret = new ArrayList<>(); - for (Materials mat : new Materials[] { Materials.Argon, Materials.Nitrogen }) { - int tPlasmaAmount = (int) Math.max(1L, aDuration / (mat.getMass() * 16L)); - GT_RecipeBuilder plasmaBuilder = builder.copy() - .fluidInputs(mat.getPlasma(tPlasmaAmount)) - .fluidOutputs(mat.getGas(tPlasmaAmount)); - if (recycle) { - plasmaBuilder.recipeCategory(RecipeCategories.plasmaArcFurnaceRecycling); - } - ret.addAll(RecipeMaps.plasmaArcFurnaceRecipes.doAdd(plasmaBuilder)); - } - GT_RecipeBuilder arcBuilder = builder.copy() - .fluidInputs(Materials.Oxygen.getGas(aDuration)); - if (recycle) { - arcBuilder.recipeCategory(RecipeCategories.arcFurnaceRecycling); - } - ret.addAll(RecipeMaps.arcFurnaceRecipes.doAdd(arcBuilder)); - return ret; - }); - - /** - * Add a chemical reactor recipe to both LCR and singleblocks. - */ - public static final IRecipeMap UniversalChemical = IRecipeMap.newRecipeMap(builder -> { - for (ItemStack input : builder.getItemInputsBasic()) { - // config >= 10 -> this is a special chemical recipe that output fluid/canned fluid variant. - // it doesn't belong to multiblocks - if (GT_Utility.isAnyIntegratedCircuit(input) && input.getItemDamage() >= 10) { - return builder.addTo(RecipeMaps.chemicalReactorRecipes); - } - } - return GT_Utility.concat( - builder.copy() - .addTo(RecipeMaps.chemicalReactorRecipes), - convertCellToFluid(builder, false) - // LCR does not need cleanroom. - .metadata(CLEANROOM, false) - .addTo(RecipeMaps.multiblockChemicalReactorRecipes)); - }); - - /** - * Adds an engraver recipe that might use purified water. Still added to the regular recipemap if it ends up not - * needing it. - */ - public static final IRecipeMap WaferEngravingRecipes = IRecipeMap.newRecipeMap(builder -> { - // spotless:off - enum Wafer{ - Naquadah, - Europium, - Americium, - // Beamline masks - MaskT1, - MaskT2, - MaskT3, - } - // spotless:on - // Find the wafer used - Wafer wafer = null; - PhotolithographicMask t1Item = (PhotolithographicMask) LanthItemList.maskMap.get(MaskList.BLANK1); - PhotolithographicMask t2Item = (PhotolithographicMask) LanthItemList.maskMap.get(MaskList.BLANK2); - PhotolithographicMask t3Item = (PhotolithographicMask) LanthItemList.maskMap.get(MaskList.BLANK3); - for (ItemStack input : builder.getItemInputsBasic()) { - if (input.getItem() instanceof GT_MetaGenerated_Item_03) { - int meta = input.getItemDamage() - 32000; - // Check if this input item is indicating a wafer recipe we want to modify - if (meta == ID_MetaItem_03.Circuit_Silicon_Wafer3.ID) wafer = Wafer.Naquadah; - else if (meta == ID_MetaItem_03.Circuit_Silicon_Wafer4.ID) wafer = Wafer.Europium; - else if (meta == ID_MetaItem_03.Circuit_Silicon_Wafer5.ID) wafer = Wafer.Americium; - } - - // Now look for beamline masks - if (input.getItem() instanceof PhotolithographicMask mask) { - String spectrum = mask.getDescSpectrum(); - if (spectrum.equals(t1Item.getDescSpectrum())) wafer = Wafer.MaskT1; - else if (spectrum.equals(t2Item.getDescSpectrum())) wafer = Wafer.MaskT2; - else if (spectrum.equals(t3Item.getDescSpectrum())) wafer = Wafer.MaskT3; - } - - // Found a wafer, stop checking inputs - if (wafer != null) break; - } - - int recipeTime = builder.duration; - // Bonus for using purified water of a higher tier than necessary - int halfBoostedRecipeTime = (int) (recipeTime * 0.75); - int boostedRecipeTime = (int) (recipeTime * 0.5); - - // If this recipe does not use a wafer, exit without modifying it. - if (wafer == null) return builder.addTo(RecipeMaps.laserEngraverRecipes); - switch (wafer) { - case Naquadah -> { - ArrayList items = new ArrayList<>(Arrays.asList(builder.getItemInputsBasic())); - ItemStack[] itemInputs = items.toArray(new ItemStack[] {}); - // Naquadah wafers can use grade 1-2 purified water for a bonus, otherwise use distilled so we don't - // have to - // deal with circuits - return GT_Utility.concat( - builder.copy() - .itemInputs(itemInputs) - .fluidInputs(GT_ModHandler.getDistilledWater(100L)) - .addTo(RecipeMaps.laserEngraverRecipes), - builder.copy() - .itemInputs(itemInputs) - .fluidInputs(Materials.Grade1PurifiedWater.getFluid(100L)) - .duration(halfBoostedRecipeTime) - .addTo(RecipeMaps.laserEngraverRecipes), - builder.copy() - .itemInputs(itemInputs) - .fluidInputs(Materials.Grade2PurifiedWater.getFluid(100L)) - .duration(boostedRecipeTime) - .addTo(RecipeMaps.laserEngraverRecipes)); - } - case Europium -> { - // Require purified water for europium wafers, at least grade 3 - return GT_Utility.concat( - builder.copy() - .fluidInputs(Materials.Grade3PurifiedWater.getFluid(100L)) - .duration(recipeTime) - .addTo(RecipeMaps.laserEngraverRecipes), - builder.copy() - .fluidInputs(Materials.Grade4PurifiedWater.getFluid(100L)) - .duration(boostedRecipeTime) - .addTo(RecipeMaps.laserEngraverRecipes)); - } - case Americium -> { - // Require purified water for americium wafers, at least grade 5 - return GT_Utility.concat( - builder.copy() - .fluidInputs(Materials.Grade5PurifiedWater.getFluid(100L)) - .duration(recipeTime) - .addTo(RecipeMaps.laserEngraverRecipes), - builder.copy() - .fluidInputs(Materials.Grade6PurifiedWater.getFluid(100L)) - .duration(boostedRecipeTime) - .addTo(RecipeMaps.laserEngraverRecipes)); - } - // Masks require much more purified water because they can make many wafers at once - case MaskT1 -> { - // T1 masks require grade 1, 2 or 3 purified water - return GT_Utility.concat( - builder.copy() - .fluidInputs(Materials.Grade1PurifiedWater.getFluid(32000L)) - .duration(recipeTime) - .addTo(RecipeMaps.laserEngraverRecipes), - builder.copy() - .fluidInputs(Materials.Grade2PurifiedWater.getFluid(32000L)) - .duration(halfBoostedRecipeTime) - .addTo(RecipeMaps.laserEngraverRecipes), - builder.copy() - .fluidInputs(Materials.Grade3PurifiedWater.getFluid(32000L)) - .duration(boostedRecipeTime) - .addTo(RecipeMaps.laserEngraverRecipes)); - } - case MaskT2 -> { - // T2 masks require grade 4 or 5 purified water - return GT_Utility.concat( - builder.copy() - .fluidInputs(Materials.Grade4PurifiedWater.getFluid(32000L)) - .duration(recipeTime) - .addTo(RecipeMaps.laserEngraverRecipes), - builder.copy() - .fluidInputs(Materials.Grade5PurifiedWater.getFluid(32000L)) - .duration(boostedRecipeTime) - .addTo(RecipeMaps.laserEngraverRecipes)); - } - case MaskT3 -> { - // T3 masks require grade 6, 7 or 8 purified water - return GT_Utility.concat( - builder.copy() - .fluidInputs(Materials.Grade6PurifiedWater.getFluid(32000L)) - .duration(recipeTime) - .addTo(RecipeMaps.laserEngraverRecipes), - builder.copy() - .fluidInputs(Materials.Grade7PurifiedWater.getFluid(32000L)) - .duration(halfBoostedRecipeTime) - .addTo(RecipeMaps.laserEngraverRecipes), - builder.copy() - .fluidInputs(Materials.Grade8PurifiedWater.getFluid(32000L)) - .duration(boostedRecipeTime) - .addTo(RecipeMaps.laserEngraverRecipes)); - } - } - - throw new RuntimeException("Unreachable code reached in Laser Engraver Recipe Transformer"); - }); - - /** - * The one and only :tm: assline recipe adder. - * Uses {@link #RESEARCH_ITEM} metadata as research item, and {@link #RESEARCH_TIME} metadata as research time, unit - * in ticks. - */ - public static final IRecipeMap AssemblyLine = IRecipeMap.newRecipeMap(builder -> { - Optional rr = builder.forceOreDictInput() - .validateInputCount(4, 16) - .validateOutputCount(1, 1) - .validateOutputFluidCount(-1, 0) - .validateInputFluidCount(1, 4) - .buildWithAlt(); - // noinspection SimplifyOptionalCallChains - if (!rr.isPresent()) return Collections.emptyList(); - GT_Recipe.GT_Recipe_WithAlt r = rr.get(); - ItemStack[][] mOreDictAlt = r.mOreDictAlt; - Object[] inputs = builder.getItemInputsOreDict(); - ItemStack aResearchItem = builder.getMetadata(RESEARCH_ITEM); - if (aResearchItem == null) { - return Collections.emptyList(); - } - ItemStack aOutput = r.mOutputs[0]; - int tPersistentHash = 1; - for (int i = 0, mOreDictAltLength = mOreDictAlt.length; i < mOreDictAltLength; i++) { - ItemStack[] alts = mOreDictAlt[i]; - Object input = inputs[i]; - if (input == null) { - GT_Log.err.println( - "addAssemblingLineRecipe " + aResearchItem.getDisplayName() - + " --> " - + aOutput.getUnlocalizedName() - + " there is some null item in that recipe"); - } - if (input instanceof ItemStack) { - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash((ItemStack) input, true, false); - } else if (input instanceof ItemStack[]) { - for (ItemStack alt : ((ItemStack[]) input)) { - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(alt, true, false); - if (alt == null) { - GT_Log.err.println( - "addAssemblingLineRecipe " + aResearchItem.getDisplayName() - + " --> " - + aOutput.getUnlocalizedName() - + " there is some null alt item in that recipe"); - } - } - tPersistentHash *= 31; - } else if (input instanceof Object[]objs) { - Arrays.sort( - alts, - Comparator - .comparing(s -> GameRegistry.findUniqueIdentifierFor(s.getItem()).modId) - .thenComparing(s -> GameRegistry.findUniqueIdentifierFor(s.getItem()).name) - .thenComparingInt(Items.feather::getDamage) - .thenComparingInt(s -> s.stackSize)); - - tPersistentHash = tPersistentHash * 31 + (objs[0] == null ? "" : objs[0].toString()).hashCode(); - tPersistentHash = tPersistentHash * 31 + ((Number) objs[1]).intValue(); - } - } - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(aResearchItem, true, false); - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(aOutput, true, false); - for (FluidStack fluidInput : r.mFluidInputs) { - if (fluidInput == null) continue; - tPersistentHash = tPersistentHash * 31 + GT_Utility.persistentHash(fluidInput, true, false); - } - int aResearchTime = builder.getMetadataOrDefault(RESEARCH_TIME, 0); - tPersistentHash = tPersistentHash * 31 + aResearchTime; - tPersistentHash = tPersistentHash * 31 + r.mDuration; - tPersistentHash = tPersistentHash * 31 + r.mEUt; - - GT_Recipe.GT_Recipe_AssemblyLine tRecipe = new GT_Recipe.GT_Recipe_AssemblyLine( - aResearchItem, - aResearchTime, - r.mInputs, - r.mFluidInputs, - aOutput, - r.mDuration, - r.mEUt, - r.mOreDictAlt); - tRecipe.setPersistentHash(tPersistentHash); - GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes.add(tRecipe); - GT_AssemblyLineUtils.addRecipeToCache(tRecipe); - - ItemStack writesDataStick = ItemList.Tool_DataStick.getWithName(1L, "Writes Research result"); - GT_AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(writesDataStick, tRecipe, false); - Collection ret = new ArrayList<>(3); - ret.addAll( - GT_Values.RA.stdBuilder() - .itemInputs(aResearchItem) - .itemOutputs(aOutput) - .special(writesDataStick) - .duration(aResearchTime) - .eut(TierEU.RECIPE_LV) - .specialValue(-201) // means it's scanned - .noOptimize() - .ignoreCollision() - .fake() - .addTo(scannerFakeRecipes)); - - ItemStack readsDataStick = ItemList.Tool_DataStick.getWithName(1L, "Reads Research result"); - GT_AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(readsDataStick, tRecipe, false); - ret.add( - RecipeMaps.assemblylineVisualRecipes.addFakeRecipe( - false, - r.mInputs, - new ItemStack[] { aOutput }, - new ItemStack[] { readsDataStick }, - r.mFluidInputs, - null, - r.mDuration, - r.mEUt, - 0, - r.mOreDictAlt, - false)); - - return ret; - }); - - /** - * Adds an Electric Blast Furnace recipe that might use gas. - */ - public static final IRecipeMap BlastFurnaceWithGas = IRecipeMap.newRecipeMap(builder -> { - Collection ret = new ArrayList<>(); - int basicGasAmount = builder.getMetadataOrDefault(ADDITIVE_AMOUNT, 1000); - double durationBase = builder.getDuration(); - ArrayList items = new ArrayList<>(Arrays.asList(builder.getItemInputsBasic())); - int circuitConfig = 1; - if (items.size() == 1) {// Set circuit config if it is a dust -> ingot recipe. - ItemData data = GT_OreDictUnificator.getAssociation(items.get(0)); - if (data != null) { - OrePrefixes prefix = data.mPrefix; - if (OrePrefixes.dust.equals(prefix)) { - circuitConfig = 1; - } else if (OrePrefixes.dustSmall.equals(prefix)) { - circuitConfig = 4; - } else if (OrePrefixes.dustTiny.equals(prefix)) { - circuitConfig = 9; - } - } - } else { // Set circuit config if there is an integrated circuit - for (int i = 0; i < items.size(); i++) { - if (GT_Utility.isAnyIntegratedCircuit(items.get(i))) { - circuitConfig = items.get(i) - .getItemDamage(); - items.remove(i--); - } - } - } - - if (builder.getMetadataOrDefault(NO_GAS, false)) { - items.add(GT_Utility.getIntegratedCircuit(circuitConfig)); - ret.addAll( - builder.copy() - .itemInputs(items.toArray(new ItemStack[0])) - .fluidInputs() - .duration((int) Math.max(durationBase * 1.1, 1)) - .addTo(RecipeMaps.blastFurnaceRecipes)); - items.remove(items.size() - 1); - circuitConfig += 10; - } - - items.add(GT_Utility.getIntegratedCircuit(circuitConfig)); - boolean nobleGases = builder.getMetadataOrDefault(NOBLE_GASES, false); - boolean anaerobeGases = builder.getMetadataOrDefault(ANAEROBE_GASES, false); - Collection gases = new ArrayList<>(); - - if (nobleGases && anaerobeGases) { - gases = BlastFurnaceGasStat.getNobleAndAnaerobeGases(); - } else if (nobleGases) { - gases = BlastFurnaceGasStat.getNobleGases(); - } else if (anaerobeGases) { - gases = BlastFurnaceGasStat.getAnaerobeGases(); - } - for (BlastFurnaceGasStat gas : gases) { - int gasAmount = (int) (gas.recipeConsumedAmountMultiplier * basicGasAmount); - int duration = (int) Math.max(gas.recipeTimeMultiplier * durationBase, 1); - ret.addAll( - builder.copy() - .itemInputs(items.toArray(new ItemStack[0])) - .fluidInputs(GT_Utility.copyAmount(gasAmount, gas.gas)) - .duration(duration) - .addTo(RecipeMaps.blastFurnaceRecipes)); - } - return ret; - }); - - /** - * Just like any normal assembler recipe, however it accepts one input item to be oredicted. Pass in the item to - * oredict via {@link #OREDICT_INPUT}. It will be used along all other item inputs as input of this recipe. - */ - public static IRecipeMap AssemblerOD = IRecipeMap.newRecipeMap(builder -> { - Collection ret = new ArrayList<>(); - for (ItemStack input : GT_OreDictUnificator.getOresImmutable(builder.getMetadata(OREDICT_INPUT))) { - ret.addAll( - builder.copy() - .itemInputs(GT_RecipeMapUtil.appendArray(builder.getItemInputsBasic(), input)) - .addTo(RecipeMaps.assemblerRecipes)); - } - return ret; - }); - - /** - * A universal fuel adder. It's actually just a dispatcher towards all actual fuel recipe maps. - * Dispatch based on {@link #FUEL_TYPE}. Uses {@link #FUEL_VALUE} as fuel value. - * Can use {@link FuelType#ordinal()} as a human-readable form of what FUEL_TYPE should be. - * You can bypass this and add to relevant fuel maps directly if you wish. - */ - public static IRecipeMap Fuel = IRecipeMap.newRecipeMap(builder -> { - builder.validateInputCount(1, 1) - .validateNoInputFluid() - .validateOutputCount(-1, 1) - .validateNoOutputFluid(); - if (!builder.isValid()) return Collections.emptyList(); - Integer fuelType = builder.getMetadata(FUEL_TYPE); - if (fuelType == null) return Collections.emptyList(); - builder.metadata(FUEL_VALUE, builder.getMetadataOrDefault(FUEL_VALUE, 0)); - return FuelType.get(fuelType) - .getTarget() - .doAdd(builder); - }); - - public enum FuelType { - - // ORDER MATTERS. DO NOT INSERT ELEMENT BETWEEN EXISTING ONES - DieselFuel(RecipeMaps.dieselFuels), - GasTurbine(RecipeMaps.gasTurbineFuels), - // appears unused - HotFuel(RecipeMaps.hotFuels), - SemiFluid(RecipeMaps.denseLiquidFuels), - PlasmaTurbine(RecipeMaps.plasmaFuels), - Magic(RecipeMaps.magicFuels),; - - private static final FuelType[] VALUES = values(); - private final IRecipeMap target; - - FuelType(IRecipeMap target) { - this.target = target; - } - - public static FuelType get(int fuelType) { - if (fuelType < 0 || fuelType >= VALUES.length) return SemiFluid; - return VALUES[fuelType]; - } - - public IRecipeMap getTarget() { - return target; - } - } - - static { - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(COIL_HEAT); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(FUSION_THRESHOLD); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(FUEL_VALUE); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(NANO_FORGE_TIER); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(FOG_EXOTIC_TIER); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(FOG_PLASMA_TIER); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(DEFC_CASING_TIER); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(CHEMPLANT_CASING_TIER); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(QFT_FOCUS_TIER); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(DISSOLUTION_TANK_RATIO); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(RTG_DURATION_IN_DAYS); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(LNG_BASIC_OUTPUT); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(NFR_COIL_TIER); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(NKE_RANGE); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(PRECISE_ASSEMBLER_CASING_TIER); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(COAL_CASING_TIER); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(COMPRESSION_TIER); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(RESEARCH_STATION_DATA); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(SIEVERTS); - GT_RecipeMapUtil.SPECIAL_VALUE_ALIASES.add(DECAY_TICKS); - - } -} diff --git a/src/main/java/gregtech/api/util/GT_RecipeMapUtil.java b/src/main/java/gregtech/api/util/GT_RecipeMapUtil.java deleted file mode 100644 index 67d50188fe..0000000000 --- a/src/main/java/gregtech/api/util/GT_RecipeMapUtil.java +++ /dev/null @@ -1,198 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.Mods.GregTech; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.function.Consumer; -import java.util.function.Function; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Multimap; - -import cpw.mods.fml.common.Loader; -import gnu.trove.list.TIntList; -import gnu.trove.list.array.TIntArrayList; -import gregtech.api.interfaces.IRecipeMap; -import gregtech.api.recipe.RecipeMetadataKey; - -/** - * Define helpers useful in the creation of recipe maps. - */ -public class GT_RecipeMapUtil { - - public static final Function ALL_FAKE_RECIPE = r -> { - r.mFakeRecipe = true; - return r; - }; - - private static final Map addonRecipeMaps = new HashMap<>(); - private static final Multimap> delayedActions = ArrayListMultimap.create(); - - /** - * Set of metadata that work as alias for special values. - */ - public static final Set> SPECIAL_VALUE_ALIASES = new HashSet<>(); - - public static T[] appendArray(T[] arr, T val) { - T[] newArr = Arrays.copyOf(arr, arr.length + 1); - newArr[arr.length] = val; - return newArr; - } - - public static GT_RecipeTemplate asTemplate(GT_Recipe r) { - return asTemplate(r, false); - } - - public static GT_RecipeTemplate asTemplate(GT_Recipe r, boolean includeTemplate) { - return new GT_RecipeTemplate(r, includeTemplate); - } - - public static List buildRecipeForMultiblock(GT_RecipeBuilder b) { - return buildOrEmpty(convertCellToFluid(b, true)); - - } - - public static List buildRecipeForMultiblockNoCircuit(GT_RecipeBuilder b) { - return buildOrEmpty(convertCellToFluid(b, false)); - } - - public static GT_RecipeBuilder convertCellToFluid(GT_RecipeBuilder b, boolean removeIntegratedCircuit) { - List itemInputs = new ArrayList<>(Arrays.asList(b.getItemInputsBasic())); - List itemOutputs = new ArrayList<>(Arrays.asList(b.getItemOutputs())); - List fluidInputs = new ArrayList<>(Arrays.asList(b.getFluidInputs())); - List fluidOutputs = new ArrayList<>(Arrays.asList(b.getFluidOutputs())); - TIntList chances = b.getChances() != null ? new TIntArrayList(b.getChances()) : null; - cellToFluid(itemInputs, fluidInputs, removeIntegratedCircuit, null); - cellToFluid(itemOutputs, fluidOutputs, removeIntegratedCircuit, chances); - itemInputs.removeIf(Objects::isNull); - if (chances == null) { - itemOutputs.removeIf(Objects::isNull); - } - fluidInputs.removeIf(Objects::isNull); - fluidOutputs.removeIf(Objects::isNull); - b.itemInputs(itemInputs.toArray(new ItemStack[0])); - b.itemOutputs(itemOutputs.toArray(new ItemStack[0]), chances != null ? chances.toArray() : null); - b.fluidInputs(fluidInputs.toArray(new FluidStack[0])); - b.fluidOutputs(fluidOutputs.toArray(new FluidStack[0])); - return b; - } - - private static void cellToFluid(List items, List fluids, boolean removeIntegratedCircuit, - TIntList chances) { - for (int i = items.size() - 1; i >= 0; i--) { - ItemStack item = items.get(i); - if (GT_Utility.getFluidForFilledItem(item, true) != null || GT_Utility.isCellEmpty(item) - || (removeIntegratedCircuit && GT_Utility.isAnyIntegratedCircuit(item))) { - fluids.add(GT_Utility.convertCellToFluid(item)); - items.remove(i); - if (chances != null) chances.removeAt(i); - } - } - } - - public static List buildOrEmpty(GT_RecipeBuilder builder) { - return builder.build() - .map(Collections::singletonList) - .orElse(Collections.emptyList()); - } - - /** - * Register a recipe map as part of your mod's public API under your modID and your given identifier. - * - * @param identifier map name - * @param recipeMap the map to register - * @param dependencies fully qualified identifier of dependent recipe maps. scheduler will only add recipes to one - * of the dependent recipe maps and this recipe map concurrently, guaranteeing thread safety. - * Currently unused, but you are advised to fill them, so that when The Day (tm) comes we don't - * end up with a bunch of weird concurrency bugs. - */ - public static void registerRecipeMap(String identifier, IRecipeMap recipeMap, RecipeMapDependency... dependencies) { - String modId = Loader.instance() - .activeModContainer() - .getModId(); - if (GregTech.ID.equals(modId)) throw new IllegalStateException( - "do not register recipe map under the name of gregtech! do it in your own preinit!"); - String id = modId + "@" + identifier; - addonRecipeMaps.put(id, recipeMap); - for (Consumer action : delayedActions.get(id)) { - action.accept(recipeMap); - } - } - - /** - * Use this to register recipes for a recipe map in addon not present at compile time. - *

- * Do not use this for recipes maps already in {@link GT_RecipeConstants}. None of them will be available via this - * interface! - * - * @param identifier recipe map id - * @param registerAction DO NOT ADD RECIPES TO MAPS OTHER THAN THE ONE PASSED TO YOU. DO NOT DO ANYTHING OTHER THAN - * ADDING RECIPES TO THIS R - */ - public static void registerRecipesFor(String modid, String identifier, Consumer registerAction) { - String id = modid + "@" + identifier; - IRecipeMap map = addonRecipeMaps.get(id); - if (map == null) delayedActions.put(id, registerAction); - else registerAction.accept(map); - } - - public static final class GT_RecipeTemplate { - - private final GT_Recipe template; - private final List derivatives = new ArrayList<>(); - - private GT_RecipeTemplate(GT_Recipe template, boolean includeTemplate) { - this.template = template; - if (includeTemplate) derivatives.add(template); - } - - public GT_Recipe derive() { - GT_Recipe derived = template.copyShallow(); - derivatives.add(derived); - return derived; - } - - public List getAll() { - // fix shallow references - Set references = Collections.newSetFromMap(new IdentityHashMap<>()); - for (GT_Recipe r : derivatives) { - if (!references.add(r.mInputs)) r.mInputs = r.mInputs.clone(); - if (!references.add(r.mOutputs)) r.mOutputs = r.mOutputs.clone(); - if (!references.add(r.mFluidInputs)) r.mFluidInputs = r.mFluidInputs.clone(); - if (!references.add(r.mFluidOutputs)) r.mFluidOutputs = r.mFluidOutputs.clone(); - } - return derivatives; - } - } - - public static final class RecipeMapDependency { - - private final IRecipeMap obj; - private final String id; - - public RecipeMapDependency(IRecipeMap obj, String id) { - this.obj = obj; - this.id = id; - } - - public static RecipeMapDependency create(String id) { - return new RecipeMapDependency(null, id); - } - - public static RecipeMapDependency create(IRecipeMap obj) { - return new RecipeMapDependency(obj, null); - } - } -} diff --git a/src/main/java/gregtech/api/util/GT_RecipeRegistrator.java b/src/main/java/gregtech/api/util/GT_RecipeRegistrator.java deleted file mode 100644 index 5acb15b242..0000000000 --- a/src/main/java/gregtech/api/util/GT_RecipeRegistrator.java +++ /dev/null @@ -1,872 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.enums.GT_Values.L; -import static gregtech.api.enums.GT_Values.M; -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.enums.GT_Values.VP; -import static gregtech.api.enums.Materials.Bronze; -import static gregtech.api.enums.Materials.Cobalt; -import static gregtech.api.enums.Materials.DarkSteel; -import static gregtech.api.enums.Materials.Diamond; -import static gregtech.api.enums.Materials.FierySteel; -import static gregtech.api.enums.Materials.Gold; -import static gregtech.api.enums.Materials.Iron; -import static gregtech.api.enums.Materials.IronWood; -import static gregtech.api.enums.Materials.Knightmetal; -import static gregtech.api.enums.Materials.Lead; -import static gregtech.api.enums.Materials.Ruby; -import static gregtech.api.enums.Materials.Sapphire; -import static gregtech.api.enums.Materials.Steel; -import static gregtech.api.enums.Materials.Steeleaf; -import static gregtech.api.enums.Materials.Thaumium; -import static gregtech.api.enums.Materials.Void; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.wiremillRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.RECYCLE; -import static gregtech.api.util.GT_RecipeConstants.UniversalArcFurnace; -import static gregtech.api.util.GT_Utility.calculateRecipeEU; -import static gregtech.api.util.GT_Utility.getTier; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.IdentityHashMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.item.crafting.ShapedRecipes; -import net.minecraft.item.crafting.ShapelessRecipes; -import net.minecraftforge.oredict.ShapedOreRecipe; -import net.minecraftforge.oredict.ShapelessOreRecipe; - -import com.google.common.collect.HashMultimap; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.SetMultimap; - -import cpw.mods.fml.relauncher.ReflectionHelper; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TierEU; -import gregtech.api.objects.ItemData; -import gregtech.api.objects.MaterialStack; -import gregtech.api.recipe.RecipeCategories; -import ic2.api.reactor.IReactorComponent; - -/** - * Class for Automatic Recipe registering. - */ -public class GT_RecipeRegistrator { - - /** - * List of Materials, which are used in the Creation of Sticks. All Rod Materials are automatically added to this - * List. - */ - public static final List sRodMaterialList = new ArrayList<>(); - - private static final ItemStack sMt1 = new ItemStack(Blocks.dirt, 1, 0), sMt2 = new ItemStack(Blocks.dirt, 1, 0); - private static final String s_H = "h", s_F = "f", s_I = "I", s_P = "P", s_R = "R"; - private static final RecipeShape[] sShapes = new RecipeShape[] { - new RecipeShape(sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1, null), - new RecipeShape(sMt1, null, sMt1, sMt1, null, sMt1, sMt1, sMt1, sMt1), - new RecipeShape(null, sMt1, null, sMt1, sMt1, sMt1, sMt1, null, sMt1), - new RecipeShape(sMt1, sMt1, sMt1, sMt1, null, sMt1, null, null, null), - new RecipeShape(sMt1, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1), - new RecipeShape(sMt1, sMt1, sMt1, sMt1, null, sMt1, sMt1, null, sMt1), - new RecipeShape(null, null, null, sMt1, null, sMt1, sMt1, null, sMt1), - new RecipeShape(null, sMt1, null, null, sMt1, null, null, sMt2, null), - new RecipeShape(sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2, null), - new RecipeShape(null, sMt1, null, null, sMt2, null, null, sMt2, null), - new RecipeShape(sMt1, sMt1, null, sMt1, sMt2, null, null, sMt2, null), - new RecipeShape(null, sMt1, sMt1, null, sMt2, sMt1, null, sMt2, null), - new RecipeShape(sMt1, sMt1, null, null, sMt2, null, null, sMt2, null), - new RecipeShape(null, sMt1, sMt1, null, sMt2, null, null, sMt2, null), - new RecipeShape(null, sMt1, null, sMt1, null, null, null, sMt1, sMt2), - new RecipeShape(null, sMt1, null, null, null, sMt1, sMt2, sMt1, null), - new RecipeShape(null, sMt1, null, sMt1, null, sMt1, null, null, sMt2), - new RecipeShape(null, sMt1, null, sMt1, null, sMt1, sMt2, null, null), - new RecipeShape(null, sMt2, null, null, sMt1, null, null, sMt1, null), - new RecipeShape(null, sMt2, null, null, sMt2, null, sMt1, sMt1, sMt1), - new RecipeShape(null, sMt2, null, null, sMt2, null, null, sMt1, null), - new RecipeShape(null, sMt2, null, sMt1, sMt2, null, sMt1, sMt1, null), - new RecipeShape(null, sMt2, null, null, sMt2, sMt1, null, sMt1, sMt1), - new RecipeShape(null, sMt2, null, null, sMt2, null, sMt1, sMt1, null), - new RecipeShape(sMt1, null, null, null, sMt2, null, null, null, sMt2), - new RecipeShape(null, null, sMt1, null, sMt2, null, sMt2, null, null), - new RecipeShape(sMt1, null, null, null, sMt2, null, null, null, null), - new RecipeShape(null, null, sMt1, null, sMt2, null, null, null, null), - new RecipeShape(sMt1, sMt2, null, null, null, null, null, null, null), - new RecipeShape(sMt2, sMt1, null, null, null, null, null, null, null), - new RecipeShape(sMt1, null, null, sMt2, null, null, null, null, null), - new RecipeShape(sMt2, null, null, sMt1, null, null, null, null, null), - new RecipeShape(sMt1, sMt1, sMt1, sMt1, sMt1, sMt1, null, sMt2, null), - new RecipeShape(sMt1, sMt1, null, sMt1, sMt1, sMt2, sMt1, sMt1, null), - new RecipeShape(null, sMt1, sMt1, sMt2, sMt1, sMt1, null, sMt1, sMt1), - new RecipeShape(null, sMt2, null, sMt1, sMt1, sMt1, sMt1, sMt1, sMt1), - new RecipeShape(sMt1, sMt1, sMt1, sMt1, sMt2, sMt1, null, sMt2, null), - new RecipeShape(sMt1, sMt1, null, sMt1, sMt2, sMt2, sMt1, sMt1, null), - new RecipeShape(null, sMt1, sMt1, sMt2, sMt2, sMt1, null, sMt1, sMt1), - new RecipeShape(null, sMt2, null, sMt1, sMt2, sMt1, sMt1, sMt1, sMt1), - new RecipeShape(sMt1, null, null, null, sMt1, null, null, null, null), - new RecipeShape(null, sMt1, null, sMt1, null, null, null, null, null), - new RecipeShape(sMt1, sMt1, null, sMt2, null, sMt1, sMt2, null, null), - new RecipeShape(null, sMt1, sMt1, sMt1, null, sMt2, null, null, sMt2) }; - public static final Field SHAPED_ORE_RECIPE_WIDTH = ReflectionHelper.findField(ShapedOreRecipe.class, "width"); - public static final Field SHAPED_ORE_RECIPE_HEIGHT = ReflectionHelper.findField(ShapedOreRecipe.class, "height"); - private static volatile Map> indexedRecipeListCache; - private static final String[][] sShapesA = new String[][] { null, null, null, - { "Helmet", s_P + s_P + s_P, s_P + s_H + s_P }, - { "ChestPlate", s_P + s_H + s_P, s_P + s_P + s_P, s_P + s_P + s_P }, - { "Pants", s_P + s_P + s_P, s_P + s_H + s_P, s_P + " " + s_P }, { "Boots", s_P + " " + s_P, s_P + s_H + s_P }, - { "Sword", " " + s_P + " ", s_F + s_P + s_H, " " + s_R + " " }, - { "Pickaxe", s_P + s_I + s_I, s_F + s_R + s_H, " " + s_R + " " }, - { "Shovel", s_F + s_P + s_H, " " + s_R + " ", " " + s_R + " " }, - { "Axe", s_P + s_I + s_H, s_P + s_R + " ", s_F + s_R + " " }, - { "Axe", s_P + s_I + s_H, s_P + s_R + " ", s_F + s_R + " " }, - { "Hoe", s_P + s_I + s_H, s_F + s_R + " ", " " + s_R + " " }, - { "Hoe", s_P + s_I + s_H, s_F + s_R + " ", " " + s_R + " " }, - { "Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R }, - { "Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R }, - { "Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R }, - { "Sickle", " " + s_P + " ", s_P + s_F + " ", s_H + s_P + s_R }, - { "Sword", " " + s_R + " ", s_F + s_P + s_H, " " + s_P + " " }, - { "Pickaxe", " " + s_R + " ", s_F + s_R + s_H, s_P + s_I + s_I }, - { "Shovel", " " + s_R + " ", " " + s_R + " ", s_F + s_P + s_H }, - { "Axe", s_F + s_R + " ", s_P + s_R + " ", s_P + s_I + s_H }, - { "Axe", s_F + s_R + " ", s_P + s_R + " ", s_P + s_I + s_H }, - { "Hoe", " " + s_R + " ", s_F + s_R + " ", s_P + s_I + s_H }, - { "Hoe", " " + s_R + " ", s_F + s_R + " ", s_P + s_I + s_H }, - { "Spear", s_P + s_H + " ", s_F + s_R + " ", " " + " " + s_R }, - { "Spear", s_P + s_H + " ", s_F + s_R + " ", " " + " " + s_R }, { "Knive", s_H + s_P, s_R + s_F }, - { "Knive", s_F + s_H, s_P + s_R }, { "Knive", s_F + s_H, s_P + s_R }, { "Knive", s_P + s_F, s_R + s_H }, - { "Knive", s_P + s_F, s_R + s_H }, null, null, null, null, - { "WarAxe", s_P + s_P + s_P, s_P + s_R + s_P, s_F + s_R + s_H }, null, null, null, - { "Shears", s_H + s_P, s_P + s_F }, { "Shears", s_H + s_P, s_P + s_F }, - { "Scythe", s_I + s_P + s_H, s_R + s_F + s_P, s_R + " " + " " }, - { "Scythe", s_H + s_P + s_I, s_P + s_F + s_R, " " + " " + s_R } }; - - static { - // flush the cache on post load finish - GregTech_API.sAfterGTPostload.add(() -> indexedRecipeListCache = null); - } - - public static void registerMaterialRecycling(ItemStack aStack, Materials aMaterial, long aMaterialAmount, - MaterialStack aByproduct) { - if (GT_Utility.isStackInvalid(aStack)) return; - if (aByproduct != null) { - aByproduct = aByproduct.clone(); - aByproduct.mAmount /= aStack.stackSize; - } - GT_OreDictUnificator.addItemData( - GT_Utility.copyAmount(1, aStack), - new ItemData(aMaterial, aMaterialAmount / aStack.stackSize, aByproduct)); - } - - public static void registerMaterialRecycling(ItemStack aStack, ItemData aData) { - if (GT_Utility.isStackInvalid(aStack) || GT_Utility.areStacksEqual(new ItemStack(Items.blaze_rod), aStack) - || aData == null - || !aData.hasValidMaterialData() - || !aData.mMaterial.mMaterial.mAutoGenerateRecycleRecipes - || aData.mMaterial.mAmount <= 0 - || GT_Utility.getFluidForFilledItem(aStack, false) != null - || aData.mMaterial.mMaterial.mSubTags.contains(SubTag.NO_RECIPES)) return; - registerReverseMacerating(GT_Utility.copyAmount(1, aStack), aData, aData.mPrefix == null); - if (!GT_Utility.areStacksEqual(GT_ModHandler.getIC2Item("iridiumOre", 1L), aStack)) { - registerReverseSmelting( - GT_Utility.copyAmount(1, aStack), - aData.mMaterial.mMaterial, - aData.mMaterial.mAmount, - true); - registerReverseFluidSmelting( - GT_Utility.copyAmount(1, aStack), - aData.mMaterial.mMaterial, - aData.mMaterial.mAmount, - aData.getByProduct(0)); - registerReverseArcSmelting(GT_Utility.copyAmount(1, aStack), aData); - } - } - - /** - * @param aStack the stack to be recycled. - * @param aMaterial the Material. - * @param aMaterialAmount the amount of it in Material Units. - */ - public static void registerReverseFluidSmelting(ItemStack aStack, Materials aMaterial, long aMaterialAmount, - MaterialStack aByproduct) { - if (aStack == null || aMaterial == null - || aMaterial.mSmeltInto.mStandardMoltenFluid == null - || !aMaterial.contains(SubTag.SMELTING_TO_FLUID) - || (L * aMaterialAmount) / (M * aStack.stackSize) <= 0) return; - - ItemStack recipeOutput = aByproduct == null ? null - : aByproduct.mMaterial.contains(SubTag.NO_SMELTING) || !aByproduct.mMaterial.contains(SubTag.METAL) - ? aByproduct.mMaterial.contains(SubTag.FLAMMABLE) - ? GT_OreDictUnificator.getDust(Materials.Ash, aByproduct.mAmount / 2) - : aByproduct.mMaterial.contains(SubTag.UNBURNABLE) - ? GT_OreDictUnificator.getDustOrIngot(aByproduct.mMaterial.mSmeltInto, aByproduct.mAmount) - : null - : GT_OreDictUnificator.getIngotOrDust(aByproduct.mMaterial.mSmeltInto, aByproduct.mAmount); - - GT_RecipeBuilder builder = RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1, aStack)); - if (recipeOutput != null) { - builder.itemOutputs(recipeOutput); - } - long powerUsage = Math.max(8, (long) Math.sqrt(2 * aMaterial.mSmeltInto.mStandardMoltenFluid.getTemperature())); - // avoid full amp recipes - int powerTier = getTier(powerUsage); - if (powerTier > 0 && powerTier < VP.length && powerUsage > VP[powerTier]) { - powerUsage = VP[powerTier]; - } - builder.fluidOutputs(aMaterial.mSmeltInto.getMolten((L * aMaterialAmount) / (M * aStack.stackSize))) - .duration((int) Math.max(1, (24 * aMaterialAmount) / M)) - .eut(powerUsage) - .recipeCategory(RecipeCategories.fluidExtractorRecycling) - .addTo(fluidExtractionRecipes); - } - - /** - * @param aStack the stack to be recycled. - * @param aMaterial the Material. - * @param aMaterialAmount the amount of it in Material Units. - * @param aAllowAlloySmelter if it is allowed to be recycled inside the Alloy Smelter. - */ - public static void registerReverseSmelting(ItemStack aStack, Materials aMaterial, long aMaterialAmount, - boolean aAllowAlloySmelter) { - if (aStack == null || aMaterial == null - || aMaterialAmount <= 0 - || aMaterial.contains(SubTag.NO_SMELTING) - || (aMaterialAmount > M && aMaterial.contains(SubTag.METAL)) - || (aMaterial.getProcessingMaterialTierEU() > TierEU.IV)) return; - if (aMaterial == Materials.Naquadah || aMaterial == Materials.NaquadahEnriched) return; - - aMaterialAmount /= aStack.stackSize; - - if (aAllowAlloySmelter) GT_ModHandler.addSmeltingAndAlloySmeltingRecipe( - GT_Utility.copyAmount(1, aStack), - GT_OreDictUnificator.getIngot(aMaterial.mSmeltInto, aMaterialAmount), - false); - else GT_ModHandler.addSmeltingRecipe( - GT_Utility.copyAmount(1, aStack), - GT_OreDictUnificator.getIngot(aMaterial.mSmeltInto, aMaterialAmount)); - } - - public static void registerReverseArcSmelting(ItemStack aStack, Materials aMaterial, long aMaterialAmount, - MaterialStack aByProduct01, MaterialStack aByProduct02, MaterialStack aByProduct03) { - registerReverseArcSmelting( - aStack, - new ItemData( - aMaterial == null ? null : new MaterialStack(aMaterial, aMaterialAmount), - aByProduct01, - aByProduct02, - aByProduct03)); - } - - public static void registerReverseArcSmelting(ItemStack aStack, ItemData aData) { - if (aStack == null || aData == null) return; - aData = new ItemData(aData); - - if (!aData.hasValidMaterialData()) return; - boolean isRecycle = true; - - for (MaterialStack tMaterial : aData.getAllMaterialStacks()) { - if (tMaterial.mMaterial == Materials.Iron || tMaterial.mMaterial == Materials.Copper - || tMaterial.mMaterial == Materials.WroughtIron - || tMaterial.mMaterial == Materials.AnnealedCopper) { - ItemData stackData = GT_OreDictUnificator.getItemData(aStack); - if (stackData != null - && (stackData.mPrefix == OrePrefixes.ingot || stackData.mPrefix == OrePrefixes.dust)) { - // iron ingot/dust -> wrought iron, copper ingot/dust -> annealed copper - isRecycle = false; - } - } - - if (tMaterial.mMaterial.contains(SubTag.UNBURNABLE)) { - tMaterial.mMaterial = tMaterial.mMaterial.mSmeltInto.mArcSmeltInto; - continue; - } - if (tMaterial.mMaterial.contains(SubTag.EXPLOSIVE)) { - tMaterial.mMaterial = Materials.Ash; - tMaterial.mAmount /= 16; - continue; - } - if (tMaterial.mMaterial.contains(SubTag.FLAMMABLE)) { - tMaterial.mMaterial = Materials.Ash; - tMaterial.mAmount /= 8; - continue; - } - if (tMaterial.mMaterial.contains(SubTag.NO_SMELTING)) { - tMaterial.mAmount = 0; - continue; - } - if (tMaterial.mMaterial.contains(SubTag.METAL)) { - - tMaterial.mMaterial = tMaterial.mMaterial.mSmeltInto.mArcSmeltInto; - continue; - } - tMaterial.mAmount = 0; - } - - aData = new ItemData(aData); - if (aData.mByProducts.length > 3) for (MaterialStack tMaterial : aData.getAllMaterialStacks()) { - if (tMaterial.mMaterial == Materials.Ash) tMaterial.mAmount = 0; - } - - aData = new ItemData(aData); - - if (!aData.hasValidMaterialData()) return; - - long tAmount = 0; - for (MaterialStack tMaterial : aData.getAllMaterialStacks()) - tAmount += tMaterial.mAmount * tMaterial.mMaterial.getMass(); - - ArrayList outputs = new ArrayList<>(); - if (GT_OreDictUnificator.getIngotOrDust(aData.mMaterial) != null) { - outputs.add(GT_OreDictUnificator.getIngotOrDust(aData.mMaterial)); - } - for (int i = 0; i < 8; i++) { - if (GT_OreDictUnificator.getIngotOrDust(aData.getByProduct(i)) != null) { - outputs.add(GT_OreDictUnificator.getIngotOrDust(aData.getByProduct(i))); - } - } - if (!outputs.isEmpty()) { - GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder(); - recipeBuilder.itemInputs(aStack) - .itemOutputs(outputs.toArray(new ItemStack[0])) - .fluidInputs(Materials.Oxygen.getGas((int) Math.max(16, tAmount / M))) - .duration(((int) Math.max(16, tAmount / M)) * TICKS) - .eut(90) - .metadata(RECYCLE, isRecycle) - .addTo(UniversalArcFurnace); - } - - } - - public static void registerReverseMacerating(ItemStack aStack, Materials aMaterial, long aMaterialAmount, - MaterialStack aByProduct01, MaterialStack aByProduct02, MaterialStack aByProduct03, boolean aAllowHammer) { - registerReverseMacerating( - aStack, - new ItemData( - aMaterial == null ? null : new MaterialStack(aMaterial, aMaterialAmount), - aByProduct01, - aByProduct02, - aByProduct03), - aAllowHammer); - } - - public static void registerReverseMacerating(ItemStack aStack, ItemData aData, boolean aAllowHammer) { - if (aStack == null || aData == null) return; - aData = new ItemData(aData); - - if (!aData.hasValidMaterialData()) return; - - for (MaterialStack tMaterial : aData.getAllMaterialStacks()) - tMaterial.mMaterial = tMaterial.mMaterial.mMacerateInto; - - aData = new ItemData(aData); - - if (!aData.hasValidMaterialData()) return; - - long tAmount = 0; - for (MaterialStack tMaterial : aData.getAllMaterialStacks()) { - tAmount += tMaterial.mAmount * tMaterial.mMaterial.getMass(); - } - - { - ArrayList outputs = new ArrayList<>(); - if (GT_OreDictUnificator.getDust(aData.mMaterial) != null) { - outputs.add(GT_OreDictUnificator.getDust(aData.mMaterial)); - } - for (int i = 0; i < 3; i++) { - if (GT_OreDictUnificator.getDust(aData.getByProduct(i)) != null) { - outputs.add(GT_OreDictUnificator.getDust(aData.getByProduct(i))); - } - } - if (!outputs.isEmpty()) { - ItemStack[] outputsArray = outputs.toArray(new ItemStack[0]); - GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder(); - recipeBuilder.itemInputs(aStack) - .itemOutputs(outputsArray) - .duration( - (aData.mMaterial.mMaterial == Materials.Marble ? 1 : (int) Math.max(16, tAmount / M)) * TICKS) - .eut(4) - .recipeCategory(RecipeCategories.maceratorRecycling) - .addTo(maceratorRecipes); - } - } - - if (!aAllowHammer) { - return; - } - - for (MaterialStack tMaterial : aData.getAllMaterialStacks()) { - if (tMaterial.mMaterial.contains(SubTag.CRYSTAL) && !tMaterial.mMaterial.contains(SubTag.METAL) - && tMaterial.mMaterial != Materials.Glass - && GT_OreDictUnificator.getDust(aData.mMaterial) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1, aStack)) - .itemOutputs(GT_OreDictUnificator.getDust(aData.mMaterial)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LV) - .recipeCategory(RecipeCategories.forgeHammerRecycling) - .addTo(hammerRecipes); - break; - } - } - - } - - /** - * Place Materials which you want to replace in Non-GT-Recipes here (warning HUGHE impact on loading times!) - */ - private static final Materials[] VANILLA_MATS = { Cobalt, Gold, Iron, Lead, FierySteel, Void, Bronze, Diamond, Ruby, - Sapphire, Steel, IronWood, Steeleaf, Knightmetal, Thaumium, DarkSteel, }; - - /** - * You give this Function a Material and it will scan almost everything for adding recycling Recipes and replacing - * Ingots, Gems etc. - * - * @param aMats Materials, for example an Ingot or a Gem. - * @param aPlate the Plate referenced to aMat - * @param aRecipeReplacing allows to replace the Recipe with a Plate variant - */ - public static synchronized void registerUsagesForMaterials(String aPlate, boolean aRecipeReplacing, - ItemStack... aMats) { - for (ItemStack aMat : aMats) { - aMat = GT_Utility.copyOrNull(aMat); - - if (aMat == null) continue; - - ItemData aItemData = GT_OreDictUnificator.getItemData(aMat); - if (aItemData == null || aItemData.mPrefix != OrePrefixes.ingot) aPlate = null; - if (aPlate != null && GT_OreDictUnificator.getFirstOre(aPlate, 1) == null) aPlate = null; - - sMt1.func_150996_a(aMat.getItem()); - sMt1.stackSize = 1; - Items.feather.setDamage(sMt1, Items.feather.getDamage(aMat)); - - sMt2.func_150996_a(new ItemStack(Blocks.dirt).getItem()); - sMt2.stackSize = 1; - Items.feather.setDamage(sMt2, 0); - - if (aItemData != null && aItemData.hasValidPrefixMaterialData()) { - for (RecipeShape tRecipe : sShapes) { - for (ItemStack tCrafted : GT_ModHandler.getRecipeOutputsBuffered(tRecipe.shape)) { - GT_OreDictUnificator.addItemData( - tCrafted, - new ItemData(aItemData.mMaterial.mMaterial, aItemData.mMaterial.mAmount * tRecipe.amount1)); - // - // GT_Log.out.println("###################################################################################"); - // GT_Log.out.println("registerUsagesForMaterials used aPlate: "+aPlate); - // GT_Log.out.println("registerUsagesForMaterials used aPlate: - // "+aMat.getUnlocalizedName()); - // GT_Log.out.println("registerUsagesForMaterials used aPlate: - // "+aMat.getDisplayName()); - // - // GT_Log.out.println("###################################################################################"); - } - } - } - registerStickStuff(aPlate, aItemData, aRecipeReplacing); - } - } - - private static List getRecipeList(RecipeShape shape) { - boolean force = !GregTech_API.sPostloadStarted || GregTech_API.sPostloadFinished; - if (force || indexedRecipeListCache == null) { - synchronized (GT_RecipeRegistrator.class) { - if (indexedRecipeListCache == null || force) { - indexedRecipeListCache = createIndexedRecipeListCache(); - } - } - } - return indexedRecipeListCache.get(shape); - } - - private static Map> createIndexedRecipeListCache() { - Map> result = new IdentityHashMap<>(); - ArrayList allRecipeList = (ArrayList) CraftingManager.getInstance() - .getRecipeList(); - // filter using the empty slots in the shape. - // if the empty slots doesn't match, the recipe will definitely fail - SetMultimap, RecipeShape> filter = HashMultimap.create(); - for (RecipeShape shape : sShapes) { - for (List list : shape.getEmptySlotsAllVariants()) { - filter.put(list, shape); - } - } - List buffer = new ArrayList<>(9); - for (IRecipe tRecipe : allRecipeList) { - if (tRecipe instanceof ShapelessRecipes || tRecipe instanceof ShapelessOreRecipe) { - // we don't target shapeless recipes - continue; - } - buffer.clear(); - ItemStack tStack = tRecipe.getRecipeOutput(); - if (GT_Utility.isStackValid(tStack) && tStack.getMaxStackSize() == 1 - && tStack.getMaxDamage() > 0 - && !(tStack.getItem() instanceof ItemBlock) - && !(tStack.getItem() instanceof IReactorComponent) - && !GT_ModHandler.isElectricItem(tStack) - && !GT_Utility.isStackInList(tStack, GT_ModHandler.sNonReplaceableItems)) { - if (tRecipe instanceof ShapedOreRecipe tShapedRecipe) { - if (checkRecipeShape( - buffer, - tShapedRecipe.getInput(), - getRecipeWidth(tShapedRecipe), - getRecipeHeight(tShapedRecipe))) { - for (RecipeShape s : filter.get(buffer)) { - result.computeIfAbsent(s, k -> new ArrayList<>()) - .add(tRecipe); - } - } - } else if (tRecipe instanceof ShapedRecipes tShapedRecipe) { - if (checkRecipeShape( - buffer, - tShapedRecipe.recipeItems, - getRecipeWidth(tShapedRecipe), - getRecipeHeight(tShapedRecipe))) { - for (RecipeShape s : filter.get(buffer)) { - result.computeIfAbsent(s, k -> new ArrayList<>()) - .add(tRecipe); - } - } - } else { - for (RecipeShape s : sShapes) { - // unknown recipe type. cannot determine empty slots. we choose to add to the recipe list for - // all shapes - result.computeIfAbsent(s, k -> new ArrayList<>()) - .add(tRecipe); - } - } - } - } - return result; - } - - private static boolean checkRecipeShape(List emptySlotIndexesBuffer, Object[] input, int tRecipeWidth, - int tRecipeHeight) { - for (int y = 0; y < 3; y++) { - for (int x = 0; x < 3; x++) { - if (x >= tRecipeWidth || y >= tRecipeHeight) { - emptySlotIndexesBuffer.add(x + y * 3); - continue; - } - Object tObject = input[x + y * tRecipeWidth]; - if (tObject == null) { - emptySlotIndexesBuffer.add(x + y * 3); - continue; - } - if (tObject instanceof ItemStack - && (((ItemStack) tObject).getItem() == null || ((ItemStack) tObject).getMaxStackSize() < 2 - || ((ItemStack) tObject).getMaxDamage() > 0 - || ((ItemStack) tObject).getItem() instanceof ItemBlock)) { - return false; - } - if (tObject instanceof List && ((List) tObject).isEmpty()) { - return false; - } - } - } - return true; - } - - private static synchronized void registerStickStuff(String aPlate, ItemData aItemData, boolean aRecipeReplacing) { - ItemStack tStack; - for (Materials tMaterial : sRodMaterialList) { - ItemStack tMt2 = GT_OreDictUnificator.get(OrePrefixes.stick, tMaterial, 1); - if (tMt2 != null) { - sMt2.func_150996_a(tMt2.getItem()); - sMt2.stackSize = 1; - Items.feather.setDamage(sMt2, Items.feather.getDamage(tMt2)); - - for (int i = 0; i < sShapes.length; i++) { - RecipeShape tRecipe = sShapes[i]; - - for (ItemStack tCrafted : GT_ModHandler - .getRecipeOutputs(getRecipeList(tRecipe), true, tRecipe.shape)) { - if (aItemData != null && aItemData.hasValidPrefixMaterialData()) - GT_OreDictUnificator.addItemData( - tCrafted, - new ItemData( - aItemData.mMaterial.mMaterial, - aItemData.mMaterial.mAmount * tRecipe.amount1, - new MaterialStack(tMaterial, OrePrefixes.stick.mMaterialAmount * tRecipe.amount2))); - - if (aRecipeReplacing && aPlate != null && sShapesA[i] != null && sShapesA[i].length > 1) { - assert aItemData != null; - - if (null != (tStack = GT_ModHandler.removeRecipe(tRecipe.shape))) { - switch (sShapesA[i].length) { - case 2 -> GT_ModHandler.addCraftingRecipe( - tStack, - GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { sShapesA[i][1], s_P.charAt(0), aPlate, s_R.charAt(0), - OrePrefixes.stick.get(tMaterial), s_I.charAt(0), aItemData }); - case 3 -> GT_ModHandler.addCraftingRecipe( - tStack, - GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { sShapesA[i][1], sShapesA[i][2], s_P.charAt(0), aPlate, - s_R.charAt(0), OrePrefixes.stick.get(tMaterial), s_I.charAt(0), - aItemData }); - default -> GT_ModHandler.addCraftingRecipe( - tStack, - GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { sShapesA[i][1], sShapesA[i][2], sShapesA[i][3], s_P.charAt(0), - aPlate, s_R.charAt(0), OrePrefixes.stick.get(tMaterial), s_I.charAt(0), - aItemData }); - } - } - } - } - } - } - } - } - - /** - * Registers wiremill recipes for given material using integrated circuits. - * - * @param aMaterial material to register - * @param baseDuration base duration ticks for ingot -> 1x wire recipe - * @param aEUt EU/t for recipe If you provide a proper EU tier for recipe processing then aEUt will be - * overriden with it. - */ - public static void registerWiremillRecipes(Materials aMaterial, int baseDuration, int aEUt) { - registerWiremillRecipes( - aMaterial, - baseDuration, - calculateRecipeEU(aMaterial, aEUt), - OrePrefixes.ingot, - OrePrefixes.stick, - 2); - } - - /** - * Registers wiremill recipes for given material using integrated circuits. - * - * @param aMaterial material to register - * @param baseDuration base duration ticks for ingot -> 1x wire recipe - * @param aEUt EU/t for recipe - * @param prefix1 prefix corresponds to ingot - * @param prefix2 prefix corresponds to stick - * @param multiplier amount of wires created from 1 ingot - */ - public static void registerWiremillRecipes(Materials aMaterial, int baseDuration, int aEUt, OrePrefixes prefix1, - OrePrefixes prefix2, int multiplier) { - if (GT_OreDictUnificator.get(prefix1, aMaterial, 1L) != null - && GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(prefix1, aMaterial, 1L), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, multiplier)) - .duration(baseDuration * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(prefix1, aMaterial, 2L / multiplier), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt02, aMaterial, 1L)) - .duration(((int) (baseDuration * 1.5f)) * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(prefix1, aMaterial, 4L / multiplier), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt04, aMaterial, 1L)) - .duration(baseDuration * 2 * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(prefix1, aMaterial, 8L / multiplier), - GT_Utility.getIntegratedCircuit(8)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt08, aMaterial, 1L)) - .duration(((int) (baseDuration * 2.5f)) * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(prefix1, aMaterial, 12L / multiplier), - GT_Utility.getIntegratedCircuit(12)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt12, aMaterial, 1L)) - .duration(baseDuration * 3 * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(prefix1, aMaterial, 16L / multiplier), - GT_Utility.getIntegratedCircuit(16)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt16, aMaterial, 1L)) - .duration(((int) (baseDuration * 3.5f)) * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - } - - if (GT_OreDictUnificator.get(prefix2, aMaterial, 1L) != null - && GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(prefix2, aMaterial, 1L), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 2L / multiplier)) - .duration(((int) (baseDuration * 0.5f)) * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(prefix2, aMaterial, 4L / multiplier), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt02, aMaterial, 1L)) - .duration(baseDuration * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(prefix2, aMaterial, 8L / multiplier), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt04, aMaterial, 1L)) - .duration(((int) (baseDuration * 1.5f)) * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(prefix2, aMaterial, 16L / multiplier), - GT_Utility.getIntegratedCircuit(8)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt08, aMaterial, 1L)) - .duration(baseDuration * 2 * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(prefix2, aMaterial, 24L / multiplier), - GT_Utility.getIntegratedCircuit(12)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt12, aMaterial, 1L)) - .duration(((int) (baseDuration * 2.5f)) * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(prefix2, aMaterial, 32L / multiplier), - GT_Utility.getIntegratedCircuit(16)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt16, aMaterial, 1L)) - .duration(baseDuration * 3 * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - } - if (GT_OreDictUnificator.get(prefix1, aMaterial, 1L) != null - && GT_OreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(prefix1, aMaterial, 1L), GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 4L * multiplier)) - .duration(baseDuration * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - } - if (GT_OreDictUnificator.get(prefix2, aMaterial, 1L) != null - && GT_OreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 1L) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(prefix2, aMaterial, 1L), GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 2L * multiplier)) - .duration(((int) (baseDuration * 0.5f)) * TICKS) - .eut(aEUt) - .addTo(wiremillRecipes); - } - } - - public static boolean hasVanillaRecipes(Materials materials) { - return Arrays.stream(VANILLA_MATS) - .anyMatch(mat -> mat == materials); - } - - private static int getRecipeWidth(ShapedOreRecipe r) { - try { - return (int) SHAPED_ORE_RECIPE_WIDTH.get(r); - } catch (ReflectiveOperationException e) { - throw new RuntimeException(e); - } - } - - private static int getRecipeHeight(ShapedOreRecipe r) { - try { - return (int) SHAPED_ORE_RECIPE_HEIGHT.get(r); - } catch (ReflectiveOperationException e) { - throw new RuntimeException(e); - } - } - - private static int getRecipeHeight(ShapedRecipes r) { - return r.recipeHeight; - } - - private static int getRecipeWidth(ShapedRecipes r) { - return r.recipeWidth; - } - - private static class RecipeShape { - - private final ItemStack[] shape; - private int amount1; - private int amount2; - - public RecipeShape(ItemStack... shape) { - this.shape = shape; - - for (ItemStack stack : shape) { - if (stack == sMt1) this.amount1++; - if (stack == sMt2) this.amount2++; - } - } - - public List> getEmptySlotsAllVariants() { - // "shake" the grid in 8 direction and see if the recipe shape is still valid - // also include the "no movement" case - ImmutableList.Builder> b = ImmutableList.builder(); - for (int i = -1; i < 2; i++) { - if (i != 0 && !isColClear(i + 1)) continue; - for (int j = -1; j < 2; j++) { - if (j != 0 && !isRowClear(j + 1)) continue; - b.add(getEmptySlots(i, j)); - } - } - return b.build(); - } - - private boolean isRowClear(int row) { - for (int i = 0; i < 3; i++) { - if (shape[i + row * 3] != null) return false; - } - return true; - } - - private boolean isColClear(int col) { - for (int i = 0; i < 3; i++) { - if (shape[col + i * 3] != null) return false; - } - return true; - } - - private List getEmptySlots(int offsetX, int offsetY) { - ImmutableList.Builder b = ImmutableList.builder(); - for (int i = 0; i < shape.length; i++) { - int mappedIndex = i - offsetX - offsetY * 3; - // empty slot if it either - // 1) map to a slot outside the original shape - // 2) map to an empty slot in original shape - if (mappedIndex < 0 || mappedIndex > 8 || shape[mappedIndex] == null) b.add(i); - } - return b.build(); - } - } -} diff --git a/src/main/java/gregtech/api/util/GT_RenderingWorld.java b/src/main/java/gregtech/api/util/GT_RenderingWorld.java deleted file mode 100644 index 7220b921a5..0000000000 --- a/src/main/java/gregtech/api/util/GT_RenderingWorld.java +++ /dev/null @@ -1,195 +0,0 @@ -package gregtech.api.util; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Objects; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.ChunkPosition; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.event.world.ChunkEvent; -import net.minecraftforge.event.world.WorldEvent; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.eventhandler.EventPriority; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent; - -/** - * Provide a fake IBlockAccess to support CTM. Facade are supposed to set these when they are placed/received by client. - */ -public class GT_RenderingWorld implements IBlockAccess { - - private static final GT_RenderingWorld INSTANCE = new GT_RenderingWorld(); - /* - * I do not think this map would ever grow too huge, so I won't go too overcomplicated on this one - */ - private final Map infos = new HashMap<>(); - private final Map> index = new HashMap<>(); - private IBlockAccess mWorld = Minecraft.getMinecraft().theWorld; - - private GT_RenderingWorld() { - new FMLEventHandler(); - new ForgeEventHandler(); - } - - public static GT_RenderingWorld getInstance() { - return INSTANCE; - } - - public static GT_RenderingWorld getInstance(IBlockAccess aWorld) { - if (aWorld == INSTANCE) return INSTANCE; - if (aWorld == null) INSTANCE.mWorld = Minecraft.getMinecraft().theWorld; - else INSTANCE.mWorld = aWorld; - return INSTANCE; - } - - private void setWorld(IBlockAccess aWorld) { - if (aWorld == null) mWorld = Minecraft.getMinecraft().theWorld; - else mWorld = aWorld; - } - - public void register(int x, int y, int z, Block block, int meta) { - ChunkPosition key = new ChunkPosition(x, y, z); - infos.put(key, new BlockInfo(block, meta)); - index.computeIfAbsent(new ChunkCoordIntPair(x >> 4, z >> 4), p -> new HashSet<>()) - .add(key); - } - - public void unregister(int x, int y, int z, Block block, int meta) { - ChunkPosition key = new ChunkPosition(x, y, z); - if (infos.remove(key, new BlockInfo(block, meta))) { - ChunkCoordIntPair chunkKey = new ChunkCoordIntPair(x >> 4, z >> 4); - Set set = index.get(chunkKey); - set.remove(key); - if (set.isEmpty()) index.remove(chunkKey); - } - } - - @Override - public Block getBlock(int p_147439_1_, int p_147439_2_, int p_147439_3_) { - BlockInfo blockInfo = infos.get(new ChunkPosition(p_147439_1_, p_147439_2_, p_147439_3_)); - return blockInfo != null ? blockInfo.block : mWorld.getBlock(p_147439_1_, p_147439_2_, p_147439_3_); - } - - @Override - public TileEntity getTileEntity(int p_147438_1_, int p_147438_2_, int p_147438_3_) { - return mWorld.getTileEntity(p_147438_1_, p_147438_2_, p_147438_3_); - } - - @Override - public int getLightBrightnessForSkyBlocks(int p_72802_1_, int p_72802_2_, int p_72802_3_, int p_72802_4_) { - return mWorld.getLightBrightnessForSkyBlocks(p_72802_1_, p_72802_2_, p_72802_3_, p_72802_4_); - } - - @Override - public int getBlockMetadata(int p_72805_1_, int p_72805_2_, int p_72805_3_) { - BlockInfo blockInfo = infos.get(new ChunkPosition(p_72805_1_, p_72805_2_, p_72805_3_)); - return blockInfo != null ? blockInfo.meta : mWorld.getBlockMetadata(p_72805_1_, p_72805_2_, p_72805_3_); - } - - @Override - public int isBlockProvidingPowerTo(int p_72879_1_, int p_72879_2_, int p_72879_3_, int p_72879_4_) { - return mWorld.isBlockProvidingPowerTo(p_72879_1_, p_72879_2_, p_72879_3_, p_72879_4_); - } - - @Override - public boolean isAirBlock(int p_147437_1_, int p_147437_2_, int p_147437_3_) { - return getBlock(p_147437_1_, p_147437_2_, p_147437_3_).isAir(mWorld, p_147437_1_, p_147437_2_, p_147437_3_); - } - - @Override - public BiomeGenBase getBiomeGenForCoords(int p_72807_1_, int p_72807_2_) { - return mWorld.getBiomeGenForCoords(p_72807_1_, p_72807_2_); - } - - @Override - public int getHeight() { - return mWorld.getHeight(); - } - - @Override - public boolean extendedLevelsInChunkCache() { - return mWorld.extendedLevelsInChunkCache(); - } - - @Override - public boolean isSideSolid(int x, int y, int z, ForgeDirection side, boolean _default) { - return getBlock(x, y, z).isSideSolid(this, x, y, z, side); - } - - public class FMLEventHandler { - - public FMLEventHandler() { - FMLCommonHandler.instance() - .bus() - .register(this); - } - - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onRenderTickStart(TickEvent.RenderTickEvent e) { - if (e.phase == TickEvent.Phase.START) mWorld = Minecraft.getMinecraft().theWorld; - } - } - - public class ForgeEventHandler { - - private ForgeEventHandler() { - MinecraftForge.EVENT_BUS.register(this); - } - - @SubscribeEvent - public void onChunkUnloaded(ChunkEvent.Unload e) { - if (!e.world.isRemote) return; - Set set = index.remove( - e.getChunk() - .getChunkCoordIntPair()); - if (set != null) infos.keySet() - .removeAll(set); - } - - @SubscribeEvent - public void onWorldUnloaded(WorldEvent.Unload e) { - if (!e.world.isRemote) return; - infos.clear(); - index.clear(); - } - } - - private static class BlockInfo { - - private final Block block; - private final int meta; - - public BlockInfo(Block block, int meta) { - this.block = block; - this.meta = meta; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - BlockInfo blockInfo = (BlockInfo) o; - - if (meta != blockInfo.meta) return false; - return Objects.equals(block, blockInfo.block); - } - - @Override - public int hashCode() { - int result = block != null ? block.hashCode() : 0; - result = 31 * result + meta; - return result; - } - } -} diff --git a/src/main/java/gregtech/api/util/GT_Shaped_Recipe.java b/src/main/java/gregtech/api/util/GT_Shaped_Recipe.java deleted file mode 100644 index 95a1a0bb66..0000000000 --- a/src/main/java/gregtech/api/util/GT_Shaped_Recipe.java +++ /dev/null @@ -1,100 +0,0 @@ -package gregtech.api.util; - -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.oredict.ShapedOreRecipe; - -import gregtech.api.interfaces.internal.IGT_CraftingRecipe; - -public class GT_Shaped_Recipe extends ShapedOreRecipe implements IGT_CraftingRecipe { - - public final boolean mRemovableByGT, mKeepingNBT; - private final Enchantment[] mEnchantmentsAdded; - private final int[] mEnchantmentLevelsAdded; - - public GT_Shaped_Recipe(ItemStack aResult, boolean aDismantleAble, boolean aRemovableByGT, boolean aKeepingNBT, - Enchantment[] aEnchantmentsAdded, int[] aEnchantmentLevelsAdded, Object... aRecipe) { - super(aResult, aRecipe); - mEnchantmentsAdded = aEnchantmentsAdded; - mEnchantmentLevelsAdded = aEnchantmentLevelsAdded; - mRemovableByGT = aRemovableByGT; - mKeepingNBT = aKeepingNBT; - } - - @Override - public boolean matches(InventoryCrafting aGrid, World aWorld) { - if (mKeepingNBT) { - ItemStack tStack = null; - for (int i = 0; i < aGrid.getSizeInventory(); i++) { - if (aGrid.getStackInSlot(i) != null) { - if (tStack != null) { - if ((tStack.hasTagCompound() != aGrid.getStackInSlot(i) - .hasTagCompound()) || (tStack.hasTagCompound() - && !tStack.getTagCompound() - .equals( - aGrid.getStackInSlot(i) - .getTagCompound()))) - return false; - } - tStack = aGrid.getStackInSlot(i); - } - } - } - return super.matches(aGrid, aWorld); - } - - @Override - public ItemStack getCraftingResult(InventoryCrafting aGrid) { - ItemStack rStack = super.getCraftingResult(aGrid); - if (rStack != null) { - // Update the Stack - GT_Utility.updateItemStack(rStack); - - // Keeping NBT - if (mKeepingNBT) for (int i = 0; i < aGrid.getSizeInventory(); i++) { - if (aGrid.getStackInSlot(i) != null && aGrid.getStackInSlot(i) - .hasTagCompound()) { - rStack.setTagCompound( - (NBTTagCompound) aGrid.getStackInSlot(i) - .getTagCompound() - .copy()); - break; - } - } - - // Charge Values - if (GT_ModHandler.isElectricItem(rStack)) { - GT_ModHandler.dischargeElectricItem(rStack, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false, true); - int tCharge = 0; - for (int i = 0; i < aGrid.getSizeInventory(); i++) tCharge += GT_ModHandler.dischargeElectricItem( - aGrid.getStackInSlot(i), - Integer.MAX_VALUE, - Integer.MAX_VALUE, - true, - true, - true); - if (tCharge > 0) GT_ModHandler.chargeElectricItem(rStack, tCharge, Integer.MAX_VALUE, true, false); - } - - // Add Enchantments - for (int i = 0; i < mEnchantmentsAdded.length; i++) GT_Utility.ItemNBT.addEnchantment( - rStack, - mEnchantmentsAdded[i], - EnchantmentHelper.getEnchantmentLevel(mEnchantmentsAdded[i].effectId, rStack) - + mEnchantmentLevelsAdded[i]); - - // Update the Stack again - GT_Utility.updateItemStack(rStack); - } - return rStack; - } - - @Override - public boolean isRemovable() { - return mRemovableByGT; - } -} diff --git a/src/main/java/gregtech/api/util/GT_Shapeless_Recipe.java b/src/main/java/gregtech/api/util/GT_Shapeless_Recipe.java deleted file mode 100644 index 582dd7cc10..0000000000 --- a/src/main/java/gregtech/api/util/GT_Shapeless_Recipe.java +++ /dev/null @@ -1,100 +0,0 @@ -package gregtech.api.util; - -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.oredict.ShapelessOreRecipe; - -import gregtech.api.interfaces.internal.IGT_CraftingRecipe; - -public class GT_Shapeless_Recipe extends ShapelessOreRecipe implements IGT_CraftingRecipe { - - public final boolean mRemovableByGT, mKeepingNBT; - private final Enchantment[] mEnchantmentsAdded; - private final int[] mEnchantmentLevelsAdded; - - public GT_Shapeless_Recipe(ItemStack aResult, boolean aDismantleAble, boolean aRemovableByGT, boolean aKeepingNBT, - Enchantment[] aEnchantmentsAdded, int[] aEnchantmentLevelsAdded, Object... aRecipe) { - super(aResult, aRecipe); - mEnchantmentsAdded = aEnchantmentsAdded; - mEnchantmentLevelsAdded = aEnchantmentLevelsAdded; - mRemovableByGT = aRemovableByGT; - mKeepingNBT = aKeepingNBT; - } - - @Override - public boolean matches(InventoryCrafting aGrid, World aWorld) { - if (mKeepingNBT) { - ItemStack tStack = null; - for (int i = 0; i < aGrid.getSizeInventory(); i++) { - if (aGrid.getStackInSlot(i) != null) { - if (tStack != null) { - if ((tStack.hasTagCompound() != aGrid.getStackInSlot(i) - .hasTagCompound()) || (tStack.hasTagCompound() - && !tStack.getTagCompound() - .equals( - aGrid.getStackInSlot(i) - .getTagCompound()))) - return false; - } - tStack = aGrid.getStackInSlot(i); - } - } - } - return super.matches(aGrid, aWorld); - } - - @Override - public ItemStack getCraftingResult(InventoryCrafting aGrid) { - ItemStack rStack = super.getCraftingResult(aGrid); - if (rStack != null) { - // Update the Stack - GT_Utility.updateItemStack(rStack); - - // Keeping NBT - if (mKeepingNBT) for (int i = 0; i < aGrid.getSizeInventory(); i++) { - if (aGrid.getStackInSlot(i) != null && aGrid.getStackInSlot(i) - .hasTagCompound()) { - rStack.setTagCompound( - (NBTTagCompound) aGrid.getStackInSlot(i) - .getTagCompound() - .copy()); - break; - } - } - - // Charge Values - if (GT_ModHandler.isElectricItem(rStack)) { - GT_ModHandler.dischargeElectricItem(rStack, Integer.MAX_VALUE, Integer.MAX_VALUE, true, false, true); - int tCharge = 0; - for (int i = 0; i < aGrid.getSizeInventory(); i++) tCharge += GT_ModHandler.dischargeElectricItem( - aGrid.getStackInSlot(i), - Integer.MAX_VALUE, - Integer.MAX_VALUE, - true, - true, - true); - if (tCharge > 0) GT_ModHandler.chargeElectricItem(rStack, tCharge, Integer.MAX_VALUE, true, false); - } - - // Add Enchantments - for (int i = 0; i < mEnchantmentsAdded.length; i++) GT_Utility.ItemNBT.addEnchantment( - rStack, - mEnchantmentsAdded[i], - EnchantmentHelper.getEnchantmentLevel(mEnchantmentsAdded[i].effectId, rStack) - + mEnchantmentLevelsAdded[i]); - - // Update the Stack again - GT_Utility.updateItemStack(rStack); - } - return rStack; - } - - @Override - public boolean isRemovable() { - return mRemovableByGT; - } -} diff --git a/src/main/java/gregtech/api/util/GT_SpawnEventHandler.java b/src/main/java/gregtech/api/util/GT_SpawnEventHandler.java deleted file mode 100644 index ebdba1144b..0000000000 --- a/src/main/java/gregtech/api/util/GT_SpawnEventHandler.java +++ /dev/null @@ -1,81 +0,0 @@ -package gregtech.api.util; - -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; - -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.entity.monster.EntitySlime; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.living.LivingSpawnEvent.CheckSpawn; - -import cpw.mods.fml.common.eventhandler.Event; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import gregtech.api.enums.GT_Values; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_MonsterRepellent; - -public class GT_SpawnEventHandler { - - public static volatile List mobReps = new CopyOnWriteArrayList<>(); - // Future Optimiztation ideas, if this isn't sufficient - // 1: Keep a weakref list of mob repellents so we already have the tile - // 2: Have the tick method update a HashMap of (int[], range) so we don't have to load the tile at all - - public GT_SpawnEventHandler() { - MinecraftForge.EVENT_BUS.register(this); - } - - // Range of a powered repellent - public static int getPoweredRepellentRange(int aTier) { - return 16 + (48 * aTier); - } - - // Range of an unpowered repellent - public static int getUnpoweredRepellentRange(int aTier) { - return 4 + (12 * aTier); - } - - @SubscribeEvent - public void denyMobSpawn(CheckSpawn event) { - if (event.getResult() == Event.Result.DENY) return; - - if (event.entityLiving instanceof EntitySlime slime && !slime.hasCustomNameTag() - && event.getResult() == Event.Result.ALLOW) { - event.setResult(Event.Result.DEFAULT); - } - - if (event.getResult() == Event.Result.ALLOW) { - return; - } - - if (event.entityLiving.isCreatureType(EnumCreatureType.monster, false)) { - final double maxRangeCheck = Math.pow(getPoweredRepellentRange(GT_Values.V.length - 1), 2); - for (int[] rep : mobReps) { - if (rep[3] == event.entity.worldObj.provider.dimensionId) { - // If the chunk isn't loaded, we ignore this Repellent - if (!event.entity.worldObj.blockExists(rep[0], rep[1], rep[2])) continue; - final double dx = rep[0] + 0.5F - event.entity.posX; - final double dy = rep[1] + 0.5F - event.entity.posY; - final double dz = rep[2] + 0.5F - event.entity.posZ; - - final double check = (dx * dx + dz * dz + dy * dy); - // Fail early if outside of max range - if (check > maxRangeCheck) continue; - - final TileEntity tTile = event.entity.worldObj.getTileEntity(rep[0], rep[1], rep[2]); - if (tTile instanceof BaseMetaTileEntity metaTile - && metaTile.getMetaTileEntity() instanceof GT_MetaTileEntity_MonsterRepellent repellent - && check <= Math.pow(repellent.mRange, 2)) { - if (event.entityLiving instanceof EntitySlime slime) { - slime.setCustomNameTag("DoNotSpawnSlimes"); - } - event.setResult(Event.Result.DENY); - // We're already DENYing it. No reason to keep checking - return; - } - } - } - } - } -} diff --git a/src/main/java/gregtech/api/util/GT_StreamUtil.java b/src/main/java/gregtech/api/util/GT_StreamUtil.java deleted file mode 100644 index c29e611c4e..0000000000 --- a/src/main/java/gregtech/api/util/GT_StreamUtil.java +++ /dev/null @@ -1,44 +0,0 @@ -package gregtech.api.util; - -import java.util.Arrays; -import java.util.function.Supplier; -import java.util.stream.Stream; - -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; - -@ParametersAreNonnullByDefault -@MethodsReturnNonnullByDefault -public final class GT_StreamUtil { - - /** - * Backport of {@link Stream#ofNullable}. - */ - public static Stream ofNullable(@Nullable T value) { - return value == null ? Stream.empty() : Stream.of(value); - } - - /** - * Returns a sequential ordered {@code Stream} whose elements are the specified values, - * if {@code condition} is true, otherwise returns an empty {@code Stream}. - * - * @param the type of stream elements - * @param values the elements of the new stream - * @return the new stream - */ - public static Stream ofConditional(boolean condition, T[] values) { - return condition ? Arrays.stream(values) : Stream.empty(); - } - - /** - * Returns a sequential {@code Stream} containing a single element, which will be lazily evaluated from supplier. - * - * @param the type of stream elements - * @param supplier the supplier for single stream element - * @return the new stream - */ - public static Stream ofSupplier(Supplier supplier) { - return Stream.generate(supplier) - .limit(1); - } -} diff --git a/src/main/java/gregtech/api/util/GT_StructureUtility.java b/src/main/java/gregtech/api/util/GT_StructureUtility.java deleted file mode 100644 index 6bbb3e1223..0000000000 --- a/src/main/java/gregtech/api/util/GT_StructureUtility.java +++ /dev/null @@ -1,618 +0,0 @@ -package gregtech.api.util; - -import static com.gtnewhorizon.structurelib.structure.IStructureElement.PlaceResult.ACCEPT; -import static com.gtnewhorizon.structurelib.structure.IStructureElement.PlaceResult.ACCEPT_STOP; -import static com.gtnewhorizon.structurelib.structure.IStructureElement.PlaceResult.REJECT; -import static com.gtnewhorizon.structurelib.structure.IStructureElement.PlaceResult.SKIP; -import static com.gtnewhorizon.structurelib.util.ItemStackPredicate.NBTMode.EXACT; - -import java.util.Arrays; -import java.util.List; -import java.util.function.BiConsumer; -import java.util.function.BiPredicate; -import java.util.function.Consumer; -import java.util.function.Function; -import java.util.function.Predicate; -import java.util.function.ToIntFunction; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.IChatComponent; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement; -import com.gtnewhorizon.structurelib.structure.StructureUtility; -import com.gtnewhorizon.structurelib.util.ItemStackPredicate; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.IHeatingCoil; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.common.blocks.GT_Block_Casings5; -import gregtech.common.blocks.GT_Block_FrameBox; -import gregtech.common.blocks.GT_Cyclotron_Coils; -import gregtech.common.blocks.GT_Item_Machines; - -public class GT_StructureUtility { - - // private static final Map, String> customNames = new HashMap<>(); - private GT_StructureUtility() { - throw new AssertionError("Not instantiable"); - } - - public static boolean hasMTE(IGregTechTileEntity aTile, Class clazz) { - return aTile != null && clazz.isInstance(aTile.getMetaTileEntity()); - } - - public static IStructureElementNoPlacement ofHatchAdder(IGT_HatchAdder aHatchAdder, int aTextureIndex, - int aDots) { - return ofHatchAdder(aHatchAdder, aTextureIndex, StructureLibAPI.getBlockHint(), aDots - 1); - } - - public static IStructureElement ofFrame(Materials aFrameMaterial) { - if (aFrameMaterial == null) throw new IllegalArgumentException(); - return new IStructureElement<>() { - - private IIcon[] mIcons; - - @Override - public boolean check(T t, World world, int x, int y, int z) { - Block block = world.getBlock(x, y, z); - if (block instanceof GT_Block_FrameBox frameBox) { - int meta = world.getBlockMetadata(x, y, z); - Materials material = frameBox.getMaterial(meta); - return aFrameMaterial == material; - } - return false; - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - if (mIcons == null) { - mIcons = new IIcon[6]; - Arrays.fill(mIcons, aFrameMaterial.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex].getIcon()); - } - StructureLibAPI.hintParticleTinted(world, x, y, z, mIcons, aFrameMaterial.mRGBa); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - ItemStack tFrameStack = getFrameStack(); - if (!GT_Utility.isStackValid(tFrameStack) - || !(tFrameStack.getItem() instanceof ItemBlock tFrameStackItem)) return false; - return tFrameStackItem - .placeBlockAt(tFrameStack, null, world, x, y, z, 6, 0, 0, 0, Items.feather.getDamage(tFrameStack)); - } - - private ItemStack getFrameStack() { - return GT_OreDictUnificator.get(OrePrefixes.frameGt, aFrameMaterial, 1); - } - - @Override - public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - ItemStack tFrameStack = getFrameStack(); - if (!GT_Utility.isStackValid(tFrameStack) || !(tFrameStack.getItem() instanceof ItemBlock)) - return BlocksToPlace.errored; - return BlocksToPlace.create(tFrameStack); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - IItemSource s, EntityPlayerMP actor, Consumer chatter) { - return survivalPlaceBlock( - t, - world, - x, - y, - z, - trigger, - AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - if (check(t, world, x, y, z)) return SKIP; - ItemStack tFrameStack = getFrameStack(); - if (!GT_Utility.isStackValid(tFrameStack) || !(tFrameStack.getItem() instanceof ItemBlock)) - return REJECT; // honestly, this is more like a programming error or pack issue - return StructureUtility.survivalPlaceBlock( - tFrameStack, - ItemStackPredicate.NBTMode.IGNORE_KNOWN_INSIGNIFICANT_TAGS, - null, - false, - world, - x, - y, - z, - env.getSource(), - env.getActor(), - env.getChatter()); - } - }; - } - - public static GT_HatchElementBuilder buildHatchAdder() { - return GT_HatchElementBuilder.builder(); - } - - /** - * Completely equivalent to {@link #buildHatchAdder()}, except it plays nicer with type inference when statically - * imported - */ - public static GT_HatchElementBuilder buildHatchAdder(Class typeToken) { - return GT_HatchElementBuilder.builder(); - } - - public static IStructureElementNoPlacement ofHatchAdder(IGT_HatchAdder aHatchAdder, int aTextureIndex, - Block aHintBlock, int aHintMeta) { - if (aHatchAdder == null || aHintBlock == null) { - throw new IllegalArgumentException(); - } - return new IStructureElementNoPlacement<>() { - - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity - && aHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) aTextureIndex); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, aHintBlock, aHintMeta); - return true; - } - }; - } - - public static IStructureElement ofHatchAdder(IGT_HatchAdder aHatchAdder, int aTextureIndex, - Block aHintBlock, int aHintMeta, BiPredicate shouldSkip, - Function> aMetaId, final IStructureElement.PlaceResult acceptType) { - if (aHatchAdder == null) { - throw new IllegalArgumentException(); - } - return new IStructureElement<>() { - - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity - && aHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) aTextureIndex); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, aHintBlock, aHintMeta); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int i, int i1, int i2, ItemStack itemStack) { - // TODO - return false; - } - - @Override - public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - Class clazz = aMetaId.apply(t); - if (clazz == null) return BlocksToPlace.createEmpty(); - return BlocksToPlace.create(is -> clazz.isInstance(GT_Item_Machines.getMetaTileEntity(is))); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - IItemSource s, EntityPlayerMP actor, Consumer chatter) { - return survivalPlaceBlock( - t, - world, - x, - y, - z, - trigger, - AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - if (shouldSkip != null) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - if (tileEntity instanceof IGregTechTileEntity - && shouldSkip.test(t, (IGregTechTileEntity) tileEntity)) return SKIP; - } - if (!StructureLibAPI.isBlockTriviallyReplaceable(world, x, y, z, env.getActor())) return REJECT; - Class clazz = aMetaId.apply(t); - if (clazz == null) return REJECT; - ItemStack taken = env.getSource() - .takeOne(is -> clazz.isInstance(GT_Item_Machines.getMetaTileEntity(is)), true); - if (GT_Utility.isStackInvalid(taken)) { - env.getChatter() - .accept( - new ChatComponentTranslation( - "GT5U.autoplace.error.no_mte.class_name", - clazz.getSimpleName())); - return REJECT; - } - if (StructureUtility - .survivalPlaceBlock(taken, EXACT, null, true, world, x, y, z, env.getSource(), env.getActor()) - == ACCEPT) return acceptType; - return REJECT; - } - }; - } - - public static IStructureElement ofHatchAdder(IGT_HatchAdder aHatchAdder, int aTextureIndex, - Block aHintBlock, int aHintMeta, BiPredicate shouldSkip, ToIntFunction aMetaId) { - if (aHatchAdder == null) { - throw new IllegalArgumentException(); - } - return new IStructureElement<>() { - - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity instanceof IGregTechTileEntity - && aHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) aTextureIndex); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, aHintBlock, aHintMeta); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int i, int i1, int i2, ItemStack itemStack) { - // TODO - return false; - } - - @Override - public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - GT_Item_Machines item = (GT_Item_Machines) Item.getItemFromBlock(GregTech_API.sBlockMachines); - int meta = aMetaId.applyAsInt(t); - if (meta < 0) return BlocksToPlace.createEmpty(); - return BlocksToPlace.create( - ItemStackPredicate.from(item) - .setMeta(meta)); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - IItemSource s, EntityPlayerMP actor, Consumer chatter) { - return survivalPlaceBlock( - t, - world, - x, - y, - z, - trigger, - AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - if (shouldSkip != null) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - if (tileEntity instanceof IGregTechTileEntity - && shouldSkip.test(t, (IGregTechTileEntity) tileEntity)) return SKIP; - } - if (!StructureLibAPI.isBlockTriviallyReplaceable(world, x, y, z, env.getActor())) return REJECT; - GT_Item_Machines item = (GT_Item_Machines) Item.getItemFromBlock(GregTech_API.sBlockMachines); - int meta = aMetaId.applyAsInt(t); - if (meta < 0) return REJECT; - ItemStack taken = env.getSource() - .takeOne( - ItemStackPredicate.from(item) - .setMeta(meta), - true); - if (GT_Utility.isStackInvalid(taken)) { - env.getChatter() - .accept(new ChatComponentTranslation("GT5U.autoplace.error.no_mte.id", meta)); - return REJECT; - } - return StructureUtility - .survivalPlaceBlock(taken, EXACT, null, true, world, x, y, z, env.getSource(), env.getActor()) - == ACCEPT ? ACCEPT_STOP : REJECT; - } - }; - } - - public static IStructureElement ofHatchAdderOptional(IGT_HatchAdder aHatchAdder, int textureIndex, - int dots, Block placeCasing, int placeCasingMeta) { - return ofHatchAdderOptional( - aHatchAdder, - textureIndex, - StructureLibAPI.getBlockHint(), - dots - 1, - placeCasing, - placeCasingMeta); - } - - public static IStructureElement ofHatchAdderOptional(IGT_HatchAdder aHatchAdder, int aTextureIndex, - Block aHintBlock, int hintMeta, Block placeCasing, int placeCasingMeta) { - if (aHatchAdder == null || aHintBlock == null) { - throw new IllegalArgumentException(); - } - return new IStructureElement<>() { - - @Override - public boolean check(T t, World world, int x, int y, int z) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - Block worldBlock = world.getBlock(x, y, z); - return (tileEntity instanceof IGregTechTileEntity - && aHatchAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) aTextureIndex)) - || (worldBlock == placeCasing && worldBlock.getDamageValue(world, x, y, z) == placeCasingMeta); - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, aHintBlock, hintMeta); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - world.setBlock(x, y, z, placeCasing, placeCasingMeta, 2); - return true; - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - IItemSource s, EntityPlayerMP actor, Consumer chatter) { - if (check(t, world, x, y, z)) return SKIP; - return StructureUtility - .survivalPlaceBlock(placeCasing, placeCasingMeta, world, x, y, z, s, actor, chatter); - } - }; - } - - /** - * Assume all coils accepted. - * - * @see #ofCoil(BiPredicate, Function) - */ - public static IStructureElement ofCoil(BiConsumer aHeatingCoilSetter, - Function aHeatingCoilGetter) { - return ofCoil((t, l) -> { - aHeatingCoilSetter.accept(t, l); - return true; - }, aHeatingCoilGetter); - } - - /** - * Heating coil structure element. - * - * @param aHeatingCoilSetter Notify the controller of this new coil. Got called exactly once per coil. Might be - * called less times if structure test fails. If the setter returns false then it assumes - * the coil is rejected. - * @param aHeatingCoilGetter Get the current heating level. Null means no coil recorded yet. - */ - public static IStructureElement ofCoil(BiPredicate aHeatingCoilSetter, - Function aHeatingCoilGetter) { - if (aHeatingCoilSetter == null || aHeatingCoilGetter == null) { - throw new IllegalArgumentException(); - } - return new IStructureElement<>() { - - @Override - public boolean check(T t, World world, int x, int y, int z) { - Block block = world.getBlock(x, y, z); - if (!(block instanceof IHeatingCoil)) return false; - HeatingCoilLevel existingLevel = aHeatingCoilGetter.apply(t), - newLevel = ((IHeatingCoil) block).getCoilHeat(world.getBlockMetadata(x, y, z)); - if (existingLevel == null || existingLevel == HeatingCoilLevel.None) { - return aHeatingCoilSetter.test(t, newLevel); - } else { - return newLevel == existingLevel; - } - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, GregTech_API.sBlockCasings5, getMetaFromHint(trigger)); - return true; - } - - private int getMetaFromHint(ItemStack trigger) { - return GT_Block_Casings5.getMetaFromCoilHeat(getHeatFromHint(trigger)); - } - - private HeatingCoilLevel getHeatFromHint(ItemStack trigger) { - return HeatingCoilLevel - .getFromTier((byte) Math.min(HeatingCoilLevel.getMaxTier(), Math.max(0, trigger.stackSize - 1))); - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return world.setBlock(x, y, z, GregTech_API.sBlockCasings5, getMetaFromHint(trigger), 3); - } - - @Override - public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - return BlocksToPlace.create(GregTech_API.sBlockCasings5, getMetaFromHint(trigger)); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - IItemSource s, EntityPlayerMP actor, Consumer chatter) { - return survivalPlaceBlock( - t, - world, - x, - y, - z, - trigger, - AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - Block block = world.getBlock(x, y, z); - boolean isCoil = block instanceof IHeatingCoil - && ((IHeatingCoil) block).getCoilHeat(world.getBlockMetadata(x, y, z)) == getHeatFromHint(trigger); - if (isCoil) return SKIP; - return StructureUtility.survivalPlaceBlock( - GregTech_API.sBlockCasings5, - getMetaFromHint(trigger), - world, - x, - y, - z, - env.getSource(), - env.getActor(), - env.getChatter()); - } - }; - } - - /** - * Assumes all solenoids are accepted. - * - * @see #ofSolenoidCoil(BiPredicate, Function) - */ - public static IStructureElement ofSolenoidCoil(BiConsumer aSolenoidTierSetter, - Function aSolenoidTierGetter) { - return ofSolenoidCoil((t, l) -> { - aSolenoidTierSetter.accept(t, l); - return true; - }, aSolenoidTierGetter); - } - - /** - * Solenoid coil structure element. - * - * @param aSolenoidTierSetter Notify the controller of this new solenoid. Got called exactly once per solenoid. - * Might be - * called less times if structure test fails. If the setter returns false then it assumes - * the solenoid is rejected. - * @param aSolenoidTierGetter Get the solenoid voltage tier. Null means no tier recorded yet. - */ - public static IStructureElement ofSolenoidCoil(BiPredicate aSolenoidTierSetter, - Function aSolenoidTierGetter) { - if (aSolenoidTierSetter == null || aSolenoidTierGetter == null) { - throw new IllegalArgumentException(); - } - return new IStructureElement<>() { - - @Override - public boolean check(T t, World world, int x, int y, int z) { - Block block = world.getBlock(x, y, z); - - if (block != GregTech_API.sSolenoidCoilCasings) return false; - - var coils = ((GT_Cyclotron_Coils) GregTech_API.sSolenoidCoilCasings); - - Byte existingLevel = aSolenoidTierGetter.apply(t); - byte newLevel = (byte) (coils.getVoltageTier(world.getBlockMetadata(x, y, z))); - - if (existingLevel == null) { - return aSolenoidTierSetter.test(t, newLevel); - } else { - return newLevel == existingLevel; - } - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI - .hintParticle(world, x, y, z, GregTech_API.sSolenoidCoilCasings, getMetaFromHint(trigger)); - return true; - } - - private int getMetaFromHint(ItemStack trigger) { - return Math.min(Math.max(trigger.stackSize - 1, 0), 10); - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return world.setBlock(x, y, z, GregTech_API.sSolenoidCoilCasings, getMetaFromHint(trigger), 3); - } - - @Override - public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - return BlocksToPlace.create(GregTech_API.sSolenoidCoilCasings, getMetaFromHint(trigger)); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - IItemSource s, EntityPlayerMP actor, Consumer chatter) { - return survivalPlaceBlock( - t, - world, - x, - y, - z, - trigger, - AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - Block block = world.getBlock(x, y, z); - - boolean isCoil = block == GregTech_API.sSolenoidCoilCasings - && world.getBlockMetadata(x, y, z) == getMetaFromHint(trigger); - - if (isCoil) return SKIP; - - return StructureUtility.survivalPlaceBlock( - GregTech_API.sSolenoidCoilCasings, - getMetaFromHint(trigger), - world, - x, - y, - z, - env.getSource(), - env.getActor(), - env.getChatter()); - } - }; - } - - @Nonnull - public static Predicate filterByMTEClass(List> list) { - return is -> { - IMetaTileEntity tile = GT_Item_Machines.getMetaTileEntity(is); - return tile != null && list.stream() - .anyMatch(c -> c.isInstance(tile)); - }; - } - - @Nonnull - public static Predicate filterByMTETier(int aMinTier, int aMaxTier) { - return is -> { - IMetaTileEntity tile = GT_Item_Machines.getMetaTileEntity(is); - return tile instanceof GT_MetaTileEntity_TieredMachineBlock - && ((GT_MetaTileEntity_TieredMachineBlock) tile).mTier <= aMaxTier - && ((GT_MetaTileEntity_TieredMachineBlock) tile).mTier >= aMinTier; - }; - } -} diff --git a/src/main/java/gregtech/api/util/GT_StructureUtilityMuTE.java b/src/main/java/gregtech/api/util/GT_StructureUtilityMuTE.java index a4c4630209..3efbebdcbf 100644 --- a/src/main/java/gregtech/api/util/GT_StructureUtilityMuTE.java +++ b/src/main/java/gregtech/api/util/GT_StructureUtilityMuTE.java @@ -1,6 +1,6 @@ package gregtech.api.util; -import static gregtech.GT_Mod.GT_FML_LOGGER; +import static gregtech.GTMod.GT_FML_LOGGER; import static gregtech.api.multitileentity.enums.GT_MultiTileComponentCasing.*; import static gregtech.api.multitileentity.enums.GT_MultiTileUpgradeCasing.*; import static gregtech.loaders.preload.GT_Loader_MultiTileEntities.*; @@ -16,7 +16,7 @@ import net.minecraft.world.World; import com.gtnewhorizon.structurelib.StructureLibAPI; import com.gtnewhorizon.structurelib.structure.IStructureElement; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TextureSet; import gregtech.api.multitileentity.MultiTileEntityBlock; @@ -220,7 +220,7 @@ public class GT_StructureUtilityMuTE { public static class MuTEStructureCasing { private String registryName; - private int registryId = GT_Values.W; + private int registryId = GTValues.W; private final int defaultMeta; private final Integer[] validIds; @@ -253,7 +253,7 @@ public class GT_StructureUtilityMuTE { public int getRegistryId() { // TODO: MuTE registry seems to somehow shift, probably due to NBT shenanigans. Lazy init circumvents this // but it should be properly fixed in the future - if (registryId == GT_Values.W) { + if (registryId == GTValues.W) { MultiTileEntityRegistry registry = MultiTileEntityRegistry.getRegistry(registryName); registryId = Block.getIdFromBlock(registry.getBlock()); } diff --git a/src/main/java/gregtech/api/util/GT_ToolHarvestHelper.java b/src/main/java/gregtech/api/util/GT_ToolHarvestHelper.java deleted file mode 100644 index 4263b77be6..0000000000 --- a/src/main/java/gregtech/api/util/GT_ToolHarvestHelper.java +++ /dev/null @@ -1,71 +0,0 @@ -package gregtech.api.util; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; - -import ic2.core.block.BlockMultiID; -import ic2.core.block.BlockScaffold; -import ic2.core.block.machine.BlockMiningPipe; -import ic2.core.block.machine.BlockMiningTip; -import ic2.core.block.wiring.BlockCable; -import ic2.core.crop.BlockCrop; - -public class GT_ToolHarvestHelper { - - public static boolean isAppropriateTool(Block aBlock, byte aMetaData, String... tTools) { - - if (aBlock == null || tTools == null) { - return false; - } - String targetTool = aBlock.getHarvestTool(aMetaData); - return !isStringEmpty(targetTool) && isArrayContains(targetTool, tTools); - } - - public static boolean isAppropriateMaterial(Block aBlock, Material... tMats) { - if (aBlock == null || tMats == null) { - return false; - } - return isArrayContains(aBlock.getMaterial(), tMats); - } - - public static boolean isSpecialBlock(Block aBlock, Block... tBlocks) { - if (aBlock == null || tBlocks == null) { - return false; - } - return isArrayContains(aBlock, tBlocks); - } - - public static boolean isArrayContains(T obj, T[] list) { - - if (obj == null || list == null) { - return false; - } - - for (T iObj : list) { - if (obj == iObj || obj.equals(iObj)) { - return true; - } - } - return false; - } - - public static boolean isStringEmpty(String s) { - return s == null || s.isEmpty(); - } - - public static boolean isIC2Wrenchable(Block block) { - return (block instanceof BlockMultiID && !(block instanceof BlockCable) && !(block instanceof BlockCrop)) - || block instanceof BlockScaffold - || block instanceof BlockMiningPipe - || block instanceof BlockMiningTip; - } - - public static boolean hasNull(Object... obj) { - for (Object iObj : obj) { - if (iObj == null) { - return true; - } - } - return false; - } -} diff --git a/src/main/java/gregtech/api/util/GT_TooltipDataCache.java b/src/main/java/gregtech/api/util/GT_TooltipDataCache.java index 431ef34fa4..6b42a8e7fa 100644 --- a/src/main/java/gregtech/api/util/GT_TooltipDataCache.java +++ b/src/main/java/gregtech/api/util/GT_TooltipDataCache.java @@ -7,7 +7,7 @@ import java.util.Map; import net.minecraft.util.StatCollector; -import gregtech.GT_Mod; +import gregtech.GTMod; public class GT_TooltipDataCache { @@ -50,7 +50,7 @@ public class GT_TooltipDataCache { public TooltipData getUncachedTooltipData(String key, Object... args) { List lines = getAllLines(key, args); int normalLines = lines.size(); - if (Math.max(GT_Mod.gregtechproxy.mTooltipVerbosity, GT_Mod.gregtechproxy.mTooltipShiftVerbosity) >= 3) { + if (Math.max(GTMod.gregtechproxy.mTooltipVerbosity, GTMod.gregtechproxy.mTooltipShiftVerbosity) >= 3) { lines.addAll(getAllLines(key + ".extended", args)); // Are extended lines enabled? If so add them to the // lines } @@ -58,9 +58,8 @@ public class GT_TooltipDataCache { lines.add(key); // Fallback in case no lines could be found at all } return new TooltipData( - lines.subList(0, getVerbosityIndex(GT_Mod.gregtechproxy.mTooltipVerbosity, normalLines, lines.size())), - lines - .subList(0, getVerbosityIndex(GT_Mod.gregtechproxy.mTooltipShiftVerbosity, normalLines, lines.size()))); + lines.subList(0, getVerbosityIndex(GTMod.gregtechproxy.mTooltipVerbosity, normalLines, lines.size())), + lines.subList(0, getVerbosityIndex(GTMod.gregtechproxy.mTooltipShiftVerbosity, normalLines, lines.size()))); } /** diff --git a/src/main/java/gregtech/api/util/GT_Util.java b/src/main/java/gregtech/api/util/GT_Util.java deleted file mode 100644 index cdca6a1b9e..0000000000 --- a/src/main/java/gregtech/api/util/GT_Util.java +++ /dev/null @@ -1,347 +0,0 @@ -package gregtech.api.util; - -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.util.Tuple; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.common.util.Constants; - -import gregtech.api.enums.ItemList; -import gregtech.api.interfaces.IDataCopyable; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.multitileentity.interfaces.IMultiTileEntity; -import gregtech.common.items.behaviors.Behaviour_DataOrb; - -public class GT_Util { - - // Last broken tile entity - public static final ThreadLocal LAST_BROKEN_TILEENTITY = new ThreadLocal<>(); - - public static Tuple tuple(String key, Object value) { - return new Tuple(key, value); - } - - public static NBTTagCompound fuseNBT(NBTTagCompound nbt1, NBTTagCompound nbt2) { - if (nbt1 == null) return nbt2 == null ? new NBTTagCompound() : (NBTTagCompound) nbt2.copy(); - final NBTTagCompound rNBT = (NBTTagCompound) nbt1.copy(); - if (nbt2 == null) return rNBT; - for (Object tKey : nbt2.func_150296_c /* getKeySet */()) - if (!rNBT.hasKey(tKey.toString())) rNBT.setTag(tKey.toString(), nbt2.getTag(tKey.toString())); - return rNBT; - } - - /** - * Construct a NBTTagCompound from a series of key, value pairs. Inspired from GT6. - */ - public static NBTTagCompound makeNBT(Tuple... tags) { - final NBTTagCompound nbt = new NBTTagCompound(); - for (Tuple t : tags) { - if (t.getSecond() == null) continue; - - if (t.getSecond() instanceof Boolean) nbt.setBoolean( - t.getFirst() - .toString(), - (Boolean) t.getSecond()); - else if (t.getSecond() instanceof Byte) nbt.setByte( - t.getFirst() - .toString(), - (Byte) t.getSecond()); - else if (t.getSecond() instanceof Short) nbt.setShort( - t.getFirst() - .toString(), - (Short) t.getSecond()); - else if (t.getSecond() instanceof Integer) nbt.setInteger( - t.getFirst() - .toString(), - (Integer) t.getSecond()); - else if (t.getSecond() instanceof Long) nbt.setLong( - t.getFirst() - .toString(), - (Long) t.getSecond()); - else if (t.getSecond() instanceof Float) nbt.setFloat( - t.getFirst() - .toString(), - (Float) t.getSecond()); - else if (t.getSecond() instanceof Double) nbt.setDouble( - t.getFirst() - .toString(), - (Double) t.getSecond()); - else if (t.getSecond() instanceof String) nbt.setString( - t.getFirst() - .toString(), - (String) t.getSecond()); - else if (t.getSecond() instanceof NBTBase) nbt.setTag( - t.getFirst() - .toString(), - (NBTBase) t.getSecond()); - else nbt.setString( - t.getFirst() - .toString(), - t.getSecond() - .toString()); - } - - return nbt; - } - - /** - * Get a TileEntity - */ - public static TileEntity getTileEntity(World world, int x, int y, int z, boolean aLoadUnloadedChunks) { - if (aLoadUnloadedChunks || world.blockExists(x, y, z)) { - TileEntity tileEntity = world.getTileEntity(x, y, z); - if (tileEntity instanceof IMultiTileEntity && ((IMultiTileEntity) tileEntity).isDead()) return null; - if (tileEntity != null) return tileEntity; - tileEntity = LAST_BROKEN_TILEENTITY.get(); - if (tileEntity != null && tileEntity.xCoord == x && tileEntity.yCoord == y && tileEntity.zCoord == z) - return tileEntity; - } - return null; - } - - /** - * Sets the TileEntity at the passed position, with the option of turning adjacent TileEntity updates off. - */ - public static TileEntity setTileEntity(World world, int x, int y, int z, TileEntity aTileEntity, - boolean aCauseTileEntityUpdates) { - if (aCauseTileEntityUpdates) world.setTileEntity(x, y, z, aTileEntity); - else { - final Chunk tChunk = world.getChunkFromChunkCoords(x >> 4, z >> 4); - if (tChunk != null) { - world.addTileEntity(aTileEntity); - tChunk.func_150812_a /* setBlockTileEntityInChunk */(x & 15, y, z & 15, aTileEntity); - tChunk.setChunkModified(); - } - } - return aTileEntity; - } - - public static boolean setBlock(World world, int x, int y, int z, Block block, short aMeta, long aFlags, - boolean aRemoveGrassBelow) { - if (aRemoveGrassBelow) { - final Block blockBelow = world.getBlock(x, y - 1, z); - if (blockBelow == Blocks.grass || blockBelow == Blocks.mycelium) - world.setBlock(x, y - 1, z, Blocks.dirt, 0, (byte) aFlags); - } - return world.setBlock(x, y, z, block, aMeta, (byte) aFlags); - } - - public static TileEntity getTileEntity(World world, ChunkCoordinates coords, boolean loadUnloadedChunks) { - return getTileEntity(world, coords.posX, coords.posY, coords.posZ, loadUnloadedChunks); - } - - /** - * Marks a Chunk dirty so it is saved - */ - public static boolean markChunkDirty(World world, int x, int z) { - if (world == null || world.isRemote) return false; - Chunk aChunk = world.getChunkFromBlockCoords(x, z); - if (aChunk == null) { - world.getBlockMetadata(x, 0, z); - aChunk = world.getChunkFromBlockCoords(x, z); - if (aChunk == null) { - GT_Log.err.println( - "Some important Chunk does not exist for some reason at Coordinates X: " + x + " and Z: " + z); - return false; - } - } - aChunk.setChunkModified(); - return true; - } - - /** - * Marks a Chunk dirty so it is saved - */ - public static boolean markChunkDirty(Object maybeTile) { - return maybeTile instanceof TileEntity tileEntity - && markChunkDirty(tileEntity.getWorldObj(), tileEntity.xCoord, tileEntity.zCoord); - } - - public static int mixRGBInt(int aRGB1, int aRGB2) { - return getRGBInt( - new short[] { (short) ((getR(aRGB1) + getR(aRGB2)) >> 1), (short) ((getG(aRGB1) + getG(aRGB2)) >> 1), - (short) ((getB(aRGB1) + getB(aRGB2)) >> 1) }); - } - - public static int getRGBInt(short[] aColors) { - return aColors == null ? 16777215 : (aColors[0] << 16) | (aColors[1] << 8) | aColors[2]; - } - - public static int getRGBaInt(short[] aColors) { - return aColors == null ? 16777215 : (aColors[0]) << 16 | (aColors[1] << 8) | aColors[2] | (aColors[3] << 24); - } - - public static String toHexString(short[] aColors) { - return aColors == null ? "FFFFFF" : Integer.toHexString((aColors[0] << 16) | (aColors[1] << 8) | aColors[2]); - } - - public static int getRGBInt(short aR, short aG, short aB) { - return (aR << 16) | (aG << 8) | aB; - } - - public static int getRGBaInt(short aR, short aG, short aB, short aA) { - return (aR << 16) | (aG << 8) | aB | (aA << 24); - } - - public static short[] getRGBaArray(int aColors) { - return new short[] { (short) ((aColors >>> 16) & 255), (short) ((aColors >>> 8) & 255), (short) (aColors & 255), - (short) ((aColors >>> 24) & 255) }; - } - - public static short getR(int aColors) { - return (short) ((aColors >>> 16) & 255); - } - - public static short getG(int aColors) { - return (short) ((aColors >>> 8) & 255); - } - - public static short getB(int aColors) { - return (short) (aColors & 255); - } - - public static short getA(int aColors) { - return (short) ((aColors >>> 24) & 255); - } - - public static boolean saveMultiblockInputConfiguration(GT_MetaTileEntity_MultiBlockBase controller, - EntityPlayer player) { - NBTTagCompound newTag = new NBTTagCompound(); - ItemStack dataOrb = player.getHeldItem(); - if (GT_Utility.isStackInvalid(dataOrb) || !ItemList.Tool_DataOrb.isStackEqual(dataOrb, false, true)) { - return false; - } - if (!controller.saveOtherHatchConfiguration(player)) { - return false; - } - newTag.setString("type", "MultiblockConfiguration"); - int count = 0; - NBTTagList list = saveConfigurationToDataStick(player, controller.mInputBusses); - if (list == null) return false; - newTag.setTag("mInputBusses", list); - count += list.tagCount(); - list = saveConfigurationToDataStick(player, controller.mInputHatches); - if (list == null) return false; - newTag.setTag("mInputHatches", list); - count += list.tagCount(); - list = saveConfigurationToDataStick(player, controller.mOutputBusses); - if (list == null) return false; - newTag.setTag("mOutputBusses", list); - count += list.tagCount(); - // Output hatch config currently cannot be copied, so we omit this part for now - // TODO this doesn't work for now - // newTag.setTag("mDualInputHatches", saveToDataStick(player, controller.mDualInputHatches)); - dataOrb.setTagCompound(newTag); - Behaviour_DataOrb.setDataTitle(dataOrb, "Multiblock Hatch Configuration"); - Behaviour_DataOrb.setDataName(dataOrb, String.format("%s configuration saved", count)); - return true; - } - - public static boolean hasMultiblockInputConfiguration(ItemStack dataOrb) { - return !GT_Utility.isStackInvalid(dataOrb) && ItemList.Tool_DataOrb.isStackEqual(dataOrb, false, true) - && dataOrb.getTagCompound() != null - && "MultiblockConfiguration".equals( - dataOrb.getTagCompound() - .getString("type")); - } - - public static boolean loadMultiblockInputConfiguration(GT_MetaTileEntity_MultiBlockBase controller, - EntityPlayer player) { - ItemStack dataOrb = player.getHeldItem(); - if (!hasMultiblockInputConfiguration(dataOrb)) { - return false; - } - if (!controller.loadOtherHatchConfiguration(player)) { - return false; - } - NBTTagCompound tag = dataOrb.getTagCompound(); - if (!checkCanLoadConfigurationFromDataStick( - tag.getTagList("mInputBusses", Constants.NBT.TAG_COMPOUND), - player, - controller.mInputBusses) - || !checkCanLoadConfigurationFromDataStick( - tag.getTagList("mInputHatches", Constants.NBT.TAG_COMPOUND), - player, - controller.mInputHatches) - || !checkCanLoadConfigurationFromDataStick( - tag.getTagList("mOutputBusses", Constants.NBT.TAG_COMPOUND), - player, - controller.mOutputBusses)) - return false; - - if (!loadConfigurationFromDataStick( - tag.getTagList("mInputBusses", Constants.NBT.TAG_COMPOUND), - player, - controller.mInputBusses)) return false; - if (!loadConfigurationFromDataStick( - tag.getTagList("mInputHatches", Constants.NBT.TAG_COMPOUND), - player, - controller.mInputHatches)) return false; - if (!loadConfigurationFromDataStick( - tag.getTagList("mOutputBusses", Constants.NBT.TAG_COMPOUND), - player, - controller.mOutputBusses)) return false; - return true; - } - - private static NBTTagList saveConfigurationToDataStick(EntityPlayer player, - List hatches) { - NBTTagList list = new NBTTagList(); - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(hatches)) { - if (!(tHatch instanceof IDataCopyable copyable)) { - list.appendTag(new NBTTagCompound()); - continue; - } - NBTTagCompound tag = copyable.getCopiedData(player); - if (tag == null) return null; - list.appendTag(tag); - } - return list; - } - - private static boolean loadConfigurationFromDataStick(NBTTagList list, EntityPlayer player, - List hatches) { - if (list == null || list.tagList.isEmpty()) return false; - List validMTEs = filterValidMTEs(hatches); - int end = Math.min(validMTEs.size(), list.tagCount()); - for (int i = 0; i < end; i++) { - GT_MetaTileEntity_Hatch tHatch = validMTEs.get(i); - NBTTagCompound tag = list.getCompoundTagAt(i); - if (!(tHatch instanceof IDataCopyable copyable)) { - if (tag.hasNoTags()) continue; - return false; - } - if (tag.hasNoTags()) return false; - if (!copyable.pasteCopiedData(player, tag)) return false; - } - return true; - } - - private static boolean checkCanLoadConfigurationFromDataStick(NBTTagList list, EntityPlayer player, - List hatches) { - if (list == null || list.tagList.isEmpty()) return false; - List validMTEs = filterValidMTEs(hatches); - int end = Math.min(validMTEs.size(), list.tagCount()); - for (int i = 0; i < end; i++) { - GT_MetaTileEntity_Hatch tHatch = validMTEs.get(i); - NBTTagCompound tag = list.getCompoundTagAt(i); - if (tag.hasNoTags()) continue; - if (!(tHatch instanceof IDataCopyable copyable) || !copyable.getCopiedDataIdentifier(player) - .equals(tag.getString("type"))) return false; - } - return true; - } -} diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java deleted file mode 100644 index 84e67ab728..0000000000 --- a/src/main/java/gregtech/api/util/GT_Utility.java +++ /dev/null @@ -1,4859 +0,0 @@ -package gregtech.api.util; - -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.GT_Values.COMPASS_DIRECTIONS; -import static gregtech.api.enums.GT_Values.D1; -import static gregtech.api.enums.GT_Values.E; -import static gregtech.api.enums.GT_Values.GT; -import static gregtech.api.enums.GT_Values.L; -import static gregtech.api.enums.GT_Values.M; -import static gregtech.api.enums.GT_Values.NW; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.GT_Values.W; -import static gregtech.api.enums.Materials.FLUID_MAP; -import static gregtech.api.enums.Mods.Translocator; -import static gregtech.common.GT_UndergroundOil.undergroundOilReadInformation; -import static net.minecraftforge.common.util.ForgeDirection.DOWN; -import static net.minecraftforge.common.util.ForgeDirection.EAST; -import static net.minecraftforge.common.util.ForgeDirection.NORTH; -import static net.minecraftforge.common.util.ForgeDirection.SOUTH; -import static net.minecraftforge.common.util.ForgeDirection.UNKNOWN; -import static net.minecraftforge.common.util.ForgeDirection.UP; -import static net.minecraftforge.common.util.ForgeDirection.WEST; - -import java.lang.reflect.Constructor; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.math.BigInteger; -import java.math.RoundingMode; -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.util.AbstractCollection; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; -import java.util.function.Function; -import java.util.function.IntFunction; -import java.util.function.Predicate; -import java.util.function.Supplier; -import java.util.stream.Collector; -import java.util.stream.Collectors; -import java.util.stream.IntStream; -import java.util.stream.Stream; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityList; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.EnumCreatureAttribute; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTBase.NBTPrimitive; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.nbt.NBTTagString; -import net.minecraft.network.play.server.S07PacketRespawn; -import net.minecraft.network.play.server.S1DPacketEntityEffect; -import net.minecraft.network.play.server.S1FPacketSetExperience; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.tileentity.TileEntityChest; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MathHelper; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraft.world.WorldServer; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.BlockSnapshot; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.FakePlayerFactory; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.event.world.BlockEvent; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidContainerRegistry.FluidContainerData; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidContainerItem; -import net.minecraftforge.fluids.IFluidHandler; -import net.minecraftforge.oredict.OreDictionary; - -import com.google.auto.value.AutoValue; -import com.google.common.base.Suppliers; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.Maps; -import com.google.common.collect.SetMultimap; -import com.gtnewhorizon.structurelib.alignment.IAlignment; -import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; -import com.mojang.authlib.GameProfile; - -import buildcraft.api.transport.IPipeTile; -import cofh.api.energy.IEnergyReceiver; -import cofh.api.transport.IItemDuct; -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.damagesources.GT_DamageSources; -import gregtech.api.damagesources.GT_DamageSources.DamageSourceHotItem; -import gregtech.api.enchants.Enchantment_Hazmat; -import gregtech.api.enchants.Enchantment_Radioactivity; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Mods; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.Textures; -import gregtech.api.enums.ToolDictNames; -import gregtech.api.events.BlockScanningEvent; -import gregtech.api.interfaces.IBlockContainer; -import gregtech.api.interfaces.IDebugableBlock; -import gregtech.api.interfaces.IHasIndexedTexture; -import gregtech.api.interfaces.IProjectileItem; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IBasicEnergyContainer; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.interfaces.tileentity.IUpgradableMachine; -import gregtech.api.items.GT_EnergyArmor_Item; -import gregtech.api.items.GT_Generic_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.net.GT_Packet_Sound; -import gregtech.api.objects.CollectorUtils; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_ItemStack2; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.threads.GT_Runnable_Sound; -import gregtech.api.util.extensions.ArrayExt; -import gregtech.common.GT_Pollution; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import ic2.api.recipe.IRecipeInput; -import ic2.api.recipe.RecipeInputItemStack; -import ic2.api.recipe.RecipeInputOreDict; -import ic2.api.recipe.RecipeOutput; -import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap; -import it.unimi.dsi.fastutil.objects.Reference2LongOpenHashMap; - -/** - * NEVER INCLUDE THIS FILE IN YOUR MOD!!! - *

- * Just a few Utility Functions I use. - */ -public class GT_Utility { - - /** - * Formats a number with group separator and at most 2 fraction digits. - */ - private static final Map decimalFormatters = new HashMap<>(); - - /** - * Forge screwed the Fluid Registry up again, so I make my own, which is also much more efficient than the stupid - * Stuff over there. - */ - private static final List sFluidContainerList = new ArrayList<>(); - - private static final Map sFilledContainerToData = new /* Concurrent */ HashMap<>(); - private static final Map> sEmptyContainerToFluidToData = new HashMap<>(); - private static final Map> sFluidToContainers = new HashMap<>(); - /** - * Must use {@code Supplier} here because the ore prefixes have not yet been registered at class load time. - */ - private static final Map> sOreToCobble = new HashMap<>(); - - private static final Map sOreTable = new HashMap<>(); - public static boolean TE_CHECK = false, BC_CHECK = false, CHECK_ALL = true, RF_CHECK = false; - public static Map sPlayedSoundMap = new /* Concurrent */ HashMap<>(); - private static int sBookCount = 0; - public static UUID defaultUuid = null; // maybe default non-null? - // UUID.fromString("00000000-0000-0000-0000-000000000000"); - - static { - GregTech_API.sItemStackMappings.add(sFilledContainerToData); - GregTech_API.sItemStackMappings.add(sEmptyContainerToFluidToData); - - // 1 is the magic index to get the cobblestone block. - // See: GT_Block_Stones.java, GT_Block_Granites.java - Function> materialToCobble = m -> Suppliers.memoize( - () -> GT_OreDictUnificator.getOres(OrePrefixes.stone, m) - .get(1))::get; - sOreToCobble.put(OrePrefixes.oreBlackgranite, materialToCobble.apply(Materials.GraniteBlack)); - sOreToCobble.put(OrePrefixes.oreRedgranite, materialToCobble.apply(Materials.GraniteRed)); - sOreToCobble.put(OrePrefixes.oreMarble, materialToCobble.apply(Materials.Marble)); - sOreToCobble.put(OrePrefixes.oreBasalt, materialToCobble.apply(Materials.Basalt)); - sOreToCobble.put(OrePrefixes.oreNetherrack, () -> new ItemStack(Blocks.netherrack)); - sOreToCobble.put(OrePrefixes.oreEndstone, () -> new ItemStack(Blocks.end_stone)); - } - - public static int safeInt(long number, int margin) { - return number > Integer.MAX_VALUE - margin ? Integer.MAX_VALUE - margin : (int) number; - } - - public static int safeInt(long number) { - return number > V[V.length - 1] ? safeInt(V[V.length - 1], 1) - : number < Integer.MIN_VALUE ? Integer.MIN_VALUE : (int) number; - } - - public static Field getPublicField(Object aObject, String aField) { - Field rField = null; - try { - rField = aObject.getClass() - .getDeclaredField(aField); - } catch (Throwable e) { - /* Do nothing */ - } - return rField; - } - - public static Field getField(Object aObject, String aField) { - Field rField = null; - try { - rField = aObject.getClass() - .getDeclaredField(aField); - rField.setAccessible(true); - } catch (Throwable e) { - /* Do nothing */ - } - return rField; - } - - public static Field getField(Class aObject, String aField) { - Field rField = null; - try { - rField = aObject.getDeclaredField(aField); - rField.setAccessible(true); - } catch (Throwable e) { - /* Do nothing */ - } - return rField; - } - - public static Method getMethod(Class aObject, String aMethod, Class... aParameterTypes) { - Method rMethod = null; - try { - rMethod = aObject.getMethod(aMethod, aParameterTypes); - rMethod.setAccessible(true); - } catch (Throwable e) { - /* Do nothing */ - } - return rMethod; - } - - public static Method getMethod(Object aObject, String aMethod, Class... aParameterTypes) { - Method rMethod = null; - try { - rMethod = aObject.getClass() - .getMethod(aMethod, aParameterTypes); - rMethod.setAccessible(true); - } catch (Throwable e) { - /* Do nothing */ - } - return rMethod; - } - - public static Field getField(Object aObject, String aField, boolean aPrivate, boolean aLogErrors) { - try { - Field tField = (aObject instanceof Class) ? ((Class) aObject).getDeclaredField(aField) - : (aObject instanceof String) ? Class.forName((String) aObject) - .getDeclaredField(aField) - : aObject.getClass() - .getDeclaredField(aField); - if (aPrivate) tField.setAccessible(true); - return tField; - } catch (Throwable e) { - if (aLogErrors) e.printStackTrace(GT_Log.err); - } - return null; - } - - public static Object getFieldContent(Object aObject, String aField, boolean aPrivate, boolean aLogErrors) { - try { - Field tField = (aObject instanceof Class) ? ((Class) aObject).getDeclaredField(aField) - : (aObject instanceof String) ? Class.forName((String) aObject) - .getDeclaredField(aField) - : aObject.getClass() - .getDeclaredField(aField); - if (aPrivate) tField.setAccessible(true); - return tField.get(aObject instanceof Class || aObject instanceof String ? null : aObject); - } catch (Throwable e) { - if (aLogErrors) e.printStackTrace(GT_Log.err); - } - return null; - } - - public static Object callPublicMethod(Object aObject, String aMethod, Object... aParameters) { - return callMethod(aObject, aMethod, false, false, true, aParameters); - } - - public static Object callPrivateMethod(Object aObject, String aMethod, Object... aParameters) { - return callMethod(aObject, aMethod, true, false, true, aParameters); - } - - public static Object callMethod(Object aObject, String aMethod, boolean aPrivate, boolean aUseUpperCasedDataTypes, - boolean aLogErrors, Object... aParameters) { - try { - Class[] tParameterTypes = new Class[aParameters.length]; - for (byte i = 0; i < aParameters.length; i++) { - if (aParameters[i] instanceof Class) { - tParameterTypes[i] = (Class) aParameters[i]; - aParameters[i] = null; - } else { - tParameterTypes[i] = aParameters[i].getClass(); - } - if (!aUseUpperCasedDataTypes) { - if (tParameterTypes[i] == Boolean.class) tParameterTypes[i] = boolean.class; - else if (tParameterTypes[i] == Byte.class) tParameterTypes[i] = byte.class; - else if (tParameterTypes[i] == Short.class) tParameterTypes[i] = short.class; - else if (tParameterTypes[i] == Integer.class) tParameterTypes[i] = int.class; - else if (tParameterTypes[i] == Long.class) tParameterTypes[i] = long.class; - else if (tParameterTypes[i] == Float.class) tParameterTypes[i] = float.class; - else if (tParameterTypes[i] == Double.class) tParameterTypes[i] = double.class; - } - } - - Method tMethod = (aObject instanceof Class) ? ((Class) aObject).getMethod(aMethod, tParameterTypes) - : aObject.getClass() - .getMethod(aMethod, tParameterTypes); - if (aPrivate) tMethod.setAccessible(true); - return tMethod.invoke(aObject, aParameters); - } catch (Throwable e) { - if (aLogErrors) e.printStackTrace(GT_Log.err); - } - return null; - } - - public static Object callConstructor(String aClass, int aConstructorIndex, Object aReplacementObject, - boolean aLogErrors, Object... aParameters) { - try { - return callConstructor( - Class.forName(aClass), - aConstructorIndex, - aReplacementObject, - aLogErrors, - aParameters); - } catch (Throwable e) { - if (aLogErrors) e.printStackTrace(GT_Log.err); - } - return aReplacementObject; - } - - public static Object callConstructor(Class aClass, int aConstructorIndex, Object aReplacementObject, - boolean aLogErrors, Object... aParameters) { - if (aConstructorIndex < 0) { - try { - for (Constructor tConstructor : aClass.getConstructors()) { - try { - return tConstructor.newInstance(aParameters); - } catch (Throwable ignored) {} - } - } catch (Throwable e) { - if (aLogErrors) e.printStackTrace(GT_Log.err); - } - } else { - try { - return aClass.getConstructors()[aConstructorIndex].newInstance(aParameters); - } catch (Throwable e) { - if (aLogErrors) e.printStackTrace(GT_Log.err); - } - } - return aReplacementObject; - } - - public static String capitalizeString(String aString) { - if (aString != null && aString.length() > 0) return aString.substring(0, 1) - .toUpperCase() + aString.substring(1); - return E; - } - - public static boolean getPotion(EntityLivingBase aPlayer, int aPotionIndex) { - try { - Field tPotionHashmap = null; - - Field[] fields = EntityLiving.class.getDeclaredFields(); - - for (Field field : fields) { - if (field.getType() == HashMap.class) { - tPotionHashmap = field; - tPotionHashmap.setAccessible(true); - break; - } - } - - if (tPotionHashmap != null) return ((HashMap) tPotionHashmap.get(aPlayer)).get(aPotionIndex) != null; - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - return false; - } - - public static String getClassName(Object aObject) { - if (aObject == null) return "null"; - return aObject.getClass() - .getName() - .substring( - aObject.getClass() - .getName() - .lastIndexOf(".") + 1); - } - - public static void removePotion(EntityLivingBase aPlayer, int aPotionIndex) { - try { - Field tPotionHashmap = null; - - Field[] fields = EntityLiving.class.getDeclaredFields(); - - for (Field field : fields) { - if (field.getType() == HashMap.class) { - tPotionHashmap = field; - tPotionHashmap.setAccessible(true); - break; - } - } - - if (tPotionHashmap != null) ((HashMap) tPotionHashmap.get(aPlayer)).remove(aPotionIndex); - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - } - - public static boolean getFullInvisibility(EntityPlayer aPlayer) { - try { - if (aPlayer.isInvisible()) { - for (int i = 0; i < 4; i++) { - if (aPlayer.inventory.armorInventory[i] != null) { - if (aPlayer.inventory.armorInventory[i].getItem() instanceof GT_EnergyArmor_Item) { - if ((((GT_EnergyArmor_Item) aPlayer.inventory.armorInventory[i].getItem()).mSpecials & 512) - != 0) { - if (GT_ModHandler.canUseElectricItem(aPlayer.inventory.armorInventory[i], 10000)) { - return true; - } - } - } - } - } - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - return false; - } - - public static ItemStack suckOneItemStackAt(World aWorld, double aX, double aY, double aZ, double aL, double aH, - double aW) { - for (EntityItem tItem : aWorld.getEntitiesWithinAABB( - EntityItem.class, - AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + aL, aY + aH, aZ + aW))) { - if (!tItem.isDead) { - aWorld.removeEntity(tItem); - tItem.setDead(); - return tItem.getEntityItem(); - } - } - return null; - } - - public static byte getOppositeSide(ForgeDirection side) { - return (byte) side.getOpposite() - .ordinal(); - } - - public static byte getTier(long l) { - byte i = -1; - while (++i < V.length) if (l <= V[i]) return i; - return (byte) (V.length - 1); - } - - public static long getAmperageForTier(long voltage, byte tier) { - return ceilDiv(voltage, GT_Values.V[tier]); - } - - /** - * Rounds up partial voltage that exceeds tiered voltage, e.g. 4,096 -> 8,192(IV) - */ - public static long roundUpVoltage(long voltage) { - if (voltage > V[V.length - 1]) { - return voltage; - } - return V[GT_Utility.getTier(voltage)]; - } - - public static String getColoredTierNameFromVoltage(long voltage) { - return getColoredTierNameFromTier(getTier(voltage)); - } - - public static String getColoredTierNameFromTier(byte tier) { - return GT_Values.TIER_COLORS[tier] + GT_Values.VN[tier] + EnumChatFormatting.RESET; - } - - /** - * @return e.g. {@code " (LV)"} - */ - @Nonnull - public static String getTierNameWithParentheses(long voltage) { - byte tier = getTier(voltage); - if (tier < 0) { - return ""; - } else if (tier == 0) { - return " (" + GT_Values.VN[1] + ")"; - } else if (tier >= GT_Values.VN.length - 1) { - return " (MAX+)"; - } - return " (" + GT_Values.VN[tier] + ")"; - } - - public static void sendChatToPlayer(EntityPlayer aPlayer, String aChatMessage) { - if (aPlayer instanceof EntityPlayerMP && aChatMessage != null) { - aPlayer.addChatComponentMessage(new ChatComponentText(aChatMessage)); - } - } - - public static void checkAvailabilities() { - if (CHECK_ALL) { - try { - Class tClass = IItemDuct.class; - tClass.getCanonicalName(); - TE_CHECK = true; - } catch (Throwable e) { - /**/ - } - try { - Class tClass = buildcraft.api.transport.IPipeTile.class; - tClass.getCanonicalName(); - BC_CHECK = true; - } catch (Throwable e) { - /**/ - } - try { - Class tClass = cofh.api.energy.IEnergyReceiver.class; - tClass.getCanonicalName(); - RF_CHECK = true; - } catch (Throwable e) { - /**/ - } - CHECK_ALL = false; - } - } - - public static boolean isConnectableNonInventoryPipe(TileEntity tileEntity, ForgeDirection side) { - if (tileEntity == null) return false; - checkAvailabilities(); - if (TE_CHECK && tileEntity instanceof IItemDuct) return true; - if (BC_CHECK && tileEntity instanceof buildcraft.api.transport.IPipeTile pipeTile) - return pipeTile.isPipeConnected(side); - return Translocator.isModLoaded() && tileEntity instanceof codechicken.translocator.TileItemTranslocator; - } - - /** - * Moves Stack from Inv-Slot to Inv-Slot, without checking if its even allowed. - * - * @return the Amount of moved Items - */ - public static byte moveStackIntoPipe(IInventory aTileEntity1, Object aTileEntity2, int[] aGrabSlots, - ForgeDirection fromSide, ForgeDirection putSide, List aFilter, boolean aInvertFilter, - byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { - return moveStackIntoPipe( - aTileEntity1, - aTileEntity2, - aGrabSlots, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - true); - } - - /** - * Moves Stack from Inv-Slot to Inv-Slot, without checking if it is even allowed. - * - * @return the Amount of moved Items - */ - public static byte moveStackIntoPipe(IInventory fromInventory, Object toObject, int[] fromSlots, - ForgeDirection fromSide, ForgeDirection putSide, List aFilter, boolean aInvertFilter, - byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, - boolean dropItem) { - if (fromInventory == null || aMaxTargetStackSize <= 0 - || aMinTargetStackSize <= 0 - || aMinTargetStackSize > aMaxTargetStackSize - || aMaxMoveAtOnce <= 0 - || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; - if (toObject != null) { - checkAvailabilities(); - if (TE_CHECK && toObject instanceof IItemDuct itemDuct) { - for (final int aGrabSlot : fromSlots) { - if (listContainsItem(aFilter, fromInventory.getStackInSlot(aGrabSlot), true, aInvertFilter)) { - if (isAllowedToTakeFromSlot( - fromInventory, - aGrabSlot, - fromSide, - fromInventory.getStackInSlot(aGrabSlot))) { - if (Math.max(aMinMoveAtOnce, aMinTargetStackSize) - <= fromInventory.getStackInSlot(aGrabSlot).stackSize) { - ItemStack tStack = copyAmount( - Math.min( - fromInventory.getStackInSlot(aGrabSlot).stackSize, - Math.min(aMaxMoveAtOnce, aMaxTargetStackSize)), - fromInventory.getStackInSlot(aGrabSlot)); - ItemStack rStack = itemDuct.insertItem(putSide, copyOrNull(tStack)); - byte tMovedItemCount = (byte) (tStack.stackSize - - (rStack == null ? 0 : rStack.stackSize)); - if (tMovedItemCount >= 1 /* Math.max(aMinMoveAtOnce, aMinTargetStackSize) */) { - fromInventory.decrStackSize(aGrabSlot, tMovedItemCount); - fromInventory.markDirty(); - return tMovedItemCount; - } - } - } - } - } - return 0; - } - if (BC_CHECK && toObject instanceof buildcraft.api.transport.IPipeTile bcPipe) { - for (int fromSlot : fromSlots) { - if (listContainsItem(aFilter, fromInventory.getStackInSlot(fromSlot), true, aInvertFilter)) { - if (isAllowedToTakeFromSlot( - fromInventory, - fromSlot, - fromSide, - fromInventory.getStackInSlot(fromSlot))) { - if (Math.max(aMinMoveAtOnce, aMinTargetStackSize) - <= fromInventory.getStackInSlot(fromSlot).stackSize) { - ItemStack tStack = copyAmount( - Math.min( - fromInventory.getStackInSlot(fromSlot).stackSize, - Math.min(aMaxMoveAtOnce, aMaxTargetStackSize)), - fromInventory.getStackInSlot(fromSlot)); - byte tMovedItemCount = (byte) bcPipe.injectItem(copyOrNull(tStack), false, putSide); - if (tMovedItemCount >= Math.max(aMinMoveAtOnce, aMinTargetStackSize)) { - tMovedItemCount = (byte) (bcPipe - .injectItem(copyAmount(tMovedItemCount, tStack), true, putSide)); - fromInventory.decrStackSize(fromSlot, tMovedItemCount); - fromInventory.markDirty(); - return tMovedItemCount; - } - } - } - } - } - return 0; - } - } - - if (fromInventory instanceof TileEntity fromTileEntity && fromSide != ForgeDirection.UNKNOWN - && fromSide.getOpposite() == ForgeDirection.getOrientation(putSide.ordinal())) { - int tX = fromTileEntity.xCoord + fromSide.offsetX, tY = fromTileEntity.yCoord + fromSide.offsetY, - tZ = fromTileEntity.zCoord + fromSide.offsetZ; - if (!hasBlockHitBox(((TileEntity) fromInventory).getWorldObj(), tX, tY, tZ) && dropItem) { - for (final int fromSlot : fromSlots) { - if (listContainsItem(aFilter, fromInventory.getStackInSlot(fromSlot), true, aInvertFilter)) { - if (isAllowedToTakeFromSlot( - fromInventory, - fromSlot, - fromSide, - fromInventory.getStackInSlot(fromSlot))) { - if (Math.max(aMinMoveAtOnce, aMinTargetStackSize) - <= fromInventory.getStackInSlot(fromSlot).stackSize) { - final ItemStack tStack = copyAmount( - Math.min( - fromInventory.getStackInSlot(fromSlot).stackSize, - Math.min(aMaxMoveAtOnce, aMaxTargetStackSize)), - fromInventory.getStackInSlot(fromSlot)); - final EntityItem tEntity = new EntityItem( - ((TileEntity) fromInventory).getWorldObj(), - tX + 0.5, - tY + 0.5, - tZ + 0.5, - tStack); - tEntity.motionX = tEntity.motionY = tEntity.motionZ = 0; - ((TileEntity) fromInventory).getWorldObj() - .spawnEntityInWorld(tEntity); - assert tStack != null; - fromInventory.decrStackSize(fromSlot, tStack.stackSize); - fromInventory.markDirty(); - return (byte) tStack.stackSize; - } - } - } - } - } - } - return 0; - } - - /** - * Moves Stack from Inv-Slot to Inv-Slot, without checking if its even allowed. (useful for internal Inventory - * Operations) - * - * @return the Amount of moved Items - */ - public static byte moveStackFromSlotAToSlotB(IInventory aTileEntity1, IInventory aTileEntity2, int aGrabFrom, - int aPutTo, byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { - if (aTileEntity1 == null || aTileEntity2 == null - || aMinTargetStackSize <= 0 - || aMinTargetStackSize > aMaxTargetStackSize - || aMaxMoveAtOnce <= 0 - || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; - - ItemStack tStack1 = aTileEntity1.getStackInSlot(aGrabFrom), tStack2 = aTileEntity2.getStackInSlot(aPutTo), - tStack3; - if (tStack1 != null) { - if (tStack2 != null && !areStacksEqual(tStack1, tStack2)) return 0; - tStack3 = copyOrNull(tStack1); - aMaxTargetStackSize = (byte) Math.min( - aMaxTargetStackSize, - Math.min( - tStack3.getMaxStackSize(), - Math.min( - tStack2 == null ? Integer.MAX_VALUE : tStack2.getMaxStackSize(), - aTileEntity2.getInventoryStackLimit()))); - tStack3.stackSize = Math - .min(tStack3.stackSize, aMaxTargetStackSize - (tStack2 == null ? 0 : tStack2.stackSize)); - if (tStack3.stackSize > aMaxMoveAtOnce) tStack3.stackSize = aMaxMoveAtOnce; - if (tStack3.stackSize + (tStack2 == null ? 0 : tStack2.stackSize) - >= Math.min(tStack3.getMaxStackSize(), aMinTargetStackSize) && tStack3.stackSize >= aMinMoveAtOnce) { - tStack3 = aTileEntity1.decrStackSize(aGrabFrom, tStack3.stackSize); - aTileEntity1.markDirty(); - if (tStack3 != null) { - if (tStack2 == null) { - aTileEntity2.setInventorySlotContents(aPutTo, copyOrNull(tStack3)); - } else { - tStack2.stackSize += tStack3.stackSize; - } - aTileEntity2.markDirty(); - return (byte) tStack3.stackSize; - } - } - } - return 0; - } - - public static boolean isAllowedToTakeFromSlot(IInventory aTileEntity, int aSlot, ForgeDirection side, - ItemStack aStack) { - if (side == ForgeDirection.UNKNOWN) { - return Arrays.stream(ForgeDirection.VALID_DIRECTIONS) - .anyMatch(d -> isAllowedToTakeFromSlot(aTileEntity, aSlot, d, aStack)); - } - if (aTileEntity instanceof ISidedInventory sided) return sided.canExtractItem(aSlot, aStack, side.ordinal()); - return true; - } - - public static boolean isAllowedToPutIntoSlot(IInventory aTileEntity, int aSlot, ForgeDirection side, - ItemStack aStack, byte aMaxStackSize) { - ItemStack tStack = aTileEntity.getStackInSlot(aSlot); - if (tStack != null && (!areStacksEqual(tStack, aStack) || tStack.stackSize >= tStack.getMaxStackSize())) - return false; - if (side == ForgeDirection.UNKNOWN) { - return Arrays.stream(ForgeDirection.VALID_DIRECTIONS) - .anyMatch(d -> isAllowedToPutIntoSlot(aTileEntity, aSlot, d, aStack, aMaxStackSize)); - } - if (aTileEntity instanceof ISidedInventory - && !((ISidedInventory) aTileEntity).canInsertItem(aSlot, aStack, side.ordinal())) return false; - return aSlot < aTileEntity.getSizeInventory() && aTileEntity.isItemValidForSlot(aSlot, aStack); - } - - /** - * moves multiple stacks from Inv-Side to Inv-Side - * - * @return the Amount of moved Items - */ - public static int moveMultipleItemStacks(Object aTileEntity1, Object aTileEntity2, ForgeDirection fromSide, - ForgeDirection putSide, List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, - byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, int aStackAmount) { - if (aTileEntity1 instanceof IInventory) return moveMultipleItemStacks( - (IInventory) aTileEntity1, - aTileEntity2, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aStackAmount, - true); - return 0; - } - - public static int moveMultipleItemStacks(IInventory fromInventory, Object toObject, ForgeDirection fromSide, - ForgeDirection putSide, List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, - byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, int aMaxStackTransfer, - boolean aDoCheckChests) { - if (fromInventory == null || aMaxTargetStackSize <= 0 - || aMinTargetStackSize <= 0 - || aMaxMoveAtOnce <= 0 - || aMinTargetStackSize > aMaxTargetStackSize - || aMinMoveAtOnce > aMaxMoveAtOnce - || aMaxStackTransfer == 0) return 0; - - // find where to take from - final int[] tGrabSlots = new int[fromInventory.getSizeInventory()]; - int tGrabSlotsSize = 0; - if (fromInventory instanceof ISidedInventory) { - for (int i : ((ISidedInventory) fromInventory).getAccessibleSlotsFromSide(fromSide.ordinal())) { - final ItemStack s = fromInventory.getStackInSlot(i); - if (s == null || !isAllowedToTakeFromSlot(fromInventory, i, fromSide, s) - || s.stackSize < aMinMoveAtOnce - || !listContainsItem(aFilter, s, true, aInvertFilter)) continue; - tGrabSlots[tGrabSlotsSize++] = i; - } - } else { - for (int i = 0; i < tGrabSlots.length; i++) { - ItemStack s = fromInventory.getStackInSlot(i); - if (s == null || s.stackSize < aMinMoveAtOnce || !listContainsItem(aFilter, s, true, aInvertFilter)) - continue; - tGrabSlots[tGrabSlotsSize++] = i; - } - } - - // no source, bail out - if (tGrabSlotsSize == 0) { - // maybe source is a double chest. check it - if (aDoCheckChests && fromInventory instanceof TileEntityChest chest) return moveFromAdjacentChests( - chest, - toObject, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer); - return 0; - } - - // if target is an inventory, e.g. chest, machine, drawers... - if (toObject instanceof IInventory toInventory) { - - // partially filled slot spare space mapping. - // value is the sum of all spare space left not counting completely empty slot - final HashMap tPutItems = new HashMap<>(toInventory.getSizeInventory()); - // partially filled slot contents - final HashMap> tPutItemStacks = new HashMap<>(toInventory.getSizeInventory()); - // completely empty slots - final List tPutFreeSlots = new ArrayList<>(toInventory.getSizeInventory()); - - // find possible target slots - int[] accessibleSlots = null; - if (toObject instanceof ISidedInventory sided) - accessibleSlots = sided.getAccessibleSlotsFromSide(putSide.ordinal()); - for (int i = 0; i < toInventory.getSizeInventory(); i++) { - int slot = i; - if (accessibleSlots != null) { - if (accessibleSlots.length <= i) break; - slot = accessibleSlots[slot]; - } - ItemStack s = toInventory.getStackInSlot(slot); - if (s == null) { - tPutFreeSlots.add(slot); - } else if ((s.stackSize < s.getMaxStackSize() && s.stackSize < toInventory.getInventoryStackLimit()) - && aMinMoveAtOnce <= s.getMaxStackSize() - s.stackSize - && isAllowedToPutIntoSlot(toInventory, slot, putSide, s, (byte) 64)) { - ItemId sID = ItemId.createNoCopy(s); - tPutItems.merge( - sID, - (Math.min(s.getMaxStackSize(), toInventory.getInventoryStackLimit()) - s.stackSize), - Integer::sum); - tPutItemStacks.computeIfAbsent(sID, k -> new ArrayList<>()) - .add(s); - } - } - - // target completely filled, bail out - if (tPutItems.isEmpty() && tPutFreeSlots.isEmpty()) { - // maybe target is a double chest. check it. - if (aDoCheckChests && toObject instanceof TileEntityChest chest) return moveToAdjacentChests( - fromInventory, - chest, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer); - return 0; - } - - // go over source stacks one by one - int tStacksMoved = 0, tTotalItemsMoved = 0; - for (int j = 0; j < tGrabSlotsSize; j++) { - final int grabSlot = tGrabSlots[j]; - int tMovedItems; - int tStackSize; - do { - tMovedItems = 0; - final ItemStack tGrabStack = fromInventory.getStackInSlot(grabSlot); - if (tGrabStack == null) break; - tStackSize = tGrabStack.stackSize; - final ItemId sID = ItemId.createNoCopy(tGrabStack); - - if (tPutItems.containsKey(sID)) { - // there is a partially filled slot, try merging - final int canPut = Math.min(tPutItems.get(sID), aMaxMoveAtOnce); - if (canPut >= aMinMoveAtOnce) { - final List putStack = tPutItemStacks.get(sID); - if (!putStack.isEmpty()) { - // can move, do merge - int toPut = Math.min(canPut, tStackSize); - tMovedItems = toPut; - for (int i = 0; i < putStack.size(); i++) { - final ItemStack s = putStack.get(i); - final int sToPut = Math.min( - Math.min( - Math.min(toPut, s.getMaxStackSize() - s.stackSize), - toInventory.getInventoryStackLimit() - s.stackSize), - aMaxTargetStackSize - s.stackSize); - if (sToPut <= 0) continue; - if (sToPut < aMinMoveAtOnce) continue; - if (s.stackSize + sToPut < aMinTargetStackSize) continue; - toPut -= sToPut; - s.stackSize += sToPut; - if (s.stackSize == s.getMaxStackSize() - || s.stackSize == toInventory.getInventoryStackLimit()) { - // this slot is full. remove this stack from candidate list - putStack.remove(i); - i--; - } - if (toPut == 0) break; - } - tMovedItems -= toPut; - if (tMovedItems > 0) { - tStackSize -= tMovedItems; - tTotalItemsMoved += tMovedItems; - // deduct spare space - tPutItems.merge(sID, tMovedItems, (a, b) -> a.equals(b) ? null : a - b); - - if (tStackSize == 0) fromInventory.setInventorySlotContents(grabSlot, null); - else tGrabStack.stackSize = tStackSize; - - fromInventory.markDirty(); - toInventory.markDirty(); - } - } - } - } - // still stuff to move & have completely empty slots - if (tStackSize > 0 && !tPutFreeSlots.isEmpty()) { - for (int i = 0; i < tPutFreeSlots.size(); i++) { - final int tPutSlot = tPutFreeSlots.get(i); - if (isAllowedToPutIntoSlot(toInventory, tPutSlot, putSide, tGrabStack, (byte) 64)) { - // allowed, now do moving - final int tMoved = moveStackFromSlotAToSlotB( - fromInventory, - toInventory, - grabSlot, - tPutSlot, - aMaxTargetStackSize, - aMinTargetStackSize, - (byte) (aMaxMoveAtOnce - tMovedItems), - aMinMoveAtOnce); - if (tMoved > 0) { - final ItemStack s = toInventory.getStackInSlot(tPutSlot); - if (s != null) { - // s might be null if tPutInventory is very special, e.g. infinity chest - // if s is null, we will not mark this slot as target candidate for anything - final int spare = Math - .min(s.getMaxStackSize(), toInventory.getInventoryStackLimit()) - - s.stackSize; - if (spare > 0) { - final ItemId ssID = ItemId.createNoCopy(s); - // add back to spare space count - tPutItems.merge(ssID, spare, Integer::sum); - // add to partially filled slot list - tPutItemStacks.computeIfAbsent(ssID, k -> new ArrayList<>()) - .add(s); - } - // this is no longer free - tPutFreeSlots.remove(i); - i--; - } - // else -> noop - // this is still a free slot. no need to do anything. - tTotalItemsMoved += tMoved; - tMovedItems += tMoved; - tStackSize -= tMoved; - if (tStackSize == 0) break; - } - } - } - } - - if (tMovedItems > 0) { - // check if we have moved enough stacks - if (++tStacksMoved >= aMaxStackTransfer) return tTotalItemsMoved; - } - } while (tMovedItems > 0 && tStackSize > 0); // support inventories that store more than a stack in a - // slot - } - - // check if source is a double chest, if yes, try move from the adjacent as well - if (aDoCheckChests && fromInventory instanceof TileEntityChest chest) { - final int tAmount = moveFromAdjacentChests( - chest, - toObject, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer - tStacksMoved); - if (tAmount != 0) return tAmount + tTotalItemsMoved; - } - - // check if target is a double chest, if yes, try move to the adjacent as well - if (aDoCheckChests && toObject instanceof TileEntityChest chest) { - final int tAmount = moveToAdjacentChests( - fromInventory, - chest, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer - tStacksMoved); - if (tAmount != 0) return tAmount + tTotalItemsMoved; - } - - return tTotalItemsMoved; - } - // there should be a function to transfer more than 1 stack in a pipe - // however I do not see any ways to improve it. too much work for what it is worth - int tTotalItemsMoved = 0; - final int tGrabInventorySize = tGrabSlots.length; - for (int i = 0; i < tGrabInventorySize; i++) { - final int tMoved = moveStackIntoPipe( - fromInventory, - toObject, - tGrabSlots, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aDoCheckChests); - if (tMoved == 0) return tTotalItemsMoved; - else tTotalItemsMoved += tMoved; - } - return 0; - } - - private static int moveToAdjacentChests(IInventory aTileEntity1, TileEntityChest aTargetChest, - ForgeDirection fromSide, ForgeDirection putSide, List aFilter, boolean aInvertFilter, - byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, - int aMaxStackTransfer) { - if (aTargetChest.adjacentChestChecked) { - if (aTargetChest.adjacentChestXNeg != null) { - return moveMultipleItemStacks( - aTileEntity1, - aTargetChest.adjacentChestXNeg, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer, - false); - } else if (aTargetChest.adjacentChestZNeg != null) { - return moveMultipleItemStacks( - aTileEntity1, - aTargetChest.adjacentChestZNeg, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer, - false); - } else if (aTargetChest.adjacentChestXPos != null) { - return moveMultipleItemStacks( - aTileEntity1, - aTargetChest.adjacentChestXPos, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer, - false); - } else if (aTargetChest.adjacentChestZPos != null) { - return moveMultipleItemStacks( - aTileEntity1, - aTargetChest.adjacentChestZPos, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer, - false); - } - } - return 0; - } - - private static int moveFromAdjacentChests(TileEntityChest fromTileEntityChest, Object toObject, - ForgeDirection fromSide, ForgeDirection putSide, List aFilter, boolean aInvertFilter, - byte aMaxTargetStackSize, byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, - int aMaxStackTransfer) { - if (fromTileEntityChest.adjacentChestXNeg != null) { - return moveMultipleItemStacks( - fromTileEntityChest.adjacentChestXNeg, - toObject, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer, - false); - } else if (fromTileEntityChest.adjacentChestZNeg != null) { - return moveMultipleItemStacks( - fromTileEntityChest.adjacentChestZNeg, - toObject, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer, - false); - } else if (fromTileEntityChest.adjacentChestXPos != null) { - return moveMultipleItemStacks( - fromTileEntityChest.adjacentChestXPos, - toObject, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer, - false); - } else if (fromTileEntityChest.adjacentChestZPos != null) { - return moveMultipleItemStacks( - fromTileEntityChest.adjacentChestZPos, - toObject, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aMaxStackTransfer, - false); - } - return 0; - } - - /** - * Moves Stack from Inv-Side to Inv-Side. - * - * @return the Amount of moved Items - */ - public static byte moveOneItemStack(Object fromObject, Object toObject, ForgeDirection fromSide, - ForgeDirection putSide, List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, - byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { - if (fromObject instanceof IInventory inv) return moveOneItemStack( - inv, - toObject, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - true); - return 0; - } - - /** - * This is only because I needed an additional Parameter for the Double Chest Check. - */ - private static byte moveOneItemStack(IInventory fromInventory, Object toObject, ForgeDirection fromSide, - ForgeDirection putSide, List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, - byte aMinTargetStackSize, byte aMaxMoveAtOnce, byte aMinMoveAtOnce, boolean aDoCheckChests) { - if (fromInventory == null || aMaxTargetStackSize <= 0 - || aMinTargetStackSize <= 0 - || aMaxMoveAtOnce <= 0 - || aMinTargetStackSize > aMaxTargetStackSize - || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; - - int[] tGrabSlots = null; - if (fromInventory instanceof ISidedInventory) - tGrabSlots = ((ISidedInventory) fromInventory).getAccessibleSlotsFromSide(fromSide.ordinal()); - if (tGrabSlots == null) { - tGrabSlots = new int[fromInventory.getSizeInventory()]; - for (int i = 0; i < tGrabSlots.length; i++) tGrabSlots[i] = i; - } - - if (toObject instanceof IInventory inv) { - int[] tPutSlots = null; - if (toObject instanceof ISidedInventory sided) - tPutSlots = sided.getAccessibleSlotsFromSide(putSide.ordinal()); - - if (tPutSlots == null) { - tPutSlots = new int[inv.getSizeInventory()]; - for (int i = 0; i < tPutSlots.length; i++) tPutSlots[i] = i; - } - - for (final int tGrabSlot : tGrabSlots) { - byte tMovedItemCount = 0; - final ItemStack tGrabStack = fromInventory.getStackInSlot(tGrabSlot); - if (listContainsItem(aFilter, tGrabStack, true, aInvertFilter) - && (tGrabStack.stackSize >= aMinMoveAtOnce - && isAllowedToTakeFromSlot(fromInventory, tGrabSlot, fromSide, tGrabStack))) { - for (final int tPutSlot : tPutSlots) { - if (isAllowedToPutIntoSlot(inv, tPutSlot, putSide, tGrabStack, aMaxTargetStackSize)) { - tMovedItemCount += moveStackFromSlotAToSlotB( - fromInventory, - inv, - tGrabSlot, - tPutSlot, - aMaxTargetStackSize, - aMinTargetStackSize, - (byte) (aMaxMoveAtOnce - tMovedItemCount), - aMinMoveAtOnce); - if (tMovedItemCount >= aMaxMoveAtOnce || (tMovedItemCount > 0 && aMaxTargetStackSize < 64)) - return tMovedItemCount; - } - } - - } - if (tMovedItemCount > 0) return tMovedItemCount; - } - - if (aDoCheckChests && fromInventory instanceof TileEntityChest fromChest - && (fromChest.adjacentChestChecked)) { - byte tAmount = 0; - if (fromChest.adjacentChestXNeg != null) { - tAmount = moveOneItemStack( - fromChest.adjacentChestXNeg, - toObject, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } else if (fromChest.adjacentChestZNeg != null) { - tAmount = moveOneItemStack( - fromChest.adjacentChestZNeg, - toObject, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } else if (fromChest.adjacentChestXPos != null) { - tAmount = moveOneItemStack( - fromChest.adjacentChestXPos, - toObject, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } else if (fromChest.adjacentChestZPos != null) { - tAmount = moveOneItemStack( - fromChest.adjacentChestZPos, - toObject, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } - if (tAmount != 0) return tAmount; - - } - if (aDoCheckChests && toObject instanceof TileEntityChest toChest && (toChest.adjacentChestChecked)) { - byte tAmount = 0; - if (toChest.adjacentChestXNeg != null) { - tAmount = moveOneItemStack( - fromInventory, - toChest.adjacentChestXNeg, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } else if (toChest.adjacentChestZNeg != null) { - tAmount = moveOneItemStack( - fromInventory, - toChest.adjacentChestZNeg, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } else if (toChest.adjacentChestXPos != null) { - tAmount = moveOneItemStack( - fromInventory, - toChest.adjacentChestXPos, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } else if (toChest.adjacentChestZPos != null) { - tAmount = moveOneItemStack( - fromInventory, - toChest.adjacentChestZPos, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } - if (tAmount != 0) return tAmount; - - } - } - - return moveStackIntoPipe( - fromInventory, - toObject, - tGrabSlots, - fromSide, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aDoCheckChests); - } - - /** - * Moves Stack from Inv-Side to Inv-Slot. - * - * @return the Amount of moved Items - */ - public static byte moveOneItemStackIntoSlot(Object fromTileEntity, Object toTileEntity, ForgeDirection fromSide, - int putSlot, List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, - byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { - if (!(fromTileEntity instanceof IInventory fromInv) || aMaxTargetStackSize <= 0 - || aMinTargetStackSize <= 0 - || aMaxMoveAtOnce <= 0 - || aMinTargetStackSize > aMaxTargetStackSize - || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; - - int[] tGrabSlots = null; - if (fromTileEntity instanceof ISidedInventory sided) - tGrabSlots = sided.getAccessibleSlotsFromSide(fromSide.ordinal()); - if (tGrabSlots == null) { - tGrabSlots = new int[fromInv.getSizeInventory()]; - for (int i = 0; i < tGrabSlots.length; i++) tGrabSlots[i] = i; - } - - if (toTileEntity instanceof IInventory toInv) { - for (final int tGrabSlot : tGrabSlots) { - if (listContainsItem(aFilter, fromInv.getStackInSlot(tGrabSlot), true, aInvertFilter)) { - if (isAllowedToTakeFromSlot(fromInv, tGrabSlot, fromSide, fromInv.getStackInSlot(tGrabSlot))) { - if (isAllowedToPutIntoSlot( - toInv, - putSlot, - ForgeDirection.UNKNOWN, - fromInv.getStackInSlot(tGrabSlot), - aMaxTargetStackSize)) { - byte tMovedItemCount = moveStackFromSlotAToSlotB( - fromInv, - toInv, - tGrabSlot, - putSlot, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce); - if (tMovedItemCount > 0) return tMovedItemCount; - } - } - } - } - } - - final ForgeDirection toSide = fromSide.getOpposite(); - moveStackIntoPipe( - fromInv, - toTileEntity, - tGrabSlots, - fromSide, - ForgeDirection.UNKNOWN, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce); - return 0; - } - - /** - * Moves Stack from Inv-Slot to Inv-Slot. - * - * @return the Amount of moved Items - */ - public static byte moveFromSlotToSlot(IInventory fromInv, IInventory toInv, int aGrabFrom, int aPutTo, - List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, - byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { - if (fromInv == null || toInv == null - || aGrabFrom < 0 - || aPutTo < 0 - || aMinTargetStackSize <= 0 - || aMaxMoveAtOnce <= 0 - || aMinTargetStackSize > aMaxTargetStackSize - || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; - if (listContainsItem(aFilter, fromInv.getStackInSlot(aGrabFrom), true, aInvertFilter)) { - if (isAllowedToTakeFromSlot( - fromInv, - aGrabFrom, - ForgeDirection.UNKNOWN, - fromInv.getStackInSlot(aGrabFrom))) { - if (isAllowedToPutIntoSlot( - toInv, - aPutTo, - ForgeDirection.UNKNOWN, - fromInv.getStackInSlot(aGrabFrom), - aMaxTargetStackSize)) { - byte tMovedItemCount = moveStackFromSlotAToSlotB( - fromInv, - toInv, - aGrabFrom, - aPutTo, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce); - if (tMovedItemCount > 0) return tMovedItemCount; - } - } - } - return 0; - } - - /** - * Moves Stack from Inv-Side to Inv-Slot. - * - * @return the Amount of moved Items - */ - public static byte moveFromSlotToSide(IInventory fromTile, Object toTile, int fromSlot, ForgeDirection putSide, - List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, - byte aMaxMoveAtOnce, byte aMinMoveAtOnce, boolean aDoCheckChests) { - if (fromTile == null || fromSlot < 0 - || aMinTargetStackSize <= 0 - || aMaxMoveAtOnce <= 0 - || aMinTargetStackSize > aMaxTargetStackSize - || aMinMoveAtOnce > aMaxMoveAtOnce) return 0; - - if (!listContainsItem(aFilter, fromTile.getStackInSlot(fromSlot), true, aInvertFilter) - || !isAllowedToTakeFromSlot(fromTile, fromSlot, ForgeDirection.UNKNOWN, fromTile.getStackInSlot(fromSlot))) - return 0; - - if (toTile instanceof IInventory) { - int[] tPutSlots = null; - if (toTile instanceof ISidedInventory sided) - tPutSlots = sided.getAccessibleSlotsFromSide(putSide.ordinal()); - - if (tPutSlots == null) { - tPutSlots = new int[((IInventory) toTile).getSizeInventory()]; - for (int i = 0; i < tPutSlots.length; i++) tPutSlots[i] = i; - } - - byte tMovedItemCount = 0; - for (final int tPutSlot : tPutSlots) { - if (isAllowedToPutIntoSlot( - (IInventory) toTile, - tPutSlot, - putSide, - fromTile.getStackInSlot(fromSlot), - aMaxTargetStackSize)) { - tMovedItemCount += moveStackFromSlotAToSlotB( - fromTile, - (IInventory) toTile, - fromSlot, - tPutSlot, - aMaxTargetStackSize, - aMinTargetStackSize, - (byte) (aMaxMoveAtOnce - tMovedItemCount), - aMinMoveAtOnce); - if (tMovedItemCount >= aMaxMoveAtOnce) { - return tMovedItemCount; - } - } - } - if (tMovedItemCount > 0) return tMovedItemCount; - - if (aDoCheckChests && toTile instanceof TileEntityChest tTileEntity2) { - if (tTileEntity2.adjacentChestChecked) { - if (tTileEntity2.adjacentChestXNeg != null) { - tMovedItemCount = moveFromSlotToSide( - fromTile, - tTileEntity2.adjacentChestXNeg, - fromSlot, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } else if (tTileEntity2.adjacentChestZNeg != null) { - tMovedItemCount = moveFromSlotToSide( - fromTile, - tTileEntity2.adjacentChestZNeg, - fromSlot, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } else if (tTileEntity2.adjacentChestXPos != null) { - tMovedItemCount = moveFromSlotToSide( - fromTile, - tTileEntity2.adjacentChestXPos, - fromSlot, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } else if (tTileEntity2.adjacentChestZPos != null) { - tMovedItemCount = moveFromSlotToSide( - fromTile, - tTileEntity2.adjacentChestZPos, - fromSlot, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - false); - } - if (tMovedItemCount > 0) return tMovedItemCount; - } - } - } - return moveStackIntoPipe( - fromTile, - toTile, - new int[] { fromSlot }, - ForgeDirection.UNKNOWN, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - aDoCheckChests); - } - - public static byte moveFromSlotToSide(IInventory fromTile, Object toTile, int fromSlot, ForgeDirection putSide, - List aFilter, boolean aInvertFilter, byte aMaxTargetStackSize, byte aMinTargetStackSize, - byte aMaxMoveAtOnce, byte aMinMoveAtOnce) { - return moveFromSlotToSide( - fromTile, - toTile, - fromSlot, - putSide, - aFilter, - aInvertFilter, - aMaxTargetStackSize, - aMinTargetStackSize, - aMaxMoveAtOnce, - aMinMoveAtOnce, - true); - } - - /** - * Move up to maxAmount amount of fluid from source to dest, with optional filtering via allowMove. note that this - * filter cannot bypass filtering done by IFluidHandlers themselves. - * - * this overload will assume the fill side is the opposite of drainSide - * - * @param source tank to drain from. method become noop if this is null - * @param dest tank to fill to. method become noop if this is null - * @param drainSide side used during draining operation - * @param maxAmount max amount of fluid to transfer. method become noop if this is not a positive integer - * @param allowMove filter. can be null to signal all fluids are accepted - */ - public static void moveFluid(IFluidHandler source, IFluidHandler dest, ForgeDirection drainSide, int maxAmount, - @Nullable Predicate allowMove) { - moveFluid(source, dest, drainSide, drainSide.getOpposite(), maxAmount, allowMove); - } - - /** - * Move up to maxAmount amount of fluid from source to dest, with optional filtering via allowMove. note that this - * filter cannot bypass filtering done by IFluidHandlers themselves. - * - * @param source tank to drain from. method become noop if this is null - * @param dest tank to fill to. method become noop if this is null - * @param drainSide side used during draining operation - * @param fillSide side used during filling operation - * @param maxAmount max amount of fluid to transfer. method become noop if this is not a positive integer - * @param allowMove filter. can be null to signal all fluids are accepted - */ - public static void moveFluid(IFluidHandler source, IFluidHandler dest, ForgeDirection drainSide, - ForgeDirection fillSide, int maxAmount, @Nullable Predicate allowMove) { - if (source == null || dest == null || maxAmount <= 0) return; - FluidStack liquid = source.drain(drainSide, maxAmount, false); - if (liquid == null) return; - liquid = liquid.copy(); - liquid.amount = dest.fill(fillSide, liquid, false); - if (liquid.amount > 0 && (allowMove == null || allowMove.test(liquid))) { - dest.fill(fillSide, source.drain(drainSide, liquid.amount, true), true); - } - } - - public static boolean listContainsItem(Collection aList, ItemStack aStack, boolean aTIfListEmpty, - boolean aInvertFilter) { - if (aStack == null || aStack.stackSize < 1) return false; - if (aList == null) return aTIfListEmpty; - boolean tEmpty = true; - for (ItemStack tStack : aList) { - if (tStack != null) { - tEmpty = false; - if (areStacksEqual(aStack, tStack)) { - return !aInvertFilter; - } - } - } - return tEmpty ? aTIfListEmpty : aInvertFilter; - } - - public static boolean areStacksOrToolsEqual(ItemStack aStack1, ItemStack aStack2) { - if (aStack1 != null && aStack2 != null && aStack1.getItem() == aStack2.getItem()) { - if (aStack1.getItem() - .isDamageable()) return true; - return ((aStack1.getTagCompound() == null) == (aStack2.getTagCompound() == null)) - && (aStack1.getTagCompound() == null || aStack1.getTagCompound() - .equals(aStack2.getTagCompound())) - && (Items.feather.getDamage(aStack1) == Items.feather.getDamage(aStack2) - || Items.feather.getDamage(aStack1) == W - || Items.feather.getDamage(aStack2) == W); - } - return false; - } - - public static boolean areFluidsEqual(FluidStack aFluid1, FluidStack aFluid2) { - return areFluidsEqual(aFluid1, aFluid2, false); - } - - public static boolean areFluidsEqual(FluidStack aFluid1, FluidStack aFluid2, boolean aIgnoreNBT) { - return aFluid1 != null && aFluid2 != null - && aFluid1.getFluid() == aFluid2.getFluid() - && (aIgnoreNBT || ((aFluid1.tag == null) == (aFluid2.tag == null)) - && (aFluid1.tag == null || aFluid1.tag.equals(aFluid2.tag))); - } - - public static boolean areStacksEqual(ItemStack aStack1, ItemStack aStack2) { - return areStacksEqual(aStack1, aStack2, false); - } - - public static boolean areStacksEqual(ItemStack aStack1, ItemStack aStack2, boolean aIgnoreNBT) { - return aStack1 != null && aStack2 != null - && aStack1.getItem() == aStack2.getItem() - && (Items.feather.getDamage(aStack1) == Items.feather.getDamage(aStack2) - || Items.feather.getDamage(aStack1) == W - || Items.feather.getDamage(aStack2) == W) - && (aIgnoreNBT || (((aStack1.getTagCompound() == null) == (aStack2.getTagCompound() == null)) - && (aStack1.getTagCompound() == null || aStack1.getTagCompound() - .equals(aStack2.getTagCompound())))); - } - - public static boolean areStacksEqualOrNull(ItemStack stack1, ItemStack stack2) { - return (stack1 == null && stack2 == null) || GT_Utility.areStacksEqual(stack1, stack2); - } - - /** - * Treat both null list, or both null item stack at same list position as equal. - *

- * Since ItemStack doesn't override equals and hashCode, you cannot just use Objects.equals - */ - public static boolean areStackListsEqual(List lhs, List rhs, boolean ignoreStackSize, - boolean ignoreNBT) { - if (lhs == null) return rhs == null; - if (rhs == null) return false; - if (lhs.size() != rhs.size()) return false; - for (Iterator it1 = lhs.iterator(), it2 = rhs.iterator(); it1.hasNext() && it2.hasNext();) { - if (!areStacksEqualExtended(it1.next(), it2.next(), ignoreStackSize, ignoreNBT)) return false; - } - return true; - } - - private static boolean areStacksEqualExtended(ItemStack lhs, ItemStack rhs, boolean ignoreStackSize, - boolean ignoreNBT) { - if (lhs == null) return rhs == null; - if (rhs == null) return false; - return lhs.getItem() == rhs.getItem() - && (ignoreNBT || Objects.equals(lhs.stackTagCompound, rhs.stackTagCompound)) - && (ignoreStackSize || lhs.stackSize == rhs.stackSize); - } - - public static boolean areUnificationsEqual(ItemStack aStack1, ItemStack aStack2) { - return areUnificationsEqual(aStack1, aStack2, false); - } - - public static boolean areUnificationsEqual(ItemStack aStack1, ItemStack aStack2, boolean aIgnoreNBT) { - return areStacksEqual( - GT_OreDictUnificator.get_nocopy(aStack1), - GT_OreDictUnificator.get_nocopy(aStack2), - aIgnoreNBT); - } - - public static String getFluidName(Fluid aFluid, boolean aLocalized) { - if (aFluid == null) return E; - String rName = aLocalized ? aFluid.getLocalizedName(new FluidStack(aFluid, 0)) : aFluid.getUnlocalizedName(); - if (rName.contains("fluid.") || rName.contains("tile.")) return capitalizeString( - rName.replaceAll("fluid.", E) - .replaceAll("tile.", E)); - return rName; - } - - public static String getFluidName(FluidStack aFluid, boolean aLocalized) { - if (aFluid == null) return E; - return getFluidName(aFluid.getFluid(), aLocalized); - } - - public static void reInit() { - sFilledContainerToData.clear(); - sEmptyContainerToFluidToData.clear(); - sFluidToContainers.clear(); - for (FluidContainerData tData : sFluidContainerList) { - String fluidName = tData.fluid.getFluid() - .getName(); - sFilledContainerToData.put(new GT_ItemStack(tData.filledContainer), tData); - Map tFluidToContainer = sEmptyContainerToFluidToData - .get(new GT_ItemStack(tData.emptyContainer)); - List tContainers = sFluidToContainers.get(fluidName); - if (tFluidToContainer == null) { - sEmptyContainerToFluidToData - .put(new GT_ItemStack(tData.emptyContainer), tFluidToContainer = new /* Concurrent */ HashMap<>()); - } - tFluidToContainer.put(fluidName, tData); - if (tContainers == null) { - tContainers = new ArrayList<>(); - tContainers.add(tData.filledContainer); - sFluidToContainers.put(fluidName, tContainers); - } else tContainers.add(tData.filledContainer); - } - } - - public static void addFluidContainerData(FluidContainerData aData) { - String fluidName = aData.fluid.getFluid() - .getName(); - sFluidContainerList.add(aData); - sFilledContainerToData.put(new GT_ItemStack(aData.filledContainer), aData); - Map tFluidToContainer = sEmptyContainerToFluidToData - .get(new GT_ItemStack(aData.emptyContainer)); - List tContainers = sFluidToContainers.get(fluidName); - if (tFluidToContainer == null) { - sEmptyContainerToFluidToData - .put(new GT_ItemStack(aData.emptyContainer), tFluidToContainer = new /* Concurrent */ HashMap<>()); - } - tFluidToContainer.put(fluidName, aData); - if (tContainers == null) { - tContainers = new ArrayList<>(); - tContainers.add(aData.filledContainer); - sFluidToContainers.put(fluidName, tContainers); - } else tContainers.add(aData.filledContainer); - } - - public static List getContainersFromFluid(FluidStack tFluidStack) { - if (tFluidStack != null) { - List tContainers = sFluidToContainers.get( - tFluidStack.getFluid() - .getName()); - if (tContainers == null) return new ArrayList<>(); - return tContainers; - } - return new ArrayList<>(); - } - - public static ItemStack fillFluidContainer(FluidStack aFluid, ItemStack aStack, boolean aRemoveFluidDirectly, - boolean aCheckIFluidContainerItems) { - if (isStackInvalid(aStack) || aFluid == null) return null; - if (GT_ModHandler.isWater(aFluid) && ItemList.Bottle_Empty.isStackEqual(aStack)) { - if (aFluid.amount >= 1000) { - return new ItemStack(Items.potionitem, 1, 0); - } - return null; - } - if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem - && ((IFluidContainerItem) aStack.getItem()).getFluid(aStack) == null - && ((IFluidContainerItem) aStack.getItem()).getCapacity(aStack) <= aFluid.amount) { - if (aRemoveFluidDirectly) aFluid.amount -= ((IFluidContainerItem) aStack.getItem()) - .fill(aStack = copyAmount(1, aStack), aFluid, true); - else((IFluidContainerItem) aStack.getItem()).fill(aStack = copyAmount(1, aStack), aFluid, true); - return aStack; - } - Map tFluidToContainer = sEmptyContainerToFluidToData.get(new GT_ItemStack(aStack)); - if (tFluidToContainer == null) return null; - FluidContainerData tData = tFluidToContainer.get( - aFluid.getFluid() - .getName()); - if (tData == null || tData.fluid.amount > aFluid.amount) return null; - if (aRemoveFluidDirectly) aFluid.amount -= tData.fluid.amount; - return copyAmount(1, tData.filledContainer); - } - - public static int calculateRecipeEU(Materials aMaterial, int defaultRecipeEUPerTick) { - return aMaterial.getProcessingMaterialTierEU() == 0 ? defaultRecipeEUPerTick - : aMaterial.getProcessingMaterialTierEU(); - } - - public static ItemStack getFluidDisplayStack(Fluid aFluid) { - return aFluid == null ? null : getFluidDisplayStack(new FluidStack(aFluid, 0), false); - } - - public static ItemStack getFluidDisplayStack(FluidStack aFluid, boolean aUseStackSize) { - return getFluidDisplayStack(aFluid, aUseStackSize, false); - } - - public static ItemStack getFluidDisplayStack(FluidStack aFluid, boolean aUseStackSize, boolean aHideStackSize) { - if (aFluid == null || aFluid.getFluid() == null) return null; - int tmp = 0; - try { - tmp = aFluid.getFluid() - .getID(); - } catch (Exception e) { - System.err.println(e); - } - ItemStack rStack = ItemList.Display_Fluid.getWithDamage(1, tmp); - NBTTagCompound tNBT = new NBTTagCompound(); - tNBT.setLong("mFluidDisplayAmount", aUseStackSize ? aFluid.amount : 0); - tNBT.setLong( - "mFluidDisplayHeat", - aFluid.getFluid() - .getTemperature(aFluid)); - tNBT.setBoolean( - "mFluidState", - aFluid.getFluid() - .isGaseous(aFluid)); - tNBT.setBoolean("mHideStackSize", aHideStackSize); - try { - tNBT.setString("mFluidMaterialName", FLUID_MAP.get(aFluid.getFluid()).mName); - } catch (Exception ignored) {} - rStack.setTagCompound(tNBT); - return rStack; - } - - public static FluidStack getFluidFromDisplayStack(ItemStack aDisplayStack) { - if (!isStackValid(aDisplayStack) || aDisplayStack.getItem() != ItemList.Display_Fluid.getItem() - || !aDisplayStack.hasTagCompound()) return null; - Fluid tFluid = FluidRegistry.getFluid( - ItemList.Display_Fluid.getItem() - .getDamage(aDisplayStack)); - return new FluidStack( - tFluid, - (int) aDisplayStack.getTagCompound() - .getLong("mFluidDisplayAmount")); - } - - public static boolean containsFluid(ItemStack aStack, FluidStack aFluid, boolean aCheckIFluidContainerItems) { - if (isStackInvalid(aStack) || aFluid == null) return false; - if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem - && ((IFluidContainerItem) aStack.getItem()).getCapacity(aStack) > 0) - return aFluid - .isFluidEqual(((IFluidContainerItem) aStack.getItem()).getFluid(aStack = copyAmount(1, aStack))); - FluidContainerData tData = sFilledContainerToData.get(new GT_ItemStack(aStack)); - return tData != null && tData.fluid.isFluidEqual(aFluid); - } - - public static FluidStack getFluidForFilledItem(ItemStack aStack, boolean aCheckIFluidContainerItems) { - if (isStackInvalid(aStack)) return null; - if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem - && ((IFluidContainerItem) aStack.getItem()).getCapacity(aStack) > 0) - return ((IFluidContainerItem) aStack.getItem()).drain(copyAmount(1, aStack), Integer.MAX_VALUE, true); - FluidContainerData tData = sFilledContainerToData.get(new GT_ItemStack(aStack)); - return tData == null ? null : tData.fluid.copy(); - } - - /** - * Get empty fluid container from filled one. - */ - public static ItemStack getContainerForFilledItem(ItemStack aStack, boolean aCheckIFluidContainerItems) { - if (isStackInvalid(aStack)) return null; - FluidContainerData tData = sFilledContainerToData.get(new GT_ItemStack(aStack)); - if (tData != null) return copyAmount(1, tData.emptyContainer); - if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem - && ((IFluidContainerItem) aStack.getItem()).getCapacity(aStack) > 0) { - ((IFluidContainerItem) aStack.getItem()).drain(aStack = copyAmount(1, aStack), Integer.MAX_VALUE, true); - return aStack; - } - return null; - } - - /** - * This is NOT meant for fluid manipulation! It's for getting item container, which is generally used for - * crafting recipes. While it also works for many of the fluid containers, some don't. - *

- * Use {@link #getContainerForFilledItem} for getting empty fluid container. - */ - public static ItemStack getContainerItem(ItemStack aStack, boolean aCheckIFluidContainerItems) { - if (isStackInvalid(aStack)) return null; - if (aStack.getItem() - .hasContainerItem(aStack)) - return aStack.getItem() - .getContainerItem(aStack); - /* - * These are all special Cases, in which it is intended to have only GT Blocks outputting those Container Items - */ - if (ItemList.Cell_Empty.isStackEqual(aStack, false, true)) return null; - if (aStack.getItem() == Items.potionitem || aStack.getItem() == Items.experience_bottle - || ItemList.TF_Vial_FieryBlood.isStackEqual(aStack) - || ItemList.TF_Vial_FieryTears.isStackEqual(aStack)) return ItemList.Bottle_Empty.get(1); - - if (aCheckIFluidContainerItems && aStack.getItem() instanceof IFluidContainerItem - && ((IFluidContainerItem) aStack.getItem()).getCapacity(aStack) > 0) { - ItemStack tStack = copyAmount(1, aStack); - ((IFluidContainerItem) aStack.getItem()).drain(tStack, Integer.MAX_VALUE, true); - if (!areStacksEqual(aStack, tStack)) return tStack; - return null; - } - - int tCapsuleCount = GT_ModHandler.getCapsuleCellContainerCount(aStack); - if (tCapsuleCount > 0) return ItemList.Cell_Empty.get(tCapsuleCount); - - if (ItemList.IC2_ForgeHammer.isStackEqual(aStack) || ItemList.IC2_WireCutter.isStackEqual(aStack)) - return copyMetaData(Items.feather.getDamage(aStack) + 1, aStack); - return null; - } - - public static FluidStack getFluidFromContainerOrFluidDisplay(ItemStack stack) { - FluidStack fluidStack = GT_Utility.getFluidForFilledItem(stack, true); - if (fluidStack == null) { - fluidStack = GT_Utility.getFluidFromDisplayStack(stack); - } - return fluidStack; - } - - public static synchronized boolean removeIC2BottleRecipe(ItemStack aContainer, ItemStack aInput, - Map aRecipeList, ItemStack aOutput) { - if ((isStackInvalid(aInput) && isStackInvalid(aOutput) && isStackInvalid(aContainer)) || aRecipeList == null) - return false; - boolean rReturn = false; - Iterator> tIterator = aRecipeList - .entrySet() - .iterator(); - aOutput = GT_OreDictUnificator.get(aOutput); - while (tIterator.hasNext()) { - Map.Entry tEntry = tIterator.next(); - if (aInput == null || tEntry.getKey() - .matches(aContainer, aInput)) { - List tList = tEntry.getValue().items; - if (tList != null) for (ItemStack tOutput : tList) - if (aOutput == null || areStacksEqual(GT_OreDictUnificator.get(tOutput), aOutput)) { - tIterator.remove(); - rReturn = true; - break; - } - } - } - return rReturn; - } - - public static synchronized boolean removeSimpleIC2MachineRecipe(ItemStack aInput, - Map aRecipeList, ItemStack aOutput) { - if ((isStackInvalid(aInput) && isStackInvalid(aOutput)) || aRecipeList == null) return false; - boolean rReturn = false; - Iterator> tIterator = aRecipeList.entrySet() - .iterator(); - aOutput = GT_OreDictUnificator.get(aOutput); - while (tIterator.hasNext()) { - Map.Entry tEntry = tIterator.next(); - if (aInput == null || tEntry.getKey() - .matches(aInput)) { - List tList = tEntry.getValue().items; - if (tList != null) for (ItemStack tOutput : tList) - if (aOutput == null || areStacksEqual(GT_OreDictUnificator.get(tOutput), aOutput)) { - tIterator.remove(); - rReturn = true; - break; - } - } - } - return rReturn; - } - - public static synchronized void bulkRemoveSimpleIC2MachineRecipe(Map toRemove, - Map aRecipeList) { - if (aRecipeList == null || aRecipeList.isEmpty()) return; - toRemove.entrySet() - .removeIf(aEntry -> (isStackInvalid(aEntry.getKey()) && isStackInvalid(aEntry.getValue()))); - final Map finalToRemove = Maps - .transformValues(toRemove, GT_OreDictUnificator::get_nocopy); - - aRecipeList.entrySet() - .removeIf( - tEntry -> finalToRemove.entrySet() - .stream() - .anyMatch(aEntry -> { - final ItemStack aInput = aEntry.getKey(), aOutput = aEntry.getValue(); - final List tList = tEntry.getValue().items; - - if (tList == null) return false; - if (aInput != null && !tEntry.getKey() - .matches(aInput)) return false; - - return tList.stream() - .anyMatch( - tOutput -> (aOutput == null - || areStacksEqual(GT_OreDictUnificator.get(tOutput), aOutput))); - })); - } - - public static boolean addSimpleIC2MachineRecipe(ItemStack aInput, Map aRecipeList, - NBTTagCompound aNBT, Object... aOutput) { - if (isStackInvalid(aInput) || aOutput.length == 0 || aRecipeList == null) return false; - ItemData tOreName = GT_OreDictUnificator.getAssociation(aInput); - for (Object o : aOutput) { - if (o == null) { - GT_FML_LOGGER.info("EmptyIC2Output!" + aInput.getUnlocalizedName()); - return false; - } - } - ItemStack[] tStack = GT_OreDictUnificator.getStackArray(true, aOutput); - if (tStack.length > 0 && areStacksEqual(aInput, tStack[0])) return false; - if (tOreName != null) { - if (tOreName.toString() - .equals("dustAsh") - && tStack[0].getUnlocalizedName() - .equals("tile.volcanicAsh")) - return false; - aRecipeList - .put(new RecipeInputOreDict(tOreName.toString(), aInput.stackSize), new RecipeOutput(aNBT, tStack)); - } else { - aRecipeList - .put(new RecipeInputItemStack(copyOrNull(aInput), aInput.stackSize), new RecipeOutput(aNBT, tStack)); - } - return true; - } - - public static ItemStack getWrittenBook(String aMapping, ItemStack aStackToPutNBT) { - if (isStringInvalid(aMapping)) return null; - ItemStack rStack = GregTech_API.sBookList.get(aMapping); - if (rStack == null) return aStackToPutNBT; - if (aStackToPutNBT != null) { - aStackToPutNBT.setTagCompound(rStack.getTagCompound()); - return aStackToPutNBT; - } - return copyAmount(1, rStack); - } - - public static ItemStack getWrittenBook(String aMapping, String aTitle, String aAuthor, String... aPages) { - if (isStringInvalid(aMapping)) return null; - ItemStack rStack = GregTech_API.sBookList.get(aMapping); - if (rStack != null) return copyAmount(1, rStack); - if (isStringInvalid(aTitle) || isStringInvalid(aAuthor) || aPages.length == 0) return null; - sBookCount++; - rStack = new ItemStack(Items.written_book, 1); - NBTTagCompound tNBT = new NBTTagCompound(); - tNBT.setString("title", GT_LanguageManager.addStringLocalization("Book." + aTitle + ".Name", aTitle)); - tNBT.setString("author", aAuthor); - NBTTagList tNBTList = new NBTTagList(); - for (byte i = 0; i < aPages.length; i++) { - aPages[i] = GT_LanguageManager - .addStringLocalization("Book." + aTitle + ".Page" + ((i < 10) ? "0" + i : i), aPages[i]); - if (i < 48) { - if (aPages[i].length() < 256) tNBTList.appendTag(new NBTTagString(aPages[i])); - else GT_Log.err.println("WARNING: String for written Book too long! -> " + aPages[i]); - } else { - GT_Log.err.println("WARNING: Too much Pages for written Book! -> " + aTitle); - break; - } - } - tNBTList.appendTag( - new NBTTagString( - "Credits to " + aAuthor - + " for writing this Book. This was Book Nr. " - + sBookCount - + " at its creation. Gotta get 'em all!")); - tNBT.setTag("pages", tNBTList); - rStack.setTagCompound(tNBT); - GT_Log.out.println( - "GT_Mod: Added Book to Book List - Mapping: '" + aMapping - + "' - Name: '" - + aTitle - + "' - Author: '" - + aAuthor - + "'"); - GregTech_API.sBookList.put(aMapping, rStack); - return copyOrNull(rStack); - } - - public static boolean doSoundAtClient(String aSoundName, int aTimeUntilNextSound, float aSoundStrength) { - if (aSoundName == null) return false; - return doSoundAtClient(aSoundName, aTimeUntilNextSound, aSoundStrength, GT.getThePlayer()); - } - - public static boolean doSoundAtClient(SoundResource sound, int aTimeUntilNextSound, float aSoundStrength) { - return doSoundAtClient(sound.resourceLocation, aTimeUntilNextSound, aSoundStrength, GT.getThePlayer()); - } - - public static boolean doSoundAtClient(ResourceLocation aSoundResourceLocation, int aTimeUntilNextSound, - float aSoundStrength) { - return doSoundAtClient(aSoundResourceLocation, aTimeUntilNextSound, aSoundStrength, GT.getThePlayer()); - } - - public static boolean doSoundAtClient(String aSoundName, int aTimeUntilNextSound, float aSoundStrength, - Entity aEntity) { - if (aEntity == null || aSoundName == null) return false; - return doSoundAtClient( - aSoundName, - aTimeUntilNextSound, - aSoundStrength, - aEntity.posX, - aEntity.posY, - aEntity.posZ); - } - - public static boolean doSoundAtClient(ResourceLocation aSoundResourceLocation, int aTimeUntilNextSound, - float aSoundStrength, Entity aEntity) { - if (aEntity == null) return false; - return doSoundAtClient( - aSoundResourceLocation.toString(), - aTimeUntilNextSound, - aSoundStrength, - aEntity.posX, - aEntity.posY, - aEntity.posZ); - } - - public static boolean doSoundAtClient(ResourceLocation aSoundResourceLocation, int aTimeUntilNextSound, - float aSoundStrength, double aX, double aY, double aZ) { - return doSoundAtClient(aSoundResourceLocation, aTimeUntilNextSound, aSoundStrength, 1.01818028F, aX, aY, aZ); - } - - /** - * @inheritDoc - * @deprecated Use {@link #doSoundAtClient(ResourceLocation, int, float, double, double, double)} - */ - @Deprecated - public static boolean doSoundAtClient(String aSoundName, int aTimeUntilNextSound, float aSoundStrength, double aX, - double aY, double aZ) { - if (aSoundName == null) return false; - return doSoundAtClient( - new ResourceLocation(aSoundName), - aTimeUntilNextSound, - aSoundStrength, - 1.01818028F, - aX, - aY, - aZ); - } - - public static boolean doSoundAtClient(SoundResource aSound, int aTimeUntilNextSound, float aSoundStrength, - double aX, double aY, double aZ) { - return doSoundAtClient(aSound.resourceLocation, aTimeUntilNextSound, aSoundStrength, aX, aY, aZ); - } - - public static boolean doSoundAtClient(SoundResource aSound, int aTimeUntilNextSound, float aSoundStrength, - float aSoundModulation, double aX, double aY, double aZ) { - return doSoundAtClient( - aSound.resourceLocation, - aTimeUntilNextSound, - aSoundStrength, - aSoundModulation, - aX, - aY, - aZ); - } - - public static boolean doSoundAtClient(ResourceLocation aSoundResourceLocation, int aTimeUntilNextSound, - float aSoundStrength, float aSoundModulation, double aX, double aY, double aZ) { - if (!FMLCommonHandler.instance() - .getEffectiveSide() - .isClient() || GT.getThePlayer() == null || !GT.getThePlayer().worldObj.isRemote) return false; - if (GregTech_API.sMultiThreadedSounds) new Thread( - new GT_Runnable_Sound( - GT.getThePlayer().worldObj, - aX, - aY, - aZ, - aTimeUntilNextSound, - aSoundResourceLocation, - aSoundStrength, - aSoundModulation), - "Sound Effect").start(); - else new GT_Runnable_Sound( - GT.getThePlayer().worldObj, - aX, - aY, - aZ, - aTimeUntilNextSound, - aSoundResourceLocation, - aSoundStrength, - aSoundModulation).run(); - return true; - } - - public static boolean sendSoundToPlayers(World aWorld, String aSoundName, float aSoundStrength, - float aSoundModulation, int aX, int aY, int aZ) { - if (isStringInvalid(aSoundName) || aWorld == null || aWorld.isRemote) return false; - NW.sendPacketToAllPlayersInRange( - aWorld, - new GT_Packet_Sound(aSoundName, aSoundStrength, aSoundModulation, aX, (short) aY, aZ), - aX, - aZ); - return true; - } - - public static boolean sendSoundToPlayers(World aWorld, SoundResource sound, float aSoundStrength, - float aSoundModulation, int aX, int aY, int aZ) { - if (aWorld == null || aWorld.isRemote) return false; - NW.sendPacketToAllPlayersInRange( - aWorld, - new GT_Packet_Sound( - sound.resourceLocation.toString(), - aSoundStrength, - aSoundModulation, - aX, - (short) aY, - aZ), - aX, - aZ); - return true; - } - - public static int stackToInt(ItemStack aStack) { - if (isStackInvalid(aStack)) return 0; - return itemToInt(aStack.getItem(), Items.feather.getDamage(aStack)); - } - - public static int itemToInt(Item aItem, int aMeta) { - return Item.getIdFromItem(aItem) | (aMeta << 16); - } - - public static int stackToWildcard(ItemStack aStack) { - if (isStackInvalid(aStack)) return 0; - return Item.getIdFromItem(aStack.getItem()) | (W << 16); - } - - public static ItemStack intToStack(int aStack) { - int tID = aStack & (~0 >>> 16), tMeta = aStack >>> 16; - Item tItem = Item.getItemById(tID); - if (tItem != null) return new ItemStack(tItem, 1, tMeta); - return null; - } - - public static Integer[] stacksToIntegerArray(ItemStack... aStacks) { - Integer[] rArray = new Integer[aStacks.length]; - for (int i = 0; i < rArray.length; i++) { - rArray[i] = stackToInt(aStacks[i]); - } - return rArray; - } - - public static int[] stacksToIntArray(ItemStack... aStacks) { - int[] rArray = new int[aStacks.length]; - for (int i = 0; i < rArray.length; i++) { - rArray[i] = stackToInt(aStacks[i]); - } - return rArray; - } - - public static boolean arrayContains(Object aObject, Object... aObjects) { - return listContains(aObject, Arrays.asList(aObjects)); - } - - public static boolean listContains(Object aObject, Collection aObjects) { - if (aObjects == null) return false; - return aObjects.contains(aObject); - } - - @SafeVarargs - public static boolean arrayContainsNonNull(T... aArray) { - if (aArray != null) for (Object tObject : aArray) if (tObject != null) return true; - return false; - } - - /** - * Note: use {@link ArrayExt#withoutNulls(Object[], IntFunction)} if you want an array as a result. - */ - @SafeVarargs - public static ArrayList getArrayListWithoutNulls(T... aArray) { - if (aArray == null) return new ArrayList<>(); - ArrayList rList = new ArrayList<>(Arrays.asList(aArray)); - for (int i = 0; i < rList.size(); i++) if (rList.get(i) == null) rList.remove(i--); - return rList; - } - - /** - * Note: use {@link ArrayExt#withoutTrailingNulls(Object[], IntFunction)} if you want an array as a result. - */ - @SafeVarargs - public static ArrayList getArrayListWithoutTrailingNulls(T... aArray) { - if (aArray == null) return new ArrayList<>(); - ArrayList rList = new ArrayList<>(Arrays.asList(aArray)); - for (int i = rList.size() - 1; i >= 0 && rList.get(i) == null;) rList.remove(i--); - return rList; - } - - public static Block getBlockFromStack(ItemStack itemStack) { - if (isStackInvalid(itemStack)) return Blocks.air; - return getBlockFromItem(itemStack.getItem()); - } - - public static Block getBlockFromItem(Item item) { - return Block.getBlockFromItem(item); - } - - public static boolean isStringValid(Object aString) { - return aString != null && !aString.toString() - .isEmpty(); - } - - public static boolean isStringInvalid(Object aString) { - return aString == null || aString.toString() - .isEmpty(); - } - - @Deprecated - public static boolean isStackValid(Object aStack) { - return (aStack instanceof ItemStack stack) && isStackValid(stack); - } - - public static boolean isStackValid(ItemStack aStack) { - return (aStack != null) && aStack.getItem() != null && aStack.stackSize >= 0; - } - - @Deprecated - public static boolean isStackInvalid(Object aStack) { - return !(aStack instanceof ItemStack stack) || isStackInvalid(stack); - } - - public static boolean isStackInvalid(ItemStack aStack) { - return aStack == null || aStack.getItem() == null || aStack.stackSize < 0; - } - - public static boolean isDebugItem(ItemStack aStack) { - return /* ItemList.Armor_Cheat.isStackEqual(aStack, T, T) || */ areStacksEqual( - GT_ModHandler.getIC2Item("debug", 1), - aStack, - true); - } - - public static ItemStack updateItemStack(ItemStack aStack) { - if (isStackValid(aStack) && aStack.getItem() instanceof GT_Generic_Item) - ((GT_Generic_Item) aStack.getItem()).isItemStackUsable(aStack); - return aStack; - } - - public static boolean isOpaqueBlock(World aWorld, int aX, int aY, int aZ) { - return aWorld.getBlock(aX, aY, aZ) - .isOpaqueCube(); - } - - public static boolean isBlockAir(World aWorld, int aX, int aY, int aZ) { - return aWorld.getBlock(aX, aY, aZ) - .isAir(aWorld, aX, aY, aZ); - } - - public static boolean hasBlockHitBox(World aWorld, int aX, int aY, int aZ) { - return aWorld.getBlock(aX, aY, aZ) - .getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ) != null; - } - - public static void setCoordsOnFire(World aWorld, int aX, int aY, int aZ, boolean aReplaceCenter) { - if (aReplaceCenter) if (aWorld.getBlock(aX, aY, aZ) - .getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ) == null) aWorld.setBlock(aX, aY, aZ, Blocks.fire); - if (aWorld.getBlock(aX + 1, aY, aZ) - .getCollisionBoundingBoxFromPool(aWorld, aX + 1, aY, aZ) == null) - aWorld.setBlock(aX + 1, aY, aZ, Blocks.fire); - if (aWorld.getBlock(aX - 1, aY, aZ) - .getCollisionBoundingBoxFromPool(aWorld, aX - 1, aY, aZ) == null) - aWorld.setBlock(aX - 1, aY, aZ, Blocks.fire); - if (aWorld.getBlock(aX, aY + 1, aZ) - .getCollisionBoundingBoxFromPool(aWorld, aX, aY + 1, aZ) == null) - aWorld.setBlock(aX, aY + 1, aZ, Blocks.fire); - if (aWorld.getBlock(aX, aY - 1, aZ) - .getCollisionBoundingBoxFromPool(aWorld, aX, aY - 1, aZ) == null) - aWorld.setBlock(aX, aY - 1, aZ, Blocks.fire); - if (aWorld.getBlock(aX, aY, aZ + 1) - .getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ + 1) == null) - aWorld.setBlock(aX, aY, aZ + 1, Blocks.fire); - if (aWorld.getBlock(aX, aY, aZ - 1) - .getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ - 1) == null) - aWorld.setBlock(aX, aY, aZ - 1, Blocks.fire); - } - - public static ItemStack getProjectile(SubTag aProjectileType, IInventory aInventory) { - if (aInventory != null) for (int i = 0, j = aInventory.getSizeInventory(); i < j; i++) { - ItemStack rStack = aInventory.getStackInSlot(i); - if (isStackValid(rStack) && rStack.getItem() instanceof IProjectileItem - && ((IProjectileItem) rStack.getItem()).hasProjectile(aProjectileType, rStack)) - return updateItemStack(rStack); - } - return null; - } - - public static void removeNullStacksFromInventory(IInventory aInventory) { - if (aInventory != null) for (int i = 0, j = aInventory.getSizeInventory(); i < j; i++) { - ItemStack tStack = aInventory.getStackInSlot(i); - if (tStack != null && (tStack.stackSize == 0 || tStack.getItem() == null)) - aInventory.setInventorySlotContents(i, null); - } - } - - /** - * Initializes new empty texture page for casings page 0 is old CASING_BLOCKS - *

- * Then casings should be registered like this: for (byte i = MIN_USED_META; i < MAX_USED_META; i = (byte) (i + 1)) - * { Textures.BlockIcons.casingTexturePages[PAGE][i+START_INDEX] = new GT_CopiedBlockTexture(this, 6, i); } - * - * @param page 0 to 127 - * @return true if it made empty page, false if one already existed... - */ - public static boolean addTexturePage(byte page) { - if (Textures.BlockIcons.casingTexturePages[page] == null) { - Textures.BlockIcons.casingTexturePages[page] = new ITexture[128]; - return true; - } - return false; - } - - /** - * Return texture id from page and index, for use when determining hatches, but can also be precomputed from: - * (page<<7)+index - * - * @param page 0 to 127 page - * @param index 0 to 127 texture index - * @return casing texture 0 to 16383 - */ - public static int getTextureId(byte page, byte index) { - if (page >= 0 && index >= 0) { - return (page << 7) + index; - } - throw new RuntimeException("Index out of range: [" + page + "][" + index + "]"); - } - - /** - * Return texture id from page and index, for use when determining hatches, but can also be precomputed from: - * (page<<7)+index - * - * @param page 0 to 127 page - * @param startIndex 0 to 127 start texture index - * @param blockMeta meta of the block - * @return casing texture 0 to 16383 - */ - public static int getTextureId(byte page, byte startIndex, byte blockMeta) { - if (page >= 0 && startIndex >= 0 && blockMeta >= 0 && (startIndex + blockMeta) <= 127) { - return (page << 7) + (startIndex + blockMeta); - } - throw new RuntimeException( - "Index out of range: [" + page - + "][" - + startIndex - + "+" - + blockMeta - + "=" - + (startIndex + blockMeta) - + "]"); - } - - /** - * Return texture id from item stack, unoptimized but readable? - * - * @return casing texture 0 to 16383 - */ - public static int getTextureId(Block blockFromBlock, byte metaFromBlock) { - for (int page = 0; page < Textures.BlockIcons.casingTexturePages.length; page++) { - ITexture[] casingTexturePage = Textures.BlockIcons.casingTexturePages[page]; - if (casingTexturePage != null) { - for (int index = 0; index < casingTexturePage.length; index++) { - ITexture iTexture = casingTexturePage[index]; - if (iTexture instanceof IBlockContainer) { - Block block = ((IBlockContainer) iTexture).getBlock(); - byte meta = ((IBlockContainer) iTexture).getMeta(); - if (meta == metaFromBlock && blockFromBlock == block) { - return (page << 7) + index; - } - } - } - } - } - throw new RuntimeException( - "Probably missing mapping or different texture class used for: " + blockFromBlock.getUnlocalizedName() - + " meta:" - + metaFromBlock); - } - - /** - * Converts a Number to a String - */ - public static String parseNumberToString(int aNumber) { - boolean temp = true, negative = false; - - if (aNumber < 0) { - aNumber *= -1; - negative = true; - } - - StringBuilder tStringB = new StringBuilder(); - for (int i = 1000000000; i > 0; i /= 10) { - int tDigit = (aNumber / i) % 10; - if (temp && tDigit != 0) temp = false; - if (!temp) { - tStringB.append(tDigit); - if (i != 1) for (int j = i; j > 0; j /= 1000) if (j == 1) tStringB.append(","); - } - } - - String tString = tStringB.toString(); - - if (tString.equals(E)) tString = "0"; - - return negative ? "-" + tString : tString; - } - - public static NBTTagCompound getNBTContainingBoolean(NBTTagCompound aNBT, Object aTag, boolean aValue) { - if (aNBT == null) aNBT = new NBTTagCompound(); - aNBT.setBoolean(aTag.toString(), aValue); - return aNBT; - } - - public static NBTTagCompound getNBTContainingByte(NBTTagCompound aNBT, Object aTag, byte aValue) { - if (aNBT == null) aNBT = new NBTTagCompound(); - aNBT.setByte(aTag.toString(), aValue); - return aNBT; - } - - public static NBTTagCompound getNBTContainingShort(NBTTagCompound aNBT, Object aTag, short aValue) { - if (aNBT == null) aNBT = new NBTTagCompound(); - aNBT.setShort(aTag.toString(), aValue); - return aNBT; - } - - public static NBTTagCompound getNBTContainingInteger(NBTTagCompound aNBT, Object aTag, int aValue) { - if (aNBT == null) aNBT = new NBTTagCompound(); - aNBT.setInteger(aTag.toString(), aValue); - return aNBT; - } - - public static NBTTagCompound getNBTContainingFloat(NBTTagCompound aNBT, Object aTag, float aValue) { - if (aNBT == null) aNBT = new NBTTagCompound(); - aNBT.setFloat(aTag.toString(), aValue); - return aNBT; - } - - public static NBTTagCompound getNBTContainingDouble(NBTTagCompound aNBT, Object aTag, double aValue) { - if (aNBT == null) aNBT = new NBTTagCompound(); - aNBT.setDouble(aTag.toString(), aValue); - return aNBT; - } - - public static NBTTagCompound getNBTContainingString(NBTTagCompound aNBT, Object aTag, Object aValue) { - if (aNBT == null) aNBT = new NBTTagCompound(); - if (aValue == null) return aNBT; - aNBT.setString(aTag.toString(), aValue.toString()); - return aNBT; - } - - public static boolean isWearingFullFrostHazmat(EntityLivingBase aEntity) { - for (byte i = 1; i < 5; i++) { - ItemStack tStack = aEntity.getEquipmentInSlot(i); - - if (!isStackInList(tStack, GregTech_API.sFrostHazmatList) && !hasHazmatEnchant(tStack)) { - return false; - } - } - return true; - } - - public static boolean isWearingFullHeatHazmat(EntityLivingBase aEntity) { - for (byte i = 1; i < 5; i++) { - ItemStack tStack = aEntity.getEquipmentInSlot(i); - - if (!isStackInList(tStack, GregTech_API.sHeatHazmatList) && !hasHazmatEnchant(tStack)) { - return false; - } - } - - return true; - } - - public static boolean isWearingFullBioHazmat(EntityLivingBase aEntity) { - for (byte i = 1; i < 5; i++) { - ItemStack tStack = aEntity.getEquipmentInSlot(i); - - if (!isStackInList(tStack, GregTech_API.sBioHazmatList) && !hasHazmatEnchant(tStack)) { - return false; - } - } - return true; - } - - public static boolean isWearingFullRadioHazmat(EntityLivingBase aEntity) { - for (byte i = 1; i < 5; i++) { - ItemStack tStack = aEntity.getEquipmentInSlot(i); - - if (!isStackInList(tStack, GregTech_API.sRadioHazmatList) && !hasHazmatEnchant(tStack)) { - return false; - } - } - return true; - } - - public static boolean isWearingFullElectroHazmat(EntityLivingBase aEntity) { - for (byte i = 1; i < 5; i++) { - ItemStack tStack = aEntity.getEquipmentInSlot(i); - - if (!isStackInList(tStack, GregTech_API.sElectroHazmatList) && !hasHazmatEnchant(tStack)) { - return false; - } - } - return true; - } - - public static boolean isWearingFullGasHazmat(EntityLivingBase aEntity) { - for (byte i = 1; i < 5; i++) { - ItemStack tStack = aEntity.getEquipmentInSlot(i); - - if (!isStackInList(tStack, GregTech_API.sGasHazmatList) && !hasHazmatEnchant(tStack)) { - return false; - } - } - return true; - } - - public static boolean hasHazmatEnchant(ItemStack aStack) { - if (aStack == null) return false; - Map tEnchantments = EnchantmentHelper.getEnchantments(aStack); - Integer tLevel = tEnchantments.get(Enchantment_Hazmat.INSTANCE.effectId); - - return tLevel != null && tLevel >= 1; - } - - public static float getHeatDamageFromItem(ItemStack aStack) { - ItemData tData = GT_OreDictUnificator.getItemData(aStack); - return tData == null ? 0 - : (tData.mPrefix == null ? 0 : tData.mPrefix.mHeatDamage) - + (tData.hasValidMaterialData() ? tData.mMaterial.mMaterial.mHeatDamage : 0); - } - - public static int getRadioactivityLevel(ItemStack aStack) { - ItemData tData = GT_OreDictUnificator.getItemData(aStack); - if (tData != null && tData.hasValidMaterialData()) { - if (tData.mMaterial.mMaterial.mEnchantmentArmors instanceof Enchantment_Radioactivity) - return tData.mMaterial.mMaterial.mEnchantmentArmorsLevel; - if (tData.mMaterial.mMaterial.mEnchantmentTools instanceof Enchantment_Radioactivity) - return tData.mMaterial.mMaterial.mEnchantmentToolsLevel; - } - return EnchantmentHelper.getEnchantmentLevel(Enchantment_Radioactivity.INSTANCE.effectId, aStack); - } - - public static boolean isImmuneToBreathingGasses(EntityLivingBase aEntity) { - return isWearingFullGasHazmat(aEntity); - } - - public static boolean applyHeatDamage(EntityLivingBase entity, float damage) { - return applyHeatDamage(entity, damage, GT_DamageSources.getHeatDamage()); - } - - public static boolean applyHeatDamageFromItem(EntityLivingBase entity, float damage, ItemStack item) { - return applyHeatDamage(entity, damage, new DamageSourceHotItem(item)); - } - - private static boolean applyHeatDamage(EntityLivingBase aEntity, float aDamage, DamageSource source) { - if (aDamage > 0 && aEntity != null && !isWearingFullHeatHazmat(aEntity)) { - return aEntity.attackEntityFrom(source, aDamage); - } - return false; - } - - public static boolean applyFrostDamage(EntityLivingBase aEntity, float aDamage) { - if (aDamage > 0 && aEntity != null && !isWearingFullFrostHazmat(aEntity)) { - return aEntity.attackEntityFrom(GT_DamageSources.getFrostDamage(), aDamage); - } - return false; - } - - public static boolean applyElectricityDamage(EntityLivingBase aEntity, long aVoltage, long aAmperage) { - long aDamage = getTier(aVoltage) * aAmperage * 4; - if (aDamage > 0 && aEntity != null && !isWearingFullElectroHazmat(aEntity)) { - return aEntity.attackEntityFrom(GT_DamageSources.getElectricDamage(), aDamage); - } - return false; - } - - public static boolean applyRadioactivity(EntityLivingBase aEntity, int aLevel, int aAmountOfItems) { - if (aLevel > 0 && aEntity != null - && aEntity.getCreatureAttribute() != EnumCreatureAttribute.UNDEAD - && aEntity.getCreatureAttribute() != EnumCreatureAttribute.ARTHROPOD - && !isWearingFullRadioHazmat(aEntity)) { - PotionEffect tEffect = null; - aEntity.addPotionEffect( - new PotionEffect( - Potion.moveSlowdown.id, - aLevel * 140 * aAmountOfItems + Math.max( - 0, - ((tEffect = aEntity.getActivePotionEffect(Potion.moveSlowdown)) == null ? 0 - : tEffect.getDuration())), - Math.max(0, (5 * aLevel) / 7))); - aEntity.addPotionEffect( - new PotionEffect( - Potion.digSlowdown.id, - aLevel * 150 * aAmountOfItems + Math.max( - 0, - ((tEffect = aEntity.getActivePotionEffect(Potion.digSlowdown)) == null ? 0 - : tEffect.getDuration())), - Math.max(0, (5 * aLevel) / 7))); - aEntity.addPotionEffect( - new PotionEffect( - Potion.confusion.id, - aLevel * 130 * aAmountOfItems + Math.max( - 0, - ((tEffect = aEntity.getActivePotionEffect(Potion.confusion)) == null ? 0 - : tEffect.getDuration())), - Math.max(0, (5 * aLevel) / 7))); - aEntity.addPotionEffect( - new PotionEffect( - Potion.weakness.id, - aLevel * 150 * aAmountOfItems + Math.max( - 0, - ((tEffect = aEntity.getActivePotionEffect(Potion.weakness)) == null ? 0 - : tEffect.getDuration())), - Math.max(0, (5 * aLevel) / 7))); - aEntity.addPotionEffect( - new PotionEffect( - Potion.hunger.id, - aLevel * 130 * aAmountOfItems + Math.max( - 0, - ((tEffect = aEntity.getActivePotionEffect(Potion.hunger)) == null ? 0 : tEffect.getDuration())), - Math.max(0, (5 * aLevel) / 7))); - aEntity.addPotionEffect( - new PotionEffect( - 24 /* IC2 Radiation */, - aLevel * 180 * aAmountOfItems + Math.max( - 0, - ((tEffect = aEntity.getActivePotionEffect(Potion.potionTypes[24])) == null ? 0 - : tEffect.getDuration())), - Math.max(0, (5 * aLevel) / 7))); - return true; - } - return false; - } - - public static ItemStack setStack(ItemStack aSetStack, ItemStack aToStack) { - if (isStackInvalid(aSetStack) || isStackInvalid(aToStack)) return null; - aSetStack.func_150996_a(aToStack.getItem()); - aSetStack.stackSize = aToStack.stackSize; - Items.feather.setDamage(aSetStack, Items.feather.getDamage(aToStack)); - aSetStack.setTagCompound(aToStack.getTagCompound()); - return aSetStack; - } - - public static FluidStack[] copyFluidArray(FluidStack... aStacks) { - if (aStacks == null) return null; - FluidStack[] rStacks = new FluidStack[aStacks.length]; - for (int i = 0; i < aStacks.length; i++) if (aStacks[i] != null) rStacks[i] = aStacks[i].copy(); - return rStacks; - } - - public static ItemStack[] copyItemArray(ItemStack... aStacks) { - if (aStacks == null) return null; - ItemStack[] rStacks = new ItemStack[aStacks.length]; - for (int i = 0; i < aStacks.length; i++) rStacks[i] = copy(aStacks[i]); - return rStacks; - } - - /** - * @deprecated use {@link #copy(ItemStack)} instead - */ - @Deprecated - public static ItemStack copy(Object... aStacks) { - for (Object tStack : aStacks) if (isStackValid(tStack)) return ((ItemStack) tStack).copy(); - return null; - } - - public static ItemStack copy(ItemStack aStack) { - if (isStackValid(aStack)) return aStack.copy(); - return null; - } - - @Deprecated - private static ItemStack firstStackOrNull(Object... aStacks) { - for (Object tStack : aStacks) if (tStack instanceof ItemStack stack) return stack; - return null; - } - - @Nullable - public static ItemStack copyOrNull(@Nullable ItemStack stack) { - if (isStackValid(stack)) return stack.copy(); - return null; - } - - public static FluidStack copyAmount(int aAmount, FluidStack aStack) { - if (aStack == null) return null; - FluidStack rStack = aStack.copy(); - rStack.amount = aAmount; - return rStack; - } - - /** - * @deprecated use {@link #copyAmount(int, ItemStack)} instead - */ - @Deprecated - public static ItemStack copyAmount(long aAmount, Object... aStacks) { - return copyAmount(aAmount, firstStackOrNull(aStacks)); - } - - /** - * @deprecated use {@link #copyAmount(int, ItemStack)} instead - */ - @Deprecated - public static ItemStack copyAmount(long aAmount, ItemStack aStack) { - return copyAmount((int) aAmount, aStack); - } - - public static ItemStack copyAmount(int aAmount, ItemStack aStack) { - ItemStack rStack = copy(aStack); - if (isStackInvalid(rStack)) return null; - if (aAmount > 64) aAmount = 64; - else if (aAmount == -1) aAmount = 111; - else if (aAmount < 0) aAmount = 0; - rStack.stackSize = (byte) aAmount; - return rStack; - } - - public static ItemStack multiplyStack(int aMultiplier, ItemStack aStack) { - ItemStack rStack = copy(aStack); - if (isStackInvalid(rStack)) return null; - int tAmount = rStack.stackSize * aMultiplier; - if (tAmount > 64) tAmount = 64; - else if (tAmount == -1) tAmount = 111; - else if (tAmount < 0) tAmount = 0; - rStack.stackSize = (byte) tAmount; - return rStack; - } - - /** - * Unlike {@link #copyAmount(int, ItemStack)}, this method does not restrict stack size by 64. - */ - public static ItemStack copyAmountUnsafe(int aAmount, ItemStack aStack) { - ItemStack rStack = copy(aStack); - if (isStackInvalid(rStack)) return null; - else if (aAmount < 0) aAmount = 0; - rStack.stackSize = (int) aAmount; - return rStack; - } - - public static ItemStack copyMetaData(int aMetaData, ItemStack aStack) { - ItemStack rStack = copy(aStack); - if (isStackInvalid(rStack)) return null; - Items.feather.setDamage(rStack, aMetaData); - return rStack; - } - - /** - * @deprecated use {@link #copyAmountAndMetaData(int, int, ItemStack)} instead - */ - @Deprecated - public static ItemStack copyAmountAndMetaData(long aAmount, long aMetaData, ItemStack aStack) { - return copyAmountAndMetaData((int) aAmount, (int) aMetaData, aStack); - } - - public static ItemStack copyAmountAndMetaData(int aAmount, int aMetaData, ItemStack aStack) { - ItemStack rStack = copyAmount(aAmount, aStack); - if (isStackInvalid(rStack)) return null; - Items.feather.setDamage(rStack, aMetaData); - return rStack; - } - - /** - * returns a copy of an ItemStack with its Stacksize being multiplied by aMultiplier - */ - public static ItemStack mul(int aMultiplier, ItemStack aStack) { - ItemStack rStack = copy(aStack); - if (rStack == null) return null; - rStack.stackSize *= aMultiplier; - return rStack; - } - - /** - * Loads an ItemStack properly. - */ - public static ItemStack loadItem(NBTTagCompound aNBT, String aTagName) { - return loadItem(aNBT.getCompoundTag(aTagName)); - } - - public static FluidStack loadFluid(NBTTagCompound aNBT, String aTagName) { - return loadFluid(aNBT.getCompoundTag(aTagName)); - } - - /** - * Loads an ItemStack properly. - */ - public static ItemStack loadItem(NBTTagCompound aNBT) { - if (aNBT == null) return null; - ItemStack tRawStack = ItemStack.loadItemStackFromNBT(aNBT); - int tRealStackSize = 0; - if (tRawStack != null && aNBT.hasKey("Count", Constants.NBT.TAG_INT)) { - tRealStackSize = aNBT.getInteger("Count"); - tRawStack.stackSize = tRealStackSize; - } else if (tRawStack != null) { - tRealStackSize = tRawStack.stackSize; - } - ItemStack tRet = GT_OreDictUnificator.get(true, tRawStack); - if (tRet != null) tRet.stackSize = tRealStackSize; - return tRet; - } - - public static void saveItem(NBTTagCompound aParentTag, String aTagName, ItemStack aStack) { - if (aStack != null) aParentTag.setTag(aTagName, saveItem(aStack)); - } - - public static NBTTagCompound saveItem(ItemStack aStack) { - if (aStack == null) return new NBTTagCompound(); - NBTTagCompound t = new NBTTagCompound(); - aStack.writeToNBT(t); - if (aStack.stackSize > Byte.MAX_VALUE) t.setInteger("Count", aStack.stackSize); - return t; - } - - /** - * Loads an FluidStack properly. - */ - public static FluidStack loadFluid(NBTTagCompound aNBT) { - if (aNBT == null) return null; - return FluidStack.loadFluidStackFromNBT(aNBT); - } - - public static E selectItemInList(int aIndex, E aReplacement, List aList) { - if (aList == null || aList.isEmpty()) return aReplacement; - if (aList.size() <= aIndex) return aList.get(aList.size() - 1); - if (aIndex < 0) return aList.get(0); - return aList.get(aIndex); - } - - @SafeVarargs - public static E selectItemInList(int aIndex, E aReplacement, E... aList) { - if (aList == null || aList.length == 0) return aReplacement; - if (aList.length <= aIndex) return aList[aList.length - 1]; - if (aIndex < 0) return aList[0]; - return aList[aIndex]; - } - - public static boolean isStackInStackSet(ItemStack aStack, Set aSet) { - if (aStack == null) return false; - if (aSet.contains(aStack)) return true; - - return aSet.contains(GT_ItemStack.internalCopyStack(aStack, true)); - } - - public static boolean isStackInList(ItemStack aStack, Collection aList) { - if (aStack == null) { - return false; - } - return isStackInList(new GT_ItemStack(aStack), aList); - } - - public static boolean isStackInList(ItemStack aStack, Set aList) { - if (aStack == null) { - return false; - } - return isStackInList(new GT_ItemStack2(aStack), aList); - } - - public static boolean isStackInList(GT_ItemStack aStack, Collection aList) { - return aStack != null - && (aList.contains(aStack) || aList.contains(new GT_ItemStack(aStack.mItem, aStack.mStackSize, W))); - } - - public static boolean isStackInList(GT_ItemStack2 aStack, Set aList) { - return aStack != null - && (aList.contains(aStack) || aList.contains(new GT_ItemStack2(aStack.mItem, aStack.mStackSize, W))); - } - - /** - * re-maps all Keys of a Map after the Keys were weakened. - */ - public static Map reMap(Map aMap) { - Map tMap = null; - // We try to clone the Map first (most Maps are Cloneable) in order to retain as much state of the Map as - // possible when rehashing. For example, "Custom" HashMaps from fastutil may have a custom hash function which - // would not be used to rehash if we just create a new HashMap. - if (aMap instanceof Cloneable) { - try { - tMap = (Map) aMap.getClass() - .getMethod("clone") - .invoke(aMap); - } catch (Throwable e) { - GT_Log.err.println("Failed to clone Map of type " + aMap.getClass()); - e.printStackTrace(GT_Log.err); - } - } - - if (tMap == null) { - tMap = new HashMap<>(aMap); - } - - aMap.clear(); - aMap.putAll(tMap); - return aMap; - } - - /** - * re-maps all Keys of a Map after the Keys were weakened. - */ - public static SetMultimap reMap(SetMultimap aMap) { - @SuppressWarnings("unchecked") - Map.Entry[] entries = aMap.entries() - .toArray(new Map.Entry[0]); - aMap.clear(); - for (Map.Entry entry : entries) { - aMap.put(entry.getKey(), entry.getValue()); - } - return aMap; - } - - public static > LinkedHashMap sortMapByValuesAcending(Map map) { - return map.entrySet() - .stream() - .sorted(Map.Entry.comparingByValue()) - .collect(CollectorUtils.entriesToMap(LinkedHashMap::new)); - } - - /** - * Why the fuck do neither Java nor Guava have a Function to do this? - */ - public static > LinkedHashMap sortMapByValuesDescending(Map aMap) { - List> tEntrySet = new LinkedList<>(aMap.entrySet()); - tEntrySet.sort((aValue1, aValue2) -> { - return aValue2.getValue() - .compareTo(aValue1.getValue()); // FB: RV - RV_NEGATING_RESULT_OF_COMPARETO - }); - LinkedHashMap rMap = new LinkedHashMap<>(); - for (Map.Entry tEntry : tEntrySet) rMap.put(tEntry.getKey(), tEntry.getValue()); - return rMap; - } - - /** - * Translates a Material Amount into an Amount of Fluid in Fluid Material Units. - */ - public static long translateMaterialToFluidAmount(long aMaterialAmount, boolean aRoundUp) { - return translateMaterialToAmount(aMaterialAmount, L, aRoundUp); - } - - /** - * Translates a Material Amount into an Amount of Fluid. Second Parameter for things like Bucket Amounts (1000) and - * similar - */ - public static long translateMaterialToAmount(long aMaterialAmount, long aAmountPerUnit, boolean aRoundUp) { - return Math.max( - 0, - ((aMaterialAmount * aAmountPerUnit) / M) - + (aRoundUp && (aMaterialAmount * aAmountPerUnit) % M > 0 ? 1 : 0)); - } - - /** - * This checks if the Dimension is really a Dimension and not another Planet or something. Used for my Teleporter. - */ - public static boolean isRealDimension(int aDimensionID) { - if (aDimensionID <= 1 && aDimensionID >= -1 && !GregTech_API.sDimensionalList.contains(aDimensionID)) - return true; - return !GregTech_API.sDimensionalList.contains(aDimensionID) - && DimensionManager.isDimensionRegistered(aDimensionID); - } - - public static boolean moveEntityToDimensionAtCoords(Entity entity, int aDimension, double aX, double aY, - double aZ) { - // Credit goes to BrandonCore Author :!: - - if (entity == null || entity.worldObj.isRemote) return false; - if (entity.ridingEntity != null) entity.mountEntity(null); - if (entity.riddenByEntity != null) entity.riddenByEntity.mountEntity(null); - - World startWorld = entity.worldObj; - WorldServer destinationWorld = FMLCommonHandler.instance() - .getMinecraftServerInstance() - .worldServerForDimension(aDimension); - - if (destinationWorld == null) { - return false; - } - - boolean interDimensional = startWorld.provider.dimensionId != destinationWorld.provider.dimensionId; - if (!interDimensional) return false; - startWorld.updateEntityWithOptionalForce(entity, false); // added - - if (entity instanceof EntityPlayerMP player) { - player.closeScreen(); // added - player.dimension = aDimension; - player.playerNetServerHandler.sendPacket( - new S07PacketRespawn( - player.dimension, - player.worldObj.difficultySetting, - destinationWorld.getWorldInfo() - .getTerrainType(), - player.theItemInWorldManager.getGameType())); - ((WorldServer) startWorld).getPlayerManager() - .removePlayer(player); - - startWorld.playerEntities.remove(player); - startWorld.updateAllPlayersSleepingFlag(); - int i = entity.chunkCoordX; - int j = entity.chunkCoordZ; - if ((entity.addedToChunk) && (startWorld.getChunkProvider() - .chunkExists(i, j))) { - startWorld.getChunkFromChunkCoords(i, j) - .removeEntity(entity); - startWorld.getChunkFromChunkCoords(i, j).isModified = true; - } - startWorld.loadedEntityList.remove(entity); - startWorld.onEntityRemoved(entity); - } - - entity.setLocationAndAngles(aX, aY, aZ, entity.rotationYaw, entity.rotationPitch); - - destinationWorld.theChunkProviderServer.loadChunk((int) aX >> 4, (int) aZ >> 4); - - destinationWorld.theProfiler.startSection("placing"); - if (!(entity instanceof EntityPlayer)) { - NBTTagCompound entityNBT = new NBTTagCompound(); - entity.isDead = false; - entityNBT.setString("id", EntityList.getEntityString(entity)); - entity.writeToNBT(entityNBT); - entity.isDead = true; - entity = EntityList.createEntityFromNBT(entityNBT, destinationWorld); - if (entity == null) { - return false; - } - entity.dimension = destinationWorld.provider.dimensionId; - } - destinationWorld.spawnEntityInWorld(entity); - entity.setWorld(destinationWorld); - entity.setLocationAndAngles(aX, aY, aZ, entity.rotationYaw, entity.rotationPitch); - - destinationWorld.updateEntityWithOptionalForce(entity, false); - entity.setLocationAndAngles(aX, aY, aZ, entity.rotationYaw, entity.rotationPitch); - - if ((entity instanceof EntityPlayerMP player)) { - player.mcServer.getConfigurationManager() - .func_72375_a(player, destinationWorld); - player.playerNetServerHandler.setPlayerLocation(aX, aY, aZ, player.rotationYaw, player.rotationPitch); - } - - destinationWorld.updateEntityWithOptionalForce(entity, false); - - if (entity instanceof EntityPlayerMP player) { - player.theItemInWorldManager.setWorld(destinationWorld); - player.mcServer.getConfigurationManager() - .updateTimeAndWeatherForPlayer(player, destinationWorld); - player.mcServer.getConfigurationManager() - .syncPlayerInventory(player); - - for (PotionEffect potionEffect : player.getActivePotionEffects()) { - player.playerNetServerHandler.sendPacket(new S1DPacketEntityEffect(player.getEntityId(), potionEffect)); - } - - player.playerNetServerHandler.sendPacket( - new S1FPacketSetExperience(player.experience, player.experienceTotal, player.experienceLevel)); - FMLCommonHandler.instance() - .firePlayerChangedDimensionEvent( - player, - startWorld.provider.dimensionId, - destinationWorld.provider.dimensionId); - } - entity.setLocationAndAngles(aX, aY, aZ, entity.rotationYaw, entity.rotationPitch); - - destinationWorld.theProfiler.endSection(); - entity.fallDistance = 0; - return true; - } - - public static int getScaleCoordinates(double aValue, int aScale) { - return (int) Math.floor(aValue / aScale); - } - - public static int getCoordinateScan(ArrayList aList, EntityPlayer aPlayer, World aWorld, int aScanLevel, - int aX, int aY, int aZ, ForgeDirection side, float aClickX, float aClickY, float aClickZ) { - if (aList == null) return 0; - - ArrayList tList = new ArrayList<>(); - int rEUAmount = 0; - - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - - final Block tBlock = aWorld.getBlock(aX, aY, aZ); - - addBaseInfo(aPlayer, aWorld, aX, aY, aZ, tList, tTileEntity, tBlock); - - if (tTileEntity != null) { - rEUAmount += addFluidHandlerInfo(side, tList, tTileEntity); - - try { - if (tTileEntity instanceof ic2.api.reactor.IReactorChamber chamber) { - rEUAmount += 500; - // Redirect the rest of the scans to the reactor itself - tTileEntity = (TileEntity) chamber.getReactor(); - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - rEUAmount += addReactorInfo(tList, tTileEntity); - rEUAmount += addAlignmentInfo(tList, tTileEntity); - rEUAmount += addIC2WrenchableInfo(aPlayer, tList, tTileEntity); - rEUAmount += addIC2EnergyConductorInfo(tList, tTileEntity); - rEUAmount += addIC2EnergyStorageInfo(tList, tTileEntity); - rEUAmount += addUpgradableMachineInfo(tList, tTileEntity); - rEUAmount += addMachineProgressInfo(tList, tTileEntity); - rEUAmount += addCoverableInfo(side, tList, tTileEntity); - addEnergyContainerInfo(tList, tTileEntity); - addOwnerInfo(tList, tTileEntity); - addDeviceInfo(tList, tTileEntity); - - rEUAmount += addIC2CropInfo(tList, tTileEntity); - - rEUAmount += addForestryLeavesInfo(tList, tTileEntity); - } - - final Chunk currentChunk = aWorld.getChunkFromBlockCoords(aX, aZ); - addUndergroundFluidInfo(aPlayer, tList, currentChunk); - addPollutionInfo(tList, currentChunk); - - rEUAmount += addDebuggableBlockInfo(aPlayer, aX, aY, aZ, tList, tBlock); - - final BlockScanningEvent tEvent = new BlockScanningEvent( - aWorld, - aPlayer, - aX, - aY, - aZ, - side, - aScanLevel, - tBlock, - tTileEntity, - tList, - aClickX, - aClickY, - aClickZ); - tEvent.mEUCost = rEUAmount; - MinecraftForge.EVENT_BUS.post(tEvent); - if (!tEvent.isCanceled()) aList.addAll(tList); - return tEvent.mEUCost; - } - - private static void addBaseInfo(EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, ArrayList tList, - TileEntity tTileEntity, Block tBlock) { - tList.add( - "----- X: " + EnumChatFormatting.AQUA - + formatNumbers(aX) - + EnumChatFormatting.RESET - + " Y: " - + EnumChatFormatting.AQUA - + formatNumbers(aY) - + EnumChatFormatting.RESET - + " Z: " - + EnumChatFormatting.AQUA - + formatNumbers(aZ) - + EnumChatFormatting.RESET - + " D: " - + EnumChatFormatting.AQUA - + aWorld.provider.dimensionId - + EnumChatFormatting.RESET - + " -----"); - try { - tList.add( - GT_Utility.trans("162", "Name: ") + EnumChatFormatting.BLUE - + ((tTileEntity instanceof IInventory inv) ? inv.getInventoryName() : tBlock.getUnlocalizedName()) - + EnumChatFormatting.RESET - + GT_Utility.trans("163", " MetaData: ") - + EnumChatFormatting.AQUA - + aWorld.getBlockMetadata(aX, aY, aZ) - + EnumChatFormatting.RESET); - tList.add( - GT_Utility.trans("164", "Hardness: ") + EnumChatFormatting.YELLOW - + tBlock.getBlockHardness(aWorld, aX, aY, aZ) - + EnumChatFormatting.RESET - + GT_Utility.trans("165", " Blast Resistance: ") - + EnumChatFormatting.YELLOW - + tBlock - .getExplosionResistance(aPlayer, aWorld, aX, aY, aZ, aPlayer.posX, aPlayer.posY, aPlayer.posZ) - + EnumChatFormatting.RESET); - if (tBlock.isBeaconBase(aWorld, aX, aY, aZ, aX, aY + 1, aZ)) tList.add( - EnumChatFormatting.GOLD + GT_Utility.trans("166", "Is valid Beacon Pyramid Material") - + EnumChatFormatting.RESET); - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this block's info.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - } - - private static int addFluidHandlerInfo(ForgeDirection side, ArrayList tList, TileEntity tTileEntity) { - int rEUAmount = 0; - try { - if (tTileEntity instanceof IFluidHandler fluidHandler) { - rEUAmount += 500; - final FluidTankInfo[] tTanks = fluidHandler.getTankInfo(side); - if (tTanks != null) for (byte i = 0; i < tTanks.length; i++) { - tList.add( - GT_Utility.trans("167", "Tank ") + i - + ": " - + EnumChatFormatting.GREEN - + formatNumbers((tTanks[i].fluid == null ? 0 : tTanks[i].fluid.amount)) - + EnumChatFormatting.RESET - + " L / " - + EnumChatFormatting.YELLOW - + formatNumbers(tTanks[i].capacity) - + EnumChatFormatting.RESET - + " L " - + EnumChatFormatting.GOLD - + getFluidName(tTanks[i].fluid, true) - + EnumChatFormatting.RESET); - } - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this tile's fluid tank info.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - private static int addDebuggableBlockInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, ArrayList tList, - Block tBlock) { - int rEUAmount = 0; - try { - if (tBlock instanceof IDebugableBlock debugableBlock) { - rEUAmount += 500; - final ArrayList temp = debugableBlock.getDebugInfo(aPlayer, aX, aY, aZ, 3); - if (temp != null) tList.addAll(temp); - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this block's debug info.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - private static void addPollutionInfo(ArrayList tList, Chunk currentChunk) { - if (GT_Pollution.hasPollution(currentChunk)) { - tList.add( - GT_Utility.trans("202", "Pollution in Chunk: ") + EnumChatFormatting.RED - + formatNumbers(GT_Pollution.getPollution(currentChunk)) - + EnumChatFormatting.RESET - + GT_Utility.trans("203", " gibbl")); - } else { - tList.add( - EnumChatFormatting.GREEN + GT_Utility.trans("204", "No Pollution in Chunk! HAYO!") - + EnumChatFormatting.RESET); - } - } - - private static void addUndergroundFluidInfo(EntityPlayer aPlayer, ArrayList tList, Chunk currentChunk) { - if (aPlayer.capabilities.isCreativeMode) { - final FluidStack tFluid = undergroundOilReadInformation(currentChunk); // -# to only read - if (tFluid != null) tList.add( - EnumChatFormatting.GOLD + tFluid.getLocalizedName() - + EnumChatFormatting.RESET - + ": " - + EnumChatFormatting.YELLOW - + formatNumbers(tFluid.amount) - + EnumChatFormatting.RESET - + " L"); - else tList.add( - EnumChatFormatting.GOLD + GT_Utility.trans("201", "Nothing") - + EnumChatFormatting.RESET - + ": " - + EnumChatFormatting.YELLOW - + '0' - + EnumChatFormatting.RESET - + " L"); - } - } - - private static int addForestryLeavesInfo(ArrayList tList, TileEntity tTileEntity) { - int rEUAmount = 0; - try { - if (Mods.Forestry.isModLoaded() - && tTileEntity instanceof forestry.arboriculture.tiles.TileLeaves tileLeaves) { - final forestry.api.arboriculture.ITree tree = tileLeaves.getTree(); - if (tree != null) { - rEUAmount += 1000; - if (!tree.isAnalyzed()) tree.analyze(); - tree.addTooltip(tList); - } - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this leaves' info.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - private static int addIC2CropInfo(ArrayList tList, TileEntity tTileEntity) { - int rEUAmount = 0; - try { - if (tTileEntity instanceof ic2.api.crops.ICropTile crop) { - rEUAmount += 1000; - if (crop.getScanLevel() < 4) crop.setScanLevel((byte) 4); - if (crop.getCrop() != null) { - tList.add( - GT_Utility.trans("187", "Type -- Crop-Name: ") + crop.getCrop() - .name() - + GT_Utility.trans("188", " Growth: ") - + crop.getGrowth() - + GT_Utility.trans("189", " Gain: ") - + crop.getGain() - + GT_Utility.trans("190", " Resistance: ") - + crop.getResistance()); - } - tList.add( - GT_Utility.trans("191", "Plant -- Fertilizer: ") + crop.getNutrientStorage() - + GT_Utility.trans("192", " Water: ") - + crop.getHydrationStorage() - + GT_Utility.trans("193", " Weed-Ex: ") - + crop.getWeedExStorage() - + GT_Utility.trans("194", " Scan-Level: ") - + crop.getScanLevel()); - tList.add( - GT_Utility.trans("195", "Environment -- Nutrients: ") + crop.getNutrients() - + GT_Utility.trans("196", " Humidity: ") - + crop.getHumidity() - + GT_Utility.trans("197", " Air-Quality: ") - + crop.getAirQuality()); - if (crop.getCrop() != null) { - final StringBuilder tStringB = new StringBuilder(); - for (final String tAttribute : crop.getCrop() - .attributes()) { - tStringB.append(", ") - .append(tAttribute); - } - final String tString = tStringB.toString(); - tList.add(GT_Utility.trans("198", "Attributes:") + tString.replaceFirst(",", E)); - tList.add( - GT_Utility.trans("199", "Discovered by: ") + crop.getCrop() - .discoveredBy()); - } - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this crop's info.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - private static void addDeviceInfo(ArrayList tList, TileEntity tTileEntity) { - try { - if (tTileEntity instanceof IGregTechDeviceInformation info && info.isGivingInformation()) { - tList.addAll(Arrays.asList(info.getInfoData())); - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this device's info.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - } - - private static void addOwnerInfo(ArrayList tList, TileEntity tTileEntity) { - try { - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - tList.add( - GT_Utility.trans("186", "Owned by: ") + EnumChatFormatting.BLUE - + gtTE.getOwnerName() - + EnumChatFormatting.RESET); - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this device's owner.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - } - - private static void addEnergyContainerInfo(ArrayList tList, TileEntity tTileEntity) { - try { - if (tTileEntity instanceof IBasicEnergyContainer energyContainer && energyContainer.getEUCapacity() > 0) { - tList.add( - GT_Utility.trans("179", "Max IN: ") + EnumChatFormatting.RED - + formatNumbers(energyContainer.getInputVoltage()) - + " (" - + GT_Values.VN[getTier(energyContainer.getInputVoltage())] - + ") " - + EnumChatFormatting.RESET - + GT_Utility.trans("182", " EU at ") - + EnumChatFormatting.RED - + formatNumbers(energyContainer.getInputAmperage()) - + EnumChatFormatting.RESET - + GT_Utility.trans("183", " A")); - tList.add( - GT_Utility.trans("181", "Max OUT: ") + EnumChatFormatting.RED - + formatNumbers(energyContainer.getOutputVoltage()) - + " (" - + GT_Values.VN[getTier(energyContainer.getOutputVoltage())] - + ") " - + EnumChatFormatting.RESET - + GT_Utility.trans("182", " EU at ") - + EnumChatFormatting.RED - + formatNumbers(energyContainer.getOutputAmperage()) - + EnumChatFormatting.RESET - + GT_Utility.trans("183", " A")); - tList.add( - GT_Utility.trans("184", "Energy: ") + EnumChatFormatting.GREEN - + formatNumbers(energyContainer.getStoredEU()) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + formatNumbers(energyContainer.getEUCapacity()) - + EnumChatFormatting.RESET - + " EU"); - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this device's energy info.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - } - - private static int addCoverableInfo(ForgeDirection side, ArrayList tList, TileEntity tTileEntity) { - int rEUAmount = 0; - try { - if (tTileEntity instanceof ICoverable coverable) { - rEUAmount += 300; - final String tString = coverable.getCoverInfoAtSide(side) - .getBehaviorDescription(); - if (tString != null && !tString.equals(E)) tList.add(tString); - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this device's covers.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - private static int addMachineProgressInfo(ArrayList tList, TileEntity tTileEntity) { - int rEUAmount = 0; - try { - if (tTileEntity instanceof IMachineProgress progress) { - if (progress.isAllowedToWork() && !progress.hasThingsToDo()) { - tList.add(EnumChatFormatting.RED + "Disabled." + EnumChatFormatting.RESET); - } - if (progress.wasShutdown() && isStringValid( - progress.getLastShutDownReason() - .getDisplayString())) { - tList.add( - progress.getLastShutDownReason() - .getDisplayString()); - } - rEUAmount += 400; - int tValue = 0; - if (0 < (tValue = progress.getMaxProgress())) tList.add( - GT_Utility.trans("178", "Progress/Load: ") + EnumChatFormatting.GREEN - + formatNumbers(progress.getProgress()) - + EnumChatFormatting.RESET - + " / " - + EnumChatFormatting.YELLOW - + formatNumbers(tValue) - + EnumChatFormatting.RESET); - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this device's progress.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - private static int addUpgradableMachineInfo(ArrayList tList, TileEntity tTileEntity) { - int rEUAmount = 0; - try { - if (tTileEntity instanceof IUpgradableMachine upgradableMachine) { - rEUAmount += 500; - if (upgradableMachine.hasMufflerUpgrade()) tList.add( - EnumChatFormatting.GREEN + GT_Utility.trans("177", "Has Muffler Upgrade") - + EnumChatFormatting.RESET); - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this device's upgrades.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - private static int addIC2EnergyStorageInfo(ArrayList tList, TileEntity tTileEntity) { - int rEUAmount = 0; - try { - if (tTileEntity instanceof ic2.api.tile.IEnergyStorage storage) { - rEUAmount += 200; - tList.add( - GT_Utility.trans("176", "Contained Energy: ") + EnumChatFormatting.YELLOW - + formatNumbers(storage.getStored()) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + formatNumbers(storage.getCapacity()) - + EnumChatFormatting.RESET - + " EU"); - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this device's IC2 energy info.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - private static int addIC2EnergyConductorInfo(ArrayList tList, TileEntity tTileEntity) { - int rEUAmount = 0; - try { - if (tTileEntity instanceof ic2.api.energy.tile.IEnergyConductor conductor) { - rEUAmount += 200; - tList.add( - GT_Utility.trans("175", "Conduction Loss: ") + EnumChatFormatting.YELLOW - + conductor.getConductionLoss() - + EnumChatFormatting.RESET); - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this device's EU conduction info.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - private static int addIC2WrenchableInfo(EntityPlayer aPlayer, ArrayList tList, TileEntity tTileEntity) { - int rEUAmount = 0; - try { - if (tTileEntity instanceof ic2.api.tile.IWrenchable wrenchable) { - rEUAmount += 100; - tList.add( - GT_Utility.trans("171", "Facing: ") + EnumChatFormatting.GREEN - + wrenchable.getFacing() - + EnumChatFormatting.RESET - + GT_Utility.trans("172", " / Chance: ") - + EnumChatFormatting.YELLOW - + (wrenchable.getWrenchDropRate() * 100) - + EnumChatFormatting.RESET - + "%"); - tList.add( - wrenchable.wrenchCanRemove(aPlayer) - ? EnumChatFormatting.GREEN + GT_Utility.trans("173", "You can remove this with a Wrench") - + EnumChatFormatting.RESET - : EnumChatFormatting.RED + GT_Utility.trans("174", "You can NOT remove this with a Wrench") - + EnumChatFormatting.RESET); - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this device's IC@ wrenchability.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - private static int addAlignmentInfo(ArrayList tList, TileEntity tTileEntity) { - int rEUAmount = 0; - try { - if (tTileEntity instanceof IAlignmentProvider alignmentProvider) { - final IAlignment tAlignment = alignmentProvider.getAlignment(); - if (tAlignment != null) { - rEUAmount += 100; - tList.add( - GT_Utility.trans("219", "Extended Facing: ") + EnumChatFormatting.GREEN - + tAlignment.getExtendedFacing() - + EnumChatFormatting.RESET); - } - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this device's alignment info.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - private static int addReactorInfo(ArrayList tList, TileEntity tTileEntity) { - int rEUAmount = 0; - try { - if (tTileEntity instanceof ic2.api.reactor.IReactor reactor) { - rEUAmount += 500; - tList.add( - GT_Utility.trans("168", "Heat: ") + EnumChatFormatting.GREEN - + formatNumbers(reactor.getHeat()) - + EnumChatFormatting.RESET - + " / " - + EnumChatFormatting.YELLOW - + formatNumbers(reactor.getMaxHeat()) - + EnumChatFormatting.RESET); - tList.add( - GT_Utility.trans("169", "HEM: ") + EnumChatFormatting.YELLOW - + reactor.getHeatEffectModifier() - + EnumChatFormatting.RESET); - } - } catch (Throwable e) { - tList.add(String.format("§cAn exception was thrown while fetching this reactor's info.§r")); - if (D1) e.printStackTrace(GT_Log.err); - } - return rEUAmount; - } - - public static String trans(String aKey, String aEnglish) { - return GT_LanguageManager.addStringLocalization("Interaction_DESCRIPTION_Index_" + aKey, aEnglish); - } - - public static String getTrans(String aKey) { - return GT_LanguageManager.getTranslation("Interaction_DESCRIPTION_Index_" + aKey); - } - - /** - * @return an Array containing the X and the Y Coordinate of the clicked Point, with the top left Corner as Origin, - * like on the Texture Sheet. return values should always be between [0.0F and 0.99F]. - */ - // TODO: use clamp() - public static float[] getClickedFacingCoords(ForgeDirection side, float aX, float aY, float aZ) { - return switch (side) { - case DOWN -> new float[] { Math.min(0.99F, Math.max(0, 1 - aX)), Math.min(0.99F, Math.max(0, aZ)) }; - case UP -> new float[] { Math.min(0.99F, Math.max(0, aX)), Math.min(0.99F, Math.max(0, aZ)) }; - case NORTH -> new float[] { Math.min(0.99F, Math.max(0, 1 - aX)), Math.min(0.99F, Math.max(0, 1 - aY)) }; - case SOUTH -> new float[] { Math.min(0.99F, Math.max(0, aX)), Math.min(0.99F, Math.max(0, 1 - aY)) }; - case WEST -> new float[] { Math.min(0.99F, Math.max(0, aZ)), Math.min(0.99F, Math.max(0, 1 - aY)) }; - case EAST -> new float[] { Math.min(0.99F, Math.max(0, 1 - aZ)), Math.min(0.99F, Math.max(0, 1 - aY)) }; - default -> new float[] { 0.5F, 0.5F }; - }; - } - - /** - * This Function determines the direction a Block gets when being Wrenched. returns -1 if invalid. Even though that - * could never happen. - */ - public static ForgeDirection determineWrenchingSide(ForgeDirection side, float aX, float aY, float aZ) { - ForgeDirection tBack = side.getOpposite(); - switch (side) { - case DOWN, UP -> { - if (aX < 0.25) { - if (aZ < 0.25) return tBack; - if (aZ > 0.75) return tBack; - return WEST; - } - if (aX > 0.75) { - if (aZ < 0.25) return tBack; - if (aZ > 0.75) return tBack; - return EAST; - } - if (aZ < 0.25) return NORTH; - if (aZ > 0.75) return SOUTH; - return side; - } - case NORTH, SOUTH -> { - if (aX < 0.25) { - if (aY < 0.25) return tBack; - if (aY > 0.75) return tBack; - return WEST; - } - if (aX > 0.75) { - if (aY < 0.25) return tBack; - if (aY > 0.75) return tBack; - return EAST; - } - if (aY < 0.25) return DOWN; - if (aY > 0.75) return UP; - return side; - } - case WEST, EAST -> { - if (aZ < 0.25) { - if (aY < 0.25) return tBack; - if (aY > 0.75) return tBack; - return NORTH; - } - if (aZ > 0.75) { - if (aY < 0.25) return tBack; - if (aY > 0.75) return tBack; - return SOUTH; - } - if (aY < 0.25) return DOWN; - if (aY > 0.75) return UP; - return side; - } - } - return UNKNOWN; - } - - private static DecimalFormat getDecimalFormat() { - return decimalFormatters.computeIfAbsent(Locale.getDefault(Locale.Category.FORMAT), locale -> { - DecimalFormat numberFormat = new DecimalFormat(); // uses the necessary locale inside anyway - numberFormat.setGroupingUsed(true); - numberFormat.setMaximumFractionDigits(2); - numberFormat.setRoundingMode(RoundingMode.HALF_UP); - DecimalFormatSymbols decimalFormatSymbols = numberFormat.getDecimalFormatSymbols(); - decimalFormatSymbols.setGroupingSeparator(','); // Use sensible separator for best clarity. - numberFormat.setDecimalFormatSymbols(decimalFormatSymbols); - return numberFormat; - }); - } - - public static String formatNumbers(BigInteger aNumber) { - return getDecimalFormat().format(aNumber); - } - - public static String formatNumbers(long aNumber) { - return getDecimalFormat().format(aNumber); - } - - public static String formatNumbers(double aNumber) { - return getDecimalFormat().format(aNumber); - } - - /* - * Check if stack has enough items of given type and subtract from stack, if there's no creative or 111 stack. - */ - public static boolean consumeItems(EntityPlayer player, ItemStack stack, Item item, int count) { - if (stack != null && stack.getItem() == item && stack.stackSize >= count) { - if ((!player.capabilities.isCreativeMode) && (stack.stackSize != 111)) stack.stackSize -= count; - return true; - } - return false; - } - - /* - * Check if stack has enough items of given gregtech material (will be oredicted) and subtract from stack, if - * there's no creative or 111 stack. - */ - public static boolean consumeItems(EntityPlayer player, ItemStack stack, gregtech.api.enums.Materials mat, - int count) { - if (stack != null && GT_OreDictUnificator.getItemData(stack).mMaterial.mMaterial == mat - && stack.stackSize >= count) { - if ((!player.capabilities.isCreativeMode) && (stack.stackSize != 111)) stack.stackSize -= count; - return true; - } - return false; - } - - public static ArrayList sortByValueToList(Map map) { - List> list = new LinkedList<>(map.entrySet()); - list.sort((o1, o2) -> o2.getValue() - o1.getValue()); - - ArrayList result = new ArrayList<>(); - for (Map.Entry e : list) result.add(e.getKey()); - return result; - } - - public static String joinListToString(List list) { - StringBuilder result = new StringBuilder(32); - for (String s : list) result.append(result.length() == 0 ? s : '|' + s); - return result.toString(); - } - - public static ItemStack getIntegratedCircuit(int config) { - return ItemList.Circuit_Integrated.getWithDamage(0, config); - } - - public static float getBlockHardnessAt(World aWorld, int aX, int aY, int aZ) { - return aWorld.getBlock(aX, aY, aZ) - .getBlockHardness(aWorld, aX, aY, aZ); - } - - public static FakePlayer getFakePlayer(IGregTechTileEntity aBaseMetaTileEntity) { - if (aBaseMetaTileEntity.getWorld() instanceof WorldServer) { - return FakePlayerFactory.get( - (WorldServer) aBaseMetaTileEntity.getWorld(), - new GameProfile(aBaseMetaTileEntity.getOwnerUuid(), aBaseMetaTileEntity.getOwnerName())); - } - return null; - } - - public static boolean eraseBlockByFakePlayer(FakePlayer aPlayer, int aX, int aY, int aZ, boolean isSimulate) { - if (aPlayer == null) return false; - World aWorld = aPlayer.worldObj; - BlockEvent.BreakEvent event = new BlockEvent.BreakEvent( - aX, - aY, - aZ, - aWorld, - aWorld.getBlock(aX, aY, aZ), - aWorld.getBlockMetadata(aX, aY, aZ), - aPlayer); - MinecraftForge.EVENT_BUS.post(event); - if (!event.isCanceled()) { - if (!isSimulate) return aWorld.setBlockToAir(aX, aY, aZ); - return true; - } - return false; - } - - public static boolean setBlockByFakePlayer(FakePlayer aPlayer, int aX, int aY, int aZ, Block aBlock, int aMeta, - boolean isSimulate) { - if (aPlayer == null) return false; - World aWorld = aPlayer.worldObj; - BlockEvent.PlaceEvent event = ForgeEventFactory - .onPlayerBlockPlace(aPlayer, new BlockSnapshot(aWorld, aX, aY, aZ, aBlock, aMeta), UNKNOWN); - if (!event.isCanceled()) { - if (!isSimulate) return aWorld.setBlock(aX, aY, aZ, aBlock, aMeta, 3); - return true; - } - return false; - } - - public static int findMatchingStackInList(List aStacks, ItemStack aStack) { - if (isStackInvalid(aStack)) return -1; - for (int i = 0, aStacksSize = aStacks.size(); i < aStacksSize; i++) { - ItemStack tStack = aStacks.get(i); - if (areStacksEqual(aStack, tStack)) return i; - } - return -1; - } - - public static Map convertItemListToMap(Collection itemStacks) { - Map result = new Object2LongOpenHashMap<>(); - for (ItemStack itemStack : itemStacks) { - if (itemStack != null && itemStack.stackSize > 0) { - GT_Utility.ItemId itemId = GT_Utility.ItemId.createNoCopy(itemStack); - result.merge(itemId, (long) itemStack.stackSize, Long::sum); - } - } - return result; - } - - public static Map convertFluidListToMap(Collection fluidStacks) { - Map result = new Reference2LongOpenHashMap<>(); - for (FluidStack fluidStack : fluidStacks) { - if (fluidStack != null && fluidStack.amount > 0) { - result.merge(fluidStack.getFluid(), (long) fluidStack.amount, Long::sum); - } - } - return result; - } - - /** - * @return Supplied collection that doesn't contain invalid MetaTileEntities - */ - public static , E extends MetaTileEntity> T filterValidMTEs(T metaTileEntities) { - metaTileEntities.removeIf(mte -> mte == null || !mte.isValid()); - return metaTileEntities; - } - - public static ForgeDirection getSideFromPlayerFacing(Entity player) { - if (player == null) return ForgeDirection.UNKNOWN; - if (player.rotationPitch >= 65) return ForgeDirection.UP; - if (player.rotationPitch <= -65) return ForgeDirection.DOWN; - final byte facing = COMPASS_DIRECTIONS[MathHelper.floor_double(0.5D + 4.0F * player.rotationYaw / 360.0F) - & 0x3]; - return ForgeDirection.getOrientation(facing); - } - - public static class ItemNBT { - - public static void setNBT(ItemStack aStack, NBTTagCompound aNBT) { - if (aNBT == null) { - aStack.setTagCompound(null); - return; - } - ArrayList tTagsToRemove = new ArrayList<>(); - for (String tKey : aNBT.func_150296_c()) { - NBTBase tValue = aNBT.getTag(tKey); - if (tValue == null || (tValue instanceof NBTPrimitive && ((NBTPrimitive) tValue).func_150291_c() == 0) - || (tValue instanceof NBTTagString && isStringInvalid(((NBTTagString) tValue).func_150285_a_()))) - tTagsToRemove.add(tKey); - } - for (String tKey : tTagsToRemove) aNBT.removeTag(tKey); - aStack.setTagCompound(aNBT.hasNoTags() ? null : aNBT); - } - - public static NBTTagCompound getNBT(ItemStack aStack) { - NBTTagCompound rNBT = aStack.getTagCompound(); - return rNBT == null ? new NBTTagCompound() : rNBT; - } - - public static void setPunchCardData(ItemStack aStack, String aPunchCardData) { - NBTTagCompound tNBT = getNBT(aStack); - tNBT.setString("GT.PunchCardData", aPunchCardData); - setNBT(aStack, tNBT); - } - - public static String getPunchCardData(ItemStack aStack) { - NBTTagCompound tNBT = getNBT(aStack); - return tNBT.getString("GT.PunchCardData"); - } - - public static void setLighterFuel(ItemStack aStack, long aFuel) { - NBTTagCompound tNBT = getNBT(aStack); - tNBT.setLong("GT.LighterFuel", aFuel); - setNBT(aStack, tNBT); - } - - public static long getLighterFuel(ItemStack aStack) { - NBTTagCompound tNBT = getNBT(aStack); - return tNBT.getLong("GT.LighterFuel"); - } - - public static void setMapID(ItemStack aStack, short aMapID) { - NBTTagCompound tNBT = getNBT(aStack); - tNBT.setShort("map_id", aMapID); - setNBT(aStack, tNBT); - } - - public static short getMapID(ItemStack aStack) { - NBTTagCompound tNBT = getNBT(aStack); - if (!tNBT.hasKey("map_id")) return -1; - return tNBT.getShort("map_id"); - } - - public static void setBookTitle(ItemStack aStack, String aTitle) { - NBTTagCompound tNBT = getNBT(aStack); - tNBT.setString("title", aTitle); - setNBT(aStack, tNBT); - } - - public static String getBookTitle(ItemStack aStack) { - NBTTagCompound tNBT = getNBT(aStack); - return tNBT.getString("title"); - } - - public static void setBookAuthor(ItemStack aStack, String aAuthor) { - NBTTagCompound tNBT = getNBT(aStack); - tNBT.setString("author", aAuthor); - setNBT(aStack, tNBT); - } - - public static String getBookAuthor(ItemStack aStack) { - NBTTagCompound tNBT = getNBT(aStack); - return tNBT.getString("author"); - } - - public static void setProspectionData(ItemStack aStack, int aX, int aY, int aZ, int aDim, FluidStack aFluid, - String... aOres) { - NBTTagCompound tNBT = getNBT(aStack); - StringBuilder tData = new StringBuilder(aX + "," + aY + "," + aZ + "," + aDim + ","); - if (aFluid != null) tData.append(aFluid.amount) - .append(",") - .append(aFluid.getLocalizedName()) - .append(","); // TODO - // CHECK - // IF - // THAT - // /5000 - // is - // needed - // (Not - // needed) - for (String tString : aOres) { - tData.append(tString) - .append(","); - } - tNBT.setString("prospection", tData.toString()); - setNBT(aStack, tNBT); - } - - public static void setAdvancedProspectionData(byte aTier, ItemStack aStack, int aX, short aY, int aZ, int aDim, - ArrayList aOils, ArrayList aOres, int aRadius) { - - setBookTitle(aStack, "Raw Prospection Data"); - - NBTTagCompound tNBT = getNBT(aStack); - - tNBT.setByte("prospection_tier", aTier); - tNBT.setString("prospection_pos", "Dim: " + aDim + "\nX: " + aX + " Y: " + aY + " Z: " + aZ); - - // ores - Collections.sort(aOres); - tNBT.setString("prospection_ores", joinListToString(aOres)); - - // oils - ArrayList tOilsTransformed = new ArrayList<>(aOils.size()); - for (String aStr : aOils) { - String[] aStats = aStr.split(","); - tOilsTransformed.add(aStats[0] + ": " + aStats[1] + "L " + aStats[2]); - } - - tNBT.setString("prospection_oils", joinListToString(tOilsTransformed)); - - String tOilsPosStr = "X: " + Math.floorDiv(aX, 16 * 8) * 16 * 8 - + " Z: " - + Math.floorDiv(aZ, 16 * 8) * 16 * 8 - + "\n"; - int xOff = aX - Math.floorDiv(aX, 16 * 8) * 16 * 8; - xOff = xOff / 16; - int xOffRemain = 7 - xOff; - - int zOff = aZ - Math.floorDiv(aZ, 16 * 8) * 16 * 8; - zOff = zOff / 16; - int zOffRemain = 7 - zOff; - - for (; zOff > 0; zOff--) { - tOilsPosStr = tOilsPosStr.concat("--------\n"); - } - for (; xOff > 0; xOff--) { - tOilsPosStr = tOilsPosStr.concat("-"); - } - - tOilsPosStr = tOilsPosStr.concat("P"); - - for (; xOffRemain > 0; xOffRemain--) { - tOilsPosStr = tOilsPosStr.concat("-"); - } - tOilsPosStr = tOilsPosStr.concat("\n"); - for (; zOffRemain > 0; zOffRemain--) { - tOilsPosStr = tOilsPosStr.concat("--------\n"); - } - tOilsPosStr = tOilsPosStr.concat( - " X: " + (Math.floorDiv(aX, 16 * 8) + 1) * 16 * 8 - + " Z: " - + (Math.floorDiv(aZ, 16 * 8) + 1) * 16 * 8); // +1 oilfied to find bottomright of [5] - - tNBT.setString("prospection_oils_pos", tOilsPosStr); - - tNBT.setString("prospection_radius", String.valueOf(aRadius)); - - setNBT(aStack, tNBT); - } - - public static void convertProspectionData(ItemStack aStack) { - NBTTagCompound tNBT = getNBT(aStack); - byte tTier = tNBT.getByte("prospection_tier"); - - if (tTier == 0) { // basic prospection data - String tData = tNBT.getString("prospection"); - String[] tDataArray = tData.split(","); - if (tDataArray.length > 6) { - tNBT.setString( - "author", - " Dim: " + tDataArray[3] - + "X: " - + tDataArray[0] - + " Y: " - + tDataArray[1] - + " Z: " - + tDataArray[2]); - NBTTagList tNBTList = new NBTTagList(); - StringBuilder tOres = new StringBuilder(" Prospected Ores: "); - for (int i = 6; tDataArray.length > i; i++) { - tOres.append(tDataArray[i]) - .append(" "); - } - tNBTList.appendTag( - new NBTTagString( - "Tier " + tTier - + " Prospecting Data From: X" - + tDataArray[0] - + " Z:" - + tDataArray[2] - + " Dim:" - + tDataArray[3] - + " Produces " - + tDataArray[4] - + "L " - + tDataArray[5] - + " " - + tOres)); - tNBT.setTag("pages", tNBTList); - } - } else { // advanced prospection data - String tPos = tNBT.getString("prospection_pos"); - String tRadius = tNBT.getString("prospection_radius"); - - String tOresStr = tNBT.getString("prospection_ores"); - String tOilsStr = tNBT.getString("prospection_oils"); - String tOilsPosStr = tNBT.getString("prospection_oils_pos"); - - String[] tOres = tOresStr.isEmpty() ? null : tOresStr.split("\\|"); - String[] tOils = tOilsStr.isEmpty() ? null : tOilsStr.split("\\|"); - - NBTTagList tNBTList = new NBTTagList(); - - String tPageText = "Prospector report\n" + tPos - + "\n\n" - + "Oils: " - + (tOils != null ? tOils.length : 0) - + "\n\n" - + "Ores within " - + tRadius - + " blocks\n\n" - + "Location is center of orevein\n\n" - + "Check NEI to confirm orevein type"; - tNBTList.appendTag(new NBTTagString(tPageText)); - - if (tOres != null) fillBookWithList(tNBTList, "Ores Found %s\n\n", "\n", 7, tOres); - - if (tOils != null) fillBookWithList(tNBTList, "Oils%s\n\n", "\n", 9, tOils); - - tPageText = """ - Oil notes - - Prospects from NW to SE 576 chunks(9 8x8 oilfields) - around and gives min-max amount - - [1][2][3] - [4][5][6] - [7][8][9] - - [5] - Prospector in this 8x8 area"""; - tNBTList.appendTag(new NBTTagString(tPageText)); - - tPageText = "Corners of [5] are \n" + tOilsPosStr + "\n" + "P - Prospector in 8x8 field"; - tNBTList.appendTag(new NBTTagString(tPageText)); - - tNBT.setString("author", tPos.replace("\n", " ")); - tNBT.setTag("pages", tNBTList); - } - setNBT(aStack, tNBT); - } - - public static void fillBookWithList(NBTTagList aBook, String aPageHeader, String aListDelimiter, - int aItemsPerPage, String[] list) { - String aPageFormatter = " %d/%d"; - int tTotalPages = list.length / aItemsPerPage + (list.length % aItemsPerPage > 0 ? 1 : 0); - int tPage = 0; - StringBuilder tPageText; - do { - tPageText = new StringBuilder(); - for (int i = tPage * aItemsPerPage; i < (tPage + 1) * aItemsPerPage && i < list.length; i += 1) - tPageText.append((tPageText.length() == 0) ? "" : aListDelimiter) - .append(list[i]); - - if (tPageText.length() > 0) { - String tPageCounter = tTotalPages > 1 ? String.format(aPageFormatter, tPage + 1, tTotalPages) : ""; - NBTTagString tPageTag = new NBTTagString(String.format(aPageHeader, tPageCounter) + tPageText); - aBook.appendTag(tPageTag); - } - - ++tPage; - } while (tPageText.length() > 0); - } - - public static void addEnchantment(ItemStack aStack, Enchantment aEnchantment, int aLevel) { - NBTTagCompound tNBT = getNBT(aStack), tEnchantmentTag; - if (!tNBT.hasKey("ench", 9)) tNBT.setTag("ench", new NBTTagList()); - NBTTagList tList = tNBT.getTagList("ench", 10); - - boolean temp = true; - - for (int i = 0; i < tList.tagCount(); i++) { - tEnchantmentTag = tList.getCompoundTagAt(i); - if (tEnchantmentTag.getShort("id") == aEnchantment.effectId) { - tEnchantmentTag.setShort("id", (short) aEnchantment.effectId); - tEnchantmentTag.setShort("lvl", (byte) aLevel); - temp = false; - break; - } - } - - if (temp) { - tEnchantmentTag = new NBTTagCompound(); - tEnchantmentTag.setShort("id", (short) aEnchantment.effectId); - tEnchantmentTag.setShort("lvl", (byte) aLevel); - tList.appendTag(tEnchantmentTag); - } - aStack.setTagCompound(tNBT); - } - } - - public static String toSubscript(long no) { - char[] chars = Long.toString(no) - .toCharArray(); - for (int i = 0; i < chars.length; i++) { - chars[i] += 8272; - } - return new String(chars); - } - - public static boolean isPartOfMaterials(ItemStack aStack, Materials aMaterials) { - return GT_OreDictUnificator.getAssociation(aStack) != null - && GT_OreDictUnificator.getAssociation(aStack).mMaterial.mMaterial.equals(aMaterials); - } - - public static boolean isPartOfOrePrefix(ItemStack aStack, OrePrefixes aPrefix) { - return GT_OreDictUnificator.getAssociation(aStack) != null - && GT_OreDictUnificator.getAssociation(aStack).mPrefix.equals(aPrefix); - } - - public static final ImmutableSet ORE_BLOCK_CLASSES = ImmutableSet.of( - "com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_Ores", - "com.github.bartimaeusnek.bartworks.system.material.BW_MetaGenerated_SmallOres", - "gtPlusPlus.core.block.base.BlockBaseOre"); - - public static boolean isOre(Block aBlock, int aMeta) { - return (aBlock instanceof GT_Block_Ores_Abstract) || isOre(new ItemStack(aBlock, 1, aMeta)) - || ORE_BLOCK_CLASSES.contains( - aBlock.getClass() - .getName()); - } - - public static boolean isOre(ItemStack aStack) { - int tItem = GT_Utility.stackToInt(aStack); - if (sOreTable.containsKey(tItem)) { - return sOreTable.get(tItem); - } - for (int id : OreDictionary.getOreIDs(aStack)) { - if (OreDictionary.getOreName(id) - .startsWith("ore")) { - sOreTable.put(tItem, true); - return true; - } - } - sOreTable.put(tItem, false); - return false; - } - - /** - * Do NOT mutate the returned {@code ItemStack}! We return {@code ItemStack} instead of {@code Block} so that - * we can include metadata. - */ - public static ItemStack getCobbleForOre(Block ore, short metaData) { - // We need to convert small ores to regular ores because small ores don't have associated ItemData. - // We take the modulus of the metadata by 16000 because that is the magic number to convert small ores to - // regular ores. - // See: GT_TileEntity_Ores.java - ItemData association = GT_OreDictUnificator - .getAssociation(new ItemStack(Item.getItemFromBlock(ore), 1, metaData % 16000)); - if (association != null) { - Supplier supplier = sOreToCobble.get(association.mPrefix); - if (supplier != null) { - return supplier.get(); - } - } - return new ItemStack(Blocks.cobblestone); - } - - public static Optional reverseShapelessRecipe(ItemStack output, Object... aRecipe) { - if (output == null) { - return Optional.empty(); - } - - List inputs = new ArrayList<>(); - - for (Object o : aRecipe) { - if (o instanceof ItemStack) { - ItemStack toAdd = ((ItemStack) o).copy(); - inputs.add(toAdd); - } else if (o instanceof String) { - ItemStack stack = GT_OreDictUnificator.get(o, 1); - if (stack == null) { - Optional oStack = OreDictionary.getOres((String) o) - .stream() - .findAny(); - if (oStack.isPresent()) { - ItemStack copy = oStack.get() - .copy(); - inputs.add(copy); - } - } else { - ItemStack copy = stack.copy(); - inputs.add(copy); - } - } else if (o instanceof Item) inputs.add(new ItemStack((Item) o)); - else if (o instanceof Block) inputs.add(new ItemStack((Block) o)); - else throw new IllegalStateException("A Recipe contains an invalid input! Output: " + output); - } - - inputs.removeIf(x -> x.getItem() instanceof GT_MetaGenerated_Tool); - - return Optional.of( - new GT_Recipe( - false, - new ItemStack[] { output }, - inputs.toArray(new ItemStack[0]), - null, - null, - null, - null, - 300, - 30, - 0)); - } - - public static Optional reverseShapedRecipe(ItemStack output, Object... aRecipe) { - if (output == null) { - return Optional.empty(); - } - - Map recipeAsMap = new HashMap<>(); - Map ingridients = new HashMap<>(); - Map amounts = new HashMap<>(); - boolean startFound = false; - for (int i = 0, aRecipeLength = aRecipe.length; i < aRecipeLength; i++) { - Object o = aRecipe[i]; - if (!startFound) { - if (o instanceof String) { - for (Character c : ((String) o).toCharArray()) amounts.merge(c, 1, (a, b) -> ++a); - } else if (o instanceof Character) startFound = true; - } else if (!(o instanceof Character)) ingridients.put((Character) aRecipe[i - 1], o); - } - for (Map.Entry characterObjectEntry : ingridients.entrySet()) { - for (Map.Entry characterIntegerEntry : amounts.entrySet()) { - if (characterObjectEntry.getKey() != characterIntegerEntry.getKey()) continue; - recipeAsMap.put(characterObjectEntry.getValue(), characterIntegerEntry.getValue()); - } - } - List inputs = new ArrayList<>(); - - for (Map.Entry o : recipeAsMap.entrySet()) { - final int amount = o.getValue(); - if (o.getKey() instanceof ItemStack) { - ItemStack toAdd = ((ItemStack) o.getKey()).copy(); - toAdd.stackSize = amount; - inputs.add(toAdd); - } else if (o.getKey() instanceof String dictName) { - // Do not register tools dictName in inputs - if (ToolDictNames.contains(dictName)) continue; - ItemStack stack = GT_OreDictUnificator.get(dictName, null, amount, false, true); - if (stack == null) { - Optional oStack = OreDictionary.getOres(dictName) - .stream() - .findAny(); - if (oStack.isPresent()) { - ItemStack copy = oStack.get() - .copy(); - copy.stackSize = amount; - inputs.add(copy); - } - } else { - ItemStack copy = stack.copy(); - copy.stackSize = amount; - inputs.add(copy); - } - } else if (o.getKey() instanceof Item) inputs.add(new ItemStack((Item) o.getKey(), amount)); - else if (o.getKey() instanceof Block) inputs.add(new ItemStack((Block) o.getKey(), amount)); - else throw new IllegalStateException("A Recipe contains an invalid input! Output: " + output); - } - - // Remove tools from inputs in case a recipe has one as a direct Item or ItemStack reference - inputs.removeIf(x -> x.getItem() instanceof GT_MetaGenerated_Tool); - - return Optional.of( - new GT_Recipe( - false, - new ItemStack[] { output }, - inputs.toArray(new ItemStack[0]), - null, - null, - null, - null, - 300, - 30, - 0)); - } - - /** - * Add an itemstack to player inventory, or drop on ground if full. Can be called on client but it probably won't - * work very well. - */ - public static void addItemToPlayerInventory(EntityPlayer aPlayer, ItemStack aStack) { - if (isStackInvalid(aStack)) return; - if (!aPlayer.inventory.addItemStackToInventory(aStack) && !aPlayer.worldObj.isRemote) { - EntityItem dropItem = aPlayer.entityDropItem(aStack, 0); - dropItem.delayBeforeCanPickup = 0; - } - } - - public static long getNonnullElementCount(Object[] tArray) { - return Arrays.stream(tArray) - .filter(Objects::nonNull) - .count(); - } - - public static int clamp(int val, int lo, int hi) { - return MathHelper.clamp_int(val, lo, hi); - } - - public static int ceilDiv(int lhs, int rhs) { - return (lhs + rhs - 1) / rhs; - } - - public static long ceilDiv(long lhs, long rhs) { - return (lhs + rhs - 1) / rhs; - } - - /** - * Hash an item stack for the purpose of storing hash across launches - */ - public static int persistentHash(ItemStack aStack, boolean aUseStackSize, boolean aUseNBT) { - if (aStack == null) return 0; - int result = Objects.hashCode(GameRegistry.findUniqueIdentifierFor(aStack.getItem())); - result = result * 31 + Items.feather.getDamage(aStack); - - if (aUseStackSize) result = result * 31 + aStack.stackSize; - if (aUseNBT) result = result * 31 + Objects.hashCode(aStack.stackTagCompound); - return result; - } - - /** - * Hash an item stack for the purpose of storing hash across launches - */ - public static int persistentHash(FluidStack aStack, boolean aUseStackSize, boolean aUseNBT) { - if (aStack == null) return 0; - int base = Objects.hashCode( - aStack.getFluid() - .getName()); - - if (aUseStackSize) base = base * 31 + aStack.amount; - if (aUseNBT) base = base * 31 + Objects.hashCode(aStack.tag); - return base; - } - - public static int getCasingTextureIndex(Block block, int meta) { - if (block instanceof IHasIndexedTexture) return ((IHasIndexedTexture) block).getTextureIndex(meta); - return Textures.BlockIcons.ERROR_TEXTURE_INDEX; - } - - public static boolean isCellEmpty(ItemStack itemStack) { - if (itemStack == null) return false; - ItemStack tStack = ItemList.Cell_Empty.get(1); - tStack.stackSize = itemStack.stackSize; - return GT_Utility.areStacksEqual(itemStack, tStack); - } - - /** - * Convert a cell to fluid. If given itemstack does not contain any fluid, return null. Will correctly multiple - * output fluid amount if input stack size is greater than 1. - */ - public static FluidStack convertCellToFluid(ItemStack itemStack) { - if (itemStack == null) return null; - if (getFluidForFilledItem(itemStack, true) != null) { - FluidStack fluidStack = getFluidForFilledItem(itemStack, true); - if (fluidStack != null) fluidStack.amount = fluidStack.amount * itemStack.stackSize; - return fluidStack; - } - return null; - } - - public static boolean isAnyIntegratedCircuit(ItemStack itemStack) { - if (itemStack == null) return false; - return itemStack.getItem() == ItemList.Circuit_Integrated.getItem() && 0 <= itemStack.getItemDamage() - && itemStack.getItemDamage() < 25; - } - - public static byte convertRatioToRedstone(long used, long max, int threshold, boolean inverted) { - byte signal; - if (used <= 0) { // Empty - signal = 0; - } else if (used >= max) { // Full - signal = 15; - } else { // Range 1-14 - signal = (byte) (1 + (14 * used) / max); - } - - if (inverted) { - signal = (byte) (15 - signal); - } - - if (threshold > 0) { - if (inverted && used >= threshold) { - return 0; - } else if (!inverted && used < threshold) { - return 0; - } - } - - return signal; - } - - public static ItemStack getNaniteAsCatalyst(Materials material) { - ItemStack aItem = material.getNanite(1); - return new ItemStack(aItem.getItem(), 0, aItem.getItemDamage()); - } - - public static Stream streamCompounds(NBTTagList list) { - if (list == null) return Stream.empty(); - return IntStream.range(0, list.tagCount()) - .mapToObj(list::getCompoundTagAt); - } - - public static boolean equals(ItemStack[] a, ItemStack[] b) { - // because stupid mojang didn't override equals for us - if (a == null && b == null) return true; - if ((a == null) != (b == null)) return false; - if (a.length != b.length) return false; - for (int i = 0; i < a.length; i++) { - if (!areStacksEqual(a[i], b[i], false)) return false; - } - return true; - } - - /** - * Guava ImmutableMap variant of Collectors.toMap. Optimized for serial streams. - */ - public static Collector> toImmutableMapSerial( - Function keyMapper, Function valueMapper) { - // petty type inference cannot work out the correct type parameter - return Collector., ImmutableMap>of( - ImmutableMap::builder, - (b, t) -> b.put(keyMapper.apply(t), valueMapper.apply(t)), - (b1, b2) -> b1.putAll(b2.build()), - ImmutableMap.Builder::build); - } - - public static boolean isArrayEmptyOrNull(Object[] arr) { - return arr == null || arr.length == 0; - } - - public static boolean isArrayOfLength(Object[] arr, int expectedLength) { - return arr != null && arr.length == expectedLength; - } - - @SafeVarargs - public static Collection concat(Collection... colls) { - return concat(Arrays.asList(colls)); - } - - public static Collection concat(Collection> colls) { - return new ConcatCollection<>(colls); - } - - private static class ConcatCollection extends AbstractCollection { - - private final Collection> colls; - private final int size; - - public ConcatCollection(Collection> lists) { - Collection> colls1 = null; - for (Collection list : lists) { - if (list == null || list.isEmpty()) { - colls1 = lists.stream() - .filter(c -> c != null && !c.isEmpty()) - .collect(Collectors.toList()); - break; - } - } - if (colls1 == null) colls1 = lists; - colls = colls1; - int sum = 0; - for (Collection list : colls) { - sum += list.size(); - } - size = sum; - } - - @Nonnull - @Override - public Iterator iterator() { - return colls.stream() - .flatMap(Collection::stream) - .iterator(); - } - - @Override - public int size() { - return size; - } - } - - @AutoValue - public abstract static class ItemId { - - public static ItemId create(NBTTagCompound tag) { - return new AutoValue_GT_Utility_ItemId( - Item.getItemById(tag.getShort("item")), - tag.getShort("meta"), - tag.hasKey("tag", Constants.NBT.TAG_COMPOUND) ? tag.getCompoundTag("tag") : null); - } - - /** - * This method copies NBT, as it is mutable. - */ - public static ItemId create(ItemStack itemStack) { - NBTTagCompound nbt = itemStack.getTagCompound(); - if (nbt != null) { - nbt = (NBTTagCompound) nbt.copy(); - } - - return new AutoValue_GT_Utility_ItemId(itemStack.getItem(), Items.feather.getDamage(itemStack), nbt); - } - - /** - * This method copies NBT, as it is mutable. - */ - public static ItemId create(Item item, int metaData, @Nullable NBTTagCompound nbt) { - if (nbt != null) { - nbt = (NBTTagCompound) nbt.copy(); - } - return new AutoValue_GT_Utility_ItemId(item, metaData, nbt); - } - - /** - * This method stores metadata as wildcard and NBT as null. - */ - public static ItemId createAsWildcard(ItemStack itemStack) { - return new AutoValue_GT_Utility_ItemId(itemStack.getItem(), W, null); - } - - /** - * This method stores NBT as null. - */ - public static ItemId createWithoutNBT(ItemStack itemStack) { - return new AutoValue_GT_Utility_ItemId(itemStack.getItem(), Items.feather.getDamage(itemStack), null); - } - - /** - * This method does not copy NBT in order to save time. Make sure not to mutate it! - */ - public static ItemId createNoCopy(ItemStack itemStack) { - return new AutoValue_GT_Utility_ItemId( - itemStack.getItem(), - Items.feather.getDamage(itemStack), - itemStack.getTagCompound()); - } - - /** - * This method does not copy NBT in order to save time. Make sure not to mutate it! - */ - public static ItemId createNoCopy(Item item, int metaData, @Nullable NBTTagCompound nbt) { - return new AutoValue_GT_Utility_ItemId(item, metaData, nbt); - } - - protected abstract Item item(); - - protected abstract int metaData(); - - @Nullable - protected abstract NBTTagCompound nbt(); - - public NBTTagCompound writeToNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setShort("item", (short) Item.getIdFromItem(item())); - tag.setShort("meta", (short) metaData()); - if (nbt() != null) tag.setTag("tag", nbt()); - return tag; - } - - @Nonnull - public ItemStack getItemStack() { - ItemStack itemStack = new ItemStack(item(), 1, metaData()); - itemStack.setTagCompound(nbt()); - return itemStack; - } - } - - public static int getPlasmaFuelValueInEUPerLiterFromMaterial(Materials material) { - return getPlasmaFuelValueInEUPerLiterFromFluid(material.getPlasma(1)); - } - - public static int getPlasmaFuelValueInEUPerLiterFromFluid(FluidStack aLiquid) { - if (aLiquid == null) return 0; - GT_Recipe tFuel = RecipeMaps.plasmaFuels.getBackend() - .findFuel(aLiquid); - if (tFuel != null) return tFuel.mSpecialValue; - return 0; - } - - public static MovingObjectPosition getPlayerLookingTarget(EntityPlayer viewpoint) { - double reachDistance = viewpoint instanceof EntityPlayerMP mp ? mp.theItemInWorldManager.getBlockReachDistance() - : getClientReachDistance(); - Vec3 posVec = Vec3.createVectorHelper( - viewpoint.posX, - viewpoint.posY + (viewpoint.getEyeHeight() - viewpoint.getDefaultEyeHeight()), - viewpoint.posZ); - Vec3 lookVec = viewpoint.getLook(0); - Vec3 modifiedPosVec = posVec - .addVector(lookVec.xCoord * reachDistance, lookVec.yCoord * reachDistance, lookVec.zCoord * reachDistance); - - return viewpoint.worldObj.rayTraceBlocks(posVec, modifiedPosVec); - } - - public static float getClientReachDistance() { - return Minecraft.getMinecraft().playerController.getBlockReachDistance(); - } -} diff --git a/src/main/java/gregtech/api/util/GT_UtilityClient.java b/src/main/java/gregtech/api/util/GT_UtilityClient.java deleted file mode 100644 index 398c1f6b41..0000000000 --- a/src/main/java/gregtech/api/util/GT_UtilityClient.java +++ /dev/null @@ -1,52 +0,0 @@ -package gregtech.api.util; - -import java.lang.reflect.Field; -import java.util.List; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import com.google.common.collect.Lists; - -import cpw.mods.fml.relauncher.ReflectionHelper; - -public class GT_UtilityClient { - - private static final Field isDrawingField = ReflectionHelper - .findField(Tessellator.class, "isDrawing", "field_78415_z"); - - public static boolean isDrawing(Tessellator tess) { - try { - return isDrawingField.getBoolean(tess); - } catch (IllegalAccessException e) { - e.printStackTrace(); - return false; - } - } - - public static List getTooltip(ItemStack aStack, boolean aGuiStyle) { - try { - List tooltip = aStack.getTooltip( - Minecraft.getMinecraft().thePlayer, - Minecraft.getMinecraft().gameSettings.advancedItemTooltips); - if (aGuiStyle) { - tooltip.set( - 0, - (aStack.getRarity() == null ? EnumRarity.common : aStack.getRarity()).rarityColor + tooltip.get(0)); - for (int i = 1; i < tooltip.size(); i++) { - tooltip.set(i, EnumChatFormatting.GRAY + tooltip.get(i)); - } - } - return tooltip; - } catch (RuntimeException e) { - // Collections.singletonList() can not be added to. we don't want that - if (aGuiStyle) return Lists.newArrayList( - (aStack.getRarity() == null ? EnumRarity.common : aStack.getRarity()).rarityColor - + aStack.getDisplayName()); - return Lists.newArrayList(aStack.getDisplayName()); - } - } -} diff --git a/src/main/java/gregtech/api/util/GT_Waila.java b/src/main/java/gregtech/api/util/GT_Waila.java deleted file mode 100644 index aaa68ba4c7..0000000000 --- a/src/main/java/gregtech/api/util/GT_Waila.java +++ /dev/null @@ -1,23 +0,0 @@ -package gregtech.api.util; - -public abstract class GT_Waila { - - public static String getMachineProgressString(boolean isActive, int maxProgresstime, int progresstime) { - return getMachineProgressString(isActive, (long) maxProgresstime, (long) progresstime); - } - - public static String getMachineProgressString(boolean isActive, long maxProgresstime, long progresstime) { - - if (!isActive) return "Idle"; - - StringBuilder ret = new StringBuilder("In progress: ") - .append(String.format("%,.2f", (double) progresstime / 20)) - .append("s / ") - .append(String.format("%,.2f", (double) maxProgresstime / 20)) - .append("s (") - .append(GT_Utility.formatNumbers((Math.round((double) progresstime / maxProgresstime * 1000) / 10.0))) - .append("%)"); - - return ret.toString(); - } -} diff --git a/src/main/java/gregtech/api/util/HatchElementBuilder.java b/src/main/java/gregtech/api/util/HatchElementBuilder.java new file mode 100644 index 0000000000..8b93861114 --- /dev/null +++ b/src/main/java/gregtech/api/util/HatchElementBuilder.java @@ -0,0 +1,546 @@ +package gregtech.api.util; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.EnumSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; +import java.util.function.BiPredicate; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.function.Supplier; +import java.util.stream.Collectors; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.IStructureElementChain; +import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement; +import com.gtnewhorizon.structurelib.util.ItemStackPredicate; + +import gnu.trove.TIntCollection; +import gnu.trove.list.array.TIntArrayList; +import gnu.trove.set.hash.TIntHashSet; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.common.blocks.ItemMachines; + +public class HatchElementBuilder { + + private interface Builtin { + } + + private IGTHatchAdder mAdder; + private int mCasingIndex = -1; + private int mDot = -1; + private BiPredicate mShouldSkip; + private BiFunction> mHatchItemFilter; + private Supplier mHatchItemType; + private Predicate mReject; + private boolean mCacheHint; + private boolean mNoStop; + private boolean mExclusive; + private EnumSet mDisallowedDirection = EnumSet.noneOf(ForgeDirection.class); + + private HatchElementBuilder() {} + + public static HatchElementBuilder builder() { + return new HatchElementBuilder<>(); + } + + // region composite + + /** + * Set all of adder, hint and hatchItemFilter. Provide a reasonable default for shouldSkip. TODO add doc + */ + @SafeVarargs + public final HatchElementBuilder anyOf(IHatchElement... elements) { + if (elements == null || elements.length == 0) throw new IllegalArgumentException(); + return adder( + Arrays.stream(elements) + .map( + e -> e.adder() + .rebrand()) + .reduce(IGTHatchAdder::orElse) + .get()).hatchClasses( + Arrays.stream(elements) + .map(IHatchElement::mteClasses) + .flatMap(Collection::stream) + .collect(Collectors.toList())) + .cacheHint( + () -> Arrays.stream(elements) + .map(IHatchElement::name) + .sorted() + .collect(Collectors.joining(" or ", "of type ", ""))); + } + + /** + * Set all of adder, hint and hatchItemFilter. Provide a reasonable default for shouldSkip. + *

+ * Will rotate through all elements TODO add doc + */ + @SafeVarargs + public final HatchElementBuilder atLeast(IHatchElement... elements) { + if (elements == null || elements.length == 0) throw new IllegalArgumentException(); + return atLeast( + Arrays.stream(elements) + .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting()))); + } + + /** + * Set all of adder, hint and hatchItemFilter. Provide a reasonable default for shouldSkip. + *

+ * Will rotate through all elements TODO add doc + */ + public final HatchElementBuilder atLeastList(List> elements) { + if (elements == null || elements.isEmpty()) throw new IllegalArgumentException(); + return atLeast( + elements.stream() + .collect(Collectors.groupingBy(Function.identity(), LinkedHashMap::new, Collectors.counting()))); + } + + /** + * Set all of adder, hint and hatchItemFilter. Provide a reasonable default for shouldSkip. TODO add doc + */ + public final HatchElementBuilder atLeast(Map, ? extends Number> elements) { + if (elements == null || elements.isEmpty() || elements.containsKey(null) || elements.containsValue(null)) + throw new IllegalArgumentException(); + List> list = elements.keySet() + .stream() + .map(IHatchElement::mteClasses) + .flatMap(Collection::stream) + .collect(Collectors.toList()); + // map cannot be null or empty, so assert Optional isPresent + return adder( + elements.keySet() + .stream() + .map( + e -> e.adder() + .rebrand()) + .reduce(IGTHatchAdder::orElse) + .orElseThrow(AssertionError::new)) + .hatchItemFilter( + obj -> GTStructureUtility.filterByMTEClass( + elements.entrySet() + .stream() + .filter( + entry -> entry.getKey() + .count(obj) + < entry.getValue() + .longValue()) + .flatMap( + entry -> entry.getKey() + .mteClasses() + .stream()) + .collect(Collectors.toList()))) + .shouldReject( + obj -> elements.entrySet() + .stream() + .allMatch( + e -> e.getKey() + .count(obj) + >= e.getValue() + .longValue())) + .shouldSkip( + (BiPredicate & Builtin) (c, + t) -> t != null && list.stream() + .anyMatch(clazz -> clazz.isInstance(t.getMetaTileEntity()))) + .cacheHint( + () -> elements.keySet() + .stream() + .map(IHatchElement::name) + .sorted() + .collect(Collectors.joining(" or ", "of type ", ""))); + } + // endregion + + // region primitives + + /** + * Mark this hatch element as the only candidate of given structure element. (e.g. muffler hatch on top of EBF) + * Currently, this will make the built IStructureElement to ignore gt_no_hatch directive from player + * + * Do note that {@link #buildAndChain(IStructureElement[])} and its overloads will force the resulting structure + * element + * to be non-exclusive. + */ + public HatchElementBuilder exclusive() { + mExclusive = true; + return this; + } + + public HatchElementBuilder adder(IGTHatchAdder aAdder) { + if (aAdder == null) throw new IllegalArgumentException(); + mAdder = aAdder; + return this; + } + + public HatchElementBuilder casingIndex(int aCasingIndex) { + if (aCasingIndex <= 0) throw new IllegalArgumentException(); + mCasingIndex = aCasingIndex; + return this; + } + + public HatchElementBuilder dot(int aDot) { + if (aDot <= 0) throw new IllegalArgumentException(); + mDot = aDot; + return this; + } + + public HatchElementBuilder shouldSkip(BiPredicate aShouldSkip) { + if (!(aShouldSkip instanceof Builtin) || mShouldSkip != null) { + if (!(mShouldSkip instanceof Builtin) && mShouldSkip != null) throw new IllegalStateException(); + if (aShouldSkip == null) throw new IllegalArgumentException(); + } + mShouldSkip = aShouldSkip; + return this; + } + + public HatchElementBuilder shouldReject(Predicate aShouldReject) { + if (aShouldReject == null) throw new IllegalArgumentException(); + mReject = aShouldReject; + return this; + } + + public HatchElementBuilder hatchItemFilter( + Function> aHatchItemFilter) { + if (aHatchItemFilter == null) throw new IllegalArgumentException(); + mHatchItemFilter = (t, s) -> aHatchItemFilter.apply(t); + return this; + } + + public HatchElementBuilder hatchItemFilterAnd( + Function> aHatchItemFilter) { + if (aHatchItemFilter == null) throw new IllegalArgumentException(); + BiFunction> tOldFilter = mHatchItemFilter; + mHatchItemFilter = (t, s) -> tOldFilter.apply(t, s) + .and(aHatchItemFilter.apply(t)); + return this; + } + + public HatchElementBuilder hatchItemFilter( + BiFunction> aHatchItemFilter) { + if (aHatchItemFilter == null) throw new IllegalArgumentException(); + mHatchItemFilter = aHatchItemFilter; + return this; + } + + public HatchElementBuilder hatchItemFilterAnd( + BiFunction> aHatchItemFilter) { + if (aHatchItemFilter == null) throw new IllegalArgumentException(); + BiFunction> tOldFilter = mHatchItemFilter; + mHatchItemFilter = (t, s) -> tOldFilter.apply(t, s) + .and(aHatchItemFilter.apply(t, s)); + return this; + } + + // region hint + public HatchElementBuilder hint(Supplier aSupplier) { + if (aSupplier == null) throw new IllegalArgumentException(); + mHatchItemType = aSupplier; + mCacheHint = false; + return this; + } + + public HatchElementBuilder cacheHint(Supplier aSupplier) { + if (aSupplier == null) throw new IllegalArgumentException(); + mHatchItemType = aSupplier; + mCacheHint = true; + return this; + } + + public HatchElementBuilder cacheHint() { + if (mHatchItemType == null) throw new IllegalStateException(); + mCacheHint = true; + return this; + } + // endregion + + public HatchElementBuilder continueIfSuccess() { + mNoStop = true; + return this; + } + + public HatchElementBuilder stopIfSuccess() { + mNoStop = false; + return this; + } + + /** + * Help automatic hatch side determination code by ruling out some directions. Note the automatic hatch side + * determination code will choose to use the default facing if the final allowed facing set is empty. + *

+ * This will clear the sides set by previous call to this or {@link #allowOnly(ForgeDirection...)} + *

+ * Usually mandatory for multis with multiple slices, and otherwise not needed if it contains a single slice only. + * + * @param facings disallowed direction in ABC coordinate system + */ + public HatchElementBuilder disallowOnly(ForgeDirection... facings) { + if (facings == null) throw new IllegalArgumentException(); + mDisallowedDirection = EnumSet.copyOf(Arrays.asList(facings)); + return this; + } + + /** + * Help automatic hatch side determination code by allowing only some directions. Note the automatic hatch side + * determination code will choose to use the default facing if the final allowed facing set is empty. + *

+ * This will clear the sides set by previous call to this or {@link #disallowOnly(ForgeDirection...)} + *

+ * Usually mandatory for multis with multiple slices, and otherwise not needed if it contains a single slice only. + * + * @param facings allowed direction in ABC coordinate system + */ + public HatchElementBuilder allowOnly(ForgeDirection... facings) { + if (facings == null) throw new IllegalArgumentException(); + mDisallowedDirection = EnumSet.complementOf(EnumSet.copyOf(Arrays.asList(facings))); + mDisallowedDirection.remove(ForgeDirection.UNKNOWN); + return this; + } + // endregion + + // region intermediate + public HatchElementBuilder hatchClass(Class clazz) { + return hatchItemFilter(c -> is -> clazz.isInstance(ItemMachines.getMetaTileEntity(is))) + .cacheHint(() -> "of class " + clazz.getSimpleName()) + .shouldSkip( + (BiPredicate & Builtin) (c, t) -> clazz + .isInstance(t.getMetaTileEntity())); + } + + @SafeVarargs + public final HatchElementBuilder hatchClasses(Class... classes) { + return hatchClasses(Arrays.asList(classes)); + } + + public final HatchElementBuilder hatchClasses(List> classes) { + List> list = new ArrayList<>(classes); + return hatchItemFilter(obj -> GTStructureUtility.filterByMTEClass(list)).cacheHint( + () -> list.stream() + .map(Class::getSimpleName) + .sorted() + .collect(Collectors.joining(" or ", "of class ", ""))) + .shouldSkip( + (BiPredicate & Builtin) (c, t) -> t != null && list.stream() + .anyMatch(clazz -> clazz.isInstance(t.getMetaTileEntity()))); + } + + public HatchElementBuilder hatchId(int aId) { + return hatchItemFilter( + c -> is -> GTUtility.isStackValid(is) && is.getItem() instanceof ItemMachines && is.getItemDamage() == aId) + .cacheHint(() -> "of id " + aId) + .shouldSkip( + (BiPredicate & Builtin) (c, t) -> t != null + && t.getMetaTileID() == aId); + } + + public HatchElementBuilder hatchIds(int... aIds) { + if (aIds == null || aIds.length == 0) throw new IllegalArgumentException(); + if (aIds.length == 1) return hatchId(aIds[0]); + TIntCollection coll = aIds.length < 16 ? new TIntArrayList(aIds) : new TIntHashSet(aIds); + return hatchItemFilter( + c -> is -> GTUtility.isStackValid(is) && is.getItem() instanceof ItemMachines + && coll.contains(is.getItemDamage())).cacheHint( + () -> Arrays.stream(coll.toArray()) + .sorted() + .mapToObj(String::valueOf) + .collect(Collectors.joining(" or ", "of id ", ""))) + .shouldSkip( + (BiPredicate & Builtin) (c, t) -> t != null + && coll.contains(t.getMetaTileID())); + } + + // endregion + + @SuppressWarnings("unchecked") + @SafeVarargs + public final IStructureElementChain buildAndChain(IStructureElement... elements) { + // just in case + mExclusive = false; + List> l = new ArrayList<>(); + l.add(build()); + l.addAll(Arrays.asList(elements)); + IStructureElement[] array = l.toArray(new IStructureElement[0]); + return () -> array; + } + + public final IStructureElementChain buildAndChain(Block block, int meta) { + return buildAndChain(ofBlock(block, meta)); + } + + public IStructureElement build() { + if (mAdder == null || mCasingIndex == -1 || mDot == -1) { + throw new IllegalArgumentException(); + } + if (mHatchItemFilter == null) { + // no item filter -> no placement + return new IStructureElementNoPlacement<>() { + + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity + && mAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) mCasingIndex); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), mDot - 1); + return true; + } + }; + } + return new IStructureElement<>() { + + private String mHint = mHatchItemType == null ? "unspecified GT hatch" : mHatchItemType.get(); + + @Override + public boolean check(T t, World world, int x, int y, int z) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + return tileEntity instanceof IGregTechTileEntity + && mAdder.apply(t, (IGregTechTileEntity) tileEntity, (short) mCasingIndex); + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), mDot - 1); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int i, int i1, int i2, ItemStack itemStack) { + // TODO + return false; + } + + private String getHint() { + if (mHint != null) return mHint; + String tHint = mHatchItemType.get(); + if (tHint == null) return "?"; + // TODO move this to some .lang instead of half ass it into the crappy gt lang file + tHint = GTLanguageManager.addStringLocalization("Hatch_Type_" + tHint.replace(' ', '_'), tHint); + if (mCacheHint) { + mHint = tHint; + if (mHint != null) + // yeet the getter, since its product is retrieved and cached + mHatchItemType = null; + } + return tHint; + } + + @Override + public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + return BlocksToPlace.create(mHatchItemFilter.apply(t, trigger)); + } + + @Deprecated + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + IItemSource s, EntityPlayerMP actor, Consumer chatter) { + return survivalPlaceBlock( + t, + world, + x, + y, + z, + trigger, + AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + if (mShouldSkip != null) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + if (tileEntity instanceof IGregTechTileEntity + && mShouldSkip.test(t, (IGregTechTileEntity) tileEntity)) return PlaceResult.SKIP; + } + if (!StructureLibAPI.isBlockTriviallyReplaceable(world, x, y, z, env.getActor())) + return PlaceResult.REJECT; + if (mReject != null && mReject.test(t)) return PlaceResult.REJECT; + if (ChannelDataAccessor.hasSubChannel(trigger, "gt_no_hatch") && !mExclusive) { + String type = getHint(); + env.getChatter() + .accept(new ChatComponentTranslation("GT5U.autoplace.error.no_hatch", type)); + return PlaceResult.REJECT; + } + ItemStack taken = env.getSource() + .takeOne(mHatchItemFilter.apply(t, trigger), true); + if (GTUtility.isStackInvalid(taken)) { + String type = getHint(); + env.getChatter() + .accept(new ChatComponentTranslation("GT5U.autoplace.error.no_hatch", type)); + return PlaceResult.REJECT; + } + if (com.gtnewhorizon.structurelib.structure.StructureUtility.survivalPlaceBlock( + taken, + ItemStackPredicate.NBTMode.IGNORE, + null, + true, + world, + x, + y, + z, + env.getSource(), + env.getActor()) != PlaceResult.ACCEPT) { + return PlaceResult.REJECT; + } + // try to infer facing + EnumSet allowed = EnumSet.noneOf(ForgeDirection.class); + // first find which face of block is not contained in structure + if (env.getAPILevel() == AutoPlaceEnvironment.APILevel.Legacy) { + // a legacy decorator isn't passing down necessary information + // in that case, we just assume all facing is allowed + allowed.addAll(Arrays.asList(ForgeDirection.VALID_DIRECTIONS)); + } else { + for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { + // as noted on getWorldDirection Y axis should be flipped before use + if (env.isContainedInPiece(direction.offsetX, -direction.offsetY, direction.offsetZ)) continue; + // explicitly rejected, probably obstructed by another slice + if (mDisallowedDirection.contains(direction)) continue; + ForgeDirection rotated = env.getFacing() + .getWorldDirection( + (direction.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) != 0 + ? direction.getOpposite() + : direction); + allowed.add(rotated); + } + } + if (!allowed.isEmpty()) { + TileEntity tileEntity = world.getTileEntity(x, y, z); + if (tileEntity instanceof IGregTechTileEntity) { + ForgeDirection result = null; + // find the first facing available, but prefer a facing that isn't up/down + for (ForgeDirection facing : allowed) { + result = facing; + if ((facing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0) break; // Horizontal + } + assert result != null; + ((IGregTechTileEntity) tileEntity).setFrontFacing(result); + } + } + return mNoStop ? PlaceResult.ACCEPT : PlaceResult.ACCEPT_STOP; + } + }; + } +} diff --git a/src/main/java/gregtech/api/util/IGTHatchAdder.java b/src/main/java/gregtech/api/util/IGTHatchAdder.java new file mode 100644 index 0000000000..35a30ad7de --- /dev/null +++ b/src/main/java/gregtech/api/util/IGTHatchAdder.java @@ -0,0 +1,28 @@ +package gregtech.api.util; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public interface IGTHatchAdder { + + /** + * Callback to add hatch, needs to check if hatch is valid (and add it) + * + * @param iGregTechTileEntity hatch + * @param aShort requested texture index, or null if not... + * @return managed to add hatch (structure still valid) + */ + boolean apply(T t, IGregTechTileEntity iGregTechTileEntity, Short aShort); + + /** + * hack to work around java generic issues. + */ + @SuppressWarnings("unchecked") + default IGTHatchAdder rebrand() { + return (IGTHatchAdder) this; + } + + default IGTHatchAdder orElse(IGTHatchAdder fallback) { + return (t, iGregTechTileEntity, aShort) -> IGTHatchAdder.this.apply(t, iGregTechTileEntity, aShort) + || fallback.apply(t, iGregTechTileEntity, aShort); + } +} diff --git a/src/main/java/gregtech/api/util/IGT_HatchAdder.java b/src/main/java/gregtech/api/util/IGT_HatchAdder.java deleted file mode 100644 index 21796f172e..0000000000 --- a/src/main/java/gregtech/api/util/IGT_HatchAdder.java +++ /dev/null @@ -1,28 +0,0 @@ -package gregtech.api.util; - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public interface IGT_HatchAdder { - - /** - * Callback to add hatch, needs to check if hatch is valid (and add it) - * - * @param iGregTechTileEntity hatch - * @param aShort requested texture index, or null if not... - * @return managed to add hatch (structure still valid) - */ - boolean apply(T t, IGregTechTileEntity iGregTechTileEntity, Short aShort); - - /** - * hack to work around java generic issues. - */ - @SuppressWarnings("unchecked") - default IGT_HatchAdder rebrand() { - return (IGT_HatchAdder) this; - } - - default IGT_HatchAdder orElse(IGT_HatchAdder fallback) { - return (t, iGregTechTileEntity, aShort) -> IGT_HatchAdder.this.apply(t, iGregTechTileEntity, aShort) - || fallback.apply(t, iGregTechTileEntity, aShort); - } -} diff --git a/src/main/java/gregtech/api/util/JubilanceMegaApiary.java b/src/main/java/gregtech/api/util/JubilanceMegaApiary.java new file mode 100644 index 0000000000..e24cad6778 --- /dev/null +++ b/src/main/java/gregtech/api/util/JubilanceMegaApiary.java @@ -0,0 +1,23 @@ +package gregtech.api.util; + +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IJubilanceProvider; + +public class JubilanceMegaApiary implements IJubilanceProvider { + + public static final JubilanceMegaApiary instance = new JubilanceMegaApiary(); + + protected JubilanceMegaApiary() {} + + @Override + public boolean isJubilant(IAlleleBeeSpecies species, IBeeGenome genome, IBeeHousing housing) { + return false; + } + + @Override + public String getDescription() { + return "Will only be produced in mega Apiary"; + } +} diff --git a/src/main/java/gregtech/api/util/MultiblockTooltipBuilder.java b/src/main/java/gregtech/api/util/MultiblockTooltipBuilder.java new file mode 100644 index 0000000000..e51f3a0524 --- /dev/null +++ b/src/main/java/gregtech/api/util/MultiblockTooltipBuilder.java @@ -0,0 +1,735 @@ +package gregtech.api.util; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; + +import com.google.common.collect.Multimaps; +import com.google.common.collect.SetMultimap; +import com.gtnewhorizon.structurelib.StructureLibAPI; + +/** + * This makes it easier to build multi tooltips, with a standardized format.
+ * Info section order should be:
+ * addMachineType
+ * addInfo, for what it does, special notes, etc.
+ * addSeparator, if you need it
+ * addPollutionAmount
+ *
+ * Structure order should be:
+ * beginStructureBlock
+ * addController
+ * addCasingInfo
+ * addOtherStructurePart, for secondary structure block info (pipes, coils, etc)
+ * addEnergyHatch/addDynamoHatch
+ * addMaintenanceHatch
+ * addMufflerHatch
+ * addInputBus/addInputHatch/addOutputBus/addOutputHatch, in that order
+ * Use addStructureInfo for any comments on nonstandard structure info wherever needed
+ * toolTipFinisher goes at the very end
+ *
+ * Originally created by kekzdealer + */ +public class MultiblockTooltipBuilder { + + private static final String TAB = " "; + private static final String COLON = ": "; + private static final String SEPARATOR = ", "; + + private final List iLines; + private final List sLines; + private final List hLines; + private final SetMultimap hBlocks; + + private String[] iArray; + private String[] sArray; + private String[] hArray; + + // Localized tooltips + private static final String TT_machineType = StatCollector.translateToLocal("GT5U.MBTT.MachineType"); + private static final String TT_dimensions = StatCollector.translateToLocal("GT5U.MBTT.Dimensions"); + private static final String TT_hollow = StatCollector.translateToLocal("GT5U.MBTT.Hollow"); + private static final String TT_structure = StatCollector.translateToLocal("GT5U.MBTT.Structure"); + private static final String TT_controller = StatCollector.translateToLocal("GT5U.MBTT.Controller"); + private static final String TT_minimum = StatCollector.translateToLocal("GT5U.MBTT.Minimum"); + private static final String TT_tiered = StatCollector.translateToLocal("GT5U.MBTT.Tiered"); + private static final String TT_maintenancehatch = StatCollector.translateToLocal("GT5U.MBTT.MaintenanceHatch"); + private static final String TT_energyhatch = StatCollector.translateToLocal("GT5U.MBTT.EnergyHatch"); + private static final String TT_dynamohatch = StatCollector.translateToLocal("GT5U.MBTT.DynamoHatch"); + private static final String TT_mufflerhatch = StatCollector.translateToLocal("GT5U.MBTT.MufflerHatch"); + private static final String TT_inputbus = StatCollector.translateToLocal("GT5U.MBTT.InputBus"); + private static final String TT_inputhatch = StatCollector.translateToLocal("GT5U.MBTT.InputHatch"); + private static final String TT_outputbus = StatCollector.translateToLocal("GT5U.MBTT.OutputBus"); + private static final String TT_outputhatch = StatCollector.translateToLocal("GT5U.MBTT.OutputHatch"); + private static final String TT_causes = StatCollector.translateToLocal("GT5U.MBTT.Causes"); + private static final String TT_pps = StatCollector.translateToLocal("GT5U.MBTT.PPS"); + private static final String TT_hold = StatCollector.translateToLocal("GT5U.MBTT.Hold"); + private static final String TT_todisplay = StatCollector.translateToLocal("GT5U.MBTT.Display"); + private static final String TT_structurehint = StatCollector.translateToLocal("GT5U.MBTT.StructureHint"); + private static final String TT_mod = StatCollector.translateToLocal("GT5U.MBTT.Mod"); + private static final String TT_air = StatCollector.translateToLocal("GT5U.MBTT.Air"); + private static final String[] TT_dots = IntStream.range(0, 16) + .mapToObj(i -> StatCollector.translateToLocal("structurelib.blockhint." + i + ".name")) + .toArray(String[]::new); + + public MultiblockTooltipBuilder() { + iLines = new LinkedList<>(); + sLines = new LinkedList<>(); + hLines = new LinkedList<>(); + hBlocks = Multimaps.newSetMultimap(new HashMap<>(), HashSet::new); + hBlocks.put(StructureLibAPI.HINT_BLOCK_META_AIR, TT_air); + } + + /** + * Add a line telling you what the machine type is. Usually, this will be the name of a SB version.
+ * Machine Type: machine + * + * @param machine Name of the machine type + * + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addMachineType(String machine) { + iLines.add(TT_machineType + COLON + EnumChatFormatting.YELLOW + machine + EnumChatFormatting.RESET); + return this; + } + + /** + * Add a basic line of information about this structure + * + * @param info The line to be added. + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addInfo(String info) { + iLines.add(info); + return this; + } + + /** + * Add a number of basic lines of information about this structure + * + * @param infoStrings The lines to be added. + * @return Instance this method was called on. + */ + + public MultiblockTooltipBuilder addInfoAll(String... infoStrings) { + for (String str : infoStrings) { + iLines.add(str); + } + return this; + } + + /** + * Add a separator line like this:
+ * ----------------------------------------- + * + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addSeparator() { + iLines.add("-----------------------------------------"); + return this; + } + + /** + * Add a line telling how much this machine pollutes. + * + * @param pollution Amount of pollution per second when active + * + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addPollutionAmount(int pollution) { + iLines.add( + TT_causes + COLON + EnumChatFormatting.DARK_PURPLE + pollution + " " + EnumChatFormatting.GRAY + TT_pps); + return this; + } + + /** + * Begin adding structural information by adding a line about the structure's dimensions and then inserting a + * "Structure:" line. + * + * @param w Structure width. + * @param h Structure height. + * @param l Structure depth/length. + * @param hollow T/F, adds a (hollow) comment if true + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder beginStructureBlock(int w, int h, int l, boolean hollow) { + sLines.add( + EnumChatFormatting.WHITE + TT_dimensions + + COLON + + EnumChatFormatting.GOLD + + w + + EnumChatFormatting.GRAY + + "x" + + EnumChatFormatting.GOLD + + h + + EnumChatFormatting.GRAY + + "x" + + EnumChatFormatting.GOLD + + l + + EnumChatFormatting.GRAY + + " (" + + EnumChatFormatting.GOLD + + "W" + + EnumChatFormatting.GRAY + + "x" + + EnumChatFormatting.GOLD + + "H" + + EnumChatFormatting.GRAY + + "x" + + EnumChatFormatting.GOLD + + "L" + + EnumChatFormatting.GRAY + + ") " + + EnumChatFormatting.RED + + (hollow ? EnumChatFormatting.RED + TT_hollow : "")); + sLines.add(EnumChatFormatting.WHITE + TT_structure + COLON); + return this; + } + + /** + * Begin adding structural information by adding a line about the structure's dimensions
+ * and then inserting a "Structure:" line. Variable version displays min and max + * + * @param wmin Structure min width. + * @param wmax Structure max width. + * @param hmin Structure min height. + * @param hmax Structure max height. + * @param lmin Structure min depth/length. + * @param lmax Structure max depth/length. + * @param hollow T/F, adds a (hollow) comment if true + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder beginVariableStructureBlock(int wmin, int wmax, int hmin, int hmax, int lmin, + int lmax, boolean hollow) { + sLines.add( + EnumChatFormatting.WHITE + TT_dimensions + + COLON + + EnumChatFormatting.GOLD + + wmin + + (wmin != wmax ? "-" + wmax : "") + + EnumChatFormatting.GRAY + + "x" + + EnumChatFormatting.GOLD + + hmin + + (hmin != hmax ? "-" + hmax : "") + + EnumChatFormatting.GRAY + + "x" + + EnumChatFormatting.GOLD + + lmin + + (lmin != lmax ? "-" + lmax : "") + + EnumChatFormatting.GRAY + + " (" + + EnumChatFormatting.GOLD + + "W" + + EnumChatFormatting.GRAY + + "x" + + EnumChatFormatting.GOLD + + "H" + + EnumChatFormatting.GRAY + + "x" + + EnumChatFormatting.GOLD + + "L" + + EnumChatFormatting.GRAY + + ") " + + (hollow ? EnumChatFormatting.RED + TT_hollow : "")); + sLines.add(EnumChatFormatting.WHITE + TT_structure + COLON); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Controller: info + * + * @param info Positional information. + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addController(String info) { + sLines.add(TAB + EnumChatFormatting.WHITE + TT_controller + COLON + EnumChatFormatting.GRAY + info); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)minCountx casingName (minimum) (tiered) + * + * @param casingName Name of the Casing. + * @param minCount Minimum needed for valid structure check. + * @return Instance this method was called on. + * + * @deprecated Replaced by {@link #addCasingInfoMin(String, int, boolean)} + * + */ + @Deprecated + public MultiblockTooltipBuilder addCasingInfo(String casingName, int minCount) { + return addCasingInfoMin(casingName, minCount, false); + } + + /** + * Add a line of information about the structure:
+ * (indent)countx casingName (tiered) + * + * @param casingName Name of the Casing. + * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addCasingInfoExactly(String casingName, int count, boolean isTiered) { + return addCasingInfoExactlyColored( + casingName, + EnumChatFormatting.GRAY, + count, + EnumChatFormatting.GOLD, + isTiered); + } + + /** + * Add a line of information about the structure:
+ * (indent)countx casingName (tiered) + * + * @param casingName Name of the Casing. + * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) + * @param countColor Color of the casing count text + * @param textColor Color of the casing name text + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addCasingInfoExactlyColored(String casingName, EnumChatFormatting textColor, + int count, EnumChatFormatting countColor, boolean isTiered) { + sLines.add( + countColor + TAB + + count + + "x " + + EnumChatFormatting.RESET + + textColor + + casingName + + (isTiered ? " " + TT_tiered : "")); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)minCountx casingName (minimum) (tiered) + * + * @param casingName Name of the Casing. + * @param minCount Minimum needed for valid structure check. + * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addCasingInfoMin(String casingName, int minCount, boolean isTiered) { + return addCasingInfoMinColored( + casingName, + EnumChatFormatting.GRAY, + minCount, + EnumChatFormatting.GOLD, + isTiered); + } + + /** + * Add a line of information about the structure:
+ * (indent)minCountx casingName (minimum) (tiered) + * + * @param casingName Name of the Casing. + * @param minCount Minimum needed for valid structure check. + * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) + * @param countColor Color of the casing count text + * @param textColor Color of the casing name text + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addCasingInfoMinColored(String casingName, EnumChatFormatting textColor, + int minCount, EnumChatFormatting countColor, boolean isTiered) { + sLines.add( + countColor + TAB + + minCount + + "x " + + EnumChatFormatting.RESET + + textColor + + casingName + + " " + + TT_minimum + + (isTiered ? " " + TT_tiered : "")); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)minCountx - maxCountx casingName (minimum) (tiered) + * + * @param casingName Name of the Casing. + * @param minCount Minimum needed for valid structure check. + * @param maxCount Maximum needed for valid structure check. + * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addCasingInfoRange(String casingName, int minCount, int maxCount, + boolean isTiered) { + return addCasingInfoRangeColored( + casingName, + EnumChatFormatting.GRAY, + minCount, + maxCount, + EnumChatFormatting.GOLD, + isTiered); + } + + /** + * Add a line of information about the structure:
+ * (indent)minCountx - maxCountx casingName (minimum) (tiered) + * + * @param casingName Name of the Casing. + * @param minCount Minimum needed for valid structure check. + * @param maxCount Maximum needed for valid structure check. + * @param isTiered Flag if this casing accepts multiple tiers (e.g. coils) + * @param countColor Color of the casing count text + * @param textColor Color of the casing name text + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addCasingInfoRangeColored(String casingName, EnumChatFormatting textColor, + int minCount, int maxCount, EnumChatFormatting countColor, boolean isTiered) { + sLines.add( + countColor + TAB + + minCount + + "x" + + EnumChatFormatting.GRAY + + " - " + + countColor + + maxCount + + "x " + + EnumChatFormatting.RESET + + textColor + + casingName + + (isTiered ? " " + TT_tiered : "")); + return this; + } + + /** + * Use this method to add a structural part that isn't covered by the other methods.
+ * (indent)name: info + * + * @param name Name of the hatch or other component. + * @param info Positional information. + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addOtherStructurePart(String name, String info) { + sLines.add(EnumChatFormatting.WHITE + TAB + name + COLON + EnumChatFormatting.GRAY + info); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Maintenance Hatch: info + * + * @param info Positional information. + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addMaintenanceHatch(String info) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_maintenancehatch + COLON + EnumChatFormatting.GRAY + info); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Muffler Hatch: info + * + * @param info Location where the hatch goes + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addMufflerHatch(String info) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_mufflerhatch + COLON + EnumChatFormatting.GRAY + info); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Energy Hatch: info + * + * @param info Positional information. + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addEnergyHatch(String info) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_energyhatch + COLON + EnumChatFormatting.GRAY + info); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Dynamo Hatch: info + * + * @param info Positional information. + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addDynamoHatch(String info) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_dynamohatch + COLON + EnumChatFormatting.GRAY + info); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Input Bus: info + * + * @param info Location where the bus goes + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addInputBus(String info) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_inputbus + COLON + EnumChatFormatting.GRAY + info); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Input Hatch: info + * + * @param info Location where the hatch goes + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addInputHatch(String info) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_inputhatch + COLON + EnumChatFormatting.GRAY + info); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Output Bus: info + * + * @param info Location where the bus goes + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addOutputBus(String info) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_outputbus + COLON + EnumChatFormatting.GRAY + info); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Output Hatch: info + * + * @param info Location where the bus goes + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addOutputHatch(String info) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_outputhatch + COLON + EnumChatFormatting.GRAY + info); + return this; + } + + /** + * Use this method to add a structural part that isn't covered by the other methods.
+ * (indent)name: info + * + * @param name Name of the hatch or other component. + * @param info Positional information. + * @param dots The valid locations for this part when asked to display hints + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addOtherStructurePart(String name, String info, int... dots) { + sLines.add(EnumChatFormatting.WHITE + TAB + name + COLON + EnumChatFormatting.GRAY + info); + for (int dot : dots) hBlocks.put(dot, name); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Maintenance Hatch: info + * + * @param info Positional information. + * @param dots The valid locations for this part when asked to display hints + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addMaintenanceHatch(String info, int... dots) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_maintenancehatch + COLON + EnumChatFormatting.GRAY + info); + for (int dot : dots) hBlocks.put(dot, TT_maintenancehatch); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Muffler Hatch: info + * + * @param info Location where the hatch goes + * @param dots The valid locations for this part when asked to display hints + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addMufflerHatch(String info, int... dots) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_mufflerhatch + COLON + EnumChatFormatting.GRAY + info); + for (int dot : dots) hBlocks.put(dot, TT_mufflerhatch); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Energy Hatch: info + * + * @param info Positional information. + * @param dots The valid locations for this part when asked to display hints + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addEnergyHatch(String info, int... dots) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_energyhatch + COLON + EnumChatFormatting.GRAY + info); + for (int dot : dots) hBlocks.put(dot, TT_energyhatch); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Dynamo Hatch: info + * + * @param info Positional information. + * @param dots The valid locations for this part when asked to display hints + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addDynamoHatch(String info, int... dots) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_dynamohatch + COLON + EnumChatFormatting.GRAY + info); + for (int dot : dots) hBlocks.put(dot, TT_dynamohatch); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Input Bus: info + * + * @param info Location where the bus goes + * @param dots The valid locations for this part when asked to display hints + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addInputBus(String info, int... dots) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_inputbus + COLON + EnumChatFormatting.GRAY + info); + for (int dot : dots) hBlocks.put(dot, TT_inputbus); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Input Hatch: info + * + * @param info Location where the hatch goes + * @param dots The valid locations for this part when asked to display hints + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addInputHatch(String info, int... dots) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_inputhatch + COLON + EnumChatFormatting.GRAY + info); + for (int dot : dots) hBlocks.put(dot, TT_inputhatch); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Output Bus: info + * + * @param info Location where the bus goes + * @param dots The valid locations for this part when asked to display hints + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addOutputBus(String info, int... dots) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_outputbus + COLON + EnumChatFormatting.GRAY + info); + for (int dot : dots) hBlocks.put(dot, TT_outputbus); + return this; + } + + /** + * Add a line of information about the structure:
+ * (indent)Output Hatch: info + * + * @param info Location where the bus goes + * @param dots The valid locations for this part when asked to display hints + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addOutputHatch(String info, int... dots) { + sLines.add(EnumChatFormatting.WHITE + TAB + TT_outputhatch + COLON + EnumChatFormatting.GRAY + info); + for (int dot : dots) hBlocks.put(dot, TT_outputhatch); + return this; + } + + /** + * Use this method to add non-standard structural info.
+ * (indent)info + * + * @param info The line to be added. + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addStructureInfo(String info) { + sLines.add(TAB + info); + return this; + } + + /** + * Use this method to add non-standard structural info.
+ * (indent)info + * + * @param channel the name of subchannel + * @param purpose the purpose of subchannel + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addSubChannelUsage(String channel, String purpose) { + sLines.add(TAB + StatCollector.translateToLocalFormatted("GT5U.MBTT.subchannel", channel, purpose)); + return this; + } + + /** + * Use this method to add non-standard structural hint. This info will appear before the standard structural hint. + * + * @param info The line to be added. This should be an entry into minecraft's localization system. + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addStructureHint(String info) { + hLines.add(StatCollector.translateToLocal(info)); + return this; + } + + /** + * Use this method to add an entry to standard structural hint without creating a corresponding line in structure + * information + * + * @param name The name of block This should be an entry into minecraft's localization system. + * @param dots Possible locations of this block + * @return Instance this method was called on. + */ + public MultiblockTooltipBuilder addStructureHint(String name, int... dots) { + for (int dot : dots) hBlocks.put(dot, StatCollector.translateToLocal(name)); + return this; + } + + /** + * Call at the very end.
+ * Adds a final line with the mod name and information on how to display the structure guidelines.
+ * Ends the building process. + * + * @param mod Name of the mod that adds this multiblock machine + */ + public MultiblockTooltipBuilder toolTipFinisher(String mod) { + iLines.add( + TT_hold + " " + + EnumChatFormatting.BOLD + + "[LSHIFT]" + + EnumChatFormatting.RESET + + EnumChatFormatting.GRAY + + " " + + TT_todisplay); + iLines.add(TT_mod + COLON + EnumChatFormatting.GREEN + mod + EnumChatFormatting.GRAY); + hLines.add(TT_structurehint); + iArray = iLines.toArray(new String[0]); + sArray = sLines.toArray(new String[0]); + // e.getKey() - 1 because 1 dot is meta 0. + hArray = Stream.concat( + hLines.stream(), + hBlocks.asMap() + .entrySet() + .stream() + .map(e -> TT_dots[e.getKey() - 1] + COLON + String.join(SEPARATOR, e.getValue()))) + .toArray(String[]::new); + return this; + } + + public String[] getInformation() { + return iArray; + } + + public String[] getStructureInformation() { + return sArray; + } + + public String[] getStructureHint() { + return hArray; + } +} diff --git a/src/main/java/gregtech/api/util/OutputHatchWrapper.java b/src/main/java/gregtech/api/util/OutputHatchWrapper.java index b2e74d24cf..55f467198a 100644 --- a/src/main/java/gregtech/api/util/OutputHatchWrapper.java +++ b/src/main/java/gregtech/api/util/OutputHatchWrapper.java @@ -8,17 +8,17 @@ import net.minecraftforge.fluids.FluidTankInfo; import org.jetbrains.annotations.NotNull; import gregtech.api.interfaces.fluid.IFluidStore; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; /** * Wrapper for output hatch to allow multiblocks to apply specific filter. */ public class OutputHatchWrapper implements IFluidStore { - private final GT_MetaTileEntity_Hatch_Output outputHatch; + private final MTEHatchOutput outputHatch; private final Predicate filter; - public OutputHatchWrapper(GT_MetaTileEntity_Hatch_Output outputHatch, Predicate filter) { + public OutputHatchWrapper(MTEHatchOutput outputHatch, Predicate filter) { this.outputHatch = outputHatch; this.filter = filter; } diff --git a/src/main/java/gregtech/api/util/OverclockCalculator.java b/src/main/java/gregtech/api/util/OverclockCalculator.java new file mode 100644 index 0000000000..0b27942355 --- /dev/null +++ b/src/main/java/gregtech/api/util/OverclockCalculator.java @@ -0,0 +1,621 @@ +package gregtech.api.util; + +import java.util.function.Function; +import java.util.function.Supplier; + +import javax.annotation.Nonnull; + +public class OverclockCalculator { + + // region variables + // region basic properties + /** + * EUt the recipe originally runs at + */ + private long recipeEUt = 0; + /** + * Voltage of the machine + */ + private long machineVoltage = 0; + /** + * Amperage of the machine + */ + private long machineAmperage = 1; + /** + * Duration of the recipe + */ + private int duration = 0; + /** + * A supplier used for machines which have a custom way of calculating base duration, like Neutron Activator + */ + private Supplier durationUnderOneTickSupplier; + /** + * The parallel the machine has when trying to overclock + */ + private int parallel = 1; + // endregion + // region extra factors + /** + * Discount for EUt at the beginning of calculating overclocks, like GT++ machines + */ + private double eutDiscount = 1; + /** + * Speeding/Slowing up/down the duration of a recipe at the beginning of calculating overclocks, like GT++ machines + */ + private double speedBoost = 1; + // endregion + // region overclock parameters + /** + * How much the energy would be multiplied by per overclock available + */ + private double eutIncreasePerOC = 4; + /** + * A supplier used for machines which have a custom way of calculating energy increase multipliers for every + * overclock, like Advanced Assembling Line + */ + private Function eutIncreasePerOCSupplier = getDefaultEutIncreasePerOCSupplier(); + /** + * How much the duration would be divided by per overclock made that isn't an overclock from HEAT + */ + private double durationDecreasePerOC = 2; + /** + * A supplier used for machines which have a custom way of calculating duration decrease multipliers for every + * overclock + */ + private Function durationDecreasePerOCSupplier = getDefaultDurationDecreasePerOCSupplier(); + /** + * Whether at least one of {@link #eutIncreasePerOCSupplier} and {@link #durationDecreasePerOCSupplier} has been set + */ + private boolean hasAtLeastOneSupplierBeenSet; + /** + * Whether to give EUt Discount when the duration goes below one tick + */ + private boolean oneTickDiscount; + /** + * Whether the multi should use amperage to overclock normally. + */ + private boolean amperageOC; + /** + * If the OC calculator should only do a given amount of overclocks. Mainly used in fusion reactors + */ + private boolean limitOverclocks; + /** + * Maximum amount of overclocks to perform, when limitOverclocks = true + */ + private int maxOverclocks; + /** + * How many overclocks have been performed + */ + private int overclockCount; + /** + * Should we actually try to calculate overclocking + */ + private boolean noOverclock; + /** + * The parallel the machine actually used. + */ + private int currentParallel; + // endregion + // region heat overclock + /** + * The min heat required for the recipe + */ + private int recipeHeat = 0; + /** + * The heat the machine has when starting the recipe + */ + private int machineHeat = 0; + /** + * How much the duration should be divided by for each 1800K above recipe heat + */ + private double durationDecreasePerHeatOC = 4; + /** + * Whether to enable overclocking with heat like the EBF every 1800 heat difference + */ + private boolean heatOC; + /** + * Whether to enable heat discounts every 900 heat difference + */ + private boolean heatDiscount; + /** + * The value used for discount final eut per 900 heat + */ + private double heatDiscountExponent = 0.95; + // endregion + // region result + /** + * variable to check whether the overclocks have been calculated + */ + private boolean calculated; + /** + * The calculated duration result. + */ + private int calculatedDuration; + /** + * The calculated energy consumption result. + */ + private long calculatedConsumption; + // endregion + // region constants + private static final int HEAT_DISCOUNT_THRESHOLD = 900; + private static final int HEAT_PERFECT_OVERCLOCK_THRESHOLD = 1800; + private static final double LOG2 = Math.log(2); + // endregion + // endregion + + /** + * Creates calculator that doesn't do OC at all. Will use recipe duration. + */ + public static OverclockCalculator ofNoOverclock(@Nonnull GTRecipe recipe) { + return ofNoOverclock(recipe.mEUt, recipe.mDuration); + } + + /** + * Creates calculator that doesn't do OC at all, with set duration. + */ + public static OverclockCalculator ofNoOverclock(long eut, int duration) { + return new OverclockCalculator().setRecipeEUt(eut) + .setDuration(duration) + .setEUt(eut) + .setNoOverclock(true); + } + + /** + * An Overclock helper for calculating overclocks in many different situations + */ + public OverclockCalculator() {} + + // region setters + /** + * @param recipeEUt Sets the Recipe's starting voltage + */ + @Nonnull + public OverclockCalculator setRecipeEUt(long recipeEUt) { + this.recipeEUt = recipeEUt; + return this; + } + + /** + * @param machineVoltage Sets the EUt that the machine can use. This is the voltage of the machine + */ + @Nonnull + public OverclockCalculator setEUt(long machineVoltage) { + this.machineVoltage = machineVoltage; + return this; + } + + /** + * @param duration Sets the duration of the recipe + */ + @Nonnull + public OverclockCalculator setDuration(int duration) { + this.duration = duration; + return this; + } + + /** + * @param machineAmperage Sets the Amperage that the machine can support + */ + @Nonnull + public OverclockCalculator setAmperage(long machineAmperage) { + this.machineAmperage = machineAmperage; + return this; + } + + /** + * Enables Perfect OC in calculation + */ + @Nonnull + public OverclockCalculator enablePerfectOC() { + this.durationDecreasePerOC = 4; + return this; + } + + /** + * Set if we should be calculating overclocking using EBF's perfectOC + */ + @Nonnull + public OverclockCalculator setHeatOC(boolean heatOC) { + this.heatOC = heatOC; + return this; + } + + /** + * Sets if we should add a heat discount at the end of calculating an overclock, just like the EBF + */ + @Nonnull + public OverclockCalculator setHeatDiscount(boolean heatDiscount) { + this.heatDiscount = heatDiscount; + return this; + } + + /** + * Sets the starting heat of the recipe + */ + @Nonnull + public OverclockCalculator setRecipeHeat(int recipeHeat) { + this.recipeHeat = recipeHeat; + return this; + } + + /** + * Sets the heat of the coils on the machine + */ + @Nonnull + public OverclockCalculator setMachineHeat(int machineHeat) { + this.machineHeat = machineHeat; + return this; + } + + /** + * Sets an EUtDiscount. 0.9 is 10% less energy. 1.1 is 10% more energy + */ + @Nonnull + public OverclockCalculator setEUtDiscount(float aEUtDiscount) { + this.eutDiscount = aEUtDiscount; + return this; + } + + /** + * Sets a Speed Boost for the multiblock. 0.9 is 10% faster. 1.1 is 10% slower + */ + @Nonnull + public OverclockCalculator setSpeedBoost(float aSpeedBoost) { + this.speedBoost = aSpeedBoost; + return this; + } + + /** + * Sets the parallel that the multiblock uses + */ + @Nonnull + public OverclockCalculator setParallel(int aParallel) { + this.parallel = aParallel; + return this; + } + + /** + * Sets the heat discount during OC calculation if HeatOC is used. Default: 0.95 = 5% discount Used like a EU/t + * Discount + */ + @Nonnull + public OverclockCalculator setHeatDiscountMultiplier(float heatDiscountExponent) { + this.heatDiscountExponent = heatDiscountExponent; + return this; + } + + /** + * Sets the Overclock that should be calculated when a heat OC is applied. + */ + @Nonnull + public OverclockCalculator setHeatPerfectOC(double heatPerfectOC) { + if (heatPerfectOC <= 0) throw new IllegalArgumentException("Heat OC can't be a negative number or zero"); + this.durationDecreasePerHeatOC = heatPerfectOC; + return this; + } + + /** + * Sets the amount that the eut would be multiplied by per overclock. Do not set as 1(ONE) if the duration decrease + * is also 1(ONE)! + */ + @Nonnull + public OverclockCalculator setEUtIncreasePerOC(double eutIncreasePerOC) { + if (eutIncreasePerOC <= 0) + throw new IllegalArgumentException("EUt increase can't be a negative number or zero"); + this.eutIncreasePerOC = eutIncreasePerOC; + return this; + } + + /** + * Sets the amount that the duration would be divided by per overclock. Do not set as 1(ONE) if the eut increase is + * also 1(ONE)! + */ + @Nonnull + public OverclockCalculator setDurationDecreasePerOC(double durationDecreasePerOC) { + if (durationDecreasePerOC <= 0) + throw new IllegalArgumentException("Duration decrease can't be a negative number or zero"); + this.durationDecreasePerOC = durationDecreasePerOC; + return this; + } + + /** + * Set One Tick Discount on EUt based on Duration Decrease Per Overclock. This functions the same as single blocks. + */ + @Nonnull + public OverclockCalculator setOneTickDiscount(boolean oneTickDiscount) { + this.oneTickDiscount = oneTickDiscount; + return this; + } + + /** + * Limit the amount of overclocks that can be performed, regardless of how much power is available. Mainly used for + * fusion reactors. + */ + @Nonnull + public OverclockCalculator limitOverclockCount(int maxOverclocks) { + this.limitOverclocks = true; + this.maxOverclocks = maxOverclocks; + return this; + } + + @Nonnull + public OverclockCalculator setAmperageOC(boolean amperageOC) { + this.amperageOC = amperageOC; + return this; + } + + /** + * Set a supplier for calculating custom duration for when its needed under one tick + */ + @Nonnull + public OverclockCalculator setDurationUnderOneTickSupplier(Supplier supplier) { + this.durationUnderOneTickSupplier = supplier; + return this; + } + + /** + * Sets if we should do overclocking or not + */ + @Nonnull + public OverclockCalculator setNoOverclock(boolean noOverclock) { + this.noOverclock = noOverclock; + return this; + } + + /** + * Set a supplier for calculating custom EUt increase multipliers for every overclock + */ + public OverclockCalculator setEutIncreasePerOCSupplier(Function eutIncreasePerOCSupplier) { + this.eutIncreasePerOCSupplier = eutIncreasePerOCSupplier; + this.hasAtLeastOneSupplierBeenSet = true; + return this; + } + + /** + * Set a supplier for calculating custom duration decrease multipliers for every overclock + */ + public OverclockCalculator setDurationDecreasePerOCSupplier( + Function durationDecreasePerOCSupplier) { + this.durationDecreasePerOCSupplier = durationDecreasePerOCSupplier; + this.hasAtLeastOneSupplierBeenSet = true; + return this; + } + + /** + * Set actually performed parallel + */ + public OverclockCalculator setCurrentParallel(int currentParallel) { + this.currentParallel = currentParallel; + // Sets parallel to the actually performed one if machine's parallel is underused. + this.parallel = Math.min(parallel, currentParallel); + return this; + } + + // endregion + // region calculate + /** + * Call this when all values have been put it. + */ + @Nonnull + public OverclockCalculator calculate() { + if (calculated) { + throw new IllegalStateException("Tried to calculate overclocks twice"); + } + calculateOverclock(); + calculated = true; + return this; + } + + private void calculateOverclock() { + double durationInDouble = durationUnderOneTickSupplier != null ? durationUnderOneTickSupplier.get() + : duration * speedBoost; + calculatedConsumption = recipeEUt; + double heatDiscountMultiplier = calculateHeatDiscountMultiplier(); + // Usually a safeguard when currentParallel is not set: We assume parallel is fully used. + currentParallel = Math.max(currentParallel, parallel); + + if (noOverclock) { + calculatedConsumption = calculateFinalRecipeEUt(heatDiscountMultiplier); + calculatedDuration = (int) Math.ceil(durationInDouble); + return; + } + + // First we need to overclock to reach 1 tick. + // Then we need to overclock under one tick to get more extra parallels. + // We stop overclocking if we've already reached 1 tick and got enough parallels to actually perform. + double requiredUnderOneTickMultiplier = durationInDouble * currentParallel / parallel; + if (hasAtLeastOneSupplierBeenSet) { // custom overclock + double currentEutIncrease = eutIncreasePerOCSupplier.apply(overclockCount + 1); + double currentDurationDecrease = durationDecreasePerOCSupplier.apply(overclockCount + 1); + double machinePower = calculateMachinePower(); + double currentConsumption = calculateRecipePower(heatDiscountMultiplier); + double currentUnderOneTickMultiplier = 1; + // Whether we have enough power for the next overclock; + // whether we need more overclock to reach 1 tick and get enough extra parallel; + // whether we have reached the overclock limit + while (machinePower > currentConsumption * currentEutIncrease + && requiredUnderOneTickMultiplier > currentUnderOneTickMultiplier + && (!limitOverclocks || overclockCount < maxOverclocks)) { + currentConsumption *= currentEutIncrease; + durationInDouble /= currentDurationDecrease; + overclockCount++; + currentEutIncrease = eutIncreasePerOCSupplier.apply(overclockCount + 1); + currentDurationDecrease = durationDecreasePerOCSupplier.apply(overclockCount + 1); + } + calculatedConsumption = (long) Math.max(currentConsumption, 1); + calculatedDuration = (int) Math.max(durationInDouble, 1); + } else { // general overclock + double recipePowerTier = calculateRecipePowerTier(heatDiscountMultiplier); + double machinePowerTier = calculateMachinePowerTier(); + + int maxOverclockCount = calculateAmountOfOverclocks(machinePowerTier, recipePowerTier); + if (limitOverclocks) maxOverclockCount = Math.min(maxOverclocks, maxOverclockCount); + if (!amperageOC) { + // Limit overclocks by voltage tier. + maxOverclockCount = Math.min(maxOverclockCount, calculateRecipeToMachineVoltageDifference()); + } + overclockCount = calculateAmountOfNeededOverclocks(maxOverclockCount, requiredUnderOneTickMultiplier); + + // If triggered, it indicates that recipe power > machine power. + // Not just a safeguard. This also means that you can run a 1.2A recipe on a single hatch for a regular gt + // multi. + // This is intended, including the fact that you don't get an OC with a one tier upgrade in that case. + overclockCount = Math.max(overclockCount, 0); + + int heatOverclockCount = Math.min(calculateMaxAmountOfHeatOverclocks(), overclockCount); + calculatedConsumption = (long) Math.floor(recipeEUt * Math.pow(eutIncreasePerOC, overclockCount)); + durationInDouble /= Math.pow(durationDecreasePerHeatOC, heatOverclockCount) + * Math.pow(durationDecreasePerOC, overclockCount - heatOverclockCount); + if (oneTickDiscount) { + calculatedConsumption = (long) Math + .floor(calculatedConsumption / Math.pow(durationDecreasePerOC, maxOverclockCount - overclockCount)); + calculatedConsumption = Math.max(calculatedConsumption, 1); + } + calculatedConsumption = calculateFinalRecipeEUt(heatDiscountMultiplier); + calculatedDuration = (int) Math.max(durationInDouble, 1); + } + } + + private double calculateRecipePower(double heatDiscountMultiplier) { + return recipeEUt * parallel * eutDiscount * heatDiscountMultiplier; + } + + private double calculateRecipePowerTier(double heatDiscountMultiplier) { + return calculatePowerTier(calculateRecipePower(heatDiscountMultiplier)); + } + + private double calculateMachinePower() { + return machineVoltage * (amperageOC ? machineAmperage : Math.min(machineAmperage, parallel)); + } + + private double calculateMachinePowerTier() { + return calculatePowerTier(calculateMachinePower()); + } + + private int calculateRecipeToMachineVoltageDifference() { + return (int) (Math.ceil(calculatePowerTier(machineVoltage)) - Math.ceil(calculatePowerTier(recipeEUt))); + } + + private double calculatePowerTier(double voltage) { + return 1 + Math.max(0, (Math.log(voltage) / LOG2) - 5) / 2; + } + + private long calculateFinalRecipeEUt(double heatDiscountMultiplier) { + return (long) Math.ceil(calculatedConsumption * eutDiscount * heatDiscountMultiplier * parallel); + } + + private int calculateMaxAmountOfHeatOverclocks() { + return heatOC ? (machineHeat - recipeHeat) / HEAT_PERFECT_OVERCLOCK_THRESHOLD : 0; + } + + /** + * Calculate maximum possible overclocks ignoring if we are going to go under 1 tick + */ + private int calculateAmountOfOverclocks(double machinePowerTier, double recipePowerTier) { + return (int) (machinePowerTier - recipePowerTier); + } + + private int calculateAmountOfNeededOverclocks(int maxOverclockCount, double requiredUnderOneTickMultiplier) { + int neededHeatOC = (int) Math.min( + calculateMaxAmountOfHeatOverclocks(), + Math.ceil(Math.log(requiredUnderOneTickMultiplier) / Math.log(durationDecreasePerHeatOC))); + neededHeatOC = Math.max(neededHeatOC, 0); + int neededNormalOC = (int) Math.ceil( + (Math.log(requiredUnderOneTickMultiplier) - Math.log(durationDecreasePerHeatOC) * neededHeatOC) + / Math.log(durationDecreasePerOC)); + neededNormalOC = Math.max(neededNormalOC, 0); + return Math.min(maxOverclockCount, neededHeatOC + neededNormalOC); + } + + private double calculateHeatDiscountMultiplier() { + int heatDiscounts = heatDiscount ? (machineHeat - recipeHeat) / HEAT_DISCOUNT_THRESHOLD : 0; + return Math.pow(heatDiscountExponent, heatDiscounts); + } + + // endregion + // region result getters + /** + * @return The consumption after overclock has been calculated + */ + public long getConsumption() { + if (!calculated) { + throw new IllegalStateException("Tried to get consumption before calculating"); + } + return calculatedConsumption; + } + + /** + * @return The duration of the recipe after overclock has been calculated + */ + public int getDuration() { + if (!calculated) { + throw new IllegalStateException("Tried to get duration before calculating"); + } + return calculatedDuration; + } + + /** + * @return Number of performed overclocks + */ + public int getPerformedOverclocks() { + if (!calculated) { + throw new IllegalStateException("Tried to get performed overclocks before calculating"); + } + return overclockCount; + } + + /** + * @return Whether the calculation has happened + */ + public boolean getCalculationStatus() { + return calculated; + } + + // endregion + // region misc + /** + * Returns duration as a double to show how much it is overclocking too much to determine extra parallel. This + * doesn't count as calculating + */ + public double calculateDurationUnderOneTick() { + double durationInDouble = durationUnderOneTickSupplier != null ? durationUnderOneTickSupplier.get() + : duration * speedBoost; + if (noOverclock) return durationInDouble; + double heatDiscountMultiplier = calculateHeatDiscountMultiplier(); + if (hasAtLeastOneSupplierBeenSet) { + int overclockCount = 0; + double currentEutIncrease = eutIncreasePerOCSupplier.apply(overclockCount + 1); + double currentDurationDecrease = durationDecreasePerOCSupplier.apply(overclockCount + 1); + double machinePower = calculateMachinePower(); + double recipePower = calculateRecipePower(heatDiscountMultiplier); + while (machinePower > recipePower * currentEutIncrease + && (!limitOverclocks || overclockCount < maxOverclocks)) { + recipePower *= currentEutIncrease; + durationInDouble /= currentDurationDecrease; + overclockCount++; + currentEutIncrease = eutIncreasePerOCSupplier.apply(overclockCount + 1); + currentDurationDecrease = durationDecreasePerOCSupplier.apply(overclockCount + 1); + } + } else { + int maxOverclockCount = calculateAmountOfOverclocks( + calculateMachinePowerTier(), + calculateRecipePowerTier(heatDiscountMultiplier)); + if (limitOverclocks) maxOverclockCount = Math.min(maxOverclocks, maxOverclockCount); + int heatOverclocks = Math.min(calculateMaxAmountOfHeatOverclocks(), maxOverclockCount); + durationInDouble /= Math.pow(durationDecreasePerOC, maxOverclockCount - heatOverclocks) + * Math.pow(durationDecreasePerHeatOC, heatOverclocks); + } + return durationInDouble; + } + + private Function getDefaultEutIncreasePerOCSupplier() { + return overclockCount -> eutIncreasePerOC; + } + + private Function getDefaultDurationDecreasePerOCSupplier() { + return overclockCount -> overclockCount <= calculateMaxAmountOfHeatOverclocks() ? durationDecreasePerHeatOC + : durationDecreasePerOC; + } + + // endregion +} diff --git a/src/main/java/gregtech/api/util/PCBFactoryManager.java b/src/main/java/gregtech/api/util/PCBFactoryManager.java new file mode 100644 index 0000000000..2d3efa29d4 --- /dev/null +++ b/src/main/java/gregtech/api/util/PCBFactoryManager.java @@ -0,0 +1,25 @@ +package gregtech.api.util; + +import com.google.common.collect.HashBiMap; + +import gregtech.api.enums.Materials; + +public class PCBFactoryManager { + + private static final HashBiMap mPlasticTiers = HashBiMap.create(); + public static int mTiersOfPlastics = 0; + + public static void addPlasticTier(Materials aMaterial, int aTier) { + mPlasticTiers.put(aMaterial, aTier); + mTiersOfPlastics++; + } + + public static int getPlasticTier(Materials aMaterial) { + return mPlasticTiers.get(aMaterial); + } + + public static Materials getPlasticMaterialFromTier(int aTier) { + return mPlasticTiers.inverse() + .get(aTier); + } +} diff --git a/src/main/java/gregtech/api/util/ParallelHelper.java b/src/main/java/gregtech/api/util/ParallelHelper.java new file mode 100644 index 0000000000..0c995cba7d --- /dev/null +++ b/src/main/java/gregtech/api/util/ParallelHelper.java @@ -0,0 +1,713 @@ +package gregtech.api.util; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Objects; +import java.util.Random; +import java.util.function.Function; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.interfaces.tileentity.IRecipeLockable; +import gregtech.api.interfaces.tileentity.IVoidable; +import gregtech.api.logic.FluidInventoryLogic; +import gregtech.api.logic.ItemInventoryLogic; +import gregtech.api.objects.XSTR; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SingleRecipeCheck; + +@SuppressWarnings({ "unused", "UnusedReturnValue" }) +public class ParallelHelper { + + private static final double MAX_BATCH_MODE_TICK_TIME = 128; + /** + * Machine used for calculation + */ + private IVoidable machine; + /** + * Machine used for single recipe locking calculation + */ + private IRecipeLockable singleRecipeMachine; + /** + * Is locked to a single recipe? + */ + private boolean isRecipeLocked; + /** + * Recipe used when trying to calculate parallels + */ + private GTRecipe recipe; + /** + * EUt available to the multiblock (This should be the total eut available) + */ + private long availableEUt; + /** + * The current parallel possible for the multiblock + */ + private int currentParallel = 0; + /** + * The maximum possible parallel possible for the multiblock + */ + private int maxParallel = 1; + /** + * The Batch Modifier applied when batch mode is enabled. 1 does nothing. 2 doubles max possible + * parallel, but also duration + */ + private int batchModifier = 1; + /** + * The inputs of the multiblock for the current recipe check + */ + private ItemStack[] itemInputs; + /** + * The inputs of the machine for current recipe check + */ + private ItemInventoryLogic itemInputInventory; + /** + * The output item inventory of the machine + */ + private ItemInventoryLogic itemOutputInventory; + /** + * The outputs of the recipe with the applied parallel + */ + private ItemStack[] itemOutputs; + /** + * The inputs of the multiblock for the current recipe check + */ + private FluidStack[] fluidInputs; + /** + * The inputs of the machine for the current recipe check + */ + private FluidInventoryLogic fluidInputInventory; + /** + * The output fluid inventory of the machine; + */ + private FluidInventoryLogic fluidOutputInventory; + /** + * The outputs of the recipe with the applied parallel + */ + private FluidStack[] fluidOutputs; + /** + * Does the multi have void protection enabled for items + */ + private boolean protectExcessItem; + /** + * Does the multi have void protection enabled for fluids + */ + private boolean protectExcessFluid; + /** + * Should the Parallel Helper automatically consume for the multi + */ + private boolean consume; + /** + * Is batch mode turned on? + */ + private boolean batchMode; + /** + * Should the Parallel Helper automatically calculate the outputs of the recipe with current parallel? + */ + private boolean calculateOutputs; + /** + * Has the Parallel Helper been built? + */ + private boolean built; + /** + * What is the duration multiplier with batch mode enabled + */ + private double durationMultiplier; + /** + * Modifier which is applied on the recipe eut. Useful for GT++ machines + */ + private float eutModifier = 1; + /** + * Multiplier that is applied on the output chances + */ + private double chanceMultiplier = 1; + /** + * Multiplier by which the output will be multiplied + */ + private int outputMultiplier = 1; + /** + * Method for calculating max parallel from given inputs. + */ + private MaxParallelCalculator maxParallelCalculator = GTRecipe::maxParallelCalculatedByInputs; + /** + * Method for consuming inputs after determining how many parallels it can execute. + */ + private InputConsumer inputConsumer = GTRecipe::consumeInput; + + /** + * Calculator to use for overclocking + */ + private OverclockCalculator calculator; + @Nonnull + private CheckRecipeResult result = CheckRecipeResultRegistry.NONE; + + private Function customItemOutputCalculation; + + private Function customFluidOutputCalculation; + + /** + * MuTE Mode this is a mode for changing how the GT_ParallelHelper works as Mutes don't use ItemStack and FluidStack + * arrays for inputs + */ + private boolean muteMode = false; + + public ParallelHelper() {} + + /** + * Sets machine, with current configuration for void protection mode. + */ + @Nonnull + public ParallelHelper setMachine(IVoidable machine) { + return setMachine(machine, machine.protectsExcessItem(), machine.protectsExcessFluid()); + } + + /** + * Sets machine, with void protection mode forcibly. + */ + @Nonnull + public ParallelHelper setMachine(IVoidable machine, boolean protectExcessItem, boolean protectExcessFluid) { + this.protectExcessItem = protectExcessItem; + this.protectExcessFluid = protectExcessFluid; + this.machine = machine; + return this; + } + + /** + * Sets the recipe, which will be used for the parallel calculation + */ + @Nonnull + public ParallelHelper setRecipe(@Nonnull GTRecipe aRecipe) { + recipe = Objects.requireNonNull(aRecipe); + return this; + } + + @Nonnull + public ParallelHelper setRecipeLocked(IRecipeLockable singleRecipeMachine, boolean isRecipeLocked) { + this.singleRecipeMachine = singleRecipeMachine; + this.isRecipeLocked = isRecipeLocked; + return this; + } + + /** + * Sets the items available for the recipe check + */ + @Nonnull + public ParallelHelper setItemInputs(ItemStack... aItemInputs) { + this.itemInputs = aItemInputs; + return this; + } + + /** + * Sets the fluid inputs available for the recipe check + */ + @Nonnull + public ParallelHelper setFluidInputs(FluidStack... aFluidInputs) { + this.fluidInputs = aFluidInputs; + return this; + } + + /** + * Sets the available eut when trying for more parallels + */ + @Nonnull + public ParallelHelper setAvailableEUt(long aAvailableEUt) { + this.availableEUt = aAvailableEUt; + return this; + } + + /** + * Sets the modifier for recipe eut. 1 does nothing 0.9 is 10% less. 1.1 is 10% more + */ + @Nonnull + public ParallelHelper setEUtModifier(float aEUtModifier) { + this.eutModifier = aEUtModifier; + return this; + } + + /** + * Sets the multiplier that is applied on output chances. 1 does nothing. 0.9 is 10% less. 1.1 is 10% more. + * Only useful for item outputs for sure. + */ + @Nonnull + public ParallelHelper setChanceMultiplier(double chanceMultiplier) { + this.chanceMultiplier = chanceMultiplier; + return this; + } + + /** + * Sets the item/fluid output multiplier. 1 does nothing. 2 doubles the item and fluid outputs. + */ + @Nonnull + public ParallelHelper setOutputMultiplier(int outputMultiplier) { + this.outputMultiplier = outputMultiplier; + return this; + } + + @Nonnull + public ParallelHelper setCalculator(OverclockCalculator calculator) { + this.calculator = calculator; + return this; + } + + /** + * Set if we should consume inputs or not when trying for parallels + * + * @param consume Should we consume inputs + */ + @Nonnull + public ParallelHelper setConsumption(boolean consume) { + this.consume = consume; + return this; + } + + /** + * Sets the MaxParallel a multi can handle + */ + @Nonnull + public ParallelHelper setMaxParallel(int maxParallel) { + this.maxParallel = maxParallel; + return this; + } + + /** + * Enables Batch mode. Can do up to an additional processed recipes of mCurrentParallel * mBatchModifier A batch + * modifier of 1 does nothing + */ + @Nonnull + public ParallelHelper enableBatchMode(int batchModifier) { + this.batchMode = batchModifier > 1; + this.batchModifier = batchModifier; + return this; + } + + /** + * Sets if we should calculate outputs with the parallels we found or not + * + * @param calculateOutputs Should we calculate outputs with the helper or not + */ + @Nonnull + public ParallelHelper setOutputCalculation(boolean calculateOutputs) { + this.calculateOutputs = calculateOutputs; + return this; + } + + /** + * Set a custom way to calculate item outputs. You are given the amount of parallels and must return an ItemStack + * array + */ + @Nonnull + public ParallelHelper setCustomItemOutputCalculation(Function custom) { + customItemOutputCalculation = custom; + return this; + } + + /** + * Set a custom way to calculate item outputs. You are given the amount of parallels and must return a FluidStack + * array + */ + @Nonnull + public ParallelHelper setCustomFluidOutputCalculation(Function custom) { + customFluidOutputCalculation = custom; + return this; + } + + @Nonnull + public ParallelHelper setMuTEMode(boolean muteMode) { + this.muteMode = muteMode; + return this; + } + + @Nonnull + public ParallelHelper setItemInputInventory(ItemInventoryLogic itemInputInventory) { + this.itemInputInventory = itemInputInventory; + return this; + } + + @Nonnull + public ParallelHelper setFluidInputInventory(FluidInventoryLogic fluidInputInventory) { + this.fluidInputInventory = fluidInputInventory; + return this; + } + + /** + * Sets method for calculating max parallel from given inputs. + */ + public ParallelHelper setMaxParallelCalculator(MaxParallelCalculator maxParallelCalculator) { + this.maxParallelCalculator = maxParallelCalculator; + return this; + } + + /** + * Sets method for consuming inputs after determining how many parallels it can execute. + */ + public ParallelHelper setInputConsumer(InputConsumer inputConsumer) { + this.inputConsumer = inputConsumer; + return this; + } + + @Nonnull + public ParallelHelper setItemOutputInventory(ItemInventoryLogic itemOutputInventory) { + this.itemOutputInventory = itemOutputInventory; + return this; + } + + @Nonnull + public ParallelHelper setFluidOutputInventory(FluidInventoryLogic fluidOutputInventory) { + this.fluidOutputInventory = fluidOutputInventory; + return this; + } + + /** + * Finishes the GT_ParallelHelper. Anything changed after this will not effect anything + */ + @Nonnull + public ParallelHelper build() { + if (built) { + throw new IllegalStateException("Tried to build twice"); + } + if (recipe == null) { + throw new IllegalStateException("Recipe is not set"); + } + built = true; + determineParallel(); + return this; + } + + /** + * @return The current parallels possible by the multiblock + */ + public int getCurrentParallel() { + if (!built) { + throw new IllegalStateException("Tried to get parallels before building"); + } + return currentParallel; + } + + /** + * @return The duration multiplier if batch mode was enabled for the multiblock + */ + public double getDurationMultiplierDouble() { + if (!built) { + throw new IllegalStateException("Tried to get duration multiplier before building"); + } + if (batchMode && durationMultiplier > 0) { + return durationMultiplier; + } + return 1; + } + + /** + * @return The ItemOutputs from the recipe + */ + @Nonnull + public ItemStack[] getItemOutputs() { + if (!built || !calculateOutputs) { + throw new IllegalStateException( + "Tried to get item outputs before building or without enabling calculation of outputs"); + } + return itemOutputs; + } + + /** + * @return The FluidOutputs from the recipe + */ + @Nonnull + public FluidStack[] getFluidOutputs() { + if (!built || !calculateOutputs) { + throw new IllegalStateException( + "Tried to get fluid outputs before building or without enabling calculation of outputs"); + } + return fluidOutputs; + } + + /** + * @return The result of why a recipe could've failed or succeeded + */ + @Nonnull + public CheckRecipeResult getResult() { + if (!built) { + throw new IllegalStateException("Tried to get recipe result before building"); + } + return result; + } + + /** + * Called by build(). Determines the parallels and everything else that needs to be done at build time + */ + protected void determineParallel() { + if (maxParallel <= 0) { + return; + } + if (itemInputs == null) { + itemInputs = new ItemStack[0]; + } + if (fluidInputs == null) { + fluidInputs = new FluidStack[0]; + } + + if (!consume) { + copyInputs(); + } + + if (calculator == null) { + calculator = new OverclockCalculator().setEUt(availableEUt) + .setRecipeEUt(recipe.mEUt) + .setDuration(recipe.mDuration) + .setEUtDiscount(eutModifier); + } + + final int tRecipeEUt = (int) Math.ceil(recipe.mEUt * eutModifier); + if (availableEUt < tRecipeEUt) { + result = CheckRecipeResultRegistry.insufficientPower(tRecipeEUt); + return; + } + + // Save the original max parallel before calculating our overclocking under 1 tick + int originalMaxParallel = maxParallel; + calculator.setParallel(originalMaxParallel); + double tickTimeAfterOC = calculator.calculateDurationUnderOneTick(); + if (tickTimeAfterOC < 1) { + maxParallel = GTUtility.safeInt((long) (maxParallel / tickTimeAfterOC), 0); + } + + int maxParallelBeforeBatchMode = maxParallel; + if (batchMode) { + maxParallel = GTUtility.safeInt((long) maxParallel * batchModifier, 0); + } + + final ItemStack[] truncatedItemOutputs = recipe.mOutputs != null + ? Arrays.copyOfRange(recipe.mOutputs, 0, Math.min(machine.getItemOutputLimit(), recipe.mOutputs.length)) + : new ItemStack[0]; + final FluidStack[] truncatedFluidOutputs = recipe.mFluidOutputs != null ? Arrays + .copyOfRange(recipe.mFluidOutputs, 0, Math.min(machine.getFluidOutputLimit(), recipe.mFluidOutputs.length)) + : new FluidStack[0]; + + SingleRecipeCheck recipeCheck = null; + SingleRecipeCheck.Builder tSingleRecipeCheckBuilder = null; + if (isRecipeLocked && singleRecipeMachine != null) { + recipeCheck = singleRecipeMachine.getSingleRecipeCheck(); + if (recipeCheck == null) { + // Machine is configured to lock to a single recipe, but haven't built the recipe checker yet. + // Build the checker on next successful recipe. + RecipeMap recipeMap = singleRecipeMachine.getRecipeMap(); + if (recipeMap != null) { + tSingleRecipeCheckBuilder = SingleRecipeCheck.builder(recipeMap) + .setBefore(itemInputs, fluidInputs); + } + } + } + + // Let's look at how many parallels we can get with void protection + if (protectExcessItem || protectExcessFluid) { + if (machine == null && !muteMode) { + throw new IllegalStateException("Tried to calculate void protection, but machine is not set"); + } + VoidProtectionHelper voidProtectionHelper = new VoidProtectionHelper(); + voidProtectionHelper.setMachine(machine) + .setItemOutputs(truncatedItemOutputs) + .setFluidOutputs(truncatedFluidOutputs) + .setChangeGetter(recipe::getOutputChance) + .setOutputMultiplier(outputMultiplier) + .setChanceMultiplier(chanceMultiplier) + .setMaxParallel(maxParallel) + .setItemOutputInventory(itemOutputInventory) + .setFluidOutputInventory(fluidOutputInventory) + .setMuTEMode(muteMode) + .build(); + maxParallel = Math.min(voidProtectionHelper.getMaxParallel(), maxParallel); + if (voidProtectionHelper.isItemFull()) { + result = CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; + return; + } + if (voidProtectionHelper.isFluidFull()) { + result = CheckRecipeResultRegistry.FLUID_OUTPUT_FULL; + return; + } + } + + maxParallelBeforeBatchMode = Math.min(maxParallel, maxParallelBeforeBatchMode); + + // determine normal parallel + int actualMaxParallel = tRecipeEUt > 0 ? (int) Math.min(maxParallelBeforeBatchMode, availableEUt / tRecipeEUt) + : maxParallelBeforeBatchMode; + if (recipeCheck != null) { + currentParallel = recipeCheck.checkRecipeInputs(true, actualMaxParallel, itemInputs, fluidInputs); + } else { + currentParallel = (int) maxParallelCalculator.calculate(recipe, actualMaxParallel, fluidInputs, itemInputs); + if (currentParallel > 0) { + if (tSingleRecipeCheckBuilder != null) { + // If recipe checker is not built yet, build and set it + inputConsumer.consume(recipe, 1, fluidInputs, itemInputs); + SingleRecipeCheck builtCheck = tSingleRecipeCheckBuilder.setAfter(itemInputs, fluidInputs) + .setRecipe(recipe) + .build(); + singleRecipeMachine.setSingleRecipeCheck(builtCheck); + inputConsumer.consume(recipe, currentParallel - 1, fluidInputs, itemInputs); + } else { + inputConsumer.consume(recipe, currentParallel, fluidInputs, itemInputs); + } + } + } + + if (currentParallel <= 0) { + result = CheckRecipeResultRegistry.INTERNAL_ERROR; + return; + } + + calculator.setCurrentParallel(currentParallel) + .calculate(); + // If Batch Mode is enabled determine how many extra parallels we can get + if (batchMode && currentParallel > 0 && calculator.getDuration() < MAX_BATCH_MODE_TICK_TIME) { + int tExtraParallels; + double batchMultiplierMax = MAX_BATCH_MODE_TICK_TIME / calculator.getDuration(); + final int maxExtraParallels = (int) Math.floor( + Math.min( + currentParallel * Math.min(batchMultiplierMax - 1, batchModifier - 1), + maxParallel - currentParallel)); + if (recipeCheck != null) { + tExtraParallels = recipeCheck.checkRecipeInputs(true, maxExtraParallels, itemInputs, fluidInputs); + } else { + tExtraParallels = (int) maxParallelCalculator + .calculate(recipe, maxExtraParallels, fluidInputs, itemInputs); + inputConsumer.consume(recipe, tExtraParallels, fluidInputs, itemInputs); + } + durationMultiplier = 1.0f + (float) tExtraParallels / currentParallel; + currentParallel += tExtraParallels; + } + + // If we want to calculate outputs we do it here + if (calculateOutputs && currentParallel > 0) { + calculateItemOutputs(truncatedItemOutputs); + calculateFluidOutputs(truncatedFluidOutputs); + } + result = CheckRecipeResultRegistry.SUCCESSFUL; + } + + protected void copyInputs() { + ItemStack[] itemInputsToUse; + FluidStack[] fluidInputsToUse; + itemInputsToUse = new ItemStack[itemInputs.length]; + for (int i = 0; i < itemInputs.length; i++) { + itemInputsToUse[i] = itemInputs[i].copy(); + } + fluidInputsToUse = new FluidStack[fluidInputs.length]; + for (int i = 0; i < fluidInputs.length; i++) { + fluidInputsToUse[i] = fluidInputs[i].copy(); + } + itemInputs = itemInputsToUse; + fluidInputs = fluidInputsToUse; + } + + private void calculateItemOutputs(ItemStack[] truncatedItemOutputs) { + if (customItemOutputCalculation != null) { + itemOutputs = customItemOutputCalculation.apply(currentParallel); + return; + } + if (truncatedItemOutputs.length == 0) return; + ArrayList itemOutputsList = new ArrayList<>(); + for (int i = 0; i < truncatedItemOutputs.length; i++) { + if (recipe.getOutput(i) == null) continue; + ItemStack origin = recipe.getOutput(i) + .copy(); + final long itemStackSize = origin.stackSize; + double chancedOutputMultiplier = calculateChancedOutputMultiplier( + (int) (recipe.getOutputChance(i) * chanceMultiplier), + currentParallel); + long items = (long) Math.ceil(itemStackSize * chancedOutputMultiplier * outputMultiplier); + addItemsLong(itemOutputsList, origin, items); + } + itemOutputs = itemOutputsList.toArray(new ItemStack[0]); + } + + private void calculateFluidOutputs(FluidStack[] truncatedFluidOutputs) { + if (customFluidOutputCalculation != null) { + fluidOutputs = customFluidOutputCalculation.apply(currentParallel); + return; + } + if (truncatedFluidOutputs.length == 0) return; + ArrayList fluidOutputsList = new ArrayList<>(); + for (int i = 0; i < truncatedFluidOutputs.length; i++) { + if (recipe.getFluidOutput(i) == null) continue; + FluidStack origin = recipe.getFluidOutput(i) + .copy(); + long fluids = (long) this.outputMultiplier * origin.amount * currentParallel; + + addFluidsLong(fluidOutputsList, origin, fluids); + } + fluidOutputs = fluidOutputsList.toArray(new FluidStack[0]); + } + + private static final Random rand = new Random(); + + public static double calculateChancedOutputMultiplier(int chanceInt, int parallel) { + // Multiply the integer part of the chance directly with parallel + double multiplier = Math.floorDiv(chanceInt, 10000) * parallel; + int transformedChanceInt = chanceInt % 10000; + if (transformedChanceInt == 0) return multiplier; + // Calculation of the Decimal Part of chance + double chance = transformedChanceInt / 10000.0; + double mean = parallel * chance; + double stdDev = Math.sqrt(parallel * chance * (1 - chance)); + // Check if everything within 3 standard deviations of mean is within the range + // of possible values (0 ~ currentParallel) + boolean isSuitableForFittingWithNormalDistribution = mean - 3 * stdDev >= 0 && mean + 3 * stdDev <= parallel; + if (isSuitableForFittingWithNormalDistribution) { + // Use Normal Distribution to fit Binomial Distribution + double tMultiplier = stdDev * rand.nextGaussian() + mean; + multiplier += Math.max(Math.min(tMultiplier, parallel), 0); + } else { + // Do Binomial Distribution by loop + for (int roll = 0; roll < parallel; roll++) { + if (transformedChanceInt > XSTR.XSTR_INSTANCE.nextInt(10000)) { + multiplier += 1; + } + } + } + return multiplier; + } + + public static void addItemsLong(ArrayList itemList, ItemStack origin, long amount) { + if (amount > 0) { + while (amount > Integer.MAX_VALUE) { + ItemStack item = origin.copy(); + item.stackSize = Integer.MAX_VALUE; + itemList.add(item); + amount -= Integer.MAX_VALUE; + } + ItemStack item = origin.copy(); + item.stackSize = (int) amount; + itemList.add(item); + } + } + + public static void addFluidsLong(ArrayList fluidList, FluidStack origin, long amount) { + if (amount > 0) { + while (amount > Integer.MAX_VALUE) { + FluidStack fluid = origin.copy(); + fluid.amount = Integer.MAX_VALUE; + fluidList.add(fluid); + amount -= Integer.MAX_VALUE; + } + FluidStack fluid = origin.copy(); + fluid.amount = (int) amount; + fluidList.add(fluid); + } + } + + @FunctionalInterface + public interface MaxParallelCalculator { + + double calculate(GTRecipe recipe, int maxParallel, FluidStack[] fluids, ItemStack[] items); + } + + @FunctionalInterface + public interface InputConsumer { + + void consume(GTRecipe recipe, int amountMultiplier, FluidStack[] aFluidInputs, ItemStack[] aInputs); + } +} diff --git a/src/main/java/gregtech/api/util/ProcessingArrayManager.java b/src/main/java/gregtech/api/util/ProcessingArrayManager.java new file mode 100644 index 0000000000..adbb8f76b8 --- /dev/null +++ b/src/main/java/gregtech/api/util/ProcessingArrayManager.java @@ -0,0 +1,51 @@ +package gregtech.api.util; + +import java.util.HashMap; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.SoundResource; +import gregtech.api.recipe.RecipeMap; + +@Deprecated +public class ProcessingArrayManager { + + private static final HashMap> mRecipeSaves = new HashMap<>(); + private static final HashMap machineSounds = new HashMap<>(); + + // Adds recipe Maps to the PA using the machines unlocalized name. + // Example: basicmachine.electrolyzer, with its recipe map will add the electrolyzer's recipe map to the PA + public static void addRecipeMapToPA(String aMachineName, RecipeMap aMap) { + if (aMachineName != null) { + mRecipeSaves.put(aMachineName, aMap); + } + } + + // Allows the PA to extract the recipe map for the machine inside it. + public static RecipeMap giveRecipeMap(String aMachineName) { + if (aMachineName != null) { + return mRecipeSaves.get(aMachineName); + } + return null; + } + + public static void addSoundResourceToPA(String machineName, SoundResource soundResource) { + if (machineName != null) { + machineSounds.put(machineName, soundResource); + } + } + + public static SoundResource getSoundResource(String machineName) { + if (machineName != null) { + return machineSounds.get(machineName); + } + return null; + } + + public static String getMachineName(ItemStack stack) { + int length = stack.getUnlocalizedName() + .length(); + return stack.getUnlocalizedName() + .substring(17, length - 8); // trim "gt.blockmachines." and ".tier.xx" + } +} diff --git a/src/main/java/gregtech/api/util/SemiFluidFuelHandler.java b/src/main/java/gregtech/api/util/SemiFluidFuelHandler.java index aa983a5804..50cad72f9c 100644 --- a/src/main/java/gregtech/api/util/SemiFluidFuelHandler.java +++ b/src/main/java/gregtech/api/util/SemiFluidFuelHandler.java @@ -1,6 +1,6 @@ package gregtech.api.util; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.semiFluidFuels; import java.util.HashMap; @@ -9,7 +9,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.recipe.RecipeMaps; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.Pair; @@ -23,9 +23,9 @@ public class SemiFluidFuelHandler { final FluidStack aHeavyOil = FluidUtils.getFluidStack("liquid_heavy_oil", 1000); final HashMap> aFoundFluidsFromItems = new HashMap<>(); // Find Fluids From items - for (final GT_Recipe r : RecipeMaps.denseLiquidFuels.getAllRecipes()) { + for (final GTRecipe r : RecipeMaps.denseLiquidFuels.getAllRecipes()) { - GT_Recipe g = r.copy(); + GTRecipe g = r.copy(); if (g != null && g.mEnabled && g.mInputs.length > 0 && g.mInputs[0] != null) { for (ItemStack i : g.mInputs) { @@ -71,7 +71,7 @@ public class SemiFluidFuelHandler { if (aFuelValue <= (128 * 3)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs(p.getKey()) .duration(0) .eut(0) diff --git a/src/main/java/gregtech/api/util/VoidProtectionHelper.java b/src/main/java/gregtech/api/util/VoidProtectionHelper.java index fdf47d06df..cf98e26b66 100644 --- a/src/main/java/gregtech/api/util/VoidProtectionHelper.java +++ b/src/main/java/gregtech/api/util/VoidProtectionHelper.java @@ -397,7 +397,7 @@ public class VoidProtectionHelper { int tSlotsFree = 0; int index = 0; for (ItemStack tItem : itemOutputs) { - // GT_RecipeBuilder doesn't handle null item output + // GTRecipeBuilder doesn't handle null item output if (tItem == null) continue; int itemStackSize = (int) (tItem.stackSize * outputMultiplier * Math.ceil(chanceMultiplier * chanceGetter.apply(index++) / 10000)); diff --git a/src/main/java/gregtech/api/util/item/ItemHolder.java b/src/main/java/gregtech/api/util/item/ItemHolder.java index 4675d0ba0e..51215c93cb 100644 --- a/src/main/java/gregtech/api/util/item/ItemHolder.java +++ b/src/main/java/gregtech/api/util/item/ItemHolder.java @@ -11,7 +11,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class ItemHolder { @@ -67,7 +67,7 @@ public class ItemHolder { @Override public int hashCode() { - return GT_Utility.stackToInt(toStack()); + return GTUtility.stackToInt(toStack()); } @Nonnull diff --git a/src/main/java/gregtech/api/util/recipe/RecipeInputRequirements.java b/src/main/java/gregtech/api/util/recipe/RecipeInputRequirements.java index 590c104101..485ee991c5 100644 --- a/src/main/java/gregtech/api/util/recipe/RecipeInputRequirements.java +++ b/src/main/java/gregtech/api/util/recipe/RecipeInputRequirements.java @@ -12,7 +12,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; import gregtech.api.util.item.ItemHolder; public class RecipeInputRequirements { @@ -24,7 +24,7 @@ public class RecipeInputRequirements { protected Set fluidInputsMet = new HashSet<>(); protected boolean metAllFluid = false; - public RecipeInputRequirements(@Nonnull GT_Recipe recipe) { + public RecipeInputRequirements(@Nonnull GTRecipe recipe) { this(recipe.mInputs, recipe.mFluidInputs); } @@ -42,7 +42,7 @@ public class RecipeInputRequirements { } /** - * + * * @param itemInputs we have and want to fill this request * @return {@code true} when all item inputs are met */ @@ -59,7 +59,7 @@ public class RecipeInputRequirements { } /** - * + * * @param fluidInputs we have and want to fill this request * @return {@code true} when all fluid inputs are met */ diff --git a/src/main/java/gregtech/api/util/shutdown/ReasonOutOfFluid.java b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfFluid.java index 0194afbc04..10684f5848 100644 --- a/src/main/java/gregtech/api/util/shutdown/ReasonOutOfFluid.java +++ b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfFluid.java @@ -1,7 +1,7 @@ package gregtech.api.util.shutdown; -import static gregtech.api.util.GT_ModHandler.getWater; -import static gregtech.api.util.GT_Utility.formatNumbers; +import static gregtech.api.util.GTModHandler.getWater; +import static gregtech.api.util.GTUtility.formatNumbers; import java.util.Objects; diff --git a/src/main/java/gregtech/api/util/shutdown/ReasonOutOfItem.java b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfItem.java index 8f51bd83b2..f512e2fa84 100644 --- a/src/main/java/gregtech/api/util/shutdown/ReasonOutOfItem.java +++ b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfItem.java @@ -1,6 +1,6 @@ package gregtech.api.util.shutdown; -import static gregtech.api.util.GT_Utility.formatNumbers; +import static gregtech.api.util.GTUtility.formatNumbers; import java.util.Objects; diff --git a/src/main/java/gregtech/api/util/shutdown/ReasonOutOfStuff.java b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfStuff.java index 72a75b062f..288c733a90 100644 --- a/src/main/java/gregtech/api/util/shutdown/ReasonOutOfStuff.java +++ b/src/main/java/gregtech/api/util/shutdown/ReasonOutOfStuff.java @@ -1,6 +1,6 @@ package gregtech.api.util.shutdown; -import static gregtech.api.util.GT_Utility.formatNumbers; +import static gregtech.api.util.GTUtility.formatNumbers; import java.util.Objects; diff --git a/src/main/java/gregtech/api/util/shutdown/ShutDownReasonRegistry.java b/src/main/java/gregtech/api/util/shutdown/ShutDownReasonRegistry.java index 298c5db237..1cdfb60ddb 100644 --- a/src/main/java/gregtech/api/util/shutdown/ShutDownReasonRegistry.java +++ b/src/main/java/gregtech/api/util/shutdown/ShutDownReasonRegistry.java @@ -1,6 +1,6 @@ package gregtech.api.util.shutdown; -import static gregtech.api.util.GT_ModHandler.getWater; +import static gregtech.api.util.GTModHandler.getWater; import java.util.HashMap; import java.util.Map; diff --git a/src/main/java/gregtech/api/world/GTWorldgen.java b/src/main/java/gregtech/api/world/GTWorldgen.java new file mode 100644 index 0000000000..da3a66ef7e --- /dev/null +++ b/src/main/java/gregtech/api/world/GTWorldgen.java @@ -0,0 +1,123 @@ +package gregtech.api.world; + +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraftforge.common.DimensionManager; + +import gregtech.common.WorldgenGTOreLayer; +import gregtech.common.WorldgenGTOreSmallPieces; + +public abstract class GTWorldgen { + + public final String mWorldGenName; + public final boolean mEnabled; + private final Map mDimensionMap = new ConcurrentHashMap<>(); + + @SuppressWarnings({ "unchecked", "rawtypes" }) // The adding of "this" needs a List which does not exist + public GTWorldgen(String aName, List aList, boolean aDefault) { + mWorldGenName = aName; + mEnabled = aDefault; + if (mEnabled) aList.add(this); + } + + /** + * @param aWorld The World Object + * @param aRandom The Random Generator to use + * @param aBiome The Name of the Biome (always != null) + * @param aDimensionType The Type of Worldgeneration to add. -1 = Nether, 0 = Overworld, +1 = End + * @param aChunkX xCoord of the Chunk + * @param aChunkZ zCoord of the Chunk + * @return if the Worldgeneration has been successfully completed + */ + public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, + int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { + return false; + } + + public int executeWorldgenChunkified(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, + int aChunkZ, int seedX, int seedZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { + return 4; // This is for the empty Orevein + } + + /** + * + * @param aDimName The Dimension Name + * @param aDimensionType The Type of Worldgeneration to add. -1 = Nether, 0 = Overworld, +1 = End + * @param aAllowedDimensionType The Type of allowed Worldgeneration + * @return if generation for this world is allowed for MoronTech (tm) OreGen (ATM (2.0.3.1Dev) only End, Nether, + * Overworld, Twilight Forest and Deep Dark) + */ + public boolean isGenerationAllowed(String aDimName, int aDimensionType, int aAllowedDimensionType) { + if (aDimName.equalsIgnoreCase("Underdark")) { + return false; + } + if (!(aDimName.equalsIgnoreCase("Overworld") || aDimName.equalsIgnoreCase("Nether") + || aDimName.equalsIgnoreCase("The End") + || aDimName.equalsIgnoreCase("Twilight Forest"))) return false; + + Boolean tAllowed = mDimensionMap.get(aDimName); + if (tAllowed == null) { + mDimensionMap.put(aDimName, aDimensionType == aAllowedDimensionType); + return aDimensionType == aAllowedDimensionType; + } + return tAllowed; + } + + public boolean isGenerationAllowed(World aWorld, int aAllowedDimensionType) { + World allowedWorld = DimensionManager.getWorld(aAllowedDimensionType); + if (allowedWorld != null && allowedWorld.provider != null) { + return isGenerationAllowed(aWorld, allowedWorld.provider.getClass()); + } else { + return aWorld.provider.dimensionId == aAllowedDimensionType; + } + } + + /** + * + * @param aWorld The World Object + * @param aAllowedDimensionTypes The Types of allowed Worldgeneration + * @return if generation for this world is allowed for MoronTech (tm) OreGen (ATM (2.0.3.1Dev) only End, Nether, + * Overworld, Twilight Forest and Deep Dark) + */ + public boolean isGenerationAllowed(World aWorld, Class... aAllowedDimensionTypes) { + String aDimName = aWorld.provider.getDimensionName(); + if (aDimName.equalsIgnoreCase("Underdark")) { + return false; + } + if (!(aDimName.equalsIgnoreCase("Overworld") || aDimName.equalsIgnoreCase("Nether") + || aDimName.equalsIgnoreCase("The End") + || aDimName.equalsIgnoreCase("Twilight Forest"))) return false; + + Boolean tAllowed = mDimensionMap.get(aDimName); + if (tAllowed == null) { + boolean value = false; + for (int i = 0; i < aAllowedDimensionTypes.length; i++) { + if (aAllowedDimensionTypes[i].isInstance(aWorld.provider)) { + value = true; + } + } + + // ugly, but idk how to do it better without hard depping on tf provider in ore constructors + if (this instanceof WorldgenGTOreSmallPieces ore) { + if (ore.twilightForest && aWorld.provider.dimensionId == 7) { + value = true; + } + } + + if (this instanceof WorldgenGTOreLayer ore) { + if (ore.twilightForest && aWorld.provider.dimensionId == 7) { + value = true; + } + } + + mDimensionMap.put(aDimName, value); + return value; + } + return tAllowed; + } +} diff --git a/src/main/java/gregtech/api/world/GT_Worldgen.java b/src/main/java/gregtech/api/world/GT_Worldgen.java deleted file mode 100644 index a3393324c2..0000000000 --- a/src/main/java/gregtech/api/world/GT_Worldgen.java +++ /dev/null @@ -1,123 +0,0 @@ -package gregtech.api.world; - -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.concurrent.ConcurrentHashMap; - -import net.minecraft.world.World; -import net.minecraft.world.chunk.IChunkProvider; -import net.minecraftforge.common.DimensionManager; - -import gregtech.common.GT_Worldgen_GT_Ore_Layer; -import gregtech.common.GT_Worldgen_GT_Ore_SmallPieces; - -public abstract class GT_Worldgen { - - public final String mWorldGenName; - public final boolean mEnabled; - private final Map mDimensionMap = new ConcurrentHashMap<>(); - - @SuppressWarnings({ "unchecked", "rawtypes" }) // The adding of "this" needs a List which does not exist - public GT_Worldgen(String aName, List aList, boolean aDefault) { - mWorldGenName = aName; - mEnabled = aDefault; - if (mEnabled) aList.add(this); - } - - /** - * @param aWorld The World Object - * @param aRandom The Random Generator to use - * @param aBiome The Name of the Biome (always != null) - * @param aDimensionType The Type of Worldgeneration to add. -1 = Nether, 0 = Overworld, +1 = End - * @param aChunkX xCoord of the Chunk - * @param aChunkZ zCoord of the Chunk - * @return if the Worldgeneration has been successfully completed - */ - public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, - int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { - return false; - } - - public int executeWorldgenChunkified(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, - int aChunkZ, int seedX, int seedZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { - return 4; // This is for the empty Orevein - } - - /** - * - * @param aDimName The Dimension Name - * @param aDimensionType The Type of Worldgeneration to add. -1 = Nether, 0 = Overworld, +1 = End - * @param aAllowedDimensionType The Type of allowed Worldgeneration - * @return if generation for this world is allowed for MoronTech (tm) OreGen (ATM (2.0.3.1Dev) only End, Nether, - * Overworld, Twilight Forest and Deep Dark) - */ - public boolean isGenerationAllowed(String aDimName, int aDimensionType, int aAllowedDimensionType) { - if (aDimName.equalsIgnoreCase("Underdark")) { - return false; - } - if (!(aDimName.equalsIgnoreCase("Overworld") || aDimName.equalsIgnoreCase("Nether") - || aDimName.equalsIgnoreCase("The End") - || aDimName.equalsIgnoreCase("Twilight Forest"))) return false; - - Boolean tAllowed = mDimensionMap.get(aDimName); - if (tAllowed == null) { - mDimensionMap.put(aDimName, aDimensionType == aAllowedDimensionType); - return aDimensionType == aAllowedDimensionType; - } - return tAllowed; - } - - public boolean isGenerationAllowed(World aWorld, int aAllowedDimensionType) { - World allowedWorld = DimensionManager.getWorld(aAllowedDimensionType); - if (allowedWorld != null && allowedWorld.provider != null) { - return isGenerationAllowed(aWorld, allowedWorld.provider.getClass()); - } else { - return aWorld.provider.dimensionId == aAllowedDimensionType; - } - } - - /** - * - * @param aWorld The World Object - * @param aAllowedDimensionTypes The Types of allowed Worldgeneration - * @return if generation for this world is allowed for MoronTech (tm) OreGen (ATM (2.0.3.1Dev) only End, Nether, - * Overworld, Twilight Forest and Deep Dark) - */ - public boolean isGenerationAllowed(World aWorld, Class... aAllowedDimensionTypes) { - String aDimName = aWorld.provider.getDimensionName(); - if (aDimName.equalsIgnoreCase("Underdark")) { - return false; - } - if (!(aDimName.equalsIgnoreCase("Overworld") || aDimName.equalsIgnoreCase("Nether") - || aDimName.equalsIgnoreCase("The End") - || aDimName.equalsIgnoreCase("Twilight Forest"))) return false; - - Boolean tAllowed = mDimensionMap.get(aDimName); - if (tAllowed == null) { - boolean value = false; - for (int i = 0; i < aAllowedDimensionTypes.length; i++) { - if (aAllowedDimensionTypes[i].isInstance(aWorld.provider)) { - value = true; - } - } - - // ugly, but idk how to do it better without hard depping on tf provider in ore constructors - if (this instanceof GT_Worldgen_GT_Ore_SmallPieces ore) { - if (ore.twilightForest && aWorld.provider.dimensionId == 7) { - value = true; - } - } - - if (this instanceof GT_Worldgen_GT_Ore_Layer ore) { - if (ore.twilightForest && aWorld.provider.dimensionId == 7) { - value = true; - } - } - - mDimensionMap.put(aDimName, value); - return value; - } - return tAllowed; - } -} diff --git a/src/main/java/gregtech/asm/GTCorePlugin.java b/src/main/java/gregtech/asm/GTCorePlugin.java index 0f50b78f1d..1d44fb9017 100644 --- a/src/main/java/gregtech/asm/GTCorePlugin.java +++ b/src/main/java/gregtech/asm/GTCorePlugin.java @@ -7,21 +7,20 @@ import java.util.Set; import net.minecraftforge.common.config.Configuration; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; import com.gtnewhorizon.gtnhmixins.IEarlyMixinLoader; +import bartworks.common.configs.ConfigHandler; import cpw.mods.fml.relauncher.FMLInjectionData; import cpw.mods.fml.relauncher.IFMLLoadingPlugin; import gregtech.mixin.Mixin; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.preloader.PreloaderCore; import gtPlusPlus.preloader.asm.AsmConfig; -import gtPlusPlus.preloader.asm.Preloader_DummyContainer; +import gtPlusPlus.preloader.asm.PreloaderDummyContainer; import gtPlusPlus.preloader.asm.transformers.Preloader_Transformer_Handler; @IFMLLoadingPlugin.SortingIndex(Integer.MAX_VALUE) // Load as late as possible (after fastcraft/OptiFine). @IFMLLoadingPlugin.MCVersion("1.7.10") -@IFMLLoadingPlugin.TransformerExclusions({ "com.github.bartimaeusnek.bartworks.ASM", "gtPlusPlus.preloader", - "gregtech.asm" }) +@IFMLLoadingPlugin.TransformerExclusions({ "bartworks.ASM", "gtPlusPlus.preloader", "gregtech.asm" }) @IFMLLoadingPlugin.Name("GregTech 5 Unofficial core plugin") @SuppressWarnings("unused") // loaded by FML public class GTCorePlugin implements IFMLLoadingPlugin, IEarlyMixinLoader { @@ -44,7 +43,7 @@ public class GTCorePlugin implements IFMLLoadingPlugin, IEarlyMixinLoader { @Override public String getModContainerClass() { - return Preloader_DummyContainer.class.getName(); + return PreloaderDummyContainer.class.getName(); } @Override @@ -55,12 +54,12 @@ public class GTCorePlugin implements IFMLLoadingPlugin, IEarlyMixinLoader { @Override public void injectData(Map data) { // GT++ - CORE_Preloader.DEV_ENVIRONMENT = !(boolean) data.get("runtimeDeobfuscationEnabled"); + PreloaderCore.DEV_ENVIRONMENT = !(boolean) data.get("runtimeDeobfuscationEnabled"); File mcDir = (File) data.get("mcLocation"); if (mcDir != null && mcDir.exists()) { - CORE_Preloader.setMinecraftDirectory(mcDir); + PreloaderCore.setMinecraftDirectory(mcDir); } - CORE_Preloader.DEBUG_MODE = AsmConfig.debugMode; + PreloaderCore.DEBUG_MODE = AsmConfig.debugMode; } @Override diff --git a/src/main/java/gregtech/client/GTGUIClientConfig.java b/src/main/java/gregtech/client/GTGUIClientConfig.java new file mode 100644 index 0000000000..e210f6f25f --- /dev/null +++ b/src/main/java/gregtech/client/GTGUIClientConfig.java @@ -0,0 +1,29 @@ +package gregtech.client; + +import static gregtech.api.enums.Mods.GregTech; + +import net.minecraft.client.gui.GuiScreen; + +import com.gtnewhorizon.gtnhlib.config.ConfigException; +import com.gtnewhorizon.gtnhlib.config.SimpleGuiConfig; + +import gregtech.common.config.client.ConfigColorModulation; +import gregtech.common.config.client.ConfigInterface; +import gregtech.common.config.client.ConfigPreference; +import gregtech.common.config.client.ConfigRender; +import gregtech.common.config.client.ConfigWaila; + +public class GTGUIClientConfig extends SimpleGuiConfig { + + public GTGUIClientConfig(GuiScreen parentScreen) throws ConfigException { + super( + parentScreen, + GregTech.ID, + "GregTech", + ConfigColorModulation.class, + ConfigInterface.class, + ConfigPreference.class, + ConfigRender.class, + ConfigWaila.class); + } +} diff --git a/src/main/java/gregtech/client/GTGuiFactory.java b/src/main/java/gregtech/client/GTGuiFactory.java new file mode 100644 index 0000000000..e8749f20d2 --- /dev/null +++ b/src/main/java/gregtech/client/GTGuiFactory.java @@ -0,0 +1,13 @@ +package gregtech.client; + +import net.minecraft.client.gui.GuiScreen; + +import com.gtnewhorizon.gtnhlib.config.SimpleGuiFactory; + +public class GTGuiFactory implements SimpleGuiFactory { + + @Override + public Class mainConfigGuiClass() { + return GTGUIClientConfig.class; + } +} diff --git a/src/main/java/gregtech/client/GTSoundLoop.java b/src/main/java/gregtech/client/GTSoundLoop.java new file mode 100644 index 0000000000..23569a83e4 --- /dev/null +++ b/src/main/java/gregtech/client/GTSoundLoop.java @@ -0,0 +1,80 @@ +package gregtech.client; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.MovingSound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.multitileentity.machine.MultiTileBasicMachine; + +@SideOnly(Side.CLIENT) +public class GTSoundLoop extends MovingSound { + + private static final float VOLUME_RAMP = 0.0625f; + private final boolean whileActive; + private final boolean whileInactive; + private final int worldID; + private boolean fadeMe = false; + + public GTSoundLoop(ResourceLocation p_i45104_1_, IGregTechTileEntity base, boolean stopWhenActive, + boolean stopWhenInactive) { + super(p_i45104_1_); + this.whileActive = stopWhenActive; + this.whileInactive = stopWhenInactive; + xPosF = base.getXCoord(); + yPosF = base.getYCoord(); + zPosF = base.getZCoord(); + worldID = base.getWorld().provider.dimensionId; + repeat = true; + volume = VOLUME_RAMP; + } + + public GTSoundLoop(ResourceLocation sound, MultiTileBasicMachine base, boolean stopWhenActive, + boolean stopWhenInactive) { + super(sound); + this.whileActive = stopWhenActive; + this.whileInactive = stopWhenInactive; + xPosF = base.getXCoord(); + yPosF = base.getYCoord(); + zPosF = base.getZCoord(); + worldID = base.getWorld().provider.dimensionId; + repeat = true; + volume = VOLUME_RAMP; + } + + @Override + public void update() { + if (donePlaying) { + return; + } + if (fadeMe) { + volume -= VOLUME_RAMP; + if (volume <= 0) { + volume = 0; + donePlaying = true; + } + } else if (volume < 1) { + volume += VOLUME_RAMP; + } + World world = Minecraft.getMinecraft().thePlayer.worldObj; + donePlaying = world.provider.dimensionId != worldID + || !world.checkChunksExist((int) xPosF, (int) yPosF, (int) zPosF, (int) xPosF, (int) yPosF, (int) zPosF); + if (donePlaying) return; + TileEntity tile = world.getTileEntity((int) xPosF, (int) yPosF, (int) zPosF); + if ((tile instanceof IGregTechTileEntity)) { + fadeMe |= ((IGregTechTileEntity) tile).isActive() ? whileActive : whileInactive; + return; + } + + if ((tile instanceof MultiTileBasicMachine)) { + fadeMe |= ((MultiTileBasicMachine) tile).isActive() ? whileActive : whileInactive; + return; + } + + donePlaying = true; + } +} diff --git a/src/main/java/gregtech/client/GTTooltipHandler.java b/src/main/java/gregtech/client/GTTooltipHandler.java new file mode 100644 index 0000000000..7236550058 --- /dev/null +++ b/src/main/java/gregtech/client/GTTooltipHandler.java @@ -0,0 +1,195 @@ +package gregtech.client; + +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.AQUA; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.BLUE; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.BOLD; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_BLUE; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_GRAY; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_GREEN; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_PURPLE; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_RED; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.GOLD; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.GRAY; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.GREEN; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.LIGHT_PURPLE; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.OBFUSCATED; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.RED; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.UNDERLINE; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.WHITE; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.YELLOW; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.addItemTooltip; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.animatedText; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.chain; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.text; + +import java.util.function.Supplier; + +import net.minecraft.item.ItemStack; + +public class GTTooltipHandler { + + public static void registerTieredTooltip(ItemStack item, Tier tier) { + addItemTooltip(item, tier.tooltip); + } + + public enum Tier { + + ULV(text(WHITE + "ULV-Tier")), + LV(text(GRAY + "LV-Tier")), + MV(text(GOLD + "MV-Tier")), + HV(text(YELLOW + "HV-Tier")), + EV(text(DARK_GRAY + "EV-Tier")), + IV(text(GREEN + "IV-Tier")), + LuV(text(LIGHT_PURPLE + "LuV-Tier")), + ZPM(text(AQUA + "ZPM-Tier")), + UV(text(DARK_GREEN + "UV-Tier")), + UHV(text(DARK_RED + "UHV-Tier")), + UEV(text(DARK_PURPLE + "UEV-Tier")), + UIV(text(DARK_BLUE + BOLD + "UIV-Tier")), + UMV(text(RED + BOLD + UNDERLINE + "UMV-Tier")), + UXV(animatedText("UXV-Tier", 1, 100, DARK_PURPLE + BOLD + UNDERLINE, DARK_RED + UNDERLINE + BOLD)), + MAX(chain( + animatedText( + "X", + 1, + 100, + LIGHT_PURPLE + BOLD + OBFUSCATED + UNDERLINE, + RED + BOLD + OBFUSCATED + UNDERLINE, + GOLD + OBFUSCATED + BOLD + UNDERLINE, + YELLOW + OBFUSCATED + BOLD + UNDERLINE, + GREEN + OBFUSCATED + BOLD + UNDERLINE, + AQUA + OBFUSCATED + BOLD + UNDERLINE, + BLUE + OBFUSCATED + BOLD + UNDERLINE), + animatedText( + "MAX-Tier", + 1, + 100, + RED + BOLD + UNDERLINE, + GOLD + BOLD + UNDERLINE, + YELLOW + BOLD + UNDERLINE, + GREEN + BOLD + UNDERLINE, + AQUA + BOLD + UNDERLINE, + BLUE + BOLD + UNDERLINE, + LIGHT_PURPLE + BOLD + UNDERLINE), + animatedText( + "X", + 1, + 100, + GOLD + OBFUSCATED + BOLD + UNDERLINE, + YELLOW + OBFUSCATED + BOLD + UNDERLINE, + GREEN + OBFUSCATED + BOLD + UNDERLINE, + AQUA + OBFUSCATED + BOLD + UNDERLINE, + BLUE + OBFUSCATED + BOLD + UNDERLINE, + LIGHT_PURPLE + OBFUSCATED + BOLD + UNDERLINE, + RED + OBFUSCATED + BOLD + UNDERLINE))), + ERV(chain( + animatedText( + "E", + 1, + 100, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), + animatedText( + "R", + 1, + 100, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), + animatedText( + "R", + 1, + 200, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), + animatedText( + "O", + 1, + 150, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), + animatedText( + "R", + 1, + 150, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), + animatedText( + "-", + 1, + 150, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), + animatedText( + "T", + 1, + 200, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), + animatedText( + "i", + 1, + 100, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), + animatedText( + "e", + 1, + 150, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), + animatedText( + "r", + 1, + 100, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_RED + BOLD + UNDERLINE, + DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE))); + + private final Supplier tooltip; + + Tier(Supplier tooltip) { + this.tooltip = tooltip; + } + } +} diff --git a/src/main/java/gregtech/client/GT_GUI_ClientConfig.java b/src/main/java/gregtech/client/GT_GUI_ClientConfig.java deleted file mode 100644 index dfb4b2800c..0000000000 --- a/src/main/java/gregtech/client/GT_GUI_ClientConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package gregtech.client; - -import static gregtech.api.enums.Mods.GregTech; - -import net.minecraft.client.gui.GuiScreen; - -import com.gtnewhorizon.gtnhlib.config.ConfigException; -import com.gtnewhorizon.gtnhlib.config.SimpleGuiConfig; - -import gregtech.common.config.client.ConfigColorModulation; -import gregtech.common.config.client.ConfigInterface; -import gregtech.common.config.client.ConfigPreference; -import gregtech.common.config.client.ConfigRender; -import gregtech.common.config.client.ConfigWaila; - -public class GT_GUI_ClientConfig extends SimpleGuiConfig { - - public GT_GUI_ClientConfig(GuiScreen parentScreen) throws ConfigException { - super( - parentScreen, - GregTech.ID, - "GregTech", - ConfigColorModulation.class, - ConfigInterface.class, - ConfigPreference.class, - ConfigRender.class, - ConfigWaila.class); - } -} diff --git a/src/main/java/gregtech/client/GT_GuiFactory.java b/src/main/java/gregtech/client/GT_GuiFactory.java deleted file mode 100644 index ecf317a6fa..0000000000 --- a/src/main/java/gregtech/client/GT_GuiFactory.java +++ /dev/null @@ -1,13 +0,0 @@ -package gregtech.client; - -import net.minecraft.client.gui.GuiScreen; - -import com.gtnewhorizon.gtnhlib.config.SimpleGuiFactory; - -public class GT_GuiFactory implements SimpleGuiFactory { - - @Override - public Class mainConfigGuiClass() { - return GT_GUI_ClientConfig.class; - } -} diff --git a/src/main/java/gregtech/client/GT_SoundLoop.java b/src/main/java/gregtech/client/GT_SoundLoop.java deleted file mode 100644 index 905f2c20d3..0000000000 --- a/src/main/java/gregtech/client/GT_SoundLoop.java +++ /dev/null @@ -1,80 +0,0 @@ -package gregtech.client; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.audio.MovingSound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.multitileentity.machine.MultiTileBasicMachine; - -@SideOnly(Side.CLIENT) -public class GT_SoundLoop extends MovingSound { - - private static final float VOLUME_RAMP = 0.0625f; - private final boolean whileActive; - private final boolean whileInactive; - private final int worldID; - private boolean fadeMe = false; - - public GT_SoundLoop(ResourceLocation p_i45104_1_, IGregTechTileEntity base, boolean stopWhenActive, - boolean stopWhenInactive) { - super(p_i45104_1_); - this.whileActive = stopWhenActive; - this.whileInactive = stopWhenInactive; - xPosF = base.getXCoord(); - yPosF = base.getYCoord(); - zPosF = base.getZCoord(); - worldID = base.getWorld().provider.dimensionId; - repeat = true; - volume = VOLUME_RAMP; - } - - public GT_SoundLoop(ResourceLocation sound, MultiTileBasicMachine base, boolean stopWhenActive, - boolean stopWhenInactive) { - super(sound); - this.whileActive = stopWhenActive; - this.whileInactive = stopWhenInactive; - xPosF = base.getXCoord(); - yPosF = base.getYCoord(); - zPosF = base.getZCoord(); - worldID = base.getWorld().provider.dimensionId; - repeat = true; - volume = VOLUME_RAMP; - } - - @Override - public void update() { - if (donePlaying) { - return; - } - if (fadeMe) { - volume -= VOLUME_RAMP; - if (volume <= 0) { - volume = 0; - donePlaying = true; - } - } else if (volume < 1) { - volume += VOLUME_RAMP; - } - World world = Minecraft.getMinecraft().thePlayer.worldObj; - donePlaying = world.provider.dimensionId != worldID - || !world.checkChunksExist((int) xPosF, (int) yPosF, (int) zPosF, (int) xPosF, (int) yPosF, (int) zPosF); - if (donePlaying) return; - TileEntity tile = world.getTileEntity((int) xPosF, (int) yPosF, (int) zPosF); - if ((tile instanceof IGregTechTileEntity)) { - fadeMe |= ((IGregTechTileEntity) tile).isActive() ? whileActive : whileInactive; - return; - } - - if ((tile instanceof MultiTileBasicMachine)) { - fadeMe |= ((MultiTileBasicMachine) tile).isActive() ? whileActive : whileInactive; - return; - } - - donePlaying = true; - } -} diff --git a/src/main/java/gregtech/client/GT_TooltipHandler.java b/src/main/java/gregtech/client/GT_TooltipHandler.java deleted file mode 100644 index c527729abd..0000000000 --- a/src/main/java/gregtech/client/GT_TooltipHandler.java +++ /dev/null @@ -1,195 +0,0 @@ -package gregtech.client; - -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.AQUA; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.BLUE; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.BOLD; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_BLUE; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_GRAY; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_GREEN; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_PURPLE; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.DARK_RED; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.GOLD; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.GRAY; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.GREEN; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.LIGHT_PURPLE; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.OBFUSCATED; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.RED; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.UNDERLINE; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.WHITE; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.YELLOW; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.addItemTooltip; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.animatedText; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.chain; -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.text; - -import java.util.function.Supplier; - -import net.minecraft.item.ItemStack; - -public class GT_TooltipHandler { - - public static void registerTieredTooltip(ItemStack item, Tier tier) { - addItemTooltip(item, tier.tooltip); - } - - public enum Tier { - - ULV(text(WHITE + "ULV-Tier")), - LV(text(GRAY + "LV-Tier")), - MV(text(GOLD + "MV-Tier")), - HV(text(YELLOW + "HV-Tier")), - EV(text(DARK_GRAY + "EV-Tier")), - IV(text(GREEN + "IV-Tier")), - LuV(text(LIGHT_PURPLE + "LuV-Tier")), - ZPM(text(AQUA + "ZPM-Tier")), - UV(text(DARK_GREEN + "UV-Tier")), - UHV(text(DARK_RED + "UHV-Tier")), - UEV(text(DARK_PURPLE + "UEV-Tier")), - UIV(text(DARK_BLUE + BOLD + "UIV-Tier")), - UMV(text(RED + BOLD + UNDERLINE + "UMV-Tier")), - UXV(animatedText("UXV-Tier", 1, 100, DARK_PURPLE + BOLD + UNDERLINE, DARK_RED + UNDERLINE + BOLD)), - MAX(chain( - animatedText( - "X", - 1, - 100, - LIGHT_PURPLE + BOLD + OBFUSCATED + UNDERLINE, - RED + BOLD + OBFUSCATED + UNDERLINE, - GOLD + OBFUSCATED + BOLD + UNDERLINE, - YELLOW + OBFUSCATED + BOLD + UNDERLINE, - GREEN + OBFUSCATED + BOLD + UNDERLINE, - AQUA + OBFUSCATED + BOLD + UNDERLINE, - BLUE + OBFUSCATED + BOLD + UNDERLINE), - animatedText( - "MAX-Tier", - 1, - 100, - RED + BOLD + UNDERLINE, - GOLD + BOLD + UNDERLINE, - YELLOW + BOLD + UNDERLINE, - GREEN + BOLD + UNDERLINE, - AQUA + BOLD + UNDERLINE, - BLUE + BOLD + UNDERLINE, - LIGHT_PURPLE + BOLD + UNDERLINE), - animatedText( - "X", - 1, - 100, - GOLD + OBFUSCATED + BOLD + UNDERLINE, - YELLOW + OBFUSCATED + BOLD + UNDERLINE, - GREEN + OBFUSCATED + BOLD + UNDERLINE, - AQUA + OBFUSCATED + BOLD + UNDERLINE, - BLUE + OBFUSCATED + BOLD + UNDERLINE, - LIGHT_PURPLE + OBFUSCATED + BOLD + UNDERLINE, - RED + OBFUSCATED + BOLD + UNDERLINE))), - ERV(chain( - animatedText( - "E", - 1, - 100, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), - animatedText( - "R", - 1, - 100, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), - animatedText( - "R", - 1, - 200, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), - animatedText( - "O", - 1, - 150, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), - animatedText( - "R", - 1, - 150, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), - animatedText( - "-", - 1, - 150, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), - animatedText( - "T", - 1, - 200, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), - animatedText( - "i", - 1, - 100, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), - animatedText( - "e", - 1, - 150, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE), - animatedText( - "r", - 1, - 100, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_RED + BOLD + UNDERLINE, - DARK_GRAY + OBFUSCATED + BOLD + UNDERLINE))); - - private final Supplier tooltip; - - Tier(Supplier tooltip) { - this.tooltip = tooltip; - } - } -} diff --git a/src/main/java/gregtech/common/GTClient.java b/src/main/java/gregtech/common/GTClient.java new file mode 100644 index 0000000000..e5af28dacd --- /dev/null +++ b/src/main/java/gregtech/common/GTClient.java @@ -0,0 +1,1073 @@ +// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. +// Jad home page: http://www.kpdus.com/jad.html +// Decompiler options: packimports(3) +// Source File Name: GT_Client.java + +package gregtech.common; + +import static gregtech.api.enums.GTValues.calculateMaxPlasmaTurbineEfficiency; +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.enums.Mods.GregTech; +import static org.lwjgl.opengl.GL11.GL_LINE_LOOP; + +import java.net.URL; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Scanner; +import java.util.function.Function; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.GLAllocation; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.resources.IReloadableResourceManager; +import net.minecraft.client.resources.IResourceManager; +import net.minecraft.client.resources.IResourceManagerReloadListener; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; +import net.minecraftforge.client.event.DrawBlockHighlightEvent; +import net.minecraftforge.client.event.sound.SoundSetupEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL20; + +import com.glodblock.github.nei.recipes.FluidRecipe; +import com.glodblock.github.nei.recipes.extractor.GregTech5RecipeExtractor; +import com.gtnewhorizon.structurelib.alignment.IAlignment; +import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; + +import appeng.api.util.IOrientable; +import appeng.tile.misc.TileInterface; +import codechicken.lib.vec.Rotation; +import codechicken.lib.vec.Scale; +import codechicken.lib.vec.Transformation; +import codechicken.lib.vec.Translation; +import cpw.mods.fml.client.event.ConfigChangedEvent; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; +import cpw.mods.fml.common.network.FMLNetworkEvent; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.gui.GUIColorOverride; +import gregtech.api.gui.modularui.FallbackableSteamTexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.ITurnable; +import gregtech.api.items.MetaGeneratedItem; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.multitileentity.multiblock.base.MultiBlockPart; +import gregtech.api.net.GTPacketClientPreference; +import gregtech.api.objects.GTItemStack; +import gregtech.api.recipe.RecipeCategory; +import gregtech.api.util.ColorsMetadataSection; +import gregtech.api.util.ColorsMetadataSectionSerializer; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTClientPreference; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTMusicSystem; +import gregtech.api.util.GTPlayedSound; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder; +import gregtech.client.SeekingOggCodec; +import gregtech.common.blocks.BlockFrameBox; +import gregtech.common.blocks.ItemMachines; +import gregtech.common.render.DroneRender; +import gregtech.common.render.FlaskRenderer; +import gregtech.common.render.FluidDisplayStackRenderer; +import gregtech.common.render.GTCapeRenderer; +import gregtech.common.render.GTRendererBlock; +import gregtech.common.render.LaserRenderer; +import gregtech.common.render.MetaGeneratedToolRenderer; +import gregtech.common.render.MultiTileRenderer; +import gregtech.common.render.PollutionRenderer; +import gregtech.common.render.WormholeRenderer; +import gregtech.common.render.items.MetaGeneratedItemRenderer; +import gregtech.common.tileentities.debug.MTEAdvDebugStructureWriter; +import gregtech.loaders.ExtraIcons; +import gregtech.loaders.misc.GTBees; +import gregtech.loaders.preload.GTPreLoad; +import gregtech.nei.GTNEIConfig; +import ic2.api.tile.IWrenchable; +import paulscode.sound.SoundSystemConfig; +import paulscode.sound.SoundSystemException; + +// Referenced classes of package gregtech.common: +// GTProxy + +public class GTClient extends GTProxy implements Runnable { + + public static final String GTNH_CAPE_LIST_URL = "https://raw.githubusercontent.com/GTNewHorizons/CustomGTCapeHook-Cape-List/master/capes.txt"; + public static final String GT_CAPE_LIST_URL = "http://gregtech.overminddl1.com/com/gregoriust/gregtech/supporterlist.txt"; + private static final List ROTATABLE_VANILLA_BLOCKS; + + private static final int[][] GRID_SWITCH_TABLE = new int[][] { { 0, 5, 3, 1, 2, 4 }, { 5, 0, 1, 3, 2, 4 }, + { 1, 3, 0, 5, 2, 4 }, { 3, 1, 5, 0, 2, 4 }, { 4, 2, 3, 1, 0, 5 }, { 2, 4, 3, 1, 5, 0 }, }; + + // don't ask. these "just works" + private static final Transformation ROTATION_MARKER_TRANSFORM_CENTER = new Scale(0.5); + private static final Transformation[] ROTATION_MARKER_TRANSFORMS_SIDES_TRANSFORMS = { + new Scale(0.25).with(new Translation(0, 0, 0.375)) + .compile(), + new Scale(0.25).with(new Translation(0.375, 0, 0)) + .compile(), + new Scale(0.25).with(new Translation(0, 0, -0.375)) + .compile(), + new Scale(0.25).with(new Translation(-0.375, 0, 0)) + .compile(), }; + private static final int[] ROTATION_MARKER_TRANSFORMS_SIDES = { -1, -1, 2, 0, 3, 1, -1, -1, 0, 2, 3, 1, 0, 2, -1, + -1, 3, 1, 2, 0, -1, -1, 3, 1, 1, 3, 2, 0, -1, -1, 3, 1, 2, 0, -1, -1 }; + private static final Transformation[] ROTATION_MARKER_TRANSFORMS_CORNER = { + new Scale(0.25).with(new Translation(0.375, 0, 0.375)) + .compile(), + new Scale(0.25).with(new Translation(-0.375, 0, 0.375)) + .compile(), + new Scale(0.25).with(new Translation(0.375, 0, -0.375)) + .compile(), + new Scale(0.25).with(new Translation(-0.375, 0, -0.375)) + .compile(), }; + private static int rotationMarkerDisplayList; + private static boolean rotationMarkerDisplayListCompiled = false; + + static { + ROTATABLE_VANILLA_BLOCKS = Arrays.asList( + Blocks.piston, + Blocks.sticky_piston, + Blocks.furnace, + Blocks.lit_furnace, + Blocks.dropper, + Blocks.dispenser, + Blocks.chest, + Blocks.trapped_chest, + Blocks.ender_chest, + Blocks.hopper, + Blocks.pumpkin, + Blocks.lit_pumpkin); + } + + private final HashSet mCapeList = new HashSet<>(); + public static final PollutionRenderer mPollutionRenderer = new PollutionRenderer(); + private final GTCapeRenderer mCapeRenderer; + private final List mPosR; + private final List mPosG; + private final List mPosB; + private final List mPosA = Collections.emptyList(); + private final List mNegR; + private final List mNegG; + private final List mNegB; + private final List mNegA = Collections.emptyList(); + private final List mMoltenPosR; + private final List mMoltenPosG; + private final List mMoltenPosB; + private final List mMoltenPosA = Collections.emptyList(); + private final List mMoltenNegR; + private final List mMoltenNegG; + private final List mMoltenNegB; + private final List mMoltenNegA = Collections.emptyList(); + private long mAnimationTick; + /** + * This is the place to def the value used below + **/ + private long afterSomeTime; + + private boolean mAnimationDirection; + private GTClientPreference mPreference; + private boolean mFirstTick = false; + public static final int ROTATION_MARKER_RESOLUTION = 120; + private int mReloadCount; + private float renderTickTime; + public static MetaGeneratedItemRenderer metaGeneratedItemRenderer; + + public GTClient() { + mCapeRenderer = new GTCapeRenderer(mCapeList); + mAnimationTick = 0L; + mAnimationDirection = false; + mPosR = Arrays.asList( + Materials.Enderium, + Materials.Vinteum, + Materials.Uranium235, + Materials.InfusedGold, + Materials.Plutonium241, + Materials.NaquadahEnriched, + Materials.Naquadria, + Materials.InfusedOrder, + Materials.Force, + Materials.Pyrotheum, + Materials.Sunnarium, + Materials.Glowstone, + Materials.Thaumium, + Materials.InfusedVis, + Materials.InfusedAir, + Materials.InfusedFire, + Materials.FierySteel, + Materials.Firestone); + mPosG = Arrays.asList( + Materials.Enderium, + Materials.Vinteum, + Materials.Uranium235, + Materials.InfusedGold, + Materials.Plutonium241, + Materials.NaquadahEnriched, + Materials.Naquadria, + Materials.InfusedOrder, + Materials.Force, + Materials.Pyrotheum, + Materials.Sunnarium, + Materials.Glowstone, + Materials.InfusedAir, + Materials.InfusedEarth); + mPosB = Arrays.asList( + Materials.Enderium, + Materials.Vinteum, + Materials.Uranium235, + Materials.InfusedGold, + Materials.Plutonium241, + Materials.NaquadahEnriched, + Materials.Naquadria, + Materials.InfusedOrder, + Materials.InfusedVis, + Materials.InfusedWater, + Materials.Thaumium); + mNegR = Arrays.asList(Materials.InfusedEntropy, Materials.NetherStar); + mNegG = Arrays.asList(Materials.InfusedEntropy, Materials.NetherStar); + mNegB = Arrays.asList(Materials.InfusedEntropy, Materials.NetherStar); + mMoltenPosR = Arrays.asList( + Materials.Enderium, + Materials.NetherStar, + Materials.Vinteum, + Materials.Uranium235, + Materials.InfusedGold, + Materials.Plutonium241, + Materials.NaquadahEnriched, + Materials.Naquadria, + Materials.InfusedOrder, + Materials.Force, + Materials.Pyrotheum, + Materials.Sunnarium, + Materials.Glowstone, + Materials.Thaumium, + Materials.InfusedVis, + Materials.InfusedAir, + Materials.InfusedFire, + Materials.FierySteel, + Materials.Firestone); + mMoltenPosG = Arrays.asList( + Materials.Enderium, + Materials.NetherStar, + Materials.Vinteum, + Materials.Uranium235, + Materials.InfusedGold, + Materials.Plutonium241, + Materials.NaquadahEnriched, + Materials.Naquadria, + Materials.InfusedOrder, + Materials.Force, + Materials.Pyrotheum, + Materials.Sunnarium, + Materials.Glowstone, + Materials.InfusedAir, + Materials.InfusedEarth); + mMoltenPosB = Arrays.asList( + Materials.Enderium, + Materials.NetherStar, + Materials.Vinteum, + Materials.Uranium235, + Materials.InfusedGold, + Materials.Plutonium241, + Materials.NaquadahEnriched, + Materials.Naquadria, + Materials.InfusedOrder, + Materials.InfusedVis, + Materials.InfusedWater, + Materials.Thaumium); + mMoltenNegR = Collections.singletonList(Materials.InfusedEntropy); + mMoltenNegG = Collections.singletonList(Materials.InfusedEntropy); + mMoltenNegB = Collections.singletonList(Materials.InfusedEntropy); + } + + private static boolean checkedForChicken = false; + + private static void drawGrid(DrawBlockHighlightEvent aEvent, boolean showCoverConnections, boolean aIsWrench, + boolean aIsSneaking) { + if (!checkedForChicken) { + try { + Class.forName("codechicken.lib.vec.Rotation"); + } catch (ClassNotFoundException e) { + return; + } + checkedForChicken = true; + } + + GL11.glPushMatrix(); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + // pause shader + int program = GL11.glGetInteger(GL20.GL_CURRENT_PROGRAM); + GL20.glUseProgram(0); + + MovingObjectPosition target = aEvent.target; + EntityPlayer player = aEvent.player; + double camX = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) aEvent.partialTicks; + double camY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) aEvent.partialTicks; + double camZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) aEvent.partialTicks; + GL11.glTranslated(target.blockX - (int) camX, target.blockY - (int) camY, target.blockZ - (int) camZ); + GL11.glTranslated(0.5D - (camX - (int) camX), 0.5D - (camY - (int) camY), 0.5D - (camZ - (int) camZ)); + final int tSideHit = target.sideHit; + Rotation.sideRotations[tSideHit].glApply(); + // draw grid + GL11.glTranslated(0.0D, -0.502D, 0.0D); + GL11.glLineWidth(2.5F); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 0.5F); + GL11.glBegin(GL11.GL_LINES); + GL11.glVertex3d(+.50D, .0D, -.25D); + GL11.glVertex3d(-.50D, .0D, -.25D); + GL11.glVertex3d(+.50D, .0D, +.25D); + GL11.glVertex3d(-.50D, .0D, +.25D); + GL11.glVertex3d(+.25D, .0D, -.50D); + GL11.glVertex3d(+.25D, .0D, +.50D); + GL11.glVertex3d(-.25D, .0D, -.50D); + GL11.glVertex3d(-.25D, .0D, +.50D); + final TileEntity tTile = player.worldObj.getTileEntity(target.blockX, target.blockY, target.blockZ); + final Block block = player.worldObj.getBlock(target.blockX, target.blockY, target.blockZ); + final int meta = player.worldObj.getBlockMetadata(target.blockX, target.blockY, target.blockZ); + + // draw connection indicators + int tConnections = 0; + if (tTile instanceof ICoverable iCoverable) { + if (showCoverConnections) { + for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { + if (iCoverable.getCoverIDAtSide(tSide) != 0) tConnections |= tSide.flag; + } + } else if (tTile instanceof BaseMetaTileEntity baseMetaTile && baseMetaTile.getAlignment() == null) { + if (!aIsSneaking) tConnections |= baseMetaTile.getFrontFacing().flag; + else if (baseMetaTile.getMetaTileEntity() instanceof MTEBasicMachine basicMachine) { + tConnections |= basicMachine.mMainFacing.flag; + } + } else if (tTile instanceof BaseMetaPipeEntity pipeEntity) tConnections = pipeEntity.mConnections; + } else if (tTile instanceof IWrenchable wrenchable) { + tConnections |= ForgeDirection.getOrientation(wrenchable.getFacing()).flag; + } else if (ROTATABLE_VANILLA_BLOCKS.contains(block)) { + tConnections |= ForgeDirection.getOrientation(meta).flag; + } else if (tTile instanceof TileInterface tileInterface) tConnections |= tileInterface.getUp() + .getOpposite().flag; + + if (tConnections != 0) { + for (ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { + if ((tConnections & tSide.flag) != 0) { + switch (GRID_SWITCH_TABLE[target.sideHit][tSide.ordinal()]) { + case 0 -> { + GL11.glVertex3d(+.25D, .0D, +.25D); + GL11.glVertex3d(-.25D, .0D, -.25D); + GL11.glVertex3d(-.25D, .0D, +.25D); + GL11.glVertex3d(+.25D, .0D, -.25D); + } + case 1 -> { + GL11.glVertex3d(-.25D, .0D, +.50D); + GL11.glVertex3d(+.25D, .0D, +.25D); + GL11.glVertex3d(-.25D, .0D, +.25D); + GL11.glVertex3d(+.25D, .0D, +.50D); + } + case 2 -> { + GL11.glVertex3d(-.50D, .0D, -.25D); + GL11.glVertex3d(-.25D, .0D, +.25D); + GL11.glVertex3d(-.50D, .0D, +.25D); + GL11.glVertex3d(-.25D, .0D, -.25D); + } + case 3 -> { + GL11.glVertex3d(-.25D, .0D, -.50D); + GL11.glVertex3d(+.25D, .0D, -.25D); + GL11.glVertex3d(-.25D, .0D, -.25D); + GL11.glVertex3d(+.25D, .0D, -.50D); + } + case 4 -> { + GL11.glVertex3d(+.50D, .0D, -.25D); + GL11.glVertex3d(+.25D, .0D, +.25D); + GL11.glVertex3d(+.50D, .0D, +.25D); + GL11.glVertex3d(+.25D, .0D, -.25D); + } + case 5 -> { + GL11.glVertex3d(+.50D, .0D, +.50D); + GL11.glVertex3d(+.25D, .0D, +.25D); + GL11.glVertex3d(+.50D, .0D, +.25D); + GL11.glVertex3d(+.25D, .0D, +.50D); + GL11.glVertex3d(+.50D, .0D, -.50D); + GL11.glVertex3d(+.25D, .0D, -.25D); + GL11.glVertex3d(+.50D, .0D, -.25D); + GL11.glVertex3d(+.25D, .0D, -.50D); + GL11.glVertex3d(-.50D, .0D, +.50D); + GL11.glVertex3d(-.25D, .0D, +.25D); + GL11.glVertex3d(-.50D, .0D, +.25D); + GL11.glVertex3d(-.25D, .0D, +.50D); + GL11.glVertex3d(-.50D, .0D, -.50D); + GL11.glVertex3d(-.25D, .0D, -.25D); + GL11.glVertex3d(-.50D, .0D, -.25D); + GL11.glVertex3d(-.25D, .0D, -.50D); + } + } + } + } + } + GL11.glEnd(); + // draw turning indicator + Function getTransform = (ForgeDirection direction) -> { + try { + if (direction.ordinal() == tSideHit) return new Transformation[] { ROTATION_MARKER_TRANSFORM_CENTER }; + else if (direction.getOpposite() + .ordinal() == tSideHit) { + return ROTATION_MARKER_TRANSFORMS_CORNER; + } else { + return new Transformation[] { + ROTATION_MARKER_TRANSFORMS_SIDES_TRANSFORMS[ROTATION_MARKER_TRANSFORMS_SIDES[tSideHit * 6 + + direction.ordinal()]] }; + } + } catch (ArrayIndexOutOfBoundsException e) { + return new Transformation[] {}; + } + + }; + + if (aIsWrench && tTile instanceof IAlignmentProvider) { + final IAlignment tAlignment = ((IAlignmentProvider) (tTile)).getAlignment(); + if (tAlignment != null) { + for (var transform : getTransform.apply(tAlignment.getDirection())) { + drawExtendedRotationMarker(transform, aIsSneaking, tAlignment); + } + } + } + if (aIsWrench && tTile instanceof IOrientable orientable + && !(tTile instanceof TileInterface) + && orientable.canBeRotated()) { + for (var transform : getTransform.apply(aIsSneaking ? orientable.getForward() : orientable.getUp())) { + drawExtendedRotationMarker(transform, aIsSneaking, orientable); + } + } + GL20.glUseProgram(program); // resume shader + GL11.glPopMatrix(); // get back to player center + } + + private static void drawExtendedRotationMarker(Transformation transform, boolean sneaking, IAlignment alignment) { + if (sneaking) { + if (alignment.isFlipChangeAllowed()) { + drawFlipMarker(transform); + } + } else { + if (alignment.isRotationChangeAllowed()) { + drawRotationMarker(transform); + } + } + } + + private static void drawExtendedRotationMarker(Transformation transform, boolean sneaking, IOrientable orientable) { + drawRotationMarker(transform); + } + + private static void drawRotationMarker(Transformation transform) { + if (!rotationMarkerDisplayListCompiled) { + rotationMarkerDisplayList = GLAllocation.generateDisplayLists(1); + compileRotationMarkerDisplayList(rotationMarkerDisplayList); + rotationMarkerDisplayListCompiled = true; + } + GL11.glPushMatrix(); + transform.glApply(); + GL11.glCallList(rotationMarkerDisplayList); + GL11.glPopMatrix(); + } + + private static void compileRotationMarkerDisplayList(int displayList) { + GL11.glNewList(displayList, GL11.GL_COMPILE); + GL11.glBegin(GL_LINE_LOOP); + for (int i = 0; i <= ROTATION_MARKER_RESOLUTION; i++) { + GL11.glVertex3d( + Math.cos(i * Math.PI * 1.75 / ROTATION_MARKER_RESOLUTION) * 0.4, + 0, + Math.sin(i * Math.PI * 1.75 / ROTATION_MARKER_RESOLUTION) * 0.4); + } + for (int i = ROTATION_MARKER_RESOLUTION; i >= 0; i--) { + GL11.glVertex3d( + Math.cos(i * Math.PI * 1.75 / ROTATION_MARKER_RESOLUTION) * 0.24, + 0, + Math.sin(i * Math.PI * 1.75 / ROTATION_MARKER_RESOLUTION) * 0.24); + } + GL11.glVertex3d(0.141114561800, 0, 0); + GL11.glVertex3d(0.32, 0, -0.178885438199); + GL11.glVertex3d(0.498885438199, 0, 0); + GL11.glEnd(); + GL11.glEndList(); + } + + private static void drawFlipMarker(Transformation transform) { + GL11.glPushMatrix(); + transform.glApply(); + final Tessellator t = Tessellator.instance; + // right shape + GL11.glLineStipple(4, (short) 0xAAAA); + GL11.glEnable(GL11.GL_LINE_STIPPLE); + t.startDrawing(GL11.GL_LINE_STRIP); + t.addVertex(0.1d, 0d, 0.04d); + t.addVertex(0.1d, 0d, 0.2d); + t.addVertex(0.35d, 0d, 0.35d); + t.addVertex(0.35d, 0d, -0.35d); + t.addVertex(0.1d, 0d, -0.2d); + t.addVertex(0.1d, 0d, -0.04d); + t.draw(); + GL11.glDisable(GL11.GL_LINE_STIPPLE); + // left shape + t.startDrawing(GL11.GL_LINE_STRIP); + t.addVertex(-0.1d, 0d, 0.04d); + t.addVertex(-0.1d, 0d, 0.2d); + t.addVertex(-0.35d, 0d, 0.35d); + t.addVertex(-0.35d, 0d, -0.35d); + t.addVertex(-0.1d, 0d, -0.2d); + t.addVertex(-0.1d, 0d, -0.04d); + t.draw(); + // arrow + t.startDrawing(GL11.GL_LINE_LOOP); + t.addVertex(0.15d, 0d, -0.04d); + t.addVertex(0.15d, 0d, -0.1d); + t.addVertex(0.25d, 0d, 0.d); + t.addVertex(0.15d, 0d, 0.1d); + t.addVertex(0.15d, 0d, 0.04d); + t.addVertex(-0.15d, 0d, 0.04d); + t.addVertex(-0.15d, 0d, 0.1d); + t.addVertex(-0.25d, 0d, 0.d); + t.addVertex(-0.15d, 0d, -0.1d); + t.addVertex(-0.15d, 0d, -0.04d); + t.draw(); + GL11.glPopMatrix(); + } + + @Override + public boolean isServerSide() { + return true; + } + + @Override + public boolean isClientSide() { + return true; + } + + @Override + public boolean isBukkitSide() { + return false; + } + + @Override + public EntityPlayer getThePlayer() { + return Minecraft.getMinecraft().thePlayer; + } + + @Override + public int addArmor(String aPrefix) { + return RenderingRegistry.addNewArmourRendererPrefix(aPrefix); + } + + @Override + public void onPreLoad() { + super.onPreLoad(); + + MinecraftForge.EVENT_BUS.register(new ExtraIcons()); + Minecraft.getMinecraft() + .getResourcePackRepository().rprMetadataSerializer + .registerMetadataSectionType(new ColorsMetadataSectionSerializer(), ColorsMetadataSection.class); + + new MTEAdvDebugStructureWriter.ForgeEventHandler(); + + final String[] arr = { "renadi", "hanakocz", "MysteryDump", "Flaver4", "x_Fame", "Peluche321", + "Goshen_Ithilien", "manf", "Bimgo", "leagris", "IAmMinecrafter02", "Cerous", "Devilin_Pixy", "Bkarlsson87", + "BadAlchemy", "CaballoCraft", "melanclock", "Resursator", "demanzke", "AndrewAmmerlaan", "Deathlycraft", + "Jirajha", "Axlegear", "kei_kouma", "Dracion", "dungi", "Dorfschwein", "Zero Tw0", "mattiagraz85", + "sebastiank30", "Plem", "invultri", "grillo126", "malcanteth", "Malevolence_", "Nicholas_Manuel", "Sirbab", + "kehaan", "bpgames123", "semig0d", "9000bowser", "Sovereignty89", "Kris1432", "xander_cage_", "samuraijp", + "bsaa", "SpwnX", "tworf", "Kadah", "kanni", "Stute", "Hegik", "Onlyme", "t3hero", "Hotchi", "jagoly", + "Nullav", "BH5432", "Sibmer", "inceee", "foxxx0", "Hartok", "TMSama", "Shlnen", "Carsso", "zessirb", + "meep310", "Seldron", "yttr1um", "hohounk", "freebug", "Sylphio", "jmarler", "Saberawr", "r00teniy", + "Neonbeta", "yinscape", "voooon24", "Quintine", "peach774", "lepthymo", "bildeman", "Kremnari", "Aerosalo", + "OndraSter", "oscares91", "mr10movie", "Daxx367x2", "EGERTRONx", "aka13_404", "Abouttabs", "Johnstaal", + "djshiny99", "megatronp", "DZCreeper", "Kane_Hart", "Truculent", "vidplace7", "simon6689", "MomoNasty", + "UnknownXLV", "goreacraft", "Fluttermine", "Daddy_Cecil", "MrMaleficus", "TigersFangs", "cublikefoot", + "chainman564", "NikitaBuker", "Misha999777", "25FiveDetail", "AntiCivilBoy", "michaelbrady", + "xXxIceFirexXx", "Speedynutty68", "GarretSidzaka", "HallowCharm977", "mastermind1919", "The_Hypersonic", + "diamondguy2798", "zF4ll3nPr3d4t0r", "CrafterOfMines57", "XxELIT3xSNIP3RxX", "SuterusuKusanagi", + "xavier0014", "adamros", "alexbegt" }; + for (String tName : arr) { + mCapeList.add(tName.toLowerCase()); + } + new Thread(this).start(); + + mPollutionRenderer.preLoad(); + + mPreference = new GTClientPreference(); + + Materials.initClient(); + } + + @Override + public void onLoad() { + super.onLoad(); + GTRendererBlock.register(); + new MultiTileRenderer(); + new DroneRender(); + new LaserRenderer(); + new WormholeRenderer(); + + metaGeneratedItemRenderer = new MetaGeneratedItemRenderer(); + for (MetaGeneratedItem item : MetaGeneratedItem.sInstances.values()) { + metaGeneratedItemRenderer.registerItem(item); + } + if (Forestry.isModLoaded()) { + metaGeneratedItemRenderer.registerItem(GTBees.combs); + } + new MetaGeneratedToolRenderer(); + new FlaskRenderer(); + new FluidDisplayStackRenderer(); + MinecraftForge.EVENT_BUS.register(new GTNEIConfig()); + } + + @Override + public void onPostLoad() { + super.onPostLoad(); + + // reobf doesn't work with lambda, so this must be a class + // noinspection Convert2Lambda + ((IReloadableResourceManager) Minecraft.getMinecraft() + .getResourceManager()).registerReloadListener(new IResourceManagerReloadListener() { + + @Override + public void onResourceManagerReload(IResourceManager l) { + GUIColorOverride.onResourceManagerReload(); + FallbackableSteamTexture.reload(); + GregTechAPI.sCoverBehaviors.values() + .forEach(CoverBehaviorBase::reloadColorOverride); + } + }); + } + + @Override + public void onLoadComplete() { + super.onLoadComplete(); + for (RecipeCategory category : RecipeCategory.ALL_RECIPE_CATEGORIES.values()) { + if (category.recipeMap.getFrontend() + .getNEIProperties().registerNEI) { + FluidRecipe.addRecipeMap( + category.unlocalizedName, + new GregTech5RecipeExtractor( + category.unlocalizedName.equals("gt.recipe.scanner") + || category.unlocalizedName.equals("gt.recipe.fakeAssemblylineProcess"))); + } + } + } + + @SubscribeEvent + @SuppressWarnings("unused") // used by the event bus + public void onSoundSetup(SoundSetupEvent event) { + try { + SoundSystemConfig.setCodec(SeekingOggCodec.EXTENSION, SeekingOggCodec.class); + } catch (SoundSystemException e) { + throw new RuntimeException(e); + } + } + + @Override + public void run() { + GTLog.out.println("GTMod: Downloading Cape List."); + try (final Scanner tScanner = new Scanner(new URL(GT_CAPE_LIST_URL).openStream())) { + while (tScanner.hasNextLine()) { + this.mCapeList.add( + tScanner.nextLine() + .toLowerCase()); + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + GTLog.out.println("GT New Horizons: Downloading Cape List."); + try (final Scanner tScanner = new Scanner(new URL(GTNH_CAPE_LIST_URL).openStream())) { + while (tScanner.hasNextLine()) { + final String tName = tScanner.nextLine() + .toLowerCase(); + if (tName.contains(":")) { + if (!this.mCapeList.contains(tName.substring(0, tName.indexOf(":")))) { + this.mCapeList.add(tName); + } + } else { + this.mCapeList.add(tName); + } + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + @Override + @SubscribeEvent + public void onClientConnectedToServerEvent(FMLNetworkEvent.ClientConnectedToServerEvent aEvent) { + mFirstTick = true; + mReloadCount++; + GTMusicSystem.ClientSystem.reset(); + // For utility methods elsewhere. + calculateMaxPlasmaTurbineEfficiency(); + } + + @Override + public void reloadNEICache() { + mReloadCount++; + } + + @Override + public int getNEIReloadCount() { + return mReloadCount; + } + + @SubscribeEvent + public void receiveRenderSpecialsEvent(net.minecraftforge.client.event.RenderPlayerEvent.Specials.Pre aEvent) { + mCapeRenderer.receiveRenderSpecialsEvent(aEvent); + } + + @SubscribeEvent + public void onPlayerTickEventClient(TickEvent.PlayerTickEvent aEvent) { + if ((aEvent.side.isClient()) && (aEvent.phase == TickEvent.Phase.END) && (!aEvent.player.isDead)) { + if (mFirstTick) { + mFirstTick = false; + GTValues.NW.sendToServer(new GTPacketClientPreference(mPreference)); + + if (!Minecraft.getMinecraft() + .isSingleplayer()) { + GTModHandler.removeAllIC2Recipes(); + } + } + afterSomeTime++; + if (afterSomeTime >= 100L) { + afterSomeTime = 0; + } + for (Iterator> iterator = GTUtility.sPlayedSoundMap.entrySet() + .iterator(); iterator.hasNext();) { + Map.Entry tEntry = iterator.next(); + if (tEntry.getValue() < 0) { + iterator.remove(); + } else { + tEntry.setValue(tEntry.getValue() - 1); + } + } + if (!GregTechAPI.mServerStarted) GregTechAPI.mServerStarted = true; + } + } + + @SubscribeEvent + public void onConfigChange(ConfigChangedEvent.OnConfigChangedEvent e) { + if (GregTech.ID.equals(e.modID) && "kekztech/client".equals(e.configID)) { + // refresh client preference and send to server, since it's the only config we allow changing at runtime. + mPreference = new GTClientPreference(); + GTPreLoad.loadClientConfig(); + if (e.isWorldRunning) GTValues.NW.sendToServer(new GTPacketClientPreference(mPreference)); + } + } + + @SubscribeEvent + public void onDrawBlockHighlight(DrawBlockHighlightEvent aEvent) { + final Block aBlock = aEvent.player.worldObj + .getBlock(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); + final TileEntity aTileEntity = aEvent.player.worldObj + .getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); + + if (GTUtility.isStackInList(aEvent.currentItem, GregTechAPI.sWrenchList)) { + if (aTileEntity instanceof ITurnable || ROTATABLE_VANILLA_BLOCKS.contains(aBlock) + || aTileEntity instanceof IWrenchable + || (aTileEntity instanceof IOrientable orientable && orientable.canBeRotated()) + || (aBlock instanceof BlockFrameBox)) drawGrid(aEvent, false, true, aEvent.player.isSneaking()); + return; + } + + // If there is no tile entity and the block is a frame box block, still draw the grid if a cover is held + if (aTileEntity == null && aBlock instanceof BlockFrameBox) { + if (GTUtility.isStackInList(aEvent.currentItem, GregTechAPI.sCovers.keySet())) { + drawGrid(aEvent, true, false, aEvent.player.isSneaking()); + } + return; + } + + if (!(aTileEntity instanceof ICoverable)) return; + + if (aEvent.player.isSneaking() && aTileEntity instanceof IGregTechTileEntity gtEntity + && gtEntity.getMetaTileEntity() instanceof MetaPipeEntity) { + if (aEvent.currentItem != null && aEvent.currentItem.getItem() instanceof ItemMachines + && GregTechAPI.METATILEENTITIES[aEvent.currentItem.getItemDamage()] instanceof MetaPipeEntity) { + drawGrid(aEvent, false, false, false); + } + } + + if (GTUtility.isStackInList(aEvent.currentItem, GregTechAPI.sWireCutterList) + || GTUtility.isStackInList(aEvent.currentItem, GregTechAPI.sSolderingToolList) + || (GTUtility.isStackInList(aEvent.currentItem, GregTechAPI.sSoftHammerList) + && aTileEntity instanceof MultiBlockPart) && aEvent.player.isSneaking()) { + if (((ICoverable) aTileEntity).getCoverIDAtSide(ForgeDirection.getOrientation(aEvent.target.sideHit)) == 0) + drawGrid(aEvent, false, false, aEvent.player.isSneaking()); + return; + } + + if ((aEvent.currentItem == null && aEvent.player.isSneaking()) + || GTUtility.isStackInList(aEvent.currentItem, GregTechAPI.sCrowbarList) + || GTUtility.isStackInList(aEvent.currentItem, GregTechAPI.sScrewdriverList)) { + if (((ICoverable) aTileEntity).getCoverIDAtSide(ForgeDirection.getOrientation(aEvent.target.sideHit)) == 0) + for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { + if (((ICoverable) aTileEntity).getCoverIDAtSide(tSide) > 0) { + drawGrid(aEvent, true, false, true); + return; + } + } + return; + } + + if (GTUtility.isStackInList(aEvent.currentItem, GregTechAPI.sCovers.keySet())) { + if (((ICoverable) aTileEntity).getCoverIDAtSide(ForgeDirection.getOrientation(aEvent.target.sideHit)) == 0) + drawGrid(aEvent, true, false, aEvent.player.isSneaking()); + } + + if (GTUtility.areStacksEqual(ItemList.Tool_Cover_Copy_Paste.get(1), aEvent.currentItem, true)) { + if (((ICoverable) aTileEntity).getCoverIDAtSide(ForgeDirection.getOrientation(aEvent.target.sideHit)) == 0) + drawGrid(aEvent, true, false, aEvent.player.isSneaking()); + } + } + + @SubscribeEvent + public void receiveRenderEvent(net.minecraftforge.client.event.RenderPlayerEvent.Pre aEvent) { + if (GTUtility.getFullInvisibility(aEvent.entityPlayer)) { + aEvent.setCanceled(true); + } + } + + @SubscribeEvent + public void onRenderStart(cpw.mods.fml.common.gameevent.TickEvent.RenderTickEvent aEvent) { + if (aEvent.phase == TickEvent.Phase.START) { + renderTickTime = aEvent.renderTickTime; + } + } + + @SubscribeEvent + public void onClientTickEvent(cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent aEvent) { + if (aEvent.phase == cpw.mods.fml.common.gameevent.TickEvent.Phase.END) { + GTMusicSystem.ClientSystem.tick(); + + if (changeDetected > 0) changeDetected--; + final int newHideValue = shouldHeldItemHideThings(); + if (newHideValue != hideValue) { + hideValue = newHideValue; + changeDetected = 5; + } + mAnimationTick++; + if (mAnimationTick % 50L == 0L) { + mAnimationDirection = !mAnimationDirection; + } + final int tDirection = mAnimationDirection ? 1 : -1; + for (Materials tMaterial : mPosR) { + tMaterial.mRGBa[0] = getSafeRGBValue(tMaterial.mRGBa[0], tDirection); + } + + for (Materials tMaterial : mPosG) { + tMaterial.mRGBa[1] = getSafeRGBValue(tMaterial.mRGBa[1], tDirection); + } + + for (Materials tMaterial : mPosB) { + tMaterial.mRGBa[2] = getSafeRGBValue(tMaterial.mRGBa[2], tDirection); + } + + for (Materials tMaterial : mPosA) { + tMaterial.mRGBa[3] = getSafeRGBValue(tMaterial.mRGBa[3], tDirection); + } + + for (Materials tMaterial : mNegR) { + tMaterial.mRGBa[0] = getSafeRGBValue(tMaterial.mRGBa[0], -tDirection); + } + + for (Materials tMaterial : mNegG) { + tMaterial.mRGBa[1] = getSafeRGBValue(tMaterial.mRGBa[1], -tDirection); + } + + for (Materials tMaterial : mNegB) { + tMaterial.mRGBa[2] = getSafeRGBValue(tMaterial.mRGBa[2], -tDirection); + } + + for (Materials tMaterial : mNegA) { + tMaterial.mRGBa[3] = getSafeRGBValue(tMaterial.mRGBa[3], -tDirection); + } + + for (Materials tMaterial : mMoltenPosR) { + tMaterial.mMoltenRGBa[0] = getSafeRGBValue(tMaterial.mMoltenRGBa[0], tDirection); + } + + for (Materials tMaterial : mMoltenPosG) { + tMaterial.mMoltenRGBa[1] = getSafeRGBValue(tMaterial.mMoltenRGBa[1], tDirection); + } + + for (Materials tMaterial : mMoltenPosB) { + tMaterial.mMoltenRGBa[2] = getSafeRGBValue(tMaterial.mMoltenRGBa[2], tDirection); + } + + for (Materials tMaterial : mMoltenPosA) { + tMaterial.mMoltenRGBa[3] = getSafeRGBValue(tMaterial.mMoltenRGBa[3], tDirection); + } + + for (Materials tMaterial : mMoltenNegR) { + tMaterial.mMoltenRGBa[0] = getSafeRGBValue(tMaterial.mMoltenRGBa[0], -tDirection); + } + + for (Materials tMaterial : mMoltenNegG) { + tMaterial.mMoltenRGBa[1] = getSafeRGBValue(tMaterial.mMoltenRGBa[1], -tDirection); + } + + for (Materials tMaterial : mMoltenNegB) { + tMaterial.mMoltenRGBa[2] = getSafeRGBValue(tMaterial.mMoltenRGBa[2], -tDirection); + } + + for (Materials tMaterial : mMoltenNegA) { + tMaterial.mMoltenRGBa[3] = getSafeRGBValue(tMaterial.mMoltenRGBa[3], -tDirection); + } + } + } + + public short getSafeRGBValue(short aRBG, int aDelta) { + int tmp = aRBG + aDelta; + if (tmp > 255) tmp = 255; + if (tmp < 0) tmp = 0; + return (short) tmp; + } + + @Override + public long getAnimationTicks() { + return mAnimationTick; + } + + @Override + public float getPartialRenderTicks() { + return renderTickTime; + } + + @Override + public void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ) { + if (GTUtility.isStackInvalid(aStack)) return; + String tString = SoundResource.NOTE_HARP.toString(); + int i = 0; + int j = mSoundItems.size(); + do { + if (i >= j) break; + if (GTUtility.areStacksEqual(mSoundItems.get(i), aStack)) { + tString = mSoundNames.get(i); + break; + } + i++; + } while (true); + if (tString.startsWith(SoundResource.RANDOM_EXPLODE.toString())) + if (aStack.stackSize == 3) tString = SoundResource.RANDOM_FUSE.toString(); + else if (aStack.stackSize == 2) tString = "random.old_explode"; + if (tString.startsWith("streaming.")) tString = switch (aStack.stackSize) { + case 1 -> // '\001' + tString + "13"; + case 2 -> // '\002' + tString + "cat"; + case 3 -> // '\003' + tString + "blocks"; + case 4 -> // '\004' + tString + "chirp"; + case 5 -> // '\005' + tString + "far"; + case 6 -> // '\006' + tString + "mall"; + case 7 -> // '\007' + tString + "mellohi"; + case 8 -> // '\b' + tString + "stal"; + case 9 -> // '\t' + tString + "strad"; + case 10 -> // '\n' + tString + "ward"; + case 11 -> // '\013' + tString + "11"; + case 12 -> // '\f' + tString + "wait"; + default -> tString + "wherearewenow"; + }; + if (tString.startsWith("streaming.")) { + new WorldSpawnedEventBuilder.RecordEffectEventBuilder().setIdentifier(tString.substring(10)) + .setPosition(aX, aY, aZ) + .run(); + } else { + new WorldSpawnedEventBuilder.SoundEventBuilder().setVolume(3f) + .setPitch( + tString.startsWith("note.") ? (float) Math.pow(2D, (double) (aStack.stackSize - 13) / 12D) : 1.0F) + .setIdentifier(tString) + .setPosition(aX, aY, aZ) + .run(); + } + } + + public static int hideValue = 0; + + /** + *

+ * Client tick counter that is set to 5 on hiding pipes and covers. + *

+ *

+ * It triggers a texture update next client tick when reaching 4, with provision for 3 more update tasks, spreading + * client change detection related work and network traffic on different ticks, until it reaches 0. + *

+ */ + public static int changeDetected = 0; + + private static int shouldHeldItemHideThings() { + try { + final EntityPlayer player = Minecraft.getMinecraft().thePlayer; + if (player == null) return 0; + final ItemStack tCurrentItem = player.getCurrentEquippedItem(); + if (tCurrentItem == null) return 0; + final int[] ids = OreDictionary.getOreIDs(tCurrentItem); + int hide = 0; + for (int i : ids) { + if (OreDictionary.getOreName(i) + .equals("craftingToolSolderingIron")) { + hide |= 0x1; + break; + } + } + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sWrenchList) + || GTUtility.isStackInList(tCurrentItem, GregTechAPI.sScrewdriverList) + || GTUtility.isStackInList(tCurrentItem, GregTechAPI.sHardHammerList) + || GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSoftHammerList) + || GTUtility.isStackInList(tCurrentItem, GregTechAPI.sWireCutterList) + || GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSolderingToolList) + || GTUtility.isStackInList(tCurrentItem, GregTechAPI.sCrowbarList) + || GregTechAPI.sCovers.containsKey(new GTItemStack(tCurrentItem)) + || (tCurrentItem.getItem() instanceof ItemMachines + && GregTechAPI.METATILEENTITIES[tCurrentItem.getItemDamage()] instanceof MetaPipeEntity + && player.isSneaking())) { + hide |= 0x2; + } + return hide; + } catch (Exception e) { + return 0; + } + } + + public static void recieveChunkPollutionPacket(ChunkCoordIntPair chunk, int pollution) { + mPollutionRenderer.processPacket(chunk, pollution); + } +} diff --git a/src/main/java/gregtech/common/GTDummyWorld.java b/src/main/java/gregtech/common/GTDummyWorld.java new file mode 100644 index 0000000000..733db0818c --- /dev/null +++ b/src/main/java/gregtech/common/GTDummyWorld.java @@ -0,0 +1,138 @@ +package gregtech.common; + +import java.io.File; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.profiler.Profiler; +import net.minecraft.world.World; +import net.minecraft.world.WorldProvider; +import net.minecraft.world.WorldSettings; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraft.world.chunk.storage.IChunkLoader; +import net.minecraft.world.storage.IPlayerFileData; +import net.minecraft.world.storage.ISaveHandler; +import net.minecraft.world.storage.WorldInfo; + +public class GTDummyWorld extends World { + + public GTIteratorRandom mRandom = new GTIteratorRandom(); + public ItemStack mLastSetBlock = null; + + public GTDummyWorld(ISaveHandler saveHandler, String name, WorldProvider worldProvider, WorldSettings worldSettings, + Profiler profiler) { + super(saveHandler, name, worldSettings, worldProvider, profiler); + this.rand = this.mRandom; + } + + public GTDummyWorld() { + this(new ISaveHandler() { + + @Override + public void saveWorldInfoWithPlayer(WorldInfo worldInfo, NBTTagCompound nbtTagCompound) {} + + @Override + public void saveWorldInfo(WorldInfo worldInfo) {} + + @Override + public WorldInfo loadWorldInfo() { + return null; + } + + @Override + public IPlayerFileData getSaveHandler() { + return null; + } + + @Override + public File getMapFileFromName(String mapName) { + return null; + } + + @Override + public IChunkLoader getChunkLoader(WorldProvider worldProvider) { + return null; + } + + @Override + public void flush() {} + + @Override + public void checkSessionLock() {} + + @Override + public String getWorldDirectoryName() { + return null; + } + + @Override + public File getWorldDirectory() { + return null; + } + }, "DUMMY_DIMENSION", null, new WorldSettings(new WorldInfo(new NBTTagCompound())), new Profiler()); + } + + @Override + protected IChunkProvider createChunkProvider() { + return null; + } + + @Override + public Entity getEntityByID(int aEntityID) { + return null; + } + + @Override + public boolean setBlock(int aX, int aY, int aZ, Block aBlock, int aMeta, int aFlags) { + this.mLastSetBlock = new ItemStack(aBlock, 1, aMeta); + return true; + } + + @Override + public float getSunBrightnessFactor(float p_72967_1_) { + return 1.0F; + } + + @Override + public BiomeGenBase getBiomeGenForCoords(int aX, int aZ) { + if ((aX >= 16) && (aZ >= 16) && (aX < 32) && (aZ < 32)) { + return BiomeGenBase.plains; + } + return BiomeGenBase.ocean; + } + + @Override + public int getFullBlockLightValue(int aX, int aY, int aZ) { + return 10; + } + + @Override + public Block getBlock(int aX, int aY, int aZ) { + if ((aX >= 16) && (aZ >= 16) && (aX < 32) && (aZ < 32)) { + return aY == 64 ? Blocks.grass : Blocks.air; + } + return Blocks.air; + } + + @Override + public int getBlockMetadata(int aX, int aY, int aZ) { + return 0; + } + + @Override + public boolean canBlockSeeTheSky(int aX, int aY, int aZ) { + if ((aX >= 16) && (aZ >= 16) && (aX < 32) && (aZ < 32)) { + return aY > 64; + } + return true; + } + + @Override + protected int func_152379_p() { + return 0; + } +} diff --git a/src/main/java/gregtech/common/GTIteratorRandom.java b/src/main/java/gregtech/common/GTIteratorRandom.java new file mode 100644 index 0000000000..1b14e5b8ff --- /dev/null +++ b/src/main/java/gregtech/common/GTIteratorRandom.java @@ -0,0 +1,17 @@ +package gregtech.common; + +import java.util.Random; + +public class GTIteratorRandom extends Random { + + private static final long serialVersionUID = 1L; + public int mIterationStep = 2147483647; + + @Override + public int nextInt(int aParameter) { + if ((this.mIterationStep == 0) || (this.mIterationStep > aParameter)) { + this.mIterationStep = aParameter; + } + return --this.mIterationStep; + } +} diff --git a/src/main/java/gregtech/common/GTNetwork.java b/src/main/java/gregtech/common/GTNetwork.java new file mode 100644 index 0000000000..30aaecc6cb --- /dev/null +++ b/src/main/java/gregtech/common/GTNetwork.java @@ -0,0 +1,154 @@ +package gregtech.common; + +import static gregtech.GTMod.GT_FML_LOGGER; + +import java.util.EnumMap; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; + +import com.google.common.io.ByteArrayDataInput; +import com.google.common.io.ByteStreams; + +import cpw.mods.fml.common.network.FMLEmbeddedChannel; +import cpw.mods.fml.common.network.FMLOutboundHandler; +import cpw.mods.fml.common.network.NetworkRegistry; +import cpw.mods.fml.common.network.internal.FMLProxyPacket; +import cpw.mods.fml.relauncher.Side; +import gregtech.api.enums.GTValues; +import gregtech.api.net.GTPacket; +import gregtech.api.net.GTPacketNew; +import gregtech.api.net.GTPacketTypes; +import gregtech.api.net.IGT_NetworkHandler; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.codec.MessageToMessageCodec; + +@ChannelHandler.Sharable +@SuppressWarnings("deprecation") +public class GTNetwork extends MessageToMessageCodec implements IGT_NetworkHandler { + + private final EnumMap mChannel; + private final GTPacket[] mSubChannels; + + public GTNetwork() { + this("GregTech", GTPacketTypes.referencePackets()); + } + + public GTNetwork(String channelName, GTPacketNew... packetTypes) { + this.mChannel = NetworkRegistry.INSTANCE.newChannel(channelName, this, new HandlerShared()); + final int lastPId = packetTypes[packetTypes.length - 1].getPacketID(); + this.mSubChannels = new GTPacket[lastPId + 1]; + for (GTPacket packetType : packetTypes) { + final int pId = packetType.getPacketID(); + if (this.mSubChannels[pId] == null) this.mSubChannels[pId] = packetType; + else throw new IllegalArgumentException("Duplicate Packet ID! " + pId); + } + } + + @Override + protected void encode(ChannelHandlerContext aContext, GTPacket aPacket, List aOutput) { + final ByteBuf tBuf = Unpooled.buffer() + .writeByte(aPacket.getPacketID()); + aPacket.encode(tBuf); + aOutput.add( + new FMLProxyPacket( + tBuf, + aContext.channel() + .attr(NetworkRegistry.FML_CHANNEL) + .get())); + } + + @Override + protected void decode(ChannelHandlerContext aContext, FMLProxyPacket aPacket, List aOutput) { + final ByteArrayDataInput aData = ByteStreams.newDataInput( + aPacket.payload() + .array()); + final GTPacket tPacket = this.mSubChannels[aData.readByte()].decode(aData); + tPacket.setINetHandler(aPacket.handler()); + aOutput.add(tPacket); + } + + @Override + public void sendToPlayer(GTPacket aPacket, EntityPlayerMP aPlayer) { + if (aPacket == null) { + GT_FML_LOGGER.info("packet null"); + return; + } + if (aPlayer == null) { + GT_FML_LOGGER.info("player null"); + return; + } + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGET) + .set(FMLOutboundHandler.OutboundTarget.PLAYER); + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) + .set(aPlayer); + this.mChannel.get(Side.SERVER) + .writeAndFlush(aPacket); + } + + @Override + public void sendToAllAround(GTPacket aPacket, NetworkRegistry.TargetPoint aPosition) { + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGET) + .set(FMLOutboundHandler.OutboundTarget.ALLAROUNDPOINT); + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) + .set(aPosition); + this.mChannel.get(Side.SERVER) + .writeAndFlush(aPacket); + } + + @Override + public void sendToAll(GTPacket aPacket) { + this.mChannel.get(Side.SERVER) + .attr(FMLOutboundHandler.FML_MESSAGETARGET) + .set(FMLOutboundHandler.OutboundTarget.ALL); + this.mChannel.get(Side.SERVER) + .writeAndFlush(aPacket); + } + + @Override + public void sendToServer(GTPacket aPacket) { + this.mChannel.get(Side.CLIENT) + .attr(FMLOutboundHandler.FML_MESSAGETARGET) + .set(FMLOutboundHandler.OutboundTarget.TOSERVER); + this.mChannel.get(Side.CLIENT) + .writeAndFlush(aPacket); + } + + @Override + public void sendPacketToAllPlayersInRange(World aWorld, GTPacket aPacket, int aX, int aZ) { + if (!aWorld.isRemote) { + for (Object tObject : aWorld.playerEntities) { + if (!(tObject instanceof EntityPlayerMP tPlayer)) { + break; + } + Chunk tChunk = aWorld.getChunkFromBlockCoords(aX, aZ); + if (tPlayer.getServerForPlayer() + .getPlayerManager() + .isPlayerWatchingChunk(tPlayer, tChunk.xPosition, tChunk.zPosition)) { + sendToPlayer(aPacket, tPlayer); + } + } + } + } + + @ChannelHandler.Sharable + static final class HandlerShared extends SimpleChannelInboundHandler { + + @Override + protected void channelRead0(ChannelHandlerContext ctx, GTPacket aPacket) { + final EntityPlayer aPlayer = GTValues.GT.getThePlayer(); + aPacket.process(aPlayer == null ? null : aPlayer.worldObj); + } + } +} diff --git a/src/main/java/gregtech/common/GTPlayerActivityLogger.java b/src/main/java/gregtech/common/GTPlayerActivityLogger.java new file mode 100644 index 0000000000..7bd5ba508e --- /dev/null +++ b/src/main/java/gregtech/common/GTPlayerActivityLogger.java @@ -0,0 +1,34 @@ +package gregtech.common; + +import java.util.ArrayList; + +import gregtech.GTMod; +import gregtech.api.util.GTLog; + +public class GTPlayerActivityLogger implements Runnable { + + @Override + public void run() { + try { + ArrayList buffer = new ArrayList<>(); + for (;;) { + if (GTLog.pal == null) { + return; + } + String tLastOutput = ""; + // Block on first element for efficiency + buffer.add(GTMod.gregtechproxy.mBufferedPlayerActivity.take()); + GTMod.gregtechproxy.mBufferedPlayerActivity.drainTo(buffer); + for (String output : buffer) { + if (!output.equals(tLastOutput)) { + GTLog.pal.println(output); + tLastOutput = output; + } + } + buffer.clear(); + // TODO: swap from sleep to event bus + Thread.sleep(10000L); + } + } catch (Throwable ignored) {} + } +} diff --git a/src/main/java/gregtech/common/GTProxy.java b/src/main/java/gregtech/common/GTProxy.java new file mode 100644 index 0000000000..d12c2bbe61 --- /dev/null +++ b/src/main/java/gregtech/common/GTProxy.java @@ -0,0 +1,2892 @@ +package gregtech.common; + +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.enums.FluidState.GAS; +import static gregtech.api.enums.FluidState.LIQUID; +import static gregtech.api.enums.FluidState.MOLTEN; +import static gregtech.api.enums.FluidState.PLASMA; +import static gregtech.api.enums.GTValues.W; +import static gregtech.api.enums.GTValues.debugEntityCramming; +import static gregtech.api.enums.Mods.AdvancedSolarPanel; +import static gregtech.api.enums.Mods.AppliedEnergistics2; +import static gregtech.api.enums.Mods.Avaritia; +import static gregtech.api.enums.Mods.BetterLoadingScreen; +import static gregtech.api.enums.Mods.DraconicEvolution; +import static gregtech.api.enums.Mods.ElectroMagicTools; +import static gregtech.api.enums.Mods.EnderIO; +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.enums.Mods.GalacticraftCore; +import static gregtech.api.enums.Mods.GalaxySpace; +import static gregtech.api.enums.Mods.GraviSuite; +import static gregtech.api.enums.Mods.GregTech; +import static gregtech.api.enums.Mods.IguanaTweaksTinkerConstruct; +import static gregtech.api.enums.Mods.Names; +import static gregtech.api.enums.Mods.Railcraft; +import static gregtech.api.enums.Mods.TaintedMagic; +import static gregtech.api.enums.Mods.Thaumcraft; +import static gregtech.api.enums.Mods.ThaumicBoots; +import static gregtech.api.enums.Mods.ThaumicTinkerer; +import static gregtech.api.enums.Mods.TinkerConstruct; +import static gregtech.api.enums.Mods.TwilightForest; +import static gregtech.api.enums.Mods.WitchingGadgets; +import static gregtech.api.recipe.RecipeMaps.crackingRecipes; +import static gregtech.api.recipe.RecipeMaps.cutterRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTUtil.LAST_BROKEN_TILEENTITY; +import static net.minecraftforge.fluids.FluidRegistry.getFluidStack; + +import java.io.File; +import java.text.DateFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Collectors; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemBow; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; +import net.minecraft.world.WorldSettings.GameType; +import net.minecraft.world.gen.feature.WorldGenMinable; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.event.entity.EntityJoinWorldEvent; +import net.minecraftforge.event.entity.living.EnderTeleportEvent; +import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; +import net.minecraftforge.event.entity.player.ArrowLooseEvent; +import net.minecraftforge.event.entity.player.ArrowNockEvent; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; +import net.minecraftforge.event.entity.player.PlayerInteractEvent; +import net.minecraftforge.event.terraingen.OreGenEvent; +import net.minecraftforge.event.world.BlockEvent; +import net.minecraftforge.event.world.ChunkDataEvent; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; +import net.minecraftforge.oredict.RecipeSorter; +import net.minecraftforge.oredict.ShapedOreRecipe; +import net.minecraftforge.oredict.ShapelessOreRecipe; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.IFuelHandler; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.ProgressManager; +import cpw.mods.fml.common.eventhandler.Event.Result; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; +import cpw.mods.fml.common.network.FMLNetworkEvent; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.FluidState; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.ManualOreDictTweaks; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OreDictNames; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TCAspects.TC_AspectStack; +import gregtech.api.enums.TierEU; +import gregtech.api.enums.ToolDictNames; +import gregtech.api.fluid.GTFluidFactory; +import gregtech.api.interfaces.IBlockOnWalkOver; +import gregtech.api.interfaces.IProjectileItem; +import gregtech.api.interfaces.IToolStats; +import gregtech.api.interfaces.internal.IGTMod; +import gregtech.api.interfaces.internal.IThaumcraftCompat; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.net.GTPacketMusicSystemData; +import gregtech.api.objects.GTChunkManager; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.GTUODimensionList; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeCategory; +import gregtech.api.recipe.RecipeCategorySetting; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTBlockMap; +import gregtech.api.util.GTCLSCompat; +import gregtech.api.util.GTChunkAssociatedData; +import gregtech.api.util.GTClientPreference; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTMusicSystem; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeRegistrator; +import gregtech.api.util.GTShapedRecipe; +import gregtech.api.util.GTShapelessRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder; +import gregtech.common.config.opstuff.ConfigGeneral; +import gregtech.common.items.IDMetaTool01; +import gregtech.common.items.MetaGeneratedItem98; +import gregtech.common.items.MetaGeneratedTool01; +import gregtech.common.misc.GlobalEnergyWorldSavedData; +import gregtech.common.misc.GlobalMetricsCoverDatabase; +import gregtech.common.misc.spaceprojects.SpaceProjectWorldSavedData; +import gregtech.common.tileentities.machines.multi.drone.MTEDroneCentre; +import gregtech.nei.GTNEIDefaultHandler; + +public abstract class GTProxy implements IGTMod, IFuelHandler { + + private static final EnumSet PREVENTED_ORES = EnumSet.of( + OreGenEvent.GenerateMinable.EventType.COAL, + OreGenEvent.GenerateMinable.EventType.IRON, + OreGenEvent.GenerateMinable.EventType.GOLD, + OreGenEvent.GenerateMinable.EventType.DIAMOND, + OreGenEvent.GenerateMinable.EventType.REDSTONE, + OreGenEvent.GenerateMinable.EventType.LAPIS, + OreGenEvent.GenerateMinable.EventType.QUARTZ); + public final HashSet mRegisteredOres = new HashSet<>(10000); + public final ArrayList mSoundNames = new ArrayList<>(); + public final ArrayList mSoundItems = new ArrayList<>(); + public final ArrayList mSoundCounts = new ArrayList<>(); + private final Collection mEvents = new HashSet<>(); + private final Collection mIgnoredItems = new HashSet<>( + Arrays.asList( + "itemGhastTear", + "itemFlint", + "itemClay", + "itemBucketSaltWater", + "itemBucketFreshWater", + "itemBucketWater", + "itemRock", + "itemReed", + "itemArrow", + "itemSaw", + "itemKnife", + "itemHammer", + "itemChisel", + "itemRubber", + "itemEssence", + "itemIlluminatedPanel", + "itemSkull", + "itemRawRubber", + "itemBacon", + "itemJetpackAccelerator", + "itemLazurite", + "itemIridium", + "itemTear", + "itemClaw", + "itemFertilizer", + "itemTar", + "itemSlimeball", + "itemCoke", + "itemBeeswax", + "itemBeeQueen", + "itemForcicium", + "itemForcillium", + "itemRoyalJelly", + "itemHoneydew", + "itemHoney", + "itemPollen", + "itemReedTypha", + "itemSulfuricAcid", + "itemPotash", + "itemCompressedCarbon", + "itemBitumen", + "itemBioFuel", + "itemCokeSugar", + "itemCokeCactus", + "itemCharcoalSugar", + "itemCharcoalCactus", + "itemSludge", + "itemEnrichedAlloy", + "itemQuicksilver", + "itemMercury", + "itemOsmium", + "itemUltimateCircuit", + "itemEnergizedStar", + "itemAntimatterMolecule", + "itemAntimatterGlob", + "itemCoal", + "itemBoat", + "itemHerbalMedicineCake", + "itemCakeSponge", + "itemFishandPumpkinCakeSponge", + "itemSoulCleaver", + "itemInstantCake", + "itemWhippingCream", + "itemGlisteningWhippingCream", + "itemCleaver", + "itemHerbalMedicineWhippingCream", + "itemStrangeWhippingCream", + "itemBlazeCleaver", + "itemBakedCakeSponge", + "itemMagmaCake", + "itemGlisteningCake", + "itemOgreCleaver", + "itemFishandPumpkinCake", + "itemMagmaWhippingCream", + "itemMultimeter", + "itemSuperconductor")); + private final Collection mIgnoredNames = new HashSet<>( + Arrays.asList( + "grubBee", + "chainLink", + "candyCane", + "bRedString", + "bVial", + "bFlask", + "anorthositeSmooth", + "migmatiteSmooth", + "slateSmooth", + "travertineSmooth", + "limestoneSmooth", + "orthogneissSmooth", + "marbleSmooth", + "honeyDrop", + "lumpClay", + "honeyEqualssugar", + "flourEqualswheat", + "bluestoneInsulated", + "blockWaterstone", + "blockSand", + "blockTorch", + "blockPumpkin", + "blockClothRock", + "blockStainedHardenedClay", + "blockQuartzPillar", + "blockQuartzChiselled", + "blockSpawner", + "blockCloth", + "mobHead", + "mobEgg", + "enderFlower", + "enderChest", + "clayHardened", + "dayGemMaterial", + "nightGemMaterial", + "snowLayer", + "bPlaceholder", + "hardenedClay", + "eternalLifeEssence", + "sandstone", + "wheatRice", + "transdimBlock", + "bambooBasket", + "lexicaBotania", + "livingwoodTwig", + "redstoneCrystal", + "pestleAndMortar", + "glowstone", + "whiteStone", + "stoneSlab", + "transdimBlock", + "clayBowl", + "clayPlate", + "ceramicBowl", + "ceramicPlate", + "ovenRack", + "clayCup", + "ceramicCup", + "batteryBox", + "transmutationStone", + "torchRedstoneActive", + "coal", + "charcoal", + "cloth", + "cobblestoneSlab", + "stoneBrickSlab", + "cobblestoneWall", + "stoneBrickWall", + "cobblestoneStair", + "stoneBrickStair", + "blockCloud", + "blockDirt", + "blockTyrian", + "blockCarpet", + "blockFft", + "blockLavastone", + "blockHolystone", + "blockConcrete", + "sunnariumPart", + "brSmallMachineCyaniteProcessor", + "meteoriteCoal", + "blockCobble", + "pressOreProcessor", + "crusherOreProcessor", + "grinderOreProcessor", + "blockRubber", + "blockHoney", + "blockHoneydew", + "blockPeat", + "blockRadioactive", + "blockSlime", + "blockCocoa", + "blockSugarCane", + "blockLeather", + "blockClayBrick", + "solarPanelHV", + "cableRedNet", + "stoneBowl", + "crafterWood", + "taintedSoil", + "brickXyEngineering", + "breederUranium", + "wireMill", + "chunkLazurite", + "aluminumNatural", + "aluminiumNatural", + "naturalAluminum", + "naturalAluminium", + "antimatterMilligram", + "antimatterGram", + "strangeMatter", + "coalGenerator", + "electricFurnace", + "unfinishedTank", + "valvePart", + "aquaRegia", + "leatherSeal", + "leatherSlimeSeal", + "hambone", + "slimeball", + "clay", + "enrichedUranium", + "camoPaste", + "antiBlock", + "burntQuartz", + "salmonRaw", + "blockHopper", + "blockEnderObsidian", + "blockIcestone", + "blockMagicWood", + "blockEnderCore", + "blockHeeEndium", + "oreHeeEndPowder", + "oreHeeStardust", + "oreHeeIgneousRock", + "oreHeeInstabilityOrb", + "crystalPureFluix", + "shardNether", + "gemFluorite", + "stickObsidian", + "caveCrystal", + "shardCrystal", + "dyeCrystal", + "shardFire", + "shardWater", + "shardAir", + "shardEarth", + "ingotRefinedIron", + "blockMarble", + "ingotUnstable", + "obsidian", + "dirt", + "gravel", + "grass", + "soulsand", + "paper", + "brick", + "chest")); + private final Collection mInvalidNames = new HashSet<>( + Arrays.asList( + "diamondShard", + "redstoneRoot", + "obsidianStick", + "bloodstoneOre", + "universalCable", + "bronzeTube", + "ironTube", + "netherTube", + "obbyTube", + "infiniteBattery", + "eliteBattery", + "advancedBattery", + "10kEUStore", + "blueDye", + "MonazitOre", + "quartzCrystal", + "whiteLuminiteCrystal", + "darkStoneIngot", + "invisiumIngot", + "demoniteOrb", + "enderGem", + "starconiumGem", + "osmoniumIngot", + "tapaziteGem", + "zectiumIngot", + "foolsRubyGem", + "rubyGem", + "meteoriteGem", + "adamiteShard", + "sapphireGem", + "copperIngot", + "ironStick", + "goldStick", + "diamondStick", + "reinforcedStick", + "draconicStick", + "emeraldStick", + "copperStick", + "tinStick", + "silverStick", + "bronzeStick", + "steelStick", + "leadStick", + "manyullynStick", + "arditeStick", + "cobaltStick", + "aluminiumStick", + "alumiteStick", + "oilsandsOre", + "copperWire", + "superconductorWire", + "sulfuricAcid", + "conveyorBelt", + "ironWire", + "aluminumWire", + "aluminiumWire", + "silverWire", + "tinWire", + "dustSiliconSmall", + "AluminumOre", + "plateHeavyT2", + "blockWool", + "alloyPlateEnergizedHardened", + "gasWood", + "alloyPlateEnergized", + "SilverOre", + "LeadOre", + "TinOre", + "CopperOre", + "silverOre", + "leadOre", + "tinOre", + "copperOre", + "bauxiteOre", + "HSLivingmetalIngot", + "oilMoving", + "oilStill", + "oilBucket", + "petroleumOre", + "dieselFuel", + "diamondNugget", + "planks", + "wood", + "stick", + "sticks", + "naquadah", + "obsidianRod", + "stoneRod", + "thaumiumRod", + "steelRod", + "netherrackRod", + "woodRod", + "ironRod", + "cactusRod", + "flintRod", + "copperRod", + "cobaltRod", + "alumiteRod", + "blueslimeRod", + "arditeRod", + "manyullynRod", + "bronzeRod", + "boneRod", + "slimeRod", + "redalloyBundled", + "bluestoneBundled", + "infusedteslatiteInsulated", + "redalloyInsulated", + "infusedteslatiteBundled")); + private final DateFormat mDateFormat = DateFormat.getInstance(); + public final BlockingQueue mBufferedPlayerActivity = new LinkedBlockingQueue<>(); + public final GTBlockMap mCTMBlockCache = new GTBlockMap<>(); + public boolean mDisableVanillaOres = true; + public boolean mAllowSmallBoilerAutomation = false; + public boolean mCraftingUnification = true; + public boolean mInventoryUnification = true; + public boolean mIncreaseDungeonLoot = true; + public boolean mAxeWhenAdventure = true; + public boolean mSurvivalIntoAdventure = false; + public boolean mNerfedWoodPlank = true; + public boolean mNerfedVanillaTools = true; + public boolean mHungerEffect = true; + public boolean mIgnoreTcon = true; + public boolean mAchievements = true; + private boolean isFirstServerWorldTick = true; + private boolean isFirstWorldTick = true; + private boolean mOreDictActivated = false; + public boolean mChangeHarvestLevels = false; + public boolean mGTBees = true; + public boolean mHideUnusedOres = true; + public boolean mPollution = true; + public boolean mExplosionItemDrop = false; + public int mMaxEqualEntitiesAtOneSpot = 3; + public int mFlintChance = 30; + public int mItemDespawnTime = 6000; + public int mUpgradeCount = 4; + public int[] mHarvestLevel = new int[1000]; + public int mGraniteHavestLevel = 3; + public int mMaxHarvestLevel = 7; + public double replicatorExponent = 1.2D; + public int mPollutionSmogLimit = 550000; + public int mPollutionPoisonLimit = 750000; + public int mPollutionVegetationLimit = 1000000; + public int mPollutionSourRainLimit = 2000000; + public int mPollutionOnExplosion = 100000; + public int mPollutionPrimitveBlastFurnacePerSecond = 200; + public int mPollutionEBFPerSecond = 400; + public int mPollutionCharcoalPitPerSecond = 100; + public int mPollutionLargeCombustionEnginePerSecond = 480; + public int mPollutionExtremeCombustionEnginePerSecond = 3840; + public int mPollutionImplosionCompressorPerSecond = 10000; + public int mPollutionLargeBronzeBoilerPerSecond = 1000; + public int mPollutionLargeSteelBoilerPerSecond = 2000; + public int mPollutionLargeTitaniumBoilerPerSecond = 3000; + public int mPollutionLargeTungstenSteelBoilerPerSecond = 4000; + public double mPollutionReleasedByThrottle = 1.0 / 24.0; // divided by 24 because 24 circuit conf + public int mPollutionLargeGasTurbinePerSecond = 300; + public int mPollutionMultiSmelterPerSecond = 400; + public int mPollutionPyrolyseOvenPerSecond = 300; + public int mPollutionSmallCoalBoilerPerSecond = 20; + public int mPollutionHighPressureLavaBoilerPerSecond = 20; + public int mPollutionHighPressureCoalBoilerPerSecond = 30; + public int mPollutionBaseDieselGeneratorPerSecond = 200; + public double[] mPollutionDieselGeneratorReleasedByTier = new double[] { 0.1, 1.0, 0.9, 0.8 }; + public int mPollutionBaseGasTurbinePerSecond = 200; + public double[] mPollutionGasTurbineReleasedByTier = new double[] { 0.1, 1.0, 0.9, 0.8, 0.7, 0.6 }; + public final GTUODimensionList mUndergroundOil = new GTUODimensionList(); + public boolean enableUndergroundGravelGen = true; + public boolean enableUndergroundDirtGen = true; + public int mTicksUntilNextCraftSound = 0; + private World mUniverse = null; + public boolean mEnableAllMaterials = false; + public boolean mEnableCleanroom = true; + public boolean mLowGravProcessing = false; + public boolean mCropNeedBlock = true; + public boolean mAMHInteraction = true; + public boolean mForceFreeFace = true; + public boolean mMixedOreOnlyYieldsTwoThirdsOfPureOre = false; + public boolean mRichOreYieldMultiplier = true; + public boolean mNetherOreYieldMultiplier = true; + public boolean mEndOreYieldMultiplier = true; + public boolean enableBlackGraniteOres = true; + public boolean enableRedGraniteOres = true; + public boolean enableMarbleOres = true; + public boolean enableBasaltOres = true; + public boolean gt6Pipe = true; + public boolean gt6Cable = true; + public boolean ic2EnergySourceCompat = true; + public boolean costlyCableConnection = false; + public boolean crashOnNullRecipeInput = false; + + public enum OreDropSystem { + Block, + PerDimBlock, + UnifiedBlock, + FortuneItem, + Item + } + + public OreDropSystem oreDropSystem = OreDropSystem.FortuneItem; + + /** + * This enables ambient-occlusion smooth lighting on tiles + */ + public boolean mRenderTileAmbientOcclusion = true; + + /** + * This enables rendering of glowing textures + */ + public boolean mRenderGlowTextures = true; + + /** + * Render flipped textures + */ + public boolean mRenderFlippedMachinesFlipped = true; + + /** + * This enables indicators on input/output hatches + */ + public boolean mRenderIndicatorsOnHatch = true; + + /** + * This enables the rendering of dirt particles if pollution is enabled too + */ + public boolean mRenderDirtParticles = true; + + /** + * This enables the rendering of the pollution fog if pollution is enabled too + */ + public boolean mRenderPollutionFog = true; + + /** + * This enables BaseMetaTileEntity block updates handled by BlockUpdateHandler + */ + public boolean mUseBlockUpdateHandler = false; + + /** + * This makes cover tabs visible on GregTech machines + */ + public boolean mCoverTabsVisible = true; + + /** + * This controls whether cover tabs display on the left (default) or right side of the UI + */ + public boolean mCoverTabsFlipped = false; + + /** + * How verbose should tooltips be? 0: disabled, 1: one-line, 2: normal, 3+: extended + */ + public int mTooltipVerbosity = 2; + + /** + * How verbose should tooltips be when LSHIFT is held? 0: disabled, 1: one-line, 2: normal, 3+: extended + */ + public int mTooltipShiftVerbosity = 3; + + /** + * Which style to use for title tab on machine GUI? 0: text tab split-dark, 1: text tab unified, 2: item icon tab + */ + public int mTitleTabStyle = 0; + + /** + * Whether to show seconds or ticks on NEI + */ + public boolean mNEIRecipeSecondMode = true; + + /** + * This enables "Recipe by" display on NEI + */ + public boolean mNEIRecipeOwner = false; + + /** + * This enables showing stack traces where the recipe was added. Reboot needed + */ + public boolean mNEIRecipeOwnerStackTrace = false; + + /** + * This enables showing original voltage when overclocked + */ + public boolean mNEIOriginalVoltage = false; + + /** + * This enables the green->red durability for an item's damage value + */ + public boolean mRenderItemDurabilityBar = true; + + /** + * This enables the blue charge bar for an electric item's charge + */ + public boolean mRenderItemChargeBar = true; + + public final Map recipeCategorySettings = new HashMap<>(); + + /** + * This enables showing voltage tier of transformer for Waila, instead of raw voltage number + */ + public boolean mWailaTransformerVoltageTier = true; + + /** + * This enables showing the cpu load in nanoseconds via waila. + */ + public boolean wailaAverageNS = false; + + public static final int GUI_ID_COVER_SIDE_BASE = 10; // Takes GUI ID 10 - 15 + + public static Map oreDictBurnTimes = new HashMap<>(); + + // Locking + public static ReentrantLock TICK_LOCK = new ReentrantLock(); + + private final ConcurrentMap mClientPrefernces = new ConcurrentHashMap<>(); + + static { + oreDictBurnTimes.put("dustTinyWood", 11); + oreDictBurnTimes.put("dustTinySodium", 44); + oreDictBurnTimes.put("dustSmallWood", 25); + oreDictBurnTimes.put("dustSmallSodium", 100); + oreDictBurnTimes.put("dustWood", 100); + oreDictBurnTimes.put("dustTinyCoal", 177); + oreDictBurnTimes.put("dustTinyCharcoal", 177); + oreDictBurnTimes.put("dustTinyLignite", 166); + oreDictBurnTimes.put("plateWood", 300); + oreDictBurnTimes.put("dustSmallLignite", 375); + oreDictBurnTimes.put("dustSodium", 400); + oreDictBurnTimes.put("dustSmallCoal", 400); + oreDictBurnTimes.put("dustSmallCharcoal", 400); + oreDictBurnTimes.put("dustTinyLithium", 888); + oreDictBurnTimes.put("dustTinyCaesium", 888); + oreDictBurnTimes.put("gemLignite", 1200); + oreDictBurnTimes.put("crushedLignite", 1200); + oreDictBurnTimes.put("dustImpureLignite", 1200); + oreDictBurnTimes.put("dustLignite", 1200); + oreDictBurnTimes.put("dustSulfur", 1600); + oreDictBurnTimes.put("gemCoal", 1600); + oreDictBurnTimes.put("crushedCoal", 1600); + oreDictBurnTimes.put("dustImpureCoal", 1600); + oreDictBurnTimes.put("dustCoal", 1600); + oreDictBurnTimes.put("gemCharcoal", 1600); + oreDictBurnTimes.put("crushedCharcoal", 1600); + oreDictBurnTimes.put("dustImpureCharcoal", 1600); + oreDictBurnTimes.put("dustCharcoal", 1600); + oreDictBurnTimes.put("dustSmallLithium", 2000); + oreDictBurnTimes.put("dustSmallCaesium", 2000); + oreDictBurnTimes.put("gemSodium", 4000); + oreDictBurnTimes.put("crushedSodium", 4000); + oreDictBurnTimes.put("dustImpureSodium", 4000); + oreDictBurnTimes.put("gemLithium", 6000); + oreDictBurnTimes.put("crushedLithium", 6000); + oreDictBurnTimes.put("dustImpureLithium", 6000); + oreDictBurnTimes.put("dustLithium", 6000); + oreDictBurnTimes.put("gemCaesium", 6000); + oreDictBurnTimes.put("crushedCaesium", 6000); + oreDictBurnTimes.put("dustImpureCaesium", 6000); + oreDictBurnTimes.put("dustCaesium", 6000); + oreDictBurnTimes.put("blockLignite", 12000); + oreDictBurnTimes.put("blockCharcoal", 16000); + oreDictBurnTimes.put("gemDiamond", 102400); + oreDictBurnTimes.put("blockDiamond", 1024000); + oreDictBurnTimes.put("crushedDiamond", 102400); + oreDictBurnTimes.put("dustImpureDiamond", 102400); + oreDictBurnTimes.put("dustDiamond", 102400); + oreDictBurnTimes.put("dustSmallDiamond", 25600); + oreDictBurnTimes.put("dustTinyDiamond", 11378); + } + + public GTProxy() { + GameRegistry.registerFuelHandler(this); + MinecraftForge.EVENT_BUS.register(this); + MinecraftForge.ORE_GEN_BUS.register(this); + FMLCommonHandler.instance() + .bus() + .register(this); + GregTechAPI.sThaumcraftCompat = (IThaumcraftCompat) GTUtility + .callConstructor("gregtech.common.GT_ThaumcraftCompat", 0, null, GTValues.D1, new Object[0]); + for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry + .getRegisteredFluidContainerData()) { + onFluidContainerRegistration(new FluidContainerRegistry.FluidContainerRegisterEvent(tData)); + } + try { + for (String tOreName : OreDictionary.getOreNames()) { + ItemStack tOreStack; + for (Iterator i$ = OreDictionary.getOres(tOreName) + .iterator(); i$.hasNext(); registerOre(new OreDictionary.OreRegisterEvent(tOreName, tOreStack))) { + tOreStack = i$.next(); + } + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + public void onPreLoad() { + GTLog.out.println("GTMod: Preload-Phase started!"); + GTLog.ore.println("GTMod: Preload-Phase started!"); + + GregTechAPI.sPreloadStarted = true; + this.mIgnoreTcon = ConfigGeneral.ignoreTinkerConstruct; + this.replicatorExponent = ConfigGeneral.replicatorExponent; + for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry + .getRegisteredFluidContainerData()) { + if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) { + tData.fluid.amount = 0; + break; + } + } + GTLog.out.println("GTMod: Getting required Items of other Mods."); + + ItemList.RC_ShuntingWire.set(GTModHandler.getModItem(Railcraft.ID, "machine.delta", 1L, 0)); + ItemList.RC_ShuntingWireFrame.set(GTModHandler.getModItem(Railcraft.ID, "frame", 1L, 0)); + ItemList.RC_Rail_Standard.set(GTModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 0)); + ItemList.RC_Rail_Adv.set(GTModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 1)); + ItemList.RC_Rail_Wooden.set(GTModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 2)); + ItemList.RC_Rail_HS.set(GTModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 3)); + ItemList.RC_Rail_Reinforced.set(GTModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 4)); + ItemList.RC_Rail_Electric.set(GTModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 5)); + ItemList.RC_Tie_Wood.set(GTModHandler.getModItem(Railcraft.ID, "part.tie", 1L, 0)); + ItemList.RC_Tie_Stone.set(GTModHandler.getModItem(Railcraft.ID, "part.tie", 1L, 1)); + ItemList.RC_Bed_Wood.set(GTModHandler.getModItem(Railcraft.ID, "part.railbed", 1L, 0)); + ItemList.RC_Bed_Stone.set(GTModHandler.getModItem(Railcraft.ID, "part.railbed", 1L, 1)); + ItemList.RC_Rebar.set(GTModHandler.getModItem(Railcraft.ID, "part.rebar", 1L)); + ItemList.TC_Thaumometer.set(GTModHandler.getModItem(Thaumcraft.ID, "ItemThaumometer", 1L, 0)); + ItemList.Tool_Sword_Steel.set(GTModHandler.getModItem(Railcraft.ID, "tool.steel.sword", 1L)); + ItemList.Tool_Pickaxe_Steel.set(GTModHandler.getModItem(Railcraft.ID, "tool.steel.pickaxe", 1L)); + ItemList.Tool_Shovel_Steel.set(GTModHandler.getModItem(Railcraft.ID, "tool.steel.shovel", 1L)); + ItemList.Tool_Axe_Steel.set(GTModHandler.getModItem(Railcraft.ID, "tool.steel.axe", 1L)); + ItemList.Tool_Hoe_Steel.set(GTModHandler.getModItem(Railcraft.ID, "tool.steel.hoe", 1L)); + + ItemList.TF_LiveRoot.set(GTModHandler.getModItem(TwilightForest.ID, "item.liveRoot", 1L, 0)); + ItemList.TF_Vial_FieryBlood.set(GTModHandler.getModItem(TwilightForest.ID, "item.fieryBlood", 1L)); + ItemList.TF_Vial_FieryTears.set(GTModHandler.getModItem(TwilightForest.ID, "item.fieryTears", 1L)); + + ItemList.FR_Lemon.set(GTModHandler.getModItem(Forestry.ID, "fruits", 1L, 3)); + ItemList.FR_Mulch.set(GTModHandler.getModItem(Forestry.ID, "mulch", 1L)); + ItemList.FR_Fertilizer.set(GTModHandler.getModItem(Forestry.ID, "fertilizerCompound", 1L)); + ItemList.FR_Compost.set(GTModHandler.getModItem(Forestry.ID, "fertilizerBio", 1L)); + ItemList.FR_Silk.set(GTModHandler.getModItem(Forestry.ID, "craftingMaterial", 1L, 2)); + ItemList.FR_Wax.set(GTModHandler.getModItem(Forestry.ID, "beeswax", 1L)); + ItemList.FR_WaxCapsule.set(GTModHandler.getModItem(Forestry.ID, "waxCapsule", 1L)); + ItemList.FR_RefractoryWax.set(GTModHandler.getModItem(Forestry.ID, "refractoryWax", 1L)); + ItemList.FR_RefractoryCapsule.set(GTModHandler.getModItem(Forestry.ID, "refractoryEmpty", 1L)); + ItemList.FR_Bee_Drone.set(GTModHandler.getModItem(Forestry.ID, "beeDroneGE", 1L)); + ItemList.FR_Bee_Princess.set(GTModHandler.getModItem(Forestry.ID, "beePrincessGE", 1L)); + ItemList.FR_Bee_Queen.set(GTModHandler.getModItem(Forestry.ID, "beeQueenGE", 1L)); + ItemList.FR_Tree_Sapling.set( + GTModHandler.getModItem(Forestry.ID, "sapling", 1L, GTModHandler.getModItem(Forestry.ID, "saplingGE", 1L))); + ItemList.FR_Butterfly.set(GTModHandler.getModItem(Forestry.ID, "butterflyGE", 1L)); + ItemList.FR_Larvae.set(GTModHandler.getModItem(Forestry.ID, "beeLarvaeGE", 1L)); + ItemList.FR_Serum.set(GTModHandler.getModItem(Forestry.ID, "serumGE", 1L)); + ItemList.FR_Caterpillar.set(GTModHandler.getModItem(Forestry.ID, "caterpillarGE", 1L)); + ItemList.FR_PollenFertile.set(GTModHandler.getModItem(Forestry.ID, "pollenFertile", 1L)); + ItemList.FR_Stick.set(GTModHandler.getModItem(Forestry.ID, "oakStick", 1L)); + ItemList.FR_Casing_Impregnated.set(GTModHandler.getModItem(Forestry.ID, "impregnatedCasing", 1L)); + ItemList.FR_Casing_Sturdy.set(GTModHandler.getModItem(Forestry.ID, "sturdyMachine", 1L)); + ItemList.FR_Casing_Hardened.set(GTModHandler.getModItem(Forestry.ID, "hardenedMachine", 1L)); + + ItemList.Bottle_Empty.set(new ItemStack(Items.glass_bottle, 1)); + + ItemList.Cell_Universal_Fluid.set(GTModHandler.getIC2Item("FluidCell", 1L)); + ItemList.Cell_Empty.set( + GTModHandler.getIC2Item( + "cell", + 1L, + GTModHandler.getIC2Item("cellEmpty", 1L, GTModHandler.getIC2Item("emptyCell", 1L)))); + ItemList.Cell_Water.set(GTModHandler.getIC2Item("waterCell", 1L, GTModHandler.getIC2Item("cellWater", 1L))); + ItemList.Cell_Lava.set(GTModHandler.getIC2Item("lavaCell", 1L, GTModHandler.getIC2Item("cellLava", 1L))); + ItemList.Cell_Air.set( + GTModHandler.getIC2Item( + "airCell", + 1L, + GTModHandler.getIC2Item("cellAir", 1L, GTModHandler.getIC2Item("cellOxygen", 1L)))); + + ItemList.IC2_Item_Casing_Iron.set(GTModHandler.getIC2Item("casingiron", 1L)); + ItemList.IC2_Item_Casing_Gold.set(GTModHandler.getIC2Item("casinggold", 1L)); + ItemList.IC2_Item_Casing_Bronze.set(GTModHandler.getIC2Item("casingbronze", 1L)); + ItemList.IC2_Item_Casing_Copper.set(GTModHandler.getIC2Item("casingcopper", 1L)); + ItemList.IC2_Item_Casing_Tin.set(GTModHandler.getIC2Item("casingtin", 1L)); + ItemList.IC2_Item_Casing_Lead.set(GTModHandler.getIC2Item("casinglead", 1L)); + ItemList.IC2_Item_Casing_Steel.set(GTModHandler.getIC2Item("casingadviron", 1L)); + ItemList.IC2_Spray_WeedEx.set(GTModHandler.getIC2Item("weedEx", 1L)); + ItemList.IC2_Mixed_Metal_Ingot.set(GTModHandler.getIC2Item("mixedMetalIngot", 1L)); + ItemList.IC2_Fertilizer.set(GTModHandler.getIC2Item("fertilizer", 1L)); + ItemList.IC2_CoffeeBeans.set(GTModHandler.getIC2Item("coffeeBeans", 1L)); + ItemList.IC2_CoffeePowder.set(GTModHandler.getIC2Item("coffeePowder", 1L)); + ItemList.IC2_Hops.set(GTModHandler.getIC2Item("hops", 1L)); + ItemList.IC2_Resin.set(GTModHandler.getIC2Item("resin", 1L)); + ItemList.IC2_Plantball.set(GTModHandler.getIC2Item("plantBall", 1L)); + ItemList.IC2_PlantballCompressed + .set(GTModHandler.getIC2Item("compressedPlantBall", 1L, ItemList.IC2_Plantball.get(1L))); + ItemList.IC2_Crop_Seeds.set(GTModHandler.getIC2Item("cropSeed", 1L)); + ItemList.IC2_Grin_Powder.set(GTModHandler.getIC2Item("grinPowder", 1L)); + ItemList.IC2_Energium_Dust.set(GTModHandler.getIC2Item("energiumDust", 1L)); + ItemList.IC2_Scrap.set(GTModHandler.getIC2Item("scrap", 1L)); + ItemList.IC2_Scrapbox.set(GTModHandler.getIC2Item("scrapBox", 1L)); + ItemList.IC2_Fuel_Rod_Empty.set(GTModHandler.getIC2Item("fuelRod", 1L)); + ItemList.IC2_Food_Can_Empty.set(GTModHandler.getIC2Item("tinCan", 1L)); + ItemList.IC2_Food_Can_Filled.set(GTModHandler.getIC2Item("filledTinCan", 1L, 0)); + ItemList.IC2_Food_Can_Spoiled.set(GTModHandler.getIC2Item("filledTinCan", 1L, 1)); + ItemList.IC2_Industrial_Diamond + .set(GTModHandler.getIC2Item("industrialDiamond", 1L, new ItemStack(Items.diamond, 1))); + ItemList.IC2_Compressed_Coal_Ball.set(GTModHandler.getIC2Item("compressedCoalBall", 1L)); + ItemList.IC2_Compressed_Coal_Chunk.set(GTModHandler.getIC2Item("coalChunk", 1L)); + ItemList.IC2_ShaftIron.set(GTModHandler.getIC2Item("ironshaft", 1L)); + ItemList.IC2_ShaftSteel.set(GTModHandler.getIC2Item("steelshaft", 1L)); + + ItemList.IC2_SuBattery.set(GTModHandler.getIC2Item("suBattery", 1L)); + ItemList.IC2_ReBattery.set(GTModHandler.getIC2Item("reBattery", 1L)); + ItemList.IC2_AdvBattery.set(GTModHandler.getIC2Item("advBattery", 1L)); + ItemList.IC2_EnergyCrystal.set(GTModHandler.getIC2Item("energyCrystal", 1L)); + ItemList.IC2_LapotronCrystal.set(GTModHandler.getIC2Item("lapotronCrystal", 1L)); + + ItemList.Tool_Sword_Bronze.set(GTModHandler.getIC2Item("bronzeSword", 1L)); + ItemList.Tool_Pickaxe_Bronze.set(GTModHandler.getIC2Item("bronzePickaxe", 1L)); + ItemList.Tool_Shovel_Bronze.set(GTModHandler.getIC2Item("bronzeShovel", 1L)); + ItemList.Tool_Axe_Bronze.set(GTModHandler.getIC2Item("bronzeAxe", 1L)); + ItemList.Tool_Hoe_Bronze.set(GTModHandler.getIC2Item("bronzeHoe", 1L)); + ItemList.IC2_ForgeHammer.set(GTModHandler.getIC2Item("ForgeHammer", 1L)); + ItemList.IC2_WireCutter.set(GTModHandler.getIC2Item("cutter", 1L)); + + ItemList.Credit_Iron.set(GTModHandler.getIC2Item("coin", 1L)); + + ItemList.Circuit_Basic.set(GTModHandler.getIC2Item("electronicCircuit", 1L)); + ItemList.Circuit_Advanced.set(GTModHandler.getIC2Item("advancedCircuit", 1L)); + + ItemList.Upgrade_Overclocker.set(GTModHandler.getIC2Item("overclockerUpgrade", 1L)); + ItemList.Upgrade_Battery.set(GTModHandler.getIC2Item("energyStorageUpgrade", 1L)); + + ItemList.Dye_Bonemeal.set(new ItemStack(Items.dye, 1, 15)); + ItemList.Dye_SquidInk.set(new ItemStack(Items.dye, 1, 0)); + ItemList.Dye_Cocoa.set(new ItemStack(Items.dye, 1, 3)); + + ItemList.Book_Written_00.set(new ItemStack(Items.written_book, 1, 0)); + + ItemList.Food_Baked_Bread.set(new ItemStack(Items.bread, 1, 0)); + ItemList.Food_Raw_Potato.set(new ItemStack(Items.potato, 1, 0)); + ItemList.Food_Baked_Potato.set(new ItemStack(Items.baked_potato, 1, 0)); + ItemList.Food_Poisonous_Potato.set(new ItemStack(Items.poisonous_potato, 1, 0)); + + OrePrefixes.bottle.mContainerItem = ItemList.Bottle_Empty.get(1L); + OrePrefixes.bucket.mContainerItem = new ItemStack(Items.bucket, 1); + OrePrefixes.cellPlasma.mContainerItem = ItemList.Cell_Empty.get(1L); + OrePrefixes.cellMolten.mContainerItem = ItemList.Cell_Empty.get(1L); + OrePrefixes.cell.mContainerItem = ItemList.Cell_Empty.get(1L); + + GTModHandler.sNonReplaceableItems.add(new ItemStack(Items.bow, 1, 32767)); + GTModHandler.sNonReplaceableItems.add(new ItemStack(Items.fishing_rod, 1, 32767)); + GTModHandler.sNonReplaceableItems.add(ItemList.IC2_ForgeHammer.getWithDamage(1L, 32767L)); + GTModHandler.sNonReplaceableItems.add(ItemList.IC2_WireCutter.getWithDamage(1L, 32767L)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("painter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("blackPainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("redPainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("greenPainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("brownPainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("bluePainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("purplePainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("cyanPainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("lightGreyPainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("darkGreyPainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("pinkPainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("limePainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("yellowPainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("cloudPainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("magentaPainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("orangePainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("whitePainter", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("cfPack", 1L, 32767)); + // GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("jetpack", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("treetap", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("weedEx", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("staticBoots", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("compositeArmor", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("hazmatHelmet", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("hazmatChestplate", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("hazmatLeggings", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getIC2Item("hazmatBoots", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Railcraft.ID, "part.turbine.disk", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Railcraft.ID, "part.turbine.blade", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Railcraft.ID, "part.turbine.rotor", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Railcraft.ID, "borehead.diamond", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Railcraft.ID, "borehead.steel", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Railcraft.ID, "borehead.iron", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(TwilightForest.ID, "item.plateNaga", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(TwilightForest.ID, "item.legsNaga", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(TwilightForest.ID, "item.arcticHelm", 1L, 32767)); + GTModHandler.sNonReplaceableItems + .add(GTModHandler.getModItem(TwilightForest.ID, "item.arcticPlate", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(TwilightForest.ID, "item.arcticLegs", 1L, 32767)); + GTModHandler.sNonReplaceableItems + .add(GTModHandler.getModItem(TwilightForest.ID, "item.arcticBoots", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(TwilightForest.ID, "item.yetiHelm", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(TwilightForest.ID, "item.yetiPlate", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(TwilightForest.ID, "item.yetiLegs", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(TwilightForest.ID, "item.yetiBoots", 1L, 32767)); + GTModHandler.sNonReplaceableItems + .add(GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ToolCertusQuartzCuttingKnife", 1L, 32767)); + GTModHandler.sNonReplaceableItems + .add(GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ToolNetherQuartzCuttingKnife", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Forestry.ID, "apiaristHelmet", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Forestry.ID, "apiaristChest", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Forestry.ID, "apiaristLegs", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Forestry.ID, "apiaristBoots", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Forestry.ID, "frameUntreated", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Forestry.ID, "frameImpregnated", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Forestry.ID, "frameProven", 1L, 32767)); + GTModHandler.sNonReplaceableItems.add(GTModHandler.getModItem(Forestry.ID, "waxCast", 1L, 32767)); + GTModHandler.sNonReplaceableItems + .add(GTModHandler.getModItem(GalacticraftCore.ID, "item.sensorGlasses", 1L, 32767)); + + RecipeSorter.register( + "gregtech:shaped", + GTShapedRecipe.class, + RecipeSorter.Category.SHAPED, + "after:minecraft:shaped before:minecraft:shapeless"); + RecipeSorter.register( + "gregtech:shapeless", + GTShapelessRecipe.class, + RecipeSorter.Category.SHAPELESS, + "after:minecraft:shapeless"); + + // Register chunk manager with Forge + GTChunkManager.init(); + } + + public void onLoad() { + GTLog.out.println("GTMod: Beginning Load-Phase."); + GTLog.ore.println("GTMod: Beginning Load-Phase."); + + // Clay buckets, which don't get registered until Iguana Tweaks pre-init + if (IguanaTweaksTinkerConstruct.isModLoaded()) { + OrePrefixes.bucketClay.mContainerItem = GTModHandler + .getModItem(IguanaTweaksTinkerConstruct.ID, "clayBucketFired", 1L, 0); + GTOreDictUnificator.set( + OrePrefixes.bucketClay, + Materials.Empty, + GTModHandler.getModItem(IguanaTweaksTinkerConstruct.ID, "clayBucketFired", 1L, 0)); + GTOreDictUnificator.set( + OrePrefixes.bucketClay, + Materials.Water, + GTModHandler.getModItem(IguanaTweaksTinkerConstruct.ID, "clayBucketWater", 1L, 0)); + GTOreDictUnificator.set( + OrePrefixes.bucketClay, + Materials.Lava, + GTModHandler.getModItem(IguanaTweaksTinkerConstruct.ID, "clayBucketLava", 1L, 0)); + GTOreDictUnificator.set( + OrePrefixes.bucketClay, + Materials.Milk, + GTModHandler.getModItem(IguanaTweaksTinkerConstruct.ID, "clayBucketMilk", 1L, 0)); + + FluidContainerRegistry.registerFluidContainer( + new FluidContainerRegistry.FluidContainerData( + Materials.Milk.getFluid(1000L), + GTOreDictUnificator.get(OrePrefixes.bucketClay, Materials.Milk, 1L), + GTOreDictUnificator.get(OrePrefixes.bucketClay, Materials.Empty, 1L))); + } + + if (!GTMod.gregtechproxy.enableUndergroundGravelGen) + PREVENTED_ORES.add(OreGenEvent.GenerateMinable.EventType.GRAVEL); + if (!GTMod.gregtechproxy.enableUndergroundDirtGen) + PREVENTED_ORES.add(OreGenEvent.GenerateMinable.EventType.DIRT); + + MinecraftForge.EVENT_BUS.register(new SpaceProjectWorldSavedData()); + MinecraftForge.EVENT_BUS.register(new GlobalEnergyWorldSavedData("")); + MinecraftForge.EVENT_BUS.register(new GTWorldgenerator.OregenPatternSavedData("")); + MinecraftForge.EVENT_BUS.register(new GlobalMetricsCoverDatabase()); + FMLCommonHandler.instance() + .bus() + .register(new GTWorldgenerator.OregenPatternSavedData("")); + + // IC2 Hazmat + addFullHazmatToIC2Item("hazmatHelmet"); + addFullHazmatToIC2Item("hazmatChestplate"); + addFullHazmatToIC2Item("hazmatLeggings"); + addFullHazmatToIC2Item("hazmatBoots"); + addFullHazmatToIC2Item("nanoHelmet"); + addFullHazmatToIC2Item("nanoBoots"); + addFullHazmatToIC2Item("nanoLeggings"); + addFullHazmatToIC2Item("nanoBodyarmor"); + addFullHazmatToIC2Item("quantumHelmet"); + addFullHazmatToIC2Item("quantumBodyarmor"); + addFullHazmatToIC2Item("quantumLeggings"); + addFullHazmatToIC2Item("quantumBoots"); + + // GT++ Hazmat + addFullHazmatToGeneralItem(GTPlusPlus.ID, "itemArmorHazmatHelmetEx", 1); + addFullHazmatToGeneralItem(GTPlusPlus.ID, "itemArmorHazmatChestplateEx", 1); + addFullHazmatToGeneralItem(GTPlusPlus.ID, "itemArmorHazmatLeggingsEx", 1); + addFullHazmatToGeneralItem(GTPlusPlus.ID, "itemArmorRubBootsEx", 1); + + // GraviSuite Hazmat + addFullHazmatToGeneralItem(GraviSuite.ID, "graviChestPlate", 1L); + addFullHazmatToGeneralItem(GraviSuite.ID, "advNanoChestPlate", 1L); + + // EMT Hazmat + addFullHazmatToGeneralItem(ElectroMagicTools.ID, "itemArmorQuantumChestplate", 1L); + addFullHazmatToGeneralItem(ElectroMagicTools.ID, "NanoBootsTraveller", 1L); + addFullHazmatToGeneralItem(ElectroMagicTools.ID, "NanosuitGogglesRevealing", 1L); + addFullHazmatToGeneralItem(ElectroMagicTools.ID, "QuantumBootsTraveller", 1L); + addFullHazmatToGeneralItem(ElectroMagicTools.ID, "QuantumGogglesRevealing", 1L); + addFullHazmatToGeneralItem(ElectroMagicTools.ID, "SolarHelmetRevealing", 1L); + addFullHazmatToGeneralItem(ElectroMagicTools.ID, "NanosuitWing", 1L); + addFullHazmatToGeneralItem(ElectroMagicTools.ID, "QuantumWing", 1L); + + // Thaumic Boots Hazmat + addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemQuantumVoid", 1L); + addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemQuantumMeteor", 1L); + addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemQuantumComet", 1L); + addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemNanoVoid", 1L); + addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemNanoMeteor", 1L); + addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemNanoComet", 1L); + addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemElectricVoid", 1L); + addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemVoidMeteor", 1L); + addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemVoidComet", 1L); + + // DraconicEvolution Hazmat + addFullHazmatToGeneralItem(DraconicEvolution.ID, "draconicBoots", 1L, 0); + addFullHazmatToGeneralItem(DraconicEvolution.ID, "draconicHelm", 1L, 0); + addFullHazmatToGeneralItem(DraconicEvolution.ID, "draconicLeggs", 1L, 0); + addFullHazmatToGeneralItem(DraconicEvolution.ID, "draconicChest", 1L, 0); + addFullHazmatToGeneralItem(DraconicEvolution.ID, "wyvernBoots", 1L, 0); + addFullHazmatToGeneralItem(DraconicEvolution.ID, "wyvernHelm", 1L, 0); + addFullHazmatToGeneralItem(DraconicEvolution.ID, "wyvernLeggs", 1L, 0); + addFullHazmatToGeneralItem(DraconicEvolution.ID, "wyvernChest", 1L, 0); + + // AdvancedSolarPanel + addFullHazmatToGeneralItem(AdvancedSolarPanel.ID, "advanced_solar_helmet", 1L); + addFullHazmatToGeneralItem(AdvancedSolarPanel.ID, "hybrid_solar_helmet", 1L); + addFullHazmatToGeneralItem(AdvancedSolarPanel.ID, "ultimate_solar_helmet", 1L); + + // TaintedMagic Hazmat + addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemVoidwalkerBoots", 1L); + addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemShadowFortressHelmet", 1L); + addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemShadowFortressChestplate", 1L); + addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemShadowFortressLeggings", 1L); + addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemVoidFortressHelmet", 1L); + addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemVoidFortressChestplate", 1L); + addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemVoidFortressLeggings", 1L); + addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemVoidmetalGoggles", 1L); + + // WitchingGadgets Hazmat + addFullHazmatToGeneralItem(WitchingGadgets.ID, "item.WG_PrimordialHelm", 1L); + addFullHazmatToGeneralItem(WitchingGadgets.ID, "item.WG_PrimordialChest", 1L); + addFullHazmatToGeneralItem(WitchingGadgets.ID, "item.WG_PrimordialLegs", 1L); + addFullHazmatToGeneralItem(WitchingGadgets.ID, "item.WG_PrimordialBoots", 1L); + + // ThaumicTinkerer Hazmat + addFullHazmatToGeneralItem(ThaumicTinkerer.ID, "ichorclothChestGem", 1L); + addFullHazmatToGeneralItem(ThaumicTinkerer.ID, "ichorclothBootsGem", 1L); + addFullHazmatToGeneralItem(ThaumicTinkerer.ID, "ichorclothHelmGem", 1L); + addFullHazmatToGeneralItem(ThaumicTinkerer.ID, "ichorclothLegsGem", 1L); + + // GalaxySpace Hazmat + addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_helmet", 1L); + addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_helmetglasses", 1L); + addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_plate", 1L); + addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_jetplate", 1L); + addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_leg", 1L); + addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_boots", 1L); + addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_gravityboots", 1L); + + // Extra Hazmat + GregTechAPI.sElectroHazmatList.add(new ItemStack(Items.chainmail_helmet, 1, W)); + GregTechAPI.sElectroHazmatList.add(new ItemStack(Items.chainmail_chestplate, 1, W)); + GregTechAPI.sElectroHazmatList.add(new ItemStack(Items.chainmail_leggings, 1, W)); + GregTechAPI.sElectroHazmatList.add(new ItemStack(Items.chainmail_boots, 1, W)); + + // Infinity Hazmat + addFullHazmatToGeneralItem(Avaritia.ID, "Infinity_Helm", 1L); + addFullHazmatToGeneralItem(Avaritia.ID, "Infinity_Chest", 1L); + addFullHazmatToGeneralItem(Avaritia.ID, "Infinity_Pants", 1L); + addFullHazmatToGeneralItem(Avaritia.ID, "Infinity_Shoes", 1L); + + // EnderIO Hazmat + addFullHazmatToGeneralItem(EnderIO.ID, "item.endSteel_helmet", 1L); + addFullHazmatToGeneralItem(EnderIO.ID, "item.endSteel_chestplate", 1L); + addFullHazmatToGeneralItem(EnderIO.ID, "item.endSteel_leggings", 1L); + addFullHazmatToGeneralItem(EnderIO.ID, "item.endSteel_boots", 1L); + addFullHazmatToGeneralItem(EnderIO.ID, "item.stellar_helmet", 1L); + addFullHazmatToGeneralItem(EnderIO.ID, "item.stellar_chestplate", 1L); + addFullHazmatToGeneralItem(EnderIO.ID, "item.stellar_leggings", 1L); + addFullHazmatToGeneralItem(EnderIO.ID, "item.stellar_boots", 1L); + + GregTechAPI.sLoadStarted = true; + for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry + .getRegisteredFluidContainerData()) { + if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) { + tData.fluid.amount = 0; + break; + } + } + GTLanguageManager.writePlaceholderStrings(); + } + + public static long tBits = GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED + | GTModHandler.RecipeBits.ONLY_ADD_IF_RESULT_IS_NOT_NULL + | GTModHandler.RecipeBits.NOT_REMOVABLE; + + public void onPostLoad() { + GTLog.out.println("GTMod: Beginning PostLoad-Phase."); + GTLog.ore.println("GTMod: Beginning PostLoad-Phase."); + if (GTLog.pal != null) { + final Thread playerActivityLogger = new Thread(new GTPlayerActivityLogger()); + playerActivityLogger.setDaemon(true); + playerActivityLogger.setName("GT5U Player activity logger"); + playerActivityLogger.start(); + } + GregTechAPI.sPostloadStarted = true; + + // This needs to happen late enough that all of the fluids we need have been registered. + // onLoad() seems to be too early, as the New Horizons Core Mod registers some fluids in post-load. + MetaGeneratedItem98.init(); + + GTOreDictUnificator.addItemData(new ItemStack(Items.iron_door, 1), new ItemData(Materials.Iron, 21772800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Items.wooden_door, 1, 32767), new ItemData(Materials.Wood, 21772800L)); + for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry + .getRegisteredFluidContainerData()) { + if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) { + tData.fluid.amount = 0; + break; + } + } + GTLog.out.println("GTMod: Adding Configs specific for MetaTileEntities"); + try { + for (int i = 1; i < GregTechAPI.METATILEENTITIES.length; i++) { + if (GregTechAPI.METATILEENTITIES[i] != null) { + GregTechAPI.METATILEENTITIES[i].onConfigLoad(); + } + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + GTLog.out.println("GTMod: Adding Tool Usage Crafting Recipes for OreDict Items."); + for (Materials aMaterial : Materials.values()) { + if ((aMaterial.mUnificatable) && (aMaterial.mMaterialInto == aMaterial)) { + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), + tBits, + new Object[] { "h", "X", 'X', OrePrefixes.crushedCentrifuged.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), + tBits, + new Object[] { "h", "X", 'X', OrePrefixes.crystalline.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), + tBits, + new Object[] { "h", "X", 'X', OrePrefixes.crystal.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L), + tBits, + new Object[] { "h", "X", 'X', OrePrefixes.crushedPurified.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L), + tBits, + new Object[] { "h", "X", 'X', OrePrefixes.cleanGravel.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L), + tBits, + new Object[] { "h", "X", 'X', OrePrefixes.reduced.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), + tBits, + new Object[] { "h", "X", 'X', OrePrefixes.clump.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), + tBits, + new Object[] { "h", "X", 'X', OrePrefixes.shard.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), + tBits, + new Object[] { "h", "X", 'X', OrePrefixes.crushed.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), + tBits, + new Object[] { "h", "X", 'X', OrePrefixes.dirtyGravel.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 4L), + tBits, + new Object[] { " X ", 'X', OrePrefixes.dust.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, 9L), + tBits, + new Object[] { "X ", 'X', OrePrefixes.dust.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), + tBits, + new Object[] { "XX", "XX", 'X', OrePrefixes.dustSmall.get(aMaterial) }); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), + tBits, + new Object[] { "XXX", "XXX", "XXX", 'X', OrePrefixes.dustTiny.get(aMaterial) }); + } + } + } + + public void onLoadComplete() {} + + public void onServerAboutToStart() { + dimensionWisePollution.clear(); // !!! IMPORTANT for map switching... + GTChunkAssociatedData.clearAll(); + } + + public void onServerStarting() { + GTLog.out.println("GTMod: ServerStarting-Phase started!"); + GTLog.ore.println("GTMod: ServerStarting-Phase started!"); + + GTMusicSystem.ServerSystem.reset(); + + this.mUniverse = null; + this.isFirstServerWorldTick = true; + for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry + .getRegisteredFluidContainerData()) { + if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) { + tData.fluid.amount = 0; + break; + } + } + try { + for (int i = 1; i < GregTechAPI.METATILEENTITIES.length; i++) { + if (GregTechAPI.METATILEENTITIES[i] != null) { + GregTechAPI.METATILEENTITIES[i].onServerStart(); + } + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + public void onServerStarted() { + GregTechAPI.sWirelessRedstone.clear(); + MTEDroneCentre.getCentreMap() + .clear(); + GTLog.out.println( + "GTMod: Cleaning up all OreDict Crafting Recipes, which have an empty List in them, since they are never meeting any Condition."); + List tList = CraftingManager.getInstance() + .getRecipeList(); + for (int i = 0; i < tList.size(); i++) { + if ((tList.get(i) instanceof ShapedOreRecipe)) { + for (Object tObject : ((ShapedOreRecipe) tList.get(i)).getInput()) { + if (((tObject instanceof List)) && (((List) tObject).isEmpty())) { + tList.remove(i--); + break; + } + } + } else if ((tList.get(i) instanceof ShapelessOreRecipe)) { + for (Object tObject : ((ShapelessOreRecipe) tList.get(i)).getInput()) { + if (((tObject instanceof List)) && (((List) tObject).isEmpty())) { + tList.remove(i--); + break; + } + } + } + } + } + + public void onServerStopping() { + GTMusicSystem.ServerSystem.reset(); + File tSaveDirectory = getSaveDirectory(); + GregTechAPI.sWirelessRedstone.clear(); + if (tSaveDirectory != null) { + try { + for (int i = 1; i < GregTechAPI.METATILEENTITIES.length; i++) { + if (GregTechAPI.METATILEENTITIES[i] != null) { + GregTechAPI.METATILEENTITIES[i].onWorldSave(tSaveDirectory); + } + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + this.mUniverse = null; + // GT_ChunkAssociatedData.saveAll(); todo: figure out if this is needed + + } + + @SubscribeEvent + public void onClientConnectedToServerEvent(FMLNetworkEvent.ClientConnectedToServerEvent aEvent) {} + + /** + * Tells {@link GTNEIDefaultHandler} to reload recipes. + */ + public void reloadNEICache() {} + + /** + * Logging in to server or {@link #reloadNEICache} being called increases the count. + */ + public int getNEIReloadCount() { + return 0; + } + + @SubscribeEvent + public void onArrowNockEvent(ArrowNockEvent aEvent) { + if ((!aEvent.isCanceled()) && (GTUtility.isStackValid(aEvent.result)) + && (GTUtility.getProjectile(SubTag.PROJECTILE_ARROW, aEvent.entityPlayer.inventory) != null)) { + aEvent.entityPlayer.setItemInUse( + aEvent.result, + aEvent.result.getItem() + .getMaxItemUseDuration(aEvent.result)); + aEvent.setCanceled(true); + } + } + + @SubscribeEvent + public void onArrowLooseEvent(ArrowLooseEvent aEvent) { + ItemStack aArrow = GTUtility.getProjectile(SubTag.PROJECTILE_ARROW, aEvent.entityPlayer.inventory); + if ((!aEvent.isCanceled()) && (GTUtility.isStackValid(aEvent.bow)) + && (aArrow != null) + && ((aEvent.bow.getItem() instanceof ItemBow))) { + float tSpeed = aEvent.charge / 20.0F; + tSpeed = (tSpeed * tSpeed + tSpeed * 2.0F) / 3.0F; + if (tSpeed < 0.1D) { + return; + } + if (tSpeed > 1.0D) { + tSpeed = 1.0F; + } + EntityArrow tArrowEntity = ((IProjectileItem) aArrow.getItem()).getProjectile( + SubTag.PROJECTILE_ARROW, + aArrow, + aEvent.entityPlayer.worldObj, + aEvent.entityPlayer, + tSpeed * 2.0F); + if (tSpeed >= 1.0F) { + tArrowEntity.setIsCritical(true); + } + int tLevel = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, aEvent.bow); + if (tLevel > 0) { + tArrowEntity.setDamage(tArrowEntity.getDamage() + tLevel * 0.5D + 0.5D); + } + tLevel = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, aEvent.bow); + if (tLevel > 0) { + tArrowEntity.setKnockbackStrength(tLevel); + } + tLevel = EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, aEvent.bow); + if (tLevel > 0) { + tArrowEntity.setFire(tLevel * 100); + } + aEvent.bow.damageItem(1, aEvent.entityPlayer); + aEvent.bow.getItem(); + + new WorldSpawnedEventBuilder.SoundAtEntityEventBuilder().setPitch(0.64893958288F + tSpeed * 0.5F) + .setVolume(1f) + .setIdentifier(SoundResource.RANDOM_BOW) + .setEntity(aEvent.entityPlayer) + .setWorld(aEvent.entityPlayer.worldObj) + .run(); + + tArrowEntity.canBePickedUp = 1; + if (!aEvent.entityPlayer.capabilities.isCreativeMode) { + aArrow.stackSize -= 1; + } + if (aArrow.stackSize == 0) { + GTUtility.removeNullStacksFromInventory(aEvent.entityPlayer.inventory); + } + if (!aEvent.entityPlayer.worldObj.isRemote) { + aEvent.entityPlayer.worldObj.spawnEntityInWorld(tArrowEntity); + } + aEvent.setCanceled(true); + } + } + + @SubscribeEvent + public void onEndermanTeleportEvent(EnderTeleportEvent aEvent) { + if (((aEvent.entityLiving instanceof EntityEnderman)) + && (aEvent.entityLiving.getActivePotionEffect(Potion.weakness) != null)) { + aEvent.setCanceled(true); + } + } + + @SubscribeEvent + public void onEntitySpawningEvent(EntityJoinWorldEvent aEvent) { + if (aEvent.entity == null) { + return; + } + + if (aEvent.entity.worldObj.isRemote) { + return; + } + + if ((aEvent.entity instanceof EntityItem)) { + ((EntityItem) aEvent.entity) + .setEntityItemStack(GTOreDictUnificator.get(true, ((EntityItem) aEvent.entity).getEntityItem(), true)); + } + } + + @SubscribeEvent + public void onPlayerJoinEvent(cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent event) { + if (event.player == null || event.player.isClientWorld() + || !(event.player instanceof EntityPlayerMP mpPlayer)) { + return; + } + GTValues.NW.sendToPlayer(new GTPacketMusicSystemData(GTMusicSystem.ServerSystem.serialize()), mpPlayer); + } + + @SubscribeEvent + public void onOreGenEvent(OreGenEvent.GenerateMinable aGenerator) { + if ((this.mDisableVanillaOres) && ((aGenerator.generator instanceof WorldGenMinable)) + && (PREVENTED_ORES.contains(aGenerator.type))) { + aGenerator.setResult(Result.DENY); + } + } + + private String getDataAndTime() { + return this.mDateFormat.format(new Date()); + } + + @SubscribeEvent + public void onPlayerInteraction(PlayerInteractEvent aEvent) { + if ((aEvent.entityPlayer == null) || (aEvent.entityPlayer.worldObj == null) + || (aEvent.action == null) + || (aEvent.world.provider == null)) { + return; + } + if ((!aEvent.entityPlayer.worldObj.isRemote) && (aEvent.action != PlayerInteractEvent.Action.RIGHT_CLICK_AIR) + && (GTLog.pal != null)) { + this.mBufferedPlayerActivity.offer( + getDataAndTime() + ";" + + aEvent.action.name() + + ";" + + aEvent.entityPlayer.getDisplayName() + + ";DIM:" + + aEvent.world.provider.dimensionId + + ";" + + aEvent.x + + ";" + + aEvent.y + + ";" + + aEvent.z + + ";|;" + + aEvent.x / 10 + + ";" + + aEvent.y / 10 + + ";" + + aEvent.z / 10); + } + ItemStack aStack = aEvent.entityPlayer.getCurrentEquippedItem(); + if ((aStack != null) && (aEvent.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) + && (aStack.getItem() == Items.flint_and_steel)) { + if ((!aEvent.world.isRemote) && (!aEvent.entityPlayer.capabilities.isCreativeMode) + && (aEvent.world.rand.nextInt(100) >= this.mFlintChance)) { + aEvent.setCanceled(true); + aStack.damageItem(1, aEvent.entityPlayer); + if (aStack.getItemDamage() >= aStack.getMaxDamage()) { + aStack.stackSize -= 1; + } + if (aStack.stackSize <= 0) { + ForgeEventFactory.onPlayerDestroyItem(aEvent.entityPlayer, aStack); + } + } + } + } + + @SubscribeEvent + public void onBlockBreakingEvent(BlockEvent.BreakEvent event) { + EntityPlayer player = event.getPlayer(); + if (player == null) return; + + ItemStack item = event.getPlayer() + .getCurrentEquippedItem(); + if (item == null) return; + + if (!(item.getItem() instanceof MetaGeneratedTool tool)) return; + + IToolStats stats = tool.getToolStats(item); + if (stats == null) return; + + TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); + stats.onBreakBlock(player, event.x, event.y, event.z, event.block, (byte) event.blockMetadata, tile, event); + } + + @SubscribeEvent + public void onBlockHarvestingEvent(BlockEvent.HarvestDropsEvent aEvent) { + if (aEvent.harvester == null) return; + + if ((!aEvent.world.isRemote) && (GTLog.pal != null)) { + this.mBufferedPlayerActivity.offer( + getDataAndTime() + ";HARVEST_BLOCK;" + + aEvent.harvester.getDisplayName() + + ";DIM:" + + aEvent.world.provider.dimensionId + + ";" + + aEvent.x + + ";" + + aEvent.y + + ";" + + aEvent.z + + ";|;" + + aEvent.x / 10 + + ";" + + aEvent.y / 10 + + ";" + + aEvent.z / 10); + } + + ItemStack aStack = aEvent.harvester.getCurrentEquippedItem(); + if (aStack == null) return; + + if ((aStack.getItem() instanceof MetaGeneratedTool tool)) { + tool.onHarvestBlockEvent( + aEvent.drops, + aStack, + aEvent.harvester, + aEvent.block, + aEvent.x, + aEvent.y, + aEvent.z, + (byte) aEvent.blockMetadata, + aEvent.fortuneLevel, + aEvent.isSilkTouching, + aEvent); + } + if (EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, aStack) > 2) { + try { + for (ItemStack tDrop : aEvent.drops) { + ItemStack tSmeltingOutput = GTModHandler.getSmeltingOutput(tDrop, false, null); + if (tSmeltingOutput != null) { + tDrop.stackSize *= tSmeltingOutput.stackSize; + tSmeltingOutput.stackSize = tDrop.stackSize; + GTUtility.setStack(tDrop, tSmeltingOutput); + } + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + } + + @SubscribeEvent + public void registerOre(OreDictionary.OreRegisterEvent aEvent) { + ModContainer tContainer = Loader.instance() + .activeModContainer(); + String aMod = tContainer == null ? "UNKNOWN" : tContainer.getModId(); + String aOriginalMod = aMod; + if (GTOreDictUnificator.isRegisteringOres()) { + aMod = GregTech.ID; + } else if (aMod.equals(GregTech.ID)) { + aMod = "UNKNOWN"; + } + if ((aEvent == null) || (aEvent.Ore == null) + || (aEvent.Ore.getItem() == null) + || (aEvent.Name == null) + || (aEvent.Name.isEmpty()) + || (aEvent.Name.replaceAll("_", "") + .length() - aEvent.Name.length() == 9)) { + if (aOriginalMod.equals(GregTech.ID)) { + aOriginalMod = "UNKNOWN"; + } + GTLog.ore.println( + aOriginalMod + + " did something very bad! The registration is too invalid to even be shown properly. This happens only if you register null, invalid Items, empty Strings or even nonexisting Events to the OreDict."); + throw new IllegalArgumentException( + aOriginalMod + + " did something very bad! The registration is too invalid to even be shown properly. This happens only if you register null, invalid Items, empty Strings or even nonexisting Events to the OreDict."); + } + try { + aEvent.Ore.stackSize = 1; + + // skipping TinkerConstruct ore registration + if (this.mIgnoreTcon && aOriginalMod.equals(TinkerConstruct.ID)) { + return; + } + String tModToName = aMod + " -> " + aEvent.Name; + if (this.mOreDictActivated || GregTechAPI.sPostloadStarted || GregTechAPI.sLoadFinished) { + tModToName = aOriginalMod + " --Late--> " + aEvent.Name; + } + if (((aEvent.Ore.getItem() instanceof ItemBlock)) + || (GTUtility.getBlockFromStack(aEvent.Ore) != Blocks.air)) { + GTOreDictUnificator.addToBlacklist(aEvent.Ore); + } + this.mRegisteredOres.add(aEvent.Ore); + if (this.mIgnoredItems.contains(aEvent.Name)) { + if ((aEvent.Name.startsWith("item"))) { + GTLog.ore.println(tModToName); + if (aEvent.Name.equals("itemCopperWire")) { + GTOreDictUnificator.registerOre(OreDictNames.craftingWireCopper, aEvent.Ore); + } + if (aEvent.Name.equals("itemRubber")) { + GTOreDictUnificator.registerOre(OrePrefixes.ingot, Materials.Rubber, aEvent.Ore); + } + return; + } + } else if (this.mIgnoredNames.contains(aEvent.Name)) { + GTLog.ore.println(tModToName + " is getting ignored via hardcode."); + return; + } else if (aEvent.Name.equals("stone")) { + GTOreDictUnificator.registerOre("stoneSmooth", aEvent.Ore); + return; + } else if (aEvent.Name.equals("cobblestone")) { + GTOreDictUnificator.registerOre("stoneCobble", aEvent.Ore); + return; + } else if ((aEvent.Name.contains("|")) || (aEvent.Name.contains("*")) + || (aEvent.Name.contains(":")) + || (aEvent.Name.contains(".")) + || (aEvent.Name.contains("$"))) { + GTLog.ore + .println(tModToName + " is using a private Prefix and is therefor getting ignored properly."); + return; + } else if (aEvent.Name.equals("copperWire")) { + GTOreDictUnificator.registerOre(OreDictNames.craftingWireCopper, aEvent.Ore); + } else if (aEvent.Name.equals("oreHeeEndrium")) { + GTOreDictUnificator.registerOre(OrePrefixes.ore, Materials.HeeEndium, aEvent.Ore); + } else if (aEvent.Name.equals("sheetPlastic")) { + GTOreDictUnificator.registerOre(OrePrefixes.plate, Materials.Plastic, aEvent.Ore); + } else if (aEvent.Name.startsWith("shard")) { + switch (aEvent.Name) { + case "shardAir" -> { + GTOreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedAir, aEvent.Ore); + return; + } + case "shardWater" -> { + GTOreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedWater, aEvent.Ore); + return; + } + case "shardFire" -> { + GTOreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedFire, aEvent.Ore); + return; + } + case "shardEarth" -> { + GTOreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedEarth, aEvent.Ore); + return; + } + case "shardOrder" -> { + GTOreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedOrder, aEvent.Ore); + return; + } + case "shardEntropy" -> { + GTOreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedEntropy, aEvent.Ore); + return; + } + } + } else if (aEvent.Name.equals("fieryIngot")) { + GTOreDictUnificator.registerOre(OrePrefixes.ingot, Materials.FierySteel, aEvent.Ore); + return; + } else if (aEvent.Name.equals("ironwood")) { + GTOreDictUnificator.registerOre(OrePrefixes.ingot, Materials.IronWood, aEvent.Ore); + return; + } else if (aEvent.Name.equals("steeleaf")) { + GTOreDictUnificator.registerOre(OrePrefixes.ingot, Materials.Steeleaf, aEvent.Ore); + return; + } else if (aEvent.Name.equals("knightmetal")) { + GTOreDictUnificator.registerOre(OrePrefixes.ingot, Materials.Knightmetal, aEvent.Ore); + return; + } else if (aEvent.Name.equals("compressedAluminum")) { + GTOreDictUnificator.registerOre(OrePrefixes.compressed, Materials.Aluminium, aEvent.Ore); + return; + } else if (aEvent.Name.contains(" ")) { + GTLog.ore.println( + tModToName + " is getting re-registered because the OreDict Name containing invalid spaces."); + GTOreDictUnificator + .registerOre(aEvent.Name.replaceAll(" ", ""), GTUtility.copyAmount(1, aEvent.Ore)); + aEvent.Ore.setStackDisplayName("Invalid OreDictionary Tag"); + return; + } else if (this.mInvalidNames.contains(aEvent.Name)) { + GTLog.ore.println(tModToName + " is wrongly registered and therefor getting ignored."); + + return; + } + OrePrefixes aPrefix = OrePrefixes.getOrePrefix(aEvent.Name); + Materials aMaterial = Materials._NULL; + if ((aPrefix == OrePrefixes.nugget) && (aMod.equals(Thaumcraft.ID)) + && (aEvent.Ore.getItem() + .getUnlocalizedName() + .contains("ItemResource"))) { + return; + } + if (aPrefix == null) { + if (aEvent.Name.toLowerCase() + .equals(aEvent.Name)) { + GTLog.ore.println(tModToName + " is invalid due to being solely lowercased."); + return; + } else if (aEvent.Name.toUpperCase() + .equals(aEvent.Name)) { + GTLog.ore.println(tModToName + " is invalid due to being solely uppercased."); + return; + } else if (Character.isUpperCase(aEvent.Name.charAt(0))) { + GTLog.ore.println(tModToName + " is invalid due to the first character being uppercased."); + } + } else { + if (aPrefix.mDontUnificateActively) { + GTOreDictUnificator.addToBlacklist(aEvent.Ore); + } + if (aPrefix != aPrefix.mPrefixInto) { + String tNewName = aEvent.Name.replaceFirst(aPrefix.toString(), aPrefix.mPrefixInto.toString()); + if (!GTOreDictUnificator.isRegisteringOres()) { + GTLog.ore.println( + tModToName + " uses a depricated Prefix, and is getting re-registered as " + tNewName); + } + GTOreDictUnificator.registerOre(tNewName, aEvent.Ore); + return; + } + String tName = aEvent.Name.replaceFirst(aPrefix.toString(), ""); + if (tName.length() > 0) { + char firstChar = tName.charAt(0); + if (Character.isUpperCase(firstChar) || Character.isLowerCase(firstChar) + || firstChar == '_' + || Character.isDigit(firstChar)) { + if (aPrefix.mIsMaterialBased) { + aMaterial = Materials.get(tName); + if (aMaterial != aMaterial.mMaterialInto) { + GTOreDictUnificator.registerOre(aPrefix, aMaterial.mMaterialInto, aEvent.Ore); + if (!GTOreDictUnificator.isRegisteringOres()) { + GTLog.ore.println( + tModToName + " uses a deprecated Material and is getting re-registered as " + + aPrefix.get(aMaterial.mMaterialInto)); + } + return; + } + if (!aPrefix.isIgnored(aMaterial)) { + aPrefix.add(GTUtility.copyAmount(1, aEvent.Ore)); + } + if (aMaterial != Materials._NULL) { + Materials tReRegisteredMaterial; + for (Iterator i$ = aMaterial.mOreReRegistrations.iterator(); i$ + .hasNext(); GTOreDictUnificator + .registerOre(aPrefix, tReRegisteredMaterial, aEvent.Ore)) { + tReRegisteredMaterial = i$.next(); + } + aMaterial.add(GTUtility.copyAmount(1, aEvent.Ore)); + + if (GregTechAPI.sThaumcraftCompat != null && aPrefix.doGenerateItem(aMaterial) + && !aPrefix.isIgnored(aMaterial)) { + List tAspects = new ArrayList<>(); + for (TC_AspectStack tAspect : aPrefix.mAspects) tAspect.addToAspectList(tAspects); + if (aPrefix.mMaterialAmount >= 3628800 || aPrefix.mMaterialAmount < 0) + for (TC_AspectStack tAspect : aMaterial.mAspects) + tAspect.addToAspectList(tAspects); + GregTechAPI.sThaumcraftCompat.registerThaumcraftAspectsToItem( + GTUtility.copyAmount(1, aEvent.Ore), + tAspects, + aEvent.Name); + } + + switch (aPrefix) { + case crystal -> { + if ((aMaterial == Materials.CertusQuartz) + || (aMaterial == Materials.NetherQuartz) + || (aMaterial == Materials.Fluix)) { + GTOreDictUnificator.registerOre(OrePrefixes.gem, aMaterial, aEvent.Ore); + } + } + case gem -> { + if (aMaterial == Materials.Lapis || aMaterial == Materials.Sodalite) { + GTOreDictUnificator.registerOre(Dyes.dyeBlue, aEvent.Ore); + } else if (aMaterial == Materials.Lazurite) { + GTOreDictUnificator.registerOre(Dyes.dyeCyan, aEvent.Ore); + } else + if (aMaterial == Materials.InfusedAir || aMaterial == Materials.InfusedWater + || aMaterial == Materials.InfusedFire + || aMaterial == Materials.InfusedEarth + || aMaterial == Materials.InfusedOrder + || aMaterial == Materials.InfusedEntropy) { + GTOreDictUnificator.registerOre( + aMaterial.mName.replaceFirst("Infused", "shard"), + aEvent.Ore); + } else if (aMaterial == Materials.Chocolate) { + GTOreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore); + } else if (aMaterial == Materials.CertusQuartz + || aMaterial == Materials.NetherQuartz) { + GTOreDictUnificator + .registerOre(OrePrefixes.item.get(aMaterial), aEvent.Ore); + GTOreDictUnificator + .registerOre(OrePrefixes.crystal, aMaterial, aEvent.Ore); + GTOreDictUnificator + .registerOre(OreDictNames.craftingQuartz, aEvent.Ore); + } else + if (aMaterial == Materials.Fluix || aMaterial == Materials.Quartz + || aMaterial == Materials.Quartzite) { + GTOreDictUnificator.registerOre( + OrePrefixes.crystal, + aMaterial, + aEvent.Ore); + GTOreDictUnificator + .registerOre(OreDictNames.craftingQuartz, aEvent.Ore); + } + } + case cableGt01 -> { + if (aMaterial == Materials.Tin) { + GTOreDictUnificator.registerOre(OreDictNames.craftingWireTin, aEvent.Ore); + } else if (aMaterial == Materials.AnyCopper) { + GTOreDictUnificator + .registerOre(OreDictNames.craftingWireCopper, aEvent.Ore); + } else if (aMaterial == Materials.Gold) { + GTOreDictUnificator.registerOre(OreDictNames.craftingWireGold, aEvent.Ore); + } else if (aMaterial == Materials.AnyIron) { + GTOreDictUnificator.registerOre(OreDictNames.craftingWireIron, aEvent.Ore); + } + } + case lens -> { + if ((aMaterial.contains(SubTag.TRANSPARENT)) + && (aMaterial.mColor != Dyes._NULL)) { + GTOreDictUnificator.registerOre( + "craftingLens" + aMaterial.mColor.toString() + .replaceFirst("dye", ""), + aEvent.Ore); + } + } + case plate -> { + if ((aMaterial == Materials.Plastic) || (aMaterial == Materials.Rubber)) { + GTOreDictUnificator.registerOre(OrePrefixes.sheet, aMaterial, aEvent.Ore); + } else if (aMaterial == Materials.Silicon) { + GTOreDictUnificator.registerOre(OrePrefixes.item, aMaterial, aEvent.Ore); + } else if (aMaterial == Materials.Wood) { + GTOreDictUnificator.addToBlacklist(aEvent.Ore); + GTOreDictUnificator.registerOre(OrePrefixes.plank, aMaterial, aEvent.Ore); + } + } + case cell -> { + if (aMaterial == Materials.Empty) { + GTOreDictUnificator.addToBlacklist(aEvent.Ore); + } + } + case gearGt -> GTOreDictUnificator + .registerOre(OrePrefixes.gear, aMaterial, aEvent.Ore); + case stick -> { + if (!GTRecipeRegistrator.sRodMaterialList.contains(aMaterial)) { + GTRecipeRegistrator.sRodMaterialList.add(aMaterial); + } else if (aMaterial == Materials.Wood) { + GTOreDictUnificator.addToBlacklist(aEvent.Ore); + } else if ((aMaterial == Materials.Tin) || (aMaterial == Materials.Lead) + || (aMaterial == Materials.SolderingAlloy)) { + GTOreDictUnificator + .registerOre(ToolDictNames.craftingToolSolderingMetal, aEvent.Ore); + } + } + case dust -> { + if (aMaterial == Materials.Salt) { + GTOreDictUnificator.registerOre("itemSalt", aEvent.Ore); + } else if (aMaterial == Materials.Wood) { + GTOreDictUnificator.registerOre("pulpWood", aEvent.Ore); + } else if (aMaterial == Materials.Wheat) { + GTOreDictUnificator.registerOre("foodFlour", aEvent.Ore); + } else if (aMaterial == Materials.Lapis) { + GTOreDictUnificator.registerOre(Dyes.dyeBlue, aEvent.Ore); + } else if (aMaterial == Materials.Lazurite) { + GTOreDictUnificator.registerOre(Dyes.dyeCyan, aEvent.Ore); + } else if (aMaterial == Materials.Sodalite) { + GTOreDictUnificator.registerOre(Dyes.dyeBlue, aEvent.Ore); + } else if (aMaterial == Materials.Cocoa) { + GTOreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore); + GTOreDictUnificator.registerOre("foodCocoapowder", aEvent.Ore); + } else if (aMaterial == Materials.Coffee) { + GTOreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore); + } else if (aMaterial == Materials.BrownLimonite) { + GTOreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore); + } else if (aMaterial == Materials.YellowLimonite) { + GTOreDictUnificator.registerOre(Dyes.dyeYellow, aEvent.Ore); + } + } + case ingot -> { + if (aMaterial == Materials.Rubber) { + GTOreDictUnificator.registerOre("itemRubber", aEvent.Ore); + } else if (aMaterial == Materials.FierySteel) { + GTOreDictUnificator.registerOre("fieryIngot", aEvent.Ore); + } else if (aMaterial == Materials.IronWood) { + GTOreDictUnificator.registerOre("ironwood", aEvent.Ore); + } else if (aMaterial == Materials.Steeleaf) { + GTOreDictUnificator.registerOre("steeleaf", aEvent.Ore); + } else if (aMaterial == Materials.Knightmetal) { + GTOreDictUnificator.registerOre("knightmetal", aEvent.Ore); + } else if ((aMaterial == Materials.Brass) && (aEvent.Ore.getItemDamage() == 2) + && (aEvent.Ore.getUnlocalizedName() + .equals("item.ingotBrass")) + && (new ItemStack(aEvent.Ore.getItem(), 1, 0).getUnlocalizedName() + .contains("red"))) { + GTOreDictUnificator.set( + OrePrefixes.ingot, + Materials.RedAlloy, + new ItemStack(aEvent.Ore.getItem(), 1, 0)); + GTOreDictUnificator.set( + OrePrefixes.ingot, + Materials.BlueAlloy, + new ItemStack(aEvent.Ore.getItem(), 1, 1)); + GTOreDictUnificator.set( + OrePrefixes.ingot, + Materials.Brass, + new ItemStack(aEvent.Ore.getItem(), 1, 2)); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(aEvent.Ore.getItem(), 1, 3)) + .itemOutputs(new ItemStack(aEvent.Ore.getItem(), 16, 4)) + .duration(20 * SECONDS) + .eut(8) + .addTo(cutterRecipes); + } + } + default -> {} + } + if (aPrefix.mIsUnificatable && !aMaterial.mUnificatable) { + return; + } + } else { + for (Dyes tDye : Dyes.VALUES) { + if (aEvent.Name.endsWith( + tDye.name() + .replaceFirst("dye", ""))) { + GTOreDictUnificator.addToBlacklist(aEvent.Ore); + GTLog.ore.println( + tModToName + + " Oh man, why the fuck would anyone need a OreDictified Color for this, that is even too much for GregTech... do not report this, this is just a random Comment about how ridiculous this is."); + return; + } + } + // GT_FML_LOGGER.info("Material Name: "+aEvent.Name+ " + // !!!Unknown Material detected!!! Please report to GregTech Intergalactical for + // additional compatiblity. This is not an Error, an Issue nor a Lag Source, it is just + // an Information, which you should pass to me."); + // GTLog.ore.println(tModToName + " uses an unknown + // Material. Report this to GregTech."); + return; + } + } else { + aPrefix.add(GTUtility.copyAmount(1, aEvent.Ore)); + } + } + } else if (aPrefix.mIsSelfReferencing) { + aPrefix.add(GTUtility.copyAmount(1, aEvent.Ore)); + } else { + GTLog.ore.println(tModToName + " uses a Prefix as full OreDict Name, and is therefor invalid."); + aEvent.Ore.setStackDisplayName("Invalid OreDictionary Tag"); + return; + } + switch (aPrefix) { + case dye -> { + if (GTUtility.isStringValid(tName)) { + GTOreDictUnificator.registerOre(OrePrefixes.dye, aEvent.Ore); + } + } + case stoneSmooth -> GTOreDictUnificator.registerOre("stone", aEvent.Ore); + case stoneCobble -> GTOreDictUnificator.registerOre("cobblestone", aEvent.Ore); + case plank -> { + if (tName.equals("Wood")) { + GTOreDictUnificator.addItemData(aEvent.Ore, new ItemData(Materials.Wood, 3628800L)); + } + } + case slab -> { + if (tName.equals("Wood")) { + GTOreDictUnificator.addItemData(aEvent.Ore, new ItemData(Materials.Wood, 1814400L)); + } + } + case sheet -> { + if (tName.equals("Plastic")) { + GTOreDictUnificator.registerOre(OrePrefixes.plate, Materials.Plastic, aEvent.Ore); + } else if (tName.equals("Rubber")) { + GTOreDictUnificator.registerOre(OrePrefixes.plate, Materials.Rubber, aEvent.Ore); + } + } + case crafting -> { + switch (tName) { + case "ToolSolderingMetal" -> GregTechAPI.registerSolderingMetal(aEvent.Ore); + case "IndustrialDiamond" -> GTOreDictUnificator.addToBlacklist(aEvent.Ore); + case "WireCopper" -> GTOreDictUnificator + .registerOre(OrePrefixes.wire, Materials.Copper, aEvent.Ore); + } + } + case wood -> { + if (tName.equals("Rubber")) { + GTOreDictUnificator.registerOre("logRubber", aEvent.Ore); + } + } + case food -> { + if (tName.equals("Cocoapowder")) { + GTOreDictUnificator.registerOre(OrePrefixes.dust, Materials.Cocoa, aEvent.Ore); + } + } + default -> {} + } + } + GTLog.ore.println(tModToName); + + OreDictEventContainer tOre = new OreDictEventContainer(aEvent, aPrefix, aMaterial, aMod); + if ((!this.mOreDictActivated) || (!GregTechAPI.sUnificationEntriesRegistered)) { + this.mEvents.add(tOre); + } else { + this.mEvents.clear(); + } + if (this.mOreDictActivated) { + registerRecipes(tOre); + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + + @SuppressWarnings("deprecated") + public static void stepMaterialsVanilla(Collection mEvents, + ProgressManager.ProgressBar progressBar) { + int size = 5; + int sizeStep = mEvents.size() / 20 - 1; + GTProxy.OreDictEventContainer tEvent; + for (Iterator i$ = mEvents.iterator(); i$.hasNext(); GTProxy + .registerRecipes(tEvent)) { + tEvent = i$.next(); + sizeStep--; + if (sizeStep == 0) { + GT_FML_LOGGER.info("Baking : " + size + "%", new Object[0]); + sizeStep = mEvents.size() / 20 - 1; + size += 5; + } + progressBar.step(tEvent.mMaterial == null ? "" : tEvent.mMaterial.toString()); + } + ProgressManager.pop(progressBar); + } + + @SubscribeEvent + public void onLivingUpdate(LivingUpdateEvent aEvent) { + if (aEvent.entityLiving.onGround) { + int tX = MathHelper.floor_double(aEvent.entityLiving.posX), + tY = MathHelper.floor_double(aEvent.entityLiving.boundingBox.minY - 0.001F), + tZ = MathHelper.floor_double(aEvent.entityLiving.posZ); + Block tBlock = aEvent.entityLiving.worldObj.getBlock(tX, tY, tZ); + if (tBlock instanceof IBlockOnWalkOver) + ((IBlockOnWalkOver) tBlock).onWalkOver(aEvent.entityLiving, aEvent.entityLiving.worldObj, tX, tY, tZ); + } + } + + @SubscribeEvent + public void onFluidContainerRegistration(FluidContainerRegistry.FluidContainerRegisterEvent aFluidEvent) { + if ((aFluidEvent.data.filledContainer.getItem() == Items.potionitem) + && (aFluidEvent.data.filledContainer.getItemDamage() == 0)) { + aFluidEvent.data.fluid.amount = 0; + } + GTOreDictUnificator.addToBlacklist(aFluidEvent.data.emptyContainer); + GTOreDictUnificator.addToBlacklist(aFluidEvent.data.filledContainer); + GTUtility.addFluidContainerData(aFluidEvent.data); + } + + @SubscribeEvent + public void onServerTickEvent(TickEvent.ServerTickEvent aEvent) { + if (aEvent.side.isServer()) { + if (aEvent.phase == TickEvent.Phase.START) { + TICK_LOCK.lock(); + } else { + TICK_LOCK.unlock(); + GTMusicSystem.ServerSystem.tick(); + } + + // Making sure it is being freed up in order to prevent exploits or Garbage Collection mishaps. + LAST_BROKEN_TILEENTITY.set(null); + } + } + + @SubscribeEvent + public void onWorldTickEvent(TickEvent.WorldTickEvent aEvent) { + if (aEvent.world.provider.dimensionId == 0) mTicksUntilNextCraftSound--; + if (isFirstWorldTick) { + for (Runnable runnable : GregTechAPI.sFirstWorldTick) runnable.run(); + isFirstWorldTick = false; + GTValues.worldTickHappened = true; + } + if (aEvent.side.isServer()) { + if (this.mUniverse == null) { + this.mUniverse = aEvent.world; + } + if (this.isFirstServerWorldTick) { + File tSaveDiretory = getSaveDirectory(); + if (tSaveDiretory != null) { + this.isFirstServerWorldTick = false; + try { + for (int i = 1; i < GregTechAPI.METATILEENTITIES.length; i++) { + if (GregTechAPI.METATILEENTITIES[i] != null) { + GregTechAPI.METATILEENTITIES[i].onWorldLoad(tSaveDiretory); + } + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + } + if ((aEvent.world.getTotalWorldTime() % 100L == 0L) + && ((this.mItemDespawnTime != 6000) || (this.mMaxEqualEntitiesAtOneSpot > 0))) { + long startTime = System.nanoTime(); + double oldX = 0, oldY = 0, oldZ = 0; + if (debugEntityCramming && (aEvent.world.loadedEntityList.size() != 0)) { + GTLog.out.println("CRAM: Entity list size " + aEvent.world.loadedEntityList.size()); + } + for (int i = 0; i < aEvent.world.loadedEntityList.size(); i++) { + if ((aEvent.world.loadedEntityList.get(i) instanceof Entity)) { + Entity tEntity = aEvent.world.loadedEntityList.get(i); + if (((tEntity instanceof EntityItem)) && (this.mItemDespawnTime != 6000) + && (((EntityItem) tEntity).lifespan == 6000)) { + ((EntityItem) tEntity).lifespan = this.mItemDespawnTime; + } else if (((tEntity instanceof EntityLivingBase)) && (this.mMaxEqualEntitiesAtOneSpot > 0) + && (!(tEntity instanceof EntityPlayer)) + && (tEntity.canBePushed()) + && (((EntityLivingBase) tEntity).getHealth() > 0.0F)) { + List tList = tEntity.worldObj.getEntitiesWithinAABBExcludingEntity( + tEntity, + tEntity.boundingBox.expand(0.20000000298023224D, 0.0D, 0.20000000298023224D)); + Class tClass = tEntity.getClass(); + int tEntityCount = 1; + if (tList != null) { + for (Object o : tList) { + if ((o != null) && (o.getClass() == tClass)) { + tEntityCount++; + } + } + } + if (tEntityCount > this.mMaxEqualEntitiesAtOneSpot) { + if (debugEntityCramming) { + // Cheeseball way of not receiving a bunch of spam caused by 1 location + // obviously fails if there are crammed entities in more than one spot. + if (tEntity.posX != oldX && tEntity.posY != oldY && tEntity.posZ != oldZ) { + GTLog.out.println( + "CRAM: Excess entities: " + tEntityCount + + " at X " + + tEntity.posX + + " Y " + + tEntity.posY + + " Z " + + tEntity.posZ); + oldX = tEntity.posX; + oldY = tEntity.posY; + oldZ = tEntity.posZ; + } + } + tEntity.attackEntityFrom( + DamageSource.inWall, + tEntityCount - this.mMaxEqualEntitiesAtOneSpot); + } + } + } + } + if (debugEntityCramming && (aEvent.world.loadedEntityList.size() != 0)) { + GTLog.out.println( + "CRAM: Time spent checking " + (System.nanoTime() - startTime) / 1000 + " microseconds"); + } + } + + Pollution.onWorldTick(aEvent); + } + } + + @SubscribeEvent + public void onWorldUnload(WorldEvent.Unload event) { + for (TileEntity tileEntity : event.world.loadedTileEntityList) { + if (tileEntity instanceof IGregTechTileEntity) { + tileEntity.onChunkUnload(); + } + } + } + + public static void registerRecipes(GTProxy.OreDictEventContainer aOre) { + if ((aOre.mEvent.Ore == null) || (aOre.mEvent.Ore.getItem() == null) + || (aOre.mPrefix == null) + || (aOre.mPrefix.isIgnored(aOre.mMaterial))) { + return; + } + if (aOre.mEvent.Ore.stackSize != 1) { + aOre.mEvent.Ore.stackSize = 1; + } + + aOre.mPrefix.processOre( + aOre.mMaterial == null ? Materials._NULL : aOre.mMaterial, + aOre.mEvent.Name, + aOre.mModID, + GTUtility.copyAmount(1, aOre.mEvent.Ore)); + } + + @SubscribeEvent + public void onPlayerTickEventServer(TickEvent.PlayerTickEvent aEvent) { + if ((!aEvent.side.isServer()) || (aEvent.phase == TickEvent.Phase.END) || (aEvent.player.isDead)) { + return; + } + + if ((aEvent.player.ticksExisted % 200 == 0) && (aEvent.player.capabilities.allowEdit) + && (!aEvent.player.capabilities.isCreativeMode) + && (this.mSurvivalIntoAdventure)) { + aEvent.player.setGameType(GameType.ADVENTURE); + aEvent.player.capabilities.allowEdit = false; + if (this.mAxeWhenAdventure) { + GTUtility.sendChatToPlayer( + aEvent.player, + GTLanguageManager.addStringLocalization( + "Interaction_DESCRIPTION_Index_097", + "It's dangerous to go alone! Take this.")); + aEvent.player.worldObj.spawnEntityInWorld( + new EntityItem( + aEvent.player.worldObj, + aEvent.player.posX, + aEvent.player.posY, + aEvent.player.posZ, + MetaGeneratedTool01.INSTANCE + .getToolWithStats(IDMetaTool01.AXE.ID, 1, Materials.Flint, Materials.Wood, null))); + } + } + final boolean tHungerEffect = (this.mHungerEffect) && (aEvent.player.ticksExisted % 2400 == 1200); + + if (aEvent.player.ticksExisted % 120 != 0) { + return; + } + + int tCount = 64; + for (int i = 0; i < 36; i++) { + final ItemStack tStack = aEvent.player.inventory.getStackInSlot(i); + if (tStack == null) { + continue; + } + + if (!aEvent.player.capabilities.isCreativeMode) { + GTUtility.applyRadioactivity(aEvent.player, GTUtility.getRadioactivityLevel(tStack), tStack.stackSize); + final float tHeat = GTUtility.getHeatDamageFromItem(tStack); + if (tHeat != 0.0F) { + if (tHeat > 0.0F) { + GTUtility.applyHeatDamageFromItem(aEvent.player, tHeat, tStack); + } else { + GTUtility.applyFrostDamage(aEvent.player, -tHeat); + } + } + } + if (tHungerEffect) { + tCount += tStack.stackSize * 64 / Math.max(1, tStack.getMaxStackSize()); + } + if (this.mInventoryUnification) { + GTOreDictUnificator.setStack(true, tStack); + } + + } + for (int i = 0; i < 4; i++) { + final ItemStack tStack = aEvent.player.inventory.armorInventory[i]; + if (tStack == null) { + continue; + } + + if (!aEvent.player.capabilities.isCreativeMode) { + GTUtility.applyRadioactivity(aEvent.player, GTUtility.getRadioactivityLevel(tStack), tStack.stackSize); + final float tHeat = GTUtility.getHeatDamageFromItem(tStack); + if (tHeat != 0.0F) { + if (tHeat > 0.0F) { + GTUtility.applyHeatDamageFromItem(aEvent.player, tHeat, tStack); + } else { + GTUtility.applyFrostDamage(aEvent.player, -tHeat); + } + } + } + if (tHungerEffect) { + tCount += 256; + } + + } + if (tHungerEffect) { + aEvent.player.addExhaustion(Math.max(1.0F, tCount / 666.6F)); + } + } + + public GTClientPreference getClientPreference(UUID aPlayerID) { + return mClientPrefernces.get(aPlayerID); + } + + public void setClientPreference(UUID aPlayerID, GTClientPreference aPreference) { + mClientPrefernces.put(aPlayerID, aPreference); + } + + private static List getOreDictNames(ItemStack stack) { + return Arrays.stream(OreDictionary.getOreIDs(stack)) + .mapToObj(OreDictionary::getOreName) + .collect(Collectors.toList()); + } + + @Override + public int getBurnTime(ItemStack aFuel) { + if ((aFuel == null) || (aFuel.getItem() == null)) { + return 0; + } + int rFuelValue = 0; + if ((aFuel.getItem() instanceof MetaGeneratedItem)) { + final Short tFuelValue = ((MetaGeneratedItem) aFuel.getItem()).mBurnValues + .get((short) aFuel.getItemDamage()); + if (tFuelValue != null) { + rFuelValue = Math.max(rFuelValue, tFuelValue); + } + } + final NBTTagCompound tNBT = aFuel.getTagCompound(); + if (tNBT != null) { + // See if we have something defined by NBT + final short tValue = tNBT.getShort("GT.ItemFuelValue"); + rFuelValue = Math.max(rFuelValue, tValue); + } else { + // If not check the ore dict + rFuelValue = Math.max( + rFuelValue, + getOreDictNames(aFuel).stream() + .mapToInt(f -> oreDictBurnTimes.getOrDefault(f, 0)) + .max() + .orElse(0)); + } + + // If we have something from the GT MetaGenerated_Item, ItemFuelValue, or OreDict return + if (rFuelValue > 0) return rFuelValue; + + // Otherwise, a few more checks + if (GTUtility.areStacksEqual(aFuel, new ItemStack(Blocks.wooden_button, 1))) return 150; + else if (GTUtility.areStacksEqual(aFuel, new ItemStack(Blocks.ladder, 1))) return 100; + else if (GTUtility.areStacksEqual(aFuel, new ItemStack(Items.sign, 1))) return 600; + else if (GTUtility.areStacksEqual(aFuel, new ItemStack(Items.wooden_door, 1))) return 600; + else if (GTUtility.areStacksEqual(aFuel, ItemList.Block_MSSFUEL.get(1))) return 150000; + else if (GTUtility.areStacksEqual(aFuel, ItemList.Block_SSFUEL.get(1))) return 100000; + + return 0; + } + + // ------------------------ Adds all fluids corresponding to materials ------------------------ + + public Fluid addAutoGeneratedCorrespondingFluid(Materials aMaterial) { + // If the fluid is registered as custom inside the Material's constructor then to add custom fluid + // textures go to blocks/fluids and place the .png. File should be called fluid.fluid.{unlocalised_name}.png. + // All lower case. + final String fluidTexture = aMaterial.mIconSet.is_custom ? "fluid." + aMaterial.mName.toLowerCase() + : "autogenerated"; + + return GTFluidFactory.builder(aMaterial.mName.toLowerCase(Locale.ENGLISH)) + .withLocalizedName(aMaterial.mDefaultLocalName) + .withTextureName(fluidTexture) + .withColorRGBA(aMaterial.mRGBa) + .withStateAndTemperature(LIQUID, aMaterial.getLiquidTemperature()) + .buildAndRegister() + .configureMaterials(aMaterial) + .registerBContainers(GTOreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L), ItemList.Cell_Empty.get(1L)) + .asFluid(); + } + + public Fluid addAutoGeneratedCorrespondingGas(Materials aMaterial) { + // If the fluid is registered as custom inside the Material's constructor then to add custom fluid + // textures go to blocks/fluids and place the .png. File should be called fluid.gas.{unlocalised_name}.png. All + // lower case. + final String fluidTexture = aMaterial.mIconSet.is_custom ? ("gas." + aMaterial.mName.toLowerCase()) + : "autogenerated"; + + return GTFluidFactory.builder(aMaterial.mName.toLowerCase(Locale.ENGLISH)) + .withLocalizedName(aMaterial.mDefaultLocalName) + .withTextureName(fluidTexture) + .withColorRGBA(aMaterial.mRGBa) + .withStateAndTemperature(GAS, aMaterial.getGasTemperature()) + .buildAndRegister() + .configureMaterials(aMaterial) + .registerBContainers(GTOreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L), ItemList.Cell_Empty.get(1L)) + .asFluid(); + } + + public Fluid addAutogeneratedPlasmaFluid(Materials aMaterial) { + // If the fluid is registered as custom inside the Material's constructor then to add custom fluid + // textures go to blocks/fluids and place the .png. File should be called fluid.plasma.{unlocalised_name}.png. + // All lower case. + final String fluidTexture = aMaterial.mIconSet.is_custom ? ("plasma." + aMaterial.mName.toLowerCase()) + : "plasma.autogenerated"; + + return GTFluidFactory.builder("plasma." + aMaterial.mName.toLowerCase(Locale.ENGLISH)) + .withLocalizedName(aMaterial.mDefaultLocalName + " Plasma") + .withTextureName(fluidTexture) + .withColorRGBA(aMaterial.mMoltenRGBa) + .withStateAndTemperature(PLASMA, 10000) + .buildAndRegister() + .configureMaterials(aMaterial) + .registerContainers( + GTOreDictUnificator.get(OrePrefixes.cellPlasma, aMaterial, 1L), + ItemList.Cell_Empty.get(1L), + aMaterial.getMolten(1) != null ? 144 : 1000) + .asFluid(); + } + + public Fluid addAutogeneratedMoltenFluid(Materials aMaterial) { + // If the fluid is registered as custom inside the Material's constructor then to add custom fluid + // textures go to blocks/fluids and place the .png. File should be called fluid.molten.{unlocalised_name}.png. + // All lower case. + final String fluidTexture = aMaterial.mIconSet.is_custom ? ("molten." + aMaterial.mName.toLowerCase()) + : "molten.autogenerated"; + + return GTFluidFactory.builder("molten." + aMaterial.mName.toLowerCase(Locale.ENGLISH)) + .withLocalizedName("Molten " + aMaterial.mDefaultLocalName) + .withTextureName(fluidTexture) + .withColorRGBA(aMaterial.mMoltenRGBa) + .withStateAndTemperature(MOLTEN, aMaterial.mMeltingPoint < 0 ? 1000 : aMaterial.mMeltingPoint) + .buildAndRegister() + .configureMaterials(aMaterial) + .registerContainers( + GTOreDictUnificator.get(OrePrefixes.cellMolten, aMaterial, 1L), + ItemList.Cell_Empty.get(1L), + 144) + .asFluid(); + } + + // ------------------------------------------------------------------------------------------------------------ + + public void addAutoGeneratedHydroCrackedFluids(Materials aMaterial) { + Fluid[] crackedFluids = new Fluid[3]; + String[] namePrefixes = { "lightlyhydrocracked.", "moderatelyhydrocracked.", "severelyhydrocracked." }; + OrePrefixes[] orePrefixes = { OrePrefixes.cellHydroCracked1, OrePrefixes.cellHydroCracked2, + OrePrefixes.cellHydroCracked3 }; + final Fluid uncrackedFluid; + if (aMaterial.mFluid != null) { + uncrackedFluid = aMaterial.mFluid; + } else if (aMaterial.mGas != null) { + uncrackedFluid = aMaterial.mGas; + } else return; + for (int i = 0; i < 3; i++) { + crackedFluids[i] = GTFluidFactory.builder(namePrefixes[i] + aMaterial.mName.toLowerCase(Locale.ENGLISH)) + .withIconsFrom(uncrackedFluid) + .withLocalizedName(orePrefixes[i].mLocalizedMaterialPre + aMaterial.mDefaultLocalName) + .withColorRGBA(aMaterial.mRGBa) + .withStateAndTemperature(GAS, 775) + .buildAndRegister() + .registerBContainers( + GTOreDictUnificator.get(orePrefixes[i], aMaterial, 1L), + ItemList.Cell_Empty.get(1L)) + .asFluid(); + + int hydrogenAmount = 2 * i + 2; + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(i + 1)) + .fluidInputs(new FluidStack(uncrackedFluid, 1000), Materials.Hydrogen.getGas(hydrogenAmount * 800)) + .fluidOutputs(new FluidStack(crackedFluids[i], 1000)) + .duration((1 + i) * SECONDS) + .eut(240) + .addTo(crackingRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Hydrogen.getCells(hydrogenAmount), GTUtility.getIntegratedCircuit(i + 1)) + .itemOutputs(Materials.Empty.getCells(hydrogenAmount)) + .fluidInputs(new FluidStack(uncrackedFluid, 1000)) + .fluidOutputs(new FluidStack(crackedFluids[i], 800)) + .duration((8 + 4 * i) * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(RecipeMaps.chemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getCells(1), GTUtility.getIntegratedCircuit(i + 1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(Materials.Hydrogen.getGas(hydrogenAmount * 1000)) + .fluidOutputs(new FluidStack(crackedFluids[i], 800)) + .duration((8 + 4 * i) * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(RecipeMaps.chemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(i + 1)) + .fluidInputs(new FluidStack(uncrackedFluid, 1000), Materials.Hydrogen.getGas(hydrogenAmount * 1000)) + .fluidOutputs(new FluidStack(crackedFluids[i], 800)) + .duration((4 + 2 * i) * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(RecipeMaps.multiblockChemicalReactorRecipes); + } + aMaterial.setHydroCrackedFluids(crackedFluids); + } + + public void addAutoGeneratedSteamCrackedFluids(Materials aMaterial) { + Fluid[] crackedFluids = new Fluid[3]; + String[] namePrefixes = { "lightlysteamcracked.", "moderatelysteamcracked.", "severelysteamcracked." }; + OrePrefixes[] orePrefixes = { OrePrefixes.cellSteamCracked1, OrePrefixes.cellSteamCracked2, + OrePrefixes.cellSteamCracked3 }; + final Fluid uncrackedFluid; + if (aMaterial.mFluid != null) { + uncrackedFluid = aMaterial.mFluid; + } else if (aMaterial.mGas != null) { + uncrackedFluid = aMaterial.mGas; + } else return; + for (int i = 0; i < 3; i++) { + crackedFluids[i] = GTFluidFactory.builder(namePrefixes[i] + aMaterial.mName.toLowerCase(Locale.ENGLISH)) + .withIconsFrom(uncrackedFluid) + .withLocalizedName(orePrefixes[i].mLocalizedMaterialPre + aMaterial.mDefaultLocalName) + .withColorRGBA(aMaterial.mRGBa) + .withStateAndTemperature(GAS, 775) + .buildAndRegister() + .registerBContainers( + GTOreDictUnificator.get(orePrefixes[i], aMaterial, 1L), + ItemList.Cell_Empty.get(1L)) + .asFluid(); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(i + 1)) + .fluidInputs(new FluidStack(uncrackedFluid, 1000), GTModHandler.getSteam(1000)) + .fluidOutputs(new FluidStack(crackedFluids[i], 1200)) + .duration((1 + i) * SECONDS) + .eut(240) + .addTo(crackingRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("steamCell", 1L), GTUtility.getIntegratedCircuit(i + 1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(new FluidStack(uncrackedFluid, 1000)) + .fluidOutputs(new FluidStack(crackedFluids[i], 800)) + .duration((8 + 4 * i) * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(RecipeMaps.chemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getCells(1), GTUtility.getIntegratedCircuit(i + 1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(GTModHandler.getSteam(1000)) + .fluidOutputs(new FluidStack(crackedFluids[i], 800)) + .duration((8 + 4 * i) * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(RecipeMaps.chemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getCells(1), GTUtility.getIntegratedCircuit(i + 1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(getFluidStack("ic2steam", 1000)) + .fluidOutputs(new FluidStack(crackedFluids[i], 800)) + .duration((8 + 4 * i) * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(RecipeMaps.chemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(i + 1)) + .fluidInputs(new FluidStack(uncrackedFluid, 1000), GTModHandler.getSteam(1000)) + .fluidOutputs(new FluidStack(crackedFluids[i], 800)) + .duration((4 + 2 * i) * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(RecipeMaps.multiblockChemicalReactorRecipes); + } + aMaterial.setSteamCrackedFluids(crackedFluids); + } + + /** + * @see GTFluidFactory#of(String, String, Materials, FluidState, int) + * @see GTFluidFactory#of(String, String, FluidState, int) + * @deprecated use {@link GTFluidFactory#builder} + */ + @Deprecated + public Fluid addFluid(String aName, String aLocalized, Materials aMaterial, int aState, int aTemperatureK) { + return GTFluidFactory.of(aName, aLocalized, aMaterial, FluidState.VALID_STATES[aState], aTemperatureK); + } + + /** + * @deprecated use {@link GTFluidFactory#builder} + */ + @SuppressWarnings({ "MethodWithTooManyParameters" }) // Deprecated method + @Deprecated + public Fluid addFluid(String aName, String aLocalized, Materials aMaterial, int aState, int aTemperatureK, + ItemStack aFullContainer, ItemStack aEmptyContainer, int aFluidAmount) { + return GTFluidFactory.builder(aName) + .withLocalizedName(aLocalized) + .withStateAndTemperature(FluidState.fromValue(aState), aTemperatureK) + .buildAndRegister() + .configureMaterials(aMaterial) + .registerContainers(aFullContainer, aEmptyContainer, aFluidAmount) + .asFluid(); + } + + /** + * @deprecated use {@link GTFluidFactory#builder} + */ + @Deprecated + @SuppressWarnings({ "MethodWithTooManyParameters" }) // Deprecated method + public Fluid addFluid(String aName, String aTexture, String aLocalized, Materials aMaterial, short[] aRGBa, + int aState, int aTemperatureK, ItemStack aFullContainer, ItemStack aEmptyContainer, int aFluidAmount) { + return GTFluidFactory.builder(aName) + .withLocalizedName(aLocalized) + .withStillIconResourceLocation(new ResourceLocation(GregTech.ID, "fluids/fluid." + aTexture)) + .withColorRGBA(aRGBa) + .withStateAndTemperature(FluidState.fromValue(aState), aTemperatureK) + .buildAndRegister() + .configureMaterials(aMaterial) + .registerContainers(aFullContainer, aEmptyContainer, aFluidAmount) + .asFluid(); + } + + public File getSaveDirectory() { + return this.mUniverse == null ? null + : this.mUniverse.getSaveHandler() + .getWorldDirectory(); + } + + public long getAnimationTicks() { + return 0L; + } + + public float getPartialRenderTicks() { + return 0; + } + + public void registerUnificationEntries() { + GTOreDictUnificator.resetUnificationEntries(); + for (OreDictEventContainer tOre : this.mEvents) { + if ((!(tOre.mEvent.Ore.getItem() instanceof MetaGeneratedItem)) && (tOre.mPrefix != null) + && (tOre.mPrefix.mIsUnificatable) + && (tOre.mMaterial != null)) { + boolean checkModID = tOre.mModID != null; + + if (checkModID) { + if (tOre.mModID.equals(Names.ENDER_I_O)) { + if (tOre.mPrefix == OrePrefixes.ingot && tOre.mMaterial == Materials.DarkSteel) { + GTOreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false); + GTOreDictUnificator.set( + tOre.mPrefix, + tOre.mMaterial, + tOre.mEvent.Ore, + ManualOreDictTweaks.shouldOredictBeOverwritten(tOre.mModID, tOre.mEvent.Name), + true); + continue; + } + } + } + if (GTOreDictUnificator.isBlacklisted(tOre.mEvent.Ore)) { + GTOreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, true); + } else { + GTOreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false); + GTOreDictUnificator.set( + tOre.mPrefix, + tOre.mMaterial, + tOre.mEvent.Ore, + checkModID && ManualOreDictTweaks.shouldOredictBeOverwritten(tOre.mModID, tOre.mEvent.Name), + true); + } + } + } + + for (OreDictEventContainer tOre : this.mEvents) { + if (((tOre.mEvent.Ore.getItem() instanceof MetaGeneratedItem)) && (tOre.mPrefix != null) + && (tOre.mPrefix.mIsUnificatable) + && (tOre.mMaterial != null)) { + if (GTOreDictUnificator.isBlacklisted(tOre.mEvent.Ore)) { + GTOreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, true); + } else { + GTOreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false); + GTOreDictUnificator.set( + tOre.mPrefix, + tOre.mMaterial, + tOre.mEvent.Ore, + (tOre.mModID != null) + && ManualOreDictTweaks.shouldOredictBeOverwritten(tOre.mModID, tOre.mEvent.Name), + true); + } + } + } + GregTechAPI.sUnificationEntriesRegistered = true; + GTRecipe.reInit(); + } + + @SuppressWarnings("deprecation") + public void activateOreDictHandler() { + this.mOreDictActivated = true; + ProgressManager.ProgressBar progressBar = ProgressManager.push("Register materials", mEvents.size()); + + if (BetterLoadingScreen.isModLoaded()) { + GTValues.cls_enabled = true; + try { + GTCLSCompat.stepMaterialsCLS(mEvents, progressBar); + } catch (IllegalAccessException e) { + GT_FML_LOGGER.catching(e); + } + } else GTProxy.stepMaterialsVanilla(this.mEvents, progressBar); + } + + @Deprecated + public static final HashMap> dimensionWiseChunkData = new HashMap<>(16); // stores + // chunk + // data + // that + // is + // loaded/saved + + public static final HashMap dimensionWisePollution = new HashMap<>(16); // stores + // GT_Polluttors + // objects + public static final byte GTOIL = 3, GTOILFLUID = 2, GTPOLLUTION = 1, GTMETADATA = 0, NOT_LOADED = 0, LOADED = 1; // consts + + // TO get default's fast + @Deprecated + public static int[] getDefaultChunkDataOnCreation() { + return new int[] { NOT_LOADED, 0, -1, -1 }; + } + + @Deprecated + public static int[] getDefaultChunkDataOnLoad() { + return new int[] { LOADED, 0, -1, -1 }; + } + + @SubscribeEvent + public void handleChunkLoadEvent(ChunkDataEvent.Load event) { + UndergroundOil.migrate(event); + Pollution.migrate(event); + } + + @SubscribeEvent + public void onBlockBreakSpeedEvent(PlayerEvent.BreakSpeed aEvent) { + if (aEvent.entityPlayer != null) { + ItemStack aStack = aEvent.entityPlayer.getCurrentEquippedItem(); + if ((aStack != null) && ((aStack.getItem() instanceof MetaGeneratedTool))) { + aEvent.newSpeed = ((MetaGeneratedTool) aStack.getItem()).onBlockBreakSpeedEvent( + aEvent.newSpeed, + aStack, + aEvent.entityPlayer, + aEvent.block, + aEvent.x, + aEvent.y, + aEvent.z, + (byte) aEvent.metadata, + aEvent); + } + } + } + + public static class OreDictEventContainer { + + public final OreDictionary.OreRegisterEvent mEvent; + public final OrePrefixes mPrefix; + public final Materials mMaterial; + public final String mModID; + + public OreDictEventContainer(OreDictionary.OreRegisterEvent aEvent, OrePrefixes aPrefix, Materials aMaterial, + String aModID) { + this.mEvent = aEvent; + this.mPrefix = aPrefix; + this.mMaterial = aMaterial; + this.mModID = ((aModID == null) || (aModID.equals("UNKNOWN")) ? null : aModID); + } + } + + @SubscribeEvent + public void onBlockEvent(BlockEvent event) { + if (event.block.getUnlocalizedName() + .equals("blockAlloyGlass")) GregTechAPI.causeMachineUpdate(event.world, event.x, event.y, event.z); + } + + public static void addFullHazmatToGeneralItem(String aModID, String aItem, long aAmount, int aMeta) { + ItemStack item = GTModHandler.getModItem(aModID, aItem, aAmount, aMeta); + addItemToHazmatLists(item); + } + + public static void addFullHazmatToGeneralItem(String aModID, String aItem, long aAmount) { + ItemStack item = GTModHandler.getModItem(aModID, aItem, aAmount, W); + addItemToHazmatLists(item); + } + + public static void addFullHazmatToIC2Item(String aItem) { + ItemStack item = GTModHandler.getIC2Item(aItem, 1L, W); + addItemToHazmatLists(item); + } + + private static void addItemToHazmatLists(ItemStack item) { + GregTechAPI.sGasHazmatList.add(item); + GregTechAPI.sBioHazmatList.add(item); + GregTechAPI.sFrostHazmatList.add(item); + GregTechAPI.sHeatHazmatList.add(item); + GregTechAPI.sRadioHazmatList.add(item); + GregTechAPI.sElectroHazmatList.add(item); + } + + public static boolean providesProtection(ItemStack aStack) { + + if (GTUtility.hasHazmatEnchant(aStack)) return true; + + boolean isGas = GTUtility.isStackInList(aStack, GregTechAPI.sGasHazmatList); + boolean isBio = GTUtility.isStackInList(aStack, GregTechAPI.sBioHazmatList); + boolean isFrost = GTUtility.isStackInList(aStack, GregTechAPI.sFrostHazmatList); + boolean isHeat = GTUtility.isStackInList(aStack, GregTechAPI.sHeatHazmatList); + boolean isRadio = GTUtility.isStackInList(aStack, GregTechAPI.sRadioHazmatList); + boolean isElectro = GTUtility.isStackInList(aStack, GregTechAPI.sElectroHazmatList); + return isGas && isBio && isFrost && isHeat && isRadio && isElectro; + } + + @SubscribeEvent + public void onItemTooltip(ItemTooltipEvent event) { + if (event.itemStack != null) { + ItemStack aStackTemp = event.itemStack; + GTItemStack aStack = new GTItemStack(aStackTemp); + if (providesProtection(aStackTemp)) { + event.toolTip.add(EnumChatFormatting.LIGHT_PURPLE + "Provides full hazmat protection."); + } + } + } +} diff --git a/src/main/java/gregtech/common/GTServer.java b/src/main/java/gregtech/common/GTServer.java new file mode 100644 index 0000000000..b9758ac657 --- /dev/null +++ b/src/main/java/gregtech/common/GTServer.java @@ -0,0 +1,36 @@ +package gregtech.common; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +public class GTServer extends GTProxy { + + @Override + public boolean isServerSide() { + return true; + } + + @Override + public boolean isClientSide() { + return false; + } + + @Override + public boolean isBukkitSide() { + return false; + } + + @Override + public void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ) {} + + @Override + public int addArmor(String aPrefix) { + return 0; + } + + @Override + public EntityPlayer getThePlayer() { + return null; + } +} diff --git a/src/main/java/gregtech/common/GTThaumcraftCompat.java b/src/main/java/gregtech/common/GTThaumcraftCompat.java new file mode 100644 index 0000000000..7f8c6dd8c7 --- /dev/null +++ b/src/main/java/gregtech/common/GTThaumcraftCompat.java @@ -0,0 +1,285 @@ +package gregtech.common; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.util.ResourceLocation; + +import gregtech.api.enums.TCAspects; +import gregtech.api.interfaces.internal.IThaumcraftCompat; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import thaumcraft.api.ThaumcraftApi; +import thaumcraft.api.ThaumcraftApiHelper; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.crafting.CrucibleRecipe; +import thaumcraft.api.crafting.IArcaneRecipe; +import thaumcraft.api.crafting.InfusionEnchantmentRecipe; +import thaumcraft.api.crafting.InfusionRecipe; +import thaumcraft.api.research.ResearchCategories; +import thaumcraft.api.research.ResearchCategoryList; +import thaumcraft.api.research.ResearchItem; +import thaumcraft.api.research.ResearchPage; + +public class GTThaumcraftCompat implements IThaumcraftCompat { + + public GTThaumcraftCompat() { + TCAspects.AER.mAspect = Aspect.AIR; + TCAspects.ALIENIS.mAspect = Aspect.ELDRITCH; + TCAspects.AQUA.mAspect = Aspect.WATER; + TCAspects.ARBOR.mAspect = Aspect.TREE; + TCAspects.AURAM.mAspect = Aspect.AURA; + TCAspects.BESTIA.mAspect = Aspect.BEAST; + TCAspects.COGNITIO.mAspect = Aspect.MIND; + TCAspects.CORPUS.mAspect = Aspect.FLESH; + TCAspects.EXANIMIS.mAspect = Aspect.UNDEAD; + TCAspects.FABRICO.mAspect = Aspect.CRAFT; + TCAspects.FAMES.mAspect = Aspect.HUNGER; + TCAspects.GELUM.mAspect = Aspect.COLD; + TCAspects.GRANUM.mAspect = Aspect.PLANT; + TCAspects.HERBA.mAspect = Aspect.PLANT; + TCAspects.HUMANUS.mAspect = Aspect.MAN; + TCAspects.IGNIS.mAspect = Aspect.FIRE; + TCAspects.INSTRUMENTUM.mAspect = Aspect.TOOL; + TCAspects.ITER.mAspect = Aspect.TRAVEL; + TCAspects.LIMUS.mAspect = Aspect.SLIME; + TCAspects.LUCRUM.mAspect = Aspect.GREED; + TCAspects.LUX.mAspect = Aspect.LIGHT; + TCAspects.MACHINA.mAspect = Aspect.MECHANISM; + TCAspects.MESSIS.mAspect = Aspect.CROP; + TCAspects.METALLUM.mAspect = Aspect.METAL; + TCAspects.METO.mAspect = Aspect.HARVEST; + TCAspects.MORTUUS.mAspect = Aspect.DEATH; + TCAspects.MOTUS.mAspect = Aspect.MOTION; + TCAspects.ORDO.mAspect = Aspect.ORDER; + TCAspects.PANNUS.mAspect = Aspect.CLOTH; + TCAspects.PERDITIO.mAspect = Aspect.ENTROPY; + TCAspects.PERFODIO.mAspect = Aspect.MINE; + TCAspects.PERMUTATIO.mAspect = Aspect.EXCHANGE; + TCAspects.POTENTIA.mAspect = Aspect.ENERGY; + TCAspects.PRAECANTATIO.mAspect = Aspect.MAGIC; + TCAspects.SANO.mAspect = Aspect.HEAL; + TCAspects.SENSUS.mAspect = Aspect.SENSES; + TCAspects.SPIRITUS.mAspect = Aspect.SOUL; + TCAspects.TELUM.mAspect = Aspect.WEAPON; + TCAspects.TERRA.mAspect = Aspect.EARTH; + TCAspects.TEMPESTAS.mAspect = Aspect.WEATHER; + TCAspects.TENEBRAE.mAspect = Aspect.DARKNESS; + TCAspects.TUTAMEN.mAspect = Aspect.ARMOR; + TCAspects.VACUOS.mAspect = Aspect.VOID; + TCAspects.VENENUM.mAspect = Aspect.POISON; + TCAspects.VICTUS.mAspect = Aspect.LIFE; + TCAspects.VINCULUM.mAspect = Aspect.TRAP; + TCAspects.VITIUM.mAspect = Aspect.TAINT; + TCAspects.VITREUS.mAspect = Aspect.CRYSTAL; + TCAspects.VOLATUS.mAspect = Aspect.FLIGHT; + + TCAspects.STRONTIO.mAspect = new Aspect( + "strontio", + 0xEEC2B3, + new Aspect[] { Aspect.MIND, Aspect.ENTROPY }, + new ResourceLocation("gregtech:textures/aspects/" + TCAspects.STRONTIO.name() + ".png"), + 1); + TCAspects.NEBRISUM.mAspect = new Aspect( + "nebrisum", + 0xEEEE7E, + new Aspect[] { Aspect.MINE, Aspect.GREED }, + new ResourceLocation("gregtech:textures/aspects/" + TCAspects.NEBRISUM.name() + ".png"), + 1); + TCAspects.ELECTRUM.mAspect = new Aspect( + "electrum", + 0xC0EEEE, + new Aspect[] { Aspect.ENERGY, Aspect.MECHANISM }, + new ResourceLocation("gregtech:textures/aspects/" + TCAspects.ELECTRUM.name() + ".png"), + 1); + TCAspects.MAGNETO.mAspect = new Aspect( + "magneto", + 0xC0C0C0, + new Aspect[] { Aspect.METAL, Aspect.TRAVEL }, + new ResourceLocation("gregtech:textures/aspects/" + TCAspects.MAGNETO.name() + ".png"), + 1); + TCAspects.RADIO.mAspect = new Aspect( + "radio", + 0xC0FFC0, + new Aspect[] { Aspect.LIGHT, Aspect.ENERGY }, + new ResourceLocation("gregtech:textures/aspects/" + TCAspects.RADIO.name() + ".png"), + 1); + + GTLanguageManager.addStringLocalization("tc.aspect.strontio", "Stupidness, Incompetence"); + GTLanguageManager.addStringLocalization("tc.aspect.nebrisum", "Cheatyness, Raiding"); + GTLanguageManager.addStringLocalization("tc.aspect.electrum", "Electricity, Lightning"); + GTLanguageManager.addStringLocalization("tc.aspect.magneto", "Magnetism, Attraction"); + GTLanguageManager.addStringLocalization("tc.aspect.radio", "Radiation"); + } + + private static AspectList getAspectList(List aAspects) { + AspectList rAspects = new AspectList(); + TCAspects.TC_AspectStack tAspect; + for (Iterator i$ = aAspects.iterator(); i$.hasNext(); rAspects + .add((Aspect) tAspect.mAspect.mAspect, (int) tAspect.mAmount)) { + tAspect = i$.next(); + } + return rAspects; + } + + @Override + public Object addResearch(String aResearch, String aName, String aText, String[] aParentResearches, + String aCategory, ItemStack aIcon, int aComplexity, int aType, int aX, int aY, + List aAspects, ItemStack[] aResearchTriggers, Object[] aPages) { + ResearchCategoryList tCategory = ResearchCategories.getResearchList(aCategory); + if (tCategory == null) { + return null; + } + for (ResearchItem tResearch : tCategory.research.values()) { + if ((tResearch.displayColumn == aX) && (tResearch.displayRow == aY)) { + aX += (aX > 0 ? 5 : -5); + aY += (aY > 0 ? 5 : -5); + } + } + ResearchItem rResearch = new ResearchItem( + aResearch, + aCategory, + getAspectList(aAspects), + aX, + aY, + aComplexity, + aIcon); + ArrayList tPages = new ArrayList<>(aPages.length); + GTLanguageManager.addStringLocalization("tc.research_name." + aResearch, aName); + GTLanguageManager.addStringLocalization("tc.research_text." + aResearch, "[GT] " + aText); + for (Object tPage : aPages) { + if ((tPage instanceof String)) { + tPages.add(new ResearchPage((String) tPage)); + } else if ((tPage instanceof IRecipe)) { + tPages.add(new ResearchPage((IRecipe) tPage)); + } else if ((tPage instanceof IArcaneRecipe)) { + tPages.add(new ResearchPage((IArcaneRecipe) tPage)); + } else if ((tPage instanceof CrucibleRecipe)) { + tPages.add(new ResearchPage((CrucibleRecipe) tPage)); + } else if ((tPage instanceof InfusionRecipe)) { + tPages.add(new ResearchPage((InfusionRecipe) tPage)); + } else if ((tPage instanceof InfusionEnchantmentRecipe)) { + tPages.add(new ResearchPage((InfusionEnchantmentRecipe) tPage)); + } + } + if ((aType & 0x40) != 0) { + rResearch.setAutoUnlock(); + } + if ((aType & 0x1) != 0) { + rResearch.setSecondary(); + } + if ((aType & 0x20) != 0) { + rResearch.setSpecial(); + } + if ((aType & 0x8) != 0) { + rResearch.setVirtual(); + } + if ((aType & 0x4) != 0) { + rResearch.setHidden(); + } + if ((aType & 0x10) != 0) { + rResearch.setRound(); + } + if ((aType & 0x2) != 0) { + rResearch.setStub(); + } + if (aParentResearches != null) { + ArrayList tParentResearches = new ArrayList<>(); + Collections.addAll(tParentResearches, aParentResearches); + if (tParentResearches.size() > 0) { + rResearch.setParents(tParentResearches.toArray(new String[0])); + rResearch.setConcealed(); + } + } + if (aResearchTriggers != null) { + rResearch.setItemTriggers(aResearchTriggers); + rResearch.setHidden(); + } + rResearch.setPages(tPages.toArray(new ResearchPage[0])); + return rResearch.registerResearchItem(); + } + + @Override + public Object addCrucibleRecipe(String aResearch, Object aInput, ItemStack aOutput, + List aAspects) { + if ((GTUtility.isStringInvalid(aResearch)) || (aInput == null) + || (aOutput == null) + || (aAspects == null) + || (aAspects.isEmpty())) { + return null; + } + return ThaumcraftApi.addCrucibleRecipe( + aResearch, + GTUtility.copyOrNull(aOutput), + ((aInput instanceof ItemStack)) || ((aInput instanceof ArrayList)) ? aInput : aInput.toString(), + getAspectList(aAspects)); + } + + @Override + public Object addInfusionRecipe(String aResearch, ItemStack aMainInput, ItemStack[] aSideInputs, ItemStack aOutput, + int aInstability, List aAspects) { + if ((GTUtility.isStringInvalid(aResearch)) || (aMainInput == null) + || (aSideInputs == null) + || (aOutput == null) + || (aAspects == null) + || (aAspects.isEmpty())) { + return null; + } + return ThaumcraftApi.addInfusionCraftingRecipe( + aResearch, + GTUtility.copyOrNull(aOutput), + aInstability, + getAspectList(aAspects), + aMainInput, + aSideInputs); + } + + @Override + public Object addInfusionEnchantmentRecipe(String aResearch, Enchantment aEnchantment, int aInstability, + List aAspects, ItemStack[] aSideInputs) { + if ((GTUtility.isStringInvalid(aResearch)) || (aSideInputs == null) + || (aAspects == null) + || (aEnchantment == null) + || (aAspects.isEmpty())) { + return null; + } + return ThaumcraftApi + .addInfusionEnchantmentRecipe(aResearch, aEnchantment, aInstability, getAspectList(aAspects), aSideInputs); + } + + @Override + public boolean registerThaumcraftAspectsToItem(ItemStack aExampleStack, List aAspects, + String aOreDict) { + if (aAspects.isEmpty()) return false; + ThaumcraftApi.registerObjectTag(aOreDict, getAspectList(aAspects)); + return true; + } + + @Override + public boolean registerThaumcraftAspectsToItem(ItemStack aStack, List aAspects, + boolean aAdditive) { + if (aAspects.isEmpty()) return false; + if (aAdditive) { + ThaumcraftApi.registerComplexObjectTag(aStack, getAspectList(aAspects)); + return true; + } + AspectList tAlreadyRegisteredAspects = ThaumcraftApiHelper.getObjectAspects(aStack); + if (tAlreadyRegisteredAspects == null || tAlreadyRegisteredAspects.size() <= 0) { + ThaumcraftApi.registerObjectTag(aStack, getAspectList(aAspects)); + } + return true; + } + + @Override + public boolean registerPortholeBlacklistedBlock(Block aBlock) { + ThaumcraftApi.portableHoleBlackList.add(aBlock); + return true; + } +} diff --git a/src/main/java/gregtech/common/GTWorldgenerator.java b/src/main/java/gregtech/common/GTWorldgenerator.java new file mode 100644 index 0000000000..6762fb868c --- /dev/null +++ b/src/main/java/gregtech/common/GTWorldgenerator.java @@ -0,0 +1,686 @@ +package gregtech.common; + +import static gregtech.api.enums.GTValues.debugOrevein; +import static gregtech.api.enums.GTValues.debugWorldGen; +import static gregtech.api.enums.GTValues.oreveinAttempts; +import static gregtech.api.enums.GTValues.oreveinMaxPlacementAttempts; +import static gregtech.api.enums.GTValues.oreveinPercentage; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.List; +import java.util.Random; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldSavedData; +import net.minecraft.world.chunk.Chunk; +import net.minecraft.world.chunk.IChunkProvider; +import net.minecraftforge.event.world.WorldEvent; + +import cpw.mods.fml.common.IWorldGenerator; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.PlayerEvent; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.net.GTPacketSendOregenPattern; +import gregtech.api.objects.XSTR; +import gregtech.api.util.GTLog; +import gregtech.api.world.GTWorldgen; +import gregtech.common.blocks.TileEntityOres; +import gregtech.common.config.worldgen.ConfigEndAsteroids; + +public class GTWorldgenerator implements IWorldGenerator { + + private static int mEndAsteroidProbability = 300; + private static int mSize = 100; + private static int endMinSize = 50; + private static int endMaxSize = 200; + private static boolean endAsteroids = true; + public static List mList = new ArrayList<>(); + public static HashSet ProcChunks = new HashSet<>(); + // This is probably not going to work. Trying to create a fake orevein to put into hashtable when there will be no + // ores in a vein. + public static WorldgenGTOreLayer noOresInVein = new WorldgenGTOreLayer( + new OreMixBuilder().name("NoOresInVein") + .disabledByDefault() + .heightRange(0, 255) + .weight(0) + .density(255) + .size(16) + .primary(Materials.Aluminium) + .secondary(Materials.Aluminium) + .inBetween(Materials.Aluminium) + .sporadic(Materials.Aluminium)); + + public static Hashtable validOreveins = new Hashtable<>(1024); + public boolean mIsGenerating = false; + public static final Object listLock = new Object(); + public static OregenPattern oregenPattern = OregenPattern.AXISSYMMETRICAL; + + public GTWorldgenerator() { + endAsteroids = ConfigEndAsteroids.generateEndAsteroids; + endMinSize = ConfigEndAsteroids.EndAsteroidMinSize; + endMaxSize = ConfigEndAsteroids.EndAsteroidMaxSize; + mEndAsteroidProbability = ConfigEndAsteroids.EndAsteroidProbability; + GameRegistry.registerWorldGenerator(this, 1073741823); + if (debugWorldGen) { + GTLog.out.println("GT_Worldgenerator created"); + } + } + + @Override + public void generate(Random aRandom, int aX, int aZ, World aWorld, IChunkProvider aChunkGenerator, + IChunkProvider aChunkProvider) { + synchronized (listLock) { + mList.add( + new WorldGenContainer( + new XSTR(Math.abs(aRandom.nextInt()) + 1), + aX, + aZ, + aWorld.provider.dimensionId, + aWorld, + aChunkGenerator, + aChunkProvider, + aWorld.getBiomeGenForCoords(aX * 16 + 8, aZ * 16 + 8).biomeName)); + if (debugWorldGen) GTLog.out.println( + "ADD WorldSeed:" + aWorld.getSeed() + + " DimId" + + aWorld.provider.dimensionId + + " chunk x:" + + aX + + " z:" + + aZ + + " SIZE: " + + mList.size()); + } + + if (!this.mIsGenerating) { + this.mIsGenerating = true; + int mList_sS = mList.size(); + mList_sS = Math.min(mList_sS, 5); // Run a maximum of 5 chunks at a time through worldgen. Extra chunks get + // done later. + for (int i = 0; i < mList_sS; i++) { + WorldGenContainer toRun = (WorldGenContainer) mList.get(0); + if (debugWorldGen) GTLog.out.println( + "RUN WorldSeed:" + aWorld.getSeed() + + " DimId" + + aWorld.provider.dimensionId + + " chunk x:" + + toRun.mX + + " z:" + + toRun.mZ + + " SIZE: " + + mList.size() + + " i: " + + i); + synchronized (listLock) { + mList.remove(0); + } + toRun.run(); + } + this.mIsGenerating = false; + } + } + + public static boolean isOreChunk(int chunkX, int chunkZ) { + if (oregenPattern == OregenPattern.EQUAL_SPACING) { + return Math.floorMod(chunkX, 3) == 1 && Math.floorMod(chunkZ, 3) == 1; + } + // add next if statement here or convert to switch when expanding OregenPattern enum + + // AXISSYMMETRICAL + return Math.abs(chunkX) % 3 == 1 && Math.abs(chunkZ) % 3 == 1; + } + + public static class OregenPatternSavedData extends WorldSavedData { + + private static final String NAME = "GregTech_OregenPattern"; + private static final String KEY = "oregenPattern"; + + public OregenPatternSavedData(String p_i2141_1_) { + super(p_i2141_1_); + } + + public static void loadData(World world) { + if (world.getWorldInfo() + .getWorldTotalTime() == 0L) { + // The world has just been created -> use newest pattern + oregenPattern = OregenPattern.values()[OregenPattern.values().length - 1]; + } else { + // This is an old world. Use legacy pattern for now, readFromNBT may change this if + // GregTech_OregenPattern.dat is present + oregenPattern = OregenPattern.AXISSYMMETRICAL; + } + + // load OregenPatternSavedData + WorldSavedData instance = world.mapStorage + .loadData(OregenPatternSavedData.class, OregenPatternSavedData.NAME); + if (instance == null) { + instance = new OregenPatternSavedData(NAME); + world.mapStorage.setData(OregenPatternSavedData.NAME, instance); + } + instance.markDirty(); + } + + @SubscribeEvent + public void onWorldLoad(WorldEvent.Load event) { + final World world = event.world; + if (!world.isRemote && world.provider.dimensionId == 0) { + loadData(world); + } + } + + @SubscribeEvent + public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) { + if (event.player instanceof EntityPlayerMP player) { + GTValues.NW.sendToPlayer(new GTPacketSendOregenPattern(oregenPattern), player); + } + } + + @Override + public void readFromNBT(NBTTagCompound p_76184_1_) { + if (p_76184_1_.hasKey(KEY)) { + int ordinal = p_76184_1_.getByte(KEY); + ordinal = MathHelper.clamp_int(ordinal, 0, OregenPattern.values().length - 1); + oregenPattern = OregenPattern.values()[ordinal]; + } + } + + @Override + public void writeToNBT(NBTTagCompound p_76187_1_) { + // If we have so many different OregenPatterns that byte isn't good enough something is wrong + p_76187_1_.setByte(KEY, (byte) oregenPattern.ordinal()); + } + + } + + public enum OregenPattern { + // The last value is used when creating a new world + AXISSYMMETRICAL, + EQUAL_SPACING; + } + + public static class WorldGenContainer implements Runnable { + + public final Random mRandom; + public final int mX; + public final int mZ; + public final int mDimensionType; + public final World mWorld; + public final IChunkProvider mChunkGenerator; + public final IChunkProvider mChunkProvider; + public final String mBiome; + // Used for outputting orevein weights and bins + // static int test=0; + + // Local class to track which orevein seeds must be checked when doing chunkified worldgen + static class NearbySeeds { + + public int mX; + public int mZ; + + NearbySeeds(int x, int z) { + this.mX = x; + this.mZ = z; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof NearbySeeds that)) return false; + if (this.mX != that.mX) return false; + return this.mZ == that.mZ; + } + + @Override + public int hashCode() { + int result = this.mX; + result = 31 * result + this.mZ; + return result; + } + } + + public static ArrayList seedList = new ArrayList<>(); + + // aX and aZ are now the by-chunk X and Z for the chunk of interest + public WorldGenContainer(Random aRandom, int aX, int aZ, int aDimensionType, World aWorld, + IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider, String aBiome) { + this.mRandom = aRandom; + this.mX = aX; + this.mZ = aZ; + this.mDimensionType = aDimensionType; + this.mWorld = aWorld; + this.mChunkGenerator = aChunkGenerator; + this.mChunkProvider = aChunkProvider; + this.mBiome = aBiome; + } + + // How to evaluate oregen distribution + // - Enable debugOreveins + // - Fly around for a while, or teleport jumping ~320 blocks at a time, with + // a 15-30s pause for worldgen to catch up + // - Do this across a large area, at least 2000x2000 blocks for good numbers + // - Open logs\gregtech.log + // - Using notepad++, do a Search | Find - enter "Added" for the search term + // - Select Find All In Current Document + // - In the Search window, right-click and Select All + // - Copy and paste to a new file + // - Delete extraneous stuff at top, and blank line at bottom. Line count is + // # of total oreveins + // - For simple spot checks, use Find All in Current Document for specific + // oremixes, ie ore.mix.diamond, to check how many appear in the list. + // - For more complex work, import file into Excel, and sort based on oremix + // column. Drag select the oremix names, in the bottom right will be how many + // entries to add in a seperate tab to calculate %ages. + // + // When using the ore weights, discount or remove the high altitude veins since + // their high weight are offset by their rareness. I usually just use zero for them. + // Actual spawn rates will vary based upon the average height of the stone layers + // in the dimension. For example veins that range above and below the average height + // will be less, and veins that are completely above the average height will be much less. + + public void worldGenFindVein(int oreseedX, int oreseedZ) { + // Explanation of oreveinseed implementation. + // (long)this.mWorld.getSeed()<<16) Deep Dark does two oregen passes, one with getSeed set to +1 the + // original world seed. This pushes that +1 off the low bits of oreseedZ, so that the hashes are far apart + // for the two passes. + // ((this.mWorld.provider.dimensionId & 0xffL)<<56) Puts the dimension in the top bits of the hash, to + // make sure to get unique hashes per dimension + // ((long)oreseedX & 0x000000000fffffffL) << 28) Puts the chunk X in the bits 29-55. Cuts off the top few + // bits of the chunk so we have bits for dimension. + // ( (long)oreseedZ & 0x000000000fffffffL )) Puts the chunk Z in the bits 0-27. Cuts off the top few bits + // of the chunk so we have bits for dimension. + long oreveinSeed = (this.mWorld.getSeed() << 16) + ^ (((this.mWorld.provider.dimensionId & 0xffL) << 56) | (((long) oreseedX & 0x000000000fffffffL) << 28) + | ((long) oreseedZ & 0x000000000fffffffL)); // Use an RNG that is identical every time it is + // called for + // this oreseed. + XSTR oreveinRNG = new XSTR(oreveinSeed); + int oreveinPercentageRoll = oreveinRNG.nextInt(100); // Roll the dice, see if we get an orevein here at all + int noOrePlacedCount = 0; + String tDimensionName = ""; + if (debugOrevein) { + tDimensionName = this.mWorld.provider.getDimensionName(); + } + + if (debugOrevein) GTLog.out.println( + " Finding oreveins for oreveinSeed=" + oreveinSeed + + " mX=" + + this.mX + + " mZ=" + + this.mZ + + " oreseedX=" + + oreseedX + + " oreseedZ=" + + oreseedZ + + " worldSeed=" + + this.mWorld.getSeed()); + + // Search for a valid orevein for this dimension + if (!validOreveins.containsKey(oreveinSeed)) { + if ((oreveinPercentageRoll < oreveinPercentage) && (WorldgenGTOreLayer.sWeight > 0) + && (WorldgenGTOreLayer.sList.size() > 0)) { + int placementAttempts = 0; + boolean oreveinFound = false; + int i; + + // Used for outputting orevein weights and bins + /* + * if( test==0 ) { test = 1; GTLog.out.println( "sWeight = " + GT_Worldgen_GT_Ore_Layer.sWeight ); + * for (GT_Worldgen_GT_Ore_Layer tWorldGen : GT_Worldgen_GT_Ore_Layer.sList) { GTLog.out.println( ( + * tWorldGen).mWorldGenName + " mWeight = " + ( tWorldGen).mWeight + " mSize = " + (tWorldGen).mSize + * ); } } + */ + for (i = 0; (i < oreveinAttempts) && (!oreveinFound) + && (placementAttempts < oreveinMaxPlacementAttempts); i++) { + int tRandomWeight = oreveinRNG.nextInt(WorldgenGTOreLayer.sWeight); + for (WorldgenGTOreLayer tWorldGen : WorldgenGTOreLayer.sList) { + tRandomWeight -= (tWorldGen).mWeight; + if (tRandomWeight <= 0) { + try { + // Adjust the seed so that this layer has a series of unique random numbers. + // Otherwise multiple attempts at this same oreseed will get the same offset and X/Z + // values. If an orevein failed, any orevein with the + // same minimum heights would fail as well. This prevents that, giving each orevein + // a unique height each pass through here. + int placementResult = tWorldGen.executeWorldgenChunkified( + this.mWorld, + new XSTR(oreveinSeed ^ (tWorldGen.mPrimaryMeta)), + this.mBiome, + this.mDimensionType, + this.mX * 16, + this.mZ * 16, + oreseedX * 16, + oreseedZ * 16, + this.mChunkGenerator, + this.mChunkProvider); + switch (placementResult) { + case WorldgenGTOreLayer.ORE_PLACED -> { + if (debugOrevein) GTLog.out.println( + " Added near oreveinSeed=" + oreveinSeed + + " " + + (tWorldGen).mWorldGenName + + " tries at oremix=" + + i + + " placementAttempts=" + + placementAttempts + + " dimensionName=" + + tDimensionName); + validOreveins.put(oreveinSeed, tWorldGen); + oreveinFound = true; + } + case WorldgenGTOreLayer.NO_ORE_IN_BOTTOM_LAYER -> placementAttempts++; + + // SHould do retry in this case until out of chances + case WorldgenGTOreLayer.NO_OVERLAP -> { + if (debugOrevein) GTLog.out.println( + " Added far oreveinSeed=" + oreveinSeed + + " " + + (tWorldGen).mWorldGenName + + " tries at oremix=" + + i + + " placementAttempts=" + + placementAttempts + + " dimensionName=" + + tDimensionName); + validOreveins.put(oreveinSeed, tWorldGen); + oreveinFound = true; + } + case WorldgenGTOreLayer.NO_OVERLAP_AIR_BLOCK -> { + if (debugOrevein) GTLog.out.println( + " No overlap and air block in test spot=" + oreveinSeed + + " " + + (tWorldGen).mWorldGenName + + " tries at oremix=" + + i + + " placementAttempts=" + + placementAttempts + + " dimensionName=" + + tDimensionName); + // SHould do retry in this case until out of chances + placementAttempts++; + } + } + break; // Try the next orevein + } catch (Throwable e) { + if (debugOrevein) GTLog.out.println( + "Exception occurred on oreVein" + tWorldGen + + " oreveinSeed=" + + oreveinSeed + + " mX=" + + this.mX + + " mZ=" + + this.mZ + + " oreseedX=" + + oreseedX + + " oreseedZ=" + + oreseedZ); + e.printStackTrace(GTLog.err); + } + } + } + } + // Only add an empty orevein if unable to place a vein at the oreseed chunk. + if ((!oreveinFound) && (this.mX == oreseedX) && (this.mZ == oreseedZ)) { + if (debugOrevein) GTLog.out.println( + " Empty oreveinSeed=" + oreveinSeed + + " mX=" + + this.mX + + " mZ=" + + this.mZ + + " oreseedX=" + + oreseedX + + " oreseedZ=" + + oreseedZ + + " tries at oremix=" + + i + + " placementAttempts=" + + placementAttempts + + " dimensionName=" + + tDimensionName); + validOreveins.put(oreveinSeed, noOresInVein); + } + } else if (oreveinPercentageRoll >= oreveinPercentage) { + if (debugOrevein) GTLog.out.println( + " Skipped oreveinSeed=" + oreveinSeed + + " mX=" + + this.mX + + " mZ=" + + this.mZ + + " oreseedX=" + + oreseedX + + " oreseedZ=" + + oreseedZ + + " RNG=" + + oreveinPercentageRoll + + " %=" + + oreveinPercentage + + " dimensionName=" + + tDimensionName); + validOreveins.put(oreveinSeed, noOresInVein); + } + } else { + // oreseed is located in the previously processed table + if (debugOrevein) GTLog.out + .print(" Valid oreveinSeed=" + oreveinSeed + " validOreveins.size()=" + validOreveins.size() + " "); + WorldgenGTOreLayer tWorldGen = validOreveins.get(oreveinSeed); + oreveinRNG.setSeed(oreveinSeed ^ (tWorldGen.mPrimaryMeta)); // Reset RNG to only be based on oreseed X/Z + // and type of vein + int placementResult = tWorldGen.executeWorldgenChunkified( + this.mWorld, + oreveinRNG, + this.mBiome, + this.mDimensionType, + this.mX * 16, + this.mZ * 16, + oreseedX * 16, + oreseedZ * 16, + this.mChunkGenerator, + this.mChunkProvider); + switch (placementResult) { + case WorldgenGTOreLayer.NO_ORE_IN_BOTTOM_LAYER -> { + if (debugOrevein) GTLog.out.println(" No ore in bottom layer"); + } + case WorldgenGTOreLayer.NO_OVERLAP -> { + if (debugOrevein) GTLog.out.println(" No overlap"); + } + } + } + } + + @Override + public void run() { + long startTime = System.nanoTime(); + Chunk tChunk = this.mWorld.getChunkFromChunkCoords(this.mX, this.mZ); + + int oreveinMaxSize; + + // Do GT_Stones and GT_small_ores oregen for this chunk + try { + for (GTWorldgen tWorldGen : GregTechAPI.sWorldgenList) { + /* + * if (debugWorldGen) GTLog.out.println( "tWorldGen.mWorldGenName="+tWorldGen.mWorldGenName ); + */ + tWorldGen.executeWorldgen( + this.mWorld, + this.mRandom, + this.mBiome, + this.mDimensionType, + this.mX * 16, + this.mZ * 16, + this.mChunkGenerator, + this.mChunkProvider); + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + long leftOverTime = System.nanoTime(); + + // Determine bounding box on how far out to check for oreveins affecting this chunk + // For now, manually reducing oreveinMaxSize when not in the Underdark for performance + if (this.mWorld.provider.getDimensionName() + .equals("Underdark")) { + oreveinMaxSize = 32; // Leave Deep Dark/Underdark max oregen at 32, instead of 64 + } else { + oreveinMaxSize = 32; + } + + int wXbox = this.mX - (oreveinMaxSize / 16); + int eXbox = this.mX + (oreveinMaxSize / 16 + 1); // Need to add 1 since it is compared using a < + int nZbox = this.mZ - (oreveinMaxSize / 16); + int sZbox = this.mZ + (oreveinMaxSize / 16 + 1); + + // Search for orevein seeds and add to the list; + for (int x = wXbox; x < eXbox; x++) { + for (int z = nZbox; z < sZbox; z++) { + // Determine if this X/Z is an orevein seed + if (isOreChunk(x, z)) { + if (debugWorldGen) GTLog.out.println("Adding seed x=" + x + " z=" + z); + seedList.add(new NearbySeeds(x, z)); + } + } + } + + // Now process each oreseed vs this requested chunk + for (; seedList.size() != 0; seedList.remove(0)) { + if (debugWorldGen) + GTLog.out.println("Processing seed x=" + seedList.get(0).mX + " z=" + seedList.get(0).mZ); + worldGenFindVein(seedList.get(0).mX, seedList.get(0).mZ); + } + + long oregenTime = System.nanoTime(); + + // Asteroid Worldgen + int tDimensionType = this.mWorld.provider.dimensionId; + // String tDimensionName = this.mWorld.provider.getDimensionName(); + // if (((tDimensionType == 1) && endAsteroids && ((mEndAsteroidProbability <= 1) || + // (aRandom.nextInt(mEndAsteroidProbability) == 0))) || ((tDimensionName.equals("Asteroids")) && gcAsteroids + // && ((mGCAsteroidProbability <= 1) || (aRandom.nextInt(mGCAsteroidProbability) == 0)))) { + if ((tDimensionType == 1 /* the end */) && endAsteroids) { + XSTR random = new XSTR( + mWorld.getSeed() + mX * mX * 91777L + mZ * mZ * 137413L + mX * mZ * 1853L + mX * 3L + mZ * 17L); + + if (mEndAsteroidProbability <= 1 || random.nextInt(mEndAsteroidProbability) == 0) { + generateAsteroid(mWorld, random, mX, mZ); + } + } + + if (tChunk != null) { + tChunk.isModified = true; + } + long endTime = System.nanoTime(); + long duration = (endTime - startTime); + if (debugWorldGen) { + GTLog.out.println( + " Oregen took " + (oregenTime - leftOverTime) + + " Leftover gen took " + + (leftOverTime - startTime) + + " Worldgen took " + + duration + + " nanoseconds"); + } + } + + private void generateAsteroid(World world, Random random, int chunkX, int chunkZ) { + short primaryMeta = 0; + short secondaryMeta = 0; + short betweenMeta = 0; + short sporadicMeta = 0; + if ((WorldgenGTOreLayer.sWeight > 0) && (WorldgenGTOreLayer.sList.size() > 0)) { + boolean temp = true; + int tRandomWeight; + for (int i = 0; (i < oreveinAttempts) && (temp); i++) { + tRandomWeight = random.nextInt(WorldgenGTOreLayer.sWeight); + for (WorldgenGTOreLayer tWorldGen : WorldgenGTOreLayer.sList) { + tRandomWeight -= tWorldGen.mWeight; + if (tRandomWeight <= 0) { + try { + if (tWorldGen.mEndAsteroid) { + primaryMeta = tWorldGen.mPrimaryMeta; + secondaryMeta = tWorldGen.mSecondaryMeta; + betweenMeta = tWorldGen.mBetweenMeta; + sporadicMeta = tWorldGen.mSporadicMeta; + temp = false; + break; + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + } + } + } + } + // if(GT_Values.D1)GT_FML_LOGGER.info("do asteroid gen: "+this.mX+" "+this.mZ); + int tX = chunkX * 16 + random.nextInt(16); + int tY = 50 + random.nextInt(200 - 50); + int tZ = chunkZ * 16 + random.nextInt(16); + mSize = endMinSize + random.nextInt(endMaxSize - endMinSize + 1); + + if ((world.getBlock(tX, tY, tZ) + .isAir(world, tX, tY, tZ))) { + float randomRadian = random.nextFloat() * (float) Math.PI; + double xBase = tX + 8 + MathHelper.sin(randomRadian) * mSize / 8.0F; + double xFactor = tX + 8 - MathHelper.sin(randomRadian) * mSize / 8.0F; + double zBase = tZ + 8 + MathHelper.cos(randomRadian) * mSize / 8.0F; + double zFactor = tZ + 8 - MathHelper.cos(randomRadian) * mSize / 8.0F; + double yBase = tY + random.nextInt(3) - 2; + double yFactor = tY + random.nextInt(3) - 2; + + for (int i = 0; i <= mSize; i++) { + double xCenter = xBase + (xFactor - xBase) * i / mSize; + double yCenter = yBase + (yFactor - yBase) * i / mSize; + double zCenter = zBase + (zFactor - zBase) * i / mSize; + double randomDistance = random.nextDouble() * mSize / 16.0D; + double halfLength = (MathHelper.sin(i * (float) Math.PI / mSize) + 1.0F) * randomDistance + 1.0D; + double halfHeight = (MathHelper.sin(i * (float) Math.PI / mSize) + 1.0F) * randomDistance + 1.0D; + int tMinX = MathHelper.floor_double(xCenter - halfLength / 2.0D); + int tMinY = MathHelper.floor_double(yCenter - halfHeight / 2.0D); + int tMinZ = MathHelper.floor_double(zCenter - halfLength / 2.0D); + int tMaxX = MathHelper.floor_double(xCenter + halfLength / 2.0D); + int tMaxY = MathHelper.floor_double(yCenter + halfHeight / 2.0D); + int tMaxZ = MathHelper.floor_double(zCenter + halfLength / 2.0D); + + for (int eX = tMinX; eX <= tMaxX; eX++) { + double xChance = (eX + 0.5D - xCenter) / (halfLength / 2.0D); + if (xChance * xChance < 1.0D) { + for (int eY = tMinY; eY <= tMaxY; eY++) { + double yChance = (eY + 0.5D - yCenter) / (halfHeight / 2.0D); + if (xChance * xChance + yChance * yChance < 1.0D) { + for (int eZ = tMinZ; eZ <= tMaxZ; eZ++) { + double zChance = (eZ + 0.5D - zCenter) / (halfLength / 2.0D); + if (xChance * xChance + yChance * yChance + zChance * zChance >= 1.0D) { + continue; + } + if (!world.getBlock(tX, tY, tZ) + .isAir(world, tX, tY, tZ)) { + continue; + } + int ranOre = random.nextInt(50); + if (ranOre < 3) { + TileEntityOres.setOreBlock(world, eX, eY, eZ, primaryMeta, false); + } else if (ranOre < 6) { + TileEntityOres.setOreBlock(world, eX, eY, eZ, secondaryMeta, false); + } else if (ranOre < 8) { + TileEntityOres.setOreBlock(world, eX, eY, eZ, betweenMeta, false); + } else if (ranOre < 10) { + TileEntityOres.setOreBlock(world, eX, eY, eZ, sporadicMeta, false); + } else { + world.setBlock(eX, eY, eZ, Blocks.end_stone, 0, 0); + } + } + } + } + } + } + } + } + } + } +} diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java deleted file mode 100644 index 66e042a051..0000000000 --- a/src/main/java/gregtech/common/GT_Client.java +++ /dev/null @@ -1,1073 +0,0 @@ -// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. -// Jad home page: http://www.kpdus.com/jad.html -// Decompiler options: packimports(3) -// Source File Name: GT_Client.java - -package gregtech.common; - -import static gregtech.api.enums.GT_Values.calculateMaxPlasmaTurbineEfficiency; -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.enums.Mods.GregTech; -import static org.lwjgl.opengl.GL11.GL_LINE_LOOP; - -import java.net.URL; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Scanner; -import java.util.function.Function; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.GLAllocation; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.resources.IReloadableResourceManager; -import net.minecraft.client.resources.IResourceManager; -import net.minecraft.client.resources.IResourceManagerReloadListener; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.World; -import net.minecraftforge.client.event.DrawBlockHighlightEvent; -import net.minecraftforge.client.event.sound.SoundSetupEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.oredict.OreDictionary; - -import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.GL20; - -import com.glodblock.github.nei.recipes.FluidRecipe; -import com.glodblock.github.nei.recipes.extractor.GregTech5RecipeExtractor; -import com.gtnewhorizon.structurelib.alignment.IAlignment; -import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; - -import appeng.api.util.IOrientable; -import appeng.tile.misc.TileInterface; -import codechicken.lib.vec.Rotation; -import codechicken.lib.vec.Scale; -import codechicken.lib.vec.Transformation; -import codechicken.lib.vec.Translation; -import cpw.mods.fml.client.event.ConfigChangedEvent; -import cpw.mods.fml.client.registry.RenderingRegistry; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent; -import cpw.mods.fml.common.network.FMLNetworkEvent; -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.SoundResource; -import gregtech.api.gui.GT_GUIColorOverride; -import gregtech.api.gui.modularui.FallbackableSteamTexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.ITurnable; -import gregtech.api.items.GT_MetaGenerated_Item; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.multitileentity.multiblock.base.MultiBlockPart; -import gregtech.api.net.GT_Packet_ClientPreference; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.recipe.RecipeCategory; -import gregtech.api.util.ColorsMetadataSection; -import gregtech.api.util.ColorsMetadataSectionSerializer; -import gregtech.api.util.GT_ClientPreference; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_MusicSystem; -import gregtech.api.util.GT_PlayedSound; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder; -import gregtech.client.SeekingOggCodec; -import gregtech.common.blocks.GT_Block_FrameBox; -import gregtech.common.blocks.GT_Item_Machines; -import gregtech.common.render.GT_CapeRenderer; -import gregtech.common.render.GT_FlaskRenderer; -import gregtech.common.render.GT_FluidDisplayStackRenderer; -import gregtech.common.render.GT_LaserRenderer; -import gregtech.common.render.GT_MetaGenerated_Tool_Renderer; -import gregtech.common.render.GT_MultiTile_Renderer; -import gregtech.common.render.GT_PollutionRenderer; -import gregtech.common.render.GT_RenderDrone; -import gregtech.common.render.GT_Renderer_Block; -import gregtech.common.render.GT_WormholeRenderer; -import gregtech.common.render.items.GT_MetaGenerated_Item_Renderer; -import gregtech.common.tileentities.debug.GT_MetaTileEntity_AdvDebugStructureWriter; -import gregtech.loaders.ExtraIcons; -import gregtech.loaders.misc.GT_Bees; -import gregtech.loaders.preload.GT_PreLoad; -import gregtech.nei.NEI_GT_Config; -import ic2.api.tile.IWrenchable; -import paulscode.sound.SoundSystemConfig; -import paulscode.sound.SoundSystemException; - -// Referenced classes of package gregtech.common: -// GT_Proxy - -public class GT_Client extends GT_Proxy implements Runnable { - - public static final String GTNH_CAPE_LIST_URL = "https://raw.githubusercontent.com/GTNewHorizons/CustomGTCapeHook-Cape-List/master/capes.txt"; - public static final String GT_CAPE_LIST_URL = "http://gregtech.overminddl1.com/com/gregoriust/gregtech/supporterlist.txt"; - private static final List ROTATABLE_VANILLA_BLOCKS; - - private static final int[][] GRID_SWITCH_TABLE = new int[][] { { 0, 5, 3, 1, 2, 4 }, { 5, 0, 1, 3, 2, 4 }, - { 1, 3, 0, 5, 2, 4 }, { 3, 1, 5, 0, 2, 4 }, { 4, 2, 3, 1, 0, 5 }, { 2, 4, 3, 1, 5, 0 }, }; - - // don't ask. these "just works" - private static final Transformation ROTATION_MARKER_TRANSFORM_CENTER = new Scale(0.5); - private static final Transformation[] ROTATION_MARKER_TRANSFORMS_SIDES_TRANSFORMS = { - new Scale(0.25).with(new Translation(0, 0, 0.375)) - .compile(), - new Scale(0.25).with(new Translation(0.375, 0, 0)) - .compile(), - new Scale(0.25).with(new Translation(0, 0, -0.375)) - .compile(), - new Scale(0.25).with(new Translation(-0.375, 0, 0)) - .compile(), }; - private static final int[] ROTATION_MARKER_TRANSFORMS_SIDES = { -1, -1, 2, 0, 3, 1, -1, -1, 0, 2, 3, 1, 0, 2, -1, - -1, 3, 1, 2, 0, -1, -1, 3, 1, 1, 3, 2, 0, -1, -1, 3, 1, 2, 0, -1, -1 }; - private static final Transformation[] ROTATION_MARKER_TRANSFORMS_CORNER = { - new Scale(0.25).with(new Translation(0.375, 0, 0.375)) - .compile(), - new Scale(0.25).with(new Translation(-0.375, 0, 0.375)) - .compile(), - new Scale(0.25).with(new Translation(0.375, 0, -0.375)) - .compile(), - new Scale(0.25).with(new Translation(-0.375, 0, -0.375)) - .compile(), }; - private static int rotationMarkerDisplayList; - private static boolean rotationMarkerDisplayListCompiled = false; - - static { - ROTATABLE_VANILLA_BLOCKS = Arrays.asList( - Blocks.piston, - Blocks.sticky_piston, - Blocks.furnace, - Blocks.lit_furnace, - Blocks.dropper, - Blocks.dispenser, - Blocks.chest, - Blocks.trapped_chest, - Blocks.ender_chest, - Blocks.hopper, - Blocks.pumpkin, - Blocks.lit_pumpkin); - } - - private final HashSet mCapeList = new HashSet<>(); - public static final GT_PollutionRenderer mPollutionRenderer = new GT_PollutionRenderer(); - private final GT_CapeRenderer mCapeRenderer; - private final List mPosR; - private final List mPosG; - private final List mPosB; - private final List mPosA = Collections.emptyList(); - private final List mNegR; - private final List mNegG; - private final List mNegB; - private final List mNegA = Collections.emptyList(); - private final List mMoltenPosR; - private final List mMoltenPosG; - private final List mMoltenPosB; - private final List mMoltenPosA = Collections.emptyList(); - private final List mMoltenNegR; - private final List mMoltenNegG; - private final List mMoltenNegB; - private final List mMoltenNegA = Collections.emptyList(); - private long mAnimationTick; - /** - * This is the place to def the value used below - **/ - private long afterSomeTime; - - private boolean mAnimationDirection; - private GT_ClientPreference mPreference; - private boolean mFirstTick = false; - public static final int ROTATION_MARKER_RESOLUTION = 120; - private int mReloadCount; - private float renderTickTime; - public static GT_MetaGenerated_Item_Renderer metaGeneratedItemRenderer; - - public GT_Client() { - mCapeRenderer = new GT_CapeRenderer(mCapeList); - mAnimationTick = 0L; - mAnimationDirection = false; - mPosR = Arrays.asList( - Materials.Enderium, - Materials.Vinteum, - Materials.Uranium235, - Materials.InfusedGold, - Materials.Plutonium241, - Materials.NaquadahEnriched, - Materials.Naquadria, - Materials.InfusedOrder, - Materials.Force, - Materials.Pyrotheum, - Materials.Sunnarium, - Materials.Glowstone, - Materials.Thaumium, - Materials.InfusedVis, - Materials.InfusedAir, - Materials.InfusedFire, - Materials.FierySteel, - Materials.Firestone); - mPosG = Arrays.asList( - Materials.Enderium, - Materials.Vinteum, - Materials.Uranium235, - Materials.InfusedGold, - Materials.Plutonium241, - Materials.NaquadahEnriched, - Materials.Naquadria, - Materials.InfusedOrder, - Materials.Force, - Materials.Pyrotheum, - Materials.Sunnarium, - Materials.Glowstone, - Materials.InfusedAir, - Materials.InfusedEarth); - mPosB = Arrays.asList( - Materials.Enderium, - Materials.Vinteum, - Materials.Uranium235, - Materials.InfusedGold, - Materials.Plutonium241, - Materials.NaquadahEnriched, - Materials.Naquadria, - Materials.InfusedOrder, - Materials.InfusedVis, - Materials.InfusedWater, - Materials.Thaumium); - mNegR = Arrays.asList(Materials.InfusedEntropy, Materials.NetherStar); - mNegG = Arrays.asList(Materials.InfusedEntropy, Materials.NetherStar); - mNegB = Arrays.asList(Materials.InfusedEntropy, Materials.NetherStar); - mMoltenPosR = Arrays.asList( - Materials.Enderium, - Materials.NetherStar, - Materials.Vinteum, - Materials.Uranium235, - Materials.InfusedGold, - Materials.Plutonium241, - Materials.NaquadahEnriched, - Materials.Naquadria, - Materials.InfusedOrder, - Materials.Force, - Materials.Pyrotheum, - Materials.Sunnarium, - Materials.Glowstone, - Materials.Thaumium, - Materials.InfusedVis, - Materials.InfusedAir, - Materials.InfusedFire, - Materials.FierySteel, - Materials.Firestone); - mMoltenPosG = Arrays.asList( - Materials.Enderium, - Materials.NetherStar, - Materials.Vinteum, - Materials.Uranium235, - Materials.InfusedGold, - Materials.Plutonium241, - Materials.NaquadahEnriched, - Materials.Naquadria, - Materials.InfusedOrder, - Materials.Force, - Materials.Pyrotheum, - Materials.Sunnarium, - Materials.Glowstone, - Materials.InfusedAir, - Materials.InfusedEarth); - mMoltenPosB = Arrays.asList( - Materials.Enderium, - Materials.NetherStar, - Materials.Vinteum, - Materials.Uranium235, - Materials.InfusedGold, - Materials.Plutonium241, - Materials.NaquadahEnriched, - Materials.Naquadria, - Materials.InfusedOrder, - Materials.InfusedVis, - Materials.InfusedWater, - Materials.Thaumium); - mMoltenNegR = Collections.singletonList(Materials.InfusedEntropy); - mMoltenNegG = Collections.singletonList(Materials.InfusedEntropy); - mMoltenNegB = Collections.singletonList(Materials.InfusedEntropy); - } - - private static boolean checkedForChicken = false; - - private static void drawGrid(DrawBlockHighlightEvent aEvent, boolean showCoverConnections, boolean aIsWrench, - boolean aIsSneaking) { - if (!checkedForChicken) { - try { - Class.forName("codechicken.lib.vec.Rotation"); - } catch (ClassNotFoundException e) { - return; - } - checkedForChicken = true; - } - - GL11.glPushMatrix(); - - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glDisable(GL11.GL_TEXTURE_2D); - - // pause shader - int program = GL11.glGetInteger(GL20.GL_CURRENT_PROGRAM); - GL20.glUseProgram(0); - - MovingObjectPosition target = aEvent.target; - EntityPlayer player = aEvent.player; - double camX = player.lastTickPosX + (player.posX - player.lastTickPosX) * (double) aEvent.partialTicks; - double camY = player.lastTickPosY + (player.posY - player.lastTickPosY) * (double) aEvent.partialTicks; - double camZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * (double) aEvent.partialTicks; - GL11.glTranslated(target.blockX - (int) camX, target.blockY - (int) camY, target.blockZ - (int) camZ); - GL11.glTranslated(0.5D - (camX - (int) camX), 0.5D - (camY - (int) camY), 0.5D - (camZ - (int) camZ)); - final int tSideHit = target.sideHit; - Rotation.sideRotations[tSideHit].glApply(); - // draw grid - GL11.glTranslated(0.0D, -0.502D, 0.0D); - GL11.glLineWidth(2.5F); - GL11.glColor4f(0.0F, 0.0F, 0.0F, 0.5F); - GL11.glBegin(GL11.GL_LINES); - GL11.glVertex3d(+.50D, .0D, -.25D); - GL11.glVertex3d(-.50D, .0D, -.25D); - GL11.glVertex3d(+.50D, .0D, +.25D); - GL11.glVertex3d(-.50D, .0D, +.25D); - GL11.glVertex3d(+.25D, .0D, -.50D); - GL11.glVertex3d(+.25D, .0D, +.50D); - GL11.glVertex3d(-.25D, .0D, -.50D); - GL11.glVertex3d(-.25D, .0D, +.50D); - final TileEntity tTile = player.worldObj.getTileEntity(target.blockX, target.blockY, target.blockZ); - final Block block = player.worldObj.getBlock(target.blockX, target.blockY, target.blockZ); - final int meta = player.worldObj.getBlockMetadata(target.blockX, target.blockY, target.blockZ); - - // draw connection indicators - int tConnections = 0; - if (tTile instanceof ICoverable iCoverable) { - if (showCoverConnections) { - for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { - if (iCoverable.getCoverIDAtSide(tSide) != 0) tConnections |= tSide.flag; - } - } else if (tTile instanceof BaseMetaTileEntity baseMetaTile && baseMetaTile.getAlignment() == null) { - if (!aIsSneaking) tConnections |= baseMetaTile.getFrontFacing().flag; - else if (baseMetaTile.getMetaTileEntity() instanceof GT_MetaTileEntity_BasicMachine basicMachine) { - tConnections |= basicMachine.mMainFacing.flag; - } - } else if (tTile instanceof BaseMetaPipeEntity pipeEntity) tConnections = pipeEntity.mConnections; - } else if (tTile instanceof IWrenchable wrenchable) { - tConnections |= ForgeDirection.getOrientation(wrenchable.getFacing()).flag; - } else if (ROTATABLE_VANILLA_BLOCKS.contains(block)) { - tConnections |= ForgeDirection.getOrientation(meta).flag; - } else if (tTile instanceof TileInterface tileInterface) tConnections |= tileInterface.getUp() - .getOpposite().flag; - - if (tConnections != 0) { - for (ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { - if ((tConnections & tSide.flag) != 0) { - switch (GRID_SWITCH_TABLE[target.sideHit][tSide.ordinal()]) { - case 0 -> { - GL11.glVertex3d(+.25D, .0D, +.25D); - GL11.glVertex3d(-.25D, .0D, -.25D); - GL11.glVertex3d(-.25D, .0D, +.25D); - GL11.glVertex3d(+.25D, .0D, -.25D); - } - case 1 -> { - GL11.glVertex3d(-.25D, .0D, +.50D); - GL11.glVertex3d(+.25D, .0D, +.25D); - GL11.glVertex3d(-.25D, .0D, +.25D); - GL11.glVertex3d(+.25D, .0D, +.50D); - } - case 2 -> { - GL11.glVertex3d(-.50D, .0D, -.25D); - GL11.glVertex3d(-.25D, .0D, +.25D); - GL11.glVertex3d(-.50D, .0D, +.25D); - GL11.glVertex3d(-.25D, .0D, -.25D); - } - case 3 -> { - GL11.glVertex3d(-.25D, .0D, -.50D); - GL11.glVertex3d(+.25D, .0D, -.25D); - GL11.glVertex3d(-.25D, .0D, -.25D); - GL11.glVertex3d(+.25D, .0D, -.50D); - } - case 4 -> { - GL11.glVertex3d(+.50D, .0D, -.25D); - GL11.glVertex3d(+.25D, .0D, +.25D); - GL11.glVertex3d(+.50D, .0D, +.25D); - GL11.glVertex3d(+.25D, .0D, -.25D); - } - case 5 -> { - GL11.glVertex3d(+.50D, .0D, +.50D); - GL11.glVertex3d(+.25D, .0D, +.25D); - GL11.glVertex3d(+.50D, .0D, +.25D); - GL11.glVertex3d(+.25D, .0D, +.50D); - GL11.glVertex3d(+.50D, .0D, -.50D); - GL11.glVertex3d(+.25D, .0D, -.25D); - GL11.glVertex3d(+.50D, .0D, -.25D); - GL11.glVertex3d(+.25D, .0D, -.50D); - GL11.glVertex3d(-.50D, .0D, +.50D); - GL11.glVertex3d(-.25D, .0D, +.25D); - GL11.glVertex3d(-.50D, .0D, +.25D); - GL11.glVertex3d(-.25D, .0D, +.50D); - GL11.glVertex3d(-.50D, .0D, -.50D); - GL11.glVertex3d(-.25D, .0D, -.25D); - GL11.glVertex3d(-.50D, .0D, -.25D); - GL11.glVertex3d(-.25D, .0D, -.50D); - } - } - } - } - } - GL11.glEnd(); - // draw turning indicator - Function getTransform = (ForgeDirection direction) -> { - try { - if (direction.ordinal() == tSideHit) return new Transformation[] { ROTATION_MARKER_TRANSFORM_CENTER }; - else if (direction.getOpposite() - .ordinal() == tSideHit) { - return ROTATION_MARKER_TRANSFORMS_CORNER; - } else { - return new Transformation[] { - ROTATION_MARKER_TRANSFORMS_SIDES_TRANSFORMS[ROTATION_MARKER_TRANSFORMS_SIDES[tSideHit * 6 - + direction.ordinal()]] }; - } - } catch (ArrayIndexOutOfBoundsException e) { - return new Transformation[] {}; - } - - }; - - if (aIsWrench && tTile instanceof IAlignmentProvider) { - final IAlignment tAlignment = ((IAlignmentProvider) (tTile)).getAlignment(); - if (tAlignment != null) { - for (var transform : getTransform.apply(tAlignment.getDirection())) { - drawExtendedRotationMarker(transform, aIsSneaking, tAlignment); - } - } - } - if (aIsWrench && tTile instanceof IOrientable orientable - && !(tTile instanceof TileInterface) - && orientable.canBeRotated()) { - for (var transform : getTransform.apply(aIsSneaking ? orientable.getForward() : orientable.getUp())) { - drawExtendedRotationMarker(transform, aIsSneaking, orientable); - } - } - GL20.glUseProgram(program); // resume shader - GL11.glPopMatrix(); // get back to player center - } - - private static void drawExtendedRotationMarker(Transformation transform, boolean sneaking, IAlignment alignment) { - if (sneaking) { - if (alignment.isFlipChangeAllowed()) { - drawFlipMarker(transform); - } - } else { - if (alignment.isRotationChangeAllowed()) { - drawRotationMarker(transform); - } - } - } - - private static void drawExtendedRotationMarker(Transformation transform, boolean sneaking, IOrientable orientable) { - drawRotationMarker(transform); - } - - private static void drawRotationMarker(Transformation transform) { - if (!rotationMarkerDisplayListCompiled) { - rotationMarkerDisplayList = GLAllocation.generateDisplayLists(1); - compileRotationMarkerDisplayList(rotationMarkerDisplayList); - rotationMarkerDisplayListCompiled = true; - } - GL11.glPushMatrix(); - transform.glApply(); - GL11.glCallList(rotationMarkerDisplayList); - GL11.glPopMatrix(); - } - - private static void compileRotationMarkerDisplayList(int displayList) { - GL11.glNewList(displayList, GL11.GL_COMPILE); - GL11.glBegin(GL_LINE_LOOP); - for (int i = 0; i <= ROTATION_MARKER_RESOLUTION; i++) { - GL11.glVertex3d( - Math.cos(i * Math.PI * 1.75 / ROTATION_MARKER_RESOLUTION) * 0.4, - 0, - Math.sin(i * Math.PI * 1.75 / ROTATION_MARKER_RESOLUTION) * 0.4); - } - for (int i = ROTATION_MARKER_RESOLUTION; i >= 0; i--) { - GL11.glVertex3d( - Math.cos(i * Math.PI * 1.75 / ROTATION_MARKER_RESOLUTION) * 0.24, - 0, - Math.sin(i * Math.PI * 1.75 / ROTATION_MARKER_RESOLUTION) * 0.24); - } - GL11.glVertex3d(0.141114561800, 0, 0); - GL11.glVertex3d(0.32, 0, -0.178885438199); - GL11.glVertex3d(0.498885438199, 0, 0); - GL11.glEnd(); - GL11.glEndList(); - } - - private static void drawFlipMarker(Transformation transform) { - GL11.glPushMatrix(); - transform.glApply(); - final Tessellator t = Tessellator.instance; - // right shape - GL11.glLineStipple(4, (short) 0xAAAA); - GL11.glEnable(GL11.GL_LINE_STIPPLE); - t.startDrawing(GL11.GL_LINE_STRIP); - t.addVertex(0.1d, 0d, 0.04d); - t.addVertex(0.1d, 0d, 0.2d); - t.addVertex(0.35d, 0d, 0.35d); - t.addVertex(0.35d, 0d, -0.35d); - t.addVertex(0.1d, 0d, -0.2d); - t.addVertex(0.1d, 0d, -0.04d); - t.draw(); - GL11.glDisable(GL11.GL_LINE_STIPPLE); - // left shape - t.startDrawing(GL11.GL_LINE_STRIP); - t.addVertex(-0.1d, 0d, 0.04d); - t.addVertex(-0.1d, 0d, 0.2d); - t.addVertex(-0.35d, 0d, 0.35d); - t.addVertex(-0.35d, 0d, -0.35d); - t.addVertex(-0.1d, 0d, -0.2d); - t.addVertex(-0.1d, 0d, -0.04d); - t.draw(); - // arrow - t.startDrawing(GL11.GL_LINE_LOOP); - t.addVertex(0.15d, 0d, -0.04d); - t.addVertex(0.15d, 0d, -0.1d); - t.addVertex(0.25d, 0d, 0.d); - t.addVertex(0.15d, 0d, 0.1d); - t.addVertex(0.15d, 0d, 0.04d); - t.addVertex(-0.15d, 0d, 0.04d); - t.addVertex(-0.15d, 0d, 0.1d); - t.addVertex(-0.25d, 0d, 0.d); - t.addVertex(-0.15d, 0d, -0.1d); - t.addVertex(-0.15d, 0d, -0.04d); - t.draw(); - GL11.glPopMatrix(); - } - - @Override - public boolean isServerSide() { - return true; - } - - @Override - public boolean isClientSide() { - return true; - } - - @Override - public boolean isBukkitSide() { - return false; - } - - @Override - public EntityPlayer getThePlayer() { - return Minecraft.getMinecraft().thePlayer; - } - - @Override - public int addArmor(String aPrefix) { - return RenderingRegistry.addNewArmourRendererPrefix(aPrefix); - } - - @Override - public void onPreLoad() { - super.onPreLoad(); - - MinecraftForge.EVENT_BUS.register(new ExtraIcons()); - Minecraft.getMinecraft() - .getResourcePackRepository().rprMetadataSerializer - .registerMetadataSectionType(new ColorsMetadataSectionSerializer(), ColorsMetadataSection.class); - - new GT_MetaTileEntity_AdvDebugStructureWriter.ForgeEventHandler(); - - final String[] arr = { "renadi", "hanakocz", "MysteryDump", "Flaver4", "x_Fame", "Peluche321", - "Goshen_Ithilien", "manf", "Bimgo", "leagris", "IAmMinecrafter02", "Cerous", "Devilin_Pixy", "Bkarlsson87", - "BadAlchemy", "CaballoCraft", "melanclock", "Resursator", "demanzke", "AndrewAmmerlaan", "Deathlycraft", - "Jirajha", "Axlegear", "kei_kouma", "Dracion", "dungi", "Dorfschwein", "Zero Tw0", "mattiagraz85", - "sebastiank30", "Plem", "invultri", "grillo126", "malcanteth", "Malevolence_", "Nicholas_Manuel", "Sirbab", - "kehaan", "bpgames123", "semig0d", "9000bowser", "Sovereignty89", "Kris1432", "xander_cage_", "samuraijp", - "bsaa", "SpwnX", "tworf", "Kadah", "kanni", "Stute", "Hegik", "Onlyme", "t3hero", "Hotchi", "jagoly", - "Nullav", "BH5432", "Sibmer", "inceee", "foxxx0", "Hartok", "TMSama", "Shlnen", "Carsso", "zessirb", - "meep310", "Seldron", "yttr1um", "hohounk", "freebug", "Sylphio", "jmarler", "Saberawr", "r00teniy", - "Neonbeta", "yinscape", "voooon24", "Quintine", "peach774", "lepthymo", "bildeman", "Kremnari", "Aerosalo", - "OndraSter", "oscares91", "mr10movie", "Daxx367x2", "EGERTRONx", "aka13_404", "Abouttabs", "Johnstaal", - "djshiny99", "megatronp", "DZCreeper", "Kane_Hart", "Truculent", "vidplace7", "simon6689", "MomoNasty", - "UnknownXLV", "goreacraft", "Fluttermine", "Daddy_Cecil", "MrMaleficus", "TigersFangs", "cublikefoot", - "chainman564", "NikitaBuker", "Misha999777", "25FiveDetail", "AntiCivilBoy", "michaelbrady", - "xXxIceFirexXx", "Speedynutty68", "GarretSidzaka", "HallowCharm977", "mastermind1919", "The_Hypersonic", - "diamondguy2798", "zF4ll3nPr3d4t0r", "CrafterOfMines57", "XxELIT3xSNIP3RxX", "SuterusuKusanagi", - "xavier0014", "adamros", "alexbegt" }; - for (String tName : arr) { - mCapeList.add(tName.toLowerCase()); - } - new Thread(this).start(); - - mPollutionRenderer.preLoad(); - - mPreference = new GT_ClientPreference(); - - Materials.initClient(); - } - - @Override - public void onLoad() { - super.onLoad(); - GT_Renderer_Block.register(); - new GT_MultiTile_Renderer(); - new GT_RenderDrone(); - new GT_LaserRenderer(); - new GT_WormholeRenderer(); - - metaGeneratedItemRenderer = new GT_MetaGenerated_Item_Renderer(); - for (GT_MetaGenerated_Item item : GT_MetaGenerated_Item.sInstances.values()) { - metaGeneratedItemRenderer.registerItem(item); - } - if (Forestry.isModLoaded()) { - metaGeneratedItemRenderer.registerItem(GT_Bees.combs); - } - new GT_MetaGenerated_Tool_Renderer(); - new GT_FlaskRenderer(); - new GT_FluidDisplayStackRenderer(); - MinecraftForge.EVENT_BUS.register(new NEI_GT_Config()); - } - - @Override - public void onPostLoad() { - super.onPostLoad(); - - // reobf doesn't work with lambda, so this must be a class - // noinspection Convert2Lambda - ((IReloadableResourceManager) Minecraft.getMinecraft() - .getResourceManager()).registerReloadListener(new IResourceManagerReloadListener() { - - @Override - public void onResourceManagerReload(IResourceManager l) { - GT_GUIColorOverride.onResourceManagerReload(); - FallbackableSteamTexture.reload(); - GregTech_API.sCoverBehaviors.values() - .forEach(GT_CoverBehaviorBase::reloadColorOverride); - } - }); - } - - @Override - public void onLoadComplete() { - super.onLoadComplete(); - for (RecipeCategory category : RecipeCategory.ALL_RECIPE_CATEGORIES.values()) { - if (category.recipeMap.getFrontend() - .getNEIProperties().registerNEI) { - FluidRecipe.addRecipeMap( - category.unlocalizedName, - new GregTech5RecipeExtractor( - category.unlocalizedName.equals("gt.recipe.scanner") - || category.unlocalizedName.equals("gt.recipe.fakeAssemblylineProcess"))); - } - } - } - - @SubscribeEvent - @SuppressWarnings("unused") // used by the event bus - public void onSoundSetup(SoundSetupEvent event) { - try { - SoundSystemConfig.setCodec(SeekingOggCodec.EXTENSION, SeekingOggCodec.class); - } catch (SoundSystemException e) { - throw new RuntimeException(e); - } - } - - @Override - public void run() { - GT_Log.out.println("GT_Mod: Downloading Cape List."); - try (final Scanner tScanner = new Scanner(new URL(GT_CAPE_LIST_URL).openStream())) { - while (tScanner.hasNextLine()) { - this.mCapeList.add( - tScanner.nextLine() - .toLowerCase()); - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - GT_Log.out.println("GT New Horizons: Downloading Cape List."); - try (final Scanner tScanner = new Scanner(new URL(GTNH_CAPE_LIST_URL).openStream())) { - while (tScanner.hasNextLine()) { - final String tName = tScanner.nextLine() - .toLowerCase(); - if (tName.contains(":")) { - if (!this.mCapeList.contains(tName.substring(0, tName.indexOf(":")))) { - this.mCapeList.add(tName); - } - } else { - this.mCapeList.add(tName); - } - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - @Override - @SubscribeEvent - public void onClientConnectedToServerEvent(FMLNetworkEvent.ClientConnectedToServerEvent aEvent) { - mFirstTick = true; - mReloadCount++; - GT_MusicSystem.ClientSystem.reset(); - // For utility methods elsewhere. - calculateMaxPlasmaTurbineEfficiency(); - } - - @Override - public void reloadNEICache() { - mReloadCount++; - } - - @Override - public int getNEIReloadCount() { - return mReloadCount; - } - - @SubscribeEvent - public void receiveRenderSpecialsEvent(net.minecraftforge.client.event.RenderPlayerEvent.Specials.Pre aEvent) { - mCapeRenderer.receiveRenderSpecialsEvent(aEvent); - } - - @SubscribeEvent - public void onPlayerTickEventClient(TickEvent.PlayerTickEvent aEvent) { - if ((aEvent.side.isClient()) && (aEvent.phase == TickEvent.Phase.END) && (!aEvent.player.isDead)) { - if (mFirstTick) { - mFirstTick = false; - GT_Values.NW.sendToServer(new GT_Packet_ClientPreference(mPreference)); - - if (!Minecraft.getMinecraft() - .isSingleplayer()) { - GT_ModHandler.removeAllIC2Recipes(); - } - } - afterSomeTime++; - if (afterSomeTime >= 100L) { - afterSomeTime = 0; - } - for (Iterator> iterator = GT_Utility.sPlayedSoundMap.entrySet() - .iterator(); iterator.hasNext();) { - Map.Entry tEntry = iterator.next(); - if (tEntry.getValue() < 0) { - iterator.remove(); - } else { - tEntry.setValue(tEntry.getValue() - 1); - } - } - if (!GregTech_API.mServerStarted) GregTech_API.mServerStarted = true; - } - } - - @SubscribeEvent - public void onConfigChange(ConfigChangedEvent.OnConfigChangedEvent e) { - if (GregTech.ID.equals(e.modID) && "client".equals(e.configID)) { - // refresh client preference and send to server, since it's the only config we allow changing at runtime. - mPreference = new GT_ClientPreference(); - GT_PreLoad.loadClientConfig(); - if (e.isWorldRunning) GT_Values.NW.sendToServer(new GT_Packet_ClientPreference(mPreference)); - } - } - - @SubscribeEvent - public void onDrawBlockHighlight(DrawBlockHighlightEvent aEvent) { - final Block aBlock = aEvent.player.worldObj - .getBlock(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); - final TileEntity aTileEntity = aEvent.player.worldObj - .getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); - - if (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWrenchList)) { - if (aTileEntity instanceof ITurnable || ROTATABLE_VANILLA_BLOCKS.contains(aBlock) - || aTileEntity instanceof IWrenchable - || (aTileEntity instanceof IOrientable orientable && orientable.canBeRotated()) - || (aBlock instanceof GT_Block_FrameBox)) drawGrid(aEvent, false, true, aEvent.player.isSneaking()); - return; - } - - // If there is no tile entity and the block is a frame box block, still draw the grid if a cover is held - if (aTileEntity == null && aBlock instanceof GT_Block_FrameBox) { - if (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCovers.keySet())) { - drawGrid(aEvent, true, false, aEvent.player.isSneaking()); - } - return; - } - - if (!(aTileEntity instanceof ICoverable)) return; - - if (aEvent.player.isSneaking() && aTileEntity instanceof IGregTechTileEntity gtEntity - && gtEntity.getMetaTileEntity() instanceof MetaPipeEntity) { - if (aEvent.currentItem != null && aEvent.currentItem.getItem() instanceof GT_Item_Machines - && GregTech_API.METATILEENTITIES[aEvent.currentItem.getItemDamage()] instanceof MetaPipeEntity) { - drawGrid(aEvent, false, false, false); - } - } - - if (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWireCutterList) - || GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sSolderingToolList) - || (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sSoftHammerList) - && aTileEntity instanceof MultiBlockPart) && aEvent.player.isSneaking()) { - if (((ICoverable) aTileEntity).getCoverIDAtSide(ForgeDirection.getOrientation(aEvent.target.sideHit)) == 0) - drawGrid(aEvent, false, false, aEvent.player.isSneaking()); - return; - } - - if ((aEvent.currentItem == null && aEvent.player.isSneaking()) - || GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCrowbarList) - || GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sScrewdriverList)) { - if (((ICoverable) aTileEntity).getCoverIDAtSide(ForgeDirection.getOrientation(aEvent.target.sideHit)) == 0) - for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { - if (((ICoverable) aTileEntity).getCoverIDAtSide(tSide) > 0) { - drawGrid(aEvent, true, false, true); - return; - } - } - return; - } - - if (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCovers.keySet())) { - if (((ICoverable) aTileEntity).getCoverIDAtSide(ForgeDirection.getOrientation(aEvent.target.sideHit)) == 0) - drawGrid(aEvent, true, false, aEvent.player.isSneaking()); - } - - if (GT_Utility.areStacksEqual(ItemList.Tool_Cover_Copy_Paste.get(1), aEvent.currentItem, true)) { - if (((ICoverable) aTileEntity).getCoverIDAtSide(ForgeDirection.getOrientation(aEvent.target.sideHit)) == 0) - drawGrid(aEvent, true, false, aEvent.player.isSneaking()); - } - } - - @SubscribeEvent - public void receiveRenderEvent(net.minecraftforge.client.event.RenderPlayerEvent.Pre aEvent) { - if (GT_Utility.getFullInvisibility(aEvent.entityPlayer)) { - aEvent.setCanceled(true); - } - } - - @SubscribeEvent - public void onRenderStart(cpw.mods.fml.common.gameevent.TickEvent.RenderTickEvent aEvent) { - if (aEvent.phase == TickEvent.Phase.START) { - renderTickTime = aEvent.renderTickTime; - } - } - - @SubscribeEvent - public void onClientTickEvent(cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent aEvent) { - if (aEvent.phase == cpw.mods.fml.common.gameevent.TickEvent.Phase.END) { - GT_MusicSystem.ClientSystem.tick(); - - if (changeDetected > 0) changeDetected--; - final int newHideValue = shouldHeldItemHideThings(); - if (newHideValue != hideValue) { - hideValue = newHideValue; - changeDetected = 5; - } - mAnimationTick++; - if (mAnimationTick % 50L == 0L) { - mAnimationDirection = !mAnimationDirection; - } - final int tDirection = mAnimationDirection ? 1 : -1; - for (Materials tMaterial : mPosR) { - tMaterial.mRGBa[0] = getSafeRGBValue(tMaterial.mRGBa[0], tDirection); - } - - for (Materials tMaterial : mPosG) { - tMaterial.mRGBa[1] = getSafeRGBValue(tMaterial.mRGBa[1], tDirection); - } - - for (Materials tMaterial : mPosB) { - tMaterial.mRGBa[2] = getSafeRGBValue(tMaterial.mRGBa[2], tDirection); - } - - for (Materials tMaterial : mPosA) { - tMaterial.mRGBa[3] = getSafeRGBValue(tMaterial.mRGBa[3], tDirection); - } - - for (Materials tMaterial : mNegR) { - tMaterial.mRGBa[0] = getSafeRGBValue(tMaterial.mRGBa[0], -tDirection); - } - - for (Materials tMaterial : mNegG) { - tMaterial.mRGBa[1] = getSafeRGBValue(tMaterial.mRGBa[1], -tDirection); - } - - for (Materials tMaterial : mNegB) { - tMaterial.mRGBa[2] = getSafeRGBValue(tMaterial.mRGBa[2], -tDirection); - } - - for (Materials tMaterial : mNegA) { - tMaterial.mRGBa[3] = getSafeRGBValue(tMaterial.mRGBa[3], -tDirection); - } - - for (Materials tMaterial : mMoltenPosR) { - tMaterial.mMoltenRGBa[0] = getSafeRGBValue(tMaterial.mMoltenRGBa[0], tDirection); - } - - for (Materials tMaterial : mMoltenPosG) { - tMaterial.mMoltenRGBa[1] = getSafeRGBValue(tMaterial.mMoltenRGBa[1], tDirection); - } - - for (Materials tMaterial : mMoltenPosB) { - tMaterial.mMoltenRGBa[2] = getSafeRGBValue(tMaterial.mMoltenRGBa[2], tDirection); - } - - for (Materials tMaterial : mMoltenPosA) { - tMaterial.mMoltenRGBa[3] = getSafeRGBValue(tMaterial.mMoltenRGBa[3], tDirection); - } - - for (Materials tMaterial : mMoltenNegR) { - tMaterial.mMoltenRGBa[0] = getSafeRGBValue(tMaterial.mMoltenRGBa[0], -tDirection); - } - - for (Materials tMaterial : mMoltenNegG) { - tMaterial.mMoltenRGBa[1] = getSafeRGBValue(tMaterial.mMoltenRGBa[1], -tDirection); - } - - for (Materials tMaterial : mMoltenNegB) { - tMaterial.mMoltenRGBa[2] = getSafeRGBValue(tMaterial.mMoltenRGBa[2], -tDirection); - } - - for (Materials tMaterial : mMoltenNegA) { - tMaterial.mMoltenRGBa[3] = getSafeRGBValue(tMaterial.mMoltenRGBa[3], -tDirection); - } - } - } - - public short getSafeRGBValue(short aRBG, int aDelta) { - int tmp = aRBG + aDelta; - if (tmp > 255) tmp = 255; - if (tmp < 0) tmp = 0; - return (short) tmp; - } - - @Override - public long getAnimationTicks() { - return mAnimationTick; - } - - @Override - public float getPartialRenderTicks() { - return renderTickTime; - } - - @Override - public void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ) { - if (GT_Utility.isStackInvalid(aStack)) return; - String tString = SoundResource.NOTE_HARP.toString(); - int i = 0; - int j = mSoundItems.size(); - do { - if (i >= j) break; - if (GT_Utility.areStacksEqual(mSoundItems.get(i), aStack)) { - tString = mSoundNames.get(i); - break; - } - i++; - } while (true); - if (tString.startsWith(SoundResource.RANDOM_EXPLODE.toString())) - if (aStack.stackSize == 3) tString = SoundResource.RANDOM_FUSE.toString(); - else if (aStack.stackSize == 2) tString = "random.old_explode"; - if (tString.startsWith("streaming.")) tString = switch (aStack.stackSize) { - case 1 -> // '\001' - tString + "13"; - case 2 -> // '\002' - tString + "cat"; - case 3 -> // '\003' - tString + "blocks"; - case 4 -> // '\004' - tString + "chirp"; - case 5 -> // '\005' - tString + "far"; - case 6 -> // '\006' - tString + "mall"; - case 7 -> // '\007' - tString + "mellohi"; - case 8 -> // '\b' - tString + "stal"; - case 9 -> // '\t' - tString + "strad"; - case 10 -> // '\n' - tString + "ward"; - case 11 -> // '\013' - tString + "11"; - case 12 -> // '\f' - tString + "wait"; - default -> tString + "wherearewenow"; - }; - if (tString.startsWith("streaming.")) { - new WorldSpawnedEventBuilder.RecordEffectEventBuilder().setIdentifier(tString.substring(10)) - .setPosition(aX, aY, aZ) - .run(); - } else { - new WorldSpawnedEventBuilder.SoundEventBuilder().setVolume(3f) - .setPitch( - tString.startsWith("note.") ? (float) Math.pow(2D, (double) (aStack.stackSize - 13) / 12D) : 1.0F) - .setIdentifier(tString) - .setPosition(aX, aY, aZ) - .run(); - } - } - - public static int hideValue = 0; - - /** - *

- * Client tick counter that is set to 5 on hiding pipes and covers. - *

- *

- * It triggers a texture update next client tick when reaching 4, with provision for 3 more update tasks, spreading - * client change detection related work and network traffic on different ticks, until it reaches 0. - *

- */ - public static int changeDetected = 0; - - private static int shouldHeldItemHideThings() { - try { - final EntityPlayer player = Minecraft.getMinecraft().thePlayer; - if (player == null) return 0; - final ItemStack tCurrentItem = player.getCurrentEquippedItem(); - if (tCurrentItem == null) return 0; - final int[] ids = OreDictionary.getOreIDs(tCurrentItem); - int hide = 0; - for (int i : ids) { - if (OreDictionary.getOreName(i) - .equals("craftingToolSolderingIron")) { - hide |= 0x1; - break; - } - } - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList) - || GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList) - || GT_Utility.isStackInList(tCurrentItem, GregTech_API.sHardHammerList) - || GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSoftHammerList) - || GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList) - || GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList) - || GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCrowbarList) - || GregTech_API.sCovers.containsKey(new GT_ItemStack(tCurrentItem)) - || (tCurrentItem.getItem() instanceof GT_Item_Machines - && GregTech_API.METATILEENTITIES[tCurrentItem.getItemDamage()] instanceof MetaPipeEntity - && player.isSneaking())) { - hide |= 0x2; - } - return hide; - } catch (Exception e) { - return 0; - } - } - - public static void recieveChunkPollutionPacket(ChunkCoordIntPair chunk, int pollution) { - mPollutionRenderer.processPacket(chunk, pollution); - } -} diff --git a/src/main/java/gregtech/common/GT_DummyWorld.java b/src/main/java/gregtech/common/GT_DummyWorld.java deleted file mode 100644 index d394ad3703..0000000000 --- a/src/main/java/gregtech/common/GT_DummyWorld.java +++ /dev/null @@ -1,138 +0,0 @@ -package gregtech.common; - -import java.io.File; - -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.profiler.Profiler; -import net.minecraft.world.World; -import net.minecraft.world.WorldProvider; -import net.minecraft.world.WorldSettings; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraft.world.chunk.IChunkProvider; -import net.minecraft.world.chunk.storage.IChunkLoader; -import net.minecraft.world.storage.IPlayerFileData; -import net.minecraft.world.storage.ISaveHandler; -import net.minecraft.world.storage.WorldInfo; - -public class GT_DummyWorld extends World { - - public GT_IteratorRandom mRandom = new GT_IteratorRandom(); - public ItemStack mLastSetBlock = null; - - public GT_DummyWorld(ISaveHandler saveHandler, String name, WorldProvider worldProvider, - WorldSettings worldSettings, Profiler profiler) { - super(saveHandler, name, worldSettings, worldProvider, profiler); - this.rand = this.mRandom; - } - - public GT_DummyWorld() { - this(new ISaveHandler() { - - @Override - public void saveWorldInfoWithPlayer(WorldInfo worldInfo, NBTTagCompound nbtTagCompound) {} - - @Override - public void saveWorldInfo(WorldInfo worldInfo) {} - - @Override - public WorldInfo loadWorldInfo() { - return null; - } - - @Override - public IPlayerFileData getSaveHandler() { - return null; - } - - @Override - public File getMapFileFromName(String mapName) { - return null; - } - - @Override - public IChunkLoader getChunkLoader(WorldProvider worldProvider) { - return null; - } - - @Override - public void flush() {} - - @Override - public void checkSessionLock() {} - - @Override - public String getWorldDirectoryName() { - return null; - } - - @Override - public File getWorldDirectory() { - return null; - } - }, "DUMMY_DIMENSION", null, new WorldSettings(new WorldInfo(new NBTTagCompound())), new Profiler()); - } - - @Override - protected IChunkProvider createChunkProvider() { - return null; - } - - @Override - public Entity getEntityByID(int aEntityID) { - return null; - } - - @Override - public boolean setBlock(int aX, int aY, int aZ, Block aBlock, int aMeta, int aFlags) { - this.mLastSetBlock = new ItemStack(aBlock, 1, aMeta); - return true; - } - - @Override - public float getSunBrightnessFactor(float p_72967_1_) { - return 1.0F; - } - - @Override - public BiomeGenBase getBiomeGenForCoords(int aX, int aZ) { - if ((aX >= 16) && (aZ >= 16) && (aX < 32) && (aZ < 32)) { - return BiomeGenBase.plains; - } - return BiomeGenBase.ocean; - } - - @Override - public int getFullBlockLightValue(int aX, int aY, int aZ) { - return 10; - } - - @Override - public Block getBlock(int aX, int aY, int aZ) { - if ((aX >= 16) && (aZ >= 16) && (aX < 32) && (aZ < 32)) { - return aY == 64 ? Blocks.grass : Blocks.air; - } - return Blocks.air; - } - - @Override - public int getBlockMetadata(int aX, int aY, int aZ) { - return 0; - } - - @Override - public boolean canBlockSeeTheSky(int aX, int aY, int aZ) { - if ((aX >= 16) && (aZ >= 16) && (aX < 32) && (aZ < 32)) { - return aY > 64; - } - return true; - } - - @Override - protected int func_152379_p() { - return 0; - } -} diff --git a/src/main/java/gregtech/common/GT_IteratorRandom.java b/src/main/java/gregtech/common/GT_IteratorRandom.java deleted file mode 100644 index addce0a456..0000000000 --- a/src/main/java/gregtech/common/GT_IteratorRandom.java +++ /dev/null @@ -1,17 +0,0 @@ -package gregtech.common; - -import java.util.Random; - -public class GT_IteratorRandom extends Random { - - private static final long serialVersionUID = 1L; - public int mIterationStep = 2147483647; - - @Override - public int nextInt(int aParameter) { - if ((this.mIterationStep == 0) || (this.mIterationStep > aParameter)) { - this.mIterationStep = aParameter; - } - return --this.mIterationStep; - } -} diff --git a/src/main/java/gregtech/common/GT_Network.java b/src/main/java/gregtech/common/GT_Network.java deleted file mode 100644 index bf5826e9ae..0000000000 --- a/src/main/java/gregtech/common/GT_Network.java +++ /dev/null @@ -1,154 +0,0 @@ -package gregtech.common; - -import static gregtech.GT_Mod.GT_FML_LOGGER; - -import java.util.EnumMap; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; - -import com.google.common.io.ByteArrayDataInput; -import com.google.common.io.ByteStreams; - -import cpw.mods.fml.common.network.FMLEmbeddedChannel; -import cpw.mods.fml.common.network.FMLOutboundHandler; -import cpw.mods.fml.common.network.NetworkRegistry; -import cpw.mods.fml.common.network.internal.FMLProxyPacket; -import cpw.mods.fml.relauncher.Side; -import gregtech.api.enums.GT_Values; -import gregtech.api.net.GT_Packet; -import gregtech.api.net.GT_PacketTypes; -import gregtech.api.net.GT_Packet_New; -import gregtech.api.net.IGT_NetworkHandler; -import io.netty.buffer.ByteBuf; -import io.netty.buffer.Unpooled; -import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.SimpleChannelInboundHandler; -import io.netty.handler.codec.MessageToMessageCodec; - -@ChannelHandler.Sharable -@SuppressWarnings("deprecation") -public class GT_Network extends MessageToMessageCodec implements IGT_NetworkHandler { - - private final EnumMap mChannel; - private final GT_Packet[] mSubChannels; - - public GT_Network() { - this("GregTech", GT_PacketTypes.referencePackets()); - } - - public GT_Network(String channelName, GT_Packet_New... packetTypes) { - this.mChannel = NetworkRegistry.INSTANCE.newChannel(channelName, this, new HandlerShared()); - final int lastPId = packetTypes[packetTypes.length - 1].getPacketID(); - this.mSubChannels = new GT_Packet[lastPId + 1]; - for (GT_Packet packetType : packetTypes) { - final int pId = packetType.getPacketID(); - if (this.mSubChannels[pId] == null) this.mSubChannels[pId] = packetType; - else throw new IllegalArgumentException("Duplicate Packet ID! " + pId); - } - } - - @Override - protected void encode(ChannelHandlerContext aContext, GT_Packet aPacket, List aOutput) { - final ByteBuf tBuf = Unpooled.buffer() - .writeByte(aPacket.getPacketID()); - aPacket.encode(tBuf); - aOutput.add( - new FMLProxyPacket( - tBuf, - aContext.channel() - .attr(NetworkRegistry.FML_CHANNEL) - .get())); - } - - @Override - protected void decode(ChannelHandlerContext aContext, FMLProxyPacket aPacket, List aOutput) { - final ByteArrayDataInput aData = ByteStreams.newDataInput( - aPacket.payload() - .array()); - final GT_Packet tPacket = this.mSubChannels[aData.readByte()].decode(aData); - tPacket.setINetHandler(aPacket.handler()); - aOutput.add(tPacket); - } - - @Override - public void sendToPlayer(GT_Packet aPacket, EntityPlayerMP aPlayer) { - if (aPacket == null) { - GT_FML_LOGGER.info("packet null"); - return; - } - if (aPlayer == null) { - GT_FML_LOGGER.info("player null"); - return; - } - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGET) - .set(FMLOutboundHandler.OutboundTarget.PLAYER); - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) - .set(aPlayer); - this.mChannel.get(Side.SERVER) - .writeAndFlush(aPacket); - } - - @Override - public void sendToAllAround(GT_Packet aPacket, NetworkRegistry.TargetPoint aPosition) { - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGET) - .set(FMLOutboundHandler.OutboundTarget.ALLAROUNDPOINT); - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGETARGS) - .set(aPosition); - this.mChannel.get(Side.SERVER) - .writeAndFlush(aPacket); - } - - @Override - public void sendToAll(GT_Packet aPacket) { - this.mChannel.get(Side.SERVER) - .attr(FMLOutboundHandler.FML_MESSAGETARGET) - .set(FMLOutboundHandler.OutboundTarget.ALL); - this.mChannel.get(Side.SERVER) - .writeAndFlush(aPacket); - } - - @Override - public void sendToServer(GT_Packet aPacket) { - this.mChannel.get(Side.CLIENT) - .attr(FMLOutboundHandler.FML_MESSAGETARGET) - .set(FMLOutboundHandler.OutboundTarget.TOSERVER); - this.mChannel.get(Side.CLIENT) - .writeAndFlush(aPacket); - } - - @Override - public void sendPacketToAllPlayersInRange(World aWorld, GT_Packet aPacket, int aX, int aZ) { - if (!aWorld.isRemote) { - for (Object tObject : aWorld.playerEntities) { - if (!(tObject instanceof EntityPlayerMP tPlayer)) { - break; - } - Chunk tChunk = aWorld.getChunkFromBlockCoords(aX, aZ); - if (tPlayer.getServerForPlayer() - .getPlayerManager() - .isPlayerWatchingChunk(tPlayer, tChunk.xPosition, tChunk.zPosition)) { - sendToPlayer(aPacket, tPlayer); - } - } - } - } - - @ChannelHandler.Sharable - static final class HandlerShared extends SimpleChannelInboundHandler { - - @Override - protected void channelRead0(ChannelHandlerContext ctx, GT_Packet aPacket) { - final EntityPlayer aPlayer = GT_Values.GT.getThePlayer(); - aPacket.process(aPlayer == null ? null : aPlayer.worldObj); - } - } -} diff --git a/src/main/java/gregtech/common/GT_PlayerActivityLogger.java b/src/main/java/gregtech/common/GT_PlayerActivityLogger.java deleted file mode 100644 index c60378ca5e..0000000000 --- a/src/main/java/gregtech/common/GT_PlayerActivityLogger.java +++ /dev/null @@ -1,34 +0,0 @@ -package gregtech.common; - -import java.util.ArrayList; - -import gregtech.GT_Mod; -import gregtech.api.util.GT_Log; - -public class GT_PlayerActivityLogger implements Runnable { - - @Override - public void run() { - try { - ArrayList buffer = new ArrayList<>(); - for (;;) { - if (GT_Log.pal == null) { - return; - } - String tLastOutput = ""; - // Block on first element for efficiency - buffer.add(GT_Mod.gregtechproxy.mBufferedPlayerActivity.take()); - GT_Mod.gregtechproxy.mBufferedPlayerActivity.drainTo(buffer); - for (String output : buffer) { - if (!output.equals(tLastOutput)) { - GT_Log.pal.println(output); - tLastOutput = output; - } - } - buffer.clear(); - // TODO: swap from sleep to event bus - Thread.sleep(10000L); - } - } catch (Throwable ignored) {} - } -} diff --git a/src/main/java/gregtech/common/GT_Pollution.java b/src/main/java/gregtech/common/GT_Pollution.java deleted file mode 100644 index 6a2b1e1082..0000000000 --- a/src/main/java/gregtech/common/GT_Pollution.java +++ /dev/null @@ -1,507 +0,0 @@ -package gregtech.common; - -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; -import static gregtech.common.GT_Proxy.dimensionWisePollution; - -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.function.Consumer; - -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.ChunkPosition; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.world.ChunkDataEvent; -import net.minecraftforge.event.world.ChunkWatchEvent; -import net.minecraftforge.event.world.WorldEvent; - -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent; -import cpw.mods.fml.common.network.NetworkRegistry; -import gregtech.GT_Mod; -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.ICleanroom; -import gregtech.api.interfaces.ICleanroomReceiver; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.net.GT_Packet_Pollution; -import gregtech.api.util.GT_ChunkAssociatedData; -import gregtech.api.util.GT_Utility; -import gregtech.common.render.GT_PollutionRenderer; - -public class GT_Pollution { - - private static final Storage STORAGE = new Storage(); - /** - * Pollution dispersion until effects start: Calculation: ((Limit * 0.01) + 2000) * (4 <- spreading rate) - *

- * SMOG(500k) 466.7 pollution/sec Poison(750k) 633,3 pollution/sec Dying Plants(1mio) 800 pollution/sec Sour - * Rain(1.5mio) 1133.3 pollution/sec - *

- * Pollution producers (pollution/sec) Bronze Boiler(20) Lava Boiler(20) High Pressure Boiler(20) Bronze Blast - * Furnace(50) Diesel Generator(40/80/160) Gas Turbine(20/40/80) Charcoal Pile(100) - *

- * Large Diesel Engine(320) Electric Blast Furnace(100) Implosion Compressor(2000) Large Boiler(240) Large Gas - * Turbine(160) Multi Smelter(100) Pyrolyse Oven(400) - *

- * Machine Explosion(100,000) - *

- * Other Random Shit: lots and lots - *

- * Muffler Hatch Pollution reduction: ** inaccurate ** LV (0%), MV (30%), HV (52%), EV (66%), IV (76%), LuV (84%), - * ZPM (89%), UV (92%), MAX (95%) - */ - private List pollutionList = new ArrayList<>(); // chunks left to process in this cycle - - private final Set pollutedChunks = new HashSet<>(); // a global list of all chunks with positive - // pollution - private int operationsPerTick = 0; // how much chunks should be processed in each cycle - private static final short cycleLen = 1200; - private final World world; - private boolean blank = true; - public static int mPlayerPollution; - - private static final int POLLUTIONPACKET_MINVALUE = 1000; - - private static GT_PollutionEventHandler EVENT_HANDLER; - - public GT_Pollution(World world) { - this.world = world; - - if (EVENT_HANDLER == null) { - EVENT_HANDLER = new GT_PollutionEventHandler(); - MinecraftForge.EVENT_BUS.register(EVENT_HANDLER); - } - } - - public static void onWorldTick(TickEvent.WorldTickEvent aEvent) { // called from proxy - // return if pollution disabled - if (!GT_Mod.gregtechproxy.mPollution) return; - if (aEvent.phase == TickEvent.Phase.START) return; - final GT_Pollution pollutionInstance = dimensionWisePollution.get(aEvent.world.provider.dimensionId); - if (pollutionInstance == null) return; - pollutionInstance.tickPollutionInWorld((int) (aEvent.world.getTotalWorldTime() % cycleLen)); - } - - private void tickPollutionInWorld(int aTickID) { // called from method above - // gen data set - if (aTickID == 0 || blank) { - // make a snapshot of what to work on - pollutionList = new ArrayList<>(pollutedChunks); - // set operations per tick - if (pollutionList.size() > 0) operationsPerTick = Math.max(1, pollutionList.size() / cycleLen); - else operationsPerTick = 0; // SANity - blank = false; - } - - for (int chunksProcessed = 0; chunksProcessed < operationsPerTick; chunksProcessed++) { - if (pollutionList.size() == 0) break; // no more stuff to do - ChunkCoordIntPair actualPos = pollutionList.remove(pollutionList.size() - 1); // faster - // get pollution - ChunkData currentData = STORAGE.get(world, actualPos); - int tPollution = currentData.getAmount(); - // remove some - tPollution = (int) (0.9945f * tPollution); - - if (tPollution > 400000) { // Spread Pollution - - ChunkCoordIntPair[] tNeighbors = new ChunkCoordIntPair[4]; // array is faster - tNeighbors[0] = (new ChunkCoordIntPair(actualPos.chunkXPos + 1, actualPos.chunkZPos)); - tNeighbors[1] = (new ChunkCoordIntPair(actualPos.chunkXPos - 1, actualPos.chunkZPos)); - tNeighbors[2] = (new ChunkCoordIntPair(actualPos.chunkXPos, actualPos.chunkZPos + 1)); - tNeighbors[3] = (new ChunkCoordIntPair(actualPos.chunkXPos, actualPos.chunkZPos - 1)); - for (ChunkCoordIntPair neighborPosition : tNeighbors) { - ChunkData neighbor = STORAGE.get(world, neighborPosition); - int neighborPollution = neighbor.getAmount(); - if (neighborPollution * 6 < tPollution * 5) { // MATHEMATICS... - int tDiff = tPollution - neighborPollution; - tDiff = tDiff / 20; - neighborPollution = GT_Utility.safeInt((long) neighborPollution + tDiff); // tNPol += tDiff; - tPollution -= tDiff; - setChunkPollution(neighborPosition, neighborPollution); - } - } - - // Create Pollution effects - // Smog filter TODO - if (tPollution > GT_Mod.gregtechproxy.mPollutionSmogLimit) { - AxisAlignedBB chunk = AxisAlignedBB.getBoundingBox( - actualPos.chunkXPos << 4, - 0, - actualPos.chunkZPos << 4, - (actualPos.chunkXPos << 4) + 16, - 256, - (actualPos.chunkZPos << 4) + 16); - List tEntitys = world.getEntitiesWithinAABB(EntityLivingBase.class, chunk); - for (EntityLivingBase tEnt : tEntitys) { - if (tEnt instanceof EntityPlayerMP && ((EntityPlayerMP) tEnt).capabilities.isCreativeMode) - continue; - if (!(GT_Utility.isWearingFullGasHazmat(tEnt))) { - switch (XSTR_INSTANCE.nextInt(3)) { - default: - tEnt.addPotionEffect( - new PotionEffect( - Potion.digSlowdown.id, - Math.min(tPollution / 1000, 1000), - tPollution / 400000)); - case 1: - tEnt.addPotionEffect( - new PotionEffect( - Potion.weakness.id, - Math.min(tPollution / 1000, 1000), - tPollution / 400000)); - case 2: - tEnt.addPotionEffect( - new PotionEffect( - Potion.moveSlowdown.id, - Math.min(tPollution / 1000, 1000), - tPollution / 400000)); - } - } - } - - // Poison effects - if (tPollution > GT_Mod.gregtechproxy.mPollutionPoisonLimit) { - for (EntityLivingBase tEnt : tEntitys) { - if (tEnt instanceof EntityPlayerMP && ((EntityPlayerMP) tEnt).capabilities.isCreativeMode) - continue; - if (!GT_Utility.isWearingFullGasHazmat(tEnt)) { - switch (XSTR_INSTANCE.nextInt(4)) { - default: - tEnt.addPotionEffect(new PotionEffect(Potion.hunger.id, tPollution / 500000)); - case 1: - tEnt.addPotionEffect( - new PotionEffect( - Potion.confusion.id, - Math.min(tPollution / 2000, 1000), - 1)); - case 2: - tEnt.addPotionEffect( - new PotionEffect( - Potion.poison.id, - Math.min(tPollution / 4000, 1000), - tPollution / 500000)); - case 3: - tEnt.addPotionEffect( - new PotionEffect( - Potion.blindness.id, - Math.min(tPollution / 2000, 1000), - 1)); - } - } - } - - // killing plants - if (tPollution > GT_Mod.gregtechproxy.mPollutionVegetationLimit) { - int f = 20; - for (; f < (tPollution / 25000); f++) { - int x = (actualPos.chunkXPos << 4) + XSTR_INSTANCE.nextInt(16); - int y = 60 + (-f + XSTR_INSTANCE.nextInt(f * 2 + 1)); - int z = (actualPos.chunkZPos << 4) + XSTR_INSTANCE.nextInt(16); - damageBlock(world, x, y, z, tPollution > GT_Mod.gregtechproxy.mPollutionSourRainLimit); - } - } - } - } - } - // Write new pollution to Hashmap !!! - setChunkPollution(actualPos, tPollution); - - // Send new value to players nearby - if (tPollution > POLLUTIONPACKET_MINVALUE) { - NetworkRegistry.TargetPoint point = new NetworkRegistry.TargetPoint( - world.provider.dimensionId, - (actualPos.chunkXPos << 4), - 64, - (actualPos.chunkZPos << 4), - 256); - GT_Values.NW.sendToAllAround(new GT_Packet_Pollution(actualPos, tPollution), point); - } - } - } - - private void setChunkPollution(ChunkCoordIntPair coord, int pollution) { - mutatePollution(world, coord.chunkXPos, coord.chunkZPos, c -> c.setAmount(pollution), pollutedChunks); - } - - private static void damageBlock(World world, int x, int y, int z, boolean sourRain) { - if (world.isRemote) return; - Block tBlock = world.getBlock(x, y, z); - int tMeta = world.getBlockMetadata(x, y, z); - if (tBlock == Blocks.air || tBlock == Blocks.stone || tBlock == Blocks.sand || tBlock == Blocks.deadbush) - return; - - if (tBlock == Blocks.leaves || tBlock == Blocks.leaves2 || tBlock.getMaterial() == Material.leaves) - world.setBlockToAir(x, y, z); - if (tBlock == Blocks.reeds) { - tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0); - world.setBlockToAir(x, y, z); - } - if (tBlock == Blocks.tallgrass) world.setBlock(x, y, z, Blocks.deadbush); - if (tBlock == Blocks.vine) { - tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0); - world.setBlockToAir(x, y, z); - } - if (tBlock == Blocks.waterlily || tBlock == Blocks.wheat - || tBlock == Blocks.cactus - || tBlock.getMaterial() == Material.cactus - || tBlock == Blocks.melon_block - || tBlock == Blocks.melon_stem) { - tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0); - world.setBlockToAir(x, y, z); - } - if (tBlock == Blocks.red_flower || tBlock == Blocks.yellow_flower - || tBlock == Blocks.carrots - || tBlock == Blocks.potatoes - || tBlock == Blocks.pumpkin - || tBlock == Blocks.pumpkin_stem) { - tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0); - world.setBlockToAir(x, y, z); - } - if (tBlock == Blocks.sapling || tBlock.getMaterial() == Material.plants) - world.setBlock(x, y, z, Blocks.deadbush); - if (tBlock == Blocks.cocoa) { - tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0); - world.setBlockToAir(x, y, z); - } - if (tBlock == Blocks.mossy_cobblestone) world.setBlock(x, y, z, Blocks.cobblestone); - if (tBlock == Blocks.grass || tBlock.getMaterial() == Material.grass) world.setBlock(x, y, z, Blocks.dirt); - if (tBlock == Blocks.farmland || tBlock == Blocks.dirt) { - world.setBlock(x, y, z, Blocks.sand); - } - - if (sourRain && world.isRaining() - && (tBlock == Blocks.gravel || tBlock == Blocks.cobblestone) - && world.getBlock(x, y + 1, z) == Blocks.air - && world.canBlockSeeTheSky(x, y, z)) { - if (tBlock == Blocks.cobblestone) { - world.setBlock(x, y, z, Blocks.gravel); - } else { - world.setBlock(x, y, z, Blocks.sand); - } - } - } - - private static GT_Pollution getPollutionManager(World world) { - return dimensionWisePollution.computeIfAbsent(world.provider.dimensionId, i -> new GT_Pollution(world)); - } - - /** @see #addPollution(TileEntity, int) */ - public static void addPollution(IGregTechTileEntity te, int aPollution) { - addPollution((TileEntity) te, aPollution); - } - - /** - * Also pollutes cleanroom if {@code te} is an instance of {@link ICleanroomReceiver}. - * - * @see #addPollution(World, int, int, int) - */ - public static void addPollution(TileEntity te, int aPollution) { - if (!GT_Mod.gregtechproxy.mPollution || aPollution == 0 || te.getWorldObj().isRemote) return; - - if (aPollution > 0 && te instanceof ICleanroomReceiver receiver) { - ICleanroom cleanroom = receiver.getCleanroom(); - if (cleanroom != null && cleanroom.isValidCleanroom()) { - cleanroom.pollute(); - } - } - - addPollution(te.getWorldObj(), te.xCoord >> 4, te.zCoord >> 4, aPollution); - } - - /** @see #addPollution(World, int, int, int) */ - public static void addPollution(Chunk ch, int aPollution) { - addPollution(ch.worldObj, ch.xPosition, ch.zPosition, aPollution); - } - - /** - * Add some pollution to given chunk. Can pass in negative to remove pollution. Will clamp the final pollution - * number to 0 if it would be changed into negative. - * - * @param w world to modify. do nothing if it's a client world - * @param chunkX chunk coordinate X, i.e. blockX >> 4 - * @param chunkZ chunk coordinate Z, i.e. blockZ >> 4 - * @param aPollution desired delta. Positive means the pollution in chunk would go higher. - */ - public static void addPollution(World w, int chunkX, int chunkZ, int aPollution) { - if (!GT_Mod.gregtechproxy.mPollution || aPollution == 0 || w.isRemote) return; - mutatePollution(w, chunkX, chunkZ, d -> d.changeAmount(aPollution), null); - } - - private static void mutatePollution(World world, int x, int z, Consumer mutator, - @Nullable Set chunks) { - ChunkData data = STORAGE.get(world, x, z); - boolean hadPollution = data.getAmount() > 0; - mutator.accept(data); - boolean hasPollution = data.getAmount() > 0; - if (hasPollution != hadPollution) { - if (chunks == null) chunks = getPollutionManager(world).pollutedChunks; - if (hasPollution) chunks.add(new ChunkCoordIntPair(x, z)); - else chunks.remove(new ChunkCoordIntPair(x, z)); - } - } - - /** @see #getPollution(World, int, int) */ - public static int getPollution(IGregTechTileEntity te) { - return getPollution(te.getWorld(), te.getXCoord() >> 4, te.getZCoord() >> 4); - } - - /** @see #getPollution(World, int, int) */ - public static int getPollution(Chunk ch) { - return getPollution(ch.worldObj, ch.xPosition, ch.zPosition); - } - - /** - * Get the pollution in specified chunk - * - * @param w world to look in. can be a client world, but that limits the knowledge to what server side send us - * @param chunkX chunk coordinate X, i.e. blockX >> 4 - * @param chunkZ chunk coordinate Z, i.e. blockZ >> 4 - * @return pollution amount. may be 0 if pollution is disabled, or if it's a client world and server did not send us - * info about this chunk - */ - public static int getPollution(World w, int chunkX, int chunkZ) { - if (!GT_Mod.gregtechproxy.mPollution) return 0; - if (w.isRemote) - // it really should be querying the client side stuff instead - return GT_PollutionRenderer.getKnownPollution(chunkX << 4, chunkZ << 4); - return STORAGE.get(w, chunkX, chunkZ) - .getAmount(); - } - - @Deprecated - public static int getPollution(ChunkCoordIntPair aCh, int aDim) { - return getPollution(DimensionManager.getWorld(aDim), aCh.chunkXPos, aCh.chunkZPos); - } - - public static boolean hasPollution(Chunk ch) { - if (!GT_Mod.gregtechproxy.mPollution) return false; - return STORAGE.isCreated(ch.worldObj, ch.getChunkCoordIntPair()) && STORAGE.get(ch) - .getAmount() > 0; - } - - // Add compatibility with old code - @Deprecated /* Don't use it... too weird way of passing position */ - public static void addPollution(World aWorld, ChunkPosition aPos, int aPollution) { - // The abuse of ChunkPosition to store block position and dim... - // is just bad especially when that is both used to store ChunkPos and BlockPos depending on context - addPollution(aWorld.getChunkFromBlockCoords(aPos.chunkPosX, aPos.chunkPosZ), aPollution); - } - - static void migrate(ChunkDataEvent.Load e) { - addPollution( - e.getChunk(), - e.getData() - .getInteger("GTPOLLUTION")); - } - - public static class GT_PollutionEventHandler { - - @SubscribeEvent - public void chunkWatch(ChunkWatchEvent.Watch event) { - if (!GT_Mod.gregtechproxy.mPollution) return; - World world = event.player.worldObj; - if (STORAGE.isCreated(world, event.chunk)) { - int pollution = STORAGE.get(world, event.chunk) - .getAmount(); - if (pollution > POLLUTIONPACKET_MINVALUE) - GT_Values.NW.sendToPlayer(new GT_Packet_Pollution(event.chunk, pollution), event.player); - } - } - - @SubscribeEvent - public void onWorldLoad(WorldEvent.Load e) { - // super class loads everything lazily. We force it to load them all. - if (!e.world.isRemote) STORAGE.loadAll(e.world); - } - } - - @ParametersAreNonnullByDefault - private static final class Storage extends GT_ChunkAssociatedData { - - private Storage() { - super("Pollution", ChunkData.class, 64, (byte) 0, false); - } - - @Override - protected void writeElement(DataOutput output, ChunkData element, World world, int chunkX, int chunkZ) - throws IOException { - output.writeInt(element.getAmount()); - } - - @Override - protected ChunkData readElement(DataInput input, int version, World world, int chunkX, int chunkZ) - throws IOException { - if (version != 0) throw new IOException("Region file corrupted"); - ChunkData data = new ChunkData(input.readInt()); - if (data.getAmount() > 0) - getPollutionManager(world).pollutedChunks.add(new ChunkCoordIntPair(chunkX, chunkZ)); - return data; - } - - @Override - protected ChunkData createElement(World world, int chunkX, int chunkZ) { - return new ChunkData(); - } - - @Override - public void loadAll(World w) { - super.loadAll(w); - } - - public boolean isCreated(World world, ChunkCoordIntPair coord) { - return isCreated(world.provider.dimensionId, coord.chunkXPos, coord.chunkZPos); - } - } - - private static final class ChunkData implements GT_ChunkAssociatedData.IData { - - public int amount; - - private ChunkData() { - this(0); - } - - private ChunkData(int amount) { - this.amount = Math.max(0, amount); - } - - /** - * Current pollution amount. - */ - public int getAmount() { - return amount; - } - - public void setAmount(int amount) { - this.amount = Math.max(amount, 0); - } - - public void changeAmount(int delta) { - this.amount = Math.max(GT_Utility.safeInt(amount + (long) delta, 0), 0); - } - - @Override - public boolean isSameAsDefault() { - return amount == 0; - } - } -} diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java deleted file mode 100644 index 40fa1d1548..0000000000 --- a/src/main/java/gregtech/common/GT_Proxy.java +++ /dev/null @@ -1,2899 +0,0 @@ -package gregtech.common; - -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.FluidState.GAS; -import static gregtech.api.enums.FluidState.LIQUID; -import static gregtech.api.enums.FluidState.MOLTEN; -import static gregtech.api.enums.FluidState.PLASMA; -import static gregtech.api.enums.GT_Values.W; -import static gregtech.api.enums.GT_Values.debugEntityCramming; -import static gregtech.api.enums.Mods.AdvancedSolarPanel; -import static gregtech.api.enums.Mods.AppliedEnergistics2; -import static gregtech.api.enums.Mods.Avaritia; -import static gregtech.api.enums.Mods.BetterLoadingScreen; -import static gregtech.api.enums.Mods.DraconicEvolution; -import static gregtech.api.enums.Mods.ElectroMagicTools; -import static gregtech.api.enums.Mods.EnderIO; -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.enums.Mods.GTPlusPlus; -import static gregtech.api.enums.Mods.GalacticraftCore; -import static gregtech.api.enums.Mods.GalaxySpace; -import static gregtech.api.enums.Mods.GraviSuite; -import static gregtech.api.enums.Mods.GregTech; -import static gregtech.api.enums.Mods.IguanaTweaksTinkerConstruct; -import static gregtech.api.enums.Mods.Names; -import static gregtech.api.enums.Mods.Railcraft; -import static gregtech.api.enums.Mods.TaintedMagic; -import static gregtech.api.enums.Mods.Thaumcraft; -import static gregtech.api.enums.Mods.ThaumicBoots; -import static gregtech.api.enums.Mods.ThaumicTinkerer; -import static gregtech.api.enums.Mods.TinkerConstruct; -import static gregtech.api.enums.Mods.TwilightForest; -import static gregtech.api.enums.Mods.WitchingGadgets; -import static gregtech.api.recipe.RecipeMaps.crackingRecipes; -import static gregtech.api.recipe.RecipeMaps.cutterRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_Util.LAST_BROKEN_TILEENTITY; -import static net.minecraftforge.fluids.FluidRegistry.getFluidStack; - -import java.io.File; -import java.text.DateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Date; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.locks.ReentrantLock; -import java.util.stream.Collectors; - -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.monster.EntityEnderman; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemBow; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MathHelper; -import net.minecraft.util.ResourceLocation; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.World; -import net.minecraft.world.WorldSettings.GameType; -import net.minecraft.world.gen.feature.WorldGenMinable; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.event.entity.EntityJoinWorldEvent; -import net.minecraftforge.event.entity.living.EnderTeleportEvent; -import net.minecraftforge.event.entity.living.LivingEvent.LivingUpdateEvent; -import net.minecraftforge.event.entity.player.ArrowLooseEvent; -import net.minecraftforge.event.entity.player.ArrowNockEvent; -import net.minecraftforge.event.entity.player.ItemTooltipEvent; -import net.minecraftforge.event.entity.player.PlayerEvent; -import net.minecraftforge.event.entity.player.PlayerInteractEvent; -import net.minecraftforge.event.terraingen.OreGenEvent; -import net.minecraftforge.event.world.BlockEvent; -import net.minecraftforge.event.world.ChunkDataEvent; -import net.minecraftforge.event.world.WorldEvent; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; -import net.minecraftforge.oredict.RecipeSorter; -import net.minecraftforge.oredict.ShapedOreRecipe; -import net.minecraftforge.oredict.ShapelessOreRecipe; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.IFuelHandler; -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.ModContainer; -import cpw.mods.fml.common.ProgressManager; -import cpw.mods.fml.common.eventhandler.Event.Result; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent; -import cpw.mods.fml.common.network.FMLNetworkEvent; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.FluidState; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.ManualOreDictTweaks; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OreDictNames; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; -import gregtech.api.enums.TierEU; -import gregtech.api.enums.ToolDictNames; -import gregtech.api.fluid.GT_FluidFactory; -import gregtech.api.interfaces.IBlockOnWalkOver; -import gregtech.api.interfaces.IProjectileItem; -import gregtech.api.interfaces.IToolStats; -import gregtech.api.interfaces.internal.IGT_Mod; -import gregtech.api.interfaces.internal.IThaumcraftCompat; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.net.GT_Packet_MusicSystemData; -import gregtech.api.objects.GT_ChunkManager; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_UO_DimensionList; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeCategory; -import gregtech.api.recipe.RecipeCategorySetting; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_BlockMap; -import gregtech.api.util.GT_CLS_Compat; -import gregtech.api.util.GT_ChunkAssociatedData; -import gregtech.api.util.GT_ClientPreference; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_MusicSystem; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_RecipeRegistrator; -import gregtech.api.util.GT_Shaped_Recipe; -import gregtech.api.util.GT_Shapeless_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder; -import gregtech.common.config.opstuff.ConfigGeneral; -import gregtech.common.items.GT_MetaGenerated_Item_98; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.items.ID_MetaTool_01; -import gregtech.common.misc.GlobalEnergyWorldSavedData; -import gregtech.common.misc.GlobalMetricsCoverDatabase; -import gregtech.common.misc.spaceprojects.SpaceProjectWorldSavedData; -import gregtech.common.tileentities.machines.multi.drone.GT_MetaTileEntity_DroneCentre; - -public abstract class GT_Proxy implements IGT_Mod, IFuelHandler { - - private static final EnumSet PREVENTED_ORES = EnumSet.of( - OreGenEvent.GenerateMinable.EventType.COAL, - OreGenEvent.GenerateMinable.EventType.IRON, - OreGenEvent.GenerateMinable.EventType.GOLD, - OreGenEvent.GenerateMinable.EventType.DIAMOND, - OreGenEvent.GenerateMinable.EventType.REDSTONE, - OreGenEvent.GenerateMinable.EventType.LAPIS, - OreGenEvent.GenerateMinable.EventType.QUARTZ); - public final HashSet mRegisteredOres = new HashSet<>(10000); - public final ArrayList mSoundNames = new ArrayList<>(); - public final ArrayList mSoundItems = new ArrayList<>(); - public final ArrayList mSoundCounts = new ArrayList<>(); - private final Collection mEvents = new HashSet<>(); - private final Collection mIgnoredItems = new HashSet<>( - Arrays.asList( - "itemGhastTear", - "itemFlint", - "itemClay", - "itemBucketSaltWater", - "itemBucketFreshWater", - "itemBucketWater", - "itemRock", - "itemReed", - "itemArrow", - "itemSaw", - "itemKnife", - "itemHammer", - "itemChisel", - "itemRubber", - "itemEssence", - "itemIlluminatedPanel", - "itemSkull", - "itemRawRubber", - "itemBacon", - "itemJetpackAccelerator", - "itemLazurite", - "itemIridium", - "itemTear", - "itemClaw", - "itemFertilizer", - "itemTar", - "itemSlimeball", - "itemCoke", - "itemBeeswax", - "itemBeeQueen", - "itemForcicium", - "itemForcillium", - "itemRoyalJelly", - "itemHoneydew", - "itemHoney", - "itemPollen", - "itemReedTypha", - "itemSulfuricAcid", - "itemPotash", - "itemCompressedCarbon", - "itemBitumen", - "itemBioFuel", - "itemCokeSugar", - "itemCokeCactus", - "itemCharcoalSugar", - "itemCharcoalCactus", - "itemSludge", - "itemEnrichedAlloy", - "itemQuicksilver", - "itemMercury", - "itemOsmium", - "itemUltimateCircuit", - "itemEnergizedStar", - "itemAntimatterMolecule", - "itemAntimatterGlob", - "itemCoal", - "itemBoat", - "itemHerbalMedicineCake", - "itemCakeSponge", - "itemFishandPumpkinCakeSponge", - "itemSoulCleaver", - "itemInstantCake", - "itemWhippingCream", - "itemGlisteningWhippingCream", - "itemCleaver", - "itemHerbalMedicineWhippingCream", - "itemStrangeWhippingCream", - "itemBlazeCleaver", - "itemBakedCakeSponge", - "itemMagmaCake", - "itemGlisteningCake", - "itemOgreCleaver", - "itemFishandPumpkinCake", - "itemMagmaWhippingCream", - "itemMultimeter", - "itemSuperconductor")); - private final Collection mIgnoredNames = new HashSet<>( - Arrays.asList( - "grubBee", - "chainLink", - "candyCane", - "bRedString", - "bVial", - "bFlask", - "anorthositeSmooth", - "migmatiteSmooth", - "slateSmooth", - "travertineSmooth", - "limestoneSmooth", - "orthogneissSmooth", - "marbleSmooth", - "honeyDrop", - "lumpClay", - "honeyEqualssugar", - "flourEqualswheat", - "bluestoneInsulated", - "blockWaterstone", - "blockSand", - "blockTorch", - "blockPumpkin", - "blockClothRock", - "blockStainedHardenedClay", - "blockQuartzPillar", - "blockQuartzChiselled", - "blockSpawner", - "blockCloth", - "mobHead", - "mobEgg", - "enderFlower", - "enderChest", - "clayHardened", - "dayGemMaterial", - "nightGemMaterial", - "snowLayer", - "bPlaceholder", - "hardenedClay", - "eternalLifeEssence", - "sandstone", - "wheatRice", - "transdimBlock", - "bambooBasket", - "lexicaBotania", - "livingwoodTwig", - "redstoneCrystal", - "pestleAndMortar", - "glowstone", - "whiteStone", - "stoneSlab", - "transdimBlock", - "clayBowl", - "clayPlate", - "ceramicBowl", - "ceramicPlate", - "ovenRack", - "clayCup", - "ceramicCup", - "batteryBox", - "transmutationStone", - "torchRedstoneActive", - "coal", - "charcoal", - "cloth", - "cobblestoneSlab", - "stoneBrickSlab", - "cobblestoneWall", - "stoneBrickWall", - "cobblestoneStair", - "stoneBrickStair", - "blockCloud", - "blockDirt", - "blockTyrian", - "blockCarpet", - "blockFft", - "blockLavastone", - "blockHolystone", - "blockConcrete", - "sunnariumPart", - "brSmallMachineCyaniteProcessor", - "meteoriteCoal", - "blockCobble", - "pressOreProcessor", - "crusherOreProcessor", - "grinderOreProcessor", - "blockRubber", - "blockHoney", - "blockHoneydew", - "blockPeat", - "blockRadioactive", - "blockSlime", - "blockCocoa", - "blockSugarCane", - "blockLeather", - "blockClayBrick", - "solarPanelHV", - "cableRedNet", - "stoneBowl", - "crafterWood", - "taintedSoil", - "brickXyEngineering", - "breederUranium", - "wireMill", - "chunkLazurite", - "aluminumNatural", - "aluminiumNatural", - "naturalAluminum", - "naturalAluminium", - "antimatterMilligram", - "antimatterGram", - "strangeMatter", - "coalGenerator", - "electricFurnace", - "unfinishedTank", - "valvePart", - "aquaRegia", - "leatherSeal", - "leatherSlimeSeal", - "hambone", - "slimeball", - "clay", - "enrichedUranium", - "camoPaste", - "antiBlock", - "burntQuartz", - "salmonRaw", - "blockHopper", - "blockEnderObsidian", - "blockIcestone", - "blockMagicWood", - "blockEnderCore", - "blockHeeEndium", - "oreHeeEndPowder", - "oreHeeStardust", - "oreHeeIgneousRock", - "oreHeeInstabilityOrb", - "crystalPureFluix", - "shardNether", - "gemFluorite", - "stickObsidian", - "caveCrystal", - "shardCrystal", - "dyeCrystal", - "shardFire", - "shardWater", - "shardAir", - "shardEarth", - "ingotRefinedIron", - "blockMarble", - "ingotUnstable", - "obsidian", - "dirt", - "gravel", - "grass", - "soulsand", - "paper", - "brick", - "chest")); - private final Collection mInvalidNames = new HashSet<>( - Arrays.asList( - "diamondShard", - "redstoneRoot", - "obsidianStick", - "bloodstoneOre", - "universalCable", - "bronzeTube", - "ironTube", - "netherTube", - "obbyTube", - "infiniteBattery", - "eliteBattery", - "advancedBattery", - "10kEUStore", - "blueDye", - "MonazitOre", - "quartzCrystal", - "whiteLuminiteCrystal", - "darkStoneIngot", - "invisiumIngot", - "demoniteOrb", - "enderGem", - "starconiumGem", - "osmoniumIngot", - "tapaziteGem", - "zectiumIngot", - "foolsRubyGem", - "rubyGem", - "meteoriteGem", - "adamiteShard", - "sapphireGem", - "copperIngot", - "ironStick", - "goldStick", - "diamondStick", - "reinforcedStick", - "draconicStick", - "emeraldStick", - "copperStick", - "tinStick", - "silverStick", - "bronzeStick", - "steelStick", - "leadStick", - "manyullynStick", - "arditeStick", - "cobaltStick", - "aluminiumStick", - "alumiteStick", - "oilsandsOre", - "copperWire", - "superconductorWire", - "sulfuricAcid", - "conveyorBelt", - "ironWire", - "aluminumWire", - "aluminiumWire", - "silverWire", - "tinWire", - "dustSiliconSmall", - "AluminumOre", - "plateHeavyT2", - "blockWool", - "alloyPlateEnergizedHardened", - "gasWood", - "alloyPlateEnergized", - "SilverOre", - "LeadOre", - "TinOre", - "CopperOre", - "silverOre", - "leadOre", - "tinOre", - "copperOre", - "bauxiteOre", - "HSLivingmetalIngot", - "oilMoving", - "oilStill", - "oilBucket", - "petroleumOre", - "dieselFuel", - "diamondNugget", - "planks", - "wood", - "stick", - "sticks", - "naquadah", - "obsidianRod", - "stoneRod", - "thaumiumRod", - "steelRod", - "netherrackRod", - "woodRod", - "ironRod", - "cactusRod", - "flintRod", - "copperRod", - "cobaltRod", - "alumiteRod", - "blueslimeRod", - "arditeRod", - "manyullynRod", - "bronzeRod", - "boneRod", - "slimeRod", - "redalloyBundled", - "bluestoneBundled", - "infusedteslatiteInsulated", - "redalloyInsulated", - "infusedteslatiteBundled")); - private final DateFormat mDateFormat = DateFormat.getInstance(); - public final BlockingQueue mBufferedPlayerActivity = new LinkedBlockingQueue<>(); - public final GT_BlockMap mCTMBlockCache = new GT_BlockMap<>(); - public boolean mDisableVanillaOres = true; - public boolean mAllowSmallBoilerAutomation = false; - public boolean mCraftingUnification = true; - public boolean mInventoryUnification = true; - public boolean mIncreaseDungeonLoot = true; - public boolean mAxeWhenAdventure = true; - public boolean mSurvivalIntoAdventure = false; - public boolean mNerfedWoodPlank = true; - public boolean mNerfedVanillaTools = true; - public boolean mHungerEffect = true; - public boolean mIgnoreTcon = true; - public boolean mAchievements = true; - private boolean isFirstServerWorldTick = true; - private boolean isFirstWorldTick = true; - private boolean mOreDictActivated = false; - public boolean mChangeHarvestLevels = false; - public boolean mGTBees = true; - public boolean mHideUnusedOres = true; - public boolean mPollution = true; - public boolean mExplosionItemDrop = false; - public int mMaxEqualEntitiesAtOneSpot = 3; - public int mFlintChance = 30; - public int mItemDespawnTime = 6000; - public int mUpgradeCount = 4; - public int[] mHarvestLevel = new int[1000]; - public int mGraniteHavestLevel = 3; - public int mMaxHarvestLevel = 7; - public double replicatorExponent = 1.2D; - public int mPollutionSmogLimit = 550000; - public int mPollutionPoisonLimit = 750000; - public int mPollutionVegetationLimit = 1000000; - public int mPollutionSourRainLimit = 2000000; - public int mPollutionOnExplosion = 100000; - public int mPollutionPrimitveBlastFurnacePerSecond = 200; - public int mPollutionEBFPerSecond = 400; - public int mPollutionCharcoalPitPerSecond = 100; - public int mPollutionLargeCombustionEnginePerSecond = 480; - public int mPollutionExtremeCombustionEnginePerSecond = 3840; - public int mPollutionImplosionCompressorPerSecond = 10000; - public int mPollutionLargeBronzeBoilerPerSecond = 1000; - public int mPollutionLargeSteelBoilerPerSecond = 2000; - public int mPollutionLargeTitaniumBoilerPerSecond = 3000; - public int mPollutionLargeTungstenSteelBoilerPerSecond = 4000; - public double mPollutionReleasedByThrottle = 1.0 / 24.0; // divided by 24 because 24 circuit conf - public int mPollutionLargeGasTurbinePerSecond = 300; - public int mPollutionMultiSmelterPerSecond = 400; - public int mPollutionPyrolyseOvenPerSecond = 300; - public int mPollutionSmallCoalBoilerPerSecond = 20; - public int mPollutionHighPressureLavaBoilerPerSecond = 20; - public int mPollutionHighPressureCoalBoilerPerSecond = 30; - public int mPollutionBaseDieselGeneratorPerSecond = 200; - public double[] mPollutionDieselGeneratorReleasedByTier = new double[] { 0.1, 1.0, 0.9, 0.8 }; - public int mPollutionBaseGasTurbinePerSecond = 200; - public double[] mPollutionGasTurbineReleasedByTier = new double[] { 0.1, 1.0, 0.9, 0.8, 0.7, 0.6 }; - public final GT_UO_DimensionList mUndergroundOil = new GT_UO_DimensionList(); - public boolean enableUndergroundGravelGen = true; - public boolean enableUndergroundDirtGen = true; - public int mTicksUntilNextCraftSound = 0; - private World mUniverse = null; - public boolean mEnableAllMaterials = false; - public boolean mEnableCleanroom = true; - public boolean mLowGravProcessing = false; - public boolean mCropNeedBlock = true; - public boolean mAMHInteraction = true; - public boolean mForceFreeFace = true; - public boolean mMixedOreOnlyYieldsTwoThirdsOfPureOre = false; - public boolean mRichOreYieldMultiplier = true; - public boolean mNetherOreYieldMultiplier = true; - public boolean mEndOreYieldMultiplier = true; - public boolean enableBlackGraniteOres = true; - public boolean enableRedGraniteOres = true; - public boolean enableMarbleOres = true; - public boolean enableBasaltOres = true; - public boolean gt6Pipe = true; - public boolean gt6Cable = true; - public boolean ic2EnergySourceCompat = true; - public boolean costlyCableConnection = false; - public boolean crashOnNullRecipeInput = false; - - public enum OreDropSystem { - Block, - PerDimBlock, - UnifiedBlock, - FortuneItem, - Item - } - - public OreDropSystem oreDropSystem = OreDropSystem.FortuneItem; - - /** - * This enables ambient-occlusion smooth lighting on tiles - */ - public boolean mRenderTileAmbientOcclusion = true; - - /** - * This enables rendering of glowing textures - */ - public boolean mRenderGlowTextures = true; - - /** - * Render flipped textures - */ - public boolean mRenderFlippedMachinesFlipped = true; - - /** - * This enables indicators on input/output hatches - */ - public boolean mRenderIndicatorsOnHatch = true; - - /** - * This enables the rendering of dirt particles if pollution is enabled too - */ - public boolean mRenderDirtParticles = true; - - /** - * This enables the rendering of the pollution fog if pollution is enabled too - */ - public boolean mRenderPollutionFog = true; - - /** - * This enables BaseMetaTileEntity block updates handled by BlockUpdateHandler - */ - public boolean mUseBlockUpdateHandler = false; - - /** - * This makes cover tabs visible on GregTech machines - */ - public boolean mCoverTabsVisible = true; - - /** - * This controls whether cover tabs display on the left (default) or right side of the UI - */ - public boolean mCoverTabsFlipped = false; - - /** - * How verbose should tooltips be? 0: disabled, 1: one-line, 2: normal, 3+: extended - */ - public int mTooltipVerbosity = 2; - - /** - * How verbose should tooltips be when LSHIFT is held? 0: disabled, 1: one-line, 2: normal, 3+: extended - */ - public int mTooltipShiftVerbosity = 3; - - /** - * Which style to use for title tab on machine GUI? 0: text tab split-dark, 1: text tab unified, 2: item icon tab - */ - public int mTitleTabStyle = 0; - - /** - * Whether to show seconds or ticks on NEI - */ - public boolean mNEIRecipeSecondMode = true; - - /** - * This enables "Recipe by" display on NEI - */ - public boolean mNEIRecipeOwner = false; - - /** - * This enables showing stack traces where the recipe was added. Reboot needed - */ - public boolean mNEIRecipeOwnerStackTrace = false; - - /** - * This enables showing original voltage when overclocked - */ - public boolean mNEIOriginalVoltage = false; - - /** - * This enables the green->red durability for an item's damage value - */ - public boolean mRenderItemDurabilityBar = true; - - /** - * This enables the blue charge bar for an electric item's charge - */ - public boolean mRenderItemChargeBar = true; - - public final Map recipeCategorySettings = new HashMap<>(); - - /** - * This enables showing voltage tier of transformer for Waila, instead of raw voltage number - */ - public boolean mWailaTransformerVoltageTier = true; - - /** - * This enables showing the cpu load in nanoseconds via waila. - */ - public boolean wailaAverageNS = false; - - public static final int GUI_ID_COVER_SIDE_BASE = 10; // Takes GUI ID 10 - 15 - - public static Map oreDictBurnTimes = new HashMap<>(); - - // Locking - public static ReentrantLock TICK_LOCK = new ReentrantLock(); - - private final ConcurrentMap mClientPrefernces = new ConcurrentHashMap<>(); - - static { - oreDictBurnTimes.put("dustTinyWood", 11); - oreDictBurnTimes.put("dustTinySodium", 44); - oreDictBurnTimes.put("dustSmallWood", 25); - oreDictBurnTimes.put("dustSmallSodium", 100); - oreDictBurnTimes.put("dustWood", 100); - oreDictBurnTimes.put("dustTinyCoal", 177); - oreDictBurnTimes.put("dustTinyCharcoal", 177); - oreDictBurnTimes.put("dustTinyLignite", 166); - oreDictBurnTimes.put("plateWood", 300); - oreDictBurnTimes.put("dustSmallLignite", 375); - oreDictBurnTimes.put("dustSodium", 400); - oreDictBurnTimes.put("dustSmallCoal", 400); - oreDictBurnTimes.put("dustSmallCharcoal", 400); - oreDictBurnTimes.put("dustTinyLithium", 888); - oreDictBurnTimes.put("dustTinyCaesium", 888); - oreDictBurnTimes.put("gemLignite", 1200); - oreDictBurnTimes.put("crushedLignite", 1200); - oreDictBurnTimes.put("dustImpureLignite", 1200); - oreDictBurnTimes.put("dustLignite", 1200); - oreDictBurnTimes.put("dustSulfur", 1600); - oreDictBurnTimes.put("gemCoal", 1600); - oreDictBurnTimes.put("crushedCoal", 1600); - oreDictBurnTimes.put("dustImpureCoal", 1600); - oreDictBurnTimes.put("dustCoal", 1600); - oreDictBurnTimes.put("gemCharcoal", 1600); - oreDictBurnTimes.put("crushedCharcoal", 1600); - oreDictBurnTimes.put("dustImpureCharcoal", 1600); - oreDictBurnTimes.put("dustCharcoal", 1600); - oreDictBurnTimes.put("dustSmallLithium", 2000); - oreDictBurnTimes.put("dustSmallCaesium", 2000); - oreDictBurnTimes.put("gemSodium", 4000); - oreDictBurnTimes.put("crushedSodium", 4000); - oreDictBurnTimes.put("dustImpureSodium", 4000); - oreDictBurnTimes.put("gemLithium", 6000); - oreDictBurnTimes.put("crushedLithium", 6000); - oreDictBurnTimes.put("dustImpureLithium", 6000); - oreDictBurnTimes.put("dustLithium", 6000); - oreDictBurnTimes.put("gemCaesium", 6000); - oreDictBurnTimes.put("crushedCaesium", 6000); - oreDictBurnTimes.put("dustImpureCaesium", 6000); - oreDictBurnTimes.put("dustCaesium", 6000); - oreDictBurnTimes.put("blockLignite", 12000); - oreDictBurnTimes.put("blockCharcoal", 16000); - oreDictBurnTimes.put("gemDiamond", 102400); - oreDictBurnTimes.put("blockDiamond", 1024000); - oreDictBurnTimes.put("crushedDiamond", 102400); - oreDictBurnTimes.put("dustImpureDiamond", 102400); - oreDictBurnTimes.put("dustDiamond", 102400); - oreDictBurnTimes.put("dustSmallDiamond", 25600); - oreDictBurnTimes.put("dustTinyDiamond", 11378); - } - - public GT_Proxy() { - GameRegistry.registerFuelHandler(this); - MinecraftForge.EVENT_BUS.register(this); - MinecraftForge.ORE_GEN_BUS.register(this); - FMLCommonHandler.instance() - .bus() - .register(this); - GregTech_API.sThaumcraftCompat = (IThaumcraftCompat) GT_Utility - .callConstructor("gregtech.common.GT_ThaumcraftCompat", 0, null, GT_Values.D1, new Object[0]); - for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry - .getRegisteredFluidContainerData()) { - onFluidContainerRegistration(new FluidContainerRegistry.FluidContainerRegisterEvent(tData)); - } - try { - for (String tOreName : OreDictionary.getOreNames()) { - ItemStack tOreStack; - for (Iterator i$ = OreDictionary.getOres(tOreName) - .iterator(); i$.hasNext(); registerOre(new OreDictionary.OreRegisterEvent(tOreName, tOreStack))) { - tOreStack = i$.next(); - } - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - public void onPreLoad() { - GT_Log.out.println("GT_Mod: Preload-Phase started!"); - GT_Log.ore.println("GT_Mod: Preload-Phase started!"); - - GregTech_API.sPreloadStarted = true; - this.mIgnoreTcon = ConfigGeneral.ignoreTinkerConstruct; - this.replicatorExponent = ConfigGeneral.replicatorExponent; - for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry - .getRegisteredFluidContainerData()) { - if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) { - tData.fluid.amount = 0; - break; - } - } - GT_Log.out.println("GT_Mod: Getting required Items of other Mods."); - - ItemList.RC_ShuntingWire.set(GT_ModHandler.getModItem(Railcraft.ID, "machine.delta", 1L, 0)); - ItemList.RC_ShuntingWireFrame.set(GT_ModHandler.getModItem(Railcraft.ID, "frame", 1L, 0)); - ItemList.RC_Rail_Standard.set(GT_ModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 0)); - ItemList.RC_Rail_Adv.set(GT_ModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 1)); - ItemList.RC_Rail_Wooden.set(GT_ModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 2)); - ItemList.RC_Rail_HS.set(GT_ModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 3)); - ItemList.RC_Rail_Reinforced.set(GT_ModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 4)); - ItemList.RC_Rail_Electric.set(GT_ModHandler.getModItem(Railcraft.ID, "part.rail", 1L, 5)); - ItemList.RC_Tie_Wood.set(GT_ModHandler.getModItem(Railcraft.ID, "part.tie", 1L, 0)); - ItemList.RC_Tie_Stone.set(GT_ModHandler.getModItem(Railcraft.ID, "part.tie", 1L, 1)); - ItemList.RC_Bed_Wood.set(GT_ModHandler.getModItem(Railcraft.ID, "part.railbed", 1L, 0)); - ItemList.RC_Bed_Stone.set(GT_ModHandler.getModItem(Railcraft.ID, "part.railbed", 1L, 1)); - ItemList.RC_Rebar.set(GT_ModHandler.getModItem(Railcraft.ID, "part.rebar", 1L)); - ItemList.TC_Thaumometer.set(GT_ModHandler.getModItem(Thaumcraft.ID, "ItemThaumometer", 1L, 0)); - ItemList.Tool_Sword_Steel.set(GT_ModHandler.getModItem(Railcraft.ID, "tool.steel.sword", 1L)); - ItemList.Tool_Pickaxe_Steel.set(GT_ModHandler.getModItem(Railcraft.ID, "tool.steel.pickaxe", 1L)); - ItemList.Tool_Shovel_Steel.set(GT_ModHandler.getModItem(Railcraft.ID, "tool.steel.shovel", 1L)); - ItemList.Tool_Axe_Steel.set(GT_ModHandler.getModItem(Railcraft.ID, "tool.steel.axe", 1L)); - ItemList.Tool_Hoe_Steel.set(GT_ModHandler.getModItem(Railcraft.ID, "tool.steel.hoe", 1L)); - - ItemList.TF_LiveRoot.set(GT_ModHandler.getModItem(TwilightForest.ID, "item.liveRoot", 1L, 0)); - ItemList.TF_Vial_FieryBlood.set(GT_ModHandler.getModItem(TwilightForest.ID, "item.fieryBlood", 1L)); - ItemList.TF_Vial_FieryTears.set(GT_ModHandler.getModItem(TwilightForest.ID, "item.fieryTears", 1L)); - - ItemList.FR_Lemon.set(GT_ModHandler.getModItem(Forestry.ID, "fruits", 1L, 3)); - ItemList.FR_Mulch.set(GT_ModHandler.getModItem(Forestry.ID, "mulch", 1L)); - ItemList.FR_Fertilizer.set(GT_ModHandler.getModItem(Forestry.ID, "fertilizerCompound", 1L)); - ItemList.FR_Compost.set(GT_ModHandler.getModItem(Forestry.ID, "fertilizerBio", 1L)); - ItemList.FR_Silk.set(GT_ModHandler.getModItem(Forestry.ID, "craftingMaterial", 1L, 2)); - ItemList.FR_Wax.set(GT_ModHandler.getModItem(Forestry.ID, "beeswax", 1L)); - ItemList.FR_WaxCapsule.set(GT_ModHandler.getModItem(Forestry.ID, "waxCapsule", 1L)); - ItemList.FR_RefractoryWax.set(GT_ModHandler.getModItem(Forestry.ID, "refractoryWax", 1L)); - ItemList.FR_RefractoryCapsule.set(GT_ModHandler.getModItem(Forestry.ID, "refractoryEmpty", 1L)); - ItemList.FR_Bee_Drone.set(GT_ModHandler.getModItem(Forestry.ID, "beeDroneGE", 1L)); - ItemList.FR_Bee_Princess.set(GT_ModHandler.getModItem(Forestry.ID, "beePrincessGE", 1L)); - ItemList.FR_Bee_Queen.set(GT_ModHandler.getModItem(Forestry.ID, "beeQueenGE", 1L)); - ItemList.FR_Tree_Sapling.set( - GT_ModHandler - .getModItem(Forestry.ID, "sapling", 1L, GT_ModHandler.getModItem(Forestry.ID, "saplingGE", 1L))); - ItemList.FR_Butterfly.set(GT_ModHandler.getModItem(Forestry.ID, "butterflyGE", 1L)); - ItemList.FR_Larvae.set(GT_ModHandler.getModItem(Forestry.ID, "beeLarvaeGE", 1L)); - ItemList.FR_Serum.set(GT_ModHandler.getModItem(Forestry.ID, "serumGE", 1L)); - ItemList.FR_Caterpillar.set(GT_ModHandler.getModItem(Forestry.ID, "caterpillarGE", 1L)); - ItemList.FR_PollenFertile.set(GT_ModHandler.getModItem(Forestry.ID, "pollenFertile", 1L)); - ItemList.FR_Stick.set(GT_ModHandler.getModItem(Forestry.ID, "oakStick", 1L)); - ItemList.FR_Casing_Impregnated.set(GT_ModHandler.getModItem(Forestry.ID, "impregnatedCasing", 1L)); - ItemList.FR_Casing_Sturdy.set(GT_ModHandler.getModItem(Forestry.ID, "sturdyMachine", 1L)); - ItemList.FR_Casing_Hardened.set(GT_ModHandler.getModItem(Forestry.ID, "hardenedMachine", 1L)); - - ItemList.Bottle_Empty.set(new ItemStack(Items.glass_bottle, 1)); - - ItemList.Cell_Universal_Fluid.set(GT_ModHandler.getIC2Item("FluidCell", 1L)); - ItemList.Cell_Empty.set( - GT_ModHandler.getIC2Item( - "cell", - 1L, - GT_ModHandler.getIC2Item("cellEmpty", 1L, GT_ModHandler.getIC2Item("emptyCell", 1L)))); - ItemList.Cell_Water.set(GT_ModHandler.getIC2Item("waterCell", 1L, GT_ModHandler.getIC2Item("cellWater", 1L))); - ItemList.Cell_Lava.set(GT_ModHandler.getIC2Item("lavaCell", 1L, GT_ModHandler.getIC2Item("cellLava", 1L))); - ItemList.Cell_Air.set( - GT_ModHandler.getIC2Item( - "airCell", - 1L, - GT_ModHandler.getIC2Item("cellAir", 1L, GT_ModHandler.getIC2Item("cellOxygen", 1L)))); - - ItemList.IC2_Item_Casing_Iron.set(GT_ModHandler.getIC2Item("casingiron", 1L)); - ItemList.IC2_Item_Casing_Gold.set(GT_ModHandler.getIC2Item("casinggold", 1L)); - ItemList.IC2_Item_Casing_Bronze.set(GT_ModHandler.getIC2Item("casingbronze", 1L)); - ItemList.IC2_Item_Casing_Copper.set(GT_ModHandler.getIC2Item("casingcopper", 1L)); - ItemList.IC2_Item_Casing_Tin.set(GT_ModHandler.getIC2Item("casingtin", 1L)); - ItemList.IC2_Item_Casing_Lead.set(GT_ModHandler.getIC2Item("casinglead", 1L)); - ItemList.IC2_Item_Casing_Steel.set(GT_ModHandler.getIC2Item("casingadviron", 1L)); - ItemList.IC2_Spray_WeedEx.set(GT_ModHandler.getIC2Item("weedEx", 1L)); - ItemList.IC2_Mixed_Metal_Ingot.set(GT_ModHandler.getIC2Item("mixedMetalIngot", 1L)); - ItemList.IC2_Fertilizer.set(GT_ModHandler.getIC2Item("fertilizer", 1L)); - ItemList.IC2_CoffeeBeans.set(GT_ModHandler.getIC2Item("coffeeBeans", 1L)); - ItemList.IC2_CoffeePowder.set(GT_ModHandler.getIC2Item("coffeePowder", 1L)); - ItemList.IC2_Hops.set(GT_ModHandler.getIC2Item("hops", 1L)); - ItemList.IC2_Resin.set(GT_ModHandler.getIC2Item("resin", 1L)); - ItemList.IC2_Plantball.set(GT_ModHandler.getIC2Item("plantBall", 1L)); - ItemList.IC2_PlantballCompressed - .set(GT_ModHandler.getIC2Item("compressedPlantBall", 1L, ItemList.IC2_Plantball.get(1L))); - ItemList.IC2_Crop_Seeds.set(GT_ModHandler.getIC2Item("cropSeed", 1L)); - ItemList.IC2_Grin_Powder.set(GT_ModHandler.getIC2Item("grinPowder", 1L)); - ItemList.IC2_Energium_Dust.set(GT_ModHandler.getIC2Item("energiumDust", 1L)); - ItemList.IC2_Scrap.set(GT_ModHandler.getIC2Item("scrap", 1L)); - ItemList.IC2_Scrapbox.set(GT_ModHandler.getIC2Item("scrapBox", 1L)); - ItemList.IC2_Fuel_Rod_Empty.set(GT_ModHandler.getIC2Item("fuelRod", 1L)); - ItemList.IC2_Food_Can_Empty.set(GT_ModHandler.getIC2Item("tinCan", 1L)); - ItemList.IC2_Food_Can_Filled.set(GT_ModHandler.getIC2Item("filledTinCan", 1L, 0)); - ItemList.IC2_Food_Can_Spoiled.set(GT_ModHandler.getIC2Item("filledTinCan", 1L, 1)); - ItemList.IC2_Industrial_Diamond - .set(GT_ModHandler.getIC2Item("industrialDiamond", 1L, new ItemStack(Items.diamond, 1))); - ItemList.IC2_Compressed_Coal_Ball.set(GT_ModHandler.getIC2Item("compressedCoalBall", 1L)); - ItemList.IC2_Compressed_Coal_Chunk.set(GT_ModHandler.getIC2Item("coalChunk", 1L)); - ItemList.IC2_ShaftIron.set(GT_ModHandler.getIC2Item("ironshaft", 1L)); - ItemList.IC2_ShaftSteel.set(GT_ModHandler.getIC2Item("steelshaft", 1L)); - - ItemList.IC2_SuBattery.set(GT_ModHandler.getIC2Item("suBattery", 1L)); - ItemList.IC2_ReBattery.set(GT_ModHandler.getIC2Item("reBattery", 1L)); - ItemList.IC2_AdvBattery.set(GT_ModHandler.getIC2Item("advBattery", 1L)); - ItemList.IC2_EnergyCrystal.set(GT_ModHandler.getIC2Item("energyCrystal", 1L)); - ItemList.IC2_LapotronCrystal.set(GT_ModHandler.getIC2Item("lapotronCrystal", 1L)); - - ItemList.Tool_Sword_Bronze.set(GT_ModHandler.getIC2Item("bronzeSword", 1L)); - ItemList.Tool_Pickaxe_Bronze.set(GT_ModHandler.getIC2Item("bronzePickaxe", 1L)); - ItemList.Tool_Shovel_Bronze.set(GT_ModHandler.getIC2Item("bronzeShovel", 1L)); - ItemList.Tool_Axe_Bronze.set(GT_ModHandler.getIC2Item("bronzeAxe", 1L)); - ItemList.Tool_Hoe_Bronze.set(GT_ModHandler.getIC2Item("bronzeHoe", 1L)); - ItemList.IC2_ForgeHammer.set(GT_ModHandler.getIC2Item("ForgeHammer", 1L)); - ItemList.IC2_WireCutter.set(GT_ModHandler.getIC2Item("cutter", 1L)); - - ItemList.Credit_Iron.set(GT_ModHandler.getIC2Item("coin", 1L)); - - ItemList.Circuit_Basic.set(GT_ModHandler.getIC2Item("electronicCircuit", 1L)); - ItemList.Circuit_Advanced.set(GT_ModHandler.getIC2Item("advancedCircuit", 1L)); - - ItemList.Upgrade_Overclocker.set(GT_ModHandler.getIC2Item("overclockerUpgrade", 1L)); - ItemList.Upgrade_Battery.set(GT_ModHandler.getIC2Item("energyStorageUpgrade", 1L)); - - ItemList.Dye_Bonemeal.set(new ItemStack(Items.dye, 1, 15)); - ItemList.Dye_SquidInk.set(new ItemStack(Items.dye, 1, 0)); - ItemList.Dye_Cocoa.set(new ItemStack(Items.dye, 1, 3)); - - ItemList.Book_Written_00.set(new ItemStack(Items.written_book, 1, 0)); - - ItemList.Food_Baked_Bread.set(new ItemStack(Items.bread, 1, 0)); - ItemList.Food_Raw_Potato.set(new ItemStack(Items.potato, 1, 0)); - ItemList.Food_Baked_Potato.set(new ItemStack(Items.baked_potato, 1, 0)); - ItemList.Food_Poisonous_Potato.set(new ItemStack(Items.poisonous_potato, 1, 0)); - - OrePrefixes.bottle.mContainerItem = ItemList.Bottle_Empty.get(1L); - OrePrefixes.bucket.mContainerItem = new ItemStack(Items.bucket, 1); - OrePrefixes.cellPlasma.mContainerItem = ItemList.Cell_Empty.get(1L); - OrePrefixes.cellMolten.mContainerItem = ItemList.Cell_Empty.get(1L); - OrePrefixes.cell.mContainerItem = ItemList.Cell_Empty.get(1L); - - GT_ModHandler.sNonReplaceableItems.add(new ItemStack(Items.bow, 1, 32767)); - GT_ModHandler.sNonReplaceableItems.add(new ItemStack(Items.fishing_rod, 1, 32767)); - GT_ModHandler.sNonReplaceableItems.add(ItemList.IC2_ForgeHammer.getWithDamage(1L, 32767L)); - GT_ModHandler.sNonReplaceableItems.add(ItemList.IC2_WireCutter.getWithDamage(1L, 32767L)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("painter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("blackPainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("redPainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("greenPainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("brownPainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("bluePainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("purplePainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("cyanPainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("lightGreyPainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("darkGreyPainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("pinkPainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("limePainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("yellowPainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("cloudPainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("magentaPainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("orangePainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("whitePainter", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("cfPack", 1L, 32767)); - // GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("jetpack", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("treetap", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("weedEx", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("staticBoots", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("compositeArmor", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("hazmatHelmet", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("hazmatChestplate", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("hazmatLeggings", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getIC2Item("hazmatBoots", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Railcraft.ID, "part.turbine.disk", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Railcraft.ID, "part.turbine.blade", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Railcraft.ID, "part.turbine.rotor", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Railcraft.ID, "borehead.diamond", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Railcraft.ID, "borehead.steel", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Railcraft.ID, "borehead.iron", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems - .add(GT_ModHandler.getModItem(TwilightForest.ID, "item.plateNaga", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(TwilightForest.ID, "item.legsNaga", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems - .add(GT_ModHandler.getModItem(TwilightForest.ID, "item.arcticHelm", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems - .add(GT_ModHandler.getModItem(TwilightForest.ID, "item.arcticPlate", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems - .add(GT_ModHandler.getModItem(TwilightForest.ID, "item.arcticLegs", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems - .add(GT_ModHandler.getModItem(TwilightForest.ID, "item.arcticBoots", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(TwilightForest.ID, "item.yetiHelm", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems - .add(GT_ModHandler.getModItem(TwilightForest.ID, "item.yetiPlate", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(TwilightForest.ID, "item.yetiLegs", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems - .add(GT_ModHandler.getModItem(TwilightForest.ID, "item.yetiBoots", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems - .add(GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ToolCertusQuartzCuttingKnife", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems - .add(GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ToolNetherQuartzCuttingKnife", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Forestry.ID, "apiaristHelmet", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Forestry.ID, "apiaristChest", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Forestry.ID, "apiaristLegs", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Forestry.ID, "apiaristBoots", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Forestry.ID, "frameUntreated", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Forestry.ID, "frameImpregnated", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Forestry.ID, "frameProven", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems.add(GT_ModHandler.getModItem(Forestry.ID, "waxCast", 1L, 32767)); - GT_ModHandler.sNonReplaceableItems - .add(GT_ModHandler.getModItem(GalacticraftCore.ID, "item.sensorGlasses", 1L, 32767)); - - RecipeSorter.register( - "gregtech:shaped", - GT_Shaped_Recipe.class, - RecipeSorter.Category.SHAPED, - "after:minecraft:shaped before:minecraft:shapeless"); - RecipeSorter.register( - "gregtech:shapeless", - GT_Shapeless_Recipe.class, - RecipeSorter.Category.SHAPELESS, - "after:minecraft:shapeless"); - - // Register chunk manager with Forge - GT_ChunkManager.init(); - } - - public void onLoad() { - GT_Log.out.println("GT_Mod: Beginning Load-Phase."); - GT_Log.ore.println("GT_Mod: Beginning Load-Phase."); - - // Clay buckets, which don't get registered until Iguana Tweaks pre-init - if (IguanaTweaksTinkerConstruct.isModLoaded()) { - OrePrefixes.bucketClay.mContainerItem = GT_ModHandler - .getModItem(IguanaTweaksTinkerConstruct.ID, "clayBucketFired", 1L, 0); - GT_OreDictUnificator.set( - OrePrefixes.bucketClay, - Materials.Empty, - GT_ModHandler.getModItem(IguanaTweaksTinkerConstruct.ID, "clayBucketFired", 1L, 0)); - GT_OreDictUnificator.set( - OrePrefixes.bucketClay, - Materials.Water, - GT_ModHandler.getModItem(IguanaTweaksTinkerConstruct.ID, "clayBucketWater", 1L, 0)); - GT_OreDictUnificator.set( - OrePrefixes.bucketClay, - Materials.Lava, - GT_ModHandler.getModItem(IguanaTweaksTinkerConstruct.ID, "clayBucketLava", 1L, 0)); - GT_OreDictUnificator.set( - OrePrefixes.bucketClay, - Materials.Milk, - GT_ModHandler.getModItem(IguanaTweaksTinkerConstruct.ID, "clayBucketMilk", 1L, 0)); - - FluidContainerRegistry.registerFluidContainer( - new FluidContainerRegistry.FluidContainerData( - Materials.Milk.getFluid(1000L), - GT_OreDictUnificator.get(OrePrefixes.bucketClay, Materials.Milk, 1L), - GT_OreDictUnificator.get(OrePrefixes.bucketClay, Materials.Empty, 1L))); - } - - if (!GT_Mod.gregtechproxy.enableUndergroundGravelGen) - PREVENTED_ORES.add(OreGenEvent.GenerateMinable.EventType.GRAVEL); - if (!GT_Mod.gregtechproxy.enableUndergroundDirtGen) - PREVENTED_ORES.add(OreGenEvent.GenerateMinable.EventType.DIRT); - - MinecraftForge.EVENT_BUS.register(new SpaceProjectWorldSavedData()); - MinecraftForge.EVENT_BUS.register(new GlobalEnergyWorldSavedData("")); - MinecraftForge.EVENT_BUS.register(new GT_Worldgenerator.OregenPatternSavedData("")); - MinecraftForge.EVENT_BUS.register(new GlobalMetricsCoverDatabase()); - FMLCommonHandler.instance() - .bus() - .register(new GT_Worldgenerator.OregenPatternSavedData("")); - - // IC2 Hazmat - addFullHazmatToIC2Item("hazmatHelmet"); - addFullHazmatToIC2Item("hazmatChestplate"); - addFullHazmatToIC2Item("hazmatLeggings"); - addFullHazmatToIC2Item("hazmatBoots"); - addFullHazmatToIC2Item("nanoHelmet"); - addFullHazmatToIC2Item("nanoBoots"); - addFullHazmatToIC2Item("nanoLeggings"); - addFullHazmatToIC2Item("nanoBodyarmor"); - addFullHazmatToIC2Item("quantumHelmet"); - addFullHazmatToIC2Item("quantumBodyarmor"); - addFullHazmatToIC2Item("quantumLeggings"); - addFullHazmatToIC2Item("quantumBoots"); - - // GT++ Hazmat - addFullHazmatToGeneralItem(GTPlusPlus.ID, "itemArmorHazmatHelmetEx", 1); - addFullHazmatToGeneralItem(GTPlusPlus.ID, "itemArmorHazmatChestplateEx", 1); - addFullHazmatToGeneralItem(GTPlusPlus.ID, "itemArmorHazmatLeggingsEx", 1); - addFullHazmatToGeneralItem(GTPlusPlus.ID, "itemArmorRubBootsEx", 1); - - // GraviSuite Hazmat - addFullHazmatToGeneralItem(GraviSuite.ID, "graviChestPlate", 1L); - addFullHazmatToGeneralItem(GraviSuite.ID, "advNanoChestPlate", 1L); - - // EMT Hazmat - addFullHazmatToGeneralItem(ElectroMagicTools.ID, "itemArmorQuantumChestplate", 1L); - addFullHazmatToGeneralItem(ElectroMagicTools.ID, "NanoBootsTraveller", 1L); - addFullHazmatToGeneralItem(ElectroMagicTools.ID, "NanosuitGogglesRevealing", 1L); - addFullHazmatToGeneralItem(ElectroMagicTools.ID, "QuantumBootsTraveller", 1L); - addFullHazmatToGeneralItem(ElectroMagicTools.ID, "QuantumGogglesRevealing", 1L); - addFullHazmatToGeneralItem(ElectroMagicTools.ID, "SolarHelmetRevealing", 1L); - addFullHazmatToGeneralItem(ElectroMagicTools.ID, "NanosuitWing", 1L); - addFullHazmatToGeneralItem(ElectroMagicTools.ID, "QuantumWing", 1L); - - // Thaumic Boots Hazmat - addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemQuantumVoid", 1L); - addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemQuantumMeteor", 1L); - addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemQuantumComet", 1L); - addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemNanoVoid", 1L); - addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemNanoMeteor", 1L); - addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemNanoComet", 1L); - addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemElectricVoid", 1L); - addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemVoidMeteor", 1L); - addFullHazmatToGeneralItem(ThaumicBoots.ID, "item.ItemVoidComet", 1L); - - // DraconicEvolution Hazmat - addFullHazmatToGeneralItem(DraconicEvolution.ID, "draconicBoots", 1L, 0); - addFullHazmatToGeneralItem(DraconicEvolution.ID, "draconicHelm", 1L, 0); - addFullHazmatToGeneralItem(DraconicEvolution.ID, "draconicLeggs", 1L, 0); - addFullHazmatToGeneralItem(DraconicEvolution.ID, "draconicChest", 1L, 0); - addFullHazmatToGeneralItem(DraconicEvolution.ID, "wyvernBoots", 1L, 0); - addFullHazmatToGeneralItem(DraconicEvolution.ID, "wyvernHelm", 1L, 0); - addFullHazmatToGeneralItem(DraconicEvolution.ID, "wyvernLeggs", 1L, 0); - addFullHazmatToGeneralItem(DraconicEvolution.ID, "wyvernChest", 1L, 0); - - // AdvancedSolarPanel - addFullHazmatToGeneralItem(AdvancedSolarPanel.ID, "advanced_solar_helmet", 1L); - addFullHazmatToGeneralItem(AdvancedSolarPanel.ID, "hybrid_solar_helmet", 1L); - addFullHazmatToGeneralItem(AdvancedSolarPanel.ID, "ultimate_solar_helmet", 1L); - - // TaintedMagic Hazmat - addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemVoidwalkerBoots", 1L); - addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemShadowFortressHelmet", 1L); - addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemShadowFortressChestplate", 1L); - addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemShadowFortressLeggings", 1L); - addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemVoidFortressHelmet", 1L); - addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemVoidFortressChestplate", 1L); - addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemVoidFortressLeggings", 1L); - addFullHazmatToGeneralItem(TaintedMagic.ID, "ItemVoidmetalGoggles", 1L); - - // WitchingGadgets Hazmat - addFullHazmatToGeneralItem(WitchingGadgets.ID, "item.WG_PrimordialHelm", 1L); - addFullHazmatToGeneralItem(WitchingGadgets.ID, "item.WG_PrimordialChest", 1L); - addFullHazmatToGeneralItem(WitchingGadgets.ID, "item.WG_PrimordialLegs", 1L); - addFullHazmatToGeneralItem(WitchingGadgets.ID, "item.WG_PrimordialBoots", 1L); - - // ThaumicTinkerer Hazmat - addFullHazmatToGeneralItem(ThaumicTinkerer.ID, "ichorclothChestGem", 1L); - addFullHazmatToGeneralItem(ThaumicTinkerer.ID, "ichorclothBootsGem", 1L); - addFullHazmatToGeneralItem(ThaumicTinkerer.ID, "ichorclothHelmGem", 1L); - addFullHazmatToGeneralItem(ThaumicTinkerer.ID, "ichorclothLegsGem", 1L); - - // GalaxySpace Hazmat - addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_helmet", 1L); - addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_helmetglasses", 1L); - addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_plate", 1L); - addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_jetplate", 1L); - addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_leg", 1L); - addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_boots", 1L); - addFullHazmatToGeneralItem(GalaxySpace.ID, "item.spacesuit_gravityboots", 1L); - - // Extra Hazmat - GregTech_API.sElectroHazmatList.add(new ItemStack(Items.chainmail_helmet, 1, W)); - GregTech_API.sElectroHazmatList.add(new ItemStack(Items.chainmail_chestplate, 1, W)); - GregTech_API.sElectroHazmatList.add(new ItemStack(Items.chainmail_leggings, 1, W)); - GregTech_API.sElectroHazmatList.add(new ItemStack(Items.chainmail_boots, 1, W)); - - // Infinity Hazmat - addFullHazmatToGeneralItem(Avaritia.ID, "Infinity_Helm", 1L); - addFullHazmatToGeneralItem(Avaritia.ID, "Infinity_Chest", 1L); - addFullHazmatToGeneralItem(Avaritia.ID, "Infinity_Pants", 1L); - addFullHazmatToGeneralItem(Avaritia.ID, "Infinity_Shoes", 1L); - - // EnderIO Hazmat - addFullHazmatToGeneralItem(EnderIO.ID, "item.endSteel_helmet", 1L); - addFullHazmatToGeneralItem(EnderIO.ID, "item.endSteel_chestplate", 1L); - addFullHazmatToGeneralItem(EnderIO.ID, "item.endSteel_leggings", 1L); - addFullHazmatToGeneralItem(EnderIO.ID, "item.endSteel_boots", 1L); - addFullHazmatToGeneralItem(EnderIO.ID, "item.stellar_helmet", 1L); - addFullHazmatToGeneralItem(EnderIO.ID, "item.stellar_chestplate", 1L); - addFullHazmatToGeneralItem(EnderIO.ID, "item.stellar_leggings", 1L); - addFullHazmatToGeneralItem(EnderIO.ID, "item.stellar_boots", 1L); - - GregTech_API.sLoadStarted = true; - for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry - .getRegisteredFluidContainerData()) { - if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) { - tData.fluid.amount = 0; - break; - } - } - GT_LanguageManager.writePlaceholderStrings(); - } - - public static long tBits = GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED - | GT_ModHandler.RecipeBits.ONLY_ADD_IF_RESULT_IS_NOT_NULL - | GT_ModHandler.RecipeBits.NOT_REMOVABLE; - - public void onPostLoad() { - GT_Log.out.println("GT_Mod: Beginning PostLoad-Phase."); - GT_Log.ore.println("GT_Mod: Beginning PostLoad-Phase."); - if (GT_Log.pal != null) { - final Thread playerActivityLogger = new Thread(new GT_PlayerActivityLogger()); - playerActivityLogger.setDaemon(true); - playerActivityLogger.setName("GT5U Player activity logger"); - playerActivityLogger.start(); - } - GregTech_API.sPostloadStarted = true; - - // This needs to happen late enough that all of the fluids we need have been registered. - // onLoad() seems to be too early, as the New Horizons Core Mod registers some fluids in post-load. - GT_MetaGenerated_Item_98.init(); - - GT_OreDictUnificator.addItemData(new ItemStack(Items.iron_door, 1), new ItemData(Materials.Iron, 21772800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Items.wooden_door, 1, 32767), new ItemData(Materials.Wood, 21772800L)); - for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry - .getRegisteredFluidContainerData()) { - if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) { - tData.fluid.amount = 0; - break; - } - } - GT_Log.out.println("GT_Mod: Adding Configs specific for MetaTileEntities"); - try { - for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) { - if (GregTech_API.METATILEENTITIES[i] != null) { - GregTech_API.METATILEENTITIES[i].onConfigLoad(); - } - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - GT_Log.out.println("GT_Mod: Adding Tool Usage Crafting Recipes for OreDict Items."); - for (Materials aMaterial : Materials.values()) { - if ((aMaterial.mUnificatable) && (aMaterial.mMaterialInto == aMaterial)) { - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), - tBits, - new Object[] { "h", "X", 'X', OrePrefixes.crushedCentrifuged.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), - tBits, - new Object[] { "h", "X", 'X', OrePrefixes.crystalline.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L), - tBits, - new Object[] { "h", "X", 'X', OrePrefixes.crystal.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L), - tBits, - new Object[] { "h", "X", 'X', OrePrefixes.crushedPurified.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L), - tBits, - new Object[] { "h", "X", 'X', OrePrefixes.cleanGravel.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L), - tBits, - new Object[] { "h", "X", 'X', OrePrefixes.reduced.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), - tBits, - new Object[] { "h", "X", 'X', OrePrefixes.clump.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), - tBits, - new Object[] { "h", "X", 'X', OrePrefixes.shard.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), - tBits, - new Object[] { "h", "X", 'X', OrePrefixes.crushed.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L), - tBits, - new Object[] { "h", "X", 'X', OrePrefixes.dirtyGravel.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 4L), - tBits, - new Object[] { " X ", 'X', OrePrefixes.dust.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, 9L), - tBits, - new Object[] { "X ", 'X', OrePrefixes.dust.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), - tBits, - new Object[] { "XX", "XX", 'X', OrePrefixes.dustSmall.get(aMaterial) }); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L), - tBits, - new Object[] { "XXX", "XXX", "XXX", 'X', OrePrefixes.dustTiny.get(aMaterial) }); - } - } - } - - public void onLoadComplete() {} - - public void onServerAboutToStart() { - dimensionWisePollution.clear(); // !!! IMPORTANT for map switching... - GT_ChunkAssociatedData.clearAll(); - } - - public void onServerStarting() { - GT_Log.out.println("GT_Mod: ServerStarting-Phase started!"); - GT_Log.ore.println("GT_Mod: ServerStarting-Phase started!"); - - GT_MusicSystem.ServerSystem.reset(); - - this.mUniverse = null; - this.isFirstServerWorldTick = true; - for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry - .getRegisteredFluidContainerData()) { - if ((tData.filledContainer.getItem() == Items.potionitem) && (tData.filledContainer.getItemDamage() == 0)) { - tData.fluid.amount = 0; - break; - } - } - try { - for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) { - if (GregTech_API.METATILEENTITIES[i] != null) { - GregTech_API.METATILEENTITIES[i].onServerStart(); - } - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - public void onServerStarted() { - GregTech_API.sWirelessRedstone.clear(); - GT_MetaTileEntity_DroneCentre.getCentreMap() - .clear(); - GT_Log.out.println( - "GT_Mod: Cleaning up all OreDict Crafting Recipes, which have an empty List in them, since they are never meeting any Condition."); - List tList = CraftingManager.getInstance() - .getRecipeList(); - for (int i = 0; i < tList.size(); i++) { - if ((tList.get(i) instanceof ShapedOreRecipe)) { - for (Object tObject : ((ShapedOreRecipe) tList.get(i)).getInput()) { - if (((tObject instanceof List)) && (((List) tObject).isEmpty())) { - tList.remove(i--); - break; - } - } - } else if ((tList.get(i) instanceof ShapelessOreRecipe)) { - for (Object tObject : ((ShapelessOreRecipe) tList.get(i)).getInput()) { - if (((tObject instanceof List)) && (((List) tObject).isEmpty())) { - tList.remove(i--); - break; - } - } - } - } - } - - public void onServerStopping() { - GT_MusicSystem.ServerSystem.reset(); - File tSaveDirectory = getSaveDirectory(); - GregTech_API.sWirelessRedstone.clear(); - if (tSaveDirectory != null) { - try { - for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) { - if (GregTech_API.METATILEENTITIES[i] != null) { - GregTech_API.METATILEENTITIES[i].onWorldSave(tSaveDirectory); - } - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - this.mUniverse = null; - // GT_ChunkAssociatedData.saveAll(); todo: figure out if this is needed - - } - - @SubscribeEvent - public void onClientConnectedToServerEvent(FMLNetworkEvent.ClientConnectedToServerEvent aEvent) {} - - /** - * Tells {@link gregtech.nei.GT_NEI_DefaultHandler} to reload recipes. - */ - public void reloadNEICache() {} - - /** - * Logging in to server or {@link #reloadNEICache} being called increases the count. - */ - public int getNEIReloadCount() { - return 0; - } - - @SubscribeEvent - public void onArrowNockEvent(ArrowNockEvent aEvent) { - if ((!aEvent.isCanceled()) && (GT_Utility.isStackValid(aEvent.result)) - && (GT_Utility.getProjectile(SubTag.PROJECTILE_ARROW, aEvent.entityPlayer.inventory) != null)) { - aEvent.entityPlayer.setItemInUse( - aEvent.result, - aEvent.result.getItem() - .getMaxItemUseDuration(aEvent.result)); - aEvent.setCanceled(true); - } - } - - @SubscribeEvent - public void onArrowLooseEvent(ArrowLooseEvent aEvent) { - ItemStack aArrow = GT_Utility.getProjectile(SubTag.PROJECTILE_ARROW, aEvent.entityPlayer.inventory); - if ((!aEvent.isCanceled()) && (GT_Utility.isStackValid(aEvent.bow)) - && (aArrow != null) - && ((aEvent.bow.getItem() instanceof ItemBow))) { - float tSpeed = aEvent.charge / 20.0F; - tSpeed = (tSpeed * tSpeed + tSpeed * 2.0F) / 3.0F; - if (tSpeed < 0.1D) { - return; - } - if (tSpeed > 1.0D) { - tSpeed = 1.0F; - } - EntityArrow tArrowEntity = ((IProjectileItem) aArrow.getItem()).getProjectile( - SubTag.PROJECTILE_ARROW, - aArrow, - aEvent.entityPlayer.worldObj, - aEvent.entityPlayer, - tSpeed * 2.0F); - if (tSpeed >= 1.0F) { - tArrowEntity.setIsCritical(true); - } - int tLevel = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, aEvent.bow); - if (tLevel > 0) { - tArrowEntity.setDamage(tArrowEntity.getDamage() + tLevel * 0.5D + 0.5D); - } - tLevel = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, aEvent.bow); - if (tLevel > 0) { - tArrowEntity.setKnockbackStrength(tLevel); - } - tLevel = EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, aEvent.bow); - if (tLevel > 0) { - tArrowEntity.setFire(tLevel * 100); - } - aEvent.bow.damageItem(1, aEvent.entityPlayer); - aEvent.bow.getItem(); - - new WorldSpawnedEventBuilder.SoundAtEntityEventBuilder().setPitch(0.64893958288F + tSpeed * 0.5F) - .setVolume(1f) - .setIdentifier(SoundResource.RANDOM_BOW) - .setEntity(aEvent.entityPlayer) - .setWorld(aEvent.entityPlayer.worldObj) - .run(); - - tArrowEntity.canBePickedUp = 1; - if (!aEvent.entityPlayer.capabilities.isCreativeMode) { - aArrow.stackSize -= 1; - } - if (aArrow.stackSize == 0) { - GT_Utility.removeNullStacksFromInventory(aEvent.entityPlayer.inventory); - } - if (!aEvent.entityPlayer.worldObj.isRemote) { - aEvent.entityPlayer.worldObj.spawnEntityInWorld(tArrowEntity); - } - aEvent.setCanceled(true); - } - } - - @SubscribeEvent - public void onEndermanTeleportEvent(EnderTeleportEvent aEvent) { - if (((aEvent.entityLiving instanceof EntityEnderman)) - && (aEvent.entityLiving.getActivePotionEffect(Potion.weakness) != null)) { - aEvent.setCanceled(true); - } - } - - @SubscribeEvent - public void onEntitySpawningEvent(EntityJoinWorldEvent aEvent) { - if (aEvent.entity == null) { - return; - } - - if (aEvent.entity.worldObj.isRemote) { - return; - } - - if ((aEvent.entity instanceof EntityItem)) { - ((EntityItem) aEvent.entity) - .setEntityItemStack(GT_OreDictUnificator.get(true, ((EntityItem) aEvent.entity).getEntityItem(), true)); - } - } - - @SubscribeEvent - public void onPlayerJoinEvent(cpw.mods.fml.common.gameevent.PlayerEvent.PlayerLoggedInEvent event) { - if (event.player == null || event.player.isClientWorld() - || !(event.player instanceof EntityPlayerMP mpPlayer)) { - return; - } - GT_Values.NW.sendToPlayer(new GT_Packet_MusicSystemData(GT_MusicSystem.ServerSystem.serialize()), mpPlayer); - } - - @SubscribeEvent - public void onOreGenEvent(OreGenEvent.GenerateMinable aGenerator) { - if ((this.mDisableVanillaOres) && ((aGenerator.generator instanceof WorldGenMinable)) - && (PREVENTED_ORES.contains(aGenerator.type))) { - aGenerator.setResult(Result.DENY); - } - } - - private String getDataAndTime() { - return this.mDateFormat.format(new Date()); - } - - @SubscribeEvent - public void onPlayerInteraction(PlayerInteractEvent aEvent) { - if ((aEvent.entityPlayer == null) || (aEvent.entityPlayer.worldObj == null) - || (aEvent.action == null) - || (aEvent.world.provider == null)) { - return; - } - if ((!aEvent.entityPlayer.worldObj.isRemote) && (aEvent.action != PlayerInteractEvent.Action.RIGHT_CLICK_AIR) - && (GT_Log.pal != null)) { - this.mBufferedPlayerActivity.offer( - getDataAndTime() + ";" - + aEvent.action.name() - + ";" - + aEvent.entityPlayer.getDisplayName() - + ";DIM:" - + aEvent.world.provider.dimensionId - + ";" - + aEvent.x - + ";" - + aEvent.y - + ";" - + aEvent.z - + ";|;" - + aEvent.x / 10 - + ";" - + aEvent.y / 10 - + ";" - + aEvent.z / 10); - } - ItemStack aStack = aEvent.entityPlayer.getCurrentEquippedItem(); - if ((aStack != null) && (aEvent.action == PlayerInteractEvent.Action.RIGHT_CLICK_BLOCK) - && (aStack.getItem() == Items.flint_and_steel)) { - if ((!aEvent.world.isRemote) && (!aEvent.entityPlayer.capabilities.isCreativeMode) - && (aEvent.world.rand.nextInt(100) >= this.mFlintChance)) { - aEvent.setCanceled(true); - aStack.damageItem(1, aEvent.entityPlayer); - if (aStack.getItemDamage() >= aStack.getMaxDamage()) { - aStack.stackSize -= 1; - } - if (aStack.stackSize <= 0) { - ForgeEventFactory.onPlayerDestroyItem(aEvent.entityPlayer, aStack); - } - } - } - } - - @SubscribeEvent - public void onBlockBreakingEvent(BlockEvent.BreakEvent event) { - EntityPlayer player = event.getPlayer(); - if (player == null) return; - - ItemStack item = event.getPlayer() - .getCurrentEquippedItem(); - if (item == null) return; - - if (!(item.getItem() instanceof GT_MetaGenerated_Tool tool)) return; - - IToolStats stats = tool.getToolStats(item); - if (stats == null) return; - - TileEntity tile = event.world.getTileEntity(event.x, event.y, event.z); - stats.onBreakBlock(player, event.x, event.y, event.z, event.block, (byte) event.blockMetadata, tile, event); - } - - @SubscribeEvent - public void onBlockHarvestingEvent(BlockEvent.HarvestDropsEvent aEvent) { - if (aEvent.harvester == null) return; - - if ((!aEvent.world.isRemote) && (GT_Log.pal != null)) { - this.mBufferedPlayerActivity.offer( - getDataAndTime() + ";HARVEST_BLOCK;" - + aEvent.harvester.getDisplayName() - + ";DIM:" - + aEvent.world.provider.dimensionId - + ";" - + aEvent.x - + ";" - + aEvent.y - + ";" - + aEvent.z - + ";|;" - + aEvent.x / 10 - + ";" - + aEvent.y / 10 - + ";" - + aEvent.z / 10); - } - - ItemStack aStack = aEvent.harvester.getCurrentEquippedItem(); - if (aStack == null) return; - - if ((aStack.getItem() instanceof GT_MetaGenerated_Tool tool)) { - tool.onHarvestBlockEvent( - aEvent.drops, - aStack, - aEvent.harvester, - aEvent.block, - aEvent.x, - aEvent.y, - aEvent.z, - (byte) aEvent.blockMetadata, - aEvent.fortuneLevel, - aEvent.isSilkTouching, - aEvent); - } - if (EnchantmentHelper.getEnchantmentLevel(Enchantment.fireAspect.effectId, aStack) > 2) { - try { - for (ItemStack tDrop : aEvent.drops) { - ItemStack tSmeltingOutput = GT_ModHandler.getSmeltingOutput(tDrop, false, null); - if (tSmeltingOutput != null) { - tDrop.stackSize *= tSmeltingOutput.stackSize; - tSmeltingOutput.stackSize = tDrop.stackSize; - GT_Utility.setStack(tDrop, tSmeltingOutput); - } - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - } - - @SubscribeEvent - public void registerOre(OreDictionary.OreRegisterEvent aEvent) { - ModContainer tContainer = Loader.instance() - .activeModContainer(); - String aMod = tContainer == null ? "UNKNOWN" : tContainer.getModId(); - String aOriginalMod = aMod; - if (GT_OreDictUnificator.isRegisteringOres()) { - aMod = GregTech.ID; - } else if (aMod.equals(GregTech.ID)) { - aMod = "UNKNOWN"; - } - if ((aEvent == null) || (aEvent.Ore == null) - || (aEvent.Ore.getItem() == null) - || (aEvent.Name == null) - || (aEvent.Name.isEmpty()) - || (aEvent.Name.replaceAll("_", "") - .length() - aEvent.Name.length() == 9)) { - if (aOriginalMod.equals(GregTech.ID)) { - aOriginalMod = "UNKNOWN"; - } - GT_Log.ore.println( - aOriginalMod - + " did something very bad! The registration is too invalid to even be shown properly. This happens only if you register null, invalid Items, empty Strings or even nonexisting Events to the OreDict."); - throw new IllegalArgumentException( - aOriginalMod - + " did something very bad! The registration is too invalid to even be shown properly. This happens only if you register null, invalid Items, empty Strings or even nonexisting Events to the OreDict."); - } - try { - aEvent.Ore.stackSize = 1; - - // skipping TinkerConstruct ore registration - if (this.mIgnoreTcon && aOriginalMod.equals(TinkerConstruct.ID)) { - return; - } - String tModToName = aMod + " -> " + aEvent.Name; - if (this.mOreDictActivated || GregTech_API.sPostloadStarted || GregTech_API.sLoadFinished) { - tModToName = aOriginalMod + " --Late--> " + aEvent.Name; - } - if (((aEvent.Ore.getItem() instanceof ItemBlock)) - || (GT_Utility.getBlockFromStack(aEvent.Ore) != Blocks.air)) { - GT_OreDictUnificator.addToBlacklist(aEvent.Ore); - } - this.mRegisteredOres.add(aEvent.Ore); - if (this.mIgnoredItems.contains(aEvent.Name)) { - if ((aEvent.Name.startsWith("item"))) { - GT_Log.ore.println(tModToName); - if (aEvent.Name.equals("itemCopperWire")) { - GT_OreDictUnificator.registerOre(OreDictNames.craftingWireCopper, aEvent.Ore); - } - if (aEvent.Name.equals("itemRubber")) { - GT_OreDictUnificator.registerOre(OrePrefixes.ingot, Materials.Rubber, aEvent.Ore); - } - return; - } - } else if (this.mIgnoredNames.contains(aEvent.Name)) { - GT_Log.ore.println(tModToName + " is getting ignored via hardcode."); - return; - } else if (aEvent.Name.equals("stone")) { - GT_OreDictUnificator.registerOre("stoneSmooth", aEvent.Ore); - return; - } else if (aEvent.Name.equals("cobblestone")) { - GT_OreDictUnificator.registerOre("stoneCobble", aEvent.Ore); - return; - } else if ((aEvent.Name.contains("|")) || (aEvent.Name.contains("*")) - || (aEvent.Name.contains(":")) - || (aEvent.Name.contains(".")) - || (aEvent.Name.contains("$"))) { - GT_Log.ore - .println(tModToName + " is using a private Prefix and is therefor getting ignored properly."); - return; - } else if (aEvent.Name.equals("copperWire")) { - GT_OreDictUnificator.registerOre(OreDictNames.craftingWireCopper, aEvent.Ore); - } else if (aEvent.Name.equals("oreHeeEndrium")) { - GT_OreDictUnificator.registerOre(OrePrefixes.ore, Materials.HeeEndium, aEvent.Ore); - } else if (aEvent.Name.equals("sheetPlastic")) { - GT_OreDictUnificator.registerOre(OrePrefixes.plate, Materials.Plastic, aEvent.Ore); - } else if (aEvent.Name.startsWith("shard")) { - switch (aEvent.Name) { - case "shardAir" -> { - GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedAir, aEvent.Ore); - return; - } - case "shardWater" -> { - GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedWater, aEvent.Ore); - return; - } - case "shardFire" -> { - GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedFire, aEvent.Ore); - return; - } - case "shardEarth" -> { - GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedEarth, aEvent.Ore); - return; - } - case "shardOrder" -> { - GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedOrder, aEvent.Ore); - return; - } - case "shardEntropy" -> { - GT_OreDictUnificator.registerOre(OrePrefixes.gem, Materials.InfusedEntropy, aEvent.Ore); - return; - } - } - } else if (aEvent.Name.equals("fieryIngot")) { - GT_OreDictUnificator.registerOre(OrePrefixes.ingot, Materials.FierySteel, aEvent.Ore); - return; - } else if (aEvent.Name.equals("ironwood")) { - GT_OreDictUnificator.registerOre(OrePrefixes.ingot, Materials.IronWood, aEvent.Ore); - return; - } else if (aEvent.Name.equals("steeleaf")) { - GT_OreDictUnificator.registerOre(OrePrefixes.ingot, Materials.Steeleaf, aEvent.Ore); - return; - } else if (aEvent.Name.equals("knightmetal")) { - GT_OreDictUnificator.registerOre(OrePrefixes.ingot, Materials.Knightmetal, aEvent.Ore); - return; - } else if (aEvent.Name.equals("compressedAluminum")) { - GT_OreDictUnificator.registerOre(OrePrefixes.compressed, Materials.Aluminium, aEvent.Ore); - return; - } else if (aEvent.Name.contains(" ")) { - GT_Log.ore.println( - tModToName + " is getting re-registered because the OreDict Name containing invalid spaces."); - GT_OreDictUnificator - .registerOre(aEvent.Name.replaceAll(" ", ""), GT_Utility.copyAmount(1, aEvent.Ore)); - aEvent.Ore.setStackDisplayName("Invalid OreDictionary Tag"); - return; - } else if (this.mInvalidNames.contains(aEvent.Name)) { - GT_Log.ore.println(tModToName + " is wrongly registered and therefor getting ignored."); - - return; - } - OrePrefixes aPrefix = OrePrefixes.getOrePrefix(aEvent.Name); - Materials aMaterial = Materials._NULL; - if ((aPrefix == OrePrefixes.nugget) && (aMod.equals(Thaumcraft.ID)) - && (aEvent.Ore.getItem() - .getUnlocalizedName() - .contains("ItemResource"))) { - return; - } - if (aPrefix == null) { - if (aEvent.Name.toLowerCase() - .equals(aEvent.Name)) { - GT_Log.ore.println(tModToName + " is invalid due to being solely lowercased."); - return; - } else if (aEvent.Name.toUpperCase() - .equals(aEvent.Name)) { - GT_Log.ore.println(tModToName + " is invalid due to being solely uppercased."); - return; - } else if (Character.isUpperCase(aEvent.Name.charAt(0))) { - GT_Log.ore.println(tModToName + " is invalid due to the first character being uppercased."); - } - } else { - if (aPrefix.mDontUnificateActively) { - GT_OreDictUnificator.addToBlacklist(aEvent.Ore); - } - if (aPrefix != aPrefix.mPrefixInto) { - String tNewName = aEvent.Name.replaceFirst(aPrefix.toString(), aPrefix.mPrefixInto.toString()); - if (!GT_OreDictUnificator.isRegisteringOres()) { - GT_Log.ore.println( - tModToName + " uses a depricated Prefix, and is getting re-registered as " + tNewName); - } - GT_OreDictUnificator.registerOre(tNewName, aEvent.Ore); - return; - } - String tName = aEvent.Name.replaceFirst(aPrefix.toString(), ""); - if (tName.length() > 0) { - char firstChar = tName.charAt(0); - if (Character.isUpperCase(firstChar) || Character.isLowerCase(firstChar) - || firstChar == '_' - || Character.isDigit(firstChar)) { - if (aPrefix.mIsMaterialBased) { - aMaterial = Materials.get(tName); - if (aMaterial != aMaterial.mMaterialInto) { - GT_OreDictUnificator.registerOre(aPrefix, aMaterial.mMaterialInto, aEvent.Ore); - if (!GT_OreDictUnificator.isRegisteringOres()) { - GT_Log.ore.println( - tModToName + " uses a deprecated Material and is getting re-registered as " - + aPrefix.get(aMaterial.mMaterialInto)); - } - return; - } - if (!aPrefix.isIgnored(aMaterial)) { - aPrefix.add(GT_Utility.copyAmount(1, aEvent.Ore)); - } - if (aMaterial != Materials._NULL) { - Materials tReRegisteredMaterial; - for (Iterator i$ = aMaterial.mOreReRegistrations.iterator(); i$ - .hasNext(); GT_OreDictUnificator - .registerOre(aPrefix, tReRegisteredMaterial, aEvent.Ore)) { - tReRegisteredMaterial = i$.next(); - } - aMaterial.add(GT_Utility.copyAmount(1, aEvent.Ore)); - - if (GregTech_API.sThaumcraftCompat != null && aPrefix.doGenerateItem(aMaterial) - && !aPrefix.isIgnored(aMaterial)) { - List tAspects = new ArrayList<>(); - for (TC_AspectStack tAspect : aPrefix.mAspects) tAspect.addToAspectList(tAspects); - if (aPrefix.mMaterialAmount >= 3628800 || aPrefix.mMaterialAmount < 0) - for (TC_AspectStack tAspect : aMaterial.mAspects) - tAspect.addToAspectList(tAspects); - GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem( - GT_Utility.copyAmount(1, aEvent.Ore), - tAspects, - aEvent.Name); - } - - switch (aPrefix) { - case crystal -> { - if ((aMaterial == Materials.CertusQuartz) - || (aMaterial == Materials.NetherQuartz) - || (aMaterial == Materials.Fluix)) { - GT_OreDictUnificator.registerOre(OrePrefixes.gem, aMaterial, aEvent.Ore); - } - } - case gem -> { - if (aMaterial == Materials.Lapis || aMaterial == Materials.Sodalite) { - GT_OreDictUnificator.registerOre(Dyes.dyeBlue, aEvent.Ore); - } else if (aMaterial == Materials.Lazurite) { - GT_OreDictUnificator.registerOre(Dyes.dyeCyan, aEvent.Ore); - } else - if (aMaterial == Materials.InfusedAir || aMaterial == Materials.InfusedWater - || aMaterial == Materials.InfusedFire - || aMaterial == Materials.InfusedEarth - || aMaterial == Materials.InfusedOrder - || aMaterial == Materials.InfusedEntropy) { - GT_OreDictUnificator.registerOre( - aMaterial.mName.replaceFirst("Infused", "shard"), - aEvent.Ore); - } else if (aMaterial == Materials.Chocolate) { - GT_OreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore); - } else if (aMaterial == Materials.CertusQuartz - || aMaterial == Materials.NetherQuartz) { - GT_OreDictUnificator - .registerOre(OrePrefixes.item.get(aMaterial), aEvent.Ore); - GT_OreDictUnificator - .registerOre(OrePrefixes.crystal, aMaterial, aEvent.Ore); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingQuartz, aEvent.Ore); - } else - if (aMaterial == Materials.Fluix || aMaterial == Materials.Quartz - || aMaterial == Materials.Quartzite) { - GT_OreDictUnificator.registerOre( - OrePrefixes.crystal, - aMaterial, - aEvent.Ore); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingQuartz, aEvent.Ore); - } - } - case cableGt01 -> { - if (aMaterial == Materials.Tin) { - GT_OreDictUnificator.registerOre(OreDictNames.craftingWireTin, aEvent.Ore); - } else if (aMaterial == Materials.AnyCopper) { - GT_OreDictUnificator - .registerOre(OreDictNames.craftingWireCopper, aEvent.Ore); - } else if (aMaterial == Materials.Gold) { - GT_OreDictUnificator.registerOre(OreDictNames.craftingWireGold, aEvent.Ore); - } else if (aMaterial == Materials.AnyIron) { - GT_OreDictUnificator.registerOre(OreDictNames.craftingWireIron, aEvent.Ore); - } - } - case lens -> { - if ((aMaterial.contains(SubTag.TRANSPARENT)) - && (aMaterial.mColor != Dyes._NULL)) { - GT_OreDictUnificator.registerOre( - "craftingLens" + aMaterial.mColor.toString() - .replaceFirst("dye", ""), - aEvent.Ore); - } - } - case plate -> { - if ((aMaterial == Materials.Plastic) || (aMaterial == Materials.Rubber)) { - GT_OreDictUnificator.registerOre(OrePrefixes.sheet, aMaterial, aEvent.Ore); - } else if (aMaterial == Materials.Silicon) { - GT_OreDictUnificator.registerOre(OrePrefixes.item, aMaterial, aEvent.Ore); - } else if (aMaterial == Materials.Wood) { - GT_OreDictUnificator.addToBlacklist(aEvent.Ore); - GT_OreDictUnificator.registerOre(OrePrefixes.plank, aMaterial, aEvent.Ore); - } - } - case cell -> { - if (aMaterial == Materials.Empty) { - GT_OreDictUnificator.addToBlacklist(aEvent.Ore); - } - } - case gearGt -> GT_OreDictUnificator - .registerOre(OrePrefixes.gear, aMaterial, aEvent.Ore); - case stick -> { - if (!GT_RecipeRegistrator.sRodMaterialList.contains(aMaterial)) { - GT_RecipeRegistrator.sRodMaterialList.add(aMaterial); - } else if (aMaterial == Materials.Wood) { - GT_OreDictUnificator.addToBlacklist(aEvent.Ore); - } else if ((aMaterial == Materials.Tin) || (aMaterial == Materials.Lead) - || (aMaterial == Materials.SolderingAlloy)) { - GT_OreDictUnificator - .registerOre(ToolDictNames.craftingToolSolderingMetal, aEvent.Ore); - } - } - case dust -> { - if (aMaterial == Materials.Salt) { - GT_OreDictUnificator.registerOre("itemSalt", aEvent.Ore); - } else if (aMaterial == Materials.Wood) { - GT_OreDictUnificator.registerOre("pulpWood", aEvent.Ore); - } else if (aMaterial == Materials.Wheat) { - GT_OreDictUnificator.registerOre("foodFlour", aEvent.Ore); - } else if (aMaterial == Materials.Lapis) { - GT_OreDictUnificator.registerOre(Dyes.dyeBlue, aEvent.Ore); - } else if (aMaterial == Materials.Lazurite) { - GT_OreDictUnificator.registerOre(Dyes.dyeCyan, aEvent.Ore); - } else if (aMaterial == Materials.Sodalite) { - GT_OreDictUnificator.registerOre(Dyes.dyeBlue, aEvent.Ore); - } else if (aMaterial == Materials.Cocoa) { - GT_OreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore); - GT_OreDictUnificator.registerOre("foodCocoapowder", aEvent.Ore); - } else if (aMaterial == Materials.Coffee) { - GT_OreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore); - } else if (aMaterial == Materials.BrownLimonite) { - GT_OreDictUnificator.registerOre(Dyes.dyeBrown, aEvent.Ore); - } else if (aMaterial == Materials.YellowLimonite) { - GT_OreDictUnificator.registerOre(Dyes.dyeYellow, aEvent.Ore); - } - } - case ingot -> { - if (aMaterial == Materials.Rubber) { - GT_OreDictUnificator.registerOre("itemRubber", aEvent.Ore); - } else if (aMaterial == Materials.FierySteel) { - GT_OreDictUnificator.registerOre("fieryIngot", aEvent.Ore); - } else if (aMaterial == Materials.IronWood) { - GT_OreDictUnificator.registerOre("ironwood", aEvent.Ore); - } else if (aMaterial == Materials.Steeleaf) { - GT_OreDictUnificator.registerOre("steeleaf", aEvent.Ore); - } else if (aMaterial == Materials.Knightmetal) { - GT_OreDictUnificator.registerOre("knightmetal", aEvent.Ore); - } else if ((aMaterial == Materials.Brass) && (aEvent.Ore.getItemDamage() == 2) - && (aEvent.Ore.getUnlocalizedName() - .equals("item.ingotBrass")) - && (new ItemStack(aEvent.Ore.getItem(), 1, 0).getUnlocalizedName() - .contains("red"))) { - GT_OreDictUnificator.set( - OrePrefixes.ingot, - Materials.RedAlloy, - new ItemStack(aEvent.Ore.getItem(), 1, 0)); - GT_OreDictUnificator.set( - OrePrefixes.ingot, - Materials.BlueAlloy, - new ItemStack(aEvent.Ore.getItem(), 1, 1)); - GT_OreDictUnificator.set( - OrePrefixes.ingot, - Materials.Brass, - new ItemStack(aEvent.Ore.getItem(), 1, 2)); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(aEvent.Ore.getItem(), 1, 3)) - .itemOutputs(new ItemStack(aEvent.Ore.getItem(), 16, 4)) - .duration(20 * SECONDS) - .eut(8) - .addTo(cutterRecipes); - } - } - default -> {} - } - if (aPrefix.mIsUnificatable && !aMaterial.mUnificatable) { - return; - } - } else { - for (Dyes tDye : Dyes.VALUES) { - if (aEvent.Name.endsWith( - tDye.name() - .replaceFirst("dye", ""))) { - GT_OreDictUnificator.addToBlacklist(aEvent.Ore); - GT_Log.ore.println( - tModToName - + " Oh man, why the fuck would anyone need a OreDictified Color for this, that is even too much for GregTech... do not report this, this is just a random Comment about how ridiculous this is."); - return; - } - } - // GT_FML_LOGGER.info("Material Name: "+aEvent.Name+ " - // !!!Unknown Material detected!!! Please report to GregTech Intergalactical for - // additional compatiblity. This is not an Error, an Issue nor a Lag Source, it is just - // an Information, which you should pass to me."); - // GT_Log.ore.println(tModToName + " uses an unknown - // Material. Report this to GregTech."); - return; - } - } else { - aPrefix.add(GT_Utility.copyAmount(1, aEvent.Ore)); - } - } - } else if (aPrefix.mIsSelfReferencing) { - aPrefix.add(GT_Utility.copyAmount(1, aEvent.Ore)); - } else { - GT_Log.ore.println(tModToName + " uses a Prefix as full OreDict Name, and is therefor invalid."); - aEvent.Ore.setStackDisplayName("Invalid OreDictionary Tag"); - return; - } - switch (aPrefix) { - case dye -> { - if (GT_Utility.isStringValid(tName)) { - GT_OreDictUnificator.registerOre(OrePrefixes.dye, aEvent.Ore); - } - } - case stoneSmooth -> GT_OreDictUnificator.registerOre("stone", aEvent.Ore); - case stoneCobble -> GT_OreDictUnificator.registerOre("cobblestone", aEvent.Ore); - case plank -> { - if (tName.equals("Wood")) { - GT_OreDictUnificator.addItemData(aEvent.Ore, new ItemData(Materials.Wood, 3628800L)); - } - } - case slab -> { - if (tName.equals("Wood")) { - GT_OreDictUnificator.addItemData(aEvent.Ore, new ItemData(Materials.Wood, 1814400L)); - } - } - case sheet -> { - if (tName.equals("Plastic")) { - GT_OreDictUnificator.registerOre(OrePrefixes.plate, Materials.Plastic, aEvent.Ore); - } else if (tName.equals("Rubber")) { - GT_OreDictUnificator.registerOre(OrePrefixes.plate, Materials.Rubber, aEvent.Ore); - } - } - case crafting -> { - switch (tName) { - case "ToolSolderingMetal" -> GregTech_API.registerSolderingMetal(aEvent.Ore); - case "IndustrialDiamond" -> GT_OreDictUnificator.addToBlacklist(aEvent.Ore); - case "WireCopper" -> GT_OreDictUnificator - .registerOre(OrePrefixes.wire, Materials.Copper, aEvent.Ore); - } - } - case wood -> { - if (tName.equals("Rubber")) { - GT_OreDictUnificator.registerOre("logRubber", aEvent.Ore); - } - } - case food -> { - if (tName.equals("Cocoapowder")) { - GT_OreDictUnificator.registerOre(OrePrefixes.dust, Materials.Cocoa, aEvent.Ore); - } - } - default -> {} - } - } - GT_Log.ore.println(tModToName); - - OreDictEventContainer tOre = new OreDictEventContainer(aEvent, aPrefix, aMaterial, aMod); - if ((!this.mOreDictActivated) || (!GregTech_API.sUnificationEntriesRegistered)) { - this.mEvents.add(tOre); - } else { - this.mEvents.clear(); - } - if (this.mOreDictActivated) { - registerRecipes(tOre); - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - @SuppressWarnings("deprecated") - public static void stepMaterialsVanilla(Collection mEvents, - ProgressManager.ProgressBar progressBar) { - int size = 5; - int sizeStep = mEvents.size() / 20 - 1; - GT_Proxy.OreDictEventContainer tEvent; - for (Iterator i$ = mEvents.iterator(); i$.hasNext(); GT_Proxy - .registerRecipes(tEvent)) { - tEvent = i$.next(); - sizeStep--; - if (sizeStep == 0) { - GT_FML_LOGGER.info("Baking : " + size + "%", new Object[0]); - sizeStep = mEvents.size() / 20 - 1; - size += 5; - } - progressBar.step(tEvent.mMaterial == null ? "" : tEvent.mMaterial.toString()); - } - ProgressManager.pop(progressBar); - } - - @SubscribeEvent - public void onLivingUpdate(LivingUpdateEvent aEvent) { - if (aEvent.entityLiving.onGround) { - int tX = MathHelper.floor_double(aEvent.entityLiving.posX), - tY = MathHelper.floor_double(aEvent.entityLiving.boundingBox.minY - 0.001F), - tZ = MathHelper.floor_double(aEvent.entityLiving.posZ); - Block tBlock = aEvent.entityLiving.worldObj.getBlock(tX, tY, tZ); - if (tBlock instanceof IBlockOnWalkOver) - ((IBlockOnWalkOver) tBlock).onWalkOver(aEvent.entityLiving, aEvent.entityLiving.worldObj, tX, tY, tZ); - } - } - - @SubscribeEvent - public void onFluidContainerRegistration(FluidContainerRegistry.FluidContainerRegisterEvent aFluidEvent) { - if ((aFluidEvent.data.filledContainer.getItem() == Items.potionitem) - && (aFluidEvent.data.filledContainer.getItemDamage() == 0)) { - aFluidEvent.data.fluid.amount = 0; - } - GT_OreDictUnificator.addToBlacklist(aFluidEvent.data.emptyContainer); - GT_OreDictUnificator.addToBlacklist(aFluidEvent.data.filledContainer); - GT_Utility.addFluidContainerData(aFluidEvent.data); - } - - @SubscribeEvent - public void onServerTickEvent(TickEvent.ServerTickEvent aEvent) { - if (aEvent.side.isServer()) { - if (aEvent.phase == TickEvent.Phase.START) { - TICK_LOCK.lock(); - } else { - TICK_LOCK.unlock(); - GT_MusicSystem.ServerSystem.tick(); - } - - // Making sure it is being freed up in order to prevent exploits or Garbage Collection mishaps. - LAST_BROKEN_TILEENTITY.set(null); - } - } - - @SubscribeEvent - public void onWorldTickEvent(TickEvent.WorldTickEvent aEvent) { - if (aEvent.world.provider.dimensionId == 0) mTicksUntilNextCraftSound--; - if (isFirstWorldTick) { - for (Runnable runnable : GregTech_API.sFirstWorldTick) runnable.run(); - isFirstWorldTick = false; - GT_Values.worldTickHappened = true; - } - if (aEvent.side.isServer()) { - if (this.mUniverse == null) { - this.mUniverse = aEvent.world; - } - if (this.isFirstServerWorldTick) { - File tSaveDiretory = getSaveDirectory(); - if (tSaveDiretory != null) { - this.isFirstServerWorldTick = false; - try { - for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) { - if (GregTech_API.METATILEENTITIES[i] != null) { - GregTech_API.METATILEENTITIES[i].onWorldLoad(tSaveDiretory); - } - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - } - if ((aEvent.world.getTotalWorldTime() % 100L == 0L) - && ((this.mItemDespawnTime != 6000) || (this.mMaxEqualEntitiesAtOneSpot > 0))) { - long startTime = System.nanoTime(); - double oldX = 0, oldY = 0, oldZ = 0; - if (debugEntityCramming && (aEvent.world.loadedEntityList.size() != 0)) { - GT_Log.out.println("CRAM: Entity list size " + aEvent.world.loadedEntityList.size()); - } - for (int i = 0; i < aEvent.world.loadedEntityList.size(); i++) { - if ((aEvent.world.loadedEntityList.get(i) instanceof Entity)) { - Entity tEntity = aEvent.world.loadedEntityList.get(i); - if (((tEntity instanceof EntityItem)) && (this.mItemDespawnTime != 6000) - && (((EntityItem) tEntity).lifespan == 6000)) { - ((EntityItem) tEntity).lifespan = this.mItemDespawnTime; - } else if (((tEntity instanceof EntityLivingBase)) && (this.mMaxEqualEntitiesAtOneSpot > 0) - && (!(tEntity instanceof EntityPlayer)) - && (tEntity.canBePushed()) - && (((EntityLivingBase) tEntity).getHealth() > 0.0F)) { - List tList = tEntity.worldObj.getEntitiesWithinAABBExcludingEntity( - tEntity, - tEntity.boundingBox.expand(0.20000000298023224D, 0.0D, 0.20000000298023224D)); - Class tClass = tEntity.getClass(); - int tEntityCount = 1; - if (tList != null) { - for (Object o : tList) { - if ((o != null) && (o.getClass() == tClass)) { - tEntityCount++; - } - } - } - if (tEntityCount > this.mMaxEqualEntitiesAtOneSpot) { - if (debugEntityCramming) { - // Cheeseball way of not receiving a bunch of spam caused by 1 location - // obviously fails if there are crammed entities in more than one spot. - if (tEntity.posX != oldX && tEntity.posY != oldY && tEntity.posZ != oldZ) { - GT_Log.out.println( - "CRAM: Excess entities: " + tEntityCount - + " at X " - + tEntity.posX - + " Y " - + tEntity.posY - + " Z " - + tEntity.posZ); - oldX = tEntity.posX; - oldY = tEntity.posY; - oldZ = tEntity.posZ; - } - } - tEntity.attackEntityFrom( - DamageSource.inWall, - tEntityCount - this.mMaxEqualEntitiesAtOneSpot); - } - } - } - } - if (debugEntityCramming && (aEvent.world.loadedEntityList.size() != 0)) { - GT_Log.out.println( - "CRAM: Time spent checking " + (System.nanoTime() - startTime) / 1000 + " microseconds"); - } - } - - GT_Pollution.onWorldTick(aEvent); - } - } - - @SubscribeEvent - public void onWorldUnload(WorldEvent.Unload event) { - for (TileEntity tileEntity : event.world.loadedTileEntityList) { - if (tileEntity instanceof IGregTechTileEntity) { - tileEntity.onChunkUnload(); - } - } - } - - public static void registerRecipes(GT_Proxy.OreDictEventContainer aOre) { - if ((aOre.mEvent.Ore == null) || (aOre.mEvent.Ore.getItem() == null) - || (aOre.mPrefix == null) - || (aOre.mPrefix.isIgnored(aOre.mMaterial))) { - return; - } - if (aOre.mEvent.Ore.stackSize != 1) { - aOre.mEvent.Ore.stackSize = 1; - } - - aOre.mPrefix.processOre( - aOre.mMaterial == null ? Materials._NULL : aOre.mMaterial, - aOre.mEvent.Name, - aOre.mModID, - GT_Utility.copyAmount(1, aOre.mEvent.Ore)); - } - - @SubscribeEvent - public void onPlayerTickEventServer(TickEvent.PlayerTickEvent aEvent) { - if ((!aEvent.side.isServer()) || (aEvent.phase == TickEvent.Phase.END) || (aEvent.player.isDead)) { - return; - } - - if ((aEvent.player.ticksExisted % 200 == 0) && (aEvent.player.capabilities.allowEdit) - && (!aEvent.player.capabilities.isCreativeMode) - && (this.mSurvivalIntoAdventure)) { - aEvent.player.setGameType(GameType.ADVENTURE); - aEvent.player.capabilities.allowEdit = false; - if (this.mAxeWhenAdventure) { - GT_Utility.sendChatToPlayer( - aEvent.player, - GT_LanguageManager.addStringLocalization( - "Interaction_DESCRIPTION_Index_097", - "It's dangerous to go alone! Take this.")); - aEvent.player.worldObj.spawnEntityInWorld( - new EntityItem( - aEvent.player.worldObj, - aEvent.player.posX, - aEvent.player.posY, - aEvent.player.posZ, - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.AXE.ID, 1, Materials.Flint, Materials.Wood, null))); - } - } - final boolean tHungerEffect = (this.mHungerEffect) && (aEvent.player.ticksExisted % 2400 == 1200); - - if (aEvent.player.ticksExisted % 120 != 0) { - return; - } - - int tCount = 64; - for (int i = 0; i < 36; i++) { - final ItemStack tStack = aEvent.player.inventory.getStackInSlot(i); - if (tStack == null) { - continue; - } - - if (!aEvent.player.capabilities.isCreativeMode) { - GT_Utility - .applyRadioactivity(aEvent.player, GT_Utility.getRadioactivityLevel(tStack), tStack.stackSize); - final float tHeat = GT_Utility.getHeatDamageFromItem(tStack); - if (tHeat != 0.0F) { - if (tHeat > 0.0F) { - GT_Utility.applyHeatDamageFromItem(aEvent.player, tHeat, tStack); - } else { - GT_Utility.applyFrostDamage(aEvent.player, -tHeat); - } - } - } - if (tHungerEffect) { - tCount += tStack.stackSize * 64 / Math.max(1, tStack.getMaxStackSize()); - } - if (this.mInventoryUnification) { - GT_OreDictUnificator.setStack(true, tStack); - } - - } - for (int i = 0; i < 4; i++) { - final ItemStack tStack = aEvent.player.inventory.armorInventory[i]; - if (tStack == null) { - continue; - } - - if (!aEvent.player.capabilities.isCreativeMode) { - GT_Utility - .applyRadioactivity(aEvent.player, GT_Utility.getRadioactivityLevel(tStack), tStack.stackSize); - final float tHeat = GT_Utility.getHeatDamageFromItem(tStack); - if (tHeat != 0.0F) { - if (tHeat > 0.0F) { - GT_Utility.applyHeatDamageFromItem(aEvent.player, tHeat, tStack); - } else { - GT_Utility.applyFrostDamage(aEvent.player, -tHeat); - } - } - } - if (tHungerEffect) { - tCount += 256; - } - - } - if (tHungerEffect) { - aEvent.player.addExhaustion(Math.max(1.0F, tCount / 666.6F)); - } - } - - public GT_ClientPreference getClientPreference(UUID aPlayerID) { - return mClientPrefernces.get(aPlayerID); - } - - public void setClientPreference(UUID aPlayerID, GT_ClientPreference aPreference) { - mClientPrefernces.put(aPlayerID, aPreference); - } - - private static List getOreDictNames(ItemStack stack) { - return Arrays.stream(OreDictionary.getOreIDs(stack)) - .mapToObj(OreDictionary::getOreName) - .collect(Collectors.toList()); - } - - @Override - public int getBurnTime(ItemStack aFuel) { - if ((aFuel == null) || (aFuel.getItem() == null)) { - return 0; - } - int rFuelValue = 0; - if ((aFuel.getItem() instanceof GT_MetaGenerated_Item)) { - final Short tFuelValue = ((GT_MetaGenerated_Item) aFuel.getItem()).mBurnValues - .get((short) aFuel.getItemDamage()); - if (tFuelValue != null) { - rFuelValue = Math.max(rFuelValue, tFuelValue); - } - } - final NBTTagCompound tNBT = aFuel.getTagCompound(); - if (tNBT != null) { - // See if we have something defined by NBT - final short tValue = tNBT.getShort("GT.ItemFuelValue"); - rFuelValue = Math.max(rFuelValue, tValue); - } else { - // If not check the ore dict - rFuelValue = Math.max( - rFuelValue, - getOreDictNames(aFuel).stream() - .mapToInt(f -> oreDictBurnTimes.getOrDefault(f, 0)) - .max() - .orElse(0)); - } - - // If we have something from the GT MetaGenerated_Item, ItemFuelValue, or OreDict return - if (rFuelValue > 0) return rFuelValue; - - // Otherwise, a few more checks - if (GT_Utility.areStacksEqual(aFuel, new ItemStack(Blocks.wooden_button, 1))) return 150; - else if (GT_Utility.areStacksEqual(aFuel, new ItemStack(Blocks.ladder, 1))) return 100; - else if (GT_Utility.areStacksEqual(aFuel, new ItemStack(Items.sign, 1))) return 600; - else if (GT_Utility.areStacksEqual(aFuel, new ItemStack(Items.wooden_door, 1))) return 600; - else if (GT_Utility.areStacksEqual(aFuel, ItemList.Block_MSSFUEL.get(1))) return 150000; - else if (GT_Utility.areStacksEqual(aFuel, ItemList.Block_SSFUEL.get(1))) return 100000; - - return 0; - } - - // ------------------------ Adds all fluids corresponding to materials ------------------------ - - public Fluid addAutoGeneratedCorrespondingFluid(Materials aMaterial) { - // If the fluid is registered as custom inside the Material's constructor then to add custom fluid - // textures go to blocks/fluids and place the .png. File should be called fluid.fluid.{unlocalised_name}.png. - // All lower case. - final String fluidTexture = aMaterial.mIconSet.is_custom ? "fluid." + aMaterial.mName.toLowerCase() - : "autogenerated"; - - return GT_FluidFactory.builder(aMaterial.mName.toLowerCase(Locale.ENGLISH)) - .withLocalizedName(aMaterial.mDefaultLocalName) - .withTextureName(fluidTexture) - .withColorRGBA(aMaterial.mRGBa) - .withStateAndTemperature(LIQUID, aMaterial.getLiquidTemperature()) - .buildAndRegister() - .configureMaterials(aMaterial) - .registerBContainers(GT_OreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L), ItemList.Cell_Empty.get(1L)) - .asFluid(); - } - - public Fluid addAutoGeneratedCorrespondingGas(Materials aMaterial) { - // If the fluid is registered as custom inside the Material's constructor then to add custom fluid - // textures go to blocks/fluids and place the .png. File should be called fluid.gas.{unlocalised_name}.png. All - // lower case. - final String fluidTexture = aMaterial.mIconSet.is_custom ? ("gas." + aMaterial.mName.toLowerCase()) - : "autogenerated"; - - return GT_FluidFactory.builder(aMaterial.mName.toLowerCase(Locale.ENGLISH)) - .withLocalizedName(aMaterial.mDefaultLocalName) - .withTextureName(fluidTexture) - .withColorRGBA(aMaterial.mRGBa) - .withStateAndTemperature(GAS, aMaterial.getGasTemperature()) - .buildAndRegister() - .configureMaterials(aMaterial) - .registerBContainers(GT_OreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L), ItemList.Cell_Empty.get(1L)) - .asFluid(); - } - - public Fluid addAutogeneratedPlasmaFluid(Materials aMaterial) { - // If the fluid is registered as custom inside the Material's constructor then to add custom fluid - // textures go to blocks/fluids and place the .png. File should be called fluid.plasma.{unlocalised_name}.png. - // All lower case. - final String fluidTexture = aMaterial.mIconSet.is_custom ? ("plasma." + aMaterial.mName.toLowerCase()) - : "plasma.autogenerated"; - - return GT_FluidFactory.builder("plasma." + aMaterial.mName.toLowerCase(Locale.ENGLISH)) - .withLocalizedName(aMaterial.mDefaultLocalName + " Plasma") - .withTextureName(fluidTexture) - .withColorRGBA(aMaterial.mMoltenRGBa) - .withStateAndTemperature(PLASMA, 10000) - .buildAndRegister() - .configureMaterials(aMaterial) - .registerContainers( - GT_OreDictUnificator.get(OrePrefixes.cellPlasma, aMaterial, 1L), - ItemList.Cell_Empty.get(1L), - aMaterial.getMolten(1) != null ? 144 : 1000) - .asFluid(); - } - - public Fluid addAutogeneratedMoltenFluid(Materials aMaterial) { - // If the fluid is registered as custom inside the Material's constructor then to add custom fluid - // textures go to blocks/fluids and place the .png. File should be called fluid.molten.{unlocalised_name}.png. - // All lower case. - final String fluidTexture = aMaterial.mIconSet.is_custom ? ("molten." + aMaterial.mName.toLowerCase()) - : "molten.autogenerated"; - - return GT_FluidFactory.builder("molten." + aMaterial.mName.toLowerCase(Locale.ENGLISH)) - .withLocalizedName("Molten " + aMaterial.mDefaultLocalName) - .withTextureName(fluidTexture) - .withColorRGBA(aMaterial.mMoltenRGBa) - .withStateAndTemperature(MOLTEN, aMaterial.mMeltingPoint < 0 ? 1000 : aMaterial.mMeltingPoint) - .buildAndRegister() - .configureMaterials(aMaterial) - .registerContainers( - GT_OreDictUnificator.get(OrePrefixes.cellMolten, aMaterial, 1L), - ItemList.Cell_Empty.get(1L), - 144) - .asFluid(); - } - - // ------------------------------------------------------------------------------------------------------------ - - public void addAutoGeneratedHydroCrackedFluids(Materials aMaterial) { - Fluid[] crackedFluids = new Fluid[3]; - String[] namePrefixes = { "lightlyhydrocracked.", "moderatelyhydrocracked.", "severelyhydrocracked." }; - OrePrefixes[] orePrefixes = { OrePrefixes.cellHydroCracked1, OrePrefixes.cellHydroCracked2, - OrePrefixes.cellHydroCracked3 }; - final Fluid uncrackedFluid; - if (aMaterial.mFluid != null) { - uncrackedFluid = aMaterial.mFluid; - } else if (aMaterial.mGas != null) { - uncrackedFluid = aMaterial.mGas; - } else return; - for (int i = 0; i < 3; i++) { - crackedFluids[i] = GT_FluidFactory.builder(namePrefixes[i] + aMaterial.mName.toLowerCase(Locale.ENGLISH)) - .withIconsFrom(uncrackedFluid) - .withLocalizedName(orePrefixes[i].mLocalizedMaterialPre + aMaterial.mDefaultLocalName) - .withColorRGBA(aMaterial.mRGBa) - .withStateAndTemperature(GAS, 775) - .buildAndRegister() - .registerBContainers( - GT_OreDictUnificator.get(orePrefixes[i], aMaterial, 1L), - ItemList.Cell_Empty.get(1L)) - .asFluid(); - - int hydrogenAmount = 2 * i + 2; - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(i + 1)) - .fluidInputs(new FluidStack(uncrackedFluid, 1000), Materials.Hydrogen.getGas(hydrogenAmount * 800)) - .fluidOutputs(new FluidStack(crackedFluids[i], 1000)) - .duration((1 + i) * SECONDS) - .eut(240) - .addTo(crackingRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Hydrogen.getCells(hydrogenAmount), GT_Utility.getIntegratedCircuit(i + 1)) - .itemOutputs(Materials.Empty.getCells(hydrogenAmount)) - .fluidInputs(new FluidStack(uncrackedFluid, 1000)) - .fluidOutputs(new FluidStack(crackedFluids[i], 800)) - .duration((8 + 4 * i) * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(RecipeMaps.chemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getCells(1), GT_Utility.getIntegratedCircuit(i + 1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(Materials.Hydrogen.getGas(hydrogenAmount * 1000)) - .fluidOutputs(new FluidStack(crackedFluids[i], 800)) - .duration((8 + 4 * i) * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(RecipeMaps.chemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(i + 1)) - .fluidInputs(new FluidStack(uncrackedFluid, 1000), Materials.Hydrogen.getGas(hydrogenAmount * 1000)) - .fluidOutputs(new FluidStack(crackedFluids[i], 800)) - .duration((4 + 2 * i) * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(RecipeMaps.multiblockChemicalReactorRecipes); - } - aMaterial.setHydroCrackedFluids(crackedFluids); - } - - public void addAutoGeneratedSteamCrackedFluids(Materials aMaterial) { - Fluid[] crackedFluids = new Fluid[3]; - String[] namePrefixes = { "lightlysteamcracked.", "moderatelysteamcracked.", "severelysteamcracked." }; - OrePrefixes[] orePrefixes = { OrePrefixes.cellSteamCracked1, OrePrefixes.cellSteamCracked2, - OrePrefixes.cellSteamCracked3 }; - final Fluid uncrackedFluid; - if (aMaterial.mFluid != null) { - uncrackedFluid = aMaterial.mFluid; - } else if (aMaterial.mGas != null) { - uncrackedFluid = aMaterial.mGas; - } else return; - for (int i = 0; i < 3; i++) { - crackedFluids[i] = GT_FluidFactory.builder(namePrefixes[i] + aMaterial.mName.toLowerCase(Locale.ENGLISH)) - .withIconsFrom(uncrackedFluid) - .withLocalizedName(orePrefixes[i].mLocalizedMaterialPre + aMaterial.mDefaultLocalName) - .withColorRGBA(aMaterial.mRGBa) - .withStateAndTemperature(GAS, 775) - .buildAndRegister() - .registerBContainers( - GT_OreDictUnificator.get(orePrefixes[i], aMaterial, 1L), - ItemList.Cell_Empty.get(1L)) - .asFluid(); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(i + 1)) - .fluidInputs(new FluidStack(uncrackedFluid, 1000), GT_ModHandler.getSteam(1000)) - .fluidOutputs(new FluidStack(crackedFluids[i], 1200)) - .duration((1 + i) * SECONDS) - .eut(240) - .addTo(crackingRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("steamCell", 1L), GT_Utility.getIntegratedCircuit(i + 1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(new FluidStack(uncrackedFluid, 1000)) - .fluidOutputs(new FluidStack(crackedFluids[i], 800)) - .duration((8 + 4 * i) * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(RecipeMaps.chemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getCells(1), GT_Utility.getIntegratedCircuit(i + 1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(GT_ModHandler.getSteam(1000)) - .fluidOutputs(new FluidStack(crackedFluids[i], 800)) - .duration((8 + 4 * i) * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(RecipeMaps.chemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getCells(1), GT_Utility.getIntegratedCircuit(i + 1)) - .itemOutputs(Materials.Empty.getCells(1)) - .fluidInputs(getFluidStack("ic2steam", 1000)) - .fluidOutputs(new FluidStack(crackedFluids[i], 800)) - .duration((8 + 4 * i) * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(RecipeMaps.chemicalReactorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(i + 1)) - .fluidInputs(new FluidStack(uncrackedFluid, 1000), GT_ModHandler.getSteam(1000)) - .fluidOutputs(new FluidStack(crackedFluids[i], 800)) - .duration((4 + 2 * i) * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(RecipeMaps.multiblockChemicalReactorRecipes); - } - aMaterial.setSteamCrackedFluids(crackedFluids); - } - - /** - * @see GT_FluidFactory#of(String, String, Materials, FluidState, int) - * @see GT_FluidFactory#of(String, String, FluidState, int) - * @deprecated use {@link GT_FluidFactory#builder} - */ - @Deprecated - public Fluid addFluid(String aName, String aLocalized, Materials aMaterial, int aState, int aTemperatureK) { - return GT_FluidFactory.of(aName, aLocalized, aMaterial, FluidState.VALID_STATES[aState], aTemperatureK); - } - - /** - * @deprecated use {@link GT_FluidFactory#builder} - */ - @SuppressWarnings({ "MethodWithTooManyParameters" }) // Deprecated method - @Deprecated - public Fluid addFluid(String aName, String aLocalized, Materials aMaterial, int aState, int aTemperatureK, - ItemStack aFullContainer, ItemStack aEmptyContainer, int aFluidAmount) { - return GT_FluidFactory.builder(aName) - .withLocalizedName(aLocalized) - .withStateAndTemperature(FluidState.fromValue(aState), aTemperatureK) - .buildAndRegister() - .configureMaterials(aMaterial) - .registerContainers(aFullContainer, aEmptyContainer, aFluidAmount) - .asFluid(); - } - - /** - * @deprecated use {@link GT_FluidFactory#builder} - */ - @Deprecated - @SuppressWarnings({ "MethodWithTooManyParameters" }) // Deprecated method - public Fluid addFluid(String aName, String aTexture, String aLocalized, Materials aMaterial, short[] aRGBa, - int aState, int aTemperatureK, ItemStack aFullContainer, ItemStack aEmptyContainer, int aFluidAmount) { - return GT_FluidFactory.builder(aName) - .withLocalizedName(aLocalized) - .withStillIconResourceLocation(new ResourceLocation(GregTech.ID, "fluids/fluid." + aTexture)) - .withColorRGBA(aRGBa) - .withStateAndTemperature(FluidState.fromValue(aState), aTemperatureK) - .buildAndRegister() - .configureMaterials(aMaterial) - .registerContainers(aFullContainer, aEmptyContainer, aFluidAmount) - .asFluid(); - } - - public File getSaveDirectory() { - return this.mUniverse == null ? null - : this.mUniverse.getSaveHandler() - .getWorldDirectory(); - } - - public long getAnimationTicks() { - return 0L; - } - - public float getPartialRenderTicks() { - return 0; - } - - public void registerUnificationEntries() { - GT_OreDictUnificator.resetUnificationEntries(); - for (OreDictEventContainer tOre : this.mEvents) { - if ((!(tOre.mEvent.Ore.getItem() instanceof GT_MetaGenerated_Item)) && (tOre.mPrefix != null) - && (tOre.mPrefix.mIsUnificatable) - && (tOre.mMaterial != null)) { - boolean checkModID = tOre.mModID != null; - - if (checkModID) { - if (tOre.mModID.equals(Names.ENDER_I_O)) { - if (tOre.mPrefix == OrePrefixes.ingot && tOre.mMaterial == Materials.DarkSteel) { - GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false); - GT_OreDictUnificator.set( - tOre.mPrefix, - tOre.mMaterial, - tOre.mEvent.Ore, - ManualOreDictTweaks.shouldOredictBeOverwritten(tOre.mModID, tOre.mEvent.Name), - true); - continue; - } - } - } - if (GT_OreDictUnificator.isBlacklisted(tOre.mEvent.Ore)) { - GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, true); - } else { - GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false); - GT_OreDictUnificator.set( - tOre.mPrefix, - tOre.mMaterial, - tOre.mEvent.Ore, - checkModID && ManualOreDictTweaks.shouldOredictBeOverwritten(tOre.mModID, tOre.mEvent.Name), - true); - } - } - } - - for (OreDictEventContainer tOre : this.mEvents) { - if (((tOre.mEvent.Ore.getItem() instanceof GT_MetaGenerated_Item)) && (tOre.mPrefix != null) - && (tOre.mPrefix.mIsUnificatable) - && (tOre.mMaterial != null)) { - if (GT_OreDictUnificator.isBlacklisted(tOre.mEvent.Ore)) { - GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, true); - } else { - GT_OreDictUnificator.addAssociation(tOre.mPrefix, tOre.mMaterial, tOre.mEvent.Ore, false); - GT_OreDictUnificator.set( - tOre.mPrefix, - tOre.mMaterial, - tOre.mEvent.Ore, - (tOre.mModID != null) - && ManualOreDictTweaks.shouldOredictBeOverwritten(tOre.mModID, tOre.mEvent.Name), - true); - } - } - } - GregTech_API.sUnificationEntriesRegistered = true; - GT_Recipe.reInit(); - } - - @SuppressWarnings("deprecation") - public void activateOreDictHandler() { - this.mOreDictActivated = true; - ProgressManager.ProgressBar progressBar = ProgressManager.push("Register materials", mEvents.size()); - - if (BetterLoadingScreen.isModLoaded()) { - GT_Values.cls_enabled = true; - try { - GT_CLS_Compat.stepMaterialsCLS(mEvents, progressBar); - } catch (IllegalAccessException e) { - GT_FML_LOGGER.catching(e); - } - } else GT_Proxy.stepMaterialsVanilla(this.mEvents, progressBar); - } - - @Deprecated - public static final HashMap> dimensionWiseChunkData = new HashMap<>(16); // stores - // chunk - // data - // that - // is - // loaded/saved - - public static final HashMap dimensionWisePollution = new HashMap<>(16); // stores - // GT_Polluttors - // objects - public static final byte GTOIL = 3, GTOILFLUID = 2, GTPOLLUTION = 1, GTMETADATA = 0, NOT_LOADED = 0, LOADED = 1; // consts - - // TO get default's fast - @Deprecated - public static int[] getDefaultChunkDataOnCreation() { - return new int[] { NOT_LOADED, 0, -1, -1 }; - } - - @Deprecated - public static int[] getDefaultChunkDataOnLoad() { - return new int[] { LOADED, 0, -1, -1 }; - } - - @SubscribeEvent - public void handleChunkLoadEvent(ChunkDataEvent.Load event) { - GT_UndergroundOil.migrate(event); - GT_Pollution.migrate(event); - } - - @SubscribeEvent - public void onBlockBreakSpeedEvent(PlayerEvent.BreakSpeed aEvent) { - if (aEvent.entityPlayer != null) { - ItemStack aStack = aEvent.entityPlayer.getCurrentEquippedItem(); - if ((aStack != null) && ((aStack.getItem() instanceof GT_MetaGenerated_Tool))) { - aEvent.newSpeed = ((GT_MetaGenerated_Tool) aStack.getItem()).onBlockBreakSpeedEvent( - aEvent.newSpeed, - aStack, - aEvent.entityPlayer, - aEvent.block, - aEvent.x, - aEvent.y, - aEvent.z, - (byte) aEvent.metadata, - aEvent); - } - } - } - - public static class OreDictEventContainer { - - public final OreDictionary.OreRegisterEvent mEvent; - public final OrePrefixes mPrefix; - public final Materials mMaterial; - public final String mModID; - - public OreDictEventContainer(OreDictionary.OreRegisterEvent aEvent, OrePrefixes aPrefix, Materials aMaterial, - String aModID) { - this.mEvent = aEvent; - this.mPrefix = aPrefix; - this.mMaterial = aMaterial; - this.mModID = ((aModID == null) || (aModID.equals("UNKNOWN")) ? null : aModID); - } - } - - @SubscribeEvent - public void onBlockEvent(BlockEvent event) { - if (event.block.getUnlocalizedName() - .equals("blockAlloyGlass")) GregTech_API.causeMachineUpdate(event.world, event.x, event.y, event.z); - } - - public static void addFullHazmatToGeneralItem(String aModID, String aItem, long aAmount, int aMeta) { - ItemStack item = GT_ModHandler.getModItem(aModID, aItem, aAmount, aMeta); - addItemToHazmatLists(item); - } - - public static void addFullHazmatToGeneralItem(String aModID, String aItem, long aAmount) { - ItemStack item = GT_ModHandler.getModItem(aModID, aItem, aAmount, W); - addItemToHazmatLists(item); - } - - public static void addFullHazmatToIC2Item(String aItem) { - ItemStack item = GT_ModHandler.getIC2Item(aItem, 1L, W); - addItemToHazmatLists(item); - } - - private static void addItemToHazmatLists(ItemStack item) { - GregTech_API.sGasHazmatList.add(item); - GregTech_API.sBioHazmatList.add(item); - GregTech_API.sFrostHazmatList.add(item); - GregTech_API.sHeatHazmatList.add(item); - GregTech_API.sRadioHazmatList.add(item); - GregTech_API.sElectroHazmatList.add(item); - } - - public static boolean providesProtection(ItemStack aStack) { - - if (GT_Utility.hasHazmatEnchant(aStack)) return true; - - boolean isGas = GT_Utility.isStackInList(aStack, GregTech_API.sGasHazmatList); - boolean isBio = GT_Utility.isStackInList(aStack, GregTech_API.sBioHazmatList); - boolean isFrost = GT_Utility.isStackInList(aStack, GregTech_API.sFrostHazmatList); - boolean isHeat = GT_Utility.isStackInList(aStack, GregTech_API.sHeatHazmatList); - boolean isRadio = GT_Utility.isStackInList(aStack, GregTech_API.sRadioHazmatList); - boolean isElectro = GT_Utility.isStackInList(aStack, GregTech_API.sElectroHazmatList); - return isGas && isBio && isFrost && isHeat && isRadio && isElectro; - } - - @SubscribeEvent - public void onItemTooltip(ItemTooltipEvent event) { - if (event.itemStack != null) { - ItemStack aStackTemp = event.itemStack; - GT_ItemStack aStack = new GT_ItemStack(aStackTemp); - if (providesProtection(aStackTemp)) { - event.toolTip.add(EnumChatFormatting.LIGHT_PURPLE + "Provides full hazmat protection."); - } - } - } -} diff --git a/src/main/java/gregtech/common/GT_RecipeAdder.java b/src/main/java/gregtech/common/GT_RecipeAdder.java deleted file mode 100644 index 8f48ec19bf..0000000000 --- a/src/main/java/gregtech/common/GT_RecipeAdder.java +++ /dev/null @@ -1,12 +0,0 @@ -package gregtech.common; - -import gregtech.api.interfaces.internal.IGT_RecipeAdder; -import gregtech.api.util.GT_RecipeBuilder; - -public class GT_RecipeAdder implements IGT_RecipeAdder { - - @Override - public GT_RecipeBuilder stdBuilder() { - return GT_RecipeBuilder.builder(); - } -} diff --git a/src/main/java/gregtech/common/GT_Server.java b/src/main/java/gregtech/common/GT_Server.java deleted file mode 100644 index 1a2d8e6b5a..0000000000 --- a/src/main/java/gregtech/common/GT_Server.java +++ /dev/null @@ -1,36 +0,0 @@ -package gregtech.common; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -public class GT_Server extends GT_Proxy { - - @Override - public boolean isServerSide() { - return true; - } - - @Override - public boolean isClientSide() { - return false; - } - - @Override - public boolean isBukkitSide() { - return false; - } - - @Override - public void doSonictronSound(ItemStack aStack, World aWorld, double aX, double aY, double aZ) {} - - @Override - public int addArmor(String aPrefix) { - return 0; - } - - @Override - public EntityPlayer getThePlayer() { - return null; - } -} diff --git a/src/main/java/gregtech/common/GT_ThaumcraftCompat.java b/src/main/java/gregtech/common/GT_ThaumcraftCompat.java deleted file mode 100644 index 43c3dce569..0000000000 --- a/src/main/java/gregtech/common/GT_ThaumcraftCompat.java +++ /dev/null @@ -1,285 +0,0 @@ -package gregtech.common; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.util.ResourceLocation; - -import gregtech.api.enums.TC_Aspects; -import gregtech.api.interfaces.internal.IThaumcraftCompat; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import thaumcraft.api.ThaumcraftApi; -import thaumcraft.api.ThaumcraftApiHelper; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.crafting.CrucibleRecipe; -import thaumcraft.api.crafting.IArcaneRecipe; -import thaumcraft.api.crafting.InfusionEnchantmentRecipe; -import thaumcraft.api.crafting.InfusionRecipe; -import thaumcraft.api.research.ResearchCategories; -import thaumcraft.api.research.ResearchCategoryList; -import thaumcraft.api.research.ResearchItem; -import thaumcraft.api.research.ResearchPage; - -public class GT_ThaumcraftCompat implements IThaumcraftCompat { - - public GT_ThaumcraftCompat() { - TC_Aspects.AER.mAspect = Aspect.AIR; - TC_Aspects.ALIENIS.mAspect = Aspect.ELDRITCH; - TC_Aspects.AQUA.mAspect = Aspect.WATER; - TC_Aspects.ARBOR.mAspect = Aspect.TREE; - TC_Aspects.AURAM.mAspect = Aspect.AURA; - TC_Aspects.BESTIA.mAspect = Aspect.BEAST; - TC_Aspects.COGNITIO.mAspect = Aspect.MIND; - TC_Aspects.CORPUS.mAspect = Aspect.FLESH; - TC_Aspects.EXANIMIS.mAspect = Aspect.UNDEAD; - TC_Aspects.FABRICO.mAspect = Aspect.CRAFT; - TC_Aspects.FAMES.mAspect = Aspect.HUNGER; - TC_Aspects.GELUM.mAspect = Aspect.COLD; - TC_Aspects.GRANUM.mAspect = Aspect.PLANT; - TC_Aspects.HERBA.mAspect = Aspect.PLANT; - TC_Aspects.HUMANUS.mAspect = Aspect.MAN; - TC_Aspects.IGNIS.mAspect = Aspect.FIRE; - TC_Aspects.INSTRUMENTUM.mAspect = Aspect.TOOL; - TC_Aspects.ITER.mAspect = Aspect.TRAVEL; - TC_Aspects.LIMUS.mAspect = Aspect.SLIME; - TC_Aspects.LUCRUM.mAspect = Aspect.GREED; - TC_Aspects.LUX.mAspect = Aspect.LIGHT; - TC_Aspects.MACHINA.mAspect = Aspect.MECHANISM; - TC_Aspects.MESSIS.mAspect = Aspect.CROP; - TC_Aspects.METALLUM.mAspect = Aspect.METAL; - TC_Aspects.METO.mAspect = Aspect.HARVEST; - TC_Aspects.MORTUUS.mAspect = Aspect.DEATH; - TC_Aspects.MOTUS.mAspect = Aspect.MOTION; - TC_Aspects.ORDO.mAspect = Aspect.ORDER; - TC_Aspects.PANNUS.mAspect = Aspect.CLOTH; - TC_Aspects.PERDITIO.mAspect = Aspect.ENTROPY; - TC_Aspects.PERFODIO.mAspect = Aspect.MINE; - TC_Aspects.PERMUTATIO.mAspect = Aspect.EXCHANGE; - TC_Aspects.POTENTIA.mAspect = Aspect.ENERGY; - TC_Aspects.PRAECANTATIO.mAspect = Aspect.MAGIC; - TC_Aspects.SANO.mAspect = Aspect.HEAL; - TC_Aspects.SENSUS.mAspect = Aspect.SENSES; - TC_Aspects.SPIRITUS.mAspect = Aspect.SOUL; - TC_Aspects.TELUM.mAspect = Aspect.WEAPON; - TC_Aspects.TERRA.mAspect = Aspect.EARTH; - TC_Aspects.TEMPESTAS.mAspect = Aspect.WEATHER; - TC_Aspects.TENEBRAE.mAspect = Aspect.DARKNESS; - TC_Aspects.TUTAMEN.mAspect = Aspect.ARMOR; - TC_Aspects.VACUOS.mAspect = Aspect.VOID; - TC_Aspects.VENENUM.mAspect = Aspect.POISON; - TC_Aspects.VICTUS.mAspect = Aspect.LIFE; - TC_Aspects.VINCULUM.mAspect = Aspect.TRAP; - TC_Aspects.VITIUM.mAspect = Aspect.TAINT; - TC_Aspects.VITREUS.mAspect = Aspect.CRYSTAL; - TC_Aspects.VOLATUS.mAspect = Aspect.FLIGHT; - - TC_Aspects.STRONTIO.mAspect = new Aspect( - "strontio", - 0xEEC2B3, - new Aspect[] { Aspect.MIND, Aspect.ENTROPY }, - new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.STRONTIO.name() + ".png"), - 1); - TC_Aspects.NEBRISUM.mAspect = new Aspect( - "nebrisum", - 0xEEEE7E, - new Aspect[] { Aspect.MINE, Aspect.GREED }, - new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.NEBRISUM.name() + ".png"), - 1); - TC_Aspects.ELECTRUM.mAspect = new Aspect( - "electrum", - 0xC0EEEE, - new Aspect[] { Aspect.ENERGY, Aspect.MECHANISM }, - new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.ELECTRUM.name() + ".png"), - 1); - TC_Aspects.MAGNETO.mAspect = new Aspect( - "magneto", - 0xC0C0C0, - new Aspect[] { Aspect.METAL, Aspect.TRAVEL }, - new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.MAGNETO.name() + ".png"), - 1); - TC_Aspects.RADIO.mAspect = new Aspect( - "radio", - 0xC0FFC0, - new Aspect[] { Aspect.LIGHT, Aspect.ENERGY }, - new ResourceLocation("gregtech:textures/aspects/" + TC_Aspects.RADIO.name() + ".png"), - 1); - - GT_LanguageManager.addStringLocalization("tc.aspect.strontio", "Stupidness, Incompetence"); - GT_LanguageManager.addStringLocalization("tc.aspect.nebrisum", "Cheatyness, Raiding"); - GT_LanguageManager.addStringLocalization("tc.aspect.electrum", "Electricity, Lightning"); - GT_LanguageManager.addStringLocalization("tc.aspect.magneto", "Magnetism, Attraction"); - GT_LanguageManager.addStringLocalization("tc.aspect.radio", "Radiation"); - } - - private static AspectList getAspectList(List aAspects) { - AspectList rAspects = new AspectList(); - TC_Aspects.TC_AspectStack tAspect; - for (Iterator i$ = aAspects.iterator(); i$.hasNext(); rAspects - .add((Aspect) tAspect.mAspect.mAspect, (int) tAspect.mAmount)) { - tAspect = i$.next(); - } - return rAspects; - } - - @Override - public Object addResearch(String aResearch, String aName, String aText, String[] aParentResearches, - String aCategory, ItemStack aIcon, int aComplexity, int aType, int aX, int aY, - List aAspects, ItemStack[] aResearchTriggers, Object[] aPages) { - ResearchCategoryList tCategory = ResearchCategories.getResearchList(aCategory); - if (tCategory == null) { - return null; - } - for (ResearchItem tResearch : tCategory.research.values()) { - if ((tResearch.displayColumn == aX) && (tResearch.displayRow == aY)) { - aX += (aX > 0 ? 5 : -5); - aY += (aY > 0 ? 5 : -5); - } - } - ResearchItem rResearch = new ResearchItem( - aResearch, - aCategory, - getAspectList(aAspects), - aX, - aY, - aComplexity, - aIcon); - ArrayList tPages = new ArrayList<>(aPages.length); - GT_LanguageManager.addStringLocalization("tc.research_name." + aResearch, aName); - GT_LanguageManager.addStringLocalization("tc.research_text." + aResearch, "[GT] " + aText); - for (Object tPage : aPages) { - if ((tPage instanceof String)) { - tPages.add(new ResearchPage((String) tPage)); - } else if ((tPage instanceof IRecipe)) { - tPages.add(new ResearchPage((IRecipe) tPage)); - } else if ((tPage instanceof IArcaneRecipe)) { - tPages.add(new ResearchPage((IArcaneRecipe) tPage)); - } else if ((tPage instanceof CrucibleRecipe)) { - tPages.add(new ResearchPage((CrucibleRecipe) tPage)); - } else if ((tPage instanceof InfusionRecipe)) { - tPages.add(new ResearchPage((InfusionRecipe) tPage)); - } else if ((tPage instanceof InfusionEnchantmentRecipe)) { - tPages.add(new ResearchPage((InfusionEnchantmentRecipe) tPage)); - } - } - if ((aType & 0x40) != 0) { - rResearch.setAutoUnlock(); - } - if ((aType & 0x1) != 0) { - rResearch.setSecondary(); - } - if ((aType & 0x20) != 0) { - rResearch.setSpecial(); - } - if ((aType & 0x8) != 0) { - rResearch.setVirtual(); - } - if ((aType & 0x4) != 0) { - rResearch.setHidden(); - } - if ((aType & 0x10) != 0) { - rResearch.setRound(); - } - if ((aType & 0x2) != 0) { - rResearch.setStub(); - } - if (aParentResearches != null) { - ArrayList tParentResearches = new ArrayList<>(); - Collections.addAll(tParentResearches, aParentResearches); - if (tParentResearches.size() > 0) { - rResearch.setParents(tParentResearches.toArray(new String[0])); - rResearch.setConcealed(); - } - } - if (aResearchTriggers != null) { - rResearch.setItemTriggers(aResearchTriggers); - rResearch.setHidden(); - } - rResearch.setPages(tPages.toArray(new ResearchPage[0])); - return rResearch.registerResearchItem(); - } - - @Override - public Object addCrucibleRecipe(String aResearch, Object aInput, ItemStack aOutput, - List aAspects) { - if ((GT_Utility.isStringInvalid(aResearch)) || (aInput == null) - || (aOutput == null) - || (aAspects == null) - || (aAspects.isEmpty())) { - return null; - } - return ThaumcraftApi.addCrucibleRecipe( - aResearch, - GT_Utility.copyOrNull(aOutput), - ((aInput instanceof ItemStack)) || ((aInput instanceof ArrayList)) ? aInput : aInput.toString(), - getAspectList(aAspects)); - } - - @Override - public Object addInfusionRecipe(String aResearch, ItemStack aMainInput, ItemStack[] aSideInputs, ItemStack aOutput, - int aInstability, List aAspects) { - if ((GT_Utility.isStringInvalid(aResearch)) || (aMainInput == null) - || (aSideInputs == null) - || (aOutput == null) - || (aAspects == null) - || (aAspects.isEmpty())) { - return null; - } - return ThaumcraftApi.addInfusionCraftingRecipe( - aResearch, - GT_Utility.copyOrNull(aOutput), - aInstability, - getAspectList(aAspects), - aMainInput, - aSideInputs); - } - - @Override - public Object addInfusionEnchantmentRecipe(String aResearch, Enchantment aEnchantment, int aInstability, - List aAspects, ItemStack[] aSideInputs) { - if ((GT_Utility.isStringInvalid(aResearch)) || (aSideInputs == null) - || (aAspects == null) - || (aEnchantment == null) - || (aAspects.isEmpty())) { - return null; - } - return ThaumcraftApi - .addInfusionEnchantmentRecipe(aResearch, aEnchantment, aInstability, getAspectList(aAspects), aSideInputs); - } - - @Override - public boolean registerThaumcraftAspectsToItem(ItemStack aExampleStack, List aAspects, - String aOreDict) { - if (aAspects.isEmpty()) return false; - ThaumcraftApi.registerObjectTag(aOreDict, getAspectList(aAspects)); - return true; - } - - @Override - public boolean registerThaumcraftAspectsToItem(ItemStack aStack, List aAspects, - boolean aAdditive) { - if (aAspects.isEmpty()) return false; - if (aAdditive) { - ThaumcraftApi.registerComplexObjectTag(aStack, getAspectList(aAspects)); - return true; - } - AspectList tAlreadyRegisteredAspects = ThaumcraftApiHelper.getObjectAspects(aStack); - if (tAlreadyRegisteredAspects == null || tAlreadyRegisteredAspects.size() <= 0) { - ThaumcraftApi.registerObjectTag(aStack, getAspectList(aAspects)); - } - return true; - } - - @Override - public boolean registerPortholeBlacklistedBlock(Block aBlock) { - ThaumcraftApi.portableHoleBlackList.add(aBlock); - return true; - } -} diff --git a/src/main/java/gregtech/common/GT_UndergroundOil.java b/src/main/java/gregtech/common/GT_UndergroundOil.java deleted file mode 100644 index 17a5662c09..0000000000 --- a/src/main/java/gregtech/common/GT_UndergroundOil.java +++ /dev/null @@ -1,339 +0,0 @@ -package gregtech.common; - -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; -import java.util.Objects; -import java.util.WeakHashMap; - -import javax.annotation.Nullable; -import javax.annotation.ParametersAreNonnullByDefault; - -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.event.world.ChunkDataEvent; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.tuple.Pair; - -import gregtech.GT_Mod; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_UO_Dimension; -import gregtech.api.objects.GT_UO_Fluid; -import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_ChunkAssociatedData; - -/** - * Created by Tec on 29.04.2017. - */ -public class GT_UndergroundOil { - - public static final short DIVIDER = 5000; - private static final GT_UndergroundOilStore STORAGE = new GT_UndergroundOilStore(); - private static final ChunkData NIL_FLUID_STACK = new ChunkData(-1, null, null, false); - - /** - * Effectively just call {@code undergroundOil(te, -1)} for you - * - * @see #undergroundOil(World, int, int, float) - */ - public static FluidStack undergroundOilReadInformation(IGregTechTileEntity te) { - return undergroundOil( - te.getWorld() - .getChunkFromBlockCoords(te.getXCoord(), te.getZCoord()), - -1); - } - - /** - * Effectively just call {@code undergroundOil(chunk, -1)} for you - * - * @see #undergroundOil(World, int, int, float) - */ - public static FluidStack undergroundOilReadInformation(Chunk chunk) { - return undergroundOil(chunk, -1); - } - - /** @see #undergroundOil(World, int, int, float) */ - public static FluidStack undergroundOil(IGregTechTileEntity te, float readOrDrainCoefficient) { - return undergroundOil( - te.getWorld() - .getChunkFromBlockCoords(te.getXCoord(), te.getZCoord()), - readOrDrainCoefficient); - } - - // Returns whole content for information purposes -> when drainSpeedCoefficient < 0 - // Else returns extracted fluidStack if amount > 0, or null otherwise - /** @see #undergroundOil(World, int, int, float) */ - public static FluidStack undergroundOil(Chunk chunk, float readOrDrainCoefficient) { - return undergroundOil(chunk.worldObj, chunk.xPosition, chunk.zPosition, readOrDrainCoefficient); - } - - /** - * Pump fluid or read info. - * - * @param w a remote World. For a WorldClient it will always tell you null - * @param chunkX chunk coordinate X, i.e. blockX >> 4 - * @param chunkZ chunk coordinate Z, i.e. blockZ >> 4 - * @param readOrDrainCoefficient how fast to pump. The higher the faster. use negative to read expected current - * output - * @return null if nothing here, or depleted already, or a client side world - */ - public static FluidStack undergroundOil(World w, int chunkX, int chunkZ, float readOrDrainCoefficient) { - if (w.isRemote) return null; // troublemakers go away - ChunkData chunkData = STORAGE.get(w, chunkX, chunkZ); - if (chunkData.getVein() == null || chunkData.getFluid() == null) // nothing here... - return null; - // do stuff on it if needed - FluidStack fluidInChunk = new FluidStack(chunkData.getFluid(), 0); - if (readOrDrainCoefficient >= 0) { - int fluidExtracted = (int) Math.floor(chunkData.getAmount() * (double) readOrDrainCoefficient / DIVIDER); - double averageDecrease = chunkData.getVein().DecreasePerOperationAmount * (double) readOrDrainCoefficient; - int decrease = (int) Math.ceil(averageDecrease); - if (fluidExtracted <= 0 || chunkData.amount <= decrease) { // decrease - here it is max value of extraction - // for easy check - chunkData.setAmount(0); - } else { - fluidInChunk.amount = fluidExtracted; // give appropriate amount - if (XSTR_INSTANCE.nextFloat() < (decrease - averageDecrease)) decrease--; // use XSTR_INSTANCE to - // "subtract double from int" - // ex. - // averageDecrease=3.9 - // decrease= ceil from 3.9 = 4 - // decrease-averageDecrease=0.1 -> chance to subtract 1 - // if XSTR_INSTANCE is < chance then subtract 1 - chunkData.changeAmount(-decrease); // diminish amount, "randomly" adjusted to double value - // (averageDecrease) - } - } else { // just get info - if (chunkData.amount <= DIVIDER) { - chunkData.setAmount(0); - } else { - // get the expected current output - fluidInChunk.amount = (int) Math - .floor(chunkData.getAmount() * (double) -readOrDrainCoefficient / DIVIDER); - } - } - return fluidInChunk; - } - - /** - * Get the deposit as if it is never exploited - * - * @return UO fluid kind and amount, or null if nothing here. - */ - public static Pair getPristineAmount(World world, int chunkX, int chunkZ) { - int dimensionId = world.provider.dimensionId; - GT_UO_Dimension dimension = GT_Mod.gregtechproxy.mUndergroundOil.GetDimension(dimensionId); - if (dimension == null) return null; - // prepare RNG - final XSTR tVeinRNG = new XSTR(world.getSeed() + dimensionId * 2L + (chunkX >> 3) + 8267L * (chunkZ >> 3)); - GT_UO_Fluid uoFluid = dimension.getRandomFluid(tVeinRNG); - // nothing here :( - if (uoFluid == null || uoFluid.getFluid() == null) return null; - // offset each chunk's fluid amount by +-25% - // discard random values not for current chunk - int veinAverage = uoFluid.getRandomAmount(tVeinRNG); - for (int i = 0; i < (((chunkX & 0x7) << 3) | chunkZ & 0x7); i++) { - tVeinRNG.next(24); - } - int amount = (int) ((float) veinAverage * (0.75f + (tVeinRNG.nextFloat() / 2f))); - return Pair.of(uoFluid, amount); - } - - static void migrate(ChunkDataEvent.Load e) { - if (e.getData() - .hasKey("GTOIL") - && e.getData() - .hasKey("GTOILFLUID")) { - ChunkData chunkData = STORAGE.get(e.getChunk()); - Fluid fluid = chunkData.getFluid(); - if (fluid != null && fluid.getID() == e.getData() - .getInteger("GTOILFLUID")) chunkData.setAmount( - Math.min( - chunkData.getAmount(), - e.getData() - .getInteger("GTOIL"))); - } - } - - /** - * Revamped UO store. - *

- * Primary functionality: - * - *

    - *
  • Decouple data storage with chunk, making it possible to pump oil from unloaded chunks
  • - *
  • Regen detection. If fluid generation config is changed, chunk fluid will be regenerated.
  • - *
- * - *

Serialized form

- *

- * Since the exact file layout is controlled by the super class, here we only concern how each chunk's data is - * written. - *

Form A: Empty Chunk

- *
    - *
  1. 4 bytes of 0
  2. - *
- * - *

Form B: Normal Chunk

- *
    - *
  1. 4 bytes unsigned integer. Vein Hash.
  2. - *
  3. UTF string. Vein Key.
  4. - *
  5. 4 bytes signed integer. Fluid amount.
  6. - *
- * - * @author glease - */ - @ParametersAreNonnullByDefault - private static class GT_UndergroundOilStore extends GT_ChunkAssociatedData { - - private static final WeakHashMap hashes = new WeakHashMap<>(); - - private GT_UndergroundOilStore() { - super("UO", GT_UndergroundOil.ChunkData.class, 64, (byte) 0, false); - } - - @Override - protected void writeElement(DataOutput output, ChunkData element, World world, int chunkX, int chunkZ) - throws IOException { - /* see class javadoc for explanation */ - output.writeInt(element.getVeinHash()); - if (element.getVeinKey() == null) return; - output.writeUTF(element.getVeinKey()); - if (element.getAmount() > 0 && element.getFluid() != null) { - output.writeInt(element.getAmount()); - } else { - output.writeInt(-1); - } - } - - @Override - protected GT_UndergroundOil.ChunkData readElement(DataInput input, int version, World world, int chunkX, - int chunkZ) throws IOException { - /* see class javadoc for explanation */ - if (version != 0) throw new IOException("Region file corrupted"); - GT_UndergroundOil.ChunkData pristine = createElement(world, chunkX, chunkZ); - int hash = input.readInt(); - String veinKey = hash != 0 ? input.readUTF() : null; - int amount = hash != 0 ? input.readInt() : -1; - if (hash != pristine.veinHash || !Objects.equals(veinKey, pristine.getVeinKey())) { - // vein config changed. use regen-ed data. - return pristine; - } - if (hash == 0) return NIL_FLUID_STACK; - return new GT_UndergroundOil.ChunkData( - amount, - GT_Mod.gregtechproxy.mUndergroundOil.GetDimension(world.provider.dimensionId) - .getUOFluid(veinKey), - veinKey); - } - - @Override - protected GT_UndergroundOil.ChunkData createElement(World world, int chunkX, int chunkZ) { - Pair pristine = getPristineAmount(world, chunkX, chunkZ); - if (pristine == null) return NIL_FLUID_STACK; - int dimensionId = world.provider.dimensionId; - GT_UO_Dimension dimension = GT_Mod.gregtechproxy.mUndergroundOil.GetDimension(dimensionId); - return new GT_UndergroundOil.ChunkData( - pristine.getRight(), - pristine.getLeft(), - dimension.getUOFluidKey(pristine.getLeft()), - false); - } - - private static int hash(@Nullable GT_UO_Fluid fluid) { - if (fluid == null) return 0; - int result = fluid.Registry.hashCode(); - result = 31 * result + fluid.MaxAmount; - result = 31 * result + fluid.MinAmount; - result = 31 * result + fluid.Chance; - result = 31 * result + fluid.DecreasePerOperationAmount; - return result == 0 ? 1 : result; - } - } - - /** - * Represent the amount of fluid in a given chunk. - */ - private static final class ChunkData implements GT_ChunkAssociatedData.IData { - - private final Fluid fluid; - - @Nullable - private final GT_UO_Fluid vein; - - private final String veinKey; - private final int veinHash; - private int amount; - private boolean dirty; - - private ChunkData(int amount, GT_UO_Fluid veinKey, String veinID) { - this(amount, veinKey, veinID, true); - } - - private ChunkData(int amount, @Nullable GT_UO_Fluid vein, @Nullable String veinKey, boolean dirty) { - this.amount = amount; - this.vein = vein; - this.dirty = dirty; - if (vein == null) { - fluid = null; - this.veinKey = null; - veinHash = 0; - } else { - fluid = vein.getFluid(); - this.veinKey = veinKey; - veinHash = GT_UndergroundOilStore.hashes.computeIfAbsent(vein, GT_UndergroundOilStore::hash); - } - } - - /** - * The current fluid type. {@code null} if vein is generated to be empty. - */ - @Nullable - public Fluid getFluid() { - return fluid; - } - - /** - * Current fluid amount. Might be 0 if empty. Cannot be negative - */ - public int getAmount() { - return amount; - } - - public void setAmount(int amount) { - if (this.amount != amount) dirty = true; - this.amount = Math.max(0, amount); - } - - public void changeAmount(int delta) { - if (delta != 0) dirty = true; - this.amount = Math.max(amount + delta, 0); - } - - @Nullable - public GT_UO_Fluid getVein() { - return vein; - } - - /** - * The vein ID. Might be null if generated to be empty. - */ - @Nullable - public String getVeinKey() { - return veinKey; - } - - public int getVeinHash() { - return veinHash; - } - - @Override - public boolean isSameAsDefault() { - return !dirty; - } - } -} diff --git a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java deleted file mode 100644 index 718b682916..0000000000 --- a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_Layer.java +++ /dev/null @@ -1,442 +0,0 @@ -package gregtech.common; - -import static gregtech.api.enums.GT_Values.debugOrevein; -import static gregtech.api.enums.GT_Values.oreveinPlacerOres; -import static gregtech.api.enums.GT_Values.oreveinPlacerOresMultiplier; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraft.world.WorldProviderEnd; -import net.minecraft.world.WorldProviderHell; -import net.minecraft.world.WorldProviderSurface; -import net.minecraft.world.chunk.IChunkProvider; - -import bloodasp.galacticgreg.api.enums.DimensionDef; -import gregtech.api.GregTech_API; -import gregtech.api.util.GT_Log; -import gregtech.api.world.GT_Worldgen; -import gregtech.common.blocks.GT_TileEntity_Ores; - -public class GT_Worldgen_GT_Ore_Layer extends GT_Worldgen { - - public static ArrayList sList = new ArrayList<>(); - public static int sWeight = 0; - public final short mMinY; - public final short mMaxY; - public final short mWeight; - public final short mDensity; - public final short mSize; - public final short mPrimaryMeta; - public final short mSecondaryMeta; - public final short mBetweenMeta; - public final short mSporadicMeta; - public final String mRestrictBiome; - public final boolean mOverworld; - public final boolean mNether; - public final boolean mEnd; - public final boolean mEndAsteroid; - public final boolean twilightForest; - public static final int WRONG_BIOME = 0; - public static final int WRONG_DIMENSION = 1; - public static final int NO_ORE_IN_BOTTOM_LAYER = 2; - public static final int NO_OVERLAP = 3; - public static final int ORE_PLACED = 4; - public static final int NO_OVERLAP_AIR_BLOCK = 5; - public final String aTextWorldgen = "worldgen."; - - public Class[] mAllowedProviders; - - public GT_Worldgen_GT_Ore_Layer(OreMixBuilder mix) { - super(mix.oreMixName, sList, mix.enabledByDefault); - this.mOverworld = mix.dimsEnabled.getOrDefault(OreMixBuilder.OW, false); - this.mNether = mix.dimsEnabled.getOrDefault(OreMixBuilder.NETHER, false); - this.mEnd = mix.dimsEnabled.getOrDefault(OreMixBuilder.THE_END, false); - this.mEndAsteroid = mix.dimsEnabled - .getOrDefault(DimensionDef.EndAsteroids.modDimensionDef.getDimensionName(), false); - this.twilightForest = mix.dimsEnabled.getOrDefault(OreMixBuilder.TWILIGHT_FOREST, false); - this.mMinY = ((short) mix.minY); - short mMaxY = ((short) mix.maxY); - if (mMaxY < (this.mMinY + 9)) { - GT_Log.out.println("Oremix " + this.mWorldGenName + " has invalid Min/Max heights!"); - mMaxY = (short) (this.mMinY + 9); - } - this.mMaxY = mMaxY; - this.mWeight = (short) mix.weight; - this.mDensity = (short) mix.density; - this.mSize = (short) Math.max(1, mix.size); - this.mPrimaryMeta = (short) mix.primary.mMetaItemSubID; - this.mSecondaryMeta = (short) mix.secondary.mMetaItemSubID; - this.mBetweenMeta = (short) mix.between.mMetaItemSubID; - this.mSporadicMeta = (short) mix.sporadic.mMetaItemSubID; - this.mRestrictBiome = "None"; - - if (this.mEnabled) { - sWeight += this.mWeight; - } - - List allowedProviders = new ArrayList<>(); - if (this.mNether) { - allowedProviders.add(WorldProviderHell.class); - } - - if (this.mOverworld) { - allowedProviders.add(WorldProviderSurface.class); - } - - if (this.mEnd) { - allowedProviders.add(WorldProviderEnd.class); - } - mAllowedProviders = allowedProviders.toArray(new Class[allowedProviders.size()]); - } - - @Override - public int executeWorldgenChunkified(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, - int aChunkZ, int aSeedX, int aSeedZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { - if (mWorldGenName.equals("NoOresInVein")) { - if (debugOrevein) GT_Log.out.println(" NoOresInVein"); - // Return a special empty orevein - return ORE_PLACED; - } - - if (!isGenerationAllowed(aWorld, mAllowedProviders)) { - // The following code can be used for debugging, but it spams in logs - // if (debugOrevein) { GT_Log.out.println( "Wrong dimension" ); } - return WRONG_DIMENSION; - } - - if (!this.mRestrictBiome.equals("None") && !(this.mRestrictBiome.equals(aBiome))) { - return WRONG_BIOME; - } - // For optimal performance, this should be done upstream. Meh - String tDimensionName = aWorld.provider.getDimensionName(); - boolean isUnderdark = tDimensionName.equals("Underdark"); - - int[] placeCount = new int[4]; - - int tMinY = mMinY + aRandom.nextInt(mMaxY - mMinY - 5); - // Determine West/East ends of orevein - int wXVein = aSeedX - aRandom.nextInt(mSize); // West side - int eXVein = aSeedX + 16 + aRandom.nextInt(mSize); - // Limit Orevein to only blocks present in current chunk - int wX = Math.max(wXVein, aChunkX + 2); // Bias placement by 2 blocks to prevent worldgen cascade. - int eX = Math.min(eXVein, aChunkX + 2 + 16); - - // Get a block at the center of the chunk and the bottom of the orevein. - Block tBlock = aWorld.getBlock(aChunkX + 7, tMinY, aChunkZ + 9); - - if (wX >= eX) { // No overlap between orevein and this chunk exists in X - if (tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.stone) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.netherrack) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.end_stone) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, GregTech_API.sBlockGranites) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, GregTech_API.sBlockStones)) { - // Didn't reach, but could have placed. Save orevein for future use. - return NO_OVERLAP; - } else { - // Didn't reach, but couldn't place in test spot anywys, try for another orevein - return NO_OVERLAP_AIR_BLOCK; - } - } - // Determine North/Sound ends of orevein - int nZVein = aSeedZ - aRandom.nextInt(mSize); - int sZVein = aSeedZ + 16 + aRandom.nextInt(mSize); - - int nZ = Math.max(nZVein, aChunkZ + 2); // Bias placement by 2 blocks to prevent worldgen cascade. - int sZ = Math.min(sZVein, aChunkZ + 2 + 16); - if (nZ >= sZ) { // No overlap between orevein and this chunk exists in Z - if (tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.stone) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.netherrack) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.end_stone) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, GregTech_API.sBlockGranites) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, GregTech_API.sBlockStones)) { - // Didn't reach, but could have placed. Save orevein for future use. - return NO_OVERLAP; - } else { - // Didn't reach, but couldn't place in test spot anywys, try for another orevein - return NO_OVERLAP_AIR_BLOCK; - } - } - - if (debugOrevein) { - GT_Log.out.print( - "Trying Orevein:" + this.mWorldGenName - + " Dimension=" - + tDimensionName - + " mX=" - + aChunkX / 16 - + " mZ=" - + aChunkZ / 16 - + " oreseedX=" - + aSeedX / 16 - + " oreseedZ=" - + aSeedZ / 16 - + " cY=" - + tMinY); - } - // Adjust the density down the more chunks we are away from the oreseed. The 5 chunks surrounding the seed - // should always be max density due to truncation of Math.sqrt(). - int localDensity = Math.max( - 1, - this.mDensity / ((int) Math - .sqrt(2 + Math.pow(aChunkX / 16 - aSeedX / 16, 2) + Math.pow(aChunkZ / 16 - aSeedZ / 16, 2)))); - - // To allow for early exit due to no ore placed in the bottom layer (probably because we are in the sky), unroll - // 1 pass through the loop - // Now we do bottom-level-first oregen, and work our way upwards. - // Layer -1 Secondary and Sporadic - int level = tMinY - 1; // Dunno why, but the first layer is actually played one below tMinY. Go figure. - for (int tX = wX; tX < eX; tX++) { - int placeX = Math - .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); - for (int tZ = nZ; tZ < sZ; tZ++) { - int placeZ = Math - .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); - if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mSecondaryMeta > 0)) { - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mSecondaryMeta, false, isUnderdark)) { - placeCount[1]++; - } - } else - if ((aRandom.nextInt(7) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) - placeCount[3]++; - } - } - } - if ((placeCount[1] + placeCount[3]) == 0) { - if (debugOrevein) GT_Log.out.println(" No ore in bottom layer"); - return NO_ORE_IN_BOTTOM_LAYER; // Exit early, didn't place anything in the bottom layer - } - // Layers 0 & 1 Secondary and Sporadic - for (level = tMinY; level < (tMinY + 2); level++) { - for (int tX = wX; tX < eX; tX++) { - int placeX = Math - .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); - for (int tZ = nZ; tZ < sZ; tZ++) { - int placeZ = Math.max( - 1, - Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); - if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mSecondaryMeta > 0)) { - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mSecondaryMeta, false, isUnderdark)) { - placeCount[1]++; - } - } else if ((aRandom.nextInt(7) == 0) - && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) - placeCount[3]++; - } - } - } - } - // Layer 2 is Secondary, in-between, and sporadic - for (int tX = wX; tX < eX; tX++) { - int placeX = Math - .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); - for (int tZ = nZ; tZ < sZ; tZ++) { - int placeZ = Math - .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); - if ((aRandom.nextInt(2) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mBetweenMeta > 0)) { // Between are reduce by 1/2 to compensate - if (GT_TileEntity_Ores.setOreBlock(aWorld, tX, level, tZ, this.mBetweenMeta, false, isUnderdark)) { - placeCount[2]++; - } - } else if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mSecondaryMeta > 0)) { - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mSecondaryMeta, false, isUnderdark)) { - placeCount[1]++; - } - } else - if ((aRandom.nextInt(7) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) - placeCount[3]++; - } - } - } - level++; // Increment level to next layer - // Layer 3 is In-between, and sporadic - for (int tX = wX; tX < eX; tX++) { - int placeX = Math - .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); - for (int tZ = nZ; tZ < sZ; tZ++) { - int placeZ = Math - .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); - if ((aRandom.nextInt(2) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mBetweenMeta > 0)) { // Between are reduce by 1/2 to compensate - if (GT_TileEntity_Ores.setOreBlock(aWorld, tX, level, tZ, this.mBetweenMeta, false, isUnderdark)) { - placeCount[2]++; - } - } else - if ((aRandom.nextInt(7) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) - placeCount[3]++; - } - } - } - level++; // Increment level to next layer - // Layer 4 is In-between, Primary and sporadic - for (int tX = wX; tX < eX; tX++) { - int placeX = Math - .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); - for (int tZ = nZ; tZ < sZ; tZ++) { - int placeZ = Math - .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); - if ((aRandom.nextInt(2) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mBetweenMeta > 0)) { // Between are reduce by 1/2 to compensate - if (GT_TileEntity_Ores.setOreBlock(aWorld, tX, level, tZ, this.mBetweenMeta, false, isUnderdark)) { - placeCount[2]++; - } - } else - if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mPrimaryMeta > 0)) { - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mPrimaryMeta, false, isUnderdark)) { - placeCount[1]++; - } - } else if ((aRandom.nextInt(7) == 0) - && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) - placeCount[3]++; - } - } - } - level++; // Increment level to next layer - // Layer 5 is In-between, Primary and sporadic - for (int tX = wX; tX < eX; tX++) { - int placeX = Math - .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); - for (int tZ = nZ; tZ < sZ; tZ++) { - int placeZ = Math - .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); - if ((aRandom.nextInt(2) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mBetweenMeta > 0)) { // Between are reduce by 1/2 to compensate - if (GT_TileEntity_Ores.setOreBlock(aWorld, tX, level, tZ, this.mBetweenMeta, false, isUnderdark)) { - placeCount[2]++; - } - } else - if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mPrimaryMeta > 0)) { - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mPrimaryMeta, false, isUnderdark)) { - placeCount[1]++; - } - } else if ((aRandom.nextInt(7) == 0) - && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) - placeCount[3]++; - } - } - } - level++; // Increment level to next layer - // Layer 6 is Primary and sporadic - for (int tX = wX; tX < eX; tX++) { - int placeX = Math - .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); - for (int tZ = nZ; tZ < sZ; tZ++) { - int placeZ = Math - .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); - if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mPrimaryMeta > 0)) { - if (GT_TileEntity_Ores.setOreBlock(aWorld, tX, level, tZ, this.mPrimaryMeta, false, isUnderdark)) { - placeCount[1]++; - } - } else - if ((aRandom.nextInt(7) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) - placeCount[3]++; - } - } - } - level++; // Increment level to next layer - // Layer 7 is Primary and sporadic - for (int tX = wX; tX < eX; tX++) { - int placeX = Math - .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); - for (int tZ = nZ; tZ < sZ; tZ++) { - int placeZ = Math - .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); - if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mPrimaryMeta > 0)) { - if (GT_TileEntity_Ores.setOreBlock(aWorld, tX, level, tZ, this.mPrimaryMeta, false, isUnderdark)) { - placeCount[1]++; - } - } else - if ((aRandom.nextInt(7) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) - && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate - if (GT_TileEntity_Ores - .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) - placeCount[3]++; - } - } - } - // Place small ores for the vein - if (oreveinPlacerOres) { - int nSmallOres = (eX - wX) * (sZ - nZ) * this.mDensity / 10 * oreveinPlacerOresMultiplier; - // Small ores are placed in the whole chunk in which the vein appears. - for (int nSmallOresCount = 0; nSmallOresCount < nSmallOres; nSmallOresCount++) { - int tX = aRandom.nextInt(16) + aChunkX + 2; - int tZ = aRandom.nextInt(16) + aChunkZ + 2; - int tY = aRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. - if (this.mPrimaryMeta > 0) - GT_TileEntity_Ores.setOreBlock(aWorld, tX, tY, tZ, this.mPrimaryMeta, true, isUnderdark); - tX = aRandom.nextInt(16) + aChunkX + 2; - tZ = aRandom.nextInt(16) + aChunkZ + 2; - tY = aRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. - if (this.mSecondaryMeta > 0) - GT_TileEntity_Ores.setOreBlock(aWorld, tX, tY, tZ, this.mSecondaryMeta, true, isUnderdark); - tX = aRandom.nextInt(16) + aChunkX + 2; - tZ = aRandom.nextInt(16) + aChunkZ + 2; - tY = aRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. - if (this.mBetweenMeta > 0) - GT_TileEntity_Ores.setOreBlock(aWorld, tX, tY, tZ, this.mBetweenMeta, true, isUnderdark); - tX = aRandom.nextInt(16) + aChunkX + 2; - tZ = aRandom.nextInt(16) + aChunkZ + 2; - tY = aRandom.nextInt(190) + 10; // Y height can vary from 10 to 200 for small ores. - if (this.mSporadicMeta > 0) - GT_TileEntity_Ores.setOreBlock(aWorld, tX, tY, tZ, this.mSporadicMeta, true, isUnderdark); - } - } - if (debugOrevein) { - GT_Log.out.println( - " wXVein" + wXVein - + " eXVein" - + eXVein - + " nZVein" - + nZVein - + " sZVein" - + sZVein - + " locDen=" - + localDensity - + " Den=" - + this.mDensity - + " Sec=" - + placeCount[1] - + " Spo=" - + placeCount[3] - + " Bet=" - + placeCount[2] - + " Pri=" - + placeCount[0]); - } - // Something (at least the bottom layer must have 1 block) must have been placed, return true - return ORE_PLACED; - } -} diff --git a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java b/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java deleted file mode 100644 index ef01c2ea0f..0000000000 --- a/src/main/java/gregtech/common/GT_Worldgen_GT_Ore_SmallPieces.java +++ /dev/null @@ -1,107 +0,0 @@ -package gregtech.common; - -import static gregtech.api.enums.GT_Values.debugSmallOres; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import net.minecraft.world.World; -import net.minecraft.world.WorldProviderEnd; -import net.minecraft.world.WorldProviderHell; -import net.minecraft.world.WorldProviderSurface; -import net.minecraft.world.chunk.IChunkProvider; - -import gregtech.api.GregTech_API; -import gregtech.api.util.GT_Log; -import gregtech.api.world.GT_Worldgen; -import gregtech.common.blocks.GT_TileEntity_Ores; - -public class GT_Worldgen_GT_Ore_SmallPieces extends GT_Worldgen { - - public final short mMinY; - public final short mMaxY; - public final short mAmount; - public final short mMeta; - public final boolean mOverworld; - public final boolean mNether; - public final boolean mEnd; - public final boolean twilightForest; - public final String mBiome; - public static ArrayList sList = new ArrayList<>(); - - public Class[] mAllowedProviders; - - public GT_Worldgen_GT_Ore_SmallPieces(SmallOreBuilder ore) { - super(ore.smallOreName, GregTech_API.sWorldgenList, ore.enabledByDefault); - this.mOverworld = ore.dimsEnabled.getOrDefault(SmallOreBuilder.OW, false); - this.mNether = ore.dimsEnabled.getOrDefault(SmallOreBuilder.NETHER, false); - this.mEnd = ore.dimsEnabled.getOrDefault(SmallOreBuilder.THE_END, false); - this.twilightForest = ore.dimsEnabled.getOrDefault(SmallOreBuilder.TWILIGHT_FOREST, false); - - this.mMinY = (short) ore.minY; - this.mMaxY = (short) Math.max(this.mMinY + 1, ore.maxY); - this.mAmount = (short) Math.max(1, ore.amount); - this.mMeta = (short) ore.ore.mMetaItemSubID; - this.mBiome = "None"; - - if (this.mEnabled) sList.add(this); - - List allowedProviders = new ArrayList<>(); - if (this.mNether) { - allowedProviders.add(WorldProviderHell.class); - } - - if (this.mOverworld) { - allowedProviders.add(WorldProviderSurface.class); - } - - if (this.mEnd) { - allowedProviders.add(WorldProviderEnd.class); - } - mAllowedProviders = allowedProviders.toArray(new Class[allowedProviders.size()]); - } - - @Override - public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, - int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { - if (!this.mBiome.equals("None") && !(this.mBiome.equals(aBiome))) { - return false; // Not the correct biome for ore mix - } - if (!isGenerationAllowed(aWorld, mAllowedProviders)) { - return false; - } - int count = 0; - // For optimal performance, this should be done upstream. Meh - String tDimensionName = aWorld.provider.getDimensionName(); - boolean isUnderdark = tDimensionName.equals("Underdark"); - - if (this.mMeta > 0) { - int j = Math.max(1, this.mAmount / 2 + aRandom.nextInt(this.mAmount) / 2); - for (int i = 0; i < j; i++) { - GT_TileEntity_Ores.setOreBlock( - aWorld, - aChunkX + 8 + aRandom.nextInt(16), - this.mMinY + aRandom.nextInt(Math.max(1, this.mMaxY - this.mMinY)), - aChunkZ + 8 + aRandom.nextInt(16), - this.mMeta, - true, - isUnderdark); - count++; - } - } - if (debugSmallOres) { - GT_Log.out.println( - "Small Ore:" + this.mWorldGenName - + " @ dim=" - + aDimensionType - + " mX=" - + aChunkX / 16 - + " mZ=" - + aChunkZ / 16 - + " ore=" - + count); - } - return true; - } -} diff --git a/src/main/java/gregtech/common/GT_Worldgen_Stone.java b/src/main/java/gregtech/common/GT_Worldgen_Stone.java deleted file mode 100644 index 97621865bc..0000000000 --- a/src/main/java/gregtech/common/GT_Worldgen_Stone.java +++ /dev/null @@ -1,297 +0,0 @@ -package gregtech.common; - -import static gregtech.api.enums.GT_Values.debugStones; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Hashtable; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraft.world.chunk.IChunkProvider; - -import gregtech.api.GregTech_API; -import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_Log; -import gregtech.api.world.GT_Worldgen; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_TileEntity_Ores; - -public class GT_Worldgen_Stone extends GT_Worldgen { - - static final double[] sizeConversion = { 1, 1, 1.333333, 1.333333, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; // Bias - // the - // sizes - // towards - // skinnier - // boulders, - // ie - // more - // "shafts" - // than - // dikes - // or - // sills. - - public final int mBlockMeta, mAmount, mSize, mMinY, mMaxY, mProbability, mDimensionType; - public final Block mBlock; - public final Collection mBiomeList; - public final boolean mAllowToGenerateinVoid; - private final String aTextWorldgen = "worldgen."; - - public Hashtable validStoneSeeds = new Hashtable<>(1024); - - static class StoneSeeds { - - public boolean mExists; - - StoneSeeds(boolean exists) { - mExists = exists; - } - } - - static class ValidSeeds { - - public int mX; - public int mZ; - - ValidSeeds(int x, int z) { - this.mX = x; - this.mZ = z; - } - } - - public GT_Worldgen_Stone(StoneBuilder stone) { - super(stone.stoneName, GregTech_API.sWorldgenList, stone.enabledByDefault); - mDimensionType = stone.dimension; - mBlock = stone.block; - mBlockMeta = Math.min(Math.max(stone.blockMeta, 0), 15); - mProbability = stone.probability; - mAmount = stone.amount; - mSize = stone.size; - mMinY = stone.minY; - mMaxY = stone.maxY; - mBiomeList = new ArrayList<>(); - mAllowToGenerateinVoid = stone.allowToGenerateInVoid; - } - - @Override - public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, - int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { - XSTR stoneRNG = new XSTR(); - ArrayList stones = new ArrayList<>(); - - if (!isGenerationAllowed(aWorld, mDimensionType)) { - return false; - } - if (!(this.mBiomeList.isEmpty() || this.mBiomeList.contains(aBiome))) { - return false; - } - // I think the real size of the balls is mSize/8, but the original code was difficult to understand. - // Overall there will be less GT stones since they aren't spheres any more. /16 since this code uses it as a - // radius. - double realSize = mSize / 16; - int windowWidth = ((int) realSize) / 16 + 1; // Width of chunks to check for a potential stoneseed - // Check stone seeds to see if they have been added - for (int x = aChunkX / 16 - windowWidth; x < (aChunkX / 16 + windowWidth + 1); x++) { - for (int z = aChunkZ / 16 - windowWidth; z < (aChunkZ / 16 + windowWidth + 1); z++) { - long hash = (((aWorld.provider.dimensionId & 0xffL) << 56) | (((long) x & 0x000000000fffffffL) << 28) - | ((long) z & 0x000000000fffffffL)); - if (!validStoneSeeds.containsKey(hash)) { - // Determine if RNG says to add stone at this chunk - stoneRNG.setSeed( - aWorld.getSeed() ^ hash + Math.abs(mBlockMeta) - + Math.abs(mSize) - + ((GregTech_API.sBlockGranites == mBlock) ? (32768) : (0))); // Don't judge me. - // Want different - // values for - // different block - // types - if ((this.mProbability <= 1) || (stoneRNG.nextInt(this.mProbability) == 0)) { - // Add stone at this chunk - validStoneSeeds.put(hash, new StoneSeeds(true)); - // Add to generation list - stones.add(new ValidSeeds(x, z)); - if (debugStones) GT_Log.out.println( - "New stoneseed=" + mWorldGenName + " x=" + x + " z=" + z + " realSize=" + realSize); - } else { - validStoneSeeds.put(hash, new StoneSeeds(false)); - } - } else { - // This chunk has already been checked, check to see if a boulder exists here - if (validStoneSeeds.get(hash).mExists) { - // Add to generation list - stones.add(new ValidSeeds(x, z)); - } - } - } - } - - boolean result = stones.size() != 0; - // Now process each oreseed vs this requested chunk - for (; stones.size() != 0; stones.remove(0)) { - int x = stones.get(0).mX * 16; - int z = stones.get(0).mZ * 16; - - stoneRNG.setSeed( - aWorld.getSeed() - ^ (((aWorld.provider.dimensionId & 0xffL) << 56) | (((long) x & 0x000000000fffffffL) << 28) - | ((long) z & 0x000000000fffffffL)) + Math.abs(mBlockMeta) - + Math.abs(mSize) - + ((GregTech_API.sBlockGranites == mBlock) ? (32768) : (0))); // Don't judge me - for (int i = 0; i < this.mAmount; i++) { // Not sure why you would want more than one in a chunk! Left alone - // though. - // Locate the stoneseed XYZ. Original code would request an isAir at the seed location, causing a chunk - // generation request. - // To reduce potential worldgen cascade, we just always try to place a ball and use the check inside the - // for loop to prevent - // placement instead. - int tX = x + stoneRNG.nextInt(16); - int tY = mMinY + stoneRNG.nextInt(mMaxY - mMinY); - int tZ = z + stoneRNG.nextInt(16); - - // Determine the XYZ sizes of the stoneseed - double xSize = sizeConversion[stoneRNG.nextInt(sizeConversion.length)]; - double ySize = sizeConversion[stoneRNG.nextInt(sizeConversion.length) / 2]; // Skew the ySize towards - // the larger sizes, more - // long skinny pipes - double zSize = sizeConversion[stoneRNG.nextInt(sizeConversion.length)]; - - // Equation for an ellipsoid centered around 0,0,0 - // Sx, Sy, and Sz are size controls (size = 1/S_) - // 1 = full size, 1.333 = 75%, 2 = 50%, 4 = 25% - // (x * Sx)^2 + (y * Sy)^2 + (z * sZ)^2 <= (mSize)^2 - - // So, we setup the intial boundaries to be the size of the boulder plus a block in each direction - int tMinX = tX - (int) (realSize / xSize - 1.0); - int tMaxX = tX + (int) (realSize / xSize + 2.0); - int tMinY = tY - (int) (realSize / ySize - 1.0); - int tMaxY = tY + (int) (realSize / ySize + 2.0); - int tMinZ = tZ - (int) (realSize / zSize - 1.0); - int tMaxZ = tZ + (int) (realSize / zSize + 2.0); - - // If the (tY-ySize) of the stoneseed is air in the current chunk, mark the seed empty and move on. - if (aWorld.getBlock(aChunkX + 8, tMinY, aChunkZ + 8) - .isAir(aWorld, aChunkX + 8, tMinY, aChunkZ + 8)) { - if (debugStones) GT_Log.out.println( - mWorldGenName + " tX=" - + tX - + " tY=" - + tY - + " tZ=" - + tZ - + " realSize=" - + realSize - + " xSize=" - + realSize / xSize - + " ySize=" - + realSize / ySize - + " zSize=" - + realSize / zSize - + " tMinY=" - + tMinY - + " tMaxY=" - + tMaxY - + " - Skipped because first requesting chunk would not contain this stone"); - long hash = (((aWorld.provider.dimensionId & 0xffL) << 56) - | (((long) x & 0x000000000fffffffL) << 28) - | ((long) z & 0x000000000fffffffL)); - validStoneSeeds.remove(hash); - validStoneSeeds.put(hash, new StoneSeeds(false)); - } - - // Chop the boundaries by the parts that intersect with the current chunk - int wX = Math.max(tMinX, aChunkX + 8); - int eX = Math.min(tMaxX, aChunkX + 8 + 16); - - int sZ = Math.max(tMinZ, aChunkZ + 8); - int nZ = Math.min(tMaxZ, aChunkZ + 8 + 16); - - if (debugStones) GT_Log.out.println( - mWorldGenName + " tX=" - + tX - + " tY=" - + tY - + " tZ=" - + tZ - + " realSize=" - + realSize - + " xSize=" - + realSize / xSize - + " ySize=" - + realSize / ySize - + " zSize=" - + realSize / zSize - + " wX=" - + wX - + " eX=" - + eX - + " tMinY=" - + tMinY - + " tMaxY=" - + tMaxY - + " sZ=" - + sZ - + " nZ=" - + nZ); - - double rightHandSide = realSize * realSize + 1; // Precalc the right hand side - for (int iY = tMinY; iY < tMaxY; iY++) { // Do placement from the bottom up layer up. Maybe better on - // cache usage? - double yCalc = ((double) (iY - tY) * ySize); - yCalc = yCalc * yCalc; // (y*Sy)^2 - double leftHandSize = yCalc; - if (leftHandSize > rightHandSide) { - continue; // If Y alone is larger than the RHS, skip the rest of the loops - } - for (int iX = wX; iX < eX; iX++) { - double xCalc = ((double) (iX - tX) * xSize); - xCalc = xCalc * xCalc; - leftHandSize = yCalc + xCalc; - if (leftHandSize > rightHandSide) { // Again, if X and Y is larger than the RHS, skip to the - // next value - continue; - } - for (int iZ = sZ; iZ < nZ; iZ++) { - double zCalc = ((double) (iZ - tZ) * zSize); - zCalc = zCalc * zCalc; - leftHandSize = zCalc + xCalc + yCalc; - if (leftHandSize <= rightHandSide) { - // Yay! We can actually place a block now. (this part copied from original code) - Block tTargetedBlock = aWorld.getBlock(iX, iY, iZ); - if (tTargetedBlock instanceof GT_Block_Ores_Abstract) { - TileEntity tTileEntity = aWorld.getTileEntity(iX, iY, iZ); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - if (tTargetedBlock != GregTech_API.sBlockOres1) { - ((GT_TileEntity_Ores) tTileEntity).convertOreBlock(aWorld, iX, iY, iZ); - } - ((GT_TileEntity_Ores) tTileEntity) - .overrideOreBlockMaterial(this.mBlock, (byte) this.mBlockMeta); - } - } else if (((this.mAllowToGenerateinVoid) && (aWorld.getBlock(iX, iY, iZ) - .isAir(aWorld, iX, iY, iZ))) - || ((tTargetedBlock != null) && ((tTargetedBlock - .isReplaceableOreGen(aWorld, iX, iY, iZ, Blocks.stone)) - || (tTargetedBlock - .isReplaceableOreGen(aWorld, iX, iY, iZ, Blocks.stained_hardened_clay)) - || (tTargetedBlock.isReplaceableOreGen(aWorld, iX, iY, iZ, Blocks.cobblestone)) - || (tTargetedBlock.isReplaceableOreGen(aWorld, iX, iY, iZ, Blocks.end_stone)) - || (tTargetedBlock.isReplaceableOreGen(aWorld, iX, iY, iZ, Blocks.netherrack)) - || (tTargetedBlock - .isReplaceableOreGen(aWorld, iX, iY, iZ, GregTech_API.sBlockGranites)) - || (tTargetedBlock - .isReplaceableOreGen(aWorld, iX, iY, iZ, GregTech_API.sBlockStones))))) { - aWorld.setBlock(iX, iY, iZ, this.mBlock, this.mBlockMeta, 0); - } - } - } - } - } - } - } - return result; - } -} diff --git a/src/main/java/gregtech/common/GT_Worldgenerator.java b/src/main/java/gregtech/common/GT_Worldgenerator.java deleted file mode 100644 index 68ce3e4d82..0000000000 --- a/src/main/java/gregtech/common/GT_Worldgenerator.java +++ /dev/null @@ -1,686 +0,0 @@ -package gregtech.common; - -import static gregtech.api.enums.GT_Values.debugOrevein; -import static gregtech.api.enums.GT_Values.debugWorldGen; -import static gregtech.api.enums.GT_Values.oreveinAttempts; -import static gregtech.api.enums.GT_Values.oreveinMaxPlacementAttempts; -import static gregtech.api.enums.GT_Values.oreveinPercentage; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.List; -import java.util.Random; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraft.world.WorldSavedData; -import net.minecraft.world.chunk.Chunk; -import net.minecraft.world.chunk.IChunkProvider; -import net.minecraftforge.event.world.WorldEvent; - -import cpw.mods.fml.common.IWorldGenerator; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.PlayerEvent; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.net.GT_Packet_SendOregenPattern; -import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_Log; -import gregtech.api.world.GT_Worldgen; -import gregtech.common.blocks.GT_TileEntity_Ores; -import gregtech.common.config.worldgen.ConfigEndAsteroids; - -public class GT_Worldgenerator implements IWorldGenerator { - - private static int mEndAsteroidProbability = 300; - private static int mSize = 100; - private static int endMinSize = 50; - private static int endMaxSize = 200; - private static boolean endAsteroids = true; - public static List mList = new ArrayList<>(); - public static HashSet ProcChunks = new HashSet<>(); - // This is probably not going to work. Trying to create a fake orevein to put into hashtable when there will be no - // ores in a vein. - public static GT_Worldgen_GT_Ore_Layer noOresInVein = new GT_Worldgen_GT_Ore_Layer( - new OreMixBuilder().name("NoOresInVein") - .disabledByDefault() - .heightRange(0, 255) - .weight(0) - .density(255) - .size(16) - .primary(Materials.Aluminium) - .secondary(Materials.Aluminium) - .inBetween(Materials.Aluminium) - .sporadic(Materials.Aluminium)); - - public static Hashtable validOreveins = new Hashtable<>(1024); - public boolean mIsGenerating = false; - public static final Object listLock = new Object(); - public static OregenPattern oregenPattern = OregenPattern.AXISSYMMETRICAL; - - public GT_Worldgenerator() { - endAsteroids = ConfigEndAsteroids.generateEndAsteroids; - endMinSize = ConfigEndAsteroids.EndAsteroidMinSize; - endMaxSize = ConfigEndAsteroids.EndAsteroidMaxSize; - mEndAsteroidProbability = ConfigEndAsteroids.EndAsteroidProbability; - GameRegistry.registerWorldGenerator(this, 1073741823); - if (debugWorldGen) { - GT_Log.out.println("GT_Worldgenerator created"); - } - } - - @Override - public void generate(Random aRandom, int aX, int aZ, World aWorld, IChunkProvider aChunkGenerator, - IChunkProvider aChunkProvider) { - synchronized (listLock) { - mList.add( - new WorldGenContainer( - new XSTR(Math.abs(aRandom.nextInt()) + 1), - aX, - aZ, - aWorld.provider.dimensionId, - aWorld, - aChunkGenerator, - aChunkProvider, - aWorld.getBiomeGenForCoords(aX * 16 + 8, aZ * 16 + 8).biomeName)); - if (debugWorldGen) GT_Log.out.println( - "ADD WorldSeed:" + aWorld.getSeed() - + " DimId" - + aWorld.provider.dimensionId - + " chunk x:" - + aX - + " z:" - + aZ - + " SIZE: " - + mList.size()); - } - - if (!this.mIsGenerating) { - this.mIsGenerating = true; - int mList_sS = mList.size(); - mList_sS = Math.min(mList_sS, 5); // Run a maximum of 5 chunks at a time through worldgen. Extra chunks get - // done later. - for (int i = 0; i < mList_sS; i++) { - WorldGenContainer toRun = (WorldGenContainer) mList.get(0); - if (debugWorldGen) GT_Log.out.println( - "RUN WorldSeed:" + aWorld.getSeed() - + " DimId" - + aWorld.provider.dimensionId - + " chunk x:" - + toRun.mX - + " z:" - + toRun.mZ - + " SIZE: " - + mList.size() - + " i: " - + i); - synchronized (listLock) { - mList.remove(0); - } - toRun.run(); - } - this.mIsGenerating = false; - } - } - - public static boolean isOreChunk(int chunkX, int chunkZ) { - if (oregenPattern == OregenPattern.EQUAL_SPACING) { - return Math.floorMod(chunkX, 3) == 1 && Math.floorMod(chunkZ, 3) == 1; - } - // add next if statement here or convert to switch when expanding OregenPattern enum - - // AXISSYMMETRICAL - return Math.abs(chunkX) % 3 == 1 && Math.abs(chunkZ) % 3 == 1; - } - - public static class OregenPatternSavedData extends WorldSavedData { - - private static final String NAME = "GregTech_OregenPattern"; - private static final String KEY = "oregenPattern"; - - public OregenPatternSavedData(String p_i2141_1_) { - super(p_i2141_1_); - } - - public static void loadData(World world) { - if (world.getWorldInfo() - .getWorldTotalTime() == 0L) { - // The world has just been created -> use newest pattern - oregenPattern = OregenPattern.values()[OregenPattern.values().length - 1]; - } else { - // This is an old world. Use legacy pattern for now, readFromNBT may change this if - // GregTech_OregenPattern.dat is present - oregenPattern = OregenPattern.AXISSYMMETRICAL; - } - - // load OregenPatternSavedData - WorldSavedData instance = world.mapStorage - .loadData(OregenPatternSavedData.class, OregenPatternSavedData.NAME); - if (instance == null) { - instance = new OregenPatternSavedData(NAME); - world.mapStorage.setData(OregenPatternSavedData.NAME, instance); - } - instance.markDirty(); - } - - @SubscribeEvent - public void onWorldLoad(WorldEvent.Load event) { - final World world = event.world; - if (!world.isRemote && world.provider.dimensionId == 0) { - loadData(world); - } - } - - @SubscribeEvent - public void onPlayerLoggedIn(PlayerEvent.PlayerLoggedInEvent event) { - if (event.player instanceof EntityPlayerMP player) { - GT_Values.NW.sendToPlayer(new GT_Packet_SendOregenPattern(oregenPattern), player); - } - } - - @Override - public void readFromNBT(NBTTagCompound p_76184_1_) { - if (p_76184_1_.hasKey(KEY)) { - int ordinal = p_76184_1_.getByte(KEY); - ordinal = MathHelper.clamp_int(ordinal, 0, OregenPattern.values().length - 1); - oregenPattern = OregenPattern.values()[ordinal]; - } - } - - @Override - public void writeToNBT(NBTTagCompound p_76187_1_) { - // If we have so many different OregenPatterns that byte isn't good enough something is wrong - p_76187_1_.setByte(KEY, (byte) oregenPattern.ordinal()); - } - - } - - public enum OregenPattern { - // The last value is used when creating a new world - AXISSYMMETRICAL, - EQUAL_SPACING; - } - - public static class WorldGenContainer implements Runnable { - - public final Random mRandom; - public final int mX; - public final int mZ; - public final int mDimensionType; - public final World mWorld; - public final IChunkProvider mChunkGenerator; - public final IChunkProvider mChunkProvider; - public final String mBiome; - // Used for outputting orevein weights and bins - // static int test=0; - - // Local class to track which orevein seeds must be checked when doing chunkified worldgen - static class NearbySeeds { - - public int mX; - public int mZ; - - NearbySeeds(int x, int z) { - this.mX = x; - this.mZ = z; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof NearbySeeds that)) return false; - if (this.mX != that.mX) return false; - return this.mZ == that.mZ; - } - - @Override - public int hashCode() { - int result = this.mX; - result = 31 * result + this.mZ; - return result; - } - } - - public static ArrayList seedList = new ArrayList<>(); - - // aX and aZ are now the by-chunk X and Z for the chunk of interest - public WorldGenContainer(Random aRandom, int aX, int aZ, int aDimensionType, World aWorld, - IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider, String aBiome) { - this.mRandom = aRandom; - this.mX = aX; - this.mZ = aZ; - this.mDimensionType = aDimensionType; - this.mWorld = aWorld; - this.mChunkGenerator = aChunkGenerator; - this.mChunkProvider = aChunkProvider; - this.mBiome = aBiome; - } - - // How to evaluate oregen distribution - // - Enable debugOreveins - // - Fly around for a while, or teleport jumping ~320 blocks at a time, with - // a 15-30s pause for worldgen to catch up - // - Do this across a large area, at least 2000x2000 blocks for good numbers - // - Open logs\gregtech.log - // - Using notepad++, do a Search | Find - enter "Added" for the search term - // - Select Find All In Current Document - // - In the Search window, right-click and Select All - // - Copy and paste to a new file - // - Delete extraneous stuff at top, and blank line at bottom. Line count is - // # of total oreveins - // - For simple spot checks, use Find All in Current Document for specific - // oremixes, ie ore.mix.diamond, to check how many appear in the list. - // - For more complex work, import file into Excel, and sort based on oremix - // column. Drag select the oremix names, in the bottom right will be how many - // entries to add in a seperate tab to calculate %ages. - // - // When using the ore weights, discount or remove the high altitude veins since - // their high weight are offset by their rareness. I usually just use zero for them. - // Actual spawn rates will vary based upon the average height of the stone layers - // in the dimension. For example veins that range above and below the average height - // will be less, and veins that are completely above the average height will be much less. - - public void worldGenFindVein(int oreseedX, int oreseedZ) { - // Explanation of oreveinseed implementation. - // (long)this.mWorld.getSeed()<<16) Deep Dark does two oregen passes, one with getSeed set to +1 the - // original world seed. This pushes that +1 off the low bits of oreseedZ, so that the hashes are far apart - // for the two passes. - // ((this.mWorld.provider.dimensionId & 0xffL)<<56) Puts the dimension in the top bits of the hash, to - // make sure to get unique hashes per dimension - // ((long)oreseedX & 0x000000000fffffffL) << 28) Puts the chunk X in the bits 29-55. Cuts off the top few - // bits of the chunk so we have bits for dimension. - // ( (long)oreseedZ & 0x000000000fffffffL )) Puts the chunk Z in the bits 0-27. Cuts off the top few bits - // of the chunk so we have bits for dimension. - long oreveinSeed = (this.mWorld.getSeed() << 16) - ^ (((this.mWorld.provider.dimensionId & 0xffL) << 56) | (((long) oreseedX & 0x000000000fffffffL) << 28) - | ((long) oreseedZ & 0x000000000fffffffL)); // Use an RNG that is identical every time it is - // called for - // this oreseed. - XSTR oreveinRNG = new XSTR(oreveinSeed); - int oreveinPercentageRoll = oreveinRNG.nextInt(100); // Roll the dice, see if we get an orevein here at all - int noOrePlacedCount = 0; - String tDimensionName = ""; - if (debugOrevein) { - tDimensionName = this.mWorld.provider.getDimensionName(); - } - - if (debugOrevein) GT_Log.out.println( - " Finding oreveins for oreveinSeed=" + oreveinSeed - + " mX=" - + this.mX - + " mZ=" - + this.mZ - + " oreseedX=" - + oreseedX - + " oreseedZ=" - + oreseedZ - + " worldSeed=" - + this.mWorld.getSeed()); - - // Search for a valid orevein for this dimension - if (!validOreveins.containsKey(oreveinSeed)) { - if ((oreveinPercentageRoll < oreveinPercentage) && (GT_Worldgen_GT_Ore_Layer.sWeight > 0) - && (GT_Worldgen_GT_Ore_Layer.sList.size() > 0)) { - int placementAttempts = 0; - boolean oreveinFound = false; - int i; - - // Used for outputting orevein weights and bins - /* - * if( test==0 ) { test = 1; GT_Log.out.println( "sWeight = " + GT_Worldgen_GT_Ore_Layer.sWeight ); - * for (GT_Worldgen_GT_Ore_Layer tWorldGen : GT_Worldgen_GT_Ore_Layer.sList) { GT_Log.out.println( ( - * tWorldGen).mWorldGenName + " mWeight = " + ( tWorldGen).mWeight + " mSize = " + (tWorldGen).mSize - * ); } } - */ - for (i = 0; (i < oreveinAttempts) && (!oreveinFound) - && (placementAttempts < oreveinMaxPlacementAttempts); i++) { - int tRandomWeight = oreveinRNG.nextInt(GT_Worldgen_GT_Ore_Layer.sWeight); - for (GT_Worldgen_GT_Ore_Layer tWorldGen : GT_Worldgen_GT_Ore_Layer.sList) { - tRandomWeight -= (tWorldGen).mWeight; - if (tRandomWeight <= 0) { - try { - // Adjust the seed so that this layer has a series of unique random numbers. - // Otherwise multiple attempts at this same oreseed will get the same offset and X/Z - // values. If an orevein failed, any orevein with the - // same minimum heights would fail as well. This prevents that, giving each orevein - // a unique height each pass through here. - int placementResult = tWorldGen.executeWorldgenChunkified( - this.mWorld, - new XSTR(oreveinSeed ^ (tWorldGen.mPrimaryMeta)), - this.mBiome, - this.mDimensionType, - this.mX * 16, - this.mZ * 16, - oreseedX * 16, - oreseedZ * 16, - this.mChunkGenerator, - this.mChunkProvider); - switch (placementResult) { - case GT_Worldgen_GT_Ore_Layer.ORE_PLACED -> { - if (debugOrevein) GT_Log.out.println( - " Added near oreveinSeed=" + oreveinSeed - + " " - + (tWorldGen).mWorldGenName - + " tries at oremix=" - + i - + " placementAttempts=" - + placementAttempts - + " dimensionName=" - + tDimensionName); - validOreveins.put(oreveinSeed, tWorldGen); - oreveinFound = true; - } - case GT_Worldgen_GT_Ore_Layer.NO_ORE_IN_BOTTOM_LAYER -> placementAttempts++; - - // SHould do retry in this case until out of chances - case GT_Worldgen_GT_Ore_Layer.NO_OVERLAP -> { - if (debugOrevein) GT_Log.out.println( - " Added far oreveinSeed=" + oreveinSeed - + " " - + (tWorldGen).mWorldGenName - + " tries at oremix=" - + i - + " placementAttempts=" - + placementAttempts - + " dimensionName=" - + tDimensionName); - validOreveins.put(oreveinSeed, tWorldGen); - oreveinFound = true; - } - case GT_Worldgen_GT_Ore_Layer.NO_OVERLAP_AIR_BLOCK -> { - if (debugOrevein) GT_Log.out.println( - " No overlap and air block in test spot=" + oreveinSeed - + " " - + (tWorldGen).mWorldGenName - + " tries at oremix=" - + i - + " placementAttempts=" - + placementAttempts - + " dimensionName=" - + tDimensionName); - // SHould do retry in this case until out of chances - placementAttempts++; - } - } - break; // Try the next orevein - } catch (Throwable e) { - if (debugOrevein) GT_Log.out.println( - "Exception occurred on oreVein" + tWorldGen - + " oreveinSeed=" - + oreveinSeed - + " mX=" - + this.mX - + " mZ=" - + this.mZ - + " oreseedX=" - + oreseedX - + " oreseedZ=" - + oreseedZ); - e.printStackTrace(GT_Log.err); - } - } - } - } - // Only add an empty orevein if unable to place a vein at the oreseed chunk. - if ((!oreveinFound) && (this.mX == oreseedX) && (this.mZ == oreseedZ)) { - if (debugOrevein) GT_Log.out.println( - " Empty oreveinSeed=" + oreveinSeed - + " mX=" - + this.mX - + " mZ=" - + this.mZ - + " oreseedX=" - + oreseedX - + " oreseedZ=" - + oreseedZ - + " tries at oremix=" - + i - + " placementAttempts=" - + placementAttempts - + " dimensionName=" - + tDimensionName); - validOreveins.put(oreveinSeed, noOresInVein); - } - } else if (oreveinPercentageRoll >= oreveinPercentage) { - if (debugOrevein) GT_Log.out.println( - " Skipped oreveinSeed=" + oreveinSeed - + " mX=" - + this.mX - + " mZ=" - + this.mZ - + " oreseedX=" - + oreseedX - + " oreseedZ=" - + oreseedZ - + " RNG=" - + oreveinPercentageRoll - + " %=" - + oreveinPercentage - + " dimensionName=" - + tDimensionName); - validOreveins.put(oreveinSeed, noOresInVein); - } - } else { - // oreseed is located in the previously processed table - if (debugOrevein) GT_Log.out - .print(" Valid oreveinSeed=" + oreveinSeed + " validOreveins.size()=" + validOreveins.size() + " "); - GT_Worldgen_GT_Ore_Layer tWorldGen = validOreveins.get(oreveinSeed); - oreveinRNG.setSeed(oreveinSeed ^ (tWorldGen.mPrimaryMeta)); // Reset RNG to only be based on oreseed X/Z - // and type of vein - int placementResult = tWorldGen.executeWorldgenChunkified( - this.mWorld, - oreveinRNG, - this.mBiome, - this.mDimensionType, - this.mX * 16, - this.mZ * 16, - oreseedX * 16, - oreseedZ * 16, - this.mChunkGenerator, - this.mChunkProvider); - switch (placementResult) { - case GT_Worldgen_GT_Ore_Layer.NO_ORE_IN_BOTTOM_LAYER -> { - if (debugOrevein) GT_Log.out.println(" No ore in bottom layer"); - } - case GT_Worldgen_GT_Ore_Layer.NO_OVERLAP -> { - if (debugOrevein) GT_Log.out.println(" No overlap"); - } - } - } - } - - @Override - public void run() { - long startTime = System.nanoTime(); - Chunk tChunk = this.mWorld.getChunkFromChunkCoords(this.mX, this.mZ); - - int oreveinMaxSize; - - // Do GT_Stones and GT_small_ores oregen for this chunk - try { - for (GT_Worldgen tWorldGen : GregTech_API.sWorldgenList) { - /* - * if (debugWorldGen) GT_Log.out.println( "tWorldGen.mWorldGenName="+tWorldGen.mWorldGenName ); - */ - tWorldGen.executeWorldgen( - this.mWorld, - this.mRandom, - this.mBiome, - this.mDimensionType, - this.mX * 16, - this.mZ * 16, - this.mChunkGenerator, - this.mChunkProvider); - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - long leftOverTime = System.nanoTime(); - - // Determine bounding box on how far out to check for oreveins affecting this chunk - // For now, manually reducing oreveinMaxSize when not in the Underdark for performance - if (this.mWorld.provider.getDimensionName() - .equals("Underdark")) { - oreveinMaxSize = 32; // Leave Deep Dark/Underdark max oregen at 32, instead of 64 - } else { - oreveinMaxSize = 32; - } - - int wXbox = this.mX - (oreveinMaxSize / 16); - int eXbox = this.mX + (oreveinMaxSize / 16 + 1); // Need to add 1 since it is compared using a < - int nZbox = this.mZ - (oreveinMaxSize / 16); - int sZbox = this.mZ + (oreveinMaxSize / 16 + 1); - - // Search for orevein seeds and add to the list; - for (int x = wXbox; x < eXbox; x++) { - for (int z = nZbox; z < sZbox; z++) { - // Determine if this X/Z is an orevein seed - if (isOreChunk(x, z)) { - if (debugWorldGen) GT_Log.out.println("Adding seed x=" + x + " z=" + z); - seedList.add(new NearbySeeds(x, z)); - } - } - } - - // Now process each oreseed vs this requested chunk - for (; seedList.size() != 0; seedList.remove(0)) { - if (debugWorldGen) - GT_Log.out.println("Processing seed x=" + seedList.get(0).mX + " z=" + seedList.get(0).mZ); - worldGenFindVein(seedList.get(0).mX, seedList.get(0).mZ); - } - - long oregenTime = System.nanoTime(); - - // Asteroid Worldgen - int tDimensionType = this.mWorld.provider.dimensionId; - // String tDimensionName = this.mWorld.provider.getDimensionName(); - // if (((tDimensionType == 1) && endAsteroids && ((mEndAsteroidProbability <= 1) || - // (aRandom.nextInt(mEndAsteroidProbability) == 0))) || ((tDimensionName.equals("Asteroids")) && gcAsteroids - // && ((mGCAsteroidProbability <= 1) || (aRandom.nextInt(mGCAsteroidProbability) == 0)))) { - if ((tDimensionType == 1 /* the end */) && endAsteroids) { - XSTR random = new XSTR( - mWorld.getSeed() + mX * mX * 91777L + mZ * mZ * 137413L + mX * mZ * 1853L + mX * 3L + mZ * 17L); - - if (mEndAsteroidProbability <= 1 || random.nextInt(mEndAsteroidProbability) == 0) { - generateAsteroid(mWorld, random, mX, mZ); - } - } - - if (tChunk != null) { - tChunk.isModified = true; - } - long endTime = System.nanoTime(); - long duration = (endTime - startTime); - if (debugWorldGen) { - GT_Log.out.println( - " Oregen took " + (oregenTime - leftOverTime) - + " Leftover gen took " - + (leftOverTime - startTime) - + " Worldgen took " - + duration - + " nanoseconds"); - } - } - - private void generateAsteroid(World world, Random random, int chunkX, int chunkZ) { - short primaryMeta = 0; - short secondaryMeta = 0; - short betweenMeta = 0; - short sporadicMeta = 0; - if ((GT_Worldgen_GT_Ore_Layer.sWeight > 0) && (GT_Worldgen_GT_Ore_Layer.sList.size() > 0)) { - boolean temp = true; - int tRandomWeight; - for (int i = 0; (i < oreveinAttempts) && (temp); i++) { - tRandomWeight = random.nextInt(GT_Worldgen_GT_Ore_Layer.sWeight); - for (GT_Worldgen_GT_Ore_Layer tWorldGen : GT_Worldgen_GT_Ore_Layer.sList) { - tRandomWeight -= tWorldGen.mWeight; - if (tRandomWeight <= 0) { - try { - if (tWorldGen.mEndAsteroid) { - primaryMeta = tWorldGen.mPrimaryMeta; - secondaryMeta = tWorldGen.mSecondaryMeta; - betweenMeta = tWorldGen.mBetweenMeta; - sporadicMeta = tWorldGen.mSporadicMeta; - temp = false; - break; - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - } - } - } - // if(GT_Values.D1)GT_FML_LOGGER.info("do asteroid gen: "+this.mX+" "+this.mZ); - int tX = chunkX * 16 + random.nextInt(16); - int tY = 50 + random.nextInt(200 - 50); - int tZ = chunkZ * 16 + random.nextInt(16); - mSize = endMinSize + random.nextInt(endMaxSize - endMinSize + 1); - - if ((world.getBlock(tX, tY, tZ) - .isAir(world, tX, tY, tZ))) { - float randomRadian = random.nextFloat() * (float) Math.PI; - double xBase = tX + 8 + MathHelper.sin(randomRadian) * mSize / 8.0F; - double xFactor = tX + 8 - MathHelper.sin(randomRadian) * mSize / 8.0F; - double zBase = tZ + 8 + MathHelper.cos(randomRadian) * mSize / 8.0F; - double zFactor = tZ + 8 - MathHelper.cos(randomRadian) * mSize / 8.0F; - double yBase = tY + random.nextInt(3) - 2; - double yFactor = tY + random.nextInt(3) - 2; - - for (int i = 0; i <= mSize; i++) { - double xCenter = xBase + (xFactor - xBase) * i / mSize; - double yCenter = yBase + (yFactor - yBase) * i / mSize; - double zCenter = zBase + (zFactor - zBase) * i / mSize; - double randomDistance = random.nextDouble() * mSize / 16.0D; - double halfLength = (MathHelper.sin(i * (float) Math.PI / mSize) + 1.0F) * randomDistance + 1.0D; - double halfHeight = (MathHelper.sin(i * (float) Math.PI / mSize) + 1.0F) * randomDistance + 1.0D; - int tMinX = MathHelper.floor_double(xCenter - halfLength / 2.0D); - int tMinY = MathHelper.floor_double(yCenter - halfHeight / 2.0D); - int tMinZ = MathHelper.floor_double(zCenter - halfLength / 2.0D); - int tMaxX = MathHelper.floor_double(xCenter + halfLength / 2.0D); - int tMaxY = MathHelper.floor_double(yCenter + halfHeight / 2.0D); - int tMaxZ = MathHelper.floor_double(zCenter + halfLength / 2.0D); - - for (int eX = tMinX; eX <= tMaxX; eX++) { - double xChance = (eX + 0.5D - xCenter) / (halfLength / 2.0D); - if (xChance * xChance < 1.0D) { - for (int eY = tMinY; eY <= tMaxY; eY++) { - double yChance = (eY + 0.5D - yCenter) / (halfHeight / 2.0D); - if (xChance * xChance + yChance * yChance < 1.0D) { - for (int eZ = tMinZ; eZ <= tMaxZ; eZ++) { - double zChance = (eZ + 0.5D - zCenter) / (halfLength / 2.0D); - if (xChance * xChance + yChance * yChance + zChance * zChance >= 1.0D) { - continue; - } - if (!world.getBlock(tX, tY, tZ) - .isAir(world, tX, tY, tZ)) { - continue; - } - int ranOre = random.nextInt(50); - if (ranOre < 3) { - GT_TileEntity_Ores.setOreBlock(world, eX, eY, eZ, primaryMeta, false); - } else if (ranOre < 6) { - GT_TileEntity_Ores.setOreBlock(world, eX, eY, eZ, secondaryMeta, false); - } else if (ranOre < 8) { - GT_TileEntity_Ores.setOreBlock(world, eX, eY, eZ, betweenMeta, false); - } else if (ranOre < 10) { - GT_TileEntity_Ores.setOreBlock(world, eX, eY, eZ, sporadicMeta, false); - } else { - world.setBlock(eX, eY, eZ, Blocks.end_stone, 0, 0); - } - } - } - } - } - } - } - } - } - } -} diff --git a/src/main/java/gregtech/common/OreMixBuilder.java b/src/main/java/gregtech/common/OreMixBuilder.java index 2a78f516a0..cd8d14c884 100644 --- a/src/main/java/gregtech/common/OreMixBuilder.java +++ b/src/main/java/gregtech/common/OreMixBuilder.java @@ -3,7 +3,7 @@ package gregtech.common; import java.util.HashMap; import java.util.Map; -import bloodasp.galacticgreg.api.enums.DimensionDef; +import galacticgreg.api.enums.DimensionDef; import gregtech.api.enums.Materials; public class OreMixBuilder { diff --git a/src/main/java/gregtech/common/Pollution.java b/src/main/java/gregtech/common/Pollution.java new file mode 100644 index 0000000000..928b944142 --- /dev/null +++ b/src/main/java/gregtech/common/Pollution.java @@ -0,0 +1,507 @@ +package gregtech.common; + +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; +import static gregtech.common.GTProxy.dimensionWisePollution; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.function.Consumer; + +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.ChunkPosition; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.world.ChunkDataEvent; +import net.minecraftforge.event.world.ChunkWatchEvent; +import net.minecraftforge.event.world.WorldEvent; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; +import cpw.mods.fml.common.network.NetworkRegistry; +import gregtech.GTMod; +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.ICleanroom; +import gregtech.api.interfaces.ICleanroomReceiver; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.net.GTPacketPollution; +import gregtech.api.util.GTChunkAssociatedData; +import gregtech.api.util.GTUtility; +import gregtech.common.render.PollutionRenderer; + +public class Pollution { + + private static final Storage STORAGE = new Storage(); + /** + * Pollution dispersion until effects start: Calculation: ((Limit * 0.01) + 2000) * (4 <- spreading rate) + *

+ * SMOG(500k) 466.7 pollution/sec Poison(750k) 633,3 pollution/sec Dying Plants(1mio) 800 pollution/sec Sour + * Rain(1.5mio) 1133.3 pollution/sec + *

+ * Pollution producers (pollution/sec) Bronze Boiler(20) Lava Boiler(20) High Pressure Boiler(20) Bronze Blast + * Furnace(50) Diesel Generator(40/80/160) Gas Turbine(20/40/80) Charcoal Pile(100) + *

+ * Large Diesel Engine(320) Electric Blast Furnace(100) Implosion Compressor(2000) Large Boiler(240) Large Gas + * Turbine(160) Multi Smelter(100) Pyrolyse Oven(400) + *

+ * Machine Explosion(100,000) + *

+ * Other Random Shit: lots and lots + *

+ * Muffler Hatch Pollution reduction: ** inaccurate ** LV (0%), MV (30%), HV (52%), EV (66%), IV (76%), LuV (84%), + * ZPM (89%), UV (92%), MAX (95%) + */ + private List pollutionList = new ArrayList<>(); // chunks left to process in this cycle + + private final Set pollutedChunks = new HashSet<>(); // a global list of all chunks with positive + // pollution + private int operationsPerTick = 0; // how much chunks should be processed in each cycle + private static final short cycleLen = 1200; + private final World world; + private boolean blank = true; + public static int mPlayerPollution; + + private static final int POLLUTIONPACKET_MINVALUE = 1000; + + private static GT_PollutionEventHandler EVENT_HANDLER; + + public Pollution(World world) { + this.world = world; + + if (EVENT_HANDLER == null) { + EVENT_HANDLER = new GT_PollutionEventHandler(); + MinecraftForge.EVENT_BUS.register(EVENT_HANDLER); + } + } + + public static void onWorldTick(TickEvent.WorldTickEvent aEvent) { // called from proxy + // return if pollution disabled + if (!GTMod.gregtechproxy.mPollution) return; + if (aEvent.phase == TickEvent.Phase.START) return; + final Pollution pollutionInstance = dimensionWisePollution.get(aEvent.world.provider.dimensionId); + if (pollutionInstance == null) return; + pollutionInstance.tickPollutionInWorld((int) (aEvent.world.getTotalWorldTime() % cycleLen)); + } + + private void tickPollutionInWorld(int aTickID) { // called from method above + // gen data set + if (aTickID == 0 || blank) { + // make a snapshot of what to work on + pollutionList = new ArrayList<>(pollutedChunks); + // set operations per tick + if (pollutionList.size() > 0) operationsPerTick = Math.max(1, pollutionList.size() / cycleLen); + else operationsPerTick = 0; // SANity + blank = false; + } + + for (int chunksProcessed = 0; chunksProcessed < operationsPerTick; chunksProcessed++) { + if (pollutionList.size() == 0) break; // no more stuff to do + ChunkCoordIntPair actualPos = pollutionList.remove(pollutionList.size() - 1); // faster + // get pollution + ChunkData currentData = STORAGE.get(world, actualPos); + int tPollution = currentData.getAmount(); + // remove some + tPollution = (int) (0.9945f * tPollution); + + if (tPollution > 400000) { // Spread Pollution + + ChunkCoordIntPair[] tNeighbors = new ChunkCoordIntPair[4]; // array is faster + tNeighbors[0] = (new ChunkCoordIntPair(actualPos.chunkXPos + 1, actualPos.chunkZPos)); + tNeighbors[1] = (new ChunkCoordIntPair(actualPos.chunkXPos - 1, actualPos.chunkZPos)); + tNeighbors[2] = (new ChunkCoordIntPair(actualPos.chunkXPos, actualPos.chunkZPos + 1)); + tNeighbors[3] = (new ChunkCoordIntPair(actualPos.chunkXPos, actualPos.chunkZPos - 1)); + for (ChunkCoordIntPair neighborPosition : tNeighbors) { + ChunkData neighbor = STORAGE.get(world, neighborPosition); + int neighborPollution = neighbor.getAmount(); + if (neighborPollution * 6 < tPollution * 5) { // MATHEMATICS... + int tDiff = tPollution - neighborPollution; + tDiff = tDiff / 20; + neighborPollution = GTUtility.safeInt((long) neighborPollution + tDiff); // tNPol += tDiff; + tPollution -= tDiff; + setChunkPollution(neighborPosition, neighborPollution); + } + } + + // Create Pollution effects + // Smog filter TODO + if (tPollution > GTMod.gregtechproxy.mPollutionSmogLimit) { + AxisAlignedBB chunk = AxisAlignedBB.getBoundingBox( + actualPos.chunkXPos << 4, + 0, + actualPos.chunkZPos << 4, + (actualPos.chunkXPos << 4) + 16, + 256, + (actualPos.chunkZPos << 4) + 16); + List tEntitys = world.getEntitiesWithinAABB(EntityLivingBase.class, chunk); + for (EntityLivingBase tEnt : tEntitys) { + if (tEnt instanceof EntityPlayerMP && ((EntityPlayerMP) tEnt).capabilities.isCreativeMode) + continue; + if (!(GTUtility.isWearingFullGasHazmat(tEnt))) { + switch (XSTR_INSTANCE.nextInt(3)) { + default: + tEnt.addPotionEffect( + new PotionEffect( + Potion.digSlowdown.id, + Math.min(tPollution / 1000, 1000), + tPollution / 400000)); + case 1: + tEnt.addPotionEffect( + new PotionEffect( + Potion.weakness.id, + Math.min(tPollution / 1000, 1000), + tPollution / 400000)); + case 2: + tEnt.addPotionEffect( + new PotionEffect( + Potion.moveSlowdown.id, + Math.min(tPollution / 1000, 1000), + tPollution / 400000)); + } + } + } + + // Poison effects + if (tPollution > GTMod.gregtechproxy.mPollutionPoisonLimit) { + for (EntityLivingBase tEnt : tEntitys) { + if (tEnt instanceof EntityPlayerMP && ((EntityPlayerMP) tEnt).capabilities.isCreativeMode) + continue; + if (!GTUtility.isWearingFullGasHazmat(tEnt)) { + switch (XSTR_INSTANCE.nextInt(4)) { + default: + tEnt.addPotionEffect(new PotionEffect(Potion.hunger.id, tPollution / 500000)); + case 1: + tEnt.addPotionEffect( + new PotionEffect( + Potion.confusion.id, + Math.min(tPollution / 2000, 1000), + 1)); + case 2: + tEnt.addPotionEffect( + new PotionEffect( + Potion.poison.id, + Math.min(tPollution / 4000, 1000), + tPollution / 500000)); + case 3: + tEnt.addPotionEffect( + new PotionEffect( + Potion.blindness.id, + Math.min(tPollution / 2000, 1000), + 1)); + } + } + } + + // killing plants + if (tPollution > GTMod.gregtechproxy.mPollutionVegetationLimit) { + int f = 20; + for (; f < (tPollution / 25000); f++) { + int x = (actualPos.chunkXPos << 4) + XSTR_INSTANCE.nextInt(16); + int y = 60 + (-f + XSTR_INSTANCE.nextInt(f * 2 + 1)); + int z = (actualPos.chunkZPos << 4) + XSTR_INSTANCE.nextInt(16); + damageBlock(world, x, y, z, tPollution > GTMod.gregtechproxy.mPollutionSourRainLimit); + } + } + } + } + } + // Write new pollution to Hashmap !!! + setChunkPollution(actualPos, tPollution); + + // Send new value to players nearby + if (tPollution > POLLUTIONPACKET_MINVALUE) { + NetworkRegistry.TargetPoint point = new NetworkRegistry.TargetPoint( + world.provider.dimensionId, + (actualPos.chunkXPos << 4), + 64, + (actualPos.chunkZPos << 4), + 256); + GTValues.NW.sendToAllAround(new GTPacketPollution(actualPos, tPollution), point); + } + } + } + + private void setChunkPollution(ChunkCoordIntPair coord, int pollution) { + mutatePollution(world, coord.chunkXPos, coord.chunkZPos, c -> c.setAmount(pollution), pollutedChunks); + } + + private static void damageBlock(World world, int x, int y, int z, boolean sourRain) { + if (world.isRemote) return; + Block tBlock = world.getBlock(x, y, z); + int tMeta = world.getBlockMetadata(x, y, z); + if (tBlock == Blocks.air || tBlock == Blocks.stone || tBlock == Blocks.sand || tBlock == Blocks.deadbush) + return; + + if (tBlock == Blocks.leaves || tBlock == Blocks.leaves2 || tBlock.getMaterial() == Material.leaves) + world.setBlockToAir(x, y, z); + if (tBlock == Blocks.reeds) { + tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0); + world.setBlockToAir(x, y, z); + } + if (tBlock == Blocks.tallgrass) world.setBlock(x, y, z, Blocks.deadbush); + if (tBlock == Blocks.vine) { + tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0); + world.setBlockToAir(x, y, z); + } + if (tBlock == Blocks.waterlily || tBlock == Blocks.wheat + || tBlock == Blocks.cactus + || tBlock.getMaterial() == Material.cactus + || tBlock == Blocks.melon_block + || tBlock == Blocks.melon_stem) { + tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0); + world.setBlockToAir(x, y, z); + } + if (tBlock == Blocks.red_flower || tBlock == Blocks.yellow_flower + || tBlock == Blocks.carrots + || tBlock == Blocks.potatoes + || tBlock == Blocks.pumpkin + || tBlock == Blocks.pumpkin_stem) { + tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0); + world.setBlockToAir(x, y, z); + } + if (tBlock == Blocks.sapling || tBlock.getMaterial() == Material.plants) + world.setBlock(x, y, z, Blocks.deadbush); + if (tBlock == Blocks.cocoa) { + tBlock.dropBlockAsItem(world, x, y, z, tMeta, 0); + world.setBlockToAir(x, y, z); + } + if (tBlock == Blocks.mossy_cobblestone) world.setBlock(x, y, z, Blocks.cobblestone); + if (tBlock == Blocks.grass || tBlock.getMaterial() == Material.grass) world.setBlock(x, y, z, Blocks.dirt); + if (tBlock == Blocks.farmland || tBlock == Blocks.dirt) { + world.setBlock(x, y, z, Blocks.sand); + } + + if (sourRain && world.isRaining() + && (tBlock == Blocks.gravel || tBlock == Blocks.cobblestone) + && world.getBlock(x, y + 1, z) == Blocks.air + && world.canBlockSeeTheSky(x, y, z)) { + if (tBlock == Blocks.cobblestone) { + world.setBlock(x, y, z, Blocks.gravel); + } else { + world.setBlock(x, y, z, Blocks.sand); + } + } + } + + private static Pollution getPollutionManager(World world) { + return dimensionWisePollution.computeIfAbsent(world.provider.dimensionId, i -> new Pollution(world)); + } + + /** @see #addPollution(TileEntity, int) */ + public static void addPollution(IGregTechTileEntity te, int aPollution) { + addPollution((TileEntity) te, aPollution); + } + + /** + * Also pollutes cleanroom if {@code te} is an instance of {@link ICleanroomReceiver}. + * + * @see #addPollution(World, int, int, int) + */ + public static void addPollution(TileEntity te, int aPollution) { + if (!GTMod.gregtechproxy.mPollution || aPollution == 0 || te.getWorldObj().isRemote) return; + + if (aPollution > 0 && te instanceof ICleanroomReceiver receiver) { + ICleanroom cleanroom = receiver.getCleanroom(); + if (cleanroom != null && cleanroom.isValidCleanroom()) { + cleanroom.pollute(); + } + } + + addPollution(te.getWorldObj(), te.xCoord >> 4, te.zCoord >> 4, aPollution); + } + + /** @see #addPollution(World, int, int, int) */ + public static void addPollution(Chunk ch, int aPollution) { + addPollution(ch.worldObj, ch.xPosition, ch.zPosition, aPollution); + } + + /** + * Add some pollution to given chunk. Can pass in negative to remove pollution. Will clamp the final pollution + * number to 0 if it would be changed into negative. + * + * @param w world to modify. do nothing if it's a client world + * @param chunkX chunk coordinate X, i.e. blockX >> 4 + * @param chunkZ chunk coordinate Z, i.e. blockZ >> 4 + * @param aPollution desired delta. Positive means the pollution in chunk would go higher. + */ + public static void addPollution(World w, int chunkX, int chunkZ, int aPollution) { + if (!GTMod.gregtechproxy.mPollution || aPollution == 0 || w.isRemote) return; + mutatePollution(w, chunkX, chunkZ, d -> d.changeAmount(aPollution), null); + } + + private static void mutatePollution(World world, int x, int z, Consumer mutator, + @Nullable Set chunks) { + ChunkData data = STORAGE.get(world, x, z); + boolean hadPollution = data.getAmount() > 0; + mutator.accept(data); + boolean hasPollution = data.getAmount() > 0; + if (hasPollution != hadPollution) { + if (chunks == null) chunks = getPollutionManager(world).pollutedChunks; + if (hasPollution) chunks.add(new ChunkCoordIntPair(x, z)); + else chunks.remove(new ChunkCoordIntPair(x, z)); + } + } + + /** @see #getPollution(World, int, int) */ + public static int getPollution(IGregTechTileEntity te) { + return getPollution(te.getWorld(), te.getXCoord() >> 4, te.getZCoord() >> 4); + } + + /** @see #getPollution(World, int, int) */ + public static int getPollution(Chunk ch) { + return getPollution(ch.worldObj, ch.xPosition, ch.zPosition); + } + + /** + * Get the pollution in specified chunk + * + * @param w world to look in. can be a client world, but that limits the knowledge to what server side send us + * @param chunkX chunk coordinate X, i.e. blockX >> 4 + * @param chunkZ chunk coordinate Z, i.e. blockZ >> 4 + * @return pollution amount. may be 0 if pollution is disabled, or if it's a client world and server did not send us + * info about this chunk + */ + public static int getPollution(World w, int chunkX, int chunkZ) { + if (!GTMod.gregtechproxy.mPollution) return 0; + if (w.isRemote) + // it really should be querying the client side stuff instead + return PollutionRenderer.getKnownPollution(chunkX << 4, chunkZ << 4); + return STORAGE.get(w, chunkX, chunkZ) + .getAmount(); + } + + @Deprecated + public static int getPollution(ChunkCoordIntPair aCh, int aDim) { + return getPollution(DimensionManager.getWorld(aDim), aCh.chunkXPos, aCh.chunkZPos); + } + + public static boolean hasPollution(Chunk ch) { + if (!GTMod.gregtechproxy.mPollution) return false; + return STORAGE.isCreated(ch.worldObj, ch.getChunkCoordIntPair()) && STORAGE.get(ch) + .getAmount() > 0; + } + + // Add compatibility with old code + @Deprecated /* Don't use it... too weird way of passing position */ + public static void addPollution(World aWorld, ChunkPosition aPos, int aPollution) { + // The abuse of ChunkPosition to store block position and dim... + // is just bad especially when that is both used to store ChunkPos and BlockPos depending on context + addPollution(aWorld.getChunkFromBlockCoords(aPos.chunkPosX, aPos.chunkPosZ), aPollution); + } + + static void migrate(ChunkDataEvent.Load e) { + addPollution( + e.getChunk(), + e.getData() + .getInteger("GTPOLLUTION")); + } + + public static class GT_PollutionEventHandler { + + @SubscribeEvent + public void chunkWatch(ChunkWatchEvent.Watch event) { + if (!GTMod.gregtechproxy.mPollution) return; + World world = event.player.worldObj; + if (STORAGE.isCreated(world, event.chunk)) { + int pollution = STORAGE.get(world, event.chunk) + .getAmount(); + if (pollution > POLLUTIONPACKET_MINVALUE) + GTValues.NW.sendToPlayer(new GTPacketPollution(event.chunk, pollution), event.player); + } + } + + @SubscribeEvent + public void onWorldLoad(WorldEvent.Load e) { + // super class loads everything lazily. We force it to load them all. + if (!e.world.isRemote) STORAGE.loadAll(e.world); + } + } + + @ParametersAreNonnullByDefault + private static final class Storage extends GTChunkAssociatedData { + + private Storage() { + super("Pollution", ChunkData.class, 64, (byte) 0, false); + } + + @Override + protected void writeElement(DataOutput output, ChunkData element, World world, int chunkX, int chunkZ) + throws IOException { + output.writeInt(element.getAmount()); + } + + @Override + protected ChunkData readElement(DataInput input, int version, World world, int chunkX, int chunkZ) + throws IOException { + if (version != 0) throw new IOException("Region file corrupted"); + ChunkData data = new ChunkData(input.readInt()); + if (data.getAmount() > 0) + getPollutionManager(world).pollutedChunks.add(new ChunkCoordIntPair(chunkX, chunkZ)); + return data; + } + + @Override + protected ChunkData createElement(World world, int chunkX, int chunkZ) { + return new ChunkData(); + } + + @Override + public void loadAll(World w) { + super.loadAll(w); + } + + public boolean isCreated(World world, ChunkCoordIntPair coord) { + return isCreated(world.provider.dimensionId, coord.chunkXPos, coord.chunkZPos); + } + } + + private static final class ChunkData implements GTChunkAssociatedData.IData { + + public int amount; + + private ChunkData() { + this(0); + } + + private ChunkData(int amount) { + this.amount = Math.max(0, amount); + } + + /** + * Current pollution amount. + */ + public int getAmount() { + return amount; + } + + public void setAmount(int amount) { + this.amount = Math.max(amount, 0); + } + + public void changeAmount(int delta) { + this.amount = Math.max(GTUtility.safeInt(amount + (long) delta, 0), 0); + } + + @Override + public boolean isSameAsDefault() { + return amount == 0; + } + } +} diff --git a/src/main/java/gregtech/common/RecipeAdder.java b/src/main/java/gregtech/common/RecipeAdder.java new file mode 100644 index 0000000000..dd36fd4727 --- /dev/null +++ b/src/main/java/gregtech/common/RecipeAdder.java @@ -0,0 +1,12 @@ +package gregtech.common; + +import gregtech.api.interfaces.internal.IGTRecipeAdder; +import gregtech.api.util.GTRecipeBuilder; + +public class RecipeAdder implements IGTRecipeAdder { + + @Override + public GTRecipeBuilder stdBuilder() { + return GTRecipeBuilder.builder(); + } +} diff --git a/src/main/java/gregtech/common/SmallOreBuilder.java b/src/main/java/gregtech/common/SmallOreBuilder.java index e9a68e7caf..727ea98fc6 100644 --- a/src/main/java/gregtech/common/SmallOreBuilder.java +++ b/src/main/java/gregtech/common/SmallOreBuilder.java @@ -3,7 +3,7 @@ package gregtech.common; import java.util.HashMap; import java.util.Map; -import bloodasp.galacticgreg.api.enums.DimensionDef; +import galacticgreg.api.enums.DimensionDef; import gregtech.api.enums.Materials; public class SmallOreBuilder { diff --git a/src/main/java/gregtech/common/UndergroundOil.java b/src/main/java/gregtech/common/UndergroundOil.java new file mode 100644 index 0000000000..e5da237288 --- /dev/null +++ b/src/main/java/gregtech/common/UndergroundOil.java @@ -0,0 +1,339 @@ +package gregtech.common; + +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Objects; +import java.util.WeakHashMap; + +import javax.annotation.Nullable; +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.event.world.ChunkDataEvent; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.tuple.Pair; + +import gregtech.GTMod; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.objects.GTUODimension; +import gregtech.api.objects.GTUOFluid; +import gregtech.api.objects.XSTR; +import gregtech.api.util.GTChunkAssociatedData; + +/** + * Created by Tec on 29.04.2017. + */ +public class UndergroundOil { + + public static final short DIVIDER = 5000; + private static final GT_UndergroundOilStore STORAGE = new GT_UndergroundOilStore(); + private static final ChunkData NIL_FLUID_STACK = new ChunkData(-1, null, null, false); + + /** + * Effectively just call {@code undergroundOil(te, -1)} for you + * + * @see #undergroundOil(World, int, int, float) + */ + public static FluidStack undergroundOilReadInformation(IGregTechTileEntity te) { + return undergroundOil( + te.getWorld() + .getChunkFromBlockCoords(te.getXCoord(), te.getZCoord()), + -1); + } + + /** + * Effectively just call {@code undergroundOil(chunk, -1)} for you + * + * @see #undergroundOil(World, int, int, float) + */ + public static FluidStack undergroundOilReadInformation(Chunk chunk) { + return undergroundOil(chunk, -1); + } + + /** @see #undergroundOil(World, int, int, float) */ + public static FluidStack undergroundOil(IGregTechTileEntity te, float readOrDrainCoefficient) { + return undergroundOil( + te.getWorld() + .getChunkFromBlockCoords(te.getXCoord(), te.getZCoord()), + readOrDrainCoefficient); + } + + // Returns whole content for information purposes -> when drainSpeedCoefficient < 0 + // Else returns extracted fluidStack if amount > 0, or null otherwise + /** @see #undergroundOil(World, int, int, float) */ + public static FluidStack undergroundOil(Chunk chunk, float readOrDrainCoefficient) { + return undergroundOil(chunk.worldObj, chunk.xPosition, chunk.zPosition, readOrDrainCoefficient); + } + + /** + * Pump fluid or read info. + * + * @param w a remote World. For a WorldClient it will always tell you null + * @param chunkX chunk coordinate X, i.e. blockX >> 4 + * @param chunkZ chunk coordinate Z, i.e. blockZ >> 4 + * @param readOrDrainCoefficient how fast to pump. The higher the faster. use negative to read expected current + * output + * @return null if nothing here, or depleted already, or a client side world + */ + public static FluidStack undergroundOil(World w, int chunkX, int chunkZ, float readOrDrainCoefficient) { + if (w.isRemote) return null; // troublemakers go away + ChunkData chunkData = STORAGE.get(w, chunkX, chunkZ); + if (chunkData.getVein() == null || chunkData.getFluid() == null) // nothing here... + return null; + // do stuff on it if needed + FluidStack fluidInChunk = new FluidStack(chunkData.getFluid(), 0); + if (readOrDrainCoefficient >= 0) { + int fluidExtracted = (int) Math.floor(chunkData.getAmount() * (double) readOrDrainCoefficient / DIVIDER); + double averageDecrease = chunkData.getVein().DecreasePerOperationAmount * (double) readOrDrainCoefficient; + int decrease = (int) Math.ceil(averageDecrease); + if (fluidExtracted <= 0 || chunkData.amount <= decrease) { // decrease - here it is max value of extraction + // for easy check + chunkData.setAmount(0); + } else { + fluidInChunk.amount = fluidExtracted; // give appropriate amount + if (XSTR_INSTANCE.nextFloat() < (decrease - averageDecrease)) decrease--; // use XSTR_INSTANCE to + // "subtract double from int" + // ex. + // averageDecrease=3.9 + // decrease= ceil from 3.9 = 4 + // decrease-averageDecrease=0.1 -> chance to subtract 1 + // if XSTR_INSTANCE is < chance then subtract 1 + chunkData.changeAmount(-decrease); // diminish amount, "randomly" adjusted to double value + // (averageDecrease) + } + } else { // just get info + if (chunkData.amount <= DIVIDER) { + chunkData.setAmount(0); + } else { + // get the expected current output + fluidInChunk.amount = (int) Math + .floor(chunkData.getAmount() * (double) -readOrDrainCoefficient / DIVIDER); + } + } + return fluidInChunk; + } + + /** + * Get the deposit as if it is never exploited + * + * @return UO fluid kind and amount, or null if nothing here. + */ + public static Pair getPristineAmount(World world, int chunkX, int chunkZ) { + int dimensionId = world.provider.dimensionId; + GTUODimension dimension = GTMod.gregtechproxy.mUndergroundOil.GetDimension(dimensionId); + if (dimension == null) return null; + // prepare RNG + final XSTR tVeinRNG = new XSTR(world.getSeed() + dimensionId * 2L + (chunkX >> 3) + 8267L * (chunkZ >> 3)); + GTUOFluid uoFluid = dimension.getRandomFluid(tVeinRNG); + // nothing here :( + if (uoFluid == null || uoFluid.getFluid() == null) return null; + // offset each chunk's fluid amount by +-25% + // discard random values not for current chunk + int veinAverage = uoFluid.getRandomAmount(tVeinRNG); + for (int i = 0; i < (((chunkX & 0x7) << 3) | chunkZ & 0x7); i++) { + tVeinRNG.next(24); + } + int amount = (int) ((float) veinAverage * (0.75f + (tVeinRNG.nextFloat() / 2f))); + return Pair.of(uoFluid, amount); + } + + static void migrate(ChunkDataEvent.Load e) { + if (e.getData() + .hasKey("GTOIL") + && e.getData() + .hasKey("GTOILFLUID")) { + ChunkData chunkData = STORAGE.get(e.getChunk()); + Fluid fluid = chunkData.getFluid(); + if (fluid != null && fluid.getID() == e.getData() + .getInteger("GTOILFLUID")) chunkData.setAmount( + Math.min( + chunkData.getAmount(), + e.getData() + .getInteger("GTOIL"))); + } + } + + /** + * Revamped UO store. + *

+ * Primary functionality: + * + *

    + *
  • Decouple data storage with chunk, making it possible to pump oil from unloaded chunks
  • + *
  • Regen detection. If fluid generation config is changed, chunk fluid will be regenerated.
  • + *
+ * + *

Serialized form

+ *

+ * Since the exact file layout is controlled by the super class, here we only concern how each chunk's data is + * written. + *

Form A: Empty Chunk

+ *
    + *
  1. 4 bytes of 0
  2. + *
+ * + *

Form B: Normal Chunk

+ *
    + *
  1. 4 bytes unsigned integer. Vein Hash.
  2. + *
  3. UTF string. Vein Key.
  4. + *
  5. 4 bytes signed integer. Fluid amount.
  6. + *
+ * + * @author glease + */ + @ParametersAreNonnullByDefault + private static class GT_UndergroundOilStore extends GTChunkAssociatedData { + + private static final WeakHashMap hashes = new WeakHashMap<>(); + + private GT_UndergroundOilStore() { + super("UO", UndergroundOil.ChunkData.class, 64, (byte) 0, false); + } + + @Override + protected void writeElement(DataOutput output, ChunkData element, World world, int chunkX, int chunkZ) + throws IOException { + /* see class javadoc for explanation */ + output.writeInt(element.getVeinHash()); + if (element.getVeinKey() == null) return; + output.writeUTF(element.getVeinKey()); + if (element.getAmount() > 0 && element.getFluid() != null) { + output.writeInt(element.getAmount()); + } else { + output.writeInt(-1); + } + } + + @Override + protected UndergroundOil.ChunkData readElement(DataInput input, int version, World world, int chunkX, + int chunkZ) throws IOException { + /* see class javadoc for explanation */ + if (version != 0) throw new IOException("Region file corrupted"); + UndergroundOil.ChunkData pristine = createElement(world, chunkX, chunkZ); + int hash = input.readInt(); + String veinKey = hash != 0 ? input.readUTF() : null; + int amount = hash != 0 ? input.readInt() : -1; + if (hash != pristine.veinHash || !Objects.equals(veinKey, pristine.getVeinKey())) { + // vein config changed. use regen-ed data. + return pristine; + } + if (hash == 0) return NIL_FLUID_STACK; + return new UndergroundOil.ChunkData( + amount, + GTMod.gregtechproxy.mUndergroundOil.GetDimension(world.provider.dimensionId) + .getUOFluid(veinKey), + veinKey); + } + + @Override + protected UndergroundOil.ChunkData createElement(World world, int chunkX, int chunkZ) { + Pair pristine = getPristineAmount(world, chunkX, chunkZ); + if (pristine == null) return NIL_FLUID_STACK; + int dimensionId = world.provider.dimensionId; + GTUODimension dimension = GTMod.gregtechproxy.mUndergroundOil.GetDimension(dimensionId); + return new UndergroundOil.ChunkData( + pristine.getRight(), + pristine.getLeft(), + dimension.getUOFluidKey(pristine.getLeft()), + false); + } + + private static int hash(@Nullable GTUOFluid fluid) { + if (fluid == null) return 0; + int result = fluid.Registry.hashCode(); + result = 31 * result + fluid.MaxAmount; + result = 31 * result + fluid.MinAmount; + result = 31 * result + fluid.Chance; + result = 31 * result + fluid.DecreasePerOperationAmount; + return result == 0 ? 1 : result; + } + } + + /** + * Represent the amount of fluid in a given chunk. + */ + private static final class ChunkData implements GTChunkAssociatedData.IData { + + private final Fluid fluid; + + @Nullable + private final GTUOFluid vein; + + private final String veinKey; + private final int veinHash; + private int amount; + private boolean dirty; + + private ChunkData(int amount, GTUOFluid veinKey, String veinID) { + this(amount, veinKey, veinID, true); + } + + private ChunkData(int amount, @Nullable GTUOFluid vein, @Nullable String veinKey, boolean dirty) { + this.amount = amount; + this.vein = vein; + this.dirty = dirty; + if (vein == null) { + fluid = null; + this.veinKey = null; + veinHash = 0; + } else { + fluid = vein.getFluid(); + this.veinKey = veinKey; + veinHash = GT_UndergroundOilStore.hashes.computeIfAbsent(vein, GT_UndergroundOilStore::hash); + } + } + + /** + * The current fluid type. {@code null} if vein is generated to be empty. + */ + @Nullable + public Fluid getFluid() { + return fluid; + } + + /** + * Current fluid amount. Might be 0 if empty. Cannot be negative + */ + public int getAmount() { + return amount; + } + + public void setAmount(int amount) { + if (this.amount != amount) dirty = true; + this.amount = Math.max(0, amount); + } + + public void changeAmount(int delta) { + if (delta != 0) dirty = true; + this.amount = Math.max(amount + delta, 0); + } + + @Nullable + public GTUOFluid getVein() { + return vein; + } + + /** + * The vein ID. Might be null if generated to be empty. + */ + @Nullable + public String getVeinKey() { + return veinKey; + } + + public int getVeinHash() { + return veinHash; + } + + @Override + public boolean isSameAsDefault() { + return !dirty; + } + } +} diff --git a/src/main/java/gregtech/common/WirelessComputationPacket.java b/src/main/java/gregtech/common/WirelessComputationPacket.java index cafe4d93dc..1b485a63c9 100644 --- a/src/main/java/gregtech/common/WirelessComputationPacket.java +++ b/src/main/java/gregtech/common/WirelessComputationPacket.java @@ -4,11 +4,11 @@ import static gregtech.common.misc.GlobalVariableStorage.GlobalWirelessComputati import java.util.UUID; -import com.github.technus.tectech.mechanics.dataTransport.QuantumDataPacket; import com.gtnewhorizon.structurelib.util.Vec3Impl; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.common.misc.spaceprojects.SpaceProjectManager; +import tectech.mechanics.dataTransport.QuantumDataPacket; public class WirelessComputationPacket { diff --git a/src/main/java/gregtech/common/WorldgenGTOreLayer.java b/src/main/java/gregtech/common/WorldgenGTOreLayer.java new file mode 100644 index 0000000000..a8f57ef1de --- /dev/null +++ b/src/main/java/gregtech/common/WorldgenGTOreLayer.java @@ -0,0 +1,439 @@ +package gregtech.common; + +import static gregtech.api.enums.GTValues.debugOrevein; +import static gregtech.api.enums.GTValues.oreveinPlacerOres; +import static gregtech.api.enums.GTValues.oreveinPlacerOresMultiplier; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.WorldProviderEnd; +import net.minecraft.world.WorldProviderHell; +import net.minecraft.world.WorldProviderSurface; +import net.minecraft.world.chunk.IChunkProvider; + +import galacticgreg.api.enums.DimensionDef; +import gregtech.api.GregTechAPI; +import gregtech.api.util.GTLog; +import gregtech.api.world.GTWorldgen; +import gregtech.common.blocks.TileEntityOres; + +public class WorldgenGTOreLayer extends GTWorldgen { + + public static ArrayList sList = new ArrayList<>(); + public static int sWeight = 0; + public final short mMinY; + public final short mMaxY; + public final short mWeight; + public final short mDensity; + public final short mSize; + public final short mPrimaryMeta; + public final short mSecondaryMeta; + public final short mBetweenMeta; + public final short mSporadicMeta; + public final String mRestrictBiome; + public final boolean mOverworld; + public final boolean mNether; + public final boolean mEnd; + public final boolean mEndAsteroid; + public final boolean twilightForest; + public static final int WRONG_BIOME = 0; + public static final int WRONG_DIMENSION = 1; + public static final int NO_ORE_IN_BOTTOM_LAYER = 2; + public static final int NO_OVERLAP = 3; + public static final int ORE_PLACED = 4; + public static final int NO_OVERLAP_AIR_BLOCK = 5; + public final String aTextWorldgen = "worldgen."; + + public Class[] mAllowedProviders; + + public WorldgenGTOreLayer(OreMixBuilder mix) { + super(mix.oreMixName, sList, mix.enabledByDefault); + this.mOverworld = mix.dimsEnabled.getOrDefault(OreMixBuilder.OW, false); + this.mNether = mix.dimsEnabled.getOrDefault(OreMixBuilder.NETHER, false); + this.mEnd = mix.dimsEnabled.getOrDefault(OreMixBuilder.THE_END, false); + this.mEndAsteroid = mix.dimsEnabled + .getOrDefault(DimensionDef.EndAsteroids.modDimensionDef.getDimensionName(), false); + this.twilightForest = mix.dimsEnabled.getOrDefault(OreMixBuilder.TWILIGHT_FOREST, false); + this.mMinY = ((short) mix.minY); + short mMaxY = ((short) mix.maxY); + if (mMaxY < (this.mMinY + 9)) { + GTLog.out.println("Oremix " + this.mWorldGenName + " has invalid Min/Max heights!"); + mMaxY = (short) (this.mMinY + 9); + } + this.mMaxY = mMaxY; + this.mWeight = (short) mix.weight; + this.mDensity = (short) mix.density; + this.mSize = (short) Math.max(1, mix.size); + this.mPrimaryMeta = (short) mix.primary.mMetaItemSubID; + this.mSecondaryMeta = (short) mix.secondary.mMetaItemSubID; + this.mBetweenMeta = (short) mix.between.mMetaItemSubID; + this.mSporadicMeta = (short) mix.sporadic.mMetaItemSubID; + this.mRestrictBiome = "None"; + + if (this.mEnabled) { + sWeight += this.mWeight; + } + + List allowedProviders = new ArrayList<>(); + if (this.mNether) { + allowedProviders.add(WorldProviderHell.class); + } + + if (this.mOverworld) { + allowedProviders.add(WorldProviderSurface.class); + } + + if (this.mEnd) { + allowedProviders.add(WorldProviderEnd.class); + } + mAllowedProviders = allowedProviders.toArray(new Class[allowedProviders.size()]); + } + + @Override + public int executeWorldgenChunkified(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, + int aChunkZ, int aSeedX, int aSeedZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { + if (mWorldGenName.equals("NoOresInVein")) { + if (debugOrevein) GTLog.out.println(" NoOresInVein"); + // Return a special empty orevein + return ORE_PLACED; + } + + if (!isGenerationAllowed(aWorld, mAllowedProviders)) { + // The following code can be used for debugging, but it spams in logs + // if (debugOrevein) { GTLog.out.println( "Wrong dimension" ); } + return WRONG_DIMENSION; + } + + if (!this.mRestrictBiome.equals("None") && !(this.mRestrictBiome.equals(aBiome))) { + return WRONG_BIOME; + } + // For optimal performance, this should be done upstream. Meh + String tDimensionName = aWorld.provider.getDimensionName(); + boolean isUnderdark = tDimensionName.equals("Underdark"); + + int[] placeCount = new int[4]; + + int tMinY = mMinY + aRandom.nextInt(mMaxY - mMinY - 5); + // Determine West/East ends of orevein + int wXVein = aSeedX - aRandom.nextInt(mSize); // West side + int eXVein = aSeedX + 16 + aRandom.nextInt(mSize); + // Limit Orevein to only blocks present in current chunk + int wX = Math.max(wXVein, aChunkX + 2); // Bias placement by 2 blocks to prevent worldgen cascade. + int eX = Math.min(eXVein, aChunkX + 2 + 16); + + // Get a block at the center of the chunk and the bottom of the orevein. + Block tBlock = aWorld.getBlock(aChunkX + 7, tMinY, aChunkZ + 9); + + if (wX >= eX) { // No overlap between orevein and this chunk exists in X + if (tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.stone) + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.netherrack) + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.end_stone) + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, GregTechAPI.sBlockGranites) + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, GregTechAPI.sBlockStones)) { + // Didn't reach, but could have placed. Save orevein for future use. + return NO_OVERLAP; + } else { + // Didn't reach, but couldn't place in test spot anywys, try for another orevein + return NO_OVERLAP_AIR_BLOCK; + } + } + // Determine North/Sound ends of orevein + int nZVein = aSeedZ - aRandom.nextInt(mSize); + int sZVein = aSeedZ + 16 + aRandom.nextInt(mSize); + + int nZ = Math.max(nZVein, aChunkZ + 2); // Bias placement by 2 blocks to prevent worldgen cascade. + int sZ = Math.min(sZVein, aChunkZ + 2 + 16); + if (nZ >= sZ) { // No overlap between orevein and this chunk exists in Z + if (tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.stone) + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.netherrack) + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, Blocks.end_stone) + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, GregTechAPI.sBlockGranites) + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 7, tMinY, aChunkZ + 9, GregTechAPI.sBlockStones)) { + // Didn't reach, but could have placed. Save orevein for future use. + return NO_OVERLAP; + } else { + // Didn't reach, but couldn't place in test spot anywys, try for another orevein + return NO_OVERLAP_AIR_BLOCK; + } + } + + if (debugOrevein) { + GTLog.out.print( + "Trying Orevein:" + this.mWorldGenName + + " Dimension=" + + tDimensionName + + " mX=" + + aChunkX / 16 + + " mZ=" + + aChunkZ / 16 + + " oreseedX=" + + aSeedX / 16 + + " oreseedZ=" + + aSeedZ / 16 + + " cY=" + + tMinY); + } + // Adjust the density down the more chunks we are away from the oreseed. The 5 chunks surrounding the seed + // should always be max density due to truncation of Math.sqrt(). + int localDensity = Math.max( + 1, + this.mDensity / ((int) Math + .sqrt(2 + Math.pow(aChunkX / 16 - aSeedX / 16, 2) + Math.pow(aChunkZ / 16 - aSeedZ / 16, 2)))); + + // To allow for early exit due to no ore placed in the bottom layer (probably because we are in the sky), unroll + // 1 pass through the loop + // Now we do bottom-level-first oregen, and work our way upwards. + // Layer -1 Secondary and Sporadic + int level = tMinY - 1; // Dunno why, but the first layer is actually played one below tMinY. Go figure. + for (int tX = wX; tX < eX; tX++) { + int placeX = Math + .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); + for (int tZ = nZ; tZ < sZ; tZ++) { + int placeZ = Math + .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); + if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mSecondaryMeta > 0)) { + if (TileEntityOres.setOreBlock(aWorld, tX, level, tZ, this.mSecondaryMeta, false, isUnderdark)) { + placeCount[1]++; + } + } else + if ((aRandom.nextInt(7) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate + if (TileEntityOres + .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) + placeCount[3]++; + } + } + } + if ((placeCount[1] + placeCount[3]) == 0) { + if (debugOrevein) GTLog.out.println(" No ore in bottom layer"); + return NO_ORE_IN_BOTTOM_LAYER; // Exit early, didn't place anything in the bottom layer + } + // Layers 0 & 1 Secondary and Sporadic + for (level = tMinY; level < (tMinY + 2); level++) { + for (int tX = wX; tX < eX; tX++) { + int placeX = Math + .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); + for (int tZ = nZ; tZ < sZ; tZ++) { + int placeZ = Math.max( + 1, + Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); + if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mSecondaryMeta > 0)) { + if (TileEntityOres + .setOreBlock(aWorld, tX, level, tZ, this.mSecondaryMeta, false, isUnderdark)) { + placeCount[1]++; + } + } else if ((aRandom.nextInt(7) == 0) + && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate + if (TileEntityOres + .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) + placeCount[3]++; + } + } + } + } + // Layer 2 is Secondary, in-between, and sporadic + for (int tX = wX; tX < eX; tX++) { + int placeX = Math + .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); + for (int tZ = nZ; tZ < sZ; tZ++) { + int placeZ = Math + .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); + if ((aRandom.nextInt(2) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mBetweenMeta > 0)) { // Between are reduce by 1/2 to compensate + if (TileEntityOres.setOreBlock(aWorld, tX, level, tZ, this.mBetweenMeta, false, isUnderdark)) { + placeCount[2]++; + } + } else if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mSecondaryMeta > 0)) { + if (TileEntityOres + .setOreBlock(aWorld, tX, level, tZ, this.mSecondaryMeta, false, isUnderdark)) { + placeCount[1]++; + } + } else + if ((aRandom.nextInt(7) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate + if (TileEntityOres + .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) + placeCount[3]++; + } + } + } + level++; // Increment level to next layer + // Layer 3 is In-between, and sporadic + for (int tX = wX; tX < eX; tX++) { + int placeX = Math + .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); + for (int tZ = nZ; tZ < sZ; tZ++) { + int placeZ = Math + .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); + if ((aRandom.nextInt(2) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mBetweenMeta > 0)) { // Between are reduce by 1/2 to compensate + if (TileEntityOres.setOreBlock(aWorld, tX, level, tZ, this.mBetweenMeta, false, isUnderdark)) { + placeCount[2]++; + } + } else + if ((aRandom.nextInt(7) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate + if (TileEntityOres + .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) + placeCount[3]++; + } + } + } + level++; // Increment level to next layer + // Layer 4 is In-between, Primary and sporadic + for (int tX = wX; tX < eX; tX++) { + int placeX = Math + .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); + for (int tZ = nZ; tZ < sZ; tZ++) { + int placeZ = Math + .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); + if ((aRandom.nextInt(2) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mBetweenMeta > 0)) { // Between are reduce by 1/2 to compensate + if (TileEntityOres.setOreBlock(aWorld, tX, level, tZ, this.mBetweenMeta, false, isUnderdark)) { + placeCount[2]++; + } + } else + if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mPrimaryMeta > 0)) { + if (TileEntityOres.setOreBlock(aWorld, tX, level, tZ, this.mPrimaryMeta, false, isUnderdark)) { + placeCount[1]++; + } + } else if ((aRandom.nextInt(7) == 0) + && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate + if (TileEntityOres + .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) + placeCount[3]++; + } + } + } + level++; // Increment level to next layer + // Layer 5 is In-between, Primary and sporadic + for (int tX = wX; tX < eX; tX++) { + int placeX = Math + .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); + for (int tZ = nZ; tZ < sZ; tZ++) { + int placeZ = Math + .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); + if ((aRandom.nextInt(2) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mBetweenMeta > 0)) { // Between are reduce by 1/2 to compensate + if (TileEntityOres.setOreBlock(aWorld, tX, level, tZ, this.mBetweenMeta, false, isUnderdark)) { + placeCount[2]++; + } + } else + if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mPrimaryMeta > 0)) { + if (TileEntityOres.setOreBlock(aWorld, tX, level, tZ, this.mPrimaryMeta, false, isUnderdark)) { + placeCount[1]++; + } + } else if ((aRandom.nextInt(7) == 0) + && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate + if (TileEntityOres + .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) + placeCount[3]++; + } + } + } + level++; // Increment level to next layer + // Layer 6 is Primary and sporadic + for (int tX = wX; tX < eX; tX++) { + int placeX = Math + .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); + for (int tZ = nZ; tZ < sZ; tZ++) { + int placeZ = Math + .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); + if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mPrimaryMeta > 0)) { + if (TileEntityOres.setOreBlock(aWorld, tX, level, tZ, this.mPrimaryMeta, false, isUnderdark)) { + placeCount[1]++; + } + } else + if ((aRandom.nextInt(7) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate + if (TileEntityOres + .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) + placeCount[3]++; + } + } + } + level++; // Increment level to next layer + // Layer 7 is Primary and sporadic + for (int tX = wX; tX < eX; tX++) { + int placeX = Math + .max(1, Math.max(MathHelper.abs_int(wXVein - tX), MathHelper.abs_int(eXVein - tX)) / localDensity); + for (int tZ = nZ; tZ < sZ; tZ++) { + int placeZ = Math + .max(1, Math.max(MathHelper.abs_int(sZVein - tZ), MathHelper.abs_int(nZVein - tZ)) / localDensity); + if (((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) && (this.mPrimaryMeta > 0)) { + if (TileEntityOres.setOreBlock(aWorld, tX, level, tZ, this.mPrimaryMeta, false, isUnderdark)) { + placeCount[1]++; + } + } else + if ((aRandom.nextInt(7) == 0) && ((aRandom.nextInt(placeZ) == 0) || (aRandom.nextInt(placeX) == 0)) + && (this.mSporadicMeta > 0)) { // Sporadics are reduce by 1/7 to compensate + if (TileEntityOres + .setOreBlock(aWorld, tX, level, tZ, this.mSporadicMeta, false, isUnderdark)) + placeCount[3]++; + } + } + } + // Place small ores for the vein + if (oreveinPlacerOres) { + int nSmallOres = (eX - wX) * (sZ - nZ) * this.mDensity / 10 * oreveinPlacerOresMultiplier; + // Small ores are placed in the whole chunk in which the vein appears. + for (int nSmallOresCount = 0; nSmallOresCount < nSmallOres; nSmallOresCount++) { + int tX = aRandom.nextInt(16) + aChunkX + 2; + int tZ = aRandom.nextInt(16) + aChunkZ + 2; + int tY = aRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. + if (this.mPrimaryMeta > 0) + TileEntityOres.setOreBlock(aWorld, tX, tY, tZ, this.mPrimaryMeta, true, isUnderdark); + tX = aRandom.nextInt(16) + aChunkX + 2; + tZ = aRandom.nextInt(16) + aChunkZ + 2; + tY = aRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. + if (this.mSecondaryMeta > 0) + TileEntityOres.setOreBlock(aWorld, tX, tY, tZ, this.mSecondaryMeta, true, isUnderdark); + tX = aRandom.nextInt(16) + aChunkX + 2; + tZ = aRandom.nextInt(16) + aChunkZ + 2; + tY = aRandom.nextInt(160) + 10; // Y height can vary from 10 to 170 for small ores. + if (this.mBetweenMeta > 0) + TileEntityOres.setOreBlock(aWorld, tX, tY, tZ, this.mBetweenMeta, true, isUnderdark); + tX = aRandom.nextInt(16) + aChunkX + 2; + tZ = aRandom.nextInt(16) + aChunkZ + 2; + tY = aRandom.nextInt(190) + 10; // Y height can vary from 10 to 200 for small ores. + if (this.mSporadicMeta > 0) + TileEntityOres.setOreBlock(aWorld, tX, tY, tZ, this.mSporadicMeta, true, isUnderdark); + } + } + if (debugOrevein) { + GTLog.out.println( + " wXVein" + wXVein + + " eXVein" + + eXVein + + " nZVein" + + nZVein + + " sZVein" + + sZVein + + " locDen=" + + localDensity + + " Den=" + + this.mDensity + + " Sec=" + + placeCount[1] + + " Spo=" + + placeCount[3] + + " Bet=" + + placeCount[2] + + " Pri=" + + placeCount[0]); + } + // Something (at least the bottom layer must have 1 block) must have been placed, return true + return ORE_PLACED; + } +} diff --git a/src/main/java/gregtech/common/WorldgenGTOreSmallPieces.java b/src/main/java/gregtech/common/WorldgenGTOreSmallPieces.java new file mode 100644 index 0000000000..86d9c84e5f --- /dev/null +++ b/src/main/java/gregtech/common/WorldgenGTOreSmallPieces.java @@ -0,0 +1,107 @@ +package gregtech.common; + +import static gregtech.api.enums.GTValues.debugSmallOres; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.world.World; +import net.minecraft.world.WorldProviderEnd; +import net.minecraft.world.WorldProviderHell; +import net.minecraft.world.WorldProviderSurface; +import net.minecraft.world.chunk.IChunkProvider; + +import gregtech.api.GregTechAPI; +import gregtech.api.util.GTLog; +import gregtech.api.world.GTWorldgen; +import gregtech.common.blocks.TileEntityOres; + +public class WorldgenGTOreSmallPieces extends GTWorldgen { + + public final short mMinY; + public final short mMaxY; + public final short mAmount; + public final short mMeta; + public final boolean mOverworld; + public final boolean mNether; + public final boolean mEnd; + public final boolean twilightForest; + public final String mBiome; + public static ArrayList sList = new ArrayList<>(); + + public Class[] mAllowedProviders; + + public WorldgenGTOreSmallPieces(SmallOreBuilder ore) { + super(ore.smallOreName, GregTechAPI.sWorldgenList, ore.enabledByDefault); + this.mOverworld = ore.dimsEnabled.getOrDefault(SmallOreBuilder.OW, false); + this.mNether = ore.dimsEnabled.getOrDefault(SmallOreBuilder.NETHER, false); + this.mEnd = ore.dimsEnabled.getOrDefault(SmallOreBuilder.THE_END, false); + this.twilightForest = ore.dimsEnabled.getOrDefault(SmallOreBuilder.TWILIGHT_FOREST, false); + + this.mMinY = (short) ore.minY; + this.mMaxY = (short) Math.max(this.mMinY + 1, ore.maxY); + this.mAmount = (short) Math.max(1, ore.amount); + this.mMeta = (short) ore.ore.mMetaItemSubID; + this.mBiome = "None"; + + if (this.mEnabled) sList.add(this); + + List allowedProviders = new ArrayList<>(); + if (this.mNether) { + allowedProviders.add(WorldProviderHell.class); + } + + if (this.mOverworld) { + allowedProviders.add(WorldProviderSurface.class); + } + + if (this.mEnd) { + allowedProviders.add(WorldProviderEnd.class); + } + mAllowedProviders = allowedProviders.toArray(new Class[allowedProviders.size()]); + } + + @Override + public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, + int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { + if (!this.mBiome.equals("None") && !(this.mBiome.equals(aBiome))) { + return false; // Not the correct biome for ore mix + } + if (!isGenerationAllowed(aWorld, mAllowedProviders)) { + return false; + } + int count = 0; + // For optimal performance, this should be done upstream. Meh + String tDimensionName = aWorld.provider.getDimensionName(); + boolean isUnderdark = tDimensionName.equals("Underdark"); + + if (this.mMeta > 0) { + int j = Math.max(1, this.mAmount / 2 + aRandom.nextInt(this.mAmount) / 2); + for (int i = 0; i < j; i++) { + TileEntityOres.setOreBlock( + aWorld, + aChunkX + 8 + aRandom.nextInt(16), + this.mMinY + aRandom.nextInt(Math.max(1, this.mMaxY - this.mMinY)), + aChunkZ + 8 + aRandom.nextInt(16), + this.mMeta, + true, + isUnderdark); + count++; + } + } + if (debugSmallOres) { + GTLog.out.println( + "Small Ore:" + this.mWorldGenName + + " @ dim=" + + aDimensionType + + " mX=" + + aChunkX / 16 + + " mZ=" + + aChunkZ / 16 + + " ore=" + + count); + } + return true; + } +} diff --git a/src/main/java/gregtech/common/WorldgenStone.java b/src/main/java/gregtech/common/WorldgenStone.java new file mode 100644 index 0000000000..d995375437 --- /dev/null +++ b/src/main/java/gregtech/common/WorldgenStone.java @@ -0,0 +1,297 @@ +package gregtech.common; + +import static gregtech.api.enums.GTValues.debugStones; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Hashtable; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraft.world.chunk.IChunkProvider; + +import gregtech.api.GregTechAPI; +import gregtech.api.objects.XSTR; +import gregtech.api.util.GTLog; +import gregtech.api.world.GTWorldgen; +import gregtech.common.blocks.BlockOresAbstract; +import gregtech.common.blocks.TileEntityOres; + +public class WorldgenStone extends GTWorldgen { + + static final double[] sizeConversion = { 1, 1, 1.333333, 1.333333, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 }; // Bias + // the + // sizes + // towards + // skinnier + // boulders, + // ie + // more + // "shafts" + // than + // dikes + // or + // sills. + + public final int mBlockMeta, mAmount, mSize, mMinY, mMaxY, mProbability, mDimensionType; + public final Block mBlock; + public final Collection mBiomeList; + public final boolean mAllowToGenerateinVoid; + private final String aTextWorldgen = "worldgen."; + + public Hashtable validStoneSeeds = new Hashtable<>(1024); + + static class StoneSeeds { + + public boolean mExists; + + StoneSeeds(boolean exists) { + mExists = exists; + } + } + + static class ValidSeeds { + + public int mX; + public int mZ; + + ValidSeeds(int x, int z) { + this.mX = x; + this.mZ = z; + } + } + + public WorldgenStone(StoneBuilder stone) { + super(stone.stoneName, GregTechAPI.sWorldgenList, stone.enabledByDefault); + mDimensionType = stone.dimension; + mBlock = stone.block; + mBlockMeta = Math.min(Math.max(stone.blockMeta, 0), 15); + mProbability = stone.probability; + mAmount = stone.amount; + mSize = stone.size; + mMinY = stone.minY; + mMaxY = stone.maxY; + mBiomeList = new ArrayList<>(); + mAllowToGenerateinVoid = stone.allowToGenerateInVoid; + } + + @Override + public boolean executeWorldgen(World aWorld, Random aRandom, String aBiome, int aDimensionType, int aChunkX, + int aChunkZ, IChunkProvider aChunkGenerator, IChunkProvider aChunkProvider) { + XSTR stoneRNG = new XSTR(); + ArrayList stones = new ArrayList<>(); + + if (!isGenerationAllowed(aWorld, mDimensionType)) { + return false; + } + if (!(this.mBiomeList.isEmpty() || this.mBiomeList.contains(aBiome))) { + return false; + } + // I think the real size of the balls is mSize/8, but the original code was difficult to understand. + // Overall there will be less GT stones since they aren't spheres any more. /16 since this code uses it as a + // radius. + double realSize = mSize / 16; + int windowWidth = ((int) realSize) / 16 + 1; // Width of chunks to check for a potential stoneseed + // Check stone seeds to see if they have been added + for (int x = aChunkX / 16 - windowWidth; x < (aChunkX / 16 + windowWidth + 1); x++) { + for (int z = aChunkZ / 16 - windowWidth; z < (aChunkZ / 16 + windowWidth + 1); z++) { + long hash = (((aWorld.provider.dimensionId & 0xffL) << 56) | (((long) x & 0x000000000fffffffL) << 28) + | ((long) z & 0x000000000fffffffL)); + if (!validStoneSeeds.containsKey(hash)) { + // Determine if RNG says to add stone at this chunk + stoneRNG.setSeed( + aWorld.getSeed() ^ hash + Math.abs(mBlockMeta) + + Math.abs(mSize) + + ((GregTechAPI.sBlockGranites == mBlock) ? (32768) : (0))); // Don't judge me. + // Want different + // values for + // different block + // types + if ((this.mProbability <= 1) || (stoneRNG.nextInt(this.mProbability) == 0)) { + // Add stone at this chunk + validStoneSeeds.put(hash, new StoneSeeds(true)); + // Add to generation list + stones.add(new ValidSeeds(x, z)); + if (debugStones) GTLog.out.println( + "New stoneseed=" + mWorldGenName + " x=" + x + " z=" + z + " realSize=" + realSize); + } else { + validStoneSeeds.put(hash, new StoneSeeds(false)); + } + } else { + // This chunk has already been checked, check to see if a boulder exists here + if (validStoneSeeds.get(hash).mExists) { + // Add to generation list + stones.add(new ValidSeeds(x, z)); + } + } + } + } + + boolean result = stones.size() != 0; + // Now process each oreseed vs this requested chunk + for (; stones.size() != 0; stones.remove(0)) { + int x = stones.get(0).mX * 16; + int z = stones.get(0).mZ * 16; + + stoneRNG.setSeed( + aWorld.getSeed() + ^ (((aWorld.provider.dimensionId & 0xffL) << 56) | (((long) x & 0x000000000fffffffL) << 28) + | ((long) z & 0x000000000fffffffL)) + Math.abs(mBlockMeta) + + Math.abs(mSize) + + ((GregTechAPI.sBlockGranites == mBlock) ? (32768) : (0))); // Don't judge me + for (int i = 0; i < this.mAmount; i++) { // Not sure why you would want more than one in a chunk! Left alone + // though. + // Locate the stoneseed XYZ. Original code would request an isAir at the seed location, causing a chunk + // generation request. + // To reduce potential worldgen cascade, we just always try to place a ball and use the check inside the + // for loop to prevent + // placement instead. + int tX = x + stoneRNG.nextInt(16); + int tY = mMinY + stoneRNG.nextInt(mMaxY - mMinY); + int tZ = z + stoneRNG.nextInt(16); + + // Determine the XYZ sizes of the stoneseed + double xSize = sizeConversion[stoneRNG.nextInt(sizeConversion.length)]; + double ySize = sizeConversion[stoneRNG.nextInt(sizeConversion.length) / 2]; // Skew the ySize towards + // the larger sizes, more + // long skinny pipes + double zSize = sizeConversion[stoneRNG.nextInt(sizeConversion.length)]; + + // Equation for an ellipsoid centered around 0,0,0 + // Sx, Sy, and Sz are size controls (size = 1/S_) + // 1 = full size, 1.333 = 75%, 2 = 50%, 4 = 25% + // (x * Sx)^2 + (y * Sy)^2 + (z * sZ)^2 <= (mSize)^2 + + // So, we setup the intial boundaries to be the size of the boulder plus a block in each direction + int tMinX = tX - (int) (realSize / xSize - 1.0); + int tMaxX = tX + (int) (realSize / xSize + 2.0); + int tMinY = tY - (int) (realSize / ySize - 1.0); + int tMaxY = tY + (int) (realSize / ySize + 2.0); + int tMinZ = tZ - (int) (realSize / zSize - 1.0); + int tMaxZ = tZ + (int) (realSize / zSize + 2.0); + + // If the (tY-ySize) of the stoneseed is air in the current chunk, mark the seed empty and move on. + if (aWorld.getBlock(aChunkX + 8, tMinY, aChunkZ + 8) + .isAir(aWorld, aChunkX + 8, tMinY, aChunkZ + 8)) { + if (debugStones) GTLog.out.println( + mWorldGenName + " tX=" + + tX + + " tY=" + + tY + + " tZ=" + + tZ + + " realSize=" + + realSize + + " xSize=" + + realSize / xSize + + " ySize=" + + realSize / ySize + + " zSize=" + + realSize / zSize + + " tMinY=" + + tMinY + + " tMaxY=" + + tMaxY + + " - Skipped because first requesting chunk would not contain this stone"); + long hash = (((aWorld.provider.dimensionId & 0xffL) << 56) + | (((long) x & 0x000000000fffffffL) << 28) + | ((long) z & 0x000000000fffffffL)); + validStoneSeeds.remove(hash); + validStoneSeeds.put(hash, new StoneSeeds(false)); + } + + // Chop the boundaries by the parts that intersect with the current chunk + int wX = Math.max(tMinX, aChunkX + 8); + int eX = Math.min(tMaxX, aChunkX + 8 + 16); + + int sZ = Math.max(tMinZ, aChunkZ + 8); + int nZ = Math.min(tMaxZ, aChunkZ + 8 + 16); + + if (debugStones) GTLog.out.println( + mWorldGenName + " tX=" + + tX + + " tY=" + + tY + + " tZ=" + + tZ + + " realSize=" + + realSize + + " xSize=" + + realSize / xSize + + " ySize=" + + realSize / ySize + + " zSize=" + + realSize / zSize + + " wX=" + + wX + + " eX=" + + eX + + " tMinY=" + + tMinY + + " tMaxY=" + + tMaxY + + " sZ=" + + sZ + + " nZ=" + + nZ); + + double rightHandSide = realSize * realSize + 1; // Precalc the right hand side + for (int iY = tMinY; iY < tMaxY; iY++) { // Do placement from the bottom up layer up. Maybe better on + // cache usage? + double yCalc = ((double) (iY - tY) * ySize); + yCalc = yCalc * yCalc; // (y*Sy)^2 + double leftHandSize = yCalc; + if (leftHandSize > rightHandSide) { + continue; // If Y alone is larger than the RHS, skip the rest of the loops + } + for (int iX = wX; iX < eX; iX++) { + double xCalc = ((double) (iX - tX) * xSize); + xCalc = xCalc * xCalc; + leftHandSize = yCalc + xCalc; + if (leftHandSize > rightHandSide) { // Again, if X and Y is larger than the RHS, skip to the + // next value + continue; + } + for (int iZ = sZ; iZ < nZ; iZ++) { + double zCalc = ((double) (iZ - tZ) * zSize); + zCalc = zCalc * zCalc; + leftHandSize = zCalc + xCalc + yCalc; + if (leftHandSize <= rightHandSide) { + // Yay! We can actually place a block now. (this part copied from original code) + Block tTargetedBlock = aWorld.getBlock(iX, iY, iZ); + if (tTargetedBlock instanceof BlockOresAbstract) { + TileEntity tTileEntity = aWorld.getTileEntity(iX, iY, iZ); + if ((tTileEntity instanceof TileEntityOres)) { + if (tTargetedBlock != GregTechAPI.sBlockOres1) { + ((TileEntityOres) tTileEntity).convertOreBlock(aWorld, iX, iY, iZ); + } + ((TileEntityOres) tTileEntity) + .overrideOreBlockMaterial(this.mBlock, (byte) this.mBlockMeta); + } + } else if (((this.mAllowToGenerateinVoid) && (aWorld.getBlock(iX, iY, iZ) + .isAir(aWorld, iX, iY, iZ))) + || ((tTargetedBlock != null) && ((tTargetedBlock + .isReplaceableOreGen(aWorld, iX, iY, iZ, Blocks.stone)) + || (tTargetedBlock + .isReplaceableOreGen(aWorld, iX, iY, iZ, Blocks.stained_hardened_clay)) + || (tTargetedBlock.isReplaceableOreGen(aWorld, iX, iY, iZ, Blocks.cobblestone)) + || (tTargetedBlock.isReplaceableOreGen(aWorld, iX, iY, iZ, Blocks.end_stone)) + || (tTargetedBlock.isReplaceableOreGen(aWorld, iX, iY, iZ, Blocks.netherrack)) + || (tTargetedBlock + .isReplaceableOreGen(aWorld, iX, iY, iZ, GregTechAPI.sBlockGranites)) + || (tTargetedBlock + .isReplaceableOreGen(aWorld, iX, iY, iZ, GregTechAPI.sBlockStones))))) { + aWorld.setBlock(iX, iY, iZ, this.mBlock, this.mBlockMeta, 0); + } + } + } + } + } + } + } + return result; + } +} diff --git a/src/main/java/gregtech/common/bees/GTAlleleBeeSpecies.java b/src/main/java/gregtech/common/bees/GTAlleleBeeSpecies.java new file mode 100644 index 0000000000..59bc4737e2 --- /dev/null +++ b/src/main/java/gregtech/common/bees/GTAlleleBeeSpecies.java @@ -0,0 +1,53 @@ +package gregtech.common.bees; + +import java.awt.Color; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.apiculture.IAlleleBeeSpeciesCustom; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IClassification; +import forestry.apiculture.genetics.alleles.AlleleBeeSpecies; + +public class GTAlleleBeeSpecies extends AlleleBeeSpecies { + + public GTAlleleBeeSpecies(String uid, boolean dominant, String unlocalizedName, String authority, + String unlocalizedDescription, IClassification branch, String binomial, Color primaryColor, + Color secondaryColor) { + super( + uid, + unlocalizedName, + authority, + unlocalizedDescription, + dominant, + branch, + binomial, + primaryColor.getRGB(), + secondaryColor.getRGB()); + AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.SPECIES); + } + + @Override + public IAlleleBeeSpeciesCustom addProduct(ItemStack product, Float chance) { + if (product == null || product.getItem() == null) { + product = new ItemStack(Items.boat); + } + if (chance <= 0.0f || chance > 1.0f) { + chance = 0.1f; + } + return super.addProduct(product, chance); + } + + @Override + public IAlleleBeeSpeciesCustom addSpecialty(ItemStack specialty, Float chance) { + if (specialty == null || specialty.getItem() == null) { + specialty = new ItemStack(Items.boat); + } + if (chance <= 0.0f || chance > 1.0f) { + chance = 0.1f; + } + return super.addSpecialty(specialty, chance); + } +} diff --git a/src/main/java/gregtech/common/bees/GTAlleleHelper.java b/src/main/java/gregtech/common/bees/GTAlleleHelper.java new file mode 100644 index 0000000000..88c46fed3d --- /dev/null +++ b/src/main/java/gregtech/common/bees/GTAlleleHelper.java @@ -0,0 +1,268 @@ +package gregtech.common.bees; + +import java.util.EnumMap; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.arboriculture.EnumTreeChromosome; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.EnumTolerance; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IAlleleBoolean; +import forestry.api.genetics.IAlleleInteger; +import forestry.api.genetics.IAlleleTolerance; +import forestry.api.genetics.IChromosomeType; +import forestry.api.lepidopterology.EnumButterflyChromosome; +import forestry.apiculture.flowers.FlowerProvider; +import forestry.core.config.Constants; +import forestry.core.genetics.alleles.AlleleBoolean; +import forestry.core.genetics.alleles.AlleleHelper; +import forestry.core.genetics.alleles.AlleleInteger; +import forestry.core.genetics.alleles.AlleleTolerance; +import forestry.core.genetics.alleles.EnumAllele; +import forestry.core.genetics.alleles.IAlleleValue; +import forestry.core.utils.vect.IVect; +import forestry.plugins.PluginManager; +import gregtech.GTMod; + +public class GTAlleleHelper extends AlleleHelper { + + private static final String modId = Constants.ID; + + private Map, Map> alleleMaps = new HashMap<>(); + + @Override + public void init() { + if (PluginManager.Module.APICULTURE.isEnabled()) { + createAlleles(EnumAllele.Fertility.class, EnumBeeChromosome.FERTILITY); + createAlleles(EnumAllele.Flowering.class, EnumBeeChromosome.FLOWERING); + } + + if (PluginManager.Module.APICULTURE.isEnabled() || PluginManager.Module.ARBORICULTURE.isEnabled()) { + createAlleles(EnumAllele.Territory.class, EnumBeeChromosome.TERRITORY, EnumTreeChromosome.TERRITORY); + + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.territoryDefault", get(EnumAllele.Territory.AVERAGE)); + } + + if (PluginManager.Module.APICULTURE.isEnabled() || PluginManager.Module.LEPIDOPTEROLOGY.isEnabled()) { + createAlleles(EnumAllele.Speed.class, EnumBeeChromosome.SPEED, EnumButterflyChromosome.SPEED); + createAlleles(EnumAllele.Lifespan.class, EnumBeeChromosome.LIFESPAN, EnumButterflyChromosome.LIFESPAN); + createAlleles( + EnumAllele.Tolerance.class, + EnumBeeChromosome.TEMPERATURE_TOLERANCE, + EnumBeeChromosome.HUMIDITY_TOLERANCE, + EnumButterflyChromosome.TEMPERATURE_TOLERANCE, + EnumButterflyChromosome.HUMIDITY_TOLERANCE); + createAlleles( + EnumAllele.Flowers.class, + EnumBeeChromosome.FLOWER_PROVIDER, + EnumButterflyChromosome.FLOWER_PROVIDER); + + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.speedNorm", get(EnumAllele.Speed.NORMAL)); + } + + if (PluginManager.Module.ARBORICULTURE.isEnabled()) { + createAlleles(EnumAllele.Height.class, EnumTreeChromosome.HEIGHT); + createAlleles(EnumAllele.Saplings.class, EnumTreeChromosome.FERTILITY); + createAlleles(EnumAllele.Yield.class, EnumTreeChromosome.YIELD); + createAlleles(EnumAllele.Fireproof.class, EnumTreeChromosome.FIREPROOF); + createAlleles(EnumAllele.Maturation.class, EnumTreeChromosome.MATURATION); + createAlleles(EnumAllele.Sappiness.class, EnumTreeChromosome.SAPPINESS); + + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.heightMax10", get(EnumAllele.Height.AVERAGE)); + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.saplingsDefault", get(EnumAllele.Saplings.AVERAGE)); + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.saplingsDouble", get(EnumAllele.Saplings.HIGH)); + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.saplingsTriple", get(EnumAllele.Saplings.HIGHER)); + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.yieldDefault", get(EnumAllele.Yield.AVERAGE)); + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.maturitySlowest", get(EnumAllele.Maturation.SLOWEST)); + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.maturitySlower", get(EnumAllele.Maturation.SLOWER)); + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.maturitySlow", get(EnumAllele.Maturation.SLOW)); + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.maturityAverage", get(EnumAllele.Maturation.AVERAGE)); + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.maturityFast", get(EnumAllele.Maturation.FAST)); + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.maturityFaster", get(EnumAllele.Maturation.FASTER)); + AlleleManager.alleleRegistry + .registerDeprecatedAlleleReplacement("forestry.maturityFastest", get(EnumAllele.Maturation.FASTEST)); + } + + if (PluginManager.Module.LEPIDOPTEROLOGY.isEnabled()) { + createAlleles(EnumAllele.Size.class, EnumButterflyChromosome.SIZE); + } + + Map integers = new HashMap<>(); + for (int i = 1; i <= 10; i++) { + IAlleleInteger alleleInteger = new AlleleInteger(modId, "i", i + "d", i, true); + AlleleManager.alleleRegistry.registerAllele( + alleleInteger, + EnumTreeChromosome.GIRTH, + EnumButterflyChromosome.METABOLISM, + EnumButterflyChromosome.FERTILITY); + integers.put(i, alleleInteger); + } + alleleMaps.put(Integer.class, integers); + + Map booleans = new HashMap<>(); + booleans.put(true, new AlleleBoolean(modId, "bool", true, false)); + booleans.put(false, new AlleleBoolean(modId, "bool", false, false)); + for (IAlleleBoolean alleleBoolean : booleans.values()) { + AlleleManager.alleleRegistry.registerAllele( + alleleBoolean, + EnumBeeChromosome.NOCTURNAL, + EnumBeeChromosome.TOLERANT_FLYER, + EnumBeeChromosome.CAVE_DWELLING, + EnumButterflyChromosome.NOCTURNAL, + EnumButterflyChromosome.TOLERANT_FLYER, + EnumButterflyChromosome.FIRE_RESIST); + } + alleleMaps.put(Boolean.class, booleans); + } + + @SuppressWarnings("unchecked") + public static void initialisation() { + GTAlleleHelper helper = new GTAlleleHelper(); + + try { + helper.alleleMaps = (Map, Map>) FieldUtils + .readField(FieldUtils.getField(AlleleHelper.class, "alleleMaps", true), AlleleHelper.instance, true); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + + AlleleHelper.instance = helper; + // AlleleHelper.instance.init(); + } + + @Override + public & IChromosomeType> void set(IAllele[] alleles, T chromosomeType, IAllele allele) { + + if (allele == null) { + GTMod.GT_FML_LOGGER.info("Allele is null!"); + return; + } + + if (!chromosomeType.getAlleleClass() + .isInstance(allele)) { + GTMod.GT_FML_LOGGER.info("chromosomeType is not an instance of allele!" + allele.getName()); + return; + } + + // TODO: uncomment this once all addon mods are using the allele registration with IChromosomeType + // Collection validTypes = AlleleManager.alleleRegistry.getChromosomeTypes(allele); + // if (validTypes.size() > 0 && !validTypes.contains(chromosomeType)) { + // throw new IllegalArgumentException("Allele can't be applied to this Chromosome type. Expected: " + validTypes + // + " Got: " + chromosomeType); + // } + + alleles[chromosomeType.ordinal()] = allele; + } + + @Override + public & IChromosomeType> void set(IAllele[] alleles, T chromosomeType, IAlleleValue value) { + set(alleles, chromosomeType, get(value)); + } + + @Override + public & IChromosomeType> void set(IAllele[] alleles, T chromosomeType, boolean value) { + set(alleles, chromosomeType, get(value)); + } + + @Override + public & IChromosomeType> void set(IAllele[] alleles, T chromosomeType, int value) { + set(alleles, chromosomeType, get(value)); + } + + private IAllele get(Object value) { + Class valueClass = value.getClass(); + Map map = alleleMaps.get(valueClass); + if (map == null) { + throw new IllegalArgumentException("There is no IAllele type for: " + valueClass + ' ' + value); + } + IAllele allele = map.get(value); + if (allele == null) { + allele = new IAllele() { + + @Override + public String getUID() { + return "NOT_FOUND"; + } + + @Override + public boolean isDominant() { + return false; + } + + @Override + public String getName() { + return "NOT_FOUND"; + } + + @Override + public String getUnlocalizedName() { + return "NOT_FOUND"; + } + }; + } + return allele; + } + + private & IAlleleValue, V> void createAlleles(Class enumClass, IChromosomeType... types) { + String category = enumClass.getSimpleName() + .toLowerCase(Locale.ENGLISH); + EnumMap map = new EnumMap<>(enumClass); + for (K enumValue : enumClass.getEnumConstants()) { + IAllele allele = createAllele(category, enumValue, types); + map.put(enumValue, allele); + } + alleleMaps.put(enumClass, map); + } + + private static , V> IAllele createAllele(String category, K enumValue, + IChromosomeType... types) { + V value = enumValue.getValue(); + boolean isDominant = enumValue.isDominant(); + String name = enumValue.toString() + .toLowerCase(Locale.ENGLISH); + + Class valueClass = value.getClass(); + if (Float.class.isAssignableFrom(valueClass)) { + return AlleleManager.alleleFactory.createFloat(modId, category, name, (Float) value, isDominant, types); + } else if (Integer.class.isAssignableFrom(valueClass)) { + return AlleleManager.alleleFactory.createInteger(modId, category, name, (Integer) value, isDominant, types); + } else if (IVect.class.isAssignableFrom(valueClass)) { + IVect area = (IVect) value; + return AlleleManager.alleleFactory + .createArea(modId, category, name, area.getX(), area.getY(), area.getZ(), isDominant, types); + } else if (Boolean.class.isAssignableFrom(valueClass)) { + return AlleleManager.alleleFactory.createBoolean(modId, category, (Boolean) value, isDominant, types); + } else if (EnumTolerance.class.isAssignableFrom(valueClass)) { + IAlleleTolerance alleleTolerance = new AlleleTolerance( + modId, + category, + name, + (EnumTolerance) value, + isDominant); + AlleleManager.alleleRegistry.registerAllele(alleleTolerance, types); + return alleleTolerance; + } else if (FlowerProvider.class.isAssignableFrom(valueClass)) { + return AlleleManager.alleleFactory + .createFlowers(modId, category, name, (FlowerProvider) value, isDominant, types); + } + throw new RuntimeException("could not create allele for category: " + category + " and value " + valueClass); + } +} diff --git a/src/main/java/gregtech/common/bees/GTBeeMutation.java b/src/main/java/gregtech/common/bees/GTBeeMutation.java new file mode 100644 index 0000000000..871b25f41f --- /dev/null +++ b/src/main/java/gregtech/common/bees/GTBeeMutation.java @@ -0,0 +1,85 @@ +package gregtech.common.bees; + +import java.lang.reflect.Field; +import java.util.List; + +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.World; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import forestry.api.apiculture.BeeManager; +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.core.IClimateProvider; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IGenome; +import forestry.api.genetics.IMutationCondition; +import forestry.apiculture.genetics.BeeMutation; +import forestry.core.genetics.mutations.Mutation; + +public class GTBeeMutation extends BeeMutation { + + private final float split; + + public GTBeeMutation(IAlleleBeeSpecies bee0, IAlleleBeeSpecies bee1, IAllele[] result, int chance, float split) { + super(bee0, bee1, result, chance); + this.split = split; + BeeManager.beeRoot.registerMutation(this); + } + + @Override + public float getBaseChance() { + return super.getBaseChance() / split; + } + + @Override + public float getChance(IBeeHousing housing, IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, + IBeeGenome genome0, IBeeGenome genome1) { + World world = housing != null ? housing.getWorld() : null; + ChunkCoordinates housingCoordinates = housing != null ? housing.getCoordinates() : null; + int x = housingCoordinates != null ? housingCoordinates.posX : 0; + int y = housingCoordinates != null ? housingCoordinates.posY : 0; + int z = housingCoordinates != null ? housingCoordinates.posZ : 0; + + float processedChance = getBasicChance(world, x, y, z, allele0, allele1, genome0, genome1, housing); + + if (processedChance <= 0f) { + return 0f; + } + + IBeeModifier beeHousingModifier = BeeManager.beeRoot.createBeeHousingModifier(housing); + IBeeModifier beeModeModifier = BeeManager.beeRoot.getBeekeepingMode(world) + .getBeeModifier(); + + processedChance *= beeHousingModifier.getMutationModifier(genome0, genome1, processedChance); + processedChance *= beeModeModifier.getMutationModifier(genome0, genome1, processedChance); + + return processedChance; + } + + @SuppressWarnings("unchecked") + private float getBasicChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0, + IGenome genome1, IClimateProvider climate) { + float mutationChance = this.getBaseChance(); + List mutationConditions = null; + Field f = FieldUtils.getDeclaredField(Mutation.class, "mutationConditions", true); + if (f == null) f = FieldUtils.getField(Mutation.class, "mutationConditions", true); + if (f == null) return mutationChance; + try { + mutationConditions = f.get(this) instanceof List ? (List) f.get(this) : null; + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + + if (mutationConditions != null) for (IMutationCondition mutationCondition : mutationConditions) { + mutationChance *= mutationCondition.getChance(world, x, y, z, allele0, allele1, genome0, genome1, climate); + if (mutationChance == 0) { + return 0; + } + } + return mutationChance; + } +} diff --git a/src/main/java/gregtech/common/bees/GT_AlleleBeeSpecies.java b/src/main/java/gregtech/common/bees/GT_AlleleBeeSpecies.java deleted file mode 100644 index b264737677..0000000000 --- a/src/main/java/gregtech/common/bees/GT_AlleleBeeSpecies.java +++ /dev/null @@ -1,53 +0,0 @@ -package gregtech.common.bees; - -import java.awt.Color; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import forestry.api.apiculture.EnumBeeChromosome; -import forestry.api.apiculture.IAlleleBeeSpeciesCustom; -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.IClassification; -import forestry.apiculture.genetics.alleles.AlleleBeeSpecies; - -public class GT_AlleleBeeSpecies extends AlleleBeeSpecies { - - public GT_AlleleBeeSpecies(String uid, boolean dominant, String unlocalizedName, String authority, - String unlocalizedDescription, IClassification branch, String binomial, Color primaryColor, - Color secondaryColor) { - super( - uid, - unlocalizedName, - authority, - unlocalizedDescription, - dominant, - branch, - binomial, - primaryColor.getRGB(), - secondaryColor.getRGB()); - AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.SPECIES); - } - - @Override - public IAlleleBeeSpeciesCustom addProduct(ItemStack product, Float chance) { - if (product == null || product.getItem() == null) { - product = new ItemStack(Items.boat); - } - if (chance <= 0.0f || chance > 1.0f) { - chance = 0.1f; - } - return super.addProduct(product, chance); - } - - @Override - public IAlleleBeeSpeciesCustom addSpecialty(ItemStack specialty, Float chance) { - if (specialty == null || specialty.getItem() == null) { - specialty = new ItemStack(Items.boat); - } - if (chance <= 0.0f || chance > 1.0f) { - chance = 0.1f; - } - return super.addSpecialty(specialty, chance); - } -} diff --git a/src/main/java/gregtech/common/bees/GT_AlleleHelper.java b/src/main/java/gregtech/common/bees/GT_AlleleHelper.java deleted file mode 100644 index 496aff29ca..0000000000 --- a/src/main/java/gregtech/common/bees/GT_AlleleHelper.java +++ /dev/null @@ -1,268 +0,0 @@ -package gregtech.common.bees; - -import java.util.EnumMap; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import forestry.api.apiculture.EnumBeeChromosome; -import forestry.api.arboriculture.EnumTreeChromosome; -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.EnumTolerance; -import forestry.api.genetics.IAllele; -import forestry.api.genetics.IAlleleBoolean; -import forestry.api.genetics.IAlleleInteger; -import forestry.api.genetics.IAlleleTolerance; -import forestry.api.genetics.IChromosomeType; -import forestry.api.lepidopterology.EnumButterflyChromosome; -import forestry.apiculture.flowers.FlowerProvider; -import forestry.core.config.Constants; -import forestry.core.genetics.alleles.AlleleBoolean; -import forestry.core.genetics.alleles.AlleleHelper; -import forestry.core.genetics.alleles.AlleleInteger; -import forestry.core.genetics.alleles.AlleleTolerance; -import forestry.core.genetics.alleles.EnumAllele; -import forestry.core.genetics.alleles.IAlleleValue; -import forestry.core.utils.vect.IVect; -import forestry.plugins.PluginManager; -import gregtech.GT_Mod; - -public class GT_AlleleHelper extends AlleleHelper { - - private static final String modId = Constants.ID; - - private Map, Map> alleleMaps = new HashMap<>(); - - @Override - public void init() { - if (PluginManager.Module.APICULTURE.isEnabled()) { - createAlleles(EnumAllele.Fertility.class, EnumBeeChromosome.FERTILITY); - createAlleles(EnumAllele.Flowering.class, EnumBeeChromosome.FLOWERING); - } - - if (PluginManager.Module.APICULTURE.isEnabled() || PluginManager.Module.ARBORICULTURE.isEnabled()) { - createAlleles(EnumAllele.Territory.class, EnumBeeChromosome.TERRITORY, EnumTreeChromosome.TERRITORY); - - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.territoryDefault", get(EnumAllele.Territory.AVERAGE)); - } - - if (PluginManager.Module.APICULTURE.isEnabled() || PluginManager.Module.LEPIDOPTEROLOGY.isEnabled()) { - createAlleles(EnumAllele.Speed.class, EnumBeeChromosome.SPEED, EnumButterflyChromosome.SPEED); - createAlleles(EnumAllele.Lifespan.class, EnumBeeChromosome.LIFESPAN, EnumButterflyChromosome.LIFESPAN); - createAlleles( - EnumAllele.Tolerance.class, - EnumBeeChromosome.TEMPERATURE_TOLERANCE, - EnumBeeChromosome.HUMIDITY_TOLERANCE, - EnumButterflyChromosome.TEMPERATURE_TOLERANCE, - EnumButterflyChromosome.HUMIDITY_TOLERANCE); - createAlleles( - EnumAllele.Flowers.class, - EnumBeeChromosome.FLOWER_PROVIDER, - EnumButterflyChromosome.FLOWER_PROVIDER); - - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.speedNorm", get(EnumAllele.Speed.NORMAL)); - } - - if (PluginManager.Module.ARBORICULTURE.isEnabled()) { - createAlleles(EnumAllele.Height.class, EnumTreeChromosome.HEIGHT); - createAlleles(EnumAllele.Saplings.class, EnumTreeChromosome.FERTILITY); - createAlleles(EnumAllele.Yield.class, EnumTreeChromosome.YIELD); - createAlleles(EnumAllele.Fireproof.class, EnumTreeChromosome.FIREPROOF); - createAlleles(EnumAllele.Maturation.class, EnumTreeChromosome.MATURATION); - createAlleles(EnumAllele.Sappiness.class, EnumTreeChromosome.SAPPINESS); - - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.heightMax10", get(EnumAllele.Height.AVERAGE)); - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.saplingsDefault", get(EnumAllele.Saplings.AVERAGE)); - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.saplingsDouble", get(EnumAllele.Saplings.HIGH)); - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.saplingsTriple", get(EnumAllele.Saplings.HIGHER)); - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.yieldDefault", get(EnumAllele.Yield.AVERAGE)); - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.maturitySlowest", get(EnumAllele.Maturation.SLOWEST)); - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.maturitySlower", get(EnumAllele.Maturation.SLOWER)); - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.maturitySlow", get(EnumAllele.Maturation.SLOW)); - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.maturityAverage", get(EnumAllele.Maturation.AVERAGE)); - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.maturityFast", get(EnumAllele.Maturation.FAST)); - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.maturityFaster", get(EnumAllele.Maturation.FASTER)); - AlleleManager.alleleRegistry - .registerDeprecatedAlleleReplacement("forestry.maturityFastest", get(EnumAllele.Maturation.FASTEST)); - } - - if (PluginManager.Module.LEPIDOPTEROLOGY.isEnabled()) { - createAlleles(EnumAllele.Size.class, EnumButterflyChromosome.SIZE); - } - - Map integers = new HashMap<>(); - for (int i = 1; i <= 10; i++) { - IAlleleInteger alleleInteger = new AlleleInteger(modId, "i", i + "d", i, true); - AlleleManager.alleleRegistry.registerAllele( - alleleInteger, - EnumTreeChromosome.GIRTH, - EnumButterflyChromosome.METABOLISM, - EnumButterflyChromosome.FERTILITY); - integers.put(i, alleleInteger); - } - alleleMaps.put(Integer.class, integers); - - Map booleans = new HashMap<>(); - booleans.put(true, new AlleleBoolean(modId, "bool", true, false)); - booleans.put(false, new AlleleBoolean(modId, "bool", false, false)); - for (IAlleleBoolean alleleBoolean : booleans.values()) { - AlleleManager.alleleRegistry.registerAllele( - alleleBoolean, - EnumBeeChromosome.NOCTURNAL, - EnumBeeChromosome.TOLERANT_FLYER, - EnumBeeChromosome.CAVE_DWELLING, - EnumButterflyChromosome.NOCTURNAL, - EnumButterflyChromosome.TOLERANT_FLYER, - EnumButterflyChromosome.FIRE_RESIST); - } - alleleMaps.put(Boolean.class, booleans); - } - - @SuppressWarnings("unchecked") - public static void initialisation() { - GT_AlleleHelper helper = new GT_AlleleHelper(); - - try { - helper.alleleMaps = (Map, Map>) FieldUtils - .readField(FieldUtils.getField(AlleleHelper.class, "alleleMaps", true), AlleleHelper.instance, true); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - - AlleleHelper.instance = helper; - // AlleleHelper.instance.init(); - } - - @Override - public & IChromosomeType> void set(IAllele[] alleles, T chromosomeType, IAllele allele) { - - if (allele == null) { - GT_Mod.GT_FML_LOGGER.info("Allele is null!"); - return; - } - - if (!chromosomeType.getAlleleClass() - .isInstance(allele)) { - GT_Mod.GT_FML_LOGGER.info("chromosomeType is not an instance of allele!" + allele.getName()); - return; - } - - // TODO: uncomment this once all addon mods are using the allele registration with IChromosomeType - // Collection validTypes = AlleleManager.alleleRegistry.getChromosomeTypes(allele); - // if (validTypes.size() > 0 && !validTypes.contains(chromosomeType)) { - // throw new IllegalArgumentException("Allele can't be applied to this Chromosome type. Expected: " + validTypes - // + " Got: " + chromosomeType); - // } - - alleles[chromosomeType.ordinal()] = allele; - } - - @Override - public & IChromosomeType> void set(IAllele[] alleles, T chromosomeType, IAlleleValue value) { - set(alleles, chromosomeType, get(value)); - } - - @Override - public & IChromosomeType> void set(IAllele[] alleles, T chromosomeType, boolean value) { - set(alleles, chromosomeType, get(value)); - } - - @Override - public & IChromosomeType> void set(IAllele[] alleles, T chromosomeType, int value) { - set(alleles, chromosomeType, get(value)); - } - - private IAllele get(Object value) { - Class valueClass = value.getClass(); - Map map = alleleMaps.get(valueClass); - if (map == null) { - throw new IllegalArgumentException("There is no IAllele type for: " + valueClass + ' ' + value); - } - IAllele allele = map.get(value); - if (allele == null) { - allele = new IAllele() { - - @Override - public String getUID() { - return "NOT_FOUND"; - } - - @Override - public boolean isDominant() { - return false; - } - - @Override - public String getName() { - return "NOT_FOUND"; - } - - @Override - public String getUnlocalizedName() { - return "NOT_FOUND"; - } - }; - } - return allele; - } - - private & IAlleleValue, V> void createAlleles(Class enumClass, IChromosomeType... types) { - String category = enumClass.getSimpleName() - .toLowerCase(Locale.ENGLISH); - EnumMap map = new EnumMap<>(enumClass); - for (K enumValue : enumClass.getEnumConstants()) { - IAllele allele = createAllele(category, enumValue, types); - map.put(enumValue, allele); - } - alleleMaps.put(enumClass, map); - } - - private static , V> IAllele createAllele(String category, K enumValue, - IChromosomeType... types) { - V value = enumValue.getValue(); - boolean isDominant = enumValue.isDominant(); - String name = enumValue.toString() - .toLowerCase(Locale.ENGLISH); - - Class valueClass = value.getClass(); - if (Float.class.isAssignableFrom(valueClass)) { - return AlleleManager.alleleFactory.createFloat(modId, category, name, (Float) value, isDominant, types); - } else if (Integer.class.isAssignableFrom(valueClass)) { - return AlleleManager.alleleFactory.createInteger(modId, category, name, (Integer) value, isDominant, types); - } else if (IVect.class.isAssignableFrom(valueClass)) { - IVect area = (IVect) value; - return AlleleManager.alleleFactory - .createArea(modId, category, name, area.getX(), area.getY(), area.getZ(), isDominant, types); - } else if (Boolean.class.isAssignableFrom(valueClass)) { - return AlleleManager.alleleFactory.createBoolean(modId, category, (Boolean) value, isDominant, types); - } else if (EnumTolerance.class.isAssignableFrom(valueClass)) { - IAlleleTolerance alleleTolerance = new AlleleTolerance( - modId, - category, - name, - (EnumTolerance) value, - isDominant); - AlleleManager.alleleRegistry.registerAllele(alleleTolerance, types); - return alleleTolerance; - } else if (FlowerProvider.class.isAssignableFrom(valueClass)) { - return AlleleManager.alleleFactory - .createFlowers(modId, category, name, (FlowerProvider) value, isDominant, types); - } - throw new RuntimeException("could not create allele for category: " + category + " and value " + valueClass); - } -} diff --git a/src/main/java/gregtech/common/bees/GT_Bee_Mutation.java b/src/main/java/gregtech/common/bees/GT_Bee_Mutation.java deleted file mode 100644 index e8b2d5b8c6..0000000000 --- a/src/main/java/gregtech/common/bees/GT_Bee_Mutation.java +++ /dev/null @@ -1,85 +0,0 @@ -package gregtech.common.bees; - -import java.lang.reflect.Field; -import java.util.List; - -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.world.World; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import forestry.api.apiculture.BeeManager; -import forestry.api.apiculture.IAlleleBeeSpecies; -import forestry.api.apiculture.IBeeGenome; -import forestry.api.apiculture.IBeeHousing; -import forestry.api.apiculture.IBeeModifier; -import forestry.api.core.IClimateProvider; -import forestry.api.genetics.IAllele; -import forestry.api.genetics.IGenome; -import forestry.api.genetics.IMutationCondition; -import forestry.apiculture.genetics.BeeMutation; -import forestry.core.genetics.mutations.Mutation; - -public class GT_Bee_Mutation extends BeeMutation { - - private final float split; - - public GT_Bee_Mutation(IAlleleBeeSpecies bee0, IAlleleBeeSpecies bee1, IAllele[] result, int chance, float split) { - super(bee0, bee1, result, chance); - this.split = split; - BeeManager.beeRoot.registerMutation(this); - } - - @Override - public float getBaseChance() { - return super.getBaseChance() / split; - } - - @Override - public float getChance(IBeeHousing housing, IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, - IBeeGenome genome0, IBeeGenome genome1) { - World world = housing != null ? housing.getWorld() : null; - ChunkCoordinates housingCoordinates = housing != null ? housing.getCoordinates() : null; - int x = housingCoordinates != null ? housingCoordinates.posX : 0; - int y = housingCoordinates != null ? housingCoordinates.posY : 0; - int z = housingCoordinates != null ? housingCoordinates.posZ : 0; - - float processedChance = getBasicChance(world, x, y, z, allele0, allele1, genome0, genome1, housing); - - if (processedChance <= 0f) { - return 0f; - } - - IBeeModifier beeHousingModifier = BeeManager.beeRoot.createBeeHousingModifier(housing); - IBeeModifier beeModeModifier = BeeManager.beeRoot.getBeekeepingMode(world) - .getBeeModifier(); - - processedChance *= beeHousingModifier.getMutationModifier(genome0, genome1, processedChance); - processedChance *= beeModeModifier.getMutationModifier(genome0, genome1, processedChance); - - return processedChance; - } - - @SuppressWarnings("unchecked") - private float getBasicChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0, - IGenome genome1, IClimateProvider climate) { - float mutationChance = this.getBaseChance(); - List mutationConditions = null; - Field f = FieldUtils.getDeclaredField(Mutation.class, "mutationConditions", true); - if (f == null) f = FieldUtils.getField(Mutation.class, "mutationConditions", true); - if (f == null) return mutationChance; - try { - mutationConditions = f.get(this) instanceof List ? (List) f.get(this) : null; - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - - if (mutationConditions != null) for (IMutationCondition mutationCondition : mutationConditions) { - mutationChance *= mutationCondition.getChance(world, x, y, z, allele0, allele1, genome0, genome1, climate); - if (mutationChance == 0) { - return 0; - } - } - return mutationChance; - } -} diff --git a/src/main/java/gregtech/common/blocks/BlockCasings1.java b/src/main/java/gregtech/common/blocks/BlockCasings1.java new file mode 100644 index 0000000000..5410847176 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCasings1.java @@ -0,0 +1,107 @@ +package gregtech.common.blocks; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.util.GTLanguageManager; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class BlockCasings1 extends BlockCasingsAbstract { + + /** + * Texture Index Information Textures.BlockIcons.casingTexturePages[0][0-63] - Gregtech + * Textures.BlockIcons.casingTexturePages[0][64-127] - GT++ Textures.BlockIcons.casingTexturePages[1][0-127] - + * Gregtech Textures.BlockIcons.casingTexturePages[2][0-127] - Free Textures.BlockIcons.casingTexturePages[3][0-127] + * - Free Textures.BlockIcons.casingTexturePages[4][0-127] - Free Textures.BlockIcons.casingTexturePages[5][0-127] - + * Free Textures.BlockIcons.casingTexturePages[6][0-127] - Free Textures.BlockIcons.casingTexturePages[7][0-127] - + * TecTech Textures.BlockIcons.casingTexturePages[8][0-127] - TecTech + */ + public BlockCasings1() { + super(ItemCasings1.class, "gt.blockcasings", MaterialCasings.INSTANCE, 16); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "ULV Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "LV Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "MV Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "HV Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "EV Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "IV Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "LuV Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "ZPM Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "UV Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "UHV Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Bronze Plated Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Heat Proof Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Dimensionally Transcendent Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Dimensional Injection Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Dimensional Bridge"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Superconducting Coil Block"); + ItemList.Casing_ULV.set(new ItemStack(this, 1, 0)); + ItemList.Casing_LV.set(new ItemStack(this, 1, 1)); + ItemList.Casing_MV.set(new ItemStack(this, 1, 2)); + ItemList.Casing_HV.set(new ItemStack(this, 1, 3)); + ItemList.Casing_EV.set(new ItemStack(this, 1, 4)); + ItemList.Casing_IV.set(new ItemStack(this, 1, 5)); + ItemList.Casing_LuV.set(new ItemStack(this, 1, 6)); + ItemList.Casing_ZPM.set(new ItemStack(this, 1, 7)); + ItemList.Casing_UV.set(new ItemStack(this, 1, 8)); + ItemList.Casing_MAX.set(new ItemStack(this, 1, 9)); + ItemList.Casing_BronzePlatedBricks.set(new ItemStack(this, 1, 10)); + ItemList.Casing_HeatProof.set(new ItemStack(this, 1, 11)); + ItemList.Casing_Dim_Trans.set(new ItemStack(this, 1, 12)); + ItemList.Casing_Dim_Injector.set(new ItemStack(this, 1, 13)); + ItemList.Casing_Dim_Bridge.set(new ItemStack(this, 1, 14)); + ItemList.Casing_Coil_Superconductor.set(new ItemStack(this, 1, 15)); + } + + @Override + public int getTextureIndex(int aMeta) { + return aMeta; + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + if ((aMeta >= 0) && (aMeta < 16)) { + switch (aMeta) { + case 10 -> { + return Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS.getIcon(); + } + case 11 -> { + return Textures.BlockIcons.MACHINE_HEATPROOFCASING.getIcon(); + } + case 12 -> { + return Textures.BlockIcons.MACHINE_DIM_TRANS_CASING.getIcon(); + } + case 13 -> { + return Textures.BlockIcons.MACHINE_DIM_INJECTOR.getIcon(); + } + case 14 -> { + return Textures.BlockIcons.MACHINE_DIM_BRIDGE.getIcon(); + } + case 15 -> { + return Textures.BlockIcons.MACHINE_COIL_SUPERCONDUCTOR.getIcon(); + } + } + if (ordinalSide == 0) { + return Textures.BlockIcons.MACHINECASINGS_BOTTOM[aMeta].getIcon(); + } + if (ordinalSide == 1) { + return Textures.BlockIcons.MACHINECASINGS_TOP[aMeta].getIcon(); + } + return Textures.BlockIcons.MACHINECASINGS_SIDE[aMeta].getIcon(); + } + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + } + + @Override + public int colorMultiplier(IBlockAccess aWorld, int aX, int aY, int aZ) { + return aWorld.getBlockMetadata(aX, aY, aZ) > 9 ? super.colorMultiplier(aWorld, aX, aY, aZ) + : gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[0] << 16 | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[1] << 8 + | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[2]; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockCasings10.java b/src/main/java/gregtech/common/blocks/BlockCasings10.java new file mode 100644 index 0000000000..11c3f81f01 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCasings10.java @@ -0,0 +1,76 @@ +package gregtech.common.blocks; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.util.GTLanguageManager; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class BlockCasings10 extends BlockCasingsAbstract { + + public BlockCasings10() { + super(ItemCasings10.class, "gt.blockcasings10", MaterialCasings.INSTANCE, 16); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "MagTech Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Laser Containment Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Quark Exclusion Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Pressure Containment Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Electric Compressor Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Compression Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Neutronium Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Active Neutronium Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Neutronium Stabilization Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Coolant Duct"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Heating Duct"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".11.name", "Extreme Density Space-Bending Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".12.name", "Background Radiation Absorbent Casing"); + + ItemList.Casing_Electromagnetic_Separator.set(new ItemStack(this, 1, 0)); + ItemList.Casing_Laser.set(new ItemStack(this, 1, 1)); + ItemList.BlockQuarkContainmentCasing.set(new ItemStack(this, 1, 2)); + ItemList.Casing_Autoclave.set(new ItemStack(this, 1, 3)); + ItemList.Compressor_Casing.set(new ItemStack(this, 1, 4)); + ItemList.Compressor_Pipe_Casing.set(new ItemStack(this, 1, 5)); + ItemList.Neutronium_Casing.set(new ItemStack(this, 1, 6)); + ItemList.Neutronium_Active_Casing.set(new ItemStack(this, 1, 7)); + ItemList.Neutronium_Stable_Casing.set(new ItemStack(this, 1, 8)); + ItemList.Coolant_Duct_Casing.set(new ItemStack(this, 1, 9)); + ItemList.Heating_Duct_Casing.set(new ItemStack(this, 1, 10)); + ItemList.Extreme_Density_Casing.set(new ItemStack(this, 1, 11)); + ItemList.Background_Radiation_Casing.set(new ItemStack(this, 1, 12)); + } + + @Override + public int getTextureIndex(int aMeta) { + return (16 << 7) | (aMeta + 48); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int ordinalSide, int aMeta) { + return switch (aMeta) { + case 0 -> Textures.BlockIcons.MACHINE_CASING_EMS.getIcon(); + case 1 -> Textures.BlockIcons.MACHINE_CASING_LASER.getIcon(); + case 2 -> Textures.BlockIcons.BLOCK_QUARK_CONTAINMENT_CASING.getIcon(); + case 3 -> Textures.BlockIcons.MACHINE_CASING_AUTOCLAVE.getIcon(); + case 4 -> Textures.BlockIcons.COMPRESSOR_CASING.getIcon(); + case 5 -> Textures.BlockIcons.COMPRESSOR_PIPE_CASING.getIcon(); + case 6 -> Textures.BlockIcons.NEUTRONIUM_CASING.getIcon(); + case 7 -> Textures.BlockIcons.NEUTRONIUM_ACTIVE_CASING.getIcon(); + case 8 -> Textures.BlockIcons.NEUTRONIUM_STABLE_CASING.getIcon(); + case 9 -> Textures.BlockIcons.MACHINE_CASING_PIPE_TUNGSTENSTEEL.getIcon(); + case 10 -> Textures.BlockIcons.MACHINE_CASING_PIPE_BRONZE.getIcon(); + case 11 -> Textures.BlockIcons.EXTREME_DENSITY_CASING.getIcon(); + case 12 -> Textures.BlockIcons.RADIATION_ABSORBENT_CASING.getIcon(); + default -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + }; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockCasings11.java b/src/main/java/gregtech/common/blocks/BlockCasings11.java new file mode 100644 index 0000000000..a654aae3d7 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCasings11.java @@ -0,0 +1,58 @@ +package gregtech.common.blocks; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.util.GTLanguageManager; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class BlockCasings11 extends BlockCasingsAbstract { + + public BlockCasings11() { + super(ItemCasings11.class, "gt.blockcasings11", MaterialCasings.INSTANCE, 16); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Tin Item Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Brass Item Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Electrum Item Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Platinum Item Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Osmium Item Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Quantium Item Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Fluxed Electrum Item Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Black Plutonium Item Pipe Casing"); + + ItemList.Casing_Item_Pipe_Tin.set(new ItemStack(this, 1, 0)); + ItemList.Casing_Item_Pipe_Brass.set(new ItemStack(this, 1, 1)); + ItemList.Casing_Item_Pipe_Electrum.set(new ItemStack(this, 1, 2)); + ItemList.Casing_Item_Pipe_Platinum.set(new ItemStack(this, 1, 3)); + ItemList.Casing_Item_Pipe_Osmium.set(new ItemStack(this, 1, 4)); + ItemList.Casing_Item_Pipe_Quantium.set(new ItemStack(this, 1, 5)); + ItemList.Casing_Item_Pipe_Fluxed_Electrum.set(new ItemStack(this, 1, 6)); + ItemList.Casing_Item_Pipe_Black_Plutonium.set(new ItemStack(this, 1, 7)); + } + + @Override + public int getTextureIndex(int aMeta) { + return (16 << 7) | (aMeta + 64); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int ordinalSide, int aMeta) { + return switch (aMeta) { + case 1 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_BRASS.getIcon(); + case 2 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_ELECTRUM.getIcon(); + case 3 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_PLATINUM.getIcon(); + case 4 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_OSMIUM.getIcon(); + case 5 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_QUANTIUM.getIcon(); + case 6 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_FLUXED_ELECTRUM.getIcon(); + case 7 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_BLACK_PLUTONIUM.getIcon(); + default -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_TIN.getIcon(); + }; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockCasings2.java b/src/main/java/gregtech/common/blocks/BlockCasings2.java new file mode 100644 index 0000000000..441bbd9b82 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCasings2.java @@ -0,0 +1,102 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class BlockCasings2 extends BlockCasingsAbstract { + + public BlockCasings2() { + super(ItemCasings2.class, "gt.blockcasings2", MaterialCasings.INSTANCE, 96); + // Special handler for Pyrolyse Oven Casing on hatches... + Textures.BlockIcons.casingTexturePages[0][22] = TextureFactory.of( + Block.getBlockFromItem( + ItemList.Casing_ULV.get(1) + .getItem()), + 0, + ForgeDirection.UNKNOWN, + Dyes.MACHINE_METAL.mRGBa); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Solid Steel Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Frost Proof Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Bronze Gear Box Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Steel Gear Box Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Titanium Gear Box Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Assembling Line Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Processor Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Data Drive Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Containment Field Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Assembler Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Pump Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Motor Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Bronze Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Steel Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Titanium Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Tungstensteel Pipe Casing"); + ItemList.Casing_SolidSteel.set(new ItemStack(this, 1, 0)); + ItemList.Casing_FrostProof.set(new ItemStack(this, 1, 1)); + ItemList.Casing_Gearbox_Bronze.set(new ItemStack(this, 1, 2)); + ItemList.Casing_Gearbox_Steel.set(new ItemStack(this, 1, 3)); + ItemList.Casing_Gearbox_Titanium.set(new ItemStack(this, 1, 4)); + ItemList.Casing_Gearbox_TungstenSteel.set(new ItemStack(this, 1, 5)); + ItemList.Casing_Processor.set(new ItemStack(this, 1, 6)); + ItemList.Casing_DataDrive.set(new ItemStack(this, 1, 7)); + ItemList.Casing_ContainmentField.set(new ItemStack(this, 1, 8)); + ItemList.Casing_Assembler.set(new ItemStack(this, 1, 9)); + ItemList.Casing_Pump.set(new ItemStack(this, 1, 10)); + ItemList.Casing_Motor.set(new ItemStack(this, 1, 11)); + ItemList.Casing_Pipe_Bronze.set(new ItemStack(this, 1, 12)); + ItemList.Casing_Pipe_Steel.set(new ItemStack(this, 1, 13)); + ItemList.Casing_Pipe_Titanium.set(new ItemStack(this, 1, 14)); + ItemList.Casing_Pipe_TungstenSteel.set(new ItemStack(this, 1, 15)); + } + + @Override + public int getTextureIndex(int aMeta) { + return aMeta == 6 ? ((1 << 7) + 96) : aMeta + 16; + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + return switch (aMeta) { + case 0 -> Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + case 1 -> Textures.BlockIcons.MACHINE_CASING_FROST_PROOF.getIcon(); + case 2 -> Textures.BlockIcons.MACHINE_CASING_GEARBOX_BRONZE.getIcon(); + case 3 -> Textures.BlockIcons.MACHINE_CASING_GEARBOX_STEEL.getIcon(); + case 4 -> Textures.BlockIcons.MACHINE_CASING_GEARBOX_TITANIUM.getIcon(); + case 5 -> Textures.BlockIcons.MACHINE_CASING_GEARBOX_TUNGSTENSTEEL.getIcon(); + case 6 -> Textures.BlockIcons.MACHINE_CASING_PROCESSOR.getIcon(); + case 7 -> Textures.BlockIcons.MACHINE_CASING_DATA_DRIVE.getIcon(); + case 8 -> Textures.BlockIcons.MACHINE_CASING_CONTAINMENT_FIELD.getIcon(); + case 9 -> Textures.BlockIcons.MACHINE_CASING_ASSEMBLER.getIcon(); + case 10 -> Textures.BlockIcons.MACHINE_CASING_PUMP.getIcon(); + case 11 -> Textures.BlockIcons.MACHINE_CASING_MOTOR.getIcon(); + case 12 -> Textures.BlockIcons.MACHINE_CASING_PIPE_BRONZE.getIcon(); + case 13 -> Textures.BlockIcons.MACHINE_CASING_PIPE_STEEL.getIcon(); + case 14 -> Textures.BlockIcons.MACHINE_CASING_PIPE_TITANIUM.getIcon(); + case 15 -> Textures.BlockIcons.MACHINE_CASING_PIPE_TUNGSTENSTEEL.getIcon(); + default -> Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + }; + } + + @Override + public float getExplosionResistance(Entity aTNT, World aWorld, int aX, int aY, int aZ, double eX, double eY, + double eZ) { + return aWorld.getBlockMetadata(aX, aY, aZ) == 8 ? Blocks.bedrock.getExplosionResistance(aTNT) + : super.getExplosionResistance(aTNT, aWorld, aX, aY, aZ, eX, eY, eZ); + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockCasings3.java b/src/main/java/gregtech/common/blocks/BlockCasings3.java new file mode 100644 index 0000000000..fdd48b62ed --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCasings3.java @@ -0,0 +1,82 @@ +package gregtech.common.blocks; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.util.GTLanguageManager; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class BlockCasings3 extends BlockCasingsAbstract { + + public BlockCasings3() { + super(ItemCasings3.class, "gt.blockcasings3", MaterialCasings.INSTANCE, 16); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Yellow Stripes Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Yellow Stripes Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Radioactive Hazard Sign Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Bio Hazard Sign Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Explosion Hazard Sign Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Fire Hazard Sign Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Acid Hazard Sign Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Magic Hazard Sign Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Frost Hazard Sign Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Noise Hazard Sign Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Grate Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Filter Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Radiation Proof Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Bronze Firebox Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Steel Firebox Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Tungstensteel Firebox Casing"); + ItemList.Casing_Stripes_A.set(new ItemStack(this, 1, 0)); + ItemList.Casing_Stripes_B.set(new ItemStack(this, 1, 1)); + ItemList.Casing_RadioactiveHazard.set(new ItemStack(this, 1, 2)); + ItemList.Casing_BioHazard.set(new ItemStack(this, 1, 3)); + ItemList.Casing_ExplosionHazard.set(new ItemStack(this, 1, 4)); + ItemList.Casing_FireHazard.set(new ItemStack(this, 1, 5)); + ItemList.Casing_AcidHazard.set(new ItemStack(this, 1, 6)); + ItemList.Casing_MagicHazard.set(new ItemStack(this, 1, 7)); + ItemList.Casing_FrostHazard.set(new ItemStack(this, 1, 8)); + ItemList.Casing_NoiseHazard.set(new ItemStack(this, 1, 9)); + ItemList.Casing_Grate.set(new ItemStack(this, 1, 10)); + ItemList.Casing_Vent.set(new ItemStack(this, 1, 11)); + ItemList.Casing_RadiationProof.set(new ItemStack(this, 1, 12)); + ItemList.Casing_Firebox_Bronze.set(new ItemStack(this, 1, 13)); + ItemList.Casing_Firebox_Steel.set(new ItemStack(this, 1, 14)); + ItemList.Casing_Firebox_TungstenSteel.set(new ItemStack(this, 1, 15)); + } + + @Override + public int getTextureIndex(int aMeta) { + return aMeta + 32; + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + return switch (aMeta) { + case 0 -> Textures.BlockIcons.MACHINE_CASING_STRIPES_A.getIcon(); + case 1 -> Textures.BlockIcons.MACHINE_CASING_STRIPES_B.getIcon(); + case 2 -> Textures.BlockIcons.MACHINE_CASING_RADIOACTIVEHAZARD.getIcon(); + case 3 -> Textures.BlockIcons.MACHINE_CASING_BIOHAZARD.getIcon(); + case 4 -> Textures.BlockIcons.MACHINE_CASING_EXPLOSIONHAZARD.getIcon(); + case 5 -> Textures.BlockIcons.MACHINE_CASING_FIREHAZARD.getIcon(); + case 6 -> Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD.getIcon(); + case 7 -> Textures.BlockIcons.MACHINE_CASING_MAGICHAZARD.getIcon(); + case 8 -> Textures.BlockIcons.MACHINE_CASING_FROSTHAZARD.getIcon(); + case 9 -> Textures.BlockIcons.MACHINE_CASING_NOISEHAZARD.getIcon(); + case 10 -> Textures.BlockIcons.MACHINE_CASING_GRATE.getIcon(); + case 11 -> Textures.BlockIcons.MACHINE_CASING_VENT.getIcon(); + case 12 -> Textures.BlockIcons.MACHINE_CASING_RADIATIONPROOF.getIcon(); + case 13 -> ordinalSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_BRONZE.getIcon() + : Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS.getIcon(); + case 14 -> ordinalSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_STEEL.getIcon() + : Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + case 15 -> ordinalSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_TUNGSTENSTEEL.getIcon() + : Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + default -> Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + }; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockCasings4.java b/src/main/java/gregtech/common/blocks/BlockCasings4.java new file mode 100644 index 0000000000..0cba916548 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCasings4.java @@ -0,0 +1,239 @@ +package gregtech.common.blocks; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTRenderingWorld; +import gregtech.common.tileentities.machines.multi.MTELargeTurbine; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class BlockCasings4 extends BlockCasingsAbstract { + + /** + * This mapping is used to look up which texture should be used to render the connected texture for fusion casings. + *

+ * This mapping is computed from that giant if ladder from #getIcon in commit + * da3421547afadc49938b5b6a7f9a9679afa1d570 The exact meaning of these numbers are like black magic. Read the + * original getIcon implementation to understand why it is 0, 1, etc, if that if ladder is even intelligible. + */ + private static final int[][] mapping = new int[][] { + { 7, 7, 7, 7, 0, 7, 0, 7, 1, 7, 1, 7, 8, 7, 8, 7, 0, 7, 0, 7, 0, 7, 0, 7, 9, 7, 9, 7, 3, 7, 3, 7, 1, 7, 1, 7, + 11, 7, 11, 7, 1, 7, 1, 7, 2, 7, 2, 7, 10, 7, 10, 7, 5, 7, 5, 7, 4, 7, 4, 7, 6, 7, 6, 7 }, + { 7, 7, 7, 7, 0, 0, 7, 7, 1, 1, 7, 7, 8, 8, 7, 7, 0, 0, 7, 7, 0, 0, 7, 7, 9, 9, 7, 7, 3, 3, 7, 7, 1, 1, 7, 7, + 11, 11, 7, 7, 1, 1, 7, 7, 2, 2, 7, 7, 10, 10, 7, 7, 5, 5, 7, 7, 4, 4, 7, 7, 6, 6, 7, 7 }, + { 7, 1, 1, 1, 0, 9, 10, 4, 7, 1, 1, 1, 0, 9, 10, 4, 0, 8, 11, 2, 0, 3, 5, 6, 0, 8, 11, 2, 0, 3, 5, 6, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 }, + { 7, 1, 1, 1, 0, 8, 11, 2, 7, 7, 7, 7, 7, 7, 7, 7, 0, 9, 10, 4, 0, 3, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, + 0, 8, 11, 2, 7, 7, 7, 7, 7, 7, 7, 7, 0, 9, 10, 4, 0, 3, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7 }, + { 7, 1, 1, 1, 7, 1, 1, 1, 0, 8, 11, 2, 0, 8, 11, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 9, 10, 4, + 0, 9, 10, 4, 0, 3, 5, 6, 0, 3, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 }, + { 7, 1, 1, 1, 7, 7, 7, 7, 0, 9, 10, 4, 7, 7, 7, 7, 7, 1, 1, 1, 7, 7, 7, 7, 0, 9, 10, 4, 7, 7, 7, 7, 0, 8, 11, 2, + 7, 7, 7, 7, 0, 3, 5, 6, 7, 7, 7, 7, 0, 8, 11, 2, 7, 7, 7, 7, 0, 3, 5, 6, 7, 7, 7, 7 }, }; + + public static boolean mConnectedMachineTextures = true; + + public BlockCasings4() { + super(ItemCasings4.class, "gt.blockcasings4", MaterialCasings.INSTANCE, 16); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".0.name", "Robust Tungstensteel Machine Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".1.name", "Clean Stainless Steel Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Stable Titanium Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Titanium Firebox Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Fusion Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Fusion Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Fusion Machine Casing MK II"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Turbine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Stainless Steel Turbine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Titanium Turbine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Tungstensteel Turbine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Engine Intake Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Mining Osmiridium Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Firebricks"); + + ItemList.Casing_RobustTungstenSteel.set(new ItemStack(this, 1, 0)); + ItemList.Casing_CleanStainlessSteel.set(new ItemStack(this, 1, 1)); + ItemList.Casing_StableTitanium.set(new ItemStack(this, 1, 2)); + ItemList.Casing_Firebox_Titanium.set(new ItemStack(this, 1, 3)); + ItemList.Casing_Fusion.set(new ItemStack(this, 1, 6)); + ItemList.Casing_Fusion_Coil.set(new ItemStack(this, 1, 7)); + ItemList.Casing_Fusion2.set(new ItemStack(this, 1, 8)); + ItemList.Casing_Turbine.set(new ItemStack(this, 1, 9)); + ItemList.Casing_Turbine1.set(new ItemStack(this, 1, 10)); + ItemList.Casing_Turbine2.set(new ItemStack(this, 1, 11)); + ItemList.Casing_Turbine3.set(new ItemStack(this, 1, 12)); + ItemList.Casing_EngineIntake.set(new ItemStack(this, 1, 13)); + ItemList.Casing_MiningOsmiridium.set(new ItemStack(this, 1, 14)); + ItemList.Casing_Firebricks.set(new ItemStack(this, 1, 15)); + + GTMod.gregtechproxy.mCTMBlockCache.put(this, (byte) 6, true); + GTMod.gregtechproxy.mCTMBlockCache.put(this, (byte) 8, true); + } + + @Override + public int getTextureIndex(int aMeta) { + return aMeta + 48; + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + return switch (aMeta) { + case 0 -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + case 1 -> Textures.BlockIcons.MACHINE_CASING_CLEAN_STAINLESSSTEEL.getIcon(); + case 2 -> Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getIcon(); + case 3 -> ordinalSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_TITANIUM.getIcon() + : Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getIcon(); + case 4 -> + // Do not overwrite! + Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW.getIcon(); + case 5 -> + // Do not overwrite! + Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS.getIcon(); + case 6 -> Textures.BlockIcons.MACHINE_CASING_FUSION.getIcon(); + case 7 -> Textures.BlockIcons.MACHINE_CASING_FUSION_COIL.getIcon(); + case 8 -> Textures.BlockIcons.MACHINE_CASING_FUSION_2.getIcon(); + case 9 -> Textures.BlockIcons.MACHINE_CASING_TURBINE.getIcon(); + case 10 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_STAINLESSSTEEL.getIcon(); + case 11 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TITANIUM.getIcon(); + case 12 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TUNGSTENSTEEL.getIcon(); + case 13 -> Textures.BlockIcons.MACHINE_CASING_ENGINE_INTAKE.getIcon(); + case 14 -> Textures.BlockIcons.MACHINE_CASING_MINING_OSMIRIDIUM.getIcon(); + case 15 -> Textures.BlockIcons.MACHINE_CASING_DENSEBRICKS.getIcon(); + default -> Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + }; + } + + @Deprecated + public IIcon getTurbineCasing(int meta, int iconIndex, boolean active, boolean hasTurbine) { + return switch (meta) { + case 10 -> active ? Textures.BlockIcons.TURBINE_ACTIVE1[iconIndex].getIcon() + : hasTurbine ? Textures.BlockIcons.TURBINE1[iconIndex].getIcon() + : Textures.BlockIcons.TURBINE_EMPTY1[iconIndex].getIcon(); + case 11 -> active ? Textures.BlockIcons.TURBINE_ACTIVE2[iconIndex].getIcon() + : hasTurbine ? Textures.BlockIcons.TURBINE2[iconIndex].getIcon() + : Textures.BlockIcons.TURBINE_EMPTY2[iconIndex].getIcon(); + case 12 -> active ? Textures.BlockIcons.TURBINE_ACTIVE3[iconIndex].getIcon() + : hasTurbine ? Textures.BlockIcons.TURBINE3[iconIndex].getIcon() + : Textures.BlockIcons.TURBINE_EMPTY3[iconIndex].getIcon(); + default -> active ? Textures.BlockIcons.TURBINE_ACTIVE[iconIndex].getIcon() + : hasTurbine ? Textures.BlockIcons.TURBINE[iconIndex].getIcon() + : Textures.BlockIcons.TURBINE_EMPTY[iconIndex].getIcon(); + }; + } + + private static int isTurbineControllerWithSide(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (!(tTileEntity instanceof IGregTechTileEntity tTile)) return 0; + if (tTile.getMetaTileEntity() instanceof MTELargeTurbine turbine && tTile.getFrontFacing() + .ordinal() == ordinalSide) { + if (turbine.isNewStyleRendering()) return 0; + if (tTile.isActive()) return 1; + return turbine.hasTurbine() ? 2 : 3; + } + return 0; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { + aWorld = GTRenderingWorld.getInstance(aWorld); + int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); + if (tMeta != 6 && tMeta != 8 && tMeta != 9 && tMeta != 10 && tMeta != 11 && tMeta != 12 + || !mConnectedMachineTextures) { + return getIcon(ordinalSide, tMeta); + } + // noinspection ConstantValue // tMeta < 13 should stay because mConnectedMachineTextures can be changed + if (tMeta > 8 && tMeta < 13) { + int tInvertLeftRightMod = ordinalSide % 2 * 2 - 1; + switch (ordinalSide / 2) { + case 0 -> { + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide( + aWorld, + xCoord + j, + yCoord, + zCoord + i, + ordinalSide)) != 0) { + return getTurbineCasing(tMeta, 4 - i * 3 - j, tState == 1, tState == 2); + } + } + } + } + case 1 -> { + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide( + aWorld, + xCoord + j, + yCoord + i, + zCoord, + ordinalSide)) != 0) { + return getTurbineCasing( + tMeta, + 4 + i * 3 - j * tInvertLeftRightMod, + tState == 1, + tState == 2); + } + } + } + } + case 2 -> { + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide( + aWorld, + xCoord, + yCoord + i, + zCoord + j, + ordinalSide)) != 0) { + return getTurbineCasing( + tMeta, + 4 + i * 3 + j * tInvertLeftRightMod, + tState == 1, + tState == 2); + } + } + } + } + } + return switch (tMeta) { + case 10 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_STAINLESSSTEEL.getIcon(); + case 11 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TITANIUM.getIcon(); + case 12 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TUNGSTENSTEEL.getIcon(); + default -> Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + }; + } + int tStartIndex = tMeta == 6 ? 1 : 13; + int tIndexIntoMapping = 0; + if (isSameBlock(aWorld, xCoord, yCoord - 1, zCoord, tMeta)) tIndexIntoMapping |= 1; + if (isSameBlock(aWorld, xCoord, yCoord + 1, zCoord, tMeta)) tIndexIntoMapping |= 1 << 1; + if (isSameBlock(aWorld, xCoord + 1, yCoord, zCoord, tMeta)) tIndexIntoMapping |= 1 << 2; + if (isSameBlock(aWorld, xCoord, yCoord, zCoord + 1, tMeta)) tIndexIntoMapping |= 1 << 3; + if (isSameBlock(aWorld, xCoord - 1, yCoord, zCoord, tMeta)) tIndexIntoMapping |= 1 << 4; + if (isSameBlock(aWorld, xCoord, yCoord, zCoord - 1, tMeta)) tIndexIntoMapping |= 1 << 5; + return Textures.BlockIcons.CONNECTED_HULLS[tStartIndex + mapping[ordinalSide][tIndexIntoMapping]].getIcon(); + } + + private boolean isSameBlock(IBlockAccess aWorld, int aX, int aY, int aZ, int aMeta) { + return aWorld.getBlock(aX, aY, aZ) == this && aWorld.getBlockMetadata(aX, aY, aZ) == aMeta; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockCasings5.java b/src/main/java/gregtech/common/blocks/BlockCasings5.java new file mode 100644 index 0000000000..15b3eedcba --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCasings5.java @@ -0,0 +1,161 @@ +package gregtech.common.blocks; + +import static gregtech.api.enums.HeatingCoilLevel.EV; +import static gregtech.api.enums.HeatingCoilLevel.HV; +import static gregtech.api.enums.HeatingCoilLevel.IV; +import static gregtech.api.enums.HeatingCoilLevel.LV; +import static gregtech.api.enums.HeatingCoilLevel.LuV; +import static gregtech.api.enums.HeatingCoilLevel.MAX; +import static gregtech.api.enums.HeatingCoilLevel.MV; +import static gregtech.api.enums.HeatingCoilLevel.None; +import static gregtech.api.enums.HeatingCoilLevel.UEV; +import static gregtech.api.enums.HeatingCoilLevel.UHV; +import static gregtech.api.enums.HeatingCoilLevel.UIV; +import static gregtech.api.enums.HeatingCoilLevel.UMV; +import static gregtech.api.enums.HeatingCoilLevel.UV; +import static gregtech.api.enums.HeatingCoilLevel.UXV; +import static gregtech.api.enums.HeatingCoilLevel.ZPM; + +import java.util.function.Consumer; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IHeatingCoil; +import gregtech.api.util.GTLanguageManager; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class BlockCasings5 extends BlockCasingsAbstract implements IHeatingCoil { + + public BlockCasings5() { + super(ItemCasings5.class, "gt.blockcasings5", MaterialCasings.INSTANCE, 16); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Cupronickel Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Kanthal Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Nichrome Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "TPV-Alloy Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "HSS-G Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Naquadah Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Naquadah Alloy Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Electrum Flux Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Awakened Draconium Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "HSS-S Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Trinium Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Infinity Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Hypogen Coil Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Eternal Coil Block"); + + ItemList.Casing_Coil_Cupronickel.set(new ItemStack(this, 1, 0)); + ItemList.Casing_Coil_Kanthal.set(new ItemStack(this, 1, 1)); + ItemList.Casing_Coil_Nichrome.set(new ItemStack(this, 1, 2)); + ItemList.Casing_Coil_TungstenSteel.set(new ItemStack(this, 1, 3)); + ItemList.Casing_Coil_HSSG.set(new ItemStack(this, 1, 4)); + ItemList.Casing_Coil_Naquadah.set(new ItemStack(this, 1, 5)); + ItemList.Casing_Coil_NaquadahAlloy.set(new ItemStack(this, 1, 6)); + ItemList.Casing_Coil_ElectrumFlux.set(new ItemStack(this, 1, 7)); + ItemList.Casing_Coil_AwakenedDraconium.set(new ItemStack(this, 1, 8)); + ItemList.Casing_Coil_HSSS.set(new ItemStack(this, 1, 9)); + ItemList.Casing_Coil_Trinium.set(new ItemStack(this, 1, 10)); + ItemList.Casing_Coil_Infinity.set(new ItemStack(this, 1, 11)); + ItemList.Casing_Coil_Hypogen.set(new ItemStack(this, 1, 12)); + ItemList.Casing_Coil_Eternal.set(new ItemStack(this, 1, 13)); + ItemList.Casing_Shielded_Accelerator.set(new ItemStack(this, 1, 14)); + } + + @Override + public int getTextureIndex(int aMeta) { + return (1 << 7) | aMeta; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int ordinalSide, int aMeta) { + return switch (aMeta) { + case 0 -> Textures.BlockIcons.MACHINE_COIL_CUPRONICKEL.getIcon(); + case 1 -> Textures.BlockIcons.MACHINE_COIL_KANTHAL.getIcon(); + case 2 -> Textures.BlockIcons.MACHINE_COIL_NICHROME.getIcon(); + case 3 -> Textures.BlockIcons.MACHINE_COIL_TUNGSTENSTEEL.getIcon(); + case 4 -> Textures.BlockIcons.MACHINE_COIL_HSSG.getIcon(); + case 5 -> Textures.BlockIcons.MACHINE_COIL_NAQUADAH.getIcon(); + case 6 -> Textures.BlockIcons.MACHINE_COIL_NAQUADAHALLOY.getIcon(); + case 7 -> Textures.BlockIcons.MACHINE_COIL_ELECTRUMFLUX.getIcon(); + case 8 -> Textures.BlockIcons.MACHINE_COIL_AWAKENEDDRACONIUM.getIcon(); + case 9 -> Textures.BlockIcons.MACHINE_COIL_HSSS.getIcon(); + case 10 -> Textures.BlockIcons.MACHINE_COIL_TRINIUM.getIcon(); + case 11 -> Textures.BlockIcons.MACHINE_COIL_INFINITY.getIcon(); + case 12 -> Textures.BlockIcons.MACHINE_COIL_HYPOGEN.getIcon(); + case 13 -> Textures.BlockIcons.MACHINE_COIL_ETERNAL.getIcon(); + case 14 -> Textures.BlockIcons.MACHINE_CASING_SHIELDED_ACCELERATOR.getIcon(); + default -> Textures.BlockIcons.MACHINE_COIL_CUPRONICKEL.getIcon(); + }; + } + + /*--------------- COIL CHECK IMPL. ------------*/ + + public static HeatingCoilLevel getCoilHeatFromDamage(int meta) { + return switch (meta) { + case 0 -> LV; + case 1 -> MV; + case 2 -> HV; + case 3 -> EV; + case 4 -> IV; + case 5 -> ZPM; + case 6 -> UV; + case 7 -> UEV; + case 8 -> UIV; + case 9 -> LuV; + case 10 -> UHV; + case 11 -> UMV; + case 12 -> UXV; + case 13 -> MAX; + default -> None; + }; + } + + public static int getMetaFromCoilHeat(HeatingCoilLevel level) { + return switch (level) { + case LV -> 0; + case MV -> 1; + case HV -> 2; + case EV -> 3; + case IV -> 4; + case ZPM -> 5; + case UV -> 6; + case UEV -> 7; + case UIV -> 8; + case LuV -> 9; + case UHV -> 10; + case UMV -> 11; + case UXV -> 12; + case MAX -> 13; + default -> 0; + }; + } + + @Override + public HeatingCoilLevel getCoilHeat(int meta) { + getOnCoilCheck().accept(this); + return getCoilHeatFromDamage(meta); + } + + /*--------------- CALLBACK ------------*/ + + private Consumer callback = coil -> {}; + + @Override + public void setOnCoilCheck(Consumer callback) { + this.callback = callback; + } + + @Override + public Consumer getOnCoilCheck() { + return this.callback; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockCasings6.java b/src/main/java/gregtech/common/blocks/BlockCasings6.java new file mode 100644 index 0000000000..e638f36547 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCasings6.java @@ -0,0 +1,94 @@ +package gregtech.common.blocks; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.util.GTLanguageManager; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class BlockCasings6 extends BlockCasingsAbstract { + + public BlockCasings6() { + super(ItemCasings6.class, "gt.blockcasings6", MaterialCasings.INSTANCE, 16); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Hermetic Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Hermetic Casing I"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Hermetic Casing II"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Hermetic Casing III"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Hermetic Casing IV"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Hermetic Casing V"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Hermetic Casing VI"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Hermetic Casing VII"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Hermetic Casing VIII"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Hermetic Casing IX"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Hermetic Casing X"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Hermetic Casing XI"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Hermetic Casing XII"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Hermetic Casing XIII"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Hermetic Casing XIV"); + + ItemList.Casing_Tank_0.set(new ItemStack(this, 1, 0)); + ItemList.Casing_Tank_1.set(new ItemStack(this, 1, 1)); + ItemList.Casing_Tank_2.set(new ItemStack(this, 1, 2)); + ItemList.Casing_Tank_3.set(new ItemStack(this, 1, 3)); + ItemList.Casing_Tank_4.set(new ItemStack(this, 1, 4)); + ItemList.Casing_Tank_5.set(new ItemStack(this, 1, 5)); + ItemList.Casing_Tank_6.set(new ItemStack(this, 1, 6)); + ItemList.Casing_Tank_7.set(new ItemStack(this, 1, 7)); + ItemList.Casing_Tank_8.set(new ItemStack(this, 1, 8)); + ItemList.Casing_Tank_9.set(new ItemStack(this, 1, 9)); + ItemList.Casing_Tank_10.set(new ItemStack(this, 1, 10)); + ItemList.Casing_Tank_11.set(new ItemStack(this, 1, 11)); + ItemList.Casing_Tank_12.set(new ItemStack(this, 1, 12)); + ItemList.Casing_Tank_13.set(new ItemStack(this, 1, 13)); + ItemList.Casing_Tank_14.set(new ItemStack(this, 1, 14)); + } + + @Override + public int getTextureIndex(int aMeta) { + return (8 << 7) | (aMeta + 112); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int ordinalSide, int aMeta) { + if (ordinalSide == 0) { + return Textures.BlockIcons.MACHINECASINGS_BOTTOM[aMeta].getIcon(); + } + if (ordinalSide == 1) { + return Textures.BlockIcons.MACHINECASINGS_TOP[aMeta].getIcon(); + } + return switch (aMeta) { + case 1 -> Textures.BlockIcons.MACHINE_CASING_TANK_1.getIcon(); + case 2 -> Textures.BlockIcons.MACHINE_CASING_TANK_2.getIcon(); + case 3 -> Textures.BlockIcons.MACHINE_CASING_TANK_3.getIcon(); + case 4 -> Textures.BlockIcons.MACHINE_CASING_TANK_4.getIcon(); + case 5 -> Textures.BlockIcons.MACHINE_CASING_TANK_5.getIcon(); + case 6 -> Textures.BlockIcons.MACHINE_CASING_TANK_6.getIcon(); + case 7 -> Textures.BlockIcons.MACHINE_CASING_TANK_7.getIcon(); + case 8 -> Textures.BlockIcons.MACHINE_CASING_TANK_8.getIcon(); + case 9 -> Textures.BlockIcons.MACHINE_CASING_TANK_9.getIcon(); + case 10 -> Textures.BlockIcons.MACHINE_CASING_TANK_10.getIcon(); + case 11 -> Textures.BlockIcons.MACHINE_CASING_TANK_11.getIcon(); + case 12 -> Textures.BlockIcons.MACHINE_CASING_TANK_12.getIcon(); + case 13 -> Textures.BlockIcons.MACHINE_CASING_TANK_13.getIcon(); + case 14 -> Textures.BlockIcons.MACHINE_CASING_TANK_14.getIcon(); + default -> Textures.BlockIcons.MACHINE_CASING_TANK_0.getIcon(); + }; + } + + @Override + public int colorMultiplier(IBlockAccess aWorld, int aX, int aY, int aZ) { + return gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[0] << 16 + | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[1] << 8 + | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[2]; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockCasings8.java b/src/main/java/gregtech/common/blocks/BlockCasings8.java new file mode 100644 index 0000000000..2e8781bca1 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCasings8.java @@ -0,0 +1,188 @@ +package gregtech.common.blocks; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTRenderingWorld; +import gregtech.common.tileentities.machines.multi.MTELargeTurbine; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class BlockCasings8 extends BlockCasingsAbstract { + + public static boolean mConnectedMachineTextures = true; + + // WATCH OUT FOR TEXTURE ID's + public BlockCasings8() { + super(ItemCasings8.class, "gt.blockcasings8", MaterialCasings.INSTANCE, 15); + /* + * DO NOT USE INDEX 15 ! USED HERE: https://github.com/GTNewHorizons/KubaTech/pull/101 + */ + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Chemically Inert Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "PTFE Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Mining Neutronium Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Mining Black Plutonium Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Extreme Engine Intake Casing"); + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + ".5.name", + "Europium Reinforced Radiation Proof Machine Casing"); + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + ".6.name", + "Advanced Rhodium Plated Palladium Machine Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".7.name", "Advanced Iridium Plated Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Magical Machine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "HSS-S Turbine Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Radiant Naquadah Alloy Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".11.name", "Basic Photolithographic Framework Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".12.name", "Reinforced Photolithographic Framework Casing"); + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + ".13.name", + "Radiation Proof Photolithographic Framework Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Infinity Cooled Casing"); + + ItemList.Casing_Chemically_Inert.set(new ItemStack(this, 1, 0)); + ItemList.Casing_Pipe_Polytetrafluoroethylene.set(new ItemStack(this, 1, 1)); + ItemList.Casing_MiningNeutronium.set(new ItemStack(this, 1, 2)); + ItemList.Casing_MiningBlackPlutonium.set(new ItemStack(this, 1, 3)); + ItemList.Casing_ExtremeEngineIntake.set(new ItemStack(this, 1, 4)); + ItemList.Casing_AdvancedRadiationProof.set(new ItemStack(this, 1, 5)); + ItemList.Casing_Advanced_Rhodium_Palladium.set(new ItemStack(this, 1, 6)); + ItemList.Casing_Advanced_Iridium.set(new ItemStack(this, 1, 7)); + ItemList.Casing_Magical.set(new ItemStack(this, 1, 8)); + ItemList.Casing_TurbineGasAdvanced.set(new ItemStack(this, 1, 9)); + ItemList.RadiantNaquadahAlloyCasing.set(new ItemStack(this, 1, 10)); + ItemList.BasicPhotolithographicFrameworkCasing.set(new ItemStack(this, 1, 11)); + ItemList.ReinforcedPhotolithographicFrameworkCasing.set(new ItemStack(this, 1, 12)); + ItemList.RadiationProofPhotolithographicFrameworkCasing.set(new ItemStack(this, 1, 13)); + ItemList.InfinityCooledCasing.set(new ItemStack(this, 1, 14)); + } + + @Override + public int getTextureIndex(int aMeta) { + return (1 << 7) | (aMeta + 48); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int ordinalSide, int aMeta) { + return switch (aMeta) { + case 0 -> Textures.BlockIcons.MACHINE_CASING_CHEMICALLY_INERT.getIcon(); + case 1 -> Textures.BlockIcons.MACHINE_CASING_PIPE_POLYTETRAFLUOROETHYLENE.getIcon(); + case 2 -> Textures.BlockIcons.MACHINE_CASING_MINING_NEUTRONIUM.getIcon(); + case 3 -> Textures.BlockIcons.MACHINE_CASING_MINING_BLACKPLUTONIUM.getIcon(); + case 4 -> Textures.BlockIcons.MACHINE_CASING_EXTREME_ENGINE_INTAKE.getIcon(); // changed color in a + // terrible way + case 5 -> Textures.BlockIcons.MACHINE_CASING_ADVANCEDRADIATIONPROOF.getIcon(); + case 6 -> Textures.BlockIcons.MACHINE_CASING_RHODIUM_PALLADIUM.getIcon(); + case 7 -> Textures.BlockIcons.MACHINE_CASING_IRIDIUM.getIcon(); + case 8 -> Textures.BlockIcons.MACHINE_CASING_MAGICAL.getIcon(); + case 9 -> Textures.BlockIcons.MACHINE_CASING_ADVANCEDGAS.getIcon(); + case 10 -> Textures.BlockIcons.MACHINE_CASING_RADIANT_NAQUADAH_ALLOY.getIcon(); + case 11 -> Textures.BlockIcons.MACHINE_CASING_PCB_TIER_1.getIcon(); + case 12 -> Textures.BlockIcons.MACHINE_CASING_PCB_TIER_2.getIcon(); + case 13 -> Textures.BlockIcons.MACHINE_CASING_PCB_TIER_3.getIcon(); + case 14 -> Textures.BlockIcons.INFINITY_COOLED_CASING.getIcon(); + default -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + }; + } + + public IIcon getTurbineCasing(int meta, int iconIndex, boolean active, boolean hasTurbine) { + // noinspection SwitchStatementWithTooFewBranches // "if" is harder to edit + return switch (meta) { + case 9 -> active ? Textures.BlockIcons.TURBINE_ADVGASACTIVE[iconIndex].getIcon() + : hasTurbine ? Textures.BlockIcons.TURBINEADVGAS[iconIndex].getIcon() + : Textures.BlockIcons.TURBINE_ADVGASEMPTY[iconIndex].getIcon(); + default -> active ? Textures.BlockIcons.TURBINE_ACTIVE[iconIndex].getIcon() + : hasTurbine ? Textures.BlockIcons.TURBINE[iconIndex].getIcon() + : Textures.BlockIcons.TURBINE_EMPTY[iconIndex].getIcon(); + }; + } + + private static int isTurbineControllerWithSide(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (!(tTileEntity instanceof IGregTechTileEntity tTile)) return 0; + if (tTile.getMetaTileEntity() instanceof MTELargeTurbine turbine && tTile.getFrontFacing() + .ordinal() == ordinalSide) { + if (turbine.isNewStyleRendering()) return 0; + if (tTile.isActive()) return 1; + return turbine.hasTurbine() ? 2 : 3; + } + return 0; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { + aWorld = GTRenderingWorld.getInstance(aWorld); + final int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); + + if (tMeta != 9 || !mConnectedMachineTextures) { + return getIcon(ordinalSide, tMeta); + } + + int tInvertLeftRightMod = ordinalSide % 2 * 2 - 1; + + switch (ordinalSide / 2) { + case 0 -> { + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord, zCoord + i, ordinalSide)) + != 0) { + return getTurbineCasing(tMeta, 4 - i * 3 - j, tState == 1, tState == 2); + } + } + } + } + case 1 -> { + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord + i, zCoord, ordinalSide)) + != 0) { + return getTurbineCasing( + tMeta, + 4 + i * 3 - j * tInvertLeftRightMod, + tState == 1, + tState == 2); + } + } + } + } + case 2 -> { + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + if (i == 0 && j == 0) continue; + int tState; + if ((tState = isTurbineControllerWithSide(aWorld, xCoord, yCoord + i, zCoord + j, ordinalSide)) + != 0) { + return getTurbineCasing( + tMeta, + 4 + i * 3 + j * tInvertLeftRightMod, + tState == 1, + tState == 2); + } + } + } + } + } + + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockCasings9.java b/src/main/java/gregtech/common/blocks/BlockCasings9.java new file mode 100644 index 0000000000..a58ac1f25c --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCasings9.java @@ -0,0 +1,96 @@ +package gregtech.common.blocks; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.util.GTLanguageManager; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class BlockCasings9 extends BlockCasingsAbstract { + + public BlockCasings9() { + super(ItemCasings9.class, "gt.blockcasings9", MaterialCasings.INSTANCE, 16); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "PBI Pipe Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Advanced Filter Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".1.tooltip", "Less than five 0.1μm particles per m^3"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Primitive Wooden Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".3.name", "Superplasticizer-Treated High Strength Concrete"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Sterile Water Plant Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".5.name", "Reinforced Sterile Water Plant Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Slick Sterile Flocculation Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".7.name", "Stabilized Naquadah Water Plant Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".8.name", "Inert Neutralization Water Plant Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Reactive Gas Containment Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Inert Filtration Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".11.name", "Heat-Resistant Trinium Plated Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".12.name", "Naquadria-Reinforced Water Plant Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".13.name", "High Energy Ultraviolet Emitter Casing"); + // placeholder name + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".14.name", "Particle Beam Guidance Pipe Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".15.name", "Femtometer-Calibrated Particle Beam Casing"); + + ItemList.Casing_Pipe_Polybenzimidazole.set(new ItemStack(this, 1, 0)); + ItemList.Casing_Vent_T2.set(new ItemStack(this, 1, 1)); + ItemList.WoodenCasing.set(new ItemStack(this, 1, 2)); + ItemList.BlockIndustrialStrengthConcrete.set(new ItemStack(this, 1, 3)); + ItemList.BlockIndustrialWaterPlantCasing.set(new ItemStack(this, 1, 4)); + ItemList.BlockSterileWaterPlantCasing.set(new ItemStack(this, 1, 5)); + ItemList.BlockFlocculationCasing.set(new ItemStack(this, 1, 6)); + ItemList.BlockNaquadahReinforcedWaterPlantCasing.set(new ItemStack(this, 1, 7)); + ItemList.BlockExtremeCorrosionResistantCasing.set(new ItemStack(this, 1, 8)); + ItemList.BlockHighPressureResistantCasing.set(new ItemStack(this, 1, 9)); + ItemList.BlockOzoneCasing.set(new ItemStack(this, 1, 10)); + ItemList.BlockPlasmaHeatingCasing.set(new ItemStack(this, 1, 11)); + ItemList.BlockNaquadriaReinforcedWaterPlantCasing.set(new ItemStack(this, 1, 12)); + ItemList.BlockUltraVioletLaserEmitter.set(new ItemStack(this, 1, 13)); + ItemList.BlockQuarkPipe.set(new ItemStack(this, 1, 14)); + ItemList.BlockQuarkReleaseChamber.set(new ItemStack(this, 1, 15)); + } + + @Override + public int getTextureIndex(int aMeta) { + return (16 << 7) | (aMeta + 16); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int ordinalSide, int aMeta) { + return switch (aMeta) { + case 0 -> Textures.BlockIcons.MACHINE_CASING_PIPE_POLYBENZIMIDAZOLE.getIcon(); + case 1 -> Textures.BlockIcons.MACHINE_CASING_VENT_T2.getIcon(); + case 2 -> ordinalSide >= 2 ? Textures.BlockIcons.TEXTURE_METAL_PANEL_E.getIcon() + : Textures.BlockIcons.TEXTURE_METAL_PANEL_E_A.getIcon(); + case 3 -> Textures.BlockIcons.INDUSTRIAL_STRENGTH_CONCRETE.getIcon(); + case 4 -> Textures.BlockIcons.MACHINE_CASING_INDUSTRIAL_WATER_PLANT.getIcon(); + case 5 -> Textures.BlockIcons.WATER_PLANT_CONCRETE_CASING.getIcon(); + case 6 -> Textures.BlockIcons.MACHINE_CASING_FLOCCULATION.getIcon(); + case 7 -> Textures.BlockIcons.MACHINE_CASING_NAQUADAH_REINFORCED_WATER_PLANT.getIcon(); + case 8 -> Textures.BlockIcons.MACHINE_CASING_EXTREME_CORROSION_RESISTANT.getIcon(); + case 9 -> Textures.BlockIcons.MACHINE_CASING_HIGH_PRESSURE_RESISTANT.getIcon(); + case 10 -> Textures.BlockIcons.MACHINE_CASING_OZONE.getIcon(); + case 11 -> Textures.BlockIcons.MACHINE_CASING_PLASMA_HEATER.getIcon(); + case 12 -> Textures.BlockIcons.NAQUADRIA_REINFORCED_WATER_PLANT_CASING.getIcon(); + case 13 -> Textures.BlockIcons.UV_BACKLIGHT_STERILIZER_CASING.getIcon(); + case 14 -> Textures.BlockIcons.BLOCK_QUARK_PIPE.getIcon(); + case 15 -> Textures.BlockIcons.BLOCK_QUARK_RELEASE_CHAMBER.getIcon(); + default -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + }; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockCasingsAbstract.java b/src/main/java/gregtech/common/blocks/BlockCasingsAbstract.java new file mode 100644 index 0000000000..5481f1f058 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCasingsAbstract.java @@ -0,0 +1,143 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Textures; +import gregtech.api.items.GTGenericBlock; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; + +/** + * The base class for casings. Casings are the blocks that are mainly used to build multiblocks. + */ +public abstract class BlockCasingsAbstract extends GTGenericBlock + implements gregtech.api.interfaces.IHasIndexedTexture { + + public BlockCasingsAbstract(Class aItemClass, String aName, Material aMaterial) { + super(aItemClass, aName, aMaterial); + setStepSound(soundTypeMetal); + setCreativeTab(GregTechAPI.TAB_GREGTECH); + GregTechAPI.registerMachineBlock(this, -1); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + "." + 32767 + ".name", "Any Sub Block of this"); + } + + public BlockCasingsAbstract(Class aItemClass, String aName, Material aMaterial, int aMaxMeta) { + this(aItemClass, aName, aMaterial); + for (int i = 0; i < aMaxMeta; i++) { + Textures.BlockIcons.setCasingTextureForId(getTextureIndex(i), TextureFactory.of(this, i)); + } + } + + @Override + public String getHarvestTool(int aMeta) { + return "wrench"; + } + + @Override + public int getHarvestLevel(int aMeta) { + return 2; + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + return Blocks.iron_block.getBlockHardness(aWorld, aX, aY, aZ); + } + + @Override + public float getExplosionResistance(Entity aTNT) { + return Blocks.iron_block.getExplosionResistance(aTNT); + } + + @Override + protected boolean canSilkHarvest() { + return false; + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public String getUnlocalizedName() { + return this.mUnlocalizedName; + } + + @Override + public String getLocalizedName() { + return StatCollector.translateToLocal(this.mUnlocalizedName + ".name"); + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { + return true; + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTechAPI.isMachineBlock(this, aMetaData)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public int damageDropped(int metadata) { + return metadata; + } + + @Override + public int getDamageValue(World aWorld, int aX, int aY, int aZ) { + return aWorld.getBlockMetadata(aX, aY, aZ); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister aIconRegister) {} + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item aItem, CreativeTabs aCreativeTab, List aList) { + for (int i = 0; i < 16; i++) { + ItemStack aStack = new ItemStack(aItem, 1, i); + if (!aStack.getDisplayName() + .contains(".name")) aList.add(aStack); + } + } + + /** + * Provide a fallback to subclasses in addons. + */ + @Override + public int getTextureIndex(int aMeta) { + return Textures.BlockIcons.ERROR_TEXTURE_INDEX; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockConcretes.java b/src/main/java/gregtech/common/blocks/BlockConcretes.java new file mode 100644 index 0000000000..1bf8dcf2fe --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockConcretes.java @@ -0,0 +1,83 @@ +package gregtech.common.blocks; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IBlockOnWalkOver; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; + +public class BlockConcretes extends BlockStonesAbstract implements IBlockOnWalkOver { + + public BlockConcretes() { + super(ItemConcretes.class, "gt.blockconcretes"); + setResistance(20.0F); + // this.slipperiness = 0.9F; + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Dark Concrete"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Dark Concrete Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Mossy Dark Concrete Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Dark Concrete Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Cracked Dark Concrete Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Mossy Dark Concrete Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Chiseled Dark Concrete"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Smooth Dark Concrete"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Light Concrete"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Light Concrete Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Mossy Light Concrete Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Light Concrete Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Cracked Light Concrete Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Mossy Light Concrete Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Chiseled Light Concrete"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Smooth Light Concrete"); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 0)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 1)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 2)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 3)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 4)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 5)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 6)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 7)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 8)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 9)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 10)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 11)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 12)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 13)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 14)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 15)); + } + + @Override + public int getHarvestLevel(int aMeta) { + return 1; + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + return this.blockHardness = Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ); + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + if ((aMeta >= 0) && (aMeta < 16)) { + return gregtech.api.enums.Textures.BlockIcons.CONCRETES[aMeta].getIcon(); + } + return gregtech.api.enums.Textures.BlockIcons.CONCRETES[0].getIcon(); + } + + @Override + public void onWalkOver(EntityLivingBase aEntity, World aWorld, int aX, int aY, int aZ) { + if ((aEntity.motionX != 0 || aEntity.motionZ != 0) && !aEntity.isInWater() + && !aEntity.isWet() + && !aEntity.isSneaking()) { + double tSpeed = (aWorld.getBlock(aX, aY - 1, aZ).slipperiness >= 0.8 ? 1.5 : 1.2); + aEntity.motionX *= tSpeed; + aEntity.motionZ *= tSpeed; + } + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockCyclotronCoils.java b/src/main/java/gregtech/common/blocks/BlockCyclotronCoils.java new file mode 100644 index 0000000000..437e48a37a --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockCyclotronCoils.java @@ -0,0 +1,131 @@ +package gregtech.common.blocks; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.util.GTLanguageManager; + +public class BlockCyclotronCoils extends BlockCasingsAbstract { + + public BlockCyclotronCoils() { + super(ItemCyclotronCasings.class, "gt.blockcasings.cyclotron_coils", MaterialCasings.INSTANCE, 16); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "MV Solenoid Superconductor Coil"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "HV Solenoid Superconductor Coil"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "EV Solenoid Superconductor Coil"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "IV Solenoid Superconductor Coil"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "LuV Solenoid Superconductor Coil"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "ZPM Solenoid Superconductor Coil"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "UV Solenoid Superconductor Coil"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "UHV Solenoid Superconductor Coil"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "UEV Solenoid Superconductor Coil"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "UIV Solenoid Superconductor Coil"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "UMV Solenoid Superconductor Coil"); + + ItemList.Superconducting_Magnet_Solenoid_MV.set(new ItemStack(this, 1, 0)); + ItemList.Superconducting_Magnet_Solenoid_HV.set(new ItemStack(this, 1, 1)); + ItemList.Superconducting_Magnet_Solenoid_EV.set(new ItemStack(this, 1, 2)); + ItemList.Superconducting_Magnet_Solenoid_IV.set(new ItemStack(this, 1, 3)); + ItemList.Superconducting_Magnet_Solenoid_LuV.set(new ItemStack(this, 1, 4)); + ItemList.Superconducting_Magnet_Solenoid_ZPM.set(new ItemStack(this, 1, 5)); + ItemList.Superconducting_Magnet_Solenoid_UV.set(new ItemStack(this, 1, 6)); + ItemList.Superconducting_Magnet_Solenoid_UHV.set(new ItemStack(this, 1, 7)); + ItemList.Superconducting_Magnet_Solenoid_UEV.set(new ItemStack(this, 1, 8)); + ItemList.Superconducting_Magnet_Solenoid_UIV.set(new ItemStack(this, 1, 9)); + ItemList.Superconducting_Magnet_Solenoid_UMV.set(new ItemStack(this, 1, 10)); + } + + @Override + public int getTextureIndex(int aMeta) { + return (2 << 7) | (aMeta); + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + if ((aMeta >= 0) && (aMeta < 16)) { + switch (aMeta) { + case 0 -> { + if (ordinalSide == 0 || ordinalSide == 1) { + return Textures.BlockIcons.MV_TOP_CYCLOTRON_SOLENOID.getIcon(); + } + return Textures.BlockIcons.MV_SIDE_CYCLOTRON_SOLENOID.getIcon(); + } + case 1 -> { + if (ordinalSide == 0 || ordinalSide == 1) { + return Textures.BlockIcons.HV_TOP_CYCLOTRON_SOLENOID.getIcon(); + } + return Textures.BlockIcons.HV_SIDE_CYCLOTRON_SOLENOID.getIcon(); + } + case 2 -> { + if (ordinalSide == 0 || ordinalSide == 1) { + return Textures.BlockIcons.EV_TOP_CYCLOTRON_SOLENOID.getIcon(); + } + return Textures.BlockIcons.EV_SIDE_CYCLOTRON_SOLENOID.getIcon(); + } + case 3 -> { + if (ordinalSide == 0 || ordinalSide == 1) { + return Textures.BlockIcons.IV_TOP_CYCLOTRON_SOLENOID.getIcon(); + } + return Textures.BlockIcons.IV_SIDE_CYCLOTRON_SOLENOID.getIcon(); + } + case 4 -> { + if (ordinalSide == 0 || ordinalSide == 1) { + return Textures.BlockIcons.LuV_TOP_CYCLOTRON_SOLENOID.getIcon(); + } + return Textures.BlockIcons.LuV_SIDE_CYCLOTRON_SOLENOID.getIcon(); + } + case 5 -> { + if (ordinalSide == 0 || ordinalSide == 1) { + return Textures.BlockIcons.ZPM_TOP_CYCLOTRON_SOLENOID.getIcon(); + } + return Textures.BlockIcons.ZPM_SIDE_CYCLOTRON_SOLENOID.getIcon(); + } + case 6 -> { + if (ordinalSide == 0 || ordinalSide == 1) { + return Textures.BlockIcons.UV_TOP_CYCLOTRON_SOLENOID.getIcon(); + } + return Textures.BlockIcons.UV_SIDE_CYCLOTRON_SOLENOID.getIcon(); + } + case 7 -> { + if (ordinalSide == 0 || ordinalSide == 1) { + return Textures.BlockIcons.UHV_TOP_CYCLOTRON_SOLENOID.getIcon(); + } + return Textures.BlockIcons.UHV_SIDE_CYCLOTRON_SOLENOID.getIcon(); + } + case 8 -> { + if (ordinalSide == 0 || ordinalSide == 1) { + return Textures.BlockIcons.UEV_TOP_CYCLOTRON_SOLENOID.getIcon(); + } + return Textures.BlockIcons.UEV_SIDE_CYCLOTRON_SOLENOID.getIcon(); + } + case 9 -> { + if (ordinalSide == 0 || ordinalSide == 1) { + return Textures.BlockIcons.UIV_TOP_CYCLOTRON_SOLENOID.getIcon(); + } + return Textures.BlockIcons.UIV_SIDE_CYCLOTRON_SOLENOID.getIcon(); + } + case 10 -> { + if (ordinalSide == 0 || ordinalSide == 1) { + return Textures.BlockIcons.UMV_TOP_CYCLOTRON_SOLENOID.getIcon(); + } + return Textures.BlockIcons.UMV_SIDE_CYCLOTRON_SOLENOID.getIcon(); + } + } + } + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + } + + public int getVoltageTier(int meta) { + return meta + 2; + } + + @Override + public int colorMultiplier(IBlockAccess aWorld, int aX, int aY, int aZ) { + return aWorld.getBlockMetadata(aX, aY, aZ) > 9 ? super.colorMultiplier(aWorld, aX, aY, aZ) + : gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[0] << 16 | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[1] << 8 + | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[2]; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockDrone.java b/src/main/java/gregtech/common/blocks/BlockDrone.java new file mode 100644 index 0000000000..2d1bedff9a --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockDrone.java @@ -0,0 +1,65 @@ +package gregtech.common.blocks; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.common.tileentities.render.TileEntityDrone; + +public class BlockDrone extends Block { + + public BlockDrone() { + super(Material.iron); + this.setResistance(20f); + this.setHardness(-1.0f); + this.setCreativeTab(GregTechAPI.TAB_GREGTECH); + this.setBlockName("gt.dronerender"); + this.setLightLevel(100.0f); + GameRegistry.registerBlock(this, getUnlocalizedName()); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT"); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean canRenderInPass(int a) { + return true; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public boolean hasTileEntity(int metadata) { + return true; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) { + return new TileEntityDrone(); + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { + return new ArrayList<>(); + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockFrameBox.java b/src/main/java/gregtech/common/blocks/BlockFrameBox.java new file mode 100644 index 0000000000..59ca98ef8e --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockFrameBox.java @@ -0,0 +1,446 @@ +package gregtech.common.blocks; + +import static gregtech.api.enums.GTValues.W; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockContainer; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.metatileentity.BaseTileEntity; +import gregtech.api.metatileentity.CoverableTileEntity; +import gregtech.api.metatileentity.implementations.MTEFrame; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.common.render.GTRendererBlock; + +public class BlockFrameBox extends BlockContainer { + + protected final String mUnlocalizedName; + + private static final String DOT_NAME = ".name"; + private static final String DOT_TOOLTIP = ".tooltip"; + + // We need to keep around a temporary TE to preserve this TE after breaking the block, so we can + // properly call getDrops() on it + private static final ThreadLocal mTemporaryTileEntity = new ThreadLocal<>(); + + public BlockFrameBox() { + super(new MaterialMachines()); + this.mUnlocalizedName = "gt.blockframes"; + setBlockName(this.mUnlocalizedName); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + "." + W + ".name", "Any Sub Block of this one"); + + GameRegistry.registerBlock(this, ItemFrames.class, getUnlocalizedName()); + + for (int meta = 1; meta < GregTechAPI.sGeneratedMaterials.length; meta++) { + Materials material = GregTechAPI.sGeneratedMaterials[meta]; + if (material != null && (material.mTypes & 0x02) != 0) { + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + "." + meta + DOT_NAME, + GTLanguageManager.i18nPlaceholder ? getLocalizedNameFormat(material) : getLocalizedName(material)); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + "." + meta + DOT_TOOLTIP, material.getToolTip()); + } + } + } + + public ItemStack getStackForm(int amount, int meta) { + return new ItemStack(this, amount, meta); + } + + public String getLocalizedNameFormat(Materials aMaterial) { + return switch (aMaterial.mName) { + case "InfusedAir", "InfusedDull", "InfusedEarth", "InfusedEntropy", "InfusedFire", "InfusedOrder", "InfusedVis", "InfusedWater" -> "%material Infused Stone"; + case "Vermiculite", "Bentonite", "Kaolinite", "Talc", "BasalticMineralSand", "GraniticMineralSand", "GlauconiteSand", "CassiteriteSand", "GarnetSand", "QuartzSand", "Pitchblende", "FullersEarth" -> "%material"; + default -> "%material" + " Frame Box"; + }; + } + + @Override + public String getUnlocalizedName() { + return mUnlocalizedName; + } + + public String getLocalizedName(Materials aMaterial) { + return aMaterial.getDefaultLocalizedNameForItem(getLocalizedNameFormat(aMaterial)); + } + + private boolean isCover(ItemStack item) { + return GTUtility.isStackInList(item, GregTechAPI.sCovers.keySet()); + } + + private void createFrame(World worldIn, int x, int y, int z, BaseMetaPipeEntity baseMte) { + // Obtain metadata to grab proper material identifier + int meta = worldIn.getBlockMetadata(x, y, z); + Materials material = getMaterial(meta); + MTEFrame frame = new MTEFrame("GT_Frame_" + material, material); + baseMte.setMetaTileEntity(frame); + frame.setBaseMetaTileEntity(baseMte); + } + + private BaseMetaPipeEntity spawnFrameEntity(World worldIn, int x, int y, int z) { + // Spawn a TE frame box at this location, then apply the cover + BaseMetaPipeEntity newTileEntity = new BaseMetaPipeEntity(); + createFrame(worldIn, x, y, z, newTileEntity); + worldIn.setTileEntity(x, y, z, newTileEntity); + return newTileEntity; + } + + // Get the material that this frame box is made of + public static Materials getMaterial(int meta) { + return GregTechAPI.sGeneratedMaterials[meta]; + } + + @Override + public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, + float subY, float subZ) { + // Get ForgeDirection from side identifier. + ForgeDirection direction = ForgeDirection.getOrientation(side); + // If this block already holds a TE, just forward the call + TileEntity te = worldIn.getTileEntity(x, y, z); + if (te instanceof BaseMetaPipeEntity baseTileEntity) { + // If this baseTileEntity has no MetaTileEntity associated with it, we need to create it + // This happens on world load for some reason + if (baseTileEntity.getMetaTileEntity() == null) { + createFrame(worldIn, x, y, z, baseTileEntity); + } + return baseTileEntity.onRightclick(player, direction, subX, subY, subZ); + } + + // If there was no TileEntity yet, we need to check if the player was holding a cover item and if so + // spawn a new frame box to apply the cover to + ItemStack item = player.getHeldItem(); + if (isCover(item)) { + BaseMetaPipeEntity newTileEntity = spawnFrameEntity(worldIn, x, y, z); + newTileEntity.onRightclick(player, direction, subX, subY, subZ); + return true; + } + + return false; + } + + @Override + public int getRenderType() { + if (GTRendererBlock.INSTANCE == null) { + return super.getRenderType(); + } + return GTRendererBlock.mRenderID; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public int getRenderBlockPass() { + return 1; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) { + for (int i = 0; i < GregTechAPI.sGeneratedMaterials.length; i++) { + Materials tMaterial = GregTechAPI.sGeneratedMaterials[i]; + // If material is not null and has a frame box item associated with it + if ((tMaterial != null) && ((tMaterial.mTypes & 0x02) != 0)) { + aList.add(new ItemStack(aItem, 1, i)); + } + } + } + + @Override + public String getHarvestTool(int aMeta) { + return "wrench"; + } + + @Override + public int getHarvestLevel(int aMeta) { + return aMeta % 4; + } + + @Override + public boolean canConnectRedstone(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { + ForgeDirection forgeSide = switch (ordinalSide) { + case (-2) -> ForgeDirection.DOWN; + case (-1) -> ForgeDirection.UP; + case (0) -> ForgeDirection.NORTH; + case (2) -> ForgeDirection.SOUTH; + case (3) -> ForgeDirection.WEST; + case (1) -> ForgeDirection.EAST; + default -> ForgeDirection.UNKNOWN; + }; + final TileEntity frameEntity = aWorld.getTileEntity(aX, aY, aZ); + return frameEntity instanceof CoverableTileEntity cte && cte.getCoverInfoAtSide(forgeSide) + .getCoverID() != 0; + } + + @Override + public int getDamageValue(World aWorld, int aX, int aY, int aZ) { + return aWorld.getBlockMetadata(aX, aY, aZ); + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetadata) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + gtTE.onBlockDestroyed(); + mTemporaryTileEntity.set(gtTE); + } + // Cause structure update + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetadata); + } + + @Override + public void onBlockAdded(World worldIn, int x, int y, int z) { + // Cause structure update + GregTechAPI.causeMachineUpdate(worldIn, x, y, z); + super.onBlockAdded(worldIn, x, y, z); + } + + @Override + public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE && gtTE.getMetaTileEntity() != null) { + gtTE.onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider); + return; + } + super.onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider); + } + + @Override + public float getPlayerRelativeBlockHardness(EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + return (tTileEntity instanceof BaseMetaTileEntity baseMTE) && baseMTE.privateAccess() + && !baseMTE.playerOwnsThis(aPlayer, true) ? -1.0F + : super.getPlayerRelativeBlockHardness(aPlayer, aWorld, aX, aY, aZ); + } + + @Override + public void onNeighborChange(IBlockAccess aWorld, int aX, int aY, int aZ, int aTileX, int aTileY, int aTileZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof BaseTileEntity baseTE) { + baseTE.onAdjacentBlockChange(aTileX, aTileY, aTileZ); + } + } + + @Override + public void onNeighborBlockChange(World aWorld, int aX, int aY, int aZ, Block aBlock) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof BaseMetaPipeEntity baseMetaPipe) { + baseMetaPipe.onNeighborBlockChange(aX, aY, aZ); + } + } + + @Override + public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, + List outputAABB, Entity collider) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE && gtTE.getMetaTileEntity() != null) { + gtTE.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); + return; + } + super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE && gtTE.getMetaTileEntity() != null) { + return gtTE.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + } + return super.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE && gtTE.getMetaTileEntity() != null) { + return gtTE.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + } + return super.getSelectedBoundingBoxFromPool(aWorld, aX, aY, aZ); + } + + @Override + public boolean isSideSolid(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection side) { + if (aWorld.getBlockMetadata(aX, aY, aZ) == 0) { + return true; + } + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof BaseMetaTileEntity) { + return true; + } + if (tTileEntity instanceof BaseMetaPipeEntity baseMetaPipe && (baseMetaPipe.mConnections & 0xFFFFFFC0) != 0) { + return true; + } + return (tTileEntity instanceof ICoverable coverable) && coverable.getCoverIDAtSide(side) != 0; + } + + @Override // THIS + public void setBlockBoundsBasedOnState(IBlockAccess blockAccess, int aX, int aY, int aZ) { + final TileEntity tTileEntity = blockAccess.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE && gtTE.getMetaTileEntity() != null) { + final AxisAlignedBB bbb = gtTE.getCollisionBoundingBoxFromPool(gtTE.getWorld(), 0, 0, 0); + minX = bbb.minX; // This essentially sets block bounds + minY = bbb.minY; + minZ = bbb.minZ; + maxX = bbb.maxX; + maxY = bbb.maxY; + maxZ = bbb.maxZ; + return; + } + super.setBlockBoundsBasedOnState(blockAccess, aX, aY, aZ); + } + + @Override + public void setBlockBoundsForItemRender() { + super.setBlockBounds(0, 0, 0, 1, 1, 1); + } + + @Override + public int getFlammability(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { + return 0; + } + + @Override + public int getFireSpreadSpeed(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { + return 0; + } + + @Override + public boolean isFireSource(World aWorld, int aX, int aY, int aZ, ForgeDirection side) { + return false; + } + + @Override + public boolean isFlammable(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { + return false; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean hasTileEntity(int aMeta) { + return true; + } + + @Override + public boolean onBlockEventReceived(World aWorld, int aX, int aY, int aZ, int aData1, int aData2) { + super.onBlockEventReceived(aWorld, aX, aY, aZ, aData1, aData2); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + return tTileEntity != null && tTileEntity.receiveClientEvent(aData1, aData2); + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { + // Find temporary TE if there was one + final IGregTechTileEntity tempTe = mTemporaryTileEntity.get(); + ArrayList drops = new ArrayList<>(); + drops.add(getStackForm(1, metadata)); + // If there is one, grab all attached covers and drop them + if (tempTe != null) { + for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { + ItemStack cover = tempTe.getCoverItemAtSide(direction); + if (cover != null) drops.add(cover); + } + } + // Make sure to clear the temporary TE + mTemporaryTileEntity.remove(); + return drops; + } + + @Override + public boolean canProvidePower() { + return true; + } + + @Override + public int isProvidingWeakPower(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { + if (ordinalSide < 0 || ordinalSide > 5) { + return 0; + } + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + return gtTE.getOutputRedstoneSignal( + ForgeDirection.getOrientation(ordinalSide) + .getOpposite()); + } + return 0; + } + + @Override + public int isProvidingStrongPower(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { + if (ordinalSide < 0 || ordinalSide > 5) { + return 0; + } + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + return gtTE.getStrongOutputRedstoneSignal( + ForgeDirection.getOrientation(ordinalSide) + .getOpposite()); + } + return 0; + } + + @Override + public IIcon getIcon(int side, int meta) { + Materials material = GregTechAPI.sGeneratedMaterials[meta]; + if (material == null) return null; + return material.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex].getIcon(); + } + + public ITexture[] getTexture(int meta) { + Materials material = getMaterial(meta); + if (material == null) return null; + return new ITexture[] { TextureFactory.of( + material.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex], + Dyes.getModulation(-1, material.mRGBa)) }; + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + return null; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockGlass1.java b/src/main/java/gregtech/common/blocks/BlockGlass1.java new file mode 100644 index 0000000000..a8a287248b --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockGlass1.java @@ -0,0 +1,107 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Facing; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.util.GTLanguageManager; + +/** + * The glass is split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + * + * This class hosts various special types of tiered glass with not many tiers. + */ +public class BlockGlass1 extends BlockCasingsAbstract { + + public BlockGlass1() { + super(ItemGlass1.class, "gt.blockglass1", Material.glass, 4); + this.opaque = false; + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Chemical Grade Glass"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".1.name", "Electron-Permeable Neutronium Coated Glass"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Omni-Purpose Infinity Fused Glass"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".3.name", "Non-Photonic Matter Exclusion Glass"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".4.name", "Hawking Radiation Realignment Focus"); + + ItemList.GlassPHResistant.set(new ItemStack(this, 1, 0)); + ItemList.GlassUVResistant.set(new ItemStack(this, 1, 1)); + ItemList.GlassOmniPurposeInfinityFused.set(new ItemStack(this, 1, 2)); + ItemList.GlassQuarkContainment.set(new ItemStack(this, 1, 3)); + ItemList.GlassQuarkContainment.set(new ItemStack(this, 1, 3)); + ItemList.Hawking_Glass.set(new ItemStack(this, 1, 4)); + } + + @Override + public int getTextureIndex(int aMeta) { + // Page 16, 0-16 + return (16 << 7) | (aMeta); + } + + @Override + public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int ordinalSide, int aMeta) { + return switch (aMeta) { + case 0 -> Textures.BlockIcons.GLASS_PH_RESISTANT.getIcon(); + case 1 -> Textures.BlockIcons.NEUTRONIUM_COATED_UV_RESISTANT_GLASS.getIcon(); + case 2 -> Textures.BlockIcons.OMNI_PURPOSE_INFINITY_FUSED_GLASS.getIcon(); + case 3 -> Textures.BlockIcons.GLASS_QUARK_CONTAINMENT.getIcon(); + case 4 -> Textures.BlockIcons.HAWKING_GLASS.getIcon(); + default -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + }; + } + + /** + * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given + * coordinates. Args: blockAccess, x, y, z, side + */ + @SideOnly(Side.CLIENT) + @Override + public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) { + Block block = worldIn.getBlock(x, y, z); + + if (worldIn.getBlockMetadata(x, y, z) != worldIn.getBlockMetadata( + x - Facing.offsetsXForSide[side], + y - Facing.offsetsYForSide[side], + z - Facing.offsetsZForSide[side])) { + return true; + } + + if (block == this) { + return false; + } + + return super.shouldSideBeRendered(worldIn, x, y, z, side); + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockGranites.java b/src/main/java/gregtech/common/blocks/BlockGranites.java new file mode 100644 index 0000000000..43a3f7a7e2 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockGranites.java @@ -0,0 +1,77 @@ +package gregtech.common.blocks; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; + +public class BlockGranites extends BlockStonesAbstract { + + public BlockGranites() { + super(ItemGranites.class, "gt.blockgranites"); + setResistance(60.0F); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Black Granite"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Black Granite Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Mossy Black Granite Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Black Granite Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Cracked Black Granite Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Mossy Black Granite Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Chiseled Black Granite"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Smooth Black Granite"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Red Granite"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Red Granite Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Mossy Red Granite Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Red Granite Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Cracked Red Granite Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Mossy Red Granite Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Chiseled Red Granite"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Smooth Red Granite"); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 0)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 1)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 2)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 3)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 4)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 5)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 6)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 7)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 8)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 9)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 10)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 11)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 12)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 13)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 14)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 15)); + } + + @Override + public int getHarvestLevel(int aMeta) { + return 3; + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + return this.blockHardness = Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ) * 3.0F; + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + if ((aMeta >= 0) && (aMeta < 16)) { + return gregtech.api.enums.Textures.BlockIcons.GRANITES[aMeta].getIcon(); + } + return gregtech.api.enums.Textures.BlockIcons.GRANITES[0].getIcon(); + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return !(entity instanceof EntityWither); + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockLaser.java b/src/main/java/gregtech/common/blocks/BlockLaser.java new file mode 100644 index 0000000000..8a67ed6bc9 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockLaser.java @@ -0,0 +1,104 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.tileentities.render.TileEntityLaser; + +public class BlockLaser extends Block implements ITileEntityProvider { + + public static IIcon[] textures; + + public BlockLaser() { + super(Material.iron); + setBlockName("LaserPlate"); + this.setCreativeTab(GregTechAPI.TAB_GREGTECH); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".name", "Laser Resistant Plate"); + GregTechAPI.registerMachineBlock(this, -1); + GameRegistry.registerBlock(this, ItemBlockLaser.class, getUnlocalizedName()); + ItemList.Laser_Plate.set(new ItemStack(this, 1)); + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTechAPI.isMachineBlock(this, aMetaData)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public String getHarvestTool(int aMeta) { + return "wrench"; + } + + @Override + public int getHarvestLevel(int aMeta) { + return 2; + } + + @Override + public String getUnlocalizedName() { + return "gt.laserplate"; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + blockIcon = Textures.BlockIcons.LASER_PLATE.getIcon(); + } + + @Override + public IIcon getIcon(int side, int meta) { + return blockIcon; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public float getBlockHardness(World world, int x, int y, int z) { + return 1.0f; + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean hasTileEntity(int metadata) { + return true; + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityLaser(); + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockMachines.java b/src/main/java/gregtech/common/blocks/BlockMachines.java new file mode 100644 index 0000000000..1db6f51730 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockMachines.java @@ -0,0 +1,703 @@ +package gregtech.common.blocks; + +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.cricketcraft.chisel.api.IFacade; + +import cpw.mods.fml.common.Optional; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IDebugableBlock; +import gregtech.api.interfaces.tileentity.IColoredTileEntity; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IDebugableTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.GTGenericBlock; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.metatileentity.BaseTileEntity; +import gregtech.api.metatileentity.CoverableTileEntity; +import gregtech.api.util.GTBaseCrop; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; +import gregtech.common.covers.CoverInfo; +import gregtech.common.render.GTRendererBlock; +import gregtech.common.tileentities.storage.MTEQuantumChest; +import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.MTERedstoneBase; + +@Optional.Interface(iface = "com.cricketcraft.chisel.api.IFacade", modid = "ChiselAPI") +public class BlockMachines extends GTGenericBlock implements IDebugableBlock, ITileEntityProvider, IFacade { + + private static final ThreadLocal mTemporaryTileEntity = new ThreadLocal<>(); + private boolean renderAsNormalBlock; + + public BlockMachines() { + super(ItemMachines.class, "gt.blockmachines", new MaterialMachines()); + GregTechAPI.registerMachineBlock(this, -1); + setHardness(1.0F); + setResistance(10.0F); + setStepSound(soundTypeMetal); + setCreativeTab(GregTechAPI.TAB_GREGTECH); + this.isBlockContainer = true; + this.renderAsNormalBlock = true; + this.useNeighborBrightness = true; + } + + @Override + public String getHarvestTool(int aMeta) { + if (aMeta >= 8 && aMeta <= 11) { + return "cutter"; + } + return "wrench"; + } + + @Override + public int getHarvestLevel(int aMeta) { + return aMeta % 4; + } + + @Override + protected boolean canSilkHarvest() { + return false; + } + + @Override + public void onNeighborChange(IBlockAccess aWorld, int aX, int aY, int aZ, int aTileX, int aTileY, int aTileZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if ((tTileEntity instanceof BaseTileEntity)) { + ((BaseTileEntity) tTileEntity).onAdjacentBlockChange(aTileX, aTileY, aTileZ); + } + } + + @Override + public void onNeighborBlockChange(World aWorld, int aX, int aY, int aZ, Block aBlock) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if ((tTileEntity instanceof BaseMetaPipeEntity)) { + ((BaseMetaPipeEntity) tTileEntity).onNeighborBlockChange(aX, aY, aZ); + } + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + super.onBlockAdded(aWorld, aX, aY, aZ); + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public String getUnlocalizedName() { + return "gt.blockmachines"; + } + + @Override + public String getLocalizedName() { + return StatCollector.translateToLocal(getUnlocalizedName() + ".name"); + } + + @Override + public int getFlammability(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { + return 0; + } + + @Override + public int getFireSpreadSpeed(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { + return GregTechAPI.sMachineFlammable && (aWorld.getBlockMetadata(aX, aY, aZ) == 0) ? 100 : 0; + } + + @Override + public int getRenderType() { + if (GTRendererBlock.INSTANCE == null) { + return super.getRenderType(); + } + return GTRendererBlock.INSTANCE.mRenderID; + } + + @Override + public boolean isFireSource(World aWorld, int aX, int aY, int aZ, ForgeDirection side) { + return GregTechAPI.sMachineFlammable && (aWorld.getBlockMetadata(aX, aY, aZ) == 0); + } + + @Override + public boolean isFlammable(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { + return GregTechAPI.sMachineFlammable && (aWorld.getBlockMetadata(aX, aY, aZ) == 0); + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean canConnectRedstone(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { + ForgeDirection forgeSide = switch (ordinalSide) { + case (-2) -> ForgeDirection.DOWN; + case (-1) -> ForgeDirection.UP; + case (0) -> ForgeDirection.NORTH; + case (2) -> ForgeDirection.SOUTH; + case (3) -> ForgeDirection.WEST; + case (1) -> ForgeDirection.EAST; + default -> ForgeDirection.UNKNOWN; + }; + final TileEntity machineEntity = aWorld.getTileEntity(aX, aY, aZ); + return machineEntity instanceof BaseMetaTileEntity bmte && (bmte.getCoverInfoAtSide(forgeSide) + .getCoverID() != 0 || bmte.getMetaTileEntity() instanceof MTERedstoneBase); + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean hasTileEntity(int aMeta) { + return true; + } + + @Override + public boolean hasComparatorInputOverride() { + return true; + } + + @Override + public boolean renderAsNormalBlock() { + return renderAsNormalBlock; + } + + public BlockMachines setRenderAsNormalBlock(boolean aBool) { + renderAsNormalBlock = aBool; + return this; + } + + @Override + public boolean canProvidePower() { + return true; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public TileEntity createNewTileEntity(World aWorld, int aMeta) { + return createTileEntity(aWorld, aMeta); + } + + @SideOnly(Side.CLIENT) + @Override + public IIcon getIcon(IBlockAccess aIBlockAccess, int aX, int aY, int aZ, int ordinalSide) { + return Textures.BlockIcons.MACHINE_LV_SIDE.getIcon(); + } + + @SideOnly(Side.CLIENT) + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + return Textures.BlockIcons.MACHINE_LV_SIDE.getIcon(); + } + + @Override + public boolean onBlockEventReceived(World aWorld, int aX, int aY, int aZ, int aData1, int aData2) { + super.onBlockEventReceived(aWorld, aX, aY, aZ, aData1, aData2); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + return tTileEntity != null && tTileEntity.receiveClientEvent(aData1, aData2); + } + + @Override + public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, + List outputAABB, Entity collider) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity + && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { + ((IGregTechTileEntity) tTileEntity) + .addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); + return; + } + super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity + && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { + return ((IGregTechTileEntity) tTileEntity).getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + } + return super.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + } + + @Override + @SideOnly(Side.CLIENT) + public AxisAlignedBB getSelectedBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity + && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { + return ((IGregTechTileEntity) tTileEntity).getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); + } + return super.getSelectedBoundingBoxFromPool(aWorld, aX, aY, aZ); + } + + @Override // THIS + public void setBlockBoundsBasedOnState(IBlockAccess blockAccess, int aX, int aY, int aZ) { + final TileEntity tTileEntity = blockAccess.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity + && (((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null)) { + final AxisAlignedBB bbb = ((IGregTechTileEntity) tTileEntity) + .getCollisionBoundingBoxFromPool(((IGregTechTileEntity) tTileEntity).getWorld(), 0, 0, 0); + minX = bbb.minX; // This essentially sets block bounds + minY = bbb.minY; + minZ = bbb.minZ; + maxX = bbb.maxX; + maxY = bbb.maxY; + maxZ = bbb.maxZ; + return; + } + super.setBlockBoundsBasedOnState(blockAccess, aX, aY, aZ); + } + + @Override + public void setBlockBoundsForItemRender() { + super.setBlockBounds(0, 0, 0, 1, 1, 1); + } + + @Override + public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity + && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { + ((IGregTechTileEntity) tTileEntity).onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider); + return; + } + super.onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider); + } + + @SideOnly(Side.CLIENT) + @Override + public void registerBlockIcons(IIconRegister aIconRegister) { + if (!GregTechAPI.sPostloadFinished) return; + GTLog.out.println("GTMod: Setting up Icon Register for Blocks"); + GregTechAPI.setBlockIconRegister(aIconRegister); + + GTLog.out.println("GTMod: Registering MetaTileEntity specific Textures"); + try { + for (int i = 1; i < GregTechAPI.METATILEENTITIES.length; i++) { + if (GregTechAPI.METATILEENTITIES[i] != null) { + GregTechAPI.METATILEENTITIES[i].registerIcons(aIconRegister); + } + } + } catch (Exception e) { + e.printStackTrace(GTLog.err); + } + GTLog.out.println("GTMod: Registering Crop specific Textures"); + try { + for (GTBaseCrop tCrop : GTBaseCrop.sCropList) { + tCrop.registerSprites(aIconRegister); + } + } catch (Exception e) { + e.printStackTrace(GTLog.err); + } + GTLog.out.println("GTMod: Starting Block Icon Load Phase"); + GT_FML_LOGGER.info("GTMod: Starting Block Icon Load Phase"); + try { + for (Runnable tRunnable : GregTechAPI.sGTBlockIconload) { + tRunnable.run(); + } + } catch (Exception e) { + e.printStackTrace(GTLog.err); + } + GTLog.out.println("GTMod: Finished Block Icon Load Phase"); + GT_FML_LOGGER.info("GTMod: Finished Block Icon Load Phase"); + } + + @Override + public float getPlayerRelativeBlockHardness(EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + return tTileEntity instanceof BaseMetaTileEntity && ((BaseMetaTileEntity) tTileEntity).privateAccess() + && !((BaseMetaTileEntity) tTileEntity).playerOwnsThis(aPlayer, true) ? -1.0F + : super.getPlayerRelativeBlockHardness(aPlayer, aWorld, aX, aY, aZ); + } + + @Override + public boolean onBlockActivated(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer, int ordinalSide, + float aOffsetX, float aOffsetY, float aOffsetZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity == null) { + return false; + } + if (aPlayer.isSneaking()) { + final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + if (tCurrentItem != null && !GTUtility.isStackInList(tCurrentItem, GregTechAPI.sScrewdriverList) + && !GTUtility.isStackInList(tCurrentItem, GregTechAPI.sWrenchList) + && !GTUtility.isStackInList(tCurrentItem, GregTechAPI.sWireCutterList) + && !GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSolderingToolList) + && !GTUtility.isStackInList(tCurrentItem, GregTechAPI.sJackhammerList)) return false; + } + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + if (gtTE.getTimer() < 1L) { + return false; + } + if ((!aWorld.isRemote) && !gtTE.isUseableByPlayer(aPlayer)) { + return true; + } + return ((IGregTechTileEntity) tTileEntity) + .onRightclick(aPlayer, ForgeDirection.getOrientation(ordinalSide), aOffsetX, aOffsetY, aOffsetZ); + } + return false; + } + + @Override + public void onBlockClicked(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + gtTE.onLeftclick(aPlayer); + } + } + + @Override + public int getDamageValue(World aWorld, int aX, int aY, int aZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + return gtTE.getMetaTileID(); + } + return 0; + } + + @Override + public void onBlockExploded(World aWorld, int aX, int aY, int aZ, Explosion aExplosion) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof BaseMetaTileEntity baseTE) { + GTLog.exp.printf( + "Explosion at : %d | %d | %d DIMID: %s due to near explosion!%n", + aX, + aY, + aZ, + aWorld.provider.dimensionId); + baseTE.doEnergyExplosion(); + } + super.onBlockExploded(aWorld, aX, aY, aZ, aExplosion); + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetadata) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + gtTE.onBlockDestroyed(); + mTemporaryTileEntity.set(gtTE); + if (!(gtTE.getMetaTileEntity() instanceof MTEQuantumChest)) { + for (int i = 0; i < gtTE.getSizeInventory(); i++) { + final ItemStack tItem = gtTE.getStackInSlot(i); + if ((tItem != null) && (tItem.stackSize > 0) && (gtTE.isValidSlot(i)) && gtTE.shouldDropItemAt(i)) { + final EntityItem tItemEntity = new EntityItem( + aWorld, + aX + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, + aY + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, + aZ + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, + new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage())); + if (tItem.hasTagCompound()) { + tItemEntity.getEntityItem() + .setTagCompound( + (NBTTagCompound) tItem.getTagCompound() + .copy()); + } + tItemEntity.motionX = (XSTR_INSTANCE.nextGaussian() * 0.05D); + tItemEntity.motionY = (XSTR_INSTANCE.nextGaussian() * 0.25D); + tItemEntity.motionZ = (XSTR_INSTANCE.nextGaussian() * 0.05D); + aWorld.spawnEntityInWorld(tItemEntity); + tItem.stackSize = 0; + gtTE.setInventorySlotContents(i, null); + } + } + } + } + super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetadata); + aWorld.removeTileEntity(aX, aY, aZ); + } + + @Override + public ArrayList getDrops(World aWorld, int aX, int aY, int aZ, int aMeta, int aFortune) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + return gtTE.getDrops(); + } + final IGregTechTileEntity tGregTechTileEntity = mTemporaryTileEntity.get(); + final ArrayList tDrops; + if (tGregTechTileEntity == null) { + tDrops = new ArrayList<>(); + } else { + tDrops = tGregTechTileEntity.getDrops(); + mTemporaryTileEntity.remove(); + } + return tDrops; + } + + @Override + public boolean removedByPlayer(World aWorld, EntityPlayer aPlayer, int aX, int aY, int aZ, boolean aWillHarvest) { + // This delays deletion of the block until after getDrops + return aWillHarvest || super.removedByPlayer(aWorld, aPlayer, aX, aY, aZ, false); + } + + @Override + public void harvestBlock(World aWorld, EntityPlayer aPlayer, int aX, int aY, int aZ, int aMeta) { + super.harvestBlock(aWorld, aPlayer, aX, aY, aZ, aMeta); + aWorld.setBlockToAir(aX, aY, aZ); + } + + @Override + public int getComparatorInputOverride(World aWorld, int aX, int aY, int aZ, int ordinalSide) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + return gtTE.getComparatorValue(ForgeDirection.getOrientation(ordinalSide)); + } + return 0; + } + + @Override + public int isProvidingWeakPower(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { + if (ordinalSide < 0 || ordinalSide > 5) { + return 0; + } + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + return gtTE.getOutputRedstoneSignal( + ForgeDirection.getOrientation(ordinalSide) + .getOpposite()); + } + return 0; + } + + @Override + public int isProvidingStrongPower(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { + if (ordinalSide < 0 || ordinalSide > 5) { + return 0; + } + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity gtTE) { + return gtTE.getStrongOutputRedstoneSignal( + ForgeDirection.getOrientation(ordinalSide) + .getOpposite()); + } + return 0; + } + + @Override + public void dropBlockAsItemWithChance(World aWorld, int aX, int aY, int aZ, int aMetadata, float chance, + int aFortune) { + if (!aWorld.isRemote) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity != null && (chance < 1.0F)) { + if (tTileEntity instanceof BaseMetaTileEntity bmte && (GregTechAPI.sMachineNonWrenchExplosions)) { + GTLog.exp.printf( + "Explosion at : %d | %d | %d DIMID: %s NonWrench picking/Rain!%n", + aX, + aY, + aZ, + aWorld.provider.dimensionId); + bmte.doEnergyExplosion(); + } + } else { + super.dropBlockAsItemWithChance(aWorld, aX, aY, aZ, aMetadata, chance, aFortune); + } + } + } + + @Override + public boolean isSideSolid(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection side) { + if (aWorld.getBlockMetadata(aX, aY, aZ) == 0) { + return true; + } + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity != null) { + if (tTileEntity instanceof BaseMetaTileEntity) { + return true; + } + if (tTileEntity instanceof BaseMetaPipeEntity + && (((BaseMetaPipeEntity) tTileEntity).mConnections & 0xFFFFFFC0) != 0) { + return true; + } + return tTileEntity instanceof ICoverable && ((ICoverable) tTileEntity).getCoverIDAtSide(side) != 0; + } + return false; + } + + @Override + public boolean isBlockNormalCube() { + return true; + } + + /** + * Returns the default ambient occlusion value based on block opacity + */ + @SideOnly(Side.CLIENT) + @Override + public float getAmbientOcclusionLightValue() { + return this.renderAsNormalBlock() ? 0.2F : 0.5F; + } + + /** + * @inheritDoc + */ + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(World aWorld, int aX, int aY, int aZ, Random aRandom) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity) { + ((IGregTechTileEntity) tTileEntity).onRandomDisplayTick(); + } + } + + @Override + public int getLightOpacity(IBlockAccess aWorld, int aX, int aY, int aZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity) { + return ((IGregTechTileEntity) tTileEntity).getLightOpacity(); + } + return aWorld.getBlockMetadata(aX, aY, aZ) == 0 ? 255 : 0; + } + + @Override + public int getLightValue(IBlockAccess aWorld, int aX, int aY, int aZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof BaseMetaTileEntity) { + return ((BaseMetaTileEntity) tTileEntity).getLightValue(); + } + return 0; + } + + @Override + public TileEntity createTileEntity(World aWorld, int aMeta) { + return GregTechAPI.createTileEntity(aMeta); + } + + @Override + public float getExplosionResistance(Entity entity, World aWorld, int aX, int aY, int aZ, double explosionX, + double explosionY, double explosionZ) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity) { + return ((IGregTechTileEntity) tTileEntity).getBlastResistance(ForgeDirection.UNKNOWN); + } + return 10.0F; + } + + @SideOnly(Side.CLIENT) + @Override + public void getSubBlocks(Item item, CreativeTabs aCreativeTab, List outputSubBlocks) { + for (int i = 1; i < GregTechAPI.METATILEENTITIES.length; i++) { + if (GregTechAPI.METATILEENTITIES[i] != null) { + outputSubBlocks.add(new ItemStack(item, 1, i)); + } + } + } + + @Override + public void onBlockPlacedBy(World aWorld, int aX, int aY, int aZ, EntityLivingBase aPlayer, ItemStack aStack) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (!(tTileEntity instanceof IGregTechTileEntity iGregTechTileEntity)) return; + iGregTechTileEntity.setFrontFacing( + BaseTileEntity.getSideForPlayerPlacing(aPlayer, ForgeDirection.UP, iGregTechTileEntity.getValidFacings())); + } + + @Override + public ArrayList getDebugInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, int aLogLevel) { + final TileEntity tTileEntity = aPlayer.worldObj.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IDebugableTileEntity) { + return ((IDebugableTileEntity) tTileEntity).getDebugInfo(aPlayer, aLogLevel); + } + return new ArrayList<>(); + } + + @Override + public boolean recolourBlock(World aWorld, int aX, int aY, int aZ, ForgeDirection side, int aColor) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IColoredTileEntity coloredTE) { + if (coloredTE.getColorization() == (byte) ((~aColor) & 0xF)) { + return false; + } + coloredTE.setColorization((byte) ((~aColor) & 0xF)); + return true; + } + return false; + } + + @Override + public Block getFacade(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof CoverableTileEntity tile) { + final ForgeDirection dir = ForgeDirection.getOrientation(ordinalSide); + if (dir != ForgeDirection.UNKNOWN) { + final Block facadeBlock = tile.getCoverInfoAtSide(dir) + .getFacadeBlock(); + if (facadeBlock != null) return facadeBlock; + } else { + // we do not allow more than one type of facade per block, so no need to check every side + // see comment in gregtech.common.covers.GT_Cover_FacadeBase.isCoverPlaceable + for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { + final Block facadeBlock = tile.getCoverInfoAtSide(tSide) + .getFacadeBlock(); + if (facadeBlock != null) { + return facadeBlock; + } + } + } + } + return Blocks.air; + } + + @Override + public int getFacadeMetadata(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof CoverableTileEntity tile) { + final ForgeDirection dir = ForgeDirection.getOrientation(ordinalSide); + if (ordinalSide != -1) { + final CoverInfo coverInfo = tile.getCoverInfoAtSide(dir); + final Block facadeBlock = coverInfo.getFacadeBlock(); + if (facadeBlock != null) return coverInfo.getFacadeMeta(); + } else { + // we do not allow more than one type of facade per block, so no need to check every side + // see comment in gregtech.common.covers.GT_Cover_FacadeBase.isCoverPlaceable + for (final ForgeDirection d : ForgeDirection.VALID_DIRECTIONS) { + final CoverInfo coverInfo = tile.getCoverInfoAtSide(d); + final Block facadeBlock = coverInfo.getFacadeBlock(); + if (facadeBlock != null) { + return coverInfo.getFacadeMeta(); + } + } + } + } + return 0; + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockMetal.java b/src/main/java/gregtech/common/blocks/BlockMetal.java new file mode 100644 index 0000000000..642de8b39c --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockMetal.java @@ -0,0 +1,68 @@ +package gregtech.common.blocks; + +import static gregtech.api.enums.Mods.NotEnoughItems; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; + +public class BlockMetal extends BlockStorage { + + public Materials[] mMats; + public OrePrefixes mPrefix; + public IIconContainer[] mBlockIcons; + public boolean mHideBlocks; + public static boolean mNEIisLoaded = NotEnoughItems.isModLoaded(); + + public BlockMetal(String aName, Materials[] aMats, OrePrefixes aPrefix, IIconContainer[] aBlockIcons) { + super(ItemStorage.class, aName, Material.iron); + mMats = aMats; + mPrefix = aPrefix; + mBlockIcons = aBlockIcons; + mHideBlocks = mNEIisLoaded; + + for (int i = 0; i < aMats.length; i++) { + if (aMats[i].mMetaItemSubID > 0 && aMats[i].mHasParentMod) { + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + "." + i + ".name", + "Block of " + (GTLanguageManager.i18nPlaceholder ? "%material" : aMats[i].mDefaultLocalName)); + GTOreDictUnificator.registerOre(aPrefix, aMats[i], new ItemStack(this, 1, i)); + } + } + if (aMats.length < 16 && mNEIisLoaded) { + for (int i = aMats.length; i < 16; i++) codechicken.nei.api.API.hideItem(new ItemStack(this, 1, i)); + } + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + if ((aMeta >= 0) && (aMeta < 16) && aMeta < mMats.length) { + return mBlockIcons[aMeta].getIcon(); + } + return null; + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTechAPI.isMachineBlock(this, aMetaData)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + +} diff --git a/src/main/java/gregtech/common/blocks/BlockOres.java b/src/main/java/gregtech/common/blocks/BlockOres.java new file mode 100644 index 0000000000..f2ae18f195 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockOres.java @@ -0,0 +1,154 @@ +package gregtech.common.blocks; + +import static gregtech.api.enums.Textures.BlockIcons.BASALT_STONE; +import static gregtech.api.enums.Textures.BlockIcons.GRANITE_BLACK_STONE; +import static gregtech.api.enums.Textures.BlockIcons.GRANITE_RED_STONE; +import static gregtech.api.enums.Textures.BlockIcons.MARBLE_STONE; + +import java.util.Arrays; + +import net.minecraft.block.Block; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.render.TextureFactory; + +public class BlockOres extends BlockOresAbstract { + + private static final String UNLOCALIZED_NAME = "gt.blockores"; + + public BlockOres() { + super(UNLOCALIZED_NAME, 7, false, Material.rock); + } + + @Override + public String getUnlocalizedName() { + return UNLOCALIZED_NAME; + } + + @Override + public OrePrefixes[] getProcessingPrefix() { // Must have 8 entries; an entry can be null to disable automatic + // recipes. + return new OrePrefixes[] { OrePrefixes.ore, OrePrefixes.oreNetherrack, OrePrefixes.oreEndstone, + OrePrefixes.oreBlackgranite, OrePrefixes.oreRedgranite, OrePrefixes.oreMarble, OrePrefixes.oreBasalt, + null }; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int ordinalSide, int meta) { + int index = ((meta / 1000) % 16); + return switch (index) { + case 1 -> Blocks.netherrack.getIcon(ordinalSide, 0); + case 2 -> Blocks.end_stone.getIcon(ordinalSide, 0); + case 3 -> GRANITE_BLACK_STONE.getIcon(); + case 4 -> GRANITE_RED_STONE.getIcon(); + case 5 -> MARBLE_STONE.getIcon(); + case 6 -> BASALT_STONE.getIcon(); + default -> Blocks.stone.getIcon(ordinalSide, 0); + }; + } + + /** + * @inheritDoc + */ + @Override + public boolean isFireSource(World world, int x, int y, int z, ForgeDirection side) { + return (side == ForgeDirection.UP && getDamageValue(world, x, y, z) / 1000 % 16 == 1); + } + + /** + * @inheritDoc + */ + @Override + public MapColor getMapColor(int meta) { + return meta == 1 ? MapColor.netherrackColor : MapColor.stoneColor; + } + + @Override + public int getBaseBlockHarvestLevel(int aMeta) { + return switch (aMeta) { + case 3, 4 -> 3; + default -> 0; + }; + } + + @Override + public Block getDroppedBlock() { + return GregTechAPI.sBlockOres1; + } + + @Override + public Materials[] getDroppedDusts() { // Must have 8 entries; can be null. + return new Materials[] { Materials.Stone, Materials.Netherrack, Materials.Endstone, Materials.GraniteBlack, + Materials.GraniteRed, Materials.Marble, Materials.Basalt, Materials.Stone }; + } + + @Override + public boolean[] getEnabledMetas() { + return new boolean[] { true, true, true, GTMod.gregtechproxy.enableBlackGraniteOres, + GTMod.gregtechproxy.enableRedGraniteOres, GTMod.gregtechproxy.enableMarbleOres, + GTMod.gregtechproxy.enableBasaltOres, true }; + } + + @Override + public ITexture[] getTextureSet() { + final ITexture[] rTextures = new ITexture[16]; // Must have 16 entries. + Arrays.fill(rTextures, TextureFactory.of(Blocks.stone)); + rTextures[1] = TextureFactory.of(Blocks.netherrack); + rTextures[2] = TextureFactory.of(Blocks.end_stone); + rTextures[3] = TextureFactory.builder() + .addIcon(GRANITE_BLACK_STONE) + .stdOrient() + .build(); + rTextures[4] = TextureFactory.builder() + .addIcon(GRANITE_RED_STONE) + .stdOrient() + .build(); + rTextures[5] = TextureFactory.builder() + .addIcon(MARBLE_STONE) + .stdOrient() + .build(); + rTextures[6] = TextureFactory.builder() + .addIcon(BASALT_STONE) + .stdOrient() + .build(); + return rTextures; + } + + @Override + public void harvestBlock(World worldIn, EntityPlayer player, int x, int y, int z, int meta) { + + if (EnchantmentHelper.getSilkTouchModifier(player)) { + TileEntityOres.shouldSilkTouch = true; + super.harvestBlock(worldIn, player, x, y, z, meta); + + if (TileEntityOres.shouldSilkTouch) { + TileEntityOres.shouldSilkTouch = false; + } + return; + } + + if (!(player instanceof FakePlayer)) { + TileEntityOres.shouldFortune = true; + } + super.harvestBlock(worldIn, player, x, y, z, meta); + if (TileEntityOres.shouldFortune) { + TileEntityOres.shouldFortune = false; + } + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockOresAbstract.java b/src/main/java/gregtech/common/blocks/BlockOresAbstract.java new file mode 100644 index 0000000000..f147c1c41d --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockOresAbstract.java @@ -0,0 +1,324 @@ +package gregtech.common.blocks; + +import static gregtech.api.enums.Mods.NotEnoughItems; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.client.particle.EffectRenderer; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.boss.EntityDragon; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.StatCollector; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.items.GTGenericBlock; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.render.GTRendererBlock; + +public abstract class BlockOresAbstract extends GTGenericBlock implements ITileEntityProvider { + + private static final String DOT_NAME = ".name"; + private static final String DOT_TOOLTIP = ".tooltip"; + public static ThreadLocal mTemporaryTileEntity = new ThreadLocal<>(); + public static boolean FUCKING_LOCK = false; + public static boolean tHideOres; + public static Set aBlockedOres = new HashSet<>(); + + protected BlockOresAbstract(String aUnlocalizedName, int aOreMetaCount, boolean aHideFirstMeta, + Material aMaterial) { + super(ItemOres.class, aUnlocalizedName, aMaterial); + this.isBlockContainer = true; + setStepSound(soundTypeStone); + setCreativeTab(GregTechAPI.TAB_GREGTECH_ORES); + tHideOres = NotEnoughItems.isModLoaded() && GTMod.gregtechproxy.mHideUnusedOres; + if (aOreMetaCount > 8 || aOreMetaCount < 0) aOreMetaCount = 8; + + for (int i = 0; i < 16; i++) { + GTModHandler.addValuableOre(this, i, 1); + } + for (int i = 1; i < GregTechAPI.sGeneratedMaterials.length; i++) { + if (GregTechAPI.sGeneratedMaterials[i] != null) { + for (int j = 0; j < aOreMetaCount; j++) { + if (!this.getEnabledMetas()[j]) continue; + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + "." + (i + (j * 1000)) + DOT_NAME, + GTLanguageManager.i18nPlaceholder ? getLocalizedNameFormat(GregTechAPI.sGeneratedMaterials[i]) + : getLocalizedName(GregTechAPI.sGeneratedMaterials[i])); + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + "." + (i + (j * 1000)) + DOT_TOOLTIP, + GregTechAPI.sGeneratedMaterials[i].getToolTip()); + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + "." + ((i + 16000) + (j * 1000)) + DOT_NAME, + "Small " + (GTLanguageManager.i18nPlaceholder + ? getLocalizedNameFormat(GregTechAPI.sGeneratedMaterials[i]) + : getLocalizedName(GregTechAPI.sGeneratedMaterials[i]))); + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + "." + ((i + 16000) + (j * 1000)) + DOT_TOOLTIP, + GregTechAPI.sGeneratedMaterials[i].getToolTip()); + if ((GregTechAPI.sGeneratedMaterials[i].mTypes & 0x8) != 0 + && !aBlockedOres.contains(GregTechAPI.sGeneratedMaterials[i])) { + GTOreDictUnificator.registerOre( + this.getProcessingPrefix()[j] != null + ? this.getProcessingPrefix()[j].get(GregTechAPI.sGeneratedMaterials[i]) + : "", + new ItemStack(this, 1, i + (j * 1000))); + if (tHideOres) { + if (!(j == 0 && !aHideFirstMeta)) { + codechicken.nei.api.API.hideItem(new ItemStack(this, 1, i + (j * 1000))); + } + codechicken.nei.api.API.hideItem(new ItemStack(this, 1, (i + 16000) + (j * 1000))); + } + } + } + } + } + } + + public int getBaseBlockHarvestLevel(int aMeta) { + return 0; + } + + @Override + public void onNeighborChange(IBlockAccess aWorld, int aX, int aY, int aZ, int aTileX, int aTileY, int aTileZ) { + if (!FUCKING_LOCK) { + FUCKING_LOCK = true; + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if ((tTileEntity instanceof TileEntityOres)) { + ((TileEntityOres) tTileEntity).onUpdated(); + } + } + FUCKING_LOCK = false; + } + + @Override + public void onNeighborBlockChange(World aWorld, int aX, int aY, int aZ, Block aBlock) { + if (!FUCKING_LOCK) { + FUCKING_LOCK = true; + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if ((tTileEntity instanceof TileEntityOres)) { + ((TileEntityOres) tTileEntity).onUpdated(); + } + } + FUCKING_LOCK = false; + } + + public String getLocalizedNameFormat(Materials aMaterial) { + return switch (aMaterial.mName) { + case "InfusedAir", "InfusedDull", "InfusedEarth", "InfusedEntropy", "InfusedFire", "InfusedOrder", "InfusedVis", "InfusedWater" -> "%material Infused Stone"; + case "Vermiculite", "Bentonite", "Kaolinite", "Talc", "BasalticMineralSand", "GraniticMineralSand", "GlauconiteSand", "CassiteriteSand", "GarnetSand", "QuartzSand", "Pitchblende", "FullersEarth" -> "%material"; + default -> "%material" + OrePrefixes.ore.mLocalizedMaterialPost; + }; + } + + public String getLocalizedName(Materials aMaterial) { + return aMaterial.getDefaultLocalizedNameForItem(getLocalizedNameFormat(aMaterial)); + } + + @Override + public boolean onBlockActivated(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer, int ordinalSide, + float aOffsetX, float aOffsetY, float aOffsetZ) { + if (!aPlayer.isSneaking() || !aPlayer.capabilities.isCreativeMode) { + return false; + } + + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (!(tTileEntity instanceof TileEntityOres)) { + return false; + } + + boolean tNatural = (((TileEntityOres) tTileEntity).mNatural = !((TileEntityOres) tTileEntity).mNatural); + GTUtility.sendChatToPlayer(aPlayer, "Ore \"mNatural\" flag set to: " + tNatural); + return true; + } + + @Override + public boolean onBlockEventReceived(World p_149696_1_, int p_149696_2_, int p_149696_3_, int p_149696_4_, + int p_149696_5_, int p_149696_6_) { + super.onBlockEventReceived(p_149696_1_, p_149696_2_, p_149696_3_, p_149696_4_, p_149696_5_, p_149696_6_); + TileEntity tileentity = p_149696_1_.getTileEntity(p_149696_2_, p_149696_3_, p_149696_4_); + return tileentity != null && tileentity.receiveClientEvent(p_149696_5_, p_149696_6_); + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return (!(entity instanceof EntityDragon)) && (super.canEntityDestroy(world, x, y, z, entity)); + } + + @Override + public String getHarvestTool(int aMeta) { + return aMeta < 8 ? "pickaxe" : "shovel"; + } + + @Override + public int getHarvestLevel(int aMeta) { + return aMeta == 5 || aMeta == 6 ? 2 : aMeta % 8; + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + return 1.0F + getHarvestLevel(aWorld.getBlockMetadata(aX, aY, aZ)) * 1.0F; + } + + @Override + public float getExplosionResistance(Entity entity, World aWorld, int aX, int aY, int aZ, double explosionX, + double explosionY, double explosionZ) { + return 1.0F + getHarvestLevel(aWorld.getBlockMetadata(aX, aY, aZ)) * 1.0F; + } + + @Override + protected boolean canSilkHarvest() { + return false; + } + + @Override + public abstract String getUnlocalizedName(); + + @Override + public String getLocalizedName() { + return StatCollector.translateToLocal(getUnlocalizedName() + DOT_NAME); + } + + @Override + public int getRenderType() { + if (GTRendererBlock.INSTANCE == null) { + return super.getRenderType(); + } + return GTRendererBlock.INSTANCE.mRenderID; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { + return true; + } + + @Override + public boolean hasTileEntity(int aMeta) { + return true; + } + + @Override + public TileEntity createNewTileEntity(World aWorld, int aMeta) { + return createTileEntity(aWorld, aMeta); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess aIBlockAccess, int aX, int aY, int aZ, int ordinalSide) { + return Blocks.stone.getIcon(0, 0); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int ordinalSide, int aMeta) { + return Blocks.stone.getIcon(0, 0); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister aIconRegister) {} + + @Override + @SideOnly(Side.CLIENT) + public boolean addHitEffects(World worldObj, MovingObjectPosition target, EffectRenderer effectRenderer) { + GTRendererBlock + .addHitEffects(effectRenderer, this, worldObj, target.blockX, target.blockY, target.blockZ, target.sideHit); + return true; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean addDestroyEffects(World world, int x, int y, int z, int meta, EffectRenderer effectRenderer) { + GTRendererBlock.addDestroyEffects(effectRenderer, this, world, x, y, z); + return true; + } + + @Override + public int getDamageValue(World aWorld, int aX, int aY, int aZ) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (((tTileEntity instanceof TileEntityOres))) { + return ((TileEntityOres) tTileEntity).getMetaData(); + } + return 0; + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetadata) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if ((tTileEntity instanceof TileEntityOres)) { + mTemporaryTileEntity.set((TileEntityOres) tTileEntity); + } + super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetadata); + aWorld.removeTileEntity(aX, aY, aZ); + } + + public abstract OrePrefixes[] getProcessingPrefix(); // Must have 8 entries; an entry can be null to disable + // automatic recipes. + + public abstract boolean[] getEnabledMetas(); // Must have 8 entries. + + public abstract Block getDroppedBlock(); + + public abstract Materials[] getDroppedDusts(); // Must have 8 entries; can be null. + + @Override + public ArrayList getDrops(World aWorld, int aX, int aY, int aZ, int aMeta, int aFortune) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if ((tTileEntity instanceof TileEntityOres)) { + return ((TileEntityOres) tTileEntity).getDrops(getDroppedBlock(), aFortune); + } + return mTemporaryTileEntity.get() == null ? new ArrayList<>() + : mTemporaryTileEntity.get() + .getDrops(getDroppedBlock(), aFortune); + } + + @Override + public TileEntity createTileEntity(World aWorld, int aMeta) { + return new TileEntityOres(); + } + + public abstract ITexture[] getTextureSet(); // Must have 16 entries. + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) { + for (int i = 0; i < GregTechAPI.sGeneratedMaterials.length; i++) { + Materials tMaterial = GregTechAPI.sGeneratedMaterials[i]; + if ((tMaterial != null) && ((tMaterial.mTypes & 0x8) != 0) && !aBlockedOres.contains(tMaterial)) { + for (int meta = i; meta < 23000 + i; meta += 1000) { + if (!(new ItemStack(aItem, 1, meta).getDisplayName() + .contains(DOT_NAME))) aList.add(new ItemStack(aItem, 1, meta)); + } + } + } + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockReinforced.java b/src/main/java/gregtech/common/blocks/BlockReinforced.java new file mode 100644 index 0000000000..034d18e62e --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockReinforced.java @@ -0,0 +1,409 @@ +package gregtech.common.blocks; + +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.entity.boss.EntityWither; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.Explosion; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.items.GTGenericBlock; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.WorldSpawnedEventBuilder; + +public class BlockReinforced extends GTGenericBlock { + + public BlockReinforced(String aName) { + super(ItemStorage.class, aName, new MaterialReinforced()); + for (int i = 0; i < 16; i++) { + Textures.BlockIcons.casingTexturePages[1][i + 80] = TextureFactory.of(this, i); + } + setStepSound(soundTypeStone); + setCreativeTab(GregTechAPI.TAB_GREGTECH); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Bronzeplate Reinforced Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Iridium Reinforced Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Plascrete Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Tungstensteel Reinforced Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Brittle Charcoal"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Powderbarrel"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Solid Super Fuel"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Magic Solid Super Fuel"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Steel Reinforced Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Titanium Reinforced Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Naquadah Reinforced Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Neutronium Reinforced Block"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Raw Deep Dark Portal Block"); + ItemList.Block_BronzePlate.set( + new ItemStack( + this.setHardness(60.0f) + .setResistance(150.0f), + 1, + 0)); + ItemList.Block_IridiumTungstensteel.set( + new ItemStack( + this.setHardness(400.0f) + .setResistance(600.0f), + 1, + 1)); + ItemList.Block_Plascrete.set( + new ItemStack( + this.setHardness(5.0f) + .setResistance(6.0f), + 1, + 2)); + ItemList.Block_TungstenSteelReinforced.set( + new ItemStack( + this.setHardness(250.0f) + .setResistance(400.0f), + 1, + 3)); + ItemList.Block_BrittleCharcoal.set( + new ItemStack( + this.setHardness(0.5f) + .setResistance(8.0f), + 1, + 4)); + ItemList.Block_Powderbarrel.set( + new ItemStack( + this.setHardness(2.5f) + .setResistance(2.0f), + 1, + 5)); + ItemList.Block_SSFUEL.set( + new ItemStack( + this.setHardness(2.5f) + .setResistance(2.0f), + 1, + 6)); + ItemList.Block_MSSFUEL.set( + new ItemStack( + this.setHardness(2.5f) + .setResistance(2.0f), + 1, + 7)); + ItemList.Block_SteelPlate.set( + new ItemStack( + this.setHardness(150.0f) + .setResistance(200.0f), + 1, + 8)); + ItemList.Block_TitaniumPlate.set( + new ItemStack( + this.setHardness(200.0f) + .setResistance(300.0f), + 1, + 9)); + ItemList.Block_NaquadahPlate.set( + new ItemStack( + this.setHardness(500.0f) + .setResistance(1000.0f), + 1, + 10)); + ItemList.Block_NeutroniumPlate.set( + new ItemStack( + this.setHardness(750.0f) + .setResistance(2500.0f), + 1, + 11)); + ItemList.Block_BedrockiumCompressed.set( + new ItemStack( + this.setHardness(1500.0f) + .setResistance(5000.0f), + 1, + 12)); + GTModHandler.addShapelessCraftingRecipe( + new ItemStack(Items.coal, 1, 1), + new Object[] { ItemList.Block_BrittleCharcoal.get(1) }); + GTModHandler.addCraftingRecipe( + ItemList.Block_Powderbarrel.get(1L), + GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "WSW", "GGG", "WGW", 'W', OrePrefixes.plate.get(Materials.Wood), 'G', + new ItemStack(Items.gunpowder, 1), 'S', new ItemStack(Items.string, 1) }); + } + + @Override + public String getHarvestTool(int aMeta) { + if (aMeta == 5 || aMeta == 4 || aMeta == 6 || aMeta == 7) return "axe"; + if (aMeta == 2) return "wrench"; + return "pickaxe"; + } + + @Override + public int getHarvestLevel(int aMeta) { + if (aMeta == 4 || aMeta == 5 || aMeta == 6 || aMeta == 7) return 1; + if (aMeta == 2) return 2; + if (aMeta == 9 || aMeta == 3 || aMeta == 1) return 5; + if (aMeta == 10 || aMeta == 11) return 7; + return 4; + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + if ((aMeta >= 0) && (aMeta < 16)) { + switch (aMeta) { + case 0 -> { + return Textures.BlockIcons.BLOCK_BRONZEPREIN.getIcon(); + } + case 1 -> { + return Textures.BlockIcons.BLOCK_IRREIN.getIcon(); + } + case 2 -> { + return Textures.BlockIcons.BLOCK_PLASCRETE.getIcon(); + } + case 3 -> { + return Textures.BlockIcons.BLOCK_TSREIN.getIcon(); + } + case 4, 6, 7 -> { + return Blocks.coal_block.getIcon(0, 0); + } + case 5 -> { + return Textures.BlockIcons.COVER_WOOD_PLATE.getIcon(); + } + case 8 -> { + return Textures.BlockIcons.BLOCK_STEELPREIN.getIcon(); + } + case 9 -> { + return Textures.BlockIcons.BLOCK_TITANIUMPREIN.getIcon(); + } + case 10 -> { + return Textures.BlockIcons.BLOCK_NAQUADAHPREIN.getIcon(); + } + case 11 -> { + return Textures.BlockIcons.BLOCK_NEUTRONIUMPREIN.getIcon(); + } + case 12 -> { + return Textures.BlockIcons.BLOCK_DEEP_DARK_RAW.getIcon(); + } + } + } + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + if (aWorld == null) { + return 0.0F; + } + if (aWorld.isAirBlock(aX, aY, aZ)) { + return 0.0F; + } + int tMeta = aWorld.getBlockMetadata(aX, aY, aZ); + if (tMeta == 0) { + return 60.0F; + } + if (tMeta == 1) { + return 400.0F; + } + if (tMeta == 2) { + return 5.0F; + } + if (tMeta == 3) { + return 250.0F; + } + if (tMeta == 4 || tMeta == 5 || tMeta == 6 || tMeta == 7) { + return 0.5F; + } + if (tMeta == 8) { + return 150.0F; + } + if (tMeta == 9) { + return 200.0F; + } + if (tMeta == 10) { + return 500.0F; + } + if (tMeta == 11) { + return 750.0F; + } + return Blocks.iron_block.getBlockHardness(aWorld, aX, aY, aZ); + } + + @Override + public float getExplosionResistance(Entity entity, World world, int x, int y, int z, double explosionX, + double explosionY, double explosionZ) { + if (world == null) { + return 0.0F; + } + int tMeta = world.getBlockMetadata(x, y, z); + if (tMeta == 0) { + return 150.0F; + } + if (tMeta == 1) { + return 600.0F; + } + if (tMeta == 2) { + return 6.0F; + } + if (tMeta == 3) { + return 400.0F; + } + if (tMeta == 4 || tMeta == 6 || tMeta == 7) { + return 8.0F; + } + if (tMeta == 5) { + return 1.0F; + } + if (tMeta == 8) { + return 200.0F; + } + if (tMeta == 9) { + return 300.0F; + } + if (tMeta == 10) { + return 1000.0F; + } + if (tMeta == 11) { + return 2500.0F; + } + return super.getExplosionResistance(entity, world, x, y, z, explosionX, explosionY, explosionZ); + } + + @Override + public String getUnlocalizedName() { + return this.mUnlocalizedName; + } + + @Override + public String getLocalizedName() { + return StatCollector.translateToLocal(this.mUnlocalizedName + ".name"); + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { + return true; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public int damageDropped(int metadata) { + return metadata; + } + + @Override + public int getDamageValue(World aWorld, int aX, int aY, int aZ) { + return aWorld.getBlockMetadata(aX, aY, aZ); + } + + @Override + public void dropBlockAsItemWithChance(World aWorld, int aX, int aY, int aZ, int aMetadata, float chance, + int aFortune) { + if (aMetadata == 4) { + this.dropBlockAsItem(aWorld, aX, aY, aZ, new ItemStack(Items.coal, XSTR_INSTANCE.nextInt(2) + 1, 1)); + } else { + super.dropBlockAsItemWithChance(aWorld, aX, aY, aZ, aMetadata, chance, aFortune); + } + } + + @SuppressWarnings("deprecation") + @Override + public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z) { + if (!world.isRemote && world.getBlockMetadata(x, y, z) == 5) { + EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, x + 0.5F, y + 0.5F, z + 0.5F, player); + world.spawnEntityInWorld(entitytntprimed); + new WorldSpawnedEventBuilder.SoundAtEntityEventBuilder().setPitch(1f) + .setVolume(1f) + .setIdentifier(SoundResource.GAME_TNT_PRIMED) + .setEntity(entitytntprimed) + .setWorld(world) + .run(); + world.setBlockToAir(x, y, z); + return false; + } + return super.removedByPlayer(world, player, x, y, z); + } + + @Override + public void onBlockAdded(World world, int x, int y, int z) { + super.onBlockAdded(world, x, y, z); + if (world.isBlockIndirectlyGettingPowered(x, y, z) && world.getBlockMetadata(x, y, z) == 5) { + removedByPlayer(world, null, x, y, z); + } + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block neighbor) { + if (world.isBlockIndirectlyGettingPowered(x, y, z) && world.getBlockMetadata(x, y, z) == 5) { + removedByPlayer(world, null, x, y, z); + } + } + + @Override + public void onBlockExploded(World world, int x, int y, int z, Explosion explosion) { + if (!world.isRemote && world.getBlockMetadata(x, y, z) == 5) { + EntityTNTPrimed entitytntprimed = new EntityTNTPrimed( + world, + x + 0.5F, + y + 0.5F, + z + 0.5F, + explosion.getExplosivePlacedBy()); + entitytntprimed.fuse = (world.rand.nextInt(entitytntprimed.fuse / 4) + entitytntprimed.fuse / 8); + world.spawnEntityInWorld(entitytntprimed); + } + super.onBlockExploded(world, x, y, z, explosion); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int ordinalSide, + float xOffset, float yOffset, float zOffset) { + if ((player.getCurrentEquippedItem() != null) && (player.getCurrentEquippedItem() + .getItem() == Items.flint_and_steel) && world.getBlockMetadata(x, y, z) == 5) { + removedByPlayer(world, player, x, y, z); + + return true; + } + return super.onBlockActivated(world, x, y, z, player, ordinalSide, xOffset, yOffset, zOffset); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister aIconRegister) {} + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item aItem, CreativeTabs aCreativeTab, List aList) { + for (int i = 0; i < 16; i++) { + ItemStack aStack = new ItemStack(aItem, 1, i); + if (!aStack.getDisplayName() + .contains(".name")) aList.add(aStack); + } + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return !(entity instanceof EntityWither); + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockStones.java b/src/main/java/gregtech/common/blocks/BlockStones.java new file mode 100644 index 0000000000..895a103016 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockStones.java @@ -0,0 +1,62 @@ +package gregtech.common.blocks; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; + +public class BlockStones extends BlockStonesAbstract { + + public BlockStones() { + super(ItemGranites.class, "gt.blockstones"); + setResistance(60.0F); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Marble"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Marble Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Mossy Marble Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Marble Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Cracked Marble Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Mossy Marble Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Chiseled Marble"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Smooth Marble"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Basalt"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Basalt Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Mossy Basalt Cobblestone"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Basalt Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Cracked Basalt Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Mossy Basalt Bricks"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Chiseled Basalt"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Smooth Basalt"); + for (int i = 0; i < 16; i++) { + GTOreDictUnificator + .registerOre(OrePrefixes.stone, i < 8 ? Materials.Marble : Materials.Basalt, new ItemStack(this, 1, i)); + GTOreDictUnificator + .registerOre(OrePrefixes.block, i < 8 ? Materials.Marble : Materials.Basalt, new ItemStack(this, 1, i)); + GTOreDictUnificator.registerOre( + (i < 8 ? Materials.Marble.mName.toLowerCase() : Materials.Basalt.mName.toLowerCase()), + new ItemStack(this, 1, i)); + } + } + + @Override + public int getHarvestLevel(int aMeta) { + return 2; + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + return this.blockHardness = Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ) * 3.0F; + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + if ((aMeta >= 0) && (aMeta < 16)) { + return gregtech.api.enums.Textures.BlockIcons.STONES[aMeta].getIcon(); + } + return gregtech.api.enums.Textures.BlockIcons.STONES[0].getIcon(); + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockStonesAbstract.java b/src/main/java/gregtech/common/blocks/BlockStonesAbstract.java new file mode 100644 index 0000000000..3d8c4e9feb --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockStonesAbstract.java @@ -0,0 +1,250 @@ +package gregtech.common.blocks; + +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import java.util.List; + +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OreDictNames; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IOreRecipeRegistrator; +import gregtech.api.items.GTGenericBlock; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +public class BlockStonesAbstract extends GTGenericBlock implements IOreRecipeRegistrator { + + public BlockStonesAbstract(Class aItemClass, String aName) { + super(aItemClass, aName, Material.rock); + OrePrefixes.crafting.add(this); + setStepSound(soundTypeStone); + setCreativeTab(GregTechAPI.TAB_GREGTECH_MATERIALS); + + this.registerSmeltingRecipes(); + this.registerAssemblerRecipes(); + this.registerCraftingRecipes(); + this.registerForgeHammerRecipes(); + + } + + private void registerSmeltingRecipes() { + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 0), new ItemStack(this, 1, 7)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 1), new ItemStack(this, 1, 0)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 2), new ItemStack(this, 1, 0)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 3), new ItemStack(this, 1, 0)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 4), new ItemStack(this, 1, 0)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 5), new ItemStack(this, 1, 0)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 6), new ItemStack(this, 1, 0)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 7), new ItemStack(this, 1, 0)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 8), new ItemStack(this, 1, 15)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 9), new ItemStack(this, 1, 8)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 10), new ItemStack(this, 1, 8)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 11), new ItemStack(this, 1, 8)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 12), new ItemStack(this, 1, 8)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 13), new ItemStack(this, 1, 8)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 14), new ItemStack(this, 1, 8)); + GTModHandler.addSmeltingRecipe(new ItemStack(this, 1, 15), new ItemStack(this, 1, 8)); + + } + + private void registerAssemblerRecipes() { + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(this, 1, 0), GTUtility.getIntegratedCircuit(4)) + .itemOutputs(new ItemStack(this, 1, 3)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(4) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(this, 1, 8), GTUtility.getIntegratedCircuit(4)) + .itemOutputs(new ItemStack(this, 1, 11)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(4) + .addTo(assemblerRecipes); + } + + private void registerCraftingRecipes() { + GTModHandler.addCraftingRecipe( + new ItemStack(this, 1, 6), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "f", "X", 'X', new ItemStack(this, 1, 7) }); + GTModHandler.addCraftingRecipe( + new ItemStack(this, 1, 14), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "f", "X", 'X', new ItemStack(this, 1, 15) }); + GTModHandler.addCraftingRecipe( + new ItemStack(this, 1, 4), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "h", "X", 'X', new ItemStack(this, 1, 3) }); + GTModHandler.addCraftingRecipe( + new ItemStack(this, 1, 12), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "h", "X", 'X', new ItemStack(this, 1, 11) }); + GTModHandler.addCraftingRecipe( + new ItemStack(this, 1, 1), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "h", "X", 'X', new ItemStack(this, 1, 0) }); + GTModHandler.addCraftingRecipe( + new ItemStack(this, 1, 9), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "h", "X", 'X', new ItemStack(this, 1, 8) }); + GTModHandler.addCraftingRecipe( + new ItemStack(this, 4, 3), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "XX", "XX", 'X', new ItemStack(this, 4, 0) }); + GTModHandler.addCraftingRecipe( + new ItemStack(this, 4, 11), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "XX", "XX", 'X', new ItemStack(this, 4, 8) }); + GTModHandler.addCraftingRecipe( + new ItemStack(this, 4, 3), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "XX", "XX", 'X', new ItemStack(this, 4, 7) }); + GTModHandler.addCraftingRecipe( + new ItemStack(this, 4, 11), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "XX", "XX", 'X', new ItemStack(this, 4, 15) }); + } + + private void registerForgeHammerRecipes() { + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(this, 1, 3)) + .itemOutputs(new ItemStack(this, 1, 4)) + .duration(16 * TICKS) + .eut(10) + .addTo(hammerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(this, 1, 11)) + .itemOutputs(new ItemStack(this, 1, 12)) + .duration(16 * TICKS) + .eut(10) + .addTo(hammerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(this, 1, 0)) + .itemOutputs(new ItemStack(this, 1, 1)) + .duration(16 * TICKS) + .eut(10) + .addTo(hammerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(this, 1, 8)) + .itemOutputs(new ItemStack(this, 1, 9)) + .duration(16 * TICKS) + .eut(10) + .addTo(hammerRecipes); + } + + @Override + public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, + ItemStack aStack) { + if (aOreDictName.equals(OreDictNames.craftingLensWhite.toString())) { + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(this, 1, 7), GTUtility.copyAmount(0, aStack)) + .itemOutputs(new ItemStack(this, 1, 6)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(laserEngraverRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(this, 1, 15), GTUtility.copyAmount(0, aStack)) + .itemOutputs(new ItemStack(this, 1, 14)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(laserEngraverRecipes); + + } + } + + @Override + public String getHarvestTool(int aMeta) { + return "pickaxe"; + } + + @Override + public int getHarvestLevel(int aMeta) { + return 1; + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + return this.blockHardness = Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ) * 3.0F; + } + + @Override + public String getUnlocalizedName() { + return this.mUnlocalizedName; + } + + @Override + public String getLocalizedName() { + return StatCollector.translateToLocal(this.mUnlocalizedName + ".name"); + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { + return true; + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + if ((aMeta >= 0) && (aMeta < 16)) { + return gregtech.api.enums.Textures.BlockIcons.GRANITES[aMeta].getIcon(); + } + return null; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return world.getBlockMetadata(x, y, z) % 8 < 3; + } + + @Override + public int damageDropped(int metadata) { + return metadata % 8 == 0 ? metadata + 1 : metadata; + } + + @Override + public int getDamageValue(World aWorld, int aX, int aY, int aZ) { + return aWorld.getBlockMetadata(aX, aY, aZ); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister aIconRegister) {} + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item aItem, CreativeTabs aCreativeTab, List aList) { + for (int i = 0; i < 16; i++) { + aList.add(new ItemStack(aItem, 1, i)); + } + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockStorage.java b/src/main/java/gregtech/common/blocks/BlockStorage.java new file mode 100644 index 0000000000..1886d25d9b --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockStorage.java @@ -0,0 +1,103 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.items.GTGenericBlock; + +public class BlockStorage extends GTGenericBlock { + + protected BlockStorage(Class aItemClass, String aName, Material aMaterial) { + super(aItemClass, aName, aMaterial); + setStepSound(soundTypeMetal); + setCreativeTab(GregTechAPI.TAB_GREGTECH_MATERIALS); + } + + @Override + public String getHarvestTool(int aMeta) { + return "pickaxe"; + } + + @Override + public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) { + return true; + } + + @Override + public int getHarvestLevel(int aMeta) { + return 1; + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + return Blocks.iron_block.getBlockHardness(aWorld, aX, aY, aZ); + } + + @Override + public float getExplosionResistance(Entity aTNT) { + return Blocks.iron_block.getExplosionResistance(aTNT); + } + + @Override + public String getUnlocalizedName() { + return this.mUnlocalizedName; + } + + @Override + public String getLocalizedName() { + return StatCollector.translateToLocal(this.mUnlocalizedName + ".name"); + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { + return true; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return true; + } + + @Override + public int damageDropped(int metadata) { + return metadata; + } + + @Override + public int getDamageValue(World aWorld, int aX, int aY, int aZ) { + return aWorld.getBlockMetadata(aX, aY, aZ); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister aIconRegister) {} + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item aItem, CreativeTabs aCreativeTab, List aList) { + for (int i = 0; i < 16; i++) { + if (!(new ItemStack(aItem, 1, i).getDisplayName() + .contains(".name"))) aList.add(new ItemStack(aItem, 1, i)); + } + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockTintedIndustrialGlass.java b/src/main/java/gregtech/common/blocks/BlockTintedIndustrialGlass.java new file mode 100644 index 0000000000..16a22e7c35 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockTintedIndustrialGlass.java @@ -0,0 +1,98 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Facing; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.oredict.OreDictionary; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.util.GTLanguageManager; + +public class BlockTintedIndustrialGlass extends BlockCasingsAbstract { + + public BlockTintedIndustrialGlass() { + super(ItemGlass1.class, "gt.blocktintedglass", Material.glass, 4); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Tinted Industrial Glass (White)"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".1.name", "Tinted Industrial Glass (Light Gray)"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Tinted Industrial Glass (Gray)"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Tinted Industrial Glass (Black)"); + ItemList.GlassTintedIndustrialWhite.set(new ItemStack(this, 1, 0)); + ItemList.GlassTintedIndustrialLightGray.set(new ItemStack(this, 1, 1)); + ItemList.GlassTintedIndustrialGray.set(new ItemStack(this, 1, 2)); + ItemList.GlassTintedIndustrialBlack.set(new ItemStack(this, 1, 3)); + + // Register tinted industrial glass as EV-Tier glass + OreDictionary.registerOre("blockGlassEV", this); + + this.opaque = false; + } + + @Override + public int getTextureIndex(int aMeta) { + // Page 16, 32-47 + return (16 << 7) | (aMeta + 32); + } + + @Override + public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { + return false; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int ordinalSide, int aMeta) { + return switch (aMeta) { + case 0 -> Textures.BlockIcons.GLASS_TINTED_INDUSTRIAL_WHITE.getIcon(); + case 1 -> Textures.BlockIcons.GLASS_TINTED_INDUSTRIAL_LIGHT_GRAY.getIcon(); + case 2 -> Textures.BlockIcons.GLASS_TINTED_INDUSTRIAL_GRAY.getIcon(); + case 3 -> Textures.BlockIcons.GLASS_TINTED_INDUSTRIAL_BLACK.getIcon(); + default -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); + }; + } + + /** + * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given + * coordinates. Args: blockAccess, x, y, z, side + */ + @SideOnly(Side.CLIENT) + @Override + public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) { + Block block = worldIn.getBlock(x, y, z); + + if (worldIn.getBlockMetadata(x, y, z) != worldIn.getBlockMetadata( + x - Facing.offsetsXForSide[side], + y - Facing.offsetsYForSide[side], + z - Facing.offsetsZForSide[side])) { + return true; + } + + if (block == this) { + return false; + } + + return super.shouldSideBeRendered(worldIn, x, y, z, side); + } +} diff --git a/src/main/java/gregtech/common/blocks/BlockWormholeRender.java b/src/main/java/gregtech/common/blocks/BlockWormholeRender.java new file mode 100644 index 0000000000..7ae7615639 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/BlockWormholeRender.java @@ -0,0 +1,75 @@ +package gregtech.common.blocks; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.common.tileentities.render.TileEntityWormhole; + +public class BlockWormholeRender extends Block { + + public BlockWormholeRender() { + super(Material.iron); + this.setResistance(20f); + this.setHardness(-1.0f); + // this.setCreativeTab(TecTech.creativeTabTecTech); + this.setBlockName("WormholeRenderer"); + this.setLightLevel(100.0f); + GameRegistry.registerBlock(this, getUnlocalizedName()); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT"); + } + + @Override + public String getUnlocalizedName() { + return "gt.wormholerenderer"; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean canRenderInPass(int a) { + return true; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public boolean hasTileEntity(int metadata) { + return true; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) { + return new TileEntityWormhole(); + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { + return new ArrayList<>(); + } + + @Override + public boolean isCollidable() { + return true; + } + +} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings1.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings1.java deleted file mode 100644 index 897011eba9..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings1.java +++ /dev/null @@ -1,108 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Block_Casings1 extends GT_Block_Casings_Abstract { - - /** - * Texture Index Information Textures.BlockIcons.casingTexturePages[0][0-63] - Gregtech - * Textures.BlockIcons.casingTexturePages[0][64-127] - GT++ Textures.BlockIcons.casingTexturePages[1][0-127] - - * Gregtech Textures.BlockIcons.casingTexturePages[2][0-127] - Free Textures.BlockIcons.casingTexturePages[3][0-127] - * - Free Textures.BlockIcons.casingTexturePages[4][0-127] - Free Textures.BlockIcons.casingTexturePages[5][0-127] - - * Free Textures.BlockIcons.casingTexturePages[6][0-127] - Free Textures.BlockIcons.casingTexturePages[7][0-127] - - * TecTech Textures.BlockIcons.casingTexturePages[8][0-127] - TecTech - */ - public GT_Block_Casings1() { - super(GT_Item_Casings1.class, "gt.blockcasings", GT_Material_Casings.INSTANCE, 16); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "ULV Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "LV Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "MV Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "HV Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "EV Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "IV Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "LuV Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "ZPM Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "UV Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "UHV Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Bronze Plated Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Heat Proof Machine Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".12.name", "Dimensionally Transcendent Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Dimensional Injection Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Dimensional Bridge"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Superconducting Coil Block"); - ItemList.Casing_ULV.set(new ItemStack(this, 1, 0)); - ItemList.Casing_LV.set(new ItemStack(this, 1, 1)); - ItemList.Casing_MV.set(new ItemStack(this, 1, 2)); - ItemList.Casing_HV.set(new ItemStack(this, 1, 3)); - ItemList.Casing_EV.set(new ItemStack(this, 1, 4)); - ItemList.Casing_IV.set(new ItemStack(this, 1, 5)); - ItemList.Casing_LuV.set(new ItemStack(this, 1, 6)); - ItemList.Casing_ZPM.set(new ItemStack(this, 1, 7)); - ItemList.Casing_UV.set(new ItemStack(this, 1, 8)); - ItemList.Casing_MAX.set(new ItemStack(this, 1, 9)); - ItemList.Casing_BronzePlatedBricks.set(new ItemStack(this, 1, 10)); - ItemList.Casing_HeatProof.set(new ItemStack(this, 1, 11)); - ItemList.Casing_Dim_Trans.set(new ItemStack(this, 1, 12)); - ItemList.Casing_Dim_Injector.set(new ItemStack(this, 1, 13)); - ItemList.Casing_Dim_Bridge.set(new ItemStack(this, 1, 14)); - ItemList.Casing_Coil_Superconductor.set(new ItemStack(this, 1, 15)); - } - - @Override - public int getTextureIndex(int aMeta) { - return aMeta; - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - if ((aMeta >= 0) && (aMeta < 16)) { - switch (aMeta) { - case 10 -> { - return Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS.getIcon(); - } - case 11 -> { - return Textures.BlockIcons.MACHINE_HEATPROOFCASING.getIcon(); - } - case 12 -> { - return Textures.BlockIcons.MACHINE_DIM_TRANS_CASING.getIcon(); - } - case 13 -> { - return Textures.BlockIcons.MACHINE_DIM_INJECTOR.getIcon(); - } - case 14 -> { - return Textures.BlockIcons.MACHINE_DIM_BRIDGE.getIcon(); - } - case 15 -> { - return Textures.BlockIcons.MACHINE_COIL_SUPERCONDUCTOR.getIcon(); - } - } - if (ordinalSide == 0) { - return Textures.BlockIcons.MACHINECASINGS_BOTTOM[aMeta].getIcon(); - } - if (ordinalSide == 1) { - return Textures.BlockIcons.MACHINECASINGS_TOP[aMeta].getIcon(); - } - return Textures.BlockIcons.MACHINECASINGS_SIDE[aMeta].getIcon(); - } - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - } - - @Override - public int colorMultiplier(IBlockAccess aWorld, int aX, int aY, int aZ) { - return aWorld.getBlockMetadata(aX, aY, aZ) > 9 ? super.colorMultiplier(aWorld, aX, aY, aZ) - : gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[0] << 16 | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[1] << 8 - | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[2]; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings10.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings10.java deleted file mode 100644 index 1a0902da97..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings10.java +++ /dev/null @@ -1,76 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Block_Casings10 extends GT_Block_Casings_Abstract { - - public GT_Block_Casings10() { - super(GT_Item_Casings10.class, "gt.blockcasings10", GT_Material_Casings.INSTANCE, 16); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "MagTech Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Laser Containment Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Quark Exclusion Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Pressure Containment Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Electric Compressor Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Compression Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Neutronium Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Active Neutronium Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Neutronium Stabilization Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Coolant Duct"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Heating Duct"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".11.name", "Extreme Density Space-Bending Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".12.name", "Background Radiation Absorbent Casing"); - - ItemList.Casing_Electromagnetic_Separator.set(new ItemStack(this, 1, 0)); - ItemList.Casing_Laser.set(new ItemStack(this, 1, 1)); - ItemList.BlockQuarkContainmentCasing.set(new ItemStack(this, 1, 2)); - ItemList.Casing_Autoclave.set(new ItemStack(this, 1, 3)); - ItemList.Compressor_Casing.set(new ItemStack(this, 1, 4)); - ItemList.Compressor_Pipe_Casing.set(new ItemStack(this, 1, 5)); - ItemList.Neutronium_Casing.set(new ItemStack(this, 1, 6)); - ItemList.Neutronium_Active_Casing.set(new ItemStack(this, 1, 7)); - ItemList.Neutronium_Stable_Casing.set(new ItemStack(this, 1, 8)); - ItemList.Coolant_Duct_Casing.set(new ItemStack(this, 1, 9)); - ItemList.Heating_Duct_Casing.set(new ItemStack(this, 1, 10)); - ItemList.Extreme_Density_Casing.set(new ItemStack(this, 1, 11)); - ItemList.Background_Radiation_Casing.set(new ItemStack(this, 1, 12)); - } - - @Override - public int getTextureIndex(int aMeta) { - return (16 << 7) | (aMeta + 48); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int ordinalSide, int aMeta) { - return switch (aMeta) { - case 0 -> Textures.BlockIcons.MACHINE_CASING_EMS.getIcon(); - case 1 -> Textures.BlockIcons.MACHINE_CASING_LASER.getIcon(); - case 2 -> Textures.BlockIcons.BLOCK_QUARK_CONTAINMENT_CASING.getIcon(); - case 3 -> Textures.BlockIcons.MACHINE_CASING_AUTOCLAVE.getIcon(); - case 4 -> Textures.BlockIcons.COMPRESSOR_CASING.getIcon(); - case 5 -> Textures.BlockIcons.COMPRESSOR_PIPE_CASING.getIcon(); - case 6 -> Textures.BlockIcons.NEUTRONIUM_CASING.getIcon(); - case 7 -> Textures.BlockIcons.NEUTRONIUM_ACTIVE_CASING.getIcon(); - case 8 -> Textures.BlockIcons.NEUTRONIUM_STABLE_CASING.getIcon(); - case 9 -> Textures.BlockIcons.MACHINE_CASING_PIPE_TUNGSTENSTEEL.getIcon(); - case 10 -> Textures.BlockIcons.MACHINE_CASING_PIPE_BRONZE.getIcon(); - case 11 -> Textures.BlockIcons.EXTREME_DENSITY_CASING.getIcon(); - case 12 -> Textures.BlockIcons.RADIATION_ABSORBENT_CASING.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); - }; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings11.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings11.java deleted file mode 100644 index b4ec07ab70..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings11.java +++ /dev/null @@ -1,58 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Block_Casings11 extends GT_Block_Casings_Abstract { - - public GT_Block_Casings11() { - super(GT_Item_Casings11.class, "gt.blockcasings11", GT_Material_Casings.INSTANCE, 16); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Tin Item Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Brass Item Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Electrum Item Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Platinum Item Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Osmium Item Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Quantium Item Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Fluxed Electrum Item Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Black Plutonium Item Pipe Casing"); - - ItemList.Casing_Item_Pipe_Tin.set(new ItemStack(this, 1, 0)); - ItemList.Casing_Item_Pipe_Brass.set(new ItemStack(this, 1, 1)); - ItemList.Casing_Item_Pipe_Electrum.set(new ItemStack(this, 1, 2)); - ItemList.Casing_Item_Pipe_Platinum.set(new ItemStack(this, 1, 3)); - ItemList.Casing_Item_Pipe_Osmium.set(new ItemStack(this, 1, 4)); - ItemList.Casing_Item_Pipe_Quantium.set(new ItemStack(this, 1, 5)); - ItemList.Casing_Item_Pipe_Fluxed_Electrum.set(new ItemStack(this, 1, 6)); - ItemList.Casing_Item_Pipe_Black_Plutonium.set(new ItemStack(this, 1, 7)); - } - - @Override - public int getTextureIndex(int aMeta) { - return (16 << 7) | (aMeta + 64); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int ordinalSide, int aMeta) { - return switch (aMeta) { - case 1 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_BRASS.getIcon(); - case 2 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_ELECTRUM.getIcon(); - case 3 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_PLATINUM.getIcon(); - case 4 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_OSMIUM.getIcon(); - case 5 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_QUANTIUM.getIcon(); - case 6 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_FLUXED_ELECTRUM.getIcon(); - case 7 -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_BLACK_PLUTONIUM.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_ITEM_PIPE_TIN.getIcon(); - }; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings2.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings2.java deleted file mode 100644 index f1fbc30236..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings2.java +++ /dev/null @@ -1,102 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Block_Casings2 extends GT_Block_Casings_Abstract { - - public GT_Block_Casings2() { - super(GT_Item_Casings2.class, "gt.blockcasings2", GT_Material_Casings.INSTANCE, 96); - // Special handler for Pyrolyse Oven Casing on hatches... - Textures.BlockIcons.casingTexturePages[0][22] = TextureFactory.of( - Block.getBlockFromItem( - ItemList.Casing_ULV.get(1) - .getItem()), - 0, - ForgeDirection.UNKNOWN, - Dyes.MACHINE_METAL.mRGBa); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Solid Steel Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Frost Proof Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Bronze Gear Box Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Steel Gear Box Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Titanium Gear Box Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Assembling Line Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Processor Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Data Drive Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Containment Field Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Assembler Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Pump Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Motor Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Bronze Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Steel Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Titanium Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Tungstensteel Pipe Casing"); - ItemList.Casing_SolidSteel.set(new ItemStack(this, 1, 0)); - ItemList.Casing_FrostProof.set(new ItemStack(this, 1, 1)); - ItemList.Casing_Gearbox_Bronze.set(new ItemStack(this, 1, 2)); - ItemList.Casing_Gearbox_Steel.set(new ItemStack(this, 1, 3)); - ItemList.Casing_Gearbox_Titanium.set(new ItemStack(this, 1, 4)); - ItemList.Casing_Gearbox_TungstenSteel.set(new ItemStack(this, 1, 5)); - ItemList.Casing_Processor.set(new ItemStack(this, 1, 6)); - ItemList.Casing_DataDrive.set(new ItemStack(this, 1, 7)); - ItemList.Casing_ContainmentField.set(new ItemStack(this, 1, 8)); - ItemList.Casing_Assembler.set(new ItemStack(this, 1, 9)); - ItemList.Casing_Pump.set(new ItemStack(this, 1, 10)); - ItemList.Casing_Motor.set(new ItemStack(this, 1, 11)); - ItemList.Casing_Pipe_Bronze.set(new ItemStack(this, 1, 12)); - ItemList.Casing_Pipe_Steel.set(new ItemStack(this, 1, 13)); - ItemList.Casing_Pipe_Titanium.set(new ItemStack(this, 1, 14)); - ItemList.Casing_Pipe_TungstenSteel.set(new ItemStack(this, 1, 15)); - } - - @Override - public int getTextureIndex(int aMeta) { - return aMeta == 6 ? ((1 << 7) + 96) : aMeta + 16; - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - return switch (aMeta) { - case 0 -> Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - case 1 -> Textures.BlockIcons.MACHINE_CASING_FROST_PROOF.getIcon(); - case 2 -> Textures.BlockIcons.MACHINE_CASING_GEARBOX_BRONZE.getIcon(); - case 3 -> Textures.BlockIcons.MACHINE_CASING_GEARBOX_STEEL.getIcon(); - case 4 -> Textures.BlockIcons.MACHINE_CASING_GEARBOX_TITANIUM.getIcon(); - case 5 -> Textures.BlockIcons.MACHINE_CASING_GEARBOX_TUNGSTENSTEEL.getIcon(); - case 6 -> Textures.BlockIcons.MACHINE_CASING_PROCESSOR.getIcon(); - case 7 -> Textures.BlockIcons.MACHINE_CASING_DATA_DRIVE.getIcon(); - case 8 -> Textures.BlockIcons.MACHINE_CASING_CONTAINMENT_FIELD.getIcon(); - case 9 -> Textures.BlockIcons.MACHINE_CASING_ASSEMBLER.getIcon(); - case 10 -> Textures.BlockIcons.MACHINE_CASING_PUMP.getIcon(); - case 11 -> Textures.BlockIcons.MACHINE_CASING_MOTOR.getIcon(); - case 12 -> Textures.BlockIcons.MACHINE_CASING_PIPE_BRONZE.getIcon(); - case 13 -> Textures.BlockIcons.MACHINE_CASING_PIPE_STEEL.getIcon(); - case 14 -> Textures.BlockIcons.MACHINE_CASING_PIPE_TITANIUM.getIcon(); - case 15 -> Textures.BlockIcons.MACHINE_CASING_PIPE_TUNGSTENSTEEL.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - }; - } - - @Override - public float getExplosionResistance(Entity aTNT, World aWorld, int aX, int aY, int aZ, double eX, double eY, - double eZ) { - return aWorld.getBlockMetadata(aX, aY, aZ) == 8 ? Blocks.bedrock.getExplosionResistance(aTNT) - : super.getExplosionResistance(aTNT, aWorld, aX, aY, aZ, eX, eY, eZ); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings3.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings3.java deleted file mode 100644 index ada77814c8..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings3.java +++ /dev/null @@ -1,82 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Block_Casings3 extends GT_Block_Casings_Abstract { - - public GT_Block_Casings3() { - super(GT_Item_Casings3.class, "gt.blockcasings3", GT_Material_Casings.INSTANCE, 16); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Yellow Stripes Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Yellow Stripes Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Radioactive Hazard Sign Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Bio Hazard Sign Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Explosion Hazard Sign Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Fire Hazard Sign Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Acid Hazard Sign Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Magic Hazard Sign Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Frost Hazard Sign Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Noise Hazard Sign Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Grate Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Filter Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Radiation Proof Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Bronze Firebox Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Steel Firebox Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Tungstensteel Firebox Casing"); - ItemList.Casing_Stripes_A.set(new ItemStack(this, 1, 0)); - ItemList.Casing_Stripes_B.set(new ItemStack(this, 1, 1)); - ItemList.Casing_RadioactiveHazard.set(new ItemStack(this, 1, 2)); - ItemList.Casing_BioHazard.set(new ItemStack(this, 1, 3)); - ItemList.Casing_ExplosionHazard.set(new ItemStack(this, 1, 4)); - ItemList.Casing_FireHazard.set(new ItemStack(this, 1, 5)); - ItemList.Casing_AcidHazard.set(new ItemStack(this, 1, 6)); - ItemList.Casing_MagicHazard.set(new ItemStack(this, 1, 7)); - ItemList.Casing_FrostHazard.set(new ItemStack(this, 1, 8)); - ItemList.Casing_NoiseHazard.set(new ItemStack(this, 1, 9)); - ItemList.Casing_Grate.set(new ItemStack(this, 1, 10)); - ItemList.Casing_Vent.set(new ItemStack(this, 1, 11)); - ItemList.Casing_RadiationProof.set(new ItemStack(this, 1, 12)); - ItemList.Casing_Firebox_Bronze.set(new ItemStack(this, 1, 13)); - ItemList.Casing_Firebox_Steel.set(new ItemStack(this, 1, 14)); - ItemList.Casing_Firebox_TungstenSteel.set(new ItemStack(this, 1, 15)); - } - - @Override - public int getTextureIndex(int aMeta) { - return aMeta + 32; - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - return switch (aMeta) { - case 0 -> Textures.BlockIcons.MACHINE_CASING_STRIPES_A.getIcon(); - case 1 -> Textures.BlockIcons.MACHINE_CASING_STRIPES_B.getIcon(); - case 2 -> Textures.BlockIcons.MACHINE_CASING_RADIOACTIVEHAZARD.getIcon(); - case 3 -> Textures.BlockIcons.MACHINE_CASING_BIOHAZARD.getIcon(); - case 4 -> Textures.BlockIcons.MACHINE_CASING_EXPLOSIONHAZARD.getIcon(); - case 5 -> Textures.BlockIcons.MACHINE_CASING_FIREHAZARD.getIcon(); - case 6 -> Textures.BlockIcons.MACHINE_CASING_ACIDHAZARD.getIcon(); - case 7 -> Textures.BlockIcons.MACHINE_CASING_MAGICHAZARD.getIcon(); - case 8 -> Textures.BlockIcons.MACHINE_CASING_FROSTHAZARD.getIcon(); - case 9 -> Textures.BlockIcons.MACHINE_CASING_NOISEHAZARD.getIcon(); - case 10 -> Textures.BlockIcons.MACHINE_CASING_GRATE.getIcon(); - case 11 -> Textures.BlockIcons.MACHINE_CASING_VENT.getIcon(); - case 12 -> Textures.BlockIcons.MACHINE_CASING_RADIATIONPROOF.getIcon(); - case 13 -> ordinalSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_BRONZE.getIcon() - : Textures.BlockIcons.MACHINE_BRONZEPLATEDBRICKS.getIcon(); - case 14 -> ordinalSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_STEEL.getIcon() - : Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - case 15 -> ordinalSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_TUNGSTENSTEEL.getIcon() - : Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - }; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java deleted file mode 100644 index 77f36a4523..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings4.java +++ /dev/null @@ -1,239 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_RenderingWorld; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Block_Casings4 extends GT_Block_Casings_Abstract { - - /** - * This mapping is used to look up which texture should be used to render the connected texture for fusion casings. - *

- * This mapping is computed from that giant if ladder from #getIcon in commit - * da3421547afadc49938b5b6a7f9a9679afa1d570 The exact meaning of these numbers are like black magic. Read the - * original getIcon implementation to understand why it is 0, 1, etc, if that if ladder is even intelligible. - */ - private static final int[][] mapping = new int[][] { - { 7, 7, 7, 7, 0, 7, 0, 7, 1, 7, 1, 7, 8, 7, 8, 7, 0, 7, 0, 7, 0, 7, 0, 7, 9, 7, 9, 7, 3, 7, 3, 7, 1, 7, 1, 7, - 11, 7, 11, 7, 1, 7, 1, 7, 2, 7, 2, 7, 10, 7, 10, 7, 5, 7, 5, 7, 4, 7, 4, 7, 6, 7, 6, 7 }, - { 7, 7, 7, 7, 0, 0, 7, 7, 1, 1, 7, 7, 8, 8, 7, 7, 0, 0, 7, 7, 0, 0, 7, 7, 9, 9, 7, 7, 3, 3, 7, 7, 1, 1, 7, 7, - 11, 11, 7, 7, 1, 1, 7, 7, 2, 2, 7, 7, 10, 10, 7, 7, 5, 5, 7, 7, 4, 4, 7, 7, 6, 6, 7, 7 }, - { 7, 1, 1, 1, 0, 9, 10, 4, 7, 1, 1, 1, 0, 9, 10, 4, 0, 8, 11, 2, 0, 3, 5, 6, 0, 8, 11, 2, 0, 3, 5, 6, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 }, - { 7, 1, 1, 1, 0, 8, 11, 2, 7, 7, 7, 7, 7, 7, 7, 7, 0, 9, 10, 4, 0, 3, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 1, 1, 1, - 0, 8, 11, 2, 7, 7, 7, 7, 7, 7, 7, 7, 0, 9, 10, 4, 0, 3, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7 }, - { 7, 1, 1, 1, 7, 1, 1, 1, 0, 8, 11, 2, 0, 8, 11, 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0, 9, 10, 4, - 0, 9, 10, 4, 0, 3, 5, 6, 0, 3, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 }, - { 7, 1, 1, 1, 7, 7, 7, 7, 0, 9, 10, 4, 7, 7, 7, 7, 7, 1, 1, 1, 7, 7, 7, 7, 0, 9, 10, 4, 7, 7, 7, 7, 0, 8, 11, 2, - 7, 7, 7, 7, 0, 3, 5, 6, 7, 7, 7, 7, 0, 8, 11, 2, 7, 7, 7, 7, 0, 3, 5, 6, 7, 7, 7, 7 }, }; - - public static boolean mConnectedMachineTextures = true; - - public GT_Block_Casings4() { - super(GT_Item_Casings4.class, "gt.blockcasings4", GT_Material_Casings.INSTANCE, 16); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".0.name", "Robust Tungstensteel Machine Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".1.name", "Clean Stainless Steel Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Stable Titanium Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Titanium Firebox Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Fusion Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Fusion Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Fusion Machine Casing MK II"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Turbine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Stainless Steel Turbine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Titanium Turbine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Tungstensteel Turbine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Engine Intake Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Mining Osmiridium Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Firebricks"); - - ItemList.Casing_RobustTungstenSteel.set(new ItemStack(this, 1, 0)); - ItemList.Casing_CleanStainlessSteel.set(new ItemStack(this, 1, 1)); - ItemList.Casing_StableTitanium.set(new ItemStack(this, 1, 2)); - ItemList.Casing_Firebox_Titanium.set(new ItemStack(this, 1, 3)); - ItemList.Casing_Fusion.set(new ItemStack(this, 1, 6)); - ItemList.Casing_Fusion_Coil.set(new ItemStack(this, 1, 7)); - ItemList.Casing_Fusion2.set(new ItemStack(this, 1, 8)); - ItemList.Casing_Turbine.set(new ItemStack(this, 1, 9)); - ItemList.Casing_Turbine1.set(new ItemStack(this, 1, 10)); - ItemList.Casing_Turbine2.set(new ItemStack(this, 1, 11)); - ItemList.Casing_Turbine3.set(new ItemStack(this, 1, 12)); - ItemList.Casing_EngineIntake.set(new ItemStack(this, 1, 13)); - ItemList.Casing_MiningOsmiridium.set(new ItemStack(this, 1, 14)); - ItemList.Casing_Firebricks.set(new ItemStack(this, 1, 15)); - - GT_Mod.gregtechproxy.mCTMBlockCache.put(this, (byte) 6, true); - GT_Mod.gregtechproxy.mCTMBlockCache.put(this, (byte) 8, true); - } - - @Override - public int getTextureIndex(int aMeta) { - return aMeta + 48; - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - return switch (aMeta) { - case 0 -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); - case 1 -> Textures.BlockIcons.MACHINE_CASING_CLEAN_STAINLESSSTEEL.getIcon(); - case 2 -> Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getIcon(); - case 3 -> ordinalSide > 1 ? Textures.BlockIcons.MACHINE_CASING_FIREBOX_TITANIUM.getIcon() - : Textures.BlockIcons.MACHINE_CASING_STABLE_TITANIUM.getIcon(); - case 4 -> - // Do not overwrite! - Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW.getIcon(); - case 5 -> - // Do not overwrite! - Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS.getIcon(); - case 6 -> Textures.BlockIcons.MACHINE_CASING_FUSION.getIcon(); - case 7 -> Textures.BlockIcons.MACHINE_CASING_FUSION_COIL.getIcon(); - case 8 -> Textures.BlockIcons.MACHINE_CASING_FUSION_2.getIcon(); - case 9 -> Textures.BlockIcons.MACHINE_CASING_TURBINE.getIcon(); - case 10 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_STAINLESSSTEEL.getIcon(); - case 11 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TITANIUM.getIcon(); - case 12 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TUNGSTENSTEEL.getIcon(); - case 13 -> Textures.BlockIcons.MACHINE_CASING_ENGINE_INTAKE.getIcon(); - case 14 -> Textures.BlockIcons.MACHINE_CASING_MINING_OSMIRIDIUM.getIcon(); - case 15 -> Textures.BlockIcons.MACHINE_CASING_DENSEBRICKS.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - }; - } - - @Deprecated - public IIcon getTurbineCasing(int meta, int iconIndex, boolean active, boolean hasTurbine) { - return switch (meta) { - case 10 -> active ? Textures.BlockIcons.TURBINE_ACTIVE1[iconIndex].getIcon() - : hasTurbine ? Textures.BlockIcons.TURBINE1[iconIndex].getIcon() - : Textures.BlockIcons.TURBINE_EMPTY1[iconIndex].getIcon(); - case 11 -> active ? Textures.BlockIcons.TURBINE_ACTIVE2[iconIndex].getIcon() - : hasTurbine ? Textures.BlockIcons.TURBINE2[iconIndex].getIcon() - : Textures.BlockIcons.TURBINE_EMPTY2[iconIndex].getIcon(); - case 12 -> active ? Textures.BlockIcons.TURBINE_ACTIVE3[iconIndex].getIcon() - : hasTurbine ? Textures.BlockIcons.TURBINE3[iconIndex].getIcon() - : Textures.BlockIcons.TURBINE_EMPTY3[iconIndex].getIcon(); - default -> active ? Textures.BlockIcons.TURBINE_ACTIVE[iconIndex].getIcon() - : hasTurbine ? Textures.BlockIcons.TURBINE[iconIndex].getIcon() - : Textures.BlockIcons.TURBINE_EMPTY[iconIndex].getIcon(); - }; - } - - private static int isTurbineControllerWithSide(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (!(tTileEntity instanceof IGregTechTileEntity tTile)) return 0; - if (tTile.getMetaTileEntity() instanceof GT_MetaTileEntity_LargeTurbine turbine && tTile.getFrontFacing() - .ordinal() == ordinalSide) { - if (turbine.isNewStyleRendering()) return 0; - if (tTile.isActive()) return 1; - return turbine.hasTurbine() ? 2 : 3; - } - return 0; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { - aWorld = GT_RenderingWorld.getInstance(aWorld); - int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); - if (tMeta != 6 && tMeta != 8 && tMeta != 9 && tMeta != 10 && tMeta != 11 && tMeta != 12 - || !mConnectedMachineTextures) { - return getIcon(ordinalSide, tMeta); - } - // noinspection ConstantValue // tMeta < 13 should stay because mConnectedMachineTextures can be changed - if (tMeta > 8 && tMeta < 13) { - int tInvertLeftRightMod = ordinalSide % 2 * 2 - 1; - switch (ordinalSide / 2) { - case 0 -> { - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - if (i == 0 && j == 0) continue; - int tState; - if ((tState = isTurbineControllerWithSide( - aWorld, - xCoord + j, - yCoord, - zCoord + i, - ordinalSide)) != 0) { - return getTurbineCasing(tMeta, 4 - i * 3 - j, tState == 1, tState == 2); - } - } - } - } - case 1 -> { - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - if (i == 0 && j == 0) continue; - int tState; - if ((tState = isTurbineControllerWithSide( - aWorld, - xCoord + j, - yCoord + i, - zCoord, - ordinalSide)) != 0) { - return getTurbineCasing( - tMeta, - 4 + i * 3 - j * tInvertLeftRightMod, - tState == 1, - tState == 2); - } - } - } - } - case 2 -> { - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - if (i == 0 && j == 0) continue; - int tState; - if ((tState = isTurbineControllerWithSide( - aWorld, - xCoord, - yCoord + i, - zCoord + j, - ordinalSide)) != 0) { - return getTurbineCasing( - tMeta, - 4 + i * 3 + j * tInvertLeftRightMod, - tState == 1, - tState == 2); - } - } - } - } - } - return switch (tMeta) { - case 10 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_STAINLESSSTEEL.getIcon(); - case 11 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TITANIUM.getIcon(); - case 12 -> Textures.BlockIcons.MACHINE_CASING_TURBINE_TUNGSTENSTEEL.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - }; - } - int tStartIndex = tMeta == 6 ? 1 : 13; - int tIndexIntoMapping = 0; - if (isSameBlock(aWorld, xCoord, yCoord - 1, zCoord, tMeta)) tIndexIntoMapping |= 1; - if (isSameBlock(aWorld, xCoord, yCoord + 1, zCoord, tMeta)) tIndexIntoMapping |= 1 << 1; - if (isSameBlock(aWorld, xCoord + 1, yCoord, zCoord, tMeta)) tIndexIntoMapping |= 1 << 2; - if (isSameBlock(aWorld, xCoord, yCoord, zCoord + 1, tMeta)) tIndexIntoMapping |= 1 << 3; - if (isSameBlock(aWorld, xCoord - 1, yCoord, zCoord, tMeta)) tIndexIntoMapping |= 1 << 4; - if (isSameBlock(aWorld, xCoord, yCoord, zCoord - 1, tMeta)) tIndexIntoMapping |= 1 << 5; - return Textures.BlockIcons.CONNECTED_HULLS[tStartIndex + mapping[ordinalSide][tIndexIntoMapping]].getIcon(); - } - - private boolean isSameBlock(IBlockAccess aWorld, int aX, int aY, int aZ, int aMeta) { - return aWorld.getBlock(aX, aY, aZ) == this && aWorld.getBlockMetadata(aX, aY, aZ) == aMeta; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings5.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings5.java deleted file mode 100644 index 0cb1934dec..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings5.java +++ /dev/null @@ -1,161 +0,0 @@ -package gregtech.common.blocks; - -import static gregtech.api.enums.HeatingCoilLevel.EV; -import static gregtech.api.enums.HeatingCoilLevel.HV; -import static gregtech.api.enums.HeatingCoilLevel.IV; -import static gregtech.api.enums.HeatingCoilLevel.LV; -import static gregtech.api.enums.HeatingCoilLevel.LuV; -import static gregtech.api.enums.HeatingCoilLevel.MAX; -import static gregtech.api.enums.HeatingCoilLevel.MV; -import static gregtech.api.enums.HeatingCoilLevel.None; -import static gregtech.api.enums.HeatingCoilLevel.UEV; -import static gregtech.api.enums.HeatingCoilLevel.UHV; -import static gregtech.api.enums.HeatingCoilLevel.UIV; -import static gregtech.api.enums.HeatingCoilLevel.UMV; -import static gregtech.api.enums.HeatingCoilLevel.UV; -import static gregtech.api.enums.HeatingCoilLevel.UXV; -import static gregtech.api.enums.HeatingCoilLevel.ZPM; - -import java.util.function.Consumer; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IHeatingCoil; -import gregtech.api.util.GT_LanguageManager; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Block_Casings5 extends GT_Block_Casings_Abstract implements IHeatingCoil { - - public GT_Block_Casings5() { - super(GT_Item_Casings5.class, "gt.blockcasings5", GT_Material_Casings.INSTANCE, 16); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Cupronickel Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Kanthal Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Nichrome Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "TPV-Alloy Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "HSS-G Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Naquadah Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Naquadah Alloy Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Electrum Flux Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Awakened Draconium Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "HSS-S Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Trinium Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Infinity Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Hypogen Coil Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Eternal Coil Block"); - - ItemList.Casing_Coil_Cupronickel.set(new ItemStack(this, 1, 0)); - ItemList.Casing_Coil_Kanthal.set(new ItemStack(this, 1, 1)); - ItemList.Casing_Coil_Nichrome.set(new ItemStack(this, 1, 2)); - ItemList.Casing_Coil_TungstenSteel.set(new ItemStack(this, 1, 3)); - ItemList.Casing_Coil_HSSG.set(new ItemStack(this, 1, 4)); - ItemList.Casing_Coil_Naquadah.set(new ItemStack(this, 1, 5)); - ItemList.Casing_Coil_NaquadahAlloy.set(new ItemStack(this, 1, 6)); - ItemList.Casing_Coil_ElectrumFlux.set(new ItemStack(this, 1, 7)); - ItemList.Casing_Coil_AwakenedDraconium.set(new ItemStack(this, 1, 8)); - ItemList.Casing_Coil_HSSS.set(new ItemStack(this, 1, 9)); - ItemList.Casing_Coil_Trinium.set(new ItemStack(this, 1, 10)); - ItemList.Casing_Coil_Infinity.set(new ItemStack(this, 1, 11)); - ItemList.Casing_Coil_Hypogen.set(new ItemStack(this, 1, 12)); - ItemList.Casing_Coil_Eternal.set(new ItemStack(this, 1, 13)); - ItemList.Casing_Shielded_Accelerator.set(new ItemStack(this, 1, 14)); - } - - @Override - public int getTextureIndex(int aMeta) { - return (1 << 7) | aMeta; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int ordinalSide, int aMeta) { - return switch (aMeta) { - case 0 -> Textures.BlockIcons.MACHINE_COIL_CUPRONICKEL.getIcon(); - case 1 -> Textures.BlockIcons.MACHINE_COIL_KANTHAL.getIcon(); - case 2 -> Textures.BlockIcons.MACHINE_COIL_NICHROME.getIcon(); - case 3 -> Textures.BlockIcons.MACHINE_COIL_TUNGSTENSTEEL.getIcon(); - case 4 -> Textures.BlockIcons.MACHINE_COIL_HSSG.getIcon(); - case 5 -> Textures.BlockIcons.MACHINE_COIL_NAQUADAH.getIcon(); - case 6 -> Textures.BlockIcons.MACHINE_COIL_NAQUADAHALLOY.getIcon(); - case 7 -> Textures.BlockIcons.MACHINE_COIL_ELECTRUMFLUX.getIcon(); - case 8 -> Textures.BlockIcons.MACHINE_COIL_AWAKENEDDRACONIUM.getIcon(); - case 9 -> Textures.BlockIcons.MACHINE_COIL_HSSS.getIcon(); - case 10 -> Textures.BlockIcons.MACHINE_COIL_TRINIUM.getIcon(); - case 11 -> Textures.BlockIcons.MACHINE_COIL_INFINITY.getIcon(); - case 12 -> Textures.BlockIcons.MACHINE_COIL_HYPOGEN.getIcon(); - case 13 -> Textures.BlockIcons.MACHINE_COIL_ETERNAL.getIcon(); - case 14 -> Textures.BlockIcons.MACHINE_CASING_SHIELDED_ACCELERATOR.getIcon(); - default -> Textures.BlockIcons.MACHINE_COIL_CUPRONICKEL.getIcon(); - }; - } - - /*--------------- COIL CHECK IMPL. ------------*/ - - public static HeatingCoilLevel getCoilHeatFromDamage(int meta) { - return switch (meta) { - case 0 -> LV; - case 1 -> MV; - case 2 -> HV; - case 3 -> EV; - case 4 -> IV; - case 5 -> ZPM; - case 6 -> UV; - case 7 -> UEV; - case 8 -> UIV; - case 9 -> LuV; - case 10 -> UHV; - case 11 -> UMV; - case 12 -> UXV; - case 13 -> MAX; - default -> None; - }; - } - - public static int getMetaFromCoilHeat(HeatingCoilLevel level) { - return switch (level) { - case LV -> 0; - case MV -> 1; - case HV -> 2; - case EV -> 3; - case IV -> 4; - case ZPM -> 5; - case UV -> 6; - case UEV -> 7; - case UIV -> 8; - case LuV -> 9; - case UHV -> 10; - case UMV -> 11; - case UXV -> 12; - case MAX -> 13; - default -> 0; - }; - } - - @Override - public HeatingCoilLevel getCoilHeat(int meta) { - getOnCoilCheck().accept(this); - return getCoilHeatFromDamage(meta); - } - - /*--------------- CALLBACK ------------*/ - - private Consumer callback = coil -> {}; - - @Override - public void setOnCoilCheck(Consumer callback) { - this.callback = callback; - } - - @Override - public Consumer getOnCoilCheck() { - return this.callback; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings6.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings6.java deleted file mode 100644 index 9bdbf256cc..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings6.java +++ /dev/null @@ -1,94 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Block_Casings6 extends GT_Block_Casings_Abstract { - - public GT_Block_Casings6() { - super(GT_Item_Casings6.class, "gt.blockcasings6", GT_Material_Casings.INSTANCE, 16); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Hermetic Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Hermetic Casing I"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Hermetic Casing II"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Hermetic Casing III"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Hermetic Casing IV"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Hermetic Casing V"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Hermetic Casing VI"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Hermetic Casing VII"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Hermetic Casing VIII"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Hermetic Casing IX"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Hermetic Casing X"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Hermetic Casing XI"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Hermetic Casing XII"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Hermetic Casing XIII"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Hermetic Casing XIV"); - - ItemList.Casing_Tank_0.set(new ItemStack(this, 1, 0)); - ItemList.Casing_Tank_1.set(new ItemStack(this, 1, 1)); - ItemList.Casing_Tank_2.set(new ItemStack(this, 1, 2)); - ItemList.Casing_Tank_3.set(new ItemStack(this, 1, 3)); - ItemList.Casing_Tank_4.set(new ItemStack(this, 1, 4)); - ItemList.Casing_Tank_5.set(new ItemStack(this, 1, 5)); - ItemList.Casing_Tank_6.set(new ItemStack(this, 1, 6)); - ItemList.Casing_Tank_7.set(new ItemStack(this, 1, 7)); - ItemList.Casing_Tank_8.set(new ItemStack(this, 1, 8)); - ItemList.Casing_Tank_9.set(new ItemStack(this, 1, 9)); - ItemList.Casing_Tank_10.set(new ItemStack(this, 1, 10)); - ItemList.Casing_Tank_11.set(new ItemStack(this, 1, 11)); - ItemList.Casing_Tank_12.set(new ItemStack(this, 1, 12)); - ItemList.Casing_Tank_13.set(new ItemStack(this, 1, 13)); - ItemList.Casing_Tank_14.set(new ItemStack(this, 1, 14)); - } - - @Override - public int getTextureIndex(int aMeta) { - return (8 << 7) | (aMeta + 112); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int ordinalSide, int aMeta) { - if (ordinalSide == 0) { - return Textures.BlockIcons.MACHINECASINGS_BOTTOM[aMeta].getIcon(); - } - if (ordinalSide == 1) { - return Textures.BlockIcons.MACHINECASINGS_TOP[aMeta].getIcon(); - } - return switch (aMeta) { - case 1 -> Textures.BlockIcons.MACHINE_CASING_TANK_1.getIcon(); - case 2 -> Textures.BlockIcons.MACHINE_CASING_TANK_2.getIcon(); - case 3 -> Textures.BlockIcons.MACHINE_CASING_TANK_3.getIcon(); - case 4 -> Textures.BlockIcons.MACHINE_CASING_TANK_4.getIcon(); - case 5 -> Textures.BlockIcons.MACHINE_CASING_TANK_5.getIcon(); - case 6 -> Textures.BlockIcons.MACHINE_CASING_TANK_6.getIcon(); - case 7 -> Textures.BlockIcons.MACHINE_CASING_TANK_7.getIcon(); - case 8 -> Textures.BlockIcons.MACHINE_CASING_TANK_8.getIcon(); - case 9 -> Textures.BlockIcons.MACHINE_CASING_TANK_9.getIcon(); - case 10 -> Textures.BlockIcons.MACHINE_CASING_TANK_10.getIcon(); - case 11 -> Textures.BlockIcons.MACHINE_CASING_TANK_11.getIcon(); - case 12 -> Textures.BlockIcons.MACHINE_CASING_TANK_12.getIcon(); - case 13 -> Textures.BlockIcons.MACHINE_CASING_TANK_13.getIcon(); - case 14 -> Textures.BlockIcons.MACHINE_CASING_TANK_14.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_TANK_0.getIcon(); - }; - } - - @Override - public int colorMultiplier(IBlockAccess aWorld, int aX, int aY, int aZ) { - return gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[0] << 16 - | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[1] << 8 - | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[2]; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings8.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings8.java deleted file mode 100644 index 0baeea1411..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings8.java +++ /dev/null @@ -1,188 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_RenderingWorld; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Block_Casings8 extends GT_Block_Casings_Abstract { - - public static boolean mConnectedMachineTextures = true; - - // WATCH OUT FOR TEXTURE ID's - public GT_Block_Casings8() { - super(GT_Item_Casings8.class, "gt.blockcasings8", GT_Material_Casings.INSTANCE, 15); - /* - * DO NOT USE INDEX 15 ! USED HERE: https://github.com/GTNewHorizons/KubaTech/pull/101 - */ - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Chemically Inert Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "PTFE Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Mining Neutronium Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Mining Black Plutonium Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Extreme Engine Intake Casing"); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + ".5.name", - "Europium Reinforced Radiation Proof Machine Casing"); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + ".6.name", - "Advanced Rhodium Plated Palladium Machine Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".7.name", "Advanced Iridium Plated Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Magical Machine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "HSS-S Turbine Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Radiant Naquadah Alloy Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".11.name", "Basic Photolithographic Framework Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".12.name", "Reinforced Photolithographic Framework Casing"); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + ".13.name", - "Radiation Proof Photolithographic Framework Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Infinity Cooled Casing"); - - ItemList.Casing_Chemically_Inert.set(new ItemStack(this, 1, 0)); - ItemList.Casing_Pipe_Polytetrafluoroethylene.set(new ItemStack(this, 1, 1)); - ItemList.Casing_MiningNeutronium.set(new ItemStack(this, 1, 2)); - ItemList.Casing_MiningBlackPlutonium.set(new ItemStack(this, 1, 3)); - ItemList.Casing_ExtremeEngineIntake.set(new ItemStack(this, 1, 4)); - ItemList.Casing_AdvancedRadiationProof.set(new ItemStack(this, 1, 5)); - ItemList.Casing_Advanced_Rhodium_Palladium.set(new ItemStack(this, 1, 6)); - ItemList.Casing_Advanced_Iridium.set(new ItemStack(this, 1, 7)); - ItemList.Casing_Magical.set(new ItemStack(this, 1, 8)); - ItemList.Casing_TurbineGasAdvanced.set(new ItemStack(this, 1, 9)); - ItemList.RadiantNaquadahAlloyCasing.set(new ItemStack(this, 1, 10)); - ItemList.BasicPhotolithographicFrameworkCasing.set(new ItemStack(this, 1, 11)); - ItemList.ReinforcedPhotolithographicFrameworkCasing.set(new ItemStack(this, 1, 12)); - ItemList.RadiationProofPhotolithographicFrameworkCasing.set(new ItemStack(this, 1, 13)); - ItemList.InfinityCooledCasing.set(new ItemStack(this, 1, 14)); - } - - @Override - public int getTextureIndex(int aMeta) { - return (1 << 7) | (aMeta + 48); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int ordinalSide, int aMeta) { - return switch (aMeta) { - case 0 -> Textures.BlockIcons.MACHINE_CASING_CHEMICALLY_INERT.getIcon(); - case 1 -> Textures.BlockIcons.MACHINE_CASING_PIPE_POLYTETRAFLUOROETHYLENE.getIcon(); - case 2 -> Textures.BlockIcons.MACHINE_CASING_MINING_NEUTRONIUM.getIcon(); - case 3 -> Textures.BlockIcons.MACHINE_CASING_MINING_BLACKPLUTONIUM.getIcon(); - case 4 -> Textures.BlockIcons.MACHINE_CASING_EXTREME_ENGINE_INTAKE.getIcon(); // changed color in a - // terrible way - case 5 -> Textures.BlockIcons.MACHINE_CASING_ADVANCEDRADIATIONPROOF.getIcon(); - case 6 -> Textures.BlockIcons.MACHINE_CASING_RHODIUM_PALLADIUM.getIcon(); - case 7 -> Textures.BlockIcons.MACHINE_CASING_IRIDIUM.getIcon(); - case 8 -> Textures.BlockIcons.MACHINE_CASING_MAGICAL.getIcon(); - case 9 -> Textures.BlockIcons.MACHINE_CASING_ADVANCEDGAS.getIcon(); - case 10 -> Textures.BlockIcons.MACHINE_CASING_RADIANT_NAQUADAH_ALLOY.getIcon(); - case 11 -> Textures.BlockIcons.MACHINE_CASING_PCB_TIER_1.getIcon(); - case 12 -> Textures.BlockIcons.MACHINE_CASING_PCB_TIER_2.getIcon(); - case 13 -> Textures.BlockIcons.MACHINE_CASING_PCB_TIER_3.getIcon(); - case 14 -> Textures.BlockIcons.INFINITY_COOLED_CASING.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); - }; - } - - public IIcon getTurbineCasing(int meta, int iconIndex, boolean active, boolean hasTurbine) { - // noinspection SwitchStatementWithTooFewBranches // "if" is harder to edit - return switch (meta) { - case 9 -> active ? Textures.BlockIcons.TURBINE_ADVGASACTIVE[iconIndex].getIcon() - : hasTurbine ? Textures.BlockIcons.TURBINEADVGAS[iconIndex].getIcon() - : Textures.BlockIcons.TURBINE_ADVGASEMPTY[iconIndex].getIcon(); - default -> active ? Textures.BlockIcons.TURBINE_ACTIVE[iconIndex].getIcon() - : hasTurbine ? Textures.BlockIcons.TURBINE[iconIndex].getIcon() - : Textures.BlockIcons.TURBINE_EMPTY[iconIndex].getIcon(); - }; - } - - private static int isTurbineControllerWithSide(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (!(tTileEntity instanceof IGregTechTileEntity tTile)) return 0; - if (tTile.getMetaTileEntity() instanceof GT_MetaTileEntity_LargeTurbine turbine && tTile.getFrontFacing() - .ordinal() == ordinalSide) { - if (turbine.isNewStyleRendering()) return 0; - if (tTile.isActive()) return 1; - return turbine.hasTurbine() ? 2 : 3; - } - return 0; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { - aWorld = GT_RenderingWorld.getInstance(aWorld); - final int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); - - if (tMeta != 9 || !mConnectedMachineTextures) { - return getIcon(ordinalSide, tMeta); - } - - int tInvertLeftRightMod = ordinalSide % 2 * 2 - 1; - - switch (ordinalSide / 2) { - case 0 -> { - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - if (i == 0 && j == 0) continue; - int tState; - if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord, zCoord + i, ordinalSide)) - != 0) { - return getTurbineCasing(tMeta, 4 - i * 3 - j, tState == 1, tState == 2); - } - } - } - } - case 1 -> { - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - if (i == 0 && j == 0) continue; - int tState; - if ((tState = isTurbineControllerWithSide(aWorld, xCoord + j, yCoord + i, zCoord, ordinalSide)) - != 0) { - return getTurbineCasing( - tMeta, - 4 + i * 3 - j * tInvertLeftRightMod, - tState == 1, - tState == 2); - } - } - } - } - case 2 -> { - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - if (i == 0 && j == 0) continue; - int tState; - if ((tState = isTurbineControllerWithSide(aWorld, xCoord, yCoord + i, zCoord + j, ordinalSide)) - != 0) { - return getTurbineCasing( - tMeta, - 4 + i * 3 + j * tInvertLeftRightMod, - tState == 1, - tState == 2); - } - } - } - } - } - - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings9.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings9.java deleted file mode 100644 index 6f33cda013..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings9.java +++ /dev/null @@ -1,96 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Block_Casings9 extends GT_Block_Casings_Abstract { - - public GT_Block_Casings9() { - super(GT_Item_Casings9.class, "gt.blockcasings9", GT_Material_Casings.INSTANCE, 16); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "PBI Pipe Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Advanced Filter Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".1.tooltip", "Less than five 0.1μm particles per m^3"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Primitive Wooden Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".3.name", "Superplasticizer-Treated High Strength Concrete"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Sterile Water Plant Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".5.name", "Reinforced Sterile Water Plant Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Slick Sterile Flocculation Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".7.name", "Stabilized Naquadah Water Plant Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".8.name", "Inert Neutralization Water Plant Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Reactive Gas Containment Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Inert Filtration Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".11.name", "Heat-Resistant Trinium Plated Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".12.name", "Naquadria-Reinforced Water Plant Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".13.name", "High Energy Ultraviolet Emitter Casing"); - // placeholder name - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".14.name", "Particle Beam Guidance Pipe Casing"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".15.name", "Femtometer-Calibrated Particle Beam Casing"); - - ItemList.Casing_Pipe_Polybenzimidazole.set(new ItemStack(this, 1, 0)); - ItemList.Casing_Vent_T2.set(new ItemStack(this, 1, 1)); - ItemList.WoodenCasing.set(new ItemStack(this, 1, 2)); - ItemList.BlockIndustrialStrengthConcrete.set(new ItemStack(this, 1, 3)); - ItemList.BlockIndustrialWaterPlantCasing.set(new ItemStack(this, 1, 4)); - ItemList.BlockSterileWaterPlantCasing.set(new ItemStack(this, 1, 5)); - ItemList.BlockFlocculationCasing.set(new ItemStack(this, 1, 6)); - ItemList.BlockNaquadahReinforcedWaterPlantCasing.set(new ItemStack(this, 1, 7)); - ItemList.BlockExtremeCorrosionResistantCasing.set(new ItemStack(this, 1, 8)); - ItemList.BlockHighPressureResistantCasing.set(new ItemStack(this, 1, 9)); - ItemList.BlockOzoneCasing.set(new ItemStack(this, 1, 10)); - ItemList.BlockPlasmaHeatingCasing.set(new ItemStack(this, 1, 11)); - ItemList.BlockNaquadriaReinforcedWaterPlantCasing.set(new ItemStack(this, 1, 12)); - ItemList.BlockUltraVioletLaserEmitter.set(new ItemStack(this, 1, 13)); - ItemList.BlockQuarkPipe.set(new ItemStack(this, 1, 14)); - ItemList.BlockQuarkReleaseChamber.set(new ItemStack(this, 1, 15)); - } - - @Override - public int getTextureIndex(int aMeta) { - return (16 << 7) | (aMeta + 16); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int ordinalSide, int aMeta) { - return switch (aMeta) { - case 0 -> Textures.BlockIcons.MACHINE_CASING_PIPE_POLYBENZIMIDAZOLE.getIcon(); - case 1 -> Textures.BlockIcons.MACHINE_CASING_VENT_T2.getIcon(); - case 2 -> ordinalSide >= 2 ? Textures.BlockIcons.TEXTURE_METAL_PANEL_E.getIcon() - : Textures.BlockIcons.TEXTURE_METAL_PANEL_E_A.getIcon(); - case 3 -> Textures.BlockIcons.INDUSTRIAL_STRENGTH_CONCRETE.getIcon(); - case 4 -> Textures.BlockIcons.MACHINE_CASING_INDUSTRIAL_WATER_PLANT.getIcon(); - case 5 -> Textures.BlockIcons.WATER_PLANT_CONCRETE_CASING.getIcon(); - case 6 -> Textures.BlockIcons.MACHINE_CASING_FLOCCULATION.getIcon(); - case 7 -> Textures.BlockIcons.MACHINE_CASING_NAQUADAH_REINFORCED_WATER_PLANT.getIcon(); - case 8 -> Textures.BlockIcons.MACHINE_CASING_EXTREME_CORROSION_RESISTANT.getIcon(); - case 9 -> Textures.BlockIcons.MACHINE_CASING_HIGH_PRESSURE_RESISTANT.getIcon(); - case 10 -> Textures.BlockIcons.MACHINE_CASING_OZONE.getIcon(); - case 11 -> Textures.BlockIcons.MACHINE_CASING_PLASMA_HEATER.getIcon(); - case 12 -> Textures.BlockIcons.NAQUADRIA_REINFORCED_WATER_PLANT_CASING.getIcon(); - case 13 -> Textures.BlockIcons.UV_BACKLIGHT_STERILIZER_CASING.getIcon(); - case 14 -> Textures.BlockIcons.BLOCK_QUARK_PIPE.getIcon(); - case 15 -> Textures.BlockIcons.BLOCK_QUARK_RELEASE_CHAMBER.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); - }; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Casings_Abstract.java b/src/main/java/gregtech/common/blocks/GT_Block_Casings_Abstract.java deleted file mode 100644 index cfa51f8e99..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Casings_Abstract.java +++ /dev/null @@ -1,144 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -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.items.GT_Generic_Block; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; - -/** - * The base class for casings. Casings are the blocks that are mainly used to build multiblocks. - */ -public abstract class GT_Block_Casings_Abstract extends GT_Generic_Block - implements gregtech.api.interfaces.IHasIndexedTexture { - - public GT_Block_Casings_Abstract(Class aItemClass, String aName, Material aMaterial) { - super(aItemClass, aName, aMaterial); - setStepSound(soundTypeMetal); - setCreativeTab(GregTech_API.TAB_GREGTECH); - GregTech_API.registerMachineBlock(this, -1); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + 32767 + ".name", "Any Sub Block of this"); - } - - public GT_Block_Casings_Abstract(Class aItemClass, String aName, Material aMaterial, - int aMaxMeta) { - this(aItemClass, aName, aMaterial); - for (int i = 0; i < aMaxMeta; i++) { - Textures.BlockIcons.setCasingTextureForId(getTextureIndex(i), TextureFactory.of(this, i)); - } - } - - @Override - public String getHarvestTool(int aMeta) { - return "wrench"; - } - - @Override - public int getHarvestLevel(int aMeta) { - return 2; - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - return Blocks.iron_block.getBlockHardness(aWorld, aX, aY, aZ); - } - - @Override - public float getExplosionResistance(Entity aTNT) { - return Blocks.iron_block.getExplosionResistance(aTNT); - } - - @Override - protected boolean canSilkHarvest() { - return false; - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public String getUnlocalizedName() { - return this.mUnlocalizedName; - } - - @Override - public String getLocalizedName() { - return StatCollector.translateToLocal(this.mUnlocalizedName + ".name"); - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { - return true; - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - if (GregTech_API.isMachineBlock(this, aMetaData)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public int damageDropped(int metadata) { - return metadata; - } - - @Override - public int getDamageValue(World aWorld, int aX, int aY, int aZ) { - return aWorld.getBlockMetadata(aX, aY, aZ); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister aIconRegister) {} - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item aItem, CreativeTabs aCreativeTab, List aList) { - for (int i = 0; i < 16; i++) { - ItemStack aStack = new ItemStack(aItem, 1, i); - if (!aStack.getDisplayName() - .contains(".name")) aList.add(aStack); - } - } - - /** - * Provide a fallback to subclasses in addons. - */ - @Override - public int getTextureIndex(int aMeta) { - return Textures.BlockIcons.ERROR_TEXTURE_INDEX; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Concretes.java b/src/main/java/gregtech/common/blocks/GT_Block_Concretes.java deleted file mode 100644 index c7b7e2bb04..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Concretes.java +++ /dev/null @@ -1,83 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.IBlockOnWalkOver; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; - -public class GT_Block_Concretes extends GT_Block_Stones_Abstract implements IBlockOnWalkOver { - - public GT_Block_Concretes() { - super(GT_Item_Concretes.class, "gt.blockconcretes"); - setResistance(20.0F); - // this.slipperiness = 0.9F; - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Dark Concrete"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Dark Concrete Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Mossy Dark Concrete Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Dark Concrete Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Cracked Dark Concrete Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Mossy Dark Concrete Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Chiseled Dark Concrete"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Smooth Dark Concrete"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Light Concrete"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Light Concrete Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Mossy Light Concrete Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Light Concrete Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Cracked Light Concrete Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Mossy Light Concrete Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Chiseled Light Concrete"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Smooth Light Concrete"); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 0)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 1)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 2)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 3)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 4)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 5)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 6)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 7)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 8)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 9)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 10)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 11)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 12)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 13)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 14)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Concrete, new ItemStack(this, 1, 15)); - } - - @Override - public int getHarvestLevel(int aMeta) { - return 1; - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - return this.blockHardness = Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ); - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - if ((aMeta >= 0) && (aMeta < 16)) { - return gregtech.api.enums.Textures.BlockIcons.CONCRETES[aMeta].getIcon(); - } - return gregtech.api.enums.Textures.BlockIcons.CONCRETES[0].getIcon(); - } - - @Override - public void onWalkOver(EntityLivingBase aEntity, World aWorld, int aX, int aY, int aZ) { - if ((aEntity.motionX != 0 || aEntity.motionZ != 0) && !aEntity.isInWater() - && !aEntity.isWet() - && !aEntity.isSneaking()) { - double tSpeed = (aWorld.getBlock(aX, aY - 1, aZ).slipperiness >= 0.8 ? 1.5 : 1.2); - aEntity.motionX *= tSpeed; - aEntity.motionZ *= tSpeed; - } - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Drone.java b/src/main/java/gregtech/common/blocks/GT_Block_Drone.java deleted file mode 100644 index 81d1acc228..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Drone.java +++ /dev/null @@ -1,65 +0,0 @@ -package gregtech.common.blocks; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.common.tileentities.render.TileDrone; - -public class GT_Block_Drone extends Block { - - public GT_Block_Drone() { - super(Material.iron); - this.setResistance(20f); - this.setHardness(-1.0f); - this.setCreativeTab(GregTech_API.TAB_GREGTECH); - this.setBlockName("gt.dronerender"); - this.setLightLevel(100.0f); - GameRegistry.registerBlock(this, getUnlocalizedName()); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT"); - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean canRenderInPass(int a) { - return true; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public boolean hasTileEntity(int metadata) { - return true; - } - - @Override - public TileEntity createTileEntity(World world, int metadata) { - return new TileDrone(); - } - - @Override - public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { - return new ArrayList<>(); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_FrameBox.java b/src/main/java/gregtech/common/blocks/GT_Block_FrameBox.java deleted file mode 100644 index 76e3180d58..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_FrameBox.java +++ /dev/null @@ -1,446 +0,0 @@ -package gregtech.common.blocks; - -import static gregtech.api.enums.GT_Values.W; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.BaseTileEntity; -import gregtech.api.metatileentity.CoverableTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Frame; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import gregtech.common.render.GT_Renderer_Block; - -public class GT_Block_FrameBox extends BlockContainer { - - protected final String mUnlocalizedName; - - private static final String DOT_NAME = ".name"; - private static final String DOT_TOOLTIP = ".tooltip"; - - // We need to keep around a temporary TE to preserve this TE after breaking the block, so we can - // properly call getDrops() on it - private static final ThreadLocal mTemporaryTileEntity = new ThreadLocal<>(); - - public GT_Block_FrameBox() { - super(new GT_Material_Machines()); - this.mUnlocalizedName = "gt.blockframes"; - setBlockName(this.mUnlocalizedName); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + "." + W + ".name", "Any Sub Block of this one"); - - GameRegistry.registerBlock(this, GT_Item_Frames.class, getUnlocalizedName()); - - for (int meta = 1; meta < GregTech_API.sGeneratedMaterials.length; meta++) { - Materials material = GregTech_API.sGeneratedMaterials[meta]; - if (material != null && (material.mTypes & 0x02) != 0) { - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + "." + meta + DOT_NAME, - GT_LanguageManager.i18nPlaceholder ? getLocalizedNameFormat(material) : getLocalizedName(material)); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + "." + meta + DOT_TOOLTIP, material.getToolTip()); - } - } - } - - public ItemStack getStackForm(int amount, int meta) { - return new ItemStack(this, amount, meta); - } - - public String getLocalizedNameFormat(Materials aMaterial) { - return switch (aMaterial.mName) { - case "InfusedAir", "InfusedDull", "InfusedEarth", "InfusedEntropy", "InfusedFire", "InfusedOrder", "InfusedVis", "InfusedWater" -> "%material Infused Stone"; - case "Vermiculite", "Bentonite", "Kaolinite", "Talc", "BasalticMineralSand", "GraniticMineralSand", "GlauconiteSand", "CassiteriteSand", "GarnetSand", "QuartzSand", "Pitchblende", "FullersEarth" -> "%material"; - default -> "%material" + " Frame Box"; - }; - } - - @Override - public String getUnlocalizedName() { - return mUnlocalizedName; - } - - public String getLocalizedName(Materials aMaterial) { - return aMaterial.getDefaultLocalizedNameForItem(getLocalizedNameFormat(aMaterial)); - } - - private boolean isCover(ItemStack item) { - return GT_Utility.isStackInList(item, GregTech_API.sCovers.keySet()); - } - - private void createFrame(World worldIn, int x, int y, int z, BaseMetaPipeEntity baseMte) { - // Obtain metadata to grab proper material identifier - int meta = worldIn.getBlockMetadata(x, y, z); - Materials material = getMaterial(meta); - GT_MetaPipeEntity_Frame frame = new GT_MetaPipeEntity_Frame("GT_Frame_" + material, material); - baseMte.setMetaTileEntity(frame); - frame.setBaseMetaTileEntity(baseMte); - } - - private BaseMetaPipeEntity spawnFrameEntity(World worldIn, int x, int y, int z) { - // Spawn a TE frame box at this location, then apply the cover - BaseMetaPipeEntity newTileEntity = new BaseMetaPipeEntity(); - createFrame(worldIn, x, y, z, newTileEntity); - worldIn.setTileEntity(x, y, z, newTileEntity); - return newTileEntity; - } - - // Get the material that this frame box is made of - public static Materials getMaterial(int meta) { - return GregTech_API.sGeneratedMaterials[meta]; - } - - @Override - public boolean onBlockActivated(World worldIn, int x, int y, int z, EntityPlayer player, int side, float subX, - float subY, float subZ) { - // Get ForgeDirection from side identifier. - ForgeDirection direction = ForgeDirection.getOrientation(side); - // If this block already holds a TE, just forward the call - TileEntity te = worldIn.getTileEntity(x, y, z); - if (te instanceof BaseMetaPipeEntity baseTileEntity) { - // If this baseTileEntity has no MetaTileEntity associated with it, we need to create it - // This happens on world load for some reason - if (baseTileEntity.getMetaTileEntity() == null) { - createFrame(worldIn, x, y, z, baseTileEntity); - } - return baseTileEntity.onRightclick(player, direction, subX, subY, subZ); - } - - // If there was no TileEntity yet, we need to check if the player was holding a cover item and if so - // spawn a new frame box to apply the cover to - ItemStack item = player.getHeldItem(); - if (isCover(item)) { - BaseMetaPipeEntity newTileEntity = spawnFrameEntity(worldIn, x, y, z); - newTileEntity.onRightclick(player, direction, subX, subY, subZ); - return true; - } - - return false; - } - - @Override - public int getRenderType() { - if (GT_Renderer_Block.INSTANCE == null) { - return super.getRenderType(); - } - return GT_Renderer_Block.mRenderID; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public int getRenderBlockPass() { - return 1; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) { - for (int i = 0; i < GregTech_API.sGeneratedMaterials.length; i++) { - Materials tMaterial = GregTech_API.sGeneratedMaterials[i]; - // If material is not null and has a frame box item associated with it - if ((tMaterial != null) && ((tMaterial.mTypes & 0x02) != 0)) { - aList.add(new ItemStack(aItem, 1, i)); - } - } - } - - @Override - public String getHarvestTool(int aMeta) { - return "wrench"; - } - - @Override - public int getHarvestLevel(int aMeta) { - return aMeta % 4; - } - - @Override - public boolean canConnectRedstone(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { - ForgeDirection forgeSide = switch (ordinalSide) { - case (-2) -> ForgeDirection.DOWN; - case (-1) -> ForgeDirection.UP; - case (0) -> ForgeDirection.NORTH; - case (2) -> ForgeDirection.SOUTH; - case (3) -> ForgeDirection.WEST; - case (1) -> ForgeDirection.EAST; - default -> ForgeDirection.UNKNOWN; - }; - final TileEntity frameEntity = aWorld.getTileEntity(aX, aY, aZ); - return frameEntity instanceof CoverableTileEntity cte && cte.getCoverInfoAtSide(forgeSide) - .getCoverID() != 0; - } - - @Override - public int getDamageValue(World aWorld, int aX, int aY, int aZ) { - return aWorld.getBlockMetadata(aX, aY, aZ); - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetadata) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - gtTE.onBlockDestroyed(); - mTemporaryTileEntity.set(gtTE); - } - // Cause structure update - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetadata); - } - - @Override - public void onBlockAdded(World worldIn, int x, int y, int z) { - // Cause structure update - GregTech_API.causeMachineUpdate(worldIn, x, y, z); - super.onBlockAdded(worldIn, x, y, z); - } - - @Override - public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE && gtTE.getMetaTileEntity() != null) { - gtTE.onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider); - return; - } - super.onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider); - } - - @Override - public float getPlayerRelativeBlockHardness(EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - return (tTileEntity instanceof BaseMetaTileEntity baseMTE) && baseMTE.privateAccess() - && !baseMTE.playerOwnsThis(aPlayer, true) ? -1.0F - : super.getPlayerRelativeBlockHardness(aPlayer, aWorld, aX, aY, aZ); - } - - @Override - public void onNeighborChange(IBlockAccess aWorld, int aX, int aY, int aZ, int aTileX, int aTileY, int aTileZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof BaseTileEntity baseTE) { - baseTE.onAdjacentBlockChange(aTileX, aTileY, aTileZ); - } - } - - @Override - public void onNeighborBlockChange(World aWorld, int aX, int aY, int aZ, Block aBlock) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof BaseMetaPipeEntity baseMetaPipe) { - baseMetaPipe.onNeighborBlockChange(aX, aY, aZ); - } - } - - @Override - public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, - List outputAABB, Entity collider) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE && gtTE.getMetaTileEntity() != null) { - gtTE.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); - return; - } - super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE && gtTE.getMetaTileEntity() != null) { - return gtTE.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - } - return super.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - } - - @Override - @SideOnly(Side.CLIENT) - public AxisAlignedBB getSelectedBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE && gtTE.getMetaTileEntity() != null) { - return gtTE.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - } - return super.getSelectedBoundingBoxFromPool(aWorld, aX, aY, aZ); - } - - @Override - public boolean isSideSolid(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection side) { - if (aWorld.getBlockMetadata(aX, aY, aZ) == 0) { - return true; - } - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof BaseMetaTileEntity) { - return true; - } - if (tTileEntity instanceof BaseMetaPipeEntity baseMetaPipe && (baseMetaPipe.mConnections & 0xFFFFFFC0) != 0) { - return true; - } - return (tTileEntity instanceof ICoverable coverable) && coverable.getCoverIDAtSide(side) != 0; - } - - @Override // THIS - public void setBlockBoundsBasedOnState(IBlockAccess blockAccess, int aX, int aY, int aZ) { - final TileEntity tTileEntity = blockAccess.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE && gtTE.getMetaTileEntity() != null) { - final AxisAlignedBB bbb = gtTE.getCollisionBoundingBoxFromPool(gtTE.getWorld(), 0, 0, 0); - minX = bbb.minX; // This essentially sets block bounds - minY = bbb.minY; - minZ = bbb.minZ; - maxX = bbb.maxX; - maxY = bbb.maxY; - maxZ = bbb.maxZ; - return; - } - super.setBlockBoundsBasedOnState(blockAccess, aX, aY, aZ); - } - - @Override - public void setBlockBoundsForItemRender() { - super.setBlockBounds(0, 0, 0, 1, 1, 1); - } - - @Override - public int getFlammability(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { - return 0; - } - - @Override - public int getFireSpreadSpeed(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { - return 0; - } - - @Override - public boolean isFireSource(World aWorld, int aX, int aY, int aZ, ForgeDirection side) { - return false; - } - - @Override - public boolean isFlammable(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { - return false; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean hasTileEntity(int aMeta) { - return true; - } - - @Override - public boolean onBlockEventReceived(World aWorld, int aX, int aY, int aZ, int aData1, int aData2) { - super.onBlockEventReceived(aWorld, aX, aY, aZ, aData1, aData2); - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - return tTileEntity != null && tTileEntity.receiveClientEvent(aData1, aData2); - } - - @Override - public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { - // Find temporary TE if there was one - final IGregTechTileEntity tempTe = mTemporaryTileEntity.get(); - ArrayList drops = new ArrayList<>(); - drops.add(getStackForm(1, metadata)); - // If there is one, grab all attached covers and drop them - if (tempTe != null) { - for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { - ItemStack cover = tempTe.getCoverItemAtSide(direction); - if (cover != null) drops.add(cover); - } - } - // Make sure to clear the temporary TE - mTemporaryTileEntity.remove(); - return drops; - } - - @Override - public boolean canProvidePower() { - return true; - } - - @Override - public int isProvidingWeakPower(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { - if (ordinalSide < 0 || ordinalSide > 5) { - return 0; - } - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - return gtTE.getOutputRedstoneSignal( - ForgeDirection.getOrientation(ordinalSide) - .getOpposite()); - } - return 0; - } - - @Override - public int isProvidingStrongPower(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { - if (ordinalSide < 0 || ordinalSide > 5) { - return 0; - } - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - return gtTE.getStrongOutputRedstoneSignal( - ForgeDirection.getOrientation(ordinalSide) - .getOpposite()); - } - return 0; - } - - @Override - public IIcon getIcon(int side, int meta) { - Materials material = GregTech_API.sGeneratedMaterials[meta]; - if (material == null) return null; - return material.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex].getIcon(); - } - - public ITexture[] getTexture(int meta) { - Materials material = getMaterial(meta); - if (material == null) return null; - return new ITexture[] { TextureFactory.of( - material.mIconSet.mTextures[OrePrefixes.frameGt.mTextureIndex], - Dyes.getModulation(-1, material.mRGBa)) }; - } - - @Override - public TileEntity createNewTileEntity(World worldIn, int meta) { - return null; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Glass1.java b/src/main/java/gregtech/common/blocks/GT_Block_Glass1.java deleted file mode 100644 index 2aa5613d11..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Glass1.java +++ /dev/null @@ -1,107 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Facing; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; - -/** - * The glass is split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - * - * This class hosts various special types of tiered glass with not many tiers. - */ -public class GT_Block_Glass1 extends GT_Block_Casings_Abstract { - - public GT_Block_Glass1() { - super(GT_Item_Glass1.class, "gt.blockglass1", Material.glass, 4); - this.opaque = false; - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Chemical Grade Glass"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".1.name", "Electron-Permeable Neutronium Coated Glass"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Omni-Purpose Infinity Fused Glass"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".3.name", "Non-Photonic Matter Exclusion Glass"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".4.name", "Hawking Radiation Realignment Focus"); - - ItemList.GlassPHResistant.set(new ItemStack(this, 1, 0)); - ItemList.GlassUVResistant.set(new ItemStack(this, 1, 1)); - ItemList.GlassOmniPurposeInfinityFused.set(new ItemStack(this, 1, 2)); - ItemList.GlassQuarkContainment.set(new ItemStack(this, 1, 3)); - ItemList.GlassQuarkContainment.set(new ItemStack(this, 1, 3)); - ItemList.Hawking_Glass.set(new ItemStack(this, 1, 4)); - } - - @Override - public int getTextureIndex(int aMeta) { - // Page 16, 0-16 - return (16 << 7) | (aMeta); - } - - @Override - public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 1; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int ordinalSide, int aMeta) { - return switch (aMeta) { - case 0 -> Textures.BlockIcons.GLASS_PH_RESISTANT.getIcon(); - case 1 -> Textures.BlockIcons.NEUTRONIUM_COATED_UV_RESISTANT_GLASS.getIcon(); - case 2 -> Textures.BlockIcons.OMNI_PURPOSE_INFINITY_FUSED_GLASS.getIcon(); - case 3 -> Textures.BlockIcons.GLASS_QUARK_CONTAINMENT.getIcon(); - case 4 -> Textures.BlockIcons.HAWKING_GLASS.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); - }; - } - - /** - * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given - * coordinates. Args: blockAccess, x, y, z, side - */ - @SideOnly(Side.CLIENT) - @Override - public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) { - Block block = worldIn.getBlock(x, y, z); - - if (worldIn.getBlockMetadata(x, y, z) != worldIn.getBlockMetadata( - x - Facing.offsetsXForSide[side], - y - Facing.offsetsYForSide[side], - z - Facing.offsetsZForSide[side])) { - return true; - } - - if (block == this) { - return false; - } - - return super.shouldSideBeRendered(worldIn, x, y, z, side); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Granites.java b/src/main/java/gregtech/common/blocks/GT_Block_Granites.java deleted file mode 100644 index 69ebc2e733..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Granites.java +++ /dev/null @@ -1,77 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.boss.EntityWither; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; - -public class GT_Block_Granites extends GT_Block_Stones_Abstract { - - public GT_Block_Granites() { - super(GT_Item_Granites.class, "gt.blockgranites"); - setResistance(60.0F); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Black Granite"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Black Granite Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Mossy Black Granite Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Black Granite Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Cracked Black Granite Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Mossy Black Granite Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Chiseled Black Granite"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Smooth Black Granite"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Red Granite"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Red Granite Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Mossy Red Granite Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Red Granite Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Cracked Red Granite Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Mossy Red Granite Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Chiseled Red Granite"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Smooth Red Granite"); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 0)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 1)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 2)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 3)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 4)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 5)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 6)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteBlack, new ItemStack(this, 1, 7)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 8)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 9)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 10)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 11)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 12)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 13)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 14)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.GraniteRed, new ItemStack(this, 1, 15)); - } - - @Override - public int getHarvestLevel(int aMeta) { - return 3; - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - return this.blockHardness = Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ) * 3.0F; - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - if ((aMeta >= 0) && (aMeta < 16)) { - return gregtech.api.enums.Textures.BlockIcons.GRANITES[aMeta].getIcon(); - } - return gregtech.api.enums.Textures.BlockIcons.GRANITES[0].getIcon(); - } - - @Override - public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { - return !(entity instanceof EntityWither); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Laser.java b/src/main/java/gregtech/common/blocks/GT_Block_Laser.java deleted file mode 100644 index 038b114284..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Laser.java +++ /dev/null @@ -1,104 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.ITileEntityProvider; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.tileentities.render.TileLaser; - -public class GT_Block_Laser extends Block implements ITileEntityProvider { - - public static IIcon[] textures; - - public GT_Block_Laser() { - super(Material.iron); - setBlockName("LaserPlate"); - this.setCreativeTab(GregTech_API.TAB_GREGTECH); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".name", "Laser Resistant Plate"); - GregTech_API.registerMachineBlock(this, -1); - GameRegistry.registerBlock(this, GT_Item_Block_Laser.class, getUnlocalizedName()); - ItemList.Laser_Plate.set(new ItemStack(this, 1)); - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - if (GregTech_API.isMachineBlock(this, aMetaData)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public String getHarvestTool(int aMeta) { - return "wrench"; - } - - @Override - public int getHarvestLevel(int aMeta) { - return 2; - } - - @Override - public String getUnlocalizedName() { - return "gt.laserplate"; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - blockIcon = Textures.BlockIcons.LASER_PLATE.getIcon(); - } - - @Override - public IIcon getIcon(int side, int meta) { - return blockIcon; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public float getBlockHardness(World world, int x, int y, int z) { - return 1.0f; - } - - @Override - public int damageDropped(int meta) { - return meta; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean hasTileEntity(int metadata) { - return true; - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) { - return new TileLaser(); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java deleted file mode 100644 index 2f80929d94..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java +++ /dev/null @@ -1,703 +0,0 @@ -package gregtech.common.blocks; - -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import java.util.ArrayList; -import java.util.List; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.ITileEntityProvider; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.Explosion; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.cricketcraft.chisel.api.IFacade; - -import cpw.mods.fml.common.Optional; -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.IDebugableBlock; -import gregtech.api.interfaces.tileentity.IColoredTileEntity; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IDebugableTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_Generic_Block; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.BaseTileEntity; -import gregtech.api.metatileentity.CoverableTileEntity; -import gregtech.api.util.GT_BaseCrop; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; -import gregtech.common.covers.CoverInfo; -import gregtech.common.render.GT_Renderer_Block; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumChest; -import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.GT_MetaTileEntity_RedstoneBase; - -@Optional.Interface(iface = "com.cricketcraft.chisel.api.IFacade", modid = "ChiselAPI") -public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlock, ITileEntityProvider, IFacade { - - private static final ThreadLocal mTemporaryTileEntity = new ThreadLocal<>(); - private boolean renderAsNormalBlock; - - public GT_Block_Machines() { - super(GT_Item_Machines.class, "gt.blockmachines", new GT_Material_Machines()); - GregTech_API.registerMachineBlock(this, -1); - setHardness(1.0F); - setResistance(10.0F); - setStepSound(soundTypeMetal); - setCreativeTab(GregTech_API.TAB_GREGTECH); - this.isBlockContainer = true; - this.renderAsNormalBlock = true; - this.useNeighborBrightness = true; - } - - @Override - public String getHarvestTool(int aMeta) { - if (aMeta >= 8 && aMeta <= 11) { - return "cutter"; - } - return "wrench"; - } - - @Override - public int getHarvestLevel(int aMeta) { - return aMeta % 4; - } - - @Override - protected boolean canSilkHarvest() { - return false; - } - - @Override - public void onNeighborChange(IBlockAccess aWorld, int aX, int aY, int aZ, int aTileX, int aTileY, int aTileZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if ((tTileEntity instanceof BaseTileEntity)) { - ((BaseTileEntity) tTileEntity).onAdjacentBlockChange(aTileX, aTileY, aTileZ); - } - } - - @Override - public void onNeighborBlockChange(World aWorld, int aX, int aY, int aZ, Block aBlock) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if ((tTileEntity instanceof BaseMetaPipeEntity)) { - ((BaseMetaPipeEntity) tTileEntity).onNeighborBlockChange(aX, aY, aZ); - } - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - super.onBlockAdded(aWorld, aX, aY, aZ); - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public String getUnlocalizedName() { - return "gt.blockmachines"; - } - - @Override - public String getLocalizedName() { - return StatCollector.translateToLocal(getUnlocalizedName() + ".name"); - } - - @Override - public int getFlammability(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { - return 0; - } - - @Override - public int getFireSpreadSpeed(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { - return GregTech_API.sMachineFlammable && (aWorld.getBlockMetadata(aX, aY, aZ) == 0) ? 100 : 0; - } - - @Override - public int getRenderType() { - if (GT_Renderer_Block.INSTANCE == null) { - return super.getRenderType(); - } - return GT_Renderer_Block.INSTANCE.mRenderID; - } - - @Override - public boolean isFireSource(World aWorld, int aX, int aY, int aZ, ForgeDirection side) { - return GregTech_API.sMachineFlammable && (aWorld.getBlockMetadata(aX, aY, aZ) == 0); - } - - @Override - public boolean isFlammable(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection face) { - return GregTech_API.sMachineFlammable && (aWorld.getBlockMetadata(aX, aY, aZ) == 0); - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean canConnectRedstone(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { - ForgeDirection forgeSide = switch (ordinalSide) { - case (-2) -> ForgeDirection.DOWN; - case (-1) -> ForgeDirection.UP; - case (0) -> ForgeDirection.NORTH; - case (2) -> ForgeDirection.SOUTH; - case (3) -> ForgeDirection.WEST; - case (1) -> ForgeDirection.EAST; - default -> ForgeDirection.UNKNOWN; - }; - final TileEntity machineEntity = aWorld.getTileEntity(aX, aY, aZ); - return machineEntity instanceof BaseMetaTileEntity bmte && (bmte.getCoverInfoAtSide(forgeSide) - .getCoverID() != 0 || bmte.getMetaTileEntity() instanceof GT_MetaTileEntity_RedstoneBase); - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean hasTileEntity(int aMeta) { - return true; - } - - @Override - public boolean hasComparatorInputOverride() { - return true; - } - - @Override - public boolean renderAsNormalBlock() { - return renderAsNormalBlock; - } - - public GT_Block_Machines setRenderAsNormalBlock(boolean aBool) { - renderAsNormalBlock = aBool; - return this; - } - - @Override - public boolean canProvidePower() { - return true; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public TileEntity createNewTileEntity(World aWorld, int aMeta) { - return createTileEntity(aWorld, aMeta); - } - - @SideOnly(Side.CLIENT) - @Override - public IIcon getIcon(IBlockAccess aIBlockAccess, int aX, int aY, int aZ, int ordinalSide) { - return Textures.BlockIcons.MACHINE_LV_SIDE.getIcon(); - } - - @SideOnly(Side.CLIENT) - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - return Textures.BlockIcons.MACHINE_LV_SIDE.getIcon(); - } - - @Override - public boolean onBlockEventReceived(World aWorld, int aX, int aY, int aZ, int aData1, int aData2) { - super.onBlockEventReceived(aWorld, aX, aY, aZ, aData1, aData2); - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - return tTileEntity != null && tTileEntity.receiveClientEvent(aData1, aData2); - } - - @Override - public void addCollisionBoxesToList(World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, - List outputAABB, Entity collider) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity - && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { - ((IGregTechTileEntity) tTileEntity) - .addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); - return; - } - super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider); - } - - @Override - public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity - && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { - return ((IGregTechTileEntity) tTileEntity).getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - } - return super.getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - } - - @Override - @SideOnly(Side.CLIENT) - public AxisAlignedBB getSelectedBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity - && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { - return ((IGregTechTileEntity) tTileEntity).getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); - } - return super.getSelectedBoundingBoxFromPool(aWorld, aX, aY, aZ); - } - - @Override // THIS - public void setBlockBoundsBasedOnState(IBlockAccess blockAccess, int aX, int aY, int aZ) { - final TileEntity tTileEntity = blockAccess.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity - && (((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null)) { - final AxisAlignedBB bbb = ((IGregTechTileEntity) tTileEntity) - .getCollisionBoundingBoxFromPool(((IGregTechTileEntity) tTileEntity).getWorld(), 0, 0, 0); - minX = bbb.minX; // This essentially sets block bounds - minY = bbb.minY; - minZ = bbb.minZ; - maxX = bbb.maxX; - maxY = bbb.maxY; - maxZ = bbb.maxZ; - return; - } - super.setBlockBoundsBasedOnState(blockAccess, aX, aY, aZ); - } - - @Override - public void setBlockBoundsForItemRender() { - super.setBlockBounds(0, 0, 0, 1, 1, 1); - } - - @Override - public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity - && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { - ((IGregTechTileEntity) tTileEntity).onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider); - return; - } - super.onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider); - } - - @SideOnly(Side.CLIENT) - @Override - public void registerBlockIcons(IIconRegister aIconRegister) { - if (!GregTech_API.sPostloadFinished) return; - GT_Log.out.println("GT_Mod: Setting up Icon Register for Blocks"); - GregTech_API.setBlockIconRegister(aIconRegister); - - GT_Log.out.println("GT_Mod: Registering MetaTileEntity specific Textures"); - try { - for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) { - if (GregTech_API.METATILEENTITIES[i] != null) { - GregTech_API.METATILEENTITIES[i].registerIcons(aIconRegister); - } - } - } catch (Exception e) { - e.printStackTrace(GT_Log.err); - } - GT_Log.out.println("GT_Mod: Registering Crop specific Textures"); - try { - for (GT_BaseCrop tCrop : GT_BaseCrop.sCropList) { - tCrop.registerSprites(aIconRegister); - } - } catch (Exception e) { - e.printStackTrace(GT_Log.err); - } - GT_Log.out.println("GT_Mod: Starting Block Icon Load Phase"); - GT_FML_LOGGER.info("GT_Mod: Starting Block Icon Load Phase"); - try { - for (Runnable tRunnable : GregTech_API.sGTBlockIconload) { - tRunnable.run(); - } - } catch (Exception e) { - e.printStackTrace(GT_Log.err); - } - GT_Log.out.println("GT_Mod: Finished Block Icon Load Phase"); - GT_FML_LOGGER.info("GT_Mod: Finished Block Icon Load Phase"); - } - - @Override - public float getPlayerRelativeBlockHardness(EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - return tTileEntity instanceof BaseMetaTileEntity && ((BaseMetaTileEntity) tTileEntity).privateAccess() - && !((BaseMetaTileEntity) tTileEntity).playerOwnsThis(aPlayer, true) ? -1.0F - : super.getPlayerRelativeBlockHardness(aPlayer, aWorld, aX, aY, aZ); - } - - @Override - public boolean onBlockActivated(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer, int ordinalSide, - float aOffsetX, float aOffsetY, float aOffsetZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity == null) { - return false; - } - if (aPlayer.isSneaking()) { - final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); - if (tCurrentItem != null && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList) - && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList) - && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList) - && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList) - && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sJackhammerList)) return false; - } - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - if (gtTE.getTimer() < 1L) { - return false; - } - if ((!aWorld.isRemote) && !gtTE.isUseableByPlayer(aPlayer)) { - return true; - } - return ((IGregTechTileEntity) tTileEntity) - .onRightclick(aPlayer, ForgeDirection.getOrientation(ordinalSide), aOffsetX, aOffsetY, aOffsetZ); - } - return false; - } - - @Override - public void onBlockClicked(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - gtTE.onLeftclick(aPlayer); - } - } - - @Override - public int getDamageValue(World aWorld, int aX, int aY, int aZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - return gtTE.getMetaTileID(); - } - return 0; - } - - @Override - public void onBlockExploded(World aWorld, int aX, int aY, int aZ, Explosion aExplosion) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof BaseMetaTileEntity baseTE) { - GT_Log.exp.printf( - "Explosion at : %d | %d | %d DIMID: %s due to near explosion!%n", - aX, - aY, - aZ, - aWorld.provider.dimensionId); - baseTE.doEnergyExplosion(); - } - super.onBlockExploded(aWorld, aX, aY, aZ, aExplosion); - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetadata) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - gtTE.onBlockDestroyed(); - mTemporaryTileEntity.set(gtTE); - if (!(gtTE.getMetaTileEntity() instanceof GT_MetaTileEntity_QuantumChest)) { - for (int i = 0; i < gtTE.getSizeInventory(); i++) { - final ItemStack tItem = gtTE.getStackInSlot(i); - if ((tItem != null) && (tItem.stackSize > 0) && (gtTE.isValidSlot(i)) && gtTE.shouldDropItemAt(i)) { - final EntityItem tItemEntity = new EntityItem( - aWorld, - aX + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, - aY + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, - aZ + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, - new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage())); - if (tItem.hasTagCompound()) { - tItemEntity.getEntityItem() - .setTagCompound( - (NBTTagCompound) tItem.getTagCompound() - .copy()); - } - tItemEntity.motionX = (XSTR_INSTANCE.nextGaussian() * 0.05D); - tItemEntity.motionY = (XSTR_INSTANCE.nextGaussian() * 0.25D); - tItemEntity.motionZ = (XSTR_INSTANCE.nextGaussian() * 0.05D); - aWorld.spawnEntityInWorld(tItemEntity); - tItem.stackSize = 0; - gtTE.setInventorySlotContents(i, null); - } - } - } - } - super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetadata); - aWorld.removeTileEntity(aX, aY, aZ); - } - - @Override - public ArrayList getDrops(World aWorld, int aX, int aY, int aZ, int aMeta, int aFortune) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - return gtTE.getDrops(); - } - final IGregTechTileEntity tGregTechTileEntity = mTemporaryTileEntity.get(); - final ArrayList tDrops; - if (tGregTechTileEntity == null) { - tDrops = new ArrayList<>(); - } else { - tDrops = tGregTechTileEntity.getDrops(); - mTemporaryTileEntity.remove(); - } - return tDrops; - } - - @Override - public boolean removedByPlayer(World aWorld, EntityPlayer aPlayer, int aX, int aY, int aZ, boolean aWillHarvest) { - // This delays deletion of the block until after getDrops - return aWillHarvest || super.removedByPlayer(aWorld, aPlayer, aX, aY, aZ, false); - } - - @Override - public void harvestBlock(World aWorld, EntityPlayer aPlayer, int aX, int aY, int aZ, int aMeta) { - super.harvestBlock(aWorld, aPlayer, aX, aY, aZ, aMeta); - aWorld.setBlockToAir(aX, aY, aZ); - } - - @Override - public int getComparatorInputOverride(World aWorld, int aX, int aY, int aZ, int ordinalSide) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - return gtTE.getComparatorValue(ForgeDirection.getOrientation(ordinalSide)); - } - return 0; - } - - @Override - public int isProvidingWeakPower(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { - if (ordinalSide < 0 || ordinalSide > 5) { - return 0; - } - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - return gtTE.getOutputRedstoneSignal( - ForgeDirection.getOrientation(ordinalSide) - .getOpposite()); - } - return 0; - } - - @Override - public int isProvidingStrongPower(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { - if (ordinalSide < 0 || ordinalSide > 5) { - return 0; - } - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity gtTE) { - return gtTE.getStrongOutputRedstoneSignal( - ForgeDirection.getOrientation(ordinalSide) - .getOpposite()); - } - return 0; - } - - @Override - public void dropBlockAsItemWithChance(World aWorld, int aX, int aY, int aZ, int aMetadata, float chance, - int aFortune) { - if (!aWorld.isRemote) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity != null && (chance < 1.0F)) { - if (tTileEntity instanceof BaseMetaTileEntity bmte && (GregTech_API.sMachineNonWrenchExplosions)) { - GT_Log.exp.printf( - "Explosion at : %d | %d | %d DIMID: %s NonWrench picking/Rain!%n", - aX, - aY, - aZ, - aWorld.provider.dimensionId); - bmte.doEnergyExplosion(); - } - } else { - super.dropBlockAsItemWithChance(aWorld, aX, aY, aZ, aMetadata, chance, aFortune); - } - } - } - - @Override - public boolean isSideSolid(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection side) { - if (aWorld.getBlockMetadata(aX, aY, aZ) == 0) { - return true; - } - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity != null) { - if (tTileEntity instanceof BaseMetaTileEntity) { - return true; - } - if (tTileEntity instanceof BaseMetaPipeEntity - && (((BaseMetaPipeEntity) tTileEntity).mConnections & 0xFFFFFFC0) != 0) { - return true; - } - return tTileEntity instanceof ICoverable && ((ICoverable) tTileEntity).getCoverIDAtSide(side) != 0; - } - return false; - } - - @Override - public boolean isBlockNormalCube() { - return true; - } - - /** - * Returns the default ambient occlusion value based on block opacity - */ - @SideOnly(Side.CLIENT) - @Override - public float getAmbientOcclusionLightValue() { - return this.renderAsNormalBlock() ? 0.2F : 0.5F; - } - - /** - * @inheritDoc - */ - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(World aWorld, int aX, int aY, int aZ, Random aRandom) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity) { - ((IGregTechTileEntity) tTileEntity).onRandomDisplayTick(); - } - } - - @Override - public int getLightOpacity(IBlockAccess aWorld, int aX, int aY, int aZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity) { - return ((IGregTechTileEntity) tTileEntity).getLightOpacity(); - } - return aWorld.getBlockMetadata(aX, aY, aZ) == 0 ? 255 : 0; - } - - @Override - public int getLightValue(IBlockAccess aWorld, int aX, int aY, int aZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof BaseMetaTileEntity) { - return ((BaseMetaTileEntity) tTileEntity).getLightValue(); - } - return 0; - } - - @Override - public TileEntity createTileEntity(World aWorld, int aMeta) { - return GregTech_API.createTileEntity(aMeta); - } - - @Override - public float getExplosionResistance(Entity entity, World aWorld, int aX, int aY, int aZ, double explosionX, - double explosionY, double explosionZ) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity) { - return ((IGregTechTileEntity) tTileEntity).getBlastResistance(ForgeDirection.UNKNOWN); - } - return 10.0F; - } - - @SideOnly(Side.CLIENT) - @Override - public void getSubBlocks(Item item, CreativeTabs aCreativeTab, List outputSubBlocks) { - for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) { - if (GregTech_API.METATILEENTITIES[i] != null) { - outputSubBlocks.add(new ItemStack(item, 1, i)); - } - } - } - - @Override - public void onBlockPlacedBy(World aWorld, int aX, int aY, int aZ, EntityLivingBase aPlayer, ItemStack aStack) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (!(tTileEntity instanceof IGregTechTileEntity iGregTechTileEntity)) return; - iGregTechTileEntity.setFrontFacing( - BaseTileEntity.getSideForPlayerPlacing(aPlayer, ForgeDirection.UP, iGregTechTileEntity.getValidFacings())); - } - - @Override - public ArrayList getDebugInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, int aLogLevel) { - final TileEntity tTileEntity = aPlayer.worldObj.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IDebugableTileEntity) { - return ((IDebugableTileEntity) tTileEntity).getDebugInfo(aPlayer, aLogLevel); - } - return new ArrayList<>(); - } - - @Override - public boolean recolourBlock(World aWorld, int aX, int aY, int aZ, ForgeDirection side, int aColor) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IColoredTileEntity coloredTE) { - if (coloredTE.getColorization() == (byte) ((~aColor) & 0xF)) { - return false; - } - coloredTE.setColorization((byte) ((~aColor) & 0xF)); - return true; - } - return false; - } - - @Override - public Block getFacade(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof CoverableTileEntity tile) { - final ForgeDirection dir = ForgeDirection.getOrientation(ordinalSide); - if (dir != ForgeDirection.UNKNOWN) { - final Block facadeBlock = tile.getCoverInfoAtSide(dir) - .getFacadeBlock(); - if (facadeBlock != null) return facadeBlock; - } else { - // we do not allow more than one type of facade per block, so no need to check every side - // see comment in gregtech.common.covers.GT_Cover_FacadeBase.isCoverPlaceable - for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { - final Block facadeBlock = tile.getCoverInfoAtSide(tSide) - .getFacadeBlock(); - if (facadeBlock != null) { - return facadeBlock; - } - } - } - } - return Blocks.air; - } - - @Override - public int getFacadeMetadata(IBlockAccess aWorld, int aX, int aY, int aZ, int ordinalSide) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof CoverableTileEntity tile) { - final ForgeDirection dir = ForgeDirection.getOrientation(ordinalSide); - if (ordinalSide != -1) { - final CoverInfo coverInfo = tile.getCoverInfoAtSide(dir); - final Block facadeBlock = coverInfo.getFacadeBlock(); - if (facadeBlock != null) return coverInfo.getFacadeMeta(); - } else { - // we do not allow more than one type of facade per block, so no need to check every side - // see comment in gregtech.common.covers.GT_Cover_FacadeBase.isCoverPlaceable - for (final ForgeDirection d : ForgeDirection.VALID_DIRECTIONS) { - final CoverInfo coverInfo = tile.getCoverInfoAtSide(d); - final Block facadeBlock = coverInfo.getFacadeBlock(); - if (facadeBlock != null) { - return coverInfo.getFacadeMeta(); - } - } - } - } - return 0; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Metal.java b/src/main/java/gregtech/common/blocks/GT_Block_Metal.java deleted file mode 100644 index 753c590e51..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Metal.java +++ /dev/null @@ -1,68 +0,0 @@ -package gregtech.common.blocks; - -import static gregtech.api.enums.Mods.NotEnoughItems; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; - -public class GT_Block_Metal extends GT_Block_Storage { - - public Materials[] mMats; - public OrePrefixes mPrefix; - public IIconContainer[] mBlockIcons; - public boolean mHideBlocks; - public static boolean mNEIisLoaded = NotEnoughItems.isModLoaded(); - - public GT_Block_Metal(String aName, Materials[] aMats, OrePrefixes aPrefix, IIconContainer[] aBlockIcons) { - super(GT_Item_Storage.class, aName, Material.iron); - mMats = aMats; - mPrefix = aPrefix; - mBlockIcons = aBlockIcons; - mHideBlocks = mNEIisLoaded; - - for (int i = 0; i < aMats.length; i++) { - if (aMats[i].mMetaItemSubID > 0 && aMats[i].mHasParentMod) { - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + "." + i + ".name", - "Block of " + (GT_LanguageManager.i18nPlaceholder ? "%material" : aMats[i].mDefaultLocalName)); - GT_OreDictUnificator.registerOre(aPrefix, aMats[i], new ItemStack(this, 1, i)); - } - } - if (aMats.length < 16 && mNEIisLoaded) { - for (int i = aMats.length; i < 16; i++) codechicken.nei.api.API.hideItem(new ItemStack(this, 1, i)); - } - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - if ((aMeta >= 0) && (aMeta < 16) && aMeta < mMats.length) { - return mBlockIcons[aMeta].getIcon(); - } - return null; - } - - @Override - public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { - if (GregTech_API.isMachineBlock(this, aMetaData)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - } - } - -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Ores.java b/src/main/java/gregtech/common/blocks/GT_Block_Ores.java deleted file mode 100644 index 015baa2319..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Ores.java +++ /dev/null @@ -1,154 +0,0 @@ -package gregtech.common.blocks; - -import static gregtech.api.enums.Textures.BlockIcons.BASALT_STONE; -import static gregtech.api.enums.Textures.BlockIcons.GRANITE_BLACK_STONE; -import static gregtech.api.enums.Textures.BlockIcons.GRANITE_RED_STONE; -import static gregtech.api.enums.Textures.BlockIcons.MARBLE_STONE; - -import java.util.Arrays; - -import net.minecraft.block.Block; -import net.minecraft.block.material.MapColor; -import net.minecraft.block.material.Material; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.render.TextureFactory; - -public class GT_Block_Ores extends GT_Block_Ores_Abstract { - - private static final String UNLOCALIZED_NAME = "gt.blockores"; - - public GT_Block_Ores() { - super(UNLOCALIZED_NAME, 7, false, Material.rock); - } - - @Override - public String getUnlocalizedName() { - return UNLOCALIZED_NAME; - } - - @Override - public OrePrefixes[] getProcessingPrefix() { // Must have 8 entries; an entry can be null to disable automatic - // recipes. - return new OrePrefixes[] { OrePrefixes.ore, OrePrefixes.oreNetherrack, OrePrefixes.oreEndstone, - OrePrefixes.oreBlackgranite, OrePrefixes.oreRedgranite, OrePrefixes.oreMarble, OrePrefixes.oreBasalt, - null }; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int ordinalSide, int meta) { - int index = ((meta / 1000) % 16); - return switch (index) { - case 1 -> Blocks.netherrack.getIcon(ordinalSide, 0); - case 2 -> Blocks.end_stone.getIcon(ordinalSide, 0); - case 3 -> GRANITE_BLACK_STONE.getIcon(); - case 4 -> GRANITE_RED_STONE.getIcon(); - case 5 -> MARBLE_STONE.getIcon(); - case 6 -> BASALT_STONE.getIcon(); - default -> Blocks.stone.getIcon(ordinalSide, 0); - }; - } - - /** - * @inheritDoc - */ - @Override - public boolean isFireSource(World world, int x, int y, int z, ForgeDirection side) { - return (side == ForgeDirection.UP && getDamageValue(world, x, y, z) / 1000 % 16 == 1); - } - - /** - * @inheritDoc - */ - @Override - public MapColor getMapColor(int meta) { - return meta == 1 ? MapColor.netherrackColor : MapColor.stoneColor; - } - - @Override - public int getBaseBlockHarvestLevel(int aMeta) { - return switch (aMeta) { - case 3, 4 -> 3; - default -> 0; - }; - } - - @Override - public Block getDroppedBlock() { - return GregTech_API.sBlockOres1; - } - - @Override - public Materials[] getDroppedDusts() { // Must have 8 entries; can be null. - return new Materials[] { Materials.Stone, Materials.Netherrack, Materials.Endstone, Materials.GraniteBlack, - Materials.GraniteRed, Materials.Marble, Materials.Basalt, Materials.Stone }; - } - - @Override - public boolean[] getEnabledMetas() { - return new boolean[] { true, true, true, GT_Mod.gregtechproxy.enableBlackGraniteOres, - GT_Mod.gregtechproxy.enableRedGraniteOres, GT_Mod.gregtechproxy.enableMarbleOres, - GT_Mod.gregtechproxy.enableBasaltOres, true }; - } - - @Override - public ITexture[] getTextureSet() { - final ITexture[] rTextures = new ITexture[16]; // Must have 16 entries. - Arrays.fill(rTextures, TextureFactory.of(Blocks.stone)); - rTextures[1] = TextureFactory.of(Blocks.netherrack); - rTextures[2] = TextureFactory.of(Blocks.end_stone); - rTextures[3] = TextureFactory.builder() - .addIcon(GRANITE_BLACK_STONE) - .stdOrient() - .build(); - rTextures[4] = TextureFactory.builder() - .addIcon(GRANITE_RED_STONE) - .stdOrient() - .build(); - rTextures[5] = TextureFactory.builder() - .addIcon(MARBLE_STONE) - .stdOrient() - .build(); - rTextures[6] = TextureFactory.builder() - .addIcon(BASALT_STONE) - .stdOrient() - .build(); - return rTextures; - } - - @Override - public void harvestBlock(World worldIn, EntityPlayer player, int x, int y, int z, int meta) { - - if (EnchantmentHelper.getSilkTouchModifier(player)) { - GT_TileEntity_Ores.shouldSilkTouch = true; - super.harvestBlock(worldIn, player, x, y, z, meta); - - if (GT_TileEntity_Ores.shouldSilkTouch) { - GT_TileEntity_Ores.shouldSilkTouch = false; - } - return; - } - - if (!(player instanceof FakePlayer)) { - GT_TileEntity_Ores.shouldFortune = true; - } - super.harvestBlock(worldIn, player, x, y, z, meta); - if (GT_TileEntity_Ores.shouldFortune) { - GT_TileEntity_Ores.shouldFortune = false; - } - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Ores_Abstract.java b/src/main/java/gregtech/common/blocks/GT_Block_Ores_Abstract.java deleted file mode 100644 index 8e68c5c39a..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Ores_Abstract.java +++ /dev/null @@ -1,324 +0,0 @@ -package gregtech.common.blocks; - -import static gregtech.api.enums.Mods.NotEnoughItems; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.block.ITileEntityProvider; -import net.minecraft.block.material.Material; -import net.minecraft.client.particle.EffectRenderer; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.boss.EntityDragon; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.StatCollector; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.items.GT_Generic_Block; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.render.GT_Renderer_Block; - -public abstract class GT_Block_Ores_Abstract extends GT_Generic_Block implements ITileEntityProvider { - - private static final String DOT_NAME = ".name"; - private static final String DOT_TOOLTIP = ".tooltip"; - public static ThreadLocal mTemporaryTileEntity = new ThreadLocal<>(); - public static boolean FUCKING_LOCK = false; - public static boolean tHideOres; - public static Set aBlockedOres = new HashSet<>(); - - protected GT_Block_Ores_Abstract(String aUnlocalizedName, int aOreMetaCount, boolean aHideFirstMeta, - Material aMaterial) { - super(GT_Item_Ores.class, aUnlocalizedName, aMaterial); - this.isBlockContainer = true; - setStepSound(soundTypeStone); - setCreativeTab(GregTech_API.TAB_GREGTECH_ORES); - tHideOres = NotEnoughItems.isModLoaded() && GT_Mod.gregtechproxy.mHideUnusedOres; - if (aOreMetaCount > 8 || aOreMetaCount < 0) aOreMetaCount = 8; - - for (int i = 0; i < 16; i++) { - GT_ModHandler.addValuableOre(this, i, 1); - } - for (int i = 1; i < GregTech_API.sGeneratedMaterials.length; i++) { - if (GregTech_API.sGeneratedMaterials[i] != null) { - for (int j = 0; j < aOreMetaCount; j++) { - if (!this.getEnabledMetas()[j]) continue; - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + "." + (i + (j * 1000)) + DOT_NAME, - GT_LanguageManager.i18nPlaceholder ? getLocalizedNameFormat(GregTech_API.sGeneratedMaterials[i]) - : getLocalizedName(GregTech_API.sGeneratedMaterials[i])); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + "." + (i + (j * 1000)) + DOT_TOOLTIP, - GregTech_API.sGeneratedMaterials[i].getToolTip()); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + "." + ((i + 16000) + (j * 1000)) + DOT_NAME, - "Small " + (GT_LanguageManager.i18nPlaceholder - ? getLocalizedNameFormat(GregTech_API.sGeneratedMaterials[i]) - : getLocalizedName(GregTech_API.sGeneratedMaterials[i]))); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + "." + ((i + 16000) + (j * 1000)) + DOT_TOOLTIP, - GregTech_API.sGeneratedMaterials[i].getToolTip()); - if ((GregTech_API.sGeneratedMaterials[i].mTypes & 0x8) != 0 - && !aBlockedOres.contains(GregTech_API.sGeneratedMaterials[i])) { - GT_OreDictUnificator.registerOre( - this.getProcessingPrefix()[j] != null - ? this.getProcessingPrefix()[j].get(GregTech_API.sGeneratedMaterials[i]) - : "", - new ItemStack(this, 1, i + (j * 1000))); - if (tHideOres) { - if (!(j == 0 && !aHideFirstMeta)) { - codechicken.nei.api.API.hideItem(new ItemStack(this, 1, i + (j * 1000))); - } - codechicken.nei.api.API.hideItem(new ItemStack(this, 1, (i + 16000) + (j * 1000))); - } - } - } - } - } - } - - public int getBaseBlockHarvestLevel(int aMeta) { - return 0; - } - - @Override - public void onNeighborChange(IBlockAccess aWorld, int aX, int aY, int aZ, int aTileX, int aTileY, int aTileZ) { - if (!FUCKING_LOCK) { - FUCKING_LOCK = true; - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - ((GT_TileEntity_Ores) tTileEntity).onUpdated(); - } - } - FUCKING_LOCK = false; - } - - @Override - public void onNeighborBlockChange(World aWorld, int aX, int aY, int aZ, Block aBlock) { - if (!FUCKING_LOCK) { - FUCKING_LOCK = true; - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - ((GT_TileEntity_Ores) tTileEntity).onUpdated(); - } - } - FUCKING_LOCK = false; - } - - public String getLocalizedNameFormat(Materials aMaterial) { - return switch (aMaterial.mName) { - case "InfusedAir", "InfusedDull", "InfusedEarth", "InfusedEntropy", "InfusedFire", "InfusedOrder", "InfusedVis", "InfusedWater" -> "%material Infused Stone"; - case "Vermiculite", "Bentonite", "Kaolinite", "Talc", "BasalticMineralSand", "GraniticMineralSand", "GlauconiteSand", "CassiteriteSand", "GarnetSand", "QuartzSand", "Pitchblende", "FullersEarth" -> "%material"; - default -> "%material" + OrePrefixes.ore.mLocalizedMaterialPost; - }; - } - - public String getLocalizedName(Materials aMaterial) { - return aMaterial.getDefaultLocalizedNameForItem(getLocalizedNameFormat(aMaterial)); - } - - @Override - public boolean onBlockActivated(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer, int ordinalSide, - float aOffsetX, float aOffsetY, float aOffsetZ) { - if (!aPlayer.isSneaking() || !aPlayer.capabilities.isCreativeMode) { - return false; - } - - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (!(tTileEntity instanceof GT_TileEntity_Ores)) { - return false; - } - - boolean tNatural = (((GT_TileEntity_Ores) tTileEntity).mNatural = !((GT_TileEntity_Ores) tTileEntity).mNatural); - GT_Utility.sendChatToPlayer(aPlayer, "Ore \"mNatural\" flag set to: " + tNatural); - return true; - } - - @Override - public boolean onBlockEventReceived(World p_149696_1_, int p_149696_2_, int p_149696_3_, int p_149696_4_, - int p_149696_5_, int p_149696_6_) { - super.onBlockEventReceived(p_149696_1_, p_149696_2_, p_149696_3_, p_149696_4_, p_149696_5_, p_149696_6_); - TileEntity tileentity = p_149696_1_.getTileEntity(p_149696_2_, p_149696_3_, p_149696_4_); - return tileentity != null && tileentity.receiveClientEvent(p_149696_5_, p_149696_6_); - } - - @Override - public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { - return (!(entity instanceof EntityDragon)) && (super.canEntityDestroy(world, x, y, z, entity)); - } - - @Override - public String getHarvestTool(int aMeta) { - return aMeta < 8 ? "pickaxe" : "shovel"; - } - - @Override - public int getHarvestLevel(int aMeta) { - return aMeta == 5 || aMeta == 6 ? 2 : aMeta % 8; - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - return 1.0F + getHarvestLevel(aWorld.getBlockMetadata(aX, aY, aZ)) * 1.0F; - } - - @Override - public float getExplosionResistance(Entity entity, World aWorld, int aX, int aY, int aZ, double explosionX, - double explosionY, double explosionZ) { - return 1.0F + getHarvestLevel(aWorld.getBlockMetadata(aX, aY, aZ)) * 1.0F; - } - - @Override - protected boolean canSilkHarvest() { - return false; - } - - @Override - public abstract String getUnlocalizedName(); - - @Override - public String getLocalizedName() { - return StatCollector.translateToLocal(getUnlocalizedName() + DOT_NAME); - } - - @Override - public int getRenderType() { - if (GT_Renderer_Block.INSTANCE == null) { - return super.getRenderType(); - } - return GT_Renderer_Block.INSTANCE.mRenderID; - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { - return true; - } - - @Override - public boolean hasTileEntity(int aMeta) { - return true; - } - - @Override - public TileEntity createNewTileEntity(World aWorld, int aMeta) { - return createTileEntity(aWorld, aMeta); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess aIBlockAccess, int aX, int aY, int aZ, int ordinalSide) { - return Blocks.stone.getIcon(0, 0); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int ordinalSide, int aMeta) { - return Blocks.stone.getIcon(0, 0); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister aIconRegister) {} - - @Override - @SideOnly(Side.CLIENT) - public boolean addHitEffects(World worldObj, MovingObjectPosition target, EffectRenderer effectRenderer) { - GT_Renderer_Block - .addHitEffects(effectRenderer, this, worldObj, target.blockX, target.blockY, target.blockZ, target.sideHit); - return true; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean addDestroyEffects(World world, int x, int y, int z, int meta, EffectRenderer effectRenderer) { - GT_Renderer_Block.addDestroyEffects(effectRenderer, this, world, x, y, z); - return true; - } - - @Override - public int getDamageValue(World aWorld, int aX, int aY, int aZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (((tTileEntity instanceof GT_TileEntity_Ores))) { - return ((GT_TileEntity_Ores) tTileEntity).getMetaData(); - } - return 0; - } - - @Override - public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetadata) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - mTemporaryTileEntity.set((GT_TileEntity_Ores) tTileEntity); - } - super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetadata); - aWorld.removeTileEntity(aX, aY, aZ); - } - - public abstract OrePrefixes[] getProcessingPrefix(); // Must have 8 entries; an entry can be null to disable - // automatic recipes. - - public abstract boolean[] getEnabledMetas(); // Must have 8 entries. - - public abstract Block getDroppedBlock(); - - public abstract Materials[] getDroppedDusts(); // Must have 8 entries; can be null. - - @Override - public ArrayList getDrops(World aWorld, int aX, int aY, int aZ, int aMeta, int aFortune) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - return ((GT_TileEntity_Ores) tTileEntity).getDrops(getDroppedBlock(), aFortune); - } - return mTemporaryTileEntity.get() == null ? new ArrayList<>() - : mTemporaryTileEntity.get() - .getDrops(getDroppedBlock(), aFortune); - } - - @Override - public TileEntity createTileEntity(World aWorld, int aMeta) { - return new GT_TileEntity_Ores(); - } - - public abstract ITexture[] getTextureSet(); // Must have 16 entries. - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) { - for (int i = 0; i < GregTech_API.sGeneratedMaterials.length; i++) { - Materials tMaterial = GregTech_API.sGeneratedMaterials[i]; - if ((tMaterial != null) && ((tMaterial.mTypes & 0x8) != 0) && !aBlockedOres.contains(tMaterial)) { - for (int meta = i; meta < 23000 + i; meta += 1000) { - if (!(new ItemStack(aItem, 1, meta).getDisplayName() - .contains(DOT_NAME))) aList.add(new ItemStack(aItem, 1, meta)); - } - } - } - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Reinforced.java b/src/main/java/gregtech/common/blocks/GT_Block_Reinforced.java deleted file mode 100644 index a78fe5b70d..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Reinforced.java +++ /dev/null @@ -1,409 +0,0 @@ -package gregtech.common.blocks; - -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.entity.boss.EntityWither; -import net.minecraft.entity.item.EntityTNTPrimed; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.Explosion; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.items.GT_Generic_Block; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.WorldSpawnedEventBuilder; - -public class GT_Block_Reinforced extends GT_Generic_Block { - - public GT_Block_Reinforced(String aName) { - super(GT_Item_Storage.class, aName, new GT_Material_Reinforced()); - for (int i = 0; i < 16; i++) { - Textures.BlockIcons.casingTexturePages[1][i + 80] = TextureFactory.of(this, i); - } - setStepSound(soundTypeStone); - setCreativeTab(GregTech_API.TAB_GREGTECH); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Bronzeplate Reinforced Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Iridium Reinforced Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Plascrete Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Tungstensteel Reinforced Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Brittle Charcoal"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Powderbarrel"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Solid Super Fuel"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Magic Solid Super Fuel"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Steel Reinforced Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Titanium Reinforced Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Naquadah Reinforced Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Neutronium Reinforced Block"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Raw Deep Dark Portal Block"); - ItemList.Block_BronzePlate.set( - new ItemStack( - this.setHardness(60.0f) - .setResistance(150.0f), - 1, - 0)); - ItemList.Block_IridiumTungstensteel.set( - new ItemStack( - this.setHardness(400.0f) - .setResistance(600.0f), - 1, - 1)); - ItemList.Block_Plascrete.set( - new ItemStack( - this.setHardness(5.0f) - .setResistance(6.0f), - 1, - 2)); - ItemList.Block_TungstenSteelReinforced.set( - new ItemStack( - this.setHardness(250.0f) - .setResistance(400.0f), - 1, - 3)); - ItemList.Block_BrittleCharcoal.set( - new ItemStack( - this.setHardness(0.5f) - .setResistance(8.0f), - 1, - 4)); - ItemList.Block_Powderbarrel.set( - new ItemStack( - this.setHardness(2.5f) - .setResistance(2.0f), - 1, - 5)); - ItemList.Block_SSFUEL.set( - new ItemStack( - this.setHardness(2.5f) - .setResistance(2.0f), - 1, - 6)); - ItemList.Block_MSSFUEL.set( - new ItemStack( - this.setHardness(2.5f) - .setResistance(2.0f), - 1, - 7)); - ItemList.Block_SteelPlate.set( - new ItemStack( - this.setHardness(150.0f) - .setResistance(200.0f), - 1, - 8)); - ItemList.Block_TitaniumPlate.set( - new ItemStack( - this.setHardness(200.0f) - .setResistance(300.0f), - 1, - 9)); - ItemList.Block_NaquadahPlate.set( - new ItemStack( - this.setHardness(500.0f) - .setResistance(1000.0f), - 1, - 10)); - ItemList.Block_NeutroniumPlate.set( - new ItemStack( - this.setHardness(750.0f) - .setResistance(2500.0f), - 1, - 11)); - ItemList.Block_BedrockiumCompressed.set( - new ItemStack( - this.setHardness(1500.0f) - .setResistance(5000.0f), - 1, - 12)); - GT_ModHandler.addShapelessCraftingRecipe( - new ItemStack(Items.coal, 1, 1), - new Object[] { ItemList.Block_BrittleCharcoal.get(1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Block_Powderbarrel.get(1L), - GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "WSW", "GGG", "WGW", 'W', OrePrefixes.plate.get(Materials.Wood), 'G', - new ItemStack(Items.gunpowder, 1), 'S', new ItemStack(Items.string, 1) }); - } - - @Override - public String getHarvestTool(int aMeta) { - if (aMeta == 5 || aMeta == 4 || aMeta == 6 || aMeta == 7) return "axe"; - if (aMeta == 2) return "wrench"; - return "pickaxe"; - } - - @Override - public int getHarvestLevel(int aMeta) { - if (aMeta == 4 || aMeta == 5 || aMeta == 6 || aMeta == 7) return 1; - if (aMeta == 2) return 2; - if (aMeta == 9 || aMeta == 3 || aMeta == 1) return 5; - if (aMeta == 10 || aMeta == 11) return 7; - return 4; - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - if ((aMeta >= 0) && (aMeta < 16)) { - switch (aMeta) { - case 0 -> { - return Textures.BlockIcons.BLOCK_BRONZEPREIN.getIcon(); - } - case 1 -> { - return Textures.BlockIcons.BLOCK_IRREIN.getIcon(); - } - case 2 -> { - return Textures.BlockIcons.BLOCK_PLASCRETE.getIcon(); - } - case 3 -> { - return Textures.BlockIcons.BLOCK_TSREIN.getIcon(); - } - case 4, 6, 7 -> { - return Blocks.coal_block.getIcon(0, 0); - } - case 5 -> { - return Textures.BlockIcons.COVER_WOOD_PLATE.getIcon(); - } - case 8 -> { - return Textures.BlockIcons.BLOCK_STEELPREIN.getIcon(); - } - case 9 -> { - return Textures.BlockIcons.BLOCK_TITANIUMPREIN.getIcon(); - } - case 10 -> { - return Textures.BlockIcons.BLOCK_NAQUADAHPREIN.getIcon(); - } - case 11 -> { - return Textures.BlockIcons.BLOCK_NEUTRONIUMPREIN.getIcon(); - } - case 12 -> { - return Textures.BlockIcons.BLOCK_DEEP_DARK_RAW.getIcon(); - } - } - } - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - if (aWorld == null) { - return 0.0F; - } - if (aWorld.isAirBlock(aX, aY, aZ)) { - return 0.0F; - } - int tMeta = aWorld.getBlockMetadata(aX, aY, aZ); - if (tMeta == 0) { - return 60.0F; - } - if (tMeta == 1) { - return 400.0F; - } - if (tMeta == 2) { - return 5.0F; - } - if (tMeta == 3) { - return 250.0F; - } - if (tMeta == 4 || tMeta == 5 || tMeta == 6 || tMeta == 7) { - return 0.5F; - } - if (tMeta == 8) { - return 150.0F; - } - if (tMeta == 9) { - return 200.0F; - } - if (tMeta == 10) { - return 500.0F; - } - if (tMeta == 11) { - return 750.0F; - } - return Blocks.iron_block.getBlockHardness(aWorld, aX, aY, aZ); - } - - @Override - public float getExplosionResistance(Entity entity, World world, int x, int y, int z, double explosionX, - double explosionY, double explosionZ) { - if (world == null) { - return 0.0F; - } - int tMeta = world.getBlockMetadata(x, y, z); - if (tMeta == 0) { - return 150.0F; - } - if (tMeta == 1) { - return 600.0F; - } - if (tMeta == 2) { - return 6.0F; - } - if (tMeta == 3) { - return 400.0F; - } - if (tMeta == 4 || tMeta == 6 || tMeta == 7) { - return 8.0F; - } - if (tMeta == 5) { - return 1.0F; - } - if (tMeta == 8) { - return 200.0F; - } - if (tMeta == 9) { - return 300.0F; - } - if (tMeta == 10) { - return 1000.0F; - } - if (tMeta == 11) { - return 2500.0F; - } - return super.getExplosionResistance(entity, world, x, y, z, explosionX, explosionY, explosionZ); - } - - @Override - public String getUnlocalizedName() { - return this.mUnlocalizedName; - } - - @Override - public String getLocalizedName() { - return StatCollector.translateToLocal(this.mUnlocalizedName + ".name"); - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { - return true; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return false; - } - - @Override - public int damageDropped(int metadata) { - return metadata; - } - - @Override - public int getDamageValue(World aWorld, int aX, int aY, int aZ) { - return aWorld.getBlockMetadata(aX, aY, aZ); - } - - @Override - public void dropBlockAsItemWithChance(World aWorld, int aX, int aY, int aZ, int aMetadata, float chance, - int aFortune) { - if (aMetadata == 4) { - this.dropBlockAsItem(aWorld, aX, aY, aZ, new ItemStack(Items.coal, XSTR_INSTANCE.nextInt(2) + 1, 1)); - } else { - super.dropBlockAsItemWithChance(aWorld, aX, aY, aZ, aMetadata, chance, aFortune); - } - } - - @SuppressWarnings("deprecation") - @Override - public boolean removedByPlayer(World world, EntityPlayer player, int x, int y, int z) { - if (!world.isRemote && world.getBlockMetadata(x, y, z) == 5) { - EntityTNTPrimed entitytntprimed = new EntityTNTPrimed(world, x + 0.5F, y + 0.5F, z + 0.5F, player); - world.spawnEntityInWorld(entitytntprimed); - new WorldSpawnedEventBuilder.SoundAtEntityEventBuilder().setPitch(1f) - .setVolume(1f) - .setIdentifier(SoundResource.GAME_TNT_PRIMED) - .setEntity(entitytntprimed) - .setWorld(world) - .run(); - world.setBlockToAir(x, y, z); - return false; - } - return super.removedByPlayer(world, player, x, y, z); - } - - @Override - public void onBlockAdded(World world, int x, int y, int z) { - super.onBlockAdded(world, x, y, z); - if (world.isBlockIndirectlyGettingPowered(x, y, z) && world.getBlockMetadata(x, y, z) == 5) { - removedByPlayer(world, null, x, y, z); - } - } - - @Override - public void onNeighborBlockChange(World world, int x, int y, int z, Block neighbor) { - if (world.isBlockIndirectlyGettingPowered(x, y, z) && world.getBlockMetadata(x, y, z) == 5) { - removedByPlayer(world, null, x, y, z); - } - } - - @Override - public void onBlockExploded(World world, int x, int y, int z, Explosion explosion) { - if (!world.isRemote && world.getBlockMetadata(x, y, z) == 5) { - EntityTNTPrimed entitytntprimed = new EntityTNTPrimed( - world, - x + 0.5F, - y + 0.5F, - z + 0.5F, - explosion.getExplosivePlacedBy()); - entitytntprimed.fuse = (world.rand.nextInt(entitytntprimed.fuse / 4) + entitytntprimed.fuse / 8); - world.spawnEntityInWorld(entitytntprimed); - } - super.onBlockExploded(world, x, y, z, explosion); - } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int ordinalSide, - float xOffset, float yOffset, float zOffset) { - if ((player.getCurrentEquippedItem() != null) && (player.getCurrentEquippedItem() - .getItem() == Items.flint_and_steel) && world.getBlockMetadata(x, y, z) == 5) { - removedByPlayer(world, player, x, y, z); - - return true; - } - return super.onBlockActivated(world, x, y, z, player, ordinalSide, xOffset, yOffset, zOffset); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister aIconRegister) {} - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item aItem, CreativeTabs aCreativeTab, List aList) { - for (int i = 0; i < 16; i++) { - ItemStack aStack = new ItemStack(aItem, 1, i); - if (!aStack.getDisplayName() - .contains(".name")) aList.add(aStack); - } - } - - @Override - public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { - return !(entity instanceof EntityWither); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Stones.java b/src/main/java/gregtech/common/blocks/GT_Block_Stones.java deleted file mode 100644 index 4ca52aee56..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Stones.java +++ /dev/null @@ -1,62 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; - -public class GT_Block_Stones extends GT_Block_Stones_Abstract { - - public GT_Block_Stones() { - super(GT_Item_Granites.class, "gt.blockstones"); - setResistance(60.0F); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Marble"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Marble Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Mossy Marble Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Marble Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Cracked Marble Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Mossy Marble Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Chiseled Marble"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Smooth Marble"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Basalt"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Basalt Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Mossy Basalt Cobblestone"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Basalt Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Cracked Basalt Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "Mossy Basalt Bricks"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "Chiseled Basalt"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Smooth Basalt"); - for (int i = 0; i < 16; i++) { - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, i < 8 ? Materials.Marble : Materials.Basalt, new ItemStack(this, 1, i)); - GT_OreDictUnificator - .registerOre(OrePrefixes.block, i < 8 ? Materials.Marble : Materials.Basalt, new ItemStack(this, 1, i)); - GT_OreDictUnificator.registerOre( - (i < 8 ? Materials.Marble.mName.toLowerCase() : Materials.Basalt.mName.toLowerCase()), - new ItemStack(this, 1, i)); - } - } - - @Override - public int getHarvestLevel(int aMeta) { - return 2; - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - return this.blockHardness = Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ) * 3.0F; - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - if ((aMeta >= 0) && (aMeta < 16)) { - return gregtech.api.enums.Textures.BlockIcons.STONES[aMeta].getIcon(); - } - return gregtech.api.enums.Textures.BlockIcons.STONES[0].getIcon(); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java b/src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java deleted file mode 100644 index 4a5bb9456e..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Stones_Abstract.java +++ /dev/null @@ -1,250 +0,0 @@ -package gregtech.common.blocks; - -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import java.util.List; - -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -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.Materials; -import gregtech.api.enums.OreDictNames; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.IOreRecipeRegistrator; -import gregtech.api.items.GT_Generic_Block; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -public class GT_Block_Stones_Abstract extends GT_Generic_Block implements IOreRecipeRegistrator { - - public GT_Block_Stones_Abstract(Class aItemClass, String aName) { - super(aItemClass, aName, Material.rock); - OrePrefixes.crafting.add(this); - setStepSound(soundTypeStone); - setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS); - - this.registerSmeltingRecipes(); - this.registerAssemblerRecipes(); - this.registerCraftingRecipes(); - this.registerForgeHammerRecipes(); - - } - - private void registerSmeltingRecipes() { - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 0), new ItemStack(this, 1, 7)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 1), new ItemStack(this, 1, 0)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 2), new ItemStack(this, 1, 0)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 3), new ItemStack(this, 1, 0)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 4), new ItemStack(this, 1, 0)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 5), new ItemStack(this, 1, 0)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 6), new ItemStack(this, 1, 0)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 7), new ItemStack(this, 1, 0)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 8), new ItemStack(this, 1, 15)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 9), new ItemStack(this, 1, 8)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 10), new ItemStack(this, 1, 8)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 11), new ItemStack(this, 1, 8)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 12), new ItemStack(this, 1, 8)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 13), new ItemStack(this, 1, 8)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 14), new ItemStack(this, 1, 8)); - GT_ModHandler.addSmeltingRecipe(new ItemStack(this, 1, 15), new ItemStack(this, 1, 8)); - - } - - private void registerAssemblerRecipes() { - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(this, 1, 0), GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(new ItemStack(this, 1, 3)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(4) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(this, 1, 8), GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(new ItemStack(this, 1, 11)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(4) - .addTo(assemblerRecipes); - } - - private void registerCraftingRecipes() { - GT_ModHandler.addCraftingRecipe( - new ItemStack(this, 1, 6), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "f", "X", 'X', new ItemStack(this, 1, 7) }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(this, 1, 14), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "f", "X", 'X', new ItemStack(this, 1, 15) }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(this, 1, 4), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "h", "X", 'X', new ItemStack(this, 1, 3) }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(this, 1, 12), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "h", "X", 'X', new ItemStack(this, 1, 11) }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(this, 1, 1), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "h", "X", 'X', new ItemStack(this, 1, 0) }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(this, 1, 9), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "h", "X", 'X', new ItemStack(this, 1, 8) }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(this, 4, 3), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "XX", "XX", 'X', new ItemStack(this, 4, 0) }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(this, 4, 11), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "XX", "XX", 'X', new ItemStack(this, 4, 8) }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(this, 4, 3), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "XX", "XX", 'X', new ItemStack(this, 4, 7) }); - GT_ModHandler.addCraftingRecipe( - new ItemStack(this, 4, 11), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "XX", "XX", 'X', new ItemStack(this, 4, 15) }); - } - - private void registerForgeHammerRecipes() { - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(this, 1, 3)) - .itemOutputs(new ItemStack(this, 1, 4)) - .duration(16 * TICKS) - .eut(10) - .addTo(hammerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(this, 1, 11)) - .itemOutputs(new ItemStack(this, 1, 12)) - .duration(16 * TICKS) - .eut(10) - .addTo(hammerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(this, 1, 0)) - .itemOutputs(new ItemStack(this, 1, 1)) - .duration(16 * TICKS) - .eut(10) - .addTo(hammerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(this, 1, 8)) - .itemOutputs(new ItemStack(this, 1, 9)) - .duration(16 * TICKS) - .eut(10) - .addTo(hammerRecipes); - } - - @Override - public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, - ItemStack aStack) { - if (aOreDictName.equals(OreDictNames.craftingLensWhite.toString())) { - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(this, 1, 7), GT_Utility.copyAmount(0, aStack)) - .itemOutputs(new ItemStack(this, 1, 6)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(laserEngraverRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(this, 1, 15), GT_Utility.copyAmount(0, aStack)) - .itemOutputs(new ItemStack(this, 1, 14)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(laserEngraverRecipes); - - } - } - - @Override - public String getHarvestTool(int aMeta) { - return "pickaxe"; - } - - @Override - public int getHarvestLevel(int aMeta) { - return 1; - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - return this.blockHardness = Blocks.stone.getBlockHardness(aWorld, aX, aY, aZ) * 3.0F; - } - - @Override - public String getUnlocalizedName() { - return this.mUnlocalizedName; - } - - @Override - public String getLocalizedName() { - return StatCollector.translateToLocal(this.mUnlocalizedName + ".name"); - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { - return true; - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - if ((aMeta >= 0) && (aMeta < 16)) { - return gregtech.api.enums.Textures.BlockIcons.GRANITES[aMeta].getIcon(); - } - return null; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return world.getBlockMetadata(x, y, z) % 8 < 3; - } - - @Override - public int damageDropped(int metadata) { - return metadata % 8 == 0 ? metadata + 1 : metadata; - } - - @Override - public int getDamageValue(World aWorld, int aX, int aY, int aZ) { - return aWorld.getBlockMetadata(aX, aY, aZ); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister aIconRegister) {} - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item aItem, CreativeTabs aCreativeTab, List aList) { - for (int i = 0; i < 16; i++) { - aList.add(new ItemStack(aItem, 1, i)); - } - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Storage.java b/src/main/java/gregtech/common/blocks/GT_Block_Storage.java deleted file mode 100644 index ada3f01cde..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_Storage.java +++ /dev/null @@ -1,103 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.items.GT_Generic_Block; - -public class GT_Block_Storage extends GT_Generic_Block { - - protected GT_Block_Storage(Class aItemClass, String aName, Material aMaterial) { - super(aItemClass, aName, aMaterial); - setStepSound(soundTypeMetal); - setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS); - } - - @Override - public String getHarvestTool(int aMeta) { - return "pickaxe"; - } - - @Override - public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) { - return true; - } - - @Override - public int getHarvestLevel(int aMeta) { - return 1; - } - - @Override - public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { - return Blocks.iron_block.getBlockHardness(aWorld, aX, aY, aZ); - } - - @Override - public float getExplosionResistance(Entity aTNT) { - return Blocks.iron_block.getExplosionResistance(aTNT); - } - - @Override - public String getUnlocalizedName() { - return this.mUnlocalizedName; - } - - @Override - public String getLocalizedName() { - return StatCollector.translateToLocal(this.mUnlocalizedName + ".name"); - } - - @Override - public boolean canBeReplacedByLeaves(IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { - return true; - } - - @Override - public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { - return true; - } - - @Override - public int damageDropped(int metadata) { - return metadata; - } - - @Override - public int getDamageValue(World aWorld, int aX, int aY, int aZ) { - return aWorld.getBlockMetadata(aX, aY, aZ); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister aIconRegister) {} - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item aItem, CreativeTabs aCreativeTab, List aList) { - for (int i = 0; i < 16; i++) { - if (!(new ItemStack(aItem, 1, i).getDisplayName() - .contains(".name"))) aList.add(new ItemStack(aItem, 1, i)); - } - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Block_TintedIndustrialGlass.java b/src/main/java/gregtech/common/blocks/GT_Block_TintedIndustrialGlass.java deleted file mode 100644 index 93c6ebb298..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Block_TintedIndustrialGlass.java +++ /dev/null @@ -1,98 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Facing; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.oredict.OreDictionary; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; - -public class GT_Block_TintedIndustrialGlass extends GT_Block_Casings_Abstract { - - public GT_Block_TintedIndustrialGlass() { - super(GT_Item_Glass1.class, "gt.blocktintedglass", Material.glass, 4); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "Tinted Industrial Glass (White)"); - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".1.name", "Tinted Industrial Glass (Light Gray)"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Tinted Industrial Glass (Gray)"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Tinted Industrial Glass (Black)"); - ItemList.GlassTintedIndustrialWhite.set(new ItemStack(this, 1, 0)); - ItemList.GlassTintedIndustrialLightGray.set(new ItemStack(this, 1, 1)); - ItemList.GlassTintedIndustrialGray.set(new ItemStack(this, 1, 2)); - ItemList.GlassTintedIndustrialBlack.set(new ItemStack(this, 1, 3)); - - // Register tinted industrial glass as EV-Tier glass - OreDictionary.registerOre("blockGlassEV", this); - - this.opaque = false; - } - - @Override - public int getTextureIndex(int aMeta) { - // Page 16, 32-47 - return (16 << 7) | (aMeta + 32); - } - - @Override - public boolean isNormalCube(IBlockAccess aWorld, int aX, int aY, int aZ) { - return false; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 1; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int ordinalSide, int aMeta) { - return switch (aMeta) { - case 0 -> Textures.BlockIcons.GLASS_TINTED_INDUSTRIAL_WHITE.getIcon(); - case 1 -> Textures.BlockIcons.GLASS_TINTED_INDUSTRIAL_LIGHT_GRAY.getIcon(); - case 2 -> Textures.BlockIcons.GLASS_TINTED_INDUSTRIAL_GRAY.getIcon(); - case 3 -> Textures.BlockIcons.GLASS_TINTED_INDUSTRIAL_BLACK.getIcon(); - default -> Textures.BlockIcons.MACHINE_CASING_ROBUST_TUNGSTENSTEEL.getIcon(); - }; - } - - /** - * Returns true if the given side of this block type should be rendered, if the adjacent block is at the given - * coordinates. Args: blockAccess, x, y, z, side - */ - @SideOnly(Side.CLIENT) - @Override - public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) { - Block block = worldIn.getBlock(x, y, z); - - if (worldIn.getBlockMetadata(x, y, z) != worldIn.getBlockMetadata( - x - Facing.offsetsXForSide[side], - y - Facing.offsetsYForSide[side], - z - Facing.offsetsZForSide[side])) { - return true; - } - - if (block == this) { - return false; - } - - return super.shouldSideBeRendered(worldIn, x, y, z, side); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Cyclotron_Coils.java b/src/main/java/gregtech/common/blocks/GT_Cyclotron_Coils.java deleted file mode 100644 index 3c4250540c..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Cyclotron_Coils.java +++ /dev/null @@ -1,131 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; - -public class GT_Cyclotron_Coils extends GT_Block_Casings_Abstract { - - public GT_Cyclotron_Coils() { - super(GT_Cyclotron_Item_Casings.class, "gt.blockcasings.cyclotron_coils", GT_Material_Casings.INSTANCE, 16); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "MV Solenoid Superconductor Coil"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "HV Solenoid Superconductor Coil"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "EV Solenoid Superconductor Coil"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "IV Solenoid Superconductor Coil"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "LuV Solenoid Superconductor Coil"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "ZPM Solenoid Superconductor Coil"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "UV Solenoid Superconductor Coil"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "UHV Solenoid Superconductor Coil"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "UEV Solenoid Superconductor Coil"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "UIV Solenoid Superconductor Coil"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "UMV Solenoid Superconductor Coil"); - - ItemList.Superconducting_Magnet_Solenoid_MV.set(new ItemStack(this, 1, 0)); - ItemList.Superconducting_Magnet_Solenoid_HV.set(new ItemStack(this, 1, 1)); - ItemList.Superconducting_Magnet_Solenoid_EV.set(new ItemStack(this, 1, 2)); - ItemList.Superconducting_Magnet_Solenoid_IV.set(new ItemStack(this, 1, 3)); - ItemList.Superconducting_Magnet_Solenoid_LuV.set(new ItemStack(this, 1, 4)); - ItemList.Superconducting_Magnet_Solenoid_ZPM.set(new ItemStack(this, 1, 5)); - ItemList.Superconducting_Magnet_Solenoid_UV.set(new ItemStack(this, 1, 6)); - ItemList.Superconducting_Magnet_Solenoid_UHV.set(new ItemStack(this, 1, 7)); - ItemList.Superconducting_Magnet_Solenoid_UEV.set(new ItemStack(this, 1, 8)); - ItemList.Superconducting_Magnet_Solenoid_UIV.set(new ItemStack(this, 1, 9)); - ItemList.Superconducting_Magnet_Solenoid_UMV.set(new ItemStack(this, 1, 10)); - } - - @Override - public int getTextureIndex(int aMeta) { - return (2 << 7) | (aMeta); - } - - @Override - public IIcon getIcon(int ordinalSide, int aMeta) { - if ((aMeta >= 0) && (aMeta < 16)) { - switch (aMeta) { - case 0 -> { - if (ordinalSide == 0 || ordinalSide == 1) { - return Textures.BlockIcons.MV_TOP_CYCLOTRON_SOLENOID.getIcon(); - } - return Textures.BlockIcons.MV_SIDE_CYCLOTRON_SOLENOID.getIcon(); - } - case 1 -> { - if (ordinalSide == 0 || ordinalSide == 1) { - return Textures.BlockIcons.HV_TOP_CYCLOTRON_SOLENOID.getIcon(); - } - return Textures.BlockIcons.HV_SIDE_CYCLOTRON_SOLENOID.getIcon(); - } - case 2 -> { - if (ordinalSide == 0 || ordinalSide == 1) { - return Textures.BlockIcons.EV_TOP_CYCLOTRON_SOLENOID.getIcon(); - } - return Textures.BlockIcons.EV_SIDE_CYCLOTRON_SOLENOID.getIcon(); - } - case 3 -> { - if (ordinalSide == 0 || ordinalSide == 1) { - return Textures.BlockIcons.IV_TOP_CYCLOTRON_SOLENOID.getIcon(); - } - return Textures.BlockIcons.IV_SIDE_CYCLOTRON_SOLENOID.getIcon(); - } - case 4 -> { - if (ordinalSide == 0 || ordinalSide == 1) { - return Textures.BlockIcons.LuV_TOP_CYCLOTRON_SOLENOID.getIcon(); - } - return Textures.BlockIcons.LuV_SIDE_CYCLOTRON_SOLENOID.getIcon(); - } - case 5 -> { - if (ordinalSide == 0 || ordinalSide == 1) { - return Textures.BlockIcons.ZPM_TOP_CYCLOTRON_SOLENOID.getIcon(); - } - return Textures.BlockIcons.ZPM_SIDE_CYCLOTRON_SOLENOID.getIcon(); - } - case 6 -> { - if (ordinalSide == 0 || ordinalSide == 1) { - return Textures.BlockIcons.UV_TOP_CYCLOTRON_SOLENOID.getIcon(); - } - return Textures.BlockIcons.UV_SIDE_CYCLOTRON_SOLENOID.getIcon(); - } - case 7 -> { - if (ordinalSide == 0 || ordinalSide == 1) { - return Textures.BlockIcons.UHV_TOP_CYCLOTRON_SOLENOID.getIcon(); - } - return Textures.BlockIcons.UHV_SIDE_CYCLOTRON_SOLENOID.getIcon(); - } - case 8 -> { - if (ordinalSide == 0 || ordinalSide == 1) { - return Textures.BlockIcons.UEV_TOP_CYCLOTRON_SOLENOID.getIcon(); - } - return Textures.BlockIcons.UEV_SIDE_CYCLOTRON_SOLENOID.getIcon(); - } - case 9 -> { - if (ordinalSide == 0 || ordinalSide == 1) { - return Textures.BlockIcons.UIV_TOP_CYCLOTRON_SOLENOID.getIcon(); - } - return Textures.BlockIcons.UIV_SIDE_CYCLOTRON_SOLENOID.getIcon(); - } - case 10 -> { - if (ordinalSide == 0 || ordinalSide == 1) { - return Textures.BlockIcons.UMV_TOP_CYCLOTRON_SOLENOID.getIcon(); - } - return Textures.BlockIcons.UMV_SIDE_CYCLOTRON_SOLENOID.getIcon(); - } - } - } - return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); - } - - public int getVoltageTier(int meta) { - return meta + 2; - } - - @Override - public int colorMultiplier(IBlockAccess aWorld, int aX, int aY, int aZ) { - return aWorld.getBlockMetadata(aX, aY, aZ) > 9 ? super.colorMultiplier(aWorld, aX, aY, aZ) - : gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[0] << 16 | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[1] << 8 - | gregtech.api.enums.Dyes.MACHINE_METAL.mRGBa[2]; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Cyclotron_Item_Casings.java b/src/main/java/gregtech/common/blocks/GT_Cyclotron_Item_Casings.java deleted file mode 100644 index f1ca45a805..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Cyclotron_Item_Casings.java +++ /dev/null @@ -1,10 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; - -public class GT_Cyclotron_Item_Casings extends GT_Item_Casings_Abstract { - - public GT_Cyclotron_Item_Casings(Block block) { - super(block); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Block_Laser.java b/src/main/java/gregtech/common/blocks/GT_Item_Block_Laser.java deleted file mode 100644 index db4f6ddddc..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Block_Laser.java +++ /dev/null @@ -1,24 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -import gregtech.api.util.GT_LanguageManager; - -public class GT_Item_Block_Laser extends ItemBlock { - - public GT_Item_Block_Laser(Block block) { - super(block); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean f3_h) { - tooltip.add( - GT_LanguageManager - .addStringLocalization("gt.laserplatingtooltip", "Engineered to withstand extreme temperatures")); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings1.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings1.java deleted file mode 100644 index 1a86a2e534..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Casings1.java +++ /dev/null @@ -1,14 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Item_Casings1 extends GT_Item_Casings_Abstract { - - public GT_Item_Casings1(Block block) { - super(block); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings10.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings10.java deleted file mode 100644 index 519549ce6b..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Casings10.java +++ /dev/null @@ -1,14 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Item_Casings10 extends GT_Item_Casings_Abstract { - - public GT_Item_Casings10(Block block) { - super(block); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings11.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings11.java deleted file mode 100644 index 2941022b9c..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Casings11.java +++ /dev/null @@ -1,14 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Item_Casings11 extends GT_Item_Casings_Abstract { - - public GT_Item_Casings11(Block block) { - super(block); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings2.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings2.java deleted file mode 100644 index f98c169c7f..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Casings2.java +++ /dev/null @@ -1,26 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Item_Casings2 extends GT_Item_Casings_Abstract { - - public GT_Item_Casings2(Block block) { - super(block); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - super.addInformation(aStack, aPlayer, aList, aF3_H); - if (getDamage(aStack) == 8) { - aList.add(this.mBlastProofTooltip); - } - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings3.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings3.java deleted file mode 100644 index 861774d96f..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Casings3.java +++ /dev/null @@ -1,14 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Item_Casings3 extends GT_Item_Casings_Abstract { - - public GT_Item_Casings3(Block block) { - super(block); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings4.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings4.java deleted file mode 100644 index e2badca2cb..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Casings4.java +++ /dev/null @@ -1,14 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Item_Casings4 extends GT_Item_Casings_Abstract { - - public GT_Item_Casings4(Block block) { - super(block); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings5.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings5.java deleted file mode 100644 index 3b3ab68cb1..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Casings5.java +++ /dev/null @@ -1,36 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.util.GT_LanguageManager; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Item_Casings5 extends GT_Item_Casings_Abstract { - - public GT_Item_Casings5(Block block) { - super(block); - } - - protected static final String mCoilHeatTooltip = GT_LanguageManager - .addStringLocalization("gt.coilheattooltip", "Base Heating Capacity = "); - protected static final String mCoilUnitTooltip = GT_LanguageManager - .addStringLocalization("gt.coilunittooltip", " Kelvin"); - - @Override - @SideOnly(Side.CLIENT) - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - super.addInformation(aStack, aPlayer, aList, aF3_H); - HeatingCoilLevel coilLevel = GT_Block_Casings5.getCoilHeatFromDamage(aStack.getItemDamage()); - aList.add(mCoilHeatTooltip + coilLevel.getHeat() + mCoilUnitTooltip); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings6.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings6.java deleted file mode 100644 index af533acfa8..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Casings6.java +++ /dev/null @@ -1,14 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Item_Casings6 extends GT_Item_Casings_Abstract { - - public GT_Item_Casings6(Block block) { - super(block); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings8.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings8.java deleted file mode 100644 index e3f3bbdf97..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Casings8.java +++ /dev/null @@ -1,14 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Item_Casings8 extends GT_Item_Casings_Abstract { - - public GT_Item_Casings8(Block block) { - super(block); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings9.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings9.java deleted file mode 100644 index e9b39ee2cd..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Casings9.java +++ /dev/null @@ -1,28 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; - -/** - * The casings are split into separate files because they are registered as regular blocks, and a regular block can have - * 16 subtypes at most. - */ -public class GT_Item_Casings9 extends GT_Item_Casings_Abstract { - - public GT_Item_Casings9(Block block) { - super(block); - } - - /* - * @Override - * public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - * // Add tooltip info if it was given - * String localizedTooltip = GT_LanguageManager.getTranslation(aStack.getUnlocalizedName() + ".tooltip"); - * // getTranslation returns the key if no translation was found, but this just means - * // no tooltip was set. - * if (localizedTooltip.startsWith("gt.")) { - * aList.add(localizedTooltip); - * } - * super.addInformation(aStack, aPlayer, aList, aF3_H); - * } - */ -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Casings_Abstract.java b/src/main/java/gregtech/common/blocks/GT_Item_Casings_Abstract.java deleted file mode 100644 index 46b0aba237..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Casings_Abstract.java +++ /dev/null @@ -1,63 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -import gregtech.api.GregTech_API; -import gregtech.api.util.GT_LanguageManager; - -public abstract class GT_Item_Casings_Abstract extends ItemBlock { - - protected final String mNoMobsToolTip = GT_LanguageManager - .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); - protected final String mNoTileEntityToolTip = GT_LanguageManager - .addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!"); - protected final String mCoil01Tooltip = GT_LanguageManager - .addStringLocalization("gt.coil01tooltip", "Base Heating Capacity = 1800 Kelvin"); - protected final String mCoil02Tooltip = GT_LanguageManager - .addStringLocalization("gt.coil02tooltip", "Base Heating Capacity = 2700 Kelvin"); - protected final String mCoil03Tooltip = GT_LanguageManager - .addStringLocalization("gt.coil03tooltip", "Base Heating Capacity = 3600 Kelvin"); - protected final String mCoil04Tooltip = GT_LanguageManager - .addStringLocalization("gt.coil04tooltip", "Base Heating Capacity = 4500 Kelvin"); - protected final String mCoil05Tooltip = GT_LanguageManager - .addStringLocalization("gt.coil05tooltip", "Base Heating Capacity = 5400 Kelvin"); - protected final String mCoil06Tooltip = GT_LanguageManager - .addStringLocalization("gt.coil06tooltip", "Base Heating Capacity = 7200 Kelvin"); - protected final String mCoil07Tooltip = GT_LanguageManager - .addStringLocalization("gt.coil07tooltip", "Base Heating Capacity = 9001 Kelvin"); - protected final String mCoil08Tooltip = GT_LanguageManager - .addStringLocalization("gt.coil08tooltip", "Base Heating Capacity = 9900 Kelvin"); - protected final String mCoil09Tooltip = GT_LanguageManager - .addStringLocalization("gt.coil09tooltip", "Base Heating Capacity = 10800 Kelvin"); - protected final String mBlastProofTooltip = GT_LanguageManager - .addStringLocalization("gt.blastprooftooltip", "This Block is Blast Proof"); - - public GT_Item_Casings_Abstract(Block block) { - super(block); - setMaxDamage(0); - setHasSubtypes(true); - setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS); - } - - @Override - public int getMetadata(int aMeta) { - return aMeta; - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - super.addInformation(aStack, aPlayer, aList, aF3_H); - aList.add(this.mNoMobsToolTip); - aList.add(this.mNoTileEntityToolTip); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Concretes.java b/src/main/java/gregtech/common/blocks/GT_Item_Concretes.java deleted file mode 100644 index 44c094aa41..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Concretes.java +++ /dev/null @@ -1,25 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -import gregtech.api.util.GT_LanguageManager; - -public class GT_Item_Concretes extends GT_Item_Stones_Abstract { - - private final String mRunFasterToolTip = GT_LanguageManager - .addStringLocalization("gt.runfastertooltip", "You can walk faster on this Block"); - - public GT_Item_Concretes(Block block) { - super(block); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - super.addInformation(aStack, aPlayer, aList, aF3_H); - aList.add(this.mRunFasterToolTip); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Frames.java b/src/main/java/gregtech/common/blocks/GT_Item_Frames.java deleted file mode 100644 index 002e19f5a6..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Frames.java +++ /dev/null @@ -1,60 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.util.GT_LanguageManager; - -public class GT_Item_Frames extends ItemBlock { - - public GT_Item_Frames(Block block) { - super(block); - setMaxDamage(0); - setHasSubtypes(true); - setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS); - } - - private Block block() { - return this.field_150939_a; - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return this.block() - .getUnlocalizedName() + "." - + getDamage(aStack); - } - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - String aName = super.getItemStackDisplayName(aStack); - if (this.block() instanceof GT_Block_FrameBox) { - aName = Materials.getLocalizedNameForItem(aName, aStack.getItemDamage()); - } - return aName; - } - - @Override - public int getColorFromItemStack(ItemStack aStack, int aPass) { - int meta = aStack.getItemDamage(); - Materials material = GT_Block_FrameBox.getMaterial(meta); - return (material.mRGBa[0] << 16) | (material.mRGBa[1] << 8) | material.mRGBa[2]; - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - aList.add(GT_LanguageManager.getTranslation("gt.blockframes." + aStack.getItemDamage() + ".tooltip")); - aList.add(GT_LanguageManager.getTranslation("gt.blockmachines.gt_frame.desc.format")); - } - - @Override - public int getMetadata(int meta) { - return meta; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Glass1.java b/src/main/java/gregtech/common/blocks/GT_Item_Glass1.java deleted file mode 100644 index e8d0b6c236..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Glass1.java +++ /dev/null @@ -1,36 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -import gregtech.api.util.GT_LanguageManager; - -/** - * The glass types are split into separate files because they are registered as regular blocks, and a regular block can - * have - * 16 subtypes at most. - */ -public class GT_Item_Glass1 extends GT_Item_Casings_Abstract { - - protected final String chemicalGlassTooltip = GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + ".0.tooltip", - "Able to resist the most extreme chemical conditions."); - protected final String hawkingGlassTooltip = GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + ".4.tooltip", - "Controls the outward flow of Hawking Radiation to stabilize a black hole."); - - public GT_Item_Glass1(Block block) { - super(block); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - switch (getDamage(aStack)) { - case 0 -> aList.add(chemicalGlassTooltip); - case 4 -> aList.add(hawkingGlassTooltip); - } - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Granites.java b/src/main/java/gregtech/common/blocks/GT_Item_Granites.java deleted file mode 100644 index 6e3eb8f12c..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Granites.java +++ /dev/null @@ -1,10 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; - -public class GT_Item_Granites extends GT_Item_Stones_Abstract { - - public GT_Item_Granites(Block block) { - super(block); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_LongDistancePipe.java b/src/main/java/gregtech/common/blocks/GT_Item_LongDistancePipe.java deleted file mode 100644 index 52d0db5165..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_LongDistancePipe.java +++ /dev/null @@ -1,43 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -import gregtech.api.GregTech_API; -import gregtech.api.util.GT_LanguageManager; - -public class GT_Item_LongDistancePipe extends ItemBlock { - - protected final String mNoMobsToolTip = GT_LanguageManager - .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); - protected final String mNoTileEntityToolTip = GT_LanguageManager - .addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!"); - - public GT_Item_LongDistancePipe(Block block) { - super(block); - setMaxDamage(0); - setHasSubtypes(true); - setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS); - } - - @Override - public int getMetadata(int aMeta) { - return aMeta; - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - super.addInformation(aStack, aPlayer, aList, aF3_H); - aList.add(this.mNoMobsToolTip); - aList.add(this.mNoTileEntityToolTip); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Machines.java b/src/main/java/gregtech/common/blocks/GT_Item_Machines.java deleted file mode 100644 index 059a3fda94..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Machines.java +++ /dev/null @@ -1,430 +0,0 @@ -package gregtech.common.blocks; - -import static gregtech.GT_Mod.GT_FML_LOGGER; - -import java.util.List; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidContainerItem; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ISecondaryDescribable; -import gregtech.api.interfaces.metatileentity.IConnectable; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.CoverableTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Frame; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Item; -import gregtech.api.util.GT_ItsNotMyFaultException; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalTankBase; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_SuperChest; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_SuperTank; - -public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { - - public GT_Item_Machines(Block block) { - super(block); - setMaxDamage(0); - setHasSubtypes(true); - setCreativeTab(GregTech_API.TAB_GREGTECH); - } - - public static IMetaTileEntity getMetaTileEntity(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return null; - if (!(aStack.getItem() instanceof GT_Item_Machines)) return null; - if (aStack.getItemDamage() < 0 || aStack.getItemDamage() > GregTech_API.METATILEENTITIES.length) return null; - return GregTech_API.METATILEENTITIES[aStack.getItemDamage()]; - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - try { - final int tDamage = getDamage(aStack); - if ((tDamage <= 0) || (tDamage >= GregTech_API.METATILEENTITIES.length)) { - return; - } - - if (GregTech_API.METATILEENTITIES[tDamage] != null) { - final IGregTechTileEntity tTileEntity = GregTech_API.METATILEENTITIES[tDamage].getBaseMetaTileEntity(); - if (!GregTech_API.sPostloadFinished - && tTileEntity.getMetaTileEntity() instanceof ISecondaryDescribable) { - final String[] tSecondaryDescription = ((ISecondaryDescribable) tTileEntity.getMetaTileEntity()) - .getSecondaryDescription(); - addDescription(null, tSecondaryDescription, tDamage, "_Secondary"); - } - { - final IMetaTileEntity tMetaTileEntity = tTileEntity.getMetaTileEntity(); - final String tSuffix = (tMetaTileEntity instanceof ISecondaryDescribable - && ((ISecondaryDescribable) tMetaTileEntity).isDisplaySecondaryDescription()) ? "_Secondary" - : ""; - addDescription(aList, tTileEntity.getDescription(), tDamage, tSuffix); - tMetaTileEntity.addAdditionalTooltipInformation(aStack, aList); - } - if (tTileEntity.getEUCapacity() > 0L) { - if (tTileEntity.getInputVoltage() > 0L) { - final byte inputTier = GT_Utility.getTier(tTileEntity.getInputVoltage()); - aList.add( - GT_LanguageManager.addStringLocalization("TileEntity_EUp_IN", "Voltage IN: ") - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(tTileEntity.getInputVoltage()) - + " (" - + GT_Utility.getColoredTierNameFromTier(inputTier) - + EnumChatFormatting.GREEN - + ")" - + EnumChatFormatting.GRAY); - } - if (tTileEntity.getOutputVoltage() > 0L) { - final byte outputTier = GT_Utility.getTier(tTileEntity.getOutputVoltage()); - aList.add( - GT_LanguageManager.addStringLocalization("TileEntity_EUp_OUT", "Voltage OUT: ") - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(tTileEntity.getOutputVoltage()) - + " (" - + GT_Utility.getColoredTierNameFromTier(outputTier) - + EnumChatFormatting.GREEN - + ")" - + EnumChatFormatting.GRAY); - } - if (tTileEntity.getOutputAmperage() > 1L) { - aList.add( - GT_LanguageManager.addStringLocalization("TileEntity_EUp_AMOUNT", "Amperage: ") - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(tTileEntity.getOutputAmperage()) - + EnumChatFormatting.GRAY); - } - aList.add( - GT_LanguageManager.addStringLocalization("TileEntity_EUp_STORE", "Capacity: ") - + EnumChatFormatting.BLUE - + GT_Utility.formatNumbers(tTileEntity.getEUCapacity()) - + EnumChatFormatting.GRAY - + " EU"); - } - } - final NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - if (aNBT.getBoolean("mMuffler")) { - aList.add(GT_LanguageManager.addStringLocalization("GT_TileEntity_MUFFLER", "has Muffler Upgrade")); - } - if (aNBT.getBoolean("mSteamConverter")) { - aList.add( - GT_LanguageManager.addStringLocalization("GT_TileEntity_STEAMCONVERTER", "has Steam Upgrade")); - } - int tAmount = 0; - if ((tAmount = aNBT.getByte("mSteamTanks")) > 0) { - aList.add( - tAmount + " " - + GT_LanguageManager - .addStringLocalization("GT_TileEntity_STEAMTANKS", "Steam Tank Upgrades")); - } - - CoverableTileEntity.addInstalledCoversInformation(aNBT, aList); - if (aNBT.hasKey("mColor") && aNBT.getByte("mColor") != -1) { - aList.add( - GT_LanguageManager.addStringLocalization("GT_TileEntity_COLORED", "Colored") + " (" - + Dyes.get(aNBT.getByte("mColor") - 1).formatting - + Dyes.get(aNBT.getByte("mColor") - 1).mName - + EnumChatFormatting.GRAY - + ")"); - } - } - } catch (Throwable e) { - GT_FML_LOGGER.error("addInformation", e); - } - } - - private void addDescription(@Nullable List aList, @Nullable String[] aDescription, int aDamage, - String aSuffix) { - if (aDescription == null) return; - for (int i = 0, tLength = aDescription.length; i < tLength; i++) { - String tDescLine = aDescription[i]; - if (!GT_Utility.isStringValid(tDescLine)) continue; - - String tKey = String.format("TileEntity_DESCRIPTION_%05d%s_Index_%02d", aDamage, aSuffix, i); - if (tDescLine.contains("%%%")) { - final String[] tSplitStrings = tDescLine.split("%%%"); - final StringBuilder tBuffer = new StringBuilder(); - final String[] tRep = new String[tSplitStrings.length / 2]; - for (int j = 0; j < tSplitStrings.length; j++) if (j % 2 == 0) tBuffer.append(tSplitStrings[j]); - else { - tBuffer.append("%s"); - tRep[j / 2] = tSplitStrings[j]; - } - final String tTranslated = String - .format(GT_LanguageManager.addStringLocalization(tKey, tBuffer.toString()), (Object[]) tRep); - if (aList != null) aList.add(tTranslated); - } else { - String tTranslated = GT_LanguageManager.addStringLocalization(tKey, tDescLine); - if (aList != null) aList.add(tTranslated.equals("") ? tDescLine : tTranslated); - } - } - } - - @SideOnly(Side.CLIENT) - public void registerDescription(int aDamage) { - if (aDamage >= GregTech_API.METATILEENTITIES.length) return; - if (GregTech_API.METATILEENTITIES[aDamage] != null) { - final IMetaTileEntity tMetaTileEntity = GregTech_API.METATILEENTITIES[aDamage].getBaseMetaTileEntity() - .getMetaTileEntity(); - if (tMetaTileEntity instanceof ISecondaryDescribable) { - final String[] tSecondaryDescription = ((ISecondaryDescribable) tMetaTileEntity) - .getSecondaryDescription(); - addDescription(null, tSecondaryDescription, aDamage, "_Secondary"); - } - addDescription(null, tMetaTileEntity.getDescription(), aDamage, ""); - } - } - - @Override - public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, - int ordinalSide, float hitX, float hitY, float hitZ) { - return false; - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - final short tDamage = (short) getDamage(aStack); - if ((tDamage < 0) || (tDamage >= GregTech_API.METATILEENTITIES.length)) { - return ""; - } - if (GregTech_API.METATILEENTITIES[tDamage] != null) { - return getUnlocalizedName() + "." + GregTech_API.METATILEENTITIES[tDamage].getMetaName(); - } - return ""; - } - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - String aName = super.getItemStackDisplayName(aStack); - final short aDamage = (short) getDamage(aStack); - if (aDamage >= 0 && aDamage < GregTech_API.METATILEENTITIES.length - && GregTech_API.METATILEENTITIES[aDamage] != null) { - Materials aMaterial = null; - if (GregTech_API.METATILEENTITIES[aDamage] instanceof GT_MetaPipeEntity_Item) { - aMaterial = ((GT_MetaPipeEntity_Item) GregTech_API.METATILEENTITIES[aDamage]).mMaterial; - } else if (GregTech_API.METATILEENTITIES[aDamage] instanceof GT_MetaPipeEntity_Fluid) { - aMaterial = ((GT_MetaPipeEntity_Fluid) GregTech_API.METATILEENTITIES[aDamage]).mMaterial; - } else if (GregTech_API.METATILEENTITIES[aDamage] instanceof GT_MetaPipeEntity_Cable) { - aMaterial = ((GT_MetaPipeEntity_Cable) GregTech_API.METATILEENTITIES[aDamage]).mMaterial; - } else if (GregTech_API.METATILEENTITIES[aDamage] instanceof GT_MetaPipeEntity_Frame) { - aMaterial = ((GT_MetaPipeEntity_Frame) GregTech_API.METATILEENTITIES[aDamage]).mMaterial; - } - if (aMaterial != null) { - aName = aMaterial.getLocalizedNameForItem(aName); - } - } - return aName; - } - - @Override - public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - super.onCreated(aStack, aWorld, aPlayer); - final short tDamage = (short) getDamage(aStack); - if ((tDamage < 0) || ((tDamage >= GregTech_API.METATILEENTITIES.length) - && (GregTech_API.METATILEENTITIES[tDamage] != null))) { - GregTech_API.METATILEENTITIES[tDamage].onCreated(aStack, aWorld, aPlayer); - } - } - - @Override - public boolean placeBlockAt(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, - int ordinalSide, float hitX, float hitY, float hitZ, int aMeta) { - final ForgeDirection side = ForgeDirection.getOrientation(ordinalSide); - final short tDamage = (short) getDamage(aStack); - if (tDamage > 0) { - if (GregTech_API.METATILEENTITIES[tDamage] == null) { - return false; - } - final int tMetaData = GregTech_API.METATILEENTITIES[tDamage].getTileEntityBaseType(); - if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, tMetaData, 3)) { - return false; - } - if (aWorld.getBlock(aX, aY, aZ) != this.field_150939_a) { - throw new GT_ItsNotMyFaultException( - "Failed to place Block even though World.setBlock returned true. It COULD be MCPC/Bukkit causing that. In case you really have that installed, don't report this Bug to me, I don't know how to fix it."); - } - if (aWorld.getBlockMetadata(aX, aY, aZ) != tMetaData) { - throw new GT_ItsNotMyFaultException( - "Failed to set the MetaValue of the Block even though World.setBlock returned true. It COULD be MCPC/Bukkit causing that. In case you really have that installed, don't report this Bug to me, I don't know how to fix it."); - } - final IGregTechTileEntity tTileEntity = (IGregTechTileEntity) aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity != null) { - tTileEntity.setInitialValuesAsNBT(tTileEntity.isServerSide() ? aStack.getTagCompound() : null, tDamage); - if (aPlayer != null) { - tTileEntity.setOwnerName(aPlayer.getDisplayName()); - tTileEntity.setOwnerUuid(aPlayer.getUniqueID()); - } - tTileEntity.getMetaTileEntity() - .initDefaultModes(aStack.getTagCompound()); - final ForgeDirection oppositeSide = side.getOpposite(); - if (tTileEntity.getMetaTileEntity() instanceof IConnectable connectable) { - // If we're connectable, try connecting to whatever we're up against - connectable.connect(oppositeSide); - } else if (aPlayer != null && aPlayer.isSneaking()) { - // If we're being placed against something that is connectable, try telling it to connect to us - final IGregTechTileEntity aTileEntity = tTileEntity.getIGregTechTileEntityAtSide(oppositeSide); - if (aTileEntity != null && aTileEntity.getMetaTileEntity() instanceof IConnectable connectable) { - connectable.connect(side); - } - } - } - } else if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, tDamage, 3)) { - return false; - } - if (aWorld.getBlock(aX, aY, aZ) == this.field_150939_a) { - this.field_150939_a.onBlockPlacedBy(aWorld, aX, aY, aZ, aPlayer, aStack); - this.field_150939_a.onPostBlockPlaced(aWorld, aX, aY, aZ, tDamage); - } - return true; - } - - @Override - public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) { - super.onUpdate(aStack, aWorld, aPlayer, aTimer, aIsInHand); - final short tDamage = (short) getDamage(aStack); - final EntityLivingBase tPlayer = (EntityPlayer) aPlayer; - if (GregTech_API.METATILEENTITIES[tDamage] instanceof GT_MetaTileEntity_SuperChest - || GregTech_API.METATILEENTITIES[tDamage] instanceof GT_MetaTileEntity_SuperTank) { - final NBTTagCompound tNBT = aStack.stackTagCompound; - if (tNBT == null) return; - if (tNBT.hasNoTags()) { - aStack.setTagCompound(null); - return; - } - if ((tNBT.hasKey("mItemCount") && tNBT.getInteger("mItemCount") > 0) || (tNBT.hasKey("mFluid") - && FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("mFluid")).amount > 64000)) { - final FluidStack tFluid = FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("mFluid")); - int tEffectDuration = 1200; - if (tFluid != null) { - final double tFluidAmount = tFluid.amount; - final double tMiddlePoint = 4096000; - final double tSmoothingCoefficient = 2000000; - final int tMaxDuration = 12000; - final double tmp = (tFluidAmount - tMiddlePoint) / tSmoothingCoefficient; - tEffectDuration = (int) (Math.exp(tmp) / (Math.exp(tmp) + Math.exp(-tmp)) * tMaxDuration); - } - tPlayer.addPotionEffect(new PotionEffect(Potion.hunger.id, tEffectDuration, 1)); - tPlayer.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, tEffectDuration, 1)); - tPlayer.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, tEffectDuration, 1)); - tPlayer.addPotionEffect(new PotionEffect(Potion.weakness.id, tEffectDuration, 1)); - } - } - } - - @Override - public FluidStack getFluid(ItemStack container) { - if (container != null) { - final NBTTagCompound tNBT = container.stackTagCompound; - if (tNBT != null && tNBT.hasKey("mFluid", 10)) { - return FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("mFluid")); - } - } - return null; - } - - @Override - public int getCapacity(ItemStack container) { - if (container != null) { - final int tDamage = container.getItemDamage(); - final IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; - if (tMetaTile != null) return tMetaTile.getCapacity(); - } - return 0; - } - - @Nullable - private Fluid getLockedFluid(@Nonnull ItemStack container) { - final NBTTagCompound tag = container.stackTagCompound; - if (tag == null) return null; - String lockedName = tag.getString("lockedFluidName"); - if (GT_Utility.isStringInvalid(lockedName)) return null; - return FluidRegistry.getFluid(lockedName); - } - - @Override - public int fill(ItemStack container, FluidStack resource, boolean doFill) { - if (container != null && resource != null) { - final int tDamage = container.getItemDamage(); - final IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; - if (!(tMetaTile instanceof GT_MetaTileEntity_DigitalTankBase)) { - return 0; - } - if (container.stackTagCompound == null) container.stackTagCompound = new NBTTagCompound(); - final FluidStack tStoredFluid = getFluid(container); - final int tCapacity = getCapacity(container); - if (tCapacity <= 0) return 0; - final Fluid lockedFluid = getLockedFluid(container); - if (lockedFluid != null && resource.getFluid() != lockedFluid) { - return 0; - } - if (tStoredFluid != null && tStoredFluid.isFluidEqual(resource)) { - final int tAmount = Math.min(tCapacity - tStoredFluid.amount, resource.amount); - if (doFill) { - final FluidStack tNewFluid = new FluidStack(tStoredFluid, tAmount + tStoredFluid.amount); - container.stackTagCompound.setTag("mFluid", tNewFluid.writeToNBT(new NBTTagCompound())); - } - return tAmount; - } - if (tStoredFluid == null) { - final int tAmount = Math.min(tCapacity, resource.amount); - if (doFill) { - final FluidStack tNewFluid = new FluidStack(resource, tAmount); - container.stackTagCompound.setTag("mFluid", tNewFluid.writeToNBT(new NBTTagCompound())); - } - return tAmount; - } - } - return 0; - } - - @Override - public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) { - if (container != null && container.hasTagCompound()) { - final int tDamage = container.getItemDamage(); - final IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; - if (!(tMetaTile instanceof GT_MetaTileEntity_DigitalTankBase)) { - return null; - } - final FluidStack tStoredFluid = getFluid(container); - if (tStoredFluid != null) { - final int tAmount = Math.min(maxDrain, tStoredFluid.amount); - final FluidStack tNewFluid = new FluidStack(tStoredFluid, tStoredFluid.amount - tAmount); - final FluidStack tOutputFluid = new FluidStack(tStoredFluid, tAmount); - if (doDrain) { - if (tNewFluid.amount <= 0) { - container.stackTagCompound.removeTag("mFluid"); - if (container.stackTagCompound.hasNoTags()) container.setTagCompound(null); - } else { - container.stackTagCompound.setTag("mFluid", tNewFluid.writeToNBT(new NBTTagCompound())); - } - } - return tOutputFluid; - } - } - return null; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Ores.java b/src/main/java/gregtech/common/blocks/GT_Item_Ores.java deleted file mode 100644 index 2ba78572b3..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Ores.java +++ /dev/null @@ -1,81 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import org.apache.commons.lang3.StringUtils; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; - -public class GT_Item_Ores extends ItemBlock { - - public GT_Item_Ores(Block block) { - super(block); - setMaxDamage(0); - setHasSubtypes(true); - setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS); - } - - @Override - public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, - int ordinalSide, float hitX, float hitY, float hitZ) { - return false; - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack); - } - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - String aName = super.getItemStackDisplayName(aStack); - if (this.field_150939_a instanceof GT_Block_Ores_Abstract) { - aName = Materials.getLocalizedNameForItem(aName, aStack.getItemDamage() % 1000); - } - return aName; - } - - @Override - public boolean placeBlockAt(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, - int ordinalSide, float hitX, float hitY, float hitZ, int aMeta) { - short tDamage = (short) getDamage(aStack); - if (tDamage > 0) { - if (!aWorld.setBlock( - aX, - aY, - aZ, - this.field_150939_a, - GT_TileEntity_Ores.getHarvestData( - tDamage, - ((GT_Block_Ores_Abstract) field_150939_a).getBaseBlockHarvestLevel(aMeta % 16000 / 1000)), - 3)) { - return false; - } - GT_TileEntity_Ores tTileEntity = (GT_TileEntity_Ores) aWorld.getTileEntity(aX, aY, aZ); - tTileEntity.mMetaData = tDamage; - tTileEntity.mNatural = false; - } else if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, 0, 3)) { - return false; - } - if (aWorld.getBlock(aX, aY, aZ) == this.field_150939_a) { - this.field_150939_a.onBlockPlacedBy(aWorld, aX, aY, aZ, aPlayer, aStack); - this.field_150939_a.onPostBlockPlaced(aWorld, aX, aY, aZ, tDamage); - } - return true; - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - String formula = StatCollector - .translateToLocal(field_150939_a.getUnlocalizedName() + '.' + getDamage(aStack) + ".tooltip"); - if (!StringUtils.isBlank(formula)) aList.add(formula); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Stones_Abstract.java b/src/main/java/gregtech/common/blocks/GT_Item_Stones_Abstract.java deleted file mode 100644 index 5b73108301..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Stones_Abstract.java +++ /dev/null @@ -1,42 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -import gregtech.api.GregTech_API; -import gregtech.api.util.GT_LanguageManager; - -public class GT_Item_Stones_Abstract extends ItemBlock { - - private final String mNoMobsToolTip = GT_LanguageManager - .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); - - public GT_Item_Stones_Abstract(Block block) { - super(block); - setMaxDamage(0); - setHasSubtypes(true); - setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS); - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack); - } - - @Override - public int getMetadata(int aMeta) { - return aMeta; - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - super.addInformation(aStack, aPlayer, aList, aF3_H); - if (aStack.getItemDamage() % 8 >= 3) { - aList.add(this.mNoMobsToolTip); - } - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Storage.java b/src/main/java/gregtech/common/blocks/GT_Item_Storage.java deleted file mode 100644 index 4ac1b9cdfd..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_Storage.java +++ /dev/null @@ -1,47 +0,0 @@ -package gregtech.common.blocks; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; - -import gregtech.api.GregTech_API; - -public class GT_Item_Storage extends ItemBlock { - - public GT_Item_Storage(Block block) { - super(block); - setMaxDamage(0); - setHasSubtypes(true); - setCreativeTab(GregTech_API.TAB_GREGTECH_MATERIALS); - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack); - } - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - String aName = super.getItemStackDisplayName(aStack); - if (this.field_150939_a instanceof GT_Block_Metal) { - int aDamage = aStack.getItemDamage(); - if (aDamage >= 0 && aDamage < ((GT_Block_Metal) this.field_150939_a).mMats.length) { - aName = ((GT_Block_Metal) this.field_150939_a).mMats[aDamage].getLocalizedNameForItem(aName); - } - } - return aName; - } - - @Override - public int getMetadata(int aMeta) { - return aMeta; - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - super.addInformation(aStack, aPlayer, aList, aF3_H); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Item_TintedIndustrialGlass.java b/src/main/java/gregtech/common/blocks/GT_Item_TintedIndustrialGlass.java deleted file mode 100644 index 9f633922ac..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Item_TintedIndustrialGlass.java +++ /dev/null @@ -1,10 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.Block; - -public class GT_Item_TintedIndustrialGlass extends GT_Item_Casings_Abstract { - - public GT_Item_TintedIndustrialGlass(Block block) { - super(block); - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Material_Casings.java b/src/main/java/gregtech/common/blocks/GT_Material_Casings.java deleted file mode 100644 index 2fc839768f..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Material_Casings.java +++ /dev/null @@ -1,19 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.material.MapColor; -import net.minecraft.block.material.Material; - -public class GT_Material_Casings extends Material { - - public static final Material INSTANCE = new GT_Material_Casings(); - - private GT_Material_Casings() { - super(MapColor.ironColor); - setRequiresTool(); - } - - @Override - public boolean isOpaque() { - return true; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Material_Machines.java b/src/main/java/gregtech/common/blocks/GT_Material_Machines.java deleted file mode 100644 index df8b57226c..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Material_Machines.java +++ /dev/null @@ -1,19 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.material.MapColor; -import net.minecraft.block.material.Material; - -public class GT_Material_Machines extends Material { - - public GT_Material_Machines() { - super(MapColor.ironColor); - setRequiresTool(); - setImmovableMobility(); - setAdventureModeExempt(); - } - - @Override - public boolean isOpaque() { - return true; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Material_Reinforced.java b/src/main/java/gregtech/common/blocks/GT_Material_Reinforced.java deleted file mode 100644 index 2e3301bb60..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Material_Reinforced.java +++ /dev/null @@ -1,18 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.block.material.MapColor; -import net.minecraft.block.material.Material; - -public class GT_Material_Reinforced extends Material { - - public GT_Material_Reinforced() { - super(MapColor.stoneColor); - setRequiresTool(); - setAdventureModeExempt(); - } - - @Override - public boolean isOpaque() { - return true; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_Packet_Ores.java b/src/main/java/gregtech/common/blocks/GT_Packet_Ores.java deleted file mode 100644 index a65ac47c44..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_Packet_Ores.java +++ /dev/null @@ -1,62 +0,0 @@ -package gregtech.common.blocks; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.net.GT_PacketTypes; -import gregtech.api.net.GT_Packet_New; -import io.netty.buffer.ByteBuf; - -public class GT_Packet_Ores extends GT_Packet_New { - - private int mX; - private int mZ; - private short mY; - private short mMetaData; - - public GT_Packet_Ores() { - super(true); - } - - public GT_Packet_Ores(int aX, short aY, int aZ, short aMetaData) { - super(false); - this.mX = aX; - this.mY = aY; - this.mZ = aZ; - this.mMetaData = aMetaData; - } - - @Override - public void encode(ByteBuf aOut) { - aOut.writeInt(this.mX); - aOut.writeShort(this.mY); - aOut.writeInt(this.mZ); - aOut.writeShort(this.mMetaData); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new GT_Packet_Ores(aData.readInt(), aData.readShort(), aData.readInt(), aData.readShort()); - } - - @Override - public void process(IBlockAccess aWorld) { - if (aWorld != null) { - TileEntity tTileEntity = aWorld.getTileEntity(this.mX, this.mY, this.mZ); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - ((GT_TileEntity_Ores) tTileEntity).mMetaData = this.mMetaData; - } - if (((aWorld instanceof World)) && (((World) aWorld).isRemote)) { - ((World) aWorld).markBlockForUpdate(this.mX, this.mY, this.mZ); - } - } - } - - @Override - public byte getPacketID() { - return GT_PacketTypes.ORES.id; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java b/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java deleted file mode 100644 index de69c011a2..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_TileEntity_Ores.java +++ /dev/null @@ -1,486 +0,0 @@ -package gregtech.common.blocks; - -import static gregtech.api.enums.TextureSet.SET_NONE; - -import java.util.ArrayList; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.Packet; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import org.jetbrains.annotations.NotNull; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IAllSidedTexturedTileEntity; -import gregtech.api.objects.XSTR; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class GT_TileEntity_Ores extends TileEntity implements IAllSidedTexturedTileEntity { - - public short mMetaData = 0; - protected static boolean shouldFortune = false; - protected static boolean shouldSilkTouch = false; - public boolean mNatural = false; - public boolean mBlocked = true; - public boolean mBlockedChecked = false; - private short mMetadataForCachedTexture = -1; - private ITexture[] mCachedTexture; - - public static byte getHarvestData(short aMetaData, int aBaseBlockHarvestLevel) { - Materials aMaterial = GregTech_API.sGeneratedMaterials[(aMetaData % 1000)]; - byte tByte = aMaterial == null ? 0 - : (byte) Math - .max(aBaseBlockHarvestLevel, Math.min(7, aMaterial.mToolQuality - (aMetaData < 16000 ? 0 : 1))); - if (GT_Mod.gregtechproxy.mChangeHarvestLevels) { - tByte = aMaterial == null ? 0 - : (byte) Math.max( - aBaseBlockHarvestLevel, - Math.min( - GT_Mod.gregtechproxy.mMaxHarvestLevel, - GT_Mod.gregtechproxy.mHarvestLevel[aMaterial.mMetaItemSubID] - (aMetaData < 16000 ? 0 : 1))); - } - return tByte; - } - - public static boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData, boolean isSmallOre) { - return setOreBlock(aWorld, aX, aY, aZ, aMetaData, isSmallOre, true); - } - - public static boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData, boolean isSmallOre, - boolean air) { - if (!air) { - aY = Math.min(aWorld.getActualHeight(), Math.max(aY, 1)); - } - Block tBlock = aWorld.getBlock(aX, aY, aZ); - Block tOreBlock = GregTech_API.sBlockOres1; - int BlockMeta = aWorld.getBlockMetadata(aX, aY, aZ); - String BlockName = tBlock.getUnlocalizedName(); - aMetaData += isSmallOre ? 16000 : 0; - if ((aMetaData > 0) && ((tBlock != Blocks.air) || air)) { - if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.stone)) { - // Do nothing, stone background is default background. - // Do this comparison first since stone is most common - } else if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.netherrack)) { - aMetaData += 1000; - } else if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.end_stone)) { - aMetaData += 2000; - } else if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTech_API.sBlockGranites)) { - if (tBlock == GregTech_API.sBlockGranites) { - if (aWorld.getBlockMetadata(aX, aY, aZ) < 8) { - aMetaData += 3000; - } else { - aMetaData += 4000; - } - } else { - aMetaData += 3000; - } - } else if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTech_API.sBlockStones)) { - if (tBlock == GregTech_API.sBlockStones) { - if (aWorld.getBlockMetadata(aX, aY, aZ) < 8) { - aMetaData += 5000; - } else { - aMetaData += 6000; - } - } else { - aMetaData += 5000; - } - } else if (BlockName.equals("tile.igneousStone")) { - if (GregTech_API.sBlockOresUb1 != null) { - tOreBlock = GregTech_API.sBlockOresUb1; - aMetaData += (BlockMeta * 1000); - // GT_FML_LOGGER.info("Block changed to UB1"); - } - } else if (BlockName.equals("tile.metamorphicStone")) { - if (GregTech_API.sBlockOresUb2 != null) { - tOreBlock = GregTech_API.sBlockOresUb2; - aMetaData += (BlockMeta * 1000); - // GT_FML_LOGGER.info("Block changed to UB2"); - } - } else if (BlockName.equals("tile.sedimentaryStone")) { - if (GregTech_API.sBlockOresUb3 != null) { - tOreBlock = GregTech_API.sBlockOresUb3; - aMetaData += (BlockMeta * 1000); - // GT_FML_LOGGER.info("Block changed to UB3"); - } - } else { - return false; - } - // GT_FML_LOGGER.info(tOreBlock); - aWorld.setBlock( - aX, - aY, - aZ, - tOreBlock, - getHarvestData( - (short) aMetaData, - ((GT_Block_Ores_Abstract) tOreBlock).getBaseBlockHarvestLevel(aMetaData % 16000 / 1000)), - 0); - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - ((GT_TileEntity_Ores) tTileEntity).mMetaData = ((short) aMetaData); - ((GT_TileEntity_Ores) tTileEntity).mNatural = true; - } - return true; - } - return false; - } - - @Override - public void readFromNBT(NBTTagCompound aNBT) { - super.readFromNBT(aNBT); - this.mMetaData = aNBT.getShort("m"); - this.mNatural = aNBT.getBoolean("n"); - } - - @Override - public void writeToNBT(NBTTagCompound aNBT) { - super.writeToNBT(aNBT); - aNBT.setShort("m", this.mMetaData); - aNBT.setBoolean("n", this.mNatural); - } - - public void onUpdated() { - if ((!this.worldObj.isRemote) && (this.mBlocked)) { - this.mBlocked = false; - GT_Values.NW.sendPacketToAllPlayersInRange( - this.worldObj, - new GT_Packet_Ores(this.xCoord, (short) this.yCoord, this.zCoord, this.mMetaData), - this.xCoord, - this.zCoord); - } - } - - @Override - public Packet getDescriptionPacket() { - if (!this.worldObj.isRemote) { - boolean sendUpdate = mBlockedChecked ? !mBlocked : checkBlocked(); - if (sendUpdate) { - GT_Values.NW.sendPacketToAllPlayersInRange( - this.worldObj, - new GT_Packet_Ores(this.xCoord, (short) this.yCoord, this.zCoord, this.mMetaData), - this.xCoord, - this.zCoord); - } - } - return null; - } - - private boolean checkBlocked() { - // this is called very frequently and is performance critical. unroll the loop. - mBlockedChecked = true; - if (!worldObj.blockExists(xCoord + 1, yCoord, zCoord)) { - mBlockedChecked = false; - } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord + 1, yCoord, zCoord)) { - mBlocked = false; - return true; - } - if (!worldObj.blockExists(xCoord - 1, yCoord, zCoord)) { - mBlockedChecked = false; - } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord - 1, yCoord, zCoord)) { - mBlocked = false; - return true; - } - if (!worldObj.blockExists(xCoord, yCoord + 1, zCoord)) { - mBlockedChecked = false; - } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord, yCoord + 1, zCoord)) { - mBlocked = false; - return true; - } - if (!worldObj.blockExists(xCoord, yCoord - 1, zCoord)) { - mBlockedChecked = false; - } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord, yCoord - 1, zCoord)) { - mBlocked = false; - return true; - } - if (!worldObj.blockExists(xCoord, yCoord, zCoord + 1)) { - mBlockedChecked = false; - } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord, yCoord, zCoord + 1)) { - mBlocked = false; - return true; - } - if (!worldObj.blockExists(xCoord, yCoord, zCoord - 1)) { - mBlockedChecked = false; - } else if (!GT_Utility.isOpaqueBlock(worldObj, xCoord, yCoord, zCoord - 1)) { - mBlocked = false; - return true; - } - mBlocked = true; - return false; - } - - public void overrideOreBlockMaterial(Block aOverridingStoneBlock, byte aOverridingStoneMeta) { - if (this.worldObj == null || blockType == null) return; - this.mMetaData = ((short) (int) (this.mMetaData % 1000L + this.mMetaData / 16000L * 16000L)); - if (aOverridingStoneBlock - .isReplaceableOreGen(this.worldObj, this.xCoord, this.yCoord, this.zCoord, Blocks.netherrack)) { - this.mMetaData = ((short) (this.mMetaData + 1000)); - } else if (aOverridingStoneBlock - .isReplaceableOreGen(this.worldObj, this.xCoord, this.yCoord, this.zCoord, Blocks.end_stone)) { - this.mMetaData = ((short) (this.mMetaData + 2000)); - } else if (aOverridingStoneBlock.isReplaceableOreGen( - this.worldObj, - this.xCoord, - this.yCoord, - this.zCoord, - GregTech_API.sBlockGranites)) { - if (aOverridingStoneBlock == GregTech_API.sBlockGranites) { - if (aOverridingStoneMeta < 8) { - this.mMetaData = ((short) (this.mMetaData + 3000)); - } else { - this.mMetaData = ((short) (this.mMetaData + 4000)); - } - } else { - this.mMetaData = ((short) (this.mMetaData + 3000)); - } - } else if (aOverridingStoneBlock.isReplaceableOreGen( - this.worldObj, - this.xCoord, - this.yCoord, - this.zCoord, - GregTech_API.sBlockStones)) { - if (aOverridingStoneBlock == GregTech_API.sBlockStones) { - if (aOverridingStoneMeta < 8) { - this.mMetaData = ((short) (this.mMetaData + 5000)); - } else { - this.mMetaData = ((short) (this.mMetaData + 6000)); - } - } else { - this.mMetaData = ((short) (this.mMetaData + 5000)); - } - } - this.worldObj.setBlockMetadataWithNotify( - this.xCoord, - this.yCoord, - this.zCoord, - getHarvestData( - this.mMetaData, - ((GT_Block_Ores_Abstract) blockType).getBaseBlockHarvestLevel(mMetaData % 16000 / 1000)), - 0); - } - - public void convertOreBlock(World aWorld, int aX, int aY, int aZ) { - short aMeta = ((short) (this.mMetaData % 1000 + (this.mMetaData / 16000 * 16000))); - aWorld.setBlock(aX, aY, aZ, GregTech_API.sBlockOres1); - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof GT_TileEntity_Ores) { - ((GT_TileEntity_Ores) tTileEntity).mMetaData = aMeta; - this.worldObj.setBlockMetadataWithNotify( - this.xCoord, - this.yCoord, - this.zCoord, - getHarvestData( - aMeta, - ((GT_Block_Ores_Abstract) tTileEntity.blockType).getBaseBlockHarvestLevel(aMeta % 16000 / 1000)), - 0); - } - } - - public short getMetaData() { - return this.mMetaData; - } - - @Override - public boolean canUpdate() { - return false; - } - - public ArrayList getDrops(Block aDroppedOre, int aFortune) { - ArrayList rList = new ArrayList<>(); - if (this.mMetaData <= 0) { - rList.add(new ItemStack(Blocks.cobblestone, 1, 0)); - return rList; - } - Materials aOreMaterial = GregTech_API.sGeneratedMaterials[(this.mMetaData % 1000)]; - if (this.mMetaData < 16000) { - boolean tIsRich = false; - - // For Sake of god of balance! - - // Dense ore - - // NetherOre - if (GT_Mod.gregtechproxy.mNetherOreYieldMultiplier && !tIsRich) { - tIsRich = (this.mMetaData >= 1000 && this.mMetaData < 2000); - } - // EndOre - if (GT_Mod.gregtechproxy.mEndOreYieldMultiplier && !tIsRich) { - tIsRich = (this.mMetaData >= 2000 && this.mMetaData < 3000); - } - - // Silk Touch - if (shouldSilkTouch) { - rList.add(new ItemStack(aDroppedOre, 1, this.mMetaData)); - - } else { - switch (GT_Mod.gregtechproxy.oreDropSystem) { - case Item -> { - rList.add(GT_OreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, (tIsRich ? 2 : 1))); - } - // TODO: Test - case FortuneItem -> { - // if shouldFortune and isNatural then get fortune drops - // if not shouldFortune or not isNatural then get normal drops - // if not shouldFortune and isNatural then get normal drops - // if shouldFortune and not isNatural then get normal drops - if (shouldFortune && this.mNatural && aFortune > 0) { - int aMinAmount = 1; - // Max applicable fortune - if (aFortune > 3) aFortune = 3; - int amount = aMinAmount - + Math.max(worldObj.rand.nextInt(aFortune * (tIsRich ? 2 : 1) + 2) - 1, 0); - for (int i = 0; i < amount; i++) { - rList.add(GT_OreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, 1)); - } - } else { - for (int i = 0; i < (tIsRich ? 2 : 1); i++) { - rList.add(GT_OreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, 1)); - } - } - } - case UnifiedBlock -> { - // Unified ore - for (int i = 0; i < (tIsRich ? 2 : 1); i++) { - rList.add(new ItemStack(aDroppedOre, 1, this.mMetaData % 1000)); - } - } - case PerDimBlock -> { - // Per Dimension ore - if (tIsRich) { - rList.add(new ItemStack(aDroppedOre, 1, this.mMetaData)); - } else { - rList.add(new ItemStack(aDroppedOre, 1, this.mMetaData % 1000)); - } - } - case Block -> { - // Regular ore - rList.add(new ItemStack(aDroppedOre, 1, this.mMetaData)); - } - } - } - return rList; - } - - // Everyone gets a free small fortune boost - aFortune += 1; - if (!this.mNatural) { - aFortune = 0; - } - if (aOreMaterial != null) { - Random tRandom = new XSTR(this.xCoord ^ this.yCoord ^ this.zCoord); - ArrayList tSelector = new ArrayList<>(); - - Materials aMaterial = aOreMaterial.mOreReplacement; - - ItemStack tStack = GT_OreDictUnificator - .get(OrePrefixes.gemExquisite, aMaterial, GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 1L); - if (tStack != null) { - for (int i = 0; i < 1; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator - .get(OrePrefixes.gemFlawless, aMaterial, GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 1L); - if (tStack != null) { - for (int i = 0; i < 2; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L); - if (tStack != null) { - for (int i = 0; i < 12; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator.get( - OrePrefixes.gemFlawed, - aMaterial, - GT_OreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1L), - 1L); - if (tStack != null) { - for (int i = 0; i < 5; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1L); - if (tStack != null) { - for (int i = 0; i < 10; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator.get( - OrePrefixes.gemChipped, - aMaterial, - GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L), - 1L); - if (tStack != null) { - for (int i = 0; i < 5; i++) { - tSelector.add(tStack); - } - } - tStack = GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L); - if (tStack != null) { - for (int i = 0; i < 10; i++) { - tSelector.add(tStack); - } - } - if (!tSelector.isEmpty()) { - int i = 0; - for (int j = Math.max( - 1, - aMaterial.mOreMultiplier - + (aFortune > 0 ? tRandom.nextInt(1 + aFortune * aMaterial.mOreMultiplier) : 0) / 2); i - < j; i++) { - rList.add(GT_Utility.copyAmount(1, tSelector.get(tRandom.nextInt(tSelector.size())))); - } - } - if (tRandom.nextInt(3 + aFortune) > 1) { - Materials dustMat = ((GT_Block_Ores_Abstract) aDroppedOre).getDroppedDusts()[this.mMetaData / 1000 - % 16]; - if (dustMat != null) rList.add( - GT_OreDictUnificator - .get(tRandom.nextInt(3) > 0 ? OrePrefixes.dustImpure : OrePrefixes.dust, dustMat, 1L)); - } - } - return rList; - } - - @Override - public ITexture[] getTexture(Block aBlock) { - if (mMetadataForCachedTexture == mMetaData && mCachedTexture != null) return mCachedTexture; - - mMetadataForCachedTexture = mMetaData; - mCachedTexture = getTextureInternal(aBlock); - return mCachedTexture; - } - - private ITexture @NotNull [] getTextureInternal(Block aBlock) { - Materials aMaterial = GregTech_API.sGeneratedMaterials[(this.mMetaData % 1000)]; - if ((aMaterial != null) && (this.mMetaData < 32000) && (aBlock instanceof GT_Block_Ores_Abstract)) { - ITexture iTexture = TextureFactory.builder() - .addIcon( - aMaterial.mIconSet.mTextures[this.mMetaData / 16000 == 0 ? OrePrefixes.ore.mTextureIndex - : OrePrefixes.oreSmall.mTextureIndex]) - .setRGBA(aMaterial.mRGBa) - .stdOrient() - .build(); - return new ITexture[] { ((GT_Block_Ores_Abstract) aBlock).getTextureSet()[((this.mMetaData / 1000) % 16)], - iTexture }; - } - return new ITexture[] { TextureFactory.of(Blocks.stone, 0), TextureFactory.builder() - .addIcon(SET_NONE.mTextures[OrePrefixes.ore.mTextureIndex]) - .stdOrient() - .build() }; - } -} diff --git a/src/main/java/gregtech/common/blocks/GT_WormholeRenderBlock.java b/src/main/java/gregtech/common/blocks/GT_WormholeRenderBlock.java deleted file mode 100644 index 1c6e434477..0000000000 --- a/src/main/java/gregtech/common/blocks/GT_WormholeRenderBlock.java +++ /dev/null @@ -1,75 +0,0 @@ -package gregtech.common.blocks; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.common.tileentities.render.TileWormhole; - -public class GT_WormholeRenderBlock extends Block { - - public GT_WormholeRenderBlock() { - super(Material.iron); - this.setResistance(20f); - this.setHardness(-1.0f); - // this.setCreativeTab(TecTech.creativeTabTecTech); - this.setBlockName("WormholeRenderer"); - this.setLightLevel(100.0f); - GameRegistry.registerBlock(this, getUnlocalizedName()); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister iconRegister) { - blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT"); - } - - @Override - public String getUnlocalizedName() { - return "gt.wormholerenderer"; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public boolean canRenderInPass(int a) { - return true; - } - - @Override - public boolean renderAsNormalBlock() { - return false; - } - - @Override - public boolean hasTileEntity(int metadata) { - return true; - } - - @Override - public TileEntity createTileEntity(World world, int metadata) { - return new TileWormhole(); - } - - @Override - public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { - return new ArrayList<>(); - } - - @Override - public boolean isCollidable() { - return true; - } - -} diff --git a/src/main/java/gregtech/common/blocks/ItemBlockLaser.java b/src/main/java/gregtech/common/blocks/ItemBlockLaser.java new file mode 100644 index 0000000000..c8b4d4ce06 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemBlockLaser.java @@ -0,0 +1,24 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import gregtech.api.util.GTLanguageManager; + +public class ItemBlockLaser extends ItemBlock { + + public ItemBlockLaser(Block block) { + super(block); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean f3_h) { + tooltip.add( + GTLanguageManager + .addStringLocalization("gt.laserplatingtooltip", "Engineered to withstand extreme temperatures")); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemCasings1.java b/src/main/java/gregtech/common/blocks/ItemCasings1.java new file mode 100644 index 0000000000..ad1c8c09e1 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCasings1.java @@ -0,0 +1,14 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class ItemCasings1 extends ItemCasingsAbstract { + + public ItemCasings1(Block block) { + super(block); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemCasings10.java b/src/main/java/gregtech/common/blocks/ItemCasings10.java new file mode 100644 index 0000000000..0931987cd4 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCasings10.java @@ -0,0 +1,14 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class ItemCasings10 extends ItemCasingsAbstract { + + public ItemCasings10(Block block) { + super(block); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemCasings11.java b/src/main/java/gregtech/common/blocks/ItemCasings11.java new file mode 100644 index 0000000000..5cae92a55d --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCasings11.java @@ -0,0 +1,14 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class ItemCasings11 extends ItemCasingsAbstract { + + public ItemCasings11(Block block) { + super(block); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemCasings2.java b/src/main/java/gregtech/common/blocks/ItemCasings2.java new file mode 100644 index 0000000000..b0981c0dc3 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCasings2.java @@ -0,0 +1,26 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class ItemCasings2 extends ItemCasingsAbstract { + + public ItemCasings2(Block block) { + super(block); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + super.addInformation(aStack, aPlayer, aList, aF3_H); + if (getDamage(aStack) == 8) { + aList.add(this.mBlastProofTooltip); + } + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemCasings3.java b/src/main/java/gregtech/common/blocks/ItemCasings3.java new file mode 100644 index 0000000000..737c9e5145 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCasings3.java @@ -0,0 +1,14 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class ItemCasings3 extends ItemCasingsAbstract { + + public ItemCasings3(Block block) { + super(block); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemCasings4.java b/src/main/java/gregtech/common/blocks/ItemCasings4.java new file mode 100644 index 0000000000..97d160105a --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCasings4.java @@ -0,0 +1,14 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class ItemCasings4 extends ItemCasingsAbstract { + + public ItemCasings4(Block block) { + super(block); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemCasings5.java b/src/main/java/gregtech/common/blocks/ItemCasings5.java new file mode 100644 index 0000000000..4192fb2a64 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCasings5.java @@ -0,0 +1,36 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.util.GTLanguageManager; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class ItemCasings5 extends ItemCasingsAbstract { + + public ItemCasings5(Block block) { + super(block); + } + + protected static final String mCoilHeatTooltip = GTLanguageManager + .addStringLocalization("gt.coilheattooltip", "Base Heating Capacity = "); + protected static final String mCoilUnitTooltip = GTLanguageManager + .addStringLocalization("gt.coilunittooltip", " Kelvin"); + + @Override + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + super.addInformation(aStack, aPlayer, aList, aF3_H); + HeatingCoilLevel coilLevel = BlockCasings5.getCoilHeatFromDamage(aStack.getItemDamage()); + aList.add(mCoilHeatTooltip + coilLevel.getHeat() + mCoilUnitTooltip); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemCasings6.java b/src/main/java/gregtech/common/blocks/ItemCasings6.java new file mode 100644 index 0000000000..36a25f7796 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCasings6.java @@ -0,0 +1,14 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class ItemCasings6 extends ItemCasingsAbstract { + + public ItemCasings6(Block block) { + super(block); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemCasings8.java b/src/main/java/gregtech/common/blocks/ItemCasings8.java new file mode 100644 index 0000000000..7183d78986 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCasings8.java @@ -0,0 +1,14 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class ItemCasings8 extends ItemCasingsAbstract { + + public ItemCasings8(Block block) { + super(block); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemCasings9.java b/src/main/java/gregtech/common/blocks/ItemCasings9.java new file mode 100644 index 0000000000..c4ae95a2f7 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCasings9.java @@ -0,0 +1,28 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; + +/** + * The casings are split into separate files because they are registered as regular blocks, and a regular block can have + * 16 subtypes at most. + */ +public class ItemCasings9 extends ItemCasingsAbstract { + + public ItemCasings9(Block block) { + super(block); + } + + /* + * @Override + * public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + * // Add tooltip info if it was given + * String localizedTooltip = GTLanguageManager.getTranslation(aStack.getUnlocalizedName() + ".tooltip"); + * // getTranslation returns the key if no translation was found, but this just means + * // no tooltip was set. + * if (localizedTooltip.startsWith("gt.")) { + * aList.add(localizedTooltip); + * } + * super.addInformation(aStack, aPlayer, aList, aF3_H); + * } + */ +} diff --git a/src/main/java/gregtech/common/blocks/ItemCasingsAbstract.java b/src/main/java/gregtech/common/blocks/ItemCasingsAbstract.java new file mode 100644 index 0000000000..577b1fb821 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCasingsAbstract.java @@ -0,0 +1,63 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.util.GTLanguageManager; + +public abstract class ItemCasingsAbstract extends ItemBlock { + + protected final String mNoMobsToolTip = GTLanguageManager + .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); + protected final String mNoTileEntityToolTip = GTLanguageManager + .addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!"); + protected final String mCoil01Tooltip = GTLanguageManager + .addStringLocalization("gt.coil01tooltip", "Base Heating Capacity = 1800 Kelvin"); + protected final String mCoil02Tooltip = GTLanguageManager + .addStringLocalization("gt.coil02tooltip", "Base Heating Capacity = 2700 Kelvin"); + protected final String mCoil03Tooltip = GTLanguageManager + .addStringLocalization("gt.coil03tooltip", "Base Heating Capacity = 3600 Kelvin"); + protected final String mCoil04Tooltip = GTLanguageManager + .addStringLocalization("gt.coil04tooltip", "Base Heating Capacity = 4500 Kelvin"); + protected final String mCoil05Tooltip = GTLanguageManager + .addStringLocalization("gt.coil05tooltip", "Base Heating Capacity = 5400 Kelvin"); + protected final String mCoil06Tooltip = GTLanguageManager + .addStringLocalization("gt.coil06tooltip", "Base Heating Capacity = 7200 Kelvin"); + protected final String mCoil07Tooltip = GTLanguageManager + .addStringLocalization("gt.coil07tooltip", "Base Heating Capacity = 9001 Kelvin"); + protected final String mCoil08Tooltip = GTLanguageManager + .addStringLocalization("gt.coil08tooltip", "Base Heating Capacity = 9900 Kelvin"); + protected final String mCoil09Tooltip = GTLanguageManager + .addStringLocalization("gt.coil09tooltip", "Base Heating Capacity = 10800 Kelvin"); + protected final String mBlastProofTooltip = GTLanguageManager + .addStringLocalization("gt.blastprooftooltip", "This Block is Blast Proof"); + + public ItemCasingsAbstract(Block block) { + super(block); + setMaxDamage(0); + setHasSubtypes(true); + setCreativeTab(GregTechAPI.TAB_GREGTECH_MATERIALS); + } + + @Override + public int getMetadata(int aMeta) { + return aMeta; + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + super.addInformation(aStack, aPlayer, aList, aF3_H); + aList.add(this.mNoMobsToolTip); + aList.add(this.mNoTileEntityToolTip); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemConcretes.java b/src/main/java/gregtech/common/blocks/ItemConcretes.java new file mode 100644 index 0000000000..64f778d5d4 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemConcretes.java @@ -0,0 +1,25 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +import gregtech.api.util.GTLanguageManager; + +public class ItemConcretes extends ItemStonesAbstract { + + private final String mRunFasterToolTip = GTLanguageManager + .addStringLocalization("gt.runfastertooltip", "You can walk faster on this Block"); + + public ItemConcretes(Block block) { + super(block); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + super.addInformation(aStack, aPlayer, aList, aF3_H); + aList.add(this.mRunFasterToolTip); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemCyclotronCasings.java b/src/main/java/gregtech/common/blocks/ItemCyclotronCasings.java new file mode 100644 index 0000000000..febd101e0f --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemCyclotronCasings.java @@ -0,0 +1,10 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; + +public class ItemCyclotronCasings extends ItemCasingsAbstract { + + public ItemCyclotronCasings(Block block) { + super(block); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemFrames.java b/src/main/java/gregtech/common/blocks/ItemFrames.java new file mode 100644 index 0000000000..daa6ca2d2e --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemFrames.java @@ -0,0 +1,60 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.util.GTLanguageManager; + +public class ItemFrames extends ItemBlock { + + public ItemFrames(Block block) { + super(block); + setMaxDamage(0); + setHasSubtypes(true); + setCreativeTab(GregTechAPI.TAB_GREGTECH_MATERIALS); + } + + private Block block() { + return this.field_150939_a; + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return this.block() + .getUnlocalizedName() + "." + + getDamage(aStack); + } + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + String aName = super.getItemStackDisplayName(aStack); + if (this.block() instanceof BlockFrameBox) { + aName = Materials.getLocalizedNameForItem(aName, aStack.getItemDamage()); + } + return aName; + } + + @Override + public int getColorFromItemStack(ItemStack aStack, int aPass) { + int meta = aStack.getItemDamage(); + Materials material = BlockFrameBox.getMaterial(meta); + return (material.mRGBa[0] << 16) | (material.mRGBa[1] << 8) | material.mRGBa[2]; + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + aList.add(GTLanguageManager.getTranslation("gt.blockframes." + aStack.getItemDamage() + ".tooltip")); + aList.add(GTLanguageManager.getTranslation("gt.blockmachines.gt_frame.desc.format")); + } + + @Override + public int getMetadata(int meta) { + return meta; + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemGlass1.java b/src/main/java/gregtech/common/blocks/ItemGlass1.java new file mode 100644 index 0000000000..5605bba48d --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemGlass1.java @@ -0,0 +1,36 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +import gregtech.api.util.GTLanguageManager; + +/** + * The glass types are split into separate files because they are registered as regular blocks, and a regular block can + * have + * 16 subtypes at most. + */ +public class ItemGlass1 extends ItemCasingsAbstract { + + protected final String chemicalGlassTooltip = GTLanguageManager.addStringLocalization( + getUnlocalizedName() + ".0.tooltip", + "Able to resist the most extreme chemical conditions."); + protected final String hawkingGlassTooltip = GTLanguageManager.addStringLocalization( + getUnlocalizedName() + ".4.tooltip", + "Controls the outward flow of Hawking Radiation to stabilize a black hole."); + + public ItemGlass1(Block block) { + super(block); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + switch (getDamage(aStack)) { + case 0 -> aList.add(chemicalGlassTooltip); + case 4 -> aList.add(hawkingGlassTooltip); + } + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemGranites.java b/src/main/java/gregtech/common/blocks/ItemGranites.java new file mode 100644 index 0000000000..090ebc2a5a --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemGranites.java @@ -0,0 +1,10 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; + +public class ItemGranites extends ItemStonesAbstract { + + public ItemGranites(Block block) { + super(block); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemLongDistancePipe.java b/src/main/java/gregtech/common/blocks/ItemLongDistancePipe.java new file mode 100644 index 0000000000..55f5c2c768 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemLongDistancePipe.java @@ -0,0 +1,43 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.util.GTLanguageManager; + +public class ItemLongDistancePipe extends ItemBlock { + + protected final String mNoMobsToolTip = GTLanguageManager + .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); + protected final String mNoTileEntityToolTip = GTLanguageManager + .addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!"); + + public ItemLongDistancePipe(Block block) { + super(block); + setMaxDamage(0); + setHasSubtypes(true); + setCreativeTab(GregTechAPI.TAB_GREGTECH_MATERIALS); + } + + @Override + public int getMetadata(int aMeta) { + return aMeta; + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + super.addInformation(aStack, aPlayer, aList, aF3_H); + aList.add(this.mNoMobsToolTip); + aList.add(this.mNoTileEntityToolTip); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemMachines.java b/src/main/java/gregtech/common/blocks/ItemMachines.java new file mode 100644 index 0000000000..ff031c8456 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemMachines.java @@ -0,0 +1,430 @@ +package gregtech.common.blocks; + +import static gregtech.GTMod.GT_FML_LOGGER; + +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ISecondaryDescribable; +import gregtech.api.interfaces.metatileentity.IConnectable; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.CoverableTileEntity; +import gregtech.api.metatileentity.implementations.MTECable; +import gregtech.api.metatileentity.implementations.MTEFluid; +import gregtech.api.metatileentity.implementations.MTEFrame; +import gregtech.api.metatileentity.implementations.MTEItem; +import gregtech.api.util.GTItsNotMyFaultException; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.common.tileentities.storage.MTEDigitalTankBase; +import gregtech.common.tileentities.storage.MTESuperChest; +import gregtech.common.tileentities.storage.MTESuperTank; + +public class ItemMachines extends ItemBlock implements IFluidContainerItem { + + public ItemMachines(Block block) { + super(block); + setMaxDamage(0); + setHasSubtypes(true); + setCreativeTab(GregTechAPI.TAB_GREGTECH); + } + + public static IMetaTileEntity getMetaTileEntity(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return null; + if (!(aStack.getItem() instanceof ItemMachines)) return null; + if (aStack.getItemDamage() < 0 || aStack.getItemDamage() > GregTechAPI.METATILEENTITIES.length) return null; + return GregTechAPI.METATILEENTITIES[aStack.getItemDamage()]; + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + try { + final int tDamage = getDamage(aStack); + if ((tDamage <= 0) || (tDamage >= GregTechAPI.METATILEENTITIES.length)) { + return; + } + + if (GregTechAPI.METATILEENTITIES[tDamage] != null) { + final IGregTechTileEntity tTileEntity = GregTechAPI.METATILEENTITIES[tDamage].getBaseMetaTileEntity(); + if (!GregTechAPI.sPostloadFinished + && tTileEntity.getMetaTileEntity() instanceof ISecondaryDescribable) { + final String[] tSecondaryDescription = ((ISecondaryDescribable) tTileEntity.getMetaTileEntity()) + .getSecondaryDescription(); + addDescription(null, tSecondaryDescription, tDamage, "_Secondary"); + } + { + final IMetaTileEntity tMetaTileEntity = tTileEntity.getMetaTileEntity(); + final String tSuffix = (tMetaTileEntity instanceof ISecondaryDescribable + && ((ISecondaryDescribable) tMetaTileEntity).isDisplaySecondaryDescription()) ? "_Secondary" + : ""; + addDescription(aList, tTileEntity.getDescription(), tDamage, tSuffix); + tMetaTileEntity.addAdditionalTooltipInformation(aStack, aList); + } + if (tTileEntity.getEUCapacity() > 0L) { + if (tTileEntity.getInputVoltage() > 0L) { + final byte inputTier = GTUtility.getTier(tTileEntity.getInputVoltage()); + aList.add( + GTLanguageManager.addStringLocalization("TileEntity_EUp_IN", "Voltage IN: ") + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(tTileEntity.getInputVoltage()) + + " (" + + GTUtility.getColoredTierNameFromTier(inputTier) + + EnumChatFormatting.GREEN + + ")" + + EnumChatFormatting.GRAY); + } + if (tTileEntity.getOutputVoltage() > 0L) { + final byte outputTier = GTUtility.getTier(tTileEntity.getOutputVoltage()); + aList.add( + GTLanguageManager.addStringLocalization("TileEntity_EUp_OUT", "Voltage OUT: ") + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(tTileEntity.getOutputVoltage()) + + " (" + + GTUtility.getColoredTierNameFromTier(outputTier) + + EnumChatFormatting.GREEN + + ")" + + EnumChatFormatting.GRAY); + } + if (tTileEntity.getOutputAmperage() > 1L) { + aList.add( + GTLanguageManager.addStringLocalization("TileEntity_EUp_AMOUNT", "Amperage: ") + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(tTileEntity.getOutputAmperage()) + + EnumChatFormatting.GRAY); + } + aList.add( + GTLanguageManager.addStringLocalization("TileEntity_EUp_STORE", "Capacity: ") + + EnumChatFormatting.BLUE + + GTUtility.formatNumbers(tTileEntity.getEUCapacity()) + + EnumChatFormatting.GRAY + + " EU"); + } + } + final NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + if (aNBT.getBoolean("mMuffler")) { + aList.add(GTLanguageManager.addStringLocalization("GT_TileEntity_MUFFLER", "has Muffler Upgrade")); + } + if (aNBT.getBoolean("mSteamConverter")) { + aList.add( + GTLanguageManager.addStringLocalization("GT_TileEntity_STEAMCONVERTER", "has Steam Upgrade")); + } + int tAmount = 0; + if ((tAmount = aNBT.getByte("mSteamTanks")) > 0) { + aList.add( + tAmount + " " + + GTLanguageManager + .addStringLocalization("GT_TileEntity_STEAMTANKS", "Steam Tank Upgrades")); + } + + CoverableTileEntity.addInstalledCoversInformation(aNBT, aList); + if (aNBT.hasKey("mColor") && aNBT.getByte("mColor") != -1) { + aList.add( + GTLanguageManager.addStringLocalization("GT_TileEntity_COLORED", "Colored") + " (" + + Dyes.get(aNBT.getByte("mColor") - 1).formatting + + Dyes.get(aNBT.getByte("mColor") - 1).mName + + EnumChatFormatting.GRAY + + ")"); + } + } + } catch (Throwable e) { + GT_FML_LOGGER.error("addInformation", e); + } + } + + private void addDescription(@Nullable List aList, @Nullable String[] aDescription, int aDamage, + String aSuffix) { + if (aDescription == null) return; + for (int i = 0, tLength = aDescription.length; i < tLength; i++) { + String tDescLine = aDescription[i]; + if (!GTUtility.isStringValid(tDescLine)) continue; + + String tKey = String.format("TileEntity_DESCRIPTION_%05d%s_Index_%02d", aDamage, aSuffix, i); + if (tDescLine.contains("%%%")) { + final String[] tSplitStrings = tDescLine.split("%%%"); + final StringBuilder tBuffer = new StringBuilder(); + final String[] tRep = new String[tSplitStrings.length / 2]; + for (int j = 0; j < tSplitStrings.length; j++) if (j % 2 == 0) tBuffer.append(tSplitStrings[j]); + else { + tBuffer.append("%s"); + tRep[j / 2] = tSplitStrings[j]; + } + final String tTranslated = String + .format(GTLanguageManager.addStringLocalization(tKey, tBuffer.toString()), (Object[]) tRep); + if (aList != null) aList.add(tTranslated); + } else { + String tTranslated = GTLanguageManager.addStringLocalization(tKey, tDescLine); + if (aList != null) aList.add(tTranslated.equals("") ? tDescLine : tTranslated); + } + } + } + + @SideOnly(Side.CLIENT) + public void registerDescription(int aDamage) { + if (aDamage >= GregTechAPI.METATILEENTITIES.length) return; + if (GregTechAPI.METATILEENTITIES[aDamage] != null) { + final IMetaTileEntity tMetaTileEntity = GregTechAPI.METATILEENTITIES[aDamage].getBaseMetaTileEntity() + .getMetaTileEntity(); + if (tMetaTileEntity instanceof ISecondaryDescribable) { + final String[] tSecondaryDescription = ((ISecondaryDescribable) tMetaTileEntity) + .getSecondaryDescription(); + addDescription(null, tSecondaryDescription, aDamage, "_Secondary"); + } + addDescription(null, tMetaTileEntity.getDescription(), aDamage, ""); + } + } + + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, + int ordinalSide, float hitX, float hitY, float hitZ) { + return false; + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + final short tDamage = (short) getDamage(aStack); + if ((tDamage < 0) || (tDamage >= GregTechAPI.METATILEENTITIES.length)) { + return ""; + } + if (GregTechAPI.METATILEENTITIES[tDamage] != null) { + return getUnlocalizedName() + "." + GregTechAPI.METATILEENTITIES[tDamage].getMetaName(); + } + return ""; + } + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + String aName = super.getItemStackDisplayName(aStack); + final short aDamage = (short) getDamage(aStack); + if (aDamage >= 0 && aDamage < GregTechAPI.METATILEENTITIES.length + && GregTechAPI.METATILEENTITIES[aDamage] != null) { + Materials aMaterial = null; + if (GregTechAPI.METATILEENTITIES[aDamage] instanceof MTEItem) { + aMaterial = ((MTEItem) GregTechAPI.METATILEENTITIES[aDamage]).mMaterial; + } else if (GregTechAPI.METATILEENTITIES[aDamage] instanceof MTEFluid) { + aMaterial = ((MTEFluid) GregTechAPI.METATILEENTITIES[aDamage]).mMaterial; + } else if (GregTechAPI.METATILEENTITIES[aDamage] instanceof MTECable) { + aMaterial = ((MTECable) GregTechAPI.METATILEENTITIES[aDamage]).mMaterial; + } else if (GregTechAPI.METATILEENTITIES[aDamage] instanceof MTEFrame) { + aMaterial = ((MTEFrame) GregTechAPI.METATILEENTITIES[aDamage]).mMaterial; + } + if (aMaterial != null) { + aName = aMaterial.getLocalizedNameForItem(aName); + } + } + return aName; + } + + @Override + public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + super.onCreated(aStack, aWorld, aPlayer); + final short tDamage = (short) getDamage(aStack); + if ((tDamage < 0) + || ((tDamage >= GregTechAPI.METATILEENTITIES.length) && (GregTechAPI.METATILEENTITIES[tDamage] != null))) { + GregTechAPI.METATILEENTITIES[tDamage].onCreated(aStack, aWorld, aPlayer); + } + } + + @Override + public boolean placeBlockAt(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, + int ordinalSide, float hitX, float hitY, float hitZ, int aMeta) { + final ForgeDirection side = ForgeDirection.getOrientation(ordinalSide); + final short tDamage = (short) getDamage(aStack); + if (tDamage > 0) { + if (GregTechAPI.METATILEENTITIES[tDamage] == null) { + return false; + } + final int tMetaData = GregTechAPI.METATILEENTITIES[tDamage].getTileEntityBaseType(); + if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, tMetaData, 3)) { + return false; + } + if (aWorld.getBlock(aX, aY, aZ) != this.field_150939_a) { + throw new GTItsNotMyFaultException( + "Failed to place Block even though World.setBlock returned true. It COULD be MCPC/Bukkit causing that. In case you really have that installed, don't report this Bug to me, I don't know how to fix it."); + } + if (aWorld.getBlockMetadata(aX, aY, aZ) != tMetaData) { + throw new GTItsNotMyFaultException( + "Failed to set the MetaValue of the Block even though World.setBlock returned true. It COULD be MCPC/Bukkit causing that. In case you really have that installed, don't report this Bug to me, I don't know how to fix it."); + } + final IGregTechTileEntity tTileEntity = (IGregTechTileEntity) aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity != null) { + tTileEntity.setInitialValuesAsNBT(tTileEntity.isServerSide() ? aStack.getTagCompound() : null, tDamage); + if (aPlayer != null) { + tTileEntity.setOwnerName(aPlayer.getDisplayName()); + tTileEntity.setOwnerUuid(aPlayer.getUniqueID()); + } + tTileEntity.getMetaTileEntity() + .initDefaultModes(aStack.getTagCompound()); + final ForgeDirection oppositeSide = side.getOpposite(); + if (tTileEntity.getMetaTileEntity() instanceof IConnectable connectable) { + // If we're connectable, try connecting to whatever we're up against + connectable.connect(oppositeSide); + } else if (aPlayer != null && aPlayer.isSneaking()) { + // If we're being placed against something that is connectable, try telling it to connect to us + final IGregTechTileEntity aTileEntity = tTileEntity.getIGregTechTileEntityAtSide(oppositeSide); + if (aTileEntity != null && aTileEntity.getMetaTileEntity() instanceof IConnectable connectable) { + connectable.connect(side); + } + } + } + } else if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, tDamage, 3)) { + return false; + } + if (aWorld.getBlock(aX, aY, aZ) == this.field_150939_a) { + this.field_150939_a.onBlockPlacedBy(aWorld, aX, aY, aZ, aPlayer, aStack); + this.field_150939_a.onPostBlockPlaced(aWorld, aX, aY, aZ, tDamage); + } + return true; + } + + @Override + public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) { + super.onUpdate(aStack, aWorld, aPlayer, aTimer, aIsInHand); + final short tDamage = (short) getDamage(aStack); + final EntityLivingBase tPlayer = (EntityPlayer) aPlayer; + if (GregTechAPI.METATILEENTITIES[tDamage] instanceof MTESuperChest + || GregTechAPI.METATILEENTITIES[tDamage] instanceof MTESuperTank) { + final NBTTagCompound tNBT = aStack.stackTagCompound; + if (tNBT == null) return; + if (tNBT.hasNoTags()) { + aStack.setTagCompound(null); + return; + } + if ((tNBT.hasKey("mItemCount") && tNBT.getInteger("mItemCount") > 0) || (tNBT.hasKey("mFluid") + && FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("mFluid")).amount > 64000)) { + final FluidStack tFluid = FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("mFluid")); + int tEffectDuration = 1200; + if (tFluid != null) { + final double tFluidAmount = tFluid.amount; + final double tMiddlePoint = 4096000; + final double tSmoothingCoefficient = 2000000; + final int tMaxDuration = 12000; + final double tmp = (tFluidAmount - tMiddlePoint) / tSmoothingCoefficient; + tEffectDuration = (int) (Math.exp(tmp) / (Math.exp(tmp) + Math.exp(-tmp)) * tMaxDuration); + } + tPlayer.addPotionEffect(new PotionEffect(Potion.hunger.id, tEffectDuration, 1)); + tPlayer.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, tEffectDuration, 1)); + tPlayer.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, tEffectDuration, 1)); + tPlayer.addPotionEffect(new PotionEffect(Potion.weakness.id, tEffectDuration, 1)); + } + } + } + + @Override + public FluidStack getFluid(ItemStack container) { + if (container != null) { + final NBTTagCompound tNBT = container.stackTagCompound; + if (tNBT != null && tNBT.hasKey("mFluid", 10)) { + return FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("mFluid")); + } + } + return null; + } + + @Override + public int getCapacity(ItemStack container) { + if (container != null) { + final int tDamage = container.getItemDamage(); + final IMetaTileEntity tMetaTile = GregTechAPI.METATILEENTITIES[tDamage]; + if (tMetaTile != null) return tMetaTile.getCapacity(); + } + return 0; + } + + @Nullable + private Fluid getLockedFluid(@Nonnull ItemStack container) { + final NBTTagCompound tag = container.stackTagCompound; + if (tag == null) return null; + String lockedName = tag.getString("lockedFluidName"); + if (GTUtility.isStringInvalid(lockedName)) return null; + return FluidRegistry.getFluid(lockedName); + } + + @Override + public int fill(ItemStack container, FluidStack resource, boolean doFill) { + if (container != null && resource != null) { + final int tDamage = container.getItemDamage(); + final IMetaTileEntity tMetaTile = GregTechAPI.METATILEENTITIES[tDamage]; + if (!(tMetaTile instanceof MTEDigitalTankBase)) { + return 0; + } + if (container.stackTagCompound == null) container.stackTagCompound = new NBTTagCompound(); + final FluidStack tStoredFluid = getFluid(container); + final int tCapacity = getCapacity(container); + if (tCapacity <= 0) return 0; + final Fluid lockedFluid = getLockedFluid(container); + if (lockedFluid != null && resource.getFluid() != lockedFluid) { + return 0; + } + if (tStoredFluid != null && tStoredFluid.isFluidEqual(resource)) { + final int tAmount = Math.min(tCapacity - tStoredFluid.amount, resource.amount); + if (doFill) { + final FluidStack tNewFluid = new FluidStack(tStoredFluid, tAmount + tStoredFluid.amount); + container.stackTagCompound.setTag("mFluid", tNewFluid.writeToNBT(new NBTTagCompound())); + } + return tAmount; + } + if (tStoredFluid == null) { + final int tAmount = Math.min(tCapacity, resource.amount); + if (doFill) { + final FluidStack tNewFluid = new FluidStack(resource, tAmount); + container.stackTagCompound.setTag("mFluid", tNewFluid.writeToNBT(new NBTTagCompound())); + } + return tAmount; + } + } + return 0; + } + + @Override + public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) { + if (container != null && container.hasTagCompound()) { + final int tDamage = container.getItemDamage(); + final IMetaTileEntity tMetaTile = GregTechAPI.METATILEENTITIES[tDamage]; + if (!(tMetaTile instanceof MTEDigitalTankBase)) { + return null; + } + final FluidStack tStoredFluid = getFluid(container); + if (tStoredFluid != null) { + final int tAmount = Math.min(maxDrain, tStoredFluid.amount); + final FluidStack tNewFluid = new FluidStack(tStoredFluid, tStoredFluid.amount - tAmount); + final FluidStack tOutputFluid = new FluidStack(tStoredFluid, tAmount); + if (doDrain) { + if (tNewFluid.amount <= 0) { + container.stackTagCompound.removeTag("mFluid"); + if (container.stackTagCompound.hasNoTags()) container.setTagCompound(null); + } else { + container.stackTagCompound.setTag("mFluid", tNewFluid.writeToNBT(new NBTTagCompound())); + } + } + return tOutputFluid; + } + } + return null; + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemOres.java b/src/main/java/gregtech/common/blocks/ItemOres.java new file mode 100644 index 0000000000..0691142bc3 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemOres.java @@ -0,0 +1,81 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import org.apache.commons.lang3.StringUtils; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; + +public class ItemOres extends ItemBlock { + + public ItemOres(Block block) { + super(block); + setMaxDamage(0); + setHasSubtypes(true); + setCreativeTab(GregTechAPI.TAB_GREGTECH_MATERIALS); + } + + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, + int ordinalSide, float hitX, float hitY, float hitZ) { + return false; + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack); + } + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + String aName = super.getItemStackDisplayName(aStack); + if (this.field_150939_a instanceof BlockOresAbstract) { + aName = Materials.getLocalizedNameForItem(aName, aStack.getItemDamage() % 1000); + } + return aName; + } + + @Override + public boolean placeBlockAt(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, + int ordinalSide, float hitX, float hitY, float hitZ, int aMeta) { + short tDamage = (short) getDamage(aStack); + if (tDamage > 0) { + if (!aWorld.setBlock( + aX, + aY, + aZ, + this.field_150939_a, + TileEntityOres.getHarvestData( + tDamage, + ((BlockOresAbstract) field_150939_a).getBaseBlockHarvestLevel(aMeta % 16000 / 1000)), + 3)) { + return false; + } + TileEntityOres tTileEntity = (TileEntityOres) aWorld.getTileEntity(aX, aY, aZ); + tTileEntity.mMetaData = tDamage; + tTileEntity.mNatural = false; + } else if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, 0, 3)) { + return false; + } + if (aWorld.getBlock(aX, aY, aZ) == this.field_150939_a) { + this.field_150939_a.onBlockPlacedBy(aWorld, aX, aY, aZ, aPlayer, aStack); + this.field_150939_a.onPostBlockPlaced(aWorld, aX, aY, aZ, tDamage); + } + return true; + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + String formula = StatCollector + .translateToLocal(field_150939_a.getUnlocalizedName() + '.' + getDamage(aStack) + ".tooltip"); + if (!StringUtils.isBlank(formula)) aList.add(formula); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemStonesAbstract.java b/src/main/java/gregtech/common/blocks/ItemStonesAbstract.java new file mode 100644 index 0000000000..b8f924b609 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemStonesAbstract.java @@ -0,0 +1,42 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.util.GTLanguageManager; + +public class ItemStonesAbstract extends ItemBlock { + + private final String mNoMobsToolTip = GTLanguageManager + .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); + + public ItemStonesAbstract(Block block) { + super(block); + setMaxDamage(0); + setHasSubtypes(true); + setCreativeTab(GregTechAPI.TAB_GREGTECH_MATERIALS); + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack); + } + + @Override + public int getMetadata(int aMeta) { + return aMeta; + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + super.addInformation(aStack, aPlayer, aList, aF3_H); + if (aStack.getItemDamage() % 8 >= 3) { + aList.add(this.mNoMobsToolTip); + } + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemStorage.java b/src/main/java/gregtech/common/blocks/ItemStorage.java new file mode 100644 index 0000000000..6dd0a2a6b4 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemStorage.java @@ -0,0 +1,47 @@ +package gregtech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; + +public class ItemStorage extends ItemBlock { + + public ItemStorage(Block block) { + super(block); + setMaxDamage(0); + setHasSubtypes(true); + setCreativeTab(GregTechAPI.TAB_GREGTECH_MATERIALS); + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return this.field_150939_a.getUnlocalizedName() + "." + getDamage(aStack); + } + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + String aName = super.getItemStackDisplayName(aStack); + if (this.field_150939_a instanceof BlockMetal) { + int aDamage = aStack.getItemDamage(); + if (aDamage >= 0 && aDamage < ((BlockMetal) this.field_150939_a).mMats.length) { + aName = ((BlockMetal) this.field_150939_a).mMats[aDamage].getLocalizedNameForItem(aName); + } + } + return aName; + } + + @Override + public int getMetadata(int aMeta) { + return aMeta; + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + super.addInformation(aStack, aPlayer, aList, aF3_H); + } +} diff --git a/src/main/java/gregtech/common/blocks/ItemTintedIndustrialGlass.java b/src/main/java/gregtech/common/blocks/ItemTintedIndustrialGlass.java new file mode 100644 index 0000000000..bba737ad15 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/ItemTintedIndustrialGlass.java @@ -0,0 +1,10 @@ +package gregtech.common.blocks; + +import net.minecraft.block.Block; + +public class ItemTintedIndustrialGlass extends ItemCasingsAbstract { + + public ItemTintedIndustrialGlass(Block block) { + super(block); + } +} diff --git a/src/main/java/gregtech/common/blocks/MaterialCasings.java b/src/main/java/gregtech/common/blocks/MaterialCasings.java new file mode 100644 index 0000000000..cde784d137 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/MaterialCasings.java @@ -0,0 +1,19 @@ +package gregtech.common.blocks; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; + +public class MaterialCasings extends Material { + + public static final Material INSTANCE = new MaterialCasings(); + + private MaterialCasings() { + super(MapColor.ironColor); + setRequiresTool(); + } + + @Override + public boolean isOpaque() { + return true; + } +} diff --git a/src/main/java/gregtech/common/blocks/MaterialMachines.java b/src/main/java/gregtech/common/blocks/MaterialMachines.java new file mode 100644 index 0000000000..311b72c764 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/MaterialMachines.java @@ -0,0 +1,19 @@ +package gregtech.common.blocks; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; + +public class MaterialMachines extends Material { + + public MaterialMachines() { + super(MapColor.ironColor); + setRequiresTool(); + setImmovableMobility(); + setAdventureModeExempt(); + } + + @Override + public boolean isOpaque() { + return true; + } +} diff --git a/src/main/java/gregtech/common/blocks/MaterialReinforced.java b/src/main/java/gregtech/common/blocks/MaterialReinforced.java new file mode 100644 index 0000000000..b5256d306d --- /dev/null +++ b/src/main/java/gregtech/common/blocks/MaterialReinforced.java @@ -0,0 +1,18 @@ +package gregtech.common.blocks; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; + +public class MaterialReinforced extends Material { + + public MaterialReinforced() { + super(MapColor.stoneColor); + setRequiresTool(); + setAdventureModeExempt(); + } + + @Override + public boolean isOpaque() { + return true; + } +} diff --git a/src/main/java/gregtech/common/blocks/PacketOres.java b/src/main/java/gregtech/common/blocks/PacketOres.java new file mode 100644 index 0000000000..6548f8ae66 --- /dev/null +++ b/src/main/java/gregtech/common/blocks/PacketOres.java @@ -0,0 +1,62 @@ +package gregtech.common.blocks; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.api.net.GTPacketNew; +import gregtech.api.net.GTPacketTypes; +import io.netty.buffer.ByteBuf; + +public class PacketOres extends GTPacketNew { + + private int mX; + private int mZ; + private short mY; + private short mMetaData; + + public PacketOres() { + super(true); + } + + public PacketOres(int aX, short aY, int aZ, short aMetaData) { + super(false); + this.mX = aX; + this.mY = aY; + this.mZ = aZ; + this.mMetaData = aMetaData; + } + + @Override + public void encode(ByteBuf aOut) { + aOut.writeInt(this.mX); + aOut.writeShort(this.mY); + aOut.writeInt(this.mZ); + aOut.writeShort(this.mMetaData); + } + + @Override + public GTPacketNew decode(ByteArrayDataInput aData) { + return new PacketOres(aData.readInt(), aData.readShort(), aData.readInt(), aData.readShort()); + } + + @Override + public void process(IBlockAccess aWorld) { + if (aWorld != null) { + TileEntity tTileEntity = aWorld.getTileEntity(this.mX, this.mY, this.mZ); + if ((tTileEntity instanceof TileEntityOres)) { + ((TileEntityOres) tTileEntity).mMetaData = this.mMetaData; + } + if (((aWorld instanceof World)) && (((World) aWorld).isRemote)) { + ((World) aWorld).markBlockForUpdate(this.mX, this.mY, this.mZ); + } + } + } + + @Override + public byte getPacketID() { + return GTPacketTypes.ORES.id; + } +} diff --git a/src/main/java/gregtech/common/blocks/TileEntityOres.java b/src/main/java/gregtech/common/blocks/TileEntityOres.java new file mode 100644 index 0000000000..9ddcbcc19c --- /dev/null +++ b/src/main/java/gregtech/common/blocks/TileEntityOres.java @@ -0,0 +1,482 @@ +package gregtech.common.blocks; + +import static gregtech.api.enums.TextureSet.SET_NONE; + +import java.util.ArrayList; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.Packet; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import org.jetbrains.annotations.NotNull; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IAllSidedTexturedTileEntity; +import gregtech.api.objects.XSTR; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class TileEntityOres extends TileEntity implements IAllSidedTexturedTileEntity { + + public short mMetaData = 0; + protected static boolean shouldFortune = false; + protected static boolean shouldSilkTouch = false; + public boolean mNatural = false; + public boolean mBlocked = true; + public boolean mBlockedChecked = false; + private short mMetadataForCachedTexture = -1; + private ITexture[] mCachedTexture; + + public static byte getHarvestData(short aMetaData, int aBaseBlockHarvestLevel) { + Materials aMaterial = GregTechAPI.sGeneratedMaterials[(aMetaData % 1000)]; + byte tByte = aMaterial == null ? 0 + : (byte) Math + .max(aBaseBlockHarvestLevel, Math.min(7, aMaterial.mToolQuality - (aMetaData < 16000 ? 0 : 1))); + if (GTMod.gregtechproxy.mChangeHarvestLevels) { + tByte = aMaterial == null ? 0 + : (byte) Math.max( + aBaseBlockHarvestLevel, + Math.min( + GTMod.gregtechproxy.mMaxHarvestLevel, + GTMod.gregtechproxy.mHarvestLevel[aMaterial.mMetaItemSubID] - (aMetaData < 16000 ? 0 : 1))); + } + return tByte; + } + + public static boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData, boolean isSmallOre) { + return setOreBlock(aWorld, aX, aY, aZ, aMetaData, isSmallOre, true); + } + + public static boolean setOreBlock(World aWorld, int aX, int aY, int aZ, int aMetaData, boolean isSmallOre, + boolean air) { + if (!air) { + aY = Math.min(aWorld.getActualHeight(), Math.max(aY, 1)); + } + Block tBlock = aWorld.getBlock(aX, aY, aZ); + Block tOreBlock = GregTechAPI.sBlockOres1; + int BlockMeta = aWorld.getBlockMetadata(aX, aY, aZ); + String BlockName = tBlock.getUnlocalizedName(); + aMetaData += isSmallOre ? 16000 : 0; + if ((aMetaData > 0) && ((tBlock != Blocks.air) || air)) { + if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.stone)) { + // Do nothing, stone background is default background. + // Do this comparison first since stone is most common + } else if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.netherrack)) { + aMetaData += 1000; + } else if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.end_stone)) { + aMetaData += 2000; + } else if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTechAPI.sBlockGranites)) { + if (tBlock == GregTechAPI.sBlockGranites) { + if (aWorld.getBlockMetadata(aX, aY, aZ) < 8) { + aMetaData += 3000; + } else { + aMetaData += 4000; + } + } else { + aMetaData += 3000; + } + } else if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTechAPI.sBlockStones)) { + if (tBlock == GregTechAPI.sBlockStones) { + if (aWorld.getBlockMetadata(aX, aY, aZ) < 8) { + aMetaData += 5000; + } else { + aMetaData += 6000; + } + } else { + aMetaData += 5000; + } + } else if (BlockName.equals("tile.igneousStone")) { + if (GregTechAPI.sBlockOresUb1 != null) { + tOreBlock = GregTechAPI.sBlockOresUb1; + aMetaData += (BlockMeta * 1000); + // GT_FML_LOGGER.info("Block changed to UB1"); + } + } else if (BlockName.equals("tile.metamorphicStone")) { + if (GregTechAPI.sBlockOresUb2 != null) { + tOreBlock = GregTechAPI.sBlockOresUb2; + aMetaData += (BlockMeta * 1000); + // GT_FML_LOGGER.info("Block changed to UB2"); + } + } else if (BlockName.equals("tile.sedimentaryStone")) { + if (GregTechAPI.sBlockOresUb3 != null) { + tOreBlock = GregTechAPI.sBlockOresUb3; + aMetaData += (BlockMeta * 1000); + // GT_FML_LOGGER.info("Block changed to UB3"); + } + } else { + return false; + } + // GT_FML_LOGGER.info(tOreBlock); + aWorld.setBlock( + aX, + aY, + aZ, + tOreBlock, + getHarvestData( + (short) aMetaData, + ((BlockOresAbstract) tOreBlock).getBaseBlockHarvestLevel(aMetaData % 16000 / 1000)), + 0); + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if ((tTileEntity instanceof TileEntityOres)) { + ((TileEntityOres) tTileEntity).mMetaData = ((short) aMetaData); + ((TileEntityOres) tTileEntity).mNatural = true; + } + return true; + } + return false; + } + + @Override + public void readFromNBT(NBTTagCompound aNBT) { + super.readFromNBT(aNBT); + this.mMetaData = aNBT.getShort("m"); + this.mNatural = aNBT.getBoolean("n"); + } + + @Override + public void writeToNBT(NBTTagCompound aNBT) { + super.writeToNBT(aNBT); + aNBT.setShort("m", this.mMetaData); + aNBT.setBoolean("n", this.mNatural); + } + + public void onUpdated() { + if ((!this.worldObj.isRemote) && (this.mBlocked)) { + this.mBlocked = false; + GTValues.NW.sendPacketToAllPlayersInRange( + this.worldObj, + new PacketOres(this.xCoord, (short) this.yCoord, this.zCoord, this.mMetaData), + this.xCoord, + this.zCoord); + } + } + + @Override + public Packet getDescriptionPacket() { + if (!this.worldObj.isRemote) { + boolean sendUpdate = mBlockedChecked ? !mBlocked : checkBlocked(); + if (sendUpdate) { + GTValues.NW.sendPacketToAllPlayersInRange( + this.worldObj, + new PacketOres(this.xCoord, (short) this.yCoord, this.zCoord, this.mMetaData), + this.xCoord, + this.zCoord); + } + } + return null; + } + + private boolean checkBlocked() { + // this is called very frequently and is performance critical. unroll the loop. + mBlockedChecked = true; + if (!worldObj.blockExists(xCoord + 1, yCoord, zCoord)) { + mBlockedChecked = false; + } else if (!GTUtility.isOpaqueBlock(worldObj, xCoord + 1, yCoord, zCoord)) { + mBlocked = false; + return true; + } + if (!worldObj.blockExists(xCoord - 1, yCoord, zCoord)) { + mBlockedChecked = false; + } else if (!GTUtility.isOpaqueBlock(worldObj, xCoord - 1, yCoord, zCoord)) { + mBlocked = false; + return true; + } + if (!worldObj.blockExists(xCoord, yCoord + 1, zCoord)) { + mBlockedChecked = false; + } else if (!GTUtility.isOpaqueBlock(worldObj, xCoord, yCoord + 1, zCoord)) { + mBlocked = false; + return true; + } + if (!worldObj.blockExists(xCoord, yCoord - 1, zCoord)) { + mBlockedChecked = false; + } else if (!GTUtility.isOpaqueBlock(worldObj, xCoord, yCoord - 1, zCoord)) { + mBlocked = false; + return true; + } + if (!worldObj.blockExists(xCoord, yCoord, zCoord + 1)) { + mBlockedChecked = false; + } else if (!GTUtility.isOpaqueBlock(worldObj, xCoord, yCoord, zCoord + 1)) { + mBlocked = false; + return true; + } + if (!worldObj.blockExists(xCoord, yCoord, zCoord - 1)) { + mBlockedChecked = false; + } else if (!GTUtility.isOpaqueBlock(worldObj, xCoord, yCoord, zCoord - 1)) { + mBlocked = false; + return true; + } + mBlocked = true; + return false; + } + + public void overrideOreBlockMaterial(Block aOverridingStoneBlock, byte aOverridingStoneMeta) { + if (this.worldObj == null || blockType == null) return; + this.mMetaData = ((short) (int) (this.mMetaData % 1000L + this.mMetaData / 16000L * 16000L)); + if (aOverridingStoneBlock + .isReplaceableOreGen(this.worldObj, this.xCoord, this.yCoord, this.zCoord, Blocks.netherrack)) { + this.mMetaData = ((short) (this.mMetaData + 1000)); + } else if (aOverridingStoneBlock + .isReplaceableOreGen(this.worldObj, this.xCoord, this.yCoord, this.zCoord, Blocks.end_stone)) { + this.mMetaData = ((short) (this.mMetaData + 2000)); + } else if (aOverridingStoneBlock.isReplaceableOreGen( + this.worldObj, + this.xCoord, + this.yCoord, + this.zCoord, + GregTechAPI.sBlockGranites)) { + if (aOverridingStoneBlock == GregTechAPI.sBlockGranites) { + if (aOverridingStoneMeta < 8) { + this.mMetaData = ((short) (this.mMetaData + 3000)); + } else { + this.mMetaData = ((short) (this.mMetaData + 4000)); + } + } else { + this.mMetaData = ((short) (this.mMetaData + 3000)); + } + } else if (aOverridingStoneBlock.isReplaceableOreGen( + this.worldObj, + this.xCoord, + this.yCoord, + this.zCoord, + GregTechAPI.sBlockStones)) { + if (aOverridingStoneBlock == GregTechAPI.sBlockStones) { + if (aOverridingStoneMeta < 8) { + this.mMetaData = ((short) (this.mMetaData + 5000)); + } else { + this.mMetaData = ((short) (this.mMetaData + 6000)); + } + } else { + this.mMetaData = ((short) (this.mMetaData + 5000)); + } + } + this.worldObj.setBlockMetadataWithNotify( + this.xCoord, + this.yCoord, + this.zCoord, + getHarvestData( + this.mMetaData, + ((BlockOresAbstract) blockType).getBaseBlockHarvestLevel(mMetaData % 16000 / 1000)), + 0); + } + + public void convertOreBlock(World aWorld, int aX, int aY, int aZ) { + short aMeta = ((short) (this.mMetaData % 1000 + (this.mMetaData / 16000 * 16000))); + aWorld.setBlock(aX, aY, aZ, GregTechAPI.sBlockOres1); + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof TileEntityOres) { + ((TileEntityOres) tTileEntity).mMetaData = aMeta; + this.worldObj.setBlockMetadataWithNotify( + this.xCoord, + this.yCoord, + this.zCoord, + getHarvestData( + aMeta, + ((BlockOresAbstract) tTileEntity.blockType).getBaseBlockHarvestLevel(aMeta % 16000 / 1000)), + 0); + } + } + + public short getMetaData() { + return this.mMetaData; + } + + @Override + public boolean canUpdate() { + return false; + } + + public ArrayList getDrops(Block aDroppedOre, int aFortune) { + ArrayList rList = new ArrayList<>(); + if (this.mMetaData <= 0) { + rList.add(new ItemStack(Blocks.cobblestone, 1, 0)); + return rList; + } + Materials aOreMaterial = GregTechAPI.sGeneratedMaterials[(this.mMetaData % 1000)]; + if (this.mMetaData < 16000) { + boolean tIsRich = false; + + // For Sake of god of balance! + + // Dense ore + + // NetherOre + if (GTMod.gregtechproxy.mNetherOreYieldMultiplier && !tIsRich) { + tIsRich = (this.mMetaData >= 1000 && this.mMetaData < 2000); + } + // EndOre + if (GTMod.gregtechproxy.mEndOreYieldMultiplier && !tIsRich) { + tIsRich = (this.mMetaData >= 2000 && this.mMetaData < 3000); + } + + // Silk Touch + if (shouldSilkTouch) { + rList.add(new ItemStack(aDroppedOre, 1, this.mMetaData)); + + } else { + switch (GTMod.gregtechproxy.oreDropSystem) { + case Item -> { + rList.add(GTOreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, (tIsRich ? 2 : 1))); + } + // TODO: Test + case FortuneItem -> { + // if shouldFortune and isNatural then get fortune drops + // if not shouldFortune or not isNatural then get normal drops + // if not shouldFortune and isNatural then get normal drops + // if shouldFortune and not isNatural then get normal drops + if (shouldFortune && this.mNatural && aFortune > 0) { + int aMinAmount = 1; + // Max applicable fortune + if (aFortune > 3) aFortune = 3; + int amount = aMinAmount + + Math.max(worldObj.rand.nextInt(aFortune * (tIsRich ? 2 : 1) + 2) - 1, 0); + for (int i = 0; i < amount; i++) { + rList.add(GTOreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, 1)); + } + } else { + for (int i = 0; i < (tIsRich ? 2 : 1); i++) { + rList.add(GTOreDictUnificator.get(OrePrefixes.rawOre, aOreMaterial, 1)); + } + } + } + case UnifiedBlock -> { + // Unified ore + for (int i = 0; i < (tIsRich ? 2 : 1); i++) { + rList.add(new ItemStack(aDroppedOre, 1, this.mMetaData % 1000)); + } + } + case PerDimBlock -> { + // Per Dimension ore + if (tIsRich) { + rList.add(new ItemStack(aDroppedOre, 1, this.mMetaData)); + } else { + rList.add(new ItemStack(aDroppedOre, 1, this.mMetaData % 1000)); + } + } + case Block -> { + // Regular ore + rList.add(new ItemStack(aDroppedOre, 1, this.mMetaData)); + } + } + } + return rList; + } + + // Everyone gets a free small fortune boost + aFortune += 1; + if (!this.mNatural) { + aFortune = 0; + } + if (aOreMaterial != null) { + Random tRandom = new XSTR(this.xCoord ^ this.yCoord ^ this.zCoord); + ArrayList tSelector = new ArrayList<>(); + + Materials aMaterial = aOreMaterial.mOreReplacement; + + ItemStack tStack = GTOreDictUnificator + .get(OrePrefixes.gemExquisite, aMaterial, GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 1L); + if (tStack != null) { + for (int i = 0; i < 1; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator + .get(OrePrefixes.gemFlawless, aMaterial, GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L), 1L); + if (tStack != null) { + for (int i = 0; i < 2; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L); + if (tStack != null) { + for (int i = 0; i < 12; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator + .get(OrePrefixes.gemFlawed, aMaterial, GTOreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1L), 1L); + if (tStack != null) { + for (int i = 0; i < 5; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1L); + if (tStack != null) { + for (int i = 0; i < 10; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator.get( + OrePrefixes.gemChipped, + aMaterial, + GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L), + 1L); + if (tStack != null) { + for (int i = 0; i < 5; i++) { + tSelector.add(tStack); + } + } + tStack = GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L); + if (tStack != null) { + for (int i = 0; i < 10; i++) { + tSelector.add(tStack); + } + } + if (!tSelector.isEmpty()) { + int i = 0; + for (int j = Math.max( + 1, + aMaterial.mOreMultiplier + + (aFortune > 0 ? tRandom.nextInt(1 + aFortune * aMaterial.mOreMultiplier) : 0) / 2); i + < j; i++) { + rList.add(GTUtility.copyAmount(1, tSelector.get(tRandom.nextInt(tSelector.size())))); + } + } + if (tRandom.nextInt(3 + aFortune) > 1) { + Materials dustMat = ((BlockOresAbstract) aDroppedOre).getDroppedDusts()[this.mMetaData / 1000 % 16]; + if (dustMat != null) rList.add( + GTOreDictUnificator + .get(tRandom.nextInt(3) > 0 ? OrePrefixes.dustImpure : OrePrefixes.dust, dustMat, 1L)); + } + } + return rList; + } + + @Override + public ITexture[] getTexture(Block aBlock) { + if (mMetadataForCachedTexture == mMetaData && mCachedTexture != null) return mCachedTexture; + + mMetadataForCachedTexture = mMetaData; + mCachedTexture = getTextureInternal(aBlock); + return mCachedTexture; + } + + private ITexture @NotNull [] getTextureInternal(Block aBlock) { + Materials aMaterial = GregTechAPI.sGeneratedMaterials[(this.mMetaData % 1000)]; + if ((aMaterial != null) && (this.mMetaData < 32000) && (aBlock instanceof BlockOresAbstract)) { + ITexture iTexture = TextureFactory.builder() + .addIcon( + aMaterial.mIconSet.mTextures[this.mMetaData / 16000 == 0 ? OrePrefixes.ore.mTextureIndex + : OrePrefixes.oreSmall.mTextureIndex]) + .setRGBA(aMaterial.mRGBa) + .stdOrient() + .build(); + return new ITexture[] { ((BlockOresAbstract) aBlock).getTextureSet()[((this.mMetaData / 1000) % 16)], + iTexture }; + } + return new ITexture[] { TextureFactory.of(Blocks.stone, 0), TextureFactory.builder() + .addIcon(SET_NONE.mTextures[OrePrefixes.ore.mTextureIndex]) + .stdOrient() + .build() }; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverArm.java b/src/main/java/gregtech/common/covers/CoverArm.java new file mode 100644 index 0000000000..fef9ef1327 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverArm.java @@ -0,0 +1,431 @@ +package gregtech.common.covers; + +import java.text.FieldPosition; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; + +public class CoverArm extends CoverBehavior { + + public final int mTickRate; + // msb converted, 2nd : direction (1=export) + // right 14 bits: internalSlot, next 14 bits adjSlot, 0 = all, slot = -1 + protected static final int EXPORT_MASK = 0x40000000; + protected static final int SLOT_ID_MASK = 0x3FFF; + protected static final int SLOT_ID_MIN = 0; + protected static final int CONVERTED_BIT = 0x80000000; + + public CoverArm(int aTickRate, ITexture coverTexture) { + super(coverTexture); + this.mTickRate = aTickRate; + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if ((((aTileEntity instanceof IMachineProgress)) && (!((IMachineProgress) aTileEntity).isAllowedToWork()))) { + return aCoverVariable; + } + + // Convert from ver. 5.09.33.50, check if 3 last bits are equal + if ((aCoverVariable >>> 29) == 0) { + aCoverVariable = CONVERTED_BIT | (((aCoverVariable + 1) & SLOT_ID_MASK) << 14) | EXPORT_MASK; + } else if ((aCoverVariable >>> 29) == 7) { + aCoverVariable = CONVERTED_BIT | Math.min(Math.abs(aCoverVariable - 1), SLOT_ID_MASK); + } + + final TileEntity toTile; + final TileEntity fromTile; + final int toSlot; + final int fromSlot; + + if ((aCoverVariable & EXPORT_MASK) > 0) { + fromTile = (TileEntity) aTileEntity; + toTile = aTileEntity.getTileEntityAtSide(side); + fromSlot = aCoverVariable & SLOT_ID_MASK; + toSlot = (aCoverVariable >> 14) & SLOT_ID_MASK; + } else { + fromTile = aTileEntity.getTileEntityAtSide(side); + toTile = (TileEntity) aTileEntity; + fromSlot = (aCoverVariable >> 14) & SLOT_ID_MASK; + toSlot = aCoverVariable & SLOT_ID_MASK; + } + + if (fromSlot > 0 && toSlot > 0) { + if (fromTile instanceof IInventory fromInventory && toTile instanceof IInventory toInventory) + GTUtility.moveFromSlotToSlot( + fromInventory, + toInventory, + fromSlot - 1, + toSlot - 1, + null, + false, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1); + } else if (toSlot > 0) { + final ForgeDirection toSide; + if ((aCoverVariable & EXPORT_MASK) > 0) toSide = side; + else toSide = side.getOpposite(); + GTUtility.moveOneItemStackIntoSlot( + fromTile, + toTile, + toSide, + toSlot - 1, + null, + false, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1); + } else if (fromSlot > 0) { + final ForgeDirection toSide; + if ((aCoverVariable & EXPORT_MASK) > 0) toSide = side; + else toSide = side.getOpposite(); + if (fromTile instanceof IInventory) GTUtility.moveFromSlotToSide( + (IInventory) fromTile, + toTile, + fromSlot - 1, + toSide, + null, + false, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1); + } else { + final ForgeDirection fromSide; + final ForgeDirection toSide; + if ((aCoverVariable & EXPORT_MASK) > 0) { + fromSide = side; + toSide = side.getOpposite(); + } else { + fromSide = side.getOpposite(); + toSide = side; + } + GTUtility.moveOneItemStack( + fromTile, + toTile, + fromSide, + toSide, + null, + false, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1); + } + + return aCoverVariable; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + int step = 0; + if (GTUtility.getClickedFacingCoords(side, aX, aY, aZ)[0] >= 0.5F) { + step += aPlayer.isSneaking() ? 256 : 16; + } else { + step -= aPlayer.isSneaking() ? 256 : 16; + } + aCoverVariable = getNewVar(aCoverVariable, step); + sendMessageToPlayer(aPlayer, aCoverVariable); + return aCoverVariable; + } + + @Override + protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, + float aY, float aZ) { + int step = (GTUtility.getClickedFacingCoords(side, aX, aY, aZ)[0] >= 0.5F) ? 1 : -1; + int tCoverVariable = getNewVar(aCoverVariable.get(), step); + sendMessageToPlayer(aPlayer, tCoverVariable); + aCoverVariable.set(tCoverVariable); + return true; + } + + @Override + @SuppressWarnings("deprecation") + public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + final int step = (GTUtility.getClickedFacingCoords(side, aX, aY, aZ)[0] >= 0.5F) ? 1 : -1; + aCoverVariable = getNewVar(aCoverVariable, step); + sendMessageToPlayer(aPlayer, aCoverVariable); + aTileEntity.setCoverDataAtSide(side, aCoverVariable); + return true; + } + + @Override + protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return false; + } + + private void sendMessageToPlayer(EntityPlayer aPlayer, int var) { + if ((var & EXPORT_MASK) != 0) GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("001", "Puts out into adjacent Slot #") + (((var >> 14) & SLOT_ID_MASK) - 1)); + else GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("002", "Grabs in for own Slot #") + ((var & SLOT_ID_MASK) - 1)); + } + + private int getNewVar(int var, int step) { + int intSlot = (var & SLOT_ID_MASK); + int adjSlot = (var >> 14) & SLOT_ID_MASK; + if ((var & EXPORT_MASK) == 0) { + int x = (intSlot + step); + if (x > SLOT_ID_MASK) return createVar(0, SLOT_ID_MASK, 0); + else if (x < 1) return createVar(-step - intSlot + 1, 0, EXPORT_MASK); + else return createVar(0, x, 0); + } else { + int x = (adjSlot - step); + if (x > SLOT_ID_MASK) return createVar(SLOT_ID_MASK, 0, EXPORT_MASK); + else if (x < 1) return createVar(0, step - adjSlot + 1, 0); + else return createVar(x, 0, EXPORT_MASK); + } + } + + private int createVar(int adjSlot, int intSlot, int export) { + return CONVERTED_BIT | export | ((adjSlot & SLOT_ID_MASK) << 14) | (intSlot & SLOT_ID_MASK); + } + + @Override + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return this.mTickRate; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new ArmUIFactory(buildContext).createWindow(); + } + + private class ArmUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + private int maxSlot; + + /** + * Display the text "Any" instead of a number when the slot is set to -1. + */ + protected static final NumberFormatMUI numberFormatAny = new NumberFormatMUI() { + + @Override + public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { + if (number < 0) { + return toAppendTo.append(GTUtility.trans("ANY", "Any")); + } else { + return super.format(number, toAppendTo, pos); + } + } + }; + + protected ArmUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + maxSlot = getMaxSlot(); + builder.widget( + new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, CoverArm.this).addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> getFlagExport(convert(coverData)) > 0, + (coverData, state) -> { + if (state) { + return new ISerializableObject.LegacyCoverData( + convert(coverData) | EXPORT_MASK | CONVERTED_BIT); + } else { + return new ISerializableObject.LegacyCoverData( + convert(coverData) & ~EXPORT_MASK | CONVERTED_BIT); + } + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_EXPORT) + .addTooltip(GTUtility.trans("006", "Export")) + .setPos(spaceX * 0, spaceY * 0)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> getFlagExport(convert(coverData)) == 0, + (coverData, state) -> { + if (state) { + return new ISerializableObject.LegacyCoverData( + convert(coverData) & ~EXPORT_MASK | CONVERTED_BIT); + } else { + return new ISerializableObject.LegacyCoverData( + convert(coverData) | EXPORT_MASK | CONVERTED_BIT); + } + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_IMPORT) + .addTooltip(GTUtility.trans("007", "Import")) + .setPos(spaceX * 1, spaceY * 0)) + .addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) (getFlagInternalSlot(convert(coverData)) - 1), + (coverData, state) -> { + final int coverVariable = convert(coverData); + return new ISerializableObject.LegacyCoverData( + getFlagExport(coverVariable) | ((state.intValue() + 1) & SLOT_ID_MASK) + | (getFlagAdjacentSlot(coverVariable) << 14) + | CONVERTED_BIT); + }, + widget -> widget.setBounds(-1, maxSlot) + .setDefaultValue(-1) + .setScrollValues(1, 100, 10) + .setNumberFormat(numberFormatAny) + .setPos(spaceX * 0, spaceY * 1 + 2) + .setSize(spaceX * 2 + 5, 12)) + .addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) (getFlagAdjacentSlot(convert(coverData)) - 1), + (coverData, state) -> { + final int coverVariable = convert(coverData); + return new ISerializableObject.LegacyCoverData( + getFlagExport(coverVariable) | getFlagInternalSlot(coverVariable) + | (((state.intValue() + 1) & SLOT_ID_MASK) << 14) + | CONVERTED_BIT); + }, + widget -> widget.setValidator(val -> { + // We need to check the adjacent inventory here, and can't simply set a maximum value, + // because it can change while this cover is alive. + final int adjacentMaxSlot; + final ICoverable tile = getUIBuildContext().getTile(); + if (tile instanceof TileEntity && !tile.isDead()) { + TileEntity adj = tile.getTileEntityAtSide(getUIBuildContext().getCoverSide()); + if (adj instanceof IInventory) + adjacentMaxSlot = ((IInventory) adj).getSizeInventory() - 1; + else adjacentMaxSlot = -1; + } else { + adjacentMaxSlot = -1; + } + return Math.min(val, adjacentMaxSlot); + }) + .setMinValue(-1) + .setDefaultValue(-1) + .setScrollValues(1, 100, 10) + .setNumberFormat(numberFormatAny) + .setPos(spaceX * 0, spaceY * 2 + 2) + .setSize(spaceX * 2 + 5, 12)) + .setPos(startX, startY)) + .widget( + new TextWidget() + .setStringSupplier( + () -> (convert(getCoverData()) & EXPORT_MASK) > 0 ? GTUtility.trans("006", "Export") + : GTUtility.trans("007", "Import")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 3, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(GTUtility.trans("254.1", "Internal slot#")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 3, 4 + startY + spaceY * 1)) + .widget( + new TextWidget(GTUtility.trans("255", "Adjacent slot#")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 3, 4 + startY + spaceY * 2)); + } + + private int getMaxSlot() { + final ICoverable tile = getUIBuildContext().getTile(); + if (tile instanceof TileEntity && !tile.isDead()) { + return tile.getSizeInventory() - 1; + } else { + return -1; + } + } + + private int getFlagExport(int coverVariable) { + return coverVariable & EXPORT_MASK; + } + + private int getFlagInternalSlot(int coverVariable) { + return coverVariable & SLOT_ID_MASK; + } + + private int getFlagAdjacentSlot(int coverVariable) { + return (coverVariable >> 14) & SLOT_ID_MASK; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverChest.java b/src/main/java/gregtech/common/covers/CoverChest.java new file mode 100644 index 0000000000..4afc3b9578 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverChest.java @@ -0,0 +1,274 @@ +package gregtech.common.covers; + +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; + +import cpw.mods.fml.common.network.ByteBufUtils; +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import io.netty.buffer.ByteBuf; + +public class CoverChest extends CoverBehaviorBase { + + private final int slots; + private final int stackSizeLimit = 1; + + public CoverChest(int slots, ITexture coverTexture) { + super(ChestInventory.class, coverTexture); + if (slots <= 0) throw new IllegalArgumentException("slots must be greater than 0"); + this.slots = slots; + } + + @Override + public ChestInventory createDataObject(int aLegacyData) { + return new ChestInventory(slots, stackSizeLimit); + } + + @Override + public ChestInventory createDataObject() { + return new ChestInventory(slots, stackSizeLimit); + } + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public boolean isSimpleCover() { + return true; + } + + @Override + public boolean allowsCopyPasteTool() { + return false; + } + + @Override + public boolean allowsTickRateAddition() { + return false; + } + + @Override + protected void onDroppedImpl(ForgeDirection side, int aCoverID, ChestInventory aCoverVariable, + ICoverable aTileEntity) { + if (aTileEntity.getWorld().isRemote) return; + aCoverVariable.dropAll(aTileEntity, side); + } + + @Override + protected int getTickRateImpl(ForgeDirection side, int aCoverID, ChestInventory aCoverVariable, + ICoverable aTileEntity) { + return aCoverVariable.firstTick ? 1 : 0; + } + + @Override + protected ChestInventory doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + ChestInventory aCoverVariable, ICoverable aTileEntity, long aTimer) { + // migrate slots. mostly needed while in development. still can be useful if we ever resize the inventory in the + // future + if (aCoverVariable.items.getSlots() != slots) { + if (aCoverVariable.items.getSlots() > slots) { + for (int i = slots; i < aCoverVariable.items.getSlots(); i++) { + ItemStack item = aCoverVariable.items.getStackInSlot(i); + if (item != null) { + dropItem(aTileEntity, side, item); + } + } + } + + ChestInventory newData = createDataObject(); + int toCopy = Math.min(newData.items.getSlots(), aCoverVariable.items.getSlots()); + for (int i = 0; i < toCopy; i++) { + newData.items.setStackInSlot(i, aCoverVariable.items.getStackInSlot(i)); + } + return newData; + } + aCoverVariable.firstTick = false; + return super.doCoverThingsImpl(side, aInputRedstone, aCoverID, aCoverVariable, aTileEntity, aTimer); + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new ChestUIFactory(buildContext).createWindow(); + } + + public class ChestUIFactory extends UIFactory { + + private static final int spaceX = 18; + private static final int spaceY = 18; + + public ChestUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected int getGUIHeight() { + int height = slots / 3 * 18 + 8; + if (!getUIBuildContext().isAnotherWindow()) { + // player inv is 4 row + return height + 4 * 18 + 14; + } + return height; + } + + @Override + protected void addTitleToUI(ModularWindow.Builder builder) {} + + @Override + protected int getGUIWidth() { + if (getUIBuildContext().isAnotherWindow()) { + return 18 * 3 + 20; + } else { + return 18 * 9 + 20; + } + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + CoverDataControllerWidget w = new CoverDataControllerWidget<>( + this::getCoverData, + this::setCoverData, + CoverChest.this); + ChestInventory d = getCoverData(); + LimitingItemStackHandler h; + if (d == null) { + // ??? + return; + } + h = d.items; + SlotGroup slotGroup = SlotGroup.ofItemHandler(h, 3) + .build(); + if (getUIBuildContext().isAnotherWindow()) { + slotGroup.setPos(4, 4); + } else { + slotGroup.setPos(getGUIWidth() / 2 - 18 * 3 / 2, 6); + } + w.addChild(slotGroup); + builder.widget(w); + + builder.setPos( + (p, t) -> Alignment.Center.getAlignedPos( + new Size(getUIBuildContext().isAnotherWindow() ? t.getPos().x : p.width, p.height), + new Size(getGUIWidth(), getGUIHeight()))); + } + + @Override + protected boolean doesBindPlayerInventory() { + return true; + } + } + + private static class LimitingItemStackHandler extends ItemStackHandler { + + private final int slotLimit; + + private LimitingItemStackHandler(int slots, int slotLimit) { + super(slots); + this.slotLimit = slotLimit; + } + + @Override + public int getSlotLimit(int slot) { + return slotLimit; + } + } + + public static class ChestInventory implements ISerializableObject { + + final LimitingItemStackHandler items; + boolean firstTick; + + public ChestInventory(int slots, int stackSize) { + items = new LimitingItemStackHandler(slots, stackSize); + } + + @NotNull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { + items.deserializeNBT(ISerializableObject.readCompoundTagFromGreggyByteBuf(aBuf)); + return this; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + ByteBufUtils.writeTag(aBuf, items.serializeNBT()); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + if (!(aNBT instanceof NBTTagCompound)) return; + items.deserializeNBT((NBTTagCompound) aNBT); + firstTick = true; + } + + @NotNull + @Override + public NBTBase saveDataToNBT() { + return items.serializeNBT(); + } + + @NotNull + @Override + public ISerializableObject copy() { + ChestInventory copy = new ChestInventory(items.getSlots(), items.getSlotLimit(0)); + for (int i = 0; i < items.getSlots(); i++) { + copy.items.setStackInSlot(i, items.getStackInSlot(i)); + } + return copy; + } + + public void dropAll(ICoverable coverable, ForgeDirection direction) { + for (int i = 0; i < items.getSlots(); i++) { + ItemStack tItem = items.getStackInSlot(i); + if (tItem == null) { + continue; + } + dropItem(coverable, direction, tItem); + items.setStackInSlot(i, null); + } + } + } + + private static void dropItem(ICoverable coverable, ForgeDirection direction, ItemStack tItem) { + final EntityItem tItemEntity = new EntityItem( + coverable.getWorld(), + coverable.getXCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F + direction.offsetX, + coverable.getYCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F + direction.offsetY, + coverable.getZCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F + direction.offsetZ, + new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage())); + if (tItem.hasTagCompound()) { + tItemEntity.getEntityItem() + .setTagCompound( + (NBTTagCompound) tItem.getTagCompound() + .copy()); + } + tItemEntity.motionX = (XSTR_INSTANCE.nextGaussian() * 0.05D); + tItemEntity.motionY = (XSTR_INSTANCE.nextGaussian() * 0.05D + 0.2D); + tItemEntity.motionZ = (XSTR_INSTANCE.nextGaussian() * 0.05D); + tItemEntity.hurtResistantTime = 999999; + tItemEntity.lifespan = 60000; + coverable.getWorld() + .spawnEntityInWorld(tItemEntity); + } +} diff --git a/src/main/java/gregtech/common/covers/CoverControlsWork.java b/src/main/java/gregtech/common/covers/CoverControlsWork.java new file mode 100644 index 0000000000..6c92c61351 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverControlsWork.java @@ -0,0 +1,270 @@ +package gregtech.common.covers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.covers.IControlsWorkCover; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; + +public class CoverControlsWork extends CoverBehavior implements IControlsWorkCover { + + public CoverControlsWork(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if (!makeSureOnlyOne(side, aTileEntity)) return 0; + if (aTileEntity instanceof IMachineProgress machine) { + if (aCoverVariable < 2) { + if ((aInputRedstone > 0) == (aCoverVariable == 0)) { + if (!machine.isAllowedToWork()) machine.enableWorking(); + } else if (machine.isAllowedToWork()) machine.disableWorking(); + machine.setWorkDataValue(aInputRedstone); + } else if (aCoverVariable == 2) { + machine.disableWorking(); + } else { + if (machine.wasShutdown() && machine.getLastShutDownReason() + .wasCritical()) { + machine.disableWorking(); + if (!mPlayerNotified) { + EntityPlayer player = lastPlayer == null ? null : lastPlayer.get(); + if (player != null) { + lastPlayer = null; + mPlayerNotified = true; + GTUtility.sendChatToPlayer( + player, + aTileEntity.getInventoryName() + "at " + + String.format( + "(%d,%d,%d)", + aTileEntity.getXCoord(), + aTileEntity.getYCoord(), + aTileEntity.getZCoord()) + + " shut down."); + } + } + return 2; + } else { + return 3 + doCoverThings(side, aInputRedstone, aCoverID, aCoverVariable - 3, aTileEntity, aTimer); + } + } + } + return aCoverVariable; + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { + return aCoverVariable.get() != 2; // always off, so no redstone needed either + } + + /** + * Make sure there is only one GT_Cover_ControlsWork on the aTileEntity TODO this is a migration thing. Remove this + * after 2.3.0 is released. + * + * @return true if the cover is the first (side) one + **/ + private boolean makeSureOnlyOne(ForgeDirection side, ICoverable aTileEntity) { + return IControlsWorkCover.makeSureOnlyOne(side, aTileEntity); + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + boolean aForced) { + if ((aTileEntity instanceof IMachineProgress)) { + ((IMachineProgress) aTileEntity).enableWorking(); + ((IMachineProgress) aTileEntity).setWorkDataValue((byte) 0); + } + return true; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 5; + if (aCoverVariable < 0) { + aCoverVariable = 2; + } + if (aCoverVariable == 0) { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("003", "Enable with Signal")); + } + if (aCoverVariable == 1) { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("004", "Disable with Signal")); + } + if (aCoverVariable == 2) { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("005", "Disabled")); + } + if (aCoverVariable == 3) { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("505", "Enable with Signal (Safe)")); + } + if (aCoverVariable == 4) { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("506", "Disable with Signal (Safe)")); + } + // TODO: Set lastPlayer + return aCoverVariable; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 1; + } + + @Override + public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { + if (!super.isCoverPlaceable(side, aStack, aTileEntity)) return false; + for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { + if (aTileEntity.getCoverBehaviorAtSideNew(tSide) instanceof IControlsWorkCover) { + return false; + } + } + return true; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new ControlsWorkUIFactory(buildContext).createWindow(); + } + + private class ControlsWorkUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public ControlsWorkUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + builder + .widget( + new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( + this::getCoverData, + this::setCoverData, + CoverControlsWork.this, + (id, coverData) -> !getClickable(id, convert(coverData)), + (id, coverData) -> new ISerializableObject.LegacyCoverData( + getNewCoverVariable(id, convert(coverData)))) + .addToggleButton( + 0, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_REDSTONE_ON) + .setPos(spaceX * 0, spaceY * 0)) + .addToggleButton( + 1, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_REDSTONE_OFF) + .setPos(spaceX * 0, spaceY * 1)) + .addToggleButton( + 2, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_CROSS) + .setPos(spaceX * 0, spaceY * 2)) + .setPos(startX, startY)) + .widget( + new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, CoverControlsWork.this) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofCheckAndCross(), + coverData -> convert(coverData) > 2, + (coverData, state) -> new ISerializableObject.LegacyCoverData( + adjustCoverVariable(state, convert(coverData))), + widget -> widget.setPos(spaceX * 0, spaceY * 3)) + .setPos(startX, startY)) + .widget( + new TextWidget(GTUtility.trans("243", "Enable with Redstone")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(GTUtility.trans("244", "Disable with Redstone")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 1)) + .widget( + new TextWidget(GTUtility.trans("245", "Disable machine")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 2)) + .widget( + new TextWidget(GTUtility.trans("507", "Safe Mode")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 3)); + } + + private int getNewCoverVariable(int id, int coverVariable) { + if (coverVariable > 2) { + return id + 3; + } else { + return id; + } + } + + private boolean getClickable(int id, int coverVariable) { + return ((id != coverVariable && id != coverVariable - 3) || id == 3); + } + + private int adjustCoverVariable(boolean safeMode, int coverVariable) { + if (safeMode && coverVariable <= 2) { + coverVariable += 3; + } + if (!safeMode && coverVariable > 2) { + coverVariable -= 3; + } + return coverVariable; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverConveyor.java b/src/main/java/gregtech/common/covers/CoverConveyor.java new file mode 100644 index 0000000000..cb2690d95b --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverConveyor.java @@ -0,0 +1,325 @@ +package gregtech.common.covers; + +import static gregtech.api.util.GTUtility.moveMultipleItemStacks; + +import java.util.Arrays; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; + +public class CoverConveyor extends CoverBehavior { + + public final int mTickRate; + private final int mMaxStacks; + + public CoverConveyor(int aTickRate, int maxStacks, ITexture coverTexture) { + super(coverTexture); + this.mTickRate = aTickRate; + this.mMaxStacks = maxStacks; + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if ((aCoverVariable % 6 > 1) && ((aTileEntity instanceof IMachineProgress))) { + if (((IMachineProgress) aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) { + return aCoverVariable; + } + } + final TileEntity tTileEntity = aTileEntity.getTileEntityAtSide(side); + final Object fromEntity = aCoverVariable % 2 == 0 ? aTileEntity : tTileEntity; + final Object toEntity = aCoverVariable % 2 != 0 ? aTileEntity : tTileEntity; + final ForgeDirection fromSide = aCoverVariable % 2 != 0 ? side.getOpposite() : side; + final ForgeDirection toSide = aCoverVariable % 2 == 0 ? side.getOpposite() : side; + + moveMultipleItemStacks( + fromEntity, + toEntity, + fromSide, + toSide, + null, + false, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1, + this.mMaxStacks); + + return aCoverVariable; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 12; + if (aCoverVariable < 0) { + aCoverVariable = 11; + } + switch (aCoverVariable) { + case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("006", "Export")); + case 1 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("007", "Import")); + case 2 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("008", "Export (conditional)")); + case 3 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("009", "Import (conditional)")); + case 4 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("010", "Export (invert cond)")); + case 5 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("011", "Import (invert cond)")); + case 6 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("012", "Export allow Input")); + case 7 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("013", "Import allow Output")); + case 8 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("014", "Export allow Input (conditional)")); + case 9 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("015", "Import allow Output (conditional)")); + case 10 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("016", "Export allow Input (invert cond)")); + case 11 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("017", "Import allow Output (invert cond)")); + } + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return (aCoverVariable >= 6) || (aCoverVariable % 2 != 0); + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return (aCoverVariable >= 6) || (aCoverVariable % 2 == 0); + } + + @Override + public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return this.mTickRate; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new ConveyorUIFactory(buildContext).createWindow(); + } + + private class ConveyorUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + private CoverDataFollowerToggleButtonWidget mBlockWidget = null; + private CoverDataFollowerToggleButtonWidget mAllowWidget = null; + + public ConveyorUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + builder.widget( + new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( + this::getCoverData, + this::setCoverData, + CoverConveyor.this, + (id, coverData) -> !getClickable(id, convert(coverData)), + (id, coverData) -> new ISerializableObject.LegacyCoverData( + getNewCoverVariable(id, convert(coverData)))) + .addToggleButton( + 0, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_EXPORT) + .addTooltip(GTUtility.trans("006", "Export")) + .setPos(spaceX * 0, spaceY * 0)) + .addToggleButton( + 1, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_IMPORT) + .addTooltip(GTUtility.trans("007", "Import")) + .setPos(spaceX * 1, spaceY * 0)) + .addToggleButton( + 2, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_CHECKMARK) + .addTooltip(GTUtility.trans("224", "Always On")) + .setPos(spaceX * 0, spaceY * 1)) + .addToggleButton( + 3, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_USE_PROCESSING_STATE) + .addTooltip(GTUtility.trans("343", "Use Machine Processing State")) + .setPos(spaceX * 1, spaceY * 1)) + .addToggleButton( + 4, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_USE_INVERTED_PROCESSING_STATE) + .addTooltip(GTUtility.trans("343.1", "Use Inverted Machine Processing State")) + .setPos(spaceX * 2, spaceY * 1)) + .addToggleButton(5, CoverDataFollowerToggleButtonWidget.ofDisableable(), widget -> { + mAllowWidget = widget; + widget.setTextureGetter(i -> { + ISerializableObject.LegacyCoverData coverData = getCoverData(); + return coverData == null || coverData.get() % 2 == 0 + ? GTUITextures.OVERLAY_BUTTON_ALLOW_INPUT + : GTUITextures.OVERLAY_BUTTON_ALLOW_OUTPUT; + }) + .dynamicTooltip(() -> { + ISerializableObject.LegacyCoverData coverData = getCoverData(); + return Arrays.asList( + coverData == null || coverData.get() % 2 == 0 + ? GTUtility.trans("314", "Allow Input") + : GTUtility.trans("312", "Allow Output")); + }) + .setPos(spaceX * 0, spaceY * 2); + }) + .addToggleButton(6, CoverDataFollowerToggleButtonWidget.ofDisableable(), widget -> { + mBlockWidget = widget; + widget.setTextureGetter(i -> { + ISerializableObject.LegacyCoverData coverData = getCoverData(); + return coverData == null || coverData.get() % 2 == 0 + ? GTUITextures.OVERLAY_BUTTON_BLOCK_INPUT + : GTUITextures.OVERLAY_BUTTON_BLOCK_OUTPUT; + }) + .dynamicTooltip(() -> { + ISerializableObject.LegacyCoverData coverData = getCoverData(); + return Arrays.asList( + coverData == null || coverData.get() % 2 == 0 + ? GTUtility.trans("313", "Block Input") + : GTUtility.trans("311", "Block Output")); + }) + .setPos(spaceX * 1, spaceY * 2); + }) + .setPos(startX, startY)) + .widget( + new TextWidget(GTUtility.trans("229", "Export/Import")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(GTUtility.trans("230", "Conditional")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 1)) + .widget(TextWidget.dynamicString(() -> { + ISerializableObject.LegacyCoverData coverData = getCoverData(); + return coverData == null || coverData.get() % 2 == 0 ? GTUtility.trans("344", "Input Blocking") + : GTUtility.trans("344.1", "Output Blocking"); + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 2)); + } + + private int getNewCoverVariable(int id, int coverVariable) { + switch (id) { + case 0 -> { + if (mBlockWidget != null) { + mBlockWidget.notifyTooltipChange(); + } + if (mAllowWidget != null) { + mAllowWidget.notifyTooltipChange(); + } + return coverVariable & ~0x1; + } + case 1 -> { + if (mBlockWidget != null) { + mBlockWidget.notifyTooltipChange(); + } + if (mAllowWidget != null) { + mAllowWidget.notifyTooltipChange(); + } + return coverVariable | 0x1; + } + case 2 -> { + if (coverVariable > 5) return 0x6 | (coverVariable & ~0xE); + return (coverVariable & ~0xE); + } + case 3 -> { + if (coverVariable > 5) return 0x8 | (coverVariable & ~0xE); + return 0x2 | (coverVariable & ~0xE); + } + case 4 -> { + if (coverVariable > 5) return 0xA | (coverVariable & ~0xE); + return (0x4 | (coverVariable & ~0xE)); + } + case 5 -> { + if (coverVariable <= 5) return coverVariable + 6; + } + case 6 -> { + if (coverVariable > 5) return coverVariable - 6; + } + } + return coverVariable; + } + + private boolean getClickable(int id, int coverVariable) { + if (coverVariable < 0 || 11 < coverVariable) return false; + return switch (id) { + case 0, 1 -> (0x1 & coverVariable) != id; + case 2 -> (coverVariable % 6) >= 2; + case 3 -> (coverVariable % 6) < 2 || 4 <= (coverVariable % 6); + case 4 -> (coverVariable % 6) < 4; + case 5 -> coverVariable < 6; + case 6 -> coverVariable >= 6; + default -> false; + }; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverCrafting.java b/src/main/java/gregtech/common/covers/CoverCrafting.java new file mode 100644 index 0000000000..10da32033c --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverCrafting.java @@ -0,0 +1,56 @@ +package gregtech.common.covers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.ContainerWorkbench; +import net.minecraft.network.play.server.S2DPacketOpenWindow; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.ISerializableObject; + +public class CoverCrafting extends CoverBehavior { + + public CoverCrafting(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + if ((aPlayer instanceof EntityPlayerMP)) { + ((EntityPlayerMP) aPlayer).getNextWindowId(); + ((EntityPlayerMP) aPlayer).playerNetServerHandler.sendPacket( + new S2DPacketOpenWindow(((EntityPlayerMP) aPlayer).currentWindowId, 1, "Crafting", 9, true)); + aPlayer.openContainer = new ContainerWorkbench( + aPlayer.inventory, + aPlayer.worldObj, + aTileEntity.getXCoord(), + aTileEntity.getYCoord(), + aTileEntity.getZCoord()) { + + @Override + public boolean canInteractWith(EntityPlayer player) { + return true; + } + }; + aPlayer.openContainer.windowId = ((EntityPlayerMP) aPlayer).currentWindowId; + aPlayer.openContainer.addCraftingToCrafters((EntityPlayerMP) aPlayer); + } + return true; + } + + @Override + protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return false; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverDoesWork.java b/src/main/java/gregtech/common/covers/CoverDoesWork.java new file mode 100644 index 0000000000..1575f243ab --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverDoesWork.java @@ -0,0 +1,252 @@ +package gregtech.common.covers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; + +public class CoverDoesWork extends CoverBehavior { + + private static int FLAG_INVERTED = 0x1; + private static int FLAG_PROGRESS = 0x2; + private static int FLAG_ENABLED = 0x4; + + public CoverDoesWork(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if ((aTileEntity instanceof IMachineProgress)) { + IMachineProgress mProgress = (IMachineProgress) aTileEntity; + boolean inverted = isFlagSet(aCoverVariable, FLAG_INVERTED); + int signal = 0; + + if (isFlagSet(aCoverVariable, FLAG_ENABLED)) { + signal = inverted == mProgress.isAllowedToWork() ? 0 : 15; + } else if (isFlagSet(aCoverVariable, FLAG_PROGRESS)) { + signal = inverted == (mProgress.getMaxProgress() == 0) ? 0 : 15; + } else { + int tScale = mProgress.getMaxProgress() / 15; + + if (tScale > 0 && mProgress.hasThingsToDo()) { + signal = inverted ? (15 - mProgress.getProgress() / tScale) : (mProgress.getProgress() / tScale); + } else { + signal = inverted ? 15 : 0; + } + } + + aTileEntity.setOutputRedstoneSignal(side, (byte) signal); + } else { + aTileEntity.setOutputRedstoneSignal(side, (byte) 0); + } + return aCoverVariable; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 6; + if (aCoverVariable < 0) { + aCoverVariable = 5; + } + switch (aCoverVariable) { + case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("018", "Normal")); + // Progress scaled + case 1 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("019", "Inverted")); + // ^ inverted + case 2 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("020", "Ready to work")); + // Not Running + case 3 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("021", "Not ready to work")); + // Running + case 4 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("028", "Machine Enabled")); + // Enabled + case 5 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("029", "Machine Disabled")); + // Disabled + } + return aCoverVariable; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 5; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new DoesWorkUIFactory(buildContext).createWindow(); + } + + private static boolean isFlagSet(int coverVariable, int flag) { + return (coverVariable & flag) == flag; + } + + private class DoesWorkUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public DoesWorkUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + builder + .widget( + new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( + this::getCoverData, + this::setCoverData, + CoverDoesWork.this, + (id, coverData) -> isEnabled(id, convert(coverData)), + (id, coverData) -> new ISerializableObject.LegacyCoverData( + getNewCoverVariable(id, convert(coverData)))) + .addToggleButton( + 0, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_PROGRESS) + .setPos(spaceX * 0, spaceY * 0)) + .addToggleButton( + 1, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_CHECKMARK) + .setPos(spaceX * 1, spaceY * 0)) + .addToggleButton( + 2, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON) + .setPos(spaceX * 2, spaceY * 0)) + .addToggleButton( + 3, + CoverDataFollowerToggleButtonWidget.ofRedstone(), + widget -> widget.setPos(spaceX * 0, spaceY * 1)) + .setPos(startX, startY)) + .widget(TextWidget.dynamicString(() -> { + int coverVariable = convert(getCoverData()); + + if (isFlagSet(coverVariable, FLAG_ENABLED)) { + return GTUtility.trans("271", "Machine enabled"); + } else if (isFlagSet(coverVariable, FLAG_PROGRESS)) { + return GTUtility.trans("242", "Machine idle"); + } else { + return GTUtility.trans("241", "Recipe progress"); + } + + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 3, 4 + startY + spaceY * 0)) + .widget( + TextWidget + .dynamicString( + () -> isFlagSet(convert(getCoverData()), FLAG_INVERTED) + ? GTUtility.trans("INVERTED", "Inverted") + : GTUtility.trans("NORMAL", "Normal")) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 3, 4 + startY + spaceY * 1)); + } + + private int getNewCoverVariable(int id, int coverVariable) { + switch (id) { + case 0 -> { + return (coverVariable & ~FLAG_ENABLED) & ~FLAG_PROGRESS; + } + case 1 -> { + return (coverVariable & ~FLAG_ENABLED) | FLAG_PROGRESS; + } + case 2 -> { + return (coverVariable & ~FLAG_PROGRESS) | FLAG_ENABLED; + } + case 3 -> { + if (isFlagSet(coverVariable, FLAG_INVERTED)) { + return coverVariable & ~FLAG_INVERTED; + } else { + return coverVariable | FLAG_INVERTED; + } + } + } + return coverVariable; + } + + private boolean isEnabled(int id, int coverVariable) { + return switch (id) { + case 0 -> !isFlagSet(coverVariable, FLAG_PROGRESS) && !isFlagSet(coverVariable, FLAG_ENABLED); + case 1 -> isFlagSet(coverVariable, FLAG_PROGRESS); + case 2 -> isFlagSet(coverVariable, FLAG_ENABLED); + case 3 -> isFlagSet(coverVariable, FLAG_INVERTED); + default -> true; + }; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverDrain.java b/src/main/java/gregtech/common/covers/CoverDrain.java new file mode 100644 index 0000000000..ff10c3a992 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverDrain.java @@ -0,0 +1,140 @@ +package gregtech.common.covers; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.IFluidHandler; + +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; + +public class CoverDrain extends CoverBehavior { + + public CoverDrain(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if ((aCoverVariable % 3 > 1) && ((aTileEntity instanceof IMachineProgress))) { + if (((IMachineProgress) aTileEntity).isAllowedToWork()) { + return aCoverVariable; + } + } + if (side != ForgeDirection.UNKNOWN) { + final Block tBlock = aTileEntity.getBlockAtSide(side); + if ((aCoverVariable < 3) && ((aTileEntity instanceof IFluidHandler))) { + if ((side == ForgeDirection.UP) && (aTileEntity.getWorld() + .isRaining()) + && (aTileEntity.getWorld() + .getPrecipitationHeight(aTileEntity.getXCoord(), aTileEntity.getZCoord()) - 2 + < aTileEntity.getYCoord())) { + int tAmount = (int) (aTileEntity.getBiome().rainfall * 10.0F); + if (tAmount > 0) { + ((IFluidHandler) aTileEntity).fill( + side, + Materials.Water.getFluid( + aTileEntity.getWorld() + .isThundering() ? tAmount * 2L : tAmount), + true); + } + } + FluidStack tLiquid = null; + if (tBlock != null) { + if (((tBlock == Blocks.water) || (tBlock == Blocks.flowing_water)) + && (aTileEntity.getMetaIDAtSide(side) == 0)) { + tLiquid = Materials.Water.getFluid(1000L); + } else if (((tBlock == Blocks.lava) || (tBlock == Blocks.flowing_lava)) + && (aTileEntity.getMetaIDAtSide(side) == 0)) { + tLiquid = Materials.Lava.getFluid(1000L); + } else if ((tBlock instanceof IFluidBlock)) { + tLiquid = ((IFluidBlock) tBlock).drain( + aTileEntity.getWorld(), + aTileEntity.getOffsetX(side, 1), + aTileEntity.getOffsetY(side, 1), + aTileEntity.getOffsetZ(side, 1), + false); + } + if ((tLiquid != null) && (tLiquid.getFluid() != null) + && ((side.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 // Horizontal + || ((side == ForgeDirection.DOWN) && (tLiquid.getFluid() + .getDensity() <= 0)) + || ((side == ForgeDirection.UP) && (tLiquid.getFluid() + .getDensity() >= 0))) + && (((IFluidHandler) aTileEntity).fill(side, tLiquid, false) == tLiquid.amount)) { + ((IFluidHandler) aTileEntity).fill(side, tLiquid, true); + aTileEntity.getWorld() + .setBlockToAir( + aTileEntity.getXCoord() + side.offsetX, + aTileEntity.getYCoord() + side.offsetY, + aTileEntity.getZCoord() + side.offsetZ); + } + } + } + if ((aCoverVariable >= 3) && (tBlock != null) + && ((tBlock == Blocks.lava) || (tBlock == Blocks.flowing_lava) + || (tBlock == Blocks.water) + || (tBlock == Blocks.flowing_water) + || ((tBlock instanceof IFluidBlock)))) { + aTileEntity.getWorld() + .setBlock( + aTileEntity.getOffsetX(side, 1), + aTileEntity.getOffsetY(side, 1), + aTileEntity.getOffsetZ(side, 1), + Blocks.air, + 0, + 0); + } + } + return aCoverVariable; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 6; + if (aCoverVariable < 0) { + aCoverVariable = 5; + } + switch (aCoverVariable) { + case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("022", "Import")); + case 1 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("023", "Import (conditional)")); + case 2 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("024", "Import (invert cond)")); + case 3 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("025", "Keep Liquids Away")); + case 4 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("026", "Keep Liquids Away (conditional)")); + case 5 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("027", "Keep Liquids Away (invert cond)")); + } + return aCoverVariable; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return ((IMachineProgress) aTileEntity).isAllowedToWork() == aCoverVariable < 2; + } + + @Override + public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return aCoverVariable < 3 ? 50 : 1; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverEUMeter.java b/src/main/java/gregtech/common/covers/CoverEUMeter.java new file mode 100644 index 0000000000..07f54012d5 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverEUMeter.java @@ -0,0 +1,408 @@ +package gregtech.common.covers; + +import java.util.function.Function; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicBatteryBuffer; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerCycleButtonWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import io.netty.buffer.ByteBuf; + +public class CoverEUMeter extends CoverBehaviorBase { + + public CoverEUMeter(ITexture coverTexture) { + super(EUMeterData.class, coverTexture); + } + + @Override + public EUMeterData createDataObject(int aLegacyData) { + return new EUMeterData(aLegacyData, 0); + } + + @Override + public EUMeterData createDataObject() { + return new EUMeterData(); + } + + @Override + protected EUMeterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + EUMeterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + final long stored = aCoverVariable.type.getTileEntityStoredEnergy(aTileEntity); + final long capacity = aCoverVariable.type.getTileEntityEnergyCapacity(aTileEntity); + + byte redstoneSignal; + + if (stored == 0L) { + // nothing + redstoneSignal = 0; + } else if (stored >= capacity) { + // full + redstoneSignal = 15; + } else { + // 1-14 range + redstoneSignal = (byte) (1 + (14 * stored) / capacity); + } + + if (aCoverVariable.inverted) { + redstoneSignal = (byte) (15 - redstoneSignal); + } + + if (aCoverVariable.threshold > 0) { + if (aCoverVariable.inverted && stored >= aCoverVariable.threshold) { + redstoneSignal = 0; + } else if (!aCoverVariable.inverted && stored < aCoverVariable.threshold) { + redstoneSignal = 0; + } + } + + aTileEntity.setOutputRedstoneSignal(side, redstoneSignal); + return aCoverVariable; + } + + @Override + protected EUMeterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, + ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + int num = (aCoverVariable.getNum() + (aPlayer.isSneaking() ? -1 : 1) + EnergyType.values().length * 2) + % (EnergyType.values().length * 2); + switch (num) { + case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("031", "Normal Universal Storage")); + case 1 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("032", "Inverted Universal Storage")); + case 2 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("033", "Normal Electricity Storage")); + case 3 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("034", "Inverted Electricity Storage")); + case 4 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("035", "Normal Steam Storage")); + case 5 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("036", "Inverted Steam Storage")); + case 6 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("037", "Normal Average Electric Input")); + case 7 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("038", "Inverted Average Electric Input")); + case 8 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("039", "Normal Average Electric Output")); + case 9 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("040", "Inverted Average Electric Output")); + case 10 -> GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("041", "Normal Electricity Storage(Including Batteries)")); + case 11 -> GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("042", "Inverted Electricity Storage(Including Batteries)")); + } + aCoverVariable.setNum(num); + return aCoverVariable; + } + + // region Static Result Methods + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return false; + } + + @Override + protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected int getTickRateImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, + ICoverable aTileEntity) { + return 20; + } + // endregion + + // region GUI Stuff + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new EUMeterUIFactory(buildContext).createWindow(); + } + + private class EUMeterUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public EUMeterUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + final String INVERTED = GTUtility.trans("INVERTED", "Inverted"); + final String NORMAL = GTUtility.trans("NORMAL", "Normal"); + + final CoverDataFollowerNumericWidget numericWidget = new CoverDataFollowerNumericWidget<>(); + + builder.widget( + new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, CoverEUMeter.this).addFollower( + new CoverDataFollowerCycleButtonWidget<>(), + coverData -> coverData.type.ordinal(), + (coverData, state) -> { + coverData.type = EnergyType.getEnergyType(state); + return coverData; + }, + widget -> widget.setLength(EnergyType.values().length) + .addTooltip( + state -> EnergyType.getEnergyType(state) + .getTooltip()) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_CYCLIC) + .setPos(spaceX * 0, spaceY * 0)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofRedstone(), + coverData -> coverData.inverted, + (coverData, state) -> { + coverData.inverted = state; + return coverData; + }, + widget -> widget.addTooltip(0, NORMAL) + .addTooltip(1, INVERTED) + .setPos(spaceX * 0, spaceY * 1)) + .addFollower(numericWidget, coverData -> (double) coverData.threshold, (coverData, state) -> { + coverData.threshold = state.longValue(); + return coverData; + }, + widget -> widget.setScrollValues(1000, 100, 100000) + .setFocusOnGuiOpen(true) + .setPos(spaceX * 0, spaceY * 2 + 2) + .setSize(spaceX * 8, 12)) + .setPos(startX, startY)) + .widget( + new TextWidget() + .setStringSupplier(() -> getCoverData() != null ? getCoverData().type.getTitle() : "") + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX, 4 + startY)) + .widget( + new TextWidget() + .setStringSupplier( + () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX, 4 + startY + spaceY)) + .widget( + new TextWidget(GTUtility.trans("222.1", "Energy threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX, startY + spaceY * 3 + 4)) + + .widget( + new FakeSyncWidget.LongSyncer( + () -> getCoverData() != null + ? getCoverData().type.getTileEntityEnergyCapacity(getUIBuildContext().getTile()) + : Long.MAX_VALUE, + value -> numericWidget.setMaxValue(value))); + } + } + + // endregion + + public static class EUMeterData implements ISerializableObject { + + private EnergyType type; + private boolean inverted; + /** + * The special value {@code 0} means threshold check is disabled. + */ + private long threshold; + + public EUMeterData() { + type = EnergyType.UNIVERSAL_STORAGE; + inverted = false; + threshold = 0; + } + + public EUMeterData(EnergyType type, boolean inverted, long threshold) { + this.type = type; + this.inverted = inverted; + this.threshold = threshold; + } + + public EUMeterData(int num, long threshold) { + this(); + this.setNum(num); + this.threshold = threshold; + } + + public int getNum() { + return type.ordinal() * 2 + (inverted ? 1 : 0); + } + + public void setNum(int num) { + type = EnergyType.getEnergyType(num / 2); + inverted = num % 2 == 1; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new EUMeterData(type, inverted, threshold); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("typeOrdinal", type.ordinal()); + tag.setBoolean("inverted", inverted); + tag.setLong("threshold", threshold); + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeInt(type.ordinal()); + aBuf.writeBoolean(inverted); + aBuf.writeLong(threshold); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + NBTTagCompound tag = (NBTTagCompound) aNBT; + int typeOrdinal = tag.getInteger("typeOrdinal"); + type = EnergyType.getEnergyType(typeOrdinal); + inverted = tag.getBoolean("inverted"); + threshold = tag.getLong("threshold"); + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { + int typeOrdinal = aBuf.readInt(); + type = EnergyType.getEnergyType(typeOrdinal); + inverted = aBuf.readBoolean(); + threshold = aBuf.readLong(); + return this; + } + } + + private enum EnergyType { + + UNIVERSAL_STORAGE(GTUtility.trans("301", "Universal"), GTUtility.trans("256", "Universal Storage"), + ICoverable::getUniversalEnergyStored, ICoverable::getUniversalEnergyCapacity), + ELECTRICITY_STORAGE(GTUtility.trans("302", "Int. EU"), GTUtility.trans("257", "Electricity Storage"), + ICoverable::getStoredEU, ICoverable::getEUCapacity), + STEAM_STORAGE(GTUtility.trans("303", "Steam"), GTUtility.trans("258", "Steam Storage"), + ICoverable::getStoredSteam, ICoverable::getSteamCapacity), + AVERAGE_ELECTRIC_INPUT(GTUtility.trans("304", "Avg. Input"), GTUtility.trans("259", "Average Electric Input"), + ICoverable::getAverageElectricInput, (te) -> te.getInputVoltage() * te.getInputAmperage()), + AVERAGE_ELECTRIC_OUTPUT(GTUtility.trans("305", "Avg. Output"), + GTUtility.trans("260", "Average Electric Output"), ICoverable::getAverageElectricOutput, + (te) -> te.getOutputVoltage() * te.getOutputAmperage()), + ELECTRICITY_STORAGE_INCLUDING_BATTERIES(GTUtility.trans("306", "EU stored"), + GTUtility.trans("261", "Electricity Storage(Including Batteries)"), (te) -> { + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity mte = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (mte instanceof MTEBasicBatteryBuffer buffer) { + return buffer.getStoredEnergy()[0]; + } + } + return te.getStoredEU(); + }, (te) -> { + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity mte = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (mte instanceof MTEBasicBatteryBuffer buffer) { + return buffer.getStoredEnergy()[1]; + } + } + return te.getEUCapacity(); + }); + + private final String title; + private final String tooltip; + private final Function getTileEntityStoredEnergyFunc; + private final Function getTileEntityEnergyCapacityFunc; + + EnergyType(String title, String tooltip, Function getTileEntityStoredEnergyFunc, + Function getTileEntityEnergyCapacityFunc) { + this.title = title; + this.tooltip = tooltip; + this.getTileEntityStoredEnergyFunc = getTileEntityStoredEnergyFunc; + this.getTileEntityEnergyCapacityFunc = getTileEntityEnergyCapacityFunc; + } + + public String getTitle() { + return title; + } + + public String getTooltip() { + return tooltip; + } + + public long getTileEntityStoredEnergy(ICoverable aTileEntity) { + return getTileEntityStoredEnergyFunc.apply(aTileEntity); + } + + public long getTileEntityEnergyCapacity(ICoverable aTileEntity) { + return getTileEntityEnergyCapacityFunc.apply(aTileEntity); + } + + public EnergyType getNext() { + return values()[(ordinal() + 1) % values().length]; + } + + public static EnergyType getEnergyType(int ordinal) { + if (ordinal < 0 || values().length <= ordinal) { + ordinal = 0; + } + return values()[ordinal]; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverFacadeAE.java b/src/main/java/gregtech/common/covers/CoverFacadeAE.java new file mode 100644 index 0000000000..2104f711c5 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverFacadeAE.java @@ -0,0 +1,31 @@ +package gregtech.common.covers; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import appeng.facade.IFacadeItem; + +public class CoverFacadeAE extends CoverFacadeBase { + + @Override + protected Block getTargetBlock(ItemStack aFacadeStack) { + if (aFacadeStack == null) return null; + final Item item = aFacadeStack.getItem(); + if (!(item instanceof IFacadeItem)) return null; + return ((IFacadeItem) item).getBlock(aFacadeStack); + } + + @Override + protected int getTargetMeta(ItemStack aFacadeStack) { + if (aFacadeStack == null) return 0; + final Item item = aFacadeStack.getItem(); + if (!(item instanceof IFacadeItem)) return 0; + return ((IFacadeItem) item).getMeta(aFacadeStack); + } + + @Override + protected ItemStack getDisplayStackImpl(int aCoverID, FacadeData aCoverVariable) { + return aCoverVariable.mStack; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverFacadeBase.java b/src/main/java/gregtech/common/covers/CoverFacadeBase.java new file mode 100644 index 0000000000..b5aa93d530 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverFacadeBase.java @@ -0,0 +1,396 @@ +package gregtech.common.covers; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.common.network.ByteBufUtils; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTRenderingWorld; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import io.netty.buffer.ByteBuf; + +public abstract class CoverFacadeBase extends CoverBehaviorBase { + + /** + * This is the Dummy, if there is a generic Cover without behavior + */ + public CoverFacadeBase() { + super(FacadeData.class); + } + + @Override + public boolean isSimpleCover() { + return true; + } + + @Override + public FacadeData createDataObject(int aLegacyData) { + return new FacadeData(); + } + + @Override + public FacadeData createDataObject() { + return new FacadeData(); + } + + @Override + protected FacadeData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable.mFlags = ((aCoverVariable.mFlags + 1) & 15); + GTUtility.sendChatToPlayer( + aPlayer, + ((aCoverVariable.mFlags & 1) != 0 ? GTUtility.trans("128.1", "Redstone ") : "") + + ((aCoverVariable.mFlags & 2) != 0 ? GTUtility.trans("129.1", "Energy ") : "") + + ((aCoverVariable.mFlags & 4) != 0 ? GTUtility.trans("130.1", "Fluids ") : "") + + ((aCoverVariable.mFlags & 8) != 0 ? GTUtility.trans("131.1", "Items ") : "")); + return aCoverVariable; + } + + @Override + protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity) { + return (aCoverVariable.mFlags & 1) != 0; + } + + @Override + protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity) { + return (aCoverVariable.mFlags & 1) != 0; + } + + @Override + protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity) { + return (aCoverVariable.mFlags & 2) != 0; + } + + @Override + protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity) { + return (aCoverVariable.mFlags & 2) != 0; + } + + @Override + protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return (aCoverVariable.mFlags & 4) != 0; + } + + @Override + protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return (aCoverVariable.mFlags & 4) != 0; + } + + @Override + protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return (aCoverVariable.mFlags & 8) != 0; + } + + @Override + protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return (aCoverVariable.mFlags & 8) != 0; + } + + @Override + public void placeCover(ForgeDirection side, ItemStack aCover, ICoverable aTileEntity) { + aTileEntity.setCoverIdAndDataAtSide( + side, + GTUtility.stackToInt(aCover), + new FacadeData(GTUtility.copyAmount(1, aCover), 0)); + + if (aTileEntity.isClientSide()) GTRenderingWorld.getInstance() + .register( + aTileEntity.getXCoord(), + aTileEntity.getYCoord(), + aTileEntity.getZCoord(), + getTargetBlock(aCover), + getTargetMeta(aCover)); + } + + @Override + protected ItemStack getDropImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity) { + return aCoverVariable.mStack; + } + + @Override + protected ITexture getSpecialCoverFGTextureImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity) { + return getSpecialCoverTextureImpl(side, aCoverID, aCoverVariable, aTileEntity); + } + + @Override + protected ITexture getSpecialCoverTextureImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity) { + if (GTUtility.isStackInvalid(aCoverVariable.mStack)) return Textures.BlockIcons.ERROR_RENDERING[0]; + Block block = getTargetBlock(aCoverVariable.mStack); + if (block == null) return Textures.BlockIcons.ERROR_RENDERING[0]; + // TODO: change this when *someone* made the block render in both pass + if (block.getRenderBlockPass() != 0) return Textures.BlockIcons.ERROR_RENDERING[0]; + return TextureFactory.builder() + .setFromBlock(block, getTargetMeta(aCoverVariable.mStack)) + .useWorldCoord() + .setFromSide(side) + .build(); + } + + @Override + protected Block getFacadeBlockImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity) { + if (GTUtility.isStackInvalid(aCoverVariable.mStack)) return null; + return getTargetBlock(aCoverVariable.mStack); + } + + @Override + protected int getFacadeMetaImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity) { + if (GTUtility.isStackInvalid(aCoverVariable.mStack)) return 0; + return getTargetMeta(aCoverVariable.mStack); + } + + protected abstract Block getTargetBlock(ItemStack aFacadeStack); + + protected abstract int getTargetMeta(ItemStack aFacadeStack); + + @Override + protected boolean isDataNeededOnClientImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected void onDataChangedImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity) { + if (aTileEntity.isClientSide()) GTRenderingWorld.getInstance() + .register( + aTileEntity.getXCoord(), + aTileEntity.getYCoord(), + aTileEntity.getZCoord(), + getTargetBlock(aCoverVariable.mStack), + getTargetMeta(aCoverVariable.mStack)); + } + + @Override + protected void onDroppedImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, ICoverable aTileEntity) { + if (aTileEntity.isClientSide()) { + for (final ForgeDirection iSide : ForgeDirection.VALID_DIRECTIONS) { + if (iSide == side) continue; + // since we do not allow multiple type of facade per block, this check would be enough. + if (aTileEntity.getCoverBehaviorAtSideNew(iSide) instanceof CoverFacadeBase) return; + } + if (aCoverVariable.mStack != null) + // mStack == null -> cover removed before data reach client + GTRenderingWorld.getInstance() + .unregister( + aTileEntity.getXCoord(), + aTileEntity.getYCoord(), + aTileEntity.getZCoord(), + getTargetBlock(aCoverVariable.mStack), + getTargetMeta(aCoverVariable.mStack)); + } + } + + @Override + protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, + ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + // in case cover data didn't hit client somehow. maybe he had a ridiculous view distance + aTileEntity.issueCoverUpdate(side); + return super.onCoverRightClickImpl(side, aCoverID, aCoverVariable, aTileEntity, aPlayer, aX, aY, aZ); + } + + @Override + public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { + // blocks that are not rendered in pass 0 are now accepted but rendered awkwardly + // to render it correctly require changing GT_Block_Machine to render in both pass, which is not really a good + // idea... + if (!super.isCoverPlaceable(side, aStack, aTileEntity)) return false; + final Block targetBlock = getTargetBlock(aStack); + if (targetBlock == null) return false; + // we allow one single type of facade on the same block for now + // otherwise it's not clear which block this block should impersonate + // this restriction can be lifted later by specifying a certain facade as dominate one as an extension to this + // class + for (final ForgeDirection iSide : ForgeDirection.VALID_DIRECTIONS) { + if (iSide == side) continue; + final CoverInfo coverInfo = aTileEntity.getCoverInfoAtSide(iSide); + if (!coverInfo.isValid()) continue; + final Block facadeBlock = coverInfo.getFacadeBlock(); + if (facadeBlock == null) continue; + if (facadeBlock != targetBlock) return false; + if (coverInfo.getFacadeMeta() != getTargetMeta(aStack)) return false; + } + return true; + } + + public static class FacadeData implements ISerializableObject { + + ItemStack mStack; + int mFlags; + + public FacadeData() {} + + public FacadeData(ItemStack mStack, int mFlags) { + this.mStack = mStack; + this.mFlags = mFlags; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new FacadeData(mStack, mFlags); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + final NBTTagCompound tag = new NBTTagCompound(); + if (mStack != null) tag.setTag("mStack", mStack.writeToNBT(new NBTTagCompound())); + tag.setByte("mFlags", (byte) mFlags); + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + ByteBufUtils.writeItemStack(aBuf, mStack); + aBuf.writeByte(mFlags); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + final NBTTagCompound tag = (NBTTagCompound) aNBT; + mStack = ItemStack.loadItemStackFromNBT(tag.getCompoundTag("mStack")); + mFlags = tag.getByte("mFlags"); + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + mStack = ISerializableObject.readItemStackFromGreggyByteBuf(aBuf); + mFlags = aBuf.readByte(); + return this; + } + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new FacadeBaseUIFactory(buildContext).createWindow(); + } + + private class FacadeBaseUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public FacadeBaseUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + builder.widget( + new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( + this::getCoverData, + this::setCoverData, + CoverFacadeBase.this, + this::isEnabled, + (id, coverData) -> { + coverData.mFlags = getNewCoverVariable(id, coverData); + return coverData; + }).addToggleButton( + 0, + CoverDataFollowerToggleButtonWidget.ofCheckAndCross(), + widget -> widget.setPos(spaceX * 0, spaceY * 0)) + .addToggleButton( + 1, + CoverDataFollowerToggleButtonWidget.ofCheckAndCross(), + widget -> widget.setPos(spaceX * 0, spaceY * 1)) + .addToggleButton( + 2, + CoverDataFollowerToggleButtonWidget.ofCheckAndCross(), + widget -> widget.setPos(spaceX * 0, spaceY * 2)) + .addToggleButton( + 3, + CoverDataFollowerToggleButtonWidget.ofCheckAndCross(), + widget -> widget.setPos(spaceX * 0, spaceY * 3)) + .setPos(startX, startY)) + .widget( + new ItemDrawable(() -> getCoverData() != null ? getCoverData().mStack : null).asWidget() + .setPos(5, 5) + .setSize(16, 16)) + .widget( + TextWidget.dynamicString(() -> getCoverData() != null ? getCoverData().mStack.getDisplayName() : "") + .setSynced(false) + .setDefaultColor(COLOR_TITLE.get()) + .setPos(25, 9)) + .widget( + new TextWidget(GTUtility.trans("128", "Redstone")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(GTUtility.trans("129", "Energy")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 1)) + .widget( + new TextWidget(GTUtility.trans("130", "Fluids")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 2)) + .widget( + new TextWidget(GTUtility.trans("131", "Items")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 3)); + } + + @Override + protected void addTitleToUI(ModularWindow.Builder builder) {} + + private int getNewCoverVariable(int id, FacadeData coverVariable) { + return switch (id) { + case 0 -> coverVariable.mFlags ^ 0x1; + case 1 -> coverVariable.mFlags ^ 0x2; + case 2 -> coverVariable.mFlags ^ 0x4; + case 3 -> coverVariable.mFlags ^ 0x8; + default -> coverVariable.mFlags; + }; + } + + private boolean isEnabled(int id, FacadeData coverVariable) { + return switch (id) { + case 0 -> (coverVariable.mFlags & 0x1) > 0; + case 1 -> (coverVariable.mFlags & 0x2) > 0; + case 2 -> (coverVariable.mFlags & 0x4) > 0; + case 3 -> (coverVariable.mFlags & 0x8) > 0; + default -> false; + }; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverFluidLimiter.java b/src/main/java/gregtech/common/covers/CoverFluidLimiter.java new file mode 100644 index 0000000000..4669a3a442 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverFluidLimiter.java @@ -0,0 +1,202 @@ +package gregtech.common.covers; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; +import io.netty.buffer.ByteBuf; + +/*** + * @author TrainerSnow#5086 + */ +public class CoverFluidLimiter extends CoverBehaviorBase { + + public CoverFluidLimiter(ITexture coverTexture) { + super(FluidLimiterData.class, coverTexture); + } + + @Override + protected FluidLimiterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, + FluidLimiterData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aTileEntity instanceof IFluidHandler) { + adjustThreshold(aCoverVariable, !aPlayer.isSneaking()); + GTUtility.sendChatToPlayer(aPlayer, String.format("Threshold: %f", aCoverVariable.threshold)); + } + return aCoverVariable; + } + + @Override + protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, FluidLimiterData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return allowsFluidIn(aCoverVariable, aTileEntity); + } + + @Override + protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, FluidLimiterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + /* + * Helpers + */ + + private boolean allowsFluidIn(FluidLimiterData aCoverVariable, ICoverable c) { + if (c instanceof IFluidHandler) { + return aCoverVariable.threshold > getFillLevelInputSlots((IFluidHandler) c); + } + return false; + } + + private void adjustThreshold(FluidLimiterData coverVariable, boolean way) { + if (way) { + if ((coverVariable.threshold + 0.05f) > 1F) { + coverVariable.threshold = 0F; + return; + } + coverVariable.threshold += 0.05F; + } else { + if ((Math.abs(coverVariable.threshold) - 0.05F) < 0F) { + coverVariable.threshold = 1F; + return; + } + coverVariable.threshold -= 0.05F; + } + } + + private float getFillLevelInputSlots(IFluidHandler fh) { + FluidTankInfo[] tankInfo = fh.getTankInfo(ForgeDirection.UNKNOWN); + long tMax; + long tUsed; + if (tankInfo != null) { + // 0 Because we acces first slot only + FluidTankInfo inputSlot = tankInfo[0]; + if (inputSlot.fluid != null) { + tMax = inputSlot.capacity; + tUsed = inputSlot.fluid.amount; + return (float) tUsed / (float) tMax; + } + } + return 0F; + } + + /* + * Data + */ + + @Override + public FluidLimiterData createDataObject(int aLegacyData) { + return createDataObject(); + } + + @Override + public FluidLimiterData createDataObject() { + return new FluidLimiterData(1F); + } + + public static class FluidLimiterData implements ISerializableObject { + + private float threshold; + + public FluidLimiterData(float threshold) { + this.threshold = threshold; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new FluidLimiterData(threshold); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setFloat("threshold", this.threshold); + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeFloat(this.threshold); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + if (aNBT instanceof NBTTagCompound tag) { + this.threshold = tag.getFloat("threshold"); + } + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { + this.threshold = aBuf.readFloat(); + return this; + } + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new FluidLimiterUIFactory(buildContext).createWindow(); + } + + private class FluidLimiterUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public FluidLimiterUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + builder.widget( + new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, CoverFluidLimiter.this) + .addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) Math.round(coverData.threshold * 100), + (coverData, val) -> { + coverData.threshold = val.floatValue() / 100; + return coverData; + }, + widget -> widget.setBounds(0, 100) + .setFocusOnGuiOpen(true) + .setPos(startX, startY + spaceY * 2 - 24) + .setSize(spaceX * 4 - 3, 12))) + .widget( + new TextWidget("Percent threshold").setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX, startY + spaceY * 2 - 35)); + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverFluidRegulator.java b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java new file mode 100644 index 0000000000..a41ed08320 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverFluidRegulator.java @@ -0,0 +1,520 @@ +package gregtech.common.covers; + +import java.util.concurrent.atomic.AtomicBoolean; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import io.netty.buffer.ByteBuf; + +/** + * Cover variable + * + *

+ * 1111 1111 1111 1111 1111 1111 1111 1111
+ *  |- interval-| |- flow rate 2 compl. -|
+ * ^ export?
+ * 
+ * + * Concat export and flow rate 2 compl. together to get actual flow rate. A positive actual flow rate is export, and + * vice versa. + *

+ * Interval is an unsigned 11 bit integer minus 1, so the range is 1~2048. The stored bits will be flipped bitwise if + * speed is negative. This way, `0` means 1tick interval, while `-1` means 1 tick interval as well, preserving the + * legacy behavior. + */ +public class CoverFluidRegulator extends CoverBehaviorBase { + + private static final int SPEED_LENGTH = 20; + private static final int TICK_RATE_LENGTH = Integer.SIZE - SPEED_LENGTH - 1; + private static final int TICK_RATE_MIN = 1; + private static final int TICK_RATE_MAX = (-1 >>> (Integer.SIZE - TICK_RATE_LENGTH)) + TICK_RATE_MIN; + private static final int TICK_RATE_BITMASK = (TICK_RATE_MAX - TICK_RATE_MIN) << SPEED_LENGTH; + + public final int mTransferRate; + private boolean allowFluid = false; + + public CoverFluidRegulator(int aTransferRate, ITexture coverTexture) { + super(FluidRegulatorData.class, coverTexture); + if (aTransferRate > (-1 >>> (Integer.SIZE - SPEED_LENGTH))) + throw new IllegalArgumentException("aTransferRate too big: " + aTransferRate); + this.mTransferRate = aTransferRate; + } + + @Override + public FluidRegulatorData createDataObject(int aLegacyData) { + return new FluidRegulatorData(aLegacyData); + } + + @Override + public FluidRegulatorData createDataObject() { + return new FluidRegulatorData(); + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return aCoverVariable.condition.isRedstoneSensitive(); + } + + @Override + protected FluidRegulatorData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + FluidRegulatorData aCoverVariable, ICoverable aTileEntity, long aTimer) { + if (aCoverVariable.speed == 0 || !aCoverVariable.condition.isAllowedToWork(side, aCoverID, aTileEntity)) { + return aCoverVariable; + } + if ((aTileEntity instanceof IFluidHandler)) { + final IFluidHandler tTank1; + final IFluidHandler tTank2; + final ForgeDirection directionFrom; + final ForgeDirection directionTo; + if (aCoverVariable.speed > 0) { + tTank2 = aTileEntity.getITankContainerAtSide(side); + tTank1 = (IFluidHandler) aTileEntity; + directionFrom = side; + directionTo = side.getOpposite(); + } else { + tTank1 = aTileEntity.getITankContainerAtSide(side); + tTank2 = (IFluidHandler) aTileEntity; + directionFrom = side.getOpposite(); + directionTo = side; + } + if (tTank1 != null && tTank2 != null) { + allowFluid = true; + GTUtility + .moveFluid(tTank1, tTank2, directionFrom, Math.abs(aCoverVariable.speed), this::canTransferFluid); + allowFluid = false; + } + } + return aCoverVariable; + } + + private void adjustSpeed(EntityPlayer aPlayer, FluidRegulatorData aCoverVariable, int scale) { + int tSpeed = aCoverVariable.speed; + tSpeed += scale; + int tTickRate = aCoverVariable.tickRate; + if (Math.abs(tSpeed) > mTransferRate * tTickRate) { + tSpeed = mTransferRate * tTickRate * (tSpeed > 0 ? 1 : -1); + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("316", "Pump speed limit reached!")); + } + if (tTickRate == 1) { + GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("048", "Pump speed: ") + tSpeed + + GTUtility.trans("049", "L/tick ") + + tSpeed * 20 + + GTUtility.trans("050", "L/sec")); + } else { + GTUtility.sendChatToPlayer( + aPlayer, + String.format( + GTUtility.trans("207", "Pump speed: %dL every %d ticks, %.2f L/sec on average"), + tSpeed, + tTickRate, + tSpeed * 20d / tTickRate)); + } + } + + @Override + public FluidRegulatorData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, + FluidRegulatorData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (GTUtility.getClickedFacingCoords(side, aX, aY, aZ)[0] >= 0.5F) { + adjustSpeed(aPlayer, aCoverVariable, aPlayer.isSneaking() ? 256 : 16); + } else { + adjustSpeed(aPlayer, aCoverVariable, aPlayer.isSneaking() ? -256 : -16); + } + return aCoverVariable; + } + + protected boolean canTransferFluid(FluidStack fluid) { + return true; + } + + @Override + public boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsInImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidInImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return allowFluid; + } + + @Override + public boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return allowFluid; + } + + @Override + protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected int getTickRateImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, + ICoverable aTileEntity) { + return aCoverVariable.tickRate; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new FluidRegulatorUIFactory(buildContext).createWindow(); + } + + private class FluidRegulatorUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + private static final NumberFormatMUI numberFormat; + static { + numberFormat = new NumberFormatMUI(); + numberFormat.setMaximumFractionDigits(2); + } + + public FluidRegulatorUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + AtomicBoolean warn = new AtomicBoolean(false); + + builder.widget( + new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, CoverFluidRegulator.this) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.speed >= 0, + (coverData, state) -> { + coverData.speed = Math.abs(coverData.speed); + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_EXPORT) + .addTooltip(GTUtility.trans("006", "Export")) + .setPos(spaceX * 0, spaceY * 0)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.speed <= 0, + (coverData, state) -> { + coverData.speed = -Math.abs(coverData.speed); + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_IMPORT) + .addTooltip(GTUtility.trans("007", "Import")) + .setPos(spaceX * 1, spaceY * 0)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.condition == Conditional.Always, + (coverData, state) -> { + coverData.condition = Conditional.Always; + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_CHECKMARK) + .addTooltip(GTUtility.trans("224", "Always On")) + .setPos(spaceX * 0, spaceY * 1)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.condition == Conditional.Conditional, + (coverData, state) -> { + coverData.condition = Conditional.Conditional; + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_USE_PROCESSING_STATE) + .addTooltip(GTUtility.trans("343", "Use Machine Processing State")) + .setPos(spaceX * 1, spaceY * 1)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.condition == Conditional.Inverted, + (coverData, state) -> { + coverData.condition = Conditional.Inverted; + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_USE_INVERTED_PROCESSING_STATE) + .addTooltip(GTUtility.trans("343.1", "Use Inverted Machine Processing State")) + .setPos(spaceX * 2, spaceY * 1)) + .addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) coverData.speed, + (coverData, state) -> { + coverData.speed = state.intValue(); + return coverData; + }, + widget -> widget.setBounds(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY) + .setValidator(val -> { + final int tickRate = getCoverData() != null ? getCoverData().tickRate : 0; + final long maxFlow = (long) mTransferRate + * GTUtility.clamp(tickRate, TICK_RATE_MIN, TICK_RATE_MAX); + warn.set(false); + if (val > maxFlow) { + val = maxFlow; + warn.set(true); + } else if (val < -maxFlow) { + val = -maxFlow; + warn.set(true); + } + return val; + }) + .setScrollValues(1, 144, 1000) + .setFocusOnGuiOpen(true) + .setPos(spaceX * 0, spaceY * 2 + 2) + .setSize(spaceX * 4 - 3, 12)) + .addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) coverData.tickRate, + (coverData, state) -> { + coverData.tickRate = state.intValue(); + return coverData; + }, + widget -> widget.setBounds(0, TICK_RATE_MAX) + .setValidator(val -> { + final int speed = getCoverData() != null ? getCoverData().speed : 0; + warn.set(false); + if (val > TICK_RATE_MAX) { + val = (long) TICK_RATE_MAX; + warn.set(true); + } else if (Math.abs(speed) > mTransferRate * val) { + val = (long) Math + .min(TICK_RATE_MAX, (Math.abs(speed) + mTransferRate - 1) / mTransferRate); + warn.set(true); + } else if (val < TICK_RATE_MIN) { + val = 1L; + } + return val; + }) + .setPos(spaceX * 5, spaceY * 2 + 2) + .setSize(spaceX * 2 - 3, 12)) + .setPos(startX, startY)) + .widget( + new TextWidget(GTUtility.trans("229", "Export/Import")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 4, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(GTUtility.trans("230", "Conditional")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 4, 4 + startY + spaceY * 1)) + .widget( + new TextWidget(GTUtility.trans("208", " L")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 4, 4 + startY + spaceY * 2)) + .widget( + new TextWidget(GTUtility.trans("209", " ticks")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 7, 4 + startY + spaceY * 2)) + .widget(new TextWidget().setTextSupplier(() -> { + FluidRegulatorData coverVariable = getCoverData(); + if (coverVariable == null) return new Text(""); + return new Text( + GTUtility.trans("210.1", "Average:") + " " + + numberFormat.format( + coverVariable.tickRate == 0 ? 0 : coverVariable.speed * 20d / coverVariable.tickRate) + + " " + + GTUtility.trans("210.2", "L/sec")) + .color(warn.get() ? COLOR_TEXT_WARN.get() : COLOR_TEXT_GRAY.get()); + }) + .setPos(startX + spaceX * 0, 4 + startY + spaceY * 3)); + } + } + + @Override + public boolean allowsTickRateAddition() { + return false; + } + + public enum Conditional { + + Always(false) { + + @Override + boolean isAllowedToWork(ForgeDirection side, int aCoverID, ICoverable aTileEntity) { + return true; + } + }, + Conditional(true) { + + @Override + boolean isAllowedToWork(ForgeDirection side, int aCoverID, ICoverable aTileEntity) { + return !(aTileEntity instanceof IMachineProgress) || ((IMachineProgress) aTileEntity).isAllowedToWork(); + } + }, + Inverted(true) { + + @Override + boolean isAllowedToWork(ForgeDirection side, int aCoverID, ICoverable aTileEntity) { + return !(aTileEntity instanceof IMachineProgress) + || !((IMachineProgress) aTileEntity).isAllowedToWork(); + } + }; + + static final Conditional[] VALUES = values(); + private final boolean redstoneSensitive; + + Conditional(boolean redstoneSensitive) { + this.redstoneSensitive = redstoneSensitive; + } + + abstract boolean isAllowedToWork(ForgeDirection side, int aCoverID, ICoverable aTileEntity); + + boolean isRedstoneSensitive() { + return redstoneSensitive; + } + } + + public static class FluidRegulatorData implements ISerializableObject { + + private int tickRate; + private int speed; + private Conditional condition; + + private static int getSpeed(int aCoverVariable) { + // positive or 0 -> interval bits need to be set to zero + // negative -> interval bits need to be set to one + return aCoverVariable >= 0 ? aCoverVariable & ~TICK_RATE_BITMASK : aCoverVariable | TICK_RATE_BITMASK; + } + + private static int getTickRate(int aCoverVariable) { + // range: TICK_RATE_MIN ~ TICK_RATE_MAX + return ((Math.abs(aCoverVariable) & TICK_RATE_BITMASK) >>> SPEED_LENGTH) + TICK_RATE_MIN; + } + + public FluidRegulatorData() { + this(0); + } + + public FluidRegulatorData(int legacy) { + this(getTickRate(legacy), getSpeed(legacy), Conditional.Always); + } + + public FluidRegulatorData(int tickRate, int speed, Conditional condition) { + this.tickRate = tickRate; + this.speed = speed; + this.condition = condition; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new FluidRegulatorData(tickRate, speed, condition); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("mSpeed", speed); + tag.setInteger("mTickRate", tickRate); + tag.setByte("mCondition", (byte) condition.ordinal()); + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeInt(tickRate) + .writeInt(speed) + .writeByte(condition.ordinal()); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + if (!(aNBT instanceof NBTTagCompound tag)) return; // not very good... + speed = tag.getInteger("mSpeed"); + tickRate = tag.getInteger("mTickRate"); + condition = Conditional.VALUES[tag.getByte("mCondition")]; + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { + return new FluidRegulatorData(aBuf.readInt(), aBuf.readInt(), Conditional.VALUES[aBuf.readUnsignedByte()]); + } + + public int getTickRate() { + return tickRate; + } + + public void setTickRate(int tickRate) { + this.tickRate = tickRate; + } + + public int getSpeed() { + return speed; + } + + public void setSpeed(int speed) { + this.speed = speed; + } + + public Conditional getCondition() { + return condition; + } + + public void setCondition(Conditional condition) { + this.condition = condition; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverFluidStorageMonitor.java b/src/main/java/gregtech/common/covers/CoverFluidStorageMonitor.java new file mode 100644 index 0000000000..bf829f1f1d --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverFluidStorageMonitor.java @@ -0,0 +1,507 @@ +package gregtech.common.covers; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR0; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR1; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR10; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR11; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR12; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR13; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR14; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR2; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR3; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR4; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR5; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR6; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR7; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR8; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR9; + +import java.util.Optional; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.IFluidHandler; + +import com.google.common.io.ByteArrayDataInput; + +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.ITextureBuilder; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.tileentities.storage.MTEDigitalTankBase; +import io.netty.buffer.ByteBuf; + +/** + * TODO: Implement overlay rendering only with + * {@link CoverBehaviorBase#getSpecialCoverFGTextureImpl(ForgeDirection, int, ISerializableObject, ICoverable)} + */ +public class CoverFluidStorageMonitor extends CoverBehaviorBase { + + private static final IIconContainer[] icons = new IIconContainer[] { OVERLAY_FLUID_STORAGE_MONITOR0, + OVERLAY_FLUID_STORAGE_MONITOR1, OVERLAY_FLUID_STORAGE_MONITOR2, OVERLAY_FLUID_STORAGE_MONITOR3, + OVERLAY_FLUID_STORAGE_MONITOR4, OVERLAY_FLUID_STORAGE_MONITOR5, OVERLAY_FLUID_STORAGE_MONITOR6, + OVERLAY_FLUID_STORAGE_MONITOR7, OVERLAY_FLUID_STORAGE_MONITOR8, OVERLAY_FLUID_STORAGE_MONITOR9, + OVERLAY_FLUID_STORAGE_MONITOR10, OVERLAY_FLUID_STORAGE_MONITOR11, OVERLAY_FLUID_STORAGE_MONITOR12, + OVERLAY_FLUID_STORAGE_MONITOR13, OVERLAY_FLUID_STORAGE_MONITOR14, }; + + public CoverFluidStorageMonitor() { + super(FluidStorageData.class); + } + + @Override + public FluidStorageData createDataObject(int aLegacyData) { + return new FluidStorageData(); + } + + @Override + public FluidStorageData createDataObject() { + return new FluidStorageData(); + } + + @Override + protected FluidStorageData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + FluidStorageData aCoverVariable, ICoverable aTileEntity, long aTimer) { + final FluidTankInfo[] tanks = getValidFluidTankInfosForDisplay(aTileEntity, aCoverVariable.side); + if (tanks == null) { + return aCoverVariable.disable() + .issueCoverUpdateIfNeeded(aTileEntity, side); + } + assert 0 < tanks.length; + + if (aCoverVariable.slot < 0 || tanks.length <= aCoverVariable.slot) { + aCoverVariable.setSlot(0); + } + + final FluidTankInfo tank = tanks[aCoverVariable.slot]; + if (tank == null) { + return aCoverVariable.setNullTank() + .issueCoverUpdateIfNeeded(aTileEntity, side); + } + + return aCoverVariable.setFluid(tank.fluid) + .setScale(getTankScale(tank)) + .issueCoverUpdateIfNeeded(aTileEntity, side); + } + + @Override + protected ITexture getSpecialCoverFGTextureImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, + ICoverable aTileEntity) { + return getSpecialCoverTextureImpl(side, aCoverID, aCoverVariable, aTileEntity); + } + + @Override + protected ITexture getSpecialCoverTextureImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, + ICoverable aTileEntity) { + if (aCoverVariable.slot == -1 || aCoverVariable.fluid == null || aCoverVariable.scale == 0) { + return TextureFactory.of(OVERLAY_FLUID_STORAGE_MONITOR0); + } + final IIconContainer fluidIcon = new IIconContainer() { + + @Override + public IIcon getIcon() { + return aCoverVariable.fluid.getStillIcon(); + } + + @Override + public IIcon getOverlayIcon() { + return null; + } + + @Override + public ResourceLocation getTextureFile() { + return TextureMap.locationBlocksTexture; + } + }; + + final short[] fluidRGBA = colorToRGBA(aCoverVariable.fluid.getColor()); + final ITextureBuilder fluidTextureBuilder = TextureFactory.builder() + .addIcon(fluidIcon) + .setRGBA(fluidRGBA); + if (aCoverVariable.fluid.getLuminosity() > 0) fluidTextureBuilder.glow(); + return TextureFactory.of(fluidTextureBuilder.build(), TextureFactory.of(icons[aCoverVariable.scale])); + } + + @Override + protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, + ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aPlayer == null || aPlayer.worldObj == null || aPlayer.worldObj.isRemote) { + return false; + } + final ItemStack heldItem = aPlayer.getHeldItem(); + if (aPlayer.isSneaking() || heldItem == null) { + return false; + } + final FluidTankInfo[] tanks = getValidFluidTankInfos(aTileEntity, aCoverVariable.side); + if (tanks == null) { + return false; + } + if (aCoverVariable.slot < 0 || tanks.length <= aCoverVariable.slot) { + return false; + } + final FluidTankInfo tank = tanks[aCoverVariable.slot]; + if (tank == null) { + return false; + } + IFluidHandler tankHandler = (IFluidHandler) aTileEntity; + + final ItemStack heldItemSizedOne = GTUtility.copyAmount(1, heldItem); + if (heldItemSizedOne == null || heldItemSizedOne.stackSize <= 0) { + return false; + } + + ItemStack result; + result = fillToTank(heldItemSizedOne, tankHandler, aCoverVariable.side); + if (result != null) { + replaceHeldItemStack(aPlayer, heldItem, result); + return true; + } + result = fillToContainer(heldItemSizedOne, tank, tankHandler, aCoverVariable.side); + if (result != null) { + replaceHeldItemStack(aPlayer, heldItem, result); + return true; + } + return false; + } + + protected static ItemStack fillToTank(@Nonnull ItemStack container, @Nonnull IFluidHandler tank, + ForgeDirection side) { + final FluidStack fluidToFill = GTUtility.getFluidForFilledItem(container, true); + if (fluidToFill == null || fluidToFill.getFluid() == null || fluidToFill.amount <= 0) { + return null; + } + if (!tank.canFill(side, fluidToFill.getFluid())) { + return null; + } + + if (container.getItem() instanceof IFluidContainerItem containerItem) { + final int filled = tank.fill(side, fluidToFill, true); + if (filled == 0) { + return null; + } + containerItem.drain(container, filled, true); + return container; + } else { + final int filled = tank.fill(side, fluidToFill, false); + if (filled != fluidToFill.amount) { + return null; + } + tank.fill(side, fluidToFill, true); + return GTUtility.getContainerForFilledItem(container, false); + } + } + + protected static ItemStack fillToContainer(@Nonnull ItemStack container, @Nonnull FluidTankInfo tankInfo, + @Nonnull IFluidHandler tank, ForgeDirection side) { + if (tankInfo.fluid == null || tankInfo.fluid.getFluid() == null || tankInfo.fluid.amount <= 0) { + return null; + } + if (!tank.canDrain(side, tankInfo.fluid.getFluid())) { + return null; + } + + if (container.getItem() instanceof IFluidContainerItem containerItem) { + final int filled = Math.min( + Optional + .ofNullable( + tank.drain( + side, + new FluidStack(tankInfo.fluid.getFluid(), containerItem.getCapacity(container)), + false)) + .filter(fs -> GTUtility.areFluidsEqual(fs, tankInfo.fluid)) + .map(fs -> fs.amount) + .orElse(0), + containerItem.fill( + container, + new FluidStack(tankInfo.fluid.getFluid(), containerItem.getCapacity(container)), + false)); + if (filled == 0) { + return null; + } + containerItem.fill(container, new FluidStack(tankInfo.fluid.getFluid(), filled), true); + tank.drain(side, new FluidStack(tankInfo.fluid.getFluid(), filled), true); + return container; + } else { + final ItemStack filledContainer = GTUtility.fillFluidContainer(tankInfo.fluid, container, false, false); + if (filledContainer == null) { + return null; + } + final FluidStack filledFluid = GTUtility.getFluidForFilledItem(filledContainer, false); + if (filledFluid == null || filledFluid.getFluid() == null || filledFluid.amount <= 0) { + return null; + } + if (Optional.ofNullable(tank.drain(side, filledFluid, false)) + .filter(fs -> GTUtility.areFluidsEqual(fs, filledFluid)) + .map(fs -> fs.amount) + .orElse(0) != filledFluid.amount) { + return null; + } + tank.drain(side, filledFluid, true); + return filledContainer; + } + } + + protected static void replaceHeldItemStack(@Nonnull EntityPlayer player, @Nonnull ItemStack heldItem, + @Nonnull ItemStack result) { + heldItem.stackSize--; + GTUtility.addItemToPlayerInventory(player, result); + player.inventoryContainer.detectAndSendChanges(); + } + + @Override + protected FluidStorageData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, + FluidStorageData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + aCoverVariable + .setSide(ForgeDirection.values()[(aCoverVariable.side.ordinal() + 1) % ForgeDirection.values().length]) + .setSlot(0); + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("SIDE", "Side: ") + aCoverVariable.side.name()); + return aCoverVariable; + } + final FluidTankInfo[] tanks = getValidFluidTankInfos(aTileEntity, aCoverVariable.side); + if (tanks == null) { + return aCoverVariable.disable(); + } + assert 0 < tanks.length; + if (aCoverVariable.slot < 0 || tanks.length <= aCoverVariable.slot) { + aCoverVariable.setSlot(0); + } else { + aCoverVariable + .setSlot((aCoverVariable.slot + tanks.length + (aPlayer.isSneaking() ? -1 : 1)) % tanks.length); + } + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("053", "Slot: ") + aCoverVariable.slot); + return aCoverVariable; + } + + @Override + protected boolean isDataNeededOnClientImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + protected int getTickRateImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, + ICoverable aTileEntity) { + return 10; + } + + @Nullable + protected static FluidTankInfo[] getValidFluidTankInfos(@Nullable ICoverable tileEntity, + @Nonnull ForgeDirection side) { + if (tileEntity instanceof IFluidHandler) { + final FluidTankInfo[] tanks = ((IFluidHandler) tileEntity).getTankInfo(side); + if (tanks != null && tanks.length > 0) { + return tanks; + } + } + return null; + } + + @Nullable + protected static FluidTankInfo[] getValidFluidTankInfosForDisplay(@Nullable ICoverable tileEntity, + @Nonnull ForgeDirection side) { + if (tileEntity instanceof IGregTechTileEntity baseMetaTileEntity + && baseMetaTileEntity.getMetaTileEntity() instanceof MTEDigitalTankBase digitalTank) { + return digitalTank.getRealTankInfo(side); + } + return getValidFluidTankInfos(tileEntity, side); + } + + protected static int getTankScale(@Nonnull FluidTankInfo tank) { + if (tank.fluid == null || tank.capacity <= 0) { + return 0; + } + return (int) Math.ceil(tank.fluid.amount / (double) tank.capacity * (icons.length - 1)); + } + + protected short[] colorToRGBA(int color) { + return new short[] { (short) (color >> 16 & 0xFF), (short) (color >> 8 & 0xFF), (short) (color & 0xFF), + (short) (0xFF) }; + } + + public static class FluidStorageData implements ISerializableObject { + + private ForgeDirection side; + private int slot; + private Fluid fluid; + private int scale; + private boolean dirty; + + public FluidStorageData() { + this(ForgeDirection.UNKNOWN, 0, null, 0, false); + } + + public FluidStorageData(ForgeDirection side, int slot, Fluid fluid, int scale, boolean dirty) { + this.side = side; + this.slot = slot; + this.fluid = fluid; + this.scale = scale; + this.dirty = dirty; + } + + public FluidStorageData setSide(ForgeDirection side) { + this.side = side; + return this; + } + + /** + * @param slot 0-based index of the tank, -1 for no correct FluidTankInfo[] for the current side. + */ + public FluidStorageData setSlot(int slot) { + if (this.slot != slot) { + if (this.slot == -1 || slot == -1) { + this.dirty = true; + } + this.slot = slot; + } + return this; + } + + /** + * Means there is no correct FluidTankInfo[] for the current side. + */ + public FluidStorageData disable() { + setSlot(-1); + return this; + } + + public FluidStorageData setFluid(@Nullable Fluid fluid) { + if (!Util.areFluidsEqual(this.fluid, fluid)) { + this.fluid = fluid; + this.dirty = true; + } + return this; + } + + public FluidStorageData setFluid(@Nullable FluidStack fluidStack) { + final Fluid fluid = fluidStack == null ? null : fluidStack.getFluid(); + return setFluid(fluid); + } + + public FluidStorageData setScale(int scale) { + if (this.scale != scale) { + this.scale = scale; + this.dirty = true; + } + return this; + } + + public FluidStorageData setNullTank() { + return this.setFluid((Fluid) null) + .setScale(0); + } + + public FluidStorageData issueCoverUpdateIfNeeded(ICoverable tileEntity, ForgeDirection side) { + if (this.dirty) { + tileEntity.issueCoverUpdate(side); + this.dirty = false; + } + return this; + } + + // region ISerializableObject + @Nonnull + @Override + public ISerializableObject copy() { + return new FluidStorageData(side, slot, fluid, scale, dirty); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + NBTTagCompound tag = (NBTTagCompound) aNBT; + side = ForgeDirection.getOrientation(tag.getByte("side")); + slot = tag.getInteger("slot"); + fluid = Util.getFluid(tag.getString("fluidName")); + scale = tag.getInteger("scale"); + dirty = tag.getBoolean("dirty"); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setByte("side", (byte) side.ordinal()); + tag.setInteger("slot", slot); + tag.setString("fluidName", Util.getFluidName(fluid)); + tag.setInteger("scale", scale); + tag.setBoolean("dirty", dirty); + return tag; + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { + final ForgeDirection side = ForgeDirection.getOrientation(aBuf.readByte()); + final int slot = aBuf.readInt(); + final Fluid fluid = Util.getFluid(aBuf.readInt()); + final int scale = aBuf.readInt(); + final boolean dirty = aBuf.readBoolean(); + return new FluidStorageData(side, slot, fluid, scale, dirty); + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeByte(side.ordinal()); + aBuf.writeInt(slot); + aBuf.writeInt(Util.getFluidID(fluid)); + aBuf.writeInt(scale); + aBuf.writeBoolean(dirty); + } + // endregion + + } + + protected static class Util { + + public static int getFluidID(@Nullable Fluid fluid) { + return fluid == null ? -1 : fluid.getID(); + } + + public static String getFluidName(@Nullable Fluid fluid) { + return fluid == null ? "" : fluid.getName(); + } + + public static Fluid getFluid(int id) { + return id == -1 ? null : FluidRegistry.getFluid(id); + } + + public static Fluid getFluid(String name) { + return name.isEmpty() ? null : FluidRegistry.getFluid(name); + } + + public static boolean areFluidsEqual(@Nullable Fluid a, @Nullable Fluid b) { + return getFluidID(a) == getFluidID(b); + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverFluidfilter.java b/src/main/java/gregtech/common/covers/CoverFluidfilter.java new file mode 100644 index 0000000000..630a7c9ddf --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverFluidfilter.java @@ -0,0 +1,414 @@ +package gregtech.common.covers; + +import static gregtech.api.enums.GTValues.E; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.Constants.NBT; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerSlotWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import io.netty.buffer.ByteBuf; + +public class CoverFluidfilter extends CoverBehaviorBase { + + // Uses the lower 3 bits of the cover variable, so we have 8 options to work with (0-7) + private final int FILTER_INPUT_DENY_OUTPUT = 0; // 000 + private final int INVERT_INPUT_DENY_OUTPUT = 1; // 001 + private final int FILTER_INPUT_ANY_OUTPUT = 2; // 010 + private final int INVERT_INPUT_ANY_OUTPUT = 3; // 011 + private final int DENY_INPUT_FILTER_OUTPUT = 4; // 100 + private final int DENY_INPUT_INVERT_OUTPUT = 5; // 101 + private final int ANY_INPUT_FILTER_OUTPUT = 6; // 110 + private final int ANY_INPUT_INVERT_OUTPUT = 7; // 111 + + public CoverFluidfilter(ITexture coverTexture) { + super(FluidFilterData.class, coverTexture); + } + + @Override + public FluidFilterData createDataObject() { + return new FluidFilterData(-1, 0); + } + + @Override + public FluidFilterData createDataObject(int aLegacyData) { + return new FluidFilterData(aLegacyData >>> 3, aLegacyData & 0x7); + } + + @Override + protected String getDescriptionImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, + ICoverable aTileEntity) { + final Fluid fluid = FluidRegistry.getFluid(aCoverVariable.mFluidID); + if (fluid == null) return E; + + final FluidStack sFluid = new FluidStack(fluid, 1000); + return (String + .format("Filtering Fluid: %s - %s", sFluid.getLocalizedName(), getFilterMode(aCoverVariable.mFilterMode))); + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return false; + } + + @Override + protected FluidFilterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + FluidFilterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + return aCoverVariable; + } + + public String getFilterMode(int aFilterMode) { + return switch (aFilterMode) { + case FILTER_INPUT_DENY_OUTPUT -> GTUtility.trans("043", "Filter input, Deny output"); + case INVERT_INPUT_DENY_OUTPUT -> GTUtility.trans("044", "Invert input, Deny output"); + case FILTER_INPUT_ANY_OUTPUT -> GTUtility.trans("045", "Filter input, Permit any output"); + case INVERT_INPUT_ANY_OUTPUT -> GTUtility.trans("046", "Invert input, Permit any output"); + case DENY_INPUT_FILTER_OUTPUT -> GTUtility.trans("307", "Deny input, Filter output"); + case DENY_INPUT_INVERT_OUTPUT -> GTUtility.trans("308", "Deny input, Invert output"); + case ANY_INPUT_FILTER_OUTPUT -> GTUtility.trans("309", "Permit any input, Filter output"); + case ANY_INPUT_INVERT_OUTPUT -> GTUtility.trans("310", "Permit any input, Invert output"); + default -> ("UNKNOWN"); + }; + } + + @Override + protected FluidFilterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, + FluidFilterData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable.mFilterMode = (aCoverVariable.mFilterMode + (aPlayer.isSneaking() ? -1 : 1)) % 8; + if (aCoverVariable.mFilterMode < 0) { + aCoverVariable.mFilterMode = 7; + } + + GTUtility.sendChatToPlayer(aPlayer, getFilterMode(aCoverVariable.mFilterMode)); + + return aCoverVariable; + } + + @Override + protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, + ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == ForgeDirection.UNKNOWN) return false; + if (((aX > 0.375D) && (aX < 0.625D)) || ((side.offsetX != 0) && ((aY > 0.375D) && (aY < 0.625D))) + || (side.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) != 0 && aZ > 0.375D && aZ < 0.625D + || (side.offsetZ != 0)) { + final ItemStack tStack = aPlayer.inventory.getCurrentItem(); + if (tStack == null) return true; + + final FluidStack tFluid = GTUtility.getFluidForFilledItem(tStack, true); + if (tFluid != null) { + final int aFluid = tFluid.getFluidID(); + aCoverVariable.mFluidID = aFluid; + aTileEntity.setCoverDataAtSide(side, aCoverVariable); + final FluidStack sFluid = new FluidStack(FluidRegistry.getFluid(aFluid), 1000); + GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("047", "Filter Fluid: ") + sFluid.getLocalizedName()); + } + return true; + } + return false; + } + + @Override + protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsInImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + if (aFluid == null) return true; + + int aFilterMode = aCoverVariable.mFilterMode; + int aFilterFluid = aCoverVariable.mFluidID; + + if (aFilterMode == DENY_INPUT_FILTER_OUTPUT || aFilterMode == DENY_INPUT_INVERT_OUTPUT) return false; + else if (aFilterMode == ANY_INPUT_FILTER_OUTPUT || aFilterMode == ANY_INPUT_INVERT_OUTPUT) return true; + else if (aFluid.getID() == aFilterFluid) + return aFilterMode == FILTER_INPUT_DENY_OUTPUT || aFilterMode == FILTER_INPUT_ANY_OUTPUT; + else return aFilterMode == INVERT_INPUT_DENY_OUTPUT || aFilterMode == INVERT_INPUT_ANY_OUTPUT; + } + + @Override + protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + if (aFluid == null) return true; + + int aFilterMode = aCoverVariable.mFilterMode; + int aFilterFluid = aCoverVariable.mFluidID; + + if (aFilterMode == FILTER_INPUT_DENY_OUTPUT || aFilterMode == INVERT_INPUT_DENY_OUTPUT) return false; + else if (aFilterMode == FILTER_INPUT_ANY_OUTPUT || aFilterMode == INVERT_INPUT_ANY_OUTPUT) return true; + else if (aFluid.getID() == aFilterFluid) + return aFilterMode == DENY_INPUT_FILTER_OUTPUT || aFilterMode == ANY_INPUT_FILTER_OUTPUT; + else return aFilterMode == DENY_INPUT_INVERT_OUTPUT || aFilterMode == ANY_INPUT_INVERT_OUTPUT; + } + + @Override + protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected int getTickRateImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, + ICoverable aTileEntity) { + return 0; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new FluidFilterUIFactory(buildContext).createWindow(); + } + + private class FluidFilterUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public FluidFilterUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + builder.widget( + new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( + this::getCoverData, + this::setCoverData, + CoverFluidfilter.this, + (id, coverData) -> !getClickable(id, coverData), + (id, coverData) -> { + coverData.mFilterMode = getNewFilterMode(id, coverData); + return coverData; + }).addToggleButton( + 0, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_IMPORT) + .addTooltip(GTUtility.trans("232", "Filter Input")) + .setPos(spaceX * 0, spaceY * 0)) + .addToggleButton( + 1, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_EXPORT) + .addTooltip(GTUtility.trans("233", "Filter Output")) + .setPos(spaceX * 1, spaceY * 0)) + .addToggleButton( + 2, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_BLOCK_INPUT) + .addTooltip(GTUtility.trans("234", "Block Output")) + .setPos(spaceX * 0, spaceY * 2)) + .addToggleButton( + 3, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_ALLOW_INPUT) + .addTooltip(GTUtility.trans("235", "Allow Output")) + .setPos(spaceX * 1, spaceY * 2)) + .addToggleButton( + 4, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_WHITELIST) + .addTooltip(GTUtility.trans("236", "Whitelist Fluid")) + .setPos(spaceX * 0, spaceY * 1)) + .addToggleButton( + 5, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_BLACKLIST) + .addTooltip(GTUtility.trans("237", "Blacklist Fluid")) + .setPos(spaceX * 1, spaceY * 1)) + .addFollower(new CoverDataFollowerSlotWidget(new ItemStackHandler(), 0, true) { + + @Override + protected void putClickedStack(ItemStack stack, int mouseButton) { + if (stack != null && GTUtility.getFluidFromContainerOrFluidDisplay(stack) == null) + return; + super.putClickedStack( + GTUtility.getFluidDisplayStack( + GTUtility.getFluidFromContainerOrFluidDisplay(stack), + false), + mouseButton); + } + }, this::getFluidDisplayItem, (coverData, stack) -> { + if (stack == null) { + coverData.mFluidID = -1; + } else { + FluidStack fluid = GTUtility.getFluidFromDisplayStack(stack); + if (fluid != null && fluid.getFluid() != null) { + coverData.mFluidID = fluid.getFluid() + .getID(); + } + } + return coverData; + }, + widget -> widget.setBackground(ModularUITextures.FLUID_SLOT) + .setPos(0, spaceY * 3 + 2)) + .setPos(startX, startY)) + .widget( + new TextWidget(GTUtility.trans("238", "Filter Direction")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 2, 3 + startY + spaceY * 0)) + .widget( + new TextWidget(GTUtility.trans("239", "Filter Type")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 2, 3 + startY + spaceY * 1)) + .widget( + new TextWidget(GTUtility.trans("240", "Block Flow")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 2, 3 + startY + spaceY * 2)) + .widget(TextWidget.dynamicString(() -> { + if (getCoverData() != null) { + ItemStack fluidDisplay = getFluidDisplayItem(getCoverData()); + if (fluidDisplay != null) { + return fluidDisplay.getDisplayName(); + } + } + return GTUtility.trans("315", "Filter Empty"); + }) + .setSynced(false) + .setDefaultColor(COLOR_TITLE.get()) + .setPos(startX + spaceX + 3, 4 + startY + spaceY * 3)); + } + + private int getNewFilterMode(int id, FluidFilterData coverVariable) { + return switch (id) { + case 0 -> (coverVariable.mFilterMode & 0x3); + case 1 -> (coverVariable.mFilterMode | 0x4); + case 2 -> (coverVariable.mFilterMode & 0x5); + case 3 -> (coverVariable.mFilterMode | 0x2); + case 4 -> (coverVariable.mFilterMode & 0x6); + case 5 -> (coverVariable.mFilterMode | 0x1); + default -> coverVariable.mFilterMode; + }; + } + + private boolean getClickable(int id, FluidFilterData coverVariable) { + return switch (id) { + case 0, 1 -> (coverVariable.mFilterMode >> 2 & 0x1) != (id & 0x1); + case 2, 3 -> (coverVariable.mFilterMode >> 1 & 0x1) != (id & 0x1); + case 4, 5 -> (coverVariable.mFilterMode & 0x1) != (id & 0x1); + default -> false; + }; + } + + private ItemStack getFluidDisplayItem(FluidFilterData coverData) { + Fluid fluid = FluidRegistry.getFluid(coverData.mFluidID); + return GTUtility.getFluidDisplayStack(fluid); + } + } + + public static class FluidFilterData implements ISerializableObject { + + private int mFluidID; + private int mFilterMode; + + public FluidFilterData(int mFluidID, int mFilterMode) { + this.mFluidID = mFluidID; + this.mFilterMode = mFilterMode; + } + + @Override + @Nonnull + public ISerializableObject copy() { + return new FluidFilterData(mFluidID, mFilterMode); + } + + @Override + @Nonnull + public NBTBase saveDataToNBT() { + NBTTagCompound tNBT = new NBTTagCompound(); + tNBT.setInteger("mFilterMode", mFilterMode); + if (mFluidID >= 0) tNBT.setString( + "mFluid", + FluidRegistry.getFluid(mFluidID) + .getName()); + return tNBT; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeByte(mFilterMode) + .writeInt(mFluidID); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + if (aNBT instanceof NBTTagCompound tNBT) { + mFilterMode = tNBT.getInteger("mFilterMode"); + if (tNBT.hasKey("mFluid", NBT.TAG_STRING)) + mFluidID = FluidRegistry.getFluidID(tNBT.getString("mFluid")); + else mFluidID = -1; + } + } + + @Override + @Nonnull + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + mFilterMode = aBuf.readByte(); + mFluidID = aBuf.readInt(); + return this; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverInfo.java b/src/main/java/gregtech/common/covers/CoverInfo.java index 48f6dd9748..0a3ef3a07b 100644 --- a/src/main/java/gregtech/common/covers/CoverInfo.java +++ b/src/main/java/gregtech/common/covers/CoverInfo.java @@ -15,12 +15,12 @@ import org.jetbrains.annotations.NotNull; import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import gregtech.api.GregTech_API; -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; +import gregtech.api.GregTechAPI; +import gregtech.api.gui.modularui.CoverUIBuildContext; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTUtility; import gregtech.api.util.ISerializableObject; public final class CoverInfo { @@ -33,7 +33,7 @@ public final class CoverInfo { public static final CoverInfo EMPTY_INFO = new CoverInfo(ForgeDirection.UNKNOWN, null); private final ForgeDirection coverSide; private int coverID = 0; - private GT_CoverBehaviorBase coverBehavior; + private CoverBehaviorBase coverBehavior; private ISerializableObject coverData; private final WeakReference coveredTile; private boolean needsUpdate = false; @@ -43,13 +43,13 @@ public final class CoverInfo { public CoverInfo(ForgeDirection side, ICoverable aTile) { coverSide = side; coveredTile = new WeakReference<>(aTile); - coverBehavior = GregTech_API.sNoBehavior; + coverBehavior = GregTechAPI.sNoBehavior; } public CoverInfo(ForgeDirection side, int aID, ICoverable aTile, ISerializableObject aCoverData) { coverSide = side; coverID = aID; - coverBehavior = GregTech_API.getCoverBehaviorNew(aID); + coverBehavior = GregTechAPI.getCoverBehaviorNew(aID); coverData = aCoverData == null ? coverBehavior.createDataObject() : aCoverData; coveredTile = new WeakReference<>(aTile); } @@ -57,7 +57,7 @@ public final class CoverInfo { public CoverInfo(ICoverable aTile, NBTTagCompound aNBT) { coverSide = ForgeDirection.getOrientation(aNBT.getByte(NBT_SIDE)); coverID = aNBT.getInteger(NBT_ID); - coverBehavior = GregTech_API.getCoverBehaviorNew(coverID); + coverBehavior = GregTechAPI.getCoverBehaviorNew(coverID); coverData = aNBT.hasKey(NBT_DATA) ? coverBehavior.createDataObject(aNBT.getTag(NBT_DATA)) : coverBehavior.createDataObject(); coveredTile = new WeakReference<>(aTile); @@ -89,13 +89,13 @@ public final class CoverInfo { needsUpdate = aUpdate; } - public GT_CoverBehaviorBase getCoverBehavior() { + public CoverBehaviorBase getCoverBehavior() { return coverBehavior; } public ISerializableObject getCoverData() { if (coverData != null) return coverData; - return GregTech_API.sNoBehavior.createDataObject(); + return GregTechAPI.sNoBehavior.createDataObject(); } public boolean onCoverRemoval(boolean aForced) { @@ -160,7 +160,7 @@ public final class CoverInfo { } public void updateCoverBehavior() { - coverBehavior = GregTech_API.getCoverBehaviorNew(coverID); + coverBehavior = GregTechAPI.getCoverBehaviorNew(coverID); } public void preDataChanged(int aCoverID, ISerializableObject aCoverData) { @@ -176,7 +176,7 @@ public final class CoverInfo { } public ModularWindow createWindow(EntityPlayer player) { - final GT_CoverUIBuildContext buildContext = new GT_CoverUIBuildContext( + final CoverUIBuildContext buildContext = new CoverUIBuildContext( player, coverID, coverSide, @@ -246,7 +246,7 @@ public final class CoverInfo { public void onCoverJackhammer(EntityPlayer aPlayer) { adjustTickRateMultiplier(aPlayer.isSneaking()); - GT_Utility.sendChatToPlayer( + GTUtility.sendChatToPlayer( aPlayer, StatCollector.translateToLocalFormatted("gt.cover.info.chat.tick_rate", getCurrentTickRateFormatted())); } diff --git a/src/main/java/gregtech/common/covers/CoverItemFilter.java b/src/main/java/gregtech/common/covers/CoverItemFilter.java new file mode 100644 index 0000000000..acdbda795b --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverItemFilter.java @@ -0,0 +1,298 @@ +package gregtech.common.covers; + +import static gregtech.api.util.GTUtility.intToStack; +import static gregtech.api.util.GTUtility.moveMultipleItemStacks; + +import java.util.Collections; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.common.network.ByteBufUtils; +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerSlotWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import io.netty.buffer.ByteBuf; + +public class CoverItemFilter extends CoverBehaviorBase { + + private final boolean mExport; + + public CoverItemFilter(boolean isExport, ITexture coverTexture) { + super(ItemFilterData.class, coverTexture); + this.mExport = isExport; + } + + @Override + public ItemFilterData createDataObject(int aLegacyData) { + return new ItemFilterData((aLegacyData & 0x1) == 0, intToStack(aLegacyData >>> 1)); + } + + @Override + public ItemFilterData createDataObject() { + return new ItemFilterData(); + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return false; + } + + @Override + protected ItemFilterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + ItemFilterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + final TileEntity tTileEntity = aTileEntity.getTileEntityAtSide(side); + final Object fromEntity = mExport ? aTileEntity : tTileEntity; + final Object toEntity = !mExport ? aTileEntity : tTileEntity; + final ForgeDirection fromSide = !mExport ? side.getOpposite() : side; + final ForgeDirection toSide = mExport ? side.getOpposite() : side; + + final List filter = Collections.singletonList(aCoverVariable.mFilter); + + moveMultipleItemStacks( + fromEntity, + toEntity, + fromSide, + toSide, + filter, + aCoverVariable.mWhitelist, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1, + 64); + + return aCoverVariable; + } + + @Override + protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, + ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + final ItemStack tStack = aPlayer.inventory.getCurrentItem(); + if (tStack != null) { + aCoverVariable.mFilter = tStack; + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("299", "Item Filter: ") + tStack.getDisplayName()); + } else { + aCoverVariable.mFilter = null; + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("300", "Filter Cleared!")); + } + return true; + } + + @Override + protected ItemFilterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, + ItemFilterData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable.mWhitelist = !aCoverVariable.mWhitelist; + GTUtility.sendChatToPlayer( + aPlayer, + aCoverVariable.mWhitelist ? GTUtility.trans("125.1", "Whitelist Mode") + : GTUtility.trans("124.1", "Blacklist Mode")); + return aCoverVariable; + } + + @Override + protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return false; + } + + @Override + protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return false; + } + + @Override + protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected int getTickRateImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, + ICoverable aTileEntity) { + return 1; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new ItemFilterUIFactory(buildContext).createWindow(); + } + + private class ItemFilterUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public ItemFilterUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + ItemStackHandler filterInvHandler = new ItemStackHandler(1); + if (getCoverData() != null) { + filterInvHandler.setStackInSlot(0, setStackSize1(getCoverData().mFilter)); + } + builder.widget( + new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, CoverItemFilter.this) + .addFollower( + new CoverDataFollowerToggleButtonWidget<>(), + coverData -> coverData.mWhitelist, + (coverData, state) -> { + coverData.mWhitelist = state; + return coverData; + }, + widget -> widget + .setToggleTexture( + GTUITextures.OVERLAY_BUTTON_BLACKLIST, + GTUITextures.OVERLAY_BUTTON_WHITELIST) + .addTooltip(0, GTUtility.trans("125.1", "Whitelist Mode")) + .addTooltip(1, GTUtility.trans("124.1", "Blacklist Mode")) + .setPos(spaceX * 0, spaceY * 0)) + .addFollower( + new CoverDataFollowerSlotWidget<>(filterInvHandler, 0, true), + coverData -> setStackSize1(coverData.mFilter), + (coverData, stack) -> { + coverData.mFilter = setStackSize1(stack); + return coverData; + }, + widget -> widget.setBackground(GTUITextures.SLOT_DARK_GRAY) + .setPos(spaceX * 0, spaceY * 2)) + .setPos(startX, startY)) + .widget( + new TextWidget(GTUtility.trans("317", "Filter: ")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 0, 3 + startY + spaceY * 1)) + .widget( + new TextWidget(GTUtility.trans("318", "Check Mode")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 2, 3 + startY + spaceY * 0)); + } + + private ItemStack setStackSize1(ItemStack stack) { + if (stack != null) { + stack.stackSize = 1; + } + return stack; + } + } + + public static class ItemFilterData implements ISerializableObject { + + private boolean mWhitelist; + private ItemStack mFilter; + + public ItemFilterData() {} + + public ItemFilterData(boolean mWhitelist, ItemStack mFilter) { + this.mWhitelist = mWhitelist; + this.mFilter = mFilter; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new ItemFilterData(mWhitelist, mFilter); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setBoolean("mWhitelist", mWhitelist); + if (mFilter != null) tag.setTag("mFilter", mFilter.writeToNBT(new NBTTagCompound())); + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeBoolean(mWhitelist); + ByteBufUtils.writeItemStack(aBuf, mFilter); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + NBTTagCompound tag = (NBTTagCompound) aNBT; + mWhitelist = tag.getBoolean("mWhitelist"); + if (tag.hasKey("mFilter", Constants.NBT.TAG_COMPOUND)) + mFilter = ItemStack.loadItemStackFromNBT(tag.getCompoundTag("mFilter")); + else mFilter = null; + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + mWhitelist = aBuf.readBoolean(); + mFilter = ISerializableObject.readItemStackFromGreggyByteBuf(aBuf); + return this; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverItemMeter.java b/src/main/java/gregtech/common/covers/CoverItemMeter.java new file mode 100644 index 0000000000..376a93682c --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverItemMeter.java @@ -0,0 +1,384 @@ +package gregtech.common.covers; + +import java.text.FieldPosition; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import gregtech.common.gui.modularui.widget.ItemWatcherSlotWidget; +import gregtech.common.tileentities.machines.MTEHatchOutputBusME; +import gregtech.common.tileentities.storage.MTEDigitalChestBase; +import io.netty.buffer.ByteBuf; + +public class CoverItemMeter extends CoverBehaviorBase { + + // Legacy data format + private static final int SLOT_MASK = 0x3FFFFFFF; // 0 = all, 1 = 0 ... + private static final int CONVERTED_BIT = 0x80000000; + private static final int INVERT_BIT = 0x40000000; + + public CoverItemMeter(ITexture coverTexture) { + super(ItemMeterData.class, coverTexture); + } + + @Override + public ItemMeterData createDataObject(int aLegacyData) { + // Convert from ver. 5.09.33.50 + if ((CONVERTED_BIT & aLegacyData) == 0) if (aLegacyData == 0) aLegacyData = CONVERTED_BIT; + else if (aLegacyData == 1) aLegacyData = CONVERTED_BIT | INVERT_BIT; + else if (aLegacyData > 1) aLegacyData = CONVERTED_BIT | Math.min((aLegacyData - 2), SLOT_MASK); + + boolean invert = (aLegacyData & INVERT_BIT) == INVERT_BIT; + int slot = (aLegacyData & SLOT_MASK) - 1; + + return new ItemMeterData(invert, slot, 0); + } + + @Override + public ItemMeterData createDataObject() { + return new ItemMeterData(); + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return false; + } + + public static byte computeSignalBasedOnItems(ICoverable tileEntity, boolean inverted, int threshold, int slot, + int ordinalSide) { + long max = 0; + long used = 0; + final IMetaTileEntity mte = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); + if (mte instanceof MTEDigitalChestBase dc) { + max = dc.getMaxItemCount(); + used = dc.getProgresstime(); + } else if (mte instanceof MTEHatchOutputBusME) { + if (((MTEHatchOutputBusME) mte).canAcceptItem()) { + max = 64; + used = 0; + } + } else { + final int[] slots = slot >= 0 ? new int[] { slot } : tileEntity.getAccessibleSlotsFromSide(ordinalSide); + + for (int i : slots) { + if (i >= 0 && i < tileEntity.getSizeInventory()) { + max += 64; + final ItemStack stack = tileEntity.getStackInSlot(i); + if (stack != null) used += ((long) stack.stackSize << 6) / stack.getMaxStackSize(); + } + } + } + + return GTUtility.convertRatioToRedstone(used, max, threshold, inverted); + } + + @Override + protected ItemMeterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + ItemMeterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + byte signal = computeSignalBasedOnItems( + aTileEntity, + aCoverVariable.inverted, + aCoverVariable.threshold, + aCoverVariable.slot, + side.ordinal()); + aTileEntity.setOutputRedstoneSignal(side, signal); + + return aCoverVariable; + } + + @Override + protected ItemMeterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, + ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + if (aCoverVariable.inverted) { + aCoverVariable.inverted = false; + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("055", "Normal")); + } else { + aCoverVariable.inverted = true; + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("054", "Inverted")); + } + } else { + aCoverVariable.slot++; + if (aCoverVariable.slot > aTileEntity.getSizeInventory()) aCoverVariable.slot = -1; + + if (aCoverVariable.slot == -1) + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("053", "Slot: ") + GTUtility.trans("ALL", "All")); + else GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("053", "Slot: ") + aCoverVariable.slot); + } + + return aCoverVariable; + } + + @Override + protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, + ItemMeterData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + protected int getTickRateImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, + ICoverable aTileEntity) { + return 5; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new ItemMeterUIFactory(buildContext).createWindow(); + } + + private class ItemMeterUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + /** + * Display the text "All" instead of a number when the slot is set to -1. + */ + protected static final NumberFormatMUI numberFormatAll = new NumberFormatMUI() { + + @Override + public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { + if (number < 0) { + return toAppendTo.append(GTUtility.trans("ALL", "All")); + } else { + return super.format(number, toAppendTo, pos); + } + } + }; + + private int maxSlot; + private int maxThreshold; + + public ItemMeterUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + final String INVERTED = GTUtility.trans("INVERTED", "Inverted"); + final String NORMAL = GTUtility.trans("NORMAL", "Normal"); + + setMaxSlot(); + setMaxThreshold(); + + builder.widget( + new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, CoverItemMeter.this) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofRedstone(), + coverData -> coverData.inverted, + (coverData, state) -> { + coverData.inverted = state; + return coverData; + }, + widget -> widget.addTooltip(0, NORMAL) + .addTooltip(1, INVERTED) + .setPos(0, 0)) + .addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) coverData.threshold, + (coverData, state) -> { + coverData.threshold = state.intValue(); + return coverData; + }, + widget -> widget.setBounds(0, maxThreshold) + .setScrollValues(1, 64, 1000) + .setFocusOnGuiOpen(true) + .setPos(0, 2 + spaceY) + .setSize(spaceX * 4 + 5, 12)) + .addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) coverData.slot, + (coverData, state) -> { + coverData.slot = state.intValue(); + return coverData; + }, + widget -> widget.setBounds(-1, maxSlot) + .setDefaultValue(-1) + .setScrollValues(1, 100, 10) + .setNumberFormat(numberFormatAll) + .setPos(0, 2 + spaceY * 2) + .setSize(spaceX * 3 + 1, 12)) + .setPos(startX, startY)) + .widget( + new ItemWatcherSlotWidget().setGetter(this::getTargetItem) + .setPos(startX + spaceX * 3 + 8, startY + spaceY * 2)) + .widget( + new TextWidget() + .setStringSupplier( + () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX, 4 + startY)) + .widget( + new TextWidget(GTUtility.trans("254", "Detect slot #")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 4 + 9, 4 + startY + spaceY * 2)) + .widget( + new TextWidget(GTUtility.trans("221", "Item threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 4 + 9, 4 + startY + spaceY)); + } + + private void setMaxSlot() { + final ICoverable tile = getUIBuildContext().getTile(); + if (!tile.isDead() && tile instanceof IGregTechTileEntity gtTile + && !(gtTile.getMetaTileEntity() instanceof MTEDigitalChestBase)) { + maxSlot = Math.min(tile.getSizeInventory() - 1, SLOT_MASK - 1); + } else { + maxSlot = -1; + } + } + + private void setMaxThreshold() { + final ICoverable tile = getUIBuildContext().getTile(); + if (!tile.isDead() && tile instanceof IGregTechTileEntity gtTile + && gtTile.getMetaTileEntity() instanceof MTEDigitalChestBase) { + maxThreshold = gtTile.getMaxItemCount(); + } else { + maxThreshold = maxSlot > 0 ? maxSlot * 64 : Integer.MAX_VALUE; + } + } + + private ItemStack getTargetItem() { + ItemMeterData coverVariable = getCoverData(); + if (coverVariable == null || coverVariable.slot < 0) { + return null; + } + ICoverable tile = getUIBuildContext().getTile(); + if (tile instanceof TileEntity && !tile.isDead()) { + if (tile.getSizeInventory() >= coverVariable.slot) { + return tile.getStackInSlot(coverVariable.slot); + } + } + return null; + } + } + + public static class ItemMeterData implements ISerializableObject { + + private boolean inverted; + /** The special value {@code -1} means all slots. */ + private int slot; + /** The special value {@code 0} means threshold check is disabled. */ + private int threshold; + + public ItemMeterData() { + inverted = false; + slot = -1; + threshold = 0; + } + + public ItemMeterData(boolean inverted, int slot, int threshold) { + this.inverted = inverted; + this.slot = slot; + this.threshold = threshold; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new ItemMeterData(inverted, slot, threshold); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setBoolean("invert", inverted); + tag.setInteger("slot", slot); + tag.setInteger("threshold", threshold); + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeBoolean(inverted); + aBuf.writeInt(slot); + aBuf.writeInt(threshold); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + NBTTagCompound tag = (NBTTagCompound) aNBT; + inverted = tag.getBoolean("invert"); + slot = tag.getInteger("slot"); + threshold = tag.getInteger("threshold"); + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + inverted = aBuf.readBoolean(); + slot = aBuf.readInt(); + threshold = aBuf.readInt(); + return this; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverLens.java b/src/main/java/gregtech/common/covers/CoverLens.java new file mode 100644 index 0000000000..37c257ff4d --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverLens.java @@ -0,0 +1,28 @@ +package gregtech.common.covers; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehavior; + +public class CoverLens extends CoverBehavior { + + private final byte mColor; + + public CoverLens(byte aColor, ITexture coverTexture) { + super(coverTexture); + this.mColor = aColor; + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public byte getLensColor(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return this.mColor; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverLiquidMeter.java b/src/main/java/gregtech/common/covers/CoverLiquidMeter.java new file mode 100644 index 0000000000..2f13f25421 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverLiquidMeter.java @@ -0,0 +1,292 @@ +package gregtech.common.covers; + +import java.util.Arrays; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import gregtech.common.tileentities.storage.MTEDigitalTankBase; +import io.netty.buffer.ByteBuf; + +/** + * TODO: Implement overlay rendering only with + * {@link CoverBehaviorBase#getSpecialCoverFGTextureImpl(ForgeDirection, int, ISerializableObject, ICoverable)} + */ +public class CoverLiquidMeter extends CoverBehaviorBase { + + public CoverLiquidMeter(ITexture coverTexture) { + super(LiquidMeterData.class, coverTexture); + } + + @Override + public LiquidMeterData createDataObject(int aLegacyData) { + return new LiquidMeterData(aLegacyData == 0, 0); + } + + @Override + public LiquidMeterData createDataObject() { + return new LiquidMeterData(); + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return false; + } + + public static byte computeSignalBasedOnFluid(ICoverable tileEntity, boolean inverted, int threshold) { + if (tileEntity instanceof IFluidHandler) { + FluidTankInfo[] tanks = ((IFluidHandler) tileEntity).getTankInfo(ForgeDirection.UNKNOWN); + long max = 0; + long used = 0; + if (tanks != null) { + for (FluidTankInfo tank : tanks) { + if (tank != null) { + if (tileEntity instanceof BaseMetaTileEntity + && ((BaseMetaTileEntity) tileEntity).getMetaTileEntity() instanceof MTEDigitalTankBase) { + max += ((MTEDigitalTankBase) ((BaseMetaTileEntity) tileEntity).getMetaTileEntity()) + .getRealCapacity(); + } else max += tank.capacity; + FluidStack tLiquid = tank.fluid; + if (tLiquid != null) { + used += tLiquid.amount; + } + } + } + } + + return GTUtility.convertRatioToRedstone(used, max, threshold, inverted); + } else { + return 0; + } + } + + @Override + protected LiquidMeterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + LiquidMeterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + byte signal = computeSignalBasedOnFluid(aTileEntity, aCoverVariable.inverted, aCoverVariable.threshold); + aTileEntity.setOutputRedstoneSignal(side, signal); + + return aCoverVariable; + } + + @Override + protected LiquidMeterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, + LiquidMeterData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aCoverVariable.inverted) { + aCoverVariable.inverted = false; + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("055", "Normal")); + } else { + aCoverVariable.inverted = true; + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("054", "Inverted")); + } + return aCoverVariable; + } + + @Override + protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, + LiquidMeterData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + protected int getTickRateImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, + ICoverable aTileEntity) { + return 5; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new LiquidMeterUIFactory(buildContext).createWindow(); + } + + private class LiquidMeterUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + private int maxCapacity; + + public LiquidMeterUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + final String INVERTED = GTUtility.trans("INVERTED", "Inverted"); + final String NORMAL = GTUtility.trans("NORMAL", "Normal"); + + setMaxCapacity(); + + builder.widget( + new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, CoverLiquidMeter.this) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofRedstone(), + coverData -> coverData.inverted, + (coverData, state) -> { + coverData.inverted = state; + return coverData; + }, + widget -> widget.addTooltip(0, NORMAL) + .addTooltip(1, INVERTED) + .setPos(spaceX * 0, spaceY * 0)) + .addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) coverData.threshold, + (coverData, state) -> { + coverData.threshold = state.intValue(); + return coverData; + }, + widget -> widget.setBounds(0, maxCapacity > 0 ? maxCapacity : Integer.MAX_VALUE) + .setScrollValues(1000, 144, 100000) + .setFocusOnGuiOpen(true) + .setPos(spaceX * 0, spaceY * 1 + 2) + .setSize(spaceX * 4 + 5, 12)) + .setPos(startX, startY)) + .widget( + new TextWidget() + .setStringSupplier( + () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 1, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(GTUtility.trans("222", "Fluid threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5 - 10, startY + spaceY * 1 + 4)); + } + + private void setMaxCapacity() { + final ICoverable tile = getUIBuildContext().getTile(); + if (!tile.isDead() && tile instanceof IFluidHandler) { + FluidTankInfo[] tanks = ((IFluidHandler) tile).getTankInfo(ForgeDirection.UNKNOWN); + maxCapacity = Arrays.stream(tanks) + .mapToInt(tank -> tank.capacity) + .sum(); + } else { + maxCapacity = -1; + } + } + } + + public static class LiquidMeterData implements ISerializableObject { + + private boolean inverted; + /** + * The special value {@code 0} means threshold check is disabled. + */ + private int threshold; + + public LiquidMeterData() { + inverted = false; + threshold = 0; + } + + public LiquidMeterData(boolean inverted, int threshold) { + this.inverted = inverted; + this.threshold = threshold; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new LiquidMeterData(inverted, threshold); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setBoolean("invert", inverted); + tag.setInteger("threshold", threshold); + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeBoolean(inverted); + aBuf.writeInt(threshold); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + NBTTagCompound tag = (NBTTagCompound) aNBT; + inverted = tag.getBoolean("invert"); + threshold = tag.getInteger("threshold"); + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + inverted = aBuf.readBoolean(); + threshold = aBuf.readInt(); + return this; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverMetricsTransmitter.java b/src/main/java/gregtech/common/covers/CoverMetricsTransmitter.java new file mode 100644 index 0000000000..9715fd11f0 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverMetricsTransmitter.java @@ -0,0 +1,211 @@ +package gregtech.common.covers; + +import java.util.List; +import java.util.UUID; + +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.google.common.collect.ImmutableList; +import com.google.common.io.ByteArrayDataInput; + +import gregtech.api.enums.ItemList; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetricsExporter; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.ISerializableObject; +import gregtech.common.events.MetricsCoverDataEvent; +import gregtech.common.events.MetricsCoverSelfDestructEvent; +import gregtech.common.misc.GlobalMetricsCoverDatabase; +import gregtech.common.misc.GlobalMetricsCoverDatabase.State; +import io.netty.buffer.ByteBuf; + +/** + * Used to transmit Nuclear Control information across dimensions. The only reason this is a cover is to artificially + * limit the number of total machines that transmit this data, for performance reasons. + *

+ * This cover will retrieve information, preferentially, using {@link IMetricsExporter#reportMetrics()}. Absent this + * method, it will resort to {@link BaseMetaTileEntity#getInfoData()} instead. + */ +public class CoverMetricsTransmitter extends CoverBehaviorBase { + + @SuppressWarnings("SpellCheckingInspection") + public static final String FREQUENCY_MSB_KEY = "gt.metricscover.freq_msb"; + @SuppressWarnings("SpellCheckingInspection") + public static final String FREQUENCY_LSB_KEY = "gt.metricscover.freq_lsb"; + public static final String MACHINE_KEY = "machine_name"; + public static final String CARD_STATE_KEY = "card_state"; + + @SuppressWarnings("unused") + public CoverMetricsTransmitter() { + this(null); + } + + public CoverMetricsTransmitter(ITexture coverTexture) { + super(MetricsTransmitterData.class, coverTexture); + } + + @Override + public MetricsTransmitterData createDataObject(int aLegacyData) { + // As a new cover, this shouldn't fire. + return new MetricsTransmitterData(); + } + + @Override + public MetricsTransmitterData createDataObject() { + return new MetricsTransmitterData(); + } + + @Override + protected int getTickRateImpl(ForgeDirection side, int aCoverID, MetricsTransmitterData aCoverVariable, + ICoverable aTileEntity) { + return 20; + } + + @Override + public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { + return aTileEntity instanceof final IGregTechDeviceInformation device && device.isGivingInformation(); + } + + @Override + protected MetricsTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + MetricsTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + if (aTileEntity instanceof final BaseMetaTileEntity baseMTE && baseMTE.isGivingInformation()) { + final List payload; + + if (baseMTE.getMetaTileEntity() instanceof final IMetricsExporter metricsExporter) { + payload = metricsExporter.reportMetrics(); + } else { + payload = ImmutableList.copyOf(baseMTE.getInfoData()); + } + + MinecraftForge.EVENT_BUS.post(new MetricsCoverDataEvent( + aCoverVariable.frequency, + payload, + new GlobalMetricsCoverDatabase.Coordinates( + baseMTE.getWorld().provider.getDimensionName(), + baseMTE.getXCoord(), + baseMTE.getYCoord(), + baseMTE.getZCoord() + ) + )); + } + + return aCoverVariable; + } + + @Override + protected void onDroppedImpl(ForgeDirection side, int aCoverID, MetricsTransmitterData aCoverVariable, + ICoverable aTileEntity) { + MinecraftForge.EVENT_BUS.post(new MetricsCoverSelfDestructEvent(aCoverVariable.frequency)); + } + + @Override + public void onPlayerAttach(EntityPlayer player, ItemStack aCover, ICoverable aTileEntity, ForgeDirection side) { + final UUID newFrequency = UUID.randomUUID(); + final ItemStack cardStack = ItemList.NC_AdvancedSensorCard.get(1); + + if (cardStack == null) { + return; + } + + final NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setLong(FREQUENCY_MSB_KEY, newFrequency.getMostSignificantBits()); + tagCompound.setLong(FREQUENCY_LSB_KEY, newFrequency.getLeastSignificantBits()); + tagCompound.setInteger(CARD_STATE_KEY, State.OPERATIONAL.getType()); + + if (aTileEntity instanceof final BaseMetaTileEntity baseMTE) { + final ItemStack baseMTEStack = baseMTE.getStackForm(1); + if (baseMTEStack != null) { + tagCompound.setTag(MACHINE_KEY, baseMTEStack.writeToNBT(new NBTTagCompound())); + } + } + + cardStack.setTagCompound(tagCompound); + aTileEntity.getCoverInfoAtSide(side) + .setCoverData(new MetricsTransmitterData(newFrequency)); + + final EntityItem cardEntity = new EntityItem(player.worldObj, player.posX, player.posY, player.posZ, cardStack); + cardEntity.delayBeforeCanPickup = 0; + player.worldObj.spawnEntityInWorld(cardEntity); + } + + @Override + public boolean allowsCopyPasteTool() { + return false; + } + + @Override + public List getAdditionalTooltipImpl(MetricsTransmitterData data) { + return ImmutableList.of( + StatCollector.translateToLocalFormatted( + "gt.item.adv_sensor_card.tooltip.frequency", + EnumChatFormatting.UNDERLINE.toString() + EnumChatFormatting.YELLOW + data.frequency.toString())); + } + + public static class MetricsTransmitterData implements ISerializableObject { + + private UUID frequency; + + public MetricsTransmitterData() { + this.frequency = UUID.randomUUID(); + } + + public MetricsTransmitterData(@NotNull UUID frequency) { + this.frequency = frequency; + } + + @NotNull + public UUID getFrequency() { + return frequency; + } + + @NotNull + @Override + public ISerializableObject copy() { + return new MetricsTransmitterData(frequency); + } + + @NotNull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setLong(FREQUENCY_MSB_KEY, frequency.getMostSignificantBits()); + tag.setLong(FREQUENCY_LSB_KEY, frequency.getLeastSignificantBits()); + return tag; + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + if (aNBT instanceof final NBTTagCompound tag) { + frequency = new UUID(tag.getLong(FREQUENCY_MSB_KEY), tag.getLong(FREQUENCY_LSB_KEY)); + } + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeLong(frequency.getMostSignificantBits()); + aBuf.writeLong(frequency.getLeastSignificantBits()); + } + + @NotNull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { + return new MetricsTransmitterData(new UUID(aBuf.readLong(), aBuf.readLong())); + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverNeedMaintainance.java b/src/main/java/gregtech/common/covers/CoverNeedMaintainance.java new file mode 100644 index 0000000000..f137ce5844 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverNeedMaintainance.java @@ -0,0 +1,297 @@ +package gregtech.common.covers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; + +public class CoverNeedMaintainance extends CoverBehavior { + + public CoverNeedMaintainance(ITexture coverTexture) { + super(coverTexture); + } + + public static boolean isRotor(ItemStack rotor) { + return (rotor != null && rotor.getItem() instanceof MetaGeneratedTool + && rotor.getItemDamage() >= 170 + && rotor.getItemDamage() <= 176); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + boolean needsRepair = false; + if (aTileEntity instanceof IGregTechTileEntity tTileEntity) { + final IMetaTileEntity mTileEntity = tTileEntity.getMetaTileEntity(); + if (mTileEntity instanceof MTEMultiBlockBase multi) { + final int ideal = multi.getIdealStatus(); + final int real = multi.getRepairStatus(); + final ItemStack tRotor = multi.getRealInventory()[1]; + final int coverVar = aCoverVariable >>> 1; + if (coverVar < 5) { + if (ideal - real > coverVar) needsRepair = true; + } else if (coverVar == 5 || coverVar == 6) { + if (isRotor(tRotor)) { + long tMax = MetaGeneratedTool.getToolMaxDamage(tRotor); + long tCur = MetaGeneratedTool.getToolDamage(tRotor); + if (coverVar == 5) { + needsRepair = (tCur >= tMax * 8 / 10); + } else { + long mExpectedDamage = Math.round( + Math.min( + multi.mEUt / multi.damageFactorLow, + Math.pow(multi.mEUt, multi.damageFactorHigh))); + needsRepair = tCur + mExpectedDamage * 2 >= tMax; + } + } else { + needsRepair = true; + } + } + } + } + if (aCoverVariable % 2 == 0) { + needsRepair = !needsRepair; + } + + aTileEntity.setOutputRedstoneSignal(side, (byte) (needsRepair ? 0 : 15)); + aTileEntity.setOutputRedstoneSignal(side.getOpposite(), (byte) (needsRepair ? 0 : 15)); + return aCoverVariable; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 14; + if (aCoverVariable < 0) { + aCoverVariable = 13; + } + switch (aCoverVariable) { + case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("056", "Emit if 1 Maintenance Needed")); + case 1 -> GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("057", "Emit if 1 Maintenance Needed(inverted)")); + case 2 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("058", "Emit if 2 Maintenance Needed")); + case 3 -> GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("059", "Emit if 2 Maintenance Needed(inverted)")); + case 4 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("060", "Emit if 3 Maintenance Needed")); + case 5 -> GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("061", "Emit if 3 Maintenance Needed(inverted)")); + case 6 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("062", "Emit if 4 Maintenance Needed")); + case 7 -> GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("063", "Emit if 4 Maintenance Needed(inverted)")); + case 8 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("064", "Emit if 5 Maintenance Needed")); + case 9 -> GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("065", "Emit if 5 Maintenance Needed(inverted)")); + case 10 -> GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("066", "Emit if rotor needs maintenance low accuracy mod")); + case 11 -> GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("067", "Emit if rotor needs maintenance low accuracy mod(inverted)")); + case 12 -> GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("068", "Emit if rotor needs maintenance high accuracy mod")); + case 13 -> GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("069", "Emit if rotor needs maintenance high accuracy mod(inverted)")); + } + return aCoverVariable; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 60; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new NeedMaintainanceUIFactory(buildContext).createWindow(); + } + + private class NeedMaintainanceUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public NeedMaintainanceUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + final String[] tooltipText = { GTUtility.trans("056", "Emit if 1 Maintenance Needed"), + GTUtility.trans("058", "Emit if 2 Maintenance Needed"), + GTUtility.trans("060", "Emit if 3 Maintenance Needed"), + GTUtility.trans("062", "Emit if 4 Maintenance Needed"), + GTUtility.trans("064", "Emit if 5 Maintenance Needed"), + GTUtility.trans("066", "Emit if rotor needs maintenance low accuracy mod"), + GTUtility.trans("068", "Emit if rotor needs maintenance high accuracy mod"), }; + + final String[] buttonText = { GTUtility.trans("247", "1 Issue"), GTUtility.trans("248", "2 Issues"), + GTUtility.trans("249", "3 Issues"), GTUtility.trans("250", "4 Issues"), + GTUtility.trans("251", "5 Issues"), GTUtility.trans("252", "Rotor < 20%"), + GTUtility.trans("253", "Rotor ≈ 0%"), GTUtility.trans("INVERTED", "Inverted"), + GTUtility.trans("NORMAL", "Normal"), }; + + builder + .widget( + new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( + this::getCoverData, + this::setCoverData, + CoverNeedMaintainance.this, + (index, coverData) -> isEnabled(index, convert(coverData)), + (index, coverData) -> new ISerializableObject.LegacyCoverData( + getNewCoverVariable(index, convert(coverData)))) + .addToggleButton( + 0, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.addTooltip(tooltipText[0]) + .setPos(spaceX * 0, spaceY * 0)) + .addToggleButton( + 1, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.addTooltip(tooltipText[1]) + .setPos(spaceX * 0, spaceY * 1)) + .addToggleButton( + 2, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.addTooltip(tooltipText[2]) + .setPos(spaceX * 0, spaceY * 2)) + .addToggleButton( + 3, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.addTooltip(tooltipText[3]) + .setPos(spaceX * 0, spaceY * 3)) + .addToggleButton( + 4, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.addTooltip(tooltipText[4]) + .setPos(spaceX * 4 + 4, spaceY * 0)) + .addToggleButton( + 5, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.addTooltip(tooltipText[5]) + .setPos(spaceX * 4 + 4, spaceY * 1)) + .addToggleButton( + 6, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.addTooltip(tooltipText[6]) + .setPos(spaceX * 4 + 4, spaceY * 2)) + .addToggleButton( + 7, + CoverDataFollowerToggleButtonWidget.ofRedstone(), + widget -> widget.setPos(spaceX * 4 + 4, spaceY * 3)) + .setPos(startX, startY)) + .widget( + new TextWidget(buttonText[0]).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 1, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(buttonText[1]).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 1, 4 + startY + spaceY * 1)) + .widget( + new TextWidget(buttonText[2]).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 1, 4 + startY + spaceY * 2)) + .widget( + new TextWidget(buttonText[3]).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 1, 4 + startY + spaceY * 3)) + .widget( + new TextWidget(buttonText[4]).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(buttonText[5]).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 1)) + .widget( + new TextWidget(buttonText[6]).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 2)) + .widget( + TextWidget + .dynamicString(() -> isEnabled(7, convert(getCoverData())) ? buttonText[7] : buttonText[8]) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 3)); + } + + private int getNewCoverVariable(int id, int coverVariable) { + final boolean checked = (coverVariable & 0x1) > 0; + if (id == 7) { + if (checked) return coverVariable & ~0x1; + else return coverVariable | 0x1; + } + return (coverVariable & 0x1) | (id << 1); + } + + private boolean isEnabled(int id, int coverVariable) { + if (id == 7) return (coverVariable & 0x1) > 0; + return (coverVariable >>> 1) == id; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverPlayerDetector.java b/src/main/java/gregtech/common/covers/CoverPlayerDetector.java new file mode 100644 index 0000000000..48fe9260bb --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverPlayerDetector.java @@ -0,0 +1,202 @@ +package gregtech.common.covers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; + +public class CoverPlayerDetector extends CoverBehavior { + + private String placer = ""; + private int range = 8; + + public CoverPlayerDetector(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + boolean playerDetected = false; + + if (aTileEntity instanceof IGregTechTileEntity) { + if (aTileEntity.isUniversalEnergyStored(20)) { + aTileEntity.decreaseStoredEnergyUnits(20, true); + range = 32; + } else { + range = 8; + } + placer = ((IGregTechTileEntity) aTileEntity).getOwnerName(); + } + for (Object tObject : aTileEntity.getWorld().playerEntities) { + if ((tObject instanceof EntityPlayerMP tEntity)) { + int dist = Math.max( + 1, + (int) tEntity.getDistance( + aTileEntity.getXCoord() + 0.5D, + aTileEntity.getYCoord() + 0.5D, + aTileEntity.getZCoord() + 0.5D)); + if (dist < range) { + if (aCoverVariable == 0) { + playerDetected = true; + break; + } + if (tEntity.getDisplayName() + .equalsIgnoreCase(placer)) { + if (aCoverVariable == 1) { + playerDetected = true; + break; + } + } else if (aCoverVariable == 2) { + playerDetected = true; + break; + } + } + } + } + + aTileEntity.setOutputRedstoneSignal(side, (byte) (playerDetected ? 15 : 0)); + return aCoverVariable; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 3; + if (aCoverVariable < 0) { + aCoverVariable = 2; + } + switch (aCoverVariable) { + case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("068.1", "Emit if any Player is close")); + case 1 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("069.1", "Emit if other Player is close")); + case 2 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("070", "Emit if you are close")); + } + return aCoverVariable; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 20; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new PlayerDetectorUIFactory(buildContext).createWindow(); + } + + private class PlayerDetectorUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public PlayerDetectorUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + builder + .widget( + new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( + this::getCoverData, + this::setCoverData, + CoverPlayerDetector.this, + (index, coverData) -> index == convert(coverData), + (index, coverData) -> new ISerializableObject.LegacyCoverData(index)) + .addToggleButton( + 0, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.addTooltip(GTUtility.trans("068.1", "Emit if any Player is close")) + .setPos(spaceX * 0, spaceY * 0)) + .addToggleButton( + 1, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.addTooltip(GTUtility.trans("069.1", "Emit if other Player is close")) + .setPos(spaceX * 0, spaceY * 1)) + .addToggleButton( + 2, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.addTooltip(GTUtility.trans("070", "Emit if you are close")) + .setPos(spaceX * 0, spaceY * 2)) + .setPos(startX, startY)) + .widget( + new TextWidget(GTUtility.trans("319", "Any player")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 1, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(GTUtility.trans("320", "Other players")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 1, 4 + startY + spaceY * 1)) + .widget( + new TextWidget(GTUtility.trans("321", "Only owner")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 1, 4 + startY + spaceY * 2)); + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverPump.java b/src/main/java/gregtech/common/covers/CoverPump.java new file mode 100644 index 0000000000..99d39dccad --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverPump.java @@ -0,0 +1,331 @@ +package gregtech.common.covers; + +import java.util.Arrays; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; + +public class CoverPump extends CoverBehavior { + + public final int mTransferRate; + + public CoverPump(int aTransferRate, ITexture coverTexture) { + super(coverTexture); + this.mTransferRate = aTransferRate; + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if ((aCoverVariable % 6 > 1) && ((aTileEntity instanceof IMachineProgress))) { + if (((IMachineProgress) aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) { + return aCoverVariable; + } + } + + if (aTileEntity instanceof IFluidHandler current) { + final IFluidHandler toAccess = aTileEntity.getITankContainerAtSide(side); + if (toAccess == null) return aCoverVariable; + + transferFluid(current, toAccess, side, aCoverVariable % 2 == 0); + } + return aCoverVariable; + } + + protected void transferFluid(IFluidHandler current, IFluidHandler toAccess, ForgeDirection side, boolean export) { + IFluidHandler source = export ? current : toAccess; + IFluidHandler dest = export ? toAccess : current; + ForgeDirection drainSide = export ? side : side.getOpposite(); + GTUtility.moveFluid(source, dest, drainSide, mTransferRate, this::canTransferFluid); + } + + protected boolean canTransferFluid(FluidStack fluid) { + return true; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 12; + if (aCoverVariable < 0) { + aCoverVariable = 11; + } + switch (aCoverVariable) { + case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("006", "Export")); + case 1 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("007", "Import")); + case 2 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("008", "Export (conditional)")); + case 3 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("009", "Import (conditional)")); + case 4 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("010", "Export (invert cond)")); + case 5 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("011", "Import (invert cond)")); + case 6 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("012", "Export allow Input")); + case 7 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("013", "Import allow Output")); + case 8 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("014", "Export allow Input (conditional)")); + case 9 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("015", "Import allow Output (conditional)")); + case 10 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("016", "Export allow Input (invert cond)")); + case 11 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("017", "Import allow Output (invert cond)")); + } + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + if ((aCoverVariable > 1) && ((aTileEntity instanceof IMachineProgress))) { + if (((IMachineProgress) aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) { + return false; + } + } + return (aCoverVariable >= 6) || (aCoverVariable % 2 != 0); + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + if ((aCoverVariable > 1) && ((aTileEntity instanceof IMachineProgress))) { + if (((IMachineProgress) aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) { + return false; + } + } + return (aCoverVariable >= 6) || (aCoverVariable % 2 == 0); + } + + @Override + public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 1; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new PumpUIFactory(buildContext).createWindow(); + } + + private class PumpUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + private CoverDataFollowerToggleButtonWidget mBlockWidget = null; + private CoverDataFollowerToggleButtonWidget mAllowWidget = null; + + public PumpUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + builder.widget( + new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( + this::getCoverData, + this::setCoverData, + CoverPump.this, + (id, coverData) -> !getClickable(id, convert(coverData)), + (id, coverData) -> new ISerializableObject.LegacyCoverData( + getNewCoverVariable(id, convert(coverData)))) + .addToggleButton( + 0, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_EXPORT) + .addTooltip(GTUtility.trans("006", "Export")) + .setPos(spaceX * 0, spaceY * 0)) + .addToggleButton( + 1, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_IMPORT) + .addTooltip(GTUtility.trans("007", "Import")) + .setPos(spaceX * 1, spaceY * 0)) + .addToggleButton( + 2, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_CHECKMARK) + .addTooltip(GTUtility.trans("224", "Always On")) + .setPos(spaceX * 0, spaceY * 1)) + .addToggleButton( + 3, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_USE_PROCESSING_STATE) + .addTooltip(GTUtility.trans("343", "Use Machine Processing State")) + .setPos(spaceX * 1, spaceY * 1)) + .addToggleButton( + 4, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_USE_INVERTED_PROCESSING_STATE) + .addTooltip(GTUtility.trans("343.1", "Use Inverted Machine Processing State")) + .setPos(spaceX * 2, spaceY * 1)) + .addToggleButton(5, CoverDataFollowerToggleButtonWidget.ofDisableable(), widget -> { + mAllowWidget = widget; + widget.setTextureGetter(i -> { + ISerializableObject.LegacyCoverData coverData = getCoverData(); + return coverData == null || coverData.get() % 2 == 0 + ? GTUITextures.OVERLAY_BUTTON_ALLOW_INPUT + : GTUITextures.OVERLAY_BUTTON_ALLOW_OUTPUT; + }) + .dynamicTooltip(() -> { + ISerializableObject.LegacyCoverData coverData = getCoverData(); + return Arrays.asList( + coverData == null || coverData.get() % 2 == 0 + ? GTUtility.trans("314", "Allow Input") + : GTUtility.trans("312", "Allow Output")); + }) + .setPos(spaceX * 0, spaceY * 2); + }) + .addToggleButton(6, CoverDataFollowerToggleButtonWidget.ofDisableable(), widget -> { + mBlockWidget = widget; + widget.setTextureGetter(i -> { + ISerializableObject.LegacyCoverData coverData = getCoverData(); + return coverData == null || coverData.get() % 2 == 0 + ? GTUITextures.OVERLAY_BUTTON_BLOCK_INPUT + : GTUITextures.OVERLAY_BUTTON_BLOCK_OUTPUT; + }) + .dynamicTooltip(() -> { + ISerializableObject.LegacyCoverData coverData = getCoverData(); + return Arrays.asList( + coverData == null || coverData.get() % 2 == 0 + ? GTUtility.trans("313", "Block Input") + : GTUtility.trans("311", "Block Output")); + }) + .setPos(spaceX * 1, spaceY * 2); + }) + .setPos(startX, startY)) + .widget( + new TextWidget(GTUtility.trans("229", "Export/Import")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(GTUtility.trans("230", "Conditional")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 1)) + .widget(TextWidget.dynamicString(() -> { + ISerializableObject.LegacyCoverData coverData = getCoverData(); + return coverData == null || coverData.get() % 2 == 0 ? GTUtility.trans("344", "Input Blocking") + : GTUtility.trans("344.1", "Output Blocking"); + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 2)); + } + + private int getNewCoverVariable(int id, int coverVariable) { + switch (id) { + case 0 -> { + if (mBlockWidget != null) { + mBlockWidget.notifyTooltipChange(); + } + if (mAllowWidget != null) { + mAllowWidget.notifyTooltipChange(); + } + return coverVariable & ~0x1; + } + case 1 -> { + if (mBlockWidget != null) { + mBlockWidget.notifyTooltipChange(); + } + if (mAllowWidget != null) { + mAllowWidget.notifyTooltipChange(); + } + return coverVariable | 0x1; + } + case 2 -> { + if (coverVariable > 5) return 0x6 | (coverVariable & ~0xE); + return (coverVariable & ~0xE); + } + case 3 -> { + if (coverVariable > 5) return 0x8 | (coverVariable & ~0xE); + return 0x2 | (coverVariable & ~0xE); + } + case 4 -> { + if (coverVariable > 5) return 0xA | (coverVariable & ~0xE); + return (0x4 | (coverVariable & ~0xE)); + } + case 5 -> { + if (coverVariable <= 5) return coverVariable + 6; + } + case 6 -> { + if (coverVariable > 5) return coverVariable - 6; + } + } + return coverVariable; + } + + private boolean getClickable(int id, int coverVariable) { + if (coverVariable < 0 | 11 < coverVariable) return false; + return switch (id) { + case 0, 1 -> (0x1 & coverVariable) != id; + case 2 -> (coverVariable % 6) >= 2; + case 3 -> (coverVariable % 6) < 2 | 4 <= (coverVariable % 6); + case 4 -> (coverVariable % 6) < 4; + case 5 -> coverVariable < 6; + case 6 -> coverVariable >= 6; + default -> false; + }; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverRedstoneConductor.java b/src/main/java/gregtech/common/covers/CoverRedstoneConductor.java new file mode 100644 index 0000000000..a85a20b703 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverRedstoneConductor.java @@ -0,0 +1,101 @@ +package gregtech.common.covers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; + +@SuppressWarnings("unused") // Legacy from GT4. TODO: Consider re-enable registration +public class CoverRedstoneConductor extends CoverBehavior { + + CoverRedstoneConductor(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if (aCoverVariable == 0) { + aTileEntity.setOutputRedstoneSignal(side, aTileEntity.getStrongestRedstone()); + } else if (aCoverVariable < 7) { + aTileEntity.setOutputRedstoneSignal( + side, + aTileEntity.getInternalInputRedstoneSignal(ForgeDirection.getOrientation((aCoverVariable - 1)))); + } + return aCoverVariable; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 7; + if (aCoverVariable < 0) { + aCoverVariable = 6; + } + switch (aCoverVariable) { + case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("071", "Conducts strongest Input")); + case 1 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("072", "Conducts from bottom Input")); + case 2 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("073", "Conducts from top Input")); + case 3 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("074", "Conducts from north Input")); + case 4 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("075", "Conducts from south Input")); + case 5 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("076", "Conducts from west Input")); + case 6 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("077", "Conducts from east Input")); + } + return aCoverVariable; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 1; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverRedstoneReceiverExternal.java b/src/main/java/gregtech/common/covers/CoverRedstoneReceiverExternal.java new file mode 100644 index 0000000000..aeaacb3404 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverRedstoneReceiverExternal.java @@ -0,0 +1,41 @@ +package gregtech.common.covers; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; + +public class CoverRedstoneReceiverExternal extends CoverRedstoneWirelessBase { + + public CoverRedstoneReceiverExternal(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + aTileEntity.setOutputRedstoneSignal( + side, + GregTechAPI.sWirelessRedstone.get(aCoverVariable) == null ? 0 + : GregTechAPI.sWirelessRedstone.get(aCoverVariable)); + return aCoverVariable; + } + + @Override + public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 1; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverRedstoneReceiverInternal.java b/src/main/java/gregtech/common/covers/CoverRedstoneReceiverInternal.java new file mode 100644 index 0000000000..0fc5802ba4 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverRedstoneReceiverInternal.java @@ -0,0 +1,46 @@ +package gregtech.common.covers; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.util.ISerializableObject; + +public class CoverRedstoneReceiverInternal extends CoverRedstoneWirelessBase { + + public CoverRedstoneReceiverInternal(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if (aTileEntity instanceof IMachineProgress) { + if (getRedstoneInput(side, aInputRedstone, aCoverID, aCoverVariable, aTileEntity) > 0) + ((IMachineProgress) aTileEntity).enableWorking(); + else((IMachineProgress) aTileEntity).disableWorking(); + ((IMachineProgress) aTileEntity).setWorkDataValue(aInputRedstone); + } + return aCoverVariable; + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { + return true; + } + + @Override + public byte getRedstoneInput(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return GregTechAPI.sWirelessRedstone.get(aCoverVariable) == null ? 0 + : GregTechAPI.sWirelessRedstone.get(aCoverVariable); + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 1; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverRedstoneSignalizer.java b/src/main/java/gregtech/common/covers/CoverRedstoneSignalizer.java new file mode 100644 index 0000000000..0f3937044a --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverRedstoneSignalizer.java @@ -0,0 +1,98 @@ +package gregtech.common.covers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; + +@SuppressWarnings("unused") // TODO: Consider re-registering this +public class CoverRedstoneSignalizer extends CoverBehavior { + + CoverRedstoneSignalizer(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = (aCoverVariable + 1) % 48; + switch (aCoverVariable / 16) { + case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("078", "Signal = ") + (aCoverVariable & 0xF)); + case 1 -> GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("079", "Conditional Signal = ") + (aCoverVariable & 0xF)); + case 2 -> GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("080", "Inverted Conditional Signal = ") + (aCoverVariable & 0xF)); + } + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public byte getRedstoneInput(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + if (aCoverVariable < 16) { + return (byte) (aCoverVariable & 0xF); + } + if ((aTileEntity instanceof IMachineProgress)) { + if (((IMachineProgress) aTileEntity).isAllowedToWork()) { + if (aCoverVariable / 16 == 1) { + return (byte) (aCoverVariable & 0xF); + } + } else if (aCoverVariable / 16 == 2) { + return (byte) (aCoverVariable & 0xF); + } + return 0; + } + return (byte) (aCoverVariable & 0xF); + } +} diff --git a/src/main/java/gregtech/common/covers/CoverRedstoneTransmitterExternal.java b/src/main/java/gregtech/common/covers/CoverRedstoneTransmitterExternal.java new file mode 100644 index 0000000000..130ba4c5d7 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverRedstoneTransmitterExternal.java @@ -0,0 +1,53 @@ +package gregtech.common.covers; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.covers.IControlsWorkCover; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.ISerializableObject; + +public class CoverRedstoneTransmitterExternal extends CoverRedstoneWirelessBase { + + public CoverRedstoneTransmitterExternal(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + // TODO remove next line after 2.3.0 + if (!IControlsWorkCover.makeSureOnlyOne(side, aTileEntity)) return aCoverVariable; + GregTechAPI.sWirelessRedstone.put(aCoverVariable, aInputRedstone); + return aCoverVariable; + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { + return true; + } + + @Override + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 1; + } + + @Override + public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { + if (!super.isCoverPlaceable(side, aStack, aTileEntity)) return false; + for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { + if (aTileEntity.getCoverBehaviorAtSideNew(tSide) instanceof IControlsWorkCover) { + return false; + } + } + return true; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverRedstoneTransmitterInternal.java b/src/main/java/gregtech/common/covers/CoverRedstoneTransmitterInternal.java new file mode 100644 index 0000000000..10a63a6642 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverRedstoneTransmitterInternal.java @@ -0,0 +1,43 @@ +package gregtech.common.covers; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; + +public class CoverRedstoneTransmitterInternal extends CoverRedstoneWirelessBase { + + public CoverRedstoneTransmitterInternal(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + GregTechAPI.sWirelessRedstone.put(aCoverVariable, aTileEntity.getOutputRedstoneSignal(side)); + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 1; + } + + @Override + public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return true; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverRedstoneWirelessBase.java b/src/main/java/gregtech/common/covers/CoverRedstoneWirelessBase.java new file mode 100644 index 0000000000..0ec962fc02 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverRedstoneWirelessBase.java @@ -0,0 +1,222 @@ +package gregtech.common.covers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; + +public abstract class CoverRedstoneWirelessBase extends CoverBehavior { + + private static final int MAX_CHANNEL = 65535; + private static final int PRIVATE_MASK = 0xFFFE0000; + private static final int PUBLIC_MASK = 0x0000FFFF; + private static final int CHECKBOX_MASK = 0x00010000; + + public CoverRedstoneWirelessBase(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + boolean aForced) { + GregTechAPI.sWirelessRedstone.put(aCoverVariable, (byte) 0); + return true; + } + + @Override + protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, + float aY, float aZ) { + if (((aX > 0.375D) && (aX < 0.625D)) || ((side.offsetX != 0) && ((aY > 0.375D) && (aY < 0.625D)))) { + GregTechAPI.sWirelessRedstone.put(aCoverVariable.get(), (byte) 0); + aCoverVariable.set( + (aCoverVariable.get() & (PRIVATE_MASK | CHECKBOX_MASK)) + | (((Integer) GTUtility.stackToInt(aPlayer.inventory.getCurrentItem())).hashCode() & PUBLIC_MASK)); + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("081", "Frequency: ") + aCoverVariable); + return true; + } + return false; + } + + @Override + @SuppressWarnings("deprecation") + public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (((aX > 0.375D) && (aX < 0.625D)) || ((side.offsetX != 0) && ((aY > 0.375D) && (aY < 0.625D)))) { + GregTechAPI.sWirelessRedstone.put(aCoverVariable, (byte) 0); + + int val = GTUtility.stackToInt(aPlayer.inventory.getCurrentItem()) * (1 + aPlayer.inventory.getCurrentItem() + .getItemDamage()); + + aCoverVariable = (aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | (val & PUBLIC_MASK); + + aTileEntity.setCoverDataAtSide(side, aCoverVariable); + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("081", "Frequency: ") + (aCoverVariable & PUBLIC_MASK)); + return true; + } + return false; + } + + @Override + protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return false; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (((aX > 0.375D) && (aX < 0.625D)) + || ((side.offsetX == 0) || (((aY > 0.375D) && (aY < 0.625D)) || ((((aZ <= 0.375D) || (aZ >= 0.625D))))))) { + GregTechAPI.sWirelessRedstone.put(aCoverVariable, (byte) 0); + final float[] tCoords = GTUtility.getClickedFacingCoords(side, aX, aY, aZ); + + final short tAdjustVal = switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + + 2 * (byte) (int) (tCoords[1] * 2.0F))) { + case 0 -> -32; + case 1 -> 32; + case 2 -> -1024; + case 3 -> 1024; + default -> 0; + }; + + final int tPublicChannel = (aCoverVariable & PUBLIC_MASK) + tAdjustVal; + + if (tPublicChannel < 0) { + aCoverVariable = aCoverVariable & ~PUBLIC_MASK; + } else if (tPublicChannel > MAX_CHANNEL) { + aCoverVariable = (aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | MAX_CHANNEL; + } else { + aCoverVariable = (aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | tPublicChannel; + } + } + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("081", "Frequency: ") + (aCoverVariable & PUBLIC_MASK)); + return aCoverVariable; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public String getDescription(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return GTUtility.trans("081", "Frequency: ") + aCoverVariable; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 1; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new RedstoneWirelessBaseUIFactory(buildContext).createWindow(); + } + + private class RedstoneWirelessBaseUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public RedstoneWirelessBaseUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected int getGUIWidth() { + return 250; + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + builder.widget( + new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, CoverRedstoneWirelessBase.this) + + .addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) getFlagFrequency(convert(coverData)), + (coverData, state) -> new ISerializableObject.LegacyCoverData( + state.intValue() | getFlagCheckbox(convert(coverData))), + widget -> widget.setBounds(0, MAX_CHANNEL) + .setScrollValues(1, 1000, 10) + .setFocusOnGuiOpen(true) + .setPos(spaceX * 0, spaceY * 0 + 2) + .setSize(spaceX * 4 - 3, 12)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofCheck(), + coverData -> getFlagCheckbox(convert(coverData)) > 0, + (coverData, state) -> new ISerializableObject.LegacyCoverData( + getFlagFrequency(convert(coverData)) | (state ? CHECKBOX_MASK : 0)), + widget -> widget.setPos(spaceX * 0, spaceY * 2)) + .setPos(startX, startY)) + .widget( + new TextWidget(GTUtility.trans("246", "Frequency")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 4, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(GTUtility.trans("602", "Use Private Frequency")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 1, startY + spaceY * 2 + 4)); + } + + private int getFlagFrequency(int coverVariable) { + return coverVariable & PUBLIC_MASK; + } + + private int getFlagCheckbox(int coverVariable) { + return coverVariable & CHECKBOX_MASK; + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverScreen.java b/src/main/java/gregtech/common/covers/CoverScreen.java new file mode 100644 index 0000000000..09f45730d8 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverScreen.java @@ -0,0 +1,100 @@ +package gregtech.common.covers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehavior; + +public class CoverScreen extends CoverBehavior { + + public CoverScreen(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public float getBlastProofLevel(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 20.0F; + } + + @Override + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return false; + } + + @Override + public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return false; + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return false; + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return false; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return false; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return false; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return false; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return false; + } + + @Override + public boolean isGUIClickable(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + return false; + } + + @Override + public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + return false; + } + + @Override + public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + boolean aForced) { + return true; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return 0; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverShutter.java b/src/main/java/gregtech/common/covers/CoverShutter.java new file mode 100644 index 0000000000..480062d430 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverShutter.java @@ -0,0 +1,195 @@ +package gregtech.common.covers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; + +public class CoverShutter extends CoverBehavior { + + public CoverShutter(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return aCoverVariable; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 4; + if (aCoverVariable < 0) { + aCoverVariable = 3; + } + switch (aCoverVariable) { + case 0 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("082", "Open if work enabled")); + case 1 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("083", "Open if work disabled")); + case 2 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("084", "Only Output allowed")); + case 3 -> GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("085", "Only Input allowed")); + } + if (aTileEntity instanceof BaseMetaPipeEntity) { + ((BaseMetaPipeEntity) aTileEntity).reloadLocks(); + } + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return aCoverVariable >= 2 ? aCoverVariable == 3 + : !(aTileEntity instanceof IMachineProgress) + || (((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0)); + } + + @Override + public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return aCoverVariable >= 2 ? aCoverVariable == 2 + : !(aTileEntity instanceof IMachineProgress) + || (((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0)); + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return aCoverVariable >= 2 ? aCoverVariable == 3 + : !(aTileEntity instanceof IMachineProgress) + || (((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0)); + } + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return aCoverVariable >= 2 ? aCoverVariable == 2 + : !(aTileEntity instanceof IMachineProgress) + || ((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0); + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return aCoverVariable >= 2 ? aCoverVariable == 3 + : !(aTileEntity instanceof IMachineProgress) + || ((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0); + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return aCoverVariable >= 2 ? aCoverVariable == 2 + : !(aTileEntity instanceof IMachineProgress) + || ((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0); + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return aCoverVariable >= 2 ? aCoverVariable == 3 + : !(aTileEntity instanceof IMachineProgress) + || ((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0); + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return aCoverVariable >= 2 ? aCoverVariable == 2 + : !(aTileEntity instanceof IMachineProgress) + || ((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0); + } + + @Override + public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 0; + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new ShutterUIFactory(buildContext).createWindow(); + } + + private class ShutterUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public ShutterUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + builder + .widget( + new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( + this::getCoverData, + this::setCoverData, + CoverShutter.this, + (index, coverData) -> index == convert(coverData), + (index, coverData) -> new ISerializableObject.LegacyCoverData(index)) + .addToggleButton( + 0, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.setPos(spaceX * 0, spaceY * 0)) + .addToggleButton( + 1, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.setPos(spaceX * 0, spaceY * 1)) + .addToggleButton( + 2, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.setPos(spaceX * 0, spaceY * 2)) + .addToggleButton( + 3, + CoverDataFollowerToggleButtonWidget.ofCheck(), + widget -> widget.setPos(spaceX * 0, spaceY * 3)) + .setPos(startX, startY)) + .widget( + new TextWidget(GTUtility.trans("082", "Open if work enabled")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 0)) + .widget( + new TextWidget(GTUtility.trans("083", "Open if work disabled")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 1)) + .widget( + new TextWidget(GTUtility.trans("084", "Only Output allowed")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 2)) + .widget( + new TextWidget(GTUtility.trans("085", "Only Input allowed")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 3)); + } + } +} diff --git a/src/main/java/gregtech/common/covers/CoverSolarPanel.java b/src/main/java/gregtech/common/covers/CoverSolarPanel.java new file mode 100644 index 0000000000..f0b544633d --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverSolarPanel.java @@ -0,0 +1,139 @@ +package gregtech.common.covers; + +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; + +public class CoverSolarPanel extends CoverBehavior { + + private final int mVoltage; + + public CoverSolarPanel(int aVoltage) { + this.mVoltage = aVoltage; + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if (side != ForgeDirection.UP) return 0; + int coverState = aCoverVariable & 0x3; + int coverNum = aCoverVariable >> 2; + if (aTimer % 100L == 0L) { + if (aTileEntity.getWorld() + .isThundering()) { + return aTileEntity.getBiome().rainfall > 0.0F && aTileEntity.getSkyAtSide(side) + ? Math.min(20, coverNum) << 2 + : coverNum << 2; + } else { + if (aTileEntity.getWorld() + .isRaining() && aTileEntity.getBiome().rainfall > 0.0F) { // really rains + if (aTileEntity.getSkyAtSide(side)) coverNum = Math.min(30, coverNum); + if (aTileEntity.getWorld().skylightSubtracted >= 4) { + if (aTileEntity.getWorld() + .isDaytime()) { + coverState = 2; + } else { + return coverNum << 2; + } + } + } else { // not rains + if (aTileEntity.getWorld() + .isDaytime()) { + coverState = 1; + } else { + coverState = 2; + } + } + } + } + if (coverState == 1) { + aTileEntity.injectEnergyUnits( + ForgeDirection.UNKNOWN, + ((100L - (long) coverNum) * ((long) this.mVoltage)) / 100L, + 1L); + } + if (aTimer % 28800L == 0L && coverNum < 100 && (coverNum > 10 || XSTR_INSTANCE.nextInt(3) == 2)) coverNum++; + return coverState + (coverNum << 2); + } + + @Override + protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, + float aY, float aZ) { + if (aPlayer.capabilities.isCreativeMode) { + GTUtility.sendChatToPlayer(aPlayer, "Cleaned solar panel from " + (aCoverVariable.get() >> 2) + "% dirt"); + aCoverVariable.set(aCoverVariable.get() & 0x3); + return true; + } + for (int i = 0; i < aPlayer.inventory.mainInventory.length; i++) { + ItemStack is = aPlayer.inventory.mainInventory[i]; + if (is == null) continue; + if (is.getUnlocalizedName() + .equals(new ItemStack(Items.water_bucket).getUnlocalizedName())) { + aPlayer.inventory.mainInventory[i] = new ItemStack(Items.bucket); + if (aPlayer.inventoryContainer != null) aPlayer.inventoryContainer.detectAndSendChanges(); + GTUtility + .sendChatToPlayer(aPlayer, "Cleaned solar panel from " + (aCoverVariable.get() >> 2) + "% dirt"); + aCoverVariable.set(aCoverVariable.get() & 0x3); + return true; + } + } + GTUtility.sendChatToPlayer(aPlayer, "You need water bucket in inventory to clean the panel."); + return false; + } + + @Override + @SuppressWarnings("deprecation") + public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aPlayer.capabilities.isCreativeMode) { + GTUtility.sendChatToPlayer(aPlayer, "Cleaned solar panel from " + (aCoverVariable >> 2) + "% dirt"); + aTileEntity.setCoverDataAtSide(side, (aCoverVariable & 0x3)); + return true; + } + for (int i = 0; i < aPlayer.inventory.mainInventory.length; i++) { + ItemStack is = aPlayer.inventory.mainInventory[i]; + if (is == null) continue; + if (is.getUnlocalizedName() + .equals(new ItemStack(Items.water_bucket).getUnlocalizedName())) { + aPlayer.inventory.mainInventory[i] = new ItemStack(Items.bucket); + if (aPlayer.inventoryContainer != null) aPlayer.inventoryContainer.detectAndSendChanges(); + GTUtility.sendChatToPlayer(aPlayer, "Cleaned solar panel from " + (aCoverVariable >> 2) + "% dirt"); + aTileEntity.setCoverDataAtSide(side, (aCoverVariable & 0x3)); + return true; + } + } + GTUtility.sendChatToPlayer(aPlayer, "You need water bucket in inventory to clean the panel."); + return false; + } + + @Override + protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, + ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { + return false; + } + + @Override + public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 1; + } +} diff --git a/src/main/java/gregtech/common/covers/CoverSteamRegulator.java b/src/main/java/gregtech/common/covers/CoverSteamRegulator.java new file mode 100644 index 0000000000..413e835ad2 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverSteamRegulator.java @@ -0,0 +1,18 @@ +package gregtech.common.covers; + +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.util.GTModHandler; + +public class CoverSteamRegulator extends CoverFluidRegulator { + + public CoverSteamRegulator(int aTransferRate, ITexture coverTexture) { + super(aTransferRate, coverTexture); + } + + @Override + protected boolean canTransferFluid(FluidStack fluid) { + return GTModHandler.isAnySteam(fluid) || GTModHandler.isSuperHeatedSteam(fluid); + } +} diff --git a/src/main/java/gregtech/common/covers/CoverSteamValve.java b/src/main/java/gregtech/common/covers/CoverSteamValve.java new file mode 100644 index 0000000000..329cf634a7 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverSteamValve.java @@ -0,0 +1,26 @@ +package gregtech.common.covers; + +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.GTModHandler; + +public class CoverSteamValve extends CoverPump { + + public CoverSteamValve(int aTransferRate, ITexture coverTexture) { + super(aTransferRate, coverTexture); + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + protected boolean canTransferFluid(FluidStack fluid) { + return GTModHandler.isAnySteam(fluid) || GTModHandler.isSuperHeatedSteam(fluid); + } +} diff --git a/src/main/java/gregtech/common/covers/CoverVent.java b/src/main/java/gregtech/common/covers/CoverVent.java new file mode 100644 index 0000000000..02907da4c2 --- /dev/null +++ b/src/main/java/gregtech/common/covers/CoverVent.java @@ -0,0 +1,111 @@ +package gregtech.common.covers; + +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; + +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; + +public class CoverVent extends CoverBehavior { + + private final int mEfficiency; + private final Fluid IC2_HOT_COOLANT = FluidRegistry.getFluid("ic2hotcoolant"); + private final Fluid IC2_COOLANT = FluidRegistry.getFluid("ic2coolant"); + + public CoverVent(int aEfficiency) { + this.mEfficiency = aEfficiency; + } + + @Override + public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + long aTimer) { + return false; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if (side == ForgeDirection.UNKNOWN) return 0; + int ret = 0; + if (aTileEntity instanceof IFluidHandler) { + ret = doCoolFluid(side, aTileEntity); + } + if ((aTileEntity instanceof IMachineProgress)) { + ret = doProgressEfficiency(side, (IMachineProgress) aTileEntity, aCoverID); + } + return ret; + } + + @Override + public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 100; + } + + protected int doProgressEfficiency(final ForgeDirection side, final IMachineProgress aTileEntity, + final int aCoverVariable) { + final int offsetX = aTileEntity.getOffsetX(side, 1); + final int offsetY = aTileEntity.getOffsetY(side, 1); + final int offsetZ = aTileEntity.getOffsetZ(side, 1); + final World world = aTileEntity.getWorld(); + if (aTileEntity.hasThingsToDo() && aCoverVariable != aTileEntity.getProgress() + && !GTUtility.hasBlockHitBox(world, offsetX, offsetY, offsetZ)) { + aTileEntity.increaseProgress(this.mEfficiency); + } + return aTileEntity.getProgress(); + } + + protected int doCoolFluid(final ForgeDirection side, final ICoverable aTileEntity) { + final int offsetX = aTileEntity.getOffsetX(side, 1); + final int offsetY = aTileEntity.getOffsetY(side, 1); + final int offsetZ = aTileEntity.getOffsetZ(side, 1); + final World world = aTileEntity.getWorld(); + final IFluidHandler fluidHandler = (IFluidHandler) aTileEntity; + if (!fluidHandler.canDrain(ForgeDirection.UNKNOWN, IC2_HOT_COOLANT)) { + return 0; + } + final int chances; // 10000 = 100% + final Block blockAtSide = aTileEntity.getBlockAtSide(side); + if (blockAtSide == null) { + return 0; + } + if (blockAtSide == Blocks.water || blockAtSide == Blocks.flowing_water) { + chances = switch (mEfficiency) { + case 3 -> 10000; // 100% chances for Diamond reactor vent with water + case 2 -> 5000; // 50% chances for Gold and Overclocked reactor vents with water + default -> 2500; // 25% chances for Basic reactor vent with water + }; + } else if (blockAtSide.isAir(world, offsetX, offsetY, offsetZ)) { + switch (mEfficiency) { + case 3 -> chances = 2500; // 25% chances for Diamond reactor vent with air + case 2 -> chances = 1250; // 12.5% chances for Gold and Overclocked reactor vents with air + default -> { + return 0; // Basic reactor vent cannot be used with air + } + } + } else { + return 0; // Vent cover need water or air + } + if (chances > XSTR_INSTANCE.nextInt(10000)) { + final FluidStack hotFluidStack = fluidHandler.drain(ForgeDirection.UNKNOWN, Integer.MAX_VALUE, true); + final FluidStack coldFluidStack = new FluidStack(IC2_COOLANT, hotFluidStack.amount); + fluidHandler.fill(ForgeDirection.UNKNOWN, coldFluidStack, true); + return hotFluidStack.amount; + } + return 0; + } +} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Arm.java b/src/main/java/gregtech/common/covers/GT_Cover_Arm.java deleted file mode 100644 index 51f330e8df..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Arm.java +++ /dev/null @@ -1,431 +0,0 @@ -package gregtech.common.covers; - -import java.text.FieldPosition; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; - -public class GT_Cover_Arm extends GT_CoverBehavior { - - public final int mTickRate; - // msb converted, 2nd : direction (1=export) - // right 14 bits: internalSlot, next 14 bits adjSlot, 0 = all, slot = -1 - protected static final int EXPORT_MASK = 0x40000000; - protected static final int SLOT_ID_MASK = 0x3FFF; - protected static final int SLOT_ID_MIN = 0; - protected static final int CONVERTED_BIT = 0x80000000; - - public GT_Cover_Arm(int aTickRate, ITexture coverTexture) { - super(coverTexture); - this.mTickRate = aTickRate; - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if ((((aTileEntity instanceof IMachineProgress)) && (!((IMachineProgress) aTileEntity).isAllowedToWork()))) { - return aCoverVariable; - } - - // Convert from ver. 5.09.33.50, check if 3 last bits are equal - if ((aCoverVariable >>> 29) == 0) { - aCoverVariable = CONVERTED_BIT | (((aCoverVariable + 1) & SLOT_ID_MASK) << 14) | EXPORT_MASK; - } else if ((aCoverVariable >>> 29) == 7) { - aCoverVariable = CONVERTED_BIT | Math.min(Math.abs(aCoverVariable - 1), SLOT_ID_MASK); - } - - final TileEntity toTile; - final TileEntity fromTile; - final int toSlot; - final int fromSlot; - - if ((aCoverVariable & EXPORT_MASK) > 0) { - fromTile = (TileEntity) aTileEntity; - toTile = aTileEntity.getTileEntityAtSide(side); - fromSlot = aCoverVariable & SLOT_ID_MASK; - toSlot = (aCoverVariable >> 14) & SLOT_ID_MASK; - } else { - fromTile = aTileEntity.getTileEntityAtSide(side); - toTile = (TileEntity) aTileEntity; - fromSlot = (aCoverVariable >> 14) & SLOT_ID_MASK; - toSlot = aCoverVariable & SLOT_ID_MASK; - } - - if (fromSlot > 0 && toSlot > 0) { - if (fromTile instanceof IInventory fromInventory && toTile instanceof IInventory toInventory) - GT_Utility.moveFromSlotToSlot( - fromInventory, - toInventory, - fromSlot - 1, - toSlot - 1, - null, - false, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1); - } else if (toSlot > 0) { - final ForgeDirection toSide; - if ((aCoverVariable & EXPORT_MASK) > 0) toSide = side; - else toSide = side.getOpposite(); - GT_Utility.moveOneItemStackIntoSlot( - fromTile, - toTile, - toSide, - toSlot - 1, - null, - false, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1); - } else if (fromSlot > 0) { - final ForgeDirection toSide; - if ((aCoverVariable & EXPORT_MASK) > 0) toSide = side; - else toSide = side.getOpposite(); - if (fromTile instanceof IInventory) GT_Utility.moveFromSlotToSide( - (IInventory) fromTile, - toTile, - fromSlot - 1, - toSide, - null, - false, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1); - } else { - final ForgeDirection fromSide; - final ForgeDirection toSide; - if ((aCoverVariable & EXPORT_MASK) > 0) { - fromSide = side; - toSide = side.getOpposite(); - } else { - fromSide = side.getOpposite(); - toSide = side; - } - GT_Utility.moveOneItemStack( - fromTile, - toTile, - fromSide, - toSide, - null, - false, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1); - } - - return aCoverVariable; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - int step = 0; - if (GT_Utility.getClickedFacingCoords(side, aX, aY, aZ)[0] >= 0.5F) { - step += aPlayer.isSneaking() ? 256 : 16; - } else { - step -= aPlayer.isSneaking() ? 256 : 16; - } - aCoverVariable = getNewVar(aCoverVariable, step); - sendMessageToPlayer(aPlayer, aCoverVariable); - return aCoverVariable; - } - - @Override - protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, - float aY, float aZ) { - int step = (GT_Utility.getClickedFacingCoords(side, aX, aY, aZ)[0] >= 0.5F) ? 1 : -1; - int tCoverVariable = getNewVar(aCoverVariable.get(), step); - sendMessageToPlayer(aPlayer, tCoverVariable); - aCoverVariable.set(tCoverVariable); - return true; - } - - @Override - @SuppressWarnings("deprecation") - public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - final int step = (GT_Utility.getClickedFacingCoords(side, aX, aY, aZ)[0] >= 0.5F) ? 1 : -1; - aCoverVariable = getNewVar(aCoverVariable, step); - sendMessageToPlayer(aPlayer, aCoverVariable); - aTileEntity.setCoverDataAtSide(side, aCoverVariable); - return true; - } - - @Override - protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return false; - } - - private void sendMessageToPlayer(EntityPlayer aPlayer, int var) { - if ((var & EXPORT_MASK) != 0) GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("001", "Puts out into adjacent Slot #") + (((var >> 14) & SLOT_ID_MASK) - 1)); - else GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("002", "Grabs in for own Slot #") + ((var & SLOT_ID_MASK) - 1)); - } - - private int getNewVar(int var, int step) { - int intSlot = (var & SLOT_ID_MASK); - int adjSlot = (var >> 14) & SLOT_ID_MASK; - if ((var & EXPORT_MASK) == 0) { - int x = (intSlot + step); - if (x > SLOT_ID_MASK) return createVar(0, SLOT_ID_MASK, 0); - else if (x < 1) return createVar(-step - intSlot + 1, 0, EXPORT_MASK); - else return createVar(0, x, 0); - } else { - int x = (adjSlot - step); - if (x > SLOT_ID_MASK) return createVar(SLOT_ID_MASK, 0, EXPORT_MASK); - else if (x < 1) return createVar(0, step - adjSlot + 1, 0); - else return createVar(x, 0, EXPORT_MASK); - } - } - - private int createVar(int adjSlot, int intSlot, int export) { - return CONVERTED_BIT | export | ((adjSlot & SLOT_ID_MASK) << 14) | (intSlot & SLOT_ID_MASK); - } - - @Override - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return this.mTickRate; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new ArmUIFactory(buildContext).createWindow(); - } - - private class ArmUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - private int maxSlot; - - /** - * Display the text "Any" instead of a number when the slot is set to -1. - */ - protected static final NumberFormatMUI numberFormatAny = new NumberFormatMUI() { - - @Override - public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { - if (number < 0) { - return toAppendTo.append(GT_Utility.trans("ANY", "Any")); - } else { - return super.format(number, toAppendTo, pos); - } - } - }; - - protected ArmUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - maxSlot = getMaxSlot(); - builder.widget( - new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_Arm.this).addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> getFlagExport(convert(coverData)) > 0, - (coverData, state) -> { - if (state) { - return new ISerializableObject.LegacyCoverData( - convert(coverData) | EXPORT_MASK | CONVERTED_BIT); - } else { - return new ISerializableObject.LegacyCoverData( - convert(coverData) & ~EXPORT_MASK | CONVERTED_BIT); - } - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT) - .addTooltip(GT_Utility.trans("006", "Export")) - .setPos(spaceX * 0, spaceY * 0)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> getFlagExport(convert(coverData)) == 0, - (coverData, state) -> { - if (state) { - return new ISerializableObject.LegacyCoverData( - convert(coverData) & ~EXPORT_MASK | CONVERTED_BIT); - } else { - return new ISerializableObject.LegacyCoverData( - convert(coverData) | EXPORT_MASK | CONVERTED_BIT); - } - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT) - .addTooltip(GT_Utility.trans("007", "Import")) - .setPos(spaceX * 1, spaceY * 0)) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) (getFlagInternalSlot(convert(coverData)) - 1), - (coverData, state) -> { - final int coverVariable = convert(coverData); - return new ISerializableObject.LegacyCoverData( - getFlagExport(coverVariable) | ((state.intValue() + 1) & SLOT_ID_MASK) - | (getFlagAdjacentSlot(coverVariable) << 14) - | CONVERTED_BIT); - }, - widget -> widget.setBounds(-1, maxSlot) - .setDefaultValue(-1) - .setScrollValues(1, 100, 10) - .setNumberFormat(numberFormatAny) - .setPos(spaceX * 0, spaceY * 1 + 2) - .setSize(spaceX * 2 + 5, 12)) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) (getFlagAdjacentSlot(convert(coverData)) - 1), - (coverData, state) -> { - final int coverVariable = convert(coverData); - return new ISerializableObject.LegacyCoverData( - getFlagExport(coverVariable) | getFlagInternalSlot(coverVariable) - | (((state.intValue() + 1) & SLOT_ID_MASK) << 14) - | CONVERTED_BIT); - }, - widget -> widget.setValidator(val -> { - // We need to check the adjacent inventory here, and can't simply set a maximum value, - // because it can change while this cover is alive. - final int adjacentMaxSlot; - final ICoverable tile = getUIBuildContext().getTile(); - if (tile instanceof TileEntity && !tile.isDead()) { - TileEntity adj = tile.getTileEntityAtSide(getUIBuildContext().getCoverSide()); - if (adj instanceof IInventory) - adjacentMaxSlot = ((IInventory) adj).getSizeInventory() - 1; - else adjacentMaxSlot = -1; - } else { - adjacentMaxSlot = -1; - } - return Math.min(val, adjacentMaxSlot); - }) - .setMinValue(-1) - .setDefaultValue(-1) - .setScrollValues(1, 100, 10) - .setNumberFormat(numberFormatAny) - .setPos(spaceX * 0, spaceY * 2 + 2) - .setSize(spaceX * 2 + 5, 12)) - .setPos(startX, startY)) - .widget( - new TextWidget() - .setStringSupplier( - () -> (convert(getCoverData()) & EXPORT_MASK) > 0 ? GT_Utility.trans("006", "Export") - : GT_Utility.trans("007", "Import")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 3, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(GT_Utility.trans("254.1", "Internal slot#")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 3, 4 + startY + spaceY * 1)) - .widget( - new TextWidget(GT_Utility.trans("255", "Adjacent slot#")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 3, 4 + startY + spaceY * 2)); - } - - private int getMaxSlot() { - final ICoverable tile = getUIBuildContext().getTile(); - if (tile instanceof TileEntity && !tile.isDead()) { - return tile.getSizeInventory() - 1; - } else { - return -1; - } - } - - private int getFlagExport(int coverVariable) { - return coverVariable & EXPORT_MASK; - } - - private int getFlagInternalSlot(int coverVariable) { - return coverVariable & SLOT_ID_MASK; - } - - private int getFlagAdjacentSlot(int coverVariable) { - return (coverVariable >> 14) & SLOT_ID_MASK; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Chest.java b/src/main/java/gregtech/common/covers/GT_Cover_Chest.java deleted file mode 100644 index 36e441102b..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Chest.java +++ /dev/null @@ -1,274 +0,0 @@ -package gregtech.common.covers; - -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; - -import cpw.mods.fml.common.network.ByteBufUtils; -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import io.netty.buffer.ByteBuf; - -public class GT_Cover_Chest extends GT_CoverBehaviorBase { - - private final int slots; - private final int stackSizeLimit = 1; - - public GT_Cover_Chest(int slots, ITexture coverTexture) { - super(ChestInventory.class, coverTexture); - if (slots <= 0) throw new IllegalArgumentException("slots must be greater than 0"); - this.slots = slots; - } - - @Override - public ChestInventory createDataObject(int aLegacyData) { - return new ChestInventory(slots, stackSizeLimit); - } - - @Override - public ChestInventory createDataObject() { - return new ChestInventory(slots, stackSizeLimit); - } - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public boolean isSimpleCover() { - return true; - } - - @Override - public boolean allowsCopyPasteTool() { - return false; - } - - @Override - public boolean allowsTickRateAddition() { - return false; - } - - @Override - protected void onDroppedImpl(ForgeDirection side, int aCoverID, ChestInventory aCoverVariable, - ICoverable aTileEntity) { - if (aTileEntity.getWorld().isRemote) return; - aCoverVariable.dropAll(aTileEntity, side); - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, ChestInventory aCoverVariable, - ICoverable aTileEntity) { - return aCoverVariable.firstTick ? 1 : 0; - } - - @Override - protected ChestInventory doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - ChestInventory aCoverVariable, ICoverable aTileEntity, long aTimer) { - // migrate slots. mostly needed while in development. still can be useful if we ever resize the inventory in the - // future - if (aCoverVariable.items.getSlots() != slots) { - if (aCoverVariable.items.getSlots() > slots) { - for (int i = slots; i < aCoverVariable.items.getSlots(); i++) { - ItemStack item = aCoverVariable.items.getStackInSlot(i); - if (item != null) { - dropItem(aTileEntity, side, item); - } - } - } - - ChestInventory newData = createDataObject(); - int toCopy = Math.min(newData.items.getSlots(), aCoverVariable.items.getSlots()); - for (int i = 0; i < toCopy; i++) { - newData.items.setStackInSlot(i, aCoverVariable.items.getStackInSlot(i)); - } - return newData; - } - aCoverVariable.firstTick = false; - return super.doCoverThingsImpl(side, aInputRedstone, aCoverID, aCoverVariable, aTileEntity, aTimer); - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new ChestUIFactory(buildContext).createWindow(); - } - - public class ChestUIFactory extends UIFactory { - - private static final int spaceX = 18; - private static final int spaceY = 18; - - public ChestUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected int getGUIHeight() { - int height = slots / 3 * 18 + 8; - if (!getUIBuildContext().isAnotherWindow()) { - // player inv is 4 row - return height + 4 * 18 + 14; - } - return height; - } - - @Override - protected void addTitleToUI(ModularWindow.Builder builder) {} - - @Override - protected int getGUIWidth() { - if (getUIBuildContext().isAnotherWindow()) { - return 18 * 3 + 20; - } else { - return 18 * 9 + 20; - } - } - - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - CoverDataControllerWidget w = new CoverDataControllerWidget<>( - this::getCoverData, - this::setCoverData, - GT_Cover_Chest.this); - ChestInventory d = getCoverData(); - LimitingItemStackHandler h; - if (d == null) { - // ??? - return; - } - h = d.items; - SlotGroup slotGroup = SlotGroup.ofItemHandler(h, 3) - .build(); - if (getUIBuildContext().isAnotherWindow()) { - slotGroup.setPos(4, 4); - } else { - slotGroup.setPos(getGUIWidth() / 2 - 18 * 3 / 2, 6); - } - w.addChild(slotGroup); - builder.widget(w); - - builder.setPos( - (p, t) -> Alignment.Center.getAlignedPos( - new Size(getUIBuildContext().isAnotherWindow() ? t.getPos().x : p.width, p.height), - new Size(getGUIWidth(), getGUIHeight()))); - } - - @Override - protected boolean doesBindPlayerInventory() { - return true; - } - } - - private static class LimitingItemStackHandler extends ItemStackHandler { - - private final int slotLimit; - - private LimitingItemStackHandler(int slots, int slotLimit) { - super(slots); - this.slotLimit = slotLimit; - } - - @Override - public int getSlotLimit(int slot) { - return slotLimit; - } - } - - public static class ChestInventory implements ISerializableObject { - - final LimitingItemStackHandler items; - boolean firstTick; - - public ChestInventory(int slots, int stackSize) { - items = new LimitingItemStackHandler(slots, stackSize); - } - - @NotNull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { - items.deserializeNBT(ISerializableObject.readCompoundTagFromGreggyByteBuf(aBuf)); - return this; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - ByteBufUtils.writeTag(aBuf, items.serializeNBT()); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - if (!(aNBT instanceof NBTTagCompound)) return; - items.deserializeNBT((NBTTagCompound) aNBT); - firstTick = true; - } - - @NotNull - @Override - public NBTBase saveDataToNBT() { - return items.serializeNBT(); - } - - @NotNull - @Override - public ISerializableObject copy() { - ChestInventory copy = new ChestInventory(items.getSlots(), items.getSlotLimit(0)); - for (int i = 0; i < items.getSlots(); i++) { - copy.items.setStackInSlot(i, items.getStackInSlot(i)); - } - return copy; - } - - public void dropAll(ICoverable coverable, ForgeDirection direction) { - for (int i = 0; i < items.getSlots(); i++) { - ItemStack tItem = items.getStackInSlot(i); - if (tItem == null) { - continue; - } - dropItem(coverable, direction, tItem); - items.setStackInSlot(i, null); - } - } - } - - private static void dropItem(ICoverable coverable, ForgeDirection direction, ItemStack tItem) { - final EntityItem tItemEntity = new EntityItem( - coverable.getWorld(), - coverable.getXCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F + direction.offsetX, - coverable.getYCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F + direction.offsetY, - coverable.getZCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F + direction.offsetZ, - new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage())); - if (tItem.hasTagCompound()) { - tItemEntity.getEntityItem() - .setTagCompound( - (NBTTagCompound) tItem.getTagCompound() - .copy()); - } - tItemEntity.motionX = (XSTR_INSTANCE.nextGaussian() * 0.05D); - tItemEntity.motionY = (XSTR_INSTANCE.nextGaussian() * 0.05D + 0.2D); - tItemEntity.motionZ = (XSTR_INSTANCE.nextGaussian() * 0.05D); - tItemEntity.hurtResistantTime = 999999; - tItemEntity.lifespan = 60000; - coverable.getWorld() - .spawnEntityInWorld(tItemEntity); - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java b/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java deleted file mode 100644 index 2c51cdc355..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java +++ /dev/null @@ -1,270 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.covers.IControlsWorkCover; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; - -public class GT_Cover_ControlsWork extends GT_CoverBehavior implements IControlsWorkCover { - - public GT_Cover_ControlsWork(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if (!makeSureOnlyOne(side, aTileEntity)) return 0; - if (aTileEntity instanceof IMachineProgress machine) { - if (aCoverVariable < 2) { - if ((aInputRedstone > 0) == (aCoverVariable == 0)) { - if (!machine.isAllowedToWork()) machine.enableWorking(); - } else if (machine.isAllowedToWork()) machine.disableWorking(); - machine.setWorkDataValue(aInputRedstone); - } else if (aCoverVariable == 2) { - machine.disableWorking(); - } else { - if (machine.wasShutdown() && machine.getLastShutDownReason() - .wasCritical()) { - machine.disableWorking(); - if (!mPlayerNotified) { - EntityPlayer player = lastPlayer == null ? null : lastPlayer.get(); - if (player != null) { - lastPlayer = null; - mPlayerNotified = true; - GT_Utility.sendChatToPlayer( - player, - aTileEntity.getInventoryName() + "at " - + String.format( - "(%d,%d,%d)", - aTileEntity.getXCoord(), - aTileEntity.getYCoord(), - aTileEntity.getZCoord()) - + " shut down."); - } - } - return 2; - } else { - return 3 + doCoverThings(side, aInputRedstone, aCoverID, aCoverVariable - 3, aTileEntity, aTimer); - } - } - } - return aCoverVariable; - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { - return aCoverVariable.get() != 2; // always off, so no redstone needed either - } - - /** - * Make sure there is only one GT_Cover_ControlsWork on the aTileEntity TODO this is a migration thing. Remove this - * after 2.3.0 is released. - * - * @return true if the cover is the first (side) one - **/ - private boolean makeSureOnlyOne(ForgeDirection side, ICoverable aTileEntity) { - return IControlsWorkCover.makeSureOnlyOne(side, aTileEntity); - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - boolean aForced) { - if ((aTileEntity instanceof IMachineProgress)) { - ((IMachineProgress) aTileEntity).enableWorking(); - ((IMachineProgress) aTileEntity).setWorkDataValue((byte) 0); - } - return true; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 5; - if (aCoverVariable < 0) { - aCoverVariable = 2; - } - if (aCoverVariable == 0) { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("003", "Enable with Signal")); - } - if (aCoverVariable == 1) { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("004", "Disable with Signal")); - } - if (aCoverVariable == 2) { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("005", "Disabled")); - } - if (aCoverVariable == 3) { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("505", "Enable with Signal (Safe)")); - } - if (aCoverVariable == 4) { - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("506", "Disable with Signal (Safe)")); - } - // TODO: Set lastPlayer - return aCoverVariable; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 1; - } - - @Override - public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { - if (!super.isCoverPlaceable(side, aStack, aTileEntity)) return false; - for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { - if (aTileEntity.getCoverBehaviorAtSideNew(tSide) instanceof IControlsWorkCover) { - return false; - } - } - return true; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new ControlsWorkUIFactory(buildContext).createWindow(); - } - - private class ControlsWorkUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public ControlsWorkUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - builder - .widget( - new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( - this::getCoverData, - this::setCoverData, - GT_Cover_ControlsWork.this, - (id, coverData) -> !getClickable(id, convert(coverData)), - (id, coverData) -> new ISerializableObject.LegacyCoverData( - getNewCoverVariable(id, convert(coverData)))) - .addToggleButton( - 0, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON) - .setPos(spaceX * 0, spaceY * 0)) - .addToggleButton( - 1, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF) - .setPos(spaceX * 0, spaceY * 1)) - .addToggleButton( - 2, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CROSS) - .setPos(spaceX * 0, spaceY * 2)) - .setPos(startX, startY)) - .widget( - new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_ControlsWork.this) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofCheckAndCross(), - coverData -> convert(coverData) > 2, - (coverData, state) -> new ISerializableObject.LegacyCoverData( - adjustCoverVariable(state, convert(coverData))), - widget -> widget.setPos(spaceX * 0, spaceY * 3)) - .setPos(startX, startY)) - .widget( - new TextWidget(GT_Utility.trans("243", "Enable with Redstone")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(GT_Utility.trans("244", "Disable with Redstone")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 1)) - .widget( - new TextWidget(GT_Utility.trans("245", "Disable machine")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 2)) - .widget( - new TextWidget(GT_Utility.trans("507", "Safe Mode")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 3)); - } - - private int getNewCoverVariable(int id, int coverVariable) { - if (coverVariable > 2) { - return id + 3; - } else { - return id; - } - } - - private boolean getClickable(int id, int coverVariable) { - return ((id != coverVariable && id != coverVariable - 3) || id == 3); - } - - private int adjustCoverVariable(boolean safeMode, int coverVariable) { - if (safeMode && coverVariable <= 2) { - coverVariable += 3; - } - if (!safeMode && coverVariable > 2) { - coverVariable -= 3; - } - return coverVariable; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java b/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java deleted file mode 100644 index b7eb782bbf..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java +++ /dev/null @@ -1,328 +0,0 @@ -package gregtech.common.covers; - -import static gregtech.api.util.GT_Utility.moveMultipleItemStacks; - -import java.util.Arrays; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; - -public class GT_Cover_Conveyor extends GT_CoverBehavior { - - public final int mTickRate; - private final int mMaxStacks; - - public GT_Cover_Conveyor(int aTickRate, int maxStacks, ITexture coverTexture) { - super(coverTexture); - this.mTickRate = aTickRate; - this.mMaxStacks = maxStacks; - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if ((aCoverVariable % 6 > 1) && ((aTileEntity instanceof IMachineProgress))) { - if (((IMachineProgress) aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) { - return aCoverVariable; - } - } - final TileEntity tTileEntity = aTileEntity.getTileEntityAtSide(side); - final Object fromEntity = aCoverVariable % 2 == 0 ? aTileEntity : tTileEntity; - final Object toEntity = aCoverVariable % 2 != 0 ? aTileEntity : tTileEntity; - final ForgeDirection fromSide = aCoverVariable % 2 != 0 ? side.getOpposite() : side; - final ForgeDirection toSide = aCoverVariable % 2 == 0 ? side.getOpposite() : side; - - moveMultipleItemStacks( - fromEntity, - toEntity, - fromSide, - toSide, - null, - false, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1, - this.mMaxStacks); - - return aCoverVariable; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 12; - if (aCoverVariable < 0) { - aCoverVariable = 11; - } - switch (aCoverVariable) { - case 0 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("006", "Export")); - case 1 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("007", "Import")); - case 2 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("008", "Export (conditional)")); - case 3 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("009", "Import (conditional)")); - case 4 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("010", "Export (invert cond)")); - case 5 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("011", "Import (invert cond)")); - case 6 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("012", "Export allow Input")); - case 7 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("013", "Import allow Output")); - case 8 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("014", "Export allow Input (conditional)")); - case 9 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("015", "Import allow Output (conditional)")); - case 10 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("016", "Export allow Input (invert cond)")); - case 11 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("017", "Import allow Output (invert cond)")); - } - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return (aCoverVariable >= 6) || (aCoverVariable % 2 != 0); - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return (aCoverVariable >= 6) || (aCoverVariable % 2 == 0); - } - - @Override - public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return this.mTickRate; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new ConveyorUIFactory(buildContext).createWindow(); - } - - private class ConveyorUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - private CoverDataFollower_ToggleButtonWidget mBlockWidget = null; - private CoverDataFollower_ToggleButtonWidget mAllowWidget = null; - - public ConveyorUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - builder.widget( - new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( - this::getCoverData, - this::setCoverData, - GT_Cover_Conveyor.this, - (id, coverData) -> !getClickable(id, convert(coverData)), - (id, coverData) -> new ISerializableObject.LegacyCoverData( - getNewCoverVariable(id, convert(coverData)))) - .addToggleButton( - 0, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT) - .addTooltip(GT_Utility.trans("006", "Export")) - .setPos(spaceX * 0, spaceY * 0)) - .addToggleButton( - 1, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT) - .addTooltip(GT_Utility.trans("007", "Import")) - .setPos(spaceX * 1, spaceY * 0)) - .addToggleButton( - 2, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK) - .addTooltip(GT_Utility.trans("224", "Always On")) - .setPos(spaceX * 0, spaceY * 1)) - .addToggleButton( - 3, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_USE_PROCESSING_STATE) - .addTooltip(GT_Utility.trans("343", "Use Machine Processing State")) - .setPos(spaceX * 1, spaceY * 1)) - .addToggleButton( - 4, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_USE_INVERTED_PROCESSING_STATE) - .addTooltip(GT_Utility.trans("343.1", "Use Inverted Machine Processing State")) - .setPos(spaceX * 2, spaceY * 1)) - .addToggleButton(5, CoverDataFollower_ToggleButtonWidget.ofDisableable(), widget -> { - mAllowWidget = widget; - widget.setTextureGetter(i -> { - ISerializableObject.LegacyCoverData coverData = getCoverData(); - return coverData == null || coverData.get() % 2 == 0 - ? GT_UITextures.OVERLAY_BUTTON_ALLOW_INPUT - : GT_UITextures.OVERLAY_BUTTON_ALLOW_OUTPUT; - }) - .dynamicTooltip(() -> { - ISerializableObject.LegacyCoverData coverData = getCoverData(); - return Arrays.asList( - coverData == null || coverData.get() % 2 == 0 - ? GT_Utility.trans("314", "Allow Input") - : GT_Utility.trans("312", "Allow Output")); - }) - .setPos(spaceX * 0, spaceY * 2); - }) - .addToggleButton(6, CoverDataFollower_ToggleButtonWidget.ofDisableable(), widget -> { - mBlockWidget = widget; - widget.setTextureGetter(i -> { - ISerializableObject.LegacyCoverData coverData = getCoverData(); - return coverData == null || coverData.get() % 2 == 0 - ? GT_UITextures.OVERLAY_BUTTON_BLOCK_INPUT - : GT_UITextures.OVERLAY_BUTTON_BLOCK_OUTPUT; - }) - .dynamicTooltip(() -> { - ISerializableObject.LegacyCoverData coverData = getCoverData(); - return Arrays.asList( - coverData == null || coverData.get() % 2 == 0 - ? GT_Utility.trans("313", "Block Input") - : GT_Utility.trans("311", "Block Output")); - }) - .setPos(spaceX * 1, spaceY * 2); - }) - .setPos(startX, startY)) - .widget( - new TextWidget(GT_Utility.trans("229", "Export/Import")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(GT_Utility.trans("230", "Conditional")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 1)) - .widget(TextWidget.dynamicString(() -> { - ISerializableObject.LegacyCoverData coverData = getCoverData(); - return coverData == null || coverData.get() % 2 == 0 ? GT_Utility.trans("344", "Input Blocking") - : GT_Utility.trans("344.1", "Output Blocking"); - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 2)); - } - - private int getNewCoverVariable(int id, int coverVariable) { - switch (id) { - case 0 -> { - if (mBlockWidget != null) { - mBlockWidget.notifyTooltipChange(); - } - if (mAllowWidget != null) { - mAllowWidget.notifyTooltipChange(); - } - return coverVariable & ~0x1; - } - case 1 -> { - if (mBlockWidget != null) { - mBlockWidget.notifyTooltipChange(); - } - if (mAllowWidget != null) { - mAllowWidget.notifyTooltipChange(); - } - return coverVariable | 0x1; - } - case 2 -> { - if (coverVariable > 5) return 0x6 | (coverVariable & ~0xE); - return (coverVariable & ~0xE); - } - case 3 -> { - if (coverVariable > 5) return 0x8 | (coverVariable & ~0xE); - return 0x2 | (coverVariable & ~0xE); - } - case 4 -> { - if (coverVariable > 5) return 0xA | (coverVariable & ~0xE); - return (0x4 | (coverVariable & ~0xE)); - } - case 5 -> { - if (coverVariable <= 5) return coverVariable + 6; - } - case 6 -> { - if (coverVariable > 5) return coverVariable - 6; - } - } - return coverVariable; - } - - private boolean getClickable(int id, int coverVariable) { - if (coverVariable < 0 || 11 < coverVariable) return false; - return switch (id) { - case 0, 1 -> (0x1 & coverVariable) != id; - case 2 -> (coverVariable % 6) >= 2; - case 3 -> (coverVariable % 6) < 2 || 4 <= (coverVariable % 6); - case 4 -> (coverVariable % 6) < 4; - case 5 -> coverVariable < 6; - case 6 -> coverVariable >= 6; - default -> false; - }; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Crafting.java b/src/main/java/gregtech/common/covers/GT_Cover_Crafting.java deleted file mode 100644 index f492542fa9..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Crafting.java +++ /dev/null @@ -1,56 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.inventory.ContainerWorkbench; -import net.minecraft.network.play.server.S2DPacketOpenWindow; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.ISerializableObject; - -public class GT_Cover_Crafting extends GT_CoverBehavior { - - public GT_Cover_Crafting(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - if ((aPlayer instanceof EntityPlayerMP)) { - ((EntityPlayerMP) aPlayer).getNextWindowId(); - ((EntityPlayerMP) aPlayer).playerNetServerHandler.sendPacket( - new S2DPacketOpenWindow(((EntityPlayerMP) aPlayer).currentWindowId, 1, "Crafting", 9, true)); - aPlayer.openContainer = new ContainerWorkbench( - aPlayer.inventory, - aPlayer.worldObj, - aTileEntity.getXCoord(), - aTileEntity.getYCoord(), - aTileEntity.getZCoord()) { - - @Override - public boolean canInteractWith(EntityPlayer player) { - return true; - } - }; - aPlayer.openContainer.windowId = ((EntityPlayerMP) aPlayer).currentWindowId; - aPlayer.openContainer.addCraftingToCrafters((EntityPlayerMP) aPlayer); - } - return true; - } - - @Override - protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return false; - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java b/src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java deleted file mode 100644 index 96ef77f207..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_DoesWork.java +++ /dev/null @@ -1,252 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; - -public class GT_Cover_DoesWork extends GT_CoverBehavior { - - private static int FLAG_INVERTED = 0x1; - private static int FLAG_PROGRESS = 0x2; - private static int FLAG_ENABLED = 0x4; - - public GT_Cover_DoesWork(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if ((aTileEntity instanceof IMachineProgress)) { - IMachineProgress mProgress = (IMachineProgress) aTileEntity; - boolean inverted = isFlagSet(aCoverVariable, FLAG_INVERTED); - int signal = 0; - - if (isFlagSet(aCoverVariable, FLAG_ENABLED)) { - signal = inverted == mProgress.isAllowedToWork() ? 0 : 15; - } else if (isFlagSet(aCoverVariable, FLAG_PROGRESS)) { - signal = inverted == (mProgress.getMaxProgress() == 0) ? 0 : 15; - } else { - int tScale = mProgress.getMaxProgress() / 15; - - if (tScale > 0 && mProgress.hasThingsToDo()) { - signal = inverted ? (15 - mProgress.getProgress() / tScale) : (mProgress.getProgress() / tScale); - } else { - signal = inverted ? 15 : 0; - } - } - - aTileEntity.setOutputRedstoneSignal(side, (byte) signal); - } else { - aTileEntity.setOutputRedstoneSignal(side, (byte) 0); - } - return aCoverVariable; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 6; - if (aCoverVariable < 0) { - aCoverVariable = 5; - } - switch (aCoverVariable) { - case 0 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("018", "Normal")); - // Progress scaled - case 1 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("019", "Inverted")); - // ^ inverted - case 2 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("020", "Ready to work")); - // Not Running - case 3 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("021", "Not ready to work")); - // Running - case 4 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("028", "Machine Enabled")); - // Enabled - case 5 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("029", "Machine Disabled")); - // Disabled - } - return aCoverVariable; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 5; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new DoesWorkUIFactory(buildContext).createWindow(); - } - - private static boolean isFlagSet(int coverVariable, int flag) { - return (coverVariable & flag) == flag; - } - - private class DoesWorkUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public DoesWorkUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - builder - .widget( - new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( - this::getCoverData, - this::setCoverData, - GT_Cover_DoesWork.this, - (id, coverData) -> isEnabled(id, convert(coverData)), - (id, coverData) -> new ISerializableObject.LegacyCoverData( - getNewCoverVariable(id, convert(coverData)))) - .addToggleButton( - 0, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_PROGRESS) - .setPos(spaceX * 0, spaceY * 0)) - .addToggleButton( - 1, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK) - .setPos(spaceX * 1, spaceY * 0)) - .addToggleButton( - 2, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_ON) - .setPos(spaceX * 2, spaceY * 0)) - .addToggleButton( - 3, - CoverDataFollower_ToggleButtonWidget.ofRedstone(), - widget -> widget.setPos(spaceX * 0, spaceY * 1)) - .setPos(startX, startY)) - .widget(TextWidget.dynamicString(() -> { - int coverVariable = convert(getCoverData()); - - if (isFlagSet(coverVariable, FLAG_ENABLED)) { - return GT_Utility.trans("271", "Machine enabled"); - } else if (isFlagSet(coverVariable, FLAG_PROGRESS)) { - return GT_Utility.trans("242", "Machine idle"); - } else { - return GT_Utility.trans("241", "Recipe progress"); - } - - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 3, 4 + startY + spaceY * 0)) - .widget( - TextWidget - .dynamicString( - () -> isFlagSet(convert(getCoverData()), FLAG_INVERTED) - ? GT_Utility.trans("INVERTED", "Inverted") - : GT_Utility.trans("NORMAL", "Normal")) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 3, 4 + startY + spaceY * 1)); - } - - private int getNewCoverVariable(int id, int coverVariable) { - switch (id) { - case 0 -> { - return (coverVariable & ~FLAG_ENABLED) & ~FLAG_PROGRESS; - } - case 1 -> { - return (coverVariable & ~FLAG_ENABLED) | FLAG_PROGRESS; - } - case 2 -> { - return (coverVariable & ~FLAG_PROGRESS) | FLAG_ENABLED; - } - case 3 -> { - if (isFlagSet(coverVariable, FLAG_INVERTED)) { - return coverVariable & ~FLAG_INVERTED; - } else { - return coverVariable | FLAG_INVERTED; - } - } - } - return coverVariable; - } - - private boolean isEnabled(int id, int coverVariable) { - return switch (id) { - case 0 -> !isFlagSet(coverVariable, FLAG_PROGRESS) && !isFlagSet(coverVariable, FLAG_ENABLED); - case 1 -> isFlagSet(coverVariable, FLAG_PROGRESS); - case 2 -> isFlagSet(coverVariable, FLAG_ENABLED); - case 3 -> isFlagSet(coverVariable, FLAG_INVERTED); - default -> true; - }; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Drain.java b/src/main/java/gregtech/common/covers/GT_Cover_Drain.java deleted file mode 100644 index 2590f8e7ae..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Drain.java +++ /dev/null @@ -1,140 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidBlock; -import net.minecraftforge.fluids.IFluidHandler; - -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; - -public class GT_Cover_Drain extends GT_CoverBehavior { - - public GT_Cover_Drain(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if ((aCoverVariable % 3 > 1) && ((aTileEntity instanceof IMachineProgress))) { - if (((IMachineProgress) aTileEntity).isAllowedToWork()) { - return aCoverVariable; - } - } - if (side != ForgeDirection.UNKNOWN) { - final Block tBlock = aTileEntity.getBlockAtSide(side); - if ((aCoverVariable < 3) && ((aTileEntity instanceof IFluidHandler))) { - if ((side == ForgeDirection.UP) && (aTileEntity.getWorld() - .isRaining()) - && (aTileEntity.getWorld() - .getPrecipitationHeight(aTileEntity.getXCoord(), aTileEntity.getZCoord()) - 2 - < aTileEntity.getYCoord())) { - int tAmount = (int) (aTileEntity.getBiome().rainfall * 10.0F); - if (tAmount > 0) { - ((IFluidHandler) aTileEntity).fill( - side, - Materials.Water.getFluid( - aTileEntity.getWorld() - .isThundering() ? tAmount * 2L : tAmount), - true); - } - } - FluidStack tLiquid = null; - if (tBlock != null) { - if (((tBlock == Blocks.water) || (tBlock == Blocks.flowing_water)) - && (aTileEntity.getMetaIDAtSide(side) == 0)) { - tLiquid = Materials.Water.getFluid(1000L); - } else if (((tBlock == Blocks.lava) || (tBlock == Blocks.flowing_lava)) - && (aTileEntity.getMetaIDAtSide(side) == 0)) { - tLiquid = Materials.Lava.getFluid(1000L); - } else if ((tBlock instanceof IFluidBlock)) { - tLiquid = ((IFluidBlock) tBlock).drain( - aTileEntity.getWorld(), - aTileEntity.getOffsetX(side, 1), - aTileEntity.getOffsetY(side, 1), - aTileEntity.getOffsetZ(side, 1), - false); - } - if ((tLiquid != null) && (tLiquid.getFluid() != null) - && ((side.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 // Horizontal - || ((side == ForgeDirection.DOWN) && (tLiquid.getFluid() - .getDensity() <= 0)) - || ((side == ForgeDirection.UP) && (tLiquid.getFluid() - .getDensity() >= 0))) - && (((IFluidHandler) aTileEntity).fill(side, tLiquid, false) == tLiquid.amount)) { - ((IFluidHandler) aTileEntity).fill(side, tLiquid, true); - aTileEntity.getWorld() - .setBlockToAir( - aTileEntity.getXCoord() + side.offsetX, - aTileEntity.getYCoord() + side.offsetY, - aTileEntity.getZCoord() + side.offsetZ); - } - } - } - if ((aCoverVariable >= 3) && (tBlock != null) - && ((tBlock == Blocks.lava) || (tBlock == Blocks.flowing_lava) - || (tBlock == Blocks.water) - || (tBlock == Blocks.flowing_water) - || ((tBlock instanceof IFluidBlock)))) { - aTileEntity.getWorld() - .setBlock( - aTileEntity.getOffsetX(side, 1), - aTileEntity.getOffsetY(side, 1), - aTileEntity.getOffsetZ(side, 1), - Blocks.air, - 0, - 0); - } - } - return aCoverVariable; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 6; - if (aCoverVariable < 0) { - aCoverVariable = 5; - } - switch (aCoverVariable) { - case 0 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("022", "Import")); - case 1 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("023", "Import (conditional)")); - case 2 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("024", "Import (invert cond)")); - case 3 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("025", "Keep Liquids Away")); - case 4 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("026", "Keep Liquids Away (conditional)")); - case 5 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("027", "Keep Liquids Away (invert cond)")); - } - return aCoverVariable; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return ((IMachineProgress) aTileEntity).isAllowedToWork() == aCoverVariable < 2; - } - - @Override - public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return aCoverVariable < 3 ? 50 : 1; - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java deleted file mode 100644 index 5b1f48d04f..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_EUMeter.java +++ /dev/null @@ -1,410 +0,0 @@ -package gregtech.common.covers; - -import java.util.function.Function; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicBatteryBuffer; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_CycleButtonWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import io.netty.buffer.ByteBuf; - -public class GT_Cover_EUMeter extends GT_CoverBehaviorBase { - - public GT_Cover_EUMeter(ITexture coverTexture) { - super(EUMeterData.class, coverTexture); - } - - @Override - public EUMeterData createDataObject(int aLegacyData) { - return new EUMeterData(aLegacyData, 0); - } - - @Override - public EUMeterData createDataObject() { - return new EUMeterData(); - } - - @Override - protected EUMeterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - EUMeterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - final long stored = aCoverVariable.type.getTileEntityStoredEnergy(aTileEntity); - final long capacity = aCoverVariable.type.getTileEntityEnergyCapacity(aTileEntity); - - byte redstoneSignal; - - if (stored == 0L) { - // nothing - redstoneSignal = 0; - } else if (stored >= capacity) { - // full - redstoneSignal = 15; - } else { - // 1-14 range - redstoneSignal = (byte) (1 + (14 * stored) / capacity); - } - - if (aCoverVariable.inverted) { - redstoneSignal = (byte) (15 - redstoneSignal); - } - - if (aCoverVariable.threshold > 0) { - if (aCoverVariable.inverted && stored >= aCoverVariable.threshold) { - redstoneSignal = 0; - } else if (!aCoverVariable.inverted && stored < aCoverVariable.threshold) { - redstoneSignal = 0; - } - } - - aTileEntity.setOutputRedstoneSignal(side, redstoneSignal); - return aCoverVariable; - } - - @Override - protected EUMeterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - int num = (aCoverVariable.getNum() + (aPlayer.isSneaking() ? -1 : 1) + EnergyType.values().length * 2) - % (EnergyType.values().length * 2); - switch (num) { - case 0 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("031", "Normal Universal Storage")); - case 1 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("032", "Inverted Universal Storage")); - case 2 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("033", "Normal Electricity Storage")); - case 3 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("034", "Inverted Electricity Storage")); - case 4 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("035", "Normal Steam Storage")); - case 5 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("036", "Inverted Steam Storage")); - case 6 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("037", "Normal Average Electric Input")); - case 7 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("038", "Inverted Average Electric Input")); - case 8 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("039", "Normal Average Electric Output")); - case 9 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("040", "Inverted Average Electric Output")); - case 10 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("041", "Normal Electricity Storage(Including Batteries)")); - case 11 -> GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("042", "Inverted Electricity Storage(Including Batteries)")); - } - aCoverVariable.setNum(num); - return aCoverVariable; - } - - // region Static Result Methods - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return false; - } - - @Override - protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, EUMeterData aCoverVariable, - ICoverable aTileEntity) { - return 20; - } - // endregion - - // region GUI Stuff - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new EUMeterUIFactory(buildContext).createWindow(); - } - - private class EUMeterUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public EUMeterUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); - final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); - - final CoverDataFollower_NumericWidget numericWidget = new CoverDataFollower_NumericWidget<>(); - - builder.widget( - new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_EUMeter.this) - .addFollower( - new CoverDataFollower_CycleButtonWidget<>(), - coverData -> coverData.type.ordinal(), - (coverData, state) -> { - coverData.type = EnergyType.getEnergyType(state); - return coverData; - }, - widget -> widget.setLength(EnergyType.values().length) - .addTooltip( - state -> EnergyType.getEnergyType(state) - .getTooltip()) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CYCLIC) - .setPos(spaceX * 0, spaceY * 0)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofRedstone(), - coverData -> coverData.inverted, - (coverData, state) -> { - coverData.inverted = state; - return coverData; - }, - widget -> widget.addTooltip(0, NORMAL) - .addTooltip(1, INVERTED) - .setPos(spaceX * 0, spaceY * 1)) - .addFollower(numericWidget, coverData -> (double) coverData.threshold, (coverData, state) -> { - coverData.threshold = state.longValue(); - return coverData; - }, - widget -> widget.setScrollValues(1000, 100, 100000) - .setFocusOnGuiOpen(true) - .setPos(spaceX * 0, spaceY * 2 + 2) - .setSize(spaceX * 8, 12)) - .setPos(startX, startY)) - .widget( - new TextWidget() - .setStringSupplier(() -> getCoverData() != null ? getCoverData().type.getTitle() : "") - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX, 4 + startY)) - .widget( - new TextWidget() - .setStringSupplier( - () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX, 4 + startY + spaceY)) - .widget( - new TextWidget(GT_Utility.trans("222.1", "Energy threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX, startY + spaceY * 3 + 4)) - - .widget( - new FakeSyncWidget.LongSyncer( - () -> getCoverData() != null - ? getCoverData().type.getTileEntityEnergyCapacity(getUIBuildContext().getTile()) - : Long.MAX_VALUE, - value -> numericWidget.setMaxValue(value))); - } - } - - // endregion - - public static class EUMeterData implements ISerializableObject { - - private EnergyType type; - private boolean inverted; - /** - * The special value {@code 0} means threshold check is disabled. - */ - private long threshold; - - public EUMeterData() { - type = EnergyType.UNIVERSAL_STORAGE; - inverted = false; - threshold = 0; - } - - public EUMeterData(EnergyType type, boolean inverted, long threshold) { - this.type = type; - this.inverted = inverted; - this.threshold = threshold; - } - - public EUMeterData(int num, long threshold) { - this(); - this.setNum(num); - this.threshold = threshold; - } - - public int getNum() { - return type.ordinal() * 2 + (inverted ? 1 : 0); - } - - public void setNum(int num) { - type = EnergyType.getEnergyType(num / 2); - inverted = num % 2 == 1; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new EUMeterData(type, inverted, threshold); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setInteger("typeOrdinal", type.ordinal()); - tag.setBoolean("inverted", inverted); - tag.setLong("threshold", threshold); - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - aBuf.writeInt(type.ordinal()); - aBuf.writeBoolean(inverted); - aBuf.writeLong(threshold); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - NBTTagCompound tag = (NBTTagCompound) aNBT; - int typeOrdinal = tag.getInteger("typeOrdinal"); - type = EnergyType.getEnergyType(typeOrdinal); - inverted = tag.getBoolean("inverted"); - threshold = tag.getLong("threshold"); - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { - int typeOrdinal = aBuf.readInt(); - type = EnergyType.getEnergyType(typeOrdinal); - inverted = aBuf.readBoolean(); - threshold = aBuf.readLong(); - return this; - } - } - - private enum EnergyType { - - UNIVERSAL_STORAGE(GT_Utility.trans("301", "Universal"), GT_Utility.trans("256", "Universal Storage"), - ICoverable::getUniversalEnergyStored, ICoverable::getUniversalEnergyCapacity), - ELECTRICITY_STORAGE(GT_Utility.trans("302", "Int. EU"), GT_Utility.trans("257", "Electricity Storage"), - ICoverable::getStoredEU, ICoverable::getEUCapacity), - STEAM_STORAGE(GT_Utility.trans("303", "Steam"), GT_Utility.trans("258", "Steam Storage"), - ICoverable::getStoredSteam, ICoverable::getSteamCapacity), - AVERAGE_ELECTRIC_INPUT(GT_Utility.trans("304", "Avg. Input"), GT_Utility.trans("259", "Average Electric Input"), - ICoverable::getAverageElectricInput, (te) -> te.getInputVoltage() * te.getInputAmperage()), - AVERAGE_ELECTRIC_OUTPUT(GT_Utility.trans("305", "Avg. Output"), - GT_Utility.trans("260", "Average Electric Output"), ICoverable::getAverageElectricOutput, - (te) -> te.getOutputVoltage() * te.getOutputAmperage()), - ELECTRICITY_STORAGE_INCLUDING_BATTERIES(GT_Utility.trans("306", "EU stored"), - GT_Utility.trans("261", "Electricity Storage(Including Batteries)"), (te) -> { - if (te instanceof IGregTechTileEntity) { - IMetaTileEntity mte = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (mte instanceof GT_MetaTileEntity_BasicBatteryBuffer buffer) { - return buffer.getStoredEnergy()[0]; - } - } - return te.getStoredEU(); - }, (te) -> { - if (te instanceof IGregTechTileEntity) { - IMetaTileEntity mte = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (mte instanceof GT_MetaTileEntity_BasicBatteryBuffer buffer) { - return buffer.getStoredEnergy()[1]; - } - } - return te.getEUCapacity(); - }); - - private final String title; - private final String tooltip; - private final Function getTileEntityStoredEnergyFunc; - private final Function getTileEntityEnergyCapacityFunc; - - EnergyType(String title, String tooltip, Function getTileEntityStoredEnergyFunc, - Function getTileEntityEnergyCapacityFunc) { - this.title = title; - this.tooltip = tooltip; - this.getTileEntityStoredEnergyFunc = getTileEntityStoredEnergyFunc; - this.getTileEntityEnergyCapacityFunc = getTileEntityEnergyCapacityFunc; - } - - public String getTitle() { - return title; - } - - public String getTooltip() { - return tooltip; - } - - public long getTileEntityStoredEnergy(ICoverable aTileEntity) { - return getTileEntityStoredEnergyFunc.apply(aTileEntity); - } - - public long getTileEntityEnergyCapacity(ICoverable aTileEntity) { - return getTileEntityEnergyCapacityFunc.apply(aTileEntity); - } - - public EnergyType getNext() { - return values()[(ordinal() + 1) % values().length]; - } - - public static EnergyType getEnergyType(int ordinal) { - if (ordinal < 0 || values().length <= ordinal) { - ordinal = 0; - } - return values()[ordinal]; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FacadeAE.java b/src/main/java/gregtech/common/covers/GT_Cover_FacadeAE.java deleted file mode 100644 index da6c2c9cfa..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_FacadeAE.java +++ /dev/null @@ -1,31 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import appeng.facade.IFacadeItem; - -public class GT_Cover_FacadeAE extends GT_Cover_FacadeBase { - - @Override - protected Block getTargetBlock(ItemStack aFacadeStack) { - if (aFacadeStack == null) return null; - final Item item = aFacadeStack.getItem(); - if (!(item instanceof IFacadeItem)) return null; - return ((IFacadeItem) item).getBlock(aFacadeStack); - } - - @Override - protected int getTargetMeta(ItemStack aFacadeStack) { - if (aFacadeStack == null) return 0; - final Item item = aFacadeStack.getItem(); - if (!(item instanceof IFacadeItem)) return 0; - return ((IFacadeItem) item).getMeta(aFacadeStack); - } - - @Override - protected ItemStack getDisplayStackImpl(int aCoverID, FacadeData aCoverVariable) { - return aCoverVariable.mStack; - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java b/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java deleted file mode 100644 index 4d7d0eb7ee..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java +++ /dev/null @@ -1,396 +0,0 @@ -package gregtech.common.covers; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.common.network.ByteBufUtils; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_RenderingWorld; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import io.netty.buffer.ByteBuf; - -public abstract class GT_Cover_FacadeBase extends GT_CoverBehaviorBase { - - /** - * This is the Dummy, if there is a generic Cover without behavior - */ - public GT_Cover_FacadeBase() { - super(FacadeData.class); - } - - @Override - public boolean isSimpleCover() { - return true; - } - - @Override - public FacadeData createDataObject(int aLegacyData) { - return new FacadeData(); - } - - @Override - public FacadeData createDataObject() { - return new FacadeData(); - } - - @Override - protected FacadeData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable.mFlags = ((aCoverVariable.mFlags + 1) & 15); - GT_Utility.sendChatToPlayer( - aPlayer, - ((aCoverVariable.mFlags & 1) != 0 ? GT_Utility.trans("128.1", "Redstone ") : "") - + ((aCoverVariable.mFlags & 2) != 0 ? GT_Utility.trans("129.1", "Energy ") : "") - + ((aCoverVariable.mFlags & 4) != 0 ? GT_Utility.trans("130.1", "Fluids ") : "") - + ((aCoverVariable.mFlags & 8) != 0 ? GT_Utility.trans("131.1", "Items ") : "")); - return aCoverVariable; - } - - @Override - protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity) { - return (aCoverVariable.mFlags & 1) != 0; - } - - @Override - protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity) { - return (aCoverVariable.mFlags & 1) != 0; - } - - @Override - protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity) { - return (aCoverVariable.mFlags & 2) != 0; - } - - @Override - protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity) { - return (aCoverVariable.mFlags & 2) != 0; - } - - @Override - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return (aCoverVariable.mFlags & 4) != 0; - } - - @Override - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return (aCoverVariable.mFlags & 4) != 0; - } - - @Override - protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return (aCoverVariable.mFlags & 8) != 0; - } - - @Override - protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return (aCoverVariable.mFlags & 8) != 0; - } - - @Override - public void placeCover(ForgeDirection side, ItemStack aCover, ICoverable aTileEntity) { - aTileEntity.setCoverIdAndDataAtSide( - side, - GT_Utility.stackToInt(aCover), - new FacadeData(GT_Utility.copyAmount(1, aCover), 0)); - - if (aTileEntity.isClientSide()) GT_RenderingWorld.getInstance() - .register( - aTileEntity.getXCoord(), - aTileEntity.getYCoord(), - aTileEntity.getZCoord(), - getTargetBlock(aCover), - getTargetMeta(aCover)); - } - - @Override - protected ItemStack getDropImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity) { - return aCoverVariable.mStack; - } - - @Override - protected ITexture getSpecialCoverFGTextureImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity) { - return getSpecialCoverTextureImpl(side, aCoverID, aCoverVariable, aTileEntity); - } - - @Override - protected ITexture getSpecialCoverTextureImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity) { - if (GT_Utility.isStackInvalid(aCoverVariable.mStack)) return Textures.BlockIcons.ERROR_RENDERING[0]; - Block block = getTargetBlock(aCoverVariable.mStack); - if (block == null) return Textures.BlockIcons.ERROR_RENDERING[0]; - // TODO: change this when *someone* made the block render in both pass - if (block.getRenderBlockPass() != 0) return Textures.BlockIcons.ERROR_RENDERING[0]; - return TextureFactory.builder() - .setFromBlock(block, getTargetMeta(aCoverVariable.mStack)) - .useWorldCoord() - .setFromSide(side) - .build(); - } - - @Override - protected Block getFacadeBlockImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity) { - if (GT_Utility.isStackInvalid(aCoverVariable.mStack)) return null; - return getTargetBlock(aCoverVariable.mStack); - } - - @Override - protected int getFacadeMetaImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity) { - if (GT_Utility.isStackInvalid(aCoverVariable.mStack)) return 0; - return getTargetMeta(aCoverVariable.mStack); - } - - protected abstract Block getTargetBlock(ItemStack aFacadeStack); - - protected abstract int getTargetMeta(ItemStack aFacadeStack); - - @Override - protected boolean isDataNeededOnClientImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected void onDataChangedImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity) { - if (aTileEntity.isClientSide()) GT_RenderingWorld.getInstance() - .register( - aTileEntity.getXCoord(), - aTileEntity.getYCoord(), - aTileEntity.getZCoord(), - getTargetBlock(aCoverVariable.mStack), - getTargetMeta(aCoverVariable.mStack)); - } - - @Override - protected void onDroppedImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, ICoverable aTileEntity) { - if (aTileEntity.isClientSide()) { - for (final ForgeDirection iSide : ForgeDirection.VALID_DIRECTIONS) { - if (iSide == side) continue; - // since we do not allow multiple type of facade per block, this check would be enough. - if (aTileEntity.getCoverBehaviorAtSideNew(iSide) instanceof GT_Cover_FacadeBase) return; - } - if (aCoverVariable.mStack != null) - // mStack == null -> cover removed before data reach client - GT_RenderingWorld.getInstance() - .unregister( - aTileEntity.getXCoord(), - aTileEntity.getYCoord(), - aTileEntity.getZCoord(), - getTargetBlock(aCoverVariable.mStack), - getTargetMeta(aCoverVariable.mStack)); - } - } - - @Override - protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, FacadeData aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - // in case cover data didn't hit client somehow. maybe he had a ridiculous view distance - aTileEntity.issueCoverUpdate(side); - return super.onCoverRightClickImpl(side, aCoverID, aCoverVariable, aTileEntity, aPlayer, aX, aY, aZ); - } - - @Override - public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { - // blocks that are not rendered in pass 0 are now accepted but rendered awkwardly - // to render it correctly require changing GT_Block_Machine to render in both pass, which is not really a good - // idea... - if (!super.isCoverPlaceable(side, aStack, aTileEntity)) return false; - final Block targetBlock = getTargetBlock(aStack); - if (targetBlock == null) return false; - // we allow one single type of facade on the same block for now - // otherwise it's not clear which block this block should impersonate - // this restriction can be lifted later by specifying a certain facade as dominate one as an extension to this - // class - for (final ForgeDirection iSide : ForgeDirection.VALID_DIRECTIONS) { - if (iSide == side) continue; - final CoverInfo coverInfo = aTileEntity.getCoverInfoAtSide(iSide); - if (!coverInfo.isValid()) continue; - final Block facadeBlock = coverInfo.getFacadeBlock(); - if (facadeBlock == null) continue; - if (facadeBlock != targetBlock) return false; - if (coverInfo.getFacadeMeta() != getTargetMeta(aStack)) return false; - } - return true; - } - - public static class FacadeData implements ISerializableObject { - - ItemStack mStack; - int mFlags; - - public FacadeData() {} - - public FacadeData(ItemStack mStack, int mFlags) { - this.mStack = mStack; - this.mFlags = mFlags; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new FacadeData(mStack, mFlags); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - final NBTTagCompound tag = new NBTTagCompound(); - if (mStack != null) tag.setTag("mStack", mStack.writeToNBT(new NBTTagCompound())); - tag.setByte("mFlags", (byte) mFlags); - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - ByteBufUtils.writeItemStack(aBuf, mStack); - aBuf.writeByte(mFlags); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - final NBTTagCompound tag = (NBTTagCompound) aNBT; - mStack = ItemStack.loadItemStackFromNBT(tag.getCompoundTag("mStack")); - mFlags = tag.getByte("mFlags"); - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - mStack = ISerializableObject.readItemStackFromGreggyByteBuf(aBuf); - mFlags = aBuf.readByte(); - return this; - } - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new FacadeBaseUIFactory(buildContext).createWindow(); - } - - private class FacadeBaseUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public FacadeBaseUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - builder.widget( - new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( - this::getCoverData, - this::setCoverData, - GT_Cover_FacadeBase.this, - this::isEnabled, - (id, coverData) -> { - coverData.mFlags = getNewCoverVariable(id, coverData); - return coverData; - }).addToggleButton( - 0, - CoverDataFollower_ToggleButtonWidget.ofCheckAndCross(), - widget -> widget.setPos(spaceX * 0, spaceY * 0)) - .addToggleButton( - 1, - CoverDataFollower_ToggleButtonWidget.ofCheckAndCross(), - widget -> widget.setPos(spaceX * 0, spaceY * 1)) - .addToggleButton( - 2, - CoverDataFollower_ToggleButtonWidget.ofCheckAndCross(), - widget -> widget.setPos(spaceX * 0, spaceY * 2)) - .addToggleButton( - 3, - CoverDataFollower_ToggleButtonWidget.ofCheckAndCross(), - widget -> widget.setPos(spaceX * 0, spaceY * 3)) - .setPos(startX, startY)) - .widget( - new ItemDrawable(() -> getCoverData() != null ? getCoverData().mStack : null).asWidget() - .setPos(5, 5) - .setSize(16, 16)) - .widget( - TextWidget.dynamicString(() -> getCoverData() != null ? getCoverData().mStack.getDisplayName() : "") - .setSynced(false) - .setDefaultColor(COLOR_TITLE.get()) - .setPos(25, 9)) - .widget( - new TextWidget(GT_Utility.trans("128", "Redstone")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(GT_Utility.trans("129", "Energy")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 1)) - .widget( - new TextWidget(GT_Utility.trans("130", "Fluids")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 2)) - .widget( - new TextWidget(GT_Utility.trans("131", "Items")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 3)); - } - - @Override - protected void addTitleToUI(ModularWindow.Builder builder) {} - - private int getNewCoverVariable(int id, FacadeData coverVariable) { - return switch (id) { - case 0 -> coverVariable.mFlags ^ 0x1; - case 1 -> coverVariable.mFlags ^ 0x2; - case 2 -> coverVariable.mFlags ^ 0x4; - case 3 -> coverVariable.mFlags ^ 0x8; - default -> coverVariable.mFlags; - }; - } - - private boolean isEnabled(int id, FacadeData coverVariable) { - return switch (id) { - case 0 -> (coverVariable.mFlags & 0x1) > 0; - case 1 -> (coverVariable.mFlags & 0x2) > 0; - case 2 -> (coverVariable.mFlags & 0x4) > 0; - case 3 -> (coverVariable.mFlags & 0x8) > 0; - default -> false; - }; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java b/src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java deleted file mode 100644 index e7d8288ccf..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_FluidLimiter.java +++ /dev/null @@ -1,202 +0,0 @@ -package gregtech.common.covers; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; -import io.netty.buffer.ByteBuf; - -/*** - * @author TrainerSnow#5086 - */ -public class GT_Cover_FluidLimiter extends GT_CoverBehaviorBase { - - public GT_Cover_FluidLimiter(ITexture coverTexture) { - super(FluidLimiterData.class, coverTexture); - } - - @Override - protected FluidLimiterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, - FluidLimiterData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aTileEntity instanceof IFluidHandler) { - adjustThreshold(aCoverVariable, !aPlayer.isSneaking()); - GT_Utility.sendChatToPlayer(aPlayer, String.format("Threshold: %f", aCoverVariable.threshold)); - } - return aCoverVariable; - } - - @Override - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, FluidLimiterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return allowsFluidIn(aCoverVariable, aTileEntity); - } - - @Override - protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, FluidLimiterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - /* - * Helpers - */ - - private boolean allowsFluidIn(FluidLimiterData aCoverVariable, ICoverable c) { - if (c instanceof IFluidHandler) { - return aCoverVariable.threshold > getFillLevelInputSlots((IFluidHandler) c); - } - return false; - } - - private void adjustThreshold(FluidLimiterData coverVariable, boolean way) { - if (way) { - if ((coverVariable.threshold + 0.05f) > 1F) { - coverVariable.threshold = 0F; - return; - } - coverVariable.threshold += 0.05F; - } else { - if ((Math.abs(coverVariable.threshold) - 0.05F) < 0F) { - coverVariable.threshold = 1F; - return; - } - coverVariable.threshold -= 0.05F; - } - } - - private float getFillLevelInputSlots(IFluidHandler fh) { - FluidTankInfo[] tankInfo = fh.getTankInfo(ForgeDirection.UNKNOWN); - long tMax; - long tUsed; - if (tankInfo != null) { - // 0 Because we acces first slot only - FluidTankInfo inputSlot = tankInfo[0]; - if (inputSlot.fluid != null) { - tMax = inputSlot.capacity; - tUsed = inputSlot.fluid.amount; - return (float) tUsed / (float) tMax; - } - } - return 0F; - } - - /* - * Data - */ - - @Override - public FluidLimiterData createDataObject(int aLegacyData) { - return createDataObject(); - } - - @Override - public FluidLimiterData createDataObject() { - return new FluidLimiterData(1F); - } - - public static class FluidLimiterData implements ISerializableObject { - - private float threshold; - - public FluidLimiterData(float threshold) { - this.threshold = threshold; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new FluidLimiterData(threshold); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setFloat("threshold", this.threshold); - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - aBuf.writeFloat(this.threshold); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - if (aNBT instanceof NBTTagCompound tag) { - this.threshold = tag.getFloat("threshold"); - } - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { - this.threshold = aBuf.readFloat(); - return this; - } - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new FluidLimiterUIFactory(buildContext).createWindow(); - } - - private class FluidLimiterUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public FluidLimiterUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - builder.widget( - new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_FluidLimiter.this) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) Math.round(coverData.threshold * 100), - (coverData, val) -> { - coverData.threshold = val.floatValue() / 100; - return coverData; - }, - widget -> widget.setBounds(0, 100) - .setFocusOnGuiOpen(true) - .setPos(startX, startY + spaceY * 2 - 24) - .setSize(spaceX * 4 - 3, 12))) - .widget( - new TextWidget("Percent threshold").setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX, startY + spaceY * 2 - 35)); - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java b/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java deleted file mode 100644 index 3805dfe2de..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_FluidRegulator.java +++ /dev/null @@ -1,520 +0,0 @@ -package gregtech.common.covers; - -import java.util.concurrent.atomic.AtomicBoolean; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import io.netty.buffer.ByteBuf; - -/** - * Cover variable - * - *

- * 1111 1111 1111 1111 1111 1111 1111 1111
- *  |- interval-| |- flow rate 2 compl. -|
- * ^ export?
- * 
- * - * Concat export and flow rate 2 compl. together to get actual flow rate. A positive actual flow rate is export, and - * vice versa. - *

- * Interval is an unsigned 11 bit integer minus 1, so the range is 1~2048. The stored bits will be flipped bitwise if - * speed is negative. This way, `0` means 1tick interval, while `-1` means 1 tick interval as well, preserving the - * legacy behavior. - */ -public class GT_Cover_FluidRegulator extends GT_CoverBehaviorBase { - - private static final int SPEED_LENGTH = 20; - private static final int TICK_RATE_LENGTH = Integer.SIZE - SPEED_LENGTH - 1; - private static final int TICK_RATE_MIN = 1; - private static final int TICK_RATE_MAX = (-1 >>> (Integer.SIZE - TICK_RATE_LENGTH)) + TICK_RATE_MIN; - private static final int TICK_RATE_BITMASK = (TICK_RATE_MAX - TICK_RATE_MIN) << SPEED_LENGTH; - - public final int mTransferRate; - private boolean allowFluid = false; - - public GT_Cover_FluidRegulator(int aTransferRate, ITexture coverTexture) { - super(FluidRegulatorData.class, coverTexture); - if (aTransferRate > (-1 >>> (Integer.SIZE - SPEED_LENGTH))) - throw new IllegalArgumentException("aTransferRate too big: " + aTransferRate); - this.mTransferRate = aTransferRate; - } - - @Override - public FluidRegulatorData createDataObject(int aLegacyData) { - return new FluidRegulatorData(aLegacyData); - } - - @Override - public FluidRegulatorData createDataObject() { - return new FluidRegulatorData(); - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return aCoverVariable.condition.isRedstoneSensitive(); - } - - @Override - protected FluidRegulatorData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - FluidRegulatorData aCoverVariable, ICoverable aTileEntity, long aTimer) { - if (aCoverVariable.speed == 0 || !aCoverVariable.condition.isAllowedToWork(side, aCoverID, aTileEntity)) { - return aCoverVariable; - } - if ((aTileEntity instanceof IFluidHandler)) { - final IFluidHandler tTank1; - final IFluidHandler tTank2; - final ForgeDirection directionFrom; - final ForgeDirection directionTo; - if (aCoverVariable.speed > 0) { - tTank2 = aTileEntity.getITankContainerAtSide(side); - tTank1 = (IFluidHandler) aTileEntity; - directionFrom = side; - directionTo = side.getOpposite(); - } else { - tTank1 = aTileEntity.getITankContainerAtSide(side); - tTank2 = (IFluidHandler) aTileEntity; - directionFrom = side.getOpposite(); - directionTo = side; - } - if (tTank1 != null && tTank2 != null) { - allowFluid = true; - GT_Utility - .moveFluid(tTank1, tTank2, directionFrom, Math.abs(aCoverVariable.speed), this::canTransferFluid); - allowFluid = false; - } - } - return aCoverVariable; - } - - private void adjustSpeed(EntityPlayer aPlayer, FluidRegulatorData aCoverVariable, int scale) { - int tSpeed = aCoverVariable.speed; - tSpeed += scale; - int tTickRate = aCoverVariable.tickRate; - if (Math.abs(tSpeed) > mTransferRate * tTickRate) { - tSpeed = mTransferRate * tTickRate * (tSpeed > 0 ? 1 : -1); - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("316", "Pump speed limit reached!")); - } - if (tTickRate == 1) { - GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("048", "Pump speed: ") + tSpeed - + GT_Utility.trans("049", "L/tick ") - + tSpeed * 20 - + GT_Utility.trans("050", "L/sec")); - } else { - GT_Utility.sendChatToPlayer( - aPlayer, - String.format( - GT_Utility.trans("207", "Pump speed: %dL every %d ticks, %.2f L/sec on average"), - tSpeed, - tTickRate, - tSpeed * 20d / tTickRate)); - } - } - - @Override - public FluidRegulatorData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, - FluidRegulatorData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (GT_Utility.getClickedFacingCoords(side, aX, aY, aZ)[0] >= 0.5F) { - adjustSpeed(aPlayer, aCoverVariable, aPlayer.isSneaking() ? 256 : 16); - } else { - adjustSpeed(aPlayer, aCoverVariable, aPlayer.isSneaking() ? -256 : -16); - } - return aCoverVariable; - } - - protected boolean canTransferFluid(FluidStack fluid) { - return true; - } - - @Override - public boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsInImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidInImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return allowFluid; - } - - @Override - public boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return allowFluid; - } - - @Override - protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, FluidRegulatorData aCoverVariable, - ICoverable aTileEntity) { - return aCoverVariable.tickRate; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new FluidRegulatorUIFactory(buildContext).createWindow(); - } - - private class FluidRegulatorUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - private static final NumberFormatMUI numberFormat; - static { - numberFormat = new NumberFormatMUI(); - numberFormat.setMaximumFractionDigits(2); - } - - public FluidRegulatorUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - AtomicBoolean warn = new AtomicBoolean(false); - - builder.widget( - new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_FluidRegulator.this) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.speed >= 0, - (coverData, state) -> { - coverData.speed = Math.abs(coverData.speed); - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT) - .addTooltip(GT_Utility.trans("006", "Export")) - .setPos(spaceX * 0, spaceY * 0)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.speed <= 0, - (coverData, state) -> { - coverData.speed = -Math.abs(coverData.speed); - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT) - .addTooltip(GT_Utility.trans("007", "Import")) - .setPos(spaceX * 1, spaceY * 0)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.condition == Conditional.Always, - (coverData, state) -> { - coverData.condition = Conditional.Always; - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK) - .addTooltip(GT_Utility.trans("224", "Always On")) - .setPos(spaceX * 0, spaceY * 1)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.condition == Conditional.Conditional, - (coverData, state) -> { - coverData.condition = Conditional.Conditional; - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_USE_PROCESSING_STATE) - .addTooltip(GT_Utility.trans("343", "Use Machine Processing State")) - .setPos(spaceX * 1, spaceY * 1)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.condition == Conditional.Inverted, - (coverData, state) -> { - coverData.condition = Conditional.Inverted; - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_USE_INVERTED_PROCESSING_STATE) - .addTooltip(GT_Utility.trans("343.1", "Use Inverted Machine Processing State")) - .setPos(spaceX * 2, spaceY * 1)) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) coverData.speed, - (coverData, state) -> { - coverData.speed = state.intValue(); - return coverData; - }, - widget -> widget.setBounds(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY) - .setValidator(val -> { - final int tickRate = getCoverData() != null ? getCoverData().tickRate : 0; - final long maxFlow = (long) mTransferRate - * GT_Utility.clamp(tickRate, TICK_RATE_MIN, TICK_RATE_MAX); - warn.set(false); - if (val > maxFlow) { - val = maxFlow; - warn.set(true); - } else if (val < -maxFlow) { - val = -maxFlow; - warn.set(true); - } - return val; - }) - .setScrollValues(1, 144, 1000) - .setFocusOnGuiOpen(true) - .setPos(spaceX * 0, spaceY * 2 + 2) - .setSize(spaceX * 4 - 3, 12)) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) coverData.tickRate, - (coverData, state) -> { - coverData.tickRate = state.intValue(); - return coverData; - }, - widget -> widget.setBounds(0, TICK_RATE_MAX) - .setValidator(val -> { - final int speed = getCoverData() != null ? getCoverData().speed : 0; - warn.set(false); - if (val > TICK_RATE_MAX) { - val = (long) TICK_RATE_MAX; - warn.set(true); - } else if (Math.abs(speed) > mTransferRate * val) { - val = (long) Math - .min(TICK_RATE_MAX, (Math.abs(speed) + mTransferRate - 1) / mTransferRate); - warn.set(true); - } else if (val < TICK_RATE_MIN) { - val = 1L; - } - return val; - }) - .setPos(spaceX * 5, spaceY * 2 + 2) - .setSize(spaceX * 2 - 3, 12)) - .setPos(startX, startY)) - .widget( - new TextWidget(GT_Utility.trans("229", "Export/Import")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 4, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(GT_Utility.trans("230", "Conditional")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 4, 4 + startY + spaceY * 1)) - .widget( - new TextWidget(GT_Utility.trans("208", " L")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 4, 4 + startY + spaceY * 2)) - .widget( - new TextWidget(GT_Utility.trans("209", " ticks")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 7, 4 + startY + spaceY * 2)) - .widget(new TextWidget().setTextSupplier(() -> { - FluidRegulatorData coverVariable = getCoverData(); - if (coverVariable == null) return new Text(""); - return new Text( - GT_Utility.trans("210.1", "Average:") + " " - + numberFormat.format( - coverVariable.tickRate == 0 ? 0 : coverVariable.speed * 20d / coverVariable.tickRate) - + " " - + GT_Utility.trans("210.2", "L/sec")) - .color(warn.get() ? COLOR_TEXT_WARN.get() : COLOR_TEXT_GRAY.get()); - }) - .setPos(startX + spaceX * 0, 4 + startY + spaceY * 3)); - } - } - - @Override - public boolean allowsTickRateAddition() { - return false; - } - - public enum Conditional { - - Always(false) { - - @Override - boolean isAllowedToWork(ForgeDirection side, int aCoverID, ICoverable aTileEntity) { - return true; - } - }, - Conditional(true) { - - @Override - boolean isAllowedToWork(ForgeDirection side, int aCoverID, ICoverable aTileEntity) { - return !(aTileEntity instanceof IMachineProgress) || ((IMachineProgress) aTileEntity).isAllowedToWork(); - } - }, - Inverted(true) { - - @Override - boolean isAllowedToWork(ForgeDirection side, int aCoverID, ICoverable aTileEntity) { - return !(aTileEntity instanceof IMachineProgress) - || !((IMachineProgress) aTileEntity).isAllowedToWork(); - } - }; - - static final Conditional[] VALUES = values(); - private final boolean redstoneSensitive; - - Conditional(boolean redstoneSensitive) { - this.redstoneSensitive = redstoneSensitive; - } - - abstract boolean isAllowedToWork(ForgeDirection side, int aCoverID, ICoverable aTileEntity); - - boolean isRedstoneSensitive() { - return redstoneSensitive; - } - } - - public static class FluidRegulatorData implements ISerializableObject { - - private int tickRate; - private int speed; - private Conditional condition; - - private static int getSpeed(int aCoverVariable) { - // positive or 0 -> interval bits need to be set to zero - // negative -> interval bits need to be set to one - return aCoverVariable >= 0 ? aCoverVariable & ~TICK_RATE_BITMASK : aCoverVariable | TICK_RATE_BITMASK; - } - - private static int getTickRate(int aCoverVariable) { - // range: TICK_RATE_MIN ~ TICK_RATE_MAX - return ((Math.abs(aCoverVariable) & TICK_RATE_BITMASK) >>> SPEED_LENGTH) + TICK_RATE_MIN; - } - - public FluidRegulatorData() { - this(0); - } - - public FluidRegulatorData(int legacy) { - this(getTickRate(legacy), getSpeed(legacy), Conditional.Always); - } - - public FluidRegulatorData(int tickRate, int speed, Conditional condition) { - this.tickRate = tickRate; - this.speed = speed; - this.condition = condition; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new FluidRegulatorData(tickRate, speed, condition); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setInteger("mSpeed", speed); - tag.setInteger("mTickRate", tickRate); - tag.setByte("mCondition", (byte) condition.ordinal()); - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - aBuf.writeInt(tickRate) - .writeInt(speed) - .writeByte(condition.ordinal()); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - if (!(aNBT instanceof NBTTagCompound tag)) return; // not very good... - speed = tag.getInteger("mSpeed"); - tickRate = tag.getInteger("mTickRate"); - condition = Conditional.VALUES[tag.getByte("mCondition")]; - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { - return new FluidRegulatorData(aBuf.readInt(), aBuf.readInt(), Conditional.VALUES[aBuf.readUnsignedByte()]); - } - - public int getTickRate() { - return tickRate; - } - - public void setTickRate(int tickRate) { - this.tickRate = tickRate; - } - - public int getSpeed() { - return speed; - } - - public void setSpeed(int speed) { - this.speed = speed; - } - - public Conditional getCondition() { - return condition; - } - - public void setCondition(Conditional condition) { - this.condition = condition; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FluidStorageMonitor.java b/src/main/java/gregtech/common/covers/GT_Cover_FluidStorageMonitor.java deleted file mode 100644 index 7f9fda7cbc..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_FluidStorageMonitor.java +++ /dev/null @@ -1,507 +0,0 @@ -package gregtech.common.covers; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR0; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR1; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR10; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR11; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR12; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR13; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR14; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR2; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR3; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR4; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR5; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR6; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR7; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR8; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR9; - -import java.util.Optional; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidContainerItem; -import net.minecraftforge.fluids.IFluidHandler; - -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.ITextureBuilder; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalTankBase; -import io.netty.buffer.ByteBuf; - -/** - * TODO: Implement overlay rendering only with - * {@link GT_CoverBehaviorBase#getSpecialCoverFGTextureImpl(ForgeDirection, int, ISerializableObject, ICoverable)} - */ -public class GT_Cover_FluidStorageMonitor extends GT_CoverBehaviorBase { - - private static final IIconContainer[] icons = new IIconContainer[] { OVERLAY_FLUID_STORAGE_MONITOR0, - OVERLAY_FLUID_STORAGE_MONITOR1, OVERLAY_FLUID_STORAGE_MONITOR2, OVERLAY_FLUID_STORAGE_MONITOR3, - OVERLAY_FLUID_STORAGE_MONITOR4, OVERLAY_FLUID_STORAGE_MONITOR5, OVERLAY_FLUID_STORAGE_MONITOR6, - OVERLAY_FLUID_STORAGE_MONITOR7, OVERLAY_FLUID_STORAGE_MONITOR8, OVERLAY_FLUID_STORAGE_MONITOR9, - OVERLAY_FLUID_STORAGE_MONITOR10, OVERLAY_FLUID_STORAGE_MONITOR11, OVERLAY_FLUID_STORAGE_MONITOR12, - OVERLAY_FLUID_STORAGE_MONITOR13, OVERLAY_FLUID_STORAGE_MONITOR14, }; - - public GT_Cover_FluidStorageMonitor() { - super(FluidStorageData.class); - } - - @Override - public FluidStorageData createDataObject(int aLegacyData) { - return new FluidStorageData(); - } - - @Override - public FluidStorageData createDataObject() { - return new FluidStorageData(); - } - - @Override - protected FluidStorageData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - FluidStorageData aCoverVariable, ICoverable aTileEntity, long aTimer) { - final FluidTankInfo[] tanks = getValidFluidTankInfosForDisplay(aTileEntity, aCoverVariable.side); - if (tanks == null) { - return aCoverVariable.disable() - .issueCoverUpdateIfNeeded(aTileEntity, side); - } - assert 0 < tanks.length; - - if (aCoverVariable.slot < 0 || tanks.length <= aCoverVariable.slot) { - aCoverVariable.setSlot(0); - } - - final FluidTankInfo tank = tanks[aCoverVariable.slot]; - if (tank == null) { - return aCoverVariable.setNullTank() - .issueCoverUpdateIfNeeded(aTileEntity, side); - } - - return aCoverVariable.setFluid(tank.fluid) - .setScale(getTankScale(tank)) - .issueCoverUpdateIfNeeded(aTileEntity, side); - } - - @Override - protected ITexture getSpecialCoverFGTextureImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, - ICoverable aTileEntity) { - return getSpecialCoverTextureImpl(side, aCoverID, aCoverVariable, aTileEntity); - } - - @Override - protected ITexture getSpecialCoverTextureImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, - ICoverable aTileEntity) { - if (aCoverVariable.slot == -1 || aCoverVariable.fluid == null || aCoverVariable.scale == 0) { - return TextureFactory.of(OVERLAY_FLUID_STORAGE_MONITOR0); - } - final IIconContainer fluidIcon = new IIconContainer() { - - @Override - public IIcon getIcon() { - return aCoverVariable.fluid.getStillIcon(); - } - - @Override - public IIcon getOverlayIcon() { - return null; - } - - @Override - public ResourceLocation getTextureFile() { - return TextureMap.locationBlocksTexture; - } - }; - - final short[] fluidRGBA = colorToRGBA(aCoverVariable.fluid.getColor()); - final ITextureBuilder fluidTextureBuilder = TextureFactory.builder() - .addIcon(fluidIcon) - .setRGBA(fluidRGBA); - if (aCoverVariable.fluid.getLuminosity() > 0) fluidTextureBuilder.glow(); - return TextureFactory.of(fluidTextureBuilder.build(), TextureFactory.of(icons[aCoverVariable.scale])); - } - - @Override - protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer == null || aPlayer.worldObj == null || aPlayer.worldObj.isRemote) { - return false; - } - final ItemStack heldItem = aPlayer.getHeldItem(); - if (aPlayer.isSneaking() || heldItem == null) { - return false; - } - final FluidTankInfo[] tanks = getValidFluidTankInfos(aTileEntity, aCoverVariable.side); - if (tanks == null) { - return false; - } - if (aCoverVariable.slot < 0 || tanks.length <= aCoverVariable.slot) { - return false; - } - final FluidTankInfo tank = tanks[aCoverVariable.slot]; - if (tank == null) { - return false; - } - IFluidHandler tankHandler = (IFluidHandler) aTileEntity; - - final ItemStack heldItemSizedOne = GT_Utility.copyAmount(1, heldItem); - if (heldItemSizedOne == null || heldItemSizedOne.stackSize <= 0) { - return false; - } - - ItemStack result; - result = fillToTank(heldItemSizedOne, tankHandler, aCoverVariable.side); - if (result != null) { - replaceHeldItemStack(aPlayer, heldItem, result); - return true; - } - result = fillToContainer(heldItemSizedOne, tank, tankHandler, aCoverVariable.side); - if (result != null) { - replaceHeldItemStack(aPlayer, heldItem, result); - return true; - } - return false; - } - - protected static ItemStack fillToTank(@Nonnull ItemStack container, @Nonnull IFluidHandler tank, - ForgeDirection side) { - final FluidStack fluidToFill = GT_Utility.getFluidForFilledItem(container, true); - if (fluidToFill == null || fluidToFill.getFluid() == null || fluidToFill.amount <= 0) { - return null; - } - if (!tank.canFill(side, fluidToFill.getFluid())) { - return null; - } - - if (container.getItem() instanceof IFluidContainerItem containerItem) { - final int filled = tank.fill(side, fluidToFill, true); - if (filled == 0) { - return null; - } - containerItem.drain(container, filled, true); - return container; - } else { - final int filled = tank.fill(side, fluidToFill, false); - if (filled != fluidToFill.amount) { - return null; - } - tank.fill(side, fluidToFill, true); - return GT_Utility.getContainerForFilledItem(container, false); - } - } - - protected static ItemStack fillToContainer(@Nonnull ItemStack container, @Nonnull FluidTankInfo tankInfo, - @Nonnull IFluidHandler tank, ForgeDirection side) { - if (tankInfo.fluid == null || tankInfo.fluid.getFluid() == null || tankInfo.fluid.amount <= 0) { - return null; - } - if (!tank.canDrain(side, tankInfo.fluid.getFluid())) { - return null; - } - - if (container.getItem() instanceof IFluidContainerItem containerItem) { - final int filled = Math.min( - Optional - .ofNullable( - tank.drain( - side, - new FluidStack(tankInfo.fluid.getFluid(), containerItem.getCapacity(container)), - false)) - .filter(fs -> GT_Utility.areFluidsEqual(fs, tankInfo.fluid)) - .map(fs -> fs.amount) - .orElse(0), - containerItem.fill( - container, - new FluidStack(tankInfo.fluid.getFluid(), containerItem.getCapacity(container)), - false)); - if (filled == 0) { - return null; - } - containerItem.fill(container, new FluidStack(tankInfo.fluid.getFluid(), filled), true); - tank.drain(side, new FluidStack(tankInfo.fluid.getFluid(), filled), true); - return container; - } else { - final ItemStack filledContainer = GT_Utility.fillFluidContainer(tankInfo.fluid, container, false, false); - if (filledContainer == null) { - return null; - } - final FluidStack filledFluid = GT_Utility.getFluidForFilledItem(filledContainer, false); - if (filledFluid == null || filledFluid.getFluid() == null || filledFluid.amount <= 0) { - return null; - } - if (Optional.ofNullable(tank.drain(side, filledFluid, false)) - .filter(fs -> GT_Utility.areFluidsEqual(fs, filledFluid)) - .map(fs -> fs.amount) - .orElse(0) != filledFluid.amount) { - return null; - } - tank.drain(side, filledFluid, true); - return filledContainer; - } - } - - protected static void replaceHeldItemStack(@Nonnull EntityPlayer player, @Nonnull ItemStack heldItem, - @Nonnull ItemStack result) { - heldItem.stackSize--; - GT_Utility.addItemToPlayerInventory(player, result); - player.inventoryContainer.detectAndSendChanges(); - } - - @Override - protected FluidStorageData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, - FluidStorageData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - aCoverVariable - .setSide(ForgeDirection.values()[(aCoverVariable.side.ordinal() + 1) % ForgeDirection.values().length]) - .setSlot(0); - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("SIDE", "Side: ") + aCoverVariable.side.name()); - return aCoverVariable; - } - final FluidTankInfo[] tanks = getValidFluidTankInfos(aTileEntity, aCoverVariable.side); - if (tanks == null) { - return aCoverVariable.disable(); - } - assert 0 < tanks.length; - if (aCoverVariable.slot < 0 || tanks.length <= aCoverVariable.slot) { - aCoverVariable.setSlot(0); - } else { - aCoverVariable - .setSlot((aCoverVariable.slot + tanks.length + (aPlayer.isSneaking() ? -1 : 1)) % tanks.length); - } - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("053", "Slot: ") + aCoverVariable.slot); - return aCoverVariable; - } - - @Override - protected boolean isDataNeededOnClientImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, FluidStorageData aCoverVariable, - ICoverable aTileEntity) { - return 10; - } - - @Nullable - protected static FluidTankInfo[] getValidFluidTankInfos(@Nullable ICoverable tileEntity, - @Nonnull ForgeDirection side) { - if (tileEntity instanceof IFluidHandler) { - final FluidTankInfo[] tanks = ((IFluidHandler) tileEntity).getTankInfo(side); - if (tanks != null && tanks.length > 0) { - return tanks; - } - } - return null; - } - - @Nullable - protected static FluidTankInfo[] getValidFluidTankInfosForDisplay(@Nullable ICoverable tileEntity, - @Nonnull ForgeDirection side) { - if (tileEntity instanceof IGregTechTileEntity baseMetaTileEntity - && baseMetaTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_DigitalTankBase digitalTank) { - return digitalTank.getRealTankInfo(side); - } - return getValidFluidTankInfos(tileEntity, side); - } - - protected static int getTankScale(@Nonnull FluidTankInfo tank) { - if (tank.fluid == null || tank.capacity <= 0) { - return 0; - } - return (int) Math.ceil(tank.fluid.amount / (double) tank.capacity * (icons.length - 1)); - } - - protected short[] colorToRGBA(int color) { - return new short[] { (short) (color >> 16 & 0xFF), (short) (color >> 8 & 0xFF), (short) (color & 0xFF), - (short) (0xFF) }; - } - - public static class FluidStorageData implements ISerializableObject { - - private ForgeDirection side; - private int slot; - private Fluid fluid; - private int scale; - private boolean dirty; - - public FluidStorageData() { - this(ForgeDirection.UNKNOWN, 0, null, 0, false); - } - - public FluidStorageData(ForgeDirection side, int slot, Fluid fluid, int scale, boolean dirty) { - this.side = side; - this.slot = slot; - this.fluid = fluid; - this.scale = scale; - this.dirty = dirty; - } - - public FluidStorageData setSide(ForgeDirection side) { - this.side = side; - return this; - } - - /** - * @param slot 0-based index of the tank, -1 for no correct FluidTankInfo[] for the current side. - */ - public FluidStorageData setSlot(int slot) { - if (this.slot != slot) { - if (this.slot == -1 || slot == -1) { - this.dirty = true; - } - this.slot = slot; - } - return this; - } - - /** - * Means there is no correct FluidTankInfo[] for the current side. - */ - public FluidStorageData disable() { - setSlot(-1); - return this; - } - - public FluidStorageData setFluid(@Nullable Fluid fluid) { - if (!Util.areFluidsEqual(this.fluid, fluid)) { - this.fluid = fluid; - this.dirty = true; - } - return this; - } - - public FluidStorageData setFluid(@Nullable FluidStack fluidStack) { - final Fluid fluid = fluidStack == null ? null : fluidStack.getFluid(); - return setFluid(fluid); - } - - public FluidStorageData setScale(int scale) { - if (this.scale != scale) { - this.scale = scale; - this.dirty = true; - } - return this; - } - - public FluidStorageData setNullTank() { - return this.setFluid((Fluid) null) - .setScale(0); - } - - public FluidStorageData issueCoverUpdateIfNeeded(ICoverable tileEntity, ForgeDirection side) { - if (this.dirty) { - tileEntity.issueCoverUpdate(side); - this.dirty = false; - } - return this; - } - - // region ISerializableObject - @Nonnull - @Override - public ISerializableObject copy() { - return new FluidStorageData(side, slot, fluid, scale, dirty); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - NBTTagCompound tag = (NBTTagCompound) aNBT; - side = ForgeDirection.getOrientation(tag.getByte("side")); - slot = tag.getInteger("slot"); - fluid = Util.getFluid(tag.getString("fluidName")); - scale = tag.getInteger("scale"); - dirty = tag.getBoolean("dirty"); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("side", (byte) side.ordinal()); - tag.setInteger("slot", slot); - tag.setString("fluidName", Util.getFluidName(fluid)); - tag.setInteger("scale", scale); - tag.setBoolean("dirty", dirty); - return tag; - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { - final ForgeDirection side = ForgeDirection.getOrientation(aBuf.readByte()); - final int slot = aBuf.readInt(); - final Fluid fluid = Util.getFluid(aBuf.readInt()); - final int scale = aBuf.readInt(); - final boolean dirty = aBuf.readBoolean(); - return new FluidStorageData(side, slot, fluid, scale, dirty); - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - aBuf.writeByte(side.ordinal()); - aBuf.writeInt(slot); - aBuf.writeInt(Util.getFluidID(fluid)); - aBuf.writeInt(scale); - aBuf.writeBoolean(dirty); - } - // endregion - - } - - protected static class Util { - - public static int getFluidID(@Nullable Fluid fluid) { - return fluid == null ? -1 : fluid.getID(); - } - - public static String getFluidName(@Nullable Fluid fluid) { - return fluid == null ? "" : fluid.getName(); - } - - public static Fluid getFluid(int id) { - return id == -1 ? null : FluidRegistry.getFluid(id); - } - - public static Fluid getFluid(String name) { - return name.isEmpty() ? null : FluidRegistry.getFluid(name); - } - - public static boolean areFluidsEqual(@Nullable Fluid a, @Nullable Fluid b) { - return getFluidID(a) == getFluidID(b); - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java b/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java deleted file mode 100644 index 44e264c8e8..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Fluidfilter.java +++ /dev/null @@ -1,417 +0,0 @@ -package gregtech.common.covers; - -import static gregtech.api.enums.GT_Values.E; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.Constants.NBT; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_SlotWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import io.netty.buffer.ByteBuf; - -public class GT_Cover_Fluidfilter extends GT_CoverBehaviorBase { - - // Uses the lower 3 bits of the cover variable, so we have 8 options to work with (0-7) - private final int FILTER_INPUT_DENY_OUTPUT = 0; // 000 - private final int INVERT_INPUT_DENY_OUTPUT = 1; // 001 - private final int FILTER_INPUT_ANY_OUTPUT = 2; // 010 - private final int INVERT_INPUT_ANY_OUTPUT = 3; // 011 - private final int DENY_INPUT_FILTER_OUTPUT = 4; // 100 - private final int DENY_INPUT_INVERT_OUTPUT = 5; // 101 - private final int ANY_INPUT_FILTER_OUTPUT = 6; // 110 - private final int ANY_INPUT_INVERT_OUTPUT = 7; // 111 - - public GT_Cover_Fluidfilter(ITexture coverTexture) { - super(FluidFilterData.class, coverTexture); - } - - @Override - public FluidFilterData createDataObject() { - return new FluidFilterData(-1, 0); - } - - @Override - public FluidFilterData createDataObject(int aLegacyData) { - return new FluidFilterData(aLegacyData >>> 3, aLegacyData & 0x7); - } - - @Override - protected String getDescriptionImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, - ICoverable aTileEntity) { - final Fluid fluid = FluidRegistry.getFluid(aCoverVariable.mFluidID); - if (fluid == null) return E; - - final FluidStack sFluid = new FluidStack(fluid, 1000); - return (String - .format("Filtering Fluid: %s - %s", sFluid.getLocalizedName(), getFilterMode(aCoverVariable.mFilterMode))); - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return false; - } - - @Override - protected FluidFilterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - FluidFilterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - return aCoverVariable; - } - - public String getFilterMode(int aFilterMode) { - return switch (aFilterMode) { - case FILTER_INPUT_DENY_OUTPUT -> GT_Utility.trans("043", "Filter input, Deny output"); - case INVERT_INPUT_DENY_OUTPUT -> GT_Utility.trans("044", "Invert input, Deny output"); - case FILTER_INPUT_ANY_OUTPUT -> GT_Utility.trans("045", "Filter input, Permit any output"); - case INVERT_INPUT_ANY_OUTPUT -> GT_Utility.trans("046", "Invert input, Permit any output"); - case DENY_INPUT_FILTER_OUTPUT -> GT_Utility.trans("307", "Deny input, Filter output"); - case DENY_INPUT_INVERT_OUTPUT -> GT_Utility.trans("308", "Deny input, Invert output"); - case ANY_INPUT_FILTER_OUTPUT -> GT_Utility.trans("309", "Permit any input, Filter output"); - case ANY_INPUT_INVERT_OUTPUT -> GT_Utility.trans("310", "Permit any input, Invert output"); - default -> ("UNKNOWN"); - }; - } - - @Override - protected FluidFilterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, - FluidFilterData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable.mFilterMode = (aCoverVariable.mFilterMode + (aPlayer.isSneaking() ? -1 : 1)) % 8; - if (aCoverVariable.mFilterMode < 0) { - aCoverVariable.mFilterMode = 7; - } - - GT_Utility.sendChatToPlayer(aPlayer, getFilterMode(aCoverVariable.mFilterMode)); - - return aCoverVariable; - } - - @Override - protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (side == ForgeDirection.UNKNOWN) return false; - if (((aX > 0.375D) && (aX < 0.625D)) || ((side.offsetX != 0) && ((aY > 0.375D) && (aY < 0.625D))) - || (side.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) != 0 && aZ > 0.375D && aZ < 0.625D - || (side.offsetZ != 0)) { - final ItemStack tStack = aPlayer.inventory.getCurrentItem(); - if (tStack == null) return true; - - final FluidStack tFluid = GT_Utility.getFluidForFilledItem(tStack, true); - if (tFluid != null) { - final int aFluid = tFluid.getFluidID(); - aCoverVariable.mFluidID = aFluid; - aTileEntity.setCoverDataAtSide(side, aCoverVariable); - final FluidStack sFluid = new FluidStack(FluidRegistry.getFluid(aFluid), 1000); - GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("047", "Filter Fluid: ") + sFluid.getLocalizedName()); - } - return true; - } - return false; - } - - @Override - protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsInImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - if (aFluid == null) return true; - - int aFilterMode = aCoverVariable.mFilterMode; - int aFilterFluid = aCoverVariable.mFluidID; - - if (aFilterMode == DENY_INPUT_FILTER_OUTPUT || aFilterMode == DENY_INPUT_INVERT_OUTPUT) return false; - else if (aFilterMode == ANY_INPUT_FILTER_OUTPUT || aFilterMode == ANY_INPUT_INVERT_OUTPUT) return true; - else if (aFluid.getID() == aFilterFluid) - return aFilterMode == FILTER_INPUT_DENY_OUTPUT || aFilterMode == FILTER_INPUT_ANY_OUTPUT; - else return aFilterMode == INVERT_INPUT_DENY_OUTPUT || aFilterMode == INVERT_INPUT_ANY_OUTPUT; - } - - @Override - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - if (aFluid == null) return true; - - int aFilterMode = aCoverVariable.mFilterMode; - int aFilterFluid = aCoverVariable.mFluidID; - - if (aFilterMode == FILTER_INPUT_DENY_OUTPUT || aFilterMode == INVERT_INPUT_DENY_OUTPUT) return false; - else if (aFilterMode == FILTER_INPUT_ANY_OUTPUT || aFilterMode == INVERT_INPUT_ANY_OUTPUT) return true; - else if (aFluid.getID() == aFilterFluid) - return aFilterMode == DENY_INPUT_FILTER_OUTPUT || aFilterMode == ANY_INPUT_FILTER_OUTPUT; - else return aFilterMode == DENY_INPUT_INVERT_OUTPUT || aFilterMode == ANY_INPUT_INVERT_OUTPUT; - } - - @Override - protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, FluidFilterData aCoverVariable, - ICoverable aTileEntity) { - return 0; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new FluidFilterUIFactory(buildContext).createWindow(); - } - - private class FluidFilterUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public FluidFilterUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - builder.widget( - new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( - this::getCoverData, - this::setCoverData, - GT_Cover_Fluidfilter.this, - (id, coverData) -> !getClickable(id, coverData), - (id, coverData) -> { - coverData.mFilterMode = getNewFilterMode(id, coverData); - return coverData; - }).addToggleButton( - 0, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT) - .addTooltip(GT_Utility.trans("232", "Filter Input")) - .setPos(spaceX * 0, spaceY * 0)) - .addToggleButton( - 1, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT) - .addTooltip(GT_Utility.trans("233", "Filter Output")) - .setPos(spaceX * 1, spaceY * 0)) - .addToggleButton( - 2, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_BLOCK_INPUT) - .addTooltip(GT_Utility.trans("234", "Block Output")) - .setPos(spaceX * 0, spaceY * 2)) - .addToggleButton( - 3, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_ALLOW_INPUT) - .addTooltip(GT_Utility.trans("235", "Allow Output")) - .setPos(spaceX * 1, spaceY * 2)) - .addToggleButton( - 4, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_WHITELIST) - .addTooltip(GT_Utility.trans("236", "Whitelist Fluid")) - .setPos(spaceX * 0, spaceY * 1)) - .addToggleButton( - 5, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_BLACKLIST) - .addTooltip(GT_Utility.trans("237", "Blacklist Fluid")) - .setPos(spaceX * 1, spaceY * 1)) - .addFollower( - new CoverDataFollower_SlotWidget(new ItemStackHandler(), 0, true) { - - @Override - protected void putClickedStack(ItemStack stack, int mouseButton) { - if (stack != null && GT_Utility.getFluidFromContainerOrFluidDisplay(stack) == null) - return; - super.putClickedStack( - GT_Utility.getFluidDisplayStack( - GT_Utility.getFluidFromContainerOrFluidDisplay(stack), - false), - mouseButton); - } - }, - this::getFluidDisplayItem, - (coverData, stack) -> { - if (stack == null) { - coverData.mFluidID = -1; - } else { - FluidStack fluid = GT_Utility.getFluidFromDisplayStack(stack); - if (fluid != null && fluid.getFluid() != null) { - coverData.mFluidID = fluid.getFluid() - .getID(); - } - } - return coverData; - }, - widget -> widget.setBackground(ModularUITextures.FLUID_SLOT) - .setPos(0, spaceY * 3 + 2)) - .setPos(startX, startY)) - .widget( - new TextWidget(GT_Utility.trans("238", "Filter Direction")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 2, 3 + startY + spaceY * 0)) - .widget( - new TextWidget(GT_Utility.trans("239", "Filter Type")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 2, 3 + startY + spaceY * 1)) - .widget( - new TextWidget(GT_Utility.trans("240", "Block Flow")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 2, 3 + startY + spaceY * 2)) - .widget(TextWidget.dynamicString(() -> { - if (getCoverData() != null) { - ItemStack fluidDisplay = getFluidDisplayItem(getCoverData()); - if (fluidDisplay != null) { - return fluidDisplay.getDisplayName(); - } - } - return GT_Utility.trans("315", "Filter Empty"); - }) - .setSynced(false) - .setDefaultColor(COLOR_TITLE.get()) - .setPos(startX + spaceX + 3, 4 + startY + spaceY * 3)); - } - - private int getNewFilterMode(int id, FluidFilterData coverVariable) { - return switch (id) { - case 0 -> (coverVariable.mFilterMode & 0x3); - case 1 -> (coverVariable.mFilterMode | 0x4); - case 2 -> (coverVariable.mFilterMode & 0x5); - case 3 -> (coverVariable.mFilterMode | 0x2); - case 4 -> (coverVariable.mFilterMode & 0x6); - case 5 -> (coverVariable.mFilterMode | 0x1); - default -> coverVariable.mFilterMode; - }; - } - - private boolean getClickable(int id, FluidFilterData coverVariable) { - return switch (id) { - case 0, 1 -> (coverVariable.mFilterMode >> 2 & 0x1) != (id & 0x1); - case 2, 3 -> (coverVariable.mFilterMode >> 1 & 0x1) != (id & 0x1); - case 4, 5 -> (coverVariable.mFilterMode & 0x1) != (id & 0x1); - default -> false; - }; - } - - private ItemStack getFluidDisplayItem(FluidFilterData coverData) { - Fluid fluid = FluidRegistry.getFluid(coverData.mFluidID); - return GT_Utility.getFluidDisplayStack(fluid); - } - } - - public static class FluidFilterData implements ISerializableObject { - - private int mFluidID; - private int mFilterMode; - - public FluidFilterData(int mFluidID, int mFilterMode) { - this.mFluidID = mFluidID; - this.mFilterMode = mFilterMode; - } - - @Override - @Nonnull - public ISerializableObject copy() { - return new FluidFilterData(mFluidID, mFilterMode); - } - - @Override - @Nonnull - public NBTBase saveDataToNBT() { - NBTTagCompound tNBT = new NBTTagCompound(); - tNBT.setInteger("mFilterMode", mFilterMode); - if (mFluidID >= 0) tNBT.setString( - "mFluid", - FluidRegistry.getFluid(mFluidID) - .getName()); - return tNBT; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - aBuf.writeByte(mFilterMode) - .writeInt(mFluidID); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - if (aNBT instanceof NBTTagCompound tNBT) { - mFilterMode = tNBT.getInteger("mFilterMode"); - if (tNBT.hasKey("mFluid", NBT.TAG_STRING)) - mFluidID = FluidRegistry.getFluidID(tNBT.getString("mFluid")); - else mFluidID = -1; - } - } - - @Override - @Nonnull - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - mFilterMode = aBuf.readByte(); - mFluidID = aBuf.readInt(); - return this; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java b/src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java deleted file mode 100644 index 2274722c9a..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_ItemFilter.java +++ /dev/null @@ -1,298 +0,0 @@ -package gregtech.common.covers; - -import static gregtech.api.util.GT_Utility.intToStack; -import static gregtech.api.util.GT_Utility.moveMultipleItemStacks; - -import java.util.Collections; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.common.network.ByteBufUtils; -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_SlotWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import io.netty.buffer.ByteBuf; - -public class GT_Cover_ItemFilter extends GT_CoverBehaviorBase { - - private final boolean mExport; - - public GT_Cover_ItemFilter(boolean isExport, ITexture coverTexture) { - super(ItemFilterData.class, coverTexture); - this.mExport = isExport; - } - - @Override - public ItemFilterData createDataObject(int aLegacyData) { - return new ItemFilterData((aLegacyData & 0x1) == 0, intToStack(aLegacyData >>> 1)); - } - - @Override - public ItemFilterData createDataObject() { - return new ItemFilterData(); - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return false; - } - - @Override - protected ItemFilterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - ItemFilterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - final TileEntity tTileEntity = aTileEntity.getTileEntityAtSide(side); - final Object fromEntity = mExport ? aTileEntity : tTileEntity; - final Object toEntity = !mExport ? aTileEntity : tTileEntity; - final ForgeDirection fromSide = !mExport ? side.getOpposite() : side; - final ForgeDirection toSide = mExport ? side.getOpposite() : side; - - final List filter = Collections.singletonList(aCoverVariable.mFilter); - - moveMultipleItemStacks( - fromEntity, - toEntity, - fromSide, - toSide, - filter, - aCoverVariable.mWhitelist, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1, - 64); - - return aCoverVariable; - } - - @Override - protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - final ItemStack tStack = aPlayer.inventory.getCurrentItem(); - if (tStack != null) { - aCoverVariable.mFilter = tStack; - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("299", "Item Filter: ") + tStack.getDisplayName()); - } else { - aCoverVariable.mFilter = null; - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("300", "Filter Cleared!")); - } - return true; - } - - @Override - protected ItemFilterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, - ItemFilterData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable.mWhitelist = !aCoverVariable.mWhitelist; - GT_Utility.sendChatToPlayer( - aPlayer, - aCoverVariable.mWhitelist ? GT_Utility.trans("125.1", "Whitelist Mode") - : GT_Utility.trans("124.1", "Blacklist Mode")); - return aCoverVariable; - } - - @Override - protected boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return false; - } - - @Override - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return false; - } - - @Override - protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean alwaysLookConnectedImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, ItemFilterData aCoverVariable, - ICoverable aTileEntity) { - return 1; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new ItemFilterUIFactory(buildContext).createWindow(); - } - - private class ItemFilterUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public ItemFilterUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - ItemStackHandler filterInvHandler = new ItemStackHandler(1); - if (getCoverData() != null) { - filterInvHandler.setStackInSlot(0, setStackSize1(getCoverData().mFilter)); - } - builder.widget( - new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_ItemFilter.this) - .addFollower( - new CoverDataFollower_ToggleButtonWidget<>(), - coverData -> coverData.mWhitelist, - (coverData, state) -> { - coverData.mWhitelist = state; - return coverData; - }, - widget -> widget - .setToggleTexture( - GT_UITextures.OVERLAY_BUTTON_BLACKLIST, - GT_UITextures.OVERLAY_BUTTON_WHITELIST) - .addTooltip(0, GT_Utility.trans("125.1", "Whitelist Mode")) - .addTooltip(1, GT_Utility.trans("124.1", "Blacklist Mode")) - .setPos(spaceX * 0, spaceY * 0)) - .addFollower( - new CoverDataFollower_SlotWidget<>(filterInvHandler, 0, true), - coverData -> setStackSize1(coverData.mFilter), - (coverData, stack) -> { - coverData.mFilter = setStackSize1(stack); - return coverData; - }, - widget -> widget.setBackground(GT_UITextures.SLOT_DARK_GRAY) - .setPos(spaceX * 0, spaceY * 2)) - .setPos(startX, startY)) - .widget( - new TextWidget(GT_Utility.trans("317", "Filter: ")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 0, 3 + startY + spaceY * 1)) - .widget( - new TextWidget(GT_Utility.trans("318", "Check Mode")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 2, 3 + startY + spaceY * 0)); - } - - private ItemStack setStackSize1(ItemStack stack) { - if (stack != null) { - stack.stackSize = 1; - } - return stack; - } - } - - public static class ItemFilterData implements ISerializableObject { - - private boolean mWhitelist; - private ItemStack mFilter; - - public ItemFilterData() {} - - public ItemFilterData(boolean mWhitelist, ItemStack mFilter) { - this.mWhitelist = mWhitelist; - this.mFilter = mFilter; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new ItemFilterData(mWhitelist, mFilter); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setBoolean("mWhitelist", mWhitelist); - if (mFilter != null) tag.setTag("mFilter", mFilter.writeToNBT(new NBTTagCompound())); - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - aBuf.writeBoolean(mWhitelist); - ByteBufUtils.writeItemStack(aBuf, mFilter); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - NBTTagCompound tag = (NBTTagCompound) aNBT; - mWhitelist = tag.getBoolean("mWhitelist"); - if (tag.hasKey("mFilter", Constants.NBT.TAG_COMPOUND)) - mFilter = ItemStack.loadItemStackFromNBT(tag.getCompoundTag("mFilter")); - else mFilter = null; - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - mWhitelist = aBuf.readBoolean(); - mFilter = ISerializableObject.readItemStackFromGreggyByteBuf(aBuf); - return this; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java deleted file mode 100644 index 46be8daddd..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_ItemMeter.java +++ /dev/null @@ -1,384 +0,0 @@ -package gregtech.common.covers; - -import java.text.FieldPosition; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import gregtech.common.gui.modularui.widget.ItemWatcherSlotWidget; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalChestBase; -import io.netty.buffer.ByteBuf; - -public class GT_Cover_ItemMeter extends GT_CoverBehaviorBase { - - // Legacy data format - private static final int SLOT_MASK = 0x3FFFFFFF; // 0 = all, 1 = 0 ... - private static final int CONVERTED_BIT = 0x80000000; - private static final int INVERT_BIT = 0x40000000; - - public GT_Cover_ItemMeter(ITexture coverTexture) { - super(ItemMeterData.class, coverTexture); - } - - @Override - public ItemMeterData createDataObject(int aLegacyData) { - // Convert from ver. 5.09.33.50 - if ((CONVERTED_BIT & aLegacyData) == 0) if (aLegacyData == 0) aLegacyData = CONVERTED_BIT; - else if (aLegacyData == 1) aLegacyData = CONVERTED_BIT | INVERT_BIT; - else if (aLegacyData > 1) aLegacyData = CONVERTED_BIT | Math.min((aLegacyData - 2), SLOT_MASK); - - boolean invert = (aLegacyData & INVERT_BIT) == INVERT_BIT; - int slot = (aLegacyData & SLOT_MASK) - 1; - - return new ItemMeterData(invert, slot, 0); - } - - @Override - public ItemMeterData createDataObject() { - return new ItemMeterData(); - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return false; - } - - public static byte computeSignalBasedOnItems(ICoverable tileEntity, boolean inverted, int threshold, int slot, - int ordinalSide) { - long max = 0; - long used = 0; - final IMetaTileEntity mte = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); - if (mte instanceof GT_MetaTileEntity_DigitalChestBase dc) { - max = dc.getMaxItemCount(); - used = dc.getProgresstime(); - } else if (mte instanceof GT_MetaTileEntity_Hatch_OutputBus_ME) { - if (((GT_MetaTileEntity_Hatch_OutputBus_ME) mte).canAcceptItem()) { - max = 64; - used = 0; - } - } else { - final int[] slots = slot >= 0 ? new int[] { slot } : tileEntity.getAccessibleSlotsFromSide(ordinalSide); - - for (int i : slots) { - if (i >= 0 && i < tileEntity.getSizeInventory()) { - max += 64; - final ItemStack stack = tileEntity.getStackInSlot(i); - if (stack != null) used += ((long) stack.stackSize << 6) / stack.getMaxStackSize(); - } - } - } - - return GT_Utility.convertRatioToRedstone(used, max, threshold, inverted); - } - - @Override - protected ItemMeterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - ItemMeterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - byte signal = computeSignalBasedOnItems( - aTileEntity, - aCoverVariable.inverted, - aCoverVariable.threshold, - aCoverVariable.slot, - side.ordinal()); - aTileEntity.setOutputRedstoneSignal(side, signal); - - return aCoverVariable; - } - - @Override - protected ItemMeterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, - ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - if (aCoverVariable.inverted) { - aCoverVariable.inverted = false; - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("055", "Normal")); - } else { - aCoverVariable.inverted = true; - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("054", "Inverted")); - } - } else { - aCoverVariable.slot++; - if (aCoverVariable.slot > aTileEntity.getSizeInventory()) aCoverVariable.slot = -1; - - if (aCoverVariable.slot == -1) GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("053", "Slot: ") + GT_Utility.trans("ALL", "All")); - else GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("053", "Slot: ") + aCoverVariable.slot); - } - - return aCoverVariable; - } - - @Override - protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, - ItemMeterData aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, ItemMeterData aCoverVariable, - ICoverable aTileEntity) { - return 5; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new ItemMeterUIFactory(buildContext).createWindow(); - } - - private class ItemMeterUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - /** - * Display the text "All" instead of a number when the slot is set to -1. - */ - protected static final NumberFormatMUI numberFormatAll = new NumberFormatMUI() { - - @Override - public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { - if (number < 0) { - return toAppendTo.append(GT_Utility.trans("ALL", "All")); - } else { - return super.format(number, toAppendTo, pos); - } - } - }; - - private int maxSlot; - private int maxThreshold; - - public ItemMeterUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); - final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); - - setMaxSlot(); - setMaxThreshold(); - - builder.widget( - new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_ItemMeter.this) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofRedstone(), - coverData -> coverData.inverted, - (coverData, state) -> { - coverData.inverted = state; - return coverData; - }, - widget -> widget.addTooltip(0, NORMAL) - .addTooltip(1, INVERTED) - .setPos(0, 0)) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) coverData.threshold, - (coverData, state) -> { - coverData.threshold = state.intValue(); - return coverData; - }, - widget -> widget.setBounds(0, maxThreshold) - .setScrollValues(1, 64, 1000) - .setFocusOnGuiOpen(true) - .setPos(0, 2 + spaceY) - .setSize(spaceX * 4 + 5, 12)) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) coverData.slot, - (coverData, state) -> { - coverData.slot = state.intValue(); - return coverData; - }, - widget -> widget.setBounds(-1, maxSlot) - .setDefaultValue(-1) - .setScrollValues(1, 100, 10) - .setNumberFormat(numberFormatAll) - .setPos(0, 2 + spaceY * 2) - .setSize(spaceX * 3 + 1, 12)) - .setPos(startX, startY)) - .widget( - new ItemWatcherSlotWidget().setGetter(this::getTargetItem) - .setPos(startX + spaceX * 3 + 8, startY + spaceY * 2)) - .widget( - new TextWidget() - .setStringSupplier( - () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX, 4 + startY)) - .widget( - new TextWidget(GT_Utility.trans("254", "Detect slot #")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 4 + 9, 4 + startY + spaceY * 2)) - .widget( - new TextWidget(GT_Utility.trans("221", "Item threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 4 + 9, 4 + startY + spaceY)); - } - - private void setMaxSlot() { - final ICoverable tile = getUIBuildContext().getTile(); - if (!tile.isDead() && tile instanceof IGregTechTileEntity gtTile - && !(gtTile.getMetaTileEntity() instanceof GT_MetaTileEntity_DigitalChestBase)) { - maxSlot = Math.min(tile.getSizeInventory() - 1, SLOT_MASK - 1); - } else { - maxSlot = -1; - } - } - - private void setMaxThreshold() { - final ICoverable tile = getUIBuildContext().getTile(); - if (!tile.isDead() && tile instanceof IGregTechTileEntity gtTile - && gtTile.getMetaTileEntity() instanceof GT_MetaTileEntity_DigitalChestBase) { - maxThreshold = gtTile.getMaxItemCount(); - } else { - maxThreshold = maxSlot > 0 ? maxSlot * 64 : Integer.MAX_VALUE; - } - } - - private ItemStack getTargetItem() { - ItemMeterData coverVariable = getCoverData(); - if (coverVariable == null || coverVariable.slot < 0) { - return null; - } - ICoverable tile = getUIBuildContext().getTile(); - if (tile instanceof TileEntity && !tile.isDead()) { - if (tile.getSizeInventory() >= coverVariable.slot) { - return tile.getStackInSlot(coverVariable.slot); - } - } - return null; - } - } - - public static class ItemMeterData implements ISerializableObject { - - private boolean inverted; - /** The special value {@code -1} means all slots. */ - private int slot; - /** The special value {@code 0} means threshold check is disabled. */ - private int threshold; - - public ItemMeterData() { - inverted = false; - slot = -1; - threshold = 0; - } - - public ItemMeterData(boolean inverted, int slot, int threshold) { - this.inverted = inverted; - this.slot = slot; - this.threshold = threshold; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new ItemMeterData(inverted, slot, threshold); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setBoolean("invert", inverted); - tag.setInteger("slot", slot); - tag.setInteger("threshold", threshold); - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - aBuf.writeBoolean(inverted); - aBuf.writeInt(slot); - aBuf.writeInt(threshold); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - NBTTagCompound tag = (NBTTagCompound) aNBT; - inverted = tag.getBoolean("invert"); - slot = tag.getInteger("slot"); - threshold = tag.getInteger("threshold"); - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - inverted = aBuf.readBoolean(); - slot = aBuf.readInt(); - threshold = aBuf.readInt(); - return this; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Lens.java b/src/main/java/gregtech/common/covers/GT_Cover_Lens.java deleted file mode 100644 index 94794e5892..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Lens.java +++ /dev/null @@ -1,28 +0,0 @@ -package gregtech.common.covers; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; - -public class GT_Cover_Lens extends GT_CoverBehavior { - - private final byte mColor; - - public GT_Cover_Lens(byte aColor, ITexture coverTexture) { - super(coverTexture); - this.mColor = aColor; - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public byte getLensColor(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return this.mColor; - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java b/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java deleted file mode 100644 index f7c8bb8cd3..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_LiquidMeter.java +++ /dev/null @@ -1,292 +0,0 @@ -package gregtech.common.covers; - -import java.util.Arrays; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalTankBase; -import io.netty.buffer.ByteBuf; - -/** - * TODO: Implement overlay rendering only with - * {@link GT_CoverBehaviorBase#getSpecialCoverFGTextureImpl(ForgeDirection, int, ISerializableObject, ICoverable)} - */ -public class GT_Cover_LiquidMeter extends GT_CoverBehaviorBase { - - public GT_Cover_LiquidMeter(ITexture coverTexture) { - super(LiquidMeterData.class, coverTexture); - } - - @Override - public LiquidMeterData createDataObject(int aLegacyData) { - return new LiquidMeterData(aLegacyData == 0, 0); - } - - @Override - public LiquidMeterData createDataObject() { - return new LiquidMeterData(); - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return false; - } - - public static byte computeSignalBasedOnFluid(ICoverable tileEntity, boolean inverted, int threshold) { - if (tileEntity instanceof IFluidHandler) { - FluidTankInfo[] tanks = ((IFluidHandler) tileEntity).getTankInfo(ForgeDirection.UNKNOWN); - long max = 0; - long used = 0; - if (tanks != null) { - for (FluidTankInfo tank : tanks) { - if (tank != null) { - if (tileEntity instanceof BaseMetaTileEntity && ((BaseMetaTileEntity) tileEntity) - .getMetaTileEntity() instanceof GT_MetaTileEntity_DigitalTankBase) { - max += ((GT_MetaTileEntity_DigitalTankBase) ((BaseMetaTileEntity) tileEntity) - .getMetaTileEntity()).getRealCapacity(); - } else max += tank.capacity; - FluidStack tLiquid = tank.fluid; - if (tLiquid != null) { - used += tLiquid.amount; - } - } - } - } - - return GT_Utility.convertRatioToRedstone(used, max, threshold, inverted); - } else { - return 0; - } - } - - @Override - protected LiquidMeterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - LiquidMeterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - byte signal = computeSignalBasedOnFluid(aTileEntity, aCoverVariable.inverted, aCoverVariable.threshold); - aTileEntity.setOutputRedstoneSignal(side, signal); - - return aCoverVariable; - } - - @Override - protected LiquidMeterData onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, - LiquidMeterData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aCoverVariable.inverted) { - aCoverVariable.inverted = false; - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("055", "Normal")); - } else { - aCoverVariable.inverted = true; - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("054", "Inverted")); - } - return aCoverVariable; - } - - @Override - protected boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidInImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsItemsInImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, - LiquidMeterData aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, LiquidMeterData aCoverVariable, - ICoverable aTileEntity) { - return 5; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new LiquidMeterUIFactory(buildContext).createWindow(); - } - - private class LiquidMeterUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - private int maxCapacity; - - public LiquidMeterUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); - final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); - - setMaxCapacity(); - - builder.widget( - new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GT_Cover_LiquidMeter.this) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofRedstone(), - coverData -> coverData.inverted, - (coverData, state) -> { - coverData.inverted = state; - return coverData; - }, - widget -> widget.addTooltip(0, NORMAL) - .addTooltip(1, INVERTED) - .setPos(spaceX * 0, spaceY * 0)) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) coverData.threshold, - (coverData, state) -> { - coverData.threshold = state.intValue(); - return coverData; - }, - widget -> widget.setBounds(0, maxCapacity > 0 ? maxCapacity : Integer.MAX_VALUE) - .setScrollValues(1000, 144, 100000) - .setFocusOnGuiOpen(true) - .setPos(spaceX * 0, spaceY * 1 + 2) - .setSize(spaceX * 4 + 5, 12)) - .setPos(startX, startY)) - .widget( - new TextWidget() - .setStringSupplier( - () -> getCoverData() != null ? getCoverData().inverted ? INVERTED : NORMAL : "") - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 1, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(GT_Utility.trans("222", "Fluid threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5 - 10, startY + spaceY * 1 + 4)); - } - - private void setMaxCapacity() { - final ICoverable tile = getUIBuildContext().getTile(); - if (!tile.isDead() && tile instanceof IFluidHandler) { - FluidTankInfo[] tanks = ((IFluidHandler) tile).getTankInfo(ForgeDirection.UNKNOWN); - maxCapacity = Arrays.stream(tanks) - .mapToInt(tank -> tank.capacity) - .sum(); - } else { - maxCapacity = -1; - } - } - } - - public static class LiquidMeterData implements ISerializableObject { - - private boolean inverted; - /** - * The special value {@code 0} means threshold check is disabled. - */ - private int threshold; - - public LiquidMeterData() { - inverted = false; - threshold = 0; - } - - public LiquidMeterData(boolean inverted, int threshold) { - this.inverted = inverted; - this.threshold = threshold; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new LiquidMeterData(inverted, threshold); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setBoolean("invert", inverted); - tag.setInteger("threshold", threshold); - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - aBuf.writeBoolean(inverted); - aBuf.writeInt(threshold); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - NBTTagCompound tag = (NBTTagCompound) aNBT; - inverted = tag.getBoolean("invert"); - threshold = tag.getInteger("threshold"); - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - inverted = aBuf.readBoolean(); - threshold = aBuf.readInt(); - return this; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Metrics_Transmitter.java b/src/main/java/gregtech/common/covers/GT_Cover_Metrics_Transmitter.java deleted file mode 100644 index 6d3cf529d3..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Metrics_Transmitter.java +++ /dev/null @@ -1,212 +0,0 @@ -package gregtech.common.covers; - -import java.util.List; -import java.util.UUID; - -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import com.google.common.collect.ImmutableList; -import com.google.common.io.ByteArrayDataInput; - -import gregtech.api.enums.ItemList; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetricsExporter; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.ISerializableObject; -import gregtech.common.events.MetricsCoverDataEvent; -import gregtech.common.events.MetricsCoverSelfDestructEvent; -import gregtech.common.misc.GlobalMetricsCoverDatabase; -import gregtech.common.misc.GlobalMetricsCoverDatabase.State; -import io.netty.buffer.ByteBuf; - -/** - * Used to transmit Nuclear Control information across dimensions. The only reason this is a cover is to artificially - * limit the number of total machines that transmit this data, for performance reasons. - *

- * This cover will retrieve information, preferentially, using {@link IMetricsExporter#reportMetrics()}. Absent this - * method, it will resort to {@link BaseMetaTileEntity#getInfoData()} instead. - */ -public class GT_Cover_Metrics_Transmitter - extends GT_CoverBehaviorBase { - - @SuppressWarnings("SpellCheckingInspection") - public static final String FREQUENCY_MSB_KEY = "gt.metricscover.freq_msb"; - @SuppressWarnings("SpellCheckingInspection") - public static final String FREQUENCY_LSB_KEY = "gt.metricscover.freq_lsb"; - public static final String MACHINE_KEY = "machine_name"; - public static final String CARD_STATE_KEY = "card_state"; - - @SuppressWarnings("unused") - public GT_Cover_Metrics_Transmitter() { - this(null); - } - - public GT_Cover_Metrics_Transmitter(ITexture coverTexture) { - super(MetricsTransmitterData.class, coverTexture); - } - - @Override - public MetricsTransmitterData createDataObject(int aLegacyData) { - // As a new cover, this shouldn't fire. - return new MetricsTransmitterData(); - } - - @Override - public MetricsTransmitterData createDataObject() { - return new MetricsTransmitterData(); - } - - @Override - protected int getTickRateImpl(ForgeDirection side, int aCoverID, MetricsTransmitterData aCoverVariable, - ICoverable aTileEntity) { - return 20; - } - - @Override - public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { - return aTileEntity instanceof final IGregTechDeviceInformation device && device.isGivingInformation(); - } - - @Override - protected MetricsTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - MetricsTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - if (aTileEntity instanceof final BaseMetaTileEntity baseMTE && baseMTE.isGivingInformation()) { - final List payload; - - if (baseMTE.getMetaTileEntity() instanceof final IMetricsExporter metricsExporter) { - payload = metricsExporter.reportMetrics(); - } else { - payload = ImmutableList.copyOf(baseMTE.getInfoData()); - } - - MinecraftForge.EVENT_BUS.post(new MetricsCoverDataEvent( - aCoverVariable.frequency, - payload, - new GlobalMetricsCoverDatabase.Coordinates( - baseMTE.getWorld().provider.getDimensionName(), - baseMTE.getXCoord(), - baseMTE.getYCoord(), - baseMTE.getZCoord() - ) - )); - } - - return aCoverVariable; - } - - @Override - protected void onDroppedImpl(ForgeDirection side, int aCoverID, MetricsTransmitterData aCoverVariable, - ICoverable aTileEntity) { - MinecraftForge.EVENT_BUS.post(new MetricsCoverSelfDestructEvent(aCoverVariable.frequency)); - } - - @Override - public void onPlayerAttach(EntityPlayer player, ItemStack aCover, ICoverable aTileEntity, ForgeDirection side) { - final UUID newFrequency = UUID.randomUUID(); - final ItemStack cardStack = ItemList.NC_AdvancedSensorCard.get(1); - - if (cardStack == null) { - return; - } - - final NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setLong(FREQUENCY_MSB_KEY, newFrequency.getMostSignificantBits()); - tagCompound.setLong(FREQUENCY_LSB_KEY, newFrequency.getLeastSignificantBits()); - tagCompound.setInteger(CARD_STATE_KEY, State.OPERATIONAL.getType()); - - if (aTileEntity instanceof final BaseMetaTileEntity baseMTE) { - final ItemStack baseMTEStack = baseMTE.getStackForm(1); - if (baseMTEStack != null) { - tagCompound.setTag(MACHINE_KEY, baseMTEStack.writeToNBT(new NBTTagCompound())); - } - } - - cardStack.setTagCompound(tagCompound); - aTileEntity.getCoverInfoAtSide(side) - .setCoverData(new MetricsTransmitterData(newFrequency)); - - final EntityItem cardEntity = new EntityItem(player.worldObj, player.posX, player.posY, player.posZ, cardStack); - cardEntity.delayBeforeCanPickup = 0; - player.worldObj.spawnEntityInWorld(cardEntity); - } - - @Override - public boolean allowsCopyPasteTool() { - return false; - } - - @Override - public List getAdditionalTooltipImpl(MetricsTransmitterData data) { - return ImmutableList.of( - StatCollector.translateToLocalFormatted( - "gt.item.adv_sensor_card.tooltip.frequency", - EnumChatFormatting.UNDERLINE.toString() + EnumChatFormatting.YELLOW + data.frequency.toString())); - } - - public static class MetricsTransmitterData implements ISerializableObject { - - private UUID frequency; - - public MetricsTransmitterData() { - this.frequency = UUID.randomUUID(); - } - - public MetricsTransmitterData(@NotNull UUID frequency) { - this.frequency = frequency; - } - - @NotNull - public UUID getFrequency() { - return frequency; - } - - @NotNull - @Override - public ISerializableObject copy() { - return new MetricsTransmitterData(frequency); - } - - @NotNull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setLong(FREQUENCY_MSB_KEY, frequency.getMostSignificantBits()); - tag.setLong(FREQUENCY_LSB_KEY, frequency.getLeastSignificantBits()); - return tag; - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - if (aNBT instanceof final NBTTagCompound tag) { - frequency = new UUID(tag.getLong(FREQUENCY_MSB_KEY), tag.getLong(FREQUENCY_LSB_KEY)); - } - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - aBuf.writeLong(frequency.getMostSignificantBits()); - aBuf.writeLong(frequency.getLeastSignificantBits()); - } - - @NotNull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, @Nullable EntityPlayerMP aPlayer) { - return new MetricsTransmitterData(new UUID(aBuf.readLong(), aBuf.readLong())); - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java b/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java deleted file mode 100644 index cf51f9bdea..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_NeedMaintainance.java +++ /dev/null @@ -1,298 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; - -public class GT_Cover_NeedMaintainance extends GT_CoverBehavior { - - public GT_Cover_NeedMaintainance(ITexture coverTexture) { - super(coverTexture); - } - - public static boolean isRotor(ItemStack rotor) { - return (rotor != null && rotor.getItem() instanceof GT_MetaGenerated_Tool - && rotor.getItemDamage() >= 170 - && rotor.getItemDamage() <= 176); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - boolean needsRepair = false; - if (aTileEntity instanceof IGregTechTileEntity tTileEntity) { - final IMetaTileEntity mTileEntity = tTileEntity.getMetaTileEntity(); - if (mTileEntity instanceof GT_MetaTileEntity_MultiBlockBase multi) { - final int ideal = multi.getIdealStatus(); - final int real = multi.getRepairStatus(); - final ItemStack tRotor = multi.getRealInventory()[1]; - final int coverVar = aCoverVariable >>> 1; - if (coverVar < 5) { - if (ideal - real > coverVar) needsRepair = true; - } else if (coverVar == 5 || coverVar == 6) { - if (isRotor(tRotor)) { - long tMax = GT_MetaGenerated_Tool.getToolMaxDamage(tRotor); - long tCur = GT_MetaGenerated_Tool.getToolDamage(tRotor); - if (coverVar == 5) { - needsRepair = (tCur >= tMax * 8 / 10); - } else { - long mExpectedDamage = Math.round( - Math.min( - multi.mEUt / multi.damageFactorLow, - Math.pow(multi.mEUt, multi.damageFactorHigh))); - needsRepair = tCur + mExpectedDamage * 2 >= tMax; - } - } else { - needsRepair = true; - } - } - } - } - if (aCoverVariable % 2 == 0) { - needsRepair = !needsRepair; - } - - aTileEntity.setOutputRedstoneSignal(side, (byte) (needsRepair ? 0 : 15)); - aTileEntity.setOutputRedstoneSignal(side.getOpposite(), (byte) (needsRepair ? 0 : 15)); - return aCoverVariable; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 14; - if (aCoverVariable < 0) { - aCoverVariable = 13; - } - switch (aCoverVariable) { - case 0 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("056", "Emit if 1 Maintenance Needed")); - case 1 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("057", "Emit if 1 Maintenance Needed(inverted)")); - case 2 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("058", "Emit if 2 Maintenance Needed")); - case 3 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("059", "Emit if 2 Maintenance Needed(inverted)")); - case 4 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("060", "Emit if 3 Maintenance Needed")); - case 5 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("061", "Emit if 3 Maintenance Needed(inverted)")); - case 6 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("062", "Emit if 4 Maintenance Needed")); - case 7 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("063", "Emit if 4 Maintenance Needed(inverted)")); - case 8 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("064", "Emit if 5 Maintenance Needed")); - case 9 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("065", "Emit if 5 Maintenance Needed(inverted)")); - case 10 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("066", "Emit if rotor needs maintenance low accuracy mod")); - case 11 -> GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("067", "Emit if rotor needs maintenance low accuracy mod(inverted)")); - case 12 -> GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("068", "Emit if rotor needs maintenance high accuracy mod")); - case 13 -> GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("069", "Emit if rotor needs maintenance high accuracy mod(inverted)")); - } - return aCoverVariable; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 60; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new NeedMaintainanceUIFactory(buildContext).createWindow(); - } - - private class NeedMaintainanceUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public NeedMaintainanceUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - final String[] tooltipText = { GT_Utility.trans("056", "Emit if 1 Maintenance Needed"), - GT_Utility.trans("058", "Emit if 2 Maintenance Needed"), - GT_Utility.trans("060", "Emit if 3 Maintenance Needed"), - GT_Utility.trans("062", "Emit if 4 Maintenance Needed"), - GT_Utility.trans("064", "Emit if 5 Maintenance Needed"), - GT_Utility.trans("066", "Emit if rotor needs maintenance low accuracy mod"), - GT_Utility.trans("068", "Emit if rotor needs maintenance high accuracy mod"), }; - - final String[] buttonText = { GT_Utility.trans("247", "1 Issue"), GT_Utility.trans("248", "2 Issues"), - GT_Utility.trans("249", "3 Issues"), GT_Utility.trans("250", "4 Issues"), - GT_Utility.trans("251", "5 Issues"), GT_Utility.trans("252", "Rotor < 20%"), - GT_Utility.trans("253", "Rotor ≈ 0%"), GT_Utility.trans("INVERTED", "Inverted"), - GT_Utility.trans("NORMAL", "Normal"), }; - - builder - .widget( - new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( - this::getCoverData, - this::setCoverData, - GT_Cover_NeedMaintainance.this, - (index, coverData) -> isEnabled(index, convert(coverData)), - (index, coverData) -> new ISerializableObject.LegacyCoverData( - getNewCoverVariable(index, convert(coverData)))) - .addToggleButton( - 0, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.addTooltip(tooltipText[0]) - .setPos(spaceX * 0, spaceY * 0)) - .addToggleButton( - 1, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.addTooltip(tooltipText[1]) - .setPos(spaceX * 0, spaceY * 1)) - .addToggleButton( - 2, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.addTooltip(tooltipText[2]) - .setPos(spaceX * 0, spaceY * 2)) - .addToggleButton( - 3, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.addTooltip(tooltipText[3]) - .setPos(spaceX * 0, spaceY * 3)) - .addToggleButton( - 4, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.addTooltip(tooltipText[4]) - .setPos(spaceX * 4 + 4, spaceY * 0)) - .addToggleButton( - 5, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.addTooltip(tooltipText[5]) - .setPos(spaceX * 4 + 4, spaceY * 1)) - .addToggleButton( - 6, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.addTooltip(tooltipText[6]) - .setPos(spaceX * 4 + 4, spaceY * 2)) - .addToggleButton( - 7, - CoverDataFollower_ToggleButtonWidget.ofRedstone(), - widget -> widget.setPos(spaceX * 4 + 4, spaceY * 3)) - .setPos(startX, startY)) - .widget( - new TextWidget(buttonText[0]).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 1, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(buttonText[1]).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 1, 4 + startY + spaceY * 1)) - .widget( - new TextWidget(buttonText[2]).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 1, 4 + startY + spaceY * 2)) - .widget( - new TextWidget(buttonText[3]).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 1, 4 + startY + spaceY * 3)) - .widget( - new TextWidget(buttonText[4]).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(buttonText[5]).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 1)) - .widget( - new TextWidget(buttonText[6]).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 2)) - .widget( - TextWidget - .dynamicString(() -> isEnabled(7, convert(getCoverData())) ? buttonText[7] : buttonText[8]) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5 + 4, 4 + startY + spaceY * 3)); - } - - private int getNewCoverVariable(int id, int coverVariable) { - final boolean checked = (coverVariable & 0x1) > 0; - if (id == 7) { - if (checked) return coverVariable & ~0x1; - else return coverVariable | 0x1; - } - return (coverVariable & 0x1) | (id << 1); - } - - private boolean isEnabled(int id, int coverVariable) { - if (id == 7) return (coverVariable & 0x1) > 0; - return (coverVariable >>> 1) == id; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java b/src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java deleted file mode 100644 index 600e167f2d..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_PlayerDetector.java +++ /dev/null @@ -1,202 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -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 gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; - -public class GT_Cover_PlayerDetector extends GT_CoverBehavior { - - private String placer = ""; - private int range = 8; - - public GT_Cover_PlayerDetector(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - boolean playerDetected = false; - - if (aTileEntity instanceof IGregTechTileEntity) { - if (aTileEntity.isUniversalEnergyStored(20)) { - aTileEntity.decreaseStoredEnergyUnits(20, true); - range = 32; - } else { - range = 8; - } - placer = ((IGregTechTileEntity) aTileEntity).getOwnerName(); - } - for (Object tObject : aTileEntity.getWorld().playerEntities) { - if ((tObject instanceof EntityPlayerMP tEntity)) { - int dist = Math.max( - 1, - (int) tEntity.getDistance( - aTileEntity.getXCoord() + 0.5D, - aTileEntity.getYCoord() + 0.5D, - aTileEntity.getZCoord() + 0.5D)); - if (dist < range) { - if (aCoverVariable == 0) { - playerDetected = true; - break; - } - if (tEntity.getDisplayName() - .equalsIgnoreCase(placer)) { - if (aCoverVariable == 1) { - playerDetected = true; - break; - } - } else if (aCoverVariable == 2) { - playerDetected = true; - break; - } - } - } - } - - aTileEntity.setOutputRedstoneSignal(side, (byte) (playerDetected ? 15 : 0)); - return aCoverVariable; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 3; - if (aCoverVariable < 0) { - aCoverVariable = 2; - } - switch (aCoverVariable) { - case 0 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("068.1", "Emit if any Player is close")); - case 1 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("069.1", "Emit if other Player is close")); - case 2 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("070", "Emit if you are close")); - } - return aCoverVariable; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 20; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new PlayerDetectorUIFactory(buildContext).createWindow(); - } - - private class PlayerDetectorUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public PlayerDetectorUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - builder - .widget( - new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( - this::getCoverData, - this::setCoverData, - GT_Cover_PlayerDetector.this, - (index, coverData) -> index == convert(coverData), - (index, coverData) -> new ISerializableObject.LegacyCoverData(index)) - .addToggleButton( - 0, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.addTooltip(GT_Utility.trans("068.1", "Emit if any Player is close")) - .setPos(spaceX * 0, spaceY * 0)) - .addToggleButton( - 1, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.addTooltip(GT_Utility.trans("069.1", "Emit if other Player is close")) - .setPos(spaceX * 0, spaceY * 1)) - .addToggleButton( - 2, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.addTooltip(GT_Utility.trans("070", "Emit if you are close")) - .setPos(spaceX * 0, spaceY * 2)) - .setPos(startX, startY)) - .widget( - new TextWidget(GT_Utility.trans("319", "Any player")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 1, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(GT_Utility.trans("320", "Other players")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 1, 4 + startY + spaceY * 1)) - .widget( - new TextWidget(GT_Utility.trans("321", "Only owner")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 1, 4 + startY + spaceY * 2)); - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java b/src/main/java/gregtech/common/covers/GT_Cover_Pump.java deleted file mode 100644 index c4671f586e..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Pump.java +++ /dev/null @@ -1,334 +0,0 @@ -package gregtech.common.covers; - -import java.util.Arrays; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; - -public class GT_Cover_Pump extends GT_CoverBehavior { - - public final int mTransferRate; - - public GT_Cover_Pump(int aTransferRate, ITexture coverTexture) { - super(coverTexture); - this.mTransferRate = aTransferRate; - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if ((aCoverVariable % 6 > 1) && ((aTileEntity instanceof IMachineProgress))) { - if (((IMachineProgress) aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) { - return aCoverVariable; - } - } - - if (aTileEntity instanceof IFluidHandler current) { - final IFluidHandler toAccess = aTileEntity.getITankContainerAtSide(side); - if (toAccess == null) return aCoverVariable; - - transferFluid(current, toAccess, side, aCoverVariable % 2 == 0); - } - return aCoverVariable; - } - - protected void transferFluid(IFluidHandler current, IFluidHandler toAccess, ForgeDirection side, boolean export) { - IFluidHandler source = export ? current : toAccess; - IFluidHandler dest = export ? toAccess : current; - ForgeDirection drainSide = export ? side : side.getOpposite(); - GT_Utility.moveFluid(source, dest, drainSide, mTransferRate, this::canTransferFluid); - } - - protected boolean canTransferFluid(FluidStack fluid) { - return true; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 12; - if (aCoverVariable < 0) { - aCoverVariable = 11; - } - switch (aCoverVariable) { - case 0 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("006", "Export")); - case 1 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("007", "Import")); - case 2 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("008", "Export (conditional)")); - case 3 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("009", "Import (conditional)")); - case 4 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("010", "Export (invert cond)")); - case 5 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("011", "Import (invert cond)")); - case 6 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("012", "Export allow Input")); - case 7 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("013", "Import allow Output")); - case 8 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("014", "Export allow Input (conditional)")); - case 9 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("015", "Import allow Output (conditional)")); - case 10 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("016", "Export allow Input (invert cond)")); - case 11 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("017", "Import allow Output (invert cond)")); - } - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - if ((aCoverVariable > 1) && ((aTileEntity instanceof IMachineProgress))) { - if (((IMachineProgress) aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) { - return false; - } - } - return (aCoverVariable >= 6) || (aCoverVariable % 2 != 0); - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - if ((aCoverVariable > 1) && ((aTileEntity instanceof IMachineProgress))) { - if (((IMachineProgress) aTileEntity).isAllowedToWork() != aCoverVariable % 6 < 4) { - return false; - } - } - return (aCoverVariable >= 6) || (aCoverVariable % 2 == 0); - } - - @Override - public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 1; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new PumpUIFactory(buildContext).createWindow(); - } - - private class PumpUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - private CoverDataFollower_ToggleButtonWidget mBlockWidget = null; - private CoverDataFollower_ToggleButtonWidget mAllowWidget = null; - - public PumpUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - builder.widget( - new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( - this::getCoverData, - this::setCoverData, - GT_Cover_Pump.this, - (id, coverData) -> !getClickable(id, convert(coverData)), - (id, coverData) -> new ISerializableObject.LegacyCoverData( - getNewCoverVariable(id, convert(coverData)))) - .addToggleButton( - 0, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EXPORT) - .addTooltip(GT_Utility.trans("006", "Export")) - .setPos(spaceX * 0, spaceY * 0)) - .addToggleButton( - 1, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_IMPORT) - .addTooltip(GT_Utility.trans("007", "Import")) - .setPos(spaceX * 1, spaceY * 0)) - .addToggleButton( - 2, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK) - .addTooltip(GT_Utility.trans("224", "Always On")) - .setPos(spaceX * 0, spaceY * 1)) - .addToggleButton( - 3, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_USE_PROCESSING_STATE) - .addTooltip(GT_Utility.trans("343", "Use Machine Processing State")) - .setPos(spaceX * 1, spaceY * 1)) - .addToggleButton( - 4, - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - widget -> widget - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_USE_INVERTED_PROCESSING_STATE) - .addTooltip(GT_Utility.trans("343.1", "Use Inverted Machine Processing State")) - .setPos(spaceX * 2, spaceY * 1)) - .addToggleButton(5, CoverDataFollower_ToggleButtonWidget.ofDisableable(), widget -> { - mAllowWidget = widget; - widget.setTextureGetter(i -> { - ISerializableObject.LegacyCoverData coverData = getCoverData(); - return coverData == null || coverData.get() % 2 == 0 - ? GT_UITextures.OVERLAY_BUTTON_ALLOW_INPUT - : GT_UITextures.OVERLAY_BUTTON_ALLOW_OUTPUT; - }) - .dynamicTooltip(() -> { - ISerializableObject.LegacyCoverData coverData = getCoverData(); - return Arrays.asList( - coverData == null || coverData.get() % 2 == 0 - ? GT_Utility.trans("314", "Allow Input") - : GT_Utility.trans("312", "Allow Output")); - }) - .setPos(spaceX * 0, spaceY * 2); - }) - .addToggleButton(6, CoverDataFollower_ToggleButtonWidget.ofDisableable(), widget -> { - mBlockWidget = widget; - widget.setTextureGetter(i -> { - ISerializableObject.LegacyCoverData coverData = getCoverData(); - return coverData == null || coverData.get() % 2 == 0 - ? GT_UITextures.OVERLAY_BUTTON_BLOCK_INPUT - : GT_UITextures.OVERLAY_BUTTON_BLOCK_OUTPUT; - }) - .dynamicTooltip(() -> { - ISerializableObject.LegacyCoverData coverData = getCoverData(); - return Arrays.asList( - coverData == null || coverData.get() % 2 == 0 - ? GT_Utility.trans("313", "Block Input") - : GT_Utility.trans("311", "Block Output")); - }) - .setPos(spaceX * 1, spaceY * 2); - }) - .setPos(startX, startY)) - .widget( - new TextWidget(GT_Utility.trans("229", "Export/Import")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(GT_Utility.trans("230", "Conditional")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 1)) - .widget(TextWidget.dynamicString(() -> { - ISerializableObject.LegacyCoverData coverData = getCoverData(); - return coverData == null || coverData.get() % 2 == 0 ? GT_Utility.trans("344", "Input Blocking") - : GT_Utility.trans("344.1", "Output Blocking"); - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 3, 4 + startY + spaceY * 2)); - } - - private int getNewCoverVariable(int id, int coverVariable) { - switch (id) { - case 0 -> { - if (mBlockWidget != null) { - mBlockWidget.notifyTooltipChange(); - } - if (mAllowWidget != null) { - mAllowWidget.notifyTooltipChange(); - } - return coverVariable & ~0x1; - } - case 1 -> { - if (mBlockWidget != null) { - mBlockWidget.notifyTooltipChange(); - } - if (mAllowWidget != null) { - mAllowWidget.notifyTooltipChange(); - } - return coverVariable | 0x1; - } - case 2 -> { - if (coverVariable > 5) return 0x6 | (coverVariable & ~0xE); - return (coverVariable & ~0xE); - } - case 3 -> { - if (coverVariable > 5) return 0x8 | (coverVariable & ~0xE); - return 0x2 | (coverVariable & ~0xE); - } - case 4 -> { - if (coverVariable > 5) return 0xA | (coverVariable & ~0xE); - return (0x4 | (coverVariable & ~0xE)); - } - case 5 -> { - if (coverVariable <= 5) return coverVariable + 6; - } - case 6 -> { - if (coverVariable > 5) return coverVariable - 6; - } - } - return coverVariable; - } - - private boolean getClickable(int id, int coverVariable) { - if (coverVariable < 0 | 11 < coverVariable) return false; - return switch (id) { - case 0, 1 -> (0x1 & coverVariable) != id; - case 2 -> (coverVariable % 6) >= 2; - case 3 -> (coverVariable % 6) < 2 | 4 <= (coverVariable % 6); - case 4 -> (coverVariable % 6) < 4; - case 5 -> coverVariable < 6; - case 6 -> coverVariable >= 6; - default -> false; - }; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneConductor.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneConductor.java deleted file mode 100644 index edaec13a81..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneConductor.java +++ /dev/null @@ -1,101 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; - -@SuppressWarnings("unused") // Legacy from GT4. TODO: Consider re-enable registration -public class GT_Cover_RedstoneConductor extends GT_CoverBehavior { - - GT_Cover_RedstoneConductor(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if (aCoverVariable == 0) { - aTileEntity.setOutputRedstoneSignal(side, aTileEntity.getStrongestRedstone()); - } else if (aCoverVariable < 7) { - aTileEntity.setOutputRedstoneSignal( - side, - aTileEntity.getInternalInputRedstoneSignal(ForgeDirection.getOrientation((aCoverVariable - 1)))); - } - return aCoverVariable; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 7; - if (aCoverVariable < 0) { - aCoverVariable = 6; - } - switch (aCoverVariable) { - case 0 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("071", "Conducts strongest Input")); - case 1 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("072", "Conducts from bottom Input")); - case 2 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("073", "Conducts from top Input")); - case 3 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("074", "Conducts from north Input")); - case 4 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("075", "Conducts from south Input")); - case 5 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("076", "Conducts from west Input")); - case 6 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("077", "Conducts from east Input")); - } - return aCoverVariable; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 1; - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverExternal.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverExternal.java deleted file mode 100644 index eabf90f4de..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverExternal.java +++ /dev/null @@ -1,41 +0,0 @@ -package gregtech.common.covers; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; - -public class GT_Cover_RedstoneReceiverExternal extends GT_Cover_RedstoneWirelessBase { - - public GT_Cover_RedstoneReceiverExternal(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - aTileEntity.setOutputRedstoneSignal( - side, - GregTech_API.sWirelessRedstone.get(aCoverVariable) == null ? 0 - : GregTech_API.sWirelessRedstone.get(aCoverVariable)); - return aCoverVariable; - } - - @Override - public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 1; - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverInternal.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverInternal.java deleted file mode 100644 index 3edd7f7e43..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneReceiverInternal.java +++ /dev/null @@ -1,46 +0,0 @@ -package gregtech.common.covers; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.util.ISerializableObject; - -public class GT_Cover_RedstoneReceiverInternal extends GT_Cover_RedstoneWirelessBase { - - public GT_Cover_RedstoneReceiverInternal(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if (aTileEntity instanceof IMachineProgress) { - if (getRedstoneInput(side, aInputRedstone, aCoverID, aCoverVariable, aTileEntity) > 0) - ((IMachineProgress) aTileEntity).enableWorking(); - else((IMachineProgress) aTileEntity).disableWorking(); - ((IMachineProgress) aTileEntity).setWorkDataValue(aInputRedstone); - } - return aCoverVariable; - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { - return true; - } - - @Override - public byte getRedstoneInput(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return GregTech_API.sWirelessRedstone.get(aCoverVariable) == null ? 0 - : GregTech_API.sWirelessRedstone.get(aCoverVariable); - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 1; - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneSignalizer.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneSignalizer.java deleted file mode 100644 index 4eead134c8..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneSignalizer.java +++ /dev/null @@ -1,99 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; - -@SuppressWarnings("unused") // TODO: Consider re-registering this -public class GT_Cover_RedstoneSignalizer extends GT_CoverBehavior { - - GT_Cover_RedstoneSignalizer(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + 1) % 48; - switch (aCoverVariable / 16) { - case 0 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("078", "Signal = ") + (aCoverVariable & 0xF)); - case 1 -> GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("079", "Conditional Signal = ") + (aCoverVariable & 0xF)); - case 2 -> GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("080", "Inverted Conditional Signal = ") + (aCoverVariable & 0xF)); - } - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public byte getRedstoneInput(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - if (aCoverVariable < 16) { - return (byte) (aCoverVariable & 0xF); - } - if ((aTileEntity instanceof IMachineProgress)) { - if (((IMachineProgress) aTileEntity).isAllowedToWork()) { - if (aCoverVariable / 16 == 1) { - return (byte) (aCoverVariable & 0xF); - } - } else if (aCoverVariable / 16 == 2) { - return (byte) (aCoverVariable & 0xF); - } - return 0; - } - return (byte) (aCoverVariable & 0xF); - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java deleted file mode 100644 index 1ee0a05837..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java +++ /dev/null @@ -1,53 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.covers.IControlsWorkCover; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.ISerializableObject; - -public class GT_Cover_RedstoneTransmitterExternal extends GT_Cover_RedstoneWirelessBase { - - public GT_Cover_RedstoneTransmitterExternal(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - // TODO remove next line after 2.3.0 - if (!IControlsWorkCover.makeSureOnlyOne(side, aTileEntity)) return aCoverVariable; - GregTech_API.sWirelessRedstone.put(aCoverVariable, aInputRedstone); - return aCoverVariable; - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, long aTimer) { - return true; - } - - @Override - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 1; - } - - @Override - public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { - if (!super.isCoverPlaceable(side, aStack, aTileEntity)) return false; - for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { - if (aTileEntity.getCoverBehaviorAtSideNew(tSide) instanceof IControlsWorkCover) { - return false; - } - } - return true; - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterInternal.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterInternal.java deleted file mode 100644 index a812a49990..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterInternal.java +++ /dev/null @@ -1,43 +0,0 @@ -package gregtech.common.covers; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; - -public class GT_Cover_RedstoneTransmitterInternal extends GT_Cover_RedstoneWirelessBase { - - public GT_Cover_RedstoneTransmitterInternal(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - GregTech_API.sWirelessRedstone.put(aCoverVariable, aTileEntity.getOutputRedstoneSignal(side)); - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 1; - } - - @Override - public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return true; - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java deleted file mode 100644 index 54d025898a..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneWirelessBase.java +++ /dev/null @@ -1,228 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; - -public abstract class GT_Cover_RedstoneWirelessBase extends GT_CoverBehavior { - - private static final int MAX_CHANNEL = 65535; - private static final int PRIVATE_MASK = 0xFFFE0000; - private static final int PUBLIC_MASK = 0x0000FFFF; - private static final int CHECKBOX_MASK = 0x00010000; - - public GT_Cover_RedstoneWirelessBase(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - boolean aForced) { - GregTech_API.sWirelessRedstone.put(aCoverVariable, (byte) 0); - return true; - } - - @Override - protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, - float aY, float aZ) { - if (((aX > 0.375D) && (aX < 0.625D)) || ((side.offsetX != 0) && ((aY > 0.375D) && (aY < 0.625D)))) { - GregTech_API.sWirelessRedstone.put(aCoverVariable.get(), (byte) 0); - aCoverVariable.set( - (aCoverVariable.get() & (PRIVATE_MASK | CHECKBOX_MASK)) - | (((Integer) GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem())).hashCode() & PUBLIC_MASK)); - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("081", "Frequency: ") + aCoverVariable); - return true; - } - return false; - } - - @Override - @SuppressWarnings("deprecation") - public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (((aX > 0.375D) && (aX < 0.625D)) || ((side.offsetX != 0) && ((aY > 0.375D) && (aY < 0.625D)))) { - GregTech_API.sWirelessRedstone.put(aCoverVariable, (byte) 0); - - int val = GT_Utility.stackToInt(aPlayer.inventory.getCurrentItem()) - * (1 + aPlayer.inventory.getCurrentItem() - .getItemDamage()); - - aCoverVariable = (aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | (val & PUBLIC_MASK); - - aTileEntity.setCoverDataAtSide(side, aCoverVariable); - GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("081", "Frequency: ") + (aCoverVariable & PUBLIC_MASK)); - return true; - } - return false; - } - - @Override - protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return false; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (((aX > 0.375D) && (aX < 0.625D)) - || ((side.offsetX == 0) || (((aY > 0.375D) && (aY < 0.625D)) || ((((aZ <= 0.375D) || (aZ >= 0.625D))))))) { - GregTech_API.sWirelessRedstone.put(aCoverVariable, (byte) 0); - final float[] tCoords = GT_Utility.getClickedFacingCoords(side, aX, aY, aZ); - - final short tAdjustVal = switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) - + 2 * (byte) (int) (tCoords[1] * 2.0F))) { - case 0 -> -32; - case 1 -> 32; - case 2 -> -1024; - case 3 -> 1024; - default -> 0; - }; - - final int tPublicChannel = (aCoverVariable & PUBLIC_MASK) + tAdjustVal; - - if (tPublicChannel < 0) { - aCoverVariable = aCoverVariable & ~PUBLIC_MASK; - } else if (tPublicChannel > MAX_CHANNEL) { - aCoverVariable = (aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | MAX_CHANNEL; - } else { - aCoverVariable = (aCoverVariable & (PRIVATE_MASK | CHECKBOX_MASK)) | tPublicChannel; - } - } - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("081", "Frequency: ") + (aCoverVariable & PUBLIC_MASK)); - return aCoverVariable; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public String getDescription(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return GT_Utility.trans("081", "Frequency: ") + aCoverVariable; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 1; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new RedstoneWirelessBaseUIFactory(buildContext).createWindow(); - } - - private class RedstoneWirelessBaseUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public RedstoneWirelessBaseUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected int getGUIWidth() { - return 250; - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - builder - .widget( - new CoverDataControllerWidget<>( - this::getCoverData, - this::setCoverData, - GT_Cover_RedstoneWirelessBase.this) - - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) getFlagFrequency(convert(coverData)), - (coverData, state) -> new ISerializableObject.LegacyCoverData( - state.intValue() | getFlagCheckbox(convert(coverData))), - widget -> widget.setBounds(0, MAX_CHANNEL) - .setScrollValues(1, 1000, 10) - .setFocusOnGuiOpen(true) - .setPos(spaceX * 0, spaceY * 0 + 2) - .setSize(spaceX * 4 - 3, 12)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofCheck(), - coverData -> getFlagCheckbox(convert(coverData)) > 0, - (coverData, state) -> new ISerializableObject.LegacyCoverData( - getFlagFrequency(convert(coverData)) | (state ? CHECKBOX_MASK : 0)), - widget -> widget.setPos(spaceX * 0, spaceY * 2)) - .setPos(startX, startY)) - .widget( - new TextWidget(GT_Utility.trans("246", "Frequency")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 4, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(GT_Utility.trans("602", "Use Private Frequency")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 1, startY + spaceY * 2 + 4)); - } - - private int getFlagFrequency(int coverVariable) { - return coverVariable & PUBLIC_MASK; - } - - private int getFlagCheckbox(int coverVariable) { - return coverVariable & CHECKBOX_MASK; - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Screen.java b/src/main/java/gregtech/common/covers/GT_Cover_Screen.java deleted file mode 100644 index fab2b81b0b..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Screen.java +++ /dev/null @@ -1,100 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; - -public class GT_Cover_Screen extends GT_CoverBehavior { - - public GT_Cover_Screen(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public float getBlastProofLevel(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 20.0F; - } - - @Override - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return false; - } - - @Override - public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return false; - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return false; - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return false; - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return false; - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return false; - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return false; - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return false; - } - - @Override - public boolean isGUIClickable(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean manipulatesSidedRedstoneOutput(ForgeDirection side, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - return false; - } - - @Override - public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - return false; - } - - @Override - public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - boolean aForced) { - return true; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return 0; - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Shutter.java b/src/main/java/gregtech/common/covers/GT_Cover_Shutter.java deleted file mode 100644 index 40fad1c537..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Shutter.java +++ /dev/null @@ -1,196 +0,0 @@ -package gregtech.common.covers; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; - -public class GT_Cover_Shutter extends GT_CoverBehavior { - - public GT_Cover_Shutter(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return aCoverVariable; - } - - @Override - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable = (aCoverVariable + (aPlayer.isSneaking() ? -1 : 1)) % 4; - if (aCoverVariable < 0) { - aCoverVariable = 3; - } - switch (aCoverVariable) { - case 0 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("082", "Open if work enabled")); - case 1 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("083", "Open if work disabled")); - case 2 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("084", "Only Output allowed")); - case 3 -> GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("085", "Only Input allowed")); - } - if (aTileEntity instanceof BaseMetaPipeEntity) { - ((BaseMetaPipeEntity) aTileEntity).reloadLocks(); - } - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return aCoverVariable >= 2 ? aCoverVariable == 3 - : !(aTileEntity instanceof IMachineProgress) - || (((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0)); - } - - @Override - public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return aCoverVariable >= 2 ? aCoverVariable == 2 - : !(aTileEntity instanceof IMachineProgress) - || (((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0)); - } - - @Override - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return aCoverVariable >= 2 ? aCoverVariable == 3 - : !(aTileEntity instanceof IMachineProgress) - || (((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0)); - } - - @Override - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return aCoverVariable >= 2 ? aCoverVariable == 2 - : !(aTileEntity instanceof IMachineProgress) - || ((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0); - } - - @Override - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return aCoverVariable >= 2 ? aCoverVariable == 3 - : !(aTileEntity instanceof IMachineProgress) - || ((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0); - } - - @Override - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return aCoverVariable >= 2 ? aCoverVariable == 2 - : !(aTileEntity instanceof IMachineProgress) - || ((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0); - } - - @Override - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return aCoverVariable >= 2 ? aCoverVariable == 3 - : !(aTileEntity instanceof IMachineProgress) - || ((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0); - } - - @Override - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return aCoverVariable >= 2 ? aCoverVariable == 2 - : !(aTileEntity instanceof IMachineProgress) - || ((IMachineProgress) aTileEntity).isAllowedToWork() == (aCoverVariable % 2 == 0); - } - - @Override - public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 0; - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new ShutterUIFactory(buildContext).createWindow(); - } - - private class ShutterUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public ShutterUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - builder - .widget( - new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( - this::getCoverData, - this::setCoverData, - GT_Cover_Shutter.this, - (index, coverData) -> index == convert(coverData), - (index, coverData) -> new ISerializableObject.LegacyCoverData(index)) - .addToggleButton( - 0, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.setPos(spaceX * 0, spaceY * 0)) - .addToggleButton( - 1, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.setPos(spaceX * 0, spaceY * 1)) - .addToggleButton( - 2, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.setPos(spaceX * 0, spaceY * 2)) - .addToggleButton( - 3, - CoverDataFollower_ToggleButtonWidget.ofCheck(), - widget -> widget.setPos(spaceX * 0, spaceY * 3)) - .setPos(startX, startY)) - .widget( - new TextWidget(GT_Utility.trans("082", "Open if work enabled")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 0)) - .widget( - new TextWidget(GT_Utility.trans("083", "Open if work disabled")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 1)) - .widget( - new TextWidget(GT_Utility.trans("084", "Only Output allowed")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 2)) - .widget( - new TextWidget(GT_Utility.trans("085", "Only Input allowed")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(3 + startX + spaceX * 1, 4 + startY + spaceY * 3)); - } - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_SolarPanel.java b/src/main/java/gregtech/common/covers/GT_Cover_SolarPanel.java deleted file mode 100644 index 4b88a90194..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_SolarPanel.java +++ /dev/null @@ -1,139 +0,0 @@ -package gregtech.common.covers; - -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; - -public class GT_Cover_SolarPanel extends GT_CoverBehavior { - - private final int mVoltage; - - public GT_Cover_SolarPanel(int aVoltage) { - this.mVoltage = aVoltage; - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if (side != ForgeDirection.UP) return 0; - int coverState = aCoverVariable & 0x3; - int coverNum = aCoverVariable >> 2; - if (aTimer % 100L == 0L) { - if (aTileEntity.getWorld() - .isThundering()) { - return aTileEntity.getBiome().rainfall > 0.0F && aTileEntity.getSkyAtSide(side) - ? Math.min(20, coverNum) << 2 - : coverNum << 2; - } else { - if (aTileEntity.getWorld() - .isRaining() && aTileEntity.getBiome().rainfall > 0.0F) { // really rains - if (aTileEntity.getSkyAtSide(side)) coverNum = Math.min(30, coverNum); - if (aTileEntity.getWorld().skylightSubtracted >= 4) { - if (aTileEntity.getWorld() - .isDaytime()) { - coverState = 2; - } else { - return coverNum << 2; - } - } - } else { // not rains - if (aTileEntity.getWorld() - .isDaytime()) { - coverState = 1; - } else { - coverState = 2; - } - } - } - } - if (coverState == 1) { - aTileEntity.injectEnergyUnits( - ForgeDirection.UNKNOWN, - ((100L - (long) coverNum) * ((long) this.mVoltage)) / 100L, - 1L); - } - if (aTimer % 28800L == 0L && coverNum < 100 && (coverNum > 10 || XSTR_INSTANCE.nextInt(3) == 2)) coverNum++; - return coverState + (coverNum << 2); - } - - @Override - protected boolean onCoverRightClickImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity, EntityPlayer aPlayer, float aX, - float aY, float aZ) { - if (aPlayer.capabilities.isCreativeMode) { - GT_Utility.sendChatToPlayer(aPlayer, "Cleaned solar panel from " + (aCoverVariable.get() >> 2) + "% dirt"); - aCoverVariable.set(aCoverVariable.get() & 0x3); - return true; - } - for (int i = 0; i < aPlayer.inventory.mainInventory.length; i++) { - ItemStack is = aPlayer.inventory.mainInventory[i]; - if (is == null) continue; - if (is.getUnlocalizedName() - .equals(new ItemStack(Items.water_bucket).getUnlocalizedName())) { - aPlayer.inventory.mainInventory[i] = new ItemStack(Items.bucket); - if (aPlayer.inventoryContainer != null) aPlayer.inventoryContainer.detectAndSendChanges(); - GT_Utility - .sendChatToPlayer(aPlayer, "Cleaned solar panel from " + (aCoverVariable.get() >> 2) + "% dirt"); - aCoverVariable.set(aCoverVariable.get() & 0x3); - return true; - } - } - GT_Utility.sendChatToPlayer(aPlayer, "You need water bucket in inventory to clean the panel."); - return false; - } - - @Override - @SuppressWarnings("deprecation") - public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer.capabilities.isCreativeMode) { - GT_Utility.sendChatToPlayer(aPlayer, "Cleaned solar panel from " + (aCoverVariable >> 2) + "% dirt"); - aTileEntity.setCoverDataAtSide(side, (aCoverVariable & 0x3)); - return true; - } - for (int i = 0; i < aPlayer.inventory.mainInventory.length; i++) { - ItemStack is = aPlayer.inventory.mainInventory[i]; - if (is == null) continue; - if (is.getUnlocalizedName() - .equals(new ItemStack(Items.water_bucket).getUnlocalizedName())) { - aPlayer.inventory.mainInventory[i] = new ItemStack(Items.bucket); - if (aPlayer.inventoryContainer != null) aPlayer.inventoryContainer.detectAndSendChanges(); - GT_Utility.sendChatToPlayer(aPlayer, "Cleaned solar panel from " + (aCoverVariable >> 2) + "% dirt"); - aTileEntity.setCoverDataAtSide(side, (aCoverVariable & 0x3)); - return true; - } - } - GT_Utility.sendChatToPlayer(aPlayer, "You need water bucket in inventory to clean the panel."); - return false; - } - - @Override - protected boolean isGUIClickableImpl(ForgeDirection side, int aCoverID, - ISerializableObject.LegacyCoverData aCoverVariable, ICoverable aTileEntity) { - return false; - } - - @Override - public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 1; - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_SteamRegulator.java b/src/main/java/gregtech/common/covers/GT_Cover_SteamRegulator.java deleted file mode 100644 index e67e8b05d1..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_SteamRegulator.java +++ /dev/null @@ -1,18 +0,0 @@ -package gregtech.common.covers; - -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.util.GT_ModHandler; - -public class GT_Cover_SteamRegulator extends GT_Cover_FluidRegulator { - - public GT_Cover_SteamRegulator(int aTransferRate, ITexture coverTexture) { - super(aTransferRate, coverTexture); - } - - @Override - protected boolean canTransferFluid(FluidStack fluid) { - return GT_ModHandler.isAnySteam(fluid) || GT_ModHandler.isSuperHeatedSteam(fluid); - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_SteamValve.java b/src/main/java/gregtech/common/covers/GT_Cover_SteamValve.java deleted file mode 100644 index 5787a99c0b..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_SteamValve.java +++ /dev/null @@ -1,26 +0,0 @@ -package gregtech.common.covers; - -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_ModHandler; - -public class GT_Cover_SteamValve extends GT_Cover_Pump { - - public GT_Cover_SteamValve(int aTransferRate, ITexture coverTexture) { - super(aTransferRate, coverTexture); - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - protected boolean canTransferFluid(FluidStack fluid) { - return GT_ModHandler.isAnySteam(fluid) || GT_ModHandler.isSuperHeatedSteam(fluid); - } -} diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Vent.java b/src/main/java/gregtech/common/covers/GT_Cover_Vent.java deleted file mode 100644 index e2be64b475..0000000000 --- a/src/main/java/gregtech/common/covers/GT_Cover_Vent.java +++ /dev/null @@ -1,111 +0,0 @@ -package gregtech.common.covers; - -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; - -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; - -public class GT_Cover_Vent extends GT_CoverBehavior { - - private final int mEfficiency; - private final Fluid IC2_HOT_COOLANT = FluidRegistry.getFluid("ic2hotcoolant"); - private final Fluid IC2_COOLANT = FluidRegistry.getFluid("ic2coolant"); - - public GT_Cover_Vent(int aEfficiency) { - this.mEfficiency = aEfficiency; - } - - @Override - public boolean isRedstoneSensitive(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - long aTimer) { - return false; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if (side == ForgeDirection.UNKNOWN) return 0; - int ret = 0; - if (aTileEntity instanceof IFluidHandler) { - ret = doCoolFluid(side, aTileEntity); - } - if ((aTileEntity instanceof IMachineProgress)) { - ret = doProgressEfficiency(side, (IMachineProgress) aTileEntity, aCoverID); - } - return ret; - } - - @Override - public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 100; - } - - protected int doProgressEfficiency(final ForgeDirection side, final IMachineProgress aTileEntity, - final int aCoverVariable) { - final int offsetX = aTileEntity.getOffsetX(side, 1); - final int offsetY = aTileEntity.getOffsetY(side, 1); - final int offsetZ = aTileEntity.getOffsetZ(side, 1); - final World world = aTileEntity.getWorld(); - if (aTileEntity.hasThingsToDo() && aCoverVariable != aTileEntity.getProgress() - && !GT_Utility.hasBlockHitBox(world, offsetX, offsetY, offsetZ)) { - aTileEntity.increaseProgress(this.mEfficiency); - } - return aTileEntity.getProgress(); - } - - protected int doCoolFluid(final ForgeDirection side, final ICoverable aTileEntity) { - final int offsetX = aTileEntity.getOffsetX(side, 1); - final int offsetY = aTileEntity.getOffsetY(side, 1); - final int offsetZ = aTileEntity.getOffsetZ(side, 1); - final World world = aTileEntity.getWorld(); - final IFluidHandler fluidHandler = (IFluidHandler) aTileEntity; - if (!fluidHandler.canDrain(ForgeDirection.UNKNOWN, IC2_HOT_COOLANT)) { - return 0; - } - final int chances; // 10000 = 100% - final Block blockAtSide = aTileEntity.getBlockAtSide(side); - if (blockAtSide == null) { - return 0; - } - if (blockAtSide == Blocks.water || blockAtSide == Blocks.flowing_water) { - chances = switch (mEfficiency) { - case 3 -> 10000; // 100% chances for Diamond reactor vent with water - case 2 -> 5000; // 50% chances for Gold and Overclocked reactor vents with water - default -> 2500; // 25% chances for Basic reactor vent with water - }; - } else if (blockAtSide.isAir(world, offsetX, offsetY, offsetZ)) { - switch (mEfficiency) { - case 3 -> chances = 2500; // 25% chances for Diamond reactor vent with air - case 2 -> chances = 1250; // 12.5% chances for Gold and Overclocked reactor vents with air - default -> { - return 0; // Basic reactor vent cannot be used with air - } - } - } else { - return 0; // Vent cover need water or air - } - if (chances > XSTR_INSTANCE.nextInt(10000)) { - final FluidStack hotFluidStack = fluidHandler.drain(ForgeDirection.UNKNOWN, Integer.MAX_VALUE, true); - final FluidStack coldFluidStack = new FluidStack(IC2_COOLANT, hotFluidStack.amount); - fluidHandler.fill(ForgeDirection.UNKNOWN, coldFluidStack, true); - return hotFluidStack.amount; - } - return 0; - } -} diff --git a/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverBase.java b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverBase.java new file mode 100644 index 0000000000..68564e33e5 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverBase.java @@ -0,0 +1,202 @@ +package gregtech.common.covers.redstone; + +import java.util.Arrays; +import java.util.UUID; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import io.netty.buffer.ByteBuf; + +public abstract class CoverAdvancedRedstoneReceiverBase + extends CoverAdvancedWirelessRedstoneBase { + + public CoverAdvancedRedstoneReceiverBase(ITexture coverTexture) { + super(ReceiverData.class, coverTexture); + } + + @Override + public ReceiverData createDataObject() { + return new ReceiverData(); + } + + @Override + public ReceiverData createDataObject(int aLegacyData) { + return createDataObject(); + } + + // GUI stuff + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new AdvancedRedstoneReceiverBaseUIFactory(buildContext).createWindow(); + } + + private class AdvancedRedstoneReceiverBaseUIFactory extends AdvancedWirelessRedstoneBaseUIFactory { + + public AdvancedRedstoneReceiverBaseUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected int getFrequencyRow() { + return 0; + } + + @Override + protected int getButtonRow() { + return 1; + } + + @Override + protected boolean isShiftPrivateLeft() { + return false; + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + super.addUIWidgets(builder); + builder.widget( + new TextWidget(GTUtility.trans("335", "Gate Mode")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2)); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIForDataController(CoverDataControllerWidget controller) { + super.addUIForDataController(controller); + controller.addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == GateMode.AND, + (coverData, state) -> { + coverData.mode = GateMode.AND; + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_GATE_AND) + .addTooltip(GTUtility.trans("331", "AND Gate")) + .setPos(spaceX * 0, spaceY * 2)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == GateMode.NAND, + (coverData, state) -> { + coverData.mode = GateMode.NAND; + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_GATE_NAND) + .addTooltip(GTUtility.trans("332", "NAND Gate")) + .setPos(spaceX * 1, spaceY * 2)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == GateMode.OR, + (coverData, state) -> { + coverData.mode = GateMode.OR; + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_GATE_OR) + .addTooltip(GTUtility.trans("333", "OR Gate")) + .setPos(spaceX * 2, spaceY * 2)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == GateMode.NOR, + (coverData, state) -> { + coverData.mode = GateMode.NOR; + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_GATE_NOR) + .addTooltip(GTUtility.trans("334", "NOR Gate")) + .setPos(spaceX * 3, spaceY * 2)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == GateMode.SINGLE_SOURCE, + (coverData, state) -> { + coverData.mode = GateMode.SINGLE_SOURCE; + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_ANALOG) + .addTooltips( + Arrays.asList( + "ANALOG Mode", + "Only use this mode with ONE transmitter in total,", + "no logic involved")) + .setPos(spaceX * 4, spaceY * 2)); + } + } + + public enum GateMode { + AND, + NAND, + OR, + NOR, + SINGLE_SOURCE + } + + public static class ReceiverData extends CoverAdvancedWirelessRedstoneBase.WirelessData { + + private GateMode mode; + + public ReceiverData(int frequency, UUID uuid, GateMode mode) { + super(frequency, uuid); + this.mode = mode; + } + + public ReceiverData() { + this(0, null, GateMode.AND); + } + + public GateMode getGateMode() { + return mode; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new ReceiverData(frequency, uuid, mode); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); + tag.setByte("mode", (byte) mode.ordinal()); + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + super.writeToByteBuf(aBuf); + aBuf.writeByte(mode.ordinal()); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + super.loadDataFromNBT(aNBT); + + NBTTagCompound tag = (NBTTagCompound) aNBT; + mode = GateMode.values()[tag.getByte("mode")]; + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + super.readFromPacket(aBuf, aPlayer); + mode = GateMode.values()[aBuf.readByte()]; + + return this; + } + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverExternal.java b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverExternal.java new file mode 100644 index 0000000000..5473ab3fec --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverExternal.java @@ -0,0 +1,35 @@ +package gregtech.common.covers.redstone; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; + +public class CoverAdvancedRedstoneReceiverExternal extends CoverAdvancedRedstoneReceiverBase { + + public CoverAdvancedRedstoneReceiverExternal(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public ReceiverData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + ReceiverData aCoverVariable, ICoverable aTileEntity, long aTimer) { + aTileEntity.setOutputRedstoneSignal( + side, + getSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), aCoverVariable.getGateMode())); + + return aCoverVariable; + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, ReceiverData aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return false; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, ReceiverData aCoverVariable, + ICoverable aTileEntity) { + return true; + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverInternal.java b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverInternal.java new file mode 100644 index 0000000000..f22a81bdba --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneReceiverInternal.java @@ -0,0 +1,42 @@ +package gregtech.common.covers.redstone; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; + +public class CoverAdvancedRedstoneReceiverInternal extends CoverAdvancedRedstoneReceiverBase { + + public CoverAdvancedRedstoneReceiverInternal(ITexture coverTexture) { + super(coverTexture); + } + + @Override + public ReceiverData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + ReceiverData aCoverVariable, ICoverable aTileEntity, long aTimer) { + if (aTileEntity instanceof IMachineProgress machine) { + if (getRedstoneInput(side, aInputRedstone, aCoverID, aCoverVariable, aTileEntity) > 0) { + machine.enableWorking(); + } else { + machine.disableWorking(); + } + + machine.setWorkDataValue(aInputRedstone); + } + + return aCoverVariable; + } + + @Override + protected byte getRedstoneInputImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + ReceiverData aCoverVariable, ICoverable aTileEntity) { + return getSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), aCoverVariable.getGateMode()); + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, ReceiverData aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return true; + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterBase.java b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterBase.java new file mode 100644 index 0000000000..cfa5461305 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterBase.java @@ -0,0 +1,188 @@ +package gregtech.common.covers.redstone; + +import java.util.Objects; +import java.util.UUID; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import io.netty.buffer.ByteBuf; + +public abstract class CoverAdvancedRedstoneTransmitterBase + extends CoverAdvancedWirelessRedstoneBase { + + public CoverAdvancedRedstoneTransmitterBase(Class typeToken, ITexture coverTexture) { + super(typeToken, coverTexture); + } + + private static void unregisterSignal(ForgeDirection side, TransmitterData aCoverVariable, ICoverable aTileEntity) { + final long hash = hashCoverCoords(aTileEntity, side); + removeSignalAt(aCoverVariable.uuid, aCoverVariable.frequency, hash); + } + + @Override + public boolean onCoverRemovalImpl(ForgeDirection side, int aCoverID, TransmitterData aCoverVariable, + ICoverable aTileEntity, boolean aForced) { + unregisterSignal(side, aCoverVariable, aTileEntity); + return true; + } + + @Override + protected void onBaseTEDestroyedImpl(ForgeDirection side, int aCoverID, TransmitterData aCoverVariable, + ICoverable aTileEntity) { + unregisterSignal(side, aCoverVariable, aTileEntity); + } + + @Override + protected T onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + aCoverVariable.invert = !aCoverVariable.invert; + GTUtility.sendChatToPlayer( + aPlayer, + aCoverVariable.invert ? GTUtility.trans("054", "Inverted") : GTUtility.trans("055", "Normal")); + + return aCoverVariable; + } + + @Override + protected void preDataChangedImpl(ForgeDirection side, int aCoverID, int aNewCoverId, T aCoverVariable, + T aNewCoverVariable, ICoverable aTileEntity) { + if (aCoverVariable.frequency != aNewCoverVariable.frequency + || !Objects.equals(aCoverVariable.uuid, aNewCoverVariable.uuid)) { + unregisterSignal(side, aCoverVariable, aTileEntity); + } + } + + public static class TransmitterData extends CoverAdvancedWirelessRedstoneBase.WirelessData { + + protected boolean invert; + + public TransmitterData(int frequency, UUID uuid, boolean invert) { + super(frequency, uuid); + this.invert = invert; + } + + public TransmitterData() { + this(0, null, false); + } + + public boolean isInvert() { + return invert; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new TransmitterData(frequency, uuid, invert); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); + tag.setBoolean("invert", invert); + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + super.writeToByteBuf(aBuf); + aBuf.writeBoolean(invert); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + super.loadDataFromNBT(aNBT); + + NBTTagCompound tag = (NBTTagCompound) aNBT; + invert = tag.getBoolean("invert"); + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + super.readFromPacket(aBuf, aPlayer); + invert = aBuf.readBoolean(); + + return this; + } + } + + // GUI stuff + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new AdvancedRedstoneTransmitterBaseUIFactory(buildContext).createWindow(); + } + + protected class AdvancedRedstoneTransmitterBaseUIFactory extends AdvancedWirelessRedstoneBaseUIFactory { + + public AdvancedRedstoneTransmitterBaseUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected int getFrequencyRow() { + return 0; + } + + @Override + protected int getButtonRow() { + return 1; + } + + @Override + protected boolean isShiftPrivateLeft() { + return true; + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + super.addUIWidgets(builder); + builder.widget(TextWidget.dynamicString(() -> { + T coverData = getCoverData(); + if (coverData != null) { + return getCoverData().invert ? GTUtility.trans("INVERTED", "Inverted") + : GTUtility.trans("NORMAL", "Normal"); + } else { + return ""; + } + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 10, 4 + startY + spaceY * getButtonRow())); + } + + @Override + protected void addUIForDataController(CoverDataControllerWidget controller) { + super.addUIForDataController(controller); + controller.addFollower( + CoverDataFollowerToggleButtonWidget.ofRedstone(), + coverData -> coverData.invert, + (coverData, state) -> { + coverData.invert = state; + return coverData; + }, + widget -> widget.addTooltip(0, GTUtility.trans("NORMAL", "Normal")) + .addTooltip(1, GTUtility.trans("INVERTED", "Inverted")) + .setPos(spaceX * 9, spaceY * getButtonRow())); + } + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterExternal.java b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterExternal.java new file mode 100644 index 0000000000..71003974c5 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterExternal.java @@ -0,0 +1,51 @@ +package gregtech.common.covers.redstone; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; + +public class CoverAdvancedRedstoneTransmitterExternal + extends CoverAdvancedRedstoneTransmitterBase { + + public CoverAdvancedRedstoneTransmitterExternal(ITexture coverTexture) { + super(TransmitterData.class, coverTexture); + } + + @Override + public TransmitterData createDataObject() { + return new TransmitterData(); + } + + @Override + public TransmitterData createDataObject(int aLegacyData) { + return createDataObject(); + } + + @Override + public TransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + TransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + byte outputRedstone = aInputRedstone; + if (aCoverVariable.isInvert()) { + if (outputRedstone > 0) outputRedstone = 0; + else outputRedstone = 15; + } + + final long hash = hashCoverCoords(aTileEntity, side); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, outputRedstone); + + return aCoverVariable; + } + + @Override + protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, TransmitterData aCoverVariable, + ICoverable aTileEntity, long aTimer) { + return true; + } + + @Override + public boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, TransmitterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterInternal.java b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterInternal.java new file mode 100644 index 0000000000..ab368e0c5b --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedRedstoneTransmitterInternal.java @@ -0,0 +1,50 @@ +package gregtech.common.covers.redstone; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; + +public class CoverAdvancedRedstoneTransmitterInternal + extends CoverAdvancedRedstoneTransmitterBase { + + public CoverAdvancedRedstoneTransmitterInternal(ITexture coverTexture) { + super(TransmitterData.class, coverTexture); + } + + @Override + public TransmitterData createDataObject() { + return new TransmitterData(); + } + + @Override + public TransmitterData createDataObject(int aLegacyData) { + return createDataObject(); + } + + @Override + public TransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + TransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + byte outputRedstone = aTileEntity.getOutputRedstoneSignal(side); + if (aCoverVariable.isInvert()) { + if (outputRedstone > 0) outputRedstone = 0; + else outputRedstone = 15; + } + + final long hash = hashCoverCoords(aTileEntity, side); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, outputRedstone); + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, TransmitterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, + TransmitterData aCoverVariable, ICoverable aTileEntity) { + return true; + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/CoverAdvancedWirelessRedstoneBase.java b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedWirelessRedstoneBase.java new file mode 100644 index 0000000000..963678a24c --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverAdvancedWirelessRedstoneBase.java @@ -0,0 +1,298 @@ +package gregtech.common.covers.redstone; + +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import io.netty.buffer.ByteBuf; + +public abstract class CoverAdvancedWirelessRedstoneBase + extends CoverBehaviorBase { + + public CoverAdvancedWirelessRedstoneBase(Class typeToken, ITexture coverTexture) { + super(typeToken, coverTexture); + } + + public static Byte getSignalAt(UUID uuid, int frequency, CoverAdvancedRedstoneReceiverBase.GateMode mode) { + Map> frequencies = GregTechAPI.sAdvancedWirelessRedstone.get(String.valueOf(uuid)); + if (frequencies == null) return 0; + + Map signals = frequencies.get(frequency); + if (signals == null) signals = new ConcurrentHashMap<>(); + + switch (mode) { + case AND -> { + return (byte) (signals.values() + .stream() + .map(signal -> signal > 0) + .reduce(true, (signalA, signalB) -> signalA && signalB) ? 15 : 0); + } + case NAND -> { + return (byte) (signals.values() + .stream() + .map(signal -> signal > 0) + .reduce(true, (signalA, signalB) -> signalA && signalB) ? 0 : 15); + } + case OR -> { + return (byte) (signals.values() + .stream() + .map(signal -> signal > 0) + .reduce(false, (signalA, signalB) -> signalA || signalB) ? 15 : 0); + } + case NOR -> { + return (byte) (signals.values() + .stream() + .map(signal -> signal > 0) + .reduce(false, (signalA, signalB) -> signalA || signalB) ? 0 : 15); + } + case SINGLE_SOURCE -> { + if (signals.values() + .isEmpty()) { + return 0; + } + return signals.values() + .iterator() + .next(); + } + default -> { + return 0; + } + } + } + + public static void removeSignalAt(UUID uuid, int frequency, long hash) { + Map> frequencies = GregTechAPI.sAdvancedWirelessRedstone.get(String.valueOf(uuid)); + if (frequencies == null) return; + frequencies.computeIfPresent(frequency, (freq, longByteMap) -> { + longByteMap.remove(hash); + return longByteMap.isEmpty() ? null : longByteMap; + }); + } + + public static void setSignalAt(UUID uuid, int frequency, long hash, byte value) { + Map> frequencies = GregTechAPI.sAdvancedWirelessRedstone + .computeIfAbsent(String.valueOf(uuid), k -> new ConcurrentHashMap<>()); + Map signals = frequencies.computeIfAbsent(frequency, k -> new ConcurrentHashMap<>()); + signals.put(hash, value); + } + + /** + * x hashed into first 20 bytes y hashed into second 20 bytes z hashed into fifth 10 bytes dim hashed into sixth 10 + * bytes side hashed into last 4 bytes + */ + public static long hashCoverCoords(ICoverable tile, ForgeDirection side) { + return (((((long) tile.getXCoord() << 20) + tile.getZCoord() << 10) + tile.getYCoord() << 10) + + tile.getWorld().provider.dimensionId << 4) + side.ordinal(); + } + + @Override + public boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public String getDescriptionImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return GTUtility.trans("081", "Frequency: ") + aCoverVariable.frequency + + ", Transmission: " + + (aCoverVariable.uuid == null ? "Public" : "Private"); + } + + @Override + public int getTickRateImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { + return 5; + } + + public abstract static class WirelessData implements ISerializableObject { + + protected int frequency; + + /** + * If UUID is set to null, the cover frequency is public, rather than private + **/ + protected UUID uuid; + + public WirelessData(int frequency, UUID uuid) { + this.frequency = frequency; + this.uuid = uuid; + } + + public UUID getUuid() { + return uuid; + } + + public int getFrequency() { + return frequency; + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setInteger("frequency", frequency); + if (uuid != null) { + tag.setString("uuid", uuid.toString()); + } + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + aBuf.writeInt(frequency); + aBuf.writeBoolean(uuid != null); + if (uuid != null) { + aBuf.writeLong(uuid.getLeastSignificantBits()); + aBuf.writeLong(uuid.getMostSignificantBits()); + } + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + NBTTagCompound tag = (NBTTagCompound) aNBT; + frequency = tag.getInteger("frequency"); + if (tag.hasKey("uuid")) { + uuid = UUID.fromString(tag.getString("uuid")); + } + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + frequency = aBuf.readInt(); + if (aBuf.readBoolean()) { + uuid = new UUID(aBuf.readLong(), aBuf.readLong()); + } + + return this; + } + } + + // GUI stuff + + @Override + public boolean hasCoverGUI() { + return true; + } + + protected abstract class AdvancedWirelessRedstoneBaseUIFactory extends UIFactory { + + protected static final int startX = 10; + protected static final int startY = 25; + protected static final int spaceX = 18; + protected static final int spaceY = 18; + + public AdvancedWirelessRedstoneBaseUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected int getGUIWidth() { + return 250; + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + final int privateExtraColumn = isShiftPrivateLeft() ? 1 : 5; + + CoverDataControllerWidget dataController = new CoverDataControllerWidget<>( + this::getCoverData, + this::setCoverData, + CoverAdvancedWirelessRedstoneBase.this); + dataController.setPos(startX, startY); + addUIForDataController(dataController); + + builder.widget(dataController) + .widget( + new TextWidget(GTUtility.trans("246", "Frequency")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5, 4 + startY + spaceY * getFrequencyRow())) + .widget( + new TextWidget(GTUtility.trans("602", "Use Private Frequency")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * privateExtraColumn, 4 + startY + spaceY * getButtonRow())); + } + + protected void addUIForDataController(CoverDataControllerWidget controller) { + controller.addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) coverData.frequency, + (coverData, state) -> { + coverData.frequency = state.intValue(); + return coverData; + }, + widget -> widget.setScrollValues(1, 1000, 10) + .setBounds(0, Integer.MAX_VALUE) + .setPos(1, 2 + spaceY * getFrequencyRow()) + .setSize(spaceX * 5 - 4, 12)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofCheck(), + coverData -> coverData.uuid != null, + (coverData, state) -> { + if (state) { + coverData.uuid = getUIBuildContext().getPlayer() + .getUniqueID(); + } else { + coverData.uuid = null; + } + return coverData; + }, + widget -> widget.setPos(0, spaceY * getButtonRow())); + } + + protected abstract int getFrequencyRow(); + + protected abstract int getButtonRow(); + + protected abstract boolean isShiftPrivateLeft(); + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/CoverWirelessDoesWorkDetector.java b/src/main/java/gregtech/common/covers/redstone/CoverWirelessDoesWorkDetector.java new file mode 100644 index 0000000000..ed55280b7f --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverWirelessDoesWorkDetector.java @@ -0,0 +1,244 @@ +package gregtech.common.covers.redstone; + +import java.util.UUID; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IMachineProgress; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import io.netty.buffer.ByteBuf; + +public class CoverWirelessDoesWorkDetector + extends CoverAdvancedRedstoneTransmitterBase { + + public CoverWirelessDoesWorkDetector(ITexture coverTexture) { + super(ActivityTransmitterData.class, coverTexture); + } + + @Override + public ActivityTransmitterData createDataObject() { + return new ActivityTransmitterData(); + } + + @Override + public ActivityTransmitterData createDataObject(int aLegacyData) { + return createDataObject(); + } + + private static byte computeSignalBasedOnActivity(ActivityTransmitterData coverVariable, ICoverable tileEntity) { + + if (tileEntity instanceof IMachineProgress) { + IMachineProgress mProgress = (IMachineProgress) tileEntity; + boolean inverted = coverVariable.invert; + int signal = 0; + + switch (coverVariable.mode) { + case MACHINE_ENABLED -> signal = inverted == mProgress.isAllowedToWork() ? 0 : 15; + case MACHINE_IDLE -> signal = inverted == (mProgress.getMaxProgress() == 0) ? 0 : 15; + case RECIPE_PROGRESS -> { + int tScale = mProgress.getMaxProgress() / 15; + + if (tScale > 0 && mProgress.hasThingsToDo()) { + signal = inverted ? (15 - mProgress.getProgress() / tScale) + : (mProgress.getProgress() / tScale); + } else { + signal = inverted ? 15 : 0; + } + } + } + + return (byte) signal; + } else { + return (byte) 0; + } + + } + + @Override + public ActivityTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + ActivityTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + final byte signal = computeSignalBasedOnActivity(aCoverVariable, aTileEntity); + final long hash = hashCoverCoords(aTileEntity, side); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); + + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, ActivityTransmitterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, + ActivityTransmitterData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRateImpl(ForgeDirection side, int aCoverID, ActivityTransmitterData aCoverVariable, + ICoverable aTileEntity) { + return 5; + } + + public enum ActivityMode { + RECIPE_PROGRESS, + MACHINE_IDLE, + MACHINE_ENABLED, + } + + public static class ActivityTransmitterData extends CoverAdvancedRedstoneTransmitterBase.TransmitterData { + + private ActivityMode mode; + + public ActivityTransmitterData(int frequency, UUID uuid, boolean invert, ActivityMode mode) { + super(frequency, uuid, invert); + this.mode = mode; + } + + public ActivityTransmitterData() { + super(); + this.mode = ActivityMode.MACHINE_IDLE; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new ActivityTransmitterData(frequency, uuid, invert, mode); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); + tag.setInteger("mode", mode.ordinal()); + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + super.writeToByteBuf(aBuf); + aBuf.writeInt(mode.ordinal()); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + super.loadDataFromNBT(aNBT); + + NBTTagCompound tag = (NBTTagCompound) aNBT; + mode = ActivityMode.values()[tag.getInteger("mode")]; + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + super.readFromPacket(aBuf, aPlayer); + mode = ActivityMode.values()[aBuf.readInt()]; + + return this; + } + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new WirelessActivityDetectorUIFactory(buildContext).createWindow(); + } + + private class WirelessActivityDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { + + public WirelessActivityDetectorUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected int getGUIHeight() { + return 107; + } + + @Override + protected int getFrequencyRow() { + return 0; + } + + @Override + protected int getButtonRow() { + return 1; + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + super.addUIWidgets(builder); + builder.widget(TextWidget.dynamicString(() -> { + + ActivityMode mode = getCoverData().mode; + + if (mode == ActivityMode.MACHINE_ENABLED) { + return GTUtility.trans("271", "Machine enabled"); + } else if (mode == ActivityMode.MACHINE_IDLE) { + return GTUtility.trans("242", "Machine idle"); + } else { + return GTUtility.trans("241", "Recipe progress"); + } + + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 3, 4 + startY + spaceY * 2)); + } + + @Override + protected void addUIForDataController(CoverDataControllerWidget controller) { + super.addUIForDataController(controller); + + controller.addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == ActivityMode.RECIPE_PROGRESS, + (coverData, state) -> { + coverData.mode = ActivityMode.RECIPE_PROGRESS; + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_PROGRESS) + .addTooltip(GTUtility.trans("241", "Recipe progress")) + .setPos(spaceX * 0, spaceY * 2)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == ActivityMode.MACHINE_IDLE, + (coverData, state) -> { + coverData.mode = ActivityMode.MACHINE_IDLE; + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_CHECKMARK) + .addTooltip(GTUtility.trans("242", "Machine idle")) + .setPos(spaceX * 1, spaceY * 2)) + .addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == ActivityMode.MACHINE_ENABLED, + (coverData, state) -> { + coverData.mode = ActivityMode.MACHINE_ENABLED; + return coverData; + }, + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON) + .addTooltip(GTUtility.trans("271", "Machine enabled")) + .setPos(spaceX * 2, spaceY * 2)); + } + } + +} diff --git a/src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java b/src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java new file mode 100644 index 0000000000..cfea9b7b28 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverWirelessFluidDetector.java @@ -0,0 +1,186 @@ +package gregtech.common.covers.redstone; + +import java.util.Arrays; +import java.util.UUID; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.covers.CoverLiquidMeter; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; +import io.netty.buffer.ByteBuf; + +public class CoverWirelessFluidDetector + extends CoverAdvancedRedstoneTransmitterBase { + + public CoverWirelessFluidDetector(ITexture coverTexture) { + super(FluidTransmitterData.class, coverTexture); + } + + @Override + public FluidTransmitterData createDataObject() { + return new FluidTransmitterData(); + } + + @Override + public FluidTransmitterData createDataObject(int aLegacyData) { + return createDataObject(); + } + + @Override + public FluidTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + FluidTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + final byte signal = CoverLiquidMeter + .computeSignalBasedOnFluid(aTileEntity, aCoverVariable.invert, aCoverVariable.threshold); + final long hash = hashCoverCoords(aTileEntity, side); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); + + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, FluidTransmitterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, + FluidTransmitterData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + public static class FluidTransmitterData extends CoverAdvancedRedstoneTransmitterBase.TransmitterData { + + /** The special value {@code 0} means threshold check is disabled. */ + private int threshold; + + public FluidTransmitterData(int frequency, UUID uuid, boolean invert, int threshold) { + super(frequency, uuid, invert); + this.threshold = threshold; + } + + public FluidTransmitterData() { + super(); + this.threshold = 0; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new FluidTransmitterData(frequency, uuid, invert, threshold); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); + tag.setInteger("threshold", threshold); + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + super.writeToByteBuf(aBuf); + aBuf.writeInt(threshold); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + super.loadDataFromNBT(aNBT); + + NBTTagCompound tag = (NBTTagCompound) aNBT; + threshold = tag.getInteger("threshold"); + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + super.readFromPacket(aBuf, aPlayer); + threshold = aBuf.readInt(); + + return this; + } + } + + // GUI stuff + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new WirelessFluidDetectorUIFactory(buildContext).createWindow(); + } + + private class WirelessFluidDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { + + private int maxCapacity; + + public WirelessFluidDetectorUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected int getFrequencyRow() { + return 0; + } + + @Override + protected int getButtonRow() { + return 1; + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + setMaxCapacity(); + super.addUIWidgets(builder); + builder.widget( + new TextWidget(GTUtility.trans("222", "Fluid threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2)); + } + + @Override + protected void addUIForDataController(CoverDataControllerWidget controller) { + super.addUIForDataController(controller); + controller.addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) coverData.threshold, + (coverData, state) -> { + coverData.threshold = state.intValue(); + return coverData; + }, + widget -> widget.setBounds(0, maxCapacity > 0 ? maxCapacity : Integer.MAX_VALUE) + .setScrollValues(1000, 144, 100000) + .setFocusOnGuiOpen(true) + .setPos(1, 2 + spaceY * 2) + .setSize(spaceX * 5 - 4, 12)); + } + + private void setMaxCapacity() { + final ICoverable tile = getUIBuildContext().getTile(); + if (!tile.isDead() && tile instanceof IFluidHandler) { + FluidTankInfo[] tanks = ((IFluidHandler) tile).getTankInfo(ForgeDirection.UNKNOWN); + maxCapacity = Arrays.stream(tanks) + .mapToInt(tank -> tank.capacity) + .sum(); + } else { + maxCapacity = -1; + } + } + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/CoverWirelessItemDetector.java b/src/main/java/gregtech/common/covers/redstone/CoverWirelessItemDetector.java new file mode 100644 index 0000000000..19cefdabcf --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverWirelessItemDetector.java @@ -0,0 +1,262 @@ +package gregtech.common.covers.redstone; + +import java.text.FieldPosition; +import java.util.UUID; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.covers.CoverItemMeter; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; +import gregtech.common.gui.modularui.widget.ItemWatcherSlotWidget; +import gregtech.common.tileentities.storage.MTEDigitalChestBase; +import io.netty.buffer.ByteBuf; + +public class CoverWirelessItemDetector + extends CoverAdvancedRedstoneTransmitterBase { + + public CoverWirelessItemDetector(ITexture coverTexture) { + super(ItemTransmitterData.class, coverTexture); + } + + @Override + public ItemTransmitterData createDataObject() { + return new ItemTransmitterData(); + } + + @Override + public ItemTransmitterData createDataObject(int aLegacyData) { + return createDataObject(); + } + + @Override + public ItemTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + ItemTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + byte signal = CoverItemMeter.computeSignalBasedOnItems( + aTileEntity, + aCoverVariable.invert, + aCoverVariable.threshold, + aCoverVariable.slot, + side.ordinal()); + final long hash = hashCoverCoords(aTileEntity, side); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); + + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, ItemTransmitterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, + ItemTransmitterData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + public static class ItemTransmitterData extends CoverAdvancedRedstoneTransmitterBase.TransmitterData { + + /** + * The special value {@code -1} means all slots. + */ + private int slot; + /** + * The special value {@code 0} means threshold check is disabled. + */ + private int threshold; + + public ItemTransmitterData(int frequency, UUID uuid, boolean invert, int threshold, int slot) { + super(frequency, uuid, invert); + this.threshold = threshold; + this.slot = slot; + } + + public ItemTransmitterData() { + super(); + this.threshold = 0; + this.slot = -1; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new ItemTransmitterData(frequency, uuid, invert, threshold, slot); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); + tag.setInteger("threshold", threshold); + tag.setInteger("slot", slot); + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + super.writeToByteBuf(aBuf); + aBuf.writeInt(threshold); + aBuf.writeInt(slot); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + super.loadDataFromNBT(aNBT); + + NBTTagCompound tag = (NBTTagCompound) aNBT; + threshold = tag.getInteger("threshold"); + slot = tag.getInteger("slot"); + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + super.readFromPacket(aBuf, aPlayer); + threshold = aBuf.readInt(); + slot = aBuf.readInt(); + + return this; + } + } + + // GUI stuff + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new WirelessItemDetectorUIFactory(buildContext).createWindow(); + } + + private class WirelessItemDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { + + private int maxSlot; + private int maxThreshold; + /** + * Display the text "All" instead of a number when the slot is set to -1. + */ + private static final NumberFormatMUI numberFormatAll = new NumberFormatMUI() { + + @Override + public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { + if (number < 0) { + return toAppendTo.append(GTUtility.trans("ALL", "All")); + } else { + return super.format(number, toAppendTo, pos); + } + } + }; + + public WirelessItemDetectorUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected int getFrequencyRow() { + return 0; + } + + @Override + protected int getButtonRow() { + return 1; + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + setMaxSlot(); + setMaxThreshold(); + super.addUIWidgets(builder); + builder.widget( + new ItemWatcherSlotWidget().setGetter(this::getTargetItem) + .setPos(startX + spaceX * 4 - 1, startY + spaceY * 3)) + .widget( + new TextWidget(GTUtility.trans("221", "Item threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2)) + .widget( + new TextWidget(GTUtility.trans("254", "Detect Slot #")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * 5, 4 + startY + spaceY * 3)); + } + + @Override + protected void addUIForDataController(CoverDataControllerWidget controller) { + super.addUIForDataController(controller); + controller.addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) coverData.threshold, + (coverData, state) -> { + coverData.threshold = state.intValue(); + return coverData; + }, + widget -> widget.setBounds(0, maxThreshold) + .setScrollValues(1, 64, 1000) + .setFocusOnGuiOpen(true) + .setPos(1, 2 + spaceY * 2) + .setSize(spaceX * 5 - 4, 12)) + .addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) coverData.slot, + (coverData, state) -> { + coverData.slot = state.intValue(); + return coverData; + }, + widget -> widget.setBounds(-1, maxSlot) + .setDefaultValue(-1) + .setScrollValues(1, 100, 10) + .setNumberFormat(numberFormatAll) + .setPos(1, 2 + spaceY * 3) + .setSize(spaceX * 4 - 8, 12)); + } + + private void setMaxSlot() { + final ICoverable tile = getUIBuildContext().getTile(); + if (!tile.isDead() && tile instanceof IGregTechTileEntity gtTile + && !(gtTile.getMetaTileEntity() instanceof MTEDigitalChestBase)) { + maxSlot = tile.getSizeInventory() - 1; + } else { + maxSlot = -1; + } + } + + private void setMaxThreshold() { + final ICoverable tile = getUIBuildContext().getTile(); + if (!tile.isDead() && tile instanceof IGregTechTileEntity gtTile + && gtTile.getMetaTileEntity() instanceof MTEDigitalChestBase) { + maxThreshold = gtTile.getMaxItemCount(); + } else { + maxThreshold = maxSlot > 0 ? maxSlot * 64 : Integer.MAX_VALUE; + } + } + + private ItemStack getTargetItem() { + final ICoverable tile = getUIBuildContext().getTile(); + final ItemTransmitterData coverVariable = getCoverData(); + if (coverVariable != null && coverVariable.slot >= 0 + && tile instanceof TileEntity + && !tile.isDead() + && tile.getSizeInventory() >= coverVariable.slot) { + return tile.getStackInSlot(coverVariable.slot); + } else { + return null; + } + } + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/CoverWirelessMaintenanceDetector.java b/src/main/java/gregtech/common/covers/redstone/CoverWirelessMaintenanceDetector.java new file mode 100644 index 0000000000..f3d62f2c81 --- /dev/null +++ b/src/main/java/gregtech/common/covers/redstone/CoverWirelessMaintenanceDetector.java @@ -0,0 +1,242 @@ +package gregtech.common.covers.redstone; + +import java.util.UUID; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.io.ByteArrayDataInput; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.util.ISerializableObject; +import gregtech.common.covers.CoverNeedMaintainance; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import io.netty.buffer.ByteBuf; + +public class CoverWirelessMaintenanceDetector + extends CoverAdvancedRedstoneTransmitterBase { + + public CoverWirelessMaintenanceDetector(ITexture coverTexture) { + super(MaintenanceTransmitterData.class, coverTexture); + } + + @Override + public MaintenanceTransmitterData createDataObject() { + return new MaintenanceTransmitterData(); + } + + @Override + public MaintenanceTransmitterData createDataObject(int aLegacyData) { + return createDataObject(); + } + + private static byte computeSignalBasedOnMaintenance(MaintenanceTransmitterData coverVariable, + ICoverable tileEntity) { + boolean signal = false; + + if (tileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity metaTE = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); + if (metaTE instanceof MTEMultiBlockBase multiTE) { + int ideal = multiTE.getIdealStatus(); + int real = multiTE.getRepairStatus(); + + switch (coverVariable.mode) { + case NO_ISSUE -> signal = ideal == real; + case ONE_ISSUE, TWO_ISSUES, THREE_ISSUES, FOUR_ISSUES, FIVE_ISSUES -> signal = ideal - real + >= coverVariable.mode.ordinal(); + case ROTOR_80, ROTOR_100 -> { + ItemStack rotor = multiTE.getRealInventory()[1]; + if (CoverNeedMaintainance.isRotor(rotor)) { + long max = MetaGeneratedTool.getToolMaxDamage(rotor); + long current = MetaGeneratedTool.getToolDamage(rotor); + + if (coverVariable.mode == MaintenanceMode.ROTOR_80) { + signal = current >= max * 8 / 10; + } else { + long expectedDamage = Math.round( + Math.min( + (double) multiTE.mEUt / multiTE.damageFactorLow, + Math.pow(multiTE.mEUt, multiTE.damageFactorHigh))); + signal = current + expectedDamage * 2 >= max; + } + } else { + signal = true; + } + } + } + } + } + + if (coverVariable.invert) { + signal = !signal; + } + + return (byte) (signal ? 15 : 0); + } + + @Override + public MaintenanceTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, + MaintenanceTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { + final byte signal = computeSignalBasedOnMaintenance(aCoverVariable, aTileEntity); + final long hash = hashCoverCoords(aTileEntity, side); + setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); + + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, MaintenanceTransmitterData aCoverVariable, + ICoverable aTileEntity) { + return true; + } + + @Override + protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, + MaintenanceTransmitterData aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int getTickRateImpl(ForgeDirection side, int aCoverID, MaintenanceTransmitterData aCoverVariable, + ICoverable aTileEntity) { + return 60; + } + + public enum MaintenanceMode { + NO_ISSUE, + ONE_ISSUE, + TWO_ISSUES, + THREE_ISSUES, + FOUR_ISSUES, + FIVE_ISSUES, + ROTOR_80, + ROTOR_100 + } + + public static class MaintenanceTransmitterData extends CoverAdvancedRedstoneTransmitterBase.TransmitterData { + + private MaintenanceMode mode; + + public MaintenanceTransmitterData(int frequency, UUID uuid, boolean invert, MaintenanceMode mode) { + super(frequency, uuid, invert); + this.mode = mode; + } + + public MaintenanceTransmitterData() { + super(); + this.mode = MaintenanceMode.ONE_ISSUE; + } + + @Nonnull + @Override + public ISerializableObject copy() { + return new MaintenanceTransmitterData(frequency, uuid, invert, mode); + } + + @Nonnull + @Override + public NBTBase saveDataToNBT() { + NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); + tag.setInteger("mode", mode.ordinal()); + + return tag; + } + + @Override + public void writeToByteBuf(ByteBuf aBuf) { + super.writeToByteBuf(aBuf); + aBuf.writeInt(mode.ordinal()); + } + + @Override + public void loadDataFromNBT(NBTBase aNBT) { + super.loadDataFromNBT(aNBT); + + NBTTagCompound tag = (NBTTagCompound) aNBT; + mode = MaintenanceMode.values()[tag.getInteger("mode")]; + } + + @Nonnull + @Override + public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { + super.readFromPacket(aBuf, aPlayer); + mode = MaintenanceMode.values()[aBuf.readInt()]; + + return this; + } + } + + // GUI stuff + + private static final String[] extraTexts = new String[] { "No Issues", ">= 1 Issue", ">= 2 Issues", ">= 3 Issues", + ">= 4 Issues", ">= 5 Issues", "Rotor < 20%", "Rotor ≈ 0%" }; + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new WirelessMaintenanceDetectorUIFactory(buildContext).createWindow(); + } + + private class WirelessMaintenanceDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { + + public WirelessMaintenanceDetectorUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @Override + protected int getGUIHeight() { + return 143; + } + + @Override + protected int getFrequencyRow() { + return 0; + } + + @Override + protected int getButtonRow() { + return 1; + } + + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + super.addUIWidgets(builder); + for (int i = 0; i < 8; i++) { + builder.widget( + new TextWidget(extraTexts[i]).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX + spaceX * (i % 2 == 0 ? 1 : 7), 4 + startY + spaceY * (2 + i / 2))); + } + } + + @Override + protected void addUIForDataController(CoverDataControllerWidget controller) { + super.addUIForDataController(controller); + for (int i = 0; i < 8; i++) { + final int index = i; + controller.addFollower( + CoverDataFollowerToggleButtonWidget.ofDisableable(), + coverData -> coverData.mode == MaintenanceMode.values()[index], + (coverData, state) -> { + coverData.mode = MaintenanceMode.values()[index]; + return coverData; + }, + widget -> widget.setToggleTexture(GTUITextures.OVERLAY_BUTTON_CHECKMARK, GTUITextures.TRANSPARENT) + .setPos(spaceX * (index % 2 == 0 ? 0 : 6), spaceY * (2 + index / 2))); + } + } + } +} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java deleted file mode 100644 index afd0f67b37..0000000000 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverBase.java +++ /dev/null @@ -1,202 +0,0 @@ -package gregtech.common.covers.redstone; - -import java.util.Arrays; -import java.util.UUID; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import io.netty.buffer.ByteBuf; - -public abstract class GT_Cover_AdvancedRedstoneReceiverBase - extends GT_Cover_AdvancedWirelessRedstoneBase { - - public GT_Cover_AdvancedRedstoneReceiverBase(ITexture coverTexture) { - super(ReceiverData.class, coverTexture); - } - - @Override - public ReceiverData createDataObject() { - return new ReceiverData(); - } - - @Override - public ReceiverData createDataObject(int aLegacyData) { - return createDataObject(); - } - - // GUI stuff - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new AdvancedRedstoneReceiverBaseUIFactory(buildContext).createWindow(); - } - - private class AdvancedRedstoneReceiverBaseUIFactory extends AdvancedWirelessRedstoneBaseUIFactory { - - public AdvancedRedstoneReceiverBaseUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected int getFrequencyRow() { - return 0; - } - - @Override - protected int getButtonRow() { - return 1; - } - - @Override - protected boolean isShiftPrivateLeft() { - return false; - } - - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - super.addUIWidgets(builder); - builder.widget( - new TextWidget(GT_Utility.trans("335", "Gate Mode")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2)); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIForDataController(CoverDataControllerWidget controller) { - super.addUIForDataController(controller); - controller.addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.mode == GateMode.AND, - (coverData, state) -> { - coverData.mode = GateMode.AND; - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_AND) - .addTooltip(GT_Utility.trans("331", "AND Gate")) - .setPos(spaceX * 0, spaceY * 2)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.mode == GateMode.NAND, - (coverData, state) -> { - coverData.mode = GateMode.NAND; - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_NAND) - .addTooltip(GT_Utility.trans("332", "NAND Gate")) - .setPos(spaceX * 1, spaceY * 2)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.mode == GateMode.OR, - (coverData, state) -> { - coverData.mode = GateMode.OR; - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_OR) - .addTooltip(GT_Utility.trans("333", "OR Gate")) - .setPos(spaceX * 2, spaceY * 2)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.mode == GateMode.NOR, - (coverData, state) -> { - coverData.mode = GateMode.NOR; - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_GATE_NOR) - .addTooltip(GT_Utility.trans("334", "NOR Gate")) - .setPos(spaceX * 3, spaceY * 2)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.mode == GateMode.SINGLE_SOURCE, - (coverData, state) -> { - coverData.mode = GateMode.SINGLE_SOURCE; - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_ANALOG) - .addTooltips( - Arrays.asList( - "ANALOG Mode", - "Only use this mode with ONE transmitter in total,", - "no logic involved")) - .setPos(spaceX * 4, spaceY * 2)); - } - } - - public enum GateMode { - AND, - NAND, - OR, - NOR, - SINGLE_SOURCE - } - - public static class ReceiverData extends GT_Cover_AdvancedWirelessRedstoneBase.WirelessData { - - private GateMode mode; - - public ReceiverData(int frequency, UUID uuid, GateMode mode) { - super(frequency, uuid); - this.mode = mode; - } - - public ReceiverData() { - this(0, null, GateMode.AND); - } - - public GateMode getGateMode() { - return mode; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new ReceiverData(frequency, uuid, mode); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); - tag.setByte("mode", (byte) mode.ordinal()); - - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - super.writeToByteBuf(aBuf); - aBuf.writeByte(mode.ordinal()); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - super.loadDataFromNBT(aNBT); - - NBTTagCompound tag = (NBTTagCompound) aNBT; - mode = GateMode.values()[tag.getByte("mode")]; - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - super.readFromPacket(aBuf, aPlayer); - mode = GateMode.values()[aBuf.readByte()]; - - return this; - } - } -} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java deleted file mode 100644 index a8a30de9b1..0000000000 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverExternal.java +++ /dev/null @@ -1,35 +0,0 @@ -package gregtech.common.covers.redstone; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; - -public class GT_Cover_AdvancedRedstoneReceiverExternal extends GT_Cover_AdvancedRedstoneReceiverBase { - - public GT_Cover_AdvancedRedstoneReceiverExternal(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public ReceiverData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - ReceiverData aCoverVariable, ICoverable aTileEntity, long aTimer) { - aTileEntity.setOutputRedstoneSignal( - side, - getSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), aCoverVariable.getGateMode())); - - return aCoverVariable; - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, ReceiverData aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return false; - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, ReceiverData aCoverVariable, - ICoverable aTileEntity) { - return true; - } -} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java deleted file mode 100644 index 5553cb7c9c..0000000000 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneReceiverInternal.java +++ /dev/null @@ -1,42 +0,0 @@ -package gregtech.common.covers.redstone; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; - -public class GT_Cover_AdvancedRedstoneReceiverInternal extends GT_Cover_AdvancedRedstoneReceiverBase { - - public GT_Cover_AdvancedRedstoneReceiverInternal(ITexture coverTexture) { - super(coverTexture); - } - - @Override - public ReceiverData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - ReceiverData aCoverVariable, ICoverable aTileEntity, long aTimer) { - if (aTileEntity instanceof IMachineProgress machine) { - if (getRedstoneInput(side, aInputRedstone, aCoverID, aCoverVariable, aTileEntity) > 0) { - machine.enableWorking(); - } else { - machine.disableWorking(); - } - - machine.setWorkDataValue(aInputRedstone); - } - - return aCoverVariable; - } - - @Override - protected byte getRedstoneInputImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - ReceiverData aCoverVariable, ICoverable aTileEntity) { - return getSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), aCoverVariable.getGateMode()); - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, ReceiverData aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return true; - } -} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java deleted file mode 100644 index 3417542bec..0000000000 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterBase.java +++ /dev/null @@ -1,188 +0,0 @@ -package gregtech.common.covers.redstone; - -import java.util.Objects; -import java.util.UUID; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import io.netty.buffer.ByteBuf; - -public abstract class GT_Cover_AdvancedRedstoneTransmitterBase - extends GT_Cover_AdvancedWirelessRedstoneBase { - - public GT_Cover_AdvancedRedstoneTransmitterBase(Class typeToken, ITexture coverTexture) { - super(typeToken, coverTexture); - } - - private static void unregisterSignal(ForgeDirection side, TransmitterData aCoverVariable, ICoverable aTileEntity) { - final long hash = hashCoverCoords(aTileEntity, side); - removeSignalAt(aCoverVariable.uuid, aCoverVariable.frequency, hash); - } - - @Override - public boolean onCoverRemovalImpl(ForgeDirection side, int aCoverID, TransmitterData aCoverVariable, - ICoverable aTileEntity, boolean aForced) { - unregisterSignal(side, aCoverVariable, aTileEntity); - return true; - } - - @Override - protected void onBaseTEDestroyedImpl(ForgeDirection side, int aCoverID, TransmitterData aCoverVariable, - ICoverable aTileEntity) { - unregisterSignal(side, aCoverVariable, aTileEntity); - } - - @Override - protected T onCoverScrewdriverClickImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - aCoverVariable.invert = !aCoverVariable.invert; - GT_Utility.sendChatToPlayer( - aPlayer, - aCoverVariable.invert ? GT_Utility.trans("054", "Inverted") : GT_Utility.trans("055", "Normal")); - - return aCoverVariable; - } - - @Override - protected void preDataChangedImpl(ForgeDirection side, int aCoverID, int aNewCoverId, T aCoverVariable, - T aNewCoverVariable, ICoverable aTileEntity) { - if (aCoverVariable.frequency != aNewCoverVariable.frequency - || !Objects.equals(aCoverVariable.uuid, aNewCoverVariable.uuid)) { - unregisterSignal(side, aCoverVariable, aTileEntity); - } - } - - public static class TransmitterData extends GT_Cover_AdvancedWirelessRedstoneBase.WirelessData { - - protected boolean invert; - - public TransmitterData(int frequency, UUID uuid, boolean invert) { - super(frequency, uuid); - this.invert = invert; - } - - public TransmitterData() { - this(0, null, false); - } - - public boolean isInvert() { - return invert; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new TransmitterData(frequency, uuid, invert); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); - tag.setBoolean("invert", invert); - - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - super.writeToByteBuf(aBuf); - aBuf.writeBoolean(invert); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - super.loadDataFromNBT(aNBT); - - NBTTagCompound tag = (NBTTagCompound) aNBT; - invert = tag.getBoolean("invert"); - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - super.readFromPacket(aBuf, aPlayer); - invert = aBuf.readBoolean(); - - return this; - } - } - - // GUI stuff - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new AdvancedRedstoneTransmitterBaseUIFactory(buildContext).createWindow(); - } - - protected class AdvancedRedstoneTransmitterBaseUIFactory extends AdvancedWirelessRedstoneBaseUIFactory { - - public AdvancedRedstoneTransmitterBaseUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected int getFrequencyRow() { - return 0; - } - - @Override - protected int getButtonRow() { - return 1; - } - - @Override - protected boolean isShiftPrivateLeft() { - return true; - } - - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - super.addUIWidgets(builder); - builder.widget(TextWidget.dynamicString(() -> { - T coverData = getCoverData(); - if (coverData != null) { - return getCoverData().invert ? GT_Utility.trans("INVERTED", "Inverted") - : GT_Utility.trans("NORMAL", "Normal"); - } else { - return ""; - } - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 10, 4 + startY + spaceY * getButtonRow())); - } - - @Override - protected void addUIForDataController(CoverDataControllerWidget controller) { - super.addUIForDataController(controller); - controller.addFollower( - CoverDataFollower_ToggleButtonWidget.ofRedstone(), - coverData -> coverData.invert, - (coverData, state) -> { - coverData.invert = state; - return coverData; - }, - widget -> widget.addTooltip(0, GT_Utility.trans("NORMAL", "Normal")) - .addTooltip(1, GT_Utility.trans("INVERTED", "Inverted")) - .setPos(spaceX * 9, spaceY * getButtonRow())); - } - } -} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java deleted file mode 100644 index 139ec64843..0000000000 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterExternal.java +++ /dev/null @@ -1,51 +0,0 @@ -package gregtech.common.covers.redstone; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; - -public class GT_Cover_AdvancedRedstoneTransmitterExternal - extends GT_Cover_AdvancedRedstoneTransmitterBase { - - public GT_Cover_AdvancedRedstoneTransmitterExternal(ITexture coverTexture) { - super(TransmitterData.class, coverTexture); - } - - @Override - public TransmitterData createDataObject() { - return new TransmitterData(); - } - - @Override - public TransmitterData createDataObject(int aLegacyData) { - return createDataObject(); - } - - @Override - public TransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - TransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - byte outputRedstone = aInputRedstone; - if (aCoverVariable.isInvert()) { - if (outputRedstone > 0) outputRedstone = 0; - else outputRedstone = 15; - } - - final long hash = hashCoverCoords(aTileEntity, side); - setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, outputRedstone); - - return aCoverVariable; - } - - @Override - protected boolean isRedstoneSensitiveImpl(ForgeDirection side, int aCoverID, TransmitterData aCoverVariable, - ICoverable aTileEntity, long aTimer) { - return true; - } - - @Override - public boolean letsRedstoneGoInImpl(ForgeDirection side, int aCoverID, TransmitterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } -} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java deleted file mode 100644 index 01a46fcc86..0000000000 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedRedstoneTransmitterInternal.java +++ /dev/null @@ -1,50 +0,0 @@ -package gregtech.common.covers.redstone; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; - -public class GT_Cover_AdvancedRedstoneTransmitterInternal - extends GT_Cover_AdvancedRedstoneTransmitterBase { - - public GT_Cover_AdvancedRedstoneTransmitterInternal(ITexture coverTexture) { - super(TransmitterData.class, coverTexture); - } - - @Override - public TransmitterData createDataObject() { - return new TransmitterData(); - } - - @Override - public TransmitterData createDataObject(int aLegacyData) { - return createDataObject(); - } - - @Override - public TransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - TransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - byte outputRedstone = aTileEntity.getOutputRedstoneSignal(side); - if (aCoverVariable.isInvert()) { - if (outputRedstone > 0) outputRedstone = 0; - else outputRedstone = 15; - } - - final long hash = hashCoverCoords(aTileEntity, side); - setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, outputRedstone); - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, TransmitterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, - TransmitterData aCoverVariable, ICoverable aTileEntity) { - return true; - } -} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java deleted file mode 100644 index 6ee9e2480f..0000000000 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_AdvancedWirelessRedstoneBase.java +++ /dev/null @@ -1,298 +0,0 @@ -package gregtech.common.covers.redstone; - -import java.util.Map; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import io.netty.buffer.ByteBuf; - -public abstract class GT_Cover_AdvancedWirelessRedstoneBase - extends GT_CoverBehaviorBase { - - public GT_Cover_AdvancedWirelessRedstoneBase(Class typeToken, ITexture coverTexture) { - super(typeToken, coverTexture); - } - - public static Byte getSignalAt(UUID uuid, int frequency, GT_Cover_AdvancedRedstoneReceiverBase.GateMode mode) { - Map> frequencies = GregTech_API.sAdvancedWirelessRedstone.get(String.valueOf(uuid)); - if (frequencies == null) return 0; - - Map signals = frequencies.get(frequency); - if (signals == null) signals = new ConcurrentHashMap<>(); - - switch (mode) { - case AND -> { - return (byte) (signals.values() - .stream() - .map(signal -> signal > 0) - .reduce(true, (signalA, signalB) -> signalA && signalB) ? 15 : 0); - } - case NAND -> { - return (byte) (signals.values() - .stream() - .map(signal -> signal > 0) - .reduce(true, (signalA, signalB) -> signalA && signalB) ? 0 : 15); - } - case OR -> { - return (byte) (signals.values() - .stream() - .map(signal -> signal > 0) - .reduce(false, (signalA, signalB) -> signalA || signalB) ? 15 : 0); - } - case NOR -> { - return (byte) (signals.values() - .stream() - .map(signal -> signal > 0) - .reduce(false, (signalA, signalB) -> signalA || signalB) ? 0 : 15); - } - case SINGLE_SOURCE -> { - if (signals.values() - .isEmpty()) { - return 0; - } - return signals.values() - .iterator() - .next(); - } - default -> { - return 0; - } - } - } - - public static void removeSignalAt(UUID uuid, int frequency, long hash) { - Map> frequencies = GregTech_API.sAdvancedWirelessRedstone.get(String.valueOf(uuid)); - if (frequencies == null) return; - frequencies.computeIfPresent(frequency, (freq, longByteMap) -> { - longByteMap.remove(hash); - return longByteMap.isEmpty() ? null : longByteMap; - }); - } - - public static void setSignalAt(UUID uuid, int frequency, long hash, byte value) { - Map> frequencies = GregTech_API.sAdvancedWirelessRedstone - .computeIfAbsent(String.valueOf(uuid), k -> new ConcurrentHashMap<>()); - Map signals = frequencies.computeIfAbsent(frequency, k -> new ConcurrentHashMap<>()); - signals.put(hash, value); - } - - /** - * x hashed into first 20 bytes y hashed into second 20 bytes z hashed into fifth 10 bytes dim hashed into sixth 10 - * bytes side hashed into last 4 bytes - */ - public static long hashCoverCoords(ICoverable tile, ForgeDirection side) { - return (((((long) tile.getXCoord() << 20) + tile.getZCoord() << 10) + tile.getYCoord() << 10) - + tile.getWorld().provider.dimensionId << 4) + side.ordinal(); - } - - @Override - public boolean letsEnergyInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsEnergyOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsFluidOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsInImpl(ForgeDirection side, int aCoverID, T aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public boolean letsItemsOutImpl(ForgeDirection side, int aCoverID, T aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - @Override - public String getDescriptionImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return GT_Utility.trans("081", "Frequency: ") + aCoverVariable.frequency - + ", Transmission: " - + (aCoverVariable.uuid == null ? "Public" : "Private"); - } - - @Override - public int getTickRateImpl(ForgeDirection side, int aCoverID, T aCoverVariable, ICoverable aTileEntity) { - return 5; - } - - public abstract static class WirelessData implements ISerializableObject { - - protected int frequency; - - /** - * If UUID is set to null, the cover frequency is public, rather than private - **/ - protected UUID uuid; - - public WirelessData(int frequency, UUID uuid) { - this.frequency = frequency; - this.uuid = uuid; - } - - public UUID getUuid() { - return uuid; - } - - public int getFrequency() { - return frequency; - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setInteger("frequency", frequency); - if (uuid != null) { - tag.setString("uuid", uuid.toString()); - } - - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - aBuf.writeInt(frequency); - aBuf.writeBoolean(uuid != null); - if (uuid != null) { - aBuf.writeLong(uuid.getLeastSignificantBits()); - aBuf.writeLong(uuid.getMostSignificantBits()); - } - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - NBTTagCompound tag = (NBTTagCompound) aNBT; - frequency = tag.getInteger("frequency"); - if (tag.hasKey("uuid")) { - uuid = UUID.fromString(tag.getString("uuid")); - } - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - frequency = aBuf.readInt(); - if (aBuf.readBoolean()) { - uuid = new UUID(aBuf.readLong(), aBuf.readLong()); - } - - return this; - } - } - - // GUI stuff - - @Override - public boolean hasCoverGUI() { - return true; - } - - protected abstract class AdvancedWirelessRedstoneBaseUIFactory extends UIFactory { - - protected static final int startX = 10; - protected static final int startY = 25; - protected static final int spaceX = 18; - protected static final int spaceY = 18; - - public AdvancedWirelessRedstoneBaseUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected int getGUIWidth() { - return 250; - } - - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - final int privateExtraColumn = isShiftPrivateLeft() ? 1 : 5; - - CoverDataControllerWidget dataController = new CoverDataControllerWidget<>( - this::getCoverData, - this::setCoverData, - GT_Cover_AdvancedWirelessRedstoneBase.this); - dataController.setPos(startX, startY); - addUIForDataController(dataController); - - builder.widget(dataController) - .widget( - new TextWidget(GT_Utility.trans("246", "Frequency")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5, 4 + startY + spaceY * getFrequencyRow())) - .widget( - new TextWidget(GT_Utility.trans("602", "Use Private Frequency")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * privateExtraColumn, 4 + startY + spaceY * getButtonRow())); - } - - protected void addUIForDataController(CoverDataControllerWidget controller) { - controller.addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) coverData.frequency, - (coverData, state) -> { - coverData.frequency = state.intValue(); - return coverData; - }, - widget -> widget.setScrollValues(1, 1000, 10) - .setBounds(0, Integer.MAX_VALUE) - .setPos(1, 2 + spaceY * getFrequencyRow()) - .setSize(spaceX * 5 - 4, 12)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofCheck(), - coverData -> coverData.uuid != null, - (coverData, state) -> { - if (state) { - coverData.uuid = getUIBuildContext().getPlayer() - .getUniqueID(); - } else { - coverData.uuid = null; - } - return coverData; - }, - widget -> widget.setPos(0, spaceY * getButtonRow())); - } - - protected abstract int getFrequencyRow(); - - protected abstract int getButtonRow(); - - protected abstract boolean isShiftPrivateLeft(); - } -} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessDoesWorkDetector.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessDoesWorkDetector.java deleted file mode 100644 index 724f12b8f8..0000000000 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessDoesWorkDetector.java +++ /dev/null @@ -1,245 +0,0 @@ -package gregtech.common.covers.redstone; - -import java.util.UUID; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IMachineProgress; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.covers.redstone.GT_Cover_WirelessDoesWorkDetector.ActivityMode; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import io.netty.buffer.ByteBuf; - -public class GT_Cover_WirelessDoesWorkDetector - extends GT_Cover_AdvancedRedstoneTransmitterBase { - - public GT_Cover_WirelessDoesWorkDetector(ITexture coverTexture) { - super(ActivityTransmitterData.class, coverTexture); - } - - @Override - public ActivityTransmitterData createDataObject() { - return new ActivityTransmitterData(); - } - - @Override - public ActivityTransmitterData createDataObject(int aLegacyData) { - return createDataObject(); - } - - private static byte computeSignalBasedOnActivity(ActivityTransmitterData coverVariable, ICoverable tileEntity) { - - if (tileEntity instanceof IMachineProgress) { - IMachineProgress mProgress = (IMachineProgress) tileEntity; - boolean inverted = coverVariable.invert; - int signal = 0; - - switch (coverVariable.mode) { - case MACHINE_ENABLED -> signal = inverted == mProgress.isAllowedToWork() ? 0 : 15; - case MACHINE_IDLE -> signal = inverted == (mProgress.getMaxProgress() == 0) ? 0 : 15; - case RECIPE_PROGRESS -> { - int tScale = mProgress.getMaxProgress() / 15; - - if (tScale > 0 && mProgress.hasThingsToDo()) { - signal = inverted ? (15 - mProgress.getProgress() / tScale) - : (mProgress.getProgress() / tScale); - } else { - signal = inverted ? 15 : 0; - } - } - } - - return (byte) signal; - } else { - return (byte) 0; - } - - } - - @Override - public ActivityTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - ActivityTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - final byte signal = computeSignalBasedOnActivity(aCoverVariable, aTileEntity); - final long hash = hashCoverCoords(aTileEntity, side); - setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); - - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, ActivityTransmitterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, - ActivityTransmitterData aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRateImpl(ForgeDirection side, int aCoverID, ActivityTransmitterData aCoverVariable, - ICoverable aTileEntity) { - return 5; - } - - public enum ActivityMode { - RECIPE_PROGRESS, - MACHINE_IDLE, - MACHINE_ENABLED, - } - - public static class ActivityTransmitterData extends GT_Cover_AdvancedRedstoneTransmitterBase.TransmitterData { - - private ActivityMode mode; - - public ActivityTransmitterData(int frequency, UUID uuid, boolean invert, ActivityMode mode) { - super(frequency, uuid, invert); - this.mode = mode; - } - - public ActivityTransmitterData() { - super(); - this.mode = ActivityMode.MACHINE_IDLE; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new ActivityTransmitterData(frequency, uuid, invert, mode); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); - tag.setInteger("mode", mode.ordinal()); - - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - super.writeToByteBuf(aBuf); - aBuf.writeInt(mode.ordinal()); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - super.loadDataFromNBT(aNBT); - - NBTTagCompound tag = (NBTTagCompound) aNBT; - mode = ActivityMode.values()[tag.getInteger("mode")]; - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - super.readFromPacket(aBuf, aPlayer); - mode = ActivityMode.values()[aBuf.readInt()]; - - return this; - } - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new WirelessActivityDetectorUIFactory(buildContext).createWindow(); - } - - private class WirelessActivityDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { - - public WirelessActivityDetectorUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected int getGUIHeight() { - return 107; - } - - @Override - protected int getFrequencyRow() { - return 0; - } - - @Override - protected int getButtonRow() { - return 1; - } - - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - super.addUIWidgets(builder); - builder.widget(TextWidget.dynamicString(() -> { - - ActivityMode mode = getCoverData().mode; - - if (mode == ActivityMode.MACHINE_ENABLED) { - return GT_Utility.trans("271", "Machine enabled"); - } else if (mode == ActivityMode.MACHINE_IDLE) { - return GT_Utility.trans("242", "Machine idle"); - } else { - return GT_Utility.trans("241", "Recipe progress"); - } - - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 3, 4 + startY + spaceY * 2)); - } - - @Override - protected void addUIForDataController(CoverDataControllerWidget controller) { - super.addUIForDataController(controller); - - controller.addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.mode == ActivityMode.RECIPE_PROGRESS, - (coverData, state) -> { - coverData.mode = ActivityMode.RECIPE_PROGRESS; - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_PROGRESS) - .addTooltip(GT_Utility.trans("241", "Recipe progress")) - .setPos(spaceX * 0, spaceY * 2)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.mode == ActivityMode.MACHINE_IDLE, - (coverData, state) -> { - coverData.mode = ActivityMode.MACHINE_IDLE; - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK) - .addTooltip(GT_Utility.trans("242", "Machine idle")) - .setPos(spaceX * 1, spaceY * 2)) - .addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.mode == ActivityMode.MACHINE_ENABLED, - (coverData, state) -> { - coverData.mode = ActivityMode.MACHINE_ENABLED; - return coverData; - }, - widget -> widget.setStaticTexture(GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_ON) - .addTooltip(GT_Utility.trans("271", "Machine enabled")) - .setPos(spaceX * 2, spaceY * 2)); - } - } - -} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java deleted file mode 100644 index 9a9d419be6..0000000000 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessFluidDetector.java +++ /dev/null @@ -1,186 +0,0 @@ -package gregtech.common.covers.redstone; - -import java.util.Arrays; -import java.util.UUID; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.covers.GT_Cover_LiquidMeter; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; -import io.netty.buffer.ByteBuf; - -public class GT_Cover_WirelessFluidDetector - extends GT_Cover_AdvancedRedstoneTransmitterBase { - - public GT_Cover_WirelessFluidDetector(ITexture coverTexture) { - super(FluidTransmitterData.class, coverTexture); - } - - @Override - public FluidTransmitterData createDataObject() { - return new FluidTransmitterData(); - } - - @Override - public FluidTransmitterData createDataObject(int aLegacyData) { - return createDataObject(); - } - - @Override - public FluidTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - FluidTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - final byte signal = GT_Cover_LiquidMeter - .computeSignalBasedOnFluid(aTileEntity, aCoverVariable.invert, aCoverVariable.threshold); - final long hash = hashCoverCoords(aTileEntity, side); - setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); - - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, FluidTransmitterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, - FluidTransmitterData aCoverVariable, ICoverable aTileEntity) { - return true; - } - - public static class FluidTransmitterData extends GT_Cover_AdvancedRedstoneTransmitterBase.TransmitterData { - - /** The special value {@code 0} means threshold check is disabled. */ - private int threshold; - - public FluidTransmitterData(int frequency, UUID uuid, boolean invert, int threshold) { - super(frequency, uuid, invert); - this.threshold = threshold; - } - - public FluidTransmitterData() { - super(); - this.threshold = 0; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new FluidTransmitterData(frequency, uuid, invert, threshold); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); - tag.setInteger("threshold", threshold); - - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - super.writeToByteBuf(aBuf); - aBuf.writeInt(threshold); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - super.loadDataFromNBT(aNBT); - - NBTTagCompound tag = (NBTTagCompound) aNBT; - threshold = tag.getInteger("threshold"); - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - super.readFromPacket(aBuf, aPlayer); - threshold = aBuf.readInt(); - - return this; - } - } - - // GUI stuff - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new WirelessFluidDetectorUIFactory(buildContext).createWindow(); - } - - private class WirelessFluidDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { - - private int maxCapacity; - - public WirelessFluidDetectorUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected int getFrequencyRow() { - return 0; - } - - @Override - protected int getButtonRow() { - return 1; - } - - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - setMaxCapacity(); - super.addUIWidgets(builder); - builder.widget( - new TextWidget(GT_Utility.trans("222", "Fluid threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2)); - } - - @Override - protected void addUIForDataController(CoverDataControllerWidget controller) { - super.addUIForDataController(controller); - controller.addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) coverData.threshold, - (coverData, state) -> { - coverData.threshold = state.intValue(); - return coverData; - }, - widget -> widget.setBounds(0, maxCapacity > 0 ? maxCapacity : Integer.MAX_VALUE) - .setScrollValues(1000, 144, 100000) - .setFocusOnGuiOpen(true) - .setPos(1, 2 + spaceY * 2) - .setSize(spaceX * 5 - 4, 12)); - } - - private void setMaxCapacity() { - final ICoverable tile = getUIBuildContext().getTile(); - if (!tile.isDead() && tile instanceof IFluidHandler) { - FluidTankInfo[] tanks = ((IFluidHandler) tile).getTankInfo(ForgeDirection.UNKNOWN); - maxCapacity = Arrays.stream(tanks) - .mapToInt(tank -> tank.capacity) - .sum(); - } else { - maxCapacity = -1; - } - } - } -} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java deleted file mode 100644 index 3cc7f60984..0000000000 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessItemDetector.java +++ /dev/null @@ -1,262 +0,0 @@ -package gregtech.common.covers.redstone; - -import java.text.FieldPosition; -import java.util.UUID; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.covers.GT_Cover_ItemMeter; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; -import gregtech.common.gui.modularui.widget.ItemWatcherSlotWidget; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_DigitalChestBase; -import io.netty.buffer.ByteBuf; - -public class GT_Cover_WirelessItemDetector - extends GT_Cover_AdvancedRedstoneTransmitterBase { - - public GT_Cover_WirelessItemDetector(ITexture coverTexture) { - super(ItemTransmitterData.class, coverTexture); - } - - @Override - public ItemTransmitterData createDataObject() { - return new ItemTransmitterData(); - } - - @Override - public ItemTransmitterData createDataObject(int aLegacyData) { - return createDataObject(); - } - - @Override - public ItemTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - ItemTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - byte signal = GT_Cover_ItemMeter.computeSignalBasedOnItems( - aTileEntity, - aCoverVariable.invert, - aCoverVariable.threshold, - aCoverVariable.slot, - side.ordinal()); - final long hash = hashCoverCoords(aTileEntity, side); - setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); - - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, ItemTransmitterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, - ItemTransmitterData aCoverVariable, ICoverable aTileEntity) { - return true; - } - - public static class ItemTransmitterData extends GT_Cover_AdvancedRedstoneTransmitterBase.TransmitterData { - - /** - * The special value {@code -1} means all slots. - */ - private int slot; - /** - * The special value {@code 0} means threshold check is disabled. - */ - private int threshold; - - public ItemTransmitterData(int frequency, UUID uuid, boolean invert, int threshold, int slot) { - super(frequency, uuid, invert); - this.threshold = threshold; - this.slot = slot; - } - - public ItemTransmitterData() { - super(); - this.threshold = 0; - this.slot = -1; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new ItemTransmitterData(frequency, uuid, invert, threshold, slot); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); - tag.setInteger("threshold", threshold); - tag.setInteger("slot", slot); - - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - super.writeToByteBuf(aBuf); - aBuf.writeInt(threshold); - aBuf.writeInt(slot); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - super.loadDataFromNBT(aNBT); - - NBTTagCompound tag = (NBTTagCompound) aNBT; - threshold = tag.getInteger("threshold"); - slot = tag.getInteger("slot"); - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - super.readFromPacket(aBuf, aPlayer); - threshold = aBuf.readInt(); - slot = aBuf.readInt(); - - return this; - } - } - - // GUI stuff - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new WirelessItemDetectorUIFactory(buildContext).createWindow(); - } - - private class WirelessItemDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { - - private int maxSlot; - private int maxThreshold; - /** - * Display the text "All" instead of a number when the slot is set to -1. - */ - private static final NumberFormatMUI numberFormatAll = new NumberFormatMUI() { - - @Override - public StringBuffer format(double number, StringBuffer toAppendTo, FieldPosition pos) { - if (number < 0) { - return toAppendTo.append(GT_Utility.trans("ALL", "All")); - } else { - return super.format(number, toAppendTo, pos); - } - } - }; - - public WirelessItemDetectorUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected int getFrequencyRow() { - return 0; - } - - @Override - protected int getButtonRow() { - return 1; - } - - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - setMaxSlot(); - setMaxThreshold(); - super.addUIWidgets(builder); - builder.widget( - new ItemWatcherSlotWidget().setGetter(this::getTargetItem) - .setPos(startX + spaceX * 4 - 1, startY + spaceY * 3)) - .widget( - new TextWidget(GT_Utility.trans("221", "Item threshold")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5, 4 + startY + spaceY * 2)) - .widget( - new TextWidget(GT_Utility.trans("254", "Detect Slot #")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * 5, 4 + startY + spaceY * 3)); - } - - @Override - protected void addUIForDataController(CoverDataControllerWidget controller) { - super.addUIForDataController(controller); - controller.addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) coverData.threshold, - (coverData, state) -> { - coverData.threshold = state.intValue(); - return coverData; - }, - widget -> widget.setBounds(0, maxThreshold) - .setScrollValues(1, 64, 1000) - .setFocusOnGuiOpen(true) - .setPos(1, 2 + spaceY * 2) - .setSize(spaceX * 5 - 4, 12)) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) coverData.slot, - (coverData, state) -> { - coverData.slot = state.intValue(); - return coverData; - }, - widget -> widget.setBounds(-1, maxSlot) - .setDefaultValue(-1) - .setScrollValues(1, 100, 10) - .setNumberFormat(numberFormatAll) - .setPos(1, 2 + spaceY * 3) - .setSize(spaceX * 4 - 8, 12)); - } - - private void setMaxSlot() { - final ICoverable tile = getUIBuildContext().getTile(); - if (!tile.isDead() && tile instanceof IGregTechTileEntity gtTile - && !(gtTile.getMetaTileEntity() instanceof GT_MetaTileEntity_DigitalChestBase)) { - maxSlot = tile.getSizeInventory() - 1; - } else { - maxSlot = -1; - } - } - - private void setMaxThreshold() { - final ICoverable tile = getUIBuildContext().getTile(); - if (!tile.isDead() && tile instanceof IGregTechTileEntity gtTile - && gtTile.getMetaTileEntity() instanceof GT_MetaTileEntity_DigitalChestBase) { - maxThreshold = gtTile.getMaxItemCount(); - } else { - maxThreshold = maxSlot > 0 ? maxSlot * 64 : Integer.MAX_VALUE; - } - } - - private ItemStack getTargetItem() { - final ICoverable tile = getUIBuildContext().getTile(); - final ItemTransmitterData coverVariable = getCoverData(); - if (coverVariable != null && coverVariable.slot >= 0 - && tile instanceof TileEntity - && !tile.isDead() - && tile.getSizeInventory() >= coverVariable.slot) { - return tile.getStackInSlot(coverVariable.slot); - } else { - return null; - } - } - } -} diff --git a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java b/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java deleted file mode 100644 index f6c76591df..0000000000 --- a/src/main/java/gregtech/common/covers/redstone/GT_Cover_WirelessMaintenanceDetector.java +++ /dev/null @@ -1,242 +0,0 @@ -package gregtech.common.covers.redstone; - -import java.util.UUID; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.io.ByteArrayDataInput; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.util.ISerializableObject; -import gregtech.common.covers.GT_Cover_NeedMaintainance; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_ToggleButtonWidget; -import io.netty.buffer.ByteBuf; - -public class GT_Cover_WirelessMaintenanceDetector - extends GT_Cover_AdvancedRedstoneTransmitterBase { - - public GT_Cover_WirelessMaintenanceDetector(ITexture coverTexture) { - super(MaintenanceTransmitterData.class, coverTexture); - } - - @Override - public MaintenanceTransmitterData createDataObject() { - return new MaintenanceTransmitterData(); - } - - @Override - public MaintenanceTransmitterData createDataObject(int aLegacyData) { - return createDataObject(); - } - - private static byte computeSignalBasedOnMaintenance(MaintenanceTransmitterData coverVariable, - ICoverable tileEntity) { - boolean signal = false; - - if (tileEntity instanceof IGregTechTileEntity) { - IMetaTileEntity metaTE = ((IGregTechTileEntity) tileEntity).getMetaTileEntity(); - if (metaTE instanceof GT_MetaTileEntity_MultiBlockBase multiTE) { - int ideal = multiTE.getIdealStatus(); - int real = multiTE.getRepairStatus(); - - switch (coverVariable.mode) { - case NO_ISSUE -> signal = ideal == real; - case ONE_ISSUE, TWO_ISSUES, THREE_ISSUES, FOUR_ISSUES, FIVE_ISSUES -> signal = ideal - real - >= coverVariable.mode.ordinal(); - case ROTOR_80, ROTOR_100 -> { - ItemStack rotor = multiTE.getRealInventory()[1]; - if (GT_Cover_NeedMaintainance.isRotor(rotor)) { - long max = GT_MetaGenerated_Tool.getToolMaxDamage(rotor); - long current = GT_MetaGenerated_Tool.getToolDamage(rotor); - - if (coverVariable.mode == MaintenanceMode.ROTOR_80) { - signal = current >= max * 8 / 10; - } else { - long expectedDamage = Math.round( - Math.min( - (double) multiTE.mEUt / multiTE.damageFactorLow, - Math.pow(multiTE.mEUt, multiTE.damageFactorHigh))); - signal = current + expectedDamage * 2 >= max; - } - } else { - signal = true; - } - } - } - } - } - - if (coverVariable.invert) { - signal = !signal; - } - - return (byte) (signal ? 15 : 0); - } - - @Override - public MaintenanceTransmitterData doCoverThingsImpl(ForgeDirection side, byte aInputRedstone, int aCoverID, - MaintenanceTransmitterData aCoverVariable, ICoverable aTileEntity, long aTimer) { - final byte signal = computeSignalBasedOnMaintenance(aCoverVariable, aTileEntity); - final long hash = hashCoverCoords(aTileEntity, side); - setSignalAt(aCoverVariable.getUuid(), aCoverVariable.getFrequency(), hash, signal); - - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoOutImpl(ForgeDirection side, int aCoverID, MaintenanceTransmitterData aCoverVariable, - ICoverable aTileEntity) { - return true; - } - - @Override - protected boolean manipulatesSidedRedstoneOutputImpl(ForgeDirection side, int aCoverID, - MaintenanceTransmitterData aCoverVariable, ICoverable aTileEntity) { - return true; - } - - @Override - public int getTickRateImpl(ForgeDirection side, int aCoverID, MaintenanceTransmitterData aCoverVariable, - ICoverable aTileEntity) { - return 60; - } - - public enum MaintenanceMode { - NO_ISSUE, - ONE_ISSUE, - TWO_ISSUES, - THREE_ISSUES, - FOUR_ISSUES, - FIVE_ISSUES, - ROTOR_80, - ROTOR_100 - } - - public static class MaintenanceTransmitterData extends GT_Cover_AdvancedRedstoneTransmitterBase.TransmitterData { - - private MaintenanceMode mode; - - public MaintenanceTransmitterData(int frequency, UUID uuid, boolean invert, MaintenanceMode mode) { - super(frequency, uuid, invert); - this.mode = mode; - } - - public MaintenanceTransmitterData() { - super(); - this.mode = MaintenanceMode.ONE_ISSUE; - } - - @Nonnull - @Override - public ISerializableObject copy() { - return new MaintenanceTransmitterData(frequency, uuid, invert, mode); - } - - @Nonnull - @Override - public NBTBase saveDataToNBT() { - NBTTagCompound tag = (NBTTagCompound) super.saveDataToNBT(); - tag.setInteger("mode", mode.ordinal()); - - return tag; - } - - @Override - public void writeToByteBuf(ByteBuf aBuf) { - super.writeToByteBuf(aBuf); - aBuf.writeInt(mode.ordinal()); - } - - @Override - public void loadDataFromNBT(NBTBase aNBT) { - super.loadDataFromNBT(aNBT); - - NBTTagCompound tag = (NBTTagCompound) aNBT; - mode = MaintenanceMode.values()[tag.getInteger("mode")]; - } - - @Nonnull - @Override - public ISerializableObject readFromPacket(ByteArrayDataInput aBuf, EntityPlayerMP aPlayer) { - super.readFromPacket(aBuf, aPlayer); - mode = MaintenanceMode.values()[aBuf.readInt()]; - - return this; - } - } - - // GUI stuff - - private static final String[] extraTexts = new String[] { "No Issues", ">= 1 Issue", ">= 2 Issues", ">= 3 Issues", - ">= 4 Issues", ">= 5 Issues", "Rotor < 20%", "Rotor ≈ 0%" }; - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new WirelessMaintenanceDetectorUIFactory(buildContext).createWindow(); - } - - private class WirelessMaintenanceDetectorUIFactory extends AdvancedRedstoneTransmitterBaseUIFactory { - - public WirelessMaintenanceDetectorUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @Override - protected int getGUIHeight() { - return 143; - } - - @Override - protected int getFrequencyRow() { - return 0; - } - - @Override - protected int getButtonRow() { - return 1; - } - - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - super.addUIWidgets(builder); - for (int i = 0; i < 8; i++) { - builder.widget( - new TextWidget(extraTexts[i]).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX + spaceX * (i % 2 == 0 ? 1 : 7), 4 + startY + spaceY * (2 + i / 2))); - } - } - - @Override - protected void addUIForDataController(CoverDataControllerWidget controller) { - super.addUIForDataController(controller); - for (int i = 0; i < 8; i++) { - final int index = i; - controller.addFollower( - CoverDataFollower_ToggleButtonWidget.ofDisableable(), - coverData -> coverData.mode == MaintenanceMode.values()[index], - (coverData, state) -> { - coverData.mode = MaintenanceMode.values()[index]; - return coverData; - }, - widget -> widget.setToggleTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK, GT_UITextures.TRANSPARENT) - .setPos(spaceX * (index % 2 == 0 ? 0 : 6), spaceY * (2 + index / 2))); - } - } - } -} diff --git a/src/main/java/gregtech/common/entities/EntityFXPollution.java b/src/main/java/gregtech/common/entities/EntityFXPollution.java new file mode 100644 index 0000000000..facd3d3364 --- /dev/null +++ b/src/main/java/gregtech/common/entities/EntityFXPollution.java @@ -0,0 +1,59 @@ +package gregtech.common.entities; + +import java.util.Random; + +import net.minecraft.client.particle.EntityFX; +import net.minecraft.world.World; + +public class EntityFXPollution extends EntityFX { + + public EntityFXPollution(World world, double x, double y, double z) { + super(world, x, y, z, 0, 0, 0); + + this.particleRed = 0.25F; + this.particleGreen = 0.2F; + this.particleBlue = 0.25F; + + this.motionX *= 0.1D; + this.motionY *= -0.1D; + this.motionZ *= 0.1F; + + Random random = world.rand; + this.motionX += random.nextFloat() * -1.9D * random.nextFloat() * 0.1D; + this.motionY += random.nextFloat() * -0.5D * random.nextFloat() * 0.1D * 5.0D; + this.motionZ += random.nextFloat() * -1.9D * random.nextFloat() * 0.1D; + + this.particleTextureIndexX = 0; + this.particleTextureIndexY = 0; + + this.particleMaxAge = (int) ((double) 20 / ((double) random.nextFloat() * 0.8D + 0.2D)); + + this.particleScale *= 0.75F; + this.noClip = true; + } + + @Override + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + + if (this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } else { + this.motionY -= 5.0E-4D; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if (this.posY == this.prevPosY) { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + this.motionX *= 0.96D; + this.motionY *= 0.96D; + this.motionZ *= 0.96D; + if (this.onGround) { + this.motionX *= 0.7D; + this.motionZ *= 0.7D; + } + } + } +} diff --git a/src/main/java/gregtech/common/entities/GT_EntityFXPollution.java b/src/main/java/gregtech/common/entities/GT_EntityFXPollution.java deleted file mode 100644 index d5121a38ad..0000000000 --- a/src/main/java/gregtech/common/entities/GT_EntityFXPollution.java +++ /dev/null @@ -1,59 +0,0 @@ -package gregtech.common.entities; - -import java.util.Random; - -import net.minecraft.client.particle.EntityFX; -import net.minecraft.world.World; - -public class GT_EntityFXPollution extends EntityFX { - - public GT_EntityFXPollution(World world, double x, double y, double z) { - super(world, x, y, z, 0, 0, 0); - - this.particleRed = 0.25F; - this.particleGreen = 0.2F; - this.particleBlue = 0.25F; - - this.motionX *= 0.1D; - this.motionY *= -0.1D; - this.motionZ *= 0.1F; - - Random random = world.rand; - this.motionX += random.nextFloat() * -1.9D * random.nextFloat() * 0.1D; - this.motionY += random.nextFloat() * -0.5D * random.nextFloat() * 0.1D * 5.0D; - this.motionZ += random.nextFloat() * -1.9D * random.nextFloat() * 0.1D; - - this.particleTextureIndexX = 0; - this.particleTextureIndexY = 0; - - this.particleMaxAge = (int) ((double) 20 / ((double) random.nextFloat() * 0.8D + 0.2D)); - - this.particleScale *= 0.75F; - this.noClip = true; - } - - @Override - public void onUpdate() { - this.prevPosX = this.posX; - this.prevPosY = this.posY; - this.prevPosZ = this.posZ; - - if (this.particleAge++ >= this.particleMaxAge) { - this.setDead(); - } else { - this.motionY -= 5.0E-4D; - this.moveEntity(this.motionX, this.motionY, this.motionZ); - if (this.posY == this.prevPosY) { - this.motionX *= 1.1D; - this.motionZ *= 1.1D; - } - this.motionX *= 0.96D; - this.motionY *= 0.96D; - this.motionZ *= 0.96D; - if (this.onGround) { - this.motionX *= 0.7D; - this.motionZ *= 0.7D; - } - } - } -} diff --git a/src/main/java/gregtech/common/fluid/GTFluid.java b/src/main/java/gregtech/common/fluid/GTFluid.java new file mode 100644 index 0000000000..3969817ee9 --- /dev/null +++ b/src/main/java/gregtech/common/fluid/GTFluid.java @@ -0,0 +1,209 @@ +package gregtech.common.fluid; + +import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.FluidState; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.fluid.IGTFluid; +import gregtech.api.interfaces.fluid.IGTRegisteredFluid; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; + +public class GTFluid extends Fluid implements IGTFluid, IGTRegisteredFluid, Runnable { + + private final String localizedName; + private final ResourceLocation stillIconResourceLocation; + private final ResourceLocation flowingIconResourceLocation; + private final short[] colorRGBA; + private final FluidState fluidState; + private final Fluid iconsFrom; + private Fluid registeredFluid; + + /** + * Constructs this {@link IGTFluid} implementation from an {@link GTFluidBuilder} instance + * + * @param builder The {@link GTFluidBuilder} instance to construct this {@link IGTFluid} implementation + */ + protected GTFluid(@Nonnull final GTFluidBuilder builder) { + super(builder.fluidName); + this.localizedName = builder.localizedName; + this.stillIconResourceLocation = builder.stillIconResourceLocation; + this.flowingIconResourceLocation = builder.flowingIconResourceLocation; + this.iconsFrom = builder.iconsFrom; + this.block = builder.fluidBlock; + this.colorRGBA = builder.colorRGBA; + this.fluidState = builder.fluidState; + this.temperature = builder.temperature; + configureFromStateTemperature(); + } + + /** + * Adjusts this {@link Fluid}'s settings based on this {@link IGTFluid}'s state + */ + protected void configureFromStateTemperature() { + switch (fluidState) { + case SLURRY: + setGaseous(false).setViscosity(10000); + break; + case GAS: + setGaseous(true).setDensity(-100) + .setViscosity(200); + break; + case PLASMA: + setGaseous(true).setDensity(55536) + .setViscosity(10) + .setLuminosity(15); + break; + case MOLTEN: + final int luminosity; + if (temperature >= 3500) { + luminosity = 15; + } else { + luminosity = temperature < 1000 ? 0 : 14 * (temperature - 1000) / 2500 + 1; + } + setLuminosity(luminosity); + case LIQUID: + default: + setGaseous(false).setViscosity(1000); + break; + } + } + + // ----- Fluid implementations ----- + + /** + * @inheritDoc + */ + @Override + public int getColor() { + return (Math.max(0, Math.min(255, colorRGBA[0])) << 16) | (Math.max(0, Math.min(255, colorRGBA[1])) << 8) + | Math.max(0, Math.min(255, colorRGBA[2])); + } + + // ----- IGTFluid interface implementations ----- + + public IGTRegisteredFluid addFluid() { + if (FluidRegistry.registerFluid(GTFluid.this)) { + // Registered as a new Fluid + registeredFluid = this; + // Adds a server-side localized-name + GTLanguageManager.addStringLocalization(getUnlocalizedName(), localizedName); + } else { + // Fluid already registered, get it from the registry + registeredFluid = FluidRegistry.getFluid(GTFluid.this.fluidName); + // Sets temperature of already registered fluids if they use the default (temperature = 300) + if (registeredFluid.getTemperature() == new Fluid("test").getTemperature()) { + registeredFluid.setTemperature(GTFluid.this.temperature); + } + } + // Schedules the fluid for the block icons loader run() tasks + GregTechAPI.sGTBlockIconload.add(this); + return this; + } + + // ----- IGT_RegisteredFluid interface implementations ----- + + /** + * @inheritDoc + */ + @Override + public IGTRegisteredFluid registerContainers(final ItemStack fullContainer, final ItemStack emptyContainer, + final int containerSize) { + if (fullContainer != null && emptyContainer != null) { + final FluidStack fluidStack = new FluidStack(registeredFluid, containerSize); + if (!FluidContainerRegistry.registerFluidContainer(fluidStack, fullContainer, emptyContainer)) { + GTValues.RA.stdBuilder() + .itemInputs(fullContainer) + .itemOutputs(GTUtility.getContainerItem(fullContainer, false)) + .fluidOutputs(fluidStack) + .duration(fluidStack.amount / 62) + .eut(1) + .addTo(fluidCannerRecipes); + } + } + return this; + } + + /** + * @inheritDoc + */ + @Override + public IGTRegisteredFluid registerBContainers(final ItemStack fullContainer, final ItemStack emptyContainer) { + return registerContainers(fullContainer, emptyContainer, 1000); + } + + /** + * @inheritDoc + */ + @Override + public IGTRegisteredFluid registerPContainers(final ItemStack fullContainer, final ItemStack emptyContainer) { + return registerContainers(fullContainer, emptyContainer, 250); + } + + /** + * @inheritDoc + */ + @Override + public IGTRegisteredFluid configureMaterials(final Materials material) { + if (material != null) { + switch (fluidState) { + case SLURRY -> material.mSolid = registeredFluid; + case GAS -> material.mGas = registeredFluid; + case PLASMA -> material.mPlasma = registeredFluid; + case MOLTEN -> material.mStandardMoltenFluid = registeredFluid; + default -> material.mFluid = registeredFluid; + } + Materials.FLUID_MAP.put(registeredFluid, material); + } + return this; + } + + /** + * @inheritDoc + */ + @Override + public Fluid asFluid() { + return registeredFluid; + } + + // ----- Runnable interface implementations ----- + + /** + * This {@link Runnable#run()} implementation is scheduled within the {@link GregTechAPI#sGTBlockIconload} to load + * this {@link IGTFluid}'s texture icons. + * + * @see Runnable#run() + */ + @Override + public void run() { + if (iconsFrom instanceof GTFluid) { + // Needs the GTFluid to have registered its icons + ((GTFluid) iconsFrom).run(); + stillIcon = iconsFrom.getStillIcon(); + flowingIcon = iconsFrom.getFlowingIcon(); + } else { + if (stillIconResourceLocation != null) { + stillIcon = GregTechAPI.sBlockIcons.registerIcon(stillIconResourceLocation.toString()); + } + if (flowingIconResourceLocation != null) { + flowingIcon = GregTechAPI.sBlockIcons.registerIcon(flowingIconResourceLocation.toString()); + } + } + } + + @Override + public String toString() { + return "GTFluid{" + "fluidName='" + fluidName + '\'' + '}'; + } +} diff --git a/src/main/java/gregtech/common/fluid/GTFluidBuilder.java b/src/main/java/gregtech/common/fluid/GTFluidBuilder.java new file mode 100644 index 0000000000..e1532f0dbf --- /dev/null +++ b/src/main/java/gregtech/common/fluid/GTFluidBuilder.java @@ -0,0 +1,146 @@ +package gregtech.common.fluid; + +import static gregtech.api.enums.Mods.GregTech; + +import java.util.Locale; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.Fluid; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.FluidState; +import gregtech.api.interfaces.fluid.IGTFluid; +import gregtech.api.interfaces.fluid.IGTFluidBuilder; +import gregtech.api.interfaces.fluid.IGTRegisteredFluid; + +public class GTFluidBuilder implements IGTFluidBuilder { + + final String fluidName; + String localizedName; + ResourceLocation stillIconResourceLocation = null, flowingIconResourceLocation = null; + short[] colorRGBA = Dyes._NULL.getRGBA(); + Block fluidBlock = null; + FluidState fluidState; + int temperature; + IIcon stillIcon; + IIcon flowingIcon; + Fluid iconsFrom; + + public GTFluidBuilder(final String fluidName) { + this.fluidName = fluidName.toLowerCase(Locale.ENGLISH); + } + + /** + * @inheritDoc + */ + @Override + public IGTFluidBuilder withColorRGBA(final short[] colorRGBA) { + this.colorRGBA = colorRGBA; + return this; + } + + /** + * @inheritDoc + */ + @Override + public IGTFluidBuilder withLocalizedName(final String localizedName) { + this.localizedName = localizedName; + return this; + } + + /** + * @inheritDoc + */ + @Override + public IGTFluidBuilder withStateAndTemperature(final FluidState fluidState, final int temperature) { + this.fluidState = fluidState; + this.temperature = temperature; + return this; + } + + /** + * @inheritDoc + */ + @Override + public IGTFluidBuilder withStillIconResourceLocation(final ResourceLocation stillIconResourceLocation) { + this.stillIconResourceLocation = stillIconResourceLocation; + return this; + } + + /** + * @inheritDoc + */ + @Override + public IGTFluidBuilder withFlowingIconResourceLocation(final ResourceLocation flowingIconResourceLocation) { + this.flowingIconResourceLocation = flowingIconResourceLocation; + return this; + } + + /** + * @inheritDoc + */ + @Override + public IGTFluidBuilder withTextureName(final String textureName) { + this.stillIconResourceLocation = new ResourceLocation(GregTech.ID, "fluids/fluid." + textureName); + this.flowingIconResourceLocation = null; + return this; + } + + /** + * @inheritDoc + */ + @Override + public IGTFluidBuilder withIconsFrom(@Nonnull final Fluid fromFluid) { + this.iconsFrom = fromFluid; + return this; + } + + /** + * @inheritDoc + */ + @Override + public IGTFluidBuilder withFluidBlock(final Block fluidBlock) { + this.fluidBlock = fluidBlock; + return this; + } + + /** + * @inheritDoc + */ + @Override + public IGTFluidBuilder withTextures(final ResourceLocation stillIconResourceLocation, + final ResourceLocation flowingIconResourceLocation) { + this.stillIconResourceLocation = stillIconResourceLocation; + this.flowingIconResourceLocation = flowingIconResourceLocation; + return this; + } + + /** + * @inheritDoc + */ + @Override + public IGTFluid build() { + if (colorRGBA == null) { + colorRGBA = Dyes._NULL.getRGBA(); + } + if (stillIconResourceLocation == null) { + withTextureName(fluidName.toLowerCase(Locale.ENGLISH)); + } + if (localizedName == null) { + localizedName = fluidName; + } + return new GTFluid(this); + } + + /** + * @inheritDoc + */ + @Override + public IGTRegisteredFluid buildAndRegister() { + return build().addFluid(); + } +} diff --git a/src/main/java/gregtech/common/fluid/GT_Fluid.java b/src/main/java/gregtech/common/fluid/GT_Fluid.java deleted file mode 100644 index 6ba8d7d23a..0000000000 --- a/src/main/java/gregtech/common/fluid/GT_Fluid.java +++ /dev/null @@ -1,209 +0,0 @@ -package gregtech.common.fluid; - -import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; - -import javax.annotation.Nonnull; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.FluidState; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.fluid.IGT_Fluid; -import gregtech.api.interfaces.fluid.IGT_RegisteredFluid; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; - -public class GT_Fluid extends Fluid implements IGT_Fluid, IGT_RegisteredFluid, Runnable { - - private final String localizedName; - private final ResourceLocation stillIconResourceLocation; - private final ResourceLocation flowingIconResourceLocation; - private final short[] colorRGBA; - private final FluidState fluidState; - private final Fluid iconsFrom; - private Fluid registeredFluid; - - /** - * Constructs this {@link IGT_Fluid} implementation from an {@link GT_FluidBuilder} instance - * - * @param builder The {@link GT_FluidBuilder} instance to construct this {@link IGT_Fluid} implementation - */ - protected GT_Fluid(@Nonnull final GT_FluidBuilder builder) { - super(builder.fluidName); - this.localizedName = builder.localizedName; - this.stillIconResourceLocation = builder.stillIconResourceLocation; - this.flowingIconResourceLocation = builder.flowingIconResourceLocation; - this.iconsFrom = builder.iconsFrom; - this.block = builder.fluidBlock; - this.colorRGBA = builder.colorRGBA; - this.fluidState = builder.fluidState; - this.temperature = builder.temperature; - configureFromStateTemperature(); - } - - /** - * Adjusts this {@link Fluid}'s settings based on this {@link IGT_Fluid}'s state - */ - protected void configureFromStateTemperature() { - switch (fluidState) { - case SLURRY: - setGaseous(false).setViscosity(10000); - break; - case GAS: - setGaseous(true).setDensity(-100) - .setViscosity(200); - break; - case PLASMA: - setGaseous(true).setDensity(55536) - .setViscosity(10) - .setLuminosity(15); - break; - case MOLTEN: - final int luminosity; - if (temperature >= 3500) { - luminosity = 15; - } else { - luminosity = temperature < 1000 ? 0 : 14 * (temperature - 1000) / 2500 + 1; - } - setLuminosity(luminosity); - case LIQUID: - default: - setGaseous(false).setViscosity(1000); - break; - } - } - - // ----- Fluid implementations ----- - - /** - * @inheritDoc - */ - @Override - public int getColor() { - return (Math.max(0, Math.min(255, colorRGBA[0])) << 16) | (Math.max(0, Math.min(255, colorRGBA[1])) << 8) - | Math.max(0, Math.min(255, colorRGBA[2])); - } - - // ----- IGT_Fluid interface implementations ----- - - public IGT_RegisteredFluid addFluid() { - if (FluidRegistry.registerFluid(GT_Fluid.this)) { - // Registered as a new Fluid - registeredFluid = this; - // Adds a server-side localized-name - GT_LanguageManager.addStringLocalization(getUnlocalizedName(), localizedName); - } else { - // Fluid already registered, get it from the registry - registeredFluid = FluidRegistry.getFluid(GT_Fluid.this.fluidName); - // Sets temperature of already registered fluids if they use the default (temperature = 300) - if (registeredFluid.getTemperature() == new Fluid("test").getTemperature()) { - registeredFluid.setTemperature(GT_Fluid.this.temperature); - } - } - // Schedules the fluid for the block icons loader run() tasks - GregTech_API.sGTBlockIconload.add(this); - return this; - } - - // ----- IGT_RegisteredFluid interface implementations ----- - - /** - * @inheritDoc - */ - @Override - public IGT_RegisteredFluid registerContainers(final ItemStack fullContainer, final ItemStack emptyContainer, - final int containerSize) { - if (fullContainer != null && emptyContainer != null) { - final FluidStack fluidStack = new FluidStack(registeredFluid, containerSize); - if (!FluidContainerRegistry.registerFluidContainer(fluidStack, fullContainer, emptyContainer)) { - GT_Values.RA.stdBuilder() - .itemInputs(fullContainer) - .itemOutputs(GT_Utility.getContainerItem(fullContainer, false)) - .fluidOutputs(fluidStack) - .duration(fluidStack.amount / 62) - .eut(1) - .addTo(fluidCannerRecipes); - } - } - return this; - } - - /** - * @inheritDoc - */ - @Override - public IGT_RegisteredFluid registerBContainers(final ItemStack fullContainer, final ItemStack emptyContainer) { - return registerContainers(fullContainer, emptyContainer, 1000); - } - - /** - * @inheritDoc - */ - @Override - public IGT_RegisteredFluid registerPContainers(final ItemStack fullContainer, final ItemStack emptyContainer) { - return registerContainers(fullContainer, emptyContainer, 250); - } - - /** - * @inheritDoc - */ - @Override - public IGT_RegisteredFluid configureMaterials(final Materials material) { - if (material != null) { - switch (fluidState) { - case SLURRY -> material.mSolid = registeredFluid; - case GAS -> material.mGas = registeredFluid; - case PLASMA -> material.mPlasma = registeredFluid; - case MOLTEN -> material.mStandardMoltenFluid = registeredFluid; - default -> material.mFluid = registeredFluid; - } - Materials.FLUID_MAP.put(registeredFluid, material); - } - return this; - } - - /** - * @inheritDoc - */ - @Override - public Fluid asFluid() { - return registeredFluid; - } - - // ----- Runnable interface implementations ----- - - /** - * This {@link Runnable#run()} implementation is scheduled within the {@link GregTech_API#sGTBlockIconload} to load - * this {@link IGT_Fluid}'s texture icons. - * - * @see Runnable#run() - */ - @Override - public void run() { - if (iconsFrom instanceof GT_Fluid) { - // Needs the GT_Fluid to have registered its icons - ((GT_Fluid) iconsFrom).run(); - stillIcon = iconsFrom.getStillIcon(); - flowingIcon = iconsFrom.getFlowingIcon(); - } else { - if (stillIconResourceLocation != null) { - stillIcon = GregTech_API.sBlockIcons.registerIcon(stillIconResourceLocation.toString()); - } - if (flowingIconResourceLocation != null) { - flowingIcon = GregTech_API.sBlockIcons.registerIcon(flowingIconResourceLocation.toString()); - } - } - } - - @Override - public String toString() { - return "GT_Fluid{" + "fluidName='" + fluidName + '\'' + '}'; - } -} diff --git a/src/main/java/gregtech/common/fluid/GT_FluidBuilder.java b/src/main/java/gregtech/common/fluid/GT_FluidBuilder.java deleted file mode 100644 index 9a18b8d812..0000000000 --- a/src/main/java/gregtech/common/fluid/GT_FluidBuilder.java +++ /dev/null @@ -1,146 +0,0 @@ -package gregtech.common.fluid; - -import static gregtech.api.enums.Mods.GregTech; - -import java.util.Locale; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fluids.Fluid; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.FluidState; -import gregtech.api.interfaces.fluid.IGT_Fluid; -import gregtech.api.interfaces.fluid.IGT_FluidBuilder; -import gregtech.api.interfaces.fluid.IGT_RegisteredFluid; - -public class GT_FluidBuilder implements IGT_FluidBuilder { - - final String fluidName; - String localizedName; - ResourceLocation stillIconResourceLocation = null, flowingIconResourceLocation = null; - short[] colorRGBA = Dyes._NULL.getRGBA(); - Block fluidBlock = null; - FluidState fluidState; - int temperature; - IIcon stillIcon; - IIcon flowingIcon; - Fluid iconsFrom; - - public GT_FluidBuilder(final String fluidName) { - this.fluidName = fluidName.toLowerCase(Locale.ENGLISH); - } - - /** - * @inheritDoc - */ - @Override - public IGT_FluidBuilder withColorRGBA(final short[] colorRGBA) { - this.colorRGBA = colorRGBA; - return this; - } - - /** - * @inheritDoc - */ - @Override - public IGT_FluidBuilder withLocalizedName(final String localizedName) { - this.localizedName = localizedName; - return this; - } - - /** - * @inheritDoc - */ - @Override - public IGT_FluidBuilder withStateAndTemperature(final FluidState fluidState, final int temperature) { - this.fluidState = fluidState; - this.temperature = temperature; - return this; - } - - /** - * @inheritDoc - */ - @Override - public IGT_FluidBuilder withStillIconResourceLocation(final ResourceLocation stillIconResourceLocation) { - this.stillIconResourceLocation = stillIconResourceLocation; - return this; - } - - /** - * @inheritDoc - */ - @Override - public IGT_FluidBuilder withFlowingIconResourceLocation(final ResourceLocation flowingIconResourceLocation) { - this.flowingIconResourceLocation = flowingIconResourceLocation; - return this; - } - - /** - * @inheritDoc - */ - @Override - public IGT_FluidBuilder withTextureName(final String textureName) { - this.stillIconResourceLocation = new ResourceLocation(GregTech.ID, "fluids/fluid." + textureName); - this.flowingIconResourceLocation = null; - return this; - } - - /** - * @inheritDoc - */ - @Override - public IGT_FluidBuilder withIconsFrom(@Nonnull final Fluid fromFluid) { - this.iconsFrom = fromFluid; - return this; - } - - /** - * @inheritDoc - */ - @Override - public IGT_FluidBuilder withFluidBlock(final Block fluidBlock) { - this.fluidBlock = fluidBlock; - return this; - } - - /** - * @inheritDoc - */ - @Override - public IGT_FluidBuilder withTextures(final ResourceLocation stillIconResourceLocation, - final ResourceLocation flowingIconResourceLocation) { - this.stillIconResourceLocation = stillIconResourceLocation; - this.flowingIconResourceLocation = flowingIconResourceLocation; - return this; - } - - /** - * @inheritDoc - */ - @Override - public IGT_Fluid build() { - if (colorRGBA == null) { - colorRGBA = Dyes._NULL.getRGBA(); - } - if (stillIconResourceLocation == null) { - withTextureName(fluidName.toLowerCase(Locale.ENGLISH)); - } - if (localizedName == null) { - localizedName = fluidName; - } - return new GT_Fluid(this); - } - - /** - * @inheritDoc - */ - @Override - public IGT_RegisteredFluid buildAndRegister() { - return build().addFluid(); - } -} diff --git a/src/main/java/gregtech/common/gui/MachineGUIProvider.java b/src/main/java/gregtech/common/gui/MachineGUIProvider.java index 3cc889f000..a8d8804ebe 100644 --- a/src/main/java/gregtech/common/gui/MachineGUIProvider.java +++ b/src/main/java/gregtech/common/gui/MachineGUIProvider.java @@ -35,7 +35,7 @@ import gregtech.api.enums.SoundResource; import gregtech.api.enums.VoidingMode; import gregtech.api.gui.GUIHost; import gregtech.api.gui.GUIProvider; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.gui.modularui.GUITextureSet; import gregtech.api.logic.MuTEProcessingLogic; import gregtech.api.logic.PowerLogic; @@ -74,7 +74,7 @@ public class MachineGUIProvider { if (host.isAllowedToWork()) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_ON }; + return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED, + GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON }; } else { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF }; + return new IDrawable[] { GTUITextures.BUTTON_STANDARD, + GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF }; } }) .attachSyncer(new FakeSyncWidget.BooleanSyncer(host::isAllowedToWork, host::setAllowedToWork), builder) @@ -343,7 +343,7 @@ public class MachineGUIProvider { List ret = new ArrayList<>(); if (host.isInputSeparated()) { - ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); + ret.add(GTUITextures.BUTTON_STANDARD_PRESSED); if (host.supportsInputSeparation()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_ON); + ret.add(GTUITextures.OVERLAY_BUTTON_INPUT_SEPARATION_ON); } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_ON_DISABLED); + ret.add(GTUITextures.OVERLAY_BUTTON_INPUT_SEPARATION_ON_DISABLED); } } else { - ret.add(GT_UITextures.BUTTON_STANDARD); + ret.add(GTUITextures.BUTTON_STANDARD); if (host.supportsInputSeparation()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_OFF); + ret.add(GTUITextures.OVERLAY_BUTTON_INPUT_SEPARATION_OFF); } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_INPUT_SEPARATION_OFF_DISABLED); + ret.add(GTUITextures.OVERLAY_BUTTON_INPUT_SEPARATION_OFF_DISABLED); } } if (!host.supportsInputSeparation()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_FORBIDDEN); + ret.add(GTUITextures.OVERLAY_BUTTON_FORBIDDEN); } return ret.toArray(new IDrawable[0]); }) @@ -430,22 +430,22 @@ public class MachineGUIProvider { List ret = new ArrayList<>(); if (host.isBatchModeEnabled()) { - ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); + ret.add(GTUITextures.BUTTON_STANDARD_PRESSED); if (host.supportsBatchMode()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_ON); + ret.add(GTUITextures.OVERLAY_BUTTON_BATCH_MODE_ON); } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_ON_DISABLED); + ret.add(GTUITextures.OVERLAY_BUTTON_BATCH_MODE_ON_DISABLED); } } else { - ret.add(GT_UITextures.BUTTON_STANDARD); + ret.add(GTUITextures.BUTTON_STANDARD); if (host.supportsBatchMode()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_OFF); + ret.add(GTUITextures.OVERLAY_BUTTON_BATCH_MODE_OFF); } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_OFF_DISABLED); + ret.add(GTUITextures.OVERLAY_BUTTON_BATCH_MODE_OFF_DISABLED); } } if (!host.supportsBatchMode()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_FORBIDDEN); + ret.add(GTUITextures.OVERLAY_BUTTON_FORBIDDEN); } return ret.toArray(new IDrawable[0]); }) @@ -476,22 +476,22 @@ public class MachineGUIProvider { List ret = new ArrayList<>(); if (host.isRecipeLockingEnabled()) { - ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); + ret.add(GTUITextures.BUTTON_STANDARD_PRESSED); if (host.supportsSingleRecipeLocking()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_LOCKED); + ret.add(GTUITextures.OVERLAY_BUTTON_RECIPE_LOCKED); } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_LOCKED_DISABLED); + ret.add(GTUITextures.OVERLAY_BUTTON_RECIPE_LOCKED_DISABLED); } } else { - ret.add(GT_UITextures.BUTTON_STANDARD); + ret.add(GTUITextures.BUTTON_STANDARD); if (host.supportsSingleRecipeLocking()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED); + ret.add(GTUITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED); } else { - ret.add(GT_UITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED_DISABLED); + ret.add(GTUITextures.OVERLAY_BUTTON_RECIPE_UNLOCKED_DISABLED); } } if (!host.supportsSingleRecipeLocking()) { - ret.add(GT_UITextures.OVERLAY_BUTTON_FORBIDDEN); + ret.add(GTUITextures.OVERLAY_BUTTON_FORBIDDEN); } return ret.toArray(new IDrawable[0]); }) diff --git a/src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java b/src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java index 452ca36c0c..0163c6fb7b 100644 --- a/src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java +++ b/src/main/java/gregtech/common/gui/modularui/uifactory/SelectItemUIFactory.java @@ -23,10 +23,10 @@ import com.gtnewhorizons.modularui.common.widget.DrawableWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; import gregtech.api.enums.Dyes; -import gregtech.api.gui.GT_GUIColorOverride; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.util.GT_Util; -import gregtech.api.util.GT_Utility; +import gregtech.api.gui.GUIColorOverride; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.util.GTUtil; +import gregtech.api.util.GTUtility; /** * Creates UI for selecting item from given list. This is client-only UI to allow using client-preferred settings. @@ -44,10 +44,10 @@ public class SelectItemUIFactory { private int selected; private boolean anotherWindow = false; private AtomicBoolean dialogOpened; - private int guiTint = GT_Util.getRGBInt(Dyes.MACHINE_METAL.getRGBA()); + private int guiTint = GTUtil.getRGBInt(Dyes.MACHINE_METAL.getRGBA()); private Supplier currentGetter; - private final GT_GUIColorOverride colorOverride = GT_GUIColorOverride.get("SelectItemUIFactory"); + private final GUIColorOverride colorOverride = GUIColorOverride.get("SelectItemUIFactory"); private int getTextColorOrDefault(String textType, int defaultColor) { return colorOverride.getTextColorOrDefault(textType, defaultColor); @@ -139,10 +139,10 @@ public class SelectItemUIFactory { super.onScreenUpdate(); if (currentGetter != null) { ItemStack current = currentGetter.get(); - selected = GT_Utility.findMatchingStackInList(stacks, current); + selected = GTUtility.findMatchingStackInList(stacks, current); } } - }.setDrawable(GT_UITextures.SLOT_DARK_GRAY) + }.setDrawable(GTUITextures.SLOT_DARK_GRAY) .setPos(currentSlotX, currentSlotY) .setSize(18, 18)) .widget( @@ -178,7 +178,7 @@ public class SelectItemUIFactory { .setUpdateTooltipEveryTick(true) .setBackground( () -> new IDrawable[] { - index == selected ? GT_UITextures.SLOT_DARK_GRAY : ModularUITextures.ITEM_SLOT, }) + index == selected ? GTUITextures.SLOT_DARK_GRAY : ModularUITextures.ITEM_SLOT, }) .setPos(7 + 18 * (index % cols), 43 + 18 * (index / cols)) .setSize(18, 18)); } @@ -209,7 +209,7 @@ public class SelectItemUIFactory { public void setSelected(int selected) { if (selected == this.selected) return; - int newSelected = GT_Utility.clamp(selected, UNSELECTED, stacks.size() - 1); + int newSelected = GTUtility.clamp(selected, UNSELECTED, stacks.size() - 1); if (noDeselect && newSelected == UNSELECTED) return; this.selected = newSelected; diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverCycleButtonWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverCycleButtonWidget.java index 4d1c6649ae..e244fcf5e5 100644 --- a/src/main/java/gregtech/common/gui/modularui/widget/CoverCycleButtonWidget.java +++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverCycleButtonWidget.java @@ -8,7 +8,7 @@ import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; /** * Fires click action on mouse release, not on press. Draws different backgrounds depending on whether the mouse is @@ -16,12 +16,12 @@ import gregtech.api.gui.modularui.GT_UITextures; */ public class CoverCycleButtonWidget extends CycleButtonWidget { - private static final UITexture BUTTON_NORMAL_NOT_PRESSED = GT_UITextures.BUTTON_COVER_NORMAL + private static final UITexture BUTTON_NORMAL_NOT_PRESSED = GTUITextures.BUTTON_COVER_NORMAL .getSubArea(0, 0, 1, 0.5f); - private static final UITexture BUTTON_NORMAL_PRESSED = GT_UITextures.BUTTON_COVER_NORMAL.getSubArea(0, 0.5f, 1, 1); - private static final UITexture BUTTON_HOVERED_NOT_PRESSED = GT_UITextures.BUTTON_COVER_NORMAL_HOVERED + private static final UITexture BUTTON_NORMAL_PRESSED = GTUITextures.BUTTON_COVER_NORMAL.getSubArea(0, 0.5f, 1, 1); + private static final UITexture BUTTON_HOVERED_NOT_PRESSED = GTUITextures.BUTTON_COVER_NORMAL_HOVERED .getSubArea(0, 0, 1, 0.5f); - private static final UITexture BUTTON_HOVERED_PRESSED = GT_UITextures.BUTTON_COVER_NORMAL_HOVERED + private static final UITexture BUTTON_HOVERED_PRESSED = GTUITextures.BUTTON_COVER_NORMAL_HOVERED .getSubArea(0, 0.5f, 1, 1); private boolean clickPressed; diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataControllerWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataControllerWidget.java index 4543980ce1..c89c541273 100644 --- a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataControllerWidget.java +++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataControllerWidget.java @@ -12,12 +12,12 @@ import com.gtnewhorizons.modularui.api.widget.Widget; import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; import gregtech.api.gui.modularui.IDataFollowerWidget; -import gregtech.api.util.GT_CoverBehaviorBase; +import gregtech.api.util.CoverBehaviorBase; import gregtech.api.util.ISerializableObject; public class CoverDataControllerWidget extends DataControllerWidget { - protected final GT_CoverBehaviorBase coverBehavior; + protected final CoverBehaviorBase coverBehavior; /** * @param dataGetter () -> cover data this widget handles @@ -25,7 +25,7 @@ public class CoverDataControllerWidget extends Da * @param coverBehavior cover this widget handles data update */ public CoverDataControllerWidget(Supplier dataGetter, Function dataSetter, - GT_CoverBehaviorBase coverBehavior) { + CoverBehaviorBase coverBehavior) { super(dataGetter, dataSetter); this.coverBehavior = coverBehavior; } @@ -68,7 +68,7 @@ public class CoverDataControllerWidget extends Da * @param dataUpdater (index of button, current cover data) -> new cover data */ public CoverDataIndexedControllerWidget_ToggleButtons(Supplier coverDataGetter, - Function coverDataSetter, GT_CoverBehaviorBase coverBehavior, + Function coverDataSetter, CoverBehaviorBase coverBehavior, BiFunction dataToStateGetter, BiFunction dataUpdater) { super(coverDataGetter, coverDataSetter, coverBehavior); this.dataToStateGetter = dataToStateGetter; @@ -80,8 +80,8 @@ public class CoverDataControllerWidget extends Da * @param widget widget to add * @param applyForWidget methods to call for widget to add */ - public > CoverDataIndexedControllerWidget_ToggleButtons addToggleButton( - int index, W widget, Consumer> applyForWidget) { + public > CoverDataIndexedControllerWidget_ToggleButtons addToggleButton( + int index, W widget, Consumer> applyForWidget) { addFollower( widget, data -> dataToStateGetter.apply(index, data), @@ -108,7 +108,7 @@ public class CoverDataControllerWidget extends Da * @param dataUpdater (index of button, current cover data) -> new cover data */ public CoverDataIndexedControllerWidget_CycleButtons(Supplier coverDataGetter, - Function coverDataSetter, GT_CoverBehaviorBase coverBehavior, + Function coverDataSetter, CoverBehaviorBase coverBehavior, BiFunction dataToStateGetter, BiFunction dataUpdater) { super(coverDataGetter, coverDataSetter, coverBehavior); this.dataToStateGetter = dataToStateGetter; @@ -120,8 +120,8 @@ public class CoverDataControllerWidget extends Da * @param widget widget to add * @param applyForWidget methods to call for the widget to add */ - public > CoverDataIndexedControllerWidget_CycleButtons addCycleButton( - int index, W widget, Consumer> applyForWidget) { + public > CoverDataIndexedControllerWidget_CycleButtons addCycleButton( + int index, W widget, Consumer> applyForWidget) { addFollower( widget, data -> dataToStateGetter.apply(index, data), diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerCycleButtonWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerCycleButtonWidget.java new file mode 100644 index 0000000000..4408dbd54e --- /dev/null +++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerCycleButtonWidget.java @@ -0,0 +1,39 @@ +package gregtech.common.gui.modularui.widget; + +import java.util.function.Consumer; +import java.util.function.Function; + +import gregtech.api.gui.modularui.IDataFollowerWidget; +import gregtech.api.util.ISerializableObject; + +/** + * Determines button state with cover data. + */ +public class CoverDataFollowerCycleButtonWidget extends CoverCycleButtonWidget + implements IDataFollowerWidget { + + private Function dataToStateGetter; + + public CoverDataFollowerCycleButtonWidget() { + super(); + setGetter(() -> 0); // fake getter; used only for init + setSynced(false, false); + } + + @Override + public CoverDataFollowerCycleButtonWidget setDataToStateGetter(Function dataToStateGetter) { + this.dataToStateGetter = dataToStateGetter; + return this; + } + + @Override + public CoverDataFollowerCycleButtonWidget setStateSetter(Consumer setter) { + super.setSetter(setter); + return this; + } + + @Override + public void updateState(T data) { + setState(dataToStateGetter.apply(data), false, false); + } +} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerNumericWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerNumericWidget.java new file mode 100644 index 0000000000..316109ed64 --- /dev/null +++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerNumericWidget.java @@ -0,0 +1,60 @@ +package gregtech.common.gui.modularui.widget; + +import java.util.function.Consumer; +import java.util.function.Function; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.IDataFollowerWidget; +import gregtech.api.util.ISerializableObject; + +public class CoverDataFollowerNumericWidget extends NumericWidget + implements IDataFollowerWidget { + + private Function dataToStateGetter; + + public CoverDataFollowerNumericWidget() { + super(); + setGetter(() -> 0); // fake getter; used only for init + setSynced(false, false); + setTextColor(Color.WHITE.dark(1)); + setTextAlignment(Alignment.CenterLeft); + setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)); + } + + @Override + public void onPostInit() { + // Widget#onPostInit is called earlier than IDataFollowerWidget#onPostInit, + // so we make sure cursor is set after text is set + super.onPostInit(); + + // On first call #handler does not contain text. + // On second call, it contains correct text to update #lastText, + // but #shouldGetFocus call is skipped by Cursor#updateFocused, + // so we need to manually call this. + if (focusOnGuiOpen) { + shouldGetFocus(); + } + } + + @Override + public CoverDataFollowerNumericWidget setDataToStateGetter(Function dataToStateGetter) { + this.dataToStateGetter = dataToStateGetter; + return this; + } + + @Override + public CoverDataFollowerNumericWidget setStateSetter(Consumer setter) { + super.setSetter(setter::accept); + return this; + } + + @Override + public void updateState(T data) { + setValue(dataToStateGetter.apply(data)); + } + +} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerSlotWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerSlotWidget.java new file mode 100644 index 0000000000..a3995deda0 --- /dev/null +++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerSlotWidget.java @@ -0,0 +1,101 @@ +package gregtech.common.gui.modularui.widget; + +import java.util.function.Consumer; +import java.util.function.Function; + +import net.minecraft.item.ItemStack; + +import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; +import com.gtnewhorizons.modularui.api.widget.Interactable; +import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.gui.modularui.IDataFollowerWidget; +import gregtech.api.util.ISerializableObject; + +public class CoverDataFollowerSlotWidget extends SlotWidget + implements IDataFollowerWidget { + + private Function dataToStateGetter; + private Consumer dataSetter; + + public CoverDataFollowerSlotWidget(BaseSlot slot) { + super(slot); + } + + public CoverDataFollowerSlotWidget(IItemHandlerModifiable handler, int index, boolean phantom) { + this(new BaseSlot(handler, index, phantom)); + } + + public CoverDataFollowerSlotWidget(IItemHandlerModifiable handler, int index) { + this(handler, index, false); + } + + @Override + public CoverDataFollowerSlotWidget setDataToStateGetter(Function dataToStateGetter) { + this.dataToStateGetter = dataToStateGetter; + return this; + } + + @Override + public CoverDataFollowerSlotWidget setStateSetter(Consumer setter) { + this.dataSetter = setter; + return this; + } + + @Override + public void updateState(T data) { + getMcSlot().putStack(dataToStateGetter.apply(data)); + } + + @Override + public void detectAndSendChanges(boolean init) {} + + // Slot sync is handled differently from other DataFollowers, + // so we need to also sync slot content directly to server. + + @Override + public ClickResult onClick(int buttonId, boolean doubleClick) { + if (interactionDisabled) return ClickResult.REJECT; + if (isPhantom()) { + ClickData clickData = ClickData.create(buttonId, doubleClick); + syncToServer(2, clickData::writeToPacket); + phantomClick(clickData); + dataSetter.accept(getMcSlot().getStack()); + return ClickResult.ACCEPT; + } + return ClickResult.REJECT; + } + + @Override + public boolean onMouseScroll(int direction) { + if (interactionDisabled) return false; + if (isPhantom()) { + if (Interactable.hasShiftDown()) { + direction *= 8; + } + final int finalDirection = direction; + syncToServer(3, buffer -> buffer.writeVarIntToBuffer(finalDirection)); + phantomScroll(finalDirection); + dataSetter.accept(getMcSlot().getStack()); + return true; + } + return false; + } + + @Override + public boolean handleDragAndDrop(ItemStack draggedStack, int button) { + if (interactionDisabled) return false; + if (!isPhantom()) return false; + ClickData clickData = ClickData.create(button, false); + syncToServer(5, buffer -> { + clickData.writeToPacket(buffer); + NetworkUtils.writeItemStack(buffer, draggedStack); + }); + phantomClick(clickData, draggedStack); + dataSetter.accept(getMcSlot().getStack()); + draggedStack.stackSize = 0; + return true; + } +} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerTextFieldWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerTextFieldWidget.java new file mode 100644 index 0000000000..95ceafaadd --- /dev/null +++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerTextFieldWidget.java @@ -0,0 +1,134 @@ +package gregtech.common.gui.modularui.widget; + +import java.util.function.Consumer; +import java.util.function.Function; + +import net.minecraft.client.gui.GuiScreen; + +import com.gtnewhorizon.gtnhlib.util.parsing.MathExpressionParser; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.IDataFollowerWidget; +import gregtech.api.util.ISerializableObject; + +public class CoverDataFollowerTextFieldWidget extends TextFieldWidget + implements IDataFollowerWidget { + + private Function dataToStateGetter; + + public CoverDataFollowerTextFieldWidget() { + super(); + setGetter(() -> ""); // fake getter; used only for init + setSynced(false, false); + setTextColor(Color.WHITE.dark(1)); + setTextAlignment(Alignment.CenterLeft); + setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)); + } + + @Override + public void onPostInit() { + // Widget#onPostInit is called earlier than IDataFollowerWidget#onPostInit, + // so we make sure cursor is set after text is set + super.onPostInit(); + + // On first call #handler does not contain text. + // On second call, it contains correct text to update #lastText, + // but #shouldGetFocus call is skipped by Cursor#updateFocused, + // so we need to manually call this. + if (focusOnGuiOpen) { + shouldGetFocus(); + } + } + + @Override + public CoverDataFollowerTextFieldWidget setDataToStateGetter(Function dataToStateGetter) { + this.dataToStateGetter = dataToStateGetter; + return this; + } + + @Override + public CoverDataFollowerTextFieldWidget setStateSetter(Consumer setter) { + super.setSetter(setter); + return this; + } + + @Override + public void updateState(T data) { + setText(dataToStateGetter.apply(data)); + } + + /** + * @deprecated Use {@link CoverDataFollowerNumericWidget} + */ + @Deprecated + public CoverDataFollowerTextFieldWidget setOnScrollNumbers(int baseStep, int ctrlStep, int shiftStep) { + setOnScrollNumbers((val, direction) -> { + int step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) + * direction; + try { + val = Math.addExact(val, step); + } catch (ArithmeticException ignored) { + val = Integer.MAX_VALUE; + } + return val; + }); + return this; + } + + /** + * @deprecated Use {@link CoverDataFollowerNumericWidget} + */ + @Deprecated + public CoverDataFollowerTextFieldWidget setOnScrollNumbers() { + return setOnScrollNumbers(1, 50, 1000); + } + + /** + * @deprecated Use {@link CoverDataFollowerNumericWidget} + */ + @Deprecated + public CoverDataFollowerTextFieldWidget setOnScrollText(int baseStep, int ctrlStep, int shiftStep) { + setOnScroll((text, direction) -> { + int val = (int) MathExpressionParser.parse(text); + int step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) + * direction; + try { + val = Math.addExact(val, step); + } catch (ArithmeticException ignored) { + val = Integer.MAX_VALUE; + } + return this.getDecimalFormatter() + .format(val); + }); + return this; + } + + /** + * @deprecated Use {@link CoverDataFollowerNumericWidget} + */ + @Deprecated + public CoverDataFollowerTextFieldWidget setOnScrollText() { + return setOnScrollText(1, 5, 50); + } + + /** + * @deprecated Use {@link CoverDataFollowerNumericWidget} + */ + @Deprecated + public CoverDataFollowerTextFieldWidget setOnScrollNumbersLong(long baseStep, long ctrlStep, long shiftStep) { + setOnScrollNumbersLong((val, direction) -> { + long step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) + * direction; + try { + val = Math.addExact(val, step); + } catch (ArithmeticException ignored) { + val = Long.MAX_VALUE; + } + return val; + }); + return this; + } +} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerToggleButtonWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerToggleButtonWidget.java new file mode 100644 index 0000000000..0fcac5009c --- /dev/null +++ b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollowerToggleButtonWidget.java @@ -0,0 +1,86 @@ +package gregtech.common.gui.modularui.widget; + +import java.util.function.Consumer; +import java.util.function.Function; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.IDataFollowerWidget; +import gregtech.api.util.ISerializableObject; + +public class CoverDataFollowerToggleButtonWidget extends CoverCycleButtonWidget + implements IDataFollowerWidget { + + private Function dataToStateGetter; + + public CoverDataFollowerToggleButtonWidget() { + super(); + setGetter(() -> 0); // fake getter; used only for init + setSynced(false, false); + setLength(2); + } + + @Override + public CoverDataFollowerToggleButtonWidget setDataToStateGetter(Function dataToStateGetter) { + this.dataToStateGetter = dataToStateGetter; + return this; + } + + @Override + public CoverDataFollowerToggleButtonWidget setStateSetter(Consumer setter) { + super.setSetter(val -> setter.accept(val == 1)); + return this; + } + + @Override + public void updateState(T data) { + setState(dataToStateGetter.apply(data) ? 1 : 0, false, false); + } + + public CoverDataFollowerToggleButtonWidget setToggleTexture(IDrawable active, IDrawable inactive) { + setTextureGetter(state -> state == 1 ? active : inactive); + return this; + } + + public static CoverDataFollowerToggleButtonWidget ofCheckAndCross() { + return new CoverDataFollowerToggleButtonWidget() + .setToggleTexture(GTUITextures.OVERLAY_BUTTON_CHECKMARK, GTUITextures.OVERLAY_BUTTON_CROSS); + } + + public static CoverDataFollowerToggleButtonWidget ofCheck() { + return new CoverDataFollowerToggleButtonWidget() + .setToggleTexture(GTUITextures.OVERLAY_BUTTON_CHECKMARK, GTUITextures.TRANSPARENT); + } + + public static CoverDataFollowerToggleButtonWidget ofRedstone() { + return new CoverDataFollowerToggleButtonWidget() + .setToggleTexture(GTUITextures.OVERLAY_BUTTON_REDSTONE_ON, GTUITextures.OVERLAY_BUTTON_REDSTONE_OFF); + } + + public static CoverDataFollowerToggleButtonWidget ofDisableable() { + return new CoverDataFollower_DisableableToggleButtonWidget<>(); + } + + /** + * Disables clicking if button is already pressed. + */ + public static class CoverDataFollower_DisableableToggleButtonWidget + extends CoverDataFollowerToggleButtonWidget { + + public CoverDataFollower_DisableableToggleButtonWidget() { + super(); + } + + @Override + protected boolean canClick() { + return getState() == 0; + } + + @Override + public IDrawable[] getBackground() { + if (!canClick()) return new IDrawable[] { GTUITextures.BUTTON_COVER_NORMAL_DISABLED }; + return super.getBackground(); + } + } +} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_CycleButtonWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_CycleButtonWidget.java deleted file mode 100644 index ec7d31ca7e..0000000000 --- a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_CycleButtonWidget.java +++ /dev/null @@ -1,39 +0,0 @@ -package gregtech.common.gui.modularui.widget; - -import java.util.function.Consumer; -import java.util.function.Function; - -import gregtech.api.gui.modularui.IDataFollowerWidget; -import gregtech.api.util.ISerializableObject; - -/** - * Determines button state with cover data. - */ -public class CoverDataFollower_CycleButtonWidget extends CoverCycleButtonWidget - implements IDataFollowerWidget { - - private Function dataToStateGetter; - - public CoverDataFollower_CycleButtonWidget() { - super(); - setGetter(() -> 0); // fake getter; used only for init - setSynced(false, false); - } - - @Override - public CoverDataFollower_CycleButtonWidget setDataToStateGetter(Function dataToStateGetter) { - this.dataToStateGetter = dataToStateGetter; - return this; - } - - @Override - public CoverDataFollower_CycleButtonWidget setStateSetter(Consumer setter) { - super.setSetter(setter); - return this; - } - - @Override - public void updateState(T data) { - setState(dataToStateGetter.apply(data), false, false); - } -} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_NumericWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_NumericWidget.java deleted file mode 100644 index f641ed090b..0000000000 --- a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_NumericWidget.java +++ /dev/null @@ -1,60 +0,0 @@ -package gregtech.common.gui.modularui.widget; - -import java.util.function.Consumer; -import java.util.function.Function; - -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.IDataFollowerWidget; -import gregtech.api.util.ISerializableObject; - -public class CoverDataFollower_NumericWidget extends NumericWidget - implements IDataFollowerWidget { - - private Function dataToStateGetter; - - public CoverDataFollower_NumericWidget() { - super(); - setGetter(() -> 0); // fake getter; used only for init - setSynced(false, false); - setTextColor(Color.WHITE.dark(1)); - setTextAlignment(Alignment.CenterLeft); - setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)); - } - - @Override - public void onPostInit() { - // Widget#onPostInit is called earlier than IDataFollowerWidget#onPostInit, - // so we make sure cursor is set after text is set - super.onPostInit(); - - // On first call #handler does not contain text. - // On second call, it contains correct text to update #lastText, - // but #shouldGetFocus call is skipped by Cursor#updateFocused, - // so we need to manually call this. - if (focusOnGuiOpen) { - shouldGetFocus(); - } - } - - @Override - public CoverDataFollower_NumericWidget setDataToStateGetter(Function dataToStateGetter) { - this.dataToStateGetter = dataToStateGetter; - return this; - } - - @Override - public CoverDataFollower_NumericWidget setStateSetter(Consumer setter) { - super.setSetter(setter::accept); - return this; - } - - @Override - public void updateState(T data) { - setValue(dataToStateGetter.apply(data)); - } - -} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_SlotWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_SlotWidget.java deleted file mode 100644 index 0b827bfbc6..0000000000 --- a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_SlotWidget.java +++ /dev/null @@ -1,101 +0,0 @@ -package gregtech.common.gui.modularui.widget; - -import java.util.function.Consumer; -import java.util.function.Function; - -import net.minecraft.item.ItemStack; - -import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; -import com.gtnewhorizons.modularui.api.widget.Interactable; -import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.gui.modularui.IDataFollowerWidget; -import gregtech.api.util.ISerializableObject; - -public class CoverDataFollower_SlotWidget extends SlotWidget - implements IDataFollowerWidget { - - private Function dataToStateGetter; - private Consumer dataSetter; - - public CoverDataFollower_SlotWidget(BaseSlot slot) { - super(slot); - } - - public CoverDataFollower_SlotWidget(IItemHandlerModifiable handler, int index, boolean phantom) { - this(new BaseSlot(handler, index, phantom)); - } - - public CoverDataFollower_SlotWidget(IItemHandlerModifiable handler, int index) { - this(handler, index, false); - } - - @Override - public CoverDataFollower_SlotWidget setDataToStateGetter(Function dataToStateGetter) { - this.dataToStateGetter = dataToStateGetter; - return this; - } - - @Override - public CoverDataFollower_SlotWidget setStateSetter(Consumer setter) { - this.dataSetter = setter; - return this; - } - - @Override - public void updateState(T data) { - getMcSlot().putStack(dataToStateGetter.apply(data)); - } - - @Override - public void detectAndSendChanges(boolean init) {} - - // Slot sync is handled differently from other DataFollowers, - // so we need to also sync slot content directly to server. - - @Override - public ClickResult onClick(int buttonId, boolean doubleClick) { - if (interactionDisabled) return ClickResult.REJECT; - if (isPhantom()) { - ClickData clickData = ClickData.create(buttonId, doubleClick); - syncToServer(2, clickData::writeToPacket); - phantomClick(clickData); - dataSetter.accept(getMcSlot().getStack()); - return ClickResult.ACCEPT; - } - return ClickResult.REJECT; - } - - @Override - public boolean onMouseScroll(int direction) { - if (interactionDisabled) return false; - if (isPhantom()) { - if (Interactable.hasShiftDown()) { - direction *= 8; - } - final int finalDirection = direction; - syncToServer(3, buffer -> buffer.writeVarIntToBuffer(finalDirection)); - phantomScroll(finalDirection); - dataSetter.accept(getMcSlot().getStack()); - return true; - } - return false; - } - - @Override - public boolean handleDragAndDrop(ItemStack draggedStack, int button) { - if (interactionDisabled) return false; - if (!isPhantom()) return false; - ClickData clickData = ClickData.create(button, false); - syncToServer(5, buffer -> { - clickData.writeToPacket(buffer); - NetworkUtils.writeItemStack(buffer, draggedStack); - }); - phantomClick(clickData, draggedStack); - dataSetter.accept(getMcSlot().getStack()); - draggedStack.stackSize = 0; - return true; - } -} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java deleted file mode 100644 index 1907aaf22f..0000000000 --- a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_TextFieldWidget.java +++ /dev/null @@ -1,134 +0,0 @@ -package gregtech.common.gui.modularui.widget; - -import java.util.function.Consumer; -import java.util.function.Function; - -import net.minecraft.client.gui.GuiScreen; - -import com.gtnewhorizon.gtnhlib.util.parsing.MathExpressionParser; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.IDataFollowerWidget; -import gregtech.api.util.ISerializableObject; - -public class CoverDataFollower_TextFieldWidget extends TextFieldWidget - implements IDataFollowerWidget { - - private Function dataToStateGetter; - - public CoverDataFollower_TextFieldWidget() { - super(); - setGetter(() -> ""); // fake getter; used only for init - setSynced(false, false); - setTextColor(Color.WHITE.dark(1)); - setTextAlignment(Alignment.CenterLeft); - setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)); - } - - @Override - public void onPostInit() { - // Widget#onPostInit is called earlier than IDataFollowerWidget#onPostInit, - // so we make sure cursor is set after text is set - super.onPostInit(); - - // On first call #handler does not contain text. - // On second call, it contains correct text to update #lastText, - // but #shouldGetFocus call is skipped by Cursor#updateFocused, - // so we need to manually call this. - if (focusOnGuiOpen) { - shouldGetFocus(); - } - } - - @Override - public CoverDataFollower_TextFieldWidget setDataToStateGetter(Function dataToStateGetter) { - this.dataToStateGetter = dataToStateGetter; - return this; - } - - @Override - public CoverDataFollower_TextFieldWidget setStateSetter(Consumer setter) { - super.setSetter(setter); - return this; - } - - @Override - public void updateState(T data) { - setText(dataToStateGetter.apply(data)); - } - - /** - * @deprecated Use {@link CoverDataFollower_NumericWidget} - */ - @Deprecated - public CoverDataFollower_TextFieldWidget setOnScrollNumbers(int baseStep, int ctrlStep, int shiftStep) { - setOnScrollNumbers((val, direction) -> { - int step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) - * direction; - try { - val = Math.addExact(val, step); - } catch (ArithmeticException ignored) { - val = Integer.MAX_VALUE; - } - return val; - }); - return this; - } - - /** - * @deprecated Use {@link CoverDataFollower_NumericWidget} - */ - @Deprecated - public CoverDataFollower_TextFieldWidget setOnScrollNumbers() { - return setOnScrollNumbers(1, 50, 1000); - } - - /** - * @deprecated Use {@link CoverDataFollower_NumericWidget} - */ - @Deprecated - public CoverDataFollower_TextFieldWidget setOnScrollText(int baseStep, int ctrlStep, int shiftStep) { - setOnScroll((text, direction) -> { - int val = (int) MathExpressionParser.parse(text); - int step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) - * direction; - try { - val = Math.addExact(val, step); - } catch (ArithmeticException ignored) { - val = Integer.MAX_VALUE; - } - return this.getDecimalFormatter() - .format(val); - }); - return this; - } - - /** - * @deprecated Use {@link CoverDataFollower_NumericWidget} - */ - @Deprecated - public CoverDataFollower_TextFieldWidget setOnScrollText() { - return setOnScrollText(1, 5, 50); - } - - /** - * @deprecated Use {@link CoverDataFollower_NumericWidget} - */ - @Deprecated - public CoverDataFollower_TextFieldWidget setOnScrollNumbersLong(long baseStep, long ctrlStep, long shiftStep) { - setOnScrollNumbersLong((val, direction) -> { - long step = (GuiScreen.isShiftKeyDown() ? shiftStep : GuiScreen.isCtrlKeyDown() ? ctrlStep : baseStep) - * direction; - try { - val = Math.addExact(val, step); - } catch (ArithmeticException ignored) { - val = Long.MAX_VALUE; - } - return val; - }); - return this; - } -} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_ToggleButtonWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_ToggleButtonWidget.java deleted file mode 100644 index 6f798a93d5..0000000000 --- a/src/main/java/gregtech/common/gui/modularui/widget/CoverDataFollower_ToggleButtonWidget.java +++ /dev/null @@ -1,86 +0,0 @@ -package gregtech.common.gui.modularui.widget; - -import java.util.function.Consumer; -import java.util.function.Function; - -import com.gtnewhorizons.modularui.api.drawable.IDrawable; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.IDataFollowerWidget; -import gregtech.api.util.ISerializableObject; - -public class CoverDataFollower_ToggleButtonWidget extends CoverCycleButtonWidget - implements IDataFollowerWidget { - - private Function dataToStateGetter; - - public CoverDataFollower_ToggleButtonWidget() { - super(); - setGetter(() -> 0); // fake getter; used only for init - setSynced(false, false); - setLength(2); - } - - @Override - public CoverDataFollower_ToggleButtonWidget setDataToStateGetter(Function dataToStateGetter) { - this.dataToStateGetter = dataToStateGetter; - return this; - } - - @Override - public CoverDataFollower_ToggleButtonWidget setStateSetter(Consumer setter) { - super.setSetter(val -> setter.accept(val == 1)); - return this; - } - - @Override - public void updateState(T data) { - setState(dataToStateGetter.apply(data) ? 1 : 0, false, false); - } - - public CoverDataFollower_ToggleButtonWidget setToggleTexture(IDrawable active, IDrawable inactive) { - setTextureGetter(state -> state == 1 ? active : inactive); - return this; - } - - public static CoverDataFollower_ToggleButtonWidget ofCheckAndCross() { - return new CoverDataFollower_ToggleButtonWidget() - .setToggleTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK, GT_UITextures.OVERLAY_BUTTON_CROSS); - } - - public static CoverDataFollower_ToggleButtonWidget ofCheck() { - return new CoverDataFollower_ToggleButtonWidget() - .setToggleTexture(GT_UITextures.OVERLAY_BUTTON_CHECKMARK, GT_UITextures.TRANSPARENT); - } - - public static CoverDataFollower_ToggleButtonWidget ofRedstone() { - return new CoverDataFollower_ToggleButtonWidget() - .setToggleTexture(GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON, GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF); - } - - public static CoverDataFollower_ToggleButtonWidget ofDisableable() { - return new CoverDataFollower_DisableableToggleButtonWidget<>(); - } - - /** - * Disables clicking if button is already pressed. - */ - public static class CoverDataFollower_DisableableToggleButtonWidget - extends CoverDataFollower_ToggleButtonWidget { - - public CoverDataFollower_DisableableToggleButtonWidget() { - super(); - } - - @Override - protected boolean canClick() { - return getState() == 0; - } - - @Override - public IDrawable[] getBackground() { - if (!canClick()) return new IDrawable[] { GT_UITextures.BUTTON_COVER_NORMAL_DISABLED }; - return super.getBackground(); - } - } -} diff --git a/src/main/java/gregtech/common/gui/modularui/widget/ItemWatcherSlotWidget.java b/src/main/java/gregtech/common/gui/modularui/widget/ItemWatcherSlotWidget.java index 5200c1a416..9e458af6a5 100644 --- a/src/main/java/gregtech/common/gui/modularui/widget/ItemWatcherSlotWidget.java +++ b/src/main/java/gregtech/common/gui/modularui/widget/ItemWatcherSlotWidget.java @@ -9,7 +9,7 @@ import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; /** * Watches specific ItemStack and pulls changes from it. Player cannot interact with slot, other than viewing NEI recipe @@ -33,7 +33,7 @@ public class ItemWatcherSlotWidget extends SlotWidget { @Override public void detectAndSendChanges(boolean init) { ItemStack target = getter.get(); - if (init || !GT_Utility.areStacksEqual(lastItem, target)) { + if (init || !GTUtility.areStacksEqual(lastItem, target)) { ItemStack toPut; if (target != null) { toPut = target.copy(); diff --git a/src/main/java/gregtech/common/items/CombType.java b/src/main/java/gregtech/common/items/CombType.java index 84ca2fa493..0a659f0684 100644 --- a/src/main/java/gregtech/common/items/CombType.java +++ b/src/main/java/gregtech/common/items/CombType.java @@ -5,7 +5,7 @@ import java.util.Arrays; import org.apache.commons.lang3.text.WordUtils; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; public enum CombType { @@ -243,7 +243,7 @@ public enum CombType { this.chance = chance; this.showInList = show; this.color = new int[] { color1, color2 }; - this.localizedName = GT_LanguageManager + this.localizedName = GTLanguageManager .addStringLocalization("comb." + pName, WordUtils.capitalize(pName.replaceAll("_", " ")) + " Comb"); } diff --git a/src/main/java/gregtech/common/items/DropType.java b/src/main/java/gregtech/common/items/DropType.java index 1f9523a5b7..00525a0da6 100644 --- a/src/main/java/gregtech/common/items/DropType.java +++ b/src/main/java/gregtech/common/items/DropType.java @@ -3,7 +3,7 @@ package gregtech.common.items; import org.apache.commons.lang3.text.WordUtils; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; public enum DropType { @@ -36,7 +36,7 @@ public enum DropType { public String getName() { - return GT_LanguageManager.addStringLocalization("drop." + this.name, WordUtils.capitalize(this.name) + " Drop"); + return GTLanguageManager.addStringLocalization("drop." + this.name, WordUtils.capitalize(this.name) + " Drop"); } public int[] getColours() { diff --git a/src/main/java/gregtech/common/items/GT_AdvancedSensorCard_Item.java b/src/main/java/gregtech/common/items/GT_AdvancedSensorCard_Item.java deleted file mode 100644 index 723a7ffad5..0000000000 --- a/src/main/java/gregtech/common/items/GT_AdvancedSensorCard_Item.java +++ /dev/null @@ -1,330 +0,0 @@ -package gregtech.common.items; - -import static gregtech.api.enums.Mods.GregTech; -import static gregtech.common.covers.GT_Cover_Metrics_Transmitter.CARD_STATE_KEY; -import static gregtech.common.covers.GT_Cover_Metrics_Transmitter.FREQUENCY_LSB_KEY; -import static gregtech.common.covers.GT_Cover_Metrics_Transmitter.FREQUENCY_MSB_KEY; -import static gregtech.common.covers.GT_Cover_Metrics_Transmitter.MACHINE_KEY; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.UUID; -import java.util.function.Predicate; -import java.util.stream.IntStream; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.common.misc.GlobalMetricsCoverDatabase; -import gregtech.common.misc.GlobalMetricsCoverDatabase.State; -import shedar.mods.ic2.nuclearcontrol.api.CardState; -import shedar.mods.ic2.nuclearcontrol.api.ICardWrapper; -import shedar.mods.ic2.nuclearcontrol.api.IPanelDataSource; -import shedar.mods.ic2.nuclearcontrol.api.PanelSetting; -import shedar.mods.ic2.nuclearcontrol.api.PanelString; - -@SuppressWarnings("unused") -public class GT_AdvancedSensorCard_Item extends Item implements IPanelDataSource { - - public static final UUID CARD_TYPE_ID = UUID.fromString("ff952e84-7608-4c4a-85af-dd6e1aa27fc7"); - - // This has obfuscated formatting, so no need to localize it. - private static final String SELF_DESTRUCTED_OUTPUT = EnumChatFormatting.OBFUSCATED + "critical error" - + EnumChatFormatting.RESET; - - private static final ImmutableList DECONSTRUCTED_OUTPUT = ImmutableList.of( - StatCollector.translateToLocal("gt.item.adv_sensor_card.error.deconstructed.1"), - StatCollector.translateToLocal("gt.item.adv_sensor_card.error.deconstructed.2")); - - private static final String NO_DATA_FOUND = StatCollector.translateToLocal("gt.item.adv_sensor_card.error.no_data"); - - private static final String MACHINE_NAME_KEY = "client_machine_name"; - private static final String OUTPUT_ENTRY_KEY = "client_entry_%d"; - private static final String OUTPUT_ENTRY_LENGTH_KEY = "client_entry_length"; - - private int payloadSize = 0; - - @SideOnly(Side.CLIENT) - private IIcon normalIcon; - @SideOnly(Side.CLIENT) - private IIcon selfDestructedIcon; - - @SuppressWarnings("unused") - public GT_AdvancedSensorCard_Item() { - super(); - - GameRegistry.registerItem(this, "gt.advancedsensorcard", GregTech.ID); - setUnlocalizedName("gt.advancedsensorcard"); - setMaxStackSize(1); - setNoRepair(); - } - - @Override - public void addInformation(final ItemStack itemStack, final EntityPlayer player, final List tooltip, - final boolean p_77624_4_) { - super.addInformation(itemStack, player, tooltip, p_77624_4_); - - final Optional cardState = getCardState(itemStack); - if (cardState.isPresent()) { - final State state = cardState.get(); - - if (state == State.SELF_DESTRUCTED) { - tooltip.add(StatCollector.translateToLocal("gt.item.adv_sensor_card.tooltip.fried.1")); - tooltip.add(StatCollector.translateToLocal("gt.item.adv_sensor_card.tooltip.fried.2")); - tooltip.add(StatCollector.translateToLocal("gt.item.adv_sensor_card.tooltip.fried.3")); - } else { - getMachineName(itemStack).ifPresent( - machineName -> tooltip.add( - StatCollector - .translateToLocalFormatted("gt.item.adv_sensor_card.tooltip.machine", machineName))); - getUUID(itemStack).ifPresent( - uuid -> tooltip.add( - StatCollector - .translateToLocalFormatted("gt.item.adv_sensor_card.tooltip.frequency", uuid.toString()))); - } - } else { - tooltip.add(StatCollector.translateToLocal("gt.item.adv_sensor_card.tooltip.recipe_hint")); - } - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aOutputSubItems) {} - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(final IIconRegister aIconRegister) { - super.registerIcons(aIconRegister); - itemIcon = aIconRegister.registerIcon(GregTech.ID + ":gt.advancedsensorcard"); - normalIcon = itemIcon; - selfDestructedIcon = aIconRegister.registerIcon(GregTech.ID + ":gt.advancedsensorcardburned"); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(final ItemStack stack, final int renderPass) { - return getIconIndex(stack); - } - - @Override - public IIcon getIconIndex(final ItemStack itemStack) { - return getCardState(itemStack).filter(Predicate.isEqual(State.SELF_DESTRUCTED)) - .map(ignored -> selfDestructedIcon) - .orElse(normalIcon); - } - - @Override - public CardState update(TileEntity tileEntity, ICardWrapper card, int maxRange) { - return update(tileEntity.getWorldObj(), card, maxRange); - } - - @Override - public CardState update(World world, ICardWrapper card, int maxRange) { - final Optional optionalData = getDataFromDatabase(card); - - optionalData.ifPresent(data -> { - final State machineState = data.getState(); - reconcileSelfDestructedCard(card.getItemStack(), machineState); - card.setInt(CARD_STATE_KEY, machineState.getType()); - - getMachineName(card.getItemStack()) - .ifPresent(name -> card.setString(MACHINE_NAME_KEY, machineState == State.SELF_DESTRUCTED ? "" : name)); - - final ImmutableList.Builder builder = ImmutableList.builder(); - switch (machineState) { - case SELF_DESTRUCTED -> builder.add(SELF_DESTRUCTED_OUTPUT); - case HOST_DECONSTRUCTED -> builder.addAll(DECONSTRUCTED_OUTPUT); - case OPERATIONAL -> { - data.getCoordinates() - .ifPresent( - coordinates -> builder.add( - StatCollector.translateToLocalFormatted( - "gt.item.adv_sensor_card.dimension", - coordinates.getDimension()), - StatCollector.translateToLocalFormatted( - "gt.item.adv_sensor_card.coords", - coordinates.getLocalizedCoordinates()))); - - data.getPayload() - .ifPresent(builder::addAll); - } - default -> builder.add(NO_DATA_FOUND); - } - - final List payload = builder.build(); - card.setInt(OUTPUT_ENTRY_LENGTH_KEY, payload.size()); - for (int i = 0; i < payload.size(); i++) { - final String payloadItem = payload.get(i); - if (!payloadItem.isEmpty()) { - card.setString(String.format(OUTPUT_ENTRY_KEY, i), payloadItem); - } - } - }); - - return CardState.OK; - } - - @Override - public List getStringData(final int displaySettings, final ICardWrapper card, - final boolean showLabels) { - final List returned = new ArrayList<>(); - final String machineName = card.getString(MACHINE_NAME_KEY); - final int bitmaskOffset; - - payloadSize = card.getInt(OUTPUT_ENTRY_LENGTH_KEY); - - if (!machineName.isEmpty() && (displaySettings & 1) != 0) { - returned.add(panelString(machineName, true)); - payloadSize += 1; - bitmaskOffset = 1; - } else { - bitmaskOffset = 0; - } - - // Not reusing payloadSize here because it can be conditionally mutated. - IntStream.range(0, card.getInt(OUTPUT_ENTRY_LENGTH_KEY)) - .forEach(i -> { - if ((displaySettings & 1 << (i + bitmaskOffset)) != 0) { - returned.add(panelString(card.getString(String.format(OUTPUT_ENTRY_KEY, i)))); - } - }); - - return returned; - } - - @Override - public List getSettingsList() { - return payloadSize == 0 ? ImmutableList.of() - : ImmutableList.copyOf( - IntStream.range(0, Math.min(payloadSize, 31)) - .mapToObj(i -> new PanelSetting(String.valueOf(i + 1), 1 << i, getCardType())) - .iterator()); - } - - @Override - public UUID getCardType() { - return CARD_TYPE_ID; - } - - @Override - public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int slot, boolean isHeld) { - super.onUpdate(stack, worldIn, entityIn, slot, isHeld); - // At the time of this comment's writing, there are 52 matches of the regex: - // /% \d+0 \)?\s*== 0/ in the code base, indicating an over-reliance on events happening on either the 10th or - // 20th tick. Let's tick on something slightly off of that. A prime number will do nicely. - if ((worldIn.getWorldTime() % 20) == 13) { - getDataFromDatabase(stack).ifPresent(data -> { - reconcileSelfDestructedCard(stack, data.getState()); - if (!stack.hasTagCompound()) { - stack.setTagCompound(new NBTTagCompound()); - } - - stack.getTagCompound() - .setInteger( - CARD_STATE_KEY, - data.getState() - .getType()); - }); - } - } - - private void reconcileSelfDestructedCard(ItemStack stack, State newState) { - getUUID(stack).ifPresent(uuid -> getCardState(stack).ifPresent(oldState -> { - if (newState == State.SELF_DESTRUCTED && oldState != State.SELF_DESTRUCTED) { - GlobalMetricsCoverDatabase.clearSelfDestructedFrequency(uuid); - } - })); - - } - - @NotNull - private Optional getCardState(ICardWrapper card) { - return getCardState(card.getItemStack()); - } - - @NotNull - private Optional getCardState(ItemStack itemStack) { - if (itemStack.hasTagCompound() && itemStack.getTagCompound() - .hasKey(CARD_STATE_KEY)) { - return State.find( - itemStack.getTagCompound() - .getInteger(CARD_STATE_KEY)); - } - - return Optional.empty(); - } - - @NotNull - private Optional getUUID(ItemStack stack) { - if (stack.hasTagCompound()) { - NBTTagCompound nbt = stack.getTagCompound(); - if (nbt.hasKey(FREQUENCY_LSB_KEY) && nbt.hasKey(FREQUENCY_MSB_KEY)) { - return Optional.of(new UUID(nbt.getLong(FREQUENCY_MSB_KEY), nbt.getLong(FREQUENCY_LSB_KEY))); - } - } - - return Optional.empty(); - } - - @NotNull - private Optional getMachineName(ItemStack stack) { - if (stack.hasTagCompound() && stack.getTagCompound() - .hasKey(MACHINE_KEY)) { - try { - final ItemStack machine = ItemStack.loadItemStackFromNBT( - stack.getTagCompound() - .getCompoundTag(MACHINE_KEY)); - if (machine != null) { - return Optional.of(machine.getDisplayName()); - } - } catch (Exception ignored) {} - } - - return Optional.empty(); - } - - @NotNull - private Optional getDataFromDatabase(ICardWrapper card) { - return getDataFromDatabase(card.getItemStack()); - } - - @NotNull - private Optional getDataFromDatabase(ItemStack stack) { - return getUUID(stack).flatMap(GlobalMetricsCoverDatabase::getData); - } - - @NotNull - private static PanelString panelString(String info) { - return panelString(info, false); - } - - @NotNull - private static PanelString panelString(String info, boolean center) { - final PanelString panelString = new PanelString(); - if (center) { - panelString.textCenter = info; - } else { - panelString.textLeft = info; - } - return panelString; - - } -} diff --git a/src/main/java/gregtech/common/items/GT_DepletetCell_Item.java b/src/main/java/gregtech/common/items/GT_DepletetCell_Item.java deleted file mode 100644 index df14adc39b..0000000000 --- a/src/main/java/gregtech/common/items/GT_DepletetCell_Item.java +++ /dev/null @@ -1,49 +0,0 @@ -package gregtech.common.items; - -import net.minecraft.item.ItemStack; - -import gregtech.api.items.GT_RadioactiveCellIC_Item; -import ic2.api.reactor.IReactor; - -public class GT_DepletetCell_Item extends GT_RadioactiveCellIC_Item { - - public GT_DepletetCell_Item(String aUnlocalized, String aEnglish, int aRadiation) { - super(aUnlocalized, aEnglish, 1, 1, 0, aRadiation, 0, null, false); - } - - @Override - public void processChamber(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2, - boolean paramBoolean) {} - - @Override - public boolean acceptUraniumPulse(IReactor paramIReactor, ItemStack paramItemStack1, ItemStack paramItemStack2, - int paramInt1, int paramInt2, int paramInt3, int paramInt4, boolean paramBoolean) { - return false; - } - - @Override - public boolean canStoreHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2) { - return false; - } - - @Override - public int getMaxHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2) { - return 0; - } - - @Override - public int getCurrentHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2) { - return 0; - } - - @Override - public int alterHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2, - int paramInt3) { - return 0; - } - - @Override - public float influenceExplosion(IReactor paramIReactor, ItemStack paramItemStack) { - return 0.0F; - } -} diff --git a/src/main/java/gregtech/common/items/GT_FluidDisplayItem.java b/src/main/java/gregtech/common/items/GT_FluidDisplayItem.java deleted file mode 100644 index 850fe21811..0000000000 --- a/src/main/java/gregtech/common/items/GT_FluidDisplayItem.java +++ /dev/null @@ -1,181 +0,0 @@ -package gregtech.common.items; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.stream.Stream; - -import net.minecraft.client.Minecraft; -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 net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.items.GT_Generic_Item; -import gregtech.api.util.GT_Utility; - -public class GT_FluidDisplayItem extends GT_Generic_Item { - - private static final Map sFluidTooltips = new HashMap<>(); - - public GT_FluidDisplayItem() { - super("GregTech_FluidDisplay", "Fluid Display", null); - ItemList.Display_Fluid.set(this); - } - - @Override - protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - if (FluidRegistry.getFluid(aStack.getItemDamage()) != null) { - String tChemicalFormula = getChemicalFormula( - new FluidStack(FluidRegistry.getFluid(aStack.getItemDamage()), 1)); - if (!tChemicalFormula.isEmpty()) - aList.add(EnumChatFormatting.YELLOW + tChemicalFormula + EnumChatFormatting.RESET); - } - NBTTagCompound aNBT = aStack.getTagCompound(); - if (GT_Values.D1 || Minecraft.getMinecraft().gameSettings.advancedItemTooltips) { - Fluid tFluid = FluidRegistry.getFluid(aStack.getItemDamage()); - if (tFluid != null) { - aList.add("Registry: " + tFluid.getName()); - } - } - if (aNBT != null) { - long tToolTipAmount = aNBT.getLong("mFluidDisplayAmount"); - if (tToolTipAmount > 0L) { - aList.add( - EnumChatFormatting.BLUE + "Amount: " - + GT_Utility.formatNumbers(tToolTipAmount) - + " L" - + EnumChatFormatting.GRAY); - } - aList.add( - EnumChatFormatting.RED + "Temperature: " - + GT_Utility.formatNumbers(aNBT.getLong("mFluidDisplayHeat")) - + " K" - + EnumChatFormatting.GRAY); - aList.add( - EnumChatFormatting.GREEN - + String.format(transItem("018", "State: %s"), aNBT.getBoolean("mFluidState") ? "Gas" : "Liquid") - + EnumChatFormatting.GRAY); - } - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aIconRegister) {} - - @Override - public IIcon getIconFromDamage(int aMetaData) { - return Stream.of(FluidRegistry.getFluid(aMetaData), FluidRegistry.WATER) - .filter(Objects::nonNull) - .map(Fluid::getStillIcon) - .filter(Objects::nonNull) - .findFirst() - .orElseThrow(IllegalStateException::new); - } - - @Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack aStack, int aRenderPass) { - Fluid tFluid = FluidRegistry.getFluid(aStack.getItemDamage()); - return tFluid == null ? 16777215 : tFluid.getColor(); - } - - @Override - public int getSpriteNumber() { - return 0; - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - if (aStack != null) { - return GT_Utility.getFluidName(FluidRegistry.getFluid(aStack.getItemDamage()), false); - } - return ""; - } - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - if (aStack != null) { - return GT_Utility.getFluidName(FluidRegistry.getFluid(aStack.getItemDamage()), true); - } - return ""; - } - - @SideOnly(Side.CLIENT) - public static String getChemicalFormula(FluidStack aRealFluid) { - return sFluidTooltips.computeIfAbsent(aRealFluid.getFluid(), fluid -> { - for (ItemStack tContainer : GT_Utility.getContainersFromFluid(aRealFluid)) { - if (isCell(tContainer)) { - Materials tMaterial = getMaterialFromCell(tContainer); - if (!tMaterial.equals(Materials._NULL)) { - if (tMaterial.mChemicalFormula.equals("?")) { - return ""; - } else { - return tMaterial.mChemicalFormula; - } - } else { - // For GT++ Fluid Display - // GT++ didn't register a Material in GT, so I have too find the Chemical Formula in its cell's - // tooltip - List tTooltip = tContainer.getTooltip(null, true); - for (String tInfo : tTooltip) { - if (!tInfo.contains(" ") && !tInfo.contains(":") && tTooltip.indexOf(tInfo) != 0) { - return tInfo; - } - } - } - } - } - return ""; - }); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item aItem, CreativeTabs aTab, List aList) { - if (GT_Values.D1) { - int i = 0; - for (int j = FluidRegistry.getMaxID(); i < j; i++) { - ItemStack tStack = GT_Utility.getFluidDisplayStack(FluidRegistry.getFluid(i)); - if (tStack != null) { - aList.add(tStack); - } - } - } - } - - public static boolean isCell(ItemStack tItemStack) { - for (int tOreDict : OreDictionary.getOreIDs(tItemStack)) { - String tOreDictName = OreDictionary.getOreName(tOreDict); - if (tOreDictName.startsWith("cell")) return true; - } - return false; - } - - public static Materials getMaterialFromCell(ItemStack tItemStack) { - for (int tOreDict : OreDictionary.getOreIDs(tItemStack)) { - String tOreDictName = OreDictionary.getOreName(tOreDict); - if (tOreDictName.startsWith("cell")) { - return Materials.getRealMaterial( - tOreDictName.replace("cell", "") - .replace("Molten", "") - .replace("Plasma", "")); - } - } - return Materials._NULL; - } -} diff --git a/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java b/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java deleted file mode 100644 index d0ef03a1ae..0000000000 --- a/src/main/java/gregtech/common/items/GT_IntegratedCircuit_Item.java +++ /dev/null @@ -1,328 +0,0 @@ -package gregtech.common.items; - -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.Mods.GregTech; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.function.BiFunction; -import java.util.function.Predicate; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.FakePlayer; - -import org.apache.commons.lang3.tuple.Pair; - -import com.gtnewhorizons.modularui.api.UIInfos; - -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.OrePrefixes; -import gregtech.api.interfaces.INetworkUpdatableItem; -import gregtech.api.items.GT_Generic_Item; -import gregtech.api.net.GT_Packet_UpdateItem; -import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_Config; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.common.gui.modularui.uifactory.SelectItemUIFactory; - -public class GT_IntegratedCircuit_Item extends GT_Generic_Item implements INetworkUpdatableItem { - - private static final String aTextEmptyRow = " "; - private static final List ALL_VARIANTS = new ArrayList<>(); - protected final IIcon[] mIconDamage = new IIcon[25]; - - public GT_IntegratedCircuit_Item() { - super("integrated_circuit", "Programmed Circuit", ""); - setHasSubtypes(true); - setMaxDamage(0); - - ItemList.Circuit_Integrated.set(this); - - ALL_VARIANTS.add(new ItemStack(this, 0, 0)); - for (int i = 1; i <= 24; i++) { - ItemStack aStack = new ItemStack(this, 0, i); - GregTech_API.registerConfigurationCircuit(aStack, 1); - ALL_VARIANTS.add(aStack); - } - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 0L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { OrePrefixes.circuit.get(Materials.LV) }); - long bits = GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE; - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 1L), - bits, - new Object[] { "d ", " P ", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 2L), - bits, - new Object[] { " d ", " P ", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 3L), - bits, - new Object[] { " d", " P ", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 4L), - bits, - new Object[] { aTextEmptyRow, " Pd", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 5L), - bits, - new Object[] { aTextEmptyRow, " P ", " d", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 6L), - bits, - new Object[] { aTextEmptyRow, " P ", " d ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 7L), - bits, - new Object[] { aTextEmptyRow, " P ", "d ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 8L), - bits, - new Object[] { aTextEmptyRow, "dP ", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 9L), - bits, - new Object[] { "P d", aTextEmptyRow, aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 10L), - bits, - new Object[] { "P ", " d", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 11L), - bits, - new Object[] { "P ", aTextEmptyRow, " d", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 12L), - bits, - new Object[] { "P ", aTextEmptyRow, " d ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 13L), - bits, - new Object[] { " P", aTextEmptyRow, " d", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 14L), - bits, - new Object[] { " P", aTextEmptyRow, " d ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 15L), - bits, - new Object[] { " P", aTextEmptyRow, "d ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 16L), - bits, - new Object[] { " P", "d ", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 17L), - bits, - new Object[] { aTextEmptyRow, aTextEmptyRow, "d P", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 18L), - bits, - new Object[] { aTextEmptyRow, "d ", " P", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 19L), - bits, - new Object[] { "d ", aTextEmptyRow, " P", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 20L), - bits, - new Object[] { " d ", aTextEmptyRow, " P", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 21L), - bits, - new Object[] { "d ", aTextEmptyRow, "P ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 22L), - bits, - new Object[] { " d ", aTextEmptyRow, "P ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 23L), - bits, - new Object[] { " d", aTextEmptyRow, "P ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Circuit_Integrated.getWithDamage(1L, 24L), - bits, - new Object[] { aTextEmptyRow, " d", "P ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); - } - - private static String getModeString(int aMetaData) { - return switch ((byte) (aMetaData >>> 8)) { - case 0 -> "=="; - case 1 -> "<="; - case 2 -> ">="; - case 3 -> "<"; - case 4 -> ">"; - default -> ""; - }; - } - - private static String getConfigurationString(int aMetaData) { - return getModeString(aMetaData) + " " + (byte) (aMetaData & 0xFF); - } - - @Override - public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - super.addAdditionalToolTips(aList, aStack, aPlayer); - aList.add( - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".configuration", "Configuration: ") - + getConfigurationString(getDamage(aStack))); - aList.add( - GT_LanguageManager - .addStringLocalization(getUnlocalizedName() + ".tooltip.0", "Right click to reconfigure")); - aList.add( - GT_LanguageManager.addStringLocalization( - getUnlocalizedName() + ".tooltip.1", - "Needs a screwdriver or circuit programming tool")); - } - - @Override - public String getUnlocalizedName(ItemStack aStack) { - return getUnlocalizedName(); - } - - @Override - @SideOnly(Side.CLIENT) - public final void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { - aList.add(new ItemStack(this, 1, 0)); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aIconRegister) { - super.registerIcons(aIconRegister); - for (int i = 0; i < mIconDamage.length; i++) { - mIconDamage[i] = aIconRegister - .registerIcon(GregTech.getResourcePath(GT_Config.troll ? "troll" : getUnlocalizedName() + "/" + i)); - } - if (GregTech_API.sPostloadFinished) { - GT_Log.out.println("GT_Mod: Starting Item Icon Load Phase"); - GT_FML_LOGGER.info("GT_Mod: Starting Item Icon Load Phase"); - GregTech_API.sItemIcons = aIconRegister; - try { - for (Runnable tRunnable : GregTech_API.sGTItemIconload) { - tRunnable.run(); - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - GT_Log.out.println("GT_Mod: Finished Item Icon Load Phase"); - GT_FML_LOGGER.info("GT_Mod: Finished Item Icon Load Phase"); - } - } - - @Override - public IIcon getIconFromDamage(int aMetaData) { - byte circuitMode = ((byte) (aMetaData & 0xFF)); // Mask out the MSB Comparison Mode Bits. See: getModeString - return mIconDamage[circuitMode < mIconDamage.length ? circuitMode : 0]; - } - - @Override - public boolean receive(ItemStack stack, EntityPlayerMP player, NBTTagCompound tag) { - int meta = tag.hasKey("meta", Constants.NBT.TAG_BYTE) ? tag.getByte("meta") : -1; - if (meta < 0 || meta > 24) return true; - - if (!player.capabilities.isCreativeMode) { - Pair> toolIndex = findConfiguratorInInv(player); - if (toolIndex == null) return true; - - ItemStack[] mainInventory = player.inventory.mainInventory; - mainInventory[toolIndex.getKey()] = toolIndex.getValue() - .apply(mainInventory[toolIndex.getKey()], player); - } - stack.setItemDamage(meta); - - return true; - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - // nothing on server side or fake player - if (player instanceof FakePlayer || !world.isRemote) return stack; - // check if any screwdriver - ItemStack configuratorStack; - if (player.capabilities.isCreativeMode) { - configuratorStack = null; - } else { - Pair configurator = findConfiguratorInInv(player); - if (configurator == null) { - int count; - try { - count = Integer - .parseInt(StatCollector.translateToLocal("GT5U.item.programmed_circuit.no_screwdriver.count")); - } catch (NumberFormatException e) { - player.addChatComponentMessage( - new ChatComponentText( - "Error in translation GT5U.item.programmed_circuit.no_screwdriver.count: " - + e.getMessage())); - count = 1; - } - player.addChatComponentMessage( - new ChatComponentTranslation( - "GT5U.item.programmed_circuit.no_screwdriver." + XSTR.XSTR_INSTANCE.nextInt(count))); - return stack; - } - configuratorStack = player.inventory.mainInventory[configurator.getKey()]; - } - openSelectorGui(configuratorStack, stack.getItemDamage(), player); - return stack; - } - - private void openSelectorGui(ItemStack configurator, int meta, EntityPlayer player) { - UIInfos.openClientUI( - player, - buildContext -> new SelectItemUIFactory( - StatCollector.translateToLocal("GT5U.item.programmed_circuit.select.header"), - configurator, - GT_IntegratedCircuit_Item::onConfigured, - ALL_VARIANTS, - meta, - true).createWindow(buildContext)); - } - - private static void onConfigured(ItemStack stack) { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("meta", (byte) stack.getItemDamage()); - GT_Values.NW.sendToServer(new GT_Packet_UpdateItem(tag)); - } - - private static Pair> findConfiguratorInInv( - EntityPlayer player) { - ItemStack[] mainInventory = player.inventory.mainInventory; - for (int j = 0, mainInventoryLength = mainInventory.length; j < mainInventoryLength; j++) { - ItemStack toolStack = mainInventory[j]; - - if (!GT_Utility.isStackValid(toolStack)) continue; - - for (Map.Entry, BiFunction> p : GregTech_API.sCircuitProgrammerList - .entrySet()) - if (p.getKey() - .test(toolStack)) return Pair.of(j, p.getValue()); - } - return null; - } -} diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java deleted file mode 100644 index b7380d9eff..0000000000 --- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_01.java +++ /dev/null @@ -1,4635 +0,0 @@ -package gregtech.common.items; - -import static gregtech.api.enums.Textures.BlockIcons.COVER_WOOD_PLATE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ACTIVITYDETECTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ACTIVITYDETECTOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ARM; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_CONTROLLER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_CONVEYOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_CRAFTING; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DRAIN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGYDETECTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUIDDETECTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR0; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ITEMDETECTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MAINTENANCE_DETECTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PUMP; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_REDSTONE_RECEIVER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_REDSTONE_TRANSMITTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCREEN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCREEN_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SHUTTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_VALVE; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_8V; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_EV; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_HV; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_IV; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_LV; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_LuV; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_MV; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_UV; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_ZPM; -import static gregtech.client.GT_TooltipHandler.Tier.ERV; -import static gregtech.client.GT_TooltipHandler.Tier.EV; -import static gregtech.client.GT_TooltipHandler.Tier.HV; -import static gregtech.client.GT_TooltipHandler.Tier.IV; -import static gregtech.client.GT_TooltipHandler.Tier.LV; -import static gregtech.client.GT_TooltipHandler.Tier.LuV; -import static gregtech.client.GT_TooltipHandler.Tier.MAX; -import static gregtech.client.GT_TooltipHandler.Tier.MV; -import static gregtech.client.GT_TooltipHandler.Tier.UEV; -import static gregtech.client.GT_TooltipHandler.Tier.UHV; -import static gregtech.client.GT_TooltipHandler.Tier.UIV; -import static gregtech.client.GT_TooltipHandler.Tier.ULV; -import static gregtech.client.GT_TooltipHandler.Tier.UMV; -import static gregtech.client.GT_TooltipHandler.Tier.UV; -import static gregtech.client.GT_TooltipHandler.Tier.UXV; -import static gregtech.client.GT_TooltipHandler.Tier.ZPM; -import static gregtech.client.GT_TooltipHandler.registerTieredTooltip; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_EV; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_EV_Full; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_IV; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_IV_Full; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_LuV; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_LuV_Full; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UEV; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UEV_Full; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UHV; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UHV_Full; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UIV; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UIV_Full; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UMV; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UMV_Full; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UV; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UV_Full; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UxV; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_UxV_Full; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_ZPM; -import static gregtech.common.items.ID_MetaItem_01.BatteryHull_ZPM_Full; -import static gregtech.common.items.ID_MetaItem_01.Battery_Hull_HV; -import static gregtech.common.items.ID_MetaItem_01.Battery_Hull_LV; -import static gregtech.common.items.ID_MetaItem_01.Battery_Hull_MV; -import static gregtech.common.items.ID_MetaItem_01.Battery_RE_HV_Cadmium; -import static gregtech.common.items.ID_MetaItem_01.Battery_RE_HV_Lithium; -import static gregtech.common.items.ID_MetaItem_01.Battery_RE_HV_Sodium; -import static gregtech.common.items.ID_MetaItem_01.Battery_RE_LV_Cadmium; -import static gregtech.common.items.ID_MetaItem_01.Battery_RE_LV_Lithium; -import static gregtech.common.items.ID_MetaItem_01.Battery_RE_LV_Sodium; -import static gregtech.common.items.ID_MetaItem_01.Battery_RE_MV_Cadmium; -import static gregtech.common.items.ID_MetaItem_01.Battery_RE_MV_Lithium; -import static gregtech.common.items.ID_MetaItem_01.Battery_RE_MV_Sodium; -import static gregtech.common.items.ID_MetaItem_01.Battery_RE_ULV_Tantalum; -import static gregtech.common.items.ID_MetaItem_01.Battery_SU_HV_Mercury; -import static gregtech.common.items.ID_MetaItem_01.Battery_SU_HV_Sulfuric_Acid; -import static gregtech.common.items.ID_MetaItem_01.Battery_SU_LV_Mercury; -import static gregtech.common.items.ID_MetaItem_01.Battery_SU_LV_Sulfuric_Acid; -import static gregtech.common.items.ID_MetaItem_01.Battery_SU_MV_Mercury; -import static gregtech.common.items.ID_MetaItem_01.Battery_SU_MV_Sulfuric_Acid; -import static gregtech.common.items.ID_MetaItem_01.Black_Hole_Closer; -import static gregtech.common.items.ID_MetaItem_01.Black_Hole_Opener; -import static gregtech.common.items.ID_MetaItem_01.Book_Written_01; -import static gregtech.common.items.ID_MetaItem_01.Book_Written_02; -import static gregtech.common.items.ID_MetaItem_01.Book_Written_03; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Advanced; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Basic; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Board_Advanced; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Board_Basic; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Board_Elite; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Data; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Elite; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Good; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Master; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Parts_Advanced; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Parts_Crystal_Chip_Elite; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Parts_Crystal_Chip_Master; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Parts_Crystal_Chip_Wetware; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Parts_Wiring_Advanced; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Parts_Wiring_Basic; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Parts_Wiring_Elite; -import static gregtech.common.items.ID_MetaItem_01.Circuit_Primitive; -import static gregtech.common.items.ID_MetaItem_01.Component_Filter; -import static gregtech.common.items.ID_MetaItem_01.Component_Grinder_Diamond; -import static gregtech.common.items.ID_MetaItem_01.Component_Grinder_Tungsten; -import static gregtech.common.items.ID_MetaItem_01.Component_Minecraft_Wheels_Iron; -import static gregtech.common.items.ID_MetaItem_01.Component_Minecraft_Wheels_Steel; -import static gregtech.common.items.ID_MetaItem_01.Component_Sawblade_Diamond; -import static gregtech.common.items.ID_MetaItem_01.Compressed_Fireclay; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_EV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_HV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_IV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_LV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_LuV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_MAX; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_MV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_UEV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_UHV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_UIV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_UMV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_UV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_UXV; -import static gregtech.common.items.ID_MetaItem_01.Conveyor_Module_ZPM; -import static gregtech.common.items.ID_MetaItem_01.Cover_ActivityDetector; -import static gregtech.common.items.ID_MetaItem_01.Cover_Chest_Advanced; -import static gregtech.common.items.ID_MetaItem_01.Cover_Chest_Basic; -import static gregtech.common.items.ID_MetaItem_01.Cover_Chest_Good; -import static gregtech.common.items.ID_MetaItem_01.Cover_Controller; -import static gregtech.common.items.ID_MetaItem_01.Cover_Crafting; -import static gregtech.common.items.ID_MetaItem_01.Cover_Drain; -import static gregtech.common.items.ID_MetaItem_01.Cover_EnergyDetector; -import static gregtech.common.items.ID_MetaItem_01.Cover_FLuidStorageMonitor; -import static gregtech.common.items.ID_MetaItem_01.Cover_FluidDetector; -import static gregtech.common.items.ID_MetaItem_01.Cover_FluidLimiter; -import static gregtech.common.items.ID_MetaItem_01.Cover_ItemDetector; -import static gregtech.common.items.ID_MetaItem_01.Cover_NeedsMaintenance; -import static gregtech.common.items.ID_MetaItem_01.Cover_PlayerDetector; -import static gregtech.common.items.ID_MetaItem_01.Cover_RedstoneReceiverExternal; -import static gregtech.common.items.ID_MetaItem_01.Cover_RedstoneReceiverInternal; -import static gregtech.common.items.ID_MetaItem_01.Cover_RedstoneTransmitterExternal; -import static gregtech.common.items.ID_MetaItem_01.Cover_RedstoneTransmitterInternal; -import static gregtech.common.items.ID_MetaItem_01.Cover_Screen; -import static gregtech.common.items.ID_MetaItem_01.Cover_Shutter; -import static gregtech.common.items.ID_MetaItem_01.Cover_SolarPanel; -import static gregtech.common.items.ID_MetaItem_01.Cover_SolarPanel_8V; -import static gregtech.common.items.ID_MetaItem_01.Cover_SolarPanel_EV; -import static gregtech.common.items.ID_MetaItem_01.Cover_SolarPanel_HV; -import static gregtech.common.items.ID_MetaItem_01.Cover_SolarPanel_IV; -import static gregtech.common.items.ID_MetaItem_01.Cover_SolarPanel_LV; -import static gregtech.common.items.ID_MetaItem_01.Cover_SolarPanel_LuV; -import static gregtech.common.items.ID_MetaItem_01.Cover_SolarPanel_MV; -import static gregtech.common.items.ID_MetaItem_01.Cover_SolarPanel_UV; -import static gregtech.common.items.ID_MetaItem_01.Cover_SolarPanel_ZPM; -import static gregtech.common.items.ID_MetaItem_01.Crate_Empty; -import static gregtech.common.items.ID_MetaItem_01.Duct_Tape; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_EV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_HV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_IV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_LV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_LuV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_MAX; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_MV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_UEV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_UHV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_UIV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_UMV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_UV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_UXV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Motor_ZPM; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_EV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_HV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_IV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_LV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_LuV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_MAX; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_MV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_UEV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_UHV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_UIV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_UMV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_UV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_UXV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Piston_ZPM; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_EV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_HV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_IV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_LV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_LuV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_MAX; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_MV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_UEV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_UHV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_UIV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_UMV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_UV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_UXV; -import static gregtech.common.items.ID_MetaItem_01.Electric_Pump_ZPM; -import static gregtech.common.items.ID_MetaItem_01.Electromagnet_Iron; -import static gregtech.common.items.ID_MetaItem_01.Electromagnet_Neodymium; -import static gregtech.common.items.ID_MetaItem_01.Electromagnet_Samarium; -import static gregtech.common.items.ID_MetaItem_01.Electromagnet_Steel; -import static gregtech.common.items.ID_MetaItem_01.Electromagnet_Tengam; -import static gregtech.common.items.ID_MetaItem_01.Emitter_EV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_HV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_IV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_LV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_LuV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_MAX; -import static gregtech.common.items.ID_MetaItem_01.Emitter_MV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_UEV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_UHV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_UIV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_UMV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_UV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_UXV; -import static gregtech.common.items.ID_MetaItem_01.Emitter_ZPM; -import static gregtech.common.items.ID_MetaItem_01.Empty_Board_Basic; -import static gregtech.common.items.ID_MetaItem_01.Empty_Board_Elite; -import static gregtech.common.items.ID_MetaItem_01.EnergisedTesseract; -import static gregtech.common.items.ID_MetaItem_01.Energy_Cluster; -import static gregtech.common.items.ID_MetaItem_01.Energy_Lapotronic_Orb; -import static gregtech.common.items.ID_MetaItem_01.Energy_Lapotronic_orb_2; -import static gregtech.common.items.ID_MetaItem_01.Energy_Module; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_EV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_HV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_IV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_LV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_LuV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_MAX; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_MV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_UEV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_UHV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_UIV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_UMV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_UV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_UXV; -import static gregtech.common.items.ID_MetaItem_01.Field_Generator_ZPM; -import static gregtech.common.items.ID_MetaItem_01.Firebrick; -import static gregtech.common.items.ID_MetaItem_01.FluidFilter; -import static gregtech.common.items.ID_MetaItem_01.FluidRegulator_EV; -import static gregtech.common.items.ID_MetaItem_01.FluidRegulator_HV; -import static gregtech.common.items.ID_MetaItem_01.FluidRegulator_IV; -import static gregtech.common.items.ID_MetaItem_01.FluidRegulator_LV; -import static gregtech.common.items.ID_MetaItem_01.FluidRegulator_LuV; -import static gregtech.common.items.ID_MetaItem_01.FluidRegulator_MV; -import static gregtech.common.items.ID_MetaItem_01.FluidRegulator_UV; -import static gregtech.common.items.ID_MetaItem_01.FluidRegulator_ZPM; -import static gregtech.common.items.ID_MetaItem_01.Fuel_Can_Plastic_Empty; -import static gregtech.common.items.ID_MetaItem_01.Fuel_Can_Plastic_Filled; -import static gregtech.common.items.ID_MetaItem_01.GigaChad; -import static gregtech.common.items.ID_MetaItem_01.Gravistar; -import static gregtech.common.items.ID_MetaItem_01.Ingot_Heavy1; -import static gregtech.common.items.ID_MetaItem_01.Ingot_Heavy2; -import static gregtech.common.items.ID_MetaItem_01.Ingot_Heavy3; -import static gregtech.common.items.ID_MetaItem_01.Ingot_Iridium_Alloy; -import static gregtech.common.items.ID_MetaItem_01.ItemFilter_Export; -import static gregtech.common.items.ID_MetaItem_01.ItemFilter_Import; -import static gregtech.common.items.ID_MetaItem_01.Large_Fluid_Cell_Aluminium; -import static gregtech.common.items.ID_MetaItem_01.Large_Fluid_Cell_Chrome; -import static gregtech.common.items.ID_MetaItem_01.Large_Fluid_Cell_Iridium; -import static gregtech.common.items.ID_MetaItem_01.Large_Fluid_Cell_Neutronium; -import static gregtech.common.items.ID_MetaItem_01.Large_Fluid_Cell_Osmium; -import static gregtech.common.items.ID_MetaItem_01.Large_Fluid_Cell_StainlessSteel; -import static gregtech.common.items.ID_MetaItem_01.Large_Fluid_Cell_Steel; -import static gregtech.common.items.ID_MetaItem_01.Large_Fluid_Cell_Titanium; -import static gregtech.common.items.ID_MetaItem_01.Large_Fluid_Cell_TungstenSteel; -import static gregtech.common.items.ID_MetaItem_01.McGuffium_239; -import static gregtech.common.items.ID_MetaItem_01.NC_SensorKit; -import static gregtech.common.items.ID_MetaItem_01.NaquadriaSupersolid; -import static gregtech.common.items.ID_MetaItem_01.Paper_Magic_Empty; -import static gregtech.common.items.ID_MetaItem_01.Paper_Magic_Page; -import static gregtech.common.items.ID_MetaItem_01.Paper_Magic_Pages; -import static gregtech.common.items.ID_MetaItem_01.Paper_Printed_Pages; -import static gregtech.common.items.ID_MetaItem_01.Paper_Punch_Card_Empty; -import static gregtech.common.items.ID_MetaItem_01.Paper_Punch_Card_Encoded; -import static gregtech.common.items.ID_MetaItem_01.QuantumEye; -import static gregtech.common.items.ID_MetaItem_01.QuantumStar; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_EV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_HV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_IV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_LV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_LuV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_MAX; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_MV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_UEV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_UHV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_UIV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_UMV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_UV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_UXV; -import static gregtech.common.items.ID_MetaItem_01.Robot_Arm_ZPM; -import static gregtech.common.items.ID_MetaItem_01.Schematic; -import static gregtech.common.items.ID_MetaItem_01.Schematic_1by1; -import static gregtech.common.items.ID_MetaItem_01.Schematic_2by2; -import static gregtech.common.items.ID_MetaItem_01.Schematic_3by3; -import static gregtech.common.items.ID_MetaItem_01.Schematic_Crafting; -import static gregtech.common.items.ID_MetaItem_01.Schematic_Dust; -import static gregtech.common.items.ID_MetaItem_01.Sensor_EV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_HV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_IV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_LV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_LuV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_MAX; -import static gregtech.common.items.ID_MetaItem_01.Sensor_MV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_UEV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_UHV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_UIV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_UMV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_UV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_UXV; -import static gregtech.common.items.ID_MetaItem_01.Sensor_ZPM; -import static gregtech.common.items.ID_MetaItem_01.Shape_Empty; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Axe; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Block; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Bolt; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Bottle; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Casing; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Cell; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_File; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Gear; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Hammer; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Hoe; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Ingot; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Pickaxe; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Pipe_Huge; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Pipe_Large; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Pipe_Medium; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Pipe_Small; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Pipe_Tiny; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Plate; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Ring; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Rod; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Rotor; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Saw; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Shovel; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Small_Gear; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Sword; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Tool_Head_Drill; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Turbine_Blade; -import static gregtech.common.items.ID_MetaItem_01.Shape_Extruder_Wire; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Anvil; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Arrow; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Baguette; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Ball; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Block; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Bolt; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Bottle; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Bread; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Bun; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Casing; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Credit; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Cylinder; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Gear; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Gear_Small; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Ingot; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Name; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Nugget; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Pipe_Huge; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Pipe_Large; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Pipe_Medium; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Pipe_Small; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Pipe_Tiny; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Plate; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Ring; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Rod; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Rod_Long; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Rotor; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Round; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Screw; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Tool_Head_Drill; -import static gregtech.common.items.ID_MetaItem_01.Shape_Mold_Turbine_Blade; -import static gregtech.common.items.ID_MetaItem_01.Shape_Slicer_Flat; -import static gregtech.common.items.ID_MetaItem_01.Shape_Slicer_Stripes; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_0; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_1; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_10; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_11; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_12; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_13; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_14; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_15; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_2; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_3; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_4; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_5; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_6; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_7; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_8; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_9; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Remover; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Remover_Empty; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_0; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_1; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_10; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_11; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_12; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_13; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_14; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_15; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_2; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_3; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_4; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_5; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_6; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_7; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_8; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_9; -import static gregtech.common.items.ID_MetaItem_01.Spray_Color_Used_Remover; -import static gregtech.common.items.ID_MetaItem_01.Spray_Empty; -import static gregtech.common.items.ID_MetaItem_01.StableAdhesive; -import static gregtech.common.items.ID_MetaItem_01.Steam_Regulator_EV; -import static gregtech.common.items.ID_MetaItem_01.Steam_Regulator_HV; -import static gregtech.common.items.ID_MetaItem_01.Steam_Regulator_IV; -import static gregtech.common.items.ID_MetaItem_01.Steam_Regulator_LV; -import static gregtech.common.items.ID_MetaItem_01.Steam_Regulator_MV; -import static gregtech.common.items.ID_MetaItem_01.Steam_Valve_EV; -import static gregtech.common.items.ID_MetaItem_01.Steam_Valve_HV; -import static gregtech.common.items.ID_MetaItem_01.Steam_Valve_IV; -import static gregtech.common.items.ID_MetaItem_01.Steam_Valve_LV; -import static gregtech.common.items.ID_MetaItem_01.Steam_Valve_MV; -import static gregtech.common.items.ID_MetaItem_01.SuperconductorComposite; -import static gregtech.common.items.ID_MetaItem_01.Tesseract; -import static gregtech.common.items.ID_MetaItem_01.Thermos_Can_Empty; -import static gregtech.common.items.ID_MetaItem_01.Tool_Cheat; -import static gregtech.common.items.ID_MetaItem_01.Tool_Cover_Copy_Paste; -import static gregtech.common.items.ID_MetaItem_01.Tool_DataOrb; -import static gregtech.common.items.ID_MetaItem_01.Tool_DataStick; -import static gregtech.common.items.ID_MetaItem_01.Tool_Lighter_Invar_Empty; -import static gregtech.common.items.ID_MetaItem_01.Tool_Lighter_Invar_Full; -import static gregtech.common.items.ID_MetaItem_01.Tool_Lighter_Invar_Used; -import static gregtech.common.items.ID_MetaItem_01.Tool_Lighter_Platinum_Empty; -import static gregtech.common.items.ID_MetaItem_01.Tool_Lighter_Platinum_Full; -import static gregtech.common.items.ID_MetaItem_01.Tool_Lighter_Platinum_Used; -import static gregtech.common.items.ID_MetaItem_01.Tool_MatchBox_Full; -import static gregtech.common.items.ID_MetaItem_01.Tool_MatchBox_Used; -import static gregtech.common.items.ID_MetaItem_01.Tool_Matches; -import static gregtech.common.items.ID_MetaItem_01.Tool_Scanner; -import static gregtech.common.items.ID_MetaItem_01.Tool_Sonictron; -import static gregtech.common.items.ID_MetaItem_01.Upgrade_Lock; -import static gregtech.common.items.ID_MetaItem_01.Upgrade_Muffler; -import static gregtech.common.items.ID_MetaItem_01.ZPM2; -import static gregtech.common.items.ID_MetaItem_01.ZPM3; -import static gregtech.common.items.ID_MetaItem_01.ZPM4; -import static gregtech.common.items.ID_MetaItem_01.ZPM5; -import static gregtech.common.items.ID_MetaItem_01.ZPM6; - -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MathHelper; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OreDictNames; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IItemBehaviour; -import gregtech.api.interfaces.ITexture; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Item_X32; -import gregtech.api.objects.ItemData; -import gregtech.api.objects.MaterialStack; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_FoodStat; -import gregtech.api.util.GT_LanguageManager; -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.common.config.other.ConfigGeneral; -import gregtech.common.covers.GT_Cover_Arm; -import gregtech.common.covers.GT_Cover_Chest; -import gregtech.common.covers.GT_Cover_ControlsWork; -import gregtech.common.covers.GT_Cover_Conveyor; -import gregtech.common.covers.GT_Cover_Crafting; -import gregtech.common.covers.GT_Cover_DoesWork; -import gregtech.common.covers.GT_Cover_Drain; -import gregtech.common.covers.GT_Cover_EUMeter; -import gregtech.common.covers.GT_Cover_FluidLimiter; -import gregtech.common.covers.GT_Cover_FluidRegulator; -import gregtech.common.covers.GT_Cover_FluidStorageMonitor; -import gregtech.common.covers.GT_Cover_Fluidfilter; -import gregtech.common.covers.GT_Cover_ItemFilter; -import gregtech.common.covers.GT_Cover_ItemMeter; -import gregtech.common.covers.GT_Cover_LiquidMeter; -import gregtech.common.covers.GT_Cover_NeedMaintainance; -import gregtech.common.covers.GT_Cover_PlayerDetector; -import gregtech.common.covers.GT_Cover_Pump; -import gregtech.common.covers.GT_Cover_RedstoneReceiverExternal; -import gregtech.common.covers.GT_Cover_RedstoneReceiverInternal; -import gregtech.common.covers.GT_Cover_RedstoneTransmitterExternal; -import gregtech.common.covers.GT_Cover_RedstoneTransmitterInternal; -import gregtech.common.covers.GT_Cover_Screen; -import gregtech.common.covers.GT_Cover_Shutter; -import gregtech.common.covers.GT_Cover_SolarPanel; -import gregtech.common.covers.GT_Cover_SteamRegulator; -import gregtech.common.covers.GT_Cover_SteamValve; -import gregtech.common.items.behaviors.Behaviour_Cover_Tool; -import gregtech.common.items.behaviors.Behaviour_DataOrb; -import gregtech.common.items.behaviors.Behaviour_DataStick; -import gregtech.common.items.behaviors.Behaviour_Lighter; -import gregtech.common.items.behaviors.Behaviour_PrintedPages; -import gregtech.common.items.behaviors.Behaviour_Scanner; -import gregtech.common.items.behaviors.Behaviour_SensorKit; -import gregtech.common.items.behaviors.Behaviour_Sonictron; -import gregtech.common.items.behaviors.Behaviour_Spray_Color; -import gregtech.common.items.behaviors.Behaviour_Spray_Color_Remover; -import gregtech.common.items.behaviors.Behaviour_WrittenBook; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_IndustrialElectromagneticSeparator.MagnetTiers; - -public class GT_MetaGenerated_Item_01 extends GT_MetaGenerated_Item_X32 { - - public static GT_MetaGenerated_Item_01 INSTANCE; - private final String mToolTipPurify = GT_LanguageManager - .addStringLocalization("metaitem.01.tooltip.purify", "Throw into Cauldron to get clean Dust"); - private static final String aTextEmptyRow = " "; - private static final String aTextShape = " P "; - private static final String PartCoverText = " L/t ("; - private static final String PartCoverText2 = " L/s) as Cover"; - private static final String PartNotCoverText = "Cannot be used as a Cover"; - private static final String RAText = "Grabs from and inserts into specific slots"; - private static final String FRText1 = "Configurable up to "; - private static final String FRText2 = " L/sec (as Cover)/n Rightclick/Screwdriver-rightclick/Shift-screwdriver-rightclick/n to adjust the pump speed by 1/16/256 L/sec per click"; - - private static final int[] Spray_Colors = new int[] { Spray_Color_0.ID, Spray_Color_1.ID, Spray_Color_2.ID, - Spray_Color_3.ID, Spray_Color_4.ID, Spray_Color_5.ID, Spray_Color_6.ID, Spray_Color_7.ID, Spray_Color_8.ID, - Spray_Color_9.ID, Spray_Color_10.ID, Spray_Color_11.ID, Spray_Color_12.ID, Spray_Color_13.ID, Spray_Color_14.ID, - Spray_Color_15.ID }; - private static final int[] Spray_Colors_Used = new int[] { Spray_Color_Used_0.ID, Spray_Color_Used_1.ID, - Spray_Color_Used_2.ID, Spray_Color_Used_3.ID, Spray_Color_Used_4.ID, Spray_Color_Used_5.ID, - Spray_Color_Used_6.ID, Spray_Color_Used_7.ID, Spray_Color_Used_8.ID, Spray_Color_Used_9.ID, - Spray_Color_Used_10.ID, Spray_Color_Used_11.ID, Spray_Color_Used_12.ID, Spray_Color_Used_13.ID, - Spray_Color_Used_14.ID, Spray_Color_Used_15.ID }; - - public GT_MetaGenerated_Item_01() { - super( - "metaitem.01", - OrePrefixes.dustTiny, - OrePrefixes.dustSmall, - OrePrefixes.dust, - OrePrefixes.dustImpure, - OrePrefixes.dustPure, - OrePrefixes.crushed, - OrePrefixes.crushedPurified, - OrePrefixes.crushedCentrifuged, - OrePrefixes.gem, - OrePrefixes.nugget, - null, - OrePrefixes.ingot, - OrePrefixes.ingotHot, - OrePrefixes.ingotDouble, - OrePrefixes.ingotTriple, - OrePrefixes.ingotQuadruple, - OrePrefixes.ingotQuintuple, - OrePrefixes.plate, - OrePrefixes.plateDouble, - OrePrefixes.plateTriple, - OrePrefixes.plateQuadruple, - OrePrefixes.plateQuintuple, - OrePrefixes.plateDense, - OrePrefixes.stick, - OrePrefixes.lens, - OrePrefixes.round, - OrePrefixes.bolt, - OrePrefixes.screw, - OrePrefixes.ring, - OrePrefixes.foil, - OrePrefixes.cell, - OrePrefixes.cellPlasma); - INSTANCE = this; - - ItemList.Credit_Greg_Copper - .set(addItem(ID_MetaItem_01.Credit_Greg_Copper.ID, "Copper GT Credit", "0.125 Credits")); - ItemList.Credit_Greg_Cupronickel.set( - addItem( - ID_MetaItem_01.Credit_Greg_Cupronickel.ID, - "Cupronickel GT Credit", - "1 Credit", - new ItemData(Materials.Cupronickel, 907200L))); - ItemList.Credit_Greg_Silver.set( - addItem( - ID_MetaItem_01.Credit_Greg_Silver.ID, - "Silver GT Credit", - "8 Credits", - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L))); - ItemList.Credit_Greg_Gold.set(addItem(ID_MetaItem_01.Credit_Greg_Gold.ID, "Gold GT Credit", "64 Credits")); - ItemList.Credit_Greg_Platinum - .set(addItem(ID_MetaItem_01.Credit_Greg_Platinum.ID, "Platinum GT Credit", "512 Credits")); - ItemList.Credit_Greg_Osmium - .set(addItem(ID_MetaItem_01.Credit_Greg_Osmium.ID, "Osmium GT Credit", "4,096 Credits")); - ItemList.Credit_Greg_Naquadah - .set(addItem(ID_MetaItem_01.Credit_Greg_Naquadah.ID, "Naquadah GT Credit", "32,768 Credits")); - ItemList.Credit_Greg_Neutronium - .set(addItem(ID_MetaItem_01.Credit_Greg_Neutronium.ID, "Neutronium GT Credit", "262,144 Credits")); - ItemList.Coin_Gold_Ancient.set( - addItem( - ID_MetaItem_01.Coin_Gold_Ancient.ID, - "Ancient Gold Coin", - "Found in ancient Ruins", - new ItemData(Materials.Gold, 907200L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 8L))); - ItemList.Coin_Doge.set( - addItem( - ID_MetaItem_01.Coin_Doge.ID, - "Doge Coin", - "wow much coin how money so crypto plz mine v rich very currency wow", - new ItemData(Materials.Brass, 907200L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L))); - ItemList.Coin_Chocolate.set( - addItem( - ID_MetaItem_01.Coin_Chocolate.ID, - "Chocolate Coin", - "Wrapped in Gold", - new ItemData(Materials.Gold, OrePrefixes.foil.mMaterialAmount), - new GT_FoodStat( - 1, - 0.1F, - EnumAction.eat, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gold, 1L), - true, - false, - false, - Potion.moveSpeed.id, - 200, - 1, - 100))); - ItemList.Credit_Copper - .set(addItem(ID_MetaItem_01.Credit_Copper.ID, "Industrial Copper Credit", "0.125 Credits")); - - ItemList.Credit_Silver.set( - addItem( - ID_MetaItem_01.Credit_Silver.ID, - "Industrial Silver Credit", - "8 Credits", - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L))); - ItemList.Credit_Gold.set(addItem(ID_MetaItem_01.Credit_Gold.ID, "Industrial Gold Credit", "64 Credits")); - ItemList.Credit_Platinum - .set(addItem(ID_MetaItem_01.Credit_Platinum.ID, "Industrial Platinum Credit", "512 Credits")); - ItemList.Credit_Osmium - .set(addItem(ID_MetaItem_01.Credit_Osmium.ID, "Industrial Osmium Credit", "4096 Credits")); - - ItemList.Component_Minecart_Wheels_Iron.set( - addItem( - Component_Minecraft_Wheels_Iron.ID, - "Iron Minecart Wheels", - "To get things rolling", - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L))); - ItemList.Component_Minecart_Wheels_Steel.set( - addItem( - Component_Minecraft_Wheels_Steel.ID, - "Steel Minecart Wheels", - "To get things rolling", - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L))); - - GT_ModHandler.addCraftingRecipe( - ItemList.Component_Minecart_Wheels_Iron.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { " h ", "RSR", " w ", 'R', OrePrefixes.ring.get(Materials.AnyIron), 'S', - OrePrefixes.stick.get(Materials.AnyIron) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Component_Minecart_Wheels_Steel.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { " h ", "RSR", " w ", 'R', OrePrefixes.ring.get(Materials.Steel), 'S', - OrePrefixes.stick.get(Materials.Steel) }); - - ItemList.CompressedFireclay.set(addItem(Compressed_Fireclay.ID, "Compressed Fireclay", "Brick-shaped")); - GT_OreDictUnificator.addItemDataFromInputs(ItemList.CompressedFireclay.get(1), Materials.Fireclay.getDust(1)); - - ItemList.Firebrick.set(addItem(Firebrick.ID, "Firebrick", "Heat resistant")); - GT_OreDictUnificator.addItemDataFromInputs(ItemList.Firebrick.get(1), Materials.Fireclay.getDust(1)); - - ItemList.Shape_Empty.set( - addItem( - Shape_Empty.ID, - "Empty Shape Plate", - "Raw Plate to make Molds and Extruder Shapes", - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L))); - - ItemList.Shape_Mold_Plate.set(addItem(Shape_Mold_Plate.ID, "Mold (Plate)", "Mold for making Plates")); - ItemList.Shape_Mold_Casing.set(addItem(Shape_Mold_Casing.ID, "Mold (Casing)", "Mold for making Item Casings")); - ItemList.Shape_Mold_Gear.set(addItem(Shape_Mold_Gear.ID, "Mold (Gear)", "Mold for making Gears")); - ItemList.Shape_Mold_Credit - .set(addItem(Shape_Mold_Credit.ID, "Mold (Coinage)", "Secure Mold for making Coins (Don't lose it!)")); - ItemList.Shape_Mold_Bottle.set(addItem(Shape_Mold_Bottle.ID, "Mold (Bottle)", "Mold for making Bottles")); - ItemList.Shape_Mold_Ingot.set(addItem(Shape_Mold_Ingot.ID, "Mold (Ingot)", "Mold for making Ingots")); - ItemList.Shape_Mold_Ball.set(addItem(Shape_Mold_Ball.ID, "Mold (Ball)", "Mold for making Balls")); - ItemList.Shape_Mold_Block.set(addItem(Shape_Mold_Block.ID, "Mold (Block)", "Mold for making Blocks")); - ItemList.Shape_Mold_Nugget.set(addItem(Shape_Mold_Nugget.ID, "Mold (Nuggets)", "Mold for making Nuggets")); - ItemList.Shape_Mold_Bun.set(addItem(Shape_Mold_Bun.ID, "Mold (Buns)", "Mold for shaping Buns")); - ItemList.Shape_Mold_Bread.set(addItem(Shape_Mold_Bread.ID, "Mold (Bread)", "Mold for shaping Breads")); - ItemList.Shape_Mold_Baguette - .set(addItem(Shape_Mold_Baguette.ID, "Mold (Baguette)", "Mold for shaping Baguettes")); - ItemList.Shape_Mold_Cylinder - .set(addItem(Shape_Mold_Cylinder.ID, "Mold (Cylinder)", "Mold for shaping Cylinders")); - ItemList.Shape_Mold_Anvil.set(addItem(Shape_Mold_Anvil.ID, "Mold (Anvil)", "Mold for shaping Anvils")); - ItemList.Shape_Mold_Name - .set(addItem(Shape_Mold_Name.ID, "Mold (Name)", "Mold for naming Items (rename Mold with Anvil)")); - ItemList.Shape_Mold_Arrow.set(addItem(Shape_Mold_Arrow.ID, "Mold (Arrow Head)", "Mold for making Arrow Heads")); - ItemList.Shape_Mold_Gear_Small - .set(addItem(Shape_Mold_Gear_Small.ID, "Mold (Small Gear)", "Mold for making small Gears")); - ItemList.Shape_Mold_Rod.set(addItem(Shape_Mold_Rod.ID, "Mold (Rod)", "Mold for making Rods")); - ItemList.Shape_Mold_Bolt.set(addItem(Shape_Mold_Bolt.ID, "Mold (Bolt)", "Mold for making Bolts")); - ItemList.Shape_Mold_Round.set(addItem(Shape_Mold_Round.ID, "Mold (Round)", "Mold for making Rounds")); - ItemList.Shape_Mold_Screw.set(addItem(Shape_Mold_Screw.ID, "Mold (Screw)", "Mold for making Screws")); - ItemList.Shape_Mold_Ring.set(addItem(Shape_Mold_Ring.ID, "Mold (Ring)", "Mold for making Rings")); - ItemList.Shape_Mold_Rod_Long - .set(addItem(Shape_Mold_Rod_Long.ID, "Mold (Long Rod)", "Mold for making Long Rods")); - ItemList.Shape_Mold_Rotor.set(addItem(Shape_Mold_Rotor.ID, "Mold (Rotor)", "Mold for making a Rotor")); - ItemList.Shape_Mold_Turbine_Blade - .set(addItem(Shape_Mold_Turbine_Blade.ID, "Mold (Turbine Blade)", "Mold for making a Turbine Blade")); - ItemList.Shape_Mold_Pipe_Tiny - .set(addItem(Shape_Mold_Pipe_Tiny.ID, "Mold (Tiny Pipe)", "Mold for making tiny Pipes")); - ItemList.Shape_Mold_Pipe_Small - .set(addItem(Shape_Mold_Pipe_Small.ID, "Mold (Small Pipe)", "Mold for making small Pipes")); - ItemList.Shape_Mold_Pipe_Medium - .set(addItem(Shape_Mold_Pipe_Medium.ID, "Mold (Normal Pipe)", "Mold for making Pipes")); - ItemList.Shape_Mold_Pipe_Large - .set(addItem(Shape_Mold_Pipe_Large.ID, "Mold (Large Pipe)", "Mold for making large Pipes")); - ItemList.Shape_Mold_Pipe_Huge - .set(addItem(Shape_Mold_Pipe_Huge.ID, "Mold (Huge Pipe)", "Mold for making full Block Pipes")); - ItemList.Shape_Mold_ToolHeadDrill - .set(addItem(Shape_Mold_Tool_Head_Drill.ID, "Mold (Drill Head)", "Mold for making Drill Heads")); - - ItemList.Shape_Extruder_Plate - .set(addItem(Shape_Extruder_Plate.ID, "Extruder Shape (Plate)", "Extruder Shape for making Plates")); - ItemList.Shape_Extruder_Rod - .set(addItem(Shape_Extruder_Rod.ID, "Extruder Shape (Rod)", "Extruder Shape for making Rods")); - ItemList.Shape_Extruder_Bolt - .set(addItem(Shape_Extruder_Bolt.ID, "Extruder Shape (Bolt)", "Extruder Shape for making Bolts")); - ItemList.Shape_Extruder_Ring - .set(addItem(Shape_Extruder_Ring.ID, "Extruder Shape (Ring)", "Extruder Shape for making Rings")); - ItemList.Shape_Extruder_Cell - .set(addItem(Shape_Extruder_Cell.ID, "Extruder Shape (Cell)", "Extruder Shape for making Cells")); - ItemList.Shape_Extruder_Ingot.set( - addItem( - Shape_Extruder_Ingot.ID, - "Extruder Shape (Ingot)", - "Extruder Shape for, wait, can't we just use a Furnace?")); - ItemList.Shape_Extruder_Wire - .set(addItem(Shape_Extruder_Wire.ID, "Extruder Shape (Wire)", "Extruder Shape for making Wires")); - ItemList.Shape_Extruder_Casing.set( - addItem(Shape_Extruder_Casing.ID, "Extruder Shape (Casing)", "Extruder Shape for making Item Casings")); - ItemList.Shape_Extruder_Pipe_Tiny.set( - addItem(Shape_Extruder_Pipe_Tiny.ID, "Extruder Shape (Tiny Pipe)", "Extruder Shape for making tiny Pipes")); - ItemList.Shape_Extruder_Pipe_Small.set( - addItem( - Shape_Extruder_Pipe_Small.ID, - "Extruder Shape (Small Pipe)", - "Extruder Shape for making small Pipes")); - ItemList.Shape_Extruder_Pipe_Medium.set( - addItem(Shape_Extruder_Pipe_Medium.ID, "Extruder Shape (Normal Pipe)", "Extruder Shape for making Pipes")); - ItemList.Shape_Extruder_Pipe_Large.set( - addItem( - Shape_Extruder_Pipe_Large.ID, - "Extruder Shape (Large Pipe)", - "Extruder Shape for making large Pipes")); - ItemList.Shape_Extruder_Pipe_Huge.set( - addItem( - Shape_Extruder_Pipe_Huge.ID, - "Extruder Shape (Huge Pipe)", - "Extruder Shape for making full Block Pipes")); - ItemList.Shape_Extruder_Block - .set(addItem(Shape_Extruder_Block.ID, "Extruder Shape (Block)", "Extruder Shape for making Blocks")); - ItemList.Shape_Extruder_Sword - .set(addItem(Shape_Extruder_Sword.ID, "Extruder Shape (Sword Blade)", "Extruder Shape for making Swords")); - ItemList.Shape_Extruder_Pickaxe.set( - addItem(Shape_Extruder_Pickaxe.ID, "Extruder Shape (Pickaxe Head)", "Extruder Shape for making Pickaxes")); - ItemList.Shape_Extruder_Shovel.set( - addItem(Shape_Extruder_Shovel.ID, "Extruder Shape (Shovel Head)", "Extruder Shape for making Shovels")); - ItemList.Shape_Extruder_Axe - .set(addItem(Shape_Extruder_Axe.ID, "Extruder Shape (Axe Head)", "Extruder Shape for making Axes")); - ItemList.Shape_Extruder_Hoe - .set(addItem(Shape_Extruder_Hoe.ID, "Extruder Shape (Hoe Head)", "Extruder Shape for making Hoes")); - ItemList.Shape_Extruder_Hammer.set( - addItem(Shape_Extruder_Hammer.ID, "Extruder Shape (Hammer Head)", "Extruder Shape for making Hammers")); - ItemList.Shape_Extruder_File - .set(addItem(Shape_Extruder_File.ID, "Extruder Shape (File Head)", "Extruder Shape for making Files")); - ItemList.Shape_Extruder_Saw - .set(addItem(Shape_Extruder_Saw.ID, "Extruder Shape (Saw Blade)", "Extruder Shape for making Saws")); - ItemList.Shape_Extruder_Gear - .set(addItem(Shape_Extruder_Gear.ID, "Extruder Shape (Gear)", "Extruder Shape for making Gears")); - ItemList.Shape_Extruder_Bottle - .set(addItem(Shape_Extruder_Bottle.ID, "Extruder Shape (Bottle)", "Extruder Shape for making Bottles")); - ItemList.Shape_Extruder_Rotor - .set(addItem(Shape_Extruder_Rotor.ID, "Extruder Shape (Rotor)", "Extruder Shape for a Rotor")); - ItemList.Shape_Extruder_Small_Gear.set( - addItem(Shape_Extruder_Small_Gear.ID, "Extruder Shape (Small Gear)", "Extruder Shape for a Small Gear")); - ItemList.Shape_Extruder_Turbine_Blade.set( - addItem( - Shape_Extruder_Turbine_Blade.ID, - "Extruder Shape (Turbine Blade)", - "Extruder Shape for a Turbine Blade")); - ItemList.Shape_Extruder_ToolHeadDrill.set( - addItem( - Shape_Extruder_Tool_Head_Drill.ID, - "Extruder Shape (Drill Head)", - "Extruder Shape for a Drill Head")); - - ItemList.Shape_Slicer_Flat - .set(addItem(Shape_Slicer_Flat.ID, "Slicer Blade (Flat)", "Slicer Blade for cutting Flat")); - ItemList.Shape_Slicer_Stripes - .set(addItem(Shape_Slicer_Stripes.ID, "Slicer Blade (Stripes)", "Slicer Blade for cutting Stripes")); - - ItemList.Fuel_Can_Plastic_Empty.set( - addItem( - Fuel_Can_Plastic_Empty.ID, - "Empty Plastic Fuel Can", - "Used to store Fuels", - new ItemData(Materials.Plastic, OrePrefixes.plate.mMaterialAmount * 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L))); - ItemList.Fuel_Can_Plastic_Filled.set( - addItem( - Fuel_Can_Plastic_Filled.ID, - "Plastic Fuel Can", - "Burns well in Diesel Generators", - new ItemData(Materials.Plastic, OrePrefixes.plate.mMaterialAmount * 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L))); - - ItemList.Spray_Empty.set( - addItem( - Spray_Empty.ID, - "Empty Spray Can", - "Used for making Sprays", - new ItemData( - Materials.Tin, - OrePrefixes.plate.mMaterialAmount * 2L, - Materials.Redstone, - OrePrefixes.dust.mMaterialAmount), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L))); - - ItemList.Crate_Empty.set( - addItem( - Crate_Empty.ID, - "Empty Crate", - "To Package lots of Material", - new ItemData(Materials.Wood, 3628800L, Materials.Iron, OrePrefixes.screw.mMaterialAmount), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 2L))); - - ItemList.ThermosCan_Empty.set( - addItem( - Thermos_Can_Empty.ID, - "Empty Thermos Can", - "Keeping hot things hot and cold things cold", - new ItemData( - Materials.Aluminium, - OrePrefixes.plateDouble.mMaterialAmount * 1L + 2L * OrePrefixes.ring.mMaterialAmount), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L))); - - ItemList.Large_Fluid_Cell_Steel.set( - addItem( - Large_Fluid_Cell_Steel.ID, - "Large Steel Fluid Cell", - "", - new ItemData( - Materials.Steel, - OrePrefixes.plateDouble.mMaterialAmount * 4L, - new MaterialStack(Materials.Bronze, OrePrefixes.ring.mMaterialAmount * 4L)), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L))); - - ItemList.Large_Fluid_Cell_TungstenSteel.set( - addItem( - Large_Fluid_Cell_TungstenSteel.ID, - "Large Tungstensteel Fluid Cell", - "", - new ItemData( - Materials.TungstenSteel, - OrePrefixes.plateDouble.mMaterialAmount * 4L, - new MaterialStack(Materials.Platinum, OrePrefixes.ring.mMaterialAmount * 4L)), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 9L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 7L))); - - ItemList.Large_Fluid_Cell_Aluminium.set( - addItem( - Large_Fluid_Cell_Aluminium.ID, - "Large Aluminium Fluid Cell", - "", - new ItemData( - Materials.Aluminium, - OrePrefixes.plateDouble.mMaterialAmount * 4L, - new MaterialStack(Materials.Silver, OrePrefixes.ring.mMaterialAmount * 4L)), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 3L))); - - ItemList.Large_Fluid_Cell_StainlessSteel.set( - addItem( - Large_Fluid_Cell_StainlessSteel.ID, - "Large Stainless Steel Fluid Cell", - "", - new ItemData( - Materials.StainlessSteel, - OrePrefixes.plateDouble.mMaterialAmount * 4L, - new MaterialStack(Materials.Electrum, OrePrefixes.ring.mMaterialAmount * 4L)), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 6L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L))); - - ItemList.Large_Fluid_Cell_Titanium.set( - addItem( - Large_Fluid_Cell_Titanium.ID, - "Large Titanium Fluid Cell", - "", - new ItemData( - Materials.Titanium, - OrePrefixes.plateDouble.mMaterialAmount * 4L, - new MaterialStack(Materials.RoseGold, OrePrefixes.ring.mMaterialAmount * 4L)), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 7L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 5L))); - - ItemList.Large_Fluid_Cell_Chrome.set( - addItem( - Large_Fluid_Cell_Chrome.ID, - "Large Chrome Fluid Cell", - "", - new ItemData( - Materials.Chrome, - OrePrefixes.plateDouble.mMaterialAmount * 4L, - new MaterialStack(Materials.Palladium, OrePrefixes.ring.mMaterialAmount * 4L)), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 6L))); - - ItemList.Large_Fluid_Cell_Iridium.set( - addItem( - Large_Fluid_Cell_Iridium.ID, - "Large Iridium Fluid Cell", - "", - new ItemData( - Materials.Iridium, - OrePrefixes.plateDouble.mMaterialAmount * 4L, - new MaterialStack(Materials.Naquadah, OrePrefixes.ring.mMaterialAmount * 4L)), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 8L))); - - ItemList.Large_Fluid_Cell_Osmium.set( - addItem( - Large_Fluid_Cell_Osmium.ID, - "Large Osmium Fluid Cell", - "", - new ItemData( - Materials.Osmium, - OrePrefixes.plateDouble.mMaterialAmount * 4L, - new MaterialStack(Materials.ElectrumFlux, OrePrefixes.ring.mMaterialAmount * 4L)), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 11L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 9L))); - - ItemList.Large_Fluid_Cell_Neutronium.set( - addItem( - Large_Fluid_Cell_Neutronium.ID, - "Large Neutronium Fluid Cell", - "", - new ItemData( - Materials.Neutronium, - OrePrefixes.plateDouble.mMaterialAmount * 4L, - new MaterialStack(Materials.Draconium, OrePrefixes.ring.mMaterialAmount * 4L)), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 12L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 10L))); - - for (byte i = 0; i < 16; i = (byte) (i + 1)) { - ItemList.SPRAY_CAN_DYES[i].set( - addItem( - Spray_Colors[i], - "Spray Can (" + Dyes.get(i).mName + ")", - "Full", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 4L))); - ItemList.SPRAY_CAN_DYES_USED[i].set( - addItem( - Spray_Colors_Used[i], - "Spray Can (" + Dyes.get(i).mName + ")", - "Used", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 3L), - SubTag.INVISIBLE)); - } - - ItemList.Spray_Color_Remover.set( - addItem( - Spray_Color_Remover.ID, - "Spray Can Solvent", - "Full", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 8L))); - ItemList.Spray_Color_Used_Remover.set( - addItem( - Spray_Color_Used_Remover.ID, - "Spray Can Solvent", - "Used", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 6L), - SubTag.INVISIBLE)); - - ItemList.Spray_Color_Remover_Empty.set( - addItem( - Spray_Color_Remover_Empty.ID, - "Empty Spray Can Solvent Cannister", - "Used for making Spray Can Solvent", - new ItemData( - Materials.Aluminium, - OrePrefixes.plateDouble.mMaterialAmount * 4L, - Materials.Redstone, - OrePrefixes.dust.mMaterialAmount), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L))); - - ItemList.Tool_Matches.set( - addItem( - Tool_Matches.ID, - "Match", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L))); - - ItemList.Tool_MatchBox_Used.set( - addItem( - Tool_MatchBox_Used.ID, - "Match Box", - "This is not a Car", - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), - SubTag.INVISIBLE)); - - ItemList.Tool_MatchBox_Full.set( - addItem( - Tool_MatchBox_Full.ID, - "Match Box (Full)", - "This is not a Car", - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L))); - - ItemList.Tool_Lighter_Invar_Empty.set( - addItem( - Tool_Lighter_Invar_Empty.ID, - "Lighter (Empty)", - "", - new ItemData(Materials.Invar, OrePrefixes.plate.mMaterialAmount * 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L))); - ItemList.Tool_Lighter_Invar_Used.set( - addItem( - Tool_Lighter_Invar_Used.ID, - "Lighter", - "", - new ItemData(Materials.Invar, OrePrefixes.plate.mMaterialAmount * 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), - SubTag.INVISIBLE)); - ItemList.Tool_Lighter_Invar_Full.set( - addItem( - Tool_Lighter_Invar_Full.ID, - "Lighter (Full)", - "", - new ItemData(Materials.Invar, OrePrefixes.plate.mMaterialAmount * 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L))); - - ItemList.Tool_Lighter_Platinum_Empty.set( - addItem( - Tool_Lighter_Platinum_Empty.ID, - "Platinum Lighter (Empty)", - "A known Prank Master is engraved on it", - new ItemData(Materials.Platinum, OrePrefixes.plate.mMaterialAmount * 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L))); - ItemList.Tool_Lighter_Platinum_Used.set( - addItem( - Tool_Lighter_Platinum_Used.ID, - "Platinum Lighter", - "A known Prank Master is engraved on it", - new ItemData(Materials.Platinum, OrePrefixes.plate.mMaterialAmount * 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), - SubTag.INVISIBLE)); - ItemList.Tool_Lighter_Platinum_Full.set( - addItem( - Tool_Lighter_Platinum_Full.ID, - "Platinum Lighter (Full)", - "A known Prank Master is engraved on it", - new ItemData(Materials.Platinum, OrePrefixes.plate.mMaterialAmount * 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L))); - - ItemList.Ingot_Heavy1 - .set(addItem(Ingot_Heavy1.ID, "Heavy Duty Alloy Ingot T1", "Used to make Heavy Duty Plates T1")); - ItemList.Ingot_Heavy2 - .set(addItem(Ingot_Heavy2.ID, "Heavy Duty Alloy Ingot T2", "Used to make Heavy Duty Plates T2")); - ItemList.Ingot_Heavy3 - .set(addItem(Ingot_Heavy3.ID, "Heavy Duty Alloy Ingot T3", "Used to make Heavy Duty Plates T3")); - - ItemList.Ingot_IridiumAlloy.set( - addItem( - Ingot_Iridium_Alloy.ID, - "Iridium Alloy Ingot", - "Used to make Iridium Plates", - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L))); - - ItemList.Paper_Printed_Pages.set( - addItem( - Paper_Printed_Pages.ID, - "Printed Pages", - "Used to make written Books", - new ItemData(Materials.Paper, 10886400L), - new Behaviour_PrintedPages(), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 2L))); - ItemList.Paper_Magic_Empty.set( - addItem( - Paper_Magic_Empty.ID, - "Magic Paper", - "", - SubTag.INVISIBLE, - new ItemData(Materials.Paper, 3628800L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1L))); - ItemList.Paper_Magic_Page.set( - addItem( - Paper_Magic_Page.ID, - "Enchanted Page", - "", - SubTag.INVISIBLE, - new ItemData(Materials.Paper, 3628800L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 2L))); - ItemList.Paper_Magic_Pages.set( - addItem( - Paper_Magic_Pages.ID, - "Enchanted Pages", - "", - SubTag.INVISIBLE, - new ItemData(Materials.Paper, 10886400L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 4L))); - ItemList.Paper_Punch_Card_Empty.set( - addItem( - Paper_Punch_Card_Empty.ID, - "Punch Card", - "", - SubTag.INVISIBLE, - new ItemData(Materials.Paper, 7257600L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1L))); - ItemList.Paper_Punch_Card_Encoded.set( - addItem( - Paper_Punch_Card_Encoded.ID, - "Punched Card", - "", - SubTag.INVISIBLE, - new ItemData(Materials.Paper, 7257600L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 2L))); - ItemList.Book_Written_01.set( - addItem( - Book_Written_01.ID, - "Book", - "", - new ItemData(Materials.Paper, 10886400L), - "bookWritten", - OreDictNames.craftingBook, - new Behaviour_WrittenBook(), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 2L))); - ItemList.Book_Written_02.set( - addItem( - Book_Written_02.ID, - "Book", - "", - new ItemData(Materials.Paper, 10886400L), - "bookWritten", - OreDictNames.craftingBook, - new Behaviour_WrittenBook(), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 2L))); - ItemList.Book_Written_03.set( - addItem( - Book_Written_03.ID, - "Book", - "", - new ItemData(Materials.Paper, 10886400L), - "bookWritten", - OreDictNames.craftingBook, - new Behaviour_WrittenBook(), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 2L))); - - ItemList.Schematic.set( - addItem( - Schematic.ID, - "Schematic", - "EMPTY", - new ItemData(Materials.Steel, 7257600L), - new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 1L))); - ItemList.Schematic_Crafting.set( - addItem( - Schematic_Crafting.ID, - "Schematic (Crafting)", - "Crafts the Programmed Recipe", - new ItemData(Materials.Steel, 7257600L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L))); - ItemList.Schematic_1by1.set( - addItem( - Schematic_1by1.ID, - "Schematic (1x1)", - "Crafts 1 Items as 1x1 (use in Packager)", - new ItemData(Materials.Steel, 7257600L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L))); - ItemList.Schematic_2by2.set( - addItem( - Schematic_2by2.ID, - "Schematic (2x2)", - "Crafts 4 Items as 2x2 (use in Packager)", - new ItemData(Materials.Steel, 7257600L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L))); - ItemList.Schematic_3by3.set( - addItem( - Schematic_3by3.ID, - "Schematic (3x3)", - "Crafts 9 Items as 3x3 (use in Packager)", - new ItemData(Materials.Steel, 7257600L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L))); - ItemList.Schematic_Dust.set( - addItem( - Schematic_Dust.ID, - "Schematic (Dusts)", - "Combines Dusts (use in Packager)", - new ItemData(Materials.Steel, 7257600L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L))); - - ItemList.Battery_Hull_LV.set( - addItem( - Battery_Hull_LV.ID, - "Small Battery Hull", - "An empty LV Battery Hull", - new ItemData(Materials.BatteryAlloy, OrePrefixes.plate.mMaterialAmount * 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L))); - ItemList.Battery_Hull_MV.set( - addItem( - Battery_Hull_MV.ID, - "Medium Battery Hull", - "An empty MV Battery Hull", - new ItemData(Materials.BatteryAlloy, OrePrefixes.plate.mMaterialAmount * 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L))); - ItemList.Battery_Hull_HV.set( - addItem( - Battery_Hull_HV.ID, - "Large Battery Hull", - "An empty HV Battery Hull", - new ItemData(Materials.BatteryAlloy, OrePrefixes.plate.mMaterialAmount * 9L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1L))); - - // ULV Batteries - ItemList.Battery_RE_ULV_Tantalum.set( - addItem( - Battery_RE_ULV_Tantalum.ID, - "Tantalum Capacitor", - "Reusable", - "batteryULV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L))); - - // LV Batteries - ItemList.Battery_SU_LV_SulfuricAcid.set( - addItem( - Battery_SU_LV_Sulfuric_Acid.ID, - "Small Acid Battery", - "Single Use", - "batteryLV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L))); - - ItemList.Battery_SU_LV_Mercury.set( - addItem( - Battery_SU_LV_Mercury.ID, - "Small Mercury Battery", - "Single Use", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L))); - - ItemList.Battery_RE_LV_Cadmium.set( - addItem( - Battery_RE_LV_Cadmium.ID, - "Small Cadmium Battery", - "Reusable", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), - "batteryLV")); - - ItemList.Battery_RE_LV_Lithium.set( - addItem( - Battery_RE_LV_Lithium.ID, - "Small Lithium Battery", - "Reusable", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), - "batteryLV")); - - ItemList.Battery_RE_LV_Sodium.set( - addItem( - Battery_RE_LV_Sodium.ID, - "Small Sodium Battery", - "Reusable", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), - "batteryLV")); - - // MV Batteries - ItemList.Battery_SU_MV_SulfuricAcid.set( - addItem( - Battery_SU_MV_Sulfuric_Acid.ID, - "Medium Acid Battery", - "Single Use", - "batteryMV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L))); - - ItemList.Battery_SU_MV_Mercury.set( - addItem( - Battery_SU_MV_Mercury.ID, - "Medium Mercury Battery", - "Single Use", - "batteryMV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L))); - - ItemList.Battery_RE_MV_Cadmium.set( - addItem( - Battery_RE_MV_Cadmium.ID, - "Medium Cadmium Battery", - "Reusable", - "batteryMV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L))); - - ItemList.Battery_RE_MV_Lithium.set( - addItem( - Battery_RE_MV_Lithium.ID, - "Medium Lithium Battery", - "Reusable", - "batteryMV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L))); - - ItemList.Battery_RE_MV_Sodium.set( - addItem( - Battery_RE_MV_Sodium.ID, - "Medium Sodium Battery", - "Reusable", - "batteryMV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L))); - - // HV Batteries - ItemList.Battery_SU_HV_SulfuricAcid.set( - addItem( - Battery_SU_HV_Sulfuric_Acid.ID, - "Large Acid Battery", - "Single Use", - "batteryHV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 8L))); - - ItemList.Battery_SU_HV_Mercury.set( - addItem( - Battery_SU_HV_Mercury.ID, - "Large Mercury Battery", - "Single Use", - "batteryHV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 8L))); - - ItemList.Battery_RE_HV_Cadmium.set( - addItem( - Battery_RE_HV_Cadmium.ID, - "Large Cadmium Battery", - "Reusable", - "batteryHV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L))); - - ItemList.Battery_RE_HV_Lithium.set( - addItem( - Battery_RE_HV_Lithium.ID, - "Large Lithium Battery", - "Reusable", - "batteryHV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L))); - - ItemList.Battery_RE_HV_Sodium.set( - addItem( - Battery_RE_HV_Sodium.ID, - "Large Sodium Battery", - "Reusable", - "batteryHV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L))); - - // IV Battery - ItemList.Energy_LapotronicOrb.set( - addItem( - Energy_Lapotronic_Orb.ID, - "Lapotronic Energy Orb", - "Reusable battery", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 16L), - OrePrefixes.battery.get(Materials.IV))); - - // ZPM Module - ItemList.ZPM.set( - addItem( - ID_MetaItem_01.ZPM.ID, - "Zero Point Module", - "Single use battery", - "batteryZPM", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L))); - - // LuV Lapotron orb cluster battery - ItemList.Energy_LapotronicOrb2.set( - addItem( - Energy_Lapotronic_orb_2.ID, - "Lapotronic Energy Orb Cluster", - "Reusable battery", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 16L), - OrePrefixes.battery.get(Materials.LuV))); - - // UV Battery - ItemList.ZPM2.set( - addItem( - ZPM2.ID, - "Ultimate Battery", - "Fill this to win minecraft", - "batteryUV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L))); - - // UMV Battery - ItemList.ZPM3.set( - addItem( - ZPM3.ID, - "Really Ultimate Battery", - "Fill this to be way older", - "batteryUMV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L))); - - // UXV Battery - ItemList.ZPM4.set( - addItem( - ZPM4.ID, - "Extremely Ultimate Battery", - "Fill this to be older", - "batteryUXV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L))); - - // MAX Battery - ItemList.ZPM5.set( - addItem( - ZPM5.ID, - "Insanely Ultimate Battery", - "Fill this for fun", - "batteryMAX", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L))); - - // ERROR Battery - ItemList.ZPM6.set( - addItem( - ZPM6.ID, - "Mega Ultimate Battery", - "Fill the capacitor to reach enlightenment", - "batteryERV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L))); - - // ZPM Cluster - ItemList.Energy_Module.set( - addItem( - Energy_Module.ID, - "Energy Module", - "Reusable battery", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 16L), - OrePrefixes.battery.get(Materials.ZPM))); - - // UV Cluster - ItemList.Energy_Cluster.set( - addItem( - Energy_Cluster.ID, - "Energy Cluster", - "Reusable battery", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), - OrePrefixes.battery.get(Materials.UV))); - - // UIV, UMV, UXV and MAX component textures backported from gregicality. - ItemList.Electric_Motor_LV.set( - addItem( - Electric_Motor_LV.ID, - "Electric Motor (LV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L))); - ItemList.Electric_Motor_MV.set( - addItem( - Electric_Motor_MV.ID, - "Electric Motor (MV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L))); - ItemList.Electric_Motor_HV.set( - addItem( - Electric_Motor_HV.ID, - "Electric Motor (HV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 4L))); - ItemList.Electric_Motor_EV.set( - addItem( - Electric_Motor_EV.ID, - "Electric Motor (EV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 8L))); - ItemList.Electric_Motor_IV.set( - addItem( - Electric_Motor_IV.ID, - "Electric Motor (IV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 16L))); - ItemList.Electric_Motor_LuV.set( - addItem( - Electric_Motor_LuV.ID, - "Electric Motor (LuV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 32L))); - ItemList.Electric_Motor_ZPM.set( - addItem( - Electric_Motor_ZPM.ID, - "Electric Motor (ZPM)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 64L))); - ItemList.Electric_Motor_UV.set( - addItem( - Electric_Motor_UV.ID, - "Electric Motor (UV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 128L))); - ItemList.Electric_Motor_UHV.set( - addItem( - Electric_Motor_UHV.ID, - "Electric Motor (UHV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 256L))); - ItemList.Electric_Motor_UEV.set( - addItem( - Electric_Motor_UEV.ID, - "Electric Motor (UEV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L))); - ItemList.Electric_Motor_UIV.set( - addItem( - Electric_Motor_UIV.ID, - "Electric Motor (UIV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L))); - ItemList.Electric_Motor_UMV.set( - addItem( - Electric_Motor_UMV.ID, - "Electric Motor (UMV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L))); - ItemList.Electric_Motor_UXV.set( - addItem( - Electric_Motor_UXV.ID, - "Electric Motor (UXV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L))); - ItemList.Electric_Motor_MAX.set( - addItem( - Electric_Motor_MAX.ID, - "Electric Motor (MAX)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L))); - - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_LV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.IronMagnetic), 'R', - OrePrefixes.stick.get(Materials.AnyIron), 'W', OrePrefixes.wireGt01.get(Materials.AnyCopper), 'C', - OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_LV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', - OrePrefixes.stick.get(Materials.Steel), 'W', OrePrefixes.wireGt01.get(Materials.AnyCopper), 'C', - OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_MV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', - OrePrefixes.stick.get(Materials.Aluminium), 'W', OrePrefixes.wireGt02.get(Materials.Cupronickel), 'C', - OrePrefixes.cableGt01.get(Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_HV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', - OrePrefixes.stick.get(Materials.StainlessSteel), 'W', OrePrefixes.wireGt04.get(Materials.Electrum), 'C', - OrePrefixes.cableGt02.get(Materials.Silver) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_EV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.NeodymiumMagnetic), 'R', - OrePrefixes.stick.get(Materials.Titanium), 'W', OrePrefixes.wireGt04.get(Materials.BlackSteel), 'C', - OrePrefixes.cableGt02.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_IV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.NeodymiumMagnetic), 'R', - OrePrefixes.stick.get(Materials.TungstenSteel), 'W', OrePrefixes.wireGt04.get(Materials.Graphene), 'C', - OrePrefixes.cableGt02.get(Materials.Tungsten) }); - - ItemList.ElectronicsLump.set( - addItem( - 414, - "Lump of Electronics", - "How did they even produce this?", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L))); - - ItemList.Tesseract.set( - addItem( - Tesseract.ID, - "Raw Tesseract", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L))); - ItemList.GigaChad.set( - addItem( - GigaChad.ID, - "Giga Chad Token", - "You are worthy", - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1000L))); - ItemList.EnergisedTesseract.set( - addItem( - EnergisedTesseract.ID, - "Energised Tesseract", - "Higher dimensional engineering", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L))); - - ItemList.Electric_Piston_LV.set( - addItem( - Electric_Piston_LV.ID, - "Electric Piston (LV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L))); - ItemList.Electric_Piston_MV.set( - addItem( - Electric_Piston_MV.ID, - "Electric Piston (MV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L))); - ItemList.Electric_Piston_HV.set( - addItem( - Electric_Piston_HV.ID, - "Electric Piston (HV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 4L))); - ItemList.Electric_Piston_EV.set( - addItem( - Electric_Piston_EV.ID, - "Electric Piston (EV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 8L))); - ItemList.Electric_Piston_IV.set( - addItem( - Electric_Piston_IV.ID, - "Electric Piston (IV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 16L))); - ItemList.Electric_Piston_LuV.set( - addItem( - Electric_Piston_LuV.ID, - "Electric Piston (LuV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 32L))); - ItemList.Electric_Piston_ZPM.set( - addItem( - Electric_Piston_ZPM.ID, - "Electric Piston (ZPM)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 64L))); - ItemList.Electric_Piston_UV.set( - addItem( - Electric_Piston_UV.ID, - "Electric Piston (UV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 128L))); - ItemList.Electric_Piston_UHV.set( - addItem( - Electric_Piston_UHV.ID, - "Electric Piston (UHV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 256L))); - ItemList.Electric_Piston_UEV.set( - addItem( - Electric_Piston_UEV.ID, - "Electric Piston (UEV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L))); - ItemList.Electric_Piston_UIV.set( - addItem( - Electric_Piston_UIV.ID, - "Electric Piston (UIV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L))); - ItemList.Electric_Piston_UMV.set( - addItem( - Electric_Piston_UMV.ID, - "Electric Piston (UMV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L))); - ItemList.Electric_Piston_UXV.set( - addItem( - Electric_Piston_UXV.ID, - "Electric Piston (UXV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L))); - ItemList.Electric_Piston_MAX.set( - addItem( - Electric_Piston_MAX.ID, - "Electric Piston (MAX)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L))); - - ItemList.Electric_Pump_LV.set( - addItem( - Electric_Pump_LV.ID, - "Electric Pump (LV)", - GT_Utility.formatNumbers(32) + PartCoverText + GT_Utility.formatNumbers(32 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L))); - ItemList.Electric_Pump_MV.set( - addItem( - Electric_Pump_MV.ID, - "Electric Pump (MV)", - GT_Utility.formatNumbers(128) + PartCoverText + GT_Utility.formatNumbers(128 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L))); - ItemList.Electric_Pump_HV.set( - addItem( - Electric_Pump_HV.ID, - "Electric Pump (HV)", - GT_Utility.formatNumbers(512) + PartCoverText + GT_Utility.formatNumbers(512 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L))); - ItemList.Electric_Pump_EV.set( - addItem( - Electric_Pump_EV.ID, - "Electric Pump (EV)", - GT_Utility.formatNumbers(2048) + PartCoverText + GT_Utility.formatNumbers(2048 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 8L))); - ItemList.Electric_Pump_IV.set( - addItem( - Electric_Pump_IV.ID, - "Electric Pump (IV)", - GT_Utility.formatNumbers(8192) + PartCoverText + GT_Utility.formatNumbers(8192 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 16L))); - ItemList.Electric_Pump_LuV.set( - addItem( - Electric_Pump_LuV.ID, - "Electric Pump (LuV)", - GT_Utility.formatNumbers(32768) + PartCoverText + GT_Utility.formatNumbers(32768 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 32L))); - ItemList.Electric_Pump_ZPM.set( - addItem( - Electric_Pump_ZPM.ID, - "Electric Pump (ZPM)", - GT_Utility.formatNumbers(131072) + PartCoverText - + GT_Utility.formatNumbers(131072 * 20) - + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 64L))); - ItemList.Electric_Pump_UV.set( - addItem( - Electric_Pump_UV.ID, - "Electric Pump (UV)", - GT_Utility.formatNumbers(524288) + PartCoverText - + GT_Utility.formatNumbers(524288 * 20) - + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 128L))); - ItemList.Electric_Pump_UHV.set( - addItem( - Electric_Pump_UHV.ID, - "Electric Pump (UHV)", - GT_Utility.formatNumbers(1048576) + PartCoverText - + GT_Utility.formatNumbers(1048576 * 20) - + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 256L))); - ItemList.Electric_Pump_UEV.set( - addItem( - Electric_Pump_UEV.ID, - "Electric Pump (UEV)", - GT_Utility.formatNumbers(2097152) + PartCoverText - + GT_Utility.formatNumbers(2097152 * 20) - + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 512L))); - ItemList.Electric_Pump_UIV.set( - addItem( - Electric_Pump_UIV.ID, - "Electric Pump (UIV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 512L))); - ItemList.Electric_Pump_UMV.set( - addItem( - Electric_Pump_UMV.ID, - "Electric Pump (UMV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 512L))); - ItemList.Electric_Pump_UXV.set( - addItem( - Electric_Pump_UXV.ID, - "Electric Pump (UXV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 512L))); - ItemList.Electric_Pump_MAX.set( - addItem( - Electric_Pump_MAX.ID, - "Electric Pump (MAX)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 512L))); - - ItemList.Steam_Valve_LV.set( - addItem( - Steam_Valve_LV.ID, - "Steam Valve (LV)", - GT_Utility.formatNumbers(1024) + PartCoverText + GT_Utility.formatNumbers(1024 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L))); - ItemList.Steam_Valve_MV.set( - addItem( - Steam_Valve_MV.ID, - "Steam Valve (MV)", - GT_Utility.formatNumbers(2048) + PartCoverText + GT_Utility.formatNumbers(2048 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L))); - ItemList.Steam_Valve_HV.set( - addItem( - Steam_Valve_HV.ID, - "Steam Valve (HV)", - GT_Utility.formatNumbers(4096) + PartCoverText + GT_Utility.formatNumbers(4096 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L))); - ItemList.Steam_Valve_EV.set( - addItem( - Steam_Valve_EV.ID, - "Steam Valve (EV)", - GT_Utility.formatNumbers(8192) + PartCoverText + GT_Utility.formatNumbers(8192 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 8L))); - ItemList.Steam_Valve_IV.set( - addItem( - Steam_Valve_IV.ID, - "Steam Valve (IV)", - GT_Utility.formatNumbers(16384) + PartCoverText + GT_Utility.formatNumbers(16384 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 16L))); - - ItemList.FluidRegulator_LV.set( - addItem(FluidRegulator_LV.ID, "Fluid Regulator (LV)", FRText1 + GT_Utility.formatNumbers(640) + FRText2)); - ItemList.FluidRegulator_MV.set( - addItem(FluidRegulator_MV.ID, "Fluid Regulator (MV)", FRText1 + GT_Utility.formatNumbers(2560) + FRText2)); - ItemList.FluidRegulator_HV.set( - addItem(FluidRegulator_HV.ID, "Fluid Regulator (HV)", FRText1 + GT_Utility.formatNumbers(10240) + FRText2)); - ItemList.FluidRegulator_EV.set( - addItem(FluidRegulator_EV.ID, "Fluid Regulator (EV)", FRText1 + GT_Utility.formatNumbers(40960) + FRText2)); - ItemList.FluidRegulator_IV.set( - addItem( - FluidRegulator_IV.ID, - "Fluid Regulator (IV)", - FRText1 + GT_Utility.formatNumbers(163840) + FRText2)); - ItemList.FluidRegulator_LuV.set( - addItem( - FluidRegulator_LuV.ID, - "Fluid Regulator (LuV)", - FRText1 + GT_Utility.formatNumbers(655360) + FRText2)); - ItemList.FluidRegulator_ZPM.set( - addItem( - FluidRegulator_ZPM.ID, - "Fluid Regulator (ZPM)", - FRText1 + GT_Utility.formatNumbers(2621440) + FRText2)); - ItemList.FluidRegulator_UV.set( - addItem( - FluidRegulator_UV.ID, - "Fluid Regulator (UV)", - FRText1 + GT_Utility.formatNumbers(10485760) + FRText2)); - - ItemList.FluidFilter.set( - addItem(FluidFilter.ID, "Fluid Filter Cover", "Set with Fluid Container to only accept one Fluid Type")); - - ItemList.ItemFilter_Export.set( - addItem( - ItemFilter_Export.ID, - "Filtered Conveyor Cover (Export)", - "Right click with an item to set filter (Only supports Export Mode)")); - - ItemList.ItemFilter_Import.set( - addItem( - ItemFilter_Import.ID, - "Filtered Conveyor Cover (Import)", - "Right click with an item to set filter (Only supports Import Mode)")); - - ItemList.Cover_FluidLimiter - .set(addItem(Cover_FluidLimiter.ID, "Fluid Limiter Cover", "Limits fluid input depending on fill level")); - - ItemList.Conveyor_Module_LV.set( - addItem( - Conveyor_Module_LV.ID, - "Conveyor Module (LV)", - "1 stack every 20 secs (as Cover)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L))); - ItemList.Conveyor_Module_MV.set( - addItem( - Conveyor_Module_MV.ID, - "Conveyor Module (MV)", - "1 stack every 5 secs (as Cover)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 2L))); - ItemList.Conveyor_Module_HV.set( - addItem( - Conveyor_Module_HV.ID, - "Conveyor Module (HV)", - "1 stack every 1 sec (as Cover)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 4L))); - ItemList.Conveyor_Module_EV.set( - addItem( - Conveyor_Module_EV.ID, - "Conveyor Module (EV)", - "1 stack every 1/5 sec (as Cover)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 8L))); - ItemList.Conveyor_Module_IV.set( - addItem( - Conveyor_Module_IV.ID, - "Conveyor Module (IV)", - "1 stack every 1/20 sec (as Cover)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 16L))); - ItemList.Conveyor_Module_LuV.set( - addItem( - Conveyor_Module_LuV.ID, - "Conveyor Module (LuV)", - "2 stacks every 1/20 sec (as Cover)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 32L))); - ItemList.Conveyor_Module_ZPM.set( - addItem( - Conveyor_Module_ZPM.ID, - "Conveyor Module (ZPM)", - "4 stacks every 1/20 sec (as Cover)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 64L))); - ItemList.Conveyor_Module_UV.set( - addItem( - Conveyor_Module_UV.ID, - "Conveyor Module (UV)", - "8 stacks every 1/20 sec (as Cover)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 128L))); - ItemList.Conveyor_Module_UHV.set( - addItem( - Conveyor_Module_UHV.ID, - "Conveyor Module (UHV)", - "16 stacks every 1/20 sec (as Cover)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 256L))); - ItemList.Conveyor_Module_UEV.set( - addItem( - Conveyor_Module_UEV.ID, - "Conveyor Module (UEV)", - "32 stacks every 1/20 sec (as Cover)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 512L))); - ItemList.Conveyor_Module_UIV.set( - addItem( - Conveyor_Module_UIV.ID, - "Conveyor Module (UIV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 512L))); - ItemList.Conveyor_Module_UMV.set( - addItem( - Conveyor_Module_UMV.ID, - "Conveyor Module (UMV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 512L))); - ItemList.Conveyor_Module_UXV.set( - addItem( - Conveyor_Module_UXV.ID, - "Conveyor Module (UXV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 512L))); - ItemList.Conveyor_Module_MAX.set( - addItem( - Conveyor_Module_MAX.ID, - "Conveyor Module (MAX)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 512L))); - - ItemList.Robot_Arm_LV.set( - addItem( - Robot_Arm_LV.ID, - "Robot Arm (LV)", - "1 stack every 20 secs (as Cover)/n " + RAText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1L))); - ItemList.Robot_Arm_MV.set( - addItem( - Robot_Arm_MV.ID, - "Robot Arm (MV)", - "1 stack every 5 secs (as Cover)/n " + RAText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 2L))); - ItemList.Robot_Arm_HV.set( - addItem( - Robot_Arm_HV.ID, - "Robot Arm (HV)", - "1 stack every 1 sec (as Cover)/n " + RAText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 4L))); - ItemList.Robot_Arm_EV.set( - addItem( - Robot_Arm_EV.ID, - "Robot Arm (EV)", - "1 stack every 1/5 sec (as Cover)/n " + RAText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 8L))); - ItemList.Robot_Arm_IV.set( - addItem( - Robot_Arm_IV.ID, - "Robot Arm (IV)", - "1 stack every 1/20 sec (as Cover)/n " + RAText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 16L))); - ItemList.Robot_Arm_LuV.set( - addItem( - Robot_Arm_LuV.ID, - "Robot Arm (LuV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 32L))); - ItemList.Robot_Arm_ZPM.set( - addItem( - Robot_Arm_ZPM.ID, - "Robot Arm (ZPM)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 64L))); - ItemList.Robot_Arm_UV.set( - addItem( - Robot_Arm_UV.ID, - "Robot Arm (UV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 128L))); - ItemList.Robot_Arm_UHV.set( - addItem( - Robot_Arm_UHV.ID, - "Robot Arm (UHV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 256L))); - ItemList.Robot_Arm_UEV.set( - addItem( - Robot_Arm_UEV.ID, - "Robot Arm (UEV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 512L))); - ItemList.Robot_Arm_UIV.set( - addItem( - Robot_Arm_UIV.ID, - "Robot Arm (UIV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 512L))); - ItemList.Robot_Arm_UMV.set( - addItem( - Robot_Arm_UMV.ID, - "Robot Arm (UMV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 512L))); - ItemList.Robot_Arm_UXV.set( - addItem( - Robot_Arm_UXV.ID, - "Robot Arm (UXV)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 512L))); - ItemList.Robot_Arm_MAX.set( - addItem( - Robot_Arm_MAX.ID, - "Robot Arm (MAX)", - PartNotCoverText, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 512L))); - - ItemList.QuantumEye.set(addItem(QuantumEye.ID, "Quantum Eye", "Improved Ender Eye")); - ItemList.QuantumStar.set(addItem(QuantumStar.ID, "Quantum Star", "Improved Nether Star")); - ItemList.Gravistar.set(addItem(Gravistar.ID, "Gravi Star", "Ultimate Nether Star")); - - ItemList.Emitter_LV.set( - addItem( - Emitter_LV.ID, - "Emitter (LV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 1L))); - ItemList.Emitter_MV.set( - addItem( - Emitter_MV.ID, - "Emitter (MV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 2L))); - ItemList.Emitter_HV.set( - addItem( - Emitter_HV.ID, - "Emitter (HV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 4L))); - ItemList.Emitter_EV.set( - addItem( - Emitter_EV.ID, - "Emitter (EV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 8L))); - ItemList.Emitter_IV.set( - addItem( - Emitter_IV.ID, - "Emitter (IV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 16L))); - ItemList.Emitter_LuV.set( - addItem( - Emitter_LuV.ID, - "Emitter (LuV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 32L))); - ItemList.Emitter_ZPM.set( - addItem( - Emitter_ZPM.ID, - "Emitter (ZPM)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 64L))); - ItemList.Emitter_UV.set( - addItem( - Emitter_UV.ID, - "Emitter (UV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 128L))); - ItemList.Emitter_UHV.set( - addItem( - Emitter_UHV.ID, - "Emitter (UHV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 256L))); - ItemList.Emitter_UEV.set( - addItem( - Emitter_UEV.ID, - "Emitter (UEV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 512L))); - ItemList.Emitter_UIV.set( - addItem( - Emitter_UIV.ID, - "Emitter (UIV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 512L))); - ItemList.Emitter_UMV.set( - addItem( - Emitter_UMV.ID, - "Emitter (UMV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 512L))); - ItemList.Emitter_UXV.set( - addItem( - Emitter_UXV.ID, - "Emitter (UXV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 512L))); - ItemList.Emitter_MAX.set( - addItem( - Emitter_MAX.ID, - "Emitter (MAX)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 512L))); - - ItemList.Sensor_LV.set( - addItem( - Sensor_LV.ID, - "Sensor (LV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1L))); - - ItemList.Sensor_MV.set( - addItem( - Sensor_MV.ID, - "Sensor (MV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L))); - ItemList.Sensor_HV.set( - addItem( - Sensor_HV.ID, - "Sensor (HV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 4L))); - ItemList.Sensor_EV.set( - addItem( - Sensor_EV.ID, - "Sensor (EV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 8L))); - ItemList.Sensor_IV.set( - addItem( - Sensor_IV.ID, - "Sensor (IV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 16L))); - ItemList.Sensor_LuV.set( - addItem( - Sensor_LuV.ID, - "Sensor (LuV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 32L))); - ItemList.Sensor_ZPM.set( - addItem( - Sensor_ZPM.ID, - "Sensor (ZPM)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 64L))); - ItemList.Sensor_UV.set( - addItem( - Sensor_UV.ID, - "Sensor (UV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 128L))); - ItemList.Sensor_UHV.set( - addItem( - Sensor_UHV.ID, - "Sensor (UHV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 256L))); - ItemList.Sensor_UEV.set( - addItem( - Sensor_UEV.ID, - "Sensor (UEV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 512L))); - ItemList.Sensor_UIV.set( - addItem( - Sensor_UIV.ID, - "Sensor (UIV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 512L))); - ItemList.Sensor_UMV.set( - addItem( - Sensor_UMV.ID, - "Sensor (UMV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 512L))); - ItemList.Sensor_UXV.set( - addItem( - Sensor_UXV.ID, - "Sensor (UXV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 512L))); - ItemList.Sensor_MAX.set( - addItem( - Sensor_MAX.ID, - "Sensor (MAX)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 512L))); - - ItemList.Field_Generator_LV.set( - addItem( - Field_Generator_LV.ID, - "Field Generator (LV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1L))); - ItemList.Field_Generator_MV.set( - addItem( - Field_Generator_MV.ID, - "Field Generator (MV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 2L))); - ItemList.Field_Generator_HV.set( - addItem( - Field_Generator_HV.ID, - "Field Generator (HV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 4L))); - ItemList.Field_Generator_EV.set( - addItem( - Field_Generator_EV.ID, - "Field Generator (EV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 8L))); - ItemList.Field_Generator_IV.set( - addItem( - Field_Generator_IV.ID, - "Field Generator (IV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 16L))); - ItemList.Field_Generator_LuV.set( - addItem( - Field_Generator_LuV.ID, - "Field Generator (LuV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 32L))); - ItemList.Field_Generator_ZPM.set( - addItem( - Field_Generator_ZPM.ID, - "Field Generator (ZPM)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 64L))); - ItemList.Field_Generator_UV.set( - addItem( - Field_Generator_UV.ID, - "Field Generator (UV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 128L))); - ItemList.Field_Generator_UHV.set( - addItem( - Field_Generator_UHV.ID, - "Field Generator (UHV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 256L))); - ItemList.Field_Generator_UEV.set( - addItem( - Field_Generator_UEV.ID, - "Field Generator (UEV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 512L))); - ItemList.Field_Generator_UIV.set( - addItem( - Field_Generator_UIV.ID, - "Field Generator (UIV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 512L))); - ItemList.Field_Generator_UMV.set( - addItem( - Field_Generator_UMV.ID, - "Field Generator (UMV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 512L))); - ItemList.Field_Generator_UXV.set( - addItem( - Field_Generator_UXV.ID, - "Field Generator (UXV)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 512L))); - ItemList.Field_Generator_MAX.set( - addItem( - Field_Generator_MAX.ID, - "Field Generator (MAX)", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 512L))); - - ItemList.StableAdhesive.set( - addItem( - StableAdhesive.ID, - "Hyper-Stable Self-Healing Adhesive", - "Complete and selective adhesion, even when torn or damaged", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 30L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LIMUS, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VINCULUM, 5L))); - ItemList.SuperconductorComposite.set( - addItem( - SuperconductorComposite.ID, - "Superconductor Rare-Earth Composite", - "Zero resistance to electrical and quantum flow, regardless of temperature", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 50L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 25L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 15L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 10L))); - ItemList.NaquadriaSupersolid.set( - addItem( - NaquadriaSupersolid.ID, - "Black Body Naquadria Supersolid", - "Flows like a fluid and reflects nothing, perfect absorption and transfer", - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 100L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 60L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 40L), - new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 10L))); - - // Circuits ULV - LuV. - ItemList.Circuit_Primitive.set( - addItem( - Circuit_Primitive.ID, - "Vacuum Tube", - "A very simple Circuit", - OrePrefixes.circuit.get(Materials.ULV), - SubTag.NO_UNIFICATION)); - ItemList.Circuit_Basic.set( - addItem( - Circuit_Basic.ID, - "Integrated Logic Circuit", - "A Basic Circuit", - OrePrefixes.circuit.get(Materials.LV), - SubTag.NO_UNIFICATION)); - ItemList.Circuit_Good.set( - addItem( - Circuit_Good.ID, - "Good Electronic Circuit", - "A Good Circuit", - OrePrefixes.circuit.get(Materials.MV), - SubTag.NO_UNIFICATION)); - ItemList.Circuit_Advanced.set( - addItem( - Circuit_Advanced.ID, - "Processor Assembly", - "An Advanced Circuit", - OrePrefixes.circuit.get(Materials.HV), - SubTag.NO_UNIFICATION)); - ItemList.Circuit_Data.set( - addItem( - Circuit_Data.ID, - "Workstation", - "An Extreme Circuit", - OrePrefixes.circuit.get(Materials.EV), - SubTag.NO_UNIFICATION)); - ItemList.Circuit_Elite.set( - addItem( - Circuit_Elite.ID, - "Mainframe", - "An Elite Circuit", - OrePrefixes.circuit.get(Materials.IV), - SubTag.NO_UNIFICATION)); - ItemList.Circuit_Master.set( - addItem( - Circuit_Master.ID, - "Nanoprocessor Mainframe", - "A Master Circuit", - OrePrefixes.circuit.get(Materials.LuV), - SubTag.NO_UNIFICATION)); - - // Backwards compatibility. - ItemList.Circuit_Parts_Vacuum_Tube.set(ItemList.Circuit_Primitive.get(1)); - ItemList.Circuit_Computer.set(ItemList.Circuit_Advanced.get(1)); - - ItemList.Tool_DataOrb.set( - addItem( - Tool_DataOrb.ID, - "Data Orb", - "A High Capacity Data Storage", - SubTag.NO_UNIFICATION, - new Behaviour_DataOrb())); - - ItemList.Tool_DataStick.set( - addItem( - Tool_DataStick.ID, - "Data Stick", - "A Low Capacity Data Storage", - SubTag.NO_UNIFICATION, - new Behaviour_DataStick())); - - ItemList.Tool_Cover_Copy_Paste.set( - addItem( - Tool_Cover_Copy_Paste.ID, - "Cover Copy/Paste tool", - "Set Cover Massively.", - Behaviour_Cover_Tool.INSTANCE, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 6L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 6L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 6L))); - - ItemList.Circuit_Board_Basic.set(addItem(Circuit_Board_Basic.ID, "Coated Circuit Board", "A Basic Board")); - ItemList.Circuit_Board_Coated.set(ItemList.Circuit_Board_Basic.get(1)); - ItemList.Circuit_Board_Advanced - .set(addItem(Circuit_Board_Advanced.ID, "Epoxy Circuit Board", "An Advanced Board")); - ItemList.Circuit_Board_Epoxy.set(ItemList.Circuit_Board_Advanced.get(1)); - ItemList.Circuit_Board_Elite - .set(addItem(Circuit_Board_Elite.ID, "Multilayer Fiber-Reinforced Circuit Board", "An Elite Board")); - ItemList.Circuit_Board_Multifiberglass.set(ItemList.Circuit_Board_Elite.get(1)); - ItemList.Circuit_Parts_Crystal_Chip_Elite - .set(addItem(Circuit_Parts_Crystal_Chip_Elite.ID, "Engraved Crystal Chip", "Needed for Circuits")); - ItemList.Circuit_Parts_Crystal_Chip_Master - .set(addItem(Circuit_Parts_Crystal_Chip_Master.ID, "Engraved Lapotron Chip", "Needed for Circuits")); - ItemList.Circuit_Parts_Crystal_Chip_Wetware - .set(addItem(Circuit_Parts_Crystal_Chip_Wetware.ID, "Living Crystal Chip", "Needed for Circuits")); - ItemList.Circuit_Parts_Advanced.set(addItem(Circuit_Parts_Advanced.ID, "Diode", "Basic Electronic Component")); - ItemList.Circuit_Parts_Diode.set(ItemList.Circuit_Parts_Advanced.get(1)); - ItemList.Circuit_Parts_Wiring_Basic - .set(addItem(Circuit_Parts_Wiring_Basic.ID, "Resistor", "Basic Electronic Component")); - ItemList.Circuit_Parts_Resistor.set(ItemList.Circuit_Parts_Wiring_Basic.get(1)); - ItemList.Circuit_Parts_Wiring_Advanced - .set(addItem(Circuit_Parts_Wiring_Advanced.ID, "Transistor", "Basic Electronic Component")); - ItemList.Circuit_Parts_Transistor.set(ItemList.Circuit_Parts_Wiring_Advanced.get(1)); - ItemList.Circuit_Parts_Wiring_Elite - .set(addItem(Circuit_Parts_Wiring_Elite.ID, "Capacitor", "Electronic Component")); - ItemList.Circuit_Parts_Capacitor.set(ItemList.Circuit_Parts_Wiring_Elite.get(1)); - ItemList.Empty_Board_Basic.set(addItem(Empty_Board_Basic.ID, "Phenolic Circuit Board", "A Good Board")); - ItemList.Circuit_Board_Phenolic.set(ItemList.Empty_Board_Basic.get(1)); - ItemList.Empty_Board_Elite - .set(addItem(Empty_Board_Elite.ID, "Fiber-Reinforced Circuit Board", "An Extreme Board")); - ItemList.Circuit_Board_Fiberglass.set(ItemList.Empty_Board_Elite.get(1)); - - ItemList.Component_Sawblade_Diamond.set( - addItem( - Component_Sawblade_Diamond.ID, - "Diamond Sawblade", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L), - OreDictNames.craftingDiamondBlade)); - ItemList.Component_Grinder_Diamond.set( - addItem( - Component_Grinder_Diamond.ID, - "Diamond Grinding Head", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 6L), - OreDictNames.craftingGrinder)); - ItemList.Component_Grinder_Tungsten.set( - addItem( - Component_Grinder_Tungsten.ID, - "Tungsten Grinding Head", - "", - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 6L), - OreDictNames.craftingGrinder)); - - ItemList.Upgrade_Muffler.set( - addItem( - Upgrade_Muffler.ID, - "Muffler Upgrade", - "Makes Machines silent", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2L))); - ItemList.Upgrade_Lock.set( - addItem( - Upgrade_Lock.ID, - "Lock Upgrade", - "Protects your Machines", - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 4L))); - - ItemList.Component_Filter.set( - addItem( - Component_Filter.ID, - "Item Filter", - "", - new ItemData(Materials.Zinc, OrePrefixes.foil.mMaterialAmount * 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L), - OreDictNames.craftingFilter)); - - ItemList.Cover_Controller.set( - addItem( - Cover_Controller.ID, - "Machine Controller Cover", - "Turns Machines ON/OFF", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L))); - ItemList.Cover_ActivityDetector.set( - addItem( - Cover_ActivityDetector.ID, - "Activity Detector Cover", - "Gives out Activity as Redstone", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L))); - ItemList.Cover_FluidDetector.set( - addItem( - Cover_FluidDetector.ID, - "Fluid Detector Cover", - "Gives out Fluid Amount as Redstone", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L))); - ItemList.Cover_ItemDetector.set( - addItem( - Cover_ItemDetector.ID, - "Item Detector Cover", - "Gives out Item Amount as Redstone", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1L))); - ItemList.Cover_EnergyDetector.set( - addItem( - Cover_EnergyDetector.ID, - "Energy Detector Cover", - "Gives out Energy Amount as Redstone", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L))); - ItemList.Cover_PlayerDetector.set( - addItem( - Cover_PlayerDetector.ID, - "Player Detector Cover", - "Gives out close Players as Redstone", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L))); - ItemList.Cover_FluidStorageMonitor.set( - addItem( - Cover_FLuidStorageMonitor.ID, - "Fluid Storage Monitor Cover", - "Displays the fluid stored in the Tank", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L))); - ItemList.Cover_Chest_Basic.set( - addItem( - Cover_Chest_Basic.ID, - "Basic Item Holder", - "Hold a few item for use within machine GUI", - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2L))); - ItemList.Cover_Chest_Good.set( - addItem( - Cover_Chest_Good.ID, - "Good Item Holder", - "Hold a few item for use within machine GUI", - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2L))); - ItemList.Cover_Chest_Advanced.set( - addItem( - Cover_Chest_Advanced.ID, - "Advanced Item Holder", - "Hold a few item for use within machine GUI", - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2L))); - - ItemList.Cover_Screen.set( - addItem( - Cover_Screen.ID, - "Computer Monitor Cover", - "Displays Data and GUI", - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L))); - ItemList.Cover_Crafting.set( - addItem( - Cover_Crafting.ID, - "Crafting Table Cover", - "Better than a wooden Workbench", - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 4L))); - ItemList.Cover_Drain.set( - addItem( - Cover_Drain.ID, - "Drain Module Cover", - "Absorbs Fluids and collects Rain", - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L))); - - ItemList.Cover_Shutter.set( - addItem( - Cover_Shutter.ID, - "Shutter Module Cover", - "Blocks Inventory/Tank Side. Use together with Machine Controller.", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L))); - - ItemList.Cover_SolarPanel.set( - addItem( - Cover_SolarPanel.ID, - "Solar Panel", - "May the Sun be with you (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 1L))); - ItemList.Cover_SolarPanel_8V.set( - addItem( - Cover_SolarPanel_8V.ID, - "Solar Panel (8V)", - "8 Volt Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 2L))); - ItemList.Cover_SolarPanel_LV.set( - addItem( - Cover_SolarPanel_LV.ID, - "Solar Panel (LV)", - "Low Voltage Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 4L))); - ItemList.Cover_SolarPanel_MV.set( - addItem( - Cover_SolarPanel_MV.ID, - "Solar Panel (MV)", - "Medium Voltage Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 8L))); - ItemList.Cover_SolarPanel_HV.set( - addItem( - Cover_SolarPanel_HV.ID, - "Solar Panel (HV)", - "High Voltage Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 16L))); - ItemList.Cover_SolarPanel_EV.set( - addItem( - Cover_SolarPanel_EV.ID, - "Solar Panel (EV)", - "Extreme Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 32L))); - ItemList.Cover_SolarPanel_IV.set( - addItem( - Cover_SolarPanel_IV.ID, - "Solar Panel (IV)", - "Insane Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 64L))); - ItemList.Cover_SolarPanel_LuV.set( - addItem( - Cover_SolarPanel_LuV.ID, - "Solar Panel (LuV)", - "Ludicrous Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 64L))); - ItemList.Cover_SolarPanel_ZPM.set( - addItem( - Cover_SolarPanel_ZPM.ID, - "Solar Panel (ZPM)", - "ZPM Voltage Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 64L))); - ItemList.Cover_SolarPanel_UV.set( - addItem( - Cover_SolarPanel_UV.ID, - "Solar Panel (UV)", - "Ultimate Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 64L))); - - ItemList.Tool_Sonictron.set( - addItem( - Tool_Sonictron.ID, - "Sonictron", - "Bring your Music with you", - Behaviour_Sonictron.INSTANCE, - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 4L))); - ItemList.Tool_Cheat.set( - addItem( - Tool_Cheat.ID, - "Debug Scanner", - "Also an Infinite Energy Source", - Behaviour_Scanner.INSTANCE, - new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 64L))); - ItemList.Tool_Scanner.set( - addItem( - Tool_Scanner.ID, - "Portable Scanner", - "Tricorder", - Behaviour_Scanner.INSTANCE, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 6L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 6L))); - - ItemList.NC_SensorKit.set(addItem(NC_SensorKit.ID, "GregTech Sensor Kit", "", new Behaviour_SensorKit())); - ItemList.Duct_Tape.set( - addItem( - Duct_Tape.ID, - "BrainTech Aerospace Advanced Reinforced Duct Tape FAL-84", - "If you can't fix it with this, use more of it!", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - OreDictNames.craftingDuctTape)); - ItemList.McGuffium_239.set( - addItem( - McGuffium_239.ID, - "Mc Guffium 239", - "42% better than Phlebotnium", - new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SPIRITUS, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITIUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 8L))); - - ItemList.Cover_RedstoneTransmitterExternal.set( - addItem( - Cover_RedstoneTransmitterExternal.ID, - "Redstone Transmitter (External)", - "Transfers Redstone signals wireless", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L))); - ItemList.Cover_RedstoneTransmitterInternal.set( - addItem( - Cover_RedstoneTransmitterInternal.ID, - "Redstone Transmitter (Internal)", - "Transfers Redstone signals wireless", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L))); - ItemList.Cover_RedstoneReceiverExternal.set( - addItem( - Cover_RedstoneReceiverExternal.ID, - "Redstone Receiver (External)", - "Transfers Redstone signals wireless", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L))); - ItemList.Cover_RedstoneReceiverInternal.set( - addItem( - Cover_RedstoneReceiverInternal.ID, - "Redstone Receiver (Internal)", - "Transfers Redstone signals wireless", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L))); - - ItemList.Cover_NeedsMaintainance.set( - addItem( - Cover_NeedsMaintenance.ID, - "Needs Maintenance Cover", - "Attach to Multiblock Controller. Emits Redstone Signal if needs Maintenance", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L))); - - ItemList.Steam_Regulator_LV.set( - addItem( - Steam_Regulator_LV.ID, - "Steam Regulator (LV)", - GT_Utility.formatNumbers(1024) + PartCoverText + GT_Utility.formatNumbers(1024 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L))); - ItemList.Steam_Regulator_MV.set( - addItem( - Steam_Regulator_MV.ID, - "Steam Regulator (MV)", - GT_Utility.formatNumbers(2048) + PartCoverText + GT_Utility.formatNumbers(2048 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L))); - ItemList.Steam_Regulator_HV.set( - addItem( - Steam_Regulator_HV.ID, - "Steam Regulator (HV)", - GT_Utility.formatNumbers(4096) + PartCoverText + GT_Utility.formatNumbers(4096 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L))); - ItemList.Steam_Regulator_EV.set( - addItem( - Steam_Regulator_EV.ID, - "Steam Regulator (EV)", - GT_Utility.formatNumbers(8192) + PartCoverText + GT_Utility.formatNumbers(8192 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 8L))); - ItemList.Steam_Regulator_IV.set( - addItem( - Steam_Regulator_IV.ID, - "Steam Regulator (IV)", - GT_Utility.formatNumbers(16384) + PartCoverText + GT_Utility.formatNumbers(16384 * 20) + PartCoverText2, - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 16L))); - ItemList.Electromagnet_Iron.set( - addItem( - Electromagnet_Iron.ID, - "Iron Electromagnet", - MagnetTiers.buildMagnetTooltip(MagnetTiers.Iron), - new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 8))); - ItemList.Electromagnet_Steel.set( - addItem( - Electromagnet_Steel.ID, - "Steel Electromagnet", - MagnetTiers.buildMagnetTooltip(MagnetTiers.Steel), - new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 16))); - ItemList.Electromagnet_Neodymium.set( - addItem( - Electromagnet_Neodymium.ID, - "Neodymium Electromagnet", - MagnetTiers.buildMagnetTooltip(MagnetTiers.Neodymium), - new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 24))); - ItemList.Electromagnet_Samarium.set( - addItem( - Electromagnet_Samarium.ID, - EnumChatFormatting.YELLOW + "Samarium Electromagnet", - MagnetTiers.buildMagnetTooltip(MagnetTiers.Samarium), - new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 32))); - ItemList.Electromagnet_Tengam.set( - addItem( - Electromagnet_Tengam.ID, - EnumChatFormatting.GREEN + "Tengam Electromagnet", - MagnetTiers.buildMagnetTooltip(MagnetTiers.Tengam), - new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 40))); - ItemList.Black_Hole_Opener.set( - addItem( - Black_Hole_Opener.ID, - "Black Hole Activation Catalyst", - "Opens a semi-stable black hole", - new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 32), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 64))); - ItemList.Black_Hole_Closer.set( - addItem( - Black_Hole_Closer.ID, - "Black Hole Deactivation Catalyst", - "Safely closes a semi-stable black hole", - new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 32), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 64))); - - // Empty battery hulls - ItemList.BatteryHull_EV.set( - addItem( - BatteryHull_EV.ID, - "Small Sunnarium Battery (Empty)", - "An empty EV Battery Container", - new ItemData(Materials.BlueSteel, OrePrefixes.plate.mMaterialAmount * 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 8L))); - ItemList.BatteryHull_IV.set( - addItem( - BatteryHull_IV.ID, - "Medium Sunnarium Battery (Empty)", - "An empty IV Battery Container", - new ItemData(Materials.RoseGold, OrePrefixes.plate.mMaterialAmount * 6L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 16L))); - ItemList.BatteryHull_LuV.set( - addItem( - BatteryHull_LuV.ID, - "Large Sunnarium Battery (Empty)", - "An empty LuV Battery Container", - new ItemData(Materials.RedSteel, OrePrefixes.plate.mMaterialAmount * 18L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 32L))); - ItemList.BatteryHull_ZPM.set( - addItem( - BatteryHull_ZPM.ID, - "Medium Naquadria Battery (Empty)", - "An empty ZPM Energy Storage", - new ItemData(Materials.Europium, OrePrefixes.plate.mMaterialAmount * 6L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 64L))); - ItemList.BatteryHull_UV.set( - addItem( - BatteryHull_UV.ID, - "Large Naquadria Battery (Empty)", - "An empty UV Energy Storage", - new ItemData(Materials.Americium, OrePrefixes.plate.mMaterialAmount * 18L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 128L))); - ItemList.BatteryHull_UHV.set( - addItem( - BatteryHull_UHV.ID, - "Small Neutronium Battery (Empty)", - "An empty UHV Energy Storage", - new ItemData(Materials.Naquadah, OrePrefixes.plate.mMaterialAmount * 24L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 256L))); - ItemList.BatteryHull_UEV.set( - addItem( - BatteryHull_UEV.ID, - "Medium Neutronium Battery (Empty)", - "An empty UEV Energy Storage", - new ItemData(Materials.NaquadahEnriched, OrePrefixes.plate.mMaterialAmount * 36L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 512L))); - ItemList.BatteryHull_UIV.set( - addItem( - BatteryHull_UIV.ID, - "Large Neutronium Battery (Empty)", - "An empty UIV Energy Storage", - new ItemData(Materials.NaquadahAlloy, OrePrefixes.plate.mMaterialAmount * 48L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1024L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1024L))); - ItemList.BatteryHull_UMV.set( - addItem( - BatteryHull_UMV.ID, - "Medium Plasma Battery (Empty)", - "An empty UMV Energy Storage", - new ItemData(Materials.Neutronium, OrePrefixes.plate.mMaterialAmount * 56L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2048L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2048L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2048L))); - ItemList.BatteryHull_UxV.set( - addItem( - BatteryHull_UxV.ID, - "Large Plasma Battery (Empty)", - "An empty UXV Energy Storage", - new ItemData(Materials.DraconiumAwakened, OrePrefixes.plate.mMaterialAmount * 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4096L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4096L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 4096L))); - - ItemList.BatteryHull_EV_Full.set( - addItem( - BatteryHull_EV_Full.ID, - "Small Sunnarium Battery", - "Reusable", - "batteryEV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L))); - - ItemList.BatteryHull_IV_Full.set( - addItem( - BatteryHull_IV_Full.ID, - "Medium Sunnarium Battery", - "Reusable", - "batteryIV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L))); - - ItemList.BatteryHull_LuV_Full.set( - addItem( - BatteryHull_LuV_Full.ID, - "Large Sunnarium Battery", - "Reusable", - "batteryLuV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L))); - - ItemList.BatteryHull_ZPM_Full.set( - addItem( - BatteryHull_ZPM_Full.ID, - "Medium Naquadria Battery", - "Reusable", - "batteryZPM", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L))); - - ItemList.BatteryHull_UV_Full.set( - addItem( - BatteryHull_UV_Full.ID, - "Large Naquadria Battery", - "Reusable", - "batteryUV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L))); - - ItemList.BatteryHull_UHV_Full.set( - addItem( - BatteryHull_UHV_Full.ID, - "Small Neutronium Battery", - "Reusable", - "batteryUHV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L))); - - ItemList.BatteryHull_UEV_Full.set( - addItem( - BatteryHull_UEV_Full.ID, - "Medium Neutronium Battery", - "Reusable", - "batteryUEV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L))); - - ItemList.BatteryHull_UIV_Full.set( - addItem( - BatteryHull_UIV_Full.ID, - "Large Neutronium Battery", - "Reusable", - "batteryUIV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L))); - - ItemList.BatteryHull_UMV_Full.set( - addItem( - BatteryHull_UMV_Full.ID, - "Medium Infinity Battery", - "Reusable", - "batteryUMV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L))); - - ItemList.BatteryHull_UxV_Full.set( - addItem( - BatteryHull_UxV_Full.ID, - "Large Infinity Battery", - "Reusable", - "batteryUXV", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L))); - - removeRecipes(); - setBurnValues(); - oredictBlacklistEntries(); - registerCovers(); - registerBehaviors(); - setAllFluidContainerStats(); - setAllElectricStats(); - registerTieredTooltips(); - - craftingShapedRecipes(); - craftingShapelessRecipes(); - } - - private static final Map cauldronRemap = new HashMap<>(); - - public static void registerCauldronCleaningFor(Materials in, Materials out) { - cauldronRemap.put(in, out); - } - - @Override - public boolean onEntityItemUpdate(EntityItem aItemEntity) { - int aDamage = aItemEntity.getEntityItem() - .getItemDamage(); - if ((aDamage < 32000) && (aDamage >= 0) && (!aItemEntity.worldObj.isRemote)) { - Materials aMaterial = GregTech_API.sGeneratedMaterials[(aDamage % 1000)]; - if ((aMaterial != null) && (aMaterial != Materials.Empty) && (aMaterial != Materials._NULL)) { - int tX = MathHelper.floor_double(aItemEntity.posX); - int tY = MathHelper.floor_double(aItemEntity.posY); - int tZ = MathHelper.floor_double(aItemEntity.posZ); - OrePrefixes aPrefix = this.mGeneratedPrefixList[(aDamage / 1000)]; - if ((aPrefix == OrePrefixes.dustImpure) || (aPrefix == OrePrefixes.dustPure)) { - Block tBlock = aItemEntity.worldObj.getBlock(tX, tY, tZ); - byte tMetaData = (byte) aItemEntity.worldObj.getBlockMetadata(tX, tY, tZ); - if ((tBlock == Blocks.cauldron) && (tMetaData > 0)) { - - aMaterial = cauldronRemap.getOrDefault(aMaterial, aMaterial); - - aItemEntity.setEntityItemStack( - GT_OreDictUnificator - .get(OrePrefixes.dust, aMaterial, aItemEntity.getEntityItem().stackSize)); - aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3); - return true; - } - } else if (aPrefix == OrePrefixes.crushed) { - Block tBlock = aItemEntity.worldObj.getBlock(tX, tY, tZ); - byte tMetaData = (byte) aItemEntity.worldObj.getBlockMetadata(tX, tY, tZ); - if ((tBlock == Blocks.cauldron) && (tMetaData > 0)) { - aItemEntity.setEntityItemStack( - GT_OreDictUnificator - .get(OrePrefixes.crushedPurified, aMaterial, aItemEntity.getEntityItem().stackSize)); - aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3); - return true; - } - } else if (aPrefix == OrePrefixes.dust && aMaterial == Materials.Wheat) { - Block tBlock = aItemEntity.worldObj.getBlock(tX, tY, tZ); - byte tMetaData = (byte) aItemEntity.worldObj.getBlockMetadata(tX, tY, tZ); - if ((tBlock == Blocks.cauldron) && (tMetaData > 0)) { - aItemEntity.setEntityItemStack(ItemList.Food_Dough.get(aItemEntity.getEntityItem().stackSize)); - aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3); - return true; - } - } - } - } - return false; - } - - @Override - protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - super.addAdditionalToolTips(aList, aStack, aPlayer); - int aDamage = aStack.getItemDamage(); - if ((aDamage < 32000) && (aDamage >= 0)) { - Materials aMaterial = GregTech_API.sGeneratedMaterials[(aDamage % 1000)]; - if ((aMaterial != null) && (aMaterial != Materials.Empty) && (aMaterial != Materials._NULL)) { - OrePrefixes aPrefix = this.mGeneratedPrefixList[(aDamage / 1000)]; - if ((aPrefix == OrePrefixes.dustImpure) || (aPrefix == OrePrefixes.dustPure)) { - aList.add(this.mToolTipPurify); - } - } - } - } - - public boolean isPlasmaCellUsed(OrePrefixes aPrefix, Materials aMaterial) { - Collection fusionRecipes = RecipeMaps.fusionRecipes.getAllRecipes(); - if (aPrefix == OrePrefixes.cellPlasma && aMaterial.getPlasma(1L) != null) { // Materials has a plasma fluid - for (GT_Recipe recipe : fusionRecipes) { // Loop through fusion recipes - if (recipe.getFluidOutput(0) != null) { // Make sure fluid output can't be null (not sure if possible) - if (recipe.getFluidOutput(0) - .isFluidEqual(aMaterial.getPlasma(1L))) return true; // Fusion recipe - // output matches - // current plasma - // cell fluid - } - } - } - return false; - } - - @Override - public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) { - return (aDoShowAllItems) || (((aPrefix != OrePrefixes.gem) || (!aMaterial.mName.startsWith("Infused"))) - && (aPrefix != OrePrefixes.dustTiny) - && (aPrefix != OrePrefixes.dustSmall) - && (aPrefix != OrePrefixes.dustImpure) - && (aPrefix != OrePrefixes.dustPure) - && (aPrefix != OrePrefixes.crushed) - && (aPrefix != OrePrefixes.crushedPurified) - && (aPrefix != OrePrefixes.crushedCentrifuged) - && (aPrefix != OrePrefixes.ingotHot) - && !(aPrefix == OrePrefixes.cellPlasma && !isPlasmaCellUsed(aPrefix, aMaterial))); - } - - @Override - public ItemStack getContainerItem(ItemStack aStack) { - int aDamage = aStack.getItemDamage(); - if (((aDamage >= 32430) && (aDamage <= 32461)) || (aDamage == 32465 || aDamage == 32466)) { - return ItemList.Spray_Empty.get(1L); - } - if ((aDamage == 32479) || (aDamage == 32476)) { - return new ItemStack(this, 1, aDamage - 2); - } - if (aDamage == 32401) { - return new ItemStack(this, 1, aDamage - 1); - } - return super.getContainerItem(aStack); - } - - @Override - public boolean doesMaterialAllowGeneration(OrePrefixes aPrefix, Materials aMaterial) { - return (super.doesMaterialAllowGeneration(aPrefix, aMaterial)); - } - - private void setBurnValues() { - setBurnValue(17000 + Materials.Wood.mMetaItemSubID, 1600); - } - - private void setAllFluidContainerStats() { - setFluidContainerStats(32000 + Large_Fluid_Cell_Steel.ID, 8_000L, 64L); - setFluidContainerStats(32000 + Large_Fluid_Cell_TungstenSteel.ID, 512_000L, 32L); - setFluidContainerStats(32000 + Large_Fluid_Cell_Aluminium.ID, 32_000L, 64L); - setFluidContainerStats(32000 + Large_Fluid_Cell_StainlessSteel.ID, 64_000L, 64L); - setFluidContainerStats(32000 + Large_Fluid_Cell_Titanium.ID, 128_000L, 64L); - setFluidContainerStats(32000 + Large_Fluid_Cell_Chrome.ID, 2_048_000L, 8L); - setFluidContainerStats(32000 + Large_Fluid_Cell_Iridium.ID, 8_192_000L, 2L); - setFluidContainerStats(32000 + Large_Fluid_Cell_Osmium.ID, 32_768_000L, 1L); - setFluidContainerStats(32000 + Large_Fluid_Cell_Neutronium.ID, 131_072_000L, 1L); - setFluidContainerStats(32000 + Electromagnet_Iron.ID, 0L, 1L); - setFluidContainerStats(32000 + Electromagnet_Steel.ID, 0L, 1L); - setFluidContainerStats(32000 + Electromagnet_Neodymium.ID, 0L, 1L); - setFluidContainerStats(32000 + Electromagnet_Samarium.ID, 0L, 1L); - setFluidContainerStats(32000 + Electromagnet_Tengam.ID, 0L, 1L); - } - - private void oredictBlacklistEntries() { - GT_OreDictUnificator.addToBlacklist(new ItemStack(this, 1, 17000 + Materials.Wood.mMetaItemSubID)); - } - - private void registerCovers() { - final ITexture doesWorkCoverTexture = TextureFactory.of( - TextureFactory.of(OVERLAY_ACTIVITYDETECTOR), - TextureFactory.builder() - .addIcon(OVERLAY_ACTIVITYDETECTOR_GLOW) - .glow() - .build()); - - final ITexture playerDectectorCoverTexture = TextureFactory.of( - TextureFactory.of(OVERLAY_ACTIVITYDETECTOR), - TextureFactory.builder() - .addIcon(OVERLAY_ACTIVITYDETECTOR_GLOW) - .glow() - .build()); - final ITexture screenCoverTexture = TextureFactory.of( - TextureFactory.of(OVERLAY_SCREEN), - TextureFactory.builder() - .addIcon(OVERLAY_SCREEN_GLOW) - .glow() - .build()); - - GregTech_API.registerCover( - new ItemStack(this, 1, 17000 + Materials.Wood.mMetaItemSubID), - TextureFactory.of(COVER_WOOD_PLATE), - null); - - GregTech_API.registerCover( - ItemList.Electric_Pump_LV.get(1L), - TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_Pump(32, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.Electric_Pump_MV.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_Pump(128, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.Electric_Pump_HV.get(1L), - TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_Pump(512, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.Electric_Pump_EV.get(1L), - TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_Pump(2048, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.Electric_Pump_IV.get(1L), - TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_Pump(8192, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.Electric_Pump_LuV.get(1L), - TextureFactory.of(MACHINE_CASINGS[6][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_Pump(32768, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.Electric_Pump_ZPM.get(1L), - TextureFactory.of(MACHINE_CASINGS[7][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_Pump(131072, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.Electric_Pump_UV.get(1L), - TextureFactory.of(MACHINE_CASINGS[8][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_Pump(524288, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.Electric_Pump_UHV.get(1L), - TextureFactory.of(MACHINE_CASINGS[9][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_Pump(1048576, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.Electric_Pump_UEV.get(1L), - TextureFactory.of(MACHINE_CASINGS[10][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_Pump(2097152, TextureFactory.of(OVERLAY_PUMP))); - - GregTech_API.registerCover( - ItemList.Steam_Valve_LV.get(1L), - TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_VALVE)), - new GT_Cover_SteamValve(1024, TextureFactory.of(OVERLAY_VALVE))); - GregTech_API.registerCover( - ItemList.Steam_Valve_MV.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_VALVE)), - new GT_Cover_SteamValve(2048, TextureFactory.of(OVERLAY_VALVE))); - GregTech_API.registerCover( - ItemList.Steam_Valve_HV.get(1L), - TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_VALVE)), - new GT_Cover_SteamValve(4096, TextureFactory.of(OVERLAY_VALVE))); - GregTech_API.registerCover( - ItemList.Steam_Valve_EV.get(1L), - TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_VALVE)), - new GT_Cover_SteamValve(8192, TextureFactory.of(OVERLAY_VALVE))); - GregTech_API.registerCover( - ItemList.Steam_Valve_IV.get(1L), - TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_VALVE)), - new GT_Cover_SteamValve(16384, TextureFactory.of(OVERLAY_VALVE))); - - GregTech_API.registerCover( - ItemList.FluidRegulator_LV.get(1L), - TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_FluidRegulator(32, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.FluidRegulator_MV.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_FluidRegulator(128, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.FluidRegulator_HV.get(1L), - TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_FluidRegulator(512, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.FluidRegulator_EV.get(1L), - TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_FluidRegulator(2048, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.FluidRegulator_IV.get(1L), - TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_FluidRegulator(8192, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.FluidRegulator_LuV.get(1L), - TextureFactory.of(MACHINE_CASINGS[6][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_FluidRegulator(32768, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.FluidRegulator_ZPM.get(1L), - TextureFactory.of(MACHINE_CASINGS[7][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_FluidRegulator(131072, TextureFactory.of(OVERLAY_PUMP))); - GregTech_API.registerCover( - ItemList.FluidRegulator_UV.get(1L), - TextureFactory.of(MACHINE_CASINGS[8][0], TextureFactory.of(OVERLAY_PUMP)), - new GT_Cover_FluidRegulator(524288, TextureFactory.of(OVERLAY_PUMP))); - - GregTech_API.registerCover( - ItemList.FluidFilter.get(1L), - TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_SHUTTER)), - new GT_Cover_Fluidfilter(TextureFactory.of(OVERLAY_SHUTTER))); - - GregTech_API.registerCover( - ItemList.ItemFilter_Export.get(1L), - TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_ItemFilter(true, TextureFactory.of(OVERLAY_CONVEYOR))); - - GregTech_API.registerCover( - ItemList.ItemFilter_Import.get(1L), - TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_ItemFilter(false, TextureFactory.of(OVERLAY_CONVEYOR))); - - GregTech_API.registerCover( - ItemList.Cover_FluidLimiter.get(1L), - TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_SHUTTER)), - new GT_Cover_FluidLimiter(TextureFactory.of(OVERLAY_SHUTTER))); - - GregTech_API.registerCover( - ItemList.Conveyor_Module_LV.get(1L), - TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_Conveyor(400, 1, TextureFactory.of(OVERLAY_CONVEYOR))); - GregTech_API.registerCover( - ItemList.Conveyor_Module_MV.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_Conveyor(100, 1, TextureFactory.of(OVERLAY_CONVEYOR))); - GregTech_API.registerCover( - ItemList.Conveyor_Module_HV.get(1L), - TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_Conveyor(20, 1, TextureFactory.of(OVERLAY_CONVEYOR))); - GregTech_API.registerCover( - ItemList.Conveyor_Module_EV.get(1L), - TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_Conveyor(4, 1, TextureFactory.of(OVERLAY_CONVEYOR))); - GregTech_API.registerCover( - ItemList.Conveyor_Module_IV.get(1L), - TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_Conveyor(1, 1, TextureFactory.of(OVERLAY_CONVEYOR))); - GregTech_API.registerCover( - ItemList.Conveyor_Module_LuV.get(1L), - TextureFactory.of(MACHINE_CASINGS[6][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_Conveyor(1, 2, TextureFactory.of(OVERLAY_CONVEYOR))); - GregTech_API.registerCover( - ItemList.Conveyor_Module_ZPM.get(1L), - TextureFactory.of(MACHINE_CASINGS[7][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_Conveyor(1, 4, TextureFactory.of(OVERLAY_CONVEYOR))); - GregTech_API.registerCover( - ItemList.Conveyor_Module_UV.get(1L), - TextureFactory.of(MACHINE_CASINGS[8][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_Conveyor(1, 8, TextureFactory.of(OVERLAY_CONVEYOR))); - GregTech_API.registerCover( - ItemList.Conveyor_Module_UHV.get(1L), - TextureFactory.of(MACHINE_CASINGS[9][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_Conveyor(1, 16, TextureFactory.of(OVERLAY_CONVEYOR))); - GregTech_API.registerCover( - ItemList.Conveyor_Module_UEV.get(1L), - TextureFactory.of(MACHINE_CASINGS[10][0], TextureFactory.of(OVERLAY_CONVEYOR)), - new GT_Cover_Conveyor(1, 32, TextureFactory.of(OVERLAY_CONVEYOR))); - - GregTech_API.registerCover( - ItemList.Robot_Arm_LV.get(1L), - TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_ARM)), - new GT_Cover_Arm(400, TextureFactory.of(OVERLAY_ARM))); - GregTech_API.registerCover( - ItemList.Robot_Arm_MV.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ARM)), - new GT_Cover_Arm(100, TextureFactory.of(OVERLAY_ARM))); - GregTech_API.registerCover( - ItemList.Robot_Arm_HV.get(1L), - TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_ARM)), - new GT_Cover_Arm(20, TextureFactory.of(OVERLAY_ARM))); - GregTech_API.registerCover( - ItemList.Robot_Arm_EV.get(1L), - TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_ARM)), - new GT_Cover_Arm(4, TextureFactory.of(OVERLAY_ARM))); - GregTech_API.registerCover( - ItemList.Robot_Arm_IV.get(1L), - TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_ARM)), - new GT_Cover_Arm(1, TextureFactory.of(OVERLAY_ARM))); - - GregTech_API.registerCover( - ItemList.Cover_Controller.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_CONTROLLER)), - new GT_Cover_ControlsWork(TextureFactory.of(OVERLAY_CONTROLLER))); - - GregTech_API.registerCover( - ItemList.Cover_Chest_Basic.get(1L), - TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_1)), - new GT_Cover_Chest(9, TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_1))); - GregTech_API.registerCover( - ItemList.Cover_Chest_Good.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_2)), - new GT_Cover_Chest(12, TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_2))); - GregTech_API.registerCover( - ItemList.Cover_Chest_Advanced.get(1L), - TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_3)), - new GT_Cover_Chest(15, TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_3))); - GregTech_API.registerCover( - ItemList.Cover_ActivityDetector.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], doesWorkCoverTexture), - new GT_Cover_DoesWork(doesWorkCoverTexture)); - GregTech_API.registerCover( - ItemList.Cover_FluidDetector.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_FLUIDDETECTOR)), - new GT_Cover_LiquidMeter(TextureFactory.of(OVERLAY_FLUIDDETECTOR))); - GregTech_API.registerCover( - ItemList.Cover_ItemDetector.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ITEMDETECTOR)), - new GT_Cover_ItemMeter(TextureFactory.of(OVERLAY_ITEMDETECTOR))); - GregTech_API.registerCover( - ItemList.Cover_EnergyDetector.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ENERGYDETECTOR)), - new GT_Cover_EUMeter(TextureFactory.of(OVERLAY_ENERGYDETECTOR))); - - GregTech_API.registerCover( - ItemList.Cover_PlayerDetector.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], playerDectectorCoverTexture), - new GT_Cover_PlayerDetector(playerDectectorCoverTexture)); - GregTech_API.registerCover( - ItemList.Cover_FluidStorageMonitor.get(1L), - TextureFactory.of(OVERLAY_FLUID_STORAGE_MONITOR0), - new GT_Cover_FluidStorageMonitor()); - - GregTech_API.registerCover( - ItemList.Cover_Screen.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], screenCoverTexture), - new GT_Cover_Screen(screenCoverTexture)); - GregTech_API.registerCover( - ItemList.Cover_Crafting.get(1L), - TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_CRAFTING)), - new GT_Cover_Crafting(TextureFactory.of(OVERLAY_CRAFTING))); - GregTech_API.registerCover( - ItemList.Cover_Drain.get(1L), - TextureFactory.of(MACHINE_CASINGS[0][0], TextureFactory.of(OVERLAY_DRAIN)), - new GT_Cover_Drain(TextureFactory.of(OVERLAY_DRAIN))); - GregTech_API.registerCover( - ItemList.Cover_Shutter.get(1L), - TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_SHUTTER)), - new GT_Cover_Shutter(TextureFactory.of(OVERLAY_SHUTTER))); - - GregTech_API.registerCover( - ItemList.Cover_SolarPanel.get(1L), - TextureFactory.of(SOLARPANEL), - new GT_Cover_SolarPanel(1)); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_8V.get(1L), - TextureFactory.of(SOLARPANEL_8V), - new GT_Cover_SolarPanel(8)); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_LV.get(1L), - TextureFactory.of(SOLARPANEL_LV), - new GT_Cover_SolarPanel(32)); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_MV.get(1L), - TextureFactory.of(SOLARPANEL_MV), - new GT_Cover_SolarPanel(128)); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_HV.get(1L), - TextureFactory.of(SOLARPANEL_HV), - new GT_Cover_SolarPanel(512)); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_EV.get(1L), - TextureFactory.of(SOLARPANEL_EV), - new GT_Cover_SolarPanel(2048)); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_IV.get(1L), - TextureFactory.of(SOLARPANEL_IV), - new GT_Cover_SolarPanel(8192)); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_LuV.get(1L), - TextureFactory.of(SOLARPANEL_LuV), - new GT_Cover_SolarPanel(32768)); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_ZPM.get(1L), - TextureFactory.of(SOLARPANEL_ZPM), - new GT_Cover_SolarPanel(131072)); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_UV.get(1L), - TextureFactory.of(SOLARPANEL_UV), - new GT_Cover_SolarPanel(524288)); - - GregTech_API.registerCover( - ItemList.Cover_RedstoneTransmitterExternal.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_REDSTONE_TRANSMITTER)), - new GT_Cover_RedstoneTransmitterExternal(TextureFactory.of(OVERLAY_REDSTONE_TRANSMITTER))); - GregTech_API.registerCover( - ItemList.Cover_RedstoneTransmitterInternal.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_REDSTONE_TRANSMITTER)), - new GT_Cover_RedstoneTransmitterInternal(TextureFactory.of(OVERLAY_REDSTONE_TRANSMITTER))); - GregTech_API.registerCover( - ItemList.Cover_RedstoneReceiverExternal.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_REDSTONE_RECEIVER)), - new GT_Cover_RedstoneReceiverExternal(TextureFactory.of(OVERLAY_REDSTONE_RECEIVER))); - GregTech_API.registerCover( - ItemList.Cover_RedstoneReceiverInternal.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_REDSTONE_RECEIVER)), - new GT_Cover_RedstoneReceiverInternal(TextureFactory.of(OVERLAY_REDSTONE_RECEIVER))); - - GregTech_API.registerCover( - ItemList.Steam_Regulator_LV.get(1L), - TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_VALVE)), - new GT_Cover_SteamRegulator(1024, TextureFactory.of(OVERLAY_VALVE))); - GregTech_API.registerCover( - ItemList.Steam_Regulator_MV.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_VALVE)), - new GT_Cover_SteamRegulator(2048, TextureFactory.of(OVERLAY_VALVE))); - GregTech_API.registerCover( - ItemList.Steam_Regulator_HV.get(1L), - TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_VALVE)), - new GT_Cover_SteamRegulator(4096, TextureFactory.of(OVERLAY_VALVE))); - GregTech_API.registerCover( - ItemList.Steam_Regulator_EV.get(1L), - TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_VALVE)), - new GT_Cover_SteamRegulator(8192, TextureFactory.of(OVERLAY_VALVE))); - GregTech_API.registerCover( - ItemList.Steam_Regulator_IV.get(1L), - TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_VALVE)), - new GT_Cover_SteamRegulator(16384, TextureFactory.of(OVERLAY_VALVE))); - - GregTech_API.registerCover( - ItemList.Cover_NeedsMaintainance.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_MAINTENANCE_DETECTOR)), - new GT_Cover_NeedMaintainance(TextureFactory.of(OVERLAY_MAINTENANCE_DETECTOR))); - - } - - private void removeRecipes() { - GT_ModHandler.removeRecipe( - new ItemStack(Blocks.glass), - null, - new ItemStack(Blocks.glass), - null, - new ItemStack(Blocks.glass)); - } - - private void craftingShapedRecipes() { - ItemStack tStack = new ItemStack(this, 1, 17000 + Materials.Wood.mMetaItemSubID); - tStack.setStackDisplayName("The holy Planks of Sengir"); - GT_Utility.ItemNBT.addEnchantment(tStack, Enchantment.smite, 10); - GT_ModHandler.addCraftingRecipe( - tStack, - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "XXX", "XDX", "XXX", 'X', OrePrefixes.gem.get(Materials.NetherStar), 'D', - new ItemStack(Blocks.dragon_egg, 1, 32767) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Shape_Slicer_Flat.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "hXS", aTextShape, "fXd", 'P', ItemList.Shape_Extruder_Block, 'X', - OrePrefixes.plate.get(Materials.StainlessSteel), 'S', - OrePrefixes.screw.get(Materials.StainlessSteel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Shape_Slicer_Stripes.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "hXS", "XPX", "fXd", 'P', ItemList.Shape_Extruder_Block, 'X', - OrePrefixes.plate.get(Materials.StainlessSteel), 'S', - OrePrefixes.screw.get(Materials.StainlessSteel) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Fuel_Can_Plastic_Empty.get(7L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " PP", "P P", "PPP", 'P', OrePrefixes.plate.get(Materials.Plastic) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Crate_Empty.get(4L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "SWS", "WdW", "SWS", 'W', OrePrefixes.plank.get(Materials.Wood), 'S', - OrePrefixes.screw.get(Materials.AnyIron) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Crate_Empty.get(4L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "SWS", "WdW", "SWS", 'W', OrePrefixes.plank.get(Materials.Wood), 'S', - OrePrefixes.screw.get(Materials.Steel) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Schematic_1by1.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "d ", aTextShape, aTextEmptyRow, 'P', ItemList.Schematic }); - GT_ModHandler.addCraftingRecipe( - ItemList.Schematic_2by2.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " d ", aTextShape, aTextEmptyRow, 'P', ItemList.Schematic }); - GT_ModHandler.addCraftingRecipe( - ItemList.Schematic_3by3.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " d", aTextShape, aTextEmptyRow, 'P', ItemList.Schematic }); - GT_ModHandler.addCraftingRecipe( - ItemList.Schematic_Dust.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { aTextEmptyRow, aTextShape, " d", 'P', ItemList.Schematic }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Hull_LV.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "Cf ", "Ph ", "Ps ", 'P', OrePrefixes.plate.get(Materials.BatteryAlloy), 'C', - OreDictNames.craftingWireTin }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_LV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.IronMagnetic), 'R', - OrePrefixes.stick.get(Materials.AnyIron), 'W', OrePrefixes.wireGt01.get(Materials.AnyCopper), 'C', - OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_LV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', - OrePrefixes.stick.get(Materials.Steel), 'W', OrePrefixes.wireGt01.get(Materials.AnyCopper), 'C', - OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_MV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', - OrePrefixes.stick.get(Materials.Aluminium), 'W', OrePrefixes.wireGt02.get(Materials.Cupronickel), 'C', - OrePrefixes.cableGt01.get(Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_HV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', - OrePrefixes.stick.get(Materials.StainlessSteel), 'W', OrePrefixes.wireGt04.get(Materials.Electrum), 'C', - OrePrefixes.cableGt02.get(Materials.Silver) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_EV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.NeodymiumMagnetic), 'R', - OrePrefixes.stick.get(Materials.Titanium), 'W', OrePrefixes.wireGt04.get(Materials.BlackSteel), 'C', - OrePrefixes.cableGt02.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Motor_IV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.NeodymiumMagnetic), 'R', - OrePrefixes.stick.get(Materials.TungstenSteel), 'W', OrePrefixes.wireGt04.get(Materials.Graphene), 'C', - OrePrefixes.cableGt02.get(Materials.Tungsten) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Piston_LV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "PPP", "CSS", "CMG", 'P', OrePrefixes.plate.get(Materials.Steel), 'S', - OrePrefixes.stick.get(Materials.Steel), 'G', OrePrefixes.gearGtSmall.get(Materials.Steel), 'M', - ItemList.Electric_Motor_LV, 'C', OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Piston_MV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "PPP", "CSS", "CMG", 'P', OrePrefixes.plate.get(Materials.Aluminium), 'S', - OrePrefixes.stick.get(Materials.Aluminium), 'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'M', - ItemList.Electric_Motor_MV, 'C', OrePrefixes.cableGt01.get(Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Piston_HV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "PPP", "CSS", "CMG", 'P', OrePrefixes.plate.get(Materials.StainlessSteel), 'S', - OrePrefixes.stick.get(Materials.StainlessSteel), 'G', - OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'M', ItemList.Electric_Motor_HV, 'C', - OrePrefixes.cableGt01.get(Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Piston_EV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "PPP", "CSS", "CMG", 'P', OrePrefixes.plate.get(Materials.Titanium), 'S', - OrePrefixes.stick.get(Materials.Titanium), 'G', OrePrefixes.gearGtSmall.get(Materials.Titanium), 'M', - ItemList.Electric_Motor_EV, 'C', OrePrefixes.cableGt01.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Piston_IV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "PPP", "CSS", "CMG", 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'S', - OrePrefixes.stick.get(Materials.TungstenSteel), 'G', - OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), 'M', ItemList.Electric_Motor_IV, 'C', - OrePrefixes.cableGt01.get(Materials.Tungsten) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Pump_LV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "SXO", "dPw", "OMW", 'M', ItemList.Electric_Motor_LV, 'O', - OrePrefixes.ring.get(Materials.AnyRubber), 'X', OrePrefixes.rotor.get(Materials.Tin), 'S', - OrePrefixes.screw.get(Materials.Tin), 'W', OrePrefixes.cableGt01.get(Materials.Tin), 'P', - OrePrefixes.pipeMedium.get(Materials.Bronze) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Pump_MV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "SXO", "dPw", "OMW", 'M', ItemList.Electric_Motor_MV, 'O', - OrePrefixes.ring.get(Materials.AnyRubber), 'X', OrePrefixes.rotor.get(Materials.Bronze), 'S', - OrePrefixes.screw.get(Materials.Bronze), 'W', OrePrefixes.cableGt01.get(Materials.AnyCopper), 'P', - OrePrefixes.pipeMedium.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Pump_HV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "SXO", "dPw", "OMW", 'M', ItemList.Electric_Motor_HV, 'O', - OrePrefixes.ring.get(Materials.AnyRubber), 'X', OrePrefixes.rotor.get(Materials.Steel), 'S', - OrePrefixes.screw.get(Materials.Steel), 'W', OrePrefixes.cableGt01.get(Materials.Gold), 'P', - OrePrefixes.pipeMedium.get(Materials.StainlessSteel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Pump_EV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "SXO", "dPw", "OMW", 'M', ItemList.Electric_Motor_EV, 'O', - OrePrefixes.ring.get(Materials.AnyRubber), 'X', OrePrefixes.rotor.get(Materials.StainlessSteel), 'S', - OrePrefixes.screw.get(Materials.StainlessSteel), 'W', OrePrefixes.cableGt01.get(Materials.Aluminium), - 'P', OrePrefixes.pipeMedium.get(Materials.Titanium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Electric_Pump_IV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "SXO", "dPw", "OMW", 'M', ItemList.Electric_Motor_IV, 'O', - OrePrefixes.ring.get(Materials.AnySyntheticRubber), 'X', OrePrefixes.rotor.get(Materials.TungstenSteel), - 'S', OrePrefixes.screw.get(Materials.TungstenSteel), 'W', OrePrefixes.cableGt01.get(Materials.Tungsten), - 'P', OrePrefixes.pipeMedium.get(Materials.TungstenSteel) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Conveyor_Module_LV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "RRR", "MCM", "RRR", 'M', ItemList.Electric_Motor_LV, 'C', - OrePrefixes.cableGt01.get(Materials.Tin), 'R', OrePrefixes.plate.get(Materials.AnyRubber) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Conveyor_Module_MV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "RRR", "MCM", "RRR", 'M', ItemList.Electric_Motor_MV, 'C', - OrePrefixes.cableGt01.get(Materials.AnyCopper), 'R', OrePrefixes.plate.get(Materials.AnyRubber) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Conveyor_Module_HV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "RRR", "MCM", "RRR", 'M', ItemList.Electric_Motor_HV, 'C', - OrePrefixes.cableGt01.get(Materials.Gold), 'R', OrePrefixes.plate.get(Materials.AnyRubber) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Conveyor_Module_EV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "RRR", "MCM", "RRR", 'M', ItemList.Electric_Motor_EV, 'C', - OrePrefixes.cableGt01.get(Materials.Aluminium), 'R', OrePrefixes.plate.get(Materials.AnyRubber) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Conveyor_Module_IV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "RRR", "MCM", "RRR", 'M', ItemList.Electric_Motor_IV, 'C', - OrePrefixes.cableGt01.get(Materials.Tungsten), 'R', - OrePrefixes.plate.get(Materials.AnySyntheticRubber) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Robot_Arm_LV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CCC", "MSM", "PES", 'S', OrePrefixes.stick.get(Materials.Steel), 'M', - ItemList.Electric_Motor_LV, 'P', ItemList.Electric_Piston_LV, 'E', - OrePrefixes.circuit.get(Materials.LV), 'C', OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Robot_Arm_MV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CCC", "MSM", "PES", 'S', OrePrefixes.stick.get(Materials.Aluminium), 'M', - ItemList.Electric_Motor_MV, 'P', ItemList.Electric_Piston_MV, 'E', - OrePrefixes.circuit.get(Materials.MV), 'C', OrePrefixes.cableGt01.get(Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Robot_Arm_HV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CCC", "MSM", "PES", 'S', OrePrefixes.stick.get(Materials.StainlessSteel), 'M', - ItemList.Electric_Motor_HV, 'P', ItemList.Electric_Piston_HV, 'E', - OrePrefixes.circuit.get(Materials.HV), 'C', OrePrefixes.cableGt01.get(Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Robot_Arm_EV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CCC", "MSM", "PES", 'S', OrePrefixes.stick.get(Materials.Titanium), 'M', - ItemList.Electric_Motor_EV, 'P', ItemList.Electric_Piston_EV, 'E', - OrePrefixes.circuit.get(Materials.EV), 'C', OrePrefixes.cableGt01.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Robot_Arm_IV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "CCC", "MSM", "PES", 'S', OrePrefixes.stick.get(Materials.TungstenSteel), 'M', - ItemList.Electric_Motor_IV, 'P', ItemList.Electric_Piston_IV, 'E', - OrePrefixes.circuit.get(Materials.IV), 'C', OrePrefixes.cableGt01.get(Materials.Tungsten) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Emitter_LV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "SSC", "WQS", "CWS", 'Q', OrePrefixes.gem.get(Materials.CertusQuartz), 'S', - OrePrefixes.stick.get(Materials.Brass), 'C', OrePrefixes.circuit.get(Materials.LV), 'W', - OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Emitter_MV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "SSC", "WQS", "CWS", 'Q', OrePrefixes.gem.get(Materials.EnderPearl), 'S', - OrePrefixes.stick.get(Materials.Electrum), 'C', OrePrefixes.circuit.get(Materials.MV), 'W', - OrePrefixes.cableGt01.get(Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Emitter_HV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "SSC", "WQS", "CWS", 'Q', OrePrefixes.gem.get(Materials.EnderEye), 'S', - OrePrefixes.stick.get(Materials.Chrome), 'C', OrePrefixes.circuit.get(Materials.HV), 'W', - OrePrefixes.cableGt01.get(Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Emitter_EV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "SSC", "WQS", "CWS", 'Q', ItemList.QuantumEye, 'S', - OrePrefixes.stick.get(Materials.Platinum), 'C', OrePrefixes.circuit.get(Materials.EV), 'W', - OrePrefixes.cableGt01.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Emitter_IV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "SSC", "WQS", "CWS", 'Q', ItemList.QuantumStar, 'S', - OrePrefixes.stick.get(Materials.Iridium), 'C', OrePrefixes.circuit.get(Materials.IV), 'W', - OrePrefixes.cableGt01.get(Materials.Tungsten) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Sensor_LV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "P Q", "PS ", "CPP", 'Q', OrePrefixes.gem.get(Materials.CertusQuartz), 'S', - OrePrefixes.stick.get(Materials.Brass), 'P', OrePrefixes.plate.get(Materials.Steel), 'C', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Sensor_MV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "P Q", "PS ", "CPP", 'Q', OrePrefixes.gemFlawless.get(Materials.Emerald), 'S', - OrePrefixes.stick.get(Materials.Electrum), 'P', OrePrefixes.plate.get(Materials.Aluminium), 'C', - OrePrefixes.circuit.get(Materials.MV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Sensor_HV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "P Q", "PS ", "CPP", 'Q', OrePrefixes.gem.get(Materials.EnderEye), 'S', - OrePrefixes.stick.get(Materials.Chrome), 'P', OrePrefixes.plate.get(Materials.StainlessSteel), 'C', - OrePrefixes.circuit.get(Materials.HV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Sensor_EV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "P Q", "PS ", "CPP", 'Q', ItemList.QuantumEye, 'S', - OrePrefixes.stick.get(Materials.Platinum), 'P', OrePrefixes.plate.get(Materials.Titanium), 'C', - OrePrefixes.circuit.get(Materials.EV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Sensor_IV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "P Q", "PS ", "CPP", 'Q', ItemList.QuantumStar, 'S', - OrePrefixes.stick.get(Materials.Iridium), 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'C', - OrePrefixes.circuit.get(Materials.IV) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Component_Sawblade_Diamond.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { " D ", "DGD", " D ", 'D', OrePrefixes.dustSmall.get(Materials.Diamond), 'G', - OrePrefixes.gearGt.get(Materials.CobaltBrass) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Component_Grinder_Diamond.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "DSD", "SIS", "DSD", 'I', OrePrefixes.gem.get(Materials.Diamond), 'D', - OrePrefixes.dust.get(Materials.Diamond), 'S', OrePrefixes.plateDouble.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Component_Grinder_Tungsten.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "TST", "SIS", "TST", 'I', OreDictNames.craftingIndustrialDiamond, 'T', - OrePrefixes.plate.get(Materials.Tungsten), 'S', OrePrefixes.plateDouble.get(Materials.Steel) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Cover_Screen.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "AGA", "RPB", "ALA", 'A', OrePrefixes.plate.get(Materials.Aluminium), 'L', - OrePrefixes.dust.get(Materials.Glowstone), 'R', Dyes.dyeRed, 'G', Dyes.dyeLime, 'B', Dyes.dyeBlue, 'P', - OrePrefixes.plate.get(Materials.Glass) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Tool_Scanner.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "EPR", "CSC", "PBP", 'C', OrePrefixes.circuit.get(Materials.HV), 'P', - OrePrefixes.plate.get(Materials.Aluminium), 'E', ItemList.Emitter_MV, 'R', ItemList.Sensor_MV, 'S', - ItemList.Cover_Screen, 'B', ItemList.Battery_RE_MV_Lithium }); - - GT_ModHandler.addCraftingRecipe( - ItemList.ItemFilter_Export.get(1L), - new Object[] { "SPS", "dIC", "SPS", 'P', OrePrefixes.plate.get(Materials.Tin), 'S', - OrePrefixes.screw.get(Materials.Iron), 'I', ItemList.Component_Filter, 'C', - ItemList.Conveyor_Module_LV }); - GT_ModHandler.addCraftingRecipe( - ItemList.ItemFilter_Import.get(1L), - new Object[] { "SPS", "CId", "SPS", 'P', OrePrefixes.plate.get(Materials.Tin), 'S', - OrePrefixes.screw.get(Materials.Iron), 'I', ItemList.Component_Filter, 'C', - ItemList.Conveyor_Module_LV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Tool_Cover_Copy_Paste.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "PSP", "PCP", "PBP", 'P', OrePrefixes.plate.get(Materials.Aluminium), 'S', - ItemList.Tool_DataStick.get(1L), 'C', ItemList.Cover_Screen.get(1L), 'B', - ItemList.Battery_RE_MV_Lithium.get(1L) }); - } - - private void craftingShapelessRecipes() { - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Coin_Chocolate.get(1L), - new Object[] { OrePrefixes.dust.get(Materials.Cocoa), OrePrefixes.dust.get(Materials.Milk), - OrePrefixes.dust.get(Materials.Sugar), OrePrefixes.foil.get(Materials.Gold) }); - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Copper.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Iron }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Iron.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Silver }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Silver.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Gold }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Gold.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Platinum }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Platinum.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Osmium }); - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Iron.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper, - ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper, - ItemList.Credit_Copper }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Silver.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron, - ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Gold.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver, - ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver, - ItemList.Credit_Silver }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Platinum.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold, - ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Osmium.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum, - ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum, - ItemList.Credit_Platinum }); - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Copper.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Cupronickel }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Cupronickel.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Silver }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Silver.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Gold }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Gold.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Platinum }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Platinum.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Osmium }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Osmium.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Naquadah }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Naquadah.get(8L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Neutronium }); - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Cupronickel.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, - ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, - ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Silver.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, - ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, - ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Gold.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, - ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, - ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Platinum.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, - ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, - ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Osmium.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, - ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, - ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Naquadah.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, - ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, - ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Credit_Greg_Neutronium.get(1L), - GT_ModHandler.RecipeBits.KEEPNBT | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, - ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, - ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah }); - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Schematic.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Schematic_Crafting }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Schematic.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Schematic_1by1 }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Schematic.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Schematic_2by2 }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Schematic.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Schematic_3by3 }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Schematic.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Schematic_Dust }); - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Tool_DataOrb.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Tool_DataOrb.get(1L) }); - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Tool_DataStick.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ItemList.Tool_DataStick.get(1L) }); - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Cover_RedstoneTransmitterInternal.get(1L), - new Object[] { ItemList.Cover_RedstoneTransmitterExternal.get(1L) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Cover_RedstoneReceiverInternal.get(1L), - new Object[] { ItemList.Cover_RedstoneReceiverExternal.get(1L) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Cover_RedstoneTransmitterExternal.get(1L), - new Object[] { ItemList.Cover_RedstoneTransmitterInternal.get(1L) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Cover_RedstoneReceiverExternal.get(1L), - new Object[] { ItemList.Cover_RedstoneReceiverInternal.get(1L) }); - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.ItemFilter_Export.get(1L), - new Object[] { ItemList.ItemFilter_Import.get(1L) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.ItemFilter_Import.get(1L), - new Object[] { ItemList.ItemFilter_Export.get(1L) }); - - } - - private void registerBehaviors() { - IItemBehaviour behaviourSprayColorRemover = new Behaviour_Spray_Color_Remover( - ItemList.Spray_Empty.get(1L), - ItemList.Spray_Color_Used_Remover.get(1L), - ItemList.Spray_Color_Remover.get(1L), - 1024L); - addItemBehavior(32000 + Spray_Color_Remover.ID, behaviourSprayColorRemover); - addItemBehavior(32000 + Spray_Color_Used_Remover.ID, behaviourSprayColorRemover); - - IItemBehaviour behaviourMatches = new Behaviour_Lighter( - null, - ItemList.Tool_Matches.get(1L), - ItemList.Tool_Matches.get(1L), - 1L); - addItemBehavior(32000 + Tool_Matches.ID, behaviourMatches); - IItemBehaviour behaviourMatchBox = new Behaviour_Lighter( - null, - ItemList.Tool_MatchBox_Used.get(1L), - ItemList.Tool_MatchBox_Full.get(1L), - 16L); - addItemBehavior(32000 + Tool_MatchBox_Used.ID, behaviourMatchBox); - addItemBehavior(32000 + Tool_MatchBox_Full.ID, behaviourMatchBox); - - IItemBehaviour behaviourLighterInvar = new Behaviour_Lighter( - ItemList.Tool_Lighter_Invar_Empty.get(1L), - ItemList.Tool_Lighter_Invar_Used.get(1L), - ItemList.Tool_Lighter_Invar_Full.get(1L), - 100L); - addItemBehavior(32000 + Tool_Lighter_Invar_Used.ID, behaviourLighterInvar); - addItemBehavior(32000 + Tool_Lighter_Invar_Full.ID, behaviourLighterInvar); - - IItemBehaviour behaviourLighterPlatinum = new Behaviour_Lighter( - ItemList.Tool_Lighter_Platinum_Empty.get(1L), - ItemList.Tool_Lighter_Platinum_Used.get(1L), - ItemList.Tool_Lighter_Platinum_Full.get(1L), - 1000L); - addItemBehavior(32000 + Tool_Lighter_Platinum_Used.ID, behaviourLighterPlatinum); - addItemBehavior(32000 + Tool_Lighter_Platinum_Full.ID, behaviourLighterPlatinum); - - for (int i = 0; i < 16; i++) { - IItemBehaviour behaviourSprayColor = new Behaviour_Spray_Color( - ItemList.Spray_Empty.get(1L), - ItemList.SPRAY_CAN_DYES_USED[i].get(1L), - ItemList.SPRAY_CAN_DYES[i].get(1L), - ConfigGeneral.sprayCanUses, - i); - addItemBehavior(32000 + Spray_Colors[i], behaviourSprayColor); - addItemBehavior(32000 + Spray_Colors_Used[i], behaviourSprayColor); - } - } - - private void setAllElectricStats() { - setElectricStats(32000 + Battery_RE_ULV_Tantalum.ID, 1000L, GT_Values.V[0], 0L, -3L, false); - setElectricStats(32000 + Battery_SU_LV_Sulfuric_Acid.ID, 18000L, GT_Values.V[1], 1L, -2L, true); - setElectricStats(32000 + Battery_SU_LV_Mercury.ID, 32000L, GT_Values.V[1], 1L, -2L, true); - setElectricStats(32000 + Battery_RE_LV_Cadmium.ID, 75000L, GT_Values.V[1], 1L, -3L, true); - setElectricStats(32000 + Battery_RE_LV_Lithium.ID, 100000L, GT_Values.V[1], 1L, -3L, true); - setElectricStats(32000 + Battery_RE_LV_Sodium.ID, 50000L, GT_Values.V[1], 1L, -3L, true); - setElectricStats(32000 + Battery_SU_MV_Sulfuric_Acid.ID, 72000L, GT_Values.V[2], 2L, -2L, true); - setElectricStats(32000 + Battery_SU_MV_Mercury.ID, 128000L, GT_Values.V[2], 2L, -2L, true); - setElectricStats(32000 + Battery_RE_MV_Cadmium.ID, 300000L, GT_Values.V[2], 2L, -3L, true); - setElectricStats(32000 + Battery_RE_MV_Lithium.ID, 400000L, GT_Values.V[2], 2L, -3L, true); - setElectricStats(32000 + Battery_RE_MV_Sodium.ID, 200000L, GT_Values.V[2], 2L, -3L, true); - setElectricStats(32000 + Battery_SU_HV_Sulfuric_Acid.ID, 288000L, GT_Values.V[3], 3L, -2L, true); - setElectricStats(32000 + Battery_SU_HV_Mercury.ID, 512000L, GT_Values.V[3], 3L, -2L, true); - setElectricStats(32000 + Battery_RE_HV_Cadmium.ID, 1200000L, GT_Values.V[3], 3L, -3L, true); - setElectricStats(32000 + Battery_RE_HV_Lithium.ID, 1600000L, GT_Values.V[3], 3L, -3L, true); - setElectricStats(32000 + Battery_RE_HV_Sodium.ID, 800000L, GT_Values.V[3], 3L, -3L, true); - setElectricStats(32000 + Energy_Lapotronic_Orb.ID, 100000000L, GT_Values.V[5], 5L, -3L, true); - setElectricStats(32000 + ID_MetaItem_01.ZPM.ID, 2000000000000L, GT_Values.V[7], 7L, -2L, true); - setElectricStats(32000 + Energy_Lapotronic_orb_2.ID, 1000000000L, GT_Values.V[6], 6L, -3L, true); - setElectricStats(32000 + ZPM2.ID, Long.MAX_VALUE, GT_Values.V[8], 8L, -3L, true); - setElectricStats(32000 + ZPM3.ID, Long.MAX_VALUE, GT_Values.V[12], 12L, -3L, true); - setElectricStats(32000 + ZPM4.ID, Long.MAX_VALUE, GT_Values.V[13], 13L, -3L, true); - setElectricStats(32000 + ZPM5.ID, Long.MAX_VALUE, GT_Values.V[14], 14L, -3L, true); - setElectricStats(32000 + ZPM6.ID, Long.MAX_VALUE, GT_Values.V[15], 15L, -3L, true); - setElectricStats(32000 + Energy_Module.ID, 10000000000L, GT_Values.V[7], 7L, -3L, true); - setElectricStats(32000 + Energy_Cluster.ID, 100000000000L, GT_Values.V[8], 8L, -3L, true); - setElectricStats(32000 + Tool_Cover_Copy_Paste.ID, 400000L, GT_Values.V[2], 2L, -1L, false); - setElectricStats(32000 + Tool_Cheat.ID, -2000000000L, 1000000000L, -1L, -3L, false); - setElectricStats(32000 + Tool_Scanner.ID, 400000L, GT_Values.V[2], 2L, -1L, false); - setElectricStats(32000 + BatteryHull_EV_Full.ID, 6400000L, GT_Values.V[4], 4L, -3L, true); - setElectricStats(32000 + BatteryHull_IV_Full.ID, 25600000L, GT_Values.V[5], 5L, -3L, true); - setElectricStats(32000 + BatteryHull_LuV_Full.ID, 102400000L, GT_Values.V[6], 6L, -3L, true); - setElectricStats(32000 + BatteryHull_ZPM_Full.ID, 409600000L, GT_Values.V[7], 7L, -3L, true); - setElectricStats(32000 + BatteryHull_UV_Full.ID, 1638400000L, GT_Values.V[8], 8L, -3L, true); - setElectricStats(32000 + BatteryHull_UHV_Full.ID, 6553600000L, GT_Values.V[9], 9L, -3L, true); - setElectricStats(32000 + BatteryHull_UEV_Full.ID, 26214400000L, GT_Values.V[10], 10L, -3L, true); - setElectricStats(32000 + BatteryHull_UIV_Full.ID, 104857600000L, GT_Values.V[11], 11L, -3L, true); - setElectricStats(32000 + BatteryHull_UMV_Full.ID, 419430400000L, GT_Values.V[12], 12L, -3L, true); - setElectricStats(32000 + BatteryHull_UxV_Full.ID, 1677721600000L, GT_Values.V[13], 13L, -3L, true); - } - - private void registerTieredTooltips() { - registerTieredTooltip(ItemList.Battery_RE_ULV_Tantalum.get(1), ULV); - registerTieredTooltip(ItemList.Battery_SU_LV_SulfuricAcid.get(1), LV); - registerTieredTooltip(ItemList.Battery_SU_LV_Mercury.get(1), LV); - registerTieredTooltip(ItemList.Battery_RE_LV_Cadmium.get(1), LV); - registerTieredTooltip(ItemList.Battery_RE_LV_Lithium.get(1), LV); - registerTieredTooltip(ItemList.Battery_RE_LV_Sodium.get(1), LV); - registerTieredTooltip(ItemList.Battery_SU_MV_SulfuricAcid.get(1), MV); - registerTieredTooltip(ItemList.Battery_SU_MV_Mercury.get(1), MV); - registerTieredTooltip(ItemList.Battery_RE_MV_Cadmium.get(1), MV); - registerTieredTooltip(ItemList.Battery_RE_MV_Lithium.get(1), MV); - registerTieredTooltip(ItemList.Battery_RE_MV_Sodium.get(1), MV); - registerTieredTooltip(ItemList.Battery_SU_HV_SulfuricAcid.get(1), HV); - registerTieredTooltip(ItemList.Battery_SU_HV_Mercury.get(1), HV); - registerTieredTooltip(ItemList.Battery_RE_HV_Cadmium.get(1), HV); - registerTieredTooltip(ItemList.Battery_RE_HV_Lithium.get(1), HV); - registerTieredTooltip(ItemList.Battery_RE_HV_Sodium.get(1), HV); - registerTieredTooltip(ItemList.Energy_LapotronicOrb.get(1), IV); - registerTieredTooltip(ItemList.ZPM.get(1), ZPM); - registerTieredTooltip(ItemList.Energy_LapotronicOrb2.get(1), LuV); - registerTieredTooltip(ItemList.ZPM2.get(1), UV); - registerTieredTooltip(ItemList.ZPM3.get(1), UMV); - registerTieredTooltip(ItemList.ZPM4.get(1), UXV); - registerTieredTooltip(ItemList.ZPM5.get(1), MAX); - registerTieredTooltip(ItemList.ZPM6.get(1), ERV); - registerTieredTooltip(ItemList.Energy_Module.get(1), ZPM); - registerTieredTooltip(ItemList.Energy_Cluster.get(1), UV); - registerTieredTooltip(ItemList.Circuit_Primitive.get(1), ULV); - registerTieredTooltip(ItemList.Circuit_Basic.get(1), LV); - registerTieredTooltip(ItemList.Circuit_Good.get(1), MV); - registerTieredTooltip(ItemList.Circuit_Advanced.get(1), HV); - registerTieredTooltip(ItemList.Circuit_Data.get(1), EV); - registerTieredTooltip(ItemList.Circuit_Elite.get(1), IV); - registerTieredTooltip(ItemList.Circuit_Master.get(1), LuV); - registerTieredTooltip(ItemList.BatteryHull_EV_Full.get(1), EV); - registerTieredTooltip(ItemList.BatteryHull_IV_Full.get(1), IV); - registerTieredTooltip(ItemList.BatteryHull_LuV_Full.get(1), LuV); - registerTieredTooltip(ItemList.BatteryHull_ZPM_Full.get(1), ZPM); - registerTieredTooltip(ItemList.BatteryHull_UV_Full.get(1), UV); - registerTieredTooltip(ItemList.BatteryHull_UHV_Full.get(1), UHV); - registerTieredTooltip(ItemList.BatteryHull_UEV_Full.get(1), UEV); - registerTieredTooltip(ItemList.BatteryHull_UIV_Full.get(1), UIV); - registerTieredTooltip(ItemList.BatteryHull_UMV_Full.get(1), UMV); - registerTieredTooltip(ItemList.BatteryHull_UxV_Full.get(1), UXV); - - } -} diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java deleted file mode 100644 index 857de00e6a..0000000000 --- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_02.java +++ /dev/null @@ -1,3115 +0,0 @@ -package gregtech.common.items; - -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ADVANCED_REDSTONE_RECEIVER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ADVANCED_REDSTONE_TRANSMITTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_WIRELESS_ACTIVITYDETECTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_WIRELESS_FLUID_DETECTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_WIRELESS_ITEM_DETECTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_WIRELESS_MAINTENANCE_DETECTOR; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.compressorRecipes; -import static gregtech.api.recipe.RecipeMaps.extractorRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.WILDCARD; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Alcopops; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Apple_Juice; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Beer; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Cave_Johnsons_Grenade_Juice; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Chilly_Sauce; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Cider; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Dark_Beer; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Diablo_Sauce; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Diabolo_Sauce; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Dragon_Blood; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Glen_McKenner; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Golden_Apple_Juice; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Golden_Cider; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Grape_Juice; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Holy_Water; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Hops_Juice; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Hot_Sauce; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Iduns_Apple_Juice; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Lemon_Juice; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Lemonade; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Leninade; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Limoncello; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Milk; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Mineral_Water; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Notches_Brew; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Pirate_Brew; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Potato_Juice; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Purple_Drink; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Reed_Water; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Rum; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Salty_Water; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Scotch; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Snitches_Glitch_Sauce; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Vinegar; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Vodka; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Wheaty_Hops_Juice; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Wheaty_Juice; -import static gregtech.common.items.ID_MetaItem_02.Bottle_Wine; -import static gregtech.common.items.ID_MetaItem_02.Cover_AdvancedRedstoneReceiverExternal; -import static gregtech.common.items.ID_MetaItem_02.Cover_AdvancedRedstoneReceiverInternal; -import static gregtech.common.items.ID_MetaItem_02.Cover_AdvancedRedstoneTransmitterExternal; -import static gregtech.common.items.ID_MetaItem_02.Cover_AdvancedRedstoneTransmitterInternal; -import static gregtech.common.items.ID_MetaItem_02.Cover_WirelessActivityDetector; -import static gregtech.common.items.ID_MetaItem_02.Cover_WirelessFluidDetector; -import static gregtech.common.items.ID_MetaItem_02.Cover_WirelessItemDetector; -import static gregtech.common.items.ID_MetaItem_02.Cover_WirelessNeedsMaintainance; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Argentia; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Aurelia; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Bauxite; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_BobsYerUncleRanks; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Chilly; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Coppon; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Cucumber; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Ferru; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Grapes; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Ilmenite; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Indigo; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Iridium; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Lemon; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_MTomato; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Manganese; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Mica; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_MilkWart; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Naquadah; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Nickel; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_OilBerry; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Onion; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Osmium; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Pitchblende; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Platinum; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Plumbilia; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Rape; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Scheelite; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_TeaLeaf; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Thorium; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Tine; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Tomato; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_UUABerry; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_UUMBerry; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Uraninite; -import static gregtech.common.items.ID_MetaItem_02.Crop_Drop_Zinc; -import static gregtech.common.items.ID_MetaItem_02.Display_ITS_FREE; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_00; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_01; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_02; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_03; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_04; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_05; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_06; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_07; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_08; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_09; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_10; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_11; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_12; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_13; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_14; -import static gregtech.common.items.ID_MetaItem_02.Dye_Color_15; -import static gregtech.common.items.ID_MetaItem_02.Dye_Indigo; -import static gregtech.common.items.ID_MetaItem_02.Food_Baked_Baguette; -import static gregtech.common.items.ID_MetaItem_02.Food_Baked_Bun; -import static gregtech.common.items.ID_MetaItem_02.Food_Baked_Cake; -import static gregtech.common.items.ID_MetaItem_02.Food_Baked_Pizza_Cheese; -import static gregtech.common.items.ID_MetaItem_02.Food_Baked_Pizza_Meat; -import static gregtech.common.items.ID_MetaItem_02.Food_Baked_Pizza_Veggie; -import static gregtech.common.items.ID_MetaItem_02.Food_Burger_Cheese; -import static gregtech.common.items.ID_MetaItem_02.Food_Burger_Chum; -import static gregtech.common.items.ID_MetaItem_02.Food_Burger_Meat; -import static gregtech.common.items.ID_MetaItem_02.Food_Burger_Veggie; -import static gregtech.common.items.ID_MetaItem_02.Food_Cheese; -import static gregtech.common.items.ID_MetaItem_02.Food_ChiliChips; -import static gregtech.common.items.ID_MetaItem_02.Food_Chum; -import static gregtech.common.items.ID_MetaItem_02.Food_Chum_On_Stick; -import static gregtech.common.items.ID_MetaItem_02.Food_Dough; -import static gregtech.common.items.ID_MetaItem_02.Food_Dough_Chocolate; -import static gregtech.common.items.ID_MetaItem_02.Food_Dough_Sugar; -import static gregtech.common.items.ID_MetaItem_02.Food_Flat_Dough; -import static gregtech.common.items.ID_MetaItem_02.Food_Fries; -import static gregtech.common.items.ID_MetaItem_02.Food_Large_Sandwich_Bacon; -import static gregtech.common.items.ID_MetaItem_02.Food_Large_Sandwich_Cheese; -import static gregtech.common.items.ID_MetaItem_02.Food_Large_Sandwich_Steak; -import static gregtech.common.items.ID_MetaItem_02.Food_Large_Sandwich_Veggie; -import static gregtech.common.items.ID_MetaItem_02.Food_Packaged_ChiliChips; -import static gregtech.common.items.ID_MetaItem_02.Food_Packaged_Fries; -import static gregtech.common.items.ID_MetaItem_02.Food_Packaged_PotatoChips; -import static gregtech.common.items.ID_MetaItem_02.Food_PotatoChips; -import static gregtech.common.items.ID_MetaItem_02.Food_Potato_On_Stick; -import static gregtech.common.items.ID_MetaItem_02.Food_Potato_On_Stick_Roasted; -import static gregtech.common.items.ID_MetaItem_02.Food_Raw_Baguette; -import static gregtech.common.items.ID_MetaItem_02.Food_Raw_Bread; -import static gregtech.common.items.ID_MetaItem_02.Food_Raw_Bun; -import static gregtech.common.items.ID_MetaItem_02.Food_Raw_Cake; -import static gregtech.common.items.ID_MetaItem_02.Food_Raw_Cookie; -import static gregtech.common.items.ID_MetaItem_02.Food_Raw_Fries; -import static gregtech.common.items.ID_MetaItem_02.Food_Raw_Pizza_Cheese; -import static gregtech.common.items.ID_MetaItem_02.Food_Raw_Pizza_Meat; -import static gregtech.common.items.ID_MetaItem_02.Food_Raw_Pizza_Veggie; -import static gregtech.common.items.ID_MetaItem_02.Food_Raw_PotatoChips; -import static gregtech.common.items.ID_MetaItem_02.Food_Sandwich_Bacon; -import static gregtech.common.items.ID_MetaItem_02.Food_Sandwich_Cheese; -import static gregtech.common.items.ID_MetaItem_02.Food_Sandwich_Steak; -import static gregtech.common.items.ID_MetaItem_02.Food_Sandwich_Veggie; -import static gregtech.common.items.ID_MetaItem_02.Food_Sliced_Baguette; -import static gregtech.common.items.ID_MetaItem_02.Food_Sliced_Baguettes; -import static gregtech.common.items.ID_MetaItem_02.Food_Sliced_Bread; -import static gregtech.common.items.ID_MetaItem_02.Food_Sliced_Breads; -import static gregtech.common.items.ID_MetaItem_02.Food_Sliced_Bun; -import static gregtech.common.items.ID_MetaItem_02.Food_Sliced_Buns; -import static gregtech.common.items.ID_MetaItem_02.Food_Sliced_Cheese; -import static gregtech.common.items.ID_MetaItem_02.Food_Sliced_Cucumber; -import static gregtech.common.items.ID_MetaItem_02.Food_Sliced_Lemon; -import static gregtech.common.items.ID_MetaItem_02.Food_Sliced_Onion; -import static gregtech.common.items.ID_MetaItem_02.Food_Sliced_Tomato; -import static gregtech.common.items.ID_MetaItem_02.GelledToluene; -import static gregtech.common.items.ID_MetaItem_02.MSFMixture; -import static gregtech.common.items.ID_MetaItem_02.Plank_Acacia; -import static gregtech.common.items.ID_MetaItem_02.Plank_Acacia_Green; -import static gregtech.common.items.ID_MetaItem_02.Plank_Balsa; -import static gregtech.common.items.ID_MetaItem_02.Plank_Baobab; -import static gregtech.common.items.ID_MetaItem_02.Plank_Birch; -import static gregtech.common.items.ID_MetaItem_02.Plank_Cherry; -import static gregtech.common.items.ID_MetaItem_02.Plank_Chestnut; -import static gregtech.common.items.ID_MetaItem_02.Plank_Citrus; -import static gregtech.common.items.ID_MetaItem_02.Plank_DarkOak; -import static gregtech.common.items.ID_MetaItem_02.Plank_Ebony; -import static gregtech.common.items.ID_MetaItem_02.Plank_Greenheart; -import static gregtech.common.items.ID_MetaItem_02.Plank_Jungle; -import static gregtech.common.items.ID_MetaItem_02.Plank_Kapok; -import static gregtech.common.items.ID_MetaItem_02.Plank_Larch; -import static gregtech.common.items.ID_MetaItem_02.Plank_Lime; -import static gregtech.common.items.ID_MetaItem_02.Plank_Mahagony; -import static gregtech.common.items.ID_MetaItem_02.Plank_Mahoe; -import static gregtech.common.items.ID_MetaItem_02.Plank_Maple; -import static gregtech.common.items.ID_MetaItem_02.Plank_Oak; -import static gregtech.common.items.ID_MetaItem_02.Plank_Palm; -import static gregtech.common.items.ID_MetaItem_02.Plank_Papaya; -import static gregtech.common.items.ID_MetaItem_02.Plank_Pine; -import static gregtech.common.items.ID_MetaItem_02.Plank_Plum; -import static gregtech.common.items.ID_MetaItem_02.Plank_Poplar; -import static gregtech.common.items.ID_MetaItem_02.Plank_Sequoia; -import static gregtech.common.items.ID_MetaItem_02.Plank_Spruce; -import static gregtech.common.items.ID_MetaItem_02.Plank_Teak; -import static gregtech.common.items.ID_MetaItem_02.Plank_Walnut; -import static gregtech.common.items.ID_MetaItem_02.Plank_Wenge; -import static gregtech.common.items.ID_MetaItem_02.Plank_Willow; -import static gregtech.common.items.ID_MetaItem_02.SFMixture; -import static gregtech.common.items.ID_MetaItem_02.ThermosCan_Cafe_au_lait; -import static gregtech.common.items.ID_MetaItem_02.ThermosCan_Chocolate_Milk; -import static gregtech.common.items.ID_MetaItem_02.ThermosCan_Coffee; -import static gregtech.common.items.ID_MetaItem_02.ThermosCan_Dark_Cafe_au_lait; -import static gregtech.common.items.ID_MetaItem_02.ThermosCan_Dark_Chocolate_Milk; -import static gregtech.common.items.ID_MetaItem_02.ThermosCan_Dark_Coffee; -import static gregtech.common.items.ID_MetaItem_02.ThermosCan_Ice_Tea; -import static gregtech.common.items.ID_MetaItem_02.ThermosCan_Lait_au_cafe; -import static gregtech.common.items.ID_MetaItem_02.ThermosCan_Sweet_Tea; -import static gregtech.common.items.ID_MetaItem_02.ThermosCan_Tea; - -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnumEnchantmentType; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.enums.TierEU; -import gregtech.api.items.GT_MetaGenerated_Item_X32; -import gregtech.api.objects.ItemData; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_FoodStat; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.covers.redstone.GT_Cover_AdvancedRedstoneReceiverExternal; -import gregtech.common.covers.redstone.GT_Cover_AdvancedRedstoneReceiverInternal; -import gregtech.common.covers.redstone.GT_Cover_AdvancedRedstoneTransmitterExternal; -import gregtech.common.covers.redstone.GT_Cover_AdvancedRedstoneTransmitterInternal; -import gregtech.common.covers.redstone.GT_Cover_WirelessDoesWorkDetector; -import gregtech.common.covers.redstone.GT_Cover_WirelessFluidDetector; -import gregtech.common.covers.redstone.GT_Cover_WirelessItemDetector; -import gregtech.common.covers.redstone.GT_Cover_WirelessMaintenanceDetector; -import ic2.api.crops.CropCard; -import ic2.api.crops.Crops; - -public class GT_MetaGenerated_Item_02 extends GT_MetaGenerated_Item_X32 { - - public static GT_MetaGenerated_Item_02 INSTANCE; - private static final String aTextCover = "Usable as Cover"; - - public GT_MetaGenerated_Item_02() { - super( - "metaitem.02", - OrePrefixes.toolHeadSword, - OrePrefixes.toolHeadPickaxe, - OrePrefixes.toolHeadShovel, - OrePrefixes.toolHeadAxe, - OrePrefixes.toolHeadHoe, - OrePrefixes.toolHeadHammer, - OrePrefixes.toolHeadFile, - OrePrefixes.toolHeadSaw, - OrePrefixes.toolHeadDrill, - OrePrefixes.toolHeadChainsaw, - OrePrefixes.toolHeadWrench, - OrePrefixes.toolHeadUniversalSpade, - OrePrefixes.toolHeadSense, - OrePrefixes.toolHeadPlow, - OrePrefixes.___placeholder___, - OrePrefixes.toolHeadBuzzSaw, - OrePrefixes.turbineBlade, - null, - OrePrefixes.itemCasing, - OrePrefixes.wireFine, - OrePrefixes.gearGtSmall, - OrePrefixes.rotor, - OrePrefixes.stickLong, - OrePrefixes.springSmall, - OrePrefixes.spring, - OrePrefixes.___placeholder___, - OrePrefixes.___placeholder___, - OrePrefixes.gemChipped, - OrePrefixes.gemFlawed, - OrePrefixes.gemFlawless, - OrePrefixes.gemExquisite, - OrePrefixes.gearGt); - INSTANCE = this; - - ItemList.ThermosCan_Dark_Coffee.set( - addItem( - ThermosCan_Dark_Coffee.ID, - "Dark Coffee", - "Coffee, dark, without anything else", - new GT_FoodStat( - 2, - 0.2F, - EnumAction.drink, - ItemList.ThermosCan_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.moveSpeed.id, - 400, - 1, - 70, - Potion.digSpeed.id, - 400, - 1, - 70), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L))); - ItemList.ThermosCan_Dark_Cafe_au_lait.set( - addItem( - ThermosCan_Dark_Cafe_au_lait.ID, - "Dark Coffee au lait", - "Keeping you awake the whole night", - new GT_FoodStat( - 2, - 0.2F, - EnumAction.drink, - ItemList.ThermosCan_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.moveSpeed.id, - 400, - 2, - 90, - Potion.digSpeed.id, - 400, - 2, - 90), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 3L))); - ItemList.ThermosCan_Coffee.set( - addItem( - ThermosCan_Coffee.ID, - "Coffee", - "Just the regular morning Coffee", - new GT_FoodStat( - 3, - 0.4F, - EnumAction.drink, - ItemList.ThermosCan_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.moveSpeed.id, - 400, - 0, - 50, - Potion.digSpeed.id, - 400, - 0, - 50), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 1L))); - ItemList.ThermosCan_Cafe_au_lait.set( - addItem( - ThermosCan_Cafe_au_lait.ID, - "Cafe au lait", - "Sweet Coffee", - new GT_FoodStat( - 3, - 0.4F, - EnumAction.drink, - ItemList.ThermosCan_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.moveSpeed.id, - 400, - 1, - 70, - Potion.digSpeed.id, - 400, - 1, - 70), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2L))); - ItemList.ThermosCan_Lait_au_cafe.set( - addItem( - ThermosCan_Lait_au_cafe.ID, - "Lait au cafe", - "You want Coffee to your Sugar?", - new GT_FoodStat( - 3, - 0.4F, - EnumAction.drink, - ItemList.ThermosCan_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.moveSpeed.id, - 400, - 2, - 90, - Potion.digSpeed.id, - 400, - 2, - 90), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 3L))); - ItemList.ThermosCan_Dark_Chocolate_Milk.set( - addItem( - ThermosCan_Dark_Chocolate_Milk.ID, - "Dark Chocolate Milk", - "A bit bitter, better add a bit Sugar", - new GT_FoodStat( - 3, - 0.4F, - EnumAction.drink, - ItemList.ThermosCan_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.regeneration.id, - 50, - 1, - 60), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L))); - ItemList.ThermosCan_Chocolate_Milk.set( - addItem( - ThermosCan_Chocolate_Milk.ID, - "Chocolate Milk", - "Sweet Goodness", - new GT_FoodStat( - 3, - 0.4F, - EnumAction.drink, - ItemList.ThermosCan_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.regeneration.id, - 50, - 1, - 90), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 2L))); - ItemList.ThermosCan_Tea.set( - addItem( - ThermosCan_Tea.ID, - "Tea", - "Keep calm and carry on", - new GT_FoodStat( - 2, - 0.2F, - EnumAction.drink, - ItemList.ThermosCan_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.moveSlowdown.id, - 300, - 0, - 50), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L))); - ItemList.ThermosCan_Sweet_Tea.set( - addItem( - ThermosCan_Sweet_Tea.ID, - "Sweet Tea", - "How about a Tea Party? In Boston?", - new GT_FoodStat( - 2, - 0.2F, - EnumAction.drink, - ItemList.ThermosCan_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L))); - ItemList.ThermosCan_Ice_Tea.set( - addItem( - ThermosCan_Ice_Tea.ID, - "Ice Tea", - "Better than this purple Junk Drink from failed Potions", - new GT_FoodStat( - 2, - 0.2F, - EnumAction.drink, - ItemList.ThermosCan_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.moveSlowdown.id, - 300, - 0, - 50), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L))); - - ItemList.GelledToluene.set(addItem(GelledToluene.ID, "Gelled Toluene", "Raw Explosive")); - - ItemList.Bottle_Purple_Drink.set( - addItem( - Bottle_Purple_Drink.ID, - "Purple Drink", - "How about Lemonade. Or some Ice Tea? I got Purple Drink!", - new GT_FoodStat( - 8, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.moveSlowdown.id, - 400, - 1, - 90), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VINCULUM, 1L))); - ItemList.Bottle_Grape_Juice.set( - addItem( - Bottle_Grape_Juice.ID, - "Grape Juice", - "This has a cleaning effect on your internals.", - new GT_FoodStat( - 4, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.hunger.id, - 400, - 1, - 60), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L))); - ItemList.Bottle_Wine.set( - addItem( - Bottle_Wine.ID, - "Wine", - "Ordinary", - new GT_FoodStat( - 2, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 400, - 1, - 60, - Potion.heal.id, - 0, - 0, - 60, - Potion.poison.id, - 200, - 1, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L))); - ItemList.Bottle_Vinegar.set( - addItem( - Bottle_Vinegar.ID, - "Vinegar", - "Exquisite", - new GT_FoodStat( - 2, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 400, - 1, - 90, - Potion.heal.id, - 0, - 1, - 90, - Potion.poison.id, - 200, - 2, - 10, - Potion.harm.id, - 0, - 2, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L))); - ItemList.Bottle_Potato_Juice.set( - addItem( - Bottle_Potato_Juice.ID, - "Potato Juice", - "Ever seen Potato Juice in stores? No? That has a reason.", - new GT_FoodStat( - 3, - 0.3F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L))); - ItemList.Bottle_Vodka.set( - addItem( - Bottle_Vodka.ID, - "Vodka", - "Not to confuse with Water", - new GT_FoodStat( - 2, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 500, - 0, - 60, - Potion.damageBoost.id, - 500, - 1, - 60, - Potion.poison.id, - 200, - 1, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L))); - ItemList.Bottle_Leninade.set( - addItem( - Bottle_Leninade.ID, - "Leninade", - "Let the Communism flow through you!", - new GT_FoodStat( - 2, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 500, - 1, - 90, - Potion.damageBoost.id, - 500, - 2, - 90, - Potion.poison.id, - 200, - 2, - 10, - Potion.harm.id, - 0, - 2, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 2L))); - ItemList.Bottle_Mineral_Water.set( - addItem( - Bottle_Mineral_Water.ID, - "Mineral Water", - "The best Stuff you can drink to stay healthy", - new GT_FoodStat( - 1, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.regeneration.id, - 100, - 1, - 10), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L))); - ItemList.Bottle_Salty_Water.set( - addItem( - Bottle_Salty_Water.ID, - "Salty Water", - "Like Sea Water but less dirty", - SubTag.INVISIBLE, - new GT_FoodStat( - 1, - 0.0F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.hunger.id, - 400, - 2, - 95), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TEMPESTAS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Bottle_Reed_Water.set( - addItem( - Bottle_Reed_Water.ID, - "Reed Water", - "I guess this tastes better when fermented", - new GT_FoodStat( - 1, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L))); - ItemList.Bottle_Rum.set( - addItem( - Bottle_Rum.ID, - "Rum", - "A buddle o' rum", - new GT_FoodStat( - 4, - 0.4F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 300, - 0, - 60, - Potion.damageBoost.id, - 300, - 1, - 60, - Potion.poison.id, - 200, - 1, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L))); - ItemList.Bottle_Pirate_Brew.set( - addItem( - Bottle_Pirate_Brew.ID, - "Pirate Brew", - "Set the Sails, we are going to Torrentuga!", - new GT_FoodStat( - 4, - 0.4F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 300, - 1, - 90, - Potion.damageBoost.id, - 300, - 2, - 90, - Potion.poison.id, - 200, - 2, - 10, - Potion.harm.id, - 0, - 2, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 2L))); - ItemList.Bottle_Hops_Juice.set( - addItem( - Bottle_Hops_Juice.ID, - "Hops Juice", - "Every Beer has a start", - new GT_FoodStat( - 1, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L))); - ItemList.Bottle_Dark_Beer.set( - addItem( - Bottle_Dark_Beer.ID, - "Dark Beer", - "Dark Beer, for the real Men", - new GT_FoodStat( - 4, - 0.4F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 300, - 1, - 60, - Potion.damageBoost.id, - 300, - 1, - 60, - Potion.poison.id, - 200, - 1, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L))); - ItemList.Bottle_Dragon_Blood.set( - addItem( - Bottle_Dragon_Blood.ID, - "Dragon Blood", - "FUS RO DAH!", - new GT_FoodStat( - 4, - 0.4F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 300, - 2, - 90, - Potion.damageBoost.id, - 300, - 2, - 90, - Potion.poison.id, - 200, - 2, - 10, - Potion.harm.id, - 0, - 2, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2L))); - ItemList.Bottle_Wheaty_Juice.set( - addItem( - Bottle_Wheaty_Juice.ID, - "Wheaty Juice", - "Is this liquefied Bread or what?", - new GT_FoodStat( - 2, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L))); - ItemList.Bottle_Scotch.set( - addItem( - Bottle_Scotch.ID, - "Scotch", - "Technically this is just a Whisky", - new GT_FoodStat( - 2, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 400, - 0, - 60, - Potion.resistance.id, - 400, - 1, - 60, - Potion.poison.id, - 200, - 1, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1L))); - ItemList.Bottle_Glen_McKenner.set( - addItem( - Bottle_Glen_McKenner.ID, - "Glen McKenner", - "Don't hand to easily surprised people, they will shatter it.", - new GT_FoodStat( - 2, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 400, - 1, - 90, - Potion.resistance.id, - 400, - 2, - 90, - Potion.poison.id, - 200, - 2, - 10, - Potion.harm.id, - 0, - 2, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 2L))); - ItemList.Bottle_Wheaty_Hops_Juice.set( - addItem( - Bottle_Wheaty_Hops_Juice.ID, - "Wheaty Hops Juice", - "Also known as 'Duff-Lite'", - new GT_FoodStat( - 1, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 2L))); - ItemList.Bottle_Beer.set( - addItem( - Bottle_Beer.ID, - "Beer", - "Good old Beer", - new GT_FoodStat( - 6, - 0.4F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 400, - 0, - 60, - Potion.digSpeed.id, - 400, - 2, - 60, - Potion.poison.id, - 100, - 0, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 1L))); - ItemList.Bottle_Chilly_Sauce.set( - addItem( - Bottle_Chilly_Sauce.ID, - "Chilly Sauce", - "Spicy", - new GT_FoodStat( - 2, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 1000, - 0, - 10, - Potion.fireResistance.id, - 1000, - 0, - 60), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Bottle_Hot_Sauce.set( - addItem( - Bottle_Hot_Sauce.ID, - "Hot Sauce", - "Very Spicy, I guess?", - new GT_FoodStat( - 2, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 2000, - 0, - 30, - Potion.fireResistance.id, - 2000, - 0, - 70), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2L))); - ItemList.Bottle_Diabolo_Sauce.set( - addItem( - Bottle_Diabolo_Sauce.ID, - "Diabolo Sauce", - "As if the Devil made this Sauce", - new GT_FoodStat( - 2, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 3000, - 1, - 50, - Potion.fireResistance.id, - 3000, - 0, - 80), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L))); - ItemList.Bottle_Diablo_Sauce.set( - addItem( - Bottle_Diablo_Sauce.ID, - "Diablo Sauce", - "Diablo always comes back!", - new GT_FoodStat( - 2, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 4000, - 1, - 70, - Potion.fireResistance.id, - 4000, - 0, - 90), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 4L))); - ItemList.Bottle_Snitches_Glitch_Sauce.set( - addItem( - Bottle_Snitches_Glitch_Sauce.ID, - "Old Man Snitches glitched Diablo Sauce", - "[Missing No]", - SubTag.INVISIBLE, - new GT_FoodStat( - 2, - 0.1F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 9999, - 2, - 999, - Potion.fireResistance.id, - 9999, - 9, - 999), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 5L))); - ItemList.Bottle_Apple_Juice.set( - addItem( - Bottle_Apple_Juice.ID, - "Apple Juice", - "Made of the Apples from our best Oak Farms", - new GT_FoodStat( - 4, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.hunger.id, - 400, - 0, - 20), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L))); - ItemList.Bottle_Cider.set( - addItem( - Bottle_Cider.ID, - "Cider", - "If you have nothing better to do with your Apples", - new GT_FoodStat( - 4, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 400, - 0, - 60, - Potion.resistance.id, - 400, - 1, - 60, - Potion.poison.id, - 200, - 1, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1L))); - ItemList.Bottle_Golden_Apple_Juice.set( - addItem( - Bottle_Golden_Apple_Juice.ID, - "Golden Apple Juice", - "A golden Apple in liquid form", - new GT_FoodStat( - 4, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.hunger.id, - 400, - 0, - 20, - Potion.field_76444_x.id, - 2400, - 0, - 100, - Potion.regeneration.id, - 100, - 1, - 100), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L))); - ItemList.Bottle_Golden_Cider.set( - addItem( - Bottle_Golden_Cider.ID, - "Golden Cider", - "More Resistance, less Regeneration", - new GT_FoodStat( - 4, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.confusion.id, - 400, - 0, - 60, - Potion.field_76444_x.id, - 2400, - 1, - 95, - Potion.poison.id, - 200, - 1, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1L))); - ItemList.Bottle_Iduns_Apple_Juice.set( - addItem( - Bottle_Iduns_Apple_Juice.ID, - "Idun's Apple Juice", - "So you got the Idea of using Notch Apples for a drink?", - new GT_FoodStat( - 4, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.regeneration.id, - 600, - 4, - 100, - Potion.field_76444_x.id, - 2400, - 0, - 100, - Potion.resistance.id, - 6000, - 0, - 100, - Potion.fireResistance.id, - 6000, - 0, - 100), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 9L))); - ItemList.Bottle_Notches_Brew.set( - addItem( - Bottle_Notches_Brew.ID, - "Notches Brew", - "This is just overpowered", - new GT_FoodStat( - 4, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.regeneration.id, - 700, - 4, - 95, - Potion.field_76444_x.id, - 3000, - 1, - 95, - Potion.resistance.id, - 7000, - 1, - 95, - Potion.fireResistance.id, - 7000, - 0, - 95, - Potion.harm.id, - 0, - 2, - 20), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 9L))); - ItemList.Bottle_Lemon_Juice.set( - addItem( - Bottle_Lemon_Juice.ID, - "Lemon Juice", - "Maybe adding Sugar will make it less sour", - new GT_FoodStat( - 2, - 0.4F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.digSpeed.id, - 1200, - 0, - 60), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 1L))); - ItemList.Bottle_Limoncello.set( - addItem( - Bottle_Limoncello.ID, - "Limoncello", - "An alcoholic Drink which tastes like Lemons", - new GT_FoodStat( - 2, - 0.4F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.digSpeed.id, - 1200, - 0, - 90, - Potion.poison.id, - 200, - 1, - 5), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 1L))); - ItemList.Bottle_Lemonade.set( - addItem( - Bottle_Lemonade.ID, - "Lemonade", - "Cold and refreshing Lemonade", - new GT_FoodStat( - 4, - 0.3F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.digSpeed.id, - 900, - 1, - 90), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 1L))); - ItemList.Bottle_Alcopops.set( - addItem( - Bottle_Alcopops.ID, - "Alcopops", - "Don't let your Children drink this junk!", - new GT_FoodStat( - 2, - 0.2F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.digSpeed.id, - 900, - 1, - 90, - Potion.poison.id, - 300, - 2, - 20), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VINCULUM, 1L))); - ItemList.Bottle_Cave_Johnsons_Grenade_Juice.set( - addItem( - Bottle_Cave_Johnsons_Grenade_Juice.ID, - "Cave Johnson's Grenade Juice", - "When life gives you Lemons, make Life take them Lemons back!", - new GT_FoodStat( - 0, - 0.0F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false).setExplosive(), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MORTUUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 1L))); - ItemList.Bottle_Milk.set( - addItem( - Bottle_Milk.ID, - "Milk", - "Got Milk?", - OrePrefixes.bottle.get(Materials.Milk), - new GT_FoodStat( - 0, - 0.0F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false).setMilk(), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L))); - ItemList.Bottle_Holy_Water.set( - addItem( - Bottle_Holy_Water.ID, - "Holy Water", - "May the holy Planks be with you", - OrePrefixes.bottle.get(Materials.HolyWater), - new GT_FoodStat( - 0, - 0.0F, - EnumAction.drink, - ItemList.Bottle_Empty.get(1L), - GregTech_API.sDrinksAlwaysDrinkable, - false, - false, - Potion.poison.id, - 100, - 1, - 100).setMilk(), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 1L))); - - ItemList.Food_Potato_On_Stick.set( - addItem( - Food_Potato_On_Stick.ID, - "Potato on a Stick", - "Totally looks like a Crab Claw", - new GT_FoodStat(1, 0.3F, EnumAction.eat, new ItemStack(Items.stick, 1), false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Food_Potato_On_Stick_Roasted.set( - addItem( - Food_Potato_On_Stick_Roasted.ID, - "Roasted Potato on a Stick", - "Still looks like a Crab Claw", - new GT_FoodStat(6, 0.6F, EnumAction.eat, new ItemStack(Items.stick, 1), false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Raw_Fries.set( - addItem( - Food_Raw_Fries.ID, - "Potato Strips", - "It's Potato in Stripe Form", - new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L))); - ItemList.Food_Fries.set( - addItem( - Food_Fries.ID, - "Fries", - "Not to confuse with Fry the Delivery Boy", - new GT_FoodStat(7, 0.5F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Packaged_Fries.set( - addItem( - Food_Packaged_Fries.ID, - "Fries", - "Ketchup not included", - new GT_FoodStat( - 7, - 0.5F, - EnumAction.eat, - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 1L), - false, - true, - false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Raw_PotatoChips.set( - addItem( - Food_Raw_PotatoChips.ID, - "Potato Chips (Raw)", - "Just like a Potato", - new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L))); - ItemList.Food_PotatoChips.set( - addItem( - Food_PotatoChips.ID, - "Potato Chips", - "Crunchy", - new GT_FoodStat(7, 0.5F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_ChiliChips.set( - addItem( - Food_ChiliChips.ID, - "Chili Chips", - "Spicy", - new GT_FoodStat(7, 0.6F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Packaged_PotatoChips.set( - addItem( - Food_Packaged_PotatoChips.ID, - "Bag of Potato Chips", - "Full of delicious Air", - new GT_FoodStat( - 7, - 0.5F, - EnumAction.eat, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1L), - false, - true, - false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Packaged_ChiliChips.set( - addItem( - Food_Packaged_ChiliChips.ID, - "Bag of Chili Chips", - "Stop making noises Baj!", - new GT_FoodStat( - 7, - 0.6F, - EnumAction.eat, - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1L), - false, - true, - false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Chum.set( - addItem( - Food_Chum.ID, - "Chum", - "Chum is Fum!", - new GT_FoodStat( - 5, - 0.2F, - EnumAction.eat, - null, - true, - false, - true, - Potion.hunger.id, - 1000, - 4, - 100, - Potion.confusion.id, - 300, - 1, - 80), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Chum_On_Stick.set( - addItem( - Food_Chum_On_Stick.ID, - "Chum on a Stick", - "Don't forget to try our Chum-balaya", - new GT_FoodStat( - 5, - 0.2F, - EnumAction.eat, - new ItemStack(Items.stick, 1), - true, - false, - true, - Potion.hunger.id, - 1000, - 4, - 100, - Potion.confusion.id, - 300, - 1, - 80), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Dough_Sugar.set( - addItem( - Food_Dough_Sugar.ID, - "Sugary Dough", - "Don't eat the Dough before it is baken", - new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Food_Dough_Chocolate.set( - addItem( - Food_Dough_Chocolate.ID, - "Chocolate Dough", - "I said don't eat the Dough!", - new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Food_Raw_Cookie.set( - addItem( - Food_Raw_Cookie.ID, - "Cookie shaped Dough", - "For baking Cookies", - new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - - ItemList.Food_Sliced_Buns.set( - addItem( - Food_Sliced_Buns.ID, - "Buns", - "Pre Sliced", - new GT_FoodStat(3, 0.5F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Burger_Veggie.set( - addItem( - Food_Burger_Veggie.ID, - "Veggieburger", - "No matter how you call this, this is NOT a Burger!", - new GT_FoodStat(3, 0.5F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Burger_Cheese.set( - addItem( - Food_Burger_Cheese.ID, - "Cheeseburger", - "Cheesy!", - new GT_FoodStat(3, 0.5F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new ItemData(Materials.Cheese, 907200L))); - ItemList.Food_Burger_Meat.set( - addItem( - Food_Burger_Meat.ID, - "Hamburger", - "The Mc Burger Queen Burger", - new GT_FoodStat(3, 0.5F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Burger_Chum.set( - addItem( - Food_Burger_Chum.ID, - "Chumburger", - "Fum is Chum!", - new GT_FoodStat( - 5, - 0.2F, - EnumAction.eat, - null, - true, - false, - true, - Potion.hunger.id, - 1000, - 4, - 100, - Potion.confusion.id, - 300, - 1, - 80), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - - ItemList.Food_Sliced_Breads.set( - addItem( - Food_Sliced_Breads.ID, - "Breads", - "Pre Sliced", - new GT_FoodStat(5, 0.6F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Sandwich_Veggie.set( - addItem( - Food_Sandwich_Veggie.ID, - "Veggie Sandwich", - "Meatless", - new GT_FoodStat(7, 0.6F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Sandwich_Cheese.set( - addItem( - Food_Sandwich_Cheese.ID, - "Cheese Sandwich", - "Say Cheese!", - new GT_FoodStat(7, 0.6F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Sandwich_Bacon.set( - addItem( - Food_Sandwich_Bacon.ID, - "Bacon Sandwich", - "The best Sandwich ever!", - new GT_FoodStat(10, 0.8F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Sandwich_Steak.set( - addItem( - Food_Sandwich_Steak.ID, - "Steak Sandwich", - "Not a 'Steam Sandwich'", - new GT_FoodStat(10, 0.8F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Sliced_Baguettes.set( - addItem( - Food_Sliced_Baguettes.ID, - "Baguettes", - "Pre Sliced", - new GT_FoodStat(8, 0.5F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Large_Sandwich_Veggie.set( - addItem( - Food_Large_Sandwich_Veggie.ID, - "Large Veggie Sandwich", - "Just not worth it", - new GT_FoodStat(15, 0.8F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Large_Sandwich_Cheese.set( - addItem( - Food_Large_Sandwich_Cheese.ID, - "Large Cheese Sandwich", - "I need another cheesy tooltip for this", - new GT_FoodStat(15, 0.8F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Large_Sandwich_Bacon.set( - addItem( - Food_Large_Sandwich_Bacon.ID, - "Large Bacon Sandwich", - "For Men! (and manly Women)", - new GT_FoodStat(20, 1.0F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Large_Sandwich_Steak.set( - addItem( - Food_Large_Sandwich_Steak.ID, - "Large Steak Sandwich", - "Yes, I once accidentially called it 'Steam Sandwich'", - new GT_FoodStat(20, 1.0F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Raw_Pizza_Veggie.set( - addItem( - Food_Raw_Pizza_Veggie.ID, - "Raw Veggie Pizza", - "Into the Oven with it!", - new GT_FoodStat(1, 0.2F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Raw_Pizza_Cheese.set( - addItem( - Food_Raw_Pizza_Cheese.ID, - "Raw Cheese Pizza", - "Into the Oven with it!", - new GT_FoodStat(2, 0.2F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Raw_Pizza_Meat.set( - addItem( - Food_Raw_Pizza_Meat.ID, - "Raw Mince Meat Pizza", - "Into the Oven with it!", - new GT_FoodStat(2, 0.2F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - - ItemList.Food_Baked_Pizza_Veggie.set( - addItem( - Food_Baked_Pizza_Veggie.ID, - "Veggie Pizza", - "The next they want is Gluten Free Pizzas...", - new GT_FoodStat(3, 0.3F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Baked_Pizza_Cheese.set( - addItem( - Food_Baked_Pizza_Cheese.ID, - "Cheese Pizza", - "Pizza Magarita", - new GT_FoodStat(4, 0.4F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Baked_Pizza_Meat.set( - addItem( - Food_Baked_Pizza_Meat.ID, - "Mince Meat Pizza", - "Emo Pizza, it cuts itself!", - new GT_FoodStat(5, 0.5F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - - ItemList.Dye_Indigo.set( - addItem( - Dye_Indigo.ID, - "Indigo Dye", - "Blue Dye", - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1L), - Dyes.dyeBlue)); - - int[] Dye_Colors = new int[] { Dye_Color_00.ID, Dye_Color_01.ID, Dye_Color_02.ID, Dye_Color_03.ID, - Dye_Color_04.ID, Dye_Color_05.ID, Dye_Color_06.ID, Dye_Color_07.ID, Dye_Color_08.ID, Dye_Color_09.ID, - Dye_Color_10.ID, Dye_Color_11.ID, Dye_Color_12.ID, Dye_Color_13.ID, Dye_Color_14.ID, Dye_Color_15.ID }; - for (int i = 0; i < 16; i = i + 1) { - ItemList.DYE_ONLY_ITEMS[i].set( - addItem( - Dye_Colors[i], - Dyes.get(i).mName + " Dye", - "", - Dyes.get(i) - .name(), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1L))); - } - - ItemList.Plank_Oak - .set(addItem(Plank_Oak.ID, "Oak Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Spruce.set( - addItem(Plank_Spruce.ID, "Spruce Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Birch.set( - addItem(Plank_Birch.ID, "Birch Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Jungle.set( - addItem(Plank_Jungle.ID, "Jungle Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Acacia.set( - addItem(Plank_Acacia.ID, "Acacia Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_DarkOak.set( - addItem( - Plank_DarkOak.ID, - "Dark Oak Plank", - aTextCover, - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Larch.set( - addItem(Plank_Larch.ID, "Larch Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Teak - .set(addItem(Plank_Teak.ID, "Teak Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Acacia_Green.set( - addItem( - Plank_Acacia_Green.ID, - "Green Acacia Plank", - aTextCover, - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Lime - .set(addItem(Plank_Lime.ID, "Lime Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Chestnut.set( - addItem( - Plank_Chestnut.ID, - "Chestnut Plank", - aTextCover, - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Wenge.set( - addItem(Plank_Wenge.ID, "Wenge Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Baobab.set( - addItem(Plank_Baobab.ID, "Baobab Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Sequoia.set( - addItem( - Plank_Sequoia.ID, - "Sequoia Plank", - aTextCover, - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Kapok.set( - addItem(Plank_Kapok.ID, "Kapok Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Ebony.set( - addItem(Plank_Ebony.ID, "Ebony Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Mahagony.set( - addItem( - Plank_Mahagony.ID, - "Mahagony Plank", - aTextCover, - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Balsa.set( - addItem(Plank_Balsa.ID, "Balsa Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Willow.set( - addItem(Plank_Willow.ID, "Willow Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Walnut.set( - addItem(Plank_Walnut.ID, "Walnut Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Greenheart.set( - addItem( - Plank_Greenheart.ID, - "Greenheart Plank", - aTextCover, - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Cherry.set( - addItem(Plank_Cherry.ID, "Cherry Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Mahoe.set( - addItem(Plank_Mahoe.ID, "Mahoe Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Poplar.set( - addItem(Plank_Poplar.ID, "Poplar Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Palm - .set(addItem(Plank_Palm.ID, "Palm Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Papaya.set( - addItem(Plank_Papaya.ID, "Papaya Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Pine - .set(addItem(Plank_Pine.ID, "Pine Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Plum - .set(addItem(Plank_Plum.ID, "Plum Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Maple.set( - addItem(Plank_Maple.ID, "Maple Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.Plank_Citrus.set( - addItem(Plank_Citrus.ID, "Citrus Plank", aTextCover, new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - ItemList.SFMixture.set(addItem(SFMixture.ID, "Super Fuel Binder", "Raw Material")); - ItemList.MSFMixture.set(addItem(MSFMixture.ID, "Magic Super Fuel Binder", "Raw Material")); - - ItemList.Crop_Drop_Plumbilia.set( - addItem( - Crop_Drop_Plumbilia.ID, - "Plumbilia Leaf", - "Source of Lead", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L))); - ItemList.Crop_Drop_Argentia.set( - addItem( - Crop_Drop_Argentia.ID, - "Argentia Leaf", - "Source of Silver", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L))); - ItemList.Crop_Drop_Indigo.set( - addItem( - Crop_Drop_Indigo.ID, - "Indigo Blossom", - "Used for making Blue Dye", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1L))); - ItemList.Crop_Drop_Ferru.set( - addItem( - Crop_Drop_Ferru.ID, - "Ferru Leaf", - "Source of Iron", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L))); - ItemList.Crop_Drop_Aurelia.set( - addItem( - Crop_Drop_Aurelia.ID, - "Aurelia Leaf", - "Source of Gold", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L))); - ItemList.Crop_Drop_TeaLeaf.set( - addItem( - Crop_Drop_TeaLeaf.ID, - "Tea Leaf", - "Source of Tea", - "cropTea", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L))); - - ItemList.Crop_Drop_OilBerry.set( - addItem( - Crop_Drop_OilBerry.ID, - "Oil Berry", - "Oil in Berry form", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L))); - ItemList.Crop_Drop_BobsYerUncleRanks.set( - addItem( - Crop_Drop_BobsYerUncleRanks.ID, - "Bobs-Yer-Uncle-Berry", - "Source of Emeralds", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L))); - ItemList.Crop_Drop_UUMBerry.set( - addItem( - Crop_Drop_UUMBerry.ID, - "UUM Berry", - "UUM in Berry form", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L))); - ItemList.Crop_Drop_UUABerry.set( - addItem( - Crop_Drop_UUABerry.ID, - "UUA Berry", - "UUA in Berry form", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L))); - - ItemList.Crop_Drop_MilkWart.set( - addItem( - Crop_Drop_MilkWart.ID, - "Milk Wart", - "Source of Milk", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L))); - - ItemList.Crop_Drop_Coppon.set( - addItem( - Crop_Drop_Coppon.ID, - "Coppon Fiber", - "ORANGE WOOOOOOOL!!!", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 1L))); - - ItemList.Crop_Drop_Tine.set( - addItem( - Crop_Drop_Tine.ID, - "Tine Twig", - "Source of Tin", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - - ItemList.Crop_Drop_Mica.set( - addItem( - Crop_Drop_Mica.ID, - "Micadia Twig", - "Source of Mica", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 1L))); - - ItemList.Crop_Drop_Bauxite.set(addItem(Crop_Drop_Bauxite.ID, "Bauxia Leaf", "Source of Aluminium")); - ItemList.Crop_Drop_Ilmenite.set(addItem(Crop_Drop_Ilmenite.ID, "Titania Leaf", "Source of Titanium")); - ItemList.Crop_Drop_Pitchblende.set(addItem(Crop_Drop_Pitchblende.ID, "Reactoria Leaf", "Source of Uranium")); - ItemList.Crop_Drop_Uraninite.set(addItem(Crop_Drop_Uraninite.ID, "Uranium Leaf", "Source of Uranite")); - ItemList.Crop_Drop_Thorium.set(addItem(Crop_Drop_Thorium.ID, "Thunder Leaf", "Source of Thorium")); - ItemList.Crop_Drop_Nickel.set(addItem(Crop_Drop_Nickel.ID, "Nickelback Leaf", "Source of Nickel")); - ItemList.Crop_Drop_Zinc.set(addItem(Crop_Drop_Zinc.ID, "Galvania Leaf", "Source of Zinc")); - ItemList.Crop_Drop_Manganese.set(addItem(Crop_Drop_Manganese.ID, "Pyrolusium Leaf", "Source of Manganese")); - ItemList.Crop_Drop_Scheelite.set(addItem(Crop_Drop_Scheelite.ID, "Scheelinium Leaf", "Source of Tungsten")); - ItemList.Crop_Drop_Platinum.set(addItem(Crop_Drop_Platinum.ID, "Platina Leaf", "Source of Platinum")); - ItemList.Crop_Drop_Iridium.set(addItem(Crop_Drop_Iridium.ID, "Quantaria Leaf", "Source of Iridium")); - ItemList.Crop_Drop_Osmium.set(addItem(Crop_Drop_Osmium.ID, "Quantaria Leaf", "Source of Osmium")); - ItemList.Crop_Drop_Naquadah.set(addItem(Crop_Drop_Naquadah.ID, "Stargatium Leaf", "Source of Naquadah")); - - ItemList.Crop_Drop_Chilly.set( - addItem( - Crop_Drop_Chilly.ID, - "Chilly Pepper", - "It is red and hot", - "cropChilipepper", - new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false, Potion.confusion.id, 200, 1, 40), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Crop_Drop_Lemon.set( - addItem( - Crop_Drop_Lemon.ID, - "Lemon", - "Don't make Lemonade", - "cropLemon", - new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Crop_Drop_Tomato.set( - addItem( - Crop_Drop_Tomato.ID, - "Tomato", - "Solid Ketchup", - "cropTomato", - new GT_FoodStat(1, 0.2F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Crop_Drop_MTomato.set( - addItem( - Crop_Drop_MTomato.ID, - "Max Tomato", - "Full Health in one Tomato", - "cropTomato", - new GT_FoodStat( - 9, - 1.0F, - EnumAction.eat, - null, - false, - true, - false, - Potion.regeneration.id, - 100, - 100, - 100), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Crop_Drop_Grapes.set( - addItem( - Crop_Drop_Grapes.ID, - "Grapes", - "Source of Wine", - "cropGrape", - new GT_FoodStat(2, 0.3F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Crop_Drop_Onion.set( - addItem( - Crop_Drop_Onion.ID, - "Onion", - "Taking over the whole Taste", - "cropOnion", - new GT_FoodStat(2, 0.2F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Crop_Drop_Cucumber.set( - addItem( - Crop_Drop_Cucumber.ID, - "Cucumber", - "Not a Sea Cucumber!", - "cropCucumber", - new GT_FoodStat(1, 0.2F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Crop_Drop_Rape.set( - addItem( - Crop_Drop_Rape.ID, - "Rape", - "Also known as Canola.", - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1L))); - - ItemList.Food_Cheese.set( - addItem( - Food_Cheese.ID, - "Cheese", - "Click the Cheese", - "foodCheese", - new GT_FoodStat(3, 0.6F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 2L))); - ItemList.Food_Dough.set( - addItem( - Food_Dough.ID, - "Dough", - "For making Breads", - "foodDough", - new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Food_Flat_Dough.set( - addItem( - Food_Flat_Dough.ID, - "Flattened Dough", - "For making Pizza", - new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Food_Raw_Bread.set( - addItem( - Food_Raw_Bread.ID, - "Dough", - "In Bread Shape", - new GT_FoodStat(1, 0.2F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Food_Raw_Bun.set( - addItem( - Food_Raw_Bun.ID, - "Dough", - "In Bun Shape", - new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Food_Raw_Baguette.set( - addItem( - Food_Raw_Baguette.ID, - "Dough", - "In Baguette Shape", - new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Food_Baked_Bun.set( - addItem( - Food_Baked_Bun.ID, - "Bun", - "Do not teleport Bread!", - new GT_FoodStat(3, 0.5F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Baked_Baguette.set( - addItem( - Food_Baked_Baguette.ID, - "Baguette", - "I teleported nothing BUT Bread!!!", - new GT_FoodStat(8, 0.5F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Sliced_Bread.set( - addItem( - Food_Sliced_Bread.ID, - "Sliced Bread", - "Just half a Bread", - new GT_FoodStat(2, 0.3F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Sliced_Bun.set( - addItem( - Food_Sliced_Bun.ID, - "Sliced Bun", - "Just half a Bun", - new GT_FoodStat(1, 0.3F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Sliced_Baguette.set( - addItem( - Food_Sliced_Baguette.ID, - "Sliced Baguette", - "Just half a Baguette", - new GT_FoodStat(4, 0.3F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))); - ItemList.Food_Raw_Cake.set( - addItem( - Food_Raw_Cake.ID, - "Cake Bottom", - "For making Cake", - new GT_FoodStat(2, 0.2F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Food_Baked_Cake.set( - addItem( - Food_Baked_Cake.ID, - "Baked Cake Bottom", - "I know I promised you an actual Cake, but well...", - new GT_FoodStat(3, 0.3F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - ItemList.Food_Sliced_Lemon.set( - addItem( - Food_Sliced_Lemon.ID, - "Lemon Slice", - "Ideal to put on your Drink", - new GT_FoodStat(1, 0.075F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L))); - ItemList.Food_Sliced_Tomato.set( - addItem( - Food_Sliced_Tomato.ID, - "Tomato Slice", - "Solid Ketchup", - new GT_FoodStat(1, 0.05F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L))); - ItemList.Food_Sliced_Onion.set( - addItem( - Food_Sliced_Onion.ID, - "Onion Slice", - "ONIONS, UNITE!", - new GT_FoodStat(1, 0.05F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L))); - ItemList.Food_Sliced_Cucumber.set( - addItem( - Food_Sliced_Cucumber.ID, - "Cucumber Slice", - "QUEWWW-CUMMM-BERRR!!!", - new GT_FoodStat(1, 0.05F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1L))); - - ItemList.Food_Sliced_Cheese.set( - addItem( - Food_Sliced_Cheese.ID, - "Cheese Slice", - "ALIEN ATTACK!!!, throw the CHEEEEESE!!!", - new GT_FoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), - new TC_Aspects.TC_AspectStack(TC_Aspects.FAMES, 1L))); - - ItemList.Cover_AdvancedRedstoneTransmitterExternal.set( - addItem( - Cover_AdvancedRedstoneTransmitterExternal.ID, - "Advanced Redstone Transmitter (External)", - "Transfers Redstone signals wirelessly/n Can only connect with advanced wireless covers", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L))); - ItemList.Cover_AdvancedRedstoneTransmitterInternal.set( - addItem( - Cover_AdvancedRedstoneTransmitterInternal.ID, - "Advanced Redstone Transmitter (Internal)", - "Transfers Redstone signals wirelessly/n Can only connect with advanced wireless covers", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L))); - ItemList.Cover_AdvancedRedstoneReceiverExternal.set( - addItem( - Cover_AdvancedRedstoneReceiverExternal.ID, - "Advanced Redstone Receiver (External)", - "Transfers Redstone signals wirelessly/n Can only connect with advanced wireless covers", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L))); - ItemList.Cover_AdvancedRedstoneReceiverInternal.set( - addItem( - Cover_AdvancedRedstoneReceiverInternal.ID, - "Advanced Redstone Receiver (Internal)", - "Transfers Redstone signals wirelessly/n Can only connect with advanced wireless covers", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L))); - - ItemList.Cover_WirelessFluidDetector.set( - addItem( - Cover_WirelessFluidDetector.ID, - "Wireless Fluid Detector Cover", - "Transfers Fluid Amount as Redstone wirelessly/n Can only connect with advanced wireless covers", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L))); - ItemList.Cover_WirelessItemDetector.set( - addItem( - Cover_WirelessItemDetector.ID, - "Wireless Item Detector Cover", - "Transfers Item Amount as Redstone wirelessly/n Can only connect with advanced wireless covers", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1L))); - - ItemList.Cover_WirelessNeedsMaintainance.set( - addItem( - Cover_WirelessNeedsMaintainance.ID, - "Wireless Needs Maintenance Cover", - "Transfers Maintenance Issues as Redstone wirelessly/n Can only connect with advanced wireless covers", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 3L))); - - ItemList.Cover_WirelessActivityDetector.set( - addItem( - Cover_WirelessActivityDetector.ID, - "Wireless Activity Detector Cover", - "Transfers Activity as Redstone wirelessly/n Can only connect with advanced wireless covers", - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1L))); - - ItemList.Display_ITS_FREE.set( - addItem( - Display_ITS_FREE.ID, - "ITS FREE", - "(or at least almost free)", - SubTag.INVISIBLE, - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L))); - - try { - CropCard tCrop; - GT_Utility.getField(tCrop = Crops.instance.getCropList()[13], "mDrop") - .set(tCrop, ItemList.Crop_Drop_Ferru.get(1L)); - GT_Utility.getField(tCrop = Crops.instance.getCropList()[14], "mDrop") - .set(tCrop, ItemList.Crop_Drop_Aurelia.get(1L)); - } catch (Throwable e) { - if (GT_Values.D1) { - e.printStackTrace(GT_Log.err); - } - } - - setAllFluidContainerStats(); - setBurnValues(); - registerCovers(); - initCraftingShapedRecipes(); - initCraftingShapelessRecipes(); - initAssemblerRecipes(); - initExtractorRecipes(); - initMaceratorRecipes(); - initCompressorRecipes(); - } - - @Override - public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { - super.onLeftClickEntity(aStack, aPlayer, aEntity); - return false; - } - - @Override - public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack) { - int aDamage = aStack.getItemDamage(); - return ((aDamage >= 25000) && (aDamage < 27000)) || (super.hasProjectile(aProjectileType, aStack)); - } - - @Override - public boolean isItemStackUsable(ItemStack aStack) { - int aDamage = aStack.getItemDamage(); - Materials aMaterial = GregTech_API.sGeneratedMaterials[(aDamage % 1000)]; - if ((aDamage >= 25000) && (aDamage < 27000) && (aMaterial != null) && (aMaterial.mEnchantmentTools != null)) { - Enchantment tEnchant = aMaterial.mEnchantmentTools == Enchantment.fortune ? Enchantment.looting - : aMaterial.mEnchantmentTools; - if (tEnchant.type == EnumEnchantmentType.weapon) { - NBTTagCompound tNBT = GT_Utility.ItemNBT.getNBT(aStack); - if (!tNBT.getBoolean("GT.HasBeenUpdated")) { - tNBT.setBoolean("GT.HasBeenUpdated", true); - GT_Utility.ItemNBT.setNBT(aStack, tNBT); - GT_Utility.ItemNBT.addEnchantment(aStack, tEnchant, aMaterial.mEnchantmentToolsLevel); - } - } - } - return super.isItemStackUsable(aStack); - } - - private void setAllFluidContainerStats() { - setFluidContainerStats(32000 + Food_Raw_Fries.ID, 0L, 16L); - setFluidContainerStats(32000 + Food_Fries.ID, 0L, 16L); - setFluidContainerStats(32000 + Food_Raw_PotatoChips.ID, 0L, 16L); - setFluidContainerStats(32000 + Food_PotatoChips.ID, 0L, 16L); - setFluidContainerStats(32000 + Food_ChiliChips.ID, 0L, 16L); - setFluidContainerStats(32000 + Food_Sandwich_Veggie.ID, 0L, 32L); - setFluidContainerStats(32000 + Food_Sandwich_Cheese.ID, 0L, 32L); - setFluidContainerStats(32000 + Food_Sandwich_Bacon.ID, 0L, 32L); - setFluidContainerStats(32000 + Food_Sandwich_Steak.ID, 0L, 32L); - setFluidContainerStats(32000 + Food_Large_Sandwich_Veggie.ID, 0L, 16L); - setFluidContainerStats(32000 + Food_Large_Sandwich_Cheese.ID, 0L, 16L); - setFluidContainerStats(32000 + Food_Large_Sandwich_Bacon.ID, 0L, 16L); - setFluidContainerStats(32000 + Food_Large_Sandwich_Steak.ID, 0L, 16L); - } - - private void setBurnValues() { - setBurnValue(32000 + Plank_Oak.ID, 75); - setBurnValue(32000 + Plank_Spruce.ID, 75); - setBurnValue(32000 + Plank_Birch.ID, 75); - setBurnValue(32000 + Plank_Jungle.ID, 75); - setBurnValue(32000 + Plank_Acacia.ID, 75); - setBurnValue(32000 + Plank_DarkOak.ID, 75); - setBurnValue(32000 + Plank_Larch.ID, 75); - setBurnValue(32000 + Plank_Teak.ID, 75); - setBurnValue(32000 + Plank_Acacia_Green.ID, 75); - setBurnValue(32000 + Plank_Lime.ID, 75); - setBurnValue(32000 + Plank_Chestnut.ID, 75); - setBurnValue(32000 + Plank_Wenge.ID, 75); - setBurnValue(32000 + Plank_Baobab.ID, 75); - setBurnValue(32000 + Plank_Sequoia.ID, 75); - setBurnValue(32000 + Plank_Kapok.ID, 75); - setBurnValue(32000 + Plank_Ebony.ID, 75); - setBurnValue(32000 + Plank_Mahagony.ID, 75); - setBurnValue(32000 + Plank_Balsa.ID, 75); - setBurnValue(32000 + Plank_Willow.ID, 75); - setBurnValue(32000 + Plank_Walnut.ID, 75); - setBurnValue(32000 + Plank_Greenheart.ID, 75); - setBurnValue(32000 + Plank_Cherry.ID, 75); - setBurnValue(32000 + Plank_Mahoe.ID, 75); - setBurnValue(32000 + Plank_Poplar.ID, 75); - setBurnValue(32000 + Plank_Palm.ID, 75); - setBurnValue(32000 + Plank_Papaya.ID, 75); - setBurnValue(32000 + Plank_Pine.ID, 75); - setBurnValue(32000 + Plank_Plum.ID, 75); - setBurnValue(32000 + Plank_Maple.ID, 75); - setBurnValue(32000 + Plank_Citrus.ID, 75); - setBurnValue(32000 + Crop_Drop_Tine.ID, 100); - setBurnValue(32000 + Crop_Drop_Mica.ID, 240); - } - - public void initCraftingShapedRecipes() { - GT_ModHandler.addCraftingRecipe( - ItemList.Plank_Oak.get(2L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 0) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Plank_Spruce.get(2L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Plank_Birch.get(2L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 2) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Plank_Jungle.get(2L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 3) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Plank_Acacia.get(2L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 4) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Plank_DarkOak.get(2L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 5) }); - } - - public void initAssemblerRecipes() { - RA.stdBuilder() - .itemInputs( - ItemList.Cover_RedstoneTransmitterExternal.get(1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(ItemList.Cover_AdvancedRedstoneTransmitterExternal.get(1L)) - .duration(2 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - RA.stdBuilder() - .itemInputs( - ItemList.Cover_RedstoneReceiverExternal.get(1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(ItemList.Cover_AdvancedRedstoneReceiverExternal.get(1L)) - .duration(2 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - RA.stdBuilder() - .itemInputs( - ItemList.Cover_FluidDetector.get(1L), - ItemList.Emitter_EV.get(1L), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(ItemList.Cover_WirelessFluidDetector.get(1L)) - .duration(2 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - RA.stdBuilder() - .itemInputs( - ItemList.Cover_ItemDetector.get(1L), - ItemList.Emitter_EV.get(1L), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(ItemList.Cover_WirelessItemDetector.get(1L)) - .duration(2 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - RA.stdBuilder() - .itemInputs( - ItemList.Cover_NeedsMaintainance.get(1L), - ItemList.Emitter_EV.get(1L), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(ItemList.Cover_WirelessNeedsMaintainance.get(1L)) - .duration(2 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - RA.stdBuilder() - .itemInputs( - ItemList.Cover_ActivityDetector.get(1L), - ItemList.Emitter_EV.get(1L), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(ItemList.Cover_WirelessActivityDetector.get(1L)) - .duration(2 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - } - - public void initCraftingShapelessRecipes() { - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Cover_AdvancedRedstoneReceiverExternal.get(1L), - new Object[] { ItemList.Cover_AdvancedRedstoneReceiverInternal.get(1L) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Cover_AdvancedRedstoneReceiverInternal.get(1L), - new Object[] { ItemList.Cover_AdvancedRedstoneReceiverExternal.get(1L) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Cover_AdvancedRedstoneTransmitterExternal.get(1L), - new Object[] { ItemList.Cover_AdvancedRedstoneTransmitterInternal.get(1L) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Cover_AdvancedRedstoneTransmitterInternal.get(1L), - new Object[] { ItemList.Cover_AdvancedRedstoneTransmitterExternal.get(1L) }); - } - - public void initExtractorRecipes() { - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.red_flower, 1, 0)) - .itemOutputs(new ItemStack(Items.dye, 2, 1)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.red_flower, 1, 1)) - .itemOutputs(new ItemStack(Items.dye, 2, 12)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.red_flower, 1, 2)) - .itemOutputs(new ItemStack(Items.dye, 2, 13)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.red_flower, 1, 3)) - .itemOutputs(new ItemStack(Items.dye, 2, 7)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.red_flower, 1, 4)) - .itemOutputs(new ItemStack(Items.dye, 2, 1)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.red_flower, 1, 5)) - .itemOutputs(new ItemStack(Items.dye, 2, 14)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.red_flower, 1, 6)) - .itemOutputs(new ItemStack(Items.dye, 2, 7)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.red_flower, 1, 7)) - .itemOutputs(new ItemStack(Items.dye, 2, 9)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.red_flower, 1, 8)) - .itemOutputs(new ItemStack(Items.dye, 2, 7)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.yellow_flower, 1, 0)) - .itemOutputs(new ItemStack(Items.dye, 2, 11)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.double_plant, 1, 0)) - .itemOutputs(new ItemStack(Items.dye, 3, 11)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.double_plant, 1, 1)) - .itemOutputs(new ItemStack(Items.dye, 3, 13)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.double_plant, 1, 4)) - .itemOutputs(new ItemStack(Items.dye, 3, 1)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.double_plant, 1, 5)) - .itemOutputs(new ItemStack(Items.dye, 3, 9)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Plumbilia.get(1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lead, 1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Argentia.get(1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Silver, 1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Indigo.get(1L)) - .itemOutputs(ItemList.Dye_Indigo.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_MilkWart.get(1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Milk, 1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Coppon.get(1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Copper, 1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Tine.get(1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tin, 1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - - } - - public void initCompressorRecipes() { - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Coppon.get(4L)) - .itemOutputs(new ItemStack(Blocks.wool, 1, 1)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Plumbilia.get(4L)) - .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Argentia.get(4L)) - .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Indigo.get(4L)) - .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Ferru.get(4L)) - .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Aurelia.get(4L)) - .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_OilBerry.get(4L)) - .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_BobsYerUncleRanks.get(4L)) - .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Tine.get(4L)) - .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Rape.get(4L)) - .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.red_flower, 8, 32767)) - .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.yellow_flower, 8, 32767)) - .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - } - - public void initMaceratorRecipes() { - RA.stdBuilder() - .itemInputs(ItemList.Food_Sliced_Cheese.get(1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Cheese, 1L)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Dye_Cocoa.get(1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Crop_Drop_Tine.get(1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 2L)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.pumpkin, 1, 0)) - .itemOutputs(new ItemStack(Items.pumpkin_seeds, 4, 0)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - RA.stdBuilder() - .itemInputs(new ItemStack(Items.melon, 1, 0)) - .itemOutputs(new ItemStack(Items.melon_seeds, 1, 0)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("crop", 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - RA.stdBuilder() - .itemInputs(new ItemStack(Items.stick, 1)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 2L)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.wool, 1, WILDCARD)) - .itemOutputs(new ItemStack(Items.string, 2), new ItemStack(Items.string, 1)) - .outputChances(10000, 5000) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.Tesseract.get(1)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.TranscendentMetal, 8L)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(maceratorRecipes); - } - - public void registerCovers() { - GregTech_API.registerCover(ItemList.Plank_Oak.get(1L), TextureFactory.of(Blocks.planks, 0), null); - GregTech_API.registerCover(ItemList.Plank_Spruce.get(1L), TextureFactory.of(Blocks.planks, 1), null); - GregTech_API.registerCover(ItemList.Plank_Birch.get(1L), TextureFactory.of(Blocks.planks, 2), null); - GregTech_API.registerCover(ItemList.Plank_Jungle.get(1L), TextureFactory.of(Blocks.planks, 3), null); - GregTech_API.registerCover(ItemList.Plank_Acacia.get(1L), TextureFactory.of(Blocks.planks, 4), null); - GregTech_API.registerCover(ItemList.Plank_DarkOak.get(1L), TextureFactory.of(Blocks.planks, 5), null); - GregTech_API.registerCover( - ItemList.Plank_Larch.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 0, new ItemStack(Blocks.planks, 1, 0))), - 0), - null); - GregTech_API.registerCover( - ItemList.Plank_Teak.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 1, new ItemStack(Blocks.planks, 1, 0))), - 1), - null); - GregTech_API.registerCover( - ItemList.Plank_Acacia_Green.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 2, new ItemStack(Blocks.planks, 1, 0))), - 2), - null); - GregTech_API.registerCover( - ItemList.Plank_Lime.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 3, new ItemStack(Blocks.planks, 1, 0))), - 3), - null); - GregTech_API.registerCover( - ItemList.Plank_Chestnut.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 4, new ItemStack(Blocks.planks, 1, 0))), - 4), - null); - GregTech_API.registerCover( - ItemList.Plank_Wenge.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 5, new ItemStack(Blocks.planks, 1, 0))), - 5), - null); - GregTech_API.registerCover( - ItemList.Plank_Baobab.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 6, new ItemStack(Blocks.planks, 1, 0))), - 6), - null); - GregTech_API.registerCover( - ItemList.Plank_Sequoia.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 7, new ItemStack(Blocks.planks, 1, 0))), - 7), - null); - GregTech_API.registerCover( - ItemList.Plank_Kapok.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 8, new ItemStack(Blocks.planks, 1, 0))), - 8), - null); - GregTech_API.registerCover( - ItemList.Plank_Ebony.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 9, new ItemStack(Blocks.planks, 1, 0))), - 9), - null); - GregTech_API.registerCover( - ItemList.Plank_Mahagony.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 10, new ItemStack(Blocks.planks, 1, 0))), - 10), - null); - GregTech_API.registerCover( - ItemList.Plank_Balsa.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 11, new ItemStack(Blocks.planks, 1, 0))), - 11), - null); - GregTech_API.registerCover( - ItemList.Plank_Willow.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 12, new ItemStack(Blocks.planks, 1, 0))), - 12), - null); - GregTech_API.registerCover( - ItemList.Plank_Walnut.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 13, new ItemStack(Blocks.planks, 1, 0))), - 13), - null); - GregTech_API.registerCover( - ItemList.Plank_Greenheart.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 14, new ItemStack(Blocks.planks, 1, 0))), - 14), - null); - GregTech_API.registerCover( - ItemList.Plank_Cherry.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 15, new ItemStack(Blocks.planks, 1, 0))), - 15), - null); - GregTech_API.registerCover( - ItemList.Plank_Mahoe.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 16, new ItemStack(Blocks.planks, 1, 0))), - 0), - null); - GregTech_API.registerCover( - ItemList.Plank_Poplar.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 17, new ItemStack(Blocks.planks, 1, 0))), - 1), - null); - GregTech_API.registerCover( - ItemList.Plank_Palm.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 18, new ItemStack(Blocks.planks, 1, 0))), - 2), - null); - GregTech_API.registerCover( - ItemList.Plank_Papaya.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 19, new ItemStack(Blocks.planks, 1, 0))), - 3), - null); - GregTech_API.registerCover( - ItemList.Plank_Pine.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 20, new ItemStack(Blocks.planks, 1, 0))), - 4), - null); - GregTech_API.registerCover( - ItemList.Plank_Plum.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 21, new ItemStack(Blocks.planks, 1, 0))), - 5), - null); - GregTech_API.registerCover( - ItemList.Plank_Maple.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 22, new ItemStack(Blocks.planks, 1, 0))), - 6), - null); - GregTech_API.registerCover( - ItemList.Plank_Citrus.get(1L), - TextureFactory.of( - GT_Utility.getBlockFromStack( - GT_ModHandler.getModItem(Forestry.ID, "planks", 1L, 23, new ItemStack(Blocks.planks, 1, 0))), - 7), - null); - - GregTech_API.registerCover( - ItemList.Cover_AdvancedRedstoneTransmitterExternal.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_TRANSMITTER)), - new GT_Cover_AdvancedRedstoneTransmitterExternal(TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_TRANSMITTER))); - - GregTech_API.registerCover( - ItemList.Cover_AdvancedRedstoneTransmitterInternal.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_TRANSMITTER)), - new GT_Cover_AdvancedRedstoneTransmitterInternal(TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_TRANSMITTER))); - - GregTech_API.registerCover( - ItemList.Cover_AdvancedRedstoneReceiverExternal.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_RECEIVER)), - new GT_Cover_AdvancedRedstoneReceiverExternal(TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_RECEIVER))); - - GregTech_API.registerCover( - ItemList.Cover_AdvancedRedstoneReceiverInternal.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_RECEIVER)), - new GT_Cover_AdvancedRedstoneReceiverInternal(TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_RECEIVER))); - - GregTech_API.registerCover( - ItemList.Cover_WirelessFluidDetector.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_WIRELESS_FLUID_DETECTOR)), - new GT_Cover_WirelessFluidDetector(TextureFactory.of(OVERLAY_WIRELESS_FLUID_DETECTOR))); - - GregTech_API.registerCover( - ItemList.Cover_WirelessItemDetector.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_WIRELESS_ITEM_DETECTOR)), - new GT_Cover_WirelessItemDetector(TextureFactory.of(OVERLAY_WIRELESS_ITEM_DETECTOR))); - - GregTech_API.registerCover( - ItemList.Cover_WirelessActivityDetector.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_WIRELESS_ACTIVITYDETECTOR)), - new GT_Cover_WirelessDoesWorkDetector(TextureFactory.of(OVERLAY_WIRELESS_ACTIVITYDETECTOR))); - - GregTech_API.registerCover( - ItemList.Cover_WirelessNeedsMaintainance.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_WIRELESS_MAINTENANCE_DETECTOR)), - new GT_Cover_WirelessMaintenanceDetector(TextureFactory.of(OVERLAY_WIRELESS_MAINTENANCE_DETECTOR))); - } - - @Override - public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) { - return (aDoShowAllItems) || (!aPrefix.name() - .startsWith("toolHead")); - } - - @Override - public final ItemStack getContainerItem(ItemStack aStack) { - int aDamage = aStack.getItemDamage(); - if (aDamage < 32000) { - return null; - } - if (aDamage < 32100) { - return ItemList.ThermosCan_Empty.get(1L); - } - if (aDamage < 32200) { - return ItemList.Bottle_Empty.get(1L); - } - return null; - } -} diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java deleted file mode 100644 index 7d24a9e339..0000000000 --- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_03.java +++ /dev/null @@ -1,1492 +0,0 @@ -package gregtech.common.items; - -import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.addItemTooltip; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_METRICS_TRANSMITTER; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_UEV; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_UHV; -import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_UIV; -import static gregtech.client.GT_TooltipHandler.Tier.EV; -import static gregtech.client.GT_TooltipHandler.Tier.HV; -import static gregtech.client.GT_TooltipHandler.Tier.IV; -import static gregtech.client.GT_TooltipHandler.Tier.LV; -import static gregtech.client.GT_TooltipHandler.Tier.LuV; -import static gregtech.client.GT_TooltipHandler.Tier.MAX; -import static gregtech.client.GT_TooltipHandler.Tier.MV; -import static gregtech.client.GT_TooltipHandler.Tier.UEV; -import static gregtech.client.GT_TooltipHandler.Tier.UHV; -import static gregtech.client.GT_TooltipHandler.Tier.UIV; -import static gregtech.client.GT_TooltipHandler.Tier.ULV; -import static gregtech.client.GT_TooltipHandler.Tier.UMV; -import static gregtech.client.GT_TooltipHandler.Tier.UV; -import static gregtech.client.GT_TooltipHandler.Tier.UXV; -import static gregtech.client.GT_TooltipHandler.Tier.ZPM; -import static gregtech.client.GT_TooltipHandler.registerTieredTooltip; -import static gregtech.common.items.ID_MetaItem_03.Activated_Carbon_Filter_Mesh; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Biomainframe; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Bioprocessor; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Biowarecomputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Biowaresupercomputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Bio; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Bio_Ultra; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Coated_Basic; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Epoxy_Advanced; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Fiberglass_Advanced; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Multifiberglass_Elite; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Optical; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Phenolic_Good; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Plastic; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Plastic_Advanced; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Wetware; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Board_Wetware_Extreme; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_BioCPU; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_Biocell; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_CPU; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_CrystalCPU; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_CrystalSoC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_CrystalSoC2; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_HPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_ILC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_LPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_NAND; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_NOR; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_NPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_NanoCPU; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_NeuroCPU; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_Optical; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_PIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_PPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_QPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_QuantumCPU; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_Ram; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_Simple_SoC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_SoC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_SoC2; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_Stemcell; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_UHPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Chip_ULPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_CosmicAssembly; -import static gregtech.common.items.ID_MetaItem_03.Circuit_CosmicComputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_CosmicMainframe; -import static gregtech.common.items.ID_MetaItem_03.Circuit_CosmicProcessor; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Crystalcomputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Crystalmainframe; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Crystalprocessor; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Elitenanocomputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_ExoticAssembly; -import static gregtech.common.items.ID_MetaItem_03.Circuit_ExoticComputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_ExoticMainframe; -import static gregtech.common.items.ID_MetaItem_03.Circuit_ExoticProcessor; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Integrated_Good; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Masterquantumcomputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Microprocessor; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Nanocomputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Nanoprocessor; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Neuroprocessor; -import static gregtech.common.items.ID_MetaItem_03.Circuit_OpticalAssembly; -import static gregtech.common.items.ID_MetaItem_03.Circuit_OpticalComputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_OpticalMainframe; -import static gregtech.common.items.ID_MetaItem_03.Circuit_OpticalProcessor; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_CapacitorASMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_CapacitorSMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_CapacitorXSMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_Chip_Bioware; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_Coil; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_DiodeASMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_DiodeSMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_DiodeXSMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_GlassFiber; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_Glass_Tube; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_InductorASMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_InductorSMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_InductorXSMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_PetriDish; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_RawCrystalChip; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_RawCrystalParts; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_Reinforced_Glass_Tube; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_ResistorASMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_ResistorSMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_ResistorXSMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_TransistorASMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_TransistorSMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Parts_TransistorXSMD; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Processor; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Quantumcomputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Quantummainframe; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Quantumprocessor; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Ingot; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Ingot2; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Ingot3; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Ingot4; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Ingot5; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Ingot6; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Wafer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Wafer2; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Wafer3; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Wafer4; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Wafer5; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Wafer6; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Silicon_Wafer7; -import static gregtech.common.items.ID_MetaItem_03.Circuit_TranscendentAssembly; -import static gregtech.common.items.ID_MetaItem_03.Circuit_TranscendentComputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_TranscendentMainframe; -import static gregtech.common.items.ID_MetaItem_03.Circuit_TranscendentProcessor; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Ultimatecrystalcomputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_Bioware; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_CPU; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_HPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_ILC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_LPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_NAND; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_NOR; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_NPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_NanoCPU; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_PIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_PPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_QPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_QuantumCPU; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_Ram; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_Simple_SoC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_SoC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_SoC2; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_UHPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wafer_ULPIC; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wetwarecomputer; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wetwaremainframe; -import static gregtech.common.items.ID_MetaItem_03.Circuit_Wetwaresupercomputer; -import static gregtech.common.items.ID_MetaItem_03.Cover_Metrics_Transmitter; -import static gregtech.common.items.ID_MetaItem_03.Cover_SolarPanel_UEV; -import static gregtech.common.items.ID_MetaItem_03.Cover_SolarPanel_UHV; -import static gregtech.common.items.ID_MetaItem_03.Cover_SolarPanel_UIV; -import static gregtech.common.items.ID_MetaItem_03.EV_Coil; -import static gregtech.common.items.ID_MetaItem_03.GalliumArsenideCrystal; -import static gregtech.common.items.ID_MetaItem_03.GalliumArsenideCrystalSmallPart; -import static gregtech.common.items.ID_MetaItem_03.HV_Coil; -import static gregtech.common.items.ID_MetaItem_03.IV_Coil; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_AUTOMATION; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_Acceleration_1; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_Acceleration_2; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_Acceleration_3; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_Acceleration_4; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_Acceleration_5; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_Acceleration_6; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_Acceleration_7; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_Acceleration_8; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_Acceleration_8_Upgraded; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_COOLER; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_DESERT; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_DRYER; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_FLOWERING; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_Frame; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_HEATER; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_HELL; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_HUMIDIFIER; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_JUNGLE; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_LIFESPAN; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_LIGHT; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_OCEAN; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_PLAINS; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_POLLEN; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_PRODUCTION; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_SEAL; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_SIEVE; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_SKY; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_STABILIZER; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_TERRITORY; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_UNLIGHT; -import static gregtech.common.items.ID_MetaItem_03.IndustrialApiary_Upgrade_WINTER; -import static gregtech.common.items.ID_MetaItem_03.KevlarFiber; -import static gregtech.common.items.ID_MetaItem_03.LV_Coil; -import static gregtech.common.items.ID_MetaItem_03.LuV_Coil; -import static gregtech.common.items.ID_MetaItem_03.MV_Coil; -import static gregtech.common.items.ID_MetaItem_03.NandChip; -import static gregtech.common.items.ID_MetaItem_03.NuclearStar; -import static gregtech.common.items.ID_MetaItem_03.Optical_Cpu_Containment_Housing; -import static gregtech.common.items.ID_MetaItem_03.Optically_Compatible_Memory; -import static gregtech.common.items.ID_MetaItem_03.Optically_Perfected_CPU; -import static gregtech.common.items.ID_MetaItem_03.Phononic_Seed_Crystal; -import static gregtech.common.items.ID_MetaItem_03.Quark_Catalyst_Housing; -import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Bottom; -import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Charm; -import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Down; -import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Strange; -import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Top; -import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Unaligned; -import static gregtech.common.items.ID_MetaItem_03.Quark_Creation_Catalyst_Up; -import static gregtech.common.items.ID_MetaItem_03.Relativistic_Heat_Capacitor; -import static gregtech.common.items.ID_MetaItem_03.Spinneret; -import static gregtech.common.items.ID_MetaItem_03.Thermal_Superconductor; -import static gregtech.common.items.ID_MetaItem_03.Timepiece; -import static gregtech.common.items.ID_MetaItem_03.Transdimensional_Alignment_Matrix; -import static gregtech.common.items.ID_MetaItem_03.Tube_Wires; -import static gregtech.common.items.ID_MetaItem_03.UHV_Coil; -import static gregtech.common.items.ID_MetaItem_03.ULV_Coil; -import static gregtech.common.items.ID_MetaItem_03.UV_Coil; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Axe; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Block; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Bolt; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Bottle; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Casing; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Cell; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_File; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Gear; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Hammer; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Hoe; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Ingot; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Pickaxe; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Pipe_Huge; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Pipe_Large; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Pipe_Medium; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Pipe_Small; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Pipe_Tiny; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Plate; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Ring; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Rod; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Rotor; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Saw; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Shovel; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Small_Gear; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Sword; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_ToolHeadDrill; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Turbine_Blade; -import static gregtech.common.items.ID_MetaItem_03.White_Dwarf_Shape_Extruder_Wire; -import static gregtech.common.items.ID_MetaItem_03.WovenKevlar; -import static gregtech.common.items.ID_MetaItem_03.ZPM_Coil; - -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.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.items.GT_MetaGenerated_Item_X32; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.common.covers.GT_Cover_Metrics_Transmitter; -import gregtech.common.covers.GT_Cover_SolarPanel; - -public class GT_MetaGenerated_Item_03 extends GT_MetaGenerated_Item_X32 { - - public static GT_MetaGenerated_Item_03 INSTANCE; - - public GT_MetaGenerated_Item_03() { - super( - "metaitem.03", - OrePrefixes.___placeholder___, - OrePrefixes.___placeholder___, - OrePrefixes.___placeholder___, - OrePrefixes.___placeholder___, - OrePrefixes.nanite, - OrePrefixes.rawOre); - INSTANCE = this; - Object[] o = new Object[0]; - - /* - * circuit boards tier 1-7: coated circuit board / wood plate + resin Plastic Circuit Board / Plastic + Copper - * Foil + Sulfuric Acid phenolic circuit board /carton+glue+chemical bath epoxy circuit board /epoxy plate + - * copper foil + sulfuric acid fiberglass circuit board (simple + multilayer) / glass + plastic + electrum foil - * + sulfuric acid wetware lifesupport board / fiberglass CB + teflon + - */ - ItemList.Circuit_Board_Wetware.set( - addItem(Circuit_Board_Wetware.ID, "Wetware Lifesupport Circuit Board", "The Board that keeps life", o)); - ItemList.Circuit_Board_Plastic - .set(addItem(Circuit_Board_Plastic.ID, "Plastic Circuit Board", "A Good Board", o)); - ItemList.Circuit_Board_Bio - .set(addItem(Circuit_Board_Bio.ID, "Bio Circuit Board", "Bio genetic mutated Board", o)); - - /* - * electronic components: vacuum tube (glass tube + red alloy cables) basic electronic circuits normal+smd coils - * diodes normal+smd transistors normal+smd capacitors normal+smd Glass Fibers - */ - ItemList.Circuit_Parts_ResistorSMD.set( - addItem( - Circuit_Parts_ResistorSMD.ID, - "SMD Resistor", - "Electronic Component", - OrePrefixes.componentCircuit.get(Materials.Resistor), - SubTag.NO_UNIFICATION)); - ItemList.Circuit_Parts_Glass_Tube.set(addItem(Circuit_Parts_Glass_Tube.ID, "Glass Tube", "", o)); - ItemList.Circuit_Parts_Coil.set(addItem(Circuit_Parts_Coil.ID, "Small Coil", "Basic Electronic Component", o)); - ItemList.Circuit_Parts_DiodeSMD.set( - addItem( - Circuit_Parts_DiodeSMD.ID, - "SMD Diode", - "Electronic Component", - OrePrefixes.componentCircuit.get(Materials.Diode), - SubTag.NO_UNIFICATION)); - ItemList.Circuit_Parts_TransistorSMD.set( - addItem( - Circuit_Parts_TransistorSMD.ID, - "SMD Transistor", - "Electronic Component", - OrePrefixes.componentCircuit.get(Materials.Transistor), - SubTag.NO_UNIFICATION)); - ItemList.Circuit_Parts_CapacitorSMD.set( - addItem( - Circuit_Parts_CapacitorSMD.ID, - "SMD Capacitor", - "Electronic Component", - OrePrefixes.componentCircuit.get(Materials.Capacitor), - SubTag.NO_UNIFICATION)); - ItemList.Circuit_Parts_GlassFiber - .set(addItem(Circuit_Parts_GlassFiber.ID, "Glass Fiber", Materials.BorosilicateGlass.mChemicalFormula, o)); - ItemList.Circuit_Parts_PetriDish - .set(addItem(Circuit_Parts_PetriDish.ID, "Petri Dish", "For cultivating cells", o)); - ItemList.Circuit_Parts_Reinforced_Glass_Tube - .set(addItem(Circuit_Parts_Reinforced_Glass_Tube.ID, "Reinforced Glass Tube", "", o)); - - ItemList.Circuit_Parts_ResistorASMD - .set(addItem(Circuit_Parts_ResistorASMD.ID, "Advanced SMD Resistor", "Advanced Electronic Component", o)); - ItemList.Circuit_Parts_DiodeASMD - .set(addItem(Circuit_Parts_DiodeASMD.ID, "Advanced SMD Diode", "Advanced Electronic Component", o)); - ItemList.Circuit_Parts_TransistorASMD.set( - addItem(Circuit_Parts_TransistorASMD.ID, "Advanced SMD Transistor", "Advanced Electronic Component", o)); - ItemList.Circuit_Parts_CapacitorASMD - .set(addItem(Circuit_Parts_CapacitorASMD.ID, "Advanced SMD Capacitor", "Advanced Electronic Component", o)); - - ItemList.Circuit_Parts_ResistorXSMD.set( - addItem(Circuit_Parts_ResistorXSMD.ID, "Optical SMD Resistor", "Highly Advanced Electronic Component", o)); - ItemList.Circuit_Parts_DiodeXSMD - .set(addItem(Circuit_Parts_DiodeXSMD.ID, "Optical SMD Diode", "Highly Advanced Electronic Component", o)); - ItemList.Circuit_Parts_TransistorXSMD.set( - addItem( - Circuit_Parts_TransistorXSMD.ID, - "Optical SMD Transistor", - "Highly Advanced Electronic Component", - o)); - ItemList.Circuit_Parts_CapacitorXSMD.set( - addItem( - Circuit_Parts_CapacitorXSMD.ID, - "Optical SMD Capacitor", - "Highly Advanced Electronic Component", - o)); - - ItemList.Circuit_Parts_InductorSMD.set( - addItem( - Circuit_Parts_InductorSMD.ID, - "SMD Inductor", - "Electronic Component", - OrePrefixes.componentCircuit.get(Materials.Inductor), - SubTag.NO_UNIFICATION)); - ItemList.Circuit_Parts_InductorASMD - .set(addItem(Circuit_Parts_InductorASMD.ID, "Advanced SMD Inductor", "Advanced Electronic Component", o)); - ItemList.Circuit_Parts_InductorXSMD.set( - addItem(Circuit_Parts_InductorXSMD.ID, "Optical SMD Inductor", "Highly Advanced Electronic Component", o)); - - /* - * ICs Lenses made from perfect crystals first instead of plates Monocrystalline silicon ingot - * (normal+glowstone+naquadah) EBF, normal silicon no EBF need anymore wafer(normal+glowstone+naquadah) cut mono - * silicon ingot in cutting machine - * Integrated Logic Circuit(8bit DIP) RAM NAND Memory NOR Memory CPU (4 sizes) SoCs(2 sizes, high tier cheap low - * tech component) Power IC/High Power IC/Ultra High power - * nanotube interconnected circuit (H-IC + nanotubes) - * quantum chips - */ - ItemList.Circuit_Silicon_Ingot - .set(addItem(Circuit_Silicon_Ingot.ID, "Monocrystalline Silicon Boule", "Raw Circuit", o)); - ItemList.Circuit_Silicon_Ingot2.set( - addItem(Circuit_Silicon_Ingot2.ID, "Phosphorus doped Monocrystalline Silicon Boule", "Raw Circuit", o)); - ItemList.Circuit_Silicon_Ingot3 - .set(addItem(Circuit_Silicon_Ingot3.ID, "Naquadah doped Monocrystalline Silicon Boule", "Raw Circuit", o)); - ItemList.Circuit_Silicon_Ingot4 - .set(addItem(Circuit_Silicon_Ingot4.ID, "Europium doped Monocrystalline Silicon Boule", "Raw Circuit", o)); - ItemList.Circuit_Silicon_Ingot5 - .set(addItem(Circuit_Silicon_Ingot5.ID, "Americium doped Monocrystalline Silicon Boule", "Raw Circuit", o)); - ItemList.Circuit_Silicon_Ingot6 - .set(addItem(Circuit_Silicon_Ingot6.ID, "Optically Enriched Crystalline Boule", "Raw Circuit", o)); - - ItemList.Circuit_Silicon_Wafer.set(addItem(Circuit_Silicon_Wafer.ID, "Wafer", "Raw Circuit", o)); - ItemList.Circuit_Silicon_Wafer2 - .set(addItem(Circuit_Silicon_Wafer2.ID, "Phosphorus doped Wafer", "Raw Circuit", o)); - ItemList.Circuit_Silicon_Wafer3 - .set(addItem(Circuit_Silicon_Wafer3.ID, "Naquadah doped Wafer", "Raw Circuit", o)); - ItemList.Circuit_Silicon_Wafer4 - .set(addItem(Circuit_Silicon_Wafer4.ID, "Europium doped Wafer", "Raw Circuit", o)); - ItemList.Circuit_Silicon_Wafer5 - .set(addItem(Circuit_Silicon_Wafer5.ID, "Americium doped Wafer", "Raw Circuit", o)); - ItemList.Circuit_Silicon_Wafer6 - .set(addItem(Circuit_Silicon_Wafer6.ID, "Photonically Prepared Wafer", "Raw Circuit", o)); - ItemList.Circuit_Silicon_Wafer7 - .set(addItem(Circuit_Silicon_Wafer7.ID, "Photonically Enhanced Wafer", "Raw Circuit", o)); - - ItemList.Circuit_Wafer_ILC - .set(addItem(Circuit_Wafer_ILC.ID, "Integrated Logic Circuit (Wafer)", "Raw Circuit", o)); - ItemList.Circuit_Chip_ILC - .set(addItem(Circuit_Chip_ILC.ID, "Integrated Logic Circuit", "Integrated Circuit", o)); - - ItemList.Circuit_Wafer_Ram - .set(addItem(Circuit_Wafer_Ram.ID, "Random Access Memory Chip (Wafer)", "Raw Circuit", o)); - ItemList.Circuit_Chip_Ram - .set(addItem(Circuit_Chip_Ram.ID, "Random Access Memory Chip", "Integrated Circuit", o)); - - ItemList.Circuit_Wafer_NAND.set(addItem(Circuit_Wafer_NAND.ID, "NAND Memory Chip (Wafer)", "Raw Circuit", o)); - ItemList.Circuit_Chip_NAND.set(addItem(Circuit_Chip_NAND.ID, "NAND Memory Chip", "Integrated Circuit", o)); - - ItemList.Circuit_Wafer_NOR.set(addItem(Circuit_Wafer_NOR.ID, "NOR Memory Chip (Wafer)", "Raw Circuit", o)); - ItemList.Circuit_Chip_NOR.set(addItem(Circuit_Chip_NOR.ID, "NOR Memory Chip", "Integrated Circuit", o)); - - ItemList.Circuit_Wafer_CPU - .set(addItem(Circuit_Wafer_CPU.ID, "Central Processing Unit (Wafer)", "Raw Circuit", o)); - ItemList.Circuit_Chip_CPU.set(addItem(Circuit_Chip_CPU.ID, "Central Processing Unit", "Integrated Circuit", o)); - - ItemList.Circuit_Wafer_SoC.set(addItem(Circuit_Wafer_SoC.ID, "SoC Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_SoC.set(addItem(Circuit_Chip_SoC.ID, "SoC", "System on a Chip", o)); - - ItemList.Circuit_Wafer_SoC2.set(addItem(Circuit_Wafer_SoC2.ID, "ASoC Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_SoC2.set(addItem(Circuit_Chip_SoC2.ID, "ASoC", "Advanced System on a Chip", o)); - - ItemList.Circuit_Wafer_PIC.set(addItem(Circuit_Wafer_PIC.ID, "PIC Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_PIC.set(addItem(Circuit_Chip_PIC.ID, "Power IC", "Power Circuit", o)); - - ItemList.Circuit_Wafer_HPIC.set(addItem(Circuit_Wafer_HPIC.ID, "HPIC Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_HPIC.set(addItem(Circuit_Chip_HPIC.ID, "High Power IC", "High Power Circuit", o)); - - ItemList.Circuit_Wafer_NanoCPU.set(addItem(Circuit_Wafer_NanoCPU.ID, "NanoCPU Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_NanoCPU - .set(addItem(Circuit_Chip_NanoCPU.ID, "Nanocomponent Central Processing Unit", "Power Circuit", o)); - - ItemList.Circuit_Wafer_QuantumCPU.set(addItem(Circuit_Wafer_QuantumCPU.ID, "QBit Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_QuantumCPU - .set(addItem(Circuit_Chip_QuantumCPU.ID, "QBit Processing Unit", "Quantum CPU", o)); - - ItemList.Circuit_Wafer_UHPIC.set(addItem(Circuit_Wafer_UHPIC.ID, "UHPIC Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_UHPIC - .set(addItem(Circuit_Chip_UHPIC.ID, "Ultra High Power IC", "Ultra High Power Circuit", o)); - - ItemList.Circuit_Wafer_Simple_SoC - .set(addItem(Circuit_Wafer_Simple_SoC.ID, "Simple SoC Wafer", "Raw Primitive Circuit", o)); - ItemList.Circuit_Chip_Simple_SoC - .set(addItem(Circuit_Chip_Simple_SoC.ID, "Simple SoC", "Simple System on a Chip", o)); - - ItemList.Circuit_Wafer_ULPIC.set(addItem(Circuit_Wafer_ULPIC.ID, "ULPIC Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_ULPIC - .set(addItem(Circuit_Chip_ULPIC.ID, "Ultra Low Power IC", "Ultra Low Power Circuit", o)); - - ItemList.Circuit_Wafer_LPIC.set(addItem(Circuit_Wafer_LPIC.ID, "LPIC Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_LPIC.set(addItem(Circuit_Chip_LPIC.ID, "Low Power IC", "Low Power Circuit", o)); - - ItemList.Circuit_Wafer_NPIC.set(addItem(Circuit_Wafer_NPIC.ID, "NPIC Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_NPIC.set(addItem(Circuit_Chip_NPIC.ID, "Nano Power IC", "Nano Power Circuit", o)); - - ItemList.Circuit_Wafer_PPIC.set(addItem(Circuit_Wafer_PPIC.ID, "PPIC Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_PPIC.set(addItem(Circuit_Chip_PPIC.ID, "Piko Power IC", "Piko Power Circuit", o)); - - ItemList.Circuit_Wafer_QPIC.set(addItem(Circuit_Wafer_QPIC.ID, "QPIC Wafer", "Raw Circuit", o)); - ItemList.Circuit_Chip_QPIC.set(addItem(Circuit_Chip_QPIC.ID, "Quantum Power IC", "Quantum Power Circuit", o)); - - ItemList.Circuit_Wafer_Bioware.set(addItem(Circuit_Wafer_Bioware.ID, "Living Bio Wafer", "Raw Circuit", o)); - ItemList.Circuit_Parts_Chip_Bioware - .set(addItem(Circuit_Parts_Chip_Bioware.ID, "Living Bio Chip", "Needed for Circuits", o)); - /* - * Engraved Crystal Chip Engraved Lapotron Chip Crystal CPU SoCrystal stem cells (disassemble eggs) - */ - ItemList.Circuit_Chip_CrystalSoC2.set( - addItem(Circuit_Chip_CrystalSoC2.ID, "Raw Advanced Crystal Chip", "Raw Advanced Crystal Processor", o)); - ItemList.Circuit_Parts_RawCrystalChip - .set(addItem(Circuit_Parts_RawCrystalChip.ID, "Raw Crystal Chip", "Raw Crystal Processor", o)); - ItemList.Circuit_Chip_CrystalCPU - .set(addItem(Circuit_Chip_CrystalCPU.ID, "Crystal Processing Unit", "Crystal CPU", o)); // Crystal - // chip - // elite - // part - ItemList.Circuit_Chip_CrystalSoC - .set(addItem(Circuit_Chip_CrystalSoC.ID, "Crystal SoC", "Crystal System on a Chip", o)); - ItemList.Circuit_Chip_NeuroCPU.set(addItem(Circuit_Chip_NeuroCPU.ID, "Neuro Processing Unit", "Neuro CPU", o)); - ItemList.Circuit_Chip_Stemcell.set(addItem(Circuit_Chip_Stemcell.ID, "Stemcells", "Raw inteligence", o)); - ItemList.Circuit_Parts_RawCrystalParts - .set(addItem(Circuit_Parts_RawCrystalParts.ID, "Raw Crystal Chip Parts", "Raw Crystal Processor Parts", o)); - ItemList.Circuit_Chip_Biocell.set(addItem(Circuit_Chip_Biocell.ID, "Biocells", "Mutated Raw inteligence", o)); - ItemList.Circuit_Chip_BioCPU.set(addItem(Circuit_Chip_BioCPU.ID, "Bio Processing Unit", "Bio CPU", o)); - ItemList.Circuit_Chip_Optical - .set(addItem(Circuit_Chip_Optical.ID, "Raw Exposed Optical Chip", "Raw Optical Chip", o)); - - // Nand Chip - ItemList.NandChip.set( - addItem( - NandChip.ID, - "NAND Chip", - "A very simple Circuit", - OrePrefixes.circuit.get(Materials.ULV), - SubTag.NO_UNIFICATION)); - - // Vacuum Tube Item01 - // Basic Circuit IC2 - // Good Circuit Item01 - - // Integrated Logic Circuit Item01 - ItemList.Circuit_Integrated_Good.set( - addItem( - Circuit_Integrated_Good.ID, - "Good Integrated Circuit", - "Good Circuit", - OrePrefixes.circuit.get(Materials.MV), - SubTag.NO_UNIFICATION)); - - // Good Integrated Circuit Item01 - // Advanced Circuit IC2 - - ItemList.Circuit_Microprocessor.set( - addItem( - Circuit_Microprocessor.ID, - "Microprocessor", - "A Basic Circuit", - OrePrefixes.circuit.get(Materials.LV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Processor.set( - addItem( - Circuit_Processor.ID, - "Integrated Processor", - "A Good Circuit", - OrePrefixes.circuit.get(Materials.MV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Nanoprocessor.set( - addItem( - Circuit_Nanoprocessor.ID, - "Nanoprocessor", - "An Advanced Circuit", - OrePrefixes.circuit.get(Materials.HV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Nanocomputer.set( - addItem( - Circuit_Nanocomputer.ID, - "Nanoprocessor Assembly", - "An Extreme Circuit", - OrePrefixes.circuit.get(Materials.EV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Elitenanocomputer.set( - addItem( - Circuit_Elitenanocomputer.ID, - "Elite Nanocomputer", - "An Elite Circuit", - OrePrefixes.circuit.get(Materials.IV), - SubTag.NO_UNIFICATION)); - - // Quantum circuits - ItemList.Circuit_Quantumprocessor.set( - addItem( - Circuit_Quantumprocessor.ID, - "Quantumprocessor", - "An Extreme Circuit", - OrePrefixes.circuit.get(Materials.EV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Quantumcomputer.set( - addItem( - Circuit_Quantumcomputer.ID, - "Quantumprocessor Assembly", - "An Elite Circuit", - OrePrefixes.circuit.get(Materials.IV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Masterquantumcomputer.set( - addItem( - Circuit_Masterquantumcomputer.ID, - "Master Quantumcomputer", - "A Master Circuit", - OrePrefixes.circuit.get(Materials.LuV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Quantummainframe.set( - addItem( - Circuit_Quantummainframe.ID, - "Quantumprocessor Mainframe", - "An Ultimate Circuit", - OrePrefixes.circuit.get(Materials.ZPM), - SubTag.NO_UNIFICATION)); - - // Crystal circuits - ItemList.Circuit_Crystalprocessor.set( - addItem( - Circuit_Crystalprocessor.ID, - "Crystalprocessor", - "An Elite Circuit", - OrePrefixes.circuit.get(Materials.IV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Crystalcomputer.set( - addItem( - Circuit_Crystalcomputer.ID, - "Crystalprocessor Assembly", - "A Master Circuit", - OrePrefixes.circuit.get(Materials.LuV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Ultimatecrystalcomputer.set( - addItem( - Circuit_Ultimatecrystalcomputer.ID, - "Ultimate Crystalcomputer", - "An Ultimate Circuit", - OrePrefixes.circuit.get(Materials.ZPM), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Crystalmainframe.set( - addItem( - Circuit_Crystalmainframe.ID, - "Crystalprocessor Mainframe", - "A Super Circuit", - OrePrefixes.circuit.get(Materials.UV), - SubTag.NO_UNIFICATION)); - - // ???? Scared to remove. - ItemList.Circuit_Ultimate.set(ItemList.Circuit_Ultimatecrystalcomputer.get(1L)); // maybe should be removed - - // Wetware circuits - ItemList.Circuit_Neuroprocessor.set( - addItem( - Circuit_Neuroprocessor.ID, - "Wetwareprocessor", - "A Master Circuit", - OrePrefixes.circuit.get(Materials.LuV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Wetwarecomputer.set( - addItem( - Circuit_Wetwarecomputer.ID, - "Wetwareprocessor Assembly", - "An Ultimate Circuit", - OrePrefixes.circuit.get(Materials.ZPM), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Wetwaresupercomputer.set( - addItem( - Circuit_Wetwaresupercomputer.ID, - "Wetware Supercomputer", - "A Super Circuit", - OrePrefixes.circuit.get(Materials.UV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Wetwaremainframe.set( - addItem( - Circuit_Wetwaremainframe.ID, - "Wetware Mainframe", - "An Infinite Circuit", - OrePrefixes.circuit.get(Materials.UHV), - SubTag.NO_UNIFICATION)); - - // Bioware circuits. - ItemList.Circuit_Bioprocessor.set( - addItem( - Circuit_Bioprocessor.ID, - "Bioprocessor", - "An Ultimate Circuit", - OrePrefixes.circuit.get(Materials.ZPM), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Biowarecomputer.set( - addItem( - Circuit_Biowarecomputer.ID, - "Biowareprocessor Assembly", - "A Super Circuit", - OrePrefixes.circuit.get(Materials.UV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Biowaresupercomputer.set( - addItem( - Circuit_Biowaresupercomputer.ID, - "Bioware Supercomputer", - "An Infinite Circuit", - OrePrefixes.circuit.get(Materials.UHV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Biomainframe.set( - addItem( - Circuit_Biomainframe.ID, - "Bio Mainframe", - "A Bio Circuit", - OrePrefixes.circuit.get(Materials.UEV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_Board_Coated_Basic - .set(addItem(Circuit_Board_Coated_Basic.ID, "Circuit Board", "A basic Circuit Board", o)); - ItemList.Circuit_Board_Phenolic_Good - .set(addItem(Circuit_Board_Phenolic_Good.ID, "Good Circuit Board", "A good Circuit Board", o)); - ItemList.Circuit_Board_Epoxy_Advanced - .set(addItem(Circuit_Board_Epoxy_Advanced.ID, "Advanced Circuit Board", "A advanced Circuit Board", o)); - ItemList.Circuit_Board_Fiberglass_Advanced.set( - addItem( - Circuit_Board_Fiberglass_Advanced.ID, - "More Advanced Circuit Board", - "A more advanced Circuit Board", - o)); - ItemList.Circuit_Board_Multifiberglass_Elite - .set(addItem(Circuit_Board_Multifiberglass_Elite.ID, "Elite Circuit Board", "A elite Circuit Board", o)); - ItemList.Circuit_Board_Wetware_Extreme.set( - addItem( - Circuit_Board_Wetware_Extreme.ID, - "Extreme Wetware Lifesupport Circuit Board", - "The Board that keeps life", - o)); - ItemList.Circuit_Board_Plastic_Advanced - .set(addItem(Circuit_Board_Plastic_Advanced.ID, "Plastic Circuit Board", "A good Board", o)); - ItemList.Circuit_Board_Bio_Ultra.set( - addItem(Circuit_Board_Bio_Ultra.ID, "Ultra Bio Mutated Circuit Board", "Bio genetic mutated Board", o)); - ItemList.Circuit_Board_Optical - .set(addItem(Circuit_Board_Optical.ID, "Optical Circuit Board", "Optically Infused Board", o)); - - // Optical circuits - ItemList.Circuit_OpticalProcessor.set( - addItem( - Circuit_OpticalProcessor.ID, - "Optical Processor", - "An Optical Circuit", - OrePrefixes.circuit.get(Materials.UV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_OpticalAssembly.set( - addItem( - Circuit_OpticalAssembly.ID, - "Optical Assembly", - "An Optical Circuit", - OrePrefixes.circuit.get(Materials.UHV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_OpticalComputer.set( - addItem( - Circuit_OpticalComputer.ID, - "Optical Computer", - "An Optical Circuit", - OrePrefixes.circuit.get(Materials.UEV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_OpticalMainframe.set( - addItem( - Circuit_OpticalMainframe.ID, - "Optical Mainframe", - "An Optical Circuit", - OrePrefixes.circuit.get(Materials.UIV), - SubTag.NO_UNIFICATION)); - - // Exotic circuits - ItemList.Circuit_ExoticProcessor.set( - addItem( - Circuit_ExoticProcessor.ID, - "Exotic Processor", - "An Exotic Circuit", - OrePrefixes.circuit.get(Materials.UHV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_ExoticAssembly.set( - addItem( - Circuit_ExoticAssembly.ID, - "Exotic Assembly", - "An Exotic Circuit", - OrePrefixes.circuit.get(Materials.UEV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_ExoticComputer.set( - addItem( - Circuit_ExoticComputer.ID, - "Exotic Computer", - "An Exotic Circuit", - OrePrefixes.circuit.get(Materials.UIV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_ExoticMainframe.set( - addItem( - Circuit_ExoticMainframe.ID, - "Exotic Mainframe", - "An Exotic Circuit", - OrePrefixes.circuit.get(Materials.UMV), - SubTag.NO_UNIFICATION)); - - // Cosmic circuits - ItemList.Circuit_CosmicProcessor.set( - addItem( - Circuit_CosmicProcessor.ID, - "Cosmic Processor", - "A Cosmic Circuit", - OrePrefixes.circuit.get(Materials.UEV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_CosmicAssembly.set( - addItem( - Circuit_CosmicAssembly.ID, - "Cosmic Assembly", - "A Cosmic Circuit", - OrePrefixes.circuit.get(Materials.UIV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_CosmicComputer.set( - addItem( - Circuit_CosmicComputer.ID, - "Cosmic Computer", - "A Cosmic Circuit", - OrePrefixes.circuit.get(Materials.UMV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_CosmicMainframe.set( - addItem( - Circuit_CosmicMainframe.ID, - "Cosmic Mainframe", - "A Cosmic Circuit", - OrePrefixes.circuit.get(Materials.UXV), - SubTag.NO_UNIFICATION)); - - // Transcendent circuits - ItemList.Circuit_TranscendentProcessor.set( - addItem( - Circuit_TranscendentProcessor.ID, - "Temporally Transcendent Processor", - "A circuit operating outside of known spacetime", - OrePrefixes.circuit.get(Materials.UIV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_TranscendentAssembly.set( - addItem( - Circuit_TranscendentAssembly.ID, - "Temporally Transcendent Assembly", - "A circuit operating outside of known spacetime", - OrePrefixes.circuit.get(Materials.UMV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_TranscendentComputer.set( - addItem( - Circuit_TranscendentComputer.ID, - "Temporally Transcendent Computer", - "A circuit operating outside of known spacetime", - OrePrefixes.circuit.get(Materials.UXV), - SubTag.NO_UNIFICATION)); - - ItemList.Circuit_TranscendentMainframe.set( - addItem( - Circuit_TranscendentMainframe.ID, - "Temporally Transcendent Mainframe", - "A circuit operating outside of known spacetime", - OrePrefixes.circuit.get(Materials.MAX), - SubTag.NO_UNIFICATION)); - - ItemList.Tube_Wires.set(addItem(Tube_Wires.ID, "Tube Wires", "For the Vacuum Tubes", o)); - - ItemList.Cover_SolarPanel_UHV.set( - addItem( - Cover_SolarPanel_UHV.ID, - "Solar Panel (UHV)", - "Ultimate High Voltage Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 128L))); - ItemList.Cover_SolarPanel_UEV.set( - addItem( - Cover_SolarPanel_UEV.ID, - "Solar Panel (UEV)", - "Ultimate Extreme Voltage Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 256L))); - ItemList.Cover_SolarPanel_UIV.set( - addItem( - Cover_SolarPanel_UIV.ID, - "Solar Panel (UIV)", - "Ultimate Insane Voltage Solar Panel (Needs cleaning with right click)", - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 512L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 512L))); - - ItemList.ULV_Coil.set(addItem(ULV_Coil.ID, "Ultra Low Voltage Coil", "Primitive Coil", o)); - ItemList.LV_Coil.set(addItem(LV_Coil.ID, "Low Voltage Coil", "Basic Coil", o)); - ItemList.MV_Coil.set(addItem(MV_Coil.ID, "Medium Voltage Coil", "Good Coil", o)); - ItemList.HV_Coil.set(addItem(HV_Coil.ID, "High Voltage Coil", "Advanced Coil", o)); - ItemList.EV_Coil.set(addItem(EV_Coil.ID, "Extreme Voltage Coil", "Extreme Coil", o)); - ItemList.IV_Coil.set(addItem(IV_Coil.ID, "Insane Voltage Coil", "Elite Coil", o)); - ItemList.LuV_Coil.set(addItem(LuV_Coil.ID, "Ludicrous Voltage Coil", "Master Coil", o)); - ItemList.ZPM_Coil.set(addItem(ZPM_Coil.ID, "ZPM Voltage Coil", "Ultimate Coil", o)); - ItemList.UV_Coil.set(addItem(UV_Coil.ID, "Ultimate Voltage Coil", "Super Coil", o)); - ItemList.UHV_Coil.set(addItem(UHV_Coil.ID, "Highly Ultimate Voltage Coil", "Infinite Coil", o)); - - ItemList.GalliumArsenideCrystal - .set(addItem(GalliumArsenideCrystal.ID, "Gallium Arsenide Crystal", "For making boules", o)); - ItemList.GalliumArsenideCrystalSmallPart - .set(addItem(GalliumArsenideCrystalSmallPart.ID, "Small Gallium Arsenide Crystal", "For making boules", o)); - ItemList.KevlarFiber.set(addItem(KevlarFiber.ID, "Kevlar Fiber", "For making Kevlar Plates", o)); - ItemList.WovenKevlar.set(addItem(WovenKevlar.ID, "Woven Kevlar", "For making Kevlar Plates", o)); - ItemList.Spinneret.set(addItem(Spinneret.ID, "Spinneret", "For making Kevlar Fiber", o)); - - ItemList.IndustrialApiary_Upgrade_Frame - .set(addItem(IndustrialApiary_Upgrade_Frame.ID, "Upgrade Frame", "Crafting component", o)); - - ItemList.IndustrialApiary_Upgrade_Acceleration_1.set( - addItem( - IndustrialApiary_Upgrade_Acceleration_1.ID, - "Acceleration Upgrade x2", - "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 2x acceleration level/n * Energy Consumption +1 AMP LV", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_Acceleration_2.set( - addItem( - IndustrialApiary_Upgrade_Acceleration_2.ID, - "Acceleration Upgrade x4", - "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 4x acceleration level/n * Energy Consumption +1 AMP MV", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_Acceleration_3.set( - addItem( - IndustrialApiary_Upgrade_Acceleration_3.ID, - "Acceleration Upgrade x8", - "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 8x acceleration level/n * Energy Consumption +1 AMP HV", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_Acceleration_4.set( - addItem( - IndustrialApiary_Upgrade_Acceleration_4.ID, - "Acceleration Upgrade x16", - "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 16x acceleration level/n * Energy Consumption +1 AMP EV", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_Acceleration_5.set( - addItem( - IndustrialApiary_Upgrade_Acceleration_5.ID, - "Acceleration Upgrade x32", - "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 32x acceleration level/n * Energy Consumption +1 AMP IV", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_Acceleration_6.set( - addItem( - IndustrialApiary_Upgrade_Acceleration_6.ID, - "Acceleration Upgrade x64", - "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 64x acceleration level/n * Energy Consumption +1 AMP LuV", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_Acceleration_7.set( - addItem( - IndustrialApiary_Upgrade_Acceleration_7.ID, - "Acceleration Upgrade x128", - "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 128x acceleration level/n * Energy Consumption +1 AMP ZPM", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_Acceleration_8.set( - addItem( - IndustrialApiary_Upgrade_Acceleration_8.ID, - "Acceleration Upgrade x256", - "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 256x acceleration level/n * Energy Consumption +1 AMP UV", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_Acceleration_8_Upgraded.set( - addItem( - IndustrialApiary_Upgrade_Acceleration_8_Upgraded.ID, - "Upgraded Acceleration Upgrade x256", - "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 256x acceleration level/n * Will also grant 8x production upgrade/n * Energy Consumption +1 AMP UV", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_PRODUCTION.set( - addItem( - IndustrialApiary_Upgrade_PRODUCTION.ID, - "Production Upgrade", - "Production upgrade for Industrial Apiary/n Maximum Installed: 8/n Increases production modifier by 0.25/n Energy Consumption +40%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_PLAINS.set( - addItem( - IndustrialApiary_Upgrade_PLAINS.ID, - "Plains Emulation Upgrade", - "Plains emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: Plains/n * Energy Consumption +40%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_LIGHT.set( - addItem( - IndustrialApiary_Upgrade_LIGHT.ID, - "Light Upgrade", - "Light upgrade for Industrial Apiary/n Maximum Installed: 1/n * Internal Lighting/n * Energy Consumption +5%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_FLOWERING.set( - addItem( - IndustrialApiary_Upgrade_FLOWERING.ID, - "Flowering Upgrade", - "Flowering upgrade for Industrial Apiary/n Maximum Installed: 8/n * Flowering and Pollination +20%/n * Energy Consumption +10%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_WINTER.set( - addItem( - IndustrialApiary_Upgrade_WINTER.ID, - "Winter Emulation Upgrade", - "Winter emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: Taiga/n * Energy Consumption +50%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_DRYER.set( - addItem( - IndustrialApiary_Upgrade_DRYER.ID, - "Dryer Upgrade", - "Dryer upgrade for Industrial Apiary/n Maximum Installed: 16/n * Humidity -12.5%/n * Energy Consumption +2.5%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_AUTOMATION.set( - addItem( - IndustrialApiary_Upgrade_AUTOMATION.ID, - "Automation Upgrade", - "Automation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Automation/n * Energy Consumption +10%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_HUMIDIFIER.set( - addItem( - IndustrialApiary_Upgrade_HUMIDIFIER.ID, - "Humidifier Upgrade", - "Humidifier upgrade for Industrial Apiary/n Maximum Installed: 16/n * Humidity +12.5%/n * Energy Consumption +2.5%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_HELL.set( - addItem( - IndustrialApiary_Upgrade_HELL.ID, - "HELL Emulation Upgrade", - "HELL emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: HELL/n * Energy Consumption +50%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_POLLEN.set( - addItem( - IndustrialApiary_Upgrade_POLLEN.ID, - "Pollen Scrubber Upgrade", - "Pollen scrubber upgrade for Industrial Apiary/n Maximum Installed: 1/n * Flowering and Pollination -100%/n * Energy Consumption +30%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_DESERT.set( - addItem( - IndustrialApiary_Upgrade_DESERT.ID, - "Desert Emulation Upgrade", - "Desert emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: Desert/n * Energy Consumption +20%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_COOLER.set( - addItem( - IndustrialApiary_Upgrade_COOLER.ID, - "Cooler Upgrade", - "Cooler upgrade for Industrial Apiary/n Maximum Installed: 16/n * Temperature -12.5%/n * Energy Consumption +2.5%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_LIFESPAN.set( - addItem( - IndustrialApiary_Upgrade_LIFESPAN.ID, - "Lifespan Upgrade", - "Lifespan upgrade for Industrial Apiary/n Maximum Installed: 4/n * Lifespan -33%/n * Energy Consumption +5%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_SEAL.set( - addItem( - IndustrialApiary_Upgrade_SEAL.ID, - "Seal Upgrade", - "Seal upgrade for Industrial Apiary/n Maximum Installed: 1/n * Rain Protection/n * Energy Consumption +5%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_STABILIZER.set( - addItem( - IndustrialApiary_Upgrade_STABILIZER.ID, - "Genetic Stabilizer Upgrade", - "Genetic stabilizer upgrade for Industrial Apiary/n Maximum Installed: 1/n * Genetic Decay -100%/n * Energy Consumption +150%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_JUNGLE.set( - addItem( - IndustrialApiary_Upgrade_JUNGLE.ID, - "Jungle Emulation Upgrade", - "Jungle emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: Jungle/n * Energy Consumption +20%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_TERRITORY.set( - addItem( - IndustrialApiary_Upgrade_TERRITORY.ID, - "Territory Upgrade", - "Territory upgrade for Industrial Apiary/n Maximum Installed: 4/n * Territory +50%/n * Energy Consumption +5%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_OCEAN.set( - addItem( - IndustrialApiary_Upgrade_OCEAN.ID, - "Ocean Emulation Upgrade", - "Ocean emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: Ocean/n * Energy Consumption +20%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_SKY.set( - addItem( - IndustrialApiary_Upgrade_SKY.ID, - "Open Sky Upgrade", - "Open sky upgrade for Industrial Apiary/n Maximum Installed: 1/n * Open Sky Simulation/n * Energy Consumption +5%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_HEATER.set( - addItem( - IndustrialApiary_Upgrade_HEATER.ID, - "Heater Upgrade", - "Heater upgrade for Industrial Apiary/n Maximum Installed: 16/n * Temperature +12.5%/n * Energy Consumption +2.5%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_SIEVE.set( - addItem( - IndustrialApiary_Upgrade_SIEVE.ID, - "Sieve Upgrade", - "Sieve upgrade for Industrial Apiary/n Maximum Installed: 1/n * Pollen Collection/n * Energy Consumption +25%", - OrePrefixes.apiaryUpgrade.name())); - ItemList.IndustrialApiary_Upgrade_UNLIGHT.set( - addItem( - IndustrialApiary_Upgrade_UNLIGHT.ID, - "Night Upgrade", - "Night upgrade for Industrial Apiary/n Maximum Installed: 1/n * Internal Darkness/n * Energy Consumption +5%", - OrePrefixes.apiaryUpgrade.name())); - - ItemList.NuclearStar.set( - addItem( - NuclearStar.ID, - "Nuclear Star", - "By the powers of Greg, I command this star to be really hot.", - SubTag.NO_UNIFICATION)); - - ItemList.Cover_Metrics_Transmitter.set( - addItem( - Cover_Metrics_Transmitter.ID, - "Metrics Transmitter Cover", - String.join( - "/n ", - "Taking Information Panels to the next level!", - "Creates a GregTech Advanced Sensor Card when attached", - "Works across dimensions or if machine is dismantled", - "Removing this cover will destroy the linked card", - GT_Values.AuthorQuerns))); - - ItemList.ActivatedCarbonFilterMesh.set( - addItem( - Activated_Carbon_Filter_Mesh.ID, - "Activated Carbon Filter Mesh", - "The most granular filter you could possibly make.", - SubTag.NO_UNIFICATION)); - - ItemList.Quark_Catalyst_Housing.set( - addItem( - Quark_Catalyst_Housing.ID, - "Empty Quark Release Catalyst Housing", - "Capable of holding Quark Release Catalysts", - SubTag.NO_UNIFICATION)); - ItemList.Quark_Creation_Catalyst_Up.set( - addItem( - Quark_Creation_Catalyst_Up.ID, - "Up-Quark Releasing Catalyst", - "Can release up-quarks into environment to reshape matter", - SubTag.NO_UNIFICATION)); - ItemList.Quark_Creation_Catalyst_Down.set( - addItem( - Quark_Creation_Catalyst_Down.ID, - "Down-Quark Releasing Catalyst", - "Can release down-quarks into environment to reshape matter", - SubTag.NO_UNIFICATION)); - ItemList.Quark_Creation_Catalyst_Strange.set( - addItem( - Quark_Creation_Catalyst_Strange.ID, - "Strange-Quark Releasing Catalyst", - "Can release strange-quarks into environment to reshape matter", - SubTag.NO_UNIFICATION)); - ItemList.Quark_Creation_Catalyst_Charm.set( - addItem( - Quark_Creation_Catalyst_Charm.ID, - "Charm-Quark Releasing Catalyst", - "Can release charm-quarks into environment to reshape matter", - SubTag.NO_UNIFICATION)); - ItemList.Quark_Creation_Catalyst_Bottom.set( - addItem( - Quark_Creation_Catalyst_Bottom.ID, - "Bottom-Quark Releasing Catalyst", - "Can release top-quarks into environment to reshape matter", - SubTag.NO_UNIFICATION)); - ItemList.Quark_Creation_Catalyst_Top.set( - addItem( - Quark_Creation_Catalyst_Top.ID, - "Top-Quark Releasing Catalyst", - "Can release bottom-quarks into environment to reshape matter", - SubTag.NO_UNIFICATION)); - ItemList.Quark_Creation_Catalyst_Unaligned.set( - addItem( - Quark_Creation_Catalyst_Unaligned.ID, - "Unaligned Quark Releasing Catalyst", - "Needs to be realigned before use", - SubTag.NO_UNIFICATION)); - - ItemList.Optical_Cpu_Containment_Housing - .set(addItem(Optical_Cpu_Containment_Housing.ID, "Optical CPU Containment Housing", "CPU Housing", o)); - ItemList.Optically_Perfected_CPU - .set(addItem(Optically_Perfected_CPU.ID, "Optically Perfected CPU", "Perfected CPU!", o)); - ItemList.Optically_Compatible_Memory - .set(addItem(Optically_Compatible_Memory.ID, "Optically Compatible Memory", "Its in the name!", o)); - - ItemList.Timepiece.set(addItem(Timepiece.ID, "Timepiece", "Beware of the kid with the hat", o)); - ItemList.Transdimensional_Alignment_Matrix.set( - addItem( - Transdimensional_Alignment_Matrix.ID, - "Transdimensional Alignment Matrix", - String.join( - "/n ", - "Device supporting the alignment of transdimensional spaces.", - "Enables Dimensional Convergence on the DTPF."), - o)); - - ItemList.Thermal_Superconductor - .set(addItem(Thermal_Superconductor.ID, "Thermal Superconductor", "With the power of second sound!", o)); - ItemList.Relativistic_Heat_Capacitor - .set(addItem(Relativistic_Heat_Capacitor.ID, "Relativistic Heat Capacitor", "Thermal Resonance?", o)); - ItemList.Phononic_Seed_Crystal - .set(addItem(Phononic_Seed_Crystal.ID, "Phononic Seed Crystal", "Perfect Thermal Conductance", o)); - - ItemList.White_Dwarf_Shape_Extruder_Plate.set( - addItem( - White_Dwarf_Shape_Extruder_Plate.ID, - "White Dwarf Extruder Shape (Plate)", - "Ultra Strong Stellar Shape for making Plates")); - ItemList.White_Dwarf_Shape_Extruder_Rod.set( - addItem( - White_Dwarf_Shape_Extruder_Rod.ID, - "White Dwarf Extruder Shape (Rod)", - "Ultra Strong Stellar Shape for making Rods")); - ItemList.White_Dwarf_Shape_Extruder_Bolt.set( - addItem( - White_Dwarf_Shape_Extruder_Bolt.ID, - "White Dwarf Extruder Shape (Bolt)", - "Ultra Strong Stellar Shape for making Bolts")); - ItemList.White_Dwarf_Shape_Extruder_Ring.set( - addItem( - White_Dwarf_Shape_Extruder_Ring.ID, - "White Dwarf Extruder Shape (Ring)", - "Ultra Strong Stellar Shape for making Rings")); - ItemList.White_Dwarf_Shape_Extruder_Cell.set( - addItem( - White_Dwarf_Shape_Extruder_Cell.ID, - "White Dwarf Extruder Shape (Cell)", - "Ultra Strong Stellar Shape for making Cells")); - ItemList.White_Dwarf_Shape_Extruder_Ingot.set( - addItem( - White_Dwarf_Shape_Extruder_Ingot.ID, - "White Dwarf Extruder Shape (Ingot)", - "Ultra Strong Stellar Shape for, wait, can't we just use a Furnace?")); - ItemList.White_Dwarf_Shape_Extruder_Wire.set( - addItem( - White_Dwarf_Shape_Extruder_Wire.ID, - "White Dwarf Extruder Shape (Wire)", - "Ultra Strong Stellar Shape for making Wires")); - ItemList.White_Dwarf_Shape_Extruder_Casing.set( - addItem( - White_Dwarf_Shape_Extruder_Casing.ID, - "White Dwarf Extruder Shape (Casing)", - "Ultra Strong Stellar Shape for making Item Casings")); - ItemList.White_Dwarf_Shape_Extruder_Pipe_Tiny.set( - addItem( - White_Dwarf_Shape_Extruder_Pipe_Tiny.ID, - "White Dwarf Extruder Shape (Tiny Pipe)", - "Ultra Strong Stellar Shape for making tiny Pipes")); - ItemList.White_Dwarf_Shape_Extruder_Pipe_Small.set( - addItem( - White_Dwarf_Shape_Extruder_Pipe_Small.ID, - "White Dwarf Extruder Shape (Small Pipe)", - "Ultra Strong Stellar Shape for making small Pipes")); - ItemList.White_Dwarf_Shape_Extruder_Pipe_Medium.set( - addItem( - White_Dwarf_Shape_Extruder_Pipe_Medium.ID, - "White Dwarf Extruder Shape (Normal Pipe)", - "Ultra Strong Stellar Shape for making Pipes")); - ItemList.White_Dwarf_Shape_Extruder_Pipe_Large.set( - addItem( - White_Dwarf_Shape_Extruder_Pipe_Large.ID, - "White Dwarf Extruder Shape (Large Pipe)", - "Ultra Strong Stellar Shape for making large Pipes")); - ItemList.White_Dwarf_Shape_Extruder_Pipe_Huge.set( - addItem( - White_Dwarf_Shape_Extruder_Pipe_Huge.ID, - "White Dwarf Extruder Shape (Huge Pipe)", - "Ultra Strong Stellar Shape for making full Block Pipes")); - ItemList.White_Dwarf_Shape_Extruder_Block.set( - addItem( - White_Dwarf_Shape_Extruder_Block.ID, - "White Dwarf Extruder Shape (Block)", - "Ultra Strong Stellar Shape for making Blocks")); - ItemList.White_Dwarf_Shape_Extruder_Sword.set( - addItem( - White_Dwarf_Shape_Extruder_Sword.ID, - "White Dwarf Extruder Shape (Sword Blade)", - "Ultra Strong Stellar Shape for making Swords")); - ItemList.White_Dwarf_Shape_Extruder_Pickaxe.set( - addItem( - White_Dwarf_Shape_Extruder_Pickaxe.ID, - "White Dwarf Extruder Shape (Pickaxe Head)", - "Ultra Strong Stellar Shape for making Pickaxes")); - ItemList.White_Dwarf_Shape_Extruder_Shovel.set( - addItem( - White_Dwarf_Shape_Extruder_Shovel.ID, - "White Dwarf Extruder Shape (Shovel Head)", - "Ultra Strong Stellar Shape for making Shovels")); - ItemList.White_Dwarf_Shape_Extruder_Axe.set( - addItem( - White_Dwarf_Shape_Extruder_Axe.ID, - "White Dwarf Extruder Shape (Axe Head)", - "Ultra Strong Stellar Shape for making Axes")); - ItemList.White_Dwarf_Shape_Extruder_Hoe.set( - addItem( - White_Dwarf_Shape_Extruder_Hoe.ID, - "White Dwarf Extruder Shape (Hoe Head)", - "Ultra Strong Stellar Shape for making Hoes")); - ItemList.White_Dwarf_Shape_Extruder_Hammer.set( - addItem( - White_Dwarf_Shape_Extruder_Hammer.ID, - "White Dwarf Extruder Shape (Hammer Head)", - "Ultra Strong Stellar Shape for making Hammers")); - ItemList.White_Dwarf_Shape_Extruder_File.set( - addItem( - White_Dwarf_Shape_Extruder_File.ID, - "White Dwarf Extruder Shape (File Head)", - "Ultra Strong Stellar Shape for making Files")); - ItemList.White_Dwarf_Shape_Extruder_Saw.set( - addItem( - White_Dwarf_Shape_Extruder_Saw.ID, - "White Dwarf Extruder Shape (Saw Blade)", - "Ultra Strong Stellar Shape for making Saws")); - ItemList.White_Dwarf_Shape_Extruder_Gear.set( - addItem( - White_Dwarf_Shape_Extruder_Gear.ID, - "White Dwarf Extruder Shape (Gear)", - "Ultra Strong Stellar Shape for making Gears")); - ItemList.White_Dwarf_Shape_Extruder_Bottle.set( - addItem( - White_Dwarf_Shape_Extruder_Bottle.ID, - "White Dwarf Extruder Shape (Bottle)", - "Ultra Strong Stellar Shape for making Bottles")); - ItemList.White_Dwarf_Shape_Extruder_Rotor.set( - addItem( - White_Dwarf_Shape_Extruder_Rotor.ID, - "White Dwarf Extruder Shape (Rotor)", - "Ultra Strong Stellar Shape for a Rotor")); - ItemList.White_Dwarf_Shape_Extruder_Small_Gear.set( - addItem( - White_Dwarf_Shape_Extruder_Small_Gear.ID, - "White Dwarf Extruder Shape (Small Gear)", - "Ultra Strong Stellar Shape for a Small Gear")); - ItemList.White_Dwarf_Shape_Extruder_Turbine_Blade.set( - addItem( - White_Dwarf_Shape_Extruder_Turbine_Blade.ID, - "White Dwarf Extruder Shape (Turbine Blade)", - "Ultra Strong Stellar Extruder Shape for a Turbine Blade")); - ItemList.White_Dwarf_Shape_Extruder_ToolHeadDrill.set( - addItem( - White_Dwarf_Shape_Extruder_ToolHeadDrill.ID, - "White Dwarf Extruder Shape (Drill Head)", - "White Dwarf Extruder Shape for a Drill Head")); - registerAllTieredTooltips(); - registerAllAnimatedTooltips(); - initOrePrefixes(); - initOreDictUnificatorEntries(); - registerCovers(); - } - - private void registerAllTieredTooltips() { - registerTieredTooltip(ItemList.NandChip.get(1), ULV); - registerTieredTooltip(ItemList.Circuit_Integrated_Good.get(1), MV); - registerTieredTooltip(ItemList.Circuit_Microprocessor.get(1), LV); - registerTieredTooltip(ItemList.Circuit_Processor.get(1), MV); - registerTieredTooltip(ItemList.Circuit_Nanoprocessor.get(1), HV); - registerTieredTooltip(ItemList.Circuit_Nanocomputer.get(1), EV); - registerTieredTooltip(ItemList.Circuit_Elitenanocomputer.get(1), IV); - registerTieredTooltip(ItemList.Circuit_Quantumprocessor.get(1), EV); - registerTieredTooltip(ItemList.Circuit_Quantumcomputer.get(1), IV); - registerTieredTooltip(ItemList.Circuit_Masterquantumcomputer.get(1), LuV); - registerTieredTooltip(ItemList.Circuit_Quantummainframe.get(1), ZPM); - registerTieredTooltip(ItemList.Circuit_Crystalprocessor.get(1), IV); - registerTieredTooltip(ItemList.Circuit_Crystalcomputer.get(1), LuV); - registerTieredTooltip(ItemList.Circuit_Ultimatecrystalcomputer.get(1), ZPM); - registerTieredTooltip(ItemList.Circuit_Crystalmainframe.get(1), UV); - registerTieredTooltip(ItemList.Circuit_Neuroprocessor.get(1), LuV); - registerTieredTooltip(ItemList.Circuit_Wetwarecomputer.get(1), ZPM); - registerTieredTooltip(ItemList.Circuit_Wetwaresupercomputer.get(1), UV); - registerTieredTooltip(ItemList.Circuit_Wetwaremainframe.get(1), UHV); - registerTieredTooltip(ItemList.Circuit_Bioprocessor.get(1), ZPM); - registerTieredTooltip(ItemList.Circuit_Biowarecomputer.get(1), UV); - registerTieredTooltip(ItemList.Circuit_Biowaresupercomputer.get(1), UHV); - registerTieredTooltip(ItemList.Circuit_Biomainframe.get(1), UEV); - registerTieredTooltip(ItemList.Circuit_OpticalProcessor.get(1), UV); - registerTieredTooltip(ItemList.Circuit_OpticalAssembly.get(1), UHV); - registerTieredTooltip(ItemList.Circuit_OpticalComputer.get(1), UEV); - registerTieredTooltip(ItemList.Circuit_OpticalMainframe.get(1), UIV); - registerTieredTooltip(ItemList.Circuit_ExoticProcessor.get(1), UHV); - registerTieredTooltip(ItemList.Circuit_ExoticAssembly.get(1), UEV); - registerTieredTooltip(ItemList.Circuit_ExoticComputer.get(1), UIV); - registerTieredTooltip(ItemList.Circuit_ExoticMainframe.get(1), UMV); - registerTieredTooltip(ItemList.Circuit_CosmicProcessor.get(1), UEV); - registerTieredTooltip(ItemList.Circuit_CosmicAssembly.get(1), UIV); - registerTieredTooltip(ItemList.Circuit_CosmicComputer.get(1), UMV); - registerTieredTooltip(ItemList.Circuit_CosmicMainframe.get(1), UXV); - registerTieredTooltip(ItemList.Circuit_TranscendentProcessor.get(1), UIV); - registerTieredTooltip(ItemList.Circuit_TranscendentAssembly.get(1), UMV); - registerTieredTooltip(ItemList.Circuit_TranscendentComputer.get(1), UXV); - registerTieredTooltip(ItemList.Circuit_TranscendentMainframe.get(1), MAX); - } - - private void registerAllAnimatedTooltips() { - addItemTooltip(ItemList.Transdimensional_Alignment_Matrix.get(1), GT_Values.AuthorCloud); - } - - private void initOreDictUnificatorEntries() { - GT_OreDictUnificator - .set(OrePrefixes.componentCircuit, Materials.Resistor, ItemList.Circuit_Parts_Resistor.get(1L)); - GT_OreDictUnificator.set(OrePrefixes.componentCircuit, Materials.Diode, ItemList.Circuit_Parts_Diode.get(1L)); - GT_OreDictUnificator - .set(OrePrefixes.componentCircuit, Materials.Transistor, ItemList.Circuit_Parts_Transistor.get(1L)); - GT_OreDictUnificator.set(OrePrefixes.componentCircuit, Materials.Inductor, ItemList.Circuit_Parts_Coil.get(1L)); - GT_OreDictUnificator - .set(OrePrefixes.componentCircuit, Materials.Capacitor, ItemList.Circuit_Parts_Capacitor.get(1L)); - - GT_OreDictUnificator.addAssociation( - OrePrefixes.componentCircuit, - Materials.Resistor, - ItemList.Circuit_Parts_ResistorSMD.get(1L), - true); - GT_OreDictUnificator.addAssociation( - OrePrefixes.componentCircuit, - Materials.Diode, - ItemList.Circuit_Parts_DiodeSMD.get(1L), - true); - GT_OreDictUnificator.addAssociation( - OrePrefixes.componentCircuit, - Materials.Transistor, - ItemList.Circuit_Parts_TransistorSMD.get(1L), - true); - GT_OreDictUnificator.addAssociation( - OrePrefixes.componentCircuit, - Materials.Capacitor, - ItemList.Circuit_Parts_CapacitorSMD.get(1L), - true); - GT_OreDictUnificator.addAssociation( - OrePrefixes.componentCircuit, - Materials.Inductor, - ItemList.Circuit_Parts_InductorSMD.get(1L), - true); - - } - - private void initOrePrefixes() { - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_1.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_2.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_3.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_4.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_5.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_6.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_7.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_8.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_8_Upgraded.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_PRODUCTION.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_PLAINS.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_LIGHT.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_FLOWERING.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_WINTER.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_DRYER.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_AUTOMATION.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_HUMIDIFIER.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_HELL.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_POLLEN.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_DESERT.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_COOLER.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_LIFESPAN.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_SEAL.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_STABILIZER.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_JUNGLE.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_TERRITORY.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_OCEAN.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_SKY.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_HEATER.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_SIEVE.get(1L)); - OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_UNLIGHT.get(1L)); - } - - private void registerCovers() { - GregTech_API.registerCover( - ItemList.Cover_Metrics_Transmitter.get(1L), - TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_METRICS_TRANSMITTER)), - new GT_Cover_Metrics_Transmitter(TextureFactory.of(OVERLAY_METRICS_TRANSMITTER))); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_UHV.get(1L), - TextureFactory.of(SOLARPANEL_UHV), - new GT_Cover_SolarPanel(2097152)); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_UEV.get(1L), - TextureFactory.of(SOLARPANEL_UEV), - new GT_Cover_SolarPanel(8388608)); - GregTech_API.registerCover( - ItemList.Cover_SolarPanel_UIV.get(1L), - TextureFactory.of(SOLARPANEL_UIV), - new GT_Cover_SolarPanel(33554432)); - } - - @Override - public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) { - return aDoShowAllItems || (aPrefix.toString() - .toLowerCase() - .contains("nanite")) - || (aPrefix.toString() - .toLowerCase() - .contains("rawore")); - } -} diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_98.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_98.java deleted file mode 100644 index 0dab2af2cf..0000000000 --- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_98.java +++ /dev/null @@ -1,352 +0,0 @@ -package gregtech.common.items; - -import java.util.Arrays; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -import javax.annotation.Nullable; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Item; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Util; -import gregtech.api.util.GT_Utility; - -/** This class holds cells for non-GT fluids. */ -public class GT_MetaGenerated_Item_98 extends GT_MetaGenerated_Item { - - public static GT_MetaGenerated_Item_98 INSTANCE; - - /** - * Registered fluids. - * - *

- * When adding a fluid, don't forget to make sure that GregTech loads after the mod that adds that fluid! - * - *

- * In order to avoid breaking existing worlds, fluids must not have their IDs changed! The only safe modification - * that can be made to this enum is adding new fluids, or removing existing fluids. When removing fluids, maybe - * leave a comment mentioning the old ID, so that we don't re-use it for a new fluid. - */ - public enum FluidCell { - // Next unused ID: 32 - - // GregTech - DRILLING_FLUID(5, "liquid_drillingfluid", CellType.REGULAR), - SQUID_INK(6, "squidink", CellType.SMALL), - BLUE_VITRIOL(22, "solution.bluevitriol", CellType.REGULAR), - NICKEL_SULFATE(23, "solution.nickelsulfate", CellType.REGULAR), - GREEN_VITRIOL(24, "solution.greenvitriol", CellType.REGULAR), - INDIUM_CONCENTRATE(25, "indiumconcentrate", CellType.REGULAR), - LEAD_ZINC_SOLUTION(26, "leadzincsolution", CellType.REGULAR), - - // New Horizons Core Mod - UNKNOWN_NUTRIENT_AGAR(7, "unknownnutrientagar", CellType.REGULAR), - SEAWEED_BROTH(8, "seaweedbroth", CellType.REGULAR), - SUPER_HEAVY_RADOX(28, "superheavyradox", CellType.REGULAR), - HEAVY_RADOX(29, "heavyradox", CellType.REGULAR), - CRACKED_RADOX(30, "crackedradox", CellType.REGULAR), - LIGHT_RADOX(31, "lightradox", CellType.REGULAR), - SUPER_LIGHT_RADOX(9, "superlightradox", CellType.REGULAR), - SODIUM_POTASSIUM(18, "sodiumpotassium", CellType.REGULAR), - ENRICHED_BACTERIAL_SLUDGE(19, "enrichedbacterialsludge", CellType.REGULAR), - FERMENTED_BACTERIAL_SLUDGE(20, "fermentedbacterialsludge", CellType.REGULAR), - POLLUTION(21, "pollution", CellType.REGULAR), - XENOXENE(27, "xenoxene", CellType.REGULAR), - - // BartWorks - ENZYME_SOLUTION(10, "enzymessollution", CellType.REGULAR), - ESCHERICHIA_COLI_FLUID(11, "escherichiakolifluid", CellType.REGULAR), - PENICILLIN(12, "penicillin", CellType.REGULAR), - FLUORESCENT_DNA(13, "fluorecentddna", CellType.REGULAR), - POLYMERASE(17, "polymerase", CellType.REGULAR), - - // Good Generator - COMBUSTION_PROMOTER(14, "combustionpromotor", CellType.REGULAR), - - // Galacticraft - BACTERIAL_SLUDGE(1, "bacterialsludge", CellType.REGULAR), - - // Railcraft - STEAM(0, "steam", CellType.REGULAR), - - // Gendustry - BACTERIA(15, "binnie.bacteria", CellType.REGULAR), - MUTAGEN(2, "mutagen", CellType.REGULAR), - LIQUID_DNA(16, "liquiddna", CellType.REGULAR), - - // Tinker's Construct - LIQUID_ENDER(3, "ender", CellType.REGULAR), - - // Hardcore Ender Expansion - ENDER_GOO(4, "endergoo", CellType.REGULAR),; - - private final int mId; - /** This is the Forge internal fluid name. */ - private final String mfluidName; - - private final CellType mType; - - @Nullable - private ItemStack mStack; - - FluidCell(int aId, String aFluidName, CellType aType) { - mId = aId; - mfluidName = aFluidName; - mType = aType; - } - - public int getId() { - return mId; - } - - public String getFluidName() { - return mfluidName; - } - - public CellType getDisplayType() { - return mType; - } - - /** - * Get a copy of this stack with stack size 1. - *

- * Always returns non-null stack even if the fluid referenced doesn't exist, so don't assume it's always valid. - */ - public ItemStack get() { - trySetStack(); - return GT_Utility.copy(mStack); - } - - /** - * Get a copy of this cell WITHOUT copy. - *

- * Always returns non-null stack even if the fluid referenced doesn't exist, so don't assume it's always valid. - *

- * Use with caution. - */ - public ItemStack getNoCopy() { - trySetStack(); - return mStack; - } - - /** - * Get a copy of this cell with specified stack size. - *

- * Always returns non-null stack even if the fluid referenced doesn't exist, so don't assume it's always valid. - */ - public ItemStack get(int aStackSize) { - trySetStack(); - return GT_Utility.copyAmount(aStackSize, mStack); - } - - private void trySetStack() { - if (mStack == null) { - mStack = new ItemStack(GT_MetaGenerated_Item_98.INSTANCE, 1, mId); - } - } - } - - /** Cell type specifies the cell capacity, appearance, and item name format. */ - private enum CellType { - - REGULAR(1_000, OrePrefixes.cell), - SMALL(144, OrePrefixes.cell), - MOLTEN(144, OrePrefixes.cellMolten), - PLASMA(1_000, OrePrefixes.cellPlasma); - - private final int capacity; - private final OrePrefixes prefix; - - CellType(int capacity, OrePrefixes prefix) { - this.capacity = capacity; - this.prefix = prefix; - } - } - - /** Struct class holding data that we need to properly handle a registered fluid cell item. */ - private static class RegisteredFluidData { - - private final short[] rgba; - private final IIconContainer iconContainer; - - private RegisteredFluidData(short[] rgba, IIconContainer iconContainer) { - this.rgba = rgba; - this.iconContainer = iconContainer; - } - } - - /** - * Map of ID to registered fluid data. - * - *

- * Only contains IDs that were successfully registered. - */ - private final Map registeredFluidDataMap; - - private final EnumMap iconContainerMap; - - private GT_MetaGenerated_Item_98() { - // For some reason, fluid cells will be rendered only if the metadata ID is less than the - // offset. So we will specify maximum offset here. - // See: GT_MetaGenerated_Item_Renderer.java - super("metaitem.98", (short) 32766, (short) 0); - - registeredFluidDataMap = new HashMap<>(); - iconContainerMap = new EnumMap<>(CellType.class); - } - - /** - * Loading needs to happen after the fluids we need have been registered, which means during post-load. However, - * cell icons seem to be deleted some time between load and post-load, so we must pre-cache them. - */ - public static synchronized void preInit() { - if (INSTANCE == null) INSTANCE = new GT_MetaGenerated_Item_98(); - - // We'll just steal the icons from Water. They are all the same anyway (except _NULL is broken for cells). - for (CellType cellType : CellType.values()) { - IIconContainer iconContainer = Materials.Water.mIconSet.mTextures[cellType.prefix.mTextureIndex]; - INSTANCE.iconContainerMap.put(cellType, iconContainer); - } - } - - public static synchronized void init() { - INSTANCE.createAllItems(); - INSTANCE.registerOreDict(); - } - - private void createAllItems() { - for (FluidCell tCell : FluidCell.values()) { - tryToInitialize(tCell); - } - - // We're not going to use these BitSets, so clear them to save memory. - mEnabledItems.clear(); - mVisibleItems.clear(); - } - - private void tryToInitialize(FluidCell aCell) { - final boolean isStackAlreadySet = aCell.mStack != null; - - int id = aCell.getId(); - String fluidName = aCell.getFluidName(); - CellType cellType = aCell.getDisplayType(); - - // We'll check for ID uniqueness. Better to throw an exception than silently overwrite some - // fluid cells with other fluids due to ID collision. - if (registeredFluidDataMap.containsKey(id)) { - throw new IllegalStateException("Got ID collision for ID: " + id); - } - - aCell.trySetStack(); - - Fluid fluid = FluidRegistry.getFluid(fluidName); - if (fluid == null) { - // The fluid is not guaranteed to exist. - // These fluids are non-GT fluids, so the mod may not be present. - if (isStackAlreadySet) { - throw new RuntimeException( - "Cell item for fluid " + fluidName - + " has already been created, but the fluid doesn't exist during postload"); - } else { - // fluid doesn't exist and this item has not been referenced - return; - } - } - - FluidStack fluidStack = new FluidStack(fluid, cellType.capacity); - - ItemStack emptyCell = ItemList.Cell_Empty.get(1L); - FluidContainerRegistry - .registerFluidContainer(new FluidContainerRegistry.FluidContainerData(fluidStack, aCell.mStack, emptyCell)); - - GT_LanguageManager.addStringLocalization( - getUnlocalizedName(aCell.mStack) + ".name", - cellType.prefix.mLocalizedMaterialPre + fluid.getLocalizedName(fluidStack) - + cellType.prefix.mLocalizedMaterialPost); - - int color = fluid.getColor(); - short[] rgba = GT_Util.getRGBaArray(color); - - registeredFluidDataMap.put(id, new RegisteredFluidData(rgba, iconContainerMap.get(cellType))); - } - - private void registerOreDict() { - // The GregTech ore dictionary requires an entry in the Materials enum, and since the whole - // point of this class is to add cell items for non-GregTech fluids, the vast majority of - // cell items won't have an associated material. So only a rare few cell items will need to - // be registered. - - // Register IC2 steam cell and Railcraft steam cell as synonyms. - // There is no steam material, so we'll use Water.cellMolten instead. - GT_OreDictUnificator.add(OrePrefixes.cellMolten, Materials.Water, GT_ModHandler.getIC2Item("steamCell", 1L)); - GT_OreDictUnificator.add(OrePrefixes.cellMolten, Materials.Water, FluidCell.STEAM.getNoCopy()); - } - - @Override - public short[] getRGBa(ItemStack aStack) { - RegisteredFluidData fluidData = registeredFluidDataMap.get(aStack.getItemDamage()); - if (fluidData == null) { - return Materials._NULL.mRGBa; - } - - return fluidData.rgba; - } - - @Override - public ItemStack getContainerItem(ItemStack aStack) { - return ItemList.Cell_Empty.get(1L); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { - Arrays.stream(FluidCell.values()) - .filter(fluid -> FluidRegistry.getFluid(fluid.getFluidName()) != null) - .map(FluidCell::get) - .filter(Objects::nonNull) - .forEach(aList::add); - } - - @Override - public final IIcon getIconFromDamage(int aMetaData) { - IIconContainer iconContainer = getIconContainer(aMetaData); - if (iconContainer != null) { - return iconContainer.getIcon(); - } - return null; - } - - @Override - public IIconContainer getIconContainer(int aMetaData) { - RegisteredFluidData fluidData = registeredFluidDataMap.get(aMetaData); - if (fluidData == null) { - return null; - } - return fluidData.iconContainer; - } - - @Override - public int getItemStackLimit(ItemStack aStack) { - return 64; - } -} diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_99.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_99.java deleted file mode 100644 index 08d6f23164..0000000000 --- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Item_99.java +++ /dev/null @@ -1,214 +0,0 @@ -package gregtech.common.items; - -import static gregtech.api.enums.GT_Values.M; -import static gregtech.api.enums.OrePrefixes.cellMolten; - -import java.util.BitSet; -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import com.google.common.collect.ImmutableList; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Item; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; - -public class GT_MetaGenerated_Item_99 extends GT_MetaGenerated_Item { - - public static GT_MetaGenerated_Item_99 INSTANCE; - - /** - * Ore prefixes appear in this list in the order in which they will be assigned ID blocks. - * - *

- * In order to avoid breaking existing worlds, the entries in this list must not be re-ordered! The only safe - * modification that can be made to this list is adding new entries to the end. - */ - private static final ImmutableList CRACKED_CELL_TYPES = ImmutableList.of( - OrePrefixes.cellHydroCracked1, - OrePrefixes.cellHydroCracked2, - OrePrefixes.cellHydroCracked3, - OrePrefixes.cellSteamCracked1, - OrePrefixes.cellSteamCracked2, - OrePrefixes.cellSteamCracked3); - - private static final int NUM_CRACKED_CELL_TYPES = CRACKED_CELL_TYPES.size(); - - /** - * Assignment of metadata IDs: 0 - 999: Molten cells 10_000 - 15_999: Cracked fluid cells (# IDs used is - * NUM_CRACKED_CELL_TYPES * 1_000; update this if you add any) - */ - private final BitSet enabled = new BitSet(); - - public GT_MetaGenerated_Item_99() { - super("metaitem.99", (short) (10_000 + NUM_CRACKED_CELL_TYPES * 1_000), (short) 0); - - INSTANCE = this; - - for (Materials tMaterial : GregTech_API.sGeneratedMaterials) { - if (tMaterial == null || tMaterial.mMetaItemSubID < 0 || tMaterial.mMetaItemSubID >= 1_000) { - continue; - } - - if ((tMaterial.contains(SubTag.SMELTING_TO_FLUID)) && (!tMaterial.contains(SubTag.NO_SMELTING)) - && !tMaterial.contains(SubTag.SMELTING_TO_GEM)) { - registerMolten(tMaterial, tMaterial.mMetaItemSubID); - if (tMaterial.mSmeltInto != tMaterial && tMaterial.mSmeltInto.mMetaItemSubID >= 0 - && tMaterial.mSmeltInto.mMetaItemSubID < 1_000) { - registerMolten(tMaterial.mSmeltInto, tMaterial.mSmeltInto.mMetaItemSubID); - } - } - - if (tMaterial.canBeCracked()) { - registerCracked(tMaterial, tMaterial.mMetaItemSubID); - } - } - - // We're not going to use these BitSets, so clear them to save memory. - mEnabledItems.clear(); - mVisibleItems.clear(); - } - - private void registerMolten(Materials tMaterial, int i) { - ItemStack tStack = new ItemStack(this, 1, i); - enabled.set(i); - - GT_LanguageManager.addStringLocalization( - getUnlocalizedName(tStack) + ".name", - cellMolten.getDefaultLocalNameFormatForItem(tMaterial)); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName(tStack) + ".tooltip", - tMaterial.getToolTip(cellMolten.mMaterialAmount / M)); - - if (cellMolten.mIsUnificatable) { - GT_OreDictUnificator.set(cellMolten, tMaterial, tStack); - } else { - GT_OreDictUnificator.registerOre(cellMolten.get(tMaterial), tStack); - } - } - - private void registerCracked(Materials tMaterial, int i) { - int offset = 10_000; - for (OrePrefixes prefix : CRACKED_CELL_TYPES) { - ItemStack tStack = new ItemStack(this, 1, offset + i); - enabled.set(offset + i); - - GT_LanguageManager.addStringLocalization( - getUnlocalizedName(tStack) + ".name", - prefix.getDefaultLocalNameFormatForItem(tMaterial)); - GT_LanguageManager.addStringLocalization( - getUnlocalizedName(tStack) + ".tooltip", - tMaterial.getToolTip(prefix.mMaterialAmount / M)); - - if (prefix.mIsUnificatable) { - GT_OreDictUnificator.set(prefix, tMaterial, tStack); - } else { - GT_OreDictUnificator.registerOre(prefix.get(tMaterial), tStack); - } - - offset += 1_000; - } - } - - /** Returns null for item damage out of bounds. */ - private Materials getMaterial(int damage) { - if (damage < 0) { - return null; - } - return GregTech_API.sGeneratedMaterials[damage % 1_000]; - } - - /** Returns null for item damage out of bounds. */ - private OrePrefixes getOrePrefix(int damage) { - if (damage < 0) { - return null; - } else if (damage < 1_000) { - return cellMolten; - } else if (damage >= 10_000 && damage < 10_000 + (NUM_CRACKED_CELL_TYPES * 1_000)) { - return CRACKED_CELL_TYPES.get((damage / 1_000) - 10); - } - return null; - } - - @Override - public short[] getRGBa(ItemStack aStack) { - OrePrefixes prefix = getOrePrefix(aStack.getItemDamage()); - Materials material = getMaterial(aStack.getItemDamage()); - if (material == null) { - material = Materials._NULL; - } - - if (prefix == cellMolten) { - return material.mMoltenRGBa; - } else { - return material.mRGBa; - } - } - - @Override - public String getItemStackDisplayName(ItemStack aStack) { - String aName = super.getItemStackDisplayName(aStack); - Materials material = getMaterial(aStack.getItemDamage()); - if (material != null) { - return material.getLocalizedNameForItem(aName); - } - return aName; - } - - @Override - public ItemStack getContainerItem(ItemStack aStack) { - OrePrefixes prefix = getOrePrefix(aStack.getItemDamage()); - if (prefix != null) { - return prefix.mContainerItem; - } - return null; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { - enabled.stream() - .mapToObj(i -> new ItemStack(this, 1, i)) - .forEach(aList::add); - } - - @Override - public final IIcon getIconFromDamage(int aMetaData) { - IIconContainer iconContainer = getIconContainer(aMetaData); - if (iconContainer != null) { - return iconContainer.getIcon(); - } - return null; - } - - @Override - public IIconContainer getIconContainer(int aMetaData) { - Materials material = getMaterial(aMetaData); - OrePrefixes prefix = getOrePrefix(aMetaData); - if (material != null && prefix != null) { - return material.mIconSet.mTextures[prefix.mTextureIndex]; - } - return null; - } - - @Override - public int getItemStackLimit(ItemStack aStack) { - OrePrefixes prefix = getOrePrefix(aStack.getItemDamage()); - if (prefix != null) { - return prefix.mDefaultStackSize; - } else { - return 64; - } - } -} diff --git a/src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java b/src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java deleted file mode 100644 index f8777dcf58..0000000000 --- a/src/main/java/gregtech/common/items/GT_MetaGenerated_Tool_01.java +++ /dev/null @@ -1,746 +0,0 @@ -package gregtech.common.items; - -import static gregtech.common.items.ID_MetaTool_01.AXE; -import static gregtech.common.items.ID_MetaTool_01.BRANCHCUTTER; -import static gregtech.common.items.ID_MetaTool_01.BUTCHERYKNIFE; -import static gregtech.common.items.ID_MetaTool_01.BUZZSAW_HV; -import static gregtech.common.items.ID_MetaTool_01.BUZZSAW_LV; -import static gregtech.common.items.ID_MetaTool_01.BUZZSAW_MV; -import static gregtech.common.items.ID_MetaTool_01.CHAINSAW_HV; -import static gregtech.common.items.ID_MetaTool_01.CHAINSAW_LV; -import static gregtech.common.items.ID_MetaTool_01.CHAINSAW_MV; -import static gregtech.common.items.ID_MetaTool_01.CROWBAR; -import static gregtech.common.items.ID_MetaTool_01.DRILL_HV; -import static gregtech.common.items.ID_MetaTool_01.DRILL_LV; -import static gregtech.common.items.ID_MetaTool_01.DRILL_MV; -import static gregtech.common.items.ID_MetaTool_01.FILE; -import static gregtech.common.items.ID_MetaTool_01.HARDHAMMER; -import static gregtech.common.items.ID_MetaTool_01.HOE; -import static gregtech.common.items.ID_MetaTool_01.JACKHAMMER; -import static gregtech.common.items.ID_MetaTool_01.KNIFE; -import static gregtech.common.items.ID_MetaTool_01.MORTAR; -import static gregtech.common.items.ID_MetaTool_01.PICKAXE; -import static gregtech.common.items.ID_MetaTool_01.PLOW; -import static gregtech.common.items.ID_MetaTool_01.PLUNGER; -import static gregtech.common.items.ID_MetaTool_01.POCKET_BRANCHCUTTER; -import static gregtech.common.items.ID_MetaTool_01.POCKET_FILE; -import static gregtech.common.items.ID_MetaTool_01.POCKET_KNIFE; -import static gregtech.common.items.ID_MetaTool_01.POCKET_MULTITOOL; -import static gregtech.common.items.ID_MetaTool_01.POCKET_SAW; -import static gregtech.common.items.ID_MetaTool_01.POCKET_SCREWDRIVER; -import static gregtech.common.items.ID_MetaTool_01.POCKET_WIRECUTTER; -import static gregtech.common.items.ID_MetaTool_01.ROLLING_PIN; -import static gregtech.common.items.ID_MetaTool_01.SAW; -import static gregtech.common.items.ID_MetaTool_01.SCOOP; -import static gregtech.common.items.ID_MetaTool_01.SCREWDRIVER; -import static gregtech.common.items.ID_MetaTool_01.SCREWDRIVER_HV; -import static gregtech.common.items.ID_MetaTool_01.SCREWDRIVER_LV; -import static gregtech.common.items.ID_MetaTool_01.SCREWDRIVER_MV; -import static gregtech.common.items.ID_MetaTool_01.SENSE; -import static gregtech.common.items.ID_MetaTool_01.SHOVEL; -import static gregtech.common.items.ID_MetaTool_01.SOFTMALLET; -import static gregtech.common.items.ID_MetaTool_01.SOLDERING_IRON_HV; -import static gregtech.common.items.ID_MetaTool_01.SOLDERING_IRON_LV; -import static gregtech.common.items.ID_MetaTool_01.SOLDERING_IRON_MV; -import static gregtech.common.items.ID_MetaTool_01.SWORD; -import static gregtech.common.items.ID_MetaTool_01.TURBINE; -import static gregtech.common.items.ID_MetaTool_01.TURBINE_HUGE; -import static gregtech.common.items.ID_MetaTool_01.TURBINE_LARGE; -import static gregtech.common.items.ID_MetaTool_01.TURBINE_SMALL; -import static gregtech.common.items.ID_MetaTool_01.UNIVERSALSPADE; -import static gregtech.common.items.ID_MetaTool_01.WIRECUTTER; -import static gregtech.common.items.ID_MetaTool_01.WRENCH; -import static gregtech.common.items.ID_MetaTool_01.WRENCH_HV; -import static gregtech.common.items.ID_MetaTool_01.WRENCH_LV; -import static gregtech.common.items.ID_MetaTool_01.WRENCH_MV; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.enums.ToolDictNames; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.common.tools.GT_Tool_Axe; -import gregtech.common.tools.GT_Tool_BranchCutter; -import gregtech.common.tools.GT_Tool_ButcheryKnife; -import gregtech.common.tools.GT_Tool_BuzzSaw; -import gregtech.common.tools.GT_Tool_Chainsaw_HV; -import gregtech.common.tools.GT_Tool_Chainsaw_LV; -import gregtech.common.tools.GT_Tool_Chainsaw_MV; -import gregtech.common.tools.GT_Tool_Crowbar; -import gregtech.common.tools.GT_Tool_Drill_HV; -import gregtech.common.tools.GT_Tool_Drill_LV; -import gregtech.common.tools.GT_Tool_Drill_MV; -import gregtech.common.tools.GT_Tool_File; -import gregtech.common.tools.GT_Tool_HardHammer; -import gregtech.common.tools.GT_Tool_Hoe; -import gregtech.common.tools.GT_Tool_JackHammer; -import gregtech.common.tools.GT_Tool_Knife; -import gregtech.common.tools.GT_Tool_Mortar; -import gregtech.common.tools.GT_Tool_Pickaxe; -import gregtech.common.tools.GT_Tool_Plow; -import gregtech.common.tools.GT_Tool_Plunger; -import gregtech.common.tools.GT_Tool_RollingPin; -import gregtech.common.tools.GT_Tool_Saw; -import gregtech.common.tools.GT_Tool_Scoop; -import gregtech.common.tools.GT_Tool_Screwdriver; -import gregtech.common.tools.GT_Tool_Screwdriver_LV; -import gregtech.common.tools.GT_Tool_Sense; -import gregtech.common.tools.GT_Tool_Shovel; -import gregtech.common.tools.GT_Tool_SoftHammer; -import gregtech.common.tools.GT_Tool_Soldering_Iron; -import gregtech.common.tools.GT_Tool_Sword; -import gregtech.common.tools.GT_Tool_Turbine_Huge; -import gregtech.common.tools.GT_Tool_Turbine_Large; -import gregtech.common.tools.GT_Tool_Turbine_Normal; -import gregtech.common.tools.GT_Tool_Turbine_Small; -import gregtech.common.tools.GT_Tool_UniversalSpade; -import gregtech.common.tools.GT_Tool_WireCutter; -import gregtech.common.tools.GT_Tool_Wrench; -import gregtech.common.tools.GT_Tool_Wrench_HV; -import gregtech.common.tools.GT_Tool_Wrench_LV; -import gregtech.common.tools.GT_Tool_Wrench_MV; -import gregtech.common.tools.pocket.GT_Tool_Pocket_BranchCutter; -import gregtech.common.tools.pocket.GT_Tool_Pocket_File; -import gregtech.common.tools.pocket.GT_Tool_Pocket_Knife; -import gregtech.common.tools.pocket.GT_Tool_Pocket_Multitool; -import gregtech.common.tools.pocket.GT_Tool_Pocket_Saw; -import gregtech.common.tools.pocket.GT_Tool_Pocket_Screwdriver; -import gregtech.common.tools.pocket.GT_Tool_Pocket_WireCutter; - -public class GT_MetaGenerated_Tool_01 extends GT_MetaGenerated_Tool { - - public static GT_MetaGenerated_Tool_01 INSTANCE; - - public GT_MetaGenerated_Tool_01() { - super("metatool.01"); - INSTANCE = this; - addTool( - SWORD.ID, - "Sword", - "", - new GT_Tool_Sword(), - ToolDictNames.craftingToolSword, - ToolDictNames.craftingToolBlade, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 4L)); - addTool( - PICKAXE.ID, - "Pickaxe", - "", - new GT_Tool_Pickaxe(), - ToolDictNames.craftingToolPickaxe, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - SHOVEL.ID, - "Shovel", - "", - new GT_Tool_Shovel(), - ToolDictNames.craftingToolShovel, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - AXE.ID, - "Axe", - "", - new GT_Tool_Axe(), - ToolDictNames.craftingToolAxe, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L)); - addTool( - HOE.ID, - "Hoe", - "", - new GT_Tool_Hoe(), - ToolDictNames.craftingToolHoe, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 4L)); - addTool( - SAW.ID, - "Saw", - "Can also harvest Ice", - new GT_Tool_Saw(), - ToolDictNames.craftingToolSaw, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L)); - GregTech_API.registerTool( - addTool( - HARDHAMMER.ID, - "Hammer", - "Crushes Ores instead of harvesting them", - new GT_Tool_HardHammer(), - ToolDictNames.craftingToolHardHammer, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sHardHammerList); - GregTech_API.registerTool( - addTool( - SOFTMALLET.ID, - "Soft Mallet", - "", - new GT_Tool_SoftHammer(), - ToolDictNames.craftingToolSoftHammer, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LIMUS, 4L)), - GregTech_API.sSoftHammerList); - GregTech_API.registerTool( - addTool( - WRENCH.ID, - "Wrench", - "Hold Leftclick to dismantle Machines", - new GT_Tool_Wrench(), - ToolDictNames.craftingToolWrench, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sWrenchList); - addTool( - FILE.ID, - "File", - "", - new GT_Tool_File(), - ToolDictNames.craftingToolFile, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)); - GregTech_API.registerTool( - addTool( - CROWBAR.ID, - "Crowbar", - "Dismounts Covers and Rotates Rails", - new GT_Tool_Crowbar(), - ToolDictNames.craftingToolCrowbar, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 2L)), - GregTech_API.sCrowbarList); - GregTech_API.registerTool( - addTool( - SCREWDRIVER.ID, - "Screwdriver", - "Adjusts Covers and Machines", - new GT_Tool_Screwdriver(), - ToolDictNames.craftingToolScrewdriver, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sScrewdriverList); - addTool( - MORTAR.ID, - "Mortar", - "", - new GT_Tool_Mortar(), - ToolDictNames.craftingToolMortar, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L)); - GregTech_API.registerTool( - addTool( - WIRECUTTER.ID, - "Wire Cutter", - "", - new GT_Tool_WireCutter(), - ToolDictNames.craftingToolWireCutter, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sWireCutterList); - addTool( - SCOOP.ID, - "Scoop", - "", - new GT_Tool_Scoop(), - ToolDictNames.craftingToolScoop, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.BESTIA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PANNUS, 2L)); - addTool( - BRANCHCUTTER.ID, - "Branch Cutter", - "", - new GT_Tool_BranchCutter(), - ToolDictNames.craftingToolBranchCutter, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L)); - GregTech_API.registerTool( - addTool( - UNIVERSALSPADE.ID, - "Universal Spade", - "", - new GT_Tool_UniversalSpade(), - ToolDictNames.craftingToolBlade, - ToolDictNames.craftingToolShovel, - ToolDictNames.craftingToolCrowbar, - ToolDictNames.craftingToolSaw, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1L)), - GregTech_API.sCrowbarList); - addTool( - KNIFE.ID, - "Knife", - "", - new GT_Tool_Knife(), - ToolDictNames.craftingToolBlade, - ToolDictNames.craftingToolKnife, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TELUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 2L)); - addTool( - BUTCHERYKNIFE.ID, - "Butchery Knife", - "Has a slow Attack Rate", - new GT_Tool_ButcheryKnife(), - ToolDictNames.craftingToolBlade, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 4L)); - - addTool( - SENSE.ID, - "Sense", - "Because a Scythe doesn't make Sense", - new GT_Tool_Sense(), - ToolDictNames.craftingToolBlade, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MORTUUS, 2L)); - addTool( - PLOW.ID, - "Plow", - "Used to get rid of Snow", - new GT_Tool_Plow(), - ToolDictNames.craftingToolPlow, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 2L)); - addTool( - PLUNGER.ID, - "Plunger", - "", - new GT_Tool_Plunger(), - ToolDictNames.craftingToolPlunger, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 2L)); - addTool( - ROLLING_PIN.ID, - "Rolling Pin", - "", - new GT_Tool_RollingPin(), - ToolDictNames.craftingToolRollingPin, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LIMUS, 4L)); - - addTool( - DRILL_LV.ID, - "Drill (LV)", - "", - new GT_Tool_Drill_LV(), - ToolDictNames.craftingToolMiningDrill, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - DRILL_MV.ID, - "Drill (MV)", - "", - new GT_Tool_Drill_MV(), - ToolDictNames.craftingToolMiningDrill, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - DRILL_HV.ID, - "Drill (HV)", - "", - new GT_Tool_Drill_HV(), - ToolDictNames.craftingToolMiningDrill, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 4L)); - addTool( - CHAINSAW_LV.ID, - "Chainsaw (LV)", - "Can also harvest Ice", - new GT_Tool_Chainsaw_LV(), - ToolDictNames.craftingToolSaw, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L)); - addTool( - CHAINSAW_MV.ID, - "Chainsaw (MV)", - "Can also harvest Ice", - new GT_Tool_Chainsaw_MV(), - ToolDictNames.craftingToolSaw, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L)); - addTool( - CHAINSAW_HV.ID, - "Chainsaw (HV)", - "Can also harvest Ice", - new GT_Tool_Chainsaw_HV(), - ToolDictNames.craftingToolSaw, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.METO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L)); - GregTech_API.registerTool( - addTool( - WRENCH_LV.ID, - "Wrench (LV)", - "Hold Left Button to dismantle Machines", - new GT_Tool_Wrench_LV(), - ToolDictNames.craftingToolWrench, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sWrenchList); - GregTech_API.registerTool( - addTool( - WRENCH_MV.ID, - "Wrench (MV)", - "Hold Left Button to dismantle Machines", - new GT_Tool_Wrench_MV(), - ToolDictNames.craftingToolWrench, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sWrenchList); - GregTech_API.registerTool( - addTool( - WRENCH_HV.ID, - "Wrench (HV)", - "Hold Left Button to dismantle Machines", - new GT_Tool_Wrench_HV(), - ToolDictNames.craftingToolWrench, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sWrenchList); - GregTech_API.registerTool( - addTool( - JACKHAMMER.ID, - "JackHammer (HV)", - "Breaks Rocks into pieces", - new GT_Tool_JackHammer(), - ToolDictNames.craftingToolJackHammer, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2L)), - GregTech_API.sJackhammerList); - addTool( - BUZZSAW_LV.ID, - "Buzzsaw (LV)", - "Not suitable for harvesting Blocks", - new GT_Tool_BuzzSaw(), - ToolDictNames.craftingToolSaw, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L)); - addTool( - BUZZSAW_MV.ID, - "Buzzsaw (MV)", - "Not suitable for harvesting Blocks", - new GT_Tool_BuzzSaw(), - ToolDictNames.craftingToolSaw, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L)); - addTool( - BUZZSAW_HV.ID, - "Buzzsaw (HV)", - "Not suitable for harvesting Blocks", - new GT_Tool_BuzzSaw(), - ToolDictNames.craftingToolSaw, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2L)); - GregTech_API.registerTool( - addTool( - SCREWDRIVER_LV.ID, - "Screwdriver (LV)", - "Adjusts Covers and Machines", - new GT_Tool_Screwdriver_LV(), - ToolDictNames.craftingToolScrewdriver, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sScrewdriverList); - GregTech_API.registerTool( - addTool( - SCREWDRIVER_MV.ID, - "Screwdriver (MV)", - "Adjusts Covers and Machines", - new GT_Tool_Screwdriver_LV(), - ToolDictNames.craftingToolScrewdriver, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sScrewdriverList); - GregTech_API.registerTool( - addTool( - SCREWDRIVER_HV.ID, - "Screwdriver (HV)", - "Adjusts Covers and Machines", - new GT_Tool_Screwdriver_LV(), - ToolDictNames.craftingToolScrewdriver, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sScrewdriverList); - GregTech_API.registerTool( - addTool( - SOLDERING_IRON_LV.ID, - "Soldering Iron (LV)", - "Fixes burned out Circuits. Needs soldering materials in inventory.", - new GT_Tool_Soldering_Iron(), - ToolDictNames.craftingToolSolderingIron, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sSolderingToolList); - GregTech_API.registerTool( - addTool( - SOLDERING_IRON_MV.ID, - "Soldering Iron (MV)", - "Fixes burned out Circuits. Needs soldering materials in inventory.", - new GT_Tool_Soldering_Iron(), - ToolDictNames.craftingToolSolderingIron, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sSolderingToolList); - GregTech_API.registerTool( - addTool( - SOLDERING_IRON_HV.ID, - "Soldering Iron (HV)", - "Fixes burned out Circuits. Needs soldering materials in inventory.", - new GT_Tool_Soldering_Iron(), - ToolDictNames.craftingToolSolderingIron, - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)), - GregTech_API.sSolderingToolList); - - addTool( - TURBINE_SMALL.ID, - "Small Turbine", - "Turbine Rotors for your power station", - new GT_Tool_Turbine_Small()); - addTool(TURBINE.ID, "Turbine", "Turbine Rotors for your power station", new GT_Tool_Turbine_Normal()); - addTool( - TURBINE_LARGE.ID, - "Large Turbine", - "Turbine Rotors for your power station", - new GT_Tool_Turbine_Large()); - addTool(TURBINE_HUGE.ID, "Huge Turbine", "Turbine Rotors for your power station", new GT_Tool_Turbine_Huge()); - - addTool( - POCKET_MULTITOOL.ID, - "Pocket Multitool", - "6 useful Tools in one!", - new GT_Tool_Pocket_Multitool(POCKET_KNIFE.ID), - null, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 6), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 3), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3)); - addTool( - POCKET_KNIFE.ID, - "Pocket Multitool (Knife)", - "", - new GT_Tool_Pocket_Knife(POCKET_SAW.ID), - ToolDictNames.craftingToolKnife, - ToolDictNames.craftingToolBlade, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 6), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 3), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3)); - addTool( - POCKET_SAW.ID, - "Pocket Multitool (Saw)", - "Can also harvest Ice", - new GT_Tool_Pocket_Saw(POCKET_FILE.ID), - ToolDictNames.craftingToolSaw, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 6), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 3), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3)); - addTool( - POCKET_FILE.ID, - "Pocket Multitool (File)", - "", - new GT_Tool_Pocket_File(POCKET_SCREWDRIVER.ID), - ToolDictNames.craftingToolFile, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 6), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 3), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3)); - GregTech_API.registerTool( - addTool( - POCKET_SCREWDRIVER.ID, - "Pocket Multitool (Screwdriver)", - "Adjusts Covers and Machines", - new GT_Tool_Pocket_Screwdriver(POCKET_WIRECUTTER.ID), - ToolDictNames.craftingToolScrewdriver, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 6), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 3), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3)), - GregTech_API.sScrewdriverList); - GregTech_API.registerTool( - addTool( - POCKET_WIRECUTTER.ID, - "Pocket Multitool (Wire Cutter)", - "", - new GT_Tool_Pocket_WireCutter(POCKET_BRANCHCUTTER.ID), - ToolDictNames.craftingToolWireCutter, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 6), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 3), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3)), - GregTech_API.sWireCutterList); - addTool( - POCKET_BRANCHCUTTER.ID, - "Pocket Multitool (Branch Cutter)", - "", - new GT_Tool_Pocket_BranchCutter(POCKET_MULTITOOL.ID), - ToolDictNames.craftingToolBranchCutter, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 6), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 3), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3)); - initCraftingShapedRecipes(); - initCraftingShapelessRecipes(); - } - - private void initCraftingShapelessRecipes() { - GT_ModHandler.addShapelessCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Items.coal, 1) }); - GT_ModHandler.addShapelessCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Blocks.clay, 1) }); - GT_ModHandler.addShapelessCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Items.wheat, 1) }); - GT_ModHandler.addShapelessCraftingRecipe( - new ItemStack(Items.flint, 1), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Blocks.gravel, 1) }); - GT_ModHandler.addShapelessCraftingRecipe( - new ItemStack(Items.blaze_powder, 2), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Items.blaze_rod, 1) }); - } - - private void initCraftingShapedRecipes() { - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.Flint, Materials.Stone, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " I ", "SIS", "SSS", 'I', new ItemStack(Items.flint, 1), 'S', OrePrefixes.stone }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.Bronze, Materials.Stone, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.Bronze), 'S', OrePrefixes.stone }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.Iron, Materials.Stone, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.Iron), 'S', OrePrefixes.stone }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.Steel, Materials.Stone, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.Steel), 'S', OrePrefixes.stone }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.WroughtIron, Materials.Stone, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.WroughtIron), 'S', - OrePrefixes.stone }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.RedSteel, Materials.Stone, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.RedSteel), 'S', - OrePrefixes.stone }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.BlueSteel, Materials.Stone, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.BlueSteel), 'S', - OrePrefixes.stone }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.BlackSteel, Materials.Stone, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.BlackSteel), 'S', - OrePrefixes.stone }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.DamascusSteel, Materials.Stone, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.DamascusSteel), 'S', - OrePrefixes.stone }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.Thaumium, Materials.Stone, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.Thaumium), 'S', - OrePrefixes.stone }); - - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(ROLLING_PIN.ID, 1, Materials.Wood, Materials.Wood, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " S", " I ", "S f", 'I', OrePrefixes.plank.get(Materials.Wood), 'S', - OrePrefixes.stick.get(Materials.Wood) }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(ROLLING_PIN.ID, 1, Materials.Plastic, Materials.Plastic, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " S", " I ", "S f", 'I', OrePrefixes.ingot.get(Materials.Plastic), 'S', - OrePrefixes.stick.get(Materials.Plastic) }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(ROLLING_PIN.ID, 1, Materials.Aluminium, Materials.Aluminium, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " S", " I ", "S f", 'I', OrePrefixes.ingot.get(Materials.Aluminium), 'S', - OrePrefixes.stick.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(ROLLING_PIN.ID, 1, Materials.StainlessSteel, Materials.StainlessSteel, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " S", " I ", "S f", 'I', OrePrefixes.ingot.get(Materials.StainlessSteel), 'S', - OrePrefixes.stick.get(Materials.StainlessSteel) }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(ROLLING_PIN.ID, 1, Materials.IronWood, Materials.IronWood, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { " S", " I ", "S f", 'I', OrePrefixes.ingot.get(Materials.IronWood), 'S', - OrePrefixes.stick.get(Materials.IronWood) }); - - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(SWORD.ID, 1, Materials.Flint, Materials.Wood, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "F", "F", "S", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', - new ItemStack(Items.flint, 1) }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(PICKAXE.ID, 1, Materials.Flint, Materials.Wood, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "FFF", " S ", " S ", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', - new ItemStack(Items.flint, 1) }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(SHOVEL.ID, 1, Materials.Flint, Materials.Wood, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "F", "S", "S", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', - new ItemStack(Items.flint, 1) }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(AXE.ID, 1, Materials.Flint, Materials.Wood, null), - GT_ModHandler.RecipeBits.MIRRORED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "FF", "FS", " S", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', - new ItemStack(Items.flint, 1) }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(HOE.ID, 1, Materials.Flint, Materials.Wood, null), - GT_ModHandler.RecipeBits.MIRRORED | GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "FF", " S", " S", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', - new ItemStack(Items.flint, 1) }); - GT_ModHandler.addCraftingRecipe( - INSTANCE.getToolWithStats(KNIFE.ID, 1, Materials.Flint, Materials.Wood, null), - GT_ModHandler.RecipeBits.NOT_REMOVABLE, - new Object[] { "F", "S", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', new ItemStack(Items.flint, 1) }); - } -} diff --git a/src/main/java/gregtech/common/items/GT_NeutronReflector_Item.java b/src/main/java/gregtech/common/items/GT_NeutronReflector_Item.java deleted file mode 100644 index b2fd104917..0000000000 --- a/src/main/java/gregtech/common/items/GT_NeutronReflector_Item.java +++ /dev/null @@ -1,54 +0,0 @@ -package gregtech.common.items; - -import net.minecraft.item.ItemStack; - -import gregtech.api.items.GT_Generic_Item; -import ic2.api.reactor.IReactor; -import ic2.api.reactor.IReactorComponent; - -public class GT_NeutronReflector_Item extends GT_Generic_Item implements IReactorComponent { - - public GT_NeutronReflector_Item(String aUnlocalized, String aEnglish, int aMaxDamage) { - super(aUnlocalized, aEnglish, "Undestructable"); - this.setMaxStackSize(64); - this.setMaxDamage(aMaxDamage); - } - - @Override - public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, - int pulseX, int pulseY, boolean heatrun) { - if (!heatrun) { - ((IReactorComponent) pulsingStack.getItem()) - .acceptUraniumPulse(reactor, pulsingStack, yourStack, pulseX, pulseY, youX, youY, heatrun); - } - return true; - } - - @Override - public boolean canStoreHeat(IReactor aReactor, ItemStack aStack, int x, int y) { - return false; - } - - @Override - public int getMaxHeat(IReactor aReactor, ItemStack aStack, int x, int y) { - return 0; - } - - @Override - public int getCurrentHeat(IReactor aReactor, ItemStack aStack, int x, int y) { - return 0; - } - - @Override - public float influenceExplosion(IReactor aReactor, ItemStack aStack) { - return -1.0F; - } - - @Override - public int alterHeat(IReactor aReactor, ItemStack aStack, int x, int y, int aHeat) { - return aHeat; - } - - @Override - public void processChamber(IReactor aReactor, ItemStack aStack, int x, int y, boolean aHeatRun) {} -} diff --git a/src/main/java/gregtech/common/items/GT_SensorCard_Item.java b/src/main/java/gregtech/common/items/GT_SensorCard_Item.java deleted file mode 100644 index 67e5b24a70..0000000000 --- a/src/main/java/gregtech/common/items/GT_SensorCard_Item.java +++ /dev/null @@ -1,111 +0,0 @@ -package gregtech.common.items; - -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.UUID; - -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.tileentity.TileEntity; -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; -import gregtech.api.items.GT_Generic_Item; -import gregtech.api.util.GT_LanguageManager; -import shedar.mods.ic2.nuclearcontrol.api.CardState; -import shedar.mods.ic2.nuclearcontrol.api.ICardWrapper; -import shedar.mods.ic2.nuclearcontrol.api.IPanelDataSource; -import shedar.mods.ic2.nuclearcontrol.api.IRemoteSensor; -import shedar.mods.ic2.nuclearcontrol.api.PanelSetting; -import shedar.mods.ic2.nuclearcontrol.api.PanelString; - -public class GT_SensorCard_Item extends GT_Generic_Item implements IRemoteSensor, IPanelDataSource { - - private static final UUID CARD_TYPE = new UUID(0L, 41L); - - private int strCount; - - public GT_SensorCard_Item(String aUnlocalized, String aEnglish) { - super(aUnlocalized, aEnglish, "Insert into Display Panel"); - setMaxStackSize(1); - } - - @Override - public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { - super.addAdditionalToolTips(aList, aStack, aPlayer); - if (aStack != null) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - aList.add(transItem("014", "Missing Coordinates!")); - } else { - aList.add(transItem("015", "Device at:")); - aList.add( - String.format( - "x: %d, y: %d, z: %d", - tNBT.getInteger("x"), - tNBT.getInteger("y"), - tNBT.getInteger("z"))); - } - } - } - - @Override - public CardState update(TileEntity aPanel, ICardWrapper aCard, int aMaxRange) { - return update(aPanel.getWorldObj(), aCard, aMaxRange); - } - - @Override - public CardState update(World world, ICardWrapper aCard, int aMaxRange) { - ChunkCoordinates target = aCard.getTarget(); - - TileEntity tTileEntity = world.getTileEntity(target.posX, target.posY, target.posZ); - if (((tTileEntity instanceof IGregTechDeviceInformation)) - && (((IGregTechDeviceInformation) tTileEntity).isGivingInformation())) { - String[] tInfoData = ((IGregTechDeviceInformation) tTileEntity).getInfoData(); - for (int i = 0; i < tInfoData.length; i++) { - aCard.setString("mString" + i, tInfoData[i]); - } - aCard.setInt("mString", strCount = tInfoData.length); - return CardState.OK; - } - return CardState.NO_TARGET; - } - - @Override - public List getStringData(int aSettings, ICardWrapper aCard, boolean aLabels) { - List rList = new LinkedList<>(); - for (int i = 0; i < (strCount = aCard.getInt("mString")); i++) { - if ((aSettings & 1 << i) != 0) { - PanelString line = new PanelString(); - line.textLeft = GT_LanguageManager.getTranslation(aCard.getString("mString" + i), "\\\\"); - rList.add(line); - } - } - return rList; - } - - @Override - public List getSettingsList() { - List rList = new ArrayList<>(); - for (int i = 0; i < strCount; i++) { - rList.add(new PanelSetting(String.valueOf((i + 1)), 1 << i, getCardType())); - } - return rList; - } - - @Override - public UUID getCardType() { - return CARD_TYPE; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aOutputSubItems) {} -} diff --git a/src/main/java/gregtech/common/items/GT_TierDrone.java b/src/main/java/gregtech/common/items/GT_TierDrone.java deleted file mode 100644 index 58da852d0e..0000000000 --- a/src/main/java/gregtech/common/items/GT_TierDrone.java +++ /dev/null @@ -1,18 +0,0 @@ -package gregtech.common.items; - -import gregtech.api.items.GT_Generic_Item; - -public class GT_TierDrone extends GT_Generic_Item { - - private final int level; - - public GT_TierDrone(String aUnlocalized, String aEnglish, String aEnglishTooltip, int level) { - super(aUnlocalized, aEnglish, aEnglishTooltip); - this.level = level; - this.setMaxStackSize(64); - } - - public int getLevel() { - return level; - } -} diff --git a/src/main/java/gregtech/common/items/GT_VolumetricFlask.java b/src/main/java/gregtech/common/items/GT_VolumetricFlask.java deleted file mode 100644 index 5578214e65..0000000000 --- a/src/main/java/gregtech/common/items/GT_VolumetricFlask.java +++ /dev/null @@ -1,360 +0,0 @@ -package gregtech.common.items; - -import static gregtech.api.enums.Mods.GregTech; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static ic2.core.util.LiquidUtil.drainContainerStack; -import static ic2.core.util.LiquidUtil.fillContainerStack; -import static ic2.core.util.LiquidUtil.placeFluid; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.MovingObjectPosition.MovingObjectType; -import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidBlock; -import net.minecraftforge.fluids.IFluidContainerItem; -import net.minecraftforge.fluids.IFluidHandler; - -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.IItemWithModularUI; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.VanillaButtonWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.items.GT_Generic_Item; -import gregtech.api.util.GT_Utility; -import ic2.core.util.LiquidUtil; - -public class GT_VolumetricFlask extends GT_Generic_Item implements IFluidContainerItem, IItemWithModularUI { - - private final int maxCapacity; - private final String unlocalFlaskName; - - @SideOnly(Side.CLIENT) - public IIcon iconWindow; - - public GT_VolumetricFlask(String unlocalized, String english, int maxCapacity) { - super(unlocalized, english, null); - this.maxCapacity = maxCapacity; - unlocalFlaskName = unlocalized; - setMaxStackSize(64); - setNoRepair(); - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - if (!world.isRemote && isEmpty(stack) && getMovingObjectPositionFromPlayer(world, player, true) == null) - GT_UIInfos.openPlayerHeldItemUI(player); - return super.onItemRightClick(stack, world, player); - } - - @Override - public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int ordinalSide, - float xOffset, float yOffset, float zOffset) { - if (player instanceof FakePlayer) { - return false; - } - if (world.isRemote) return false; - if (interactWithTank(stack, player, world, x, y, z, ordinalSide)) { - return true; - } - MovingObjectPosition mop = getMovingObjectPositionFromPlayer(world, player, true); - if (mop == null) { - return false; - } - if (mop.typeOfHit == MovingObjectType.BLOCK) { - x = mop.blockX; - y = mop.blockY; - z = mop.blockZ; - if (!world.canMineBlock(player, x, y, z) || !player.canPlayerEdit(x, y, z, mop.sideHit, stack)) { - return false; - } - if (collectFluidBlock(stack, player, world, x, y, z)) { - return true; - } - ForgeDirection dir = ForgeDirection.VALID_DIRECTIONS[mop.sideHit]; - FluidStack fluidStack = drainContainerStack(stack, player, 1000, true); - if (placeFluid(fluidStack, world, x, y, z) - || (player.canPlayerEdit(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, mop.sideHit, stack) - && placeFluid(fluidStack, world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ))) { - if (!player.capabilities.isCreativeMode) drainContainerStack(stack, player, 1000, false); - return true; - } - } - return false; - } - - public boolean isEmpty(ItemStack stack) { - return getFluid(stack) == null; - } - - public int getFreeSpace(ItemStack stack) { - int capacity = getCapacity(stack); - if (capacity > 0) { - FluidStack fluidStack = getFluid(stack); - return fluidStack == null ? capacity : capacity - fluidStack.amount; - } - return 0; - } - - public int getMaxCapacity() { - return this.maxCapacity; - } - - @Override - public int getCapacity(ItemStack stack) { - int capacity = 1000; - if (stack.hasTagCompound()) { - NBTTagCompound nbt = stack.getTagCompound(); - if (nbt.hasKey("Capacity", 3)) capacity = nbt.getInteger("Capacity"); - } - return Math.min(getMaxCapacity(), capacity); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aIconRegister) { - super.registerIcons(aIconRegister); - iconWindow = aIconRegister.registerIcon(GregTech.getResourcePath("gt." + unlocalFlaskName + ".window")); - } - - public void setCapacity(ItemStack stack, int capacity) { - capacity = Math.min(capacity, getMaxCapacity()); - NBTTagCompound nbt = stack.getTagCompound(); - if (nbt == null) { - stack.setTagCompound(nbt = new NBTTagCompound()); - } - nbt.setInteger("Capacity", capacity); - } - - @Override - public FluidStack getFluid(ItemStack stack) { - if (stack.hasTagCompound()) { - NBTTagCompound nbt = stack.getTagCompound(); - if (nbt.hasKey("Fluid", 10)) return FluidStack.loadFluidStackFromNBT(nbt.getCompoundTag("Fluid")); - } - return null; - } - - public 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())); - } - } - - @Override - public int fill(ItemStack stack, FluidStack resource, boolean doFill) { - if (stack.stackSize != 1) return 0; - if ((resource == null) || (resource.amount <= 0)) { - return 0; - } - FluidStack fluidStack = getFluid(stack); - if (fluidStack == null) { - fluidStack = new FluidStack(resource, 0); - } else if (!fluidStack.isFluidEqual(resource)) { - return 0; - } - int amount = Math.min(getCapacity(stack) - fluidStack.amount, resource.amount); - if ((doFill) && (amount > 0)) { - fluidStack.amount += amount; - setFluid(stack, fluidStack); - } - return amount; - } - - @Override - public FluidStack drain(ItemStack stack, int maxDrain, boolean doDrain) { - if (stack.stackSize != 1) return null; - FluidStack fluidStack = getFluid(stack); - if (fluidStack == null) return null; - maxDrain = Math.min(fluidStack.amount, maxDrain); - if (doDrain) { - fluidStack.amount -= maxDrain; - setFluid(stack, fluidStack); - } - return new FluidStack(fluidStack, maxDrain); - } - - @Override - protected void addAdditionalToolTips(List info, ItemStack stack, EntityPlayer aPlayer) { - FluidStack fs = getFluid(stack); - if (fs != null) { - info.add(String.format("< %s, %s mB >", GT_Utility.getFluidName(fs, true), formatNumbers(fs.amount))); - } else { - info.add(String.format("< Empty, %s mB >", formatNumbers(getCapacity(stack)))); - } - info.add("Rightclick on air to set volume (only while empty)"); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs creativeTabs, List itemList) { - itemList.add(new ItemStack(this)); - for (Fluid fluid : FluidRegistry.getRegisteredFluids() - .values()) { - if (fluid != null) { - ItemStack stack = new ItemStack(this); - setCapacity(stack, getMaxCapacity()); - fill(stack, new FluidStack(fluid, Integer.MAX_VALUE), true); - itemList.add(stack); - } - } - } - - private boolean interactWithTank(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, - int ordinalSide) { - if (world.isRemote) { - return false; - } - TileEntity te = world.getTileEntity(x, y, z); - if (!(te instanceof IFluidHandler handler)) { - return false; - } - ForgeDirection dir = ForgeDirection.getOrientation(ordinalSide); - FluidStack fs = this.getFluid(stack); - int capacity = getCapacity(stack); - if (fs != null && (!player.isSneaking() || fs.amount >= capacity)) { - int amount = handler.fill(dir, fs, false); - if (amount > 0) { - fs = LiquidUtil.drainContainerStack(stack, player, amount, false); - if (fs != null && fs.amount > 0) { - handler.fill(dir, fs, true); - } - } - } else { - int amount = fs == null ? capacity : capacity - fs.amount; - FluidStack input = handler.drain(dir, amount, false); - if (input != null && input.amount > 0) { - amount = LiquidUtil.fillContainerStack(stack, player, input, false); - if (amount > 0) { - handler.drain(dir, amount, true); - } - } - } - return true; - } - - private boolean collectFluidBlock(ItemStack stack, EntityPlayer player, World world, int x, int y, int z) { - Block block = world.getBlock(x, y, z); - if (block instanceof IFluidBlock liquid) { - if (liquid.canDrain(world, x, y, z)) { - FluidStack fluid = liquid.drain(world, x, y, z, false); - int amount = fillContainerStack(stack, player, fluid, true); - if (amount == fluid.amount) { - fillContainerStack(stack, player, fluid, false); - liquid.drain(world, x, y, z, true); - return true; - } - } - } else if (world.getBlockMetadata(x, y, z) == 0) { - FluidStack fluid = null; - if (block != Blocks.water && block != Blocks.flowing_water) { - if (block == Blocks.lava || block == Blocks.flowing_lava) { - fluid = new FluidStack(FluidRegistry.LAVA, 1000); - } - } else { - fluid = new FluidStack(FluidRegistry.WATER, 1000); - } - - if (fluid != null) { - int amount = fillContainerStack(stack, player, fluid, true); - if (amount == fluid.amount) { - fillContainerStack(stack, player, fluid, false); - world.setBlockToAir(x, y, z); - return true; - } - } - } - return false; - } - - @Override - public ModularWindow createWindow(UIBuildContext buildContext, ItemStack stack) { - if (!(stack.getItem() instanceof GT_VolumetricFlask)) return null; - return new VolumetricFlaskUIFactory(buildContext, stack).createWindow(); - } - - private class VolumetricFlaskUIFactory { - - private final UIBuildContext buildContext; - private int capacity; - private final int maxCapacity; - - public VolumetricFlaskUIFactory(UIBuildContext buildContext, ItemStack flask) { - this.buildContext = buildContext; - GT_VolumetricFlask flaskItem = (GT_VolumetricFlask) flask.getItem(); - this.capacity = flaskItem.getCapacity(flask); - this.maxCapacity = flaskItem.getMaxCapacity(); - } - - public ModularWindow createWindow() { - ModularWindow.Builder builder = ModularWindow.builder(150, 54); - builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); - - NumericWidget capacityWidget = new NumericWidget(); - builder.widget( - capacityWidget.setGetter(() -> capacity) - .setSetter(value -> setCapacity(getCurrentItem(), capacity = (int) value)) - .setBounds(1, maxCapacity) - .setScrollValues(1, 144, 1000) - .setDefaultValue(capacity) - .setTextColor(Color.WHITE.dark(1)) - .setTextAlignment(Alignment.CenterLeft) - .setFocusOnGuiOpen(true) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) - .setPos(8, 8) - .setSize(77, 12)) - .widget(new TextWidget("Capacity").setPos(88, 10)) - .widget( - new VanillaButtonWidget().setDisplayString("Confirm") - .setOnClick((clickData, widget) -> { - capacityWidget.onRemoveFocus(); - widget.getWindow() - .tryClose(); - }) - .setSynced(false, false) - .setPos(8, 26) - .setSize(48, 20)); - - return builder.build(); - } - - private ItemStack getCurrentItem() { - return buildContext.getPlayer().inventory.getCurrentItem(); - } - } -} diff --git a/src/main/java/gregtech/common/items/GT_WirelessHeadphones.java b/src/main/java/gregtech/common/items/GT_WirelessHeadphones.java deleted file mode 100644 index 98a6eddb2c..0000000000 --- a/src/main/java/gregtech/common/items/GT_WirelessHeadphones.java +++ /dev/null @@ -1,118 +0,0 @@ -package gregtech.common.items; - -import java.util.List; -import java.util.UUID; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; - -import baubles.api.BaubleType; -import baubles.api.IBauble; -import gregtech.api.enums.ItemList; -import gregtech.api.items.GT_Generic_Item; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_BetterJukebox; - -public class GT_WirelessHeadphones extends GT_Generic_Item implements IBauble { - - public static final String NBTKEY_JUKEBOX_COORDINATES = "jukeboxCoords"; - - public GT_WirelessHeadphones() { - super("WirelessHeadphones", "Wireless Headphones", null); - setMaxStackSize(1); - - ItemList.WirelessHeadphones.set(this); - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - if (aStack == null) { - return; - } - final NBTTagCompound tag = aStack.getTagCompound(); - if (tag == null || !tag.hasKey(NBTKEY_JUKEBOX_COORDINATES, Constants.NBT.TAG_STRING)) { - aList.add(StatCollector.translateToLocal("GT5U.machines.betterjukebox.headphonesunbound")); - } else { - aList.add(StatCollector.translateToLocal("GT5U.machines.betterjukebox.headphonesbound")); - aList.add(tag.getString(NBTKEY_JUKEBOX_COORDINATES)); - } - } - - @Override - public boolean doesSneakBypassUse(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer) { - return false; - } - - @Override - public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, - float hitX, float hitY, float hitZ) { - final TileEntity pointedTe = world.getTileEntity(x, y, z); - if (!(pointedTe instanceof BaseMetaTileEntity mte)) { - return false; - } - if (!(mte.getMetaTileEntity() instanceof GT_MetaTileEntity_BetterJukebox jukebox)) { - return false; - } - final UUID uuid = jukebox.jukeboxUuid; - if (uuid == GT_MetaTileEntity_BetterJukebox.UNSET_UUID) { - return false; - } - if (!world.isRemote) { - final NBTTagCompound tag = (stack.getTagCompound() == null) ? new NBTTagCompound() : stack.getTagCompound(); - tag.setLong(GT_MetaTileEntity_BetterJukebox.NBTKEY_UUID_LOW, uuid.getLeastSignificantBits()); - tag.setLong(GT_MetaTileEntity_BetterJukebox.NBTKEY_UUID_HIGH, uuid.getMostSignificantBits()); - tag.setString( - NBTKEY_JUKEBOX_COORDINATES, - String.format("(%d, %d, %d) @ %d", x, y, z, world.provider.dimensionId)); - stack.setTagCompound(tag); - - player.addChatMessage(new ChatComponentTranslation("GT5U.machines.betterjukebox.headphonesbound")); - } - return true; - } - - public static UUID getBoundJukeboxUUID(ItemStack stack) { - if (stack == null || stack.getTagCompound() == null) { - return null; - } - final NBTTagCompound tag = stack.getTagCompound(); - if (!tag.hasKey(GT_MetaTileEntity_BetterJukebox.NBTKEY_UUID_LOW, Constants.NBT.TAG_ANY_NUMERIC) - || !tag.hasKey(GT_MetaTileEntity_BetterJukebox.NBTKEY_UUID_HIGH, Constants.NBT.TAG_ANY_NUMERIC)) { - return null; - } - final long idLow = tag.getLong(GT_MetaTileEntity_BetterJukebox.NBTKEY_UUID_LOW); - final long idHigh = tag.getLong(GT_MetaTileEntity_BetterJukebox.NBTKEY_UUID_HIGH); - return new UUID(idHigh, idLow); - } - - @Override - public BaubleType getBaubleType(ItemStack itemStack) { - return BaubleType.UNIVERSAL; - } - - @Override - public void onWornTick(ItemStack itemStack, EntityLivingBase entityLivingBase) {} - - @Override - public void onEquipped(ItemStack itemStack, EntityLivingBase entityLivingBase) {} - - @Override - public void onUnequipped(ItemStack itemStack, EntityLivingBase entityLivingBase) {} - - @Override - public boolean canEquip(ItemStack itemStack, EntityLivingBase entityLivingBase) { - return true; - } - - @Override - public boolean canUnequip(ItemStack itemStack, EntityLivingBase entityLivingBase) { - return true; - } -} diff --git a/src/main/java/gregtech/common/items/IDMetaItem01.java b/src/main/java/gregtech/common/items/IDMetaItem01.java new file mode 100644 index 0000000000..47f34ab4b8 --- /dev/null +++ b/src/main/java/gregtech/common/items/IDMetaItem01.java @@ -0,0 +1,433 @@ +package gregtech.common.items; + +public enum IDMetaItem01 { + // Please pretty please, add your entries while conserving the order + + Credit_Greg_Copper(0), + Credit_Greg_Cupronickel(1), + Credit_Greg_Silver(2), + Credit_Greg_Gold(3), + Credit_Greg_Platinum(4), + Credit_Greg_Osmium(5), + Credit_Greg_Naquadah(6), + Credit_Greg_Neutronium(7), + Coin_Gold_Ancient(8), + Coin_Doge(9), + Coin_Chocolate(10), + Credit_Copper(11), + Credit_Silver(13), + Credit_Gold(14), + Credit_Platinum(15), + Credit_Osmium(16), + Electric_Motor_UIV(17), + Electric_Motor_UMV(18), + Electric_Motor_UXV(19), + Electric_Motor_MAX(20), + Electric_Piston_UIV(21), + Electric_Piston_UMV(22), + Electric_Piston_UXV(23), + Electric_Piston_MAX(24), + Electric_Pump_UIV(25), + Electric_Pump_UMV(26), + Electric_Pump_UXV(27), + Electric_Pump_MAX(28), + Conveyor_Module_UIV(29), + Conveyor_Module_UMV(30), + Conveyor_Module_UXV(31), + Conveyor_Module_MAX(32), + Robot_Arm_UIV(33), + Robot_Arm_UMV(34), + Robot_Arm_UXV(35), + Robot_Arm_MAX(36), + Emitter_UIV(37), + Emitter_UMV(38), + Emitter_UXV(39), + Emitter_MAX(40), + Sensor_UIV(41), + Sensor_UMV(42), + Sensor_UXV(43), + Sensor_MAX(44), + Field_Generator_UIV(45), + Field_Generator_UMV(46), + Field_Generator_UXV(47), + Field_Generator_MAX(48), + Component_Minecraft_Wheels_Iron(100), + Component_Minecraft_Wheels_Steel(101), + Compressed_Fireclay(110), + Firebrick(111), + ZPM5(145), + ZPM6(146), + ItemFilter_Export(270), + ItemFilter_Import(271), + Cover_FluidLimiter(272), + Shape_Empty(300), + Shape_Mold_Plate(301), + Shape_Mold_Casing(302), + Shape_Mold_Gear(303), + Shape_Mold_Credit(304), + Shape_Mold_Bottle(305), + Shape_Mold_Ingot(306), + Shape_Mold_Ball(307), + Shape_Mold_Block(308), + Shape_Mold_Nugget(309), + Shape_Mold_Bun(310), + Shape_Mold_Bread(311), + Shape_Mold_Baguette(312), + Shape_Mold_Cylinder(313), + Shape_Mold_Anvil(314), + Shape_Mold_Name(315), + Shape_Mold_Arrow(316), + Shape_Mold_Gear_Small(317), + Shape_Mold_Rod(318), + Shape_Mold_Bolt(319), + Shape_Mold_Round(320), + Shape_Mold_Screw(321), + Shape_Mold_Ring(322), + Shape_Mold_Rod_Long(323), + Shape_Mold_Rotor(324), + Shape_Mold_Turbine_Blade(325), + Shape_Mold_Pipe_Tiny(326), + Shape_Mold_Pipe_Small(327), + Shape_Mold_Pipe_Medium(328), + Shape_Mold_Pipe_Large(329), + Shape_Mold_Pipe_Huge(330), + Shape_Mold_Tool_Head_Drill(331), + Steam_Regulator_LV(332), + Steam_Regulator_MV(333), + Steam_Regulator_HV(334), + Steam_Regulator_EV(335), + Steam_Regulator_IV(336), + Electromagnet_Iron(345), + Electromagnet_Steel(346), + Electromagnet_Neodymium(347), + Electromagnet_Samarium(348), + Electromagnet_Tengam(349), + Shape_Extruder_Plate(350), + Shape_Extruder_Rod(351), + Shape_Extruder_Bolt(352), + Shape_Extruder_Ring(353), + Shape_Extruder_Cell(354), + Shape_Extruder_Ingot(355), + Shape_Extruder_Wire(356), + Shape_Extruder_Casing(357), + Shape_Extruder_Pipe_Tiny(358), + Shape_Extruder_Pipe_Small(359), + Shape_Extruder_Pipe_Medium(360), + Shape_Extruder_Pipe_Large(361), + Shape_Extruder_Pipe_Huge(362), + Shape_Extruder_Block(363), + Shape_Extruder_Sword(364), + Shape_Extruder_Pickaxe(365), + Shape_Extruder_Shovel(366), + Shape_Extruder_Axe(367), + Shape_Extruder_Hoe(368), + Shape_Extruder_Hammer(369), + Shape_Extruder_File(370), + Shape_Extruder_Saw(371), + Shape_Extruder_Gear(372), + Shape_Extruder_Bottle(373), + Shape_Extruder_Rotor(374), + Shape_Extruder_Small_Gear(375), + Shape_Extruder_Turbine_Blade(376), + Shape_Extruder_Tool_Head_Drill(377), + Cover_Chest_Basic(380), + Cover_Chest_Good(381), + Cover_Chest_Advanced(382), + Shape_Slicer_Flat(398), + Shape_Slicer_Stripes(399), + Fuel_Can_Plastic_Empty(400), + Fuel_Can_Plastic_Filled(401), + Spray_Empty(402), + Crate_Empty(403), + Thermos_Can_Empty(404), + Large_Fluid_Cell_Steel(405), + Large_Fluid_Cell_TungstenSteel(406), + Large_Fluid_Cell_Aluminium(407), + Large_Fluid_Cell_StainlessSteel(408), + Large_Fluid_Cell_Titanium(409), + Large_Fluid_Cell_Chrome(410), + Large_Fluid_Cell_Iridium(411), + Large_Fluid_Cell_Osmium(412), + Large_Fluid_Cell_Neutronium(413), + Tesseract(415), + GigaChad(416), + EnergisedTesseract(417), + Black_Hole_Opener(418), + Black_Hole_Closer(419), + StableAdhesive(427), + SuperconductorComposite(428), + NaquadriaSupersolid(429), + Spray_Color_0(430), + Spray_Color_Used_0(431), + Spray_Color_1(432), + Spray_Color_Used_1(433), + Spray_Color_2(434), + Spray_Color_Used_2(435), + Spray_Color_3(436), + Spray_Color_Used_3(437), + Spray_Color_4(438), + Spray_Color_Used_4(439), + Spray_Color_5(440), + Spray_Color_Used_5(441), + Spray_Color_6(442), + Spray_Color_Used_6(443), + Spray_Color_7(444), + Spray_Color_Used_7(445), + Spray_Color_8(446), + Spray_Color_Used_8(447), + Spray_Color_9(448), + Spray_Color_Used_9(449), + Spray_Color_10(450), + Spray_Color_Used_10(451), + Spray_Color_11(452), + Spray_Color_Used_11(453), + Spray_Color_12(454), + Spray_Color_Used_12(455), + Spray_Color_13(456), + Spray_Color_Used_13(457), + Spray_Color_14(458), + Spray_Color_Used_14(459), + Spray_Color_15(460), + Spray_Color_Used_15(461), + Ingot_Heavy1(462), + Ingot_Heavy2(463), + Ingot_Heavy3(464), + Spray_Color_Remover(465), + Spray_Color_Used_Remover(466), + Spray_Color_Remover_Empty(467), + Tool_Matches(471), + Tool_MatchBox_Used(472), + Tool_MatchBox_Full(473), + Tool_Lighter_Invar_Empty(474), + Tool_Lighter_Invar_Used(475), + Tool_Lighter_Invar_Full(476), + Tool_Lighter_Platinum_Empty(477), + Tool_Lighter_Platinum_Used(478), + Tool_Lighter_Platinum_Full(479), + Ingot_Iridium_Alloy(480), + Paper_Printed_Pages(481), + Paper_Magic_Empty(482), + Paper_Magic_Page(483), + Paper_Magic_Pages(484), + Paper_Punch_Card_Empty(485), + Paper_Punch_Card_Encoded(486), + Book_Written_01(487), + Book_Written_02(488), + Book_Written_03(489), + Schematic(490), + Schematic_Crafting(491), + Schematic_1by1(495), + Schematic_2by2(496), + Schematic_3by3(497), + Schematic_Dust(498), + Battery_RE_ULV_Tantalum(499), + Battery_Hull_LV(500), + Battery_Hull_MV(501), + Battery_Hull_HV(502), + BatteryHull_EV(503), + BatteryHull_IV(504), + BatteryHull_LuV(505), + BatteryHull_ZPM(506), + BatteryHull_UV(507), + Battery_SU_LV_Sulfuric_Acid(510), + Battery_SU_LV_Mercury(511), + Battery_RE_LV_Cadmium(517), + Battery_RE_LV_Lithium(518), + Battery_RE_LV_Sodium(519), + Battery_SU_MV_Sulfuric_Acid(520), + Battery_SU_MV_Mercury(521), + Battery_RE_MV_Cadmium(527), + Battery_RE_MV_Lithium(528), + Battery_RE_MV_Sodium(529), + Battery_SU_HV_Sulfuric_Acid(530), + Battery_SU_HV_Mercury(531), + Battery_RE_HV_Cadmium(537), + Battery_RE_HV_Lithium(538), + Battery_RE_HV_Sodium(539), + BatteryHull_EV_Full(540), + BatteryHull_IV_Full(545), + BatteryHull_LuV_Full(550), + BatteryHull_ZPM_Full(555), + BatteryHull_UV_Full(560), + BatteryHull_UHV(561), + BatteryHull_UEV(562), + BatteryHull_UIV(563), + BatteryHull_UMV(564), + BatteryHull_UxV(565), + BatteryHull_UHV_Full(570), + BatteryHull_UEV_Full(575), + Cover_FLuidStorageMonitor(577), + BatteryHull_UIV_Full(580), + BatteryHull_UMV_Full(585), + BatteryHull_UxV_Full(590), + ZPM4(594), + Electric_Motor_UEV(595), + Electric_Motor_UHV(596), + Energy_Lapotronic_Orb(597), + ZPM(598), + Energy_Lapotronic_orb_2(599), + Electric_Motor_LV(600), + Electric_Motor_MV(601), + Electric_Motor_HV(602), + Electric_Motor_EV(603), + Electric_Motor_IV(604), + ZPM2(605), + Electric_Motor_LuV(606), + Electric_Motor_ZPM(607), + Electric_Motor_UV(608), + ZPM3(609), + Electric_Pump_LV(610), + Electric_Pump_MV(611), + Electric_Pump_HV(612), + Electric_Pump_EV(613), + Electric_Pump_IV(614), + Electric_Pump_LuV(615), + Electric_Pump_ZPM(616), + Electric_Pump_UV(617), + Electric_Pump_UHV(618), + Electric_Pump_UEV(619), + Steam_Valve_LV(620), + Steam_Valve_MV(621), + Steam_Valve_HV(622), + Steam_Valve_EV(623), + Steam_Valve_IV(624), + Conveyor_Module_LV(630), + Conveyor_Module_MV(631), + Conveyor_Module_HV(632), + Conveyor_Module_EV(633), + Conveyor_Module_IV(634), + Conveyor_Module_LuV(635), + Conveyor_Module_ZPM(636), + Conveyor_Module_UV(637), + Conveyor_Module_UHV(638), + Conveyor_Module_UEV(639), + Electric_Piston_LV(640), + Electric_Piston_MV(641), + Electric_Piston_HV(642), + Electric_Piston_EV(643), + Electric_Piston_IV(644), + Electric_Piston_LuV(645), + Electric_Piston_ZPM(646), + Electric_Piston_UV(647), + Electric_Piston_UHV(648), + Electric_Piston_UEV(649), + Robot_Arm_LV(650), + Robot_Arm_MV(651), + Robot_Arm_HV(652), + Robot_Arm_EV(653), + Robot_Arm_IV(654), + Robot_Arm_LuV(655), + Robot_Arm_ZPM(656), + Robot_Arm_UV(657), + Robot_Arm_UHV(658), + Robot_Arm_UEV(659), + FluidRegulator_LV(660), + FluidRegulator_MV(661), + FluidRegulator_HV(662), + FluidRegulator_EV(663), + FluidRegulator_IV(664), + FluidRegulator_LuV(665), + FluidRegulator_ZPM(666), + FluidRegulator_UV(667), + Circuit_Parts_Crystal_Chip_Wetware(668), + FluidFilter(669), + Field_Generator_LV(670), + Field_Generator_MV(671), + Field_Generator_HV(672), + Field_Generator_EV(673), + Field_Generator_IV(674), + Field_Generator_LuV(675), + Field_Generator_ZPM(676), + Field_Generator_UV(677), + Field_Generator_UHV(678), + Field_Generator_UEV(679), + Emitter_LV(680), + Emitter_MV(681), + Emitter_HV(682), + Emitter_EV(683), + Emitter_IV(684), + Emitter_LuV(685), + Emitter_ZPM(686), + Emitter_UV(687), + Emitter_UHV(688), + Emitter_UEV(689), + Sensor_LV(690), + Sensor_MV(691), + Sensor_HV(692), + Sensor_EV(693), + Sensor_IV(694), + Sensor_LuV(695), + Sensor_ZPM(696), + Sensor_UV(697), + Sensor_UHV(698), + Sensor_UEV(699), + Circuit_Primitive(700), + Circuit_Basic(701), + Circuit_Good(702), + Circuit_Advanced(703), + Circuit_Data(704), + Circuit_Elite(705), + Circuit_Master(706), + Tool_DataOrb(707), + Tool_DataStick(708), + Tool_Cover_Copy_Paste(709), + Circuit_Board_Basic(710), + Circuit_Board_Advanced(711), + Circuit_Board_Elite(712), + Circuit_Parts_Crystal_Chip_Elite(713), + Circuit_Parts_Crystal_Chip_Master(714), + Circuit_Parts_Advanced(715), + Circuit_Parts_Wiring_Basic(716), + Circuit_Parts_Wiring_Advanced(717), + Circuit_Parts_Wiring_Elite(718), + Empty_Board_Basic(719), + Empty_Board_Elite(720), + Component_Sawblade_Diamond(721), + Component_Grinder_Diamond(722), + Component_Grinder_Tungsten(723), + QuantumEye(724), + QuantumStar(725), + Gravistar(726), + Upgrade_Muffler(727), + Upgrade_Lock(728), + Component_Filter(729), + Cover_Controller(730), + Cover_ActivityDetector(731), + Cover_FluidDetector(732), + Cover_ItemDetector(733), + Cover_EnergyDetector(734), + Cover_PlayerDetector(735), + Energy_Module(736), + Energy_Cluster(737), + Cover_Screen(740), + Cover_RedstoneTransmitterExternal(741), + Cover_RedstoneTransmitterInternal(742), + Cover_Crafting(744), + Cover_Drain(745), + Cover_RedstoneReceiverExternal(746), + Cover_RedstoneReceiverInternal(747), + Cover_NeedsMaintenance(748), + Cover_Shutter(749), + Cover_SolarPanel(750), + Cover_SolarPanel_8V(751), + Cover_SolarPanel_LV(752), + Cover_SolarPanel_MV(753), + Cover_SolarPanel_HV(754), + Cover_SolarPanel_EV(755), + Cover_SolarPanel_IV(756), + Cover_SolarPanel_LuV(757), + Cover_SolarPanel_ZPM(758), + Cover_SolarPanel_UV(759), + Tool_Sonictron(760), + Tool_Cheat(761), + Tool_Scanner(762), + NC_SensorKit(763), + Duct_Tape(764), + McGuffium_239(765); + + public final int ID; + + IDMetaItem01(int ID) { + this.ID = ID; + } +} diff --git a/src/main/java/gregtech/common/items/IDMetaItem02.java b/src/main/java/gregtech/common/items/IDMetaItem02.java new file mode 100644 index 0000000000..a67e22545c --- /dev/null +++ b/src/main/java/gregtech/common/items/IDMetaItem02.java @@ -0,0 +1,208 @@ +package gregtech.common.items; + +public enum IDMetaItem02 { + + // Please pretty please, add your entries while conserving the order + ThermosCan_Dark_Coffee(0), + ThermosCan_Dark_Cafe_au_lait(1), + ThermosCan_Coffee(2), + ThermosCan_Cafe_au_lait(3), + ThermosCan_Lait_au_cafe(4), + ThermosCan_Dark_Chocolate_Milk(5), + ThermosCan_Chocolate_Milk(6), + ThermosCan_Tea(7), + ThermosCan_Sweet_Tea(8), + ThermosCan_Ice_Tea(9), + GelledToluene(10), + Bottle_Purple_Drink(100), + Bottle_Grape_Juice(101), + Bottle_Wine(102), + Bottle_Vinegar(103), + Bottle_Potato_Juice(104), + Bottle_Vodka(105), + Bottle_Leninade(106), + Bottle_Mineral_Water(107), + Bottle_Salty_Water(108), + Bottle_Reed_Water(109), + Bottle_Rum(110), + Bottle_Pirate_Brew(111), + Bottle_Hops_Juice(112), + Bottle_Dark_Beer(113), + Bottle_Dragon_Blood(114), + Bottle_Wheaty_Juice(115), + Bottle_Scotch(116), + Bottle_Glen_McKenner(117), + Bottle_Wheaty_Hops_Juice(118), + Bottle_Beer(119), + Bottle_Chilly_Sauce(120), + Bottle_Hot_Sauce(121), + Bottle_Diabolo_Sauce(122), + Bottle_Diablo_Sauce(123), + Bottle_Snitches_Glitch_Sauce(124), + Bottle_Apple_Juice(125), + Bottle_Cider(126), + Bottle_Golden_Apple_Juice(127), + Bottle_Golden_Cider(128), + Bottle_Iduns_Apple_Juice(129), + Bottle_Notches_Brew(130), + Bottle_Lemon_Juice(131), + Bottle_Limoncello(132), + Bottle_Lemonade(133), + Bottle_Alcopops(134), + Bottle_Cave_Johnsons_Grenade_Juice(135), + Bottle_Milk(136), + Bottle_Holy_Water(137), + Food_Potato_On_Stick(200), + Food_Potato_On_Stick_Roasted(201), + Food_Raw_Fries(202), + Food_Fries(203), + Food_Packaged_Fries(204), + Food_Raw_PotatoChips(205), + Food_PotatoChips(206), + Food_ChiliChips(207), + Food_Packaged_PotatoChips(208), + Food_Packaged_ChiliChips(209), + Food_Chum(210), + Food_Chum_On_Stick(211), + Food_Dough_Sugar(212), + Food_Dough_Chocolate(213), + Food_Raw_Cookie(214), + Food_Sliced_Buns(220), + Food_Burger_Veggie(221), + Food_Burger_Cheese(222), + Food_Burger_Meat(223), + Food_Burger_Chum(224), + Food_Sliced_Breads(230), + Food_Sandwich_Veggie(231), + Food_Sandwich_Cheese(232), + Food_Sandwich_Bacon(233), + Food_Sandwich_Steak(234), + Food_Sliced_Baguettes(240), + Food_Large_Sandwich_Veggie(241), + Food_Large_Sandwich_Cheese(242), + Food_Large_Sandwich_Bacon(243), + Food_Large_Sandwich_Steak(244), + Food_Raw_Pizza_Veggie(250), + Food_Raw_Pizza_Cheese(251), + Food_Raw_Pizza_Meat(252), + Food_Baked_Pizza_Veggie(260), + Food_Baked_Pizza_Cheese(261), + Food_Baked_Pizza_Meat(262), + SFMixture(270), + MSFMixture(271), + Dye_Indigo(410), + Dye_Color_00(414), + Dye_Color_01(415), + Dye_Color_02(416), + Dye_Color_03(417), + Dye_Color_04(418), + Dye_Color_05(419), + Dye_Color_06(420), + Dye_Color_07(421), + Dye_Color_08(422), + Dye_Color_09(423), + Dye_Color_10(424), + Dye_Color_11(425), + Dye_Color_12(426), + Dye_Color_13(427), + Dye_Color_14(428), + Dye_Color_15(429), + Plank_Oak(470), + Plank_Spruce(471), + Plank_Birch(472), + Plank_Jungle(473), + Plank_Acacia(474), + Plank_DarkOak(475), + Plank_Larch(476), + Plank_Teak(477), + Plank_Acacia_Green(478), + Plank_Lime(479), + Plank_Chestnut(480), + Plank_Wenge(481), + Plank_Baobab(482), + Plank_Sequoia(483), + Plank_Kapok(484), + Plank_Ebony(485), + Plank_Mahagony(486), + Plank_Balsa(487), + Plank_Willow(488), + Plank_Walnut(489), + Plank_Greenheart(490), + Plank_Cherry(491), + Plank_Mahoe(492), + Plank_Poplar(493), + Plank_Palm(494), + Plank_Papaya(495), + Plank_Pine(496), + Plank_Plum(497), + Plank_Maple(498), + Plank_Citrus(499), + Crop_Drop_Plumbilia(500), + Crop_Drop_Argentia(501), + Crop_Drop_Indigo(502), + Crop_Drop_Ferru(503), + Crop_Drop_Aurelia(504), + Crop_Drop_TeaLeaf(505), + Crop_Drop_OilBerry(510), + Crop_Drop_BobsYerUncleRanks(511), + Crop_Drop_UUMBerry(512), + Crop_Drop_UUABerry(513), + Crop_Drop_MilkWart(520), + Crop_Drop_Bauxite(521), + Crop_Drop_Ilmenite(522), + Crop_Drop_Pitchblende(523), + Crop_Drop_Uraninite(524), + Crop_Drop_Thorium(526), + Crop_Drop_Nickel(527), + Crop_Drop_Zinc(528), + Crop_Drop_Manganese(529), + Crop_Drop_Coppon(530), + Crop_Drop_Scheelite(531), + Crop_Drop_Platinum(532), + Crop_Drop_Iridium(533), + Crop_Drop_Osmium(534), + Crop_Drop_Naquadah(535), + Crop_Drop_Mica(538), + Crop_Drop_Tine(540), + Crop_Drop_Chilly(550), + Crop_Drop_Lemon(551), + Crop_Drop_Tomato(552), + Crop_Drop_MTomato(553), + Crop_Drop_Grapes(554), + Crop_Drop_Onion(555), + Crop_Drop_Cucumber(556), + Crop_Drop_Rape(557), + Food_Cheese(558), + Food_Dough(559), + Food_Flat_Dough(560), + Food_Raw_Bread(561), + Food_Raw_Bun(562), + Food_Raw_Baguette(563), + Food_Baked_Bun(564), + Food_Baked_Baguette(565), + Food_Sliced_Bread(566), + Food_Sliced_Bun(567), + Food_Sliced_Baguette(568), + Food_Raw_Cake(569), + Food_Baked_Cake(570), + Food_Sliced_Lemon(571), + Food_Sliced_Tomato(572), + Food_Sliced_Onion(573), + Food_Sliced_Cucumber(574), + Food_Sliced_Cheese(576), + Cover_AdvancedRedstoneTransmitterExternal(577), + Cover_AdvancedRedstoneTransmitterInternal(578), + Cover_AdvancedRedstoneReceiverExternal(579), + Cover_AdvancedRedstoneReceiverInternal(580), + Cover_WirelessFluidDetector(581), + Cover_WirelessItemDetector(582), + Cover_WirelessNeedsMaintainance(583), + Cover_WirelessActivityDetector(584), + Display_ITS_FREE(765); + + public final int ID; + + IDMetaItem02(int ID) { + this.ID = ID; + } +} diff --git a/src/main/java/gregtech/common/items/IDMetaItem03.java b/src/main/java/gregtech/common/items/IDMetaItem03.java new file mode 100644 index 0000000000..b0e4f35943 --- /dev/null +++ b/src/main/java/gregtech/common/items/IDMetaItem03.java @@ -0,0 +1,242 @@ +package gregtech.common.items; + +public enum IDMetaItem03 { + + // Please pretty please, add your entries while conserving the order + Circuit_Board_Wetware(6), + Circuit_Board_Plastic(7), + Circuit_Board_Bio(8), + Circuit_Parts_ResistorSMD(11), + Circuit_Parts_Glass_Tube(12), + Circuit_Parts_Coil(14), + Circuit_Parts_DiodeSMD(16), + Circuit_Parts_TransistorSMD(18), + Circuit_Parts_CapacitorSMD(20), + Circuit_Parts_GlassFiber(21), + Circuit_Parts_PetriDish(22), + Circuit_Parts_Reinforced_Glass_Tube(23), + Circuit_Parts_ResistorASMD(24), + Circuit_Parts_DiodeASMD(25), + Circuit_Parts_TransistorASMD(26), + Circuit_Parts_CapacitorASMD(27), + Circuit_Silicon_Ingot(30), + Circuit_Silicon_Ingot2(31), + Circuit_Silicon_Ingot3(32), + Circuit_Silicon_Wafer(33), + Circuit_Silicon_Wafer2(34), + Circuit_Silicon_Wafer3(35), + Circuit_Wafer_ILC(36), + Circuit_Chip_ILC(37), + Circuit_Wafer_Ram(38), + Circuit_Chip_Ram(39), + Circuit_Wafer_NAND(40), + Circuit_Chip_NAND(41), + Circuit_Wafer_NOR(42), + Circuit_Chip_NOR(43), + Circuit_Wafer_CPU(44), + Circuit_Chip_CPU(45), + Circuit_Wafer_SoC(46), + Circuit_Chip_SoC(47), + Circuit_Wafer_SoC2(48), + Circuit_Chip_SoC2(49), + Circuit_Wafer_PIC(50), + Circuit_Chip_PIC(51), + Circuit_Wafer_HPIC(52), + Circuit_Chip_HPIC(53), + Circuit_Wafer_NanoCPU(54), + Circuit_Chip_NanoCPU(55), + Circuit_Wafer_QuantumCPU(56), + Circuit_Chip_QuantumCPU(57), + Circuit_Wafer_UHPIC(58), + Circuit_Chip_UHPIC(59), + Circuit_Wafer_Simple_SoC(60), + Circuit_Chip_Simple_SoC(61), + Circuit_Wafer_ULPIC(62), + Circuit_Chip_ULPIC(63), + Circuit_Wafer_LPIC(64), + Circuit_Chip_LPIC(65), + Circuit_Chip_CrystalSoC2(68), + Circuit_Parts_RawCrystalChip(69), + Circuit_Chip_CrystalCPU(70), + Circuit_Chip_CrystalSoC(71), + Circuit_Chip_NeuroCPU(72), + Circuit_Chip_Stemcell(73), + Circuit_Parts_RawCrystalParts(74), + NandChip(75), + Circuit_Chip_Biocell(76), + Circuit_Chip_BioCPU(77), + Circuit_Microprocessor(78), + Circuit_Integrated_Good(79), + Circuit_Processor(80), + Circuit_Nanoprocessor(82), + Circuit_Nanocomputer(83), + Circuit_Elitenanocomputer(84), + Circuit_Quantumprocessor(85), + Circuit_Quantumcomputer(86), + Circuit_Masterquantumcomputer(87), + Circuit_Quantummainframe(88), + Circuit_Crystalprocessor(89), + Circuit_Ultimatecrystalcomputer(90), + Circuit_Crystalmainframe(91), + Circuit_Neuroprocessor(92), + Circuit_Wetwarecomputer(93), + Circuit_Wetwaresupercomputer(94), + Circuit_Wetwaremainframe(95), + Circuit_Crystalcomputer(96), + Circuit_Bioprocessor(97), + Circuit_Biowarecomputer(98), + Circuit_Biowaresupercomputer(99), + Circuit_Board_Coated_Basic(100), + Circuit_Board_Phenolic_Good(101), + Circuit_Board_Epoxy_Advanced(102), + Circuit_Board_Fiberglass_Advanced(103), + Circuit_Board_Multifiberglass_Elite(104), + Circuit_Board_Wetware_Extreme(105), + Circuit_Board_Plastic_Advanced(106), + Circuit_Board_Bio_Ultra(107), + Tube_Wires(110), + Circuit_Biomainframe(120), + Cover_SolarPanel_UHV(130), + Cover_SolarPanel_UEV(131), + Cover_SolarPanel_UIV(132), + ULV_Coil(140), + LV_Coil(141), + MV_Coil(142), + HV_Coil(143), + EV_Coil(144), + IV_Coil(145), + LuV_Coil(146), + ZPM_Coil(147), + UV_Coil(148), + UHV_Coil(149), + Circuit_Silicon_Ingot4(150), + Circuit_Silicon_Wafer4(151), + Circuit_Silicon_Ingot5(152), + Circuit_Silicon_Wafer5(153), + Circuit_OpticalProcessor(154), + Circuit_OpticalAssembly(155), + Circuit_OpticalComputer(156), + Circuit_OpticalMainframe(157), + Circuit_Wafer_NPIC(160), + Circuit_Chip_NPIC(161), + Circuit_Wafer_PPIC(162), + Circuit_Chip_PPIC(163), + Circuit_Wafer_QPIC(164), + Circuit_Chip_QPIC(165), + Circuit_ExoticProcessor(166), + Circuit_ExoticAssembly(167), + Circuit_ExoticComputer(168), + Circuit_ExoticMainframe(169), + Circuit_CosmicProcessor(170), + Circuit_CosmicAssembly(171), + Circuit_CosmicComputer(172), + Circuit_CosmicMainframe(173), + Circuit_TranscendentProcessor(174), + Circuit_TranscendentAssembly(175), + Circuit_TranscendentComputer(176), + Circuit_TranscendentMainframe(177), + Circuit_Parts_ResistorXSMD(178), + Circuit_Parts_DiodeXSMD(179), + Circuit_Parts_TransistorXSMD(180), + Circuit_Parts_CapacitorXSMD(181), + Circuit_Parts_InductorSMD(182), + Circuit_Parts_InductorASMD(183), + Circuit_Parts_InductorXSMD(184), + Circuit_Wafer_Bioware(188), + Circuit_Parts_Chip_Bioware(189), + GalliumArsenideCrystal(190), + GalliumArsenideCrystalSmallPart(191), + KevlarFiber(192), + WovenKevlar(193), + Spinneret(194), + IndustrialApiary_Upgrade_Frame(199), + IndustrialApiary_Upgrade_Acceleration_1(200), + IndustrialApiary_Upgrade_Acceleration_2(201), + IndustrialApiary_Upgrade_Acceleration_3(202), + IndustrialApiary_Upgrade_Acceleration_4(203), + IndustrialApiary_Upgrade_Acceleration_5(204), + IndustrialApiary_Upgrade_Acceleration_6(205), + IndustrialApiary_Upgrade_Acceleration_7(206), + IndustrialApiary_Upgrade_Acceleration_8(207), + IndustrialApiary_Upgrade_Acceleration_8_Upgraded(208), + IndustrialApiary_Upgrade_PRODUCTION(209), + IndustrialApiary_Upgrade_PLAINS(210), + IndustrialApiary_Upgrade_LIGHT(211), + IndustrialApiary_Upgrade_FLOWERING(212), + IndustrialApiary_Upgrade_WINTER(213), + IndustrialApiary_Upgrade_DRYER(214), + IndustrialApiary_Upgrade_AUTOMATION(215), + IndustrialApiary_Upgrade_HUMIDIFIER(216), + IndustrialApiary_Upgrade_HELL(217), + IndustrialApiary_Upgrade_POLLEN(218), + IndustrialApiary_Upgrade_DESERT(219), + IndustrialApiary_Upgrade_COOLER(220), + IndustrialApiary_Upgrade_LIFESPAN(221), + IndustrialApiary_Upgrade_SEAL(222), + IndustrialApiary_Upgrade_STABILIZER(223), + IndustrialApiary_Upgrade_JUNGLE(224), + IndustrialApiary_Upgrade_TERRITORY(225), + IndustrialApiary_Upgrade_OCEAN(226), + IndustrialApiary_Upgrade_SKY(227), + IndustrialApiary_Upgrade_HEATER(228), + IndustrialApiary_Upgrade_SIEVE(229), + NuclearStar(230), + IndustrialApiary_Upgrade_UNLIGHT(231), + Cover_Metrics_Transmitter(232), + Activated_Carbon_Filter_Mesh(233), + Quark_Catalyst_Housing(234), + Quark_Creation_Catalyst_Up(235), + Quark_Creation_Catalyst_Down(236), + Quark_Creation_Catalyst_Strange(237), + Quark_Creation_Catalyst_Charm(238), + Quark_Creation_Catalyst_Bottom(239), + Quark_Creation_Catalyst_Top(240), + Quark_Creation_Catalyst_Unaligned(241), + Circuit_Silicon_Ingot6(721), + Circuit_Silicon_Wafer6(722), + Circuit_Silicon_Wafer7(723), + Circuit_Chip_Optical(724), + Optically_Compatible_Memory(725), + Optically_Perfected_CPU(726), + Optical_Cpu_Containment_Housing(727), + Circuit_Board_Optical(728), + White_Dwarf_Shape_Extruder_Plate(729), + White_Dwarf_Shape_Extruder_Rod(730), + White_Dwarf_Shape_Extruder_Bolt(731), + White_Dwarf_Shape_Extruder_Ring(732), + White_Dwarf_Shape_Extruder_Cell(733), + White_Dwarf_Shape_Extruder_Ingot(734), + White_Dwarf_Shape_Extruder_Wire(735), + White_Dwarf_Shape_Extruder_Casing(736), + White_Dwarf_Shape_Extruder_Pipe_Tiny(737), + White_Dwarf_Shape_Extruder_Pipe_Small(738), + White_Dwarf_Shape_Extruder_Pipe_Medium(739), + White_Dwarf_Shape_Extruder_Pipe_Large(740), + White_Dwarf_Shape_Extruder_Pipe_Huge(741), + White_Dwarf_Shape_Extruder_Block(742), + White_Dwarf_Shape_Extruder_Sword(743), + White_Dwarf_Shape_Extruder_Pickaxe(744), + White_Dwarf_Shape_Extruder_Shovel(745), + White_Dwarf_Shape_Extruder_Axe(746), + White_Dwarf_Shape_Extruder_Hoe(747), + White_Dwarf_Shape_Extruder_Hammer(748), + White_Dwarf_Shape_Extruder_File(749), + White_Dwarf_Shape_Extruder_Saw(750), + White_Dwarf_Shape_Extruder_Gear(751), + White_Dwarf_Shape_Extruder_Bottle(752), + White_Dwarf_Shape_Extruder_Rotor(753), + White_Dwarf_Shape_Extruder_Small_Gear(754), + White_Dwarf_Shape_Extruder_Turbine_Blade(755), + White_Dwarf_Shape_Extruder_ToolHeadDrill(756), + Timepiece(757), + Transdimensional_Alignment_Matrix(758), + Thermal_Superconductor(759), + Relativistic_Heat_Capacitor(760), + Phononic_Seed_Crystal(761); + + public final int ID; + + IDMetaItem03(int ID) { + this.ID = ID; + } +} diff --git a/src/main/java/gregtech/common/items/IDMetaTool01.java b/src/main/java/gregtech/common/items/IDMetaTool01.java new file mode 100644 index 0000000000..684636100b --- /dev/null +++ b/src/main/java/gregtech/common/items/IDMetaTool01.java @@ -0,0 +1,73 @@ +package gregtech.common.items; + +public enum IDMetaTool01 { + + // Please pretty please, add your entries while conserving the order + SWORD(0), + PICKAXE(2), + SHOVEL(4), + AXE(6), + HOE(8), + SAW(10), + HARDHAMMER(12), + SOFTMALLET(14), + @Deprecated + SOFTHAMMER(14), + WRENCH(16), + FILE(18), + CROWBAR(20), + SCREWDRIVER(22), + MORTAR(24), + WIRECUTTER(26), + SCOOP(28), + BRANCHCUTTER(30), + UNIVERSALSPADE(32), + KNIFE(34), + BUTCHERYKNIFE(36), + @Deprecated + SICKLE(38), + SENSE(40), + PLOW(42), + PLUNGER(44), + ROLLING_PIN(46), + DRILL_LV(100), + DRILL_MV(102), + DRILL_HV(104), + CHAINSAW_LV(110), + CHAINSAW_MV(112), + CHAINSAW_HV(114), + WRENCH_LV(120), + WRENCH_MV(122), + WRENCH_HV(124), + JACKHAMMER(130), + BUZZSAW_LV(140), + @Deprecated + BUZZSAW(140), + BUZZSAW_MV(142), + BUZZSAW_HV(144), + SCREWDRIVER_LV(150), + SCREWDRIVER_MV(152), + SCREWDRIVER_HV(154), + SOLDERING_IRON_LV(160), + SOLDERING_IRON_MV(162), + SOLDERING_IRON_HV(164), + TURBINE_SMALL(170), + TURBINE(172), + TURBINE_LARGE(174), + TURBINE_HUGE(176), + @Deprecated + TURBINE_BLADE(178), + POCKET_MULTITOOL(180), + POCKET_BRANCHCUTTER(182), + POCKET_FILE(184), + POCKET_KNIFE(186), + POCKET_SAW(188), + POCKET_SCREWDRIVER(190), + POCKET_WIRECUTTER(192); + + public final int ID; + + IDMetaTool01(int ID) { + this.ID = ID; + } +} diff --git a/src/main/java/gregtech/common/items/ID_MetaItem_01.java b/src/main/java/gregtech/common/items/ID_MetaItem_01.java deleted file mode 100644 index 5748442f86..0000000000 --- a/src/main/java/gregtech/common/items/ID_MetaItem_01.java +++ /dev/null @@ -1,433 +0,0 @@ -package gregtech.common.items; - -public enum ID_MetaItem_01 { - // Please pretty please, add your entries while conserving the order - - Credit_Greg_Copper(0), - Credit_Greg_Cupronickel(1), - Credit_Greg_Silver(2), - Credit_Greg_Gold(3), - Credit_Greg_Platinum(4), - Credit_Greg_Osmium(5), - Credit_Greg_Naquadah(6), - Credit_Greg_Neutronium(7), - Coin_Gold_Ancient(8), - Coin_Doge(9), - Coin_Chocolate(10), - Credit_Copper(11), - Credit_Silver(13), - Credit_Gold(14), - Credit_Platinum(15), - Credit_Osmium(16), - Electric_Motor_UIV(17), - Electric_Motor_UMV(18), - Electric_Motor_UXV(19), - Electric_Motor_MAX(20), - Electric_Piston_UIV(21), - Electric_Piston_UMV(22), - Electric_Piston_UXV(23), - Electric_Piston_MAX(24), - Electric_Pump_UIV(25), - Electric_Pump_UMV(26), - Electric_Pump_UXV(27), - Electric_Pump_MAX(28), - Conveyor_Module_UIV(29), - Conveyor_Module_UMV(30), - Conveyor_Module_UXV(31), - Conveyor_Module_MAX(32), - Robot_Arm_UIV(33), - Robot_Arm_UMV(34), - Robot_Arm_UXV(35), - Robot_Arm_MAX(36), - Emitter_UIV(37), - Emitter_UMV(38), - Emitter_UXV(39), - Emitter_MAX(40), - Sensor_UIV(41), - Sensor_UMV(42), - Sensor_UXV(43), - Sensor_MAX(44), - Field_Generator_UIV(45), - Field_Generator_UMV(46), - Field_Generator_UXV(47), - Field_Generator_MAX(48), - Component_Minecraft_Wheels_Iron(100), - Component_Minecraft_Wheels_Steel(101), - Compressed_Fireclay(110), - Firebrick(111), - ZPM5(145), - ZPM6(146), - ItemFilter_Export(270), - ItemFilter_Import(271), - Cover_FluidLimiter(272), - Shape_Empty(300), - Shape_Mold_Plate(301), - Shape_Mold_Casing(302), - Shape_Mold_Gear(303), - Shape_Mold_Credit(304), - Shape_Mold_Bottle(305), - Shape_Mold_Ingot(306), - Shape_Mold_Ball(307), - Shape_Mold_Block(308), - Shape_Mold_Nugget(309), - Shape_Mold_Bun(310), - Shape_Mold_Bread(311), - Shape_Mold_Baguette(312), - Shape_Mold_Cylinder(313), - Shape_Mold_Anvil(314), - Shape_Mold_Name(315), - Shape_Mold_Arrow(316), - Shape_Mold_Gear_Small(317), - Shape_Mold_Rod(318), - Shape_Mold_Bolt(319), - Shape_Mold_Round(320), - Shape_Mold_Screw(321), - Shape_Mold_Ring(322), - Shape_Mold_Rod_Long(323), - Shape_Mold_Rotor(324), - Shape_Mold_Turbine_Blade(325), - Shape_Mold_Pipe_Tiny(326), - Shape_Mold_Pipe_Small(327), - Shape_Mold_Pipe_Medium(328), - Shape_Mold_Pipe_Large(329), - Shape_Mold_Pipe_Huge(330), - Shape_Mold_Tool_Head_Drill(331), - Steam_Regulator_LV(332), - Steam_Regulator_MV(333), - Steam_Regulator_HV(334), - Steam_Regulator_EV(335), - Steam_Regulator_IV(336), - Electromagnet_Iron(345), - Electromagnet_Steel(346), - Electromagnet_Neodymium(347), - Electromagnet_Samarium(348), - Electromagnet_Tengam(349), - Shape_Extruder_Plate(350), - Shape_Extruder_Rod(351), - Shape_Extruder_Bolt(352), - Shape_Extruder_Ring(353), - Shape_Extruder_Cell(354), - Shape_Extruder_Ingot(355), - Shape_Extruder_Wire(356), - Shape_Extruder_Casing(357), - Shape_Extruder_Pipe_Tiny(358), - Shape_Extruder_Pipe_Small(359), - Shape_Extruder_Pipe_Medium(360), - Shape_Extruder_Pipe_Large(361), - Shape_Extruder_Pipe_Huge(362), - Shape_Extruder_Block(363), - Shape_Extruder_Sword(364), - Shape_Extruder_Pickaxe(365), - Shape_Extruder_Shovel(366), - Shape_Extruder_Axe(367), - Shape_Extruder_Hoe(368), - Shape_Extruder_Hammer(369), - Shape_Extruder_File(370), - Shape_Extruder_Saw(371), - Shape_Extruder_Gear(372), - Shape_Extruder_Bottle(373), - Shape_Extruder_Rotor(374), - Shape_Extruder_Small_Gear(375), - Shape_Extruder_Turbine_Blade(376), - Shape_Extruder_Tool_Head_Drill(377), - Cover_Chest_Basic(380), - Cover_Chest_Good(381), - Cover_Chest_Advanced(382), - Shape_Slicer_Flat(398), - Shape_Slicer_Stripes(399), - Fuel_Can_Plastic_Empty(400), - Fuel_Can_Plastic_Filled(401), - Spray_Empty(402), - Crate_Empty(403), - Thermos_Can_Empty(404), - Large_Fluid_Cell_Steel(405), - Large_Fluid_Cell_TungstenSteel(406), - Large_Fluid_Cell_Aluminium(407), - Large_Fluid_Cell_StainlessSteel(408), - Large_Fluid_Cell_Titanium(409), - Large_Fluid_Cell_Chrome(410), - Large_Fluid_Cell_Iridium(411), - Large_Fluid_Cell_Osmium(412), - Large_Fluid_Cell_Neutronium(413), - Tesseract(415), - GigaChad(416), - EnergisedTesseract(417), - Black_Hole_Opener(418), - Black_Hole_Closer(419), - StableAdhesive(427), - SuperconductorComposite(428), - NaquadriaSupersolid(429), - Spray_Color_0(430), - Spray_Color_Used_0(431), - Spray_Color_1(432), - Spray_Color_Used_1(433), - Spray_Color_2(434), - Spray_Color_Used_2(435), - Spray_Color_3(436), - Spray_Color_Used_3(437), - Spray_Color_4(438), - Spray_Color_Used_4(439), - Spray_Color_5(440), - Spray_Color_Used_5(441), - Spray_Color_6(442), - Spray_Color_Used_6(443), - Spray_Color_7(444), - Spray_Color_Used_7(445), - Spray_Color_8(446), - Spray_Color_Used_8(447), - Spray_Color_9(448), - Spray_Color_Used_9(449), - Spray_Color_10(450), - Spray_Color_Used_10(451), - Spray_Color_11(452), - Spray_Color_Used_11(453), - Spray_Color_12(454), - Spray_Color_Used_12(455), - Spray_Color_13(456), - Spray_Color_Used_13(457), - Spray_Color_14(458), - Spray_Color_Used_14(459), - Spray_Color_15(460), - Spray_Color_Used_15(461), - Ingot_Heavy1(462), - Ingot_Heavy2(463), - Ingot_Heavy3(464), - Spray_Color_Remover(465), - Spray_Color_Used_Remover(466), - Spray_Color_Remover_Empty(467), - Tool_Matches(471), - Tool_MatchBox_Used(472), - Tool_MatchBox_Full(473), - Tool_Lighter_Invar_Empty(474), - Tool_Lighter_Invar_Used(475), - Tool_Lighter_Invar_Full(476), - Tool_Lighter_Platinum_Empty(477), - Tool_Lighter_Platinum_Used(478), - Tool_Lighter_Platinum_Full(479), - Ingot_Iridium_Alloy(480), - Paper_Printed_Pages(481), - Paper_Magic_Empty(482), - Paper_Magic_Page(483), - Paper_Magic_Pages(484), - Paper_Punch_Card_Empty(485), - Paper_Punch_Card_Encoded(486), - Book_Written_01(487), - Book_Written_02(488), - Book_Written_03(489), - Schematic(490), - Schematic_Crafting(491), - Schematic_1by1(495), - Schematic_2by2(496), - Schematic_3by3(497), - Schematic_Dust(498), - Battery_RE_ULV_Tantalum(499), - Battery_Hull_LV(500), - Battery_Hull_MV(501), - Battery_Hull_HV(502), - BatteryHull_EV(503), - BatteryHull_IV(504), - BatteryHull_LuV(505), - BatteryHull_ZPM(506), - BatteryHull_UV(507), - Battery_SU_LV_Sulfuric_Acid(510), - Battery_SU_LV_Mercury(511), - Battery_RE_LV_Cadmium(517), - Battery_RE_LV_Lithium(518), - Battery_RE_LV_Sodium(519), - Battery_SU_MV_Sulfuric_Acid(520), - Battery_SU_MV_Mercury(521), - Battery_RE_MV_Cadmium(527), - Battery_RE_MV_Lithium(528), - Battery_RE_MV_Sodium(529), - Battery_SU_HV_Sulfuric_Acid(530), - Battery_SU_HV_Mercury(531), - Battery_RE_HV_Cadmium(537), - Battery_RE_HV_Lithium(538), - Battery_RE_HV_Sodium(539), - BatteryHull_EV_Full(540), - BatteryHull_IV_Full(545), - BatteryHull_LuV_Full(550), - BatteryHull_ZPM_Full(555), - BatteryHull_UV_Full(560), - BatteryHull_UHV(561), - BatteryHull_UEV(562), - BatteryHull_UIV(563), - BatteryHull_UMV(564), - BatteryHull_UxV(565), - BatteryHull_UHV_Full(570), - BatteryHull_UEV_Full(575), - Cover_FLuidStorageMonitor(577), - BatteryHull_UIV_Full(580), - BatteryHull_UMV_Full(585), - BatteryHull_UxV_Full(590), - ZPM4(594), - Electric_Motor_UEV(595), - Electric_Motor_UHV(596), - Energy_Lapotronic_Orb(597), - ZPM(598), - Energy_Lapotronic_orb_2(599), - Electric_Motor_LV(600), - Electric_Motor_MV(601), - Electric_Motor_HV(602), - Electric_Motor_EV(603), - Electric_Motor_IV(604), - ZPM2(605), - Electric_Motor_LuV(606), - Electric_Motor_ZPM(607), - Electric_Motor_UV(608), - ZPM3(609), - Electric_Pump_LV(610), - Electric_Pump_MV(611), - Electric_Pump_HV(612), - Electric_Pump_EV(613), - Electric_Pump_IV(614), - Electric_Pump_LuV(615), - Electric_Pump_ZPM(616), - Electric_Pump_UV(617), - Electric_Pump_UHV(618), - Electric_Pump_UEV(619), - Steam_Valve_LV(620), - Steam_Valve_MV(621), - Steam_Valve_HV(622), - Steam_Valve_EV(623), - Steam_Valve_IV(624), - Conveyor_Module_LV(630), - Conveyor_Module_MV(631), - Conveyor_Module_HV(632), - Conveyor_Module_EV(633), - Conveyor_Module_IV(634), - Conveyor_Module_LuV(635), - Conveyor_Module_ZPM(636), - Conveyor_Module_UV(637), - Conveyor_Module_UHV(638), - Conveyor_Module_UEV(639), - Electric_Piston_LV(640), - Electric_Piston_MV(641), - Electric_Piston_HV(642), - Electric_Piston_EV(643), - Electric_Piston_IV(644), - Electric_Piston_LuV(645), - Electric_Piston_ZPM(646), - Electric_Piston_UV(647), - Electric_Piston_UHV(648), - Electric_Piston_UEV(649), - Robot_Arm_LV(650), - Robot_Arm_MV(651), - Robot_Arm_HV(652), - Robot_Arm_EV(653), - Robot_Arm_IV(654), - Robot_Arm_LuV(655), - Robot_Arm_ZPM(656), - Robot_Arm_UV(657), - Robot_Arm_UHV(658), - Robot_Arm_UEV(659), - FluidRegulator_LV(660), - FluidRegulator_MV(661), - FluidRegulator_HV(662), - FluidRegulator_EV(663), - FluidRegulator_IV(664), - FluidRegulator_LuV(665), - FluidRegulator_ZPM(666), - FluidRegulator_UV(667), - Circuit_Parts_Crystal_Chip_Wetware(668), - FluidFilter(669), - Field_Generator_LV(670), - Field_Generator_MV(671), - Field_Generator_HV(672), - Field_Generator_EV(673), - Field_Generator_IV(674), - Field_Generator_LuV(675), - Field_Generator_ZPM(676), - Field_Generator_UV(677), - Field_Generator_UHV(678), - Field_Generator_UEV(679), - Emitter_LV(680), - Emitter_MV(681), - Emitter_HV(682), - Emitter_EV(683), - Emitter_IV(684), - Emitter_LuV(685), - Emitter_ZPM(686), - Emitter_UV(687), - Emitter_UHV(688), - Emitter_UEV(689), - Sensor_LV(690), - Sensor_MV(691), - Sensor_HV(692), - Sensor_EV(693), - Sensor_IV(694), - Sensor_LuV(695), - Sensor_ZPM(696), - Sensor_UV(697), - Sensor_UHV(698), - Sensor_UEV(699), - Circuit_Primitive(700), - Circuit_Basic(701), - Circuit_Good(702), - Circuit_Advanced(703), - Circuit_Data(704), - Circuit_Elite(705), - Circuit_Master(706), - Tool_DataOrb(707), - Tool_DataStick(708), - Tool_Cover_Copy_Paste(709), - Circuit_Board_Basic(710), - Circuit_Board_Advanced(711), - Circuit_Board_Elite(712), - Circuit_Parts_Crystal_Chip_Elite(713), - Circuit_Parts_Crystal_Chip_Master(714), - Circuit_Parts_Advanced(715), - Circuit_Parts_Wiring_Basic(716), - Circuit_Parts_Wiring_Advanced(717), - Circuit_Parts_Wiring_Elite(718), - Empty_Board_Basic(719), - Empty_Board_Elite(720), - Component_Sawblade_Diamond(721), - Component_Grinder_Diamond(722), - Component_Grinder_Tungsten(723), - QuantumEye(724), - QuantumStar(725), - Gravistar(726), - Upgrade_Muffler(727), - Upgrade_Lock(728), - Component_Filter(729), - Cover_Controller(730), - Cover_ActivityDetector(731), - Cover_FluidDetector(732), - Cover_ItemDetector(733), - Cover_EnergyDetector(734), - Cover_PlayerDetector(735), - Energy_Module(736), - Energy_Cluster(737), - Cover_Screen(740), - Cover_RedstoneTransmitterExternal(741), - Cover_RedstoneTransmitterInternal(742), - Cover_Crafting(744), - Cover_Drain(745), - Cover_RedstoneReceiverExternal(746), - Cover_RedstoneReceiverInternal(747), - Cover_NeedsMaintenance(748), - Cover_Shutter(749), - Cover_SolarPanel(750), - Cover_SolarPanel_8V(751), - Cover_SolarPanel_LV(752), - Cover_SolarPanel_MV(753), - Cover_SolarPanel_HV(754), - Cover_SolarPanel_EV(755), - Cover_SolarPanel_IV(756), - Cover_SolarPanel_LuV(757), - Cover_SolarPanel_ZPM(758), - Cover_SolarPanel_UV(759), - Tool_Sonictron(760), - Tool_Cheat(761), - Tool_Scanner(762), - NC_SensorKit(763), - Duct_Tape(764), - McGuffium_239(765); - - public final int ID; - - ID_MetaItem_01(int ID) { - this.ID = ID; - } -} diff --git a/src/main/java/gregtech/common/items/ID_MetaItem_02.java b/src/main/java/gregtech/common/items/ID_MetaItem_02.java deleted file mode 100644 index a13b858bd7..0000000000 --- a/src/main/java/gregtech/common/items/ID_MetaItem_02.java +++ /dev/null @@ -1,208 +0,0 @@ -package gregtech.common.items; - -public enum ID_MetaItem_02 { - - // Please pretty please, add your entries while conserving the order - ThermosCan_Dark_Coffee(0), - ThermosCan_Dark_Cafe_au_lait(1), - ThermosCan_Coffee(2), - ThermosCan_Cafe_au_lait(3), - ThermosCan_Lait_au_cafe(4), - ThermosCan_Dark_Chocolate_Milk(5), - ThermosCan_Chocolate_Milk(6), - ThermosCan_Tea(7), - ThermosCan_Sweet_Tea(8), - ThermosCan_Ice_Tea(9), - GelledToluene(10), - Bottle_Purple_Drink(100), - Bottle_Grape_Juice(101), - Bottle_Wine(102), - Bottle_Vinegar(103), - Bottle_Potato_Juice(104), - Bottle_Vodka(105), - Bottle_Leninade(106), - Bottle_Mineral_Water(107), - Bottle_Salty_Water(108), - Bottle_Reed_Water(109), - Bottle_Rum(110), - Bottle_Pirate_Brew(111), - Bottle_Hops_Juice(112), - Bottle_Dark_Beer(113), - Bottle_Dragon_Blood(114), - Bottle_Wheaty_Juice(115), - Bottle_Scotch(116), - Bottle_Glen_McKenner(117), - Bottle_Wheaty_Hops_Juice(118), - Bottle_Beer(119), - Bottle_Chilly_Sauce(120), - Bottle_Hot_Sauce(121), - Bottle_Diabolo_Sauce(122), - Bottle_Diablo_Sauce(123), - Bottle_Snitches_Glitch_Sauce(124), - Bottle_Apple_Juice(125), - Bottle_Cider(126), - Bottle_Golden_Apple_Juice(127), - Bottle_Golden_Cider(128), - Bottle_Iduns_Apple_Juice(129), - Bottle_Notches_Brew(130), - Bottle_Lemon_Juice(131), - Bottle_Limoncello(132), - Bottle_Lemonade(133), - Bottle_Alcopops(134), - Bottle_Cave_Johnsons_Grenade_Juice(135), - Bottle_Milk(136), - Bottle_Holy_Water(137), - Food_Potato_On_Stick(200), - Food_Potato_On_Stick_Roasted(201), - Food_Raw_Fries(202), - Food_Fries(203), - Food_Packaged_Fries(204), - Food_Raw_PotatoChips(205), - Food_PotatoChips(206), - Food_ChiliChips(207), - Food_Packaged_PotatoChips(208), - Food_Packaged_ChiliChips(209), - Food_Chum(210), - Food_Chum_On_Stick(211), - Food_Dough_Sugar(212), - Food_Dough_Chocolate(213), - Food_Raw_Cookie(214), - Food_Sliced_Buns(220), - Food_Burger_Veggie(221), - Food_Burger_Cheese(222), - Food_Burger_Meat(223), - Food_Burger_Chum(224), - Food_Sliced_Breads(230), - Food_Sandwich_Veggie(231), - Food_Sandwich_Cheese(232), - Food_Sandwich_Bacon(233), - Food_Sandwich_Steak(234), - Food_Sliced_Baguettes(240), - Food_Large_Sandwich_Veggie(241), - Food_Large_Sandwich_Cheese(242), - Food_Large_Sandwich_Bacon(243), - Food_Large_Sandwich_Steak(244), - Food_Raw_Pizza_Veggie(250), - Food_Raw_Pizza_Cheese(251), - Food_Raw_Pizza_Meat(252), - Food_Baked_Pizza_Veggie(260), - Food_Baked_Pizza_Cheese(261), - Food_Baked_Pizza_Meat(262), - SFMixture(270), - MSFMixture(271), - Dye_Indigo(410), - Dye_Color_00(414), - Dye_Color_01(415), - Dye_Color_02(416), - Dye_Color_03(417), - Dye_Color_04(418), - Dye_Color_05(419), - Dye_Color_06(420), - Dye_Color_07(421), - Dye_Color_08(422), - Dye_Color_09(423), - Dye_Color_10(424), - Dye_Color_11(425), - Dye_Color_12(426), - Dye_Color_13(427), - Dye_Color_14(428), - Dye_Color_15(429), - Plank_Oak(470), - Plank_Spruce(471), - Plank_Birch(472), - Plank_Jungle(473), - Plank_Acacia(474), - Plank_DarkOak(475), - Plank_Larch(476), - Plank_Teak(477), - Plank_Acacia_Green(478), - Plank_Lime(479), - Plank_Chestnut(480), - Plank_Wenge(481), - Plank_Baobab(482), - Plank_Sequoia(483), - Plank_Kapok(484), - Plank_Ebony(485), - Plank_Mahagony(486), - Plank_Balsa(487), - Plank_Willow(488), - Plank_Walnut(489), - Plank_Greenheart(490), - Plank_Cherry(491), - Plank_Mahoe(492), - Plank_Poplar(493), - Plank_Palm(494), - Plank_Papaya(495), - Plank_Pine(496), - Plank_Plum(497), - Plank_Maple(498), - Plank_Citrus(499), - Crop_Drop_Plumbilia(500), - Crop_Drop_Argentia(501), - Crop_Drop_Indigo(502), - Crop_Drop_Ferru(503), - Crop_Drop_Aurelia(504), - Crop_Drop_TeaLeaf(505), - Crop_Drop_OilBerry(510), - Crop_Drop_BobsYerUncleRanks(511), - Crop_Drop_UUMBerry(512), - Crop_Drop_UUABerry(513), - Crop_Drop_MilkWart(520), - Crop_Drop_Bauxite(521), - Crop_Drop_Ilmenite(522), - Crop_Drop_Pitchblende(523), - Crop_Drop_Uraninite(524), - Crop_Drop_Thorium(526), - Crop_Drop_Nickel(527), - Crop_Drop_Zinc(528), - Crop_Drop_Manganese(529), - Crop_Drop_Coppon(530), - Crop_Drop_Scheelite(531), - Crop_Drop_Platinum(532), - Crop_Drop_Iridium(533), - Crop_Drop_Osmium(534), - Crop_Drop_Naquadah(535), - Crop_Drop_Mica(538), - Crop_Drop_Tine(540), - Crop_Drop_Chilly(550), - Crop_Drop_Lemon(551), - Crop_Drop_Tomato(552), - Crop_Drop_MTomato(553), - Crop_Drop_Grapes(554), - Crop_Drop_Onion(555), - Crop_Drop_Cucumber(556), - Crop_Drop_Rape(557), - Food_Cheese(558), - Food_Dough(559), - Food_Flat_Dough(560), - Food_Raw_Bread(561), - Food_Raw_Bun(562), - Food_Raw_Baguette(563), - Food_Baked_Bun(564), - Food_Baked_Baguette(565), - Food_Sliced_Bread(566), - Food_Sliced_Bun(567), - Food_Sliced_Baguette(568), - Food_Raw_Cake(569), - Food_Baked_Cake(570), - Food_Sliced_Lemon(571), - Food_Sliced_Tomato(572), - Food_Sliced_Onion(573), - Food_Sliced_Cucumber(574), - Food_Sliced_Cheese(576), - Cover_AdvancedRedstoneTransmitterExternal(577), - Cover_AdvancedRedstoneTransmitterInternal(578), - Cover_AdvancedRedstoneReceiverExternal(579), - Cover_AdvancedRedstoneReceiverInternal(580), - Cover_WirelessFluidDetector(581), - Cover_WirelessItemDetector(582), - Cover_WirelessNeedsMaintainance(583), - Cover_WirelessActivityDetector(584), - Display_ITS_FREE(765); - - public final int ID; - - ID_MetaItem_02(int ID) { - this.ID = ID; - } -} diff --git a/src/main/java/gregtech/common/items/ID_MetaItem_03.java b/src/main/java/gregtech/common/items/ID_MetaItem_03.java deleted file mode 100644 index 64b3f07249..0000000000 --- a/src/main/java/gregtech/common/items/ID_MetaItem_03.java +++ /dev/null @@ -1,242 +0,0 @@ -package gregtech.common.items; - -public enum ID_MetaItem_03 { - - // Please pretty please, add your entries while conserving the order - Circuit_Board_Wetware(6), - Circuit_Board_Plastic(7), - Circuit_Board_Bio(8), - Circuit_Parts_ResistorSMD(11), - Circuit_Parts_Glass_Tube(12), - Circuit_Parts_Coil(14), - Circuit_Parts_DiodeSMD(16), - Circuit_Parts_TransistorSMD(18), - Circuit_Parts_CapacitorSMD(20), - Circuit_Parts_GlassFiber(21), - Circuit_Parts_PetriDish(22), - Circuit_Parts_Reinforced_Glass_Tube(23), - Circuit_Parts_ResistorASMD(24), - Circuit_Parts_DiodeASMD(25), - Circuit_Parts_TransistorASMD(26), - Circuit_Parts_CapacitorASMD(27), - Circuit_Silicon_Ingot(30), - Circuit_Silicon_Ingot2(31), - Circuit_Silicon_Ingot3(32), - Circuit_Silicon_Wafer(33), - Circuit_Silicon_Wafer2(34), - Circuit_Silicon_Wafer3(35), - Circuit_Wafer_ILC(36), - Circuit_Chip_ILC(37), - Circuit_Wafer_Ram(38), - Circuit_Chip_Ram(39), - Circuit_Wafer_NAND(40), - Circuit_Chip_NAND(41), - Circuit_Wafer_NOR(42), - Circuit_Chip_NOR(43), - Circuit_Wafer_CPU(44), - Circuit_Chip_CPU(45), - Circuit_Wafer_SoC(46), - Circuit_Chip_SoC(47), - Circuit_Wafer_SoC2(48), - Circuit_Chip_SoC2(49), - Circuit_Wafer_PIC(50), - Circuit_Chip_PIC(51), - Circuit_Wafer_HPIC(52), - Circuit_Chip_HPIC(53), - Circuit_Wafer_NanoCPU(54), - Circuit_Chip_NanoCPU(55), - Circuit_Wafer_QuantumCPU(56), - Circuit_Chip_QuantumCPU(57), - Circuit_Wafer_UHPIC(58), - Circuit_Chip_UHPIC(59), - Circuit_Wafer_Simple_SoC(60), - Circuit_Chip_Simple_SoC(61), - Circuit_Wafer_ULPIC(62), - Circuit_Chip_ULPIC(63), - Circuit_Wafer_LPIC(64), - Circuit_Chip_LPIC(65), - Circuit_Chip_CrystalSoC2(68), - Circuit_Parts_RawCrystalChip(69), - Circuit_Chip_CrystalCPU(70), - Circuit_Chip_CrystalSoC(71), - Circuit_Chip_NeuroCPU(72), - Circuit_Chip_Stemcell(73), - Circuit_Parts_RawCrystalParts(74), - NandChip(75), - Circuit_Chip_Biocell(76), - Circuit_Chip_BioCPU(77), - Circuit_Microprocessor(78), - Circuit_Integrated_Good(79), - Circuit_Processor(80), - Circuit_Nanoprocessor(82), - Circuit_Nanocomputer(83), - Circuit_Elitenanocomputer(84), - Circuit_Quantumprocessor(85), - Circuit_Quantumcomputer(86), - Circuit_Masterquantumcomputer(87), - Circuit_Quantummainframe(88), - Circuit_Crystalprocessor(89), - Circuit_Ultimatecrystalcomputer(90), - Circuit_Crystalmainframe(91), - Circuit_Neuroprocessor(92), - Circuit_Wetwarecomputer(93), - Circuit_Wetwaresupercomputer(94), - Circuit_Wetwaremainframe(95), - Circuit_Crystalcomputer(96), - Circuit_Bioprocessor(97), - Circuit_Biowarecomputer(98), - Circuit_Biowaresupercomputer(99), - Circuit_Board_Coated_Basic(100), - Circuit_Board_Phenolic_Good(101), - Circuit_Board_Epoxy_Advanced(102), - Circuit_Board_Fiberglass_Advanced(103), - Circuit_Board_Multifiberglass_Elite(104), - Circuit_Board_Wetware_Extreme(105), - Circuit_Board_Plastic_Advanced(106), - Circuit_Board_Bio_Ultra(107), - Tube_Wires(110), - Circuit_Biomainframe(120), - Cover_SolarPanel_UHV(130), - Cover_SolarPanel_UEV(131), - Cover_SolarPanel_UIV(132), - ULV_Coil(140), - LV_Coil(141), - MV_Coil(142), - HV_Coil(143), - EV_Coil(144), - IV_Coil(145), - LuV_Coil(146), - ZPM_Coil(147), - UV_Coil(148), - UHV_Coil(149), - Circuit_Silicon_Ingot4(150), - Circuit_Silicon_Wafer4(151), - Circuit_Silicon_Ingot5(152), - Circuit_Silicon_Wafer5(153), - Circuit_OpticalProcessor(154), - Circuit_OpticalAssembly(155), - Circuit_OpticalComputer(156), - Circuit_OpticalMainframe(157), - Circuit_Wafer_NPIC(160), - Circuit_Chip_NPIC(161), - Circuit_Wafer_PPIC(162), - Circuit_Chip_PPIC(163), - Circuit_Wafer_QPIC(164), - Circuit_Chip_QPIC(165), - Circuit_ExoticProcessor(166), - Circuit_ExoticAssembly(167), - Circuit_ExoticComputer(168), - Circuit_ExoticMainframe(169), - Circuit_CosmicProcessor(170), - Circuit_CosmicAssembly(171), - Circuit_CosmicComputer(172), - Circuit_CosmicMainframe(173), - Circuit_TranscendentProcessor(174), - Circuit_TranscendentAssembly(175), - Circuit_TranscendentComputer(176), - Circuit_TranscendentMainframe(177), - Circuit_Parts_ResistorXSMD(178), - Circuit_Parts_DiodeXSMD(179), - Circuit_Parts_TransistorXSMD(180), - Circuit_Parts_CapacitorXSMD(181), - Circuit_Parts_InductorSMD(182), - Circuit_Parts_InductorASMD(183), - Circuit_Parts_InductorXSMD(184), - Circuit_Wafer_Bioware(188), - Circuit_Parts_Chip_Bioware(189), - GalliumArsenideCrystal(190), - GalliumArsenideCrystalSmallPart(191), - KevlarFiber(192), - WovenKevlar(193), - Spinneret(194), - IndustrialApiary_Upgrade_Frame(199), - IndustrialApiary_Upgrade_Acceleration_1(200), - IndustrialApiary_Upgrade_Acceleration_2(201), - IndustrialApiary_Upgrade_Acceleration_3(202), - IndustrialApiary_Upgrade_Acceleration_4(203), - IndustrialApiary_Upgrade_Acceleration_5(204), - IndustrialApiary_Upgrade_Acceleration_6(205), - IndustrialApiary_Upgrade_Acceleration_7(206), - IndustrialApiary_Upgrade_Acceleration_8(207), - IndustrialApiary_Upgrade_Acceleration_8_Upgraded(208), - IndustrialApiary_Upgrade_PRODUCTION(209), - IndustrialApiary_Upgrade_PLAINS(210), - IndustrialApiary_Upgrade_LIGHT(211), - IndustrialApiary_Upgrade_FLOWERING(212), - IndustrialApiary_Upgrade_WINTER(213), - IndustrialApiary_Upgrade_DRYER(214), - IndustrialApiary_Upgrade_AUTOMATION(215), - IndustrialApiary_Upgrade_HUMIDIFIER(216), - IndustrialApiary_Upgrade_HELL(217), - IndustrialApiary_Upgrade_POLLEN(218), - IndustrialApiary_Upgrade_DESERT(219), - IndustrialApiary_Upgrade_COOLER(220), - IndustrialApiary_Upgrade_LIFESPAN(221), - IndustrialApiary_Upgrade_SEAL(222), - IndustrialApiary_Upgrade_STABILIZER(223), - IndustrialApiary_Upgrade_JUNGLE(224), - IndustrialApiary_Upgrade_TERRITORY(225), - IndustrialApiary_Upgrade_OCEAN(226), - IndustrialApiary_Upgrade_SKY(227), - IndustrialApiary_Upgrade_HEATER(228), - IndustrialApiary_Upgrade_SIEVE(229), - NuclearStar(230), - IndustrialApiary_Upgrade_UNLIGHT(231), - Cover_Metrics_Transmitter(232), - Activated_Carbon_Filter_Mesh(233), - Quark_Catalyst_Housing(234), - Quark_Creation_Catalyst_Up(235), - Quark_Creation_Catalyst_Down(236), - Quark_Creation_Catalyst_Strange(237), - Quark_Creation_Catalyst_Charm(238), - Quark_Creation_Catalyst_Bottom(239), - Quark_Creation_Catalyst_Top(240), - Quark_Creation_Catalyst_Unaligned(241), - Circuit_Silicon_Ingot6(721), - Circuit_Silicon_Wafer6(722), - Circuit_Silicon_Wafer7(723), - Circuit_Chip_Optical(724), - Optically_Compatible_Memory(725), - Optically_Perfected_CPU(726), - Optical_Cpu_Containment_Housing(727), - Circuit_Board_Optical(728), - White_Dwarf_Shape_Extruder_Plate(729), - White_Dwarf_Shape_Extruder_Rod(730), - White_Dwarf_Shape_Extruder_Bolt(731), - White_Dwarf_Shape_Extruder_Ring(732), - White_Dwarf_Shape_Extruder_Cell(733), - White_Dwarf_Shape_Extruder_Ingot(734), - White_Dwarf_Shape_Extruder_Wire(735), - White_Dwarf_Shape_Extruder_Casing(736), - White_Dwarf_Shape_Extruder_Pipe_Tiny(737), - White_Dwarf_Shape_Extruder_Pipe_Small(738), - White_Dwarf_Shape_Extruder_Pipe_Medium(739), - White_Dwarf_Shape_Extruder_Pipe_Large(740), - White_Dwarf_Shape_Extruder_Pipe_Huge(741), - White_Dwarf_Shape_Extruder_Block(742), - White_Dwarf_Shape_Extruder_Sword(743), - White_Dwarf_Shape_Extruder_Pickaxe(744), - White_Dwarf_Shape_Extruder_Shovel(745), - White_Dwarf_Shape_Extruder_Axe(746), - White_Dwarf_Shape_Extruder_Hoe(747), - White_Dwarf_Shape_Extruder_Hammer(748), - White_Dwarf_Shape_Extruder_File(749), - White_Dwarf_Shape_Extruder_Saw(750), - White_Dwarf_Shape_Extruder_Gear(751), - White_Dwarf_Shape_Extruder_Bottle(752), - White_Dwarf_Shape_Extruder_Rotor(753), - White_Dwarf_Shape_Extruder_Small_Gear(754), - White_Dwarf_Shape_Extruder_Turbine_Blade(755), - White_Dwarf_Shape_Extruder_ToolHeadDrill(756), - Timepiece(757), - Transdimensional_Alignment_Matrix(758), - Thermal_Superconductor(759), - Relativistic_Heat_Capacitor(760), - Phononic_Seed_Crystal(761); - - public final int ID; - - ID_MetaItem_03(int ID) { - this.ID = ID; - } -} diff --git a/src/main/java/gregtech/common/items/ID_MetaTool_01.java b/src/main/java/gregtech/common/items/ID_MetaTool_01.java deleted file mode 100644 index 195bd1aef8..0000000000 --- a/src/main/java/gregtech/common/items/ID_MetaTool_01.java +++ /dev/null @@ -1,73 +0,0 @@ -package gregtech.common.items; - -public enum ID_MetaTool_01 { - - // Please pretty please, add your entries while conserving the order - SWORD(0), - PICKAXE(2), - SHOVEL(4), - AXE(6), - HOE(8), - SAW(10), - HARDHAMMER(12), - SOFTMALLET(14), - @Deprecated - SOFTHAMMER(14), - WRENCH(16), - FILE(18), - CROWBAR(20), - SCREWDRIVER(22), - MORTAR(24), - WIRECUTTER(26), - SCOOP(28), - BRANCHCUTTER(30), - UNIVERSALSPADE(32), - KNIFE(34), - BUTCHERYKNIFE(36), - @Deprecated - SICKLE(38), - SENSE(40), - PLOW(42), - PLUNGER(44), - ROLLING_PIN(46), - DRILL_LV(100), - DRILL_MV(102), - DRILL_HV(104), - CHAINSAW_LV(110), - CHAINSAW_MV(112), - CHAINSAW_HV(114), - WRENCH_LV(120), - WRENCH_MV(122), - WRENCH_HV(124), - JACKHAMMER(130), - BUZZSAW_LV(140), - @Deprecated - BUZZSAW(140), - BUZZSAW_MV(142), - BUZZSAW_HV(144), - SCREWDRIVER_LV(150), - SCREWDRIVER_MV(152), - SCREWDRIVER_HV(154), - SOLDERING_IRON_LV(160), - SOLDERING_IRON_MV(162), - SOLDERING_IRON_HV(164), - TURBINE_SMALL(170), - TURBINE(172), - TURBINE_LARGE(174), - TURBINE_HUGE(176), - @Deprecated - TURBINE_BLADE(178), - POCKET_MULTITOOL(180), - POCKET_BRANCHCUTTER(182), - POCKET_FILE(184), - POCKET_KNIFE(186), - POCKET_SAW(188), - POCKET_SCREWDRIVER(190), - POCKET_WIRECUTTER(192); - - public final int ID; - - ID_MetaTool_01(int ID) { - this.ID = ID; - } -} diff --git a/src/main/java/gregtech/common/items/ItemAdvancedSensorCard.java b/src/main/java/gregtech/common/items/ItemAdvancedSensorCard.java new file mode 100644 index 0000000000..8c68951bb7 --- /dev/null +++ b/src/main/java/gregtech/common/items/ItemAdvancedSensorCard.java @@ -0,0 +1,330 @@ +package gregtech.common.items; + +import static gregtech.api.enums.Mods.GregTech; +import static gregtech.common.covers.CoverMetricsTransmitter.CARD_STATE_KEY; +import static gregtech.common.covers.CoverMetricsTransmitter.FREQUENCY_LSB_KEY; +import static gregtech.common.covers.CoverMetricsTransmitter.FREQUENCY_MSB_KEY; +import static gregtech.common.covers.CoverMetricsTransmitter.MACHINE_KEY; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; +import java.util.function.Predicate; +import java.util.stream.IntStream; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.common.misc.GlobalMetricsCoverDatabase; +import gregtech.common.misc.GlobalMetricsCoverDatabase.State; +import shedar.mods.ic2.nuclearcontrol.api.CardState; +import shedar.mods.ic2.nuclearcontrol.api.ICardWrapper; +import shedar.mods.ic2.nuclearcontrol.api.IPanelDataSource; +import shedar.mods.ic2.nuclearcontrol.api.PanelSetting; +import shedar.mods.ic2.nuclearcontrol.api.PanelString; + +@SuppressWarnings("unused") +public class ItemAdvancedSensorCard extends Item implements IPanelDataSource { + + public static final UUID CARD_TYPE_ID = UUID.fromString("ff952e84-7608-4c4a-85af-dd6e1aa27fc7"); + + // This has obfuscated formatting, so no need to localize it. + private static final String SELF_DESTRUCTED_OUTPUT = EnumChatFormatting.OBFUSCATED + "critical error" + + EnumChatFormatting.RESET; + + private static final ImmutableList DECONSTRUCTED_OUTPUT = ImmutableList.of( + StatCollector.translateToLocal("gt.item.adv_sensor_card.error.deconstructed.1"), + StatCollector.translateToLocal("gt.item.adv_sensor_card.error.deconstructed.2")); + + private static final String NO_DATA_FOUND = StatCollector.translateToLocal("gt.item.adv_sensor_card.error.no_data"); + + private static final String MACHINE_NAME_KEY = "client_machine_name"; + private static final String OUTPUT_ENTRY_KEY = "client_entry_%d"; + private static final String OUTPUT_ENTRY_LENGTH_KEY = "client_entry_length"; + + private int payloadSize = 0; + + @SideOnly(Side.CLIENT) + private IIcon normalIcon; + @SideOnly(Side.CLIENT) + private IIcon selfDestructedIcon; + + @SuppressWarnings("unused") + public ItemAdvancedSensorCard() { + super(); + + GameRegistry.registerItem(this, "gt.advancedsensorcard", GregTech.ID); + setUnlocalizedName("gt.advancedsensorcard"); + setMaxStackSize(1); + setNoRepair(); + } + + @Override + public void addInformation(final ItemStack itemStack, final EntityPlayer player, final List tooltip, + final boolean p_77624_4_) { + super.addInformation(itemStack, player, tooltip, p_77624_4_); + + final Optional cardState = getCardState(itemStack); + if (cardState.isPresent()) { + final State state = cardState.get(); + + if (state == State.SELF_DESTRUCTED) { + tooltip.add(StatCollector.translateToLocal("gt.item.adv_sensor_card.tooltip.fried.1")); + tooltip.add(StatCollector.translateToLocal("gt.item.adv_sensor_card.tooltip.fried.2")); + tooltip.add(StatCollector.translateToLocal("gt.item.adv_sensor_card.tooltip.fried.3")); + } else { + getMachineName(itemStack).ifPresent( + machineName -> tooltip.add( + StatCollector + .translateToLocalFormatted("gt.item.adv_sensor_card.tooltip.machine", machineName))); + getUUID(itemStack).ifPresent( + uuid -> tooltip.add( + StatCollector + .translateToLocalFormatted("gt.item.adv_sensor_card.tooltip.frequency", uuid.toString()))); + } + } else { + tooltip.add(StatCollector.translateToLocal("gt.item.adv_sensor_card.tooltip.recipe_hint")); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aOutputSubItems) {} + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister aIconRegister) { + super.registerIcons(aIconRegister); + itemIcon = aIconRegister.registerIcon(GregTech.ID + ":gt.advancedsensorcard"); + normalIcon = itemIcon; + selfDestructedIcon = aIconRegister.registerIcon(GregTech.ID + ":gt.advancedsensorcardburned"); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final ItemStack stack, final int renderPass) { + return getIconIndex(stack); + } + + @Override + public IIcon getIconIndex(final ItemStack itemStack) { + return getCardState(itemStack).filter(Predicate.isEqual(State.SELF_DESTRUCTED)) + .map(ignored -> selfDestructedIcon) + .orElse(normalIcon); + } + + @Override + public CardState update(TileEntity tileEntity, ICardWrapper card, int maxRange) { + return update(tileEntity.getWorldObj(), card, maxRange); + } + + @Override + public CardState update(World world, ICardWrapper card, int maxRange) { + final Optional optionalData = getDataFromDatabase(card); + + optionalData.ifPresent(data -> { + final State machineState = data.getState(); + reconcileSelfDestructedCard(card.getItemStack(), machineState); + card.setInt(CARD_STATE_KEY, machineState.getType()); + + getMachineName(card.getItemStack()) + .ifPresent(name -> card.setString(MACHINE_NAME_KEY, machineState == State.SELF_DESTRUCTED ? "" : name)); + + final ImmutableList.Builder builder = ImmutableList.builder(); + switch (machineState) { + case SELF_DESTRUCTED -> builder.add(SELF_DESTRUCTED_OUTPUT); + case HOST_DECONSTRUCTED -> builder.addAll(DECONSTRUCTED_OUTPUT); + case OPERATIONAL -> { + data.getCoordinates() + .ifPresent( + coordinates -> builder.add( + StatCollector.translateToLocalFormatted( + "gt.item.adv_sensor_card.dimension", + coordinates.getDimension()), + StatCollector.translateToLocalFormatted( + "gt.item.adv_sensor_card.coords", + coordinates.getLocalizedCoordinates()))); + + data.getPayload() + .ifPresent(builder::addAll); + } + default -> builder.add(NO_DATA_FOUND); + } + + final List payload = builder.build(); + card.setInt(OUTPUT_ENTRY_LENGTH_KEY, payload.size()); + for (int i = 0; i < payload.size(); i++) { + final String payloadItem = payload.get(i); + if (!payloadItem.isEmpty()) { + card.setString(String.format(OUTPUT_ENTRY_KEY, i), payloadItem); + } + } + }); + + return CardState.OK; + } + + @Override + public List getStringData(final int displaySettings, final ICardWrapper card, + final boolean showLabels) { + final List returned = new ArrayList<>(); + final String machineName = card.getString(MACHINE_NAME_KEY); + final int bitmaskOffset; + + payloadSize = card.getInt(OUTPUT_ENTRY_LENGTH_KEY); + + if (!machineName.isEmpty() && (displaySettings & 1) != 0) { + returned.add(panelString(machineName, true)); + payloadSize += 1; + bitmaskOffset = 1; + } else { + bitmaskOffset = 0; + } + + // Not reusing payloadSize here because it can be conditionally mutated. + IntStream.range(0, card.getInt(OUTPUT_ENTRY_LENGTH_KEY)) + .forEach(i -> { + if ((displaySettings & 1 << (i + bitmaskOffset)) != 0) { + returned.add(panelString(card.getString(String.format(OUTPUT_ENTRY_KEY, i)))); + } + }); + + return returned; + } + + @Override + public List getSettingsList() { + return payloadSize == 0 ? ImmutableList.of() + : ImmutableList.copyOf( + IntStream.range(0, Math.min(payloadSize, 31)) + .mapToObj(i -> new PanelSetting(String.valueOf(i + 1), 1 << i, getCardType())) + .iterator()); + } + + @Override + public UUID getCardType() { + return CARD_TYPE_ID; + } + + @Override + public void onUpdate(ItemStack stack, World worldIn, Entity entityIn, int slot, boolean isHeld) { + super.onUpdate(stack, worldIn, entityIn, slot, isHeld); + // At the time of this comment's writing, there are 52 matches of the regex: + // /% \d+0 \)?\s*== 0/ in the code base, indicating an over-reliance on events happening on either the 10th or + // 20th tick. Let's tick on something slightly off of that. A prime number will do nicely. + if ((worldIn.getWorldTime() % 20) == 13) { + getDataFromDatabase(stack).ifPresent(data -> { + reconcileSelfDestructedCard(stack, data.getState()); + if (!stack.hasTagCompound()) { + stack.setTagCompound(new NBTTagCompound()); + } + + stack.getTagCompound() + .setInteger( + CARD_STATE_KEY, + data.getState() + .getType()); + }); + } + } + + private void reconcileSelfDestructedCard(ItemStack stack, State newState) { + getUUID(stack).ifPresent(uuid -> getCardState(stack).ifPresent(oldState -> { + if (newState == State.SELF_DESTRUCTED && oldState != State.SELF_DESTRUCTED) { + GlobalMetricsCoverDatabase.clearSelfDestructedFrequency(uuid); + } + })); + + } + + @NotNull + private Optional getCardState(ICardWrapper card) { + return getCardState(card.getItemStack()); + } + + @NotNull + private Optional getCardState(ItemStack itemStack) { + if (itemStack.hasTagCompound() && itemStack.getTagCompound() + .hasKey(CARD_STATE_KEY)) { + return State.find( + itemStack.getTagCompound() + .getInteger(CARD_STATE_KEY)); + } + + return Optional.empty(); + } + + @NotNull + private Optional getUUID(ItemStack stack) { + if (stack.hasTagCompound()) { + NBTTagCompound nbt = stack.getTagCompound(); + if (nbt.hasKey(FREQUENCY_LSB_KEY) && nbt.hasKey(FREQUENCY_MSB_KEY)) { + return Optional.of(new UUID(nbt.getLong(FREQUENCY_MSB_KEY), nbt.getLong(FREQUENCY_LSB_KEY))); + } + } + + return Optional.empty(); + } + + @NotNull + private Optional getMachineName(ItemStack stack) { + if (stack.hasTagCompound() && stack.getTagCompound() + .hasKey(MACHINE_KEY)) { + try { + final ItemStack machine = ItemStack.loadItemStackFromNBT( + stack.getTagCompound() + .getCompoundTag(MACHINE_KEY)); + if (machine != null) { + return Optional.of(machine.getDisplayName()); + } + } catch (Exception ignored) {} + } + + return Optional.empty(); + } + + @NotNull + private Optional getDataFromDatabase(ICardWrapper card) { + return getDataFromDatabase(card.getItemStack()); + } + + @NotNull + private Optional getDataFromDatabase(ItemStack stack) { + return getUUID(stack).flatMap(GlobalMetricsCoverDatabase::getData); + } + + @NotNull + private static PanelString panelString(String info) { + return panelString(info, false); + } + + @NotNull + private static PanelString panelString(String info, boolean center) { + final PanelString panelString = new PanelString(); + if (center) { + panelString.textCenter = info; + } else { + panelString.textLeft = info; + } + return panelString; + + } +} diff --git a/src/main/java/gregtech/common/items/ItemComb.java b/src/main/java/gregtech/common/items/ItemComb.java index eaecd19f73..68cd902d86 100644 --- a/src/main/java/gregtech/common/items/ItemComb.java +++ b/src/main/java/gregtech/common/items/ItemComb.java @@ -1,9 +1,9 @@ package gregtech.common.items; -import static gregtech.api.enums.GT_Values.L; -import static gregtech.api.enums.GT_Values.NF; -import static gregtech.api.enums.GT_Values.NI; -import static gregtech.api.enums.GT_Values.V; +import static gregtech.api.enums.GTValues.L; +import static gregtech.api.enums.GTValues.NF; +import static gregtech.api.enums.GTValues.NI; +import static gregtech.api.enums.GTValues.V; import static gregtech.api.enums.Mods.AE2FluidCraft; import static gregtech.api.enums.Mods.ExtraBees; import static gregtech.api.enums.Mods.ExtraUtilities; @@ -17,9 +17,9 @@ import static gregtech.api.enums.Mods.ThaumicBases; import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.CLEANROOM; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.CLEANROOM; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; import java.util.Arrays; import java.util.List; @@ -43,17 +43,17 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import forestry.api.core.Tabs; import forestry.api.recipes.RecipeManagers; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_Utility; -import gregtech.common.render.items.GT_GeneratedMaterial_Renderer; -import gregtech.loaders.misc.GT_Bees; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTUtility; +import gregtech.common.render.items.GeneratedMaterialRenderer; +import gregtech.loaders.misc.GTBees; public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { @@ -113,7 +113,7 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { @SideOnly(Side.CLIENT) public int getColorFromItemStack(ItemStack stack, int pass) { CombType type = CombType.valueOf(stack.getItemDamage()); - return type.getColours()[GT_Utility.clamp(pass, 0, 1)]; + return type.getColours()[GTUtility.clamp(pass, 0, 1)]; } @Override @@ -133,7 +133,7 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { } @Override - public GT_GeneratedMaterial_Renderer getMaterialRenderer(int aMetaData) { + public GeneratedMaterialRenderer getMaterialRenderer(int aMetaData) { return CombType.valueOf(aMetaData).material.renderer; } @@ -191,17 +191,17 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { addCentrifugeToItemStack( CombType.LIGNIE, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Lignite, 1), ItemList.FR_Wax.get(1) }, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.gem, Materials.Lignite, 1), ItemList.FR_Wax.get(1) }, new int[] { 90 * 100, 50 * 100 }, Voltage.ULV); addCentrifugeToItemStack( CombType.COAL, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 1), ItemList.FR_Wax.get(1) }, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 1), ItemList.FR_Wax.get(1) }, new int[] { 5 * 100, 50 * 100 }, Voltage.ULV); addCentrifugeToItemStack( CombType.OIL, - new ItemStack[] { ItemList.Crop_Drop_OilBerry.get(6), GT_Bees.drop.getStackForType(DropType.OIL), + new ItemStack[] { ItemList.Crop_Drop_OilBerry.get(6), GTBees.drop.getStackForType(DropType.OIL), ItemList.FR_Wax.get(1) }, new int[] { 100 * 100, 100 * 100, 50 * 100 }, Voltage.ULV); @@ -209,22 +209,22 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { // ic2 addCentrifugeToItemStack( CombType.COOLANT, - new ItemStack[] { GT_Bees.drop.getStackForType(DropType.COOLANT), ItemList.FR_Wax.get(1) }, + new ItemStack[] { GTBees.drop.getStackForType(DropType.COOLANT), ItemList.FR_Wax.get(1) }, new int[] { 100 * 100, 100 * 100 }, Voltage.HV, 196); addCentrifugeToItemStack( CombType.ENERGY, - new ItemStack[] { GT_Bees.drop.getStackForType(DropType.HOT_COOLANT), ItemList.IC2_Energium_Dust.get(1L), + new ItemStack[] { GTBees.drop.getStackForType(DropType.HOT_COOLANT), ItemList.IC2_Energium_Dust.get(1L), ItemList.FR_RefractoryWax.get(1) }, new int[] { 20 * 100, 20 * 100, 50 * 100 }, Voltage.HV, 196); addCentrifugeToItemStack( CombType.LAPOTRON, - new ItemStack[] { GT_Bees.drop.getStackForType(DropType.LAPIS), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.LapotronDust", 1, 0), - GT_ModHandler.getModItem(MagicBees.ID, "wax", 1, 2) }, + new ItemStack[] { GTBees.drop.getStackForType(DropType.LAPIS), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.LapotronDust", 1, 0), + GTModHandler.getModItem(MagicBees.ID, "wax", 1, 2) }, new int[] { 20 * 100, 100 * 100, 40 * 100 }, Voltage.HV, 240); @@ -260,8 +260,8 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { addCentrifugeToItemStack( CombType.ENDERIUM, new ItemStack[] { ItemList.FR_RefractoryWax.get(1), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.EnderiumBase, 1), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Enderium, 1) }, + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.EnderiumBase, 1), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Enderium, 1) }, new int[] { 50 * 100, 30 * 100, 50 * 100 }, Voltage.HV); @@ -350,31 +350,31 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { addProcessGT(CombType.THAUMIUMDUST, new Materials[] { Materials.Thaumium }, Voltage.MV); addCentrifugeToItemStack( CombType.THAUMIUMSHARD, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1, 1), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1, 2), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1, 3), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1, 4), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1, 5), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1, 6), - GT_ModHandler.getModItem(MagicBees.ID, "wax", 1, 0) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "propolis", 1, 1), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1, 2), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1, 3), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1, 4), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1, 5), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1, 6), + GTModHandler.getModItem(MagicBees.ID, "wax", 1, 0) }, new int[] { 20 * 100, 20 * 100, 20 * 100, 20 * 100, 20 * 100, 20 * 100, 50 * 100 }, Voltage.ULV); addProcessGT(CombType.AMBER, new Materials[] { Materials.Amber }, Voltage.LV); addProcessGT(CombType.QUICKSILVER, new Materials[] { Materials.Cinnabar }, Voltage.LV); addCentrifugeToItemStack( CombType.SALISMUNDUS, - new ItemStack[] { GT_ModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1, 14), - GT_ModHandler.getModItem(MagicBees.ID, "wax", 1, 0) }, + new ItemStack[] { GTModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1, 14), + GTModHandler.getModItem(MagicBees.ID, "wax", 1, 0) }, new int[] { 100 * 100, 50 * 100 }, Voltage.MV); addCentrifugeToItemStack( CombType.TAINTED, - new ItemStack[] { GT_ModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1, 11), - GT_ModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1, 12), - GT_ModHandler.getModItem(Thaumcraft.ID, "blockTaintFibres", 1, 0), - GT_ModHandler.getModItem(Thaumcraft.ID, "blockTaintFibres", 1, 1), - GT_ModHandler.getModItem(Thaumcraft.ID, "blockTaintFibres", 1, 2), - GT_ModHandler.getModItem(MagicBees.ID, "wax", 1, 0) }, + new ItemStack[] { GTModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1, 11), + GTModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1, 12), + GTModHandler.getModItem(Thaumcraft.ID, "blockTaintFibres", 1, 0), + GTModHandler.getModItem(Thaumcraft.ID, "blockTaintFibres", 1, 1), + GTModHandler.getModItem(Thaumcraft.ID, "blockTaintFibres", 1, 2), + GTModHandler.getModItem(MagicBees.ID, "wax", 1, 0) }, new int[] { 15 * 100, 15 * 100, 15 * 100, 15 * 100, 15 * 100, 50 * 100 }, Voltage.ULV); addProcessGT(CombType.MITHRIL, new Materials[] { Materials.Mithril }, Voltage.HV); @@ -385,13 +385,13 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { new int[] { 20 * 100, 10 * 100 }, new int[] {}, Voltage.HV, - GT_ModHandler.getModItem(MagicBees.ID, "wax", 1, 0), + GTModHandler.getModItem(MagicBees.ID, "wax", 1, 0), 50 * 100); addCentrifugeToItemStack( CombType.THAUMINITE, - new ItemStack[] { GT_ModHandler.getModItem(ThaumicBases.ID, "resource", 1, 0), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Thaumium, 1), - GT_ModHandler.getModItem(MagicBees.ID, "wax", 1, 0) }, + new ItemStack[] { GTModHandler.getModItem(ThaumicBases.ID, "resource", 1, 0), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Thaumium, 1), + GTModHandler.getModItem(MagicBees.ID, "wax", 1, 0) }, new int[] { 20 * 100, 10 * 100, 50 * 100 }, Voltage.HV); addProcessGT(CombType.SHADOWMETAL, new Materials[] { Materials.Shadow }, Voltage.HV); @@ -401,23 +401,23 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { new int[] { 20 * 100, 10 * 100 }, new int[] {}, Voltage.HV, - GT_ModHandler.getModItem(MagicBees.ID, "wax", 1, 0), + GTModHandler.getModItem(MagicBees.ID, "wax", 1, 0), 50 * 100); addProcessGT(CombType.DIVIDED, new Materials[] { Materials.Diamond }, Voltage.HV); addCentrifugeToItemStack( CombType.DIVIDED, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1, 0), - GT_ModHandler.getModItem(ExtraUtilities.ID, "unstableingot", 1, 1), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Iron, 1), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Diamond, 1) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1, 0), + GTModHandler.getModItem(ExtraUtilities.ID, "unstableingot", 1, 1), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Iron, 1), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Diamond, 1) }, new int[] { 50 * 100, 20 * 100, 10 * 100, 5 * 100 }, Voltage.HV); addProcessGT(CombType.SPARKLING, new Materials[] { Materials.NetherStar }, Voltage.EV); addCentrifugeToItemStack( CombType.SPARKLING, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1, 0), - GT_ModHandler.getModItem(MagicBees.ID, "miscResources", 2, 5), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.NetherStar, 1) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1, 0), + GTModHandler.getModItem(MagicBees.ID, "miscResources", 2, 5), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.NetherStar, 1) }, new int[] { 50 * 100, 10 * 100, 10 * 100 }, Voltage.EV); @@ -427,12 +427,12 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { new int[] { 100 * 100 }, new int[] {}, Voltage.MV, - GT_ModHandler.getModItem(MagicBees.ID, "wax", 1, 0), + GTModHandler.getModItem(MagicBees.ID, "wax", 1, 0), 50 * 100); addCentrifugeToItemStack( CombType.QUICKSILVER, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1, 0), - GT_ModHandler.getModItem(Thaumcraft.ID, "ItemNugget", 1, 5) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1, 0), + GTModHandler.getModItem(Thaumcraft.ID, "ItemNugget", 1, 5) }, new int[] { 50 * 100, 100 * 100 }, Voltage.ULV); @@ -591,9 +591,9 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { addCentrifugeToItemStack( CombType.SALT, - new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Salt, 6), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RockSalt, 6), ItemList.FR_Wax.get(1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 6) }, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.dust, Materials.Salt, 6), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.RockSalt, 6), ItemList.FR_Wax.get(1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 6) }, new int[] { 100 * 100, 100 * 100, 50 * 100, 25 * 100 }, Voltage.MV, 160); @@ -612,141 +612,141 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { // Twilight addCentrifugeToItemStack( CombType.NAGA, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 4), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.NagaScaleChip", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.NagaScaleFragment", 1L, 0), + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 4), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.NagaScaleChip", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.NagaScaleFragment", 1L, 0), ItemList.FR_Wax.get(1) }, new int[] { 5 * 100, 33 * 100, 8 * 100, 30 * 100 }, Voltage.MV); addCentrifugeToItemStack( CombType.LICH, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 5), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.LichBoneChip", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.LichBoneFragment", 1L, 0), + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 5), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.LichBoneChip", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.LichBoneFragment", 1L, 0), ItemList.FR_Wax.get(1) }, new int[] { 5 * 100, 33 * 100, 8 * 100, 30 * 100 }, Voltage.HV); addCentrifugeToItemStack( CombType.HYDRA, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 1), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.FieryBloodDrop", 1L, 0), - GT_Bees.drop.getStackForType(DropType.HYDRA), ItemList.FR_Wax.get(1) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 1), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.FieryBloodDrop", 1L, 0), + GTBees.drop.getStackForType(DropType.HYDRA), ItemList.FR_Wax.get(1) }, new int[] { 5 * 100, 33 * 100, 8 * 100, 30 * 100 }, Voltage.HV); addCentrifugeToItemStack( CombType.URGHAST, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 2), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CarminiteChip", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CarminiteFragment", 1L, 0), + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 2), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CarminiteChip", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CarminiteFragment", 1L, 0), ItemList.FR_Wax.get(1) }, new int[] { 5 * 100, 33 * 100, 8 * 100, 30 * 100 }, Voltage.EV); addCentrifugeToItemStack( CombType.SNOWQUEEN, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 3), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.SnowQueenBloodDrop", 1L, 0), - GT_Bees.drop.getStackForType(DropType.SNOW_QUEEN), ItemList.FR_Wax.get(1) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 3), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.SnowQueenBloodDrop", 1L, 0), + GTBees.drop.getStackForType(DropType.SNOW_QUEEN), ItemList.FR_Wax.get(1) }, new int[] { 5 * 100, 33 * 100, 8 * 100, 30 * 100 }, Voltage.EV); // HEE addCentrifugeToItemStack( CombType.ENDDUST, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), - GT_Bees.propolis.getStackForType(PropolisType.End), GT_Bees.drop.getStackForType(DropType.ENDERGOO), + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), + GTBees.propolis.getStackForType(PropolisType.End), GTBees.drop.getStackForType(DropType.ENDERGOO), Materials.Endstone.getBlocks(4) }, new int[] { 20 * 100, 15 * 100, 10 * 100, 100 * 100 }, Voltage.HV); addCentrifugeToItemStack( CombType.STARDUST, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), - GT_Bees.propolis.getStackForType(PropolisType.Stardust), - GT_Bees.drop.getStackForType(DropType.ENDERGOO) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), + GTBees.propolis.getStackForType(PropolisType.Stardust), + GTBees.drop.getStackForType(DropType.ENDERGOO) }, new int[] { 20 * 100, 15 * 100, 10 * 100 }, Voltage.HV); addCentrifugeToItemStack( CombType.ECTOPLASMA, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), - GT_Bees.propolis.getStackForType(PropolisType.Ectoplasma), - GT_Bees.drop.getStackForType(DropType.ENDERGOO) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), + GTBees.propolis.getStackForType(PropolisType.Ectoplasma), + GTBees.drop.getStackForType(DropType.ENDERGOO) }, new int[] { 25 * 100, 10 * 100, 15 * 100 }, Voltage.EV); addCentrifugeToItemStack( CombType.ARCANESHARD, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), - GT_Bees.propolis.getStackForType(PropolisType.Arcaneshard), - GT_Bees.drop.getStackForType(DropType.ENDERGOO) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), + GTBees.propolis.getStackForType(PropolisType.Arcaneshard), + GTBees.drop.getStackForType(DropType.ENDERGOO) }, new int[] { 25 * 100, 10 * 100, 15 * 100 }, Voltage.EV); addCentrifugeToItemStack( CombType.DRAGONESSENCE, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), - GT_Bees.propolis.getStackForType(PropolisType.Dragonessence), - GT_Bees.drop.getStackForType(DropType.ENDERGOO) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), + GTBees.propolis.getStackForType(PropolisType.Dragonessence), + GTBees.drop.getStackForType(DropType.ENDERGOO) }, new int[] { 30 * 100, (int) (7.5 * 100), 20 * 100 }, Voltage.IV); addCentrifugeToItemStack( CombType.ENDERMAN, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), - GT_Bees.propolis.getStackForType(PropolisType.Enderman), - GT_Bees.drop.getStackForType(DropType.ENDERGOO) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), + GTBees.propolis.getStackForType(PropolisType.Enderman), + GTBees.drop.getStackForType(DropType.ENDERGOO) }, new int[] { 3000, 750, 2000 }, Voltage.IV); addCentrifugeToItemStack( CombType.SILVERFISH, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), - GT_Bees.propolis.getStackForType(PropolisType.Silverfish), - GT_Bees.drop.getStackForType(DropType.ENDERGOO), new ItemStack(Items.spawn_egg, 1, 60) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), + GTBees.propolis.getStackForType(PropolisType.Silverfish), + GTBees.drop.getStackForType(DropType.ENDERGOO), new ItemStack(Items.spawn_egg, 1, 60) }, new int[] { 25 * 100, 10 * 100, 20 * 100, 15 * 100 }, Voltage.EV); addProcessGT(CombType.ENDIUM, new Materials[] { Materials.HeeEndium }, Voltage.HV); addCentrifugeToItemStack( CombType.RUNEI, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfPowerFragment", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfAgilityFragment", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfVigorFragment", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfDefenseFragment", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfMagicFragment", 1L, 0) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfPowerFragment", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfAgilityFragment", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfVigorFragment", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfDefenseFragment", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfMagicFragment", 1L, 0) }, new int[] { 25 * 100, 5 * 100, 5 * 100, 5 * 100, 5 * 100, 5 * 100 }, Voltage.IV); addCentrifugeToItemStack( CombType.RUNEII, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfVoidFragment", 1L, 0) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RuneOfVoidFragment", 1L, 0) }, new int[] { 50 * 100, (int) (2.5 * 100) }, Voltage.IV); addCentrifugeToItemStack( CombType.FIREESSENSE, - new ItemStack[] { GT_ModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), - GT_Bees.propolis.getStackForType(PropolisType.Fireessence), - GT_Bees.drop.getStackForType(DropType.ENDERGOO) }, + new ItemStack[] { GTModHandler.getModItem(MagicBees.ID, "wax", 1L, 0), + GTBees.propolis.getStackForType(PropolisType.Fireessence), + GTBees.drop.getStackForType(DropType.ENDERGOO) }, new int[] { 30 * 100, (int) (7.5 * 100), 20 * 100 }, Voltage.IV); // Walrus Recipe if (AE2FluidCraft.isModLoaded()) { addCentrifugeToItemStack( CombType.WALRUS, - new ItemStack[] { GT_ModHandler.getModItem(AE2FluidCraft.ID, "walrus", 1L, 0) }, + new ItemStack[] { GTModHandler.getModItem(AE2FluidCraft.ID, "walrus", 1L, 0) }, new int[] { 100 * 100 }, Voltage.LV); } addCentrifugeToItemStack( CombType.MACHINIST, - new ItemStack[] { GT_ModHandler.getModItem(Forestry.ID, "royalJelly", 1L, 0), - GT_ModHandler.getModItem(Forestry.ID, "pollen", 1L, 0), - GT_ModHandler.getModItem(Forestry.ID, "honeyDrop", 1L, 0), - GT_ModHandler.getModItem(ExtraBees.ID, "honeyDrop", 1L, 6), - GT_ModHandler.getModItem(Forestry.ID, "beeswax", 1L, 0), ItemList.ElectronicsLump.get(1) }, + new ItemStack[] { GTModHandler.getModItem(Forestry.ID, "royalJelly", 1L, 0), + GTModHandler.getModItem(Forestry.ID, "pollen", 1L, 0), + GTModHandler.getModItem(Forestry.ID, "honeyDrop", 1L, 0), + GTModHandler.getModItem(ExtraBees.ID, "honeyDrop", 1L, 6), + GTModHandler.getModItem(Forestry.ID, "beeswax", 1L, 0), ItemList.ElectronicsLump.get(1) }, new int[] { 10 * 100, 10 * 100, 20 * 100, 10 * 100, 20 * 100, 5 * 100 }, Voltage.ULV); // Space Line addCentrifugeToItemStack( CombType.SPACE, new ItemStack[] { ItemList.FR_Wax.get(1L), ItemList.FR_RefractoryWax.get(1L), - GT_Bees.drop.getStackForType(DropType.OXYGEN), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CoinSpace", 1L, 0) }, + GTBees.drop.getStackForType(DropType.OXYGEN), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CoinSpace", 1L, 0) }, new int[] { 50 * 100, 30 * 100, 15 * 100, 5 * 100 }, Voltage.HV); addProcessGT(CombType.METEORICIRON, new Materials[] { Materials.MeteoricIron }, Voltage.HV); @@ -783,116 +783,116 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { addCentrifugeToItemStack( CombType.MOON, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MoonStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MoonStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100 }, Voltage.MV, 300); addCentrifugeToItemStack( CombType.MARS, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MarsStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MarsStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100 }, Voltage.HV, 300); addCentrifugeToItemStack( CombType.JUPITER, - new ItemStack[] { GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.IoStoneDust", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaIceDust", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaStoneDust", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.GanymedeStoneDust", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CallistoStoneDust", 1L, 0), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.CallistoIce, 1L), ItemList.FR_Wax.get(1L) }, + new ItemStack[] { GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.IoStoneDust", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaIceDust", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaStoneDust", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.GanymedeStoneDust", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CallistoStoneDust", 1L, 0), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.CallistoIce, 1L), ItemList.FR_Wax.get(1L) }, new int[] { 30 * 100, 30 * 100, 30 * 100, 30 * 100, 30 * 100, 5 * 100, 50 * 100 }, Voltage.HV, 300); addCentrifugeToItemStack( CombType.MERCURY, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MercuryCoreDust", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MercuryStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MercuryCoreDust", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MercuryStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100, 30 * 100 }, Voltage.EV, 300); addCentrifugeToItemStack( CombType.VENUS, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.VenusStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.VenusStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100 }, Voltage.EV, 300); addCentrifugeToItemStack( CombType.SATURN, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EnceladusStoneDust", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TitanStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EnceladusStoneDust", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TitanStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100, 30 * 100 }, Voltage.IV, 300); addCentrifugeToItemStack( CombType.URANUS, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MirandaStoneDust", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.OberonStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MirandaStoneDust", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.OberonStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100, 30 * 100 }, Voltage.IV, 300); addCentrifugeToItemStack( CombType.NEPTUNE, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ProteusStoneDust", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TritonStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ProteusStoneDust", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TritonStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100, 30 * 100 }, Voltage.IV, 300); addCentrifugeToItemStack( CombType.PLUTO, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PlutoStoneDust", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PlutoIceDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PlutoStoneDust", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PlutoIceDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100, 30 * 100 }, Voltage.LuV, 300); addCentrifugeToItemStack( CombType.HAUMEA, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.HaumeaStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.HaumeaStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100 }, Voltage.LuV, 300); addCentrifugeToItemStack( CombType.MAKEMAKE, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MakeMakeStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MakeMakeStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100 }, Voltage.LuV, 300); addCentrifugeToItemStack( CombType.CENTAURI, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CentauriASurfaceDust", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CentauriAStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CentauriASurfaceDust", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CentauriAStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100, 30 * 100 }, Voltage.ZPM, 300); addCentrifugeToItemStack( CombType.TCETI, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TCetiEStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TCetiEStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100 }, Voltage.ZPM, 300); addCentrifugeToItemStack( CombType.BARNARDA, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaEStoneDust", 1L, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaFStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaEStoneDust", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaFStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100, 30 * 100 }, Voltage.ZPM, 300); addCentrifugeToItemStack( CombType.VEGA, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.VegaBStoneDust", 1L, 0) }, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.VegaBStoneDust", 1L, 0) }, new int[] { 50 * 100, 30 * 100 }, Voltage.ZPM, 300); @@ -900,7 +900,7 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { addCentrifugeToItemStack( CombType.SEAWEED, new ItemStack[] { ItemList.FR_Wax.get(1L), - GT_ModHandler.getModItem(GalaxySpace.ID, "tcetiedandelions", 1L, 0) }, + GTModHandler.getModItem(GalaxySpace.ID, "tcetiedandelions", 1L, 0) }, new int[] { 50 * 100, 100 * 100 }, Voltage.UV, 100); @@ -940,13 +940,13 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { * **/ public void addAutoclaveProcess(CombType comb, Materials aMaterial, Voltage volt, int circuitNumber) { - if (GT_OreDictUnificator.get(OrePrefixes.crushedPurified, aMaterial, 4) == NI) { + if (GTOreDictUnificator.get(OrePrefixes.crushedPurified, aMaterial, 4) == NI) { return; } - GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder(); + GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder(); recipeBuilder - .itemInputs(GT_Utility.copyAmount(9, getStackForType(comb)), GT_Utility.getIntegratedCircuit(circuitNumber)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.crushedPurified, aMaterial, 4)) + .itemInputs(GTUtility.copyAmount(9, getStackForType(comb)), GTUtility.getIntegratedCircuit(circuitNumber)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.crushedPurified, aMaterial, 4)) .fluidInputs(Materials.UUMatter.getFluid(Math.max(1, ((aMaterial.getMass() + volt.getUUAmplifier()) / 10)))) .duration(((int) (aMaterial.getMass() * 128)) * TICKS) .eut(volt.getAutoClaveEnergy()); @@ -968,8 +968,8 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { : 128); int eut = volt.getSimpleEnergy() / 2; - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1, getStackForType(comb))) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1, getStackForType(comb))) .fluidOutputs(fluid) .duration(duration) .eut(eut) @@ -988,7 +988,7 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { public void addProcessGT(CombType comb, Materials[] aMaterial, Voltage volt) { ItemStack tComb = getStackForType(comb); for (Materials materials : aMaterial) { - if (GT_OreDictUnificator.get(OrePrefixes.crushedPurified, materials, 4) != null) { + if (GTOreDictUnificator.get(OrePrefixes.crushedPurified, materials, 4) != null) { ItemStack combInput; ItemStack combOutput; FluidStack fluidInput; @@ -998,7 +998,7 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { boolean requiresCleanroom; switch (comb) { case NEUTRONIUM -> { - combInput = GT_Utility.copyAmount(4, tComb); + combInput = GTUtility.copyAmount(4, tComb); combOutput = Materials.Neutronium.getNuggets(1); fluidInput = volt.getFluidAccordingToCombTier(); fluidOutput = Materials.Neutronium.getMolten(576); @@ -1007,7 +1007,7 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { requiresCleanroom = volt.compareTo(Voltage.IV) > 0; } case OSMIUM -> { - combInput = GT_Utility.copyAmount(4, tComb); + combInput = GTUtility.copyAmount(4, tComb); combOutput = Materials.Osmium.getNuggets(1); fluidInput = volt.getFluidAccordingToCombTier(); fluidOutput = Materials.Osmium.getMolten(288); @@ -1016,7 +1016,7 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { requiresCleanroom = volt.compareTo(Voltage.IV) > 0; } case PLATINUM -> { - combInput = GT_Utility.copyAmount(4, tComb); + combInput = GTUtility.copyAmount(4, tComb); combOutput = Materials.Platinum.getNuggets(1); fluidInput = volt.getFluidAccordingToCombTier(); fluidOutput = Materials.Platinum.getMolten(288); @@ -1025,7 +1025,7 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { requiresCleanroom = volt.compareTo(Voltage.HV) > 0; } case IRIDIUM -> { - combInput = GT_Utility.copyAmount(4, tComb); + combInput = GTUtility.copyAmount(4, tComb); combOutput = Materials.Iridium.getNuggets(1); fluidInput = volt.getFluidAccordingToCombTier(); fluidOutput = Materials.Iridium.getMolten(288); @@ -1034,8 +1034,8 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { requiresCleanroom = volt.compareTo(Voltage.EV) > 0; } default -> { - combInput = GT_Utility.copyAmount(4, tComb); - combOutput = GT_OreDictUnificator.get(OrePrefixes.crushedPurified, materials, 4); + combInput = GTUtility.copyAmount(4, tComb); + combOutput = GTOreDictUnificator.get(OrePrefixes.crushedPurified, materials, 4); fluidInput = volt.getFluidAccordingToCombTier(); fluidOutput = null; durationTicks = volt.getComplexTime(); @@ -1043,7 +1043,7 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { requiresCleanroom = volt.compareTo(Voltage.IV) > 0; } } - GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder(); + GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder(); recipeBuilder.itemInputs(combInput) .itemOutputs(combOutput) .fluidInputs(fluidInput); @@ -1092,11 +1092,11 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { continue; } if (Math.max(1, stackSize[i]) % 9 == 0) { - aOutPut[i] = GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial[i], (Math.max(1, stackSize[i]) / 9)); + aOutPut[i] = GTOreDictUnificator.get(OrePrefixes.dust, aMaterial[i], (Math.max(1, stackSize[i]) / 9)); } else if (Math.max(1, stackSize[i]) % 4 == 0) { - aOutPut[i] = GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial[i], (Math.max(1, stackSize[i]) / 4)); + aOutPut[i] = GTOreDictUnificator.get(OrePrefixes.dust, aMaterial[i], (Math.max(1, stackSize[i]) / 4)); } else { - aOutPut[i] = GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial[i], Math.max(1, stackSize[i])); + aOutPut[i] = GTOreDictUnificator.get(OrePrefixes.dust, aMaterial[i], Math.max(1, stackSize[i])); } } if (beeWax != NI) { @@ -1130,7 +1130,7 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { RecipeManagers.centrifugeManager.addRecipe(40, tComb, Product.build()); } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(tComb) .itemOutputs(aItem) .outputChances(chance) @@ -1142,9 +1142,9 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { public void registerOreDict() { for (CombType comb : CombType.values()) { ItemStack tComb = getStackForType(comb); - GT_OreDictUnificator.registerOre(OrePrefixes.beeComb.name(), tComb); + GTOreDictUnificator.registerOre(OrePrefixes.beeComb.name(), tComb); OrePrefixes.beeComb.add(tComb); - if (comb.voltage != null) GT_OreDictUnificator.registerOre("comb" + comb.voltage.name(), tComb); + if (comb.voltage != null) GTOreDictUnificator.registerOre("comb" + comb.voltage.name(), tComb); } } @@ -1189,7 +1189,7 @@ public class ItemComb extends Item implements IGT_ItemWithMaterialRenderer { if (this.compareTo(Voltage.MV) < 0) { return Materials.HydrofluoricAcid.getFluid((this.compareTo(Voltage.ULV) > 0) ? 1000 : 500); } else if (this.compareTo(Voltage.HV) < 0) { - return GT_ModHandler.getDistilledWater(1000L); + return GTModHandler.getDistilledWater(1000L); } else if (this.compareTo(Voltage.LuV) < 0) { return Materials.HydrofluoricAcid.getFluid((long) (Math.pow(2, this.compareTo(Voltage.HV)) * L)); } else if (this.compareTo(Voltage.UHV) < 0) { diff --git a/src/main/java/gregtech/common/items/ItemDepletedCell.java b/src/main/java/gregtech/common/items/ItemDepletedCell.java new file mode 100644 index 0000000000..094dd76dbb --- /dev/null +++ b/src/main/java/gregtech/common/items/ItemDepletedCell.java @@ -0,0 +1,49 @@ +package gregtech.common.items; + +import net.minecraft.item.ItemStack; + +import gregtech.api.items.ItemRadioactiveCellIC; +import ic2.api.reactor.IReactor; + +public class ItemDepletedCell extends ItemRadioactiveCellIC { + + public ItemDepletedCell(String aUnlocalized, String aEnglish, int aRadiation) { + super(aUnlocalized, aEnglish, 1, 1, 0, aRadiation, 0, null, false); + } + + @Override + public void processChamber(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2, + boolean paramBoolean) {} + + @Override + public boolean acceptUraniumPulse(IReactor paramIReactor, ItemStack paramItemStack1, ItemStack paramItemStack2, + int paramInt1, int paramInt2, int paramInt3, int paramInt4, boolean paramBoolean) { + return false; + } + + @Override + public boolean canStoreHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2) { + return false; + } + + @Override + public int getMaxHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2) { + return 0; + } + + @Override + public int getCurrentHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2) { + return 0; + } + + @Override + public int alterHeat(IReactor paramIReactor, ItemStack paramItemStack, int paramInt1, int paramInt2, + int paramInt3) { + return 0; + } + + @Override + public float influenceExplosion(IReactor paramIReactor, ItemStack paramItemStack) { + return 0.0F; + } +} diff --git a/src/main/java/gregtech/common/items/ItemDrop.java b/src/main/java/gregtech/common/items/ItemDrop.java index 5aab9dff48..1f56b79242 100644 --- a/src/main/java/gregtech/common/items/ItemDrop.java +++ b/src/main/java/gregtech/common/items/ItemDrop.java @@ -7,8 +7,8 @@ import static gregtech.api.enums.Mods.HardcoreEnderExpansion; import static gregtech.api.enums.Mods.MagicBees; import static gregtech.api.enums.Mods.NewHorizonsCoreMod; import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; import java.util.List; @@ -25,11 +25,11 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import forestry.api.core.Tabs; import forestry.api.recipes.RecipeManagers; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_RecipeBuilder; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipeBuilder; public class ItemDrop extends Item { @@ -110,53 +110,53 @@ public class ItemDrop extends Item { addProcessLV( tDrop, Materials.OilHeavy.getFluid(100L), - GT_ModHandler.getModItem(Forestry.ID, "propolis", 1L, 0), + GTModHandler.getModItem(Forestry.ID, "propolis", 1L, 0), 3000, 8); RecipeManagers.squeezerManager.addRecipe( 40, new ItemStack[] { tDrop }, Materials.OilHeavy.getFluid(100L), - GT_ModHandler.getModItem(Forestry.ID, "propolis", 1L, 0), + GTModHandler.getModItem(Forestry.ID, "propolis", 1L, 0), 30); tDrop = getStackForType(DropType.COOLANT); addProcessLV( tDrop, new FluidStack(FluidRegistry.getFluid("ic2coolant"), 100), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 0), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 0), 3000, 8); RecipeManagers.squeezerManager.addRecipe( 40, new ItemStack[] { tDrop }, new FluidStack(FluidRegistry.getFluid("ic2coolant"), 100), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 0), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 0), 30); tDrop = getStackForType(DropType.HOT_COOLANT); addProcessLV( tDrop, new FluidStack(FluidRegistry.getFluid("ic2hotcoolant"), 100), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 2), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 2), 3000, 8); RecipeManagers.squeezerManager.addRecipe( 40, new ItemStack[] { tDrop }, new FluidStack(FluidRegistry.getFluid("ic2hotcoolant"), 100), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 2), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 2), 30); tDrop = getStackForType(DropType.SNOW_QUEEN); addProcessMV( tDrop, Materials.FierySteel.getFluid(200L), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.SnowQueenBloodDrop", 1L, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.SnowQueenBloodDrop", 1L, 0), 1500, 48); tDrop = getStackForType(DropType.LAPIS); addProcessLV( tDrop, new FluidStack(FluidRegistry.getFluid("ic2coolant"), 200), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 3), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 3), 5000, 1200, 2); @@ -164,20 +164,20 @@ public class ItemDrop extends Item { 400, new ItemStack[] { tDrop }, new FluidStack(FluidRegistry.getFluid("ic2coolant"), 100), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 3), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 3), 30); tDrop = getStackForType(DropType.HYDRA); addProcessMV( tDrop, Materials.FierySteel.getFluid(50L), - GT_ModHandler.getModItem(MagicBees.ID, "propolis", 1L, 2), + GTModHandler.getModItem(MagicBees.ID, "propolis", 1L, 2), 3000, 8); tDrop = getStackForType(DropType.OXYGEN); addProcessLV( tDrop, new FluidStack(FluidRegistry.getFluid("liquidoxygen"), 100), - GT_ModHandler.getModItem(ExtraBees.ID, "propolis", 1L, 2), + GTModHandler.getModItem(ExtraBees.ID, "propolis", 1L, 2), 250, 1200, 8); @@ -185,15 +185,15 @@ public class ItemDrop extends Item { 400, new ItemStack[] { tDrop }, new FluidStack(FluidRegistry.getFluid("ic2coolant"), 100), - GT_ModHandler.getModItem(ExtraBees.ID, "propolis", 1L, 2), + GTModHandler.getModItem(ExtraBees.ID, "propolis", 1L, 2), 30); tDrop = getStackForType(DropType.ENDERGOO); if (HardcoreEnderExpansion.isModLoaded()) - addProcessHV(tDrop, new FluidStack(FluidRegistry.getFluid("endergoo"), 500), GT_Values.NI, 1000); + addProcessHV(tDrop, new FluidStack(FluidRegistry.getFluid("endergoo"), 500), GTValues.NI, 1000); } public void addProcessLV(ItemStack tDrop, FluidStack aOutput, ItemStack aOutput2, int aChance, int aEUt) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(tDrop) .itemOutputs(aOutput2) .outputChances(aChance) @@ -205,7 +205,7 @@ public class ItemDrop extends Item { public void addProcessLV(ItemStack tDrop, FluidStack aOutput, ItemStack aOutput2, int aChance, int aDuration, int aEUt) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(tDrop) .itemOutputs(aOutput2) .outputChances(aChance) @@ -216,7 +216,7 @@ public class ItemDrop extends Item { } public void addProcessMV(ItemStack tDrop, FluidStack aOutput, ItemStack aOutput2, int aChance, int aEUt) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(tDrop) .itemOutputs(aOutput2) .outputChances(aChance) @@ -227,9 +227,9 @@ public class ItemDrop extends Item { } public void addProcessHV(ItemStack tDrop, FluidStack aOutput, ItemStack aOutput2, int aChance) { - GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder(); + GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder(); recipeBuilder.itemInputs(tDrop); - if (aOutput2 != GT_Values.NI) { + if (aOutput2 != GTValues.NI) { recipeBuilder.itemOutputs(aOutput2) .outputChances(aChance); } diff --git a/src/main/java/gregtech/common/items/ItemFluidDisplay.java b/src/main/java/gregtech/common/items/ItemFluidDisplay.java new file mode 100644 index 0000000000..7063a7e1f3 --- /dev/null +++ b/src/main/java/gregtech/common/items/ItemFluidDisplay.java @@ -0,0 +1,181 @@ +package gregtech.common.items; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Stream; + +import net.minecraft.client.Minecraft; +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 net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.items.GTGenericItem; +import gregtech.api.util.GTUtility; + +public class ItemFluidDisplay extends GTGenericItem { + + private static final Map sFluidTooltips = new HashMap<>(); + + public ItemFluidDisplay() { + super("GregTech_FluidDisplay", "Fluid Display", null); + ItemList.Display_Fluid.set(this); + } + + @Override + protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + if (FluidRegistry.getFluid(aStack.getItemDamage()) != null) { + String tChemicalFormula = getChemicalFormula( + new FluidStack(FluidRegistry.getFluid(aStack.getItemDamage()), 1)); + if (!tChemicalFormula.isEmpty()) + aList.add(EnumChatFormatting.YELLOW + tChemicalFormula + EnumChatFormatting.RESET); + } + NBTTagCompound aNBT = aStack.getTagCompound(); + if (GTValues.D1 || Minecraft.getMinecraft().gameSettings.advancedItemTooltips) { + Fluid tFluid = FluidRegistry.getFluid(aStack.getItemDamage()); + if (tFluid != null) { + aList.add("Registry: " + tFluid.getName()); + } + } + if (aNBT != null) { + long tToolTipAmount = aNBT.getLong("mFluidDisplayAmount"); + if (tToolTipAmount > 0L) { + aList.add( + EnumChatFormatting.BLUE + "Amount: " + + GTUtility.formatNumbers(tToolTipAmount) + + " L" + + EnumChatFormatting.GRAY); + } + aList.add( + EnumChatFormatting.RED + "Temperature: " + + GTUtility.formatNumbers(aNBT.getLong("mFluidDisplayHeat")) + + " K" + + EnumChatFormatting.GRAY); + aList.add( + EnumChatFormatting.GREEN + + String.format(transItem("018", "State: %s"), aNBT.getBoolean("mFluidState") ? "Gas" : "Liquid") + + EnumChatFormatting.GRAY); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aIconRegister) {} + + @Override + public IIcon getIconFromDamage(int aMetaData) { + return Stream.of(FluidRegistry.getFluid(aMetaData), FluidRegistry.WATER) + .filter(Objects::nonNull) + .map(Fluid::getStillIcon) + .filter(Objects::nonNull) + .findFirst() + .orElseThrow(IllegalStateException::new); + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack aStack, int aRenderPass) { + Fluid tFluid = FluidRegistry.getFluid(aStack.getItemDamage()); + return tFluid == null ? 16777215 : tFluid.getColor(); + } + + @Override + public int getSpriteNumber() { + return 0; + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + if (aStack != null) { + return GTUtility.getFluidName(FluidRegistry.getFluid(aStack.getItemDamage()), false); + } + return ""; + } + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + if (aStack != null) { + return GTUtility.getFluidName(FluidRegistry.getFluid(aStack.getItemDamage()), true); + } + return ""; + } + + @SideOnly(Side.CLIENT) + public static String getChemicalFormula(FluidStack aRealFluid) { + return sFluidTooltips.computeIfAbsent(aRealFluid.getFluid(), fluid -> { + for (ItemStack tContainer : GTUtility.getContainersFromFluid(aRealFluid)) { + if (isCell(tContainer)) { + Materials tMaterial = getMaterialFromCell(tContainer); + if (!tMaterial.equals(Materials._NULL)) { + if (tMaterial.mChemicalFormula.equals("?")) { + return ""; + } else { + return tMaterial.mChemicalFormula; + } + } else { + // For GT++ Fluid Display + // GT++ didn't register a Material in GT, so I have too find the Chemical Formula in its cell's + // tooltip + List tTooltip = tContainer.getTooltip(null, true); + for (String tInfo : tTooltip) { + if (!tInfo.contains(" ") && !tInfo.contains(":") && tTooltip.indexOf(tInfo) != 0) { + return tInfo; + } + } + } + } + } + return ""; + }); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item aItem, CreativeTabs aTab, List aList) { + if (GTValues.D1) { + int i = 0; + for (int j = FluidRegistry.getMaxID(); i < j; i++) { + ItemStack tStack = GTUtility.getFluidDisplayStack(FluidRegistry.getFluid(i)); + if (tStack != null) { + aList.add(tStack); + } + } + } + } + + public static boolean isCell(ItemStack tItemStack) { + for (int tOreDict : OreDictionary.getOreIDs(tItemStack)) { + String tOreDictName = OreDictionary.getOreName(tOreDict); + if (tOreDictName.startsWith("cell")) return true; + } + return false; + } + + public static Materials getMaterialFromCell(ItemStack tItemStack) { + for (int tOreDict : OreDictionary.getOreIDs(tItemStack)) { + String tOreDictName = OreDictionary.getOreName(tOreDict); + if (tOreDictName.startsWith("cell")) { + return Materials.getRealMaterial( + tOreDictName.replace("cell", "") + .replace("Molten", "") + .replace("Plasma", "")); + } + } + return Materials._NULL; + } +} diff --git a/src/main/java/gregtech/common/items/ItemIntegratedCircuit.java b/src/main/java/gregtech/common/items/ItemIntegratedCircuit.java new file mode 100644 index 0000000000..b6dfa079a2 --- /dev/null +++ b/src/main/java/gregtech/common/items/ItemIntegratedCircuit.java @@ -0,0 +1,327 @@ +package gregtech.common.items; + +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.enums.Mods.GregTech; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; +import java.util.function.Predicate; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.FakePlayer; + +import org.apache.commons.lang3.tuple.Pair; + +import com.gtnewhorizons.modularui.api.UIInfos; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.INetworkUpdatableItem; +import gregtech.api.items.GTGenericItem; +import gregtech.api.net.GTPacketUpdateItem; +import gregtech.api.objects.XSTR; +import gregtech.api.util.GTConfig; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.common.gui.modularui.uifactory.SelectItemUIFactory; + +public class ItemIntegratedCircuit extends GTGenericItem implements INetworkUpdatableItem { + + private static final String aTextEmptyRow = " "; + private static final List ALL_VARIANTS = new ArrayList<>(); + protected final IIcon[] mIconDamage = new IIcon[25]; + + public ItemIntegratedCircuit() { + super("integrated_circuit", "Programmed Circuit", ""); + setHasSubtypes(true); + setMaxDamage(0); + + ItemList.Circuit_Integrated.set(this); + + ALL_VARIANTS.add(new ItemStack(this, 0, 0)); + for (int i = 1; i <= 24; i++) { + ItemStack aStack = new ItemStack(this, 0, i); + GregTechAPI.registerConfigurationCircuit(aStack, 1); + ALL_VARIANTS.add(aStack); + } + + GTModHandler.addShapelessCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 0L), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { OrePrefixes.circuit.get(Materials.LV) }); + long bits = GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE; + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 1L), + bits, + new Object[] { "d ", " P ", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 2L), + bits, + new Object[] { " d ", " P ", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 3L), + bits, + new Object[] { " d", " P ", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 4L), + bits, + new Object[] { aTextEmptyRow, " Pd", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 5L), + bits, + new Object[] { aTextEmptyRow, " P ", " d", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 6L), + bits, + new Object[] { aTextEmptyRow, " P ", " d ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 7L), + bits, + new Object[] { aTextEmptyRow, " P ", "d ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 8L), + bits, + new Object[] { aTextEmptyRow, "dP ", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 9L), + bits, + new Object[] { "P d", aTextEmptyRow, aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 10L), + bits, + new Object[] { "P ", " d", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 11L), + bits, + new Object[] { "P ", aTextEmptyRow, " d", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 12L), + bits, + new Object[] { "P ", aTextEmptyRow, " d ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 13L), + bits, + new Object[] { " P", aTextEmptyRow, " d", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 14L), + bits, + new Object[] { " P", aTextEmptyRow, " d ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 15L), + bits, + new Object[] { " P", aTextEmptyRow, "d ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 16L), + bits, + new Object[] { " P", "d ", aTextEmptyRow, 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 17L), + bits, + new Object[] { aTextEmptyRow, aTextEmptyRow, "d P", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 18L), + bits, + new Object[] { aTextEmptyRow, "d ", " P", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 19L), + bits, + new Object[] { "d ", aTextEmptyRow, " P", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 20L), + bits, + new Object[] { " d ", aTextEmptyRow, " P", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 21L), + bits, + new Object[] { "d ", aTextEmptyRow, "P ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 22L), + bits, + new Object[] { " d ", aTextEmptyRow, "P ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 23L), + bits, + new Object[] { " d", aTextEmptyRow, "P ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + GTModHandler.addCraftingRecipe( + ItemList.Circuit_Integrated.getWithDamage(1L, 24L), + bits, + new Object[] { aTextEmptyRow, " d", "P ", 'P', ItemList.Circuit_Integrated.getWildcard(1L) }); + } + + private static String getModeString(int aMetaData) { + return switch ((byte) (aMetaData >>> 8)) { + case 0 -> "=="; + case 1 -> "<="; + case 2 -> ">="; + case 3 -> "<"; + case 4 -> ">"; + default -> ""; + }; + } + + private static String getConfigurationString(int aMetaData) { + return getModeString(aMetaData) + " " + (byte) (aMetaData & 0xFF); + } + + @Override + public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + super.addAdditionalToolTips(aList, aStack, aPlayer); + aList.add( + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".configuration", "Configuration: ") + + getConfigurationString(getDamage(aStack))); + aList.add( + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".tooltip.0", "Right click to reconfigure")); + aList.add( + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + ".tooltip.1", + "Needs a screwdriver or circuit programming tool")); + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return getUnlocalizedName(); + } + + @Override + @SideOnly(Side.CLIENT) + public final void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { + aList.add(new ItemStack(this, 1, 0)); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aIconRegister) { + super.registerIcons(aIconRegister); + for (int i = 0; i < mIconDamage.length; i++) { + mIconDamage[i] = aIconRegister + .registerIcon(GregTech.getResourcePath(GTConfig.troll ? "troll" : getUnlocalizedName() + "/" + i)); + } + if (GregTechAPI.sPostloadFinished) { + GTLog.out.println("GTMod: Starting Item Icon Load Phase"); + GT_FML_LOGGER.info("GTMod: Starting Item Icon Load Phase"); + GregTechAPI.sItemIcons = aIconRegister; + try { + for (Runnable tRunnable : GregTechAPI.sGTItemIconload) { + tRunnable.run(); + } + } catch (Throwable e) { + e.printStackTrace(GTLog.err); + } + GTLog.out.println("GTMod: Finished Item Icon Load Phase"); + GT_FML_LOGGER.info("GTMod: Finished Item Icon Load Phase"); + } + } + + @Override + public IIcon getIconFromDamage(int aMetaData) { + byte circuitMode = ((byte) (aMetaData & 0xFF)); // Mask out the MSB Comparison Mode Bits. See: getModeString + return mIconDamage[circuitMode < mIconDamage.length ? circuitMode : 0]; + } + + @Override + public boolean receive(ItemStack stack, EntityPlayerMP player, NBTTagCompound tag) { + int meta = tag.hasKey("meta", Constants.NBT.TAG_BYTE) ? tag.getByte("meta") : -1; + if (meta < 0 || meta > 24) return true; + + if (!player.capabilities.isCreativeMode) { + Pair> toolIndex = findConfiguratorInInv(player); + if (toolIndex == null) return true; + + ItemStack[] mainInventory = player.inventory.mainInventory; + mainInventory[toolIndex.getKey()] = toolIndex.getValue() + .apply(mainInventory[toolIndex.getKey()], player); + } + stack.setItemDamage(meta); + + return true; + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + // nothing on server side or fake player + if (player instanceof FakePlayer || !world.isRemote) return stack; + // check if any screwdriver + ItemStack configuratorStack; + if (player.capabilities.isCreativeMode) { + configuratorStack = null; + } else { + Pair configurator = findConfiguratorInInv(player); + if (configurator == null) { + int count; + try { + count = Integer + .parseInt(StatCollector.translateToLocal("GT5U.item.programmed_circuit.no_screwdriver.count")); + } catch (NumberFormatException e) { + player.addChatComponentMessage( + new ChatComponentText( + "Error in translation GT5U.item.programmed_circuit.no_screwdriver.count: " + + e.getMessage())); + count = 1; + } + player.addChatComponentMessage( + new ChatComponentTranslation( + "GT5U.item.programmed_circuit.no_screwdriver." + XSTR.XSTR_INSTANCE.nextInt(count))); + return stack; + } + configuratorStack = player.inventory.mainInventory[configurator.getKey()]; + } + openSelectorGui(configuratorStack, stack.getItemDamage(), player); + return stack; + } + + private void openSelectorGui(ItemStack configurator, int meta, EntityPlayer player) { + UIInfos.openClientUI( + player, + buildContext -> new SelectItemUIFactory( + StatCollector.translateToLocal("GT5U.item.programmed_circuit.select.header"), + configurator, + ItemIntegratedCircuit::onConfigured, + ALL_VARIANTS, + meta, + true).createWindow(buildContext)); + } + + private static void onConfigured(ItemStack stack) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setByte("meta", (byte) stack.getItemDamage()); + GTValues.NW.sendToServer(new GTPacketUpdateItem(tag)); + } + + private static Pair> findConfiguratorInInv( + EntityPlayer player) { + ItemStack[] mainInventory = player.inventory.mainInventory; + for (int j = 0, mainInventoryLength = mainInventory.length; j < mainInventoryLength; j++) { + ItemStack toolStack = mainInventory[j]; + + if (!GTUtility.isStackValid(toolStack)) continue; + + for (Map.Entry, BiFunction> p : GregTechAPI.sCircuitProgrammerList + .entrySet()) + if (p.getKey() + .test(toolStack)) return Pair.of(j, p.getValue()); + } + return null; + } +} diff --git a/src/main/java/gregtech/common/items/ItemNeutronReflector.java b/src/main/java/gregtech/common/items/ItemNeutronReflector.java new file mode 100644 index 0000000000..215bc19c59 --- /dev/null +++ b/src/main/java/gregtech/common/items/ItemNeutronReflector.java @@ -0,0 +1,54 @@ +package gregtech.common.items; + +import net.minecraft.item.ItemStack; + +import gregtech.api.items.GTGenericItem; +import ic2.api.reactor.IReactor; +import ic2.api.reactor.IReactorComponent; + +public class ItemNeutronReflector extends GTGenericItem implements IReactorComponent { + + public ItemNeutronReflector(String aUnlocalized, String aEnglish, int aMaxDamage) { + super(aUnlocalized, aEnglish, "Undestructable"); + this.setMaxStackSize(64); + this.setMaxDamage(aMaxDamage); + } + + @Override + public boolean acceptUraniumPulse(IReactor reactor, ItemStack yourStack, ItemStack pulsingStack, int youX, int youY, + int pulseX, int pulseY, boolean heatrun) { + if (!heatrun) { + ((IReactorComponent) pulsingStack.getItem()) + .acceptUraniumPulse(reactor, pulsingStack, yourStack, pulseX, pulseY, youX, youY, heatrun); + } + return true; + } + + @Override + public boolean canStoreHeat(IReactor aReactor, ItemStack aStack, int x, int y) { + return false; + } + + @Override + public int getMaxHeat(IReactor aReactor, ItemStack aStack, int x, int y) { + return 0; + } + + @Override + public int getCurrentHeat(IReactor aReactor, ItemStack aStack, int x, int y) { + return 0; + } + + @Override + public float influenceExplosion(IReactor aReactor, ItemStack aStack) { + return -1.0F; + } + + @Override + public int alterHeat(IReactor aReactor, ItemStack aStack, int x, int y, int aHeat) { + return aHeat; + } + + @Override + public void processChamber(IReactor aReactor, ItemStack aStack, int x, int y, boolean aHeatRun) {} +} diff --git a/src/main/java/gregtech/common/items/ItemPropolis.java b/src/main/java/gregtech/common/items/ItemPropolis.java index 1c0d727bda..2b4f3c3905 100644 --- a/src/main/java/gregtech/common/items/ItemPropolis.java +++ b/src/main/java/gregtech/common/items/ItemPropolis.java @@ -4,8 +4,8 @@ import static gregtech.api.enums.Mods.GregTech; import static gregtech.api.enums.Mods.HardcoreEnderExpansion; import static gregtech.api.enums.Mods.NewHorizonsCoreMod; import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; import java.util.List; @@ -20,12 +20,12 @@ import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import forestry.api.core.Tabs; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; public class ItemPropolis extends Item { @@ -85,29 +85,29 @@ public class ItemPropolis extends Item { ItemStack tPropolis; tPropolis = getStackForType(PropolisType.End); - addProcessHV(tPropolis, GT_ModHandler.getModItem(HardcoreEnderExpansion.ID, "end_powder", 1, 0)); + addProcessHV(tPropolis, GTModHandler.getModItem(HardcoreEnderExpansion.ID, "end_powder", 1, 0)); tPropolis = getStackForType(PropolisType.Stardust); - addProcessHV(tPropolis, GT_ModHandler.getModItem(HardcoreEnderExpansion.ID, "stardust", 1, 0)); + addProcessHV(tPropolis, GTModHandler.getModItem(HardcoreEnderExpansion.ID, "stardust", 1, 0)); tPropolis = getStackForType(PropolisType.Ectoplasma); - addProcessEV(tPropolis, GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EctoplasmaChip", 1, 0)); + addProcessEV(tPropolis, GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EctoplasmaChip", 1, 0)); tPropolis = getStackForType(PropolisType.Arcaneshard); - addProcessEV(tPropolis, GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ArcaneShardChip", 1, 0)); + addProcessEV(tPropolis, GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ArcaneShardChip", 1, 0)); tPropolis = getStackForType(PropolisType.Dragonessence); - addProcessIV(tPropolis, GT_ModHandler.getModItem(HardcoreEnderExpansion.ID, "essence", 16, 0)); + addProcessIV(tPropolis, GTModHandler.getModItem(HardcoreEnderExpansion.ID, "essence", 16, 0)); tPropolis = getStackForType(PropolisType.Enderman); - addProcessIV(tPropolis, GT_ModHandler.getModItem(HardcoreEnderExpansion.ID, "enderman_head", 1, 0)); + addProcessIV(tPropolis, GTModHandler.getModItem(HardcoreEnderExpansion.ID, "enderman_head", 1, 0)); tPropolis = getStackForType(PropolisType.Silverfish); - addProcessEV(tPropolis, GT_ModHandler.getModItem(HardcoreEnderExpansion.ID, "silverfish_blood", 1, 0)); + addProcessEV(tPropolis, GTModHandler.getModItem(HardcoreEnderExpansion.ID, "silverfish_blood", 1, 0)); tPropolis = getStackForType(PropolisType.Endium); - addProcessHV(tPropolis, GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.HeeEndium, 1)); + addProcessHV(tPropolis, GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.HeeEndium, 1)); tPropolis = getStackForType(PropolisType.Fireessence); - addProcessIV(tPropolis, GT_ModHandler.getModItem(HardcoreEnderExpansion.ID, "essence", 16, 1)); + addProcessIV(tPropolis, GTModHandler.getModItem(HardcoreEnderExpansion.ID, "essence", 16, 1)); // addRecipe(tDrop, aOutput, aOutput2, aChance, aDuration, aEUt); } public void addProcessHV(ItemStack tPropolis, ItemStack aOutput2) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(tPropolis) .itemOutputs(aOutput2) .outputChances(5000) @@ -118,7 +118,7 @@ public class ItemPropolis extends Item { } public void addProcessEV(ItemStack tPropolis, ItemStack aOutput2) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(tPropolis) .itemOutputs(aOutput2) .outputChances(2500) @@ -129,7 +129,7 @@ public class ItemPropolis extends Item { } public void addProcessIV(ItemStack tPropolis, ItemStack aOutput2) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(tPropolis) .itemOutputs(aOutput2) .outputChances(1500) diff --git a/src/main/java/gregtech/common/items/ItemSensorCard.java b/src/main/java/gregtech/common/items/ItemSensorCard.java new file mode 100644 index 0000000000..39e3d48081 --- /dev/null +++ b/src/main/java/gregtech/common/items/ItemSensorCard.java @@ -0,0 +1,111 @@ +package gregtech.common.items; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +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.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; +import gregtech.api.items.GTGenericItem; +import gregtech.api.util.GTLanguageManager; +import shedar.mods.ic2.nuclearcontrol.api.CardState; +import shedar.mods.ic2.nuclearcontrol.api.ICardWrapper; +import shedar.mods.ic2.nuclearcontrol.api.IPanelDataSource; +import shedar.mods.ic2.nuclearcontrol.api.IRemoteSensor; +import shedar.mods.ic2.nuclearcontrol.api.PanelSetting; +import shedar.mods.ic2.nuclearcontrol.api.PanelString; + +public class ItemSensorCard extends GTGenericItem implements IRemoteSensor, IPanelDataSource { + + private static final UUID CARD_TYPE = new UUID(0L, 41L); + + private int strCount; + + public ItemSensorCard(String aUnlocalized, String aEnglish) { + super(aUnlocalized, aEnglish, "Insert into Display Panel"); + setMaxStackSize(1); + } + + @Override + public void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + super.addAdditionalToolTips(aList, aStack, aPlayer); + if (aStack != null) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + aList.add(transItem("014", "Missing Coordinates!")); + } else { + aList.add(transItem("015", "Device at:")); + aList.add( + String.format( + "x: %d, y: %d, z: %d", + tNBT.getInteger("x"), + tNBT.getInteger("y"), + tNBT.getInteger("z"))); + } + } + } + + @Override + public CardState update(TileEntity aPanel, ICardWrapper aCard, int aMaxRange) { + return update(aPanel.getWorldObj(), aCard, aMaxRange); + } + + @Override + public CardState update(World world, ICardWrapper aCard, int aMaxRange) { + ChunkCoordinates target = aCard.getTarget(); + + TileEntity tTileEntity = world.getTileEntity(target.posX, target.posY, target.posZ); + if (((tTileEntity instanceof IGregTechDeviceInformation)) + && (((IGregTechDeviceInformation) tTileEntity).isGivingInformation())) { + String[] tInfoData = ((IGregTechDeviceInformation) tTileEntity).getInfoData(); + for (int i = 0; i < tInfoData.length; i++) { + aCard.setString("mString" + i, tInfoData[i]); + } + aCard.setInt("mString", strCount = tInfoData.length); + return CardState.OK; + } + return CardState.NO_TARGET; + } + + @Override + public List getStringData(int aSettings, ICardWrapper aCard, boolean aLabels) { + List rList = new LinkedList<>(); + for (int i = 0; i < (strCount = aCard.getInt("mString")); i++) { + if ((aSettings & 1 << i) != 0) { + PanelString line = new PanelString(); + line.textLeft = GTLanguageManager.getTranslation(aCard.getString("mString" + i), "\\\\"); + rList.add(line); + } + } + return rList; + } + + @Override + public List getSettingsList() { + List rList = new ArrayList<>(); + for (int i = 0; i < strCount; i++) { + rList.add(new PanelSetting(String.valueOf((i + 1)), 1 << i, getCardType())); + } + return rList; + } + + @Override + public UUID getCardType() { + return CARD_TYPE; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aOutputSubItems) {} +} diff --git a/src/main/java/gregtech/common/items/ItemTierDrone.java b/src/main/java/gregtech/common/items/ItemTierDrone.java new file mode 100644 index 0000000000..1df4f0024d --- /dev/null +++ b/src/main/java/gregtech/common/items/ItemTierDrone.java @@ -0,0 +1,18 @@ +package gregtech.common.items; + +import gregtech.api.items.GTGenericItem; + +public class ItemTierDrone extends GTGenericItem { + + private final int level; + + public ItemTierDrone(String aUnlocalized, String aEnglish, String aEnglishTooltip, int level) { + super(aUnlocalized, aEnglish, aEnglishTooltip); + this.level = level; + this.setMaxStackSize(64); + } + + public int getLevel() { + return level; + } +} diff --git a/src/main/java/gregtech/common/items/ItemVolumetricFlask.java b/src/main/java/gregtech/common/items/ItemVolumetricFlask.java new file mode 100644 index 0000000000..a48dce38e0 --- /dev/null +++ b/src/main/java/gregtech/common/items/ItemVolumetricFlask.java @@ -0,0 +1,360 @@ +package gregtech.common.items; + +import static gregtech.api.enums.Mods.GregTech; +import static gregtech.api.util.GTUtility.formatNumbers; +import static ic2.core.util.LiquidUtil.drainContainerStack; +import static ic2.core.util.LiquidUtil.fillContainerStack; +import static ic2.core.util.LiquidUtil.placeFluid; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.MovingObjectPosition.MovingObjectType; +import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidBlock; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.IFluidHandler; + +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.IItemWithModularUI; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.VanillaButtonWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.items.GTGenericItem; +import gregtech.api.util.GTUtility; +import ic2.core.util.LiquidUtil; + +public class ItemVolumetricFlask extends GTGenericItem implements IFluidContainerItem, IItemWithModularUI { + + private final int maxCapacity; + private final String unlocalFlaskName; + + @SideOnly(Side.CLIENT) + public IIcon iconWindow; + + public ItemVolumetricFlask(String unlocalized, String english, int maxCapacity) { + super(unlocalized, english, null); + this.maxCapacity = maxCapacity; + unlocalFlaskName = unlocalized; + setMaxStackSize(64); + setNoRepair(); + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + if (!world.isRemote && isEmpty(stack) && getMovingObjectPositionFromPlayer(world, player, true) == null) + GTUIInfos.openPlayerHeldItemUI(player); + return super.onItemRightClick(stack, world, player); + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int ordinalSide, + float xOffset, float yOffset, float zOffset) { + if (player instanceof FakePlayer) { + return false; + } + if (world.isRemote) return false; + if (interactWithTank(stack, player, world, x, y, z, ordinalSide)) { + return true; + } + MovingObjectPosition mop = getMovingObjectPositionFromPlayer(world, player, true); + if (mop == null) { + return false; + } + if (mop.typeOfHit == MovingObjectType.BLOCK) { + x = mop.blockX; + y = mop.blockY; + z = mop.blockZ; + if (!world.canMineBlock(player, x, y, z) || !player.canPlayerEdit(x, y, z, mop.sideHit, stack)) { + return false; + } + if (collectFluidBlock(stack, player, world, x, y, z)) { + return true; + } + ForgeDirection dir = ForgeDirection.VALID_DIRECTIONS[mop.sideHit]; + FluidStack fluidStack = drainContainerStack(stack, player, 1000, true); + if (placeFluid(fluidStack, world, x, y, z) + || (player.canPlayerEdit(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, mop.sideHit, stack) + && placeFluid(fluidStack, world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ))) { + if (!player.capabilities.isCreativeMode) drainContainerStack(stack, player, 1000, false); + return true; + } + } + return false; + } + + public boolean isEmpty(ItemStack stack) { + return getFluid(stack) == null; + } + + public int getFreeSpace(ItemStack stack) { + int capacity = getCapacity(stack); + if (capacity > 0) { + FluidStack fluidStack = getFluid(stack); + return fluidStack == null ? capacity : capacity - fluidStack.amount; + } + return 0; + } + + public int getMaxCapacity() { + return this.maxCapacity; + } + + @Override + public int getCapacity(ItemStack stack) { + int capacity = 1000; + if (stack.hasTagCompound()) { + NBTTagCompound nbt = stack.getTagCompound(); + if (nbt.hasKey("Capacity", 3)) capacity = nbt.getInteger("Capacity"); + } + return Math.min(getMaxCapacity(), capacity); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aIconRegister) { + super.registerIcons(aIconRegister); + iconWindow = aIconRegister.registerIcon(GregTech.getResourcePath("gt." + unlocalFlaskName + ".window")); + } + + public void setCapacity(ItemStack stack, int capacity) { + capacity = Math.min(capacity, getMaxCapacity()); + NBTTagCompound nbt = stack.getTagCompound(); + if (nbt == null) { + stack.setTagCompound(nbt = new NBTTagCompound()); + } + nbt.setInteger("Capacity", capacity); + } + + @Override + public FluidStack getFluid(ItemStack stack) { + if (stack.hasTagCompound()) { + NBTTagCompound nbt = stack.getTagCompound(); + if (nbt.hasKey("Fluid", 10)) return FluidStack.loadFluidStackFromNBT(nbt.getCompoundTag("Fluid")); + } + return null; + } + + public 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())); + } + } + + @Override + public int fill(ItemStack stack, FluidStack resource, boolean doFill) { + if (stack.stackSize != 1) return 0; + if ((resource == null) || (resource.amount <= 0)) { + return 0; + } + FluidStack fluidStack = getFluid(stack); + if (fluidStack == null) { + fluidStack = new FluidStack(resource, 0); + } else if (!fluidStack.isFluidEqual(resource)) { + return 0; + } + int amount = Math.min(getCapacity(stack) - fluidStack.amount, resource.amount); + if ((doFill) && (amount > 0)) { + fluidStack.amount += amount; + setFluid(stack, fluidStack); + } + return amount; + } + + @Override + public FluidStack drain(ItemStack stack, int maxDrain, boolean doDrain) { + if (stack.stackSize != 1) return null; + FluidStack fluidStack = getFluid(stack); + if (fluidStack == null) return null; + maxDrain = Math.min(fluidStack.amount, maxDrain); + if (doDrain) { + fluidStack.amount -= maxDrain; + setFluid(stack, fluidStack); + } + return new FluidStack(fluidStack, maxDrain); + } + + @Override + protected void addAdditionalToolTips(List info, ItemStack stack, EntityPlayer aPlayer) { + FluidStack fs = getFluid(stack); + if (fs != null) { + info.add(String.format("< %s, %s mB >", GTUtility.getFluidName(fs, true), formatNumbers(fs.amount))); + } else { + info.add(String.format("< Empty, %s mB >", formatNumbers(getCapacity(stack)))); + } + info.add("Rightclick on air to set volume (only while empty)"); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs creativeTabs, List itemList) { + itemList.add(new ItemStack(this)); + for (Fluid fluid : FluidRegistry.getRegisteredFluids() + .values()) { + if (fluid != null) { + ItemStack stack = new ItemStack(this); + setCapacity(stack, getMaxCapacity()); + fill(stack, new FluidStack(fluid, Integer.MAX_VALUE), true); + itemList.add(stack); + } + } + } + + private boolean interactWithTank(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, + int ordinalSide) { + if (world.isRemote) { + return false; + } + TileEntity te = world.getTileEntity(x, y, z); + if (!(te instanceof IFluidHandler handler)) { + return false; + } + ForgeDirection dir = ForgeDirection.getOrientation(ordinalSide); + FluidStack fs = this.getFluid(stack); + int capacity = getCapacity(stack); + if (fs != null && (!player.isSneaking() || fs.amount >= capacity)) { + int amount = handler.fill(dir, fs, false); + if (amount > 0) { + fs = LiquidUtil.drainContainerStack(stack, player, amount, false); + if (fs != null && fs.amount > 0) { + handler.fill(dir, fs, true); + } + } + } else { + int amount = fs == null ? capacity : capacity - fs.amount; + FluidStack input = handler.drain(dir, amount, false); + if (input != null && input.amount > 0) { + amount = LiquidUtil.fillContainerStack(stack, player, input, false); + if (amount > 0) { + handler.drain(dir, amount, true); + } + } + } + return true; + } + + private boolean collectFluidBlock(ItemStack stack, EntityPlayer player, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + if (block instanceof IFluidBlock liquid) { + if (liquid.canDrain(world, x, y, z)) { + FluidStack fluid = liquid.drain(world, x, y, z, false); + int amount = fillContainerStack(stack, player, fluid, true); + if (amount == fluid.amount) { + fillContainerStack(stack, player, fluid, false); + liquid.drain(world, x, y, z, true); + return true; + } + } + } else if (world.getBlockMetadata(x, y, z) == 0) { + FluidStack fluid = null; + if (block != Blocks.water && block != Blocks.flowing_water) { + if (block == Blocks.lava || block == Blocks.flowing_lava) { + fluid = new FluidStack(FluidRegistry.LAVA, 1000); + } + } else { + fluid = new FluidStack(FluidRegistry.WATER, 1000); + } + + if (fluid != null) { + int amount = fillContainerStack(stack, player, fluid, true); + if (amount == fluid.amount) { + fillContainerStack(stack, player, fluid, false); + world.setBlockToAir(x, y, z); + return true; + } + } + } + return false; + } + + @Override + public ModularWindow createWindow(UIBuildContext buildContext, ItemStack stack) { + if (!(stack.getItem() instanceof ItemVolumetricFlask)) return null; + return new VolumetricFlaskUIFactory(buildContext, stack).createWindow(); + } + + private class VolumetricFlaskUIFactory { + + private final UIBuildContext buildContext; + private int capacity; + private final int maxCapacity; + + public VolumetricFlaskUIFactory(UIBuildContext buildContext, ItemStack flask) { + this.buildContext = buildContext; + ItemVolumetricFlask flaskItem = (ItemVolumetricFlask) flask.getItem(); + this.capacity = flaskItem.getCapacity(flask); + this.maxCapacity = flaskItem.getMaxCapacity(); + } + + public ModularWindow createWindow() { + ModularWindow.Builder builder = ModularWindow.builder(150, 54); + builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); + + NumericWidget capacityWidget = new NumericWidget(); + builder.widget( + capacityWidget.setGetter(() -> capacity) + .setSetter(value -> setCapacity(getCurrentItem(), capacity = (int) value)) + .setBounds(1, maxCapacity) + .setScrollValues(1, 144, 1000) + .setDefaultValue(capacity) + .setTextColor(Color.WHITE.dark(1)) + .setTextAlignment(Alignment.CenterLeft) + .setFocusOnGuiOpen(true) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .setPos(8, 8) + .setSize(77, 12)) + .widget(new TextWidget("Capacity").setPos(88, 10)) + .widget( + new VanillaButtonWidget().setDisplayString("Confirm") + .setOnClick((clickData, widget) -> { + capacityWidget.onRemoveFocus(); + widget.getWindow() + .tryClose(); + }) + .setSynced(false, false) + .setPos(8, 26) + .setSize(48, 20)); + + return builder.build(); + } + + private ItemStack getCurrentItem() { + return buildContext.getPlayer().inventory.getCurrentItem(); + } + } +} diff --git a/src/main/java/gregtech/common/items/ItemWirelessHeadphones.java b/src/main/java/gregtech/common/items/ItemWirelessHeadphones.java new file mode 100644 index 0000000000..4852b0804d --- /dev/null +++ b/src/main/java/gregtech/common/items/ItemWirelessHeadphones.java @@ -0,0 +1,118 @@ +package gregtech.common.items; + +import java.util.List; +import java.util.UUID; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; + +import baubles.api.BaubleType; +import baubles.api.IBauble; +import gregtech.api.enums.ItemList; +import gregtech.api.items.GTGenericItem; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.common.tileentities.machines.basic.MTEBetterJukebox; + +public class ItemWirelessHeadphones extends GTGenericItem implements IBauble { + + public static final String NBTKEY_JUKEBOX_COORDINATES = "jukeboxCoords"; + + public ItemWirelessHeadphones() { + super("WirelessHeadphones", "Wireless Headphones", null); + setMaxStackSize(1); + + ItemList.WirelessHeadphones.set(this); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + if (aStack == null) { + return; + } + final NBTTagCompound tag = aStack.getTagCompound(); + if (tag == null || !tag.hasKey(NBTKEY_JUKEBOX_COORDINATES, Constants.NBT.TAG_STRING)) { + aList.add(StatCollector.translateToLocal("GT5U.machines.betterjukebox.headphonesunbound")); + } else { + aList.add(StatCollector.translateToLocal("GT5U.machines.betterjukebox.headphonesbound")); + aList.add(tag.getString(NBTKEY_JUKEBOX_COORDINATES)); + } + } + + @Override + public boolean doesSneakBypassUse(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer) { + return false; + } + + @Override + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, + float hitX, float hitY, float hitZ) { + final TileEntity pointedTe = world.getTileEntity(x, y, z); + if (!(pointedTe instanceof BaseMetaTileEntity mte)) { + return false; + } + if (!(mte.getMetaTileEntity() instanceof MTEBetterJukebox jukebox)) { + return false; + } + final UUID uuid = jukebox.jukeboxUuid; + if (uuid == MTEBetterJukebox.UNSET_UUID) { + return false; + } + if (!world.isRemote) { + final NBTTagCompound tag = (stack.getTagCompound() == null) ? new NBTTagCompound() : stack.getTagCompound(); + tag.setLong(MTEBetterJukebox.NBTKEY_UUID_LOW, uuid.getLeastSignificantBits()); + tag.setLong(MTEBetterJukebox.NBTKEY_UUID_HIGH, uuid.getMostSignificantBits()); + tag.setString( + NBTKEY_JUKEBOX_COORDINATES, + String.format("(%d, %d, %d) @ %d", x, y, z, world.provider.dimensionId)); + stack.setTagCompound(tag); + + player.addChatMessage(new ChatComponentTranslation("GT5U.machines.betterjukebox.headphonesbound")); + } + return true; + } + + public static UUID getBoundJukeboxUUID(ItemStack stack) { + if (stack == null || stack.getTagCompound() == null) { + return null; + } + final NBTTagCompound tag = stack.getTagCompound(); + if (!tag.hasKey(MTEBetterJukebox.NBTKEY_UUID_LOW, Constants.NBT.TAG_ANY_NUMERIC) + || !tag.hasKey(MTEBetterJukebox.NBTKEY_UUID_HIGH, Constants.NBT.TAG_ANY_NUMERIC)) { + return null; + } + final long idLow = tag.getLong(MTEBetterJukebox.NBTKEY_UUID_LOW); + final long idHigh = tag.getLong(MTEBetterJukebox.NBTKEY_UUID_HIGH); + return new UUID(idHigh, idLow); + } + + @Override + public BaubleType getBaubleType(ItemStack itemStack) { + return BaubleType.UNIVERSAL; + } + + @Override + public void onWornTick(ItemStack itemStack, EntityLivingBase entityLivingBase) {} + + @Override + public void onEquipped(ItemStack itemStack, EntityLivingBase entityLivingBase) {} + + @Override + public void onUnequipped(ItemStack itemStack, EntityLivingBase entityLivingBase) {} + + @Override + public boolean canEquip(ItemStack itemStack, EntityLivingBase entityLivingBase) { + return true; + } + + @Override + public boolean canUnequip(ItemStack itemStack, EntityLivingBase entityLivingBase) { + return true; + } +} diff --git a/src/main/java/gregtech/common/items/MetaGeneratedItem01.java b/src/main/java/gregtech/common/items/MetaGeneratedItem01.java new file mode 100644 index 0000000000..ab9917435c --- /dev/null +++ b/src/main/java/gregtech/common/items/MetaGeneratedItem01.java @@ -0,0 +1,4624 @@ +package gregtech.common.items; + +import static gregtech.api.enums.Textures.BlockIcons.COVER_WOOD_PLATE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ACTIVITYDETECTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ACTIVITYDETECTOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ARM; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_CONTROLLER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_CONVEYOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_CRAFTING; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DRAIN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGYDETECTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUIDDETECTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FLUID_STORAGE_MONITOR0; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ITEMDETECTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_MAINTENANCE_DETECTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PUMP; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_REDSTONE_RECEIVER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_REDSTONE_TRANSMITTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCREEN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCREEN_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SHUTTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_VALVE; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_8V; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_EV; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_HV; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_IV; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_LV; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_LuV; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_MV; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_UV; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_ZPM; +import static gregtech.client.GTTooltipHandler.Tier.ERV; +import static gregtech.client.GTTooltipHandler.Tier.EV; +import static gregtech.client.GTTooltipHandler.Tier.HV; +import static gregtech.client.GTTooltipHandler.Tier.IV; +import static gregtech.client.GTTooltipHandler.Tier.LV; +import static gregtech.client.GTTooltipHandler.Tier.LuV; +import static gregtech.client.GTTooltipHandler.Tier.MAX; +import static gregtech.client.GTTooltipHandler.Tier.MV; +import static gregtech.client.GTTooltipHandler.Tier.UEV; +import static gregtech.client.GTTooltipHandler.Tier.UHV; +import static gregtech.client.GTTooltipHandler.Tier.UIV; +import static gregtech.client.GTTooltipHandler.Tier.ULV; +import static gregtech.client.GTTooltipHandler.Tier.UMV; +import static gregtech.client.GTTooltipHandler.Tier.UV; +import static gregtech.client.GTTooltipHandler.Tier.UXV; +import static gregtech.client.GTTooltipHandler.Tier.ZPM; +import static gregtech.client.GTTooltipHandler.registerTieredTooltip; +import static gregtech.common.items.IDMetaItem01.BatteryHull_EV; +import static gregtech.common.items.IDMetaItem01.BatteryHull_EV_Full; +import static gregtech.common.items.IDMetaItem01.BatteryHull_IV; +import static gregtech.common.items.IDMetaItem01.BatteryHull_IV_Full; +import static gregtech.common.items.IDMetaItem01.BatteryHull_LuV; +import static gregtech.common.items.IDMetaItem01.BatteryHull_LuV_Full; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UEV; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UEV_Full; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UHV; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UHV_Full; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UIV; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UIV_Full; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UMV; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UMV_Full; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UV; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UV_Full; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UxV; +import static gregtech.common.items.IDMetaItem01.BatteryHull_UxV_Full; +import static gregtech.common.items.IDMetaItem01.BatteryHull_ZPM; +import static gregtech.common.items.IDMetaItem01.BatteryHull_ZPM_Full; +import static gregtech.common.items.IDMetaItem01.Battery_Hull_HV; +import static gregtech.common.items.IDMetaItem01.Battery_Hull_LV; +import static gregtech.common.items.IDMetaItem01.Battery_Hull_MV; +import static gregtech.common.items.IDMetaItem01.Battery_RE_HV_Cadmium; +import static gregtech.common.items.IDMetaItem01.Battery_RE_HV_Lithium; +import static gregtech.common.items.IDMetaItem01.Battery_RE_HV_Sodium; +import static gregtech.common.items.IDMetaItem01.Battery_RE_LV_Cadmium; +import static gregtech.common.items.IDMetaItem01.Battery_RE_LV_Lithium; +import static gregtech.common.items.IDMetaItem01.Battery_RE_LV_Sodium; +import static gregtech.common.items.IDMetaItem01.Battery_RE_MV_Cadmium; +import static gregtech.common.items.IDMetaItem01.Battery_RE_MV_Lithium; +import static gregtech.common.items.IDMetaItem01.Battery_RE_MV_Sodium; +import static gregtech.common.items.IDMetaItem01.Battery_RE_ULV_Tantalum; +import static gregtech.common.items.IDMetaItem01.Battery_SU_HV_Mercury; +import static gregtech.common.items.IDMetaItem01.Battery_SU_HV_Sulfuric_Acid; +import static gregtech.common.items.IDMetaItem01.Battery_SU_LV_Mercury; +import static gregtech.common.items.IDMetaItem01.Battery_SU_LV_Sulfuric_Acid; +import static gregtech.common.items.IDMetaItem01.Battery_SU_MV_Mercury; +import static gregtech.common.items.IDMetaItem01.Battery_SU_MV_Sulfuric_Acid; +import static gregtech.common.items.IDMetaItem01.Black_Hole_Closer; +import static gregtech.common.items.IDMetaItem01.Black_Hole_Opener; +import static gregtech.common.items.IDMetaItem01.Book_Written_01; +import static gregtech.common.items.IDMetaItem01.Book_Written_02; +import static gregtech.common.items.IDMetaItem01.Book_Written_03; +import static gregtech.common.items.IDMetaItem01.Circuit_Advanced; +import static gregtech.common.items.IDMetaItem01.Circuit_Basic; +import static gregtech.common.items.IDMetaItem01.Circuit_Board_Advanced; +import static gregtech.common.items.IDMetaItem01.Circuit_Board_Basic; +import static gregtech.common.items.IDMetaItem01.Circuit_Board_Elite; +import static gregtech.common.items.IDMetaItem01.Circuit_Data; +import static gregtech.common.items.IDMetaItem01.Circuit_Elite; +import static gregtech.common.items.IDMetaItem01.Circuit_Good; +import static gregtech.common.items.IDMetaItem01.Circuit_Master; +import static gregtech.common.items.IDMetaItem01.Circuit_Parts_Advanced; +import static gregtech.common.items.IDMetaItem01.Circuit_Parts_Crystal_Chip_Elite; +import static gregtech.common.items.IDMetaItem01.Circuit_Parts_Crystal_Chip_Master; +import static gregtech.common.items.IDMetaItem01.Circuit_Parts_Crystal_Chip_Wetware; +import static gregtech.common.items.IDMetaItem01.Circuit_Parts_Wiring_Advanced; +import static gregtech.common.items.IDMetaItem01.Circuit_Parts_Wiring_Basic; +import static gregtech.common.items.IDMetaItem01.Circuit_Parts_Wiring_Elite; +import static gregtech.common.items.IDMetaItem01.Circuit_Primitive; +import static gregtech.common.items.IDMetaItem01.Component_Filter; +import static gregtech.common.items.IDMetaItem01.Component_Grinder_Diamond; +import static gregtech.common.items.IDMetaItem01.Component_Grinder_Tungsten; +import static gregtech.common.items.IDMetaItem01.Component_Minecraft_Wheels_Iron; +import static gregtech.common.items.IDMetaItem01.Component_Minecraft_Wheels_Steel; +import static gregtech.common.items.IDMetaItem01.Component_Sawblade_Diamond; +import static gregtech.common.items.IDMetaItem01.Compressed_Fireclay; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_EV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_HV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_IV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_LV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_LuV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_MAX; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_MV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_UEV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_UHV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_UIV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_UMV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_UV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_UXV; +import static gregtech.common.items.IDMetaItem01.Conveyor_Module_ZPM; +import static gregtech.common.items.IDMetaItem01.Cover_ActivityDetector; +import static gregtech.common.items.IDMetaItem01.Cover_Chest_Advanced; +import static gregtech.common.items.IDMetaItem01.Cover_Chest_Basic; +import static gregtech.common.items.IDMetaItem01.Cover_Chest_Good; +import static gregtech.common.items.IDMetaItem01.Cover_Controller; +import static gregtech.common.items.IDMetaItem01.Cover_Crafting; +import static gregtech.common.items.IDMetaItem01.Cover_Drain; +import static gregtech.common.items.IDMetaItem01.Cover_EnergyDetector; +import static gregtech.common.items.IDMetaItem01.Cover_FLuidStorageMonitor; +import static gregtech.common.items.IDMetaItem01.Cover_FluidDetector; +import static gregtech.common.items.IDMetaItem01.Cover_FluidLimiter; +import static gregtech.common.items.IDMetaItem01.Cover_ItemDetector; +import static gregtech.common.items.IDMetaItem01.Cover_NeedsMaintenance; +import static gregtech.common.items.IDMetaItem01.Cover_PlayerDetector; +import static gregtech.common.items.IDMetaItem01.Cover_RedstoneReceiverExternal; +import static gregtech.common.items.IDMetaItem01.Cover_RedstoneReceiverInternal; +import static gregtech.common.items.IDMetaItem01.Cover_RedstoneTransmitterExternal; +import static gregtech.common.items.IDMetaItem01.Cover_RedstoneTransmitterInternal; +import static gregtech.common.items.IDMetaItem01.Cover_Screen; +import static gregtech.common.items.IDMetaItem01.Cover_Shutter; +import static gregtech.common.items.IDMetaItem01.Cover_SolarPanel; +import static gregtech.common.items.IDMetaItem01.Cover_SolarPanel_8V; +import static gregtech.common.items.IDMetaItem01.Cover_SolarPanel_EV; +import static gregtech.common.items.IDMetaItem01.Cover_SolarPanel_HV; +import static gregtech.common.items.IDMetaItem01.Cover_SolarPanel_IV; +import static gregtech.common.items.IDMetaItem01.Cover_SolarPanel_LV; +import static gregtech.common.items.IDMetaItem01.Cover_SolarPanel_LuV; +import static gregtech.common.items.IDMetaItem01.Cover_SolarPanel_MV; +import static gregtech.common.items.IDMetaItem01.Cover_SolarPanel_UV; +import static gregtech.common.items.IDMetaItem01.Cover_SolarPanel_ZPM; +import static gregtech.common.items.IDMetaItem01.Crate_Empty; +import static gregtech.common.items.IDMetaItem01.Duct_Tape; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_EV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_HV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_IV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_LV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_LuV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_MAX; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_MV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_UEV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_UHV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_UIV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_UMV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_UV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_UXV; +import static gregtech.common.items.IDMetaItem01.Electric_Motor_ZPM; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_EV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_HV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_IV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_LV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_LuV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_MAX; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_MV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_UEV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_UHV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_UIV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_UMV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_UV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_UXV; +import static gregtech.common.items.IDMetaItem01.Electric_Piston_ZPM; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_EV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_HV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_IV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_LV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_LuV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_MAX; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_MV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_UEV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_UHV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_UIV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_UMV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_UV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_UXV; +import static gregtech.common.items.IDMetaItem01.Electric_Pump_ZPM; +import static gregtech.common.items.IDMetaItem01.Electromagnet_Iron; +import static gregtech.common.items.IDMetaItem01.Electromagnet_Neodymium; +import static gregtech.common.items.IDMetaItem01.Electromagnet_Samarium; +import static gregtech.common.items.IDMetaItem01.Electromagnet_Steel; +import static gregtech.common.items.IDMetaItem01.Electromagnet_Tengam; +import static gregtech.common.items.IDMetaItem01.Emitter_EV; +import static gregtech.common.items.IDMetaItem01.Emitter_HV; +import static gregtech.common.items.IDMetaItem01.Emitter_IV; +import static gregtech.common.items.IDMetaItem01.Emitter_LV; +import static gregtech.common.items.IDMetaItem01.Emitter_LuV; +import static gregtech.common.items.IDMetaItem01.Emitter_MAX; +import static gregtech.common.items.IDMetaItem01.Emitter_MV; +import static gregtech.common.items.IDMetaItem01.Emitter_UEV; +import static gregtech.common.items.IDMetaItem01.Emitter_UHV; +import static gregtech.common.items.IDMetaItem01.Emitter_UIV; +import static gregtech.common.items.IDMetaItem01.Emitter_UMV; +import static gregtech.common.items.IDMetaItem01.Emitter_UV; +import static gregtech.common.items.IDMetaItem01.Emitter_UXV; +import static gregtech.common.items.IDMetaItem01.Emitter_ZPM; +import static gregtech.common.items.IDMetaItem01.Empty_Board_Basic; +import static gregtech.common.items.IDMetaItem01.Empty_Board_Elite; +import static gregtech.common.items.IDMetaItem01.EnergisedTesseract; +import static gregtech.common.items.IDMetaItem01.Energy_Cluster; +import static gregtech.common.items.IDMetaItem01.Energy_Lapotronic_Orb; +import static gregtech.common.items.IDMetaItem01.Energy_Lapotronic_orb_2; +import static gregtech.common.items.IDMetaItem01.Energy_Module; +import static gregtech.common.items.IDMetaItem01.Field_Generator_EV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_HV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_IV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_LV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_LuV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_MAX; +import static gregtech.common.items.IDMetaItem01.Field_Generator_MV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_UEV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_UHV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_UIV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_UMV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_UV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_UXV; +import static gregtech.common.items.IDMetaItem01.Field_Generator_ZPM; +import static gregtech.common.items.IDMetaItem01.Firebrick; +import static gregtech.common.items.IDMetaItem01.FluidFilter; +import static gregtech.common.items.IDMetaItem01.FluidRegulator_EV; +import static gregtech.common.items.IDMetaItem01.FluidRegulator_HV; +import static gregtech.common.items.IDMetaItem01.FluidRegulator_IV; +import static gregtech.common.items.IDMetaItem01.FluidRegulator_LV; +import static gregtech.common.items.IDMetaItem01.FluidRegulator_LuV; +import static gregtech.common.items.IDMetaItem01.FluidRegulator_MV; +import static gregtech.common.items.IDMetaItem01.FluidRegulator_UV; +import static gregtech.common.items.IDMetaItem01.FluidRegulator_ZPM; +import static gregtech.common.items.IDMetaItem01.Fuel_Can_Plastic_Empty; +import static gregtech.common.items.IDMetaItem01.Fuel_Can_Plastic_Filled; +import static gregtech.common.items.IDMetaItem01.GigaChad; +import static gregtech.common.items.IDMetaItem01.Gravistar; +import static gregtech.common.items.IDMetaItem01.Ingot_Heavy1; +import static gregtech.common.items.IDMetaItem01.Ingot_Heavy2; +import static gregtech.common.items.IDMetaItem01.Ingot_Heavy3; +import static gregtech.common.items.IDMetaItem01.Ingot_Iridium_Alloy; +import static gregtech.common.items.IDMetaItem01.ItemFilter_Export; +import static gregtech.common.items.IDMetaItem01.ItemFilter_Import; +import static gregtech.common.items.IDMetaItem01.Large_Fluid_Cell_Aluminium; +import static gregtech.common.items.IDMetaItem01.Large_Fluid_Cell_Chrome; +import static gregtech.common.items.IDMetaItem01.Large_Fluid_Cell_Iridium; +import static gregtech.common.items.IDMetaItem01.Large_Fluid_Cell_Neutronium; +import static gregtech.common.items.IDMetaItem01.Large_Fluid_Cell_Osmium; +import static gregtech.common.items.IDMetaItem01.Large_Fluid_Cell_StainlessSteel; +import static gregtech.common.items.IDMetaItem01.Large_Fluid_Cell_Steel; +import static gregtech.common.items.IDMetaItem01.Large_Fluid_Cell_Titanium; +import static gregtech.common.items.IDMetaItem01.Large_Fluid_Cell_TungstenSteel; +import static gregtech.common.items.IDMetaItem01.McGuffium_239; +import static gregtech.common.items.IDMetaItem01.NC_SensorKit; +import static gregtech.common.items.IDMetaItem01.NaquadriaSupersolid; +import static gregtech.common.items.IDMetaItem01.Paper_Magic_Empty; +import static gregtech.common.items.IDMetaItem01.Paper_Magic_Page; +import static gregtech.common.items.IDMetaItem01.Paper_Magic_Pages; +import static gregtech.common.items.IDMetaItem01.Paper_Printed_Pages; +import static gregtech.common.items.IDMetaItem01.Paper_Punch_Card_Empty; +import static gregtech.common.items.IDMetaItem01.Paper_Punch_Card_Encoded; +import static gregtech.common.items.IDMetaItem01.QuantumEye; +import static gregtech.common.items.IDMetaItem01.QuantumStar; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_EV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_HV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_IV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_LV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_LuV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_MAX; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_MV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_UEV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_UHV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_UIV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_UMV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_UV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_UXV; +import static gregtech.common.items.IDMetaItem01.Robot_Arm_ZPM; +import static gregtech.common.items.IDMetaItem01.Schematic; +import static gregtech.common.items.IDMetaItem01.Schematic_1by1; +import static gregtech.common.items.IDMetaItem01.Schematic_2by2; +import static gregtech.common.items.IDMetaItem01.Schematic_3by3; +import static gregtech.common.items.IDMetaItem01.Schematic_Crafting; +import static gregtech.common.items.IDMetaItem01.Schematic_Dust; +import static gregtech.common.items.IDMetaItem01.Sensor_EV; +import static gregtech.common.items.IDMetaItem01.Sensor_HV; +import static gregtech.common.items.IDMetaItem01.Sensor_IV; +import static gregtech.common.items.IDMetaItem01.Sensor_LV; +import static gregtech.common.items.IDMetaItem01.Sensor_LuV; +import static gregtech.common.items.IDMetaItem01.Sensor_MAX; +import static gregtech.common.items.IDMetaItem01.Sensor_MV; +import static gregtech.common.items.IDMetaItem01.Sensor_UEV; +import static gregtech.common.items.IDMetaItem01.Sensor_UHV; +import static gregtech.common.items.IDMetaItem01.Sensor_UIV; +import static gregtech.common.items.IDMetaItem01.Sensor_UMV; +import static gregtech.common.items.IDMetaItem01.Sensor_UV; +import static gregtech.common.items.IDMetaItem01.Sensor_UXV; +import static gregtech.common.items.IDMetaItem01.Sensor_ZPM; +import static gregtech.common.items.IDMetaItem01.Shape_Empty; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Axe; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Block; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Bolt; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Bottle; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Casing; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Cell; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_File; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Gear; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Hammer; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Hoe; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Ingot; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Pickaxe; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Pipe_Huge; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Pipe_Large; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Pipe_Medium; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Pipe_Small; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Pipe_Tiny; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Plate; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Ring; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Rod; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Rotor; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Saw; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Shovel; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Small_Gear; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Sword; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Tool_Head_Drill; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Turbine_Blade; +import static gregtech.common.items.IDMetaItem01.Shape_Extruder_Wire; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Anvil; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Arrow; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Baguette; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Ball; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Block; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Bolt; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Bottle; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Bread; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Bun; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Casing; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Credit; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Cylinder; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Gear; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Gear_Small; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Ingot; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Name; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Nugget; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Pipe_Huge; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Pipe_Large; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Pipe_Medium; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Pipe_Small; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Pipe_Tiny; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Plate; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Ring; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Rod; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Rod_Long; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Rotor; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Round; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Screw; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Tool_Head_Drill; +import static gregtech.common.items.IDMetaItem01.Shape_Mold_Turbine_Blade; +import static gregtech.common.items.IDMetaItem01.Shape_Slicer_Flat; +import static gregtech.common.items.IDMetaItem01.Shape_Slicer_Stripes; +import static gregtech.common.items.IDMetaItem01.Spray_Color_0; +import static gregtech.common.items.IDMetaItem01.Spray_Color_1; +import static gregtech.common.items.IDMetaItem01.Spray_Color_10; +import static gregtech.common.items.IDMetaItem01.Spray_Color_11; +import static gregtech.common.items.IDMetaItem01.Spray_Color_12; +import static gregtech.common.items.IDMetaItem01.Spray_Color_13; +import static gregtech.common.items.IDMetaItem01.Spray_Color_14; +import static gregtech.common.items.IDMetaItem01.Spray_Color_15; +import static gregtech.common.items.IDMetaItem01.Spray_Color_2; +import static gregtech.common.items.IDMetaItem01.Spray_Color_3; +import static gregtech.common.items.IDMetaItem01.Spray_Color_4; +import static gregtech.common.items.IDMetaItem01.Spray_Color_5; +import static gregtech.common.items.IDMetaItem01.Spray_Color_6; +import static gregtech.common.items.IDMetaItem01.Spray_Color_7; +import static gregtech.common.items.IDMetaItem01.Spray_Color_8; +import static gregtech.common.items.IDMetaItem01.Spray_Color_9; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Remover; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Remover_Empty; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_0; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_1; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_10; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_11; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_12; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_13; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_14; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_15; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_2; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_3; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_4; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_5; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_6; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_7; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_8; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_9; +import static gregtech.common.items.IDMetaItem01.Spray_Color_Used_Remover; +import static gregtech.common.items.IDMetaItem01.Spray_Empty; +import static gregtech.common.items.IDMetaItem01.StableAdhesive; +import static gregtech.common.items.IDMetaItem01.Steam_Regulator_EV; +import static gregtech.common.items.IDMetaItem01.Steam_Regulator_HV; +import static gregtech.common.items.IDMetaItem01.Steam_Regulator_IV; +import static gregtech.common.items.IDMetaItem01.Steam_Regulator_LV; +import static gregtech.common.items.IDMetaItem01.Steam_Regulator_MV; +import static gregtech.common.items.IDMetaItem01.Steam_Valve_EV; +import static gregtech.common.items.IDMetaItem01.Steam_Valve_HV; +import static gregtech.common.items.IDMetaItem01.Steam_Valve_IV; +import static gregtech.common.items.IDMetaItem01.Steam_Valve_LV; +import static gregtech.common.items.IDMetaItem01.Steam_Valve_MV; +import static gregtech.common.items.IDMetaItem01.SuperconductorComposite; +import static gregtech.common.items.IDMetaItem01.Tesseract; +import static gregtech.common.items.IDMetaItem01.Thermos_Can_Empty; +import static gregtech.common.items.IDMetaItem01.Tool_Cheat; +import static gregtech.common.items.IDMetaItem01.Tool_Cover_Copy_Paste; +import static gregtech.common.items.IDMetaItem01.Tool_DataOrb; +import static gregtech.common.items.IDMetaItem01.Tool_DataStick; +import static gregtech.common.items.IDMetaItem01.Tool_Lighter_Invar_Empty; +import static gregtech.common.items.IDMetaItem01.Tool_Lighter_Invar_Full; +import static gregtech.common.items.IDMetaItem01.Tool_Lighter_Invar_Used; +import static gregtech.common.items.IDMetaItem01.Tool_Lighter_Platinum_Empty; +import static gregtech.common.items.IDMetaItem01.Tool_Lighter_Platinum_Full; +import static gregtech.common.items.IDMetaItem01.Tool_Lighter_Platinum_Used; +import static gregtech.common.items.IDMetaItem01.Tool_MatchBox_Full; +import static gregtech.common.items.IDMetaItem01.Tool_MatchBox_Used; +import static gregtech.common.items.IDMetaItem01.Tool_Matches; +import static gregtech.common.items.IDMetaItem01.Tool_Scanner; +import static gregtech.common.items.IDMetaItem01.Tool_Sonictron; +import static gregtech.common.items.IDMetaItem01.Upgrade_Lock; +import static gregtech.common.items.IDMetaItem01.Upgrade_Muffler; +import static gregtech.common.items.IDMetaItem01.ZPM2; +import static gregtech.common.items.IDMetaItem01.ZPM3; +import static gregtech.common.items.IDMetaItem01.ZPM4; +import static gregtech.common.items.IDMetaItem01.ZPM5; +import static gregtech.common.items.IDMetaItem01.ZPM6; + +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OreDictNames; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TCAspects; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IItemBehaviour; +import gregtech.api.interfaces.ITexture; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedItemX32; +import gregtech.api.objects.ItemData; +import gregtech.api.objects.MaterialStack; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTFoodStat; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.common.config.other.ConfigGeneral; +import gregtech.common.covers.CoverArm; +import gregtech.common.covers.CoverChest; +import gregtech.common.covers.CoverControlsWork; +import gregtech.common.covers.CoverConveyor; +import gregtech.common.covers.CoverCrafting; +import gregtech.common.covers.CoverDoesWork; +import gregtech.common.covers.CoverDrain; +import gregtech.common.covers.CoverEUMeter; +import gregtech.common.covers.CoverFluidLimiter; +import gregtech.common.covers.CoverFluidRegulator; +import gregtech.common.covers.CoverFluidStorageMonitor; +import gregtech.common.covers.CoverFluidfilter; +import gregtech.common.covers.CoverItemFilter; +import gregtech.common.covers.CoverItemMeter; +import gregtech.common.covers.CoverLiquidMeter; +import gregtech.common.covers.CoverNeedMaintainance; +import gregtech.common.covers.CoverPlayerDetector; +import gregtech.common.covers.CoverPump; +import gregtech.common.covers.CoverRedstoneReceiverExternal; +import gregtech.common.covers.CoverRedstoneReceiverInternal; +import gregtech.common.covers.CoverRedstoneTransmitterExternal; +import gregtech.common.covers.CoverRedstoneTransmitterInternal; +import gregtech.common.covers.CoverScreen; +import gregtech.common.covers.CoverShutter; +import gregtech.common.covers.CoverSolarPanel; +import gregtech.common.covers.CoverSteamRegulator; +import gregtech.common.covers.CoverSteamValve; +import gregtech.common.items.behaviors.BehaviourCoverTool; +import gregtech.common.items.behaviors.BehaviourDataOrb; +import gregtech.common.items.behaviors.BehaviourDataStick; +import gregtech.common.items.behaviors.BehaviourLighter; +import gregtech.common.items.behaviors.BehaviourPrintedPages; +import gregtech.common.items.behaviors.BehaviourScanner; +import gregtech.common.items.behaviors.BehaviourSensorKit; +import gregtech.common.items.behaviors.BehaviourSonictron; +import gregtech.common.items.behaviors.BehaviourSprayColor; +import gregtech.common.items.behaviors.BehaviourSprayColorRemover; +import gregtech.common.items.behaviors.BehaviourWrittenBook; +import gregtech.common.tileentities.machines.multi.MTEIndustrialElectromagneticSeparator.MagnetTiers; + +public class MetaGeneratedItem01 extends MetaGeneratedItemX32 { + + public static MetaGeneratedItem01 INSTANCE; + private final String mToolTipPurify = GTLanguageManager + .addStringLocalization("metaitem.01.tooltip.purify", "Throw into Cauldron to get clean Dust"); + private static final String aTextEmptyRow = " "; + private static final String aTextShape = " P "; + private static final String PartCoverText = " L/t ("; + private static final String PartCoverText2 = " L/s) as Cover"; + private static final String PartNotCoverText = "Cannot be used as a Cover"; + private static final String RAText = "Grabs from and inserts into specific slots"; + private static final String FRText1 = "Configurable up to "; + private static final String FRText2 = " L/sec (as Cover)/n Rightclick/Screwdriver-rightclick/Shift-screwdriver-rightclick/n to adjust the pump speed by 1/16/256 L/sec per click"; + + private static final int[] Spray_Colors = new int[] { Spray_Color_0.ID, Spray_Color_1.ID, Spray_Color_2.ID, + Spray_Color_3.ID, Spray_Color_4.ID, Spray_Color_5.ID, Spray_Color_6.ID, Spray_Color_7.ID, Spray_Color_8.ID, + Spray_Color_9.ID, Spray_Color_10.ID, Spray_Color_11.ID, Spray_Color_12.ID, Spray_Color_13.ID, Spray_Color_14.ID, + Spray_Color_15.ID }; + private static final int[] Spray_Colors_Used = new int[] { Spray_Color_Used_0.ID, Spray_Color_Used_1.ID, + Spray_Color_Used_2.ID, Spray_Color_Used_3.ID, Spray_Color_Used_4.ID, Spray_Color_Used_5.ID, + Spray_Color_Used_6.ID, Spray_Color_Used_7.ID, Spray_Color_Used_8.ID, Spray_Color_Used_9.ID, + Spray_Color_Used_10.ID, Spray_Color_Used_11.ID, Spray_Color_Used_12.ID, Spray_Color_Used_13.ID, + Spray_Color_Used_14.ID, Spray_Color_Used_15.ID }; + + public MetaGeneratedItem01() { + super( + "metaitem.01", + OrePrefixes.dustTiny, + OrePrefixes.dustSmall, + OrePrefixes.dust, + OrePrefixes.dustImpure, + OrePrefixes.dustPure, + OrePrefixes.crushed, + OrePrefixes.crushedPurified, + OrePrefixes.crushedCentrifuged, + OrePrefixes.gem, + OrePrefixes.nugget, + null, + OrePrefixes.ingot, + OrePrefixes.ingotHot, + OrePrefixes.ingotDouble, + OrePrefixes.ingotTriple, + OrePrefixes.ingotQuadruple, + OrePrefixes.ingotQuintuple, + OrePrefixes.plate, + OrePrefixes.plateDouble, + OrePrefixes.plateTriple, + OrePrefixes.plateQuadruple, + OrePrefixes.plateQuintuple, + OrePrefixes.plateDense, + OrePrefixes.stick, + OrePrefixes.lens, + OrePrefixes.round, + OrePrefixes.bolt, + OrePrefixes.screw, + OrePrefixes.ring, + OrePrefixes.foil, + OrePrefixes.cell, + OrePrefixes.cellPlasma); + INSTANCE = this; + + ItemList.Credit_Greg_Copper + .set(addItem(IDMetaItem01.Credit_Greg_Copper.ID, "Copper GT Credit", "0.125 Credits")); + ItemList.Credit_Greg_Cupronickel.set( + addItem( + IDMetaItem01.Credit_Greg_Cupronickel.ID, + "Cupronickel GT Credit", + "1 Credit", + new ItemData(Materials.Cupronickel, 907200L))); + ItemList.Credit_Greg_Silver.set( + addItem( + IDMetaItem01.Credit_Greg_Silver.ID, + "Silver GT Credit", + "8 Credits", + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1L))); + ItemList.Credit_Greg_Gold.set(addItem(IDMetaItem01.Credit_Greg_Gold.ID, "Gold GT Credit", "64 Credits")); + ItemList.Credit_Greg_Platinum + .set(addItem(IDMetaItem01.Credit_Greg_Platinum.ID, "Platinum GT Credit", "512 Credits")); + ItemList.Credit_Greg_Osmium + .set(addItem(IDMetaItem01.Credit_Greg_Osmium.ID, "Osmium GT Credit", "4,096 Credits")); + ItemList.Credit_Greg_Naquadah + .set(addItem(IDMetaItem01.Credit_Greg_Naquadah.ID, "Naquadah GT Credit", "32,768 Credits")); + ItemList.Credit_Greg_Neutronium + .set(addItem(IDMetaItem01.Credit_Greg_Neutronium.ID, "Neutronium GT Credit", "262,144 Credits")); + ItemList.Coin_Gold_Ancient.set( + addItem( + IDMetaItem01.Coin_Gold_Ancient.ID, + "Ancient Gold Coin", + "Found in ancient Ruins", + new ItemData(Materials.Gold, 907200L), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 8L))); + ItemList.Coin_Doge.set( + addItem( + IDMetaItem01.Coin_Doge.ID, + "Doge Coin", + "wow much coin how money so crypto plz mine v rich very currency wow", + new ItemData(Materials.Brass, 907200L), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1L))); + ItemList.Coin_Chocolate.set( + addItem( + IDMetaItem01.Coin_Chocolate.ID, + "Chocolate Coin", + "Wrapped in Gold", + new ItemData(Materials.Gold, OrePrefixes.foil.mMaterialAmount), + new GTFoodStat( + 1, + 0.1F, + EnumAction.eat, + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Gold, 1L), + true, + false, + false, + Potion.moveSpeed.id, + 200, + 1, + 100))); + ItemList.Credit_Copper.set(addItem(IDMetaItem01.Credit_Copper.ID, "Industrial Copper Credit", "0.125 Credits")); + + ItemList.Credit_Silver.set( + addItem( + IDMetaItem01.Credit_Silver.ID, + "Industrial Silver Credit", + "8 Credits", + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1L))); + ItemList.Credit_Gold.set(addItem(IDMetaItem01.Credit_Gold.ID, "Industrial Gold Credit", "64 Credits")); + ItemList.Credit_Platinum + .set(addItem(IDMetaItem01.Credit_Platinum.ID, "Industrial Platinum Credit", "512 Credits")); + ItemList.Credit_Osmium.set(addItem(IDMetaItem01.Credit_Osmium.ID, "Industrial Osmium Credit", "4096 Credits")); + + ItemList.Component_Minecart_Wheels_Iron.set( + addItem( + Component_Minecraft_Wheels_Iron.ID, + "Iron Minecart Wheels", + "To get things rolling", + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L))); + ItemList.Component_Minecart_Wheels_Steel.set( + addItem( + Component_Minecraft_Wheels_Steel.ID, + "Steel Minecart Wheels", + "To get things rolling", + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L))); + + GTModHandler.addCraftingRecipe( + ItemList.Component_Minecart_Wheels_Iron.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { " h ", "RSR", " w ", 'R', OrePrefixes.ring.get(Materials.AnyIron), 'S', + OrePrefixes.stick.get(Materials.AnyIron) }); + GTModHandler.addCraftingRecipe( + ItemList.Component_Minecart_Wheels_Steel.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { " h ", "RSR", " w ", 'R', OrePrefixes.ring.get(Materials.Steel), 'S', + OrePrefixes.stick.get(Materials.Steel) }); + + ItemList.CompressedFireclay.set(addItem(Compressed_Fireclay.ID, "Compressed Fireclay", "Brick-shaped")); + GTOreDictUnificator.addItemDataFromInputs(ItemList.CompressedFireclay.get(1), Materials.Fireclay.getDust(1)); + + ItemList.Firebrick.set(addItem(Firebrick.ID, "Firebrick", "Heat resistant")); + GTOreDictUnificator.addItemDataFromInputs(ItemList.Firebrick.get(1), Materials.Fireclay.getDust(1)); + + ItemList.Shape_Empty.set( + addItem( + Shape_Empty.ID, + "Empty Shape Plate", + "Raw Plate to make Molds and Extruder Shapes", + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 4L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L))); + + ItemList.Shape_Mold_Plate.set(addItem(Shape_Mold_Plate.ID, "Mold (Plate)", "Mold for making Plates")); + ItemList.Shape_Mold_Casing.set(addItem(Shape_Mold_Casing.ID, "Mold (Casing)", "Mold for making Item Casings")); + ItemList.Shape_Mold_Gear.set(addItem(Shape_Mold_Gear.ID, "Mold (Gear)", "Mold for making Gears")); + ItemList.Shape_Mold_Credit + .set(addItem(Shape_Mold_Credit.ID, "Mold (Coinage)", "Secure Mold for making Coins (Don't lose it!)")); + ItemList.Shape_Mold_Bottle.set(addItem(Shape_Mold_Bottle.ID, "Mold (Bottle)", "Mold for making Bottles")); + ItemList.Shape_Mold_Ingot.set(addItem(Shape_Mold_Ingot.ID, "Mold (Ingot)", "Mold for making Ingots")); + ItemList.Shape_Mold_Ball.set(addItem(Shape_Mold_Ball.ID, "Mold (Ball)", "Mold for making Balls")); + ItemList.Shape_Mold_Block.set(addItem(Shape_Mold_Block.ID, "Mold (Block)", "Mold for making Blocks")); + ItemList.Shape_Mold_Nugget.set(addItem(Shape_Mold_Nugget.ID, "Mold (Nuggets)", "Mold for making Nuggets")); + ItemList.Shape_Mold_Bun.set(addItem(Shape_Mold_Bun.ID, "Mold (Buns)", "Mold for shaping Buns")); + ItemList.Shape_Mold_Bread.set(addItem(Shape_Mold_Bread.ID, "Mold (Bread)", "Mold for shaping Breads")); + ItemList.Shape_Mold_Baguette + .set(addItem(Shape_Mold_Baguette.ID, "Mold (Baguette)", "Mold for shaping Baguettes")); + ItemList.Shape_Mold_Cylinder + .set(addItem(Shape_Mold_Cylinder.ID, "Mold (Cylinder)", "Mold for shaping Cylinders")); + ItemList.Shape_Mold_Anvil.set(addItem(Shape_Mold_Anvil.ID, "Mold (Anvil)", "Mold for shaping Anvils")); + ItemList.Shape_Mold_Name + .set(addItem(Shape_Mold_Name.ID, "Mold (Name)", "Mold for naming Items (rename Mold with Anvil)")); + ItemList.Shape_Mold_Arrow.set(addItem(Shape_Mold_Arrow.ID, "Mold (Arrow Head)", "Mold for making Arrow Heads")); + ItemList.Shape_Mold_Gear_Small + .set(addItem(Shape_Mold_Gear_Small.ID, "Mold (Small Gear)", "Mold for making small Gears")); + ItemList.Shape_Mold_Rod.set(addItem(Shape_Mold_Rod.ID, "Mold (Rod)", "Mold for making Rods")); + ItemList.Shape_Mold_Bolt.set(addItem(Shape_Mold_Bolt.ID, "Mold (Bolt)", "Mold for making Bolts")); + ItemList.Shape_Mold_Round.set(addItem(Shape_Mold_Round.ID, "Mold (Round)", "Mold for making Rounds")); + ItemList.Shape_Mold_Screw.set(addItem(Shape_Mold_Screw.ID, "Mold (Screw)", "Mold for making Screws")); + ItemList.Shape_Mold_Ring.set(addItem(Shape_Mold_Ring.ID, "Mold (Ring)", "Mold for making Rings")); + ItemList.Shape_Mold_Rod_Long + .set(addItem(Shape_Mold_Rod_Long.ID, "Mold (Long Rod)", "Mold for making Long Rods")); + ItemList.Shape_Mold_Rotor.set(addItem(Shape_Mold_Rotor.ID, "Mold (Rotor)", "Mold for making a Rotor")); + ItemList.Shape_Mold_Turbine_Blade + .set(addItem(Shape_Mold_Turbine_Blade.ID, "Mold (Turbine Blade)", "Mold for making a Turbine Blade")); + ItemList.Shape_Mold_Pipe_Tiny + .set(addItem(Shape_Mold_Pipe_Tiny.ID, "Mold (Tiny Pipe)", "Mold for making tiny Pipes")); + ItemList.Shape_Mold_Pipe_Small + .set(addItem(Shape_Mold_Pipe_Small.ID, "Mold (Small Pipe)", "Mold for making small Pipes")); + ItemList.Shape_Mold_Pipe_Medium + .set(addItem(Shape_Mold_Pipe_Medium.ID, "Mold (Normal Pipe)", "Mold for making Pipes")); + ItemList.Shape_Mold_Pipe_Large + .set(addItem(Shape_Mold_Pipe_Large.ID, "Mold (Large Pipe)", "Mold for making large Pipes")); + ItemList.Shape_Mold_Pipe_Huge + .set(addItem(Shape_Mold_Pipe_Huge.ID, "Mold (Huge Pipe)", "Mold for making full Block Pipes")); + ItemList.Shape_Mold_ToolHeadDrill + .set(addItem(Shape_Mold_Tool_Head_Drill.ID, "Mold (Drill Head)", "Mold for making Drill Heads")); + + ItemList.Shape_Extruder_Plate + .set(addItem(Shape_Extruder_Plate.ID, "Extruder Shape (Plate)", "Extruder Shape for making Plates")); + ItemList.Shape_Extruder_Rod + .set(addItem(Shape_Extruder_Rod.ID, "Extruder Shape (Rod)", "Extruder Shape for making Rods")); + ItemList.Shape_Extruder_Bolt + .set(addItem(Shape_Extruder_Bolt.ID, "Extruder Shape (Bolt)", "Extruder Shape for making Bolts")); + ItemList.Shape_Extruder_Ring + .set(addItem(Shape_Extruder_Ring.ID, "Extruder Shape (Ring)", "Extruder Shape for making Rings")); + ItemList.Shape_Extruder_Cell + .set(addItem(Shape_Extruder_Cell.ID, "Extruder Shape (Cell)", "Extruder Shape for making Cells")); + ItemList.Shape_Extruder_Ingot.set( + addItem( + Shape_Extruder_Ingot.ID, + "Extruder Shape (Ingot)", + "Extruder Shape for, wait, can't we just use a Furnace?")); + ItemList.Shape_Extruder_Wire + .set(addItem(Shape_Extruder_Wire.ID, "Extruder Shape (Wire)", "Extruder Shape for making Wires")); + ItemList.Shape_Extruder_Casing.set( + addItem(Shape_Extruder_Casing.ID, "Extruder Shape (Casing)", "Extruder Shape for making Item Casings")); + ItemList.Shape_Extruder_Pipe_Tiny.set( + addItem(Shape_Extruder_Pipe_Tiny.ID, "Extruder Shape (Tiny Pipe)", "Extruder Shape for making tiny Pipes")); + ItemList.Shape_Extruder_Pipe_Small.set( + addItem( + Shape_Extruder_Pipe_Small.ID, + "Extruder Shape (Small Pipe)", + "Extruder Shape for making small Pipes")); + ItemList.Shape_Extruder_Pipe_Medium.set( + addItem(Shape_Extruder_Pipe_Medium.ID, "Extruder Shape (Normal Pipe)", "Extruder Shape for making Pipes")); + ItemList.Shape_Extruder_Pipe_Large.set( + addItem( + Shape_Extruder_Pipe_Large.ID, + "Extruder Shape (Large Pipe)", + "Extruder Shape for making large Pipes")); + ItemList.Shape_Extruder_Pipe_Huge.set( + addItem( + Shape_Extruder_Pipe_Huge.ID, + "Extruder Shape (Huge Pipe)", + "Extruder Shape for making full Block Pipes")); + ItemList.Shape_Extruder_Block + .set(addItem(Shape_Extruder_Block.ID, "Extruder Shape (Block)", "Extruder Shape for making Blocks")); + ItemList.Shape_Extruder_Sword + .set(addItem(Shape_Extruder_Sword.ID, "Extruder Shape (Sword Blade)", "Extruder Shape for making Swords")); + ItemList.Shape_Extruder_Pickaxe.set( + addItem(Shape_Extruder_Pickaxe.ID, "Extruder Shape (Pickaxe Head)", "Extruder Shape for making Pickaxes")); + ItemList.Shape_Extruder_Shovel.set( + addItem(Shape_Extruder_Shovel.ID, "Extruder Shape (Shovel Head)", "Extruder Shape for making Shovels")); + ItemList.Shape_Extruder_Axe + .set(addItem(Shape_Extruder_Axe.ID, "Extruder Shape (Axe Head)", "Extruder Shape for making Axes")); + ItemList.Shape_Extruder_Hoe + .set(addItem(Shape_Extruder_Hoe.ID, "Extruder Shape (Hoe Head)", "Extruder Shape for making Hoes")); + ItemList.Shape_Extruder_Hammer.set( + addItem(Shape_Extruder_Hammer.ID, "Extruder Shape (Hammer Head)", "Extruder Shape for making Hammers")); + ItemList.Shape_Extruder_File + .set(addItem(Shape_Extruder_File.ID, "Extruder Shape (File Head)", "Extruder Shape for making Files")); + ItemList.Shape_Extruder_Saw + .set(addItem(Shape_Extruder_Saw.ID, "Extruder Shape (Saw Blade)", "Extruder Shape for making Saws")); + ItemList.Shape_Extruder_Gear + .set(addItem(Shape_Extruder_Gear.ID, "Extruder Shape (Gear)", "Extruder Shape for making Gears")); + ItemList.Shape_Extruder_Bottle + .set(addItem(Shape_Extruder_Bottle.ID, "Extruder Shape (Bottle)", "Extruder Shape for making Bottles")); + ItemList.Shape_Extruder_Rotor + .set(addItem(Shape_Extruder_Rotor.ID, "Extruder Shape (Rotor)", "Extruder Shape for a Rotor")); + ItemList.Shape_Extruder_Small_Gear.set( + addItem(Shape_Extruder_Small_Gear.ID, "Extruder Shape (Small Gear)", "Extruder Shape for a Small Gear")); + ItemList.Shape_Extruder_Turbine_Blade.set( + addItem( + Shape_Extruder_Turbine_Blade.ID, + "Extruder Shape (Turbine Blade)", + "Extruder Shape for a Turbine Blade")); + ItemList.Shape_Extruder_ToolHeadDrill.set( + addItem( + Shape_Extruder_Tool_Head_Drill.ID, + "Extruder Shape (Drill Head)", + "Extruder Shape for a Drill Head")); + + ItemList.Shape_Slicer_Flat + .set(addItem(Shape_Slicer_Flat.ID, "Slicer Blade (Flat)", "Slicer Blade for cutting Flat")); + ItemList.Shape_Slicer_Stripes + .set(addItem(Shape_Slicer_Stripes.ID, "Slicer Blade (Stripes)", "Slicer Blade for cutting Stripes")); + + ItemList.Fuel_Can_Plastic_Empty.set( + addItem( + Fuel_Can_Plastic_Empty.ID, + "Empty Plastic Fuel Can", + "Used to store Fuels", + new ItemData(Materials.Plastic, OrePrefixes.plate.mMaterialAmount * 1L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 1L))); + ItemList.Fuel_Can_Plastic_Filled.set( + addItem( + Fuel_Can_Plastic_Filled.ID, + "Plastic Fuel Can", + "Burns well in Diesel Generators", + new ItemData(Materials.Plastic, OrePrefixes.plate.mMaterialAmount * 1L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 1L))); + + ItemList.Spray_Empty.set( + addItem( + Spray_Empty.ID, + "Empty Spray Can", + "Used for making Sprays", + new ItemData( + Materials.Tin, + OrePrefixes.plate.mMaterialAmount * 2L, + Materials.Redstone, + OrePrefixes.dust.mMaterialAmount), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 1L))); + + ItemList.Crate_Empty.set( + addItem( + Crate_Empty.ID, + "Empty Crate", + "To Package lots of Material", + new ItemData(Materials.Wood, 3628800L, Materials.Iron, OrePrefixes.screw.mMaterialAmount), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 2L))); + + ItemList.ThermosCan_Empty.set( + addItem( + Thermos_Can_Empty.ID, + "Empty Thermos Can", + "Keeping hot things hot and cold things cold", + new ItemData( + Materials.Aluminium, + OrePrefixes.plateDouble.mMaterialAmount * 1L + 2L * OrePrefixes.ring.mMaterialAmount), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L))); + + ItemList.Large_Fluid_Cell_Steel.set( + addItem( + Large_Fluid_Cell_Steel.ID, + "Large Steel Fluid Cell", + "", + new ItemData( + Materials.Steel, + OrePrefixes.plateDouble.mMaterialAmount * 4L, + new MaterialStack(Materials.Bronze, OrePrefixes.ring.mMaterialAmount * 4L)), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 4L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 2L))); + + ItemList.Large_Fluid_Cell_TungstenSteel.set( + addItem( + Large_Fluid_Cell_TungstenSteel.ID, + "Large Tungstensteel Fluid Cell", + "", + new ItemData( + Materials.TungstenSteel, + OrePrefixes.plateDouble.mMaterialAmount * 4L, + new MaterialStack(Materials.Platinum, OrePrefixes.ring.mMaterialAmount * 4L)), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 9L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 7L))); + + ItemList.Large_Fluid_Cell_Aluminium.set( + addItem( + Large_Fluid_Cell_Aluminium.ID, + "Large Aluminium Fluid Cell", + "", + new ItemData( + Materials.Aluminium, + OrePrefixes.plateDouble.mMaterialAmount * 4L, + new MaterialStack(Materials.Silver, OrePrefixes.ring.mMaterialAmount * 4L)), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 5L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 3L))); + + ItemList.Large_Fluid_Cell_StainlessSteel.set( + addItem( + Large_Fluid_Cell_StainlessSteel.ID, + "Large Stainless Steel Fluid Cell", + "", + new ItemData( + Materials.StainlessSteel, + OrePrefixes.plateDouble.mMaterialAmount * 4L, + new MaterialStack(Materials.Electrum, OrePrefixes.ring.mMaterialAmount * 4L)), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 6L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 4L))); + + ItemList.Large_Fluid_Cell_Titanium.set( + addItem( + Large_Fluid_Cell_Titanium.ID, + "Large Titanium Fluid Cell", + "", + new ItemData( + Materials.Titanium, + OrePrefixes.plateDouble.mMaterialAmount * 4L, + new MaterialStack(Materials.RoseGold, OrePrefixes.ring.mMaterialAmount * 4L)), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 7L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 5L))); + + ItemList.Large_Fluid_Cell_Chrome.set( + addItem( + Large_Fluid_Cell_Chrome.ID, + "Large Chrome Fluid Cell", + "", + new ItemData( + Materials.Chrome, + OrePrefixes.plateDouble.mMaterialAmount * 4L, + new MaterialStack(Materials.Palladium, OrePrefixes.ring.mMaterialAmount * 4L)), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 8L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 6L))); + + ItemList.Large_Fluid_Cell_Iridium.set( + addItem( + Large_Fluid_Cell_Iridium.ID, + "Large Iridium Fluid Cell", + "", + new ItemData( + Materials.Iridium, + OrePrefixes.plateDouble.mMaterialAmount * 4L, + new MaterialStack(Materials.Naquadah, OrePrefixes.ring.mMaterialAmount * 4L)), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 10L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 8L))); + + ItemList.Large_Fluid_Cell_Osmium.set( + addItem( + Large_Fluid_Cell_Osmium.ID, + "Large Osmium Fluid Cell", + "", + new ItemData( + Materials.Osmium, + OrePrefixes.plateDouble.mMaterialAmount * 4L, + new MaterialStack(Materials.ElectrumFlux, OrePrefixes.ring.mMaterialAmount * 4L)), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 11L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 9L))); + + ItemList.Large_Fluid_Cell_Neutronium.set( + addItem( + Large_Fluid_Cell_Neutronium.ID, + "Large Neutronium Fluid Cell", + "", + new ItemData( + Materials.Neutronium, + OrePrefixes.plateDouble.mMaterialAmount * 4L, + new MaterialStack(Materials.Draconium, OrePrefixes.ring.mMaterialAmount * 4L)), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 12L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 10L))); + + for (byte i = 0; i < 16; i = (byte) (i + 1)) { + ItemList.SPRAY_CAN_DYES[i].set( + addItem( + Spray_Colors[i], + "Spray Can (" + Dyes.get(i).mName + ")", + "Full", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 4L))); + ItemList.SPRAY_CAN_DYES_USED[i].set( + addItem( + Spray_Colors_Used[i], + "Spray Can (" + Dyes.get(i).mName + ")", + "Used", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 3L), + SubTag.INVISIBLE)); + } + + ItemList.Spray_Color_Remover.set( + addItem( + Spray_Color_Remover.ID, + "Spray Can Solvent", + "Full", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 4L), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 8L))); + ItemList.Spray_Color_Used_Remover.set( + addItem( + Spray_Color_Used_Remover.ID, + "Spray Can Solvent", + "Used", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 3L), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 6L), + SubTag.INVISIBLE)); + + ItemList.Spray_Color_Remover_Empty.set( + addItem( + Spray_Color_Remover_Empty.ID, + "Empty Spray Can Solvent Cannister", + "Used for making Spray Can Solvent", + new ItemData( + Materials.Aluminium, + OrePrefixes.plateDouble.mMaterialAmount * 4L, + Materials.Redstone, + OrePrefixes.dust.mMaterialAmount), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 1L))); + + ItemList.Tool_Matches.set( + addItem( + Tool_Matches.ID, + "Match", + "", + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L))); + + ItemList.Tool_MatchBox_Used.set( + addItem( + Tool_MatchBox_Used.ID, + "Match Box", + "This is not a Car", + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 2L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L), + SubTag.INVISIBLE)); + + ItemList.Tool_MatchBox_Full.set( + addItem( + Tool_MatchBox_Full.ID, + "Match Box (Full)", + "This is not a Car", + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2L))); + + ItemList.Tool_Lighter_Invar_Empty.set( + addItem( + Tool_Lighter_Invar_Empty.ID, + "Lighter (Empty)", + "", + new ItemData(Materials.Invar, OrePrefixes.plate.mMaterialAmount * 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L))); + ItemList.Tool_Lighter_Invar_Used.set( + addItem( + Tool_Lighter_Invar_Used.ID, + "Lighter", + "", + new ItemData(Materials.Invar, OrePrefixes.plate.mMaterialAmount * 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 2L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L), + SubTag.INVISIBLE)); + ItemList.Tool_Lighter_Invar_Full.set( + addItem( + Tool_Lighter_Invar_Full.ID, + "Lighter (Full)", + "", + new ItemData(Materials.Invar, OrePrefixes.plate.mMaterialAmount * 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2L))); + + ItemList.Tool_Lighter_Platinum_Empty.set( + addItem( + Tool_Lighter_Platinum_Empty.ID, + "Platinum Lighter (Empty)", + "A known Prank Master is engraved on it", + new ItemData(Materials.Platinum, OrePrefixes.plate.mMaterialAmount * 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L))); + ItemList.Tool_Lighter_Platinum_Used.set( + addItem( + Tool_Lighter_Platinum_Used.ID, + "Platinum Lighter", + "A known Prank Master is engraved on it", + new ItemData(Materials.Platinum, OrePrefixes.plate.mMaterialAmount * 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 2L), + new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L), + SubTag.INVISIBLE)); + ItemList.Tool_Lighter_Platinum_Full.set( + addItem( + Tool_Lighter_Platinum_Full.ID, + "Platinum Lighter (Full)", + "A known Prank Master is engraved on it", + new ItemData(Materials.Platinum, OrePrefixes.plate.mMaterialAmount * 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2L))); + + ItemList.Ingot_Heavy1 + .set(addItem(Ingot_Heavy1.ID, "Heavy Duty Alloy Ingot T1", "Used to make Heavy Duty Plates T1")); + ItemList.Ingot_Heavy2 + .set(addItem(Ingot_Heavy2.ID, "Heavy Duty Alloy Ingot T2", "Used to make Heavy Duty Plates T2")); + ItemList.Ingot_Heavy3 + .set(addItem(Ingot_Heavy3.ID, "Heavy Duty Alloy Ingot T3", "Used to make Heavy Duty Plates T3")); + + ItemList.Ingot_IridiumAlloy.set( + addItem( + Ingot_Iridium_Alloy.ID, + "Iridium Alloy Ingot", + "Used to make Iridium Plates", + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 4L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L))); + + ItemList.Paper_Printed_Pages.set( + addItem( + Paper_Printed_Pages.ID, + "Printed Pages", + "Used to make written Books", + new ItemData(Materials.Paper, 10886400L), + new BehaviourPrintedPages(), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 2L))); + ItemList.Paper_Magic_Empty.set( + addItem( + Paper_Magic_Empty.ID, + "Magic Paper", + "", + SubTag.INVISIBLE, + new ItemData(Materials.Paper, 3628800L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1L))); + ItemList.Paper_Magic_Page.set( + addItem( + Paper_Magic_Page.ID, + "Enchanted Page", + "", + SubTag.INVISIBLE, + new ItemData(Materials.Paper, 3628800L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 2L))); + ItemList.Paper_Magic_Pages.set( + addItem( + Paper_Magic_Pages.ID, + "Enchanted Pages", + "", + SubTag.INVISIBLE, + new ItemData(Materials.Paper, 10886400L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 2L), + new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 4L))); + ItemList.Paper_Punch_Card_Empty.set( + addItem( + Paper_Punch_Card_Empty.ID, + "Punch Card", + "", + SubTag.INVISIBLE, + new ItemData(Materials.Paper, 7257600L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1L))); + ItemList.Paper_Punch_Card_Encoded.set( + addItem( + Paper_Punch_Card_Encoded.ID, + "Punched Card", + "", + SubTag.INVISIBLE, + new ItemData(Materials.Paper, 7257600L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 2L))); + ItemList.Book_Written_01.set( + addItem( + Book_Written_01.ID, + "Book", + "", + new ItemData(Materials.Paper, 10886400L), + "bookWritten", + OreDictNames.craftingBook, + new BehaviourWrittenBook(), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 2L))); + ItemList.Book_Written_02.set( + addItem( + Book_Written_02.ID, + "Book", + "", + new ItemData(Materials.Paper, 10886400L), + "bookWritten", + OreDictNames.craftingBook, + new BehaviourWrittenBook(), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 2L))); + ItemList.Book_Written_03.set( + addItem( + Book_Written_03.ID, + "Book", + "", + new ItemData(Materials.Paper, 10886400L), + "bookWritten", + OreDictNames.craftingBook, + new BehaviourWrittenBook(), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 2L))); + + ItemList.Schematic.set( + addItem( + Schematic.ID, + "Schematic", + "EMPTY", + new ItemData(Materials.Steel, 7257600L), + new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 1L))); + ItemList.Schematic_Crafting.set( + addItem( + Schematic_Crafting.ID, + "Schematic (Crafting)", + "Crafts the Programmed Recipe", + new ItemData(Materials.Steel, 7257600L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 1L))); + ItemList.Schematic_1by1.set( + addItem( + Schematic_1by1.ID, + "Schematic (1x1)", + "Crafts 1 Items as 1x1 (use in Packager)", + new ItemData(Materials.Steel, 7257600L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 1L))); + ItemList.Schematic_2by2.set( + addItem( + Schematic_2by2.ID, + "Schematic (2x2)", + "Crafts 4 Items as 2x2 (use in Packager)", + new ItemData(Materials.Steel, 7257600L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 1L))); + ItemList.Schematic_3by3.set( + addItem( + Schematic_3by3.ID, + "Schematic (3x3)", + "Crafts 9 Items as 3x3 (use in Packager)", + new ItemData(Materials.Steel, 7257600L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 1L))); + ItemList.Schematic_Dust.set( + addItem( + Schematic_Dust.ID, + "Schematic (Dusts)", + "Combines Dusts (use in Packager)", + new ItemData(Materials.Steel, 7257600L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 1L))); + + ItemList.Battery_Hull_LV.set( + addItem( + Battery_Hull_LV.ID, + "Small Battery Hull", + "An empty LV Battery Hull", + new ItemData(Materials.BatteryAlloy, OrePrefixes.plate.mMaterialAmount * 1L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L))); + ItemList.Battery_Hull_MV.set( + addItem( + Battery_Hull_MV.ID, + "Medium Battery Hull", + "An empty MV Battery Hull", + new ItemData(Materials.BatteryAlloy, OrePrefixes.plate.mMaterialAmount * 3L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L))); + ItemList.Battery_Hull_HV.set( + addItem( + Battery_Hull_HV.ID, + "Large Battery Hull", + "An empty HV Battery Hull", + new ItemData(Materials.BatteryAlloy, OrePrefixes.plate.mMaterialAmount * 9L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1L))); + + // ULV Batteries + ItemList.Battery_RE_ULV_Tantalum.set( + addItem( + Battery_RE_ULV_Tantalum.ID, + "Tantalum Capacitor", + "Reusable", + "batteryULV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L))); + + // LV Batteries + ItemList.Battery_SU_LV_SulfuricAcid.set( + addItem( + Battery_SU_LV_Sulfuric_Acid.ID, + "Small Acid Battery", + "Single Use", + "batteryLV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2L))); + + ItemList.Battery_SU_LV_Mercury.set( + addItem( + Battery_SU_LV_Mercury.ID, + "Small Mercury Battery", + "Single Use", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2L))); + + ItemList.Battery_RE_LV_Cadmium.set( + addItem( + Battery_RE_LV_Cadmium.ID, + "Small Cadmium Battery", + "Reusable", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L), + "batteryLV")); + + ItemList.Battery_RE_LV_Lithium.set( + addItem( + Battery_RE_LV_Lithium.ID, + "Small Lithium Battery", + "Reusable", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L), + "batteryLV")); + + ItemList.Battery_RE_LV_Sodium.set( + addItem( + Battery_RE_LV_Sodium.ID, + "Small Sodium Battery", + "Reusable", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L), + "batteryLV")); + + // MV Batteries + ItemList.Battery_SU_MV_SulfuricAcid.set( + addItem( + Battery_SU_MV_Sulfuric_Acid.ID, + "Medium Acid Battery", + "Single Use", + "batteryMV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 4L))); + + ItemList.Battery_SU_MV_Mercury.set( + addItem( + Battery_SU_MV_Mercury.ID, + "Medium Mercury Battery", + "Single Use", + "batteryMV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 4L))); + + ItemList.Battery_RE_MV_Cadmium.set( + addItem( + Battery_RE_MV_Cadmium.ID, + "Medium Cadmium Battery", + "Reusable", + "batteryMV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2L))); + + ItemList.Battery_RE_MV_Lithium.set( + addItem( + Battery_RE_MV_Lithium.ID, + "Medium Lithium Battery", + "Reusable", + "batteryMV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2L))); + + ItemList.Battery_RE_MV_Sodium.set( + addItem( + Battery_RE_MV_Sodium.ID, + "Medium Sodium Battery", + "Reusable", + "batteryMV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2L))); + + // HV Batteries + ItemList.Battery_SU_HV_SulfuricAcid.set( + addItem( + Battery_SU_HV_Sulfuric_Acid.ID, + "Large Acid Battery", + "Single Use", + "batteryHV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 8L))); + + ItemList.Battery_SU_HV_Mercury.set( + addItem( + Battery_SU_HV_Mercury.ID, + "Large Mercury Battery", + "Single Use", + "batteryHV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 8L))); + + ItemList.Battery_RE_HV_Cadmium.set( + addItem( + Battery_RE_HV_Cadmium.ID, + "Large Cadmium Battery", + "Reusable", + "batteryHV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 4L))); + + ItemList.Battery_RE_HV_Lithium.set( + addItem( + Battery_RE_HV_Lithium.ID, + "Large Lithium Battery", + "Reusable", + "batteryHV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 4L))); + + ItemList.Battery_RE_HV_Sodium.set( + addItem( + Battery_RE_HV_Sodium.ID, + "Large Sodium Battery", + "Reusable", + "batteryHV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 4L))); + + // IV Battery + ItemList.Energy_LapotronicOrb.set( + addItem( + Energy_Lapotronic_Orb.ID, + "Lapotronic Energy Orb", + "Reusable battery", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 16L), + OrePrefixes.battery.get(Materials.IV))); + + // ZPM Module + ItemList.ZPM.set( + addItem( + IDMetaItem01.ZPM.ID, + "Zero Point Module", + "Single use battery", + "batteryZPM", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L))); + + // LuV Lapotron orb cluster battery + ItemList.Energy_LapotronicOrb2.set( + addItem( + Energy_Lapotronic_orb_2.ID, + "Lapotronic Energy Orb Cluster", + "Reusable battery", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 16L), + OrePrefixes.battery.get(Materials.LuV))); + + // UV Battery + ItemList.ZPM2.set( + addItem( + ZPM2.ID, + "Ultimate Battery", + "Fill this to win minecraft", + "batteryUV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L))); + + // UMV Battery + ItemList.ZPM3.set( + addItem( + ZPM3.ID, + "Really Ultimate Battery", + "Fill this to be way older", + "batteryUMV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L))); + + // UXV Battery + ItemList.ZPM4.set( + addItem( + ZPM4.ID, + "Extremely Ultimate Battery", + "Fill this to be older", + "batteryUXV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L))); + + // MAX Battery + ItemList.ZPM5.set( + addItem( + ZPM5.ID, + "Insanely Ultimate Battery", + "Fill this for fun", + "batteryMAX", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L))); + + // ERROR Battery + ItemList.ZPM6.set( + addItem( + ZPM6.ID, + "Mega Ultimate Battery", + "Fill the capacitor to reach enlightenment", + "batteryERV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L))); + + // ZPM Cluster + ItemList.Energy_Module.set( + addItem( + Energy_Module.ID, + "Energy Module", + "Reusable battery", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 16L), + OrePrefixes.battery.get(Materials.ZPM))); + + // UV Cluster + ItemList.Energy_Cluster.set( + addItem( + Energy_Cluster.ID, + "Energy Cluster", + "Reusable battery", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L), + OrePrefixes.battery.get(Materials.UV))); + + // UIV, UMV, UXV and MAX component textures backported from gregicality. + ItemList.Electric_Motor_LV.set( + addItem( + Electric_Motor_LV.ID, + "Electric Motor (LV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 1L))); + ItemList.Electric_Motor_MV.set( + addItem( + Electric_Motor_MV.ID, + "Electric Motor (MV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2L))); + ItemList.Electric_Motor_HV.set( + addItem( + Electric_Motor_HV.ID, + "Electric Motor (HV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 4L))); + ItemList.Electric_Motor_EV.set( + addItem( + Electric_Motor_EV.ID, + "Electric Motor (EV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 8L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 8L))); + ItemList.Electric_Motor_IV.set( + addItem( + Electric_Motor_IV.ID, + "Electric Motor (IV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 16L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 16L))); + ItemList.Electric_Motor_LuV.set( + addItem( + Electric_Motor_LuV.ID, + "Electric Motor (LuV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 32L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 32L))); + ItemList.Electric_Motor_ZPM.set( + addItem( + Electric_Motor_ZPM.ID, + "Electric Motor (ZPM)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 64L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 64L))); + ItemList.Electric_Motor_UV.set( + addItem( + Electric_Motor_UV.ID, + "Electric Motor (UV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 128L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 128L))); + ItemList.Electric_Motor_UHV.set( + addItem( + Electric_Motor_UHV.ID, + "Electric Motor (UHV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 256L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 256L))); + ItemList.Electric_Motor_UEV.set( + addItem( + Electric_Motor_UEV.ID, + "Electric Motor (UEV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L))); + ItemList.Electric_Motor_UIV.set( + addItem( + Electric_Motor_UIV.ID, + "Electric Motor (UIV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L))); + ItemList.Electric_Motor_UMV.set( + addItem( + Electric_Motor_UMV.ID, + "Electric Motor (UMV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L))); + ItemList.Electric_Motor_UXV.set( + addItem( + Electric_Motor_UXV.ID, + "Electric Motor (UXV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L))); + ItemList.Electric_Motor_MAX.set( + addItem( + Electric_Motor_MAX.ID, + "Electric Motor (MAX)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L))); + + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_LV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.IronMagnetic), 'R', + OrePrefixes.stick.get(Materials.AnyIron), 'W', OrePrefixes.wireGt01.get(Materials.AnyCopper), 'C', + OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_LV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', + OrePrefixes.stick.get(Materials.Steel), 'W', OrePrefixes.wireGt01.get(Materials.AnyCopper), 'C', + OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_MV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', + OrePrefixes.stick.get(Materials.Aluminium), 'W', OrePrefixes.wireGt02.get(Materials.Cupronickel), 'C', + OrePrefixes.cableGt01.get(Materials.AnyCopper) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_HV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', + OrePrefixes.stick.get(Materials.StainlessSteel), 'W', OrePrefixes.wireGt04.get(Materials.Electrum), 'C', + OrePrefixes.cableGt02.get(Materials.Silver) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_EV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.NeodymiumMagnetic), 'R', + OrePrefixes.stick.get(Materials.Titanium), 'W', OrePrefixes.wireGt04.get(Materials.BlackSteel), 'C', + OrePrefixes.cableGt02.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_IV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.NeodymiumMagnetic), 'R', + OrePrefixes.stick.get(Materials.TungstenSteel), 'W', OrePrefixes.wireGt04.get(Materials.Graphene), 'C', + OrePrefixes.cableGt02.get(Materials.Tungsten) }); + + ItemList.ElectronicsLump.set( + addItem( + 414, + "Lump of Electronics", + "How did they even produce this?", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 1L))); + + ItemList.Tesseract.set( + addItem( + Tesseract.ID, + "Raw Tesseract", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 1L))); + ItemList.GigaChad.set( + addItem( + GigaChad.ID, + "Giga Chad Token", + "You are worthy", + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1000L))); + ItemList.EnergisedTesseract.set( + addItem( + EnergisedTesseract.ID, + "Energised Tesseract", + "Higher dimensional engineering", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 1L))); + + ItemList.Electric_Piston_LV.set( + addItem( + Electric_Piston_LV.ID, + "Electric Piston (LV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 1L))); + ItemList.Electric_Piston_MV.set( + addItem( + Electric_Piston_MV.ID, + "Electric Piston (MV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2L))); + ItemList.Electric_Piston_HV.set( + addItem( + Electric_Piston_HV.ID, + "Electric Piston (HV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 8L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 4L))); + ItemList.Electric_Piston_EV.set( + addItem( + Electric_Piston_EV.ID, + "Electric Piston (EV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 16L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 8L))); + ItemList.Electric_Piston_IV.set( + addItem( + Electric_Piston_IV.ID, + "Electric Piston (IV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 32L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 16L))); + ItemList.Electric_Piston_LuV.set( + addItem( + Electric_Piston_LuV.ID, + "Electric Piston (LuV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 64L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 32L))); + ItemList.Electric_Piston_ZPM.set( + addItem( + Electric_Piston_ZPM.ID, + "Electric Piston (ZPM)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 64L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 64L))); + ItemList.Electric_Piston_UV.set( + addItem( + Electric_Piston_UV.ID, + "Electric Piston (UV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 128L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 128L))); + ItemList.Electric_Piston_UHV.set( + addItem( + Electric_Piston_UHV.ID, + "Electric Piston (UHV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 256L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 256L))); + ItemList.Electric_Piston_UEV.set( + addItem( + Electric_Piston_UEV.ID, + "Electric Piston (UEV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L))); + ItemList.Electric_Piston_UIV.set( + addItem( + Electric_Piston_UIV.ID, + "Electric Piston (UIV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L))); + ItemList.Electric_Piston_UMV.set( + addItem( + Electric_Piston_UMV.ID, + "Electric Piston (UMV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L))); + ItemList.Electric_Piston_UXV.set( + addItem( + Electric_Piston_UXV.ID, + "Electric Piston (UXV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L))); + ItemList.Electric_Piston_MAX.set( + addItem( + Electric_Piston_MAX.ID, + "Electric Piston (MAX)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L))); + + ItemList.Electric_Pump_LV.set( + addItem( + Electric_Pump_LV.ID, + "Electric Pump (LV)", + GTUtility.formatNumbers(32) + PartCoverText + GTUtility.formatNumbers(32 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L))); + ItemList.Electric_Pump_MV.set( + addItem( + Electric_Pump_MV.ID, + "Electric Pump (MV)", + GTUtility.formatNumbers(128) + PartCoverText + GTUtility.formatNumbers(128 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 2L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 2L))); + ItemList.Electric_Pump_HV.set( + addItem( + Electric_Pump_HV.ID, + "Electric Pump (HV)", + GTUtility.formatNumbers(512) + PartCoverText + GTUtility.formatNumbers(512 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 4L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 4L))); + ItemList.Electric_Pump_EV.set( + addItem( + Electric_Pump_EV.ID, + "Electric Pump (EV)", + GTUtility.formatNumbers(2048) + PartCoverText + GTUtility.formatNumbers(2048 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 8L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 8L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 8L))); + ItemList.Electric_Pump_IV.set( + addItem( + Electric_Pump_IV.ID, + "Electric Pump (IV)", + GTUtility.formatNumbers(8192) + PartCoverText + GTUtility.formatNumbers(8192 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 16L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 16L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 16L))); + ItemList.Electric_Pump_LuV.set( + addItem( + Electric_Pump_LuV.ID, + "Electric Pump (LuV)", + GTUtility.formatNumbers(32768) + PartCoverText + GTUtility.formatNumbers(32768 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 32L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 32L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 32L))); + ItemList.Electric_Pump_ZPM.set( + addItem( + Electric_Pump_ZPM.ID, + "Electric Pump (ZPM)", + GTUtility.formatNumbers(131072) + PartCoverText + GTUtility.formatNumbers(131072 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 64L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 64L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 64L))); + ItemList.Electric_Pump_UV.set( + addItem( + Electric_Pump_UV.ID, + "Electric Pump (UV)", + GTUtility.formatNumbers(524288) + PartCoverText + GTUtility.formatNumbers(524288 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 128L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 128L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 128L))); + ItemList.Electric_Pump_UHV.set( + addItem( + Electric_Pump_UHV.ID, + "Electric Pump (UHV)", + GTUtility.formatNumbers(1048576) + PartCoverText + + GTUtility.formatNumbers(1048576 * 20) + + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 256L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 256L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 256L))); + ItemList.Electric_Pump_UEV.set( + addItem( + Electric_Pump_UEV.ID, + "Electric Pump (UEV)", + GTUtility.formatNumbers(2097152) + PartCoverText + + GTUtility.formatNumbers(2097152 * 20) + + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 512L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 512L))); + ItemList.Electric_Pump_UIV.set( + addItem( + Electric_Pump_UIV.ID, + "Electric Pump (UIV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 512L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 512L))); + ItemList.Electric_Pump_UMV.set( + addItem( + Electric_Pump_UMV.ID, + "Electric Pump (UMV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 512L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 512L))); + ItemList.Electric_Pump_UXV.set( + addItem( + Electric_Pump_UXV.ID, + "Electric Pump (UXV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 512L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 512L))); + ItemList.Electric_Pump_MAX.set( + addItem( + Electric_Pump_MAX.ID, + "Electric Pump (MAX)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 512L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 512L))); + + ItemList.Steam_Valve_LV.set( + addItem( + Steam_Valve_LV.ID, + "Steam Valve (LV)", + GTUtility.formatNumbers(1024) + PartCoverText + GTUtility.formatNumbers(1024 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L))); + ItemList.Steam_Valve_MV.set( + addItem( + Steam_Valve_MV.ID, + "Steam Valve (MV)", + GTUtility.formatNumbers(2048) + PartCoverText + GTUtility.formatNumbers(2048 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 2L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 2L))); + ItemList.Steam_Valve_HV.set( + addItem( + Steam_Valve_HV.ID, + "Steam Valve (HV)", + GTUtility.formatNumbers(4096) + PartCoverText + GTUtility.formatNumbers(4096 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 4L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 4L))); + ItemList.Steam_Valve_EV.set( + addItem( + Steam_Valve_EV.ID, + "Steam Valve (EV)", + GTUtility.formatNumbers(8192) + PartCoverText + GTUtility.formatNumbers(8192 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 8L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 8L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 8L))); + ItemList.Steam_Valve_IV.set( + addItem( + Steam_Valve_IV.ID, + "Steam Valve (IV)", + GTUtility.formatNumbers(16384) + PartCoverText + GTUtility.formatNumbers(16384 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 16L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 16L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 16L))); + + ItemList.FluidRegulator_LV.set( + addItem(FluidRegulator_LV.ID, "Fluid Regulator (LV)", FRText1 + GTUtility.formatNumbers(640) + FRText2)); + ItemList.FluidRegulator_MV.set( + addItem(FluidRegulator_MV.ID, "Fluid Regulator (MV)", FRText1 + GTUtility.formatNumbers(2560) + FRText2)); + ItemList.FluidRegulator_HV.set( + addItem(FluidRegulator_HV.ID, "Fluid Regulator (HV)", FRText1 + GTUtility.formatNumbers(10240) + FRText2)); + ItemList.FluidRegulator_EV.set( + addItem(FluidRegulator_EV.ID, "Fluid Regulator (EV)", FRText1 + GTUtility.formatNumbers(40960) + FRText2)); + ItemList.FluidRegulator_IV.set( + addItem(FluidRegulator_IV.ID, "Fluid Regulator (IV)", FRText1 + GTUtility.formatNumbers(163840) + FRText2)); + ItemList.FluidRegulator_LuV.set( + addItem( + FluidRegulator_LuV.ID, + "Fluid Regulator (LuV)", + FRText1 + GTUtility.formatNumbers(655360) + FRText2)); + ItemList.FluidRegulator_ZPM.set( + addItem( + FluidRegulator_ZPM.ID, + "Fluid Regulator (ZPM)", + FRText1 + GTUtility.formatNumbers(2621440) + FRText2)); + ItemList.FluidRegulator_UV.set( + addItem( + FluidRegulator_UV.ID, + "Fluid Regulator (UV)", + FRText1 + GTUtility.formatNumbers(10485760) + FRText2)); + + ItemList.FluidFilter.set( + addItem(FluidFilter.ID, "Fluid Filter Cover", "Set with Fluid Container to only accept one Fluid Type")); + + ItemList.ItemFilter_Export.set( + addItem( + ItemFilter_Export.ID, + "Filtered Conveyor Cover (Export)", + "Right click with an item to set filter (Only supports Export Mode)")); + + ItemList.ItemFilter_Import.set( + addItem( + ItemFilter_Import.ID, + "Filtered Conveyor Cover (Import)", + "Right click with an item to set filter (Only supports Import Mode)")); + + ItemList.Cover_FluidLimiter + .set(addItem(Cover_FluidLimiter.ID, "Fluid Limiter Cover", "Limits fluid input depending on fill level")); + + ItemList.Conveyor_Module_LV.set( + addItem( + Conveyor_Module_LV.ID, + "Conveyor Module (LV)", + "1 stack every 20 secs (as Cover)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 1L))); + ItemList.Conveyor_Module_MV.set( + addItem( + Conveyor_Module_MV.ID, + "Conveyor Module (MV)", + "1 stack every 5 secs (as Cover)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 2L))); + ItemList.Conveyor_Module_HV.set( + addItem( + Conveyor_Module_HV.ID, + "Conveyor Module (HV)", + "1 stack every 1 sec (as Cover)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 4L))); + ItemList.Conveyor_Module_EV.set( + addItem( + Conveyor_Module_EV.ID, + "Conveyor Module (EV)", + "1 stack every 1/5 sec (as Cover)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 8L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 8L))); + ItemList.Conveyor_Module_IV.set( + addItem( + Conveyor_Module_IV.ID, + "Conveyor Module (IV)", + "1 stack every 1/20 sec (as Cover)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 16L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 16L))); + ItemList.Conveyor_Module_LuV.set( + addItem( + Conveyor_Module_LuV.ID, + "Conveyor Module (LuV)", + "2 stacks every 1/20 sec (as Cover)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 32L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 32L))); + ItemList.Conveyor_Module_ZPM.set( + addItem( + Conveyor_Module_ZPM.ID, + "Conveyor Module (ZPM)", + "4 stacks every 1/20 sec (as Cover)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 64L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 64L))); + ItemList.Conveyor_Module_UV.set( + addItem( + Conveyor_Module_UV.ID, + "Conveyor Module (UV)", + "8 stacks every 1/20 sec (as Cover)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 128L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 128L))); + ItemList.Conveyor_Module_UHV.set( + addItem( + Conveyor_Module_UHV.ID, + "Conveyor Module (UHV)", + "16 stacks every 1/20 sec (as Cover)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 256L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 256L))); + ItemList.Conveyor_Module_UEV.set( + addItem( + Conveyor_Module_UEV.ID, + "Conveyor Module (UEV)", + "32 stacks every 1/20 sec (as Cover)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 512L))); + ItemList.Conveyor_Module_UIV.set( + addItem( + Conveyor_Module_UIV.ID, + "Conveyor Module (UIV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 512L))); + ItemList.Conveyor_Module_UMV.set( + addItem( + Conveyor_Module_UMV.ID, + "Conveyor Module (UMV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 512L))); + ItemList.Conveyor_Module_UXV.set( + addItem( + Conveyor_Module_UXV.ID, + "Conveyor Module (UXV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 512L))); + ItemList.Conveyor_Module_MAX.set( + addItem( + Conveyor_Module_MAX.ID, + "Conveyor Module (MAX)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 512L))); + + ItemList.Robot_Arm_LV.set( + addItem( + Robot_Arm_LV.ID, + "Robot Arm (LV)", + "1 stack every 20 secs (as Cover)/n " + RAText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1L))); + ItemList.Robot_Arm_MV.set( + addItem( + Robot_Arm_MV.ID, + "Robot Arm (MV)", + "1 stack every 5 secs (as Cover)/n " + RAText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 2L))); + ItemList.Robot_Arm_HV.set( + addItem( + Robot_Arm_HV.ID, + "Robot Arm (HV)", + "1 stack every 1 sec (as Cover)/n " + RAText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 8L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 4L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 4L))); + ItemList.Robot_Arm_EV.set( + addItem( + Robot_Arm_EV.ID, + "Robot Arm (EV)", + "1 stack every 1/5 sec (as Cover)/n " + RAText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 16L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 8L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 8L))); + ItemList.Robot_Arm_IV.set( + addItem( + Robot_Arm_IV.ID, + "Robot Arm (IV)", + "1 stack every 1/20 sec (as Cover)/n " + RAText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 32L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 16L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 16L))); + ItemList.Robot_Arm_LuV.set( + addItem( + Robot_Arm_LuV.ID, + "Robot Arm (LuV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 64L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 32L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 32L))); + ItemList.Robot_Arm_ZPM.set( + addItem( + Robot_Arm_ZPM.ID, + "Robot Arm (ZPM)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 128L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 64L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 64L))); + ItemList.Robot_Arm_UV.set( + addItem( + Robot_Arm_UV.ID, + "Robot Arm (UV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 256L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 128L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 128L))); + ItemList.Robot_Arm_UHV.set( + addItem( + Robot_Arm_UHV.ID, + "Robot Arm (UHV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 256L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 256L))); + ItemList.Robot_Arm_UEV.set( + addItem( + Robot_Arm_UEV.ID, + "Robot Arm (UEV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1024L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 512L))); + ItemList.Robot_Arm_UIV.set( + addItem( + Robot_Arm_UIV.ID, + "Robot Arm (UIV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1024L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 512L))); + ItemList.Robot_Arm_UMV.set( + addItem( + Robot_Arm_UMV.ID, + "Robot Arm (UMV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1024L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 512L))); + ItemList.Robot_Arm_UXV.set( + addItem( + Robot_Arm_UXV.ID, + "Robot Arm (UXV)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1024L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 512L))); + ItemList.Robot_Arm_MAX.set( + addItem( + Robot_Arm_MAX.ID, + "Robot Arm (MAX)", + PartNotCoverText, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1024L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 512L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 512L))); + + ItemList.QuantumEye.set(addItem(QuantumEye.ID, "Quantum Eye", "Improved Ender Eye")); + ItemList.QuantumStar.set(addItem(QuantumStar.ID, "Quantum Star", "Improved Nether Star")); + ItemList.Gravistar.set(addItem(Gravistar.ID, "Gravi Star", "Ultimate Nether Star")); + + ItemList.Emitter_LV.set( + addItem( + Emitter_LV.ID, + "Emitter (LV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 1L))); + ItemList.Emitter_MV.set( + addItem( + Emitter_MV.ID, + "Emitter (MV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 2L))); + ItemList.Emitter_HV.set( + addItem( + Emitter_HV.ID, + "Emitter (HV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 4L))); + ItemList.Emitter_EV.set( + addItem( + Emitter_EV.ID, + "Emitter (EV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 8L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 8L))); + ItemList.Emitter_IV.set( + addItem( + Emitter_IV.ID, + "Emitter (IV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 16L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 16L))); + ItemList.Emitter_LuV.set( + addItem( + Emitter_LuV.ID, + "Emitter (LuV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 32L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 32L))); + ItemList.Emitter_ZPM.set( + addItem( + Emitter_ZPM.ID, + "Emitter (ZPM)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 64L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 64L))); + ItemList.Emitter_UV.set( + addItem( + Emitter_UV.ID, + "Emitter (UV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 128L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 128L))); + ItemList.Emitter_UHV.set( + addItem( + Emitter_UHV.ID, + "Emitter (UHV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 256L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 256L))); + ItemList.Emitter_UEV.set( + addItem( + Emitter_UEV.ID, + "Emitter (UEV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 512L))); + ItemList.Emitter_UIV.set( + addItem( + Emitter_UIV.ID, + "Emitter (UIV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 512L))); + ItemList.Emitter_UMV.set( + addItem( + Emitter_UMV.ID, + "Emitter (UMV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 512L))); + ItemList.Emitter_UXV.set( + addItem( + Emitter_UXV.ID, + "Emitter (UXV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 512L))); + ItemList.Emitter_MAX.set( + addItem( + Emitter_MAX.ID, + "Emitter (MAX)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 512L))); + + ItemList.Sensor_LV.set( + addItem( + Sensor_LV.ID, + "Sensor (LV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 1L))); + + ItemList.Sensor_MV.set( + addItem( + Sensor_MV.ID, + "Sensor (MV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 2L))); + ItemList.Sensor_HV.set( + addItem( + Sensor_HV.ID, + "Sensor (HV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 4L))); + ItemList.Sensor_EV.set( + addItem( + Sensor_EV.ID, + "Sensor (EV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 8L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 8L))); + ItemList.Sensor_IV.set( + addItem( + Sensor_IV.ID, + "Sensor (IV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 16L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 16L))); + ItemList.Sensor_LuV.set( + addItem( + Sensor_LuV.ID, + "Sensor (LuV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 32L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 32L))); + ItemList.Sensor_ZPM.set( + addItem( + Sensor_ZPM.ID, + "Sensor (ZPM)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 64L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 64L))); + ItemList.Sensor_UV.set( + addItem( + Sensor_UV.ID, + "Sensor (UV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 128L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 128L))); + ItemList.Sensor_UHV.set( + addItem( + Sensor_UHV.ID, + "Sensor (UHV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 256L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 256L))); + ItemList.Sensor_UEV.set( + addItem( + Sensor_UEV.ID, + "Sensor (UEV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 512L))); + ItemList.Sensor_UIV.set( + addItem( + Sensor_UIV.ID, + "Sensor (UIV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 512L))); + ItemList.Sensor_UMV.set( + addItem( + Sensor_UMV.ID, + "Sensor (UMV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 512L))); + ItemList.Sensor_UXV.set( + addItem( + Sensor_UXV.ID, + "Sensor (UXV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 512L))); + ItemList.Sensor_MAX.set( + addItem( + Sensor_MAX.ID, + "Sensor (MAX)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 512L))); + + ItemList.Field_Generator_LV.set( + addItem( + Field_Generator_LV.ID, + "Field Generator (LV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 1L))); + ItemList.Field_Generator_MV.set( + addItem( + Field_Generator_MV.ID, + "Field Generator (MV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 2L))); + ItemList.Field_Generator_HV.set( + addItem( + Field_Generator_HV.ID, + "Field Generator (HV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 4L))); + ItemList.Field_Generator_EV.set( + addItem( + Field_Generator_EV.ID, + "Field Generator (EV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 8L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 8L))); + ItemList.Field_Generator_IV.set( + addItem( + Field_Generator_IV.ID, + "Field Generator (IV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 16L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 16L))); + ItemList.Field_Generator_LuV.set( + addItem( + Field_Generator_LuV.ID, + "Field Generator (LuV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 32L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 32L))); + ItemList.Field_Generator_ZPM.set( + addItem( + Field_Generator_ZPM.ID, + "Field Generator (ZPM)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 64L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 64L))); + ItemList.Field_Generator_UV.set( + addItem( + Field_Generator_UV.ID, + "Field Generator (UV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 128L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 128L))); + ItemList.Field_Generator_UHV.set( + addItem( + Field_Generator_UHV.ID, + "Field Generator (UHV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 256L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 256L))); + ItemList.Field_Generator_UEV.set( + addItem( + Field_Generator_UEV.ID, + "Field Generator (UEV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1024L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 512L))); + ItemList.Field_Generator_UIV.set( + addItem( + Field_Generator_UIV.ID, + "Field Generator (UIV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1024L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 512L))); + ItemList.Field_Generator_UMV.set( + addItem( + Field_Generator_UMV.ID, + "Field Generator (UMV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1024L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 512L))); + ItemList.Field_Generator_UXV.set( + addItem( + Field_Generator_UXV.ID, + "Field Generator (UXV)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1024L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 512L))); + ItemList.Field_Generator_MAX.set( + addItem( + Field_Generator_MAX.ID, + "Field Generator (MAX)", + "", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1024L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 512L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 512L))); + + ItemList.StableAdhesive.set( + addItem( + StableAdhesive.ID, + "Hyper-Stable Self-Healing Adhesive", + "Complete and selective adhesion, even when torn or damaged", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 30L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 20L), + new TCAspects.TC_AspectStack(TCAspects.LIMUS, 10L), + new TCAspects.TC_AspectStack(TCAspects.VINCULUM, 5L))); + ItemList.SuperconductorComposite.set( + addItem( + SuperconductorComposite.ID, + "Superconductor Rare-Earth Composite", + "Zero resistance to electrical and quantum flow, regardless of temperature", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 50L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 25L), + new TCAspects.TC_AspectStack(TCAspects.TERRA, 15L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 10L))); + ItemList.NaquadriaSupersolid.set( + addItem( + NaquadriaSupersolid.ID, + "Black Body Naquadria Supersolid", + "Flows like a fluid and reflects nothing, perfect absorption and transfer", + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 100L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 60L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 40L), + new TCAspects.TC_AspectStack(TCAspects.RADIO, 20L), + new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 10L))); + + // Circuits ULV - LuV. + ItemList.Circuit_Primitive.set( + addItem( + Circuit_Primitive.ID, + "Vacuum Tube", + "A very simple Circuit", + OrePrefixes.circuit.get(Materials.ULV), + SubTag.NO_UNIFICATION)); + ItemList.Circuit_Basic.set( + addItem( + Circuit_Basic.ID, + "Integrated Logic Circuit", + "A Basic Circuit", + OrePrefixes.circuit.get(Materials.LV), + SubTag.NO_UNIFICATION)); + ItemList.Circuit_Good.set( + addItem( + Circuit_Good.ID, + "Good Electronic Circuit", + "A Good Circuit", + OrePrefixes.circuit.get(Materials.MV), + SubTag.NO_UNIFICATION)); + ItemList.Circuit_Advanced.set( + addItem( + Circuit_Advanced.ID, + "Processor Assembly", + "An Advanced Circuit", + OrePrefixes.circuit.get(Materials.HV), + SubTag.NO_UNIFICATION)); + ItemList.Circuit_Data.set( + addItem( + Circuit_Data.ID, + "Workstation", + "An Extreme Circuit", + OrePrefixes.circuit.get(Materials.EV), + SubTag.NO_UNIFICATION)); + ItemList.Circuit_Elite.set( + addItem( + Circuit_Elite.ID, + "Mainframe", + "An Elite Circuit", + OrePrefixes.circuit.get(Materials.IV), + SubTag.NO_UNIFICATION)); + ItemList.Circuit_Master.set( + addItem( + Circuit_Master.ID, + "Nanoprocessor Mainframe", + "A Master Circuit", + OrePrefixes.circuit.get(Materials.LuV), + SubTag.NO_UNIFICATION)); + + // Backwards compatibility. + ItemList.Circuit_Parts_Vacuum_Tube.set(ItemList.Circuit_Primitive.get(1)); + ItemList.Circuit_Computer.set(ItemList.Circuit_Advanced.get(1)); + + ItemList.Tool_DataOrb.set( + addItem( + Tool_DataOrb.ID, + "Data Orb", + "A High Capacity Data Storage", + SubTag.NO_UNIFICATION, + new BehaviourDataOrb())); + + ItemList.Tool_DataStick.set( + addItem( + Tool_DataStick.ID, + "Data Stick", + "A Low Capacity Data Storage", + SubTag.NO_UNIFICATION, + new BehaviourDataStick())); + + ItemList.Tool_Cover_Copy_Paste.set( + addItem( + Tool_Cover_Copy_Paste.ID, + "Cover Copy/Paste tool", + "Set Cover Massively.", + BehaviourCoverTool.INSTANCE, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 6L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 6L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 6L))); + + ItemList.Circuit_Board_Basic.set(addItem(Circuit_Board_Basic.ID, "Coated Circuit Board", "A Basic Board")); + ItemList.Circuit_Board_Coated.set(ItemList.Circuit_Board_Basic.get(1)); + ItemList.Circuit_Board_Advanced + .set(addItem(Circuit_Board_Advanced.ID, "Epoxy Circuit Board", "An Advanced Board")); + ItemList.Circuit_Board_Epoxy.set(ItemList.Circuit_Board_Advanced.get(1)); + ItemList.Circuit_Board_Elite + .set(addItem(Circuit_Board_Elite.ID, "Multilayer Fiber-Reinforced Circuit Board", "An Elite Board")); + ItemList.Circuit_Board_Multifiberglass.set(ItemList.Circuit_Board_Elite.get(1)); + ItemList.Circuit_Parts_Crystal_Chip_Elite + .set(addItem(Circuit_Parts_Crystal_Chip_Elite.ID, "Engraved Crystal Chip", "Needed for Circuits")); + ItemList.Circuit_Parts_Crystal_Chip_Master + .set(addItem(Circuit_Parts_Crystal_Chip_Master.ID, "Engraved Lapotron Chip", "Needed for Circuits")); + ItemList.Circuit_Parts_Crystal_Chip_Wetware + .set(addItem(Circuit_Parts_Crystal_Chip_Wetware.ID, "Living Crystal Chip", "Needed for Circuits")); + ItemList.Circuit_Parts_Advanced.set(addItem(Circuit_Parts_Advanced.ID, "Diode", "Basic Electronic Component")); + ItemList.Circuit_Parts_Diode.set(ItemList.Circuit_Parts_Advanced.get(1)); + ItemList.Circuit_Parts_Wiring_Basic + .set(addItem(Circuit_Parts_Wiring_Basic.ID, "Resistor", "Basic Electronic Component")); + ItemList.Circuit_Parts_Resistor.set(ItemList.Circuit_Parts_Wiring_Basic.get(1)); + ItemList.Circuit_Parts_Wiring_Advanced + .set(addItem(Circuit_Parts_Wiring_Advanced.ID, "Transistor", "Basic Electronic Component")); + ItemList.Circuit_Parts_Transistor.set(ItemList.Circuit_Parts_Wiring_Advanced.get(1)); + ItemList.Circuit_Parts_Wiring_Elite + .set(addItem(Circuit_Parts_Wiring_Elite.ID, "Capacitor", "Electronic Component")); + ItemList.Circuit_Parts_Capacitor.set(ItemList.Circuit_Parts_Wiring_Elite.get(1)); + ItemList.Empty_Board_Basic.set(addItem(Empty_Board_Basic.ID, "Phenolic Circuit Board", "A Good Board")); + ItemList.Circuit_Board_Phenolic.set(ItemList.Empty_Board_Basic.get(1)); + ItemList.Empty_Board_Elite + .set(addItem(Empty_Board_Elite.ID, "Fiber-Reinforced Circuit Board", "An Extreme Board")); + ItemList.Circuit_Board_Fiberglass.set(ItemList.Empty_Board_Elite.get(1)); + + ItemList.Component_Sawblade_Diamond.set( + addItem( + Component_Sawblade_Diamond.ID, + "Diamond Sawblade", + "", + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 2L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4L), + OreDictNames.craftingDiamondBlade)); + ItemList.Component_Grinder_Diamond.set( + addItem( + Component_Grinder_Diamond.ID, + "Diamond Grinding Head", + "", + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 2L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 6L), + OreDictNames.craftingGrinder)); + ItemList.Component_Grinder_Tungsten.set( + addItem( + Component_Grinder_Tungsten.ID, + "Tungsten Grinding Head", + "", + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 2L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 6L), + OreDictNames.craftingGrinder)); + + ItemList.Upgrade_Muffler.set( + addItem( + Upgrade_Muffler.ID, + "Muffler Upgrade", + "Makes Machines silent", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 2L))); + ItemList.Upgrade_Lock.set( + addItem( + Upgrade_Lock.ID, + "Lock Upgrade", + "Protects your Machines", + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 4L))); + + ItemList.Component_Filter.set( + addItem( + Component_Filter.ID, + "Item Filter", + "", + new ItemData(Materials.Zinc, OrePrefixes.foil.mMaterialAmount * 16L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 1L), + OreDictNames.craftingFilter)); + + ItemList.Cover_Controller.set( + addItem( + Cover_Controller.ID, + "Machine Controller Cover", + "Turns Machines ON/OFF", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L))); + ItemList.Cover_ActivityDetector.set( + addItem( + Cover_ActivityDetector.ID, + "Activity Detector Cover", + "Gives out Activity as Redstone", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L))); + ItemList.Cover_FluidDetector.set( + addItem( + Cover_FluidDetector.ID, + "Fluid Detector Cover", + "Gives out Fluid Amount as Redstone", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L))); + ItemList.Cover_ItemDetector.set( + addItem( + Cover_ItemDetector.ID, + "Item Detector Cover", + "Gives out Item Amount as Redstone", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.TERRA, 1L))); + ItemList.Cover_EnergyDetector.set( + addItem( + Cover_EnergyDetector.ID, + "Energy Detector Cover", + "Gives out Energy Amount as Redstone", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L))); + ItemList.Cover_PlayerDetector.set( + addItem( + Cover_PlayerDetector.ID, + "Player Detector Cover", + "Gives out close Players as Redstone", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L))); + ItemList.Cover_FluidStorageMonitor.set( + addItem( + Cover_FLuidStorageMonitor.ID, + "Fluid Storage Monitor Cover", + "Displays the fluid stored in the Tank", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L))); + ItemList.Cover_Chest_Basic.set( + addItem( + Cover_Chest_Basic.ID, + "Basic Item Holder", + "Hold a few item for use within machine GUI", + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 2L))); + ItemList.Cover_Chest_Good.set( + addItem( + Cover_Chest_Good.ID, + "Good Item Holder", + "Hold a few item for use within machine GUI", + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 2L))); + ItemList.Cover_Chest_Advanced.set( + addItem( + Cover_Chest_Advanced.ID, + "Advanced Item Holder", + "Hold a few item for use within machine GUI", + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 2L))); + + ItemList.Cover_Screen.set( + addItem( + Cover_Screen.ID, + "Computer Monitor Cover", + "Displays Data and GUI", + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 2L), + new TCAspects.TC_AspectStack(TCAspects.LUX, 2L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L))); + ItemList.Cover_Crafting.set( + addItem( + Cover_Crafting.ID, + "Crafting Table Cover", + "Better than a wooden Workbench", + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 4L))); + ItemList.Cover_Drain.set( + addItem( + Cover_Drain.ID, + "Drain Module Cover", + "Absorbs Fluids and collects Rain", + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 2L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 2L))); + + ItemList.Cover_Shutter.set( + addItem( + Cover_Shutter.ID, + "Shutter Module Cover", + "Blocks Inventory/Tank Side. Use together with Machine Controller.", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 1L))); + + ItemList.Cover_SolarPanel.set( + addItem( + Cover_SolarPanel.ID, + "Solar Panel", + "May the Sun be with you (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 1L))); + ItemList.Cover_SolarPanel_8V.set( + addItem( + Cover_SolarPanel_8V.ID, + "Solar Panel (8V)", + "8 Volt Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 2L))); + ItemList.Cover_SolarPanel_LV.set( + addItem( + Cover_SolarPanel_LV.ID, + "Solar Panel (LV)", + "Low Voltage Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 4L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 4L))); + ItemList.Cover_SolarPanel_MV.set( + addItem( + Cover_SolarPanel_MV.ID, + "Solar Panel (MV)", + "Medium Voltage Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 8L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 8L))); + ItemList.Cover_SolarPanel_HV.set( + addItem( + Cover_SolarPanel_HV.ID, + "Solar Panel (HV)", + "High Voltage Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 16L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 16L))); + ItemList.Cover_SolarPanel_EV.set( + addItem( + Cover_SolarPanel_EV.ID, + "Solar Panel (EV)", + "Extreme Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 32L))); + ItemList.Cover_SolarPanel_IV.set( + addItem( + Cover_SolarPanel_IV.ID, + "Solar Panel (IV)", + "Insane Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 64L))); + ItemList.Cover_SolarPanel_LuV.set( + addItem( + Cover_SolarPanel_LuV.ID, + "Solar Panel (LuV)", + "Ludicrous Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 64L))); + ItemList.Cover_SolarPanel_ZPM.set( + addItem( + Cover_SolarPanel_ZPM.ID, + "Solar Panel (ZPM)", + "ZPM Voltage Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 64L))); + ItemList.Cover_SolarPanel_UV.set( + addItem( + Cover_SolarPanel_UV.ID, + "Solar Panel (UV)", + "Ultimate Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 64L))); + + ItemList.Tool_Sonictron.set( + addItem( + Tool_Sonictron.ID, + "Sonictron", + "Bring your Music with you", + BehaviourSonictron.INSTANCE, + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 4L))); + ItemList.Tool_Cheat.set( + addItem( + Tool_Cheat.ID, + "Debug Scanner", + "Also an Infinite Energy Source", + BehaviourScanner.INSTANCE, + new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 64L))); + ItemList.Tool_Scanner.set( + addItem( + Tool_Scanner.ID, + "Portable Scanner", + "Tricorder", + BehaviourScanner.INSTANCE, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 6L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 6L))); + + ItemList.NC_SensorKit.set(addItem(NC_SensorKit.ID, "GregTech Sensor Kit", "", new BehaviourSensorKit())); + ItemList.Duct_Tape.set( + addItem( + Duct_Tape.ID, + "BrainTech Aerospace Advanced Reinforced Duct Tape FAL-84", + "If you can't fix it with this, use more of it!", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + OreDictNames.craftingDuctTape)); + ItemList.McGuffium_239.set( + addItem( + McGuffium_239.ID, + "Mc Guffium 239", + "42% better than Phlebotnium", + new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 8L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 8L), + new TCAspects.TC_AspectStack(TCAspects.SPIRITUS, 8L), + new TCAspects.TC_AspectStack(TCAspects.AURAM, 8L), + new TCAspects.TC_AspectStack(TCAspects.VITIUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.RADIO, 8L), + new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 8L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 8L))); + + ItemList.Cover_RedstoneTransmitterExternal.set( + addItem( + Cover_RedstoneTransmitterExternal.ID, + "Redstone Transmitter (External)", + "Transfers Redstone signals wireless", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L))); + ItemList.Cover_RedstoneTransmitterInternal.set( + addItem( + Cover_RedstoneTransmitterInternal.ID, + "Redstone Transmitter (Internal)", + "Transfers Redstone signals wireless", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L))); + ItemList.Cover_RedstoneReceiverExternal.set( + addItem( + Cover_RedstoneReceiverExternal.ID, + "Redstone Receiver (External)", + "Transfers Redstone signals wireless", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L))); + ItemList.Cover_RedstoneReceiverInternal.set( + addItem( + Cover_RedstoneReceiverInternal.ID, + "Redstone Receiver (Internal)", + "Transfers Redstone signals wireless", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L))); + + ItemList.Cover_NeedsMaintainance.set( + addItem( + Cover_NeedsMaintenance.ID, + "Needs Maintenance Cover", + "Attach to Multiblock Controller. Emits Redstone Signal if needs Maintenance", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L))); + + ItemList.Steam_Regulator_LV.set( + addItem( + Steam_Regulator_LV.ID, + "Steam Regulator (LV)", + GTUtility.formatNumbers(1024) + PartCoverText + GTUtility.formatNumbers(1024 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L))); + ItemList.Steam_Regulator_MV.set( + addItem( + Steam_Regulator_MV.ID, + "Steam Regulator (MV)", + GTUtility.formatNumbers(2048) + PartCoverText + GTUtility.formatNumbers(2048 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 2L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 2L))); + ItemList.Steam_Regulator_HV.set( + addItem( + Steam_Regulator_HV.ID, + "Steam Regulator (HV)", + GTUtility.formatNumbers(4096) + PartCoverText + GTUtility.formatNumbers(4096 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 4L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 4L))); + ItemList.Steam_Regulator_EV.set( + addItem( + Steam_Regulator_EV.ID, + "Steam Regulator (EV)", + GTUtility.formatNumbers(8192) + PartCoverText + GTUtility.formatNumbers(8192 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 8L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 8L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 8L))); + ItemList.Steam_Regulator_IV.set( + addItem( + Steam_Regulator_IV.ID, + "Steam Regulator (IV)", + GTUtility.formatNumbers(16384) + PartCoverText + GTUtility.formatNumbers(16384 * 20) + PartCoverText2, + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 16L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 16L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 16L))); + ItemList.Electromagnet_Iron.set( + addItem( + Electromagnet_Iron.ID, + "Iron Electromagnet", + MagnetTiers.buildMagnetTooltip(MagnetTiers.Iron), + new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 8))); + ItemList.Electromagnet_Steel.set( + addItem( + Electromagnet_Steel.ID, + "Steel Electromagnet", + MagnetTiers.buildMagnetTooltip(MagnetTiers.Steel), + new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 16))); + ItemList.Electromagnet_Neodymium.set( + addItem( + Electromagnet_Neodymium.ID, + "Neodymium Electromagnet", + MagnetTiers.buildMagnetTooltip(MagnetTiers.Neodymium), + new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 24))); + ItemList.Electromagnet_Samarium.set( + addItem( + Electromagnet_Samarium.ID, + EnumChatFormatting.YELLOW + "Samarium Electromagnet", + MagnetTiers.buildMagnetTooltip(MagnetTiers.Samarium), + new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 32))); + ItemList.Electromagnet_Tengam.set( + addItem( + Electromagnet_Tengam.ID, + EnumChatFormatting.GREEN + "Tengam Electromagnet", + MagnetTiers.buildMagnetTooltip(MagnetTiers.Tengam), + new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 40))); + ItemList.Black_Hole_Opener.set( + addItem( + Black_Hole_Opener.ID, + "Black Hole Activation Catalyst", + "Opens a semi-stable black hole", + new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 32), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 64))); + ItemList.Black_Hole_Closer.set( + addItem( + Black_Hole_Closer.ID, + "Black Hole Deactivation Catalyst", + "Safely closes a semi-stable black hole", + new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 32), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 64))); + + // Empty battery hulls + ItemList.BatteryHull_EV.set( + addItem( + BatteryHull_EV.ID, + "Small Sunnarium Battery (Empty)", + "An empty EV Battery Container", + new ItemData(Materials.BlueSteel, OrePrefixes.plate.mMaterialAmount * 2L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 8L))); + ItemList.BatteryHull_IV.set( + addItem( + BatteryHull_IV.ID, + "Medium Sunnarium Battery (Empty)", + "An empty IV Battery Container", + new ItemData(Materials.RoseGold, OrePrefixes.plate.mMaterialAmount * 6L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 16L))); + ItemList.BatteryHull_LuV.set( + addItem( + BatteryHull_LuV.ID, + "Large Sunnarium Battery (Empty)", + "An empty LuV Battery Container", + new ItemData(Materials.RedSteel, OrePrefixes.plate.mMaterialAmount * 18L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 32L))); + ItemList.BatteryHull_ZPM.set( + addItem( + BatteryHull_ZPM.ID, + "Medium Naquadria Battery (Empty)", + "An empty ZPM Energy Storage", + new ItemData(Materials.Europium, OrePrefixes.plate.mMaterialAmount * 6L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 64L))); + ItemList.BatteryHull_UV.set( + addItem( + BatteryHull_UV.ID, + "Large Naquadria Battery (Empty)", + "An empty UV Energy Storage", + new ItemData(Materials.Americium, OrePrefixes.plate.mMaterialAmount * 18L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 128L))); + ItemList.BatteryHull_UHV.set( + addItem( + BatteryHull_UHV.ID, + "Small Neutronium Battery (Empty)", + "An empty UHV Energy Storage", + new ItemData(Materials.Naquadah, OrePrefixes.plate.mMaterialAmount * 24L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 256L))); + ItemList.BatteryHull_UEV.set( + addItem( + BatteryHull_UEV.ID, + "Medium Neutronium Battery (Empty)", + "An empty UEV Energy Storage", + new ItemData(Materials.NaquadahEnriched, OrePrefixes.plate.mMaterialAmount * 36L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 512L))); + ItemList.BatteryHull_UIV.set( + addItem( + BatteryHull_UIV.ID, + "Large Neutronium Battery (Empty)", + "An empty UIV Energy Storage", + new ItemData(Materials.NaquadahAlloy, OrePrefixes.plate.mMaterialAmount * 48L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1024L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1024L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1024L))); + ItemList.BatteryHull_UMV.set( + addItem( + BatteryHull_UMV.ID, + "Medium Plasma Battery (Empty)", + "An empty UMV Energy Storage", + new ItemData(Materials.Neutronium, OrePrefixes.plate.mMaterialAmount * 56L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2048L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2048L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 2048L))); + ItemList.BatteryHull_UxV.set( + addItem( + BatteryHull_UxV.ID, + "Large Plasma Battery (Empty)", + "An empty UXV Energy Storage", + new ItemData(Materials.DraconiumAwakened, OrePrefixes.plate.mMaterialAmount * 64L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4096L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4096L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 4096L))); + + ItemList.BatteryHull_EV_Full.set( + addItem( + BatteryHull_EV_Full.ID, + "Small Sunnarium Battery", + "Reusable", + "batteryEV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L))); + + ItemList.BatteryHull_IV_Full.set( + addItem( + BatteryHull_IV_Full.ID, + "Medium Sunnarium Battery", + "Reusable", + "batteryIV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L))); + + ItemList.BatteryHull_LuV_Full.set( + addItem( + BatteryHull_LuV_Full.ID, + "Large Sunnarium Battery", + "Reusable", + "batteryLuV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L))); + + ItemList.BatteryHull_ZPM_Full.set( + addItem( + BatteryHull_ZPM_Full.ID, + "Medium Naquadria Battery", + "Reusable", + "batteryZPM", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L))); + + ItemList.BatteryHull_UV_Full.set( + addItem( + BatteryHull_UV_Full.ID, + "Large Naquadria Battery", + "Reusable", + "batteryUV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L))); + + ItemList.BatteryHull_UHV_Full.set( + addItem( + BatteryHull_UHV_Full.ID, + "Small Neutronium Battery", + "Reusable", + "batteryUHV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L))); + + ItemList.BatteryHull_UEV_Full.set( + addItem( + BatteryHull_UEV_Full.ID, + "Medium Neutronium Battery", + "Reusable", + "batteryUEV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L))); + + ItemList.BatteryHull_UIV_Full.set( + addItem( + BatteryHull_UIV_Full.ID, + "Large Neutronium Battery", + "Reusable", + "batteryUIV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L))); + + ItemList.BatteryHull_UMV_Full.set( + addItem( + BatteryHull_UMV_Full.ID, + "Medium Infinity Battery", + "Reusable", + "batteryUMV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L))); + + ItemList.BatteryHull_UxV_Full.set( + addItem( + BatteryHull_UxV_Full.ID, + "Large Infinity Battery", + "Reusable", + "batteryUXV", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L))); + + removeRecipes(); + setBurnValues(); + oredictBlacklistEntries(); + registerCovers(); + registerBehaviors(); + setAllFluidContainerStats(); + setAllElectricStats(); + registerTieredTooltips(); + + craftingShapedRecipes(); + craftingShapelessRecipes(); + } + + private static final Map cauldronRemap = new HashMap<>(); + + public static void registerCauldronCleaningFor(Materials in, Materials out) { + cauldronRemap.put(in, out); + } + + @Override + public boolean onEntityItemUpdate(EntityItem aItemEntity) { + int aDamage = aItemEntity.getEntityItem() + .getItemDamage(); + if ((aDamage < 32000) && (aDamage >= 0) && (!aItemEntity.worldObj.isRemote)) { + Materials aMaterial = GregTechAPI.sGeneratedMaterials[(aDamage % 1000)]; + if ((aMaterial != null) && (aMaterial != Materials.Empty) && (aMaterial != Materials._NULL)) { + int tX = MathHelper.floor_double(aItemEntity.posX); + int tY = MathHelper.floor_double(aItemEntity.posY); + int tZ = MathHelper.floor_double(aItemEntity.posZ); + OrePrefixes aPrefix = this.mGeneratedPrefixList[(aDamage / 1000)]; + if ((aPrefix == OrePrefixes.dustImpure) || (aPrefix == OrePrefixes.dustPure)) { + Block tBlock = aItemEntity.worldObj.getBlock(tX, tY, tZ); + byte tMetaData = (byte) aItemEntity.worldObj.getBlockMetadata(tX, tY, tZ); + if ((tBlock == Blocks.cauldron) && (tMetaData > 0)) { + + aMaterial = cauldronRemap.getOrDefault(aMaterial, aMaterial); + + aItemEntity.setEntityItemStack( + GTOreDictUnificator + .get(OrePrefixes.dust, aMaterial, aItemEntity.getEntityItem().stackSize)); + aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3); + return true; + } + } else if (aPrefix == OrePrefixes.crushed) { + Block tBlock = aItemEntity.worldObj.getBlock(tX, tY, tZ); + byte tMetaData = (byte) aItemEntity.worldObj.getBlockMetadata(tX, tY, tZ); + if ((tBlock == Blocks.cauldron) && (tMetaData > 0)) { + aItemEntity.setEntityItemStack( + GTOreDictUnificator + .get(OrePrefixes.crushedPurified, aMaterial, aItemEntity.getEntityItem().stackSize)); + aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3); + return true; + } + } else if (aPrefix == OrePrefixes.dust && aMaterial == Materials.Wheat) { + Block tBlock = aItemEntity.worldObj.getBlock(tX, tY, tZ); + byte tMetaData = (byte) aItemEntity.worldObj.getBlockMetadata(tX, tY, tZ); + if ((tBlock == Blocks.cauldron) && (tMetaData > 0)) { + aItemEntity.setEntityItemStack(ItemList.Food_Dough.get(aItemEntity.getEntityItem().stackSize)); + aItemEntity.worldObj.setBlockMetadataWithNotify(tX, tY, tZ, tMetaData - 1, 3); + return true; + } + } + } + } + return false; + } + + @Override + protected void addAdditionalToolTips(List aList, ItemStack aStack, EntityPlayer aPlayer) { + super.addAdditionalToolTips(aList, aStack, aPlayer); + int aDamage = aStack.getItemDamage(); + if ((aDamage < 32000) && (aDamage >= 0)) { + Materials aMaterial = GregTechAPI.sGeneratedMaterials[(aDamage % 1000)]; + if ((aMaterial != null) && (aMaterial != Materials.Empty) && (aMaterial != Materials._NULL)) { + OrePrefixes aPrefix = this.mGeneratedPrefixList[(aDamage / 1000)]; + if ((aPrefix == OrePrefixes.dustImpure) || (aPrefix == OrePrefixes.dustPure)) { + aList.add(this.mToolTipPurify); + } + } + } + } + + public boolean isPlasmaCellUsed(OrePrefixes aPrefix, Materials aMaterial) { + Collection fusionRecipes = RecipeMaps.fusionRecipes.getAllRecipes(); + if (aPrefix == OrePrefixes.cellPlasma && aMaterial.getPlasma(1L) != null) { // Materials has a plasma fluid + for (GTRecipe recipe : fusionRecipes) { // Loop through fusion recipes + if (recipe.getFluidOutput(0) != null) { // Make sure fluid output can't be null (not sure if possible) + if (recipe.getFluidOutput(0) + .isFluidEqual(aMaterial.getPlasma(1L))) return true; // Fusion recipe + // output matches + // current plasma + // cell fluid + } + } + } + return false; + } + + @Override + public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) { + return (aDoShowAllItems) || (((aPrefix != OrePrefixes.gem) || (!aMaterial.mName.startsWith("Infused"))) + && (aPrefix != OrePrefixes.dustTiny) + && (aPrefix != OrePrefixes.dustSmall) + && (aPrefix != OrePrefixes.dustImpure) + && (aPrefix != OrePrefixes.dustPure) + && (aPrefix != OrePrefixes.crushed) + && (aPrefix != OrePrefixes.crushedPurified) + && (aPrefix != OrePrefixes.crushedCentrifuged) + && (aPrefix != OrePrefixes.ingotHot) + && !(aPrefix == OrePrefixes.cellPlasma && !isPlasmaCellUsed(aPrefix, aMaterial))); + } + + @Override + public ItemStack getContainerItem(ItemStack aStack) { + int aDamage = aStack.getItemDamage(); + if (((aDamage >= 32430) && (aDamage <= 32461)) || (aDamage == 32465 || aDamage == 32466)) { + return ItemList.Spray_Empty.get(1L); + } + if ((aDamage == 32479) || (aDamage == 32476)) { + return new ItemStack(this, 1, aDamage - 2); + } + if (aDamage == 32401) { + return new ItemStack(this, 1, aDamage - 1); + } + return super.getContainerItem(aStack); + } + + @Override + public boolean doesMaterialAllowGeneration(OrePrefixes aPrefix, Materials aMaterial) { + return (super.doesMaterialAllowGeneration(aPrefix, aMaterial)); + } + + private void setBurnValues() { + setBurnValue(17000 + Materials.Wood.mMetaItemSubID, 1600); + } + + private void setAllFluidContainerStats() { + setFluidContainerStats(32000 + Large_Fluid_Cell_Steel.ID, 8_000L, 64L); + setFluidContainerStats(32000 + Large_Fluid_Cell_TungstenSteel.ID, 512_000L, 32L); + setFluidContainerStats(32000 + Large_Fluid_Cell_Aluminium.ID, 32_000L, 64L); + setFluidContainerStats(32000 + Large_Fluid_Cell_StainlessSteel.ID, 64_000L, 64L); + setFluidContainerStats(32000 + Large_Fluid_Cell_Titanium.ID, 128_000L, 64L); + setFluidContainerStats(32000 + Large_Fluid_Cell_Chrome.ID, 2_048_000L, 8L); + setFluidContainerStats(32000 + Large_Fluid_Cell_Iridium.ID, 8_192_000L, 2L); + setFluidContainerStats(32000 + Large_Fluid_Cell_Osmium.ID, 32_768_000L, 1L); + setFluidContainerStats(32000 + Large_Fluid_Cell_Neutronium.ID, 131_072_000L, 1L); + setFluidContainerStats(32000 + Electromagnet_Iron.ID, 0L, 1L); + setFluidContainerStats(32000 + Electromagnet_Steel.ID, 0L, 1L); + setFluidContainerStats(32000 + Electromagnet_Neodymium.ID, 0L, 1L); + setFluidContainerStats(32000 + Electromagnet_Samarium.ID, 0L, 1L); + setFluidContainerStats(32000 + Electromagnet_Tengam.ID, 0L, 1L); + } + + private void oredictBlacklistEntries() { + GTOreDictUnificator.addToBlacklist(new ItemStack(this, 1, 17000 + Materials.Wood.mMetaItemSubID)); + } + + private void registerCovers() { + final ITexture doesWorkCoverTexture = TextureFactory.of( + TextureFactory.of(OVERLAY_ACTIVITYDETECTOR), + TextureFactory.builder() + .addIcon(OVERLAY_ACTIVITYDETECTOR_GLOW) + .glow() + .build()); + + final ITexture playerDectectorCoverTexture = TextureFactory.of( + TextureFactory.of(OVERLAY_ACTIVITYDETECTOR), + TextureFactory.builder() + .addIcon(OVERLAY_ACTIVITYDETECTOR_GLOW) + .glow() + .build()); + final ITexture screenCoverTexture = TextureFactory.of( + TextureFactory.of(OVERLAY_SCREEN), + TextureFactory.builder() + .addIcon(OVERLAY_SCREEN_GLOW) + .glow() + .build()); + + GregTechAPI.registerCover( + new ItemStack(this, 1, 17000 + Materials.Wood.mMetaItemSubID), + TextureFactory.of(COVER_WOOD_PLATE), + null); + + GregTechAPI.registerCover( + ItemList.Electric_Pump_LV.get(1L), + TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverPump(32, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.Electric_Pump_MV.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverPump(128, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.Electric_Pump_HV.get(1L), + TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverPump(512, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.Electric_Pump_EV.get(1L), + TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverPump(2048, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.Electric_Pump_IV.get(1L), + TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverPump(8192, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.Electric_Pump_LuV.get(1L), + TextureFactory.of(MACHINE_CASINGS[6][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverPump(32768, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.Electric_Pump_ZPM.get(1L), + TextureFactory.of(MACHINE_CASINGS[7][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverPump(131072, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.Electric_Pump_UV.get(1L), + TextureFactory.of(MACHINE_CASINGS[8][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverPump(524288, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.Electric_Pump_UHV.get(1L), + TextureFactory.of(MACHINE_CASINGS[9][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverPump(1048576, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.Electric_Pump_UEV.get(1L), + TextureFactory.of(MACHINE_CASINGS[10][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverPump(2097152, TextureFactory.of(OVERLAY_PUMP))); + + GregTechAPI.registerCover( + ItemList.Steam_Valve_LV.get(1L), + TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_VALVE)), + new CoverSteamValve(1024, TextureFactory.of(OVERLAY_VALVE))); + GregTechAPI.registerCover( + ItemList.Steam_Valve_MV.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_VALVE)), + new CoverSteamValve(2048, TextureFactory.of(OVERLAY_VALVE))); + GregTechAPI.registerCover( + ItemList.Steam_Valve_HV.get(1L), + TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_VALVE)), + new CoverSteamValve(4096, TextureFactory.of(OVERLAY_VALVE))); + GregTechAPI.registerCover( + ItemList.Steam_Valve_EV.get(1L), + TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_VALVE)), + new CoverSteamValve(8192, TextureFactory.of(OVERLAY_VALVE))); + GregTechAPI.registerCover( + ItemList.Steam_Valve_IV.get(1L), + TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_VALVE)), + new CoverSteamValve(16384, TextureFactory.of(OVERLAY_VALVE))); + + GregTechAPI.registerCover( + ItemList.FluidRegulator_LV.get(1L), + TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverFluidRegulator(32, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.FluidRegulator_MV.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverFluidRegulator(128, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.FluidRegulator_HV.get(1L), + TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverFluidRegulator(512, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.FluidRegulator_EV.get(1L), + TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverFluidRegulator(2048, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.FluidRegulator_IV.get(1L), + TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverFluidRegulator(8192, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.FluidRegulator_LuV.get(1L), + TextureFactory.of(MACHINE_CASINGS[6][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverFluidRegulator(32768, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.FluidRegulator_ZPM.get(1L), + TextureFactory.of(MACHINE_CASINGS[7][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverFluidRegulator(131072, TextureFactory.of(OVERLAY_PUMP))); + GregTechAPI.registerCover( + ItemList.FluidRegulator_UV.get(1L), + TextureFactory.of(MACHINE_CASINGS[8][0], TextureFactory.of(OVERLAY_PUMP)), + new CoverFluidRegulator(524288, TextureFactory.of(OVERLAY_PUMP))); + + GregTechAPI.registerCover( + ItemList.FluidFilter.get(1L), + TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_SHUTTER)), + new CoverFluidfilter(TextureFactory.of(OVERLAY_SHUTTER))); + + GregTechAPI.registerCover( + ItemList.ItemFilter_Export.get(1L), + TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverItemFilter(true, TextureFactory.of(OVERLAY_CONVEYOR))); + + GregTechAPI.registerCover( + ItemList.ItemFilter_Import.get(1L), + TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverItemFilter(false, TextureFactory.of(OVERLAY_CONVEYOR))); + + GregTechAPI.registerCover( + ItemList.Cover_FluidLimiter.get(1L), + TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_SHUTTER)), + new CoverFluidLimiter(TextureFactory.of(OVERLAY_SHUTTER))); + + GregTechAPI.registerCover( + ItemList.Conveyor_Module_LV.get(1L), + TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverConveyor(400, 1, TextureFactory.of(OVERLAY_CONVEYOR))); + GregTechAPI.registerCover( + ItemList.Conveyor_Module_MV.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverConveyor(100, 1, TextureFactory.of(OVERLAY_CONVEYOR))); + GregTechAPI.registerCover( + ItemList.Conveyor_Module_HV.get(1L), + TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverConveyor(20, 1, TextureFactory.of(OVERLAY_CONVEYOR))); + GregTechAPI.registerCover( + ItemList.Conveyor_Module_EV.get(1L), + TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverConveyor(4, 1, TextureFactory.of(OVERLAY_CONVEYOR))); + GregTechAPI.registerCover( + ItemList.Conveyor_Module_IV.get(1L), + TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverConveyor(1, 1, TextureFactory.of(OVERLAY_CONVEYOR))); + GregTechAPI.registerCover( + ItemList.Conveyor_Module_LuV.get(1L), + TextureFactory.of(MACHINE_CASINGS[6][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverConveyor(1, 2, TextureFactory.of(OVERLAY_CONVEYOR))); + GregTechAPI.registerCover( + ItemList.Conveyor_Module_ZPM.get(1L), + TextureFactory.of(MACHINE_CASINGS[7][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverConveyor(1, 4, TextureFactory.of(OVERLAY_CONVEYOR))); + GregTechAPI.registerCover( + ItemList.Conveyor_Module_UV.get(1L), + TextureFactory.of(MACHINE_CASINGS[8][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverConveyor(1, 8, TextureFactory.of(OVERLAY_CONVEYOR))); + GregTechAPI.registerCover( + ItemList.Conveyor_Module_UHV.get(1L), + TextureFactory.of(MACHINE_CASINGS[9][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverConveyor(1, 16, TextureFactory.of(OVERLAY_CONVEYOR))); + GregTechAPI.registerCover( + ItemList.Conveyor_Module_UEV.get(1L), + TextureFactory.of(MACHINE_CASINGS[10][0], TextureFactory.of(OVERLAY_CONVEYOR)), + new CoverConveyor(1, 32, TextureFactory.of(OVERLAY_CONVEYOR))); + + GregTechAPI.registerCover( + ItemList.Robot_Arm_LV.get(1L), + TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_ARM)), + new CoverArm(400, TextureFactory.of(OVERLAY_ARM))); + GregTechAPI.registerCover( + ItemList.Robot_Arm_MV.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ARM)), + new CoverArm(100, TextureFactory.of(OVERLAY_ARM))); + GregTechAPI.registerCover( + ItemList.Robot_Arm_HV.get(1L), + TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_ARM)), + new CoverArm(20, TextureFactory.of(OVERLAY_ARM))); + GregTechAPI.registerCover( + ItemList.Robot_Arm_EV.get(1L), + TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_ARM)), + new CoverArm(4, TextureFactory.of(OVERLAY_ARM))); + GregTechAPI.registerCover( + ItemList.Robot_Arm_IV.get(1L), + TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_ARM)), + new CoverArm(1, TextureFactory.of(OVERLAY_ARM))); + + GregTechAPI.registerCover( + ItemList.Cover_Controller.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_CONTROLLER)), + new CoverControlsWork(TextureFactory.of(OVERLAY_CONTROLLER))); + + GregTechAPI.registerCover( + ItemList.Cover_Chest_Basic.get(1L), + TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_1)), + new CoverChest(9, TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_1))); + GregTechAPI.registerCover( + ItemList.Cover_Chest_Good.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_2)), + new CoverChest(12, TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_2))); + GregTechAPI.registerCover( + ItemList.Cover_Chest_Advanced.get(1L), + TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_3)), + new CoverChest(15, TextureFactory.of(Textures.BlockIcons.OVERLAY_COVER_CHEST_3))); + GregTechAPI.registerCover( + ItemList.Cover_ActivityDetector.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], doesWorkCoverTexture), + new CoverDoesWork(doesWorkCoverTexture)); + GregTechAPI.registerCover( + ItemList.Cover_FluidDetector.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_FLUIDDETECTOR)), + new CoverLiquidMeter(TextureFactory.of(OVERLAY_FLUIDDETECTOR))); + GregTechAPI.registerCover( + ItemList.Cover_ItemDetector.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ITEMDETECTOR)), + new CoverItemMeter(TextureFactory.of(OVERLAY_ITEMDETECTOR))); + GregTechAPI.registerCover( + ItemList.Cover_EnergyDetector.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ENERGYDETECTOR)), + new CoverEUMeter(TextureFactory.of(OVERLAY_ENERGYDETECTOR))); + + GregTechAPI.registerCover( + ItemList.Cover_PlayerDetector.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], playerDectectorCoverTexture), + new CoverPlayerDetector(playerDectectorCoverTexture)); + GregTechAPI.registerCover( + ItemList.Cover_FluidStorageMonitor.get(1L), + TextureFactory.of(OVERLAY_FLUID_STORAGE_MONITOR0), + new CoverFluidStorageMonitor()); + + GregTechAPI.registerCover( + ItemList.Cover_Screen.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], screenCoverTexture), + new CoverScreen(screenCoverTexture)); + GregTechAPI.registerCover( + ItemList.Cover_Crafting.get(1L), + TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_CRAFTING)), + new CoverCrafting(TextureFactory.of(OVERLAY_CRAFTING))); + GregTechAPI.registerCover( + ItemList.Cover_Drain.get(1L), + TextureFactory.of(MACHINE_CASINGS[0][0], TextureFactory.of(OVERLAY_DRAIN)), + new CoverDrain(TextureFactory.of(OVERLAY_DRAIN))); + GregTechAPI.registerCover( + ItemList.Cover_Shutter.get(1L), + TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_SHUTTER)), + new CoverShutter(TextureFactory.of(OVERLAY_SHUTTER))); + + GregTechAPI + .registerCover(ItemList.Cover_SolarPanel.get(1L), TextureFactory.of(SOLARPANEL), new CoverSolarPanel(1)); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_8V.get(1L), + TextureFactory.of(SOLARPANEL_8V), + new CoverSolarPanel(8)); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_LV.get(1L), + TextureFactory.of(SOLARPANEL_LV), + new CoverSolarPanel(32)); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_MV.get(1L), + TextureFactory.of(SOLARPANEL_MV), + new CoverSolarPanel(128)); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_HV.get(1L), + TextureFactory.of(SOLARPANEL_HV), + new CoverSolarPanel(512)); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_EV.get(1L), + TextureFactory.of(SOLARPANEL_EV), + new CoverSolarPanel(2048)); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_IV.get(1L), + TextureFactory.of(SOLARPANEL_IV), + new CoverSolarPanel(8192)); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_LuV.get(1L), + TextureFactory.of(SOLARPANEL_LuV), + new CoverSolarPanel(32768)); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_ZPM.get(1L), + TextureFactory.of(SOLARPANEL_ZPM), + new CoverSolarPanel(131072)); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_UV.get(1L), + TextureFactory.of(SOLARPANEL_UV), + new CoverSolarPanel(524288)); + + GregTechAPI.registerCover( + ItemList.Cover_RedstoneTransmitterExternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_REDSTONE_TRANSMITTER)), + new CoverRedstoneTransmitterExternal(TextureFactory.of(OVERLAY_REDSTONE_TRANSMITTER))); + GregTechAPI.registerCover( + ItemList.Cover_RedstoneTransmitterInternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_REDSTONE_TRANSMITTER)), + new CoverRedstoneTransmitterInternal(TextureFactory.of(OVERLAY_REDSTONE_TRANSMITTER))); + GregTechAPI.registerCover( + ItemList.Cover_RedstoneReceiverExternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_REDSTONE_RECEIVER)), + new CoverRedstoneReceiverExternal(TextureFactory.of(OVERLAY_REDSTONE_RECEIVER))); + GregTechAPI.registerCover( + ItemList.Cover_RedstoneReceiverInternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_REDSTONE_RECEIVER)), + new CoverRedstoneReceiverInternal(TextureFactory.of(OVERLAY_REDSTONE_RECEIVER))); + + GregTechAPI.registerCover( + ItemList.Steam_Regulator_LV.get(1L), + TextureFactory.of(MACHINE_CASINGS[1][0], TextureFactory.of(OVERLAY_VALVE)), + new CoverSteamRegulator(1024, TextureFactory.of(OVERLAY_VALVE))); + GregTechAPI.registerCover( + ItemList.Steam_Regulator_MV.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_VALVE)), + new CoverSteamRegulator(2048, TextureFactory.of(OVERLAY_VALVE))); + GregTechAPI.registerCover( + ItemList.Steam_Regulator_HV.get(1L), + TextureFactory.of(MACHINE_CASINGS[3][0], TextureFactory.of(OVERLAY_VALVE)), + new CoverSteamRegulator(4096, TextureFactory.of(OVERLAY_VALVE))); + GregTechAPI.registerCover( + ItemList.Steam_Regulator_EV.get(1L), + TextureFactory.of(MACHINE_CASINGS[4][0], TextureFactory.of(OVERLAY_VALVE)), + new CoverSteamRegulator(8192, TextureFactory.of(OVERLAY_VALVE))); + GregTechAPI.registerCover( + ItemList.Steam_Regulator_IV.get(1L), + TextureFactory.of(MACHINE_CASINGS[5][0], TextureFactory.of(OVERLAY_VALVE)), + new CoverSteamRegulator(16384, TextureFactory.of(OVERLAY_VALVE))); + + GregTechAPI.registerCover( + ItemList.Cover_NeedsMaintainance.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_MAINTENANCE_DETECTOR)), + new CoverNeedMaintainance(TextureFactory.of(OVERLAY_MAINTENANCE_DETECTOR))); + + } + + private void removeRecipes() { + GTModHandler.removeRecipe( + new ItemStack(Blocks.glass), + null, + new ItemStack(Blocks.glass), + null, + new ItemStack(Blocks.glass)); + } + + private void craftingShapedRecipes() { + ItemStack tStack = new ItemStack(this, 1, 17000 + Materials.Wood.mMetaItemSubID); + tStack.setStackDisplayName("The holy Planks of Sengir"); + GTUtility.ItemNBT.addEnchantment(tStack, Enchantment.smite, 10); + GTModHandler.addCraftingRecipe( + tStack, + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "XXX", "XDX", "XXX", 'X', OrePrefixes.gem.get(Materials.NetherStar), 'D', + new ItemStack(Blocks.dragon_egg, 1, 32767) }); + + GTModHandler.addCraftingRecipe( + ItemList.Shape_Slicer_Flat.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "hXS", aTextShape, "fXd", 'P', ItemList.Shape_Extruder_Block, 'X', + OrePrefixes.plate.get(Materials.StainlessSteel), 'S', + OrePrefixes.screw.get(Materials.StainlessSteel) }); + GTModHandler.addCraftingRecipe( + ItemList.Shape_Slicer_Stripes.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "hXS", "XPX", "fXd", 'P', ItemList.Shape_Extruder_Block, 'X', + OrePrefixes.plate.get(Materials.StainlessSteel), 'S', + OrePrefixes.screw.get(Materials.StainlessSteel) }); + + GTModHandler.addCraftingRecipe( + ItemList.Fuel_Can_Plastic_Empty.get(7L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " PP", "P P", "PPP", 'P', OrePrefixes.plate.get(Materials.Plastic) }); + + GTModHandler.addCraftingRecipe( + ItemList.Crate_Empty.get(4L), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "SWS", "WdW", "SWS", 'W', OrePrefixes.plank.get(Materials.Wood), 'S', + OrePrefixes.screw.get(Materials.AnyIron) }); + GTModHandler.addCraftingRecipe( + ItemList.Crate_Empty.get(4L), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "SWS", "WdW", "SWS", 'W', OrePrefixes.plank.get(Materials.Wood), 'S', + OrePrefixes.screw.get(Materials.Steel) }); + + GTModHandler.addCraftingRecipe( + ItemList.Schematic_1by1.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "d ", aTextShape, aTextEmptyRow, 'P', ItemList.Schematic }); + GTModHandler.addCraftingRecipe( + ItemList.Schematic_2by2.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " d ", aTextShape, aTextEmptyRow, 'P', ItemList.Schematic }); + GTModHandler.addCraftingRecipe( + ItemList.Schematic_3by3.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " d", aTextShape, aTextEmptyRow, 'P', ItemList.Schematic }); + GTModHandler.addCraftingRecipe( + ItemList.Schematic_Dust.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { aTextEmptyRow, aTextShape, " d", 'P', ItemList.Schematic }); + + GTModHandler.addCraftingRecipe( + ItemList.Battery_Hull_LV.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "Cf ", "Ph ", "Ps ", 'P', OrePrefixes.plate.get(Materials.BatteryAlloy), 'C', + OreDictNames.craftingWireTin }); + + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_LV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.IronMagnetic), 'R', + OrePrefixes.stick.get(Materials.AnyIron), 'W', OrePrefixes.wireGt01.get(Materials.AnyCopper), 'C', + OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_LV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', + OrePrefixes.stick.get(Materials.Steel), 'W', OrePrefixes.wireGt01.get(Materials.AnyCopper), 'C', + OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_MV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', + OrePrefixes.stick.get(Materials.Aluminium), 'W', OrePrefixes.wireGt02.get(Materials.Cupronickel), 'C', + OrePrefixes.cableGt01.get(Materials.AnyCopper) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_HV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.SteelMagnetic), 'R', + OrePrefixes.stick.get(Materials.StainlessSteel), 'W', OrePrefixes.wireGt04.get(Materials.Electrum), 'C', + OrePrefixes.cableGt02.get(Materials.Silver) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_EV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.NeodymiumMagnetic), 'R', + OrePrefixes.stick.get(Materials.Titanium), 'W', OrePrefixes.wireGt04.get(Materials.BlackSteel), 'C', + OrePrefixes.cableGt02.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Motor_IV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CWR", "WIW", "RWC", 'I', OrePrefixes.stick.get(Materials.NeodymiumMagnetic), 'R', + OrePrefixes.stick.get(Materials.TungstenSteel), 'W', OrePrefixes.wireGt04.get(Materials.Graphene), 'C', + OrePrefixes.cableGt02.get(Materials.Tungsten) }); + + GTModHandler.addCraftingRecipe( + ItemList.Electric_Piston_LV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PPP", "CSS", "CMG", 'P', OrePrefixes.plate.get(Materials.Steel), 'S', + OrePrefixes.stick.get(Materials.Steel), 'G', OrePrefixes.gearGtSmall.get(Materials.Steel), 'M', + ItemList.Electric_Motor_LV, 'C', OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Piston_MV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PPP", "CSS", "CMG", 'P', OrePrefixes.plate.get(Materials.Aluminium), 'S', + OrePrefixes.stick.get(Materials.Aluminium), 'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'M', + ItemList.Electric_Motor_MV, 'C', OrePrefixes.cableGt01.get(Materials.AnyCopper) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Piston_HV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PPP", "CSS", "CMG", 'P', OrePrefixes.plate.get(Materials.StainlessSteel), 'S', + OrePrefixes.stick.get(Materials.StainlessSteel), 'G', + OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'M', ItemList.Electric_Motor_HV, 'C', + OrePrefixes.cableGt01.get(Materials.Gold) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Piston_EV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PPP", "CSS", "CMG", 'P', OrePrefixes.plate.get(Materials.Titanium), 'S', + OrePrefixes.stick.get(Materials.Titanium), 'G', OrePrefixes.gearGtSmall.get(Materials.Titanium), 'M', + ItemList.Electric_Motor_EV, 'C', OrePrefixes.cableGt01.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Piston_IV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PPP", "CSS", "CMG", 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'S', + OrePrefixes.stick.get(Materials.TungstenSteel), 'G', + OrePrefixes.gearGtSmall.get(Materials.TungstenSteel), 'M', ItemList.Electric_Motor_IV, 'C', + OrePrefixes.cableGt01.get(Materials.Tungsten) }); + + GTModHandler.addCraftingRecipe( + ItemList.Electric_Pump_LV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SXO", "dPw", "OMW", 'M', ItemList.Electric_Motor_LV, 'O', + OrePrefixes.ring.get(Materials.AnyRubber), 'X', OrePrefixes.rotor.get(Materials.Tin), 'S', + OrePrefixes.screw.get(Materials.Tin), 'W', OrePrefixes.cableGt01.get(Materials.Tin), 'P', + OrePrefixes.pipeMedium.get(Materials.Bronze) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Pump_MV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SXO", "dPw", "OMW", 'M', ItemList.Electric_Motor_MV, 'O', + OrePrefixes.ring.get(Materials.AnyRubber), 'X', OrePrefixes.rotor.get(Materials.Bronze), 'S', + OrePrefixes.screw.get(Materials.Bronze), 'W', OrePrefixes.cableGt01.get(Materials.AnyCopper), 'P', + OrePrefixes.pipeMedium.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Pump_HV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SXO", "dPw", "OMW", 'M', ItemList.Electric_Motor_HV, 'O', + OrePrefixes.ring.get(Materials.AnyRubber), 'X', OrePrefixes.rotor.get(Materials.Steel), 'S', + OrePrefixes.screw.get(Materials.Steel), 'W', OrePrefixes.cableGt01.get(Materials.Gold), 'P', + OrePrefixes.pipeMedium.get(Materials.StainlessSteel) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Pump_EV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SXO", "dPw", "OMW", 'M', ItemList.Electric_Motor_EV, 'O', + OrePrefixes.ring.get(Materials.AnyRubber), 'X', OrePrefixes.rotor.get(Materials.StainlessSteel), 'S', + OrePrefixes.screw.get(Materials.StainlessSteel), 'W', OrePrefixes.cableGt01.get(Materials.Aluminium), + 'P', OrePrefixes.pipeMedium.get(Materials.Titanium) }); + GTModHandler.addCraftingRecipe( + ItemList.Electric_Pump_IV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SXO", "dPw", "OMW", 'M', ItemList.Electric_Motor_IV, 'O', + OrePrefixes.ring.get(Materials.AnySyntheticRubber), 'X', OrePrefixes.rotor.get(Materials.TungstenSteel), + 'S', OrePrefixes.screw.get(Materials.TungstenSteel), 'W', OrePrefixes.cableGt01.get(Materials.Tungsten), + 'P', OrePrefixes.pipeMedium.get(Materials.TungstenSteel) }); + + GTModHandler.addCraftingRecipe( + ItemList.Conveyor_Module_LV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "RRR", "MCM", "RRR", 'M', ItemList.Electric_Motor_LV, 'C', + OrePrefixes.cableGt01.get(Materials.Tin), 'R', OrePrefixes.plate.get(Materials.AnyRubber) }); + GTModHandler.addCraftingRecipe( + ItemList.Conveyor_Module_MV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "RRR", "MCM", "RRR", 'M', ItemList.Electric_Motor_MV, 'C', + OrePrefixes.cableGt01.get(Materials.AnyCopper), 'R', OrePrefixes.plate.get(Materials.AnyRubber) }); + GTModHandler.addCraftingRecipe( + ItemList.Conveyor_Module_HV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "RRR", "MCM", "RRR", 'M', ItemList.Electric_Motor_HV, 'C', + OrePrefixes.cableGt01.get(Materials.Gold), 'R', OrePrefixes.plate.get(Materials.AnyRubber) }); + GTModHandler.addCraftingRecipe( + ItemList.Conveyor_Module_EV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "RRR", "MCM", "RRR", 'M', ItemList.Electric_Motor_EV, 'C', + OrePrefixes.cableGt01.get(Materials.Aluminium), 'R', OrePrefixes.plate.get(Materials.AnyRubber) }); + GTModHandler.addCraftingRecipe( + ItemList.Conveyor_Module_IV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "RRR", "MCM", "RRR", 'M', ItemList.Electric_Motor_IV, 'C', + OrePrefixes.cableGt01.get(Materials.Tungsten), 'R', + OrePrefixes.plate.get(Materials.AnySyntheticRubber) }); + + GTModHandler.addCraftingRecipe( + ItemList.Robot_Arm_LV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CCC", "MSM", "PES", 'S', OrePrefixes.stick.get(Materials.Steel), 'M', + ItemList.Electric_Motor_LV, 'P', ItemList.Electric_Piston_LV, 'E', + OrePrefixes.circuit.get(Materials.LV), 'C', OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Robot_Arm_MV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CCC", "MSM", "PES", 'S', OrePrefixes.stick.get(Materials.Aluminium), 'M', + ItemList.Electric_Motor_MV, 'P', ItemList.Electric_Piston_MV, 'E', + OrePrefixes.circuit.get(Materials.MV), 'C', OrePrefixes.cableGt01.get(Materials.AnyCopper) }); + GTModHandler.addCraftingRecipe( + ItemList.Robot_Arm_HV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CCC", "MSM", "PES", 'S', OrePrefixes.stick.get(Materials.StainlessSteel), 'M', + ItemList.Electric_Motor_HV, 'P', ItemList.Electric_Piston_HV, 'E', + OrePrefixes.circuit.get(Materials.HV), 'C', OrePrefixes.cableGt01.get(Materials.Gold) }); + GTModHandler.addCraftingRecipe( + ItemList.Robot_Arm_EV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CCC", "MSM", "PES", 'S', OrePrefixes.stick.get(Materials.Titanium), 'M', + ItemList.Electric_Motor_EV, 'P', ItemList.Electric_Piston_EV, 'E', + OrePrefixes.circuit.get(Materials.EV), 'C', OrePrefixes.cableGt01.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Robot_Arm_IV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "CCC", "MSM", "PES", 'S', OrePrefixes.stick.get(Materials.TungstenSteel), 'M', + ItemList.Electric_Motor_IV, 'P', ItemList.Electric_Piston_IV, 'E', + OrePrefixes.circuit.get(Materials.IV), 'C', OrePrefixes.cableGt01.get(Materials.Tungsten) }); + + GTModHandler.addCraftingRecipe( + ItemList.Emitter_LV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SSC", "WQS", "CWS", 'Q', OrePrefixes.gem.get(Materials.CertusQuartz), 'S', + OrePrefixes.stick.get(Materials.Brass), 'C', OrePrefixes.circuit.get(Materials.LV), 'W', + OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Emitter_MV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SSC", "WQS", "CWS", 'Q', OrePrefixes.gem.get(Materials.EnderPearl), 'S', + OrePrefixes.stick.get(Materials.Electrum), 'C', OrePrefixes.circuit.get(Materials.MV), 'W', + OrePrefixes.cableGt01.get(Materials.AnyCopper) }); + GTModHandler.addCraftingRecipe( + ItemList.Emitter_HV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SSC", "WQS", "CWS", 'Q', OrePrefixes.gem.get(Materials.EnderEye), 'S', + OrePrefixes.stick.get(Materials.Chrome), 'C', OrePrefixes.circuit.get(Materials.HV), 'W', + OrePrefixes.cableGt01.get(Materials.Gold) }); + GTModHandler.addCraftingRecipe( + ItemList.Emitter_EV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SSC", "WQS", "CWS", 'Q', ItemList.QuantumEye, 'S', + OrePrefixes.stick.get(Materials.Platinum), 'C', OrePrefixes.circuit.get(Materials.EV), 'W', + OrePrefixes.cableGt01.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Emitter_IV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "SSC", "WQS", "CWS", 'Q', ItemList.QuantumStar, 'S', + OrePrefixes.stick.get(Materials.Iridium), 'C', OrePrefixes.circuit.get(Materials.IV), 'W', + OrePrefixes.cableGt01.get(Materials.Tungsten) }); + + GTModHandler.addCraftingRecipe( + ItemList.Sensor_LV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "P Q", "PS ", "CPP", 'Q', OrePrefixes.gem.get(Materials.CertusQuartz), 'S', + OrePrefixes.stick.get(Materials.Brass), 'P', OrePrefixes.plate.get(Materials.Steel), 'C', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Sensor_MV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "P Q", "PS ", "CPP", 'Q', OrePrefixes.gemFlawless.get(Materials.Emerald), 'S', + OrePrefixes.stick.get(Materials.Electrum), 'P', OrePrefixes.plate.get(Materials.Aluminium), 'C', + OrePrefixes.circuit.get(Materials.MV) }); + GTModHandler.addCraftingRecipe( + ItemList.Sensor_HV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "P Q", "PS ", "CPP", 'Q', OrePrefixes.gem.get(Materials.EnderEye), 'S', + OrePrefixes.stick.get(Materials.Chrome), 'P', OrePrefixes.plate.get(Materials.StainlessSteel), 'C', + OrePrefixes.circuit.get(Materials.HV) }); + GTModHandler.addCraftingRecipe( + ItemList.Sensor_EV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "P Q", "PS ", "CPP", 'Q', ItemList.QuantumEye, 'S', + OrePrefixes.stick.get(Materials.Platinum), 'P', OrePrefixes.plate.get(Materials.Titanium), 'C', + OrePrefixes.circuit.get(Materials.EV) }); + GTModHandler.addCraftingRecipe( + ItemList.Sensor_IV.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "P Q", "PS ", "CPP", 'Q', ItemList.QuantumStar, 'S', + OrePrefixes.stick.get(Materials.Iridium), 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'C', + OrePrefixes.circuit.get(Materials.IV) }); + + GTModHandler.addCraftingRecipe( + ItemList.Component_Sawblade_Diamond.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { " D ", "DGD", " D ", 'D', OrePrefixes.dustSmall.get(Materials.Diamond), 'G', + OrePrefixes.gearGt.get(Materials.CobaltBrass) }); + GTModHandler.addCraftingRecipe( + ItemList.Component_Grinder_Diamond.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "DSD", "SIS", "DSD", 'I', OrePrefixes.gem.get(Materials.Diamond), 'D', + OrePrefixes.dust.get(Materials.Diamond), 'S', OrePrefixes.plateDouble.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Component_Grinder_Tungsten.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "TST", "SIS", "TST", 'I', OreDictNames.craftingIndustrialDiamond, 'T', + OrePrefixes.plate.get(Materials.Tungsten), 'S', OrePrefixes.plateDouble.get(Materials.Steel) }); + + GTModHandler.addCraftingRecipe( + ItemList.Cover_Screen.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "AGA", "RPB", "ALA", 'A', OrePrefixes.plate.get(Materials.Aluminium), 'L', + OrePrefixes.dust.get(Materials.Glowstone), 'R', Dyes.dyeRed, 'G', Dyes.dyeLime, 'B', Dyes.dyeBlue, 'P', + OrePrefixes.plate.get(Materials.Glass) }); + + GTModHandler.addCraftingRecipe( + ItemList.Tool_Scanner.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "EPR", "CSC", "PBP", 'C', OrePrefixes.circuit.get(Materials.HV), 'P', + OrePrefixes.plate.get(Materials.Aluminium), 'E', ItemList.Emitter_MV, 'R', ItemList.Sensor_MV, 'S', + ItemList.Cover_Screen, 'B', ItemList.Battery_RE_MV_Lithium }); + + GTModHandler.addCraftingRecipe( + ItemList.ItemFilter_Export.get(1L), + new Object[] { "SPS", "dIC", "SPS", 'P', OrePrefixes.plate.get(Materials.Tin), 'S', + OrePrefixes.screw.get(Materials.Iron), 'I', ItemList.Component_Filter, 'C', + ItemList.Conveyor_Module_LV }); + GTModHandler.addCraftingRecipe( + ItemList.ItemFilter_Import.get(1L), + new Object[] { "SPS", "CId", "SPS", 'P', OrePrefixes.plate.get(Materials.Tin), 'S', + OrePrefixes.screw.get(Materials.Iron), 'I', ItemList.Component_Filter, 'C', + ItemList.Conveyor_Module_LV }); + + GTModHandler.addCraftingRecipe( + ItemList.Tool_Cover_Copy_Paste.get(1L), + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "PSP", "PCP", "PBP", 'P', OrePrefixes.plate.get(Materials.Aluminium), 'S', + ItemList.Tool_DataStick.get(1L), 'C', ItemList.Cover_Screen.get(1L), 'B', + ItemList.Battery_RE_MV_Lithium.get(1L) }); + } + + private void craftingShapelessRecipes() { + + GTModHandler.addShapelessCraftingRecipe( + ItemList.Coin_Chocolate.get(1L), + new Object[] { OrePrefixes.dust.get(Materials.Cocoa), OrePrefixes.dust.get(Materials.Milk), + OrePrefixes.dust.get(Materials.Sugar), OrePrefixes.foil.get(Materials.Gold) }); + + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Copper.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Iron }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Iron.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Silver }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Silver.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Gold }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Gold.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Platinum }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Platinum.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Osmium }); + + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Iron.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper, + ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper, ItemList.Credit_Copper, + ItemList.Credit_Copper }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Silver.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron, + ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron, ItemList.Credit_Iron }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Gold.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver, + ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver, ItemList.Credit_Silver, + ItemList.Credit_Silver }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Platinum.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold, + ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold, ItemList.Credit_Gold }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Osmium.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum, + ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum, ItemList.Credit_Platinum, + ItemList.Credit_Platinum }); + + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Copper.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Cupronickel }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Cupronickel.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Silver }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Silver.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Gold }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Gold.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Platinum }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Platinum.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Osmium }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Osmium.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Naquadah }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Naquadah.get(8L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Neutronium }); + + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Cupronickel.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, + ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper, + ItemList.Credit_Greg_Copper, ItemList.Credit_Greg_Copper }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Silver.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, + ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, + ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel, ItemList.Credit_Greg_Cupronickel }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Gold.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, + ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver, + ItemList.Credit_Greg_Silver, ItemList.Credit_Greg_Silver }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Platinum.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, + ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold, + ItemList.Credit_Greg_Gold, ItemList.Credit_Greg_Gold }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Osmium.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, + ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum, + ItemList.Credit_Greg_Platinum, ItemList.Credit_Greg_Platinum }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Naquadah.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, + ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium, + ItemList.Credit_Greg_Osmium, ItemList.Credit_Greg_Osmium }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Credit_Greg_Neutronium.get(1L), + GTModHandler.RecipeBits.KEEPNBT | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, + ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah, + ItemList.Credit_Greg_Naquadah, ItemList.Credit_Greg_Naquadah }); + + GTModHandler.addShapelessCraftingRecipe( + ItemList.Schematic.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Schematic_Crafting }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Schematic.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Schematic_1by1 }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Schematic.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Schematic_2by2 }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Schematic.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Schematic_3by3 }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Schematic.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Schematic_Dust }); + + GTModHandler.addShapelessCraftingRecipe( + ItemList.Tool_DataOrb.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Tool_DataOrb.get(1L) }); + + GTModHandler.addShapelessCraftingRecipe( + ItemList.Tool_DataStick.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ItemList.Tool_DataStick.get(1L) }); + + GTModHandler.addShapelessCraftingRecipe( + ItemList.Cover_RedstoneTransmitterInternal.get(1L), + new Object[] { ItemList.Cover_RedstoneTransmitterExternal.get(1L) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Cover_RedstoneReceiverInternal.get(1L), + new Object[] { ItemList.Cover_RedstoneReceiverExternal.get(1L) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Cover_RedstoneTransmitterExternal.get(1L), + new Object[] { ItemList.Cover_RedstoneTransmitterInternal.get(1L) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Cover_RedstoneReceiverExternal.get(1L), + new Object[] { ItemList.Cover_RedstoneReceiverInternal.get(1L) }); + + GTModHandler.addShapelessCraftingRecipe( + ItemList.ItemFilter_Export.get(1L), + new Object[] { ItemList.ItemFilter_Import.get(1L) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.ItemFilter_Import.get(1L), + new Object[] { ItemList.ItemFilter_Export.get(1L) }); + + } + + private void registerBehaviors() { + IItemBehaviour behaviourSprayColorRemover = new BehaviourSprayColorRemover( + ItemList.Spray_Empty.get(1L), + ItemList.Spray_Color_Used_Remover.get(1L), + ItemList.Spray_Color_Remover.get(1L), + 1024L); + addItemBehavior(32000 + Spray_Color_Remover.ID, behaviourSprayColorRemover); + addItemBehavior(32000 + Spray_Color_Used_Remover.ID, behaviourSprayColorRemover); + + IItemBehaviour behaviourMatches = new BehaviourLighter( + null, + ItemList.Tool_Matches.get(1L), + ItemList.Tool_Matches.get(1L), + 1L); + addItemBehavior(32000 + Tool_Matches.ID, behaviourMatches); + IItemBehaviour behaviourMatchBox = new BehaviourLighter( + null, + ItemList.Tool_MatchBox_Used.get(1L), + ItemList.Tool_MatchBox_Full.get(1L), + 16L); + addItemBehavior(32000 + Tool_MatchBox_Used.ID, behaviourMatchBox); + addItemBehavior(32000 + Tool_MatchBox_Full.ID, behaviourMatchBox); + + IItemBehaviour behaviourLighterInvar = new BehaviourLighter( + ItemList.Tool_Lighter_Invar_Empty.get(1L), + ItemList.Tool_Lighter_Invar_Used.get(1L), + ItemList.Tool_Lighter_Invar_Full.get(1L), + 100L); + addItemBehavior(32000 + Tool_Lighter_Invar_Used.ID, behaviourLighterInvar); + addItemBehavior(32000 + Tool_Lighter_Invar_Full.ID, behaviourLighterInvar); + + IItemBehaviour behaviourLighterPlatinum = new BehaviourLighter( + ItemList.Tool_Lighter_Platinum_Empty.get(1L), + ItemList.Tool_Lighter_Platinum_Used.get(1L), + ItemList.Tool_Lighter_Platinum_Full.get(1L), + 1000L); + addItemBehavior(32000 + Tool_Lighter_Platinum_Used.ID, behaviourLighterPlatinum); + addItemBehavior(32000 + Tool_Lighter_Platinum_Full.ID, behaviourLighterPlatinum); + + for (int i = 0; i < 16; i++) { + IItemBehaviour behaviourSprayColor = new BehaviourSprayColor( + ItemList.Spray_Empty.get(1L), + ItemList.SPRAY_CAN_DYES_USED[i].get(1L), + ItemList.SPRAY_CAN_DYES[i].get(1L), + ConfigGeneral.sprayCanUses, + i); + addItemBehavior(32000 + Spray_Colors[i], behaviourSprayColor); + addItemBehavior(32000 + Spray_Colors_Used[i], behaviourSprayColor); + } + } + + private void setAllElectricStats() { + setElectricStats(32000 + Battery_RE_ULV_Tantalum.ID, 1000L, GTValues.V[0], 0L, -3L, false); + setElectricStats(32000 + Battery_SU_LV_Sulfuric_Acid.ID, 18000L, GTValues.V[1], 1L, -2L, true); + setElectricStats(32000 + Battery_SU_LV_Mercury.ID, 32000L, GTValues.V[1], 1L, -2L, true); + setElectricStats(32000 + Battery_RE_LV_Cadmium.ID, 75000L, GTValues.V[1], 1L, -3L, true); + setElectricStats(32000 + Battery_RE_LV_Lithium.ID, 100000L, GTValues.V[1], 1L, -3L, true); + setElectricStats(32000 + Battery_RE_LV_Sodium.ID, 50000L, GTValues.V[1], 1L, -3L, true); + setElectricStats(32000 + Battery_SU_MV_Sulfuric_Acid.ID, 72000L, GTValues.V[2], 2L, -2L, true); + setElectricStats(32000 + Battery_SU_MV_Mercury.ID, 128000L, GTValues.V[2], 2L, -2L, true); + setElectricStats(32000 + Battery_RE_MV_Cadmium.ID, 300000L, GTValues.V[2], 2L, -3L, true); + setElectricStats(32000 + Battery_RE_MV_Lithium.ID, 400000L, GTValues.V[2], 2L, -3L, true); + setElectricStats(32000 + Battery_RE_MV_Sodium.ID, 200000L, GTValues.V[2], 2L, -3L, true); + setElectricStats(32000 + Battery_SU_HV_Sulfuric_Acid.ID, 288000L, GTValues.V[3], 3L, -2L, true); + setElectricStats(32000 + Battery_SU_HV_Mercury.ID, 512000L, GTValues.V[3], 3L, -2L, true); + setElectricStats(32000 + Battery_RE_HV_Cadmium.ID, 1200000L, GTValues.V[3], 3L, -3L, true); + setElectricStats(32000 + Battery_RE_HV_Lithium.ID, 1600000L, GTValues.V[3], 3L, -3L, true); + setElectricStats(32000 + Battery_RE_HV_Sodium.ID, 800000L, GTValues.V[3], 3L, -3L, true); + setElectricStats(32000 + Energy_Lapotronic_Orb.ID, 100000000L, GTValues.V[5], 5L, -3L, true); + setElectricStats(32000 + IDMetaItem01.ZPM.ID, 2000000000000L, GTValues.V[7], 7L, -2L, true); + setElectricStats(32000 + Energy_Lapotronic_orb_2.ID, 1000000000L, GTValues.V[6], 6L, -3L, true); + setElectricStats(32000 + ZPM2.ID, Long.MAX_VALUE, GTValues.V[8], 8L, -3L, true); + setElectricStats(32000 + ZPM3.ID, Long.MAX_VALUE, GTValues.V[12], 12L, -3L, true); + setElectricStats(32000 + ZPM4.ID, Long.MAX_VALUE, GTValues.V[13], 13L, -3L, true); + setElectricStats(32000 + ZPM5.ID, Long.MAX_VALUE, GTValues.V[14], 14L, -3L, true); + setElectricStats(32000 + ZPM6.ID, Long.MAX_VALUE, GTValues.V[15], 15L, -3L, true); + setElectricStats(32000 + Energy_Module.ID, 10000000000L, GTValues.V[7], 7L, -3L, true); + setElectricStats(32000 + Energy_Cluster.ID, 100000000000L, GTValues.V[8], 8L, -3L, true); + setElectricStats(32000 + Tool_Cover_Copy_Paste.ID, 400000L, GTValues.V[2], 2L, -1L, false); + setElectricStats(32000 + Tool_Cheat.ID, -2000000000L, 1000000000L, -1L, -3L, false); + setElectricStats(32000 + Tool_Scanner.ID, 400000L, GTValues.V[2], 2L, -1L, false); + setElectricStats(32000 + BatteryHull_EV_Full.ID, 6400000L, GTValues.V[4], 4L, -3L, true); + setElectricStats(32000 + BatteryHull_IV_Full.ID, 25600000L, GTValues.V[5], 5L, -3L, true); + setElectricStats(32000 + BatteryHull_LuV_Full.ID, 102400000L, GTValues.V[6], 6L, -3L, true); + setElectricStats(32000 + BatteryHull_ZPM_Full.ID, 409600000L, GTValues.V[7], 7L, -3L, true); + setElectricStats(32000 + BatteryHull_UV_Full.ID, 1638400000L, GTValues.V[8], 8L, -3L, true); + setElectricStats(32000 + BatteryHull_UHV_Full.ID, 6553600000L, GTValues.V[9], 9L, -3L, true); + setElectricStats(32000 + BatteryHull_UEV_Full.ID, 26214400000L, GTValues.V[10], 10L, -3L, true); + setElectricStats(32000 + BatteryHull_UIV_Full.ID, 104857600000L, GTValues.V[11], 11L, -3L, true); + setElectricStats(32000 + BatteryHull_UMV_Full.ID, 419430400000L, GTValues.V[12], 12L, -3L, true); + setElectricStats(32000 + BatteryHull_UxV_Full.ID, 1677721600000L, GTValues.V[13], 13L, -3L, true); + } + + private void registerTieredTooltips() { + registerTieredTooltip(ItemList.Battery_RE_ULV_Tantalum.get(1), ULV); + registerTieredTooltip(ItemList.Battery_SU_LV_SulfuricAcid.get(1), LV); + registerTieredTooltip(ItemList.Battery_SU_LV_Mercury.get(1), LV); + registerTieredTooltip(ItemList.Battery_RE_LV_Cadmium.get(1), LV); + registerTieredTooltip(ItemList.Battery_RE_LV_Lithium.get(1), LV); + registerTieredTooltip(ItemList.Battery_RE_LV_Sodium.get(1), LV); + registerTieredTooltip(ItemList.Battery_SU_MV_SulfuricAcid.get(1), MV); + registerTieredTooltip(ItemList.Battery_SU_MV_Mercury.get(1), MV); + registerTieredTooltip(ItemList.Battery_RE_MV_Cadmium.get(1), MV); + registerTieredTooltip(ItemList.Battery_RE_MV_Lithium.get(1), MV); + registerTieredTooltip(ItemList.Battery_RE_MV_Sodium.get(1), MV); + registerTieredTooltip(ItemList.Battery_SU_HV_SulfuricAcid.get(1), HV); + registerTieredTooltip(ItemList.Battery_SU_HV_Mercury.get(1), HV); + registerTieredTooltip(ItemList.Battery_RE_HV_Cadmium.get(1), HV); + registerTieredTooltip(ItemList.Battery_RE_HV_Lithium.get(1), HV); + registerTieredTooltip(ItemList.Battery_RE_HV_Sodium.get(1), HV); + registerTieredTooltip(ItemList.Energy_LapotronicOrb.get(1), IV); + registerTieredTooltip(ItemList.ZPM.get(1), ZPM); + registerTieredTooltip(ItemList.Energy_LapotronicOrb2.get(1), LuV); + registerTieredTooltip(ItemList.ZPM2.get(1), UV); + registerTieredTooltip(ItemList.ZPM3.get(1), UMV); + registerTieredTooltip(ItemList.ZPM4.get(1), UXV); + registerTieredTooltip(ItemList.ZPM5.get(1), MAX); + registerTieredTooltip(ItemList.ZPM6.get(1), ERV); + registerTieredTooltip(ItemList.Energy_Module.get(1), ZPM); + registerTieredTooltip(ItemList.Energy_Cluster.get(1), UV); + registerTieredTooltip(ItemList.Circuit_Primitive.get(1), ULV); + registerTieredTooltip(ItemList.Circuit_Basic.get(1), LV); + registerTieredTooltip(ItemList.Circuit_Good.get(1), MV); + registerTieredTooltip(ItemList.Circuit_Advanced.get(1), HV); + registerTieredTooltip(ItemList.Circuit_Data.get(1), EV); + registerTieredTooltip(ItemList.Circuit_Elite.get(1), IV); + registerTieredTooltip(ItemList.Circuit_Master.get(1), LuV); + registerTieredTooltip(ItemList.BatteryHull_EV_Full.get(1), EV); + registerTieredTooltip(ItemList.BatteryHull_IV_Full.get(1), IV); + registerTieredTooltip(ItemList.BatteryHull_LuV_Full.get(1), LuV); + registerTieredTooltip(ItemList.BatteryHull_ZPM_Full.get(1), ZPM); + registerTieredTooltip(ItemList.BatteryHull_UV_Full.get(1), UV); + registerTieredTooltip(ItemList.BatteryHull_UHV_Full.get(1), UHV); + registerTieredTooltip(ItemList.BatteryHull_UEV_Full.get(1), UEV); + registerTieredTooltip(ItemList.BatteryHull_UIV_Full.get(1), UIV); + registerTieredTooltip(ItemList.BatteryHull_UMV_Full.get(1), UMV); + registerTieredTooltip(ItemList.BatteryHull_UxV_Full.get(1), UXV); + + } +} diff --git a/src/main/java/gregtech/common/items/MetaGeneratedItem02.java b/src/main/java/gregtech/common/items/MetaGeneratedItem02.java new file mode 100644 index 0000000000..45404e36cd --- /dev/null +++ b/src/main/java/gregtech/common/items/MetaGeneratedItem02.java @@ -0,0 +1,3107 @@ +package gregtech.common.items; + +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ADVANCED_REDSTONE_RECEIVER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ADVANCED_REDSTONE_TRANSMITTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_WIRELESS_ACTIVITYDETECTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_WIRELESS_FLUID_DETECTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_WIRELESS_ITEM_DETECTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_WIRELESS_MAINTENANCE_DETECTOR; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.compressorRecipes; +import static gregtech.api.recipe.RecipeMaps.extractorRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.WILDCARD; +import static gregtech.common.items.IDMetaItem02.Bottle_Alcopops; +import static gregtech.common.items.IDMetaItem02.Bottle_Apple_Juice; +import static gregtech.common.items.IDMetaItem02.Bottle_Beer; +import static gregtech.common.items.IDMetaItem02.Bottle_Cave_Johnsons_Grenade_Juice; +import static gregtech.common.items.IDMetaItem02.Bottle_Chilly_Sauce; +import static gregtech.common.items.IDMetaItem02.Bottle_Cider; +import static gregtech.common.items.IDMetaItem02.Bottle_Dark_Beer; +import static gregtech.common.items.IDMetaItem02.Bottle_Diablo_Sauce; +import static gregtech.common.items.IDMetaItem02.Bottle_Diabolo_Sauce; +import static gregtech.common.items.IDMetaItem02.Bottle_Dragon_Blood; +import static gregtech.common.items.IDMetaItem02.Bottle_Glen_McKenner; +import static gregtech.common.items.IDMetaItem02.Bottle_Golden_Apple_Juice; +import static gregtech.common.items.IDMetaItem02.Bottle_Golden_Cider; +import static gregtech.common.items.IDMetaItem02.Bottle_Grape_Juice; +import static gregtech.common.items.IDMetaItem02.Bottle_Holy_Water; +import static gregtech.common.items.IDMetaItem02.Bottle_Hops_Juice; +import static gregtech.common.items.IDMetaItem02.Bottle_Hot_Sauce; +import static gregtech.common.items.IDMetaItem02.Bottle_Iduns_Apple_Juice; +import static gregtech.common.items.IDMetaItem02.Bottle_Lemon_Juice; +import static gregtech.common.items.IDMetaItem02.Bottle_Lemonade; +import static gregtech.common.items.IDMetaItem02.Bottle_Leninade; +import static gregtech.common.items.IDMetaItem02.Bottle_Limoncello; +import static gregtech.common.items.IDMetaItem02.Bottle_Milk; +import static gregtech.common.items.IDMetaItem02.Bottle_Mineral_Water; +import static gregtech.common.items.IDMetaItem02.Bottle_Notches_Brew; +import static gregtech.common.items.IDMetaItem02.Bottle_Pirate_Brew; +import static gregtech.common.items.IDMetaItem02.Bottle_Potato_Juice; +import static gregtech.common.items.IDMetaItem02.Bottle_Purple_Drink; +import static gregtech.common.items.IDMetaItem02.Bottle_Reed_Water; +import static gregtech.common.items.IDMetaItem02.Bottle_Rum; +import static gregtech.common.items.IDMetaItem02.Bottle_Salty_Water; +import static gregtech.common.items.IDMetaItem02.Bottle_Scotch; +import static gregtech.common.items.IDMetaItem02.Bottle_Snitches_Glitch_Sauce; +import static gregtech.common.items.IDMetaItem02.Bottle_Vinegar; +import static gregtech.common.items.IDMetaItem02.Bottle_Vodka; +import static gregtech.common.items.IDMetaItem02.Bottle_Wheaty_Hops_Juice; +import static gregtech.common.items.IDMetaItem02.Bottle_Wheaty_Juice; +import static gregtech.common.items.IDMetaItem02.Bottle_Wine; +import static gregtech.common.items.IDMetaItem02.Cover_AdvancedRedstoneReceiverExternal; +import static gregtech.common.items.IDMetaItem02.Cover_AdvancedRedstoneReceiverInternal; +import static gregtech.common.items.IDMetaItem02.Cover_AdvancedRedstoneTransmitterExternal; +import static gregtech.common.items.IDMetaItem02.Cover_AdvancedRedstoneTransmitterInternal; +import static gregtech.common.items.IDMetaItem02.Cover_WirelessActivityDetector; +import static gregtech.common.items.IDMetaItem02.Cover_WirelessFluidDetector; +import static gregtech.common.items.IDMetaItem02.Cover_WirelessItemDetector; +import static gregtech.common.items.IDMetaItem02.Cover_WirelessNeedsMaintainance; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Argentia; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Aurelia; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Bauxite; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_BobsYerUncleRanks; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Chilly; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Coppon; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Cucumber; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Ferru; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Grapes; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Ilmenite; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Indigo; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Iridium; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Lemon; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_MTomato; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Manganese; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Mica; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_MilkWart; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Naquadah; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Nickel; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_OilBerry; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Onion; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Osmium; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Pitchblende; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Platinum; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Plumbilia; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Rape; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Scheelite; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_TeaLeaf; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Thorium; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Tine; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Tomato; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_UUABerry; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_UUMBerry; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Uraninite; +import static gregtech.common.items.IDMetaItem02.Crop_Drop_Zinc; +import static gregtech.common.items.IDMetaItem02.Display_ITS_FREE; +import static gregtech.common.items.IDMetaItem02.Dye_Color_00; +import static gregtech.common.items.IDMetaItem02.Dye_Color_01; +import static gregtech.common.items.IDMetaItem02.Dye_Color_02; +import static gregtech.common.items.IDMetaItem02.Dye_Color_03; +import static gregtech.common.items.IDMetaItem02.Dye_Color_04; +import static gregtech.common.items.IDMetaItem02.Dye_Color_05; +import static gregtech.common.items.IDMetaItem02.Dye_Color_06; +import static gregtech.common.items.IDMetaItem02.Dye_Color_07; +import static gregtech.common.items.IDMetaItem02.Dye_Color_08; +import static gregtech.common.items.IDMetaItem02.Dye_Color_09; +import static gregtech.common.items.IDMetaItem02.Dye_Color_10; +import static gregtech.common.items.IDMetaItem02.Dye_Color_11; +import static gregtech.common.items.IDMetaItem02.Dye_Color_12; +import static gregtech.common.items.IDMetaItem02.Dye_Color_13; +import static gregtech.common.items.IDMetaItem02.Dye_Color_14; +import static gregtech.common.items.IDMetaItem02.Dye_Color_15; +import static gregtech.common.items.IDMetaItem02.Dye_Indigo; +import static gregtech.common.items.IDMetaItem02.Food_Baked_Baguette; +import static gregtech.common.items.IDMetaItem02.Food_Baked_Bun; +import static gregtech.common.items.IDMetaItem02.Food_Baked_Cake; +import static gregtech.common.items.IDMetaItem02.Food_Baked_Pizza_Cheese; +import static gregtech.common.items.IDMetaItem02.Food_Baked_Pizza_Meat; +import static gregtech.common.items.IDMetaItem02.Food_Baked_Pizza_Veggie; +import static gregtech.common.items.IDMetaItem02.Food_Burger_Cheese; +import static gregtech.common.items.IDMetaItem02.Food_Burger_Chum; +import static gregtech.common.items.IDMetaItem02.Food_Burger_Meat; +import static gregtech.common.items.IDMetaItem02.Food_Burger_Veggie; +import static gregtech.common.items.IDMetaItem02.Food_Cheese; +import static gregtech.common.items.IDMetaItem02.Food_ChiliChips; +import static gregtech.common.items.IDMetaItem02.Food_Chum; +import static gregtech.common.items.IDMetaItem02.Food_Chum_On_Stick; +import static gregtech.common.items.IDMetaItem02.Food_Dough; +import static gregtech.common.items.IDMetaItem02.Food_Dough_Chocolate; +import static gregtech.common.items.IDMetaItem02.Food_Dough_Sugar; +import static gregtech.common.items.IDMetaItem02.Food_Flat_Dough; +import static gregtech.common.items.IDMetaItem02.Food_Fries; +import static gregtech.common.items.IDMetaItem02.Food_Large_Sandwich_Bacon; +import static gregtech.common.items.IDMetaItem02.Food_Large_Sandwich_Cheese; +import static gregtech.common.items.IDMetaItem02.Food_Large_Sandwich_Steak; +import static gregtech.common.items.IDMetaItem02.Food_Large_Sandwich_Veggie; +import static gregtech.common.items.IDMetaItem02.Food_Packaged_ChiliChips; +import static gregtech.common.items.IDMetaItem02.Food_Packaged_Fries; +import static gregtech.common.items.IDMetaItem02.Food_Packaged_PotatoChips; +import static gregtech.common.items.IDMetaItem02.Food_PotatoChips; +import static gregtech.common.items.IDMetaItem02.Food_Potato_On_Stick; +import static gregtech.common.items.IDMetaItem02.Food_Potato_On_Stick_Roasted; +import static gregtech.common.items.IDMetaItem02.Food_Raw_Baguette; +import static gregtech.common.items.IDMetaItem02.Food_Raw_Bread; +import static gregtech.common.items.IDMetaItem02.Food_Raw_Bun; +import static gregtech.common.items.IDMetaItem02.Food_Raw_Cake; +import static gregtech.common.items.IDMetaItem02.Food_Raw_Cookie; +import static gregtech.common.items.IDMetaItem02.Food_Raw_Fries; +import static gregtech.common.items.IDMetaItem02.Food_Raw_Pizza_Cheese; +import static gregtech.common.items.IDMetaItem02.Food_Raw_Pizza_Meat; +import static gregtech.common.items.IDMetaItem02.Food_Raw_Pizza_Veggie; +import static gregtech.common.items.IDMetaItem02.Food_Raw_PotatoChips; +import static gregtech.common.items.IDMetaItem02.Food_Sandwich_Bacon; +import static gregtech.common.items.IDMetaItem02.Food_Sandwich_Cheese; +import static gregtech.common.items.IDMetaItem02.Food_Sandwich_Steak; +import static gregtech.common.items.IDMetaItem02.Food_Sandwich_Veggie; +import static gregtech.common.items.IDMetaItem02.Food_Sliced_Baguette; +import static gregtech.common.items.IDMetaItem02.Food_Sliced_Baguettes; +import static gregtech.common.items.IDMetaItem02.Food_Sliced_Bread; +import static gregtech.common.items.IDMetaItem02.Food_Sliced_Breads; +import static gregtech.common.items.IDMetaItem02.Food_Sliced_Bun; +import static gregtech.common.items.IDMetaItem02.Food_Sliced_Buns; +import static gregtech.common.items.IDMetaItem02.Food_Sliced_Cheese; +import static gregtech.common.items.IDMetaItem02.Food_Sliced_Cucumber; +import static gregtech.common.items.IDMetaItem02.Food_Sliced_Lemon; +import static gregtech.common.items.IDMetaItem02.Food_Sliced_Onion; +import static gregtech.common.items.IDMetaItem02.Food_Sliced_Tomato; +import static gregtech.common.items.IDMetaItem02.GelledToluene; +import static gregtech.common.items.IDMetaItem02.MSFMixture; +import static gregtech.common.items.IDMetaItem02.Plank_Acacia; +import static gregtech.common.items.IDMetaItem02.Plank_Acacia_Green; +import static gregtech.common.items.IDMetaItem02.Plank_Balsa; +import static gregtech.common.items.IDMetaItem02.Plank_Baobab; +import static gregtech.common.items.IDMetaItem02.Plank_Birch; +import static gregtech.common.items.IDMetaItem02.Plank_Cherry; +import static gregtech.common.items.IDMetaItem02.Plank_Chestnut; +import static gregtech.common.items.IDMetaItem02.Plank_Citrus; +import static gregtech.common.items.IDMetaItem02.Plank_DarkOak; +import static gregtech.common.items.IDMetaItem02.Plank_Ebony; +import static gregtech.common.items.IDMetaItem02.Plank_Greenheart; +import static gregtech.common.items.IDMetaItem02.Plank_Jungle; +import static gregtech.common.items.IDMetaItem02.Plank_Kapok; +import static gregtech.common.items.IDMetaItem02.Plank_Larch; +import static gregtech.common.items.IDMetaItem02.Plank_Lime; +import static gregtech.common.items.IDMetaItem02.Plank_Mahagony; +import static gregtech.common.items.IDMetaItem02.Plank_Mahoe; +import static gregtech.common.items.IDMetaItem02.Plank_Maple; +import static gregtech.common.items.IDMetaItem02.Plank_Oak; +import static gregtech.common.items.IDMetaItem02.Plank_Palm; +import static gregtech.common.items.IDMetaItem02.Plank_Papaya; +import static gregtech.common.items.IDMetaItem02.Plank_Pine; +import static gregtech.common.items.IDMetaItem02.Plank_Plum; +import static gregtech.common.items.IDMetaItem02.Plank_Poplar; +import static gregtech.common.items.IDMetaItem02.Plank_Sequoia; +import static gregtech.common.items.IDMetaItem02.Plank_Spruce; +import static gregtech.common.items.IDMetaItem02.Plank_Teak; +import static gregtech.common.items.IDMetaItem02.Plank_Walnut; +import static gregtech.common.items.IDMetaItem02.Plank_Wenge; +import static gregtech.common.items.IDMetaItem02.Plank_Willow; +import static gregtech.common.items.IDMetaItem02.SFMixture; +import static gregtech.common.items.IDMetaItem02.ThermosCan_Cafe_au_lait; +import static gregtech.common.items.IDMetaItem02.ThermosCan_Chocolate_Milk; +import static gregtech.common.items.IDMetaItem02.ThermosCan_Coffee; +import static gregtech.common.items.IDMetaItem02.ThermosCan_Dark_Cafe_au_lait; +import static gregtech.common.items.IDMetaItem02.ThermosCan_Dark_Chocolate_Milk; +import static gregtech.common.items.IDMetaItem02.ThermosCan_Dark_Coffee; +import static gregtech.common.items.IDMetaItem02.ThermosCan_Ice_Tea; +import static gregtech.common.items.IDMetaItem02.ThermosCan_Lait_au_cafe; +import static gregtech.common.items.IDMetaItem02.ThermosCan_Sweet_Tea; +import static gregtech.common.items.IDMetaItem02.ThermosCan_Tea; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnumEnchantmentType; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TCAspects; +import gregtech.api.enums.TierEU; +import gregtech.api.items.MetaGeneratedItemX32; +import gregtech.api.objects.ItemData; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTFoodStat; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.covers.redstone.CoverAdvancedRedstoneReceiverExternal; +import gregtech.common.covers.redstone.CoverAdvancedRedstoneReceiverInternal; +import gregtech.common.covers.redstone.CoverAdvancedRedstoneTransmitterExternal; +import gregtech.common.covers.redstone.CoverAdvancedRedstoneTransmitterInternal; +import gregtech.common.covers.redstone.CoverWirelessDoesWorkDetector; +import gregtech.common.covers.redstone.CoverWirelessFluidDetector; +import gregtech.common.covers.redstone.CoverWirelessItemDetector; +import gregtech.common.covers.redstone.CoverWirelessMaintenanceDetector; +import ic2.api.crops.CropCard; +import ic2.api.crops.Crops; + +public class MetaGeneratedItem02 extends MetaGeneratedItemX32 { + + public static MetaGeneratedItem02 INSTANCE; + private static final String aTextCover = "Usable as Cover"; + + public MetaGeneratedItem02() { + super( + "metaitem.02", + OrePrefixes.toolHeadSword, + OrePrefixes.toolHeadPickaxe, + OrePrefixes.toolHeadShovel, + OrePrefixes.toolHeadAxe, + OrePrefixes.toolHeadHoe, + OrePrefixes.toolHeadHammer, + OrePrefixes.toolHeadFile, + OrePrefixes.toolHeadSaw, + OrePrefixes.toolHeadDrill, + OrePrefixes.toolHeadChainsaw, + OrePrefixes.toolHeadWrench, + OrePrefixes.toolHeadUniversalSpade, + OrePrefixes.toolHeadSense, + OrePrefixes.toolHeadPlow, + OrePrefixes.___placeholder___, + OrePrefixes.toolHeadBuzzSaw, + OrePrefixes.turbineBlade, + null, + OrePrefixes.itemCasing, + OrePrefixes.wireFine, + OrePrefixes.gearGtSmall, + OrePrefixes.rotor, + OrePrefixes.stickLong, + OrePrefixes.springSmall, + OrePrefixes.spring, + OrePrefixes.___placeholder___, + OrePrefixes.___placeholder___, + OrePrefixes.gemChipped, + OrePrefixes.gemFlawed, + OrePrefixes.gemFlawless, + OrePrefixes.gemExquisite, + OrePrefixes.gearGt); + INSTANCE = this; + + ItemList.ThermosCan_Dark_Coffee.set( + addItem( + ThermosCan_Dark_Coffee.ID, + "Dark Coffee", + "Coffee, dark, without anything else", + new GTFoodStat( + 2, + 0.2F, + EnumAction.drink, + ItemList.ThermosCan_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.moveSpeed.id, + 400, + 1, + 70, + Potion.digSpeed.id, + 400, + 1, + 70), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2L))); + ItemList.ThermosCan_Dark_Cafe_au_lait.set( + addItem( + ThermosCan_Dark_Cafe_au_lait.ID, + "Dark Coffee au lait", + "Keeping you awake the whole night", + new GTFoodStat( + 2, + 0.2F, + EnumAction.drink, + ItemList.ThermosCan_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.moveSpeed.id, + 400, + 2, + 90, + Potion.digSpeed.id, + 400, + 2, + 90), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 3L))); + ItemList.ThermosCan_Coffee.set( + addItem( + ThermosCan_Coffee.ID, + "Coffee", + "Just the regular morning Coffee", + new GTFoodStat( + 3, + 0.4F, + EnumAction.drink, + ItemList.ThermosCan_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.moveSpeed.id, + 400, + 0, + 50, + Potion.digSpeed.id, + 400, + 0, + 50), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 1L))); + ItemList.ThermosCan_Cafe_au_lait.set( + addItem( + ThermosCan_Cafe_au_lait.ID, + "Cafe au lait", + "Sweet Coffee", + new GTFoodStat( + 3, + 0.4F, + EnumAction.drink, + ItemList.ThermosCan_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.moveSpeed.id, + 400, + 1, + 70, + Potion.digSpeed.id, + 400, + 1, + 70), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2L))); + ItemList.ThermosCan_Lait_au_cafe.set( + addItem( + ThermosCan_Lait_au_cafe.ID, + "Lait au cafe", + "You want Coffee to your Sugar?", + new GTFoodStat( + 3, + 0.4F, + EnumAction.drink, + ItemList.ThermosCan_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.moveSpeed.id, + 400, + 2, + 90, + Potion.digSpeed.id, + 400, + 2, + 90), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.MOTUS, 3L))); + ItemList.ThermosCan_Dark_Chocolate_Milk.set( + addItem( + ThermosCan_Dark_Chocolate_Milk.ID, + "Dark Chocolate Milk", + "A bit bitter, better add a bit Sugar", + new GTFoodStat( + 3, + 0.4F, + EnumAction.drink, + ItemList.ThermosCan_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.regeneration.id, + 50, + 1, + 60), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 1L))); + ItemList.ThermosCan_Chocolate_Milk.set( + addItem( + ThermosCan_Chocolate_Milk.ID, + "Chocolate Milk", + "Sweet Goodness", + new GTFoodStat( + 3, + 0.4F, + EnumAction.drink, + ItemList.ThermosCan_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.regeneration.id, + 50, + 1, + 90), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 2L))); + ItemList.ThermosCan_Tea.set( + addItem( + ThermosCan_Tea.ID, + "Tea", + "Keep calm and carry on", + new GTFoodStat( + 2, + 0.2F, + EnumAction.drink, + ItemList.ThermosCan_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.moveSlowdown.id, + 300, + 0, + 50), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 2L))); + ItemList.ThermosCan_Sweet_Tea.set( + addItem( + ThermosCan_Sweet_Tea.ID, + "Sweet Tea", + "How about a Tea Party? In Boston?", + new GTFoodStat( + 2, + 0.2F, + EnumAction.drink, + ItemList.ThermosCan_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 2L))); + ItemList.ThermosCan_Ice_Tea.set( + addItem( + ThermosCan_Ice_Tea.ID, + "Ice Tea", + "Better than this purple Junk Drink from failed Potions", + new GTFoodStat( + 2, + 0.2F, + EnumAction.drink, + ItemList.ThermosCan_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.moveSlowdown.id, + 300, + 0, + 50), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 2L))); + + ItemList.GelledToluene.set(addItem(GelledToluene.ID, "Gelled Toluene", "Raw Explosive")); + + ItemList.Bottle_Purple_Drink.set( + addItem( + Bottle_Purple_Drink.ID, + "Purple Drink", + "How about Lemonade. Or some Ice Tea? I got Purple Drink!", + new GTFoodStat( + 8, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.moveSlowdown.id, + 400, + 1, + 90), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.VINCULUM, 1L))); + ItemList.Bottle_Grape_Juice.set( + addItem( + Bottle_Grape_Juice.ID, + "Grape Juice", + "This has a cleaning effect on your internals.", + new GTFoodStat( + 4, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.hunger.id, + 400, + 1, + 60), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 1L))); + ItemList.Bottle_Wine.set( + addItem( + Bottle_Wine.ID, + "Wine", + "Ordinary", + new GTFoodStat( + 2, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 400, + 1, + 60, + Potion.heal.id, + 0, + 0, + 60, + Potion.poison.id, + 200, + 1, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 1L))); + ItemList.Bottle_Vinegar.set( + addItem( + Bottle_Vinegar.ID, + "Vinegar", + "Exquisite", + new GTFoodStat( + 2, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 400, + 1, + 90, + Potion.heal.id, + 0, + 1, + 90, + Potion.poison.id, + 200, + 2, + 10, + Potion.harm.id, + 0, + 2, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 1L))); + ItemList.Bottle_Potato_Juice.set( + addItem( + Bottle_Potato_Juice.ID, + "Potato Juice", + "Ever seen Potato Juice in stores? No? That has a reason.", + new GTFoodStat( + 3, + 0.3F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L))); + ItemList.Bottle_Vodka.set( + addItem( + Bottle_Vodka.ID, + "Vodka", + "Not to confuse with Water", + new GTFoodStat( + 2, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 500, + 0, + 60, + Potion.damageBoost.id, + 500, + 1, + 60, + Potion.poison.id, + 200, + 1, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.TELUM, 1L))); + ItemList.Bottle_Leninade.set( + addItem( + Bottle_Leninade.ID, + "Leninade", + "Let the Communism flow through you!", + new GTFoodStat( + 2, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 500, + 1, + 90, + Potion.damageBoost.id, + 500, + 2, + 90, + Potion.poison.id, + 200, + 2, + 10, + Potion.harm.id, + 0, + 2, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.TELUM, 2L))); + ItemList.Bottle_Mineral_Water.set( + addItem( + Bottle_Mineral_Water.ID, + "Mineral Water", + "The best Stuff you can drink to stay healthy", + new GTFoodStat( + 1, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.regeneration.id, + 100, + 1, + 10), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 2L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 1L))); + ItemList.Bottle_Salty_Water.set( + addItem( + Bottle_Salty_Water.ID, + "Salty Water", + "Like Sea Water but less dirty", + SubTag.INVISIBLE, + new GTFoodStat( + 1, + 0.0F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.hunger.id, + 400, + 2, + 95), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.TEMPESTAS, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Bottle_Reed_Water.set( + addItem( + Bottle_Reed_Water.ID, + "Reed Water", + "I guess this tastes better when fermented", + new GTFoodStat( + 1, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L))); + ItemList.Bottle_Rum.set( + addItem( + Bottle_Rum.ID, + "Rum", + "A buddle o' rum", + new GTFoodStat( + 4, + 0.4F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 300, + 0, + 60, + Potion.damageBoost.id, + 300, + 1, + 60, + Potion.poison.id, + 200, + 1, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1L))); + ItemList.Bottle_Pirate_Brew.set( + addItem( + Bottle_Pirate_Brew.ID, + "Pirate Brew", + "Set the Sails, we are going to Torrentuga!", + new GTFoodStat( + 4, + 0.4F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 300, + 1, + 90, + Potion.damageBoost.id, + 300, + 2, + 90, + Potion.poison.id, + 200, + 2, + 10, + Potion.harm.id, + 0, + 2, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 2L))); + ItemList.Bottle_Hops_Juice.set( + addItem( + Bottle_Hops_Juice.ID, + "Hops Juice", + "Every Beer has a start", + new GTFoodStat( + 1, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L))); + ItemList.Bottle_Dark_Beer.set( + addItem( + Bottle_Dark_Beer.ID, + "Dark Beer", + "Dark Beer, for the real Men", + new GTFoodStat( + 4, + 0.4F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 300, + 1, + 60, + Potion.damageBoost.id, + 300, + 1, + 60, + Potion.poison.id, + 200, + 1, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L))); + ItemList.Bottle_Dragon_Blood.set( + addItem( + Bottle_Dragon_Blood.ID, + "Dragon Blood", + "FUS RO DAH!", + new GTFoodStat( + 4, + 0.4F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 300, + 2, + 90, + Potion.damageBoost.id, + 300, + 2, + 90, + Potion.poison.id, + 200, + 2, + 10, + Potion.harm.id, + 0, + 2, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2L))); + ItemList.Bottle_Wheaty_Juice.set( + addItem( + Bottle_Wheaty_Juice.ID, + "Wheaty Juice", + "Is this liquefied Bread or what?", + new GTFoodStat( + 2, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L))); + ItemList.Bottle_Scotch.set( + addItem( + Bottle_Scotch.ID, + "Scotch", + "Technically this is just a Whisky", + new GTFoodStat( + 2, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 400, + 0, + 60, + Potion.resistance.id, + 400, + 1, + 60, + Potion.poison.id, + 200, + 1, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 1L))); + ItemList.Bottle_Glen_McKenner.set( + addItem( + Bottle_Glen_McKenner.ID, + "Glen McKenner", + "Don't hand to easily surprised people, they will shatter it.", + new GTFoodStat( + 2, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 400, + 1, + 90, + Potion.resistance.id, + 400, + 2, + 90, + Potion.poison.id, + 200, + 2, + 10, + Potion.harm.id, + 0, + 2, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 2L))); + ItemList.Bottle_Wheaty_Hops_Juice.set( + addItem( + Bottle_Wheaty_Hops_Juice.ID, + "Wheaty Hops Juice", + "Also known as 'Duff-Lite'", + new GTFoodStat( + 1, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 2L))); + ItemList.Bottle_Beer.set( + addItem( + Bottle_Beer.ID, + "Beer", + "Good old Beer", + new GTFoodStat( + 6, + 0.4F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 400, + 0, + 60, + Potion.digSpeed.id, + 400, + 2, + 60, + Potion.poison.id, + 100, + 0, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 1L))); + ItemList.Bottle_Chilly_Sauce.set( + addItem( + Bottle_Chilly_Sauce.ID, + "Chilly Sauce", + "Spicy", + new GTFoodStat( + 2, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 1000, + 0, + 10, + Potion.fireResistance.id, + 1000, + 0, + 60), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Bottle_Hot_Sauce.set( + addItem( + Bottle_Hot_Sauce.ID, + "Hot Sauce", + "Very Spicy, I guess?", + new GTFoodStat( + 2, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 2000, + 0, + 30, + Potion.fireResistance.id, + 2000, + 0, + 70), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 2L))); + ItemList.Bottle_Diabolo_Sauce.set( + addItem( + Bottle_Diabolo_Sauce.ID, + "Diabolo Sauce", + "As if the Devil made this Sauce", + new GTFoodStat( + 2, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 3000, + 1, + 50, + Potion.fireResistance.id, + 3000, + 0, + 80), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 3L))); + ItemList.Bottle_Diablo_Sauce.set( + addItem( + Bottle_Diablo_Sauce.ID, + "Diablo Sauce", + "Diablo always comes back!", + new GTFoodStat( + 2, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 4000, + 1, + 70, + Potion.fireResistance.id, + 4000, + 0, + 90), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 4L))); + ItemList.Bottle_Snitches_Glitch_Sauce.set( + addItem( + Bottle_Snitches_Glitch_Sauce.ID, + "Old Man Snitches glitched Diablo Sauce", + "[Missing No]", + SubTag.INVISIBLE, + new GTFoodStat( + 2, + 0.1F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 9999, + 2, + 999, + Potion.fireResistance.id, + 9999, + 9, + 999), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 3L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 5L))); + ItemList.Bottle_Apple_Juice.set( + addItem( + Bottle_Apple_Juice.ID, + "Apple Juice", + "Made of the Apples from our best Oak Farms", + new GTFoodStat( + 4, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.hunger.id, + 400, + 0, + 20), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L))); + ItemList.Bottle_Cider.set( + addItem( + Bottle_Cider.ID, + "Cider", + "If you have nothing better to do with your Apples", + new GTFoodStat( + 4, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 400, + 0, + 60, + Potion.resistance.id, + 400, + 1, + 60, + Potion.poison.id, + 200, + 1, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 1L))); + ItemList.Bottle_Golden_Apple_Juice.set( + addItem( + Bottle_Golden_Apple_Juice.ID, + "Golden Apple Juice", + "A golden Apple in liquid form", + new GTFoodStat( + 4, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.hunger.id, + 400, + 0, + 20, + Potion.field_76444_x.id, + 2400, + 0, + 100, + Potion.regeneration.id, + 100, + 1, + 100), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 1L))); + ItemList.Bottle_Golden_Cider.set( + addItem( + Bottle_Golden_Cider.ID, + "Golden Cider", + "More Resistance, less Regeneration", + new GTFoodStat( + 4, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.confusion.id, + 400, + 0, + 60, + Potion.field_76444_x.id, + 2400, + 1, + 95, + Potion.poison.id, + 200, + 1, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 1L))); + ItemList.Bottle_Iduns_Apple_Juice.set( + addItem( + Bottle_Iduns_Apple_Juice.ID, + "Idun's Apple Juice", + "So you got the Idea of using Notch Apples for a drink?", + new GTFoodStat( + 4, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.regeneration.id, + 600, + 4, + 100, + Potion.field_76444_x.id, + 2400, + 0, + 100, + Potion.resistance.id, + 6000, + 0, + 100, + Potion.fireResistance.id, + 6000, + 0, + 100), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 9L))); + ItemList.Bottle_Notches_Brew.set( + addItem( + Bottle_Notches_Brew.ID, + "Notches Brew", + "This is just overpowered", + new GTFoodStat( + 4, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.regeneration.id, + 700, + 4, + 95, + Potion.field_76444_x.id, + 3000, + 1, + 95, + Potion.resistance.id, + 7000, + 1, + 95, + Potion.fireResistance.id, + 7000, + 0, + 95, + Potion.harm.id, + 0, + 2, + 20), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 9L))); + ItemList.Bottle_Lemon_Juice.set( + addItem( + Bottle_Lemon_Juice.ID, + "Lemon Juice", + "Maybe adding Sugar will make it less sour", + new GTFoodStat( + 2, + 0.4F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.digSpeed.id, + 1200, + 0, + 60), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 1L))); + ItemList.Bottle_Limoncello.set( + addItem( + Bottle_Limoncello.ID, + "Limoncello", + "An alcoholic Drink which tastes like Lemons", + new GTFoodStat( + 2, + 0.4F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.digSpeed.id, + 1200, + 0, + 90, + Potion.poison.id, + 200, + 1, + 5), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 1L))); + ItemList.Bottle_Lemonade.set( + addItem( + Bottle_Lemonade.ID, + "Lemonade", + "Cold and refreshing Lemonade", + new GTFoodStat( + 4, + 0.3F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.digSpeed.id, + 900, + 1, + 90), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 1L))); + ItemList.Bottle_Alcopops.set( + addItem( + Bottle_Alcopops.ID, + "Alcopops", + "Don't let your Children drink this junk!", + new GTFoodStat( + 2, + 0.2F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.digSpeed.id, + 900, + 1, + 90, + Potion.poison.id, + 300, + 2, + 20), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.VINCULUM, 1L))); + ItemList.Bottle_Cave_Johnsons_Grenade_Juice.set( + addItem( + Bottle_Cave_Johnsons_Grenade_Juice.ID, + "Cave Johnson's Grenade Juice", + "When life gives you Lemons, make Life take them Lemons back!", + new GTFoodStat( + 0, + 0.0F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false).setExplosive(), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.MORTUUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 1L))); + ItemList.Bottle_Milk.set( + addItem( + Bottle_Milk.ID, + "Milk", + "Got Milk?", + OrePrefixes.bottle.get(Materials.Milk), + new GTFoodStat( + 0, + 0.0F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false).setMilk(), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 1L))); + ItemList.Bottle_Holy_Water.set( + addItem( + Bottle_Holy_Water.ID, + "Holy Water", + "May the holy Planks be with you", + OrePrefixes.bottle.get(Materials.HolyWater), + new GTFoodStat( + 0, + 0.0F, + EnumAction.drink, + ItemList.Bottle_Empty.get(1L), + GregTechAPI.sDrinksAlwaysDrinkable, + false, + false, + Potion.poison.id, + 100, + 1, + 100).setMilk(), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.AURAM, 1L))); + + ItemList.Food_Potato_On_Stick.set( + addItem( + Food_Potato_On_Stick.ID, + "Potato on a Stick", + "Totally looks like a Crab Claw", + new GTFoodStat(1, 0.3F, EnumAction.eat, new ItemStack(Items.stick, 1), false, true, false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Food_Potato_On_Stick_Roasted.set( + addItem( + Food_Potato_On_Stick_Roasted.ID, + "Roasted Potato on a Stick", + "Still looks like a Crab Claw", + new GTFoodStat(6, 0.6F, EnumAction.eat, new ItemStack(Items.stick, 1), false, true, false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Raw_Fries.set( + addItem( + Food_Raw_Fries.ID, + "Potato Strips", + "It's Potato in Stripe Form", + new GTFoodStat(1, 0.3F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L))); + ItemList.Food_Fries.set( + addItem( + Food_Fries.ID, + "Fries", + "Not to confuse with Fry the Delivery Boy", + new GTFoodStat(7, 0.5F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Packaged_Fries.set( + addItem( + Food_Packaged_Fries.ID, + "Fries", + "Ketchup not included", + new GTFoodStat( + 7, + 0.5F, + EnumAction.eat, + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 1L), + false, + true, + false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Raw_PotatoChips.set( + addItem( + Food_Raw_PotatoChips.ID, + "Potato Chips (Raw)", + "Just like a Potato", + new GTFoodStat(1, 0.3F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L))); + ItemList.Food_PotatoChips.set( + addItem( + Food_PotatoChips.ID, + "Potato Chips", + "Crunchy", + new GTFoodStat(7, 0.5F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_ChiliChips.set( + addItem( + Food_ChiliChips.ID, + "Chili Chips", + "Spicy", + new GTFoodStat(7, 0.6F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Packaged_PotatoChips.set( + addItem( + Food_Packaged_PotatoChips.ID, + "Bag of Potato Chips", + "Full of delicious Air", + new GTFoodStat( + 7, + 0.5F, + EnumAction.eat, + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1L), + false, + true, + false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Packaged_ChiliChips.set( + addItem( + Food_Packaged_ChiliChips.ID, + "Bag of Chili Chips", + "Stop making noises Baj!", + new GTFoodStat( + 7, + 0.6F, + EnumAction.eat, + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1L), + false, + true, + false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Chum.set( + addItem( + Food_Chum.ID, + "Chum", + "Chum is Fum!", + new GTFoodStat( + 5, + 0.2F, + EnumAction.eat, + null, + true, + false, + true, + Potion.hunger.id, + 1000, + 4, + 100, + Potion.confusion.id, + 300, + 1, + 80), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Chum_On_Stick.set( + addItem( + Food_Chum_On_Stick.ID, + "Chum on a Stick", + "Don't forget to try our Chum-balaya", + new GTFoodStat( + 5, + 0.2F, + EnumAction.eat, + new ItemStack(Items.stick, 1), + true, + false, + true, + Potion.hunger.id, + 1000, + 4, + 100, + Potion.confusion.id, + 300, + 1, + 80), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Dough_Sugar.set( + addItem( + Food_Dough_Sugar.ID, + "Sugary Dough", + "Don't eat the Dough before it is baken", + new GTFoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Food_Dough_Chocolate.set( + addItem( + Food_Dough_Chocolate.ID, + "Chocolate Dough", + "I said don't eat the Dough!", + new GTFoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Food_Raw_Cookie.set( + addItem( + Food_Raw_Cookie.ID, + "Cookie shaped Dough", + "For baking Cookies", + new GTFoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + + ItemList.Food_Sliced_Buns.set( + addItem( + Food_Sliced_Buns.ID, + "Buns", + "Pre Sliced", + new GTFoodStat(3, 0.5F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Burger_Veggie.set( + addItem( + Food_Burger_Veggie.ID, + "Veggieburger", + "No matter how you call this, this is NOT a Burger!", + new GTFoodStat(3, 0.5F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Burger_Cheese.set( + addItem( + Food_Burger_Cheese.ID, + "Cheeseburger", + "Cheesy!", + new GTFoodStat(3, 0.5F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new ItemData(Materials.Cheese, 907200L))); + ItemList.Food_Burger_Meat.set( + addItem( + Food_Burger_Meat.ID, + "Hamburger", + "The Mc Burger Queen Burger", + new GTFoodStat(3, 0.5F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.CORPUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Burger_Chum.set( + addItem( + Food_Burger_Chum.ID, + "Chumburger", + "Fum is Chum!", + new GTFoodStat( + 5, + 0.2F, + EnumAction.eat, + null, + true, + false, + true, + Potion.hunger.id, + 1000, + 4, + 100, + Potion.confusion.id, + 300, + 1, + 80), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + + ItemList.Food_Sliced_Breads.set( + addItem( + Food_Sliced_Breads.ID, + "Breads", + "Pre Sliced", + new GTFoodStat(5, 0.6F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Sandwich_Veggie.set( + addItem( + Food_Sandwich_Veggie.ID, + "Veggie Sandwich", + "Meatless", + new GTFoodStat(7, 0.6F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Sandwich_Cheese.set( + addItem( + Food_Sandwich_Cheese.ID, + "Cheese Sandwich", + "Say Cheese!", + new GTFoodStat(7, 0.6F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Sandwich_Bacon.set( + addItem( + Food_Sandwich_Bacon.ID, + "Bacon Sandwich", + "The best Sandwich ever!", + new GTFoodStat(10, 0.8F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.CORPUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Sandwich_Steak.set( + addItem( + Food_Sandwich_Steak.ID, + "Steak Sandwich", + "Not a 'Steam Sandwich'", + new GTFoodStat(10, 0.8F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.CORPUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Sliced_Baguettes.set( + addItem( + Food_Sliced_Baguettes.ID, + "Baguettes", + "Pre Sliced", + new GTFoodStat(8, 0.5F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Large_Sandwich_Veggie.set( + addItem( + Food_Large_Sandwich_Veggie.ID, + "Large Veggie Sandwich", + "Just not worth it", + new GTFoodStat(15, 0.8F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 3L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Large_Sandwich_Cheese.set( + addItem( + Food_Large_Sandwich_Cheese.ID, + "Large Cheese Sandwich", + "I need another cheesy tooltip for this", + new GTFoodStat(15, 0.8F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 3L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Large_Sandwich_Bacon.set( + addItem( + Food_Large_Sandwich_Bacon.ID, + "Large Bacon Sandwich", + "For Men! (and manly Women)", + new GTFoodStat(20, 1.0F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.CORPUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Large_Sandwich_Steak.set( + addItem( + Food_Large_Sandwich_Steak.ID, + "Large Steak Sandwich", + "Yes, I once accidentially called it 'Steam Sandwich'", + new GTFoodStat(20, 1.0F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.CORPUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Raw_Pizza_Veggie.set( + addItem( + Food_Raw_Pizza_Veggie.ID, + "Raw Veggie Pizza", + "Into the Oven with it!", + new GTFoodStat(1, 0.2F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Raw_Pizza_Cheese.set( + addItem( + Food_Raw_Pizza_Cheese.ID, + "Raw Cheese Pizza", + "Into the Oven with it!", + new GTFoodStat(2, 0.2F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Raw_Pizza_Meat.set( + addItem( + Food_Raw_Pizza_Meat.ID, + "Raw Mince Meat Pizza", + "Into the Oven with it!", + new GTFoodStat(2, 0.2F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.CORPUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + + ItemList.Food_Baked_Pizza_Veggie.set( + addItem( + Food_Baked_Pizza_Veggie.ID, + "Veggie Pizza", + "The next they want is Gluten Free Pizzas...", + new GTFoodStat(3, 0.3F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Baked_Pizza_Cheese.set( + addItem( + Food_Baked_Pizza_Cheese.ID, + "Cheese Pizza", + "Pizza Magarita", + new GTFoodStat(4, 0.4F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Baked_Pizza_Meat.set( + addItem( + Food_Baked_Pizza_Meat.ID, + "Mince Meat Pizza", + "Emo Pizza, it cuts itself!", + new GTFoodStat(5, 0.5F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.CORPUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + + ItemList.Dye_Indigo.set( + addItem( + Dye_Indigo.ID, + "Indigo Dye", + "Blue Dye", + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 1L), + Dyes.dyeBlue)); + + int[] Dye_Colors = new int[] { Dye_Color_00.ID, Dye_Color_01.ID, Dye_Color_02.ID, Dye_Color_03.ID, + Dye_Color_04.ID, Dye_Color_05.ID, Dye_Color_06.ID, Dye_Color_07.ID, Dye_Color_08.ID, Dye_Color_09.ID, + Dye_Color_10.ID, Dye_Color_11.ID, Dye_Color_12.ID, Dye_Color_13.ID, Dye_Color_14.ID, Dye_Color_15.ID }; + for (int i = 0; i < 16; i = i + 1) { + ItemList.DYE_ONLY_ITEMS[i].set( + addItem( + Dye_Colors[i], + Dyes.get(i).mName + " Dye", + "", + Dyes.get(i) + .name(), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 1L))); + } + + ItemList.Plank_Oak + .set(addItem(Plank_Oak.ID, "Oak Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Spruce.set( + addItem(Plank_Spruce.ID, "Spruce Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Birch + .set(addItem(Plank_Birch.ID, "Birch Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Jungle.set( + addItem(Plank_Jungle.ID, "Jungle Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Acacia.set( + addItem(Plank_Acacia.ID, "Acacia Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_DarkOak.set( + addItem(Plank_DarkOak.ID, "Dark Oak Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Larch + .set(addItem(Plank_Larch.ID, "Larch Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Teak + .set(addItem(Plank_Teak.ID, "Teak Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Acacia_Green.set( + addItem( + Plank_Acacia_Green.ID, + "Green Acacia Plank", + aTextCover, + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Lime + .set(addItem(Plank_Lime.ID, "Lime Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Chestnut.set( + addItem( + Plank_Chestnut.ID, + "Chestnut Plank", + aTextCover, + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Wenge + .set(addItem(Plank_Wenge.ID, "Wenge Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Baobab.set( + addItem(Plank_Baobab.ID, "Baobab Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Sequoia.set( + addItem(Plank_Sequoia.ID, "Sequoia Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Kapok + .set(addItem(Plank_Kapok.ID, "Kapok Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Ebony + .set(addItem(Plank_Ebony.ID, "Ebony Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Mahagony.set( + addItem( + Plank_Mahagony.ID, + "Mahagony Plank", + aTextCover, + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Balsa + .set(addItem(Plank_Balsa.ID, "Balsa Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Willow.set( + addItem(Plank_Willow.ID, "Willow Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Walnut.set( + addItem(Plank_Walnut.ID, "Walnut Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Greenheart.set( + addItem( + Plank_Greenheart.ID, + "Greenheart Plank", + aTextCover, + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Cherry.set( + addItem(Plank_Cherry.ID, "Cherry Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Mahoe + .set(addItem(Plank_Mahoe.ID, "Mahoe Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Poplar.set( + addItem(Plank_Poplar.ID, "Poplar Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Palm + .set(addItem(Plank_Palm.ID, "Palm Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Papaya.set( + addItem(Plank_Papaya.ID, "Papaya Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Pine + .set(addItem(Plank_Pine.ID, "Pine Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Plum + .set(addItem(Plank_Plum.ID, "Plum Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Maple + .set(addItem(Plank_Maple.ID, "Maple Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.Plank_Citrus.set( + addItem(Plank_Citrus.ID, "Citrus Plank", aTextCover, new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + ItemList.SFMixture.set(addItem(SFMixture.ID, "Super Fuel Binder", "Raw Material")); + ItemList.MSFMixture.set(addItem(MSFMixture.ID, "Magic Super Fuel Binder", "Raw Material")); + + ItemList.Crop_Drop_Plumbilia.set( + addItem( + Crop_Drop_Plumbilia.ID, + "Plumbilia Leaf", + "Source of Lead", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 1L))); + ItemList.Crop_Drop_Argentia.set( + addItem( + Crop_Drop_Argentia.ID, + "Argentia Leaf", + "Source of Silver", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1L))); + ItemList.Crop_Drop_Indigo.set( + addItem( + Crop_Drop_Indigo.ID, + "Indigo Blossom", + "Used for making Blue Dye", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 1L))); + ItemList.Crop_Drop_Ferru.set( + addItem( + Crop_Drop_Ferru.ID, + "Ferru Leaf", + "Source of Iron", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L))); + ItemList.Crop_Drop_Aurelia.set( + addItem( + Crop_Drop_Aurelia.ID, + "Aurelia Leaf", + "Source of Gold", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1L))); + ItemList.Crop_Drop_TeaLeaf.set( + addItem( + Crop_Drop_TeaLeaf.ID, + "Tea Leaf", + "Source of Tea", + "cropTea", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 1L))); + + ItemList.Crop_Drop_OilBerry.set( + addItem( + Crop_Drop_OilBerry.ID, + "Oil Berry", + "Oil in Berry form", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L))); + ItemList.Crop_Drop_BobsYerUncleRanks.set( + addItem( + Crop_Drop_BobsYerUncleRanks.ID, + "Bobs-Yer-Uncle-Berry", + "Source of Emeralds", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1L))); + ItemList.Crop_Drop_UUMBerry.set( + addItem( + Crop_Drop_UUMBerry.ID, + "UUM Berry", + "UUM in Berry form", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L))); + ItemList.Crop_Drop_UUABerry.set( + addItem( + Crop_Drop_UUABerry.ID, + "UUA Berry", + "UUA in Berry form", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L))); + + ItemList.Crop_Drop_MilkWart.set( + addItem( + Crop_Drop_MilkWart.ID, + "Milk Wart", + "Source of Milk", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 1L))); + + ItemList.Crop_Drop_Coppon.set( + addItem( + Crop_Drop_Coppon.ID, + "Coppon Fiber", + "ORANGE WOOOOOOOL!!!", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 1L))); + + ItemList.Crop_Drop_Tine.set( + addItem( + Crop_Drop_Tine.ID, + "Tine Twig", + "Source of Tin", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + + ItemList.Crop_Drop_Mica.set( + addItem( + Crop_Drop_Mica.ID, + "Micadia Twig", + "Source of Mica", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 1L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 1L))); + + ItemList.Crop_Drop_Bauxite.set(addItem(Crop_Drop_Bauxite.ID, "Bauxia Leaf", "Source of Aluminium")); + ItemList.Crop_Drop_Ilmenite.set(addItem(Crop_Drop_Ilmenite.ID, "Titania Leaf", "Source of Titanium")); + ItemList.Crop_Drop_Pitchblende.set(addItem(Crop_Drop_Pitchblende.ID, "Reactoria Leaf", "Source of Uranium")); + ItemList.Crop_Drop_Uraninite.set(addItem(Crop_Drop_Uraninite.ID, "Uranium Leaf", "Source of Uranite")); + ItemList.Crop_Drop_Thorium.set(addItem(Crop_Drop_Thorium.ID, "Thunder Leaf", "Source of Thorium")); + ItemList.Crop_Drop_Nickel.set(addItem(Crop_Drop_Nickel.ID, "Nickelback Leaf", "Source of Nickel")); + ItemList.Crop_Drop_Zinc.set(addItem(Crop_Drop_Zinc.ID, "Galvania Leaf", "Source of Zinc")); + ItemList.Crop_Drop_Manganese.set(addItem(Crop_Drop_Manganese.ID, "Pyrolusium Leaf", "Source of Manganese")); + ItemList.Crop_Drop_Scheelite.set(addItem(Crop_Drop_Scheelite.ID, "Scheelinium Leaf", "Source of Tungsten")); + ItemList.Crop_Drop_Platinum.set(addItem(Crop_Drop_Platinum.ID, "Platina Leaf", "Source of Platinum")); + ItemList.Crop_Drop_Iridium.set(addItem(Crop_Drop_Iridium.ID, "Quantaria Leaf", "Source of Iridium")); + ItemList.Crop_Drop_Osmium.set(addItem(Crop_Drop_Osmium.ID, "Quantaria Leaf", "Source of Osmium")); + ItemList.Crop_Drop_Naquadah.set(addItem(Crop_Drop_Naquadah.ID, "Stargatium Leaf", "Source of Naquadah")); + + ItemList.Crop_Drop_Chilly.set( + addItem( + Crop_Drop_Chilly.ID, + "Chilly Pepper", + "It is red and hot", + "cropChilipepper", + new GTFoodStat(1, 0.3F, EnumAction.eat, null, false, true, false, Potion.confusion.id, 200, 1, 40), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Crop_Drop_Lemon.set( + addItem( + Crop_Drop_Lemon.ID, + "Lemon", + "Don't make Lemonade", + "cropLemon", + new GTFoodStat(1, 0.3F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Crop_Drop_Tomato.set( + addItem( + Crop_Drop_Tomato.ID, + "Tomato", + "Solid Ketchup", + "cropTomato", + new GTFoodStat(1, 0.2F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Crop_Drop_MTomato.set( + addItem( + Crop_Drop_MTomato.ID, + "Max Tomato", + "Full Health in one Tomato", + "cropTomato", + new GTFoodStat( + 9, + 1.0F, + EnumAction.eat, + null, + false, + true, + false, + Potion.regeneration.id, + 100, + 100, + 100), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 3L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Crop_Drop_Grapes.set( + addItem( + Crop_Drop_Grapes.ID, + "Grapes", + "Source of Wine", + "cropGrape", + new GTFoodStat(2, 0.3F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Crop_Drop_Onion.set( + addItem( + Crop_Drop_Onion.ID, + "Onion", + "Taking over the whole Taste", + "cropOnion", + new GTFoodStat(2, 0.2F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Crop_Drop_Cucumber.set( + addItem( + Crop_Drop_Cucumber.ID, + "Cucumber", + "Not a Sea Cucumber!", + "cropCucumber", + new GTFoodStat(1, 0.2F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Crop_Drop_Rape.set( + addItem( + Crop_Drop_Rape.ID, + "Rape", + "Also known as Canola.", + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 1L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1L))); + + ItemList.Food_Cheese.set( + addItem( + Food_Cheese.ID, + "Cheese", + "Click the Cheese", + "foodCheese", + new GTFoodStat(3, 0.6F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 2L))); + ItemList.Food_Dough.set( + addItem( + Food_Dough.ID, + "Dough", + "For making Breads", + "foodDough", + new GTFoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Food_Flat_Dough.set( + addItem( + Food_Flat_Dough.ID, + "Flattened Dough", + "For making Pizza", + new GTFoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Food_Raw_Bread.set( + addItem( + Food_Raw_Bread.ID, + "Dough", + "In Bread Shape", + new GTFoodStat(1, 0.2F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Food_Raw_Bun.set( + addItem( + Food_Raw_Bun.ID, + "Dough", + "In Bun Shape", + new GTFoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Food_Raw_Baguette.set( + addItem( + Food_Raw_Baguette.ID, + "Dough", + "In Baguette Shape", + new GTFoodStat(1, 0.3F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Food_Baked_Bun.set( + addItem( + Food_Baked_Bun.ID, + "Bun", + "Do not teleport Bread!", + new GTFoodStat(3, 0.5F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Baked_Baguette.set( + addItem( + Food_Baked_Baguette.ID, + "Baguette", + "I teleported nothing BUT Bread!!!", + new GTFoodStat(8, 0.5F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Sliced_Bread.set( + addItem( + Food_Sliced_Bread.ID, + "Sliced Bread", + "Just half a Bread", + new GTFoodStat(2, 0.3F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Sliced_Bun.set( + addItem( + Food_Sliced_Bun.ID, + "Sliced Bun", + "Just half a Bun", + new GTFoodStat(1, 0.3F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Sliced_Baguette.set( + addItem( + Food_Sliced_Baguette.ID, + "Sliced Baguette", + "Just half a Baguette", + new GTFoodStat(4, 0.3F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))); + ItemList.Food_Raw_Cake.set( + addItem( + Food_Raw_Cake.ID, + "Cake Bottom", + "For making Cake", + new GTFoodStat(2, 0.2F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Food_Baked_Cake.set( + addItem( + Food_Baked_Cake.ID, + "Baked Cake Bottom", + "I know I promised you an actual Cake, but well...", + new GTFoodStat(3, 0.3F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + ItemList.Food_Sliced_Lemon.set( + addItem( + Food_Sliced_Lemon.ID, + "Lemon Slice", + "Ideal to put on your Drink", + new GTFoodStat(1, 0.075F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L))); + ItemList.Food_Sliced_Tomato.set( + addItem( + Food_Sliced_Tomato.ID, + "Tomato Slice", + "Solid Ketchup", + new GTFoodStat(1, 0.05F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L))); + ItemList.Food_Sliced_Onion.set( + addItem( + Food_Sliced_Onion.ID, + "Onion Slice", + "ONIONS, UNITE!", + new GTFoodStat(1, 0.05F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L))); + ItemList.Food_Sliced_Cucumber.set( + addItem( + Food_Sliced_Cucumber.ID, + "Cucumber Slice", + "QUEWWW-CUMMM-BERRR!!!", + new GTFoodStat(1, 0.05F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 1L))); + + ItemList.Food_Sliced_Cheese.set( + addItem( + Food_Sliced_Cheese.ID, + "Cheese Slice", + "ALIEN ATTACK!!!, throw the CHEEEEESE!!!", + new GTFoodStat(1, 0.1F, EnumAction.eat, null, false, true, false), + new TCAspects.TC_AspectStack(TCAspects.FAMES, 1L))); + + ItemList.Cover_AdvancedRedstoneTransmitterExternal.set( + addItem( + Cover_AdvancedRedstoneTransmitterExternal.ID, + "Advanced Redstone Transmitter (External)", + "Transfers Redstone signals wirelessly/n Can only connect with advanced wireless covers", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L))); + ItemList.Cover_AdvancedRedstoneTransmitterInternal.set( + addItem( + Cover_AdvancedRedstoneTransmitterInternal.ID, + "Advanced Redstone Transmitter (Internal)", + "Transfers Redstone signals wirelessly/n Can only connect with advanced wireless covers", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L))); + ItemList.Cover_AdvancedRedstoneReceiverExternal.set( + addItem( + Cover_AdvancedRedstoneReceiverExternal.ID, + "Advanced Redstone Receiver (External)", + "Transfers Redstone signals wirelessly/n Can only connect with advanced wireless covers", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L))); + ItemList.Cover_AdvancedRedstoneReceiverInternal.set( + addItem( + Cover_AdvancedRedstoneReceiverInternal.ID, + "Advanced Redstone Receiver (Internal)", + "Transfers Redstone signals wirelessly/n Can only connect with advanced wireless covers", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L))); + + ItemList.Cover_WirelessFluidDetector.set( + addItem( + Cover_WirelessFluidDetector.ID, + "Wireless Fluid Detector Cover", + "Transfers Fluid Amount as Redstone wirelessly/n Can only connect with advanced wireless covers", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L))); + ItemList.Cover_WirelessItemDetector.set( + addItem( + Cover_WirelessItemDetector.ID, + "Wireless Item Detector Cover", + "Transfers Item Amount as Redstone wirelessly/n Can only connect with advanced wireless covers", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.TERRA, 1L))); + + ItemList.Cover_WirelessNeedsMaintainance.set( + addItem( + Cover_WirelessNeedsMaintainance.ID, + "Wireless Needs Maintenance Cover", + "Transfers Maintenance Issues as Redstone wirelessly/n Can only connect with advanced wireless covers", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 4L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 3L))); + + ItemList.Cover_WirelessActivityDetector.set( + addItem( + Cover_WirelessActivityDetector.ID, + "Wireless Activity Detector Cover", + "Transfers Activity as Redstone wirelessly/n Can only connect with advanced wireless covers", + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.SENSUS, 2L), + new TCAspects.TC_AspectStack(TCAspects.TERRA, 1L))); + + ItemList.Display_ITS_FREE.set( + addItem( + Display_ITS_FREE.ID, + "ITS FREE", + "(or at least almost free)", + SubTag.INVISIBLE, + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1L))); + + try { + CropCard tCrop; + GTUtility.getField(tCrop = Crops.instance.getCropList()[13], "mDrop") + .set(tCrop, ItemList.Crop_Drop_Ferru.get(1L)); + GTUtility.getField(tCrop = Crops.instance.getCropList()[14], "mDrop") + .set(tCrop, ItemList.Crop_Drop_Aurelia.get(1L)); + } catch (Throwable e) { + if (GTValues.D1) { + e.printStackTrace(GTLog.err); + } + } + + setAllFluidContainerStats(); + setBurnValues(); + registerCovers(); + initCraftingShapedRecipes(); + initCraftingShapelessRecipes(); + initAssemblerRecipes(); + initExtractorRecipes(); + initMaceratorRecipes(); + initCompressorRecipes(); + } + + @Override + public boolean onLeftClickEntity(ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { + super.onLeftClickEntity(aStack, aPlayer, aEntity); + return false; + } + + @Override + public boolean hasProjectile(SubTag aProjectileType, ItemStack aStack) { + int aDamage = aStack.getItemDamage(); + return ((aDamage >= 25000) && (aDamage < 27000)) || (super.hasProjectile(aProjectileType, aStack)); + } + + @Override + public boolean isItemStackUsable(ItemStack aStack) { + int aDamage = aStack.getItemDamage(); + Materials aMaterial = GregTechAPI.sGeneratedMaterials[(aDamage % 1000)]; + if ((aDamage >= 25000) && (aDamage < 27000) && (aMaterial != null) && (aMaterial.mEnchantmentTools != null)) { + Enchantment tEnchant = aMaterial.mEnchantmentTools == Enchantment.fortune ? Enchantment.looting + : aMaterial.mEnchantmentTools; + if (tEnchant.type == EnumEnchantmentType.weapon) { + NBTTagCompound tNBT = GTUtility.ItemNBT.getNBT(aStack); + if (!tNBT.getBoolean("GT.HasBeenUpdated")) { + tNBT.setBoolean("GT.HasBeenUpdated", true); + GTUtility.ItemNBT.setNBT(aStack, tNBT); + GTUtility.ItemNBT.addEnchantment(aStack, tEnchant, aMaterial.mEnchantmentToolsLevel); + } + } + } + return super.isItemStackUsable(aStack); + } + + private void setAllFluidContainerStats() { + setFluidContainerStats(32000 + Food_Raw_Fries.ID, 0L, 16L); + setFluidContainerStats(32000 + Food_Fries.ID, 0L, 16L); + setFluidContainerStats(32000 + Food_Raw_PotatoChips.ID, 0L, 16L); + setFluidContainerStats(32000 + Food_PotatoChips.ID, 0L, 16L); + setFluidContainerStats(32000 + Food_ChiliChips.ID, 0L, 16L); + setFluidContainerStats(32000 + Food_Sandwich_Veggie.ID, 0L, 32L); + setFluidContainerStats(32000 + Food_Sandwich_Cheese.ID, 0L, 32L); + setFluidContainerStats(32000 + Food_Sandwich_Bacon.ID, 0L, 32L); + setFluidContainerStats(32000 + Food_Sandwich_Steak.ID, 0L, 32L); + setFluidContainerStats(32000 + Food_Large_Sandwich_Veggie.ID, 0L, 16L); + setFluidContainerStats(32000 + Food_Large_Sandwich_Cheese.ID, 0L, 16L); + setFluidContainerStats(32000 + Food_Large_Sandwich_Bacon.ID, 0L, 16L); + setFluidContainerStats(32000 + Food_Large_Sandwich_Steak.ID, 0L, 16L); + } + + private void setBurnValues() { + setBurnValue(32000 + Plank_Oak.ID, 75); + setBurnValue(32000 + Plank_Spruce.ID, 75); + setBurnValue(32000 + Plank_Birch.ID, 75); + setBurnValue(32000 + Plank_Jungle.ID, 75); + setBurnValue(32000 + Plank_Acacia.ID, 75); + setBurnValue(32000 + Plank_DarkOak.ID, 75); + setBurnValue(32000 + Plank_Larch.ID, 75); + setBurnValue(32000 + Plank_Teak.ID, 75); + setBurnValue(32000 + Plank_Acacia_Green.ID, 75); + setBurnValue(32000 + Plank_Lime.ID, 75); + setBurnValue(32000 + Plank_Chestnut.ID, 75); + setBurnValue(32000 + Plank_Wenge.ID, 75); + setBurnValue(32000 + Plank_Baobab.ID, 75); + setBurnValue(32000 + Plank_Sequoia.ID, 75); + setBurnValue(32000 + Plank_Kapok.ID, 75); + setBurnValue(32000 + Plank_Ebony.ID, 75); + setBurnValue(32000 + Plank_Mahagony.ID, 75); + setBurnValue(32000 + Plank_Balsa.ID, 75); + setBurnValue(32000 + Plank_Willow.ID, 75); + setBurnValue(32000 + Plank_Walnut.ID, 75); + setBurnValue(32000 + Plank_Greenheart.ID, 75); + setBurnValue(32000 + Plank_Cherry.ID, 75); + setBurnValue(32000 + Plank_Mahoe.ID, 75); + setBurnValue(32000 + Plank_Poplar.ID, 75); + setBurnValue(32000 + Plank_Palm.ID, 75); + setBurnValue(32000 + Plank_Papaya.ID, 75); + setBurnValue(32000 + Plank_Pine.ID, 75); + setBurnValue(32000 + Plank_Plum.ID, 75); + setBurnValue(32000 + Plank_Maple.ID, 75); + setBurnValue(32000 + Plank_Citrus.ID, 75); + setBurnValue(32000 + Crop_Drop_Tine.ID, 100); + setBurnValue(32000 + Crop_Drop_Mica.ID, 240); + } + + public void initCraftingShapedRecipes() { + GTModHandler.addCraftingRecipe( + ItemList.Plank_Oak.get(2L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 0) }); + GTModHandler.addCraftingRecipe( + ItemList.Plank_Spruce.get(2L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Plank_Birch.get(2L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 2) }); + GTModHandler.addCraftingRecipe( + ItemList.Plank_Jungle.get(2L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 3) }); + GTModHandler.addCraftingRecipe( + ItemList.Plank_Acacia.get(2L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 4) }); + GTModHandler.addCraftingRecipe( + ItemList.Plank_DarkOak.get(2L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "s ", " P", 'P', new ItemStack(Blocks.wooden_slab, 1, 5) }); + } + + public void initAssemblerRecipes() { + RA.stdBuilder() + .itemInputs( + ItemList.Cover_RedstoneTransmitterExternal.get(1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(ItemList.Cover_AdvancedRedstoneTransmitterExternal.get(1L)) + .duration(2 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + RA.stdBuilder() + .itemInputs( + ItemList.Cover_RedstoneReceiverExternal.get(1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(ItemList.Cover_AdvancedRedstoneReceiverExternal.get(1L)) + .duration(2 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + RA.stdBuilder() + .itemInputs( + ItemList.Cover_FluidDetector.get(1L), + ItemList.Emitter_EV.get(1L), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(ItemList.Cover_WirelessFluidDetector.get(1L)) + .duration(2 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + RA.stdBuilder() + .itemInputs( + ItemList.Cover_ItemDetector.get(1L), + ItemList.Emitter_EV.get(1L), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(ItemList.Cover_WirelessItemDetector.get(1L)) + .duration(2 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + RA.stdBuilder() + .itemInputs( + ItemList.Cover_NeedsMaintainance.get(1L), + ItemList.Emitter_EV.get(1L), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(ItemList.Cover_WirelessNeedsMaintainance.get(1L)) + .duration(2 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + RA.stdBuilder() + .itemInputs( + ItemList.Cover_ActivityDetector.get(1L), + ItemList.Emitter_EV.get(1L), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(ItemList.Cover_WirelessActivityDetector.get(1L)) + .duration(2 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + } + + public void initCraftingShapelessRecipes() { + GTModHandler.addShapelessCraftingRecipe( + ItemList.Cover_AdvancedRedstoneReceiverExternal.get(1L), + new Object[] { ItemList.Cover_AdvancedRedstoneReceiverInternal.get(1L) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Cover_AdvancedRedstoneReceiverInternal.get(1L), + new Object[] { ItemList.Cover_AdvancedRedstoneReceiverExternal.get(1L) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Cover_AdvancedRedstoneTransmitterExternal.get(1L), + new Object[] { ItemList.Cover_AdvancedRedstoneTransmitterInternal.get(1L) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Cover_AdvancedRedstoneTransmitterInternal.get(1L), + new Object[] { ItemList.Cover_AdvancedRedstoneTransmitterExternal.get(1L) }); + } + + public void initExtractorRecipes() { + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.red_flower, 1, 0)) + .itemOutputs(new ItemStack(Items.dye, 2, 1)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.red_flower, 1, 1)) + .itemOutputs(new ItemStack(Items.dye, 2, 12)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.red_flower, 1, 2)) + .itemOutputs(new ItemStack(Items.dye, 2, 13)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.red_flower, 1, 3)) + .itemOutputs(new ItemStack(Items.dye, 2, 7)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.red_flower, 1, 4)) + .itemOutputs(new ItemStack(Items.dye, 2, 1)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.red_flower, 1, 5)) + .itemOutputs(new ItemStack(Items.dye, 2, 14)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.red_flower, 1, 6)) + .itemOutputs(new ItemStack(Items.dye, 2, 7)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.red_flower, 1, 7)) + .itemOutputs(new ItemStack(Items.dye, 2, 9)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.red_flower, 1, 8)) + .itemOutputs(new ItemStack(Items.dye, 2, 7)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.yellow_flower, 1, 0)) + .itemOutputs(new ItemStack(Items.dye, 2, 11)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.double_plant, 1, 0)) + .itemOutputs(new ItemStack(Items.dye, 3, 11)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.double_plant, 1, 1)) + .itemOutputs(new ItemStack(Items.dye, 3, 13)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.double_plant, 1, 4)) + .itemOutputs(new ItemStack(Items.dye, 3, 1)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.double_plant, 1, 5)) + .itemOutputs(new ItemStack(Items.dye, 3, 9)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Plumbilia.get(1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lead, 1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Argentia.get(1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Silver, 1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Indigo.get(1L)) + .itemOutputs(ItemList.Dye_Indigo.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_MilkWart.get(1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Milk, 1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Coppon.get(1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Copper, 1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Tine.get(1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tin, 1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + + } + + public void initCompressorRecipes() { + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Coppon.get(4L)) + .itemOutputs(new ItemStack(Blocks.wool, 1, 1)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Plumbilia.get(4L)) + .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Argentia.get(4L)) + .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Indigo.get(4L)) + .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Ferru.get(4L)) + .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Aurelia.get(4L)) + .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_OilBerry.get(4L)) + .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_BobsYerUncleRanks.get(4L)) + .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Tine.get(4L)) + .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Rape.get(4L)) + .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.red_flower, 8, 32767)) + .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.yellow_flower, 8, 32767)) + .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + } + + public void initMaceratorRecipes() { + RA.stdBuilder() + .itemInputs(ItemList.Food_Sliced_Cheese.get(1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Cheese, 1L)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Dye_Cocoa.get(1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Crop_Drop_Tine.get(1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 2L)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.pumpkin, 1, 0)) + .itemOutputs(new ItemStack(Items.pumpkin_seeds, 4, 0)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + RA.stdBuilder() + .itemInputs(new ItemStack(Items.melon, 1, 0)) + .itemOutputs(new ItemStack(Items.melon_seeds, 1, 0)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("crop", 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + RA.stdBuilder() + .itemInputs(new ItemStack(Items.stick, 1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 2L)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.wool, 1, WILDCARD)) + .itemOutputs(new ItemStack(Items.string, 2), new ItemStack(Items.string, 1)) + .outputChances(10000, 5000) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.Tesseract.get(1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.TranscendentMetal, 8L)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(maceratorRecipes); + } + + public void registerCovers() { + GregTechAPI.registerCover(ItemList.Plank_Oak.get(1L), TextureFactory.of(Blocks.planks, 0), null); + GregTechAPI.registerCover(ItemList.Plank_Spruce.get(1L), TextureFactory.of(Blocks.planks, 1), null); + GregTechAPI.registerCover(ItemList.Plank_Birch.get(1L), TextureFactory.of(Blocks.planks, 2), null); + GregTechAPI.registerCover(ItemList.Plank_Jungle.get(1L), TextureFactory.of(Blocks.planks, 3), null); + GregTechAPI.registerCover(ItemList.Plank_Acacia.get(1L), TextureFactory.of(Blocks.planks, 4), null); + GregTechAPI.registerCover(ItemList.Plank_DarkOak.get(1L), TextureFactory.of(Blocks.planks, 5), null); + GregTechAPI.registerCover( + ItemList.Plank_Larch.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 0, new ItemStack(Blocks.planks, 1, 0))), + 0), + null); + GregTechAPI.registerCover( + ItemList.Plank_Teak.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 1, new ItemStack(Blocks.planks, 1, 0))), + 1), + null); + GregTechAPI.registerCover( + ItemList.Plank_Acacia_Green.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 2, new ItemStack(Blocks.planks, 1, 0))), + 2), + null); + GregTechAPI.registerCover( + ItemList.Plank_Lime.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 3, new ItemStack(Blocks.planks, 1, 0))), + 3), + null); + GregTechAPI.registerCover( + ItemList.Plank_Chestnut.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 4, new ItemStack(Blocks.planks, 1, 0))), + 4), + null); + GregTechAPI.registerCover( + ItemList.Plank_Wenge.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 5, new ItemStack(Blocks.planks, 1, 0))), + 5), + null); + GregTechAPI.registerCover( + ItemList.Plank_Baobab.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 6, new ItemStack(Blocks.planks, 1, 0))), + 6), + null); + GregTechAPI.registerCover( + ItemList.Plank_Sequoia.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 7, new ItemStack(Blocks.planks, 1, 0))), + 7), + null); + GregTechAPI.registerCover( + ItemList.Plank_Kapok.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 8, new ItemStack(Blocks.planks, 1, 0))), + 8), + null); + GregTechAPI.registerCover( + ItemList.Plank_Ebony.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 9, new ItemStack(Blocks.planks, 1, 0))), + 9), + null); + GregTechAPI.registerCover( + ItemList.Plank_Mahagony.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 10, new ItemStack(Blocks.planks, 1, 0))), + 10), + null); + GregTechAPI.registerCover( + ItemList.Plank_Balsa.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 11, new ItemStack(Blocks.planks, 1, 0))), + 11), + null); + GregTechAPI.registerCover( + ItemList.Plank_Willow.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 12, new ItemStack(Blocks.planks, 1, 0))), + 12), + null); + GregTechAPI.registerCover( + ItemList.Plank_Walnut.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 13, new ItemStack(Blocks.planks, 1, 0))), + 13), + null); + GregTechAPI.registerCover( + ItemList.Plank_Greenheart.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 14, new ItemStack(Blocks.planks, 1, 0))), + 14), + null); + GregTechAPI.registerCover( + ItemList.Plank_Cherry.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 15, new ItemStack(Blocks.planks, 1, 0))), + 15), + null); + GregTechAPI.registerCover( + ItemList.Plank_Mahoe.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 16, new ItemStack(Blocks.planks, 1, 0))), + 0), + null); + GregTechAPI.registerCover( + ItemList.Plank_Poplar.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 17, new ItemStack(Blocks.planks, 1, 0))), + 1), + null); + GregTechAPI.registerCover( + ItemList.Plank_Palm.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 18, new ItemStack(Blocks.planks, 1, 0))), + 2), + null); + GregTechAPI.registerCover( + ItemList.Plank_Papaya.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 19, new ItemStack(Blocks.planks, 1, 0))), + 3), + null); + GregTechAPI.registerCover( + ItemList.Plank_Pine.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 20, new ItemStack(Blocks.planks, 1, 0))), + 4), + null); + GregTechAPI.registerCover( + ItemList.Plank_Plum.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 21, new ItemStack(Blocks.planks, 1, 0))), + 5), + null); + GregTechAPI.registerCover( + ItemList.Plank_Maple.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 22, new ItemStack(Blocks.planks, 1, 0))), + 6), + null); + GregTechAPI.registerCover( + ItemList.Plank_Citrus.get(1L), + TextureFactory.of( + GTUtility.getBlockFromStack( + GTModHandler.getModItem(Forestry.ID, "planks", 1L, 23, new ItemStack(Blocks.planks, 1, 0))), + 7), + null); + + GregTechAPI.registerCover( + ItemList.Cover_AdvancedRedstoneTransmitterExternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_TRANSMITTER)), + new CoverAdvancedRedstoneTransmitterExternal(TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_TRANSMITTER))); + + GregTechAPI.registerCover( + ItemList.Cover_AdvancedRedstoneTransmitterInternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_TRANSMITTER)), + new CoverAdvancedRedstoneTransmitterInternal(TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_TRANSMITTER))); + + GregTechAPI.registerCover( + ItemList.Cover_AdvancedRedstoneReceiverExternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_RECEIVER)), + new CoverAdvancedRedstoneReceiverExternal(TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_RECEIVER))); + + GregTechAPI.registerCover( + ItemList.Cover_AdvancedRedstoneReceiverInternal.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_RECEIVER)), + new CoverAdvancedRedstoneReceiverInternal(TextureFactory.of(OVERLAY_ADVANCED_REDSTONE_RECEIVER))); + + GregTechAPI.registerCover( + ItemList.Cover_WirelessFluidDetector.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_WIRELESS_FLUID_DETECTOR)), + new CoverWirelessFluidDetector(TextureFactory.of(OVERLAY_WIRELESS_FLUID_DETECTOR))); + + GregTechAPI.registerCover( + ItemList.Cover_WirelessItemDetector.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_WIRELESS_ITEM_DETECTOR)), + new CoverWirelessItemDetector(TextureFactory.of(OVERLAY_WIRELESS_ITEM_DETECTOR))); + + GregTechAPI.registerCover( + ItemList.Cover_WirelessActivityDetector.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_WIRELESS_ACTIVITYDETECTOR)), + new CoverWirelessDoesWorkDetector(TextureFactory.of(OVERLAY_WIRELESS_ACTIVITYDETECTOR))); + + GregTechAPI.registerCover( + ItemList.Cover_WirelessNeedsMaintainance.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_WIRELESS_MAINTENANCE_DETECTOR)), + new CoverWirelessMaintenanceDetector(TextureFactory.of(OVERLAY_WIRELESS_MAINTENANCE_DETECTOR))); + } + + @Override + public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) { + return (aDoShowAllItems) || (!aPrefix.name() + .startsWith("toolHead")); + } + + @Override + public final ItemStack getContainerItem(ItemStack aStack) { + int aDamage = aStack.getItemDamage(); + if (aDamage < 32000) { + return null; + } + if (aDamage < 32100) { + return ItemList.ThermosCan_Empty.get(1L); + } + if (aDamage < 32200) { + return ItemList.Bottle_Empty.get(1L); + } + return null; + } +} diff --git a/src/main/java/gregtech/common/items/MetaGeneratedItem03.java b/src/main/java/gregtech/common/items/MetaGeneratedItem03.java new file mode 100644 index 0000000000..f06448d175 --- /dev/null +++ b/src/main/java/gregtech/common/items/MetaGeneratedItem03.java @@ -0,0 +1,1492 @@ +package gregtech.common.items; + +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.addItemTooltip; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_METRICS_TRANSMITTER; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_UEV; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_UHV; +import static gregtech.api.enums.Textures.BlockIcons.SOLARPANEL_UIV; +import static gregtech.client.GTTooltipHandler.Tier.EV; +import static gregtech.client.GTTooltipHandler.Tier.HV; +import static gregtech.client.GTTooltipHandler.Tier.IV; +import static gregtech.client.GTTooltipHandler.Tier.LV; +import static gregtech.client.GTTooltipHandler.Tier.LuV; +import static gregtech.client.GTTooltipHandler.Tier.MAX; +import static gregtech.client.GTTooltipHandler.Tier.MV; +import static gregtech.client.GTTooltipHandler.Tier.UEV; +import static gregtech.client.GTTooltipHandler.Tier.UHV; +import static gregtech.client.GTTooltipHandler.Tier.UIV; +import static gregtech.client.GTTooltipHandler.Tier.ULV; +import static gregtech.client.GTTooltipHandler.Tier.UMV; +import static gregtech.client.GTTooltipHandler.Tier.UV; +import static gregtech.client.GTTooltipHandler.Tier.UXV; +import static gregtech.client.GTTooltipHandler.Tier.ZPM; +import static gregtech.client.GTTooltipHandler.registerTieredTooltip; +import static gregtech.common.items.IDMetaItem03.Activated_Carbon_Filter_Mesh; +import static gregtech.common.items.IDMetaItem03.Circuit_Biomainframe; +import static gregtech.common.items.IDMetaItem03.Circuit_Bioprocessor; +import static gregtech.common.items.IDMetaItem03.Circuit_Biowarecomputer; +import static gregtech.common.items.IDMetaItem03.Circuit_Biowaresupercomputer; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Bio; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Bio_Ultra; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Coated_Basic; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Epoxy_Advanced; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Fiberglass_Advanced; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Multifiberglass_Elite; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Optical; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Phenolic_Good; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Plastic; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Plastic_Advanced; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Wetware; +import static gregtech.common.items.IDMetaItem03.Circuit_Board_Wetware_Extreme; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_BioCPU; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_Biocell; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_CPU; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_CrystalCPU; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_CrystalSoC; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_CrystalSoC2; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_HPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_ILC; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_LPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_NAND; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_NOR; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_NPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_NanoCPU; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_NeuroCPU; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_Optical; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_PIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_PPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_QPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_QuantumCPU; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_Ram; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_Simple_SoC; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_SoC; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_SoC2; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_Stemcell; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_UHPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Chip_ULPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_CosmicAssembly; +import static gregtech.common.items.IDMetaItem03.Circuit_CosmicComputer; +import static gregtech.common.items.IDMetaItem03.Circuit_CosmicMainframe; +import static gregtech.common.items.IDMetaItem03.Circuit_CosmicProcessor; +import static gregtech.common.items.IDMetaItem03.Circuit_Crystalcomputer; +import static gregtech.common.items.IDMetaItem03.Circuit_Crystalmainframe; +import static gregtech.common.items.IDMetaItem03.Circuit_Crystalprocessor; +import static gregtech.common.items.IDMetaItem03.Circuit_Elitenanocomputer; +import static gregtech.common.items.IDMetaItem03.Circuit_ExoticAssembly; +import static gregtech.common.items.IDMetaItem03.Circuit_ExoticComputer; +import static gregtech.common.items.IDMetaItem03.Circuit_ExoticMainframe; +import static gregtech.common.items.IDMetaItem03.Circuit_ExoticProcessor; +import static gregtech.common.items.IDMetaItem03.Circuit_Integrated_Good; +import static gregtech.common.items.IDMetaItem03.Circuit_Masterquantumcomputer; +import static gregtech.common.items.IDMetaItem03.Circuit_Microprocessor; +import static gregtech.common.items.IDMetaItem03.Circuit_Nanocomputer; +import static gregtech.common.items.IDMetaItem03.Circuit_Nanoprocessor; +import static gregtech.common.items.IDMetaItem03.Circuit_Neuroprocessor; +import static gregtech.common.items.IDMetaItem03.Circuit_OpticalAssembly; +import static gregtech.common.items.IDMetaItem03.Circuit_OpticalComputer; +import static gregtech.common.items.IDMetaItem03.Circuit_OpticalMainframe; +import static gregtech.common.items.IDMetaItem03.Circuit_OpticalProcessor; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_CapacitorASMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_CapacitorSMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_CapacitorXSMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_Chip_Bioware; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_Coil; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_DiodeASMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_DiodeSMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_DiodeXSMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_GlassFiber; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_Glass_Tube; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_InductorASMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_InductorSMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_InductorXSMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_PetriDish; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_RawCrystalChip; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_RawCrystalParts; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_Reinforced_Glass_Tube; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_ResistorASMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_ResistorSMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_ResistorXSMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_TransistorASMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_TransistorSMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Parts_TransistorXSMD; +import static gregtech.common.items.IDMetaItem03.Circuit_Processor; +import static gregtech.common.items.IDMetaItem03.Circuit_Quantumcomputer; +import static gregtech.common.items.IDMetaItem03.Circuit_Quantummainframe; +import static gregtech.common.items.IDMetaItem03.Circuit_Quantumprocessor; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Ingot; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Ingot2; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Ingot3; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Ingot4; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Ingot5; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Ingot6; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Wafer; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Wafer2; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Wafer3; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Wafer4; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Wafer5; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Wafer6; +import static gregtech.common.items.IDMetaItem03.Circuit_Silicon_Wafer7; +import static gregtech.common.items.IDMetaItem03.Circuit_TranscendentAssembly; +import static gregtech.common.items.IDMetaItem03.Circuit_TranscendentComputer; +import static gregtech.common.items.IDMetaItem03.Circuit_TranscendentMainframe; +import static gregtech.common.items.IDMetaItem03.Circuit_TranscendentProcessor; +import static gregtech.common.items.IDMetaItem03.Circuit_Ultimatecrystalcomputer; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_Bioware; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_CPU; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_HPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_ILC; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_LPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_NAND; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_NOR; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_NPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_NanoCPU; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_PIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_PPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_QPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_QuantumCPU; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_Ram; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_Simple_SoC; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_SoC; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_SoC2; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_UHPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Wafer_ULPIC; +import static gregtech.common.items.IDMetaItem03.Circuit_Wetwarecomputer; +import static gregtech.common.items.IDMetaItem03.Circuit_Wetwaremainframe; +import static gregtech.common.items.IDMetaItem03.Circuit_Wetwaresupercomputer; +import static gregtech.common.items.IDMetaItem03.Cover_Metrics_Transmitter; +import static gregtech.common.items.IDMetaItem03.Cover_SolarPanel_UEV; +import static gregtech.common.items.IDMetaItem03.Cover_SolarPanel_UHV; +import static gregtech.common.items.IDMetaItem03.Cover_SolarPanel_UIV; +import static gregtech.common.items.IDMetaItem03.EV_Coil; +import static gregtech.common.items.IDMetaItem03.GalliumArsenideCrystal; +import static gregtech.common.items.IDMetaItem03.GalliumArsenideCrystalSmallPart; +import static gregtech.common.items.IDMetaItem03.HV_Coil; +import static gregtech.common.items.IDMetaItem03.IV_Coil; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_AUTOMATION; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_Acceleration_1; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_Acceleration_2; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_Acceleration_3; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_Acceleration_4; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_Acceleration_5; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_Acceleration_6; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_Acceleration_7; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_Acceleration_8; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_Acceleration_8_Upgraded; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_COOLER; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_DESERT; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_DRYER; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_FLOWERING; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_Frame; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_HEATER; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_HELL; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_HUMIDIFIER; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_JUNGLE; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_LIFESPAN; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_LIGHT; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_OCEAN; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_PLAINS; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_POLLEN; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_PRODUCTION; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_SEAL; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_SIEVE; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_SKY; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_STABILIZER; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_TERRITORY; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_UNLIGHT; +import static gregtech.common.items.IDMetaItem03.IndustrialApiary_Upgrade_WINTER; +import static gregtech.common.items.IDMetaItem03.KevlarFiber; +import static gregtech.common.items.IDMetaItem03.LV_Coil; +import static gregtech.common.items.IDMetaItem03.LuV_Coil; +import static gregtech.common.items.IDMetaItem03.MV_Coil; +import static gregtech.common.items.IDMetaItem03.NandChip; +import static gregtech.common.items.IDMetaItem03.NuclearStar; +import static gregtech.common.items.IDMetaItem03.Optical_Cpu_Containment_Housing; +import static gregtech.common.items.IDMetaItem03.Optically_Compatible_Memory; +import static gregtech.common.items.IDMetaItem03.Optically_Perfected_CPU; +import static gregtech.common.items.IDMetaItem03.Phononic_Seed_Crystal; +import static gregtech.common.items.IDMetaItem03.Quark_Catalyst_Housing; +import static gregtech.common.items.IDMetaItem03.Quark_Creation_Catalyst_Bottom; +import static gregtech.common.items.IDMetaItem03.Quark_Creation_Catalyst_Charm; +import static gregtech.common.items.IDMetaItem03.Quark_Creation_Catalyst_Down; +import static gregtech.common.items.IDMetaItem03.Quark_Creation_Catalyst_Strange; +import static gregtech.common.items.IDMetaItem03.Quark_Creation_Catalyst_Top; +import static gregtech.common.items.IDMetaItem03.Quark_Creation_Catalyst_Unaligned; +import static gregtech.common.items.IDMetaItem03.Quark_Creation_Catalyst_Up; +import static gregtech.common.items.IDMetaItem03.Relativistic_Heat_Capacitor; +import static gregtech.common.items.IDMetaItem03.Spinneret; +import static gregtech.common.items.IDMetaItem03.Thermal_Superconductor; +import static gregtech.common.items.IDMetaItem03.Timepiece; +import static gregtech.common.items.IDMetaItem03.Transdimensional_Alignment_Matrix; +import static gregtech.common.items.IDMetaItem03.Tube_Wires; +import static gregtech.common.items.IDMetaItem03.UHV_Coil; +import static gregtech.common.items.IDMetaItem03.ULV_Coil; +import static gregtech.common.items.IDMetaItem03.UV_Coil; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Axe; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Block; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Bolt; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Bottle; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Casing; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Cell; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_File; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Gear; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Hammer; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Hoe; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Ingot; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Pickaxe; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Pipe_Huge; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Pipe_Large; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Pipe_Medium; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Pipe_Small; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Pipe_Tiny; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Plate; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Ring; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Rod; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Rotor; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Saw; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Shovel; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Small_Gear; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Sword; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_ToolHeadDrill; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Turbine_Blade; +import static gregtech.common.items.IDMetaItem03.White_Dwarf_Shape_Extruder_Wire; +import static gregtech.common.items.IDMetaItem03.WovenKevlar; +import static gregtech.common.items.IDMetaItem03.ZPM_Coil; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TCAspects; +import gregtech.api.items.MetaGeneratedItemX32; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.common.covers.CoverMetricsTransmitter; +import gregtech.common.covers.CoverSolarPanel; + +public class MetaGeneratedItem03 extends MetaGeneratedItemX32 { + + public static MetaGeneratedItem03 INSTANCE; + + public MetaGeneratedItem03() { + super( + "metaitem.03", + OrePrefixes.___placeholder___, + OrePrefixes.___placeholder___, + OrePrefixes.___placeholder___, + OrePrefixes.___placeholder___, + OrePrefixes.nanite, + OrePrefixes.rawOre); + INSTANCE = this; + Object[] o = new Object[0]; + + /* + * circuit boards tier 1-7: coated circuit board / wood plate + resin Plastic Circuit Board / Plastic + Copper + * Foil + Sulfuric Acid phenolic circuit board /carton+glue+chemical bath epoxy circuit board /epoxy plate + + * copper foil + sulfuric acid fiberglass circuit board (simple + multilayer) / glass + plastic + electrum foil + * + sulfuric acid wetware lifesupport board / fiberglass CB + teflon + + */ + ItemList.Circuit_Board_Wetware.set( + addItem(Circuit_Board_Wetware.ID, "Wetware Lifesupport Circuit Board", "The Board that keeps life", o)); + ItemList.Circuit_Board_Plastic + .set(addItem(Circuit_Board_Plastic.ID, "Plastic Circuit Board", "A Good Board", o)); + ItemList.Circuit_Board_Bio + .set(addItem(Circuit_Board_Bio.ID, "Bio Circuit Board", "Bio genetic mutated Board", o)); + + /* + * electronic components: vacuum tube (glass tube + red alloy cables) basic electronic circuits normal+smd coils + * diodes normal+smd transistors normal+smd capacitors normal+smd Glass Fibers + */ + ItemList.Circuit_Parts_ResistorSMD.set( + addItem( + Circuit_Parts_ResistorSMD.ID, + "SMD Resistor", + "Electronic Component", + OrePrefixes.componentCircuit.get(Materials.Resistor), + SubTag.NO_UNIFICATION)); + ItemList.Circuit_Parts_Glass_Tube.set(addItem(Circuit_Parts_Glass_Tube.ID, "Glass Tube", "", o)); + ItemList.Circuit_Parts_Coil.set(addItem(Circuit_Parts_Coil.ID, "Small Coil", "Basic Electronic Component", o)); + ItemList.Circuit_Parts_DiodeSMD.set( + addItem( + Circuit_Parts_DiodeSMD.ID, + "SMD Diode", + "Electronic Component", + OrePrefixes.componentCircuit.get(Materials.Diode), + SubTag.NO_UNIFICATION)); + ItemList.Circuit_Parts_TransistorSMD.set( + addItem( + Circuit_Parts_TransistorSMD.ID, + "SMD Transistor", + "Electronic Component", + OrePrefixes.componentCircuit.get(Materials.Transistor), + SubTag.NO_UNIFICATION)); + ItemList.Circuit_Parts_CapacitorSMD.set( + addItem( + Circuit_Parts_CapacitorSMD.ID, + "SMD Capacitor", + "Electronic Component", + OrePrefixes.componentCircuit.get(Materials.Capacitor), + SubTag.NO_UNIFICATION)); + ItemList.Circuit_Parts_GlassFiber + .set(addItem(Circuit_Parts_GlassFiber.ID, "Glass Fiber", Materials.BorosilicateGlass.mChemicalFormula, o)); + ItemList.Circuit_Parts_PetriDish + .set(addItem(Circuit_Parts_PetriDish.ID, "Petri Dish", "For cultivating cells", o)); + ItemList.Circuit_Parts_Reinforced_Glass_Tube + .set(addItem(Circuit_Parts_Reinforced_Glass_Tube.ID, "Reinforced Glass Tube", "", o)); + + ItemList.Circuit_Parts_ResistorASMD + .set(addItem(Circuit_Parts_ResistorASMD.ID, "Advanced SMD Resistor", "Advanced Electronic Component", o)); + ItemList.Circuit_Parts_DiodeASMD + .set(addItem(Circuit_Parts_DiodeASMD.ID, "Advanced SMD Diode", "Advanced Electronic Component", o)); + ItemList.Circuit_Parts_TransistorASMD.set( + addItem(Circuit_Parts_TransistorASMD.ID, "Advanced SMD Transistor", "Advanced Electronic Component", o)); + ItemList.Circuit_Parts_CapacitorASMD + .set(addItem(Circuit_Parts_CapacitorASMD.ID, "Advanced SMD Capacitor", "Advanced Electronic Component", o)); + + ItemList.Circuit_Parts_ResistorXSMD.set( + addItem(Circuit_Parts_ResistorXSMD.ID, "Optical SMD Resistor", "Highly Advanced Electronic Component", o)); + ItemList.Circuit_Parts_DiodeXSMD + .set(addItem(Circuit_Parts_DiodeXSMD.ID, "Optical SMD Diode", "Highly Advanced Electronic Component", o)); + ItemList.Circuit_Parts_TransistorXSMD.set( + addItem( + Circuit_Parts_TransistorXSMD.ID, + "Optical SMD Transistor", + "Highly Advanced Electronic Component", + o)); + ItemList.Circuit_Parts_CapacitorXSMD.set( + addItem( + Circuit_Parts_CapacitorXSMD.ID, + "Optical SMD Capacitor", + "Highly Advanced Electronic Component", + o)); + + ItemList.Circuit_Parts_InductorSMD.set( + addItem( + Circuit_Parts_InductorSMD.ID, + "SMD Inductor", + "Electronic Component", + OrePrefixes.componentCircuit.get(Materials.Inductor), + SubTag.NO_UNIFICATION)); + ItemList.Circuit_Parts_InductorASMD + .set(addItem(Circuit_Parts_InductorASMD.ID, "Advanced SMD Inductor", "Advanced Electronic Component", o)); + ItemList.Circuit_Parts_InductorXSMD.set( + addItem(Circuit_Parts_InductorXSMD.ID, "Optical SMD Inductor", "Highly Advanced Electronic Component", o)); + + /* + * ICs Lenses made from perfect crystals first instead of plates Monocrystalline silicon ingot + * (normal+glowstone+naquadah) EBF, normal silicon no EBF need anymore wafer(normal+glowstone+naquadah) cut mono + * silicon ingot in cutting machine + * Integrated Logic Circuit(8bit DIP) RAM NAND Memory NOR Memory CPU (4 sizes) SoCs(2 sizes, high tier cheap low + * tech component) Power IC/High Power IC/Ultra High power + * nanotube interconnected circuit (H-IC + nanotubes) + * quantum chips + */ + ItemList.Circuit_Silicon_Ingot + .set(addItem(Circuit_Silicon_Ingot.ID, "Monocrystalline Silicon Boule", "Raw Circuit", o)); + ItemList.Circuit_Silicon_Ingot2.set( + addItem(Circuit_Silicon_Ingot2.ID, "Phosphorus doped Monocrystalline Silicon Boule", "Raw Circuit", o)); + ItemList.Circuit_Silicon_Ingot3 + .set(addItem(Circuit_Silicon_Ingot3.ID, "Naquadah doped Monocrystalline Silicon Boule", "Raw Circuit", o)); + ItemList.Circuit_Silicon_Ingot4 + .set(addItem(Circuit_Silicon_Ingot4.ID, "Europium doped Monocrystalline Silicon Boule", "Raw Circuit", o)); + ItemList.Circuit_Silicon_Ingot5 + .set(addItem(Circuit_Silicon_Ingot5.ID, "Americium doped Monocrystalline Silicon Boule", "Raw Circuit", o)); + ItemList.Circuit_Silicon_Ingot6 + .set(addItem(Circuit_Silicon_Ingot6.ID, "Optically Enriched Crystalline Boule", "Raw Circuit", o)); + + ItemList.Circuit_Silicon_Wafer.set(addItem(Circuit_Silicon_Wafer.ID, "Wafer", "Raw Circuit", o)); + ItemList.Circuit_Silicon_Wafer2 + .set(addItem(Circuit_Silicon_Wafer2.ID, "Phosphorus doped Wafer", "Raw Circuit", o)); + ItemList.Circuit_Silicon_Wafer3 + .set(addItem(Circuit_Silicon_Wafer3.ID, "Naquadah doped Wafer", "Raw Circuit", o)); + ItemList.Circuit_Silicon_Wafer4 + .set(addItem(Circuit_Silicon_Wafer4.ID, "Europium doped Wafer", "Raw Circuit", o)); + ItemList.Circuit_Silicon_Wafer5 + .set(addItem(Circuit_Silicon_Wafer5.ID, "Americium doped Wafer", "Raw Circuit", o)); + ItemList.Circuit_Silicon_Wafer6 + .set(addItem(Circuit_Silicon_Wafer6.ID, "Photonically Prepared Wafer", "Raw Circuit", o)); + ItemList.Circuit_Silicon_Wafer7 + .set(addItem(Circuit_Silicon_Wafer7.ID, "Photonically Enhanced Wafer", "Raw Circuit", o)); + + ItemList.Circuit_Wafer_ILC + .set(addItem(Circuit_Wafer_ILC.ID, "Integrated Logic Circuit (Wafer)", "Raw Circuit", o)); + ItemList.Circuit_Chip_ILC + .set(addItem(Circuit_Chip_ILC.ID, "Integrated Logic Circuit", "Integrated Circuit", o)); + + ItemList.Circuit_Wafer_Ram + .set(addItem(Circuit_Wafer_Ram.ID, "Random Access Memory Chip (Wafer)", "Raw Circuit", o)); + ItemList.Circuit_Chip_Ram + .set(addItem(Circuit_Chip_Ram.ID, "Random Access Memory Chip", "Integrated Circuit", o)); + + ItemList.Circuit_Wafer_NAND.set(addItem(Circuit_Wafer_NAND.ID, "NAND Memory Chip (Wafer)", "Raw Circuit", o)); + ItemList.Circuit_Chip_NAND.set(addItem(Circuit_Chip_NAND.ID, "NAND Memory Chip", "Integrated Circuit", o)); + + ItemList.Circuit_Wafer_NOR.set(addItem(Circuit_Wafer_NOR.ID, "NOR Memory Chip (Wafer)", "Raw Circuit", o)); + ItemList.Circuit_Chip_NOR.set(addItem(Circuit_Chip_NOR.ID, "NOR Memory Chip", "Integrated Circuit", o)); + + ItemList.Circuit_Wafer_CPU + .set(addItem(Circuit_Wafer_CPU.ID, "Central Processing Unit (Wafer)", "Raw Circuit", o)); + ItemList.Circuit_Chip_CPU.set(addItem(Circuit_Chip_CPU.ID, "Central Processing Unit", "Integrated Circuit", o)); + + ItemList.Circuit_Wafer_SoC.set(addItem(Circuit_Wafer_SoC.ID, "SoC Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_SoC.set(addItem(Circuit_Chip_SoC.ID, "SoC", "System on a Chip", o)); + + ItemList.Circuit_Wafer_SoC2.set(addItem(Circuit_Wafer_SoC2.ID, "ASoC Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_SoC2.set(addItem(Circuit_Chip_SoC2.ID, "ASoC", "Advanced System on a Chip", o)); + + ItemList.Circuit_Wafer_PIC.set(addItem(Circuit_Wafer_PIC.ID, "PIC Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_PIC.set(addItem(Circuit_Chip_PIC.ID, "Power IC", "Power Circuit", o)); + + ItemList.Circuit_Wafer_HPIC.set(addItem(Circuit_Wafer_HPIC.ID, "HPIC Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_HPIC.set(addItem(Circuit_Chip_HPIC.ID, "High Power IC", "High Power Circuit", o)); + + ItemList.Circuit_Wafer_NanoCPU.set(addItem(Circuit_Wafer_NanoCPU.ID, "NanoCPU Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_NanoCPU + .set(addItem(Circuit_Chip_NanoCPU.ID, "Nanocomponent Central Processing Unit", "Power Circuit", o)); + + ItemList.Circuit_Wafer_QuantumCPU.set(addItem(Circuit_Wafer_QuantumCPU.ID, "QBit Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_QuantumCPU + .set(addItem(Circuit_Chip_QuantumCPU.ID, "QBit Processing Unit", "Quantum CPU", o)); + + ItemList.Circuit_Wafer_UHPIC.set(addItem(Circuit_Wafer_UHPIC.ID, "UHPIC Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_UHPIC + .set(addItem(Circuit_Chip_UHPIC.ID, "Ultra High Power IC", "Ultra High Power Circuit", o)); + + ItemList.Circuit_Wafer_Simple_SoC + .set(addItem(Circuit_Wafer_Simple_SoC.ID, "Simple SoC Wafer", "Raw Primitive Circuit", o)); + ItemList.Circuit_Chip_Simple_SoC + .set(addItem(Circuit_Chip_Simple_SoC.ID, "Simple SoC", "Simple System on a Chip", o)); + + ItemList.Circuit_Wafer_ULPIC.set(addItem(Circuit_Wafer_ULPIC.ID, "ULPIC Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_ULPIC + .set(addItem(Circuit_Chip_ULPIC.ID, "Ultra Low Power IC", "Ultra Low Power Circuit", o)); + + ItemList.Circuit_Wafer_LPIC.set(addItem(Circuit_Wafer_LPIC.ID, "LPIC Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_LPIC.set(addItem(Circuit_Chip_LPIC.ID, "Low Power IC", "Low Power Circuit", o)); + + ItemList.Circuit_Wafer_NPIC.set(addItem(Circuit_Wafer_NPIC.ID, "NPIC Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_NPIC.set(addItem(Circuit_Chip_NPIC.ID, "Nano Power IC", "Nano Power Circuit", o)); + + ItemList.Circuit_Wafer_PPIC.set(addItem(Circuit_Wafer_PPIC.ID, "PPIC Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_PPIC.set(addItem(Circuit_Chip_PPIC.ID, "Piko Power IC", "Piko Power Circuit", o)); + + ItemList.Circuit_Wafer_QPIC.set(addItem(Circuit_Wafer_QPIC.ID, "QPIC Wafer", "Raw Circuit", o)); + ItemList.Circuit_Chip_QPIC.set(addItem(Circuit_Chip_QPIC.ID, "Quantum Power IC", "Quantum Power Circuit", o)); + + ItemList.Circuit_Wafer_Bioware.set(addItem(Circuit_Wafer_Bioware.ID, "Living Bio Wafer", "Raw Circuit", o)); + ItemList.Circuit_Parts_Chip_Bioware + .set(addItem(Circuit_Parts_Chip_Bioware.ID, "Living Bio Chip", "Needed for Circuits", o)); + /* + * Engraved Crystal Chip Engraved Lapotron Chip Crystal CPU SoCrystal stem cells (disassemble eggs) + */ + ItemList.Circuit_Chip_CrystalSoC2.set( + addItem(Circuit_Chip_CrystalSoC2.ID, "Raw Advanced Crystal Chip", "Raw Advanced Crystal Processor", o)); + ItemList.Circuit_Parts_RawCrystalChip + .set(addItem(Circuit_Parts_RawCrystalChip.ID, "Raw Crystal Chip", "Raw Crystal Processor", o)); + ItemList.Circuit_Chip_CrystalCPU + .set(addItem(Circuit_Chip_CrystalCPU.ID, "Crystal Processing Unit", "Crystal CPU", o)); // Crystal + // chip + // elite + // part + ItemList.Circuit_Chip_CrystalSoC + .set(addItem(Circuit_Chip_CrystalSoC.ID, "Crystal SoC", "Crystal System on a Chip", o)); + ItemList.Circuit_Chip_NeuroCPU.set(addItem(Circuit_Chip_NeuroCPU.ID, "Neuro Processing Unit", "Neuro CPU", o)); + ItemList.Circuit_Chip_Stemcell.set(addItem(Circuit_Chip_Stemcell.ID, "Stemcells", "Raw inteligence", o)); + ItemList.Circuit_Parts_RawCrystalParts + .set(addItem(Circuit_Parts_RawCrystalParts.ID, "Raw Crystal Chip Parts", "Raw Crystal Processor Parts", o)); + ItemList.Circuit_Chip_Biocell.set(addItem(Circuit_Chip_Biocell.ID, "Biocells", "Mutated Raw inteligence", o)); + ItemList.Circuit_Chip_BioCPU.set(addItem(Circuit_Chip_BioCPU.ID, "Bio Processing Unit", "Bio CPU", o)); + ItemList.Circuit_Chip_Optical + .set(addItem(Circuit_Chip_Optical.ID, "Raw Exposed Optical Chip", "Raw Optical Chip", o)); + + // Nand Chip + ItemList.NandChip.set( + addItem( + NandChip.ID, + "NAND Chip", + "A very simple Circuit", + OrePrefixes.circuit.get(Materials.ULV), + SubTag.NO_UNIFICATION)); + + // Vacuum Tube Item01 + // Basic Circuit IC2 + // Good Circuit Item01 + + // Integrated Logic Circuit Item01 + ItemList.Circuit_Integrated_Good.set( + addItem( + Circuit_Integrated_Good.ID, + "Good Integrated Circuit", + "Good Circuit", + OrePrefixes.circuit.get(Materials.MV), + SubTag.NO_UNIFICATION)); + + // Good Integrated Circuit Item01 + // Advanced Circuit IC2 + + ItemList.Circuit_Microprocessor.set( + addItem( + Circuit_Microprocessor.ID, + "Microprocessor", + "A Basic Circuit", + OrePrefixes.circuit.get(Materials.LV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Processor.set( + addItem( + Circuit_Processor.ID, + "Integrated Processor", + "A Good Circuit", + OrePrefixes.circuit.get(Materials.MV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Nanoprocessor.set( + addItem( + Circuit_Nanoprocessor.ID, + "Nanoprocessor", + "An Advanced Circuit", + OrePrefixes.circuit.get(Materials.HV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Nanocomputer.set( + addItem( + Circuit_Nanocomputer.ID, + "Nanoprocessor Assembly", + "An Extreme Circuit", + OrePrefixes.circuit.get(Materials.EV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Elitenanocomputer.set( + addItem( + Circuit_Elitenanocomputer.ID, + "Elite Nanocomputer", + "An Elite Circuit", + OrePrefixes.circuit.get(Materials.IV), + SubTag.NO_UNIFICATION)); + + // Quantum circuits + ItemList.Circuit_Quantumprocessor.set( + addItem( + Circuit_Quantumprocessor.ID, + "Quantumprocessor", + "An Extreme Circuit", + OrePrefixes.circuit.get(Materials.EV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Quantumcomputer.set( + addItem( + Circuit_Quantumcomputer.ID, + "Quantumprocessor Assembly", + "An Elite Circuit", + OrePrefixes.circuit.get(Materials.IV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Masterquantumcomputer.set( + addItem( + Circuit_Masterquantumcomputer.ID, + "Master Quantumcomputer", + "A Master Circuit", + OrePrefixes.circuit.get(Materials.LuV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Quantummainframe.set( + addItem( + Circuit_Quantummainframe.ID, + "Quantumprocessor Mainframe", + "An Ultimate Circuit", + OrePrefixes.circuit.get(Materials.ZPM), + SubTag.NO_UNIFICATION)); + + // Crystal circuits + ItemList.Circuit_Crystalprocessor.set( + addItem( + Circuit_Crystalprocessor.ID, + "Crystalprocessor", + "An Elite Circuit", + OrePrefixes.circuit.get(Materials.IV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Crystalcomputer.set( + addItem( + Circuit_Crystalcomputer.ID, + "Crystalprocessor Assembly", + "A Master Circuit", + OrePrefixes.circuit.get(Materials.LuV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Ultimatecrystalcomputer.set( + addItem( + Circuit_Ultimatecrystalcomputer.ID, + "Ultimate Crystalcomputer", + "An Ultimate Circuit", + OrePrefixes.circuit.get(Materials.ZPM), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Crystalmainframe.set( + addItem( + Circuit_Crystalmainframe.ID, + "Crystalprocessor Mainframe", + "A Super Circuit", + OrePrefixes.circuit.get(Materials.UV), + SubTag.NO_UNIFICATION)); + + // ???? Scared to remove. + ItemList.Circuit_Ultimate.set(ItemList.Circuit_Ultimatecrystalcomputer.get(1L)); // maybe should be removed + + // Wetware circuits + ItemList.Circuit_Neuroprocessor.set( + addItem( + Circuit_Neuroprocessor.ID, + "Wetwareprocessor", + "A Master Circuit", + OrePrefixes.circuit.get(Materials.LuV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Wetwarecomputer.set( + addItem( + Circuit_Wetwarecomputer.ID, + "Wetwareprocessor Assembly", + "An Ultimate Circuit", + OrePrefixes.circuit.get(Materials.ZPM), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Wetwaresupercomputer.set( + addItem( + Circuit_Wetwaresupercomputer.ID, + "Wetware Supercomputer", + "A Super Circuit", + OrePrefixes.circuit.get(Materials.UV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Wetwaremainframe.set( + addItem( + Circuit_Wetwaremainframe.ID, + "Wetware Mainframe", + "An Infinite Circuit", + OrePrefixes.circuit.get(Materials.UHV), + SubTag.NO_UNIFICATION)); + + // Bioware circuits. + ItemList.Circuit_Bioprocessor.set( + addItem( + Circuit_Bioprocessor.ID, + "Bioprocessor", + "An Ultimate Circuit", + OrePrefixes.circuit.get(Materials.ZPM), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Biowarecomputer.set( + addItem( + Circuit_Biowarecomputer.ID, + "Biowareprocessor Assembly", + "A Super Circuit", + OrePrefixes.circuit.get(Materials.UV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Biowaresupercomputer.set( + addItem( + Circuit_Biowaresupercomputer.ID, + "Bioware Supercomputer", + "An Infinite Circuit", + OrePrefixes.circuit.get(Materials.UHV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Biomainframe.set( + addItem( + Circuit_Biomainframe.ID, + "Bio Mainframe", + "A Bio Circuit", + OrePrefixes.circuit.get(Materials.UEV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_Board_Coated_Basic + .set(addItem(Circuit_Board_Coated_Basic.ID, "Circuit Board", "A basic Circuit Board", o)); + ItemList.Circuit_Board_Phenolic_Good + .set(addItem(Circuit_Board_Phenolic_Good.ID, "Good Circuit Board", "A good Circuit Board", o)); + ItemList.Circuit_Board_Epoxy_Advanced + .set(addItem(Circuit_Board_Epoxy_Advanced.ID, "Advanced Circuit Board", "A advanced Circuit Board", o)); + ItemList.Circuit_Board_Fiberglass_Advanced.set( + addItem( + Circuit_Board_Fiberglass_Advanced.ID, + "More Advanced Circuit Board", + "A more advanced Circuit Board", + o)); + ItemList.Circuit_Board_Multifiberglass_Elite + .set(addItem(Circuit_Board_Multifiberglass_Elite.ID, "Elite Circuit Board", "A elite Circuit Board", o)); + ItemList.Circuit_Board_Wetware_Extreme.set( + addItem( + Circuit_Board_Wetware_Extreme.ID, + "Extreme Wetware Lifesupport Circuit Board", + "The Board that keeps life", + o)); + ItemList.Circuit_Board_Plastic_Advanced + .set(addItem(Circuit_Board_Plastic_Advanced.ID, "Plastic Circuit Board", "A good Board", o)); + ItemList.Circuit_Board_Bio_Ultra.set( + addItem(Circuit_Board_Bio_Ultra.ID, "Ultra Bio Mutated Circuit Board", "Bio genetic mutated Board", o)); + ItemList.Circuit_Board_Optical + .set(addItem(Circuit_Board_Optical.ID, "Optical Circuit Board", "Optically Infused Board", o)); + + // Optical circuits + ItemList.Circuit_OpticalProcessor.set( + addItem( + Circuit_OpticalProcessor.ID, + "Optical Processor", + "An Optical Circuit", + OrePrefixes.circuit.get(Materials.UV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_OpticalAssembly.set( + addItem( + Circuit_OpticalAssembly.ID, + "Optical Assembly", + "An Optical Circuit", + OrePrefixes.circuit.get(Materials.UHV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_OpticalComputer.set( + addItem( + Circuit_OpticalComputer.ID, + "Optical Computer", + "An Optical Circuit", + OrePrefixes.circuit.get(Materials.UEV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_OpticalMainframe.set( + addItem( + Circuit_OpticalMainframe.ID, + "Optical Mainframe", + "An Optical Circuit", + OrePrefixes.circuit.get(Materials.UIV), + SubTag.NO_UNIFICATION)); + + // Exotic circuits + ItemList.Circuit_ExoticProcessor.set( + addItem( + Circuit_ExoticProcessor.ID, + "Exotic Processor", + "An Exotic Circuit", + OrePrefixes.circuit.get(Materials.UHV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_ExoticAssembly.set( + addItem( + Circuit_ExoticAssembly.ID, + "Exotic Assembly", + "An Exotic Circuit", + OrePrefixes.circuit.get(Materials.UEV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_ExoticComputer.set( + addItem( + Circuit_ExoticComputer.ID, + "Exotic Computer", + "An Exotic Circuit", + OrePrefixes.circuit.get(Materials.UIV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_ExoticMainframe.set( + addItem( + Circuit_ExoticMainframe.ID, + "Exotic Mainframe", + "An Exotic Circuit", + OrePrefixes.circuit.get(Materials.UMV), + SubTag.NO_UNIFICATION)); + + // Cosmic circuits + ItemList.Circuit_CosmicProcessor.set( + addItem( + Circuit_CosmicProcessor.ID, + "Cosmic Processor", + "A Cosmic Circuit", + OrePrefixes.circuit.get(Materials.UEV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_CosmicAssembly.set( + addItem( + Circuit_CosmicAssembly.ID, + "Cosmic Assembly", + "A Cosmic Circuit", + OrePrefixes.circuit.get(Materials.UIV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_CosmicComputer.set( + addItem( + Circuit_CosmicComputer.ID, + "Cosmic Computer", + "A Cosmic Circuit", + OrePrefixes.circuit.get(Materials.UMV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_CosmicMainframe.set( + addItem( + Circuit_CosmicMainframe.ID, + "Cosmic Mainframe", + "A Cosmic Circuit", + OrePrefixes.circuit.get(Materials.UXV), + SubTag.NO_UNIFICATION)); + + // Transcendent circuits + ItemList.Circuit_TranscendentProcessor.set( + addItem( + Circuit_TranscendentProcessor.ID, + "Temporally Transcendent Processor", + "A circuit operating outside of known spacetime", + OrePrefixes.circuit.get(Materials.UIV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_TranscendentAssembly.set( + addItem( + Circuit_TranscendentAssembly.ID, + "Temporally Transcendent Assembly", + "A circuit operating outside of known spacetime", + OrePrefixes.circuit.get(Materials.UMV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_TranscendentComputer.set( + addItem( + Circuit_TranscendentComputer.ID, + "Temporally Transcendent Computer", + "A circuit operating outside of known spacetime", + OrePrefixes.circuit.get(Materials.UXV), + SubTag.NO_UNIFICATION)); + + ItemList.Circuit_TranscendentMainframe.set( + addItem( + Circuit_TranscendentMainframe.ID, + "Temporally Transcendent Mainframe", + "A circuit operating outside of known spacetime", + OrePrefixes.circuit.get(Materials.MAX), + SubTag.NO_UNIFICATION)); + + ItemList.Tube_Wires.set(addItem(Tube_Wires.ID, "Tube Wires", "For the Vacuum Tubes", o)); + + ItemList.Cover_SolarPanel_UHV.set( + addItem( + Cover_SolarPanel_UHV.ID, + "Solar Panel (UHV)", + "Ultimate High Voltage Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 128L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 128L))); + ItemList.Cover_SolarPanel_UEV.set( + addItem( + Cover_SolarPanel_UEV.ID, + "Solar Panel (UEV)", + "Ultimate Extreme Voltage Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 256L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 256L))); + ItemList.Cover_SolarPanel_UIV.set( + addItem( + Cover_SolarPanel_UIV.ID, + "Solar Panel (UIV)", + "Ultimate Insane Voltage Solar Panel (Needs cleaning with right click)", + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 512L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 512L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 512L))); + + ItemList.ULV_Coil.set(addItem(ULV_Coil.ID, "Ultra Low Voltage Coil", "Primitive Coil", o)); + ItemList.LV_Coil.set(addItem(LV_Coil.ID, "Low Voltage Coil", "Basic Coil", o)); + ItemList.MV_Coil.set(addItem(MV_Coil.ID, "Medium Voltage Coil", "Good Coil", o)); + ItemList.HV_Coil.set(addItem(HV_Coil.ID, "High Voltage Coil", "Advanced Coil", o)); + ItemList.EV_Coil.set(addItem(EV_Coil.ID, "Extreme Voltage Coil", "Extreme Coil", o)); + ItemList.IV_Coil.set(addItem(IV_Coil.ID, "Insane Voltage Coil", "Elite Coil", o)); + ItemList.LuV_Coil.set(addItem(LuV_Coil.ID, "Ludicrous Voltage Coil", "Master Coil", o)); + ItemList.ZPM_Coil.set(addItem(ZPM_Coil.ID, "ZPM Voltage Coil", "Ultimate Coil", o)); + ItemList.UV_Coil.set(addItem(UV_Coil.ID, "Ultimate Voltage Coil", "Super Coil", o)); + ItemList.UHV_Coil.set(addItem(UHV_Coil.ID, "Highly Ultimate Voltage Coil", "Infinite Coil", o)); + + ItemList.GalliumArsenideCrystal + .set(addItem(GalliumArsenideCrystal.ID, "Gallium Arsenide Crystal", "For making boules", o)); + ItemList.GalliumArsenideCrystalSmallPart + .set(addItem(GalliumArsenideCrystalSmallPart.ID, "Small Gallium Arsenide Crystal", "For making boules", o)); + ItemList.KevlarFiber.set(addItem(KevlarFiber.ID, "Kevlar Fiber", "For making Kevlar Plates", o)); + ItemList.WovenKevlar.set(addItem(WovenKevlar.ID, "Woven Kevlar", "For making Kevlar Plates", o)); + ItemList.Spinneret.set(addItem(Spinneret.ID, "Spinneret", "For making Kevlar Fiber", o)); + + ItemList.IndustrialApiary_Upgrade_Frame + .set(addItem(IndustrialApiary_Upgrade_Frame.ID, "Upgrade Frame", "Crafting component", o)); + + ItemList.IndustrialApiary_Upgrade_Acceleration_1.set( + addItem( + IndustrialApiary_Upgrade_Acceleration_1.ID, + "Acceleration Upgrade x2", + "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 2x acceleration level/n * Energy Consumption +1 AMP LV", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_Acceleration_2.set( + addItem( + IndustrialApiary_Upgrade_Acceleration_2.ID, + "Acceleration Upgrade x4", + "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 4x acceleration level/n * Energy Consumption +1 AMP MV", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_Acceleration_3.set( + addItem( + IndustrialApiary_Upgrade_Acceleration_3.ID, + "Acceleration Upgrade x8", + "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 8x acceleration level/n * Energy Consumption +1 AMP HV", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_Acceleration_4.set( + addItem( + IndustrialApiary_Upgrade_Acceleration_4.ID, + "Acceleration Upgrade x16", + "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 16x acceleration level/n * Energy Consumption +1 AMP EV", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_Acceleration_5.set( + addItem( + IndustrialApiary_Upgrade_Acceleration_5.ID, + "Acceleration Upgrade x32", + "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 32x acceleration level/n * Energy Consumption +1 AMP IV", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_Acceleration_6.set( + addItem( + IndustrialApiary_Upgrade_Acceleration_6.ID, + "Acceleration Upgrade x64", + "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 64x acceleration level/n * Energy Consumption +1 AMP LuV", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_Acceleration_7.set( + addItem( + IndustrialApiary_Upgrade_Acceleration_7.ID, + "Acceleration Upgrade x128", + "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 128x acceleration level/n * Energy Consumption +1 AMP ZPM", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_Acceleration_8.set( + addItem( + IndustrialApiary_Upgrade_Acceleration_8.ID, + "Acceleration Upgrade x256", + "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 256x acceleration level/n * Energy Consumption +1 AMP UV", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_Acceleration_8_Upgraded.set( + addItem( + IndustrialApiary_Upgrade_Acceleration_8_Upgraded.ID, + "Upgraded Acceleration Upgrade x256", + "Acceleration upgrade for Industrial Apiary/n Maximum Installed: 1/n * Unlocks 256x acceleration level/n * Will also grant 8x production upgrade/n * Energy Consumption +1 AMP UV", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_PRODUCTION.set( + addItem( + IndustrialApiary_Upgrade_PRODUCTION.ID, + "Production Upgrade", + "Production upgrade for Industrial Apiary/n Maximum Installed: 8/n Increases production modifier by 0.25/n Energy Consumption +40%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_PLAINS.set( + addItem( + IndustrialApiary_Upgrade_PLAINS.ID, + "Plains Emulation Upgrade", + "Plains emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: Plains/n * Energy Consumption +40%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_LIGHT.set( + addItem( + IndustrialApiary_Upgrade_LIGHT.ID, + "Light Upgrade", + "Light upgrade for Industrial Apiary/n Maximum Installed: 1/n * Internal Lighting/n * Energy Consumption +5%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_FLOWERING.set( + addItem( + IndustrialApiary_Upgrade_FLOWERING.ID, + "Flowering Upgrade", + "Flowering upgrade for Industrial Apiary/n Maximum Installed: 8/n * Flowering and Pollination +20%/n * Energy Consumption +10%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_WINTER.set( + addItem( + IndustrialApiary_Upgrade_WINTER.ID, + "Winter Emulation Upgrade", + "Winter emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: Taiga/n * Energy Consumption +50%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_DRYER.set( + addItem( + IndustrialApiary_Upgrade_DRYER.ID, + "Dryer Upgrade", + "Dryer upgrade for Industrial Apiary/n Maximum Installed: 16/n * Humidity -12.5%/n * Energy Consumption +2.5%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_AUTOMATION.set( + addItem( + IndustrialApiary_Upgrade_AUTOMATION.ID, + "Automation Upgrade", + "Automation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Automation/n * Energy Consumption +10%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_HUMIDIFIER.set( + addItem( + IndustrialApiary_Upgrade_HUMIDIFIER.ID, + "Humidifier Upgrade", + "Humidifier upgrade for Industrial Apiary/n Maximum Installed: 16/n * Humidity +12.5%/n * Energy Consumption +2.5%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_HELL.set( + addItem( + IndustrialApiary_Upgrade_HELL.ID, + "HELL Emulation Upgrade", + "HELL emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: HELL/n * Energy Consumption +50%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_POLLEN.set( + addItem( + IndustrialApiary_Upgrade_POLLEN.ID, + "Pollen Scrubber Upgrade", + "Pollen scrubber upgrade for Industrial Apiary/n Maximum Installed: 1/n * Flowering and Pollination -100%/n * Energy Consumption +30%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_DESERT.set( + addItem( + IndustrialApiary_Upgrade_DESERT.ID, + "Desert Emulation Upgrade", + "Desert emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: Desert/n * Energy Consumption +20%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_COOLER.set( + addItem( + IndustrialApiary_Upgrade_COOLER.ID, + "Cooler Upgrade", + "Cooler upgrade for Industrial Apiary/n Maximum Installed: 16/n * Temperature -12.5%/n * Energy Consumption +2.5%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_LIFESPAN.set( + addItem( + IndustrialApiary_Upgrade_LIFESPAN.ID, + "Lifespan Upgrade", + "Lifespan upgrade for Industrial Apiary/n Maximum Installed: 4/n * Lifespan -33%/n * Energy Consumption +5%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_SEAL.set( + addItem( + IndustrialApiary_Upgrade_SEAL.ID, + "Seal Upgrade", + "Seal upgrade for Industrial Apiary/n Maximum Installed: 1/n * Rain Protection/n * Energy Consumption +5%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_STABILIZER.set( + addItem( + IndustrialApiary_Upgrade_STABILIZER.ID, + "Genetic Stabilizer Upgrade", + "Genetic stabilizer upgrade for Industrial Apiary/n Maximum Installed: 1/n * Genetic Decay -100%/n * Energy Consumption +150%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_JUNGLE.set( + addItem( + IndustrialApiary_Upgrade_JUNGLE.ID, + "Jungle Emulation Upgrade", + "Jungle emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: Jungle/n * Energy Consumption +20%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_TERRITORY.set( + addItem( + IndustrialApiary_Upgrade_TERRITORY.ID, + "Territory Upgrade", + "Territory upgrade for Industrial Apiary/n Maximum Installed: 4/n * Territory +50%/n * Energy Consumption +5%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_OCEAN.set( + addItem( + IndustrialApiary_Upgrade_OCEAN.ID, + "Ocean Emulation Upgrade", + "Ocean emulation upgrade for Industrial Apiary/n Maximum Installed: 1/n * Biome Override: Ocean/n * Energy Consumption +20%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_SKY.set( + addItem( + IndustrialApiary_Upgrade_SKY.ID, + "Open Sky Upgrade", + "Open sky upgrade for Industrial Apiary/n Maximum Installed: 1/n * Open Sky Simulation/n * Energy Consumption +5%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_HEATER.set( + addItem( + IndustrialApiary_Upgrade_HEATER.ID, + "Heater Upgrade", + "Heater upgrade for Industrial Apiary/n Maximum Installed: 16/n * Temperature +12.5%/n * Energy Consumption +2.5%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_SIEVE.set( + addItem( + IndustrialApiary_Upgrade_SIEVE.ID, + "Sieve Upgrade", + "Sieve upgrade for Industrial Apiary/n Maximum Installed: 1/n * Pollen Collection/n * Energy Consumption +25%", + OrePrefixes.apiaryUpgrade.name())); + ItemList.IndustrialApiary_Upgrade_UNLIGHT.set( + addItem( + IndustrialApiary_Upgrade_UNLIGHT.ID, + "Night Upgrade", + "Night upgrade for Industrial Apiary/n Maximum Installed: 1/n * Internal Darkness/n * Energy Consumption +5%", + OrePrefixes.apiaryUpgrade.name())); + + ItemList.NuclearStar.set( + addItem( + NuclearStar.ID, + "Nuclear Star", + "By the powers of Greg, I command this star to be really hot.", + SubTag.NO_UNIFICATION)); + + ItemList.Cover_Metrics_Transmitter.set( + addItem( + Cover_Metrics_Transmitter.ID, + "Metrics Transmitter Cover", + String.join( + "/n ", + "Taking Information Panels to the next level!", + "Creates a GregTech Advanced Sensor Card when attached", + "Works across dimensions or if machine is dismantled", + "Removing this cover will destroy the linked card", + GTValues.AuthorQuerns))); + + ItemList.ActivatedCarbonFilterMesh.set( + addItem( + Activated_Carbon_Filter_Mesh.ID, + "Activated Carbon Filter Mesh", + "The most granular filter you could possibly make.", + SubTag.NO_UNIFICATION)); + + ItemList.Quark_Catalyst_Housing.set( + addItem( + Quark_Catalyst_Housing.ID, + "Empty Quark Release Catalyst Housing", + "Capable of holding Quark Release Catalysts", + SubTag.NO_UNIFICATION)); + ItemList.Quark_Creation_Catalyst_Up.set( + addItem( + Quark_Creation_Catalyst_Up.ID, + "Up-Quark Releasing Catalyst", + "Can release up-quarks into environment to reshape matter", + SubTag.NO_UNIFICATION)); + ItemList.Quark_Creation_Catalyst_Down.set( + addItem( + Quark_Creation_Catalyst_Down.ID, + "Down-Quark Releasing Catalyst", + "Can release down-quarks into environment to reshape matter", + SubTag.NO_UNIFICATION)); + ItemList.Quark_Creation_Catalyst_Strange.set( + addItem( + Quark_Creation_Catalyst_Strange.ID, + "Strange-Quark Releasing Catalyst", + "Can release strange-quarks into environment to reshape matter", + SubTag.NO_UNIFICATION)); + ItemList.Quark_Creation_Catalyst_Charm.set( + addItem( + Quark_Creation_Catalyst_Charm.ID, + "Charm-Quark Releasing Catalyst", + "Can release charm-quarks into environment to reshape matter", + SubTag.NO_UNIFICATION)); + ItemList.Quark_Creation_Catalyst_Bottom.set( + addItem( + Quark_Creation_Catalyst_Bottom.ID, + "Bottom-Quark Releasing Catalyst", + "Can release top-quarks into environment to reshape matter", + SubTag.NO_UNIFICATION)); + ItemList.Quark_Creation_Catalyst_Top.set( + addItem( + Quark_Creation_Catalyst_Top.ID, + "Top-Quark Releasing Catalyst", + "Can release bottom-quarks into environment to reshape matter", + SubTag.NO_UNIFICATION)); + ItemList.Quark_Creation_Catalyst_Unaligned.set( + addItem( + Quark_Creation_Catalyst_Unaligned.ID, + "Unaligned Quark Releasing Catalyst", + "Needs to be realigned before use", + SubTag.NO_UNIFICATION)); + + ItemList.Optical_Cpu_Containment_Housing + .set(addItem(Optical_Cpu_Containment_Housing.ID, "Optical CPU Containment Housing", "CPU Housing", o)); + ItemList.Optically_Perfected_CPU + .set(addItem(Optically_Perfected_CPU.ID, "Optically Perfected CPU", "Perfected CPU!", o)); + ItemList.Optically_Compatible_Memory + .set(addItem(Optically_Compatible_Memory.ID, "Optically Compatible Memory", "Its in the name!", o)); + + ItemList.Timepiece.set(addItem(Timepiece.ID, "Timepiece", "Beware of the kid with the hat", o)); + ItemList.Transdimensional_Alignment_Matrix.set( + addItem( + Transdimensional_Alignment_Matrix.ID, + "Transdimensional Alignment Matrix", + String.join( + "/n ", + "Device supporting the alignment of transdimensional spaces.", + "Enables Dimensional Convergence on the DTPF."), + o)); + + ItemList.Thermal_Superconductor + .set(addItem(Thermal_Superconductor.ID, "Thermal Superconductor", "With the power of second sound!", o)); + ItemList.Relativistic_Heat_Capacitor + .set(addItem(Relativistic_Heat_Capacitor.ID, "Relativistic Heat Capacitor", "Thermal Resonance?", o)); + ItemList.Phononic_Seed_Crystal + .set(addItem(Phononic_Seed_Crystal.ID, "Phononic Seed Crystal", "Perfect Thermal Conductance", o)); + + ItemList.White_Dwarf_Shape_Extruder_Plate.set( + addItem( + White_Dwarf_Shape_Extruder_Plate.ID, + "White Dwarf Extruder Shape (Plate)", + "Ultra Strong Stellar Shape for making Plates")); + ItemList.White_Dwarf_Shape_Extruder_Rod.set( + addItem( + White_Dwarf_Shape_Extruder_Rod.ID, + "White Dwarf Extruder Shape (Rod)", + "Ultra Strong Stellar Shape for making Rods")); + ItemList.White_Dwarf_Shape_Extruder_Bolt.set( + addItem( + White_Dwarf_Shape_Extruder_Bolt.ID, + "White Dwarf Extruder Shape (Bolt)", + "Ultra Strong Stellar Shape for making Bolts")); + ItemList.White_Dwarf_Shape_Extruder_Ring.set( + addItem( + White_Dwarf_Shape_Extruder_Ring.ID, + "White Dwarf Extruder Shape (Ring)", + "Ultra Strong Stellar Shape for making Rings")); + ItemList.White_Dwarf_Shape_Extruder_Cell.set( + addItem( + White_Dwarf_Shape_Extruder_Cell.ID, + "White Dwarf Extruder Shape (Cell)", + "Ultra Strong Stellar Shape for making Cells")); + ItemList.White_Dwarf_Shape_Extruder_Ingot.set( + addItem( + White_Dwarf_Shape_Extruder_Ingot.ID, + "White Dwarf Extruder Shape (Ingot)", + "Ultra Strong Stellar Shape for, wait, can't we just use a Furnace?")); + ItemList.White_Dwarf_Shape_Extruder_Wire.set( + addItem( + White_Dwarf_Shape_Extruder_Wire.ID, + "White Dwarf Extruder Shape (Wire)", + "Ultra Strong Stellar Shape for making Wires")); + ItemList.White_Dwarf_Shape_Extruder_Casing.set( + addItem( + White_Dwarf_Shape_Extruder_Casing.ID, + "White Dwarf Extruder Shape (Casing)", + "Ultra Strong Stellar Shape for making Item Casings")); + ItemList.White_Dwarf_Shape_Extruder_Pipe_Tiny.set( + addItem( + White_Dwarf_Shape_Extruder_Pipe_Tiny.ID, + "White Dwarf Extruder Shape (Tiny Pipe)", + "Ultra Strong Stellar Shape for making tiny Pipes")); + ItemList.White_Dwarf_Shape_Extruder_Pipe_Small.set( + addItem( + White_Dwarf_Shape_Extruder_Pipe_Small.ID, + "White Dwarf Extruder Shape (Small Pipe)", + "Ultra Strong Stellar Shape for making small Pipes")); + ItemList.White_Dwarf_Shape_Extruder_Pipe_Medium.set( + addItem( + White_Dwarf_Shape_Extruder_Pipe_Medium.ID, + "White Dwarf Extruder Shape (Normal Pipe)", + "Ultra Strong Stellar Shape for making Pipes")); + ItemList.White_Dwarf_Shape_Extruder_Pipe_Large.set( + addItem( + White_Dwarf_Shape_Extruder_Pipe_Large.ID, + "White Dwarf Extruder Shape (Large Pipe)", + "Ultra Strong Stellar Shape for making large Pipes")); + ItemList.White_Dwarf_Shape_Extruder_Pipe_Huge.set( + addItem( + White_Dwarf_Shape_Extruder_Pipe_Huge.ID, + "White Dwarf Extruder Shape (Huge Pipe)", + "Ultra Strong Stellar Shape for making full Block Pipes")); + ItemList.White_Dwarf_Shape_Extruder_Block.set( + addItem( + White_Dwarf_Shape_Extruder_Block.ID, + "White Dwarf Extruder Shape (Block)", + "Ultra Strong Stellar Shape for making Blocks")); + ItemList.White_Dwarf_Shape_Extruder_Sword.set( + addItem( + White_Dwarf_Shape_Extruder_Sword.ID, + "White Dwarf Extruder Shape (Sword Blade)", + "Ultra Strong Stellar Shape for making Swords")); + ItemList.White_Dwarf_Shape_Extruder_Pickaxe.set( + addItem( + White_Dwarf_Shape_Extruder_Pickaxe.ID, + "White Dwarf Extruder Shape (Pickaxe Head)", + "Ultra Strong Stellar Shape for making Pickaxes")); + ItemList.White_Dwarf_Shape_Extruder_Shovel.set( + addItem( + White_Dwarf_Shape_Extruder_Shovel.ID, + "White Dwarf Extruder Shape (Shovel Head)", + "Ultra Strong Stellar Shape for making Shovels")); + ItemList.White_Dwarf_Shape_Extruder_Axe.set( + addItem( + White_Dwarf_Shape_Extruder_Axe.ID, + "White Dwarf Extruder Shape (Axe Head)", + "Ultra Strong Stellar Shape for making Axes")); + ItemList.White_Dwarf_Shape_Extruder_Hoe.set( + addItem( + White_Dwarf_Shape_Extruder_Hoe.ID, + "White Dwarf Extruder Shape (Hoe Head)", + "Ultra Strong Stellar Shape for making Hoes")); + ItemList.White_Dwarf_Shape_Extruder_Hammer.set( + addItem( + White_Dwarf_Shape_Extruder_Hammer.ID, + "White Dwarf Extruder Shape (Hammer Head)", + "Ultra Strong Stellar Shape for making Hammers")); + ItemList.White_Dwarf_Shape_Extruder_File.set( + addItem( + White_Dwarf_Shape_Extruder_File.ID, + "White Dwarf Extruder Shape (File Head)", + "Ultra Strong Stellar Shape for making Files")); + ItemList.White_Dwarf_Shape_Extruder_Saw.set( + addItem( + White_Dwarf_Shape_Extruder_Saw.ID, + "White Dwarf Extruder Shape (Saw Blade)", + "Ultra Strong Stellar Shape for making Saws")); + ItemList.White_Dwarf_Shape_Extruder_Gear.set( + addItem( + White_Dwarf_Shape_Extruder_Gear.ID, + "White Dwarf Extruder Shape (Gear)", + "Ultra Strong Stellar Shape for making Gears")); + ItemList.White_Dwarf_Shape_Extruder_Bottle.set( + addItem( + White_Dwarf_Shape_Extruder_Bottle.ID, + "White Dwarf Extruder Shape (Bottle)", + "Ultra Strong Stellar Shape for making Bottles")); + ItemList.White_Dwarf_Shape_Extruder_Rotor.set( + addItem( + White_Dwarf_Shape_Extruder_Rotor.ID, + "White Dwarf Extruder Shape (Rotor)", + "Ultra Strong Stellar Shape for a Rotor")); + ItemList.White_Dwarf_Shape_Extruder_Small_Gear.set( + addItem( + White_Dwarf_Shape_Extruder_Small_Gear.ID, + "White Dwarf Extruder Shape (Small Gear)", + "Ultra Strong Stellar Shape for a Small Gear")); + ItemList.White_Dwarf_Shape_Extruder_Turbine_Blade.set( + addItem( + White_Dwarf_Shape_Extruder_Turbine_Blade.ID, + "White Dwarf Extruder Shape (Turbine Blade)", + "Ultra Strong Stellar Extruder Shape for a Turbine Blade")); + ItemList.White_Dwarf_Shape_Extruder_ToolHeadDrill.set( + addItem( + White_Dwarf_Shape_Extruder_ToolHeadDrill.ID, + "White Dwarf Extruder Shape (Drill Head)", + "White Dwarf Extruder Shape for a Drill Head")); + registerAllTieredTooltips(); + registerAllAnimatedTooltips(); + initOrePrefixes(); + initOreDictUnificatorEntries(); + registerCovers(); + } + + private void registerAllTieredTooltips() { + registerTieredTooltip(ItemList.NandChip.get(1), ULV); + registerTieredTooltip(ItemList.Circuit_Integrated_Good.get(1), MV); + registerTieredTooltip(ItemList.Circuit_Microprocessor.get(1), LV); + registerTieredTooltip(ItemList.Circuit_Processor.get(1), MV); + registerTieredTooltip(ItemList.Circuit_Nanoprocessor.get(1), HV); + registerTieredTooltip(ItemList.Circuit_Nanocomputer.get(1), EV); + registerTieredTooltip(ItemList.Circuit_Elitenanocomputer.get(1), IV); + registerTieredTooltip(ItemList.Circuit_Quantumprocessor.get(1), EV); + registerTieredTooltip(ItemList.Circuit_Quantumcomputer.get(1), IV); + registerTieredTooltip(ItemList.Circuit_Masterquantumcomputer.get(1), LuV); + registerTieredTooltip(ItemList.Circuit_Quantummainframe.get(1), ZPM); + registerTieredTooltip(ItemList.Circuit_Crystalprocessor.get(1), IV); + registerTieredTooltip(ItemList.Circuit_Crystalcomputer.get(1), LuV); + registerTieredTooltip(ItemList.Circuit_Ultimatecrystalcomputer.get(1), ZPM); + registerTieredTooltip(ItemList.Circuit_Crystalmainframe.get(1), UV); + registerTieredTooltip(ItemList.Circuit_Neuroprocessor.get(1), LuV); + registerTieredTooltip(ItemList.Circuit_Wetwarecomputer.get(1), ZPM); + registerTieredTooltip(ItemList.Circuit_Wetwaresupercomputer.get(1), UV); + registerTieredTooltip(ItemList.Circuit_Wetwaremainframe.get(1), UHV); + registerTieredTooltip(ItemList.Circuit_Bioprocessor.get(1), ZPM); + registerTieredTooltip(ItemList.Circuit_Biowarecomputer.get(1), UV); + registerTieredTooltip(ItemList.Circuit_Biowaresupercomputer.get(1), UHV); + registerTieredTooltip(ItemList.Circuit_Biomainframe.get(1), UEV); + registerTieredTooltip(ItemList.Circuit_OpticalProcessor.get(1), UV); + registerTieredTooltip(ItemList.Circuit_OpticalAssembly.get(1), UHV); + registerTieredTooltip(ItemList.Circuit_OpticalComputer.get(1), UEV); + registerTieredTooltip(ItemList.Circuit_OpticalMainframe.get(1), UIV); + registerTieredTooltip(ItemList.Circuit_ExoticProcessor.get(1), UHV); + registerTieredTooltip(ItemList.Circuit_ExoticAssembly.get(1), UEV); + registerTieredTooltip(ItemList.Circuit_ExoticComputer.get(1), UIV); + registerTieredTooltip(ItemList.Circuit_ExoticMainframe.get(1), UMV); + registerTieredTooltip(ItemList.Circuit_CosmicProcessor.get(1), UEV); + registerTieredTooltip(ItemList.Circuit_CosmicAssembly.get(1), UIV); + registerTieredTooltip(ItemList.Circuit_CosmicComputer.get(1), UMV); + registerTieredTooltip(ItemList.Circuit_CosmicMainframe.get(1), UXV); + registerTieredTooltip(ItemList.Circuit_TranscendentProcessor.get(1), UIV); + registerTieredTooltip(ItemList.Circuit_TranscendentAssembly.get(1), UMV); + registerTieredTooltip(ItemList.Circuit_TranscendentComputer.get(1), UXV); + registerTieredTooltip(ItemList.Circuit_TranscendentMainframe.get(1), MAX); + } + + private void registerAllAnimatedTooltips() { + addItemTooltip(ItemList.Transdimensional_Alignment_Matrix.get(1), GTValues.AuthorCloud); + } + + private void initOreDictUnificatorEntries() { + GTOreDictUnificator + .set(OrePrefixes.componentCircuit, Materials.Resistor, ItemList.Circuit_Parts_Resistor.get(1L)); + GTOreDictUnificator.set(OrePrefixes.componentCircuit, Materials.Diode, ItemList.Circuit_Parts_Diode.get(1L)); + GTOreDictUnificator + .set(OrePrefixes.componentCircuit, Materials.Transistor, ItemList.Circuit_Parts_Transistor.get(1L)); + GTOreDictUnificator.set(OrePrefixes.componentCircuit, Materials.Inductor, ItemList.Circuit_Parts_Coil.get(1L)); + GTOreDictUnificator + .set(OrePrefixes.componentCircuit, Materials.Capacitor, ItemList.Circuit_Parts_Capacitor.get(1L)); + + GTOreDictUnificator.addAssociation( + OrePrefixes.componentCircuit, + Materials.Resistor, + ItemList.Circuit_Parts_ResistorSMD.get(1L), + true); + GTOreDictUnificator.addAssociation( + OrePrefixes.componentCircuit, + Materials.Diode, + ItemList.Circuit_Parts_DiodeSMD.get(1L), + true); + GTOreDictUnificator.addAssociation( + OrePrefixes.componentCircuit, + Materials.Transistor, + ItemList.Circuit_Parts_TransistorSMD.get(1L), + true); + GTOreDictUnificator.addAssociation( + OrePrefixes.componentCircuit, + Materials.Capacitor, + ItemList.Circuit_Parts_CapacitorSMD.get(1L), + true); + GTOreDictUnificator.addAssociation( + OrePrefixes.componentCircuit, + Materials.Inductor, + ItemList.Circuit_Parts_InductorSMD.get(1L), + true); + + } + + private void initOrePrefixes() { + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_1.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_2.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_3.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_4.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_5.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_6.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_7.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_8.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_Acceleration_8_Upgraded.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_PRODUCTION.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_PLAINS.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_LIGHT.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_FLOWERING.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_WINTER.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_DRYER.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_AUTOMATION.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_HUMIDIFIER.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_HELL.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_POLLEN.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_DESERT.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_COOLER.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_LIFESPAN.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_SEAL.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_STABILIZER.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_JUNGLE.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_TERRITORY.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_OCEAN.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_SKY.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_HEATER.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_SIEVE.get(1L)); + OrePrefixes.apiaryUpgrade.add(ItemList.IndustrialApiary_Upgrade_UNLIGHT.get(1L)); + } + + private void registerCovers() { + GregTechAPI.registerCover( + ItemList.Cover_Metrics_Transmitter.get(1L), + TextureFactory.of(MACHINE_CASINGS[2][0], TextureFactory.of(OVERLAY_METRICS_TRANSMITTER)), + new CoverMetricsTransmitter(TextureFactory.of(OVERLAY_METRICS_TRANSMITTER))); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_UHV.get(1L), + TextureFactory.of(SOLARPANEL_UHV), + new CoverSolarPanel(2097152)); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_UEV.get(1L), + TextureFactory.of(SOLARPANEL_UEV), + new CoverSolarPanel(8388608)); + GregTechAPI.registerCover( + ItemList.Cover_SolarPanel_UIV.get(1L), + TextureFactory.of(SOLARPANEL_UIV), + new CoverSolarPanel(33554432)); + } + + @Override + public boolean doesShowInCreative(OrePrefixes aPrefix, Materials aMaterial, boolean aDoShowAllItems) { + return aDoShowAllItems || (aPrefix.toString() + .toLowerCase() + .contains("nanite")) + || (aPrefix.toString() + .toLowerCase() + .contains("rawore")); + } +} diff --git a/src/main/java/gregtech/common/items/MetaGeneratedItem98.java b/src/main/java/gregtech/common/items/MetaGeneratedItem98.java new file mode 100644 index 0000000000..875b7f7b5a --- /dev/null +++ b/src/main/java/gregtech/common/items/MetaGeneratedItem98.java @@ -0,0 +1,352 @@ +package gregtech.common.items; + +import java.util.Arrays; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import javax.annotation.Nullable; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedItem; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtil; +import gregtech.api.util.GTUtility; + +/** This class holds cells for non-GT fluids. */ +public class MetaGeneratedItem98 extends MetaGeneratedItem { + + public static MetaGeneratedItem98 INSTANCE; + + /** + * Registered fluids. + * + *

+ * When adding a fluid, don't forget to make sure that GregTech loads after the mod that adds that fluid! + * + *

+ * In order to avoid breaking existing worlds, fluids must not have their IDs changed! The only safe modification + * that can be made to this enum is adding new fluids, or removing existing fluids. When removing fluids, maybe + * leave a comment mentioning the old ID, so that we don't re-use it for a new fluid. + */ + public enum FluidCell { + // Next unused ID: 32 + + // GregTech + DRILLING_FLUID(5, "liquid_drillingfluid", CellType.REGULAR), + SQUID_INK(6, "squidink", CellType.SMALL), + BLUE_VITRIOL(22, "solution.bluevitriol", CellType.REGULAR), + NICKEL_SULFATE(23, "solution.nickelsulfate", CellType.REGULAR), + GREEN_VITRIOL(24, "solution.greenvitriol", CellType.REGULAR), + INDIUM_CONCENTRATE(25, "indiumconcentrate", CellType.REGULAR), + LEAD_ZINC_SOLUTION(26, "leadzincsolution", CellType.REGULAR), + + // New Horizons Core Mod + UNKNOWN_NUTRIENT_AGAR(7, "unknownnutrientagar", CellType.REGULAR), + SEAWEED_BROTH(8, "seaweedbroth", CellType.REGULAR), + SUPER_HEAVY_RADOX(28, "superheavyradox", CellType.REGULAR), + HEAVY_RADOX(29, "heavyradox", CellType.REGULAR), + CRACKED_RADOX(30, "crackedradox", CellType.REGULAR), + LIGHT_RADOX(31, "lightradox", CellType.REGULAR), + SUPER_LIGHT_RADOX(9, "superlightradox", CellType.REGULAR), + SODIUM_POTASSIUM(18, "sodiumpotassium", CellType.REGULAR), + ENRICHED_BACTERIAL_SLUDGE(19, "enrichedbacterialsludge", CellType.REGULAR), + FERMENTED_BACTERIAL_SLUDGE(20, "fermentedbacterialsludge", CellType.REGULAR), + POLLUTION(21, "pollution", CellType.REGULAR), + XENOXENE(27, "xenoxene", CellType.REGULAR), + + // BartWorks + ENZYME_SOLUTION(10, "enzymessollution", CellType.REGULAR), + ESCHERICHIA_COLI_FLUID(11, "escherichiakolifluid", CellType.REGULAR), + PENICILLIN(12, "penicillin", CellType.REGULAR), + FLUORESCENT_DNA(13, "fluorecentddna", CellType.REGULAR), + POLYMERASE(17, "polymerase", CellType.REGULAR), + + // Good Generator + COMBUSTION_PROMOTER(14, "combustionpromotor", CellType.REGULAR), + + // Galacticraft + BACTERIAL_SLUDGE(1, "bacterialsludge", CellType.REGULAR), + + // Railcraft + STEAM(0, "steam", CellType.REGULAR), + + // Gendustry + BACTERIA(15, "binnie.bacteria", CellType.REGULAR), + MUTAGEN(2, "mutagen", CellType.REGULAR), + LIQUID_DNA(16, "liquiddna", CellType.REGULAR), + + // Tinker's Construct + LIQUID_ENDER(3, "ender", CellType.REGULAR), + + // Hardcore Ender Expansion + ENDER_GOO(4, "endergoo", CellType.REGULAR),; + + private final int mId; + /** This is the Forge internal fluid name. */ + private final String mfluidName; + + private final CellType mType; + + @Nullable + private ItemStack mStack; + + FluidCell(int aId, String aFluidName, CellType aType) { + mId = aId; + mfluidName = aFluidName; + mType = aType; + } + + public int getId() { + return mId; + } + + public String getFluidName() { + return mfluidName; + } + + public CellType getDisplayType() { + return mType; + } + + /** + * Get a copy of this stack with stack size 1. + *

+ * Always returns non-null stack even if the fluid referenced doesn't exist, so don't assume it's always valid. + */ + public ItemStack get() { + trySetStack(); + return GTUtility.copy(mStack); + } + + /** + * Get a copy of this cell WITHOUT copy. + *

+ * Always returns non-null stack even if the fluid referenced doesn't exist, so don't assume it's always valid. + *

+ * Use with caution. + */ + public ItemStack getNoCopy() { + trySetStack(); + return mStack; + } + + /** + * Get a copy of this cell with specified stack size. + *

+ * Always returns non-null stack even if the fluid referenced doesn't exist, so don't assume it's always valid. + */ + public ItemStack get(int aStackSize) { + trySetStack(); + return GTUtility.copyAmount(aStackSize, mStack); + } + + private void trySetStack() { + if (mStack == null) { + mStack = new ItemStack(MetaGeneratedItem98.INSTANCE, 1, mId); + } + } + } + + /** Cell type specifies the cell capacity, appearance, and item name format. */ + private enum CellType { + + REGULAR(1_000, OrePrefixes.cell), + SMALL(144, OrePrefixes.cell), + MOLTEN(144, OrePrefixes.cellMolten), + PLASMA(1_000, OrePrefixes.cellPlasma); + + private final int capacity; + private final OrePrefixes prefix; + + CellType(int capacity, OrePrefixes prefix) { + this.capacity = capacity; + this.prefix = prefix; + } + } + + /** Struct class holding data that we need to properly handle a registered fluid cell item. */ + private static class RegisteredFluidData { + + private final short[] rgba; + private final IIconContainer iconContainer; + + private RegisteredFluidData(short[] rgba, IIconContainer iconContainer) { + this.rgba = rgba; + this.iconContainer = iconContainer; + } + } + + /** + * Map of ID to registered fluid data. + * + *

+ * Only contains IDs that were successfully registered. + */ + private final Map registeredFluidDataMap; + + private final EnumMap iconContainerMap; + + private MetaGeneratedItem98() { + // For some reason, fluid cells will be rendered only if the metadata ID is less than the + // offset. So we will specify maximum offset here. + // See: GT_MetaGenerated_Item_Renderer.java + super("metaitem.98", (short) 32766, (short) 0); + + registeredFluidDataMap = new HashMap<>(); + iconContainerMap = new EnumMap<>(CellType.class); + } + + /** + * Loading needs to happen after the fluids we need have been registered, which means during post-load. However, + * cell icons seem to be deleted some time between load and post-load, so we must pre-cache them. + */ + public static synchronized void preInit() { + if (INSTANCE == null) INSTANCE = new MetaGeneratedItem98(); + + // We'll just steal the icons from Water. They are all the same anyway (except _NULL is broken for cells). + for (CellType cellType : CellType.values()) { + IIconContainer iconContainer = Materials.Water.mIconSet.mTextures[cellType.prefix.mTextureIndex]; + INSTANCE.iconContainerMap.put(cellType, iconContainer); + } + } + + public static synchronized void init() { + INSTANCE.createAllItems(); + INSTANCE.registerOreDict(); + } + + private void createAllItems() { + for (FluidCell tCell : FluidCell.values()) { + tryToInitialize(tCell); + } + + // We're not going to use these BitSets, so clear them to save memory. + mEnabledItems.clear(); + mVisibleItems.clear(); + } + + private void tryToInitialize(FluidCell aCell) { + final boolean isStackAlreadySet = aCell.mStack != null; + + int id = aCell.getId(); + String fluidName = aCell.getFluidName(); + CellType cellType = aCell.getDisplayType(); + + // We'll check for ID uniqueness. Better to throw an exception than silently overwrite some + // fluid cells with other fluids due to ID collision. + if (registeredFluidDataMap.containsKey(id)) { + throw new IllegalStateException("Got ID collision for ID: " + id); + } + + aCell.trySetStack(); + + Fluid fluid = FluidRegistry.getFluid(fluidName); + if (fluid == null) { + // The fluid is not guaranteed to exist. + // These fluids are non-GT fluids, so the mod may not be present. + if (isStackAlreadySet) { + throw new RuntimeException( + "Cell item for fluid " + fluidName + + " has already been created, but the fluid doesn't exist during postload"); + } else { + // fluid doesn't exist and this item has not been referenced + return; + } + } + + FluidStack fluidStack = new FluidStack(fluid, cellType.capacity); + + ItemStack emptyCell = ItemList.Cell_Empty.get(1L); + FluidContainerRegistry + .registerFluidContainer(new FluidContainerRegistry.FluidContainerData(fluidStack, aCell.mStack, emptyCell)); + + GTLanguageManager.addStringLocalization( + getUnlocalizedName(aCell.mStack) + ".name", + cellType.prefix.mLocalizedMaterialPre + fluid.getLocalizedName(fluidStack) + + cellType.prefix.mLocalizedMaterialPost); + + int color = fluid.getColor(); + short[] rgba = GTUtil.getRGBaArray(color); + + registeredFluidDataMap.put(id, new RegisteredFluidData(rgba, iconContainerMap.get(cellType))); + } + + private void registerOreDict() { + // The GregTech ore dictionary requires an entry in the Materials enum, and since the whole + // point of this class is to add cell items for non-GregTech fluids, the vast majority of + // cell items won't have an associated material. So only a rare few cell items will need to + // be registered. + + // Register IC2 steam cell and Railcraft steam cell as synonyms. + // There is no steam material, so we'll use Water.cellMolten instead. + GTOreDictUnificator.add(OrePrefixes.cellMolten, Materials.Water, GTModHandler.getIC2Item("steamCell", 1L)); + GTOreDictUnificator.add(OrePrefixes.cellMolten, Materials.Water, FluidCell.STEAM.getNoCopy()); + } + + @Override + public short[] getRGBa(ItemStack aStack) { + RegisteredFluidData fluidData = registeredFluidDataMap.get(aStack.getItemDamage()); + if (fluidData == null) { + return Materials._NULL.mRGBa; + } + + return fluidData.rgba; + } + + @Override + public ItemStack getContainerItem(ItemStack aStack) { + return ItemList.Cell_Empty.get(1L); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { + Arrays.stream(FluidCell.values()) + .filter(fluid -> FluidRegistry.getFluid(fluid.getFluidName()) != null) + .map(FluidCell::get) + .filter(Objects::nonNull) + .forEach(aList::add); + } + + @Override + public final IIcon getIconFromDamage(int aMetaData) { + IIconContainer iconContainer = getIconContainer(aMetaData); + if (iconContainer != null) { + return iconContainer.getIcon(); + } + return null; + } + + @Override + public IIconContainer getIconContainer(int aMetaData) { + RegisteredFluidData fluidData = registeredFluidDataMap.get(aMetaData); + if (fluidData == null) { + return null; + } + return fluidData.iconContainer; + } + + @Override + public int getItemStackLimit(ItemStack aStack) { + return 64; + } +} diff --git a/src/main/java/gregtech/common/items/MetaGeneratedItem99.java b/src/main/java/gregtech/common/items/MetaGeneratedItem99.java new file mode 100644 index 0000000000..e776a5eb26 --- /dev/null +++ b/src/main/java/gregtech/common/items/MetaGeneratedItem99.java @@ -0,0 +1,214 @@ +package gregtech.common.items; + +import static gregtech.api.enums.GTValues.M; +import static gregtech.api.enums.OrePrefixes.cellMolten; + +import java.util.BitSet; +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import com.google.common.collect.ImmutableList; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedItem; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; + +public class MetaGeneratedItem99 extends MetaGeneratedItem { + + public static MetaGeneratedItem99 INSTANCE; + + /** + * Ore prefixes appear in this list in the order in which they will be assigned ID blocks. + * + *

+ * In order to avoid breaking existing worlds, the entries in this list must not be re-ordered! The only safe + * modification that can be made to this list is adding new entries to the end. + */ + private static final ImmutableList CRACKED_CELL_TYPES = ImmutableList.of( + OrePrefixes.cellHydroCracked1, + OrePrefixes.cellHydroCracked2, + OrePrefixes.cellHydroCracked3, + OrePrefixes.cellSteamCracked1, + OrePrefixes.cellSteamCracked2, + OrePrefixes.cellSteamCracked3); + + private static final int NUM_CRACKED_CELL_TYPES = CRACKED_CELL_TYPES.size(); + + /** + * Assignment of metadata IDs: 0 - 999: Molten cells 10_000 - 15_999: Cracked fluid cells (# IDs used is + * NUM_CRACKED_CELL_TYPES * 1_000; update this if you add any) + */ + private final BitSet enabled = new BitSet(); + + public MetaGeneratedItem99() { + super("metaitem.99", (short) (10_000 + NUM_CRACKED_CELL_TYPES * 1_000), (short) 0); + + INSTANCE = this; + + for (Materials tMaterial : GregTechAPI.sGeneratedMaterials) { + if (tMaterial == null || tMaterial.mMetaItemSubID < 0 || tMaterial.mMetaItemSubID >= 1_000) { + continue; + } + + if ((tMaterial.contains(SubTag.SMELTING_TO_FLUID)) && (!tMaterial.contains(SubTag.NO_SMELTING)) + && !tMaterial.contains(SubTag.SMELTING_TO_GEM)) { + registerMolten(tMaterial, tMaterial.mMetaItemSubID); + if (tMaterial.mSmeltInto != tMaterial && tMaterial.mSmeltInto.mMetaItemSubID >= 0 + && tMaterial.mSmeltInto.mMetaItemSubID < 1_000) { + registerMolten(tMaterial.mSmeltInto, tMaterial.mSmeltInto.mMetaItemSubID); + } + } + + if (tMaterial.canBeCracked()) { + registerCracked(tMaterial, tMaterial.mMetaItemSubID); + } + } + + // We're not going to use these BitSets, so clear them to save memory. + mEnabledItems.clear(); + mVisibleItems.clear(); + } + + private void registerMolten(Materials tMaterial, int i) { + ItemStack tStack = new ItemStack(this, 1, i); + enabled.set(i); + + GTLanguageManager.addStringLocalization( + getUnlocalizedName(tStack) + ".name", + cellMolten.getDefaultLocalNameFormatForItem(tMaterial)); + GTLanguageManager.addStringLocalization( + getUnlocalizedName(tStack) + ".tooltip", + tMaterial.getToolTip(cellMolten.mMaterialAmount / M)); + + if (cellMolten.mIsUnificatable) { + GTOreDictUnificator.set(cellMolten, tMaterial, tStack); + } else { + GTOreDictUnificator.registerOre(cellMolten.get(tMaterial), tStack); + } + } + + private void registerCracked(Materials tMaterial, int i) { + int offset = 10_000; + for (OrePrefixes prefix : CRACKED_CELL_TYPES) { + ItemStack tStack = new ItemStack(this, 1, offset + i); + enabled.set(offset + i); + + GTLanguageManager.addStringLocalization( + getUnlocalizedName(tStack) + ".name", + prefix.getDefaultLocalNameFormatForItem(tMaterial)); + GTLanguageManager.addStringLocalization( + getUnlocalizedName(tStack) + ".tooltip", + tMaterial.getToolTip(prefix.mMaterialAmount / M)); + + if (prefix.mIsUnificatable) { + GTOreDictUnificator.set(prefix, tMaterial, tStack); + } else { + GTOreDictUnificator.registerOre(prefix.get(tMaterial), tStack); + } + + offset += 1_000; + } + } + + /** Returns null for item damage out of bounds. */ + private Materials getMaterial(int damage) { + if (damage < 0) { + return null; + } + return GregTechAPI.sGeneratedMaterials[damage % 1_000]; + } + + /** Returns null for item damage out of bounds. */ + private OrePrefixes getOrePrefix(int damage) { + if (damage < 0) { + return null; + } else if (damage < 1_000) { + return cellMolten; + } else if (damage >= 10_000 && damage < 10_000 + (NUM_CRACKED_CELL_TYPES * 1_000)) { + return CRACKED_CELL_TYPES.get((damage / 1_000) - 10); + } + return null; + } + + @Override + public short[] getRGBa(ItemStack aStack) { + OrePrefixes prefix = getOrePrefix(aStack.getItemDamage()); + Materials material = getMaterial(aStack.getItemDamage()); + if (material == null) { + material = Materials._NULL; + } + + if (prefix == cellMolten) { + return material.mMoltenRGBa; + } else { + return material.mRGBa; + } + } + + @Override + public String getItemStackDisplayName(ItemStack aStack) { + String aName = super.getItemStackDisplayName(aStack); + Materials material = getMaterial(aStack.getItemDamage()); + if (material != null) { + return material.getLocalizedNameForItem(aName); + } + return aName; + } + + @Override + public ItemStack getContainerItem(ItemStack aStack) { + OrePrefixes prefix = getOrePrefix(aStack.getItemDamage()); + if (prefix != null) { + return prefix.mContainerItem; + } + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { + enabled.stream() + .mapToObj(i -> new ItemStack(this, 1, i)) + .forEach(aList::add); + } + + @Override + public final IIcon getIconFromDamage(int aMetaData) { + IIconContainer iconContainer = getIconContainer(aMetaData); + if (iconContainer != null) { + return iconContainer.getIcon(); + } + return null; + } + + @Override + public IIconContainer getIconContainer(int aMetaData) { + Materials material = getMaterial(aMetaData); + OrePrefixes prefix = getOrePrefix(aMetaData); + if (material != null && prefix != null) { + return material.mIconSet.mTextures[prefix.mTextureIndex]; + } + return null; + } + + @Override + public int getItemStackLimit(ItemStack aStack) { + OrePrefixes prefix = getOrePrefix(aStack.getItemDamage()); + if (prefix != null) { + return prefix.mDefaultStackSize; + } else { + return 64; + } + } +} diff --git a/src/main/java/gregtech/common/items/MetaGeneratedTool01.java b/src/main/java/gregtech/common/items/MetaGeneratedTool01.java new file mode 100644 index 0000000000..11c3fa104e --- /dev/null +++ b/src/main/java/gregtech/common/items/MetaGeneratedTool01.java @@ -0,0 +1,738 @@ +package gregtech.common.items; + +import static gregtech.common.items.IDMetaTool01.AXE; +import static gregtech.common.items.IDMetaTool01.BRANCHCUTTER; +import static gregtech.common.items.IDMetaTool01.BUTCHERYKNIFE; +import static gregtech.common.items.IDMetaTool01.BUZZSAW_HV; +import static gregtech.common.items.IDMetaTool01.BUZZSAW_LV; +import static gregtech.common.items.IDMetaTool01.BUZZSAW_MV; +import static gregtech.common.items.IDMetaTool01.CHAINSAW_HV; +import static gregtech.common.items.IDMetaTool01.CHAINSAW_LV; +import static gregtech.common.items.IDMetaTool01.CHAINSAW_MV; +import static gregtech.common.items.IDMetaTool01.CROWBAR; +import static gregtech.common.items.IDMetaTool01.DRILL_HV; +import static gregtech.common.items.IDMetaTool01.DRILL_LV; +import static gregtech.common.items.IDMetaTool01.DRILL_MV; +import static gregtech.common.items.IDMetaTool01.FILE; +import static gregtech.common.items.IDMetaTool01.HARDHAMMER; +import static gregtech.common.items.IDMetaTool01.HOE; +import static gregtech.common.items.IDMetaTool01.JACKHAMMER; +import static gregtech.common.items.IDMetaTool01.KNIFE; +import static gregtech.common.items.IDMetaTool01.MORTAR; +import static gregtech.common.items.IDMetaTool01.PICKAXE; +import static gregtech.common.items.IDMetaTool01.PLOW; +import static gregtech.common.items.IDMetaTool01.PLUNGER; +import static gregtech.common.items.IDMetaTool01.POCKET_BRANCHCUTTER; +import static gregtech.common.items.IDMetaTool01.POCKET_FILE; +import static gregtech.common.items.IDMetaTool01.POCKET_KNIFE; +import static gregtech.common.items.IDMetaTool01.POCKET_MULTITOOL; +import static gregtech.common.items.IDMetaTool01.POCKET_SAW; +import static gregtech.common.items.IDMetaTool01.POCKET_SCREWDRIVER; +import static gregtech.common.items.IDMetaTool01.POCKET_WIRECUTTER; +import static gregtech.common.items.IDMetaTool01.ROLLING_PIN; +import static gregtech.common.items.IDMetaTool01.SAW; +import static gregtech.common.items.IDMetaTool01.SCOOP; +import static gregtech.common.items.IDMetaTool01.SCREWDRIVER; +import static gregtech.common.items.IDMetaTool01.SCREWDRIVER_HV; +import static gregtech.common.items.IDMetaTool01.SCREWDRIVER_LV; +import static gregtech.common.items.IDMetaTool01.SCREWDRIVER_MV; +import static gregtech.common.items.IDMetaTool01.SENSE; +import static gregtech.common.items.IDMetaTool01.SHOVEL; +import static gregtech.common.items.IDMetaTool01.SOFTMALLET; +import static gregtech.common.items.IDMetaTool01.SOLDERING_IRON_HV; +import static gregtech.common.items.IDMetaTool01.SOLDERING_IRON_LV; +import static gregtech.common.items.IDMetaTool01.SOLDERING_IRON_MV; +import static gregtech.common.items.IDMetaTool01.SWORD; +import static gregtech.common.items.IDMetaTool01.TURBINE; +import static gregtech.common.items.IDMetaTool01.TURBINE_HUGE; +import static gregtech.common.items.IDMetaTool01.TURBINE_LARGE; +import static gregtech.common.items.IDMetaTool01.TURBINE_SMALL; +import static gregtech.common.items.IDMetaTool01.UNIVERSALSPADE; +import static gregtech.common.items.IDMetaTool01.WIRECUTTER; +import static gregtech.common.items.IDMetaTool01.WRENCH; +import static gregtech.common.items.IDMetaTool01.WRENCH_HV; +import static gregtech.common.items.IDMetaTool01.WRENCH_LV; +import static gregtech.common.items.IDMetaTool01.WRENCH_MV; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TCAspects; +import gregtech.api.enums.ToolDictNames; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.common.tools.ToolAxe; +import gregtech.common.tools.ToolBranchCutter; +import gregtech.common.tools.ToolButcheryKnife; +import gregtech.common.tools.ToolBuzzSaw; +import gregtech.common.tools.ToolChainsawHV; +import gregtech.common.tools.ToolChainsawLV; +import gregtech.common.tools.ToolChainsawMV; +import gregtech.common.tools.ToolCrowbar; +import gregtech.common.tools.ToolDrillHV; +import gregtech.common.tools.ToolDrillLV; +import gregtech.common.tools.ToolDrillMV; +import gregtech.common.tools.ToolFile; +import gregtech.common.tools.ToolHardHammer; +import gregtech.common.tools.ToolHoe; +import gregtech.common.tools.ToolJackHammer; +import gregtech.common.tools.ToolKnife; +import gregtech.common.tools.ToolMortar; +import gregtech.common.tools.ToolPickaxe; +import gregtech.common.tools.ToolPlow; +import gregtech.common.tools.ToolPlunger; +import gregtech.common.tools.ToolRollingPin; +import gregtech.common.tools.ToolSaw; +import gregtech.common.tools.ToolScoop; +import gregtech.common.tools.ToolScrewdriver; +import gregtech.common.tools.ToolScrewdriverLV; +import gregtech.common.tools.ToolSense; +import gregtech.common.tools.ToolShovel; +import gregtech.common.tools.ToolSoftHammer; +import gregtech.common.tools.ToolSolderingIron; +import gregtech.common.tools.ToolSword; +import gregtech.common.tools.ToolTurbineHuge; +import gregtech.common.tools.ToolTurbineLarge; +import gregtech.common.tools.ToolTurbineNormal; +import gregtech.common.tools.ToolTurbineSmall; +import gregtech.common.tools.ToolUniversalSpade; +import gregtech.common.tools.ToolWireCutter; +import gregtech.common.tools.ToolWrench; +import gregtech.common.tools.ToolWrenchHV; +import gregtech.common.tools.ToolWrenchLV; +import gregtech.common.tools.ToolWrenchMV; +import gregtech.common.tools.pocket.ToolPocketBranchCutter; +import gregtech.common.tools.pocket.ToolPocketFile; +import gregtech.common.tools.pocket.ToolPocketKnife; +import gregtech.common.tools.pocket.ToolPocketMultitool; +import gregtech.common.tools.pocket.ToolPocketSaw; +import gregtech.common.tools.pocket.ToolPocketScrewdriver; +import gregtech.common.tools.pocket.ToolPocketWireCutter; + +public class MetaGeneratedTool01 extends MetaGeneratedTool { + + public static MetaGeneratedTool01 INSTANCE; + + public MetaGeneratedTool01() { + super("metatool.01"); + INSTANCE = this; + addTool( + SWORD.ID, + "Sword", + "", + new ToolSword(), + ToolDictNames.craftingToolSword, + ToolDictNames.craftingToolBlade, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.TELUM, 4L)); + addTool( + PICKAXE.ID, + "Pickaxe", + "", + new ToolPickaxe(), + ToolDictNames.craftingToolPickaxe, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + SHOVEL.ID, + "Shovel", + "", + new ToolShovel(), + ToolDictNames.craftingToolShovel, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + AXE.ID, + "Axe", + "", + new ToolAxe(), + ToolDictNames.craftingToolAxe, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 2L)); + addTool( + HOE.ID, + "Hoe", + "", + new ToolHoe(), + ToolDictNames.craftingToolHoe, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MESSIS, 4L)); + addTool( + SAW.ID, + "Saw", + "Can also harvest Ice", + new ToolSaw(), + ToolDictNames.craftingToolSaw, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 2L)); + GregTechAPI.registerTool( + addTool( + HARDHAMMER.ID, + "Hammer", + "Crushes Ores instead of harvesting them", + new ToolHardHammer(), + ToolDictNames.craftingToolHardHammer, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sHardHammerList); + GregTechAPI.registerTool( + addTool( + SOFTMALLET.ID, + "Soft Mallet", + "", + new ToolSoftHammer(), + ToolDictNames.craftingToolSoftHammer, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.LIMUS, 4L)), + GregTechAPI.sSoftHammerList); + GregTechAPI.registerTool( + addTool( + WRENCH.ID, + "Wrench", + "Hold Leftclick to dismantle Machines", + new ToolWrench(), + ToolDictNames.craftingToolWrench, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sWrenchList); + addTool( + FILE.ID, + "File", + "", + new ToolFile(), + ToolDictNames.craftingToolFile, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)); + GregTechAPI.registerTool( + addTool( + CROWBAR.ID, + "Crowbar", + "Dismounts Covers and Rotates Rails", + new ToolCrowbar(), + ToolDictNames.craftingToolCrowbar, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.TELUM, 2L)), + GregTechAPI.sCrowbarList); + GregTechAPI.registerTool( + addTool( + SCREWDRIVER.ID, + "Screwdriver", + "Adjusts Covers and Machines", + new ToolScrewdriver(), + ToolDictNames.craftingToolScrewdriver, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sScrewdriverList); + addTool( + MORTAR.ID, + "Mortar", + "", + new ToolMortar(), + ToolDictNames.craftingToolMortar, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 2L)); + GregTechAPI.registerTool( + addTool( + WIRECUTTER.ID, + "Wire Cutter", + "", + new ToolWireCutter(), + ToolDictNames.craftingToolWireCutter, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sWireCutterList); + addTool( + SCOOP.ID, + "Scoop", + "", + new ToolScoop(), + ToolDictNames.craftingToolScoop, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.BESTIA, 2L), + new TCAspects.TC_AspectStack(TCAspects.PANNUS, 2L)); + addTool( + BRANCHCUTTER.ID, + "Branch Cutter", + "", + new ToolBranchCutter(), + ToolDictNames.craftingToolBranchCutter, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METO, 2L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 2L)); + GregTechAPI.registerTool( + addTool( + UNIVERSALSPADE.ID, + "Universal Spade", + "", + new ToolUniversalSpade(), + ToolDictNames.craftingToolBlade, + ToolDictNames.craftingToolShovel, + ToolDictNames.craftingToolCrowbar, + ToolDictNames.craftingToolSaw, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.TELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.METO, 1L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 1L)), + GregTechAPI.sCrowbarList); + addTool( + KNIFE.ID, + "Knife", + "", + new ToolKnife(), + ToolDictNames.craftingToolBlade, + ToolDictNames.craftingToolKnife, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.TELUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.CORPUS, 2L)); + addTool( + BUTCHERYKNIFE.ID, + "Butchery Knife", + "Has a slow Attack Rate", + new ToolButcheryKnife(), + ToolDictNames.craftingToolBlade, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.CORPUS, 4L)); + + addTool( + SENSE.ID, + "Sense", + "Because a Scythe doesn't make Sense", + new ToolSense(), + ToolDictNames.craftingToolBlade, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METO, 2L), + new TCAspects.TC_AspectStack(TCAspects.HERBA, 2L), + new TCAspects.TC_AspectStack(TCAspects.MORTUUS, 2L)); + addTool( + PLOW.ID, + "Plow", + "Used to get rid of Snow", + new ToolPlow(), + ToolDictNames.craftingToolPlow, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.METO, 2L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 2L)); + addTool( + PLUNGER.ID, + "Plunger", + "", + new ToolPlunger(), + ToolDictNames.craftingToolPlunger, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 2L), + new TCAspects.TC_AspectStack(TCAspects.ITER, 2L)); + addTool( + ROLLING_PIN.ID, + "Rolling Pin", + "", + new ToolRollingPin(), + ToolDictNames.craftingToolRollingPin, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.LIMUS, 4L)); + + addTool( + DRILL_LV.ID, + "Drill (LV)", + "", + new ToolDrillLV(), + ToolDictNames.craftingToolMiningDrill, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + DRILL_MV.ID, + "Drill (MV)", + "", + new ToolDrillMV(), + ToolDictNames.craftingToolMiningDrill, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + DRILL_HV.ID, + "Drill (HV)", + "", + new ToolDrillHV(), + ToolDictNames.craftingToolMiningDrill, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 4L)); + addTool( + CHAINSAW_LV.ID, + "Chainsaw (LV)", + "Can also harvest Ice", + new ToolChainsawLV(), + ToolDictNames.craftingToolSaw, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.METO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 2L)); + addTool( + CHAINSAW_MV.ID, + "Chainsaw (MV)", + "Can also harvest Ice", + new ToolChainsawMV(), + ToolDictNames.craftingToolSaw, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.METO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 2L)); + addTool( + CHAINSAW_HV.ID, + "Chainsaw (HV)", + "Can also harvest Ice", + new ToolChainsawHV(), + ToolDictNames.craftingToolSaw, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.METO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 2L)); + GregTechAPI.registerTool( + addTool( + WRENCH_LV.ID, + "Wrench (LV)", + "Hold Left Button to dismantle Machines", + new ToolWrenchLV(), + ToolDictNames.craftingToolWrench, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sWrenchList); + GregTechAPI.registerTool( + addTool( + WRENCH_MV.ID, + "Wrench (MV)", + "Hold Left Button to dismantle Machines", + new ToolWrenchMV(), + ToolDictNames.craftingToolWrench, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sWrenchList); + GregTechAPI.registerTool( + addTool( + WRENCH_HV.ID, + "Wrench (HV)", + "Hold Left Button to dismantle Machines", + new ToolWrenchHV(), + ToolDictNames.craftingToolWrench, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 4L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sWrenchList); + GregTechAPI.registerTool( + addTool( + JACKHAMMER.ID, + "JackHammer (HV)", + "Breaks Rocks into pieces", + new ToolJackHammer(), + ToolDictNames.craftingToolJackHammer, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 2L)), + GregTechAPI.sJackhammerList); + addTool( + BUZZSAW_LV.ID, + "Buzzsaw (LV)", + "Not suitable for harvesting Blocks", + new ToolBuzzSaw(), + ToolDictNames.craftingToolSaw, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 2L)); + addTool( + BUZZSAW_MV.ID, + "Buzzsaw (MV)", + "Not suitable for harvesting Blocks", + new ToolBuzzSaw(), + ToolDictNames.craftingToolSaw, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 2L)); + addTool( + BUZZSAW_HV.ID, + "Buzzsaw (HV)", + "Not suitable for harvesting Blocks", + new ToolBuzzSaw(), + ToolDictNames.craftingToolSaw, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 2L)); + GregTechAPI.registerTool( + addTool( + SCREWDRIVER_LV.ID, + "Screwdriver (LV)", + "Adjusts Covers and Machines", + new ToolScrewdriverLV(), + ToolDictNames.craftingToolScrewdriver, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sScrewdriverList); + GregTechAPI.registerTool( + addTool( + SCREWDRIVER_MV.ID, + "Screwdriver (MV)", + "Adjusts Covers and Machines", + new ToolScrewdriverLV(), + ToolDictNames.craftingToolScrewdriver, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sScrewdriverList); + GregTechAPI.registerTool( + addTool( + SCREWDRIVER_HV.ID, + "Screwdriver (HV)", + "Adjusts Covers and Machines", + new ToolScrewdriverLV(), + ToolDictNames.craftingToolScrewdriver, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sScrewdriverList); + GregTechAPI.registerTool( + addTool( + SOLDERING_IRON_LV.ID, + "Soldering Iron (LV)", + "Fixes burned out Circuits. Needs soldering materials in inventory.", + new ToolSolderingIron(), + ToolDictNames.craftingToolSolderingIron, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sSolderingToolList); + GregTechAPI.registerTool( + addTool( + SOLDERING_IRON_MV.ID, + "Soldering Iron (MV)", + "Fixes burned out Circuits. Needs soldering materials in inventory.", + new ToolSolderingIron(), + ToolDictNames.craftingToolSolderingIron, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sSolderingToolList); + GregTechAPI.registerTool( + addTool( + SOLDERING_IRON_HV.ID, + "Soldering Iron (HV)", + "Fixes burned out Circuits. Needs soldering materials in inventory.", + new ToolSolderingIron(), + ToolDictNames.craftingToolSolderingIron, + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)), + GregTechAPI.sSolderingToolList); + + addTool(TURBINE_SMALL.ID, "Small Turbine", "Turbine Rotors for your power station", new ToolTurbineSmall()); + addTool(TURBINE.ID, "Turbine", "Turbine Rotors for your power station", new ToolTurbineNormal()); + addTool(TURBINE_LARGE.ID, "Large Turbine", "Turbine Rotors for your power station", new ToolTurbineLarge()); + addTool(TURBINE_HUGE.ID, "Huge Turbine", "Turbine Rotors for your power station", new ToolTurbineHuge()); + + addTool( + POCKET_MULTITOOL.ID, + "Pocket Multitool", + "6 useful Tools in one!", + new ToolPocketMultitool(POCKET_KNIFE.ID), + null, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 6), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 3), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 3)); + addTool( + POCKET_KNIFE.ID, + "Pocket Multitool (Knife)", + "", + new ToolPocketKnife(POCKET_SAW.ID), + ToolDictNames.craftingToolKnife, + ToolDictNames.craftingToolBlade, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 6), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 3), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 3)); + addTool( + POCKET_SAW.ID, + "Pocket Multitool (Saw)", + "Can also harvest Ice", + new ToolPocketSaw(POCKET_FILE.ID), + ToolDictNames.craftingToolSaw, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 6), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 3), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 3)); + addTool( + POCKET_FILE.ID, + "Pocket Multitool (File)", + "", + new ToolPocketFile(POCKET_SCREWDRIVER.ID), + ToolDictNames.craftingToolFile, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 6), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 3), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 3)); + GregTechAPI.registerTool( + addTool( + POCKET_SCREWDRIVER.ID, + "Pocket Multitool (Screwdriver)", + "Adjusts Covers and Machines", + new ToolPocketScrewdriver(POCKET_WIRECUTTER.ID), + ToolDictNames.craftingToolScrewdriver, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 6), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 3), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 3)), + GregTechAPI.sScrewdriverList); + GregTechAPI.registerTool( + addTool( + POCKET_WIRECUTTER.ID, + "Pocket Multitool (Wire Cutter)", + "", + new ToolPocketWireCutter(POCKET_BRANCHCUTTER.ID), + ToolDictNames.craftingToolWireCutter, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 6), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 3), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 3)), + GregTechAPI.sWireCutterList); + addTool( + POCKET_BRANCHCUTTER.ID, + "Pocket Multitool (Branch Cutter)", + "", + new ToolPocketBranchCutter(POCKET_MULTITOOL.ID), + ToolDictNames.craftingToolBranchCutter, + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 6), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 3), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 3)); + initCraftingShapedRecipes(); + initCraftingShapelessRecipes(); + } + + private void initCraftingShapelessRecipes() { + GTModHandler.addShapelessCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Items.coal, 1) }); + GTModHandler.addShapelessCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1L), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Blocks.clay, 1) }); + GTModHandler.addShapelessCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Items.wheat, 1) }); + GTModHandler.addShapelessCraftingRecipe( + new ItemStack(Items.flint, 1), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Blocks.gravel, 1) }); + GTModHandler.addShapelessCraftingRecipe( + new ItemStack(Items.blaze_powder, 2), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { ToolDictNames.craftingToolMortar, new ItemStack(Items.blaze_rod, 1) }); + } + + private void initCraftingShapedRecipes() { + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.Flint, Materials.Stone, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " I ", "SIS", "SSS", 'I', new ItemStack(Items.flint, 1), 'S', OrePrefixes.stone }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.Bronze, Materials.Stone, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.Bronze), 'S', OrePrefixes.stone }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.Iron, Materials.Stone, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.Iron), 'S', OrePrefixes.stone }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.Steel, Materials.Stone, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.Steel), 'S', OrePrefixes.stone }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.WroughtIron, Materials.Stone, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.WroughtIron), 'S', + OrePrefixes.stone }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.RedSteel, Materials.Stone, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.RedSteel), 'S', + OrePrefixes.stone }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.BlueSteel, Materials.Stone, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.BlueSteel), 'S', + OrePrefixes.stone }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.BlackSteel, Materials.Stone, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.BlackSteel), 'S', + OrePrefixes.stone }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.DamascusSteel, Materials.Stone, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.DamascusSteel), 'S', + OrePrefixes.stone }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(MORTAR.ID, 1, Materials.Thaumium, Materials.Stone, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " I ", "SIS", "SSS", 'I', OrePrefixes.ingot.get(Materials.Thaumium), 'S', + OrePrefixes.stone }); + + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(ROLLING_PIN.ID, 1, Materials.Wood, Materials.Wood, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " S", " I ", "S f", 'I', OrePrefixes.plank.get(Materials.Wood), 'S', + OrePrefixes.stick.get(Materials.Wood) }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(ROLLING_PIN.ID, 1, Materials.Plastic, Materials.Plastic, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " S", " I ", "S f", 'I', OrePrefixes.ingot.get(Materials.Plastic), 'S', + OrePrefixes.stick.get(Materials.Plastic) }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(ROLLING_PIN.ID, 1, Materials.Aluminium, Materials.Aluminium, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " S", " I ", "S f", 'I', OrePrefixes.ingot.get(Materials.Aluminium), 'S', + OrePrefixes.stick.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(ROLLING_PIN.ID, 1, Materials.StainlessSteel, Materials.StainlessSteel, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " S", " I ", "S f", 'I', OrePrefixes.ingot.get(Materials.StainlessSteel), 'S', + OrePrefixes.stick.get(Materials.StainlessSteel) }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(ROLLING_PIN.ID, 1, Materials.IronWood, Materials.IronWood, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { " S", " I ", "S f", 'I', OrePrefixes.ingot.get(Materials.IronWood), 'S', + OrePrefixes.stick.get(Materials.IronWood) }); + + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(SWORD.ID, 1, Materials.Flint, Materials.Wood, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "F", "F", "S", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', + new ItemStack(Items.flint, 1) }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(PICKAXE.ID, 1, Materials.Flint, Materials.Wood, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "FFF", " S ", " S ", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', + new ItemStack(Items.flint, 1) }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(SHOVEL.ID, 1, Materials.Flint, Materials.Wood, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "F", "S", "S", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', + new ItemStack(Items.flint, 1) }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(AXE.ID, 1, Materials.Flint, Materials.Wood, null), + GTModHandler.RecipeBits.MIRRORED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "FF", "FS", " S", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', + new ItemStack(Items.flint, 1) }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(HOE.ID, 1, Materials.Flint, Materials.Wood, null), + GTModHandler.RecipeBits.MIRRORED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "FF", " S", " S", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', + new ItemStack(Items.flint, 1) }); + GTModHandler.addCraftingRecipe( + INSTANCE.getToolWithStats(KNIFE.ID, 1, Materials.Flint, Materials.Wood, null), + GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "F", "S", 'S', OrePrefixes.stick.get(Materials.Wood), 'F', new ItemStack(Items.flint, 1) }); + } +} diff --git a/src/main/java/gregtech/common/items/PollenType.java b/src/main/java/gregtech/common/items/PollenType.java index 3cd9484b69..85b87b54c4 100644 --- a/src/main/java/gregtech/common/items/PollenType.java +++ b/src/main/java/gregtech/common/items/PollenType.java @@ -1,7 +1,7 @@ package gregtech.common.items; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; public enum PollenType { @@ -23,7 +23,7 @@ public enum PollenType { } public String getName() { - return GT_LanguageManager.addStringLocalization( + return GTLanguageManager.addStringLocalization( "pollen." + this.name, this.name.substring(0, 1) .toUpperCase() + this.name.substring(1) + " Pollen"); diff --git a/src/main/java/gregtech/common/items/PropolisType.java b/src/main/java/gregtech/common/items/PropolisType.java index e6f08b0cfa..746f2d0916 100644 --- a/src/main/java/gregtech/common/items/PropolisType.java +++ b/src/main/java/gregtech/common/items/PropolisType.java @@ -1,7 +1,7 @@ package gregtech.common.items; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; public enum PropolisType { @@ -34,7 +34,7 @@ public enum PropolisType { public String getName() { // return "gt.comb."+this.name; - return GT_LanguageManager.addStringLocalization( + return GTLanguageManager.addStringLocalization( "propolis." + this.name, this.name.substring(0, 1) .toUpperCase() + this.name.substring(1) + " Propolis"); diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java b/src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java new file mode 100644 index 0000000000..b39135fed2 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourCoverTool.java @@ -0,0 +1,193 @@ +package gregtech.common.items.behaviors; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IItemBehaviour; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.CoverBehaviorBase; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; + +public class BehaviourCoverTool extends BehaviourNone { + + public static final IItemBehaviour INSTANCE = new BehaviourCoverTool(); + private final String mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.cover_copy_paste", "Can copy/paste cover data."); + + private ISerializableObject mStoredData = GregTechAPI.sNoBehavior.createDataObject(); + private int mCoverType; + private int mTickRateAddition = 0; + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if (aWorld.isRemote) { + return false; + } + final NBTTagCompound tNBT = aStack.getTagCompound(); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final boolean isCopyMode = aPlayer.isSneaking(); + initDataFromNBT(tNBT); + if (((aPlayer instanceof EntityPlayerMP)) && (aItem.canUse(aStack, 100.0D))) { + if (isCopyMode) { + ArrayList tList = new ArrayList<>(); + doCopy(tTileEntity, aWorld, aX, aY, aZ, side, hitX, hitY, hitZ, tList); + aItem.discharge(aStack, 100.0D, Integer.MAX_VALUE, true, false, false); + writeListToNBT(tList, tNBT, aPlayer); + saveDataToNBT(tNBT); + } else { + doPaste(tTileEntity, side, hitX, hitY, hitZ, aPlayer); + aItem.discharge(aStack, 25.0D, Integer.MAX_VALUE, true, false, false); + } + } + GTUtility.doSoundAtClient(SoundResource.IC2_TOOLS_OD_SCANNER, 1, 1.0F, aX, aY, aZ); + return aPlayer instanceof EntityPlayerMP; + } + + private void initDataFromNBT(NBTTagCompound aNBT) { + if (aNBT != null) { + mCoverType = aNBT.getInteger("mCoverType"); + CoverBehaviorBase tBehavior = GregTechAPI.getCoverBehaviorNew(mCoverType); + NBTBase tData = aNBT.getTag("mCoverData"); + if (tData != null) mStoredData = tBehavior.createDataObject(tData); + else mStoredData = GregTechAPI.sNoBehavior.createDataObject(); + mTickRateAddition = aNBT.hasKey("mTickRateAddition") ? aNBT.getInteger("mTickRateAddition") : 0; + } + } + + private void saveDataToNBT(NBTTagCompound aNBT) { + aNBT.setInteger("mCoverType", mCoverType); + if (mStoredData == null) mStoredData = GregTechAPI.sNoBehavior.createDataObject(); + aNBT.setTag("mCoverData", mStoredData.saveDataToNBT()); + aNBT.setInteger("mTickRateAddition", mTickRateAddition); + } + + @SuppressWarnings("rawtypes") + private void writeListToNBT(List aList, NBTTagCompound aNBT, EntityPlayer aPlayer) { + if (aList != null && aNBT != null) { + int tSize = aList.size(); + aNBT.setInteger("dataLinesCount", tSize); + for (int i = 0; i < tSize; i++) { + aNBT.setString("dataLines" + i, (String) aList.get(i)); + GTUtility.sendChatToPlayer(aPlayer, (String) aList.get(i)); + } + } + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private void doCopy(TileEntity aTileEntity, World aWorld, int aX, int aY, int aZ, ForgeDirection side, float hitX, + float hitY, float hitZ, List aList) { + aList.add( + "----- X: " + EnumChatFormatting.AQUA + + GTUtility.formatNumbers(aX) + + EnumChatFormatting.RESET + + " Y: " + + EnumChatFormatting.AQUA + + GTUtility.formatNumbers(aY) + + EnumChatFormatting.RESET + + " Z: " + + EnumChatFormatting.AQUA + + GTUtility.formatNumbers(aZ) + + EnumChatFormatting.RESET + + " D: " + + EnumChatFormatting.AQUA + + aWorld.provider.dimensionId + + EnumChatFormatting.RESET + + " -----"); + if (aTileEntity instanceof ICoverable tCoverable) { + final ForgeDirection tSide = tCoverable.getCoverItemAtSide(side) != null ? side + : tCoverable.getCoverItemAtSide(GTUtility.determineWrenchingSide(side, hitX, hitY, hitZ)) != null + ? GTUtility.determineWrenchingSide(side, hitX, hitY, hitZ) + : ForgeDirection.UNKNOWN; + if (tSide != ForgeDirection.UNKNOWN) { + if (tCoverable.getCoverBehaviorAtSideNew(tSide) + .allowsCopyPasteTool()) { + mStoredData = tCoverable.getComplexCoverDataAtSide(tSide); + mCoverType = tCoverable.getCoverIDAtSide(tSide); + mTickRateAddition = tCoverable.getCoverInfoAtSide(tSide) + .getTickRateAddition(); + + aList.add("Block Side: " + EnumChatFormatting.AQUA + tSide.name() + EnumChatFormatting.RESET); + aList.add( + "Cover Type: " + EnumChatFormatting.GREEN + + tCoverable.getCoverItemAtSide(tSide) + .getDisplayName() + + EnumChatFormatting.RESET); + } else { + mStoredData = GregTechAPI.sNoBehavior.createDataObject(); + mCoverType = 0; + mTickRateAddition = 0; + aList.add("Copy unavailable for this cover type"); + } + } else { + mStoredData = GregTechAPI.sNoBehavior.createDataObject(); + mCoverType = 0; + mTickRateAddition = 0; + aList.add("No Cover Found"); + } + } else { + mStoredData = GregTechAPI.sNoBehavior.createDataObject(); + mCoverType = 0; + mTickRateAddition = 0; + aList.add("No Cover Found"); + } + } + + private void doPaste(TileEntity aTileEntity, ForgeDirection side, float hitX, float hitY, float hitZ, + EntityPlayer aPlayer) { + if (aTileEntity instanceof ICoverable tCoverable) { + if (mCoverType == 0 || mStoredData == null) { + GTUtility.sendChatToPlayer(aPlayer, "Please Copy a Valid Cover First."); + return; + } + final ForgeDirection tSide = tCoverable.getCoverItemAtSide(side) != null ? side + : tCoverable.getCoverItemAtSide(GTUtility.determineWrenchingSide(side, hitX, hitY, hitZ)) != null + ? GTUtility.determineWrenchingSide(side, hitX, hitY, hitZ) + : ForgeDirection.UNKNOWN; + if (tSide != ForgeDirection.UNKNOWN) { + int tCoverID = tCoverable.getCoverIDAtSide(tSide); + if (tCoverID == mCoverType) { + tCoverable.setCoverDataAtSide(tSide, mStoredData); + tCoverable.getCoverInfoAtSide(tSide) + .setTickRateAddition(mTickRateAddition); + GTUtility.sendChatToPlayer(aPlayer, "Cover Data Pasted."); + } else { + GTUtility.sendChatToPlayer(aPlayer, "Not Matched Cover."); + } + } else { + GTUtility.sendChatToPlayer(aPlayer, "No Cover Found."); + } + } + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + try { + final NBTTagCompound tNBT = aStack.getTagCompound(); + final int tSize = tNBT.getInteger("dataLinesCount"); + if (tSize < 1) throw new Exception(); + aList.add(EnumChatFormatting.BLUE + "Stored Cover Data:"); + for (int i = 0; i < tSize; i++) { + aList.add(EnumChatFormatting.RESET + tNBT.getString("dataLines" + i)); + } + } catch (Exception e) { + aList.add(this.mTooltip); + } + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourCrowbar.java b/src/main/java/gregtech/common/items/behaviors/BehaviourCrowbar.java new file mode 100644 index 0000000000..76c215bfd0 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourCrowbar.java @@ -0,0 +1,61 @@ +package gregtech.common.items.behaviors; + +import static gregtech.api.enums.Mods.Railcraft; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.SoundResource; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +public class BehaviourCrowbar extends BehaviourNone { + + private final int mVanillaCosts; + private final int mEUCosts; + + public BehaviourCrowbar(int aVanillaCosts, int aEUCosts) { + this.mVanillaCosts = aVanillaCosts; + this.mEUCosts = aEUCosts; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if (aWorld.isRemote) { + return false; + } + if (GTModHandler.getModItem(Railcraft.ID, "fluid.creosote.bucket", 1L) != null) { + return false; + } + Block aBlock = aWorld.getBlock(aX, aY, aZ); + if (aBlock == null) { + return false; + } + byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ); + if (aBlock == Blocks.rail) { + if (GTModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { + aWorld.isRemote = true; + aWorld.setBlock(aX, aY, aZ, aBlock, (aMeta + 1) % 10, 0); + aWorld.isRemote = false; + GTUtility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_BREAK, 1.0F, -1.0F, aX, aY, aZ); + } + return true; + } + if ((aBlock == Blocks.detector_rail) || (aBlock == Blocks.activator_rail) || (aBlock == Blocks.golden_rail)) { + if (GTModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { + aWorld.isRemote = true; + aWorld.setBlock(aX, aY, aZ, aBlock, aMeta / 8 * 8 + (aMeta % 8 + 1) % 6, 0); + aWorld.isRemote = false; + GTUtility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_BREAK, 1.0F, -1.0F, aX, aY, aZ); + } + return true; + } + return false; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourDataOrb.java b/src/main/java/gregtech/common/items/behaviors/BehaviourDataOrb.java new file mode 100644 index 0000000000..c5d045ecd0 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourDataOrb.java @@ -0,0 +1,105 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTUtility; + +public class BehaviourDataOrb extends BehaviourNone { + + public static void copyInventory(ItemStack[] aInventory, ItemStack[] aNewContent, int aIndexlength) { + for (int i = 0; i < aIndexlength; i++) { + if (aNewContent[i] == null) { + aInventory[i] = null; + } else { + aInventory[i] = GTUtility.copyOrNull(aNewContent[i]); + } + } + } + + public static String getDataName(ItemStack aStack) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + return ""; + } + return tNBT.getString("mDataName"); + } + + public static String getDataTitle(ItemStack aStack) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + return ""; + } + return tNBT.getString("mDataTitle"); + } + + public static NBTTagCompound setDataName(ItemStack aStack, String aDataName) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } + tNBT.setString("mDataName", aDataName); + aStack.setTagCompound(tNBT); + return tNBT; + } + + public static NBTTagCompound setDataTitle(ItemStack aStack, String aDataTitle) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } + tNBT.setString("mDataTitle", aDataTitle); + aStack.setTagCompound(tNBT); + return tNBT; + } + + public static ItemStack[] getNBTInventory(ItemStack aStack) { + ItemStack[] tInventory = new ItemStack[256]; + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + return tInventory; + } + NBTTagList tNBT_ItemList = tNBT.getTagList("Inventory", 10); + for (int i = 0; i < tNBT_ItemList.tagCount(); i++) { + NBTTagCompound tag = tNBT_ItemList.getCompoundTagAt(i); + byte slot = tag.getByte("Slot"); + if (slot >= 0) { + tInventory[slot] = GTUtility.loadItem(tag); + } + } + return tInventory; + } + + public static NBTTagCompound setNBTInventory(ItemStack aStack, ItemStack[] aInventory) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } + NBTTagList tNBT_ItemList = new NBTTagList(); + for (int i = 0; i < aInventory.length; i++) { + ItemStack stack = aInventory[i]; + if (stack != null) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setByte("Slot", (byte) i); + stack.writeToNBT(tag); + tNBT_ItemList.appendTag(tag); + } + } + tNBT.setTag("Inventory", tNBT_ItemList); + aStack.setTagCompound(tNBT); + return tNBT; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + if (!(getDataTitle(aStack).length() == 0)) { + aList.add(getDataTitle(aStack)); + aList.add(getDataName(aStack)); + } + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourDataStick.java b/src/main/java/gregtech/common/items/behaviors/BehaviourDataStick.java new file mode 100644 index 0000000000..63462b8d9b --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourDataStick.java @@ -0,0 +1,52 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.item.ItemStack; + +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTUtility; + +public class BehaviourDataStick extends BehaviourNone { + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + String tString = GTUtility.ItemNBT.getBookTitle(aStack); + if (GTUtility.isStringValid(tString)) { + aList.add(tString); + } + tString = GTUtility.ItemNBT.getBookAuthor(aStack); + if (GTUtility.isStringValid(tString)) { + aList.add("by " + tString); + } + short tMapID = GTUtility.ItemNBT.getMapID(aStack); + if (tMapID >= 0) { + aList.add("Map ID: " + tMapID); + } + tString = GTUtility.ItemNBT.getPunchCardData(aStack); + if (GTUtility.isStringValid(tString)) { + aList.add("Punch Card Data"); + int i = 0; + int j = tString.length(); + for (; i < j; i += 64) { + aList.add(tString.substring(i, Math.min(i + 64, j))); + } + } + short sTier = GTUtility.ItemNBT.getNBT(aStack) + .getShort("rocket_tier"); + if (sTier > 0 && sTier < 100) { + aList.add("Rocket Schematic Tier: " + sTier); + } else if (sTier >= 100) { + switch (sTier) { + case 100 -> aList.add("Moonbuggy Schematic"); + case 101 -> aList.add("Cargo-Rocket Schematic"); + case 102 -> aList.add("Astro-Miner Schematic"); + } + } + long lastUpdate = GTUtility.ItemNBT.getNBT(aStack) + .getLong("lastUpdate"); + if (lastUpdate != 0) aList.add(String.format("Last update at: %tc", lastUpdate)); + + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourHoe.java b/src/main/java/gregtech/common/items/behaviors/BehaviourHoe.java new file mode 100644 index 0000000000..ca9166b581 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourHoe.java @@ -0,0 +1,72 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.entity.player.UseHoeEvent; + +import cpw.mods.fml.common.eventhandler.Event; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder; + +public class BehaviourHoe extends BehaviourNone { + + private final int mCosts; + private final String mTooltip = GTLanguageManager.addStringLocalization("gt.behaviour.hoe", "Can till Dirt"); + + public BehaviourHoe(int aCosts) { + this.mCosts = aCosts; + } + + @Override + public boolean onItemUse(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, + int aZ, int ordinalSide, float hitX, float hitY, float hitZ) { + if (!aPlayer.canPlayerEdit(aX, aY, aZ, ordinalSide, aStack)) { + return false; + } + UseHoeEvent event = new UseHoeEvent(aPlayer, aStack, aWorld, aX, aY, aZ); + if (MinecraftForge.EVENT_BUS.post(event)) { + return false; + } + if (event.getResult() == Event.Result.ALLOW) { + if (!aPlayer.capabilities.isCreativeMode) { + ((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts); + } + return true; + } + Block aBlock = aWorld.getBlock(aX, aY, aZ); + if ((ordinalSide != 0) && (GTUtility.isBlockAir(aWorld, aX, aY + 1, aZ)) + && ((aBlock == Blocks.grass) || (aBlock == Blocks.dirt))) { + new WorldSpawnedEventBuilder.SoundEventBuilder() + .setVolume((Blocks.farmland.stepSound.getVolume() + 1.0F) / 2.0F) + .setPitch(Blocks.farmland.stepSound.getPitch() * 0.8F) + .setIdentifier(Blocks.farmland.stepSound.getStepResourcePath()) + .setPosition(aX + 0.5F, aY + 0.5F, aZ + 0.5F) + .setWorld(aWorld) + .run(); + if (aWorld.isRemote) { + return true; + } + aWorld.setBlock(aX, aY, aZ, Blocks.farmland); + if (!aPlayer.capabilities.isCreativeMode) { + ((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts); + } + return true; + } + return false; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourLighter.java b/src/main/java/gregtech/common/items/behaviors/BehaviourLighter.java new file mode 100644 index 0000000000..9c9c8ab9f0 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourLighter.java @@ -0,0 +1,139 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import codechicken.lib.math.MathHelper; +import gregtech.api.enums.SoundResource; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; + +public class BehaviourLighter extends BehaviourNone { + + private final ItemStack mEmptyLighter; + private final ItemStack mUsedLighter; + private final ItemStack mFullLighter; + private final long mFuelAmount; + private final String mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.lighter.tooltip", "Can light things on Fire"); + private final String mTooltipUses = GTLanguageManager + .addStringLocalization("gt.behaviour.lighter.uses", "Remaining Uses:"); + private final String mTooltipUnstackable = GTLanguageManager + .addStringLocalization("gt.behaviour.unstackable", "Not usable when stacked!"); + + public BehaviourLighter(ItemStack aEmptyLighter, ItemStack aUsedLighter, ItemStack aFullLighter, long aFuelAmount) { + this.mFullLighter = aFullLighter; + this.mUsedLighter = aUsedLighter; + this.mEmptyLighter = aEmptyLighter; + this.mFuelAmount = aFuelAmount; + } + + @Override + public boolean onLeftClickEntity(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { + if ((aPlayer.worldObj.isRemote) || (aStack.stackSize != 1)) { + return false; + } + boolean rOutput = false; + if ((aEntity instanceof EntityCreeper)) { + prepare(aStack); + long tFuelAmount = GTUtility.ItemNBT.getLighterFuel(aStack); + if (GTUtility.areStacksEqual(aStack, this.mUsedLighter, true)) { + GTUtility.sendSoundToPlayers( + aPlayer.worldObj, + SoundResource.FIRE_IGNITE, + 1.0F, + 1.0F, + MathHelper.floor_double(aEntity.posX), + MathHelper.floor_double(aEntity.posY), + MathHelper.floor_double(aEntity.posZ)); + ((EntityCreeper) aEntity).func_146079_cb(); + if (!aPlayer.capabilities.isCreativeMode) { + tFuelAmount -= 1L; + } + rOutput = true; + } + GTUtility.ItemNBT.setLighterFuel(aStack, tFuelAmount); + if (tFuelAmount <= 0L) { + useUp(aStack); + } + } + return rOutput; + } + + @Override + public boolean onItemUse(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, + int aZ, int ordinalSide, float hitX, float hitY, float hitZ) { + return false; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if ((aWorld.isRemote) || (aStack.stackSize != 1)) { + return false; + } + boolean rOutput = false; + + aX += side.offsetX; + aY += side.offsetY; + aZ += side.offsetZ; + if ((!GTUtility.isBlockAir(aWorld, aX, aY, aZ)) + || (!aPlayer.canPlayerEdit(aX, aY, aZ, side.ordinal(), aStack))) { + return false; + } + prepare(aStack); + long tFuelAmount = GTUtility.ItemNBT.getLighterFuel(aStack); + if (GTUtility.areStacksEqual(aStack, this.mUsedLighter, true)) { + GTUtility.sendSoundToPlayers(aWorld, SoundResource.FIRE_IGNITE, 1.0F, 1.0F, aX, aY, aZ); + aWorld.setBlock(aX, aY, aZ, Blocks.fire); + if (!aPlayer.capabilities.isCreativeMode) { + tFuelAmount -= 1L; + } + rOutput = true; + } + GTUtility.ItemNBT.setLighterFuel(aStack, tFuelAmount); + if (tFuelAmount <= 0L) { + useUp(aStack); + } + return rOutput; + } + + private void prepare(ItemStack aStack) { + if (GTUtility.areStacksEqual(aStack, this.mFullLighter, true)) { + aStack.func_150996_a(this.mUsedLighter.getItem()); + Items.feather.setDamage(aStack, Items.feather.getDamage(this.mUsedLighter)); + GTUtility.ItemNBT.setLighterFuel(aStack, this.mFuelAmount); + } + } + + private void useUp(ItemStack aStack) { + if (this.mEmptyLighter == null) { + aStack.stackSize -= 1; + } else { + aStack.func_150996_a(this.mEmptyLighter.getItem()); + Items.feather.setDamage(aStack, Items.feather.getDamage(this.mEmptyLighter)); + } + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + NBTTagCompound tNBT = aStack.getTagCompound(); + long tFuelAmount = tNBT == null ? this.mFuelAmount + : GTUtility.areStacksEqual(aStack, this.mFullLighter, true) ? this.mFuelAmount + : tNBT.getLong("GT.LighterFuel"); + aList.add(this.mTooltipUses + " " + tFuelAmount); + aList.add(this.mTooltipUnstackable); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourNone.java b/src/main/java/gregtech/common/items/behaviors/BehaviourNone.java new file mode 100644 index 0000000000..f8b5f74b72 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourNone.java @@ -0,0 +1,90 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.block.BlockDispenser; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.dispenser.IPosition; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.SubTag; +import gregtech.api.interfaces.IItemBehaviour; +import gregtech.api.items.MetaBaseItem; + +public class BehaviourNone implements IItemBehaviour { + + @Override + public boolean onLeftClickEntity(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { + return false; + } + + @Override + public boolean onItemUse(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, + int aZ, int ordinalSide, float hitX, float hitY, float hitZ) { + return false; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + return false; + } + + @Override + public ItemStack onItemRightClick(MetaBaseItem aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + return aStack; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + return aList; + } + + @Override + public void onUpdate(MetaBaseItem aItem, ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, + boolean aIsInHand) {} + + @Override + public boolean isItemStackUsable(MetaBaseItem aItem, ItemStack aStack) { + return true; + } + + @Override + public boolean canDispense(MetaBaseItem aItem, IBlockSource aSource, ItemStack aStack) { + return false; + } + + @Override + public ItemStack onDispense(MetaBaseItem aItem, IBlockSource aSource, ItemStack aStack) { + EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata()); + IPosition iposition = BlockDispenser.func_149939_a(aSource); + ItemStack itemstack1 = aStack.splitStack(1); + BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition); + return aStack; + } + + @Override + public boolean hasProjectile(MetaBaseItem aItem, SubTag aProjectileType, ItemStack aStack) { + return false; + } + + @Override + public EntityArrow getProjectile(MetaBaseItem aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, + double aX, double aY, double aZ) { + return null; + } + + @Override + public EntityArrow getProjectile(MetaBaseItem aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, + EntityLivingBase aEntity, float aSpeed) { + return null; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourPlungerEssentia.java b/src/main/java/gregtech/common/items/behaviors/BehaviourPlungerEssentia.java new file mode 100644 index 0000000000..910ea2d2d4 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourPlungerEssentia.java @@ -0,0 +1,54 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.SoundResource; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import thaumcraft.api.aspects.IEssentiaTransport; + +public class BehaviourPlungerEssentia extends BehaviourNone { + + private final int mCosts; + private final String mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.plunger.essentia", "Clears Essentia from Containers and Tubes"); + + public BehaviourPlungerEssentia(int aCosts) { + this.mCosts = aCosts; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if (aWorld.isRemote) { + return false; + } + TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (((aTileEntity instanceof IEssentiaTransport)) + && ((aPlayer.capabilities.isCreativeMode) || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts)))) { + GTUtility.sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); + for (ForgeDirection tDirection : ForgeDirection.VALID_DIRECTIONS) { + ((IEssentiaTransport) aTileEntity).takeEssentia( + ((IEssentiaTransport) aTileEntity).getEssentiaType(tDirection), + ((IEssentiaTransport) aTileEntity).getEssentiaAmount(tDirection), + tDirection); + } + return true; + } + return false; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourPlungerFluid.java b/src/main/java/gregtech/common/items/behaviors/BehaviourPlungerFluid.java new file mode 100644 index 0000000000..b406b27b15 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourPlungerFluid.java @@ -0,0 +1,75 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.IFluidHandler; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; + +public class BehaviourPlungerFluid extends BehaviourNone { + + private final int mCosts; + private final String mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.plunger.fluid", "Clears 1000 Liters of Fluid from Tanks"); + + public BehaviourPlungerFluid(int aCosts) { + this.mCosts = aCosts; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if (aWorld.isRemote) { + return false; + } + TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if ((aTileEntity instanceof IFluidHandler)) { + for (ForgeDirection tDirection : ForgeDirection.VALID_DIRECTIONS) { + if (((IFluidHandler) aTileEntity).drain(tDirection, 1000, false) != null) { + if ((aPlayer.capabilities.isCreativeMode) + || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts))) { + ((IFluidHandler) aTileEntity).drain(tDirection, 1000, true); + GTUtility.sendSoundToPlayers( + aWorld, + SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, + 1.0F, + -1.0F, + aX, + aY, + aZ); + return true; + } + } + } + } + if (aTileEntity instanceof IGregTechTileEntity tTileEntity) { + IMetaTileEntity mTileEntity = tTileEntity.getMetaTileEntity(); + if (mTileEntity instanceof MTEBasicTank machine) { + if (machine.mFluid != null && machine.mFluid.amount > 0) + machine.mFluid.amount = machine.mFluid.amount - Math.min(machine.mFluid.amount, 1000); + GTUtility + .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); + return true; + } + } + return false; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourPlungerItem.java b/src/main/java/gregtech/common/items/behaviors/BehaviourPlungerItem.java new file mode 100644 index 0000000000..c0db5c76b4 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourPlungerItem.java @@ -0,0 +1,88 @@ +package gregtech.common.items.behaviors; + +import java.util.HashMap; +import java.util.List; + +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.metatileentity.IMetaTileEntityItemPipe; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; + +public class BehaviourPlungerItem extends BehaviourNone { + + private final int mCosts; + private final String mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.plunger.item", "Clears Items from Pipes"); + + public BehaviourPlungerItem(int aCosts) { + this.mCosts = aCosts; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if (aWorld.isRemote) { + return false; + } + TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (aTileEntity instanceof IGregTechTileEntity gtTE) { + IMetaTileEntity tMetaTileEntity = gtTE.getMetaTileEntity(); + if ((tMetaTileEntity instanceof IMetaTileEntityItemPipe)) { + for (IMetaTileEntityItemPipe tTileEntity : GTUtility + .sortMapByValuesAcending( + IMetaTileEntityItemPipe.Util + .scanPipes((IMetaTileEntityItemPipe) tMetaTileEntity, new HashMap<>(), 0L, false, true)) + .keySet()) { + int i = 0; + for (int j = tTileEntity.getSizeInventory(); i < j; i++) { + if (tTileEntity.isValidSlot(i)) { + if ((tTileEntity.getStackInSlot(i) != null) && ((aPlayer.capabilities.isCreativeMode) + || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts)))) { + final ItemStack tStack = tTileEntity.decrStackSize(i, 64); + if (tStack != null) { + final EntityItem tEntity = new EntityItem( + aWorld, + gtTE.getOffsetX(side, 1) + 0.5D, + gtTE.getOffsetY(side, 1) + 0.5D, + gtTE.getOffsetZ(side, 1) + 0.5D, + tStack); + tEntity.motionX = 0.0D; + tEntity.motionY = 0.0D; + tEntity.motionZ = 0.0D; + aWorld.spawnEntityInWorld(tEntity); + GTUtility.sendSoundToPlayers( + aWorld, + SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, + 1.0F, + -1.0F, + aX, + aY, + aZ); + } + return true; + } + } + } + } + } + } + return false; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourPrintedPages.java b/src/main/java/gregtech/common/items/behaviors/BehaviourPrintedPages.java new file mode 100644 index 0000000000..0716ffae7e --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourPrintedPages.java @@ -0,0 +1,39 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTUtility; + +public class BehaviourPrintedPages extends BehaviourNone { + + public static String getTitle(ItemStack aStack) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + return ""; + } + return tNBT.getString("title"); + } + + public static String getAuthor(ItemStack aStack) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + return ""; + } + return tNBT.getString("author"); + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + if (GTUtility.isStringValid(getTitle(aStack))) { + aList.add(getTitle(aStack)); + } + if (GTUtility.isStringValid(getAuthor(aStack))) { + aList.add("by " + getAuthor(aStack)); + } + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourProspecting.java b/src/main/java/gregtech/common/items/behaviors/BehaviourProspecting.java new file mode 100644 index 0000000000..98aed597f9 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourProspecting.java @@ -0,0 +1,158 @@ +package gregtech.common.items.behaviors; + +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockLiquid; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.IFluidBlock; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.objects.ItemData; +import gregtech.api.objects.XSTR; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.BlockOresAbstract; +import gregtech.common.blocks.TileEntityOres; + +public class BehaviourProspecting extends BehaviourNone { + + private final int mVanillaCosts; + private final int mEUCosts; + private final String mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.prospecting", "Usable for Prospecting"); + + public BehaviourProspecting(int aVanillaCosts, int aEUCosts) { + this.mVanillaCosts = aVanillaCosts; + this.mEUCosts = aEUCosts; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if (aWorld.isRemote) { + return false; + } + Block aBlock = aWorld.getBlock(aX, aY, aZ); + if (aBlock == null) { + return false; + } + byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ); + + ItemData tAssociation = GTOreDictUnificator.getAssociation(new ItemStack(aBlock, 1, aMeta)); + if (tAssociation != null && tAssociation.mPrefix != null + && tAssociation.mMaterial != null + && tAssociation.mPrefix.toString() + .startsWith("ore")) { + GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("100", "This is ") + tAssociation.mMaterial.mMaterial.mDefaultLocalName + + GTUtility.trans("101", " Ore.")); + GTUtility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_ANVIL_USE, 1.0F, -1.0F, aX, aY, aZ); + return true; + } + + if (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.stone) + || aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.netherrack) + || aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.end_stone) + || aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTechAPI.sBlockStones) + || aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTechAPI.sBlockGranites) + || aBlock == GregTechAPI.sBlockOresUb1 + || aBlock == GregTechAPI.sBlockOresUb2 + || aBlock == GregTechAPI.sBlockOresUb3 + || aBlock == GregTechAPI.sBlockOres1) { + if (GTModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { + GTUtility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_ANVIL_USE, 1.0F, -1.0F, aX, aY, aZ); + int tMetaID; + int tQuality = aItem instanceof MetaGeneratedTool ? aItem.getHarvestLevel(aStack, "") : 0; + int tX = aX, tY = aY, tZ = aZ; + Block tBlock; + for (int i = 0, j = 6 + tQuality; i < j; i++) { + tX -= side.offsetX; + tY -= side.offsetY; + tZ -= side.offsetZ; + + tBlock = aWorld.getBlock(tX, tY, tZ); + if (tBlock == Blocks.lava || tBlock == Blocks.flowing_lava) { + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("102", "There is Lava behind this Rock.")); + break; + } + if (tBlock instanceof BlockLiquid || tBlock instanceof IFluidBlock) { + GTUtility + .sendChatToPlayer(aPlayer, GTUtility.trans("103", "There is a Liquid behind this Rock.")); + break; + } + if (tBlock == Blocks.monster_egg || !GTUtility.hasBlockHitBox(aWorld, tX, tY, tZ)) { + GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("104", "There is an Air Pocket behind this Rock.")); + break; + } + if (tBlock != aBlock) { + if (i < 4) GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("105", "Material is changing behind this Rock.")); + break; + } + } + + final Random tRandom = new XSTR(aX ^ aY ^ aZ ^ side.ordinal()); + for (int i = 0, j = 9 + 2 * tQuality; i < j; i++) { + tX = aX - 4 - tQuality + tRandom.nextInt(j); + tY = aY - 4 - tQuality + tRandom.nextInt(j); + tZ = aZ - 4 - tQuality + tRandom.nextInt(j); + tBlock = aWorld.getBlock(tX, tY, tZ); + if (tBlock instanceof BlockOresAbstract) { + final TileEntity tTileEntity = aWorld.getTileEntity(tX, tY, tZ); + if (tTileEntity instanceof TileEntityOres) { + final Materials tMaterial = GregTechAPI.sGeneratedMaterials[((TileEntityOres) tTileEntity).mMetaData + % 1000]; + if (tMaterial != null && tMaterial != Materials._NULL) { + GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("106", "Found traces of ") + tMaterial.mDefaultLocalName + + GTUtility.trans("101", " Ore.")); + return true; + } + } + } else { + tMetaID = aWorld.getBlockMetadata(tX, tY, tZ); + tAssociation = GTOreDictUnificator.getAssociation(new ItemStack(tBlock, 1, tMetaID)); + if (tAssociation != null && tAssociation.mPrefix != null + && tAssociation.mMaterial != null + && tAssociation.mPrefix.toString() + .startsWith("ore")) { + GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("106", "Found traces of ") + + tAssociation.mMaterial.mMaterial.mDefaultLocalName + + GTUtility.trans("101", " Ore.")); + return true; + } + } + } + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("107", "No Ores found.")); + return true; + } + } + return false; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourScanner.java b/src/main/java/gregtech/common/items/behaviors/BehaviourScanner.java new file mode 100644 index 0000000000..75e702a3a7 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourScanner.java @@ -0,0 +1,65 @@ +package gregtech.common.items.behaviors; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IItemBehaviour; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; + +public class BehaviourScanner extends BehaviourNone { + + public static final IItemBehaviour INSTANCE = new BehaviourScanner(); + private final String mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.scanning", "Can scan Blocks in World"); + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + final NBTTagCompound tNBT = aStack.getTagCompound(); + if (((aPlayer instanceof EntityPlayerMP)) && (aItem.canUse(aStack, 20000.0D))) { + final ArrayList tList = new ArrayList<>(); + if (aItem.use( + aStack, + GTUtility.getCoordinateScan(tList, aPlayer, aWorld, 1, aX, aY, aZ, side, hitX, hitY, hitZ), + aPlayer)) { + final int tList_sS = tList.size(); + tNBT.setInteger("dataLinesCount", tList_sS); + for (int i = 0; i < tList_sS; i++) { + tNBT.setString("dataLines" + i, tList.get(i)); + GTUtility.sendChatToPlayer(aPlayer, tList.get(i)); + } + } + return true; + } + GTUtility.doSoundAtClient(SoundResource.IC2_TOOLS_OD_SCANNER, 1, 1.0F, aX, aY, aZ); + // doGuiAtClient() + return aPlayer instanceof EntityPlayerMP; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + try { + NBTTagCompound tNBT = aStack.getTagCompound(); + int lines = tNBT.getInteger("dataLinesCount"); + if (lines < 1) throw new Exception(); + aList.add(EnumChatFormatting.BLUE + "Block scan data result:"); + for (int i = 0; i < lines; i++) { + aList.add(EnumChatFormatting.RESET + tNBT.getString("dataLines" + i)); + } + } catch (Exception e) { + aList.add(this.mTooltip); + } + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourScoop.java b/src/main/java/gregtech/common/items/behaviors/BehaviourScoop.java new file mode 100644 index 0000000000..9f727dd8cc --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourScoop.java @@ -0,0 +1,62 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +import forestry.api.lepidopterology.EnumFlutterType; +import forestry.api.lepidopterology.IButterfly; +import forestry.api.lepidopterology.IEntityButterfly; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTLanguageManager; + +public class BehaviourScoop extends BehaviourNone { + + private final int mCosts; + private final String mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.scoop", "Catches Butterflies on Leftclick"); + + public BehaviourScoop(int aCosts) { + this.mCosts = aCosts; + } + + @Override + public boolean onLeftClickEntity(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { + if ((aEntity instanceof IEntityButterfly)) { + if (aPlayer.worldObj.isRemote) { + return true; + } + if ((aPlayer.capabilities.isCreativeMode) || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts))) { + IButterfly tButterfly = ((IEntityButterfly) aEntity).getButterfly(); + tButterfly.getGenome() + .getPrimary() + .getRoot() + .getBreedingTracker(aEntity.worldObj, aPlayer.getGameProfile()) + .registerCatch(tButterfly); + aPlayer.worldObj.spawnEntityInWorld( + new EntityItem( + aPlayer.worldObj, + aEntity.posX, + aEntity.posY, + aEntity.posZ, + tButterfly.getGenome() + .getPrimary() + .getRoot() + .getMemberStack(tButterfly.copy(), EnumFlutterType.BUTTERFLY.ordinal()))); + aEntity.setDead(); + } + return true; + } + return false; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourScrewdriver.java b/src/main/java/gregtech/common/items/behaviors/BehaviourScrewdriver.java new file mode 100644 index 0000000000..599398349f --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourScrewdriver.java @@ -0,0 +1,52 @@ +package gregtech.common.items.behaviors; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.SoundResource; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +public class BehaviourScrewdriver extends BehaviourNone { + + private final int mVanillaCosts; + private final int mEUCosts; + + public BehaviourScrewdriver(int aVanillaCosts, int aEUCosts) { + this.mVanillaCosts = aVanillaCosts; + this.mEUCosts = aEUCosts; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if (aWorld.isRemote) { + return false; + } + Block aBlock = aWorld.getBlock(aX, aY, aZ); + if (aBlock == null) { + return false; + } + byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ); + if ((aBlock == Blocks.unpowered_repeater) || (aBlock == Blocks.powered_repeater)) { + if (GTModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { + aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3); + GTUtility.sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1.0F, aX, aY, aZ); + } + return true; + } + if ((aBlock == Blocks.unpowered_comparator) || (aBlock == Blocks.powered_comparator)) { + if (GTModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { + aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3); + GTUtility.sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1.0F, aX, aY, aZ); + } + return true; + } + return false; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourSense.java b/src/main/java/gregtech/common/items/behaviors/BehaviourSense.java new file mode 100644 index 0000000000..eb55802207 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourSense.java @@ -0,0 +1,56 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTLanguageManager; +import ic2.api.crops.ICropTile; + +public class BehaviourSense extends BehaviourNone { + + private final int mCosts; + private final String mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.sense", "Rightclick to harvest Crop Sticks"); + + public BehaviourSense(int aCosts) { + this.mCosts = aCosts; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if (aWorld.isRemote) { + return false; + } + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if ((tTileEntity instanceof ICropTile)) { + for (int i = -2; i < 3; i++) { + for (int j = -2; j < 3; j++) { + for (int k = -2; k < 3; k++) { + if ((aStack.stackSize > 0) + && (((tTileEntity = aWorld.getTileEntity(aX + i, aY + j, aZ + k)) instanceof ICropTile)) + && (((ICropTile) tTileEntity).harvest(true)) + && (!aPlayer.capabilities.isCreativeMode)) { + ((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts / 20); + } + } + } + } + return true; + } + return false; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourSensorKit.java b/src/main/java/gregtech/common/items/behaviors/BehaviourSensorKit.java new file mode 100644 index 0000000000..70ec04551e --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourSensorKit.java @@ -0,0 +1,56 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.ItemList; +import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; + +public class BehaviourSensorKit extends BehaviourNone { + + private final String mTooltip = GTLanguageManager.addStringLocalization( + "gt.behaviour.sensorkit.tooltip", + "Used to display Information using the Mod Nuclear Control"); + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if ((aPlayer instanceof EntityPlayerMP)) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (((tTileEntity instanceof IInventory)) && (!((IInventory) tTileEntity).isUseableByPlayer(aPlayer))) { + return false; + } + if (((tTileEntity instanceof IGregTechDeviceInformation)) + && (((IGregTechDeviceInformation) tTileEntity).isGivingInformation())) { + GTUtility.setStack(aStack, ItemList.NC_SensorCard.get(aStack.stackSize)); + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } + tNBT.setInteger("x", aX); + tNBT.setInteger("y", aY); + tNBT.setInteger("z", aZ); + aStack.setTagCompound(tNBT); + } + return true; + } + return false; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourSoftHammer.java b/src/main/java/gregtech/common/items/behaviors/BehaviourSoftHammer.java new file mode 100644 index 0000000000..83e458276d --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourSoftHammer.java @@ -0,0 +1,123 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.SoundResource; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; + +public class BehaviourSoftHammer extends BehaviourNone { + + private final int mCosts; + private final String mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.softhammer", "Activates and Deactivates Machines"); + + public BehaviourSoftHammer(int aCosts) { + this.mCosts = aCosts; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if (aWorld.isRemote) { + return false; + } + Block aBlock = aWorld.getBlock(aX, aY, aZ); + if (aBlock == null) { + return false; + } + byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ); + if (aBlock == Blocks.lit_redstone_lamp) { + if ((aPlayer.capabilities.isCreativeMode) || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts))) { + aWorld.isRemote = true; + aWorld.setBlock(aX, aY, aZ, Blocks.redstone_lamp, 0, 0); + aWorld.isRemote = false; + GTUtility + .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); + } + return true; + } + if (aBlock == Blocks.redstone_lamp) { + if ((aPlayer.capabilities.isCreativeMode) || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts))) { + aWorld.isRemote = true; + aWorld.setBlock(aX, aY, aZ, Blocks.lit_redstone_lamp, 0, 0); + aWorld.isRemote = false; + GTUtility + .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); + } + return true; + } + if (aBlock == Blocks.golden_rail) { + if ((aPlayer.capabilities.isCreativeMode) || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts))) { + aWorld.isRemote = true; + aWorld.setBlock(aX, aY, aZ, aBlock, (aMeta + 8) % 16, 0); + aWorld.isRemote = false; + GTUtility + .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); + } + return true; + } + if (aBlock == Blocks.activator_rail) { + if ((aPlayer.capabilities.isCreativeMode) || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts))) { + aWorld.isRemote = true; + aWorld.setBlock(aX, aY, aZ, aBlock, (aMeta + 8) % 16, 0); + aWorld.isRemote = false; + GTUtility + .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); + } + return true; + } + if ((aBlock == Blocks.log) || (aBlock == Blocks.log2) || (aBlock == Blocks.hay_block)) { + if ((aPlayer.capabilities.isCreativeMode) || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts))) { + aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 4) % 12, 3); + } + return true; + } + if ((aBlock == Blocks.piston) || (aBlock == Blocks.sticky_piston) + || (aBlock == Blocks.dispenser) + || (aBlock == Blocks.dropper)) { + if ((aPlayer.capabilities.isCreativeMode) || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts))) { + aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 1) % 6, 3); + GTUtility + .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); + } + return true; + } + if ((aBlock == Blocks.pumpkin) || (aBlock == Blocks.lit_pumpkin) + || (aBlock == Blocks.furnace) + || (aBlock == Blocks.lit_furnace) + || (aBlock == Blocks.chest) + || (aBlock == Blocks.trapped_chest)) { + if ((aPlayer.capabilities.isCreativeMode) || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts))) { + aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta - 1) % 4 + 2, 3); + GTUtility + .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); + } + return true; + } + if (aBlock == Blocks.hopper) { + if ((aPlayer.capabilities.isCreativeMode) || (((MetaGeneratedTool) aItem).doDamage(aStack, this.mCosts))) { + aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 1) % 6 != 1 ? (aMeta + 1) % 6 : 2, 3); + GTUtility + .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); + } + return true; + } + return false; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourSonictron.java b/src/main/java/gregtech/common/items/behaviors/BehaviourSonictron.java new file mode 100644 index 0000000000..f362f7b3f4 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourSonictron.java @@ -0,0 +1,135 @@ +package gregtech.common.items.behaviors; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.IItemBehaviour; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTUtility; + +public class BehaviourSonictron extends BehaviourNone { + + public static final IItemBehaviour INSTANCE = new BehaviourSonictron(); + + public static int getCurrentIndex(ItemStack aStack) { + NBTTagCompound tNBTTagCompound = aStack.getTagCompound(); + if (tNBTTagCompound == null) { + tNBTTagCompound = new NBTTagCompound(); + } + return tNBTTagCompound.getInteger("mCurrentIndex"); + } + + public static int getTickTimer(ItemStack aStack) { + NBTTagCompound tNBTTagCompound = aStack.getTagCompound(); + if (tNBTTagCompound == null) { + tNBTTagCompound = new NBTTagCompound(); + } + return tNBTTagCompound.getInteger("mTickTimer"); + } + + public static NBTTagCompound setCurrentIndex(ItemStack aStack, int aIndex) { + NBTTagCompound tNBTTagCompound = aStack.getTagCompound(); + if (tNBTTagCompound == null) { + tNBTTagCompound = new NBTTagCompound(); + } + tNBTTagCompound.setInteger("mCurrentIndex", aIndex); + return tNBTTagCompound; + } + + public static NBTTagCompound setTickTimer(ItemStack aStack, int aTime) { + NBTTagCompound tNBTTagCompound = aStack.getTagCompound(); + if (tNBTTagCompound == null) { + tNBTTagCompound = new NBTTagCompound(); + } + tNBTTagCompound.setInteger("mTickTimer", aTime); + return tNBTTagCompound; + } + + public static ItemStack[] getNBTInventory(ItemStack aStack) { + ItemStack[] tInventory = new ItemStack[64]; + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + return tInventory; + } + NBTTagList tNBT_ItemList = tNBT.getTagList("Inventory", 10); + for (int i = 0; i < tNBT_ItemList.tagCount(); i++) { + NBTTagCompound tag = tNBT_ItemList.getCompoundTagAt(i); + byte slot = tag.getByte("Slot"); + if ((slot >= 0) && (slot < tInventory.length)) { + tInventory[slot] = GTUtility.loadItem(tag); + } + } + return tInventory; + } + + public static NBTTagCompound setNBTInventory(ItemStack aStack, ItemStack[] aInventory) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } + NBTTagList tNBT_ItemList = new NBTTagList(); + for (int i = 0; i < aInventory.length; i++) { + ItemStack stack = aInventory[i]; + if (stack != null) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setByte("Slot", (byte) i); + stack.writeToNBT(tag); + tNBT_ItemList.appendTag(tag); + } + } + tNBT.setTag("Inventory", tNBT_ItemList); + aStack.setTagCompound(tNBT); + return tNBT; + } + + public static void copyInventory(ItemStack[] aInventory, ItemStack[] aNewContent, int aIndexlength) { + for (int i = 0; i < aIndexlength; i++) { + if (aNewContent[i] == null) { + aInventory[i] = null; + } else { + aInventory[i] = GTUtility.copyOrNull(aNewContent[i]); + } + } + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + setCurrentIndex(aStack, -1); + return false; + } + + @Override + public ItemStack onItemRightClick(MetaBaseItem aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + setCurrentIndex(aStack, 0); + return aStack; + } + + @Override + public void onUpdate(MetaBaseItem aItem, ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, + boolean aIsInHand) { + int tTickTimer = getTickTimer(aStack); + int tCurrentIndex = getCurrentIndex(aStack); + if ((tTickTimer++ % 2 == 0) && (tCurrentIndex > -1)) { + ItemStack[] tInventory = getNBTInventory(aStack); + GTValues.GT.doSonictronSound( + tInventory[tCurrentIndex], + aPlayer.worldObj, + aPlayer.posX, + aPlayer.posY, + aPlayer.posZ); + tCurrentIndex++; + if (tCurrentIndex > 63) { + tCurrentIndex = -1; + } + } + setTickTimer(aStack, tTickTimer); + setCurrentIndex(aStack, tCurrentIndex); + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColor.java b/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColor.java new file mode 100644 index 0000000000..e79f8e0939 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColor.java @@ -0,0 +1,218 @@ +package gregtech.common.items.behaviors; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockColored; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import appeng.api.implementations.tiles.IColorableTile; +import appeng.api.util.AEColor; +import appeng.block.networking.BlockCableBus; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.common.config.other.ConfigGeneral; + +public class BehaviourSprayColor extends BehaviourNone { + + private final ItemStack mEmpty; + private final ItemStack mUsed; + private final ItemStack mFull; + private final long mUses; + private final byte mColor; + private final Collection mAllowedVanillaBlocks = Arrays.asList( + Blocks.glass, + Blocks.glass_pane, + Blocks.stained_glass, + Blocks.stained_glass_pane, + Blocks.carpet, + Blocks.hardened_clay); + protected String mTooltip; + private final String mTooltipUses = GTLanguageManager + .addStringLocalization("gt.behaviour.paintspray.uses", "Remaining Uses:"); + private final String mTooltipUnstackable = GTLanguageManager + .addStringLocalization("gt.behaviour.unstackable", "Not usable when stacked!"); + private final String mTooltipChain = GTLanguageManager.addStringLocalization( + "gt.behaviour.paintspray.chain", + "If used while sneaking it will spray a chain of blocks"); + + private final String mTooltipChainAmount = GTLanguageManager.addStringLocalization( + "gt.behaviour.paintspray.chain", + "Sprays up to %d blocks, in the direction you're looking at"); + + public BehaviourSprayColor(ItemStack aEmpty, ItemStack aUsed, ItemStack aFull, long aUses, int aColor) { + this.mEmpty = aEmpty; + this.mUsed = aUsed; + this.mFull = aFull; + this.mUses = aUses; + this.mColor = ((byte) aColor); + this.mTooltip = GTLanguageManager.addStringLocalization( + "gt.behaviour.paintspray." + this.mColor + ".tooltip", + "Can Color things in " + Dyes.get(this.mColor).mName); + } + + public BehaviourSprayColor(ItemStack aEmpty, ItemStack aUsed, ItemStack aFull, long aUses) { + this.mEmpty = aEmpty; + this.mUsed = aUsed; + this.mFull = aFull; + this.mUses = aUses; + this.mColor = 0; + mTooltip = ""; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + if ((aWorld.isRemote) || (aStack.stackSize != 1)) { + return false; + } + boolean rOutput = false; + if (!aPlayer.canPlayerEdit(aX, aY, aZ, side.ordinal(), aStack)) { + return false; + } + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } + long tUses = tNBT.getLong("GT.RemainingPaint"); + if (GTUtility.areStacksEqual(aStack, this.mFull, true)) { + aStack.func_150996_a(this.mUsed.getItem()); + Items.feather.setDamage(aStack, Items.feather.getDamage(this.mUsed)); + tUses = this.mUses; + } + int painted = 0; + int maxPainted = ConfigGeneral.sprayCanChainRange; + ForgeDirection lookSide; + Vec3 look = aPlayer.getLookVec(); + double absX = Math.abs(look.xCoord); + double absY = Math.abs(look.yCoord); + double absZ = Math.abs(look.zCoord); + if (absX > absY && absX > absZ) { + lookSide = look.xCoord > 0 ? ForgeDirection.EAST : ForgeDirection.WEST; + } else if (absY > absX && absY > absZ) { + lookSide = look.yCoord > 0 ? ForgeDirection.UP : ForgeDirection.DOWN; + } else { + lookSide = look.zCoord > 0 ? ForgeDirection.SOUTH : ForgeDirection.NORTH; + } + Block initialBlock = aWorld.getBlock(aX, aY, aZ); + int initialBlockMeta = aWorld.getBlockMetadata(aX, aY, aZ); + TileEntity initialTE = aWorld.getTileEntity(aX, aY, aZ); + while ((GTUtility.areStacksEqual(aStack, this.mUsed, true)) && (colorize(aWorld, aX, aY, aZ, side, aPlayer))) { + GTUtility.sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_PAINTER, 1.0F, 1.0F, aX, aY, aZ); + if (!aPlayer.capabilities.isCreativeMode) { + tUses -= 1L; + } + rOutput = true; + painted++; + if (painted >= maxPainted && maxPainted != -1) break; + if (!aPlayer.isSneaking() || tUses <= 0) break; + switch (lookSide) { + case UP -> aY += 1; + case DOWN -> aY -= 1; + case NORTH -> aZ -= 1; + case SOUTH -> aZ += 1; + case WEST -> aX -= 1; + case EAST -> aX += 1; + default -> throw new IllegalArgumentException("Unexpected value: " + lookSide); + } + + if (aWorld.getBlock(aX, aY, aZ) != initialBlock) break; + if (aWorld.getBlockMetadata(aX, aY, aZ) != initialBlockMeta) break; + + /* + * Check if the initial block had a TE and if the next one does, check if its the same kind. + * else one does and the other doesnt, thus stop checking. + */ + TileEntity targetTE = aWorld.getTileEntity(aX, aY, aZ); + if (initialTE == null ^ targetTE == null) break; + if (initialTE != null && targetTE != null) { + if (!initialTE.getClass() + .isInstance(targetTE)) break; + + if (initialTE instanceof IGregTechTileEntity currentGTTile + && targetTE instanceof IGregTechTileEntity targetGTTile) { + if (currentGTTile.getMetaTileID() != targetGTTile.getMetaTileID()) break; + } + } + } + tNBT.removeTag("GT.RemainingPaint"); + if (tUses > 0L) { + tNBT.setLong("GT.RemainingPaint", tUses); + } + if (tNBT.hasNoTags()) { + aStack.setTagCompound(null); + } else { + aStack.setTagCompound(tNBT); + } + if (tUses <= 0L) { + if (this.mEmpty == null) { + aStack.stackSize -= 1; + } else { + aStack.func_150996_a(this.mEmpty.getItem()); + Items.feather.setDamage(aStack, Items.feather.getDamage(this.mEmpty)); + } + } + return rOutput; + } + + protected boolean colorize(World aWorld, int aX, int aY, int aZ, ForgeDirection side, EntityPlayer player) { + final Block aBlock = aWorld.getBlock(aX, aY, aZ); + if (aBlock != Blocks.air) { + if (this.mAllowedVanillaBlocks.contains(aBlock) || aBlock instanceof BlockColored) { + if (aBlock == Blocks.hardened_clay) { + aWorld.setBlock(aX, aY, aZ, Blocks.stained_hardened_clay, (~this.mColor) & 0xF, 3); + return true; + } + if (aBlock == Blocks.glass_pane) { + aWorld.setBlock(aX, aY, aZ, Blocks.stained_glass_pane, (~this.mColor) & 0xF, 3); + return true; + } + if (aBlock == Blocks.glass) { + aWorld.setBlock(aX, aY, aZ, Blocks.stained_glass, (~this.mColor) & 0xF, 3); + return true; + } + if (aWorld.getBlockMetadata(aX, aY, aZ) == ((~this.mColor) & 0xF)) { + return false; + } + aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (~this.mColor) & 0xF, 3); + return true; + } + + if (aBlock instanceof IColorableTile) { + return ((IColorableTile) aBlock).recolourBlock(side, AEColor.values()[(~this.mColor) & 0xF], player); + } + + if (aBlock instanceof BlockCableBus) { + return ((BlockCableBus) aBlock).recolourBlock(aWorld, aX, aY, aZ, side, (~this.mColor) & 0xF, player); + } + } + return aBlock.recolourBlock(aWorld, aX, aY, aZ, side, (~this.mColor) & 0xF); + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + aList.add(this.mTooltipChain); + aList.add(String.format(this.mTooltipChainAmount, ConfigGeneral.sprayCanChainRange)); + NBTTagCompound tNBT = aStack.getTagCompound(); + long tRemainingPaint = tNBT == null ? this.mUses + : GTUtility.areStacksEqual(aStack, this.mFull, true) ? this.mUses : tNBT.getLong("GT.RemainingPaint"); + aList.add(this.mTooltipUses + " " + tRemainingPaint); + aList.add(this.mTooltipUnstackable); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorRemover.java b/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorRemover.java new file mode 100644 index 0000000000..cdf35161e3 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourSprayColorRemover.java @@ -0,0 +1,48 @@ +package gregtech.common.items.behaviors; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import appeng.api.implementations.tiles.IColorableTile; +import appeng.api.util.AEColor; +import appeng.block.networking.BlockCableBus; +import gregtech.api.interfaces.tileentity.IColoredTileEntity; +import gregtech.api.util.GTLanguageManager; + +public class BehaviourSprayColorRemover extends BehaviourSprayColor { + + public BehaviourSprayColorRemover(ItemStack aEmpty, ItemStack aUsed, ItemStack aFull, long aUses) { + super(aEmpty, aUsed, aFull, aUses); + this.mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.paintspray.solvent.tooltip", "Can remove paint from things"); + } + + @Override + protected boolean colorize(World aWorld, int aX, int aY, int aZ, ForgeDirection side, EntityPlayer player) { + final Block aBlock = aWorld.getBlock(aX, aY, aZ); + if (aBlock != Blocks.air) { + if (aBlock instanceof IColorableTile) { + return ((IColorableTile) aBlock).recolourBlock(side, AEColor.Transparent, player); + } + + if (aBlock instanceof BlockCableBus) { + return ((BlockCableBus) aBlock) + .recolourBlock(aWorld, aX, aY, aZ, side, AEColor.Transparent.ordinal(), player); + } + + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IColoredTileEntity gte) { + if (gte.getColorization() >= 0) { + gte.setColorization((byte) -1); + return true; + } + } + } + return false; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourSwitchMetadata.java b/src/main/java/gregtech/common/items/behaviors/BehaviourSwitchMetadata.java new file mode 100644 index 0000000000..0d195660c2 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourSwitchMetadata.java @@ -0,0 +1,67 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.items.GTGenericBlock; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTUtil; +import gregtech.api.util.GTUtility; + +public class BehaviourSwitchMetadata extends BehaviourNone { + + public final int mSwitchIndex; + public final boolean mCheckTarget, mShowModeSwitchTooltip; + + public BehaviourSwitchMetadata(int aSwitchIndex) { + this(aSwitchIndex, false); + } + + public BehaviourSwitchMetadata(int aSwitchIndex, boolean aCheckTarget) { + this(aSwitchIndex, aCheckTarget, false); + } + + public BehaviourSwitchMetadata(int aSwitchIndex, boolean aCheckTarget, boolean aShowModeSwitchTooltip) { + mSwitchIndex = aSwitchIndex; + mCheckTarget = aCheckTarget; + mShowModeSwitchTooltip = aShowModeSwitchTooltip; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + if (mShowModeSwitchTooltip) aList.add(GTUtility.trans("330", "Sneak Rightclick to switch Mode")); + return aList; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float aHitX, float aHitY, float aHitZ) { + if (aStack != null && (aPlayer == null || aPlayer.isSneaking()) && !aWorld.isRemote) { + if (mCheckTarget) { + Block aBlock = aWorld.blockExists(aX, aY, aZ) ? aWorld.getBlock(aX, aY, aZ) : Blocks.air; + if (aBlock instanceof GTGenericBlock) { + Items.feather.setDamage(aStack, (short) mSwitchIndex); + GTUtility.updateItemStack(aStack); + return true; + } + if (GTUtil.getTileEntity(aWorld, aX, aY, aZ, true) == null) { + Items.feather.setDamage(aStack, (short) mSwitchIndex); + GTUtility.updateItemStack(aStack); + return true; + } + return false; + } + Items.feather.setDamage(aStack, (short) mSwitchIndex); + GTUtility.updateItemStack(aStack); + return true; + } + return false; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourSwitchMode.java b/src/main/java/gregtech/common/items/behaviors/BehaviourSwitchMode.java new file mode 100644 index 0000000000..ba1730f805 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourSwitchMode.java @@ -0,0 +1,53 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +import gregtech.api.enums.GTValues; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.net.GTPacketToolSwitchMode; +import gregtech.api.util.GTUtility; + +public class BehaviourSwitchMode extends BehaviourNone { + + public BehaviourSwitchMode() {} + + @Override + public ItemStack onItemRightClick(MetaBaseItem aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + if (aStack != null && (aPlayer == null || aPlayer.isSneaking()) && aWorld.isRemote) { + + MetaGeneratedTool itemTool = (MetaGeneratedTool) aItem; + final byte maxMode = itemTool.getToolMaxMode(aStack); + if (maxMode == 1) { + return aStack; + } + + MovingObjectPosition mop = GTUtility.getPlayerLookingTarget(aPlayer); + if (mop == null) { + GTValues.NW.sendToServer(new GTPacketToolSwitchMode()); + } + return aStack; + } + return aStack; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + super.getAdditionalToolTips(aItem, aList, aStack); + if ((aItem instanceof MetaGeneratedTool)) { + MetaGeneratedTool itemTool = (MetaGeneratedTool) aItem; + final int maxMode = itemTool.getToolMaxMode(aStack); + if (maxMode > 1) { + aList.add("Shift+Rclick to change mode"); + } + } + + return aList; + } + +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourWrench.java b/src/main/java/gregtech/common/items/behaviors/BehaviourWrench.java new file mode 100644 index 0000000000..6155a6c739 --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourWrench.java @@ -0,0 +1,278 @@ +package gregtech.common.items.behaviors; + +import java.util.Arrays; +import java.util.List; +import java.util.function.BooleanSupplier; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; + +import appeng.api.parts.IPartHost; +import appeng.api.util.IOrientable; +import appeng.tile.misc.TileInterface; +import gregtech.api.enums.SoundResource; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import ic2.api.tile.IWrenchable; + +public class BehaviourWrench extends BehaviourNone { + + private final int mCosts; + private final String mTooltip = GTLanguageManager + .addStringLocalization("gt.behaviour.wrench", "Rotates Blocks on Rightclick"); + + public BehaviourWrench(int aCosts) { + this.mCosts = aCosts; + } + + @Override + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { + final Block aBlock = aWorld.getBlock(aX, aY, aZ); + if (aBlock == null) { + return false; + } + final int aMeta = aWorld.getBlockMetadata(aX, aY, aZ); + final short targetSideOrdinal = (short) GTUtility.determineWrenchingSide(side, hitX, hitY, hitZ) + .ordinal(); + final TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ); + + final WrenchHandler handler = new WrenchHandler( + aBlock, + aMeta, + targetSideOrdinal, + aTileEntity, + aPlayer, + aWorld, + aX, + aY, + aZ, + aStack, + (MetaGeneratedTool) aItem, + mCosts); + + try { + return handler.handle() && !aWorld.isRemote; + } catch (Throwable ignored) {} + return false; + } + + /** + *

+ * A class to simplify wrenching operation, + * stopping "checking creative", "trying to damage tool", + * "doing the logic" and "playing sound" again and again. + * This should have been a record, but it's not available in Java 8. + *

+ *

+ * {@link WrenchHandler#handle()} is the entry point of main logic. + *

+ */ + private static class WrenchHandler { + + boolean handle() { + ForgeDirection direction = ForgeDirection.getOrientation(targetSideOrdinal); + + // AE2 logic + // default to change the up facing + // sneak to change the forward facing + if (tileEntity instanceof IOrientable orientable) { + if (!orientable.canBeRotated()) return false; + ForgeDirection front = orientable.getForward(); + ForgeDirection up = orientable.getUp(); + + // mainly for me-interfaces, whose initial orientation is UNKNOWN + if (front == ForgeDirection.UNKNOWN) { + if (direction == ForgeDirection.UP || direction == ForgeDirection.DOWN) + front = ForgeDirection.NORTH; + else front = ForgeDirection.UP; + } + + ForgeDirection back = front.getOpposite(); + ForgeDirection down = up.getOpposite(); + + if (tileEntity instanceof TileInterface) { + if (player.isSneaking()) return false; + if (direction == down) { + return doWrenchOperation(costs, () -> { + orientable.setOrientation(ForgeDirection.UNKNOWN, ForgeDirection.UNKNOWN); + return true; + }); + } + // interface's up-side is opposite to the arrow on texture + // make it intuitive by rotating it to the opposite side. + direction = direction.getOpposite(); + up = up.getOpposite(); + } else if (direction == up || direction == front) { + // rotate around the direction axis + final var tempFront = front; + final var tempUp = up; + if (!player.isSneaking() && direction == up) return doWrenchOperation(costs, () -> { + orientable.setOrientation(tempFront.getRotation(tempUp), tempUp); + return true; + }); + if (player.isSneaking() && direction == front) return doWrenchOperation(costs, () -> { + orientable.setOrientation( + tempFront, + tempUp.getRotation(tempFront) + .getRotation(tempFront)); + return true; + }); + } + + if (player.isSneaking()) { + if (direction == up || direction == down) { + orientable.setOrientation(direction, down.getRotation(front.getRotation(direction))); + } else orientable.setOrientation(direction, up); + } else { + if (direction == front || direction == back) { + orientable.setOrientation(back.getRotation(up.getRotation(direction)), direction); + } else orientable.setOrientation(front, direction); + } + + return damageWrench(costs); + } + if (world.isRemote) return false; + // IC2 Wrenchable + if (tileEntity instanceof IWrenchable wrenchable) { + if (wrenchable.wrenchCanSetFacing(player, targetSideOrdinal)) { + return doWrenchOperation(costs, () -> { + wrenchable.setFacing(targetSideOrdinal); + return true; + }); + } + return false; + } + + if (block == Blocks.powered_repeater || block == Blocks.unpowered_repeater + || block == Blocks.powered_comparator + || block == Blocks.unpowered_comparator) return setBlockMeta(costs, meta / 4 * 4 + (meta % 4 + 1) % 4); + + // hopper cannot face sky + if (block == Blocks.hopper && targetSideOrdinal != 1) return setBlockMeta(costs, targetSideOrdinal); + + if (isVanillaAllSideRotatable(block)) if (meta < 6) return setBlockMeta(costs, targetSideOrdinal); + + // blocks like chests and furnaces have only four directions + if (isVanillaCantFaceAxisY(block)) { + if (targetSideOrdinal > 1) return setBlockMeta(costs, targetSideOrdinal); + else return false; + } + if (tileEntity instanceof IPartHost) return false; + + final int logWoodId = OreDictionary.getOreID("logWood"); + if (Arrays.stream(OreDictionary.getOreIDs(new ItemStack(block))) + .anyMatch(id -> id == logWoodId)) { + // The meta just work + return setBlockMeta(costs, (meta + 4) % 12); + } + + // vanilla block rotate logic + if ((Arrays.asList(block.getValidRotations(world, x, y, z)) + .contains(direction))) return rotateBlock(costs, direction); + return false; + + // GT blocks' rotations are done by blocks themselves after this returning false + } + + private final Block block; + private final short targetSideOrdinal; + private final TileEntity tileEntity; + private final EntityPlayer player; + private final World world; + private final int x, y, z, meta; + private final ItemStack stack; + + private final MetaGeneratedTool item; + private final int costs; + + public WrenchHandler(Block block, int meta, short targetSideOrdinal, TileEntity tileEntity, EntityPlayer player, + World world, int x, int y, int z, ItemStack stack, MetaGeneratedTool item, int costs) { + this.block = block; + this.meta = meta; + this.targetSideOrdinal = targetSideOrdinal; + this.tileEntity = tileEntity; + this.player = player; + this.world = world; + this.x = x; + this.y = y; + this.z = z; + this.stack = stack; + this.item = item; + this.costs = costs; + } + + /** + * this will run the operation, damage the tool and play the sound if possible (creative mode or + * {@link MetaGeneratedTool#canWrench(EntityPlayer, int, int, int)}) + * + * @param damage damage to be applied to the wrench + * @param operation the real operation of the click + * @return true if the operation was successful + * @see #setBlockMeta(int, int) + * @see #rotateBlock(int, ForgeDirection) + * @see #rotateBlock(int, ForgeDirection) + */ + boolean doWrenchOperation(int damage, BooleanSupplier operation) { + if (player.capabilities.isCreativeMode || item.canWrench(player, x, y, z)) { + if (operation.getAsBoolean()) { + item.doDamage(stack, damage); + GTUtility.sendSoundToPlayers(world, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1.0F, x, y, z); + return true; + } + } + return false; + } + + boolean setBlockMeta(int damage, int newMeta) { + return doWrenchOperation(damage, () -> setBlockMetadataWithNotify(newMeta)); + } + + boolean rotateBlock(int damage, ForgeDirection direction) { + return doWrenchOperation(damage, () -> block.rotateBlock(world, x, y, z, direction)); + } + + boolean damageWrench(int damage) { + return doWrenchOperation(damage, () -> true); + } + + private boolean setBlockMetadataWithNotify(int newMeta) { + return world.setBlockMetadataWithNotify(x, y, z, newMeta, 3); + } + + } + + public static boolean isVanillaRotatable(Block block) { + return isVanillaCantFaceAxisY(block) || isVanillaAllSideRotatable(block) || block == Blocks.hopper; + } + + public static boolean isVanillaCantFaceAxisY(Block block) { + return GTUtility.arrayContains( + block, + Blocks.pumpkin, + Blocks.lit_pumpkin, + Blocks.furnace, + Blocks.lit_furnace, + Blocks.chest, + Blocks.trapped_chest, + Blocks.ender_chest); + } + + public static boolean isVanillaAllSideRotatable(Block block) { + return GTUtility.arrayContains(block, Blocks.piston, Blocks.sticky_piston, Blocks.dispenser, Blocks.dropper); + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + aList.add(this.mTooltip); + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/BehaviourWrittenBook.java b/src/main/java/gregtech/common/items/behaviors/BehaviourWrittenBook.java new file mode 100644 index 0000000000..54aa3d8b0d --- /dev/null +++ b/src/main/java/gregtech/common/items/behaviors/BehaviourWrittenBook.java @@ -0,0 +1,40 @@ +package gregtech.common.items.behaviors; + +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.client.gui.GuiScreenBook; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTUtility; + +public class BehaviourWrittenBook extends BehaviourNone { + + @Override + @SideOnly(Side.CLIENT) + public boolean onItemUse(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, + int aZ, int ordinalSide, float hitX, float hitY, float hitZ) { + if ((GTUtility.isStringValid(GTUtility.ItemNBT.getBookTitle(aStack))) + && ((aPlayer instanceof EntityPlayerSP))) { + Minecraft.getMinecraft() + .displayGuiScreen(new GuiScreenBook(aPlayer, aStack, false)); + } + return true; + } + + @Override + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { + String tTitle = GTUtility.ItemNBT.getBookTitle(aStack); + if (GTUtility.isStringValid(tTitle)) { + aList.add(tTitle); + aList.add("by " + GTUtility.ItemNBT.getBookAuthor(aStack)); + } + return aList; + } +} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java deleted file mode 100644 index 4241e07e4b..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Cover_Tool.java +++ /dev/null @@ -1,193 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.IItemBehaviour; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; - -public class Behaviour_Cover_Tool extends Behaviour_None { - - public static final IItemBehaviour INSTANCE = new Behaviour_Cover_Tool(); - private final String mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.cover_copy_paste", "Can copy/paste cover data."); - - private ISerializableObject mStoredData = GregTech_API.sNoBehavior.createDataObject(); - private int mCoverType; - private int mTickRateAddition = 0; - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if (aWorld.isRemote) { - return false; - } - final NBTTagCompound tNBT = aStack.getTagCompound(); - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - final boolean isCopyMode = aPlayer.isSneaking(); - initDataFromNBT(tNBT); - if (((aPlayer instanceof EntityPlayerMP)) && (aItem.canUse(aStack, 100.0D))) { - if (isCopyMode) { - ArrayList tList = new ArrayList<>(); - doCopy(tTileEntity, aWorld, aX, aY, aZ, side, hitX, hitY, hitZ, tList); - aItem.discharge(aStack, 100.0D, Integer.MAX_VALUE, true, false, false); - writeListToNBT(tList, tNBT, aPlayer); - saveDataToNBT(tNBT); - } else { - doPaste(tTileEntity, side, hitX, hitY, hitZ, aPlayer); - aItem.discharge(aStack, 25.0D, Integer.MAX_VALUE, true, false, false); - } - } - GT_Utility.doSoundAtClient(SoundResource.IC2_TOOLS_OD_SCANNER, 1, 1.0F, aX, aY, aZ); - return aPlayer instanceof EntityPlayerMP; - } - - private void initDataFromNBT(NBTTagCompound aNBT) { - if (aNBT != null) { - mCoverType = aNBT.getInteger("mCoverType"); - GT_CoverBehaviorBase tBehavior = GregTech_API.getCoverBehaviorNew(mCoverType); - NBTBase tData = aNBT.getTag("mCoverData"); - if (tData != null) mStoredData = tBehavior.createDataObject(tData); - else mStoredData = GregTech_API.sNoBehavior.createDataObject(); - mTickRateAddition = aNBT.hasKey("mTickRateAddition") ? aNBT.getInteger("mTickRateAddition") : 0; - } - } - - private void saveDataToNBT(NBTTagCompound aNBT) { - aNBT.setInteger("mCoverType", mCoverType); - if (mStoredData == null) mStoredData = GregTech_API.sNoBehavior.createDataObject(); - aNBT.setTag("mCoverData", mStoredData.saveDataToNBT()); - aNBT.setInteger("mTickRateAddition", mTickRateAddition); - } - - @SuppressWarnings("rawtypes") - private void writeListToNBT(List aList, NBTTagCompound aNBT, EntityPlayer aPlayer) { - if (aList != null && aNBT != null) { - int tSize = aList.size(); - aNBT.setInteger("dataLinesCount", tSize); - for (int i = 0; i < tSize; i++) { - aNBT.setString("dataLines" + i, (String) aList.get(i)); - GT_Utility.sendChatToPlayer(aPlayer, (String) aList.get(i)); - } - } - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - private void doCopy(TileEntity aTileEntity, World aWorld, int aX, int aY, int aZ, ForgeDirection side, float hitX, - float hitY, float hitZ, List aList) { - aList.add( - "----- X: " + EnumChatFormatting.AQUA - + GT_Utility.formatNumbers(aX) - + EnumChatFormatting.RESET - + " Y: " - + EnumChatFormatting.AQUA - + GT_Utility.formatNumbers(aY) - + EnumChatFormatting.RESET - + " Z: " - + EnumChatFormatting.AQUA - + GT_Utility.formatNumbers(aZ) - + EnumChatFormatting.RESET - + " D: " - + EnumChatFormatting.AQUA - + aWorld.provider.dimensionId - + EnumChatFormatting.RESET - + " -----"); - if (aTileEntity instanceof ICoverable tCoverable) { - final ForgeDirection tSide = tCoverable.getCoverItemAtSide(side) != null ? side - : tCoverable.getCoverItemAtSide(GT_Utility.determineWrenchingSide(side, hitX, hitY, hitZ)) != null - ? GT_Utility.determineWrenchingSide(side, hitX, hitY, hitZ) - : ForgeDirection.UNKNOWN; - if (tSide != ForgeDirection.UNKNOWN) { - if (tCoverable.getCoverBehaviorAtSideNew(tSide) - .allowsCopyPasteTool()) { - mStoredData = tCoverable.getComplexCoverDataAtSide(tSide); - mCoverType = tCoverable.getCoverIDAtSide(tSide); - mTickRateAddition = tCoverable.getCoverInfoAtSide(tSide) - .getTickRateAddition(); - - aList.add("Block Side: " + EnumChatFormatting.AQUA + tSide.name() + EnumChatFormatting.RESET); - aList.add( - "Cover Type: " + EnumChatFormatting.GREEN - + tCoverable.getCoverItemAtSide(tSide) - .getDisplayName() - + EnumChatFormatting.RESET); - } else { - mStoredData = GregTech_API.sNoBehavior.createDataObject(); - mCoverType = 0; - mTickRateAddition = 0; - aList.add("Copy unavailable for this cover type"); - } - } else { - mStoredData = GregTech_API.sNoBehavior.createDataObject(); - mCoverType = 0; - mTickRateAddition = 0; - aList.add("No Cover Found"); - } - } else { - mStoredData = GregTech_API.sNoBehavior.createDataObject(); - mCoverType = 0; - mTickRateAddition = 0; - aList.add("No Cover Found"); - } - } - - private void doPaste(TileEntity aTileEntity, ForgeDirection side, float hitX, float hitY, float hitZ, - EntityPlayer aPlayer) { - if (aTileEntity instanceof ICoverable tCoverable) { - if (mCoverType == 0 || mStoredData == null) { - GT_Utility.sendChatToPlayer(aPlayer, "Please Copy a Valid Cover First."); - return; - } - final ForgeDirection tSide = tCoverable.getCoverItemAtSide(side) != null ? side - : tCoverable.getCoverItemAtSide(GT_Utility.determineWrenchingSide(side, hitX, hitY, hitZ)) != null - ? GT_Utility.determineWrenchingSide(side, hitX, hitY, hitZ) - : ForgeDirection.UNKNOWN; - if (tSide != ForgeDirection.UNKNOWN) { - int tCoverID = tCoverable.getCoverIDAtSide(tSide); - if (tCoverID == mCoverType) { - tCoverable.setCoverDataAtSide(tSide, mStoredData); - tCoverable.getCoverInfoAtSide(tSide) - .setTickRateAddition(mTickRateAddition); - GT_Utility.sendChatToPlayer(aPlayer, "Cover Data Pasted."); - } else { - GT_Utility.sendChatToPlayer(aPlayer, "Not Matched Cover."); - } - } else { - GT_Utility.sendChatToPlayer(aPlayer, "No Cover Found."); - } - } - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - try { - final NBTTagCompound tNBT = aStack.getTagCompound(); - final int tSize = tNBT.getInteger("dataLinesCount"); - if (tSize < 1) throw new Exception(); - aList.add(EnumChatFormatting.BLUE + "Stored Cover Data:"); - for (int i = 0; i < tSize; i++) { - aList.add(EnumChatFormatting.RESET + tNBT.getString("dataLines" + i)); - } - } catch (Exception e) { - aList.add(this.mTooltip); - } - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Crowbar.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Crowbar.java deleted file mode 100644 index 97d3da4ca3..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Crowbar.java +++ /dev/null @@ -1,61 +0,0 @@ -package gregtech.common.items.behaviors; - -import static gregtech.api.enums.Mods.Railcraft; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.SoundResource; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -public class Behaviour_Crowbar extends Behaviour_None { - - private final int mVanillaCosts; - private final int mEUCosts; - - public Behaviour_Crowbar(int aVanillaCosts, int aEUCosts) { - this.mVanillaCosts = aVanillaCosts; - this.mEUCosts = aEUCosts; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if (aWorld.isRemote) { - return false; - } - if (GT_ModHandler.getModItem(Railcraft.ID, "fluid.creosote.bucket", 1L) != null) { - return false; - } - Block aBlock = aWorld.getBlock(aX, aY, aZ); - if (aBlock == null) { - return false; - } - byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ); - if (aBlock == Blocks.rail) { - if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { - aWorld.isRemote = true; - aWorld.setBlock(aX, aY, aZ, aBlock, (aMeta + 1) % 10, 0); - aWorld.isRemote = false; - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_BREAK, 1.0F, -1.0F, aX, aY, aZ); - } - return true; - } - if ((aBlock == Blocks.detector_rail) || (aBlock == Blocks.activator_rail) || (aBlock == Blocks.golden_rail)) { - if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { - aWorld.isRemote = true; - aWorld.setBlock(aX, aY, aZ, aBlock, aMeta / 8 * 8 + (aMeta % 8 + 1) % 6, 0); - aWorld.isRemote = false; - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_BREAK, 1.0F, -1.0F, aX, aY, aZ); - } - return true; - } - return false; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_DataOrb.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_DataOrb.java deleted file mode 100644 index ae0627446c..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_DataOrb.java +++ /dev/null @@ -1,105 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; - -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_Utility; - -public class Behaviour_DataOrb extends Behaviour_None { - - public static void copyInventory(ItemStack[] aInventory, ItemStack[] aNewContent, int aIndexlength) { - for (int i = 0; i < aIndexlength; i++) { - if (aNewContent[i] == null) { - aInventory[i] = null; - } else { - aInventory[i] = GT_Utility.copyOrNull(aNewContent[i]); - } - } - } - - public static String getDataName(ItemStack aStack) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - return ""; - } - return tNBT.getString("mDataName"); - } - - public static String getDataTitle(ItemStack aStack) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - return ""; - } - return tNBT.getString("mDataTitle"); - } - - public static NBTTagCompound setDataName(ItemStack aStack, String aDataName) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - } - tNBT.setString("mDataName", aDataName); - aStack.setTagCompound(tNBT); - return tNBT; - } - - public static NBTTagCompound setDataTitle(ItemStack aStack, String aDataTitle) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - } - tNBT.setString("mDataTitle", aDataTitle); - aStack.setTagCompound(tNBT); - return tNBT; - } - - public static ItemStack[] getNBTInventory(ItemStack aStack) { - ItemStack[] tInventory = new ItemStack[256]; - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - return tInventory; - } - NBTTagList tNBT_ItemList = tNBT.getTagList("Inventory", 10); - for (int i = 0; i < tNBT_ItemList.tagCount(); i++) { - NBTTagCompound tag = tNBT_ItemList.getCompoundTagAt(i); - byte slot = tag.getByte("Slot"); - if (slot >= 0) { - tInventory[slot] = GT_Utility.loadItem(tag); - } - } - return tInventory; - } - - public static NBTTagCompound setNBTInventory(ItemStack aStack, ItemStack[] aInventory) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - } - NBTTagList tNBT_ItemList = new NBTTagList(); - for (int i = 0; i < aInventory.length; i++) { - ItemStack stack = aInventory[i]; - if (stack != null) { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("Slot", (byte) i); - stack.writeToNBT(tag); - tNBT_ItemList.appendTag(tag); - } - } - tNBT.setTag("Inventory", tNBT_ItemList); - aStack.setTagCompound(tNBT); - return tNBT; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - if (!(getDataTitle(aStack).length() == 0)) { - aList.add(getDataTitle(aStack)); - aList.add(getDataName(aStack)); - } - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_DataStick.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_DataStick.java deleted file mode 100644 index e9db3195c2..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_DataStick.java +++ /dev/null @@ -1,52 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.item.ItemStack; - -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_Utility; - -public class Behaviour_DataStick extends Behaviour_None { - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - String tString = GT_Utility.ItemNBT.getBookTitle(aStack); - if (GT_Utility.isStringValid(tString)) { - aList.add(tString); - } - tString = GT_Utility.ItemNBT.getBookAuthor(aStack); - if (GT_Utility.isStringValid(tString)) { - aList.add("by " + tString); - } - short tMapID = GT_Utility.ItemNBT.getMapID(aStack); - if (tMapID >= 0) { - aList.add("Map ID: " + tMapID); - } - tString = GT_Utility.ItemNBT.getPunchCardData(aStack); - if (GT_Utility.isStringValid(tString)) { - aList.add("Punch Card Data"); - int i = 0; - int j = tString.length(); - for (; i < j; i += 64) { - aList.add(tString.substring(i, Math.min(i + 64, j))); - } - } - short sTier = GT_Utility.ItemNBT.getNBT(aStack) - .getShort("rocket_tier"); - if (sTier > 0 && sTier < 100) { - aList.add("Rocket Schematic Tier: " + sTier); - } else if (sTier >= 100) { - switch (sTier) { - case 100 -> aList.add("Moonbuggy Schematic"); - case 101 -> aList.add("Cargo-Rocket Schematic"); - case 102 -> aList.add("Astro-Miner Schematic"); - } - } - long lastUpdate = GT_Utility.ItemNBT.getNBT(aStack) - .getLong("lastUpdate"); - if (lastUpdate != 0) aList.add(String.format("Last update at: %tc", lastUpdate)); - - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Hoe.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Hoe.java deleted file mode 100644 index 167eccdf49..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Hoe.java +++ /dev/null @@ -1,72 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.player.UseHoeEvent; - -import cpw.mods.fml.common.eventhandler.Event; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder; - -public class Behaviour_Hoe extends Behaviour_None { - - private final int mCosts; - private final String mTooltip = GT_LanguageManager.addStringLocalization("gt.behaviour.hoe", "Can till Dirt"); - - public Behaviour_Hoe(int aCosts) { - this.mCosts = aCosts; - } - - @Override - public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, int ordinalSide, float hitX, float hitY, float hitZ) { - if (!aPlayer.canPlayerEdit(aX, aY, aZ, ordinalSide, aStack)) { - return false; - } - UseHoeEvent event = new UseHoeEvent(aPlayer, aStack, aWorld, aX, aY, aZ); - if (MinecraftForge.EVENT_BUS.post(event)) { - return false; - } - if (event.getResult() == Event.Result.ALLOW) { - if (!aPlayer.capabilities.isCreativeMode) { - ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts); - } - return true; - } - Block aBlock = aWorld.getBlock(aX, aY, aZ); - if ((ordinalSide != 0) && (GT_Utility.isBlockAir(aWorld, aX, aY + 1, aZ)) - && ((aBlock == Blocks.grass) || (aBlock == Blocks.dirt))) { - new WorldSpawnedEventBuilder.SoundEventBuilder() - .setVolume((Blocks.farmland.stepSound.getVolume() + 1.0F) / 2.0F) - .setPitch(Blocks.farmland.stepSound.getPitch() * 0.8F) - .setIdentifier(Blocks.farmland.stepSound.getStepResourcePath()) - .setPosition(aX + 0.5F, aY + 0.5F, aZ + 0.5F) - .setWorld(aWorld) - .run(); - if (aWorld.isRemote) { - return true; - } - aWorld.setBlock(aX, aY, aZ, Blocks.farmland); - if (!aPlayer.capabilities.isCreativeMode) { - ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts); - } - return true; - } - return false; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Lighter.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Lighter.java deleted file mode 100644 index a4c26e2254..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Lighter.java +++ /dev/null @@ -1,140 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import codechicken.lib.math.MathHelper; -import gregtech.api.enums.SoundResource; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; - -public class Behaviour_Lighter extends Behaviour_None { - - private final ItemStack mEmptyLighter; - private final ItemStack mUsedLighter; - private final ItemStack mFullLighter; - private final long mFuelAmount; - private final String mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.lighter.tooltip", "Can light things on Fire"); - private final String mTooltipUses = GT_LanguageManager - .addStringLocalization("gt.behaviour.lighter.uses", "Remaining Uses:"); - private final String mTooltipUnstackable = GT_LanguageManager - .addStringLocalization("gt.behaviour.unstackable", "Not usable when stacked!"); - - public Behaviour_Lighter(ItemStack aEmptyLighter, ItemStack aUsedLighter, ItemStack aFullLighter, - long aFuelAmount) { - this.mFullLighter = aFullLighter; - this.mUsedLighter = aUsedLighter; - this.mEmptyLighter = aEmptyLighter; - this.mFuelAmount = aFuelAmount; - } - - @Override - public boolean onLeftClickEntity(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { - if ((aPlayer.worldObj.isRemote) || (aStack.stackSize != 1)) { - return false; - } - boolean rOutput = false; - if ((aEntity instanceof EntityCreeper)) { - prepare(aStack); - long tFuelAmount = GT_Utility.ItemNBT.getLighterFuel(aStack); - if (GT_Utility.areStacksEqual(aStack, this.mUsedLighter, true)) { - GT_Utility.sendSoundToPlayers( - aPlayer.worldObj, - SoundResource.FIRE_IGNITE, - 1.0F, - 1.0F, - MathHelper.floor_double(aEntity.posX), - MathHelper.floor_double(aEntity.posY), - MathHelper.floor_double(aEntity.posZ)); - ((EntityCreeper) aEntity).func_146079_cb(); - if (!aPlayer.capabilities.isCreativeMode) { - tFuelAmount -= 1L; - } - rOutput = true; - } - GT_Utility.ItemNBT.setLighterFuel(aStack, tFuelAmount); - if (tFuelAmount <= 0L) { - useUp(aStack); - } - } - return rOutput; - } - - @Override - public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, int ordinalSide, float hitX, float hitY, float hitZ) { - return false; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if ((aWorld.isRemote) || (aStack.stackSize != 1)) { - return false; - } - boolean rOutput = false; - - aX += side.offsetX; - aY += side.offsetY; - aZ += side.offsetZ; - if ((!GT_Utility.isBlockAir(aWorld, aX, aY, aZ)) - || (!aPlayer.canPlayerEdit(aX, aY, aZ, side.ordinal(), aStack))) { - return false; - } - prepare(aStack); - long tFuelAmount = GT_Utility.ItemNBT.getLighterFuel(aStack); - if (GT_Utility.areStacksEqual(aStack, this.mUsedLighter, true)) { - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.FIRE_IGNITE, 1.0F, 1.0F, aX, aY, aZ); - aWorld.setBlock(aX, aY, aZ, Blocks.fire); - if (!aPlayer.capabilities.isCreativeMode) { - tFuelAmount -= 1L; - } - rOutput = true; - } - GT_Utility.ItemNBT.setLighterFuel(aStack, tFuelAmount); - if (tFuelAmount <= 0L) { - useUp(aStack); - } - return rOutput; - } - - private void prepare(ItemStack aStack) { - if (GT_Utility.areStacksEqual(aStack, this.mFullLighter, true)) { - aStack.func_150996_a(this.mUsedLighter.getItem()); - Items.feather.setDamage(aStack, Items.feather.getDamage(this.mUsedLighter)); - GT_Utility.ItemNBT.setLighterFuel(aStack, this.mFuelAmount); - } - } - - private void useUp(ItemStack aStack) { - if (this.mEmptyLighter == null) { - aStack.stackSize -= 1; - } else { - aStack.func_150996_a(this.mEmptyLighter.getItem()); - Items.feather.setDamage(aStack, Items.feather.getDamage(this.mEmptyLighter)); - } - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - NBTTagCompound tNBT = aStack.getTagCompound(); - long tFuelAmount = tNBT == null ? this.mFuelAmount - : GT_Utility.areStacksEqual(aStack, this.mFullLighter, true) ? this.mFuelAmount - : tNBT.getLong("GT.LighterFuel"); - aList.add(this.mTooltipUses + " " + tFuelAmount); - aList.add(this.mTooltipUnstackable); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_None.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_None.java deleted file mode 100644 index c31ddc723d..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_None.java +++ /dev/null @@ -1,90 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.block.BlockDispenser; -import net.minecraft.dispenser.BehaviorDefaultDispenseItem; -import net.minecraft.dispenser.IBlockSource; -import net.minecraft.dispenser.IPosition; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.SubTag; -import gregtech.api.interfaces.IItemBehaviour; -import gregtech.api.items.GT_MetaBase_Item; - -public class Behaviour_None implements IItemBehaviour { - - @Override - public boolean onLeftClickEntity(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { - return false; - } - - @Override - public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, int ordinalSide, float hitX, float hitY, float hitZ) { - return false; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - return false; - } - - @Override - public ItemStack onItemRightClick(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - return aStack; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - return aList; - } - - @Override - public void onUpdate(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, - boolean aIsInHand) {} - - @Override - public boolean isItemStackUsable(GT_MetaBase_Item aItem, ItemStack aStack) { - return true; - } - - @Override - public boolean canDispense(GT_MetaBase_Item aItem, IBlockSource aSource, ItemStack aStack) { - return false; - } - - @Override - public ItemStack onDispense(GT_MetaBase_Item aItem, IBlockSource aSource, ItemStack aStack) { - EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata()); - IPosition iposition = BlockDispenser.func_149939_a(aSource); - ItemStack itemstack1 = aStack.splitStack(1); - BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition); - return aStack; - } - - @Override - public boolean hasProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack) { - return false; - } - - @Override - public EntityArrow getProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, - double aX, double aY, double aZ) { - return null; - } - - @Override - public EntityArrow getProjectile(GT_MetaBase_Item aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, - EntityLivingBase aEntity, float aSpeed) { - return null; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Essentia.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Essentia.java deleted file mode 100644 index 867eb25103..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Essentia.java +++ /dev/null @@ -1,54 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.SoundResource; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import thaumcraft.api.aspects.IEssentiaTransport; - -public class Behaviour_Plunger_Essentia extends Behaviour_None { - - private final int mCosts; - private final String mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.plunger.essentia", "Clears Essentia from Containers and Tubes"); - - public Behaviour_Plunger_Essentia(int aCosts) { - this.mCosts = aCosts; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if (aWorld.isRemote) { - return false; - } - TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (((aTileEntity instanceof IEssentiaTransport)) && ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts)))) { - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); - for (ForgeDirection tDirection : ForgeDirection.VALID_DIRECTIONS) { - ((IEssentiaTransport) aTileEntity).takeEssentia( - ((IEssentiaTransport) aTileEntity).getEssentiaType(tDirection), - ((IEssentiaTransport) aTileEntity).getEssentiaAmount(tDirection), - tDirection); - } - return true; - } - return false; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Fluid.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Fluid.java deleted file mode 100644 index c62cb5c4e5..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Fluid.java +++ /dev/null @@ -1,75 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.IFluidHandler; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; - -public class Behaviour_Plunger_Fluid extends Behaviour_None { - - private final int mCosts; - private final String mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.plunger.fluid", "Clears 1000 Liters of Fluid from Tanks"); - - public Behaviour_Plunger_Fluid(int aCosts) { - this.mCosts = aCosts; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if (aWorld.isRemote) { - return false; - } - TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if ((aTileEntity instanceof IFluidHandler)) { - for (ForgeDirection tDirection : ForgeDirection.VALID_DIRECTIONS) { - if (((IFluidHandler) aTileEntity).drain(tDirection, 1000, false) != null) { - if ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) { - ((IFluidHandler) aTileEntity).drain(tDirection, 1000, true); - GT_Utility.sendSoundToPlayers( - aWorld, - SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, - 1.0F, - -1.0F, - aX, - aY, - aZ); - return true; - } - } - } - } - if (aTileEntity instanceof IGregTechTileEntity tTileEntity) { - IMetaTileEntity mTileEntity = tTileEntity.getMetaTileEntity(); - if (mTileEntity instanceof GT_MetaTileEntity_BasicTank machine) { - if (machine.mFluid != null && machine.mFluid.amount > 0) - machine.mFluid.amount = machine.mFluid.amount - Math.min(machine.mFluid.amount, 1000); - GT_Utility - .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); - return true; - } - } - return false; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Item.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Item.java deleted file mode 100644 index a5fa868a00..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Plunger_Item.java +++ /dev/null @@ -1,88 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.HashMap; -import java.util.List; - -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.metatileentity.IMetaTileEntityItemPipe; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; - -public class Behaviour_Plunger_Item extends Behaviour_None { - - private final int mCosts; - private final String mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.plunger.item", "Clears Items from Pipes"); - - public Behaviour_Plunger_Item(int aCosts) { - this.mCosts = aCosts; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if (aWorld.isRemote) { - return false; - } - TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (aTileEntity instanceof IGregTechTileEntity gtTE) { - IMetaTileEntity tMetaTileEntity = gtTE.getMetaTileEntity(); - if ((tMetaTileEntity instanceof IMetaTileEntityItemPipe)) { - for (IMetaTileEntityItemPipe tTileEntity : GT_Utility - .sortMapByValuesAcending( - IMetaTileEntityItemPipe.Util - .scanPipes((IMetaTileEntityItemPipe) tMetaTileEntity, new HashMap<>(), 0L, false, true)) - .keySet()) { - int i = 0; - for (int j = tTileEntity.getSizeInventory(); i < j; i++) { - if (tTileEntity.isValidSlot(i)) { - if ((tTileEntity.getStackInSlot(i) != null) && ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts)))) { - final ItemStack tStack = tTileEntity.decrStackSize(i, 64); - if (tStack != null) { - final EntityItem tEntity = new EntityItem( - aWorld, - gtTE.getOffsetX(side, 1) + 0.5D, - gtTE.getOffsetY(side, 1) + 0.5D, - gtTE.getOffsetZ(side, 1) + 0.5D, - tStack); - tEntity.motionX = 0.0D; - tEntity.motionY = 0.0D; - tEntity.motionZ = 0.0D; - aWorld.spawnEntityInWorld(tEntity); - GT_Utility.sendSoundToPlayers( - aWorld, - SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, - 1.0F, - -1.0F, - aX, - aY, - aZ); - } - return true; - } - } - } - } - } - } - return false; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_PrintedPages.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_PrintedPages.java deleted file mode 100644 index e3c4d58525..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_PrintedPages.java +++ /dev/null @@ -1,39 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_Utility; - -public class Behaviour_PrintedPages extends Behaviour_None { - - public static String getTitle(ItemStack aStack) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - return ""; - } - return tNBT.getString("title"); - } - - public static String getAuthor(ItemStack aStack) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - return ""; - } - return tNBT.getString("author"); - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - if (GT_Utility.isStringValid(getTitle(aStack))) { - aList.add(getTitle(aStack)); - } - if (GT_Utility.isStringValid(getAuthor(aStack))) { - aList.add("by " + getAuthor(aStack)); - } - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Prospecting.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Prospecting.java deleted file mode 100644 index e64722fb87..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Prospecting.java +++ /dev/null @@ -1,159 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockLiquid; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.IFluidBlock; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.objects.ItemData; -import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_TileEntity_Ores; - -public class Behaviour_Prospecting extends Behaviour_None { - - private final int mVanillaCosts; - private final int mEUCosts; - private final String mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.prospecting", "Usable for Prospecting"); - - public Behaviour_Prospecting(int aVanillaCosts, int aEUCosts) { - this.mVanillaCosts = aVanillaCosts; - this.mEUCosts = aEUCosts; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if (aWorld.isRemote) { - return false; - } - Block aBlock = aWorld.getBlock(aX, aY, aZ); - if (aBlock == null) { - return false; - } - byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ); - - ItemData tAssociation = GT_OreDictUnificator.getAssociation(new ItemStack(aBlock, 1, aMeta)); - if (tAssociation != null && tAssociation.mPrefix != null - && tAssociation.mMaterial != null - && tAssociation.mPrefix.toString() - .startsWith("ore")) { - GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("100", "This is ") + tAssociation.mMaterial.mMaterial.mDefaultLocalName - + GT_Utility.trans("101", " Ore.")); - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_ANVIL_USE, 1.0F, -1.0F, aX, aY, aZ); - return true; - } - - if (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.stone) - || aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.netherrack) - || aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.end_stone) - || aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTech_API.sBlockStones) - || aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTech_API.sBlockGranites) - || aBlock == GregTech_API.sBlockOresUb1 - || aBlock == GregTech_API.sBlockOresUb2 - || aBlock == GregTech_API.sBlockOresUb3 - || aBlock == GregTech_API.sBlockOres1) { - if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_ANVIL_USE, 1.0F, -1.0F, aX, aY, aZ); - int tMetaID; - int tQuality = aItem instanceof GT_MetaGenerated_Tool ? aItem.getHarvestLevel(aStack, "") : 0; - int tX = aX, tY = aY, tZ = aZ; - Block tBlock; - for (int i = 0, j = 6 + tQuality; i < j; i++) { - tX -= side.offsetX; - tY -= side.offsetY; - tZ -= side.offsetZ; - - tBlock = aWorld.getBlock(tX, tY, tZ); - if (tBlock == Blocks.lava || tBlock == Blocks.flowing_lava) { - GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("102", "There is Lava behind this Rock.")); - break; - } - if (tBlock instanceof BlockLiquid || tBlock instanceof IFluidBlock) { - GT_Utility - .sendChatToPlayer(aPlayer, GT_Utility.trans("103", "There is a Liquid behind this Rock.")); - break; - } - if (tBlock == Blocks.monster_egg || !GT_Utility.hasBlockHitBox(aWorld, tX, tY, tZ)) { - GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("104", "There is an Air Pocket behind this Rock.")); - break; - } - if (tBlock != aBlock) { - if (i < 4) GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("105", "Material is changing behind this Rock.")); - break; - } - } - - final Random tRandom = new XSTR(aX ^ aY ^ aZ ^ side.ordinal()); - for (int i = 0, j = 9 + 2 * tQuality; i < j; i++) { - tX = aX - 4 - tQuality + tRandom.nextInt(j); - tY = aY - 4 - tQuality + tRandom.nextInt(j); - tZ = aZ - 4 - tQuality + tRandom.nextInt(j); - tBlock = aWorld.getBlock(tX, tY, tZ); - if (tBlock instanceof GT_Block_Ores_Abstract) { - final TileEntity tTileEntity = aWorld.getTileEntity(tX, tY, tZ); - if (tTileEntity instanceof GT_TileEntity_Ores) { - final Materials tMaterial = GregTech_API.sGeneratedMaterials[((GT_TileEntity_Ores) tTileEntity).mMetaData - % 1000]; - if (tMaterial != null && tMaterial != Materials._NULL) { - GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("106", "Found traces of ") + tMaterial.mDefaultLocalName - + GT_Utility.trans("101", " Ore.")); - return true; - } - } - } else { - tMetaID = aWorld.getBlockMetadata(tX, tY, tZ); - tAssociation = GT_OreDictUnificator.getAssociation(new ItemStack(tBlock, 1, tMetaID)); - if (tAssociation != null && tAssociation.mPrefix != null - && tAssociation.mMaterial != null - && tAssociation.mPrefix.toString() - .startsWith("ore")) { - GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("106", "Found traces of ") - + tAssociation.mMaterial.mMaterial.mDefaultLocalName - + GT_Utility.trans("101", " Ore.")); - return true; - } - } - } - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("107", "No Ores found.")); - return true; - } - } - return false; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Scanner.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Scanner.java deleted file mode 100644 index 22b708e384..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Scanner.java +++ /dev/null @@ -1,65 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.IItemBehaviour; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; - -public class Behaviour_Scanner extends Behaviour_None { - - public static final IItemBehaviour INSTANCE = new Behaviour_Scanner(); - private final String mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.scanning", "Can scan Blocks in World"); - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - final NBTTagCompound tNBT = aStack.getTagCompound(); - if (((aPlayer instanceof EntityPlayerMP)) && (aItem.canUse(aStack, 20000.0D))) { - final ArrayList tList = new ArrayList<>(); - if (aItem.use( - aStack, - GT_Utility.getCoordinateScan(tList, aPlayer, aWorld, 1, aX, aY, aZ, side, hitX, hitY, hitZ), - aPlayer)) { - final int tList_sS = tList.size(); - tNBT.setInteger("dataLinesCount", tList_sS); - for (int i = 0; i < tList_sS; i++) { - tNBT.setString("dataLines" + i, tList.get(i)); - GT_Utility.sendChatToPlayer(aPlayer, tList.get(i)); - } - } - return true; - } - GT_Utility.doSoundAtClient(SoundResource.IC2_TOOLS_OD_SCANNER, 1, 1.0F, aX, aY, aZ); - // doGuiAtClient() - return aPlayer instanceof EntityPlayerMP; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - try { - NBTTagCompound tNBT = aStack.getTagCompound(); - int lines = tNBT.getInteger("dataLinesCount"); - if (lines < 1) throw new Exception(); - aList.add(EnumChatFormatting.BLUE + "Block scan data result:"); - for (int i = 0; i < lines; i++) { - aList.add(EnumChatFormatting.RESET + tNBT.getString("dataLines" + i)); - } - } catch (Exception e) { - aList.add(this.mTooltip); - } - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Scoop.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Scoop.java deleted file mode 100644 index 65be65a96d..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Scoop.java +++ /dev/null @@ -1,63 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -import forestry.api.lepidopterology.EnumFlutterType; -import forestry.api.lepidopterology.IButterfly; -import forestry.api.lepidopterology.IEntityButterfly; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_LanguageManager; - -public class Behaviour_Scoop extends Behaviour_None { - - private final int mCosts; - private final String mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.scoop", "Catches Butterflies on Leftclick"); - - public Behaviour_Scoop(int aCosts) { - this.mCosts = aCosts; - } - - @Override - public boolean onLeftClickEntity(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { - if ((aEntity instanceof IEntityButterfly)) { - if (aPlayer.worldObj.isRemote) { - return true; - } - if ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) { - IButterfly tButterfly = ((IEntityButterfly) aEntity).getButterfly(); - tButterfly.getGenome() - .getPrimary() - .getRoot() - .getBreedingTracker(aEntity.worldObj, aPlayer.getGameProfile()) - .registerCatch(tButterfly); - aPlayer.worldObj.spawnEntityInWorld( - new EntityItem( - aPlayer.worldObj, - aEntity.posX, - aEntity.posY, - aEntity.posZ, - tButterfly.getGenome() - .getPrimary() - .getRoot() - .getMemberStack(tButterfly.copy(), EnumFlutterType.BUTTERFLY.ordinal()))); - aEntity.setDead(); - } - return true; - } - return false; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Screwdriver.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Screwdriver.java deleted file mode 100644 index d940226b84..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Screwdriver.java +++ /dev/null @@ -1,52 +0,0 @@ -package gregtech.common.items.behaviors; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.SoundResource; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -public class Behaviour_Screwdriver extends Behaviour_None { - - private final int mVanillaCosts; - private final int mEUCosts; - - public Behaviour_Screwdriver(int aVanillaCosts, int aEUCosts) { - this.mVanillaCosts = aVanillaCosts; - this.mEUCosts = aEUCosts; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if (aWorld.isRemote) { - return false; - } - Block aBlock = aWorld.getBlock(aX, aY, aZ); - if (aBlock == null) { - return false; - } - byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ); - if ((aBlock == Blocks.unpowered_repeater) || (aBlock == Blocks.powered_repeater)) { - if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { - aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3); - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1.0F, aX, aY, aZ); - } - return true; - } - if ((aBlock == Blocks.unpowered_comparator) || (aBlock == Blocks.powered_comparator)) { - if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { - aWorld.setBlockMetadataWithNotify(aX, aY, aZ, aMeta / 4 * 4 + (aMeta % 4 + 1) % 4, 3); - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1.0F, aX, aY, aZ); - } - return true; - } - return false; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Sense.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Sense.java deleted file mode 100644 index b2ab0031ad..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Sense.java +++ /dev/null @@ -1,56 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_LanguageManager; -import ic2.api.crops.ICropTile; - -public class Behaviour_Sense extends Behaviour_None { - - private final int mCosts; - private final String mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.sense", "Rightclick to harvest Crop Sticks"); - - public Behaviour_Sense(int aCosts) { - this.mCosts = aCosts; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if (aWorld.isRemote) { - return false; - } - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if ((tTileEntity instanceof ICropTile)) { - for (int i = -2; i < 3; i++) { - for (int j = -2; j < 3; j++) { - for (int k = -2; k < 3; k++) { - if ((aStack.stackSize > 0) - && (((tTileEntity = aWorld.getTileEntity(aX + i, aY + j, aZ + k)) instanceof ICropTile)) - && (((ICropTile) tTileEntity).harvest(true)) - && (!aPlayer.capabilities.isCreativeMode)) { - ((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts / 20); - } - } - } - } - return true; - } - return false; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_SensorKit.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_SensorKit.java deleted file mode 100644 index b12159d058..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_SensorKit.java +++ /dev/null @@ -1,56 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.ItemList; -import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; - -public class Behaviour_SensorKit extends Behaviour_None { - - private final String mTooltip = GT_LanguageManager.addStringLocalization( - "gt.behaviour.sensorkit.tooltip", - "Used to display Information using the Mod Nuclear Control"); - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if ((aPlayer instanceof EntityPlayerMP)) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (((tTileEntity instanceof IInventory)) && (!((IInventory) tTileEntity).isUseableByPlayer(aPlayer))) { - return false; - } - if (((tTileEntity instanceof IGregTechDeviceInformation)) - && (((IGregTechDeviceInformation) tTileEntity).isGivingInformation())) { - GT_Utility.setStack(aStack, ItemList.NC_SensorCard.get(aStack.stackSize)); - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - } - tNBT.setInteger("x", aX); - tNBT.setInteger("y", aY); - tNBT.setInteger("z", aZ); - aStack.setTagCompound(tNBT); - } - return true; - } - return false; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_SoftHammer.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_SoftHammer.java deleted file mode 100644 index 159a0c4b27..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_SoftHammer.java +++ /dev/null @@ -1,131 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.SoundResource; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; - -public class Behaviour_SoftHammer extends Behaviour_None { - - private final int mCosts; - private final String mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.softhammer", "Activates and Deactivates Machines"); - - public Behaviour_SoftHammer(int aCosts) { - this.mCosts = aCosts; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if (aWorld.isRemote) { - return false; - } - Block aBlock = aWorld.getBlock(aX, aY, aZ); - if (aBlock == null) { - return false; - } - byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ); - if (aBlock == Blocks.lit_redstone_lamp) { - if ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) { - aWorld.isRemote = true; - aWorld.setBlock(aX, aY, aZ, Blocks.redstone_lamp, 0, 0); - aWorld.isRemote = false; - GT_Utility - .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); - } - return true; - } - if (aBlock == Blocks.redstone_lamp) { - if ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) { - aWorld.isRemote = true; - aWorld.setBlock(aX, aY, aZ, Blocks.lit_redstone_lamp, 0, 0); - aWorld.isRemote = false; - GT_Utility - .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); - } - return true; - } - if (aBlock == Blocks.golden_rail) { - if ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) { - aWorld.isRemote = true; - aWorld.setBlock(aX, aY, aZ, aBlock, (aMeta + 8) % 16, 0); - aWorld.isRemote = false; - GT_Utility - .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); - } - return true; - } - if (aBlock == Blocks.activator_rail) { - if ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) { - aWorld.isRemote = true; - aWorld.setBlock(aX, aY, aZ, aBlock, (aMeta + 8) % 16, 0); - aWorld.isRemote = false; - GT_Utility - .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); - } - return true; - } - if ((aBlock == Blocks.log) || (aBlock == Blocks.log2) || (aBlock == Blocks.hay_block)) { - if ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) { - aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 4) % 12, 3); - } - return true; - } - if ((aBlock == Blocks.piston) || (aBlock == Blocks.sticky_piston) - || (aBlock == Blocks.dispenser) - || (aBlock == Blocks.dropper)) { - if ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) { - aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 1) % 6, 3); - GT_Utility - .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); - } - return true; - } - if ((aBlock == Blocks.pumpkin) || (aBlock == Blocks.lit_pumpkin) - || (aBlock == Blocks.furnace) - || (aBlock == Blocks.lit_furnace) - || (aBlock == Blocks.chest) - || (aBlock == Blocks.trapped_chest)) { - if ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) { - aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta - 1) % 4 + 2, 3); - GT_Utility - .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); - } - return true; - } - if (aBlock == Blocks.hopper) { - if ((aPlayer.capabilities.isCreativeMode) - || (((GT_MetaGenerated_Tool) aItem).doDamage(aStack, this.mCosts))) { - aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (aMeta + 1) % 6 != 1 ? (aMeta + 1) % 6 : 2, 3); - GT_Utility - .sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, 1.0F, -1.0F, aX, aY, aZ); - } - return true; - } - return false; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Sonictron.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Sonictron.java deleted file mode 100644 index dbab764507..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Sonictron.java +++ /dev/null @@ -1,135 +0,0 @@ -package gregtech.common.items.behaviors; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.IItemBehaviour; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_Utility; - -public class Behaviour_Sonictron extends Behaviour_None { - - public static final IItemBehaviour INSTANCE = new Behaviour_Sonictron(); - - public static int getCurrentIndex(ItemStack aStack) { - NBTTagCompound tNBTTagCompound = aStack.getTagCompound(); - if (tNBTTagCompound == null) { - tNBTTagCompound = new NBTTagCompound(); - } - return tNBTTagCompound.getInteger("mCurrentIndex"); - } - - public static int getTickTimer(ItemStack aStack) { - NBTTagCompound tNBTTagCompound = aStack.getTagCompound(); - if (tNBTTagCompound == null) { - tNBTTagCompound = new NBTTagCompound(); - } - return tNBTTagCompound.getInteger("mTickTimer"); - } - - public static NBTTagCompound setCurrentIndex(ItemStack aStack, int aIndex) { - NBTTagCompound tNBTTagCompound = aStack.getTagCompound(); - if (tNBTTagCompound == null) { - tNBTTagCompound = new NBTTagCompound(); - } - tNBTTagCompound.setInteger("mCurrentIndex", aIndex); - return tNBTTagCompound; - } - - public static NBTTagCompound setTickTimer(ItemStack aStack, int aTime) { - NBTTagCompound tNBTTagCompound = aStack.getTagCompound(); - if (tNBTTagCompound == null) { - tNBTTagCompound = new NBTTagCompound(); - } - tNBTTagCompound.setInteger("mTickTimer", aTime); - return tNBTTagCompound; - } - - public static ItemStack[] getNBTInventory(ItemStack aStack) { - ItemStack[] tInventory = new ItemStack[64]; - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - return tInventory; - } - NBTTagList tNBT_ItemList = tNBT.getTagList("Inventory", 10); - for (int i = 0; i < tNBT_ItemList.tagCount(); i++) { - NBTTagCompound tag = tNBT_ItemList.getCompoundTagAt(i); - byte slot = tag.getByte("Slot"); - if ((slot >= 0) && (slot < tInventory.length)) { - tInventory[slot] = GT_Utility.loadItem(tag); - } - } - return tInventory; - } - - public static NBTTagCompound setNBTInventory(ItemStack aStack, ItemStack[] aInventory) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - } - NBTTagList tNBT_ItemList = new NBTTagList(); - for (int i = 0; i < aInventory.length; i++) { - ItemStack stack = aInventory[i]; - if (stack != null) { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("Slot", (byte) i); - stack.writeToNBT(tag); - tNBT_ItemList.appendTag(tag); - } - } - tNBT.setTag("Inventory", tNBT_ItemList); - aStack.setTagCompound(tNBT); - return tNBT; - } - - public static void copyInventory(ItemStack[] aInventory, ItemStack[] aNewContent, int aIndexlength) { - for (int i = 0; i < aIndexlength; i++) { - if (aNewContent[i] == null) { - aInventory[i] = null; - } else { - aInventory[i] = GT_Utility.copyOrNull(aNewContent[i]); - } - } - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - setCurrentIndex(aStack, -1); - return false; - } - - @Override - public ItemStack onItemRightClick(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - setCurrentIndex(aStack, 0); - return aStack; - } - - @Override - public void onUpdate(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, - boolean aIsInHand) { - int tTickTimer = getTickTimer(aStack); - int tCurrentIndex = getCurrentIndex(aStack); - if ((tTickTimer++ % 2 == 0) && (tCurrentIndex > -1)) { - ItemStack[] tInventory = getNBTInventory(aStack); - GT_Values.GT.doSonictronSound( - tInventory[tCurrentIndex], - aPlayer.worldObj, - aPlayer.posX, - aPlayer.posY, - aPlayer.posZ); - tCurrentIndex++; - if (tCurrentIndex > 63) { - tCurrentIndex = -1; - } - } - setTickTimer(aStack, tTickTimer); - setCurrentIndex(aStack, tCurrentIndex); - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color.java deleted file mode 100644 index 216eb4d745..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color.java +++ /dev/null @@ -1,218 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockColored; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import appeng.api.implementations.tiles.IColorableTile; -import appeng.api.util.AEColor; -import appeng.block.networking.BlockCableBus; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import gregtech.common.config.other.ConfigGeneral; - -public class Behaviour_Spray_Color extends Behaviour_None { - - private final ItemStack mEmpty; - private final ItemStack mUsed; - private final ItemStack mFull; - private final long mUses; - private final byte mColor; - private final Collection mAllowedVanillaBlocks = Arrays.asList( - Blocks.glass, - Blocks.glass_pane, - Blocks.stained_glass, - Blocks.stained_glass_pane, - Blocks.carpet, - Blocks.hardened_clay); - protected String mTooltip; - private final String mTooltipUses = GT_LanguageManager - .addStringLocalization("gt.behaviour.paintspray.uses", "Remaining Uses:"); - private final String mTooltipUnstackable = GT_LanguageManager - .addStringLocalization("gt.behaviour.unstackable", "Not usable when stacked!"); - private final String mTooltipChain = GT_LanguageManager.addStringLocalization( - "gt.behaviour.paintspray.chain", - "If used while sneaking it will spray a chain of blocks"); - - private final String mTooltipChainAmount = GT_LanguageManager.addStringLocalization( - "gt.behaviour.paintspray.chain", - "Sprays up to %d blocks, in the direction you're looking at"); - - public Behaviour_Spray_Color(ItemStack aEmpty, ItemStack aUsed, ItemStack aFull, long aUses, int aColor) { - this.mEmpty = aEmpty; - this.mUsed = aUsed; - this.mFull = aFull; - this.mUses = aUses; - this.mColor = ((byte) aColor); - this.mTooltip = GT_LanguageManager.addStringLocalization( - "gt.behaviour.paintspray." + this.mColor + ".tooltip", - "Can Color things in " + Dyes.get(this.mColor).mName); - } - - public Behaviour_Spray_Color(ItemStack aEmpty, ItemStack aUsed, ItemStack aFull, long aUses) { - this.mEmpty = aEmpty; - this.mUsed = aUsed; - this.mFull = aFull; - this.mUses = aUses; - this.mColor = 0; - mTooltip = ""; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - if ((aWorld.isRemote) || (aStack.stackSize != 1)) { - return false; - } - boolean rOutput = false; - if (!aPlayer.canPlayerEdit(aX, aY, aZ, side.ordinal(), aStack)) { - return false; - } - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - } - long tUses = tNBT.getLong("GT.RemainingPaint"); - if (GT_Utility.areStacksEqual(aStack, this.mFull, true)) { - aStack.func_150996_a(this.mUsed.getItem()); - Items.feather.setDamage(aStack, Items.feather.getDamage(this.mUsed)); - tUses = this.mUses; - } - int painted = 0; - int maxPainted = ConfigGeneral.sprayCanChainRange; - ForgeDirection lookSide; - Vec3 look = aPlayer.getLookVec(); - double absX = Math.abs(look.xCoord); - double absY = Math.abs(look.yCoord); - double absZ = Math.abs(look.zCoord); - if (absX > absY && absX > absZ) { - lookSide = look.xCoord > 0 ? ForgeDirection.EAST : ForgeDirection.WEST; - } else if (absY > absX && absY > absZ) { - lookSide = look.yCoord > 0 ? ForgeDirection.UP : ForgeDirection.DOWN; - } else { - lookSide = look.zCoord > 0 ? ForgeDirection.SOUTH : ForgeDirection.NORTH; - } - Block initialBlock = aWorld.getBlock(aX, aY, aZ); - int initialBlockMeta = aWorld.getBlockMetadata(aX, aY, aZ); - TileEntity initialTE = aWorld.getTileEntity(aX, aY, aZ); - while ((GT_Utility.areStacksEqual(aStack, this.mUsed, true)) && (colorize(aWorld, aX, aY, aZ, side, aPlayer))) { - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.IC2_TOOLS_PAINTER, 1.0F, 1.0F, aX, aY, aZ); - if (!aPlayer.capabilities.isCreativeMode) { - tUses -= 1L; - } - rOutput = true; - painted++; - if (painted >= maxPainted && maxPainted != -1) break; - if (!aPlayer.isSneaking() || tUses <= 0) break; - switch (lookSide) { - case UP -> aY += 1; - case DOWN -> aY -= 1; - case NORTH -> aZ -= 1; - case SOUTH -> aZ += 1; - case WEST -> aX -= 1; - case EAST -> aX += 1; - default -> throw new IllegalArgumentException("Unexpected value: " + lookSide); - } - - if (aWorld.getBlock(aX, aY, aZ) != initialBlock) break; - if (aWorld.getBlockMetadata(aX, aY, aZ) != initialBlockMeta) break; - - /* - * Check if the initial block had a TE and if the next one does, check if its the same kind. - * else one does and the other doesnt, thus stop checking. - */ - TileEntity targetTE = aWorld.getTileEntity(aX, aY, aZ); - if (initialTE == null ^ targetTE == null) break; - if (initialTE != null && targetTE != null) { - if (!initialTE.getClass() - .isInstance(targetTE)) break; - - if (initialTE instanceof IGregTechTileEntity currentGTTile - && targetTE instanceof IGregTechTileEntity targetGTTile) { - if (currentGTTile.getMetaTileID() != targetGTTile.getMetaTileID()) break; - } - } - } - tNBT.removeTag("GT.RemainingPaint"); - if (tUses > 0L) { - tNBT.setLong("GT.RemainingPaint", tUses); - } - if (tNBT.hasNoTags()) { - aStack.setTagCompound(null); - } else { - aStack.setTagCompound(tNBT); - } - if (tUses <= 0L) { - if (this.mEmpty == null) { - aStack.stackSize -= 1; - } else { - aStack.func_150996_a(this.mEmpty.getItem()); - Items.feather.setDamage(aStack, Items.feather.getDamage(this.mEmpty)); - } - } - return rOutput; - } - - protected boolean colorize(World aWorld, int aX, int aY, int aZ, ForgeDirection side, EntityPlayer player) { - final Block aBlock = aWorld.getBlock(aX, aY, aZ); - if (aBlock != Blocks.air) { - if (this.mAllowedVanillaBlocks.contains(aBlock) || aBlock instanceof BlockColored) { - if (aBlock == Blocks.hardened_clay) { - aWorld.setBlock(aX, aY, aZ, Blocks.stained_hardened_clay, (~this.mColor) & 0xF, 3); - return true; - } - if (aBlock == Blocks.glass_pane) { - aWorld.setBlock(aX, aY, aZ, Blocks.stained_glass_pane, (~this.mColor) & 0xF, 3); - return true; - } - if (aBlock == Blocks.glass) { - aWorld.setBlock(aX, aY, aZ, Blocks.stained_glass, (~this.mColor) & 0xF, 3); - return true; - } - if (aWorld.getBlockMetadata(aX, aY, aZ) == ((~this.mColor) & 0xF)) { - return false; - } - aWorld.setBlockMetadataWithNotify(aX, aY, aZ, (~this.mColor) & 0xF, 3); - return true; - } - - if (aBlock instanceof IColorableTile) { - return ((IColorableTile) aBlock).recolourBlock(side, AEColor.values()[(~this.mColor) & 0xF], player); - } - - if (aBlock instanceof BlockCableBus) { - return ((BlockCableBus) aBlock).recolourBlock(aWorld, aX, aY, aZ, side, (~this.mColor) & 0xF, player); - } - } - return aBlock.recolourBlock(aWorld, aX, aY, aZ, side, (~this.mColor) & 0xF); - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - aList.add(this.mTooltipChain); - aList.add(String.format(this.mTooltipChainAmount, ConfigGeneral.sprayCanChainRange)); - NBTTagCompound tNBT = aStack.getTagCompound(); - long tRemainingPaint = tNBT == null ? this.mUses - : GT_Utility.areStacksEqual(aStack, this.mFull, true) ? this.mUses : tNBT.getLong("GT.RemainingPaint"); - aList.add(this.mTooltipUses + " " + tRemainingPaint); - aList.add(this.mTooltipUnstackable); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color_Remover.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color_Remover.java deleted file mode 100644 index 0b73b4f7fc..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Spray_Color_Remover.java +++ /dev/null @@ -1,48 +0,0 @@ -package gregtech.common.items.behaviors; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import appeng.api.implementations.tiles.IColorableTile; -import appeng.api.util.AEColor; -import appeng.block.networking.BlockCableBus; -import gregtech.api.interfaces.tileentity.IColoredTileEntity; -import gregtech.api.util.GT_LanguageManager; - -public class Behaviour_Spray_Color_Remover extends Behaviour_Spray_Color { - - public Behaviour_Spray_Color_Remover(ItemStack aEmpty, ItemStack aUsed, ItemStack aFull, long aUses) { - super(aEmpty, aUsed, aFull, aUses); - this.mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.paintspray.solvent.tooltip", "Can remove paint from things"); - } - - @Override - protected boolean colorize(World aWorld, int aX, int aY, int aZ, ForgeDirection side, EntityPlayer player) { - final Block aBlock = aWorld.getBlock(aX, aY, aZ); - if (aBlock != Blocks.air) { - if (aBlock instanceof IColorableTile) { - return ((IColorableTile) aBlock).recolourBlock(side, AEColor.Transparent, player); - } - - if (aBlock instanceof BlockCableBus) { - return ((BlockCableBus) aBlock) - .recolourBlock(aWorld, aX, aY, aZ, side, AEColor.Transparent.ordinal(), player); - } - - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IColoredTileEntity gte) { - if (gte.getColorization() >= 0) { - gte.setColorization((byte) -1); - return true; - } - } - } - return false; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Metadata.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Metadata.java deleted file mode 100644 index 03cf29b9dd..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Metadata.java +++ /dev/null @@ -1,67 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.items.GT_Generic_Block; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_Util; -import gregtech.api.util.GT_Utility; - -public class Behaviour_Switch_Metadata extends Behaviour_None { - - public final int mSwitchIndex; - public final boolean mCheckTarget, mShowModeSwitchTooltip; - - public Behaviour_Switch_Metadata(int aSwitchIndex) { - this(aSwitchIndex, false); - } - - public Behaviour_Switch_Metadata(int aSwitchIndex, boolean aCheckTarget) { - this(aSwitchIndex, aCheckTarget, false); - } - - public Behaviour_Switch_Metadata(int aSwitchIndex, boolean aCheckTarget, boolean aShowModeSwitchTooltip) { - mSwitchIndex = aSwitchIndex; - mCheckTarget = aCheckTarget; - mShowModeSwitchTooltip = aShowModeSwitchTooltip; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - if (mShowModeSwitchTooltip) aList.add(GT_Utility.trans("330", "Sneak Rightclick to switch Mode")); - return aList; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float aHitX, float aHitY, float aHitZ) { - if (aStack != null && (aPlayer == null || aPlayer.isSneaking()) && !aWorld.isRemote) { - if (mCheckTarget) { - Block aBlock = aWorld.blockExists(aX, aY, aZ) ? aWorld.getBlock(aX, aY, aZ) : Blocks.air; - if (aBlock instanceof GT_Generic_Block) { - Items.feather.setDamage(aStack, (short) mSwitchIndex); - GT_Utility.updateItemStack(aStack); - return true; - } - if (GT_Util.getTileEntity(aWorld, aX, aY, aZ, true) == null) { - Items.feather.setDamage(aStack, (short) mSwitchIndex); - GT_Utility.updateItemStack(aStack); - return true; - } - return false; - } - Items.feather.setDamage(aStack, (short) mSwitchIndex); - GT_Utility.updateItemStack(aStack); - return true; - } - return false; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Mode.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Mode.java deleted file mode 100644 index 4054377568..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Switch_Mode.java +++ /dev/null @@ -1,53 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; - -import gregtech.api.enums.GT_Values; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.net.GT_Packet_ToolSwitchMode; -import gregtech.api.util.GT_Utility; - -public class Behaviour_Switch_Mode extends Behaviour_None { - - public Behaviour_Switch_Mode() {} - - @Override - public ItemStack onItemRightClick(GT_MetaBase_Item aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - if (aStack != null && (aPlayer == null || aPlayer.isSneaking()) && aWorld.isRemote) { - - GT_MetaGenerated_Tool itemTool = (GT_MetaGenerated_Tool) aItem; - final byte maxMode = itemTool.getToolMaxMode(aStack); - if (maxMode == 1) { - return aStack; - } - - MovingObjectPosition mop = GT_Utility.getPlayerLookingTarget(aPlayer); - if (mop == null) { - GT_Values.NW.sendToServer(new GT_Packet_ToolSwitchMode()); - } - return aStack; - } - return aStack; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - super.getAdditionalToolTips(aItem, aList, aStack); - if ((aItem instanceof GT_MetaGenerated_Tool)) { - GT_MetaGenerated_Tool itemTool = (GT_MetaGenerated_Tool) aItem; - final int maxMode = itemTool.getToolMaxMode(aStack); - if (maxMode > 1) { - aList.add("Shift+Rclick to change mode"); - } - } - - return aList; - } - -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_Wrench.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_Wrench.java deleted file mode 100644 index 16c5c3f948..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_Wrench.java +++ /dev/null @@ -1,278 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.Arrays; -import java.util.List; -import java.util.function.BooleanSupplier; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.oredict.OreDictionary; - -import appeng.api.parts.IPartHost; -import appeng.api.util.IOrientable; -import appeng.tile.misc.TileInterface; -import gregtech.api.enums.SoundResource; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import ic2.api.tile.IWrenchable; - -public class Behaviour_Wrench extends Behaviour_None { - - private final int mCosts; - private final String mTooltip = GT_LanguageManager - .addStringLocalization("gt.behaviour.wrench", "Rotates Blocks on Rightclick"); - - public Behaviour_Wrench(int aCosts) { - this.mCosts = aCosts; - } - - @Override - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, ForgeDirection side, float hitX, float hitY, float hitZ) { - final Block aBlock = aWorld.getBlock(aX, aY, aZ); - if (aBlock == null) { - return false; - } - final int aMeta = aWorld.getBlockMetadata(aX, aY, aZ); - final short targetSideOrdinal = (short) GT_Utility.determineWrenchingSide(side, hitX, hitY, hitZ) - .ordinal(); - final TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ); - - final WrenchHandler handler = new WrenchHandler( - aBlock, - aMeta, - targetSideOrdinal, - aTileEntity, - aPlayer, - aWorld, - aX, - aY, - aZ, - aStack, - (GT_MetaGenerated_Tool) aItem, - mCosts); - - try { - return handler.handle() && !aWorld.isRemote; - } catch (Throwable ignored) {} - return false; - } - - /** - *

- * A class to simplify wrenching operation, - * stopping "checking creative", "trying to damage tool", - * "doing the logic" and "playing sound" again and again. - * This should have been a record, but it's not available in Java 8. - *

- *

- * {@link WrenchHandler#handle()} is the entry point of main logic. - *

- */ - private static class WrenchHandler { - - boolean handle() { - ForgeDirection direction = ForgeDirection.getOrientation(targetSideOrdinal); - - // AE2 logic - // default to change the up facing - // sneak to change the forward facing - if (tileEntity instanceof IOrientable orientable) { - if (!orientable.canBeRotated()) return false; - ForgeDirection front = orientable.getForward(); - ForgeDirection up = orientable.getUp(); - - // mainly for me-interfaces, whose initial orientation is UNKNOWN - if (front == ForgeDirection.UNKNOWN) { - if (direction == ForgeDirection.UP || direction == ForgeDirection.DOWN) - front = ForgeDirection.NORTH; - else front = ForgeDirection.UP; - } - - ForgeDirection back = front.getOpposite(); - ForgeDirection down = up.getOpposite(); - - if (tileEntity instanceof TileInterface) { - if (player.isSneaking()) return false; - if (direction == down) { - return doWrenchOperation(costs, () -> { - orientable.setOrientation(ForgeDirection.UNKNOWN, ForgeDirection.UNKNOWN); - return true; - }); - } - // interface's up-side is opposite to the arrow on texture - // make it intuitive by rotating it to the opposite side. - direction = direction.getOpposite(); - up = up.getOpposite(); - } else if (direction == up || direction == front) { - // rotate around the direction axis - final var tempFront = front; - final var tempUp = up; - if (!player.isSneaking() && direction == up) return doWrenchOperation(costs, () -> { - orientable.setOrientation(tempFront.getRotation(tempUp), tempUp); - return true; - }); - if (player.isSneaking() && direction == front) return doWrenchOperation(costs, () -> { - orientable.setOrientation( - tempFront, - tempUp.getRotation(tempFront) - .getRotation(tempFront)); - return true; - }); - } - - if (player.isSneaking()) { - if (direction == up || direction == down) { - orientable.setOrientation(direction, down.getRotation(front.getRotation(direction))); - } else orientable.setOrientation(direction, up); - } else { - if (direction == front || direction == back) { - orientable.setOrientation(back.getRotation(up.getRotation(direction)), direction); - } else orientable.setOrientation(front, direction); - } - - return damageWrench(costs); - } - if (world.isRemote) return false; - // IC2 Wrenchable - if (tileEntity instanceof IWrenchable wrenchable) { - if (wrenchable.wrenchCanSetFacing(player, targetSideOrdinal)) { - return doWrenchOperation(costs, () -> { - wrenchable.setFacing(targetSideOrdinal); - return true; - }); - } - return false; - } - - if (block == Blocks.powered_repeater || block == Blocks.unpowered_repeater - || block == Blocks.powered_comparator - || block == Blocks.unpowered_comparator) return setBlockMeta(costs, meta / 4 * 4 + (meta % 4 + 1) % 4); - - // hopper cannot face sky - if (block == Blocks.hopper && targetSideOrdinal != 1) return setBlockMeta(costs, targetSideOrdinal); - - if (isVanillaAllSideRotatable(block)) if (meta < 6) return setBlockMeta(costs, targetSideOrdinal); - - // blocks like chests and furnaces have only four directions - if (isVanillaCantFaceAxisY(block)) { - if (targetSideOrdinal > 1) return setBlockMeta(costs, targetSideOrdinal); - else return false; - } - if (tileEntity instanceof IPartHost) return false; - - final int logWoodId = OreDictionary.getOreID("logWood"); - if (Arrays.stream(OreDictionary.getOreIDs(new ItemStack(block))) - .anyMatch(id -> id == logWoodId)) { - // The meta just work - return setBlockMeta(costs, (meta + 4) % 12); - } - - // vanilla block rotate logic - if ((Arrays.asList(block.getValidRotations(world, x, y, z)) - .contains(direction))) return rotateBlock(costs, direction); - return false; - - // GT blocks' rotations are done by blocks themselves after this returning false - } - - private final Block block; - private final short targetSideOrdinal; - private final TileEntity tileEntity; - private final EntityPlayer player; - private final World world; - private final int x, y, z, meta; - private final ItemStack stack; - - private final GT_MetaGenerated_Tool item; - private final int costs; - - public WrenchHandler(Block block, int meta, short targetSideOrdinal, TileEntity tileEntity, EntityPlayer player, - World world, int x, int y, int z, ItemStack stack, GT_MetaGenerated_Tool item, int costs) { - this.block = block; - this.meta = meta; - this.targetSideOrdinal = targetSideOrdinal; - this.tileEntity = tileEntity; - this.player = player; - this.world = world; - this.x = x; - this.y = y; - this.z = z; - this.stack = stack; - this.item = item; - this.costs = costs; - } - - /** - * this will run the operation, damage the tool and play the sound if possible (creative mode or - * {@link GT_MetaGenerated_Tool#canWrench(EntityPlayer, int, int, int)}) - * - * @param damage damage to be applied to the wrench - * @param operation the real operation of the click - * @return true if the operation was successful - * @see #setBlockMeta(int, int) - * @see #rotateBlock(int, ForgeDirection) - * @see #rotateBlock(int, ForgeDirection) - */ - boolean doWrenchOperation(int damage, BooleanSupplier operation) { - if (player.capabilities.isCreativeMode || item.canWrench(player, x, y, z)) { - if (operation.getAsBoolean()) { - item.doDamage(stack, damage); - GT_Utility.sendSoundToPlayers(world, SoundResource.IC2_TOOLS_WRENCH, 1.0F, -1.0F, x, y, z); - return true; - } - } - return false; - } - - boolean setBlockMeta(int damage, int newMeta) { - return doWrenchOperation(damage, () -> setBlockMetadataWithNotify(newMeta)); - } - - boolean rotateBlock(int damage, ForgeDirection direction) { - return doWrenchOperation(damage, () -> block.rotateBlock(world, x, y, z, direction)); - } - - boolean damageWrench(int damage) { - return doWrenchOperation(damage, () -> true); - } - - private boolean setBlockMetadataWithNotify(int newMeta) { - return world.setBlockMetadataWithNotify(x, y, z, newMeta, 3); - } - - } - - public static boolean isVanillaRotatable(Block block) { - return isVanillaCantFaceAxisY(block) || isVanillaAllSideRotatable(block) || block == Blocks.hopper; - } - - public static boolean isVanillaCantFaceAxisY(Block block) { - return GT_Utility.arrayContains( - block, - Blocks.pumpkin, - Blocks.lit_pumpkin, - Blocks.furnace, - Blocks.lit_furnace, - Blocks.chest, - Blocks.trapped_chest, - Blocks.ender_chest); - } - - public static boolean isVanillaAllSideRotatable(Block block) { - return GT_Utility.arrayContains(block, Blocks.piston, Blocks.sticky_piston, Blocks.dispenser, Blocks.dropper); - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - aList.add(this.mTooltip); - return aList; - } -} diff --git a/src/main/java/gregtech/common/items/behaviors/Behaviour_WrittenBook.java b/src/main/java/gregtech/common/items/behaviors/Behaviour_WrittenBook.java deleted file mode 100644 index 0f645a93a9..0000000000 --- a/src/main/java/gregtech/common/items/behaviors/Behaviour_WrittenBook.java +++ /dev/null @@ -1,40 +0,0 @@ -package gregtech.common.items.behaviors; - -import java.util.List; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.client.gui.GuiScreenBook; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_Utility; - -public class Behaviour_WrittenBook extends Behaviour_None { - - @Override - @SideOnly(Side.CLIENT) - public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, int ordinalSide, float hitX, float hitY, float hitZ) { - if ((GT_Utility.isStringValid(GT_Utility.ItemNBT.getBookTitle(aStack))) - && ((aPlayer instanceof EntityPlayerSP))) { - Minecraft.getMinecraft() - .displayGuiScreen(new GuiScreenBook(aPlayer, aStack, false)); - } - return true; - } - - @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { - String tTitle = GT_Utility.ItemNBT.getBookTitle(aStack); - if (GT_Utility.isStringValid(tTitle)) { - aList.add(tTitle); - aList.add("by " + GT_Utility.ItemNBT.getBookAuthor(aStack)); - } - return aList; - } -} diff --git a/src/main/java/gregtech/common/misc/DrillingLogicDelegate.java b/src/main/java/gregtech/common/misc/DrillingLogicDelegate.java new file mode 100644 index 0000000000..c52141f9bc --- /dev/null +++ b/src/main/java/gregtech/common/misc/DrillingLogicDelegate.java @@ -0,0 +1,266 @@ +package gregtech.common.misc; + +import static gregtech.api.enums.GTValues.debugBlockMiner; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.FakePlayer; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.TileEntityOres; + +/** @author Relvl on 27.01.2022 */ +@SuppressWarnings("ObjectEquality") +public class DrillingLogicDelegate { + + public static final ItemStack MINING_PIPE_STACK = GTModHandler.getIC2Item("miningPipe", 0); + public static final Block MINING_PIPE_BLOCK = GTUtility.getBlockFromStack(MINING_PIPE_STACK); + public static final Block MINING_PIPE_TIP_BLOCK = GTUtility + .getBlockFromStack(GTModHandler.getIC2Item("miningPipeTip", 0)); + + /** The owner machine pointer */ + private final IDrillingLogicDelegateOwner owner; + + /** Is pipe retracting process done and halts? */ + private boolean isRetractDone; + /** Is machine ran out of mining pipes in its inventory and halts? */ + private boolean isWaitingForPipeItem; + /** Pipe tip depth (relative to machine Y position, NEGATIVE). */ + private int tipDepth; + /** Cached fake player */ + private FakePlayer mFakePlayer; + + public DrillingLogicDelegate(IDrillingLogicDelegateOwner owner) { + this.owner = owner; + } + + /** Descents a pipe tip one plock deeper. */ + public boolean descent(IGregTechTileEntity te) { + if (!te.isAllowedToWork()) { + return false; + } + + int xCoord = te.getXCoord(); + int zCoord = te.getZCoord(); + int yCoord = te.getYCoord(); + int checkY = yCoord + tipDepth - 1; + boolean isHitsTheVoid = checkY < 0; + boolean isHitsBedrock = GTUtility.getBlockHardnessAt(te.getWorld(), xCoord, checkY, zCoord) < 0; + boolean isFakePlayerAllowed = canFakePlayerInteract(te, xCoord, checkY, zCoord); + + if (isHitsTheVoid || isHitsBedrock || !isFakePlayerAllowed) { + // Disable and start retracting process. + te.disableWorking(); + if (debugBlockMiner) { + if (isHitsTheVoid) { + GTLog.out.println("MINER: Hit bottom"); + } + if (isHitsBedrock) { + GTLog.out.println("MINER: Hit block with -1 hardness"); + } + if (!isFakePlayerAllowed) { + GTLog.out.println("MINER: Unable to set mining pipe tip"); + } + } + return false; + } + + // Replace the tip onto pipe + if (te.getBlockOffset(0, tipDepth, 0) == MINING_PIPE_TIP_BLOCK) { + te.getWorld() + .setBlock(xCoord, yCoord + tipDepth, zCoord, MINING_PIPE_BLOCK); + } + // Get and decrease pipe from the machine + boolean pipeTaken = owner.pullInputs(MINING_PIPE_STACK.getItem(), 1, false); + if (!pipeTaken) { + // If there was nothing - waiting for the pipes (just for prevent unnecessary checks) + isWaitingForPipeItem = true; + return false; + } + + // If there is something - mine it + Block block = te.getBlockOffset(0, tipDepth - 1, 0); + if (!block.isAir(te.getWorld(), xCoord, yCoord, zCoord)) { + mineBlock(te, block, xCoord, yCoord + tipDepth - 1, zCoord); + } + + // Descent the pipe tip + te.getWorld() + .setBlock(xCoord, yCoord + tipDepth - 1, zCoord, MINING_PIPE_TIP_BLOCK); + tipDepth--; + return true; + } + + public void onOwnerPostTick(IGregTechTileEntity te, long tick) { + // If the machine was disabled - try to retract pipe + if (!te.isAllowedToWork()) { + onPostTickRetract(te, tick); + return; + } + // If the machine was re-enabled - we should reset the retracting process + isRetractDone = false; + } + + /** If the machine are disabled - tried to retract pipe. */ + private void onPostTickRetract(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (isRetractDone) { + return; + } + // If retracting process just touch the miner + if (tipDepth == 0) { + isRetractDone = true; + return; + } + // Once per N ticks (depends on tier) + if ((aTick % (owner.getMachineSpeed() / 5)) != 0) { + return; + } + + // Check we can push pipe back to machine (inputs allowed for this case!) + boolean canPush = owner.pushOutputs(MINING_PIPE_STACK, 1, true, true); + if (!canPush) { + return; + } + + // Inspect target block - it should be a pipe tip, else something went wrong. + Block targetBlock = aBaseMetaTileEntity.getBlockOffset(0, tipDepth, 0); + if (targetBlock != MINING_PIPE_TIP_BLOCK && targetBlock != MINING_PIPE_BLOCK) { + return; + } + + // Retract the pipe/tip + int xCoord = aBaseMetaTileEntity.getXCoord(); + int yCoord = aBaseMetaTileEntity.getYCoord(); + int zCoord = aBaseMetaTileEntity.getZCoord(); + int actualDrillY = yCoord + tipDepth; + // Move the pipe tip position + if (actualDrillY < yCoord - 1) { + owner.getBaseMetaTileEntity() + .getWorld() + .setBlock(xCoord, actualDrillY + 1, zCoord, MINING_PIPE_TIP_BLOCK); + } + // Remove the old pipe tip + aBaseMetaTileEntity.getWorld() + .setBlock(xCoord, actualDrillY, zCoord, Blocks.air, 0, /* send to client without neighbour updates */ 2); + + // Return the pipe back to the machine (inputs allowed for this case!) + owner.pushOutputs(MINING_PIPE_STACK, 1, false, true); + + tipDepth++; + } + + /** Minings the block if it is possible. */ + public void mineBlock(IGregTechTileEntity te, Block block, int x, int y, int z) { + if (!GTUtility.eraseBlockByFakePlayer(getFakePlayer(te), x, y, z, true)) { + return; + } + + List drops = getBlockDrops(block, x, y, z); + + boolean canFitDrops = true; + for (ItemStack drop : drops) { + canFitDrops &= owner.pushOutputs(drop, drop.stackSize, true, false); + } + if (!canFitDrops) { + return; + } + for (ItemStack drop : drops) { + owner.pushOutputs(drop, drop.stackSize, false, false); + } + + short metaData = 0; + TileEntity tTileEntity = owner.getBaseMetaTileEntity() + .getTileEntity(x, y, z); + if (tTileEntity instanceof TileEntityOres) { + metaData = ((TileEntityOres) tTileEntity).mMetaData; + } + + ItemStack cobble = GTUtility.getCobbleForOre(block, metaData); + te.getWorld() + .setBlock( + x, + y, + z, + Block.getBlockFromItem(cobble.getItem()), + cobble.getItemDamage(), /* cause updates(1) + send to client(2) */ + 3); + } + + /** + * Returns NEGATIVE (eg -5) depth of current drilling Y world level. RELATIVELY TO MINER ENTITY! This means '(miner + * world Y) + depth = (actual world Y)'. + */ + public int getTipDepth() { + return tipDepth; + } + + /** Looking for the lowest continuous pipe. */ + public void findTipDepth() { + IGregTechTileEntity ownerTe = owner.getBaseMetaTileEntity(); + if (!ownerTe.isServerSide()) { + return; + } + while (true) { + Block block = ownerTe.getBlockOffset(0, tipDepth - 1, 0); + if (block != MINING_PIPE_BLOCK && block != MINING_PIPE_TIP_BLOCK) { + return; + } + tipDepth--; + } + } + + /** + * Creates and provides the Fake Player for owners. todo maybe will provide player owner uuid? im sure some servers + * not allow to fakers, in griefing reasons. + */ + public FakePlayer getFakePlayer(IGregTechTileEntity te) { + if (mFakePlayer == null) { + mFakePlayer = GTUtility.getFakePlayer(te); + } + if (mFakePlayer != null) { + mFakePlayer.setWorld(te.getWorld()); + mFakePlayer.setPosition(te.getXCoord(), te.getYCoord(), te.getZCoord()); + } + return mFakePlayer; + } + + public boolean canFakePlayerInteract(IGregTechTileEntity te, int xCoord, int yCoord, int zCoord) { + return GTUtility + .setBlockByFakePlayer(getFakePlayer(te), xCoord, yCoord, zCoord, MINING_PIPE_TIP_BLOCK, 0, true); + } + + /** Get target block drops. We need to encapsulate everyting of mining in this class. */ + private List getBlockDrops(final Block oreBlock, int posX, int posY, int posZ) { + return oreBlock.getDrops( + owner.getBaseMetaTileEntity() + .getWorld(), + posX, + posY, + posZ, + owner.getBaseMetaTileEntity() + .getMetaID(posX, posY, posZ), + owner.getMachineTier()); + } + + /** Can the owner continue doing its work? If we await new pipes - it cannot. */ + public boolean canContinueDrilling(long tick) { + if (isWaitingForPipeItem) { + if (tick % 5 != 0) { + return false; + } + boolean hasPipe = owner.pullInputs(MINING_PIPE_STACK.getItem(), 1, true); + if (hasPipe) { + isWaitingForPipeItem = false; + } + return hasPipe; + } + return true; + } +} diff --git a/src/main/java/gregtech/common/misc/GTClientPollutionMap.java b/src/main/java/gregtech/common/misc/GTClientPollutionMap.java new file mode 100644 index 0000000000..546f8e8d12 --- /dev/null +++ b/src/main/java/gregtech/common/misc/GTClientPollutionMap.java @@ -0,0 +1,140 @@ +package gregtech.common.misc; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; +import net.minecraft.util.MathHelper; + +public class GTClientPollutionMap { + + private static final byte RADIUS = 24; + private static final byte DISTANCE_RELOAD_MAP = 5; // When player moved x chunks, shift the map to new center. + private static final byte SIZE = RADIUS * 2 + 1; // Area to keep stored. + + private int x0, z0; + private int dim; + + private boolean initialized = false; + + private static short[][] chunkMatrix; // short because reasons. + + public GTClientPollutionMap() {} + + public void reset() { + initialized = false; + } + + private void initialize(int playerChunkX, int playerChunkZ, int dimension) { + initialized = true; + chunkMatrix = new short[SIZE][SIZE]; + x0 = playerChunkX; + z0 = playerChunkZ; + dim = dimension; + } + + public void addChunkPollution(int chunkX, int chunkZ, int pollution) { + EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer; + if (player == null || player.worldObj == null) return; + + int playerXChunk = MathHelper.floor_double(player.posX) >> 4; + int playerZChunk = MathHelper.floor_double(player.posZ) >> 4; // posX/Z seems to be always loaded, + + if (!initialized) { + initialize(playerXChunk, playerZChunk, player.dimension); + } + + if (dim != player.dimension) { + initialize(playerXChunk, playerZChunk, player.dimension); + } + + if (Math.abs(x0 - playerXChunk) > DISTANCE_RELOAD_MAP || Math.abs(z0 - playerZChunk) > DISTANCE_RELOAD_MAP) + shiftCenter(playerXChunk, playerZChunk); + + int relX = chunkX - x0 + RADIUS; + if (relX >= SIZE || relX < 0) // out of bounds + return; + int relZ = chunkZ - z0 + RADIUS; + if (relZ >= SIZE || relZ < 0) // out of bounds + return; + + pollution = pollution / 225; + if (pollution > Short.MAX_VALUE) // Sanity + chunkMatrix[relX][relZ] = Short.MAX_VALUE; // Max pollution = 7,3mill + else if (pollution < 0) chunkMatrix[relX][relZ] = 0; + else chunkMatrix[relX][relZ] = (short) (pollution); + } + + // xy interpolation, between 4 chunks as corners, unknown treated as 0. + public int getPollution(double fx, double fz) { + if (!initialized) return 0; + int x = MathHelper.floor_double(fx); + int z = MathHelper.floor_double(fz); + int xDiff = ((x - 8) >> 4) - x0; + int zDiff = ((z - 8) >> 4) - z0; + + if (xDiff < -RADIUS || zDiff < -RADIUS || xDiff >= RADIUS || zDiff >= RADIUS) return 0; + + // coordinates in shifted chunk. + x = (x - 8) % 16; + z = (z - 8) % 16; + if (x < 0) x = 16 + x; + if (z < 0) z = 16 + z; + + int xi = 15 - x; + int zi = 15 - z; + + // read pollution in 4 corner chunks + int offsetX = RADIUS + xDiff; + int offsetZ = RADIUS + zDiff; + + int c00 = chunkMatrix[offsetX][offsetZ]; + int c10 = chunkMatrix[offsetX + 1][offsetZ]; + int c01 = chunkMatrix[offsetX][offsetZ + 1]; + int c11 = chunkMatrix[offsetX + 1][offsetZ + 1]; + + // Is divided by 15*15 but is handled when storing chunk data. + return c00 * xi * zi + c10 * x * zi + c01 * xi * z + c11 * x * z; + } + + // shift the matrix to fit new center + private void shiftCenter(int chunkX, int chunkZ) { + int xDiff = chunkX - x0; + int zDiff = chunkZ - z0; + boolean[] allEmpty = new boolean[SIZE]; // skip check z row if its empty. + if (xDiff > 0) for (byte x = 0; x < SIZE; x++) { + int xOff = x + xDiff; + if (xOff < SIZE) { + chunkMatrix[x] = chunkMatrix[xOff].clone(); + } else { + chunkMatrix[x] = new short[SIZE]; + allEmpty[x] = true; + } + } + else if (xDiff < 0) for (byte x = SIZE - 1; x >= 0; x--) { + int xOff = x + xDiff; + if (xOff > 0) { + chunkMatrix[x] = chunkMatrix[xOff].clone(); + } else { + chunkMatrix[x] = new short[SIZE]; + allEmpty[x] = true; + } + } + + if (zDiff > 0) for (byte x = 0; x < SIZE; x++) { + if (allEmpty[x]) continue; + for (int z = 0; z < SIZE; z++) { + int zOff = z + zDiff; + chunkMatrix[x][z] = (zOff < SIZE) ? chunkMatrix[x][zOff] : 0; + } + } + else if (zDiff < 0) for (byte x = 0; x < SIZE; x++) { + if (allEmpty[x]) continue; + for (int z = SIZE - 1; z >= 0; z--) { + int zOff = z + zDiff; + chunkMatrix[x][z] = (zOff > 0) ? chunkMatrix[x][zOff] : 0; + } + } + + x0 = chunkX; + z0 = chunkZ; + } +} diff --git a/src/main/java/gregtech/common/misc/GTCommand.java b/src/main/java/gregtech/common/misc/GTCommand.java new file mode 100644 index 0000000000..f1590ec792 --- /dev/null +++ b/src/main/java/gregtech/common/misc/GTCommand.java @@ -0,0 +1,354 @@ +package gregtech.common.misc; + +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static gregtech.common.misc.WirelessNetworkManager.getUserEU; +import static gregtech.common.misc.WirelessNetworkManager.setUserEU; + +import java.lang.reflect.Field; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import java.util.stream.Stream; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.EnumChatFormatting; + +import com.gtnewhorizon.structurelib.StructureLib; + +import cpw.mods.fml.relauncher.FMLLaunchHandler; +import gregtech.GTMod; +import gregtech.api.enums.GTValues; +import gregtech.api.objects.GTChunkManager; +import gregtech.api.util.GTMusicSystem; +import gregtech.api.util.GTUtility; +import gregtech.common.Pollution; +import gregtech.common.misc.spaceprojects.SpaceProjectManager; + +public final class GTCommand extends CommandBase { + + @Override + public String getCommandName() { + return "gt"; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "Usage: gt . Valid subcommands are: toggle, chunks, pollution, global_energy_add, global_energy_set, global_energy_join, dump_music_durations."; + } + + private void printHelp(ICommandSender sender) { + sender.addChatMessage( + new ChatComponentText( + "Usage: gt ")); + sender.addChatMessage(new ChatComponentText("\"toggle D1\" - toggles general.Debug (D1)")); + sender.addChatMessage(new ChatComponentText("\"toggle D2\" - toggles general.Debug2 (D2)")); + sender.addChatMessage(new ChatComponentText("\"toggle debugCleanroom\" - toggles cleanroom debug log")); + sender.addChatMessage(new ChatComponentText("\"toggle debugDriller\" - toggles oil drill debug log")); + sender.addChatMessage(new ChatComponentText("\"toggle debugBlockPump\" - Possible issues with pumps")); + sender.addChatMessage(new ChatComponentText("\"toggle debugBlockMiner\" - Possible issues with miners")); + sender.addChatMessage( + new ChatComponentText("\"toggle debugEntityCramming\" - How long it takes and how many entities it finds")); + sender.addChatMessage(new ChatComponentText("\"toggle debugWorldGen\" - toggles generic worldgen debug")); + sender.addChatMessage(new ChatComponentText("\"toggle debugOrevein\" - toggles worldgen ore vein debug")); + sender.addChatMessage(new ChatComponentText("\"toggle debugSmallOres\" - toggles worldgen small vein debug")); + sender.addChatMessage(new ChatComponentText("\"toggle debugStones\" - toggles worldgen stones debug")); + sender.addChatMessage(new ChatComponentText("\"toggle debugChunkloaders\" - toggles chunkloaders debug")); + sender.addChatMessage(new ChatComponentText("\"toggle debugMulti\" - toggles structurelib debug")); + sender.addChatMessage(new ChatComponentText("\"chunks\" - print a list of the force loaded chunks")); + sender.addChatMessage( + new ChatComponentText( + "\"pollution \" - adds the of the pollution to the current chunk, " + + "\n if isnt specified, will add" + + GTMod.gregtechproxy.mPollutionSmogLimit + + "gibbl.")); + sender.addChatMessage(new ChatComponentText(EnumChatFormatting.GOLD + " --- Global wireless EU controls ---")); + sender.addChatMessage(new ChatComponentText("Allows you to set the amount of EU in a users wireless network.")); + sender.addChatMessage( + new ChatComponentText( + "Usage:" + EnumChatFormatting.RED + + " global_energy_set " + + EnumChatFormatting.BLUE + + "[Name] " + + EnumChatFormatting.LIGHT_PURPLE + + "[EU]")); + sender.addChatMessage( + new ChatComponentText("Allows you to add EU to a users wireless network. Also accepts negative numbers.")); + sender.addChatMessage( + new ChatComponentText( + "Usage:" + EnumChatFormatting.RED + + " global_energy_add " + + EnumChatFormatting.BLUE + + "[Name] " + + EnumChatFormatting.LIGHT_PURPLE + + "[EU]")); + sender.addChatMessage( + new ChatComponentText( + "Allows you to join two users together into one network. Can be undone by writing the users name twice.")); + sender.addChatMessage( + new ChatComponentText( + "Usage:" + EnumChatFormatting.RED + + " global_energy_join " + + EnumChatFormatting.BLUE + + "[User joining] [User to join]")); + sender.addChatMessage(new ChatComponentText("Shows the amount of EU in a users energy network.")); + sender.addChatMessage( + new ChatComponentText( + "Usage:" + EnumChatFormatting.RED + " global_energy_display " + EnumChatFormatting.BLUE + "[Name]")); + sender.addChatMessage( + new ChatComponentText( + "\"dump_music_durations\" - dumps soundmeta/durations.json for all registered records in the game to the log. Client-only")); + } + + @Override + public List addTabCompletionOptions(ICommandSender sender, String[] ss) { + List l = new ArrayList<>(); + String test = ss.length == 0 ? "" : ss[0].trim(); + if (ss.length == 0 || ss.length == 1 && (test.isEmpty() || Stream + .of( + "toggle", + "chunks", + "pollution", + "global_energy_add", + "global_energy_set", + "global_energy_join", + "global_energy_display", + "dump_music_durations") + .anyMatch(s -> s.startsWith(test)))) { + Stream + .of( + "toggle", + "chunks", + "pollution", + "global_energy_add", + "global_energy_set", + "global_energy_join", + "global_energy_display", + "dump_music_durations") + .filter(s -> test.isEmpty() || s.startsWith(test)) + .forEach(l::add); + } else if (test.equals("toggle")) { + String test1 = ss[1].trim(); + Stream + .of( + "D1", + "D2", + "debugCleanroom", + "debugDriller", + "debugBlockPump", + "debugBlockMiner", + "debugWorldGen", + "debugEntityCramming", + "debugOrevein", + "debugSmallOres", + "debugStones", + "debugChunkloaders", + "debugMulti", + "debugWorldData") + .filter(s -> test1.isEmpty() || s.startsWith(test1)) + .forEach(l::add); + } + return l; + } + + @Override + public void processCommand(ICommandSender sender, String[] strings) { + if (strings.length < 1) { + printHelp(sender); + return; + } + switch (strings[0]) { + case "toggle" -> { + if (strings.length < 2) { + printHelp(sender); + return; + } + if ("debugMulti".equals(strings[1])) { + StructureLib.DEBUG_MODE = !StructureLib.DEBUG_MODE; + sender.addChatMessage( + new ChatComponentText(strings[1] + " = " + (StructureLib.DEBUG_MODE ? "true" : "false"))); + return; + } + try { + Field field = GTValues.class.getDeclaredField(strings[1]); + if (field.getType() != boolean.class) { + sender.addChatMessage(new ChatComponentText("Wrong variable: " + strings[1])); + return; + } + boolean b = !field.getBoolean(null); + field.setBoolean(null, b); + sender.addChatMessage(new ChatComponentText(strings[1] + " = " + (b ? "true" : "false"))); + } catch (Exception e) { + sender.addChatMessage(new ChatComponentText("No such variable: " + strings[0])); + } + } + case "chunks" -> { + GTChunkManager.printTickets(); + sender.addChatMessage(new ChatComponentText("Forced chunks logged to GregTech.log")); + } + case "pollution" -> { + ChunkCoordinates coordinates = sender.getPlayerCoordinates(); + int amount = (strings.length < 2) ? GTMod.gregtechproxy.mPollutionSmogLimit + : Integer.parseInt(strings[1]); + Pollution.addPollution( + sender.getEntityWorld() + .getChunkFromBlockCoords(coordinates.posX, coordinates.posZ), + amount); + } + case "global_energy_add" -> { + String username = strings[1]; + String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET; + UUID uuid = SpaceProjectManager.getPlayerUUIDFromName(username); + + String EU_String = strings[2]; + + // Usage is /gt global_energy_add username EU + + String EU_string_formatted = EnumChatFormatting.RED + GTUtility.formatNumbers(new BigInteger(EU_String)) + + EnumChatFormatting.RESET; + + if (addEUToGlobalEnergyMap(uuid, new BigInteger(EU_String))) sender.addChatMessage( + new ChatComponentText( + "Successfully added " + EU_string_formatted + + "EU to the global energy network of " + + formatted_username + + ".")); + else sender.addChatMessage( + new ChatComponentText( + "Failed to add " + EU_string_formatted + + "EU to the global energy map of " + + formatted_username + + ". Insufficient energy in network. ")); + + sender.addChatMessage( + new ChatComponentText( + formatted_username + " currently has " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(new BigInteger(getUserEU(uuid).toString())) + + EnumChatFormatting.RESET + + "EU in their network.")); + + } + case "global_energy_set" -> { + + // Usage is /gt global_energy_set username EU + + String username = strings[1]; + String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET; + UUID uuid = SpaceProjectManager.getPlayerUUIDFromName(username); + + String EU_String_0 = strings[2]; + + if ((new BigInteger(EU_String_0).compareTo(BigInteger.ZERO)) < 0) { + sender.addChatMessage( + new ChatComponentText("Cannot set a users energy network to a negative value.")); + break; + } + + setUserEU(uuid, new BigInteger(EU_String_0)); + + sender.addChatMessage( + new ChatComponentText( + "Successfully set " + formatted_username + + "'s global energy network to " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(new BigInteger(EU_String_0)) + + EnumChatFormatting.RESET + + "EU.")); + + } + case "global_energy_join" -> { + + // Usage is /gt global_energy_join username_of_you username_to_join + + String usernameSubject = strings[1]; + String usernameTeam = strings[2]; + + String formattedUsernameSubject = EnumChatFormatting.BLUE + usernameSubject + EnumChatFormatting.RESET; + String formattedUsernameTeam = EnumChatFormatting.BLUE + usernameTeam + EnumChatFormatting.RESET; + + UUID uuidSubject = SpaceProjectManager.getPlayerUUIDFromName(usernameSubject); + UUID uuidTeam = SpaceProjectManager.getLeader(SpaceProjectManager.getPlayerUUIDFromName(usernameTeam)); + + if (uuidSubject.equals(uuidTeam)) { + // leave team + SpaceProjectManager.putInTeam(uuidSubject, uuidSubject); + sender.addChatMessage( + new ChatComponentText( + "User " + formattedUsernameSubject + " has rejoined their own global energy network.")); + break; + } + + // join other's team + + if (uuidSubject.equals(uuidTeam)) { + sender.addChatMessage(new ChatComponentText("They are already in the same network!")); + break; + } + + SpaceProjectManager.putInTeam(uuidSubject, uuidTeam); + + sender.addChatMessage( + new ChatComponentText( + "Success! " + formattedUsernameSubject + " has joined " + formattedUsernameTeam + ".")); + sender.addChatMessage( + new ChatComponentText( + "To undo this simply join your own network again with /gt global_energy_join " + + formattedUsernameSubject + + " " + + formattedUsernameSubject + + ".")); + + } + case "global_energy_display" -> { + + // Usage is /gt global_energy_display username. + + String username = strings[1]; + String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET; + UUID userUUID = SpaceProjectManager.getPlayerUUIDFromName(username); + + if (!SpaceProjectManager.isInTeam(userUUID)) { + sender.addChatMessage( + new ChatComponentText("User " + formatted_username + " has no global energy network.")); + break; + } + UUID teamUUID = SpaceProjectManager.getLeader(userUUID); + + sender.addChatMessage( + new ChatComponentText( + "User " + formatted_username + + " has " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(getUserEU(userUUID)) + + EnumChatFormatting.RESET + + "EU in their network.")); + if (!userUUID.equals(teamUUID)) sender.addChatMessage( + new ChatComponentText( + "User " + formatted_username + + " is currently in network of " + + EnumChatFormatting.BLUE + + SpaceProjectManager.getPlayerNameFromUUID(teamUUID) + + EnumChatFormatting.RESET + + ".")); + + } + case "dump_music_durations" -> { + if (!FMLLaunchHandler.side() + .isClient()) { + sender + .addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "This command is client-only.")); + } + GTMusicSystem.ClientSystem.dumpAllRecordDurations(); + } + default -> { + sender + .addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Invalid command/syntax detected.")); + printHelp(sender); + } + } + } +} diff --git a/src/main/java/gregtech/common/misc/GT_ClientPollutionMap.java b/src/main/java/gregtech/common/misc/GT_ClientPollutionMap.java deleted file mode 100644 index 6e40e5860c..0000000000 --- a/src/main/java/gregtech/common/misc/GT_ClientPollutionMap.java +++ /dev/null @@ -1,140 +0,0 @@ -package gregtech.common.misc; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityClientPlayerMP; -import net.minecraft.util.MathHelper; - -public class GT_ClientPollutionMap { - - private static final byte RADIUS = 24; - private static final byte DISTANCE_RELOAD_MAP = 5; // When player moved x chunks, shift the map to new center. - private static final byte SIZE = RADIUS * 2 + 1; // Area to keep stored. - - private int x0, z0; - private int dim; - - private boolean initialized = false; - - private static short[][] chunkMatrix; // short because reasons. - - public GT_ClientPollutionMap() {} - - public void reset() { - initialized = false; - } - - private void initialize(int playerChunkX, int playerChunkZ, int dimension) { - initialized = true; - chunkMatrix = new short[SIZE][SIZE]; - x0 = playerChunkX; - z0 = playerChunkZ; - dim = dimension; - } - - public void addChunkPollution(int chunkX, int chunkZ, int pollution) { - EntityClientPlayerMP player = Minecraft.getMinecraft().thePlayer; - if (player == null || player.worldObj == null) return; - - int playerXChunk = MathHelper.floor_double(player.posX) >> 4; - int playerZChunk = MathHelper.floor_double(player.posZ) >> 4; // posX/Z seems to be always loaded, - - if (!initialized) { - initialize(playerXChunk, playerZChunk, player.dimension); - } - - if (dim != player.dimension) { - initialize(playerXChunk, playerZChunk, player.dimension); - } - - if (Math.abs(x0 - playerXChunk) > DISTANCE_RELOAD_MAP || Math.abs(z0 - playerZChunk) > DISTANCE_RELOAD_MAP) - shiftCenter(playerXChunk, playerZChunk); - - int relX = chunkX - x0 + RADIUS; - if (relX >= SIZE || relX < 0) // out of bounds - return; - int relZ = chunkZ - z0 + RADIUS; - if (relZ >= SIZE || relZ < 0) // out of bounds - return; - - pollution = pollution / 225; - if (pollution > Short.MAX_VALUE) // Sanity - chunkMatrix[relX][relZ] = Short.MAX_VALUE; // Max pollution = 7,3mill - else if (pollution < 0) chunkMatrix[relX][relZ] = 0; - else chunkMatrix[relX][relZ] = (short) (pollution); - } - - // xy interpolation, between 4 chunks as corners, unknown treated as 0. - public int getPollution(double fx, double fz) { - if (!initialized) return 0; - int x = MathHelper.floor_double(fx); - int z = MathHelper.floor_double(fz); - int xDiff = ((x - 8) >> 4) - x0; - int zDiff = ((z - 8) >> 4) - z0; - - if (xDiff < -RADIUS || zDiff < -RADIUS || xDiff >= RADIUS || zDiff >= RADIUS) return 0; - - // coordinates in shifted chunk. - x = (x - 8) % 16; - z = (z - 8) % 16; - if (x < 0) x = 16 + x; - if (z < 0) z = 16 + z; - - int xi = 15 - x; - int zi = 15 - z; - - // read pollution in 4 corner chunks - int offsetX = RADIUS + xDiff; - int offsetZ = RADIUS + zDiff; - - int c00 = chunkMatrix[offsetX][offsetZ]; - int c10 = chunkMatrix[offsetX + 1][offsetZ]; - int c01 = chunkMatrix[offsetX][offsetZ + 1]; - int c11 = chunkMatrix[offsetX + 1][offsetZ + 1]; - - // Is divided by 15*15 but is handled when storing chunk data. - return c00 * xi * zi + c10 * x * zi + c01 * xi * z + c11 * x * z; - } - - // shift the matrix to fit new center - private void shiftCenter(int chunkX, int chunkZ) { - int xDiff = chunkX - x0; - int zDiff = chunkZ - z0; - boolean[] allEmpty = new boolean[SIZE]; // skip check z row if its empty. - if (xDiff > 0) for (byte x = 0; x < SIZE; x++) { - int xOff = x + xDiff; - if (xOff < SIZE) { - chunkMatrix[x] = chunkMatrix[xOff].clone(); - } else { - chunkMatrix[x] = new short[SIZE]; - allEmpty[x] = true; - } - } - else if (xDiff < 0) for (byte x = SIZE - 1; x >= 0; x--) { - int xOff = x + xDiff; - if (xOff > 0) { - chunkMatrix[x] = chunkMatrix[xOff].clone(); - } else { - chunkMatrix[x] = new short[SIZE]; - allEmpty[x] = true; - } - } - - if (zDiff > 0) for (byte x = 0; x < SIZE; x++) { - if (allEmpty[x]) continue; - for (int z = 0; z < SIZE; z++) { - int zOff = z + zDiff; - chunkMatrix[x][z] = (zOff < SIZE) ? chunkMatrix[x][zOff] : 0; - } - } - else if (zDiff < 0) for (byte x = 0; x < SIZE; x++) { - if (allEmpty[x]) continue; - for (int z = SIZE - 1; z >= 0; z--) { - int zOff = z + zDiff; - chunkMatrix[x][z] = (zOff > 0) ? chunkMatrix[x][zOff] : 0; - } - } - - x0 = chunkX; - z0 = chunkZ; - } -} diff --git a/src/main/java/gregtech/common/misc/GT_Command.java b/src/main/java/gregtech/common/misc/GT_Command.java deleted file mode 100644 index 8e342aa928..0000000000 --- a/src/main/java/gregtech/common/misc/GT_Command.java +++ /dev/null @@ -1,355 +0,0 @@ -package gregtech.common.misc; - -import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static gregtech.common.misc.WirelessNetworkManager.getUserEU; -import static gregtech.common.misc.WirelessNetworkManager.setUserEU; - -import java.lang.reflect.Field; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import java.util.stream.Stream; - -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.util.EnumChatFormatting; - -import com.gtnewhorizon.structurelib.StructureLib; - -import cpw.mods.fml.relauncher.FMLLaunchHandler; -import gregtech.GT_Mod; -import gregtech.api.enums.GT_Values; -import gregtech.api.objects.GT_ChunkManager; -import gregtech.api.util.GT_MusicSystem; -import gregtech.api.util.GT_Utility; -import gregtech.common.GT_Pollution; -import gregtech.common.misc.spaceprojects.SpaceProjectManager; - -public final class GT_Command extends CommandBase { - - @Override - public String getCommandName() { - return "gt"; - } - - @Override - public String getCommandUsage(ICommandSender sender) { - return "Usage: gt . Valid subcommands are: toggle, chunks, pollution, global_energy_add, global_energy_set, global_energy_join, dump_music_durations."; - } - - private void printHelp(ICommandSender sender) { - sender.addChatMessage( - new ChatComponentText( - "Usage: gt ")); - sender.addChatMessage(new ChatComponentText("\"toggle D1\" - toggles general.Debug (D1)")); - sender.addChatMessage(new ChatComponentText("\"toggle D2\" - toggles general.Debug2 (D2)")); - sender.addChatMessage(new ChatComponentText("\"toggle debugCleanroom\" - toggles cleanroom debug log")); - sender.addChatMessage(new ChatComponentText("\"toggle debugDriller\" - toggles oil drill debug log")); - sender.addChatMessage(new ChatComponentText("\"toggle debugBlockPump\" - Possible issues with pumps")); - sender.addChatMessage(new ChatComponentText("\"toggle debugBlockMiner\" - Possible issues with miners")); - sender.addChatMessage( - new ChatComponentText("\"toggle debugEntityCramming\" - How long it takes and how many entities it finds")); - sender.addChatMessage(new ChatComponentText("\"toggle debugWorldGen\" - toggles generic worldgen debug")); - sender.addChatMessage(new ChatComponentText("\"toggle debugOrevein\" - toggles worldgen ore vein debug")); - sender.addChatMessage(new ChatComponentText("\"toggle debugSmallOres\" - toggles worldgen small vein debug")); - sender.addChatMessage(new ChatComponentText("\"toggle debugStones\" - toggles worldgen stones debug")); - sender.addChatMessage(new ChatComponentText("\"toggle debugChunkloaders\" - toggles chunkloaders debug")); - sender.addChatMessage(new ChatComponentText("\"toggle debugMulti\" - toggles structurelib debug")); - sender.addChatMessage(new ChatComponentText("\"chunks\" - print a list of the force loaded chunks")); - sender.addChatMessage( - new ChatComponentText( - "\"pollution \" - adds the of the pollution to the current chunk, " - + "\n if isnt specified, will add" - + GT_Mod.gregtechproxy.mPollutionSmogLimit - + "gibbl.")); - sender.addChatMessage(new ChatComponentText(EnumChatFormatting.GOLD + " --- Global wireless EU controls ---")); - sender.addChatMessage(new ChatComponentText("Allows you to set the amount of EU in a users wireless network.")); - sender.addChatMessage( - new ChatComponentText( - "Usage:" + EnumChatFormatting.RED - + " global_energy_set " - + EnumChatFormatting.BLUE - + "[Name] " - + EnumChatFormatting.LIGHT_PURPLE - + "[EU]")); - sender.addChatMessage( - new ChatComponentText("Allows you to add EU to a users wireless network. Also accepts negative numbers.")); - sender.addChatMessage( - new ChatComponentText( - "Usage:" + EnumChatFormatting.RED - + " global_energy_add " - + EnumChatFormatting.BLUE - + "[Name] " - + EnumChatFormatting.LIGHT_PURPLE - + "[EU]")); - sender.addChatMessage( - new ChatComponentText( - "Allows you to join two users together into one network. Can be undone by writing the users name twice.")); - sender.addChatMessage( - new ChatComponentText( - "Usage:" + EnumChatFormatting.RED - + " global_energy_join " - + EnumChatFormatting.BLUE - + "[User joining] [User to join]")); - sender.addChatMessage(new ChatComponentText("Shows the amount of EU in a users energy network.")); - sender.addChatMessage( - new ChatComponentText( - "Usage:" + EnumChatFormatting.RED + " global_energy_display " + EnumChatFormatting.BLUE + "[Name]")); - sender.addChatMessage( - new ChatComponentText( - "\"dump_music_durations\" - dumps soundmeta/durations.json for all registered records in the game to the log. Client-only")); - } - - @Override - public List addTabCompletionOptions(ICommandSender sender, String[] ss) { - List l = new ArrayList<>(); - String test = ss.length == 0 ? "" : ss[0].trim(); - if (ss.length == 0 || ss.length == 1 && (test.isEmpty() || Stream - .of( - "toggle", - "chunks", - "pollution", - "global_energy_add", - "global_energy_set", - "global_energy_join", - "global_energy_display", - "dump_music_durations") - .anyMatch(s -> s.startsWith(test)))) { - Stream - .of( - "toggle", - "chunks", - "pollution", - "global_energy_add", - "global_energy_set", - "global_energy_join", - "global_energy_display", - "dump_music_durations") - .filter(s -> test.isEmpty() || s.startsWith(test)) - .forEach(l::add); - } else if (test.equals("toggle")) { - String test1 = ss[1].trim(); - Stream - .of( - "D1", - "D2", - "debugCleanroom", - "debugDriller", - "debugBlockPump", - "debugBlockMiner", - "debugWorldGen", - "debugEntityCramming", - "debugOrevein", - "debugSmallOres", - "debugStones", - "debugChunkloaders", - "debugMulti", - "debugWorldData") - .filter(s -> test1.isEmpty() || s.startsWith(test1)) - .forEach(l::add); - } - return l; - } - - @Override - public void processCommand(ICommandSender sender, String[] strings) { - if (strings.length < 1) { - printHelp(sender); - return; - } - switch (strings[0]) { - case "toggle" -> { - if (strings.length < 2) { - printHelp(sender); - return; - } - if ("debugMulti".equals(strings[1])) { - StructureLib.DEBUG_MODE = !StructureLib.DEBUG_MODE; - sender.addChatMessage( - new ChatComponentText(strings[1] + " = " + (StructureLib.DEBUG_MODE ? "true" : "false"))); - return; - } - try { - Field field = GT_Values.class.getDeclaredField(strings[1]); - if (field.getType() != boolean.class) { - sender.addChatMessage(new ChatComponentText("Wrong variable: " + strings[1])); - return; - } - boolean b = !field.getBoolean(null); - field.setBoolean(null, b); - sender.addChatMessage(new ChatComponentText(strings[1] + " = " + (b ? "true" : "false"))); - } catch (Exception e) { - sender.addChatMessage(new ChatComponentText("No such variable: " + strings[0])); - } - } - case "chunks" -> { - GT_ChunkManager.printTickets(); - sender.addChatMessage(new ChatComponentText("Forced chunks logged to GregTech.log")); - } - case "pollution" -> { - ChunkCoordinates coordinates = sender.getPlayerCoordinates(); - int amount = (strings.length < 2) ? GT_Mod.gregtechproxy.mPollutionSmogLimit - : Integer.parseInt(strings[1]); - GT_Pollution.addPollution( - sender.getEntityWorld() - .getChunkFromBlockCoords(coordinates.posX, coordinates.posZ), - amount); - } - case "global_energy_add" -> { - String username = strings[1]; - String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET; - UUID uuid = SpaceProjectManager.getPlayerUUIDFromName(username); - - String EU_String = strings[2]; - - // Usage is /gt global_energy_add username EU - - String EU_string_formatted = EnumChatFormatting.RED - + GT_Utility.formatNumbers(new BigInteger(EU_String)) - + EnumChatFormatting.RESET; - - if (addEUToGlobalEnergyMap(uuid, new BigInteger(EU_String))) sender.addChatMessage( - new ChatComponentText( - "Successfully added " + EU_string_formatted - + "EU to the global energy network of " - + formatted_username - + ".")); - else sender.addChatMessage( - new ChatComponentText( - "Failed to add " + EU_string_formatted - + "EU to the global energy map of " - + formatted_username - + ". Insufficient energy in network. ")); - - sender.addChatMessage( - new ChatComponentText( - formatted_username + " currently has " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(new BigInteger(getUserEU(uuid).toString())) - + EnumChatFormatting.RESET - + "EU in their network.")); - - } - case "global_energy_set" -> { - - // Usage is /gt global_energy_set username EU - - String username = strings[1]; - String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET; - UUID uuid = SpaceProjectManager.getPlayerUUIDFromName(username); - - String EU_String_0 = strings[2]; - - if ((new BigInteger(EU_String_0).compareTo(BigInteger.ZERO)) < 0) { - sender.addChatMessage( - new ChatComponentText("Cannot set a users energy network to a negative value.")); - break; - } - - setUserEU(uuid, new BigInteger(EU_String_0)); - - sender.addChatMessage( - new ChatComponentText( - "Successfully set " + formatted_username - + "'s global energy network to " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(new BigInteger(EU_String_0)) - + EnumChatFormatting.RESET - + "EU.")); - - } - case "global_energy_join" -> { - - // Usage is /gt global_energy_join username_of_you username_to_join - - String usernameSubject = strings[1]; - String usernameTeam = strings[2]; - - String formattedUsernameSubject = EnumChatFormatting.BLUE + usernameSubject + EnumChatFormatting.RESET; - String formattedUsernameTeam = EnumChatFormatting.BLUE + usernameTeam + EnumChatFormatting.RESET; - - UUID uuidSubject = SpaceProjectManager.getPlayerUUIDFromName(usernameSubject); - UUID uuidTeam = SpaceProjectManager.getLeader(SpaceProjectManager.getPlayerUUIDFromName(usernameTeam)); - - if (uuidSubject.equals(uuidTeam)) { - // leave team - SpaceProjectManager.putInTeam(uuidSubject, uuidSubject); - sender.addChatMessage( - new ChatComponentText( - "User " + formattedUsernameSubject + " has rejoined their own global energy network.")); - break; - } - - // join other's team - - if (uuidSubject.equals(uuidTeam)) { - sender.addChatMessage(new ChatComponentText("They are already in the same network!")); - break; - } - - SpaceProjectManager.putInTeam(uuidSubject, uuidTeam); - - sender.addChatMessage( - new ChatComponentText( - "Success! " + formattedUsernameSubject + " has joined " + formattedUsernameTeam + ".")); - sender.addChatMessage( - new ChatComponentText( - "To undo this simply join your own network again with /gt global_energy_join " - + formattedUsernameSubject - + " " - + formattedUsernameSubject - + ".")); - - } - case "global_energy_display" -> { - - // Usage is /gt global_energy_display username. - - String username = strings[1]; - String formatted_username = EnumChatFormatting.BLUE + username + EnumChatFormatting.RESET; - UUID userUUID = SpaceProjectManager.getPlayerUUIDFromName(username); - - if (!SpaceProjectManager.isInTeam(userUUID)) { - sender.addChatMessage( - new ChatComponentText("User " + formatted_username + " has no global energy network.")); - break; - } - UUID teamUUID = SpaceProjectManager.getLeader(userUUID); - - sender.addChatMessage( - new ChatComponentText( - "User " + formatted_username - + " has " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(getUserEU(userUUID)) - + EnumChatFormatting.RESET - + "EU in their network.")); - if (!userUUID.equals(teamUUID)) sender.addChatMessage( - new ChatComponentText( - "User " + formatted_username - + " is currently in network of " - + EnumChatFormatting.BLUE - + SpaceProjectManager.getPlayerNameFromUUID(teamUUID) - + EnumChatFormatting.RESET - + ".")); - - } - case "dump_music_durations" -> { - if (!FMLLaunchHandler.side() - .isClient()) { - sender - .addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "This command is client-only.")); - } - GT_MusicSystem.ClientSystem.dumpAllRecordDurations(); - } - default -> { - sender - .addChatMessage(new ChatComponentText(EnumChatFormatting.RED + "Invalid command/syntax detected.")); - printHelp(sender); - } - } - } -} diff --git a/src/main/java/gregtech/common/misc/GT_DrillingLogicDelegate.java b/src/main/java/gregtech/common/misc/GT_DrillingLogicDelegate.java deleted file mode 100644 index 9cf7fd7cf8..0000000000 --- a/src/main/java/gregtech/common/misc/GT_DrillingLogicDelegate.java +++ /dev/null @@ -1,266 +0,0 @@ -package gregtech.common.misc; - -import static gregtech.api.enums.GT_Values.debugBlockMiner; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.FakePlayer; - -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_TileEntity_Ores; - -/** @author Relvl on 27.01.2022 */ -@SuppressWarnings("ObjectEquality") -public class GT_DrillingLogicDelegate { - - public static final ItemStack MINING_PIPE_STACK = GT_ModHandler.getIC2Item("miningPipe", 0); - public static final Block MINING_PIPE_BLOCK = GT_Utility.getBlockFromStack(MINING_PIPE_STACK); - public static final Block MINING_PIPE_TIP_BLOCK = GT_Utility - .getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 0)); - - /** The owner machine pointer */ - private final GT_IDrillingLogicDelegateOwner owner; - - /** Is pipe retracting process done and halts? */ - private boolean isRetractDone; - /** Is machine ran out of mining pipes in its inventory and halts? */ - private boolean isWaitingForPipeItem; - /** Pipe tip depth (relative to machine Y position, NEGATIVE). */ - private int tipDepth; - /** Cached fake player */ - private FakePlayer mFakePlayer; - - public GT_DrillingLogicDelegate(GT_IDrillingLogicDelegateOwner owner) { - this.owner = owner; - } - - /** Descents a pipe tip one plock deeper. */ - public boolean descent(IGregTechTileEntity te) { - if (!te.isAllowedToWork()) { - return false; - } - - int xCoord = te.getXCoord(); - int zCoord = te.getZCoord(); - int yCoord = te.getYCoord(); - int checkY = yCoord + tipDepth - 1; - boolean isHitsTheVoid = checkY < 0; - boolean isHitsBedrock = GT_Utility.getBlockHardnessAt(te.getWorld(), xCoord, checkY, zCoord) < 0; - boolean isFakePlayerAllowed = canFakePlayerInteract(te, xCoord, checkY, zCoord); - - if (isHitsTheVoid || isHitsBedrock || !isFakePlayerAllowed) { - // Disable and start retracting process. - te.disableWorking(); - if (debugBlockMiner) { - if (isHitsTheVoid) { - GT_Log.out.println("MINER: Hit bottom"); - } - if (isHitsBedrock) { - GT_Log.out.println("MINER: Hit block with -1 hardness"); - } - if (!isFakePlayerAllowed) { - GT_Log.out.println("MINER: Unable to set mining pipe tip"); - } - } - return false; - } - - // Replace the tip onto pipe - if (te.getBlockOffset(0, tipDepth, 0) == MINING_PIPE_TIP_BLOCK) { - te.getWorld() - .setBlock(xCoord, yCoord + tipDepth, zCoord, MINING_PIPE_BLOCK); - } - // Get and decrease pipe from the machine - boolean pipeTaken = owner.pullInputs(MINING_PIPE_STACK.getItem(), 1, false); - if (!pipeTaken) { - // If there was nothing - waiting for the pipes (just for prevent unnecessary checks) - isWaitingForPipeItem = true; - return false; - } - - // If there is something - mine it - Block block = te.getBlockOffset(0, tipDepth - 1, 0); - if (!block.isAir(te.getWorld(), xCoord, yCoord, zCoord)) { - mineBlock(te, block, xCoord, yCoord + tipDepth - 1, zCoord); - } - - // Descent the pipe tip - te.getWorld() - .setBlock(xCoord, yCoord + tipDepth - 1, zCoord, MINING_PIPE_TIP_BLOCK); - tipDepth--; - return true; - } - - public void onOwnerPostTick(IGregTechTileEntity te, long tick) { - // If the machine was disabled - try to retract pipe - if (!te.isAllowedToWork()) { - onPostTickRetract(te, tick); - return; - } - // If the machine was re-enabled - we should reset the retracting process - isRetractDone = false; - } - - /** If the machine are disabled - tried to retract pipe. */ - private void onPostTickRetract(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (isRetractDone) { - return; - } - // If retracting process just touch the miner - if (tipDepth == 0) { - isRetractDone = true; - return; - } - // Once per N ticks (depends on tier) - if ((aTick % (owner.getMachineSpeed() / 5)) != 0) { - return; - } - - // Check we can push pipe back to machine (inputs allowed for this case!) - boolean canPush = owner.pushOutputs(MINING_PIPE_STACK, 1, true, true); - if (!canPush) { - return; - } - - // Inspect target block - it should be a pipe tip, else something went wrong. - Block targetBlock = aBaseMetaTileEntity.getBlockOffset(0, tipDepth, 0); - if (targetBlock != MINING_PIPE_TIP_BLOCK && targetBlock != MINING_PIPE_BLOCK) { - return; - } - - // Retract the pipe/tip - int xCoord = aBaseMetaTileEntity.getXCoord(); - int yCoord = aBaseMetaTileEntity.getYCoord(); - int zCoord = aBaseMetaTileEntity.getZCoord(); - int actualDrillY = yCoord + tipDepth; - // Move the pipe tip position - if (actualDrillY < yCoord - 1) { - owner.getBaseMetaTileEntity() - .getWorld() - .setBlock(xCoord, actualDrillY + 1, zCoord, MINING_PIPE_TIP_BLOCK); - } - // Remove the old pipe tip - aBaseMetaTileEntity.getWorld() - .setBlock(xCoord, actualDrillY, zCoord, Blocks.air, 0, /* send to client without neighbour updates */ 2); - - // Return the pipe back to the machine (inputs allowed for this case!) - owner.pushOutputs(MINING_PIPE_STACK, 1, false, true); - - tipDepth++; - } - - /** Minings the block if it is possible. */ - public void mineBlock(IGregTechTileEntity te, Block block, int x, int y, int z) { - if (!GT_Utility.eraseBlockByFakePlayer(getFakePlayer(te), x, y, z, true)) { - return; - } - - List drops = getBlockDrops(block, x, y, z); - - boolean canFitDrops = true; - for (ItemStack drop : drops) { - canFitDrops &= owner.pushOutputs(drop, drop.stackSize, true, false); - } - if (!canFitDrops) { - return; - } - for (ItemStack drop : drops) { - owner.pushOutputs(drop, drop.stackSize, false, false); - } - - short metaData = 0; - TileEntity tTileEntity = owner.getBaseMetaTileEntity() - .getTileEntity(x, y, z); - if (tTileEntity instanceof GT_TileEntity_Ores) { - metaData = ((GT_TileEntity_Ores) tTileEntity).mMetaData; - } - - ItemStack cobble = GT_Utility.getCobbleForOre(block, metaData); - te.getWorld() - .setBlock( - x, - y, - z, - Block.getBlockFromItem(cobble.getItem()), - cobble.getItemDamage(), /* cause updates(1) + send to client(2) */ - 3); - } - - /** - * Returns NEGATIVE (eg -5) depth of current drilling Y world level. RELATIVELY TO MINER ENTITY! This means '(miner - * world Y) + depth = (actual world Y)'. - */ - public int getTipDepth() { - return tipDepth; - } - - /** Looking for the lowest continuous pipe. */ - public void findTipDepth() { - IGregTechTileEntity ownerTe = owner.getBaseMetaTileEntity(); - if (!ownerTe.isServerSide()) { - return; - } - while (true) { - Block block = ownerTe.getBlockOffset(0, tipDepth - 1, 0); - if (block != MINING_PIPE_BLOCK && block != MINING_PIPE_TIP_BLOCK) { - return; - } - tipDepth--; - } - } - - /** - * Creates and provides the Fake Player for owners. todo maybe will provide player owner uuid? im sure some servers - * not allow to fakers, in griefing reasons. - */ - public FakePlayer getFakePlayer(IGregTechTileEntity te) { - if (mFakePlayer == null) { - mFakePlayer = GT_Utility.getFakePlayer(te); - } - if (mFakePlayer != null) { - mFakePlayer.setWorld(te.getWorld()); - mFakePlayer.setPosition(te.getXCoord(), te.getYCoord(), te.getZCoord()); - } - return mFakePlayer; - } - - public boolean canFakePlayerInteract(IGregTechTileEntity te, int xCoord, int yCoord, int zCoord) { - return GT_Utility - .setBlockByFakePlayer(getFakePlayer(te), xCoord, yCoord, zCoord, MINING_PIPE_TIP_BLOCK, 0, true); - } - - /** Get target block drops. We need to encapsulate everyting of mining in this class. */ - private List getBlockDrops(final Block oreBlock, int posX, int posY, int posZ) { - return oreBlock.getDrops( - owner.getBaseMetaTileEntity() - .getWorld(), - posX, - posY, - posZ, - owner.getBaseMetaTileEntity() - .getMetaID(posX, posY, posZ), - owner.getMachineTier()); - } - - /** Can the owner continue doing its work? If we await new pipes - it cannot. */ - public boolean canContinueDrilling(long tick) { - if (isWaitingForPipeItem) { - if (tick % 5 != 0) { - return false; - } - boolean hasPipe = owner.pullInputs(MINING_PIPE_STACK.getItem(), 1, true); - if (hasPipe) { - isWaitingForPipeItem = false; - } - return hasPipe; - } - return true; - } -} diff --git a/src/main/java/gregtech/common/misc/GT_IDrillingLogicDelegateOwner.java b/src/main/java/gregtech/common/misc/GT_IDrillingLogicDelegateOwner.java deleted file mode 100644 index 9b10b6fcf0..0000000000 --- a/src/main/java/gregtech/common/misc/GT_IDrillingLogicDelegateOwner.java +++ /dev/null @@ -1,22 +0,0 @@ -package gregtech.common.misc; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; - -/** @author Relvl on 27.01.2022 */ -public interface GT_IDrillingLogicDelegateOwner extends IMetaTileEntity { - - /** Returns the machine actual tier. */ - int getMachineTier(); - - /** Returns the machine current processing speed. */ - int getMachineSpeed(); - - /** Pulls (or check can pull) items from an input slots. */ - boolean pullInputs(Item item, int count, boolean simulate); - - /** Pushes (or check can push) item to output slots. */ - boolean pushOutputs(ItemStack stack, int count, boolean simulate, boolean allowInputSlots); -} diff --git a/src/main/java/gregtech/common/misc/GlobalMetricsCoverDatabase.java b/src/main/java/gregtech/common/misc/GlobalMetricsCoverDatabase.java index 33e8198bd6..f3efceafeb 100644 --- a/src/main/java/gregtech/common/misc/GlobalMetricsCoverDatabase.java +++ b/src/main/java/gregtech/common/misc/GlobalMetricsCoverDatabase.java @@ -37,10 +37,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_Utility; +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTUtility; import gregtech.common.covers.CoverInfo; -import gregtech.common.covers.GT_Cover_Metrics_Transmitter; +import gregtech.common.covers.CoverMetricsTransmitter; import gregtech.common.events.MetricsCoverDataEvent; import gregtech.common.events.MetricsCoverHostDeconstructedEvent; import gregtech.common.events.MetricsCoverSelfDestructEvent; @@ -302,15 +302,15 @@ public class GlobalMetricsCoverDatabase extends WorldSavedData { private static Stream getCoverUUIDsFromItemStack(final ItemStack stack) { if (stack.hasTagCompound() && stack.getTagCompound() - .hasKey(GT_Values.NBT.COVERS, TAG_COMPOUND)) { + .hasKey(GTValues.NBT.COVERS, TAG_COMPOUND)) { final NBTTagList tagList = stack.getTagCompound() - .getTagList(GT_Values.NBT.COVERS, TAG_COMPOUND); + .getTagList(GTValues.NBT.COVERS, TAG_COMPOUND); return IntStream.range(0, tagList.tagCount()) .mapToObj(tagList::getCompoundTagAt) .map(nbt -> new CoverInfo(null, nbt).getCoverData()) .filter( - serializableObject -> serializableObject instanceof GT_Cover_Metrics_Transmitter.MetricsTransmitterData) - .map(data -> ((GT_Cover_Metrics_Transmitter.MetricsTransmitterData) data).getFrequency()); + serializableObject -> serializableObject instanceof CoverMetricsTransmitter.MetricsTransmitterData) + .map(data -> ((CoverMetricsTransmitter.MetricsTransmitterData) data).getFrequency()); } return Stream.empty(); } @@ -433,9 +433,9 @@ public class GlobalMetricsCoverDatabase extends WorldSavedData { public String getLocalizedCoordinates() { return StatCollector.translateToLocalFormatted( "gt.db.metrics_cover.coords", - GT_Utility.formatNumbers(x), - GT_Utility.formatNumbers(y), - GT_Utility.formatNumbers(z)); + GTUtility.formatNumbers(x), + GTUtility.formatNumbers(y), + GTUtility.formatNumbers(z)); } @Override diff --git a/src/main/java/gregtech/common/misc/IDrillingLogicDelegateOwner.java b/src/main/java/gregtech/common/misc/IDrillingLogicDelegateOwner.java new file mode 100644 index 0000000000..cd9a5f1621 --- /dev/null +++ b/src/main/java/gregtech/common/misc/IDrillingLogicDelegateOwner.java @@ -0,0 +1,22 @@ +package gregtech.common.misc; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; + +/** @author Relvl on 27.01.2022 */ +public interface IDrillingLogicDelegateOwner extends IMetaTileEntity { + + /** Returns the machine actual tier. */ + int getMachineTier(); + + /** Returns the machine current processing speed. */ + int getMachineSpeed(); + + /** Pulls (or check can pull) items from an input slots. */ + boolean pullInputs(Item item, int count, boolean simulate); + + /** Pushes (or check can push) item to output slots. */ + boolean pushOutputs(ItemStack stack, int count, boolean simulate, boolean allowInputSlots); +} diff --git a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectManager.java b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectManager.java index 323b22e20a..a076a05c9a 100644 --- a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectManager.java +++ b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectManager.java @@ -12,7 +12,7 @@ import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.tuple.Pair; import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; import gregtech.common.misc.spaceprojects.interfaces.ISpaceBody; import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject; @@ -187,7 +187,7 @@ public class SpaceProjectManager { // #region Project Helper methods - public static class FakeSpaceProjectRecipe extends GT_Recipe { + public static class FakeSpaceProjectRecipe extends GTRecipe { public final String projectName; diff --git a/src/main/java/gregtech/common/misc/spaceprojects/base/SPRequirements.java b/src/main/java/gregtech/common/misc/spaceprojects/base/SPRequirements.java new file mode 100644 index 0000000000..dc92d8bebf --- /dev/null +++ b/src/main/java/gregtech/common/misc/spaceprojects/base/SPRequirements.java @@ -0,0 +1,74 @@ +package gregtech.common.misc.spaceprojects.base; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import gregtech.common.misc.spaceprojects.enums.SpaceBodyType; +import gregtech.common.misc.spaceprojects.enums.StarType; +import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject; +import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject.ISP_Requirements; +import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject.ISP_Upgrade; + +/** + * @author BlueWeabo + */ +public class SPRequirements implements ISP_Requirements { + + // #region Variables + + protected SpaceBodyType spaceBody = SpaceBodyType.NONE; + protected StarType star = StarType.NotAStar; + protected List spaceProjects = new ArrayList<>(); + protected List upgrades = new ArrayList<>(); + + // #endregion + + // #region Getters + + @Override + public SpaceBodyType getBodyType() { + return spaceBody; + } + + @Override + public StarType getStarType() { + return star; + } + + @Override + public List getProjects() { + return spaceProjects; + } + + @Override + public List getUpgrades() { + return upgrades; + } + + // #endregion + + // #region Setters/Builder + + public SPRequirements setSpaceBodyType(SpaceBodyType spaceBodyType) { + spaceBody = spaceBodyType; + return this; + } + + public SPRequirements setStarType(StarType starType) { + star = starType; + return this; + } + + public SPRequirements setUpgrades(ISP_Upgrade... requirementUpgrades) { + upgrades.addAll(Arrays.asList(requirementUpgrades)); + return this; + } + + public SPRequirements setSpaceProjects(ISpaceProject... requirementProjects) { + spaceProjects.addAll(Arrays.asList(requirementProjects)); + return this; + } + + // #endregion +} diff --git a/src/main/java/gregtech/common/misc/spaceprojects/base/SPUpgrade.java b/src/main/java/gregtech/common/misc/spaceprojects/base/SPUpgrade.java new file mode 100644 index 0000000000..b07ff7905a --- /dev/null +++ b/src/main/java/gregtech/common/misc/spaceprojects/base/SPUpgrade.java @@ -0,0 +1,362 @@ +package gregtech.common.misc.spaceprojects.base; + +import java.util.UUID; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.common.misc.spaceprojects.SpaceProjectManager; +import gregtech.common.misc.spaceprojects.enums.SpaceBodyType; +import gregtech.common.misc.spaceprojects.enums.UpgradeStatus; +import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject; +import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject.ISP_Upgrade; + +/** + * @author BlueWeabo + */ +public class SPUpgrade implements ISP_Upgrade { + + // #region Variables + + protected String name; + protected String unlocalizedName; + protected ItemStack[] itemsCost; + protected FluidStack[] fluidsCost; + protected int totalStages; + protected int currentStage; + protected int buildTime; + protected long voltage; + protected SPRequirements requirements; + protected ISpaceProject projectBelongingTo; + + // #endregion + + // #region Getters + + @Override + public String getUpgradeName() { + return name; + } + + @Override + public String getUnlocalizedName() { + return unlocalizedName; + } + + @Override + public String getLocalizedName() { + return StatCollector.translateToLocal(unlocalizedName); + } + + @Override + public ItemStack[] getItemsCostPerStage() { + return itemsCost; + } + + @Override + public ItemStack getItemCostPerStage(int index) { + if (itemsCost == null || index < 0 || index >= itemsCost.length) { + return null; + } + + return itemsCost[index]; + } + + @Override + public ItemStack[] getCurrentItemsProgress() { + ItemStack[] currentItemsProgress = new ItemStack[itemsCost.length]; + int index = 0; + for (ItemStack item : itemsCost) { + ItemStack copy = item.copy(); + copy.stackSize *= getCurrentStage(); + currentItemsProgress[index++] = copy; + } + + return currentItemsProgress; + } + + @Override + public ItemStack getCurrentItemProgress(int index) { + if (itemsCost == null || index < 0 || index >= itemsCost.length || itemsCost[index] == null) { + return null; + } + + ItemStack item = itemsCost[index].copy(); + item.stackSize *= getCurrentStage(); + return item; + } + + @Override + public ItemStack[] getTotalItemsCost() { + ItemStack[] totalItemsCost = new ItemStack[itemsCost.length]; + int index = 0; + for (ItemStack item : itemsCost) { + ItemStack copy = item.copy(); + copy.stackSize *= getTotalStages(); + totalItemsCost[index++] = copy; + } + + return totalItemsCost; + } + + @Override + public ItemStack getTotalItemCost(int index) { + if (itemsCost == null || index < 0 || index >= itemsCost.length || itemsCost[index] == null) { + return null; + } + + ItemStack item = itemsCost[index].copy(); + item.stackSize *= getTotalStages(); + return item; + } + + @Override + public FluidStack[] getFluidsCostPerStage() { + return fluidsCost; + } + + @Override + public FluidStack getFluidCostPerStage(int index) { + if (fluidsCost == null || index < 0 || index >= fluidsCost.length) { + return null; + } + + return fluidsCost[index]; + } + + @Override + public FluidStack[] getCurrentFluidsProgress() { + if (fluidsCost == null) { + return null; + } + + FluidStack[] currentFluidsProgress = new FluidStack[fluidsCost.length]; + int index = 0; + for (FluidStack fluid : fluidsCost) { + FluidStack copy = fluid.copy(); + copy.amount *= getCurrentStage(); + currentFluidsProgress[index++] = copy; + } + + return currentFluidsProgress; + } + + @Override + public FluidStack getCurrentFluidProgress(int index) { + if (fluidsCost == null || index < 0 || index >= fluidsCost.length || fluidsCost[index] == null) { + return null; + } + + FluidStack fluid = fluidsCost[index].copy(); + fluid.amount *= getCurrentStage(); + return fluid; + } + + @Override + public FluidStack[] getTotalFluidsCost() { + if (fluidsCost == null) { + return null; + } + + FluidStack[] totalFluidsCost = new FluidStack[fluidsCost.length]; + int index = 0; + for (FluidStack fluid : fluidsCost) { + FluidStack copy = fluid.copy(); + copy.amount *= getTotalStages(); + totalFluidsCost[index++] = copy; + } + + return totalFluidsCost; + } + + @Override + public FluidStack getTotalFluidCost(int index) { + if (fluidsCost == null || index < 0 || index >= fluidsCost.length || fluidsCost[index] == null) { + return null; + } + + FluidStack fluid = fluidsCost[index].copy(); + fluid.amount *= getTotalStages(); + return fluid; + } + + @Override + public int getTotalStages() { + return totalStages; + } + + @Override + public int getUpgradeBuildTime() { + return buildTime; + } + + @Override + public int getCurrentStage() { + return currentStage; + } + + @Override + public float getCurrentProgress() { + return currentStage / totalStages * 100.0f; + } + + @Override + public long getVoltage() { + return voltage; + } + + @Override + public UpgradeStatus getStatus() { + if (requirements == null) { + return UpgradeStatus.Unlocked; + } + + if (isFinished()) { + return UpgradeStatus.Finished; + } + return UpgradeStatus.Locked; + } + + @Override + public SPRequirements getUpgradeRequirements() { + return requirements; + } + + @Override + public ISpaceProject getParentProject() { + return projectBelongingTo; + } + + // #endregion + + // #region Setter/Builder + + public SPUpgrade() {} + + public SPUpgrade setUpgradeName(String upgradeName) { + name = upgradeName; + return this; + } + + public SPUpgrade setUpgradeUnlocalizedName(String upgradeUnlocalizedName) { + unlocalizedName = upgradeUnlocalizedName; + return this; + } + + public SPUpgrade setUpgradeItemsCost(ItemStack... upgradeItemsCost) { + itemsCost = upgradeItemsCost; + return this; + } + + public SPUpgrade setUpgradeFluidsCost(FluidStack... upgradeFluidsCost) { + fluidsCost = upgradeFluidsCost; + return this; + } + + public SPUpgrade setUpgradeRequirements(SPRequirements upgradeRequirements) { + requirements = upgradeRequirements; + return this; + } + + public SPUpgrade setUpgradeTotalStages(int upgradeTotalStages) { + totalStages = upgradeTotalStages; + return this; + } + + public SPUpgrade setUpgradeBuildTime(int upgradeBuildTime) { + buildTime = upgradeBuildTime; + return this; + } + + public SPUpgrade setUpgradeVoltage(long upgradeVoltage) { + voltage = upgradeVoltage; + return this; + } + + @Override + public void setUpgradeProject(ISpaceProject project) { + projectBelongingTo = project; + } + + @Override + public void setUpgradeCurrentStage(int stage) { + currentStage = stage; + } + + // #endregion + + // #region Other + + @Override + public boolean meetsRequirements(UUID aTeam) { + if (requirements == null) { + return true; + } + + if (requirements.getBodyType() != null && !requirements.getBodyType() + .equals(SpaceBodyType.NONE)) { + if (!requirements.getBodyType() + .equals( + projectBelongingTo.getProjectLocation() + .getType())) { + return false; + } + } + + if (requirements.getStarType() != null) { + if (!requirements.getStarType() + .equals( + projectBelongingTo.getProjectLocation() + .getStarType())) { + return false; + } + } + + if (requirements.getProjects() != null) { + for (ISpaceProject tProject : requirements.getProjects()) { + if (!SpaceProjectManager.teamHasProject(aTeam, tProject)) { + return false; + } + } + } + + if (requirements.getUpgrades() != null) { + for (ISP_Upgrade upgrade : requirements.getUpgrades()) { + if (!projectBelongingTo.hasUpgrade(upgrade.getUpgradeName())) { + return false; + } + } + } + + return true; + } + + @Override + public SPUpgrade copy() { + return new SPUpgrade().setUpgradeName(name) + .setUpgradeUnlocalizedName(unlocalizedName) + .setUpgradeBuildTime(buildTime) + .setUpgradeFluidsCost(fluidsCost) + .setUpgradeItemsCost(itemsCost) + .setUpgradeRequirements(requirements) + .setUpgradeTotalStages(totalStages) + .setUpgradeVoltage(voltage); + } + + @Override + public void goToNextStage() { + currentStage++; + if (isFinished()) { + projectBelongingTo.setBuiltUpgrade(this); + } + } + + @Override + public boolean isFinished() { + return currentStage == totalStages; + } + + // #endregion + +} diff --git a/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Requirements.java b/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Requirements.java deleted file mode 100644 index b910b5e344..0000000000 --- a/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Requirements.java +++ /dev/null @@ -1,74 +0,0 @@ -package gregtech.common.misc.spaceprojects.base; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import gregtech.common.misc.spaceprojects.enums.SpaceBodyType; -import gregtech.common.misc.spaceprojects.enums.StarType; -import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject; -import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject.ISP_Requirements; -import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject.ISP_Upgrade; - -/** - * @author BlueWeabo - */ -public class SP_Requirements implements ISP_Requirements { - - // #region Variables - - protected SpaceBodyType spaceBody = SpaceBodyType.NONE; - protected StarType star = StarType.NotAStar; - protected List spaceProjects = new ArrayList<>(); - protected List upgrades = new ArrayList<>(); - - // #endregion - - // #region Getters - - @Override - public SpaceBodyType getBodyType() { - return spaceBody; - } - - @Override - public StarType getStarType() { - return star; - } - - @Override - public List getProjects() { - return spaceProjects; - } - - @Override - public List getUpgrades() { - return upgrades; - } - - // #endregion - - // #region Setters/Builder - - public SP_Requirements setSpaceBodyType(SpaceBodyType spaceBodyType) { - spaceBody = spaceBodyType; - return this; - } - - public SP_Requirements setStarType(StarType starType) { - star = starType; - return this; - } - - public SP_Requirements setUpgrades(ISP_Upgrade... requirementUpgrades) { - upgrades.addAll(Arrays.asList(requirementUpgrades)); - return this; - } - - public SP_Requirements setSpaceProjects(ISpaceProject... requirementProjects) { - spaceProjects.addAll(Arrays.asList(requirementProjects)); - return this; - } - - // #endregion -} diff --git a/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Upgrade.java b/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Upgrade.java deleted file mode 100644 index 835a57f277..0000000000 --- a/src/main/java/gregtech/common/misc/spaceprojects/base/SP_Upgrade.java +++ /dev/null @@ -1,362 +0,0 @@ -package gregtech.common.misc.spaceprojects.base; - -import java.util.UUID; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.common.misc.spaceprojects.SpaceProjectManager; -import gregtech.common.misc.spaceprojects.enums.SpaceBodyType; -import gregtech.common.misc.spaceprojects.enums.UpgradeStatus; -import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject; -import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject.ISP_Upgrade; - -/** - * @author BlueWeabo - */ -public class SP_Upgrade implements ISP_Upgrade { - - // #region Variables - - protected String name; - protected String unlocalizedName; - protected ItemStack[] itemsCost; - protected FluidStack[] fluidsCost; - protected int totalStages; - protected int currentStage; - protected int buildTime; - protected long voltage; - protected SP_Requirements requirements; - protected ISpaceProject projectBelongingTo; - - // #endregion - - // #region Getters - - @Override - public String getUpgradeName() { - return name; - } - - @Override - public String getUnlocalizedName() { - return unlocalizedName; - } - - @Override - public String getLocalizedName() { - return StatCollector.translateToLocal(unlocalizedName); - } - - @Override - public ItemStack[] getItemsCostPerStage() { - return itemsCost; - } - - @Override - public ItemStack getItemCostPerStage(int index) { - if (itemsCost == null || index < 0 || index >= itemsCost.length) { - return null; - } - - return itemsCost[index]; - } - - @Override - public ItemStack[] getCurrentItemsProgress() { - ItemStack[] currentItemsProgress = new ItemStack[itemsCost.length]; - int index = 0; - for (ItemStack item : itemsCost) { - ItemStack copy = item.copy(); - copy.stackSize *= getCurrentStage(); - currentItemsProgress[index++] = copy; - } - - return currentItemsProgress; - } - - @Override - public ItemStack getCurrentItemProgress(int index) { - if (itemsCost == null || index < 0 || index >= itemsCost.length || itemsCost[index] == null) { - return null; - } - - ItemStack item = itemsCost[index].copy(); - item.stackSize *= getCurrentStage(); - return item; - } - - @Override - public ItemStack[] getTotalItemsCost() { - ItemStack[] totalItemsCost = new ItemStack[itemsCost.length]; - int index = 0; - for (ItemStack item : itemsCost) { - ItemStack copy = item.copy(); - copy.stackSize *= getTotalStages(); - totalItemsCost[index++] = copy; - } - - return totalItemsCost; - } - - @Override - public ItemStack getTotalItemCost(int index) { - if (itemsCost == null || index < 0 || index >= itemsCost.length || itemsCost[index] == null) { - return null; - } - - ItemStack item = itemsCost[index].copy(); - item.stackSize *= getTotalStages(); - return item; - } - - @Override - public FluidStack[] getFluidsCostPerStage() { - return fluidsCost; - } - - @Override - public FluidStack getFluidCostPerStage(int index) { - if (fluidsCost == null || index < 0 || index >= fluidsCost.length) { - return null; - } - - return fluidsCost[index]; - } - - @Override - public FluidStack[] getCurrentFluidsProgress() { - if (fluidsCost == null) { - return null; - } - - FluidStack[] currentFluidsProgress = new FluidStack[fluidsCost.length]; - int index = 0; - for (FluidStack fluid : fluidsCost) { - FluidStack copy = fluid.copy(); - copy.amount *= getCurrentStage(); - currentFluidsProgress[index++] = copy; - } - - return currentFluidsProgress; - } - - @Override - public FluidStack getCurrentFluidProgress(int index) { - if (fluidsCost == null || index < 0 || index >= fluidsCost.length || fluidsCost[index] == null) { - return null; - } - - FluidStack fluid = fluidsCost[index].copy(); - fluid.amount *= getCurrentStage(); - return fluid; - } - - @Override - public FluidStack[] getTotalFluidsCost() { - if (fluidsCost == null) { - return null; - } - - FluidStack[] totalFluidsCost = new FluidStack[fluidsCost.length]; - int index = 0; - for (FluidStack fluid : fluidsCost) { - FluidStack copy = fluid.copy(); - copy.amount *= getTotalStages(); - totalFluidsCost[index++] = copy; - } - - return totalFluidsCost; - } - - @Override - public FluidStack getTotalFluidCost(int index) { - if (fluidsCost == null || index < 0 || index >= fluidsCost.length || fluidsCost[index] == null) { - return null; - } - - FluidStack fluid = fluidsCost[index].copy(); - fluid.amount *= getTotalStages(); - return fluid; - } - - @Override - public int getTotalStages() { - return totalStages; - } - - @Override - public int getUpgradeBuildTime() { - return buildTime; - } - - @Override - public int getCurrentStage() { - return currentStage; - } - - @Override - public float getCurrentProgress() { - return currentStage / totalStages * 100.0f; - } - - @Override - public long getVoltage() { - return voltage; - } - - @Override - public UpgradeStatus getStatus() { - if (requirements == null) { - return UpgradeStatus.Unlocked; - } - - if (isFinished()) { - return UpgradeStatus.Finished; - } - return UpgradeStatus.Locked; - } - - @Override - public SP_Requirements getUpgradeRequirements() { - return requirements; - } - - @Override - public ISpaceProject getParentProject() { - return projectBelongingTo; - } - - // #endregion - - // #region Setter/Builder - - public SP_Upgrade() {} - - public SP_Upgrade setUpgradeName(String upgradeName) { - name = upgradeName; - return this; - } - - public SP_Upgrade setUpgradeUnlocalizedName(String upgradeUnlocalizedName) { - unlocalizedName = upgradeUnlocalizedName; - return this; - } - - public SP_Upgrade setUpgradeItemsCost(ItemStack... upgradeItemsCost) { - itemsCost = upgradeItemsCost; - return this; - } - - public SP_Upgrade setUpgradeFluidsCost(FluidStack... upgradeFluidsCost) { - fluidsCost = upgradeFluidsCost; - return this; - } - - public SP_Upgrade setUpgradeRequirements(SP_Requirements upgradeRequirements) { - requirements = upgradeRequirements; - return this; - } - - public SP_Upgrade setUpgradeTotalStages(int upgradeTotalStages) { - totalStages = upgradeTotalStages; - return this; - } - - public SP_Upgrade setUpgradeBuildTime(int upgradeBuildTime) { - buildTime = upgradeBuildTime; - return this; - } - - public SP_Upgrade setUpgradeVoltage(long upgradeVoltage) { - voltage = upgradeVoltage; - return this; - } - - @Override - public void setUpgradeProject(ISpaceProject project) { - projectBelongingTo = project; - } - - @Override - public void setUpgradeCurrentStage(int stage) { - currentStage = stage; - } - - // #endregion - - // #region Other - - @Override - public boolean meetsRequirements(UUID aTeam) { - if (requirements == null) { - return true; - } - - if (requirements.getBodyType() != null && !requirements.getBodyType() - .equals(SpaceBodyType.NONE)) { - if (!requirements.getBodyType() - .equals( - projectBelongingTo.getProjectLocation() - .getType())) { - return false; - } - } - - if (requirements.getStarType() != null) { - if (!requirements.getStarType() - .equals( - projectBelongingTo.getProjectLocation() - .getStarType())) { - return false; - } - } - - if (requirements.getProjects() != null) { - for (ISpaceProject tProject : requirements.getProjects()) { - if (!SpaceProjectManager.teamHasProject(aTeam, tProject)) { - return false; - } - } - } - - if (requirements.getUpgrades() != null) { - for (ISP_Upgrade upgrade : requirements.getUpgrades()) { - if (!projectBelongingTo.hasUpgrade(upgrade.getUpgradeName())) { - return false; - } - } - } - - return true; - } - - @Override - public SP_Upgrade copy() { - return new SP_Upgrade().setUpgradeName(name) - .setUpgradeUnlocalizedName(unlocalizedName) - .setUpgradeBuildTime(buildTime) - .setUpgradeFluidsCost(fluidsCost) - .setUpgradeItemsCost(itemsCost) - .setUpgradeRequirements(requirements) - .setUpgradeTotalStages(totalStages) - .setUpgradeVoltage(voltage); - } - - @Override - public void goToNextStage() { - currentStage++; - if (isFinished()) { - projectBelongingTo.setBuiltUpgrade(this); - } - } - - @Override - public boolean isFinished() { - return currentStage == totalStages; - } - - // #endregion - -} diff --git a/src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java b/src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java index 201b7c27a9..d682dd6c01 100644 --- a/src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java +++ b/src/main/java/gregtech/common/misc/spaceprojects/base/SpaceProject.java @@ -378,7 +378,7 @@ public class SpaceProject implements ISpaceProject { .setProjectTexture(texture) .setProjectRequirements(requirements); if (upgradesAvailable != null) { - ISP_Upgrade[] upgrades = new SP_Upgrade[upgradesAvailable.size()]; + ISP_Upgrade[] upgrades = new SPUpgrade[upgradesAvailable.size()]; int index = 0; for (ISP_Upgrade upgrade : upgradesAvailable.values()) { upgrades[index++] = upgrade.copy(); diff --git a/src/main/java/gregtech/common/misc/spaceprojects/commands/SPCommand.java b/src/main/java/gregtech/common/misc/spaceprojects/commands/SPCommand.java new file mode 100644 index 0000000000..39332818fe --- /dev/null +++ b/src/main/java/gregtech/common/misc/spaceprojects/commands/SPCommand.java @@ -0,0 +1,166 @@ +package gregtech.common.misc.spaceprojects.commands; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.Set; +import java.util.WeakHashMap; +import java.util.stream.Collectors; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.EnumChatFormatting; + +import org.apache.commons.lang3.tuple.Pair; + +import gregtech.api.util.GTUtility; +import gregtech.common.misc.spaceprojects.SpaceProjectManager; + +/** + * @author BlueWeabo + */ +public class SPCommand extends CommandBase { + + private static final Set> invite = Collections + .newSetFromMap(new WeakHashMap<>()); + private static final Set confirm = Collections.newSetFromMap(new WeakHashMap<>()); + + private static final String INVITE = "invite"; + private static final String ACCEPT = "accept"; + private static final String LEAVE = "leave"; + private static final String CONFIRM = "confirm"; + + @Override + public String getCommandName() { + return "sp"; + } + + @Override + public int getRequiredPermissionLevel() { + return 0; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "/" + getCommandName() + " [PlayerName]"; + } + + @Override + public void processCommand(ICommandSender sender, String[] arguments) { + if (arguments.length < 1) { + return; + } + switch (arguments[0]) { + case INVITE -> { + if (arguments.length < 2) { + return; + } + processInvite(sender, arguments[1]); + } + case ACCEPT -> { + if (arguments.length < 2) { + return; + } + processAccept(sender, arguments[1]); + } + case LEAVE -> processLeave(sender); + case CONFIRM -> processConfirm(sender); + } + } + + private void processInvite(ICommandSender sender, String playerInvited) { + EntityPlayerMP teamLeader = getCommandSenderAsPlayer(sender); + EntityPlayerMP teamMember = getPlayer(sender, playerInvited); + invite.add(Pair.of(teamMember, teamLeader)); + String message = EnumChatFormatting.GOLD + teamLeader.getCommandSenderName() + + EnumChatFormatting.RESET + + " has sent you an invite to join their team. Accept it with" + + EnumChatFormatting.GOLD + + " /sp accept " + + teamLeader.getCommandSenderName(); + GTUtility.sendChatToPlayer(teamMember, message); + } + + private void processAccept(ICommandSender sender, String playerInviter) { + EntityPlayerMP teamMember = getCommandSenderAsPlayer(sender); + EntityPlayerMP teamLeader = getPlayer(sender, playerInviter); + if (invite.contains(Pair.of(teamMember, teamLeader))) { + String message = EnumChatFormatting.GOLD + teamMember.getCommandSenderName() + + EnumChatFormatting.RESET + + " has accepted the invite."; + SpaceProjectManager.putInTeam(teamMember.getUniqueID(), teamLeader.getUniqueID()); + GTUtility.sendChatToPlayer(teamLeader, message); + invite.remove(Pair.of(teamMember, teamLeader)); + } + } + + private void processLeave(ICommandSender sender) { + EntityPlayerMP player = getCommandSenderAsPlayer(sender); + String message = "Are you sure you want to leave the team. You will lose all progress. Use " + + EnumChatFormatting.GOLD + + "/sp confirm" + + EnumChatFormatting.RESET + + " to confirm this. This does nothing if you are the team leader."; + GTUtility.sendChatToPlayer(player, message); + confirm.add(player); + } + + private void processConfirm(ICommandSender sender) { + EntityPlayerMP player = getCommandSenderAsPlayer(sender); + if (confirm.contains(player)) { + String message = "Successfully left the team."; + SpaceProjectManager.putInTeam(player.getUniqueID(), player.getUniqueID()); + GTUtility.sendChatToPlayer(player, message); + confirm.remove(player); + } + } + + @Override + public List addTabCompletionOptions(ICommandSender sender, String[] arguments) { + List autoComplete = new ArrayList<>(); + String filter = arguments.length == 0 ? "" : arguments[0].trim(); + switch (arguments.length) { + case 1 -> autoComplete.addAll(Arrays.asList(getSubCommands())); + case 2 -> { + filter = arguments[1].trim(); + if (arguments[0].equals(INVITE)) { + autoComplete.addAll(Arrays.asList(getPlayers())); + break; + } + + if (arguments[0].equals(CONFIRM)) { + Optional> pairOpt = invite.stream() + .filter( + (e) -> e.getKey() + .getUniqueID() == getCommandSenderAsPlayer(sender).getUniqueID()) + .findFirst(); + if (pairOpt.isPresent()) { + autoComplete.add( + SpaceProjectManager.getPlayerNameFromUUID( + pairOpt.get() + .getRight() + .getUniqueID())); + } + } + } + } + String finalFilter = filter; + return autoComplete.stream() + .filter(s -> finalFilter.isEmpty() || s.startsWith(finalFilter)) + .collect(Collectors.toList()); + } + + private String[] getPlayers() { + return MinecraftServer.getServer() + .getAllUsernames(); + } + + private String[] getSubCommands() { + return new String[] { INVITE, ACCEPT, LEAVE, CONFIRM }; + } + +} diff --git a/src/main/java/gregtech/common/misc/spaceprojects/commands/SPMCommand.java b/src/main/java/gregtech/common/misc/spaceprojects/commands/SPMCommand.java new file mode 100644 index 0000000000..8379162f84 --- /dev/null +++ b/src/main/java/gregtech/common/misc/spaceprojects/commands/SPMCommand.java @@ -0,0 +1,288 @@ +package gregtech.common.misc.spaceprojects.commands; + +import static gregtech.common.misc.spaceprojects.SpaceProjectManager.getLocation; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +import net.minecraft.command.CommandBase; +import net.minecraft.command.ICommandSender; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.ChatComponentText; + +import gregtech.common.misc.spaceprojects.SpaceProjectManager; +import gregtech.common.misc.spaceprojects.SpaceProjectWorldSavedData; +import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject; + +/** + * @author BlueWeabo + */ +public class SPMCommand extends CommandBase { + + private static final String RESET = "reset"; + private static final String UNLOCK = "unlock"; + private static final String UNLOCK_UPGRADE = "unlock_upgrade"; + private static final String LOCK = "lock"; + private static final String LIST = "list"; + private static final String ALL = "-all"; + private static final String AVAILABLE = "-available"; + private static final String UNLOCKED = "-unlocked"; + private static final String COPY = "copy"; + + @Override + public String getCommandName() { + return "spm"; + } + + @Override + public int getRequiredPermissionLevel() { + return 0; + } + + @Override + public String getCommandUsage(ICommandSender sender) { + return "/" + this.getCommandName() + " . Available subCommands: reset, unlock, lock, list, copy"; + } + + @Override + public void processCommand(ICommandSender sender, String[] arguments) { + if (arguments.length < 1) { + printHelp(sender); + return; + } + switch (arguments[0]) { + case RESET: + if (!sender.canCommandSenderUseCommand(4, getCommandName())) { + sender.addChatMessage( + new ChatComponentText("You don't have the permissions to execute this command")); + return; + } + processReset(sender, arguments.length >= 2 ? arguments[1] : sender.getCommandSenderName()); + break; + case UNLOCK: + if (!sender.canCommandSenderUseCommand(4, getCommandName())) { + sender.addChatMessage( + new ChatComponentText("You don't have the permissions to execute this command")); + return; + } + if (arguments.length < 3) { + sender.addChatMessage( + new ChatComponentText("Not enough arguments. Needs to mention a project and a location")); + return; + } + processUnlock( + sender, + arguments[1], + arguments[2], + arguments.length >= 4 ? arguments[3] : sender.getCommandSenderName()); + break; + case UNLOCK_UPGRADE: + if (!sender.canCommandSenderUseCommand(4, getCommandName())) { + sender.addChatMessage( + new ChatComponentText("You don't have the permissions to execute this command")); + return; + } + if (arguments.length < 4) { + sender.addChatMessage( + new ChatComponentText( + "Not enough arguments. Needs to mention a project a location and an upgrade name")); + return; + } + processUnlock( + sender, + arguments[1], + arguments[2], + arguments[3], + arguments.length >= 5 ? arguments[4] : sender.getCommandSenderName()); + break; + case LOCK: + if (!sender.canCommandSenderUseCommand(4, getCommandName())) { + sender.addChatMessage( + new ChatComponentText("You don't have the permissions to execute this command")); + return; + } + if (arguments.length < 3) { + sender.addChatMessage( + new ChatComponentText("Not enough arguments. Needs to mention a project and a location")); + return; + } + processLock( + sender, + arguments[1], + arguments[2], + arguments.length >= 4 ? arguments[3] : sender.getCommandSenderName()); + case LIST: + if (arguments.length < 2) { + sender.addChatMessage( + new ChatComponentText( + "No Argument for list subCommand. Usage /spm list -all, -available or -unlocked")); + return; + } + processList(sender, arguments[1], arguments.length >= 3 ? arguments[2] : sender.getCommandSenderName()); + break; + case COPY: + if (!sender.canCommandSenderUseCommand(4, getCommandName())) { + sender.addChatMessage( + new ChatComponentText("You don't have the permissions to execute this command")); + return; + } + if (arguments.length < 3) { + sender.addChatMessage(new ChatComponentText("Not enough arguments. Needs to mention 2 players")); + return; + } + processCopy(sender, arguments[1], arguments[2]); + break; + } + } + + @Override + public List addTabCompletionOptions(ICommandSender sender, String[] arguments) { + List autoComplete = new ArrayList<>(); + String filter = arguments.length == 0 ? "" : arguments[0].trim(); + switch (arguments.length) { + case 1 -> autoComplete.addAll(Arrays.asList(getSubCommands())); + case 2 -> { + filter = arguments[1].trim(); + if (arguments[0].equals(LIST)) { + autoComplete.addAll(Arrays.asList(getListArguments())); + } else if (arguments[0].equals(COPY) || arguments[0].equals(RESET)) { + autoComplete.addAll(Arrays.asList(getPlayers())); + } else { + autoComplete.addAll(Arrays.asList(getProjects())); + } + } + case 3 -> { + filter = arguments[2].trim(); + if (arguments[1].equals(ALL)) {} else if (arguments[0].equals(LIST)) { + autoComplete.addAll(Arrays.asList(getPlayers())); + } else { + autoComplete.addAll(Arrays.asList(getLocations())); + } + } + case 4 -> { + filter = arguments[3].trim(); + if (arguments[0].equals(UNLOCK_UPGRADE)) { + ISpaceProject project = SpaceProjectManager.getProject(arguments[2]); + if (project != null) { + autoComplete.addAll( + project.getAllUpgrades() + .stream() + .map(ISpaceProject.ISP_Upgrade::getUnlocalizedName) + .collect(Collectors.toList())); + } + } else { + autoComplete.addAll(Arrays.asList(getPlayers())); + } + } + } + String finalFilter = filter; + return autoComplete.stream() + .filter(s -> finalFilter.isEmpty() || s.startsWith(finalFilter)) + .collect(Collectors.toList()); + } + + private String[] getPlayers() { + return MinecraftServer.getServer() + .getAllUsernames(); + } + + private String[] getLocations() { + return SpaceProjectManager.getLocationNames() + .toArray(new String[0]); + } + + private String[] getProjects() { + return SpaceProjectManager.getProjectsMap() + .keySet() + .toArray(new String[0]); + } + + private String[] getSubCommands() { + return new String[] { RESET, COPY, UNLOCK, UNLOCK_UPGRADE, LOCK, LIST }; + } + + private String[] getListArguments() { + return new String[] { ALL, AVAILABLE, UNLOCKED }; + } + + private void processReset(ICommandSender sender, String playerName) { + UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); + SpaceProjectManager.spaceTeamProjects.put(tID, null); + SpaceProjectWorldSavedData.INSTANCE.markDirty(); + sender.addChatMessage(new ChatComponentText("Cleared away map")); + } + + private void processLock(ICommandSender sender, String projectName, String location, String playerName) { + UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); + SpaceProjectManager.addTeamProject(tID, getLocation(location), projectName, null); + sender.addChatMessage(new ChatComponentText("Project locked")); + } + + private void processUnlock(ICommandSender sender, String projectName, String location, String playerName) { + UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); + ISpaceProject tProject = SpaceProjectManager.getTeamProjectOrCopy(tID, projectName, getLocation(location)); + if (tProject != null) { + tProject.setProjectCurrentStage(tProject.getTotalStages()); + SpaceProjectManager.addTeamProject(tID, getLocation(location), projectName, tProject); + sender.addChatMessage(new ChatComponentText("Project unlocked")); + } else { + sender.addChatMessage(new ChatComponentText("Incorrect internal project name. Try again")); + } + } + + private void processUnlock(ICommandSender sender, String projectName, String location, String upgradeName, + String playerName) { + UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); + ISpaceProject tProject = SpaceProjectManager.getTeamProjectOrCopy(tID, projectName, getLocation(location)); + if (tProject != null) { + ISpaceProject.ISP_Upgrade upgrade = tProject.getUpgrade(upgradeName); + if (upgrade == null) { + sender.addChatMessage(new ChatComponentText("Incorrect internal project upgrade name. Try again")); + return; + } + if (!tProject.isFinished()) { + tProject.setProjectCurrentStage(tProject.getTotalStages()); + SpaceProjectManager.addTeamProject(tID, getLocation(location), projectName, tProject); + } + tProject.setBuiltUpgrade(upgrade); + sender.addChatMessage(new ChatComponentText("Project Upgrade unlocked")); + } else { + sender.addChatMessage(new ChatComponentText("Incorrect internal project name. Try again")); + } + } + + private void processList(ICommandSender sender, String argument, String playerName) { + UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); + switch (argument) { + case ALL -> { + for (String project : SpaceProjectManager.getProjectsMap() + .keySet()) { + sender.addChatMessage(new ChatComponentText(project)); + } + } + case AVAILABLE -> { + for (ISpaceProject project : SpaceProjectManager.getAllProjects()) { + if (project.meetsRequirements(tID, false)) { + sender.addChatMessage(new ChatComponentText(project.getProjectName())); + } + } + } + case UNLOCKED -> { + for (ISpaceProject project : SpaceProjectManager.getTeamSpaceProjects(tID)) { + sender.addChatMessage(new ChatComponentText(project.getProjectName())); + } + } + } + } + + private void processCopy(ICommandSender sender, String playerToCopyFrom, String playerCopyingTo) { + // This will take a while + } + + private void printHelp(ICommandSender sender) { + + } +} diff --git a/src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java b/src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java deleted file mode 100644 index 896c7e1052..0000000000 --- a/src/main/java/gregtech/common/misc/spaceprojects/commands/SPM_Command.java +++ /dev/null @@ -1,288 +0,0 @@ -package gregtech.common.misc.spaceprojects.commands; - -import static gregtech.common.misc.spaceprojects.SpaceProjectManager.getLocation; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; -import java.util.stream.Collectors; - -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.ChatComponentText; - -import gregtech.common.misc.spaceprojects.SpaceProjectManager; -import gregtech.common.misc.spaceprojects.SpaceProjectWorldSavedData; -import gregtech.common.misc.spaceprojects.interfaces.ISpaceProject; - -/** - * @author BlueWeabo - */ -public class SPM_Command extends CommandBase { - - private static final String RESET = "reset"; - private static final String UNLOCK = "unlock"; - private static final String UNLOCK_UPGRADE = "unlock_upgrade"; - private static final String LOCK = "lock"; - private static final String LIST = "list"; - private static final String ALL = "-all"; - private static final String AVAILABLE = "-available"; - private static final String UNLOCKED = "-unlocked"; - private static final String COPY = "copy"; - - @Override - public String getCommandName() { - return "spm"; - } - - @Override - public int getRequiredPermissionLevel() { - return 0; - } - - @Override - public String getCommandUsage(ICommandSender sender) { - return "/" + this.getCommandName() + " . Available subCommands: reset, unlock, lock, list, copy"; - } - - @Override - public void processCommand(ICommandSender sender, String[] arguments) { - if (arguments.length < 1) { - printHelp(sender); - return; - } - switch (arguments[0]) { - case RESET: - if (!sender.canCommandSenderUseCommand(4, getCommandName())) { - sender.addChatMessage( - new ChatComponentText("You don't have the permissions to execute this command")); - return; - } - processReset(sender, arguments.length >= 2 ? arguments[1] : sender.getCommandSenderName()); - break; - case UNLOCK: - if (!sender.canCommandSenderUseCommand(4, getCommandName())) { - sender.addChatMessage( - new ChatComponentText("You don't have the permissions to execute this command")); - return; - } - if (arguments.length < 3) { - sender.addChatMessage( - new ChatComponentText("Not enough arguments. Needs to mention a project and a location")); - return; - } - processUnlock( - sender, - arguments[1], - arguments[2], - arguments.length >= 4 ? arguments[3] : sender.getCommandSenderName()); - break; - case UNLOCK_UPGRADE: - if (!sender.canCommandSenderUseCommand(4, getCommandName())) { - sender.addChatMessage( - new ChatComponentText("You don't have the permissions to execute this command")); - return; - } - if (arguments.length < 4) { - sender.addChatMessage( - new ChatComponentText( - "Not enough arguments. Needs to mention a project a location and an upgrade name")); - return; - } - processUnlock( - sender, - arguments[1], - arguments[2], - arguments[3], - arguments.length >= 5 ? arguments[4] : sender.getCommandSenderName()); - break; - case LOCK: - if (!sender.canCommandSenderUseCommand(4, getCommandName())) { - sender.addChatMessage( - new ChatComponentText("You don't have the permissions to execute this command")); - return; - } - if (arguments.length < 3) { - sender.addChatMessage( - new ChatComponentText("Not enough arguments. Needs to mention a project and a location")); - return; - } - processLock( - sender, - arguments[1], - arguments[2], - arguments.length >= 4 ? arguments[3] : sender.getCommandSenderName()); - case LIST: - if (arguments.length < 2) { - sender.addChatMessage( - new ChatComponentText( - "No Argument for list subCommand. Usage /spm list -all, -available or -unlocked")); - return; - } - processList(sender, arguments[1], arguments.length >= 3 ? arguments[2] : sender.getCommandSenderName()); - break; - case COPY: - if (!sender.canCommandSenderUseCommand(4, getCommandName())) { - sender.addChatMessage( - new ChatComponentText("You don't have the permissions to execute this command")); - return; - } - if (arguments.length < 3) { - sender.addChatMessage(new ChatComponentText("Not enough arguments. Needs to mention 2 players")); - return; - } - processCopy(sender, arguments[1], arguments[2]); - break; - } - } - - @Override - public List addTabCompletionOptions(ICommandSender sender, String[] arguments) { - List autoComplete = new ArrayList<>(); - String filter = arguments.length == 0 ? "" : arguments[0].trim(); - switch (arguments.length) { - case 1 -> autoComplete.addAll(Arrays.asList(getSubCommands())); - case 2 -> { - filter = arguments[1].trim(); - if (arguments[0].equals(LIST)) { - autoComplete.addAll(Arrays.asList(getListArguments())); - } else if (arguments[0].equals(COPY) || arguments[0].equals(RESET)) { - autoComplete.addAll(Arrays.asList(getPlayers())); - } else { - autoComplete.addAll(Arrays.asList(getProjects())); - } - } - case 3 -> { - filter = arguments[2].trim(); - if (arguments[1].equals(ALL)) {} else if (arguments[0].equals(LIST)) { - autoComplete.addAll(Arrays.asList(getPlayers())); - } else { - autoComplete.addAll(Arrays.asList(getLocations())); - } - } - case 4 -> { - filter = arguments[3].trim(); - if (arguments[0].equals(UNLOCK_UPGRADE)) { - ISpaceProject project = SpaceProjectManager.getProject(arguments[2]); - if (project != null) { - autoComplete.addAll( - project.getAllUpgrades() - .stream() - .map(ISpaceProject.ISP_Upgrade::getUnlocalizedName) - .collect(Collectors.toList())); - } - } else { - autoComplete.addAll(Arrays.asList(getPlayers())); - } - } - } - String finalFilter = filter; - return autoComplete.stream() - .filter(s -> finalFilter.isEmpty() || s.startsWith(finalFilter)) - .collect(Collectors.toList()); - } - - private String[] getPlayers() { - return MinecraftServer.getServer() - .getAllUsernames(); - } - - private String[] getLocations() { - return SpaceProjectManager.getLocationNames() - .toArray(new String[0]); - } - - private String[] getProjects() { - return SpaceProjectManager.getProjectsMap() - .keySet() - .toArray(new String[0]); - } - - private String[] getSubCommands() { - return new String[] { RESET, COPY, UNLOCK, UNLOCK_UPGRADE, LOCK, LIST }; - } - - private String[] getListArguments() { - return new String[] { ALL, AVAILABLE, UNLOCKED }; - } - - private void processReset(ICommandSender sender, String playerName) { - UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); - SpaceProjectManager.spaceTeamProjects.put(tID, null); - SpaceProjectWorldSavedData.INSTANCE.markDirty(); - sender.addChatMessage(new ChatComponentText("Cleared away map")); - } - - private void processLock(ICommandSender sender, String projectName, String location, String playerName) { - UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); - SpaceProjectManager.addTeamProject(tID, getLocation(location), projectName, null); - sender.addChatMessage(new ChatComponentText("Project locked")); - } - - private void processUnlock(ICommandSender sender, String projectName, String location, String playerName) { - UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); - ISpaceProject tProject = SpaceProjectManager.getTeamProjectOrCopy(tID, projectName, getLocation(location)); - if (tProject != null) { - tProject.setProjectCurrentStage(tProject.getTotalStages()); - SpaceProjectManager.addTeamProject(tID, getLocation(location), projectName, tProject); - sender.addChatMessage(new ChatComponentText("Project unlocked")); - } else { - sender.addChatMessage(new ChatComponentText("Incorrect internal project name. Try again")); - } - } - - private void processUnlock(ICommandSender sender, String projectName, String location, String upgradeName, - String playerName) { - UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); - ISpaceProject tProject = SpaceProjectManager.getTeamProjectOrCopy(tID, projectName, getLocation(location)); - if (tProject != null) { - ISpaceProject.ISP_Upgrade upgrade = tProject.getUpgrade(upgradeName); - if (upgrade == null) { - sender.addChatMessage(new ChatComponentText("Incorrect internal project upgrade name. Try again")); - return; - } - if (!tProject.isFinished()) { - tProject.setProjectCurrentStage(tProject.getTotalStages()); - SpaceProjectManager.addTeamProject(tID, getLocation(location), projectName, tProject); - } - tProject.setBuiltUpgrade(upgrade); - sender.addChatMessage(new ChatComponentText("Project Upgrade unlocked")); - } else { - sender.addChatMessage(new ChatComponentText("Incorrect internal project name. Try again")); - } - } - - private void processList(ICommandSender sender, String argument, String playerName) { - UUID tID = SpaceProjectManager.getPlayerUUIDFromName(playerName); - switch (argument) { - case ALL -> { - for (String project : SpaceProjectManager.getProjectsMap() - .keySet()) { - sender.addChatMessage(new ChatComponentText(project)); - } - } - case AVAILABLE -> { - for (ISpaceProject project : SpaceProjectManager.getAllProjects()) { - if (project.meetsRequirements(tID, false)) { - sender.addChatMessage(new ChatComponentText(project.getProjectName())); - } - } - } - case UNLOCKED -> { - for (ISpaceProject project : SpaceProjectManager.getTeamSpaceProjects(tID)) { - sender.addChatMessage(new ChatComponentText(project.getProjectName())); - } - } - } - } - - private void processCopy(ICommandSender sender, String playerToCopyFrom, String playerCopyingTo) { - // This will take a while - } - - private void printHelp(ICommandSender sender) { - - } -} diff --git a/src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java b/src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java deleted file mode 100644 index 3c4ad00932..0000000000 --- a/src/main/java/gregtech/common/misc/spaceprojects/commands/SP_Command.java +++ /dev/null @@ -1,166 +0,0 @@ -package gregtech.common.misc.spaceprojects.commands; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.Set; -import java.util.WeakHashMap; -import java.util.stream.Collectors; - -import net.minecraft.command.CommandBase; -import net.minecraft.command.ICommandSender; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.server.MinecraftServer; -import net.minecraft.util.EnumChatFormatting; - -import org.apache.commons.lang3.tuple.Pair; - -import gregtech.api.util.GT_Utility; -import gregtech.common.misc.spaceprojects.SpaceProjectManager; - -/** - * @author BlueWeabo - */ -public class SP_Command extends CommandBase { - - private static final Set> invite = Collections - .newSetFromMap(new WeakHashMap<>()); - private static final Set confirm = Collections.newSetFromMap(new WeakHashMap<>()); - - private static final String INVITE = "invite"; - private static final String ACCEPT = "accept"; - private static final String LEAVE = "leave"; - private static final String CONFIRM = "confirm"; - - @Override - public String getCommandName() { - return "sp"; - } - - @Override - public int getRequiredPermissionLevel() { - return 0; - } - - @Override - public String getCommandUsage(ICommandSender sender) { - return "/" + getCommandName() + " [PlayerName]"; - } - - @Override - public void processCommand(ICommandSender sender, String[] arguments) { - if (arguments.length < 1) { - return; - } - switch (arguments[0]) { - case INVITE -> { - if (arguments.length < 2) { - return; - } - processInvite(sender, arguments[1]); - } - case ACCEPT -> { - if (arguments.length < 2) { - return; - } - processAccept(sender, arguments[1]); - } - case LEAVE -> processLeave(sender); - case CONFIRM -> processConfirm(sender); - } - } - - private void processInvite(ICommandSender sender, String playerInvited) { - EntityPlayerMP teamLeader = getCommandSenderAsPlayer(sender); - EntityPlayerMP teamMember = getPlayer(sender, playerInvited); - invite.add(Pair.of(teamMember, teamLeader)); - String message = EnumChatFormatting.GOLD + teamLeader.getCommandSenderName() - + EnumChatFormatting.RESET - + " has sent you an invite to join their team. Accept it with" - + EnumChatFormatting.GOLD - + " /sp accept " - + teamLeader.getCommandSenderName(); - GT_Utility.sendChatToPlayer(teamMember, message); - } - - private void processAccept(ICommandSender sender, String playerInviter) { - EntityPlayerMP teamMember = getCommandSenderAsPlayer(sender); - EntityPlayerMP teamLeader = getPlayer(sender, playerInviter); - if (invite.contains(Pair.of(teamMember, teamLeader))) { - String message = EnumChatFormatting.GOLD + teamMember.getCommandSenderName() - + EnumChatFormatting.RESET - + " has accepted the invite."; - SpaceProjectManager.putInTeam(teamMember.getUniqueID(), teamLeader.getUniqueID()); - GT_Utility.sendChatToPlayer(teamLeader, message); - invite.remove(Pair.of(teamMember, teamLeader)); - } - } - - private void processLeave(ICommandSender sender) { - EntityPlayerMP player = getCommandSenderAsPlayer(sender); - String message = "Are you sure you want to leave the team. You will lose all progress. Use " - + EnumChatFormatting.GOLD - + "/sp confirm" - + EnumChatFormatting.RESET - + " to confirm this. This does nothing if you are the team leader."; - GT_Utility.sendChatToPlayer(player, message); - confirm.add(player); - } - - private void processConfirm(ICommandSender sender) { - EntityPlayerMP player = getCommandSenderAsPlayer(sender); - if (confirm.contains(player)) { - String message = "Successfully left the team."; - SpaceProjectManager.putInTeam(player.getUniqueID(), player.getUniqueID()); - GT_Utility.sendChatToPlayer(player, message); - confirm.remove(player); - } - } - - @Override - public List addTabCompletionOptions(ICommandSender sender, String[] arguments) { - List autoComplete = new ArrayList<>(); - String filter = arguments.length == 0 ? "" : arguments[0].trim(); - switch (arguments.length) { - case 1 -> autoComplete.addAll(Arrays.asList(getSubCommands())); - case 2 -> { - filter = arguments[1].trim(); - if (arguments[0].equals(INVITE)) { - autoComplete.addAll(Arrays.asList(getPlayers())); - break; - } - - if (arguments[0].equals(CONFIRM)) { - Optional> pairOpt = invite.stream() - .filter( - (e) -> e.getKey() - .getUniqueID() == getCommandSenderAsPlayer(sender).getUniqueID()) - .findFirst(); - if (pairOpt.isPresent()) { - autoComplete.add( - SpaceProjectManager.getPlayerNameFromUUID( - pairOpt.get() - .getRight() - .getUniqueID())); - } - } - } - } - String finalFilter = filter; - return autoComplete.stream() - .filter(s -> finalFilter.isEmpty() || s.startsWith(finalFilter)) - .collect(Collectors.toList()); - } - - private String[] getPlayers() { - return MinecraftServer.getServer() - .getAllUsernames(); - } - - private String[] getSubCommands() { - return new String[] { INVITE, ACCEPT, LEAVE, CONFIRM }; - } - -} diff --git a/src/main/java/gregtech/common/misc/spaceprojects/commands/SpaceProjectCommand.java b/src/main/java/gregtech/common/misc/spaceprojects/commands/SpaceProjectCommand.java new file mode 100644 index 0000000000..bd1408d80e --- /dev/null +++ b/src/main/java/gregtech/common/misc/spaceprojects/commands/SpaceProjectCommand.java @@ -0,0 +1,9 @@ +package gregtech.common.misc.spaceprojects.commands; + +public class SpaceProjectCommand extends SPCommand { + + @Override + public String getCommandName() { + return "spaceproject"; + } +} diff --git a/src/main/java/gregtech/common/misc/spaceprojects/commands/SpaceProject_Command.java b/src/main/java/gregtech/common/misc/spaceprojects/commands/SpaceProject_Command.java deleted file mode 100644 index 2f36175069..0000000000 --- a/src/main/java/gregtech/common/misc/spaceprojects/commands/SpaceProject_Command.java +++ /dev/null @@ -1,9 +0,0 @@ -package gregtech.common.misc.spaceprojects.commands; - -public class SpaceProject_Command extends SP_Command { - - @Override - public String getCommandName() { - return "spaceproject"; - } -} diff --git a/src/main/java/gregtech/common/redstonecircuits/CircuitBasicLogic.java b/src/main/java/gregtech/common/redstonecircuits/CircuitBasicLogic.java new file mode 100644 index 0000000000..ce430f9b7e --- /dev/null +++ b/src/main/java/gregtech/common/redstonecircuits/CircuitBasicLogic.java @@ -0,0 +1,137 @@ +package gregtech.common.redstonecircuits; + +import gregtech.api.interfaces.IRedstoneCircuitBlock; +import gregtech.api.util.CircuitryBehavior; + +public class CircuitBasicLogic extends CircuitryBehavior { + + public CircuitBasicLogic(int aIndex) { + super(aIndex); + } + + @Override + public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + aCircuitData[0] = 0; + } + + @Override + public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[0] < 0) { + aCircuitData[0] = 0; + } + if (aCircuitData[0] > 13) { + aCircuitData[0] = 13; + } + } + + @Override + public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[0] < 2) { + aRedstoneCircuitBlock.setRedstone( + (byte) (aCircuitData[0] % 2 == (getAnyRedstone(aRedstoneCircuitBlock) ? 0 : 1) ? 15 : 0), + aRedstoneCircuitBlock.getOutputFacing()); + } else if (aCircuitData[0] < 4) { + aRedstoneCircuitBlock.setRedstone( + (byte) (aCircuitData[0] % 2 == (getOneRedstone(aRedstoneCircuitBlock) ? 0 : 1) ? 15 : 0), + aRedstoneCircuitBlock.getOutputFacing()); + } else if (aCircuitData[0] < 6) { + aRedstoneCircuitBlock.setRedstone( + (byte) (aCircuitData[0] % 2 == (getAllRedstone(aRedstoneCircuitBlock) ? 0 : 1) ? 15 : 0), + aRedstoneCircuitBlock.getOutputFacing()); + } else if (aCircuitData[0] < 7) { + aRedstoneCircuitBlock.setRedstone( + (byte) (15 - getStrongestRedstone(aRedstoneCircuitBlock)), + aRedstoneCircuitBlock.getOutputFacing()); + } else if (aCircuitData[0] < 9) { + aRedstoneCircuitBlock.setRedstone( + (byte) ((aCircuitData[0] % 2 == 0 ? 15 : 0) + ^ (getStrongestRedstone(aRedstoneCircuitBlock) | getWeakestRedstone(aRedstoneCircuitBlock))), + aRedstoneCircuitBlock.getOutputFacing()); + } else if (aCircuitData[0] < 11) { + aRedstoneCircuitBlock.setRedstone( + (byte) ((aCircuitData[0] % 2 == 0 ? 15 : 0) ^ getStrongestRedstone(aRedstoneCircuitBlock) + ^ getWeakestRedstone(aRedstoneCircuitBlock)), + aRedstoneCircuitBlock.getOutputFacing()); + } else if (aCircuitData[0] < 13) { + aRedstoneCircuitBlock.setRedstone( + (byte) ((aCircuitData[0] % 2 == 0 ? 15 : 0) + ^ getStrongestRedstone(aRedstoneCircuitBlock) & getWeakestRedstone(aRedstoneCircuitBlock)), + aRedstoneCircuitBlock.getOutputFacing()); + } else if (aCircuitData[0] < 14) { + aRedstoneCircuitBlock.setRedstone( + (byte) (getStrongestRedstone(aRedstoneCircuitBlock) ^ 0xF), + aRedstoneCircuitBlock.getOutputFacing()); + } + } + + @Override + public String getName() { + return "Basic Logic"; + } + + @Override + public String getDescription() { + return "Regular Logic Gates"; + } + + @Override + public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { + if (aCircuitDataIndex == 0) { + switch (aCircuitData[0]) { + case 0 -> { + return "OR"; + } + case 1 -> { + return "NOR"; + } + case 2 -> { + return "XOR"; + } + case 3 -> { + return "XNOR"; + } + case 4 -> { + return "AND"; + } + case 5 -> { + return "NAND"; + } + case 6 -> { + return "INVERT"; + } + case 7 -> { + return "BIT_OR"; + } + case 8 -> { + return "BIT_NOR"; + } + case 9 -> { + return "BIT_XOR"; + } + case 10 -> { + return "BIT_XNOR"; + } + case 11 -> { + return "BIT_AND"; + } + case 12 -> { + return "BIT_NAND"; + } + case 13 -> { + return "BIT_INVERT"; + } + } + } + return ""; + } + + @Override + public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { + return false; + } + + @Override + public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { + return ""; + } +} diff --git a/src/main/java/gregtech/common/redstonecircuits/CircuitBitAnd.java b/src/main/java/gregtech/common/redstonecircuits/CircuitBitAnd.java new file mode 100644 index 0000000000..fbdf5b1ee9 --- /dev/null +++ b/src/main/java/gregtech/common/redstonecircuits/CircuitBitAnd.java @@ -0,0 +1,81 @@ +package gregtech.common.redstonecircuits; + +import gregtech.api.interfaces.IRedstoneCircuitBlock; +import gregtech.api.util.CircuitryBehavior; + +public class CircuitBitAnd extends CircuitryBehavior { + + public CircuitBitAnd(int aIndex) { + super(aIndex); + } + + @Override + public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + aCircuitData[0] = 0; + aCircuitData[1] = 0; + aCircuitData[2] = 0; + aCircuitData[3] = 0; + } + + @Override + public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[0] < 0) { + aCircuitData[0] = 0; + } + if (aCircuitData[1] < 0) { + aCircuitData[1] = 0; + } + if (aCircuitData[2] < 0) { + aCircuitData[2] = 0; + } + if (aCircuitData[3] < 0) { + aCircuitData[3] = 0; + } + if (aCircuitData[0] > 1) { + aCircuitData[0] = 1; + } + if (aCircuitData[1] > 1) { + aCircuitData[1] = 1; + } + if (aCircuitData[2] > 1) { + aCircuitData[2] = 1; + } + if (aCircuitData[3] > 1) { + aCircuitData[3] = 1; + } + } + + @Override + public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + aRedstoneCircuitBlock.setRedstone( + (byte) ((getStrongestRedstone(aRedstoneCircuitBlock) + & (aCircuitData[0] | aCircuitData[1] << 1 | aCircuitData[2] << 2 | aCircuitData[3] << 3)) != 0 ? 15 + : 0), + aRedstoneCircuitBlock.getOutputFacing()); + } + + @Override + public String getName() { + return "Hardcode Bit-AND"; + } + + @Override + public String getDescription() { + return "( signal & this ) != 0"; + } + + @Override + public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { + return "Bit " + aCircuitDataIndex + ":"; + } + + @Override + public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { + return false; + } + + @Override + public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { + return aCircuitData[aCircuitDataIndex] == 0 ? "OFF" : "ON"; + } +} diff --git a/src/main/java/gregtech/common/redstonecircuits/CircuitCombinationLock.java b/src/main/java/gregtech/common/redstonecircuits/CircuitCombinationLock.java new file mode 100644 index 0000000000..8058d2b398 --- /dev/null +++ b/src/main/java/gregtech/common/redstonecircuits/CircuitCombinationLock.java @@ -0,0 +1,109 @@ +package gregtech.common.redstonecircuits; + +import gregtech.api.interfaces.IRedstoneCircuitBlock; +import gregtech.api.util.CircuitryBehavior; + +public class CircuitCombinationLock extends CircuitryBehavior { + + public CircuitCombinationLock(int aIndex) { + super(aIndex); + } + + @Override + public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + aCircuitData[0] = 1; + aCircuitData[1] = 0; + aCircuitData[2] = 0; + aCircuitData[3] = 0; + aCircuitData[4] = 0; + aCircuitData[5] = 0; + } + + @Override + public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[0] < 1) { + aCircuitData[0] = 1; + } + if (aCircuitData[1] < 0) { + aCircuitData[1] = 0; + } + if (aCircuitData[2] < 0) { + aCircuitData[2] = 0; + } + if (aCircuitData[3] < 0) { + aCircuitData[3] = 0; + } + if (aCircuitData[0] > 15) { + aCircuitData[0] = 15; + } + if (aCircuitData[1] > 15) { + aCircuitData[1] = 15; + } + if (aCircuitData[2] > 15) { + aCircuitData[2] = 15; + } + if (aCircuitData[3] > 15) { + aCircuitData[3] = 15; + } + if (aCircuitData[4] < 0) { + aCircuitData[4] = 0; + } + if (aCircuitData[4] > 3) { + aCircuitData[4] = 3; + } + if (aCircuitData[5] < 0) { + aCircuitData[5] = 0; + } + } + + @Override + public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + while ((aCircuitData[aCircuitData[4]] == 0) && (aCircuitData[4] < 4)) { + aCircuitData[4] += 1; + } + if (aCircuitData[4] < 4) { + int tRedstone = getStrongestRedstone(aRedstoneCircuitBlock); + if (tRedstone > 0) { + if (aCircuitData[5] == 0) { + if (tRedstone == aCircuitData[aCircuitData[4]]) { + aCircuitData[4] += 1; + } else { + aCircuitData[4] = 0; + } + } + aCircuitData[5] = 1; + } else { + aCircuitData[5] = 0; + } + aRedstoneCircuitBlock.setRedstone((byte) 0, aRedstoneCircuitBlock.getOutputFacing()); + } else { + aRedstoneCircuitBlock.setRedstone((byte) 15, aRedstoneCircuitBlock.getOutputFacing()); + aCircuitData[4] = 0; + } + } + + @Override + public String getName() { + return "Combination Lock"; + } + + @Override + public String getDescription() { + return "Checks Combinations"; + } + + @Override + public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { + return "Power " + aCircuitDataIndex; + } + + @Override + public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { + return false; + } + + @Override + public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { + return null; + } +} diff --git a/src/main/java/gregtech/common/redstonecircuits/CircuitEquals.java b/src/main/java/gregtech/common/redstonecircuits/CircuitEquals.java new file mode 100644 index 0000000000..19fb9089bc --- /dev/null +++ b/src/main/java/gregtech/common/redstonecircuits/CircuitEquals.java @@ -0,0 +1,73 @@ +package gregtech.common.redstonecircuits; + +import gregtech.api.interfaces.IRedstoneCircuitBlock; +import gregtech.api.util.CircuitryBehavior; + +public class CircuitEquals extends CircuitryBehavior { + + public CircuitEquals(int aIndex) { + super(aIndex); + } + + @Override + public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + aCircuitData[0] = 0; + aCircuitData[1] = 0; + } + + @Override + public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[0] < 0) { + aCircuitData[0] = 0; + } + if (aCircuitData[0] > 15) { + aCircuitData[0] = 15; + } + if (aCircuitData[1] < 0) { + aCircuitData[3] = 0; + } + if (aCircuitData[1] > 1) { + aCircuitData[3] = 1; + } + } + + @Override + public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + aRedstoneCircuitBlock.setRedstone( + ((byte) (((aCircuitData[1] != 0) == (getStrongestRedstone(aRedstoneCircuitBlock) == aCircuitData[0])) ? 0 + : 15)), + aRedstoneCircuitBlock.getOutputFacing()); + } + + @Override + public String getName() { + return "Equals"; + } + + @Override + public String getDescription() { + return "signal == this"; + } + + @Override + public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { + return switch (aCircuitDataIndex) { + case 0 -> "Signal"; + case 1 -> aCircuitData[1] == 0 ? "Equal" : "Unequal"; + default -> ""; + }; + } + + @Override + public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { + return false; + } + + @Override + public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { + if (aCircuitDataIndex > 0) { + return ""; + } + return null; + } +} diff --git a/src/main/java/gregtech/common/redstonecircuits/CircuitPulser.java b/src/main/java/gregtech/common/redstonecircuits/CircuitPulser.java new file mode 100644 index 0000000000..9d1bb1684e --- /dev/null +++ b/src/main/java/gregtech/common/redstonecircuits/CircuitPulser.java @@ -0,0 +1,92 @@ +package gregtech.common.redstonecircuits; + +import gregtech.api.interfaces.IRedstoneCircuitBlock; +import gregtech.api.util.CircuitryBehavior; + +public class CircuitPulser extends CircuitryBehavior { + + public CircuitPulser(int aIndex) { + super(aIndex); + } + + @Override + public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + aCircuitData[0] = 1; + aCircuitData[1] = 16; + aCircuitData[4] = 0; + } + + @Override + public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[0] < 1) { + aCircuitData[0] = 1; + } + if (aCircuitData[1] < 0) { + aCircuitData[1] = 0; + } + if (aCircuitData[1] > 16) { + aCircuitData[1] = 16; + } + if (aCircuitData[4] < 0) { + aCircuitData[4] = 0; + } + } + + @Override + public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + byte redstoneSignal = aCircuitData[1] == 0 ? getWeakestNonZeroRedstone(aRedstoneCircuitBlock) + : getStrongestRedstone(aRedstoneCircuitBlock); + if (aCircuitData[4] == 0) { + aCircuitData[5] = redstoneSignal; + } + if ((redstoneSignal > 0) || (aCircuitData[4] > 0)) { + int index = 4; + int tmp42_41 = aCircuitData[index]; + aCircuitData[index] = (tmp42_41 + 1); + if ((tmp42_41 >= aCircuitData[0]) && (redstoneSignal <= 0)) { + aCircuitData[4] = 0; + } + } + aRedstoneCircuitBlock.setRedstone( + (aCircuitData[4] > 0) && (aCircuitData[4] <= aCircuitData[0]) ? (byte) aCircuitData[1] + : (aCircuitData[1] <= 0) || (aCircuitData[1] > 15) ? (byte) aCircuitData[5] : 0, + aRedstoneCircuitBlock.getOutputFacing()); + } + + @Override + public String getName() { + return "Pulser"; + } + + @Override + public String getDescription() { + return "Limits&Enlengths"; + } + + @Override + public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { + return switch (aCircuitDataIndex) { + case 0 -> "Length"; + case 1 -> "RS Out"; + default -> ""; + }; + } + + @Override + public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { + return false; + } + + @Override + public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { + if (aCircuitDataIndex == 1) { + if (aCircuitData[aCircuitDataIndex] == 16) { + return "HIGHEST"; + } + if (aCircuitData[aCircuitDataIndex] == 0) { + return "LOWEST"; + } + } + return aCircuitDataIndex > 1 ? "" : null; + } +} diff --git a/src/main/java/gregtech/common/redstonecircuits/CircuitRandomizer.java b/src/main/java/gregtech/common/redstonecircuits/CircuitRandomizer.java new file mode 100644 index 0000000000..986a6e858e --- /dev/null +++ b/src/main/java/gregtech/common/redstonecircuits/CircuitRandomizer.java @@ -0,0 +1,86 @@ +package gregtech.common.redstonecircuits; + +import gregtech.api.interfaces.IRedstoneCircuitBlock; +import gregtech.api.util.CircuitryBehavior; + +public class CircuitRandomizer extends CircuitryBehavior { + + public CircuitRandomizer(int aIndex) { + super(aIndex); + } + + @Override + public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + aCircuitData[0] = 1; + aCircuitData[4] = 0; + } + + @Override + public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[0] < 1) { + aCircuitData[0] = 1; + } + if (aCircuitData[3] < 0) { + aCircuitData[3] = 0; + } + if (aCircuitData[3] > 1) { + aCircuitData[3] = 1; + } + if (aCircuitData[4] < 0) { + aCircuitData[4] = 0; + } + } + + @Override + public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[3] == 1) { + if (getAnyRedstone(aRedstoneCircuitBlock)) { + aCircuitData[4] += 1; + } else { + aCircuitData[4] = 0; + } + } else if (getAnyRedstone(aRedstoneCircuitBlock)) { + aCircuitData[4] = 0; + } else { + aCircuitData[4] += 1; + } + if (aCircuitData[4] >= aCircuitData[0]) { + aCircuitData[4] = 0; + aRedstoneCircuitBlock + .setRedstone((byte) aRedstoneCircuitBlock.getRandom(16), aRedstoneCircuitBlock.getOutputFacing()); + } + } + + @Override + public String getName() { + return "Randomizer"; + } + + @Override + public String getDescription() { + return "Randomizes Redstone"; + } + + @Override + public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { + return switch (aCircuitDataIndex) { + case 0 -> "Delay"; + case 3 -> aCircuitData[aCircuitDataIndex] == 1 ? "RS => ON" : "RS => OFF"; + case 4 -> "Status"; + default -> ""; + }; + } + + @Override + public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { + return false; + } + + @Override + public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { + if (aCircuitDataIndex != 0) { + return ""; + } + return null; + } +} diff --git a/src/main/java/gregtech/common/redstonecircuits/CircuitRedstoneMeter.java b/src/main/java/gregtech/common/redstonecircuits/CircuitRedstoneMeter.java new file mode 100644 index 0000000000..2a0172c85a --- /dev/null +++ b/src/main/java/gregtech/common/redstonecircuits/CircuitRedstoneMeter.java @@ -0,0 +1,94 @@ +package gregtech.common.redstonecircuits; + +import gregtech.api.interfaces.IRedstoneCircuitBlock; +import gregtech.api.util.CircuitryBehavior; + +public class CircuitRedstoneMeter extends CircuitryBehavior { + + public CircuitRedstoneMeter(int aIndex) { + super(aIndex); + } + + @Override + public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + aCircuitData[0] = 1; + aCircuitData[1] = 15; + aCircuitData[2] = 0; + aCircuitData[3] = 15; + } + + @Override + public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[0] < 0) { + aCircuitData[0] = 0; + } + if (aCircuitData[0] > 15) { + aCircuitData[0] = 15; + } + if (aCircuitData[1] < 0) { + aCircuitData[1] = 0; + } + if (aCircuitData[1] > 15) { + aCircuitData[1] = 15; + } + if (aCircuitData[1] < aCircuitData[0]) { + aCircuitData[1] = aCircuitData[0]; + } + if (aCircuitData[2] < 0) { + aCircuitData[2] = 0; + } + if (aCircuitData[2] > 1) { + aCircuitData[2] = 1; + } + if (aCircuitData[3] < 0) { + aCircuitData[3] = 0; + } + if (aCircuitData[3] > 15) { + aCircuitData[3] = 15; + } + } + + @Override + public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + byte tRedstone = getStrongestRedstone(aRedstoneCircuitBlock); + aRedstoneCircuitBlock + .setRedstone( + ((tRedstone >= aCircuitData[0]) && (tRedstone <= aCircuitData[1]) ? 1 : 0) + != (aCircuitData[2] != 0 ? 1 : 0) ? (byte) aCircuitData[3] : 0, + aRedstoneCircuitBlock.getOutputFacing()); + } + + @Override + public String getName() { + return "Redstone Meter"; + } + + @Override + public String getDescription() { + return "Checks Boundaries"; + } + + @Override + public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { + return switch (aCircuitDataIndex) { + case 0 -> "Lower"; + case 1 -> "Upper"; + case 2 -> "Invert:"; + case 3 -> "RS Out:"; + default -> ""; + }; + } + + @Override + public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { + return false; + } + + @Override + public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { + if (aCircuitDataIndex == 2) { + return aCircuitData[2] == 0 ? "OFF" : "ON"; + } + return null; + } +} diff --git a/src/main/java/gregtech/common/redstonecircuits/CircuitRepeater.java b/src/main/java/gregtech/common/redstonecircuits/CircuitRepeater.java new file mode 100644 index 0000000000..b7b28d0371 --- /dev/null +++ b/src/main/java/gregtech/common/redstonecircuits/CircuitRepeater.java @@ -0,0 +1,86 @@ +package gregtech.common.redstonecircuits; + +import gregtech.api.interfaces.IRedstoneCircuitBlock; +import gregtech.api.util.CircuitryBehavior; + +public class CircuitRepeater extends CircuitryBehavior { + + public CircuitRepeater(int aIndex) { + super(aIndex); + } + + @Override + public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + aCircuitData[0] = 1; + aCircuitData[4] = 0; + aCircuitData[5] = -1; + } + + @Override + public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[0] < 1) { + aCircuitData[0] = 1; + } + if (aCircuitData[4] < 0) { + aCircuitData[4] = 0; + } + if (aCircuitData[5] < -1) { + aCircuitData[5] = -1; + } + } + + @Override + public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (getAnyRedstone(aRedstoneCircuitBlock)) { + aCircuitData[4] += 1; + if (aCircuitData[5] < 0) { + aCircuitData[5] = 0; + } + } + if ((aCircuitData[5] >= 0) && (aCircuitData[5] < aCircuitData[0])) { + aCircuitData[5] += 1; + } + if (aCircuitData[4] > 0) { + if (aCircuitData[5] >= aCircuitData[0]) { + aCircuitData[4] -= 1; + aRedstoneCircuitBlock.setRedstone((byte) 15, aRedstoneCircuitBlock.getOutputFacing()); + } else { + aRedstoneCircuitBlock.setRedstone((byte) 0, aRedstoneCircuitBlock.getOutputFacing()); + } + } else { + aRedstoneCircuitBlock.setRedstone((byte) 0, aRedstoneCircuitBlock.getOutputFacing()); + aCircuitData[5] = -1; + } + } + + @Override + public String getName() { + return "Repeater"; + } + + @Override + public String getDescription() { + return "Delays RS-Signal"; + } + + @Override + public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { + if (aCircuitDataIndex == 0) { + return "Delay"; + } + return ""; + } + + @Override + public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { + return false; + } + + @Override + public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { + if (aCircuitDataIndex > 0) { + return ""; + } + return null; + } +} diff --git a/src/main/java/gregtech/common/redstonecircuits/CircuitTimer.java b/src/main/java/gregtech/common/redstonecircuits/CircuitTimer.java new file mode 100644 index 0000000000..ae96d35069 --- /dev/null +++ b/src/main/java/gregtech/common/redstonecircuits/CircuitTimer.java @@ -0,0 +1,108 @@ +package gregtech.common.redstonecircuits; + +import gregtech.api.interfaces.IRedstoneCircuitBlock; +import gregtech.api.util.CircuitryBehavior; + +public class CircuitTimer extends CircuitryBehavior { + + public CircuitTimer(int aIndex) { + super(aIndex); + } + + @Override + public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + aCircuitData[0] = 2; + aCircuitData[1] = 1; + aCircuitData[2] = 2; + aCircuitData[4] = 0; + } + + @Override + public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[0] < 2) { + aCircuitData[0] = 2; + } + if (aCircuitData[1] < 1) { + aCircuitData[1] = 1; + } + if (aCircuitData[2] < 2) { + aCircuitData[2] = 2; + } + if (aCircuitData[3] < 0) { + aCircuitData[3] = 0; + } + if (aCircuitData[3] > 1) { + aCircuitData[3] = 1; + } + if (aCircuitData[4] < 0) { + aCircuitData[4] = 0; + } + } + + @Override + public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { + if (aCircuitData[3] == 1) { + if (getAnyRedstone(aRedstoneCircuitBlock)) { + aCircuitData[4] += 1; + } else { + aCircuitData[4] = 0; + } + } else if (getAnyRedstone(aRedstoneCircuitBlock)) { + aCircuitData[4] = 0; + } else { + aCircuitData[4] += 1; + } + if (aCircuitData[4] >= aCircuitData[0]) { + if (aCircuitData[1] > 1) { + if (aCircuitData[4] >= aCircuitData[0] + (aCircuitData[1] - 1) * aCircuitData[2]) { + aRedstoneCircuitBlock.setRedstone((byte) 15, aRedstoneCircuitBlock.getOutputFacing()); + aCircuitData[4] = 0; + } else { + aRedstoneCircuitBlock.setRedstone( + (byte) ((aCircuitData[4] - aCircuitData[0]) % aCircuitData[2] == 0 ? 15 : 0), + aRedstoneCircuitBlock.getOutputFacing()); + } + } else { + aRedstoneCircuitBlock.setRedstone((byte) 15, aRedstoneCircuitBlock.getOutputFacing()); + aCircuitData[4] = 0; + } + } else { + aRedstoneCircuitBlock.setRedstone((byte) 0, aRedstoneCircuitBlock.getOutputFacing()); + } + } + + @Override + public String getName() { + return "Timer"; + } + + @Override + public String getDescription() { + return "Pulses Redstone"; + } + + @Override + public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { + return switch (aCircuitDataIndex) { + case 0 -> "Delay"; + case 1 -> "Pulses"; + case 2 -> "Length"; + case 3 -> aCircuitData[aCircuitDataIndex] == 1 ? "RS => ON" : "RS => OFF"; + case 4 -> "Time"; + default -> ""; + }; + } + + @Override + public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { + return false; + } + + @Override + public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { + if (aCircuitDataIndex == 3) { + return ""; + } + return null; + } +} diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BasicLogic.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BasicLogic.java deleted file mode 100644 index 34093a95de..0000000000 --- a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BasicLogic.java +++ /dev/null @@ -1,137 +0,0 @@ -package gregtech.common.redstonecircuits; - -import gregtech.api.interfaces.IRedstoneCircuitBlock; -import gregtech.api.util.GT_CircuitryBehavior; - -public class GT_Circuit_BasicLogic extends GT_CircuitryBehavior { - - public GT_Circuit_BasicLogic(int aIndex) { - super(aIndex); - } - - @Override - public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - aCircuitData[0] = 0; - } - - @Override - public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[0] < 0) { - aCircuitData[0] = 0; - } - if (aCircuitData[0] > 13) { - aCircuitData[0] = 13; - } - } - - @Override - public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[0] < 2) { - aRedstoneCircuitBlock.setRedstone( - (byte) (aCircuitData[0] % 2 == (getAnyRedstone(aRedstoneCircuitBlock) ? 0 : 1) ? 15 : 0), - aRedstoneCircuitBlock.getOutputFacing()); - } else if (aCircuitData[0] < 4) { - aRedstoneCircuitBlock.setRedstone( - (byte) (aCircuitData[0] % 2 == (getOneRedstone(aRedstoneCircuitBlock) ? 0 : 1) ? 15 : 0), - aRedstoneCircuitBlock.getOutputFacing()); - } else if (aCircuitData[0] < 6) { - aRedstoneCircuitBlock.setRedstone( - (byte) (aCircuitData[0] % 2 == (getAllRedstone(aRedstoneCircuitBlock) ? 0 : 1) ? 15 : 0), - aRedstoneCircuitBlock.getOutputFacing()); - } else if (aCircuitData[0] < 7) { - aRedstoneCircuitBlock.setRedstone( - (byte) (15 - getStrongestRedstone(aRedstoneCircuitBlock)), - aRedstoneCircuitBlock.getOutputFacing()); - } else if (aCircuitData[0] < 9) { - aRedstoneCircuitBlock.setRedstone( - (byte) ((aCircuitData[0] % 2 == 0 ? 15 : 0) - ^ (getStrongestRedstone(aRedstoneCircuitBlock) | getWeakestRedstone(aRedstoneCircuitBlock))), - aRedstoneCircuitBlock.getOutputFacing()); - } else if (aCircuitData[0] < 11) { - aRedstoneCircuitBlock.setRedstone( - (byte) ((aCircuitData[0] % 2 == 0 ? 15 : 0) ^ getStrongestRedstone(aRedstoneCircuitBlock) - ^ getWeakestRedstone(aRedstoneCircuitBlock)), - aRedstoneCircuitBlock.getOutputFacing()); - } else if (aCircuitData[0] < 13) { - aRedstoneCircuitBlock.setRedstone( - (byte) ((aCircuitData[0] % 2 == 0 ? 15 : 0) - ^ getStrongestRedstone(aRedstoneCircuitBlock) & getWeakestRedstone(aRedstoneCircuitBlock)), - aRedstoneCircuitBlock.getOutputFacing()); - } else if (aCircuitData[0] < 14) { - aRedstoneCircuitBlock.setRedstone( - (byte) (getStrongestRedstone(aRedstoneCircuitBlock) ^ 0xF), - aRedstoneCircuitBlock.getOutputFacing()); - } - } - - @Override - public String getName() { - return "Basic Logic"; - } - - @Override - public String getDescription() { - return "Regular Logic Gates"; - } - - @Override - public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { - if (aCircuitDataIndex == 0) { - switch (aCircuitData[0]) { - case 0 -> { - return "OR"; - } - case 1 -> { - return "NOR"; - } - case 2 -> { - return "XOR"; - } - case 3 -> { - return "XNOR"; - } - case 4 -> { - return "AND"; - } - case 5 -> { - return "NAND"; - } - case 6 -> { - return "INVERT"; - } - case 7 -> { - return "BIT_OR"; - } - case 8 -> { - return "BIT_NOR"; - } - case 9 -> { - return "BIT_XOR"; - } - case 10 -> { - return "BIT_XNOR"; - } - case 11 -> { - return "BIT_AND"; - } - case 12 -> { - return "BIT_NAND"; - } - case 13 -> { - return "BIT_INVERT"; - } - } - } - return ""; - } - - @Override - public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { - return false; - } - - @Override - public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { - return ""; - } -} diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BitAnd.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BitAnd.java deleted file mode 100644 index f5f83a7e10..0000000000 --- a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_BitAnd.java +++ /dev/null @@ -1,81 +0,0 @@ -package gregtech.common.redstonecircuits; - -import gregtech.api.interfaces.IRedstoneCircuitBlock; -import gregtech.api.util.GT_CircuitryBehavior; - -public class GT_Circuit_BitAnd extends GT_CircuitryBehavior { - - public GT_Circuit_BitAnd(int aIndex) { - super(aIndex); - } - - @Override - public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - aCircuitData[0] = 0; - aCircuitData[1] = 0; - aCircuitData[2] = 0; - aCircuitData[3] = 0; - } - - @Override - public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[0] < 0) { - aCircuitData[0] = 0; - } - if (aCircuitData[1] < 0) { - aCircuitData[1] = 0; - } - if (aCircuitData[2] < 0) { - aCircuitData[2] = 0; - } - if (aCircuitData[3] < 0) { - aCircuitData[3] = 0; - } - if (aCircuitData[0] > 1) { - aCircuitData[0] = 1; - } - if (aCircuitData[1] > 1) { - aCircuitData[1] = 1; - } - if (aCircuitData[2] > 1) { - aCircuitData[2] = 1; - } - if (aCircuitData[3] > 1) { - aCircuitData[3] = 1; - } - } - - @Override - public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - aRedstoneCircuitBlock.setRedstone( - (byte) ((getStrongestRedstone(aRedstoneCircuitBlock) - & (aCircuitData[0] | aCircuitData[1] << 1 | aCircuitData[2] << 2 | aCircuitData[3] << 3)) != 0 ? 15 - : 0), - aRedstoneCircuitBlock.getOutputFacing()); - } - - @Override - public String getName() { - return "Hardcode Bit-AND"; - } - - @Override - public String getDescription() { - return "( signal & this ) != 0"; - } - - @Override - public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { - return "Bit " + aCircuitDataIndex + ":"; - } - - @Override - public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { - return false; - } - - @Override - public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { - return aCircuitData[aCircuitDataIndex] == 0 ? "OFF" : "ON"; - } -} diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_CombinationLock.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_CombinationLock.java deleted file mode 100644 index 67d8527606..0000000000 --- a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_CombinationLock.java +++ /dev/null @@ -1,109 +0,0 @@ -package gregtech.common.redstonecircuits; - -import gregtech.api.interfaces.IRedstoneCircuitBlock; -import gregtech.api.util.GT_CircuitryBehavior; - -public class GT_Circuit_CombinationLock extends GT_CircuitryBehavior { - - public GT_Circuit_CombinationLock(int aIndex) { - super(aIndex); - } - - @Override - public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - aCircuitData[0] = 1; - aCircuitData[1] = 0; - aCircuitData[2] = 0; - aCircuitData[3] = 0; - aCircuitData[4] = 0; - aCircuitData[5] = 0; - } - - @Override - public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[0] < 1) { - aCircuitData[0] = 1; - } - if (aCircuitData[1] < 0) { - aCircuitData[1] = 0; - } - if (aCircuitData[2] < 0) { - aCircuitData[2] = 0; - } - if (aCircuitData[3] < 0) { - aCircuitData[3] = 0; - } - if (aCircuitData[0] > 15) { - aCircuitData[0] = 15; - } - if (aCircuitData[1] > 15) { - aCircuitData[1] = 15; - } - if (aCircuitData[2] > 15) { - aCircuitData[2] = 15; - } - if (aCircuitData[3] > 15) { - aCircuitData[3] = 15; - } - if (aCircuitData[4] < 0) { - aCircuitData[4] = 0; - } - if (aCircuitData[4] > 3) { - aCircuitData[4] = 3; - } - if (aCircuitData[5] < 0) { - aCircuitData[5] = 0; - } - } - - @Override - public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - while ((aCircuitData[aCircuitData[4]] == 0) && (aCircuitData[4] < 4)) { - aCircuitData[4] += 1; - } - if (aCircuitData[4] < 4) { - int tRedstone = getStrongestRedstone(aRedstoneCircuitBlock); - if (tRedstone > 0) { - if (aCircuitData[5] == 0) { - if (tRedstone == aCircuitData[aCircuitData[4]]) { - aCircuitData[4] += 1; - } else { - aCircuitData[4] = 0; - } - } - aCircuitData[5] = 1; - } else { - aCircuitData[5] = 0; - } - aRedstoneCircuitBlock.setRedstone((byte) 0, aRedstoneCircuitBlock.getOutputFacing()); - } else { - aRedstoneCircuitBlock.setRedstone((byte) 15, aRedstoneCircuitBlock.getOutputFacing()); - aCircuitData[4] = 0; - } - } - - @Override - public String getName() { - return "Combination Lock"; - } - - @Override - public String getDescription() { - return "Checks Combinations"; - } - - @Override - public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { - return "Power " + aCircuitDataIndex; - } - - @Override - public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { - return false; - } - - @Override - public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { - return null; - } -} diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Equals.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Equals.java deleted file mode 100644 index 9e9af183e8..0000000000 --- a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Equals.java +++ /dev/null @@ -1,73 +0,0 @@ -package gregtech.common.redstonecircuits; - -import gregtech.api.interfaces.IRedstoneCircuitBlock; -import gregtech.api.util.GT_CircuitryBehavior; - -public class GT_Circuit_Equals extends GT_CircuitryBehavior { - - public GT_Circuit_Equals(int aIndex) { - super(aIndex); - } - - @Override - public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - aCircuitData[0] = 0; - aCircuitData[1] = 0; - } - - @Override - public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[0] < 0) { - aCircuitData[0] = 0; - } - if (aCircuitData[0] > 15) { - aCircuitData[0] = 15; - } - if (aCircuitData[1] < 0) { - aCircuitData[3] = 0; - } - if (aCircuitData[1] > 1) { - aCircuitData[3] = 1; - } - } - - @Override - public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - aRedstoneCircuitBlock.setRedstone( - ((byte) (((aCircuitData[1] != 0) == (getStrongestRedstone(aRedstoneCircuitBlock) == aCircuitData[0])) ? 0 - : 15)), - aRedstoneCircuitBlock.getOutputFacing()); - } - - @Override - public String getName() { - return "Equals"; - } - - @Override - public String getDescription() { - return "signal == this"; - } - - @Override - public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { - return switch (aCircuitDataIndex) { - case 0 -> "Signal"; - case 1 -> aCircuitData[1] == 0 ? "Equal" : "Unequal"; - default -> ""; - }; - } - - @Override - public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { - return false; - } - - @Override - public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { - if (aCircuitDataIndex > 0) { - return ""; - } - return null; - } -} diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Pulser.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Pulser.java deleted file mode 100644 index c54d0be060..0000000000 --- a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Pulser.java +++ /dev/null @@ -1,92 +0,0 @@ -package gregtech.common.redstonecircuits; - -import gregtech.api.interfaces.IRedstoneCircuitBlock; -import gregtech.api.util.GT_CircuitryBehavior; - -public class GT_Circuit_Pulser extends GT_CircuitryBehavior { - - public GT_Circuit_Pulser(int aIndex) { - super(aIndex); - } - - @Override - public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - aCircuitData[0] = 1; - aCircuitData[1] = 16; - aCircuitData[4] = 0; - } - - @Override - public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[0] < 1) { - aCircuitData[0] = 1; - } - if (aCircuitData[1] < 0) { - aCircuitData[1] = 0; - } - if (aCircuitData[1] > 16) { - aCircuitData[1] = 16; - } - if (aCircuitData[4] < 0) { - aCircuitData[4] = 0; - } - } - - @Override - public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - byte redstoneSignal = aCircuitData[1] == 0 ? getWeakestNonZeroRedstone(aRedstoneCircuitBlock) - : getStrongestRedstone(aRedstoneCircuitBlock); - if (aCircuitData[4] == 0) { - aCircuitData[5] = redstoneSignal; - } - if ((redstoneSignal > 0) || (aCircuitData[4] > 0)) { - int index = 4; - int tmp42_41 = aCircuitData[index]; - aCircuitData[index] = (tmp42_41 + 1); - if ((tmp42_41 >= aCircuitData[0]) && (redstoneSignal <= 0)) { - aCircuitData[4] = 0; - } - } - aRedstoneCircuitBlock.setRedstone( - (aCircuitData[4] > 0) && (aCircuitData[4] <= aCircuitData[0]) ? (byte) aCircuitData[1] - : (aCircuitData[1] <= 0) || (aCircuitData[1] > 15) ? (byte) aCircuitData[5] : 0, - aRedstoneCircuitBlock.getOutputFacing()); - } - - @Override - public String getName() { - return "Pulser"; - } - - @Override - public String getDescription() { - return "Limits&Enlengths"; - } - - @Override - public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { - return switch (aCircuitDataIndex) { - case 0 -> "Length"; - case 1 -> "RS Out"; - default -> ""; - }; - } - - @Override - public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { - return false; - } - - @Override - public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { - if (aCircuitDataIndex == 1) { - if (aCircuitData[aCircuitDataIndex] == 16) { - return "HIGHEST"; - } - if (aCircuitData[aCircuitDataIndex] == 0) { - return "LOWEST"; - } - } - return aCircuitDataIndex > 1 ? "" : null; - } -} diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Randomizer.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Randomizer.java deleted file mode 100644 index 336bf9928d..0000000000 --- a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Randomizer.java +++ /dev/null @@ -1,86 +0,0 @@ -package gregtech.common.redstonecircuits; - -import gregtech.api.interfaces.IRedstoneCircuitBlock; -import gregtech.api.util.GT_CircuitryBehavior; - -public class GT_Circuit_Randomizer extends GT_CircuitryBehavior { - - public GT_Circuit_Randomizer(int aIndex) { - super(aIndex); - } - - @Override - public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - aCircuitData[0] = 1; - aCircuitData[4] = 0; - } - - @Override - public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[0] < 1) { - aCircuitData[0] = 1; - } - if (aCircuitData[3] < 0) { - aCircuitData[3] = 0; - } - if (aCircuitData[3] > 1) { - aCircuitData[3] = 1; - } - if (aCircuitData[4] < 0) { - aCircuitData[4] = 0; - } - } - - @Override - public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[3] == 1) { - if (getAnyRedstone(aRedstoneCircuitBlock)) { - aCircuitData[4] += 1; - } else { - aCircuitData[4] = 0; - } - } else if (getAnyRedstone(aRedstoneCircuitBlock)) { - aCircuitData[4] = 0; - } else { - aCircuitData[4] += 1; - } - if (aCircuitData[4] >= aCircuitData[0]) { - aCircuitData[4] = 0; - aRedstoneCircuitBlock - .setRedstone((byte) aRedstoneCircuitBlock.getRandom(16), aRedstoneCircuitBlock.getOutputFacing()); - } - } - - @Override - public String getName() { - return "Randomizer"; - } - - @Override - public String getDescription() { - return "Randomizes Redstone"; - } - - @Override - public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { - return switch (aCircuitDataIndex) { - case 0 -> "Delay"; - case 3 -> aCircuitData[aCircuitDataIndex] == 1 ? "RS => ON" : "RS => OFF"; - case 4 -> "Status"; - default -> ""; - }; - } - - @Override - public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { - return false; - } - - @Override - public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { - if (aCircuitDataIndex != 0) { - return ""; - } - return null; - } -} diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_RedstoneMeter.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_RedstoneMeter.java deleted file mode 100644 index 4db261fcf0..0000000000 --- a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_RedstoneMeter.java +++ /dev/null @@ -1,94 +0,0 @@ -package gregtech.common.redstonecircuits; - -import gregtech.api.interfaces.IRedstoneCircuitBlock; -import gregtech.api.util.GT_CircuitryBehavior; - -public class GT_Circuit_RedstoneMeter extends GT_CircuitryBehavior { - - public GT_Circuit_RedstoneMeter(int aIndex) { - super(aIndex); - } - - @Override - public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - aCircuitData[0] = 1; - aCircuitData[1] = 15; - aCircuitData[2] = 0; - aCircuitData[3] = 15; - } - - @Override - public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[0] < 0) { - aCircuitData[0] = 0; - } - if (aCircuitData[0] > 15) { - aCircuitData[0] = 15; - } - if (aCircuitData[1] < 0) { - aCircuitData[1] = 0; - } - if (aCircuitData[1] > 15) { - aCircuitData[1] = 15; - } - if (aCircuitData[1] < aCircuitData[0]) { - aCircuitData[1] = aCircuitData[0]; - } - if (aCircuitData[2] < 0) { - aCircuitData[2] = 0; - } - if (aCircuitData[2] > 1) { - aCircuitData[2] = 1; - } - if (aCircuitData[3] < 0) { - aCircuitData[3] = 0; - } - if (aCircuitData[3] > 15) { - aCircuitData[3] = 15; - } - } - - @Override - public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - byte tRedstone = getStrongestRedstone(aRedstoneCircuitBlock); - aRedstoneCircuitBlock - .setRedstone( - ((tRedstone >= aCircuitData[0]) && (tRedstone <= aCircuitData[1]) ? 1 : 0) - != (aCircuitData[2] != 0 ? 1 : 0) ? (byte) aCircuitData[3] : 0, - aRedstoneCircuitBlock.getOutputFacing()); - } - - @Override - public String getName() { - return "Redstone Meter"; - } - - @Override - public String getDescription() { - return "Checks Boundaries"; - } - - @Override - public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { - return switch (aCircuitDataIndex) { - case 0 -> "Lower"; - case 1 -> "Upper"; - case 2 -> "Invert:"; - case 3 -> "RS Out:"; - default -> ""; - }; - } - - @Override - public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { - return false; - } - - @Override - public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { - if (aCircuitDataIndex == 2) { - return aCircuitData[2] == 0 ? "OFF" : "ON"; - } - return null; - } -} diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Repeater.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Repeater.java deleted file mode 100644 index b96762d73b..0000000000 --- a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Repeater.java +++ /dev/null @@ -1,86 +0,0 @@ -package gregtech.common.redstonecircuits; - -import gregtech.api.interfaces.IRedstoneCircuitBlock; -import gregtech.api.util.GT_CircuitryBehavior; - -public class GT_Circuit_Repeater extends GT_CircuitryBehavior { - - public GT_Circuit_Repeater(int aIndex) { - super(aIndex); - } - - @Override - public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - aCircuitData[0] = 1; - aCircuitData[4] = 0; - aCircuitData[5] = -1; - } - - @Override - public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[0] < 1) { - aCircuitData[0] = 1; - } - if (aCircuitData[4] < 0) { - aCircuitData[4] = 0; - } - if (aCircuitData[5] < -1) { - aCircuitData[5] = -1; - } - } - - @Override - public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (getAnyRedstone(aRedstoneCircuitBlock)) { - aCircuitData[4] += 1; - if (aCircuitData[5] < 0) { - aCircuitData[5] = 0; - } - } - if ((aCircuitData[5] >= 0) && (aCircuitData[5] < aCircuitData[0])) { - aCircuitData[5] += 1; - } - if (aCircuitData[4] > 0) { - if (aCircuitData[5] >= aCircuitData[0]) { - aCircuitData[4] -= 1; - aRedstoneCircuitBlock.setRedstone((byte) 15, aRedstoneCircuitBlock.getOutputFacing()); - } else { - aRedstoneCircuitBlock.setRedstone((byte) 0, aRedstoneCircuitBlock.getOutputFacing()); - } - } else { - aRedstoneCircuitBlock.setRedstone((byte) 0, aRedstoneCircuitBlock.getOutputFacing()); - aCircuitData[5] = -1; - } - } - - @Override - public String getName() { - return "Repeater"; - } - - @Override - public String getDescription() { - return "Delays RS-Signal"; - } - - @Override - public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { - if (aCircuitDataIndex == 0) { - return "Delay"; - } - return ""; - } - - @Override - public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { - return false; - } - - @Override - public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { - if (aCircuitDataIndex > 0) { - return ""; - } - return null; - } -} diff --git a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Timer.java b/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Timer.java deleted file mode 100644 index 026c83dfbc..0000000000 --- a/src/main/java/gregtech/common/redstonecircuits/GT_Circuit_Timer.java +++ /dev/null @@ -1,108 +0,0 @@ -package gregtech.common.redstonecircuits; - -import gregtech.api.interfaces.IRedstoneCircuitBlock; -import gregtech.api.util.GT_CircuitryBehavior; - -public class GT_Circuit_Timer extends GT_CircuitryBehavior { - - public GT_Circuit_Timer(int aIndex) { - super(aIndex); - } - - @Override - public void initParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - aCircuitData[0] = 2; - aCircuitData[1] = 1; - aCircuitData[2] = 2; - aCircuitData[4] = 0; - } - - @Override - public void validateParameters(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[0] < 2) { - aCircuitData[0] = 2; - } - if (aCircuitData[1] < 1) { - aCircuitData[1] = 1; - } - if (aCircuitData[2] < 2) { - aCircuitData[2] = 2; - } - if (aCircuitData[3] < 0) { - aCircuitData[3] = 0; - } - if (aCircuitData[3] > 1) { - aCircuitData[3] = 1; - } - if (aCircuitData[4] < 0) { - aCircuitData[4] = 0; - } - } - - @Override - public void onTick(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock) { - if (aCircuitData[3] == 1) { - if (getAnyRedstone(aRedstoneCircuitBlock)) { - aCircuitData[4] += 1; - } else { - aCircuitData[4] = 0; - } - } else if (getAnyRedstone(aRedstoneCircuitBlock)) { - aCircuitData[4] = 0; - } else { - aCircuitData[4] += 1; - } - if (aCircuitData[4] >= aCircuitData[0]) { - if (aCircuitData[1] > 1) { - if (aCircuitData[4] >= aCircuitData[0] + (aCircuitData[1] - 1) * aCircuitData[2]) { - aRedstoneCircuitBlock.setRedstone((byte) 15, aRedstoneCircuitBlock.getOutputFacing()); - aCircuitData[4] = 0; - } else { - aRedstoneCircuitBlock.setRedstone( - (byte) ((aCircuitData[4] - aCircuitData[0]) % aCircuitData[2] == 0 ? 15 : 0), - aRedstoneCircuitBlock.getOutputFacing()); - } - } else { - aRedstoneCircuitBlock.setRedstone((byte) 15, aRedstoneCircuitBlock.getOutputFacing()); - aCircuitData[4] = 0; - } - } else { - aRedstoneCircuitBlock.setRedstone((byte) 0, aRedstoneCircuitBlock.getOutputFacing()); - } - } - - @Override - public String getName() { - return "Timer"; - } - - @Override - public String getDescription() { - return "Pulses Redstone"; - } - - @Override - public String getDataDescription(int[] aCircuitData, int aCircuitDataIndex) { - return switch (aCircuitDataIndex) { - case 0 -> "Delay"; - case 1 -> "Pulses"; - case 2 -> "Length"; - case 3 -> aCircuitData[aCircuitDataIndex] == 1 ? "RS => ON" : "RS => OFF"; - case 4 -> "Time"; - default -> ""; - }; - } - - @Override - public boolean displayItemStack(int[] aCircuitData, IRedstoneCircuitBlock aRedstoneCircuitBlock, int aIndex) { - return false; - } - - @Override - public String getDataDisplay(int[] aCircuitData, int aCircuitDataIndex) { - if (aCircuitDataIndex == 3) { - return ""; - } - return null; - } -} diff --git a/src/main/java/gregtech/common/render/DroneRender.java b/src/main/java/gregtech/common/render/DroneRender.java new file mode 100644 index 0000000000..02445b6dc6 --- /dev/null +++ b/src/main/java/gregtech/common/render/DroneRender.java @@ -0,0 +1,93 @@ +package gregtech.common.render; + +import static gregtech.api.enums.Mods.GregTech; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.common.tileentities.render.TileEntityDrone; + +@SideOnly(Side.CLIENT) +public class DroneRender extends TileEntitySpecialRenderer { + + private static final ResourceLocation DroneTexture = new ResourceLocation(GregTech.ID, "textures/model/drone.png"); + private static final IModelCustom Drone = AdvancedModelLoader + .loadModel(new ResourceLocation(GregTech.ID, "textures/model/drone.obj")); + + public DroneRender() { + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityDrone.class, this); + } + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { + if (!(tile instanceof TileEntityDrone drone)) return; + final float size = 1.0f; + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); + renderDrone(size); + renderBlade(drone, size); + GL11.glPopMatrix(); + } + + private void renderDrone(double size) { + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + this.bindTexture(DroneTexture); + GL11.glScaled(size, size, size); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f); + Drone.renderOnly("drone", "box", "main"); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } + + private void renderBlade(TileEntityDrone drone, double size) { + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + this.bindTexture(DroneTexture); + GL11.glScaled(size, size, size); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f); + GL11.glPushMatrix(); + GL11.glTranslated(-0.7d * size, -1 * size, -0.7 * size); + GL11.glRotated(drone.rotation, 0, 1, 0); + GL11.glTranslated(0.7d * size, 1 * size, 0.7 * size); + Drone.renderOnly("blade2"); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glTranslated(-0.7d * size, -1 * size, 0.7 * size); + GL11.glRotated(drone.rotation, 0, 1, 0); + GL11.glTranslated(0.7d * size, 1 * size, -0.7 * size); + Drone.renderOnly("blade3"); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glTranslated(0.7d * size, -1 * size, -0.7 * size); + GL11.glRotated(drone.rotation, 0, 1, 0); + GL11.glTranslated(-0.7d * size, 1 * size, 0.7 * size); + Drone.renderOnly("blade1"); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glTranslated(0.7d * size, -1 * size, 0.7 * size); + GL11.glRotated(drone.rotation, 0, 1, 0); + GL11.glTranslated(-0.7d * size, 1 * size, -0.7 * size); + Drone.renderOnly("blade4"); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + } +} diff --git a/src/main/java/gregtech/common/render/FlaskRenderer.java b/src/main/java/gregtech/common/render/FlaskRenderer.java new file mode 100644 index 0000000000..f7d2e96ca1 --- /dev/null +++ b/src/main/java/gregtech/common/render/FlaskRenderer.java @@ -0,0 +1,71 @@ +package gregtech.common.render; + +import net.minecraft.client.Minecraft; +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.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.common.items.ItemVolumetricFlask; + +@SideOnly(Side.CLIENT) +public final class FlaskRenderer implements IItemRenderer { + + public FlaskRenderer() { + MinecraftForgeClient.registerItemRenderer(ItemList.VOLUMETRIC_FLASK.getItem(), this); + } + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type != ItemRenderType.FIRST_PERSON_MAP; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return type == ItemRenderType.ENTITY && helper == ItemRendererHelper.ENTITY_BOBBING + || (helper == ItemRendererHelper.ENTITY_ROTATION && Minecraft.getMinecraft().gameSettings.fancyGraphics); + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + ItemVolumetricFlask cell = (ItemVolumetricFlask) item.getItem(); + IIcon icon = item.getIconIndex(); + GL11.glEnable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GTRenderUtil.applyStandardItemTransform(type); + + FluidStack fs = cell != null ? cell.getFluid(item) : null; + if (fs != null) { + IIcon iconWindow = cell.iconWindow; + Fluid fluid = fs.getFluid(); + IIcon fluidIcon = fluid.getIcon(fs); + int fluidColor = fluid.getColor(fs); + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + GL11.glBlendFunc(GL11.GL_ZERO, GL11.GL_ONE); + GTRenderUtil.renderItem(type, iconWindow); + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glColor3ub((byte) (fluidColor >> 16), (byte) (fluidColor >> 8), (byte) fluidColor); + GTRenderUtil.renderItem(type, fluidIcon); + GL11.glColor3ub((byte) -1, (byte) -1, (byte) -1); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GTRenderUtil.renderItem(type, icon); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + } +} diff --git a/src/main/java/gregtech/common/render/FluidDisplayStackRenderer.java b/src/main/java/gregtech/common/render/FluidDisplayStackRenderer.java new file mode 100644 index 0000000000..80e2cbe6a6 --- /dev/null +++ b/src/main/java/gregtech/common/render/FluidDisplayStackRenderer.java @@ -0,0 +1,98 @@ +package gregtech.common.render; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.MinecraftForgeClient; + +import org.lwjgl.opengl.GL11; + +import appeng.util.ReadableNumberConverter; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.common.items.ItemFluidDisplay; + +@SideOnly(Side.CLIENT) +public class FluidDisplayStackRenderer implements IItemRenderer { + + public FluidDisplayStackRenderer() { + MinecraftForgeClient.registerItemRenderer(ItemList.Display_Fluid.getItem(), this); + } + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + if (!item.hasTagCompound()) return false; + return type == ItemRenderType.INVENTORY; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + // not sure what this does. + return false; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + if (item == null || item.getItem() == null || !(item.getItem() instanceof ItemFluidDisplay)) return; + + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glEnable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + Materials associatedFluidMaterial = Materials.get(item.stackTagCompound.getString("mFluidMaterialName")); + if (associatedFluidMaterial.renderer == null + || !associatedFluidMaterial.renderer.renderFluidDisplayItem(type, item, data)) { + IIcon icon = item.getItem() + .getIconFromDamage(item.getItemDamage()); + Tessellator tess = Tessellator.instance; + tess.startDrawingQuads(); + // draw a simple rectangle for the inventory icon + final float x_min = icon.getMinU(); + final float x_max = icon.getMaxU(); + final float y_min = icon.getMinV(); + final float y_max = icon.getMaxV(); + tess.addVertexWithUV(0, 16, 0, x_min, y_max); + tess.addVertexWithUV(16, 16, 0, x_max, y_max); + tess.addVertexWithUV(16, 0, 0, x_max, y_min); + tess.addVertexWithUV(0, 0, 0, x_min, y_min); + tess.draw(); + } + + if (item.getTagCompound() == null) { + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + return; + } + + // Render Fluid amount text + long fluidAmount = item.getTagCompound() + .getLong("mFluidDisplayAmount"); + if (fluidAmount > 0L && !item.getTagCompound() + .getBoolean("mHideStackSize")) { + String amountString; + + if (fluidAmount < 10_000) { + amountString = "" + fluidAmount + "L"; + } else { + amountString = ReadableNumberConverter.INSTANCE.toWideReadableForm(fluidAmount) + "L"; + } + + FontRenderer fontRender = Minecraft.getMinecraft().fontRenderer; + float smallTextScale = fontRender.getUnicodeFlag() ? 3F / 4F : 1F / 2F; + GL11.glDisable(GL11.GL_BLEND); + GL11.glPushMatrix(); + GL11.glScalef(smallTextScale, smallTextScale, 1.0f); + + fontRender + .drawString(amountString, 0, (int) (16 / smallTextScale) - fontRender.FONT_HEIGHT + 1, 0xFFFFFF, true); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_ALPHA_TEST); + } + } +} diff --git a/src/main/java/gregtech/common/render/GTCapeRenderer.java b/src/main/java/gregtech/common/render/GTCapeRenderer.java new file mode 100644 index 0000000000..ea8e0a37cd --- /dev/null +++ b/src/main/java/gregtech/common/render/GTCapeRenderer.java @@ -0,0 +1,148 @@ +package gregtech.common.render; + +import java.util.Collection; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.potion.Potion; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.RenderPlayerEvent; + +import org.lwjgl.opengl.GL11; + +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; + +public class GTCapeRenderer extends RenderPlayer { + + private final ResourceLocation[] mCapes = { new ResourceLocation("gregtech:textures/BrainTechCape.png"), + new ResourceLocation("gregtech:textures/GregTechCape.png"), + new ResourceLocation("gregtech:textures/MrBrainCape.png"), + new ResourceLocation("gregtech:textures/GregoriusCape.png"), + new ResourceLocation("gregtech:textures/DonorCape.png"), new ResourceLocation("gregtech:textures/DevCape.png"), + new ResourceLocation("gregtech:textures/Steam.png"), new ResourceLocation("gregtech:textures/Titanium.png"), + new ResourceLocation("gregtech:textures/Neutronium.png"), + new ResourceLocation("gregtech:textures/Stargate.png") }; + private final Collection mCapeList; + + public GTCapeRenderer(Collection aCapeList) { + this.mCapeList = aCapeList; + setRenderManager(RenderManager.instance); + } + + public void receiveRenderSpecialsEvent(RenderPlayerEvent.Specials.Pre aEvent) { + AbstractClientPlayer aPlayer = (AbstractClientPlayer) aEvent.entityPlayer; + if (GTUtility.getFullInvisibility(aPlayer)) { + aEvent.setCanceled(true); + return; + } + float aPartialTicks = aEvent.partialRenderTick; + if (aPlayer.isInvisible()) { + return; + } + if (GTUtility.getPotion(aPlayer, Potion.invisibility.id)) { + return; + } + try { + ResourceLocation tResource = aPlayer.getLocationCape(); + if (aPlayer.getDisplayName() + .equalsIgnoreCase("Friedi4321")) { + tResource = this.mCapes[0]; + } + if (this.mCapeList.contains( + aPlayer.getDisplayName() + .toLowerCase())) { + tResource = this.mCapes[1]; + } + if (aPlayer.getDisplayName() + .equalsIgnoreCase("Mr_Brain")) { + tResource = this.mCapes[2]; + } + if (aPlayer.getDisplayName() + .equalsIgnoreCase("GregoriusT")) { + tResource = this.mCapes[3]; + } + if (this.mCapeList.contains( + aPlayer.getDisplayName() + .toLowerCase() + ":capedonor")) { + tResource = this.mCapes[4]; + } + if (this.mCapeList.contains( + aPlayer.getDisplayName() + .toLowerCase() + ":capedev")) { + tResource = this.mCapes[5]; + } + if (this.mCapeList.contains( + aPlayer.getDisplayName() + .toLowerCase() + ":cape_steam")) { + tResource = this.mCapes[6]; + } + if (this.mCapeList.contains( + aPlayer.getDisplayName() + .toLowerCase() + ":cape_titanium")) { + tResource = this.mCapes[7]; + } + if (this.mCapeList.contains( + aPlayer.getDisplayName() + .toLowerCase() + ":cape_neutronium")) { + tResource = this.mCapes[8]; + } + if (this.mCapeList.contains( + aPlayer.getDisplayName() + .toLowerCase() + ":cape_stargate")) { + tResource = this.mCapes[9]; + } + + if ((tResource != null) && (!aPlayer.getHideCape())) { + bindTexture(tResource); + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 0.0F, 0.125F); + double d0 = aPlayer.field_71091_bM + (aPlayer.field_71094_bP - aPlayer.field_71091_bM) * aPartialTicks + - (aPlayer.prevPosX + (aPlayer.posX - aPlayer.prevPosX) * aPartialTicks); + double d1 = aPlayer.field_71096_bN + (aPlayer.field_71095_bQ - aPlayer.field_71096_bN) * aPartialTicks + - (aPlayer.prevPosY + (aPlayer.posY - aPlayer.prevPosY) * aPartialTicks); + double d2 = aPlayer.field_71097_bO + (aPlayer.field_71085_bR - aPlayer.field_71097_bO) * aPartialTicks + - (aPlayer.prevPosZ + (aPlayer.posZ - aPlayer.prevPosZ) * aPartialTicks); + float f6 = aPlayer.prevRenderYawOffset + + (aPlayer.renderYawOffset - aPlayer.prevRenderYawOffset) * aPartialTicks; + double d3 = MathHelper.sin(f6 * (float) Math.PI / 180.0F); + double d4 = -MathHelper.cos(f6 * (float) Math.PI / 180.0F); + float f7 = (float) d1 * 10.0F; + float f8 = (float) (d0 * d3 + d2 * d4) * 100.0F; + float f9 = (float) (d0 * d4 - d2 * d3) * 100.0F; + if (f7 < -6.0F) { + f7 = -6.0F; + } + if (f7 > 32.0F) { + f7 = 32.0F; + } + if (f8 < 0.0F) { + f8 = 0.0F; + } + float f10 = aPlayer.prevCameraYaw + (aPlayer.cameraYaw - aPlayer.prevCameraYaw) * aPartialTicks; + f7 += MathHelper.sin( + (aPlayer.prevDistanceWalkedModified + + (aPlayer.distanceWalkedModified - aPlayer.prevDistanceWalkedModified) * aPartialTicks) * 6.0F) + * 32.0F + * f10; + if (aPlayer.isSneaking()) { + f7 += 25.0F; + } + GL11.glRotatef(6.0F + f8 / 2.0F + f7, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(f9 / 2.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-f9 / 2.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + ((ModelBiped) this.mainModel).renderCloak(0.0625F); + GL11.glPopMatrix(); + } + } catch (Throwable e) { + if (GTValues.D1) { + e.printStackTrace(GTLog.err); + } + } + } +} diff --git a/src/main/java/gregtech/common/render/GTCopiedBlockTextureRender.java b/src/main/java/gregtech/common/render/GTCopiedBlockTextureRender.java new file mode 100644 index 0000000000..ab4282c7ba --- /dev/null +++ b/src/main/java/gregtech/common/render/GTCopiedBlockTextureRender.java @@ -0,0 +1,112 @@ +package gregtech.common.render; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.util.IIcon; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.IBlockContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.util.LightingHelper; + +public class GTCopiedBlockTextureRender extends GTTextureBase implements ITexture, IBlockContainer { + + private final Block mBlock; + private final byte mSide, mMeta; + + protected GTCopiedBlockTextureRender(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa, boolean allowAlpha) { + if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_CopiedBlockTexture"); + mBlock = aBlock; + mSide = (byte) ordinalSide; + mMeta = (byte) aMeta; + } + + @Override + public boolean isOldTexture() { + return false; + } + + private IIcon getIcon(int ordinalSide) { + if (mSide == 6) return mBlock.getIcon(ordinalSide, mMeta); + return mBlock.getIcon(mSide, mMeta); + } + + @Override + public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + final IIcon aIcon = getIcon(ForgeDirection.EAST.ordinal()); + aRenderer.field_152631_f = true; + startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f); + new LightingHelper(aRenderer).setupLightingXPos(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.EAST, 0xffffff); + aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + aRenderer.field_152631_f = false; + } + + @Override + public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f); + final IIcon aIcon = getIcon(ForgeDirection.WEST.ordinal()); + new LightingHelper(aRenderer).setupLightingXNeg(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.WEST, 0xffffff); + aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + } + + @Override + public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f); + final IIcon aIcon = getIcon(ForgeDirection.UP.ordinal()); + new LightingHelper(aRenderer).setupLightingYPos(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.UP, 0xffffff); + aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + } + + @Override + public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f); + final IIcon aIcon = getIcon(ForgeDirection.DOWN.ordinal()); + new LightingHelper(aRenderer).setupLightingYNeg(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.DOWN, 0xffffff); + aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + } + + @Override + public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f); + final IIcon aIcon = getIcon(ForgeDirection.SOUTH.ordinal()); + new LightingHelper(aRenderer).setupLightingZPos(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.SOUTH, 0xffffff); + aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + } + + @Override + public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f); + final IIcon aIcon = getIcon(ForgeDirection.NORTH.ordinal()); + aRenderer.field_152631_f = true; + new LightingHelper(aRenderer).setupLightingZNeg(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.NORTH, 0xffffff); + aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + aRenderer.field_152631_f = false; + } + + @Override + public boolean isValidTexture() { + return mBlock != null; + } + + @Override + public Block getBlock() { + return mBlock; + } + + @Override + public byte getMeta() { + return mMeta; + } +} diff --git a/src/main/java/gregtech/common/render/GTCopiedCTMBlockTexture.java b/src/main/java/gregtech/common/render/GTCopiedCTMBlockTexture.java new file mode 100644 index 0000000000..d3f6292435 --- /dev/null +++ b/src/main/java/gregtech/common/render/GTCopiedCTMBlockTexture.java @@ -0,0 +1,118 @@ +package gregtech.common.render; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.util.IIcon; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.IBlockContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.util.GTRenderingWorld; +import gregtech.api.util.LightingHelper; + +class GTCopiedCTMBlockTexture extends GTTextureBase implements ITexture, IBlockContainer { + + private final Block mBlock; + private final byte mSide, mMeta; + + GTCopiedCTMBlockTexture(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa, boolean allowAlpha) { + if (aRGBa.length != 4) + throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_CopiedCTMBlockTexture"); + mBlock = aBlock; + mSide = (byte) ordinalSide; + mMeta = (byte) aMeta; + } + + @Override + public boolean isOldTexture() { + return false; + } + + private IIcon getIcon(int ordinalSide, int aX, int aY, int aZ, RenderBlocks aRenderer) { + final int tSide = mSide == 6 ? ordinalSide : mSide; + return mBlock.getIcon(getBlockAccess(aRenderer), aX, aY, aZ, tSide); + } + + private GTRenderingWorld getBlockAccess(RenderBlocks aRenderer) { + return GTRenderingWorld.getInstance(aRenderer.blockAccess); + } + + @Override + public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + final IIcon aIcon = getIcon(ForgeDirection.EAST.ordinal(), aX, aY, aZ, aRenderer); + aRenderer.field_152631_f = true; + startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f); + new LightingHelper(aRenderer).setupLightingXPos(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.EAST, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); + aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + aRenderer.field_152631_f = false; + } + + @Override + public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f); + final IIcon aIcon = getIcon(ForgeDirection.WEST.ordinal(), aX, aY, aZ, aRenderer); + new LightingHelper(aRenderer).setupLightingXNeg(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.WEST, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); + aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + } + + @Override + public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f); + final IIcon aIcon = getIcon(ForgeDirection.UP.ordinal(), aX, aY, aZ, aRenderer); + new LightingHelper(aRenderer).setupLightingYPos(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.UP, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); + aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + } + + @Override + public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f); + final IIcon aIcon = getIcon(ForgeDirection.DOWN.ordinal(), aX, aY, aZ, aRenderer); + new LightingHelper(aRenderer).setupLightingYNeg(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.DOWN, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); + aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + } + + @Override + public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f); + final IIcon aIcon = getIcon(ForgeDirection.SOUTH.ordinal(), aX, aY, aZ, aRenderer); + new LightingHelper(aRenderer).setupLightingZPos(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.SOUTH, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); + aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + } + + @Override + public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f); + final IIcon aIcon = getIcon(ForgeDirection.NORTH.ordinal(), aX, aY, aZ, aRenderer); + aRenderer.field_152631_f = true; + new LightingHelper(aRenderer).setupLightingZNeg(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.NORTH, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); + aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, aIcon); + draw(aRenderer); + aRenderer.field_152631_f = false; + } + + @Override + public boolean isValidTexture() { + return mBlock != null; + } + + @Override + public Block getBlock() { + return mBlock; + } + + @Override + public byte getMeta() { + return mMeta; + } +} diff --git a/src/main/java/gregtech/common/render/GTIconFlipped.java b/src/main/java/gregtech/common/render/GTIconFlipped.java new file mode 100644 index 0000000000..261e5e63b2 --- /dev/null +++ b/src/main/java/gregtech/common/render/GTIconFlipped.java @@ -0,0 +1,91 @@ +package gregtech.common.render; + +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; + +@SideOnly(Side.CLIENT) +public class GTIconFlipped implements IIcon { + + private final IIcon baseIcon; + private final boolean flipU; + private final boolean flipV; + + public GTIconFlipped(IIcon baseIcon, boolean flipU, boolean flipV) { + this.baseIcon = baseIcon; + this.flipU = flipU; + this.flipV = flipV; + } + + /** + * Returns the width of the icon, in pixels. + */ + @Override + public int getIconWidth() { + return this.baseIcon.getIconWidth(); + } + + /** + * Returns the height of the icon, in pixels. + */ + @Override + public int getIconHeight() { + return this.baseIcon.getIconHeight(); + } + + /** + * Returns the minimum U coordinate to use when rendering with this icon. + */ + @Override + public float getMinU() { + return this.flipU ? this.baseIcon.getMaxU() : this.baseIcon.getMinU(); + } + + /** + * Returns the maximum U coordinate to use when rendering with this icon. + */ + @Override + public float getMaxU() { + return this.flipU ? this.baseIcon.getMinU() : this.baseIcon.getMaxU(); + } + + /** + * Gets a U coordinate on the icon. 0 returns uMin and 16 returns uMax. Other arguments return in-between values. + */ + @Override + public float getInterpolatedU(double p_94214_1_) { + final float f = this.getMaxU() - this.getMinU(); + return this.getMinU() + f * ((float) p_94214_1_ / 16.0F); + } + + /** + * Returns the minimum V coordinate to use when rendering with this icon. + */ + @Override + public float getMinV() { + return this.flipV ? this.baseIcon.getMaxV() : this.baseIcon.getMinV(); + } + + /** + * Returns the maximum V coordinate to use when rendering with this icon. + */ + @Override + public float getMaxV() { + return this.flipV ? this.baseIcon.getMinV() : this.baseIcon.getMaxV(); + } + + /** + * Gets a V coordinate on the icon. 0 returns vMin and 16 returns vMax. Other arguments return in-between values. + */ + @Override + public float getInterpolatedV(double p_94207_1_) { + final float f = this.getMaxV() - this.getMinV(); + return this.getMinV() + f * ((float) p_94207_1_ / 16.0F); + } + + @Override + public String getIconName() { + return this.baseIcon.getIconName(); + } +} diff --git a/src/main/java/gregtech/common/render/GTMultiTextureRender.java b/src/main/java/gregtech/common/render/GTMultiTextureRender.java new file mode 100644 index 0000000000..1eaf4c69e3 --- /dev/null +++ b/src/main/java/gregtech/common/render/GTMultiTextureRender.java @@ -0,0 +1,69 @@ +package gregtech.common.render; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; + +import gregtech.GTMod; +import gregtech.api.interfaces.ITexture; + +/** + *

+ * Lets Multiple ITextures Render overlay over each other.< + *

+ *

+ * I should have done this much earlier... + *

+ */ +public class GTMultiTextureRender extends GTTextureBase implements ITexture { + + protected final ITexture[] mTextures; + + public static GTMultiTextureRender get(ITexture... aTextures) { + return GTMod.instance.isClientSide() ? new GTMultiTextureRender(aTextures) : null; + } + + protected GTMultiTextureRender(ITexture... aTextures) { + mTextures = aTextures; + } + + @Override + public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + for (ITexture tTexture : mTextures) + if (tTexture != null && tTexture.isValidTexture()) tTexture.renderXPos(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + for (ITexture tTexture : mTextures) + if (tTexture != null && tTexture.isValidTexture()) tTexture.renderXNeg(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + for (ITexture tTexture : mTextures) + if (tTexture != null && tTexture.isValidTexture()) tTexture.renderYPos(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + for (ITexture tTexture : mTextures) + if (tTexture != null && tTexture.isValidTexture()) tTexture.renderYNeg(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + for (ITexture tTexture : mTextures) + if (tTexture != null && tTexture.isValidTexture()) tTexture.renderZPos(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + for (ITexture tTexture : mTextures) + if (tTexture != null && tTexture.isValidTexture()) tTexture.renderZNeg(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public boolean isValidTexture() { + return true; + } +} diff --git a/src/main/java/gregtech/common/render/GTRenderUtil.java b/src/main/java/gregtech/common/render/GTRenderUtil.java new file mode 100644 index 0000000000..650d827cff --- /dev/null +++ b/src/main/java/gregtech/common/render/GTRenderUtil.java @@ -0,0 +1,141 @@ +package gregtech.common.render; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.ItemRenderer; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; + +public class GTRenderUtil { + + public static void colorGTItem(ItemStack aStack) { + if (aStack.getItem() instanceof IGT_ItemWithMaterialRenderer aItem) { + + short[] tModulation = aItem.getRGBa(aStack); + GL11.glColor4f(tModulation[0] / 255.0F, tModulation[1] / 255.0F, tModulation[2] / 255.0F, 255.0f); + } else { + System.out.println("WARNING: " + aStack.getDisplayName() + " does not have an associated GT colour."); + } + } + + public static void renderBlockIcon(RenderBlocks aRenderer, Block aBlock, double aX, double aY, double aZ, + IIcon aIcon, ForgeDirection side) { + switch (side) { + case DOWN -> aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, aIcon); + case UP -> aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, aIcon); + case NORTH -> aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, aIcon); + case SOUTH -> aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, aIcon); + case WEST -> aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, aIcon); + case EAST -> aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, aIcon); + } + } + + public static void renderItemIcon(IIcon icon, double size, double z, float nx, float ny, float nz) { + renderItemIcon(icon, 0.0D, 0.0D, size, size, z, nx, ny, nz); + } + + public static void renderItemIcon(IIcon icon, double xStart, double yStart, double xEnd, double yEnd, double z, + float nx, float ny, float nz) { + if (icon == null) { + return; + } + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(nx, ny, nz); + if (nz > 0.0F) { + Tessellator.instance.addVertexWithUV(xStart, yStart, z, icon.getMinU(), icon.getMinV()); + Tessellator.instance.addVertexWithUV(xEnd, yStart, z, icon.getMaxU(), icon.getMinV()); + Tessellator.instance.addVertexWithUV(xEnd, yEnd, z, icon.getMaxU(), icon.getMaxV()); + Tessellator.instance.addVertexWithUV(xStart, yEnd, z, icon.getMinU(), icon.getMaxV()); + } else { + Tessellator.instance.addVertexWithUV(xStart, yEnd, z, icon.getMinU(), icon.getMaxV()); + Tessellator.instance.addVertexWithUV(xEnd, yEnd, z, icon.getMaxU(), icon.getMaxV()); + Tessellator.instance.addVertexWithUV(xEnd, yStart, z, icon.getMaxU(), icon.getMinV()); + Tessellator.instance.addVertexWithUV(xStart, yStart, z, icon.getMinU(), icon.getMinV()); + } + Tessellator.instance.draw(); + } + + @SuppressWarnings("RedundantLabeledSwitchRuleCodeBlock") + public static void renderItem(IItemRenderer.ItemRenderType type, IIcon icon) { + Tessellator tessellator = Tessellator.instance; + float maxU = icon.getMaxU(); + float minV = icon.getMinV(); + float minU = icon.getMinU(); + float maxV = icon.getMaxV(); + + switch (type) { + case ENTITY -> { + if (Minecraft.getMinecraft().gameSettings.fancyGraphics) { + ItemRenderer.renderItemIn2D( + tessellator, + maxU, + minV, + minU, + maxV, + icon.getIconWidth(), + icon.getIconHeight(), + 0.0625F); + } else { + GL11.glPushMatrix(); + + if (!RenderItem.renderInFrame) { + GL11.glRotatef(180.0F - RenderManager.instance.playerViewY, 0.0F, 1.0F, 0.0F); + } + + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + tessellator.addVertexWithUV(0.0F - 0.5F, 0.0F - 0.25F, 0.0D, minU, maxV); + tessellator.addVertexWithUV(1.0F - 0.5F, 0.0F - 0.25F, 0.0D, maxU, maxV); + tessellator.addVertexWithUV(1.0F - 0.5F, 1.0F - 0.25F, 0.0D, maxU, minV); + tessellator.addVertexWithUV(0.0F - 0.5F, 1.0F - 0.25F, 0.0D, minU, minV); + tessellator.draw(); + + GL11.glPopMatrix(); + } + } + case EQUIPPED, EQUIPPED_FIRST_PERSON -> { + ItemRenderer.renderItemIn2D( + tessellator, + maxU, + minV, + minU, + maxV, + icon.getIconWidth(), + icon.getIconHeight(), + 0.0625F); + } + case INVENTORY -> { + renderItemIcon(icon, 16.0D, 0.001, 0.0F, 0.0F, -1.0F); + } + default -> {} + } + } + + public static void applyStandardItemTransform(IItemRenderer.ItemRenderType type) { + if (type == IItemRenderer.ItemRenderType.ENTITY) { + if (RenderItem.renderInFrame) { + // Magic numbers calculated from vanilla code + GL11.glScalef(1.025641F, 1.025641F, 1.025641F); + GL11.glTranslatef(0.0F, -0.05F, 0.0F); + } + + if (Minecraft.getMinecraft().gameSettings.fancyGraphics) { + if (RenderItem.renderInFrame) { + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + } + // Magic numbers calculated from vanilla code + GL11.glTranslatef(-0.5F, -0.25F, 0.0421875F); + } + } + } +} diff --git a/src/main/java/gregtech/common/render/GTRenderedTexture.java b/src/main/java/gregtech/common/render/GTRenderedTexture.java new file mode 100644 index 0000000000..3bd4e6d864 --- /dev/null +++ b/src/main/java/gregtech/common/render/GTRenderedTexture.java @@ -0,0 +1,395 @@ +package gregtech.common.render; + +import static gregtech.api.util.LightingHelper.MAX_BRIGHTNESS; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.IAlignment; +import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; +import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; + +import gregtech.GTMod; +import gregtech.api.interfaces.IColorModulationContainer; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.LightingHelper; + +public class GTRenderedTexture extends GTTextureBase implements ITexture, IColorModulationContainer { + + protected final IIconContainer mIconContainer; + private final short[] mRGBa; + private final boolean glow; + private final boolean stdOrient; + private final boolean useExtFacing; + + protected GTRenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean allowAlpha, boolean glow, + boolean stdOrient, boolean extFacing) { + if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture"); + mIconContainer = aIcon; + mRGBa = aRGBa; + this.glow = glow; + this.stdOrient = stdOrient; + this.useExtFacing = extFacing; + } + + @Override + public boolean isOldTexture() { + return false; + } + + @Override + public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f); + final boolean enableAO = aRenderer.enableAO; + final LightingHelper lighting = new LightingHelper(aRenderer); + if (glow) { + if (!GTMod.gregtechproxy.mRenderGlowTextures) { + draw(aRenderer); + return; + } + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingXPos(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.EAST, mRGBa); + final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + lighting.setupColor(ForgeDirection.EAST, 0xffffff); + renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + aRenderer.enableAO = enableAO; + draw(aRenderer); + } + + @Override + public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f); + final boolean enableAO = aRenderer.enableAO; + final LightingHelper lighting = new LightingHelper(aRenderer); + if (glow) { + if (!GTMod.gregtechproxy.mRenderGlowTextures) { + draw(aRenderer); + return; + } + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingXNeg(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.WEST, mRGBa); + final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + lighting.setupColor(ForgeDirection.WEST, 0xffffff); + renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + aRenderer.enableAO = enableAO; + draw(aRenderer); + } + + @Override + public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f); + final boolean enableAO = aRenderer.enableAO; + final LightingHelper lighting = new LightingHelper(aRenderer); + if (glow) { + if (!GTMod.gregtechproxy.mRenderGlowTextures) { + draw(aRenderer); + return; + } + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingYPos(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.UP, mRGBa); + final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + lighting.setupColor(ForgeDirection.UP, 0xffffff); + renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + aRenderer.enableAO = enableAO; + draw(aRenderer); + } + + @Override + public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f); + final boolean enableAO = aRenderer.enableAO; + final LightingHelper lighting = new LightingHelper(aRenderer); + if (glow) { + if (!GTMod.gregtechproxy.mRenderGlowTextures) { + draw(aRenderer); + return; + } + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingYNeg(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.DOWN, mRGBa); + final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + Tessellator.instance.setColorRGBA(255, 255, 255, 255); + renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + aRenderer.enableAO = enableAO; + draw(aRenderer); + } + + @Override + public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f); + final boolean enableAO = aRenderer.enableAO; + final LightingHelper lighting = new LightingHelper(aRenderer); + if (glow) { + if (!GTMod.gregtechproxy.mRenderGlowTextures) { + draw(aRenderer); + return; + } + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingZPos(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.SOUTH, mRGBa); + final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + lighting.setupColor(ForgeDirection.SOUTH, 0xffffff); + renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + aRenderer.enableAO = enableAO; + draw(aRenderer); + } + + @Override + public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f); + final boolean enableAO = aRenderer.enableAO; + final LightingHelper lighting = new LightingHelper(aRenderer); + if (glow) { + if (!GTMod.gregtechproxy.mRenderGlowTextures) { + draw(aRenderer); + return; + } + aRenderer.enableAO = false; + lighting.setLightnessOverride(1.0F); + lighting.setBrightnessOverride(MAX_BRIGHTNESS); + } + lighting.setupLightingZNeg(aBlock, aX, aY, aZ) + .setupColor(ForgeDirection.NORTH, mRGBa); + final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); + renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); + if (mIconContainer.getOverlayIcon() != null) { + lighting.setupColor(ForgeDirection.NORTH, 0xffffff); + renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); + } + aRenderer.enableAO = enableAO; + draw(aRenderer); + } + + @Override + public short[] getRGBA() { + return mRGBa; + } + + @Override + public boolean isValidTexture() { + return mIconContainer != null; + } + + /** + * Renders the given texture to the bottom face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceYNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, + ExtendedFacing extendedFacing) { + + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE -> aRenderer.uvRotateBottom = 2; + case CLOCKWISE -> aRenderer.uvRotateBottom = 1; + case UPSIDE_DOWN -> aRenderer.uvRotateBottom = 3; + default -> aRenderer.uvRotateBottom = 0; + } + + final Flip aFlip = extendedFacing.getFlip(); + aRenderer.renderFaceYNeg( + Blocks.air, + x, + y, + z, + useExtFacing && GTMod.gregtechproxy.mRenderFlippedMachinesFlipped + ? new GTIconFlipped(icon, aFlip.isHorizontallyFlipped() ^ !stdOrient, aFlip.isVerticallyFliped()) + : new GTIconFlipped(icon, !stdOrient, false)); + aRenderer.uvRotateBottom = 0; + } + + /** + * Renders the given texture to the top face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceYPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, + ExtendedFacing extendedFacing) { + + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE -> aRenderer.uvRotateTop = 2; + case CLOCKWISE -> aRenderer.uvRotateTop = 1; + case UPSIDE_DOWN -> aRenderer.uvRotateTop = 3; + default -> aRenderer.uvRotateTop = 0; + } + + final Flip aFlip = extendedFacing.getFlip(); + aRenderer.renderFaceYPos( + Blocks.air, + x, + y, + z, + useExtFacing && GTMod.gregtechproxy.mRenderFlippedMachinesFlipped + ? new GTIconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) + : icon); + aRenderer.uvRotateTop = 0; + } + + /** + * Renders the given texture to the north (z-negative) face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceZNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, + ExtendedFacing extendedFacing) { + aRenderer.field_152631_f = true; + // **NOT A BUG**: aRenderer.uvRotateEast REALLY CONTROLS THE ROTATION OF THE NORTH SIDE + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE -> aRenderer.uvRotateEast = 2; + case CLOCKWISE -> aRenderer.uvRotateEast = 1; + case UPSIDE_DOWN -> aRenderer.uvRotateEast = 3; + default -> aRenderer.uvRotateEast = 0; + } + + final Flip aFlip = extendedFacing.getFlip(); + aRenderer.renderFaceZNeg( + Blocks.air, + x, + y, + z, + useExtFacing && GTMod.gregtechproxy.mRenderFlippedMachinesFlipped + ? new GTIconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) + : icon); + aRenderer.uvRotateEast = 0; + aRenderer.field_152631_f = false; + } + + /** + * Renders the given texture to the south (z-positive) face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceZPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, + ExtendedFacing extendedFacing) { + // **NOT A BUG**: aRenderer.uvRotateWest REALLY CONTROLS THE ROTATION OF THE SOUTH SIDE + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE -> aRenderer.uvRotateWest = 2; + case CLOCKWISE -> aRenderer.uvRotateWest = 1; + case UPSIDE_DOWN -> aRenderer.uvRotateWest = 3; + default -> aRenderer.uvRotateWest = 0; + } + + final Flip aFlip = extendedFacing.getFlip(); + aRenderer.renderFaceZPos( + Blocks.air, + x, + y, + z, + useExtFacing && GTMod.gregtechproxy.mRenderFlippedMachinesFlipped + ? new GTIconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) + : icon); + aRenderer.uvRotateWest = 0; + } + + /** + * Renders the given texture to the west (x-negative) face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceXNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, + ExtendedFacing extendedFacing) { + // **NOT A BUG**: aRenderer.uvRotateNorth REALLY CONTROLS THE ROTATION OF THE WEST SIDE + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE -> aRenderer.uvRotateNorth = 2; + case CLOCKWISE -> aRenderer.uvRotateNorth = 1; + case UPSIDE_DOWN -> aRenderer.uvRotateNorth = 3; + default -> aRenderer.uvRotateNorth = 0; + } + + final Flip aFlip = extendedFacing.getFlip(); + aRenderer.renderFaceXNeg( + Blocks.air, + x, + y, + z, + useExtFacing && GTMod.gregtechproxy.mRenderFlippedMachinesFlipped + ? new GTIconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) + : icon); + aRenderer.uvRotateNorth = 0; + } + + /** + * Renders the given texture to the east (x-positive) face of the block. Args: block, x, y, z, texture + */ + protected void renderFaceXPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, + ExtendedFacing extendedFacing) { + aRenderer.field_152631_f = true; + // **NOT A BUG**: aRenderer.uvRotateSouth REALLY CONTROLS THE ROTATION OF THE EAST SIDE + switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { + case COUNTER_CLOCKWISE -> aRenderer.uvRotateSouth = 2; + case CLOCKWISE -> aRenderer.uvRotateSouth = 1; + case UPSIDE_DOWN -> aRenderer.uvRotateSouth = 3; + default -> aRenderer.uvRotateSouth = 0; + } + + final Flip aFlip = extendedFacing.getFlip(); + aRenderer.renderFaceXPos( + Blocks.air, + x, + y, + z, + useExtFacing && GTMod.gregtechproxy.mRenderFlippedMachinesFlipped + ? new GTIconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) + : icon); + aRenderer.uvRotateSouth = 0; + aRenderer.field_152631_f = false; + } + + private ExtendedFacing getExtendedFacing(int x, int y, int z) { + if (stdOrient) return ExtendedFacing.DEFAULT; + final EntityPlayer player = GTMod.gregtechproxy.getThePlayer(); + if (player == null) return ExtendedFacing.DEFAULT; + final World w = player.getEntityWorld(); + if (w == null) return ExtendedFacing.DEFAULT; + final TileEntity te = w.getTileEntity(x, y, z); + IAlignment alignment = null; + if (te instanceof IGregTechTileEntity) { + final IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (meta instanceof IAlignmentProvider) { + alignment = ((IAlignmentProvider) meta).getAlignment(); + } else if (meta != null) { + return ExtendedFacing.of( + meta.getBaseMetaTileEntity() + .getFrontFacing()); + } + } else if (te instanceof IAlignmentProvider) { + alignment = ((IAlignmentProvider) te).getAlignment(); + } + if (alignment != null) return alignment.getExtendedFacing(); + return ExtendedFacing.DEFAULT; + } +} diff --git a/src/main/java/gregtech/common/render/GTRendererBlock.java b/src/main/java/gregtech/common/render/GTRendererBlock.java new file mode 100644 index 0000000000..1c8e2da29d --- /dev/null +++ b/src/main/java/gregtech/common/render/GTRendererBlock.java @@ -0,0 +1,779 @@ +package gregtech.common.render; + +import static gregtech.api.enums.GTValues.SIDE_DOWN; +import static gregtech.api.enums.GTValues.SIDE_EAST; +import static gregtech.api.enums.GTValues.SIDE_NORTH; +import static gregtech.api.enums.GTValues.SIDE_SOUTH; +import static gregtech.api.enums.GTValues.SIDE_UP; +import static gregtech.api.enums.GTValues.SIDE_WEST; +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_DOWN; +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_EAST; +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_NORTH; +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_SOUTH; +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_UP; +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_WEST; +import static gregtech.api.interfaces.metatileentity.IConnectable.HAS_FRESHFOAM; +import static gregtech.api.interfaces.metatileentity.IConnectable.HAS_HARDENEDFOAM; +import static gregtech.api.interfaces.metatileentity.IConnectable.NO_CONNECTION; +import static net.minecraftforge.common.util.ForgeDirection.DOWN; +import static net.minecraftforge.common.util.ForgeDirection.EAST; +import static net.minecraftforge.common.util.ForgeDirection.NORTH; +import static net.minecraftforge.common.util.ForgeDirection.SOUTH; +import static net.minecraftforge.common.util.ForgeDirection.UP; +import static net.minecraftforge.common.util.ForgeDirection.VALID_DIRECTIONS; +import static net.minecraftforge.common.util.ForgeDirection.WEST; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.particle.EffectRenderer; +import net.minecraft.client.particle.EntityDiggingFX; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IAllSidedTexturedTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity; +import gregtech.api.interfaces.tileentity.ITexturedTileEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.api.objects.XSTR; +import gregtech.common.blocks.BlockFrameBox; +import gregtech.common.blocks.BlockMachines; +import gregtech.common.blocks.BlockOresAbstract; +import gregtech.common.blocks.TileEntityOres; + +@ThreadSafeISBRH(perThread = true) +public class GTRendererBlock implements ISimpleBlockRenderingHandler { + + public static final float blockMin = 0.0F; + public static final float blockMax = 1.0F; + private static final float coverThickness = blockMax / 8.0F; + private static final float coverInnerMin = blockMin + coverThickness; + private static final float coverInnerMax = blockMax - coverThickness; + + @Deprecated + public static GTRendererBlock INSTANCE; + public static int mRenderID; + + public static void register() { + mRenderID = RenderingRegistry.getNextAvailableRenderId(); + INSTANCE = new GTRendererBlock(); + RenderingRegistry.registerBlockHandler(INSTANCE); + } + + private final ITexture[][] textureArray = new ITexture[6][]; + + public boolean renderStandardBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, + RenderBlocks aRenderer) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IPipeRenderedTileEntity pipeRenderedTileEntity) { + textureArray[0] = pipeRenderedTileEntity.getTextureCovered(DOWN); + textureArray[1] = pipeRenderedTileEntity.getTextureCovered(UP); + textureArray[2] = pipeRenderedTileEntity.getTextureCovered(NORTH); + textureArray[3] = pipeRenderedTileEntity.getTextureCovered(SOUTH); + textureArray[4] = pipeRenderedTileEntity.getTextureCovered(WEST); + textureArray[5] = pipeRenderedTileEntity.getTextureCovered(EAST); + return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer, textureArray); + } + if (tTileEntity instanceof IAllSidedTexturedTileEntity allSidedTexturedTileEntity) { + ITexture[] texture = allSidedTexturedTileEntity.getTexture(aBlock); + textureArray[0] = texture; + textureArray[1] = texture; + textureArray[2] = texture; + textureArray[3] = texture; + textureArray[4] = texture; + textureArray[5] = texture; + return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer, textureArray); + } + if (tTileEntity instanceof ITexturedTileEntity texturedTileEntity) { + textureArray[0] = texturedTileEntity.getTexture(aBlock, DOWN); + textureArray[1] = texturedTileEntity.getTexture(aBlock, UP); + textureArray[2] = texturedTileEntity.getTexture(aBlock, NORTH); + textureArray[3] = texturedTileEntity.getTexture(aBlock, SOUTH); + textureArray[4] = texturedTileEntity.getTexture(aBlock, WEST); + textureArray[5] = texturedTileEntity.getTexture(aBlock, EAST); + return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer, textureArray); + } + + return false; + } + + public boolean renderStandardBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, + RenderBlocks aRenderer, ITexture[][] aTextures) { + aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_DOWN], true); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_UP], true); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_NORTH], true); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_SOUTH], true); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_WEST], true); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_EAST], true); + return true; + } + + final ITexture[][] tIcons = new ITexture[VALID_DIRECTIONS.length][]; + final ITexture[][] tCovers = new ITexture[VALID_DIRECTIONS.length][]; + final boolean[] tIsCovered = new boolean[VALID_DIRECTIONS.length]; + + public boolean renderPipeBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, + IPipeRenderedTileEntity aTileEntity, RenderBlocks aRenderer) { + final byte aConnections = aTileEntity.getConnections(); + if ((aConnections & (HAS_FRESHFOAM | HAS_HARDENEDFOAM)) != 0) { + return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer); + } + final float thickness = aTileEntity.getThickNess(); + if (thickness >= 0.99F) { + return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer); + } + // Range of block occupied by pipe + final float pipeMin = (blockMax - thickness) / 2.0F; + final float pipeMax = blockMax - pipeMin; + + for (int i = 0; i < VALID_DIRECTIONS.length; i++) { + final ForgeDirection iSide = VALID_DIRECTIONS[i]; + tIsCovered[i] = (aTileEntity.getCoverIDAtSide(iSide) != 0); + tCovers[i] = aTileEntity.getTexture(aBlock, iSide); + tIcons[i] = aTileEntity.getTextureUncovered(iSide); + + } + + switch (aConnections) { + case NO_CONNECTION -> { + aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); + } + case CONNECTED_EAST | CONNECTED_WEST -> { + // EAST - WEST Pipe Sides + aBlock.setBlockBounds(blockMin, pipeMin, pipeMin, blockMax, pipeMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); + + // EAST - WEST Pipe Ends + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); + } + case CONNECTED_DOWN | CONNECTED_UP -> { + // UP - DOWN Pipe Sides + aBlock.setBlockBounds(pipeMin, blockMin, pipeMin, pipeMax, blockMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); + + // UP - DOWN Pipe Ends + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); + } + case CONNECTED_NORTH | CONNECTED_SOUTH -> { + // NORTH - SOUTH Pipe Sides + aBlock.setBlockBounds(pipeMin, pipeMin, blockMin, pipeMax, pipeMax, blockMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); + + // NORTH - SOUTH Pipe Ends + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); + } + default -> { + if ((aConnections & CONNECTED_WEST) == 0) { + aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + } else { + aBlock.setBlockBounds(blockMin, pipeMin, pipeMin, pipeMin, pipeMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); + } + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); + if ((aConnections & CONNECTED_EAST) == 0) { + aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + } else { + aBlock.setBlockBounds(pipeMax, pipeMin, pipeMin, blockMax, pipeMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); + } + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); + if ((aConnections & CONNECTED_DOWN) == 0) { + aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + } else { + aBlock.setBlockBounds(pipeMin, blockMin, pipeMin, pipeMax, pipeMin, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); + } + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); + if ((aConnections & CONNECTED_UP) == 0) { + aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + } else { + aBlock.setBlockBounds(pipeMin, pipeMax, pipeMin, pipeMax, blockMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); + } + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); + if ((aConnections & CONNECTED_NORTH) == 0) { + aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + } else { + aBlock.setBlockBounds(pipeMin, pipeMin, blockMin, pipeMax, pipeMax, pipeMin); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); + } + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); + if ((aConnections & CONNECTED_SOUTH) == 0) { + aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + } else { + aBlock.setBlockBounds(pipeMin, pipeMin, pipeMax, pipeMax, pipeMax, blockMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); + } + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); + } + } + + // Render covers on pipes + if (tIsCovered[SIDE_DOWN]) { + aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, coverInnerMin, blockMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + if (!tIsCovered[SIDE_NORTH]) { + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); + } + if (!tIsCovered[SIDE_SOUTH]) { + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); + } + if (!tIsCovered[SIDE_WEST]) { + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); + } + if (!tIsCovered[SIDE_EAST]) { + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); + } + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); + if ((aConnections & CONNECTED_DOWN) != 0) { + // Split outer face to leave hole for pipe + // Lower panel + aRenderer.setRenderBounds(blockMin, blockMin, blockMin, blockMax, blockMin, pipeMin); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); + // Upper panel + aRenderer.setRenderBounds(blockMin, blockMin, pipeMax, blockMax, blockMin, blockMax); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); + // Middle left panel + aRenderer.setRenderBounds(blockMin, blockMin, pipeMin, pipeMin, blockMin, pipeMax); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); + // Middle right panel + aRenderer.setRenderBounds(pipeMax, blockMin, pipeMin, blockMax, blockMin, pipeMax); + } + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); + } + + if (tIsCovered[SIDE_UP]) { + aBlock.setBlockBounds(blockMin, coverInnerMax, blockMin, blockMax, blockMax, blockMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + if (!tIsCovered[SIDE_NORTH]) { + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); + } + if (!tIsCovered[SIDE_SOUTH]) { + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); + } + if (!tIsCovered[SIDE_WEST]) { + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); + } + if (!tIsCovered[SIDE_EAST]) { + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); + } + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); + if ((aConnections & CONNECTED_UP) != 0) { + // Split outer face to leave hole for pipe + // Lower panel + aRenderer.setRenderBounds(blockMin, blockMax, blockMin, blockMax, blockMax, pipeMin); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); + // Upper panel + aRenderer.setRenderBounds(blockMin, blockMax, pipeMax, blockMax, blockMax, blockMax); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); + // Middle left panel + aRenderer.setRenderBounds(blockMin, blockMax, pipeMin, pipeMin, blockMax, pipeMax); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); + // Middle right panel + aRenderer.setRenderBounds(pipeMax, blockMax, pipeMin, blockMax, blockMax, pipeMax); + } + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); + } + + if (tIsCovered[SIDE_NORTH]) { + aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, coverInnerMin); + aRenderer.setRenderBoundsFromBlock(aBlock); + if (!tIsCovered[SIDE_DOWN]) { + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); + } + if (!tIsCovered[SIDE_UP]) { + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); + } + if (!tIsCovered[SIDE_WEST]) { + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); + } + if (!tIsCovered[SIDE_EAST]) { + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); + } + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); + if ((aConnections & CONNECTED_NORTH) != 0) { + // Split outer face to leave hole for pipe + // Lower panel + aRenderer.setRenderBounds(blockMin, blockMin, blockMin, blockMax, pipeMin, blockMin); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); + // Upper panel + aRenderer.setRenderBounds(blockMin, pipeMax, blockMin, blockMax, blockMax, blockMin); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); + // Middle left panel + aRenderer.setRenderBounds(blockMin, pipeMin, blockMin, pipeMin, pipeMax, blockMin); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); + // Middle right panel + aRenderer.setRenderBounds(pipeMax, pipeMin, blockMin, blockMax, pipeMax, blockMin); + } + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); + } + + if (tIsCovered[SIDE_SOUTH]) { + aBlock.setBlockBounds(blockMin, blockMin, coverInnerMax, blockMax, blockMax, blockMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + if (!tIsCovered[SIDE_DOWN]) { + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); + } + if (!tIsCovered[SIDE_UP]) { + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); + } + if (!tIsCovered[SIDE_WEST]) { + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); + } + if (!tIsCovered[SIDE_EAST]) { + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); + } + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); + if ((aConnections & CONNECTED_SOUTH) != 0) { + // Split outer face to leave hole for pipe + // Lower panel + aRenderer.setRenderBounds(blockMin, blockMin, blockMax, blockMax, pipeMin, blockMax); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); + // Upper panel + aRenderer.setRenderBounds(blockMin, pipeMax, blockMax, blockMax, blockMax, blockMax); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); + // Middle left panel + aRenderer.setRenderBounds(blockMin, pipeMin, blockMax, pipeMin, pipeMax, blockMax); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); + // Middle right panel + aRenderer.setRenderBounds(pipeMax, pipeMin, blockMax, blockMax, pipeMax, blockMax); + } + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); + } + + if (tIsCovered[SIDE_WEST]) { + aBlock.setBlockBounds(blockMin, blockMin, blockMin, coverInnerMin, blockMax, blockMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + if (!tIsCovered[SIDE_DOWN]) { + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); + } + if (!tIsCovered[SIDE_UP]) { + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); + } + if (!tIsCovered[SIDE_NORTH]) { + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); + } + if (!tIsCovered[SIDE_SOUTH]) { + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); + } + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); + if ((aConnections & CONNECTED_WEST) != 0) { + // Split outer face to leave hole for pipe + // Lower panel + aRenderer.setRenderBounds(blockMin, blockMin, blockMin, blockMin, pipeMin, blockMax); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); + // Upper panel + aRenderer.setRenderBounds(blockMin, pipeMax, blockMin, blockMin, blockMax, blockMax); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); + // Middle left panel + aRenderer.setRenderBounds(blockMin, pipeMin, blockMin, blockMin, pipeMax, pipeMin); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); + // Middle right panel + aRenderer.setRenderBounds(blockMin, pipeMin, pipeMax, blockMin, pipeMax, blockMax); + } + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); + } + + if (tIsCovered[SIDE_EAST]) { + aBlock.setBlockBounds(coverInnerMax, blockMin, blockMin, blockMax, blockMax, blockMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + if (!tIsCovered[SIDE_DOWN]) { + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); + } + if (!tIsCovered[SIDE_UP]) { + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); + } + if (!tIsCovered[SIDE_NORTH]) { + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); + } + if (!tIsCovered[SIDE_SOUTH]) { + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); + } + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); + + if ((aConnections & CONNECTED_EAST) != 0) { + // Split outer face to leave hole for pipe + // Lower panel + aRenderer.setRenderBounds(blockMax, blockMin, blockMin, blockMax, pipeMin, blockMax); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); + // Upper panel + aRenderer.setRenderBounds(blockMax, pipeMax, blockMin, blockMax, blockMax, blockMax); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); + // Middle left panel + aRenderer.setRenderBounds(blockMax, pipeMin, blockMin, blockMax, pipeMax, pipeMin); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); + // Middle right panel + aRenderer.setRenderBounds(blockMax, pipeMin, pipeMax, blockMax, pipeMax, blockMax); + } + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); + } + aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + + return true; + } + + @SideOnly(Side.CLIENT) + public static void addHitEffects(EffectRenderer effectRenderer, Block block, World world, int x, int y, int z, + int ordinalSide) { + double rX = x + XSTR.XSTR_INSTANCE.nextDouble() * 0.8 + 0.1; + double rY = y + XSTR.XSTR_INSTANCE.nextDouble() * 0.8 + 0.1; + double rZ = z + XSTR.XSTR_INSTANCE.nextDouble() * 0.8 + 0.1; + if (ordinalSide == 0) { + rY = y - 0.1; + } else if (ordinalSide == 1) { + rY = y + 1.1; + } else if (ordinalSide == 2) { + rZ = z - 0.1; + } else if (ordinalSide == 3) { + rZ = z + 1.1; + } else if (ordinalSide == 4) { + rX = x - 0.1; + } else if (ordinalSide == 5) { + rX = x + 1.1; + } + effectRenderer.addEffect( + (new EntityDiggingFX( + world, + rX, + rY, + rZ, + 0.0, + 0.0, + 0.0, + block, + block.getDamageValue(world, x, y, z), + ordinalSide)).applyColourMultiplier(x, y, z) + .multiplyVelocity(0.2F) + .multipleParticleScaleBy(0.6F)); + } + + @SideOnly(Side.CLIENT) + public static void addDestroyEffects(EffectRenderer effectRenderer, Block block, World world, int x, int y, int z) { + for (int iX = 0; iX < 4; ++iX) { + for (int iY = 0; iY < 4; ++iY) { + for (int iZ = 0; iZ < 4; ++iZ) { + final double bX = x + (iX + 0.5) / 4.0; + final double bY = y + (iY + 0.5) / 4.0; + final double bZ = z + (iZ + 0.5) / 4.0; + effectRenderer.addEffect( + (new EntityDiggingFX( + world, + bX, + bY, + bZ, + bX - x - 0.5, + bY - y - 0.5, + bZ - z - 0.5, + block, + block.getDamageValue(world, x, y, z))).applyColourMultiplier(x, y, z)); + } + } + } + } + + final TileEntityOres tTileEntity = new TileEntityOres(); + + @Override + public void renderInventoryBlock(Block aBlock, int aMeta, int aModelID, RenderBlocks aRenderer) { + aRenderer.enableAO = false; + aRenderer.useInventoryTint = true; + + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + if (aBlock instanceof BlockOresAbstract) { + tTileEntity.mMetaData = ((short) aMeta); + + aBlock.setBlockBoundsForItemRender(); + aRenderer.setRenderBoundsFromBlock(aBlock); + // spotless:off + ITexture[] texture = tTileEntity.getTexture(aBlock); + renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + // spotless:on + } else if (aMeta > 0 && (aMeta < GregTechAPI.METATILEENTITIES.length) + && aBlock instanceof BlockMachines + && (GregTechAPI.METATILEENTITIES[aMeta] != null) + && (!GregTechAPI.METATILEENTITIES[aMeta].renderInInventory(aBlock, aMeta, aRenderer))) { + renderNormalInventoryMetaTileEntity(aBlock, aMeta, aRenderer); + } else if (aBlock instanceof BlockFrameBox) { + ITexture[] texture = ((BlockFrameBox) aBlock).getTexture(aMeta); + aBlock.setBlockBoundsForItemRender(); + aRenderer.setRenderBoundsFromBlock(aBlock); + // spotless:off + renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); + // spotless:on + } + aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); + + aRenderer.setRenderBoundsFromBlock(aBlock); + + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + aRenderer.useInventoryTint = false; + } + + private static void renderNormalInventoryMetaTileEntity(Block aBlock, int aMeta, RenderBlocks aRenderer) { + if ((aMeta <= 0) || (aMeta >= GregTechAPI.METATILEENTITIES.length)) { + return; + } + final IMetaTileEntity tMetaTileEntity = GregTechAPI.METATILEENTITIES[aMeta]; + if (tMetaTileEntity == null) { + return; + } + aBlock.setBlockBoundsForItemRender(); + aRenderer.setRenderBoundsFromBlock(aBlock); + + final IGregTechTileEntity iGregTechTileEntity = tMetaTileEntity.getBaseMetaTileEntity(); + + // spotless:off + if ((iGregTechTileEntity instanceof IPipeRenderedTileEntity renderedPipe) + && (tMetaTileEntity instanceof MetaPipeEntity pipeEntity)) { + final float tThickness = renderedPipe.getThickNess(); + final float pipeMin = (blockMax - tThickness) / 2.0F; + final float pipeMax = blockMax - pipeMin; + + aBlock.setBlockBounds(blockMin, pipeMin, pipeMin, blockMax, pipeMax, pipeMax); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, DOWN, (CONNECTED_WEST | CONNECTED_EAST), -1, false, false), true); + renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, UP, (CONNECTED_WEST | CONNECTED_EAST), -1, false, false), true); + renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, NORTH, (CONNECTED_WEST | CONNECTED_EAST), -1, false, false), true); + renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, SOUTH, (CONNECTED_WEST | CONNECTED_EAST), -1, false, false), true); + renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, WEST, (CONNECTED_WEST | CONNECTED_EAST), -1, true, false), true); + renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, EAST, (CONNECTED_WEST | CONNECTED_EAST), -1, true, false), true); + } else { + renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, DOWN, WEST, -1, true, false), true); + renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, UP, WEST, -1, true, false), true); + renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, NORTH, WEST, -1, true, false), true); + renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, SOUTH, WEST, -1, true, false), true); + renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, WEST, WEST, -1, true, false), true); + renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, EAST, WEST, -1, true, false), true); + } + // spotless:on + } + + public static void renderNegativeYFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY - 1, aZ, 0))) return; + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aFullBlock ? aY - 1 : aY, aZ)); + } + if (aIcon == null) return; + for (final ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderYNeg(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + public static void renderPositiveYFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY + 1, aZ, 1))) return; + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aFullBlock ? aY + 1 : aY, aZ)); + } + if (aIcon == null) return; + for (final ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderYPos(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + public static void renderNegativeZFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY, aZ - 1, 2))) return; + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aY, aFullBlock ? aZ - 1 : aZ)); + } + if (aIcon == null) return; + for (final ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderZNeg(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + public static void renderPositiveZFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY, aZ + 1, 3))) return; + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aY, aFullBlock ? aZ + 1 : aZ)); + } + if (aIcon == null) return; + for (final ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderZPos(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + public static void renderNegativeXFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX - 1, aY, aZ, 4))) return; + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aFullBlock ? aX - 1 : aX, aY, aZ)); + } + if (aIcon == null) return; + for (final ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderXNeg(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + public static void renderPositiveXFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX + 1, aY, aZ, 5))) return; + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aFullBlock ? aX + 1 : aX, aY, aZ)); + } + if (aIcon == null) return; + for (final ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderXPos(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + @Override + public boolean renderWorldBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, int aModelID, + RenderBlocks aRenderer) { + aRenderer.enableAO = Minecraft.isAmbientOcclusionEnabled() && GTMod.gregtechproxy.mRenderTileAmbientOcclusion; + aRenderer.useInventoryTint = false; + + final TileEntity tileEntity = aWorld.getTileEntity(aX, aY, aZ); + + // If this block does not have a TE, render it as a normal block. + // Otherwise, render the TE instead. + if (tileEntity == null && aBlock instanceof BlockFrameBox frameBlock) { + int meta = aWorld.getBlockMetadata(aX, aY, aZ); + ITexture[] texture = frameBlock.getTexture(meta); + if (texture == null) return false; + textureArray[0] = texture; + textureArray[1] = texture; + textureArray[2] = texture; + textureArray[3] = texture; + textureArray[4] = texture; + textureArray[5] = texture; + renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer, textureArray); + return true; + } + + if (tileEntity == null) return false; + + if (tileEntity instanceof IGregTechTileEntity) { + final IMetaTileEntity metaTileEntity; + if ((metaTileEntity = ((IGregTechTileEntity) tileEntity).getMetaTileEntity()) != null + && metaTileEntity.renderInWorld(aWorld, aX, aY, aZ, aBlock, aRenderer)) { + aRenderer.enableAO = false; + return true; + } + } + if (tileEntity instanceof IPipeRenderedTileEntity + && renderPipeBlock(aWorld, aX, aY, aZ, aBlock, (IPipeRenderedTileEntity) tileEntity, aRenderer)) { + aRenderer.enableAO = false; + return true; + } + if (renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer)) { + aRenderer.enableAO = false; + return true; + } + return false; + } + + @Override + public boolean shouldRender3DInInventory(int aModel) { + return true; + } + + @Override + public int getRenderId() { + return this.mRenderID; + } +} diff --git a/src/main/java/gregtech/common/render/GTSidedTextureRender.java b/src/main/java/gregtech/common/render/GTSidedTextureRender.java new file mode 100644 index 0000000000..15885f10ce --- /dev/null +++ b/src/main/java/gregtech/common/render/GTSidedTextureRender.java @@ -0,0 +1,78 @@ +package gregtech.common.render; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; + +import gregtech.api.interfaces.IColorModulationContainer; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.render.TextureFactory; + +public class GTSidedTextureRender extends GTTextureBase implements ITexture, IColorModulationContainer { + + protected final ITexture[] mTextures; + /** + * DO NOT MANIPULATE THE VALUES INSIDE THIS ARRAY!!! + *

+ * Just set this variable to another different Array instead. Otherwise some colored things will get Problems. + */ + private final short[] mRGBa; + + protected GTSidedTextureRender(IIconContainer aIcon0, IIconContainer aIcon1, IIconContainer aIcon2, + IIconContainer aIcon3, IIconContainer aIcon4, IIconContainer aIcon5, short[] aRGBa, boolean aAllowAlpha) { + if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture"); + mTextures = new ITexture[] { TextureFactory.of(aIcon0, aRGBa, aAllowAlpha), + TextureFactory.of(aIcon1, aRGBa, aAllowAlpha), TextureFactory.of(aIcon2, aRGBa, aAllowAlpha), + TextureFactory.of(aIcon3, aRGBa, aAllowAlpha), TextureFactory.of(aIcon4, aRGBa, aAllowAlpha), + TextureFactory.of(aIcon5, aRGBa, aAllowAlpha) }; + mRGBa = aRGBa; + } + + @Override + public boolean isOldTexture() { + return false; + } + + @Override + public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + mTextures[5].renderXPos(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + mTextures[4].renderXNeg(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + mTextures[1].renderYPos(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + mTextures[0].renderYNeg(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + mTextures[3].renderZPos(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { + mTextures[2].renderZNeg(aRenderer, aBlock, aX, aY, aZ); + } + + @Override + public short[] getRGBA() { + return mRGBa; + } + + @Override + public boolean isValidTexture() { + for (ITexture renderedTexture : mTextures) { + if (!renderedTexture.isValidTexture()) return false; + } + return true; + } +} diff --git a/src/main/java/gregtech/common/render/GTTextureBase.java b/src/main/java/gregtech/common/render/GTTextureBase.java new file mode 100644 index 0000000000..08dedf1d6a --- /dev/null +++ b/src/main/java/gregtech/common/render/GTTextureBase.java @@ -0,0 +1,31 @@ +package gregtech.common.render; + +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.util.GTUtilityClient; + +public abstract class GTTextureBase implements ITexture { + + protected boolean isDrawing = false; + + @Override + public void startDrawingQuads(RenderBlocks aRenderer, float aNormalX, float aNormalY, float aNormalZ) { + if (aRenderer.useInventoryTint && (!isOldTexture() || !GTUtilityClient.isDrawing(Tessellator.instance))) { + // Draw if we're not an old texture OR we are an old texture AND we're not already drawing + isDrawing = true; + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(aNormalX, aNormalY, aNormalZ); + } + } + + @Override + public void draw(RenderBlocks aRenderer) { + if (aRenderer.useInventoryTint && (!isOldTexture() || isDrawing)) { + // Draw if we're not an old texture OR we initiated the drawing + isDrawing = false; + Tessellator.instance.draw(); + } + } +} diff --git a/src/main/java/gregtech/common/render/GTTextureBuilder.java b/src/main/java/gregtech/common/render/GTTextureBuilder.java new file mode 100644 index 0000000000..aad734b828 --- /dev/null +++ b/src/main/java/gregtech/common/render/GTTextureBuilder.java @@ -0,0 +1,150 @@ +package gregtech.common.render; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.GTMod; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.ITextureBuilder; + +@SuppressWarnings({ "unused", "ClassWithTooManyFields" }) +public class GTTextureBuilder implements ITextureBuilder { + + private final List iconContainerList; + private final List textureLayers; + private Block fromBlock; + private int fromMeta; + private ForgeDirection fromSide; + private short[] rgba; + private boolean allowAlpha; + private boolean stdOrient; + private boolean extFacing; + private boolean glow; + private Boolean worldCoord = null; + + public GTTextureBuilder() { + textureLayers = new ArrayList<>(); + iconContainerList = new ArrayList<>(); + rgba = Dyes._NULL.mRGBa; + allowAlpha = true; + stdOrient = false; + glow = false; + } + + @Override + public ITextureBuilder setFromBlock(final Block block, final int meta) { + this.fromBlock = block; + this.fromMeta = meta; + this.fromSide = ForgeDirection.UNKNOWN; + return this; + } + + @Override + public ITextureBuilder setFromSide(final ForgeDirection side) { + this.fromSide = side; + return this; + } + + @Override + public ITextureBuilder addIcon(final IIconContainer... iconContainers) { + this.iconContainerList.addAll(Arrays.asList(iconContainers)); + return this; + } + + @Override + public ITextureBuilder setRGBA(final short[] rgba) { + this.rgba = rgba; + return this; + } + + @Override + public ITextureBuilder addLayer(final ITexture... iTextures) { + this.textureLayers.addAll(Arrays.asList(iTextures)); + return this; + } + + @Override + public ITextureBuilder setAllowAlpha(final boolean allowAlpha) { + this.allowAlpha = allowAlpha; + return this; + } + + @Override + public ITextureBuilder stdOrient() { + this.stdOrient = true; + return this; + } + + @Override + public ITextureBuilder useWorldCoord() { + this.worldCoord = true; + return this; + } + + @Override + public ITextureBuilder noWorldCoord() { + this.worldCoord = false; + return this; + } + + @Override + public ITextureBuilder extFacing() { + this.extFacing = true; + return this; + } + + @Override + public ITextureBuilder glow() { + glow = true; + return this; + } + + /** + * @inheritDoc + */ + @Override + public ITexture build() { + if (fromBlock != null) { + if (worldCoord == Boolean.TRUE || worldCoord == null && isCTMBlock(fromBlock, fromMeta)) + return new GTCopiedCTMBlockTexture(fromBlock, fromSide.ordinal(), fromMeta, rgba, allowAlpha); + else return new GTCopiedBlockTextureRender(fromBlock, fromSide.ordinal(), fromMeta, rgba, allowAlpha); + } + if (worldCoord != null) throw new IllegalStateException("worldCoord without from block"); + if (!textureLayers.isEmpty()) return new GTMultiTextureRender(textureLayers.toArray(new ITexture[0])); + return switch (iconContainerList.size()) { + case 1 -> new GTRenderedTexture(iconContainerList.get(0), rgba, allowAlpha, glow, stdOrient, extFacing); + case 6 -> new GTSidedTextureRender( + iconContainerList.get(ForgeDirection.DOWN.ordinal()), + iconContainerList.get(ForgeDirection.UP.ordinal()), + iconContainerList.get(ForgeDirection.NORTH.ordinal()), + iconContainerList.get(ForgeDirection.SOUTH.ordinal()), + iconContainerList.get(ForgeDirection.WEST.ordinal()), + iconContainerList.get(ForgeDirection.EAST.ordinal()), + rgba, + allowAlpha); + default -> throw new IllegalStateException("Invalid sideIconContainer count"); + }; + } + + private boolean isCTMBlock(Block fromBlock, int fromMeta) { + return GTMod.gregtechproxy.mCTMBlockCache.computeIfAbsent(fromBlock, (byte) fromMeta, GTTextureBuilder::apply); + } + + private static Boolean apply(Block b, Byte m) { + Class clazz = b.getClass(); + while (clazz != Block.class) { + final String className = clazz.getName(); + if (GTValues.mCTMDisabledBlock.contains(className)) return false; + if (GTValues.mCTMEnabledBlock.contains(className)) return true; + clazz = clazz.getSuperclass(); + } + return false; + } +} diff --git a/src/main/java/gregtech/common/render/GT_CapeRenderer.java b/src/main/java/gregtech/common/render/GT_CapeRenderer.java deleted file mode 100644 index ec9ef2880c..0000000000 --- a/src/main/java/gregtech/common/render/GT_CapeRenderer.java +++ /dev/null @@ -1,148 +0,0 @@ -package gregtech.common.render; - -import java.util.Collection; - -import net.minecraft.client.entity.AbstractClientPlayer; -import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.entity.RenderPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.util.MathHelper; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.event.RenderPlayerEvent; - -import org.lwjgl.opengl.GL11; - -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; - -public class GT_CapeRenderer extends RenderPlayer { - - private final ResourceLocation[] mCapes = { new ResourceLocation("gregtech:textures/BrainTechCape.png"), - new ResourceLocation("gregtech:textures/GregTechCape.png"), - new ResourceLocation("gregtech:textures/MrBrainCape.png"), - new ResourceLocation("gregtech:textures/GregoriusCape.png"), - new ResourceLocation("gregtech:textures/DonorCape.png"), new ResourceLocation("gregtech:textures/DevCape.png"), - new ResourceLocation("gregtech:textures/Steam.png"), new ResourceLocation("gregtech:textures/Titanium.png"), - new ResourceLocation("gregtech:textures/Neutronium.png"), - new ResourceLocation("gregtech:textures/Stargate.png") }; - private final Collection mCapeList; - - public GT_CapeRenderer(Collection aCapeList) { - this.mCapeList = aCapeList; - setRenderManager(RenderManager.instance); - } - - public void receiveRenderSpecialsEvent(RenderPlayerEvent.Specials.Pre aEvent) { - AbstractClientPlayer aPlayer = (AbstractClientPlayer) aEvent.entityPlayer; - if (GT_Utility.getFullInvisibility(aPlayer)) { - aEvent.setCanceled(true); - return; - } - float aPartialTicks = aEvent.partialRenderTick; - if (aPlayer.isInvisible()) { - return; - } - if (GT_Utility.getPotion(aPlayer, Potion.invisibility.id)) { - return; - } - try { - ResourceLocation tResource = aPlayer.getLocationCape(); - if (aPlayer.getDisplayName() - .equalsIgnoreCase("Friedi4321")) { - tResource = this.mCapes[0]; - } - if (this.mCapeList.contains( - aPlayer.getDisplayName() - .toLowerCase())) { - tResource = this.mCapes[1]; - } - if (aPlayer.getDisplayName() - .equalsIgnoreCase("Mr_Brain")) { - tResource = this.mCapes[2]; - } - if (aPlayer.getDisplayName() - .equalsIgnoreCase("GregoriusT")) { - tResource = this.mCapes[3]; - } - if (this.mCapeList.contains( - aPlayer.getDisplayName() - .toLowerCase() + ":capedonor")) { - tResource = this.mCapes[4]; - } - if (this.mCapeList.contains( - aPlayer.getDisplayName() - .toLowerCase() + ":capedev")) { - tResource = this.mCapes[5]; - } - if (this.mCapeList.contains( - aPlayer.getDisplayName() - .toLowerCase() + ":cape_steam")) { - tResource = this.mCapes[6]; - } - if (this.mCapeList.contains( - aPlayer.getDisplayName() - .toLowerCase() + ":cape_titanium")) { - tResource = this.mCapes[7]; - } - if (this.mCapeList.contains( - aPlayer.getDisplayName() - .toLowerCase() + ":cape_neutronium")) { - tResource = this.mCapes[8]; - } - if (this.mCapeList.contains( - aPlayer.getDisplayName() - .toLowerCase() + ":cape_stargate")) { - tResource = this.mCapes[9]; - } - - if ((tResource != null) && (!aPlayer.getHideCape())) { - bindTexture(tResource); - GL11.glPushMatrix(); - GL11.glTranslatef(0.0F, 0.0F, 0.125F); - double d0 = aPlayer.field_71091_bM + (aPlayer.field_71094_bP - aPlayer.field_71091_bM) * aPartialTicks - - (aPlayer.prevPosX + (aPlayer.posX - aPlayer.prevPosX) * aPartialTicks); - double d1 = aPlayer.field_71096_bN + (aPlayer.field_71095_bQ - aPlayer.field_71096_bN) * aPartialTicks - - (aPlayer.prevPosY + (aPlayer.posY - aPlayer.prevPosY) * aPartialTicks); - double d2 = aPlayer.field_71097_bO + (aPlayer.field_71085_bR - aPlayer.field_71097_bO) * aPartialTicks - - (aPlayer.prevPosZ + (aPlayer.posZ - aPlayer.prevPosZ) * aPartialTicks); - float f6 = aPlayer.prevRenderYawOffset - + (aPlayer.renderYawOffset - aPlayer.prevRenderYawOffset) * aPartialTicks; - double d3 = MathHelper.sin(f6 * (float) Math.PI / 180.0F); - double d4 = -MathHelper.cos(f6 * (float) Math.PI / 180.0F); - float f7 = (float) d1 * 10.0F; - float f8 = (float) (d0 * d3 + d2 * d4) * 100.0F; - float f9 = (float) (d0 * d4 - d2 * d3) * 100.0F; - if (f7 < -6.0F) { - f7 = -6.0F; - } - if (f7 > 32.0F) { - f7 = 32.0F; - } - if (f8 < 0.0F) { - f8 = 0.0F; - } - float f10 = aPlayer.prevCameraYaw + (aPlayer.cameraYaw - aPlayer.prevCameraYaw) * aPartialTicks; - f7 += MathHelper.sin( - (aPlayer.prevDistanceWalkedModified - + (aPlayer.distanceWalkedModified - aPlayer.prevDistanceWalkedModified) * aPartialTicks) * 6.0F) - * 32.0F - * f10; - if (aPlayer.isSneaking()) { - f7 += 25.0F; - } - GL11.glRotatef(6.0F + f8 / 2.0F + f7, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(f9 / 2.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(-f9 / 2.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); - ((ModelBiped) this.mainModel).renderCloak(0.0625F); - GL11.glPopMatrix(); - } - } catch (Throwable e) { - if (GT_Values.D1) { - e.printStackTrace(GT_Log.err); - } - } - } -} diff --git a/src/main/java/gregtech/common/render/GT_CopiedBlockTexture.java b/src/main/java/gregtech/common/render/GT_CopiedBlockTexture.java deleted file mode 100644 index 937c1a994f..0000000000 --- a/src/main/java/gregtech/common/render/GT_CopiedBlockTexture.java +++ /dev/null @@ -1,112 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.util.IIcon; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.IBlockContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.util.LightingHelper; - -public class GT_CopiedBlockTexture extends GT_TextureBase implements ITexture, IBlockContainer { - - private final Block mBlock; - private final byte mSide, mMeta; - - protected GT_CopiedBlockTexture(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa, boolean allowAlpha) { - if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_CopiedBlockTexture"); - mBlock = aBlock; - mSide = (byte) ordinalSide; - mMeta = (byte) aMeta; - } - - @Override - public boolean isOldTexture() { - return false; - } - - private IIcon getIcon(int ordinalSide) { - if (mSide == 6) return mBlock.getIcon(ordinalSide, mMeta); - return mBlock.getIcon(mSide, mMeta); - } - - @Override - public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - final IIcon aIcon = getIcon(ForgeDirection.EAST.ordinal()); - aRenderer.field_152631_f = true; - startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f); - new LightingHelper(aRenderer).setupLightingXPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.EAST, 0xffffff); - aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - aRenderer.field_152631_f = false; - } - - @Override - public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f); - final IIcon aIcon = getIcon(ForgeDirection.WEST.ordinal()); - new LightingHelper(aRenderer).setupLightingXNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.WEST, 0xffffff); - aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - } - - @Override - public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f); - final IIcon aIcon = getIcon(ForgeDirection.UP.ordinal()); - new LightingHelper(aRenderer).setupLightingYPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.UP, 0xffffff); - aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - } - - @Override - public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f); - final IIcon aIcon = getIcon(ForgeDirection.DOWN.ordinal()); - new LightingHelper(aRenderer).setupLightingYNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.DOWN, 0xffffff); - aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - } - - @Override - public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f); - final IIcon aIcon = getIcon(ForgeDirection.SOUTH.ordinal()); - new LightingHelper(aRenderer).setupLightingZPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.SOUTH, 0xffffff); - aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - } - - @Override - public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f); - final IIcon aIcon = getIcon(ForgeDirection.NORTH.ordinal()); - aRenderer.field_152631_f = true; - new LightingHelper(aRenderer).setupLightingZNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.NORTH, 0xffffff); - aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - aRenderer.field_152631_f = false; - } - - @Override - public boolean isValidTexture() { - return mBlock != null; - } - - @Override - public Block getBlock() { - return mBlock; - } - - @Override - public byte getMeta() { - return mMeta; - } -} diff --git a/src/main/java/gregtech/common/render/GT_CopiedCTMBlockTexture.java b/src/main/java/gregtech/common/render/GT_CopiedCTMBlockTexture.java deleted file mode 100644 index 17fa9ac8ff..0000000000 --- a/src/main/java/gregtech/common/render/GT_CopiedCTMBlockTexture.java +++ /dev/null @@ -1,118 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.util.IIcon; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.IBlockContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.util.GT_RenderingWorld; -import gregtech.api.util.LightingHelper; - -class GT_CopiedCTMBlockTexture extends GT_TextureBase implements ITexture, IBlockContainer { - - private final Block mBlock; - private final byte mSide, mMeta; - - GT_CopiedCTMBlockTexture(Block aBlock, int ordinalSide, int aMeta, short[] aRGBa, boolean allowAlpha) { - if (aRGBa.length != 4) - throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_CopiedCTMBlockTexture"); - mBlock = aBlock; - mSide = (byte) ordinalSide; - mMeta = (byte) aMeta; - } - - @Override - public boolean isOldTexture() { - return false; - } - - private IIcon getIcon(int ordinalSide, int aX, int aY, int aZ, RenderBlocks aRenderer) { - final int tSide = mSide == 6 ? ordinalSide : mSide; - return mBlock.getIcon(getBlockAccess(aRenderer), aX, aY, aZ, tSide); - } - - private GT_RenderingWorld getBlockAccess(RenderBlocks aRenderer) { - return GT_RenderingWorld.getInstance(aRenderer.blockAccess); - } - - @Override - public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - final IIcon aIcon = getIcon(ForgeDirection.EAST.ordinal(), aX, aY, aZ, aRenderer); - aRenderer.field_152631_f = true; - startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f); - new LightingHelper(aRenderer).setupLightingXPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.EAST, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); - aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - aRenderer.field_152631_f = false; - } - - @Override - public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f); - final IIcon aIcon = getIcon(ForgeDirection.WEST.ordinal(), aX, aY, aZ, aRenderer); - new LightingHelper(aRenderer).setupLightingXNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.WEST, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); - aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - } - - @Override - public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f); - final IIcon aIcon = getIcon(ForgeDirection.UP.ordinal(), aX, aY, aZ, aRenderer); - new LightingHelper(aRenderer).setupLightingYPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.UP, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); - aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - } - - @Override - public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f); - final IIcon aIcon = getIcon(ForgeDirection.DOWN.ordinal(), aX, aY, aZ, aRenderer); - new LightingHelper(aRenderer).setupLightingYNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.DOWN, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); - aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - } - - @Override - public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f); - final IIcon aIcon = getIcon(ForgeDirection.SOUTH.ordinal(), aX, aY, aZ, aRenderer); - new LightingHelper(aRenderer).setupLightingZPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.SOUTH, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); - aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - } - - @Override - public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f); - final IIcon aIcon = getIcon(ForgeDirection.NORTH.ordinal(), aX, aY, aZ, aRenderer); - aRenderer.field_152631_f = true; - new LightingHelper(aRenderer).setupLightingZNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.NORTH, mBlock.colorMultiplier(getBlockAccess(aRenderer), aX, aY, aZ)); - aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, aIcon); - draw(aRenderer); - aRenderer.field_152631_f = false; - } - - @Override - public boolean isValidTexture() { - return mBlock != null; - } - - @Override - public Block getBlock() { - return mBlock; - } - - @Override - public byte getMeta() { - return mMeta; - } -} diff --git a/src/main/java/gregtech/common/render/GT_FlaskRenderer.java b/src/main/java/gregtech/common/render/GT_FlaskRenderer.java deleted file mode 100644 index addcb1cf70..0000000000 --- a/src/main/java/gregtech/common/render/GT_FlaskRenderer.java +++ /dev/null @@ -1,71 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.client.Minecraft; -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.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.common.items.GT_VolumetricFlask; - -@SideOnly(Side.CLIENT) -public final class GT_FlaskRenderer implements IItemRenderer { - - public GT_FlaskRenderer() { - MinecraftForgeClient.registerItemRenderer(ItemList.VOLUMETRIC_FLASK.getItem(), this); - } - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - return type != ItemRenderType.FIRST_PERSON_MAP; - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return type == ItemRenderType.ENTITY && helper == ItemRendererHelper.ENTITY_BOBBING - || (helper == ItemRendererHelper.ENTITY_ROTATION && Minecraft.getMinecraft().gameSettings.fancyGraphics); - } - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - GT_VolumetricFlask cell = (GT_VolumetricFlask) item.getItem(); - IIcon icon = item.getIconIndex(); - GL11.glEnable(GL11.GL_BLEND); - GL11.glEnable(GL11.GL_ALPHA_TEST); - GT_RenderUtil.applyStandardItemTransform(type); - - FluidStack fs = cell != null ? cell.getFluid(item) : null; - if (fs != null) { - IIcon iconWindow = cell.iconWindow; - Fluid fluid = fs.getFluid(); - IIcon fluidIcon = fluid.getIcon(fs); - int fluidColor = fluid.getColor(fs); - - Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); - GL11.glBlendFunc(GL11.GL_ZERO, GL11.GL_ONE); - GT_RenderUtil.renderItem(type, iconWindow); - - Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glDepthFunc(GL11.GL_EQUAL); - GL11.glColor3ub((byte) (fluidColor >> 16), (byte) (fluidColor >> 8), (byte) fluidColor); - GT_RenderUtil.renderItem(type, fluidIcon); - GL11.glColor3ub((byte) -1, (byte) -1, (byte) -1); - GL11.glDepthFunc(GL11.GL_LEQUAL); - } - - Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GT_RenderUtil.renderItem(type, icon); - GL11.glDisable(GL11.GL_ALPHA_TEST); - GL11.glDisable(GL11.GL_BLEND); - } -} diff --git a/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java b/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java deleted file mode 100644 index 9a35f6bc57..0000000000 --- a/src/main/java/gregtech/common/render/GT_FluidDisplayStackRenderer.java +++ /dev/null @@ -1,98 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.client.MinecraftForgeClient; - -import org.lwjgl.opengl.GL11; - -import appeng.util.ReadableNumberConverter; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.common.items.GT_FluidDisplayItem; - -@SideOnly(Side.CLIENT) -public class GT_FluidDisplayStackRenderer implements IItemRenderer { - - public GT_FluidDisplayStackRenderer() { - MinecraftForgeClient.registerItemRenderer(ItemList.Display_Fluid.getItem(), this); - } - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - if (!item.hasTagCompound()) return false; - return type == ItemRenderType.INVENTORY; - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - // not sure what this does. - return false; - } - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - if (item == null || item.getItem() == null || !(item.getItem() instanceof GT_FluidDisplayItem)) return; - - OpenGlHelper.glBlendFunc(770, 771, 1, 0); - GL11.glEnable(GL11.GL_BLEND); - GL11.glEnable(GL11.GL_ALPHA_TEST); - - Materials associatedFluidMaterial = Materials.get(item.stackTagCompound.getString("mFluidMaterialName")); - if (associatedFluidMaterial.renderer == null - || !associatedFluidMaterial.renderer.renderFluidDisplayItem(type, item, data)) { - IIcon icon = item.getItem() - .getIconFromDamage(item.getItemDamage()); - Tessellator tess = Tessellator.instance; - tess.startDrawingQuads(); - // draw a simple rectangle for the inventory icon - final float x_min = icon.getMinU(); - final float x_max = icon.getMaxU(); - final float y_min = icon.getMinV(); - final float y_max = icon.getMaxV(); - tess.addVertexWithUV(0, 16, 0, x_min, y_max); - tess.addVertexWithUV(16, 16, 0, x_max, y_max); - tess.addVertexWithUV(16, 0, 0, x_max, y_min); - tess.addVertexWithUV(0, 0, 0, x_min, y_min); - tess.draw(); - } - - if (item.getTagCompound() == null) { - GL11.glDisable(GL11.GL_BLEND); - GL11.glDisable(GL11.GL_ALPHA_TEST); - return; - } - - // Render Fluid amount text - long fluidAmount = item.getTagCompound() - .getLong("mFluidDisplayAmount"); - if (fluidAmount > 0L && !item.getTagCompound() - .getBoolean("mHideStackSize")) { - String amountString; - - if (fluidAmount < 10_000) { - amountString = "" + fluidAmount + "L"; - } else { - amountString = ReadableNumberConverter.INSTANCE.toWideReadableForm(fluidAmount) + "L"; - } - - FontRenderer fontRender = Minecraft.getMinecraft().fontRenderer; - float smallTextScale = fontRender.getUnicodeFlag() ? 3F / 4F : 1F / 2F; - GL11.glDisable(GL11.GL_BLEND); - GL11.glPushMatrix(); - GL11.glScalef(smallTextScale, smallTextScale, 1.0f); - - fontRender - .drawString(amountString, 0, (int) (16 / smallTextScale) - fontRender.FONT_HEIGHT + 1, 0xFFFFFF, true); - GL11.glPopMatrix(); - GL11.glDisable(GL11.GL_ALPHA_TEST); - } - } -} diff --git a/src/main/java/gregtech/common/render/GT_IconFlipped.java b/src/main/java/gregtech/common/render/GT_IconFlipped.java deleted file mode 100644 index 8258e74ffa..0000000000 --- a/src/main/java/gregtech/common/render/GT_IconFlipped.java +++ /dev/null @@ -1,91 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; - -@SideOnly(Side.CLIENT) -public class GT_IconFlipped implements IIcon { - - private final IIcon baseIcon; - private final boolean flipU; - private final boolean flipV; - - public GT_IconFlipped(IIcon baseIcon, boolean flipU, boolean flipV) { - this.baseIcon = baseIcon; - this.flipU = flipU; - this.flipV = flipV; - } - - /** - * Returns the width of the icon, in pixels. - */ - @Override - public int getIconWidth() { - return this.baseIcon.getIconWidth(); - } - - /** - * Returns the height of the icon, in pixels. - */ - @Override - public int getIconHeight() { - return this.baseIcon.getIconHeight(); - } - - /** - * Returns the minimum U coordinate to use when rendering with this icon. - */ - @Override - public float getMinU() { - return this.flipU ? this.baseIcon.getMaxU() : this.baseIcon.getMinU(); - } - - /** - * Returns the maximum U coordinate to use when rendering with this icon. - */ - @Override - public float getMaxU() { - return this.flipU ? this.baseIcon.getMinU() : this.baseIcon.getMaxU(); - } - - /** - * Gets a U coordinate on the icon. 0 returns uMin and 16 returns uMax. Other arguments return in-between values. - */ - @Override - public float getInterpolatedU(double p_94214_1_) { - final float f = this.getMaxU() - this.getMinU(); - return this.getMinU() + f * ((float) p_94214_1_ / 16.0F); - } - - /** - * Returns the minimum V coordinate to use when rendering with this icon. - */ - @Override - public float getMinV() { - return this.flipV ? this.baseIcon.getMaxV() : this.baseIcon.getMinV(); - } - - /** - * Returns the maximum V coordinate to use when rendering with this icon. - */ - @Override - public float getMaxV() { - return this.flipV ? this.baseIcon.getMinV() : this.baseIcon.getMaxV(); - } - - /** - * Gets a V coordinate on the icon. 0 returns vMin and 16 returns vMax. Other arguments return in-between values. - */ - @Override - public float getInterpolatedV(double p_94207_1_) { - final float f = this.getMaxV() - this.getMinV(); - return this.getMinV() + f * ((float) p_94207_1_ / 16.0F); - } - - @Override - public String getIconName() { - return this.baseIcon.getIconName(); - } -} diff --git a/src/main/java/gregtech/common/render/GT_LaserRenderer.java b/src/main/java/gregtech/common/render/GT_LaserRenderer.java deleted file mode 100644 index 1c54a5d58b..0000000000 --- a/src/main/java/gregtech/common/render/GT_LaserRenderer.java +++ /dev/null @@ -1,90 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.registry.ClientRegistry; -import gregtech.common.tileentities.render.TileLaser; - -public class GT_LaserRenderer extends TileEntitySpecialRenderer { - - private double zOffset = 0.0; - private double xOffset = 0.0; - - // Relative to block size - final private double lineRadius = 0.03; - - final private float lineOpacity = 0.7F; - - final private float laserSpeed = 0.8F; - - public GT_LaserRenderer() { - ClientRegistry.bindTileEntitySpecialRenderer(TileLaser.class, this); - } - - private void maths(float counter) { - float tc = (0.05F * counter); - zOffset = 0.5 + 0.45 * Math.sin(2 * Math.PI * tc); - xOffset = 0.5 + 0.45 * Math.sin(0.5 * Math.PI * tc); - } - - private void renderFakeLine(TileLaser laser, double x1, double y1, double z1, double x2, double y2, double z2) { - Tessellator tessellator = Tessellator.instance; - tessellator.startDrawingQuads(); - tessellator.setColorRGBA_F(laser.getRed(), laser.getGreen(), laser.getBlue(), lineOpacity); - tessellator.addVertex(x1 - lineRadius, y1, z1); - tessellator.addVertex(x1 + lineRadius, y1, z1); - tessellator.addVertex(x2 + lineRadius, y2, z2); - tessellator.addVertex(x2 - lineRadius, y2, z2); - - tessellator.addVertex(x1, y1, z1 - lineRadius); - tessellator.addVertex(x1, y1, z1 + lineRadius); - tessellator.addVertex(x2, y2, z2 + lineRadius); - tessellator.addVertex(x2, y2, z2 - lineRadius); - tessellator.draw(); - } - - @Override - public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { - final TileLaser ltile = (TileLaser) tile; - - if (ltile.getShouldRender()) { - // Push GL state - GL11.glPushMatrix(); - GL11.glPushAttrib(GL11.GL_ENABLE_BIT); - - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glDisable(GL11.GL_TEXTURE_2D); - GL11.glEnable(GL11.GL_BLEND); - - // Full brightness on this thing (Emits glow with shaders) - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.f, 240.f); - - GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - GL11.glRotated(ltile.rotationAngle, ltile.rotAxisX, ltile.rotAxisY, ltile.rotAxisZ); - GL11.glTranslated(-x - 0.5, -y - 0.5, -z - 0.5); - - if (ltile.realism) { - renderFakeLine(ltile, x + xOffset, y + 4.0, z + zOffset, x + xOffset, y + 0.5, z + zOffset); - } else { - renderFakeLine(ltile, x + 0.5, y + 4.0, z + 0.5, x + xOffset, y + 0.5, z + zOffset); - } - - // Pop GL state - GL11.glPopAttrib(); - GL11.glPopMatrix(); - - // Movement calculations - maths(ltile.counter); - ltile.counter += laserSpeed; - if (ltile.counter >= 80) { - ltile.counter = 0; - } - } - } -} diff --git a/src/main/java/gregtech/common/render/GT_MetaGenerated_Tool_Renderer.java b/src/main/java/gregtech/common/render/GT_MetaGenerated_Tool_Renderer.java deleted file mode 100644 index 96285a3fc1..0000000000 --- a/src/main/java/gregtech/common/render/GT_MetaGenerated_Tool_Renderer.java +++ /dev/null @@ -1,130 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.client.Minecraft; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.client.MinecraftForgeClient; - -import org.lwjgl.opengl.GL11; - -import gregtech.GT_Mod; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.IToolStats; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public class GT_MetaGenerated_Tool_Renderer implements IItemRenderer { - - public GT_MetaGenerated_Tool_Renderer() { - for (GT_MetaGenerated_Tool tItem : GT_MetaGenerated_Tool.sInstances.values()) { - if (tItem != null) { - MinecraftForgeClient.registerItemRenderer(tItem, this); - } - } - } - - @Override - public boolean handleRenderType(ItemStack stack, ItemRenderType type) { - return (type == ItemRenderType.EQUIPPED_FIRST_PERSON) || (type == ItemRenderType.INVENTORY) - || (type == ItemRenderType.EQUIPPED) - || (type == ItemRenderType.ENTITY); - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack stack, ItemRendererHelper helper) { - return type == ItemRenderType.ENTITY && helper == ItemRendererHelper.ENTITY_BOBBING - || (helper == ItemRendererHelper.ENTITY_ROTATION && Minecraft.getMinecraft().gameSettings.fancyGraphics); - } - - @Override - public void renderItem(ItemRenderType type, ItemStack stack, Object... data) { - GT_MetaGenerated_Tool item = (GT_MetaGenerated_Tool) stack.getItem(); - GL11.glEnable(GL11.GL_BLEND); - GT_RenderUtil.applyStandardItemTransform(type); - GL11.glColor3f(1.0F, 1.0F, 1.0F); - - IToolStats toolStats = item != null ? item.getToolStats(stack) : null; - if (toolStats != null) { - renderToolPart(type, stack, toolStats, false); - renderToolPart(type, stack, toolStats, true); - - if ((type == ItemRenderType.INVENTORY) - && (GT_MetaGenerated_Tool.getPrimaryMaterial(stack) != Materials._NULL)) { - if (GT_Mod.gregtechproxy.mRenderItemDurabilityBar) { - IIconContainer iconContainer; - long damage = GT_MetaGenerated_Tool.getToolDamage(stack); - long maxDamage = GT_MetaGenerated_Tool.getToolMaxDamage(stack); - if (damage <= 0L) { - iconContainer = Textures.ItemIcons.DURABILITY_BAR[8]; - } else if (damage >= maxDamage) { - iconContainer = Textures.ItemIcons.DURABILITY_BAR[0]; - } else { - iconContainer = Textures.ItemIcons.DURABILITY_BAR[((int) Math - .max(0L, Math.min(7L, (maxDamage - damage) * 8L / maxDamage)))]; - } - renderIcon(iconContainer); - } - - if (GT_Mod.gregtechproxy.mRenderItemChargeBar) { - IIconContainer iconContainer; - Long[] stats = item.getElectricStats(stack); - if ((stats != null) && (stats[3] < 0L)) { - long tCharge = item.getRealCharge(stack); - if (tCharge <= 0L) { - iconContainer = Textures.ItemIcons.ENERGY_BAR[0]; - } else if (tCharge >= stats[0]) { - iconContainer = Textures.ItemIcons.ENERGY_BAR[8]; - } else { - iconContainer = Textures.ItemIcons.ENERGY_BAR[(7 - - (int) Math.max(0L, Math.min(6L, (stats[0] - tCharge) * 7L / stats[0])))]; - } - } else { - iconContainer = null; - } - renderIcon(iconContainer); - } - } - } - GL11.glDisable(GL11.GL_BLEND); - } - - private void renderIcon(IIconContainer iconContainer) { - if (iconContainer != null) { - IIcon icon = iconContainer.getIcon(); - IIcon overlay = iconContainer.getOverlayIcon(); - if (icon != null) { - Minecraft.getMinecraft().renderEngine.bindTexture(iconContainer.getTextureFile()); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GT_RenderUtil.renderItemIcon(icon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); - } - if (overlay != null) { - Minecraft.getMinecraft().renderEngine.bindTexture(iconContainer.getTextureFile()); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GT_RenderUtil.renderItemIcon(overlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); - } - } - } - - private static void renderToolPart(ItemRenderType type, ItemStack stack, IToolStats toolStats, boolean isToolHead) { - IIconContainer iconContainer = toolStats.getIcon(isToolHead, stack); - if (iconContainer != null) { - IIcon icon = iconContainer.getIcon(); - IIcon overlay = iconContainer.getOverlayIcon(); - if (icon != null) { - Minecraft.getMinecraft().renderEngine.bindTexture(iconContainer.getTextureFile()); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - short[] modulation = toolStats.getRGBa(isToolHead, stack); - GL11.glColor3f(modulation[0] / 255.0F, modulation[1] / 255.0F, modulation[2] / 255.0F); - GT_RenderUtil.renderItem(type, icon); - GL11.glColor3f(1.0F, 1.0F, 1.0F); - } - if (overlay != null) { - Minecraft.getMinecraft().renderEngine.bindTexture(iconContainer.getTextureFile()); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GT_RenderUtil.renderItem(type, overlay); - } - } - } -} diff --git a/src/main/java/gregtech/common/render/GT_MultiTexture.java b/src/main/java/gregtech/common/render/GT_MultiTexture.java deleted file mode 100644 index d3cff271cb..0000000000 --- a/src/main/java/gregtech/common/render/GT_MultiTexture.java +++ /dev/null @@ -1,69 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; - -import gregtech.GT_Mod; -import gregtech.api.interfaces.ITexture; - -/** - *

- * Lets Multiple ITextures Render overlay over each other.< - *

- *

- * I should have done this much earlier... - *

- */ -public class GT_MultiTexture extends GT_TextureBase implements ITexture { - - protected final ITexture[] mTextures; - - public static GT_MultiTexture get(ITexture... aTextures) { - return GT_Mod.instance.isClientSide() ? new GT_MultiTexture(aTextures) : null; - } - - protected GT_MultiTexture(ITexture... aTextures) { - mTextures = aTextures; - } - - @Override - public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - for (ITexture tTexture : mTextures) - if (tTexture != null && tTexture.isValidTexture()) tTexture.renderXPos(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - for (ITexture tTexture : mTextures) - if (tTexture != null && tTexture.isValidTexture()) tTexture.renderXNeg(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - for (ITexture tTexture : mTextures) - if (tTexture != null && tTexture.isValidTexture()) tTexture.renderYPos(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - for (ITexture tTexture : mTextures) - if (tTexture != null && tTexture.isValidTexture()) tTexture.renderYNeg(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - for (ITexture tTexture : mTextures) - if (tTexture != null && tTexture.isValidTexture()) tTexture.renderZPos(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - for (ITexture tTexture : mTextures) - if (tTexture != null && tTexture.isValidTexture()) tTexture.renderZNeg(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public boolean isValidTexture() { - return true; - } -} diff --git a/src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java b/src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java deleted file mode 100644 index c8c1d832b0..0000000000 --- a/src/main/java/gregtech/common/render/GT_MultiTile_Renderer.java +++ /dev/null @@ -1,179 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; -import gregtech.GT_Mod; -import gregtech.api.interfaces.ITexture; -import gregtech.api.logic.ModelRenderLogic; -import gregtech.api.logic.interfaces.ModelRenderLogicHost; -import gregtech.api.multitileentity.MultiTileEntityBlock; -import gregtech.api.multitileentity.MultiTileEntityClassContainer; -import gregtech.api.multitileentity.MultiTileEntityRegistry; -import gregtech.api.multitileentity.interfaces.IMultiBlockController; -import gregtech.api.multitileentity.multiblock.base.MultiBlockPart; - -public class GT_MultiTile_Renderer implements ISimpleBlockRenderingHandler { - - private final int renderID; - public static GT_MultiTile_Renderer INSTANCE; - - public GT_MultiTile_Renderer() { - this.renderID = RenderingRegistry.getNextAvailableRenderId(); - INSTANCE = this; - RenderingRegistry.registerBlockHandler(this); - } - - @Override - public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { - if (!(block instanceof MultiTileEntityBlock muteBlock)) { - return; - } - - GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - - final MultiTileEntityRegistry registry = muteBlock.getRegistry(); - if (registry == null) return; - final MultiTileEntityClassContainer classContainer = registry.getClassContainer(metadata); - if (classContainer == null) return; - renderer.setRenderBoundsFromBlock(muteBlock); - - for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - final ITexture texture = classContainer.getReferenceTileEntity() - .getTexture(side); - if (texture == null) continue; - switch (side) { - case DOWN -> renderYNegative(null, renderer, 0, 0, 0, block, texture, side); - case UP -> renderYPositive(null, renderer, 0, 0, 0, block, texture, side); - case WEST -> renderXNegative(null, renderer, 0, 0, 0, block, texture, side); - case EAST -> renderXPositive(null, renderer, 0, 0, 0, block, texture, side); - case NORTH -> renderZNegative(null, renderer, 0, 0, 0, block, texture, side); - case SOUTH -> renderZPositive(null, renderer, 0, 0, 0, block, texture, side); - default -> { - // Do nothing - } - } - } - - GL11.glTranslatef(0.5F, 0.5F, 0.5F); - } - - @Override - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, - RenderBlocks renderer) { - final TileEntity entity = world.getTileEntity(x, y, z); - if (entity == null) { - return false; - } - - renderer.enableAO = Minecraft.isAmbientOcclusionEnabled() && GT_Mod.gregtechproxy.mRenderTileAmbientOcclusion; - renderer.useInventoryTint = false; - - if (entity instanceof ModelRenderLogicHost modelEntity && modelEntity.shouldRenderModel()) { - ModelRenderLogic renderLogic = modelEntity.getRenderLogic(); - return true; - } - - if (!(entity instanceof MultiTileBasicRender renderedEntity)) { - return false; - } - - if (entity instanceof MultiBlockPart) { - final IMultiBlockController controller = ((MultiBlockPart) entity).getTarget(false); - if (controller instanceof ModelRenderLogicHost && ((ModelRenderLogicHost) controller).shouldRenderModel()) { - return false; - } - } - - for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - final ITexture texture = renderedEntity.getTexture(side); - if (texture == null) continue; - switch (side) { - case DOWN -> renderYNegative(world, renderer, x, y, z, block, texture, side); - case UP -> renderYPositive(world, renderer, x, y, z, block, texture, side); - case WEST -> renderXNegative(world, renderer, x, y, z, block, texture, side); - case EAST -> renderXPositive(world, renderer, x, y, z, block, texture, side); - case NORTH -> renderZNegative(world, renderer, x, y, z, block, texture, side); - case SOUTH -> renderZPositive(world, renderer, x, y, z, block, texture, side); - default -> { - // Do nothing - } - } - } - return true; - } - - @Override - public boolean shouldRender3DInInventory(int modelId) { - return true; - } - - @Override - public int getRenderId() { - return renderID; - } - - private static void renderYNegative(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, - ITexture texture, ForgeDirection side) { - if (world != null) { - if (!block.shouldSideBeRendered(world, x, y - 1, z, side.ordinal())) return; - Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y - 1, z)); - } - texture.renderYNeg(renderer, block, x, y, z); - } - - private static void renderZNegative(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, - ITexture texture, ForgeDirection side) { - if (world != null) { - if (!block.shouldSideBeRendered(world, x, y, z - 1, side.ordinal())) return; - Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z - 1)); - } - texture.renderZNeg(renderer, block, x, y, z); - } - - private static void renderXNegative(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, - ITexture texture, ForgeDirection side) { - if (world != null) { - if (!block.shouldSideBeRendered(world, x - 1, y, z, side.ordinal())) return; - Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x - 1, y, z)); - } - texture.renderXNeg(renderer, block, x, y, z); - } - - private static void renderYPositive(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, - ITexture texture, ForgeDirection side) { - if (world != null) { - if (!block.shouldSideBeRendered(world, x, y + 1, z, side.ordinal())) return; - Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y + 1, z)); - } - texture.renderYPos(renderer, block, x, y, z); - } - - private static void renderXPositive(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, - ITexture texture, ForgeDirection side) { - if (world != null) { - if (!block.shouldSideBeRendered(world, x + 1, y, z, side.ordinal())) return; - Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x + 1, y, z)); - } - texture.renderXPos(renderer, block, x, y, z); - } - - private static void renderZPositive(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, - ITexture texture, ForgeDirection side) { - if (world != null) { - if (!block.shouldSideBeRendered(world, x, y, z + 1, side.ordinal())) return; - Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z + 1)); - } - texture.renderZPos(renderer, block, x, y, z); - } -} diff --git a/src/main/java/gregtech/common/render/GT_PollutionRenderer.java b/src/main/java/gregtech/common/render/GT_PollutionRenderer.java deleted file mode 100644 index 476305f1b3..0000000000 --- a/src/main/java/gregtech/common/render/GT_PollutionRenderer.java +++ /dev/null @@ -1,251 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityClientPlayerMP; -import net.minecraft.client.particle.EntityFX; -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.potion.Potion; -import net.minecraft.util.MathHelper; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.World; -import net.minecraftforge.client.event.EntityViewRenderEvent; -import net.minecraftforge.event.world.WorldEvent; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.eventhandler.EventPriority; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.common.gameevent.TickEvent; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.common.entities.GT_EntityFXPollution; -import gregtech.common.misc.GT_ClientPollutionMap; - -@SideOnly(Side.CLIENT) -public class GT_PollutionRenderer { - - private static GT_ClientPollutionMap pollutionMap; - private static int playerPollution = 0; - - private static final boolean DEBUG = false; - - // PARTICLES_POLLUTION_START + PARTICLES_POLLUTION_END -> Max Particles - private static final int PARTICLES_MAX_NUM = 100; - private static final int PARTICLES_POLLUTION_START = 400000; - private static final int PARTICLES_POLLUTION_END = 3500000; - - private static final int FOG_START_AT_POLLUTION = 400000; - private static final int FOG_MAX_AT_POLLUTION = 7000000; - // jump from linear to exponential fog. x*FOG_MAX_AT_POLLUTION+FOG_START_AT_POLLUTION - private static final double FOG_START_EXP_RATIO = 0.02D; - - private static final float[] fogColor = { 0.3f, 0.25f, 0.1f }; - private static final short[] grassColor = { 230, 180, 40 }; - private static final short[] leavesColor = { 160, 80, 15 }; - private static final short[] liquidColor = { 160, 200, 10 }; - private static final short[] foliageColor = { 160, 80, 15 }; - - // TODO need to soft update some blocks, grass and leaves does more often than liquid it looks like. - - public GT_PollutionRenderer() { - pollutionMap = new GT_ClientPollutionMap(); - } - - public void preLoad() { - net.minecraftforge.common.MinecraftForge.EVENT_BUS.register(this); - FMLCommonHandler.instance() - .bus() - .register(this); - } - - public void processPacket(ChunkCoordIntPair chunk, int pollution) { - pollutionMap.addChunkPollution(chunk.chunkXPos, chunk.chunkZPos, pollution); - } - - @SubscribeEvent(priority = EventPriority.HIGH) - public void enteredWorld(WorldEvent.Load event) { - EntityClientPlayerMP p = Minecraft.getMinecraft().thePlayer; - if (!event.world.isRemote || p == null) return; - pollutionMap.reset(); - } - - private static int color(int color, int pollution, int low, float high, short[] colors) { - if (pollution < low) return color; - - int r = (color >> 16) & 0xFF; - int g = (color >> 8) & 0xFF; - int b = color & 0xFF; - float p = (pollution - low) / high; - if (p > 1) p = 1; - float pi = 1 - p; - - r = ((int) (r * pi + p * colors[0])) & 0xFF; - g = ((int) (g * pi + p * colors[1])) & 0xFF; - b = ((int) (b * pi + p * colors[2])) & 0xFF; - - return (r & 0xFF) << 16 | (g & 0xFF) << 8 | b & 0xFF; - } - - // Methods for hodgepodge to color grass / foliage blocks etc. - public static int colorGrass(int oColor, int x, int z) { - return color(oColor, pollutionMap.getPollution(x, z) / 1000, 350, 600, grassColor); - } - - public static int colorLeaves(int oColor, int x, int z) { - return color(oColor, pollutionMap.getPollution(x, z) / 1000, 300, 500, leavesColor); - } - - public static int colorLiquid(int oColor, int x, int z) { - return color(oColor, pollutionMap.getPollution(x, z) / 1000, 300, 500, liquidColor); - } - - public static int colorFoliage(int oColor, int x, int z) { - return color(oColor, pollutionMap.getPollution(x, z) / 1000, 300, 500, foliageColor); - } - - public static int getKnownPollution(int x, int z) { - return pollutionMap.getPollution(x, z); - } - - @SubscribeEvent(priority = EventPriority.LOW) - public void manipulateColor(EntityViewRenderEvent.FogColors event) { - if (!DEBUG && Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode) return; - - if (event.block.getMaterial() == Material.water || event.block.getMaterial() == Material.lava) return; - - float x = fogIntensityLastTick > 1 ? 1F : (float) fogIntensityLastTick; - float xi = 1 - x; - - event.red = xi * event.red + x * fogColor[0]; - event.green = xi * event.green + x * fogColor[1]; - event.blue = xi * event.blue + x * fogColor[2]; - } - - private static final int END_MAX_DISTANCE = 192 - 1; - private static double fogIntensityLastTick = 0; - - @SubscribeEvent(priority = EventPriority.LOWEST) - public void renderGTPollutionFog(EntityViewRenderEvent.RenderFogEvent event) { - if (!GT_Mod.gregtechproxy.mRenderPollutionFog) return; - - if ((!DEBUG && Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode) - || (fogIntensityLastTick < FOG_START_EXP_RATIO)) return; - - if (event.fogMode == 0) { - double v = 1 - fogIntensityLastTick / FOG_START_EXP_RATIO; - // trying to smooth out jump from linear to exponential - GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR); - GL11.glFogf(GL11.GL_FOG_START, (float) ((END_MAX_DISTANCE - 20) * 0.75F * v + 20)); - GL11.glFogf(GL11.GL_FOG_END, (float) (END_MAX_DISTANCE * (0.75F + v * 0.25F))); - } - // else if ( event.fogMode < 0) { } - } - - @SubscribeEvent(priority = EventPriority.LOWEST) - public void renderGTPollutionFog(EntityViewRenderEvent.FogDensity event) { - if (!GT_Mod.gregtechproxy.mRenderPollutionFog) return; - - if (!DEBUG && Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode) return; - - if (event.entity.isPotionActive(Potion.blindness) || (fogIntensityLastTick < FOG_START_EXP_RATIO) - || event.block.getMaterial() == Material.water - || event.block.getMaterial() == Material.lava) return; - - GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP2); - event.density = (float) Math.pow(fogIntensityLastTick - FOG_START_EXP_RATIO, .75F) / 5 + 0.01F; - event.setCanceled(true); - } - - private double lastUpdate = 0; - - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onRenderTick(TickEvent.RenderTickEvent event) { - Minecraft mc = Minecraft.getMinecraft(); - if (mc == null) return; - EntityClientPlayerMP player = mc.thePlayer; - if (player == null) return; - - if (event.phase == TickEvent.Phase.START) { - if (event.renderTickTime < lastUpdate) lastUpdate = lastUpdate - 1; - float step = (float) ((event.renderTickTime - lastUpdate) / 50); - lastUpdate = event.renderTickTime; - - float fogIntensity = (playerPollution - FOG_START_AT_POLLUTION) / (float) FOG_MAX_AT_POLLUTION; - if (fogIntensity > 1) fogIntensity = 1; - else if (fogIntensity < 0) fogIntensity = 0; - - double e = fogIntensity - fogIntensityLastTick; - if (e != 0) { - if (e > 0.2) e = 0.2D; - else if (e < -0.5) e = -0.5D; - - if (e > 0.001D || e < -0.001D) fogIntensityLastTick += step * e; - else fogIntensityLastTick = fogIntensity; - } - } else if (DEBUG) { - drawPollution("Intensity: " + (fogIntensityLastTick * 10000), 0); - drawPollution( - "Pollution: " + pollutionMap.getPollution( - Minecraft.getMinecraft().thePlayer.lastTickPosX, - Minecraft.getMinecraft().thePlayer.lastTickPosZ), - 20); - drawPollution( - "Density: " - + ((float) (Math.pow(fogIntensityLastTick - FOG_START_EXP_RATIO, .75F) / 5 + 0.01F) * 10000), - 40); - } - } - - // Adding dirt particles in the air - @SubscribeEvent(priority = EventPriority.HIGHEST) - public void onClientTick(TickEvent.ClientTickEvent event) { - if (!GT_Mod.gregtechproxy.mRenderDirtParticles) return; - Minecraft mc = Minecraft.getMinecraft(); - if (mc == null) return; - EntityClientPlayerMP player = mc.thePlayer; - if (player == null || (player.capabilities.isCreativeMode && !DEBUG)) return; - - World w = player.worldObj; - playerPollution = pollutionMap.getPollution(player.lastTickPosX, player.lastTickPosZ); - - float intensity = ((float) playerPollution - PARTICLES_POLLUTION_START) / PARTICLES_POLLUTION_END; - if (intensity < 0) return; - else if (intensity > 1) intensity = 1; - else intensity *= intensity; - - int x = MathHelper.floor_double(player.posX); - int y = MathHelper.floor_double(player.posY); - int z = MathHelper.floor_double(player.posZ); - - int numParticles = Math.round(intensity * PARTICLES_MAX_NUM); - - for (int l = 0; l < numParticles; ++l) { - int i1 = x + w.rand.nextInt(16) - w.rand.nextInt(16); - int j1 = y + w.rand.nextInt(16) - w.rand.nextInt(16); - int k1 = z + w.rand.nextInt(16) - w.rand.nextInt(16); - Block block = w.getBlock(i1, j1, k1); - - if (block.getMaterial() == Material.air) { - EntityFX fx = new GT_EntityFXPollution( - w, - (float) i1 + w.rand.nextFloat(), - (float) j1 + w.rand.nextFloat(), - (float) k1 + w.rand.nextFloat()); - mc.effectRenderer.addEffect(fx); - } - } - } - - private void drawPollution(String text, int off) { - GL11.glPushMatrix(); - GL11.glEnable(GL11.GL_BLEND); - OpenGlHelper.glBlendFunc(770, 771, 1, 0); - Minecraft.getMinecraft().fontRenderer.drawStringWithShadow(text, 0, off, 0xFFFFFFFF); - GL11.glDisable(GL11.GL_BLEND); - GL11.glPopMatrix(); - } -} diff --git a/src/main/java/gregtech/common/render/GT_RenderDrone.java b/src/main/java/gregtech/common/render/GT_RenderDrone.java deleted file mode 100644 index af1336a219..0000000000 --- a/src/main/java/gregtech/common/render/GT_RenderDrone.java +++ /dev/null @@ -1,93 +0,0 @@ -package gregtech.common.render; - -import static gregtech.api.enums.Mods.GregTech; - -import net.minecraft.client.renderer.OpenGlHelper; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.model.AdvancedModelLoader; -import net.minecraftforge.client.model.IModelCustom; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.registry.ClientRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.common.tileentities.render.TileDrone; - -@SideOnly(Side.CLIENT) -public class GT_RenderDrone extends TileEntitySpecialRenderer { - - private static final ResourceLocation DroneTexture = new ResourceLocation(GregTech.ID, "textures/model/drone.png"); - private static final IModelCustom Drone = AdvancedModelLoader - .loadModel(new ResourceLocation(GregTech.ID, "textures/model/drone.obj")); - - public GT_RenderDrone() { - ClientRegistry.bindTileEntitySpecialRenderer(TileDrone.class, this); - } - - @Override - public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { - if (!(tile instanceof TileDrone drone)) return; - final float size = 1.0f; - GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - renderDrone(size); - renderBlade(drone, size); - GL11.glPopMatrix(); - } - - private void renderDrone(double size) { - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - this.bindTexture(DroneTexture); - GL11.glScaled(size, size, size); - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f); - Drone.renderOnly("drone", "box", "main"); - GL11.glDisable(GL11.GL_BLEND); - GL11.glDepthMask(true); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_LIGHTING); - } - - private void renderBlade(TileDrone drone, double size) { - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - this.bindTexture(DroneTexture); - GL11.glScaled(size, size, size); - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f); - GL11.glPushMatrix(); - GL11.glTranslated(-0.7d * size, -1 * size, -0.7 * size); - GL11.glRotated(drone.rotation, 0, 1, 0); - GL11.glTranslated(0.7d * size, 1 * size, 0.7 * size); - Drone.renderOnly("blade2"); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - GL11.glTranslated(-0.7d * size, -1 * size, 0.7 * size); - GL11.glRotated(drone.rotation, 0, 1, 0); - GL11.glTranslated(0.7d * size, 1 * size, -0.7 * size); - Drone.renderOnly("blade3"); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - GL11.glTranslated(0.7d * size, -1 * size, -0.7 * size); - GL11.glRotated(drone.rotation, 0, 1, 0); - GL11.glTranslated(-0.7d * size, 1 * size, 0.7 * size); - Drone.renderOnly("blade1"); - GL11.glPopMatrix(); - GL11.glPushMatrix(); - GL11.glTranslated(0.7d * size, -1 * size, 0.7 * size); - GL11.glRotated(drone.rotation, 0, 1, 0); - GL11.glTranslated(-0.7d * size, 1 * size, -0.7 * size); - Drone.renderOnly("blade4"); - GL11.glPopMatrix(); - GL11.glDisable(GL11.GL_BLEND); - GL11.glDepthMask(true); - GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glEnable(GL11.GL_LIGHTING); - } -} diff --git a/src/main/java/gregtech/common/render/GT_RenderUtil.java b/src/main/java/gregtech/common/render/GT_RenderUtil.java deleted file mode 100644 index 68195513fe..0000000000 --- a/src/main/java/gregtech/common/render/GT_RenderUtil.java +++ /dev/null @@ -1,141 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.common.util.ForgeDirection; - -import org.lwjgl.opengl.GL11; - -import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; - -public class GT_RenderUtil { - - public static void colorGTItem(ItemStack aStack) { - if (aStack.getItem() instanceof IGT_ItemWithMaterialRenderer aItem) { - - short[] tModulation = aItem.getRGBa(aStack); - GL11.glColor4f(tModulation[0] / 255.0F, tModulation[1] / 255.0F, tModulation[2] / 255.0F, 255.0f); - } else { - System.out.println("WARNING: " + aStack.getDisplayName() + " does not have an associated GT colour."); - } - } - - public static void renderBlockIcon(RenderBlocks aRenderer, Block aBlock, double aX, double aY, double aZ, - IIcon aIcon, ForgeDirection side) { - switch (side) { - case DOWN -> aRenderer.renderFaceYNeg(aBlock, aX, aY, aZ, aIcon); - case UP -> aRenderer.renderFaceYPos(aBlock, aX, aY, aZ, aIcon); - case NORTH -> aRenderer.renderFaceZNeg(aBlock, aX, aY, aZ, aIcon); - case SOUTH -> aRenderer.renderFaceZPos(aBlock, aX, aY, aZ, aIcon); - case WEST -> aRenderer.renderFaceXNeg(aBlock, aX, aY, aZ, aIcon); - case EAST -> aRenderer.renderFaceXPos(aBlock, aX, aY, aZ, aIcon); - } - } - - public static void renderItemIcon(IIcon icon, double size, double z, float nx, float ny, float nz) { - renderItemIcon(icon, 0.0D, 0.0D, size, size, z, nx, ny, nz); - } - - public static void renderItemIcon(IIcon icon, double xStart, double yStart, double xEnd, double yEnd, double z, - float nx, float ny, float nz) { - if (icon == null) { - return; - } - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(nx, ny, nz); - if (nz > 0.0F) { - Tessellator.instance.addVertexWithUV(xStart, yStart, z, icon.getMinU(), icon.getMinV()); - Tessellator.instance.addVertexWithUV(xEnd, yStart, z, icon.getMaxU(), icon.getMinV()); - Tessellator.instance.addVertexWithUV(xEnd, yEnd, z, icon.getMaxU(), icon.getMaxV()); - Tessellator.instance.addVertexWithUV(xStart, yEnd, z, icon.getMinU(), icon.getMaxV()); - } else { - Tessellator.instance.addVertexWithUV(xStart, yEnd, z, icon.getMinU(), icon.getMaxV()); - Tessellator.instance.addVertexWithUV(xEnd, yEnd, z, icon.getMaxU(), icon.getMaxV()); - Tessellator.instance.addVertexWithUV(xEnd, yStart, z, icon.getMaxU(), icon.getMinV()); - Tessellator.instance.addVertexWithUV(xStart, yStart, z, icon.getMinU(), icon.getMinV()); - } - Tessellator.instance.draw(); - } - - @SuppressWarnings("RedundantLabeledSwitchRuleCodeBlock") - public static void renderItem(IItemRenderer.ItemRenderType type, IIcon icon) { - Tessellator tessellator = Tessellator.instance; - float maxU = icon.getMaxU(); - float minV = icon.getMinV(); - float minU = icon.getMinU(); - float maxV = icon.getMaxV(); - - switch (type) { - case ENTITY -> { - if (Minecraft.getMinecraft().gameSettings.fancyGraphics) { - ItemRenderer.renderItemIn2D( - tessellator, - maxU, - minV, - minU, - maxV, - icon.getIconWidth(), - icon.getIconHeight(), - 0.0625F); - } else { - GL11.glPushMatrix(); - - if (!RenderItem.renderInFrame) { - GL11.glRotatef(180.0F - RenderManager.instance.playerViewY, 0.0F, 1.0F, 0.0F); - } - - tessellator.startDrawingQuads(); - tessellator.setNormal(0.0F, 1.0F, 0.0F); - tessellator.addVertexWithUV(0.0F - 0.5F, 0.0F - 0.25F, 0.0D, minU, maxV); - tessellator.addVertexWithUV(1.0F - 0.5F, 0.0F - 0.25F, 0.0D, maxU, maxV); - tessellator.addVertexWithUV(1.0F - 0.5F, 1.0F - 0.25F, 0.0D, maxU, minV); - tessellator.addVertexWithUV(0.0F - 0.5F, 1.0F - 0.25F, 0.0D, minU, minV); - tessellator.draw(); - - GL11.glPopMatrix(); - } - } - case EQUIPPED, EQUIPPED_FIRST_PERSON -> { - ItemRenderer.renderItemIn2D( - tessellator, - maxU, - minV, - minU, - maxV, - icon.getIconWidth(), - icon.getIconHeight(), - 0.0625F); - } - case INVENTORY -> { - renderItemIcon(icon, 16.0D, 0.001, 0.0F, 0.0F, -1.0F); - } - default -> {} - } - } - - public static void applyStandardItemTransform(IItemRenderer.ItemRenderType type) { - if (type == IItemRenderer.ItemRenderType.ENTITY) { - if (RenderItem.renderInFrame) { - // Magic numbers calculated from vanilla code - GL11.glScalef(1.025641F, 1.025641F, 1.025641F); - GL11.glTranslatef(0.0F, -0.05F, 0.0F); - } - - if (Minecraft.getMinecraft().gameSettings.fancyGraphics) { - if (RenderItem.renderInFrame) { - GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); - } - // Magic numbers calculated from vanilla code - GL11.glTranslatef(-0.5F, -0.25F, 0.0421875F); - } - } - } -} diff --git a/src/main/java/gregtech/common/render/GT_RenderedTexture.java b/src/main/java/gregtech/common/render/GT_RenderedTexture.java deleted file mode 100644 index afaf3b290c..0000000000 --- a/src/main/java/gregtech/common/render/GT_RenderedTexture.java +++ /dev/null @@ -1,395 +0,0 @@ -package gregtech.common.render; - -import static gregtech.api.util.LightingHelper.MAX_BRIGHTNESS; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.IAlignment; -import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; -import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; -import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; -import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; - -import gregtech.GT_Mod; -import gregtech.api.interfaces.IColorModulationContainer; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.LightingHelper; - -public class GT_RenderedTexture extends GT_TextureBase implements ITexture, IColorModulationContainer { - - protected final IIconContainer mIconContainer; - private final short[] mRGBa; - private final boolean glow; - private final boolean stdOrient; - private final boolean useExtFacing; - - protected GT_RenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean allowAlpha, boolean glow, - boolean stdOrient, boolean extFacing) { - if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture"); - mIconContainer = aIcon; - mRGBa = aRGBa; - this.glow = glow; - this.stdOrient = stdOrient; - this.useExtFacing = extFacing; - } - - @Override - public boolean isOldTexture() { - return false; - } - - @Override - public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 1.0f, 0.0f, 0.0f); - final boolean enableAO = aRenderer.enableAO; - final LightingHelper lighting = new LightingHelper(aRenderer); - if (glow) { - if (!GT_Mod.gregtechproxy.mRenderGlowTextures) { - draw(aRenderer); - return; - } - aRenderer.enableAO = false; - lighting.setLightnessOverride(1.0F); - if (enableAO) lighting.setBrightnessOverride(MAX_BRIGHTNESS); - } - lighting.setupLightingXPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.EAST, mRGBa); - final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); - renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - lighting.setupColor(ForgeDirection.EAST, 0xffffff); - renderFaceXPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - aRenderer.enableAO = enableAO; - draw(aRenderer); - } - - @Override - public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, -1.0f, 0.0f, 0.0f); - final boolean enableAO = aRenderer.enableAO; - final LightingHelper lighting = new LightingHelper(aRenderer); - if (glow) { - if (!GT_Mod.gregtechproxy.mRenderGlowTextures) { - draw(aRenderer); - return; - } - aRenderer.enableAO = false; - lighting.setLightnessOverride(1.0F); - lighting.setBrightnessOverride(MAX_BRIGHTNESS); - } - lighting.setupLightingXNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.WEST, mRGBa); - final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); - renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - lighting.setupColor(ForgeDirection.WEST, 0xffffff); - renderFaceXNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - aRenderer.enableAO = enableAO; - draw(aRenderer); - } - - @Override - public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, 1.0f, 0.0f); - final boolean enableAO = aRenderer.enableAO; - final LightingHelper lighting = new LightingHelper(aRenderer); - if (glow) { - if (!GT_Mod.gregtechproxy.mRenderGlowTextures) { - draw(aRenderer); - return; - } - aRenderer.enableAO = false; - lighting.setLightnessOverride(1.0F); - lighting.setBrightnessOverride(MAX_BRIGHTNESS); - } - lighting.setupLightingYPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.UP, mRGBa); - final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); - renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - lighting.setupColor(ForgeDirection.UP, 0xffffff); - renderFaceYPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - aRenderer.enableAO = enableAO; - draw(aRenderer); - } - - @Override - public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, -1.0f, 0.0f); - final boolean enableAO = aRenderer.enableAO; - final LightingHelper lighting = new LightingHelper(aRenderer); - if (glow) { - if (!GT_Mod.gregtechproxy.mRenderGlowTextures) { - draw(aRenderer); - return; - } - aRenderer.enableAO = false; - lighting.setLightnessOverride(1.0F); - lighting.setBrightnessOverride(MAX_BRIGHTNESS); - } - lighting.setupLightingYNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.DOWN, mRGBa); - final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); - renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - Tessellator.instance.setColorRGBA(255, 255, 255, 255); - renderFaceYNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - aRenderer.enableAO = enableAO; - draw(aRenderer); - } - - @Override - public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, 0.0f, 1.0f); - final boolean enableAO = aRenderer.enableAO; - final LightingHelper lighting = new LightingHelper(aRenderer); - if (glow) { - if (!GT_Mod.gregtechproxy.mRenderGlowTextures) { - draw(aRenderer); - return; - } - aRenderer.enableAO = false; - lighting.setLightnessOverride(1.0F); - lighting.setBrightnessOverride(MAX_BRIGHTNESS); - } - lighting.setupLightingZPos(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.SOUTH, mRGBa); - final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); - renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - lighting.setupColor(ForgeDirection.SOUTH, 0xffffff); - renderFaceZPos(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - aRenderer.enableAO = enableAO; - draw(aRenderer); - } - - @Override - public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - startDrawingQuads(aRenderer, 0.0f, 0.0f, -1.0f); - final boolean enableAO = aRenderer.enableAO; - final LightingHelper lighting = new LightingHelper(aRenderer); - if (glow) { - if (!GT_Mod.gregtechproxy.mRenderGlowTextures) { - draw(aRenderer); - return; - } - aRenderer.enableAO = false; - lighting.setLightnessOverride(1.0F); - lighting.setBrightnessOverride(MAX_BRIGHTNESS); - } - lighting.setupLightingZNeg(aBlock, aX, aY, aZ) - .setupColor(ForgeDirection.NORTH, mRGBa); - final ExtendedFacing rotation = getExtendedFacing(aX, aY, aZ); - renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getIcon(), rotation); - if (mIconContainer.getOverlayIcon() != null) { - lighting.setupColor(ForgeDirection.NORTH, 0xffffff); - renderFaceZNeg(aRenderer, aX, aY, aZ, mIconContainer.getOverlayIcon(), rotation); - } - aRenderer.enableAO = enableAO; - draw(aRenderer); - } - - @Override - public short[] getRGBA() { - return mRGBa; - } - - @Override - public boolean isValidTexture() { - return mIconContainer != null; - } - - /** - * Renders the given texture to the bottom face of the block. Args: block, x, y, z, texture - */ - protected void renderFaceYNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, - ExtendedFacing extendedFacing) { - - switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { - case COUNTER_CLOCKWISE -> aRenderer.uvRotateBottom = 2; - case CLOCKWISE -> aRenderer.uvRotateBottom = 1; - case UPSIDE_DOWN -> aRenderer.uvRotateBottom = 3; - default -> aRenderer.uvRotateBottom = 0; - } - - final Flip aFlip = extendedFacing.getFlip(); - aRenderer.renderFaceYNeg( - Blocks.air, - x, - y, - z, - useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped - ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped() ^ !stdOrient, aFlip.isVerticallyFliped()) - : new GT_IconFlipped(icon, !stdOrient, false)); - aRenderer.uvRotateBottom = 0; - } - - /** - * Renders the given texture to the top face of the block. Args: block, x, y, z, texture - */ - protected void renderFaceYPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, - ExtendedFacing extendedFacing) { - - switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { - case COUNTER_CLOCKWISE -> aRenderer.uvRotateTop = 2; - case CLOCKWISE -> aRenderer.uvRotateTop = 1; - case UPSIDE_DOWN -> aRenderer.uvRotateTop = 3; - default -> aRenderer.uvRotateTop = 0; - } - - final Flip aFlip = extendedFacing.getFlip(); - aRenderer.renderFaceYPos( - Blocks.air, - x, - y, - z, - useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped - ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) - : icon); - aRenderer.uvRotateTop = 0; - } - - /** - * Renders the given texture to the north (z-negative) face of the block. Args: block, x, y, z, texture - */ - protected void renderFaceZNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, - ExtendedFacing extendedFacing) { - aRenderer.field_152631_f = true; - // **NOT A BUG**: aRenderer.uvRotateEast REALLY CONTROLS THE ROTATION OF THE NORTH SIDE - switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { - case COUNTER_CLOCKWISE -> aRenderer.uvRotateEast = 2; - case CLOCKWISE -> aRenderer.uvRotateEast = 1; - case UPSIDE_DOWN -> aRenderer.uvRotateEast = 3; - default -> aRenderer.uvRotateEast = 0; - } - - final Flip aFlip = extendedFacing.getFlip(); - aRenderer.renderFaceZNeg( - Blocks.air, - x, - y, - z, - useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped - ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) - : icon); - aRenderer.uvRotateEast = 0; - aRenderer.field_152631_f = false; - } - - /** - * Renders the given texture to the south (z-positive) face of the block. Args: block, x, y, z, texture - */ - protected void renderFaceZPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, - ExtendedFacing extendedFacing) { - // **NOT A BUG**: aRenderer.uvRotateWest REALLY CONTROLS THE ROTATION OF THE SOUTH SIDE - switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { - case COUNTER_CLOCKWISE -> aRenderer.uvRotateWest = 2; - case CLOCKWISE -> aRenderer.uvRotateWest = 1; - case UPSIDE_DOWN -> aRenderer.uvRotateWest = 3; - default -> aRenderer.uvRotateWest = 0; - } - - final Flip aFlip = extendedFacing.getFlip(); - aRenderer.renderFaceZPos( - Blocks.air, - x, - y, - z, - useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped - ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) - : icon); - aRenderer.uvRotateWest = 0; - } - - /** - * Renders the given texture to the west (x-negative) face of the block. Args: block, x, y, z, texture - */ - protected void renderFaceXNeg(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, - ExtendedFacing extendedFacing) { - // **NOT A BUG**: aRenderer.uvRotateNorth REALLY CONTROLS THE ROTATION OF THE WEST SIDE - switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { - case COUNTER_CLOCKWISE -> aRenderer.uvRotateNorth = 2; - case CLOCKWISE -> aRenderer.uvRotateNorth = 1; - case UPSIDE_DOWN -> aRenderer.uvRotateNorth = 3; - default -> aRenderer.uvRotateNorth = 0; - } - - final Flip aFlip = extendedFacing.getFlip(); - aRenderer.renderFaceXNeg( - Blocks.air, - x, - y, - z, - useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped - ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) - : icon); - aRenderer.uvRotateNorth = 0; - } - - /** - * Renders the given texture to the east (x-positive) face of the block. Args: block, x, y, z, texture - */ - protected void renderFaceXPos(RenderBlocks aRenderer, double x, double y, double z, IIcon icon, - ExtendedFacing extendedFacing) { - aRenderer.field_152631_f = true; - // **NOT A BUG**: aRenderer.uvRotateSouth REALLY CONTROLS THE ROTATION OF THE EAST SIDE - switch (useExtFacing ? extendedFacing.getRotation() : Rotation.NORMAL) { - case COUNTER_CLOCKWISE -> aRenderer.uvRotateSouth = 2; - case CLOCKWISE -> aRenderer.uvRotateSouth = 1; - case UPSIDE_DOWN -> aRenderer.uvRotateSouth = 3; - default -> aRenderer.uvRotateSouth = 0; - } - - final Flip aFlip = extendedFacing.getFlip(); - aRenderer.renderFaceXPos( - Blocks.air, - x, - y, - z, - useExtFacing && GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped - ? new GT_IconFlipped(icon, aFlip.isHorizontallyFlipped(), aFlip.isVerticallyFliped()) - : icon); - aRenderer.uvRotateSouth = 0; - aRenderer.field_152631_f = false; - } - - private ExtendedFacing getExtendedFacing(int x, int y, int z) { - if (stdOrient) return ExtendedFacing.DEFAULT; - final EntityPlayer player = GT_Mod.gregtechproxy.getThePlayer(); - if (player == null) return ExtendedFacing.DEFAULT; - final World w = player.getEntityWorld(); - if (w == null) return ExtendedFacing.DEFAULT; - final TileEntity te = w.getTileEntity(x, y, z); - IAlignment alignment = null; - if (te instanceof IGregTechTileEntity) { - final IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); - if (meta instanceof IAlignmentProvider) { - alignment = ((IAlignmentProvider) meta).getAlignment(); - } else if (meta != null) { - return ExtendedFacing.of( - meta.getBaseMetaTileEntity() - .getFrontFacing()); - } - } else if (te instanceof IAlignmentProvider) { - alignment = ((IAlignmentProvider) te).getAlignment(); - } - if (alignment != null) return alignment.getExtendedFacing(); - return ExtendedFacing.DEFAULT; - } -} diff --git a/src/main/java/gregtech/common/render/GT_Renderer_Block.java b/src/main/java/gregtech/common/render/GT_Renderer_Block.java deleted file mode 100644 index aa61cc125e..0000000000 --- a/src/main/java/gregtech/common/render/GT_Renderer_Block.java +++ /dev/null @@ -1,779 +0,0 @@ -package gregtech.common.render; - -import static gregtech.api.enums.GT_Values.SIDE_DOWN; -import static gregtech.api.enums.GT_Values.SIDE_EAST; -import static gregtech.api.enums.GT_Values.SIDE_NORTH; -import static gregtech.api.enums.GT_Values.SIDE_SOUTH; -import static gregtech.api.enums.GT_Values.SIDE_UP; -import static gregtech.api.enums.GT_Values.SIDE_WEST; -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_DOWN; -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_EAST; -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_NORTH; -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_SOUTH; -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_UP; -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_WEST; -import static gregtech.api.interfaces.metatileentity.IConnectable.HAS_FRESHFOAM; -import static gregtech.api.interfaces.metatileentity.IConnectable.HAS_HARDENEDFOAM; -import static gregtech.api.interfaces.metatileentity.IConnectable.NO_CONNECTION; -import static net.minecraftforge.common.util.ForgeDirection.DOWN; -import static net.minecraftforge.common.util.ForgeDirection.EAST; -import static net.minecraftforge.common.util.ForgeDirection.NORTH; -import static net.minecraftforge.common.util.ForgeDirection.SOUTH; -import static net.minecraftforge.common.util.ForgeDirection.UP; -import static net.minecraftforge.common.util.ForgeDirection.VALID_DIRECTIONS; -import static net.minecraftforge.common.util.ForgeDirection.WEST; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.client.particle.EffectRenderer; -import net.minecraft.client.particle.EntityDiggingFX; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.lwjgl.opengl.GL11; - -import com.gtnewhorizons.angelica.api.ThreadSafeISBRH; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import cpw.mods.fml.client.registry.RenderingRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IAllSidedTexturedTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity; -import gregtech.api.interfaces.tileentity.ITexturedTileEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.api.objects.XSTR; -import gregtech.common.blocks.GT_Block_FrameBox; -import gregtech.common.blocks.GT_Block_Machines; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_TileEntity_Ores; - -@ThreadSafeISBRH(perThread = true) -public class GT_Renderer_Block implements ISimpleBlockRenderingHandler { - - public static final float blockMin = 0.0F; - public static final float blockMax = 1.0F; - private static final float coverThickness = blockMax / 8.0F; - private static final float coverInnerMin = blockMin + coverThickness; - private static final float coverInnerMax = blockMax - coverThickness; - - @Deprecated - public static GT_Renderer_Block INSTANCE; - public static int mRenderID; - - public static void register() { - mRenderID = RenderingRegistry.getNextAvailableRenderId(); - INSTANCE = new GT_Renderer_Block(); - RenderingRegistry.registerBlockHandler(INSTANCE); - } - - private final ITexture[][] textureArray = new ITexture[6][]; - - public boolean renderStandardBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, - RenderBlocks aRenderer) { - final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IPipeRenderedTileEntity pipeRenderedTileEntity) { - textureArray[0] = pipeRenderedTileEntity.getTextureCovered(DOWN); - textureArray[1] = pipeRenderedTileEntity.getTextureCovered(UP); - textureArray[2] = pipeRenderedTileEntity.getTextureCovered(NORTH); - textureArray[3] = pipeRenderedTileEntity.getTextureCovered(SOUTH); - textureArray[4] = pipeRenderedTileEntity.getTextureCovered(WEST); - textureArray[5] = pipeRenderedTileEntity.getTextureCovered(EAST); - return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer, textureArray); - } - if (tTileEntity instanceof IAllSidedTexturedTileEntity allSidedTexturedTileEntity) { - ITexture[] texture = allSidedTexturedTileEntity.getTexture(aBlock); - textureArray[0] = texture; - textureArray[1] = texture; - textureArray[2] = texture; - textureArray[3] = texture; - textureArray[4] = texture; - textureArray[5] = texture; - return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer, textureArray); - } - if (tTileEntity instanceof ITexturedTileEntity texturedTileEntity) { - textureArray[0] = texturedTileEntity.getTexture(aBlock, DOWN); - textureArray[1] = texturedTileEntity.getTexture(aBlock, UP); - textureArray[2] = texturedTileEntity.getTexture(aBlock, NORTH); - textureArray[3] = texturedTileEntity.getTexture(aBlock, SOUTH); - textureArray[4] = texturedTileEntity.getTexture(aBlock, WEST); - textureArray[5] = texturedTileEntity.getTexture(aBlock, EAST); - return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer, textureArray); - } - - return false; - } - - public boolean renderStandardBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, - RenderBlocks aRenderer, ITexture[][] aTextures) { - aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_DOWN], true); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_UP], true); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_NORTH], true); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_SOUTH], true); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_WEST], true); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[SIDE_EAST], true); - return true; - } - - final ITexture[][] tIcons = new ITexture[VALID_DIRECTIONS.length][]; - final ITexture[][] tCovers = new ITexture[VALID_DIRECTIONS.length][]; - final boolean[] tIsCovered = new boolean[VALID_DIRECTIONS.length]; - - public boolean renderPipeBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, - IPipeRenderedTileEntity aTileEntity, RenderBlocks aRenderer) { - final byte aConnections = aTileEntity.getConnections(); - if ((aConnections & (HAS_FRESHFOAM | HAS_HARDENEDFOAM)) != 0) { - return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer); - } - final float thickness = aTileEntity.getThickNess(); - if (thickness >= 0.99F) { - return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer); - } - // Range of block occupied by pipe - final float pipeMin = (blockMax - thickness) / 2.0F; - final float pipeMax = blockMax - pipeMin; - - for (int i = 0; i < VALID_DIRECTIONS.length; i++) { - final ForgeDirection iSide = VALID_DIRECTIONS[i]; - tIsCovered[i] = (aTileEntity.getCoverIDAtSide(iSide) != 0); - tCovers[i] = aTileEntity.getTexture(aBlock, iSide); - tIcons[i] = aTileEntity.getTextureUncovered(iSide); - - } - - switch (aConnections) { - case NO_CONNECTION -> { - aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); - } - case CONNECTED_EAST | CONNECTED_WEST -> { - // EAST - WEST Pipe Sides - aBlock.setBlockBounds(blockMin, pipeMin, pipeMin, blockMax, pipeMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); - - // EAST - WEST Pipe Ends - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); - } - case CONNECTED_DOWN | CONNECTED_UP -> { - // UP - DOWN Pipe Sides - aBlock.setBlockBounds(pipeMin, blockMin, pipeMin, pipeMax, blockMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); - - // UP - DOWN Pipe Ends - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); - } - case CONNECTED_NORTH | CONNECTED_SOUTH -> { - // NORTH - SOUTH Pipe Sides - aBlock.setBlockBounds(pipeMin, pipeMin, blockMin, pipeMax, pipeMax, blockMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); - - // NORTH - SOUTH Pipe Ends - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); - } - default -> { - if ((aConnections & CONNECTED_WEST) == 0) { - aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - } else { - aBlock.setBlockBounds(blockMin, pipeMin, pipeMin, pipeMin, pipeMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); - } - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); - if ((aConnections & CONNECTED_EAST) == 0) { - aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - } else { - aBlock.setBlockBounds(pipeMax, pipeMin, pipeMin, blockMax, pipeMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); - } - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); - if ((aConnections & CONNECTED_DOWN) == 0) { - aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - } else { - aBlock.setBlockBounds(pipeMin, blockMin, pipeMin, pipeMax, pipeMin, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); - } - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); - if ((aConnections & CONNECTED_UP) == 0) { - aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - } else { - aBlock.setBlockBounds(pipeMin, pipeMax, pipeMin, pipeMax, blockMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); - } - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); - if ((aConnections & CONNECTED_NORTH) == 0) { - aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - } else { - aBlock.setBlockBounds(pipeMin, pipeMin, blockMin, pipeMax, pipeMax, pipeMin); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); - } - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_NORTH], false); - if ((aConnections & CONNECTED_SOUTH) == 0) { - aBlock.setBlockBounds(pipeMin, pipeMin, pipeMin, pipeMax, pipeMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - } else { - aBlock.setBlockBounds(pipeMin, pipeMin, pipeMax, pipeMax, pipeMax, blockMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_DOWN], false); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_UP], false); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_WEST], false); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_EAST], false); - } - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tIcons[SIDE_SOUTH], false); - } - } - - // Render covers on pipes - if (tIsCovered[SIDE_DOWN]) { - aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, coverInnerMin, blockMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - if (!tIsCovered[SIDE_NORTH]) { - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); - } - if (!tIsCovered[SIDE_SOUTH]) { - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); - } - if (!tIsCovered[SIDE_WEST]) { - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); - } - if (!tIsCovered[SIDE_EAST]) { - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); - } - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); - if ((aConnections & CONNECTED_DOWN) != 0) { - // Split outer face to leave hole for pipe - // Lower panel - aRenderer.setRenderBounds(blockMin, blockMin, blockMin, blockMax, blockMin, pipeMin); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); - // Upper panel - aRenderer.setRenderBounds(blockMin, blockMin, pipeMax, blockMax, blockMin, blockMax); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); - // Middle left panel - aRenderer.setRenderBounds(blockMin, blockMin, pipeMin, pipeMin, blockMin, pipeMax); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); - // Middle right panel - aRenderer.setRenderBounds(pipeMax, blockMin, pipeMin, blockMax, blockMin, pipeMax); - } - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_DOWN], false); - } - - if (tIsCovered[SIDE_UP]) { - aBlock.setBlockBounds(blockMin, coverInnerMax, blockMin, blockMax, blockMax, blockMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - if (!tIsCovered[SIDE_NORTH]) { - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); - } - if (!tIsCovered[SIDE_SOUTH]) { - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); - } - if (!tIsCovered[SIDE_WEST]) { - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); - } - if (!tIsCovered[SIDE_EAST]) { - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); - } - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); - if ((aConnections & CONNECTED_UP) != 0) { - // Split outer face to leave hole for pipe - // Lower panel - aRenderer.setRenderBounds(blockMin, blockMax, blockMin, blockMax, blockMax, pipeMin); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); - // Upper panel - aRenderer.setRenderBounds(blockMin, blockMax, pipeMax, blockMax, blockMax, blockMax); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); - // Middle left panel - aRenderer.setRenderBounds(blockMin, blockMax, pipeMin, pipeMin, blockMax, pipeMax); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); - // Middle right panel - aRenderer.setRenderBounds(pipeMax, blockMax, pipeMin, blockMax, blockMax, pipeMax); - } - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_UP], false); - } - - if (tIsCovered[SIDE_NORTH]) { - aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, coverInnerMin); - aRenderer.setRenderBoundsFromBlock(aBlock); - if (!tIsCovered[SIDE_DOWN]) { - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); - } - if (!tIsCovered[SIDE_UP]) { - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); - } - if (!tIsCovered[SIDE_WEST]) { - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); - } - if (!tIsCovered[SIDE_EAST]) { - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); - } - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); - if ((aConnections & CONNECTED_NORTH) != 0) { - // Split outer face to leave hole for pipe - // Lower panel - aRenderer.setRenderBounds(blockMin, blockMin, blockMin, blockMax, pipeMin, blockMin); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); - // Upper panel - aRenderer.setRenderBounds(blockMin, pipeMax, blockMin, blockMax, blockMax, blockMin); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); - // Middle left panel - aRenderer.setRenderBounds(blockMin, pipeMin, blockMin, pipeMin, pipeMax, blockMin); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); - // Middle right panel - aRenderer.setRenderBounds(pipeMax, pipeMin, blockMin, blockMax, pipeMax, blockMin); - } - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_NORTH], false); - } - - if (tIsCovered[SIDE_SOUTH]) { - aBlock.setBlockBounds(blockMin, blockMin, coverInnerMax, blockMax, blockMax, blockMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - if (!tIsCovered[SIDE_DOWN]) { - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); - } - if (!tIsCovered[SIDE_UP]) { - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); - } - if (!tIsCovered[SIDE_WEST]) { - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); - } - if (!tIsCovered[SIDE_EAST]) { - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); - } - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); - if ((aConnections & CONNECTED_SOUTH) != 0) { - // Split outer face to leave hole for pipe - // Lower panel - aRenderer.setRenderBounds(blockMin, blockMin, blockMax, blockMax, pipeMin, blockMax); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); - // Upper panel - aRenderer.setRenderBounds(blockMin, pipeMax, blockMax, blockMax, blockMax, blockMax); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); - // Middle left panel - aRenderer.setRenderBounds(blockMin, pipeMin, blockMax, pipeMin, pipeMax, blockMax); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); - // Middle right panel - aRenderer.setRenderBounds(pipeMax, pipeMin, blockMax, blockMax, pipeMax, blockMax); - } - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_SOUTH], false); - } - - if (tIsCovered[SIDE_WEST]) { - aBlock.setBlockBounds(blockMin, blockMin, blockMin, coverInnerMin, blockMax, blockMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - if (!tIsCovered[SIDE_DOWN]) { - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); - } - if (!tIsCovered[SIDE_UP]) { - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); - } - if (!tIsCovered[SIDE_NORTH]) { - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); - } - if (!tIsCovered[SIDE_SOUTH]) { - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); - } - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); - if ((aConnections & CONNECTED_WEST) != 0) { - // Split outer face to leave hole for pipe - // Lower panel - aRenderer.setRenderBounds(blockMin, blockMin, blockMin, blockMin, pipeMin, blockMax); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); - // Upper panel - aRenderer.setRenderBounds(blockMin, pipeMax, blockMin, blockMin, blockMax, blockMax); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); - // Middle left panel - aRenderer.setRenderBounds(blockMin, pipeMin, blockMin, blockMin, pipeMax, pipeMin); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); - // Middle right panel - aRenderer.setRenderBounds(blockMin, pipeMin, pipeMax, blockMin, pipeMax, blockMax); - } - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_WEST], false); - } - - if (tIsCovered[SIDE_EAST]) { - aBlock.setBlockBounds(coverInnerMax, blockMin, blockMin, blockMax, blockMax, blockMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - if (!tIsCovered[SIDE_DOWN]) { - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); - } - if (!tIsCovered[SIDE_UP]) { - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); - } - if (!tIsCovered[SIDE_NORTH]) { - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); - } - if (!tIsCovered[SIDE_SOUTH]) { - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); - } - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); - - if ((aConnections & CONNECTED_EAST) != 0) { - // Split outer face to leave hole for pipe - // Lower panel - aRenderer.setRenderBounds(blockMax, blockMin, blockMin, blockMax, pipeMin, blockMax); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); - // Upper panel - aRenderer.setRenderBounds(blockMax, pipeMax, blockMin, blockMax, blockMax, blockMax); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); - // Middle left panel - aRenderer.setRenderBounds(blockMax, pipeMin, blockMin, blockMax, pipeMax, pipeMin); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); - // Middle right panel - aRenderer.setRenderBounds(blockMax, pipeMin, pipeMax, blockMax, pipeMax, blockMax); - } - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, tCovers[SIDE_EAST], false); - } - aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - - return true; - } - - @SideOnly(Side.CLIENT) - public static void addHitEffects(EffectRenderer effectRenderer, Block block, World world, int x, int y, int z, - int ordinalSide) { - double rX = x + XSTR.XSTR_INSTANCE.nextDouble() * 0.8 + 0.1; - double rY = y + XSTR.XSTR_INSTANCE.nextDouble() * 0.8 + 0.1; - double rZ = z + XSTR.XSTR_INSTANCE.nextDouble() * 0.8 + 0.1; - if (ordinalSide == 0) { - rY = y - 0.1; - } else if (ordinalSide == 1) { - rY = y + 1.1; - } else if (ordinalSide == 2) { - rZ = z - 0.1; - } else if (ordinalSide == 3) { - rZ = z + 1.1; - } else if (ordinalSide == 4) { - rX = x - 0.1; - } else if (ordinalSide == 5) { - rX = x + 1.1; - } - effectRenderer.addEffect( - (new EntityDiggingFX( - world, - rX, - rY, - rZ, - 0.0, - 0.0, - 0.0, - block, - block.getDamageValue(world, x, y, z), - ordinalSide)).applyColourMultiplier(x, y, z) - .multiplyVelocity(0.2F) - .multipleParticleScaleBy(0.6F)); - } - - @SideOnly(Side.CLIENT) - public static void addDestroyEffects(EffectRenderer effectRenderer, Block block, World world, int x, int y, int z) { - for (int iX = 0; iX < 4; ++iX) { - for (int iY = 0; iY < 4; ++iY) { - for (int iZ = 0; iZ < 4; ++iZ) { - final double bX = x + (iX + 0.5) / 4.0; - final double bY = y + (iY + 0.5) / 4.0; - final double bZ = z + (iZ + 0.5) / 4.0; - effectRenderer.addEffect( - (new EntityDiggingFX( - world, - bX, - bY, - bZ, - bX - x - 0.5, - bY - y - 0.5, - bZ - z - 0.5, - block, - block.getDamageValue(world, x, y, z))).applyColourMultiplier(x, y, z)); - } - } - } - } - - final GT_TileEntity_Ores tTileEntity = new GT_TileEntity_Ores(); - - @Override - public void renderInventoryBlock(Block aBlock, int aMeta, int aModelID, RenderBlocks aRenderer) { - aRenderer.enableAO = false; - aRenderer.useInventoryTint = true; - - GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - if (aBlock instanceof GT_Block_Ores_Abstract) { - tTileEntity.mMetaData = ((short) aMeta); - - aBlock.setBlockBoundsForItemRender(); - aRenderer.setRenderBoundsFromBlock(aBlock); - // spotless:off - ITexture[] texture = tTileEntity.getTexture(aBlock); - renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - // spotless:on - } else if (aMeta > 0 && (aMeta < GregTech_API.METATILEENTITIES.length) - && aBlock instanceof GT_Block_Machines - && (GregTech_API.METATILEENTITIES[aMeta] != null) - && (!GregTech_API.METATILEENTITIES[aMeta].renderInInventory(aBlock, aMeta, aRenderer))) { - renderNormalInventoryMetaTileEntity(aBlock, aMeta, aRenderer); - } else if (aBlock instanceof GT_Block_FrameBox) { - ITexture[] texture = ((GT_Block_FrameBox) aBlock).getTexture(aMeta); - aBlock.setBlockBoundsForItemRender(); - aRenderer.setRenderBoundsFromBlock(aBlock); - // spotless:off - renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, texture, true); - // spotless:on - } - aBlock.setBlockBounds(blockMin, blockMin, blockMin, blockMax, blockMax, blockMax); - - aRenderer.setRenderBoundsFromBlock(aBlock); - - GL11.glTranslatef(0.5F, 0.5F, 0.5F); - aRenderer.useInventoryTint = false; - } - - private static void renderNormalInventoryMetaTileEntity(Block aBlock, int aMeta, RenderBlocks aRenderer) { - if ((aMeta <= 0) || (aMeta >= GregTech_API.METATILEENTITIES.length)) { - return; - } - final IMetaTileEntity tMetaTileEntity = GregTech_API.METATILEENTITIES[aMeta]; - if (tMetaTileEntity == null) { - return; - } - aBlock.setBlockBoundsForItemRender(); - aRenderer.setRenderBoundsFromBlock(aBlock); - - final IGregTechTileEntity iGregTechTileEntity = tMetaTileEntity.getBaseMetaTileEntity(); - - // spotless:off - if ((iGregTechTileEntity instanceof IPipeRenderedTileEntity renderedPipe) - && (tMetaTileEntity instanceof MetaPipeEntity pipeEntity)) { - final float tThickness = renderedPipe.getThickNess(); - final float pipeMin = (blockMax - tThickness) / 2.0F; - final float pipeMax = blockMax - pipeMin; - - aBlock.setBlockBounds(blockMin, pipeMin, pipeMin, blockMax, pipeMax, pipeMax); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, DOWN, (CONNECTED_WEST | CONNECTED_EAST), -1, false, false), true); - renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, UP, (CONNECTED_WEST | CONNECTED_EAST), -1, false, false), true); - renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, NORTH, (CONNECTED_WEST | CONNECTED_EAST), -1, false, false), true); - renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, SOUTH, (CONNECTED_WEST | CONNECTED_EAST), -1, false, false), true); - renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, WEST, (CONNECTED_WEST | CONNECTED_EAST), -1, true, false), true); - renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, pipeEntity.getTexture(iGregTechTileEntity, EAST, (CONNECTED_WEST | CONNECTED_EAST), -1, true, false), true); - } else { - renderNegativeYFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, DOWN, WEST, -1, true, false), true); - renderPositiveYFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, UP, WEST, -1, true, false), true); - renderNegativeZFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, NORTH, WEST, -1, true, false), true); - renderPositiveZFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, SOUTH, WEST, -1, true, false), true); - renderNegativeXFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, WEST, WEST, -1, true, false), true); - renderPositiveXFacing(null, aRenderer, aBlock, 0, 0, 0, tMetaTileEntity.getTexture(iGregTechTileEntity, EAST, WEST, -1, true, false), true); - } - // spotless:on - } - - public static void renderNegativeYFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY - 1, aZ, 0))) return; - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aFullBlock ? aY - 1 : aY, aZ)); - } - if (aIcon == null) return; - for (final ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderYNeg(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - public static void renderPositiveYFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY + 1, aZ, 1))) return; - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aFullBlock ? aY + 1 : aY, aZ)); - } - if (aIcon == null) return; - for (final ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderYPos(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - public static void renderNegativeZFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY, aZ - 1, 2))) return; - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aY, aFullBlock ? aZ - 1 : aZ)); - } - if (aIcon == null) return; - for (final ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderZNeg(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - public static void renderPositiveZFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX, aY, aZ + 1, 3))) return; - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aY, aFullBlock ? aZ + 1 : aZ)); - } - if (aIcon == null) return; - for (final ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderZPos(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - public static void renderNegativeXFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX - 1, aY, aZ, 4))) return; - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aFullBlock ? aX - 1 : aX, aY, aZ)); - } - if (aIcon == null) return; - for (final ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderXNeg(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - public static void renderPositiveXFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if ((aFullBlock) && (!aBlock.shouldSideBeRendered(aWorld, aX + 1, aY, aZ, 5))) return; - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aFullBlock ? aX + 1 : aX, aY, aZ)); - } - if (aIcon == null) return; - for (final ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderXPos(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - @Override - public boolean renderWorldBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, int aModelID, - RenderBlocks aRenderer) { - aRenderer.enableAO = Minecraft.isAmbientOcclusionEnabled() && GT_Mod.gregtechproxy.mRenderTileAmbientOcclusion; - aRenderer.useInventoryTint = false; - - final TileEntity tileEntity = aWorld.getTileEntity(aX, aY, aZ); - - // If this block does not have a TE, render it as a normal block. - // Otherwise, render the TE instead. - if (tileEntity == null && aBlock instanceof GT_Block_FrameBox frameBlock) { - int meta = aWorld.getBlockMetadata(aX, aY, aZ); - ITexture[] texture = frameBlock.getTexture(meta); - if (texture == null) return false; - textureArray[0] = texture; - textureArray[1] = texture; - textureArray[2] = texture; - textureArray[3] = texture; - textureArray[4] = texture; - textureArray[5] = texture; - renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer, textureArray); - return true; - } - - if (tileEntity == null) return false; - - if (tileEntity instanceof IGregTechTileEntity) { - final IMetaTileEntity metaTileEntity; - if ((metaTileEntity = ((IGregTechTileEntity) tileEntity).getMetaTileEntity()) != null - && metaTileEntity.renderInWorld(aWorld, aX, aY, aZ, aBlock, aRenderer)) { - aRenderer.enableAO = false; - return true; - } - } - if (tileEntity instanceof IPipeRenderedTileEntity - && renderPipeBlock(aWorld, aX, aY, aZ, aBlock, (IPipeRenderedTileEntity) tileEntity, aRenderer)) { - aRenderer.enableAO = false; - return true; - } - if (renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer)) { - aRenderer.enableAO = false; - return true; - } - return false; - } - - @Override - public boolean shouldRender3DInInventory(int aModel) { - return true; - } - - @Override - public int getRenderId() { - return this.mRenderID; - } -} diff --git a/src/main/java/gregtech/common/render/GT_SidedTexture.java b/src/main/java/gregtech/common/render/GT_SidedTexture.java deleted file mode 100644 index 7a851fd1e7..0000000000 --- a/src/main/java/gregtech/common/render/GT_SidedTexture.java +++ /dev/null @@ -1,78 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; - -import gregtech.api.interfaces.IColorModulationContainer; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.render.TextureFactory; - -public class GT_SidedTexture extends GT_TextureBase implements ITexture, IColorModulationContainer { - - protected final ITexture[] mTextures; - /** - * DO NOT MANIPULATE THE VALUES INSIDE THIS ARRAY!!! - *

- * Just set this variable to another different Array instead. Otherwise some colored things will get Problems. - */ - private final short[] mRGBa; - - protected GT_SidedTexture(IIconContainer aIcon0, IIconContainer aIcon1, IIconContainer aIcon2, - IIconContainer aIcon3, IIconContainer aIcon4, IIconContainer aIcon5, short[] aRGBa, boolean aAllowAlpha) { - if (aRGBa.length != 4) throw new IllegalArgumentException("RGBa doesn't have 4 Values @ GT_RenderedTexture"); - mTextures = new ITexture[] { TextureFactory.of(aIcon0, aRGBa, aAllowAlpha), - TextureFactory.of(aIcon1, aRGBa, aAllowAlpha), TextureFactory.of(aIcon2, aRGBa, aAllowAlpha), - TextureFactory.of(aIcon3, aRGBa, aAllowAlpha), TextureFactory.of(aIcon4, aRGBa, aAllowAlpha), - TextureFactory.of(aIcon5, aRGBa, aAllowAlpha) }; - mRGBa = aRGBa; - } - - @Override - public boolean isOldTexture() { - return false; - } - - @Override - public void renderXPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - mTextures[5].renderXPos(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public void renderXNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - mTextures[4].renderXNeg(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public void renderYPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - mTextures[1].renderYPos(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public void renderYNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - mTextures[0].renderYNeg(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public void renderZPos(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - mTextures[3].renderZPos(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public void renderZNeg(RenderBlocks aRenderer, Block aBlock, int aX, int aY, int aZ) { - mTextures[2].renderZNeg(aRenderer, aBlock, aX, aY, aZ); - } - - @Override - public short[] getRGBA() { - return mRGBa; - } - - @Override - public boolean isValidTexture() { - for (ITexture renderedTexture : mTextures) { - if (!renderedTexture.isValidTexture()) return false; - } - return true; - } -} diff --git a/src/main/java/gregtech/common/render/GT_TextureBase.java b/src/main/java/gregtech/common/render/GT_TextureBase.java deleted file mode 100644 index 20188e2e01..0000000000 --- a/src/main/java/gregtech/common/render/GT_TextureBase.java +++ /dev/null @@ -1,31 +0,0 @@ -package gregtech.common.render; - -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.util.GT_UtilityClient; - -public abstract class GT_TextureBase implements ITexture { - - protected boolean isDrawing = false; - - @Override - public void startDrawingQuads(RenderBlocks aRenderer, float aNormalX, float aNormalY, float aNormalZ) { - if (aRenderer.useInventoryTint && (!isOldTexture() || !GT_UtilityClient.isDrawing(Tessellator.instance))) { - // Draw if we're not an old texture OR we are an old texture AND we're not already drawing - isDrawing = true; - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(aNormalX, aNormalY, aNormalZ); - } - } - - @Override - public void draw(RenderBlocks aRenderer) { - if (aRenderer.useInventoryTint && (!isOldTexture() || isDrawing)) { - // Draw if we're not an old texture OR we initiated the drawing - isDrawing = false; - Tessellator.instance.draw(); - } - } -} diff --git a/src/main/java/gregtech/common/render/GT_TextureBuilder.java b/src/main/java/gregtech/common/render/GT_TextureBuilder.java deleted file mode 100644 index af8a590fc1..0000000000 --- a/src/main/java/gregtech/common/render/GT_TextureBuilder.java +++ /dev/null @@ -1,151 +0,0 @@ -package gregtech.common.render; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.GT_Mod; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.ITextureBuilder; - -@SuppressWarnings({ "unused", "ClassWithTooManyFields" }) -public class GT_TextureBuilder implements ITextureBuilder { - - private final List iconContainerList; - private final List textureLayers; - private Block fromBlock; - private int fromMeta; - private ForgeDirection fromSide; - private short[] rgba; - private boolean allowAlpha; - private boolean stdOrient; - private boolean extFacing; - private boolean glow; - private Boolean worldCoord = null; - - public GT_TextureBuilder() { - textureLayers = new ArrayList<>(); - iconContainerList = new ArrayList<>(); - rgba = Dyes._NULL.mRGBa; - allowAlpha = true; - stdOrient = false; - glow = false; - } - - @Override - public ITextureBuilder setFromBlock(final Block block, final int meta) { - this.fromBlock = block; - this.fromMeta = meta; - this.fromSide = ForgeDirection.UNKNOWN; - return this; - } - - @Override - public ITextureBuilder setFromSide(final ForgeDirection side) { - this.fromSide = side; - return this; - } - - @Override - public ITextureBuilder addIcon(final IIconContainer... iconContainers) { - this.iconContainerList.addAll(Arrays.asList(iconContainers)); - return this; - } - - @Override - public ITextureBuilder setRGBA(final short[] rgba) { - this.rgba = rgba; - return this; - } - - @Override - public ITextureBuilder addLayer(final ITexture... iTextures) { - this.textureLayers.addAll(Arrays.asList(iTextures)); - return this; - } - - @Override - public ITextureBuilder setAllowAlpha(final boolean allowAlpha) { - this.allowAlpha = allowAlpha; - return this; - } - - @Override - public ITextureBuilder stdOrient() { - this.stdOrient = true; - return this; - } - - @Override - public ITextureBuilder useWorldCoord() { - this.worldCoord = true; - return this; - } - - @Override - public ITextureBuilder noWorldCoord() { - this.worldCoord = false; - return this; - } - - @Override - public ITextureBuilder extFacing() { - this.extFacing = true; - return this; - } - - @Override - public ITextureBuilder glow() { - glow = true; - return this; - } - - /** - * @inheritDoc - */ - @Override - public ITexture build() { - if (fromBlock != null) { - if (worldCoord == Boolean.TRUE || worldCoord == null && isCTMBlock(fromBlock, fromMeta)) - return new GT_CopiedCTMBlockTexture(fromBlock, fromSide.ordinal(), fromMeta, rgba, allowAlpha); - else return new GT_CopiedBlockTexture(fromBlock, fromSide.ordinal(), fromMeta, rgba, allowAlpha); - } - if (worldCoord != null) throw new IllegalStateException("worldCoord without from block"); - if (!textureLayers.isEmpty()) return new GT_MultiTexture(textureLayers.toArray(new ITexture[0])); - return switch (iconContainerList.size()) { - case 1 -> new GT_RenderedTexture(iconContainerList.get(0), rgba, allowAlpha, glow, stdOrient, extFacing); - case 6 -> new GT_SidedTexture( - iconContainerList.get(ForgeDirection.DOWN.ordinal()), - iconContainerList.get(ForgeDirection.UP.ordinal()), - iconContainerList.get(ForgeDirection.NORTH.ordinal()), - iconContainerList.get(ForgeDirection.SOUTH.ordinal()), - iconContainerList.get(ForgeDirection.WEST.ordinal()), - iconContainerList.get(ForgeDirection.EAST.ordinal()), - rgba, - allowAlpha); - default -> throw new IllegalStateException("Invalid sideIconContainer count"); - }; - } - - private boolean isCTMBlock(Block fromBlock, int fromMeta) { - return GT_Mod.gregtechproxy.mCTMBlockCache - .computeIfAbsent(fromBlock, (byte) fromMeta, GT_TextureBuilder::apply); - } - - private static Boolean apply(Block b, Byte m) { - Class clazz = b.getClass(); - while (clazz != Block.class) { - final String className = clazz.getName(); - if (GT_Values.mCTMDisabledBlock.contains(className)) return false; - if (GT_Values.mCTMEnabledBlock.contains(className)) return true; - clazz = clazz.getSuperclass(); - } - return false; - } -} diff --git a/src/main/java/gregtech/common/render/GT_WormholeRenderer.java b/src/main/java/gregtech/common/render/GT_WormholeRenderer.java deleted file mode 100644 index 43385eb861..0000000000 --- a/src/main/java/gregtech/common/render/GT_WormholeRenderer.java +++ /dev/null @@ -1,79 +0,0 @@ -package gregtech.common.render; - -import static com.github.technus.tectech.rendering.EOH.EOH_RenderingUtils.addRenderedBlockInWorld; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; -import net.minecraft.init.Blocks; -import net.minecraft.tileentity.TileEntity; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.registry.ClientRegistry; -import gregtech.common.tileentities.render.TileWormhole; - -public class GT_WormholeRenderer extends TileEntitySpecialRenderer { - - public GT_WormholeRenderer() { - ClientRegistry.bindTileEntitySpecialRenderer(TileWormhole.class, this); - } - - private static final double trimPercentage = .95; - private static final double corePercentage = trimPercentage / Math.sqrt(3); - - private static void render(Block coreBlock, double rotation) { - - GL11.glPushMatrix(); - GL11.glRotated(rotation, 2, 1, 0); - GL11.glScaled(-1, -1, -1); - - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setColorOpaque_F(1f, 1f, 1f); - addRenderedBlockInWorld(Blocks.quartz_block, 0, 0, 0, 0); - Tessellator.instance.draw(); - - GL11.glScaled(trimPercentage, trimPercentage, trimPercentage); - - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setColorOpaque_F(0.1f, 0.1f, 0.1f); - addRenderedBlockInWorld(Blocks.coal_block, 0, 0, 0, 0); - Tessellator.instance.draw(); - GL11.glPopMatrix(); - - if (coreBlock != null) { - GL11.glPushMatrix(); - GL11.glScaled(corePercentage, corePercentage, corePercentage); - GL11.glRotated(rotation, 0, -2, .1); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setColorOpaque_F(1f, 1f, 1f); - addRenderedBlockInWorld(coreBlock, 0, 0, 0, 0); - Tessellator.instance.draw(); - GL11.glPopMatrix(); - } - - } - - @Override - public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { - - if (tile instanceof TileWormhole wTile) { - GL11.glPushMatrix(); - GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); - GL11.glScaled(wTile.targetRadius, wTile.targetRadius, wTile.targetRadius); - GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); - GL11.glDisable(GL11.GL_LIGHTING); - - double rotationTimer = wTile.getWorldObj() - .getWorldInfo() - .getWorldTotalTime() + timeSinceLastTick; - - this.bindTexture(TextureMap.locationBlocksTexture); - render(wTile.getBlock(), rotationTimer); - - GL11.glPopAttrib(); - GL11.glPopMatrix(); - } - } -} diff --git a/src/main/java/gregtech/common/render/IRenderedBlock.java b/src/main/java/gregtech/common/render/IRenderedBlock.java index 16268de750..9b55388770 100644 --- a/src/main/java/gregtech/common/render/IRenderedBlock.java +++ b/src/main/java/gregtech/common/render/IRenderedBlock.java @@ -102,12 +102,12 @@ public interface IRenderedBlock { @Override public boolean renderBlock(Block aBlock, RenderBlocks aRenderer, IBlockAccess aWorld, int aX, int aY, int aZ) { aBlock.setBlockBounds(-0.25F, -0.25F, -0.25F, 1.25F, 1.25F, 1.25F); - GT_Renderer_Block.renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); - GT_Renderer_Block.renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); - GT_Renderer_Block.renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); - GT_Renderer_Block.renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); - GT_Renderer_Block.renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); - GT_Renderer_Block.renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); + GTRendererBlock.renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); + GTRendererBlock.renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); + GTRendererBlock.renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); + GTRendererBlock.renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); + GTRendererBlock.renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); + GTRendererBlock.renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, mErrorTexture, false); return true; } } diff --git a/src/main/java/gregtech/common/render/LaserRenderer.java b/src/main/java/gregtech/common/render/LaserRenderer.java new file mode 100644 index 0000000000..4afdbcf5ca --- /dev/null +++ b/src/main/java/gregtech/common/render/LaserRenderer.java @@ -0,0 +1,91 @@ +package gregtech.common.render; + +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.registry.ClientRegistry; +import gregtech.common.tileentities.render.TileEntityLaser; + +public class LaserRenderer extends TileEntitySpecialRenderer { + + private double zOffset = 0.0; + private double xOffset = 0.0; + + // Relative to block size + final private double lineRadius = 0.03; + + final private float lineOpacity = 0.7F; + + final private float laserSpeed = 0.8F; + + public LaserRenderer() { + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityLaser.class, this); + } + + private void maths(float counter) { + float tc = (0.05F * counter); + zOffset = 0.5 + 0.45 * Math.sin(2 * Math.PI * tc); + xOffset = 0.5 + 0.45 * Math.sin(0.5 * Math.PI * tc); + } + + private void renderFakeLine(TileEntityLaser laser, double x1, double y1, double z1, double x2, double y2, + double z2) { + Tessellator tessellator = Tessellator.instance; + tessellator.startDrawingQuads(); + tessellator.setColorRGBA_F(laser.getRed(), laser.getGreen(), laser.getBlue(), lineOpacity); + tessellator.addVertex(x1 - lineRadius, y1, z1); + tessellator.addVertex(x1 + lineRadius, y1, z1); + tessellator.addVertex(x2 + lineRadius, y2, z2); + tessellator.addVertex(x2 - lineRadius, y2, z2); + + tessellator.addVertex(x1, y1, z1 - lineRadius); + tessellator.addVertex(x1, y1, z1 + lineRadius); + tessellator.addVertex(x2, y2, z2 + lineRadius); + tessellator.addVertex(x2, y2, z2 - lineRadius); + tessellator.draw(); + } + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { + final TileEntityLaser ltile = (TileEntityLaser) tile; + + if (ltile.getShouldRender()) { + // Push GL state + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_ENABLE_BIT); + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + + // Full brightness on this thing (Emits glow with shaders) + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.f, 240.f); + + GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); + GL11.glRotated(ltile.rotationAngle, ltile.rotAxisX, ltile.rotAxisY, ltile.rotAxisZ); + GL11.glTranslated(-x - 0.5, -y - 0.5, -z - 0.5); + + if (ltile.realism) { + renderFakeLine(ltile, x + xOffset, y + 4.0, z + zOffset, x + xOffset, y + 0.5, z + zOffset); + } else { + renderFakeLine(ltile, x + 0.5, y + 4.0, z + 0.5, x + xOffset, y + 0.5, z + zOffset); + } + + // Pop GL state + GL11.glPopAttrib(); + GL11.glPopMatrix(); + + // Movement calculations + maths(ltile.counter); + ltile.counter += laserSpeed; + if (ltile.counter >= 80) { + ltile.counter = 0; + } + } + } +} diff --git a/src/main/java/gregtech/common/render/MetaGeneratedToolRenderer.java b/src/main/java/gregtech/common/render/MetaGeneratedToolRenderer.java new file mode 100644 index 0000000000..0e9650401b --- /dev/null +++ b/src/main/java/gregtech/common/render/MetaGeneratedToolRenderer.java @@ -0,0 +1,130 @@ +package gregtech.common.render; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.MinecraftForgeClient; + +import org.lwjgl.opengl.GL11; + +import gregtech.GTMod; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.IToolStats; +import gregtech.api.items.MetaGeneratedTool; + +public class MetaGeneratedToolRenderer implements IItemRenderer { + + public MetaGeneratedToolRenderer() { + for (MetaGeneratedTool tItem : MetaGeneratedTool.sInstances.values()) { + if (tItem != null) { + MinecraftForgeClient.registerItemRenderer(tItem, this); + } + } + } + + @Override + public boolean handleRenderType(ItemStack stack, ItemRenderType type) { + return (type == ItemRenderType.EQUIPPED_FIRST_PERSON) || (type == ItemRenderType.INVENTORY) + || (type == ItemRenderType.EQUIPPED) + || (type == ItemRenderType.ENTITY); + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack stack, ItemRendererHelper helper) { + return type == ItemRenderType.ENTITY && helper == ItemRendererHelper.ENTITY_BOBBING + || (helper == ItemRendererHelper.ENTITY_ROTATION && Minecraft.getMinecraft().gameSettings.fancyGraphics); + } + + @Override + public void renderItem(ItemRenderType type, ItemStack stack, Object... data) { + MetaGeneratedTool item = (MetaGeneratedTool) stack.getItem(); + GL11.glEnable(GL11.GL_BLEND); + GTRenderUtil.applyStandardItemTransform(type); + GL11.glColor3f(1.0F, 1.0F, 1.0F); + + IToolStats toolStats = item != null ? item.getToolStats(stack) : null; + if (toolStats != null) { + renderToolPart(type, stack, toolStats, false); + renderToolPart(type, stack, toolStats, true); + + if ((type == ItemRenderType.INVENTORY) + && (MetaGeneratedTool.getPrimaryMaterial(stack) != Materials._NULL)) { + if (GTMod.gregtechproxy.mRenderItemDurabilityBar) { + IIconContainer iconContainer; + long damage = MetaGeneratedTool.getToolDamage(stack); + long maxDamage = MetaGeneratedTool.getToolMaxDamage(stack); + if (damage <= 0L) { + iconContainer = Textures.ItemIcons.DURABILITY_BAR[8]; + } else if (damage >= maxDamage) { + iconContainer = Textures.ItemIcons.DURABILITY_BAR[0]; + } else { + iconContainer = Textures.ItemIcons.DURABILITY_BAR[((int) Math + .max(0L, Math.min(7L, (maxDamage - damage) * 8L / maxDamage)))]; + } + renderIcon(iconContainer); + } + + if (GTMod.gregtechproxy.mRenderItemChargeBar) { + IIconContainer iconContainer; + Long[] stats = item.getElectricStats(stack); + if ((stats != null) && (stats[3] < 0L)) { + long tCharge = item.getRealCharge(stack); + if (tCharge <= 0L) { + iconContainer = Textures.ItemIcons.ENERGY_BAR[0]; + } else if (tCharge >= stats[0]) { + iconContainer = Textures.ItemIcons.ENERGY_BAR[8]; + } else { + iconContainer = Textures.ItemIcons.ENERGY_BAR[(7 + - (int) Math.max(0L, Math.min(6L, (stats[0] - tCharge) * 7L / stats[0])))]; + } + } else { + iconContainer = null; + } + renderIcon(iconContainer); + } + } + } + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderIcon(IIconContainer iconContainer) { + if (iconContainer != null) { + IIcon icon = iconContainer.getIcon(); + IIcon overlay = iconContainer.getOverlayIcon(); + if (icon != null) { + Minecraft.getMinecraft().renderEngine.bindTexture(iconContainer.getTextureFile()); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GTRenderUtil.renderItemIcon(icon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); + } + if (overlay != null) { + Minecraft.getMinecraft().renderEngine.bindTexture(iconContainer.getTextureFile()); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GTRenderUtil.renderItemIcon(overlay, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); + } + } + } + + private static void renderToolPart(ItemRenderType type, ItemStack stack, IToolStats toolStats, boolean isToolHead) { + IIconContainer iconContainer = toolStats.getIcon(isToolHead, stack); + if (iconContainer != null) { + IIcon icon = iconContainer.getIcon(); + IIcon overlay = iconContainer.getOverlayIcon(); + if (icon != null) { + Minecraft.getMinecraft().renderEngine.bindTexture(iconContainer.getTextureFile()); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + short[] modulation = toolStats.getRGBa(isToolHead, stack); + GL11.glColor3f(modulation[0] / 255.0F, modulation[1] / 255.0F, modulation[2] / 255.0F); + GTRenderUtil.renderItem(type, icon); + GL11.glColor3f(1.0F, 1.0F, 1.0F); + } + if (overlay != null) { + Minecraft.getMinecraft().renderEngine.bindTexture(iconContainer.getTextureFile()); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GTRenderUtil.renderItem(type, overlay); + } + } + } +} diff --git a/src/main/java/gregtech/common/render/MultiTileRenderer.java b/src/main/java/gregtech/common/render/MultiTileRenderer.java new file mode 100644 index 0000000000..8dca8c3c33 --- /dev/null +++ b/src/main/java/gregtech/common/render/MultiTileRenderer.java @@ -0,0 +1,179 @@ +package gregtech.common.render; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import cpw.mods.fml.client.registry.RenderingRegistry; +import gregtech.GTMod; +import gregtech.api.interfaces.ITexture; +import gregtech.api.logic.ModelRenderLogic; +import gregtech.api.logic.interfaces.ModelRenderLogicHost; +import gregtech.api.multitileentity.MultiTileEntityBlock; +import gregtech.api.multitileentity.MultiTileEntityClassContainer; +import gregtech.api.multitileentity.MultiTileEntityRegistry; +import gregtech.api.multitileentity.interfaces.IMultiBlockController; +import gregtech.api.multitileentity.multiblock.base.MultiBlockPart; + +public class MultiTileRenderer implements ISimpleBlockRenderingHandler { + + private final int renderID; + public static MultiTileRenderer INSTANCE; + + public MultiTileRenderer() { + this.renderID = RenderingRegistry.getNextAvailableRenderId(); + INSTANCE = this; + RenderingRegistry.registerBlockHandler(this); + } + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + if (!(block instanceof MultiTileEntityBlock muteBlock)) { + return; + } + + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + + final MultiTileEntityRegistry registry = muteBlock.getRegistry(); + if (registry == null) return; + final MultiTileEntityClassContainer classContainer = registry.getClassContainer(metadata); + if (classContainer == null) return; + renderer.setRenderBoundsFromBlock(muteBlock); + + for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + final ITexture texture = classContainer.getReferenceTileEntity() + .getTexture(side); + if (texture == null) continue; + switch (side) { + case DOWN -> renderYNegative(null, renderer, 0, 0, 0, block, texture, side); + case UP -> renderYPositive(null, renderer, 0, 0, 0, block, texture, side); + case WEST -> renderXNegative(null, renderer, 0, 0, 0, block, texture, side); + case EAST -> renderXPositive(null, renderer, 0, 0, 0, block, texture, side); + case NORTH -> renderZNegative(null, renderer, 0, 0, 0, block, texture, side); + case SOUTH -> renderZPositive(null, renderer, 0, 0, 0, block, texture, side); + default -> { + // Do nothing + } + } + } + + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, + RenderBlocks renderer) { + final TileEntity entity = world.getTileEntity(x, y, z); + if (entity == null) { + return false; + } + + renderer.enableAO = Minecraft.isAmbientOcclusionEnabled() && GTMod.gregtechproxy.mRenderTileAmbientOcclusion; + renderer.useInventoryTint = false; + + if (entity instanceof ModelRenderLogicHost modelEntity && modelEntity.shouldRenderModel()) { + ModelRenderLogic renderLogic = modelEntity.getRenderLogic(); + return true; + } + + if (!(entity instanceof MultiTileBasicRender renderedEntity)) { + return false; + } + + if (entity instanceof MultiBlockPart) { + final IMultiBlockController controller = ((MultiBlockPart) entity).getTarget(false); + if (controller instanceof ModelRenderLogicHost && ((ModelRenderLogicHost) controller).shouldRenderModel()) { + return false; + } + } + + for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + final ITexture texture = renderedEntity.getTexture(side); + if (texture == null) continue; + switch (side) { + case DOWN -> renderYNegative(world, renderer, x, y, z, block, texture, side); + case UP -> renderYPositive(world, renderer, x, y, z, block, texture, side); + case WEST -> renderXNegative(world, renderer, x, y, z, block, texture, side); + case EAST -> renderXPositive(world, renderer, x, y, z, block, texture, side); + case NORTH -> renderZNegative(world, renderer, x, y, z, block, texture, side); + case SOUTH -> renderZPositive(world, renderer, x, y, z, block, texture, side); + default -> { + // Do nothing + } + } + } + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return renderID; + } + + private static void renderYNegative(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, + ITexture texture, ForgeDirection side) { + if (world != null) { + if (!block.shouldSideBeRendered(world, x, y - 1, z, side.ordinal())) return; + Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y - 1, z)); + } + texture.renderYNeg(renderer, block, x, y, z); + } + + private static void renderZNegative(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, + ITexture texture, ForgeDirection side) { + if (world != null) { + if (!block.shouldSideBeRendered(world, x, y, z - 1, side.ordinal())) return; + Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z - 1)); + } + texture.renderZNeg(renderer, block, x, y, z); + } + + private static void renderXNegative(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, + ITexture texture, ForgeDirection side) { + if (world != null) { + if (!block.shouldSideBeRendered(world, x - 1, y, z, side.ordinal())) return; + Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x - 1, y, z)); + } + texture.renderXNeg(renderer, block, x, y, z); + } + + private static void renderYPositive(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, + ITexture texture, ForgeDirection side) { + if (world != null) { + if (!block.shouldSideBeRendered(world, x, y + 1, z, side.ordinal())) return; + Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y + 1, z)); + } + texture.renderYPos(renderer, block, x, y, z); + } + + private static void renderXPositive(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, + ITexture texture, ForgeDirection side) { + if (world != null) { + if (!block.shouldSideBeRendered(world, x + 1, y, z, side.ordinal())) return; + Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x + 1, y, z)); + } + texture.renderXPos(renderer, block, x, y, z); + } + + private static void renderZPositive(IBlockAccess world, RenderBlocks renderer, int x, int y, int z, Block block, + ITexture texture, ForgeDirection side) { + if (world != null) { + if (!block.shouldSideBeRendered(world, x, y, z + 1, side.ordinal())) return; + Tessellator.instance.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z + 1)); + } + texture.renderZPos(renderer, block, x, y, z); + } +} diff --git a/src/main/java/gregtech/common/render/PollutionRenderer.java b/src/main/java/gregtech/common/render/PollutionRenderer.java new file mode 100644 index 0000000000..3b97fc820f --- /dev/null +++ b/src/main/java/gregtech/common/render/PollutionRenderer.java @@ -0,0 +1,251 @@ +package gregtech.common.render; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.client.renderer.OpenGlHelper; +import net.minecraft.potion.Potion; +import net.minecraft.util.MathHelper; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.World; +import net.minecraftforge.client.event.EntityViewRenderEvent; +import net.minecraftforge.event.world.WorldEvent; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.EventPriority; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.common.entities.EntityFXPollution; +import gregtech.common.misc.GTClientPollutionMap; + +@SideOnly(Side.CLIENT) +public class PollutionRenderer { + + private static GTClientPollutionMap pollutionMap; + private static int playerPollution = 0; + + private static final boolean DEBUG = false; + + // PARTICLES_POLLUTION_START + PARTICLES_POLLUTION_END -> Max Particles + private static final int PARTICLES_MAX_NUM = 100; + private static final int PARTICLES_POLLUTION_START = 400000; + private static final int PARTICLES_POLLUTION_END = 3500000; + + private static final int FOG_START_AT_POLLUTION = 400000; + private static final int FOG_MAX_AT_POLLUTION = 7000000; + // jump from linear to exponential fog. x*FOG_MAX_AT_POLLUTION+FOG_START_AT_POLLUTION + private static final double FOG_START_EXP_RATIO = 0.02D; + + private static final float[] fogColor = { 0.3f, 0.25f, 0.1f }; + private static final short[] grassColor = { 230, 180, 40 }; + private static final short[] leavesColor = { 160, 80, 15 }; + private static final short[] liquidColor = { 160, 200, 10 }; + private static final short[] foliageColor = { 160, 80, 15 }; + + // TODO need to soft update some blocks, grass and leaves does more often than liquid it looks like. + + public PollutionRenderer() { + pollutionMap = new GTClientPollutionMap(); + } + + public void preLoad() { + net.minecraftforge.common.MinecraftForge.EVENT_BUS.register(this); + FMLCommonHandler.instance() + .bus() + .register(this); + } + + public void processPacket(ChunkCoordIntPair chunk, int pollution) { + pollutionMap.addChunkPollution(chunk.chunkXPos, chunk.chunkZPos, pollution); + } + + @SubscribeEvent(priority = EventPriority.HIGH) + public void enteredWorld(WorldEvent.Load event) { + EntityClientPlayerMP p = Minecraft.getMinecraft().thePlayer; + if (!event.world.isRemote || p == null) return; + pollutionMap.reset(); + } + + private static int color(int color, int pollution, int low, float high, short[] colors) { + if (pollution < low) return color; + + int r = (color >> 16) & 0xFF; + int g = (color >> 8) & 0xFF; + int b = color & 0xFF; + float p = (pollution - low) / high; + if (p > 1) p = 1; + float pi = 1 - p; + + r = ((int) (r * pi + p * colors[0])) & 0xFF; + g = ((int) (g * pi + p * colors[1])) & 0xFF; + b = ((int) (b * pi + p * colors[2])) & 0xFF; + + return (r & 0xFF) << 16 | (g & 0xFF) << 8 | b & 0xFF; + } + + // Methods for hodgepodge to color grass / foliage blocks etc. + public static int colorGrass(int oColor, int x, int z) { + return color(oColor, pollutionMap.getPollution(x, z) / 1000, 350, 600, grassColor); + } + + public static int colorLeaves(int oColor, int x, int z) { + return color(oColor, pollutionMap.getPollution(x, z) / 1000, 300, 500, leavesColor); + } + + public static int colorLiquid(int oColor, int x, int z) { + return color(oColor, pollutionMap.getPollution(x, z) / 1000, 300, 500, liquidColor); + } + + public static int colorFoliage(int oColor, int x, int z) { + return color(oColor, pollutionMap.getPollution(x, z) / 1000, 300, 500, foliageColor); + } + + public static int getKnownPollution(int x, int z) { + return pollutionMap.getPollution(x, z); + } + + @SubscribeEvent(priority = EventPriority.LOW) + public void manipulateColor(EntityViewRenderEvent.FogColors event) { + if (!DEBUG && Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode) return; + + if (event.block.getMaterial() == Material.water || event.block.getMaterial() == Material.lava) return; + + float x = fogIntensityLastTick > 1 ? 1F : (float) fogIntensityLastTick; + float xi = 1 - x; + + event.red = xi * event.red + x * fogColor[0]; + event.green = xi * event.green + x * fogColor[1]; + event.blue = xi * event.blue + x * fogColor[2]; + } + + private static final int END_MAX_DISTANCE = 192 - 1; + private static double fogIntensityLastTick = 0; + + @SubscribeEvent(priority = EventPriority.LOWEST) + public void renderGTPollutionFog(EntityViewRenderEvent.RenderFogEvent event) { + if (!GTMod.gregtechproxy.mRenderPollutionFog) return; + + if ((!DEBUG && Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode) + || (fogIntensityLastTick < FOG_START_EXP_RATIO)) return; + + if (event.fogMode == 0) { + double v = 1 - fogIntensityLastTick / FOG_START_EXP_RATIO; + // trying to smooth out jump from linear to exponential + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR); + GL11.glFogf(GL11.GL_FOG_START, (float) ((END_MAX_DISTANCE - 20) * 0.75F * v + 20)); + GL11.glFogf(GL11.GL_FOG_END, (float) (END_MAX_DISTANCE * (0.75F + v * 0.25F))); + } + // else if ( event.fogMode < 0) { } + } + + @SubscribeEvent(priority = EventPriority.LOWEST) + public void renderGTPollutionFog(EntityViewRenderEvent.FogDensity event) { + if (!GTMod.gregtechproxy.mRenderPollutionFog) return; + + if (!DEBUG && Minecraft.getMinecraft().thePlayer.capabilities.isCreativeMode) return; + + if (event.entity.isPotionActive(Potion.blindness) || (fogIntensityLastTick < FOG_START_EXP_RATIO) + || event.block.getMaterial() == Material.water + || event.block.getMaterial() == Material.lava) return; + + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP2); + event.density = (float) Math.pow(fogIntensityLastTick - FOG_START_EXP_RATIO, .75F) / 5 + 0.01F; + event.setCanceled(true); + } + + private double lastUpdate = 0; + + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onRenderTick(TickEvent.RenderTickEvent event) { + Minecraft mc = Minecraft.getMinecraft(); + if (mc == null) return; + EntityClientPlayerMP player = mc.thePlayer; + if (player == null) return; + + if (event.phase == TickEvent.Phase.START) { + if (event.renderTickTime < lastUpdate) lastUpdate = lastUpdate - 1; + float step = (float) ((event.renderTickTime - lastUpdate) / 50); + lastUpdate = event.renderTickTime; + + float fogIntensity = (playerPollution - FOG_START_AT_POLLUTION) / (float) FOG_MAX_AT_POLLUTION; + if (fogIntensity > 1) fogIntensity = 1; + else if (fogIntensity < 0) fogIntensity = 0; + + double e = fogIntensity - fogIntensityLastTick; + if (e != 0) { + if (e > 0.2) e = 0.2D; + else if (e < -0.5) e = -0.5D; + + if (e > 0.001D || e < -0.001D) fogIntensityLastTick += step * e; + else fogIntensityLastTick = fogIntensity; + } + } else if (DEBUG) { + drawPollution("Intensity: " + (fogIntensityLastTick * 10000), 0); + drawPollution( + "Pollution: " + pollutionMap.getPollution( + Minecraft.getMinecraft().thePlayer.lastTickPosX, + Minecraft.getMinecraft().thePlayer.lastTickPosZ), + 20); + drawPollution( + "Density: " + + ((float) (Math.pow(fogIntensityLastTick - FOG_START_EXP_RATIO, .75F) / 5 + 0.01F) * 10000), + 40); + } + } + + // Adding dirt particles in the air + @SubscribeEvent(priority = EventPriority.HIGHEST) + public void onClientTick(TickEvent.ClientTickEvent event) { + if (!GTMod.gregtechproxy.mRenderDirtParticles) return; + Minecraft mc = Minecraft.getMinecraft(); + if (mc == null) return; + EntityClientPlayerMP player = mc.thePlayer; + if (player == null || (player.capabilities.isCreativeMode && !DEBUG)) return; + + World w = player.worldObj; + playerPollution = pollutionMap.getPollution(player.lastTickPosX, player.lastTickPosZ); + + float intensity = ((float) playerPollution - PARTICLES_POLLUTION_START) / PARTICLES_POLLUTION_END; + if (intensity < 0) return; + else if (intensity > 1) intensity = 1; + else intensity *= intensity; + + int x = MathHelper.floor_double(player.posX); + int y = MathHelper.floor_double(player.posY); + int z = MathHelper.floor_double(player.posZ); + + int numParticles = Math.round(intensity * PARTICLES_MAX_NUM); + + for (int l = 0; l < numParticles; ++l) { + int i1 = x + w.rand.nextInt(16) - w.rand.nextInt(16); + int j1 = y + w.rand.nextInt(16) - w.rand.nextInt(16); + int k1 = z + w.rand.nextInt(16) - w.rand.nextInt(16); + Block block = w.getBlock(i1, j1, k1); + + if (block.getMaterial() == Material.air) { + EntityFX fx = new EntityFXPollution( + w, + (float) i1 + w.rand.nextFloat(), + (float) j1 + w.rand.nextFloat(), + (float) k1 + w.rand.nextFloat()); + mc.effectRenderer.addEffect(fx); + } + } + } + + private void drawPollution(String text, int off) { + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_BLEND); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + Minecraft.getMinecraft().fontRenderer.drawStringWithShadow(text, 0, off, 0xFFFFFFFF); + GL11.glDisable(GL11.GL_BLEND); + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/gregtech/common/render/WormholeRenderer.java b/src/main/java/gregtech/common/render/WormholeRenderer.java new file mode 100644 index 0000000000..c9e2b61fe5 --- /dev/null +++ b/src/main/java/gregtech/common/render/WormholeRenderer.java @@ -0,0 +1,79 @@ +package gregtech.common.render; + +import static tectech.rendering.EOH.EOHRenderingUtils.addRenderedBlockInWorld; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.init.Blocks; +import net.minecraft.tileentity.TileEntity; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.registry.ClientRegistry; +import gregtech.common.tileentities.render.TileEntityWormhole; + +public class WormholeRenderer extends TileEntitySpecialRenderer { + + public WormholeRenderer() { + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWormhole.class, this); + } + + private static final double trimPercentage = .95; + private static final double corePercentage = trimPercentage / Math.sqrt(3); + + private static void render(Block coreBlock, double rotation) { + + GL11.glPushMatrix(); + GL11.glRotated(rotation, 2, 1, 0); + GL11.glScaled(-1, -1, -1); + + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setColorOpaque_F(1f, 1f, 1f); + addRenderedBlockInWorld(Blocks.quartz_block, 0, 0, 0, 0); + Tessellator.instance.draw(); + + GL11.glScaled(trimPercentage, trimPercentage, trimPercentage); + + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setColorOpaque_F(0.1f, 0.1f, 0.1f); + addRenderedBlockInWorld(Blocks.coal_block, 0, 0, 0, 0); + Tessellator.instance.draw(); + GL11.glPopMatrix(); + + if (coreBlock != null) { + GL11.glPushMatrix(); + GL11.glScaled(corePercentage, corePercentage, corePercentage); + GL11.glRotated(rotation, 0, -2, .1); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setColorOpaque_F(1f, 1f, 1f); + addRenderedBlockInWorld(coreBlock, 0, 0, 0, 0); + Tessellator.instance.draw(); + GL11.glPopMatrix(); + } + + } + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { + + if (tile instanceof TileEntityWormhole wTile) { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); + GL11.glScaled(wTile.targetRadius, wTile.targetRadius, wTile.targetRadius); + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glDisable(GL11.GL_LIGHTING); + + double rotationTimer = wTile.getWorldObj() + .getWorldInfo() + .getWorldTotalTime() + timeSinceLastTick; + + this.bindTexture(TextureMap.locationBlocksTexture); + render(wTile.getBlock(), rotationTimer); + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } + } +} diff --git a/src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java b/src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java index acb830de58..eac929d047 100644 --- a/src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java +++ b/src/main/java/gregtech/common/render/items/CosmicNeutroniumRenderer.java @@ -1,6 +1,6 @@ package gregtech.common.render.items; -import static gregtech.common.render.GT_RenderUtil.colorGTItem; +import static gregtech.common.render.GTRenderUtil.colorGTItem; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderItem; @@ -14,9 +14,9 @@ import org.lwjgl.opengl.GL12; import com.gtnewhorizons.modularui.api.math.Pos2d; import gregtech.api.enums.Textures; -import gregtech.common.render.GT_RenderUtil; +import gregtech.common.render.GTRenderUtil; -public class CosmicNeutroniumRenderer extends GT_GeneratedMaterial_Renderer { +public class CosmicNeutroniumRenderer extends GeneratedMaterialRenderer { // spotless:off private static final Pos2d point0 = new Pos2d(0 - 10, 0 - 10); @@ -90,10 +90,10 @@ public class CosmicNeutroniumRenderer extends GT_GeneratedMaterial_Renderer { colorGTItem(item); if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) { - GT_RenderUtil.renderItemIcon(icon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); + GTRenderUtil.renderItemIcon(icon, 16.0D, 0.001D, 0.0F, 0.0F, -1.0F); } else { GL11.glEnable(GL11.GL_DEPTH_TEST); - GT_RenderUtil.renderItem(type, icon); + GTRenderUtil.renderItem(type, icon); } GL11.glPopMatrix(); } diff --git a/src/main/java/gregtech/common/render/items/DataStickRenderer.java b/src/main/java/gregtech/common/render/items/DataStickRenderer.java new file mode 100644 index 0000000000..3411c24c83 --- /dev/null +++ b/src/main/java/gregtech/common/render/items/DataStickRenderer.java @@ -0,0 +1,42 @@ +package gregtech.common.render.items; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +import gregtech.api.util.AssemblyLineUtils; + +// borrow form ae2 + +public class DataStickRenderer implements IItemRenderer { + + private final RenderItem ri = new RenderItem(); + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + final boolean isShiftHeld = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); + return type == ItemRenderType.INVENTORY && isShiftHeld; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return false; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + final ItemStack is = AssemblyLineUtils.getDataStickOutput(item); + final Minecraft mc = Minecraft.getMinecraft(); + + GL11.glPushAttrib(GL11.GL_ENABLE_BIT | GL11.GL_COLOR_BUFFER_BIT); + RenderHelper.enableGUIStandardItemLighting(); + this.ri.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.getTextureManager(), is, 0, 0); + RenderHelper.disableStandardItemLighting(); + GL11.glPopAttrib(); + } +} diff --git a/src/main/java/gregtech/common/render/items/GT_DataStick_Renderer.java b/src/main/java/gregtech/common/render/items/GT_DataStick_Renderer.java deleted file mode 100644 index 668b1daa6c..0000000000 --- a/src/main/java/gregtech/common/render/items/GT_DataStick_Renderer.java +++ /dev/null @@ -1,42 +0,0 @@ -package gregtech.common.render.items; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.RenderHelper; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.item.ItemStack; -import net.minecraftforge.client.IItemRenderer; - -import org.lwjgl.input.Keyboard; -import org.lwjgl.opengl.GL11; - -import gregtech.api.util.GT_AssemblyLineUtils; - -// borrow form ae2 - -public class GT_DataStick_Renderer implements IItemRenderer { - - private final RenderItem ri = new RenderItem(); - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - final boolean isShiftHeld = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); - return type == ItemRenderType.INVENTORY && isShiftHeld; - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return false; - } - - @Override - public void renderItem(ItemRenderType type, ItemStack item, Object... data) { - final ItemStack is = GT_AssemblyLineUtils.getDataStickOutput(item); - final Minecraft mc = Minecraft.getMinecraft(); - - GL11.glPushAttrib(GL11.GL_ENABLE_BIT | GL11.GL_COLOR_BUFFER_BIT); - RenderHelper.enableGUIStandardItemLighting(); - this.ri.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.getTextureManager(), is, 0, 0); - RenderHelper.disableStandardItemLighting(); - GL11.glPopAttrib(); - } -} diff --git a/src/main/java/gregtech/common/render/items/GT_GeneratedItem_Renderer.java b/src/main/java/gregtech/common/render/items/GT_GeneratedItem_Renderer.java deleted file mode 100644 index 84045446c2..0000000000 --- a/src/main/java/gregtech/common/render/items/GT_GeneratedItem_Renderer.java +++ /dev/null @@ -1,166 +0,0 @@ -package gregtech.common.render.items; - -import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Aluminium; -import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Chrome; -import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Iridium; -import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Neutronium; -import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Osmium; -import static gregtech.api.enums.ItemList.Large_Fluid_Cell_StainlessSteel; -import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Steel; -import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Titanium; -import static gregtech.api.enums.ItemList.Large_Fluid_Cell_TungstenSteel; -import static gregtech.api.enums.Mods.HodgePodge; - -import javax.annotation.Nullable; - -import net.minecraft.client.Minecraft; -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.fluids.FluidStack; - -import org.lwjgl.opengl.GL11; - -import com.mitchej123.hodgepodge.textures.IPatchedTextureAtlasSprite; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.items.GT_MetaGenerated_Item; -import gregtech.api.util.GT_Utility; -import gregtech.common.render.GT_RenderUtil; -import gregtech.loaders.ExtraIcons; - -public class GT_GeneratedItem_Renderer implements IItemRenderer { - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - return type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON - || type == ItemRenderType.INVENTORY - || type == ItemRenderType.ENTITY; - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return type == ItemRenderType.ENTITY && helper == ItemRendererHelper.ENTITY_BOBBING - || (helper == ItemRendererHelper.ENTITY_ROTATION && Minecraft.getMinecraft().gameSettings.fancyGraphics); - } - - @Override - public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { - short aMetaData = (short) aStack.getItemDamage(); - if (!(aStack.getItem() instanceof GT_MetaGenerated_Item aItem)) return; - - GL11.glEnable(GL11.GL_BLEND); - GL11.glColor3f(1.0F, 1.0F, 1.0F); - IIcon tIcon; - if (aItem.mIconList[(aMetaData - aItem.mOffset)].length > 1) { - Long[] tStats = aItem.mElectricStats.get(aMetaData); - - if ((tStats != null) && (tStats[3] < 0L)) { - long tCharge = aItem.getRealCharge(aStack); - - if (tCharge <= 0L) { - tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][1]; - } else { - - if (tCharge >= tStats[0]) { - tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][8]; - } else { - tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][(7 - - (int) Math.max(0L, Math.min(5L, (tStats[0] - tCharge) * 6L / tStats[0])))]; - } - } - } else { - tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][0]; - } - } else { - tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][0]; - } - - if (tIcon == null) tIcon = Textures.ItemIcons.RENDERING_ERROR.getIcon(); - - markNeedsAnimationUpdate(tIcon); - - ItemList largeFluidCell = getLargeFluidCell(aStack); - if (largeFluidCell != null) { - renderLargeFluidCellExtraParts(type, largeFluidCell, aStack); - } - - Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GT_RenderUtil.renderItem(type, tIcon); - GL11.glDisable(GL11.GL_BLEND); - } - - @Nullable - private static ItemList getLargeFluidCell(ItemStack stack) { - if (isSame(Large_Fluid_Cell_Steel, stack)) return Large_Fluid_Cell_Steel; - if (isSame(Large_Fluid_Cell_Aluminium, stack)) return Large_Fluid_Cell_Aluminium; - if (isSame(Large_Fluid_Cell_TungstenSteel, stack)) return Large_Fluid_Cell_TungstenSteel; - if (isSame(Large_Fluid_Cell_StainlessSteel, stack)) return Large_Fluid_Cell_StainlessSteel; - if (isSame(Large_Fluid_Cell_Titanium, stack)) return Large_Fluid_Cell_Titanium; - if (isSame(Large_Fluid_Cell_Chrome, stack)) return Large_Fluid_Cell_Chrome; - if (isSame(Large_Fluid_Cell_Iridium, stack)) return Large_Fluid_Cell_Iridium; - if (isSame(Large_Fluid_Cell_Osmium, stack)) return Large_Fluid_Cell_Osmium; - if (isSame(Large_Fluid_Cell_Neutronium, stack)) return Large_Fluid_Cell_Neutronium; - - return null; - } - - private void renderLargeFluidCellExtraParts(IItemRenderer.ItemRenderType type, ItemList item, ItemStack stack) { - - IIcon inner = switch (item) { - case Large_Fluid_Cell_Steel -> ExtraIcons.steelLargeCellInner; - case Large_Fluid_Cell_Aluminium -> ExtraIcons.aluminiumLargeCellInner; - case Large_Fluid_Cell_StainlessSteel -> ExtraIcons.stainlesssteelLargeCellInner; - case Large_Fluid_Cell_Titanium -> ExtraIcons.titaniumLargeCellInner; - case Large_Fluid_Cell_TungstenSteel -> ExtraIcons.tungstensteelLargeCellInner; - case Large_Fluid_Cell_Iridium -> ExtraIcons.iridiumLargeCellInner; - case Large_Fluid_Cell_Osmium -> ExtraIcons.osmiumLargeCellInner; - case Large_Fluid_Cell_Chrome -> ExtraIcons.chromiumLargeCellInner; - case Large_Fluid_Cell_Neutronium -> ExtraIcons.neutroniumLargeCellInner; - default -> Textures.ItemIcons.RENDERING_ERROR.getIcon(); - }; - - // Empty inner side - Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); - markNeedsAnimationUpdate(inner); - GT_RenderUtil.renderItem(type, inner); - - FluidStack fluidStack = GT_Utility.getFluidForFilledItem(stack, true); - - if (fluidStack != null && fluidStack.getFluid() != null) { - IIcon fluidIcon = fluidStack.getFluid() - .getIcon(fluidStack); - if (fluidIcon == null) { - fluidIcon = Textures.ItemIcons.RENDERING_ERROR.getIcon(); - } - int fluidColor = fluidStack.getFluid() - .getColor(fluidStack); - - Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture); - markNeedsAnimationUpdate(fluidIcon); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glDepthFunc(GL11.GL_EQUAL); - GL11.glColor3ub((byte) (fluidColor >> 16), (byte) (fluidColor >> 8), (byte) fluidColor); - GT_RenderUtil.renderItem(type, fluidIcon); - - GL11.glColor3ub((byte) -1, (byte) -1, (byte) -1); - GL11.glDepthFunc(GL11.GL_LEQUAL); - } - } - - private static boolean isSame(ItemList item, ItemStack stack) { - ItemStack internal = item.getInternalStack_unsafe(); - if (GT_Utility.isStackInvalid(internal)) return false; - - return internal.getItem() == stack.getItem() && internal.getItemDamage() == stack.getItemDamage(); - } - - protected void markNeedsAnimationUpdate(IIcon icon) { - if (HodgePodge.isModLoaded() && icon instanceof IPatchedTextureAtlasSprite) { - ((IPatchedTextureAtlasSprite) icon).markNeedsAnimationUpdate(); - } - } -} diff --git a/src/main/java/gregtech/common/render/items/GT_GeneratedMaterial_Renderer.java b/src/main/java/gregtech/common/render/items/GT_GeneratedMaterial_Renderer.java deleted file mode 100644 index a67d5512ed..0000000000 --- a/src/main/java/gregtech/common/render/items/GT_GeneratedMaterial_Renderer.java +++ /dev/null @@ -1,130 +0,0 @@ -package gregtech.common.render.items; - -import static gregtech.api.enums.Mods.HodgePodge; - -import net.minecraft.client.Minecraft; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.lwjgl.opengl.GL11; - -import com.mitchej123.hodgepodge.textures.IPatchedTextureAtlasSprite; - -import codechicken.lib.render.TextureUtils; -import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; -import gregtech.api.util.GT_Utility; -import gregtech.common.render.GT_RenderUtil; - -public class GT_GeneratedMaterial_Renderer implements IItemRenderer { - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - return type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON - || type == ItemRenderType.INVENTORY - || type == ItemRenderType.ENTITY; - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return type == ItemRenderType.ENTITY && helper == ItemRendererHelper.ENTITY_BOBBING - || (helper == ItemRendererHelper.ENTITY_ROTATION && Minecraft.getMinecraft().gameSettings.fancyGraphics); - } - - /** - * Handle special fluid display rendering. Return false if does not need such kind of handling. Note: annotations - * should not be rendered here. Only render the fluid texture. Parameters are values passed from - * {@link IItemRenderer#renderItem(ItemRenderType, ItemStack, Object...)} verbatim. Do not modify the argument. - *

- * While this is called, BLEND and ALPHA_TEST is on. It is expected that these remain enabled while exit. - * - * @return true if did special fluid display rendering. false otherwise. - */ - public boolean renderFluidDisplayItem(ItemRenderType type, ItemStack aStack, Object... data) { - return false; - } - - @Override - public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { - short aMetaData = (short) aStack.getItemDamage(); - if (!(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer aItem)) return; - - int passes = 1; - if (aItem.requiresMultipleRenderPasses()) { - passes = aItem.getRenderPasses(aMetaData); - } - - for (int pass = 0; pass < passes; pass++) { - IIcon tIcon = aItem.getIcon(aMetaData, pass); - IIcon tOverlay = aItem.getOverlayIcon(aMetaData, pass); - FluidStack aFluid = GT_Utility.getFluidForFilledItem(aStack, true); - - GL11.glEnable(GL11.GL_BLEND); - GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - GL11.glEnable(GL11.GL_ALPHA_TEST); - - if (tIcon != null) { - markNeedsAnimationUpdate(tIcon); - renderRegularItem(type, aStack, tIcon, aFluid == null, pass, data); - } - - if (tOverlay != null && aFluid != null && aFluid.getFluid() != null) { - IIcon fluidIcon = aFluid.getFluid() - .getIcon(aFluid); - if (fluidIcon != null) { - markNeedsAnimationUpdate(fluidIcon); - // Adds colour to a cells fluid. Does not colour full fluid icons as shown in NEI etc. - renderContainedFluid(type, aFluid, fluidIcon); - } - } - - if (tOverlay != null) { - GL11.glColor3f(1.0F, 1.0F, 1.0F); - TextureUtils.bindAtlas(aItem.getSpriteNumber()); - markNeedsAnimationUpdate(tOverlay); - renderItemOverlay(type, tOverlay); - } - - GL11.glDisable(GL11.GL_BLEND); - } - } - - protected void renderRegularItem(ItemRenderType type, ItemStack aStack, IIcon icon, boolean shouldModulateColor, - int pass, Object... data) { - renderRegularItem(type, aStack, icon, shouldModulateColor); - } - - protected void renderRegularItem(ItemRenderType type, ItemStack aStack, IIcon icon, boolean shouldModulateColor) { - if (!(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer aItem)) return; - - if (shouldModulateColor) { - short[] tModulation = aItem.getRGBa(aStack); - GL11.glColor3f(tModulation[0] / 255.0F, tModulation[1] / 255.0F, tModulation[2] / 255.0F); - } - - GT_RenderUtil.renderItem(type, icon); - } - - protected void renderContainedFluid(ItemRenderType type, FluidStack aFluidStack, IIcon fluidIcon) { - Fluid aFluid = aFluidStack.getFluid(); - int tColor = aFluid.getColor(aFluidStack); - GL11.glColor3f((tColor >> 16 & 0xFF) / 255.0F, (tColor >> 8 & 0xFF) / 255.0F, (tColor & 0xFF) / 255.0F); - TextureUtils.bindAtlas(aFluid.getSpriteNumber()); - - GL11.glDepthFunc(GL11.GL_EQUAL); - GT_RenderUtil.renderItem(type, fluidIcon); - GL11.glDepthFunc(GL11.GL_LEQUAL); - } - - protected void renderItemOverlay(ItemRenderType type, IIcon overlay) { - GT_RenderUtil.renderItem(type, overlay); - } - - protected void markNeedsAnimationUpdate(IIcon icon) { - if (HodgePodge.isModLoaded() && icon instanceof IPatchedTextureAtlasSprite) { - ((IPatchedTextureAtlasSprite) icon).markNeedsAnimationUpdate(); - } - } -} diff --git a/src/main/java/gregtech/common/render/items/GT_MetaGenerated_Item_Renderer.java b/src/main/java/gregtech/common/render/items/GT_MetaGenerated_Item_Renderer.java deleted file mode 100644 index d7425c2fcb..0000000000 --- a/src/main/java/gregtech/common/render/items/GT_MetaGenerated_Item_Renderer.java +++ /dev/null @@ -1,85 +0,0 @@ -package gregtech.common.render.items; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.client.IItemRenderer; -import net.minecraftforge.client.MinecraftForgeClient; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.render.GT_RenderUtil; - -public class GT_MetaGenerated_Item_Renderer implements IItemRenderer { - - private final IItemRenderer mItemRenderer = new GT_GeneratedItem_Renderer(); - private final IItemRenderer mMaterialRenderer = new GT_GeneratedMaterial_Renderer(); - - private final IItemRenderer mDataStickRenderer = new GT_DataStick_Renderer(); - - public GT_MetaGenerated_Item_Renderer() {} - - public void registerItem(T item) { - MinecraftForgeClient.registerItemRenderer(item, this); - } - - @Override - public boolean handleRenderType(ItemStack aStack, ItemRenderType aType) { - if ((GT_Utility.isStackInvalid(aStack)) || (aStack.getItemDamage() < 0) - || !(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer) - || !((IGT_ItemWithMaterialRenderer) aStack.getItem()).shouldUseCustomRenderer(aStack.getItemDamage())) { - return false; - } - return getRendererForItemStack(aStack).handleRenderType(aStack, aType); - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType aType, ItemStack aStack, ItemRendererHelper aHelper) { - if (GT_Utility.isStackInvalid(aStack)) { - return false; - } - return getRendererForItemStack(aStack).shouldUseRenderHelper(aType, aStack, aHelper); - } - - @Override - public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { - GT_RenderUtil.applyStandardItemTransform(type); - - IItemRenderer itemRenderer = getRendererForItemStack(aStack); - itemRenderer.renderItem(type, aStack, data); - } - - private IItemRenderer getRendererForItemStack(ItemStack aStack) { - short aMetaData = (short) aStack.getItemDamage(); - IGT_ItemWithMaterialRenderer aItem = (IGT_ItemWithMaterialRenderer) aStack.getItem(); - - if (aItem != null && aItem.allowMaterialRenderer(aMetaData)) { - IItemRenderer aMaterialRenderer = aItem.getMaterialRenderer(aMetaData); - - // Handle fluid rendering. - if (aMaterialRenderer == null) { - ItemData itemData = GT_OreDictUnificator.getAssociation(aStack); - if (itemData != null) { - Materials material = itemData.mMaterial.mMaterial; - if (material.renderer != null) { - aMaterialRenderer = material.renderer; - } - } - } - - return aMaterialRenderer != null ? aMaterialRenderer : mMaterialRenderer; - } - - // handle data stick - if (aStack.getItem() == ItemList.Tool_DataStick.getItem() && aStack.hasTagCompound() - && aStack.getTagCompound() - .hasKey("output")) { - return mDataStickRenderer; - } - - return mItemRenderer; - } -} diff --git a/src/main/java/gregtech/common/render/items/GaiaSpiritRenderer.java b/src/main/java/gregtech/common/render/items/GaiaSpiritRenderer.java index 08663adf4d..9de4afbef0 100644 --- a/src/main/java/gregtech/common/render/items/GaiaSpiritRenderer.java +++ b/src/main/java/gregtech/common/render/items/GaiaSpiritRenderer.java @@ -7,21 +7,21 @@ import net.minecraft.util.IIcon; import org.lwjgl.opengl.GL11; -import gregtech.GT_Mod; -import gregtech.common.render.GT_RenderUtil; +import gregtech.GTMod; +import gregtech.common.render.GTRenderUtil; -public class GaiaSpiritRenderer extends GT_GeneratedMaterial_Renderer { +public class GaiaSpiritRenderer extends GeneratedMaterialRenderer { @Override protected void renderRegularItem(ItemRenderType type, ItemStack aStack, IIcon icon, boolean shouldModulateColor) { - long animationTicks = GT_Mod.gregtechproxy.getAnimationTicks(); - float partialTicks = GT_Mod.gregtechproxy.getPartialRenderTicks(); + long animationTicks = GTMod.gregtechproxy.getAnimationTicks(); + float partialTicks = GTMod.gregtechproxy.getPartialRenderTicks(); if (shouldModulateColor) { Color color = Color.getHSBColor((animationTicks % 360 + partialTicks) % 180 / 180f, 0.4f, 0.9f); GL11.glColor3f(color.getRed() / 255.0F, color.getGreen() / 255.0F, color.getBlue() / 255.0F); } - GT_RenderUtil.renderItem(type, icon); + GTRenderUtil.renderItem(type, icon); } } diff --git a/src/main/java/gregtech/common/render/items/GeneratedItemRenderer.java b/src/main/java/gregtech/common/render/items/GeneratedItemRenderer.java new file mode 100644 index 0000000000..880e4b11c9 --- /dev/null +++ b/src/main/java/gregtech/common/render/items/GeneratedItemRenderer.java @@ -0,0 +1,166 @@ +package gregtech.common.render.items; + +import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Aluminium; +import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Chrome; +import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Iridium; +import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Neutronium; +import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Osmium; +import static gregtech.api.enums.ItemList.Large_Fluid_Cell_StainlessSteel; +import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Steel; +import static gregtech.api.enums.ItemList.Large_Fluid_Cell_Titanium; +import static gregtech.api.enums.ItemList.Large_Fluid_Cell_TungstenSteel; +import static gregtech.api.enums.Mods.HodgePodge; + +import javax.annotation.Nullable; + +import net.minecraft.client.Minecraft; +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.fluids.FluidStack; + +import org.lwjgl.opengl.GL11; + +import com.mitchej123.hodgepodge.textures.IPatchedTextureAtlasSprite; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.items.MetaGeneratedItem; +import gregtech.api.util.GTUtility; +import gregtech.common.render.GTRenderUtil; +import gregtech.loaders.ExtraIcons; + +public class GeneratedItemRenderer implements IItemRenderer { + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON + || type == ItemRenderType.INVENTORY + || type == ItemRenderType.ENTITY; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return type == ItemRenderType.ENTITY && helper == ItemRendererHelper.ENTITY_BOBBING + || (helper == ItemRendererHelper.ENTITY_ROTATION && Minecraft.getMinecraft().gameSettings.fancyGraphics); + } + + @Override + public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { + short aMetaData = (short) aStack.getItemDamage(); + if (!(aStack.getItem() instanceof MetaGeneratedItem aItem)) return; + + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor3f(1.0F, 1.0F, 1.0F); + IIcon tIcon; + if (aItem.mIconList[(aMetaData - aItem.mOffset)].length > 1) { + Long[] tStats = aItem.mElectricStats.get(aMetaData); + + if ((tStats != null) && (tStats[3] < 0L)) { + long tCharge = aItem.getRealCharge(aStack); + + if (tCharge <= 0L) { + tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][1]; + } else { + + if (tCharge >= tStats[0]) { + tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][8]; + } else { + tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][(7 + - (int) Math.max(0L, Math.min(5L, (tStats[0] - tCharge) * 6L / tStats[0])))]; + } + } + } else { + tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][0]; + } + } else { + tIcon = aItem.mIconList[(aMetaData - aItem.mOffset)][0]; + } + + if (tIcon == null) tIcon = Textures.ItemIcons.RENDERING_ERROR.getIcon(); + + markNeedsAnimationUpdate(tIcon); + + ItemList largeFluidCell = getLargeFluidCell(aStack); + if (largeFluidCell != null) { + renderLargeFluidCellExtraParts(type, largeFluidCell, aStack); + } + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GTRenderUtil.renderItem(type, tIcon); + GL11.glDisable(GL11.GL_BLEND); + } + + @Nullable + private static ItemList getLargeFluidCell(ItemStack stack) { + if (isSame(Large_Fluid_Cell_Steel, stack)) return Large_Fluid_Cell_Steel; + if (isSame(Large_Fluid_Cell_Aluminium, stack)) return Large_Fluid_Cell_Aluminium; + if (isSame(Large_Fluid_Cell_TungstenSteel, stack)) return Large_Fluid_Cell_TungstenSteel; + if (isSame(Large_Fluid_Cell_StainlessSteel, stack)) return Large_Fluid_Cell_StainlessSteel; + if (isSame(Large_Fluid_Cell_Titanium, stack)) return Large_Fluid_Cell_Titanium; + if (isSame(Large_Fluid_Cell_Chrome, stack)) return Large_Fluid_Cell_Chrome; + if (isSame(Large_Fluid_Cell_Iridium, stack)) return Large_Fluid_Cell_Iridium; + if (isSame(Large_Fluid_Cell_Osmium, stack)) return Large_Fluid_Cell_Osmium; + if (isSame(Large_Fluid_Cell_Neutronium, stack)) return Large_Fluid_Cell_Neutronium; + + return null; + } + + private void renderLargeFluidCellExtraParts(IItemRenderer.ItemRenderType type, ItemList item, ItemStack stack) { + + IIcon inner = switch (item) { + case Large_Fluid_Cell_Steel -> ExtraIcons.steelLargeCellInner; + case Large_Fluid_Cell_Aluminium -> ExtraIcons.aluminiumLargeCellInner; + case Large_Fluid_Cell_StainlessSteel -> ExtraIcons.stainlesssteelLargeCellInner; + case Large_Fluid_Cell_Titanium -> ExtraIcons.titaniumLargeCellInner; + case Large_Fluid_Cell_TungstenSteel -> ExtraIcons.tungstensteelLargeCellInner; + case Large_Fluid_Cell_Iridium -> ExtraIcons.iridiumLargeCellInner; + case Large_Fluid_Cell_Osmium -> ExtraIcons.osmiumLargeCellInner; + case Large_Fluid_Cell_Chrome -> ExtraIcons.chromiumLargeCellInner; + case Large_Fluid_Cell_Neutronium -> ExtraIcons.neutroniumLargeCellInner; + default -> Textures.ItemIcons.RENDERING_ERROR.getIcon(); + }; + + // Empty inner side + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationItemsTexture); + markNeedsAnimationUpdate(inner); + GTRenderUtil.renderItem(type, inner); + + FluidStack fluidStack = GTUtility.getFluidForFilledItem(stack, true); + + if (fluidStack != null && fluidStack.getFluid() != null) { + IIcon fluidIcon = fluidStack.getFluid() + .getIcon(fluidStack); + if (fluidIcon == null) { + fluidIcon = Textures.ItemIcons.RENDERING_ERROR.getIcon(); + } + int fluidColor = fluidStack.getFluid() + .getColor(fluidStack); + + Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.locationBlocksTexture); + markNeedsAnimationUpdate(fluidIcon); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glColor3ub((byte) (fluidColor >> 16), (byte) (fluidColor >> 8), (byte) fluidColor); + GTRenderUtil.renderItem(type, fluidIcon); + + GL11.glColor3ub((byte) -1, (byte) -1, (byte) -1); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + } + + private static boolean isSame(ItemList item, ItemStack stack) { + ItemStack internal = item.getInternalStack_unsafe(); + if (GTUtility.isStackInvalid(internal)) return false; + + return internal.getItem() == stack.getItem() && internal.getItemDamage() == stack.getItemDamage(); + } + + protected void markNeedsAnimationUpdate(IIcon icon) { + if (HodgePodge.isModLoaded() && icon instanceof IPatchedTextureAtlasSprite) { + ((IPatchedTextureAtlasSprite) icon).markNeedsAnimationUpdate(); + } + } +} diff --git a/src/main/java/gregtech/common/render/items/GeneratedMaterialRenderer.java b/src/main/java/gregtech/common/render/items/GeneratedMaterialRenderer.java new file mode 100644 index 0000000000..8d7b05981f --- /dev/null +++ b/src/main/java/gregtech/common/render/items/GeneratedMaterialRenderer.java @@ -0,0 +1,130 @@ +package gregtech.common.render.items; + +import static gregtech.api.enums.Mods.HodgePodge; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.lwjgl.opengl.GL11; + +import com.mitchej123.hodgepodge.textures.IPatchedTextureAtlasSprite; + +import codechicken.lib.render.TextureUtils; +import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; +import gregtech.api.util.GTUtility; +import gregtech.common.render.GTRenderUtil; + +public class GeneratedMaterialRenderer implements IItemRenderer { + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON + || type == ItemRenderType.INVENTORY + || type == ItemRenderType.ENTITY; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return type == ItemRenderType.ENTITY && helper == ItemRendererHelper.ENTITY_BOBBING + || (helper == ItemRendererHelper.ENTITY_ROTATION && Minecraft.getMinecraft().gameSettings.fancyGraphics); + } + + /** + * Handle special fluid display rendering. Return false if does not need such kind of handling. Note: annotations + * should not be rendered here. Only render the fluid texture. Parameters are values passed from + * {@link IItemRenderer#renderItem(ItemRenderType, ItemStack, Object...)} verbatim. Do not modify the argument. + *

+ * While this is called, BLEND and ALPHA_TEST is on. It is expected that these remain enabled while exit. + * + * @return true if did special fluid display rendering. false otherwise. + */ + public boolean renderFluidDisplayItem(ItemRenderType type, ItemStack aStack, Object... data) { + return false; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { + short aMetaData = (short) aStack.getItemDamage(); + if (!(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer aItem)) return; + + int passes = 1; + if (aItem.requiresMultipleRenderPasses()) { + passes = aItem.getRenderPasses(aMetaData); + } + + for (int pass = 0; pass < passes; pass++) { + IIcon tIcon = aItem.getIcon(aMetaData, pass); + IIcon tOverlay = aItem.getOverlayIcon(aMetaData, pass); + FluidStack aFluid = GTUtility.getFluidForFilledItem(aStack, true); + + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glEnable(GL11.GL_ALPHA_TEST); + + if (tIcon != null) { + markNeedsAnimationUpdate(tIcon); + renderRegularItem(type, aStack, tIcon, aFluid == null, pass, data); + } + + if (tOverlay != null && aFluid != null && aFluid.getFluid() != null) { + IIcon fluidIcon = aFluid.getFluid() + .getIcon(aFluid); + if (fluidIcon != null) { + markNeedsAnimationUpdate(fluidIcon); + // Adds colour to a cells fluid. Does not colour full fluid icons as shown in NEI etc. + renderContainedFluid(type, aFluid, fluidIcon); + } + } + + if (tOverlay != null) { + GL11.glColor3f(1.0F, 1.0F, 1.0F); + TextureUtils.bindAtlas(aItem.getSpriteNumber()); + markNeedsAnimationUpdate(tOverlay); + renderItemOverlay(type, tOverlay); + } + + GL11.glDisable(GL11.GL_BLEND); + } + } + + protected void renderRegularItem(ItemRenderType type, ItemStack aStack, IIcon icon, boolean shouldModulateColor, + int pass, Object... data) { + renderRegularItem(type, aStack, icon, shouldModulateColor); + } + + protected void renderRegularItem(ItemRenderType type, ItemStack aStack, IIcon icon, boolean shouldModulateColor) { + if (!(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer aItem)) return; + + if (shouldModulateColor) { + short[] tModulation = aItem.getRGBa(aStack); + GL11.glColor3f(tModulation[0] / 255.0F, tModulation[1] / 255.0F, tModulation[2] / 255.0F); + } + + GTRenderUtil.renderItem(type, icon); + } + + protected void renderContainedFluid(ItemRenderType type, FluidStack aFluidStack, IIcon fluidIcon) { + Fluid aFluid = aFluidStack.getFluid(); + int tColor = aFluid.getColor(aFluidStack); + GL11.glColor3f((tColor >> 16 & 0xFF) / 255.0F, (tColor >> 8 & 0xFF) / 255.0F, (tColor & 0xFF) / 255.0F); + TextureUtils.bindAtlas(aFluid.getSpriteNumber()); + + GL11.glDepthFunc(GL11.GL_EQUAL); + GTRenderUtil.renderItem(type, fluidIcon); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + protected void renderItemOverlay(ItemRenderType type, IIcon overlay) { + GTRenderUtil.renderItem(type, overlay); + } + + protected void markNeedsAnimationUpdate(IIcon icon) { + if (HodgePodge.isModLoaded() && icon instanceof IPatchedTextureAtlasSprite) { + ((IPatchedTextureAtlasSprite) icon).markNeedsAnimationUpdate(); + } + } +} diff --git a/src/main/java/gregtech/common/render/items/GlitchEffectRenderer.java b/src/main/java/gregtech/common/render/items/GlitchEffectRenderer.java index f7e4413c97..b73a75f354 100644 --- a/src/main/java/gregtech/common/render/items/GlitchEffectRenderer.java +++ b/src/main/java/gregtech/common/render/items/GlitchEffectRenderer.java @@ -12,9 +12,9 @@ import org.lwjgl.opengl.GL11; import codechicken.lib.render.TextureUtils; import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; -public class GlitchEffectRenderer extends GT_GeneratedMaterial_Renderer { +public class GlitchEffectRenderer extends GeneratedMaterialRenderer { public Random rand = new Random(); int[] red = new int[] { 255, 50, 50, 192 }; @@ -73,7 +73,7 @@ public class GlitchEffectRenderer extends GT_GeneratedMaterial_Renderer { IIcon itemIcon = itemRenderer.getIcon(metaData, pass); IIcon overlay = itemRenderer.getOverlayIcon(metaData, pass); - FluidStack aFluid = GT_Utility.getFluidForFilledItem(item, true); + FluidStack aFluid = GTUtility.getFluidForFilledItem(item, true); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); diff --git a/src/main/java/gregtech/common/render/items/InfinityRenderer.java b/src/main/java/gregtech/common/render/items/InfinityRenderer.java index 3a98898b8a..c083024dd3 100644 --- a/src/main/java/gregtech/common/render/items/InfinityRenderer.java +++ b/src/main/java/gregtech/common/render/items/InfinityRenderer.java @@ -12,11 +12,11 @@ import org.lwjgl.opengl.GL11; import codechicken.lib.render.TextureUtils; import gregtech.api.enums.Textures; import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; // TODO: Render effects outside inventory. -public class InfinityRenderer extends GT_GeneratedMaterial_Renderer { +public class InfinityRenderer extends GeneratedMaterialRenderer { public Random rand = new Random(); @@ -33,7 +33,7 @@ public class InfinityRenderer extends GT_GeneratedMaterial_Renderer { for (int pass = 0; pass < passes; pass++) { IIcon tIcon = aItem.getIcon(aMetaData, pass); IIcon tOverlay = aItem.getOverlayIcon(aMetaData, pass); - FluidStack aFluid = GT_Utility.getFluidForFilledItem(aStack, true); + FluidStack aFluid = GTUtility.getFluidForFilledItem(aStack, true); GL11.glEnable(GL11.GL_BLEND); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); diff --git a/src/main/java/gregtech/common/render/items/MetaGeneratedItemRenderer.java b/src/main/java/gregtech/common/render/items/MetaGeneratedItemRenderer.java new file mode 100644 index 0000000000..14d9b65e7f --- /dev/null +++ b/src/main/java/gregtech/common/render/items/MetaGeneratedItemRenderer.java @@ -0,0 +1,85 @@ +package gregtech.common.render.items; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.MinecraftForgeClient; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; +import gregtech.api.objects.ItemData; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.render.GTRenderUtil; + +public class MetaGeneratedItemRenderer implements IItemRenderer { + + private final IItemRenderer mItemRenderer = new GeneratedItemRenderer(); + private final IItemRenderer mMaterialRenderer = new GeneratedMaterialRenderer(); + + private final IItemRenderer mDataStickRenderer = new DataStickRenderer(); + + public MetaGeneratedItemRenderer() {} + + public void registerItem(T item) { + MinecraftForgeClient.registerItemRenderer(item, this); + } + + @Override + public boolean handleRenderType(ItemStack aStack, ItemRenderType aType) { + if ((GTUtility.isStackInvalid(aStack)) || (aStack.getItemDamage() < 0) + || !(aStack.getItem() instanceof IGT_ItemWithMaterialRenderer) + || !((IGT_ItemWithMaterialRenderer) aStack.getItem()).shouldUseCustomRenderer(aStack.getItemDamage())) { + return false; + } + return getRendererForItemStack(aStack).handleRenderType(aStack, aType); + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType aType, ItemStack aStack, ItemRendererHelper aHelper) { + if (GTUtility.isStackInvalid(aStack)) { + return false; + } + return getRendererForItemStack(aStack).shouldUseRenderHelper(aType, aStack, aHelper); + } + + @Override + public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { + GTRenderUtil.applyStandardItemTransform(type); + + IItemRenderer itemRenderer = getRendererForItemStack(aStack); + itemRenderer.renderItem(type, aStack, data); + } + + private IItemRenderer getRendererForItemStack(ItemStack aStack) { + short aMetaData = (short) aStack.getItemDamage(); + IGT_ItemWithMaterialRenderer aItem = (IGT_ItemWithMaterialRenderer) aStack.getItem(); + + if (aItem != null && aItem.allowMaterialRenderer(aMetaData)) { + IItemRenderer aMaterialRenderer = aItem.getMaterialRenderer(aMetaData); + + // Handle fluid rendering. + if (aMaterialRenderer == null) { + ItemData itemData = GTOreDictUnificator.getAssociation(aStack); + if (itemData != null) { + Materials material = itemData.mMaterial.mMaterial; + if (material.renderer != null) { + aMaterialRenderer = material.renderer; + } + } + } + + return aMaterialRenderer != null ? aMaterialRenderer : mMaterialRenderer; + } + + // handle data stick + if (aStack.getItem() == ItemList.Tool_DataStick.getItem() && aStack.hasTagCompound() + && aStack.getTagCompound() + .hasKey("output")) { + return mDataStickRenderer; + } + + return mItemRenderer; + } +} diff --git a/src/main/java/gregtech/common/render/items/TranscendentMetalRenderer.java b/src/main/java/gregtech/common/render/items/TranscendentMetalRenderer.java index 8583033e0f..7f619f2df5 100644 --- a/src/main/java/gregtech/common/render/items/TranscendentMetalRenderer.java +++ b/src/main/java/gregtech/common/render/items/TranscendentMetalRenderer.java @@ -13,11 +13,11 @@ import net.minecraftforge.fluids.FluidStack; import org.lwjgl.opengl.GL11; import codechicken.lib.render.TextureUtils; -import gregtech.GT_Mod; +import gregtech.GTMod; import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; -import gregtech.api.util.GT_Util; +import gregtech.api.util.GTUtil; -public class TranscendentMetalRenderer extends GT_GeneratedMaterial_Renderer { +public class TranscendentMetalRenderer extends GeneratedMaterialRenderer { @Override public void renderItem(ItemRenderType type, ItemStack aStack, Object... data) { @@ -69,7 +69,7 @@ public class TranscendentMetalRenderer extends GT_GeneratedMaterial_Renderer { GL11.glPushMatrix(); Fluid fluid = fluidStack.getFluid(); - applyEffect(type, GT_Util.getRGBaArray(fluid.getColor()), true); + applyEffect(type, GTUtil.getRGBaArray(fluid.getColor()), true); TextureUtils.bindAtlas(fluid.getSpriteNumber()); GL11.glDepthFunc(GL11.GL_EQUAL); @@ -124,7 +124,7 @@ public class TranscendentMetalRenderer extends GT_GeneratedMaterial_Renderer { GL11.glTranslatef(0.5f, 0.5f, 0.0f); } - GL11.glRotatef((GT_Mod.gregtechproxy.getAnimationTicks() * 3.5f) % 360, 0.3f, 0.5f, 0.2f); + GL11.glRotatef((GTMod.gregtechproxy.getAnimationTicks() * 3.5f) % 360, 0.3f, 0.5f, 0.2f); GL11.glRotatef(180, 0.5f, 0.0f, 0.0f); if (type.equals(IItemRenderer.ItemRenderType.INVENTORY)) { diff --git a/src/main/java/gregtech/common/render/items/UniversiumRenderer.java b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java index 92b86071cf..ecea6956de 100644 --- a/src/main/java/gregtech/common/render/items/UniversiumRenderer.java +++ b/src/main/java/gregtech/common/render/items/UniversiumRenderer.java @@ -22,10 +22,10 @@ import codechicken.lib.render.TextureUtils; import fox.spiteful.avaritia.render.CosmicRenderShenanigans; import gregtech.api.enums.ItemList; import gregtech.api.interfaces.IGT_ItemWithMaterialRenderer; -import gregtech.common.render.GT_RenderUtil; +import gregtech.common.render.GTRenderUtil; @SuppressWarnings("RedundantLabeledSwitchRuleCodeBlock") -public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { +public class UniversiumRenderer extends GeneratedMaterialRenderer { private static final float cosmicOpacity = 2.5f; @@ -112,7 +112,7 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { mc.getTextureManager() .bindTexture(resourcelocation); } else { - GT_RenderUtil.renderItem(type, tIcon); + GTRenderUtil.renderItem(type, tIcon); } GL11.glEnable(GL11.GL_BLEND); @@ -133,7 +133,7 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { GL11.glColor4d(1, 1, 1, 1); // Draw cosmic overlay - GT_RenderUtil.renderItem(type, tIcon); + GTRenderUtil.renderItem(type, tIcon); CosmicRenderShenanigans.releaseShader(); CosmicRenderShenanigans.inventoryRender = false; @@ -141,7 +141,7 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { GL11.glEnable(GL12.GL_RESCALE_NORMAL); } else { // RENDER ITEM - GT_RenderUtil.renderItem(type, tIcon); + GTRenderUtil.renderItem(type, tIcon); int program = GL11.glGetInteger(GL20.GL_CURRENT_PROGRAM); @@ -151,7 +151,7 @@ public class UniversiumRenderer extends GT_GeneratedMaterial_Renderer { CosmicRenderShenanigans.useShader(); // RENDER COSMIC OVERLAY - GT_RenderUtil.renderItem(type, tIcon); + GTRenderUtil.renderItem(type, tIcon); CosmicRenderShenanigans.releaseShader(); GL11.glDepthFunc(GL11.GL_LEQUAL); diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java deleted file mode 100644 index 67c38fad9e..0000000000 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ChestBuffer.java +++ /dev/null @@ -1,137 +0,0 @@ -package gregtech.common.tileentities.automation; - -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_CHESTBUFFER; -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_CHESTBUFFER_GLOW; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_ChestBuffer extends GT_MetaTileEntity_Buffer { - - private static final int[] tickRate = { 400, 200, 100, 20, 4, 1, 1, 1, 1, 1, 1, 1, 1 }; - private static final int[] maxStacks = { 1, 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 64, 128 }; - - public GT_MetaTileEntity_ChestBuffer(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 28, - new String[] { "Buffers up to 27 Item Stacks", "Use Screwdriver to regulate output stack size", - getTickRateDesc(aTier) }); - } - - public GT_MetaTileEntity_ChestBuffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String aDescription) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); - } - - public GT_MetaTileEntity_ChestBuffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String[] aDescription) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); - } - - public GT_MetaTileEntity_ChestBuffer(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_ChestBuffer(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ChestBuffer( - this.mName, - this.mTier, - this.mInventory.length, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture getOverlayIcon() { - return TextureFactory.of( - TextureFactory.of(AUTOMATION_CHESTBUFFER), - TextureFactory.builder() - .addIcon(AUTOMATION_CHESTBUFFER_GLOW) - .glow() - .build()); - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex < this.mInventory.length - 1; - } - - @Override - protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (aTimer % tickRate[mTier] > 0) return; - - // mSuccess will be negative if the call is caused by the %200 aTimer, always try to push. Otherwise it will be - // positive. - // For the first 6 ticks after a successful move (49->44), push every tick. Then go to every 5 ticks. - if ((mSuccess <= 0) || (mSuccess > 43) || ((mSuccess % 5) == 0)) { - super.moveItems(aBaseMetaTileEntity, aTimer, Math.min(MAX, maxStacks[mTier])); - } - - if (mSuccess < 0) { - mSuccess = 0; - } - } - - protected static String getTickRateDesc(int tier) { - int tickRate = getTickRate(tier); - String timeStr = ""; - String numStr = ""; - if (maxStacks[tier] > 1) { - numStr = maxStacks[tier] + " items"; - } else { - numStr = "1 item"; - } - if (tickRate < 20) timeStr = "1/" + 20 / tickRate + " "; - else if (tickRate > 20) { - timeStr = (tickRate / 20) + "th "; - } - return "Moves " + numStr + " every " + timeStr + "second"; - } - - protected static int getTickRate(int tier) { - if (tier > 9) return 1; - return tickRate[tier]; - } - - protected static int getMaxStacks(int tier) { - // Included higher tiers on the off chance they actually work without blowing things up lmao - return tier > 9 ? MAX : Math.min(maxStacks[tier], MAX); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - addSortStacksButton(builder); - addEmitRedstoneIfFullButton(builder); - addInvertRedstoneButton(builder); - addStockingModeButton(builder); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_22_RED.apply(69, true)) - .setPos(98, 60) - .setSize(51, 22)); - addMainUI(builder); - } - - protected void addMainUI(ModularWindow.Builder builder) { - addInventorySlots(builder); - } -} diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java deleted file mode 100644 index b6f1d53604..0000000000 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Filter.java +++ /dev/null @@ -1,144 +0,0 @@ -package gregtech.common.tileentities.automation; - -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_FILTER; -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_FILTER_GLOW; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_FilterBase; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Filter extends GT_MetaTileEntity_FilterBase { - - private static final int NUM_FILTER_SLOTS = 9; - private static final String IGNORE_NBT_TOOLTIP = "GT5U.machines.ignore_nbt.tooltip"; - private boolean ignoreNbt = false; - - public GT_MetaTileEntity_Filter(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 19, - new String[] { "Filters up to 9 different Items", "Use Screwdriver to regulate output stack size" }); - } - - public GT_MetaTileEntity_Filter(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_Filter(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Filter( - this.mName, - this.mTier, - this.mInventory.length, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture getOverlayIcon() { - return TextureFactory.of( - TextureFactory.of(AUTOMATION_FILTER), - TextureFactory.builder() - .addIcon(AUTOMATION_FILTER_GLOW) - .glow() - .build()); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("bIgnoreNBT", this.ignoreNbt); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.ignoreNbt = aNBT.getBoolean("bIgnoreNBT"); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack)) { - return false; - } - if (this.invertFilter) { - for (int i = 0; i < NUM_FILTER_SLOTS; i++) { - if (GT_Utility.areStacksEqual(this.mInventory[FILTER_SLOT_INDEX + i], aStack, this.ignoreNbt)) { - return false; - } - } - return true; - } - return GT_Utility.areStacksEqual(this.mInventory[(FILTER_SLOT_INDEX + aIndex)], aStack, this.ignoreNbt); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - addAllowNbtButton(builder); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_24_WHITE.apply(9, false)) - .setPos(6, 19) - .setSize(9, 24)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_24_BLUE.apply(24, true)) - .setPos(71, 19) - .setSize(24, 24)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_24_RED.apply(19, true)) - .setPos(152, 19) - .setSize(19, 24)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SLOTS_HOLO_3BY3) - .setPos(16, 4) - .setSize(54, 54)) - .widget( - SlotGroup.ofItemHandler(inventoryHandler, 3) - .startFromSlot(FILTER_SLOT_INDEX) - .endAtSlot(FILTER_SLOT_INDEX + NUM_FILTER_SLOTS - 1) - .phantom(true) - .applyForWidget( - widget -> widget.disableShiftInsert() - .setBackground(GT_UITextures.TRANSPARENT)) - .build() - .setPos(16, 4)) - .widget( - SlotGroup.ofItemHandler(inventoryHandler, 3) - .startFromSlot(0) - .endAtSlot(NUM_INVENTORY_SLOTS - 1) - .build() - .setPos(97, 4)); - } - - private void addAllowNbtButton(ModularWindow.Builder builder) { - builder.widget( - createToggleButton( - () -> ignoreNbt, - val -> ignoreNbt = val, - GT_UITextures.OVERLAY_BUTTON_NBT, - () -> mTooltipCache.getData(IGNORE_NBT_TOOLTIP))); - } -} diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java deleted file mode 100644 index 58b7fa57df..0000000000 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_ItemDistributor.java +++ /dev/null @@ -1,204 +0,0 @@ -package gregtech.common.tileentities.automation; - -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_ITEMDISTRIBUTOR; -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_ITEMDISTRIBUTOR_GLOW; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; - -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_ItemDistributor extends GT_MetaTileEntity_Buffer { - - private byte[] itemsPerSide = new byte[6]; - private ForgeDirection currentSide = ForgeDirection.DOWN; - private byte currentSideItemCount = 0; - - public GT_MetaTileEntity_ItemDistributor(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 28, - new String[] { "Distributes Items between different Machine Sides", "Default Items per Machine Side: 0", - "Use Screwdriver to increase/decrease Items per Side" }); - } - - public GT_MetaTileEntity_ItemDistributor(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String aDescription) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); - } - - public GT_MetaTileEntity_ItemDistributor(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_ItemDistributor(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ItemDistributor( - this.mName, - this.mTier, - this.mInventory.length, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture getOverlayIcon() { - return TextureFactory.of( - TextureFactory.of(AUTOMATION_ITEMDISTRIBUTOR), - TextureFactory.builder() - .addIcon(AUTOMATION_ITEMDISTRIBUTOR_GLOW) - .glow() - .build()); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing(); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - return mTextures[0][colorIndex + 1]; - } else { - return mTextures[1][colorIndex + 1]; - } - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] returnTextures = new ITexture[2][17][]; - ITexture baseIcon = getOverlayIcon(), pipeIcon = TextureFactory.of(Textures.BlockIcons.OVERLAY_PIPE_OUT); - for (int i = 0; i < 17; i++) { - returnTextures[0][i] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i], baseIcon }; - returnTextures[1][i] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i], pipeIcon, baseIcon }; - } - return returnTextures; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return getBaseMetaTileEntity().getFrontFacing() == side || itemsPerSide[side.ordinal()] == 0; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return getBaseMetaTileEntity().getFrontFacing() != side && itemsPerSide[side.ordinal()] > 0; - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex < this.mInventory.length - 1; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - itemsPerSide = aNBT.getByteArray("mItemsPerSide"); - if (itemsPerSide.length != 6) { - itemsPerSide = new byte[6]; - } - currentSide = ForgeDirection.getOrientation(aNBT.getByte("mCurrentSide")); - currentSideItemCount = aNBT.getByte("mCurrentSideItemCount"); - } - - @Override - protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - int currentSideOrdinal = currentSide.ordinal(); - fillStacksIntoFirstSlots(); - int movedItems; - TileEntity adjacentTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(currentSide); - int inspectedSides = 0; - while (itemsPerSide[currentSideOrdinal] == 0) { - currentSideOrdinal = ((currentSideOrdinal + 1) % 6); - currentSide = ForgeDirection.getOrientation(currentSideOrdinal); - currentSideItemCount = 0; - adjacentTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(currentSide); - inspectedSides += 1; - if (inspectedSides == 6) { - return; - } - } - movedItems = GT_Utility.moveOneItemStack( - aBaseMetaTileEntity, - adjacentTileEntity, - currentSide, - currentSide.getOpposite(), - null, - false, - (byte) 64, - (byte) 1, - (byte) (itemsPerSide[currentSideOrdinal] - currentSideItemCount), - (byte) 1); - currentSideItemCount += movedItems; - if (currentSideItemCount >= itemsPerSide[currentSideOrdinal]) { - currentSideOrdinal = ((currentSideOrdinal + 1) % 6); - currentSide = ForgeDirection.getOrientation(currentSideOrdinal); - currentSideItemCount = 0; - } - if (movedItems > 0 || aBaseMetaTileEntity.hasInventoryBeenModified()) { - mSuccess = 50; - } - fillStacksIntoFirstSlots(); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - final int ordinalSide = side.ordinal(); - // Adjust items per side by 1 or -1, constrained to the cyclic interval [0, 127] - itemsPerSide[ordinalSide] += aPlayer.isSneaking() ? -1 : 1; - itemsPerSide[ordinalSide] = (byte) ((itemsPerSide[ordinalSide] + 128) % 128); - GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("211", "Items per side: ") + itemsPerSide[ordinalSide]); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setByteArray("mItemsPerSide", itemsPerSide); - aNBT.setByte("mCurrentSide", (byte) currentSide.ordinal()); - aNBT.setByte("mCurrentSideItemCount", currentSideItemCount); - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - super.setItemNBT(aNBT); - aNBT.setByteArray("mItemsPerSide", itemsPerSide); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - addEmitRedstoneIfFullButton(builder); - addInvertRedstoneButton(builder); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_22_RED.apply(87, true)) - .setPos(62, 60) - .setSize(87, 22)); - addInventorySlots(builder); - } -} diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java deleted file mode 100644 index d446009ac7..0000000000 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_RecipeFilter.java +++ /dev/null @@ -1,326 +0,0 @@ -package gregtech.common.tileentities.automation; - -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_RECIPEFILTER; -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_RECIPEFILTER_GLOW; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.function.Function; -import java.util.stream.Collectors; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.Constants; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import codechicken.nei.recipe.RecipeCatalysts; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.RecipeMapWorkable; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SpecialFilter; -import gregtech.api.multitileentity.MultiTileEntityItem; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Item_Machines; -import gregtech.loaders.preload.GT_Loader_MultiTileEntities; - -public class GT_MetaTileEntity_RecipeFilter extends GT_MetaTileEntity_SpecialFilter { - - private static final String TT_machineType = "GT5U.MBTT.MachineType"; - private static final String REPRESENTATION_SLOT_TOOLTIP = "GT5U.recipe_filter.representation_slot.tooltip"; - private static final String EMPTY_REPRESENTATION_SLOT_TOOLTIP = "GT5U.recipe_filter.empty_representation_slot.tooltip"; - public RecipeMap mRecipeMap; - private List filteredMachines = new ArrayList<>(); - public int mRotationIndex = 0; - - public GT_MetaTileEntity_RecipeFilter(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - new String[] { "Filters 1 Recipe Type", "Use Screwdriver to regulate output stack size" }); - } - - public GT_MetaTileEntity_RecipeFilter(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_RecipeFilter(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - private static RecipeMap getItemStackMachineRecipeMap(ItemStack stack) { - if (stack != null) { - IMetaTileEntity metaTileEntity = GT_Item_Machines.getMetaTileEntity(stack); - if (metaTileEntity != null) { - return getMetaTileEntityRecipeMap(metaTileEntity); - } else if (stack.getItem() instanceof MultiTileEntityItem) { - return getMuTeRecipeMap(stack); - } - } - return null; - } - - private static RecipeMap getMetaTileEntityRecipeMap(IMetaTileEntity metaTileEntity) { - if (metaTileEntity instanceof RecipeMapWorkable recipeMapWorkable) { - return recipeMapWorkable.getRecipeMap(); - } - return null; - } - - private static RecipeMap getMuTeRecipeMap(@NotNull ItemStack stack) { - final TileEntity tileEntity = GT_Loader_MultiTileEntities.MACHINE_REGISTRY.getReferenceTileEntity(stack); - if (tileEntity instanceof RecipeMapWorkable recipeMapWorkable) { - return recipeMapWorkable.getRecipeMap(); - } - return null; - } - - private static List getFilteredMachines(RecipeMap recipeMap) { - return RecipeCatalysts.getRecipeCatalysts( - recipeMap.getFrontend() - .getUIProperties().neiTransferRectId) - .stream() - .map(positionedStack -> positionedStack.item) - .collect(Collectors.toList()); - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if ((!getBaseMetaTileEntity().isServerSide()) || ((aTick % 8L != 0L) && mRotationIndex != -1)) return; - if (this.filteredMachines.isEmpty()) { - return; - } - this.mInventory[FILTER_SLOT_INDEX] = GT_Utility.copyAmount( - 1, - this.filteredMachines.get(this.mRotationIndex = (this.mRotationIndex + 1) % this.filteredMachines.size())); - if (this.mInventory[FILTER_SLOT_INDEX] == null) return; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_RecipeFilter( - this.mName, - this.mTier, - this.mInventory.length, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture getOverlayIcon() { - return TextureFactory.of( - TextureFactory.of(AUTOMATION_RECIPEFILTER), - TextureFactory.builder() - .addIcon(AUTOMATION_RECIPEFILTER_GLOW) - .glow() - .build()); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (mRecipeMap != null) { - aNBT.setString("mRecipeMap", this.mRecipeMap.unlocalizedName); - } - NBTTagList tagList = new NBTTagList(); - for (ItemStack filteredMachine : filteredMachines) { - tagList.appendTag(filteredMachine.writeToNBT(new NBTTagCompound())); - } - aNBT.setTag("filteredMachines", tagList); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.mRecipeMap = RecipeMap.getFromOldIdentifier(aNBT.getString("mRecipeMap")); - filteredMachines.clear(); - NBTTagList tagList = aNBT.getTagList("filteredMachines", Constants.NBT.TAG_COMPOUND); - for (int i = 0; i < tagList.tagCount(); i++) { - ItemStack readStack = ItemStack.loadItemStackFromNBT(tagList.getCompoundTagAt(i)); - if (readStack != null) { - filteredMachines.add(readStack); - } - } - } - - @Override - protected boolean isStackAllowed(ItemStack aStack) { - return mRecipeMap != null && mRecipeMap.containsInput(aStack); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - builder.widget( - new FakeSyncWidget.StringSyncer( - () -> this.mRecipeMap == null ? "" : this.mRecipeMap.unlocalizedName, - id -> this.mRecipeMap = RecipeMap.ALL_RECIPE_MAPS.get(id))); - } - - @Override - protected List getEmptySlotTooltip() { - return Collections.singletonList(Text.localised(EMPTY_REPRESENTATION_SLOT_TOOLTIP)); - } - - @Override - public Function, List> getItemStackReplacementTooltip() { - if (mRecipeMap != null) { - List tooltip = assembleItemStackReplacementTooltip(mRecipeMap); - return list -> tooltip; - } - return super.getItemStackReplacementTooltip(); - } - - @NotNull - private List assembleItemStackReplacementTooltip(RecipeMap recipeMap) { - List tooltip = new ArrayList<>(); - tooltip.add( - StatCollector.translateToLocal(TT_machineType) + ": " - + EnumChatFormatting.YELLOW - + StatCollector.translateToLocal(recipeMap.unlocalizedName) - + EnumChatFormatting.RESET); - int recipeSize = recipeMap.getAllRecipes() - .size(); - if (recipeSize > 0) { - tooltip.add("Filter size: §e" + recipeSize + "§r"); - } - tooltip.addAll(mTooltipCache.getData(REPRESENTATION_SLOT_TOOLTIP).text); - return tooltip; - } - - @Override - protected SlotWidget createFilterIconSlot(BaseSlot slot) { - return new RecipeFilterIconSlotWidget(slot); - } - - private class RecipeFilterIconSlotWidget extends FilterIconSlotWidget { - - private static final int SYNC_RECIPEMAP_C2S = 98; - private static final int REQUEST_FILTERED_MACHINES_S2C = 99; - - public RecipeFilterIconSlotWidget(BaseSlot slot) { - super(slot); - } - - @Override - protected void phantomClick(ClickData clickData, ItemStack cursorStack) {} - - // region client - - @Override - public ClickResult onClick(int buttonId, boolean doubleClick) { - updateAndSendRecipeMapToServer( - getContext().getCursor() - .getItemStack()); - return ClickResult.SUCCESS; - } - - @Override - public boolean handleDragAndDrop(ItemStack draggedStack, int button) { - updateAndSendRecipeMapToServer(draggedStack); - draggedStack.stackSize = 0; - return true; - } - - private void updateAndSendRecipeMapToServer(ItemStack stack) { - mRecipeMap = getItemStackMachineRecipeMap(stack); - updateAndSendRecipeMapToServer(mRecipeMap); - } - - private void updateAndSendRecipeMapToServer(RecipeMap recipeMap) { - if (recipeMap != null) { - filteredMachines = getFilteredMachines(recipeMap); - } else { - filteredMachines = new ArrayList<>(); - mInventory[FILTER_SLOT_INDEX] = null; - } - mRotationIndex = -1; - syncToServer(SYNC_RECIPEMAP_C2S, buffer -> { - NetworkUtils.writeStringSafe(buffer, recipeMap != null ? recipeMap.unlocalizedName : null); - buffer.writeVarIntToBuffer(filteredMachines.size()); - for (ItemStack filteredMachine : filteredMachines) { - NetworkUtils.writeItemStack(buffer, filteredMachine); - } - }); - } - - @Override - public void readOnClient(int id, PacketBuffer buf) { - if (id != REQUEST_FILTERED_MACHINES_S2C) { - super.readOnClient(id, buf); - return; - } - - String recipeMapName = NetworkUtils.readStringSafe(buf); - mRecipeMap = recipeMapName != null ? RecipeMap.ALL_RECIPE_MAPS.get(recipeMapName) : null; - if (mRecipeMap != null) { - updateAndSendRecipeMapToServer(mRecipeMap); - } - } - - // endregion - - // region server - - @Override - public void readOnServer(int id, PacketBuffer buf) throws IOException { - if (id != SYNC_RECIPEMAP_C2S) { - super.readOnServer(id, buf); - return; - } - - String recipeMapName = NetworkUtils.readStringSafe(buf); - mRecipeMap = recipeMapName != null ? RecipeMap.getFromOldIdentifier(recipeMapName) : null; - mRotationIndex = -1; - mInventory[FILTER_SLOT_INDEX] = null; - filteredMachines.clear(); - - if (mRecipeMap != null) { - int filteredMachineSize = buf.readVarIntFromBuffer(); - filteredMachineSize = Math.min(filteredMachineSize, 256); // Prevent storing too many items - for (int i = 0; i < filteredMachineSize; i++) { - ItemStack stack = NetworkUtils.readItemStack(buf); - if (stack != null) { - filteredMachines.add(stack); - } - } - } - } - - @Override - public void detectAndSendChanges(boolean init) { - super.detectAndSendChanges(init); - if (init && mRecipeMap != null && filteredMachines.isEmpty()) { - // backward compatibility: This machine used to store only mRecipeMap, not filteredMachines - syncToClient( - REQUEST_FILTERED_MACHINES_S2C, - buffer -> NetworkUtils.writeStringSafe(buffer, mRecipeMap.unlocalizedName)); - } - } - - // endregion - } -} diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java deleted file mode 100644 index 08d3d32512..0000000000 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_Regulator.java +++ /dev/null @@ -1,228 +0,0 @@ -package gregtech.common.tileentities.automation; - -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_REGULATOR; -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_REGULATOR_GLOW; - -import java.util.Collections; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Buffer; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Regulator extends GT_MetaTileEntity_Buffer { - - public int[] mTargetSlots = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - private boolean charge = false, decharge = false; - - public GT_MetaTileEntity_Regulator(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 20, - new String[] { "Filters up to 9 different Items", "Allows Item-specific output stack size", - "Allows Item-specific output slot" }); - } - - public GT_MetaTileEntity_Regulator(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_Regulator(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Regulator( - this.mName, - this.mTier, - this.mInventory.length, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture getOverlayIcon() { - return TextureFactory.of( - TextureFactory.of(AUTOMATION_REGULATOR), - TextureFactory.builder() - .addIcon(AUTOMATION_REGULATOR_GLOW) - .glow() - .build()); - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex < 9 || aIndex == rechargerSlotStartIndex(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mTargetSlot1", this.mTargetSlots[0]); - aNBT.setInteger("mTargetSlot2", this.mTargetSlots[1]); - aNBT.setInteger("mTargetSlot3", this.mTargetSlots[2]); - aNBT.setInteger("mTargetSlot4", this.mTargetSlots[3]); - aNBT.setInteger("mTargetSlot5", this.mTargetSlots[4]); - aNBT.setInteger("mTargetSlot6", this.mTargetSlots[5]); - aNBT.setInteger("mTargetSlot7", this.mTargetSlots[6]); - aNBT.setInteger("mTargetSlot8", this.mTargetSlots[7]); - aNBT.setInteger("mTargetSlot9", this.mTargetSlots[8]); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.mTargetSlots[0] = aNBT.getInteger("mTargetSlot1"); - this.mTargetSlots[1] = aNBT.getInteger("mTargetSlot2"); - this.mTargetSlots[2] = aNBT.getInteger("mTargetSlot3"); - this.mTargetSlots[3] = aNBT.getInteger("mTargetSlot4"); - this.mTargetSlots[4] = aNBT.getInteger("mTargetSlot5"); - this.mTargetSlots[5] = aNBT.getInteger("mTargetSlot6"); - this.mTargetSlots[6] = aNBT.getInteger("mTargetSlot7"); - this.mTargetSlots[7] = aNBT.getInteger("mTargetSlot8"); - this.mTargetSlots[8] = aNBT.getInteger("mTargetSlot9"); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - // Regulation per Screwdriver is overridden by GUI regulation. - } - - @Override - public void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - for (int i = 0, tCosts; i < 9; i++) { - if (this.mInventory[(i + 9)] != null) { - tCosts = GT_Utility.moveOneItemStackIntoSlot( - getBaseMetaTileEntity(), - getBaseMetaTileEntity().getTileEntityAtSide(getBaseMetaTileEntity().getBackFacing()), - getBaseMetaTileEntity().getBackFacing(), - this.mTargetSlots[i], - Collections.singletonList(this.mInventory[(i + 9)]), - false, - (byte) this.mInventory[(i + 9)].stackSize, - (byte) this.mInventory[(i + 9)].stackSize, - (byte) 64, - (byte) 1) * 3; - if (tCosts > 0) { - this.mSuccess = 50; - break; - } - } - } - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack) && aIndex >= 0 - && aIndex <= 8 - && GT_Utility.areStacksEqual(aStack, this.mInventory[(aIndex + 9)]); - } - - @Override - public int rechargerSlotStartIndex() { - return 19; - } - - @Override - public int dechargerSlotStartIndex() { - return 19; - } - - @Override - public int rechargerSlotCount() { - return charge ? 1 : 0; - } - - @Override - public int dechargerSlotCount() { - return decharge ? 1 : 0; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - charge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3; - decharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3; - } - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - builder.widget(createChargerSlot(43, 62)); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_22_RED.apply(84, true)) - .setPos(65, 60) - .setSize(84, 22)) - .widget( - SlotGroup.ofItemHandler(inventoryHandler, 3) - .startFromSlot(0) - .endAtSlot(8) - .build() - .setPos(7, 5)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SLOTS_HOLO_3BY3) - .setPos(62, 5) - .setSize(54, 54)) - .widget( - SlotGroup.ofItemHandler(inventoryHandler, 3) - .phantom(true) - .startFromSlot(9) - .endAtSlot(17) - .applyForWidget( - widget -> widget.setControlsAmount(true) - .setBackground(GT_UITextures.TRANSPARENT)) - .build() - .setPos(62, 5)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SLOTS_HOLO_3BY3) - .setPos(117, 5) - .setSize(54, 54)); - - int xBase = 117, yBase = 5; - for (int i = 0; i < mTargetSlots.length; i++) { - final int index = i; - int xPos = xBase + (i % 3) * 18, yPos = yBase + (i / 3) * 18; - builder.widget(new SlotWidget(BaseSlot.empty()) { - - @Override - protected void phantomClick(ClickData clickData, ItemStack cursorStack) { - mTargetSlots[index] = Math.min( - 99, - Math.max( - 0, - mTargetSlots[index] + (clickData.mouseButton == 0 ? -1 : 1) * (clickData.shift ? 16 : 1))); - } - }.setBackground(GT_UITextures.TRANSPARENT) - .setPos(xPos, yPos)) - .widget( - TextWidget.dynamicString(() -> String.valueOf(mTargetSlots[index])) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(xPos + 2 + (i % 3 == 0 ? 1 : 0), yPos + 3 + (i / 3 == 0 ? 1 : 0))); - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java deleted file mode 100644 index 9a1d2d7dcf..0000000000 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_SuperBuffer.java +++ /dev/null @@ -1,105 +0,0 @@ -package gregtech.common.tileentities.automation; - -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_SUPERBUFFER; -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_SUPERBUFFER_GLOW; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.item.ItemStack; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; - -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_SuperBuffer extends GT_MetaTileEntity_ChestBuffer { - - public GT_MetaTileEntity_SuperBuffer(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 257, - new String[] { "Buffers up to 256 Item Stacks", "Use Screwdriver to regulate output stack size", - getTickRateDesc(aTier) }); - } - - public GT_MetaTileEntity_SuperBuffer(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_SuperBuffer(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_SuperBuffer( - this.mName, - this.mTier, - this.mInventory.length, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture getOverlayIcon() { - return TextureFactory.of( - TextureFactory.of(AUTOMATION_SUPERBUFFER), - TextureFactory.builder() - .addIcon(AUTOMATION_SUPERBUFFER_GLOW) - .glow() - .build()); - } - - @Override - protected void fillStacksIntoFirstSlots() { - // no order, this is super buffer - HashMap slots = new HashMap<>(mInventory.length); - HashMap stacks = new HashMap<>(mInventory.length); - List validSlots = new ArrayList<>(mInventory.length); - // List order = new ArrayList<>(mInventory.length); - for (int i = 0; i < mInventory.length - 1; i++) { - if (!isValidSlot(i)) continue; - validSlots.add(i); - ItemStack s = mInventory[i]; - if (s == null) continue; - GT_Utility.ItemId sID = GT_Utility.ItemId.createNoCopy(s); - slots.merge(sID, s.stackSize, Integer::sum); - if (!stacks.containsKey(sID)) stacks.put(sID, s); - // order.add(sID); - mInventory[i] = null; - } - int i = 0; - for (Map.Entry entry : slots.entrySet()) { - do { - int slot = validSlots.get(i); - mInventory[slot] = stacks.get(entry.getKey()) - .copy(); - int toSet = Math.min(entry.getValue(), mInventory[slot].getMaxStackSize()); - mInventory[slot].stackSize = toSet; - entry.setValue(entry.getValue() - toSet); - i++; - } while (entry.getValue() > 0); - } - } - - @Override - protected void addMainUI(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SUPER_BUFFER) - .setPos(61, 4) - .setSize(54, 54)); - } -} diff --git a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java b/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java deleted file mode 100644 index be4a2226a1..0000000000 --- a/src/main/java/gregtech/common/tileentities/automation/GT_MetaTileEntity_TypeFilter.java +++ /dev/null @@ -1,213 +0,0 @@ -package gregtech.common.tileentities.automation; - -import static gregtech.api.enums.GT_Values.W; -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_TYPEFILTER; -import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_TYPEFILTER_GLOW; - -import java.util.ArrayList; -import java.util.List; -import java.util.function.Function; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_SpecialFilter; -import gregtech.api.objects.ItemData; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_TypeFilter extends GT_MetaTileEntity_SpecialFilter { - - private static final String REPRESENTATION_SLOT_TOOLTIP = "GT5U.type_filter.representation_slot.tooltip"; - public int mRotationIndex = 0; - public OrePrefixes mPrefix = OrePrefixes.ore; - - public static ImmutableList OREBLOCK_PREFIXES = ImmutableList.of( - OrePrefixes.oreBlackgranite, - OrePrefixes.oreDense, - OrePrefixes.oreEnd, - OrePrefixes.oreEndstone, - OrePrefixes.oreNether, - OrePrefixes.oreNetherrack, - OrePrefixes.oreNormal, - OrePrefixes.orePoor, - OrePrefixes.oreRedgranite, - OrePrefixes.oreRich, - OrePrefixes.oreSmall, - OrePrefixes.oreBasalt, - OrePrefixes.oreMarble); - - public GT_MetaTileEntity_TypeFilter(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - new String[] { "Filters 1 Item Type", "Use Screwdriver to regulate output stack size" }); - } - - public GT_MetaTileEntity_TypeFilter(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_TypeFilter(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_TypeFilter( - this.mName, - this.mTier, - this.mInventory.length, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture getOverlayIcon() { - return TextureFactory.of( - TextureFactory.of(AUTOMATION_TYPEFILTER), - TextureFactory.builder() - .addIcon(AUTOMATION_TYPEFILTER_GLOW) - .glow() - .build()); - } - - public void clickTypeIcon(boolean aRightClick, ItemStack aHandStack) { - if (getBaseMetaTileEntity().isServerSide()) { - if (aHandStack != null) { - copyHeldItemPrefix(aHandStack); - } else { - cyclePrefix(aRightClick); - } - } - } - - private void copyHeldItemPrefix(ItemStack handStack) { - ItemData data = GT_OreDictUnificator.getAssociation(handStack); - if (data != null && data.hasValidPrefixData()) { - this.mPrefix = data.mPrefix; - this.mRotationIndex = -1; - } - } - - private void cyclePrefix(boolean aRightClick) { - for (int i = 0; i < OrePrefixes.values().length; i++) { - if (this.mPrefix == OrePrefixes.values()[i]) { - for (this.mPrefix = null; this.mPrefix == null; this.mPrefix = OrePrefixes.values()[i]) { - if (aRightClick) { - do { - i--; - if (i < 0) { - i = OrePrefixes.values().length - 1; - } - } while (OrePrefixes.values()[i].mPrefixedItems.isEmpty()); - } else { - do { - i++; - if (i >= OrePrefixes.values().length) { - i = 0; - } - } while (OrePrefixes.values()[i].mPrefixedItems.isEmpty()); - } - if (!OrePrefixes.values()[i].mPrefixedItems.isEmpty() - && OrePrefixes.values()[i].mPrefixInto == OrePrefixes.values()[i]) - mPrefix = OrePrefixes.values()[i]; - } - } - this.mRotationIndex = -1; - } - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if ((!getBaseMetaTileEntity().isServerSide()) || ((aTick % 8L != 0L) && mRotationIndex != -1)) return; - if (this.mPrefix.mPrefixedItems.isEmpty()) { - this.mInventory[FILTER_SLOT_INDEX] = null; - return; - } - this.mInventory[FILTER_SLOT_INDEX] = GT_Utility.copyAmount( - 1, - this.mPrefix.mPrefixedItems - .get(this.mRotationIndex = (this.mRotationIndex + 1) % this.mPrefix.mPrefixedItems.size())); - if (this.mInventory[FILTER_SLOT_INDEX] == null) return; - if (this.mInventory[FILTER_SLOT_INDEX].getItemDamage() == W) this.mInventory[9].setItemDamage(0); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setString("mPrefix", this.mPrefix.toString()); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.mPrefix = OrePrefixes.getPrefix(aNBT.getString("mPrefix"), this.mPrefix); - } - - @Override - protected boolean isStackAllowed(ItemStack aStack) { - if (this.mPrefix == OrePrefixes.ore) { - ItemData data = GT_OreDictUnificator.getItemData(aStack); - if (data != null && data.mPrefix != null && OREBLOCK_PREFIXES.contains(data.mPrefix)) { - return true; - } - } - return this.mPrefix.contains(aStack); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - builder.widget( - new FakeSyncWidget.StringSyncer( - () -> this.mPrefix.toString(), - (prefix) -> this.mPrefix = OrePrefixes.getPrefix(prefix, this.mPrefix))); - } - - @Override - protected Function, List> getItemStackReplacementTooltip() { - return (itemTooltip) -> { - List replacementTooltip = new ArrayList<>(); - replacementTooltip.add("Filter set to " + mPrefix.mRegularLocalName); - replacementTooltip.add("Ore prefix: §e" + mPrefix + "§r"); - replacementTooltip.add("Filter size: §e" + mPrefix.mPrefixedItems.size() + "§r"); - replacementTooltip.addAll(mTooltipCache.getData(REPRESENTATION_SLOT_TOOLTIP).text); - return replacementTooltip; - }; - } - - @Override - protected SlotWidget createFilterIconSlot(BaseSlot slot) { - return new TypeFilterIconSlotWidget(slot); - } - - private class TypeFilterIconSlotWidget extends FilterIconSlotWidget { - - public TypeFilterIconSlotWidget(BaseSlot slot) { - super(slot); - } - - @Override - protected void phantomClick(ClickData clickData, ItemStack cursorStack) { - clickTypeIcon(clickData.mouseButton != 0, cursorStack); - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/automation/MTEChestBuffer.java b/src/main/java/gregtech/common/tileentities/automation/MTEChestBuffer.java new file mode 100644 index 0000000000..27bc56dd62 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/automation/MTEChestBuffer.java @@ -0,0 +1,135 @@ +package gregtech.common.tileentities.automation; + +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_CHESTBUFFER; +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_CHESTBUFFER_GLOW; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBuffer; +import gregtech.api.render.TextureFactory; + +public class MTEChestBuffer extends MTEBuffer { + + private static final int[] tickRate = { 400, 200, 100, 20, 4, 1, 1, 1, 1, 1, 1, 1, 1 }; + private static final int[] maxStacks = { 1, 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 64, 128 }; + + public MTEChestBuffer(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 28, + new String[] { "Buffers up to 27 Item Stacks", "Use Screwdriver to regulate output stack size", + getTickRateDesc(aTier) }); + } + + public MTEChestBuffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String aDescription) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); + } + + public MTEChestBuffer(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String[] aDescription) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); + } + + public MTEChestBuffer(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEChestBuffer(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEChestBuffer( + this.mName, + this.mTier, + this.mInventory.length, + this.mDescriptionArray, + this.mTextures); + } + + @Override + public ITexture getOverlayIcon() { + return TextureFactory.of( + TextureFactory.of(AUTOMATION_CHESTBUFFER), + TextureFactory.builder() + .addIcon(AUTOMATION_CHESTBUFFER_GLOW) + .glow() + .build()); + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex < this.mInventory.length - 1; + } + + @Override + protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (aTimer % tickRate[mTier] > 0) return; + + // mSuccess will be negative if the call is caused by the %200 aTimer, always try to push. Otherwise it will be + // positive. + // For the first 6 ticks after a successful move (49->44), push every tick. Then go to every 5 ticks. + if ((mSuccess <= 0) || (mSuccess > 43) || ((mSuccess % 5) == 0)) { + super.moveItems(aBaseMetaTileEntity, aTimer, Math.min(MAX, maxStacks[mTier])); + } + + if (mSuccess < 0) { + mSuccess = 0; + } + } + + protected static String getTickRateDesc(int tier) { + int tickRate = getTickRate(tier); + String timeStr = ""; + String numStr = ""; + if (maxStacks[tier] > 1) { + numStr = maxStacks[tier] + " items"; + } else { + numStr = "1 item"; + } + if (tickRate < 20) timeStr = "1/" + 20 / tickRate + " "; + else if (tickRate > 20) { + timeStr = (tickRate / 20) + "th "; + } + return "Moves " + numStr + " every " + timeStr + "second"; + } + + protected static int getTickRate(int tier) { + if (tier > 9) return 1; + return tickRate[tier]; + } + + protected static int getMaxStacks(int tier) { + // Included higher tiers on the off chance they actually work without blowing things up lmao + return tier > 9 ? MAX : Math.min(maxStacks[tier], MAX); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + addSortStacksButton(builder); + addEmitRedstoneIfFullButton(builder); + addInvertRedstoneButton(builder); + addStockingModeButton(builder); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_ARROW_22_RED.apply(69, true)) + .setPos(98, 60) + .setSize(51, 22)); + addMainUI(builder); + } + + protected void addMainUI(ModularWindow.Builder builder) { + addInventorySlots(builder); + } +} diff --git a/src/main/java/gregtech/common/tileentities/automation/MTEFilter.java b/src/main/java/gregtech/common/tileentities/automation/MTEFilter.java new file mode 100644 index 0000000000..f731b5f915 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/automation/MTEFilter.java @@ -0,0 +1,137 @@ +package gregtech.common.tileentities.automation; + +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_FILTER; +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_FILTER_GLOW; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEFilterBase; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTEFilter extends MTEFilterBase { + + private static final int NUM_FILTER_SLOTS = 9; + private static final String IGNORE_NBT_TOOLTIP = "GT5U.machines.ignore_nbt.tooltip"; + private boolean ignoreNbt = false; + + public MTEFilter(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 19, + new String[] { "Filters up to 9 different Items", "Use Screwdriver to regulate output stack size" }); + } + + public MTEFilter(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEFilter(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEFilter(this.mName, this.mTier, this.mInventory.length, this.mDescriptionArray, this.mTextures); + } + + @Override + public ITexture getOverlayIcon() { + return TextureFactory.of( + TextureFactory.of(AUTOMATION_FILTER), + TextureFactory.builder() + .addIcon(AUTOMATION_FILTER_GLOW) + .glow() + .build()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("bIgnoreNBT", this.ignoreNbt); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.ignoreNbt = aNBT.getBoolean("bIgnoreNBT"); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack)) { + return false; + } + if (this.invertFilter) { + for (int i = 0; i < NUM_FILTER_SLOTS; i++) { + if (GTUtility.areStacksEqual(this.mInventory[FILTER_SLOT_INDEX + i], aStack, this.ignoreNbt)) { + return false; + } + } + return true; + } + return GTUtility.areStacksEqual(this.mInventory[(FILTER_SLOT_INDEX + aIndex)], aStack, this.ignoreNbt); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + addAllowNbtButton(builder); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_ARROW_24_WHITE.apply(9, false)) + .setPos(6, 19) + .setSize(9, 24)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_ARROW_24_BLUE.apply(24, true)) + .setPos(71, 19) + .setSize(24, 24)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_ARROW_24_RED.apply(19, true)) + .setPos(152, 19) + .setSize(19, 24)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SLOTS_HOLO_3BY3) + .setPos(16, 4) + .setSize(54, 54)) + .widget( + SlotGroup.ofItemHandler(inventoryHandler, 3) + .startFromSlot(FILTER_SLOT_INDEX) + .endAtSlot(FILTER_SLOT_INDEX + NUM_FILTER_SLOTS - 1) + .phantom(true) + .applyForWidget( + widget -> widget.disableShiftInsert() + .setBackground(GTUITextures.TRANSPARENT)) + .build() + .setPos(16, 4)) + .widget( + SlotGroup.ofItemHandler(inventoryHandler, 3) + .startFromSlot(0) + .endAtSlot(NUM_INVENTORY_SLOTS - 1) + .build() + .setPos(97, 4)); + } + + private void addAllowNbtButton(ModularWindow.Builder builder) { + builder.widget( + createToggleButton( + () -> ignoreNbt, + val -> ignoreNbt = val, + GTUITextures.OVERLAY_BUTTON_NBT, + () -> mTooltipCache.getData(IGNORE_NBT_TOOLTIP))); + } +} diff --git a/src/main/java/gregtech/common/tileentities/automation/MTEItemDistributor.java b/src/main/java/gregtech/common/tileentities/automation/MTEItemDistributor.java new file mode 100644 index 0000000000..36f1e1be58 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/automation/MTEItemDistributor.java @@ -0,0 +1,204 @@ +package gregtech.common.tileentities.automation; + +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_ITEMDISTRIBUTOR; +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_ITEMDISTRIBUTOR_GLOW; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; + +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBuffer; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTEItemDistributor extends MTEBuffer { + + private byte[] itemsPerSide = new byte[6]; + private ForgeDirection currentSide = ForgeDirection.DOWN; + private byte currentSideItemCount = 0; + + public MTEItemDistributor(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 28, + new String[] { "Distributes Items between different Machine Sides", "Default Items per Machine Side: 0", + "Use Screwdriver to increase/decrease Items per Side" }); + } + + public MTEItemDistributor(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String aDescription) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); + } + + public MTEItemDistributor(String aName, int aTier, int aInvSlotCount, String aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEItemDistributor(String aName, int aTier, int aInvSlotCount, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEItemDistributor( + this.mName, + this.mTier, + this.mInventory.length, + this.mDescriptionArray, + this.mTextures); + } + + @Override + public ITexture getOverlayIcon() { + return TextureFactory.of( + TextureFactory.of(AUTOMATION_ITEMDISTRIBUTOR), + TextureFactory.builder() + .addIcon(AUTOMATION_ITEMDISTRIBUTOR_GLOW) + .glow() + .build()); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing(); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + return mTextures[0][colorIndex + 1]; + } else { + return mTextures[1][colorIndex + 1]; + } + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] returnTextures = new ITexture[2][17][]; + ITexture baseIcon = getOverlayIcon(), pipeIcon = TextureFactory.of(Textures.BlockIcons.OVERLAY_PIPE_OUT); + for (int i = 0; i < 17; i++) { + returnTextures[0][i] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i], baseIcon }; + returnTextures[1][i] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i], pipeIcon, baseIcon }; + } + return returnTextures; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return getBaseMetaTileEntity().getFrontFacing() == side || itemsPerSide[side.ordinal()] == 0; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return getBaseMetaTileEntity().getFrontFacing() != side && itemsPerSide[side.ordinal()] > 0; + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex < this.mInventory.length - 1; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + itemsPerSide = aNBT.getByteArray("mItemsPerSide"); + if (itemsPerSide.length != 6) { + itemsPerSide = new byte[6]; + } + currentSide = ForgeDirection.getOrientation(aNBT.getByte("mCurrentSide")); + currentSideItemCount = aNBT.getByte("mCurrentSideItemCount"); + } + + @Override + protected void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + int currentSideOrdinal = currentSide.ordinal(); + fillStacksIntoFirstSlots(); + int movedItems; + TileEntity adjacentTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(currentSide); + int inspectedSides = 0; + while (itemsPerSide[currentSideOrdinal] == 0) { + currentSideOrdinal = ((currentSideOrdinal + 1) % 6); + currentSide = ForgeDirection.getOrientation(currentSideOrdinal); + currentSideItemCount = 0; + adjacentTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(currentSide); + inspectedSides += 1; + if (inspectedSides == 6) { + return; + } + } + movedItems = GTUtility.moveOneItemStack( + aBaseMetaTileEntity, + adjacentTileEntity, + currentSide, + currentSide.getOpposite(), + null, + false, + (byte) 64, + (byte) 1, + (byte) (itemsPerSide[currentSideOrdinal] - currentSideItemCount), + (byte) 1); + currentSideItemCount += movedItems; + if (currentSideItemCount >= itemsPerSide[currentSideOrdinal]) { + currentSideOrdinal = ((currentSideOrdinal + 1) % 6); + currentSide = ForgeDirection.getOrientation(currentSideOrdinal); + currentSideItemCount = 0; + } + if (movedItems > 0 || aBaseMetaTileEntity.hasInventoryBeenModified()) { + mSuccess = 50; + } + fillStacksIntoFirstSlots(); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + final int ordinalSide = side.ordinal(); + // Adjust items per side by 1 or -1, constrained to the cyclic interval [0, 127] + itemsPerSide[ordinalSide] += aPlayer.isSneaking() ? -1 : 1; + itemsPerSide[ordinalSide] = (byte) ((itemsPerSide[ordinalSide] + 128) % 128); + GTUtility.sendChatToPlayer(aPlayer, GTUtility.trans("211", "Items per side: ") + itemsPerSide[ordinalSide]); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByteArray("mItemsPerSide", itemsPerSide); + aNBT.setByte("mCurrentSide", (byte) currentSide.ordinal()); + aNBT.setByte("mCurrentSideItemCount", currentSideItemCount); + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + super.setItemNBT(aNBT); + aNBT.setByteArray("mItemsPerSide", itemsPerSide); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + addEmitRedstoneIfFullButton(builder); + addInvertRedstoneButton(builder); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_ARROW_22_RED.apply(87, true)) + .setPos(62, 60) + .setSize(87, 22)); + addInventorySlots(builder); + } +} diff --git a/src/main/java/gregtech/common/tileentities/automation/MTERecipeFilter.java b/src/main/java/gregtech/common/tileentities/automation/MTERecipeFilter.java new file mode 100644 index 0000000000..24b57153af --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/automation/MTERecipeFilter.java @@ -0,0 +1,325 @@ +package gregtech.common.tileentities.automation; + +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_RECIPEFILTER; +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_RECIPEFILTER_GLOW; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.Constants; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import codechicken.nei.recipe.RecipeCatalysts; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.RecipeMapWorkable; +import gregtech.api.metatileentity.implementations.MTESpecialFilter; +import gregtech.api.multitileentity.MultiTileEntityItem; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.ItemMachines; +import gregtech.loaders.preload.GT_Loader_MultiTileEntities; + +public class MTERecipeFilter extends MTESpecialFilter { + + private static final String TT_machineType = "GT5U.MBTT.MachineType"; + private static final String REPRESENTATION_SLOT_TOOLTIP = "GT5U.recipe_filter.representation_slot.tooltip"; + private static final String EMPTY_REPRESENTATION_SLOT_TOOLTIP = "GT5U.recipe_filter.empty_representation_slot.tooltip"; + public RecipeMap mRecipeMap; + private List filteredMachines = new ArrayList<>(); + public int mRotationIndex = 0; + + public MTERecipeFilter(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + new String[] { "Filters 1 Recipe Type", "Use Screwdriver to regulate output stack size" }); + } + + public MTERecipeFilter(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTERecipeFilter(String aName, int aTier, int aInvSlotCount, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + private static RecipeMap getItemStackMachineRecipeMap(ItemStack stack) { + if (stack != null) { + IMetaTileEntity metaTileEntity = ItemMachines.getMetaTileEntity(stack); + if (metaTileEntity != null) { + return getMetaTileEntityRecipeMap(metaTileEntity); + } else if (stack.getItem() instanceof MultiTileEntityItem) { + return getMuTeRecipeMap(stack); + } + } + return null; + } + + private static RecipeMap getMetaTileEntityRecipeMap(IMetaTileEntity metaTileEntity) { + if (metaTileEntity instanceof RecipeMapWorkable recipeMapWorkable) { + return recipeMapWorkable.getRecipeMap(); + } + return null; + } + + private static RecipeMap getMuTeRecipeMap(@NotNull ItemStack stack) { + final TileEntity tileEntity = GT_Loader_MultiTileEntities.MACHINE_REGISTRY.getReferenceTileEntity(stack); + if (tileEntity instanceof RecipeMapWorkable recipeMapWorkable) { + return recipeMapWorkable.getRecipeMap(); + } + return null; + } + + private static List getFilteredMachines(RecipeMap recipeMap) { + return RecipeCatalysts.getRecipeCatalysts( + recipeMap.getFrontend() + .getUIProperties().neiTransferRectId) + .stream() + .map(positionedStack -> positionedStack.item) + .collect(Collectors.toList()); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if ((!getBaseMetaTileEntity().isServerSide()) || ((aTick % 8L != 0L) && mRotationIndex != -1)) return; + if (this.filteredMachines.isEmpty()) { + return; + } + this.mInventory[FILTER_SLOT_INDEX] = GTUtility.copyAmount( + 1, + this.filteredMachines.get(this.mRotationIndex = (this.mRotationIndex + 1) % this.filteredMachines.size())); + if (this.mInventory[FILTER_SLOT_INDEX] == null) return; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTERecipeFilter( + this.mName, + this.mTier, + this.mInventory.length, + this.mDescriptionArray, + this.mTextures); + } + + @Override + public ITexture getOverlayIcon() { + return TextureFactory.of( + TextureFactory.of(AUTOMATION_RECIPEFILTER), + TextureFactory.builder() + .addIcon(AUTOMATION_RECIPEFILTER_GLOW) + .glow() + .build()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (mRecipeMap != null) { + aNBT.setString("mRecipeMap", this.mRecipeMap.unlocalizedName); + } + NBTTagList tagList = new NBTTagList(); + for (ItemStack filteredMachine : filteredMachines) { + tagList.appendTag(filteredMachine.writeToNBT(new NBTTagCompound())); + } + aNBT.setTag("filteredMachines", tagList); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.mRecipeMap = RecipeMap.getFromOldIdentifier(aNBT.getString("mRecipeMap")); + filteredMachines.clear(); + NBTTagList tagList = aNBT.getTagList("filteredMachines", Constants.NBT.TAG_COMPOUND); + for (int i = 0; i < tagList.tagCount(); i++) { + ItemStack readStack = ItemStack.loadItemStackFromNBT(tagList.getCompoundTagAt(i)); + if (readStack != null) { + filteredMachines.add(readStack); + } + } + } + + @Override + protected boolean isStackAllowed(ItemStack aStack) { + return mRecipeMap != null && mRecipeMap.containsInput(aStack); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget( + new FakeSyncWidget.StringSyncer( + () -> this.mRecipeMap == null ? "" : this.mRecipeMap.unlocalizedName, + id -> this.mRecipeMap = RecipeMap.ALL_RECIPE_MAPS.get(id))); + } + + @Override + protected List getEmptySlotTooltip() { + return Collections.singletonList(Text.localised(EMPTY_REPRESENTATION_SLOT_TOOLTIP)); + } + + @Override + public Function, List> getItemStackReplacementTooltip() { + if (mRecipeMap != null) { + List tooltip = assembleItemStackReplacementTooltip(mRecipeMap); + return list -> tooltip; + } + return super.getItemStackReplacementTooltip(); + } + + @NotNull + private List assembleItemStackReplacementTooltip(RecipeMap recipeMap) { + List tooltip = new ArrayList<>(); + tooltip.add( + StatCollector.translateToLocal(TT_machineType) + ": " + + EnumChatFormatting.YELLOW + + StatCollector.translateToLocal(recipeMap.unlocalizedName) + + EnumChatFormatting.RESET); + int recipeSize = recipeMap.getAllRecipes() + .size(); + if (recipeSize > 0) { + tooltip.add("Filter size: §e" + recipeSize + "§r"); + } + tooltip.addAll(mTooltipCache.getData(REPRESENTATION_SLOT_TOOLTIP).text); + return tooltip; + } + + @Override + protected SlotWidget createFilterIconSlot(BaseSlot slot) { + return new RecipeFilterIconSlotWidget(slot); + } + + private class RecipeFilterIconSlotWidget extends FilterIconSlotWidget { + + private static final int SYNC_RECIPEMAP_C2S = 98; + private static final int REQUEST_FILTERED_MACHINES_S2C = 99; + + public RecipeFilterIconSlotWidget(BaseSlot slot) { + super(slot); + } + + @Override + protected void phantomClick(ClickData clickData, ItemStack cursorStack) {} + + // region client + + @Override + public ClickResult onClick(int buttonId, boolean doubleClick) { + updateAndSendRecipeMapToServer( + getContext().getCursor() + .getItemStack()); + return ClickResult.SUCCESS; + } + + @Override + public boolean handleDragAndDrop(ItemStack draggedStack, int button) { + updateAndSendRecipeMapToServer(draggedStack); + draggedStack.stackSize = 0; + return true; + } + + private void updateAndSendRecipeMapToServer(ItemStack stack) { + mRecipeMap = getItemStackMachineRecipeMap(stack); + updateAndSendRecipeMapToServer(mRecipeMap); + } + + private void updateAndSendRecipeMapToServer(RecipeMap recipeMap) { + if (recipeMap != null) { + filteredMachines = getFilteredMachines(recipeMap); + } else { + filteredMachines = new ArrayList<>(); + mInventory[FILTER_SLOT_INDEX] = null; + } + mRotationIndex = -1; + syncToServer(SYNC_RECIPEMAP_C2S, buffer -> { + NetworkUtils.writeStringSafe(buffer, recipeMap != null ? recipeMap.unlocalizedName : null); + buffer.writeVarIntToBuffer(filteredMachines.size()); + for (ItemStack filteredMachine : filteredMachines) { + NetworkUtils.writeItemStack(buffer, filteredMachine); + } + }); + } + + @Override + public void readOnClient(int id, PacketBuffer buf) { + if (id != REQUEST_FILTERED_MACHINES_S2C) { + super.readOnClient(id, buf); + return; + } + + String recipeMapName = NetworkUtils.readStringSafe(buf); + mRecipeMap = recipeMapName != null ? RecipeMap.ALL_RECIPE_MAPS.get(recipeMapName) : null; + if (mRecipeMap != null) { + updateAndSendRecipeMapToServer(mRecipeMap); + } + } + + // endregion + + // region server + + @Override + public void readOnServer(int id, PacketBuffer buf) throws IOException { + if (id != SYNC_RECIPEMAP_C2S) { + super.readOnServer(id, buf); + return; + } + + String recipeMapName = NetworkUtils.readStringSafe(buf); + mRecipeMap = recipeMapName != null ? RecipeMap.getFromOldIdentifier(recipeMapName) : null; + mRotationIndex = -1; + mInventory[FILTER_SLOT_INDEX] = null; + filteredMachines.clear(); + + if (mRecipeMap != null) { + int filteredMachineSize = buf.readVarIntFromBuffer(); + filteredMachineSize = Math.min(filteredMachineSize, 256); // Prevent storing too many items + for (int i = 0; i < filteredMachineSize; i++) { + ItemStack stack = NetworkUtils.readItemStack(buf); + if (stack != null) { + filteredMachines.add(stack); + } + } + } + } + + @Override + public void detectAndSendChanges(boolean init) { + super.detectAndSendChanges(init); + if (init && mRecipeMap != null && filteredMachines.isEmpty()) { + // backward compatibility: This machine used to store only mRecipeMap, not filteredMachines + syncToClient( + REQUEST_FILTERED_MACHINES_S2C, + buffer -> NetworkUtils.writeStringSafe(buffer, mRecipeMap.unlocalizedName)); + } + } + + // endregion + } +} diff --git a/src/main/java/gregtech/common/tileentities/automation/MTERegulator.java b/src/main/java/gregtech/common/tileentities/automation/MTERegulator.java new file mode 100644 index 0000000000..4205af7e08 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/automation/MTERegulator.java @@ -0,0 +1,221 @@ +package gregtech.common.tileentities.automation; + +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_REGULATOR; +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_REGULATOR_GLOW; + +import java.util.Collections; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBuffer; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTERegulator extends MTEBuffer { + + public int[] mTargetSlots = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + private boolean charge = false, decharge = false; + + public MTERegulator(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 20, + new String[] { "Filters up to 9 different Items", "Allows Item-specific output stack size", + "Allows Item-specific output slot" }); + } + + public MTERegulator(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTERegulator(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTERegulator(this.mName, this.mTier, this.mInventory.length, this.mDescriptionArray, this.mTextures); + } + + @Override + public ITexture getOverlayIcon() { + return TextureFactory.of( + TextureFactory.of(AUTOMATION_REGULATOR), + TextureFactory.builder() + .addIcon(AUTOMATION_REGULATOR_GLOW) + .glow() + .build()); + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex < 9 || aIndex == rechargerSlotStartIndex(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mTargetSlot1", this.mTargetSlots[0]); + aNBT.setInteger("mTargetSlot2", this.mTargetSlots[1]); + aNBT.setInteger("mTargetSlot3", this.mTargetSlots[2]); + aNBT.setInteger("mTargetSlot4", this.mTargetSlots[3]); + aNBT.setInteger("mTargetSlot5", this.mTargetSlots[4]); + aNBT.setInteger("mTargetSlot6", this.mTargetSlots[5]); + aNBT.setInteger("mTargetSlot7", this.mTargetSlots[6]); + aNBT.setInteger("mTargetSlot8", this.mTargetSlots[7]); + aNBT.setInteger("mTargetSlot9", this.mTargetSlots[8]); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.mTargetSlots[0] = aNBT.getInteger("mTargetSlot1"); + this.mTargetSlots[1] = aNBT.getInteger("mTargetSlot2"); + this.mTargetSlots[2] = aNBT.getInteger("mTargetSlot3"); + this.mTargetSlots[3] = aNBT.getInteger("mTargetSlot4"); + this.mTargetSlots[4] = aNBT.getInteger("mTargetSlot5"); + this.mTargetSlots[5] = aNBT.getInteger("mTargetSlot6"); + this.mTargetSlots[6] = aNBT.getInteger("mTargetSlot7"); + this.mTargetSlots[7] = aNBT.getInteger("mTargetSlot8"); + this.mTargetSlots[8] = aNBT.getInteger("mTargetSlot9"); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + // Regulation per Screwdriver is overridden by GUI regulation. + } + + @Override + public void moveItems(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + for (int i = 0, tCosts; i < 9; i++) { + if (this.mInventory[(i + 9)] != null) { + tCosts = GTUtility.moveOneItemStackIntoSlot( + getBaseMetaTileEntity(), + getBaseMetaTileEntity().getTileEntityAtSide(getBaseMetaTileEntity().getBackFacing()), + getBaseMetaTileEntity().getBackFacing(), + this.mTargetSlots[i], + Collections.singletonList(this.mInventory[(i + 9)]), + false, + (byte) this.mInventory[(i + 9)].stackSize, + (byte) this.mInventory[(i + 9)].stackSize, + (byte) 64, + (byte) 1) * 3; + if (tCosts > 0) { + this.mSuccess = 50; + break; + } + } + } + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack) && aIndex >= 0 + && aIndex <= 8 + && GTUtility.areStacksEqual(aStack, this.mInventory[(aIndex + 9)]); + } + + @Override + public int rechargerSlotStartIndex() { + return 19; + } + + @Override + public int dechargerSlotStartIndex() { + return 19; + } + + @Override + public int rechargerSlotCount() { + return charge ? 1 : 0; + } + + @Override + public int dechargerSlotCount() { + return decharge ? 1 : 0; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + charge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3; + decharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3; + } + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget(createChargerSlot(43, 62)); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_ARROW_22_RED.apply(84, true)) + .setPos(65, 60) + .setSize(84, 22)) + .widget( + SlotGroup.ofItemHandler(inventoryHandler, 3) + .startFromSlot(0) + .endAtSlot(8) + .build() + .setPos(7, 5)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SLOTS_HOLO_3BY3) + .setPos(62, 5) + .setSize(54, 54)) + .widget( + SlotGroup.ofItemHandler(inventoryHandler, 3) + .phantom(true) + .startFromSlot(9) + .endAtSlot(17) + .applyForWidget( + widget -> widget.setControlsAmount(true) + .setBackground(GTUITextures.TRANSPARENT)) + .build() + .setPos(62, 5)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SLOTS_HOLO_3BY3) + .setPos(117, 5) + .setSize(54, 54)); + + int xBase = 117, yBase = 5; + for (int i = 0; i < mTargetSlots.length; i++) { + final int index = i; + int xPos = xBase + (i % 3) * 18, yPos = yBase + (i / 3) * 18; + builder.widget(new SlotWidget(BaseSlot.empty()) { + + @Override + protected void phantomClick(ClickData clickData, ItemStack cursorStack) { + mTargetSlots[index] = Math.min( + 99, + Math.max( + 0, + mTargetSlots[index] + (clickData.mouseButton == 0 ? -1 : 1) * (clickData.shift ? 16 : 1))); + } + }.setBackground(GTUITextures.TRANSPARENT) + .setPos(xPos, yPos)) + .widget( + TextWidget.dynamicString(() -> String.valueOf(mTargetSlots[index])) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(xPos + 2 + (i % 3 == 0 ? 1 : 0), yPos + 3 + (i / 3 == 0 ? 1 : 0))); + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/automation/MTESuperBuffer.java b/src/main/java/gregtech/common/tileentities/automation/MTESuperBuffer.java new file mode 100644 index 0000000000..fa1bdd60b9 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/automation/MTESuperBuffer.java @@ -0,0 +1,103 @@ +package gregtech.common.tileentities.automation; + +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_SUPERBUFFER; +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_SUPERBUFFER_GLOW; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.item.ItemStack; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTESuperBuffer extends MTEChestBuffer { + + public MTESuperBuffer(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 257, + new String[] { "Buffers up to 256 Item Stacks", "Use Screwdriver to regulate output stack size", + getTickRateDesc(aTier) }); + } + + public MTESuperBuffer(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTESuperBuffer(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESuperBuffer( + this.mName, + this.mTier, + this.mInventory.length, + this.mDescriptionArray, + this.mTextures); + } + + @Override + public ITexture getOverlayIcon() { + return TextureFactory.of( + TextureFactory.of(AUTOMATION_SUPERBUFFER), + TextureFactory.builder() + .addIcon(AUTOMATION_SUPERBUFFER_GLOW) + .glow() + .build()); + } + + @Override + protected void fillStacksIntoFirstSlots() { + // no order, this is super buffer + HashMap slots = new HashMap<>(mInventory.length); + HashMap stacks = new HashMap<>(mInventory.length); + List validSlots = new ArrayList<>(mInventory.length); + // List order = new ArrayList<>(mInventory.length); + for (int i = 0; i < mInventory.length - 1; i++) { + if (!isValidSlot(i)) continue; + validSlots.add(i); + ItemStack s = mInventory[i]; + if (s == null) continue; + GTUtility.ItemId sID = GTUtility.ItemId.createNoCopy(s); + slots.merge(sID, s.stackSize, Integer::sum); + if (!stacks.containsKey(sID)) stacks.put(sID, s); + // order.add(sID); + mInventory[i] = null; + } + int i = 0; + for (Map.Entry entry : slots.entrySet()) { + do { + int slot = validSlots.get(i); + mInventory[slot] = stacks.get(entry.getKey()) + .copy(); + int toSet = Math.min(entry.getValue(), mInventory[slot].getMaxStackSize()); + mInventory[slot].stackSize = toSet; + entry.setValue(entry.getValue() - toSet); + i++; + } while (entry.getValue() > 0); + } + } + + @Override + protected void addMainUI(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SUPER_BUFFER) + .setPos(61, 4) + .setSize(54, 54)); + } +} diff --git a/src/main/java/gregtech/common/tileentities/automation/MTETypeFilter.java b/src/main/java/gregtech/common/tileentities/automation/MTETypeFilter.java new file mode 100644 index 0000000000..3b8cd3482e --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/automation/MTETypeFilter.java @@ -0,0 +1,211 @@ +package gregtech.common.tileentities.automation; + +import static gregtech.api.enums.GTValues.W; +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_TYPEFILTER; +import static gregtech.api.enums.Textures.BlockIcons.AUTOMATION_TYPEFILTER_GLOW; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTESpecialFilter; +import gregtech.api.objects.ItemData; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class MTETypeFilter extends MTESpecialFilter { + + private static final String REPRESENTATION_SLOT_TOOLTIP = "GT5U.type_filter.representation_slot.tooltip"; + public int mRotationIndex = 0; + public OrePrefixes mPrefix = OrePrefixes.ore; + + public static ImmutableList OREBLOCK_PREFIXES = ImmutableList.of( + OrePrefixes.oreBlackgranite, + OrePrefixes.oreDense, + OrePrefixes.oreEnd, + OrePrefixes.oreEndstone, + OrePrefixes.oreNether, + OrePrefixes.oreNetherrack, + OrePrefixes.oreNormal, + OrePrefixes.orePoor, + OrePrefixes.oreRedgranite, + OrePrefixes.oreRich, + OrePrefixes.oreSmall, + OrePrefixes.oreBasalt, + OrePrefixes.oreMarble); + + public MTETypeFilter(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + new String[] { "Filters 1 Item Type", "Use Screwdriver to regulate output stack size" }); + } + + public MTETypeFilter(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTETypeFilter(String aName, int aTier, int aInvSlotCount, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTETypeFilter( + this.mName, + this.mTier, + this.mInventory.length, + this.mDescriptionArray, + this.mTextures); + } + + @Override + public ITexture getOverlayIcon() { + return TextureFactory.of( + TextureFactory.of(AUTOMATION_TYPEFILTER), + TextureFactory.builder() + .addIcon(AUTOMATION_TYPEFILTER_GLOW) + .glow() + .build()); + } + + public void clickTypeIcon(boolean aRightClick, ItemStack aHandStack) { + if (getBaseMetaTileEntity().isServerSide()) { + if (aHandStack != null) { + copyHeldItemPrefix(aHandStack); + } else { + cyclePrefix(aRightClick); + } + } + } + + private void copyHeldItemPrefix(ItemStack handStack) { + ItemData data = GTOreDictUnificator.getAssociation(handStack); + if (data != null && data.hasValidPrefixData()) { + this.mPrefix = data.mPrefix; + this.mRotationIndex = -1; + } + } + + private void cyclePrefix(boolean aRightClick) { + for (int i = 0; i < OrePrefixes.values().length; i++) { + if (this.mPrefix == OrePrefixes.values()[i]) { + for (this.mPrefix = null; this.mPrefix == null; this.mPrefix = OrePrefixes.values()[i]) { + if (aRightClick) { + do { + i--; + if (i < 0) { + i = OrePrefixes.values().length - 1; + } + } while (OrePrefixes.values()[i].mPrefixedItems.isEmpty()); + } else { + do { + i++; + if (i >= OrePrefixes.values().length) { + i = 0; + } + } while (OrePrefixes.values()[i].mPrefixedItems.isEmpty()); + } + if (!OrePrefixes.values()[i].mPrefixedItems.isEmpty() + && OrePrefixes.values()[i].mPrefixInto == OrePrefixes.values()[i]) + mPrefix = OrePrefixes.values()[i]; + } + } + this.mRotationIndex = -1; + } + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if ((!getBaseMetaTileEntity().isServerSide()) || ((aTick % 8L != 0L) && mRotationIndex != -1)) return; + if (this.mPrefix.mPrefixedItems.isEmpty()) { + this.mInventory[FILTER_SLOT_INDEX] = null; + return; + } + this.mInventory[FILTER_SLOT_INDEX] = GTUtility.copyAmount( + 1, + this.mPrefix.mPrefixedItems + .get(this.mRotationIndex = (this.mRotationIndex + 1) % this.mPrefix.mPrefixedItems.size())); + if (this.mInventory[FILTER_SLOT_INDEX] == null) return; + if (this.mInventory[FILTER_SLOT_INDEX].getItemDamage() == W) this.mInventory[9].setItemDamage(0); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setString("mPrefix", this.mPrefix.toString()); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.mPrefix = OrePrefixes.getPrefix(aNBT.getString("mPrefix"), this.mPrefix); + } + + @Override + protected boolean isStackAllowed(ItemStack aStack) { + if (this.mPrefix == OrePrefixes.ore) { + ItemData data = GTOreDictUnificator.getItemData(aStack); + if (data != null && data.mPrefix != null && OREBLOCK_PREFIXES.contains(data.mPrefix)) { + return true; + } + } + return this.mPrefix.contains(aStack); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget( + new FakeSyncWidget.StringSyncer( + () -> this.mPrefix.toString(), + (prefix) -> this.mPrefix = OrePrefixes.getPrefix(prefix, this.mPrefix))); + } + + @Override + protected Function, List> getItemStackReplacementTooltip() { + return (itemTooltip) -> { + List replacementTooltip = new ArrayList<>(); + replacementTooltip.add("Filter set to " + mPrefix.mRegularLocalName); + replacementTooltip.add("Ore prefix: §e" + mPrefix + "§r"); + replacementTooltip.add("Filter size: §e" + mPrefix.mPrefixedItems.size() + "§r"); + replacementTooltip.addAll(mTooltipCache.getData(REPRESENTATION_SLOT_TOOLTIP).text); + return replacementTooltip; + }; + } + + @Override + protected SlotWidget createFilterIconSlot(BaseSlot slot) { + return new TypeFilterIconSlotWidget(slot); + } + + private class TypeFilterIconSlotWidget extends FilterIconSlotWidget { + + public TypeFilterIconSlotWidget(BaseSlot slot) { + super(slot); + } + + @Override + protected void phantomClick(ClickData clickData, ItemStack cursorStack) { + clickTypeIcon(clickData.mouseButton != 0, cursorStack); + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java deleted file mode 100644 index 6964b13165..0000000000 --- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler.java +++ /dev/null @@ -1,530 +0,0 @@ -package gregtech.common.tileentities.boilers; - -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.ParticleFX; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.SteamVariant; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.modularui.IGetTitleColor; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; -import gregtech.common.GT_Pollution; - -public abstract class GT_MetaTileEntity_Boiler extends GT_MetaTileEntity_BasicTank - implements IGetTitleColor, IAddUIWidgets { - - public static final byte SOUND_EVENT_LET_OFF_EXCESS_STEAM = 1; - public int mTemperature = 20; - public int mProcessingEnergy = 0; - public int mLossTimer = 0; - public FluidStack mSteam = null; - public boolean mHadNoWater = false; - private int mExcessWater = 0; - - public GT_MetaTileEntity_Boiler(int aID, String aName, String aNameRegional, String aDescription, - ITexture... aTextures) { - super(aID, aName, aNameRegional, 0, 4, aDescription, aTextures); - } - - public GT_MetaTileEntity_Boiler(int aID, String aName, String aNameRegional, String[] aDescription, - ITexture... aTextures) { - super(aID, aName, aNameRegional, 0, 4, aDescription, aTextures); - } - - public GT_MetaTileEntity_Boiler(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 4, aDescription, aTextures); - } - - public GT_MetaTileEntity_Boiler(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 4, aDescription, aTextures); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - ITexture[] tmp; - if ((sideDirection.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0) { // Horizontal - if (sideDirection != facingDirection) tmp = mTextures[2][colorIndex + 1]; - else tmp = mTextures[(byte) (active ? 4 : 3)][colorIndex + 1]; - } else { - tmp = mTextures[sideDirection.ordinal()][colorIndex + 1]; - } - if (sideDirection != facingDirection && tmp.length == 2) { - tmp = new ITexture[] { tmp[0] }; - } - return tmp; - } - - @Override - public boolean isElectric() { - return false; - } - - @Override - public boolean isFacingValid(ForgeDirection facingDirection) { - return (facingDirection.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public int getProgresstime() { - return this.mTemperature; - } - - @Override - public int maxProgresstime() { - return 500; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - if (aPlayer != null) { - if (GT_Utility.areStacksEqual(aPlayer.getCurrentEquippedItem(), new ItemStack(Items.water_bucket, 1))) { - fill(Materials.Water.getFluid(1000L * (long) aPlayer.getCurrentEquippedItem().stackSize), true); - - if (!aPlayer.capabilities.isCreativeMode) { - aPlayer.getCurrentEquippedItem() - .func_150996_a(Items.bucket); - } - } else { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - } - } - return true; - } - - @Override - public boolean doesFillContainers() { - return true; - } - - @Override - public boolean doesEmptyContainers() { - return true; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public boolean displaysItemStack() { - return false; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return GT_ModHandler.isWater(aFluid); - } - - @Override - public FluidStack getDrainableStack() { - return this.mSteam; - } - - @Override - public FluidStack setDrainableStack(FluidStack aFluid) { - this.mSteam = aFluid; - return this.mSteam; - } - - @Override - public boolean isDrainableStackSeparate() { - return true; - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCover) { - return GregTech_API.getCoverBehaviorNew(aCover.toStack()) - .isSimpleCover(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mLossTimer", this.mLossTimer); - aNBT.setInteger("mTemperature", this.mTemperature); - aNBT.setInteger("mProcessingEnergy", this.mProcessingEnergy); - aNBT.setInteger("mExcessWater", this.mExcessWater); - if (this.mSteam == null) { - return; - } - try { - aNBT.setTag("mSteam", this.mSteam.writeToNBT(new NBTTagCompound())); - } catch (Throwable ignored) {} - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.mLossTimer = aNBT.getInteger("mLossTimer"); - this.mTemperature = aNBT.getInteger("mTemperature"); - this.mProcessingEnergy = aNBT.getInteger("mProcessingEnergy"); - this.mExcessWater = aNBT.getInteger("mExcessWater"); - this.mSteam = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mSteam")); - } - - /** - * Produce some steam. Assume water is present. - */ - protected void produceSteam(int aAmount) { - mExcessWater -= aAmount; - if (mExcessWater < 0) { - int tWaterToConsume = -mExcessWater / GT_Values.STEAM_PER_WATER; - mFluid.amount -= tWaterToConsume; - mExcessWater += GT_Values.STEAM_PER_WATER * tWaterToConsume; - } - if (GT_ModHandler.isSteam(this.mSteam)) { - this.mSteam.amount += aAmount; - } else { - this.mSteam = GT_ModHandler.getSteam(aAmount); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - pollute(aTick); - - if (isNotAllowedToWork(aBaseMetaTileEntity, aTick)) return; - - calculateCooldown(); - pushSteamToInventories(aBaseMetaTileEntity); - - if (canNotCreateSteam(aBaseMetaTileEntity, aTick)) { - pollute(aTick); - return; - } - - ventSteamIfTankIsFull(); - updateFuelTimed(aBaseMetaTileEntity, aTick); - calculateHeatUp(aBaseMetaTileEntity, aTick); - } - - private boolean isNotAllowedToWork(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - return (!aBaseMetaTileEntity.isServerSide()) || (aTick <= 20L); - } - - private void pollute(long aTick) { - if (this.mProcessingEnergy > 0 && (aTick % 20L == 0L)) { - GT_Pollution.addPollution(getBaseMetaTileEntity(), getPollution()); - } - } - - private void calculateHeatUp(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if ((this.mTemperature < getMaxTemperature()) && (this.mProcessingEnergy > 0) - && (aTick % getHeatUpRate() == 0L)) { - this.mProcessingEnergy -= getEnergyConsumption(); - this.mTemperature += getHeatUpAmount(); - } - aBaseMetaTileEntity.setActive(this.mProcessingEnergy > 0); - } - - private void updateFuelTimed(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork())) - updateFuel(aBaseMetaTileEntity, aTick); - } - - protected void ventSteamIfTankIsFull() { - if ((this.mSteam != null) && (this.mSteam.amount > getSteamCapacity())) { - sendSound(SOUND_EVENT_LET_OFF_EXCESS_STEAM); - this.mSteam.amount = getSteamCapacity() * 3 / 4; - } - } - - private boolean canNotCreateSteam(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aTick % 10L != 0L) { - return false; - } - - if (this.mTemperature > 100) { - if ((!GT_ModHandler.isWater(this.mFluid)) || (this.mFluid.amount <= 0)) { - this.mHadNoWater = true; - } else { - if (this.mHadNoWater) { - GT_Log.exp.println("Boiler " + this.mName + " had no Water!"); - onDangerousWaterLack(aBaseMetaTileEntity, aTick); - return true; - } - produceSteam(getProductionPerSecond() / 2); - } - } else { - this.mHadNoWater = false; - } - return false; - } - - protected void onDangerousWaterLack(IGregTechTileEntity tile, long ignoredTicks) { - tile.doExplosion(2048L); - } - - /** - * Pushes Steam to a Side of this Boiler - * - * @param aBaseMetaTileEntity The tile-entity instance of this Boiler - * @param side The direction of the side to push Steam to - */ - protected final void pushSteamToSide(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side) { - if (mSteam == null || mSteam.amount == 0) return; - final IFluidHandler tTileEntity = aBaseMetaTileEntity.getITankContainerAtSide(side); - if (tTileEntity == null) return; - GT_Utility.moveFluid(aBaseMetaTileEntity, tTileEntity, side, Math.max(1, this.mSteam.amount / 2), null); - } - - /** - * Pushes steam to Fluid inventories at all sides except Front and Bottom. - * - * @param aBaseMetaTileEntity The tile-entity instance of this Boiler - */ - protected void pushSteamToInventories(IGregTechTileEntity aBaseMetaTileEntity) { - if (mSteam == null || mSteam.amount == 0) return; - for (final ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { - if (direction == aBaseMetaTileEntity.getFrontFacing() || direction == ForgeDirection.DOWN) continue; - if (this.mSteam == null) break; - pushSteamToSide(aBaseMetaTileEntity, direction); - } - } - - private void calculateCooldown() { - if (this.mTemperature <= 20) { - this.mTemperature = 20; - this.mLossTimer = 0; - } else if (++this.mLossTimer > getCooldownInterval()) { - // only loss temperature if hot - this.mTemperature -= 1; - this.mLossTimer = 0; - } - } - - protected boolean isAutomatable() { - return GT_Mod.gregtechproxy.mAllowSmallBoilerAutomation; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return isAutomatable() && aIndex == 1 || aIndex == 3; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return isAutomatable() && (aIndex == 0 && isItemValidFluidFilledItem(aStack)) - || (aIndex == 2 && isItemValidFuel(aStack)); - } - - @Override - public void doSound(byte aIndex, double aX, double aY, double aZ) { - if (aIndex == GT_MetaTileEntity_Boiler.SOUND_EVENT_LET_OFF_EXCESS_STEAM) { - GT_Utility.doSoundAtClient(SoundResource.RANDOM_FIZZ, 2, 1.0F, aX, aY, aZ); - - new ParticleEventBuilder().setIdentifier(ParticleFX.CLOUD) - .setWorld(getBaseMetaTileEntity().getWorld()) - .setMotion(0D, 0D, 0D) - .times( - 8, - x -> x.setPosition(aX - 0.5D + XSTR_INSTANCE.nextFloat(), aY, aZ - 0.5D + XSTR_INSTANCE.nextFloat()) - .run()); - } - } - - @Override - public int getTankPressure() { - return 100; - } - - protected abstract int getPollution(); - - @Override - public int getCapacity() { - return 16000; - } - - protected int getSteamCapacity() { - return getCapacity(); - } - - protected abstract int getProductionPerSecond(); - - protected abstract int getMaxTemperature(); - - protected abstract int getEnergyConsumption(); - - protected abstract int getCooldownInterval(); - - protected int getHeatUpRate() { - return 12; - } - - protected int getHeatUpAmount() { - return 1; - } - - protected abstract void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick); - - @Override - public SteamVariant getSteamVariant() { - return SteamVariant.BRONZE; - } - - protected IDrawable[] getFuelSlotBackground() { - return new IDrawable[] { getGUITextureSet().getItemSlot(), - GT_UITextures.OVERLAY_SLOT_COAL_STEAM.get(getSteamVariant()) }; - } - - protected IDrawable[] getAshSlotBackground() { - return new IDrawable[] { getGUITextureSet().getItemSlot(), - GT_UITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant()) }; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new SlotWidget(inventoryHandler, 0).setFilter(this::isItemValidFluidFilledItem) - .setPos(43, 25) - .setBackground(getGUITextureSet().getItemSlot(), getOverlaySlotIn())) - .widget( - new SlotWidget(inventoryHandler, 1).setAccess(true, false) - .setPos(43, 61) - .setBackground(getGUITextureSet().getItemSlot(), getOverlaySlotOut())) - .widget(createFuelSlot()) - .widget(createAshSlot()) - .widget( - new ProgressBar().setProgress(() -> mSteam == null ? 0 : (float) mSteam.amount / getSteamCapacity()) - .setTexture(getProgressbarEmpty(), GT_UITextures.PROGRESSBAR_BOILER_STEAM, 10) - .setDirection(ProgressBar.Direction.UP) - .setPos(70, 25) - .setSize(10, 54)) - .widget( - new ProgressBar().setProgress(() -> mFluid == null ? 0 : (float) mFluid.amount / getCapacity()) - .setTexture(getProgressbarEmpty(), GT_UITextures.PROGRESSBAR_BOILER_WATER, 10) - .setDirection(ProgressBar.Direction.UP) - .setPos(83, 25) - .setSize(10, 54)) - .widget( - new ProgressBar().setProgress(() -> (float) mTemperature / maxProgresstime()) - .setTexture(getProgressbarEmpty(), GT_UITextures.PROGRESSBAR_BOILER_HEAT, 10) - .setDirection(ProgressBar.Direction.UP) - .setPos(96, 25) - .setSize(10, 54)) - .widget( - new ProgressBar() - // cap minimum so that one can easily see there's fuel remaining - .setProgress(() -> mProcessingEnergy > 0 ? Math.max((float) mProcessingEnergy / 1000, 1f / 5) : 0) - .setTexture(getProgressbarFuel(), 14) - .setDirection(ProgressBar.Direction.UP) - .setPos(116, 45) - .setSize(14, 14)) - .widget( - new DrawableWidget().setDrawable(getOverlaySlotCanister()) - .setPos(43, 43) - .setSize(18, 18)); - } - - private boolean isItemValidFluidFilledItem(@NotNull ItemStack stack) { - return isFluidInputAllowed(GT_Utility.getFluidForFilledItem(stack, true)); - } - - protected Widget createFuelSlot() { - return new SlotWidget(inventoryHandler, 2).setFilter(this::isItemValidFuel) - .setPos(115, 61) - .setBackground(getFuelSlotBackground()); - } - - protected boolean isItemValidFuel(@NotNull ItemStack stack) { - return true; - } - - protected SlotWidget createAshSlot() { - return (SlotWidget) new SlotWidget(inventoryHandler, 3).setAccess(true, false) - .setPos(115, 25) - .setBackground(getAshSlotBackground()); - } - - @Override - public GUITextureSet getGUITextureSet() { - return GUITextureSet.STEAM.apply(getSteamVariant()); - } - - @Override - public int getTitleColor() { - return getSteamVariant() == SteamVariant.BRONZE ? COLOR_TITLE.get() : COLOR_TITLE_WHITE.get(); - } - - // for GT++ - - protected IDrawable getOverlaySlotIn() { - return GT_UITextures.OVERLAY_SLOT_IN_STEAM.get(getSteamVariant()); - } - - protected IDrawable getOverlaySlotOut() { - return GT_UITextures.OVERLAY_SLOT_OUT_STEAM.get(getSteamVariant()); - } - - protected IDrawable getOverlaySlotCanister() { - return GT_UITextures.OVERLAY_SLOT_CANISTER_STEAM.get(getSteamVariant()); - } - - protected UITexture getProgressbarEmpty() { - return GT_UITextures.PROGRESSBAR_BOILER_EMPTY_STEAM.get(getSteamVariant()); - } - - protected UITexture getProgressbarFuel() { - return GT_UITextures.PROGRESSBAR_FUEL_STEAM.get(getSteamVariant()); - } -} diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java deleted file mode 100644 index 3450d55290..0000000000 --- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Bronze.java +++ /dev/null @@ -1,260 +0,0 @@ -package gregtech.common.tileentities.boilers; - -import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT; -import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import java.util.Optional; -import java.util.stream.Stream; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntityFurnace; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidContainerRegistry; - -import org.jetbrains.annotations.NotNull; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.ParticleFX; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.XSTR; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; -import gregtech.common.GT_Pollution; - -public class GT_MetaTileEntity_Boiler_Bronze extends GT_MetaTileEntity_Boiler { - - public GT_MetaTileEntity_Boiler_Bronze(int aID, String aName, String aNameRegional) { - super( - aID, - aName, - aNameRegional, - new String[] { "An early way to get Steam Power", "Produces 120L of Steam per second", - "Causes " + GT_Mod.gregtechproxy.mPollutionSmallCoalBoilerPerSecond + " Pollution per second" }); - } - - public GT_MetaTileEntity_Boiler_Bronze(int aID, String aName, String aNameRegional, String[] aDescription) { - super(aID, aName, aNameRegional, aDescription); - } - - public GT_MetaTileEntity_Boiler_Bronze(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_Boiler_Bronze(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[5][17][]; - final ITexture[] texBottom = { TextureFactory.of(MACHINE_BRONZEBRICKS_BOTTOM) }, - texTop = { TextureFactory.of(MACHINE_BRONZEBRICKS_TOP), TextureFactory.of(OVERLAY_PIPE) }, - texSide = { TextureFactory.of(MACHINE_BRONZEBRICKS_SIDE), TextureFactory.of(OVERLAY_PIPE) }, - texFront = { TextureFactory.of(MACHINE_BRONZEBRICKS_SIDE), TextureFactory.of(BOILER_FRONT), - TextureFactory.builder() - .addIcon(BOILER_FRONT_GLOW) - .glow() - .build() }, - texFrontActive = { TextureFactory.of(MACHINE_BRONZEBRICKS_SIDE), TextureFactory.of(BOILER_FRONT_ACTIVE), - TextureFactory.builder() - .addIcon(BOILER_FRONT_ACTIVE_GLOW) - .glow() - .build() }; - for (int i = 0; i < 17; i++) { - rTextures[0][i] = texBottom; - rTextures[1][i] = texTop; - rTextures[2][i] = texSide; - rTextures[3][i] = texFront; - rTextures[4][i] = texFrontActive; - } - return rTextures; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_Bronze(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - /** - * Draws random flames and smoke particles in front of active boiler - * - * @param aBaseMetaTileEntity The entity that will handle the {@link Block#randomDisplayTick} - */ - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { - if (aBaseMetaTileEntity.isActive()) { - - final ForgeDirection frontFacing = aBaseMetaTileEntity.getFrontFacing(); - - if ((frontFacing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 - && aBaseMetaTileEntity.getCoverIDAtSide(frontFacing) == 0 - && !aBaseMetaTileEntity.getOpacityAtSide(frontFacing)) { - - final double oX = aBaseMetaTileEntity.getOffsetX(frontFacing, 1) + 8D / 16D; - final double oY = aBaseMetaTileEntity.getOffsetY(frontFacing, 1); - final double oZ = aBaseMetaTileEntity.getOffsetZ(frontFacing, 1) + 8D / 16D; - final double offset = -0.48D; - final double horizontal = XSTR_INSTANCE.nextFloat() * 10D / 16D - 5D / 16D; - - final double x, y, z; - - y = oY + XSTR_INSTANCE.nextFloat() * 6D / 16D; - - if (frontFacing == ForgeDirection.WEST) { - x = oX - offset; - z = oZ + horizontal; - } else if (frontFacing == ForgeDirection.EAST) { - x = oX + offset; - z = oZ + horizontal; - } else if (frontFacing == ForgeDirection.NORTH) { - x = oX + horizontal; - z = oZ - offset; - } else // if (frontFacing == ForgeDirection.SOUTH) - { - x = oX + horizontal; - z = oZ + offset; - } - - ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(0D, 0D, 0D) - .setPosition(x, y, z) - .setWorld(getBaseMetaTileEntity().getWorld()); - particleEventBuilder.setIdentifier(ParticleFX.SMOKE) - .run(); - particleEventBuilder.setIdentifier(ParticleFX.FLAME) - .run(); - } - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if ((aBaseMetaTileEntity.isServerSide()) && (aTick > 20L) - && this.mProcessingEnergy > 0 - && (aTick % 20L == 0L)) { - GT_Pollution.addPollution(getBaseMetaTileEntity(), getPollution()); - } - } - - @Override - protected int getPollution() { - return GT_Mod.gregtechproxy.mPollutionSmallCoalBoilerPerSecond; - } - - @Override - protected int getProductionPerSecond() { - return 120; - } - - @Override - protected int getMaxTemperature() { - return 500; - } - - @Override - protected int getEnergyConsumption() { - return 1; - } - - @Override - protected int getCooldownInterval() { - return 45; - } - - @Override - protected void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - ItemStack fuel = mInventory[2]; - int burnTime = TileEntityFurnace.getItemBurnTime(fuel); - getCombustionPotential(fuel, burnTime).ifPresent(ashMaterial -> { - aBaseMetaTileEntity.decrStackSize(2, 1); - this.mProcessingEnergy += burnTime / 10; - boolean isABlock = !Block.getBlockFromItem(fuel.getItem()) - .equals(Blocks.air); - combustFuel(burnTime, isABlock).map(dustSize -> GT_OreDictUnificator.get(dustSize, ashMaterial, 1L)) - .ifPresent(ashes -> aBaseMetaTileEntity.addStackToSlot(3, ashes)); - }); - } - - private static Optional getCombustionPotential(ItemStack fuel, int burnTime) { - if (burnTime / 10 <= 0 || FluidContainerRegistry.isFilledContainer(fuel)) { - return Optional.empty(); - } - String lowerCaseBlockName = Block.getBlockFromItem(fuel.getItem()) - .getUnlocalizedName() - .toLowerCase(); - if (couldProduceDarkAshes(fuel, lowerCaseBlockName)) { - return Optional.of(Materials.DarkAsh); - } - if (couldProduceRegularAshes(fuel, lowerCaseBlockName, burnTime)) { - return Optional.of(Materials.Ash); - } - return Optional.empty(); - } - - private static boolean couldProduceDarkAshes(ItemStack fuel, String lowerCaseBlockName) { - return GT_Utility.isPartOfMaterials(fuel, Materials.Coal) - || GT_Utility.isPartOfMaterials(fuel, Materials.Lignite) - || lowerCaseBlockName.matches("tile\\..+compressedcoal"); - } - - private static boolean couldProduceRegularAshes(ItemStack fuel, String lowerCaseBlockName, int burnTime) { - return GT_Utility.isPartOfMaterials(fuel, Materials.Charcoal) - || GT_Utility.isPartOfMaterials(fuel, Materials.Diamond) - || (Stream.of("^tile\\..+charcoal", "^tile\\..+coke", "^tile\\..+railcraft.cube") - .anyMatch(lowerCaseBlockName::matches)) - || Stream.of("fuelCoke", "fuelCactusCharcoal", "fuelCactusCoke", "fuelSugarCharcoal", "fuelSugarCoke") - .anyMatch(name -> GT_OreDictUnificator.isItemStackInstanceOf(fuel, name)) - || burnTime >= 2000; - } - - private static Optional combustFuel(int burnTime, boolean isABlock) { - if (isABlock) { - return Optional.of(OrePrefixes.dust); - } else if (XSTR.XSTR_INSTANCE.nextInt(getAshChanceBound(burnTime)) == 0) { - if (burnTime > 100000) { - return Optional.of(OrePrefixes.dust); - } else if (burnTime > 10000) { - return Optional.of(OrePrefixes.dustSmall); - } else { - return Optional.of(OrePrefixes.dustTiny); - } - } - return Optional.empty(); - } - - /** - * The upper bound for the chance to get ash from combustion - *
- * Ash chance scales based on burn time from 14% at 0 up to 50% at 2000 - * - * @param burnTime number assumed to be positive - * @return an upper bound between 7 and 2. - */ - private static int getAshChanceBound(int burnTime) { - return (5 - (Math.min(burnTime, 2000) / 400)) + 2; - } - - @Override - protected boolean isItemValidFuel(@NotNull ItemStack stack) { - return getCombustionPotential(stack, TileEntityFurnace.getItemBurnTime(stack)).isPresent(); - } - -} diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java deleted file mode 100644 index d0dfe74b64..0000000000 --- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Lava.java +++ /dev/null @@ -1,474 +0,0 @@ -package gregtech.common.tileentities.boilers; - -import static gregtech.api.enums.Textures.BlockIcons.BOILER_LAVA_FRONT; -import static gregtech.api.enums.Textures.BlockIcons.BOILER_LAVA_FRONT_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.BOILER_LAVA_FRONT_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.BOILER_LAVA_FRONT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.FLUID_IN_SIGN; -import static gregtech.api.enums.Textures.BlockIcons.FLUID_OUT_SIGN; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_TOP; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DRAIN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.block.Block; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTank; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidContainerItem; -import net.minecraftforge.fluids.IFluidHandler; -import net.minecraftforge.fluids.IFluidTank; - -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.ParticleFX; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.SteamVariant; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; - -public class GT_MetaTileEntity_Boiler_Lava extends GT_MetaTileEntity_Boiler { - - public static final int COOLDOWN_INTERVAL = 20; - public static final int ENERGY_PER_LAVA = 1; - public static final int CONSUMPTION_PER_HEATUP = 3; - public static final int PRODUCTION_PER_SECOND = 600; - private final FluidTank lavaTank = new LavaTank(null, getCapacity()); - private int mCooledLava = 0; - - public GT_MetaTileEntity_Boiler_Lava(int aID, String aName, String aNameRegional) { - super( - aID, - aName, - aNameRegional, - new String[] { "A Boiler running off Lava", "Produces " + PRODUCTION_PER_SECOND + "L of Steam per second", - "Causes " + GT_Mod.gregtechproxy.mPollutionHighPressureLavaBoilerPerSecond + " Pollution per second", - "Consumes " + ((double) CONSUMPTION_PER_HEATUP / ENERGY_PER_LAVA) - + "L of Lava every " - + COOLDOWN_INTERVAL - + " ticks when fully heat up" }); - } - - public GT_MetaTileEntity_Boiler_Lava(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_Boiler_Lava(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - final ForgeDirection rearDirection = facingDirection.getOpposite(); - final ITexture[] tmp; - if ((sideDirection.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0) { - if (sideDirection == facingDirection) { - if (active) tmp = mTextures[4][colorIndex + 1]; - else tmp = mTextures[3][colorIndex + 1]; - } else if (sideDirection == rearDirection) { - tmp = mTextures[5][colorIndex + 1]; - } else { - tmp = mTextures[2][colorIndex + 1]; - } - } else tmp = mTextures[sideDirection.ordinal()][colorIndex + 1]; - if (sideDirection != facingDirection && tmp.length == 2) { - return new ITexture[] { tmp[0] }; - } - return tmp; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[6][17][]; - for (byte color = -1; color < 16; color++) { - int i = color + 1; - short[] colorModulation = Dyes.getModulation(color, Dyes._NULL.mRGBa); - rTextures[0][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_BOTTOM, colorModulation) }; - rTextures[1][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_TOP, colorModulation), - TextureFactory.of(OVERLAY_DRAIN), TextureFactory.of(FLUID_IN_SIGN) }; - rTextures[2][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_SIDE, colorModulation), - TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(FLUID_IN_SIGN) }; - rTextures[3][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_SIDE, colorModulation), - TextureFactory.of(BOILER_LAVA_FRONT, colorModulation), TextureFactory.of(BOILER_LAVA_FRONT_GLOW) }; - rTextures[4][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_SIDE, colorModulation), - TextureFactory.of(BOILER_LAVA_FRONT_ACTIVE), TextureFactory.builder() - .addIcon(BOILER_LAVA_FRONT_ACTIVE_GLOW) - .glow() - .build() }; - rTextures[5][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_SIDE, colorModulation), - TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(FLUID_OUT_SIGN) }; - } - return rTextures; - } - - @Override - public int maxProgresstime() { - return 1000; - } - - @Override - public int getCapacity() { - return 32000; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_Lava(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - protected int getPollution() { - return GT_Mod.gregtechproxy.mPollutionHighPressureLavaBoilerPerSecond; - } - - @Override - protected int getProductionPerSecond() { - return PRODUCTION_PER_SECOND; - } - - @Override - protected int getMaxTemperature() { - return 1000; - } - - @Override - protected int getEnergyConsumption() { - this.mCooledLava += CONSUMPTION_PER_HEATUP; - return CONSUMPTION_PER_HEATUP; - } - - @Override - protected int getCooldownInterval() { - return COOLDOWN_INTERVAL; - } - - /** - * Attempts to fill an {@link IFluidTank} from the {@link FluidStack} content of an {@link ItemStack} - * - * @param destinationIFluidTank The destination {@link IFluidTank} to fill - * @param SourceItemStack The source {@link ItemStack} containing the Fluid - * @return The {@link ItemStack} of the Empty version of the source {@link ItemStack} or {@code null} if none - */ - public static ItemStack fillIFluidTankFromItemStack(IFluidTank destinationIFluidTank, ItemStack SourceItemStack) { - if (destinationIFluidTank == null || SourceItemStack == null) return null; - - final FluidStack containedFluidStack = GT_Utility.getFluidForFilledItem(SourceItemStack, true); - if (containedFluidStack == null || containedFluidStack.amount == 0) return null; - - final int fillableAmount = destinationIFluidTank.fill(containedFluidStack, false); - if (fillableAmount <= 0) return null; - - final Item containerItem = SourceItemStack.getItem(); - if (containerItem instanceof IFluidContainerItem equippedIFluidContainerItem) { - destinationIFluidTank.fill(equippedIFluidContainerItem.drain(SourceItemStack, fillableAmount, true), true); - return null; - } else { - final ItemStack emptyContainerItemStack = GT_Utility.getContainerForFilledItem(SourceItemStack, false); - destinationIFluidTank.fill(containedFluidStack, true); - return emptyContainerItemStack; - } - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide() || aPlayer == null) return true; - - final ItemStack equippedItemStack = aPlayer.getCurrentEquippedItem(); - final FluidStack equippedContainerFluidStack = GT_Utility.getFluidForFilledItem(equippedItemStack, true); - final ItemStack returnedItemStack; - final IFluidTank tank; - - if (GT_ModHandler.isWater(equippedContainerFluidStack)) { - tank = this; - } else if (GT_ModHandler.isLava(equippedContainerFluidStack)) { - tank = lavaTank; - } else { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - returnedItemStack = fillIFluidTankFromItemStack(tank, equippedItemStack); - if (returnedItemStack != null && !aPlayer.capabilities.isCreativeMode) { - if (equippedItemStack.stackSize > 1) { - if (!aPlayer.inventory.addItemStackToInventory(returnedItemStack)) { - aBaseMetaTileEntity.getWorld() - .spawnEntityInWorld( - new EntityItem( - aBaseMetaTileEntity.getWorld(), - (double) aBaseMetaTileEntity.getXCoord() + 0.5D, - (double) aBaseMetaTileEntity.getYCoord() + 1.5D, - (double) aBaseMetaTileEntity.getZCoord() + 0.5D, - equippedItemStack)); - } else if (aPlayer instanceof EntityPlayerMP) { - ((EntityPlayerMP) aPlayer).sendContainerToPlayer(aPlayer.inventoryContainer); - } - aPlayer.inventory.decrStackSize(aPlayer.inventory.currentItem, 1); - } else { - aPlayer.inventory.setInventorySlotContents(aPlayer.inventory.currentItem, returnedItemStack); - } - } - return true; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (lavaTank.getFluid() != null) aNBT.setTag( - "mLava", - lavaTank.getFluid() - .writeToNBT(new NBTTagCompound())); - aNBT.setInteger("mCooledLava", this.mCooledLava); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - lavaTank.setFluid(FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mLava"))); - this.mCooledLava = aNBT.getInteger("mCooledLava"); - } - - /** - * Pushes steam to Fluid inventory at the rear. - * - * @param aBaseMetaTileEntity The tile-entity instance of this Lava Boiler - */ - @Override - protected void pushSteamToInventories(IGregTechTileEntity aBaseMetaTileEntity) { - if (mSteam == null || mSteam.amount == 0) return; - pushSteamToSide( - aBaseMetaTileEntity, - aBaseMetaTileEntity.getFrontFacing() - .getOpposite()); - } - - /** - * Drains Lava from Fluid inventory on top - * - * @param aBaseMetaTileEntity The tile-entity instance of this Lava Boiler - */ - protected void drainLava(IGregTechTileEntity aBaseMetaTileEntity) { - final IFluidHandler upTank = aBaseMetaTileEntity.getITankContainerAtSide(ForgeDirection.UP); - if (upTank == null) return; - // Simulates drain of maximum lava amount up to 1000L that can fit the internal tank - final FluidStack drainableLavaStack = upTank.drain( - ForgeDirection.DOWN, - FluidRegistry.getFluidStack( - "lava", - Math.min( - this.lavaTank.getCapacity() - - (this.lavaTank.getFluid() != null ? this.lavaTank.getFluid().amount : 0), - 1000)), - false); - if (!GT_ModHandler.isLava(drainableLavaStack) || drainableLavaStack.amount <= 0) return; - // Performs actual drain up and fill internal tank - this.lavaTank.fill(upTank.drain(ForgeDirection.DOWN, drainableLavaStack, true), true); - } - - /** - * Processes cooled Lava into Obsidian - * - * @return success | failure when cannot output - */ - private boolean lavaToObsidian() { - if (this.mCooledLava >= 1000) { - if (getBaseMetaTileEntity().addStackToSlot(3, new ItemStack(Blocks.obsidian, 1))) { - this.mCooledLava -= 1000; - } else { - return false; - } - } - return true; - } - - /** - * Draws random flames and smoke particles in front of this Lava Boiler when it is active - * - * @param aBaseMetaTileEntity The entity that will handle the {@link Block#randomDisplayTick} - */ - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { - if (aBaseMetaTileEntity.isActive()) { - - final ForgeDirection frontFacing = aBaseMetaTileEntity.getFrontFacing(); - - if ((frontFacing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 - && aBaseMetaTileEntity.getCoverIDAtSide(frontFacing) == 0 - && !aBaseMetaTileEntity.getOpacityAtSide(frontFacing)) { - - final double oX = aBaseMetaTileEntity.getOffsetX(frontFacing, 1) + 8D / 16D; - final double oY = aBaseMetaTileEntity.getOffsetY(frontFacing, 1); - final double oZ = aBaseMetaTileEntity.getOffsetZ(frontFacing, 1) + 8D / 16D; - final double offset = -0.48D; - final double horizontal = XSTR_INSTANCE.nextFloat() * 10D / 16D - 5D / 16D; - - final double x, y, z; - - y = oY + XSTR_INSTANCE.nextFloat() * 6D / 16D; - - switch (frontFacing) { - case WEST -> { - x = oX - offset; - z = oZ + horizontal; - } - case EAST -> { - x = oX + offset; - z = oZ + horizontal; - } - case NORTH -> { - x = oX + horizontal; - z = oZ - offset; - } - default -> { // case SOUTH: - x = oX + horizontal; - z = oZ + offset; - } - } - - ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(0D, 0D, 0D) - .setPosition(x, y, z) - .setWorld(getBaseMetaTileEntity().getWorld()); - particleEventBuilder.setIdentifier(ParticleFX.SMOKE) - .run(); - particleEventBuilder.setIdentifier(ParticleFX.FLAME) - .run(); - } - } - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return GT_ModHandler.isWater(aFluid) || GT_ModHandler.isLava(aFluid); - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (!aBaseMetaTileEntity.isServerSide()) return; - final FluidStack containedFluidStack = GT_Utility.getFluidForFilledItem(mInventory[getInputSlot()], true); - if (GT_ModHandler.isWater(containedFluidStack)) super.onPreTick(aBaseMetaTileEntity, aTick); - if (GT_ModHandler.isLava(containedFluidStack) - && lavaTank.fill(containedFluidStack, false) == containedFluidStack.amount - && aBaseMetaTileEntity.addStackToSlot( - getOutputSlot(), - GT_Utility.getContainerForFilledItem(mInventory[getInputSlot()], true), - 1)) { - lavaTank.fill(containedFluidStack, true); - aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aTick % 20 == 0) drainLava(aBaseMetaTileEntity); - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - protected boolean isAutomatable() { - return true; - } - - @Override - public void doSound(byte aIndex, double aX, double aY, double aZ) { - if (aIndex != GT_MetaTileEntity_Boiler.SOUND_EVENT_LET_OFF_EXCESS_STEAM) return; - - final ForgeDirection rearDirection = getBaseMetaTileEntity().getFrontFacing() - .getOpposite(); - GT_Utility.doSoundAtClient( - SoundResource.RANDOM_FIZZ, - 2, - 1.0F, - // Sound emitted from center of rear face (Steam Output) - aX + 0.5 * rearDirection.offsetX, - aY, - aZ + 0.5 * rearDirection.offsetZ); - - new ParticleEventBuilder().setIdentifier(ParticleFX.CLOUD) - .setWorld(getBaseMetaTileEntity().getWorld()) - // Particles emitted with a 1 block/s velocity toward rear - .setMotion(rearDirection.offsetX / 20D, 0D, rearDirection.offsetZ / 20D) - .times( - 8, - // Particles emitted from center of rear face (Steam Output) - x -> x.setPosition(aX + rearDirection.offsetX / 2D, aY, aZ + rearDirection.offsetZ / 2D) - .run()); - } - - @Override - protected void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (!lavaToObsidian()) return; - if (lavaTank.getFluid() == null || lavaTank.getFluid().amount <= 0) return; - final int amountToDrain = Math.min(lavaTank.getFluid().amount, 1000); - final FluidStack drainedLava = lavaTank.drain(amountToDrain, false); - if (drainedLava == null || drainedLava.amount == 0) return; - lavaTank.drain(amountToDrain, true); - this.mProcessingEnergy += drainedLava.amount * ENERGY_PER_LAVA; - } - - @Override - public SteamVariant getSteamVariant() { - return SteamVariant.STEEL; - } - - @Override - public int fill(FluidStack aFluid, boolean doFill) { - if (GT_ModHandler.isWater(aFluid)) return super.fill(aFluid, doFill); - if (GT_ModHandler.isLava(aFluid)) return lavaTank.fill(aFluid, doFill); - return 0; - } - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection side) { - return new FluidTankInfo[] { super.getTankInfo(side)[0], - new FluidTankInfo(this.lavaTank.getFluid(), this.lavaTank.getCapacity()), - new FluidTankInfo(getDrainableStack(), getSteamCapacity()) }; - } - - @Override - protected IDrawable[] getAshSlotBackground() { - return new IDrawable[] { getGUITextureSet().getItemSlot(), - GT_UITextures.OVERLAY_SLOT_BLOCK_STEAM.get(getSteamVariant()) }; - } - - @Override - protected Widget createFuelSlot() { - return new FluidSlotWidget(lavaTank).setBackground(getGUITextureSet().getFluidSlot(), getOverlaySlotIn()) - .setPos(115, 61); - } - - static class LavaTank extends FluidTank { - - public LavaTank(FluidStack stack, int capacity) { - super(stack, capacity); - } - - @Override - public int fill(FluidStack resource, boolean doFill) { - return GT_ModHandler.isLava(resource) ? super.fill(resource, doFill) : 0; - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java deleted file mode 100644 index b10b44228d..0000000000 --- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar.java +++ /dev/null @@ -1,311 +0,0 @@ -package gregtech.common.tileentities.boilers; - -import static mcp.mobius.waila.api.SpecialChars.GOLD; -import static mcp.mobius.waila.api.SpecialChars.RESET; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.SteamVariant; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.common.config.machinestats.ConfigBronzeSolarBoiler; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_Boiler_Solar extends GT_MetaTileEntity_Boiler { - - public static final String LPS_FMT = "%s L/s"; - private static final String localizedDescFormat = GT_LanguageManager.addStringLocalization( - "gt.blockmachines.boiler.solar.desc.format", - "Steam Power by the Sun%n" + "Produces %sL of Steam per second%n" - + "Calcifies over time, reducing Steam output to %sL/s%n" - + "Break and replace to descale"); - protected int calcificationTicks = ConfigBronzeSolarBoiler.calcificationTicks; - protected int cooldownTicks = ConfigBronzeSolarBoiler.cooldownTicks; - protected int maxOutputPerSecond = ConfigBronzeSolarBoiler.maxOutputPerSecond; - protected int minOutputPerSecond = ConfigBronzeSolarBoiler.minOutputPerSecond; - - protected final int basicTemperatureMod = 5; // Base Celsius gain or loss - private int mRunTimeTicks = 0; - - public GT_MetaTileEntity_Boiler_Solar(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, new String[0]); - } - - public GT_MetaTileEntity_Boiler_Solar(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_Boiler_Solar(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public int getMaxOutputPerSecond() { - return maxOutputPerSecond; - } - - @Override - public String[] getDescription() { - return String - .format( - localizedDescFormat, - GT_Utility.formatNumbers(getMaxOutputPerSecond()), - GT_Utility.formatNumbers(getMinOutputPerSecond())) - .split("\\R"); - } - - public int getMinOutputPerSecond() { - return minOutputPerSecond; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[4][17][]; - for (int color = -1; color < 16; color++) { - int i = color + 1; - short[] colorModulation = Dyes.getModulation(color, Dyes._NULL.mRGBa); - rTextures[0][i] = new ITexture[] { - TextureFactory.of(BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM, colorModulation) }; - rTextures[1][i] = new ITexture[] { TextureFactory.of(BlockIcons.MACHINE_BRONZEBRICKS_TOP, colorModulation), - TextureFactory.of(BlockIcons.BOILER_SOLAR) }; - rTextures[2][i] = new ITexture[] { - TextureFactory.of(BlockIcons.MACHINE_BRONZEBRICKS_SIDE, colorModulation) }; - rTextures[3][i] = new ITexture[] { TextureFactory.of(BlockIcons.MACHINE_BRONZEBRICKS_SIDE, colorModulation), - TextureFactory.of(BlockIcons.OVERLAY_PIPE) }; - } - return rTextures; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - final int i = colorIndex + 1; - if ((sideDirection.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0) { // Horizontal - if (sideDirection != facingDirection) return mTextures[2][i]; - return mTextures[3][i]; - } - return mTextures[sideDirection.ordinal()][i]; - } - - @Override - public int maxProgresstime() { - return 500; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mRunTime", mRunTimeTicks); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mRunTimeTicks = aNBT.getInteger("mRunTime"); - } - - @Override - protected void produceSteam(int aAmount) { - super.produceSteam(aAmount); - // Disable calcification when using distilled water - if (mFluid.isFluidEqual(GT_ModHandler.getWater(1))) { - // produceSteam is getting called every 10 ticks - if (mRunTimeTicks >= 0 && mRunTimeTicks < (Integer.MAX_VALUE - 10)) mRunTimeTicks += 10; - else mRunTimeTicks = Integer.MAX_VALUE; // Prevent Integer overflow wrap - } - } - - @Override - protected void pushSteamToInventories(IGregTechTileEntity aBaseMetaTileEntity) { - if (mSteam == null || mSteam.amount == 0) return; - pushSteamToSide(aBaseMetaTileEntity, aBaseMetaTileEntity.getFrontFacing()); - } - - @Override - protected int getPollution() { - return 0; - } - - @Override - public int getProductionPerSecond() { - if (mTemperature < 100) { - return 0; - } - if (mRunTimeTicks > getMaxRuntimeTicks()) { - return getMinOutputPerSecond(); - } else if (mRunTimeTicks > getCalcificationTicks()) { - /* - * When reaching calcification ticks; discount the proportion of run-time spent on calcification from the - * maximum output per second, and return this or the minimum output per second - */ - return getMaxOutputPerSecond() - - getMaxOutputPerSecond() * (mRunTimeTicks - getCalcificationTicks()) / getCalcificationTicks(); - } else { - return getMaxOutputPerSecond(); - } - } - - protected int getCalcificationTicks() { - return calcificationTicks; - } - - protected int getCooldownTicks() { - return cooldownTicks; - } - - protected int getMaxRuntimeTicks() { - // After which min output is reached. - return (getMaxOutputPerSecond() - getMinOutputPerSecond()) * getCalcificationTicks() / getMaxOutputPerSecond() - + getCalcificationTicks(); - } - - @Override - protected int getMaxTemperature() { - return 500; - } - - @Override - protected int getEnergyConsumption() { - return basicTemperatureMod; - } - - @Override - protected int getCooldownInterval() { - return getCooldownTicks() / basicTemperatureMod; - } - - @Override - protected int getHeatUpAmount() { - return basicTemperatureMod; - } - - @Override - protected void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - World world = aBaseMetaTileEntity.getWorld(); - // Heat-up every 12s (240 ticks), has to be multiple of 20 ticks - if ((aTick % 240L != 0L) || (world.isThundering())) { - return; - } - if (!aBaseMetaTileEntity.getSkyAtSide(ForgeDirection.UP)) { - return; - } - boolean weatherClear = !world.isRaining() || aBaseMetaTileEntity.getBiome().rainfall == 0.0F; - if (!weatherClear && world.skylightSubtracted >= 4) { - return; - } - if (weatherClear) { - if (world.isDaytime()) { - mProcessingEnergy += 8 * basicTemperatureMod; - } else { - mProcessingEnergy += basicTemperatureMod; - } - } else { - mProcessingEnergy += basicTemperatureMod; - } - } - - @Override - public SteamVariant getSteamVariant() { - return SteamVariant.BRONZE; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return String - .format( - "Heat Capacity: " + EnumChatFormatting.GREEN - + "%s %%" - + EnumChatFormatting.RESET - + " Hot time: " - + EnumChatFormatting.RED - + "%s s" - + EnumChatFormatting.RESET - + "%n" - + "Min output: " - + EnumChatFormatting.RED - + LPS_FMT - + EnumChatFormatting.RESET - + " Max output: " - + EnumChatFormatting.RED - + LPS_FMT - + EnumChatFormatting.RESET - + "%n" - + "Current Output: " - + EnumChatFormatting.YELLOW - + LPS_FMT - + EnumChatFormatting.RESET, - GT_Utility.formatNumbers(getHeatCapacityPercent()), - GT_Utility.formatNumbers(getHotTimeSeconds()), - GT_Utility.formatNumbers(getMinOutputPerSecond()), - GT_Utility.formatNumbers(getMaxOutputPerSecond()), - GT_Utility.formatNumbers(getProductionPerSecond())) - .split("\\R"); - } - - public int getHeatCapacityPercent() { - return mTemperature * 100 / maxProgresstime(); - } - - public int getHotTimeSeconds() { - return mRunTimeTicks / 20; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_Solar(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - protected Widget createFuelSlot() { - return null; - } - - @Override - protected SlotWidget createAshSlot() { - return null; - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - String.format( - (GOLD + "Solar Boiler Output: " + RESET + "%d/%d L/s"), - tag.getInteger("calcificationOutput"), - tag.getInteger("maxCalcificationOutput"))); - - super.getWailaBody(itemStack, currentTip, accessor, config); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("calcificationOutput", (getProductionPerSecond())); - tag.setInteger("maxCalcificationOutput", (getMaxOutputPerSecond())); - } -} diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java deleted file mode 100644 index c537e388d1..0000000000 --- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Solar_Steel.java +++ /dev/null @@ -1,71 +0,0 @@ -package gregtech.common.tileentities.boilers; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.SteamVariant; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.common.config.machinestats.ConfigSteelSolarBoiler; - -public class GT_MetaTileEntity_Boiler_Solar_Steel extends GT_MetaTileEntity_Boiler_Solar { - - public GT_MetaTileEntity_Boiler_Solar_Steel(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - initBoilerStats(); - } - - public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - initBoilerStats(); - } - - public GT_MetaTileEntity_Boiler_Solar_Steel(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - initBoilerStats(); - } - - protected void initBoilerStats() { - calcificationTicks = ConfigSteelSolarBoiler.calcificationTicks; - cooldownTicks = ConfigSteelSolarBoiler.cooldownTicks; - maxOutputPerSecond = ConfigSteelSolarBoiler.maxOutputPerSecond; - minOutputPerSecond = ConfigSteelSolarBoiler.minOutputPerSecond; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - - ITexture[][][] rTextures = new ITexture[4][17][]; - for (int color = -1; color < 16; color++) { - int i = color + 1; - short[] colorModulation = Dyes.getModulation(color, Dyes._NULL.mRGBa); - rTextures[0][i] = new ITexture[] { - TextureFactory.of(BlockIcons.MACHINE_STEELBRICKS_BOTTOM, colorModulation) }; - rTextures[1][i] = new ITexture[] { TextureFactory.of(BlockIcons.MACHINE_STEELBRICKS_TOP, colorModulation), - TextureFactory.of(BlockIcons.BOILER_SOLAR) }; - rTextures[2][i] = new ITexture[] { - TextureFactory.of(BlockIcons.MACHINE_STEELBRICKS_SIDE, colorModulation) }; - rTextures[3][i] = new ITexture[] { TextureFactory.of(BlockIcons.MACHINE_STEELBRICKS_SIDE, colorModulation), - TextureFactory.of(BlockIcons.OVERLAY_PIPE) }; - } - return rTextures; - } - - @Override - public int getCapacity() { - return 32000; - } - - @Override - public SteamVariant getSteamVariant() { - return SteamVariant.STEEL; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_Solar_Steel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } -} diff --git a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java b/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java deleted file mode 100644 index 12374c3313..0000000000 --- a/src/main/java/gregtech/common/tileentities/boilers/GT_MetaTileEntity_Boiler_Steel.java +++ /dev/null @@ -1,108 +0,0 @@ -package gregtech.common.tileentities.boilers; - -import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT; -import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_TOP; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE; - -import gregtech.GT_Mod; -import gregtech.api.enums.SteamVariant; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_Boiler_Steel extends GT_MetaTileEntity_Boiler_Bronze { - - public GT_MetaTileEntity_Boiler_Steel(int aID, String aName, String aNameRegional) { - super( - aID, - aName, - aNameRegional, - new String[] { "Faster than the Bronze Boiler", "Produces 300L of Steam per second", - "Causes " + GT_Mod.gregtechproxy.mPollutionHighPressureCoalBoilerPerSecond + " Pollution per second" }); - } - - public GT_MetaTileEntity_Boiler_Steel(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_Boiler_Steel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[5][17][]; - final ITexture[] texBottom = { TextureFactory.of(MACHINE_STEELBRICKS_BOTTOM) }, - texTop = { TextureFactory.of(MACHINE_STEELBRICKS_TOP), TextureFactory.of(OVERLAY_PIPE) }, - texSide = { TextureFactory.of(MACHINE_STEELBRICKS_SIDE), TextureFactory.of(OVERLAY_PIPE) }, - texFront = { TextureFactory.of(MACHINE_STEELBRICKS_SIDE), TextureFactory.of(BOILER_FRONT), - TextureFactory.builder() - .addIcon(BOILER_FRONT_GLOW) - .glow() - .build() }, - texFrontActive = { TextureFactory.of(MACHINE_STEELBRICKS_SIDE), TextureFactory.of(BOILER_FRONT_ACTIVE), - TextureFactory.builder() - .addIcon(BOILER_FRONT_ACTIVE_GLOW) - .glow() - .build() }; - for (int i = 0; i < 17; i++) { - rTextures[0][i] = texBottom; - rTextures[1][i] = texTop; - rTextures[2][i] = texSide; - rTextures[3][i] = texFront; - rTextures[4][i] = texFrontActive; - } - return rTextures; - } - - @Override - public int maxProgresstime() { - return 1000; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_Steel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - protected int getPollution() { - return GT_Mod.gregtechproxy.mPollutionHighPressureCoalBoilerPerSecond; - } - - @Override - public int getCapacity() { - return 32000; - } - - @Override - protected int getProductionPerSecond() { - return 300; - } - - @Override - protected int getMaxTemperature() { - return 1000; - } - - @Override - protected int getEnergyConsumption() { - return 2; - } - - @Override - protected int getCooldownInterval() { - return 40; - } - - @Override - public SteamVariant getSteamVariant() { - return SteamVariant.STEEL; - } -} diff --git a/src/main/java/gregtech/common/tileentities/boilers/MTEBoiler.java b/src/main/java/gregtech/common/tileentities/boilers/MTEBoiler.java new file mode 100644 index 0000000000..b49da44e97 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/boilers/MTEBoiler.java @@ -0,0 +1,527 @@ +package gregtech.common.tileentities.boilers; + +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.ParticleFX; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.SteamVariant; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.modularui.IGetTitleColor; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.objects.GTItemStack; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; +import gregtech.common.Pollution; + +public abstract class MTEBoiler extends MTEBasicTank implements IGetTitleColor, IAddUIWidgets { + + public static final byte SOUND_EVENT_LET_OFF_EXCESS_STEAM = 1; + public int mTemperature = 20; + public int mProcessingEnergy = 0; + public int mLossTimer = 0; + public FluidStack mSteam = null; + public boolean mHadNoWater = false; + private int mExcessWater = 0; + + public MTEBoiler(int aID, String aName, String aNameRegional, String aDescription, ITexture... aTextures) { + super(aID, aName, aNameRegional, 0, 4, aDescription, aTextures); + } + + public MTEBoiler(int aID, String aName, String aNameRegional, String[] aDescription, ITexture... aTextures) { + super(aID, aName, aNameRegional, 0, 4, aDescription, aTextures); + } + + public MTEBoiler(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + public MTEBoiler(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + ITexture[] tmp; + if ((sideDirection.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0) { // Horizontal + if (sideDirection != facingDirection) tmp = mTextures[2][colorIndex + 1]; + else tmp = mTextures[(byte) (active ? 4 : 3)][colorIndex + 1]; + } else { + tmp = mTextures[sideDirection.ordinal()][colorIndex + 1]; + } + if (sideDirection != facingDirection && tmp.length == 2) { + tmp = new ITexture[] { tmp[0] }; + } + return tmp; + } + + @Override + public boolean isElectric() { + return false; + } + + @Override + public boolean isFacingValid(ForgeDirection facingDirection) { + return (facingDirection.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public int getProgresstime() { + return this.mTemperature; + } + + @Override + public int maxProgresstime() { + return 500; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + if (aPlayer != null) { + if (GTUtility.areStacksEqual(aPlayer.getCurrentEquippedItem(), new ItemStack(Items.water_bucket, 1))) { + fill(Materials.Water.getFluid(1000L * (long) aPlayer.getCurrentEquippedItem().stackSize), true); + + if (!aPlayer.capabilities.isCreativeMode) { + aPlayer.getCurrentEquippedItem() + .func_150996_a(Items.bucket); + } + } else { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + } + } + return true; + } + + @Override + public boolean doesFillContainers() { + return true; + } + + @Override + public boolean doesEmptyContainers() { + return true; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public boolean displaysItemStack() { + return false; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return GTModHandler.isWater(aFluid); + } + + @Override + public FluidStack getDrainableStack() { + return this.mSteam; + } + + @Override + public FluidStack setDrainableStack(FluidStack aFluid) { + this.mSteam = aFluid; + return this.mSteam; + } + + @Override + public boolean isDrainableStackSeparate() { + return true; + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCover) { + return GregTechAPI.getCoverBehaviorNew(aCover.toStack()) + .isSimpleCover(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mLossTimer", this.mLossTimer); + aNBT.setInteger("mTemperature", this.mTemperature); + aNBT.setInteger("mProcessingEnergy", this.mProcessingEnergy); + aNBT.setInteger("mExcessWater", this.mExcessWater); + if (this.mSteam == null) { + return; + } + try { + aNBT.setTag("mSteam", this.mSteam.writeToNBT(new NBTTagCompound())); + } catch (Throwable ignored) {} + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.mLossTimer = aNBT.getInteger("mLossTimer"); + this.mTemperature = aNBT.getInteger("mTemperature"); + this.mProcessingEnergy = aNBT.getInteger("mProcessingEnergy"); + this.mExcessWater = aNBT.getInteger("mExcessWater"); + this.mSteam = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mSteam")); + } + + /** + * Produce some steam. Assume water is present. + */ + protected void produceSteam(int aAmount) { + mExcessWater -= aAmount; + if (mExcessWater < 0) { + int tWaterToConsume = -mExcessWater / GTValues.STEAM_PER_WATER; + mFluid.amount -= tWaterToConsume; + mExcessWater += GTValues.STEAM_PER_WATER * tWaterToConsume; + } + if (GTModHandler.isSteam(this.mSteam)) { + this.mSteam.amount += aAmount; + } else { + this.mSteam = GTModHandler.getSteam(aAmount); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + pollute(aTick); + + if (isNotAllowedToWork(aBaseMetaTileEntity, aTick)) return; + + calculateCooldown(); + pushSteamToInventories(aBaseMetaTileEntity); + + if (canNotCreateSteam(aBaseMetaTileEntity, aTick)) { + pollute(aTick); + return; + } + + ventSteamIfTankIsFull(); + updateFuelTimed(aBaseMetaTileEntity, aTick); + calculateHeatUp(aBaseMetaTileEntity, aTick); + } + + private boolean isNotAllowedToWork(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + return (!aBaseMetaTileEntity.isServerSide()) || (aTick <= 20L); + } + + private void pollute(long aTick) { + if (this.mProcessingEnergy > 0 && (aTick % 20L == 0L)) { + Pollution.addPollution(getBaseMetaTileEntity(), getPollution()); + } + } + + private void calculateHeatUp(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if ((this.mTemperature < getMaxTemperature()) && (this.mProcessingEnergy > 0) + && (aTick % getHeatUpRate() == 0L)) { + this.mProcessingEnergy -= getEnergyConsumption(); + this.mTemperature += getHeatUpAmount(); + } + aBaseMetaTileEntity.setActive(this.mProcessingEnergy > 0); + } + + private void updateFuelTimed(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork())) + updateFuel(aBaseMetaTileEntity, aTick); + } + + protected void ventSteamIfTankIsFull() { + if ((this.mSteam != null) && (this.mSteam.amount > getSteamCapacity())) { + sendSound(SOUND_EVENT_LET_OFF_EXCESS_STEAM); + this.mSteam.amount = getSteamCapacity() * 3 / 4; + } + } + + private boolean canNotCreateSteam(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aTick % 10L != 0L) { + return false; + } + + if (this.mTemperature > 100) { + if ((!GTModHandler.isWater(this.mFluid)) || (this.mFluid.amount <= 0)) { + this.mHadNoWater = true; + } else { + if (this.mHadNoWater) { + GTLog.exp.println("Boiler " + this.mName + " had no Water!"); + onDangerousWaterLack(aBaseMetaTileEntity, aTick); + return true; + } + produceSteam(getProductionPerSecond() / 2); + } + } else { + this.mHadNoWater = false; + } + return false; + } + + protected void onDangerousWaterLack(IGregTechTileEntity tile, long ignoredTicks) { + tile.doExplosion(2048L); + } + + /** + * Pushes Steam to a Side of this Boiler + * + * @param aBaseMetaTileEntity The tile-entity instance of this Boiler + * @param side The direction of the side to push Steam to + */ + protected final void pushSteamToSide(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side) { + if (mSteam == null || mSteam.amount == 0) return; + final IFluidHandler tTileEntity = aBaseMetaTileEntity.getITankContainerAtSide(side); + if (tTileEntity == null) return; + GTUtility.moveFluid(aBaseMetaTileEntity, tTileEntity, side, Math.max(1, this.mSteam.amount / 2), null); + } + + /** + * Pushes steam to Fluid inventories at all sides except Front and Bottom. + * + * @param aBaseMetaTileEntity The tile-entity instance of this Boiler + */ + protected void pushSteamToInventories(IGregTechTileEntity aBaseMetaTileEntity) { + if (mSteam == null || mSteam.amount == 0) return; + for (final ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) { + if (direction == aBaseMetaTileEntity.getFrontFacing() || direction == ForgeDirection.DOWN) continue; + if (this.mSteam == null) break; + pushSteamToSide(aBaseMetaTileEntity, direction); + } + } + + private void calculateCooldown() { + if (this.mTemperature <= 20) { + this.mTemperature = 20; + this.mLossTimer = 0; + } else if (++this.mLossTimer > getCooldownInterval()) { + // only loss temperature if hot + this.mTemperature -= 1; + this.mLossTimer = 0; + } + } + + protected boolean isAutomatable() { + return GTMod.gregtechproxy.mAllowSmallBoilerAutomation; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return isAutomatable() && aIndex == 1 || aIndex == 3; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return isAutomatable() && (aIndex == 0 && isItemValidFluidFilledItem(aStack)) + || (aIndex == 2 && isItemValidFuel(aStack)); + } + + @Override + public void doSound(byte aIndex, double aX, double aY, double aZ) { + if (aIndex == MTEBoiler.SOUND_EVENT_LET_OFF_EXCESS_STEAM) { + GTUtility.doSoundAtClient(SoundResource.RANDOM_FIZZ, 2, 1.0F, aX, aY, aZ); + + new ParticleEventBuilder().setIdentifier(ParticleFX.CLOUD) + .setWorld(getBaseMetaTileEntity().getWorld()) + .setMotion(0D, 0D, 0D) + .times( + 8, + x -> x.setPosition(aX - 0.5D + XSTR_INSTANCE.nextFloat(), aY, aZ - 0.5D + XSTR_INSTANCE.nextFloat()) + .run()); + } + } + + @Override + public int getTankPressure() { + return 100; + } + + protected abstract int getPollution(); + + @Override + public int getCapacity() { + return 16000; + } + + protected int getSteamCapacity() { + return getCapacity(); + } + + protected abstract int getProductionPerSecond(); + + protected abstract int getMaxTemperature(); + + protected abstract int getEnergyConsumption(); + + protected abstract int getCooldownInterval(); + + protected int getHeatUpRate() { + return 12; + } + + protected int getHeatUpAmount() { + return 1; + } + + protected abstract void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick); + + @Override + public SteamVariant getSteamVariant() { + return SteamVariant.BRONZE; + } + + protected IDrawable[] getFuelSlotBackground() { + return new IDrawable[] { getGUITextureSet().getItemSlot(), + GTUITextures.OVERLAY_SLOT_COAL_STEAM.get(getSteamVariant()) }; + } + + protected IDrawable[] getAshSlotBackground() { + return new IDrawable[] { getGUITextureSet().getItemSlot(), + GTUITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant()) }; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new SlotWidget(inventoryHandler, 0).setFilter(this::isItemValidFluidFilledItem) + .setPos(43, 25) + .setBackground(getGUITextureSet().getItemSlot(), getOverlaySlotIn())) + .widget( + new SlotWidget(inventoryHandler, 1).setAccess(true, false) + .setPos(43, 61) + .setBackground(getGUITextureSet().getItemSlot(), getOverlaySlotOut())) + .widget(createFuelSlot()) + .widget(createAshSlot()) + .widget( + new ProgressBar().setProgress(() -> mSteam == null ? 0 : (float) mSteam.amount / getSteamCapacity()) + .setTexture(getProgressbarEmpty(), GTUITextures.PROGRESSBAR_BOILER_STEAM, 10) + .setDirection(ProgressBar.Direction.UP) + .setPos(70, 25) + .setSize(10, 54)) + .widget( + new ProgressBar().setProgress(() -> mFluid == null ? 0 : (float) mFluid.amount / getCapacity()) + .setTexture(getProgressbarEmpty(), GTUITextures.PROGRESSBAR_BOILER_WATER, 10) + .setDirection(ProgressBar.Direction.UP) + .setPos(83, 25) + .setSize(10, 54)) + .widget( + new ProgressBar().setProgress(() -> (float) mTemperature / maxProgresstime()) + .setTexture(getProgressbarEmpty(), GTUITextures.PROGRESSBAR_BOILER_HEAT, 10) + .setDirection(ProgressBar.Direction.UP) + .setPos(96, 25) + .setSize(10, 54)) + .widget( + new ProgressBar() + // cap minimum so that one can easily see there's fuel remaining + .setProgress(() -> mProcessingEnergy > 0 ? Math.max((float) mProcessingEnergy / 1000, 1f / 5) : 0) + .setTexture(getProgressbarFuel(), 14) + .setDirection(ProgressBar.Direction.UP) + .setPos(116, 45) + .setSize(14, 14)) + .widget( + new DrawableWidget().setDrawable(getOverlaySlotCanister()) + .setPos(43, 43) + .setSize(18, 18)); + } + + private boolean isItemValidFluidFilledItem(@NotNull ItemStack stack) { + return isFluidInputAllowed(GTUtility.getFluidForFilledItem(stack, true)); + } + + protected Widget createFuelSlot() { + return new SlotWidget(inventoryHandler, 2).setFilter(this::isItemValidFuel) + .setPos(115, 61) + .setBackground(getFuelSlotBackground()); + } + + protected boolean isItemValidFuel(@NotNull ItemStack stack) { + return true; + } + + protected SlotWidget createAshSlot() { + return (SlotWidget) new SlotWidget(inventoryHandler, 3).setAccess(true, false) + .setPos(115, 25) + .setBackground(getAshSlotBackground()); + } + + @Override + public GUITextureSet getGUITextureSet() { + return GUITextureSet.STEAM.apply(getSteamVariant()); + } + + @Override + public int getTitleColor() { + return getSteamVariant() == SteamVariant.BRONZE ? COLOR_TITLE.get() : COLOR_TITLE_WHITE.get(); + } + + // for GT++ + + protected IDrawable getOverlaySlotIn() { + return GTUITextures.OVERLAY_SLOT_IN_STEAM.get(getSteamVariant()); + } + + protected IDrawable getOverlaySlotOut() { + return GTUITextures.OVERLAY_SLOT_OUT_STEAM.get(getSteamVariant()); + } + + protected IDrawable getOverlaySlotCanister() { + return GTUITextures.OVERLAY_SLOT_CANISTER_STEAM.get(getSteamVariant()); + } + + protected UITexture getProgressbarEmpty() { + return GTUITextures.PROGRESSBAR_BOILER_EMPTY_STEAM.get(getSteamVariant()); + } + + protected UITexture getProgressbarFuel() { + return GTUITextures.PROGRESSBAR_FUEL_STEAM.get(getSteamVariant()); + } +} diff --git a/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerBronze.java b/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerBronze.java new file mode 100644 index 0000000000..e951656d23 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerBronze.java @@ -0,0 +1,259 @@ +package gregtech.common.tileentities.boilers; + +import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT; +import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import java.util.Optional; +import java.util.stream.Stream; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidContainerRegistry; + +import org.jetbrains.annotations.NotNull; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.ParticleFX; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.XSTR; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; +import gregtech.common.Pollution; + +public class MTEBoilerBronze extends MTEBoiler { + + public MTEBoilerBronze(int aID, String aName, String aNameRegional) { + super( + aID, + aName, + aNameRegional, + new String[] { "An early way to get Steam Power", "Produces 120L of Steam per second", + "Causes " + GTMod.gregtechproxy.mPollutionSmallCoalBoilerPerSecond + " Pollution per second" }); + } + + public MTEBoilerBronze(int aID, String aName, String aNameRegional, String[] aDescription) { + super(aID, aName, aNameRegional, aDescription); + } + + public MTEBoilerBronze(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEBoilerBronze(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[5][17][]; + final ITexture[] texBottom = { TextureFactory.of(MACHINE_BRONZEBRICKS_BOTTOM) }, + texTop = { TextureFactory.of(MACHINE_BRONZEBRICKS_TOP), TextureFactory.of(OVERLAY_PIPE) }, + texSide = { TextureFactory.of(MACHINE_BRONZEBRICKS_SIDE), TextureFactory.of(OVERLAY_PIPE) }, + texFront = { TextureFactory.of(MACHINE_BRONZEBRICKS_SIDE), TextureFactory.of(BOILER_FRONT), + TextureFactory.builder() + .addIcon(BOILER_FRONT_GLOW) + .glow() + .build() }, + texFrontActive = { TextureFactory.of(MACHINE_BRONZEBRICKS_SIDE), TextureFactory.of(BOILER_FRONT_ACTIVE), + TextureFactory.builder() + .addIcon(BOILER_FRONT_ACTIVE_GLOW) + .glow() + .build() }; + for (int i = 0; i < 17; i++) { + rTextures[0][i] = texBottom; + rTextures[1][i] = texTop; + rTextures[2][i] = texSide; + rTextures[3][i] = texFront; + rTextures[4][i] = texFrontActive; + } + return rTextures; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBoilerBronze(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + /** + * Draws random flames and smoke particles in front of active boiler + * + * @param aBaseMetaTileEntity The entity that will handle the {@link Block#randomDisplayTick} + */ + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { + if (aBaseMetaTileEntity.isActive()) { + + final ForgeDirection frontFacing = aBaseMetaTileEntity.getFrontFacing(); + + if ((frontFacing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 + && aBaseMetaTileEntity.getCoverIDAtSide(frontFacing) == 0 + && !aBaseMetaTileEntity.getOpacityAtSide(frontFacing)) { + + final double oX = aBaseMetaTileEntity.getOffsetX(frontFacing, 1) + 8D / 16D; + final double oY = aBaseMetaTileEntity.getOffsetY(frontFacing, 1); + final double oZ = aBaseMetaTileEntity.getOffsetZ(frontFacing, 1) + 8D / 16D; + final double offset = -0.48D; + final double horizontal = XSTR_INSTANCE.nextFloat() * 10D / 16D - 5D / 16D; + + final double x, y, z; + + y = oY + XSTR_INSTANCE.nextFloat() * 6D / 16D; + + if (frontFacing == ForgeDirection.WEST) { + x = oX - offset; + z = oZ + horizontal; + } else if (frontFacing == ForgeDirection.EAST) { + x = oX + offset; + z = oZ + horizontal; + } else if (frontFacing == ForgeDirection.NORTH) { + x = oX + horizontal; + z = oZ - offset; + } else // if (frontFacing == ForgeDirection.SOUTH) + { + x = oX + horizontal; + z = oZ + offset; + } + + ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(0D, 0D, 0D) + .setPosition(x, y, z) + .setWorld(getBaseMetaTileEntity().getWorld()); + particleEventBuilder.setIdentifier(ParticleFX.SMOKE) + .run(); + particleEventBuilder.setIdentifier(ParticleFX.FLAME) + .run(); + } + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if ((aBaseMetaTileEntity.isServerSide()) && (aTick > 20L) + && this.mProcessingEnergy > 0 + && (aTick % 20L == 0L)) { + Pollution.addPollution(getBaseMetaTileEntity(), getPollution()); + } + } + + @Override + protected int getPollution() { + return GTMod.gregtechproxy.mPollutionSmallCoalBoilerPerSecond; + } + + @Override + protected int getProductionPerSecond() { + return 120; + } + + @Override + protected int getMaxTemperature() { + return 500; + } + + @Override + protected int getEnergyConsumption() { + return 1; + } + + @Override + protected int getCooldownInterval() { + return 45; + } + + @Override + protected void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + ItemStack fuel = mInventory[2]; + int burnTime = TileEntityFurnace.getItemBurnTime(fuel); + getCombustionPotential(fuel, burnTime).ifPresent(ashMaterial -> { + aBaseMetaTileEntity.decrStackSize(2, 1); + this.mProcessingEnergy += burnTime / 10; + boolean isABlock = !Block.getBlockFromItem(fuel.getItem()) + .equals(Blocks.air); + combustFuel(burnTime, isABlock).map(dustSize -> GTOreDictUnificator.get(dustSize, ashMaterial, 1L)) + .ifPresent(ashes -> aBaseMetaTileEntity.addStackToSlot(3, ashes)); + }); + } + + private static Optional getCombustionPotential(ItemStack fuel, int burnTime) { + if (burnTime / 10 <= 0 || FluidContainerRegistry.isFilledContainer(fuel)) { + return Optional.empty(); + } + String lowerCaseBlockName = Block.getBlockFromItem(fuel.getItem()) + .getUnlocalizedName() + .toLowerCase(); + if (couldProduceDarkAshes(fuel, lowerCaseBlockName)) { + return Optional.of(Materials.DarkAsh); + } + if (couldProduceRegularAshes(fuel, lowerCaseBlockName, burnTime)) { + return Optional.of(Materials.Ash); + } + return Optional.empty(); + } + + private static boolean couldProduceDarkAshes(ItemStack fuel, String lowerCaseBlockName) { + return GTUtility.isPartOfMaterials(fuel, Materials.Coal) || GTUtility.isPartOfMaterials(fuel, Materials.Lignite) + || lowerCaseBlockName.matches("tile\\..+compressedcoal"); + } + + private static boolean couldProduceRegularAshes(ItemStack fuel, String lowerCaseBlockName, int burnTime) { + return GTUtility.isPartOfMaterials(fuel, Materials.Charcoal) + || GTUtility.isPartOfMaterials(fuel, Materials.Diamond) + || (Stream.of("^tile\\..+charcoal", "^tile\\..+coke", "^tile\\..+railcraft.cube") + .anyMatch(lowerCaseBlockName::matches)) + || Stream.of("fuelCoke", "fuelCactusCharcoal", "fuelCactusCoke", "fuelSugarCharcoal", "fuelSugarCoke") + .anyMatch(name -> GTOreDictUnificator.isItemStackInstanceOf(fuel, name)) + || burnTime >= 2000; + } + + private static Optional combustFuel(int burnTime, boolean isABlock) { + if (isABlock) { + return Optional.of(OrePrefixes.dust); + } else if (XSTR.XSTR_INSTANCE.nextInt(getAshChanceBound(burnTime)) == 0) { + if (burnTime > 100000) { + return Optional.of(OrePrefixes.dust); + } else if (burnTime > 10000) { + return Optional.of(OrePrefixes.dustSmall); + } else { + return Optional.of(OrePrefixes.dustTiny); + } + } + return Optional.empty(); + } + + /** + * The upper bound for the chance to get ash from combustion + *
+ * Ash chance scales based on burn time from 14% at 0 up to 50% at 2000 + * + * @param burnTime number assumed to be positive + * @return an upper bound between 7 and 2. + */ + private static int getAshChanceBound(int burnTime) { + return (5 - (Math.min(burnTime, 2000) / 400)) + 2; + } + + @Override + protected boolean isItemValidFuel(@NotNull ItemStack stack) { + return getCombustionPotential(stack, TileEntityFurnace.getItemBurnTime(stack)).isPresent(); + } + +} diff --git a/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerLava.java b/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerLava.java new file mode 100644 index 0000000000..ad79f07b0f --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerLava.java @@ -0,0 +1,474 @@ +package gregtech.common.tileentities.boilers; + +import static gregtech.api.enums.Textures.BlockIcons.BOILER_LAVA_FRONT; +import static gregtech.api.enums.Textures.BlockIcons.BOILER_LAVA_FRONT_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.BOILER_LAVA_FRONT_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.BOILER_LAVA_FRONT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.FLUID_IN_SIGN; +import static gregtech.api.enums.Textures.BlockIcons.FLUID_OUT_SIGN; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_TOP; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DRAIN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.block.Block; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.IFluidHandler; +import net.minecraftforge.fluids.IFluidTank; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.ParticleFX; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.SteamVariant; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; + +public class MTEBoilerLava extends MTEBoiler { + + public static final int COOLDOWN_INTERVAL = 20; + public static final int ENERGY_PER_LAVA = 1; + public static final int CONSUMPTION_PER_HEATUP = 3; + public static final int PRODUCTION_PER_SECOND = 600; + private final FluidTank lavaTank = new LavaTank(null, getCapacity()); + private int mCooledLava = 0; + + public MTEBoilerLava(int aID, String aName, String aNameRegional) { + super( + aID, + aName, + aNameRegional, + new String[] { "A Boiler running off Lava", "Produces " + PRODUCTION_PER_SECOND + "L of Steam per second", + "Causes " + GTMod.gregtechproxy.mPollutionHighPressureLavaBoilerPerSecond + " Pollution per second", + "Consumes " + ((double) CONSUMPTION_PER_HEATUP / ENERGY_PER_LAVA) + + "L of Lava every " + + COOLDOWN_INTERVAL + + " ticks when fully heat up" }); + } + + public MTEBoilerLava(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEBoilerLava(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + final ForgeDirection rearDirection = facingDirection.getOpposite(); + final ITexture[] tmp; + if ((sideDirection.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0) { + if (sideDirection == facingDirection) { + if (active) tmp = mTextures[4][colorIndex + 1]; + else tmp = mTextures[3][colorIndex + 1]; + } else if (sideDirection == rearDirection) { + tmp = mTextures[5][colorIndex + 1]; + } else { + tmp = mTextures[2][colorIndex + 1]; + } + } else tmp = mTextures[sideDirection.ordinal()][colorIndex + 1]; + if (sideDirection != facingDirection && tmp.length == 2) { + return new ITexture[] { tmp[0] }; + } + return tmp; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[6][17][]; + for (byte color = -1; color < 16; color++) { + int i = color + 1; + short[] colorModulation = Dyes.getModulation(color, Dyes._NULL.mRGBa); + rTextures[0][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_BOTTOM, colorModulation) }; + rTextures[1][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_TOP, colorModulation), + TextureFactory.of(OVERLAY_DRAIN), TextureFactory.of(FLUID_IN_SIGN) }; + rTextures[2][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_SIDE, colorModulation), + TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(FLUID_IN_SIGN) }; + rTextures[3][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_SIDE, colorModulation), + TextureFactory.of(BOILER_LAVA_FRONT, colorModulation), TextureFactory.of(BOILER_LAVA_FRONT_GLOW) }; + rTextures[4][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_SIDE, colorModulation), + TextureFactory.of(BOILER_LAVA_FRONT_ACTIVE), TextureFactory.builder() + .addIcon(BOILER_LAVA_FRONT_ACTIVE_GLOW) + .glow() + .build() }; + rTextures[5][i] = new ITexture[] { TextureFactory.of(MACHINE_STEELBRICKS_SIDE, colorModulation), + TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(FLUID_OUT_SIGN) }; + } + return rTextures; + } + + @Override + public int maxProgresstime() { + return 1000; + } + + @Override + public int getCapacity() { + return 32000; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBoilerLava(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + protected int getPollution() { + return GTMod.gregtechproxy.mPollutionHighPressureLavaBoilerPerSecond; + } + + @Override + protected int getProductionPerSecond() { + return PRODUCTION_PER_SECOND; + } + + @Override + protected int getMaxTemperature() { + return 1000; + } + + @Override + protected int getEnergyConsumption() { + this.mCooledLava += CONSUMPTION_PER_HEATUP; + return CONSUMPTION_PER_HEATUP; + } + + @Override + protected int getCooldownInterval() { + return COOLDOWN_INTERVAL; + } + + /** + * Attempts to fill an {@link IFluidTank} from the {@link FluidStack} content of an {@link ItemStack} + * + * @param destinationIFluidTank The destination {@link IFluidTank} to fill + * @param SourceItemStack The source {@link ItemStack} containing the Fluid + * @return The {@link ItemStack} of the Empty version of the source {@link ItemStack} or {@code null} if none + */ + public static ItemStack fillIFluidTankFromItemStack(IFluidTank destinationIFluidTank, ItemStack SourceItemStack) { + if (destinationIFluidTank == null || SourceItemStack == null) return null; + + final FluidStack containedFluidStack = GTUtility.getFluidForFilledItem(SourceItemStack, true); + if (containedFluidStack == null || containedFluidStack.amount == 0) return null; + + final int fillableAmount = destinationIFluidTank.fill(containedFluidStack, false); + if (fillableAmount <= 0) return null; + + final Item containerItem = SourceItemStack.getItem(); + if (containerItem instanceof IFluidContainerItem equippedIFluidContainerItem) { + destinationIFluidTank.fill(equippedIFluidContainerItem.drain(SourceItemStack, fillableAmount, true), true); + return null; + } else { + final ItemStack emptyContainerItemStack = GTUtility.getContainerForFilledItem(SourceItemStack, false); + destinationIFluidTank.fill(containedFluidStack, true); + return emptyContainerItemStack; + } + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide() || aPlayer == null) return true; + + final ItemStack equippedItemStack = aPlayer.getCurrentEquippedItem(); + final FluidStack equippedContainerFluidStack = GTUtility.getFluidForFilledItem(equippedItemStack, true); + final ItemStack returnedItemStack; + final IFluidTank tank; + + if (GTModHandler.isWater(equippedContainerFluidStack)) { + tank = this; + } else if (GTModHandler.isLava(equippedContainerFluidStack)) { + tank = lavaTank; + } else { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + returnedItemStack = fillIFluidTankFromItemStack(tank, equippedItemStack); + if (returnedItemStack != null && !aPlayer.capabilities.isCreativeMode) { + if (equippedItemStack.stackSize > 1) { + if (!aPlayer.inventory.addItemStackToInventory(returnedItemStack)) { + aBaseMetaTileEntity.getWorld() + .spawnEntityInWorld( + new EntityItem( + aBaseMetaTileEntity.getWorld(), + (double) aBaseMetaTileEntity.getXCoord() + 0.5D, + (double) aBaseMetaTileEntity.getYCoord() + 1.5D, + (double) aBaseMetaTileEntity.getZCoord() + 0.5D, + equippedItemStack)); + } else if (aPlayer instanceof EntityPlayerMP) { + ((EntityPlayerMP) aPlayer).sendContainerToPlayer(aPlayer.inventoryContainer); + } + aPlayer.inventory.decrStackSize(aPlayer.inventory.currentItem, 1); + } else { + aPlayer.inventory.setInventorySlotContents(aPlayer.inventory.currentItem, returnedItemStack); + } + } + return true; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (lavaTank.getFluid() != null) aNBT.setTag( + "mLava", + lavaTank.getFluid() + .writeToNBT(new NBTTagCompound())); + aNBT.setInteger("mCooledLava", this.mCooledLava); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + lavaTank.setFluid(FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mLava"))); + this.mCooledLava = aNBT.getInteger("mCooledLava"); + } + + /** + * Pushes steam to Fluid inventory at the rear. + * + * @param aBaseMetaTileEntity The tile-entity instance of this Lava Boiler + */ + @Override + protected void pushSteamToInventories(IGregTechTileEntity aBaseMetaTileEntity) { + if (mSteam == null || mSteam.amount == 0) return; + pushSteamToSide( + aBaseMetaTileEntity, + aBaseMetaTileEntity.getFrontFacing() + .getOpposite()); + } + + /** + * Drains Lava from Fluid inventory on top + * + * @param aBaseMetaTileEntity The tile-entity instance of this Lava Boiler + */ + protected void drainLava(IGregTechTileEntity aBaseMetaTileEntity) { + final IFluidHandler upTank = aBaseMetaTileEntity.getITankContainerAtSide(ForgeDirection.UP); + if (upTank == null) return; + // Simulates drain of maximum lava amount up to 1000L that can fit the internal tank + final FluidStack drainableLavaStack = upTank.drain( + ForgeDirection.DOWN, + FluidRegistry.getFluidStack( + "lava", + Math.min( + this.lavaTank.getCapacity() + - (this.lavaTank.getFluid() != null ? this.lavaTank.getFluid().amount : 0), + 1000)), + false); + if (!GTModHandler.isLava(drainableLavaStack) || drainableLavaStack.amount <= 0) return; + // Performs actual drain up and fill internal tank + this.lavaTank.fill(upTank.drain(ForgeDirection.DOWN, drainableLavaStack, true), true); + } + + /** + * Processes cooled Lava into Obsidian + * + * @return success | failure when cannot output + */ + private boolean lavaToObsidian() { + if (this.mCooledLava >= 1000) { + if (getBaseMetaTileEntity().addStackToSlot(3, new ItemStack(Blocks.obsidian, 1))) { + this.mCooledLava -= 1000; + } else { + return false; + } + } + return true; + } + + /** + * Draws random flames and smoke particles in front of this Lava Boiler when it is active + * + * @param aBaseMetaTileEntity The entity that will handle the {@link Block#randomDisplayTick} + */ + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { + if (aBaseMetaTileEntity.isActive()) { + + final ForgeDirection frontFacing = aBaseMetaTileEntity.getFrontFacing(); + + if ((frontFacing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 + && aBaseMetaTileEntity.getCoverIDAtSide(frontFacing) == 0 + && !aBaseMetaTileEntity.getOpacityAtSide(frontFacing)) { + + final double oX = aBaseMetaTileEntity.getOffsetX(frontFacing, 1) + 8D / 16D; + final double oY = aBaseMetaTileEntity.getOffsetY(frontFacing, 1); + final double oZ = aBaseMetaTileEntity.getOffsetZ(frontFacing, 1) + 8D / 16D; + final double offset = -0.48D; + final double horizontal = XSTR_INSTANCE.nextFloat() * 10D / 16D - 5D / 16D; + + final double x, y, z; + + y = oY + XSTR_INSTANCE.nextFloat() * 6D / 16D; + + switch (frontFacing) { + case WEST -> { + x = oX - offset; + z = oZ + horizontal; + } + case EAST -> { + x = oX + offset; + z = oZ + horizontal; + } + case NORTH -> { + x = oX + horizontal; + z = oZ - offset; + } + default -> { // case SOUTH: + x = oX + horizontal; + z = oZ + offset; + } + } + + ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(0D, 0D, 0D) + .setPosition(x, y, z) + .setWorld(getBaseMetaTileEntity().getWorld()); + particleEventBuilder.setIdentifier(ParticleFX.SMOKE) + .run(); + particleEventBuilder.setIdentifier(ParticleFX.FLAME) + .run(); + } + } + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return GTModHandler.isWater(aFluid) || GTModHandler.isLava(aFluid); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (!aBaseMetaTileEntity.isServerSide()) return; + final FluidStack containedFluidStack = GTUtility.getFluidForFilledItem(mInventory[getInputSlot()], true); + if (GTModHandler.isWater(containedFluidStack)) super.onPreTick(aBaseMetaTileEntity, aTick); + if (GTModHandler.isLava(containedFluidStack) + && lavaTank.fill(containedFluidStack, false) == containedFluidStack.amount + && aBaseMetaTileEntity.addStackToSlot( + getOutputSlot(), + GTUtility.getContainerForFilledItem(mInventory[getInputSlot()], true), + 1)) { + lavaTank.fill(containedFluidStack, true); + aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aTick % 20 == 0) drainLava(aBaseMetaTileEntity); + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + protected boolean isAutomatable() { + return true; + } + + @Override + public void doSound(byte aIndex, double aX, double aY, double aZ) { + if (aIndex != MTEBoiler.SOUND_EVENT_LET_OFF_EXCESS_STEAM) return; + + final ForgeDirection rearDirection = getBaseMetaTileEntity().getFrontFacing() + .getOpposite(); + GTUtility.doSoundAtClient( + SoundResource.RANDOM_FIZZ, + 2, + 1.0F, + // Sound emitted from center of rear face (Steam Output) + aX + 0.5 * rearDirection.offsetX, + aY, + aZ + 0.5 * rearDirection.offsetZ); + + new ParticleEventBuilder().setIdentifier(ParticleFX.CLOUD) + .setWorld(getBaseMetaTileEntity().getWorld()) + // Particles emitted with a 1 block/s velocity toward rear + .setMotion(rearDirection.offsetX / 20D, 0D, rearDirection.offsetZ / 20D) + .times( + 8, + // Particles emitted from center of rear face (Steam Output) + x -> x.setPosition(aX + rearDirection.offsetX / 2D, aY, aZ + rearDirection.offsetZ / 2D) + .run()); + } + + @Override + protected void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (!lavaToObsidian()) return; + if (lavaTank.getFluid() == null || lavaTank.getFluid().amount <= 0) return; + final int amountToDrain = Math.min(lavaTank.getFluid().amount, 1000); + final FluidStack drainedLava = lavaTank.drain(amountToDrain, false); + if (drainedLava == null || drainedLava.amount == 0) return; + lavaTank.drain(amountToDrain, true); + this.mProcessingEnergy += drainedLava.amount * ENERGY_PER_LAVA; + } + + @Override + public SteamVariant getSteamVariant() { + return SteamVariant.STEEL; + } + + @Override + public int fill(FluidStack aFluid, boolean doFill) { + if (GTModHandler.isWater(aFluid)) return super.fill(aFluid, doFill); + if (GTModHandler.isLava(aFluid)) return lavaTank.fill(aFluid, doFill); + return 0; + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection side) { + return new FluidTankInfo[] { super.getTankInfo(side)[0], + new FluidTankInfo(this.lavaTank.getFluid(), this.lavaTank.getCapacity()), + new FluidTankInfo(getDrainableStack(), getSteamCapacity()) }; + } + + @Override + protected IDrawable[] getAshSlotBackground() { + return new IDrawable[] { getGUITextureSet().getItemSlot(), + GTUITextures.OVERLAY_SLOT_BLOCK_STEAM.get(getSteamVariant()) }; + } + + @Override + protected Widget createFuelSlot() { + return new FluidSlotWidget(lavaTank).setBackground(getGUITextureSet().getFluidSlot(), getOverlaySlotIn()) + .setPos(115, 61); + } + + static class LavaTank extends FluidTank { + + public LavaTank(FluidStack stack, int capacity) { + super(stack, capacity); + } + + @Override + public int fill(FluidStack resource, boolean doFill) { + return GTModHandler.isLava(resource) ? super.fill(resource, doFill) : 0; + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSolar.java b/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSolar.java new file mode 100644 index 0000000000..0fc23f59cf --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSolar.java @@ -0,0 +1,311 @@ +package gregtech.common.tileentities.boilers; + +import static mcp.mobius.waila.api.SpecialChars.GOLD; +import static mcp.mobius.waila.api.SpecialChars.RESET; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.SteamVariant; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.common.config.machinestats.ConfigBronzeSolarBoiler; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEBoilerSolar extends MTEBoiler { + + public static final String LPS_FMT = "%s L/s"; + private static final String localizedDescFormat = GTLanguageManager.addStringLocalization( + "gt.blockmachines.boiler.solar.desc.format", + "Steam Power by the Sun%n" + "Produces %sL of Steam per second%n" + + "Calcifies over time, reducing Steam output to %sL/s%n" + + "Break and replace to descale"); + protected int calcificationTicks = ConfigBronzeSolarBoiler.calcificationTicks; + protected int cooldownTicks = ConfigBronzeSolarBoiler.cooldownTicks; + protected int maxOutputPerSecond = ConfigBronzeSolarBoiler.maxOutputPerSecond; + protected int minOutputPerSecond = ConfigBronzeSolarBoiler.minOutputPerSecond; + + protected final int basicTemperatureMod = 5; // Base Celsius gain or loss + private int mRunTimeTicks = 0; + + public MTEBoilerSolar(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, new String[0]); + } + + public MTEBoilerSolar(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEBoilerSolar(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public int getMaxOutputPerSecond() { + return maxOutputPerSecond; + } + + @Override + public String[] getDescription() { + return String + .format( + localizedDescFormat, + GTUtility.formatNumbers(getMaxOutputPerSecond()), + GTUtility.formatNumbers(getMinOutputPerSecond())) + .split("\\R"); + } + + public int getMinOutputPerSecond() { + return minOutputPerSecond; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[4][17][]; + for (int color = -1; color < 16; color++) { + int i = color + 1; + short[] colorModulation = Dyes.getModulation(color, Dyes._NULL.mRGBa); + rTextures[0][i] = new ITexture[] { + TextureFactory.of(BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM, colorModulation) }; + rTextures[1][i] = new ITexture[] { TextureFactory.of(BlockIcons.MACHINE_BRONZEBRICKS_TOP, colorModulation), + TextureFactory.of(BlockIcons.BOILER_SOLAR) }; + rTextures[2][i] = new ITexture[] { + TextureFactory.of(BlockIcons.MACHINE_BRONZEBRICKS_SIDE, colorModulation) }; + rTextures[3][i] = new ITexture[] { TextureFactory.of(BlockIcons.MACHINE_BRONZEBRICKS_SIDE, colorModulation), + TextureFactory.of(BlockIcons.OVERLAY_PIPE) }; + } + return rTextures; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + final int i = colorIndex + 1; + if ((sideDirection.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0) { // Horizontal + if (sideDirection != facingDirection) return mTextures[2][i]; + return mTextures[3][i]; + } + return mTextures[sideDirection.ordinal()][i]; + } + + @Override + public int maxProgresstime() { + return 500; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mRunTime", mRunTimeTicks); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mRunTimeTicks = aNBT.getInteger("mRunTime"); + } + + @Override + protected void produceSteam(int aAmount) { + super.produceSteam(aAmount); + // Disable calcification when using distilled water + if (mFluid.isFluidEqual(GTModHandler.getWater(1))) { + // produceSteam is getting called every 10 ticks + if (mRunTimeTicks >= 0 && mRunTimeTicks < (Integer.MAX_VALUE - 10)) mRunTimeTicks += 10; + else mRunTimeTicks = Integer.MAX_VALUE; // Prevent Integer overflow wrap + } + } + + @Override + protected void pushSteamToInventories(IGregTechTileEntity aBaseMetaTileEntity) { + if (mSteam == null || mSteam.amount == 0) return; + pushSteamToSide(aBaseMetaTileEntity, aBaseMetaTileEntity.getFrontFacing()); + } + + @Override + protected int getPollution() { + return 0; + } + + @Override + public int getProductionPerSecond() { + if (mTemperature < 100) { + return 0; + } + if (mRunTimeTicks > getMaxRuntimeTicks()) { + return getMinOutputPerSecond(); + } else if (mRunTimeTicks > getCalcificationTicks()) { + /* + * When reaching calcification ticks; discount the proportion of run-time spent on calcification from the + * maximum output per second, and return this or the minimum output per second + */ + return getMaxOutputPerSecond() + - getMaxOutputPerSecond() * (mRunTimeTicks - getCalcificationTicks()) / getCalcificationTicks(); + } else { + return getMaxOutputPerSecond(); + } + } + + protected int getCalcificationTicks() { + return calcificationTicks; + } + + protected int getCooldownTicks() { + return cooldownTicks; + } + + protected int getMaxRuntimeTicks() { + // After which min output is reached. + return (getMaxOutputPerSecond() - getMinOutputPerSecond()) * getCalcificationTicks() / getMaxOutputPerSecond() + + getCalcificationTicks(); + } + + @Override + protected int getMaxTemperature() { + return 500; + } + + @Override + protected int getEnergyConsumption() { + return basicTemperatureMod; + } + + @Override + protected int getCooldownInterval() { + return getCooldownTicks() / basicTemperatureMod; + } + + @Override + protected int getHeatUpAmount() { + return basicTemperatureMod; + } + + @Override + protected void updateFuel(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + World world = aBaseMetaTileEntity.getWorld(); + // Heat-up every 12s (240 ticks), has to be multiple of 20 ticks + if ((aTick % 240L != 0L) || (world.isThundering())) { + return; + } + if (!aBaseMetaTileEntity.getSkyAtSide(ForgeDirection.UP)) { + return; + } + boolean weatherClear = !world.isRaining() || aBaseMetaTileEntity.getBiome().rainfall == 0.0F; + if (!weatherClear && world.skylightSubtracted >= 4) { + return; + } + if (weatherClear) { + if (world.isDaytime()) { + mProcessingEnergy += 8 * basicTemperatureMod; + } else { + mProcessingEnergy += basicTemperatureMod; + } + } else { + mProcessingEnergy += basicTemperatureMod; + } + } + + @Override + public SteamVariant getSteamVariant() { + return SteamVariant.BRONZE; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return String + .format( + "Heat Capacity: " + EnumChatFormatting.GREEN + + "%s %%" + + EnumChatFormatting.RESET + + " Hot time: " + + EnumChatFormatting.RED + + "%s s" + + EnumChatFormatting.RESET + + "%n" + + "Min output: " + + EnumChatFormatting.RED + + LPS_FMT + + EnumChatFormatting.RESET + + " Max output: " + + EnumChatFormatting.RED + + LPS_FMT + + EnumChatFormatting.RESET + + "%n" + + "Current Output: " + + EnumChatFormatting.YELLOW + + LPS_FMT + + EnumChatFormatting.RESET, + GTUtility.formatNumbers(getHeatCapacityPercent()), + GTUtility.formatNumbers(getHotTimeSeconds()), + GTUtility.formatNumbers(getMinOutputPerSecond()), + GTUtility.formatNumbers(getMaxOutputPerSecond()), + GTUtility.formatNumbers(getProductionPerSecond())) + .split("\\R"); + } + + public int getHeatCapacityPercent() { + return mTemperature * 100 / maxProgresstime(); + } + + public int getHotTimeSeconds() { + return mRunTimeTicks / 20; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBoilerSolar(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + protected Widget createFuelSlot() { + return null; + } + + @Override + protected SlotWidget createAshSlot() { + return null; + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + String.format( + (GOLD + "Solar Boiler Output: " + RESET + "%d/%d L/s"), + tag.getInteger("calcificationOutput"), + tag.getInteger("maxCalcificationOutput"))); + + super.getWailaBody(itemStack, currentTip, accessor, config); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("calcificationOutput", (getProductionPerSecond())); + tag.setInteger("maxCalcificationOutput", (getMaxOutputPerSecond())); + } +} diff --git a/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSolarSteel.java b/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSolarSteel.java new file mode 100644 index 0000000000..b46beca108 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSolarSteel.java @@ -0,0 +1,69 @@ +package gregtech.common.tileentities.boilers; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.SteamVariant; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.common.config.machinestats.ConfigSteelSolarBoiler; + +public class MTEBoilerSolarSteel extends MTEBoilerSolar { + + public MTEBoilerSolarSteel(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + initBoilerStats(); + } + + public MTEBoilerSolarSteel(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + initBoilerStats(); + } + + public MTEBoilerSolarSteel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + initBoilerStats(); + } + + protected void initBoilerStats() { + calcificationTicks = ConfigSteelSolarBoiler.calcificationTicks; + cooldownTicks = ConfigSteelSolarBoiler.cooldownTicks; + maxOutputPerSecond = ConfigSteelSolarBoiler.maxOutputPerSecond; + minOutputPerSecond = ConfigSteelSolarBoiler.minOutputPerSecond; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + + ITexture[][][] rTextures = new ITexture[4][17][]; + for (int color = -1; color < 16; color++) { + int i = color + 1; + short[] colorModulation = Dyes.getModulation(color, Dyes._NULL.mRGBa); + rTextures[0][i] = new ITexture[] { + TextureFactory.of(BlockIcons.MACHINE_STEELBRICKS_BOTTOM, colorModulation) }; + rTextures[1][i] = new ITexture[] { TextureFactory.of(BlockIcons.MACHINE_STEELBRICKS_TOP, colorModulation), + TextureFactory.of(BlockIcons.BOILER_SOLAR) }; + rTextures[2][i] = new ITexture[] { + TextureFactory.of(BlockIcons.MACHINE_STEELBRICKS_SIDE, colorModulation) }; + rTextures[3][i] = new ITexture[] { TextureFactory.of(BlockIcons.MACHINE_STEELBRICKS_SIDE, colorModulation), + TextureFactory.of(BlockIcons.OVERLAY_PIPE) }; + } + return rTextures; + } + + @Override + public int getCapacity() { + return 32000; + } + + @Override + public SteamVariant getSteamVariant() { + return SteamVariant.STEEL; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBoilerSolarSteel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } +} diff --git a/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSteel.java b/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSteel.java new file mode 100644 index 0000000000..a557a03d16 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/boilers/MTEBoilerSteel.java @@ -0,0 +1,108 @@ +package gregtech.common.tileentities.boilers; + +import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT; +import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.BOILER_FRONT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_STEELBRICKS_TOP; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE; + +import gregtech.GTMod; +import gregtech.api.enums.SteamVariant; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; + +public class MTEBoilerSteel extends MTEBoilerBronze { + + public MTEBoilerSteel(int aID, String aName, String aNameRegional) { + super( + aID, + aName, + aNameRegional, + new String[] { "Faster than the Bronze Boiler", "Produces 300L of Steam per second", + "Causes " + GTMod.gregtechproxy.mPollutionHighPressureCoalBoilerPerSecond + " Pollution per second" }); + } + + public MTEBoilerSteel(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEBoilerSteel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[5][17][]; + final ITexture[] texBottom = { TextureFactory.of(MACHINE_STEELBRICKS_BOTTOM) }, + texTop = { TextureFactory.of(MACHINE_STEELBRICKS_TOP), TextureFactory.of(OVERLAY_PIPE) }, + texSide = { TextureFactory.of(MACHINE_STEELBRICKS_SIDE), TextureFactory.of(OVERLAY_PIPE) }, + texFront = { TextureFactory.of(MACHINE_STEELBRICKS_SIDE), TextureFactory.of(BOILER_FRONT), + TextureFactory.builder() + .addIcon(BOILER_FRONT_GLOW) + .glow() + .build() }, + texFrontActive = { TextureFactory.of(MACHINE_STEELBRICKS_SIDE), TextureFactory.of(BOILER_FRONT_ACTIVE), + TextureFactory.builder() + .addIcon(BOILER_FRONT_ACTIVE_GLOW) + .glow() + .build() }; + for (int i = 0; i < 17; i++) { + rTextures[0][i] = texBottom; + rTextures[1][i] = texTop; + rTextures[2][i] = texSide; + rTextures[3][i] = texFront; + rTextures[4][i] = texFrontActive; + } + return rTextures; + } + + @Override + public int maxProgresstime() { + return 1000; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBoilerSteel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + protected int getPollution() { + return GTMod.gregtechproxy.mPollutionHighPressureCoalBoilerPerSecond; + } + + @Override + public int getCapacity() { + return 32000; + } + + @Override + protected int getProductionPerSecond() { + return 300; + } + + @Override + protected int getMaxTemperature() { + return 1000; + } + + @Override + protected int getEnergyConsumption() { + return 2; + } + + @Override + protected int getCooldownInterval() { + return 40; + } + + @Override + public SteamVariant getSteamVariant() { + return SteamVariant.STEEL; + } +} diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/Ampere.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/Ampere.java index b0f6afdc3a..9d05d1cd6f 100644 --- a/src/main/java/gregtech/common/tileentities/casings/upgrade/Ampere.java +++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/Ampere.java @@ -5,10 +5,10 @@ import java.util.List; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.multitileentity.interfaces.IMultiBlockController; import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class Ampere extends UpgradeCasing { @@ -22,7 +22,7 @@ public class Ampere extends UpgradeCasing { @Override public void readMultiTileNBT(NBTTagCompound aNBT) { super.readMultiTileNBT(aNBT); - amperage = aNBT.getInteger(GT_Values.NBT.UPGRADE_AMPERAGE); + amperage = aNBT.getInteger(GTValues.NBT.UPGRADE_AMPERAGE); } @Override @@ -42,6 +42,6 @@ public class Ampere extends UpgradeCasing { @Override public void addToolTips(List list, ItemStack stack, boolean f3_h) { super.addToolTips(list, stack, f3_h); - list.add("Increases allowed amperage to " + GT_Utility.formatNumbers(amperage)); + list.add("Increases allowed amperage to " + GTUtility.formatNumbers(amperage)); } } diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/Inventory.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/Inventory.java index 7e51b3441d..43cc20f983 100644 --- a/src/main/java/gregtech/common/tileentities/casings/upgrade/Inventory.java +++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/Inventory.java @@ -11,7 +11,7 @@ import com.gtnewhorizons.modularui.api.screen.ModularWindow.Builder; import com.gtnewhorizons.modularui.api.screen.UIBuildContext; import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; -import gregtech.api.enums.GT_Values.NBT; +import gregtech.api.enums.GTValues.NBT; import gregtech.api.enums.InventoryType; import gregtech.api.multitileentity.interfaces.IMultiBlockController; import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing; diff --git a/src/main/java/gregtech/common/tileentities/casings/upgrade/Tank.java b/src/main/java/gregtech/common/tileentities/casings/upgrade/Tank.java index ebc84be38a..a7ace14de5 100644 --- a/src/main/java/gregtech/common/tileentities/casings/upgrade/Tank.java +++ b/src/main/java/gregtech/common/tileentities/casings/upgrade/Tank.java @@ -6,10 +6,10 @@ import java.util.UUID; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.multitileentity.interfaces.IMultiBlockController; import gregtech.api.multitileentity.multiblock.casing.UpgradeCasing; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class Tank extends UpgradeCasing { @@ -47,8 +47,8 @@ public class Tank extends UpgradeCasing { @Override public void readMultiTileNBT(NBTTagCompound aNBT) { super.readMultiTileNBT(aNBT); - tankCount = aNBT.getInteger(GT_Values.NBT.UPGRADE_TANK_COUNT); - tankCapacity = aNBT.getInteger(GT_Values.NBT.UPGRADE_TANK_CAPACITY); + tankCount = aNBT.getInteger(GTValues.NBT.UPGRADE_TANK_COUNT); + tankCapacity = aNBT.getInteger(GTValues.NBT.UPGRADE_TANK_CAPACITY); } @Override @@ -56,6 +56,6 @@ public class Tank extends UpgradeCasing { super.addToolTips(list, stack, f3_h); list.add("Adds another tank inventory"); list.add("Number of tanks: " + tankCount); - list.add("Tank capacity: " + GT_Utility.formatNumbers(tankCapacity) + " L"); + list.add("Tank capacity: " + GTUtility.formatNumbers(tankCapacity) + " L"); } } diff --git a/src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java b/src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java deleted file mode 100644 index e61ae456f0..0000000000 --- a/src/main/java/gregtech/common/tileentities/debug/GT_MetaTileEntity_AdvDebugStructureWriter.java +++ /dev/null @@ -1,437 +0,0 @@ -package gregtech.common.tileentities.debug; - -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.HashMap; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.EntityPlayerSP; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraftforge.client.event.RenderWorldLastEvent; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.ForgeDirection; - -import org.lwjgl.opengl.GL11; - -import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; -import com.gtnewhorizon.structurelib.structure.StructureUtility; -import com.gtnewhorizon.structurelib.util.Vec3Impl; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_AdvDebugStructureWriter extends GT_MetaTileEntity_TieredMachineBlock - implements IAddGregtechLogo, IAddUIWidgets { - - private static final HashMap bondingBoxes = new HashMap<>( - 1); - private final BoundHighlighter boundingBox = new BoundHighlighter(); - private final short[] numbers = new short[6]; - private boolean transpose = false; - private boolean showHighlightBox = true; - private String[] result = new String[] { "Undefined" }; - - public GT_MetaTileEntity_AdvDebugStructureWriter(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 0, ""); - } - - public GT_MetaTileEntity_AdvDebugStructureWriter(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_AdvDebugStructureWriter(mName, mTier, "", mTextures); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - return new ITexture[] { - Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], sideDirection != facingDirection - ? TextureFactory.of( - TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE) - .glow() - .build()) - : TextureFactory.of( - TextureFactory.builder() - .addIcon(Textures.BlockIcons.STRUCTURE_MARK) - .glow() - .build()) }; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return null; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection b, - ItemStack itemStack) { - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection b, - ItemStack itemStack) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - for (int i = 0; i < numbers.length; i++) { - aNBT.setShort("eData" + i, numbers[i]); - } - aNBT.setBoolean("Transpose", transpose); - aNBT.setBoolean("HighlightBox", showHighlightBox); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - for (int i = 0; i < numbers.length; i++) { - numbers[i] = aNBT.getShort("eData" + i); - } - transpose = aNBT.getBoolean("Transpose"); - showHighlightBox = aNBT.getBoolean("HighlightBox"); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - bondingBoxes.put(this, boundingBox); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - ExtendedFacing writerFacing = ExtendedFacing.of(aBaseMetaTileEntity.getFrontFacing()); - double[] abc = new double[3]; - double[] xyz = new double[3]; - boundingBox.dim = aBaseMetaTileEntity.getWorld().provider.dimensionId; - boundingBox.showHighlightBox = showHighlightBox; - abc[0] = -numbers[0] - 0.5; - abc[1] = -numbers[1] - 0.5; - abc[2] = -numbers[2] - 0.5; - writerFacing.getWorldOffset(abc, xyz); - boundingBox.pos1 = new Vec3Impl( - aBaseMetaTileEntity.getXCoord() + (int) (xyz[0] + 0.5), - aBaseMetaTileEntity.getYCoord() + (int) (xyz[1] + 0.5), - aBaseMetaTileEntity.getZCoord() + (int) (xyz[2] + 0.5)); - abc[0] = -numbers[0] + numbers[3] - 0.5; - abc[1] = -numbers[1] + numbers[4] - 0.5; - abc[2] = -numbers[2] + numbers[5] - 0.5; - writerFacing.getWorldOffset(abc, xyz); - boundingBox.pos2 = new Vec3Impl( - aBaseMetaTileEntity.getXCoord() + (int) (xyz[0] + 0.5), - aBaseMetaTileEntity.getYCoord() + (int) (xyz[1] + 0.5), - aBaseMetaTileEntity.getZCoord() + (int) (xyz[2] + 0.5)); - } - } - - @Override - public void onRemoval() { - bondingBoxes.remove(this); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity(); - printStructure(aPlayer); - aBaseMetaTileEntity.disableWorking(); - } - - public void printStructure(EntityPlayer aPlayer) { - IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity(); - String pseudoJavaCode = StructureUtility.getPseudoJavaCode( - aBaseMetaTileEntity.getWorld(), - ExtendedFacing.of(aBaseMetaTileEntity.getFrontFacing()), - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), - numbers[0], - numbers[1], - numbers[2], - te -> te.getClass() - .getCanonicalName(), - numbers[3], - numbers[4], - numbers[5], - transpose); - GT_FML_LOGGER.info(pseudoJavaCode); - result = pseudoJavaCode.split("\\n"); - aPlayer.addChatMessage( - new ChatComponentTranslation(translateToLocal("GT5U.machines.advdebugstructurewriter.printed"))); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isElectric() { - return false; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public String[] getDescription() { - return new String[] { translateToLocal("GT5U.machines.advdebugstructurewriter.tooltip"), // Scans Blocks Around - translateToLocal("GT5U.machines.advdebugstructurewriter.tooltip.1"), // Prints Multiblock NonTE - // structure check code - translateToLocal("GT5U.machines.advdebugstructurewriter.tooltip.2") // ABC axes aligned to machine front - }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return result; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setSize(90, 112) - .setPos(43, 4)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (getBaseMetaTileEntity().isServerSide()) { - printStructure( - widget.getContext() - .getPlayer()); - } - }) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_PRINT) - .setSize(18, 18) - .setPos(11, 128) - .addTooltip(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.print.tooltip"))) - .widget( - new CycleButtonWidget().setToggle(() -> transpose, aBoolean -> transpose = aBoolean) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_TRANSPOSE) - .setSize(18, 18) - .setPos(32, 128) - .addTooltip(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.transpose.tooltip"))) - .widget( - new CycleButtonWidget().setToggle(() -> showHighlightBox, aBoolean -> showHighlightBox = aBoolean) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_BOUNDING_BOX) - .setSize(18, 18) - .setPos(53, 128) - .addTooltip(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.highlight.tooltip"))) - .widget( - new MultiChildWidget() - .addChild( - new TextWidget(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.origin")) - .setDefaultColor(0xf0f0ff) - .setPos(0, 0)) - .addChild( - TextWidget.dynamicString(() -> "A: " + numbers[0]) - .setDefaultColor(0xf0f0ff) - .setPos(0, 10)) - .addChild( - TextWidget.dynamicString(() -> "B: " + numbers[1]) - .setDefaultColor(0xf0f0ff) - .setPos(0, 18)) - .addChild( - TextWidget.dynamicString(() -> "C: " + numbers[2]) - .setDefaultColor(0xf0f0ff) - .setPos(0, 26)) - .addChild( - new TextWidget(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.size")) - .setDefaultColor(0xf0f0ff) - .setPos(0, 52)) - .addChild( - TextWidget.dynamicString(() -> "A: " + numbers[3]) - .setDefaultColor(0xf0f0ff) - .setPos(0, 62)) - .addChild( - TextWidget.dynamicString(() -> "B: " + numbers[4]) - .setDefaultColor(0xf0f0ff) - .setPos(0, 70)) - .addChild( - TextWidget.dynamicString(() -> "C: " + numbers[5]) - .setDefaultColor(0xf0f0ff) - .setPos(0, 78)) - .setPos(46, 8)); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, -512, -64, 7); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, -16, -1, 25); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, 16, 1, 133); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, 512, 64, 151); - } - - private void addChangeNumberButtons(ModularWindow.Builder builder, IDrawable overlay, int addNumberShift, - int addNumber, int xPos) { - int[] yPos = new int[] { 4, 22, 40, 62, 80, 98 }; - for (int i = 0; i < yPos.length; i++) { - final int index = i; // needed for lambda - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - numbers[index] += clickData.shift ? addNumberShift : addNumber; - if (index >= 3) { - numbers[index] = (short) Math.max(numbers[index], 0); - } - }) - .setBackground(GT_UITextures.BUTTON_STANDARD, overlay) - .setSize(18, 18) - .setPos(xPos, yPos[index])); - } - } - - @Override - public GUITextureSet getGUITextureSet() { - return new GUITextureSet().setGregTechLogo(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) - .setSize(17, 17) - .setPos(113, 96)); - } - - @Override - public boolean doesBindPlayerInventory() { - return false; - } - - public static class ForgeEventHandler { - - public ForgeEventHandler() { - MinecraftForge.EVENT_BUS.register(this); - } - - @SuppressWarnings("unused") - @SideOnly(Side.CLIENT) - @SubscribeEvent - public void onRenderWorldLast(RenderWorldLastEvent e) { - for (BoundHighlighter boundingBox : bondingBoxes.values()) { - boundingBox.renderHighlightedBlock(e); - } - } - } - - private static class BoundHighlighter { - - public Vec3Impl pos1; - public Vec3Impl pos2; - public boolean showHighlightBox; - public int dim; - - @SideOnly(Side.CLIENT) - private void renderHighlightedBlock(RenderWorldLastEvent event) { - if (pos1 == null || pos2 == null || !showHighlightBox) { - return; - } - Minecraft mc = Minecraft.getMinecraft(); - int dimension = mc.theWorld.provider.dimensionId; - - if (dimension != dim) { - pos1 = null; - pos2 = null; - return; - } - - EntityPlayerSP p = mc.thePlayer; - double doubleX = p.lastTickPosX + (p.posX - p.lastTickPosX) * event.partialTicks; - double doubleY = p.lastTickPosY + (p.posY - p.lastTickPosY) * event.partialTicks; - double doubleZ = p.lastTickPosZ + (p.posZ - p.lastTickPosZ) * event.partialTicks; - - GL11.glPushMatrix(); - GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); - GL11.glLineWidth(3); - GL11.glTranslated(-doubleX, -doubleY, -doubleZ); - - GL11.glDisable(GL11.GL_DEPTH_TEST); - GL11.glDisable(GL11.GL_TEXTURE_2D); - - GL11.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); - renderHighLightedArenaOutline(pos1.get0(), pos1.get1(), pos1.get2(), pos2.get0(), pos2.get1(), pos2.get2()); - - GL11.glPopAttrib(); - GL11.glPopMatrix(); - } - - @SideOnly(Side.CLIENT) - static void renderHighLightedArenaOutline(double x1, double y1, double z1, double x2, double y2, double z2) { - GL11.glBegin(GL11.GL_LINE_STRIP); - - GL11.glVertex3d(x1, y1, z1); - GL11.glVertex3d(x1, y2, z1); - GL11.glVertex3d(x1, y2, z2); - GL11.glVertex3d(x1, y1, z2); - GL11.glVertex3d(x1, y1, z1); - - GL11.glVertex3d(x2, y1, z1); - GL11.glVertex3d(x2, y2, z1); - GL11.glVertex3d(x2, y2, z2); - GL11.glVertex3d(x2, y1, z2); - GL11.glVertex3d(x2, y1, z1); - - GL11.glVertex3d(x1, y1, z1); - GL11.glVertex3d(x2, y1, z1); - GL11.glVertex3d(x2, y1, z2); - GL11.glVertex3d(x1, y1, z2); - GL11.glVertex3d(x1, y2, z2); - GL11.glVertex3d(x2, y2, z2); - GL11.glVertex3d(x2, y2, z1); - GL11.glVertex3d(x2, y1, z1); - GL11.glVertex3d(x1, y1, z1); - GL11.glVertex3d(x2, y1, z1); - GL11.glVertex3d(x2, y2, z1); - GL11.glVertex3d(x1, y2, z1); - GL11.glVertex3d(x1, y2, z2); - GL11.glVertex3d(x2, y2, z2); - GL11.glVertex3d(x2, y1, z2); - GL11.glVertex3d(x1, y1, z2); - - GL11.glEnd(); - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/debug/MTEAdvDebugStructureWriter.java b/src/main/java/gregtech/common/tileentities/debug/MTEAdvDebugStructureWriter.java new file mode 100644 index 0000000000..82e4c21653 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/debug/MTEAdvDebugStructureWriter.java @@ -0,0 +1,434 @@ +package gregtech.common.tileentities.debug; + +import static gregtech.GTMod.GT_FML_LOGGER; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.HashMap; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityPlayerSP; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraftforge.client.event.RenderWorldLastEvent; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.structure.StructureUtility; +import com.gtnewhorizon.structurelib.util.Vec3Impl; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.render.TextureFactory; + +public class MTEAdvDebugStructureWriter extends MTETieredMachineBlock implements IAddGregtechLogo, IAddUIWidgets { + + private static final HashMap bondingBoxes = new HashMap<>(1); + private final BoundHighlighter boundingBox = new BoundHighlighter(); + private final short[] numbers = new short[6]; + private boolean transpose = false; + private boolean showHighlightBox = true; + private String[] result = new String[] { "Undefined" }; + + public MTEAdvDebugStructureWriter(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 0, ""); + } + + public MTEAdvDebugStructureWriter(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAdvDebugStructureWriter(mName, mTier, "", mTextures); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + return new ITexture[] { + Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], sideDirection != facingDirection + ? TextureFactory.of( + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE) + .glow() + .build()) + : TextureFactory.of( + TextureFactory.builder() + .addIcon(Textures.BlockIcons.STRUCTURE_MARK) + .glow() + .build()) }; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return null; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection b, + ItemStack itemStack) { + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection b, + ItemStack itemStack) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + for (int i = 0; i < numbers.length; i++) { + aNBT.setShort("eData" + i, numbers[i]); + } + aNBT.setBoolean("Transpose", transpose); + aNBT.setBoolean("HighlightBox", showHighlightBox); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + for (int i = 0; i < numbers.length; i++) { + numbers[i] = aNBT.getShort("eData" + i); + } + transpose = aNBT.getBoolean("Transpose"); + showHighlightBox = aNBT.getBoolean("HighlightBox"); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + bondingBoxes.put(this, boundingBox); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + ExtendedFacing writerFacing = ExtendedFacing.of(aBaseMetaTileEntity.getFrontFacing()); + double[] abc = new double[3]; + double[] xyz = new double[3]; + boundingBox.dim = aBaseMetaTileEntity.getWorld().provider.dimensionId; + boundingBox.showHighlightBox = showHighlightBox; + abc[0] = -numbers[0] - 0.5; + abc[1] = -numbers[1] - 0.5; + abc[2] = -numbers[2] - 0.5; + writerFacing.getWorldOffset(abc, xyz); + boundingBox.pos1 = new Vec3Impl( + aBaseMetaTileEntity.getXCoord() + (int) (xyz[0] + 0.5), + aBaseMetaTileEntity.getYCoord() + (int) (xyz[1] + 0.5), + aBaseMetaTileEntity.getZCoord() + (int) (xyz[2] + 0.5)); + abc[0] = -numbers[0] + numbers[3] - 0.5; + abc[1] = -numbers[1] + numbers[4] - 0.5; + abc[2] = -numbers[2] + numbers[5] - 0.5; + writerFacing.getWorldOffset(abc, xyz); + boundingBox.pos2 = new Vec3Impl( + aBaseMetaTileEntity.getXCoord() + (int) (xyz[0] + 0.5), + aBaseMetaTileEntity.getYCoord() + (int) (xyz[1] + 0.5), + aBaseMetaTileEntity.getZCoord() + (int) (xyz[2] + 0.5)); + } + } + + @Override + public void onRemoval() { + bondingBoxes.remove(this); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity(); + printStructure(aPlayer); + aBaseMetaTileEntity.disableWorking(); + } + + public void printStructure(EntityPlayer aPlayer) { + IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity(); + String pseudoJavaCode = StructureUtility.getPseudoJavaCode( + aBaseMetaTileEntity.getWorld(), + ExtendedFacing.of(aBaseMetaTileEntity.getFrontFacing()), + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + numbers[0], + numbers[1], + numbers[2], + te -> te.getClass() + .getCanonicalName(), + numbers[3], + numbers[4], + numbers[5], + transpose); + GT_FML_LOGGER.info(pseudoJavaCode); + result = pseudoJavaCode.split("\\n"); + aPlayer.addChatMessage( + new ChatComponentTranslation(translateToLocal("GT5U.machines.advdebugstructurewriter.printed"))); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isElectric() { + return false; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public String[] getDescription() { + return new String[] { translateToLocal("GT5U.machines.advdebugstructurewriter.tooltip"), // Scans Blocks Around + translateToLocal("GT5U.machines.advdebugstructurewriter.tooltip.1"), // Prints Multiblock NonTE + // structure check code + translateToLocal("GT5U.machines.advdebugstructurewriter.tooltip.2") // ABC axes aligned to machine front + }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return result; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setSize(90, 112) + .setPos(43, 4)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (getBaseMetaTileEntity().isServerSide()) { + printStructure( + widget.getContext() + .getPlayer()); + } + }) + .setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_PRINT) + .setSize(18, 18) + .setPos(11, 128) + .addTooltip(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.print.tooltip"))) + .widget( + new CycleButtonWidget().setToggle(() -> transpose, aBoolean -> transpose = aBoolean) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_TRANSPOSE) + .setSize(18, 18) + .setPos(32, 128) + .addTooltip(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.transpose.tooltip"))) + .widget( + new CycleButtonWidget().setToggle(() -> showHighlightBox, aBoolean -> showHighlightBox = aBoolean) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_BOUNDING_BOX) + .setSize(18, 18) + .setPos(53, 128) + .addTooltip(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.highlight.tooltip"))) + .widget( + new MultiChildWidget() + .addChild( + new TextWidget(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.origin")) + .setDefaultColor(0xf0f0ff) + .setPos(0, 0)) + .addChild( + TextWidget.dynamicString(() -> "A: " + numbers[0]) + .setDefaultColor(0xf0f0ff) + .setPos(0, 10)) + .addChild( + TextWidget.dynamicString(() -> "B: " + numbers[1]) + .setDefaultColor(0xf0f0ff) + .setPos(0, 18)) + .addChild( + TextWidget.dynamicString(() -> "C: " + numbers[2]) + .setDefaultColor(0xf0f0ff) + .setPos(0, 26)) + .addChild( + new TextWidget(translateToLocal("GT5U.machines.advdebugstructurewriter.gui.size")) + .setDefaultColor(0xf0f0ff) + .setPos(0, 52)) + .addChild( + TextWidget.dynamicString(() -> "A: " + numbers[3]) + .setDefaultColor(0xf0f0ff) + .setPos(0, 62)) + .addChild( + TextWidget.dynamicString(() -> "B: " + numbers[4]) + .setDefaultColor(0xf0f0ff) + .setPos(0, 70)) + .addChild( + TextWidget.dynamicString(() -> "C: " + numbers[5]) + .setDefaultColor(0xf0f0ff) + .setPos(0, 78)) + .setPos(46, 8)); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, -512, -64, 7); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, -16, -1, 25); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, 16, 1, 133); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, 512, 64, 151); + } + + private void addChangeNumberButtons(ModularWindow.Builder builder, IDrawable overlay, int addNumberShift, + int addNumber, int xPos) { + int[] yPos = new int[] { 4, 22, 40, 62, 80, 98 }; + for (int i = 0; i < yPos.length; i++) { + final int index = i; // needed for lambda + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + numbers[index] += clickData.shift ? addNumberShift : addNumber; + if (index >= 3) { + numbers[index] = (short) Math.max(numbers[index], 0); + } + }) + .setBackground(GTUITextures.BUTTON_STANDARD, overlay) + .setSize(18, 18) + .setPos(xPos, yPos[index])); + } + } + + @Override + public GUITextureSet getGUITextureSet() { + return new GUITextureSet().setGregTechLogo(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) + .setSize(17, 17) + .setPos(113, 96)); + } + + @Override + public boolean doesBindPlayerInventory() { + return false; + } + + public static class ForgeEventHandler { + + public ForgeEventHandler() { + MinecraftForge.EVENT_BUS.register(this); + } + + @SuppressWarnings("unused") + @SideOnly(Side.CLIENT) + @SubscribeEvent + public void onRenderWorldLast(RenderWorldLastEvent e) { + for (BoundHighlighter boundingBox : bondingBoxes.values()) { + boundingBox.renderHighlightedBlock(e); + } + } + } + + private static class BoundHighlighter { + + public Vec3Impl pos1; + public Vec3Impl pos2; + public boolean showHighlightBox; + public int dim; + + @SideOnly(Side.CLIENT) + private void renderHighlightedBlock(RenderWorldLastEvent event) { + if (pos1 == null || pos2 == null || !showHighlightBox) { + return; + } + Minecraft mc = Minecraft.getMinecraft(); + int dimension = mc.theWorld.provider.dimensionId; + + if (dimension != dim) { + pos1 = null; + pos2 = null; + return; + } + + EntityPlayerSP p = mc.thePlayer; + double doubleX = p.lastTickPosX + (p.posX - p.lastTickPosX) * event.partialTicks; + double doubleY = p.lastTickPosY + (p.posY - p.lastTickPosY) * event.partialTicks; + double doubleZ = p.lastTickPosZ + (p.posZ - p.lastTickPosZ) * event.partialTicks; + + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glLineWidth(3); + GL11.glTranslated(-doubleX, -doubleY, -doubleZ); + + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + GL11.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); + renderHighLightedArenaOutline(pos1.get0(), pos1.get1(), pos1.get2(), pos2.get0(), pos2.get1(), pos2.get2()); + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } + + @SideOnly(Side.CLIENT) + static void renderHighLightedArenaOutline(double x1, double y1, double z1, double x2, double y2, double z2) { + GL11.glBegin(GL11.GL_LINE_STRIP); + + GL11.glVertex3d(x1, y1, z1); + GL11.glVertex3d(x1, y2, z1); + GL11.glVertex3d(x1, y2, z2); + GL11.glVertex3d(x1, y1, z2); + GL11.glVertex3d(x1, y1, z1); + + GL11.glVertex3d(x2, y1, z1); + GL11.glVertex3d(x2, y2, z1); + GL11.glVertex3d(x2, y2, z2); + GL11.glVertex3d(x2, y1, z2); + GL11.glVertex3d(x2, y1, z1); + + GL11.glVertex3d(x1, y1, z1); + GL11.glVertex3d(x2, y1, z1); + GL11.glVertex3d(x2, y1, z2); + GL11.glVertex3d(x1, y1, z2); + GL11.glVertex3d(x1, y2, z2); + GL11.glVertex3d(x2, y2, z2); + GL11.glVertex3d(x2, y2, z1); + GL11.glVertex3d(x2, y1, z1); + GL11.glVertex3d(x1, y1, z1); + GL11.glVertex3d(x2, y1, z1); + GL11.glVertex3d(x2, y2, z1); + GL11.glVertex3d(x1, y2, z1); + GL11.glVertex3d(x1, y2, z2); + GL11.glVertex3d(x2, y2, z2); + GL11.glVertex3d(x2, y1, z2); + GL11.glVertex3d(x1, y1, z2); + + GL11.glEnd(); + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_DieselGenerator.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_DieselGenerator.java deleted file mode 100644 index 10138bdfc2..0000000000 --- a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_DieselGenerator.java +++ /dev/null @@ -1,278 +0,0 @@ -package gregtech.common.tileentities.generators; - -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BACK; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BACK_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BACK_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BACK_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_FRONT; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_FRONT_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_FRONT_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_FRONT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_SIDE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_TOP; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_TOP_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_TOP_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_TOP_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.ParticleFX; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; - -public class GT_MetaTileEntity_DieselGenerator extends GT_MetaTileEntity_BasicGenerator { - - public int mEfficiency; - - public GT_MetaTileEntity_DieselGenerator(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - new String[] { "Requires liquid Fuel", - "Causes " - + (int) (GT_Mod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond - * GT_Mod.gregtechproxy.mPollutionDieselGeneratorReleasedByTier[aTier]) - + " Pollution per second" }); - onConfigLoad(); - } - - public GT_MetaTileEntity_DieselGenerator(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - onConfigLoad(); - } - - public GT_MetaTileEntity_DieselGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - onConfigLoad(); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_DieselGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.dieselFuels; - } - - @Override - public int getCapacity() { - return 16000; - } - - public void onConfigLoad() { - this.mEfficiency = (100 - this.mTier * 5); - } - - @Override - public int getEfficiency() { - return this.mEfficiency; - } - - @Override - public int getFuelValue(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack) || getRecipeMap() == null) return 0; - long rValue = super.getFuelValue(aStack); - if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) { - rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3L); - } - if (rValue > Integer.MAX_VALUE) { - throw new ArithmeticException("Integer LOOPBACK!"); - } - return (int) rValue; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aTick % 100 == 0 && mFluid != null && mFluid.amount > this.getCapacity()) { - GT_Log.err.println( - "Dupe Abuse: " + aBaseMetaTileEntity.getOwnerName() - + " Coords: " - + aBaseMetaTileEntity.getXCoord() - + " " - + aBaseMetaTileEntity.getYCoord() - + " " - + aBaseMetaTileEntity.getZCoord()); - aBaseMetaTileEntity.setToFire(); - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - /** - * Draws random smoke particles on top when active - * - * @param aBaseMetaTileEntity The entity that will handle the {@link Block#randomDisplayTick} - */ - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { - if (aBaseMetaTileEntity.isActive()) { - - if (aBaseMetaTileEntity.getCoverIDAtSide(ForgeDirection.UP) == 0 - && !aBaseMetaTileEntity.getOpacityAtSide(ForgeDirection.UP)) { - - final double x = aBaseMetaTileEntity.getOffsetX(ForgeDirection.UP, 1) + 2D / 16D - + XSTR_INSTANCE.nextFloat() * 14D / 16D; - final double y = aBaseMetaTileEntity.getOffsetY(ForgeDirection.UP, 1) + 1D / 32D; - final double z = aBaseMetaTileEntity.getOffsetZ(ForgeDirection.UP, 1) + 2D / 16D - + XSTR_INSTANCE.nextFloat() * 14D / 16D; - - new ParticleEventBuilder().setMotion(0D, 0D, 0D) - .setPosition(x, y, z) - .setWorld(getBaseMetaTileEntity().getWorld()) - .setIdentifier(ParticleFX.SMOKE) - .run(); - } - } - } - - @Override - public ITexture[] getFront(byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_FRONT), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_FRONT_GLOW) - .glow() - .build()), - OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBack(byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_BACK), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_BACK_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_BOTTOM), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_BOTTOM_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getTop(byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_TOP), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_TOP_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getSides(byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_SIDE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_SIDE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getFrontActive(byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_FRONT_ACTIVE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_FRONT_ACTIVE_GLOW) - .glow() - .build()), - OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBackActive(byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_BACK_ACTIVE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_BACK_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getBottomActive(byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_BOTTOM_ACTIVE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_BOTTOM_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getTopActive(byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_TOP_ACTIVE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_TOP_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getSidesActive(byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(DIESEL_GENERATOR_SIDE_ACTIVE), - TextureFactory.builder() - .addIcon(DIESEL_GENERATOR_SIDE_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public int getPollution() { - return (int) (GT_Mod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond - * GT_Mod.gregtechproxy.mPollutionDieselGeneratorReleasedByTier[mTier]); - } -} diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_GasTurbine.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_GasTurbine.java deleted file mode 100644 index ca0a5d6958..0000000000 --- a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_GasTurbine.java +++ /dev/null @@ -1,207 +0,0 @@ -package gregtech.common.tileentities.generators; - -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BACK; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BACK_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BACK_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BACK_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BOTTOM_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BOTTOM_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BOTTOM_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_FRONT; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_FRONT_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_FRONT_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_FRONT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_SIDE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_SIDE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_SIDE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_TOP; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_TOP_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_TOP_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_TOP_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.GT_Mod; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_GasTurbine extends GT_MetaTileEntity_BasicGenerator { - - public int mEfficiency; - - public GT_MetaTileEntity_GasTurbine(int aID, String aName, String aNameRegional, int aTier, int mEfficiency) { - super( - aID, - aName, - aNameRegional, - aTier, - new String[] { "Requires flammable Gasses", - "Causes " - + (int) (GT_Mod.gregtechproxy.mPollutionBaseGasTurbinePerSecond - * GT_Mod.gregtechproxy.mPollutionGasTurbineReleasedByTier[aTier]) - + " Pollution per second" }); - this.mEfficiency = mEfficiency; - } - - public GT_MetaTileEntity_GasTurbine(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, - int mEfficiency) { - super(aName, aTier, aDescription, aTextures); - this.mEfficiency = mEfficiency; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_GasTurbine( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures, - this.mEfficiency); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.gasTurbineFuels; - } - - @Override - public int getCapacity() { - return 16000; - } - - @Override - public int getEfficiency() { - return this.mEfficiency; - } - - @Override - public ITexture[] getFront(byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], - TextureFactory.of( - TextureFactory.of(GAS_TURBINE_FRONT), - TextureFactory.builder() - .addIcon(GAS_TURBINE_FRONT_GLOW) - .glow() - .build()), - OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBack(byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], - TextureFactory.of( - TextureFactory.of(GAS_TURBINE_BACK), - TextureFactory.builder() - .addIcon(GAS_TURBINE_BACK_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], - TextureFactory.of( - TextureFactory.of(GAS_TURBINE_BOTTOM), - TextureFactory.builder() - .addIcon(GAS_TURBINE_BOTTOM_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getTop(byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], - TextureFactory.of( - TextureFactory.of(GAS_TURBINE_TOP), - TextureFactory.builder() - .addIcon(GAS_TURBINE_TOP_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getSides(byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], - TextureFactory.of( - TextureFactory.of(GAS_TURBINE_SIDE), - TextureFactory.builder() - .addIcon(GAS_TURBINE_SIDE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getFrontActive(byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(GAS_TURBINE_FRONT_ACTIVE), - TextureFactory.builder() - .addIcon(GAS_TURBINE_FRONT_ACTIVE_GLOW) - .glow() - .build()), - OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBackActive(byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(GAS_TURBINE_BACK_ACTIVE), - TextureFactory.builder() - .addIcon(GAS_TURBINE_BACK_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getBottomActive(byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(GAS_TURBINE_BOTTOM_ACTIVE), - TextureFactory.builder() - .addIcon(GAS_TURBINE_BOTTOM_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getTopActive(byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(GAS_TURBINE_TOP_ACTIVE), - TextureFactory.builder() - .addIcon(GAS_TURBINE_TOP_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getSidesActive(byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(GAS_TURBINE_SIDE_ACTIVE), - TextureFactory.builder() - .addIcon(GAS_TURBINE_SIDE_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public int getPollution() { - return (int) (GT_Mod.gregtechproxy.mPollutionBaseGasTurbinePerSecond - * GT_Mod.gregtechproxy.mPollutionGasTurbineReleasedByTier[mTier]); - } -} diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_LightningRod.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_LightningRod.java deleted file mode 100644 index 9809dba278..0000000000 --- a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_LightningRod.java +++ /dev/null @@ -1,169 +0,0 @@ -package gregtech.common.tileentities.generators; - -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Textures.BlockIcons; -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.render.TextureFactory; - -public class GT_MetaTileEntity_LightningRod extends GT_MetaTileEntity_TieredMachineBlock { - - public GT_MetaTileEntity_LightningRod(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 0, "Generates EU From Lightning Bolts"); - } - - public GT_MetaTileEntity_LightningRod(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_LightningRod(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection != ForgeDirection.UP) { - return new ITexture[] { BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], - BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier] }; - } - if (!active) return new ITexture[] { BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], - TextureFactory.of(BlockIcons.MACHINE_CASING_FUSION_GLASS) }; - return new ITexture[] { BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], - TextureFactory.of(BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW), TextureFactory.builder() - .addIcon(BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return null; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LightningRod( - this.mName, - this.mTier, - this.mInventory.length, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - World aWorld = aBaseMetaTileEntity.getWorld(); - if (!aWorld.isRemote) { - if (aBaseMetaTileEntity.getStoredEU() > 0) { - aBaseMetaTileEntity.setActive(true); - aBaseMetaTileEntity.decreaseStoredEnergyUnits(aBaseMetaTileEntity.getStoredEU() / 100 + 1, false); - } else { - aBaseMetaTileEntity.setActive(false); - } - - if (aTick % 256 == 0 && (aWorld.isThundering() || (aWorld.isRaining() && XSTR_INSTANCE.nextInt(10) == 0))) { - int aRodValue = 0; - boolean isRodValid = true; - int aX = aBaseMetaTileEntity.getXCoord(); - int aY = aBaseMetaTileEntity.getYCoord(); - int aZ = aBaseMetaTileEntity.getZCoord(); - - for (int i = aBaseMetaTileEntity.getYCoord() + 1; i < aWorld.getHeight() - 1; i++) { - if (isRodValid && aBaseMetaTileEntity.getBlock(aX, i, aZ) - .getUnlocalizedName() - .equals("blockFenceIron")) { - aRodValue++; - } else { - isRodValid = false; - if (aBaseMetaTileEntity.getBlock(aX, i, aZ) != Blocks.air) { - aRodValue = 0; - break; - } - } - } - if (!aWorld.isThundering() && ((aY + aRodValue) < 128)) aRodValue = 0; - if (XSTR_INSTANCE.nextInt(4 * aWorld.getHeight()) < (aRodValue * (aY + aRodValue))) { - aBaseMetaTileEntity - .increaseStoredEnergyUnits(maxEUStore() - aBaseMetaTileEntity.getStoredEU(), false); - aWorld.addWeatherEffect(new EntityLightningBolt(aWorld, aX, aY + aRodValue, aZ)); - // randomly break a rod - if (aWorld.isThundering()) { - aWorld.setBlockToAir(aX, aY + XSTR_INSTANCE.nextInt(aRodValue) + 1, aZ); - } - } - } - } - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return facing == ForgeDirection.UP; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isEnetInput() { - return false; - } - - @Override - public long maxEUStore() { - return 50000000; - } - - @Override - public long maxEUOutput() { - return GT_Values.V[mTier]; - } - - @Override - public long maxAmperesOut() { - return 512; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) {} - - @Override - public void loadNBTData(NBTTagCompound aNBT) {} -} diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicEnergyConverter.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicEnergyConverter.java deleted file mode 100644 index 647aa504e5..0000000000 --- a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicEnergyConverter.java +++ /dev/null @@ -1,173 +0,0 @@ -package gregtech.common.tileentities.generators; - -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_MagicEnergyConverter extends GT_MetaTileEntity_BasicGenerator { - - public int mEfficiency; - - public GT_MetaTileEntity_MagicEnergyConverter(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, "Put your strange stuff in here"); - onConfigLoad(); - } - - public GT_MetaTileEntity_MagicEnergyConverter(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - onConfigLoad(); - } - - public GT_MetaTileEntity_MagicEnergyConverter(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - onConfigLoad(); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_MagicEnergyConverter( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.magicFuels; - } - - @Override - public int getCapacity() { - return 16000; - } - - public void onConfigLoad() { - this.mEfficiency = 100 - this.mTier * 5; - } - - @Override - public int getEfficiency() { - return this.mEfficiency; - } - - @Override - public ITexture[] getFront(byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_GLOW) - .glow() - .build(), - OVERLAYS_ENERGY_OUT[mTier] }; - } - - @Override - public ITexture[] getBack(byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_FRONT), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_FRONT_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTop(byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSides(byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontActive(byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) - .glow() - .build(), - OVERLAYS_ENERGY_OUT[mTier] }; - } - - @Override - public ITexture[] getBackActive(byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_FRONT_ACTIVE), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_FRONT_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomActive(byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopActive(byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSidesActive(byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public int getPollution() { - return 0; - } -} diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java deleted file mode 100644 index 3245607ac2..0000000000 --- a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_MagicalEnergyAbsorber.java +++ /dev/null @@ -1,805 +0,0 @@ -package gregtech.common.tileentities.generators; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Mods.Thaumcraft; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_DRAGONEGG; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_DRAGONEGG_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; -import static net.minecraft.util.EnumChatFormatting.GRAY; -import static net.minecraft.util.EnumChatFormatting.GREEN; -import static net.minecraft.util.EnumChatFormatting.LIGHT_PURPLE; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.EnumChatFormatting.UNDERLINE; -import static net.minecraft.util.EnumChatFormatting.YELLOW; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import java.util.concurrent.ConcurrentHashMap; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockDragonEgg; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.item.EntityEnderCrystal; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemEnchantedBook; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.base.Enums; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ParticleFX; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; -import gregtech.common.config.machinestats.ConfigMachines; -import thaumcraft.api.aspects.Aspect; -import thaumcraft.api.aspects.AspectList; -import thaumcraft.api.aspects.AspectSourceHelper; -import thaumcraft.api.aspects.IAspectContainer; -import thaumcraft.api.visnet.VisNetHandler; - -interface MagicalEnergyBBListener { - - void onMagicalEnergyBBUpdate(); -} - -public class GT_MetaTileEntity_MagicalEnergyAbsorber extends GT_MetaTileEntity_BasicGenerator - implements MagicalEnergyBBListener { - - private static final ConcurrentHashMap sSubscribedCrystals = new ConcurrentHashMap<>( - 4); - private static final List sPrimalAspects = (Thaumcraft.isModLoaded()) ? Aspect.getPrimalAspects() - : new ArrayList<>(); - private static final Map sAspectsEnergy = new HashMap<>(); - private static boolean sAllowMultipleEggs = false; - private static GT_MetaTileEntity_MagicalEnergyAbsorber sActiveSiphon = null; - private static int sEnergyPerEndercrystal = 512; - private static int sEnergyFromVis = 20; - private static int sEnergyPerEssentia = 320; - private static int sDragonEggEnergyPerTick = 2048; - private static int sCreeperEggEnergyPerTick = 512; - private final MagicalEnergyBB mMagicalEnergyBB = new MagicalEnergyBB(this, mTier, mTier + 2); - private int mEfficiency; - private int mMaxVisPerDrain; - private long mNextGenerateTickRate = 1; - private int mNoGenerationTicks = 0; - private boolean mUsingEssentia = true; - - public GT_MetaTileEntity_MagicalEnergyAbsorber(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, "Feasts on magic close to it:"); - onConfigLoad(); - } - - private GT_MetaTileEntity_MagicalEnergyAbsorber(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - onConfigLoad(); - } - - /** - * Populates static variables dependant on config settings - */ - private static void sharedConfigLoad() { - sAllowMultipleEggs = ConfigMachines.allowMultipleEggs; - if (Thaumcraft.isModLoaded()) { - for (Aspect tAspect : Aspect.aspects.values()) { - // noinspection UnstableApiUsage - sAspectsEnergy.put( - tAspect, - Enums.getIfPresent( - TC_Aspects.class, - tAspect.getTag() - .toUpperCase(Locale.ENGLISH)) - .or(TC_Aspects.AER).mValue * sEnergyPerEssentia); - } - } - } - - private static void setActiveSiphon(GT_MetaTileEntity_MagicalEnergyAbsorber aSiphon) { - sActiveSiphon = aSiphon; - } - - public void onConfigLoad() { - sharedConfigLoad(); - mEfficiency = 100 - mTier * 10; - mMaxVisPerDrain = (int) Math.round(Math.sqrt((double) (V[mTier] * 10000) / (sEnergyFromVis * getEfficiency()))); - if (Math.pow(mMaxVisPerDrain, 2) * sEnergyFromVis * getEfficiency() < V[mTier]) { - mMaxVisPerDrain += 1; - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) mMagicalEnergyBB.decreaseTier(); - else mMagicalEnergyBB.increaseTier(); - GT_Utility.sendChatToPlayer( - aPlayer, - String.format( - GT_LanguageManager.addStringLocalization( - "Interaction_DESCRIPTION_MagicalEnergyAbsorber_Screwdriver", - "Absorption range: %s blocks"), - mMagicalEnergyBB.getRange(), - true)); - mMagicalEnergyBB.update(); - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - if (!aBaseMetaTileEntity.isServerSide()) return; - mMagicalEnergyBB.update(); - } - - @Override - public void onRemoval() { - super.onRemoval(); - releaseEgg(); - unsubscribeCrystals(); - } - - private void releaseEgg() { - if (sActiveSiphon == this) { - setActiveSiphon(null); - } - } - - private void unsubscribeCrystals() { - for (UUID tCrystalID : sSubscribedCrystals.keySet()) { - sSubscribedCrystals.remove(tCrystalID, this); - } - } - - /** - * Call-back from the Bounding Box when its content is updated - */ - @Override - public void onMagicalEnergyBBUpdate() { - List tCrystalIDsInRange = mMagicalEnergyBB.getLivingCrystalIDs(); - // Release unreachable Crystals subscriptions - for (UUID tSubscribedCrystalID : sSubscribedCrystals.keySet()) { - if (!tCrystalIDsInRange.contains(tSubscribedCrystalID)) { - sSubscribedCrystals.remove(tSubscribedCrystalID, this); - } - } - // Subscribe to available and not already subscribed Crystals - for (UUID tCrystalID : tCrystalIDsInRange) { - sSubscribedCrystals.putIfAbsent(tCrystalID, this); - } - } - - @Override - public String[] getDescription() { - final String LI = "- %%%"; - final String EU_PER = "%%%EU per "; - List description = new ArrayList<>(); - description - .add(UNDERLINE + "Feasts on " + LIGHT_PURPLE + UNDERLINE + "magic" + GRAY + UNDERLINE + " close to it:"); - description.add( - LI + (sAllowMultipleEggs ? "A " : "An " + YELLOW + UNDERLINE + "EXCLUSIVE" + RESET) - + GRAY - + " " - + LIGHT_PURPLE - + "Dragon Egg" - + GRAY - + " atop"); - if (sEnergyPerEndercrystal > 0) { - description.add(LI + sEnergyPerEndercrystal + EU_PER + LIGHT_PURPLE + "Ender Crystal" + GRAY + " in range"); - } - if (Thaumcraft.isModLoaded()) { - description.add(LI + mMaxVisPerDrain + "%%%CV/t from an " + LIGHT_PURPLE + "Energised Node" + GRAY); - description.add( - LI + (sEnergyPerEssentia * getEfficiency()) / 100 - + EU_PER - + LIGHT_PURPLE - + "Essentia" - + GRAY - + " Aspect-Value from containers in range"); - } - description.add(" "); - description.add(UNDERLINE + "Lookup range (Use Screwdriver to change):"); - description.add("Default: %%%" + GREEN + mMagicalEnergyBB.getDefaultRange()); - description.add("Max: %%%" + GREEN + mMagicalEnergyBB.getMaxRange()); - description.add(" "); - description - .add(UNDERLINE + "Fuels on " + LIGHT_PURPLE + UNDERLINE + "enchantments" + GRAY + UNDERLINE + " input:"); - description.add( - "- Item: %%%" + (10000 * getEfficiency()) / 100 - + EU_PER - + LIGHT_PURPLE - + "enchant" - + GRAY - + " weight × level / max"); - description.add("- Book: %%%" + 10000 + EU_PER + LIGHT_PURPLE + "enchant" + GRAY + " weight × level / max"); - description.add(" "); - description.add("Efficiency: %%%" + GREEN + getEfficiency() + "%"); - return description.toArray(new String[0]); - } - - @Override - public ITexture[] getFront(byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_GLOW) - .glow() - .build(), - OVERLAYS_ENERGY_OUT[mTier] }; - } - - @Override - public ITexture[] getBack(byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_FRONT), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_FRONT_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTop(byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], TextureFactory.of(MACHINE_CASING_DRAGONEGG) }; - } - - @Override - public ITexture[] getSides(byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontActive(byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) - .glow() - .build(), - OVERLAYS_ENERGY_OUT[mTier] }; - } - - @Override - public ITexture[] getBackActive(byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_FRONT_ACTIVE), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_FRONT_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomActive(byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopActive(byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], TextureFactory.of(MACHINE_CASING_DRAGONEGG), - TextureFactory.builder() - .addIcon(MACHINE_CASING_DRAGONEGG_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSidesActive(byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public long maxEUStore() { - return Math.max(getEUVar(), V[mTier] * 16000 + getMinimumStoredEU()); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (!aBaseMetaTileEntity.isServerSide()) return; - if (!aBaseMetaTileEntity.isAllowedToWork()) return; - if ((aBaseMetaTileEntity.getUniversalEnergyStored() >= aBaseMetaTileEntity.getEUCapacity())) return; - - long tGeneratedEU; - - if (aTick % 100 == 0 && mUsingEssentia) mMagicalEnergyBB.update(); - - // Adaptive EU Generation Ticking - if (aTick % mNextGenerateTickRate == 0) { - tGeneratedEU = generateEU(); - if (tGeneratedEU > 0) { - mNoGenerationTicks = 0; - if (tGeneratedEU >= 2 * V[mTier]) - mNextGenerateTickRate = (long) (1.0D / ((2.0D * (double) (V[mTier])) / (double) tGeneratedEU)); - else mNextGenerateTickRate = 1; - mInventory[getStackDisplaySlot()] = new ItemStack(Blocks.fire, 1); - mInventory[getStackDisplaySlot()].setStackDisplayName("Generating: " + tGeneratedEU + " EU"); - } else { - mInventory[getStackDisplaySlot()] = null; - mNoGenerationTicks += 1; - } - if (mNoGenerationTicks > 20) { - mNoGenerationTicks = 0; - mNextGenerateTickRate = 20; - } - aBaseMetaTileEntity.increaseStoredEnergyUnits(tGeneratedEU, true); - aBaseMetaTileEntity.setActive( - aBaseMetaTileEntity.isAllowedToWork() - && aBaseMetaTileEntity.getUniversalEnergyStored() >= maxEUOutput() + getMinimumStoredEU()); - } - } - - /** - * Draws random portal particles on top when active with an egg on top - * - * @param aBaseMetaTileEntity The entity that will handle the {@link Block#randomDisplayTick} - */ - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { - - if (aBaseMetaTileEntity.isActive()) { - - if (isEgg(aBaseMetaTileEntity.getBlockAtSide(ForgeDirection.UP))) { - - final double oX = aBaseMetaTileEntity.getXCoord() + 8D / 16D; - final double oY = aBaseMetaTileEntity.getYCoord() + 17D / 32D; - final double oZ = aBaseMetaTileEntity.getZCoord() + 8D / 16D; - - final ParticleEventBuilder particleEventBuilder = new ParticleEventBuilder() - .setWorld(getBaseMetaTileEntity().getWorld()) - .setIdentifier(ParticleFX.PORTAL); - - for (int i = 0; i < 9; i++) { - final double dX = (XSTR_INSTANCE.nextFloat() - 0.5D) / 2D; - final double dY = XSTR_INSTANCE.nextFloat() * 1.5; - final double dZ = (XSTR_INSTANCE.nextFloat() - 0.5D) / 2D; - - final double x = oX + dX; - final double y = oY + dY; - final double z = oZ + dZ; - - final double mX = dX * 4D; - final double dXZ = Math.sqrt(dX * dX + dZ * dZ); - final double mY = -(dXZ * dY) / 4D; - final double mZ = dZ * 4D; - - particleEventBuilder.setMotion(mX, mY, mZ) - .setPosition(x, y, z) - .run(); - } - } - } - } - - @Override - public int getPollution() { - return 0; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.magicFuels; - } - - @Override - public int getEfficiency() { - return mEfficiency; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - // Restrict input to disenchantable items or enchanted books - return (isDisenchantableItem(aStack) || isEnchantedBook(aStack)); - } - - @Override - public int getCapacity() { - return 16000; - } - - private boolean isDisenchantableItem(ItemStack aStack) { - return ((aStack.isItemEnchanted()) && (aStack.getItem() - .getItemEnchantability() > 0)); - } - - private boolean isEnchantedBook(ItemStack aStack) { - return (aStack.getItem() instanceof ItemEnchantedBook); - } - - private long generateEU() { - long tEU; - - mUsingEssentia = false; - if ((tEU = absorbFromEgg()) > 0) return tEU; - if ((tEU = absorbFromEnderCrystals()) > 0) return tEU; - if ((tEU = absorbFromEnchantedItems()) > 0) return tEU; - if ((tEU = absorbFromVisNet()) > 0) return tEU; - mUsingEssentia = true; - if ((tEU = absorbFromEssentiaContainers()) > 0) return tEU; - return 0; - } - - private long absorbFromEnchantedItems() { - ItemStack tStack = getBaseMetaTileEntity().getStackInSlot(getInputSlot()); - if (tStack == null) return 0; - if (tStack.stackSize == 0) return 0; - if (!(isDisenchantableItem(tStack) || isEnchantedBook(tStack))) return 0; - long tEU = 0; - // Convert enchantments to their EU Value - Map tMap = EnchantmentHelper.getEnchantments(tStack); - for (Map.Entry e : tMap.entrySet()) { - if ((Integer) e.getKey() < Enchantment.enchantmentsList.length) { - Enchantment tEnchantment = Enchantment.enchantmentsList[(Integer) e.getKey()]; - Integer tLevel = (Integer) e.getValue(); - tEU += 1000000L * tLevel / tEnchantment.getMaxLevel() / tEnchantment.getWeight(); - } - } - - ItemStack tOutputStack = GT_Utility.copyAmount(1, tStack); - if (tOutputStack != null) { - if (isDisenchantableItem(tOutputStack)) { - tEU = tEU * getEfficiency() / 100; - EnchantmentHelper.setEnchantments(new HashMap<>(), tOutputStack); - } else if (isEnchantedBook(tOutputStack)) { - tOutputStack = new ItemStack(Items.book, 1); - } - } - - // Only consume input when it can store EU and push output - if ((getBaseMetaTileEntity().getStoredEU() + tEU) < getBaseMetaTileEntity().getEUCapacity() - && getBaseMetaTileEntity().addStackToSlot(getOutputSlot(), tOutputStack)) { - decrStackSize(getInputSlot(), 1); - } else { - tEU = 0; - } - return tEU; - } - - private boolean hasEgg() { - Block above = getBaseMetaTileEntity().getBlockOffset(0, 1, 0); - return isEgg(above); - } - - private long absorbFromEgg() { - if (!hasEgg()) return 0; - if (!sAllowMultipleEggs) { - if (sActiveSiphon != null && sActiveSiphon != this - && sActiveSiphon.getBaseMetaTileEntity() != null - && !sActiveSiphon.getBaseMetaTileEntity() - .isInvalidTileEntity() - && sActiveSiphon.isChunkLoaded() - && sActiveSiphon.hasEgg()) { - getBaseMetaTileEntity().doExplosion(Integer.MAX_VALUE); - } else { - setActiveSiphon(this); - } - } - Block egg = getBaseMetaTileEntity().getBlockOffset(0, 1, 0); - if (egg == Blocks.dragon_egg) { - return sDragonEggEnergyPerTick; - } else if (egg.getUnlocalizedName() - .contains("creeperEgg")) { - return sCreeperEggEnergyPerTick; - } - return 0; - } - - private long absorbFromEnderCrystals() { - if (sEnergyPerEndercrystal <= 0) return 0; - long tEU = 0; - for (GT_MetaTileEntity_MagicalEnergyAbsorber tSubscriber : sSubscribedCrystals.values()) { - if (tSubscriber == this) { // This Crystal is for me - tEU += sEnergyPerEndercrystal; - } - } - return tEU; - } - - private long absorbFromVisNet() { - if (!Thaumcraft.isModLoaded()) return 0; - - long tEU; - IGregTechTileEntity tBaseMetaTileEntity = getBaseMetaTileEntity(); - World tWorld = tBaseMetaTileEntity.getWorld(); - int tX = tBaseMetaTileEntity.getXCoord(); - int tY = tBaseMetaTileEntity.getYCoord(); - int tZ = tBaseMetaTileEntity.getZCoord(); - - // Attempt to drain as much Vis as needed for max EU/t, from all primal aspects. - int toDrain = mMaxVisPerDrain; - - for (int i = sPrimalAspects.size() - 1; i >= 0 && toDrain > 0; i--) { - toDrain -= VisNetHandler.drainVis(tWorld, tX, tY, tZ, sPrimalAspects.get(i), toDrain); - } - - int drained = mMaxVisPerDrain - toDrain; - tEU = (long) Math.min(maxEUOutput(), (Math.pow(drained, 2) * sEnergyFromVis * getEfficiency() / 10000)); - - return tEU; - } - - private long absorbFromEssentiaContainers() { - if (!Thaumcraft.isModLoaded()) return 0; - - long tEU = 0; - - long tEUtoGen = getBaseMetaTileEntity().getEUCapacity() - getBaseMetaTileEntity().getUniversalEnergyStored(); - List mAvailableEssentiaAspects = mMagicalEnergyBB.getAvailableAspects(); - - // try to drain 1 of whatever aspect available in containers within RANGE - for (int i = mAvailableEssentiaAspects.size() - 1; i >= 0 && tEUtoGen > 0; i--) { - Aspect aspect = mAvailableEssentiaAspects.get(i); - long tAspectEU = ((long) sAspectsEnergy.get(aspect) * getEfficiency()) / 100; - if (tAspectEU <= tEUtoGen && AspectSourceHelper.drainEssentia( - (TileEntity) getBaseMetaTileEntity(), - aspect, - ForgeDirection.UNKNOWN, - mMagicalEnergyBB.getRange())) { - tEUtoGen -= tAspectEU; - tEU += tAspectEU; - } - } - return tEU; - } - - private boolean isEgg(Block aBlock) { - if (aBlock == null) return false; - if (aBlock == Blocks.air) return false; - if (aBlock == Blocks.dragon_egg) return true; - if (aBlock instanceof BlockDragonEgg) return true; - return (aBlock.getUnlocalizedName() - .equals("tile.dragonEgg")); - } - - private boolean isChunkLoaded() { - IGregTechTileEntity tBaseMetaTileEntity = getBaseMetaTileEntity(); - int tX = tBaseMetaTileEntity.getXCoord(); - int tY = tBaseMetaTileEntity.getYCoord(); - World tWorld = tBaseMetaTileEntity.getWorld(); - Chunk tChunk = tWorld.getChunkFromBlockCoords(tX, tY); - return tChunk.isChunkLoaded; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_MagicalEnergyAbsorber(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mMagicalEnergyBBTier", mMagicalEnergyBB.getTier()); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mMagicalEnergyBB.setTier(aNBT.getInteger("mMagicalEnergyBBTier")); - } - - /** - * Handles Bounding Box ranged operations for Magic sources - */ - static class MagicalEnergyBB { - - private final GT_MetaTileEntity_MagicalEnergyAbsorber mAbsorber; - private final MagicalEnergyBBListener mListener; - private final int mDefaultTier; - private int mTier; - private final int mMaxTier; - private final List mLivingCrystalIDs = new ArrayList<>(); - private List mAvailableAspects; - - /** - * @param aAbsorber user and subscriber for updated BB content - * @param aDefaultTier Initial tier value - * @param aMaxTier Maximum allowed tier - */ - MagicalEnergyBB(GT_MetaTileEntity_MagicalEnergyAbsorber aAbsorber, int aDefaultTier, int aMaxTier) { - mAbsorber = aAbsorber; - mListener = aAbsorber; - mMaxTier = Math.max(Math.max(aMaxTier, 0), Math.max(aDefaultTier, 0)); - mDefaultTier = Math.min(aDefaultTier, mMaxTier); - mTier = mDefaultTier; - if (Thaumcraft.isModLoaded()) mAvailableAspects = new ArrayList<>(Aspect.aspects.size()); - } - - int getTier() { - return mTier; - } - - /** - * Set Bounding Box Tier within allowed bounds - * - * @param aTier new tier value - * @return effective new tier - */ - int setTier(int aTier) { - if (aTier >= 0) { - mTier = Math.min(aTier, mMaxTier); - } else { - mTier = 0; - } - return mTier; - } - - int getRange() { - return getRange(mTier); - } - - int getRange(int aTier) { - return 1 << aTier; - } - - int getDefaultTier() { - return mDefaultTier; - } - - int getDefaultRange() { - return getRange(getDefaultTier()); - } - - int getMaxTier() { - return mMaxTier; - } - - int getMaxRange() { - return getRange(getMaxTier()); - } - - private AxisAlignedBB getAxisAlignedBB() { - double tRange = getRange(); - IGregTechTileEntity tBaseMetaTileEntity = mAbsorber.getBaseMetaTileEntity(); - double tX = tBaseMetaTileEntity.getXCoord(); - double tY = tBaseMetaTileEntity.getYCoord(); - double tZ = tBaseMetaTileEntity.getZCoord(); - return AxisAlignedBB - .getBoundingBox(tX - tRange, tY - tRange, tZ - tRange, tX + tRange, tY + tRange, tZ + tRange); - } - - private void scanLivingCrystals() { - World tWorld = mAbsorber.getBaseMetaTileEntity() - .getWorld(); - mLivingCrystalIDs.clear(); - for (EntityEnderCrystal o : tWorld.getEntitiesWithinAABB(EntityEnderCrystal.class, getAxisAlignedBB())) { - if (o.isEntityAlive()) { - mLivingCrystalIDs.add(o.getPersistentID()); - } - } - } - - private void scanAvailableAspects() { - if (!Thaumcraft.isModLoaded()) return; - IGregTechTileEntity tBaseMetaTileEntity = mAbsorber.getBaseMetaTileEntity(); - if (tBaseMetaTileEntity.isInvalidTileEntity()) return; - int tRange = getRange(); - int tY = tBaseMetaTileEntity.getYCoord(); - int tMaxY = tBaseMetaTileEntity.getWorld() - .getHeight() - 1; - // Make sure relative Y range stays between 0 and world max Y - int rYMin = (tY - tRange >= 0) ? -tRange : -(tY); - int rYMax = (((tY + tRange) <= tMaxY) ? tRange : tMaxY - tY); - mAvailableAspects.clear(); - for (int rX = -tRange; rX <= tRange; rX++) { - for (int rZ = -tRange; rZ <= tRange; rZ++) { - // rY < rYMax is not a bug. See: thaumcraft.common.lib.events.EssentiaHandler.getSources() - for (int rY = rYMin; rY < rYMax; rY++) { - TileEntity tTile = tBaseMetaTileEntity.getTileEntityOffset(rX, rY, rZ); - if (tTile instanceof IAspectContainer) { - AspectList tAspectList = ((IAspectContainer) tTile).getAspects(); - if (tAspectList == null || tAspectList.aspects.isEmpty()) continue; - Set tAspects = tAspectList.aspects.keySet(); - mAvailableAspects.addAll(tAspects); - } - } - } - } - } - - /** - * @return List of Living Ender Crystal Entity IDs in range - */ - List getLivingCrystalIDs() { - return mLivingCrystalIDs; - } - - /** - * @return List of drainable Essentia Aspects from containers in range - */ - List getAvailableAspects() { - return mAvailableAspects; - } - - /** - * Scan range for magic sources - */ - void update() { - if (mAbsorber == null) return; - if (mAbsorber.getBaseMetaTileEntity() == null) return; - if (mAbsorber.getBaseMetaTileEntity() - .isInvalidTileEntity()) return; - if (mAbsorber.getBaseMetaTileEntity() - .getWorld() == null) return; - scanLivingCrystals(); - scanAvailableAspects(); - if (mListener != null) { - mListener.onMagicalEnergyBBUpdate(); - } - } - - void increaseTier() { - offsetTier(1); - } - - void decreaseTier() { - offsetTier(-1); - } - - /** - * Change the Bounding Box tier relatively to offset with wrapping at tier limits - * - * @param aOffset relative tier change - */ - void offsetTier(int aOffset) { - int tNumTiers = mMaxTier + 1; - int tTier = (mTier + aOffset + tNumTiers) % tNumTiers; - int tTrueTier = setTier(tTier); - if (tTier != tTrueTier) { - GT_Log.out.format("Absorber's BB Tier set to %d was capped to %d", tTier, tTrueTier); - } - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_NaquadahReactor.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_NaquadahReactor.java deleted file mode 100644 index 1dd378e746..0000000000 --- a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_NaquadahReactor.java +++ /dev/null @@ -1,201 +0,0 @@ -package gregtech.common.tileentities.generators; - -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BACK; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BACK_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BACK_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BACK_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BOTTOM_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BOTTOM_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BOTTOM_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_SIDE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_SIDE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_SIDE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_GLOW; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_NaquadahReactor extends GT_MetaTileEntity_BasicGenerator { - - private int mEfficiency; - - public GT_MetaTileEntity_NaquadahReactor(int aID, String aName, String[] aDescription, String aNameRegional, - int aTier) { - super(aID, aName, aNameRegional, aTier, aDescription); - if (aTier > 8 || aTier < 4) { - new Exception("Tier without Recipe Map!").printStackTrace(); - } - mEfficiency = getBaseEff(); - } - - public GT_MetaTileEntity_NaquadahReactor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - if (aTier > 8 || aTier < 4) { - new Exception("Tier without Recipe Map!").printStackTrace(); - } - mEfficiency = getBaseEff(); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - if (side == ForgeDirection.UNKNOWN) return false; - return ((side.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0) - && (side != getBaseMetaTileEntity().getFrontFacing()) - && (side != getBaseMetaTileEntity().getBackFacing()); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_NaquadahReactor(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - RecipeMap ret; - switch (mTier) { - case 4 -> ret = RecipeMaps.smallNaquadahReactorFuels; - case 5 -> ret = RecipeMaps.largeNaquadahReactorFuels; - case 6 -> ret = RecipeMaps.hugeNaquadahReactorFuels; - case 7 -> ret = RecipeMaps.extremeNaquadahReactorFuels; - case 8 -> ret = RecipeMaps.ultraHugeNaquadahReactorFuels; - default -> ret = null; - } - return ret; - } - - @Override - public int getCapacity() { - return getRecipeMap() != null ? getRecipeMap().getBackend() - .getProperties().minFluidInputs > 0 ? 8000 * (mTier + 1) : 0 : 0; - } - - @Override - public int getEfficiency() { - return mEfficiency; - } - - private int getBaseEff() { - return mTier == 4 ? 80 : 100 + (50 * (mTier - 5)); - } - - @Override - public ITexture[] getFront(byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], - TextureFactory.of( - TextureFactory.of(NAQUADAH_REACTOR_SOLID_FRONT), - TextureFactory.builder() - .addIcon(NAQUADAH_REACTOR_SOLID_FRONT_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getBack(byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], - TextureFactory.of( - TextureFactory.of(NAQUADAH_REACTOR_SOLID_BACK), - TextureFactory.builder() - .addIcon(NAQUADAH_REACTOR_SOLID_BACK_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], - TextureFactory.of( - TextureFactory.of(NAQUADAH_REACTOR_SOLID_BOTTOM), - TextureFactory.builder() - .addIcon(NAQUADAH_REACTOR_SOLID_BOTTOM_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getTop(byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], - TextureFactory.of( - TextureFactory.of(NAQUADAH_REACTOR_SOLID_TOP), - TextureFactory.builder() - .addIcon(NAQUADAH_REACTOR_SOLID_TOP_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getSides(byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], - TextureFactory.of( - TextureFactory.of(NAQUADAH_REACTOR_SOLID_SIDE), - TextureFactory.builder() - .addIcon(NAQUADAH_REACTOR_SOLID_SIDE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getFrontActive(byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], TextureFactory.of(NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE), - TextureFactory.builder() - .addIcon(NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBackActive(byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], TextureFactory.of(NAQUADAH_REACTOR_SOLID_BACK_ACTIVE), - TextureFactory.builder() - .addIcon(NAQUADAH_REACTOR_SOLID_BACK_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomActive(byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], - TextureFactory.of(NAQUADAH_REACTOR_SOLID_BOTTOM_ACTIVE), TextureFactory.builder() - .addIcon(NAQUADAH_REACTOR_SOLID_BOTTOM_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopActive(byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], TextureFactory.of(NAQUADAH_REACTOR_SOLID_TOP_ACTIVE), - TextureFactory.builder() - .addIcon(NAQUADAH_REACTOR_SOLID_TOP_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSidesActive(byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], TextureFactory.of(NAQUADAH_REACTOR_SOLID_SIDE_ACTIVE), - TextureFactory.builder() - .addIcon(NAQUADAH_REACTOR_SOLID_SIDE_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public int getPollution() { - return 0; - } -} diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_PlasmaGenerator.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_PlasmaGenerator.java deleted file mode 100644 index fa980ce480..0000000000 --- a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_PlasmaGenerator.java +++ /dev/null @@ -1,142 +0,0 @@ -package gregtech.common.tileentities.generators; - -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_PlasmaGenerator extends GT_MetaTileEntity_BasicGenerator { - - public int mEfficiency; - - public GT_MetaTileEntity_PlasmaGenerator(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, "Plasma into energy"); - setEfficiency(); - } - - public GT_MetaTileEntity_PlasmaGenerator(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - setEfficiency(); - } - - public GT_MetaTileEntity_PlasmaGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - setEfficiency(); - } - - @Override - public ITexture[] getFront(byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS), - OVERLAYS_ENERGY_OUT[mTier] }; - } - - @Override - public ITexture[] getBack(byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS) }; - } - - @Override - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS) }; - } - - @Override - public ITexture[] getTop(byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS) }; - } - - @Override - public ITexture[] getSides(byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS) }; - } - - @Override - public ITexture[] getFrontActive(byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS_YELLOW), - TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) - .glow() - .build(), - OVERLAYS_ENERGY_OUT[mTier] }; - } - - @Override - public ITexture[] getBackActive(byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS_YELLOW), - TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomActive(byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS_YELLOW), - TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopActive(byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS_YELLOW), - TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSidesActive(byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS_YELLOW), - TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) - .glow() - .build() }; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.plasmaFuels; - } - - @Override - public int getEfficiency() { - return this.mEfficiency; - } - - @Override - public int getCapacity() { - return 16000; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PlasmaGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - public void setEfficiency() { - this.mEfficiency = Math.max(10, 10 + Math.min(90, this.mTier * 10)); - } - - @Override - public int getPollution() { - return 0; - } -} diff --git a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SteamTurbine.java b/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SteamTurbine.java deleted file mode 100644 index 9c1b8db562..0000000000 --- a/src/main/java/gregtech/common/tileentities/generators/GT_MetaTileEntity_SteamTurbine.java +++ /dev/null @@ -1,238 +0,0 @@ -package gregtech.common.tileentities.generators; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BACK; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BACK_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BACK_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BACK_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BOTTOM; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BOTTOM_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BOTTOM_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BOTTOM_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_FRONT; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_FRONT_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_FRONT_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_FRONT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_SIDE; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_SIDE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_SIDE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_SIDE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_TOP; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_TOP_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_TOP_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_TOP_GLOW; - -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; - -public class GT_MetaTileEntity_SteamTurbine extends GT_MetaTileEntity_BasicGenerator { - - public int mEfficiency; - - public GT_MetaTileEntity_SteamTurbine(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - new String[] { "Converts Steam into EU", "Base rate: 2L of Steam -> 1 EU" }); - this.mEfficiency = 6 + this.mTier; - } - - public GT_MetaTileEntity_SteamTurbine(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - this.mEfficiency = 6 + this.mTier; - } - - public GT_MetaTileEntity_SteamTurbine(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - this.mEfficiency = 6 + this.mTier; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_SteamTurbine(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return null; - } - - @Override - public String[] getDescription() { - String[] desc = new String[mDescriptionArray.length + 2]; - System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); - desc[mDescriptionArray.length] = "Fuel Efficiency: " + (600 / getEfficiency()) + "%"; - desc[mDescriptionArray.length + 1] = String.format( - "Consumes up to %sL of Steam per second", - (int) (4000 * (8 * Math.pow(4, mTier) + Math.pow(2, Math.max(mTier - 1, 0))) / (600 / getEfficiency()))); - return desc; - } - - @Override - public int getCapacity() { - return 24000 * this.mTier; - } - - @Override - public int getEfficiency() { - return this.mEfficiency; - } - - @Override - public long getFuelValue(FluidStack aLiquid, boolean aLong) { - return getFuelValue(aLiquid); - } - - @Override - public int getFuelValue(FluidStack aLiquid) { - if (aLiquid == null) return 0; - return GT_ModHandler.isAnySteam(aLiquid) ? 3 : 0; - } - - @Override - public int consumedFluidPerOperation(FluidStack aLiquid) { - return this.mEfficiency; - } - - @Override - public ITexture[] getFront(byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], - TextureFactory.of( - TextureFactory.of(STEAM_TURBINE_FRONT), - TextureFactory.builder() - .addIcon(STEAM_TURBINE_FRONT_GLOW) - .glow() - .build()), - OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBack(byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], - TextureFactory.of( - TextureFactory.of(STEAM_TURBINE_BACK), - TextureFactory.builder() - .addIcon(STEAM_TURBINE_BACK_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], - TextureFactory.of( - TextureFactory.of(STEAM_TURBINE_BOTTOM), - TextureFactory.builder() - .addIcon(STEAM_TURBINE_BOTTOM_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getTop(byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], - TextureFactory.of( - TextureFactory.of(STEAM_TURBINE_TOP), - TextureFactory.builder() - .addIcon(STEAM_TURBINE_TOP_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getSides(byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], - TextureFactory.of( - TextureFactory.of(STEAM_TURBINE_SIDE), - TextureFactory.builder() - .addIcon(STEAM_TURBINE_SIDE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getFrontActive(byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(STEAM_TURBINE_FRONT_ACTIVE), - TextureFactory.builder() - .addIcon(STEAM_TURBINE_FRONT_ACTIVE_GLOW) - .glow() - .build()), - OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBackActive(byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(STEAM_TURBINE_BACK_ACTIVE), - TextureFactory.builder() - .addIcon(STEAM_TURBINE_BACK_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getBottomActive(byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(STEAM_TURBINE_BOTTOM_ACTIVE), - TextureFactory.builder() - .addIcon(STEAM_TURBINE_BOTTOM_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getTopActive(byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(STEAM_TURBINE_TOP_ACTIVE), - TextureFactory.builder() - .addIcon(STEAM_TURBINE_TOP_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public ITexture[] getSidesActive(byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], - TextureFactory.of( - TextureFactory.of(STEAM_TURBINE_SIDE_ACTIVE), - TextureFactory.builder() - .addIcon(STEAM_TURBINE_SIDE_ACTIVE_GLOW) - .glow() - .build()) }; - } - - @Override - public int getPollution() { - return 0; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - if (GT_ModHandler.isSuperHeatedSteam(aFluid)) { - aFluid.amount = 0; - aFluid = null; - return false; - } - return super.isFluidInputAllowed(aFluid); - } -} diff --git a/src/main/java/gregtech/common/tileentities/generators/MTEDieselGenerator.java b/src/main/java/gregtech/common/tileentities/generators/MTEDieselGenerator.java new file mode 100644 index 0000000000..b09e2c5e1d --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/generators/MTEDieselGenerator.java @@ -0,0 +1,278 @@ +package gregtech.common.tileentities.generators; + +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BACK; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BACK_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BACK_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BACK_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_FRONT; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_FRONT_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_FRONT_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_FRONT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_SIDE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_TOP; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_TOP_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_TOP_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.DIESEL_GENERATOR_TOP_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.ParticleFX; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicGenerator; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; + +public class MTEDieselGenerator extends MTEBasicGenerator { + + public int mEfficiency; + + public MTEDieselGenerator(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + new String[] { "Requires liquid Fuel", + "Causes " + + (int) (GTMod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond + * GTMod.gregtechproxy.mPollutionDieselGeneratorReleasedByTier[aTier]) + + " Pollution per second" }); + onConfigLoad(); + } + + public MTEDieselGenerator(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + onConfigLoad(); + } + + public MTEDieselGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + onConfigLoad(); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEDieselGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.dieselFuels; + } + + @Override + public int getCapacity() { + return 16000; + } + + public void onConfigLoad() { + this.mEfficiency = (100 - this.mTier * 5); + } + + @Override + public int getEfficiency() { + return this.mEfficiency; + } + + @Override + public int getFuelValue(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack) || getRecipeMap() == null) return 0; + long rValue = super.getFuelValue(aStack); + if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) { + rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3L); + } + if (rValue > Integer.MAX_VALUE) { + throw new ArithmeticException("Integer LOOPBACK!"); + } + return (int) rValue; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aTick % 100 == 0 && mFluid != null && mFluid.amount > this.getCapacity()) { + GTLog.err.println( + "Dupe Abuse: " + aBaseMetaTileEntity.getOwnerName() + + " Coords: " + + aBaseMetaTileEntity.getXCoord() + + " " + + aBaseMetaTileEntity.getYCoord() + + " " + + aBaseMetaTileEntity.getZCoord()); + aBaseMetaTileEntity.setToFire(); + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + /** + * Draws random smoke particles on top when active + * + * @param aBaseMetaTileEntity The entity that will handle the {@link Block#randomDisplayTick} + */ + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { + if (aBaseMetaTileEntity.isActive()) { + + if (aBaseMetaTileEntity.getCoverIDAtSide(ForgeDirection.UP) == 0 + && !aBaseMetaTileEntity.getOpacityAtSide(ForgeDirection.UP)) { + + final double x = aBaseMetaTileEntity.getOffsetX(ForgeDirection.UP, 1) + 2D / 16D + + XSTR_INSTANCE.nextFloat() * 14D / 16D; + final double y = aBaseMetaTileEntity.getOffsetY(ForgeDirection.UP, 1) + 1D / 32D; + final double z = aBaseMetaTileEntity.getOffsetZ(ForgeDirection.UP, 1) + 2D / 16D + + XSTR_INSTANCE.nextFloat() * 14D / 16D; + + new ParticleEventBuilder().setMotion(0D, 0D, 0D) + .setPosition(x, y, z) + .setWorld(getBaseMetaTileEntity().getWorld()) + .setIdentifier(ParticleFX.SMOKE) + .run(); + } + } + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_FRONT), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_FRONT_GLOW) + .glow() + .build()), + OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BACK), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BACK_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BOTTOM), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BOTTOM_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_TOP), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_TOP_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_SIDE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_SIDE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_FRONT_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_FRONT_ACTIVE_GLOW) + .glow() + .build()), + OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BACK_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BACK_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_BOTTOM_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_BOTTOM_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_TOP_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_TOP_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(DIESEL_GENERATOR_SIDE_ACTIVE), + TextureFactory.builder() + .addIcon(DIESEL_GENERATOR_SIDE_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public int getPollution() { + return (int) (GTMod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond + * GTMod.gregtechproxy.mPollutionDieselGeneratorReleasedByTier[mTier]); + } +} diff --git a/src/main/java/gregtech/common/tileentities/generators/MTEGasTurbine.java b/src/main/java/gregtech/common/tileentities/generators/MTEGasTurbine.java new file mode 100644 index 0000000000..47976da987 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/generators/MTEGasTurbine.java @@ -0,0 +1,201 @@ +package gregtech.common.tileentities.generators; + +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BACK; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BACK_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BACK_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BACK_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BOTTOM_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BOTTOM_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_BOTTOM_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_FRONT; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_FRONT_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_FRONT_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_FRONT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_SIDE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_SIDE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_SIDE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_TOP; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_TOP_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_TOP_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.GAS_TURBINE_TOP_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.GTMod; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicGenerator; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; + +public class MTEGasTurbine extends MTEBasicGenerator { + + public int mEfficiency; + + public MTEGasTurbine(int aID, String aName, String aNameRegional, int aTier, int mEfficiency) { + super( + aID, + aName, + aNameRegional, + aTier, + new String[] { "Requires flammable Gasses", + "Causes " + + (int) (GTMod.gregtechproxy.mPollutionBaseGasTurbinePerSecond + * GTMod.gregtechproxy.mPollutionGasTurbineReleasedByTier[aTier]) + + " Pollution per second" }); + this.mEfficiency = mEfficiency; + } + + public MTEGasTurbine(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, int mEfficiency) { + super(aName, aTier, aDescription, aTextures); + this.mEfficiency = mEfficiency; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEGasTurbine(this.mName, this.mTier, this.mDescriptionArray, this.mTextures, this.mEfficiency); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.gasTurbineFuels; + } + + @Override + public int getCapacity() { + return 16000; + } + + @Override + public int getEfficiency() { + return this.mEfficiency; + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], + TextureFactory.of( + TextureFactory.of(GAS_TURBINE_FRONT), + TextureFactory.builder() + .addIcon(GAS_TURBINE_FRONT_GLOW) + .glow() + .build()), + OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], + TextureFactory.of( + TextureFactory.of(GAS_TURBINE_BACK), + TextureFactory.builder() + .addIcon(GAS_TURBINE_BACK_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], + TextureFactory.of( + TextureFactory.of(GAS_TURBINE_BOTTOM), + TextureFactory.builder() + .addIcon(GAS_TURBINE_BOTTOM_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], + TextureFactory.of( + TextureFactory.of(GAS_TURBINE_TOP), + TextureFactory.builder() + .addIcon(GAS_TURBINE_TOP_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], + TextureFactory.of( + TextureFactory.of(GAS_TURBINE_SIDE), + TextureFactory.builder() + .addIcon(GAS_TURBINE_SIDE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(GAS_TURBINE_FRONT_ACTIVE), + TextureFactory.builder() + .addIcon(GAS_TURBINE_FRONT_ACTIVE_GLOW) + .glow() + .build()), + OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(GAS_TURBINE_BACK_ACTIVE), + TextureFactory.builder() + .addIcon(GAS_TURBINE_BACK_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(GAS_TURBINE_BOTTOM_ACTIVE), + TextureFactory.builder() + .addIcon(GAS_TURBINE_BOTTOM_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(GAS_TURBINE_TOP_ACTIVE), + TextureFactory.builder() + .addIcon(GAS_TURBINE_TOP_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(GAS_TURBINE_SIDE_ACTIVE), + TextureFactory.builder() + .addIcon(GAS_TURBINE_SIDE_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public int getPollution() { + return (int) (GTMod.gregtechproxy.mPollutionBaseGasTurbinePerSecond + * GTMod.gregtechproxy.mPollutionGasTurbineReleasedByTier[mTier]); + } +} diff --git a/src/main/java/gregtech/common/tileentities/generators/MTELightningRod.java b/src/main/java/gregtech/common/tileentities/generators/MTELightningRod.java new file mode 100644 index 0000000000..ef04bf9d0b --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/generators/MTELightningRod.java @@ -0,0 +1,168 @@ +package gregtech.common.tileentities.generators; + +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.entity.effect.EntityLightningBolt; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.render.TextureFactory; + +public class MTELightningRod extends MTETieredMachineBlock { + + public MTELightningRod(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 0, "Generates EU From Lightning Bolts"); + } + + public MTELightningRod(String aName, int aTier, int aInvSlotCount, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTELightningRod(String aName, int aTier, int aInvSlotCount, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection != ForgeDirection.UP) { + return new ITexture[] { BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], + BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier] }; + } + if (!active) return new ITexture[] { BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], + TextureFactory.of(BlockIcons.MACHINE_CASING_FUSION_GLASS) }; + return new ITexture[] { BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], + TextureFactory.of(BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW), TextureFactory.builder() + .addIcon(BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return null; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELightningRod( + this.mName, + this.mTier, + this.mInventory.length, + this.mDescriptionArray, + this.mTextures); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + World aWorld = aBaseMetaTileEntity.getWorld(); + if (!aWorld.isRemote) { + if (aBaseMetaTileEntity.getStoredEU() > 0) { + aBaseMetaTileEntity.setActive(true); + aBaseMetaTileEntity.decreaseStoredEnergyUnits(aBaseMetaTileEntity.getStoredEU() / 100 + 1, false); + } else { + aBaseMetaTileEntity.setActive(false); + } + + if (aTick % 256 == 0 && (aWorld.isThundering() || (aWorld.isRaining() && XSTR_INSTANCE.nextInt(10) == 0))) { + int aRodValue = 0; + boolean isRodValid = true; + int aX = aBaseMetaTileEntity.getXCoord(); + int aY = aBaseMetaTileEntity.getYCoord(); + int aZ = aBaseMetaTileEntity.getZCoord(); + + for (int i = aBaseMetaTileEntity.getYCoord() + 1; i < aWorld.getHeight() - 1; i++) { + if (isRodValid && aBaseMetaTileEntity.getBlock(aX, i, aZ) + .getUnlocalizedName() + .equals("blockFenceIron")) { + aRodValue++; + } else { + isRodValid = false; + if (aBaseMetaTileEntity.getBlock(aX, i, aZ) != Blocks.air) { + aRodValue = 0; + break; + } + } + } + if (!aWorld.isThundering() && ((aY + aRodValue) < 128)) aRodValue = 0; + if (XSTR_INSTANCE.nextInt(4 * aWorld.getHeight()) < (aRodValue * (aY + aRodValue))) { + aBaseMetaTileEntity + .increaseStoredEnergyUnits(maxEUStore() - aBaseMetaTileEntity.getStoredEU(), false); + aWorld.addWeatherEffect(new EntityLightningBolt(aWorld, aX, aY + aRodValue, aZ)); + // randomly break a rod + if (aWorld.isThundering()) { + aWorld.setBlockToAir(aX, aY + XSTR_INSTANCE.nextInt(aRodValue) + 1, aZ); + } + } + } + } + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return facing == ForgeDirection.UP; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isEnetInput() { + return false; + } + + @Override + public long maxEUStore() { + return 50000000; + } + + @Override + public long maxEUOutput() { + return GTValues.V[mTier]; + } + + @Override + public long maxAmperesOut() { + return 512; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) {} + + @Override + public void loadNBTData(NBTTagCompound aNBT) {} +} diff --git a/src/main/java/gregtech/common/tileentities/generators/MTEMagicEnergyConverter.java b/src/main/java/gregtech/common/tileentities/generators/MTEMagicEnergyConverter.java new file mode 100644 index 0000000000..c741cc4457 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/generators/MTEMagicEnergyConverter.java @@ -0,0 +1,167 @@ +package gregtech.common.tileentities.generators; + +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicGenerator; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; + +public class MTEMagicEnergyConverter extends MTEBasicGenerator { + + public int mEfficiency; + + public MTEMagicEnergyConverter(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, "Put your strange stuff in here"); + onConfigLoad(); + } + + public MTEMagicEnergyConverter(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + onConfigLoad(); + } + + public MTEMagicEnergyConverter(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + onConfigLoad(); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMagicEnergyConverter(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.magicFuels; + } + + @Override + public int getCapacity() { + return 16000; + } + + public void onConfigLoad() { + this.mEfficiency = 100 - this.mTier * 5; + } + + @Override + public int getEfficiency() { + return this.mEfficiency; + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_GLOW) + .glow() + .build(), + OVERLAYS_ENERGY_OUT[mTier] }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_FRONT), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_FRONT_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) + .glow() + .build(), + OVERLAYS_ENERGY_OUT[mTier] }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_FRONT_ACTIVE), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_FRONT_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public int getPollution() { + return 0; + } +} diff --git a/src/main/java/gregtech/common/tileentities/generators/MTEMagicalEnergyAbsorber.java b/src/main/java/gregtech/common/tileentities/generators/MTEMagicalEnergyAbsorber.java new file mode 100644 index 0000000000..c49102ad61 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/generators/MTEMagicalEnergyAbsorber.java @@ -0,0 +1,803 @@ +package gregtech.common.tileentities.generators; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Mods.Thaumcraft; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_DRAGONEGG; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_DRAGONEGG_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_FRONT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; +import static net.minecraft.util.EnumChatFormatting.GRAY; +import static net.minecraft.util.EnumChatFormatting.GREEN; +import static net.minecraft.util.EnumChatFormatting.LIGHT_PURPLE; +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.EnumChatFormatting.UNDERLINE; +import static net.minecraft.util.EnumChatFormatting.YELLOW; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockDragonEgg; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemEnchantedBook; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.base.Enums; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ParticleFX; +import gregtech.api.enums.TCAspects; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicGenerator; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; +import gregtech.common.config.machinestats.ConfigMachines; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.aspects.AspectSourceHelper; +import thaumcraft.api.aspects.IAspectContainer; +import thaumcraft.api.visnet.VisNetHandler; + +interface MagicalEnergyBBListener { + + void onMagicalEnergyBBUpdate(); +} + +public class MTEMagicalEnergyAbsorber extends MTEBasicGenerator implements MagicalEnergyBBListener { + + private static final ConcurrentHashMap sSubscribedCrystals = new ConcurrentHashMap<>( + 4); + private static final List sPrimalAspects = (Thaumcraft.isModLoaded()) ? Aspect.getPrimalAspects() + : new ArrayList<>(); + private static final Map sAspectsEnergy = new HashMap<>(); + private static boolean sAllowMultipleEggs = false; + private static MTEMagicalEnergyAbsorber sActiveSiphon = null; + private static int sEnergyPerEndercrystal = 512; + private static int sEnergyFromVis = 20; + private static int sEnergyPerEssentia = 320; + private static int sDragonEggEnergyPerTick = 2048; + private static int sCreeperEggEnergyPerTick = 512; + private final MagicalEnergyBB mMagicalEnergyBB = new MagicalEnergyBB(this, mTier, mTier + 2); + private int mEfficiency; + private int mMaxVisPerDrain; + private long mNextGenerateTickRate = 1; + private int mNoGenerationTicks = 0; + private boolean mUsingEssentia = true; + + public MTEMagicalEnergyAbsorber(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, "Feasts on magic close to it:"); + onConfigLoad(); + } + + private MTEMagicalEnergyAbsorber(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + onConfigLoad(); + } + + /** + * Populates static variables dependant on config settings + */ + private static void sharedConfigLoad() { + sAllowMultipleEggs = ConfigMachines.allowMultipleEggs; + if (Thaumcraft.isModLoaded()) { + for (Aspect tAspect : Aspect.aspects.values()) { + // noinspection UnstableApiUsage + sAspectsEnergy.put( + tAspect, + Enums.getIfPresent( + TCAspects.class, + tAspect.getTag() + .toUpperCase(Locale.ENGLISH)) + .or(TCAspects.AER).mValue * sEnergyPerEssentia); + } + } + } + + private static void setActiveSiphon(MTEMagicalEnergyAbsorber aSiphon) { + sActiveSiphon = aSiphon; + } + + public void onConfigLoad() { + sharedConfigLoad(); + mEfficiency = 100 - mTier * 10; + mMaxVisPerDrain = (int) Math.round(Math.sqrt((double) (V[mTier] * 10000) / (sEnergyFromVis * getEfficiency()))); + if (Math.pow(mMaxVisPerDrain, 2) * sEnergyFromVis * getEfficiency() < V[mTier]) { + mMaxVisPerDrain += 1; + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) mMagicalEnergyBB.decreaseTier(); + else mMagicalEnergyBB.increaseTier(); + GTUtility.sendChatToPlayer( + aPlayer, + String.format( + GTLanguageManager.addStringLocalization( + "Interaction_DESCRIPTION_MagicalEnergyAbsorber_Screwdriver", + "Absorption range: %s blocks"), + mMagicalEnergyBB.getRange(), + true)); + mMagicalEnergyBB.update(); + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + if (!aBaseMetaTileEntity.isServerSide()) return; + mMagicalEnergyBB.update(); + } + + @Override + public void onRemoval() { + super.onRemoval(); + releaseEgg(); + unsubscribeCrystals(); + } + + private void releaseEgg() { + if (sActiveSiphon == this) { + setActiveSiphon(null); + } + } + + private void unsubscribeCrystals() { + for (UUID tCrystalID : sSubscribedCrystals.keySet()) { + sSubscribedCrystals.remove(tCrystalID, this); + } + } + + /** + * Call-back from the Bounding Box when its content is updated + */ + @Override + public void onMagicalEnergyBBUpdate() { + List tCrystalIDsInRange = mMagicalEnergyBB.getLivingCrystalIDs(); + // Release unreachable Crystals subscriptions + for (UUID tSubscribedCrystalID : sSubscribedCrystals.keySet()) { + if (!tCrystalIDsInRange.contains(tSubscribedCrystalID)) { + sSubscribedCrystals.remove(tSubscribedCrystalID, this); + } + } + // Subscribe to available and not already subscribed Crystals + for (UUID tCrystalID : tCrystalIDsInRange) { + sSubscribedCrystals.putIfAbsent(tCrystalID, this); + } + } + + @Override + public String[] getDescription() { + final String LI = "- %%%"; + final String EU_PER = "%%%EU per "; + List description = new ArrayList<>(); + description + .add(UNDERLINE + "Feasts on " + LIGHT_PURPLE + UNDERLINE + "magic" + GRAY + UNDERLINE + " close to it:"); + description.add( + LI + (sAllowMultipleEggs ? "A " : "An " + YELLOW + UNDERLINE + "EXCLUSIVE" + RESET) + + GRAY + + " " + + LIGHT_PURPLE + + "Dragon Egg" + + GRAY + + " atop"); + if (sEnergyPerEndercrystal > 0) { + description.add(LI + sEnergyPerEndercrystal + EU_PER + LIGHT_PURPLE + "Ender Crystal" + GRAY + " in range"); + } + if (Thaumcraft.isModLoaded()) { + description.add(LI + mMaxVisPerDrain + "%%%CV/t from an " + LIGHT_PURPLE + "Energised Node" + GRAY); + description.add( + LI + (sEnergyPerEssentia * getEfficiency()) / 100 + + EU_PER + + LIGHT_PURPLE + + "Essentia" + + GRAY + + " Aspect-Value from containers in range"); + } + description.add(" "); + description.add(UNDERLINE + "Lookup range (Use Screwdriver to change):"); + description.add("Default: %%%" + GREEN + mMagicalEnergyBB.getDefaultRange()); + description.add("Max: %%%" + GREEN + mMagicalEnergyBB.getMaxRange()); + description.add(" "); + description + .add(UNDERLINE + "Fuels on " + LIGHT_PURPLE + UNDERLINE + "enchantments" + GRAY + UNDERLINE + " input:"); + description.add( + "- Item: %%%" + (10000 * getEfficiency()) / 100 + + EU_PER + + LIGHT_PURPLE + + "enchant" + + GRAY + + " weight × level / max"); + description.add("- Book: %%%" + 10000 + EU_PER + LIGHT_PURPLE + "enchant" + GRAY + " weight × level / max"); + description.add(" "); + description.add("Efficiency: %%%" + GREEN + getEfficiency() + "%"); + return description.toArray(new String[0]); + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_GLOW) + .glow() + .build(), + OVERLAYS_ENERGY_OUT[mTier] }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_FRONT), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_FRONT_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], TextureFactory.of(MACHINE_CASING_DRAGONEGG) }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) + .glow() + .build(), + OVERLAYS_ENERGY_OUT[mTier] }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_FRONT_ACTIVE), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_FRONT_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], TextureFactory.of(MACHINE_CASING_DRAGONEGG), + TextureFactory.builder() + .addIcon(MACHINE_CASING_DRAGONEGG_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], TextureFactory.of(MACHINE_CASING_MAGIC_ACTIVE), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public long maxEUStore() { + return Math.max(getEUVar(), V[mTier] * 16000 + getMinimumStoredEU()); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (!aBaseMetaTileEntity.isServerSide()) return; + if (!aBaseMetaTileEntity.isAllowedToWork()) return; + if ((aBaseMetaTileEntity.getUniversalEnergyStored() >= aBaseMetaTileEntity.getEUCapacity())) return; + + long tGeneratedEU; + + if (aTick % 100 == 0 && mUsingEssentia) mMagicalEnergyBB.update(); + + // Adaptive EU Generation Ticking + if (aTick % mNextGenerateTickRate == 0) { + tGeneratedEU = generateEU(); + if (tGeneratedEU > 0) { + mNoGenerationTicks = 0; + if (tGeneratedEU >= 2 * V[mTier]) + mNextGenerateTickRate = (long) (1.0D / ((2.0D * (double) (V[mTier])) / (double) tGeneratedEU)); + else mNextGenerateTickRate = 1; + mInventory[getStackDisplaySlot()] = new ItemStack(Blocks.fire, 1); + mInventory[getStackDisplaySlot()].setStackDisplayName("Generating: " + tGeneratedEU + " EU"); + } else { + mInventory[getStackDisplaySlot()] = null; + mNoGenerationTicks += 1; + } + if (mNoGenerationTicks > 20) { + mNoGenerationTicks = 0; + mNextGenerateTickRate = 20; + } + aBaseMetaTileEntity.increaseStoredEnergyUnits(tGeneratedEU, true); + aBaseMetaTileEntity.setActive( + aBaseMetaTileEntity.isAllowedToWork() + && aBaseMetaTileEntity.getUniversalEnergyStored() >= maxEUOutput() + getMinimumStoredEU()); + } + } + + /** + * Draws random portal particles on top when active with an egg on top + * + * @param aBaseMetaTileEntity The entity that will handle the {@link Block#randomDisplayTick} + */ + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { + + if (aBaseMetaTileEntity.isActive()) { + + if (isEgg(aBaseMetaTileEntity.getBlockAtSide(ForgeDirection.UP))) { + + final double oX = aBaseMetaTileEntity.getXCoord() + 8D / 16D; + final double oY = aBaseMetaTileEntity.getYCoord() + 17D / 32D; + final double oZ = aBaseMetaTileEntity.getZCoord() + 8D / 16D; + + final ParticleEventBuilder particleEventBuilder = new ParticleEventBuilder() + .setWorld(getBaseMetaTileEntity().getWorld()) + .setIdentifier(ParticleFX.PORTAL); + + for (int i = 0; i < 9; i++) { + final double dX = (XSTR_INSTANCE.nextFloat() - 0.5D) / 2D; + final double dY = XSTR_INSTANCE.nextFloat() * 1.5; + final double dZ = (XSTR_INSTANCE.nextFloat() - 0.5D) / 2D; + + final double x = oX + dX; + final double y = oY + dY; + final double z = oZ + dZ; + + final double mX = dX * 4D; + final double dXZ = Math.sqrt(dX * dX + dZ * dZ); + final double mY = -(dXZ * dY) / 4D; + final double mZ = dZ * 4D; + + particleEventBuilder.setMotion(mX, mY, mZ) + .setPosition(x, y, z) + .run(); + } + } + } + } + + @Override + public int getPollution() { + return 0; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.magicFuels; + } + + @Override + public int getEfficiency() { + return mEfficiency; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + // Restrict input to disenchantable items or enchanted books + return (isDisenchantableItem(aStack) || isEnchantedBook(aStack)); + } + + @Override + public int getCapacity() { + return 16000; + } + + private boolean isDisenchantableItem(ItemStack aStack) { + return ((aStack.isItemEnchanted()) && (aStack.getItem() + .getItemEnchantability() > 0)); + } + + private boolean isEnchantedBook(ItemStack aStack) { + return (aStack.getItem() instanceof ItemEnchantedBook); + } + + private long generateEU() { + long tEU; + + mUsingEssentia = false; + if ((tEU = absorbFromEgg()) > 0) return tEU; + if ((tEU = absorbFromEnderCrystals()) > 0) return tEU; + if ((tEU = absorbFromEnchantedItems()) > 0) return tEU; + if ((tEU = absorbFromVisNet()) > 0) return tEU; + mUsingEssentia = true; + if ((tEU = absorbFromEssentiaContainers()) > 0) return tEU; + return 0; + } + + private long absorbFromEnchantedItems() { + ItemStack tStack = getBaseMetaTileEntity().getStackInSlot(getInputSlot()); + if (tStack == null) return 0; + if (tStack.stackSize == 0) return 0; + if (!(isDisenchantableItem(tStack) || isEnchantedBook(tStack))) return 0; + long tEU = 0; + // Convert enchantments to their EU Value + Map tMap = EnchantmentHelper.getEnchantments(tStack); + for (Map.Entry e : tMap.entrySet()) { + if ((Integer) e.getKey() < Enchantment.enchantmentsList.length) { + Enchantment tEnchantment = Enchantment.enchantmentsList[(Integer) e.getKey()]; + Integer tLevel = (Integer) e.getValue(); + tEU += 1000000L * tLevel / tEnchantment.getMaxLevel() / tEnchantment.getWeight(); + } + } + + ItemStack tOutputStack = GTUtility.copyAmount(1, tStack); + if (tOutputStack != null) { + if (isDisenchantableItem(tOutputStack)) { + tEU = tEU * getEfficiency() / 100; + EnchantmentHelper.setEnchantments(new HashMap<>(), tOutputStack); + } else if (isEnchantedBook(tOutputStack)) { + tOutputStack = new ItemStack(Items.book, 1); + } + } + + // Only consume input when it can store EU and push output + if ((getBaseMetaTileEntity().getStoredEU() + tEU) < getBaseMetaTileEntity().getEUCapacity() + && getBaseMetaTileEntity().addStackToSlot(getOutputSlot(), tOutputStack)) { + decrStackSize(getInputSlot(), 1); + } else { + tEU = 0; + } + return tEU; + } + + private boolean hasEgg() { + Block above = getBaseMetaTileEntity().getBlockOffset(0, 1, 0); + return isEgg(above); + } + + private long absorbFromEgg() { + if (!hasEgg()) return 0; + if (!sAllowMultipleEggs) { + if (sActiveSiphon != null && sActiveSiphon != this + && sActiveSiphon.getBaseMetaTileEntity() != null + && !sActiveSiphon.getBaseMetaTileEntity() + .isInvalidTileEntity() + && sActiveSiphon.isChunkLoaded() + && sActiveSiphon.hasEgg()) { + getBaseMetaTileEntity().doExplosion(Integer.MAX_VALUE); + } else { + setActiveSiphon(this); + } + } + Block egg = getBaseMetaTileEntity().getBlockOffset(0, 1, 0); + if (egg == Blocks.dragon_egg) { + return sDragonEggEnergyPerTick; + } else if (egg.getUnlocalizedName() + .contains("creeperEgg")) { + return sCreeperEggEnergyPerTick; + } + return 0; + } + + private long absorbFromEnderCrystals() { + if (sEnergyPerEndercrystal <= 0) return 0; + long tEU = 0; + for (MTEMagicalEnergyAbsorber tSubscriber : sSubscribedCrystals.values()) { + if (tSubscriber == this) { // This Crystal is for me + tEU += sEnergyPerEndercrystal; + } + } + return tEU; + } + + private long absorbFromVisNet() { + if (!Thaumcraft.isModLoaded()) return 0; + + long tEU; + IGregTechTileEntity tBaseMetaTileEntity = getBaseMetaTileEntity(); + World tWorld = tBaseMetaTileEntity.getWorld(); + int tX = tBaseMetaTileEntity.getXCoord(); + int tY = tBaseMetaTileEntity.getYCoord(); + int tZ = tBaseMetaTileEntity.getZCoord(); + + // Attempt to drain as much Vis as needed for max EU/t, from all primal aspects. + int toDrain = mMaxVisPerDrain; + + for (int i = sPrimalAspects.size() - 1; i >= 0 && toDrain > 0; i--) { + toDrain -= VisNetHandler.drainVis(tWorld, tX, tY, tZ, sPrimalAspects.get(i), toDrain); + } + + int drained = mMaxVisPerDrain - toDrain; + tEU = (long) Math.min(maxEUOutput(), (Math.pow(drained, 2) * sEnergyFromVis * getEfficiency() / 10000)); + + return tEU; + } + + private long absorbFromEssentiaContainers() { + if (!Thaumcraft.isModLoaded()) return 0; + + long tEU = 0; + + long tEUtoGen = getBaseMetaTileEntity().getEUCapacity() - getBaseMetaTileEntity().getUniversalEnergyStored(); + List mAvailableEssentiaAspects = mMagicalEnergyBB.getAvailableAspects(); + + // try to drain 1 of whatever aspect available in containers within RANGE + for (int i = mAvailableEssentiaAspects.size() - 1; i >= 0 && tEUtoGen > 0; i--) { + Aspect aspect = mAvailableEssentiaAspects.get(i); + long tAspectEU = ((long) sAspectsEnergy.get(aspect) * getEfficiency()) / 100; + if (tAspectEU <= tEUtoGen && AspectSourceHelper.drainEssentia( + (TileEntity) getBaseMetaTileEntity(), + aspect, + ForgeDirection.UNKNOWN, + mMagicalEnergyBB.getRange())) { + tEUtoGen -= tAspectEU; + tEU += tAspectEU; + } + } + return tEU; + } + + private boolean isEgg(Block aBlock) { + if (aBlock == null) return false; + if (aBlock == Blocks.air) return false; + if (aBlock == Blocks.dragon_egg) return true; + if (aBlock instanceof BlockDragonEgg) return true; + return (aBlock.getUnlocalizedName() + .equals("tile.dragonEgg")); + } + + private boolean isChunkLoaded() { + IGregTechTileEntity tBaseMetaTileEntity = getBaseMetaTileEntity(); + int tX = tBaseMetaTileEntity.getXCoord(); + int tY = tBaseMetaTileEntity.getYCoord(); + World tWorld = tBaseMetaTileEntity.getWorld(); + Chunk tChunk = tWorld.getChunkFromBlockCoords(tX, tY); + return tChunk.isChunkLoaded; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMagicalEnergyAbsorber(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mMagicalEnergyBBTier", mMagicalEnergyBB.getTier()); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mMagicalEnergyBB.setTier(aNBT.getInteger("mMagicalEnergyBBTier")); + } + + /** + * Handles Bounding Box ranged operations for Magic sources + */ + static class MagicalEnergyBB { + + private final MTEMagicalEnergyAbsorber mAbsorber; + private final MagicalEnergyBBListener mListener; + private final int mDefaultTier; + private int mTier; + private final int mMaxTier; + private final List mLivingCrystalIDs = new ArrayList<>(); + private List mAvailableAspects; + + /** + * @param aAbsorber user and subscriber for updated BB content + * @param aDefaultTier Initial tier value + * @param aMaxTier Maximum allowed tier + */ + MagicalEnergyBB(MTEMagicalEnergyAbsorber aAbsorber, int aDefaultTier, int aMaxTier) { + mAbsorber = aAbsorber; + mListener = aAbsorber; + mMaxTier = Math.max(Math.max(aMaxTier, 0), Math.max(aDefaultTier, 0)); + mDefaultTier = Math.min(aDefaultTier, mMaxTier); + mTier = mDefaultTier; + if (Thaumcraft.isModLoaded()) mAvailableAspects = new ArrayList<>(Aspect.aspects.size()); + } + + int getTier() { + return mTier; + } + + /** + * Set Bounding Box Tier within allowed bounds + * + * @param aTier new tier value + * @return effective new tier + */ + int setTier(int aTier) { + if (aTier >= 0) { + mTier = Math.min(aTier, mMaxTier); + } else { + mTier = 0; + } + return mTier; + } + + int getRange() { + return getRange(mTier); + } + + int getRange(int aTier) { + return 1 << aTier; + } + + int getDefaultTier() { + return mDefaultTier; + } + + int getDefaultRange() { + return getRange(getDefaultTier()); + } + + int getMaxTier() { + return mMaxTier; + } + + int getMaxRange() { + return getRange(getMaxTier()); + } + + private AxisAlignedBB getAxisAlignedBB() { + double tRange = getRange(); + IGregTechTileEntity tBaseMetaTileEntity = mAbsorber.getBaseMetaTileEntity(); + double tX = tBaseMetaTileEntity.getXCoord(); + double tY = tBaseMetaTileEntity.getYCoord(); + double tZ = tBaseMetaTileEntity.getZCoord(); + return AxisAlignedBB + .getBoundingBox(tX - tRange, tY - tRange, tZ - tRange, tX + tRange, tY + tRange, tZ + tRange); + } + + private void scanLivingCrystals() { + World tWorld = mAbsorber.getBaseMetaTileEntity() + .getWorld(); + mLivingCrystalIDs.clear(); + for (EntityEnderCrystal o : tWorld.getEntitiesWithinAABB(EntityEnderCrystal.class, getAxisAlignedBB())) { + if (o.isEntityAlive()) { + mLivingCrystalIDs.add(o.getPersistentID()); + } + } + } + + private void scanAvailableAspects() { + if (!Thaumcraft.isModLoaded()) return; + IGregTechTileEntity tBaseMetaTileEntity = mAbsorber.getBaseMetaTileEntity(); + if (tBaseMetaTileEntity.isInvalidTileEntity()) return; + int tRange = getRange(); + int tY = tBaseMetaTileEntity.getYCoord(); + int tMaxY = tBaseMetaTileEntity.getWorld() + .getHeight() - 1; + // Make sure relative Y range stays between 0 and world max Y + int rYMin = (tY - tRange >= 0) ? -tRange : -(tY); + int rYMax = (((tY + tRange) <= tMaxY) ? tRange : tMaxY - tY); + mAvailableAspects.clear(); + for (int rX = -tRange; rX <= tRange; rX++) { + for (int rZ = -tRange; rZ <= tRange; rZ++) { + // rY < rYMax is not a bug. See: thaumcraft.common.lib.events.EssentiaHandler.getSources() + for (int rY = rYMin; rY < rYMax; rY++) { + TileEntity tTile = tBaseMetaTileEntity.getTileEntityOffset(rX, rY, rZ); + if (tTile instanceof IAspectContainer) { + AspectList tAspectList = ((IAspectContainer) tTile).getAspects(); + if (tAspectList == null || tAspectList.aspects.isEmpty()) continue; + Set tAspects = tAspectList.aspects.keySet(); + mAvailableAspects.addAll(tAspects); + } + } + } + } + } + + /** + * @return List of Living Ender Crystal Entity IDs in range + */ + List getLivingCrystalIDs() { + return mLivingCrystalIDs; + } + + /** + * @return List of drainable Essentia Aspects from containers in range + */ + List getAvailableAspects() { + return mAvailableAspects; + } + + /** + * Scan range for magic sources + */ + void update() { + if (mAbsorber == null) return; + if (mAbsorber.getBaseMetaTileEntity() == null) return; + if (mAbsorber.getBaseMetaTileEntity() + .isInvalidTileEntity()) return; + if (mAbsorber.getBaseMetaTileEntity() + .getWorld() == null) return; + scanLivingCrystals(); + scanAvailableAspects(); + if (mListener != null) { + mListener.onMagicalEnergyBBUpdate(); + } + } + + void increaseTier() { + offsetTier(1); + } + + void decreaseTier() { + offsetTier(-1); + } + + /** + * Change the Bounding Box tier relatively to offset with wrapping at tier limits + * + * @param aOffset relative tier change + */ + void offsetTier(int aOffset) { + int tNumTiers = mMaxTier + 1; + int tTier = (mTier + aOffset + tNumTiers) % tNumTiers; + int tTrueTier = setTier(tTier); + if (tTier != tTrueTier) { + GTLog.out.format("Absorber's BB Tier set to %d was capped to %d", tTier, tTrueTier); + } + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/generators/MTENaquadahReactor.java b/src/main/java/gregtech/common/tileentities/generators/MTENaquadahReactor.java new file mode 100644 index 0000000000..276fdff07c --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/generators/MTENaquadahReactor.java @@ -0,0 +1,200 @@ +package gregtech.common.tileentities.generators; + +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BACK; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BACK_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BACK_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BACK_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BOTTOM_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BOTTOM_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_BOTTOM_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_FRONT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_SIDE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_SIDE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_SIDE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_GLOW; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicGenerator; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; + +public class MTENaquadahReactor extends MTEBasicGenerator { + + private int mEfficiency; + + public MTENaquadahReactor(int aID, String aName, String[] aDescription, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, aDescription); + if (aTier > 8 || aTier < 4) { + new Exception("Tier without Recipe Map!").printStackTrace(); + } + mEfficiency = getBaseEff(); + } + + public MTENaquadahReactor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + if (aTier > 8 || aTier < 4) { + new Exception("Tier without Recipe Map!").printStackTrace(); + } + mEfficiency = getBaseEff(); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + if (side == ForgeDirection.UNKNOWN) return false; + return ((side.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0) + && (side != getBaseMetaTileEntity().getFrontFacing()) + && (side != getBaseMetaTileEntity().getBackFacing()); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTENaquadahReactor(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + RecipeMap ret; + switch (mTier) { + case 4 -> ret = RecipeMaps.smallNaquadahReactorFuels; + case 5 -> ret = RecipeMaps.largeNaquadahReactorFuels; + case 6 -> ret = RecipeMaps.hugeNaquadahReactorFuels; + case 7 -> ret = RecipeMaps.extremeNaquadahReactorFuels; + case 8 -> ret = RecipeMaps.ultraHugeNaquadahReactorFuels; + default -> ret = null; + } + return ret; + } + + @Override + public int getCapacity() { + return getRecipeMap() != null ? getRecipeMap().getBackend() + .getProperties().minFluidInputs > 0 ? 8000 * (mTier + 1) : 0 : 0; + } + + @Override + public int getEfficiency() { + return mEfficiency; + } + + private int getBaseEff() { + return mTier == 4 ? 80 : 100 + (50 * (mTier - 5)); + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], + TextureFactory.of( + TextureFactory.of(NAQUADAH_REACTOR_SOLID_FRONT), + TextureFactory.builder() + .addIcon(NAQUADAH_REACTOR_SOLID_FRONT_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], + TextureFactory.of( + TextureFactory.of(NAQUADAH_REACTOR_SOLID_BACK), + TextureFactory.builder() + .addIcon(NAQUADAH_REACTOR_SOLID_BACK_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], + TextureFactory.of( + TextureFactory.of(NAQUADAH_REACTOR_SOLID_BOTTOM), + TextureFactory.builder() + .addIcon(NAQUADAH_REACTOR_SOLID_BOTTOM_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], + TextureFactory.of( + TextureFactory.of(NAQUADAH_REACTOR_SOLID_TOP), + TextureFactory.builder() + .addIcon(NAQUADAH_REACTOR_SOLID_TOP_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], + TextureFactory.of( + TextureFactory.of(NAQUADAH_REACTOR_SOLID_SIDE), + TextureFactory.builder() + .addIcon(NAQUADAH_REACTOR_SOLID_SIDE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], TextureFactory.of(NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE), + TextureFactory.builder() + .addIcon(NAQUADAH_REACTOR_SOLID_FRONT_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], TextureFactory.of(NAQUADAH_REACTOR_SOLID_BACK_ACTIVE), + TextureFactory.builder() + .addIcon(NAQUADAH_REACTOR_SOLID_BACK_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], + TextureFactory.of(NAQUADAH_REACTOR_SOLID_BOTTOM_ACTIVE), TextureFactory.builder() + .addIcon(NAQUADAH_REACTOR_SOLID_BOTTOM_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], TextureFactory.of(NAQUADAH_REACTOR_SOLID_TOP_ACTIVE), + TextureFactory.builder() + .addIcon(NAQUADAH_REACTOR_SOLID_TOP_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], TextureFactory.of(NAQUADAH_REACTOR_SOLID_SIDE_ACTIVE), + TextureFactory.builder() + .addIcon(NAQUADAH_REACTOR_SOLID_SIDE_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public int getPollution() { + return 0; + } +} diff --git a/src/main/java/gregtech/common/tileentities/generators/MTEPlasmaGenerator.java b/src/main/java/gregtech/common/tileentities/generators/MTEPlasmaGenerator.java new file mode 100644 index 0000000000..2b8dafcbdf --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/generators/MTEPlasmaGenerator.java @@ -0,0 +1,142 @@ +package gregtech.common.tileentities.generators; + +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicGenerator; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; + +public class MTEPlasmaGenerator extends MTEBasicGenerator { + + public int mEfficiency; + + public MTEPlasmaGenerator(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, "Plasma into energy"); + setEfficiency(); + } + + public MTEPlasmaGenerator(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + setEfficiency(); + } + + public MTEPlasmaGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + setEfficiency(); + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS), + OVERLAYS_ENERGY_OUT[mTier] }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS) }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS) }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS) }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS) }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS_YELLOW), + TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) + .glow() + .build(), + OVERLAYS_ENERGY_OUT[mTier] }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS_YELLOW), + TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS_YELLOW), + TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS_YELLOW), + TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], TextureFactory.of(MACHINE_CASING_FUSION_GLASS_YELLOW), + TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) + .glow() + .build() }; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.plasmaFuels; + } + + @Override + public int getEfficiency() { + return this.mEfficiency; + } + + @Override + public int getCapacity() { + return 16000; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPlasmaGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + public void setEfficiency() { + this.mEfficiency = Math.max(10, 10 + Math.min(90, this.mTier * 10)); + } + + @Override + public int getPollution() { + return 0; + } +} diff --git a/src/main/java/gregtech/common/tileentities/generators/MTESteamTurbine.java b/src/main/java/gregtech/common/tileentities/generators/MTESteamTurbine.java new file mode 100644 index 0000000000..bb6138d35a --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/generators/MTESteamTurbine.java @@ -0,0 +1,238 @@ +package gregtech.common.tileentities.generators; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BACK; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BACK_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BACK_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BACK_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BOTTOM_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BOTTOM_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_BOTTOM_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_FRONT; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_FRONT_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_FRONT_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_FRONT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_SIDE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_SIDE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_SIDE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_TOP; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_TOP_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_TOP_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.STEAM_TURBINE_TOP_GLOW; + +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicGenerator; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; + +public class MTESteamTurbine extends MTEBasicGenerator { + + public int mEfficiency; + + public MTESteamTurbine(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + new String[] { "Converts Steam into EU", "Base rate: 2L of Steam -> 1 EU" }); + this.mEfficiency = 6 + this.mTier; + } + + public MTESteamTurbine(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + this.mEfficiency = 6 + this.mTier; + } + + public MTESteamTurbine(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + this.mEfficiency = 6 + this.mTier; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamTurbine(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return null; + } + + @Override + public String[] getDescription() { + String[] desc = new String[mDescriptionArray.length + 2]; + System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); + desc[mDescriptionArray.length] = "Fuel Efficiency: " + (600 / getEfficiency()) + "%"; + desc[mDescriptionArray.length + 1] = String.format( + "Consumes up to %sL of Steam per second", + (int) (4000 * (8 * Math.pow(4, mTier) + Math.pow(2, Math.max(mTier - 1, 0))) / (600 / getEfficiency()))); + return desc; + } + + @Override + public int getCapacity() { + return 24000 * this.mTier; + } + + @Override + public int getEfficiency() { + return this.mEfficiency; + } + + @Override + public long getFuelValue(FluidStack aLiquid, boolean aLong) { + return getFuelValue(aLiquid); + } + + @Override + public int getFuelValue(FluidStack aLiquid) { + if (aLiquid == null) return 0; + return GTModHandler.isAnySteam(aLiquid) ? 3 : 0; + } + + @Override + public int consumedFluidPerOperation(FluidStack aLiquid) { + return this.mEfficiency; + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], + TextureFactory.of( + TextureFactory.of(STEAM_TURBINE_FRONT), + TextureFactory.builder() + .addIcon(STEAM_TURBINE_FRONT_GLOW) + .glow() + .build()), + OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], + TextureFactory.of( + TextureFactory.of(STEAM_TURBINE_BACK), + TextureFactory.builder() + .addIcon(STEAM_TURBINE_BACK_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], + TextureFactory.of( + TextureFactory.of(STEAM_TURBINE_BOTTOM), + TextureFactory.builder() + .addIcon(STEAM_TURBINE_BOTTOM_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], + TextureFactory.of( + TextureFactory.of(STEAM_TURBINE_TOP), + TextureFactory.builder() + .addIcon(STEAM_TURBINE_TOP_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], + TextureFactory.of( + TextureFactory.of(STEAM_TURBINE_SIDE), + TextureFactory.builder() + .addIcon(STEAM_TURBINE_SIDE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(STEAM_TURBINE_FRONT_ACTIVE), + TextureFactory.builder() + .addIcon(STEAM_TURBINE_FRONT_ACTIVE_GLOW) + .glow() + .build()), + OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(STEAM_TURBINE_BACK_ACTIVE), + TextureFactory.builder() + .addIcon(STEAM_TURBINE_BACK_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(STEAM_TURBINE_BOTTOM_ACTIVE), + TextureFactory.builder() + .addIcon(STEAM_TURBINE_BOTTOM_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(STEAM_TURBINE_TOP_ACTIVE), + TextureFactory.builder() + .addIcon(STEAM_TURBINE_TOP_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], + TextureFactory.of( + TextureFactory.of(STEAM_TURBINE_SIDE_ACTIVE), + TextureFactory.builder() + .addIcon(STEAM_TURBINE_SIDE_ACTIVE_GLOW) + .glow() + .build()) }; + } + + @Override + public int getPollution() { + return 0; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + if (GTModHandler.isSuperHeatedSteam(aFluid)) { + aFluid.amount = 0; + aFluid = null; + return false; + } + return super.isFluidInputAllowed(aFluid); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Bronze.java deleted file mode 100644 index 252cc6a5b8..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Bronze.java +++ /dev/null @@ -1,45 +0,0 @@ -package gregtech.common.tileentities.machines; - -import gregtech.api.enums.Dyes; -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_BasicHull_NonElectric; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_BasicHull_Bronze extends GT_MetaTileEntity_BasicHull_NonElectric { - - public GT_MetaTileEntity_BasicHull_Bronze(int aID, String aName, String aNameRegional, int aTier, - String aDescription) { - super(aID, aName, aNameRegional, aTier, aDescription); - } - - public GT_MetaTileEntity_BasicHull_Bronze(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicHull_Bronze(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_BasicHull_Bronze(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[3][17][]; - for (byte i = -1; i < 16; i = (byte) (i + 1)) { - rTextures[0][(i + 1)] = new ITexture[] { - TextureFactory.of(Textures.BlockIcons.MACHINE_BRONZE_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - rTextures[1][(i + 1)] = new ITexture[] { - TextureFactory.of(Textures.BlockIcons.MACHINE_BRONZE_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - rTextures[2][(i + 1)] = new ITexture[] { - TextureFactory.of(Textures.BlockIcons.MACHINE_BRONZE_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - } - return rTextures; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_BronzeBricks.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_BronzeBricks.java deleted file mode 100644 index ee788ba8c0..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_BronzeBricks.java +++ /dev/null @@ -1,53 +0,0 @@ -package gregtech.common.tileentities.machines; - -import gregtech.api.enums.Dyes; -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_BasicHull_NonElectric; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_BasicHull_BronzeBricks extends GT_MetaTileEntity_BasicHull_NonElectric { - - public GT_MetaTileEntity_BasicHull_BronzeBricks(int aID, String aName, String aNameRegional, int aTier, - String aDescription) { - super(aID, aName, aNameRegional, aTier, aDescription); - } - - public GT_MetaTileEntity_BasicHull_BronzeBricks(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicHull_BronzeBricks(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_BasicHull_BronzeBricks( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[3][17][]; - for (byte i = -1; i < 16; i = (byte) (i + 1)) { - ITexture[] tmp0 = { TextureFactory - .of(Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - rTextures[0][(i + 1)] = tmp0; - ITexture[] tmp1 = { TextureFactory - .of(Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - rTextures[1][(i + 1)] = tmp1; - ITexture[] tmp2 = { TextureFactory - .of(Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - rTextures[2][(i + 1)] = tmp2; - } - return rTextures; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Steel.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Steel.java deleted file mode 100644 index 85e461bf47..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_Steel.java +++ /dev/null @@ -1,47 +0,0 @@ -package gregtech.common.tileentities.machines; - -import gregtech.api.enums.Dyes; -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_BasicHull_NonElectric; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_BasicHull_Steel extends GT_MetaTileEntity_BasicHull_NonElectric { - - public GT_MetaTileEntity_BasicHull_Steel(int aID, String aName, String aNameRegional, int aTier, - String aDescription) { - super(aID, aName, aNameRegional, aTier, aDescription); - } - - public GT_MetaTileEntity_BasicHull_Steel(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicHull_Steel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_BasicHull_Steel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[3][17][]; - for (byte i = -1; i < 16; i = (byte) (i + 1)) { - ITexture[] tmp0 = { - TextureFactory.of(Textures.BlockIcons.MACHINE_STEEL_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - rTextures[0][(i + 1)] = tmp0; - ITexture[] tmp1 = { - TextureFactory.of(Textures.BlockIcons.MACHINE_STEEL_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - rTextures[1][(i + 1)] = tmp1; - ITexture[] tmp2 = { - TextureFactory.of(Textures.BlockIcons.MACHINE_STEEL_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - rTextures[2][(i + 1)] = tmp2; - } - return rTextures; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_SteelBricks.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_SteelBricks.java deleted file mode 100644 index cd5f547d22..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_BasicHull_SteelBricks.java +++ /dev/null @@ -1,53 +0,0 @@ -package gregtech.common.tileentities.machines; - -import gregtech.api.enums.Dyes; -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_BasicHull_NonElectric; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_BasicHull_SteelBricks extends GT_MetaTileEntity_BasicHull_NonElectric { - - public GT_MetaTileEntity_BasicHull_SteelBricks(int aID, String aName, String aNameRegional, int aTier, - String aDescription) { - super(aID, aName, aNameRegional, aTier, aDescription); - } - - public GT_MetaTileEntity_BasicHull_SteelBricks(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_BasicHull_SteelBricks(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_BasicHull_SteelBricks( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[3][17][]; - for (byte i = -1; i < 16; i = (byte) (i + 1)) { - ITexture[] tmp0 = { TextureFactory - .of(Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - rTextures[0][(i + 1)] = tmp0; - ITexture[] tmp1 = { TextureFactory - .of(Textures.BlockIcons.MACHINE_STEELBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - rTextures[1][(i + 1)] = tmp1; - ITexture[] tmp2 = { TextureFactory - .of(Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; - rTextures[2][(i + 1)] = tmp2; - } - return rTextures; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_ME.java deleted file mode 100644 index 09f12904d7..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_ME.java +++ /dev/null @@ -1,1040 +0,0 @@ -package gregtech.common.tileentities.machines; - -import static gregtech.api.enums.GT_Values.TIER_COLORS; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_CRAFTING_INPUT_BUFFER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_CRAFTING_INPUT_BUS; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.EnumSet; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.event.ForgeEventFactory; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.ArrayUtils; -import org.jetbrains.annotations.NotNull; - -import com.glodblock.github.common.item.ItemFluidPacket; -import com.google.common.collect.ImmutableList; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import appeng.api.AEApi; -import appeng.api.implementations.ICraftingPatternItem; -import appeng.api.implementations.IPowerChannelState; -import appeng.api.networking.GridFlags; -import appeng.api.networking.IGridNode; -import appeng.api.networking.crafting.ICraftingPatternDetails; -import appeng.api.networking.crafting.ICraftingProvider; -import appeng.api.networking.crafting.ICraftingProviderHelper; -import appeng.api.networking.events.MENetworkCraftingPatternChange; -import appeng.api.networking.security.BaseActionSource; -import appeng.api.networking.security.IActionHost; -import appeng.api.networking.security.MachineSource; -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.data.IAEFluidStack; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.util.AECableType; -import appeng.api.util.DimensionalCoord; -import appeng.api.util.IInterfaceViewable; -import appeng.core.AppEng; -import appeng.core.sync.GuiBridge; -import appeng.helpers.ICustomNameObject; -import appeng.items.misc.ItemEncodedPattern; -import appeng.items.tools.quartz.ToolQuartzCuttingKnife; -import appeng.me.GridAccessException; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.helpers.IGridProxyable; -import appeng.util.IWideReadableNumberConverter; -import appeng.util.Platform; -import appeng.util.ReadableNumberConverter; -import gregtech.GT_Mod; -import gregtech.api.enums.ItemList; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IConfigurationCircuitSupport; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.extensions.ArrayExt; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_Hatch_CraftingInput_ME extends GT_MetaTileEntity_Hatch_InputBus - implements IConfigurationCircuitSupport, IAddGregtechLogo, IAddUIWidgets, IPowerChannelState, ICraftingProvider, - IGridProxyable, IDualInputHatch, ICustomNameObject, IInterfaceViewable { - - // Each pattern slot in the crafting input hatch has its own internal inventory - public static class PatternSlot implements IDualInputInventory { - - public interface SharedItemGetter { - - ItemStack[] getSharedItem(); - } - - private final ItemStack pattern; - private final ICraftingPatternDetails patternDetails; - private final List itemInventory; - private final List fluidInventory; - private final SharedItemGetter sharedItemGetter; - - public PatternSlot(ItemStack pattern, World world, SharedItemGetter getter) { - this.pattern = pattern; - this.patternDetails = ((ICraftingPatternItem) Objects.requireNonNull(pattern.getItem())) - .getPatternForItem(pattern, world); - this.itemInventory = new ArrayList<>(); - this.fluidInventory = new ArrayList<>(); - this.sharedItemGetter = getter; - } - - public PatternSlot(ItemStack pattern, NBTTagCompound nbt, World world, SharedItemGetter getter) { - this.pattern = pattern; - this.patternDetails = ((ICraftingPatternItem) Objects.requireNonNull(pattern.getItem())) - .getPatternForItem(pattern, world); - this.itemInventory = new ArrayList<>(); - this.fluidInventory = new ArrayList<>(); - this.sharedItemGetter = getter; - NBTTagList inv = nbt.getTagList("inventory", Constants.NBT.TAG_COMPOUND); - for (int i = 0; i < inv.tagCount(); i++) { - NBTTagCompound tagItemStack = inv.getCompoundTagAt(i); - ItemStack item = GT_Utility.loadItem(tagItemStack); - if (item != null) { - if (item.stackSize > 0) { - itemInventory.add(item); - } - } else { - GT_Mod.GT_FML_LOGGER.warn( - "An error occurred while loading contents of ME Crafting Input Bus. This item has been voided: " - + tagItemStack); - } - } - NBTTagList fluidInv = nbt.getTagList("fluidInventory", Constants.NBT.TAG_COMPOUND); - for (int i = 0; i < fluidInv.tagCount(); i++) { - NBTTagCompound tagFluidStack = fluidInv.getCompoundTagAt(i); - FluidStack fluid = FluidStack.loadFluidStackFromNBT(tagFluidStack); - if (fluid != null) { - if (fluid.amount > 0) { - fluidInventory.add(fluid); - } - } else { - GT_Mod.GT_FML_LOGGER.warn( - "An error occurred while loading contents of ME Crafting Input Bus. This fluid has been voided: " - + tagFluidStack); - } - } - } - - public boolean hasChanged(ItemStack newPattern, World world) { - return newPattern == null - || (!ItemStack.areItemStacksEqual(pattern, newPattern) && !this.patternDetails.equals( - ((ICraftingPatternItem) Objects.requireNonNull(pattern.getItem())) - .getPatternForItem(newPattern, world))); - } - - public void updateSlotItems() { - for (int i = itemInventory.size() - 1; i >= 0; i--) { - ItemStack itemStack = itemInventory.get(i); - if (itemStack == null || itemStack.stackSize <= 0) { - itemInventory.remove(i); - } - } - } - - public void updateSlotFluids() { - for (int i = fluidInventory.size() - 1; i >= 0; i--) { - FluidStack fluidStack = fluidInventory.get(i); - if (fluidStack == null || fluidStack.amount <= 0) { - fluidInventory.remove(i); - } - } - } - - public boolean isItemEmpty() { - updateSlotItems(); - return itemInventory.isEmpty() && sharedItemGetter.getSharedItem().length == 0; - } - - public boolean isFluidEmpty() { - updateSlotFluids(); - return fluidInventory.isEmpty(); - } - - public boolean isEmpty() { - return isItemEmpty() && isFluidEmpty(); - } - - @Override - public ItemStack[] getItemInputs() { - if (isItemEmpty()) return new ItemStack[0]; - return ArrayUtils.addAll(itemInventory.toArray(new ItemStack[0]), sharedItemGetter.getSharedItem()); - } - - @Override - public FluidStack[] getFluidInputs() { - if (isFluidEmpty()) return new FluidStack[0]; - return fluidInventory.toArray(new FluidStack[0]); - } - - public ICraftingPatternDetails getPatternDetails() { - return patternDetails; - } - - public void refund(AENetworkProxy proxy, BaseActionSource src) throws GridAccessException { - IMEMonitor sg = proxy.getStorage() - .getItemInventory(); - for (ItemStack itemStack : itemInventory) { - if (itemStack == null || itemStack.stackSize == 0) continue; - IAEItemStack rest = Platform.poweredInsert( - proxy.getEnergy(), - sg, - AEApi.instance() - .storage() - .createItemStack(itemStack), - src); - itemStack.stackSize = rest != null && rest.getStackSize() > 0 ? (int) rest.getStackSize() : 0; - } - IMEMonitor fsg = proxy.getStorage() - .getFluidInventory(); - for (FluidStack fluidStack : fluidInventory) { - if (fluidStack == null || fluidStack.amount == 0) continue; - IAEFluidStack rest = Platform.poweredInsert( - proxy.getEnergy(), - fsg, - AEApi.instance() - .storage() - .createFluidStack(fluidStack), - src); - fluidStack.amount = rest != null && rest.getStackSize() > 0 ? (int) rest.getStackSize() : 0; - } - } - - private void insertItem(ItemStack inserted) { - for (ItemStack itemStack : itemInventory) { - if (GT_Utility.areStacksEqual(inserted, itemStack)) { - if (itemStack.stackSize > Integer.MAX_VALUE - inserted.stackSize) { - inserted.stackSize -= Integer.MAX_VALUE - itemStack.stackSize; - itemStack.stackSize = Integer.MAX_VALUE; - } else { - itemStack.stackSize += inserted.stackSize; - return; - } - } - } - if (inserted.stackSize > 0) { - itemInventory.add(inserted); - } - } - - private void insertFluid(FluidStack inserted) { - for (FluidStack fluidStack : fluidInventory) { - if (GT_Utility.areFluidsEqual(inserted, fluidStack)) { - if (fluidStack.amount > Integer.MAX_VALUE - inserted.amount) { - inserted.amount -= Integer.MAX_VALUE - fluidStack.amount; - fluidStack.amount = Integer.MAX_VALUE; - } else { - fluidStack.amount += inserted.amount; - return; - } - } - } - if (inserted.amount > 0) { - fluidInventory.add(inserted); - } - } - - public boolean insertItemsAndFluids(InventoryCrafting inventoryCrafting) { - for (int i = 0; i < inventoryCrafting.getSizeInventory(); ++i) { - ItemStack itemStack = inventoryCrafting.getStackInSlot(i); - if (itemStack == null) continue; - - if (itemStack.getItem() instanceof ItemFluidPacket) { // insert fluid - FluidStack fluidStack = ItemFluidPacket.getFluidStack(itemStack); - if (fluidStack != null) insertFluid(fluidStack); - } else { // insert item - insertItem(itemStack); - } - } - return true; - } - - public NBTTagCompound writeToNBT(NBTTagCompound nbt) { - nbt.setTag("pattern", pattern.writeToNBT(new NBTTagCompound())); - - NBTTagList itemInventoryNbt = new NBTTagList(); - for (ItemStack itemStack : this.itemInventory) { - itemInventoryNbt.appendTag(GT_Utility.saveItem(itemStack)); - } - nbt.setTag("inventory", itemInventoryNbt); - - NBTTagList fluidInventoryNbt = new NBTTagList(); - for (FluidStack fluidStack : fluidInventory) { - fluidInventoryNbt.appendTag(fluidStack.writeToNBT(new NBTTagCompound())); - } - nbt.setTag("fluidInventory", fluidInventoryNbt); - - return nbt; - } - } - - // mInventory is used for storing patterns, circuit and manual slot (typically NC items) - private static final int MAX_PATTERN_COUNT = 4 * 9; - private static final int SLOT_MANUAL_SIZE = 9; - private static final int MAX_INV_COUNT = MAX_PATTERN_COUNT + SLOT_MANUAL_SIZE + 1; - private static final int SLOT_CIRCUIT = MAX_PATTERN_COUNT; - private static final int SLOT_MANUAL_START = SLOT_CIRCUIT + 1; - private static final int MANUAL_SLOT_WINDOW = 10; - private BaseActionSource requestSource = null; - private @Nullable AENetworkProxy gridProxy = null; - - // holds all internal inventories - private PatternSlot[] internalInventory = new PatternSlot[MAX_PATTERN_COUNT]; - - // a hash map for faster lookup of pattern slots, not necessarily all valid. - private Map patternDetailsPatternSlotMap = new HashMap<>(MAX_PATTERN_COUNT); - - private boolean needPatternSync = true; - private boolean justHadNewItems = false; - - private String customName = null; - private boolean supportFluids; - private boolean additionalConnection = false; - - public GT_MetaTileEntity_Hatch_CraftingInput_ME(int aID, String aName, String aNameRegional, - boolean supportFluids) { - super( - aID, - aName, - aNameRegional, - supportFluids ? 11 : 6, - MAX_INV_COUNT, - new String[] { "Advanced item input for Multiblocks", - "Hatch Tier: " + TIER_COLORS[supportFluids ? 11 : 6] + VN[supportFluids ? 11 : 6], - "Processes patterns directly from ME", - supportFluids ? "It supports patterns including fluids" - : "It does not support patterns including fluids", - "Change ME connection behavior by right-clicking with wire cutter" }); - disableSort = true; - this.supportFluids = supportFluids; - } - - public GT_MetaTileEntity_Hatch_CraftingInput_ME(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures, boolean supportFluids) { - super(aName, aTier, MAX_INV_COUNT, aDescription, aTextures); - this.supportFluids = supportFluids; - disableSort = true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_CraftingInput_ME(mName, mTier, mDescriptionArray, mTextures, supportFluids); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return getTexturesInactive(aBaseTexture); - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - TextureFactory.of(supportFluids ? OVERLAY_ME_CRAFTING_INPUT_BUFFER : OVERLAY_ME_CRAFTING_INPUT_BUS) }; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - super.onPostTick(aBaseMetaTileEntity, aTimer); - - if (getBaseMetaTileEntity().isServerSide()) { - if (needPatternSync && aTimer % 10 == 0) { - needPatternSync = !postMEPatternChange(); - } - if (aTimer % 20 == 0) { - getBaseMetaTileEntity().setActive(isActive()); - } - } - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - getProxy().onReady(); - } - - @Override - public IGridNode getGridNode(ForgeDirection dir) { - return getProxy().getNode(); - } - - @Override - public AECableType getCableConnectionType(ForgeDirection forgeDirection) { - return isOutputFacing(forgeDirection) ? AECableType.SMART : AECableType.NONE; - } - - private void updateValidGridProxySides() { - if (additionalConnection) { - getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); - } else { - getProxy().setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); - } - } - - @Override - public void onFacingChange() { - updateValidGridProxySides(); - } - - @Override - public void securityBreak() {} - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - additionalConnection = !additionalConnection; - updateValidGridProxySides(); - aPlayer.addChatComponentMessage( - new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection)); - return true; - } - - @Override - public AENetworkProxy getProxy() { - if (gridProxy == null) { - gridProxy = new AENetworkProxy(this, "proxy", ItemList.Hatch_CraftingInput_Bus_ME.get(1), true); - gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); - updateValidGridProxySides(); - if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner( - getBaseMetaTileEntity().getWorld() - .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); - } - - return this.gridProxy; - } - - @Override - public DimensionalCoord getLocation() { - return new DimensionalCoord( - getBaseMetaTileEntity().getWorld(), - getBaseMetaTileEntity().getXCoord(), - getBaseMetaTileEntity().getYCoord(), - getBaseMetaTileEntity().getZCoord()); - } - - @Override - public int rows() { - return 4; - } - - @Override - public int rowSize() { - return 9; - } - - @Override - public IInventory getPatterns() { - return this; - } - - @Override - public String getName() { - if (hasCustomName()) { - return getCustomName(); - } - StringBuilder name = new StringBuilder(); - if (getCrafterIcon() != null) { - name.append(getCrafterIcon().getDisplayName()); - } else { - name.append(getLocalName()); - } - - if (mInventory[SLOT_CIRCUIT] != null) { - name.append(" - "); - name.append(mInventory[SLOT_CIRCUIT].getItemDamage()); - } - if (mInventory[SLOT_MANUAL_START] != null) { - name.append(" - "); - name.append(mInventory[SLOT_MANUAL_START].getDisplayName()); - } - return name.toString(); - } - - @Override - public TileEntity getTileEntity() { - return (TileEntity) getBaseMetaTileEntity(); - } - - @Override - public boolean shouldDisplay() { - return true; - } - - @Override - public void gridChanged() { - needPatternSync = true; - } - - @Override - public boolean isPowered() { - return getProxy() != null && getProxy().isPowered(); - } - - @Override - public boolean isActive() { - return getProxy() != null && getProxy().isActive(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - - // save internalInventory - NBTTagList internalInventoryNBT = new NBTTagList(); - for (int i = 0; i < internalInventory.length; i++) { - if (internalInventory[i] != null) { - NBTTagCompound internalInventorySlotNBT = new NBTTagCompound(); - internalInventorySlotNBT.setInteger("patternSlot", i); - internalInventorySlotNBT - .setTag("patternSlotNBT", internalInventory[i].writeToNBT(new NBTTagCompound())); - internalInventoryNBT.appendTag(internalInventorySlotNBT); - } - } - aNBT.setTag("internalInventory", internalInventoryNBT); - if (customName != null) aNBT.setString("customName", customName); - aNBT.setBoolean("additionalConnection", additionalConnection); - getProxy().writeToNBT(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - // load internalInventory - NBTTagList internalInventoryNBT = aNBT.getTagList("internalInventory", Constants.NBT.TAG_COMPOUND); - for (int i = 0; i < internalInventoryNBT.tagCount(); i++) { - NBTTagCompound internalInventorySlotNBT = internalInventoryNBT.getCompoundTagAt(i); - int patternSlot = internalInventorySlotNBT.getInteger("patternSlot"); - NBTTagCompound patternSlotNBT = internalInventorySlotNBT.getCompoundTag("patternSlotNBT"); - ItemStack pattern = ItemStack.loadItemStackFromNBT(patternSlotNBT.getCompoundTag("pattern")); - if (pattern != null) { - internalInventory[patternSlot] = new PatternSlot( - pattern, - patternSlotNBT, - getBaseMetaTileEntity().getWorld(), - this::getSharedItems); - } else { - GT_Mod.GT_FML_LOGGER.warn( - "An error occurred while loading contents of ME Crafting Input Bus. This pattern has been voided: " - + patternSlotNBT); - } - } - - // Migrate from 4x8 to 4x9 pattern inventory - int oldPatternCount = 4 * 8; - int oldSlotManual = oldPatternCount + 1; - int oldSlotCircuit = oldPatternCount; - - if (internalInventory[oldSlotManual] == null && mInventory[oldSlotManual] != null) { - mInventory[SLOT_MANUAL_START] = mInventory[oldSlotManual]; - mInventory[oldSlotManual] = null; - } - if (internalInventory[oldSlotCircuit] == null && mInventory[oldSlotCircuit] != null) { - mInventory[SLOT_CIRCUIT] = mInventory[oldSlotCircuit]; - mInventory[oldSlotCircuit] = null; - } - - // reconstruct patternDetailsPatternSlotMap - patternDetailsPatternSlotMap.clear(); - for (PatternSlot patternSlot : internalInventory) { - if (patternSlot != null) { - patternDetailsPatternSlotMap.put(patternSlot.getPatternDetails(), patternSlot); - } - } - - if (aNBT.hasKey("customName")) customName = aNBT.getString("customName"); - additionalConnection = aNBT.getBoolean("additionalConnection"); - - getProxy().readFromNBT(aNBT); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - private String describePattern(ICraftingPatternDetails patternDetails) { - return Arrays.stream(patternDetails.getCondensedOutputs()) - .map( - aeItemStack -> aeItemStack.getItem() - .getItemStackDisplayName(aeItemStack.getItemStack())) - .collect(Collectors.joining(", ")); - } - - @Override - public String[] getInfoData() { - List ret = new ArrayList<>(); - ret.add( - "The bus is " + ((getProxy() != null && getProxy().isActive()) ? EnumChatFormatting.GREEN + "online" - : EnumChatFormatting.RED + "offline" + getAEDiagnostics()) + EnumChatFormatting.RESET); - ret.add("Internal Inventory: "); - int i = 0; - for (PatternSlot slot : internalInventory) { - if (slot == null) continue; - IWideReadableNumberConverter nc = ReadableNumberConverter.INSTANCE; - - i += 1; - ret.add( - "Slot " + i - + " " - + EnumChatFormatting.BLUE - + describePattern(slot.patternDetails) - + EnumChatFormatting.RESET); - Map itemMap = GT_Utility.convertItemListToMap(slot.itemInventory); - for (Map.Entry entry : itemMap.entrySet()) { - ItemStack item = entry.getKey() - .getItemStack(); - long amount = entry.getValue(); - ret.add( - item.getItem() - .getItemStackDisplayName(item) + ": " - + EnumChatFormatting.GOLD - + nc.toWideReadableForm(amount) - + EnumChatFormatting.RESET); - } - Map fluidMap = GT_Utility.convertFluidListToMap(slot.fluidInventory); - for (Map.Entry entry : fluidMap.entrySet()) { - FluidStack fluid = new FluidStack(entry.getKey(), 1); - long amount = entry.getValue(); - ret.add( - fluid.getLocalizedName() + ": " - + EnumChatFormatting.AQUA - + nc.toWideReadableForm(amount) - + EnumChatFormatting.RESET); - } - } - return ret.toArray(new String[0]); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public int getCircuitSlot() { - return SLOT_CIRCUIT; - } - - @Override - public int getCircuitSlotX() { - return 170; - } - - @Override - public int getCircuitSlotY() { - return 64; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public int getGUIWidth() { - return super.getGUIWidth() + 16; - } - - @Override - public void addUIWidgets(ModularWindow.@NotNull Builder builder, UIBuildContext buildContext) { - buildContext.addSyncedWindow(MANUAL_SLOT_WINDOW, this::createSlotManualWindow); - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 9) - .startFromSlot(0) - .endAtSlot(MAX_PATTERN_COUNT - 1) - .phantom(false) - .background(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_PATTERN_ME) - .widgetCreator(slot -> new SlotWidget(slot) { - - @Override - protected ItemStack getItemStackForRendering(Slot slotIn) { - ItemStack stack = slot.getStack(); - if (stack == null || !(stack.getItem() instanceof ItemEncodedPattern patternItem)) { - return stack; - } - ItemStack output = patternItem.getOutput(stack); - return output != null ? output : stack; - } - }.setFilter(itemStack -> itemStack.getItem() instanceof ICraftingPatternItem) - .setChangeListener(() -> onPatternChange(slot.getSlotIndex(), slot.getStack()))) - .build() - .setPos(7, 9)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (clickData.mouseButton == 0) { - widget.getContext() - .openSyncedWindow(MANUAL_SLOT_WINDOW); - } - }) - .setPlayClickSound(true) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE) - .addTooltips(ImmutableList.of("Place manual items")) - .setSize(16, 16) - .setPos(170, 45)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (clickData.mouseButton == 0) { - refundAll(); - } - }) - .setPlayClickSound(true) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_EXPORT) - .addTooltips(ImmutableList.of("Return all internally stored items back to AE")) - .setSize(16, 16) - .setPos(170, 28)); - } - - @Override - public void updateSlots() { - for (int slotId = SLOT_MANUAL_START; slotId < SLOT_MANUAL_START + SLOT_MANUAL_SIZE; ++slotId) { - if (mInventory[slotId] != null && mInventory[slotId].stackSize <= 0) mInventory[slotId] = null; - } - } - - private BaseActionSource getRequest() { - if (requestSource == null) requestSource = new MachineSource((IActionHost) getBaseMetaTileEntity()); - return requestSource; - } - - private void onPatternChange(int index, ItemStack newItem) { - if (!getBaseMetaTileEntity().isServerSide()) return; - - World world = getBaseMetaTileEntity().getWorld(); - - // remove old if applicable - PatternSlot originalPattern = internalInventory[index]; - if (originalPattern != null) { - if (originalPattern.hasChanged(newItem, world)) { - try { - originalPattern.refund(getProxy(), getRequest()); - } catch (GridAccessException ignored) {} - internalInventory[index] = null; - needPatternSync = true; - } else { - return; // nothing has changed - } - } - - // original does not exist or has changed - if (newItem == null || !(newItem.getItem() instanceof ICraftingPatternItem)) return; - - PatternSlot patternSlot = new PatternSlot(newItem, world, this::getSharedItems); - internalInventory[index] = patternSlot; - patternDetailsPatternSlotMap.put(patternSlot.getPatternDetails(), patternSlot); - - needPatternSync = true; - } - - public ItemStack[] getSharedItems() { - ItemStack[] sharedItems = new ItemStack[SLOT_MANUAL_SIZE + 1]; - sharedItems[0] = mInventory[SLOT_CIRCUIT]; - System.arraycopy(mInventory, SLOT_MANUAL_START, sharedItems, 1, SLOT_MANUAL_SIZE); - return ArrayExt.withoutNulls(sharedItems, ItemStack[]::new); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - NBTTagCompound tag = accessor.getNBTData(); - if (tag.hasKey("name")) - currenttip.add(EnumChatFormatting.AQUA + tag.getString("name") + EnumChatFormatting.RESET); - if (tag.hasKey("inventory")) { - NBTTagList inventory = tag.getTagList("inventory", Constants.NBT.TAG_COMPOUND); - for (int i = 0; i < inventory.tagCount(); ++i) { - NBTTagCompound item = inventory.getCompoundTagAt(i); - String name = item.getString("name"); - long amount = item.getLong("amount"); - currenttip.add( - name + ": " - + EnumChatFormatting.GOLD - + ReadableNumberConverter.INSTANCE.toWideReadableForm(amount) - + EnumChatFormatting.RESET); - } - } - super.getWailaBody(itemStack, currenttip, accessor, config); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - - NBTTagList inventory = new NBTTagList(); - HashMap nameToAmount = new HashMap<>(); - for (Iterator it = inventories(); it.hasNext();) { - PatternSlot i = it.next(); - for (ItemStack item : i.itemInventory) { - if (item != null && item.stackSize > 0) { - String name = item.getDisplayName(); - nameToAmount.merge(name, (long) item.stackSize, Long::sum); - } - } - for (FluidStack fluid : i.fluidInventory) { - if (fluid != null && fluid.amount > 0) { - String name = fluid.getLocalizedName(); - nameToAmount.merge(name, (long) fluid.amount, Long::sum); - } - } - } - for (Map.Entry entry : nameToAmount.entrySet()) { - NBTTagCompound item = new NBTTagCompound(); - item.setString("name", entry.getKey()); - item.setLong("amount", entry.getValue()); - inventory.appendTag(item); - } - - tag.setTag("inventory", inventory); - if (!Objects.equals(getName(), getLocalName())) { - tag.setString("name", getName()); - } - super.getWailaNBTData(player, tile, tag, world, x, y, z); - } - - @Override - public void provideCrafting(ICraftingProviderHelper craftingTracker) { - if (!isActive()) return; - - for (PatternSlot slot : internalInventory) { - if (slot == null) continue; - ICraftingPatternDetails details = slot.getPatternDetails(); - if (details == null) { - GT_Mod.GT_FML_LOGGER.warn( - "Found an invalid pattern at " + getBaseMetaTileEntity().getCoords() - + " in dim " - + getBaseMetaTileEntity().getWorld().provider.dimensionId); - continue; - } - craftingTracker.addCraftingOption(this, details); - } - } - - @Override - public boolean pushPattern(ICraftingPatternDetails patternDetails, InventoryCrafting table) { - if (!isActive()) return false; - - if (!supportFluids) { - for (int i = 0; i < table.getSizeInventory(); ++i) { - ItemStack itemStack = table.getStackInSlot(i); - if (itemStack == null) continue; - if (itemStack.getItem() instanceof ItemFluidPacket) return false; - } - } - if (!patternDetailsPatternSlotMap.get(patternDetails) - .insertItemsAndFluids(table)) { - return false; - } - justHadNewItems = true; - return true; - } - - @Override - public boolean isBusy() { - return false; - } - - @Override - public Iterator inventories() { - return Arrays.stream(internalInventory) - .filter(Objects::nonNull) - .iterator(); - } - - @Override - public void onBlockDestroyed() { - refundAll(); - super.onBlockDestroyed(); - } - - private void refundAll() { - for (PatternSlot slot : internalInventory) { - if (slot == null) continue; - try { - slot.refund(getProxy(), getRequest()); - } catch (GridAccessException ignored) {} - } - } - - @Override - public boolean justUpdated() { - boolean ret = justHadNewItems; - justHadNewItems = false; - return ret; - } - - @Override - public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (!(aPlayer instanceof EntityPlayerMP)) return; - - ItemStack dataStick = aPlayer.inventory.getCurrentItem(); - if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) return; - - NBTTagCompound tag = new NBTTagCompound(); - tag.setString("type", "CraftingInputBuffer"); - tag.setInteger("x", aBaseMetaTileEntity.getXCoord()); - tag.setInteger("y", aBaseMetaTileEntity.getYCoord()); - tag.setInteger("z", aBaseMetaTileEntity.getZCoord()); - - dataStick.stackTagCompound = tag; - dataStick.setStackDisplayName( - "Crafting Input Buffer Link Data Stick (" + aBaseMetaTileEntity - .getXCoord() + ", " + aBaseMetaTileEntity.getYCoord() + ", " + aBaseMetaTileEntity.getZCoord() + ")"); - aPlayer.addChatMessage(new ChatComponentText("Saved Link Data to Data Stick")); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - final ItemStack is = aPlayer.inventory.getCurrentItem(); - if (is != null && is.getItem() instanceof ToolQuartzCuttingKnife) { - if (ForgeEventFactory.onItemUseStart(aPlayer, is, 1) <= 0) return false; - IGregTechTileEntity te = getBaseMetaTileEntity(); - aPlayer.openGui( - AppEng.instance(), - GuiBridge.GUI_RENAMER.ordinal() << 5 | (side.ordinal()), - te.getWorld(), - te.getXCoord(), - te.getYCoord(), - te.getZCoord()); - return true; - } - return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - } - - @Override - public ItemStack getCrafterIcon() { - return getMachineCraftingIcon(); - } - - private boolean postMEPatternChange() { - // don't post until it's active - if (!getProxy().isActive()) return false; - try { - getProxy().getGrid() - .postEvent(new MENetworkCraftingPatternChange(this, getProxy().getNode())); - } catch (GridAccessException ignored) { - return false; - } - return true; - } - - protected ModularWindow createSlotManualWindow(final EntityPlayer player) { - final int WIDTH = 68; - final int HEIGHT = 68; - final int PARENT_WIDTH = getGUIWidth(); - final int PARENT_HEIGHT = getGUIHeight(); - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.setDraggable(true); - // make sure the manual window is within the parent window - // otherwise picking up manual items would toss them - // See GuiContainer.java flag1 - builder.setPos( - (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) - .add(Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)))); - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 3) - .startFromSlot(SLOT_MANUAL_START) - .endAtSlot(SLOT_MANUAL_START + SLOT_MANUAL_SIZE - 1) - .phantom(false) - .background(getGUITextureSet().getItemSlot()) - .build() - .setPos(7, 7)); - return builder.build(); - } - - @Override - public void setInventorySlotContents(int aIndex, ItemStack aStack) { - super.setInventorySlotContents(aIndex, aStack); - if (aIndex >= MAX_PATTERN_COUNT) return; - onPatternChange(aIndex, aStack); - needPatternSync = true; - } - - @Override - public String getCustomName() { - return customName; - } - - @Override - public boolean hasCustomName() { - return customName != null; - } - - @Override - public void setCustomName(String name) { - customName = name; - } - - @Override - public Optional getFirstNonEmptyInventory() { - for (PatternSlot slot : internalInventory) { - if (slot != null && !slot.isEmpty()) return Optional.of(slot); - } - return Optional.empty(); - } - - @Override - public boolean supportsFluids() { - return this.supportFluids; - } - - @Override - public List getItemsForHoloGlasses() { - List list = new ArrayList<>(); - for (PatternSlot slot : internalInventory) { - if (slot == null) continue; - - IAEItemStack[] outputs = slot.getPatternDetails() - .getCondensedOutputs(); - list.add(outputs[0].getItemStack()); - } - return list; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_Slave.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_Slave.java deleted file mode 100644 index 6dede1bea5..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_CraftingInput_Slave.java +++ /dev/null @@ -1,262 +0,0 @@ -package gregtech.common.tileentities.machines; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_CRAFTING_INPUT_SLAVE; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Optional; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.ItemList; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.render.TextureFactory; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_Hatch_CraftingInput_Slave extends GT_MetaTileEntity_Hatch_InputBus - implements IDualInputHatch { - - private GT_MetaTileEntity_Hatch_CraftingInput_ME master; // use getMaster() to access - private int masterX, masterY, masterZ; - private boolean masterSet = false; // indicate if values of masterX, masterY, masterZ are valid - - public GT_MetaTileEntity_Hatch_CraftingInput_Slave(int aID, String aName, String aNameRegional) { - super( - aID, - aName, - aNameRegional, - 6, - 0, - new String[] { "Proxy for Crafting Input Buffer/Bus", - "Link with Crafting Input Buffer/Bus using Data Stick to share inventory", - "Left click on the Crafting Input Buffer/Bus, then right click on this block to link them", }); - disableSort = true; - } - - public GT_MetaTileEntity_Hatch_CraftingInput_Slave(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - disableSort = true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_CraftingInput_Slave(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return getTexturesInactive(aBaseTexture); - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_CRAFTING_INPUT_SLAVE) }; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - super.onPostTick(aBaseMetaTileEntity, aTimer); - if (aTimer % 100 == 0 && masterSet && getMaster() == null) { - trySetMasterFromCoord(masterX, masterY, masterZ); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - - if (aNBT.hasKey("master")) { - NBTTagCompound masterNBT = aNBT.getCompoundTag("master"); - masterX = masterNBT.getInteger("x"); - masterY = masterNBT.getInteger("y"); - masterZ = masterNBT.getInteger("z"); - masterSet = true; - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (masterSet) { - NBTTagCompound masterNBT = new NBTTagCompound(); - masterNBT.setInteger("x", masterX); - masterNBT.setInteger("y", masterY); - masterNBT.setInteger("z", masterZ); - aNBT.setTag("master", masterNBT); - } - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - var ret = new ArrayList(); - if (getMaster() != null) { - ret.add( - "This bus is linked to the Crafting Input Buffer at " + masterX - + ", " - + masterY - + ", " - + masterZ - + "."); - ret.addAll(Arrays.asList(getMaster().getInfoData())); - } else ret.add("This bus is not linked to any Crafting Input Buffer."); - return ret.toArray(new String[0]); - } - - public GT_MetaTileEntity_Hatch_CraftingInput_ME getMaster() { - if (master == null) return null; - if (master.getBaseMetaTileEntity() == null) { // master disappeared - master = null; - } - return master; - } - - @Override - public byte getTierForStructure() { - return getMaster() == null ? super.getTierForStructure() : getMaster().getTierForStructure(); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public Iterator inventories() { - return getMaster() != null ? getMaster().inventories() : Collections.emptyIterator(); - } - - @Override - public Optional getFirstNonEmptyInventory() { - return getMaster() != null ? getMaster().getFirstNonEmptyInventory() : Optional.empty(); - } - - @Override - public boolean supportsFluids() { - return getMaster() != null && getMaster().supportsFluids(); - } - - @Override - public boolean justUpdated() { - return getMaster() != null && getMaster().justUpdated(); - } - - public GT_MetaTileEntity_Hatch_CraftingInput_ME trySetMasterFromCoord(int x, int y, int z) { - var tileEntity = getBaseMetaTileEntity().getWorld() - .getTileEntity(x, y, z); - if (tileEntity == null) return null; - if (!(tileEntity instanceof IGregTechTileEntity gtTileEntity)) return null; - var metaTileEntity = gtTileEntity.getMetaTileEntity(); - if (!(metaTileEntity instanceof GT_MetaTileEntity_Hatch_CraftingInput_ME)) return null; - masterX = x; - masterY = y; - masterZ = z; - masterSet = true; - master = (GT_MetaTileEntity_Hatch_CraftingInput_ME) metaTileEntity; - return master; - } - - private boolean tryLinkDataStick(EntityPlayer aPlayer) { - ItemStack dataStick = aPlayer.inventory.getCurrentItem(); - - if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) { - return false; - } - if (!dataStick.hasTagCompound() || !dataStick.stackTagCompound.getString("type") - .equals("CraftingInputBuffer")) { - return false; - } - - NBTTagCompound nbt = dataStick.stackTagCompound; - int x = nbt.getInteger("x"); - int y = nbt.getInteger("y"); - int z = nbt.getInteger("z"); - if (trySetMasterFromCoord(x, y, z) != null) { - aPlayer.addChatMessage(new ChatComponentText("Link successful")); - return true; - } - aPlayer.addChatMessage(new ChatComponentText("Link failed")); - return true; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (!(aPlayer instanceof EntityPlayerMP)) { - return false; - } - if (tryLinkDataStick(aPlayer)) { - return true; - } - var master = getMaster(); - if (master != null) { - return master.onRightclick(master.getBaseMetaTileEntity(), aPlayer); - } - return false; - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - NBTTagCompound tag = accessor.getNBTData(); - currenttip.add((tag.getBoolean("linked") ? "Linked" : "Not linked")); - - if (tag.hasKey("masterX")) { - currenttip.add( - "Bound to " + tag - .getInteger("masterX") + ", " + tag.getInteger("masterY") + ", " + tag.getInteger("masterZ")); - } - - if (tag.hasKey("masterName")) { - currenttip.add(EnumChatFormatting.GOLD + tag.getString("masterName") + EnumChatFormatting.RESET); - } - - super.getWailaBody(itemStack, currenttip, accessor, config); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - - tag.setBoolean("linked", getMaster() != null); - if (masterSet) { - tag.setInteger("masterX", masterX); - tag.setInteger("masterY", masterY); - tag.setInteger("masterZ", masterZ); - } - if (getMaster() != null) tag.setString("masterName", getMaster().getName()); - - super.getWailaNBTData(player, tile, tag, world, x, y, z); - } - - @Override - public List getItemsForHoloGlasses() { - return getMaster() != null ? getMaster().getItemsForHoloGlasses() : null; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java deleted file mode 100644 index 36b20acc55..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_InputBus_ME.java +++ /dev/null @@ -1,887 +0,0 @@ -package gregtech.common.tileentities.machines; - -import static gregtech.api.enums.GT_Values.TIER_COLORS; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_HATCH; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_HATCH_ACTIVE; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.EnumSet; -import java.util.Iterator; -import java.util.List; - -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import appeng.api.config.Actionable; -import appeng.api.config.PowerMultiplier; -import appeng.api.implementations.IPowerChannelState; -import appeng.api.networking.GridFlags; -import appeng.api.networking.security.BaseActionSource; -import appeng.api.networking.security.IActionHost; -import appeng.api.networking.security.MachineSource; -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.util.AECableType; -import appeng.core.localization.WailaText; -import appeng.me.GridAccessException; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.helpers.IGridProxyable; -import appeng.util.item.AEItemStack; -import gregtech.api.enums.ItemList; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IConfigurationCircuitSupport; -import gregtech.api.interfaces.IDataCopyable; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.gui.modularui.widget.AESlotWidget; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_Hatch_InputBus_ME extends GT_MetaTileEntity_Hatch_InputBus - implements IConfigurationCircuitSupport, IRecipeProcessingAwareHatch, IAddGregtechLogo, IAddUIWidgets, - IPowerChannelState, ISmartInputHatch, IDataCopyable { - - private static final int SLOT_COUNT = 16; - public static final String COPIED_DATA_IDENTIFIER = "stockingBus"; - private BaseActionSource requestSource = null; - private @Nullable AENetworkProxy gridProxy = null; - private final ItemStack[] shadowInventory = new ItemStack[SLOT_COUNT]; - private final int[] savedStackSizes = new int[SLOT_COUNT]; - private boolean processingRecipe = false; - private final boolean autoPullAvailable; - private boolean autoPullItemList = false; - private int minAutoPullStackSize = 1; - private int autoPullRefreshTime = 100; - private static final int CONFIG_WINDOW_ID = 10; - private boolean additionalConnection = false; - private boolean justHadNewItems = false; - private boolean expediteRecipeCheck = false; - - public GT_MetaTileEntity_Hatch_InputBus_ME(int aID, boolean autoPullAvailable, String aName, String aNameRegional) { - super( - aID, - aName, - aNameRegional, - autoPullAvailable ? 6 : 3, - SLOT_COUNT * 2 + 2, - getDescriptionArray(autoPullAvailable)); - this.autoPullAvailable = autoPullAvailable; - disableSort = true; - } - - public GT_MetaTileEntity_Hatch_InputBus_ME(String aName, boolean autoPullAvailable, int aTier, - String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, SLOT_COUNT * 2 + 2, aDescription, aTextures); - this.autoPullAvailable = autoPullAvailable; - disableSort = true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_InputBus_ME(mName, autoPullAvailable, mTier, mDescriptionArray, mTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_INPUT_HATCH_ACTIVE) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_INPUT_HATCH) }; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (getBaseMetaTileEntity().isServerSide()) { - if (aTimer % autoPullRefreshTime == 0 && autoPullItemList) { - refreshItemList(); - } - if (aTimer % 20 == 0) { - getBaseMetaTileEntity().setActive(isActive()); - } - } - super.onPostTick(aBaseMetaTileEntity, aTimer); - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - getProxy().onReady(); - } - - @Override - public AECableType getCableConnectionType(ForgeDirection forgeDirection) { - return isOutputFacing(forgeDirection) ? AECableType.SMART : AECableType.NONE; - } - - private void updateValidGridProxySides() { - if (additionalConnection) { - getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); - } else { - getProxy().setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); - } - } - - @Override - public void onFacingChange() { - updateValidGridProxySides(); - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - additionalConnection = !additionalConnection; - updateValidGridProxySides(); - aPlayer.addChatComponentMessage( - new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection)); - return true; - } - - @Override - public AENetworkProxy getProxy() { - if (gridProxy == null) { - if (getBaseMetaTileEntity() instanceof IGridProxyable) { - gridProxy = new AENetworkProxy( - (IGridProxyable) getBaseMetaTileEntity(), - "proxy", - autoPullAvailable ? ItemList.Hatch_Input_Bus_ME_Advanced.get(1) - : ItemList.Hatch_Input_Bus_ME.get(1), - true); - gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); - updateValidGridProxySides(); - if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner( - getBaseMetaTileEntity().getWorld() - .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); - } - } - return this.gridProxy; - } - - @Override - public boolean isPowered() { - return getProxy() != null && getProxy().isPowered(); - } - - @Override - public boolean isActive() { - return getProxy() != null && getProxy().isActive(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - int[] sizes = new int[16]; - for (int i = 0; i < 16; ++i) sizes[i] = mInventory[i + 16] == null ? 0 : mInventory[i + 16].stackSize; - aNBT.setIntArray("sizes", sizes); - aNBT.setBoolean("autoStock", autoPullItemList); - aNBT.setInteger("minAutoPullStackSize", minAutoPullStackSize); - aNBT.setBoolean("additionalConnection", additionalConnection); - aNBT.setBoolean("expediteRecipeCheck", expediteRecipeCheck); - aNBT.setInteger("refreshTime", autoPullRefreshTime); - getProxy().writeToNBT(aNBT); - } - - private void setAutoPullItemList(boolean pullItemList) { - if (!autoPullAvailable) { - return; - } - - autoPullItemList = pullItemList; - if (!autoPullItemList) { - for (int i = 0; i < SLOT_COUNT; i++) { - mInventory[i] = null; - } - } else { - refreshItemList(); - } - updateAllInformationSlots(); - } - - public boolean doFastRecipeCheck() { - return expediteRecipeCheck; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("sizes")) { - int[] sizes = aNBT.getIntArray("sizes"); - if (sizes.length == 16) { - for (int i = 0; i < 16; ++i) { - if (sizes[i] != 0 && mInventory[i] != null) { - ItemStack s = mInventory[i].copy(); - s.stackSize = sizes[i]; - mInventory[i + 16] = s; - } - } - } - } - autoPullItemList = aNBT.getBoolean("autoStock"); - minAutoPullStackSize = aNBT.getInteger("minAutoPullStackSize"); - additionalConnection = aNBT.getBoolean("additionalConnection"); - expediteRecipeCheck = aNBT.getBoolean("expediteRecipeCheck"); - if (aNBT.hasKey("refreshTime")) { - autoPullRefreshTime = aNBT.getInteger("refreshTime"); - } - getProxy().readFromNBT(aNBT); - - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return new String[] { - "The bus is " + ((getProxy() != null && getProxy().isActive()) ? EnumChatFormatting.GREEN + "online" - : EnumChatFormatting.RED + "offline" + getAEDiagnostics()) + EnumChatFormatting.RESET }; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (!autoPullAvailable) { - return; - } - - setAutoPullItemList(!autoPullItemList); - aPlayer.addChatMessage( - new ChatComponentTranslation( - "GT5U.machines.stocking_bus.auto_pull_toggle." + (autoPullItemList ? "enabled" : "disabled"))); - } - - @Override - public void updateSlots() { - if (mInventory[getManualSlot()] != null && mInventory[getManualSlot()].stackSize <= 0) - mInventory[getManualSlot()] = null; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - if (!(aPlayer instanceof EntityPlayerMP)) - return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - ItemStack dataStick = aPlayer.inventory.getCurrentItem(); - if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) - return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - - if (!pasteCopiedData(aPlayer, dataStick.stackTagCompound)) return false; - - updateValidGridProxySides(); - aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.stocking_bus.loaded")); - return true; - } - - @Override - public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (!(aPlayer instanceof EntityPlayerMP)) return; - - ItemStack dataStick = aPlayer.inventory.getCurrentItem(); - if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) return; - - dataStick.stackTagCompound = getCopiedData(aPlayer); - dataStick.setStackDisplayName("Stocking Input Bus Configuration"); - aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.stocking_bus.saved")); - } - - @Override - public String getCopiedDataIdentifier(EntityPlayer player) { - return COPIED_DATA_IDENTIFIER; - } - - @Override - public boolean pasteCopiedData(EntityPlayer player, NBTTagCompound nbt) { - if (nbt == null || !COPIED_DATA_IDENTIFIER.equals(nbt.getString("type"))) return false; - ItemStack circuit = GT_Utility.loadItem(nbt, "circuit"); - if (GT_Utility.isStackInvalid(circuit)) circuit = null; - - if (autoPullAvailable) { - setAutoPullItemList(nbt.getBoolean("autoPull")); - minAutoPullStackSize = nbt.getInteger("minStackSize"); - // Data sticks created before refreshTime was implemented should not cause stocking buses to - // spam divide by zero errors - if (nbt.hasKey("refreshTime")) { - autoPullRefreshTime = nbt.getInteger("refreshTime"); - } - } - - additionalConnection = nbt.getBoolean("additionalConnection"); - if (!autoPullItemList) { - NBTTagList stockingItems = nbt.getTagList("itemsToStock", 10); - for (int i = 0; i < stockingItems.tagCount(); i++) { - this.mInventory[i] = GT_Utility.loadItem(stockingItems.getCompoundTagAt(i)); - } - } - setInventorySlotContents(getCircuitSlot(), circuit); - return true; - } - - @Override - public NBTTagCompound getCopiedData(EntityPlayer player) { - NBTTagCompound tag = new NBTTagCompound(); - tag.setString("type", COPIED_DATA_IDENTIFIER); - tag.setBoolean("autoPull", autoPullItemList); - tag.setInteger("minStackSize", minAutoPullStackSize); - tag.setInteger("refreshTime", autoPullRefreshTime); - tag.setBoolean("additionalConnection", additionalConnection); - tag.setTag("circuit", GT_Utility.saveItem(getStackInSlot(getCircuitSlot()))); - - NBTTagList stockingItems = new NBTTagList(); - - if (!autoPullItemList) { - for (int index = 0; index < SLOT_COUNT; index++) { - stockingItems.appendTag(GT_Utility.saveItem(mInventory[index])); - } - tag.setTag("itemsToStock", stockingItems); - } - return tag; - } - - private int getManualSlot() { - return SLOT_COUNT * 2 + 1; - } - - @Override - public int getCircuitSlot() { - return SLOT_COUNT * 2; - } - - @Override - public int getCircuitSlotX() { - return 80; - } - - @Override - public int getCircuitSlotY() { - return 64; - } - - @Override - public boolean setStackToZeroInsteadOfNull(int aIndex) { - return aIndex != getManualSlot(); - } - - @Override - public boolean justUpdated() { - if (expediteRecipeCheck) { - boolean ret = justHadNewItems; - justHadNewItems = false; - return ret; - } - return false; - } - - public void setRecipeCheck(boolean value) { - expediteRecipeCheck = value; - } - - @Override - public void setInventorySlotContents(int aIndex, ItemStack aStack) { - if (expediteRecipeCheck && aStack != null) { - justHadNewItems = true; - } - super.setInventorySlotContents(aIndex, aStack); - } - - @Override - public ItemStack getStackInSlot(int aIndex) { - if (!processingRecipe) return super.getStackInSlot(aIndex); - if (aIndex < 0 || aIndex > mInventory.length) return null; - if (aIndex >= SLOT_COUNT && aIndex < SLOT_COUNT * 2) - // Display slots - return null; - if (aIndex == getCircuitSlot() || aIndex == getManualSlot()) return mInventory[aIndex]; - if (mInventory[aIndex] != null) { - AENetworkProxy proxy = getProxy(); - if (proxy == null || !proxy.isActive()) { - return null; - } - try { - IMEMonitor sg = proxy.getStorage() - .getItemInventory(); - IAEItemStack request = AEItemStack.create(mInventory[aIndex]); - request.setStackSize(Integer.MAX_VALUE); - IAEItemStack result = sg.extractItems(request, Actionable.SIMULATE, getRequestSource()); - if (result != null) { - this.shadowInventory[aIndex] = result.getItemStack(); - this.savedStackSizes[aIndex] = this.shadowInventory[aIndex].stackSize; - this.setInventorySlotContents(aIndex + SLOT_COUNT, this.shadowInventory[aIndex]); - return this.shadowInventory[aIndex]; - } else { - // Request failed - this.setInventorySlotContents(aIndex + SLOT_COUNT, null); - return null; - } - } catch (final GridAccessException ignored) {} - return null; - } else { - // AE available but no items requested - this.setInventorySlotContents(aIndex + SLOT_COUNT, null); - } - return mInventory[aIndex]; - } - - private BaseActionSource getRequestSource() { - if (requestSource == null) requestSource = new MachineSource((IActionHost) getBaseMetaTileEntity()); - return requestSource; - } - - @Override - public void onExplosion() { - for (int i = 0; i < SLOT_COUNT; i++) { - mInventory[i] = null; - } - } - - @Override - public void startRecipeProcessing() { - processingRecipe = true; - updateAllInformationSlots(); - } - - private void refreshItemList() { - AENetworkProxy proxy = getProxy(); - try { - IMEMonitor sg = proxy.getStorage() - .getItemInventory(); - Iterator iterator = sg.getStorageList() - .iterator(); - int index = 0; - while (iterator.hasNext() && index < SLOT_COUNT) { - IAEItemStack currItem = iterator.next(); - if (currItem.getStackSize() >= minAutoPullStackSize) { - ItemStack itemstack = GT_Utility.copyAmount(1, currItem.getItemStack()); - if (expediteRecipeCheck) { - ItemStack previous = this.mInventory[index]; - if (itemstack != null) { - justHadNewItems = !ItemStack.areItemStacksEqual(itemstack, previous); - } - } - this.mInventory[index] = itemstack; - index++; - } - } - for (int i = index; i < SLOT_COUNT; i++) { - mInventory[i] = null; - } - - } catch (final GridAccessException ignored) {} - } - - private void updateAllInformationSlots() { - for (int index = 0; index < SLOT_COUNT; index++) { - updateInformationSlot(index, mInventory[index]); - } - } - - @Override - public CheckRecipeResult endRecipeProcessing(GT_MetaTileEntity_MultiBlockBase controller) { - CheckRecipeResult checkRecipeResult = CheckRecipeResultRegistry.SUCCESSFUL; - for (int i = 0; i < SLOT_COUNT; ++i) { - if (savedStackSizes[i] != 0) { - ItemStack oldStack = shadowInventory[i]; - if (oldStack == null || oldStack.stackSize < savedStackSizes[i]) { - AENetworkProxy proxy = getProxy(); - try { - IMEMonitor sg = proxy.getStorage() - .getItemInventory(); - IAEItemStack request = AEItemStack.create(mInventory[i]); - int toExtract = savedStackSizes[i] - (oldStack == null ? 0 : oldStack.stackSize); - request.setStackSize(toExtract); - IAEItemStack result = sg.extractItems(request, Actionable.MODULATE, getRequestSource()); - proxy.getEnergy() - .extractAEPower(request.getStackSize(), Actionable.MODULATE, PowerMultiplier.CONFIG); - setInventorySlotContents(i + SLOT_COUNT, oldStack); - if (result == null || result.getStackSize() != toExtract) { - controller.stopMachine(ShutDownReasonRegistry.CRITICAL_NONE); - checkRecipeResult = SimpleCheckRecipeResult - .ofFailurePersistOnShutdown("stocking_bus_fail_extraction"); - } - } catch (final GridAccessException ignored) { - controller.stopMachine(ShutDownReasonRegistry.CRITICAL_NONE); - checkRecipeResult = SimpleCheckRecipeResult - .ofFailurePersistOnShutdown("stocking_hatch_fail_extraction"); - } - } - savedStackSizes[i] = 0; - shadowInventory[i] = null; - if (mInventory[i + SLOT_COUNT] != null && mInventory[i + SLOT_COUNT].stackSize <= 0) { - mInventory[i + SLOT_COUNT] = null; - } - } - } - processingRecipe = false; - return checkRecipeResult; - } - - /** - * Update the right side of the GUI, which shows the amounts of items set on the left side - */ - public ItemStack updateInformationSlot(int aIndex, ItemStack aStack) { - if (aIndex >= 0 && aIndex < SLOT_COUNT) { - if (aStack == null) { - super.setInventorySlotContents(aIndex + SLOT_COUNT, null); - } else { - AENetworkProxy proxy = getProxy(); - if (!proxy.isActive()) { - super.setInventorySlotContents(aIndex + SLOT_COUNT, null); - return null; - } - try { - IMEMonitor sg = proxy.getStorage() - .getItemInventory(); - IAEItemStack request = AEItemStack.create(mInventory[aIndex]); - request.setStackSize(Integer.MAX_VALUE); - IAEItemStack result = sg.extractItems(request, Actionable.SIMULATE, getRequestSource()); - ItemStack s = (result != null) ? result.getItemStack() : null; - // We want to track changes in any ItemStack to notify any connected controllers to make a recipe - // check early - if (expediteRecipeCheck) { - ItemStack previous = getStackInSlot(aIndex + SLOT_COUNT); - if (s != null) { - justHadNewItems = !ItemStack.areItemStacksEqual(s, previous); - } - } - setInventorySlotContents(aIndex + SLOT_COUNT, s); - return s; - } catch (final GridAccessException ignored) {} - } - } - return null; - } - - /** - * Used to avoid slot update. - */ - public ItemStack getShadowItemStack(int index) { - if (index < 0 || index >= shadowInventory.length) { - return null; - } - return shadowInventory[index]; - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex == getManualSlot(); - } - - @Override - public int getGUIHeight() { - return 179; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - final SlotWidget[] aeSlotWidgets = new SlotWidget[16]; - - if (autoPullAvailable) { - buildContext.addSyncedWindow(CONFIG_WINDOW_ID, this::createStackSizeConfigurationWindow); - } - - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 4) - .startFromSlot(0) - .endAtSlot(15) - .phantom(true) - .slotCreator(index -> new BaseSlot(inventoryHandler, index, true) { - - @Override - public boolean isEnabled() { - return !autoPullItemList && super.isEnabled(); - } - }) - .widgetCreator(slot -> (SlotWidget) new SlotWidget(slot) { - - @Override - protected void phantomClick(ClickData clickData, ItemStack cursorStack) { - if (clickData.mouseButton != 0 || !getMcSlot().isEnabled()) return; - final int aSlotIndex = getMcSlot().getSlotIndex(); - if (cursorStack == null) { - getMcSlot().putStack(null); - } else { - if (containsSuchStack(cursorStack)) return; - getMcSlot().putStack(GT_Utility.copyAmount(1, cursorStack)); - } - if (getBaseMetaTileEntity().isServerSide()) { - final ItemStack newInfo = updateInformationSlot(aSlotIndex, cursorStack); - aeSlotWidgets[getMcSlot().getSlotIndex()].getMcSlot() - .putStack(newInfo); - } - } - - @Override - public IDrawable[] getBackground() { - IDrawable slot; - if (autoPullItemList) { - slot = GT_UITextures.SLOT_DARK_GRAY; - } else { - slot = ModularUITextures.ITEM_SLOT; - } - return new IDrawable[] { slot, GT_UITextures.OVERLAY_SLOT_ARROW_ME }; - } - - @Override - public List getExtraTooltip() { - if (autoPullItemList) { - return Collections.singletonList( - StatCollector.translateToLocal("GT5U.machines.stocking_bus.cannot_set_slot")); - } else { - return Collections - .singletonList(StatCollector.translateToLocal("modularui.phantom.single.clear")); - } - } - - private boolean containsSuchStack(ItemStack tStack) { - for (int i = 0; i < 16; ++i) { - if (GT_Utility.areStacksEqual(mInventory[i], tStack, false)) return true; - } - return false; - } - }.dynamicTooltip(() -> { - if (autoPullItemList) { - return Collections.singletonList( - StatCollector.translateToLocal("GT5U.machines.stocking_bus.cannot_set_slot")); - } else { - return Collections.emptyList(); - } - }) - .setUpdateTooltipEveryTick(true)) - .build() - .setPos(7, 9)) - .widget( - SlotGroup.ofItemHandler(inventoryHandler, 4) - .startFromSlot(16) - .endAtSlot(31) - .phantom(true) - .background(GT_UITextures.SLOT_DARK_GRAY) - .widgetCreator( - slot -> aeSlotWidgets[slot.getSlotIndex() - 16] = new AESlotWidget(slot).disableInteraction()) - .build() - .setPos(97, 9)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_DOUBLE) - .setPos(82, 30) - .setSize(12, 12)); - - if (autoPullAvailable) { - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (clickData.mouseButton == 0) { - setAutoPullItemList(!autoPullItemList); - } else if (clickData.mouseButton == 1 && !widget.isClient()) { - widget.getContext() - .openSyncedWindow(CONFIG_WINDOW_ID); - } - }) - .setBackground(() -> { - if (autoPullItemList) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_BUTTON_AUTOPULL_ME }; - } else { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_AUTOPULL_ME_DISABLED }; - } - }) - .addTooltips( - Arrays.asList( - StatCollector.translateToLocal("GT5U.machines.stocking_bus.auto_pull.tooltip.1"), - StatCollector.translateToLocal("GT5U.machines.stocking_bus.auto_pull.tooltip.2"))) - .setSize(16, 16) - .setPos(80, 10)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> autoPullItemList, this::setAutoPullItemList)); - } - - builder.widget(TextWidget.dynamicString(() -> { - boolean isActive = isActive(); - boolean isPowered = isPowered(); - boolean isBooting = isBooting(); - EnumChatFormatting color = (isActive && isPowered) ? EnumChatFormatting.GREEN : EnumChatFormatting.DARK_RED; - return color + WailaText.getPowerState(isActive, isPowered, isBooting); - }) - .setTextAlignment(Alignment.Center) - .setSize(90, 9) - .setPos(43, 84)) - .widget( - new SlotWidget(inventoryHandler, getManualSlot()) - // ghost slots are prioritized over manual slot - .setShiftClickPriority(11) - .setPos(79, 45)); - } - - protected ModularWindow createStackSizeConfigurationWindow(final EntityPlayer player) { - final int WIDTH = 78; - final int HEIGHT = 115; - final int PARENT_WIDTH = getGUIWidth(); - final int PARENT_HEIGHT = getGUIHeight(); - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.setDraggable(true); - builder.setPos( - (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) - .add( - Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) - .add(WIDTH - 3, 0))); - builder.widget( - TextWidget.localised("GT5U.machines.stocking_bus.min_stack_size") - .setPos(3, 2) - .setSize(74, 14)) - .widget( - new NumericWidget().setSetter(val -> minAutoPullStackSize = (int) val) - .setGetter(() -> minAutoPullStackSize) - .setBounds(1, Integer.MAX_VALUE) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(70, 18) - .setPos(3, 18) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)); - builder.widget( - TextWidget.localised("GT5U.machines.stocking_bus.refresh_time") - .setPos(3, 42) - .setSize(74, 14)) - .widget( - new NumericWidget().setSetter(val -> autoPullRefreshTime = (int) val) - .setGetter(() -> autoPullRefreshTime) - .setBounds(1, Integer.MAX_VALUE) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(70, 18) - .setPos(3, 58) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)); - builder.widget( - TextWidget.localised("GT5U.machines.stocking_bus.force_check") - .setPos(3, 88) - .setSize(50, 14)) - .widget( - new CycleButtonWidget().setToggle(() -> expediteRecipeCheck, val -> setRecipeCheck(val)) - .setTextureGetter( - state -> expediteRecipeCheck ? GT_UITextures.OVERLAY_BUTTON_CHECKMARK - : GT_UITextures.OVERLAY_BUTTON_CROSS) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .setPos(53, 87) - .setSize(16, 16) - .addTooltip(StatCollector.translateToLocal("GT5U.machines.stocking_bus.hatch_warning"))); - return builder.build(); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) - .setSize(17, 17) - .setPos(80, 63)); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - if (!autoPullAvailable) { - super.getWailaBody(itemStack, currenttip, accessor, config); - return; - } - - NBTTagCompound tag = accessor.getNBTData(); - boolean autopull = tag.getBoolean("autoPull"); - int minSize = tag.getInteger("minStackSize"); - currenttip.add( - StatCollector.translateToLocal("GT5U.waila.stocking_bus.auto_pull." + (autopull ? "enabled" : "disabled"))); - if (autopull) { - currenttip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.stocking_bus.min_stack_size", - GT_Utility.formatNumbers(minSize))); - } - super.getWailaBody(itemStack, currenttip, accessor, config); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - if (!autoPullAvailable) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - return; - } - - tag.setBoolean("autoPull", autoPullItemList); - tag.setInteger("minStackSize", minAutoPullStackSize); - super.getWailaNBTData(player, tile, tag, world, x, y, z); - } - - private static String[] getDescriptionArray(boolean autoPullAvailable) { - List strings = new ArrayList<>(8); - strings.add("Advanced item input for Multiblocks"); - strings.add("Hatch Tier: " + TIER_COLORS[autoPullAvailable ? 6 : 3] + VN[autoPullAvailable ? 6 : 3]); - strings.add("Retrieves directly from ME"); - strings.add("Keeps 16 item types in stock"); - - if (autoPullAvailable) { - strings.add( - "Auto-Pull from ME mode will automatically stock the first 16 items in the ME system, updated every 5 seconds."); - strings.add("Toggle by right-clicking with screwdriver, or use the GUI."); - strings.add( - "Use the GUI to limit the minimum stack size for Auto-Pulling, adjust the slot refresh timer and enable fast recipe checks."); - strings.add("WARNING: Fast recipe checks can be laggy. Use with caution."); - } - - strings.add("Change ME connection behavior by right-clicking with wire cutter."); - strings.add("Configuration data can be copy+pasted using a data stick."); - return strings.toArray(new String[0]); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java deleted file mode 100644 index d59dbb9ce8..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Input_ME.java +++ /dev/null @@ -1,949 +0,0 @@ -package gregtech.common.tileentities.machines; - -import static gregtech.api.enums.GT_Values.TIER_COLORS; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_FLUID_HATCH; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_FLUID_HATCH_ACTIVE; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.EnumSet; -import java.util.Iterator; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.Interactable; -import com.gtnewhorizons.modularui.common.fluid.FluidStackTank; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import appeng.api.config.Actionable; -import appeng.api.config.PowerMultiplier; -import appeng.api.implementations.IPowerChannelState; -import appeng.api.networking.GridFlags; -import appeng.api.networking.security.BaseActionSource; -import appeng.api.networking.security.IActionHost; -import appeng.api.networking.security.MachineSource; -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.data.IAEFluidStack; -import appeng.api.util.AECableType; -import appeng.core.localization.WailaText; -import appeng.me.GridAccessException; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.helpers.IGridProxyable; -import appeng.util.item.AEFluidStack; -import gregtech.api.enums.ItemList; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IDataCopyable; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_Hatch_Input_ME extends GT_MetaTileEntity_Hatch_Input implements IPowerChannelState, - IAddGregtechLogo, IAddUIWidgets, IRecipeProcessingAwareHatch, ISmartInputHatch, IDataCopyable { - - private static final int SLOT_COUNT = 16; - public static final String COPIED_DATA_IDENTIFIER = "stockingHatch"; - - protected final FluidStack[] storedFluids = new FluidStack[SLOT_COUNT]; - protected final FluidStack[] storedInformationFluids = new FluidStack[SLOT_COUNT]; - - // these two fields should ALWAYS be mutated simultaneously - // in most cases, you should call setSavedFluid() instead of trying to write to the array directly - // a desync of these two fields can lead to catastrophe - protected final FluidStack[] shadowStoredFluids = new FluidStack[SLOT_COUNT]; - private final int[] savedStackSizes = new int[SLOT_COUNT]; - - private boolean additionalConnection = false; - - protected BaseActionSource requestSource = null; - - @Nullable - protected AENetworkProxy gridProxy = null; - - private final boolean autoPullAvailable; - protected boolean autoPullFluidList = false; - protected int minAutoPullAmount = 1; - private int autoPullRefreshTime = 100; - protected boolean processingRecipe = false; - private boolean justHadNewFluids = false; - private boolean expediteRecipeCheck = false; - - protected static final int CONFIG_WINDOW_ID = 10; - - protected static final FluidStack[] EMPTY_FLUID_STACK = new FluidStack[0]; - - public GT_MetaTileEntity_Hatch_Input_ME(int aID, boolean autoPullAvailable, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, autoPullAvailable ? 10 : 8, 1, getDescriptionArray(autoPullAvailable)); - this.autoPullAvailable = autoPullAvailable; - } - - public GT_MetaTileEntity_Hatch_Input_ME(String aName, boolean autoPullAvailable, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, 1, aTier, aDescription, aTextures); - this.autoPullAvailable = autoPullAvailable; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Input_ME(mName, autoPullAvailable, mTier, mDescriptionArray, mTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_INPUT_FLUID_HATCH_ACTIVE) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_INPUT_FLUID_HATCH) }; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (getBaseMetaTileEntity().isServerSide()) { - if (aTimer % autoPullRefreshTime == 0 && autoPullFluidList) { - refreshFluidList(); - } - if (aTimer % 20 == 0) { - getBaseMetaTileEntity().setActive(isActive()); - } - } - super.onPostTick(aBaseMetaTileEntity, aTimer); - } - - private void refreshFluidList() { - AENetworkProxy proxy = getProxy(); - if (proxy == null || !proxy.isActive()) { - return; - } - - try { - IMEMonitor sg = proxy.getStorage() - .getFluidInventory(); - Iterator iterator = sg.getStorageList() - .iterator(); - - int index = 0; - while (iterator.hasNext() && index < SLOT_COUNT) { - IAEFluidStack currItem = iterator.next(); - if (currItem.getStackSize() >= minAutoPullAmount) { - FluidStack fluidStack = GT_Utility.copyAmount(1, currItem.getFluidStack()); - if (expediteRecipeCheck) { - FluidStack previous = storedFluids[index]; - if (fluidStack != null && previous != null) { - justHadNewFluids = !fluidStack.isFluidEqual(previous); - } - } - storedFluids[index] = fluidStack; - index++; - } - } - - for (int i = index; i < SLOT_COUNT; i++) { - storedFluids[i] = null; - } - } catch (final GridAccessException ignored) {} - } - - @Override - public boolean displaysStackSize() { - return true; - } - - protected void setSavedFluid(int i, FluidStack stack) { - shadowStoredFluids[i] = stack; - savedStackSizes[i] = stack == null ? 0 : stack.amount; - } - - public FluidStack[] getStoredFluids() { - if (!processingRecipe) { - return EMPTY_FLUID_STACK; - } - - AENetworkProxy proxy = getProxy(); - if (proxy == null || !proxy.isActive()) { - return EMPTY_FLUID_STACK; - } - - updateAllInformationSlots(); - - for (int i = 0; i < SLOT_COUNT; i++) { - if (storedFluids[i] == null) { - setSavedFluid(i, null); - continue; - } - - FluidStack fluidStackWithAmount = storedInformationFluids[i]; - - setSavedFluid(i, fluidStackWithAmount); - } - - return shadowStoredFluids; - } - - @Override - public boolean justUpdated() { - if (expediteRecipeCheck) { - boolean ret = justHadNewFluids; - justHadNewFluids = false; - return ret; - } - return false; - } - - public void setRecipeCheck(boolean value) { - expediteRecipeCheck = value; - } - - @Override - public FluidStack drain(ForgeDirection side, FluidStack aFluid, boolean doDrain) { - // this is an ME input hatch. allowing draining via logistics would be very wrong (and against - // canTankBeEmptied()) but we do need to support draining from controller, which uses the UNKNOWN direction. - if (side != ForgeDirection.UNKNOWN) return null; - FluidStack stored = getMatchingFluidStack(aFluid); - if (stored == null) return null; - FluidStack drained = GT_Utility.copyAmount(Math.min(stored.amount, aFluid.amount), stored); - if (doDrain) { - stored.amount -= drained.amount; - } - return drained; - } - - @Override - public void startRecipeProcessing() { - processingRecipe = true; - updateAllInformationSlots(); - } - - @Override - public CheckRecipeResult endRecipeProcessing(GT_MetaTileEntity_MultiBlockBase controller) { - CheckRecipeResult checkRecipeResult = CheckRecipeResultRegistry.SUCCESSFUL; - AENetworkProxy proxy = getProxy(); - - for (int i = 0; i < SLOT_COUNT; ++i) { - FluidStack oldStack = shadowStoredFluids[i]; - int toExtract = savedStackSizes[i] - (oldStack != null ? oldStack.amount : 0); - if (toExtract <= 0) continue; - - try { - IMEMonitor sg = proxy.getStorage() - .getFluidInventory(); - - IAEFluidStack request = AEFluidStack.create(storedFluids[i]); - request.setStackSize(toExtract); - IAEFluidStack extractionResult = sg.extractItems(request, Actionable.MODULATE, getRequestSource()); - proxy.getEnergy() - .extractAEPower(toExtract, Actionable.MODULATE, PowerMultiplier.CONFIG); - - if (extractionResult == null || extractionResult.getStackSize() != toExtract) { - controller.stopMachine(ShutDownReasonRegistry.CRITICAL_NONE); - checkRecipeResult = SimpleCheckRecipeResult - .ofFailurePersistOnShutdown("stocking_hatch_fail_extraction"); - } - } catch (GridAccessException ignored) { - controller.stopMachine(ShutDownReasonRegistry.CRITICAL_NONE); - checkRecipeResult = SimpleCheckRecipeResult - .ofFailurePersistOnShutdown("stocking_hatch_fail_extraction"); - } - setSavedFluid(i, null); - if (storedInformationFluids[i] != null && storedInformationFluids[i].amount <= 0) { - storedInformationFluids[i] = null; - } - } - - processingRecipe = false; - return checkRecipeResult; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - getProxy().onReady(); - } - - @Override - public AECableType getCableConnectionType(ForgeDirection forgeDirection) { - return isOutputFacing(forgeDirection) ? AECableType.SMART : AECableType.NONE; - } - - private void updateValidGridProxySides() { - if (additionalConnection) { - getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); - } else { - getProxy().setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); - } - } - - @Override - public void onFacingChange() { - updateValidGridProxySides(); - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - additionalConnection = !additionalConnection; - updateValidGridProxySides(); - aPlayer.addChatComponentMessage( - new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection)); - return true; - } - - @Override - public AENetworkProxy getProxy() { - if (gridProxy == null) { - if (getBaseMetaTileEntity() instanceof IGridProxyable) { - gridProxy = new AENetworkProxy( - (IGridProxyable) getBaseMetaTileEntity(), - "proxy", - autoPullAvailable ? ItemList.Hatch_Input_ME_Advanced.get(1) : ItemList.Hatch_Input_ME.get(1), - true); - gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); - updateValidGridProxySides(); - if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner( - getBaseMetaTileEntity().getWorld() - .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); - } - } - return this.gridProxy; - } - - @Override - public boolean isPowered() { - return getProxy() != null && getProxy().isPowered(); - } - - @Override - public boolean isActive() { - return getProxy() != null && getProxy().isActive(); - } - - private void setAutoPullFluidList(boolean pullFluidList) { - if (!autoPullAvailable) { - return; - } - - autoPullFluidList = pullFluidList; - if (!autoPullFluidList) { - Arrays.fill(storedFluids, null); - } else { - refreshFluidList(); - } - updateAllInformationSlots(); - } - - public boolean doFastRecipeCheck() { - return expediteRecipeCheck; - } - - private void updateAllInformationSlots() { - for (int index = 0; index < SLOT_COUNT; index++) { - updateInformationSlot(index); - } - } - - public void updateInformationSlot(int index) { - if (index < 0 || index >= SLOT_COUNT) { - return; - } - - FluidStack fluidStack = storedFluids[index]; - if (fluidStack == null) { - storedInformationFluids[index] = null; - return; - } - - AENetworkProxy proxy = getProxy(); - if (proxy == null || !proxy.isActive()) { - storedInformationFluids[index] = null; - return; - } - - try { - IMEMonitor sg = proxy.getStorage() - .getFluidInventory(); - IAEFluidStack request = AEFluidStack.create(fluidStack); - request.setStackSize(Integer.MAX_VALUE); - IAEFluidStack result = sg.extractItems(request, Actionable.SIMULATE, getRequestSource()); - FluidStack resultFluid = (result != null) ? result.getFluidStack() : null; - // We want to track if any FluidStack is modified to notify any connected controllers to make a recipe check - // early - if (expediteRecipeCheck) { - FluidStack previous = storedInformationFluids[index]; - if (resultFluid != null) { - justHadNewFluids = !resultFluid.isFluidEqual(previous); - } - } - storedInformationFluids[index] = resultFluid; - } catch (final GridAccessException ignored) {} - } - - private BaseActionSource getRequestSource() { - if (requestSource == null) requestSource = new MachineSource((IActionHost) getBaseMetaTileEntity()); - return requestSource; - } - - public FluidStack getMatchingFluidStack(FluidStack fluidStack) { - if (fluidStack == null) return null; - - AENetworkProxy proxy = getProxy(); - if (proxy == null || !proxy.isActive()) { - return null; - } - - for (int i = 0; i < storedFluids.length; i++) { - if (storedFluids[i] == null) { - continue; - } - - if (GT_Utility.areFluidsEqual(fluidStack, storedFluids[i], false)) { - updateInformationSlot(i); - if (storedInformationFluids[i] != null) { - setSavedFluid(i, storedInformationFluids[i]); - return shadowStoredFluids[i]; - } - - setSavedFluid(i, null); - return null; - } - } - return null; - } - - /** - * Used to avoid slot update. - */ - public FluidStack getShadowFluidStack(int index) { - if (index < 0 || index >= storedFluids.length) { - return null; - } - - return shadowStoredFluids[index]; - } - - public int getFluidSlot(FluidStack fluidStack) { - if (fluidStack == null) return -1; - - for (int i = 0; i < storedFluids.length; i++) { - if (storedFluids[i] == null) { - continue; - } - - if (GT_Utility.areFluidsEqual(fluidStack, storedFluids[i], false)) { - return i; - } - } - - return -1; - } - - @Override - public boolean canTankBeEmptied() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - - NBTTagList nbtTagList = new NBTTagList(); - for (int i = 0; i < SLOT_COUNT; i++) { - FluidStack fluidStack = storedFluids[i]; - if (fluidStack == null) { - continue; - } - NBTTagCompound fluidTag = fluidStack.writeToNBT(new NBTTagCompound()); - if (storedInformationFluids[i] != null) - fluidTag.setInteger("informationAmount", storedInformationFluids[i].amount); - nbtTagList.appendTag(fluidTag); - } - - aNBT.setTag("storedFluids", nbtTagList); - aNBT.setBoolean("autoPull", autoPullFluidList); - aNBT.setInteger("minAmount", minAutoPullAmount); - aNBT.setBoolean("additionalConnection", additionalConnection); - aNBT.setBoolean("expediteRecipeCheck", expediteRecipeCheck); - aNBT.setInteger("refreshTime", autoPullRefreshTime); - getProxy().writeToNBT(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("storedFluids")) { - NBTTagList nbtTagList = aNBT.getTagList("storedFluids", 10); - int c = Math.min(nbtTagList.tagCount(), SLOT_COUNT); - for (int i = 0; i < c; i++) { - NBTTagCompound nbtTagCompound = nbtTagList.getCompoundTagAt(i); - FluidStack fluidStack = GT_Utility.loadFluid(nbtTagCompound); - storedFluids[i] = fluidStack; - - if (nbtTagCompound.hasKey("informationAmount")) { - int informationAmount = nbtTagCompound.getInteger("informationAmount"); - storedInformationFluids[i] = GT_Utility.copyAmount(informationAmount, fluidStack); - } - } - } - - minAutoPullAmount = aNBT.getInteger("minAmount"); - autoPullFluidList = aNBT.getBoolean("autoPull"); - additionalConnection = aNBT.getBoolean("additionalConnection"); - expediteRecipeCheck = aNBT.getBoolean("expediteRecipeCheck"); - if (aNBT.hasKey("refreshTime")) { - autoPullRefreshTime = aNBT.getInteger("refreshTime"); - } - getProxy().readFromNBT(aNBT); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (!autoPullAvailable) { - return; - } - - setAutoPullFluidList(!autoPullFluidList); - aPlayer.addChatMessage( - new ChatComponentTranslation( - "GT5U.machines.stocking_hatch.auto_pull_toggle." + (autoPullFluidList ? "enabled" : "disabled"))); - } - - @Override - public String getCopiedDataIdentifier(EntityPlayer player) { - return COPIED_DATA_IDENTIFIER; - } - - @Override - public boolean pasteCopiedData(EntityPlayer player, NBTTagCompound nbt) { - if (nbt == null || !COPIED_DATA_IDENTIFIER.equals(nbt.getString("type"))) return false; - - if (autoPullAvailable) { - setAutoPullFluidList(nbt.getBoolean("autoPull")); - minAutoPullAmount = nbt.getInteger("minAmount"); - autoPullRefreshTime = nbt.getInteger("refreshTime"); - } - additionalConnection = nbt.getBoolean("additionalConnection"); - - if (!autoPullFluidList) { - NBTTagList stockingFluids = nbt.getTagList("fluidsToStock", 10); - for (int i = 0; i < stockingFluids.tagCount(); i++) { - storedFluids[i] = GT_Utility.loadFluid(stockingFluids.getCompoundTagAt(i)); - } - } - return true; - } - - @Override - public NBTTagCompound getCopiedData(EntityPlayer player) { - NBTTagCompound tag = new NBTTagCompound(); - tag.setString("type", COPIED_DATA_IDENTIFIER); - tag.setBoolean("autoPull", autoPullFluidList); - tag.setInteger("minAmount", minAutoPullAmount); - tag.setBoolean("additionalConnection", additionalConnection); - tag.setInteger("refreshTime", autoPullRefreshTime); - - NBTTagList stockingFluids = new NBTTagList(); - if (!autoPullFluidList) { - for (int index = 0; index < SLOT_COUNT; index++) { - FluidStack fluidStack = storedFluids[index]; - if (fluidStack == null) { - continue; - } - stockingFluids.appendTag(fluidStack.writeToNBT(new NBTTagCompound())); - } - tag.setTag("fluidsToStock", stockingFluids); - } - return tag; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - if (!(aPlayer instanceof EntityPlayerMP)) - return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - ItemStack dataStick = aPlayer.inventory.getCurrentItem(); - if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) - return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - - if (!pasteCopiedData(aPlayer, dataStick.stackTagCompound)) return false; - - updateValidGridProxySides(); - aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.stocking_bus.loaded")); - return true; - } - - @Override - public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (!(aPlayer instanceof EntityPlayerMP)) return; - - ItemStack dataStick = aPlayer.inventory.getCurrentItem(); - if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) return; - - dataStick.stackTagCompound = getCopiedData(aPlayer); - dataStick.setStackDisplayName("Stocking Input Hatch Configuration"); - aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.stocking_bus.saved")); - } - - @Override - public void onExplosion() { - for (int i = 0; i < SLOT_COUNT; i++) { - mInventory[i] = null; - } - } - - public boolean containsSuchStack(FluidStack tStack) { - for (int i = 0; i < 16; ++i) { - if (GT_Utility.areFluidsEqual(storedFluids[i], tStack, false)) { - return true; - } - } - return false; - } - - @Override - public int getGUIHeight() { - return 179; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - if (autoPullAvailable) { - buildContext.addSyncedWindow(CONFIG_WINDOW_ID, this::createStackSizeConfigurationWindow); - } - - builder.widget( - SlotGroup.ofFluidTanks( - IntStream.range(0, SLOT_COUNT) - .mapToObj(index -> createTankForFluidStack(storedFluids, index, 1)) - .collect(Collectors.toList()), - 4) - .phantom(true) - .widgetCreator((slotIndex, h) -> (FluidSlotWidget) new FluidSlotWidget(h) { - - @Override - protected void tryClickPhantom(ClickData clickData, ItemStack cursorStack) { - if (clickData.mouseButton != 0 || autoPullFluidList) return; - - FluidStack heldFluid = getFluidForPhantomItem(cursorStack); - if (cursorStack == null) { - storedFluids[slotIndex] = null; - } else { - if (containsSuchStack(heldFluid)) return; - storedFluids[slotIndex] = heldFluid; - } - if (getBaseMetaTileEntity().isServerSide()) { - updateInformationSlot(slotIndex); - detectAndSendChanges(false); - } - } - - @Override - protected void tryScrollPhantom(int direction) {} - - @Override - public IDrawable[] getBackground() { - IDrawable slot; - if (autoPullFluidList) { - slot = GT_UITextures.SLOT_DARK_GRAY; - } else { - slot = ModularUITextures.FLUID_SLOT; - } - return new IDrawable[] { slot, GT_UITextures.OVERLAY_SLOT_ARROW_ME }; - } - - @Override - public void buildTooltip(List tooltip) { - FluidStack fluid = getContent(); - if (fluid != null) { - addFluidNameInfo(tooltip, fluid); - - if (!autoPullFluidList) { - tooltip.add(Text.localised("modularui.phantom.single.clear")); - } - } else { - tooltip.add( - Text.localised("modularui.fluid.empty") - .format(EnumChatFormatting.WHITE)); - } - - if (autoPullFluidList) { - tooltip.add(Text.localised("GT5U.machines.stocking_bus.cannot_set_slot")); - } - } - }.setUpdateTooltipEveryTick(true)) - .build() - .setPos(new Pos2d(7, 9))); - - builder.widget( - SlotGroup.ofFluidTanks( - IntStream.range(0, SLOT_COUNT) - .mapToObj(index -> createTankForFluidStack(storedInformationFluids, index, Integer.MAX_VALUE)) - .collect(Collectors.toList()), - 4) - .phantom(true) - .widgetCreator((slotIndex, h) -> (FluidSlotWidget) new FluidSlotWidget(h) { - - @Override - protected void tryClickPhantom(ClickData clickData, ItemStack cursorStack) {} - - @Override - protected void tryScrollPhantom(int direction) {} - - @Override - public void buildTooltip(List tooltip) { - FluidStack fluid = getContent(); - if (fluid != null) { - addFluidNameInfo(tooltip, fluid); - tooltip.add(Text.localised("modularui.fluid.phantom.amount", fluid.amount)); - addAdditionalFluidInfo(tooltip, fluid); - if (!Interactable.hasShiftDown()) { - tooltip.add(Text.EMPTY); - tooltip.add(Text.localised("modularui.tooltip.shift")); - } - } else { - tooltip.add( - Text.localised("modularui.fluid.empty") - .format(EnumChatFormatting.WHITE)); - } - } - }.setUpdateTooltipEveryTick(true)) - .background(GT_UITextures.SLOT_DARK_GRAY) - .controlsAmount(true) - .build() - .setPos(new Pos2d(97, 9))); - - if (autoPullAvailable) { - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (clickData.mouseButton == 0) { - setAutoPullFluidList(!autoPullFluidList); - } else if (clickData.mouseButton == 1 && !widget.isClient()) { - widget.getContext() - .openSyncedWindow(CONFIG_WINDOW_ID); - } - }) - .setPlayClickSound(true) - .setBackground(() -> { - if (autoPullFluidList) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_BUTTON_AUTOPULL_ME }; - } else { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_AUTOPULL_ME_DISABLED }; - } - }) - .addTooltips( - Arrays.asList( - StatCollector.translateToLocal("GT5U.machines.stocking_hatch.auto_pull.tooltip.1"), - StatCollector.translateToLocal("GT5U.machines.stocking_hatch.auto_pull.tooltip.2"))) - .setSize(16, 16) - .setPos(80, 10)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> autoPullFluidList, this::setAutoPullFluidList)); - } - - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_ARROW_DOUBLE) - .setPos(82, 30) - .setSize(12, 12)) - .widget(TextWidget.dynamicString(() -> { - boolean isActive = isActive(); - boolean isPowered = isPowered(); - boolean isBooting = isBooting(); - EnumChatFormatting color = (isActive && isPowered) ? EnumChatFormatting.GREEN - : EnumChatFormatting.DARK_RED; - return color + WailaText.getPowerState(isActive, isPowered, isBooting); - }) - .setTextAlignment(Alignment.Center) - .setSize(90, 9) - .setPos(43, 84)); - } - - private FluidStackTank createTankForFluidStack(FluidStack[] fluidStacks, int slotIndex, int capacity) { - return new FluidStackTank(() -> fluidStacks[slotIndex], (stack) -> { - if (getBaseMetaTileEntity().isServerSide()) { - return; - } - - fluidStacks[slotIndex] = stack; - }, capacity); - } - - protected ModularWindow createStackSizeConfigurationWindow(final EntityPlayer player) { - final int WIDTH = 78; - final int HEIGHT = 115; - final int PARENT_WIDTH = getGUIWidth(); - final int PARENT_HEIGHT = getGUIHeight(); - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.setDraggable(true); - builder.setPos( - (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) - .add( - Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) - .add(WIDTH - 3, 0))); - builder.widget( - TextWidget.localised("GT5U.machines.stocking_hatch.min_amount") - .setPos(3, 2) - .setSize(74, 14)) - .widget( - new NumericWidget().setSetter(val -> minAutoPullAmount = (int) val) - .setGetter(() -> minAutoPullAmount) - .setBounds(1, Integer.MAX_VALUE) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(70, 18) - .setPos(3, 18) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)); - builder.widget( - TextWidget.localised("GT5U.machines.stocking_bus.refresh_time") - .setPos(3, 42) - .setSize(74, 14)) - .widget( - new NumericWidget().setSetter(val -> autoPullRefreshTime = (int) val) - .setGetter(() -> autoPullRefreshTime) - .setBounds(1, Integer.MAX_VALUE) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(70, 18) - .setPos(3, 58) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD)); - builder.widget( - TextWidget.localised("GT5U.machines.stocking_bus.force_check") - .setPos(3, 88) - .setSize(50, 14)) - .widget( - new CycleButtonWidget().setToggle(() -> expediteRecipeCheck, val -> setRecipeCheck(val)) - .setTextureGetter( - state -> expediteRecipeCheck ? GT_UITextures.OVERLAY_BUTTON_CHECKMARK - : GT_UITextures.OVERLAY_BUTTON_CROSS) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .setPos(53, 87) - .setSize(16, 16) - .addTooltip(StatCollector.translateToLocal("GT5U.machines.stocking_bus.hatch_warning"))); - return builder.build(); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) - .setSize(17, 17) - .setPos(80, 63)); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - if (!autoPullAvailable) { - super.getWailaBody(itemStack, currenttip, accessor, config); - return; - } - - NBTTagCompound tag = accessor.getNBTData(); - boolean autopull = tag.getBoolean("autoPull"); - int minSize = tag.getInteger("minAmount"); - currenttip.add( - StatCollector.translateToLocal("GT5U.waila.stocking_bus.auto_pull." + (autopull ? "enabled" : "disabled"))); - if (autopull) { - currenttip.add( - StatCollector.translateToLocalFormatted( - "GT5U.waila.stocking_hatch.min_amount", - GT_Utility.formatNumbers(minSize))); - } - super.getWailaBody(itemStack, currenttip, accessor, config); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - if (!autoPullAvailable) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - return; - } - - tag.setBoolean("autoPull", autoPullFluidList); - tag.setInteger("minAmount", minAutoPullAmount); - super.getWailaNBTData(player, tile, tag, world, x, y, z); - } - - private static String[] getDescriptionArray(boolean autoPullAvailable) { - List strings = new ArrayList<>(8); - strings.add("Advanced fluid input for Multiblocks"); - strings.add("Hatch Tier: " + TIER_COLORS[autoPullAvailable ? 10 : 8] + VN[autoPullAvailable ? 10 : 8]); - strings.add("Retrieves directly from ME"); - strings.add("Keeps 16 fluid types in stock"); - - if (autoPullAvailable) { - strings.add( - "Auto-Pull from ME mode will automatically stock the first 16 fluid in the ME system, updated every 5 seconds."); - strings.add("Toggle by right-clicking with screwdriver, or use the GUI."); - strings.add( - "Use the GUI to limit the minimum stack size for Auto-Pulling, adjust the slot refresh timer and enable fast recipe checks."); - strings.add("WARNING: Fast recipe checks can be laggy. Use with caution."); - } - - strings.add("Change ME connection behavior by right-clicking with wire cutter."); - strings.add("Configuration data can be copy+pasted using a data stick."); - return strings.toArray(new String[0]); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java deleted file mode 100644 index f4d78ec9b3..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java +++ /dev/null @@ -1,380 +0,0 @@ -package gregtech.common.tileentities.machines; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_HATCH; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_HATCH_ACTIVE; - -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.List; - -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; - -import appeng.api.AEApi; -import appeng.api.implementations.IPowerChannelState; -import appeng.api.networking.GridFlags; -import appeng.api.networking.security.BaseActionSource; -import appeng.api.networking.security.IActionHost; -import appeng.api.networking.security.MachineSource; -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IItemList; -import appeng.api.util.AECableType; -import appeng.items.storage.ItemBasicStorageCell; -import appeng.me.GridAccessException; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.helpers.IGridProxyable; -import appeng.util.IWideReadableNumberConverter; -import appeng.util.Platform; -import appeng.util.ReadableNumberConverter; -import gregtech.GT_Mod; -import gregtech.api.enums.ItemList; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatch_OutputBus - implements IPowerChannelState { - - private long baseCapacity = 1_600; - - private BaseActionSource requestSource = null; - private @Nullable AENetworkProxy gridProxy = null; - final IItemList itemCache = AEApi.instance() - .storage() - .createItemList(); - long lastOutputTick = 0; - long lastInputTick = 0; - long tickCounter = 0; - boolean additionalConnection = false; - - public GT_MetaTileEntity_Hatch_OutputBus_ME(int aID, String aName, String aNameRegional) { - super( - aID, - aName, - aNameRegional, - 3, - new String[] { "Item Output for Multiblocks", "Stores directly into ME", "Can cache 1600 items by default", - "Change cache size by inserting a storage cell", - "Change ME connection behavior by right-clicking with wire cutter" }, - 1); - } - - public GT_MetaTileEntity_Hatch_OutputBus_ME(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_OutputBus_ME(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_HATCH_ACTIVE) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_HATCH) }; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - getProxy().onReady(); - } - - @Override - public boolean storeAll(ItemStack aStack) { - aStack.stackSize = store(aStack); - return aStack.stackSize == 0; - } - - private long getCachedAmount() { - long itemAmount = 0; - for (IAEItemStack item : itemCache) { - itemAmount += item.getStackSize(); - } - return itemAmount; - } - - private long getCacheCapacity() { - ItemStack upgradeItemStack = mInventory[0]; - if (upgradeItemStack != null && upgradeItemStack.getItem() instanceof ItemBasicStorageCell) { - return ((ItemBasicStorageCell) upgradeItemStack.getItem()).getBytesLong(upgradeItemStack) * 8; - } - return baseCapacity; - } - - /** - * Check if the internal cache can still fit more items in it - */ - public boolean canAcceptItem() { - if (getCachedAmount() < getCacheCapacity()) { - return true; - } - return false; - } - - /** - * Attempt to store items in connected ME network. Returns how many items did not fit (if the network was down e.g.) - * - * @param stack input stack - * @return amount of items left over - */ - public int store(final ItemStack stack) { - // Always allow insertion on the same tick so we can output the entire recipe - if (canAcceptItem() || (lastInputTick == tickCounter)) { - itemCache.add( - AEApi.instance() - .storage() - .createItemStack(stack)); - lastInputTick = tickCounter; - return 0; - } - return stack.stackSize; - } - - private BaseActionSource getRequest() { - if (requestSource == null) requestSource = new MachineSource((IActionHost) getBaseMetaTileEntity()); - return requestSource; - } - - @Override - public AECableType getCableConnectionType(ForgeDirection forgeDirection) { - return isOutputFacing(forgeDirection) ? AECableType.SMART : AECableType.NONE; - } - - private void updateValidGridProxySides() { - if (additionalConnection) { - getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); - } else { - getProxy().setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); - } - } - - @Override - public void onFacingChange() { - updateValidGridProxySides(); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) - .isGUIClickable()) return; - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - additionalConnection = !additionalConnection; - updateValidGridProxySides(); - aPlayer.addChatComponentMessage( - new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection)); - return true; - } - - @Override - public AENetworkProxy getProxy() { - if (gridProxy == null) { - if (getBaseMetaTileEntity() instanceof IGridProxyable) { - gridProxy = new AENetworkProxy( - (IGridProxyable) getBaseMetaTileEntity(), - "proxy", - ItemList.Hatch_Output_Bus_ME.get(1), - true); - gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); - updateValidGridProxySides(); - if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner( - getBaseMetaTileEntity().getWorld() - .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); - } - } - return this.gridProxy; - } - - private void flushCachedStack() { - AENetworkProxy proxy = getProxy(); - if (proxy == null) { - return; - } - try { - IMEMonitor sg = proxy.getStorage() - .getItemInventory(); - for (IAEItemStack s : itemCache) { - if (s.getStackSize() == 0) continue; - IAEItemStack rest = Platform.poweredInsert(proxy.getEnergy(), sg, s, getRequest()); - if (rest != null && rest.getStackSize() > 0) { - s.setStackSize(rest.getStackSize()); - break; - } - s.setStackSize(0); - } - } catch (final GridAccessException ignored) { - - } - lastOutputTick = tickCounter; - } - - @Override - public boolean isPowered() { - return getProxy() != null && getProxy().isPowered(); - } - - @Override - public boolean isActive() { - return getProxy() != null && getProxy().isActive(); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (getBaseMetaTileEntity().isServerSide()) { - tickCounter = aTick; - if (tickCounter > (lastOutputTick + 40)) flushCachedStack(); - if (tickCounter % 20 == 0) getBaseMetaTileEntity().setActive(isActive()); - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { - - if (stack.hasTagCompound() && stack.stackTagCompound.hasKey("baseCapacity")) { - tooltip.add( - "Current cache capacity: " + EnumChatFormatting.YELLOW - + ReadableNumberConverter.INSTANCE - .toWideReadableForm(stack.stackTagCompound.getLong("baseCapacity"))); - } - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - super.setItemNBT(aNBT); - aNBT.setLong("baseCapacity", baseCapacity); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - - NBTTagList items = new NBTTagList(); - for (IAEItemStack s : itemCache) { - if (s.getStackSize() == 0) continue; - NBTTagCompound tag = new NBTTagCompound(); - tag.setTag("itemStack", GT_Utility.saveItem(s.getItemStack())); - tag.setLong("size", s.getStackSize()); - items.appendTag(tag); - } - aNBT.setBoolean("additionalConnection", additionalConnection); - aNBT.setTag("cachedItems", items); - aNBT.setLong("baseCapacity", baseCapacity); - getProxy().writeToNBT(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - - NBTBase t = aNBT.getTag("cachedStack"); // legacy - if (t instanceof NBTTagCompound) itemCache.add( - AEApi.instance() - .storage() - .createItemStack(GT_Utility.loadItem((NBTTagCompound) t))); - t = aNBT.getTag("cachedItems"); - if (t instanceof NBTTagList l) { - for (int i = 0; i < l.tagCount(); ++i) { - NBTTagCompound tag = l.getCompoundTagAt(i); - if (!tag.hasKey("itemStack")) { // legacy #868 - itemCache.add( - AEApi.instance() - .storage() - .createItemStack(GT_Utility.loadItem(l.getCompoundTagAt(i)))); - continue; - } - NBTTagCompound tagItemStack = tag.getCompoundTag("itemStack"); - final IAEItemStack s = AEApi.instance() - .storage() - .createItemStack(GT_Utility.loadItem(tagItemStack)); - if (s != null) { - s.setStackSize(tag.getLong("size")); - itemCache.add(s); - } else { - GT_Mod.GT_FML_LOGGER.warn( - "An error occurred while loading contents of ME Output Bus. This item has been voided: " - + tagItemStack); - } - } - } - additionalConnection = aNBT.getBoolean("additionalConnection"); - baseCapacity = aNBT.getLong("baseCapacity"); - // Set the base capacity of existing hatches to be infinite - if (baseCapacity == 0) { - baseCapacity = Long.MAX_VALUE; - } - getProxy().readFromNBT(aNBT); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - List ss = new ArrayList<>(); - ss.add( - "The bus is " + ((getProxy() != null && getProxy().isActive()) ? EnumChatFormatting.GREEN + "online" - : EnumChatFormatting.RED + "offline" + getAEDiagnostics()) + EnumChatFormatting.RESET); - IWideReadableNumberConverter nc = ReadableNumberConverter.INSTANCE; - ss.add("Item cache capacity: " + nc.toWideReadableForm(getCacheCapacity())); - if (itemCache.isEmpty()) { - ss.add("The bus has no cached items"); - } else { - ss.add(String.format("The bus contains %d cached stacks: ", itemCache.size())); - int counter = 0; - for (IAEItemStack s : itemCache) { - ss.add( - s.getItem() - .getItemStackDisplayName(s.getItemStack()) + ": " - + EnumChatFormatting.GOLD - + nc.toWideReadableForm(s.getStackSize()) - + EnumChatFormatting.RESET); - if (++counter > 100) break; - } - } - return ss.toArray(new String[itemCache.size() + 2]); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - getBaseMetaTileEntity().add1by1Slot(builder); - } - - @Override - public boolean acceptsItemLock() { - return false; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java deleted file mode 100644 index b173987aa2..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java +++ /dev/null @@ -1,443 +0,0 @@ -package gregtech.common.tileentities.machines; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_FLUID_HATCH; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_FLUID_HATCH_ACTIVE; - -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.List; - -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.glodblock.github.common.item.FCBaseItemCell; -import com.glodblock.github.common.storage.IStorageFluidCell; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; - -import appeng.api.AEApi; -import appeng.api.config.Actionable; -import appeng.api.config.PowerMultiplier; -import appeng.api.implementations.IPowerChannelState; -import appeng.api.networking.GridFlags; -import appeng.api.networking.energy.IEnergySource; -import appeng.api.networking.security.BaseActionSource; -import appeng.api.networking.security.IActionHost; -import appeng.api.networking.security.MachineSource; -import appeng.api.networking.security.PlayerSource; -import appeng.api.storage.IMEInventory; -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.data.IAEFluidStack; -import appeng.api.storage.data.IItemList; -import appeng.api.util.AECableType; -import appeng.core.stats.Stats; -import appeng.me.GridAccessException; -import appeng.me.helpers.AENetworkProxy; -import appeng.me.helpers.IGridProxyable; -import appeng.util.IWideReadableNumberConverter; -import appeng.util.ReadableNumberConverter; -import gregtech.GT_Mod; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Hatch_Output_ME extends GT_MetaTileEntity_Hatch_Output implements IPowerChannelState { - - private long baseCapacity = 128_000; - - private BaseActionSource requestSource = null; - private @Nullable AENetworkProxy gridProxy = null; - final IItemList fluidCache = AEApi.instance() - .storage() - .createFluidList(); - long lastOutputTick = 0; - long lastInputTick = 0; - long tickCounter = 0; - boolean additionalConnection = false; - - public GT_MetaTileEntity_Hatch_Output_ME(int aID, String aName, String aNameRegional) { - super( - aID, - aName, - aNameRegional, - 3, - new String[] { "Fluid Output for Multiblocks", "Stores directly into ME", - "Can cache up to 128kL of fluids by default", "Change cache size by inserting a fluid storage cell", - "Change ME connection behavior by right-clicking with wire cutter" }, - 1); - } - - public GT_MetaTileEntity_Hatch_Output_ME(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Output_ME(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_FLUID_HATCH_ACTIVE) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_FLUID_HATCH) }; - } - - @Override - public byte getTierForStructure() { - return (byte) (GT_Values.V.length - 2); - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - getProxy().onReady(); - } - - @Override - public int fill(FluidStack aFluid, boolean doFill) { - if (doFill) { - return tryFillAE(aFluid); - } else { - if (aFluid == null) return 0; - return aFluid.amount; - } - } - - @Override - public int getCapacity() { - return 0; - } - - private long getCachedAmount() { - long fluidAmount = 0; - for (IAEFluidStack fluid : fluidCache) { - fluidAmount += fluid.getStackSize(); - } - return fluidAmount; - } - - private long getCacheCapacity() { - ItemStack upgradeItemStack = mInventory[0]; - if (upgradeItemStack != null && upgradeItemStack.getItem() instanceof IStorageFluidCell) { - return ((FCBaseItemCell) upgradeItemStack.getItem()).getBytes(upgradeItemStack) * 2048; - } - return baseCapacity; - } - - /** - * Check if the internal cache can still fit more fluids in it - */ - public boolean canAcceptFluid() { - if (getCachedAmount() < getCacheCapacity()) { - return true; - } - return false; - } - - /** - * Attempt to store fluid in connected ME network. Returns how much fluid is accepted (if the network was down e.g.) - * - * @param aFluid input fluid - * @return amount of fluid filled - */ - public int tryFillAE(final FluidStack aFluid) { - if (aFluid == null) return 0; - // Always allow insertion on the same tick so we can output the entire recipe - if (canAcceptFluid() || (lastInputTick == tickCounter)) { - fluidCache.add( - AEApi.instance() - .storage() - .createFluidStack(aFluid)); - lastInputTick = tickCounter; - return aFluid.amount; - } - return 0; - } - - private BaseActionSource getRequest() { - if (requestSource == null) requestSource = new MachineSource((IActionHost) getBaseMetaTileEntity()); - return requestSource; - } - - @Override - public AECableType getCableConnectionType(ForgeDirection side) { - return isOutputFacing(side) ? AECableType.SMART : AECableType.NONE; - } - - private void updateValidGridProxySides() { - if (additionalConnection) { - getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); - } else { - getProxy().setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); - } - } - - @Override - public void onFacingChange() { - updateValidGridProxySides(); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - // Don't allow to lock fluid in me fluid hatch - if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) - .isGUIClickable()) return; - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - additionalConnection = !additionalConnection; - updateValidGridProxySides(); - aPlayer.addChatComponentMessage( - new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection)); - return true; - } - - @Override - public AENetworkProxy getProxy() { - if (gridProxy == null) { - if (getBaseMetaTileEntity() instanceof IGridProxyable) { - gridProxy = new AENetworkProxy( - (IGridProxyable) getBaseMetaTileEntity(), - "proxy", - ItemList.Hatch_Output_ME.get(1), - true); - gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); - updateValidGridProxySides(); - if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner( - getBaseMetaTileEntity().getWorld() - .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); - } - } - return this.gridProxy; - } - - private void flushCachedStack() { - if (fluidCache.isEmpty()) return; - AENetworkProxy proxy = getProxy(); - if (proxy == null) { - return; - } - try { - IMEMonitor sg = proxy.getStorage() - .getFluidInventory(); - for (IAEFluidStack s : fluidCache) { - if (s.getStackSize() == 0) continue; - IAEFluidStack rest = fluidAEInsert(proxy.getEnergy(), sg, s, getRequest()); - if (rest != null && rest.getStackSize() > 0) { - s.setStackSize(rest.getStackSize()); - continue; - } - s.setStackSize(0); - } - } catch (final GridAccessException ignored) {} - lastOutputTick = tickCounter; - } - - @Override - public boolean isPowered() { - return getProxy() != null && getProxy().isPowered(); - } - - @Override - public boolean isActive() { - return getProxy() != null && getProxy().isActive(); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (getBaseMetaTileEntity().isServerSide()) { - tickCounter = aTick; - if (tickCounter > (lastOutputTick + 40)) flushCachedStack(); - if (tickCounter % 20 == 0) getBaseMetaTileEntity().setActive(isActive()); - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { - - if (stack.hasTagCompound() && stack.stackTagCompound.hasKey("baseCapacity")) { - tooltip.add( - "Current cache capacity: " + EnumChatFormatting.YELLOW - + ReadableNumberConverter.INSTANCE - .toWideReadableForm(stack.stackTagCompound.getLong("baseCapacity")) - + "L"); - } - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - super.setItemNBT(aNBT); - aNBT.setLong("baseCapacity", baseCapacity); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - NBTTagList fluids = new NBTTagList(); - for (IAEFluidStack s : fluidCache) { - if (s.getStackSize() == 0) continue; - NBTTagCompound tag = new NBTTagCompound(); - NBTTagCompound tagFluidStack = new NBTTagCompound(); - s.getFluidStack() - .writeToNBT(tagFluidStack); - tag.setTag("fluidStack", tagFluidStack); - tag.setLong("size", s.getStackSize()); - fluids.appendTag(tag); - } - aNBT.setTag("cachedFluids", fluids); - aNBT.setBoolean("additionalConnection", additionalConnection); - aNBT.setLong("baseCapacity", baseCapacity); - getProxy().writeToNBT(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - NBTBase t = aNBT.getTag("cachedFluids"); - if (t instanceof NBTTagList l) { - for (int i = 0; i < l.tagCount(); ++i) { - NBTTagCompound tag = l.getCompoundTagAt(i); - NBTTagCompound tagFluidStack = tag.getCompoundTag("fluidStack"); - final IAEFluidStack s = AEApi.instance() - .storage() - .createFluidStack(GT_Utility.loadFluid(tagFluidStack)); - if (s != null) { - s.setStackSize(tag.getLong("size")); - fluidCache.add(s); - } else { - GT_Mod.GT_FML_LOGGER.warn( - "An error occurred while loading contents of ME Output Hatch. This fluid has been voided: " - + tagFluidStack); - } - } - } - additionalConnection = aNBT.getBoolean("additionalConnection"); - baseCapacity = aNBT.getLong("baseCapacity"); - // Set the base capacity of existing hatches to be infinite - if (baseCapacity == 0) { - baseCapacity = Long.MAX_VALUE; - } - getProxy().readFromNBT(aNBT); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - List ss = new ArrayList<>(); - ss.add( - "The hatch is " + ((getProxy() != null && getProxy().isActive()) ? EnumChatFormatting.GREEN + "online" - : EnumChatFormatting.RED + "offline" + getAEDiagnostics()) + EnumChatFormatting.RESET); - IWideReadableNumberConverter nc = ReadableNumberConverter.INSTANCE; - ss.add("Fluid cache capacity: " + nc.toWideReadableForm(getCacheCapacity()) + " mB"); - if (fluidCache.isEmpty()) { - ss.add("The bus has no cached fluids"); - } else { - ss.add(String.format("The hatch contains %d cached fluids: ", fluidCache.size())); - int counter = 0; - for (IAEFluidStack s : fluidCache) { - ss.add( - s.getFluidStack() - .getLocalizedName() + ": " - + EnumChatFormatting.GOLD - + nc.toWideReadableForm(s.getStackSize()) - + " mB" - + EnumChatFormatting.RESET); - if (++counter > 100) break; - } - } - return ss.toArray(new String[fluidCache.size() + 2]); - } - - public static IAEFluidStack fluidAEInsert(final IEnergySource energy, final IMEInventory cell, - final IAEFluidStack input, final BaseActionSource src) { - final IAEFluidStack possible = cell.injectItems(input.copy(), Actionable.SIMULATE, src); - - long stored = input.getStackSize(); - if (possible != null) { - stored -= possible.getStackSize(); - } - // 1000 mb fluid will be considered as 1 item - long power = Math.max(1, stored / 1000); - - final double availablePower = energy.extractAEPower(power, Actionable.SIMULATE, PowerMultiplier.CONFIG); - - final long itemToAdd = Math.min((long) (availablePower + 0.9) * 1000, stored); - - if (itemToAdd > 0) { - energy.extractAEPower(power, Actionable.MODULATE, PowerMultiplier.CONFIG); - - if (itemToAdd < input.getStackSize()) { - final long original = input.getStackSize(); - final IAEFluidStack split = input.copy(); - split.decStackSize(itemToAdd); - input.setStackSize(itemToAdd); - split.add(cell.injectItems(input, Actionable.MODULATE, src)); - - if (src.isPlayer()) { - final long diff = original - split.getStackSize(); - Stats.ItemsInserted.addToPlayer(((PlayerSource) src).player, (int) diff); - } - - return split; - } - - final IAEFluidStack ret = cell.injectItems(input, Actionable.MODULATE, src); - - if (src.isPlayer()) { - final long diff = ret == null ? input.getStackSize() : input.getStackSize() - ret.getStackSize(); - Stats.ItemsInserted.addToPlayer(((PlayerSource) src).player, (int) diff); - } - - return ret; - } - - return input; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - getBaseMetaTileEntity().add1by1Slot(builder); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/IRecipeProcessingAwareHatch.java b/src/main/java/gregtech/common/tileentities/machines/IRecipeProcessingAwareHatch.java index c7a97ce969..eaceb1a247 100644 --- a/src/main/java/gregtech/common/tileentities/machines/IRecipeProcessingAwareHatch.java +++ b/src/main/java/gregtech/common/tileentities/machines/IRecipeProcessingAwareHatch.java @@ -1,10 +1,11 @@ package gregtech.common.tileentities.machines; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; import gregtech.api.recipe.check.CheckRecipeResult; /** - * Implement this interface for {@link gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch} + * Implement this interface for {@link MTEHatch} * if it does special stuff while multiblock controller is processing recipe. */ public interface IRecipeProcessingAwareHatch { @@ -22,5 +23,5 @@ public interface IRecipeProcessingAwareHatch { * @return Result of the process of this method. {@code !wasSuccessful()} means the returned result should * overwrite the result calculated on multiblock whatever the reason is. */ - CheckRecipeResult endRecipeProcessing(GT_MetaTileEntity_MultiBlockBase controller); + CheckRecipeResult endRecipeProcessing(MTEMultiBlockBase controller); } diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullBronze.java b/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullBronze.java new file mode 100644 index 0000000000..a9c34c5abc --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullBronze.java @@ -0,0 +1,43 @@ +package gregtech.common.tileentities.machines; + +import gregtech.api.enums.Dyes; +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.MTEBasicHullNonElectric; +import gregtech.api.render.TextureFactory; + +public class MTEBasicHullBronze extends MTEBasicHullNonElectric { + + public MTEBasicHullBronze(int aID, String aName, String aNameRegional, int aTier, String aDescription) { + super(aID, aName, aNameRegional, aTier, aDescription); + } + + public MTEBasicHullBronze(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEBasicHullBronze(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBasicHullBronze(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[3][17][]; + for (byte i = -1; i < 16; i = (byte) (i + 1)) { + rTextures[0][(i + 1)] = new ITexture[] { + TextureFactory.of(Textures.BlockIcons.MACHINE_BRONZE_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + rTextures[1][(i + 1)] = new ITexture[] { + TextureFactory.of(Textures.BlockIcons.MACHINE_BRONZE_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + rTextures[2][(i + 1)] = new ITexture[] { + TextureFactory.of(Textures.BlockIcons.MACHINE_BRONZE_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + } + return rTextures; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullBronzeBricks.java b/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullBronzeBricks.java new file mode 100644 index 0000000000..e09c84e095 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullBronzeBricks.java @@ -0,0 +1,46 @@ +package gregtech.common.tileentities.machines; + +import gregtech.api.enums.Dyes; +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.MTEBasicHullNonElectric; +import gregtech.api.render.TextureFactory; + +public class MTEBasicHullBronzeBricks extends MTEBasicHullNonElectric { + + public MTEBasicHullBronzeBricks(int aID, String aName, String aNameRegional, int aTier, String aDescription) { + super(aID, aName, aNameRegional, aTier, aDescription); + } + + public MTEBasicHullBronzeBricks(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEBasicHullBronzeBricks(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBasicHullBronzeBricks(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[3][17][]; + for (byte i = -1; i < 16; i = (byte) (i + 1)) { + ITexture[] tmp0 = { TextureFactory + .of(Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + rTextures[0][(i + 1)] = tmp0; + ITexture[] tmp1 = { TextureFactory + .of(Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + rTextures[1][(i + 1)] = tmp1; + ITexture[] tmp2 = { TextureFactory + .of(Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + rTextures[2][(i + 1)] = tmp2; + } + return rTextures; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullSteel.java b/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullSteel.java new file mode 100644 index 0000000000..6e5e6ad5e8 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullSteel.java @@ -0,0 +1,46 @@ +package gregtech.common.tileentities.machines; + +import gregtech.api.enums.Dyes; +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.MTEBasicHullNonElectric; +import gregtech.api.render.TextureFactory; + +public class MTEBasicHullSteel extends MTEBasicHullNonElectric { + + public MTEBasicHullSteel(int aID, String aName, String aNameRegional, int aTier, String aDescription) { + super(aID, aName, aNameRegional, aTier, aDescription); + } + + public MTEBasicHullSteel(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEBasicHullSteel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBasicHullSteel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[3][17][]; + for (byte i = -1; i < 16; i = (byte) (i + 1)) { + ITexture[] tmp0 = { + TextureFactory.of(Textures.BlockIcons.MACHINE_STEEL_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + rTextures[0][(i + 1)] = tmp0; + ITexture[] tmp1 = { + TextureFactory.of(Textures.BlockIcons.MACHINE_STEEL_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + rTextures[1][(i + 1)] = tmp1; + ITexture[] tmp2 = { + TextureFactory.of(Textures.BlockIcons.MACHINE_STEEL_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + rTextures[2][(i + 1)] = tmp2; + } + return rTextures; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullSteelBricks.java b/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullSteelBricks.java new file mode 100644 index 0000000000..7fc8276be1 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/MTEBasicHullSteelBricks.java @@ -0,0 +1,46 @@ +package gregtech.common.tileentities.machines; + +import gregtech.api.enums.Dyes; +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.MTEBasicHullNonElectric; +import gregtech.api.render.TextureFactory; + +public class MTEBasicHullSteelBricks extends MTEBasicHullNonElectric { + + public MTEBasicHullSteelBricks(int aID, String aName, String aNameRegional, int aTier, String aDescription) { + super(aID, aName, aNameRegional, aTier, aDescription); + } + + public MTEBasicHullSteelBricks(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEBasicHullSteelBricks(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBasicHullSteelBricks(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[3][17][]; + for (byte i = -1; i < 16; i = (byte) (i + 1)) { + ITexture[] tmp0 = { TextureFactory + .of(Textures.BlockIcons.MACHINE_STEELBRICKS_BOTTOM, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + rTextures[0][(i + 1)] = tmp0; + ITexture[] tmp1 = { TextureFactory + .of(Textures.BlockIcons.MACHINE_STEELBRICKS_TOP, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + rTextures[1][(i + 1)] = tmp1; + ITexture[] tmp2 = { TextureFactory + .of(Textures.BlockIcons.MACHINE_STEELBRICKS_SIDE, Dyes.getModulation(i, Dyes._NULL.mRGBa)) }; + rTextures[2][(i + 1)] = tmp2; + } + return rTextures; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputME.java b/src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputME.java new file mode 100644 index 0000000000..e5dfd72c68 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputME.java @@ -0,0 +1,1039 @@ +package gregtech.common.tileentities.machines; + +import static gregtech.api.enums.GTValues.TIER_COLORS; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_CRAFTING_INPUT_BUFFER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_CRAFTING_INPUT_BUS; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.event.ForgeEventFactory; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.ArrayUtils; +import org.jetbrains.annotations.NotNull; + +import com.glodblock.github.common.item.ItemFluidPacket; +import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import appeng.api.AEApi; +import appeng.api.implementations.ICraftingPatternItem; +import appeng.api.implementations.IPowerChannelState; +import appeng.api.networking.GridFlags; +import appeng.api.networking.IGridNode; +import appeng.api.networking.crafting.ICraftingPatternDetails; +import appeng.api.networking.crafting.ICraftingProvider; +import appeng.api.networking.crafting.ICraftingProviderHelper; +import appeng.api.networking.events.MENetworkCraftingPatternChange; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.security.MachineSource; +import appeng.api.storage.IMEMonitor; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.util.AECableType; +import appeng.api.util.DimensionalCoord; +import appeng.api.util.IInterfaceViewable; +import appeng.core.AppEng; +import appeng.core.sync.GuiBridge; +import appeng.helpers.ICustomNameObject; +import appeng.items.misc.ItemEncodedPattern; +import appeng.items.tools.quartz.ToolQuartzCuttingKnife; +import appeng.me.GridAccessException; +import appeng.me.helpers.AENetworkProxy; +import appeng.me.helpers.IGridProxyable; +import appeng.util.IWideReadableNumberConverter; +import appeng.util.Platform; +import appeng.util.ReadableNumberConverter; +import gregtech.GTMod; +import gregtech.api.enums.ItemList; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IConfigurationCircuitSupport; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.extensions.ArrayExt; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEHatchCraftingInputME extends MTEHatchInputBus + implements IConfigurationCircuitSupport, IAddGregtechLogo, IAddUIWidgets, IPowerChannelState, ICraftingProvider, + IGridProxyable, IDualInputHatch, ICustomNameObject, IInterfaceViewable { + + // Each pattern slot in the crafting input hatch has its own internal inventory + public static class PatternSlot implements IDualInputInventory { + + public interface SharedItemGetter { + + ItemStack[] getSharedItem(); + } + + private final ItemStack pattern; + private final ICraftingPatternDetails patternDetails; + private final List itemInventory; + private final List fluidInventory; + private final SharedItemGetter sharedItemGetter; + + public PatternSlot(ItemStack pattern, World world, SharedItemGetter getter) { + this.pattern = pattern; + this.patternDetails = ((ICraftingPatternItem) Objects.requireNonNull(pattern.getItem())) + .getPatternForItem(pattern, world); + this.itemInventory = new ArrayList<>(); + this.fluidInventory = new ArrayList<>(); + this.sharedItemGetter = getter; + } + + public PatternSlot(ItemStack pattern, NBTTagCompound nbt, World world, SharedItemGetter getter) { + this.pattern = pattern; + this.patternDetails = ((ICraftingPatternItem) Objects.requireNonNull(pattern.getItem())) + .getPatternForItem(pattern, world); + this.itemInventory = new ArrayList<>(); + this.fluidInventory = new ArrayList<>(); + this.sharedItemGetter = getter; + NBTTagList inv = nbt.getTagList("inventory", Constants.NBT.TAG_COMPOUND); + for (int i = 0; i < inv.tagCount(); i++) { + NBTTagCompound tagItemStack = inv.getCompoundTagAt(i); + ItemStack item = GTUtility.loadItem(tagItemStack); + if (item != null) { + if (item.stackSize > 0) { + itemInventory.add(item); + } + } else { + GTMod.GT_FML_LOGGER.warn( + "An error occurred while loading contents of ME Crafting Input Bus. This item has been voided: " + + tagItemStack); + } + } + NBTTagList fluidInv = nbt.getTagList("fluidInventory", Constants.NBT.TAG_COMPOUND); + for (int i = 0; i < fluidInv.tagCount(); i++) { + NBTTagCompound tagFluidStack = fluidInv.getCompoundTagAt(i); + FluidStack fluid = FluidStack.loadFluidStackFromNBT(tagFluidStack); + if (fluid != null) { + if (fluid.amount > 0) { + fluidInventory.add(fluid); + } + } else { + GTMod.GT_FML_LOGGER.warn( + "An error occurred while loading contents of ME Crafting Input Bus. This fluid has been voided: " + + tagFluidStack); + } + } + } + + public boolean hasChanged(ItemStack newPattern, World world) { + return newPattern == null + || (!ItemStack.areItemStacksEqual(pattern, newPattern) && !this.patternDetails.equals( + ((ICraftingPatternItem) Objects.requireNonNull(pattern.getItem())) + .getPatternForItem(newPattern, world))); + } + + public void updateSlotItems() { + for (int i = itemInventory.size() - 1; i >= 0; i--) { + ItemStack itemStack = itemInventory.get(i); + if (itemStack == null || itemStack.stackSize <= 0) { + itemInventory.remove(i); + } + } + } + + public void updateSlotFluids() { + for (int i = fluidInventory.size() - 1; i >= 0; i--) { + FluidStack fluidStack = fluidInventory.get(i); + if (fluidStack == null || fluidStack.amount <= 0) { + fluidInventory.remove(i); + } + } + } + + public boolean isItemEmpty() { + updateSlotItems(); + return itemInventory.isEmpty() && sharedItemGetter.getSharedItem().length == 0; + } + + public boolean isFluidEmpty() { + updateSlotFluids(); + return fluidInventory.isEmpty(); + } + + public boolean isEmpty() { + return isItemEmpty() && isFluidEmpty(); + } + + @Override + public ItemStack[] getItemInputs() { + if (isItemEmpty()) return new ItemStack[0]; + return ArrayUtils.addAll(itemInventory.toArray(new ItemStack[0]), sharedItemGetter.getSharedItem()); + } + + @Override + public FluidStack[] getFluidInputs() { + if (isFluidEmpty()) return new FluidStack[0]; + return fluidInventory.toArray(new FluidStack[0]); + } + + public ICraftingPatternDetails getPatternDetails() { + return patternDetails; + } + + public void refund(AENetworkProxy proxy, BaseActionSource src) throws GridAccessException { + IMEMonitor sg = proxy.getStorage() + .getItemInventory(); + for (ItemStack itemStack : itemInventory) { + if (itemStack == null || itemStack.stackSize == 0) continue; + IAEItemStack rest = Platform.poweredInsert( + proxy.getEnergy(), + sg, + AEApi.instance() + .storage() + .createItemStack(itemStack), + src); + itemStack.stackSize = rest != null && rest.getStackSize() > 0 ? (int) rest.getStackSize() : 0; + } + IMEMonitor fsg = proxy.getStorage() + .getFluidInventory(); + for (FluidStack fluidStack : fluidInventory) { + if (fluidStack == null || fluidStack.amount == 0) continue; + IAEFluidStack rest = Platform.poweredInsert( + proxy.getEnergy(), + fsg, + AEApi.instance() + .storage() + .createFluidStack(fluidStack), + src); + fluidStack.amount = rest != null && rest.getStackSize() > 0 ? (int) rest.getStackSize() : 0; + } + } + + private void insertItem(ItemStack inserted) { + for (ItemStack itemStack : itemInventory) { + if (GTUtility.areStacksEqual(inserted, itemStack)) { + if (itemStack.stackSize > Integer.MAX_VALUE - inserted.stackSize) { + inserted.stackSize -= Integer.MAX_VALUE - itemStack.stackSize; + itemStack.stackSize = Integer.MAX_VALUE; + } else { + itemStack.stackSize += inserted.stackSize; + return; + } + } + } + if (inserted.stackSize > 0) { + itemInventory.add(inserted); + } + } + + private void insertFluid(FluidStack inserted) { + for (FluidStack fluidStack : fluidInventory) { + if (GTUtility.areFluidsEqual(inserted, fluidStack)) { + if (fluidStack.amount > Integer.MAX_VALUE - inserted.amount) { + inserted.amount -= Integer.MAX_VALUE - fluidStack.amount; + fluidStack.amount = Integer.MAX_VALUE; + } else { + fluidStack.amount += inserted.amount; + return; + } + } + } + if (inserted.amount > 0) { + fluidInventory.add(inserted); + } + } + + public boolean insertItemsAndFluids(InventoryCrafting inventoryCrafting) { + for (int i = 0; i < inventoryCrafting.getSizeInventory(); ++i) { + ItemStack itemStack = inventoryCrafting.getStackInSlot(i); + if (itemStack == null) continue; + + if (itemStack.getItem() instanceof ItemFluidPacket) { // insert fluid + FluidStack fluidStack = ItemFluidPacket.getFluidStack(itemStack); + if (fluidStack != null) insertFluid(fluidStack); + } else { // insert item + insertItem(itemStack); + } + } + return true; + } + + public NBTTagCompound writeToNBT(NBTTagCompound nbt) { + nbt.setTag("pattern", pattern.writeToNBT(new NBTTagCompound())); + + NBTTagList itemInventoryNbt = new NBTTagList(); + for (ItemStack itemStack : this.itemInventory) { + itemInventoryNbt.appendTag(GTUtility.saveItem(itemStack)); + } + nbt.setTag("inventory", itemInventoryNbt); + + NBTTagList fluidInventoryNbt = new NBTTagList(); + for (FluidStack fluidStack : fluidInventory) { + fluidInventoryNbt.appendTag(fluidStack.writeToNBT(new NBTTagCompound())); + } + nbt.setTag("fluidInventory", fluidInventoryNbt); + + return nbt; + } + } + + // mInventory is used for storing patterns, circuit and manual slot (typically NC items) + private static final int MAX_PATTERN_COUNT = 4 * 9; + private static final int SLOT_MANUAL_SIZE = 9; + private static final int MAX_INV_COUNT = MAX_PATTERN_COUNT + SLOT_MANUAL_SIZE + 1; + private static final int SLOT_CIRCUIT = MAX_PATTERN_COUNT; + private static final int SLOT_MANUAL_START = SLOT_CIRCUIT + 1; + private static final int MANUAL_SLOT_WINDOW = 10; + private BaseActionSource requestSource = null; + private @Nullable AENetworkProxy gridProxy = null; + + // holds all internal inventories + private PatternSlot[] internalInventory = new PatternSlot[MAX_PATTERN_COUNT]; + + // a hash map for faster lookup of pattern slots, not necessarily all valid. + private Map patternDetailsPatternSlotMap = new HashMap<>(MAX_PATTERN_COUNT); + + private boolean needPatternSync = true; + private boolean justHadNewItems = false; + + private String customName = null; + private boolean supportFluids; + private boolean additionalConnection = false; + + public MTEHatchCraftingInputME(int aID, String aName, String aNameRegional, boolean supportFluids) { + super( + aID, + aName, + aNameRegional, + supportFluids ? 11 : 6, + MAX_INV_COUNT, + new String[] { "Advanced item input for Multiblocks", + "Hatch Tier: " + TIER_COLORS[supportFluids ? 11 : 6] + VN[supportFluids ? 11 : 6], + "Processes patterns directly from ME", + supportFluids ? "It supports patterns including fluids" + : "It does not support patterns including fluids", + "Change ME connection behavior by right-clicking with wire cutter" }); + disableSort = true; + this.supportFluids = supportFluids; + } + + public MTEHatchCraftingInputME(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, + boolean supportFluids) { + super(aName, aTier, MAX_INV_COUNT, aDescription, aTextures); + this.supportFluids = supportFluids; + disableSort = true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchCraftingInputME(mName, mTier, mDescriptionArray, mTextures, supportFluids); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return getTexturesInactive(aBaseTexture); + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + TextureFactory.of(supportFluids ? OVERLAY_ME_CRAFTING_INPUT_BUFFER : OVERLAY_ME_CRAFTING_INPUT_BUS) }; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + super.onPostTick(aBaseMetaTileEntity, aTimer); + + if (getBaseMetaTileEntity().isServerSide()) { + if (needPatternSync && aTimer % 10 == 0) { + needPatternSync = !postMEPatternChange(); + } + if (aTimer % 20 == 0) { + getBaseMetaTileEntity().setActive(isActive()); + } + } + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + getProxy().onReady(); + } + + @Override + public IGridNode getGridNode(ForgeDirection dir) { + return getProxy().getNode(); + } + + @Override + public AECableType getCableConnectionType(ForgeDirection forgeDirection) { + return isOutputFacing(forgeDirection) ? AECableType.SMART : AECableType.NONE; + } + + private void updateValidGridProxySides() { + if (additionalConnection) { + getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); + } else { + getProxy().setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); + } + } + + @Override + public void onFacingChange() { + updateValidGridProxySides(); + } + + @Override + public void securityBreak() {} + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + additionalConnection = !additionalConnection; + updateValidGridProxySides(); + aPlayer.addChatComponentMessage( + new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection)); + return true; + } + + @Override + public AENetworkProxy getProxy() { + if (gridProxy == null) { + gridProxy = new AENetworkProxy(this, "proxy", ItemList.Hatch_CraftingInput_Bus_ME.get(1), true); + gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); + updateValidGridProxySides(); + if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner( + getBaseMetaTileEntity().getWorld() + .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); + } + + return this.gridProxy; + } + + @Override + public DimensionalCoord getLocation() { + return new DimensionalCoord( + getBaseMetaTileEntity().getWorld(), + getBaseMetaTileEntity().getXCoord(), + getBaseMetaTileEntity().getYCoord(), + getBaseMetaTileEntity().getZCoord()); + } + + @Override + public int rows() { + return 4; + } + + @Override + public int rowSize() { + return 9; + } + + @Override + public IInventory getPatterns() { + return this; + } + + @Override + public String getName() { + if (hasCustomName()) { + return getCustomName(); + } + StringBuilder name = new StringBuilder(); + if (getCrafterIcon() != null) { + name.append(getCrafterIcon().getDisplayName()); + } else { + name.append(getLocalName()); + } + + if (mInventory[SLOT_CIRCUIT] != null) { + name.append(" - "); + name.append(mInventory[SLOT_CIRCUIT].getItemDamage()); + } + if (mInventory[SLOT_MANUAL_START] != null) { + name.append(" - "); + name.append(mInventory[SLOT_MANUAL_START].getDisplayName()); + } + return name.toString(); + } + + @Override + public TileEntity getTileEntity() { + return (TileEntity) getBaseMetaTileEntity(); + } + + @Override + public boolean shouldDisplay() { + return true; + } + + @Override + public void gridChanged() { + needPatternSync = true; + } + + @Override + public boolean isPowered() { + return getProxy() != null && getProxy().isPowered(); + } + + @Override + public boolean isActive() { + return getProxy() != null && getProxy().isActive(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + + // save internalInventory + NBTTagList internalInventoryNBT = new NBTTagList(); + for (int i = 0; i < internalInventory.length; i++) { + if (internalInventory[i] != null) { + NBTTagCompound internalInventorySlotNBT = new NBTTagCompound(); + internalInventorySlotNBT.setInteger("patternSlot", i); + internalInventorySlotNBT + .setTag("patternSlotNBT", internalInventory[i].writeToNBT(new NBTTagCompound())); + internalInventoryNBT.appendTag(internalInventorySlotNBT); + } + } + aNBT.setTag("internalInventory", internalInventoryNBT); + if (customName != null) aNBT.setString("customName", customName); + aNBT.setBoolean("additionalConnection", additionalConnection); + getProxy().writeToNBT(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + // load internalInventory + NBTTagList internalInventoryNBT = aNBT.getTagList("internalInventory", Constants.NBT.TAG_COMPOUND); + for (int i = 0; i < internalInventoryNBT.tagCount(); i++) { + NBTTagCompound internalInventorySlotNBT = internalInventoryNBT.getCompoundTagAt(i); + int patternSlot = internalInventorySlotNBT.getInteger("patternSlot"); + NBTTagCompound patternSlotNBT = internalInventorySlotNBT.getCompoundTag("patternSlotNBT"); + ItemStack pattern = ItemStack.loadItemStackFromNBT(patternSlotNBT.getCompoundTag("pattern")); + if (pattern != null) { + internalInventory[patternSlot] = new PatternSlot( + pattern, + patternSlotNBT, + getBaseMetaTileEntity().getWorld(), + this::getSharedItems); + } else { + GTMod.GT_FML_LOGGER.warn( + "An error occurred while loading contents of ME Crafting Input Bus. This pattern has been voided: " + + patternSlotNBT); + } + } + + // Migrate from 4x8 to 4x9 pattern inventory + int oldPatternCount = 4 * 8; + int oldSlotManual = oldPatternCount + 1; + int oldSlotCircuit = oldPatternCount; + + if (internalInventory[oldSlotManual] == null && mInventory[oldSlotManual] != null) { + mInventory[SLOT_MANUAL_START] = mInventory[oldSlotManual]; + mInventory[oldSlotManual] = null; + } + if (internalInventory[oldSlotCircuit] == null && mInventory[oldSlotCircuit] != null) { + mInventory[SLOT_CIRCUIT] = mInventory[oldSlotCircuit]; + mInventory[oldSlotCircuit] = null; + } + + // reconstruct patternDetailsPatternSlotMap + patternDetailsPatternSlotMap.clear(); + for (PatternSlot patternSlot : internalInventory) { + if (patternSlot != null) { + patternDetailsPatternSlotMap.put(patternSlot.getPatternDetails(), patternSlot); + } + } + + if (aNBT.hasKey("customName")) customName = aNBT.getString("customName"); + additionalConnection = aNBT.getBoolean("additionalConnection"); + + getProxy().readFromNBT(aNBT); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + private String describePattern(ICraftingPatternDetails patternDetails) { + return Arrays.stream(patternDetails.getCondensedOutputs()) + .map( + aeItemStack -> aeItemStack.getItem() + .getItemStackDisplayName(aeItemStack.getItemStack())) + .collect(Collectors.joining(", ")); + } + + @Override + public String[] getInfoData() { + List ret = new ArrayList<>(); + ret.add( + "The bus is " + ((getProxy() != null && getProxy().isActive()) ? EnumChatFormatting.GREEN + "online" + : EnumChatFormatting.RED + "offline" + getAEDiagnostics()) + EnumChatFormatting.RESET); + ret.add("Internal Inventory: "); + int i = 0; + for (PatternSlot slot : internalInventory) { + if (slot == null) continue; + IWideReadableNumberConverter nc = ReadableNumberConverter.INSTANCE; + + i += 1; + ret.add( + "Slot " + i + + " " + + EnumChatFormatting.BLUE + + describePattern(slot.patternDetails) + + EnumChatFormatting.RESET); + Map itemMap = GTUtility.convertItemListToMap(slot.itemInventory); + for (Map.Entry entry : itemMap.entrySet()) { + ItemStack item = entry.getKey() + .getItemStack(); + long amount = entry.getValue(); + ret.add( + item.getItem() + .getItemStackDisplayName(item) + ": " + + EnumChatFormatting.GOLD + + nc.toWideReadableForm(amount) + + EnumChatFormatting.RESET); + } + Map fluidMap = GTUtility.convertFluidListToMap(slot.fluidInventory); + for (Map.Entry entry : fluidMap.entrySet()) { + FluidStack fluid = new FluidStack(entry.getKey(), 1); + long amount = entry.getValue(); + ret.add( + fluid.getLocalizedName() + ": " + + EnumChatFormatting.AQUA + + nc.toWideReadableForm(amount) + + EnumChatFormatting.RESET); + } + } + return ret.toArray(new String[0]); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public int getCircuitSlot() { + return SLOT_CIRCUIT; + } + + @Override + public int getCircuitSlotX() { + return 170; + } + + @Override + public int getCircuitSlotY() { + return 64; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public int getGUIWidth() { + return super.getGUIWidth() + 16; + } + + @Override + public void addUIWidgets(ModularWindow.@NotNull Builder builder, UIBuildContext buildContext) { + buildContext.addSyncedWindow(MANUAL_SLOT_WINDOW, this::createSlotManualWindow); + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 9) + .startFromSlot(0) + .endAtSlot(MAX_PATTERN_COUNT - 1) + .phantom(false) + .background(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_PATTERN_ME) + .widgetCreator(slot -> new SlotWidget(slot) { + + @Override + protected ItemStack getItemStackForRendering(Slot slotIn) { + ItemStack stack = slot.getStack(); + if (stack == null || !(stack.getItem() instanceof ItemEncodedPattern patternItem)) { + return stack; + } + ItemStack output = patternItem.getOutput(stack); + return output != null ? output : stack; + } + }.setFilter(itemStack -> itemStack.getItem() instanceof ICraftingPatternItem) + .setChangeListener(() -> onPatternChange(slot.getSlotIndex(), slot.getStack()))) + .build() + .setPos(7, 9)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (clickData.mouseButton == 0) { + widget.getContext() + .openSyncedWindow(MANUAL_SLOT_WINDOW); + } + }) + .setPlayClickSound(true) + .setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE) + .addTooltips(ImmutableList.of("Place manual items")) + .setSize(16, 16) + .setPos(170, 45)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (clickData.mouseButton == 0) { + refundAll(); + } + }) + .setPlayClickSound(true) + .setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_EXPORT) + .addTooltips(ImmutableList.of("Return all internally stored items back to AE")) + .setSize(16, 16) + .setPos(170, 28)); + } + + @Override + public void updateSlots() { + for (int slotId = SLOT_MANUAL_START; slotId < SLOT_MANUAL_START + SLOT_MANUAL_SIZE; ++slotId) { + if (mInventory[slotId] != null && mInventory[slotId].stackSize <= 0) mInventory[slotId] = null; + } + } + + private BaseActionSource getRequest() { + if (requestSource == null) requestSource = new MachineSource((IActionHost) getBaseMetaTileEntity()); + return requestSource; + } + + private void onPatternChange(int index, ItemStack newItem) { + if (!getBaseMetaTileEntity().isServerSide()) return; + + World world = getBaseMetaTileEntity().getWorld(); + + // remove old if applicable + PatternSlot originalPattern = internalInventory[index]; + if (originalPattern != null) { + if (originalPattern.hasChanged(newItem, world)) { + try { + originalPattern.refund(getProxy(), getRequest()); + } catch (GridAccessException ignored) {} + internalInventory[index] = null; + needPatternSync = true; + } else { + return; // nothing has changed + } + } + + // original does not exist or has changed + if (newItem == null || !(newItem.getItem() instanceof ICraftingPatternItem)) return; + + PatternSlot patternSlot = new PatternSlot(newItem, world, this::getSharedItems); + internalInventory[index] = patternSlot; + patternDetailsPatternSlotMap.put(patternSlot.getPatternDetails(), patternSlot); + + needPatternSync = true; + } + + public ItemStack[] getSharedItems() { + ItemStack[] sharedItems = new ItemStack[SLOT_MANUAL_SIZE + 1]; + sharedItems[0] = mInventory[SLOT_CIRCUIT]; + System.arraycopy(mInventory, SLOT_MANUAL_START, sharedItems, 1, SLOT_MANUAL_SIZE); + return ArrayExt.withoutNulls(sharedItems, ItemStack[]::new); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + NBTTagCompound tag = accessor.getNBTData(); + if (tag.hasKey("name")) + currenttip.add(EnumChatFormatting.AQUA + tag.getString("name") + EnumChatFormatting.RESET); + if (tag.hasKey("inventory")) { + NBTTagList inventory = tag.getTagList("inventory", Constants.NBT.TAG_COMPOUND); + for (int i = 0; i < inventory.tagCount(); ++i) { + NBTTagCompound item = inventory.getCompoundTagAt(i); + String name = item.getString("name"); + long amount = item.getLong("amount"); + currenttip.add( + name + ": " + + EnumChatFormatting.GOLD + + ReadableNumberConverter.INSTANCE.toWideReadableForm(amount) + + EnumChatFormatting.RESET); + } + } + super.getWailaBody(itemStack, currenttip, accessor, config); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + + NBTTagList inventory = new NBTTagList(); + HashMap nameToAmount = new HashMap<>(); + for (Iterator it = inventories(); it.hasNext();) { + PatternSlot i = it.next(); + for (ItemStack item : i.itemInventory) { + if (item != null && item.stackSize > 0) { + String name = item.getDisplayName(); + nameToAmount.merge(name, (long) item.stackSize, Long::sum); + } + } + for (FluidStack fluid : i.fluidInventory) { + if (fluid != null && fluid.amount > 0) { + String name = fluid.getLocalizedName(); + nameToAmount.merge(name, (long) fluid.amount, Long::sum); + } + } + } + for (Map.Entry entry : nameToAmount.entrySet()) { + NBTTagCompound item = new NBTTagCompound(); + item.setString("name", entry.getKey()); + item.setLong("amount", entry.getValue()); + inventory.appendTag(item); + } + + tag.setTag("inventory", inventory); + if (!Objects.equals(getName(), getLocalName())) { + tag.setString("name", getName()); + } + super.getWailaNBTData(player, tile, tag, world, x, y, z); + } + + @Override + public void provideCrafting(ICraftingProviderHelper craftingTracker) { + if (!isActive()) return; + + for (PatternSlot slot : internalInventory) { + if (slot == null) continue; + ICraftingPatternDetails details = slot.getPatternDetails(); + if (details == null) { + GTMod.GT_FML_LOGGER.warn( + "Found an invalid pattern at " + getBaseMetaTileEntity().getCoords() + + " in dim " + + getBaseMetaTileEntity().getWorld().provider.dimensionId); + continue; + } + craftingTracker.addCraftingOption(this, details); + } + } + + @Override + public boolean pushPattern(ICraftingPatternDetails patternDetails, InventoryCrafting table) { + if (!isActive()) return false; + + if (!supportFluids) { + for (int i = 0; i < table.getSizeInventory(); ++i) { + ItemStack itemStack = table.getStackInSlot(i); + if (itemStack == null) continue; + if (itemStack.getItem() instanceof ItemFluidPacket) return false; + } + } + if (!patternDetailsPatternSlotMap.get(patternDetails) + .insertItemsAndFluids(table)) { + return false; + } + justHadNewItems = true; + return true; + } + + @Override + public boolean isBusy() { + return false; + } + + @Override + public Iterator inventories() { + return Arrays.stream(internalInventory) + .filter(Objects::nonNull) + .iterator(); + } + + @Override + public void onBlockDestroyed() { + refundAll(); + super.onBlockDestroyed(); + } + + private void refundAll() { + for (PatternSlot slot : internalInventory) { + if (slot == null) continue; + try { + slot.refund(getProxy(), getRequest()); + } catch (GridAccessException ignored) {} + } + } + + @Override + public boolean justUpdated() { + boolean ret = justHadNewItems; + justHadNewItems = false; + return ret; + } + + @Override + public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (!(aPlayer instanceof EntityPlayerMP)) return; + + ItemStack dataStick = aPlayer.inventory.getCurrentItem(); + if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) return; + + NBTTagCompound tag = new NBTTagCompound(); + tag.setString("type", "CraftingInputBuffer"); + tag.setInteger("x", aBaseMetaTileEntity.getXCoord()); + tag.setInteger("y", aBaseMetaTileEntity.getYCoord()); + tag.setInteger("z", aBaseMetaTileEntity.getZCoord()); + + dataStick.stackTagCompound = tag; + dataStick.setStackDisplayName( + "Crafting Input Buffer Link Data Stick (" + aBaseMetaTileEntity + .getXCoord() + ", " + aBaseMetaTileEntity.getYCoord() + ", " + aBaseMetaTileEntity.getZCoord() + ")"); + aPlayer.addChatMessage(new ChatComponentText("Saved Link Data to Data Stick")); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + final ItemStack is = aPlayer.inventory.getCurrentItem(); + if (is != null && is.getItem() instanceof ToolQuartzCuttingKnife) { + if (ForgeEventFactory.onItemUseStart(aPlayer, is, 1) <= 0) return false; + IGregTechTileEntity te = getBaseMetaTileEntity(); + aPlayer.openGui( + AppEng.instance(), + GuiBridge.GUI_RENAMER.ordinal() << 5 | (side.ordinal()), + te.getWorld(), + te.getXCoord(), + te.getYCoord(), + te.getZCoord()); + return true; + } + return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + } + + @Override + public ItemStack getCrafterIcon() { + return getMachineCraftingIcon(); + } + + private boolean postMEPatternChange() { + // don't post until it's active + if (!getProxy().isActive()) return false; + try { + getProxy().getGrid() + .postEvent(new MENetworkCraftingPatternChange(this, getProxy().getNode())); + } catch (GridAccessException ignored) { + return false; + } + return true; + } + + protected ModularWindow createSlotManualWindow(final EntityPlayer player) { + final int WIDTH = 68; + final int HEIGHT = 68; + final int PARENT_WIDTH = getGUIWidth(); + final int PARENT_HEIGHT = getGUIHeight(); + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + // make sure the manual window is within the parent window + // otherwise picking up manual items would toss them + // See GuiContainer.java flag1 + builder.setPos( + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) + .add(Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)))); + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 3) + .startFromSlot(SLOT_MANUAL_START) + .endAtSlot(SLOT_MANUAL_START + SLOT_MANUAL_SIZE - 1) + .phantom(false) + .background(getGUITextureSet().getItemSlot()) + .build() + .setPos(7, 7)); + return builder.build(); + } + + @Override + public void setInventorySlotContents(int aIndex, ItemStack aStack) { + super.setInventorySlotContents(aIndex, aStack); + if (aIndex >= MAX_PATTERN_COUNT) return; + onPatternChange(aIndex, aStack); + needPatternSync = true; + } + + @Override + public String getCustomName() { + return customName; + } + + @Override + public boolean hasCustomName() { + return customName != null; + } + + @Override + public void setCustomName(String name) { + customName = name; + } + + @Override + public Optional getFirstNonEmptyInventory() { + for (PatternSlot slot : internalInventory) { + if (slot != null && !slot.isEmpty()) return Optional.of(slot); + } + return Optional.empty(); + } + + @Override + public boolean supportsFluids() { + return this.supportFluids; + } + + @Override + public List getItemsForHoloGlasses() { + List list = new ArrayList<>(); + for (PatternSlot slot : internalInventory) { + if (slot == null) continue; + + IAEItemStack[] outputs = slot.getPatternDetails() + .getCondensedOutputs(); + list.add(outputs[0].getItemStack()); + } + return list; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputSlave.java b/src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputSlave.java new file mode 100644 index 0000000000..92cbb0d6e8 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/MTEHatchCraftingInputSlave.java @@ -0,0 +1,260 @@ +package gregtech.common.tileentities.machines; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_CRAFTING_INPUT_SLAVE; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Optional; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.ItemList; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.render.TextureFactory; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEHatchCraftingInputSlave extends MTEHatchInputBus implements IDualInputHatch { + + private MTEHatchCraftingInputME master; // use getMaster() to access + private int masterX, masterY, masterZ; + private boolean masterSet = false; // indicate if values of masterX, masterY, masterZ are valid + + public MTEHatchCraftingInputSlave(int aID, String aName, String aNameRegional) { + super( + aID, + aName, + aNameRegional, + 6, + 0, + new String[] { "Proxy for Crafting Input Buffer/Bus", + "Link with Crafting Input Buffer/Bus using Data Stick to share inventory", + "Left click on the Crafting Input Buffer/Bus, then right click on this block to link them", }); + disableSort = true; + } + + public MTEHatchCraftingInputSlave(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + disableSort = true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchCraftingInputSlave(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return getTexturesInactive(aBaseTexture); + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_CRAFTING_INPUT_SLAVE) }; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + super.onPostTick(aBaseMetaTileEntity, aTimer); + if (aTimer % 100 == 0 && masterSet && getMaster() == null) { + trySetMasterFromCoord(masterX, masterY, masterZ); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + + if (aNBT.hasKey("master")) { + NBTTagCompound masterNBT = aNBT.getCompoundTag("master"); + masterX = masterNBT.getInteger("x"); + masterY = masterNBT.getInteger("y"); + masterZ = masterNBT.getInteger("z"); + masterSet = true; + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (masterSet) { + NBTTagCompound masterNBT = new NBTTagCompound(); + masterNBT.setInteger("x", masterX); + masterNBT.setInteger("y", masterY); + masterNBT.setInteger("z", masterZ); + aNBT.setTag("master", masterNBT); + } + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + var ret = new ArrayList(); + if (getMaster() != null) { + ret.add( + "This bus is linked to the Crafting Input Buffer at " + masterX + + ", " + + masterY + + ", " + + masterZ + + "."); + ret.addAll(Arrays.asList(getMaster().getInfoData())); + } else ret.add("This bus is not linked to any Crafting Input Buffer."); + return ret.toArray(new String[0]); + } + + public MTEHatchCraftingInputME getMaster() { + if (master == null) return null; + if (master.getBaseMetaTileEntity() == null) { // master disappeared + master = null; + } + return master; + } + + @Override + public byte getTierForStructure() { + return getMaster() == null ? super.getTierForStructure() : getMaster().getTierForStructure(); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public Iterator inventories() { + return getMaster() != null ? getMaster().inventories() : Collections.emptyIterator(); + } + + @Override + public Optional getFirstNonEmptyInventory() { + return getMaster() != null ? getMaster().getFirstNonEmptyInventory() : Optional.empty(); + } + + @Override + public boolean supportsFluids() { + return getMaster() != null && getMaster().supportsFluids(); + } + + @Override + public boolean justUpdated() { + return getMaster() != null && getMaster().justUpdated(); + } + + public MTEHatchCraftingInputME trySetMasterFromCoord(int x, int y, int z) { + var tileEntity = getBaseMetaTileEntity().getWorld() + .getTileEntity(x, y, z); + if (tileEntity == null) return null; + if (!(tileEntity instanceof IGregTechTileEntity gtTileEntity)) return null; + var metaTileEntity = gtTileEntity.getMetaTileEntity(); + if (!(metaTileEntity instanceof MTEHatchCraftingInputME)) return null; + masterX = x; + masterY = y; + masterZ = z; + masterSet = true; + master = (MTEHatchCraftingInputME) metaTileEntity; + return master; + } + + private boolean tryLinkDataStick(EntityPlayer aPlayer) { + ItemStack dataStick = aPlayer.inventory.getCurrentItem(); + + if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) { + return false; + } + if (!dataStick.hasTagCompound() || !dataStick.stackTagCompound.getString("type") + .equals("CraftingInputBuffer")) { + return false; + } + + NBTTagCompound nbt = dataStick.stackTagCompound; + int x = nbt.getInteger("x"); + int y = nbt.getInteger("y"); + int z = nbt.getInteger("z"); + if (trySetMasterFromCoord(x, y, z) != null) { + aPlayer.addChatMessage(new ChatComponentText("Link successful")); + return true; + } + aPlayer.addChatMessage(new ChatComponentText("Link failed")); + return true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (!(aPlayer instanceof EntityPlayerMP)) { + return false; + } + if (tryLinkDataStick(aPlayer)) { + return true; + } + var master = getMaster(); + if (master != null) { + return master.onRightclick(master.getBaseMetaTileEntity(), aPlayer); + } + return false; + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + NBTTagCompound tag = accessor.getNBTData(); + currenttip.add((tag.getBoolean("linked") ? "Linked" : "Not linked")); + + if (tag.hasKey("masterX")) { + currenttip.add( + "Bound to " + tag + .getInteger("masterX") + ", " + tag.getInteger("masterY") + ", " + tag.getInteger("masterZ")); + } + + if (tag.hasKey("masterName")) { + currenttip.add(EnumChatFormatting.GOLD + tag.getString("masterName") + EnumChatFormatting.RESET); + } + + super.getWailaBody(itemStack, currenttip, accessor, config); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + + tag.setBoolean("linked", getMaster() != null); + if (masterSet) { + tag.setInteger("masterX", masterX); + tag.setInteger("masterY", masterY); + tag.setInteger("masterZ", masterZ); + } + if (getMaster() != null) tag.setString("masterName", getMaster().getName()); + + super.getWailaNBTData(player, tile, tag, world, x, y, z); + } + + @Override + public List getItemsForHoloGlasses() { + return getMaster() != null ? getMaster().getItemsForHoloGlasses() : null; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEHatchInputBusME.java b/src/main/java/gregtech/common/tileentities/machines/MTEHatchInputBusME.java new file mode 100644 index 0000000000..cbfc18ab0b --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/MTEHatchInputBusME.java @@ -0,0 +1,886 @@ +package gregtech.common.tileentities.machines; + +import static gregtech.api.enums.GTValues.TIER_COLORS; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_HATCH; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_HATCH_ACTIVE; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import appeng.api.config.Actionable; +import appeng.api.config.PowerMultiplier; +import appeng.api.implementations.IPowerChannelState; +import appeng.api.networking.GridFlags; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.security.MachineSource; +import appeng.api.storage.IMEMonitor; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.util.AECableType; +import appeng.core.localization.WailaText; +import appeng.me.GridAccessException; +import appeng.me.helpers.AENetworkProxy; +import appeng.me.helpers.IGridProxyable; +import appeng.util.item.AEItemStack; +import gregtech.api.enums.ItemList; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IConfigurationCircuitSupport; +import gregtech.api.interfaces.IDataCopyable; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.gui.modularui.widget.AESlotWidget; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEHatchInputBusME extends MTEHatchInputBus implements IConfigurationCircuitSupport, + IRecipeProcessingAwareHatch, IAddGregtechLogo, IAddUIWidgets, IPowerChannelState, ISmartInputHatch, IDataCopyable { + + private static final int SLOT_COUNT = 16; + public static final String COPIED_DATA_IDENTIFIER = "stockingBus"; + private BaseActionSource requestSource = null; + private @Nullable AENetworkProxy gridProxy = null; + private final ItemStack[] shadowInventory = new ItemStack[SLOT_COUNT]; + private final int[] savedStackSizes = new int[SLOT_COUNT]; + private boolean processingRecipe = false; + private final boolean autoPullAvailable; + private boolean autoPullItemList = false; + private int minAutoPullStackSize = 1; + private int autoPullRefreshTime = 100; + private static final int CONFIG_WINDOW_ID = 10; + private boolean additionalConnection = false; + private boolean justHadNewItems = false; + private boolean expediteRecipeCheck = false; + + public MTEHatchInputBusME(int aID, boolean autoPullAvailable, String aName, String aNameRegional) { + super( + aID, + aName, + aNameRegional, + autoPullAvailable ? 6 : 3, + SLOT_COUNT * 2 + 2, + getDescriptionArray(autoPullAvailable)); + this.autoPullAvailable = autoPullAvailable; + disableSort = true; + } + + public MTEHatchInputBusME(String aName, boolean autoPullAvailable, int aTier, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, SLOT_COUNT * 2 + 2, aDescription, aTextures); + this.autoPullAvailable = autoPullAvailable; + disableSort = true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchInputBusME(mName, autoPullAvailable, mTier, mDescriptionArray, mTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_INPUT_HATCH_ACTIVE) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_INPUT_HATCH) }; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (getBaseMetaTileEntity().isServerSide()) { + if (aTimer % autoPullRefreshTime == 0 && autoPullItemList) { + refreshItemList(); + } + if (aTimer % 20 == 0) { + getBaseMetaTileEntity().setActive(isActive()); + } + } + super.onPostTick(aBaseMetaTileEntity, aTimer); + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + getProxy().onReady(); + } + + @Override + public AECableType getCableConnectionType(ForgeDirection forgeDirection) { + return isOutputFacing(forgeDirection) ? AECableType.SMART : AECableType.NONE; + } + + private void updateValidGridProxySides() { + if (additionalConnection) { + getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); + } else { + getProxy().setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); + } + } + + @Override + public void onFacingChange() { + updateValidGridProxySides(); + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + additionalConnection = !additionalConnection; + updateValidGridProxySides(); + aPlayer.addChatComponentMessage( + new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection)); + return true; + } + + @Override + public AENetworkProxy getProxy() { + if (gridProxy == null) { + if (getBaseMetaTileEntity() instanceof IGridProxyable) { + gridProxy = new AENetworkProxy( + (IGridProxyable) getBaseMetaTileEntity(), + "proxy", + autoPullAvailable ? ItemList.Hatch_Input_Bus_ME_Advanced.get(1) + : ItemList.Hatch_Input_Bus_ME.get(1), + true); + gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); + updateValidGridProxySides(); + if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner( + getBaseMetaTileEntity().getWorld() + .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); + } + } + return this.gridProxy; + } + + @Override + public boolean isPowered() { + return getProxy() != null && getProxy().isPowered(); + } + + @Override + public boolean isActive() { + return getProxy() != null && getProxy().isActive(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + int[] sizes = new int[16]; + for (int i = 0; i < 16; ++i) sizes[i] = mInventory[i + 16] == null ? 0 : mInventory[i + 16].stackSize; + aNBT.setIntArray("sizes", sizes); + aNBT.setBoolean("autoStock", autoPullItemList); + aNBT.setInteger("minAutoPullStackSize", minAutoPullStackSize); + aNBT.setBoolean("additionalConnection", additionalConnection); + aNBT.setBoolean("expediteRecipeCheck", expediteRecipeCheck); + aNBT.setInteger("refreshTime", autoPullRefreshTime); + getProxy().writeToNBT(aNBT); + } + + private void setAutoPullItemList(boolean pullItemList) { + if (!autoPullAvailable) { + return; + } + + autoPullItemList = pullItemList; + if (!autoPullItemList) { + for (int i = 0; i < SLOT_COUNT; i++) { + mInventory[i] = null; + } + } else { + refreshItemList(); + } + updateAllInformationSlots(); + } + + public boolean doFastRecipeCheck() { + return expediteRecipeCheck; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("sizes")) { + int[] sizes = aNBT.getIntArray("sizes"); + if (sizes.length == 16) { + for (int i = 0; i < 16; ++i) { + if (sizes[i] != 0 && mInventory[i] != null) { + ItemStack s = mInventory[i].copy(); + s.stackSize = sizes[i]; + mInventory[i + 16] = s; + } + } + } + } + autoPullItemList = aNBT.getBoolean("autoStock"); + minAutoPullStackSize = aNBT.getInteger("minAutoPullStackSize"); + additionalConnection = aNBT.getBoolean("additionalConnection"); + expediteRecipeCheck = aNBT.getBoolean("expediteRecipeCheck"); + if (aNBT.hasKey("refreshTime")) { + autoPullRefreshTime = aNBT.getInteger("refreshTime"); + } + getProxy().readFromNBT(aNBT); + + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { + "The bus is " + ((getProxy() != null && getProxy().isActive()) ? EnumChatFormatting.GREEN + "online" + : EnumChatFormatting.RED + "offline" + getAEDiagnostics()) + EnumChatFormatting.RESET }; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (!autoPullAvailable) { + return; + } + + setAutoPullItemList(!autoPullItemList); + aPlayer.addChatMessage( + new ChatComponentTranslation( + "GT5U.machines.stocking_bus.auto_pull_toggle." + (autoPullItemList ? "enabled" : "disabled"))); + } + + @Override + public void updateSlots() { + if (mInventory[getManualSlot()] != null && mInventory[getManualSlot()].stackSize <= 0) + mInventory[getManualSlot()] = null; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + if (!(aPlayer instanceof EntityPlayerMP)) + return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + ItemStack dataStick = aPlayer.inventory.getCurrentItem(); + if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) + return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + + if (!pasteCopiedData(aPlayer, dataStick.stackTagCompound)) return false; + + updateValidGridProxySides(); + aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.stocking_bus.loaded")); + return true; + } + + @Override + public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (!(aPlayer instanceof EntityPlayerMP)) return; + + ItemStack dataStick = aPlayer.inventory.getCurrentItem(); + if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) return; + + dataStick.stackTagCompound = getCopiedData(aPlayer); + dataStick.setStackDisplayName("Stocking Input Bus Configuration"); + aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.stocking_bus.saved")); + } + + @Override + public String getCopiedDataIdentifier(EntityPlayer player) { + return COPIED_DATA_IDENTIFIER; + } + + @Override + public boolean pasteCopiedData(EntityPlayer player, NBTTagCompound nbt) { + if (nbt == null || !COPIED_DATA_IDENTIFIER.equals(nbt.getString("type"))) return false; + ItemStack circuit = GTUtility.loadItem(nbt, "circuit"); + if (GTUtility.isStackInvalid(circuit)) circuit = null; + + if (autoPullAvailable) { + setAutoPullItemList(nbt.getBoolean("autoPull")); + minAutoPullStackSize = nbt.getInteger("minStackSize"); + // Data sticks created before refreshTime was implemented should not cause stocking buses to + // spam divide by zero errors + if (nbt.hasKey("refreshTime")) { + autoPullRefreshTime = nbt.getInteger("refreshTime"); + } + } + + additionalConnection = nbt.getBoolean("additionalConnection"); + if (!autoPullItemList) { + NBTTagList stockingItems = nbt.getTagList("itemsToStock", 10); + for (int i = 0; i < stockingItems.tagCount(); i++) { + this.mInventory[i] = GTUtility.loadItem(stockingItems.getCompoundTagAt(i)); + } + } + setInventorySlotContents(getCircuitSlot(), circuit); + return true; + } + + @Override + public NBTTagCompound getCopiedData(EntityPlayer player) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setString("type", COPIED_DATA_IDENTIFIER); + tag.setBoolean("autoPull", autoPullItemList); + tag.setInteger("minStackSize", minAutoPullStackSize); + tag.setInteger("refreshTime", autoPullRefreshTime); + tag.setBoolean("additionalConnection", additionalConnection); + tag.setTag("circuit", GTUtility.saveItem(getStackInSlot(getCircuitSlot()))); + + NBTTagList stockingItems = new NBTTagList(); + + if (!autoPullItemList) { + for (int index = 0; index < SLOT_COUNT; index++) { + stockingItems.appendTag(GTUtility.saveItem(mInventory[index])); + } + tag.setTag("itemsToStock", stockingItems); + } + return tag; + } + + private int getManualSlot() { + return SLOT_COUNT * 2 + 1; + } + + @Override + public int getCircuitSlot() { + return SLOT_COUNT * 2; + } + + @Override + public int getCircuitSlotX() { + return 80; + } + + @Override + public int getCircuitSlotY() { + return 64; + } + + @Override + public boolean setStackToZeroInsteadOfNull(int aIndex) { + return aIndex != getManualSlot(); + } + + @Override + public boolean justUpdated() { + if (expediteRecipeCheck) { + boolean ret = justHadNewItems; + justHadNewItems = false; + return ret; + } + return false; + } + + public void setRecipeCheck(boolean value) { + expediteRecipeCheck = value; + } + + @Override + public void setInventorySlotContents(int aIndex, ItemStack aStack) { + if (expediteRecipeCheck && aStack != null) { + justHadNewItems = true; + } + super.setInventorySlotContents(aIndex, aStack); + } + + @Override + public ItemStack getStackInSlot(int aIndex) { + if (!processingRecipe) return super.getStackInSlot(aIndex); + if (aIndex < 0 || aIndex > mInventory.length) return null; + if (aIndex >= SLOT_COUNT && aIndex < SLOT_COUNT * 2) + // Display slots + return null; + if (aIndex == getCircuitSlot() || aIndex == getManualSlot()) return mInventory[aIndex]; + if (mInventory[aIndex] != null) { + AENetworkProxy proxy = getProxy(); + if (proxy == null || !proxy.isActive()) { + return null; + } + try { + IMEMonitor sg = proxy.getStorage() + .getItemInventory(); + IAEItemStack request = AEItemStack.create(mInventory[aIndex]); + request.setStackSize(Integer.MAX_VALUE); + IAEItemStack result = sg.extractItems(request, Actionable.SIMULATE, getRequestSource()); + if (result != null) { + this.shadowInventory[aIndex] = result.getItemStack(); + this.savedStackSizes[aIndex] = this.shadowInventory[aIndex].stackSize; + this.setInventorySlotContents(aIndex + SLOT_COUNT, this.shadowInventory[aIndex]); + return this.shadowInventory[aIndex]; + } else { + // Request failed + this.setInventorySlotContents(aIndex + SLOT_COUNT, null); + return null; + } + } catch (final GridAccessException ignored) {} + return null; + } else { + // AE available but no items requested + this.setInventorySlotContents(aIndex + SLOT_COUNT, null); + } + return mInventory[aIndex]; + } + + private BaseActionSource getRequestSource() { + if (requestSource == null) requestSource = new MachineSource((IActionHost) getBaseMetaTileEntity()); + return requestSource; + } + + @Override + public void onExplosion() { + for (int i = 0; i < SLOT_COUNT; i++) { + mInventory[i] = null; + } + } + + @Override + public void startRecipeProcessing() { + processingRecipe = true; + updateAllInformationSlots(); + } + + private void refreshItemList() { + AENetworkProxy proxy = getProxy(); + try { + IMEMonitor sg = proxy.getStorage() + .getItemInventory(); + Iterator iterator = sg.getStorageList() + .iterator(); + int index = 0; + while (iterator.hasNext() && index < SLOT_COUNT) { + IAEItemStack currItem = iterator.next(); + if (currItem.getStackSize() >= minAutoPullStackSize) { + ItemStack itemstack = GTUtility.copyAmount(1, currItem.getItemStack()); + if (expediteRecipeCheck) { + ItemStack previous = this.mInventory[index]; + if (itemstack != null) { + justHadNewItems = !ItemStack.areItemStacksEqual(itemstack, previous); + } + } + this.mInventory[index] = itemstack; + index++; + } + } + for (int i = index; i < SLOT_COUNT; i++) { + mInventory[i] = null; + } + + } catch (final GridAccessException ignored) {} + } + + private void updateAllInformationSlots() { + for (int index = 0; index < SLOT_COUNT; index++) { + updateInformationSlot(index, mInventory[index]); + } + } + + @Override + public CheckRecipeResult endRecipeProcessing(MTEMultiBlockBase controller) { + CheckRecipeResult checkRecipeResult = CheckRecipeResultRegistry.SUCCESSFUL; + for (int i = 0; i < SLOT_COUNT; ++i) { + if (savedStackSizes[i] != 0) { + ItemStack oldStack = shadowInventory[i]; + if (oldStack == null || oldStack.stackSize < savedStackSizes[i]) { + AENetworkProxy proxy = getProxy(); + try { + IMEMonitor sg = proxy.getStorage() + .getItemInventory(); + IAEItemStack request = AEItemStack.create(mInventory[i]); + int toExtract = savedStackSizes[i] - (oldStack == null ? 0 : oldStack.stackSize); + request.setStackSize(toExtract); + IAEItemStack result = sg.extractItems(request, Actionable.MODULATE, getRequestSource()); + proxy.getEnergy() + .extractAEPower(request.getStackSize(), Actionable.MODULATE, PowerMultiplier.CONFIG); + setInventorySlotContents(i + SLOT_COUNT, oldStack); + if (result == null || result.getStackSize() != toExtract) { + controller.stopMachine(ShutDownReasonRegistry.CRITICAL_NONE); + checkRecipeResult = SimpleCheckRecipeResult + .ofFailurePersistOnShutdown("stocking_bus_fail_extraction"); + } + } catch (final GridAccessException ignored) { + controller.stopMachine(ShutDownReasonRegistry.CRITICAL_NONE); + checkRecipeResult = SimpleCheckRecipeResult + .ofFailurePersistOnShutdown("stocking_hatch_fail_extraction"); + } + } + savedStackSizes[i] = 0; + shadowInventory[i] = null; + if (mInventory[i + SLOT_COUNT] != null && mInventory[i + SLOT_COUNT].stackSize <= 0) { + mInventory[i + SLOT_COUNT] = null; + } + } + } + processingRecipe = false; + return checkRecipeResult; + } + + /** + * Update the right side of the GUI, which shows the amounts of items set on the left side + */ + public ItemStack updateInformationSlot(int aIndex, ItemStack aStack) { + if (aIndex >= 0 && aIndex < SLOT_COUNT) { + if (aStack == null) { + super.setInventorySlotContents(aIndex + SLOT_COUNT, null); + } else { + AENetworkProxy proxy = getProxy(); + if (!proxy.isActive()) { + super.setInventorySlotContents(aIndex + SLOT_COUNT, null); + return null; + } + try { + IMEMonitor sg = proxy.getStorage() + .getItemInventory(); + IAEItemStack request = AEItemStack.create(mInventory[aIndex]); + request.setStackSize(Integer.MAX_VALUE); + IAEItemStack result = sg.extractItems(request, Actionable.SIMULATE, getRequestSource()); + ItemStack s = (result != null) ? result.getItemStack() : null; + // We want to track changes in any ItemStack to notify any connected controllers to make a recipe + // check early + if (expediteRecipeCheck) { + ItemStack previous = getStackInSlot(aIndex + SLOT_COUNT); + if (s != null) { + justHadNewItems = !ItemStack.areItemStacksEqual(s, previous); + } + } + setInventorySlotContents(aIndex + SLOT_COUNT, s); + return s; + } catch (final GridAccessException ignored) {} + } + } + return null; + } + + /** + * Used to avoid slot update. + */ + public ItemStack getShadowItemStack(int index) { + if (index < 0 || index >= shadowInventory.length) { + return null; + } + return shadowInventory[index]; + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex == getManualSlot(); + } + + @Override + public int getGUIHeight() { + return 179; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + final SlotWidget[] aeSlotWidgets = new SlotWidget[16]; + + if (autoPullAvailable) { + buildContext.addSyncedWindow(CONFIG_WINDOW_ID, this::createStackSizeConfigurationWindow); + } + + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 4) + .startFromSlot(0) + .endAtSlot(15) + .phantom(true) + .slotCreator(index -> new BaseSlot(inventoryHandler, index, true) { + + @Override + public boolean isEnabled() { + return !autoPullItemList && super.isEnabled(); + } + }) + .widgetCreator(slot -> (SlotWidget) new SlotWidget(slot) { + + @Override + protected void phantomClick(ClickData clickData, ItemStack cursorStack) { + if (clickData.mouseButton != 0 || !getMcSlot().isEnabled()) return; + final int aSlotIndex = getMcSlot().getSlotIndex(); + if (cursorStack == null) { + getMcSlot().putStack(null); + } else { + if (containsSuchStack(cursorStack)) return; + getMcSlot().putStack(GTUtility.copyAmount(1, cursorStack)); + } + if (getBaseMetaTileEntity().isServerSide()) { + final ItemStack newInfo = updateInformationSlot(aSlotIndex, cursorStack); + aeSlotWidgets[getMcSlot().getSlotIndex()].getMcSlot() + .putStack(newInfo); + } + } + + @Override + public IDrawable[] getBackground() { + IDrawable slot; + if (autoPullItemList) { + slot = GTUITextures.SLOT_DARK_GRAY; + } else { + slot = ModularUITextures.ITEM_SLOT; + } + return new IDrawable[] { slot, GTUITextures.OVERLAY_SLOT_ARROW_ME }; + } + + @Override + public List getExtraTooltip() { + if (autoPullItemList) { + return Collections.singletonList( + StatCollector.translateToLocal("GT5U.machines.stocking_bus.cannot_set_slot")); + } else { + return Collections + .singletonList(StatCollector.translateToLocal("modularui.phantom.single.clear")); + } + } + + private boolean containsSuchStack(ItemStack tStack) { + for (int i = 0; i < 16; ++i) { + if (GTUtility.areStacksEqual(mInventory[i], tStack, false)) return true; + } + return false; + } + }.dynamicTooltip(() -> { + if (autoPullItemList) { + return Collections.singletonList( + StatCollector.translateToLocal("GT5U.machines.stocking_bus.cannot_set_slot")); + } else { + return Collections.emptyList(); + } + }) + .setUpdateTooltipEveryTick(true)) + .build() + .setPos(7, 9)) + .widget( + SlotGroup.ofItemHandler(inventoryHandler, 4) + .startFromSlot(16) + .endAtSlot(31) + .phantom(true) + .background(GTUITextures.SLOT_DARK_GRAY) + .widgetCreator( + slot -> aeSlotWidgets[slot.getSlotIndex() - 16] = new AESlotWidget(slot).disableInteraction()) + .build() + .setPos(97, 9)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_ARROW_DOUBLE) + .setPos(82, 30) + .setSize(12, 12)); + + if (autoPullAvailable) { + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (clickData.mouseButton == 0) { + setAutoPullItemList(!autoPullItemList); + } else if (clickData.mouseButton == 1 && !widget.isClient()) { + widget.getContext() + .openSyncedWindow(CONFIG_WINDOW_ID); + } + }) + .setBackground(() -> { + if (autoPullItemList) { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED, + GTUITextures.OVERLAY_BUTTON_AUTOPULL_ME }; + } else { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD, + GTUITextures.OVERLAY_BUTTON_AUTOPULL_ME_DISABLED }; + } + }) + .addTooltips( + Arrays.asList( + StatCollector.translateToLocal("GT5U.machines.stocking_bus.auto_pull.tooltip.1"), + StatCollector.translateToLocal("GT5U.machines.stocking_bus.auto_pull.tooltip.2"))) + .setSize(16, 16) + .setPos(80, 10)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> autoPullItemList, this::setAutoPullItemList)); + } + + builder.widget(TextWidget.dynamicString(() -> { + boolean isActive = isActive(); + boolean isPowered = isPowered(); + boolean isBooting = isBooting(); + EnumChatFormatting color = (isActive && isPowered) ? EnumChatFormatting.GREEN : EnumChatFormatting.DARK_RED; + return color + WailaText.getPowerState(isActive, isPowered, isBooting); + }) + .setTextAlignment(Alignment.Center) + .setSize(90, 9) + .setPos(43, 84)) + .widget( + new SlotWidget(inventoryHandler, getManualSlot()) + // ghost slots are prioritized over manual slot + .setShiftClickPriority(11) + .setPos(79, 45)); + } + + protected ModularWindow createStackSizeConfigurationWindow(final EntityPlayer player) { + final int WIDTH = 78; + final int HEIGHT = 115; + final int PARENT_WIDTH = getGUIWidth(); + final int PARENT_HEIGHT = getGUIHeight(); + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.setPos( + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) + .add( + Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) + .add(WIDTH - 3, 0))); + builder.widget( + TextWidget.localised("GT5U.machines.stocking_bus.min_stack_size") + .setPos(3, 2) + .setSize(74, 14)) + .widget( + new NumericWidget().setSetter(val -> minAutoPullStackSize = (int) val) + .setGetter(() -> minAutoPullStackSize) + .setBounds(1, Integer.MAX_VALUE) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(70, 18) + .setPos(3, 18) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)); + builder.widget( + TextWidget.localised("GT5U.machines.stocking_bus.refresh_time") + .setPos(3, 42) + .setSize(74, 14)) + .widget( + new NumericWidget().setSetter(val -> autoPullRefreshTime = (int) val) + .setGetter(() -> autoPullRefreshTime) + .setBounds(1, Integer.MAX_VALUE) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(70, 18) + .setPos(3, 58) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)); + builder.widget( + TextWidget.localised("GT5U.machines.stocking_bus.force_check") + .setPos(3, 88) + .setSize(50, 14)) + .widget( + new CycleButtonWidget().setToggle(() -> expediteRecipeCheck, val -> setRecipeCheck(val)) + .setTextureGetter( + state -> expediteRecipeCheck ? GTUITextures.OVERLAY_BUTTON_CHECKMARK + : GTUITextures.OVERLAY_BUTTON_CROSS) + .setBackground(GTUITextures.BUTTON_STANDARD) + .setPos(53, 87) + .setSize(16, 16) + .addTooltip(StatCollector.translateToLocal("GT5U.machines.stocking_bus.hatch_warning"))); + return builder.build(); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) + .setSize(17, 17) + .setPos(80, 63)); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + if (!autoPullAvailable) { + super.getWailaBody(itemStack, currenttip, accessor, config); + return; + } + + NBTTagCompound tag = accessor.getNBTData(); + boolean autopull = tag.getBoolean("autoPull"); + int minSize = tag.getInteger("minStackSize"); + currenttip.add( + StatCollector.translateToLocal("GT5U.waila.stocking_bus.auto_pull." + (autopull ? "enabled" : "disabled"))); + if (autopull) { + currenttip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.stocking_bus.min_stack_size", + GTUtility.formatNumbers(minSize))); + } + super.getWailaBody(itemStack, currenttip, accessor, config); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + if (!autoPullAvailable) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + return; + } + + tag.setBoolean("autoPull", autoPullItemList); + tag.setInteger("minStackSize", minAutoPullStackSize); + super.getWailaNBTData(player, tile, tag, world, x, y, z); + } + + private static String[] getDescriptionArray(boolean autoPullAvailable) { + List strings = new ArrayList<>(8); + strings.add("Advanced item input for Multiblocks"); + strings.add("Hatch Tier: " + TIER_COLORS[autoPullAvailable ? 6 : 3] + VN[autoPullAvailable ? 6 : 3]); + strings.add("Retrieves directly from ME"); + strings.add("Keeps 16 item types in stock"); + + if (autoPullAvailable) { + strings.add( + "Auto-Pull from ME mode will automatically stock the first 16 items in the ME system, updated every 5 seconds."); + strings.add("Toggle by right-clicking with screwdriver, or use the GUI."); + strings.add( + "Use the GUI to limit the minimum stack size for Auto-Pulling, adjust the slot refresh timer and enable fast recipe checks."); + strings.add("WARNING: Fast recipe checks can be laggy. Use with caution."); + } + + strings.add("Change ME connection behavior by right-clicking with wire cutter."); + strings.add("Configuration data can be copy+pasted using a data stick."); + return strings.toArray(new String[0]); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEHatchInputME.java b/src/main/java/gregtech/common/tileentities/machines/MTEHatchInputME.java new file mode 100644 index 0000000000..251023125a --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/MTEHatchInputME.java @@ -0,0 +1,949 @@ +package gregtech.common.tileentities.machines; + +import static gregtech.api.enums.GTValues.TIER_COLORS; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_FLUID_HATCH; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_INPUT_FLUID_HATCH_ACTIVE; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.Interactable; +import com.gtnewhorizons.modularui.common.fluid.FluidStackTank; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import appeng.api.config.Actionable; +import appeng.api.config.PowerMultiplier; +import appeng.api.implementations.IPowerChannelState; +import appeng.api.networking.GridFlags; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.security.MachineSource; +import appeng.api.storage.IMEMonitor; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.util.AECableType; +import appeng.core.localization.WailaText; +import appeng.me.GridAccessException; +import appeng.me.helpers.AENetworkProxy; +import appeng.me.helpers.IGridProxyable; +import appeng.util.item.AEFluidStack; +import gregtech.api.enums.ItemList; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IDataCopyable; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEHatchInputME extends MTEHatchInput implements IPowerChannelState, IAddGregtechLogo, IAddUIWidgets, + IRecipeProcessingAwareHatch, ISmartInputHatch, IDataCopyable { + + private static final int SLOT_COUNT = 16; + public static final String COPIED_DATA_IDENTIFIER = "stockingHatch"; + + protected final FluidStack[] storedFluids = new FluidStack[SLOT_COUNT]; + protected final FluidStack[] storedInformationFluids = new FluidStack[SLOT_COUNT]; + + // these two fields should ALWAYS be mutated simultaneously + // in most cases, you should call setSavedFluid() instead of trying to write to the array directly + // a desync of these two fields can lead to catastrophe + protected final FluidStack[] shadowStoredFluids = new FluidStack[SLOT_COUNT]; + private final int[] savedStackSizes = new int[SLOT_COUNT]; + + private boolean additionalConnection = false; + + protected BaseActionSource requestSource = null; + + @Nullable + protected AENetworkProxy gridProxy = null; + + private final boolean autoPullAvailable; + protected boolean autoPullFluidList = false; + protected int minAutoPullAmount = 1; + private int autoPullRefreshTime = 100; + protected boolean processingRecipe = false; + private boolean justHadNewFluids = false; + private boolean expediteRecipeCheck = false; + + protected static final int CONFIG_WINDOW_ID = 10; + + protected static final FluidStack[] EMPTY_FLUID_STACK = new FluidStack[0]; + + public MTEHatchInputME(int aID, boolean autoPullAvailable, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, autoPullAvailable ? 10 : 8, 1, getDescriptionArray(autoPullAvailable)); + this.autoPullAvailable = autoPullAvailable; + } + + public MTEHatchInputME(String aName, boolean autoPullAvailable, int aTier, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, 1, aTier, aDescription, aTextures); + this.autoPullAvailable = autoPullAvailable; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchInputME(mName, autoPullAvailable, mTier, mDescriptionArray, mTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_INPUT_FLUID_HATCH_ACTIVE) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_INPUT_FLUID_HATCH) }; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (getBaseMetaTileEntity().isServerSide()) { + if (aTimer % autoPullRefreshTime == 0 && autoPullFluidList) { + refreshFluidList(); + } + if (aTimer % 20 == 0) { + getBaseMetaTileEntity().setActive(isActive()); + } + } + super.onPostTick(aBaseMetaTileEntity, aTimer); + } + + private void refreshFluidList() { + AENetworkProxy proxy = getProxy(); + if (proxy == null || !proxy.isActive()) { + return; + } + + try { + IMEMonitor sg = proxy.getStorage() + .getFluidInventory(); + Iterator iterator = sg.getStorageList() + .iterator(); + + int index = 0; + while (iterator.hasNext() && index < SLOT_COUNT) { + IAEFluidStack currItem = iterator.next(); + if (currItem.getStackSize() >= minAutoPullAmount) { + FluidStack fluidStack = GTUtility.copyAmount(1, currItem.getFluidStack()); + if (expediteRecipeCheck) { + FluidStack previous = storedFluids[index]; + if (fluidStack != null && previous != null) { + justHadNewFluids = !fluidStack.isFluidEqual(previous); + } + } + storedFluids[index] = fluidStack; + index++; + } + } + + for (int i = index; i < SLOT_COUNT; i++) { + storedFluids[i] = null; + } + } catch (final GridAccessException ignored) {} + } + + @Override + public boolean displaysStackSize() { + return true; + } + + protected void setSavedFluid(int i, FluidStack stack) { + shadowStoredFluids[i] = stack; + savedStackSizes[i] = stack == null ? 0 : stack.amount; + } + + public FluidStack[] getStoredFluids() { + if (!processingRecipe) { + return EMPTY_FLUID_STACK; + } + + AENetworkProxy proxy = getProxy(); + if (proxy == null || !proxy.isActive()) { + return EMPTY_FLUID_STACK; + } + + updateAllInformationSlots(); + + for (int i = 0; i < SLOT_COUNT; i++) { + if (storedFluids[i] == null) { + setSavedFluid(i, null); + continue; + } + + FluidStack fluidStackWithAmount = storedInformationFluids[i]; + + setSavedFluid(i, fluidStackWithAmount); + } + + return shadowStoredFluids; + } + + @Override + public boolean justUpdated() { + if (expediteRecipeCheck) { + boolean ret = justHadNewFluids; + justHadNewFluids = false; + return ret; + } + return false; + } + + public void setRecipeCheck(boolean value) { + expediteRecipeCheck = value; + } + + @Override + public FluidStack drain(ForgeDirection side, FluidStack aFluid, boolean doDrain) { + // this is an ME input hatch. allowing draining via logistics would be very wrong (and against + // canTankBeEmptied()) but we do need to support draining from controller, which uses the UNKNOWN direction. + if (side != ForgeDirection.UNKNOWN) return null; + FluidStack stored = getMatchingFluidStack(aFluid); + if (stored == null) return null; + FluidStack drained = GTUtility.copyAmount(Math.min(stored.amount, aFluid.amount), stored); + if (doDrain) { + stored.amount -= drained.amount; + } + return drained; + } + + @Override + public void startRecipeProcessing() { + processingRecipe = true; + updateAllInformationSlots(); + } + + @Override + public CheckRecipeResult endRecipeProcessing(MTEMultiBlockBase controller) { + CheckRecipeResult checkRecipeResult = CheckRecipeResultRegistry.SUCCESSFUL; + AENetworkProxy proxy = getProxy(); + + for (int i = 0; i < SLOT_COUNT; ++i) { + FluidStack oldStack = shadowStoredFluids[i]; + int toExtract = savedStackSizes[i] - (oldStack != null ? oldStack.amount : 0); + if (toExtract <= 0) continue; + + try { + IMEMonitor sg = proxy.getStorage() + .getFluidInventory(); + + IAEFluidStack request = AEFluidStack.create(storedFluids[i]); + request.setStackSize(toExtract); + IAEFluidStack extractionResult = sg.extractItems(request, Actionable.MODULATE, getRequestSource()); + proxy.getEnergy() + .extractAEPower(toExtract, Actionable.MODULATE, PowerMultiplier.CONFIG); + + if (extractionResult == null || extractionResult.getStackSize() != toExtract) { + controller.stopMachine(ShutDownReasonRegistry.CRITICAL_NONE); + checkRecipeResult = SimpleCheckRecipeResult + .ofFailurePersistOnShutdown("stocking_hatch_fail_extraction"); + } + } catch (GridAccessException ignored) { + controller.stopMachine(ShutDownReasonRegistry.CRITICAL_NONE); + checkRecipeResult = SimpleCheckRecipeResult + .ofFailurePersistOnShutdown("stocking_hatch_fail_extraction"); + } + setSavedFluid(i, null); + if (storedInformationFluids[i] != null && storedInformationFluids[i].amount <= 0) { + storedInformationFluids[i] = null; + } + } + + processingRecipe = false; + return checkRecipeResult; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + getProxy().onReady(); + } + + @Override + public AECableType getCableConnectionType(ForgeDirection forgeDirection) { + return isOutputFacing(forgeDirection) ? AECableType.SMART : AECableType.NONE; + } + + private void updateValidGridProxySides() { + if (additionalConnection) { + getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); + } else { + getProxy().setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); + } + } + + @Override + public void onFacingChange() { + updateValidGridProxySides(); + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + additionalConnection = !additionalConnection; + updateValidGridProxySides(); + aPlayer.addChatComponentMessage( + new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection)); + return true; + } + + @Override + public AENetworkProxy getProxy() { + if (gridProxy == null) { + if (getBaseMetaTileEntity() instanceof IGridProxyable) { + gridProxy = new AENetworkProxy( + (IGridProxyable) getBaseMetaTileEntity(), + "proxy", + autoPullAvailable ? ItemList.Hatch_Input_ME_Advanced.get(1) : ItemList.Hatch_Input_ME.get(1), + true); + gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); + updateValidGridProxySides(); + if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner( + getBaseMetaTileEntity().getWorld() + .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); + } + } + return this.gridProxy; + } + + @Override + public boolean isPowered() { + return getProxy() != null && getProxy().isPowered(); + } + + @Override + public boolean isActive() { + return getProxy() != null && getProxy().isActive(); + } + + private void setAutoPullFluidList(boolean pullFluidList) { + if (!autoPullAvailable) { + return; + } + + autoPullFluidList = pullFluidList; + if (!autoPullFluidList) { + Arrays.fill(storedFluids, null); + } else { + refreshFluidList(); + } + updateAllInformationSlots(); + } + + public boolean doFastRecipeCheck() { + return expediteRecipeCheck; + } + + private void updateAllInformationSlots() { + for (int index = 0; index < SLOT_COUNT; index++) { + updateInformationSlot(index); + } + } + + public void updateInformationSlot(int index) { + if (index < 0 || index >= SLOT_COUNT) { + return; + } + + FluidStack fluidStack = storedFluids[index]; + if (fluidStack == null) { + storedInformationFluids[index] = null; + return; + } + + AENetworkProxy proxy = getProxy(); + if (proxy == null || !proxy.isActive()) { + storedInformationFluids[index] = null; + return; + } + + try { + IMEMonitor sg = proxy.getStorage() + .getFluidInventory(); + IAEFluidStack request = AEFluidStack.create(fluidStack); + request.setStackSize(Integer.MAX_VALUE); + IAEFluidStack result = sg.extractItems(request, Actionable.SIMULATE, getRequestSource()); + FluidStack resultFluid = (result != null) ? result.getFluidStack() : null; + // We want to track if any FluidStack is modified to notify any connected controllers to make a recipe check + // early + if (expediteRecipeCheck) { + FluidStack previous = storedInformationFluids[index]; + if (resultFluid != null) { + justHadNewFluids = !resultFluid.isFluidEqual(previous); + } + } + storedInformationFluids[index] = resultFluid; + } catch (final GridAccessException ignored) {} + } + + private BaseActionSource getRequestSource() { + if (requestSource == null) requestSource = new MachineSource((IActionHost) getBaseMetaTileEntity()); + return requestSource; + } + + public FluidStack getMatchingFluidStack(FluidStack fluidStack) { + if (fluidStack == null) return null; + + AENetworkProxy proxy = getProxy(); + if (proxy == null || !proxy.isActive()) { + return null; + } + + for (int i = 0; i < storedFluids.length; i++) { + if (storedFluids[i] == null) { + continue; + } + + if (GTUtility.areFluidsEqual(fluidStack, storedFluids[i], false)) { + updateInformationSlot(i); + if (storedInformationFluids[i] != null) { + setSavedFluid(i, storedInformationFluids[i]); + return shadowStoredFluids[i]; + } + + setSavedFluid(i, null); + return null; + } + } + return null; + } + + /** + * Used to avoid slot update. + */ + public FluidStack getShadowFluidStack(int index) { + if (index < 0 || index >= storedFluids.length) { + return null; + } + + return shadowStoredFluids[index]; + } + + public int getFluidSlot(FluidStack fluidStack) { + if (fluidStack == null) return -1; + + for (int i = 0; i < storedFluids.length; i++) { + if (storedFluids[i] == null) { + continue; + } + + if (GTUtility.areFluidsEqual(fluidStack, storedFluids[i], false)) { + return i; + } + } + + return -1; + } + + @Override + public boolean canTankBeEmptied() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + + NBTTagList nbtTagList = new NBTTagList(); + for (int i = 0; i < SLOT_COUNT; i++) { + FluidStack fluidStack = storedFluids[i]; + if (fluidStack == null) { + continue; + } + NBTTagCompound fluidTag = fluidStack.writeToNBT(new NBTTagCompound()); + if (storedInformationFluids[i] != null) + fluidTag.setInteger("informationAmount", storedInformationFluids[i].amount); + nbtTagList.appendTag(fluidTag); + } + + aNBT.setTag("storedFluids", nbtTagList); + aNBT.setBoolean("autoPull", autoPullFluidList); + aNBT.setInteger("minAmount", minAutoPullAmount); + aNBT.setBoolean("additionalConnection", additionalConnection); + aNBT.setBoolean("expediteRecipeCheck", expediteRecipeCheck); + aNBT.setInteger("refreshTime", autoPullRefreshTime); + getProxy().writeToNBT(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("storedFluids")) { + NBTTagList nbtTagList = aNBT.getTagList("storedFluids", 10); + int c = Math.min(nbtTagList.tagCount(), SLOT_COUNT); + for (int i = 0; i < c; i++) { + NBTTagCompound nbtTagCompound = nbtTagList.getCompoundTagAt(i); + FluidStack fluidStack = GTUtility.loadFluid(nbtTagCompound); + storedFluids[i] = fluidStack; + + if (nbtTagCompound.hasKey("informationAmount")) { + int informationAmount = nbtTagCompound.getInteger("informationAmount"); + storedInformationFluids[i] = GTUtility.copyAmount(informationAmount, fluidStack); + } + } + } + + minAutoPullAmount = aNBT.getInteger("minAmount"); + autoPullFluidList = aNBT.getBoolean("autoPull"); + additionalConnection = aNBT.getBoolean("additionalConnection"); + expediteRecipeCheck = aNBT.getBoolean("expediteRecipeCheck"); + if (aNBT.hasKey("refreshTime")) { + autoPullRefreshTime = aNBT.getInteger("refreshTime"); + } + getProxy().readFromNBT(aNBT); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (!autoPullAvailable) { + return; + } + + setAutoPullFluidList(!autoPullFluidList); + aPlayer.addChatMessage( + new ChatComponentTranslation( + "GT5U.machines.stocking_hatch.auto_pull_toggle." + (autoPullFluidList ? "enabled" : "disabled"))); + } + + @Override + public String getCopiedDataIdentifier(EntityPlayer player) { + return COPIED_DATA_IDENTIFIER; + } + + @Override + public boolean pasteCopiedData(EntityPlayer player, NBTTagCompound nbt) { + if (nbt == null || !COPIED_DATA_IDENTIFIER.equals(nbt.getString("type"))) return false; + + if (autoPullAvailable) { + setAutoPullFluidList(nbt.getBoolean("autoPull")); + minAutoPullAmount = nbt.getInteger("minAmount"); + autoPullRefreshTime = nbt.getInteger("refreshTime"); + } + additionalConnection = nbt.getBoolean("additionalConnection"); + + if (!autoPullFluidList) { + NBTTagList stockingFluids = nbt.getTagList("fluidsToStock", 10); + for (int i = 0; i < stockingFluids.tagCount(); i++) { + storedFluids[i] = GTUtility.loadFluid(stockingFluids.getCompoundTagAt(i)); + } + } + return true; + } + + @Override + public NBTTagCompound getCopiedData(EntityPlayer player) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setString("type", COPIED_DATA_IDENTIFIER); + tag.setBoolean("autoPull", autoPullFluidList); + tag.setInteger("minAmount", minAutoPullAmount); + tag.setBoolean("additionalConnection", additionalConnection); + tag.setInteger("refreshTime", autoPullRefreshTime); + + NBTTagList stockingFluids = new NBTTagList(); + if (!autoPullFluidList) { + for (int index = 0; index < SLOT_COUNT; index++) { + FluidStack fluidStack = storedFluids[index]; + if (fluidStack == null) { + continue; + } + stockingFluids.appendTag(fluidStack.writeToNBT(new NBTTagCompound())); + } + tag.setTag("fluidsToStock", stockingFluids); + } + return tag; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + if (!(aPlayer instanceof EntityPlayerMP)) + return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + ItemStack dataStick = aPlayer.inventory.getCurrentItem(); + if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) + return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + + if (!pasteCopiedData(aPlayer, dataStick.stackTagCompound)) return false; + + updateValidGridProxySides(); + aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.stocking_bus.loaded")); + return true; + } + + @Override + public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (!(aPlayer instanceof EntityPlayerMP)) return; + + ItemStack dataStick = aPlayer.inventory.getCurrentItem(); + if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) return; + + dataStick.stackTagCompound = getCopiedData(aPlayer); + dataStick.setStackDisplayName("Stocking Input Hatch Configuration"); + aPlayer.addChatMessage(new ChatComponentTranslation("GT5U.machines.stocking_bus.saved")); + } + + @Override + public void onExplosion() { + for (int i = 0; i < SLOT_COUNT; i++) { + mInventory[i] = null; + } + } + + public boolean containsSuchStack(FluidStack tStack) { + for (int i = 0; i < 16; ++i) { + if (GTUtility.areFluidsEqual(storedFluids[i], tStack, false)) { + return true; + } + } + return false; + } + + @Override + public int getGUIHeight() { + return 179; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + if (autoPullAvailable) { + buildContext.addSyncedWindow(CONFIG_WINDOW_ID, this::createStackSizeConfigurationWindow); + } + + builder.widget( + SlotGroup.ofFluidTanks( + IntStream.range(0, SLOT_COUNT) + .mapToObj(index -> createTankForFluidStack(storedFluids, index, 1)) + .collect(Collectors.toList()), + 4) + .phantom(true) + .widgetCreator((slotIndex, h) -> (FluidSlotWidget) new FluidSlotWidget(h) { + + @Override + protected void tryClickPhantom(ClickData clickData, ItemStack cursorStack) { + if (clickData.mouseButton != 0 || autoPullFluidList) return; + + FluidStack heldFluid = getFluidForPhantomItem(cursorStack); + if (cursorStack == null) { + storedFluids[slotIndex] = null; + } else { + if (containsSuchStack(heldFluid)) return; + storedFluids[slotIndex] = heldFluid; + } + if (getBaseMetaTileEntity().isServerSide()) { + updateInformationSlot(slotIndex); + detectAndSendChanges(false); + } + } + + @Override + protected void tryScrollPhantom(int direction) {} + + @Override + public IDrawable[] getBackground() { + IDrawable slot; + if (autoPullFluidList) { + slot = GTUITextures.SLOT_DARK_GRAY; + } else { + slot = ModularUITextures.FLUID_SLOT; + } + return new IDrawable[] { slot, GTUITextures.OVERLAY_SLOT_ARROW_ME }; + } + + @Override + public void buildTooltip(List tooltip) { + FluidStack fluid = getContent(); + if (fluid != null) { + addFluidNameInfo(tooltip, fluid); + + if (!autoPullFluidList) { + tooltip.add(Text.localised("modularui.phantom.single.clear")); + } + } else { + tooltip.add( + Text.localised("modularui.fluid.empty") + .format(EnumChatFormatting.WHITE)); + } + + if (autoPullFluidList) { + tooltip.add(Text.localised("GT5U.machines.stocking_bus.cannot_set_slot")); + } + } + }.setUpdateTooltipEveryTick(true)) + .build() + .setPos(new Pos2d(7, 9))); + + builder.widget( + SlotGroup.ofFluidTanks( + IntStream.range(0, SLOT_COUNT) + .mapToObj(index -> createTankForFluidStack(storedInformationFluids, index, Integer.MAX_VALUE)) + .collect(Collectors.toList()), + 4) + .phantom(true) + .widgetCreator((slotIndex, h) -> (FluidSlotWidget) new FluidSlotWidget(h) { + + @Override + protected void tryClickPhantom(ClickData clickData, ItemStack cursorStack) {} + + @Override + protected void tryScrollPhantom(int direction) {} + + @Override + public void buildTooltip(List tooltip) { + FluidStack fluid = getContent(); + if (fluid != null) { + addFluidNameInfo(tooltip, fluid); + tooltip.add(Text.localised("modularui.fluid.phantom.amount", fluid.amount)); + addAdditionalFluidInfo(tooltip, fluid); + if (!Interactable.hasShiftDown()) { + tooltip.add(Text.EMPTY); + tooltip.add(Text.localised("modularui.tooltip.shift")); + } + } else { + tooltip.add( + Text.localised("modularui.fluid.empty") + .format(EnumChatFormatting.WHITE)); + } + } + }.setUpdateTooltipEveryTick(true)) + .background(GTUITextures.SLOT_DARK_GRAY) + .controlsAmount(true) + .build() + .setPos(new Pos2d(97, 9))); + + if (autoPullAvailable) { + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (clickData.mouseButton == 0) { + setAutoPullFluidList(!autoPullFluidList); + } else if (clickData.mouseButton == 1 && !widget.isClient()) { + widget.getContext() + .openSyncedWindow(CONFIG_WINDOW_ID); + } + }) + .setPlayClickSound(true) + .setBackground(() -> { + if (autoPullFluidList) { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED, + GTUITextures.OVERLAY_BUTTON_AUTOPULL_ME }; + } else { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD, + GTUITextures.OVERLAY_BUTTON_AUTOPULL_ME_DISABLED }; + } + }) + .addTooltips( + Arrays.asList( + StatCollector.translateToLocal("GT5U.machines.stocking_hatch.auto_pull.tooltip.1"), + StatCollector.translateToLocal("GT5U.machines.stocking_hatch.auto_pull.tooltip.2"))) + .setSize(16, 16) + .setPos(80, 10)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> autoPullFluidList, this::setAutoPullFluidList)); + } + + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_ARROW_DOUBLE) + .setPos(82, 30) + .setSize(12, 12)) + .widget(TextWidget.dynamicString(() -> { + boolean isActive = isActive(); + boolean isPowered = isPowered(); + boolean isBooting = isBooting(); + EnumChatFormatting color = (isActive && isPowered) ? EnumChatFormatting.GREEN + : EnumChatFormatting.DARK_RED; + return color + WailaText.getPowerState(isActive, isPowered, isBooting); + }) + .setTextAlignment(Alignment.Center) + .setSize(90, 9) + .setPos(43, 84)); + } + + private FluidStackTank createTankForFluidStack(FluidStack[] fluidStacks, int slotIndex, int capacity) { + return new FluidStackTank(() -> fluidStacks[slotIndex], (stack) -> { + if (getBaseMetaTileEntity().isServerSide()) { + return; + } + + fluidStacks[slotIndex] = stack; + }, capacity); + } + + protected ModularWindow createStackSizeConfigurationWindow(final EntityPlayer player) { + final int WIDTH = 78; + final int HEIGHT = 115; + final int PARENT_WIDTH = getGUIWidth(); + final int PARENT_HEIGHT = getGUIHeight(); + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.setPos( + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) + .add( + Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) + .add(WIDTH - 3, 0))); + builder.widget( + TextWidget.localised("GT5U.machines.stocking_hatch.min_amount") + .setPos(3, 2) + .setSize(74, 14)) + .widget( + new NumericWidget().setSetter(val -> minAutoPullAmount = (int) val) + .setGetter(() -> minAutoPullAmount) + .setBounds(1, Integer.MAX_VALUE) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(70, 18) + .setPos(3, 18) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)); + builder.widget( + TextWidget.localised("GT5U.machines.stocking_bus.refresh_time") + .setPos(3, 42) + .setSize(74, 14)) + .widget( + new NumericWidget().setSetter(val -> autoPullRefreshTime = (int) val) + .setGetter(() -> autoPullRefreshTime) + .setBounds(1, Integer.MAX_VALUE) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(70, 18) + .setPos(3, 58) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)); + builder.widget( + TextWidget.localised("GT5U.machines.stocking_bus.force_check") + .setPos(3, 88) + .setSize(50, 14)) + .widget( + new CycleButtonWidget().setToggle(() -> expediteRecipeCheck, val -> setRecipeCheck(val)) + .setTextureGetter( + state -> expediteRecipeCheck ? GTUITextures.OVERLAY_BUTTON_CHECKMARK + : GTUITextures.OVERLAY_BUTTON_CROSS) + .setBackground(GTUITextures.BUTTON_STANDARD) + .setPos(53, 87) + .setSize(16, 16) + .addTooltip(StatCollector.translateToLocal("GT5U.machines.stocking_bus.hatch_warning"))); + return builder.build(); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) + .setSize(17, 17) + .setPos(80, 63)); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + if (!autoPullAvailable) { + super.getWailaBody(itemStack, currenttip, accessor, config); + return; + } + + NBTTagCompound tag = accessor.getNBTData(); + boolean autopull = tag.getBoolean("autoPull"); + int minSize = tag.getInteger("minAmount"); + currenttip.add( + StatCollector.translateToLocal("GT5U.waila.stocking_bus.auto_pull." + (autopull ? "enabled" : "disabled"))); + if (autopull) { + currenttip.add( + StatCollector.translateToLocalFormatted( + "GT5U.waila.stocking_hatch.min_amount", + GTUtility.formatNumbers(minSize))); + } + super.getWailaBody(itemStack, currenttip, accessor, config); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + if (!autoPullAvailable) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + return; + } + + tag.setBoolean("autoPull", autoPullFluidList); + tag.setInteger("minAmount", minAutoPullAmount); + super.getWailaNBTData(player, tile, tag, world, x, y, z); + } + + private static String[] getDescriptionArray(boolean autoPullAvailable) { + List strings = new ArrayList<>(8); + strings.add("Advanced fluid input for Multiblocks"); + strings.add("Hatch Tier: " + TIER_COLORS[autoPullAvailable ? 10 : 8] + VN[autoPullAvailable ? 10 : 8]); + strings.add("Retrieves directly from ME"); + strings.add("Keeps 16 fluid types in stock"); + + if (autoPullAvailable) { + strings.add( + "Auto-Pull from ME mode will automatically stock the first 16 fluid in the ME system, updated every 5 seconds."); + strings.add("Toggle by right-clicking with screwdriver, or use the GUI."); + strings.add( + "Use the GUI to limit the minimum stack size for Auto-Pulling, adjust the slot refresh timer and enable fast recipe checks."); + strings.add("WARNING: Fast recipe checks can be laggy. Use with caution."); + } + + strings.add("Change ME connection behavior by right-clicking with wire cutter."); + strings.add("Configuration data can be copy+pasted using a data stick."); + return strings.toArray(new String[0]); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputBusME.java b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputBusME.java new file mode 100644 index 0000000000..969d9c6c05 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputBusME.java @@ -0,0 +1,378 @@ +package gregtech.common.tileentities.machines; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_HATCH; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_HATCH_ACTIVE; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; + +import appeng.api.AEApi; +import appeng.api.implementations.IPowerChannelState; +import appeng.api.networking.GridFlags; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.security.MachineSource; +import appeng.api.storage.IMEMonitor; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; +import appeng.api.util.AECableType; +import appeng.items.storage.ItemBasicStorageCell; +import appeng.me.GridAccessException; +import appeng.me.helpers.AENetworkProxy; +import appeng.me.helpers.IGridProxyable; +import appeng.util.IWideReadableNumberConverter; +import appeng.util.Platform; +import appeng.util.ReadableNumberConverter; +import gregtech.GTMod; +import gregtech.api.enums.ItemList; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTEHatchOutputBusME extends MTEHatchOutputBus implements IPowerChannelState { + + private long baseCapacity = 1_600; + + private BaseActionSource requestSource = null; + private @Nullable AENetworkProxy gridProxy = null; + final IItemList itemCache = AEApi.instance() + .storage() + .createItemList(); + long lastOutputTick = 0; + long lastInputTick = 0; + long tickCounter = 0; + boolean additionalConnection = false; + + public MTEHatchOutputBusME(int aID, String aName, String aNameRegional) { + super( + aID, + aName, + aNameRegional, + 3, + new String[] { "Item Output for Multiblocks", "Stores directly into ME", "Can cache 1600 items by default", + "Change cache size by inserting a storage cell", + "Change ME connection behavior by right-clicking with wire cutter" }, + 1); + } + + public MTEHatchOutputBusME(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchOutputBusME(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_HATCH_ACTIVE) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_HATCH) }; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + getProxy().onReady(); + } + + @Override + public boolean storeAll(ItemStack aStack) { + aStack.stackSize = store(aStack); + return aStack.stackSize == 0; + } + + private long getCachedAmount() { + long itemAmount = 0; + for (IAEItemStack item : itemCache) { + itemAmount += item.getStackSize(); + } + return itemAmount; + } + + private long getCacheCapacity() { + ItemStack upgradeItemStack = mInventory[0]; + if (upgradeItemStack != null && upgradeItemStack.getItem() instanceof ItemBasicStorageCell) { + return ((ItemBasicStorageCell) upgradeItemStack.getItem()).getBytesLong(upgradeItemStack) * 8; + } + return baseCapacity; + } + + /** + * Check if the internal cache can still fit more items in it + */ + public boolean canAcceptItem() { + if (getCachedAmount() < getCacheCapacity()) { + return true; + } + return false; + } + + /** + * Attempt to store items in connected ME network. Returns how many items did not fit (if the network was down e.g.) + * + * @param stack input stack + * @return amount of items left over + */ + public int store(final ItemStack stack) { + // Always allow insertion on the same tick so we can output the entire recipe + if (canAcceptItem() || (lastInputTick == tickCounter)) { + itemCache.add( + AEApi.instance() + .storage() + .createItemStack(stack)); + lastInputTick = tickCounter; + return 0; + } + return stack.stackSize; + } + + private BaseActionSource getRequest() { + if (requestSource == null) requestSource = new MachineSource((IActionHost) getBaseMetaTileEntity()); + return requestSource; + } + + @Override + public AECableType getCableConnectionType(ForgeDirection forgeDirection) { + return isOutputFacing(forgeDirection) ? AECableType.SMART : AECableType.NONE; + } + + private void updateValidGridProxySides() { + if (additionalConnection) { + getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); + } else { + getProxy().setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); + } + } + + @Override + public void onFacingChange() { + updateValidGridProxySides(); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) + .isGUIClickable()) return; + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + additionalConnection = !additionalConnection; + updateValidGridProxySides(); + aPlayer.addChatComponentMessage( + new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection)); + return true; + } + + @Override + public AENetworkProxy getProxy() { + if (gridProxy == null) { + if (getBaseMetaTileEntity() instanceof IGridProxyable) { + gridProxy = new AENetworkProxy( + (IGridProxyable) getBaseMetaTileEntity(), + "proxy", + ItemList.Hatch_Output_Bus_ME.get(1), + true); + gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); + updateValidGridProxySides(); + if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner( + getBaseMetaTileEntity().getWorld() + .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); + } + } + return this.gridProxy; + } + + private void flushCachedStack() { + AENetworkProxy proxy = getProxy(); + if (proxy == null) { + return; + } + try { + IMEMonitor sg = proxy.getStorage() + .getItemInventory(); + for (IAEItemStack s : itemCache) { + if (s.getStackSize() == 0) continue; + IAEItemStack rest = Platform.poweredInsert(proxy.getEnergy(), sg, s, getRequest()); + if (rest != null && rest.getStackSize() > 0) { + s.setStackSize(rest.getStackSize()); + break; + } + s.setStackSize(0); + } + } catch (final GridAccessException ignored) { + + } + lastOutputTick = tickCounter; + } + + @Override + public boolean isPowered() { + return getProxy() != null && getProxy().isPowered(); + } + + @Override + public boolean isActive() { + return getProxy() != null && getProxy().isActive(); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (getBaseMetaTileEntity().isServerSide()) { + tickCounter = aTick; + if (tickCounter > (lastOutputTick + 40)) flushCachedStack(); + if (tickCounter % 20 == 0) getBaseMetaTileEntity().setActive(isActive()); + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { + + if (stack.hasTagCompound() && stack.stackTagCompound.hasKey("baseCapacity")) { + tooltip.add( + "Current cache capacity: " + EnumChatFormatting.YELLOW + + ReadableNumberConverter.INSTANCE + .toWideReadableForm(stack.stackTagCompound.getLong("baseCapacity"))); + } + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + super.setItemNBT(aNBT); + aNBT.setLong("baseCapacity", baseCapacity); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + + NBTTagList items = new NBTTagList(); + for (IAEItemStack s : itemCache) { + if (s.getStackSize() == 0) continue; + NBTTagCompound tag = new NBTTagCompound(); + tag.setTag("itemStack", GTUtility.saveItem(s.getItemStack())); + tag.setLong("size", s.getStackSize()); + items.appendTag(tag); + } + aNBT.setBoolean("additionalConnection", additionalConnection); + aNBT.setTag("cachedItems", items); + aNBT.setLong("baseCapacity", baseCapacity); + getProxy().writeToNBT(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + + NBTBase t = aNBT.getTag("cachedStack"); // legacy + if (t instanceof NBTTagCompound) itemCache.add( + AEApi.instance() + .storage() + .createItemStack(GTUtility.loadItem((NBTTagCompound) t))); + t = aNBT.getTag("cachedItems"); + if (t instanceof NBTTagList l) { + for (int i = 0; i < l.tagCount(); ++i) { + NBTTagCompound tag = l.getCompoundTagAt(i); + if (!tag.hasKey("itemStack")) { // legacy #868 + itemCache.add( + AEApi.instance() + .storage() + .createItemStack(GTUtility.loadItem(l.getCompoundTagAt(i)))); + continue; + } + NBTTagCompound tagItemStack = tag.getCompoundTag("itemStack"); + final IAEItemStack s = AEApi.instance() + .storage() + .createItemStack(GTUtility.loadItem(tagItemStack)); + if (s != null) { + s.setStackSize(tag.getLong("size")); + itemCache.add(s); + } else { + GTMod.GT_FML_LOGGER.warn( + "An error occurred while loading contents of ME Output Bus. This item has been voided: " + + tagItemStack); + } + } + } + additionalConnection = aNBT.getBoolean("additionalConnection"); + baseCapacity = aNBT.getLong("baseCapacity"); + // Set the base capacity of existing hatches to be infinite + if (baseCapacity == 0) { + baseCapacity = Long.MAX_VALUE; + } + getProxy().readFromNBT(aNBT); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + List ss = new ArrayList<>(); + ss.add( + "The bus is " + ((getProxy() != null && getProxy().isActive()) ? EnumChatFormatting.GREEN + "online" + : EnumChatFormatting.RED + "offline" + getAEDiagnostics()) + EnumChatFormatting.RESET); + IWideReadableNumberConverter nc = ReadableNumberConverter.INSTANCE; + ss.add("Item cache capacity: " + nc.toWideReadableForm(getCacheCapacity())); + if (itemCache.isEmpty()) { + ss.add("The bus has no cached items"); + } else { + ss.add(String.format("The bus contains %d cached stacks: ", itemCache.size())); + int counter = 0; + for (IAEItemStack s : itemCache) { + ss.add( + s.getItem() + .getItemStackDisplayName(s.getItemStack()) + ": " + + EnumChatFormatting.GOLD + + nc.toWideReadableForm(s.getStackSize()) + + EnumChatFormatting.RESET); + if (++counter > 100) break; + } + } + return ss.toArray(new String[itemCache.size() + 2]); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + getBaseMetaTileEntity().add1by1Slot(builder); + } + + @Override + public boolean acceptsItemLock() { + return false; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java new file mode 100644 index 0000000000..5983a2d32a --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/MTEHatchOutputME.java @@ -0,0 +1,443 @@ +package gregtech.common.tileentities.machines; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_FLUID_HATCH; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ME_FLUID_HATCH_ACTIVE; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.glodblock.github.common.item.FCBaseItemCell; +import com.glodblock.github.common.storage.IStorageFluidCell; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; + +import appeng.api.AEApi; +import appeng.api.config.Actionable; +import appeng.api.config.PowerMultiplier; +import appeng.api.implementations.IPowerChannelState; +import appeng.api.networking.GridFlags; +import appeng.api.networking.energy.IEnergySource; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.networking.security.IActionHost; +import appeng.api.networking.security.MachineSource; +import appeng.api.networking.security.PlayerSource; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.IMEMonitor; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IItemList; +import appeng.api.util.AECableType; +import appeng.core.stats.Stats; +import appeng.me.GridAccessException; +import appeng.me.helpers.AENetworkProxy; +import appeng.me.helpers.IGridProxyable; +import appeng.util.IWideReadableNumberConverter; +import appeng.util.ReadableNumberConverter; +import gregtech.GTMod; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTEHatchOutputME extends MTEHatchOutput implements IPowerChannelState { + + private long baseCapacity = 128_000; + + private BaseActionSource requestSource = null; + private @Nullable AENetworkProxy gridProxy = null; + final IItemList fluidCache = AEApi.instance() + .storage() + .createFluidList(); + long lastOutputTick = 0; + long lastInputTick = 0; + long tickCounter = 0; + boolean additionalConnection = false; + + public MTEHatchOutputME(int aID, String aName, String aNameRegional) { + super( + aID, + aName, + aNameRegional, + 3, + new String[] { "Fluid Output for Multiblocks", "Stores directly into ME", + "Can cache up to 128kL of fluids by default", "Change cache size by inserting a fluid storage cell", + "Change ME connection behavior by right-clicking with wire cutter" }, + 1); + } + + public MTEHatchOutputME(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchOutputME(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_FLUID_HATCH_ACTIVE) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_ME_FLUID_HATCH) }; + } + + @Override + public byte getTierForStructure() { + return (byte) (GTValues.V.length - 2); + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + getProxy().onReady(); + } + + @Override + public int fill(FluidStack aFluid, boolean doFill) { + if (doFill) { + return tryFillAE(aFluid); + } else { + if (aFluid == null) return 0; + return aFluid.amount; + } + } + + @Override + public int getCapacity() { + return 0; + } + + private long getCachedAmount() { + long fluidAmount = 0; + for (IAEFluidStack fluid : fluidCache) { + fluidAmount += fluid.getStackSize(); + } + return fluidAmount; + } + + private long getCacheCapacity() { + ItemStack upgradeItemStack = mInventory[0]; + if (upgradeItemStack != null && upgradeItemStack.getItem() instanceof IStorageFluidCell) { + return ((FCBaseItemCell) upgradeItemStack.getItem()).getBytes(upgradeItemStack) * 2048; + } + return baseCapacity; + } + + /** + * Check if the internal cache can still fit more fluids in it + */ + public boolean canAcceptFluid() { + if (getCachedAmount() < getCacheCapacity()) { + return true; + } + return false; + } + + /** + * Attempt to store fluid in connected ME network. Returns how much fluid is accepted (if the network was down e.g.) + * + * @param aFluid input fluid + * @return amount of fluid filled + */ + public int tryFillAE(final FluidStack aFluid) { + if (aFluid == null) return 0; + // Always allow insertion on the same tick so we can output the entire recipe + if (canAcceptFluid() || (lastInputTick == tickCounter)) { + fluidCache.add( + AEApi.instance() + .storage() + .createFluidStack(aFluid)); + lastInputTick = tickCounter; + return aFluid.amount; + } + return 0; + } + + private BaseActionSource getRequest() { + if (requestSource == null) requestSource = new MachineSource((IActionHost) getBaseMetaTileEntity()); + return requestSource; + } + + @Override + public AECableType getCableConnectionType(ForgeDirection side) { + return isOutputFacing(side) ? AECableType.SMART : AECableType.NONE; + } + + private void updateValidGridProxySides() { + if (additionalConnection) { + getProxy().setValidSides(EnumSet.complementOf(EnumSet.of(ForgeDirection.UNKNOWN))); + } else { + getProxy().setValidSides(EnumSet.of(getBaseMetaTileEntity().getFrontFacing())); + } + } + + @Override + public void onFacingChange() { + updateValidGridProxySides(); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + // Don't allow to lock fluid in me fluid hatch + if (!getBaseMetaTileEntity().getCoverInfoAtSide(side) + .isGUIClickable()) return; + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + additionalConnection = !additionalConnection; + updateValidGridProxySides(); + aPlayer.addChatComponentMessage( + new ChatComponentTranslation("GT5U.hatch.additionalConnection." + additionalConnection)); + return true; + } + + @Override + public AENetworkProxy getProxy() { + if (gridProxy == null) { + if (getBaseMetaTileEntity() instanceof IGridProxyable) { + gridProxy = new AENetworkProxy( + (IGridProxyable) getBaseMetaTileEntity(), + "proxy", + ItemList.Hatch_Output_ME.get(1), + true); + gridProxy.setFlags(GridFlags.REQUIRE_CHANNEL); + updateValidGridProxySides(); + if (getBaseMetaTileEntity().getWorld() != null) gridProxy.setOwner( + getBaseMetaTileEntity().getWorld() + .getPlayerEntityByName(getBaseMetaTileEntity().getOwnerName())); + } + } + return this.gridProxy; + } + + private void flushCachedStack() { + if (fluidCache.isEmpty()) return; + AENetworkProxy proxy = getProxy(); + if (proxy == null) { + return; + } + try { + IMEMonitor sg = proxy.getStorage() + .getFluidInventory(); + for (IAEFluidStack s : fluidCache) { + if (s.getStackSize() == 0) continue; + IAEFluidStack rest = fluidAEInsert(proxy.getEnergy(), sg, s, getRequest()); + if (rest != null && rest.getStackSize() > 0) { + s.setStackSize(rest.getStackSize()); + continue; + } + s.setStackSize(0); + } + } catch (final GridAccessException ignored) {} + lastOutputTick = tickCounter; + } + + @Override + public boolean isPowered() { + return getProxy() != null && getProxy().isPowered(); + } + + @Override + public boolean isActive() { + return getProxy() != null && getProxy().isActive(); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (getBaseMetaTileEntity().isServerSide()) { + tickCounter = aTick; + if (tickCounter > (lastOutputTick + 40)) flushCachedStack(); + if (tickCounter % 20 == 0) getBaseMetaTileEntity().setActive(isActive()); + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { + + if (stack.hasTagCompound() && stack.stackTagCompound.hasKey("baseCapacity")) { + tooltip.add( + "Current cache capacity: " + EnumChatFormatting.YELLOW + + ReadableNumberConverter.INSTANCE + .toWideReadableForm(stack.stackTagCompound.getLong("baseCapacity")) + + "L"); + } + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + super.setItemNBT(aNBT); + aNBT.setLong("baseCapacity", baseCapacity); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + NBTTagList fluids = new NBTTagList(); + for (IAEFluidStack s : fluidCache) { + if (s.getStackSize() == 0) continue; + NBTTagCompound tag = new NBTTagCompound(); + NBTTagCompound tagFluidStack = new NBTTagCompound(); + s.getFluidStack() + .writeToNBT(tagFluidStack); + tag.setTag("fluidStack", tagFluidStack); + tag.setLong("size", s.getStackSize()); + fluids.appendTag(tag); + } + aNBT.setTag("cachedFluids", fluids); + aNBT.setBoolean("additionalConnection", additionalConnection); + aNBT.setLong("baseCapacity", baseCapacity); + getProxy().writeToNBT(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + NBTBase t = aNBT.getTag("cachedFluids"); + if (t instanceof NBTTagList l) { + for (int i = 0; i < l.tagCount(); ++i) { + NBTTagCompound tag = l.getCompoundTagAt(i); + NBTTagCompound tagFluidStack = tag.getCompoundTag("fluidStack"); + final IAEFluidStack s = AEApi.instance() + .storage() + .createFluidStack(GTUtility.loadFluid(tagFluidStack)); + if (s != null) { + s.setStackSize(tag.getLong("size")); + fluidCache.add(s); + } else { + GTMod.GT_FML_LOGGER.warn( + "An error occurred while loading contents of ME Output Hatch. This fluid has been voided: " + + tagFluidStack); + } + } + } + additionalConnection = aNBT.getBoolean("additionalConnection"); + baseCapacity = aNBT.getLong("baseCapacity"); + // Set the base capacity of existing hatches to be infinite + if (baseCapacity == 0) { + baseCapacity = Long.MAX_VALUE; + } + getProxy().readFromNBT(aNBT); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + List ss = new ArrayList<>(); + ss.add( + "The hatch is " + ((getProxy() != null && getProxy().isActive()) ? EnumChatFormatting.GREEN + "online" + : EnumChatFormatting.RED + "offline" + getAEDiagnostics()) + EnumChatFormatting.RESET); + IWideReadableNumberConverter nc = ReadableNumberConverter.INSTANCE; + ss.add("Fluid cache capacity: " + nc.toWideReadableForm(getCacheCapacity()) + " mB"); + if (fluidCache.isEmpty()) { + ss.add("The bus has no cached fluids"); + } else { + ss.add(String.format("The hatch contains %d cached fluids: ", fluidCache.size())); + int counter = 0; + for (IAEFluidStack s : fluidCache) { + ss.add( + s.getFluidStack() + .getLocalizedName() + ": " + + EnumChatFormatting.GOLD + + nc.toWideReadableForm(s.getStackSize()) + + " mB" + + EnumChatFormatting.RESET); + if (++counter > 100) break; + } + } + return ss.toArray(new String[fluidCache.size() + 2]); + } + + public static IAEFluidStack fluidAEInsert(final IEnergySource energy, final IMEInventory cell, + final IAEFluidStack input, final BaseActionSource src) { + final IAEFluidStack possible = cell.injectItems(input.copy(), Actionable.SIMULATE, src); + + long stored = input.getStackSize(); + if (possible != null) { + stored -= possible.getStackSize(); + } + // 1000 mb fluid will be considered as 1 item + long power = Math.max(1, stored / 1000); + + final double availablePower = energy.extractAEPower(power, Actionable.SIMULATE, PowerMultiplier.CONFIG); + + final long itemToAdd = Math.min((long) (availablePower + 0.9) * 1000, stored); + + if (itemToAdd > 0) { + energy.extractAEPower(power, Actionable.MODULATE, PowerMultiplier.CONFIG); + + if (itemToAdd < input.getStackSize()) { + final long original = input.getStackSize(); + final IAEFluidStack split = input.copy(); + split.decStackSize(itemToAdd); + input.setStackSize(itemToAdd); + split.add(cell.injectItems(input, Actionable.MODULATE, src)); + + if (src.isPlayer()) { + final long diff = original - split.getStackSize(); + Stats.ItemsInserted.addToPlayer(((PlayerSource) src).player, (int) diff); + } + + return split; + } + + final IAEFluidStack ret = cell.injectItems(input, Actionable.MODULATE, src); + + if (src.isPlayer()) { + final long diff = ret == null ? input.getStackSize() : input.getStackSize() - ret.getStackSize(); + Stats.ItemsInserted.addToPlayer(((PlayerSource) src).player, (int) diff); + } + + return ret; + } + + return input; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + getBaseMetaTileEntity().add1by1Slot(builder); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_AdvSeismicProspector.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_AdvSeismicProspector.java deleted file mode 100644 index 78ed9982fc..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_AdvSeismicProspector.java +++ /dev/null @@ -1,309 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_GLOW; -import static gregtech.common.GT_UndergroundOil.undergroundOilReadInformation; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.objects.ItemData; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_TileEntity_Ores; -import ic2.core.Ic2Items; - -public class GT_MetaTileEntity_AdvSeismicProspector extends GT_MetaTileEntity_BasicMachine { - - boolean ready = false; - final int radius; - final int step; - int cX; - int cZ; - - public GT_MetaTileEntity_AdvSeismicProspector(int aID, String aName, String aNameRegional, int aTier, int aRadius, - int aStep) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, // amperage - "", - 1, // input slot count - 1, // output slot count - TextureFactory.of( - TextureFactory.of(OVERLAY_SIDE_ROCK_BREAKER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_ROCK_BREAKER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_SIDE_ROCK_BREAKER), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_ROCK_BREAKER_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_ROCK_BREAKER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_ROCK_BREAKER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_ROCK_BREAKER), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_ROCK_BREAKER_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ROCK_BREAKER_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_BOTTOM_ROCK_BREAKER), - TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_ROCK_BREAKER_GLOW) - .glow() - .build())); - radius = aRadius; - step = aStep; - } - - @Override - public String[] getDescription() { - return new String[] { "Place, activate with explosives", - "2 Powderbarrels, " + "4 Glyceryl Trinitrate, " + "16 TNT, or " + "8 ITNT", - "Use Data Stick, Scan Data Stick, Print Data Stick, Bind Pages into Book", - "Ore prospecting area = " + radius * 2 + "x" + radius * 2 + " ONLY blocks below prospector", - "Oil prospecting area 3x3 oilfields, each is 8x8 chunks" }; - } - - protected GT_MetaTileEntity_AdvSeismicProspector(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures, int aRadius, int aStep) { - super(aName, aTier, 1, aDescription, aTextures, 1, 1); - radius = aRadius; - step = aStep; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_AdvSeismicProspector( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures, - this.radius, - this.step); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isServerSide()) { - ItemStack aStack = aPlayer.getCurrentEquippedItem(); - - if (!ready && (GT_Utility.consumeItems(aPlayer, aStack, Item.getItemFromBlock(Blocks.tnt), 16) - || GT_Utility.consumeItems(aPlayer, aStack, Ic2Items.industrialTnt.getItem(), 8) - || GT_Utility.consumeItems(aPlayer, aStack, Materials.Glyceryl, 4) - || GT_Utility.consumeItems(aPlayer, aStack, ItemList.Block_Powderbarrel.getItem(), 2))) { - - this.ready = true; - this.mMaxProgresstime = (aPlayer.capabilities.isCreativeMode ? 20 : 800); - - } else if (ready && mMaxProgresstime == 0 - && aStack != null - && aStack.stackSize == 1 - && aStack.getItem() == ItemList.Tool_DataStick.getItem()) { - this.ready = false; - - // prospecting ores - HashMap tOres = new HashMap<>(36); - - prospectOres(tOres); - - // prospecting oils - ArrayList tOils = new ArrayList<>(); - prospectOils(tOils); - - GT_Utility.ItemNBT.setAdvancedProspectionData( - mTier, - aStack, - this.getBaseMetaTileEntity() - .getXCoord(), - this.getBaseMetaTileEntity() - .getYCoord(), - this.getBaseMetaTileEntity() - .getZCoord(), - this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId, - tOils, - GT_Utility.sortByValueToList(tOres), - radius); - } - } - - return true; - } - - private void prospectOils(ArrayList aOils) { - - int xChunk = (getBaseMetaTileEntity().getXCoord() >> 7) << 3; // oil field aligned chunk coords - int zChunk = (getBaseMetaTileEntity().getZCoord() >> 7) << 3; - - LinkedHashMap tFluids = new LinkedHashMap<>(); - int oilFieldCount = 0; - - try { - final int oilfieldSize = 8; - for (int z = -1; z <= 1; ++z) { - for (int x = -1; x <= 1; ++x) { - ChunkCoordIntPair cInts = new ChunkCoordIntPair(x, z); - int min = Integer.MAX_VALUE; - int max = Integer.MIN_VALUE; - - for (int i = 0; i < oilfieldSize; i++) { - for (int j = 0; j < oilfieldSize; j++) { - Chunk tChunk = getBaseMetaTileEntity().getWorld() - .getChunkFromChunkCoords(xChunk + i + x * oilfieldSize, zChunk + j + z * oilfieldSize); - FluidStack tFluid = undergroundOilReadInformation(tChunk); - if (tFluid != null) { - if (tFluid.amount > max) max = tFluid.amount; - if (tFluid.amount < min) min = tFluid.amount; - if (!tFluids.containsKey(cInts)) { - tFluids.put(cInts, tFluid); - } - } - } - } - - aOils.add( - ++oilFieldCount + "," - + min - + "-" - + max - + "," - + tFluids.get(cInts) - .getLocalizedName()); - } - } - } catch (Exception ignored) {} - } - - private void prospectOres(Map aOres) { - int tLeftXBound = this.getBaseMetaTileEntity() - .getXCoord() - radius; - int tRightXBound = tLeftXBound + 2 * radius; - - int tLeftZBound = this.getBaseMetaTileEntity() - .getZCoord() - radius; - int tRightZBound = tLeftZBound + 2 * radius; - - for (int i = tLeftXBound; i <= tRightXBound; i += step) { - if (Math.abs(i >> 4) % 3 != 1) continue; - for (int k = tLeftZBound; k <= tRightZBound; k += step) { - if (Math.abs(k >> 4) % 3 != 1) continue; - - cX = (i >> 4) << 4; - cZ = (k >> 4) << 4; - - String separator = (cX + 8) + "," + (cZ + 8) + " --------"; - aOres.put(separator, 1); - prospectHole(i, k, aOres); - } - } - } - - private void prospectHole(int i, int k, Map aOres) { - String tFoundOre; - for (int j = this.getBaseMetaTileEntity() - .getYCoord(); j > 0; j--) { - tFoundOre = checkForOre(i, j, k); - if (tFoundOre != null) countOre(aOres, tFoundOre, cX, cZ); - } - } - - private String checkForOre(int x, int y, int z) { - Block tBlock = this.getBaseMetaTileEntity() - .getBlock(x, y, z); - - if (tBlock instanceof GT_Block_Ores_Abstract) { - TileEntity tTileEntity = getBaseMetaTileEntity().getWorld() - .getTileEntity(x, y, z); - - if ((tTileEntity instanceof GT_TileEntity_Ores) && (((GT_TileEntity_Ores) tTileEntity).mMetaData < 16000)) { // Filtering - // small - // ores - Materials tMaterial = GregTech_API.sGeneratedMaterials[((GT_TileEntity_Ores) tTileEntity).mMetaData - % 1000]; - - if ((tMaterial != null) && (tMaterial != Materials._NULL)) return tMaterial.mDefaultLocalName; - } - } else { - int tMetaID = getBaseMetaTileEntity().getWorld() - .getBlockMetadata(x, y, z); - ItemStack is = new ItemStack(tBlock, 1, tMetaID); - ItemData association = GT_OreDictUnificator.getAssociation(is); - if ((association != null) && (association.mPrefix.toString() - .startsWith("ore"))) return association.mMaterial.mMaterial.mDefaultLocalName; - else if (GT_Utility.isOre(tBlock, tMetaID)) return tBlock.getLocalizedName(); - } - return null; - } - - private static void countOre(Map map, String ore, int cCX, int cCZ) { - ore = (cCX + 8) + "," + (cCZ + 8) + " has " + ore; - Integer oldCount = map.get(ore); - oldCount = (oldCount == null) ? 0 : oldCount; - - map.put(ore, oldCount + 1); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_BetterJukebox.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_BetterJukebox.java deleted file mode 100644 index f9a9fba8f4..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_BetterJukebox.java +++ /dev/null @@ -1,702 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_JUKEBOX; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_JUKEBOX; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.EnumMap; -import java.util.List; -import java.util.Random; -import java.util.UUID; - -import net.minecraft.item.ItemRecord; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MathHelper; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.ForgeDirection; - -import org.joml.Vector4i; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import com.gtnewhorizons.modularui.common.widget.SliderWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import appeng.api.implementations.tiles.ISoundP2PHandler; -import appeng.me.GridAccessException; -import appeng.me.cache.helpers.TunnelCollection; -import appeng.me.helpers.AENetworkProxy; -import appeng.parts.p2p.PartP2PSound; -import gregtech.api.enums.GTVoltageIndex; -import gregtech.api.enums.GT_Values; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.recipe.BasicUIProperties; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_MusicSystem; -import gregtech.common.gui.modularui.UIHelper; -import it.unimi.dsi.fastutil.objects.ObjectArrayList; - -public class GT_MetaTileEntity_BetterJukebox extends GT_MetaTileEntity_BasicMachine - implements IAddUIWidgets, ISoundP2PHandler { - - // Stored state - public UUID jukeboxUuid = UNSET_UUID; - public boolean loopMode = true; - public boolean shuffleMode = false; - public int playbackSlot = 0; - public float playbackVolume = BalanceMath.VANILLA_JUKEBOX_RANGE; - public float p2pVolume = BalanceMath.VANILLA_JUKEBOX_RANGE; - public long discProgressMs = 0; - /** Makes all music discs play for 4 seconds */ - public boolean superFastDebugMode = false; - // Computed state - private final Vector4i interdimPositionCache = new Vector4i(); // XYZ, Dimension ID - private GT_MusicSystem.MusicSource musicSource = null; - private boolean powered = false; - private long discStartMs = 0; - public long discDurationMs = 1; - private ItemRecord currentlyPlaying = null; - - // Constants - public static final UUID UNSET_UUID = UUID.nameUUIDFromBytes(new byte[] { 0 }); - public static final int INPUT_SLOTS = 21; - private static final Random SHUFFLER = new Random(); - - public enum HeadphoneLimit { - - BLOCK_RANGE, - INSIDE_DIMENSION, - BETWEEN_DIMENSIONS; - - public static final ImmutableList ENTRIES = ImmutableList.copyOf(values()); - } - - public static final class BalanceMath { - - public static int MAX_TIER = GTVoltageIndex.IV; - public static float VANILLA_JUKEBOX_RANGE = 4.0f; // 64 blocks - - private static final float[] LISTENING_VOLUME = new float[] { // - VANILLA_JUKEBOX_RANGE, // ULV (unpowered fallback) - VANILLA_JUKEBOX_RANGE + 1.0f, // LV, 80 blocks - VANILLA_JUKEBOX_RANGE + 2.0f, // MV, 96 blocks - VANILLA_JUKEBOX_RANGE + 4.0f, // HV, 118 blocks - VANILLA_JUKEBOX_RANGE + 5.0f, // EV, 144 blocks - VANILLA_JUKEBOX_RANGE + 6.0f, // IV, 160 blocks, equivalent to default load distance of 10 chunks - }; - - private static final int[] HEADPHONE_BLOCK_RANGE = new int[] { // - 64, // ULV (unpowered fallback) - 128, // LV - 160, // MV - 320, // HV - 9001, // EV, alreadu unlimited here - this value is ignored - 9002, // IV, already unlimited here - this value is ignored - }; - - public static float listeningVolume(int tier) { - tier = MathHelper.clamp_int(tier, 0, MAX_TIER); - return LISTENING_VOLUME[tier]; - } - - public static int headphoneBlockRange(int tier) { - tier = MathHelper.clamp_int(tier, 0, MAX_TIER); - return HEADPHONE_BLOCK_RANGE[tier]; - } - - public static HeadphoneLimit headphoneLimit(int tier) { - if (tier <= GTVoltageIndex.HV) { - return HeadphoneLimit.BLOCK_RANGE; - } else if (tier == GTVoltageIndex.EV) { - return HeadphoneLimit.INSIDE_DIMENSION; - } else { - return HeadphoneLimit.BETWEEN_DIMENSIONS; - } - } - - public static float volumeToAttenuationDistance(float range) { - // SoundManager.playSound logic - return 16.0f * range; - } - - public static float attenuationDistanceToVolume(float blockRange) { - return blockRange / 16.0f; - } - - public static long eutUsage(int tier) { - tier = MathHelper.clamp_int(tier, 0, MAX_TIER); - return V[tier] / 16; - } - } - - private static String[] buildDescription(int aTier) { - ArrayList strings = new ArrayList<>(4); - strings.add("Plays music better than your average vanilla jukebox."); - if (BalanceMath.headphoneLimit(aTier) != HeadphoneLimit.BLOCK_RANGE) { - strings.add(EnumChatFormatting.BLUE + "The raw power of Hatsune Miku in your ears"); - } - strings.add( - String.format( - "Range: %s%.1f blocks", - EnumChatFormatting.WHITE, - BalanceMath.volumeToAttenuationDistance(BalanceMath.listeningVolume(aTier)))); - strings.add(switch (BalanceMath.headphoneLimit(aTier)) { - case BLOCK_RANGE -> String.format( - "Headphone signal range: %s%d blocks", - EnumChatFormatting.WHITE, - BalanceMath.headphoneBlockRange(aTier)); - case INSIDE_DIMENSION -> String - .format("Headphones work anywhere in %sthe same dimension", EnumChatFormatting.WHITE); - case BETWEEN_DIMENSIONS -> String - .format("Headphones work anywhere, in %sany dimension", EnumChatFormatting.WHITE); - }); - strings.add(String.format("Cost: %s%d EU/t", EnumChatFormatting.WHITE, BalanceMath.eutUsage(aTier))); - strings.add(GT_Values.AuthorEigenRaven); - return strings.toArray(new String[0]); - } - - public GT_MetaTileEntity_BetterJukebox(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 1, buildDescription(aTier), INPUT_SLOTS, 1); - playbackVolume = BalanceMath.listeningVolume(aTier); - } - - public GT_MetaTileEntity_BetterJukebox(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures, INPUT_SLOTS, 1); - playbackVolume = BalanceMath.listeningVolume(aTier); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_BetterJukebox(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection == baseMetaTileEntity.getFrontFacing()) { - return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - if (sideDirection != ForgeDirection.UP) { - return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_SIDE_JUKEBOX) }; - } - return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.builder() - .addIcon(OVERLAY_TOP_JUKEBOX) - .extFacing() - .build() }; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - if (aBaseMetaTileEntity.isClientSide()) { - return; - } - final Vector4i interdimPosition = interdimPositionCache; - interdimPosition.x = aBaseMetaTileEntity.getXCoord(); - interdimPosition.y = aBaseMetaTileEntity.getYCoord(); - interdimPosition.z = aBaseMetaTileEntity.getZCoord(); - interdimPosition.w = aBaseMetaTileEntity.getWorld().provider.dimensionId; - if (jukeboxUuid == UNSET_UUID) { - jukeboxUuid = UUID.randomUUID(); - markDirty(); - } - if (musicSource == null) { - musicSource = GT_MusicSystem.ServerSystem.registerOrGetMusicSource(jukeboxUuid); - musicSource.originPosition.set(interdimPosition); - musicSource.headphoneLimit = BalanceMath.headphoneLimit(mTier); - musicSource.headphoneBlockRange = BalanceMath.headphoneBlockRange(mTier); - musicSource.startedPlayingAtMs = System.currentTimeMillis(); - updateEmitterList(); - } - if (doesSlotContainValidRecord(playbackSlot) - && mInventory[playbackSlot].getItem() instanceof ItemRecord record) { - final ResourceLocation resource = record.getRecordResource(record.recordName); - currentlyPlaying = record; - // Assume a safe disc duration of 500 seconds if not known in the registry - discDurationMs = GT_MusicSystem.getMusicRecordDurations() - .getOrDefault(resource, 500_000); - discStartMs = System.currentTimeMillis() - discProgressMs; - musicSource.setRecord( - new ResourceLocation(resource.getResourceDomain(), "records." + resource.getResourcePath()), - discProgressMs); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - try { - if (aBaseMetaTileEntity.isClientSide() || !aBaseMetaTileEntity.isAllowedToWork() || musicSource == null) { - if (currentlyPlaying != null) { - stopCurrentSong(System.currentTimeMillis()); - } - return; - } - final Vector4i interdimPosition = interdimPositionCache; - interdimPosition.x = aBaseMetaTileEntity.getXCoord(); - interdimPosition.y = aBaseMetaTileEntity.getYCoord(); - interdimPosition.z = aBaseMetaTileEntity.getZCoord(); - interdimPosition.w = aBaseMetaTileEntity.getWorld().provider.dimensionId; - final long now = System.currentTimeMillis(); - - if (superFastDebugMode && discDurationMs > 4000) { - discDurationMs = 4000; - } - - // power check - final boolean hasMinimumEU = aBaseMetaTileEntity.isUniversalEnergyStored(getMinimumStoredEU()); - if (currentlyPlaying != null && hasMinimumEU - && aBaseMetaTileEntity.decreaseStoredEnergyUnits(BalanceMath.eutUsage(mTier), false)) { - if (!powered) { // just got power again - powered = true; - musicSource.modified = true; - musicSource.headphoneLimit = BalanceMath.headphoneLimit(mTier); - musicSource.headphoneBlockRange = BalanceMath.headphoneBlockRange(mTier); - updateEmitterList(); - } - } else if ((!hasMinimumEU || currentlyPlaying != null) && powered) { // was powered, but no longer is - powered = false; - musicSource.modified = true; - musicSource.headphoneLimit = HeadphoneLimit.BLOCK_RANGE; - musicSource.headphoneBlockRange = BalanceMath.headphoneBlockRange(0); - updateEmitterList(); - } - - // check if current disc finished - if (currentlyPlaying != null) { - discProgressMs = now - discStartMs; - final boolean hasValidRecord = doesSlotContainValidRecord(playbackSlot); - final boolean wasDiscSwapped = hasValidRecord - && mInventory[getInputSlot() + playbackSlot].getItem() != currentlyPlaying; - if (discProgressMs >= discDurationMs || !hasValidRecord || wasDiscSwapped) { - stopCurrentSong(now); - if (!loopMode) { - // should be empty, but swap just in case it's not - final ItemStack oldOut = mInventory[getOutputSlot()]; - mInventory[getOutputSlot()] = mInventory[getInputSlot() + playbackSlot]; - mInventory[getInputSlot() + playbackSlot] = oldOut; - markDirty(); - } - if (!(hasValidRecord && wasDiscSwapped)) { - // don't switch slots if someone just put a new disc in the active slot - pickNextSlot(); - } - } else { - // keep on playing - return; - } - } - - if (playbackSlot < 0 || playbackSlot >= INPUT_SLOTS - || ((aTimer % 10) == 0 && !doesSlotContainValidRecord(playbackSlot))) { - pickNextSlot(); - } - - final boolean hasValidRecord = doesSlotContainValidRecord(playbackSlot); - final boolean canStartPlaying = loopMode || isOutputEmpty(); - if (!hasValidRecord) { - stopCurrentSong(now); - } else if (canStartPlaying - && mInventory[getInputSlot() + playbackSlot].getItem() instanceof ItemRecord record) { - final ResourceLocation resource = record.getRecordResource(record.recordName); - currentlyPlaying = record; - musicSource.setRecord( - new ResourceLocation(resource.getResourceDomain(), "records." + resource.getResourcePath())); - // Assume a safe disc duration of 500 seconds if not known in the registry - discDurationMs = GT_MusicSystem.getMusicRecordDurations() - .getOrDefault(resource, 500_000); - discProgressMs = 0; - discStartMs = now; - } - } finally { - super.onPostTick(aBaseMetaTileEntity, aTimer); - } - } - - private void stopCurrentSong(long nowMs) { - if (currentlyPlaying == null) { - return; - } - musicSource.setRecord(null); - currentlyPlaying = null; - discDurationMs = 1; - discProgressMs = 0; - discStartMs = nowMs; - markDirty(); - } - - private void pickNextSlot() { - playbackSlot = MathHelper.clamp_int(playbackSlot, 0, INPUT_SLOTS); - if (shuffleMode) { - final int[] validSlots = new int[INPUT_SLOTS]; - int validSlotCount = 0; - for (int i = 0; i < INPUT_SLOTS; i++) { - if (i != playbackSlot && doesSlotContainValidRecord(i)) { - validSlots[validSlotCount++] = i; - } - } - switch (validSlotCount) { - case 0 -> {} - case 1 -> { - playbackSlot = validSlots[0]; - } - default -> { - playbackSlot = validSlots[SHUFFLER.nextInt(validSlotCount)]; - } - } - } else { - int attempt = 0; - int nextSlot = playbackSlot; - do { - attempt++; - nextSlot = (nextSlot + 1) % INPUT_SLOTS; - } while (!doesSlotContainValidRecord(nextSlot) && attempt <= INPUT_SLOTS); - if (attempt <= INPUT_SLOTS) { - playbackSlot = nextSlot; - } - } - } - - public boolean doesSlotContainValidRecord(int slot) { - return mInventory[getInputSlot() + slot] != null - && mInventory[getInputSlot() + slot].getItem() instanceof ItemRecord; - } - - @Override - public void onRemoval() { - final IGregTechTileEntity baseTE = getBaseMetaTileEntity(); - if (baseTE == null) { - return; - } - if (!baseTE.isServerSide()) { - return; - } - if (jukeboxUuid == UNSET_UUID) { - return; - } - GT_MusicSystem.ServerSystem.removeMusicSource(jukeboxUuid); - } - - @Override - public long getMinimumStoredEU() { - return BalanceMath.eutUsage(mTier) * 20; - } - - @Override - public long maxEUStore() { - return 512L + BalanceMath.eutUsage(mTier) * 50; - } - - @Override - public long maxAmperesIn() { - return 1; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return null; - } - - public static final String NBTKEY_UUID_LOW = "jukeboxUUIDLow"; - public static final String NBTKEY_UUID_HIGH = "jukeboxUUIDHigh"; - public static final String NBTKEY_LOOP_MODE = "loopMode"; - public static final String NBTKEY_SHUFFLE_MODE = "shuffleMode"; - public static final String NBTKEY_PLAYBACK_SLOT = "playbackSlot"; - public static final String NBTKEY_VOLUME_PLAY = "playbackVolume"; - public static final String NBTKEY_VOLUME_P2P = "p2pVolume"; - public static final String NBTKEY_DISC_PROGRESS_MS = "discProgressMs"; - - @Override - public String[] getInfoData() { - return new String[] { "Jukebox UUID: " + ((jukeboxUuid == UNSET_UUID) ? "unset" : jukeboxUuid), - "Loop mode: " + loopMode, "Shuffle mode: " + shuffleMode, "Played the disc for [ms]: " + discProgressMs, - "Current disc duration [ms]: " + discDurationMs, - "Playback range [blocks]: " + BalanceMath.volumeToAttenuationDistance(playbackVolume), - "P2P range [blocks]: " + BalanceMath.volumeToAttenuationDistance(playbackVolume), - "Raw playback strength: " + playbackVolume, "Raw p2p strength: " + p2pVolume }; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (jukeboxUuid != UNSET_UUID) { - aNBT.setLong(NBTKEY_UUID_LOW, jukeboxUuid.getLeastSignificantBits()); - aNBT.setLong(NBTKEY_UUID_HIGH, jukeboxUuid.getMostSignificantBits()); - aNBT.setBoolean(NBTKEY_LOOP_MODE, loopMode); - aNBT.setBoolean(NBTKEY_SHUFFLE_MODE, shuffleMode); - aNBT.setInteger(NBTKEY_PLAYBACK_SLOT, playbackSlot); - aNBT.setFloat(NBTKEY_VOLUME_PLAY, playbackVolume); - aNBT.setFloat(NBTKEY_VOLUME_P2P, p2pVolume); - aNBT.setLong(NBTKEY_DISC_PROGRESS_MS, discProgressMs); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey(NBTKEY_UUID_LOW, Constants.NBT.TAG_ANY_NUMERIC) - && aNBT.hasKey(NBTKEY_UUID_HIGH, Constants.NBT.TAG_ANY_NUMERIC)) { - jukeboxUuid = new UUID(aNBT.getLong(NBTKEY_UUID_HIGH), aNBT.getLong(NBTKEY_UUID_LOW)); - } - if (aNBT.hasKey(NBTKEY_LOOP_MODE, Constants.NBT.TAG_ANY_NUMERIC)) { - loopMode = aNBT.getBoolean(NBTKEY_LOOP_MODE); - } - if (aNBT.hasKey(NBTKEY_SHUFFLE_MODE, Constants.NBT.TAG_ANY_NUMERIC)) { - shuffleMode = aNBT.getBoolean(NBTKEY_SHUFFLE_MODE); - } - if (aNBT.hasKey(NBTKEY_PLAYBACK_SLOT, Constants.NBT.TAG_ANY_NUMERIC)) { - playbackSlot = aNBT.getInteger(NBTKEY_PLAYBACK_SLOT); - } - if (aNBT.hasKey(NBTKEY_VOLUME_PLAY, Constants.NBT.TAG_ANY_NUMERIC)) { - playbackVolume = aNBT.getFloat(NBTKEY_VOLUME_PLAY); - } - if (aNBT.hasKey(NBTKEY_VOLUME_P2P, Constants.NBT.TAG_ANY_NUMERIC)) { - p2pVolume = aNBT.getFloat(NBTKEY_VOLUME_P2P); - } - if (aNBT.hasKey(NBTKEY_DISC_PROGRESS_MS, Constants.NBT.TAG_ANY_NUMERIC)) { - discProgressMs = aNBT.getLong(NBTKEY_DISC_PROGRESS_MS); - } - - final float maxVolume = BalanceMath.listeningVolume(mTier); - playbackVolume = MathHelper.clamp_float(playbackVolume, 0.0f, maxVolume); - p2pVolume = MathHelper.clamp_float(p2pVolume, 0.0f, maxVolume); - } - - @Override - protected BasicUIProperties getUIProperties() { - return super.getUIProperties().toBuilder() - .itemInputPositionsGetter(count -> UIHelper.getGridPositions(count, 7, 6, 7, 3)) - .itemOutputPositionsGetter(count -> UIHelper.getGridPositions(count, 153, 24, 1)) - .specialItemPositionGetter(() -> new Pos2d(115, 62)) - .progressBarPos(Pos2d.cartesian(133, 24)) - .progressBarTexture(new FallbackableUITexture(GT_UITextures.PROGRESSBAR_ARROW)) - .build(); - } - - @Override - protected void addProgressBar(ModularWindow.Builder builder, BasicUIProperties uiProperties) { - builder.widget( - setNEITransferRect( - new ProgressBar().setProgress(() -> discProgressMs / (float) Math.max(1, discDurationMs)) - .setTexture(uiProperties.progressBarTexture.get(), uiProperties.progressBarImageSize) - .setDirection(uiProperties.progressBarDirection) - .setPos(uiProperties.progressBarPos) - .setSize(uiProperties.progressBarSize) - .setUpdateTooltipEveryTick(true) - .attachSyncer( - new FakeSyncWidget.LongSyncer(() -> this.discProgressMs, val -> this.discProgressMs = val), - builder) - .attachSyncer( - new FakeSyncWidget.LongSyncer(() -> this.discDurationMs, val -> this.discDurationMs = val), - builder) - .dynamicTooltip( - () -> Collections.singletonList( - String.format("%,.2f / %,.2f", discProgressMs / 1000.0f, discDurationMs / 1000.0f))), - uiProperties.neiTransferRectId)); - addProgressBarSpecialTextures(builder, uiProperties); - } - - @Override - protected SlotWidget createChargerSlot(int x, int y) { - return super.createChargerSlot(97, 62); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - final BasicUIProperties props = getUIProperties(); - final List inputSlots = props.itemInputPositionsGetter.apply(mInputSlotCount); - // Loop - builder.widget( - new CycleButtonWidget().setToggle(() -> loopMode, val -> loopMode = val) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_CYCLIC) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.betterjukebox.loop.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(153, 6) - .setSize(18, 18)); - // Shuffle - builder.widget(new CycleButtonWidget().setToggle(() -> shuffleMode, val -> { - shuffleMode = val; - if (shuffleMode) { - playbackSlot = -1; - } else { - playbackSlot = 0; - } - }) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_SHUFFLE) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.betterjukebox.shuffle.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(153, 42) - .setSize(18, 18)); - // Currently playing slot highlight using the hotbar active texture - final DrawableWidget slotHighlight = new DrawableWidget(); - builder.widget( - slotHighlight - .setDrawable( - new UITexture( - new ResourceLocation("minecraft", "textures/gui/widgets.png"), - 0.0f, - 22.0f / 256.0f, - 24.0f / 256.0f, - 46.0f / 256.0f)) - .setSize(24, 24) - .attachSyncer(new FakeSyncWidget.IntegerSyncer(() -> this.playbackSlot, val -> { - this.playbackSlot = val; - slotHighlight.checkNeedsRebuild(); - }), builder) - .setPosProvider( - (screenSize, window, parent) -> inputSlots.get(MathHelper.clamp_int(playbackSlot, 0, INPUT_SLOTS)) - .add(-3, -3))); - // Attenuation distance (controls internal "volume") - // Caching tooltip data caches the formatted p2p range value, so we have to use the uncached variant here. - builder.widget( - new SliderWidget() - .setBounds(0.0f, BalanceMath.volumeToAttenuationDistance(BalanceMath.listeningVolume(mTier))) - .setGetter(this::getPlaybackBlockRange) - .setSetter(this::setPlaybackBlockRange) - .dynamicTooltip( - () -> mTooltipCache.getUncachedTooltipData( - "GT5U.machines.betterjukebox.attenuationDistance.tooltip", - (int) getPlaybackBlockRange()).text) - .setUpdateTooltipEveryTick(true) - .setPos(44, 63) - .setSize(52, 8)); - builder.widget( - new SliderWidget() - .setBounds(0.0f, BalanceMath.volumeToAttenuationDistance(BalanceMath.listeningVolume(mTier))) - .setGetter(this::getP2PBlockRange) - .setSetter(this::setP2PBlockRange) - .dynamicTooltip( - () -> mTooltipCache.getUncachedTooltipData( - "GT5U.machines.betterjukebox.p2pAttenuationDistance.tooltip", - (int) getP2PBlockRange()).text) - .setUpdateTooltipEveryTick(true) - .setPos(44, 71) - .setSize(52, 8)); - } - - private float getPlaybackBlockRange() { - return BalanceMath.volumeToAttenuationDistance(playbackVolume); - } - - private float getP2PBlockRange() { - return BalanceMath.volumeToAttenuationDistance(p2pVolume); - } - - private void setPlaybackBlockRange(float blockRange) { - float volume = BalanceMath.attenuationDistanceToVolume(blockRange); - volume = MathHelper.clamp_float(volume, 0.0f, BalanceMath.listeningVolume(mTier)); - if (volume != playbackVolume) { - playbackVolume = volume; - if (getBaseMetaTileEntity().isServerSide()) { - updateEmitterList(); - } - } - } - - private void setP2PBlockRange(float blockRange) { - float volume = BalanceMath.attenuationDistanceToVolume(blockRange); - volume = MathHelper.clamp_float(volume, 0.0f, BalanceMath.listeningVolume(mTier)); - if (volume != p2pVolume) { - p2pVolume = volume; - if (getBaseMetaTileEntity().isServerSide()) { - updateEmitterList(); - } - } - } - - private final EnumMap attachedSoundP2P = new EnumMap<>(ForgeDirection.class); - private final ObjectArrayList combinedOutputsListCache = new ObjectArrayList<>(new PartP2PSound[0]); - - private void updateEmitterList() { - final GT_MusicSystem.MusicSource target = musicSource; - if (target == null) { - return; - } - final ObjectArrayList emitters = combinedOutputsListCache; - emitters.clear(); - - attachedSoundP2P.forEach((ignored, p2p) -> { - if (p2p != null) { - try { - p2p.getOutputs() - .forEach(emitters::add); - } catch (GridAccessException e) { - // skip - } - } - }); - - IGregTechTileEntity te = getBaseMetaTileEntity(); - if (te == null) { - return; - } - final Vector4i position = new Vector4i(); - target.resizeEmitterArray(1 + emitters.size()); - position.set(te.getXCoord(), te.getYCoord(), te.getZCoord(), te.getWorld().provider.dimensionId); - final float actualVolume = MathHelper - .clamp_float(playbackVolume, 0.0f, BalanceMath.listeningVolume(powered ? mTier : 0)); - target.setEmitter(0, position, actualVolume); - final float actualP2PVolume = MathHelper - .clamp_float(p2pVolume, 0.0f, powered ? BalanceMath.listeningVolume(mTier) : 0.0f); - for (int i = 0; i < emitters.size(); i++) { - final PartP2PSound p2p = emitters.get(i); - final AENetworkProxy proxy = p2p.getProxy(); - final TileEntity emitterTe = p2p.getTile(); - final ForgeDirection dir = p2p.getSide(); - position.set( - emitterTe.xCoord + dir.offsetX, - emitterTe.yCoord + dir.offsetY, - emitterTe.zCoord + dir.offsetZ, - emitterTe.getWorldObj().provider.dimensionId); - final boolean active = proxy.isActive(); - target.setEmitter(1 + i, position, active ? actualP2PVolume : 0); - } - } - - @Override - public boolean allowSoundProxying(PartP2PSound p2p) { - return false; // the jukebox proxies sounds by itself - } - - @Override - public void onSoundP2PAttach(PartP2PSound p2p) { - attachedSoundP2P.put(p2p.getSide(), p2p); - updateEmitterList(); - } - - @Override - public void onSoundP2PDetach(PartP2PSound p2p) { - attachedSoundP2P.put(p2p.getSide(), null); - updateEmitterList(); - } - - @Override - public void onSoundP2POutputUpdate(PartP2PSound p2p, TunnelCollection outputs) { - updateEmitterList(); - } - -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Boxinator.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Boxinator.java deleted file mode 100644 index 8d2e0959e1..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Boxinator.java +++ /dev/null @@ -1,229 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.MachineType; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Boxinator extends GT_MetaTileEntity_BasicMachine { - - ItemStack aInputCache; - ItemStack aOutputCache; - int aTypeCache = 0; - - public GT_MetaTileEntity_Boxinator(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, - MachineType.PACKAGER.tooltipDescription(), - 2, - 1, - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_SIDE_BOXINATOR_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/boxinator/OVERLAY_SIDE_BOXINATOR_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_SIDE_BOXINATOR")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_SIDE_BOXINATOR_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_FRONT_BOXINATOR_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/boxinator/OVERLAY_FRONT_BOXINATOR_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_FRONT_BOXINATOR")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_FRONT_BOXINATOR_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_TOP_BOXINATOR_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_TOP_BOXINATOR_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_TOP_BOXINATOR")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_TOP_BOXINATOR_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_BOTTOM_BOXINATOR_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/boxinator/OVERLAY_BOTTOM_BOXINATOR_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_BOTTOM_BOXINATOR")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_BOTTOM_BOXINATOR_GLOW")) - .glow() - .build())); - } - - public GT_MetaTileEntity_Boxinator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures, 2, 1); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boxinator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.packagerRecipes; - } - - private boolean hasValidCache(ItemStack mItem, int mType, boolean mClearOnFailure) { - if (aInputCache != null && aOutputCache != null - && aTypeCache == mType - && aInputCache.isItemEqual(mItem) - && ItemStack.areItemStackTagsEqual(mItem, aInputCache)) return true; - // clear cache if it was invalid - if (mClearOnFailure) { - aInputCache = null; - aOutputCache = null; - aTypeCache = 0; - } - return false; - } - - private void cacheItem(ItemStack mInputItem, ItemStack mOutputItem, int mType) { - aTypeCache = mType; - aOutputCache = mOutputItem.copy(); - aInputCache = mInputItem.copy(); - } - - @Override - public int checkRecipe() { - int tCheck = super.checkRecipe(); - if (tCheck != DID_NOT_FIND_RECIPE) { - return tCheck; - } - ItemStack tSlot0 = getInputAt(0); - ItemStack tSlot1 = getInputAt(1); - if ((GT_Utility.isStackValid(tSlot0)) && (GT_Utility.isStackValid(tSlot1)) - && (GT_Utility.getContainerItem(tSlot0, true) == null)) { - if ((ItemList.Schematic_1by1.isStackEqual(tSlot1)) && (tSlot0.stackSize >= 1)) { - boolean tIsCached = hasValidCache(tSlot0, 1, true); - this.mOutputItems[0] = tIsCached ? aOutputCache.copy() : GT_ModHandler.getRecipeOutput(tSlot0); - if (this.mOutputItems[0] != null) { - if (canOutput(this.mOutputItems[0])) { - tSlot0.stackSize -= 1; - calculateOverclockedNess(30, 16); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - if (!tIsCached) cacheItem(tSlot0, this.mOutputItems[0], 1); - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - } - return DID_NOT_FIND_RECIPE; - } - if ((ItemList.Schematic_2by2.isStackEqual(tSlot1)) && (getInputAt(0).stackSize >= 4)) { - boolean tIsCached = hasValidCache(tSlot0, 2, true); - this.mOutputItems[0] = tIsCached ? aOutputCache.copy() - : GT_ModHandler.getRecipeOutput(tSlot0, tSlot0, null, tSlot0, tSlot0); - if (this.mOutputItems[0] != null) { - if (canOutput(this.mOutputItems[0])) { - getInputAt(0).stackSize -= 4; - calculateOverclockedNess(30, 32); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - if (!tIsCached) cacheItem(tSlot0, this.mOutputItems[0], 2); - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - } - return DID_NOT_FIND_RECIPE; - } - if ((ItemList.Schematic_3by3.isStackEqual(tSlot1)) && (getInputAt(0).stackSize >= 9)) { - boolean tIsCached = hasValidCache(tSlot0, 3, true); - this.mOutputItems[0] = tIsCached ? aOutputCache.copy() - : GT_ModHandler - .getRecipeOutput(tSlot0, tSlot0, tSlot0, tSlot0, tSlot0, tSlot0, tSlot0, tSlot0, tSlot0); - if (this.mOutputItems[0] != null) { - if (canOutput(this.mOutputItems[0])) { - getInputAt(0).stackSize -= 9; - calculateOverclockedNess(30, 64); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - if (!tIsCached) cacheItem(tSlot0, this.mOutputItems[0], 3); - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - } - return DID_NOT_FIND_RECIPE; - } - } - return DID_NOT_FIND_RECIPE; - } - - @Override - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (!super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack)) { - return false; - } - ItemStack tInput1 = getInputAt(1); - if ((ItemList.Schematic_1by1.isStackEqual(tInput1)) || (ItemList.Schematic_2by2.isStackEqual(tInput1)) - || (ItemList.Schematic_3by3.isStackEqual(tInput1))) { - if (hasValidCache(aStack, aTypeCache, false)) return true; - if (RecipeMaps.packagerRecipes.findRecipe( - getBaseMetaTileEntity(), - true, - gregtech.api.enums.GT_Values.V[mTier], - null, - GT_Utility.copyAmount(64, aStack), - tInput1) != null) { - return true; - } - if (ItemList.Schematic_1by1.isStackEqual(getInputAt(1)) && GT_ModHandler.getRecipeOutput(aStack) != null) - return true; - if (ItemList.Schematic_2by2.isStackEqual(getInputAt(1)) - && GT_ModHandler.getRecipeOutput(aStack, aStack, null, aStack, aStack) != null) { - return true; - } - return ItemList.Schematic_3by3.isStackEqual(getInputAt(1)) && (GT_ModHandler - .getRecipeOutput(aStack, aStack, aStack, aStack, aStack, aStack, aStack, aStack, aStack) != null); - } else { - return RecipeMaps.packagerRecipes.containsInput(aStack); - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Charger.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Charger.java deleted file mode 100644 index de43fd715e..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Charger.java +++ /dev/null @@ -1,110 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.V; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicBatteryBuffer; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Charger extends GT_MetaTileEntity_BasicBatteryBuffer { - - public GT_MetaTileEntity_Charger(int aID, String aName, String aNameRegional, int aTier, String aDescription, - int aSlotCount) { - super(aID, aName, aNameRegional, aTier, aDescription, aSlotCount); - } - - public GT_MetaTileEntity_Charger(String aName, int aTier, String aDescription, ITexture[][][] aTextures, - int aSlotCount) { - super(aName, aTier, aDescription, aTextures, aSlotCount); - } - - public GT_MetaTileEntity_Charger(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, - int aSlotCount) { - super(aName, aTier, aDescription, aTextures, aSlotCount); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Charger(mName, mTier, mDescriptionArray, mTextures, mInventory.length); - } - - @Override - public long getMinimumStoredEU() { - return V[mTier] * 64L * mInventory.length; - } - - @Override - public long maxEUStore() { - return V[mTier] * 256L * mInventory.length; - } - - @Override - public long maxAmperesIn() { - return Math.max(mChargeableCount * 8L, 4L); - } - - @Override - public long maxAmperesOut() { - return Math.max(mBatteryCount * 4L, 2L); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (this.getBaseMetaTileEntity() instanceof BaseMetaTileEntity) { - BaseMetaTileEntity mBaseMetaTileEntity = (BaseMetaTileEntity) getBaseMetaTileEntity(); - if (mBaseMetaTileEntity.getMetaTileEntity() instanceof MetaTileEntity mMetaTileEntity) { - // for (int t = 0; t < 6; t++) { - if (mMetaTileEntity.dechargerSlotCount() > 0 - && mBaseMetaTileEntity.getStoredEU() < mBaseMetaTileEntity.getEUCapacity()) { - for (int i = mMetaTileEntity.dechargerSlotStartIndex(), - k = mMetaTileEntity.dechargerSlotCount() + i; i < k; i++) { - if (mMetaTileEntity.mInventory[i] != null - && mBaseMetaTileEntity.getStoredEU() < mBaseMetaTileEntity.getEUCapacity()) { - mBaseMetaTileEntity.increaseStoredEnergyUnits( - GT_ModHandler.dischargeElectricItem( - mMetaTileEntity.mInventory[i], - GT_Utility.safeInt( - Math.min( - V[mTier] * 15, - mBaseMetaTileEntity.getEUCapacity() - - mBaseMetaTileEntity.getStoredEU())), - (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getInputTier()), - true, - false, - false), - true); - if (mMetaTileEntity.mInventory[i].stackSize <= 0) mMetaTileEntity.mInventory[i] = null; - } - } - } - if (mMetaTileEntity.rechargerSlotCount() > 0 && mBaseMetaTileEntity.getStoredEU() > 0) { - for (int i = mMetaTileEntity.rechargerSlotStartIndex(), - k = mMetaTileEntity.rechargerSlotCount() + i; i < k; i++) { - if (mBaseMetaTileEntity.getStoredEU() > 0 && mMetaTileEntity.mInventory[i] != null) { - mBaseMetaTileEntity - .decreaseStoredEU( - GT_ModHandler.chargeElectricItem( - mMetaTileEntity.mInventory[i], - GT_Utility - .safeInt(Math.min(V[mTier] * 15, mBaseMetaTileEntity.getStoredEU())), - (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getOutputTier()), - true, - false), - true); - if (mMetaTileEntity.mInventory[i].stackSize <= 0) mMetaTileEntity.mInventory[i] = null; - } - } - // } - } - } - } - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java deleted file mode 100644 index 9249673c7c..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java +++ /dev/null @@ -1,1555 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.AuthorKuba; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_INDUSTRIAL_APIARY; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_INDUSTRIAL_APIARY_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_INDUSTRIAL_APIARY_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_INDUSTRIAL_APIARY_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_APIARY; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_APIARY_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_APIARY_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_APIARY_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_INDUSTRIAL_APIARY; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_INDUSTRIAL_APIARY_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_INDUSTRIAL_APIARY_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_INDUSTRIAL_APIARY_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_INDUSTRIAL_APIARY; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_INDUSTRIAL_APIARY_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_INDUSTRIAL_APIARY_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_INDUSTRIAL_APIARY_GLOW; -import static gregtech.api.metatileentity.BaseTileEntity.STALLED_STUTTERING_TOOLTIP; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_Utility.moveMultipleItemStacks; - -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.IOException; -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.collect.ImmutableSet; -import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularUIContext; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.builder.UIInfo; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.mojang.authlib.GameProfile; - -import forestry.api.apiculture.BeeManager; -import forestry.api.apiculture.EnumBeeChromosome; -import forestry.api.apiculture.EnumBeeType; -import forestry.api.apiculture.FlowerManager; -import forestry.api.apiculture.IAlleleBeeAcceleratableEffect; -import forestry.api.apiculture.IAlleleBeeEffect; -import forestry.api.apiculture.IAlleleBeeSpecies; -import forestry.api.apiculture.IApiaristTracker; -import forestry.api.apiculture.IBee; -import forestry.api.apiculture.IBeeGenome; -import forestry.api.apiculture.IBeeHousing; -import forestry.api.apiculture.IBeeHousingInventory; -import forestry.api.apiculture.IBeeListener; -import forestry.api.apiculture.IBeeModifier; -import forestry.api.apiculture.IBeeRoot; -import forestry.api.apiculture.IBeekeepingLogic; -import forestry.api.apiculture.IBeekeepingMode; -import forestry.api.arboriculture.EnumGermlingType; -import forestry.api.core.BiomeHelper; -import forestry.api.core.EnumHumidity; -import forestry.api.core.EnumTemperature; -import forestry.api.core.ForestryAPI; -import forestry.api.core.IErrorLogic; -import forestry.api.core.IErrorState; -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.IEffectData; -import forestry.api.genetics.IIndividual; -import forestry.apiculture.genetics.Bee; -import forestry.apiculture.genetics.alleles.AlleleEffectThrottled; -import forestry.core.errors.EnumErrorCode; -import forestry.plugins.PluginApiculture; -import gregtech.GT_Mod; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.recipe.BasicUIProperties; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ApiaryModifier; -import gregtech.api.util.GT_ApiaryUpgrade; -import gregtech.api.util.GT_Utility; -import gregtech.common.GT_Client; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicMachine - implements IBeeHousing, IBeeHousingInventory, IErrorLogic, IBeeModifier, IBeeListener, IAddUIWidgets { - - public static final int beeCycleLength = 550; - public static final int baseEUtUsage = 37; - private static final int queen = 5; - private static final int drone = 6; - private static final int upgradeSlot = drone + 1; - private static final int upgradeSlotCount = 4; - private static Field AlleleBeeEffectThrottledField; - - final IBeeRoot beeRoot = (IBeeRoot) AlleleManager.alleleRegistry.getSpeciesRoot("rootBees"); - - public int mSpeed = 0; - public boolean mLockedSpeed = true; - public boolean mAutoQueen = true; - - private ItemStack usedQueen = null; - private IBee usedQueenBee = null; - private IEffectData[] effectData = new IEffectData[2]; - - public GT_MetaTileEntity_IndustrialApiary(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 4, - new String[] { "BEES GOES BRRRR", EnumChatFormatting.GRAY + AuthorKuba, - "Effective production chance as a percent is", "2.8 * b^0.52 * (p + t)^0.52 * s^0.37", - "where b is the base production chance as a percent,", - "p is the production modifier (2 w/o upgrades, or 4 * 1.2^n with n production upgrades),", - "t is 8 for the industrial apiary, and", "s is the speed value for the bee", - "Outputs are generated at the end of every bee tick (...)", - "Primary outputs are rolled once with base chance, once with half base" }, - 6, - 9, - TextureFactory.of( - TextureFactory.of(OVERLAY_SIDE_INDUSTRIAL_APIARY_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_INDUSTRIAL_APIARY_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_SIDE_INDUSTRIAL_APIARY), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_INDUSTRIAL_APIARY_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_FRONT_INDUSTRIAL_APIARY_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_INDUSTRIAL_APIARY_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_FRONT_INDUSTRIAL_APIARY), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_INDUSTRIAL_APIARY_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_INDUSTRIAL_APIARY_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_INDUSTRIAL_APIARY_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_INDUSTRIAL_APIARY), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_INDUSTRIAL_APIARY_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_BOTTOM_INDUSTRIAL_APIARY_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_INDUSTRIAL_APIARY_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_BOTTOM_INDUSTRIAL_APIARY), - TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_INDUSTRIAL_APIARY_GLOW) - .glow() - .build())); - } - - public GT_MetaTileEntity_IndustrialApiary(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 4, aDescription, aTextures, 6, 9); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_IndustrialApiary(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) return true; - if (!GT_Mod.gregtechproxy.mForceFreeFace) { - openGUI(aBaseMetaTileEntity, aPlayer); - return true; - } - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (aBaseMetaTileEntity.getAirAtSide(side)) { - openGUI(aBaseMetaTileEntity, aPlayer); - return true; - } - } - GT_Utility.sendChatToPlayer(aPlayer, "No free Side!"); - return true; - } - - private void openGUI(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - IndustrialApiaryUI.open( - aPlayer, - aBaseMetaTileEntity.getWorld(), - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord()); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mSpeed", mSpeed); - aNBT.setBoolean("mLockedSpeed", mLockedSpeed); - aNBT.setBoolean("mAutoQueen", mAutoQueen); - if (usedQueen != null) aNBT.setTag("usedQueen", usedQueen.writeToNBT(new NBTTagCompound())); - aNBT.setBoolean("retrievingPollenInThisOperation", retrievingPollenInThisOperation); - aNBT.setInteger("pollinationDelay", pollinationDelay); - aNBT.setFloat("usedBeeLife", usedBeeLife); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mSpeed = aNBT.getInteger("mSpeed"); - mLockedSpeed = aNBT.getBoolean("mLockedSpeed"); - if (aNBT.hasKey("mAutoQueen")) mAutoQueen = aNBT.getBoolean("mAutoQueen"); - if (aNBT.hasKey("usedQueen")) usedQueen = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("usedQueen")); - retrievingPollenInThisOperation = aNBT.getBoolean("retrievingPollenInThisOperation"); - pollinationDelay = aNBT.getInteger("pollinationDelay"); - usedBeeLife = aNBT.getFloat("usedBeeLife"); - } - - boolean retrievingPollenInThisOperation = false; - IIndividual retrievedpollen = null; - int pollinationDelay = 100; - float usedBeeLife = 0f; - - @Override - public int checkRecipe() { - updateModifiers(); - if (canWork()) { - - final ItemStack queen = getQueen(); - usedQueen = queen.copy(); - if (beeRoot.getType(queen) == EnumBeeType.QUEEN) { - final IBee bee = beeRoot.getMember(queen); - usedQueenBee = bee; - - // LIFE CYCLES - - float mod = this.getLifespanModifier(null, null, 1.f); - final IBeekeepingMode mode = beeRoot.getBeekeepingMode(this.getWorld()); - final IBeeModifier beemodifier = mode.getBeeModifier(); - mod *= beemodifier.getLifespanModifier(null, null, 1.f); - final int h = bee.getHealth(); - mod = 1.f / mod; - final float cycles = h / mod; - - // PRODUCTS - - final HashMap pollen = new HashMap<>(); - - if (isRetrievingPollen && floweringMod > 0f) { - final int icycles = (int) cycles - + (getWorld().rand.nextFloat() < (cycles - (float) ((int) cycles)) ? 1 : 0); - for (int z = 0; z < icycles; z++) { - final IIndividual p = bee.retrievePollen(this); - if (p != null) { - final ItemStack s = p.getGenome() - .getSpeciesRoot() - .getMemberStack(p, EnumGermlingType.POLLEN.ordinal()); - if (s != null) { - final GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(s); - pollen.computeIfAbsent(id, k -> { - final ItemStack ns = s.copy(); - ns.stackSize = 0; - return ns; - }); - pollen.get(id).stackSize += s.stackSize; - } - } - } - } - - retrievedpollen = null; - retrievingPollenInThisOperation = isRetrievingPollen; - - final IBeeGenome genome = bee.getGenome(); - final IAlleleBeeSpecies primary = genome.getPrimary(); - final IAlleleBeeSpecies secondary = genome.getSecondary(); - - final float speed = genome.getSpeed(); - final float prodMod = getProductionModifier(null, 0f) + beemodifier.getProductionModifier(null, 0f); - - final HashMap drops = new HashMap<>(); - final HashMap dropstacks = new HashMap<>(); - - for (Map.Entry entry : primary.getProductChances() - .entrySet()) { - final GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(entry.getKey()); - drops.merge( - id, - Bee.getFinalChance(entry.getValue(), speed, prodMod, 8f) * (float) entry.getKey().stackSize - * cycles, - Float::sum); - dropstacks.computeIfAbsent(id, k -> entry.getKey()); - } - for (Map.Entry entry : secondary.getProductChances() - .entrySet()) { - final GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(entry.getKey()); - drops.merge( - id, - Bee.getFinalChance(entry.getValue() / 2f, speed, prodMod, 8f) * (float) entry.getKey().stackSize - * cycles, - Float::sum); - dropstacks.computeIfAbsent(id, k -> entry.getKey()); - } - if (primary.isJubilant(genome, this) && secondary.isJubilant(genome, this)) - for (Map.Entry entry : primary.getSpecialtyChances() - .entrySet()) { - final GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(entry.getKey()); - drops.merge( - id, - Bee.getFinalChance(entry.getValue(), speed, prodMod, 8f) - * (float) entry.getKey().stackSize - * cycles, - Float::sum); - dropstacks.computeIfAbsent(id, k -> entry.getKey()); - } - - int i = 0; - final int imax = mOutputItems.length; - - final IApiaristTracker breedingTracker = beeRoot.getBreedingTracker(getWorld(), getOwner()); - - if (!bee.canSpawn()) { - final ItemStack convert = new ItemStack(PluginApiculture.items.beePrincessGE); - final NBTTagCompound nbttagcompound = new NBTTagCompound(); - queen.writeToNBT(nbttagcompound); - convert.setTagCompound(nbttagcompound); - this.mOutputItems[i++] = convert; - } else { - final IBee b = bee.spawnPrincess(this); - if (b != null) { - final ItemStack princess = beeRoot.getMemberStack(b, EnumBeeType.PRINCESS.ordinal()); - breedingTracker.registerPrincess(b); - this.mOutputItems[i++] = princess; - } - final IBee[] d = bee.spawnDrones(this); - if (d != null && d.length > 0) { - final HashMap drones = new HashMap<>(d.length); - for (IBee dr : d) { - final ItemStack drone = beeRoot.getMemberStack(dr, EnumBeeType.DRONE.ordinal()); - breedingTracker.registerDrone(dr); - final GT_Utility.ItemId drid = GT_Utility.ItemId.createNoCopy(drone); - if (drones.containsKey(drid)) drones.get(drid).stackSize += drone.stackSize; - else { - this.mOutputItems[i++] = drone; - drones.put(drid, drone); - } - } - } - } - - final int imin = i; - - setQueen(null); - - for (Map.Entry entry : drops.entrySet()) { - final ItemStack s = dropstacks.get(entry.getKey()) - .copy(); - s.stackSize = entry.getValue() - .intValue() - + (getWorld().rand.nextFloat() < (entry.getValue() - (float) entry.getValue() - .intValue()) ? 1 : 0); - if (s.stackSize > 0 && i < imax) while (true) { - if (s.stackSize <= s.getMaxStackSize()) { - this.mOutputItems[i++] = s; - break; - } else this.mOutputItems[i++] = s.splitStack(s.getMaxStackSize()); - if (i >= imax) break; - } - } - - for (ItemStack s : pollen.values()) if (i < imax) this.mOutputItems[i++] = s; - else break; - - // Overclock - - usedBeeLife = cycles * (float) beeCycleLength; - this.mMaxProgresstime = (int) usedBeeLife; - final int timemaxdivider = this.mMaxProgresstime / 100; - final int useddivider = 1 << this.mSpeed; - int actualdivider = useddivider; - this.mMaxProgresstime /= Math.min(actualdivider, timemaxdivider); - actualdivider /= Math.min(actualdivider, timemaxdivider); - for (i--; i >= imin; i--) this.mOutputItems[i].stackSize *= actualdivider; - - pollinationDelay = Math.max((int) (this.mMaxProgresstime / cycles), 20); // don't run too often - - this.mProgresstime = 0; - this.mEUt = (int) ((float) baseEUtUsage * this.energyMod * useddivider); - if (useddivider == 2) this.mEUt += 32; - else if (useddivider > 2) this.mEUt += (32 * (useddivider << (this.mSpeed - 2))); - } else { - // Breeding time - - retrievingPollenInThisOperation = true; // Don't pollinate when breeding - - this.mMaxProgresstime = 100; - this.mProgresstime = 0; - final int useddivider = Math.min(100, 1 << this.mSpeed); - this.mMaxProgresstime /= useddivider; - this.mEUt = (int) ((float) baseEUtUsage * this.energyMod * useddivider); - if (useddivider == 2) this.mEUt += 32; - else if (useddivider > 2) this.mEUt += (32 * (useddivider << (this.mSpeed - 2))); - - final IBee princess = beeRoot.getMember(getQueen()); - usedQueenBee = princess; - final IBee drone = beeRoot.getMember(getDrone()); - princess.mate(drone); - final NBTTagCompound nbttagcompound = new NBTTagCompound(); - princess.writeToNBT(nbttagcompound); - this.mOutputItems[0] = new ItemStack(PluginApiculture.items.beeQueenGE); - this.mOutputItems[0].setTagCompound(nbttagcompound); - beeRoot.getBreedingTracker(getWorld(), getOwner()) - .registerQueen(princess); - - setQueen(null); - getDrone().stackSize -= 1; - if (getDrone().stackSize == 0) setDrone(null); - } - - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - - return DID_NOT_FIND_RECIPE; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - updateModifiers(); - } - - @Override - protected boolean hasEnoughEnergyToCheckRecipe() { - return getBaseMetaTileEntity().isUniversalEnergyStored(V[mSpeed] * 8L); - } - - @Override - public long maxAmperesIn() { - return 4L; - } - - private void doEffect() { - final IBeeGenome genome = usedQueenBee.getGenome(); - final IAlleleBeeEffect effect = genome.getEffect(); - if (!(effect instanceof IAlleleBeeAcceleratableEffect)) { - effectData[0] = effect.validateStorage(effectData[0]); - effect.doEffect(genome, effectData[0], this); - } - - if (!effect.isCombinable()) return; - - final IAlleleBeeEffect secondary = (IAlleleBeeEffect) genome.getInactiveAllele(EnumBeeChromosome.EFFECT); - if (!secondary.isCombinable()) return; - - if (!(secondary instanceof IAlleleBeeAcceleratableEffect)) { - effectData[1] = secondary.validateStorage(effectData[1]); - secondary.doEffect(genome, effectData[1], this); - } - } - - private void doAcceleratedEffects() { - final IBeeGenome genome = usedQueenBee.getGenome(); - final IAlleleBeeEffect effect = genome.getEffect(); - try { - if (AlleleBeeEffectThrottledField == null) { - AlleleBeeEffectThrottledField = AlleleEffectThrottled.class.getDeclaredField("throttle"); - AlleleBeeEffectThrottledField.setAccessible(true); - } - if (effect instanceof IAlleleBeeAcceleratableEffect) { - effectData[0] = effect.validateStorage(effectData[0]); - effectData[0] = ((IAlleleBeeAcceleratableEffect) effect).doEffectAccelerated( - genome, - effectData[0], - this, - usedBeeLife / (effect instanceof AlleleEffectThrottled - ? (float) AlleleBeeEffectThrottledField.getInt(effect) - : 1f)); - } - - if (!effect.isCombinable()) return; - - final IAlleleBeeEffect secondary = (IAlleleBeeEffect) genome.getInactiveAllele(EnumBeeChromosome.EFFECT); - if (!secondary.isCombinable()) return; - - if (secondary instanceof IAlleleBeeAcceleratableEffect) { - effectData[1] = secondary.validateStorage(effectData[1]); - effectData[1] = ((IAlleleBeeAcceleratableEffect) secondary).doEffectAccelerated( - genome, - effectData[0], - this, - usedBeeLife / (secondary instanceof AlleleEffectThrottled - ? (float) AlleleBeeEffectThrottledField.getInt(secondary) - : 1f)); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isClientSide()) { - if (GT_Client.changeDetected == 4) { - /* - * Client tick counter that is set to 5 on hiding pipes and covers. It triggers a texture update next - * client tick when reaching 4, with provision for 3 more update tasks, spreading client change - * detection related work and network traffic on different ticks, until it reaches 0. - */ - aBaseMetaTileEntity.issueTextureUpdate(); - } - if (aBaseMetaTileEntity.isActive()) { - if (usedQueen != null) { - if (aTick % 2 == 0) { - // FX on client, effect on server - final IBee bee = beeRoot.getMember(usedQueen); - effectData = bee.doFX(effectData, this); - } - } - } - } - if (aBaseMetaTileEntity.isServerSide()) { - - mCharge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3; - mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3; - - doDisplayThings(); - - if (!aBaseMetaTileEntity.isActive()) { - if (aBaseMetaTileEntity.isAllowedToWork() - && (aBaseMetaTileEntity.hasInventoryBeenModified() || aTick % 600 == 0 - || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) - && hasEnoughEnergyToCheckRecipe()) { - final int check = checkRecipe(); - if (check == FOUND_AND_SUCCESSFULLY_USED_RECIPE) { - aBaseMetaTileEntity.setActive(true); - } - } - } else { - - if (this.mProgresstime < 0) { - this.mProgresstime++; - return; - } - if (this.mStuttering) { - if (!aBaseMetaTileEntity.isAllowedToWork()) return; - if (aTick % 100 == 0) this.mStuttering = false; - return; - } - if (this.hasErrors()) { - if (!aBaseMetaTileEntity.isAllowedToWork()) return; - if (aTick % 100 == 0) if (!canWork(usedQueen)) this.stutterProcess(); - return; - } - - if (!drainEnergyForProcess(this.mEUt)) { - this.mStuttering = true; - this.stutterProcess(); - return; - } - this.mProgresstime++; - if (usedQueen != null) { - if (usedQueenBee == null) usedQueenBee = beeRoot.getMember(usedQueen); - doEffect(); - if (!retrievingPollenInThisOperation && floweringMod > 0f - && this.mProgresstime % pollinationDelay == 0) { - if (retrievedpollen == null) retrievedpollen = usedQueenBee.retrievePollen(this); - if (retrievedpollen != null && (usedQueenBee.pollinateRandom(this, retrievedpollen) - || this.mProgresstime % (pollinationDelay * 5) == 0)) retrievedpollen = null; - } - } - - if (this.mProgresstime % 100 == 0) { - if (!canWork(usedQueen)) { - this.stutterProcess(); - return; - } - } - - if (this.mProgresstime >= this.mMaxProgresstime) { - if (usedQueenBee != null) doAcceleratedEffects(); - updateModifiers(); - for (int i = 0; i < mOutputItems.length; i++) - if (mOutputItems[i] != null) for (int j = 0; j < mOutputItems.length; j++) { - if (j == 0 && isAutomated) { - if (beeRoot.isMember(mOutputItems[i], EnumBeeType.QUEEN.ordinal()) - || beeRoot.isMember(mOutputItems[i], EnumBeeType.PRINCESS.ordinal())) { - if (aBaseMetaTileEntity.addStackToSlot(queen, mOutputItems[i])) break; - } else if (beeRoot.isMember(mOutputItems[i], EnumBeeType.DRONE.ordinal())) - if (aBaseMetaTileEntity.addStackToSlot(drone, mOutputItems[i])) break; - } else if (mAutoQueen && i == 0 - && j == 0 - && beeRoot.isMember(mOutputItems[0], EnumBeeType.QUEEN.ordinal()) - && aBaseMetaTileEntity.addStackToSlot(queen, mOutputItems[0])) break; - if (aBaseMetaTileEntity - .addStackToSlot(getOutputSlot() + ((j + i) % mOutputItems.length), mOutputItems[i])) - break; - } - Arrays.fill(mOutputItems, null); - mEUt = 0; - mProgresstime = 0; - mMaxProgresstime = 0; - mStuttering = false; - aBaseMetaTileEntity.setActive(false); - - if (doesAutoOutput() && !isOutputEmpty() && aBaseMetaTileEntity.getFrontFacing() != mMainFacing) { - final TileEntity tTileEntity2 = aBaseMetaTileEntity - .getTileEntityAtSide(aBaseMetaTileEntity.getFrontFacing()); - final long tStoredEnergy = aBaseMetaTileEntity.getUniversalEnergyStored(); - int tMaxStacks = (int) (tStoredEnergy / 64L); - if (tMaxStacks > mOutputItems.length) tMaxStacks = mOutputItems.length; - - moveMultipleItemStacks( - aBaseMetaTileEntity, - tTileEntity2, - aBaseMetaTileEntity.getFrontFacing(), - aBaseMetaTileEntity.getBackFacing(), - null, - false, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1, - tMaxStacks); - } - - if (aBaseMetaTileEntity.isAllowedToWork() && checkRecipe() == FOUND_AND_SUCCESSFULLY_USED_RECIPE) - aBaseMetaTileEntity.setActive(true); - } - } - } - } - - public void cancelProcess() { - if (this.getBaseMetaTileEntity() - .isActive() - && this.getBaseMetaTileEntity() - .isServerSide() - && usedQueen != null - && beeRoot.isMember(usedQueen, EnumBeeType.QUEEN.ordinal())) { - Arrays.fill(mOutputItems, null); - mEUt = 0; - mProgresstime = 0; - mMaxProgresstime = 0; - mStuttering = false; - this.getBaseMetaTileEntity() - .setActive(false); - setQueen(usedQueen); - this.getBaseMetaTileEntity() - .disableWorking(); - } - } - - @Override - public boolean isItemValidForSlot(int aIndex, ItemStack aStack) { - if (aStack == null) return false; - if (aIndex < getInputSlot()) return true; - if (aIndex == queen) return beeRoot.isMember(aStack, EnumBeeType.QUEEN.ordinal()) - || beeRoot.isMember(aStack, EnumBeeType.PRINCESS.ordinal()); - else if (aIndex == drone) return beeRoot.isMember(aStack, EnumBeeType.DRONE.ordinal()); - else if (aIndex < getOutputSlot()) { - if (!GT_ApiaryUpgrade.isUpgrade(aStack)) return false; - for (int i = upgradeSlot; i < upgradeSlot + upgradeSlotCount; i++) { - if (aIndex == i) continue; - final ItemStack s = getStackInSlot(i); - if (s == null) continue; - if (GT_Utility.areStacksEqual(getStackInSlot(i), aStack)) return false; - if (GT_ApiaryUpgrade.isUpgrade(aStack)) { - if (!GT_ApiaryUpgrade.getUpgrade(aStack) - .isAllowedToWorkWith(getStackInSlot(i))) return false; - } else if (GT_ApiaryUpgrade.isUpgrade(s)) { - if (!GT_ApiaryUpgrade.getUpgrade(s) - .isAllowedToWorkWith(aStack)) return false; - } - } - return true; - } else return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack)) return false; - return isItemValidForSlot(aIndex, aStack); - } - - @Override - public void setInventorySlotContents(int aIndex, ItemStack aStack) { - if (aIndex == queen && aStack != null && getBaseMetaTileEntity().isClientSide()) usedQueen = aStack.copy(); - super.setInventorySlotContents(aIndex, aStack); - } - - // Gets called on slot click // - public void onInventoryUpdate(int aIndex) { - if (aIndex > drone && aIndex < getOutputSlot()) updateModifiers(); - } - - public ItemStack getUsedQueen() { - return usedQueen; - } - - // region IBeeHousing - - @Override - public Iterable getBeeModifiers() { - return Collections.singletonList(this); - } - - @Override - public Iterable getBeeListeners() { - return Collections.singletonList(this); - } - - @Override - public IBeeHousingInventory getBeeInventory() { - return this; - } - - @Override - public IBeekeepingLogic getBeekeepingLogic() { - return dummylogic; - } - - @Override - public int getBlockLightValue() { - return this.getBaseMetaTileEntity() - .getLightLevelAtSide(ForgeDirection.UP); - } - - @Override - public boolean canBlockSeeTheSky() { - return this.getBaseMetaTileEntity() - .getSkyAtSide(ForgeDirection.UP); - } - - @Override - public World getWorld() { - return this.getBaseMetaTileEntity() - .getWorld(); - } - - GameProfile owner = null; - - @Override - public GameProfile getOwner() { - if (owner == null) owner = new GameProfile( - this.getBaseMetaTileEntity() - .getOwnerUuid(), - this.getBaseMetaTileEntity() - .getOwnerName()); - return owner; - } - - @Override - public Vec3 getBeeFXCoordinates() { - return Vec3.createVectorHelper( - getBaseMetaTileEntity().getXCoord() + 0.5, - getBaseMetaTileEntity().getYCoord() + 0.5, - getBaseMetaTileEntity().getZCoord() + 0.5); - } - - @Override - public BiomeGenBase getBiome() { - if (biomeOverride == null) return this.getBaseMetaTileEntity() - .getBiome(); - return biomeOverride; - } - - @Override - public EnumTemperature getTemperature() { - if (BiomeHelper.isBiomeHellish(getBiome())) return EnumTemperature.HELLISH; - return EnumTemperature.getFromValue(getBiome().temperature + temperatureMod); - } - - @Override - public EnumHumidity getHumidity() { - return EnumHumidity.getFromValue(getBiome().rainfall + humidityMod); - } - - @Override - public IErrorLogic getErrorLogic() { - return this; - } - - @Override - public ChunkCoordinates getCoordinates() { - return this.getBaseMetaTileEntity() - .getCoords(); - } - - // endregion - - // region IBeeHousingInventory - @Override - public ItemStack getQueen() { - return getStackInSlot(queen); - } - - @Override - public ItemStack getDrone() { - return getStackInSlot(drone); - } - - @Override - public void setQueen(ItemStack itemStack) { - setInventorySlotContents(queen, itemStack); - } - - @Override - public void setDrone(ItemStack itemStack) { - setInventorySlotContents(drone, itemStack); - } - - @Override - public boolean addProduct(ItemStack itemStack, boolean b) { - throw new RuntimeException("Should not happen :F"); - } - // endregion - - // region IErrorLogic - - public HashSet mErrorStates = new HashSet<>(); - - @Override - public boolean setCondition(boolean b, IErrorState iErrorState) { - if (b) mErrorStates.add(iErrorState); - else mErrorStates.remove(iErrorState); - return b; - } - - @Override - public boolean contains(IErrorState iErrorState) { - return mErrorStates.contains(iErrorState); - } - - @Override - public boolean hasErrors() { - return !mErrorStates.isEmpty(); - } - - @Override - public void clearErrors() { - mErrorStates.clear(); - } - - @Override - public void writeData(DataOutputStream dataOutputStream) throws IOException { - dataOutputStream.write(mErrorStates.size()); - for (IErrorState s : mErrorStates) dataOutputStream.writeUTF(s.getUniqueName()); - } - - @Override - public void readData(DataInputStream dataInputStream) throws IOException { - for (int i = dataInputStream.readInt(); i > 0; i--) - mErrorStates.add(ForestryAPI.errorStateRegistry.getErrorState(dataInputStream.readUTF())); - } - - @Override - public ImmutableSet getErrorStates() { - return ImmutableSet.copyOf(mErrorStates); - } - - private String flowerType = ""; - private ChunkCoordinates flowercoords = null; - private Block flowerBlock; - private int flowerBlockMeta; - - private boolean checkFlower(IBee bee) { - final String flowerType = bee.getGenome() - .getFlowerProvider() - .getFlowerType(); - if (!this.flowerType.equals(flowerType)) flowercoords = null; - if (flowercoords != null) { - if (getWorld().getBlock(flowercoords.posX, flowercoords.posY, flowercoords.posZ) != flowerBlock - || getWorld().getBlockMetadata(flowercoords.posX, flowercoords.posY, flowercoords.posZ) - != flowerBlockMeta) - if (!FlowerManager.flowerRegistry - .isAcceptedFlower(flowerType, getWorld(), flowercoords.posX, flowercoords.posY, flowercoords.posZ)) - flowercoords = null; - else { - flowerBlock = getWorld().getBlock(flowercoords.posX, flowercoords.posY, flowercoords.posZ); - flowerBlockMeta = getWorld() - .getBlockMetadata(flowercoords.posX, flowercoords.posY, flowercoords.posZ); - } - } - if (flowercoords == null) { - flowercoords = FlowerManager.flowerRegistry.getAcceptedFlowerCoordinates(this, bee, flowerType); - if (flowercoords != null) { - flowerBlock = getWorld().getBlock(flowercoords.posX, flowercoords.posY, flowercoords.posZ); - flowerBlockMeta = getWorld().getBlockMetadata(flowercoords.posX, flowercoords.posY, flowercoords.posZ); - this.flowerType = flowerType; - } - } - return flowercoords != null; - } - - private boolean canWork(ItemStack queen) { - clearErrors(); - if (queen == null) return true; // Reloaded the chunk ? - if (beeRoot.isMember(queen, EnumBeeType.PRINCESS.ordinal())) return true; - final IBee bee = beeRoot.getMember(queen); - for (IErrorState err : bee.getCanWork(this)) setCondition(true, err); - setCondition(!checkFlower(bee), EnumErrorCode.NO_FLOWER); - return !hasErrors(); - } - - private boolean canWork() { - clearErrors(); - final EnumBeeType beeType = beeRoot.getType(getQueen()); - if (beeType == EnumBeeType.PRINCESS) { - setCondition(!beeRoot.isDrone(getDrone()), EnumErrorCode.NO_DRONE); - return !hasErrors(); - } - if (beeType == EnumBeeType.QUEEN) { - final IBee bee = beeRoot.getMember(getQueen()); - for (IErrorState err : bee.getCanWork(this)) setCondition(true, err); - setCondition(!checkFlower(bee), EnumErrorCode.NO_FLOWER); - return !hasErrors(); - } else { - setCondition(true, EnumErrorCode.NO_QUEEN); - return false; - } - } - - // endregion - - // region IBeeModifier - - private float terrorityMod = 1f; - private float mutationMod = 1f; - private float lifespanMod = 1f; - private float productionMod = 2f; - private float floweringMod = 1f; - private float geneticDecayMod = 1f; - private float energyMod = 1f; - private boolean sealedMod = false; - private boolean selfLightedMod = false; - private boolean selfUnlightedMod = false; - private boolean sunlightSimulatedMod = false; - private BiomeGenBase biomeOverride = null; - private float humidityMod = 0f; - private float temperatureMod = 0f; - private boolean isAutomated = false; - private boolean isRetrievingPollen = false; - private int maxspeed = 0; - - public void updateModifiers() { - final GT_ApiaryModifier mods = new GT_ApiaryModifier(); - for (int i = 0; i < upgradeSlotCount; i++) { - final ItemStack s = getStackInSlot(upgradeSlot + i); - if (s == null) continue; - if (GT_ApiaryUpgrade.isUpgrade(s)) { - final GT_ApiaryUpgrade upgrade = GT_ApiaryUpgrade.getUpgrade(s); - upgrade.applyModifiers(mods, s); - } - } - - terrorityMod = mods.territory; - mutationMod = mods.mutation; - lifespanMod = mods.lifespan; - productionMod = mods.production; - floweringMod = mods.flowering; - geneticDecayMod = mods.geneticDecay; - energyMod = mods.energy; - sealedMod = mods.isSealed; - selfLightedMod = mods.isSelfLighted; - selfUnlightedMod = mods.isSelfUnlighted; - sunlightSimulatedMod = mods.isSunlightSimulated; - biomeOverride = mods.biomeOverride; - humidityMod = mods.humidity; - temperatureMod = mods.temperature; - isAutomated = mods.isAutomated; - isRetrievingPollen = mods.isCollectingPollen; - maxspeed = mods.maxSpeed; - - if (mLockedSpeed) mSpeed = maxspeed; - else mSpeed = Math.min(mSpeed, maxspeed); - } - - /** Tries to move as much of [stack] into a possible upgrade slot */ - public void addUpgrade(ItemStack stack) { - if (stack == null || !GT_ApiaryUpgrade.isUpgrade(stack)) return; - - int amount = stack.stackSize; - for (int i = upgradeSlot; i < upgradeSlot + upgradeSlotCount; i++) { - if (!isItemValidForSlot(i, stack)) continue; - - int maxStackSize = GT_ApiaryUpgrade.getUpgrade(stack) - .getMaxNumber(); - ItemStack stackInSlot = getStackInSlot(i); - - // Push into empty slot - if (stackInSlot == null) { - amount = Math.min(amount, maxStackSize); - setInventorySlotContents(i, stack.splitStack(amount)); - return; - } - - if (!GT_Utility.areStacksEqual(stack, stackInSlot)) continue; - amount = Math.max(Math.min(amount, maxStackSize - stackInSlot.stackSize), 0); - if (amount == 0) return; - stackInSlot.stackSize += amount; - stack.stackSize -= amount; - return; - } - } - - /** Returns installed upgrade in slot 0 <= [index] < getMaxUpgradeCount() */ - public ItemStack getUpgrade(int index) { - if (index < 0 || index >= upgradeSlotCount) return null; - return getStackInSlot(upgradeSlot + index); - } - - /** Tries to remove [amount] or less of the upgrade installed in slot [index]. Returns the removed ItemStack */ - public ItemStack removeUpgrade(int index, int amount) { - if (index < 0 || index >= upgradeSlotCount || amount <= 0) return null; - - ItemStack stackInSlot = getUpgrade(index); - if (stackInSlot == null) return null; - - amount = Math.min(amount, stackInSlot.stackSize); - ItemStack result = stackInSlot.splitStack(amount); - if (stackInSlot.stackSize <= 0) setInventorySlotContents(upgradeSlot + index, null); - return result; - } - - public static int getMaxUpgradeCount() { - return upgradeSlotCount; - } - - @Override - public float getTerritoryModifier(IBeeGenome iBeeGenome, float v) { - return Math.min(5, terrorityMod); - } - - @Override - public float getMutationModifier(IBeeGenome iBeeGenome, IBeeGenome iBeeGenome1, float v) { - return mutationMod; - } - - @Override - public float getLifespanModifier(IBeeGenome iBeeGenome, IBeeGenome iBeeGenome1, float v) { - return lifespanMod; - } - - @Override - public float getProductionModifier(IBeeGenome iBeeGenome, float v) { - return productionMod; - } - - @Override - public float getFloweringModifier(IBeeGenome iBeeGenome, float v) { - return floweringMod; - } - - @Override - public float getGeneticDecay(IBeeGenome iBeeGenome, float v) { - return geneticDecayMod; - } - - public float getEnergyModifier() { - return energyMod; - } - - @Override - public boolean isSealed() { - return sealedMod; - } - - @Override - public boolean isSelfLighted() { - return selfLightedMod; - } - - @Override - public boolean isSelfUnlighted() { - return selfUnlightedMod; - } - - @Override - public boolean isSunlightSimulated() { - return sunlightSimulatedMod; - } - - @Override - public boolean isHellish() { - return getBiome() == BiomeGenBase.hell; - } - - public int getMaxSpeed() { - return maxspeed; - } - - // endregion - - // region IBeeListener - - @Override - public void wearOutEquipment(int i) {} - - @Override - public void onQueenDeath() {} - - @Override - public boolean onPollenRetrieved(IIndividual iIndividual) { - return false; - } - - // endregion - - static final IBeekeepingLogic dummylogic = new IBeekeepingLogic() { - - @Override - public boolean canWork() { - return true; - } - - @Override - public void doWork() {} - - @Override - public void syncToClient() {} - - @Override - public void syncToClient(EntityPlayerMP entityPlayerMP) {} - - @Override - public int getBeeProgressPercent() { - return 0; - } - - @Override - public boolean canDoBeeFX() { - return false; - } - - @Override - public void doBeeFX() {} - - @Override - public void readFromNBT(NBTTagCompound nbtTagCompound) {} - - @Override - public void writeToNBT(NBTTagCompound nbtTagCompound) {} - }; - - private static final String POWER_SOURCE_POWER = "GT5U.machines.powersource.power", - CANCEL_PROCESS_TOOLTIP = "GT5U.machines.industrialapiary.cancel.tooltip", - SPEED_TOOLTIP = "GT5U.machines.industrialapiary.speed.tooltip", - SPEED_LOCKED_TOOLTIP = "GT5U.machines.industrialapiary.speedlocked.tooltip", - INFO_TOOLTIP = "GT5U.machines.industrialapiary.info.tooltip", - INFO_WITH_BEE_TOOLTIP = "GT5U.machines.industrialapiary.infoextended.tooltip", - UPGRADE_TOOLTIP = "GT5U.machines.industrialapiary.upgradeslot.tooltip", - AUTOQUEEN_TOOLTIP = "GT5U.machines.industrialapiary.autoqueen.tooltip"; - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder - .widget( - new SlotWidget(new ApiarySlot(inventoryHandler, queen)) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_BEE_QUEEN) - .setPos(36, 21)) - .widget( - new SlotWidget(new ApiarySlot(inventoryHandler, drone)) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_BEE_DRONE) - .setPos(36, 41)) - .widget( - SlotGroup.ofItemHandler(inventoryHandler, 2) - .startFromSlot(7) - .endAtSlot(10) - .slotCreator(i -> new ApiarySlot(inventoryHandler, i)) - .applyForWidget( - widget -> widget.setGTTooltip(() -> mTooltipCache.getData(UPGRADE_TOOLTIP)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .build() - .setPos(61, 23)); - - super.addUIWidgets(builder, buildContext); - - builder.widget( - new ButtonWidget().setOnClick((clickData, widget) -> cancelProcess()) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_CROSS) - .setGTTooltip(() -> mTooltipCache.getData(CANCEL_PROCESS_TOOLTIP)) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(7, 26) - .setSize(18, 18)) - .widget( - new CycleButtonWidget().setToggle(() -> mAutoQueen, x -> mAutoQueen = x) - .setTextureGetter( - i -> i == 0 ? GT_UITextures.OVERLAY_BUTTON_CROSS : GT_UITextures.OVERLAY_BUTTON_CHECKMARK) - .setGTTooltip(() -> mTooltipCache.getData(AUTOQUEEN_TOOLTIP)) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(7, 44) - .setSize(18, 18) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_SLOT_BEE_QUEEN)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_INFORMATION) - .setGTTooltip(() -> { - final String energyreq = GT_Utility.formatNumbers( - (int) ((float) GT_MetaTileEntity_IndustrialApiary.baseEUtUsage * getEnergyModifier() - * getAcceleration()) + getAdditionalEnergyUsage()); - final String Temp = StatCollector.translateToLocal(getTemperature().getName()); - final String Hum = StatCollector.translateToLocal(getHumidity().getName()); - if (getUsedQueen() != null - && BeeManager.beeRoot.isMember(getUsedQueen(), EnumBeeType.QUEEN.ordinal())) { - final IBee bee = BeeManager.beeRoot.getMember(getUsedQueen()); - if (bee.isAnalyzed()) { - final IBeeGenome genome = bee.getGenome(); - final IBeeModifier mod = BeeManager.beeRoot.getBeekeepingMode(getWorld()) - .getBeeModifier(); - final float tmod = getTerritoryModifier(null, 1f) * mod.getTerritoryModifier(null, 1f); - final int[] t = Arrays.stream(genome.getTerritory()) - .map(i -> (int) ((float) i * tmod)) - .toArray(); - return mTooltipCache.getUncachedTooltipData( - INFO_WITH_BEE_TOOLTIP, - energyreq, - Temp, - Hum, - genome.getSpeed(), - getProductionModifier(null, 0f) + mod.getProductionModifier(null, 0f), - Math.round( - getFloweringModifier(null, 1f) * genome.getFlowering() - * mod.getFloweringModifier(null, 1f)), - Math.round( - getLifespanModifier(null, null, 1f) * genome.getLifespan() - * mod.getLifespanModifier(null, null, 1f)), - t[0], - t[1], - t[2]); - } - } - return mTooltipCache.getUncachedTooltipData(INFO_TOOLTIP, energyreq, Temp, Hum); - }) - .attachSyncer( - new FakeSyncWidget.ItemStackSyncer(() -> usedQueen, val -> usedQueen = val), - builder, - (widget, val) -> widget.notifyTooltipChange()) - .setPos(163, 5) - .setSize(7, 18)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (clickData.mouseButton == 0) { - if (mLockedSpeed) return; - if (!clickData.shift) { - mSpeed++; - if (mSpeed > getMaxSpeed()) mSpeed = 0; - } else { - mSpeed--; - if (mSpeed < 0) mSpeed = getMaxSpeed(); - } - } else if (clickData.mouseButton == 1) { - mLockedSpeed = !mLockedSpeed; - if (mLockedSpeed) mSpeed = getMaxSpeed(); - } - }) - .setGTTooltip( - () -> mTooltipCache.getUncachedTooltipData( - mLockedSpeed ? SPEED_LOCKED_TOOLTIP : SPEED_TOOLTIP, - getAcceleration(), - GT_Utility.formatNumbers(getAdditionalEnergyUsage()))) - .attachSyncer( - new FakeSyncWidget.IntegerSyncer(() -> mSpeed, val -> mSpeed = val), - builder, - (widget, val) -> widget.notifyTooltipChange()) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer(() -> mLockedSpeed, val -> mLockedSpeed = val), - builder, - (widget, val) -> widget.notifyTooltipChange()) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setBackground(GT_UITextures.PICTURE_SQUARE_LIGHT_GRAY) - .setPos(25, 62) - .setSize(18, 18)) - .widget( - new TextWidget("x").setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(30, 63)) - .widget( - TextWidget.dynamicString(() -> String.valueOf(1 << mSpeed)) - // mSpeed is already synced - .setSynced(false) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(26, 72)); - } - - private static final FallbackableUITexture progressBarTexture = GT_UITextures - .fallbackableProgressbar("iapiary", GT_UITextures.PROGRESSBAR_ARROW); - - @Override - protected BasicUIProperties getUIProperties() { - return super.getUIProperties().toBuilder() - .progressBarTexture(progressBarTexture) - .progressBarPos(new Pos2d(70, 3)) - .build(); - } - - @Override - protected SlotWidget createItemInputSlot(int index, IDrawable[] backgrounds, Pos2d pos) { - // we have custom input slots - return null; - } - - @Override - protected CycleButtonWidget createItemAutoOutputButton() { - return (CycleButtonWidget) super.createItemAutoOutputButton().setPos(7, 62); - } - - @Override - protected CycleButtonWidget createFluidAutoOutputButton() { - return null; - } - - @Override - protected SlotWidget createChargerSlot(int x, int y, String tooltipKey, Object[] tooltipArgs) { - return (SlotWidget) super.createChargerSlot(x, y, tooltipKey, tooltipArgs).setPos(79, 62); - } - - @Override - protected DrawableWidget createErrorStatusArea(ModularWindow.Builder builder, IDrawable picture) { - return (DrawableWidget) super.createErrorStatusArea(builder, picture).setPos(100, 62) - .attachSyncer( - new FakeSyncWidget.ListSyncer<>(() -> Arrays.asList(mErrorStates.toArray(new IErrorState[0])), val -> { - mErrorStates.clear(); - mErrorStates.addAll(new HashSet<>(val)); - }, - (buffer, val) -> buffer.writeShort(val.getID()), - buffer -> ForestryAPI.errorStateRegistry.getErrorState(buffer.readShort())), - builder, - (widget, val) -> widget.notifyTooltipChange()); - } - - @Override - protected List getErrorDescriptions() { - if (!mErrorStates.isEmpty()) { - return mErrorStates.stream() - .map(state -> EnumChatFormatting.RED + StatCollector.translateToLocal("for." + state.getDescription())) - .collect(Collectors.toList()); - } else if (mStuttering) { - return mTooltipCache - .getData(STALLED_STUTTERING_TOOLTIP, StatCollector.translateToLocal(POWER_SOURCE_POWER)).text; - } else { - return Collections.emptyList(); - } - } - - @Override - protected List getErrorDescriptionsShift() { - // Don't show shift tooltip of "Progress was lost" - // as this machine does not lose progress - return getErrorDescriptions(); - } - - private int getAcceleration() { - return 1 << mSpeed; - } - - private int getAdditionalEnergyUsage() { - final int accelerated = getAcceleration(); - int energyusage = 0; - if (accelerated == 2) energyusage = 32; - else if (accelerated > 2) energyusage = 32 * accelerated << (mSpeed - 2); - return energyusage; - } - - private class ApiarySlot extends BaseSlot { - - public ApiarySlot(IItemHandlerModifiable inventory, int index) { - super(inventory, index); - } - - @Override - public boolean isItemValidPhantom(ItemStack stack) { - return super.isItemValidPhantom(stack) && getBaseMetaTileEntity().isItemValidForSlot(getSlotIndex(), stack); - } - - @Override - public void onSlotChanged() { - super.onSlotChanged(); - onInventoryUpdate(getSlotIndex()); - } - } - - private static final UIInfo IndustrialApiaryUI = GT_UIInfos.GTTileEntityUIFactory - .apply(GT_ModularUIContainer_IndustrialApiary::new); - - private static class GT_ModularUIContainer_IndustrialApiary extends ModularUIContainer { - - public GT_ModularUIContainer_IndustrialApiary(ModularUIContext context, ModularWindow mainWindow) { - super(context, mainWindow); - } - - private final int playerInventorySlot = 36; - - @Override - public ItemStack slotClick(int aSlotNumber, int aMouseclick, int aShifthold, EntityPlayer aPlayer) { - if (!(aSlotNumber >= playerInventorySlot + 2 && aSlotNumber < playerInventorySlot + 2 + 4)) - return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); - if (aShifthold == 5) return null; - if (aShifthold != 0) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); - if (aMouseclick > 1) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); - final ItemStack s = aPlayer.inventory.getItemStack(); - if (s == null) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); - final Slot slot = getSlot(aSlotNumber); - final ItemStack slotStack = slot.getStack(); - if (slotStack != null && !GT_Utility.areStacksEqual(slotStack, s)) return null; // super would replace item - if (slotStack == null && !slot.isItemValid(s)) - return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); - if (!GT_ApiaryUpgrade.isUpgrade(s)) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); - int max = GT_ApiaryUpgrade.getUpgrade(s) - .getMaxNumber(); - if (slotStack != null) max = Math.max(0, max - slotStack.stackSize); - max = Math.min(max, s.stackSize); - if (max == 0) return null; - if (aMouseclick == 1) max = 1; - if (max == s.stackSize) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); - final ItemStack newStack = s.splitStack(s.stackSize - max); - final ItemStack result = super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); - aPlayer.inventory.setItemStack(newStack); - return result; - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) { - final Slot s = getSlot(aSlotIndex); - if (s == null) return super.transferStackInSlot(aPlayer, aSlotIndex); - if (aSlotIndex >= playerInventorySlot) return super.transferStackInSlot(aPlayer, aSlotIndex); - final ItemStack aStack = s.getStack(); - if (aStack == null) return super.transferStackInSlot(aPlayer, aSlotIndex); - if (!GT_ApiaryUpgrade.isUpgrade(aStack)) return super.transferStackInSlot(aPlayer, aSlotIndex); - for (int i = playerInventorySlot + 2; i < playerInventorySlot + 2 + 4; i++) { - final Slot iSlot = getSlot(i); - final ItemStack iStack = iSlot.getStack(); - if (iStack == null) { - if (!iSlot.isItemValid(aStack)) continue; - } else { - if (!GT_Utility.areStacksEqual(aStack, iStack)) continue; - } - int max = GT_ApiaryUpgrade.getUpgrade(aStack) - .getMaxNumber(); - if (iStack == null) { - max = Math.min(max, aStack.stackSize); - final ItemStack newstack = aStack.splitStack(max); - iSlot.putStack(newstack); - } else { - max = Math.max(0, max - iStack.stackSize); - max = Math.min(max, aStack.stackSize); - iStack.stackSize += max; - aStack.stackSize -= max; - iSlot.onSlotChanged(); - } - if (aStack.stackSize == 0) s.putStack(null); - else s.onSlotChanged(); - break; - } - return null; - } - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - if (tag.hasKey("queen")) { - currenttip.add( - "Current Queen: " + EnumChatFormatting.GREEN + StatCollector.translateToLocal(tag.getString("queen"))); - } - if (tag.hasKey("dummyProduction")) { - currenttip.add( - "Effective Production: " + EnumChatFormatting.AQUA - + String.format("b^0.52 * %.2f", tag.getFloat("dummyProduction"))); - } - if (tag.hasKey("errors")) { - NBTTagCompound errorNbt = tag.getCompoundTag("errors"); - for (int i = 0; i < errorNbt.getInteger("size"); i++) { - currenttip.add( - "Error: " + EnumChatFormatting.RED - + StatCollector.translateToLocal("for." + errorNbt.getString("e" + i))); - } - } - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - if (usedQueen != null) { - IBeeGenome genome = beeRoot.getMember(usedQueen) - .getGenome(); - tag.setString( - "queen", - genome.getPrimary() - .getUnlocalizedName()); - float prodModifier = getProductionModifier(genome, 0f); - prodModifier += beeRoot.getBeekeepingMode(world) - .getBeeModifier() - .getProductionModifier(genome, prodModifier); - float dummyProduction = 100f * Bee.getFinalChance(0.01f, genome.getSpeed(), prodModifier, 8f); - tag.setFloat("dummyProduction", dummyProduction); - } - if (hasErrors()) { - NBTTagCompound errorNbt = new NBTTagCompound(); - int errorCounter = 0; - for (IErrorState error : mErrorStates) { - errorNbt.setString("e" + errorCounter++, error.getDescription()); - } - errorNbt.setInteger("size", errorCounter); - tag.setTag("errors", errorNbt); - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Massfabricator.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Massfabricator.java deleted file mode 100644 index 7eaa8122c1..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Massfabricator.java +++ /dev/null @@ -1,241 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MASSFAB; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MASSFAB_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MASSFAB_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MASSFAB_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_MASSFAB; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_MASSFAB_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_MASSFAB_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_MASSFAB_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_MASSFAB; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_MASSFAB_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_MASSFAB_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_MASSFAB_GLOW; - -import java.util.Arrays; - -import javax.annotation.ParametersAreNonnullByDefault; - -import net.minecraftforge.fluids.FluidStack; - -import com.google.common.primitives.Ints; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.MachineType; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.objects.overclockdescriber.EUOverclockDescriber; -import gregtech.api.objects.overclockdescriber.OverclockDescriber; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.common.config.machinestats.ConfigMassFabricator; - -public class GT_MetaTileEntity_Massfabricator extends GT_MetaTileEntity_BasicMachine { - - public static int sUUAperUUM = 1; - public static int sUUASpeedBonus = 4; - public static int sDurationMultiplier = 3215; - public static boolean sRequiresUUA = false; - public static int BASE_EUT = 256; - public static GT_Recipe nonUUARecipe; - public static GT_Recipe uuaRecipe; - - public GT_MetaTileEntity_Massfabricator(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 8, - MachineType.MATTER_FABRICATOR.tooltipDescription(), - 1, - 1, - TextureFactory.of( - TextureFactory.of(OVERLAY_SIDE_MASSFAB_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_MASSFAB_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_SIDE_MASSFAB), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_MASSFAB_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_FRONT_MASSFAB_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MASSFAB_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_FRONT_MASSFAB), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MASSFAB_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_MASSFAB_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_MASSFAB_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_MASSFAB), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_MASSFAB_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_BOTTOM_MASSFAB_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_MASSFAB_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_BOTTOM_MASSFAB), - TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_MASSFAB_GLOW) - .glow() - .build())); - } - - public GT_MetaTileEntity_Massfabricator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 8, aDescription, aTextures, 1, 1); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Massfabricator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public boolean allowSelectCircuit() { - return true; - } - - @Override - protected OverclockDescriber createOverclockDescriber() { - return new MassfabricatorOverclockDescriber(mTier, mAmperage); - } - - @Override - public void onConfigLoad() { - super.onConfigLoad(); - sDurationMultiplier = ConfigMassFabricator.durationMultiplier; - sUUAperUUM = ConfigMassFabricator.UUAPerUUM; - sUUASpeedBonus = ConfigMassFabricator.UUASpeedBonus; - sRequiresUUA = ConfigMassFabricator.requiresUUA; - Materials.UUAmplifier.mChemicalFormula = ("Mass Fabricator Eff/Speed Bonus: x" + sUUASpeedBonus); - } - - @Override - public long maxAmperesIn() { - return 10; - } - - @Override - public long maxEUStore() { - return V[mTier] * 512L; - } - - @Override - public int checkRecipe() { - FluidStack tFluid = getDrainableStack(); - if ((tFluid == null) || (tFluid.amount < getCapacity())) { - this.mOutputFluid = Materials.UUMatter.getFluid(1L); - calculateCustomOverclock(containsUUA(getFillableStack()) ? uuaRecipe : nonUUARecipe); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - if (containsUUA(tFluid = getFillableStack())) { - tFluid.amount -= sUUAperUUM; - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - return sRequiresUUA || Arrays.stream(getAllInputs()) - .anyMatch(s -> ItemList.Circuit_Integrated.isStackEqual(s, true, true)) - ? FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS - : FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - return DID_NOT_FIND_RECIPE; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.massFabFakeRecipes; - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return aFluid.isFluidEqual(Materials.UUAmplifier.getFluid(1L)); - } - - @Override - public int getCapacity() { - return Math.max(sUUAperUUM, 1000); - } - - private boolean containsUUA(FluidStack aFluid) { - return aFluid != null && aFluid.amount >= sUUAperUUM && aFluid.isFluidEqual(Materials.UUAmplifier.getFluid(1L)); - } - - @ParametersAreNonnullByDefault - @MethodsReturnNonnullByDefault - protected class MassfabricatorOverclockDescriber extends EUOverclockDescriber { - - protected MassfabricatorOverclockDescriber(byte tier, int amperage) { - super(tier, amperage); - } - - @Override - public GT_OverclockCalculator createCalculator(GT_OverclockCalculator template, GT_Recipe recipe) { - return super.createCalculator(template, recipe).setEUt(Ints.saturatedCast(V[tier] * amperage)) - .setEUtIncreasePerOC(2.0) - .limitOverclockCount(tier - 1) - .setOneTickDiscount(false); - } - - @Override - protected boolean shouldShowAmperage(GT_OverclockCalculator calculator) { - return true; - } - - @Override - protected String getVoltageString(GT_OverclockCalculator calculator) { - // standard amperage calculation doesn't work here - return decorateWithOverclockLabel(GT_Utility.formatNumbers(V[mTier]) + " EU/t", calculator) - + GT_Utility.getTierNameWithParentheses(V[mTier]); - } - - @Override - protected String getAmperageString(GT_OverclockCalculator calculator) { - int amperage = this.amperage; - int denominator = 1; - for (int i = 1; i < mTier; i++) { - amperage >>= 1; - if (amperage == 0) { - denominator <<= 1; - } - } - if (amperage > 0) { - return GT_Utility.formatNumbers(amperage); - } else { - return "1/" + denominator; - } - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java deleted file mode 100644 index 575e98c5c6..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MicrowaveEnergyTransmitter.java +++ /dev/null @@ -1,495 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW; - -import java.util.function.Consumer; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IEnergyConnected; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.common.config.machinestats.ConfigMicrowaveEnergyTransmitter; -import gregtech.common.config.machinestats.ConfigTeleporter; - -public class GT_MetaTileEntity_MicrowaveEnergyTransmitter extends GT_MetaTileEntity_BasicTank - implements IAddGregtechLogo, IAddUIWidgets { - - private static boolean sInterDimensionalTeleportAllowed = true; - private static int mMaxLoss = 50; - private static int mMaxLossDistance = 10000; - private static boolean mPassiveEnergyUse = true; - public int mTargetX = 0; - public int mTargetY = 0; - public int mTargetZ = 0; - public int mTargetD = 0; - public boolean mDebug = false; - public boolean hasBlock = false; - public int tTargetX = 0; - public int tTargetY = 0; - public int tTargetZ = 0; - public int tTargetD = 0; - public TileEntity tTile = null; - - public GT_MetaTileEntity_MicrowaveEnergyTransmitter(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 3, - new String[] { "Transmits Energy Wirelessly", "Use Nitrogen Plasma", "for Inter-dimensional transmission", - "0.004EU Loss per 100 Blocks" }); - } - - public GT_MetaTileEntity_MicrowaveEnergyTransmitter(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - public GT_MetaTileEntity_MicrowaveEnergyTransmitter(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) return true; - this.hasBlock = checkForBlock(); - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_MicrowaveEnergyTransmitter( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public String[] getInfoData() { - return new String[] { "Coordinates:", - "X: " + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(this.mTargetX) + EnumChatFormatting.RESET, - "Y: " + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(this.mTargetY) + EnumChatFormatting.RESET, - "Z: " + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(this.mTargetZ) + EnumChatFormatting.RESET, - "Dimension: " + EnumChatFormatting.GREEN + this.mTargetD + EnumChatFormatting.RESET, - "Dimension Valid: " + (GT_Utility.isRealDimension(this.mTargetD) - ? EnumChatFormatting.GREEN + "Yes" + EnumChatFormatting.RESET - : EnumChatFormatting.RED + "No" + EnumChatFormatting.RESET), - "Dimension Registered: " + (DimensionManager.isDimensionRegistered(this.mTargetD) - ? EnumChatFormatting.GREEN + "Yes" + EnumChatFormatting.RESET - : EnumChatFormatting.RED + "No" + EnumChatFormatting.RESET) }; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == ForgeDirection.DOWN) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1] }; - if (aActive) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], - TextureFactory.of(OVERLAY_TELEPORTER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_TELEPORTER_ACTIVE_GLOW) - .glow() - .build() }; - return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_TELEPORTER), - TextureFactory.builder() - .addIcon(OVERLAY_TELEPORTER_GLOW) - .glow() - .build() }; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - if (mFluid != null) aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); - aNBT.setInteger("mTargetX", this.mTargetX); - aNBT.setInteger("mTargetY", this.mTargetY); - aNBT.setInteger("mTargetZ", this.mTargetZ); - aNBT.setInteger("mTargetD", this.mTargetD); - aNBT.setBoolean("mDebug", this.mDebug); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mFluid = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid")); - this.mTargetX = aNBT.getInteger("mTargetX"); - this.mTargetY = aNBT.getInteger("mTargetY"); - this.mTargetZ = aNBT.getInteger("mTargetZ"); - this.mTargetD = aNBT.getInteger("mTargetD"); - this.mDebug = aNBT.getBoolean("mDebug"); - } - - @Override - public void onConfigLoad() { - sInterDimensionalTeleportAllowed = ConfigTeleporter.interDimensionalTPAllowed; - mMaxLoss = Math.max(ConfigMicrowaveEnergyTransmitter.maxLoss, 11); - mMaxLossDistance = ConfigMicrowaveEnergyTransmitter.maxLossDistance; - mPassiveEnergyUse = ConfigMicrowaveEnergyTransmitter.passiveEnergyUse; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - if (aBaseMetaTileEntity.isServerSide()) { - if ((this.mTargetX == 0) && (this.mTargetY == 0) && (this.mTargetZ == 0) && (this.mTargetD == 0)) { - this.mTargetX = aBaseMetaTileEntity.getXCoord(); - this.mTargetY = aBaseMetaTileEntity.getYCoord(); - this.mTargetZ = aBaseMetaTileEntity.getZCoord(); - this.mTargetD = aBaseMetaTileEntity.getWorld().provider.dimensionId; - } - this.hasBlock = checkForBlock(); - } - } - - public boolean checkForBlock() { - for (byte i = -5; i <= 5; i = (byte) (i + 1)) { - for (byte j = -5; j <= 5; j = (byte) (j + 1)) { - for (byte k = -5; k <= 5; k = (byte) (k + 1)) { - if (getBaseMetaTileEntity().getBlockOffset(i, j, k) == GregTech_API.sBlockMetal5 - && getBaseMetaTileEntity().getMetaIDOffset(i, j, k) == 8) { // require osmiridium block - return true; - } - } - } - } - return false; - } - - public boolean hasDimensionalTeleportCapability() { - return this.mDebug || (sInterDimensionalTeleportAllowed && (this.hasBlock - || mFluid != null && mFluid.isFluidEqual(Materials.Nitrogen.getPlasma(1)) && mFluid.amount >= 1000)); - } - - public boolean isDimensionalTeleportAvailable() { - return this.mDebug || (hasDimensionalTeleportCapability() && GT_Utility.isRealDimension(this.mTargetD) - && GT_Utility.isRealDimension(getBaseMetaTileEntity().getWorld().provider.dimensionId)); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (mFluid == null) { - mFluid = Materials.Nitrogen.getPlasma(0); - } - super.onPostTick(aBaseMetaTileEntity, aTick); - if (getBaseMetaTileEntity().isServerSide()) { - if (getBaseMetaTileEntity().getTimer() % 100L == 50L) { - this.hasBlock = checkForBlock(); - } - if ((getBaseMetaTileEntity().isAllowedToWork()) && (getBaseMetaTileEntity().getRedstone())) { - if (getBaseMetaTileEntity().getStoredEU() > (V[mTier] * 16)) { - if (mPassiveEnergyUse) { - getBaseMetaTileEntity().decreaseStoredEnergyUnits(2L << (mTier - 1), false); - } - if (hasDimensionalTeleportCapability() - && this.mTargetD != getBaseMetaTileEntity().getWorld().provider.dimensionId - && mFluid.isFluidEqual(Materials.Nitrogen.getPlasma(1))) { - mFluid.amount--; - if (mFluid.amount < 1) { - mFluid = null; - } - } - if (tTargetD != mTargetD || tTargetX != mTargetX || tTargetY != mTargetY || tTargetZ != mTargetZ) { - tTargetD = mTargetD; - tTargetX = mTargetX; - tTargetY = mTargetY; - tTargetZ = mTargetZ; - if (this.mTargetD == getBaseMetaTileEntity().getWorld().provider.dimensionId) { - tTile = getBaseMetaTileEntity().getTileEntity(this.mTargetX, this.mTargetY, this.mTargetZ); - } else { - World tWorld = DimensionManager.getWorld(this.mTargetD); - if (tWorld != null) { - tTile = tWorld.getTileEntity(this.mTargetX, this.mTargetY, this.mTargetZ); - } - } - } - int tDistance = distanceCalculation(); - if (tTile != null) { - if (tTile instanceof IEnergyConnected) { - long packetSize = V[mTier]; - if (tTile instanceof IGregTechTileEntity) { - IMetaTileEntity mte = ((IGregTechTileEntity) tTile).getMetaTileEntity(); - if (mte instanceof BaseMetaTileEntity) { - packetSize = ((BaseMetaTileEntity) mte).getMaxSafeInput(); - } - } - long energyUse = 10; - if (mMaxLossDistance != 0) { - energyUse = GT_Utility - .safeInt(10L + (tDistance * Math.max(mMaxLoss - 10L, 0) / mMaxLossDistance)); - } - energyUse = packetSize + ((V[mTier] * energyUse) / 100); - if (getBaseMetaTileEntity().isUniversalEnergyStored(energyUse)) { - if (((IEnergyConnected) tTile).injectEnergyUnits(ForgeDirection.UNKNOWN, packetSize, 1) - > 0) { - getBaseMetaTileEntity().decreaseStoredEnergyUnits(energyUse, false); - } - } - } - } - } - getBaseMetaTileEntity().setActive(true); - } else { - getBaseMetaTileEntity().setActive(false); - } - } - } - - private int distanceCalculation() { - return Math.abs( - ((this.mTargetD != getBaseMetaTileEntity().getWorld().provider.dimensionId) - && (isDimensionalTeleportAvailable()) ? 100 : 1) - * (int) Math.sqrt( - Math.pow(getBaseMetaTileEntity().getXCoord() - this.mTargetX, 2.0D) - + Math.pow(getBaseMetaTileEntity().getYCoord() - this.mTargetY, 2.0D) - + Math.pow(getBaseMetaTileEntity().getZCoord() - this.mTargetZ, 2.0D))); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isOverclockerUpgradable() { - return false; - } - - @Override - public boolean isTransformerUpgradable() { - return false; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return true; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return V[mTier] * 16; - } - - @Override - public long maxEUStore() { - return V[mTier] * 256; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxSteamStore() { - return maxEUStore(); - } - - @Override - public long maxAmperesIn() { - return 3; - } - - @Override - public int getStackDisplaySlot() { - return 2; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public int getInputSlot() { - return 0; - } - - @Override - public int getOutputSlot() { - return 0; - } - - @Override - public int getCapacity() { - return 64000; - } - - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public boolean displaysItemStack() { - return false; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return null; - } - - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setSize(90, 72) - .setPos(43, 4)) - .widget( - new TextWidget().setStringSupplier(() -> "X: " + numberFormat.format(mTargetX)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 8)) - .widget( - new TextWidget().setStringSupplier(() -> "Y: " + numberFormat.format(mTargetY)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 16)) - .widget( - new TextWidget().setStringSupplier(() -> "Z: " + numberFormat.format(mTargetZ)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 24)) - .widget( - new TextWidget().setStringSupplier(() -> "Dim: " + numberFormat.format(mTargetD)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 32)) - .widget( - TextWidget.dynamicString(() -> "Dim Valid: " + (GT_Utility.isRealDimension(mTargetD) ? "Yes" : "No")) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> hasDimensionalTeleportCapability()) - .setPos(46, 40)) - .widget(new FakeSyncWidget.FluidStackSyncer(() -> mFluid, val -> mFluid = val)); - - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, -512, -64, 7); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, -16, -1, 25); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, 16, 1, 133); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, 512, 64, 151); - - addChangeNumberButton( - builder, - GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, - val -> mTargetD += val, - -16, - -8, - 7, - 58); - addChangeNumberButton( - builder, - GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, - val -> mTargetD += val, - -4, - -1, - 25, - 58); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> mTargetD += val, 4, 1, 133, 58); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> mTargetD += val, 16, 8, 151, 58); - } - - private void addChangeNumberButtons(ModularWindow.Builder builder, IDrawable overlay, int addNumberShift, - int addNumber, int xPos) { - addChangeNumberButton(builder, overlay, val -> mTargetX += val, addNumberShift, addNumber, xPos, 4); - addChangeNumberButton(builder, overlay, val -> mTargetY += val, addNumberShift, addNumber, xPos, 22); - addChangeNumberButton(builder, overlay, val -> mTargetZ += val, addNumberShift, addNumber, xPos, 40); - } - - private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, - int addNumberShift, int addNumber, int xPos, int yPos) { - builder.widget( - new ButtonWidget() - .setOnClick((clickData, widget) -> setter.accept(clickData.shift ? addNumberShift : addNumber)) - .setBackground(GT_UITextures.BUTTON_STANDARD, overlay) - .setSize(18, 18) - .setPos(xPos, yPos)); - } - - @Override - public GUITextureSet getGUITextureSet() { - return new GUITextureSet().setGregTechLogo(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) - .setSize(17, 17) - .setPos(113, 56)); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java deleted file mode 100644 index b1ce994fb3..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Miner.java +++ /dev/null @@ -1,407 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.GT_Values.debugBlockMiner; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.ChunkPosition; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; - -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.recipe.BasicUIProperties; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_TileEntity_Ores; -import gregtech.common.misc.GT_DrillingLogicDelegate; -import gregtech.common.misc.GT_IDrillingLogicDelegateOwner; - -public class GT_MetaTileEntity_Miner extends GT_MetaTileEntity_BasicMachine - implements GT_IDrillingLogicDelegateOwner, IAddUIWidgets { - - static final int[] RADIUS = { 8, 8, 16, 24, 32 }; // Miner radius per tier - static final int[] SPEED = { 160, 160, 80, 40, 20 }; // Miner cycle time per tier - static final int[] ENERGY = { 8, 8, 32, 128, 512 }; // Miner energy consumption per tier - - /** Miner configured radius */ - private int radiusConfig; - /** Found ore blocks cache of current drill depth */ - private final ArrayList oreBlockPositions = new ArrayList<>(); - - /** General pipe accessor */ - private final GT_DrillingLogicDelegate pipe = new GT_DrillingLogicDelegate(this); - - private final int mSpeed; - - public GT_MetaTileEntity_Miner(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, - new String[] { "Digging ore instead of you", "Use Screwdriver to regulate work area", - "Use Soft Mallet to disable and retract the pipe", - String.format("%d EU/t, %d sec per block, no stuttering", ENERGY[aTier], SPEED[aTier] / 20), - String.format("Maximum work area %dx%d", (RADIUS[aTier] * 2 + 1), (RADIUS[aTier] * 2 + 1)), - String.format("Fortune bonus of %d", aTier) }, - 2, - 2, - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_SIDE_ACTIVE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_SIDE_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_SIDE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_SIDE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_FRONT_ACTIVE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_FRONT_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_FRONT")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_FRONT_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_TOP_ACTIVE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_TOP_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_TOP")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_TOP_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_BOTTOM_ACTIVE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_BOTTOM_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_BOTTOM")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_BOTTOM_GLOW")) - .glow() - .build())); - mSpeed = SPEED[aTier]; - radiusConfig = RADIUS[mTier]; - } - - public GT_MetaTileEntity_Miner(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures, 2, 2); - mSpeed = SPEED[aTier]; - radiusConfig = RADIUS[mTier]; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Miner(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - pipe.findTipDepth(); - fillOreList(aBaseMetaTileEntity); - } - - @Override - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) // - && aStack.getItem() == GT_DrillingLogicDelegate.MINING_PIPE_STACK.getItem(); - } - - /** Both output slots must be free to work */ - public boolean hasFreeSpace() { - for (int i = getOutputSlot(); i < getOutputSlot() + 2; i++) { - if (mInventory[i] != null) { - return false; - } - } - return true; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - if (side != getBaseMetaTileEntity().getFrontFacing() && side != mMainFacing) { - if (aPlayer.isSneaking()) { - if (radiusConfig >= 0) { - radiusConfig--; - } - if (radiusConfig < 0) { - radiusConfig = RADIUS[mTier]; - } - } else { - if (radiusConfig <= RADIUS[mTier]) { - radiusConfig++; - } - if (radiusConfig > RADIUS[mTier]) { - radiusConfig = 0; - } - } - - GT_Utility.sendChatToPlayer( - aPlayer, - String.format( - "%s %dx%d", - StatCollector.translateToLocal("GT5U.machines.workareaset"), - (radiusConfig * 2 + 1), - (radiusConfig * 2 + 1))); - - // Rebuild ore cache after change config - fillOreList(getBaseMetaTileEntity()); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (!aBaseMetaTileEntity.isServerSide()) { - return; - } - - // Pipe workaround - pipe.onOwnerPostTick(aBaseMetaTileEntity, aTick); - - if (!aBaseMetaTileEntity.isAllowedToWork()) { - mMaxProgresstime = 0; - if (debugBlockMiner) { - GT_Log.out.println("MINER: Disabled"); - } - return; - } - - if (!hasFreeSpace()) { - mMaxProgresstime = 0; - if (debugBlockMiner) { - GT_Log.out.println("MINER: No free space"); - } - return; - } - - if (!aBaseMetaTileEntity.isUniversalEnergyStored((long) ENERGY[mTier] * (mSpeed - mProgresstime))) { - mMaxProgresstime = 0; - if (debugBlockMiner) { - GT_Log.out.println( - "MINER: Not enough energy yet, want " + (ENERGY[mTier] * mSpeed) - + " have " - + aBaseMetaTileEntity.getUniversalEnergyStored()); - } - return; - } - - /* Checks if machine are waiting new mining pipe item */ - if (!pipe.canContinueDrilling(aTick)) { - mMaxProgresstime = 0; - return; - } - - mMaxProgresstime = mSpeed; - - aBaseMetaTileEntity.decreaseStoredEnergyUnits(ENERGY[mTier], true); - - // Real working only when progress done. TODO some legacy code... refactorings needed - if (mProgresstime == mSpeed - 1) { - if (pipe.getTipDepth() == 0 || oreBlockPositions.isEmpty()) { - boolean descends = pipe.descent(aBaseMetaTileEntity); - if (descends) { - fillOreList(aBaseMetaTileEntity); - } - } else { - int x; - int y; - int z; - Block oreBlock; - boolean isOre; - do { - ChunkPosition oreBlockPos = oreBlockPositions.remove(0); - oreBlock = aBaseMetaTileEntity - .getBlockOffset(oreBlockPos.chunkPosX, oreBlockPos.chunkPosY, oreBlockPos.chunkPosZ); - x = aBaseMetaTileEntity.getXCoord() + oreBlockPos.chunkPosX; - y = aBaseMetaTileEntity.getYCoord() + oreBlockPos.chunkPosY; - z = aBaseMetaTileEntity.getZCoord() + oreBlockPos.chunkPosZ; - isOre = GT_Utility.isOre( - oreBlock, - aBaseMetaTileEntity.getWorld() - .getBlockMetadata(x, y, z)); - } // someone else might have removed the block - while (!isOre && !oreBlockPositions.isEmpty()); - - if (isOre) { - pipe.mineBlock(aBaseMetaTileEntity, oreBlock, x, y, z); - } - } - } - } - - /** Finds the ores in current drill Y level */ - private void fillOreList(IGregTechTileEntity aBaseMetaTileEntity) { - if (pipe.getTipDepth() == 0) { - return; - } - oreBlockPositions.clear(); - for (int z = -radiusConfig; z <= radiusConfig; ++z) { - for (int x = -radiusConfig; x <= radiusConfig; ++x) { - Block block = aBaseMetaTileEntity.getBlockOffset(x, pipe.getTipDepth(), z); - int blockMeta = aBaseMetaTileEntity.getMetaIDOffset(x, pipe.getTipDepth(), z); - - // todo some weird checks. refactorings needed - if (block instanceof GT_Block_Ores_Abstract) { - TileEntity oreEntity = aBaseMetaTileEntity.getTileEntityOffset(x, pipe.getTipDepth(), z); - if (oreEntity instanceof GT_TileEntity_Ores && ((GT_TileEntity_Ores) oreEntity).mNatural) { - oreBlockPositions.add(new ChunkPosition(x, pipe.getTipDepth(), z)); - } - } else if (GT_Utility.isOre(block, blockMeta)) { - oreBlockPositions.add(new ChunkPosition(x, pipe.getTipDepth(), z)); - } - } - } - } - - /** Pulls (or check can pull) items from an input slots. */ - @Override - public boolean pullInputs(Item item, int count, boolean simulate) { - for (int i = 0; i < mInputSlotCount; i++) { - ItemStack stack = getInputAt(i); - if (stack != null && stack.getItem() == item && stack.stackSize >= count) { - if (simulate) { - return true; - } - stack.stackSize -= count; - if (stack.stackSize == 0) { - mInventory[getInputSlot() + i] = null; - } - return true; - } - } - return false; - } - - /** Pushes (or check can push) item to output slots. */ - @Override - public boolean pushOutputs(ItemStack stack, int count, boolean simulate, boolean allowInputSlots) { - return allowInputSlots && pushOutput(getInputSlot(), getInputSlot() + mInputSlotCount, stack, count, simulate) - || pushOutput(getOutputSlot(), getOutputSlot() + mOutputItems.length, stack, count, simulate); - } - - private boolean pushOutput(int startIndex, int endIndex, ItemStack stack, int count, boolean simulate) { - for (int i = startIndex; i < endIndex; i++) { - ItemStack slot = mInventory[i]; - if (slot == null || slot.stackSize == 0) { - if (!simulate) { - ItemStack copy = stack.copy(); - copy.stackSize = count; - mInventory[i] = copy; - } - return true; - } else if (GT_Utility.areStacksEqual(slot, stack) && slot.stackSize <= slot.getMaxStackSize() - count) { - if (!simulate) { - slot.stackSize += count; - } - return true; - } - } - return false; - } - - @Override - public long maxEUStore() { - return Math.max(V[mTier] * 64, 4096); - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - super.setItemNBT(aNBT); - aNBT.setInteger("radiusConfig", radiusConfig); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("radiusConfig", radiusConfig); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("radiusConfig")) { - int newRadius = aNBT.getInteger("radiusConfig"); - if (RADIUS[mTier] <= newRadius && newRadius > 0) { - radiusConfig = newRadius; - } - } - } - - @Override - public String[] getInfoData() { - return new String[] { - String.format( - "%s%s%s", - EnumChatFormatting.BLUE, - StatCollector.translateToLocal("GT5U.machines.miner"), - EnumChatFormatting.RESET), - String.format( - "%s: %s%d%s %s", - StatCollector.translateToLocal("GT5U.machines.workarea"), - EnumChatFormatting.GREEN, - (radiusConfig * 2 + 1), - EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.machines.blocks")) }; - } - - @Override - public int getMachineTier() { - return mTier; - } - - @Override - public int getMachineSpeed() { - return mSpeed; - } - - public GT_DrillingLogicDelegate getPipe() { - return pipe; - } - - private static final FallbackableUITexture progressBarTexture = GT_UITextures - .fallbackableProgressbar("miner", GT_UITextures.PROGRESSBAR_CANNER); - - @Override - protected BasicUIProperties getUIProperties() { - return super.getUIProperties().toBuilder() - .progressBarTexture(progressBarTexture) - .build(); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MonsterRepellent.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MonsterRepellent.java deleted file mode 100644 index fde78cfa2e..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_MonsterRepellent.java +++ /dev/null @@ -1,182 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW; - -import java.util.Arrays; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -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.render.TextureFactory; -import gregtech.api.util.GT_SpawnEventHandler; - -public class GT_MetaTileEntity_MonsterRepellent extends GT_MetaTileEntity_TieredMachineBlock { - - public int mRange = 16; - - public GT_MetaTileEntity_MonsterRepellent(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 0, - "Repels nasty Creatures. Range: " + (4 + (12 * aTier)) - + " unpowered / " - + (16 + (48 * aTier)) - + " powered. Costs " - + (1L << (aTier * 2)) - + " EU/t"); - } - - public GT_MetaTileEntity_MonsterRepellent(String aName, int aTier, int aInvSlotCount, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_MonsterRepellent(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_MonsterRepellent( - this.mName, - this.mTier, - this.mInventory.length, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection != ForgeDirection.UP) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1] }; - if (active) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], - TextureFactory.of(OVERLAY_TELEPORTER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_TELEPORTER_ACTIVE_GLOW) - .glow() - .build() }; - return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_TELEPORTER), - TextureFactory.builder() - .addIcon(OVERLAY_TELEPORTER_GLOW) - .glow() - .build() }; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (aBaseMetaTileEntity.isAllowedToWork() && aBaseMetaTileEntity.isServerSide()) { - int[] tCoords = { aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), aBaseMetaTileEntity.getWorld().provider.dimensionId }; - if ((aTimer % 600 == 0) && !GT_SpawnEventHandler.mobReps.contains(tCoords)) { - GT_SpawnEventHandler.mobReps.add(tCoords); - } - if (aBaseMetaTileEntity.isUniversalEnergyStored(getMinimumStoredEU()) - && aBaseMetaTileEntity.decreaseStoredEnergyUnits(1L << (this.mTier * 2), false)) { - mRange = GT_SpawnEventHandler.getPoweredRepellentRange(mTier); - } else { - mRange = GT_SpawnEventHandler.getUnpoweredRepellentRange(mTier); - } - } - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - int[] tCoords = { aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord(), aBaseMetaTileEntity.getWorld().provider.dimensionId }; - GT_SpawnEventHandler.mobReps.add(tCoords); - } - - @Override - public void onRemoval() { - int[] tCoords = { this.getBaseMetaTileEntity() - .getXCoord(), - this.getBaseMetaTileEntity() - .getYCoord(), - this.getBaseMetaTileEntity() - .getZCoord(), - this.getBaseMetaTileEntity() - .getWorld().provider.dimensionId }; - GT_SpawnEventHandler.mobReps.removeIf(coords -> Arrays.equals(coords, tCoords)); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return true; - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 512L; - } - - @Override - public long maxEUStore() { - return 512L + V[mTier] * 50; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxAmperesIn() { - return 2; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return null; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) {} - - @Override - public void loadNBTData(NBTTagCompound aNBT) {} -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_PotionBrewer.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_PotionBrewer.java deleted file mode 100644 index 8254c6440d..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_PotionBrewer.java +++ /dev/null @@ -1,225 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.MachineType; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_PotionBrewer extends GT_MetaTileEntity_BasicMachine { - - public GT_MetaTileEntity_PotionBrewer(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, - MachineType.BREWERY.tooltipDescription(), - 1, - 0, - TextureFactory.of( - TextureFactory.of( - new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_SIDE_POTIONBREWER_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/potionbrewer/OVERLAY_SIDE_POTIONBREWER_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_SIDE_POTIONBREWER")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_SIDE_POTIONBREWER_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of( - new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_FRONT_POTIONBREWER_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/potionbrewer/OVERLAY_FRONT_POTIONBREWER_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_FRONT_POTIONBREWER")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/potionbrewer/OVERLAY_FRONT_POTIONBREWER_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of( - new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_TOP_POTIONBREWER_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/potionbrewer/OVERLAY_TOP_POTIONBREWER_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_TOP_POTIONBREWER")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_TOP_POTIONBREWER_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of( - new Textures.BlockIcons.CustomIcon( - "basicmachines/potionbrewer/OVERLAY_BOTTOM_POTIONBREWER_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/potionbrewer/OVERLAY_BOTTOM_POTIONBREWER_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_BOTTOM_POTIONBREWER")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/potionbrewer/OVERLAY_BOTTOM_POTIONBREWER_GLOW")) - .glow() - .build())); - } - - public GT_MetaTileEntity_PotionBrewer(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures, 1, 0); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PotionBrewer(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.brewingRecipes; - } - - @Override - public int checkRecipe() { - int tCheck = super.checkRecipe(); - if (tCheck != DID_NOT_FIND_RECIPE) { - return tCheck; - } - - calculateOverclockedNess(4, 128); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - - FluidStack aFluid = getFillableStack(); - if ((getDrainableStack() == null) && (aFluid != null) && (getInputAt(0) != null)) { - String tInputName = aFluid.getFluid() - .getName(); - if (tInputName.startsWith("potion.")) { - tInputName = tInputName.replaceFirst("potion.", ""); - int tFirstDot = tInputName.indexOf('.') + 1; - String tModifier = tFirstDot <= 0 ? "" : tInputName.substring(tFirstDot); - if (!tModifier.isEmpty()) { - tInputName = tInputName.replaceFirst("." + tModifier, ""); - } - if (GT_Utility.areStacksEqual(new ItemStack(Items.fermented_spider_eye, 1, 0), getInputAt(0))) { - return switch (tInputName) { - case "poison", "health", "waterbreathing" -> setOutput("potion.damage" + tModifier); - case "nightvision" -> setOutput("potion.invisibility" + tModifier); - case "fireresistance", "speed" -> setOutput("potion.slowness" + tModifier); - case "strength" -> setOutput("potion.weakness" + tModifier); - case "regen" -> setOutput("potion.poison" + tModifier); - default -> setOutput("potion.weakness"); - }; - } - if (GT_Utility.areStacksEqual( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L), - getInputAt(0))) { - if (!tModifier.startsWith("strong")) { - return setOutput( - "potion." + tInputName + ".strong" + (tModifier.isEmpty() ? "" : "." + tModifier)); - } - if (tModifier.startsWith("long")) { - return setOutput("potion." + tInputName + tModifier.replaceFirst("long", "")); - } - return setOutput("potion.thick"); - } - if (GT_Utility.areStacksEqual( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), - getInputAt(0))) { - if (!tModifier.startsWith("long")) { - return setOutput( - "potion." + tInputName + ".long" + (tModifier.isEmpty() ? "" : "." + tModifier)); - } - if (tModifier.startsWith("strong")) { - return setOutput("potion." + tInputName + tModifier.replaceFirst("strong", "")); - } - return setOutput("potion.mundane"); - } - if (GT_Utility.areStacksEqual( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1L), - getInputAt(0))) { - if (!tInputName.endsWith(".splash")) { - return setOutput("potion." + tInputName + ".splash"); - } - return setOutput("potion.mundane"); - } - } - } - return 0; - } - - private int setOutput(String aFluidName) { - if (getFillableStack().amount < 750) { - return 0; - } - - this.mOutputFluid = FluidRegistry.getFluidStack(aFluidName, 750); - if (this.mOutputFluid == null) { - this.mOutputFluid = FluidRegistry.getFluidStack("potion.mundane", getFillableStack().amount); - } - - getInputAt(0).stackSize -= 1; - getFillableStack().amount -= 750; - return 2; - } - - @Override - public boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) - && getRecipeMap().containsInput(aStack); - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return (aFluid.getFluid() - .getName() - .startsWith("potion.")) || (super.isFluidInputAllowed(aFluid)); - } - - @Override - public int getCapacity() { - return getCapacityForTier(mTier); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java deleted file mode 100644 index eff998d405..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Pump.java +++ /dev/null @@ -1,846 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.debugBlockPump; - -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.ChunkPosition; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.IFluidBlock; - -import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; - -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.BaseTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.recipe.BasicUIProperties; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.common.misc.GT_DrillingLogicDelegate; - -public class GT_MetaTileEntity_Pump extends GT_MetaTileEntity_BasicMachine { - - private static final ItemStack MINING_PIPE = GT_ModHandler.getIC2Item("miningPipe", 0); - - private static final ItemStack MINING_PIPE_ONE = GT_ModHandler.getIC2Item("miningPipe", 1); - private static final Block MINING_PIPE_BLOCK = GT_Utility.getBlockFromStack(MINING_PIPE); - private static final Block MINING_PIPE_TIP_BLOCK = GT_Utility - .getBlockFromStack(GT_ModHandler.getIC2Item("miningPipeTip", 0)); - - public static int getMaxDistanceForTier(int aTier) { - return (10 * ((int) Math.pow(1.6D, aTier))); - } - - public static long getEuUsagePerTier(int aTier) { - return (16 * ((long) Math.pow(4, aTier))); - } - - public ArrayDeque mPumpList = new ArrayDeque<>(); - public boolean wasPumping = false; - public int mPumpTimer = 0; - public int mPumpCountBelow = 0; - public Block mPrimaryPumpedBlock = null; - public Block mSecondaryPumpedBlock = null; - - private int radiusConfig; // Pump configured radius - private boolean mRetractDone = false; - - private boolean mDisallowRetract = true; - - public GT_MetaTileEntity_Pump(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, - new String[] { "The best way to empty Oceans!", - getEuUsagePerTier(aTier) + " EU/operation, " - + GT_Utility.safeInt(160 / 20 / (long) Math.pow(2, aTier)) - + " sec per bucket, no stuttering", - "Maximum pumping area: " + (getMaxDistanceForTier(aTier) * 2 + 1) - + "x" - + (getMaxDistanceForTier(aTier) * 2 + 1), - "Use Screwdriver to regulate pumping area", "Use Soft Mallet to disable and retract the pipe", - "Disable the bottom pump to retract the pipe!", - "Use Soldering Iron to auto retract the pipe when hitting a rock", }, - 2, - 2, - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_SIDE_ACTIVE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_SIDE_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_SIDE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_SIDE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_FRONT_ACTIVE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_FRONT_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_FRONT")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_FRONT_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_TOP_ACTIVE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_TOP_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_TOP")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_TOP_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_BOTTOM_ACTIVE")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_BOTTOM_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_BOTTOM")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_BOTTOM_GLOW")) - .glow() - .build())); - - radiusConfig = getMaxDistanceForTier(mTier); - } - - public GT_MetaTileEntity_Pump(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures, 2, 2); - radiusConfig = getMaxDistanceForTier(mTier); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Pump(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - private static final FallbackableUITexture progressBarTexture = GT_UITextures - .fallbackableProgressbar("pump", GT_UITextures.PROGRESSBAR_CANNER); - - @Override - protected BasicUIProperties getUIProperties() { - return BasicUIProperties.builder() - .maxItemInputs(2) - .maxItemOutputs(2) - .slotOverlays((index, isFluid, isOutput, isSpecial) -> { - if (!isFluid && !isOutput && !isSpecial) { - return GT_UITextures.OVERLAY_SLOT_MINING_PIPE; - } else { - return null; - } - }) - .maxFluidInputs(0) - .maxFluidOutputs(1) - .progressBarTexture(progressBarTexture) - .build(); - } - - @Override - public int getCapacity() { - return getCapacityForTier(mTier); - } - - @Override - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) - && aStack.getItem() == GT_DrillingLogicDelegate.MINING_PIPE_STACK.getItem(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - boolean wasPumping = this.wasPumping || !this.mPumpList.isEmpty(); - if (debugBlockPump) { - GT_Log.out.println( - "PUMP: NBT:Save - WasPumping - " + wasPumping - + " blocks (" - + this.mPrimaryPumpedBlock - + ", " - + this.mSecondaryPumpedBlock - + ")"); - } - super.saveNBTData(aNBT); - aNBT.setString( - "mPumpedBlock1", - this.mPrimaryPumpedBlock == null ? "" : Block.blockRegistry.getNameForObject(this.mPrimaryPumpedBlock)); - aNBT.setString( - "mPumpedBlock2", - this.mSecondaryPumpedBlock == null ? "" : Block.blockRegistry.getNameForObject(this.mSecondaryPumpedBlock)); - aNBT.setBoolean("wasPumping", wasPumping); - aNBT.setInteger("radiusConfig", radiusConfig); - aNBT.setBoolean("mRetractDone", mRetractDone); - aNBT.setBoolean("mDisallowRetract", mDisallowRetract); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.wasPumping = aNBT.getBoolean("wasPumping"); - if (aNBT.hasKey("radiusConfig")) this.radiusConfig = aNBT.getInteger("radiusConfig"); - this.mPrimaryPumpedBlock = Block.getBlockFromName(aNBT.getString("mPumpedBlock1")); - this.mSecondaryPumpedBlock = Block.getBlockFromName(aNBT.getString("mPumpedBlock2")); - this.mRetractDone = aNBT.getBoolean("mRetractDone"); - this.mDisallowRetract = aNBT.getBoolean("mDisallowRetract"); - - // Transition from old TE which was derived from GT_MetaTileEntity_Hatch - if (!aNBT.hasKey("mEUt")) { - // Output of old pump always faces up. - getBaseMetaTileEntity().setFrontFacing(ForgeDirection.UP); - - // Automatic output on. - mFluidTransfer = true; - - // Fluid was stored in the hatch, now needs to go to the output. - if (mFluid != null && mFluid.amount > 0) { - fluidOutputTank.fill(mFluid, true); - mFluid = null; - } - - // Move pipes (or other things) from old slots to new ones. - if (mInventory[1] != null && mInventory[1].stackSize > 0) { - mInventory[getInputSlot() + 1] = mInventory[1]; - mInventory[1] = null; - } - - if (mInventory[0] != null && mInventory[0].stackSize > 0) { - mInventory[getInputSlot()] = mInventory[0]; - mInventory[0] = null; - } - } - - if (debugBlockPump) { - GT_Log.out.println( - "PUMP: NBT:Load - WasPumping - " + this.wasPumping - + "(" - + aNBT.getString("mPumpedBlock1") - + ") " - + this.mPrimaryPumpedBlock); - } - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - super.setItemNBT(aNBT); - aNBT.setInteger("radiusConfig", radiusConfig); - aNBT.setBoolean("mDisallowRetract", mDisallowRetract); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - - if (side == getBaseMetaTileEntity().getFrontFacing() || side == mMainFacing) { - // Configuring "input from output side allowed". - return; - } - - int max = getMaxPumpableDistance(); - if (aPlayer.isSneaking()) { - if (radiusConfig >= 0) { - radiusConfig--; - } - if (radiusConfig < 0) radiusConfig = max; - } else { - if (radiusConfig <= max) { - radiusConfig++; - } - if (radiusConfig > max) radiusConfig = 0; - } - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.workareaset") + " " - + (radiusConfig * 2 + 1) - + "x" - + (radiusConfig * 2 + 1)); // TODO Add translation support - - clearQueue(false); - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, - EntityPlayer entityPlayer, float aX, float aY, float aZ) { - if (super.onSolderingToolRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ)) return true; - mDisallowRetract = !mDisallowRetract; - GT_Utility.sendChatToPlayer( - entityPlayer, - StatCollector.translateToLocal( - mDisallowRetract ? "GT5U.machines.autoretract.disabled" : "GT5U.machines.autoretract.enabled")); - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (getBaseMetaTileEntity().isServerSide()) { - this.mPumpTimer -= 1; - if ((getBaseMetaTileEntity() instanceof BaseTileEntity)) { - ((BaseTileEntity) getBaseMetaTileEntity()).ignoreUnloadedChunks = false; - } - this.doTickProfilingInThisTick = true; - this.mPumpCountBelow = 0; - - IGregTechTileEntity tTileEntity; - for (int i = 1; (i < 21) - && ((tTileEntity = getBaseMetaTileEntity() - .getIGregTechTileEntityAtSideAndDistance(ForgeDirection.DOWN, i)) != null) - && ((tTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_Pump)); i++) { - // Apparently someone might stack 21 pumps on top of each other, so let's check for that - getBaseMetaTileEntity().setActive(tTileEntity.isActive()); - this.mPumpCountBelow += 1; - // The more pumps we have stacked, the faster the ones below go - ((GT_MetaTileEntity_Pump) tTileEntity.getMetaTileEntity()).mPumpTimer -= 1; - ((GT_MetaTileEntity_Pump) tTileEntity.getMetaTileEntity()).mProgresstime += 1; - } - if (debugBlockPump && (this.mPumpCountBelow != 0)) { - GT_Log.out.println("PUMP: Detected " + this.mPumpCountBelow + " pumps below this pump."); - } - if (this.mPumpCountBelow <= 0) { - // Only the bottom most pump does anything - if (getBaseMetaTileEntity().isAllowedToWork()) { - mRetractDone = false; - if ((getBaseMetaTileEntity().isUniversalEnergyStored(this.getEuUsagePerAction())) - && (fluidOutputTank.getFluidAmount() + 1000 <= fluidOutputTank.getCapacity())) { - boolean tMovedOneDown = false; - if ((this.mPumpList.isEmpty()) && (getBaseMetaTileEntity().getTimer() % 100L == 0L)) { - if (!this.wasPumping) { - tMovedOneDown = moveOneDown(); - if (!tMovedOneDown) { - if (canMoveDown( - getBaseMetaTileEntity().getXCoord(), - Math.max(getYOfPumpHead() - 1, 1), - getBaseMetaTileEntity().getZCoord())) { - if (debugBlockPump) { - GT_Log.out.println("PUMP: No pipe left. Idle for a little longer."); - } - this.mPumpTimer = 160; - } else { - getBaseMetaTileEntity().disableWorking(); - if (debugBlockPump) { - GT_Log.out.println("PUMP: Can't move. Retracting in next few ticks"); - } - } - } else if (debugBlockPump) { - GT_Log.out.println("PUMP: Moved down"); - } - } else if (debugBlockPump) { - GT_Log.out.println("PUMP: Was pumping, didn't move down"); - } - } - int x = getBaseMetaTileEntity().getXCoord(), z = getBaseMetaTileEntity().getZCoord(); - - if (!this.hasValidFluid()) { - // We don't have a valid block, let's try to find one - int y = getYOfPumpHead(); - - if (debugBlockPump && this.mPrimaryPumpedBlock != null) { - GT_Log.out.println( - "PUMP: Had an invalid pump block. Trying to find a fluid at Y: " + y - + " Previous blocks 1: " - + this.mPrimaryPumpedBlock - + " 2: " - + this.mSecondaryPumpedBlock); - } - // First look down - checkForFluidToPump(x, y - 1, z); - - // Then look all around - checkForFluidToPump(x, y, z + 1); - checkForFluidToPump(x, y, z - 1); - checkForFluidToPump(x + 1, y, z); - checkForFluidToPump(x - 1, y, z); - this.clearQueue(false); - - if (this.hasValidFluid()) { - // Don't move down and rebuild the queue if we now have a valid fluid - this.wasPumping = true; - } - - } else if (getYOfPumpHead() < getBaseMetaTileEntity().getYCoord()) { - // We didn't just look for a block, and the pump head is below the pump - if ((tMovedOneDown) || this.wasPumping - || ((this.mPumpList.isEmpty()) && (getBaseMetaTileEntity().getTimer() % 200L == 100L)) - || (getBaseMetaTileEntity().getTimer() % 72000L == 100L)) { - // Rebuild the list to pump if any of the following conditions are true: - // 1) We just moved down - // 2) We were previously pumping (and possibly just reloaded) - // 3) We have an empty queue and enough time has passed - // 4) A long while has passed - if (debugBlockPump) { - GT_Log.out.println( - "PUMP: Rebuilding pump list - Size " + this.mPumpList.size() - + " WasPumping: " - + this.wasPumping - + " Timer " - + getBaseMetaTileEntity().getTimer()); - } - int yPump = getBaseMetaTileEntity().getYCoord() - 1, yHead = getYOfPumpHead(); - - this.rebuildPumpQueue(x, yPump, z, yHead); - - if (debugBlockPump) { - GT_Log.out.println("PUMP: Rebuilt pump list - Size " + this.mPumpList.size()); - } - } - if ((!tMovedOneDown) && (this.mPumpTimer <= 0)) { - while ((!this.mPumpList.isEmpty())) { - ChunkPosition pos = this.mPumpList.pollLast(); - if (consumeFluid(pos.chunkPosX, pos.chunkPosY, pos.chunkPosZ)) { - // Keep trying until we consume something, or the list is empty - break; - } - } - this.mPumpTimer = GT_Utility.safeInt(160 / (long) Math.pow(2, this.mTier)); - this.mPumpTimer = mPumpTimer == 0 ? 1 : mPumpTimer; - - mMaxProgresstime = mPumpTimer; - mProgresstime = 0; - } - } else { - // We somehow have a valid fluid, but the head of the pump isn't below the pump. Perhaps - // someone broke some pipes - // -- Clear the queue and we should try to move down until we can find a valid fluid - this.clearQueue(false); - } - } else if (debugBlockPump) { - GT_Log.out.println("PUMP: Not enough energy? Free space?"); - } - } else { - mMaxProgresstime = 0; - - if (!mRetractDone && ((aTick % 5) == 0) && canOutput(MINING_PIPE_ONE)) { - // try retract if all of these conditions are met - // 1. not retracted yet - // 2. once per 5 tick - // 3. can hold retracted pipe in inventory - int tHeadY = getYOfPumpHead(); - if (tHeadY < this.getBaseMetaTileEntity() - .getYCoord()) { - final int tXCoord = this.getBaseMetaTileEntity() - .getXCoord(); - final int tZCoord = this.getBaseMetaTileEntity() - .getZCoord(); - this.getBaseMetaTileEntity() - .getWorld() - .setBlockToAir(tXCoord, tHeadY, tZCoord); - if (tHeadY < this.getBaseMetaTileEntity() - .getYCoord() - 1) { - getBaseMetaTileEntity().getWorld() - .setBlock(tXCoord, tHeadY + 1, tZCoord, MINING_PIPE_TIP_BLOCK); - } - - for (int i = 0; i < mOutputItems.length; ++i) { - if (aBaseMetaTileEntity.addStackToSlot(getOutputSlot() + i, MINING_PIPE_ONE.copy())) { - break; - } - } - - if (debugBlockPump) { - GT_Log.out.println("PUMP: Retracted one pipe"); - } - } else { - mRetractDone = true; - if (debugBlockPump) { - GT_Log.out.println("PUMP: Retract done"); - } - } - } - } - if (!mDisallowRetract) getBaseMetaTileEntity().setActive(!this.mPumpList.isEmpty()); - } - } - } - - private int getMaxPumpableDistance() { - return getMaxDistanceForTier(this.mTier); - } - - private long getEuUsagePerAction() { - return getEuUsagePerTier(this.mTier); - } - - private boolean hasValidFluid() { - return mPrimaryPumpedBlock != null && mSecondaryPumpedBlock != null; - } - - private boolean moveOneDown() { - boolean foundPipe = false; - - for (int i = 0; i < mInputSlotCount; i++) { - ItemStack stack = getInputAt(i); - if (stack != null && GT_Utility.areStacksEqual(stack, MINING_PIPE) && stack.stackSize > 0) { - foundPipe = true; - break; - } - } - - if (!foundPipe) { - // No mining pipes - if (debugBlockPump) { - GT_Log.out.println("PUMP: No mining pipes"); - } - return false; - } - - int yHead = getYOfPumpHead(); - if (yHead <= 1) { - // Let's not punch through bedrock - if (debugBlockPump) { - GT_Log.out.println("PUMP: At bottom"); - } - return false; - } - - int x = getBaseMetaTileEntity().getXCoord(), z = getBaseMetaTileEntity().getZCoord(); - - Block aBlock = getBaseMetaTileEntity().getBlock(x, yHead - 1, z); - boolean canReplaceBlock = aBlock.isReplaceable(getBaseMetaTileEntity().getWorld(), x, yHead - 1, z); - - // We specifically allow replacing water even if we can't consume it - // (e.g. pump holds a different fluid) to help avoid getting stuck on random water pockets. - if (!canReplaceBlock || (isFluid(aBlock) && !consumeFluid(x, yHead - 1, z) && !isWater(aBlock))) { - // Either we didn't consume a fluid, or it's a non-replaceable block, or it's water. - if (debugBlockPump) { - GT_Log.out.println("PUMP: Did not consume fluid, or non-replaceable block found"); - } - return false; - } - // Try to set the block below us to a tip - if (!GT_Utility.setBlockByFakePlayer( - getFakePlayer(getBaseMetaTileEntity()), - x, - yHead - 1, - z, - MINING_PIPE_TIP_BLOCK, - 0, - false)) { - if (debugBlockPump) { - GT_Log.out.println("PUMP: Could not set block below to new tip"); - } - return false; - } - // And change the previous block to a pipe -- as long as it isn't the pump itself! - if (yHead != getBaseMetaTileEntity().getYCoord()) { - getBaseMetaTileEntity().getWorld() - .setBlock(x, yHead, z, MINING_PIPE_BLOCK); - } - - // Remove pipe from inputs. - foundPipe = false; - - for (int i = 0; i < mInputSlotCount; i++) { - ItemStack stack = getInputAt(i); - if (stack != null && GT_Utility.areStacksEqual(stack, MINING_PIPE) && stack.stackSize > 0) { - foundPipe = true; - stack.stackSize -= 1; - if (stack.stackSize == 0) { - mInventory[getInputSlot() + i] = null; - } - break; - } - } - - if (debugBlockPump) { - if (foundPipe) { - GT_Log.out.println("PUMP: Using 1 pipe"); - } else { - GT_Log.err.println("PUMP: Lowered pipe but could not find pipe in input"); - } - } - - return true; - } - - private int getYOfPumpHead() { - // Let's play find the pump head! - - // TODO: Handle pipe|pipe|head|pipe|pipe - int y = getBaseMetaTileEntity().getYCoord() - 1, x = getBaseMetaTileEntity().getXCoord(), - z = getBaseMetaTileEntity().getZCoord(); - - while (y > 0) { - Block curBlock = getBaseMetaTileEntity().getBlock(x, y, z); - if (curBlock == MINING_PIPE_BLOCK) { - y--; - } else if (curBlock == MINING_PIPE_TIP_BLOCK) { - Block nextBlock = getBaseMetaTileEntity().getBlock(x, y - 1, z); - if (nextBlock == MINING_PIPE_BLOCK || nextBlock == MINING_PIPE_TIP_BLOCK) { - // We're running into an existing set of pipes -- Turn this block into a pipe and keep going - this.clearQueue(true); - getBaseMetaTileEntity().getWorld() - .setBlock(x, y, z, MINING_PIPE_BLOCK); - if (debugBlockPump) { - GT_Log.out.println("PUMP: Hit pipes already in place, trying to merge"); - } - } - y--; - - } else { - break; - } - } - - if (getBaseMetaTileEntity().getBlock(x, y, z) != MINING_PIPE_TIP_BLOCK) { - if (y != getBaseMetaTileEntity().getYCoord() - 1 - && getBaseMetaTileEntity().getBlock(x, y + 1, z) == MINING_PIPE_BLOCK) { - // We're below the pump at the bottom of the pipes, we haven't found a tip; make the previous pipe a - // tip! - this.clearQueue(true); - getBaseMetaTileEntity().getWorld() - .setBlock(x, y + 1, z, MINING_PIPE_TIP_BLOCK); - if (debugBlockPump) { - GT_Log.out.println("PUMP: Did not find a tip at bottom, setting last pipe as tip"); - } - } - return y + 1; - } - return y; - } - - private void clearQueue(boolean checkPumping) { - if (checkPumping) { - this.wasPumping = !this.mPumpList.isEmpty(); - } else { - this.wasPumping = false; - } - this.mPumpList.clear(); - } - - private void rebuildPumpQueue(int aX, int yStart, int aZ, int yEnd) { - int mDist = this.radiusConfig; - doTickProfilingInThisTick = false; - ArrayDeque fluidsToSearch = new ArrayDeque<>(); - ArrayDeque fluidsFound = new ArrayDeque<>(); - Set checked = new HashSet<>(); - this.clearQueue(false); - - for (int aY = yStart; this.mPumpList.isEmpty() && aY >= yEnd; aY--) { - // Start at the top (presumably the block below the pump), and work our way down to the end (presumably the - // location of the pump Head) - // and build up a queue of fluids to pump - fluidsToSearch.add(new ChunkPosition(aX, aY, aZ)); - - while (!fluidsToSearch.isEmpty()) { - for (ChunkPosition tPos : fluidsToSearch) { - // Look all around - if (tPos.chunkPosX < aX + mDist) - queueFluid(tPos.chunkPosX + 1, tPos.chunkPosY, tPos.chunkPosZ, fluidsFound, checked); - if (tPos.chunkPosX > aX - mDist) - queueFluid(tPos.chunkPosX - 1, tPos.chunkPosY, tPos.chunkPosZ, fluidsFound, checked); - if (tPos.chunkPosZ < aZ + mDist) - queueFluid(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ + 1, fluidsFound, checked); - if (tPos.chunkPosZ > aZ - mDist) - queueFluid(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ - 1, fluidsFound, checked); - - // And then look up - queueFluid(tPos.chunkPosX, tPos.chunkPosY + 1, tPos.chunkPosZ, this.mPumpList, checked); - } - this.mPumpList.addAll(fluidsFound); - fluidsToSearch = fluidsFound; - fluidsFound = new ArrayDeque<>(); - } - - // Make sure we don't have the pipe location in the queue - this.mPumpList.remove(new ChunkPosition(aX, aY, aZ)); - } - } - - private boolean queueFluid(int aX, int aY, int aZ, ArrayDeque fluidsFound, - Set checked) { - // If we haven't already looked at this coordinate set, and it's not already in the list of fluids found, see if - // there is - // a valid fluid and add it to the fluids found - ChunkPosition tCoordinate = new ChunkPosition(aX, aY, aZ); - if (checked.add(tCoordinate) && !fluidsFound.contains(tCoordinate)) { - Block aBlock = getBaseMetaTileEntity().getBlock(aX, aY, aZ); - if ((this.mPrimaryPumpedBlock == aBlock) || (this.mSecondaryPumpedBlock == aBlock)) { - fluidsFound.addFirst(tCoordinate); - return true; - } - } - return false; - } - - private void checkForFluidToPump(int aX, int aY, int aZ) { - // If we don't currently have a valid fluid to pump, try pumping the fluid at the given coordinates - if (this.hasValidFluid()) return; - - Block aBlock = getBaseMetaTileEntity().getBlock(aX, aY, aZ); - if (aBlock != null) { - if (isWater(aBlock)) { - this.mPrimaryPumpedBlock = Blocks.water; - this.mSecondaryPumpedBlock = Blocks.flowing_water; - return; - } - if (isLava(aBlock)) { - this.mPrimaryPumpedBlock = Blocks.lava; - this.mSecondaryPumpedBlock = Blocks.flowing_lava; - return; - } - if ((aBlock instanceof IFluidBlock)) { - this.mPrimaryPumpedBlock = aBlock; - this.mSecondaryPumpedBlock = aBlock; - return; - } - } - this.mPrimaryPumpedBlock = null; - this.mSecondaryPumpedBlock = null; - } - - /** only check if block below can be replaced with pipe tip. pipe stockpile condition is ignored */ - private boolean canMoveDown(int aX, int aY, int aZ) { - if (!GT_Utility.eraseBlockByFakePlayer(getFakePlayer(getBaseMetaTileEntity()), aX, aY, aZ, true)) return false; - - Block aBlock = getBaseMetaTileEntity().getBlock(aX, aY, aZ); - - return aBlock != null && aBlock.isReplaceable(getBaseMetaTileEntity().getWorld(), aX, aY, aZ); - } - - private boolean consumeFluid(int aX, int aY, int aZ) { - // Try to consume a fluid at a location - // Returns true if something was consumed, otherwise false - if (!GT_Utility.eraseBlockByFakePlayer(getFakePlayer(getBaseMetaTileEntity()), aX, aY, aZ, true)) return false; - - Block aBlock = getBaseMetaTileEntity().getBlock(aX, aY, aZ); - if (!isFluid(aBlock)) { - return false; - } - - if (aBlock != null && ((this.mPrimaryPumpedBlock == aBlock) || (this.mSecondaryPumpedBlock == aBlock))) { - boolean isWaterOrLava = ((this.mPrimaryPumpedBlock == Blocks.water - || this.mPrimaryPumpedBlock == Blocks.lava)); - - if (isWaterOrLava && getBaseMetaTileEntity().getMetaID(aX, aY, aZ) != 0) { - // Water/Lava that isn't a source block - do nothing here, but set the block to air and consume energy - // below - if (debugBlockPump) { - GT_Log.out.println("PUMP: Water/Lava - Not a source block"); - } - - } else if (getDrainableStack() == null) { - // The pump has no internal fluid - if (this.mPrimaryPumpedBlock == Blocks.water) setDrainableStack(GT_ModHandler.getWater(1000L)); - else if (this.mPrimaryPumpedBlock == Blocks.lava) setDrainableStack(GT_ModHandler.getLava(1000L)); - else { - // Not water or lava; try to drain and set to air - setDrainableStack( - ((IFluidBlock) aBlock).drain(getBaseMetaTileEntity().getWorld(), aX, aY, aZ, true)); - } - - } else if (GT_ModHandler.isWater(getDrainableStack()) || GT_ModHandler.isLava(getDrainableStack()) - || getDrainableStack().isFluidEqual( - ((IFluidBlock) aBlock).drain(getBaseMetaTileEntity().getWorld(), aX, aY, aZ, false))) { - if (!isWaterOrLava) { - // Only set Block to Air for non lava/water fluids - this.getBaseMetaTileEntity() - .getWorld() - .setBlockToAir(aX, aY, aZ); - } - getDrainableStack().amount += 1000; - - } else { - if (debugBlockPump) { - GT_Log.out.println("PUMP: Couldn't consume " + aBlock); - } - // We didn't do anything - return false; - } - - getBaseMetaTileEntity().decreaseStoredEnergyUnits(this.getEuUsagePerAction(), true); - getBaseMetaTileEntity().getWorld() - .setBlock(aX, aY, aZ, Blocks.air, 0, 2); - return true; - } - return false; - } - - private static boolean isWater(Block aBlock) { - return aBlock == Blocks.water || aBlock == Blocks.flowing_water; - } - - private static boolean isLava(Block aBlock) { - return aBlock == Blocks.lava || aBlock == Blocks.flowing_lava; - } - - private static boolean isFluid(Block aBlock) { - return isWater(aBlock) || isLava(aBlock) || aBlock instanceof IFluidBlock; - } - - @Override - public ArrayList getSpecialDebugInfo(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, - int aLogLevel, ArrayList aList) { - aList.addAll( - Arrays.asList( - EnumChatFormatting.BLUE + StatCollector.translateToLocal("GT5U.machines.pump") - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.machines.workarea") + ": " - + EnumChatFormatting.GREEN - + (radiusConfig * 2 + 1) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.machines.blocks"), - "Primary pumping fluid: " - + (this.mPrimaryPumpedBlock != null ? this.mPrimaryPumpedBlock.getLocalizedName() : "None"), - "Secondary pumping fluid: " - + (this.mSecondaryPumpedBlock != null ? this.mSecondaryPumpedBlock.getLocalizedName() : "None"), - "Pumps below: " + mPumpCountBelow, - "Queue size: " + mPumpList.size(), - "Pump head at Y: " + getYOfPumpHead(), - "Pump timer: " + mPumpTimer, - "Meta Entity Timer: " + getBaseMetaTileEntity().getTimer())); - return aList; - } - - private FakePlayer mFakePlayer = null; - - protected FakePlayer getFakePlayer(IGregTechTileEntity aBaseTile) { - if (mFakePlayer == null) mFakePlayer = GT_Utility.getFakePlayer(aBaseTile); - mFakePlayer.setWorld(aBaseTile.getWorld()); - mFakePlayer.setPosition(aBaseTile.getXCoord(), aBaseTile.getYCoord(), aBaseTile.getZCoord()); - return mFakePlayer; - } - - @Override - public String[] getInfoData() { - return new String[] { - EnumChatFormatting.BLUE + StatCollector.translateToLocal("GT5U.machines.pump") + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.machines.workarea") + ": " - + EnumChatFormatting.GREEN - + (radiusConfig * 2 + 1) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.machines.blocks") }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Replicator.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Replicator.java deleted file mode 100644 index e9f3d98dd5..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Replicator.java +++ /dev/null @@ -1,130 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.MachineType; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_Replicator extends GT_MetaTileEntity_BasicMachine { - - public GT_MetaTileEntity_Replicator(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, - MachineType.REPLICATOR.tooltipDescription(), - 1, - 1, - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_SIDE_REPLICATOR_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/replicator/OVERLAY_SIDE_REPLICATOR_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_SIDE_REPLICATOR")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_SIDE_REPLICATOR_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_FRONT_REPLICATOR_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/replicator/OVERLAY_FRONT_REPLICATOR_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_FRONT_REPLICATOR")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_FRONT_REPLICATOR_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_TOP_REPLICATOR_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/replicator/OVERLAY_TOP_REPLICATOR_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_TOP_REPLICATOR")), - TextureFactory.builder() - .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_TOP_REPLICATOR_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of( - new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_BOTTOM_REPLICATOR_ACTIVE")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon( - "basicmachines/replicator/OVERLAY_BOTTOM_REPLICATOR_ACTIVE_GLOW")) - .glow() - .build()), - TextureFactory.of( - TextureFactory - .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_BOTTOM_REPLICATOR")), - TextureFactory.builder() - .addIcon( - new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_BOTTOM_REPLICATOR_GLOW")) - .glow() - .build())); - } - - public GT_MetaTileEntity_Replicator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures, 1, 1); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Replicator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.replicatorRecipes; - } - - @Override - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) - && ItemList.Cell_Empty.isStackEqual(aStack); - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return aFluid.isFluidEqual(Materials.UUMatter.getFluid(1L)); - } - - @Override - public int getCapacity() { - return 3000; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_RockBreaker.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_RockBreaker.java deleted file mode 100644 index e632f4eeda..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_RockBreaker.java +++ /dev/null @@ -1,169 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_GLOW; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.MachineType; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_RockBreaker extends GT_MetaTileEntity_BasicMachine { - - public GT_MetaTileEntity_RockBreaker(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, - MachineType.ROCKBREAKER.tooltipDescription(), - 1, - 1, - TextureFactory.of( - TextureFactory.of(OVERLAY_SIDE_ROCK_BREAKER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_ROCK_BREAKER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_SIDE_ROCK_BREAKER), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_ROCK_BREAKER_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ROCK_BREAKER_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_ROCK_BREAKER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_ROCK_BREAKER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_ROCK_BREAKER), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_ROCK_BREAKER_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_BOTTOM_ROCK_BREAKER), - TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_ROCK_BREAKER_GLOW) - .glow() - .build())); - } - - public GT_MetaTileEntity_RockBreaker(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures, 1, 1); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_RockBreaker(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.rockBreakerFakeRecipes; - } - - @Override - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) - && getRecipeMap().containsInput(aStack); - } - - @Override - public boolean allowSelectCircuit() { - return true; - } - - @Override - public int checkRecipe() { - IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity(); - if ((aBaseMetaTileEntity.getBlockOffset(0, 0, 1) == Blocks.water) - || (aBaseMetaTileEntity.getBlockOffset(0, 0, -1) == Blocks.water) - || (aBaseMetaTileEntity.getBlockOffset(-1, 0, 0) == Blocks.water) - || (aBaseMetaTileEntity.getBlockOffset(1, 0, 0) == Blocks.water)) { - ItemStack tOutput = null; - if (aBaseMetaTileEntity.getBlockOffset(0, 1, 0) == Blocks.lava) { - tOutput = new ItemStack(Blocks.stone, 1); - } else if ((aBaseMetaTileEntity.getBlockOffset(0, 0, 1) == Blocks.lava) - || (aBaseMetaTileEntity.getBlockOffset(0, 0, -1) == Blocks.lava) - || (aBaseMetaTileEntity.getBlockOffset(-1, 0, 0) == Blocks.lava) - || (aBaseMetaTileEntity.getBlockOffset(1, 0, 0) == Blocks.lava)) { - tOutput = new ItemStack(Blocks.cobblestone, 1); - } - if (tOutput != null) { - if (GT_Utility.areStacksEqual(getStackInSlot(getCircuitSlot()), GT_Utility.getIntegratedCircuit(1))) { - if (GT_Utility.areStacksEqual( - getInputAt(0), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L))) { - tOutput = new ItemStack(Blocks.obsidian, 1); - if (canOutput(tOutput)) { - getInputAt(0).stackSize -= 1; - calculateOverclockedNess(30, 128); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - this.mOutputItems[0] = tOutput; - return 2; - } - } - } else if (canOutput(tOutput)) { - calculateOverclockedNess(30, 16); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - this.mOutputItems[0] = tOutput; - return 2; - } - } - } - return 0; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java deleted file mode 100644 index ba00be67f8..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Scanner.java +++ /dev/null @@ -1,425 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.D1; -import static gregtech.api.enums.Mods.GalacticraftCore; -import static gregtech.api.enums.Mods.GalacticraftMars; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_SCANNER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_SCANNER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_SCANNER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_SCANNER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_SCANNER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_SCANNER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_SCANNER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_SCANNER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_SCANNER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_SCANNER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_SCANNER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_SCANNER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_SCANNER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_SCANNER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_SCANNER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_SCANNER_GLOW; -import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes; - -import java.util.Objects; - -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.IIndividual; -import gregtech.GT_Mod; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.MachineType; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_AssemblyLineUtils; -import gregtech.api.util.GT_Log; -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.common.items.behaviors.Behaviour_DataOrb; - -public class GT_MetaTileEntity_Scanner extends GT_MetaTileEntity_BasicMachine { - - public GT_MetaTileEntity_Scanner(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, - MachineType.SCANNER.tooltipDescription(), - 1, - 1, - TextureFactory.of( - TextureFactory.of(OVERLAY_SIDE_SCANNER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_SCANNER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_SIDE_SCANNER), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_SCANNER_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_FRONT_SCANNER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_SCANNER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_FRONT_SCANNER), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_SCANNER_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_SCANNER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_SCANNER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_SCANNER), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_SCANNER_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_BOTTOM_SCANNER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_SCANNER_ACTIVE_GLOW) - .glow() - .build()), - TextureFactory.of( - TextureFactory.of(OVERLAY_BOTTOM_SCANNER), - TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_SCANNER_GLOW) - .glow() - .build())); - } - - public GT_MetaTileEntity_Scanner(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures, 1, 1); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Scanner(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public int checkRecipe() { - ItemStack aStack = getInputAt(0); - if (getOutputAt(0) != null) { - this.mOutputBlocked += 1; - } else if ((GT_Utility.isStackValid(aStack)) && (aStack.stackSize > 0)) { - if ((getFillableStack() != null) && (getFillableStack().containsFluid(Materials.Honey.getFluid(100L)))) { - try { - IIndividual tIndividual = AlleleManager.alleleRegistry.getIndividual(aStack); - if (tIndividual != null) { - if (tIndividual.analyze()) { - getFillableStack().amount -= 100; - this.mOutputItems[0] = GT_Utility.copyOrNull(aStack); - aStack.stackSize = 0; - NBTTagCompound tNBT = new NBTTagCompound(); - tIndividual.writeToNBT(tNBT); - this.mOutputItems[0].setTagCompound(tNBT); - calculateOverclockedNess(2, 500); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - return 2; - } - this.mOutputItems[0] = GT_Utility.copyOrNull(aStack); - aStack.stackSize = 0; - this.mMaxProgresstime = 1; - this.mEUt = 1; - return 2; - } - } catch (Throwable e) { - if (D1) { - e.printStackTrace(GT_Log.err); - } - } - } - if (ItemList.IC2_Crop_Seeds.isStackEqual(aStack, true, true)) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - } - if (tNBT.getByte("scan") < 4) { - tNBT.setByte("scan", (byte) 4); - calculateOverclockedNess(8, 160); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - } else { - this.mMaxProgresstime = 1; - this.mEUt = 1; - } - aStack.stackSize -= 1; - this.mOutputItems[0] = GT_Utility.copyAmount(1, aStack); - assert this.mOutputItems[0] != null; - this.mOutputItems[0].setTagCompound(tNBT); - return 2; - } - if (ItemList.Tool_DataOrb.isStackEqual(getSpecialSlot(), false, true)) { - if (ItemList.Tool_DataOrb.isStackEqual(aStack, false, true)) { - aStack.stackSize -= 1; - this.mOutputItems[0] = GT_Utility.copyAmount(1, getSpecialSlot()); - calculateOverclockedNess(30, 512); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - return 2; - } - ItemData tData = GT_OreDictUnificator.getAssociation(aStack); - if ((tData != null) && ((tData.mPrefix == OrePrefixes.dust) || (tData.mPrefix == OrePrefixes.cell)) - && (tData.mMaterial.mMaterial.mElement != null) - && (!tData.mMaterial.mMaterial.mElement.mIsIsotope) - && (tData.mMaterial.mMaterial != Materials.Magic) - && (tData.mMaterial.mMaterial.getMass() > 0L)) { - getSpecialSlot().stackSize -= 1; - aStack.stackSize -= 1; - - this.mOutputItems[0] = ItemList.Tool_DataOrb.get(1L); - Behaviour_DataOrb.setDataTitle(this.mOutputItems[0], "Elemental-Scan"); - Behaviour_DataOrb.setDataName(this.mOutputItems[0], tData.mMaterial.mMaterial.mElement.name()); - calculateOverclockedNess(30, GT_Utility.safeInt(tData.mMaterial.mMaterial.getMass() * 8192L)); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - return 2; - } - } - if (ItemList.Tool_DataStick.isStackEqual(getSpecialSlot(), false, true)) { - if (ItemList.Tool_DataStick.isStackEqual(aStack, false, true)) { - aStack.stackSize -= 1; - this.mOutputItems[0] = GT_Utility.copyAmount(1, getSpecialSlot()); - calculateOverclockedNess(30, 128); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - return 2; - } - if (aStack.getItem() == Items.written_book) { - getSpecialSlot().stackSize -= 1; - aStack.stackSize -= 1; - - this.mOutputItems[0] = GT_Utility.copyAmount(1, getSpecialSlot()); - assert this.mOutputItems[0] != null; - this.mOutputItems[0].setTagCompound(aStack.getTagCompound()); - calculateOverclockedNess(30, 128); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - return 2; - } - if (aStack.getItem() == Items.filled_map) { - getSpecialSlot().stackSize -= 1; - aStack.stackSize -= 1; - - this.mOutputItems[0] = GT_Utility.copyAmount(1, getSpecialSlot()); - assert this.mOutputItems[0] != null; - this.mOutputItems[0].setTagCompound( - GT_Utility - .getNBTContainingShort(new NBTTagCompound(), "map_id", (short) aStack.getItemDamage())); - calculateOverclockedNess(30, 128); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - return 2; - } - - if ((aStack.getItem() - .getUnlocalizedName() - .contains("Schematic") - || aStack.getItem() - .getUnlocalizedName() - .contains("schematic")) - && !aStack.getItem() - .getUnlocalizedName() - .contains("Schematics")) { - if (mTier < 3) return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - String sTier = ""; - - int stackItemID = Item.getIdFromItem(aStack.getItem()); - int stackItemDamage = aStack.getItemDamage(); - if (stackItemID == Item.getIdFromItem( - Objects.requireNonNull(GT_ModHandler.getModItem(GalacticraftCore.ID, "item.schematic", 1L, 0)) - .getItem())) { - if (stackItemDamage == 0 && aStack.toString() - .equals( - Objects - .requireNonNull( - GT_ModHandler.getModItem(GalacticraftCore.ID, "item.schematic", 1L, 0)) - .copy() - .toString())) - sTier = "100"; - else if (stackItemDamage == 1 && aStack.toString() - .equals( - Objects - .requireNonNull( - GT_ModHandler.getModItem(GalacticraftCore.ID, "item.schematic", 1L, 1)) - .copy() - .toString())) - sTier = "2"; - } else { - if (stackItemID == Item.getIdFromItem( - Objects - .requireNonNull(GT_ModHandler.getModItem(GalacticraftMars.ID, "item.schematic", 1L, 0)) - .getItem())) { - if (stackItemDamage == 0 && aStack.toString() - .equals( - Objects - .requireNonNull( - GT_ModHandler.getModItem(GalacticraftMars.ID, "item.schematic", 1L, 0)) - .copy() - .toString())) - sTier = "3"; - else if (stackItemDamage == 1 && aStack.toString() - .equals( - Objects - .requireNonNull( - GT_ModHandler.getModItem(GalacticraftMars.ID, "item.schematic", 1L, 1)) - .copy() - .toString())) - sTier = "101"; - else if (stackItemDamage == 2 && aStack.toString() - .equals( - Objects - .requireNonNull( - GT_ModHandler.getModItem(GalacticraftMars.ID, "item.schematic", 1L, 2)) - .copy() - .toString())) - sTier = "102"; - } else if (aStack.getUnlocalizedName() - .matches(".*\\d+.*")) - sTier = aStack.getUnlocalizedName() - .split("(?<=\\D)(?=\\d)")[1].substring(0, 1); - else sTier = "1"; - } - - getSpecialSlot().stackSize -= 1; - aStack.stackSize -= 1; - - this.mOutputItems[0] = GT_Utility.copyAmount(1, getSpecialSlot()); - assert this.mOutputItems[0] != null; - this.mOutputItems[0].setTagCompound( - GT_Utility.getNBTContainingShort(new NBTTagCompound(), "rocket_tier", Short.parseShort(sTier))); - - calculateOverclockedNess(480, 36000); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - return 2; - } - } - if (getSpecialSlot() == null && ItemList.Tool_DataStick.isStackEqual(aStack, false, true)) { - if (GT_Utility.ItemNBT.getBookTitle(aStack) - .equals("Raw Prospection Data")) { - GT_Utility.ItemNBT.setBookTitle(aStack, "Analyzed Prospection Data"); - GT_Utility.ItemNBT.convertProspectionData(aStack); - aStack.stackSize -= 1; - - this.mOutputItems[0] = GT_Utility.copyAmount(1, aStack); - calculateOverclockedNess(30, 1000); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - return 2; - } - } - if (ItemList.Tool_DataStick.isStackEqual(getSpecialSlot(), false, true)) { - for (GT_Recipe.GT_Recipe_AssemblyLine tRecipe : GT_Recipe.GT_Recipe_AssemblyLine.sAssemblylineRecipes) { - if (GT_Utility.areStacksEqual(tRecipe.mResearchItem, aStack, true)) { - boolean failScanner = true; - for (GT_Recipe scannerRecipe : scannerFakeRecipes.getAllRecipes()) { - if (GT_Utility.areStacksEqual(scannerRecipe.mInputs[0], aStack, true)) { - failScanner = false; - break; - } - } - if (failScanner) { - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - } - - this.mOutputItems[0] = GT_Utility.copyAmount(1, getSpecialSlot()); - - // Use Assline Utils - if (GT_AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(this.mOutputItems[0], tRecipe)) { - aStack.stackSize -= 1; - calculateOverclockedNess(30, tRecipe.mResearchTime); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - getSpecialSlot().stackSize -= 1; - return 2; - } - } - } - } - } - return 0; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (mProgresstime >= (mMaxProgresstime - 1)) { - if ((this.mOutputItems[0] != null) && (this.mOutputItems[0].getUnlocalizedName() - .equals("gt.metaitem.01.32707"))) { - GT_Mod.achievements.issueAchievement( - aBaseMetaTileEntity.getWorld() - .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), - "scanning"); - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public RecipeMap getRecipeMap() { - return scannerFakeRecipes; - } - - @Override - public int getCapacity() { - return 1000; - } - - @Override - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) - && getRecipeMap().containsInput(aStack); - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java deleted file mode 100644 index 9de00b4a0e..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_Teleporter.java +++ /dev/null @@ -1,601 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_SIDES; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_SIDES_GLOW; - -import java.util.List; -import java.util.function.Consumer; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityHanging; -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.boss.EntityDragonPart; -import net.minecraft.entity.effect.EntityWeatherEffect; -import net.minecraft.entity.item.EntityBoat; -import net.minecraft.entity.item.EntityEnderCrystal; -import net.minecraft.entity.item.EntityEnderEye; -import net.minecraft.entity.item.EntityFireworkRocket; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.item.EntityMinecart; -import net.minecraft.entity.item.EntityTNTPrimed; -import net.minecraft.entity.item.EntityXPOrb; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.entity.projectile.EntityFireball; -import net.minecraft.entity.projectile.EntityFishHook; -import net.minecraft.entity.projectile.EntityThrowable; -import net.minecraft.inventory.IInventory; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.common.config.machinestats.ConfigTeleporter; - -public class GT_MetaTileEntity_Teleporter extends GT_MetaTileEntity_BasicTank - implements IAddGregtechLogo, IAddUIWidgets { - - private static boolean sInterDimensionalTeleportAllowed = true; - private static int sPassiveEnergyDrain = 2048; - private static int sPowerMultiplyer = 100; - private static double sFPowerMultiplyer = 1.0; - public int mTargetX = 0; - public int mTargetY = 0; - public int mTargetZ = 0; - public int mTargetD = Integer.MIN_VALUE; - public boolean mDebug = false; - - public GT_MetaTileEntity_Teleporter(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 3, - new String[] { "Teleport long distances with this little device.", "Use a Dragon Egg or Nitrogen Plasma", - "for Inter-dimensional transmission" }); - } - - public GT_MetaTileEntity_Teleporter(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - public GT_MetaTileEntity_Teleporter(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - private static float calculateWeight(Entity aEntity) { - if ((aEntity instanceof EntityFishHook)) { - return -1.0F; - } - if ((aEntity instanceof EntityDragonPart)) { - return -1.0F; - } - if ((aEntity instanceof EntityWeatherEffect)) { - return -1.0F; - } - if ((aEntity instanceof EntityPlayer tPlayer)) { - int tCount = 64; - for (int i = 0; i < 36; i++) { - if (tPlayer.inventory.getStackInSlot(i) != null) { - tCount += (tPlayer.inventory.getStackInSlot(i) - .getMaxStackSize() > 1 ? tPlayer.inventory.getStackInSlot(i).stackSize : 64); - } - } - for (int i = 0; i < 4; i++) { - if (tPlayer.inventory.armorInventory[i] != null) { - tCount += 256; - } - } - return Math.min(5.0F, tCount / 666.6F); - } - if (GT_Utility.getClassName(aEntity) - .equals("EntityItnt")) { - return 5.0F; - } - if (GT_Utility.getClassName(aEntity) - .equals("EntityNuke")) { - return 50.0F; - } - if ((aEntity instanceof EntityArrow)) { - return 0.001F; - } - if ((aEntity instanceof EntityBoat)) { - return 0.1F; - } - if ((aEntity instanceof EntityEnderCrystal)) { - return 2.0F; - } - if ((aEntity instanceof EntityEnderEye)) { - return 0.001F; - } - if ((aEntity instanceof EntityFireball)) { - return 0.001F; - } - if ((aEntity instanceof EntityFireworkRocket)) { - return 0.001F; - } - if ((aEntity instanceof EntityHanging)) { - return 0.005F; - } - if ((aEntity instanceof EntityItem)) { - return 0.001F; - } - if ((aEntity instanceof EntityLiving)) { - return 0.5F; - } - if ((aEntity instanceof EntityMinecart)) { - return 0.1F; - } - if ((aEntity instanceof EntityThrowable)) { - return 0.001F; - } - if ((aEntity instanceof EntityTNTPrimed)) { - return 5.0F; - } - if ((aEntity instanceof EntityXPOrb)) { - return 0.001F; - } - return -1.0F; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) return true; - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Teleporter(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return new String[] { "Coordinates:", - "X: " + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(this.mTargetX) + EnumChatFormatting.RESET, - "Y: " + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(this.mTargetY) + EnumChatFormatting.RESET, - "Z: " + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(this.mTargetZ) + EnumChatFormatting.RESET, - "Dimension: " + EnumChatFormatting.GREEN + this.mTargetD + EnumChatFormatting.RESET, - "Dimension Valid: " + (GT_Utility.isRealDimension(this.mTargetD) - ? EnumChatFormatting.GREEN + "Yes" + EnumChatFormatting.RESET - : EnumChatFormatting.RED + "No" + EnumChatFormatting.RESET), - "Dimension Registered: " + (DimensionManager.isDimensionRegistered(this.mTargetD) - ? EnumChatFormatting.GREEN + "Yes" + EnumChatFormatting.RESET - : EnumChatFormatting.RED + "No" + EnumChatFormatting.RESET) }; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side != this.getBaseMetaTileEntity() - .getFrontFacing()) - return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_TELEPORTER_SIDES), - TextureFactory.builder() - .addIcon(OVERLAY_TELEPORTER_SIDES_GLOW) - .glow() - .build() }; - if (aActive) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], - TextureFactory.of(OVERLAY_TELEPORTER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_TELEPORTER_ACTIVE_GLOW) - .glow() - .build() }; - return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_TELEPORTER), - TextureFactory.builder() - .addIcon(OVERLAY_TELEPORTER_GLOW) - .glow() - .build() }; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - if (mFluid != null) aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); - aNBT.setInteger("mTargetX", this.mTargetX); - aNBT.setInteger("mTargetY", this.mTargetY); - aNBT.setInteger("mTargetZ", this.mTargetZ); - aNBT.setInteger("mTargetD", this.mTargetD); - aNBT.setBoolean("mDebug", this.mDebug); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mFluid = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid")); - this.mTargetX = aNBT.getInteger("mTargetX"); - this.mTargetY = aNBT.getInteger("mTargetY"); - this.mTargetZ = aNBT.getInteger("mTargetZ"); - this.mTargetD = aNBT.getInteger("mTargetD"); - this.mDebug = aNBT.getBoolean("mDebug"); - } - - @Override - public void onConfigLoad() { - sInterDimensionalTeleportAllowed = ConfigTeleporter.interDimensionalTPAllowed; - sPassiveEnergyDrain = ConfigTeleporter.passiveEnergyDrain; - sPowerMultiplyer = ConfigTeleporter.powerMultiplier; - sFPowerMultiplyer = sPowerMultiplyer / 100.0; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - if (getBaseMetaTileEntity().isServerSide()) { - if ((this.mTargetX == 0) && (this.mTargetY == 0) - && (this.mTargetZ == 0) - && (this.mTargetD == Integer.MIN_VALUE)) { - this.mTargetX = aBaseMetaTileEntity.getXCoord(); - this.mTargetY = aBaseMetaTileEntity.getYCoord(); - this.mTargetZ = aBaseMetaTileEntity.getZCoord(); - this.mTargetD = aBaseMetaTileEntity.getWorld().provider.dimensionId; - } - } - } - - public boolean hasDimensionalTeleportCapability() { - return this.mDebug || sInterDimensionalTeleportAllowed; - } - - public boolean isDimensionalTeleportAvailable() { - return this.mDebug || (hasDimensionalTeleportCapability() && GT_Utility.isRealDimension(this.mTargetD) - && GT_Utility.isRealDimension(getBaseMetaTileEntity().getWorld().provider.dimensionId)); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - - if (mFluid != null) { // Was if null -> Materials.Nitrogen.getPlasma(0); - mFluid = null; - } - super.onPostTick(aBaseMetaTileEntity, aTick); - if (getBaseMetaTileEntity().isServerSide()) { - if ((getBaseMetaTileEntity().isAllowedToWork()) && (getBaseMetaTileEntity().getRedstone())) { - if (getBaseMetaTileEntity().decreaseStoredEnergyUnits(sPassiveEnergyDrain, false)) { - int tDistance = distanceCalculation(); - if (mInventory[0] != null) { - TileEntity tTile = null; - if (this.mTargetD == getBaseMetaTileEntity().getWorld().provider.dimensionId) { - tTile = getBaseMetaTileEntity().getTileEntity(this.mTargetX, this.mTargetY, this.mTargetZ); - } else { - World tWorld = DimensionManager.getWorld(this.mTargetD); - if (tWorld != null) { - tTile = tWorld.getTileEntity(this.mTargetX, this.mTargetY, this.mTargetZ); - } - } - if (tTile instanceof IInventory) { - int tStacksize = mInventory[0].stackSize; - GT_Utility.moveOneItemStack( - this, - tTile, - ForgeDirection.DOWN, - ForgeDirection.DOWN, - null, - false, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1); - if (mInventory[0] == null || mInventory[0].stackSize < tStacksize) { - getBaseMetaTileEntity().decreaseStoredEnergyUnits( - (long) (Math.pow(tDistance, 1.5) * tDistance - * (tStacksize - (mInventory[0] == null ? 0 : mInventory[0].stackSize)) - * sFPowerMultiplyer), - false); - } - } - } - List entities_in_box = getBaseMetaTileEntity().getWorld() - .getEntitiesWithinAABB( - Entity.class, - AxisAlignedBB.getBoundingBox( - getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 2) - 1, - getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 2) - 1, - getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 2) - 1, - getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 2) + 2, - getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 2) + 2, - getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 2) + 2)); - - for (Object tObject : entities_in_box) { - if (((tObject instanceof Entity tEntity)) && (!((Entity) tObject).isDead)) { - if (getBaseMetaTileEntity().decreaseStoredEnergyUnits( - (long) (Math.pow(tDistance, 1.5) * calculateWeight(tEntity) * sFPowerMultiplyer), - false)) { - - if (tEntity.ridingEntity != null) { - tEntity.mountEntity(null); - } - if (tEntity.riddenByEntity != null) { - tEntity.riddenByEntity.mountEntity(null); - } - if ((this.mTargetD == getBaseMetaTileEntity().getWorld().provider.dimensionId) - || (!isDimensionalTeleportAvailable()) - || (!GT_Utility.moveEntityToDimensionAtCoords( - tEntity, - this.mTargetD, - this.mTargetX + 0.5D, - this.mTargetY + 0.5D, - this.mTargetZ + 0.5D))) { - if ((tEntity instanceof EntityLivingBase)) { - ((EntityLivingBase) tEntity).setPositionAndUpdate( - this.mTargetX + 0.5D, - this.mTargetY + 0.5D, - this.mTargetZ + 0.5D); - } else { - tEntity.setPosition( - this.mTargetX + 0.5D, - this.mTargetY + 0.5D, - this.mTargetZ + 0.5D); - } - } - } - } - } - } - getBaseMetaTileEntity().setActive(true); - } else { - getBaseMetaTileEntity().setActive(false); - } - } - } - - private int distanceCalculation() { - return Math.abs( - ((this.mTargetD != getBaseMetaTileEntity().getWorld().provider.dimensionId) - && (isDimensionalTeleportAvailable()) - ? 4000 - : (int) Math.sqrt( - Math.pow(getBaseMetaTileEntity().getXCoord() - this.mTargetX, 2.0D) - + Math.pow(getBaseMetaTileEntity().getYCoord() - this.mTargetY, 2.0D) - + Math.pow(getBaseMetaTileEntity().getZCoord() - this.mTargetZ, 2.0D)))); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isOverclockerUpgradable() { - return false; - } - - @Override - public boolean isTransformerUpgradable() { - return false; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return true; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return V[mTier] * 16; - } - - @Override - public long maxEUStore() { - return 100000000; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxSteamStore() { - return maxEUStore(); - } - - @Override - public long maxAmperesIn() { - return 2; - } - - @Override - public int getStackDisplaySlot() { - return 2; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public int getInputSlot() { - return 0; - } - - @Override - public int getOutputSlot() { - return 0; - } - - @Override - public int getCapacity() { - return 64000; - } - - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public boolean displaysItemStack() { - return false; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return null; - } - - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setSize(90, 72) - .setPos(43, 4)) - .widget( - new TextWidget().setStringSupplier(() -> "X: " + numberFormat.format(mTargetX)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 8)) - .widget( - new TextWidget().setStringSupplier(() -> "Y: " + numberFormat.format(mTargetY)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 16)) - .widget( - new TextWidget().setStringSupplier(() -> "Z: " + numberFormat.format(mTargetZ)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 24)) - .widget( - new TextWidget().setStringSupplier(() -> "Dim: " + numberFormat.format(mTargetD)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 32)) - .widget( - TextWidget.dynamicString(() -> "Dim Valid: " + (GT_Utility.isRealDimension(mTargetD) ? "Yes" : "No")) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> hasDimensionalTeleportCapability()) - .setPos(46, 40)) - .widget(new FakeSyncWidget.FluidStackSyncer(() -> mFluid, val -> mFluid = val)); - - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, -512, -64, 7); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, -16, -1, 25); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, 16, 1, 133); - addChangeNumberButtons(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, 512, 64, 151); - - addChangeNumberButton( - builder, - GT_UITextures.OVERLAY_BUTTON_MINUS_LARGE, - val -> mTargetD += val, - -16, - -8, - 7, - 58); - addChangeNumberButton( - builder, - GT_UITextures.OVERLAY_BUTTON_MINUS_SMALL, - val -> mTargetD += val, - -4, - -1, - 25, - 58); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> mTargetD += val, 4, 1, 133, 58); - addChangeNumberButton(builder, GT_UITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> mTargetD += val, 16, 8, 151, 58); - } - - private void addChangeNumberButtons(ModularWindow.Builder builder, IDrawable overlay, int addNumberShift, - int addNumber, int xPos) { - addChangeNumberButton(builder, overlay, val -> mTargetX += val, addNumberShift, addNumber, xPos, 4); - addChangeNumberButton(builder, overlay, val -> mTargetY += val, addNumberShift, addNumber, xPos, 22); - addChangeNumberButton(builder, overlay, val -> mTargetZ += val, addNumberShift, addNumber, xPos, 40); - } - - private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, - int addNumberShift, int addNumber, int xPos, int yPos) { - builder.widget( - new ButtonWidget() - .setOnClick((clickData, widget) -> setter.accept(clickData.shift ? addNumberShift : addNumber)) - .setBackground(GT_UITextures.BUTTON_STANDARD, overlay) - .setSize(18, 18) - .setPos(xPos, yPos)); - } - - @Override - public GUITextureSet getGUITextureSet() { - return new GUITextureSet().setGregTechLogo(GT_UITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY); - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) - .setSize(17, 17) - .setPos(113, 56)); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_TurboCharger.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_TurboCharger.java deleted file mode 100644 index a098e635f0..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_TurboCharger.java +++ /dev/null @@ -1,146 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.V; - -import net.minecraft.item.ItemStack; - -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.BaseMetaTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -/** - * Created by danie_000 on 15.10.2016. - */ -public class GT_MetaTileEntity_TurboCharger extends GT_MetaTileEntity_Charger { - - public GT_MetaTileEntity_TurboCharger(int aID, String aName, String aNameRegional, int aTier, String aDescription, - int aSlotCount) { - super(aID, aName, aNameRegional, aTier, aDescription, aSlotCount); - } - - public GT_MetaTileEntity_TurboCharger(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, - int aSlotCount) { - super(aName, aTier, aDescription, aTextures, aSlotCount); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_TurboCharger(mName, mTier, mDescriptionArray, mTextures, mInventory.length); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[2][17][]; - for (byte b = -1; b < 16; b++) { - rTextures[0][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1] }; - rTextures[1][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier] }; - } - return rTextures; - } - - @Override - public long getMinimumStoredEU() { - return V[mTier] * 1536L * mInventory.length; - } - - @Override - public long maxEUStore() { - return V[mTier] * 6144L * mInventory.length; - } - - @Override - public long maxAmperesIn() { - return 16L * mInventory.length; - } - - @Override - public long maxAmperesOut() { - return 4L * mInventory.length; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - - mCharge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3 - || !aBaseMetaTileEntity.isAllowedToWork(); - mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3 - && aBaseMetaTileEntity.isAllowedToWork(); - mBatteryCount = 0; - mChargeableCount = 0; - for (ItemStack tStack : mInventory) { - if (GT_ModHandler.isElectricItem(tStack, mTier)) { - if (GT_ModHandler.isChargerItem(tStack)) { - mBatteryCount++; - } - mChargeableCount++; - } - } - - if (getBaseMetaTileEntity() instanceof BaseMetaTileEntity) { - BaseMetaTileEntity mBaseMetaTileEntity = (BaseMetaTileEntity) getBaseMetaTileEntity(); - if (mBaseMetaTileEntity.getMetaTileEntity() instanceof MetaTileEntity) { - MetaTileEntity mMetaTileEntity = (MetaTileEntity) mBaseMetaTileEntity.getMetaTileEntity(); - if (mMetaTileEntity.dechargerSlotCount() > 0 - && mBaseMetaTileEntity.getStoredEU() < mBaseMetaTileEntity.getEUCapacity()) { - for (int i = mMetaTileEntity.dechargerSlotStartIndex(), - k = mMetaTileEntity.dechargerSlotCount() + i; i < k; i++) { - if (mMetaTileEntity.mInventory[i] != null - && mBaseMetaTileEntity.getStoredEU() < mBaseMetaTileEntity.getEUCapacity()) { - // CODE - mBaseMetaTileEntity.increaseStoredEnergyUnits( - GT_ModHandler.dischargeElectricItem( - mMetaTileEntity.mInventory[i], - GT_Utility.safeInt( - Math.min( - V[mTier] * 120, - mBaseMetaTileEntity.getEUCapacity() - - mBaseMetaTileEntity.getStoredEU())), - (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getInputTier()), - true, - false, - false), - true); - if (mMetaTileEntity.mInventory[i].stackSize <= 0) { - mMetaTileEntity.mInventory[i] = null; - } - } - } - } - if (mMetaTileEntity.rechargerSlotCount() > 0 && mBaseMetaTileEntity.getStoredEU() > 0) { - for (int i = mMetaTileEntity.rechargerSlotStartIndex(), - k = mMetaTileEntity.rechargerSlotCount() + i; i < k; i++) { - if (mBaseMetaTileEntity.getStoredEU() > 0 && mMetaTileEntity.mInventory[i] != null) { - // CODE - mBaseMetaTileEntity - .decreaseStoredEU( - GT_ModHandler.chargeElectricItem( - mMetaTileEntity.mInventory[i], - GT_Utility - .safeInt(Math.min(V[mTier] * 120, mBaseMetaTileEntity.getStoredEU())), - (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getOutputTier()), - true, - false), - true); - if (mMetaTileEntity.mInventory[i].stackSize <= 0) { - mMetaTileEntity.mInventory[i] = null; - } - } - } - } - } - } - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_WorldAccelerator.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_WorldAccelerator.java deleted file mode 100644 index 1b0048f2ec..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_WorldAccelerator.java +++ /dev/null @@ -1,470 +0,0 @@ -package gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Mods.GregTech; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import eu.usrv.yamcore.auxiliary.PlayerChatHelper; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Log; - -public class GT_MetaTileEntity_WorldAccelerator extends GT_MetaTileEntity_TieredMachineBlock { - - // simple name is rather expensive to compute and it's not cached - // see https://stackoverflow.com/q/17369304 - private static final ClassValue simpleNameCache = new ClassValue() { - - @Override - protected String computeValue(Class type) { - return type.getSimpleName(); - } - }; - private static final HashSet> _mBlacklistedTiles = new HashSet<>(); - - public static boolean addTileToBlacklist(Class clazz) { - return _mBlacklistedTiles.add(clazz); - } - - public static boolean addTileToBlacklist(TileEntity tileEntity) { - return _mBlacklistedTiles.add(tileEntity.getClass()); - } - - public static HashSet> get_mBlacklistedTiles() { - return _mBlacklistedTiles; - } - - private int _mRadiusTierOverride = -1; - private int _mSpeedTierOverride = -1; - - private int getRadiusTierOverride() { - if (_mRadiusTierOverride == -1) _mRadiusTierOverride = mTier; - return _mRadiusTierOverride; - } - - private int getSpeedTierOverride() { - if (_mSpeedTierOverride == -1) _mSpeedTierOverride = mTier; - return _mSpeedTierOverride; - } - - private int incSpeedTierOverride() { - _mSpeedTierOverride = getSpeedTierOverride() + 1; - if (_mSpeedTierOverride > mTier) _mSpeedTierOverride = 1; - - return _mSpeedTierOverride; - } - - private int incRadiusTierOverride() { - // Make sure we get the Override value first, as we check it for initial -1 - _mRadiusTierOverride = getRadiusTierOverride() + 1; - if (_mRadiusTierOverride > mTier) _mRadiusTierOverride = 1; - - return _mRadiusTierOverride; - } - - private byte mMode = 0; // 0: RandomTicks around 1: TileEntities with range 1 - private static Textures.BlockIcons.CustomIcon _mGTIco_Norm_Idle; - private static Textures.BlockIcons.CustomIcon _mGTIco_Norm_Active; - private static Textures.BlockIcons.CustomIcon _mGTIco_TE_Idle; - private static Textures.BlockIcons.CustomIcon _mGTIco_TE_Active; - private static int[] mAccelerateStatic = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 512, 512, 512, 512, 512, 512 }; - private static final int AMPERAGE_NORMAL = 3; - private static final int AMPERAGE_TE = 6; - - @Override - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - _mGTIco_Norm_Idle = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_ACCELERATOR"); - _mGTIco_Norm_Active = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_ACCELERATOR_ACTIVE"); - _mGTIco_TE_Idle = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_ACCELERATOR_TE"); - _mGTIco_TE_Active = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_ACCELERATOR_TE_ACTIVE"); - } - - @SideOnly(Side.CLIENT) - @Override - public void onValueUpdate(byte aValue) { - mMode = aValue; - } - - @Override - public byte getUpdateData() { - return mMode; - } - - public GT_MetaTileEntity_WorldAccelerator(int pID, String pName, String pNameRegional, int pTier) { - super(pID, pName, pNameRegional, pTier, 0, ""); - } - - @Override - public String[] getDescription() { - return new String[] { - String - .format("Accelerating things (Max Radius: %d | Max Speed Bonus: x%d)", mTier, mAccelerateStatic[mTier]), - "Use a screwdriver to change mode, sneak to change Radius", "Use a wrench to change speed", - "To accelerate TileEntities, this machine has to be adjacent to it", - String.format("Normal mode consumes up to %s amperage, depending on radius", AMPERAGE_NORMAL), - String.format("TE mode consumes %s amperage", AMPERAGE_TE) }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - List tInfoDisplay = new ArrayList<>(); - - tInfoDisplay.add(String.format("Accelerator running in %s mode", mModeStr[mMode])); - tInfoDisplay.add( - String.format( - "Speed setting: [%d / %d]", - mAccelerateStatic[getSpeedTierOverride()], - mAccelerateStatic[mTier])); - tInfoDisplay.add( - String.format( - "Consuming %d EU/t", - getEnergyDemand(getSpeedTierOverride(), getRadiusTierOverride(), mMode == 1))); - - // Don't show radius setting if in TE Mode - if (mMode == 0) tInfoDisplay.add(String.format("Radius setting: [%d / %d]", getRadiusTierOverride(), mTier)); - - return tInfoDisplay.toArray(new String[0]); - } - - public GT_MetaTileEntity_WorldAccelerator(String pName, int pTier, int pInvSlotCount, String[] pDescription, - ITexture[][][] pTextures) { - super(pName, pTier, pInvSlotCount, pDescription, pTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity pTileEntity) { - return new GT_MetaTileEntity_WorldAccelerator(mName, mTier, mInventory.length, mDescriptionArray, mTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] pTextures) { - return null; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity pBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean pActive, boolean pRedstone) { - if (mMode == 0) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], side.offsetY != 0 ? null - : pActive ? new GT_RenderedTexture(_mGTIco_Norm_Active) : new GT_RenderedTexture(_mGTIco_Norm_Idle) }; - } else { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], side.offsetY != 0 ? null - : pActive ? new GT_RenderedTexture(_mGTIco_TE_Active) : new GT_RenderedTexture(_mGTIco_TE_Idle) }; - } - } - - @Override - public boolean allowPullStack(IGregTechTileEntity pBaseMetaTileEntity, int pIndex, ForgeDirection side, - ItemStack pStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity pBaseMetaTileEntity, int pIndex, ForgeDirection side, - ItemStack pStack) { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound pNBT) { - pNBT.setByte("mAccelMode", mMode); - - // SpeedOverride can never be larger than mTier; Which will never exceed 255, so it's safe to cast here - pNBT.setByte("mSpeed", (byte) getSpeedTierOverride()); - pNBT.setByte("mRadius", (byte) getRadiusTierOverride()); - } - - public long getEnergyDemand(int pSpeedTier, int pRangeTier, boolean pIsAcceleratingTEs) { - // TE mode does not need to consider range setting - if (pIsAcceleratingTEs) return V[pSpeedTier] * AMPERAGE_TE; - - // Include range setting into power calculation - float multiplier = 100.0F / (float) mTier * (float) pRangeTier / 100.0F; - long demand = V[pSpeedTier] * AMPERAGE_NORMAL; - - float tDemand = demand * multiplier; - - return (int) tDemand; - } - - @Override - public void loadNBTData(NBTTagCompound pNBT) { - mMode = pNBT.getByte("mAccelMode"); - - // Make sure we're not crashing with old Accelerator Machines - if (pNBT.hasKey("mSpeed")) _mSpeedTierOverride = pNBT.getByte("mSpeed"); - if (pNBT.hasKey("mRadius")) _mRadiusTierOverride = pNBT.getByte("mRadius"); - } - - @Override - public boolean isAccessAllowed(EntityPlayer pPlayer) { - return true; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return true; - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 512; - } - - @Override - public long maxEUStore() { - return 512 + V[mTier] * 50; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxAmperesIn() { - return 8; - } - - private static String[] mModeStr = { "Blocks", "TileEntities" }; - - // This uses the Wrench as second tool to cycle speeds - @Override - public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer pPlayer, float aX, - float aY, float aZ) { - incSpeedTierOverride(); - - markDirty(); - PlayerChatHelper.SendInfo( - pPlayer, - String.format("Machine acceleration changed to x%d", mAccelerateStatic[getSpeedTierOverride()])); - - return true; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer pPlayer, float pX, float pY, float pZ) { - if (pPlayer.isSneaking()) { - if (mMode == 0) { - incRadiusTierOverride(); - - markDirty(); - PlayerChatHelper - .SendInfo(pPlayer, String.format("Machine radius changed to %d Blocks", getRadiusTierOverride())); - } else PlayerChatHelper - .SendError(pPlayer, String.format("Can't change radius; Machine is in TileEntity Mode!")); - } else { - mMode = (byte) (mMode == 0x00 ? 0x01 : 0x00); - markDirty(); - PlayerChatHelper.SendInfo(pPlayer, String.format("Switched mode to: %s", mModeStr[mMode])); - } - } - - @Override - public void onPostTick(IGregTechTileEntity pBaseMetaTileEntity, long pTick) { - try { - if (!pBaseMetaTileEntity.isServerSide()) { - return; - } - - long tEnergyDemand = getEnergyDemand(getSpeedTierOverride(), getRadiusTierOverride(), mMode == 1); - - // Do we have enough energy to run? Or are we not allowed to run? - if (pBaseMetaTileEntity.getStoredEU() < tEnergyDemand || !pBaseMetaTileEntity.isAllowedToWork()) { - // Check if machine was active before - if (pBaseMetaTileEntity.isActive()) { - pBaseMetaTileEntity.setActive(false); // Then disable it now - } - } else { - // Continue to drain power - if (pBaseMetaTileEntity.decreaseStoredEnergyUnits(tEnergyDemand, false)) { - World tWorld = pBaseMetaTileEntity.getWorld(); - // Limit the random ticks to once per second - if (mMode == 0) { - if (pTick % 20 == 0) { - doAccelerateNormalBlocks(pBaseMetaTileEntity, tWorld); - } - } else { - doAccelerateTileEntities(pBaseMetaTileEntity, tWorld); - } - - } else { - // Energy drain failed. Disable machine - if (pBaseMetaTileEntity.isActive()) { - pBaseMetaTileEntity.setActive(false); // Then disable it now - } - } - } - } catch (Exception e) { - GT_Log.err.println("GT_MetaTileEntity_WorldAccelerator.onPostTick.crash\n" + e.getMessage()); - } - } - - private void doAccelerateTileEntities(IGregTechTileEntity pBaseMetaTileEntity, World pWorld) { - try { - if (!pBaseMetaTileEntity.isActive()) { - getBaseMetaTileEntity().setActive(true); - } - - for (ForgeDirection tDir : ForgeDirection.VALID_DIRECTIONS) { - TileEntity tTile = pBaseMetaTileEntity.getTileEntityAtSide(tDir); - if (isTEBlackListed(tTile)) { - continue; - } - - long tMaxTime = System.nanoTime() + 1000000; - for (int j = 0; j < mAccelerateStatic[getSpeedTierOverride()]; j++) { - tTile.updateEntity(); - if (System.nanoTime() > tMaxTime) { - break; - } - } - } - } catch (Exception e) { - GT_Log.err.println("GT_MetaTileEntity_WorldAccelerator.doAccelerateTileEntities.crash\n" + e.getMessage()); - } - } - - // Inspired by ChromatiCraft's TileAccelerator - private boolean isTEBlackListed(TileEntity pTile) { - if (pTile == null) { - return true; // Obvious - } - if (!pTile.canUpdate()) { - return true; // Skip if TE can't update at all - } - if (pTile.isInvalid()) { - return true; // Obvious - } - - String tSimpleClassName = simpleNameCache.get(pTile.getClass()); - String tCanonicalName = pTile.getClass() - .getCanonicalName() - .toLowerCase(); - if (tSimpleClassName.contains("conduit") || tSimpleClassName.contains("wire") - || tSimpleClassName.contains("cable")) { - return true; - } - if (tCanonicalName.contains("appeng") || tCanonicalName.contains(GregTech.ID)) // Don't accelerate ANY gregtech - // machines - { - return true; - } - if (tSimpleClassName.contains("solar") || tCanonicalName.contains("solar")) // Don't accelerate ANY solars - { - return true; - } - - for (String tS : GT_Values.blacklistedTileEntiyClassNamesForWA) { - if (tCanonicalName.equalsIgnoreCase(tS)) { - return true; - } - } - - return GT_MetaTileEntity_WorldAccelerator._mBlacklistedTiles.stream() - .map(Class::getCanonicalName) - .map(String::toLowerCase) - .anyMatch(tCanonicalName::equalsIgnoreCase); - } - - /** - * Accelerate normal blocks. Eats some power and adds randomTicks to every block within its working area - * (Tier-Number = radius) This does only affect blocks that implement the "RandomTick" method; Which is mostly used - * for grass growth and plants. - * - * @param pBaseMetaTileEntity - */ - private void doAccelerateNormalBlocks(IGregTechTileEntity pBaseMetaTileEntity, World pWorld) { - if (!pBaseMetaTileEntity.isActive()) { - getBaseMetaTileEntity().setActive(true); - } - - Random rnd = new Random(); - int tX = pBaseMetaTileEntity.getXCoord(); - int tY = pBaseMetaTileEntity.getYCoord(); - int tZ = pBaseMetaTileEntity.getZCoord(); - - int tX1 = tX - getRadiusTierOverride(); - int tX2 = tX + getRadiusTierOverride(); - int tY1 = Math.max(tY - getRadiusTierOverride(), 0); // Limit to bedrock - int tY2 = Math.min(tY + getRadiusTierOverride(), 255); // Limit to build height - int tZ1 = tZ - getRadiusTierOverride(); - int tZ2 = tZ + getRadiusTierOverride(); - - for (int xi = tX1; xi <= tX2; xi++) { - for (int yi = tY1; yi <= tY2; yi++) { - for (int zi = tZ1; zi <= tZ2; zi++) { - tryTickBlock(pWorld, xi, yi, zi, rnd); - } - } - } - } - - /** - * Send a tick to the target block - * - * @param pWorld - * @param pX - * @param pY - * @param pZ - * @param pRnd - */ - private void tryTickBlock(World pWorld, int pX, int pY, int pZ, Random pRnd) { - try { - for (int j = 0; j < getSpeedTierOverride(); j++) { - Block tBlock = pWorld.getBlock(pX, pY, pZ); - if (tBlock.getTickRandomly()) { - tBlock.updateTick(pWorld, pX, pY, pZ, pRnd); - } - } - } catch (Exception e) { - GT_Log.err.println("GT_MetaTileEntity_WorldAccelerator.tryTickBlock.crash\n" + e.getMessage()); - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEAdvSeismicProspector.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEAdvSeismicProspector.java new file mode 100644 index 0000000000..fc4aefcf14 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEAdvSeismicProspector.java @@ -0,0 +1,307 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_GLOW; +import static gregtech.common.UndergroundOil.undergroundOilReadInformation; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.objects.ItemData; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.BlockOresAbstract; +import gregtech.common.blocks.TileEntityOres; +import ic2.core.Ic2Items; + +public class MTEAdvSeismicProspector extends MTEBasicMachine { + + boolean ready = false; + final int radius; + final int step; + int cX; + int cZ; + + public MTEAdvSeismicProspector(int aID, String aName, String aNameRegional, int aTier, int aRadius, int aStep) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, // amperage + "", + 1, // input slot count + 1, // output slot count + TextureFactory.of( + TextureFactory.of(OVERLAY_SIDE_ROCK_BREAKER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_ROCK_BREAKER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_SIDE_ROCK_BREAKER), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_ROCK_BREAKER_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_ROCK_BREAKER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_ROCK_BREAKER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_ROCK_BREAKER), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_ROCK_BREAKER_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ROCK_BREAKER_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_BOTTOM_ROCK_BREAKER), + TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_ROCK_BREAKER_GLOW) + .glow() + .build())); + radius = aRadius; + step = aStep; + } + + @Override + public String[] getDescription() { + return new String[] { "Place, activate with explosives", + "2 Powderbarrels, " + "4 Glyceryl Trinitrate, " + "16 TNT, or " + "8 ITNT", + "Use Data Stick, Scan Data Stick, Print Data Stick, Bind Pages into Book", + "Ore prospecting area = " + radius * 2 + "x" + radius * 2 + " ONLY blocks below prospector", + "Oil prospecting area 3x3 oilfields, each is 8x8 chunks" }; + } + + protected MTEAdvSeismicProspector(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, + int aRadius, int aStep) { + super(aName, aTier, 1, aDescription, aTextures, 1, 1); + radius = aRadius; + step = aStep; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAdvSeismicProspector( + this.mName, + this.mTier, + this.mDescriptionArray, + this.mTextures, + this.radius, + this.step); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isServerSide()) { + ItemStack aStack = aPlayer.getCurrentEquippedItem(); + + if (!ready && (GTUtility.consumeItems(aPlayer, aStack, Item.getItemFromBlock(Blocks.tnt), 16) + || GTUtility.consumeItems(aPlayer, aStack, Ic2Items.industrialTnt.getItem(), 8) + || GTUtility.consumeItems(aPlayer, aStack, Materials.Glyceryl, 4) + || GTUtility.consumeItems(aPlayer, aStack, ItemList.Block_Powderbarrel.getItem(), 2))) { + + this.ready = true; + this.mMaxProgresstime = (aPlayer.capabilities.isCreativeMode ? 20 : 800); + + } else if (ready && mMaxProgresstime == 0 + && aStack != null + && aStack.stackSize == 1 + && aStack.getItem() == ItemList.Tool_DataStick.getItem()) { + this.ready = false; + + // prospecting ores + HashMap tOres = new HashMap<>(36); + + prospectOres(tOres); + + // prospecting oils + ArrayList tOils = new ArrayList<>(); + prospectOils(tOils); + + GTUtility.ItemNBT.setAdvancedProspectionData( + mTier, + aStack, + this.getBaseMetaTileEntity() + .getXCoord(), + this.getBaseMetaTileEntity() + .getYCoord(), + this.getBaseMetaTileEntity() + .getZCoord(), + this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId, + tOils, + GTUtility.sortByValueToList(tOres), + radius); + } + } + + return true; + } + + private void prospectOils(ArrayList aOils) { + + int xChunk = (getBaseMetaTileEntity().getXCoord() >> 7) << 3; // oil field aligned chunk coords + int zChunk = (getBaseMetaTileEntity().getZCoord() >> 7) << 3; + + LinkedHashMap tFluids = new LinkedHashMap<>(); + int oilFieldCount = 0; + + try { + final int oilfieldSize = 8; + for (int z = -1; z <= 1; ++z) { + for (int x = -1; x <= 1; ++x) { + ChunkCoordIntPair cInts = new ChunkCoordIntPair(x, z); + int min = Integer.MAX_VALUE; + int max = Integer.MIN_VALUE; + + for (int i = 0; i < oilfieldSize; i++) { + for (int j = 0; j < oilfieldSize; j++) { + Chunk tChunk = getBaseMetaTileEntity().getWorld() + .getChunkFromChunkCoords(xChunk + i + x * oilfieldSize, zChunk + j + z * oilfieldSize); + FluidStack tFluid = undergroundOilReadInformation(tChunk); + if (tFluid != null) { + if (tFluid.amount > max) max = tFluid.amount; + if (tFluid.amount < min) min = tFluid.amount; + if (!tFluids.containsKey(cInts)) { + tFluids.put(cInts, tFluid); + } + } + } + } + + aOils.add( + ++oilFieldCount + "," + + min + + "-" + + max + + "," + + tFluids.get(cInts) + .getLocalizedName()); + } + } + } catch (Exception ignored) {} + } + + private void prospectOres(Map aOres) { + int tLeftXBound = this.getBaseMetaTileEntity() + .getXCoord() - radius; + int tRightXBound = tLeftXBound + 2 * radius; + + int tLeftZBound = this.getBaseMetaTileEntity() + .getZCoord() - radius; + int tRightZBound = tLeftZBound + 2 * radius; + + for (int i = tLeftXBound; i <= tRightXBound; i += step) { + if (Math.abs(i >> 4) % 3 != 1) continue; + for (int k = tLeftZBound; k <= tRightZBound; k += step) { + if (Math.abs(k >> 4) % 3 != 1) continue; + + cX = (i >> 4) << 4; + cZ = (k >> 4) << 4; + + String separator = (cX + 8) + "," + (cZ + 8) + " --------"; + aOres.put(separator, 1); + prospectHole(i, k, aOres); + } + } + } + + private void prospectHole(int i, int k, Map aOres) { + String tFoundOre; + for (int j = this.getBaseMetaTileEntity() + .getYCoord(); j > 0; j--) { + tFoundOre = checkForOre(i, j, k); + if (tFoundOre != null) countOre(aOres, tFoundOre, cX, cZ); + } + } + + private String checkForOre(int x, int y, int z) { + Block tBlock = this.getBaseMetaTileEntity() + .getBlock(x, y, z); + + if (tBlock instanceof BlockOresAbstract) { + TileEntity tTileEntity = getBaseMetaTileEntity().getWorld() + .getTileEntity(x, y, z); + + if ((tTileEntity instanceof TileEntityOres) && (((TileEntityOres) tTileEntity).mMetaData < 16000)) { // Filtering + // small + // ores + Materials tMaterial = GregTechAPI.sGeneratedMaterials[((TileEntityOres) tTileEntity).mMetaData % 1000]; + + if ((tMaterial != null) && (tMaterial != Materials._NULL)) return tMaterial.mDefaultLocalName; + } + } else { + int tMetaID = getBaseMetaTileEntity().getWorld() + .getBlockMetadata(x, y, z); + ItemStack is = new ItemStack(tBlock, 1, tMetaID); + ItemData association = GTOreDictUnificator.getAssociation(is); + if ((association != null) && (association.mPrefix.toString() + .startsWith("ore"))) return association.mMaterial.mMaterial.mDefaultLocalName; + else if (GTUtility.isOre(tBlock, tMetaID)) return tBlock.getLocalizedName(); + } + return null; + } + + private static void countOre(Map map, String ore, int cCX, int cCZ) { + ore = (cCX + 8) + "," + (cCZ + 8) + " has " + ore; + Integer oldCount = map.get(ore); + oldCount = (oldCount == null) ? 0 : oldCount; + + map.put(ore, oldCount + 1); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEBetterJukebox.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEBetterJukebox.java new file mode 100644 index 0000000000..8f1db317a2 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEBetterJukebox.java @@ -0,0 +1,701 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_JUKEBOX; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_JUKEBOX; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.EnumMap; +import java.util.List; +import java.util.Random; +import java.util.UUID; + +import net.minecraft.item.ItemRecord; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; + +import org.joml.Vector4i; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; +import com.gtnewhorizons.modularui.common.widget.SliderWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import appeng.api.implementations.tiles.ISoundP2PHandler; +import appeng.me.GridAccessException; +import appeng.me.cache.helpers.TunnelCollection; +import appeng.me.helpers.AENetworkProxy; +import appeng.parts.p2p.PartP2PSound; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.VoltageIndex; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.recipe.BasicUIProperties; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTMusicSystem; +import gregtech.common.gui.modularui.UIHelper; +import it.unimi.dsi.fastutil.objects.ObjectArrayList; + +public class MTEBetterJukebox extends MTEBasicMachine implements IAddUIWidgets, ISoundP2PHandler { + + // Stored state + public UUID jukeboxUuid = UNSET_UUID; + public boolean loopMode = true; + public boolean shuffleMode = false; + public int playbackSlot = 0; + public float playbackVolume = BalanceMath.VANILLA_JUKEBOX_RANGE; + public float p2pVolume = BalanceMath.VANILLA_JUKEBOX_RANGE; + public long discProgressMs = 0; + /** Makes all music discs play for 4 seconds */ + public boolean superFastDebugMode = false; + // Computed state + private final Vector4i interdimPositionCache = new Vector4i(); // XYZ, Dimension ID + private GTMusicSystem.MusicSource musicSource = null; + private boolean powered = false; + private long discStartMs = 0; + public long discDurationMs = 1; + private ItemRecord currentlyPlaying = null; + + // Constants + public static final UUID UNSET_UUID = UUID.nameUUIDFromBytes(new byte[] { 0 }); + public static final int INPUT_SLOTS = 21; + private static final Random SHUFFLER = new Random(); + + public enum HeadphoneLimit { + + BLOCK_RANGE, + INSIDE_DIMENSION, + BETWEEN_DIMENSIONS; + + public static final ImmutableList ENTRIES = ImmutableList.copyOf(values()); + } + + public static final class BalanceMath { + + public static int MAX_TIER = VoltageIndex.IV; + public static float VANILLA_JUKEBOX_RANGE = 4.0f; // 64 blocks + + private static final float[] LISTENING_VOLUME = new float[] { // + VANILLA_JUKEBOX_RANGE, // ULV (unpowered fallback) + VANILLA_JUKEBOX_RANGE + 1.0f, // LV, 80 blocks + VANILLA_JUKEBOX_RANGE + 2.0f, // MV, 96 blocks + VANILLA_JUKEBOX_RANGE + 4.0f, // HV, 118 blocks + VANILLA_JUKEBOX_RANGE + 5.0f, // EV, 144 blocks + VANILLA_JUKEBOX_RANGE + 6.0f, // IV, 160 blocks, equivalent to default load distance of 10 chunks + }; + + private static final int[] HEADPHONE_BLOCK_RANGE = new int[] { // + 64, // ULV (unpowered fallback) + 128, // LV + 160, // MV + 320, // HV + 9001, // EV, alreadu unlimited here - this value is ignored + 9002, // IV, already unlimited here - this value is ignored + }; + + public static float listeningVolume(int tier) { + tier = MathHelper.clamp_int(tier, 0, MAX_TIER); + return LISTENING_VOLUME[tier]; + } + + public static int headphoneBlockRange(int tier) { + tier = MathHelper.clamp_int(tier, 0, MAX_TIER); + return HEADPHONE_BLOCK_RANGE[tier]; + } + + public static HeadphoneLimit headphoneLimit(int tier) { + if (tier <= VoltageIndex.HV) { + return HeadphoneLimit.BLOCK_RANGE; + } else if (tier == VoltageIndex.EV) { + return HeadphoneLimit.INSIDE_DIMENSION; + } else { + return HeadphoneLimit.BETWEEN_DIMENSIONS; + } + } + + public static float volumeToAttenuationDistance(float range) { + // SoundManager.playSound logic + return 16.0f * range; + } + + public static float attenuationDistanceToVolume(float blockRange) { + return blockRange / 16.0f; + } + + public static long eutUsage(int tier) { + tier = MathHelper.clamp_int(tier, 0, MAX_TIER); + return V[tier] / 16; + } + } + + private static String[] buildDescription(int aTier) { + ArrayList strings = new ArrayList<>(4); + strings.add("Plays music better than your average vanilla jukebox."); + if (BalanceMath.headphoneLimit(aTier) != HeadphoneLimit.BLOCK_RANGE) { + strings.add(EnumChatFormatting.BLUE + "The raw power of Hatsune Miku in your ears"); + } + strings.add( + String.format( + "Range: %s%.1f blocks", + EnumChatFormatting.WHITE, + BalanceMath.volumeToAttenuationDistance(BalanceMath.listeningVolume(aTier)))); + strings.add(switch (BalanceMath.headphoneLimit(aTier)) { + case BLOCK_RANGE -> String.format( + "Headphone signal range: %s%d blocks", + EnumChatFormatting.WHITE, + BalanceMath.headphoneBlockRange(aTier)); + case INSIDE_DIMENSION -> String + .format("Headphones work anywhere in %sthe same dimension", EnumChatFormatting.WHITE); + case BETWEEN_DIMENSIONS -> String + .format("Headphones work anywhere, in %sany dimension", EnumChatFormatting.WHITE); + }); + strings.add(String.format("Cost: %s%d EU/t", EnumChatFormatting.WHITE, BalanceMath.eutUsage(aTier))); + strings.add(GTValues.AuthorEigenRaven); + return strings.toArray(new String[0]); + } + + public MTEBetterJukebox(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 1, buildDescription(aTier), INPUT_SLOTS, 1); + playbackVolume = BalanceMath.listeningVolume(aTier); + } + + public MTEBetterJukebox(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures, INPUT_SLOTS, 1); + playbackVolume = BalanceMath.listeningVolume(aTier); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBetterJukebox(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection == baseMetaTileEntity.getFrontFacing()) { + return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + if (sideDirection != ForgeDirection.UP) { + return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_SIDE_JUKEBOX) }; + } + return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.builder() + .addIcon(OVERLAY_TOP_JUKEBOX) + .extFacing() + .build() }; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + if (aBaseMetaTileEntity.isClientSide()) { + return; + } + final Vector4i interdimPosition = interdimPositionCache; + interdimPosition.x = aBaseMetaTileEntity.getXCoord(); + interdimPosition.y = aBaseMetaTileEntity.getYCoord(); + interdimPosition.z = aBaseMetaTileEntity.getZCoord(); + interdimPosition.w = aBaseMetaTileEntity.getWorld().provider.dimensionId; + if (jukeboxUuid == UNSET_UUID) { + jukeboxUuid = UUID.randomUUID(); + markDirty(); + } + if (musicSource == null) { + musicSource = GTMusicSystem.ServerSystem.registerOrGetMusicSource(jukeboxUuid); + musicSource.originPosition.set(interdimPosition); + musicSource.headphoneLimit = BalanceMath.headphoneLimit(mTier); + musicSource.headphoneBlockRange = BalanceMath.headphoneBlockRange(mTier); + musicSource.startedPlayingAtMs = System.currentTimeMillis(); + updateEmitterList(); + } + if (doesSlotContainValidRecord(playbackSlot) + && mInventory[playbackSlot].getItem() instanceof ItemRecord record) { + final ResourceLocation resource = record.getRecordResource(record.recordName); + currentlyPlaying = record; + // Assume a safe disc duration of 500 seconds if not known in the registry + discDurationMs = GTMusicSystem.getMusicRecordDurations() + .getOrDefault(resource, 500_000); + discStartMs = System.currentTimeMillis() - discProgressMs; + musicSource.setRecord( + new ResourceLocation(resource.getResourceDomain(), "records." + resource.getResourcePath()), + discProgressMs); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + try { + if (aBaseMetaTileEntity.isClientSide() || !aBaseMetaTileEntity.isAllowedToWork() || musicSource == null) { + if (currentlyPlaying != null) { + stopCurrentSong(System.currentTimeMillis()); + } + return; + } + final Vector4i interdimPosition = interdimPositionCache; + interdimPosition.x = aBaseMetaTileEntity.getXCoord(); + interdimPosition.y = aBaseMetaTileEntity.getYCoord(); + interdimPosition.z = aBaseMetaTileEntity.getZCoord(); + interdimPosition.w = aBaseMetaTileEntity.getWorld().provider.dimensionId; + final long now = System.currentTimeMillis(); + + if (superFastDebugMode && discDurationMs > 4000) { + discDurationMs = 4000; + } + + // power check + final boolean hasMinimumEU = aBaseMetaTileEntity.isUniversalEnergyStored(getMinimumStoredEU()); + if (currentlyPlaying != null && hasMinimumEU + && aBaseMetaTileEntity.decreaseStoredEnergyUnits(BalanceMath.eutUsage(mTier), false)) { + if (!powered) { // just got power again + powered = true; + musicSource.modified = true; + musicSource.headphoneLimit = BalanceMath.headphoneLimit(mTier); + musicSource.headphoneBlockRange = BalanceMath.headphoneBlockRange(mTier); + updateEmitterList(); + } + } else if ((!hasMinimumEU || currentlyPlaying != null) && powered) { // was powered, but no longer is + powered = false; + musicSource.modified = true; + musicSource.headphoneLimit = HeadphoneLimit.BLOCK_RANGE; + musicSource.headphoneBlockRange = BalanceMath.headphoneBlockRange(0); + updateEmitterList(); + } + + // check if current disc finished + if (currentlyPlaying != null) { + discProgressMs = now - discStartMs; + final boolean hasValidRecord = doesSlotContainValidRecord(playbackSlot); + final boolean wasDiscSwapped = hasValidRecord + && mInventory[getInputSlot() + playbackSlot].getItem() != currentlyPlaying; + if (discProgressMs >= discDurationMs || !hasValidRecord || wasDiscSwapped) { + stopCurrentSong(now); + if (!loopMode) { + // should be empty, but swap just in case it's not + final ItemStack oldOut = mInventory[getOutputSlot()]; + mInventory[getOutputSlot()] = mInventory[getInputSlot() + playbackSlot]; + mInventory[getInputSlot() + playbackSlot] = oldOut; + markDirty(); + } + if (!(hasValidRecord && wasDiscSwapped)) { + // don't switch slots if someone just put a new disc in the active slot + pickNextSlot(); + } + } else { + // keep on playing + return; + } + } + + if (playbackSlot < 0 || playbackSlot >= INPUT_SLOTS + || ((aTimer % 10) == 0 && !doesSlotContainValidRecord(playbackSlot))) { + pickNextSlot(); + } + + final boolean hasValidRecord = doesSlotContainValidRecord(playbackSlot); + final boolean canStartPlaying = loopMode || isOutputEmpty(); + if (!hasValidRecord) { + stopCurrentSong(now); + } else if (canStartPlaying + && mInventory[getInputSlot() + playbackSlot].getItem() instanceof ItemRecord record) { + final ResourceLocation resource = record.getRecordResource(record.recordName); + currentlyPlaying = record; + musicSource.setRecord( + new ResourceLocation(resource.getResourceDomain(), "records." + resource.getResourcePath())); + // Assume a safe disc duration of 500 seconds if not known in the registry + discDurationMs = GTMusicSystem.getMusicRecordDurations() + .getOrDefault(resource, 500_000); + discProgressMs = 0; + discStartMs = now; + } + } finally { + super.onPostTick(aBaseMetaTileEntity, aTimer); + } + } + + private void stopCurrentSong(long nowMs) { + if (currentlyPlaying == null) { + return; + } + musicSource.setRecord(null); + currentlyPlaying = null; + discDurationMs = 1; + discProgressMs = 0; + discStartMs = nowMs; + markDirty(); + } + + private void pickNextSlot() { + playbackSlot = MathHelper.clamp_int(playbackSlot, 0, INPUT_SLOTS); + if (shuffleMode) { + final int[] validSlots = new int[INPUT_SLOTS]; + int validSlotCount = 0; + for (int i = 0; i < INPUT_SLOTS; i++) { + if (i != playbackSlot && doesSlotContainValidRecord(i)) { + validSlots[validSlotCount++] = i; + } + } + switch (validSlotCount) { + case 0 -> {} + case 1 -> { + playbackSlot = validSlots[0]; + } + default -> { + playbackSlot = validSlots[SHUFFLER.nextInt(validSlotCount)]; + } + } + } else { + int attempt = 0; + int nextSlot = playbackSlot; + do { + attempt++; + nextSlot = (nextSlot + 1) % INPUT_SLOTS; + } while (!doesSlotContainValidRecord(nextSlot) && attempt <= INPUT_SLOTS); + if (attempt <= INPUT_SLOTS) { + playbackSlot = nextSlot; + } + } + } + + public boolean doesSlotContainValidRecord(int slot) { + return mInventory[getInputSlot() + slot] != null + && mInventory[getInputSlot() + slot].getItem() instanceof ItemRecord; + } + + @Override + public void onRemoval() { + final IGregTechTileEntity baseTE = getBaseMetaTileEntity(); + if (baseTE == null) { + return; + } + if (!baseTE.isServerSide()) { + return; + } + if (jukeboxUuid == UNSET_UUID) { + return; + } + GTMusicSystem.ServerSystem.removeMusicSource(jukeboxUuid); + } + + @Override + public long getMinimumStoredEU() { + return BalanceMath.eutUsage(mTier) * 20; + } + + @Override + public long maxEUStore() { + return 512L + BalanceMath.eutUsage(mTier) * 50; + } + + @Override + public long maxAmperesIn() { + return 1; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return null; + } + + public static final String NBTKEY_UUID_LOW = "jukeboxUUIDLow"; + public static final String NBTKEY_UUID_HIGH = "jukeboxUUIDHigh"; + public static final String NBTKEY_LOOP_MODE = "loopMode"; + public static final String NBTKEY_SHUFFLE_MODE = "shuffleMode"; + public static final String NBTKEY_PLAYBACK_SLOT = "playbackSlot"; + public static final String NBTKEY_VOLUME_PLAY = "playbackVolume"; + public static final String NBTKEY_VOLUME_P2P = "p2pVolume"; + public static final String NBTKEY_DISC_PROGRESS_MS = "discProgressMs"; + + @Override + public String[] getInfoData() { + return new String[] { "Jukebox UUID: " + ((jukeboxUuid == UNSET_UUID) ? "unset" : jukeboxUuid), + "Loop mode: " + loopMode, "Shuffle mode: " + shuffleMode, "Played the disc for [ms]: " + discProgressMs, + "Current disc duration [ms]: " + discDurationMs, + "Playback range [blocks]: " + BalanceMath.volumeToAttenuationDistance(playbackVolume), + "P2P range [blocks]: " + BalanceMath.volumeToAttenuationDistance(playbackVolume), + "Raw playback strength: " + playbackVolume, "Raw p2p strength: " + p2pVolume }; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (jukeboxUuid != UNSET_UUID) { + aNBT.setLong(NBTKEY_UUID_LOW, jukeboxUuid.getLeastSignificantBits()); + aNBT.setLong(NBTKEY_UUID_HIGH, jukeboxUuid.getMostSignificantBits()); + aNBT.setBoolean(NBTKEY_LOOP_MODE, loopMode); + aNBT.setBoolean(NBTKEY_SHUFFLE_MODE, shuffleMode); + aNBT.setInteger(NBTKEY_PLAYBACK_SLOT, playbackSlot); + aNBT.setFloat(NBTKEY_VOLUME_PLAY, playbackVolume); + aNBT.setFloat(NBTKEY_VOLUME_P2P, p2pVolume); + aNBT.setLong(NBTKEY_DISC_PROGRESS_MS, discProgressMs); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey(NBTKEY_UUID_LOW, Constants.NBT.TAG_ANY_NUMERIC) + && aNBT.hasKey(NBTKEY_UUID_HIGH, Constants.NBT.TAG_ANY_NUMERIC)) { + jukeboxUuid = new UUID(aNBT.getLong(NBTKEY_UUID_HIGH), aNBT.getLong(NBTKEY_UUID_LOW)); + } + if (aNBT.hasKey(NBTKEY_LOOP_MODE, Constants.NBT.TAG_ANY_NUMERIC)) { + loopMode = aNBT.getBoolean(NBTKEY_LOOP_MODE); + } + if (aNBT.hasKey(NBTKEY_SHUFFLE_MODE, Constants.NBT.TAG_ANY_NUMERIC)) { + shuffleMode = aNBT.getBoolean(NBTKEY_SHUFFLE_MODE); + } + if (aNBT.hasKey(NBTKEY_PLAYBACK_SLOT, Constants.NBT.TAG_ANY_NUMERIC)) { + playbackSlot = aNBT.getInteger(NBTKEY_PLAYBACK_SLOT); + } + if (aNBT.hasKey(NBTKEY_VOLUME_PLAY, Constants.NBT.TAG_ANY_NUMERIC)) { + playbackVolume = aNBT.getFloat(NBTKEY_VOLUME_PLAY); + } + if (aNBT.hasKey(NBTKEY_VOLUME_P2P, Constants.NBT.TAG_ANY_NUMERIC)) { + p2pVolume = aNBT.getFloat(NBTKEY_VOLUME_P2P); + } + if (aNBT.hasKey(NBTKEY_DISC_PROGRESS_MS, Constants.NBT.TAG_ANY_NUMERIC)) { + discProgressMs = aNBT.getLong(NBTKEY_DISC_PROGRESS_MS); + } + + final float maxVolume = BalanceMath.listeningVolume(mTier); + playbackVolume = MathHelper.clamp_float(playbackVolume, 0.0f, maxVolume); + p2pVolume = MathHelper.clamp_float(p2pVolume, 0.0f, maxVolume); + } + + @Override + protected BasicUIProperties getUIProperties() { + return super.getUIProperties().toBuilder() + .itemInputPositionsGetter(count -> UIHelper.getGridPositions(count, 7, 6, 7, 3)) + .itemOutputPositionsGetter(count -> UIHelper.getGridPositions(count, 153, 24, 1)) + .specialItemPositionGetter(() -> new Pos2d(115, 62)) + .progressBarPos(Pos2d.cartesian(133, 24)) + .progressBarTexture(new FallbackableUITexture(GTUITextures.PROGRESSBAR_ARROW)) + .build(); + } + + @Override + protected void addProgressBar(ModularWindow.Builder builder, BasicUIProperties uiProperties) { + builder.widget( + setNEITransferRect( + new ProgressBar().setProgress(() -> discProgressMs / (float) Math.max(1, discDurationMs)) + .setTexture(uiProperties.progressBarTexture.get(), uiProperties.progressBarImageSize) + .setDirection(uiProperties.progressBarDirection) + .setPos(uiProperties.progressBarPos) + .setSize(uiProperties.progressBarSize) + .setUpdateTooltipEveryTick(true) + .attachSyncer( + new FakeSyncWidget.LongSyncer(() -> this.discProgressMs, val -> this.discProgressMs = val), + builder) + .attachSyncer( + new FakeSyncWidget.LongSyncer(() -> this.discDurationMs, val -> this.discDurationMs = val), + builder) + .dynamicTooltip( + () -> Collections.singletonList( + String.format("%,.2f / %,.2f", discProgressMs / 1000.0f, discDurationMs / 1000.0f))), + uiProperties.neiTransferRectId)); + addProgressBarSpecialTextures(builder, uiProperties); + } + + @Override + protected SlotWidget createChargerSlot(int x, int y) { + return super.createChargerSlot(97, 62); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + final BasicUIProperties props = getUIProperties(); + final List inputSlots = props.itemInputPositionsGetter.apply(mInputSlotCount); + // Loop + builder.widget( + new CycleButtonWidget().setToggle(() -> loopMode, val -> loopMode = val) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_CYCLIC) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.betterjukebox.loop.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(153, 6) + .setSize(18, 18)); + // Shuffle + builder.widget(new CycleButtonWidget().setToggle(() -> shuffleMode, val -> { + shuffleMode = val; + if (shuffleMode) { + playbackSlot = -1; + } else { + playbackSlot = 0; + } + }) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_SHUFFLE) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.betterjukebox.shuffle.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(153, 42) + .setSize(18, 18)); + // Currently playing slot highlight using the hotbar active texture + final DrawableWidget slotHighlight = new DrawableWidget(); + builder.widget( + slotHighlight + .setDrawable( + new UITexture( + new ResourceLocation("minecraft", "textures/gui/widgets.png"), + 0.0f, + 22.0f / 256.0f, + 24.0f / 256.0f, + 46.0f / 256.0f)) + .setSize(24, 24) + .attachSyncer(new FakeSyncWidget.IntegerSyncer(() -> this.playbackSlot, val -> { + this.playbackSlot = val; + slotHighlight.checkNeedsRebuild(); + }), builder) + .setPosProvider( + (screenSize, window, parent) -> inputSlots.get(MathHelper.clamp_int(playbackSlot, 0, INPUT_SLOTS)) + .add(-3, -3))); + // Attenuation distance (controls internal "volume") + // Caching tooltip data caches the formatted p2p range value, so we have to use the uncached variant here. + builder.widget( + new SliderWidget() + .setBounds(0.0f, BalanceMath.volumeToAttenuationDistance(BalanceMath.listeningVolume(mTier))) + .setGetter(this::getPlaybackBlockRange) + .setSetter(this::setPlaybackBlockRange) + .dynamicTooltip( + () -> mTooltipCache.getUncachedTooltipData( + "GT5U.machines.betterjukebox.attenuationDistance.tooltip", + (int) getPlaybackBlockRange()).text) + .setUpdateTooltipEveryTick(true) + .setPos(44, 63) + .setSize(52, 8)); + builder.widget( + new SliderWidget() + .setBounds(0.0f, BalanceMath.volumeToAttenuationDistance(BalanceMath.listeningVolume(mTier))) + .setGetter(this::getP2PBlockRange) + .setSetter(this::setP2PBlockRange) + .dynamicTooltip( + () -> mTooltipCache.getUncachedTooltipData( + "GT5U.machines.betterjukebox.p2pAttenuationDistance.tooltip", + (int) getP2PBlockRange()).text) + .setUpdateTooltipEveryTick(true) + .setPos(44, 71) + .setSize(52, 8)); + } + + private float getPlaybackBlockRange() { + return BalanceMath.volumeToAttenuationDistance(playbackVolume); + } + + private float getP2PBlockRange() { + return BalanceMath.volumeToAttenuationDistance(p2pVolume); + } + + private void setPlaybackBlockRange(float blockRange) { + float volume = BalanceMath.attenuationDistanceToVolume(blockRange); + volume = MathHelper.clamp_float(volume, 0.0f, BalanceMath.listeningVolume(mTier)); + if (volume != playbackVolume) { + playbackVolume = volume; + if (getBaseMetaTileEntity().isServerSide()) { + updateEmitterList(); + } + } + } + + private void setP2PBlockRange(float blockRange) { + float volume = BalanceMath.attenuationDistanceToVolume(blockRange); + volume = MathHelper.clamp_float(volume, 0.0f, BalanceMath.listeningVolume(mTier)); + if (volume != p2pVolume) { + p2pVolume = volume; + if (getBaseMetaTileEntity().isServerSide()) { + updateEmitterList(); + } + } + } + + private final EnumMap attachedSoundP2P = new EnumMap<>(ForgeDirection.class); + private final ObjectArrayList combinedOutputsListCache = new ObjectArrayList<>(new PartP2PSound[0]); + + private void updateEmitterList() { + final GTMusicSystem.MusicSource target = musicSource; + if (target == null) { + return; + } + final ObjectArrayList emitters = combinedOutputsListCache; + emitters.clear(); + + attachedSoundP2P.forEach((ignored, p2p) -> { + if (p2p != null) { + try { + p2p.getOutputs() + .forEach(emitters::add); + } catch (GridAccessException e) { + // skip + } + } + }); + + IGregTechTileEntity te = getBaseMetaTileEntity(); + if (te == null) { + return; + } + final Vector4i position = new Vector4i(); + target.resizeEmitterArray(1 + emitters.size()); + position.set(te.getXCoord(), te.getYCoord(), te.getZCoord(), te.getWorld().provider.dimensionId); + final float actualVolume = MathHelper + .clamp_float(playbackVolume, 0.0f, BalanceMath.listeningVolume(powered ? mTier : 0)); + target.setEmitter(0, position, actualVolume); + final float actualP2PVolume = MathHelper + .clamp_float(p2pVolume, 0.0f, powered ? BalanceMath.listeningVolume(mTier) : 0.0f); + for (int i = 0; i < emitters.size(); i++) { + final PartP2PSound p2p = emitters.get(i); + final AENetworkProxy proxy = p2p.getProxy(); + final TileEntity emitterTe = p2p.getTile(); + final ForgeDirection dir = p2p.getSide(); + position.set( + emitterTe.xCoord + dir.offsetX, + emitterTe.yCoord + dir.offsetY, + emitterTe.zCoord + dir.offsetZ, + emitterTe.getWorldObj().provider.dimensionId); + final boolean active = proxy.isActive(); + target.setEmitter(1 + i, position, active ? actualP2PVolume : 0); + } + } + + @Override + public boolean allowSoundProxying(PartP2PSound p2p) { + return false; // the jukebox proxies sounds by itself + } + + @Override + public void onSoundP2PAttach(PartP2PSound p2p) { + attachedSoundP2P.put(p2p.getSide(), p2p); + updateEmitterList(); + } + + @Override + public void onSoundP2PDetach(PartP2PSound p2p) { + attachedSoundP2P.put(p2p.getSide(), null); + updateEmitterList(); + } + + @Override + public void onSoundP2POutputUpdate(PartP2PSound p2p, TunnelCollection outputs) { + updateEmitterList(); + } + +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEBoxinator.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEBoxinator.java new file mode 100644 index 0000000000..43d2d6b295 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEBoxinator.java @@ -0,0 +1,231 @@ +package gregtech.common.tileentities.machines.basic; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.MachineType; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +public class MTEBoxinator extends MTEBasicMachine { + + ItemStack aInputCache; + ItemStack aOutputCache; + int aTypeCache = 0; + + public MTEBoxinator(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, + MachineType.PACKAGER.tooltipDescription(), + 2, + 1, + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_SIDE_BOXINATOR_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/boxinator/OVERLAY_SIDE_BOXINATOR_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_SIDE_BOXINATOR")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_SIDE_BOXINATOR_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_FRONT_BOXINATOR_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/boxinator/OVERLAY_FRONT_BOXINATOR_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_FRONT_BOXINATOR")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_FRONT_BOXINATOR_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_TOP_BOXINATOR_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_TOP_BOXINATOR_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_TOP_BOXINATOR")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_TOP_BOXINATOR_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_BOTTOM_BOXINATOR_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/boxinator/OVERLAY_BOTTOM_BOXINATOR_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_BOTTOM_BOXINATOR")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon("basicmachines/boxinator/OVERLAY_BOTTOM_BOXINATOR_GLOW")) + .glow() + .build())); + } + + public MTEBoxinator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures, 2, 1); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBoxinator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.packagerRecipes; + } + + private boolean hasValidCache(ItemStack mItem, int mType, boolean mClearOnFailure) { + if (aInputCache != null && aOutputCache != null + && aTypeCache == mType + && aInputCache.isItemEqual(mItem) + && ItemStack.areItemStackTagsEqual(mItem, aInputCache)) return true; + // clear cache if it was invalid + if (mClearOnFailure) { + aInputCache = null; + aOutputCache = null; + aTypeCache = 0; + } + return false; + } + + private void cacheItem(ItemStack mInputItem, ItemStack mOutputItem, int mType) { + aTypeCache = mType; + aOutputCache = mOutputItem.copy(); + aInputCache = mInputItem.copy(); + } + + @Override + public int checkRecipe() { + int tCheck = super.checkRecipe(); + if (tCheck != DID_NOT_FIND_RECIPE) { + return tCheck; + } + ItemStack tSlot0 = getInputAt(0); + ItemStack tSlot1 = getInputAt(1); + if ((GTUtility.isStackValid(tSlot0)) && (GTUtility.isStackValid(tSlot1)) + && (GTUtility.getContainerItem(tSlot0, true) == null)) { + if ((ItemList.Schematic_1by1.isStackEqual(tSlot1)) && (tSlot0.stackSize >= 1)) { + boolean tIsCached = hasValidCache(tSlot0, 1, true); + this.mOutputItems[0] = tIsCached ? aOutputCache.copy() : GTModHandler.getRecipeOutput(tSlot0); + if (this.mOutputItems[0] != null) { + if (canOutput(this.mOutputItems[0])) { + tSlot0.stackSize -= 1; + calculateOverclockedNess(30, 16); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + if (!tIsCached) cacheItem(tSlot0, this.mOutputItems[0], 1); + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + } + return DID_NOT_FIND_RECIPE; + } + if ((ItemList.Schematic_2by2.isStackEqual(tSlot1)) && (getInputAt(0).stackSize >= 4)) { + boolean tIsCached = hasValidCache(tSlot0, 2, true); + this.mOutputItems[0] = tIsCached ? aOutputCache.copy() + : GTModHandler.getRecipeOutput(tSlot0, tSlot0, null, tSlot0, tSlot0); + if (this.mOutputItems[0] != null) { + if (canOutput(this.mOutputItems[0])) { + getInputAt(0).stackSize -= 4; + calculateOverclockedNess(30, 32); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + if (!tIsCached) cacheItem(tSlot0, this.mOutputItems[0], 2); + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + } + return DID_NOT_FIND_RECIPE; + } + if ((ItemList.Schematic_3by3.isStackEqual(tSlot1)) && (getInputAt(0).stackSize >= 9)) { + boolean tIsCached = hasValidCache(tSlot0, 3, true); + this.mOutputItems[0] = tIsCached ? aOutputCache.copy() + : GTModHandler + .getRecipeOutput(tSlot0, tSlot0, tSlot0, tSlot0, tSlot0, tSlot0, tSlot0, tSlot0, tSlot0); + if (this.mOutputItems[0] != null) { + if (canOutput(this.mOutputItems[0])) { + getInputAt(0).stackSize -= 9; + calculateOverclockedNess(30, 64); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + if (!tIsCached) cacheItem(tSlot0, this.mOutputItems[0], 3); + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + } + return DID_NOT_FIND_RECIPE; + } + } + return DID_NOT_FIND_RECIPE; + } + + @Override + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (!super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack)) { + return false; + } + ItemStack tInput1 = getInputAt(1); + if ((ItemList.Schematic_1by1.isStackEqual(tInput1)) || (ItemList.Schematic_2by2.isStackEqual(tInput1)) + || (ItemList.Schematic_3by3.isStackEqual(tInput1))) { + if (hasValidCache(aStack, aTypeCache, false)) return true; + if (RecipeMaps.packagerRecipes.findRecipe( + getBaseMetaTileEntity(), + true, + GTValues.V[mTier], + null, + GTUtility.copyAmount(64, aStack), + tInput1) != null) { + return true; + } + if (ItemList.Schematic_1by1.isStackEqual(getInputAt(1)) && GTModHandler.getRecipeOutput(aStack) != null) + return true; + if (ItemList.Schematic_2by2.isStackEqual(getInputAt(1)) + && GTModHandler.getRecipeOutput(aStack, aStack, null, aStack, aStack) != null) { + return true; + } + return ItemList.Schematic_3by3.isStackEqual(getInputAt(1)) + && (GTModHandler.getRecipeOutput(aStack, aStack, aStack, aStack, aStack, aStack, aStack, aStack, aStack) + != null); + } else { + return RecipeMaps.packagerRecipes.containsInput(aStack); + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTECharger.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTECharger.java new file mode 100644 index 0000000000..52c15cc6df --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTECharger.java @@ -0,0 +1,107 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.V; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicBatteryBuffer; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +public class MTECharger extends MTEBasicBatteryBuffer { + + public MTECharger(int aID, String aName, String aNameRegional, int aTier, String aDescription, int aSlotCount) { + super(aID, aName, aNameRegional, aTier, aDescription, aSlotCount); + } + + public MTECharger(String aName, int aTier, String aDescription, ITexture[][][] aTextures, int aSlotCount) { + super(aName, aTier, aDescription, aTextures, aSlotCount); + } + + public MTECharger(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, int aSlotCount) { + super(aName, aTier, aDescription, aTextures, aSlotCount); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTECharger(mName, mTier, mDescriptionArray, mTextures, mInventory.length); + } + + @Override + public long getMinimumStoredEU() { + return V[mTier] * 64L * mInventory.length; + } + + @Override + public long maxEUStore() { + return V[mTier] * 256L * mInventory.length; + } + + @Override + public long maxAmperesIn() { + return Math.max(mChargeableCount * 8L, 4L); + } + + @Override + public long maxAmperesOut() { + return Math.max(mBatteryCount * 4L, 2L); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (this.getBaseMetaTileEntity() instanceof BaseMetaTileEntity) { + BaseMetaTileEntity mBaseMetaTileEntity = (BaseMetaTileEntity) getBaseMetaTileEntity(); + if (mBaseMetaTileEntity.getMetaTileEntity() instanceof MetaTileEntity mMetaTileEntity) { + // for (int t = 0; t < 6; t++) { + if (mMetaTileEntity.dechargerSlotCount() > 0 + && mBaseMetaTileEntity.getStoredEU() < mBaseMetaTileEntity.getEUCapacity()) { + for (int i = mMetaTileEntity.dechargerSlotStartIndex(), + k = mMetaTileEntity.dechargerSlotCount() + i; i < k; i++) { + if (mMetaTileEntity.mInventory[i] != null + && mBaseMetaTileEntity.getStoredEU() < mBaseMetaTileEntity.getEUCapacity()) { + mBaseMetaTileEntity.increaseStoredEnergyUnits( + GTModHandler.dischargeElectricItem( + mMetaTileEntity.mInventory[i], + GTUtility.safeInt( + Math.min( + V[mTier] * 15, + mBaseMetaTileEntity.getEUCapacity() + - mBaseMetaTileEntity.getStoredEU())), + (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getInputTier()), + true, + false, + false), + true); + if (mMetaTileEntity.mInventory[i].stackSize <= 0) mMetaTileEntity.mInventory[i] = null; + } + } + } + if (mMetaTileEntity.rechargerSlotCount() > 0 && mBaseMetaTileEntity.getStoredEU() > 0) { + for (int i = mMetaTileEntity.rechargerSlotStartIndex(), + k = mMetaTileEntity.rechargerSlotCount() + i; i < k; i++) { + if (mBaseMetaTileEntity.getStoredEU() > 0 && mMetaTileEntity.mInventory[i] != null) { + mBaseMetaTileEntity + .decreaseStoredEU( + GTModHandler.chargeElectricItem( + mMetaTileEntity.mInventory[i], + GTUtility + .safeInt(Math.min(V[mTier] * 15, mBaseMetaTileEntity.getStoredEU())), + (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getOutputTier()), + true, + false), + true); + if (mMetaTileEntity.mInventory[i].stackSize <= 0) mMetaTileEntity.mInventory[i] = null; + } + } + // } + } + } + } + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEIndustrialApiary.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEIndustrialApiary.java new file mode 100644 index 0000000000..f43c8d0a5e --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEIndustrialApiary.java @@ -0,0 +1,1554 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.AuthorKuba; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_INDUSTRIAL_APIARY; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_INDUSTRIAL_APIARY_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_INDUSTRIAL_APIARY_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_INDUSTRIAL_APIARY_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_APIARY; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_APIARY_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_APIARY_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_APIARY_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_INDUSTRIAL_APIARY; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_INDUSTRIAL_APIARY_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_INDUSTRIAL_APIARY_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_INDUSTRIAL_APIARY_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_INDUSTRIAL_APIARY; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_INDUSTRIAL_APIARY_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_INDUSTRIAL_APIARY_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_INDUSTRIAL_APIARY_GLOW; +import static gregtech.api.metatileentity.BaseTileEntity.STALLED_STUTTERING_TOOLTIP; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTUtility.moveMultipleItemStacks; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.collect.ImmutableSet; +import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularUIContext; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.builder.UIInfo; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.mojang.authlib.GameProfile; + +import forestry.api.apiculture.BeeManager; +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.apiculture.EnumBeeType; +import forestry.api.apiculture.FlowerManager; +import forestry.api.apiculture.IAlleleBeeAcceleratableEffect; +import forestry.api.apiculture.IAlleleBeeEffect; +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.apiculture.IApiaristTracker; +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeHousingInventory; +import forestry.api.apiculture.IBeeListener; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.apiculture.IBeeRoot; +import forestry.api.apiculture.IBeekeepingLogic; +import forestry.api.apiculture.IBeekeepingMode; +import forestry.api.arboriculture.EnumGermlingType; +import forestry.api.core.BiomeHelper; +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; +import forestry.api.core.ForestryAPI; +import forestry.api.core.IErrorLogic; +import forestry.api.core.IErrorState; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IEffectData; +import forestry.api.genetics.IIndividual; +import forestry.apiculture.genetics.Bee; +import forestry.apiculture.genetics.alleles.AlleleEffectThrottled; +import forestry.core.errors.EnumErrorCode; +import forestry.plugins.PluginApiculture; +import gregtech.GTMod; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.recipe.BasicUIProperties; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTApiaryModifier; +import gregtech.api.util.GTApiaryUpgrade; +import gregtech.api.util.GTUtility; +import gregtech.common.GTClient; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEIndustrialApiary extends MTEBasicMachine + implements IBeeHousing, IBeeHousingInventory, IErrorLogic, IBeeModifier, IBeeListener, IAddUIWidgets { + + public static final int beeCycleLength = 550; + public static final int baseEUtUsage = 37; + private static final int queen = 5; + private static final int drone = 6; + private static final int upgradeSlot = drone + 1; + private static final int upgradeSlotCount = 4; + private static Field AlleleBeeEffectThrottledField; + + final IBeeRoot beeRoot = (IBeeRoot) AlleleManager.alleleRegistry.getSpeciesRoot("rootBees"); + + public int mSpeed = 0; + public boolean mLockedSpeed = true; + public boolean mAutoQueen = true; + + private ItemStack usedQueen = null; + private IBee usedQueenBee = null; + private IEffectData[] effectData = new IEffectData[2]; + + public MTEIndustrialApiary(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 4, + new String[] { "BEES GOES BRRRR", EnumChatFormatting.GRAY + AuthorKuba, + "Effective production chance as a percent is", "2.8 * b^0.52 * (p + t)^0.52 * s^0.37", + "where b is the base production chance as a percent,", + "p is the production modifier (2 w/o upgrades, or 4 * 1.2^n with n production upgrades),", + "t is 8 for the industrial apiary, and", "s is the speed value for the bee", + "Outputs are generated at the end of every bee tick (...)", + "Primary outputs are rolled once with base chance, once with half base" }, + 6, + 9, + TextureFactory.of( + TextureFactory.of(OVERLAY_SIDE_INDUSTRIAL_APIARY_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_INDUSTRIAL_APIARY_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_SIDE_INDUSTRIAL_APIARY), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_INDUSTRIAL_APIARY_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_FRONT_INDUSTRIAL_APIARY_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_INDUSTRIAL_APIARY_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_FRONT_INDUSTRIAL_APIARY), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_INDUSTRIAL_APIARY_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_INDUSTRIAL_APIARY_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_INDUSTRIAL_APIARY_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_INDUSTRIAL_APIARY), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_INDUSTRIAL_APIARY_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_BOTTOM_INDUSTRIAL_APIARY_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_INDUSTRIAL_APIARY_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_BOTTOM_INDUSTRIAL_APIARY), + TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_INDUSTRIAL_APIARY_GLOW) + .glow() + .build())); + } + + public MTEIndustrialApiary(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures, 6, 9); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEIndustrialApiary(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) return true; + if (!GTMod.gregtechproxy.mForceFreeFace) { + openGUI(aBaseMetaTileEntity, aPlayer); + return true; + } + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (aBaseMetaTileEntity.getAirAtSide(side)) { + openGUI(aBaseMetaTileEntity, aPlayer); + return true; + } + } + GTUtility.sendChatToPlayer(aPlayer, "No free Side!"); + return true; + } + + private void openGUI(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + IndustrialApiaryUI.open( + aPlayer, + aBaseMetaTileEntity.getWorld(), + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mSpeed", mSpeed); + aNBT.setBoolean("mLockedSpeed", mLockedSpeed); + aNBT.setBoolean("mAutoQueen", mAutoQueen); + if (usedQueen != null) aNBT.setTag("usedQueen", usedQueen.writeToNBT(new NBTTagCompound())); + aNBT.setBoolean("retrievingPollenInThisOperation", retrievingPollenInThisOperation); + aNBT.setInteger("pollinationDelay", pollinationDelay); + aNBT.setFloat("usedBeeLife", usedBeeLife); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mSpeed = aNBT.getInteger("mSpeed"); + mLockedSpeed = aNBT.getBoolean("mLockedSpeed"); + if (aNBT.hasKey("mAutoQueen")) mAutoQueen = aNBT.getBoolean("mAutoQueen"); + if (aNBT.hasKey("usedQueen")) usedQueen = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("usedQueen")); + retrievingPollenInThisOperation = aNBT.getBoolean("retrievingPollenInThisOperation"); + pollinationDelay = aNBT.getInteger("pollinationDelay"); + usedBeeLife = aNBT.getFloat("usedBeeLife"); + } + + boolean retrievingPollenInThisOperation = false; + IIndividual retrievedpollen = null; + int pollinationDelay = 100; + float usedBeeLife = 0f; + + @Override + public int checkRecipe() { + updateModifiers(); + if (canWork()) { + + final ItemStack queen = getQueen(); + usedQueen = queen.copy(); + if (beeRoot.getType(queen) == EnumBeeType.QUEEN) { + final IBee bee = beeRoot.getMember(queen); + usedQueenBee = bee; + + // LIFE CYCLES + + float mod = this.getLifespanModifier(null, null, 1.f); + final IBeekeepingMode mode = beeRoot.getBeekeepingMode(this.getWorld()); + final IBeeModifier beemodifier = mode.getBeeModifier(); + mod *= beemodifier.getLifespanModifier(null, null, 1.f); + final int h = bee.getHealth(); + mod = 1.f / mod; + final float cycles = h / mod; + + // PRODUCTS + + final HashMap pollen = new HashMap<>(); + + if (isRetrievingPollen && floweringMod > 0f) { + final int icycles = (int) cycles + + (getWorld().rand.nextFloat() < (cycles - (float) ((int) cycles)) ? 1 : 0); + for (int z = 0; z < icycles; z++) { + final IIndividual p = bee.retrievePollen(this); + if (p != null) { + final ItemStack s = p.getGenome() + .getSpeciesRoot() + .getMemberStack(p, EnumGermlingType.POLLEN.ordinal()); + if (s != null) { + final GTUtility.ItemId id = GTUtility.ItemId.createNoCopy(s); + pollen.computeIfAbsent(id, k -> { + final ItemStack ns = s.copy(); + ns.stackSize = 0; + return ns; + }); + pollen.get(id).stackSize += s.stackSize; + } + } + } + } + + retrievedpollen = null; + retrievingPollenInThisOperation = isRetrievingPollen; + + final IBeeGenome genome = bee.getGenome(); + final IAlleleBeeSpecies primary = genome.getPrimary(); + final IAlleleBeeSpecies secondary = genome.getSecondary(); + + final float speed = genome.getSpeed(); + final float prodMod = getProductionModifier(null, 0f) + beemodifier.getProductionModifier(null, 0f); + + final HashMap drops = new HashMap<>(); + final HashMap dropstacks = new HashMap<>(); + + for (Map.Entry entry : primary.getProductChances() + .entrySet()) { + final GTUtility.ItemId id = GTUtility.ItemId.createNoCopy(entry.getKey()); + drops.merge( + id, + Bee.getFinalChance(entry.getValue(), speed, prodMod, 8f) * (float) entry.getKey().stackSize + * cycles, + Float::sum); + dropstacks.computeIfAbsent(id, k -> entry.getKey()); + } + for (Map.Entry entry : secondary.getProductChances() + .entrySet()) { + final GTUtility.ItemId id = GTUtility.ItemId.createNoCopy(entry.getKey()); + drops.merge( + id, + Bee.getFinalChance(entry.getValue() / 2f, speed, prodMod, 8f) * (float) entry.getKey().stackSize + * cycles, + Float::sum); + dropstacks.computeIfAbsent(id, k -> entry.getKey()); + } + if (primary.isJubilant(genome, this) && secondary.isJubilant(genome, this)) + for (Map.Entry entry : primary.getSpecialtyChances() + .entrySet()) { + final GTUtility.ItemId id = GTUtility.ItemId.createNoCopy(entry.getKey()); + drops.merge( + id, + Bee.getFinalChance(entry.getValue(), speed, prodMod, 8f) + * (float) entry.getKey().stackSize + * cycles, + Float::sum); + dropstacks.computeIfAbsent(id, k -> entry.getKey()); + } + + int i = 0; + final int imax = mOutputItems.length; + + final IApiaristTracker breedingTracker = beeRoot.getBreedingTracker(getWorld(), getOwner()); + + if (!bee.canSpawn()) { + final ItemStack convert = new ItemStack(PluginApiculture.items.beePrincessGE); + final NBTTagCompound nbttagcompound = new NBTTagCompound(); + queen.writeToNBT(nbttagcompound); + convert.setTagCompound(nbttagcompound); + this.mOutputItems[i++] = convert; + } else { + final IBee b = bee.spawnPrincess(this); + if (b != null) { + final ItemStack princess = beeRoot.getMemberStack(b, EnumBeeType.PRINCESS.ordinal()); + breedingTracker.registerPrincess(b); + this.mOutputItems[i++] = princess; + } + final IBee[] d = bee.spawnDrones(this); + if (d != null && d.length > 0) { + final HashMap drones = new HashMap<>(d.length); + for (IBee dr : d) { + final ItemStack drone = beeRoot.getMemberStack(dr, EnumBeeType.DRONE.ordinal()); + breedingTracker.registerDrone(dr); + final GTUtility.ItemId drid = GTUtility.ItemId.createNoCopy(drone); + if (drones.containsKey(drid)) drones.get(drid).stackSize += drone.stackSize; + else { + this.mOutputItems[i++] = drone; + drones.put(drid, drone); + } + } + } + } + + final int imin = i; + + setQueen(null); + + for (Map.Entry entry : drops.entrySet()) { + final ItemStack s = dropstacks.get(entry.getKey()) + .copy(); + s.stackSize = entry.getValue() + .intValue() + + (getWorld().rand.nextFloat() < (entry.getValue() - (float) entry.getValue() + .intValue()) ? 1 : 0); + if (s.stackSize > 0 && i < imax) while (true) { + if (s.stackSize <= s.getMaxStackSize()) { + this.mOutputItems[i++] = s; + break; + } else this.mOutputItems[i++] = s.splitStack(s.getMaxStackSize()); + if (i >= imax) break; + } + } + + for (ItemStack s : pollen.values()) if (i < imax) this.mOutputItems[i++] = s; + else break; + + // Overclock + + usedBeeLife = cycles * (float) beeCycleLength; + this.mMaxProgresstime = (int) usedBeeLife; + final int timemaxdivider = this.mMaxProgresstime / 100; + final int useddivider = 1 << this.mSpeed; + int actualdivider = useddivider; + this.mMaxProgresstime /= Math.min(actualdivider, timemaxdivider); + actualdivider /= Math.min(actualdivider, timemaxdivider); + for (i--; i >= imin; i--) this.mOutputItems[i].stackSize *= actualdivider; + + pollinationDelay = Math.max((int) (this.mMaxProgresstime / cycles), 20); // don't run too often + + this.mProgresstime = 0; + this.mEUt = (int) ((float) baseEUtUsage * this.energyMod * useddivider); + if (useddivider == 2) this.mEUt += 32; + else if (useddivider > 2) this.mEUt += (32 * (useddivider << (this.mSpeed - 2))); + } else { + // Breeding time + + retrievingPollenInThisOperation = true; // Don't pollinate when breeding + + this.mMaxProgresstime = 100; + this.mProgresstime = 0; + final int useddivider = Math.min(100, 1 << this.mSpeed); + this.mMaxProgresstime /= useddivider; + this.mEUt = (int) ((float) baseEUtUsage * this.energyMod * useddivider); + if (useddivider == 2) this.mEUt += 32; + else if (useddivider > 2) this.mEUt += (32 * (useddivider << (this.mSpeed - 2))); + + final IBee princess = beeRoot.getMember(getQueen()); + usedQueenBee = princess; + final IBee drone = beeRoot.getMember(getDrone()); + princess.mate(drone); + final NBTTagCompound nbttagcompound = new NBTTagCompound(); + princess.writeToNBT(nbttagcompound); + this.mOutputItems[0] = new ItemStack(PluginApiculture.items.beeQueenGE); + this.mOutputItems[0].setTagCompound(nbttagcompound); + beeRoot.getBreedingTracker(getWorld(), getOwner()) + .registerQueen(princess); + + setQueen(null); + getDrone().stackSize -= 1; + if (getDrone().stackSize == 0) setDrone(null); + } + + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + + return DID_NOT_FIND_RECIPE; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + updateModifiers(); + } + + @Override + protected boolean hasEnoughEnergyToCheckRecipe() { + return getBaseMetaTileEntity().isUniversalEnergyStored(V[mSpeed] * 8L); + } + + @Override + public long maxAmperesIn() { + return 4L; + } + + private void doEffect() { + final IBeeGenome genome = usedQueenBee.getGenome(); + final IAlleleBeeEffect effect = genome.getEffect(); + if (!(effect instanceof IAlleleBeeAcceleratableEffect)) { + effectData[0] = effect.validateStorage(effectData[0]); + effect.doEffect(genome, effectData[0], this); + } + + if (!effect.isCombinable()) return; + + final IAlleleBeeEffect secondary = (IAlleleBeeEffect) genome.getInactiveAllele(EnumBeeChromosome.EFFECT); + if (!secondary.isCombinable()) return; + + if (!(secondary instanceof IAlleleBeeAcceleratableEffect)) { + effectData[1] = secondary.validateStorage(effectData[1]); + secondary.doEffect(genome, effectData[1], this); + } + } + + private void doAcceleratedEffects() { + final IBeeGenome genome = usedQueenBee.getGenome(); + final IAlleleBeeEffect effect = genome.getEffect(); + try { + if (AlleleBeeEffectThrottledField == null) { + AlleleBeeEffectThrottledField = AlleleEffectThrottled.class.getDeclaredField("throttle"); + AlleleBeeEffectThrottledField.setAccessible(true); + } + if (effect instanceof IAlleleBeeAcceleratableEffect) { + effectData[0] = effect.validateStorage(effectData[0]); + effectData[0] = ((IAlleleBeeAcceleratableEffect) effect).doEffectAccelerated( + genome, + effectData[0], + this, + usedBeeLife / (effect instanceof AlleleEffectThrottled + ? (float) AlleleBeeEffectThrottledField.getInt(effect) + : 1f)); + } + + if (!effect.isCombinable()) return; + + final IAlleleBeeEffect secondary = (IAlleleBeeEffect) genome.getInactiveAllele(EnumBeeChromosome.EFFECT); + if (!secondary.isCombinable()) return; + + if (secondary instanceof IAlleleBeeAcceleratableEffect) { + effectData[1] = secondary.validateStorage(effectData[1]); + effectData[1] = ((IAlleleBeeAcceleratableEffect) secondary).doEffectAccelerated( + genome, + effectData[0], + this, + usedBeeLife / (secondary instanceof AlleleEffectThrottled + ? (float) AlleleBeeEffectThrottledField.getInt(secondary) + : 1f)); + } + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isClientSide()) { + if (GTClient.changeDetected == 4) { + /* + * Client tick counter that is set to 5 on hiding pipes and covers. It triggers a texture update next + * client tick when reaching 4, with provision for 3 more update tasks, spreading client change + * detection related work and network traffic on different ticks, until it reaches 0. + */ + aBaseMetaTileEntity.issueTextureUpdate(); + } + if (aBaseMetaTileEntity.isActive()) { + if (usedQueen != null) { + if (aTick % 2 == 0) { + // FX on client, effect on server + final IBee bee = beeRoot.getMember(usedQueen); + effectData = bee.doFX(effectData, this); + } + } + } + } + if (aBaseMetaTileEntity.isServerSide()) { + + mCharge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3; + mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3; + + doDisplayThings(); + + if (!aBaseMetaTileEntity.isActive()) { + if (aBaseMetaTileEntity.isAllowedToWork() + && (aBaseMetaTileEntity.hasInventoryBeenModified() || aTick % 600 == 0 + || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) + && hasEnoughEnergyToCheckRecipe()) { + final int check = checkRecipe(); + if (check == FOUND_AND_SUCCESSFULLY_USED_RECIPE) { + aBaseMetaTileEntity.setActive(true); + } + } + } else { + + if (this.mProgresstime < 0) { + this.mProgresstime++; + return; + } + if (this.mStuttering) { + if (!aBaseMetaTileEntity.isAllowedToWork()) return; + if (aTick % 100 == 0) this.mStuttering = false; + return; + } + if (this.hasErrors()) { + if (!aBaseMetaTileEntity.isAllowedToWork()) return; + if (aTick % 100 == 0) if (!canWork(usedQueen)) this.stutterProcess(); + return; + } + + if (!drainEnergyForProcess(this.mEUt)) { + this.mStuttering = true; + this.stutterProcess(); + return; + } + this.mProgresstime++; + if (usedQueen != null) { + if (usedQueenBee == null) usedQueenBee = beeRoot.getMember(usedQueen); + doEffect(); + if (!retrievingPollenInThisOperation && floweringMod > 0f + && this.mProgresstime % pollinationDelay == 0) { + if (retrievedpollen == null) retrievedpollen = usedQueenBee.retrievePollen(this); + if (retrievedpollen != null && (usedQueenBee.pollinateRandom(this, retrievedpollen) + || this.mProgresstime % (pollinationDelay * 5) == 0)) retrievedpollen = null; + } + } + + if (this.mProgresstime % 100 == 0) { + if (!canWork(usedQueen)) { + this.stutterProcess(); + return; + } + } + + if (this.mProgresstime >= this.mMaxProgresstime) { + if (usedQueenBee != null) doAcceleratedEffects(); + updateModifiers(); + for (int i = 0; i < mOutputItems.length; i++) + if (mOutputItems[i] != null) for (int j = 0; j < mOutputItems.length; j++) { + if (j == 0 && isAutomated) { + if (beeRoot.isMember(mOutputItems[i], EnumBeeType.QUEEN.ordinal()) + || beeRoot.isMember(mOutputItems[i], EnumBeeType.PRINCESS.ordinal())) { + if (aBaseMetaTileEntity.addStackToSlot(queen, mOutputItems[i])) break; + } else if (beeRoot.isMember(mOutputItems[i], EnumBeeType.DRONE.ordinal())) + if (aBaseMetaTileEntity.addStackToSlot(drone, mOutputItems[i])) break; + } else if (mAutoQueen && i == 0 + && j == 0 + && beeRoot.isMember(mOutputItems[0], EnumBeeType.QUEEN.ordinal()) + && aBaseMetaTileEntity.addStackToSlot(queen, mOutputItems[0])) break; + if (aBaseMetaTileEntity + .addStackToSlot(getOutputSlot() + ((j + i) % mOutputItems.length), mOutputItems[i])) + break; + } + Arrays.fill(mOutputItems, null); + mEUt = 0; + mProgresstime = 0; + mMaxProgresstime = 0; + mStuttering = false; + aBaseMetaTileEntity.setActive(false); + + if (doesAutoOutput() && !isOutputEmpty() && aBaseMetaTileEntity.getFrontFacing() != mMainFacing) { + final TileEntity tTileEntity2 = aBaseMetaTileEntity + .getTileEntityAtSide(aBaseMetaTileEntity.getFrontFacing()); + final long tStoredEnergy = aBaseMetaTileEntity.getUniversalEnergyStored(); + int tMaxStacks = (int) (tStoredEnergy / 64L); + if (tMaxStacks > mOutputItems.length) tMaxStacks = mOutputItems.length; + + moveMultipleItemStacks( + aBaseMetaTileEntity, + tTileEntity2, + aBaseMetaTileEntity.getFrontFacing(), + aBaseMetaTileEntity.getBackFacing(), + null, + false, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1, + tMaxStacks); + } + + if (aBaseMetaTileEntity.isAllowedToWork() && checkRecipe() == FOUND_AND_SUCCESSFULLY_USED_RECIPE) + aBaseMetaTileEntity.setActive(true); + } + } + } + } + + public void cancelProcess() { + if (this.getBaseMetaTileEntity() + .isActive() + && this.getBaseMetaTileEntity() + .isServerSide() + && usedQueen != null + && beeRoot.isMember(usedQueen, EnumBeeType.QUEEN.ordinal())) { + Arrays.fill(mOutputItems, null); + mEUt = 0; + mProgresstime = 0; + mMaxProgresstime = 0; + mStuttering = false; + this.getBaseMetaTileEntity() + .setActive(false); + setQueen(usedQueen); + this.getBaseMetaTileEntity() + .disableWorking(); + } + } + + @Override + public boolean isItemValidForSlot(int aIndex, ItemStack aStack) { + if (aStack == null) return false; + if (aIndex < getInputSlot()) return true; + if (aIndex == queen) return beeRoot.isMember(aStack, EnumBeeType.QUEEN.ordinal()) + || beeRoot.isMember(aStack, EnumBeeType.PRINCESS.ordinal()); + else if (aIndex == drone) return beeRoot.isMember(aStack, EnumBeeType.DRONE.ordinal()); + else if (aIndex < getOutputSlot()) { + if (!GTApiaryUpgrade.isUpgrade(aStack)) return false; + for (int i = upgradeSlot; i < upgradeSlot + upgradeSlotCount; i++) { + if (aIndex == i) continue; + final ItemStack s = getStackInSlot(i); + if (s == null) continue; + if (GTUtility.areStacksEqual(getStackInSlot(i), aStack)) return false; + if (GTApiaryUpgrade.isUpgrade(aStack)) { + if (!GTApiaryUpgrade.getUpgrade(aStack) + .isAllowedToWorkWith(getStackInSlot(i))) return false; + } else if (GTApiaryUpgrade.isUpgrade(s)) { + if (!GTApiaryUpgrade.getUpgrade(s) + .isAllowedToWorkWith(aStack)) return false; + } + } + return true; + } else return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (!super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack)) return false; + return isItemValidForSlot(aIndex, aStack); + } + + @Override + public void setInventorySlotContents(int aIndex, ItemStack aStack) { + if (aIndex == queen && aStack != null && getBaseMetaTileEntity().isClientSide()) usedQueen = aStack.copy(); + super.setInventorySlotContents(aIndex, aStack); + } + + // Gets called on slot click // + public void onInventoryUpdate(int aIndex) { + if (aIndex > drone && aIndex < getOutputSlot()) updateModifiers(); + } + + public ItemStack getUsedQueen() { + return usedQueen; + } + + // region IBeeHousing + + @Override + public Iterable getBeeModifiers() { + return Collections.singletonList(this); + } + + @Override + public Iterable getBeeListeners() { + return Collections.singletonList(this); + } + + @Override + public IBeeHousingInventory getBeeInventory() { + return this; + } + + @Override + public IBeekeepingLogic getBeekeepingLogic() { + return dummylogic; + } + + @Override + public int getBlockLightValue() { + return this.getBaseMetaTileEntity() + .getLightLevelAtSide(ForgeDirection.UP); + } + + @Override + public boolean canBlockSeeTheSky() { + return this.getBaseMetaTileEntity() + .getSkyAtSide(ForgeDirection.UP); + } + + @Override + public World getWorld() { + return this.getBaseMetaTileEntity() + .getWorld(); + } + + GameProfile owner = null; + + @Override + public GameProfile getOwner() { + if (owner == null) owner = new GameProfile( + this.getBaseMetaTileEntity() + .getOwnerUuid(), + this.getBaseMetaTileEntity() + .getOwnerName()); + return owner; + } + + @Override + public Vec3 getBeeFXCoordinates() { + return Vec3.createVectorHelper( + getBaseMetaTileEntity().getXCoord() + 0.5, + getBaseMetaTileEntity().getYCoord() + 0.5, + getBaseMetaTileEntity().getZCoord() + 0.5); + } + + @Override + public BiomeGenBase getBiome() { + if (biomeOverride == null) return this.getBaseMetaTileEntity() + .getBiome(); + return biomeOverride; + } + + @Override + public EnumTemperature getTemperature() { + if (BiomeHelper.isBiomeHellish(getBiome())) return EnumTemperature.HELLISH; + return EnumTemperature.getFromValue(getBiome().temperature + temperatureMod); + } + + @Override + public EnumHumidity getHumidity() { + return EnumHumidity.getFromValue(getBiome().rainfall + humidityMod); + } + + @Override + public IErrorLogic getErrorLogic() { + return this; + } + + @Override + public ChunkCoordinates getCoordinates() { + return this.getBaseMetaTileEntity() + .getCoords(); + } + + // endregion + + // region IBeeHousingInventory + @Override + public ItemStack getQueen() { + return getStackInSlot(queen); + } + + @Override + public ItemStack getDrone() { + return getStackInSlot(drone); + } + + @Override + public void setQueen(ItemStack itemStack) { + setInventorySlotContents(queen, itemStack); + } + + @Override + public void setDrone(ItemStack itemStack) { + setInventorySlotContents(drone, itemStack); + } + + @Override + public boolean addProduct(ItemStack itemStack, boolean b) { + throw new RuntimeException("Should not happen :F"); + } + // endregion + + // region IErrorLogic + + public HashSet mErrorStates = new HashSet<>(); + + @Override + public boolean setCondition(boolean b, IErrorState iErrorState) { + if (b) mErrorStates.add(iErrorState); + else mErrorStates.remove(iErrorState); + return b; + } + + @Override + public boolean contains(IErrorState iErrorState) { + return mErrorStates.contains(iErrorState); + } + + @Override + public boolean hasErrors() { + return !mErrorStates.isEmpty(); + } + + @Override + public void clearErrors() { + mErrorStates.clear(); + } + + @Override + public void writeData(DataOutputStream dataOutputStream) throws IOException { + dataOutputStream.write(mErrorStates.size()); + for (IErrorState s : mErrorStates) dataOutputStream.writeUTF(s.getUniqueName()); + } + + @Override + public void readData(DataInputStream dataInputStream) throws IOException { + for (int i = dataInputStream.readInt(); i > 0; i--) + mErrorStates.add(ForestryAPI.errorStateRegistry.getErrorState(dataInputStream.readUTF())); + } + + @Override + public ImmutableSet getErrorStates() { + return ImmutableSet.copyOf(mErrorStates); + } + + private String flowerType = ""; + private ChunkCoordinates flowercoords = null; + private Block flowerBlock; + private int flowerBlockMeta; + + private boolean checkFlower(IBee bee) { + final String flowerType = bee.getGenome() + .getFlowerProvider() + .getFlowerType(); + if (!this.flowerType.equals(flowerType)) flowercoords = null; + if (flowercoords != null) { + if (getWorld().getBlock(flowercoords.posX, flowercoords.posY, flowercoords.posZ) != flowerBlock + || getWorld().getBlockMetadata(flowercoords.posX, flowercoords.posY, flowercoords.posZ) + != flowerBlockMeta) + if (!FlowerManager.flowerRegistry + .isAcceptedFlower(flowerType, getWorld(), flowercoords.posX, flowercoords.posY, flowercoords.posZ)) + flowercoords = null; + else { + flowerBlock = getWorld().getBlock(flowercoords.posX, flowercoords.posY, flowercoords.posZ); + flowerBlockMeta = getWorld() + .getBlockMetadata(flowercoords.posX, flowercoords.posY, flowercoords.posZ); + } + } + if (flowercoords == null) { + flowercoords = FlowerManager.flowerRegistry.getAcceptedFlowerCoordinates(this, bee, flowerType); + if (flowercoords != null) { + flowerBlock = getWorld().getBlock(flowercoords.posX, flowercoords.posY, flowercoords.posZ); + flowerBlockMeta = getWorld().getBlockMetadata(flowercoords.posX, flowercoords.posY, flowercoords.posZ); + this.flowerType = flowerType; + } + } + return flowercoords != null; + } + + private boolean canWork(ItemStack queen) { + clearErrors(); + if (queen == null) return true; // Reloaded the chunk ? + if (beeRoot.isMember(queen, EnumBeeType.PRINCESS.ordinal())) return true; + final IBee bee = beeRoot.getMember(queen); + for (IErrorState err : bee.getCanWork(this)) setCondition(true, err); + setCondition(!checkFlower(bee), EnumErrorCode.NO_FLOWER); + return !hasErrors(); + } + + private boolean canWork() { + clearErrors(); + final EnumBeeType beeType = beeRoot.getType(getQueen()); + if (beeType == EnumBeeType.PRINCESS) { + setCondition(!beeRoot.isDrone(getDrone()), EnumErrorCode.NO_DRONE); + return !hasErrors(); + } + if (beeType == EnumBeeType.QUEEN) { + final IBee bee = beeRoot.getMember(getQueen()); + for (IErrorState err : bee.getCanWork(this)) setCondition(true, err); + setCondition(!checkFlower(bee), EnumErrorCode.NO_FLOWER); + return !hasErrors(); + } else { + setCondition(true, EnumErrorCode.NO_QUEEN); + return false; + } + } + + // endregion + + // region IBeeModifier + + private float terrorityMod = 1f; + private float mutationMod = 1f; + private float lifespanMod = 1f; + private float productionMod = 2f; + private float floweringMod = 1f; + private float geneticDecayMod = 1f; + private float energyMod = 1f; + private boolean sealedMod = false; + private boolean selfLightedMod = false; + private boolean selfUnlightedMod = false; + private boolean sunlightSimulatedMod = false; + private BiomeGenBase biomeOverride = null; + private float humidityMod = 0f; + private float temperatureMod = 0f; + private boolean isAutomated = false; + private boolean isRetrievingPollen = false; + private int maxspeed = 0; + + public void updateModifiers() { + final GTApiaryModifier mods = new GTApiaryModifier(); + for (int i = 0; i < upgradeSlotCount; i++) { + final ItemStack s = getStackInSlot(upgradeSlot + i); + if (s == null) continue; + if (GTApiaryUpgrade.isUpgrade(s)) { + final GTApiaryUpgrade upgrade = GTApiaryUpgrade.getUpgrade(s); + upgrade.applyModifiers(mods, s); + } + } + + terrorityMod = mods.territory; + mutationMod = mods.mutation; + lifespanMod = mods.lifespan; + productionMod = mods.production; + floweringMod = mods.flowering; + geneticDecayMod = mods.geneticDecay; + energyMod = mods.energy; + sealedMod = mods.isSealed; + selfLightedMod = mods.isSelfLighted; + selfUnlightedMod = mods.isSelfUnlighted; + sunlightSimulatedMod = mods.isSunlightSimulated; + biomeOverride = mods.biomeOverride; + humidityMod = mods.humidity; + temperatureMod = mods.temperature; + isAutomated = mods.isAutomated; + isRetrievingPollen = mods.isCollectingPollen; + maxspeed = mods.maxSpeed; + + if (mLockedSpeed) mSpeed = maxspeed; + else mSpeed = Math.min(mSpeed, maxspeed); + } + + /** Tries to move as much of [stack] into a possible upgrade slot */ + public void addUpgrade(ItemStack stack) { + if (stack == null || !GTApiaryUpgrade.isUpgrade(stack)) return; + + int amount = stack.stackSize; + for (int i = upgradeSlot; i < upgradeSlot + upgradeSlotCount; i++) { + if (!isItemValidForSlot(i, stack)) continue; + + int maxStackSize = GTApiaryUpgrade.getUpgrade(stack) + .getMaxNumber(); + ItemStack stackInSlot = getStackInSlot(i); + + // Push into empty slot + if (stackInSlot == null) { + amount = Math.min(amount, maxStackSize); + setInventorySlotContents(i, stack.splitStack(amount)); + return; + } + + if (!GTUtility.areStacksEqual(stack, stackInSlot)) continue; + amount = Math.max(Math.min(amount, maxStackSize - stackInSlot.stackSize), 0); + if (amount == 0) return; + stackInSlot.stackSize += amount; + stack.stackSize -= amount; + return; + } + } + + /** Returns installed upgrade in slot 0 <= [index] < getMaxUpgradeCount() */ + public ItemStack getUpgrade(int index) { + if (index < 0 || index >= upgradeSlotCount) return null; + return getStackInSlot(upgradeSlot + index); + } + + /** Tries to remove [amount] or less of the upgrade installed in slot [index]. Returns the removed ItemStack */ + public ItemStack removeUpgrade(int index, int amount) { + if (index < 0 || index >= upgradeSlotCount || amount <= 0) return null; + + ItemStack stackInSlot = getUpgrade(index); + if (stackInSlot == null) return null; + + amount = Math.min(amount, stackInSlot.stackSize); + ItemStack result = stackInSlot.splitStack(amount); + if (stackInSlot.stackSize <= 0) setInventorySlotContents(upgradeSlot + index, null); + return result; + } + + public static int getMaxUpgradeCount() { + return upgradeSlotCount; + } + + @Override + public float getTerritoryModifier(IBeeGenome iBeeGenome, float v) { + return Math.min(5, terrorityMod); + } + + @Override + public float getMutationModifier(IBeeGenome iBeeGenome, IBeeGenome iBeeGenome1, float v) { + return mutationMod; + } + + @Override + public float getLifespanModifier(IBeeGenome iBeeGenome, IBeeGenome iBeeGenome1, float v) { + return lifespanMod; + } + + @Override + public float getProductionModifier(IBeeGenome iBeeGenome, float v) { + return productionMod; + } + + @Override + public float getFloweringModifier(IBeeGenome iBeeGenome, float v) { + return floweringMod; + } + + @Override + public float getGeneticDecay(IBeeGenome iBeeGenome, float v) { + return geneticDecayMod; + } + + public float getEnergyModifier() { + return energyMod; + } + + @Override + public boolean isSealed() { + return sealedMod; + } + + @Override + public boolean isSelfLighted() { + return selfLightedMod; + } + + @Override + public boolean isSelfUnlighted() { + return selfUnlightedMod; + } + + @Override + public boolean isSunlightSimulated() { + return sunlightSimulatedMod; + } + + @Override + public boolean isHellish() { + return getBiome() == BiomeGenBase.hell; + } + + public int getMaxSpeed() { + return maxspeed; + } + + // endregion + + // region IBeeListener + + @Override + public void wearOutEquipment(int i) {} + + @Override + public void onQueenDeath() {} + + @Override + public boolean onPollenRetrieved(IIndividual iIndividual) { + return false; + } + + // endregion + + static final IBeekeepingLogic dummylogic = new IBeekeepingLogic() { + + @Override + public boolean canWork() { + return true; + } + + @Override + public void doWork() {} + + @Override + public void syncToClient() {} + + @Override + public void syncToClient(EntityPlayerMP entityPlayerMP) {} + + @Override + public int getBeeProgressPercent() { + return 0; + } + + @Override + public boolean canDoBeeFX() { + return false; + } + + @Override + public void doBeeFX() {} + + @Override + public void readFromNBT(NBTTagCompound nbtTagCompound) {} + + @Override + public void writeToNBT(NBTTagCompound nbtTagCompound) {} + }; + + private static final String POWER_SOURCE_POWER = "GT5U.machines.powersource.power", + CANCEL_PROCESS_TOOLTIP = "GT5U.machines.industrialapiary.cancel.tooltip", + SPEED_TOOLTIP = "GT5U.machines.industrialapiary.speed.tooltip", + SPEED_LOCKED_TOOLTIP = "GT5U.machines.industrialapiary.speedlocked.tooltip", + INFO_TOOLTIP = "GT5U.machines.industrialapiary.info.tooltip", + INFO_WITH_BEE_TOOLTIP = "GT5U.machines.industrialapiary.infoextended.tooltip", + UPGRADE_TOOLTIP = "GT5U.machines.industrialapiary.upgradeslot.tooltip", + AUTOQUEEN_TOOLTIP = "GT5U.machines.industrialapiary.autoqueen.tooltip"; + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder + .widget( + new SlotWidget(new ApiarySlot(inventoryHandler, queen)) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_BEE_QUEEN) + .setPos(36, 21)) + .widget( + new SlotWidget(new ApiarySlot(inventoryHandler, drone)) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_BEE_DRONE) + .setPos(36, 41)) + .widget( + SlotGroup.ofItemHandler(inventoryHandler, 2) + .startFromSlot(7) + .endAtSlot(10) + .slotCreator(i -> new ApiarySlot(inventoryHandler, i)) + .applyForWidget( + widget -> widget.setGTTooltip(() -> mTooltipCache.getData(UPGRADE_TOOLTIP)) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .build() + .setPos(61, 23)); + + super.addUIWidgets(builder, buildContext); + + builder.widget( + new ButtonWidget().setOnClick((clickData, widget) -> cancelProcess()) + .setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_CROSS) + .setGTTooltip(() -> mTooltipCache.getData(CANCEL_PROCESS_TOOLTIP)) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(7, 26) + .setSize(18, 18)) + .widget( + new CycleButtonWidget().setToggle(() -> mAutoQueen, x -> mAutoQueen = x) + .setTextureGetter( + i -> i == 0 ? GTUITextures.OVERLAY_BUTTON_CROSS : GTUITextures.OVERLAY_BUTTON_CHECKMARK) + .setGTTooltip(() -> mTooltipCache.getData(AUTOQUEEN_TOOLTIP)) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(7, 44) + .setSize(18, 18) + .setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_SLOT_BEE_QUEEN)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_INFORMATION) + .setGTTooltip(() -> { + final String energyreq = GTUtility.formatNumbers( + (int) ((float) MTEIndustrialApiary.baseEUtUsage * getEnergyModifier() * getAcceleration()) + + getAdditionalEnergyUsage()); + final String Temp = StatCollector.translateToLocal(getTemperature().getName()); + final String Hum = StatCollector.translateToLocal(getHumidity().getName()); + if (getUsedQueen() != null + && BeeManager.beeRoot.isMember(getUsedQueen(), EnumBeeType.QUEEN.ordinal())) { + final IBee bee = BeeManager.beeRoot.getMember(getUsedQueen()); + if (bee.isAnalyzed()) { + final IBeeGenome genome = bee.getGenome(); + final IBeeModifier mod = BeeManager.beeRoot.getBeekeepingMode(getWorld()) + .getBeeModifier(); + final float tmod = getTerritoryModifier(null, 1f) * mod.getTerritoryModifier(null, 1f); + final int[] t = Arrays.stream(genome.getTerritory()) + .map(i -> (int) ((float) i * tmod)) + .toArray(); + return mTooltipCache.getUncachedTooltipData( + INFO_WITH_BEE_TOOLTIP, + energyreq, + Temp, + Hum, + genome.getSpeed(), + getProductionModifier(null, 0f) + mod.getProductionModifier(null, 0f), + Math.round( + getFloweringModifier(null, 1f) * genome.getFlowering() + * mod.getFloweringModifier(null, 1f)), + Math.round( + getLifespanModifier(null, null, 1f) * genome.getLifespan() + * mod.getLifespanModifier(null, null, 1f)), + t[0], + t[1], + t[2]); + } + } + return mTooltipCache.getUncachedTooltipData(INFO_TOOLTIP, energyreq, Temp, Hum); + }) + .attachSyncer( + new FakeSyncWidget.ItemStackSyncer(() -> usedQueen, val -> usedQueen = val), + builder, + (widget, val) -> widget.notifyTooltipChange()) + .setPos(163, 5) + .setSize(7, 18)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (clickData.mouseButton == 0) { + if (mLockedSpeed) return; + if (!clickData.shift) { + mSpeed++; + if (mSpeed > getMaxSpeed()) mSpeed = 0; + } else { + mSpeed--; + if (mSpeed < 0) mSpeed = getMaxSpeed(); + } + } else if (clickData.mouseButton == 1) { + mLockedSpeed = !mLockedSpeed; + if (mLockedSpeed) mSpeed = getMaxSpeed(); + } + }) + .setGTTooltip( + () -> mTooltipCache.getUncachedTooltipData( + mLockedSpeed ? SPEED_LOCKED_TOOLTIP : SPEED_TOOLTIP, + getAcceleration(), + GTUtility.formatNumbers(getAdditionalEnergyUsage()))) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer(() -> mSpeed, val -> mSpeed = val), + builder, + (widget, val) -> widget.notifyTooltipChange()) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> mLockedSpeed, val -> mLockedSpeed = val), + builder, + (widget, val) -> widget.notifyTooltipChange()) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setBackground(GTUITextures.PICTURE_SQUARE_LIGHT_GRAY) + .setPos(25, 62) + .setSize(18, 18)) + .widget( + new TextWidget("x").setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(30, 63)) + .widget( + TextWidget.dynamicString(() -> String.valueOf(1 << mSpeed)) + // mSpeed is already synced + .setSynced(false) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(26, 72)); + } + + private static final FallbackableUITexture progressBarTexture = GTUITextures + .fallbackableProgressbar("iapiary", GTUITextures.PROGRESSBAR_ARROW); + + @Override + protected BasicUIProperties getUIProperties() { + return super.getUIProperties().toBuilder() + .progressBarTexture(progressBarTexture) + .progressBarPos(new Pos2d(70, 3)) + .build(); + } + + @Override + protected SlotWidget createItemInputSlot(int index, IDrawable[] backgrounds, Pos2d pos) { + // we have custom input slots + return null; + } + + @Override + protected CycleButtonWidget createItemAutoOutputButton() { + return (CycleButtonWidget) super.createItemAutoOutputButton().setPos(7, 62); + } + + @Override + protected CycleButtonWidget createFluidAutoOutputButton() { + return null; + } + + @Override + protected SlotWidget createChargerSlot(int x, int y, String tooltipKey, Object[] tooltipArgs) { + return (SlotWidget) super.createChargerSlot(x, y, tooltipKey, tooltipArgs).setPos(79, 62); + } + + @Override + protected DrawableWidget createErrorStatusArea(ModularWindow.Builder builder, IDrawable picture) { + return (DrawableWidget) super.createErrorStatusArea(builder, picture).setPos(100, 62) + .attachSyncer( + new FakeSyncWidget.ListSyncer<>(() -> Arrays.asList(mErrorStates.toArray(new IErrorState[0])), val -> { + mErrorStates.clear(); + mErrorStates.addAll(new HashSet<>(val)); + }, + (buffer, val) -> buffer.writeShort(val.getID()), + buffer -> ForestryAPI.errorStateRegistry.getErrorState(buffer.readShort())), + builder, + (widget, val) -> widget.notifyTooltipChange()); + } + + @Override + protected List getErrorDescriptions() { + if (!mErrorStates.isEmpty()) { + return mErrorStates.stream() + .map(state -> EnumChatFormatting.RED + StatCollector.translateToLocal("for." + state.getDescription())) + .collect(Collectors.toList()); + } else if (mStuttering) { + return mTooltipCache + .getData(STALLED_STUTTERING_TOOLTIP, StatCollector.translateToLocal(POWER_SOURCE_POWER)).text; + } else { + return Collections.emptyList(); + } + } + + @Override + protected List getErrorDescriptionsShift() { + // Don't show shift tooltip of "Progress was lost" + // as this machine does not lose progress + return getErrorDescriptions(); + } + + private int getAcceleration() { + return 1 << mSpeed; + } + + private int getAdditionalEnergyUsage() { + final int accelerated = getAcceleration(); + int energyusage = 0; + if (accelerated == 2) energyusage = 32; + else if (accelerated > 2) energyusage = 32 * accelerated << (mSpeed - 2); + return energyusage; + } + + private class ApiarySlot extends BaseSlot { + + public ApiarySlot(IItemHandlerModifiable inventory, int index) { + super(inventory, index); + } + + @Override + public boolean isItemValidPhantom(ItemStack stack) { + return super.isItemValidPhantom(stack) && getBaseMetaTileEntity().isItemValidForSlot(getSlotIndex(), stack); + } + + @Override + public void onSlotChanged() { + super.onSlotChanged(); + onInventoryUpdate(getSlotIndex()); + } + } + + private static final UIInfo IndustrialApiaryUI = GTUIInfos.GTTileEntityUIFactory + .apply(GTModularUIContainer_IndustrialApiary::new); + + private static class GTModularUIContainer_IndustrialApiary extends ModularUIContainer { + + public GTModularUIContainer_IndustrialApiary(ModularUIContext context, ModularWindow mainWindow) { + super(context, mainWindow); + } + + private final int playerInventorySlot = 36; + + @Override + public ItemStack slotClick(int aSlotNumber, int aMouseclick, int aShifthold, EntityPlayer aPlayer) { + if (!(aSlotNumber >= playerInventorySlot + 2 && aSlotNumber < playerInventorySlot + 2 + 4)) + return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); + if (aShifthold == 5) return null; + if (aShifthold != 0) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); + if (aMouseclick > 1) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); + final ItemStack s = aPlayer.inventory.getItemStack(); + if (s == null) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); + final Slot slot = getSlot(aSlotNumber); + final ItemStack slotStack = slot.getStack(); + if (slotStack != null && !GTUtility.areStacksEqual(slotStack, s)) return null; // super would replace item + if (slotStack == null && !slot.isItemValid(s)) + return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); + if (!GTApiaryUpgrade.isUpgrade(s)) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); + int max = GTApiaryUpgrade.getUpgrade(s) + .getMaxNumber(); + if (slotStack != null) max = Math.max(0, max - slotStack.stackSize); + max = Math.min(max, s.stackSize); + if (max == 0) return null; + if (aMouseclick == 1) max = 1; + if (max == s.stackSize) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); + final ItemStack newStack = s.splitStack(s.stackSize - max); + final ItemStack result = super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); + aPlayer.inventory.setItemStack(newStack); + return result; + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) { + final Slot s = getSlot(aSlotIndex); + if (s == null) return super.transferStackInSlot(aPlayer, aSlotIndex); + if (aSlotIndex >= playerInventorySlot) return super.transferStackInSlot(aPlayer, aSlotIndex); + final ItemStack aStack = s.getStack(); + if (aStack == null) return super.transferStackInSlot(aPlayer, aSlotIndex); + if (!GTApiaryUpgrade.isUpgrade(aStack)) return super.transferStackInSlot(aPlayer, aSlotIndex); + for (int i = playerInventorySlot + 2; i < playerInventorySlot + 2 + 4; i++) { + final Slot iSlot = getSlot(i); + final ItemStack iStack = iSlot.getStack(); + if (iStack == null) { + if (!iSlot.isItemValid(aStack)) continue; + } else { + if (!GTUtility.areStacksEqual(aStack, iStack)) continue; + } + int max = GTApiaryUpgrade.getUpgrade(aStack) + .getMaxNumber(); + if (iStack == null) { + max = Math.min(max, aStack.stackSize); + final ItemStack newstack = aStack.splitStack(max); + iSlot.putStack(newstack); + } else { + max = Math.max(0, max - iStack.stackSize); + max = Math.min(max, aStack.stackSize); + iStack.stackSize += max; + aStack.stackSize -= max; + iSlot.onSlotChanged(); + } + if (aStack.stackSize == 0) s.putStack(null); + else s.onSlotChanged(); + break; + } + return null; + } + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + if (tag.hasKey("queen")) { + currenttip.add( + "Current Queen: " + EnumChatFormatting.GREEN + StatCollector.translateToLocal(tag.getString("queen"))); + } + if (tag.hasKey("dummyProduction")) { + currenttip.add( + "Effective Production: " + EnumChatFormatting.AQUA + + String.format("b^0.52 * %.2f", tag.getFloat("dummyProduction"))); + } + if (tag.hasKey("errors")) { + NBTTagCompound errorNbt = tag.getCompoundTag("errors"); + for (int i = 0; i < errorNbt.getInteger("size"); i++) { + currenttip.add( + "Error: " + EnumChatFormatting.RED + + StatCollector.translateToLocal("for." + errorNbt.getString("e" + i))); + } + } + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + if (usedQueen != null) { + IBeeGenome genome = beeRoot.getMember(usedQueen) + .getGenome(); + tag.setString( + "queen", + genome.getPrimary() + .getUnlocalizedName()); + float prodModifier = getProductionModifier(genome, 0f); + prodModifier += beeRoot.getBeekeepingMode(world) + .getBeeModifier() + .getProductionModifier(genome, prodModifier); + float dummyProduction = 100f * Bee.getFinalChance(0.01f, genome.getSpeed(), prodModifier, 8f); + tag.setFloat("dummyProduction", dummyProduction); + } + if (hasErrors()) { + NBTTagCompound errorNbt = new NBTTagCompound(); + int errorCounter = 0; + for (IErrorState error : mErrorStates) { + errorNbt.setString("e" + errorCounter++, error.getDescription()); + } + errorNbt.setInteger("size", errorCounter); + tag.setTag("errors", errorNbt); + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEMassfabricator.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEMassfabricator.java new file mode 100644 index 0000000000..195d2317de --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEMassfabricator.java @@ -0,0 +1,241 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MASSFAB; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MASSFAB_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MASSFAB_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MASSFAB_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_MASSFAB; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_MASSFAB_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_MASSFAB_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_MASSFAB_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_MASSFAB; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_MASSFAB_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_MASSFAB_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_MASSFAB_GLOW; + +import java.util.Arrays; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraftforge.fluids.FluidStack; + +import com.google.common.primitives.Ints; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.MachineType; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.objects.overclockdescriber.EUOverclockDescriber; +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.config.machinestats.ConfigMassFabricator; + +public class MTEMassfabricator extends MTEBasicMachine { + + public static int sUUAperUUM = 1; + public static int sUUASpeedBonus = 4; + public static int sDurationMultiplier = 3215; + public static boolean sRequiresUUA = false; + public static int BASE_EUT = 256; + public static GTRecipe nonUUARecipe; + public static GTRecipe uuaRecipe; + + public MTEMassfabricator(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 8, + MachineType.MATTER_FABRICATOR.tooltipDescription(), + 1, + 1, + TextureFactory.of( + TextureFactory.of(OVERLAY_SIDE_MASSFAB_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_MASSFAB_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_SIDE_MASSFAB), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_MASSFAB_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_FRONT_MASSFAB_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MASSFAB_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_FRONT_MASSFAB), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MASSFAB_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_MASSFAB_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_MASSFAB_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_MASSFAB), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_MASSFAB_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_BOTTOM_MASSFAB_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_MASSFAB_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_BOTTOM_MASSFAB), + TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_MASSFAB_GLOW) + .glow() + .build())); + } + + public MTEMassfabricator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 8, aDescription, aTextures, 1, 1); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMassfabricator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean allowSelectCircuit() { + return true; + } + + @Override + protected OverclockDescriber createOverclockDescriber() { + return new MassfabricatorOverclockDescriber(mTier, mAmperage); + } + + @Override + public void onConfigLoad() { + super.onConfigLoad(); + sDurationMultiplier = ConfigMassFabricator.durationMultiplier; + sUUAperUUM = ConfigMassFabricator.UUAPerUUM; + sUUASpeedBonus = ConfigMassFabricator.UUASpeedBonus; + sRequiresUUA = ConfigMassFabricator.requiresUUA; + Materials.UUAmplifier.mChemicalFormula = ("Mass Fabricator Eff/Speed Bonus: x" + sUUASpeedBonus); + } + + @Override + public long maxAmperesIn() { + return 10; + } + + @Override + public long maxEUStore() { + return V[mTier] * 512L; + } + + @Override + public int checkRecipe() { + FluidStack tFluid = getDrainableStack(); + if ((tFluid == null) || (tFluid.amount < getCapacity())) { + this.mOutputFluid = Materials.UUMatter.getFluid(1L); + calculateCustomOverclock(containsUUA(getFillableStack()) ? uuaRecipe : nonUUARecipe); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + if (containsUUA(tFluid = getFillableStack())) { + tFluid.amount -= sUUAperUUM; + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + return sRequiresUUA || Arrays.stream(getAllInputs()) + .anyMatch(s -> ItemList.Circuit_Integrated.isStackEqual(s, true, true)) + ? FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS + : FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + return DID_NOT_FIND_RECIPE; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.massFabFakeRecipes; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return aFluid.isFluidEqual(Materials.UUAmplifier.getFluid(1L)); + } + + @Override + public int getCapacity() { + return Math.max(sUUAperUUM, 1000); + } + + private boolean containsUUA(FluidStack aFluid) { + return aFluid != null && aFluid.amount >= sUUAperUUM && aFluid.isFluidEqual(Materials.UUAmplifier.getFluid(1L)); + } + + @ParametersAreNonnullByDefault + @MethodsReturnNonnullByDefault + protected class MassfabricatorOverclockDescriber extends EUOverclockDescriber { + + protected MassfabricatorOverclockDescriber(byte tier, int amperage) { + super(tier, amperage); + } + + @Override + public OverclockCalculator createCalculator(OverclockCalculator template, GTRecipe recipe) { + return super.createCalculator(template, recipe).setEUt(Ints.saturatedCast(V[tier] * amperage)) + .setEUtIncreasePerOC(2.0) + .limitOverclockCount(tier - 1) + .setOneTickDiscount(false); + } + + @Override + protected boolean shouldShowAmperage(OverclockCalculator calculator) { + return true; + } + + @Override + protected String getVoltageString(OverclockCalculator calculator) { + // standard amperage calculation doesn't work here + return decorateWithOverclockLabel(GTUtility.formatNumbers(V[mTier]) + " EU/t", calculator) + + GTUtility.getTierNameWithParentheses(V[mTier]); + } + + @Override + protected String getAmperageString(OverclockCalculator calculator) { + int amperage = this.amperage; + int denominator = 1; + for (int i = 1; i < mTier; i++) { + amperage >>= 1; + if (amperage == 0) { + denominator <<= 1; + } + } + if (amperage > 0) { + return GTUtility.formatNumbers(amperage); + } else { + return "1/" + denominator; + } + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEMicrowaveEnergyTransmitter.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEMicrowaveEnergyTransmitter.java new file mode 100644 index 0000000000..52d38beba0 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEMicrowaveEnergyTransmitter.java @@ -0,0 +1,474 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW; + +import java.util.function.Consumer; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IEnergyConnected; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.common.config.machinestats.ConfigMicrowaveEnergyTransmitter; +import gregtech.common.config.machinestats.ConfigTeleporter; + +public class MTEMicrowaveEnergyTransmitter extends MTEBasicTank implements IAddGregtechLogo, IAddUIWidgets { + + private static boolean sInterDimensionalTeleportAllowed = true; + private static int mMaxLoss = 50; + private static int mMaxLossDistance = 10000; + private static boolean mPassiveEnergyUse = true; + public int mTargetX = 0; + public int mTargetY = 0; + public int mTargetZ = 0; + public int mTargetD = 0; + public boolean mDebug = false; + public boolean hasBlock = false; + public int tTargetX = 0; + public int tTargetY = 0; + public int tTargetZ = 0; + public int tTargetD = 0; + public TileEntity tTile = null; + + public MTEMicrowaveEnergyTransmitter(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 3, + new String[] { "Transmits Energy Wirelessly", "Use Nitrogen Plasma", "for Inter-dimensional transmission", + "0.004EU Loss per 100 Blocks" }); + } + + public MTEMicrowaveEnergyTransmitter(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + public MTEMicrowaveEnergyTransmitter(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) return true; + this.hasBlock = checkForBlock(); + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMicrowaveEnergyTransmitter(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public String[] getInfoData() { + return new String[] { "Coordinates:", + "X: " + EnumChatFormatting.GREEN + GTUtility.formatNumbers(this.mTargetX) + EnumChatFormatting.RESET, + "Y: " + EnumChatFormatting.GREEN + GTUtility.formatNumbers(this.mTargetY) + EnumChatFormatting.RESET, + "Z: " + EnumChatFormatting.GREEN + GTUtility.formatNumbers(this.mTargetZ) + EnumChatFormatting.RESET, + "Dimension: " + EnumChatFormatting.GREEN + this.mTargetD + EnumChatFormatting.RESET, + "Dimension Valid: " + (GTUtility.isRealDimension(this.mTargetD) + ? EnumChatFormatting.GREEN + "Yes" + EnumChatFormatting.RESET + : EnumChatFormatting.RED + "No" + EnumChatFormatting.RESET), + "Dimension Registered: " + (DimensionManager.isDimensionRegistered(this.mTargetD) + ? EnumChatFormatting.GREEN + "Yes" + EnumChatFormatting.RESET + : EnumChatFormatting.RED + "No" + EnumChatFormatting.RESET) }; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == ForgeDirection.DOWN) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1] }; + if (aActive) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], + TextureFactory.of(OVERLAY_TELEPORTER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_ACTIVE_GLOW) + .glow() + .build() }; + return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_TELEPORTER), + TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_GLOW) + .glow() + .build() }; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + if (mFluid != null) aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); + aNBT.setInteger("mTargetX", this.mTargetX); + aNBT.setInteger("mTargetY", this.mTargetY); + aNBT.setInteger("mTargetZ", this.mTargetZ); + aNBT.setInteger("mTargetD", this.mTargetD); + aNBT.setBoolean("mDebug", this.mDebug); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mFluid = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid")); + this.mTargetX = aNBT.getInteger("mTargetX"); + this.mTargetY = aNBT.getInteger("mTargetY"); + this.mTargetZ = aNBT.getInteger("mTargetZ"); + this.mTargetD = aNBT.getInteger("mTargetD"); + this.mDebug = aNBT.getBoolean("mDebug"); + } + + @Override + public void onConfigLoad() { + sInterDimensionalTeleportAllowed = ConfigTeleporter.interDimensionalTPAllowed; + mMaxLoss = Math.max(ConfigMicrowaveEnergyTransmitter.maxLoss, 11); + mMaxLossDistance = ConfigMicrowaveEnergyTransmitter.maxLossDistance; + mPassiveEnergyUse = ConfigMicrowaveEnergyTransmitter.passiveEnergyUse; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + if (aBaseMetaTileEntity.isServerSide()) { + if ((this.mTargetX == 0) && (this.mTargetY == 0) && (this.mTargetZ == 0) && (this.mTargetD == 0)) { + this.mTargetX = aBaseMetaTileEntity.getXCoord(); + this.mTargetY = aBaseMetaTileEntity.getYCoord(); + this.mTargetZ = aBaseMetaTileEntity.getZCoord(); + this.mTargetD = aBaseMetaTileEntity.getWorld().provider.dimensionId; + } + this.hasBlock = checkForBlock(); + } + } + + public boolean checkForBlock() { + for (byte i = -5; i <= 5; i = (byte) (i + 1)) { + for (byte j = -5; j <= 5; j = (byte) (j + 1)) { + for (byte k = -5; k <= 5; k = (byte) (k + 1)) { + if (getBaseMetaTileEntity().getBlockOffset(i, j, k) == GregTechAPI.sBlockMetal5 + && getBaseMetaTileEntity().getMetaIDOffset(i, j, k) == 8) { // require osmiridium block + return true; + } + } + } + } + return false; + } + + public boolean hasDimensionalTeleportCapability() { + return this.mDebug || (sInterDimensionalTeleportAllowed && (this.hasBlock + || mFluid != null && mFluid.isFluidEqual(Materials.Nitrogen.getPlasma(1)) && mFluid.amount >= 1000)); + } + + public boolean isDimensionalTeleportAvailable() { + return this.mDebug || (hasDimensionalTeleportCapability() && GTUtility.isRealDimension(this.mTargetD) + && GTUtility.isRealDimension(getBaseMetaTileEntity().getWorld().provider.dimensionId)); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (mFluid == null) { + mFluid = Materials.Nitrogen.getPlasma(0); + } + super.onPostTick(aBaseMetaTileEntity, aTick); + if (getBaseMetaTileEntity().isServerSide()) { + if (getBaseMetaTileEntity().getTimer() % 100L == 50L) { + this.hasBlock = checkForBlock(); + } + if ((getBaseMetaTileEntity().isAllowedToWork()) && (getBaseMetaTileEntity().getRedstone())) { + if (getBaseMetaTileEntity().getStoredEU() > (V[mTier] * 16)) { + if (mPassiveEnergyUse) { + getBaseMetaTileEntity().decreaseStoredEnergyUnits(2L << (mTier - 1), false); + } + if (hasDimensionalTeleportCapability() + && this.mTargetD != getBaseMetaTileEntity().getWorld().provider.dimensionId + && mFluid.isFluidEqual(Materials.Nitrogen.getPlasma(1))) { + mFluid.amount--; + if (mFluid.amount < 1) { + mFluid = null; + } + } + if (tTargetD != mTargetD || tTargetX != mTargetX || tTargetY != mTargetY || tTargetZ != mTargetZ) { + tTargetD = mTargetD; + tTargetX = mTargetX; + tTargetY = mTargetY; + tTargetZ = mTargetZ; + if (this.mTargetD == getBaseMetaTileEntity().getWorld().provider.dimensionId) { + tTile = getBaseMetaTileEntity().getTileEntity(this.mTargetX, this.mTargetY, this.mTargetZ); + } else { + World tWorld = DimensionManager.getWorld(this.mTargetD); + if (tWorld != null) { + tTile = tWorld.getTileEntity(this.mTargetX, this.mTargetY, this.mTargetZ); + } + } + } + int tDistance = distanceCalculation(); + if (tTile != null) { + if (tTile instanceof IEnergyConnected) { + long packetSize = V[mTier]; + if (tTile instanceof IGregTechTileEntity) { + IMetaTileEntity mte = ((IGregTechTileEntity) tTile).getMetaTileEntity(); + if (mte instanceof BaseMetaTileEntity) { + packetSize = ((BaseMetaTileEntity) mte).getMaxSafeInput(); + } + } + long energyUse = 10; + if (mMaxLossDistance != 0) { + energyUse = GTUtility + .safeInt(10L + (tDistance * Math.max(mMaxLoss - 10L, 0) / mMaxLossDistance)); + } + energyUse = packetSize + ((V[mTier] * energyUse) / 100); + if (getBaseMetaTileEntity().isUniversalEnergyStored(energyUse)) { + if (((IEnergyConnected) tTile).injectEnergyUnits(ForgeDirection.UNKNOWN, packetSize, 1) + > 0) { + getBaseMetaTileEntity().decreaseStoredEnergyUnits(energyUse, false); + } + } + } + } + } + getBaseMetaTileEntity().setActive(true); + } else { + getBaseMetaTileEntity().setActive(false); + } + } + } + + private int distanceCalculation() { + return Math.abs( + ((this.mTargetD != getBaseMetaTileEntity().getWorld().provider.dimensionId) + && (isDimensionalTeleportAvailable()) ? 100 : 1) + * (int) Math.sqrt( + Math.pow(getBaseMetaTileEntity().getXCoord() - this.mTargetX, 2.0D) + + Math.pow(getBaseMetaTileEntity().getYCoord() - this.mTargetY, 2.0D) + + Math.pow(getBaseMetaTileEntity().getZCoord() - this.mTargetZ, 2.0D))); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isOverclockerUpgradable() { + return false; + } + + @Override + public boolean isTransformerUpgradable() { + return false; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return true; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return V[mTier] * 16; + } + + @Override + public long maxEUStore() { + return V[mTier] * 256; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxSteamStore() { + return maxEUStore(); + } + + @Override + public long maxAmperesIn() { + return 3; + } + + @Override + public int getStackDisplaySlot() { + return 2; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public int getInputSlot() { + return 0; + } + + @Override + public int getOutputSlot() { + return 0; + } + + @Override + public int getCapacity() { + return 64000; + } + + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public boolean displaysItemStack() { + return false; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return null; + } + + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setSize(90, 72) + .setPos(43, 4)) + .widget( + new TextWidget().setStringSupplier(() -> "X: " + numberFormat.format(mTargetX)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 8)) + .widget( + new TextWidget().setStringSupplier(() -> "Y: " + numberFormat.format(mTargetY)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 16)) + .widget( + new TextWidget().setStringSupplier(() -> "Z: " + numberFormat.format(mTargetZ)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 24)) + .widget( + new TextWidget().setStringSupplier(() -> "Dim: " + numberFormat.format(mTargetD)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 32)) + .widget( + TextWidget.dynamicString(() -> "Dim Valid: " + (GTUtility.isRealDimension(mTargetD) ? "Yes" : "No")) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> hasDimensionalTeleportCapability()) + .setPos(46, 40)) + .widget(new FakeSyncWidget.FluidStackSyncer(() -> mFluid, val -> mFluid = val)); + + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, -512, -64, 7); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, -16, -1, 25); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, 16, 1, 133); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, 512, 64, 151); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> mTargetD += val, -16, -8, 7, 58); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> mTargetD += val, -4, -1, 25, 58); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> mTargetD += val, 4, 1, 133, 58); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> mTargetD += val, 16, 8, 151, 58); + } + + private void addChangeNumberButtons(ModularWindow.Builder builder, IDrawable overlay, int addNumberShift, + int addNumber, int xPos) { + addChangeNumberButton(builder, overlay, val -> mTargetX += val, addNumberShift, addNumber, xPos, 4); + addChangeNumberButton(builder, overlay, val -> mTargetY += val, addNumberShift, addNumber, xPos, 22); + addChangeNumberButton(builder, overlay, val -> mTargetZ += val, addNumberShift, addNumber, xPos, 40); + } + + private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, + int addNumberShift, int addNumber, int xPos, int yPos) { + builder.widget( + new ButtonWidget() + .setOnClick((clickData, widget) -> setter.accept(clickData.shift ? addNumberShift : addNumber)) + .setBackground(GTUITextures.BUTTON_STANDARD, overlay) + .setSize(18, 18) + .setPos(xPos, yPos)); + } + + @Override + public GUITextureSet getGUITextureSet() { + return new GUITextureSet().setGregTechLogo(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) + .setSize(17, 17) + .setPos(113, 56)); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEMiner.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEMiner.java new file mode 100644 index 0000000000..7707564b93 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEMiner.java @@ -0,0 +1,406 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.GTValues.debugBlockMiner; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.ChunkPosition; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; + +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.recipe.BasicUIProperties; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.BlockOresAbstract; +import gregtech.common.blocks.TileEntityOres; +import gregtech.common.misc.DrillingLogicDelegate; +import gregtech.common.misc.IDrillingLogicDelegateOwner; + +public class MTEMiner extends MTEBasicMachine implements IDrillingLogicDelegateOwner, IAddUIWidgets { + + static final int[] RADIUS = { 8, 8, 16, 24, 32 }; // Miner radius per tier + static final int[] SPEED = { 160, 160, 80, 40, 20 }; // Miner cycle time per tier + static final int[] ENERGY = { 8, 8, 32, 128, 512 }; // Miner energy consumption per tier + + /** Miner configured radius */ + private int radiusConfig; + /** Found ore blocks cache of current drill depth */ + private final ArrayList oreBlockPositions = new ArrayList<>(); + + /** General pipe accessor */ + private final DrillingLogicDelegate pipe = new DrillingLogicDelegate(this); + + private final int mSpeed; + + public MTEMiner(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, + new String[] { "Digging ore instead of you", "Use Screwdriver to regulate work area", + "Use Soft Mallet to disable and retract the pipe", + String.format("%d EU/t, %d sec per block, no stuttering", ENERGY[aTier], SPEED[aTier] / 20), + String.format("Maximum work area %dx%d", (RADIUS[aTier] * 2 + 1), (RADIUS[aTier] * 2 + 1)), + String.format("Fortune bonus of %d", aTier) }, + 2, + 2, + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_SIDE_ACTIVE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_SIDE_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_SIDE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_SIDE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_FRONT_ACTIVE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_FRONT_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_FRONT")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_FRONT_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_TOP_ACTIVE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_TOP_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_TOP")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_TOP_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_BOTTOM_ACTIVE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_BOTTOM_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_BOTTOM")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/miner/OVERLAY_BOTTOM_GLOW")) + .glow() + .build())); + mSpeed = SPEED[aTier]; + radiusConfig = RADIUS[mTier]; + } + + public MTEMiner(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures, 2, 2); + mSpeed = SPEED[aTier]; + radiusConfig = RADIUS[mTier]; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMiner(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + pipe.findTipDepth(); + fillOreList(aBaseMetaTileEntity); + } + + @Override + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) // + && aStack.getItem() == DrillingLogicDelegate.MINING_PIPE_STACK.getItem(); + } + + /** Both output slots must be free to work */ + public boolean hasFreeSpace() { + for (int i = getOutputSlot(); i < getOutputSlot() + 2; i++) { + if (mInventory[i] != null) { + return false; + } + } + return true; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + if (side != getBaseMetaTileEntity().getFrontFacing() && side != mMainFacing) { + if (aPlayer.isSneaking()) { + if (radiusConfig >= 0) { + radiusConfig--; + } + if (radiusConfig < 0) { + radiusConfig = RADIUS[mTier]; + } + } else { + if (radiusConfig <= RADIUS[mTier]) { + radiusConfig++; + } + if (radiusConfig > RADIUS[mTier]) { + radiusConfig = 0; + } + } + + GTUtility.sendChatToPlayer( + aPlayer, + String.format( + "%s %dx%d", + StatCollector.translateToLocal("GT5U.machines.workareaset"), + (radiusConfig * 2 + 1), + (radiusConfig * 2 + 1))); + + // Rebuild ore cache after change config + fillOreList(getBaseMetaTileEntity()); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (!aBaseMetaTileEntity.isServerSide()) { + return; + } + + // Pipe workaround + pipe.onOwnerPostTick(aBaseMetaTileEntity, aTick); + + if (!aBaseMetaTileEntity.isAllowedToWork()) { + mMaxProgresstime = 0; + if (debugBlockMiner) { + GTLog.out.println("MINER: Disabled"); + } + return; + } + + if (!hasFreeSpace()) { + mMaxProgresstime = 0; + if (debugBlockMiner) { + GTLog.out.println("MINER: No free space"); + } + return; + } + + if (!aBaseMetaTileEntity.isUniversalEnergyStored((long) ENERGY[mTier] * (mSpeed - mProgresstime))) { + mMaxProgresstime = 0; + if (debugBlockMiner) { + GTLog.out.println( + "MINER: Not enough energy yet, want " + (ENERGY[mTier] * mSpeed) + + " have " + + aBaseMetaTileEntity.getUniversalEnergyStored()); + } + return; + } + + /* Checks if machine are waiting new mining pipe item */ + if (!pipe.canContinueDrilling(aTick)) { + mMaxProgresstime = 0; + return; + } + + mMaxProgresstime = mSpeed; + + aBaseMetaTileEntity.decreaseStoredEnergyUnits(ENERGY[mTier], true); + + // Real working only when progress done. TODO some legacy code... refactorings needed + if (mProgresstime == mSpeed - 1) { + if (pipe.getTipDepth() == 0 || oreBlockPositions.isEmpty()) { + boolean descends = pipe.descent(aBaseMetaTileEntity); + if (descends) { + fillOreList(aBaseMetaTileEntity); + } + } else { + int x; + int y; + int z; + Block oreBlock; + boolean isOre; + do { + ChunkPosition oreBlockPos = oreBlockPositions.remove(0); + oreBlock = aBaseMetaTileEntity + .getBlockOffset(oreBlockPos.chunkPosX, oreBlockPos.chunkPosY, oreBlockPos.chunkPosZ); + x = aBaseMetaTileEntity.getXCoord() + oreBlockPos.chunkPosX; + y = aBaseMetaTileEntity.getYCoord() + oreBlockPos.chunkPosY; + z = aBaseMetaTileEntity.getZCoord() + oreBlockPos.chunkPosZ; + isOre = GTUtility.isOre( + oreBlock, + aBaseMetaTileEntity.getWorld() + .getBlockMetadata(x, y, z)); + } // someone else might have removed the block + while (!isOre && !oreBlockPositions.isEmpty()); + + if (isOre) { + pipe.mineBlock(aBaseMetaTileEntity, oreBlock, x, y, z); + } + } + } + } + + /** Finds the ores in current drill Y level */ + private void fillOreList(IGregTechTileEntity aBaseMetaTileEntity) { + if (pipe.getTipDepth() == 0) { + return; + } + oreBlockPositions.clear(); + for (int z = -radiusConfig; z <= radiusConfig; ++z) { + for (int x = -radiusConfig; x <= radiusConfig; ++x) { + Block block = aBaseMetaTileEntity.getBlockOffset(x, pipe.getTipDepth(), z); + int blockMeta = aBaseMetaTileEntity.getMetaIDOffset(x, pipe.getTipDepth(), z); + + // todo some weird checks. refactorings needed + if (block instanceof BlockOresAbstract) { + TileEntity oreEntity = aBaseMetaTileEntity.getTileEntityOffset(x, pipe.getTipDepth(), z); + if (oreEntity instanceof TileEntityOres && ((TileEntityOres) oreEntity).mNatural) { + oreBlockPositions.add(new ChunkPosition(x, pipe.getTipDepth(), z)); + } + } else if (GTUtility.isOre(block, blockMeta)) { + oreBlockPositions.add(new ChunkPosition(x, pipe.getTipDepth(), z)); + } + } + } + } + + /** Pulls (or check can pull) items from an input slots. */ + @Override + public boolean pullInputs(Item item, int count, boolean simulate) { + for (int i = 0; i < mInputSlotCount; i++) { + ItemStack stack = getInputAt(i); + if (stack != null && stack.getItem() == item && stack.stackSize >= count) { + if (simulate) { + return true; + } + stack.stackSize -= count; + if (stack.stackSize == 0) { + mInventory[getInputSlot() + i] = null; + } + return true; + } + } + return false; + } + + /** Pushes (or check can push) item to output slots. */ + @Override + public boolean pushOutputs(ItemStack stack, int count, boolean simulate, boolean allowInputSlots) { + return allowInputSlots && pushOutput(getInputSlot(), getInputSlot() + mInputSlotCount, stack, count, simulate) + || pushOutput(getOutputSlot(), getOutputSlot() + mOutputItems.length, stack, count, simulate); + } + + private boolean pushOutput(int startIndex, int endIndex, ItemStack stack, int count, boolean simulate) { + for (int i = startIndex; i < endIndex; i++) { + ItemStack slot = mInventory[i]; + if (slot == null || slot.stackSize == 0) { + if (!simulate) { + ItemStack copy = stack.copy(); + copy.stackSize = count; + mInventory[i] = copy; + } + return true; + } else if (GTUtility.areStacksEqual(slot, stack) && slot.stackSize <= slot.getMaxStackSize() - count) { + if (!simulate) { + slot.stackSize += count; + } + return true; + } + } + return false; + } + + @Override + public long maxEUStore() { + return Math.max(V[mTier] * 64, 4096); + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + super.setItemNBT(aNBT); + aNBT.setInteger("radiusConfig", radiusConfig); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("radiusConfig", radiusConfig); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("radiusConfig")) { + int newRadius = aNBT.getInteger("radiusConfig"); + if (RADIUS[mTier] <= newRadius && newRadius > 0) { + radiusConfig = newRadius; + } + } + } + + @Override + public String[] getInfoData() { + return new String[] { + String.format( + "%s%s%s", + EnumChatFormatting.BLUE, + StatCollector.translateToLocal("GT5U.machines.miner"), + EnumChatFormatting.RESET), + String.format( + "%s: %s%d%s %s", + StatCollector.translateToLocal("GT5U.machines.workarea"), + EnumChatFormatting.GREEN, + (radiusConfig * 2 + 1), + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.machines.blocks")) }; + } + + @Override + public int getMachineTier() { + return mTier; + } + + @Override + public int getMachineSpeed() { + return mSpeed; + } + + public DrillingLogicDelegate getPipe() { + return pipe; + } + + private static final FallbackableUITexture progressBarTexture = GTUITextures + .fallbackableProgressbar("miner", GTUITextures.PROGRESSBAR_CANNER); + + @Override + protected BasicUIProperties getUIProperties() { + return super.getUIProperties().toBuilder() + .progressBarTexture(progressBarTexture) + .build(); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEMonsterRepellent.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEMonsterRepellent.java new file mode 100644 index 0000000000..fc9c40856e --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEMonsterRepellent.java @@ -0,0 +1,182 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW; + +import java.util.Arrays; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTSpawnEventHandler; + +public class MTEMonsterRepellent extends MTETieredMachineBlock { + + public int mRange = 16; + + public MTEMonsterRepellent(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + "Repels nasty Creatures. Range: " + (4 + (12 * aTier)) + + " unpowered / " + + (16 + (48 * aTier)) + + " powered. Costs " + + (1L << (aTier * 2)) + + " EU/t"); + } + + public MTEMonsterRepellent(String aName, int aTier, int aInvSlotCount, String aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTEMonsterRepellent(String aName, int aTier, int aInvSlotCount, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMonsterRepellent( + this.mName, + this.mTier, + this.mInventory.length, + this.mDescriptionArray, + this.mTextures); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection != ForgeDirection.UP) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1] }; + if (active) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], + TextureFactory.of(OVERLAY_TELEPORTER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_ACTIVE_GLOW) + .glow() + .build() }; + return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_TELEPORTER), + TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_GLOW) + .glow() + .build() }; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (aBaseMetaTileEntity.isAllowedToWork() && aBaseMetaTileEntity.isServerSide()) { + int[] tCoords = { aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), aBaseMetaTileEntity.getWorld().provider.dimensionId }; + if ((aTimer % 600 == 0) && !GTSpawnEventHandler.mobReps.contains(tCoords)) { + GTSpawnEventHandler.mobReps.add(tCoords); + } + if (aBaseMetaTileEntity.isUniversalEnergyStored(getMinimumStoredEU()) + && aBaseMetaTileEntity.decreaseStoredEnergyUnits(1L << (this.mTier * 2), false)) { + mRange = GTSpawnEventHandler.getPoweredRepellentRange(mTier); + } else { + mRange = GTSpawnEventHandler.getUnpoweredRepellentRange(mTier); + } + } + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + int[] tCoords = { aBaseMetaTileEntity.getXCoord(), aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), aBaseMetaTileEntity.getWorld().provider.dimensionId }; + GTSpawnEventHandler.mobReps.add(tCoords); + } + + @Override + public void onRemoval() { + int[] tCoords = { this.getBaseMetaTileEntity() + .getXCoord(), + this.getBaseMetaTileEntity() + .getYCoord(), + this.getBaseMetaTileEntity() + .getZCoord(), + this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId }; + GTSpawnEventHandler.mobReps.removeIf(coords -> Arrays.equals(coords, tCoords)); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return true; + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 512L; + } + + @Override + public long maxEUStore() { + return 512L + V[mTier] * 50; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxAmperesIn() { + return 2; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return null; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) {} + + @Override + public void loadNBTData(NBTTagCompound aNBT) {} +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEPotionBrewer.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEPotionBrewer.java new file mode 100644 index 0000000000..d889ca0d40 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEPotionBrewer.java @@ -0,0 +1,224 @@ +package gregtech.common.tileentities.machines.basic; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.MachineType; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class MTEPotionBrewer extends MTEBasicMachine { + + public MTEPotionBrewer(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, + MachineType.BREWERY.tooltipDescription(), + 1, + 0, + TextureFactory.of( + TextureFactory.of( + new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_SIDE_POTIONBREWER_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/potionbrewer/OVERLAY_SIDE_POTIONBREWER_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_SIDE_POTIONBREWER")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_SIDE_POTIONBREWER_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of( + new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_FRONT_POTIONBREWER_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/potionbrewer/OVERLAY_FRONT_POTIONBREWER_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_FRONT_POTIONBREWER")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/potionbrewer/OVERLAY_FRONT_POTIONBREWER_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of( + new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_TOP_POTIONBREWER_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/potionbrewer/OVERLAY_TOP_POTIONBREWER_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_TOP_POTIONBREWER")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_TOP_POTIONBREWER_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of( + new Textures.BlockIcons.CustomIcon( + "basicmachines/potionbrewer/OVERLAY_BOTTOM_POTIONBREWER_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/potionbrewer/OVERLAY_BOTTOM_POTIONBREWER_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/potionbrewer/OVERLAY_BOTTOM_POTIONBREWER")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/potionbrewer/OVERLAY_BOTTOM_POTIONBREWER_GLOW")) + .glow() + .build())); + } + + public MTEPotionBrewer(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures, 1, 0); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPotionBrewer(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.brewingRecipes; + } + + @Override + public int checkRecipe() { + int tCheck = super.checkRecipe(); + if (tCheck != DID_NOT_FIND_RECIPE) { + return tCheck; + } + + calculateOverclockedNess(4, 128); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + + FluidStack aFluid = getFillableStack(); + if ((getDrainableStack() == null) && (aFluid != null) && (getInputAt(0) != null)) { + String tInputName = aFluid.getFluid() + .getName(); + if (tInputName.startsWith("potion.")) { + tInputName = tInputName.replaceFirst("potion.", ""); + int tFirstDot = tInputName.indexOf('.') + 1; + String tModifier = tFirstDot <= 0 ? "" : tInputName.substring(tFirstDot); + if (!tModifier.isEmpty()) { + tInputName = tInputName.replaceFirst("." + tModifier, ""); + } + if (GTUtility.areStacksEqual(new ItemStack(Items.fermented_spider_eye, 1, 0), getInputAt(0))) { + return switch (tInputName) { + case "poison", "health", "waterbreathing" -> setOutput("potion.damage" + tModifier); + case "nightvision" -> setOutput("potion.invisibility" + tModifier); + case "fireresistance", "speed" -> setOutput("potion.slowness" + tModifier); + case "strength" -> setOutput("potion.weakness" + tModifier); + case "regen" -> setOutput("potion.poison" + tModifier); + default -> setOutput("potion.weakness"); + }; + } + if (GTUtility.areStacksEqual( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L), + getInputAt(0))) { + if (!tModifier.startsWith("strong")) { + return setOutput( + "potion." + tInputName + ".strong" + (tModifier.isEmpty() ? "" : "." + tModifier)); + } + if (tModifier.startsWith("long")) { + return setOutput("potion." + tInputName + tModifier.replaceFirst("long", "")); + } + return setOutput("potion.thick"); + } + if (GTUtility + .areStacksEqual(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), getInputAt(0))) { + if (!tModifier.startsWith("long")) { + return setOutput( + "potion." + tInputName + ".long" + (tModifier.isEmpty() ? "" : "." + tModifier)); + } + if (tModifier.startsWith("strong")) { + return setOutput("potion." + tInputName + tModifier.replaceFirst("strong", "")); + } + return setOutput("potion.mundane"); + } + if (GTUtility.areStacksEqual( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1L), + getInputAt(0))) { + if (!tInputName.endsWith(".splash")) { + return setOutput("potion." + tInputName + ".splash"); + } + return setOutput("potion.mundane"); + } + } + } + return 0; + } + + private int setOutput(String aFluidName) { + if (getFillableStack().amount < 750) { + return 0; + } + + this.mOutputFluid = FluidRegistry.getFluidStack(aFluidName, 750); + if (this.mOutputFluid == null) { + this.mOutputFluid = FluidRegistry.getFluidStack("potion.mundane", getFillableStack().amount); + } + + getInputAt(0).stackSize -= 1; + getFillableStack().amount -= 750; + return 2; + } + + @Override + public boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) + && getRecipeMap().containsInput(aStack); + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return (aFluid.getFluid() + .getName() + .startsWith("potion.")) || (super.isFluidInputAllowed(aFluid)); + } + + @Override + public int getCapacity() { + return getCapacityForTier(mTier); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEPump.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEPump.java new file mode 100644 index 0000000000..a6a99a58fa --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEPump.java @@ -0,0 +1,846 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.debugBlockPump; + +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.ChunkPosition; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.IFluidBlock; + +import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; + +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.recipe.BasicUIProperties; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.common.misc.DrillingLogicDelegate; + +public class MTEPump extends MTEBasicMachine { + + private static final ItemStack MINING_PIPE = GTModHandler.getIC2Item("miningPipe", 0); + + private static final ItemStack MINING_PIPE_ONE = GTModHandler.getIC2Item("miningPipe", 1); + private static final Block MINING_PIPE_BLOCK = GTUtility.getBlockFromStack(MINING_PIPE); + private static final Block MINING_PIPE_TIP_BLOCK = GTUtility + .getBlockFromStack(GTModHandler.getIC2Item("miningPipeTip", 0)); + + public static int getMaxDistanceForTier(int aTier) { + return (10 * ((int) Math.pow(1.6D, aTier))); + } + + public static long getEuUsagePerTier(int aTier) { + return (16 * ((long) Math.pow(4, aTier))); + } + + public ArrayDeque mPumpList = new ArrayDeque<>(); + public boolean wasPumping = false; + public int mPumpTimer = 0; + public int mPumpCountBelow = 0; + public Block mPrimaryPumpedBlock = null; + public Block mSecondaryPumpedBlock = null; + + private int radiusConfig; // Pump configured radius + private boolean mRetractDone = false; + + private boolean mDisallowRetract = true; + + public MTEPump(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, + new String[] { "The best way to empty Oceans!", + getEuUsagePerTier(aTier) + " EU/operation, " + + GTUtility.safeInt(160 / 20 / (long) Math.pow(2, aTier)) + + " sec per bucket, no stuttering", + "Maximum pumping area: " + (getMaxDistanceForTier(aTier) * 2 + 1) + + "x" + + (getMaxDistanceForTier(aTier) * 2 + 1), + "Use Screwdriver to regulate pumping area", "Use Soft Mallet to disable and retract the pipe", + "Disable the bottom pump to retract the pipe!", + "Use Soldering Iron to auto retract the pipe when hitting a rock", }, + 2, + 2, + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_SIDE_ACTIVE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_SIDE_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_SIDE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_SIDE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_FRONT_ACTIVE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_FRONT_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_FRONT")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_FRONT_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_TOP_ACTIVE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_TOP_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_TOP")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_TOP_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_BOTTOM_ACTIVE")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_BOTTOM_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_BOTTOM")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/pump/OVERLAY_BOTTOM_GLOW")) + .glow() + .build())); + + radiusConfig = getMaxDistanceForTier(mTier); + } + + public MTEPump(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures, 2, 2); + radiusConfig = getMaxDistanceForTier(mTier); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPump(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + private static final FallbackableUITexture progressBarTexture = GTUITextures + .fallbackableProgressbar("pump", GTUITextures.PROGRESSBAR_CANNER); + + @Override + protected BasicUIProperties getUIProperties() { + return BasicUIProperties.builder() + .maxItemInputs(2) + .maxItemOutputs(2) + .slotOverlays((index, isFluid, isOutput, isSpecial) -> { + if (!isFluid && !isOutput && !isSpecial) { + return GTUITextures.OVERLAY_SLOT_MINING_PIPE; + } else { + return null; + } + }) + .maxFluidInputs(0) + .maxFluidOutputs(1) + .progressBarTexture(progressBarTexture) + .build(); + } + + @Override + public int getCapacity() { + return getCapacityForTier(mTier); + } + + @Override + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) + && aStack.getItem() == DrillingLogicDelegate.MINING_PIPE_STACK.getItem(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + boolean wasPumping = this.wasPumping || !this.mPumpList.isEmpty(); + if (debugBlockPump) { + GTLog.out.println( + "PUMP: NBT:Save - WasPumping - " + wasPumping + + " blocks (" + + this.mPrimaryPumpedBlock + + ", " + + this.mSecondaryPumpedBlock + + ")"); + } + super.saveNBTData(aNBT); + aNBT.setString( + "mPumpedBlock1", + this.mPrimaryPumpedBlock == null ? "" : Block.blockRegistry.getNameForObject(this.mPrimaryPumpedBlock)); + aNBT.setString( + "mPumpedBlock2", + this.mSecondaryPumpedBlock == null ? "" : Block.blockRegistry.getNameForObject(this.mSecondaryPumpedBlock)); + aNBT.setBoolean("wasPumping", wasPumping); + aNBT.setInteger("radiusConfig", radiusConfig); + aNBT.setBoolean("mRetractDone", mRetractDone); + aNBT.setBoolean("mDisallowRetract", mDisallowRetract); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.wasPumping = aNBT.getBoolean("wasPumping"); + if (aNBT.hasKey("radiusConfig")) this.radiusConfig = aNBT.getInteger("radiusConfig"); + this.mPrimaryPumpedBlock = Block.getBlockFromName(aNBT.getString("mPumpedBlock1")); + this.mSecondaryPumpedBlock = Block.getBlockFromName(aNBT.getString("mPumpedBlock2")); + this.mRetractDone = aNBT.getBoolean("mRetractDone"); + this.mDisallowRetract = aNBT.getBoolean("mDisallowRetract"); + + // Transition from old TE which was derived from GT_MetaTileEntity_Hatch + if (!aNBT.hasKey("mEUt")) { + // Output of old pump always faces up. + getBaseMetaTileEntity().setFrontFacing(ForgeDirection.UP); + + // Automatic output on. + mFluidTransfer = true; + + // Fluid was stored in the hatch, now needs to go to the output. + if (mFluid != null && mFluid.amount > 0) { + fluidOutputTank.fill(mFluid, true); + mFluid = null; + } + + // Move pipes (or other things) from old slots to new ones. + if (mInventory[1] != null && mInventory[1].stackSize > 0) { + mInventory[getInputSlot() + 1] = mInventory[1]; + mInventory[1] = null; + } + + if (mInventory[0] != null && mInventory[0].stackSize > 0) { + mInventory[getInputSlot()] = mInventory[0]; + mInventory[0] = null; + } + } + + if (debugBlockPump) { + GTLog.out.println( + "PUMP: NBT:Load - WasPumping - " + this.wasPumping + + "(" + + aNBT.getString("mPumpedBlock1") + + ") " + + this.mPrimaryPumpedBlock); + } + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + super.setItemNBT(aNBT); + aNBT.setInteger("radiusConfig", radiusConfig); + aNBT.setBoolean("mDisallowRetract", mDisallowRetract); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + + if (side == getBaseMetaTileEntity().getFrontFacing() || side == mMainFacing) { + // Configuring "input from output side allowed". + return; + } + + int max = getMaxPumpableDistance(); + if (aPlayer.isSneaking()) { + if (radiusConfig >= 0) { + radiusConfig--; + } + if (radiusConfig < 0) radiusConfig = max; + } else { + if (radiusConfig <= max) { + radiusConfig++; + } + if (radiusConfig > max) radiusConfig = 0; + } + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.workareaset") + " " + + (radiusConfig * 2 + 1) + + "x" + + (radiusConfig * 2 + 1)); // TODO Add translation support + + clearQueue(false); + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, + EntityPlayer entityPlayer, float aX, float aY, float aZ) { + if (super.onSolderingToolRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ)) return true; + mDisallowRetract = !mDisallowRetract; + GTUtility.sendChatToPlayer( + entityPlayer, + StatCollector.translateToLocal( + mDisallowRetract ? "GT5U.machines.autoretract.disabled" : "GT5U.machines.autoretract.enabled")); + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (getBaseMetaTileEntity().isServerSide()) { + this.mPumpTimer -= 1; + if ((getBaseMetaTileEntity() instanceof BaseTileEntity)) { + ((BaseTileEntity) getBaseMetaTileEntity()).ignoreUnloadedChunks = false; + } + this.doTickProfilingInThisTick = true; + this.mPumpCountBelow = 0; + + IGregTechTileEntity tTileEntity; + for (int i = 1; (i < 21) + && ((tTileEntity = getBaseMetaTileEntity() + .getIGregTechTileEntityAtSideAndDistance(ForgeDirection.DOWN, i)) != null) + && ((tTileEntity.getMetaTileEntity() instanceof MTEPump)); i++) { + // Apparently someone might stack 21 pumps on top of each other, so let's check for that + getBaseMetaTileEntity().setActive(tTileEntity.isActive()); + this.mPumpCountBelow += 1; + // The more pumps we have stacked, the faster the ones below go + ((MTEPump) tTileEntity.getMetaTileEntity()).mPumpTimer -= 1; + ((MTEPump) tTileEntity.getMetaTileEntity()).mProgresstime += 1; + } + if (debugBlockPump && (this.mPumpCountBelow != 0)) { + GTLog.out.println("PUMP: Detected " + this.mPumpCountBelow + " pumps below this pump."); + } + if (this.mPumpCountBelow <= 0) { + // Only the bottom most pump does anything + if (getBaseMetaTileEntity().isAllowedToWork()) { + mRetractDone = false; + if ((getBaseMetaTileEntity().isUniversalEnergyStored(this.getEuUsagePerAction())) + && (fluidOutputTank.getFluidAmount() + 1000 <= fluidOutputTank.getCapacity())) { + boolean tMovedOneDown = false; + if ((this.mPumpList.isEmpty()) && (getBaseMetaTileEntity().getTimer() % 100L == 0L)) { + if (!this.wasPumping) { + tMovedOneDown = moveOneDown(); + if (!tMovedOneDown) { + if (canMoveDown( + getBaseMetaTileEntity().getXCoord(), + Math.max(getYOfPumpHead() - 1, 1), + getBaseMetaTileEntity().getZCoord())) { + if (debugBlockPump) { + GTLog.out.println("PUMP: No pipe left. Idle for a little longer."); + } + this.mPumpTimer = 160; + } else { + getBaseMetaTileEntity().disableWorking(); + if (debugBlockPump) { + GTLog.out.println("PUMP: Can't move. Retracting in next few ticks"); + } + } + } else if (debugBlockPump) { + GTLog.out.println("PUMP: Moved down"); + } + } else if (debugBlockPump) { + GTLog.out.println("PUMP: Was pumping, didn't move down"); + } + } + int x = getBaseMetaTileEntity().getXCoord(), z = getBaseMetaTileEntity().getZCoord(); + + if (!this.hasValidFluid()) { + // We don't have a valid block, let's try to find one + int y = getYOfPumpHead(); + + if (debugBlockPump && this.mPrimaryPumpedBlock != null) { + GTLog.out.println( + "PUMP: Had an invalid pump block. Trying to find a fluid at Y: " + y + + " Previous blocks 1: " + + this.mPrimaryPumpedBlock + + " 2: " + + this.mSecondaryPumpedBlock); + } + // First look down + checkForFluidToPump(x, y - 1, z); + + // Then look all around + checkForFluidToPump(x, y, z + 1); + checkForFluidToPump(x, y, z - 1); + checkForFluidToPump(x + 1, y, z); + checkForFluidToPump(x - 1, y, z); + this.clearQueue(false); + + if (this.hasValidFluid()) { + // Don't move down and rebuild the queue if we now have a valid fluid + this.wasPumping = true; + } + + } else if (getYOfPumpHead() < getBaseMetaTileEntity().getYCoord()) { + // We didn't just look for a block, and the pump head is below the pump + if ((tMovedOneDown) || this.wasPumping + || ((this.mPumpList.isEmpty()) && (getBaseMetaTileEntity().getTimer() % 200L == 100L)) + || (getBaseMetaTileEntity().getTimer() % 72000L == 100L)) { + // Rebuild the list to pump if any of the following conditions are true: + // 1) We just moved down + // 2) We were previously pumping (and possibly just reloaded) + // 3) We have an empty queue and enough time has passed + // 4) A long while has passed + if (debugBlockPump) { + GTLog.out.println( + "PUMP: Rebuilding pump list - Size " + this.mPumpList.size() + + " WasPumping: " + + this.wasPumping + + " Timer " + + getBaseMetaTileEntity().getTimer()); + } + int yPump = getBaseMetaTileEntity().getYCoord() - 1, yHead = getYOfPumpHead(); + + this.rebuildPumpQueue(x, yPump, z, yHead); + + if (debugBlockPump) { + GTLog.out.println("PUMP: Rebuilt pump list - Size " + this.mPumpList.size()); + } + } + if ((!tMovedOneDown) && (this.mPumpTimer <= 0)) { + while ((!this.mPumpList.isEmpty())) { + ChunkPosition pos = this.mPumpList.pollLast(); + if (consumeFluid(pos.chunkPosX, pos.chunkPosY, pos.chunkPosZ)) { + // Keep trying until we consume something, or the list is empty + break; + } + } + this.mPumpTimer = GTUtility.safeInt(160 / (long) Math.pow(2, this.mTier)); + this.mPumpTimer = mPumpTimer == 0 ? 1 : mPumpTimer; + + mMaxProgresstime = mPumpTimer; + mProgresstime = 0; + } + } else { + // We somehow have a valid fluid, but the head of the pump isn't below the pump. Perhaps + // someone broke some pipes + // -- Clear the queue and we should try to move down until we can find a valid fluid + this.clearQueue(false); + } + } else if (debugBlockPump) { + GTLog.out.println("PUMP: Not enough energy? Free space?"); + } + } else { + mMaxProgresstime = 0; + + if (!mRetractDone && ((aTick % 5) == 0) && canOutput(MINING_PIPE_ONE)) { + // try retract if all of these conditions are met + // 1. not retracted yet + // 2. once per 5 tick + // 3. can hold retracted pipe in inventory + int tHeadY = getYOfPumpHead(); + if (tHeadY < this.getBaseMetaTileEntity() + .getYCoord()) { + final int tXCoord = this.getBaseMetaTileEntity() + .getXCoord(); + final int tZCoord = this.getBaseMetaTileEntity() + .getZCoord(); + this.getBaseMetaTileEntity() + .getWorld() + .setBlockToAir(tXCoord, tHeadY, tZCoord); + if (tHeadY < this.getBaseMetaTileEntity() + .getYCoord() - 1) { + getBaseMetaTileEntity().getWorld() + .setBlock(tXCoord, tHeadY + 1, tZCoord, MINING_PIPE_TIP_BLOCK); + } + + for (int i = 0; i < mOutputItems.length; ++i) { + if (aBaseMetaTileEntity.addStackToSlot(getOutputSlot() + i, MINING_PIPE_ONE.copy())) { + break; + } + } + + if (debugBlockPump) { + GTLog.out.println("PUMP: Retracted one pipe"); + } + } else { + mRetractDone = true; + if (debugBlockPump) { + GTLog.out.println("PUMP: Retract done"); + } + } + } + } + if (!mDisallowRetract) getBaseMetaTileEntity().setActive(!this.mPumpList.isEmpty()); + } + } + } + + private int getMaxPumpableDistance() { + return getMaxDistanceForTier(this.mTier); + } + + private long getEuUsagePerAction() { + return getEuUsagePerTier(this.mTier); + } + + private boolean hasValidFluid() { + return mPrimaryPumpedBlock != null && mSecondaryPumpedBlock != null; + } + + private boolean moveOneDown() { + boolean foundPipe = false; + + for (int i = 0; i < mInputSlotCount; i++) { + ItemStack stack = getInputAt(i); + if (stack != null && GTUtility.areStacksEqual(stack, MINING_PIPE) && stack.stackSize > 0) { + foundPipe = true; + break; + } + } + + if (!foundPipe) { + // No mining pipes + if (debugBlockPump) { + GTLog.out.println("PUMP: No mining pipes"); + } + return false; + } + + int yHead = getYOfPumpHead(); + if (yHead <= 1) { + // Let's not punch through bedrock + if (debugBlockPump) { + GTLog.out.println("PUMP: At bottom"); + } + return false; + } + + int x = getBaseMetaTileEntity().getXCoord(), z = getBaseMetaTileEntity().getZCoord(); + + Block aBlock = getBaseMetaTileEntity().getBlock(x, yHead - 1, z); + boolean canReplaceBlock = aBlock.isReplaceable(getBaseMetaTileEntity().getWorld(), x, yHead - 1, z); + + // We specifically allow replacing water even if we can't consume it + // (e.g. pump holds a different fluid) to help avoid getting stuck on random water pockets. + if (!canReplaceBlock || (isFluid(aBlock) && !consumeFluid(x, yHead - 1, z) && !isWater(aBlock))) { + // Either we didn't consume a fluid, or it's a non-replaceable block, or it's water. + if (debugBlockPump) { + GTLog.out.println("PUMP: Did not consume fluid, or non-replaceable block found"); + } + return false; + } + // Try to set the block below us to a tip + if (!GTUtility.setBlockByFakePlayer( + getFakePlayer(getBaseMetaTileEntity()), + x, + yHead - 1, + z, + MINING_PIPE_TIP_BLOCK, + 0, + false)) { + if (debugBlockPump) { + GTLog.out.println("PUMP: Could not set block below to new tip"); + } + return false; + } + // And change the previous block to a pipe -- as long as it isn't the pump itself! + if (yHead != getBaseMetaTileEntity().getYCoord()) { + getBaseMetaTileEntity().getWorld() + .setBlock(x, yHead, z, MINING_PIPE_BLOCK); + } + + // Remove pipe from inputs. + foundPipe = false; + + for (int i = 0; i < mInputSlotCount; i++) { + ItemStack stack = getInputAt(i); + if (stack != null && GTUtility.areStacksEqual(stack, MINING_PIPE) && stack.stackSize > 0) { + foundPipe = true; + stack.stackSize -= 1; + if (stack.stackSize == 0) { + mInventory[getInputSlot() + i] = null; + } + break; + } + } + + if (debugBlockPump) { + if (foundPipe) { + GTLog.out.println("PUMP: Using 1 pipe"); + } else { + GTLog.err.println("PUMP: Lowered pipe but could not find pipe in input"); + } + } + + return true; + } + + private int getYOfPumpHead() { + // Let's play find the pump head! + + // TODO: Handle pipe|pipe|head|pipe|pipe + int y = getBaseMetaTileEntity().getYCoord() - 1, x = getBaseMetaTileEntity().getXCoord(), + z = getBaseMetaTileEntity().getZCoord(); + + while (y > 0) { + Block curBlock = getBaseMetaTileEntity().getBlock(x, y, z); + if (curBlock == MINING_PIPE_BLOCK) { + y--; + } else if (curBlock == MINING_PIPE_TIP_BLOCK) { + Block nextBlock = getBaseMetaTileEntity().getBlock(x, y - 1, z); + if (nextBlock == MINING_PIPE_BLOCK || nextBlock == MINING_PIPE_TIP_BLOCK) { + // We're running into an existing set of pipes -- Turn this block into a pipe and keep going + this.clearQueue(true); + getBaseMetaTileEntity().getWorld() + .setBlock(x, y, z, MINING_PIPE_BLOCK); + if (debugBlockPump) { + GTLog.out.println("PUMP: Hit pipes already in place, trying to merge"); + } + } + y--; + + } else { + break; + } + } + + if (getBaseMetaTileEntity().getBlock(x, y, z) != MINING_PIPE_TIP_BLOCK) { + if (y != getBaseMetaTileEntity().getYCoord() - 1 + && getBaseMetaTileEntity().getBlock(x, y + 1, z) == MINING_PIPE_BLOCK) { + // We're below the pump at the bottom of the pipes, we haven't found a tip; make the previous pipe a + // tip! + this.clearQueue(true); + getBaseMetaTileEntity().getWorld() + .setBlock(x, y + 1, z, MINING_PIPE_TIP_BLOCK); + if (debugBlockPump) { + GTLog.out.println("PUMP: Did not find a tip at bottom, setting last pipe as tip"); + } + } + return y + 1; + } + return y; + } + + private void clearQueue(boolean checkPumping) { + if (checkPumping) { + this.wasPumping = !this.mPumpList.isEmpty(); + } else { + this.wasPumping = false; + } + this.mPumpList.clear(); + } + + private void rebuildPumpQueue(int aX, int yStart, int aZ, int yEnd) { + int mDist = this.radiusConfig; + doTickProfilingInThisTick = false; + ArrayDeque fluidsToSearch = new ArrayDeque<>(); + ArrayDeque fluidsFound = new ArrayDeque<>(); + Set checked = new HashSet<>(); + this.clearQueue(false); + + for (int aY = yStart; this.mPumpList.isEmpty() && aY >= yEnd; aY--) { + // Start at the top (presumably the block below the pump), and work our way down to the end (presumably the + // location of the pump Head) + // and build up a queue of fluids to pump + fluidsToSearch.add(new ChunkPosition(aX, aY, aZ)); + + while (!fluidsToSearch.isEmpty()) { + for (ChunkPosition tPos : fluidsToSearch) { + // Look all around + if (tPos.chunkPosX < aX + mDist) + queueFluid(tPos.chunkPosX + 1, tPos.chunkPosY, tPos.chunkPosZ, fluidsFound, checked); + if (tPos.chunkPosX > aX - mDist) + queueFluid(tPos.chunkPosX - 1, tPos.chunkPosY, tPos.chunkPosZ, fluidsFound, checked); + if (tPos.chunkPosZ < aZ + mDist) + queueFluid(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ + 1, fluidsFound, checked); + if (tPos.chunkPosZ > aZ - mDist) + queueFluid(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ - 1, fluidsFound, checked); + + // And then look up + queueFluid(tPos.chunkPosX, tPos.chunkPosY + 1, tPos.chunkPosZ, this.mPumpList, checked); + } + this.mPumpList.addAll(fluidsFound); + fluidsToSearch = fluidsFound; + fluidsFound = new ArrayDeque<>(); + } + + // Make sure we don't have the pipe location in the queue + this.mPumpList.remove(new ChunkPosition(aX, aY, aZ)); + } + } + + private boolean queueFluid(int aX, int aY, int aZ, ArrayDeque fluidsFound, + Set checked) { + // If we haven't already looked at this coordinate set, and it's not already in the list of fluids found, see if + // there is + // a valid fluid and add it to the fluids found + ChunkPosition tCoordinate = new ChunkPosition(aX, aY, aZ); + if (checked.add(tCoordinate) && !fluidsFound.contains(tCoordinate)) { + Block aBlock = getBaseMetaTileEntity().getBlock(aX, aY, aZ); + if ((this.mPrimaryPumpedBlock == aBlock) || (this.mSecondaryPumpedBlock == aBlock)) { + fluidsFound.addFirst(tCoordinate); + return true; + } + } + return false; + } + + private void checkForFluidToPump(int aX, int aY, int aZ) { + // If we don't currently have a valid fluid to pump, try pumping the fluid at the given coordinates + if (this.hasValidFluid()) return; + + Block aBlock = getBaseMetaTileEntity().getBlock(aX, aY, aZ); + if (aBlock != null) { + if (isWater(aBlock)) { + this.mPrimaryPumpedBlock = Blocks.water; + this.mSecondaryPumpedBlock = Blocks.flowing_water; + return; + } + if (isLava(aBlock)) { + this.mPrimaryPumpedBlock = Blocks.lava; + this.mSecondaryPumpedBlock = Blocks.flowing_lava; + return; + } + if ((aBlock instanceof IFluidBlock)) { + this.mPrimaryPumpedBlock = aBlock; + this.mSecondaryPumpedBlock = aBlock; + return; + } + } + this.mPrimaryPumpedBlock = null; + this.mSecondaryPumpedBlock = null; + } + + /** only check if block below can be replaced with pipe tip. pipe stockpile condition is ignored */ + private boolean canMoveDown(int aX, int aY, int aZ) { + if (!GTUtility.eraseBlockByFakePlayer(getFakePlayer(getBaseMetaTileEntity()), aX, aY, aZ, true)) return false; + + Block aBlock = getBaseMetaTileEntity().getBlock(aX, aY, aZ); + + return aBlock != null && aBlock.isReplaceable(getBaseMetaTileEntity().getWorld(), aX, aY, aZ); + } + + private boolean consumeFluid(int aX, int aY, int aZ) { + // Try to consume a fluid at a location + // Returns true if something was consumed, otherwise false + if (!GTUtility.eraseBlockByFakePlayer(getFakePlayer(getBaseMetaTileEntity()), aX, aY, aZ, true)) return false; + + Block aBlock = getBaseMetaTileEntity().getBlock(aX, aY, aZ); + if (!isFluid(aBlock)) { + return false; + } + + if (aBlock != null && ((this.mPrimaryPumpedBlock == aBlock) || (this.mSecondaryPumpedBlock == aBlock))) { + boolean isWaterOrLava = ((this.mPrimaryPumpedBlock == Blocks.water + || this.mPrimaryPumpedBlock == Blocks.lava)); + + if (isWaterOrLava && getBaseMetaTileEntity().getMetaID(aX, aY, aZ) != 0) { + // Water/Lava that isn't a source block - do nothing here, but set the block to air and consume energy + // below + if (debugBlockPump) { + GTLog.out.println("PUMP: Water/Lava - Not a source block"); + } + + } else if (getDrainableStack() == null) { + // The pump has no internal fluid + if (this.mPrimaryPumpedBlock == Blocks.water) setDrainableStack(GTModHandler.getWater(1000L)); + else if (this.mPrimaryPumpedBlock == Blocks.lava) setDrainableStack(GTModHandler.getLava(1000L)); + else { + // Not water or lava; try to drain and set to air + setDrainableStack( + ((IFluidBlock) aBlock).drain(getBaseMetaTileEntity().getWorld(), aX, aY, aZ, true)); + } + + } else if (GTModHandler.isWater(getDrainableStack()) || GTModHandler.isLava(getDrainableStack()) + || getDrainableStack().isFluidEqual( + ((IFluidBlock) aBlock).drain(getBaseMetaTileEntity().getWorld(), aX, aY, aZ, false))) { + if (!isWaterOrLava) { + // Only set Block to Air for non lava/water fluids + this.getBaseMetaTileEntity() + .getWorld() + .setBlockToAir(aX, aY, aZ); + } + getDrainableStack().amount += 1000; + + } else { + if (debugBlockPump) { + GTLog.out.println("PUMP: Couldn't consume " + aBlock); + } + // We didn't do anything + return false; + } + + getBaseMetaTileEntity().decreaseStoredEnergyUnits(this.getEuUsagePerAction(), true); + getBaseMetaTileEntity().getWorld() + .setBlock(aX, aY, aZ, Blocks.air, 0, 2); + return true; + } + return false; + } + + private static boolean isWater(Block aBlock) { + return aBlock == Blocks.water || aBlock == Blocks.flowing_water; + } + + private static boolean isLava(Block aBlock) { + return aBlock == Blocks.lava || aBlock == Blocks.flowing_lava; + } + + private static boolean isFluid(Block aBlock) { + return isWater(aBlock) || isLava(aBlock) || aBlock instanceof IFluidBlock; + } + + @Override + public ArrayList getSpecialDebugInfo(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, + int aLogLevel, ArrayList aList) { + aList.addAll( + Arrays.asList( + EnumChatFormatting.BLUE + StatCollector.translateToLocal("GT5U.machines.pump") + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.machines.workarea") + ": " + + EnumChatFormatting.GREEN + + (radiusConfig * 2 + 1) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.machines.blocks"), + "Primary pumping fluid: " + + (this.mPrimaryPumpedBlock != null ? this.mPrimaryPumpedBlock.getLocalizedName() : "None"), + "Secondary pumping fluid: " + + (this.mSecondaryPumpedBlock != null ? this.mSecondaryPumpedBlock.getLocalizedName() : "None"), + "Pumps below: " + mPumpCountBelow, + "Queue size: " + mPumpList.size(), + "Pump head at Y: " + getYOfPumpHead(), + "Pump timer: " + mPumpTimer, + "Meta Entity Timer: " + getBaseMetaTileEntity().getTimer())); + return aList; + } + + private FakePlayer mFakePlayer = null; + + protected FakePlayer getFakePlayer(IGregTechTileEntity aBaseTile) { + if (mFakePlayer == null) mFakePlayer = GTUtility.getFakePlayer(aBaseTile); + mFakePlayer.setWorld(aBaseTile.getWorld()); + mFakePlayer.setPosition(aBaseTile.getXCoord(), aBaseTile.getYCoord(), aBaseTile.getZCoord()); + return mFakePlayer; + } + + @Override + public String[] getInfoData() { + return new String[] { + EnumChatFormatting.BLUE + StatCollector.translateToLocal("GT5U.machines.pump") + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.machines.workarea") + ": " + + EnumChatFormatting.GREEN + + (radiusConfig * 2 + 1) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.machines.blocks") }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEReplicator.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEReplicator.java new file mode 100644 index 0000000000..6140fde577 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEReplicator.java @@ -0,0 +1,130 @@ +package gregtech.common.tileentities.machines.basic; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.MachineType; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; + +public class MTEReplicator extends MTEBasicMachine { + + public MTEReplicator(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, + MachineType.REPLICATOR.tooltipDescription(), + 1, + 1, + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_SIDE_REPLICATOR_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/replicator/OVERLAY_SIDE_REPLICATOR_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_SIDE_REPLICATOR")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_SIDE_REPLICATOR_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_FRONT_REPLICATOR_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/replicator/OVERLAY_FRONT_REPLICATOR_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_FRONT_REPLICATOR")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_FRONT_REPLICATOR_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_TOP_REPLICATOR_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/replicator/OVERLAY_TOP_REPLICATOR_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_TOP_REPLICATOR")), + TextureFactory.builder() + .addIcon(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_TOP_REPLICATOR_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of( + new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_BOTTOM_REPLICATOR_ACTIVE")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon( + "basicmachines/replicator/OVERLAY_BOTTOM_REPLICATOR_ACTIVE_GLOW")) + .glow() + .build()), + TextureFactory.of( + TextureFactory + .of(new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_BOTTOM_REPLICATOR")), + TextureFactory.builder() + .addIcon( + new Textures.BlockIcons.CustomIcon("basicmachines/replicator/OVERLAY_BOTTOM_REPLICATOR_GLOW")) + .glow() + .build())); + } + + public MTEReplicator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures, 1, 1); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEReplicator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.replicatorRecipes; + } + + @Override + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) + && ItemList.Cell_Empty.isStackEqual(aStack); + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return aFluid.isFluidEqual(Materials.UUMatter.getFluid(1L)); + } + + @Override + public int getCapacity() { + return 3000; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTERockBreaker.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTERockBreaker.java new file mode 100644 index 0000000000..68dc225793 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTERockBreaker.java @@ -0,0 +1,169 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_ROCK_BREAKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_ROCK_BREAKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_ROCK_BREAKER_GLOW; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.MachineType; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class MTERockBreaker extends MTEBasicMachine { + + public MTERockBreaker(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, + MachineType.ROCKBREAKER.tooltipDescription(), + 1, + 1, + TextureFactory.of( + TextureFactory.of(OVERLAY_SIDE_ROCK_BREAKER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_ROCK_BREAKER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_SIDE_ROCK_BREAKER), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_ROCK_BREAKER_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ROCK_BREAKER_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_ROCK_BREAKER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_ROCK_BREAKER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_ROCK_BREAKER), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_ROCK_BREAKER_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_ROCK_BREAKER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_BOTTOM_ROCK_BREAKER), + TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_ROCK_BREAKER_GLOW) + .glow() + .build())); + } + + public MTERockBreaker(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures, 1, 1); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTERockBreaker(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.rockBreakerFakeRecipes; + } + + @Override + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) + && getRecipeMap().containsInput(aStack); + } + + @Override + public boolean allowSelectCircuit() { + return true; + } + + @Override + public int checkRecipe() { + IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity(); + if ((aBaseMetaTileEntity.getBlockOffset(0, 0, 1) == Blocks.water) + || (aBaseMetaTileEntity.getBlockOffset(0, 0, -1) == Blocks.water) + || (aBaseMetaTileEntity.getBlockOffset(-1, 0, 0) == Blocks.water) + || (aBaseMetaTileEntity.getBlockOffset(1, 0, 0) == Blocks.water)) { + ItemStack tOutput = null; + if (aBaseMetaTileEntity.getBlockOffset(0, 1, 0) == Blocks.lava) { + tOutput = new ItemStack(Blocks.stone, 1); + } else if ((aBaseMetaTileEntity.getBlockOffset(0, 0, 1) == Blocks.lava) + || (aBaseMetaTileEntity.getBlockOffset(0, 0, -1) == Blocks.lava) + || (aBaseMetaTileEntity.getBlockOffset(-1, 0, 0) == Blocks.lava) + || (aBaseMetaTileEntity.getBlockOffset(1, 0, 0) == Blocks.lava)) { + tOutput = new ItemStack(Blocks.cobblestone, 1); + } + if (tOutput != null) { + if (GTUtility.areStacksEqual(getStackInSlot(getCircuitSlot()), GTUtility.getIntegratedCircuit(1))) { + if (GTUtility.areStacksEqual( + getInputAt(0), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L))) { + tOutput = new ItemStack(Blocks.obsidian, 1); + if (canOutput(tOutput)) { + getInputAt(0).stackSize -= 1; + calculateOverclockedNess(30, 128); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + this.mOutputItems[0] = tOutput; + return 2; + } + } + } else if (canOutput(tOutput)) { + calculateOverclockedNess(30, 16); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + this.mOutputItems[0] = tOutput; + return 2; + } + } + } + return 0; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEScanner.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEScanner.java new file mode 100644 index 0000000000..742a6a0e84 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEScanner.java @@ -0,0 +1,425 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.D1; +import static gregtech.api.enums.Mods.GalacticraftCore; +import static gregtech.api.enums.Mods.GalacticraftMars; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_SCANNER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_SCANNER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_SCANNER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_SCANNER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_SCANNER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_SCANNER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_SCANNER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_SCANNER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_SCANNER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_SCANNER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_SCANNER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_SCANNER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_SCANNER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_SCANNER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_SCANNER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_SCANNER_GLOW; +import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes; + +import java.util.Objects; + +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IIndividual; +import gregtech.GTMod; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.MachineType; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.AssemblyLineUtils; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.common.items.behaviors.BehaviourDataOrb; + +public class MTEScanner extends MTEBasicMachine { + + public MTEScanner(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, + MachineType.SCANNER.tooltipDescription(), + 1, + 1, + TextureFactory.of( + TextureFactory.of(OVERLAY_SIDE_SCANNER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_SCANNER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_SIDE_SCANNER), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_SCANNER_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_FRONT_SCANNER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_SCANNER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_FRONT_SCANNER), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_SCANNER_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_SCANNER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_SCANNER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_SCANNER), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_SCANNER_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_BOTTOM_SCANNER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_SCANNER_ACTIVE_GLOW) + .glow() + .build()), + TextureFactory.of( + TextureFactory.of(OVERLAY_BOTTOM_SCANNER), + TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_SCANNER_GLOW) + .glow() + .build())); + } + + public MTEScanner(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures, 1, 1); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEScanner(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public int checkRecipe() { + ItemStack aStack = getInputAt(0); + if (getOutputAt(0) != null) { + this.mOutputBlocked += 1; + } else if ((GTUtility.isStackValid(aStack)) && (aStack.stackSize > 0)) { + if ((getFillableStack() != null) && (getFillableStack().containsFluid(Materials.Honey.getFluid(100L)))) { + try { + IIndividual tIndividual = AlleleManager.alleleRegistry.getIndividual(aStack); + if (tIndividual != null) { + if (tIndividual.analyze()) { + getFillableStack().amount -= 100; + this.mOutputItems[0] = GTUtility.copyOrNull(aStack); + aStack.stackSize = 0; + NBTTagCompound tNBT = new NBTTagCompound(); + tIndividual.writeToNBT(tNBT); + this.mOutputItems[0].setTagCompound(tNBT); + calculateOverclockedNess(2, 500); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + this.mOutputItems[0] = GTUtility.copyOrNull(aStack); + aStack.stackSize = 0; + this.mMaxProgresstime = 1; + this.mEUt = 1; + return 2; + } + } catch (Throwable e) { + if (D1) { + e.printStackTrace(GTLog.err); + } + } + } + if (ItemList.IC2_Crop_Seeds.isStackEqual(aStack, true, true)) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } + if (tNBT.getByte("scan") < 4) { + tNBT.setByte("scan", (byte) 4); + calculateOverclockedNess(8, 160); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + } else { + this.mMaxProgresstime = 1; + this.mEUt = 1; + } + aStack.stackSize -= 1; + this.mOutputItems[0] = GTUtility.copyAmount(1, aStack); + assert this.mOutputItems[0] != null; + this.mOutputItems[0].setTagCompound(tNBT); + return 2; + } + if (ItemList.Tool_DataOrb.isStackEqual(getSpecialSlot(), false, true)) { + if (ItemList.Tool_DataOrb.isStackEqual(aStack, false, true)) { + aStack.stackSize -= 1; + this.mOutputItems[0] = GTUtility.copyAmount(1, getSpecialSlot()); + calculateOverclockedNess(30, 512); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + ItemData tData = GTOreDictUnificator.getAssociation(aStack); + if ((tData != null) && ((tData.mPrefix == OrePrefixes.dust) || (tData.mPrefix == OrePrefixes.cell)) + && (tData.mMaterial.mMaterial.mElement != null) + && (!tData.mMaterial.mMaterial.mElement.mIsIsotope) + && (tData.mMaterial.mMaterial != Materials.Magic) + && (tData.mMaterial.mMaterial.getMass() > 0L)) { + getSpecialSlot().stackSize -= 1; + aStack.stackSize -= 1; + + this.mOutputItems[0] = ItemList.Tool_DataOrb.get(1L); + BehaviourDataOrb.setDataTitle(this.mOutputItems[0], "Elemental-Scan"); + BehaviourDataOrb.setDataName(this.mOutputItems[0], tData.mMaterial.mMaterial.mElement.name()); + calculateOverclockedNess(30, GTUtility.safeInt(tData.mMaterial.mMaterial.getMass() * 8192L)); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + } + if (ItemList.Tool_DataStick.isStackEqual(getSpecialSlot(), false, true)) { + if (ItemList.Tool_DataStick.isStackEqual(aStack, false, true)) { + aStack.stackSize -= 1; + this.mOutputItems[0] = GTUtility.copyAmount(1, getSpecialSlot()); + calculateOverclockedNess(30, 128); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + if (aStack.getItem() == Items.written_book) { + getSpecialSlot().stackSize -= 1; + aStack.stackSize -= 1; + + this.mOutputItems[0] = GTUtility.copyAmount(1, getSpecialSlot()); + assert this.mOutputItems[0] != null; + this.mOutputItems[0].setTagCompound(aStack.getTagCompound()); + calculateOverclockedNess(30, 128); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + if (aStack.getItem() == Items.filled_map) { + getSpecialSlot().stackSize -= 1; + aStack.stackSize -= 1; + + this.mOutputItems[0] = GTUtility.copyAmount(1, getSpecialSlot()); + assert this.mOutputItems[0] != null; + this.mOutputItems[0].setTagCompound( + GTUtility + .getNBTContainingShort(new NBTTagCompound(), "map_id", (short) aStack.getItemDamage())); + calculateOverclockedNess(30, 128); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + + if ((aStack.getItem() + .getUnlocalizedName() + .contains("Schematic") + || aStack.getItem() + .getUnlocalizedName() + .contains("schematic")) + && !aStack.getItem() + .getUnlocalizedName() + .contains("Schematics")) { + if (mTier < 3) return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + String sTier = ""; + + int stackItemID = Item.getIdFromItem(aStack.getItem()); + int stackItemDamage = aStack.getItemDamage(); + if (stackItemID == Item.getIdFromItem( + Objects.requireNonNull(GTModHandler.getModItem(GalacticraftCore.ID, "item.schematic", 1L, 0)) + .getItem())) { + if (stackItemDamage == 0 && aStack.toString() + .equals( + Objects + .requireNonNull( + GTModHandler.getModItem(GalacticraftCore.ID, "item.schematic", 1L, 0)) + .copy() + .toString())) + sTier = "100"; + else if (stackItemDamage == 1 && aStack.toString() + .equals( + Objects + .requireNonNull( + GTModHandler.getModItem(GalacticraftCore.ID, "item.schematic", 1L, 1)) + .copy() + .toString())) + sTier = "2"; + } else { + if (stackItemID == Item.getIdFromItem( + Objects + .requireNonNull(GTModHandler.getModItem(GalacticraftMars.ID, "item.schematic", 1L, 0)) + .getItem())) { + if (stackItemDamage == 0 && aStack.toString() + .equals( + Objects + .requireNonNull( + GTModHandler.getModItem(GalacticraftMars.ID, "item.schematic", 1L, 0)) + .copy() + .toString())) + sTier = "3"; + else if (stackItemDamage == 1 && aStack.toString() + .equals( + Objects + .requireNonNull( + GTModHandler.getModItem(GalacticraftMars.ID, "item.schematic", 1L, 1)) + .copy() + .toString())) + sTier = "101"; + else if (stackItemDamage == 2 && aStack.toString() + .equals( + Objects + .requireNonNull( + GTModHandler.getModItem(GalacticraftMars.ID, "item.schematic", 1L, 2)) + .copy() + .toString())) + sTier = "102"; + } else if (aStack.getUnlocalizedName() + .matches(".*\\d+.*")) + sTier = aStack.getUnlocalizedName() + .split("(?<=\\D)(?=\\d)")[1].substring(0, 1); + else sTier = "1"; + } + + getSpecialSlot().stackSize -= 1; + aStack.stackSize -= 1; + + this.mOutputItems[0] = GTUtility.copyAmount(1, getSpecialSlot()); + assert this.mOutputItems[0] != null; + this.mOutputItems[0].setTagCompound( + GTUtility.getNBTContainingShort(new NBTTagCompound(), "rocket_tier", Short.parseShort(sTier))); + + calculateOverclockedNess(480, 36000); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + } + if (getSpecialSlot() == null && ItemList.Tool_DataStick.isStackEqual(aStack, false, true)) { + if (GTUtility.ItemNBT.getBookTitle(aStack) + .equals("Raw Prospection Data")) { + GTUtility.ItemNBT.setBookTitle(aStack, "Analyzed Prospection Data"); + GTUtility.ItemNBT.convertProspectionData(aStack); + aStack.stackSize -= 1; + + this.mOutputItems[0] = GTUtility.copyAmount(1, aStack); + calculateOverclockedNess(30, 1000); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + return 2; + } + } + if (ItemList.Tool_DataStick.isStackEqual(getSpecialSlot(), false, true)) { + for (GTRecipe.RecipeAssemblyLine tRecipe : GTRecipe.RecipeAssemblyLine.sAssemblylineRecipes) { + if (GTUtility.areStacksEqual(tRecipe.mResearchItem, aStack, true)) { + boolean failScanner = true; + for (GTRecipe scannerRecipe : scannerFakeRecipes.getAllRecipes()) { + if (GTUtility.areStacksEqual(scannerRecipe.mInputs[0], aStack, true)) { + failScanner = false; + break; + } + } + if (failScanner) { + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + } + + this.mOutputItems[0] = GTUtility.copyAmount(1, getSpecialSlot()); + + // Use Assline Utils + if (AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(this.mOutputItems[0], tRecipe)) { + aStack.stackSize -= 1; + calculateOverclockedNess(30, tRecipe.mResearchTime); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + getSpecialSlot().stackSize -= 1; + return 2; + } + } + } + } + } + return 0; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (mProgresstime >= (mMaxProgresstime - 1)) { + if ((this.mOutputItems[0] != null) && (this.mOutputItems[0].getUnlocalizedName() + .equals("gt.metaitem.01.32707"))) { + GTMod.achievements.issueAchievement( + aBaseMetaTileEntity.getWorld() + .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), + "scanning"); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public RecipeMap getRecipeMap() { + return scannerFakeRecipes; + } + + @Override + public int getCapacity() { + return 1000; + } + + @Override + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) + && getRecipeMap().containsInput(aStack); + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTETeleporter.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTETeleporter.java new file mode 100644 index 0000000000..cb7d6d6d71 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTETeleporter.java @@ -0,0 +1,586 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_SIDES; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_SIDES_GLOW; + +import java.util.List; +import java.util.function.Consumer; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityHanging; +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.boss.EntityDragonPart; +import net.minecraft.entity.effect.EntityWeatherEffect; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityEnderCrystal; +import net.minecraft.entity.item.EntityEnderEye; +import net.minecraft.entity.item.EntityFireworkRocket; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.item.EntityTNTPrimed; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.entity.projectile.EntityFireball; +import net.minecraft.entity.projectile.EntityFishHook; +import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.inventory.IInventory; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.common.config.machinestats.ConfigTeleporter; + +public class MTETeleporter extends MTEBasicTank implements IAddGregtechLogo, IAddUIWidgets { + + private static boolean sInterDimensionalTeleportAllowed = true; + private static int sPassiveEnergyDrain = 2048; + private static int sPowerMultiplyer = 100; + private static double sFPowerMultiplyer = 1.0; + public int mTargetX = 0; + public int mTargetY = 0; + public int mTargetZ = 0; + public int mTargetD = Integer.MIN_VALUE; + public boolean mDebug = false; + + public MTETeleporter(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 3, + new String[] { "Teleport long distances with this little device.", "Use a Dragon Egg or Nitrogen Plasma", + "for Inter-dimensional transmission" }); + } + + public MTETeleporter(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + public MTETeleporter(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + private static float calculateWeight(Entity aEntity) { + if ((aEntity instanceof EntityFishHook)) { + return -1.0F; + } + if ((aEntity instanceof EntityDragonPart)) { + return -1.0F; + } + if ((aEntity instanceof EntityWeatherEffect)) { + return -1.0F; + } + if ((aEntity instanceof EntityPlayer tPlayer)) { + int tCount = 64; + for (int i = 0; i < 36; i++) { + if (tPlayer.inventory.getStackInSlot(i) != null) { + tCount += (tPlayer.inventory.getStackInSlot(i) + .getMaxStackSize() > 1 ? tPlayer.inventory.getStackInSlot(i).stackSize : 64); + } + } + for (int i = 0; i < 4; i++) { + if (tPlayer.inventory.armorInventory[i] != null) { + tCount += 256; + } + } + return Math.min(5.0F, tCount / 666.6F); + } + if (GTUtility.getClassName(aEntity) + .equals("EntityItnt")) { + return 5.0F; + } + if (GTUtility.getClassName(aEntity) + .equals("EntityNuke")) { + return 50.0F; + } + if ((aEntity instanceof EntityArrow)) { + return 0.001F; + } + if ((aEntity instanceof EntityBoat)) { + return 0.1F; + } + if ((aEntity instanceof EntityEnderCrystal)) { + return 2.0F; + } + if ((aEntity instanceof EntityEnderEye)) { + return 0.001F; + } + if ((aEntity instanceof EntityFireball)) { + return 0.001F; + } + if ((aEntity instanceof EntityFireworkRocket)) { + return 0.001F; + } + if ((aEntity instanceof EntityHanging)) { + return 0.005F; + } + if ((aEntity instanceof EntityItem)) { + return 0.001F; + } + if ((aEntity instanceof EntityLiving)) { + return 0.5F; + } + if ((aEntity instanceof EntityMinecart)) { + return 0.1F; + } + if ((aEntity instanceof EntityThrowable)) { + return 0.001F; + } + if ((aEntity instanceof EntityTNTPrimed)) { + return 5.0F; + } + if ((aEntity instanceof EntityXPOrb)) { + return 0.001F; + } + return -1.0F; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) return true; + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTETeleporter(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { "Coordinates:", + "X: " + EnumChatFormatting.GREEN + GTUtility.formatNumbers(this.mTargetX) + EnumChatFormatting.RESET, + "Y: " + EnumChatFormatting.GREEN + GTUtility.formatNumbers(this.mTargetY) + EnumChatFormatting.RESET, + "Z: " + EnumChatFormatting.GREEN + GTUtility.formatNumbers(this.mTargetZ) + EnumChatFormatting.RESET, + "Dimension: " + EnumChatFormatting.GREEN + this.mTargetD + EnumChatFormatting.RESET, + "Dimension Valid: " + (GTUtility.isRealDimension(this.mTargetD) + ? EnumChatFormatting.GREEN + "Yes" + EnumChatFormatting.RESET + : EnumChatFormatting.RED + "No" + EnumChatFormatting.RESET), + "Dimension Registered: " + (DimensionManager.isDimensionRegistered(this.mTargetD) + ? EnumChatFormatting.GREEN + "Yes" + EnumChatFormatting.RESET + : EnumChatFormatting.RED + "No" + EnumChatFormatting.RESET) }; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side != this.getBaseMetaTileEntity() + .getFrontFacing()) + return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_TELEPORTER_SIDES), + TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_SIDES_GLOW) + .glow() + .build() }; + if (aActive) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], + TextureFactory.of(OVERLAY_TELEPORTER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_ACTIVE_GLOW) + .glow() + .build() }; + return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_TELEPORTER), + TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_GLOW) + .glow() + .build() }; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + if (mFluid != null) aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); + aNBT.setInteger("mTargetX", this.mTargetX); + aNBT.setInteger("mTargetY", this.mTargetY); + aNBT.setInteger("mTargetZ", this.mTargetZ); + aNBT.setInteger("mTargetD", this.mTargetD); + aNBT.setBoolean("mDebug", this.mDebug); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mFluid = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mFluid")); + this.mTargetX = aNBT.getInteger("mTargetX"); + this.mTargetY = aNBT.getInteger("mTargetY"); + this.mTargetZ = aNBT.getInteger("mTargetZ"); + this.mTargetD = aNBT.getInteger("mTargetD"); + this.mDebug = aNBT.getBoolean("mDebug"); + } + + @Override + public void onConfigLoad() { + sInterDimensionalTeleportAllowed = ConfigTeleporter.interDimensionalTPAllowed; + sPassiveEnergyDrain = ConfigTeleporter.passiveEnergyDrain; + sPowerMultiplyer = ConfigTeleporter.powerMultiplier; + sFPowerMultiplyer = sPowerMultiplyer / 100.0; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + if (getBaseMetaTileEntity().isServerSide()) { + if ((this.mTargetX == 0) && (this.mTargetY == 0) + && (this.mTargetZ == 0) + && (this.mTargetD == Integer.MIN_VALUE)) { + this.mTargetX = aBaseMetaTileEntity.getXCoord(); + this.mTargetY = aBaseMetaTileEntity.getYCoord(); + this.mTargetZ = aBaseMetaTileEntity.getZCoord(); + this.mTargetD = aBaseMetaTileEntity.getWorld().provider.dimensionId; + } + } + } + + public boolean hasDimensionalTeleportCapability() { + return this.mDebug || sInterDimensionalTeleportAllowed; + } + + public boolean isDimensionalTeleportAvailable() { + return this.mDebug || (hasDimensionalTeleportCapability() && GTUtility.isRealDimension(this.mTargetD) + && GTUtility.isRealDimension(getBaseMetaTileEntity().getWorld().provider.dimensionId)); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + + if (mFluid != null) { // Was if null -> Materials.Nitrogen.getPlasma(0); + mFluid = null; + } + super.onPostTick(aBaseMetaTileEntity, aTick); + if (getBaseMetaTileEntity().isServerSide()) { + if ((getBaseMetaTileEntity().isAllowedToWork()) && (getBaseMetaTileEntity().getRedstone())) { + if (getBaseMetaTileEntity().decreaseStoredEnergyUnits(sPassiveEnergyDrain, false)) { + int tDistance = distanceCalculation(); + if (mInventory[0] != null) { + TileEntity tTile = null; + if (this.mTargetD == getBaseMetaTileEntity().getWorld().provider.dimensionId) { + tTile = getBaseMetaTileEntity().getTileEntity(this.mTargetX, this.mTargetY, this.mTargetZ); + } else { + World tWorld = DimensionManager.getWorld(this.mTargetD); + if (tWorld != null) { + tTile = tWorld.getTileEntity(this.mTargetX, this.mTargetY, this.mTargetZ); + } + } + if (tTile instanceof IInventory) { + int tStacksize = mInventory[0].stackSize; + GTUtility.moveOneItemStack( + this, + tTile, + ForgeDirection.DOWN, + ForgeDirection.DOWN, + null, + false, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1); + if (mInventory[0] == null || mInventory[0].stackSize < tStacksize) { + getBaseMetaTileEntity().decreaseStoredEnergyUnits( + (long) (Math.pow(tDistance, 1.5) * tDistance + * (tStacksize - (mInventory[0] == null ? 0 : mInventory[0].stackSize)) + * sFPowerMultiplyer), + false); + } + } + } + List entities_in_box = getBaseMetaTileEntity().getWorld() + .getEntitiesWithinAABB( + Entity.class, + AxisAlignedBB.getBoundingBox( + getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 2) - 1, + getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 2) - 1, + getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 2) - 1, + getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 2) + 2, + getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 2) + 2, + getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 2) + 2)); + + for (Object tObject : entities_in_box) { + if (((tObject instanceof Entity tEntity)) && (!((Entity) tObject).isDead)) { + if (getBaseMetaTileEntity().decreaseStoredEnergyUnits( + (long) (Math.pow(tDistance, 1.5) * calculateWeight(tEntity) * sFPowerMultiplyer), + false)) { + + if (tEntity.ridingEntity != null) { + tEntity.mountEntity(null); + } + if (tEntity.riddenByEntity != null) { + tEntity.riddenByEntity.mountEntity(null); + } + if ((this.mTargetD == getBaseMetaTileEntity().getWorld().provider.dimensionId) + || (!isDimensionalTeleportAvailable()) + || (!GTUtility.moveEntityToDimensionAtCoords( + tEntity, + this.mTargetD, + this.mTargetX + 0.5D, + this.mTargetY + 0.5D, + this.mTargetZ + 0.5D))) { + if ((tEntity instanceof EntityLivingBase)) { + ((EntityLivingBase) tEntity).setPositionAndUpdate( + this.mTargetX + 0.5D, + this.mTargetY + 0.5D, + this.mTargetZ + 0.5D); + } else { + tEntity.setPosition( + this.mTargetX + 0.5D, + this.mTargetY + 0.5D, + this.mTargetZ + 0.5D); + } + } + } + } + } + } + getBaseMetaTileEntity().setActive(true); + } else { + getBaseMetaTileEntity().setActive(false); + } + } + } + + private int distanceCalculation() { + return Math.abs( + ((this.mTargetD != getBaseMetaTileEntity().getWorld().provider.dimensionId) + && (isDimensionalTeleportAvailable()) + ? 4000 + : (int) Math.sqrt( + Math.pow(getBaseMetaTileEntity().getXCoord() - this.mTargetX, 2.0D) + + Math.pow(getBaseMetaTileEntity().getYCoord() - this.mTargetY, 2.0D) + + Math.pow(getBaseMetaTileEntity().getZCoord() - this.mTargetZ, 2.0D)))); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isOverclockerUpgradable() { + return false; + } + + @Override + public boolean isTransformerUpgradable() { + return false; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return true; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return V[mTier] * 16; + } + + @Override + public long maxEUStore() { + return 100000000; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxSteamStore() { + return maxEUStore(); + } + + @Override + public long maxAmperesIn() { + return 2; + } + + @Override + public int getStackDisplaySlot() { + return 2; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public int getInputSlot() { + return 0; + } + + @Override + public int getOutputSlot() { + return 0; + } + + @Override + public int getCapacity() { + return 64000; + } + + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public boolean displaysItemStack() { + return false; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return null; + } + + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setSize(90, 72) + .setPos(43, 4)) + .widget( + new TextWidget().setStringSupplier(() -> "X: " + numberFormat.format(mTargetX)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 8)) + .widget( + new TextWidget().setStringSupplier(() -> "Y: " + numberFormat.format(mTargetY)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 16)) + .widget( + new TextWidget().setStringSupplier(() -> "Z: " + numberFormat.format(mTargetZ)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 24)) + .widget( + new TextWidget().setStringSupplier(() -> "Dim: " + numberFormat.format(mTargetD)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 32)) + .widget( + TextWidget.dynamicString(() -> "Dim Valid: " + (GTUtility.isRealDimension(mTargetD) ? "Yes" : "No")) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> hasDimensionalTeleportCapability()) + .setPos(46, 40)) + .widget(new FakeSyncWidget.FluidStackSyncer(() -> mFluid, val -> mFluid = val)); + + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, -512, -64, 7); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, -16, -1, 25); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, 16, 1, 133); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, 512, 64, 151); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> mTargetD += val, -16, -8, 7, 58); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> mTargetD += val, -4, -1, 25, 58); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> mTargetD += val, 4, 1, 133, 58); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> mTargetD += val, 16, 8, 151, 58); + } + + private void addChangeNumberButtons(ModularWindow.Builder builder, IDrawable overlay, int addNumberShift, + int addNumber, int xPos) { + addChangeNumberButton(builder, overlay, val -> mTargetX += val, addNumberShift, addNumber, xPos, 4); + addChangeNumberButton(builder, overlay, val -> mTargetY += val, addNumberShift, addNumber, xPos, 22); + addChangeNumberButton(builder, overlay, val -> mTargetZ += val, addNumberShift, addNumber, xPos, 40); + } + + private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, + int addNumberShift, int addNumber, int xPos, int yPos) { + builder.widget( + new ButtonWidget() + .setOnClick((clickData, widget) -> setter.accept(clickData.shift ? addNumberShift : addNumber)) + .setBackground(GTUITextures.BUTTON_STANDARD, overlay) + .setSize(18, 18) + .setPos(xPos, yPos)); + } + + @Override + public GUITextureSet getGUITextureSet() { + return new GUITextureSet().setGregTechLogo(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) + .setSize(17, 17) + .setPos(113, 56)); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTETurboCharger.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTETurboCharger.java new file mode 100644 index 0000000000..3e1ebd298e --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTETurboCharger.java @@ -0,0 +1,145 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.V; + +import net.minecraft.item.ItemStack; + +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.BaseMetaTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +/** + * Created by danie_000 on 15.10.2016. + */ +public class MTETurboCharger extends MTECharger { + + public MTETurboCharger(int aID, String aName, String aNameRegional, int aTier, String aDescription, + int aSlotCount) { + super(aID, aName, aNameRegional, aTier, aDescription, aSlotCount); + } + + public MTETurboCharger(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, int aSlotCount) { + super(aName, aTier, aDescription, aTextures, aSlotCount); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTETurboCharger(mName, mTier, mDescriptionArray, mTextures, mInventory.length); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[2][17][]; + for (byte b = -1; b < 16; b++) { + rTextures[0][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1] }; + rTextures[1][b + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][b + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_POWER[mTier] }; + } + return rTextures; + } + + @Override + public long getMinimumStoredEU() { + return V[mTier] * 1536L * mInventory.length; + } + + @Override + public long maxEUStore() { + return V[mTier] * 6144L * mInventory.length; + } + + @Override + public long maxAmperesIn() { + return 16L * mInventory.length; + } + + @Override + public long maxAmperesOut() { + return 4L * mInventory.length; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + + mCharge = aBaseMetaTileEntity.getStoredEU() / 2 > aBaseMetaTileEntity.getEUCapacity() / 3 + || !aBaseMetaTileEntity.isAllowedToWork(); + mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3 + && aBaseMetaTileEntity.isAllowedToWork(); + mBatteryCount = 0; + mChargeableCount = 0; + for (ItemStack tStack : mInventory) { + if (GTModHandler.isElectricItem(tStack, mTier)) { + if (GTModHandler.isChargerItem(tStack)) { + mBatteryCount++; + } + mChargeableCount++; + } + } + + if (getBaseMetaTileEntity() instanceof BaseMetaTileEntity) { + BaseMetaTileEntity mBaseMetaTileEntity = (BaseMetaTileEntity) getBaseMetaTileEntity(); + if (mBaseMetaTileEntity.getMetaTileEntity() instanceof MetaTileEntity) { + MetaTileEntity mMetaTileEntity = (MetaTileEntity) mBaseMetaTileEntity.getMetaTileEntity(); + if (mMetaTileEntity.dechargerSlotCount() > 0 + && mBaseMetaTileEntity.getStoredEU() < mBaseMetaTileEntity.getEUCapacity()) { + for (int i = mMetaTileEntity.dechargerSlotStartIndex(), + k = mMetaTileEntity.dechargerSlotCount() + i; i < k; i++) { + if (mMetaTileEntity.mInventory[i] != null + && mBaseMetaTileEntity.getStoredEU() < mBaseMetaTileEntity.getEUCapacity()) { + // CODE + mBaseMetaTileEntity.increaseStoredEnergyUnits( + GTModHandler.dischargeElectricItem( + mMetaTileEntity.mInventory[i], + GTUtility.safeInt( + Math.min( + V[mTier] * 120, + mBaseMetaTileEntity.getEUCapacity() + - mBaseMetaTileEntity.getStoredEU())), + (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getInputTier()), + true, + false, + false), + true); + if (mMetaTileEntity.mInventory[i].stackSize <= 0) { + mMetaTileEntity.mInventory[i] = null; + } + } + } + } + if (mMetaTileEntity.rechargerSlotCount() > 0 && mBaseMetaTileEntity.getStoredEU() > 0) { + for (int i = mMetaTileEntity.rechargerSlotStartIndex(), + k = mMetaTileEntity.rechargerSlotCount() + i; i < k; i++) { + if (mBaseMetaTileEntity.getStoredEU() > 0 && mMetaTileEntity.mInventory[i] != null) { + // CODE + mBaseMetaTileEntity + .decreaseStoredEU( + GTModHandler.chargeElectricItem( + mMetaTileEntity.mInventory[i], + GTUtility + .safeInt(Math.min(V[mTier] * 120, mBaseMetaTileEntity.getStoredEU())), + (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getOutputTier()), + true, + false), + true); + if (mMetaTileEntity.mInventory[i].stackSize <= 0) { + mMetaTileEntity.mInventory[i] = null; + } + } + } + } + } + } + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/MTEWorldAccelerator.java b/src/main/java/gregtech/common/tileentities/machines/basic/MTEWorldAccelerator.java new file mode 100644 index 0000000000..a89064ba35 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/basic/MTEWorldAccelerator.java @@ -0,0 +1,470 @@ +package gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Mods.GregTech; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import eu.usrv.yamcore.auxiliary.PlayerChatHelper; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTLog; + +public class MTEWorldAccelerator extends MTETieredMachineBlock { + + // simple name is rather expensive to compute and it's not cached + // see https://stackoverflow.com/q/17369304 + private static final ClassValue simpleNameCache = new ClassValue() { + + @Override + protected String computeValue(Class type) { + return type.getSimpleName(); + } + }; + private static final HashSet> _mBlacklistedTiles = new HashSet<>(); + + public static boolean addTileToBlacklist(Class clazz) { + return _mBlacklistedTiles.add(clazz); + } + + public static boolean addTileToBlacklist(TileEntity tileEntity) { + return _mBlacklistedTiles.add(tileEntity.getClass()); + } + + public static HashSet> get_mBlacklistedTiles() { + return _mBlacklistedTiles; + } + + private int _mRadiusTierOverride = -1; + private int _mSpeedTierOverride = -1; + + private int getRadiusTierOverride() { + if (_mRadiusTierOverride == -1) _mRadiusTierOverride = mTier; + return _mRadiusTierOverride; + } + + private int getSpeedTierOverride() { + if (_mSpeedTierOverride == -1) _mSpeedTierOverride = mTier; + return _mSpeedTierOverride; + } + + private int incSpeedTierOverride() { + _mSpeedTierOverride = getSpeedTierOverride() + 1; + if (_mSpeedTierOverride > mTier) _mSpeedTierOverride = 1; + + return _mSpeedTierOverride; + } + + private int incRadiusTierOverride() { + // Make sure we get the Override value first, as we check it for initial -1 + _mRadiusTierOverride = getRadiusTierOverride() + 1; + if (_mRadiusTierOverride > mTier) _mRadiusTierOverride = 1; + + return _mRadiusTierOverride; + } + + private byte mMode = 0; // 0: RandomTicks around 1: TileEntities with range 1 + private static Textures.BlockIcons.CustomIcon _mGTIco_Norm_Idle; + private static Textures.BlockIcons.CustomIcon _mGTIco_Norm_Active; + private static Textures.BlockIcons.CustomIcon _mGTIco_TE_Idle; + private static Textures.BlockIcons.CustomIcon _mGTIco_TE_Active; + private static int[] mAccelerateStatic = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 512, 512, 512, 512, 512, 512 }; + private static final int AMPERAGE_NORMAL = 3; + private static final int AMPERAGE_TE = 6; + + @Override + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + _mGTIco_Norm_Idle = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_ACCELERATOR"); + _mGTIco_Norm_Active = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_ACCELERATOR_ACTIVE"); + _mGTIco_TE_Idle = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_ACCELERATOR_TE"); + _mGTIco_TE_Active = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_ACCELERATOR_TE_ACTIVE"); + } + + @SideOnly(Side.CLIENT) + @Override + public void onValueUpdate(byte aValue) { + mMode = aValue; + } + + @Override + public byte getUpdateData() { + return mMode; + } + + public MTEWorldAccelerator(int pID, String pName, String pNameRegional, int pTier) { + super(pID, pName, pNameRegional, pTier, 0, ""); + } + + @Override + public String[] getDescription() { + return new String[] { + String + .format("Accelerating things (Max Radius: %d | Max Speed Bonus: x%d)", mTier, mAccelerateStatic[mTier]), + "Use a screwdriver to change mode, sneak to change Radius", "Use a wrench to change speed", + "To accelerate TileEntities, this machine has to be adjacent to it", + String.format("Normal mode consumes up to %s amperage, depending on radius", AMPERAGE_NORMAL), + String.format("TE mode consumes %s amperage", AMPERAGE_TE) }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + List tInfoDisplay = new ArrayList<>(); + + tInfoDisplay.add(String.format("Accelerator running in %s mode", mModeStr[mMode])); + tInfoDisplay.add( + String.format( + "Speed setting: [%d / %d]", + mAccelerateStatic[getSpeedTierOverride()], + mAccelerateStatic[mTier])); + tInfoDisplay.add( + String.format( + "Consuming %d EU/t", + getEnergyDemand(getSpeedTierOverride(), getRadiusTierOverride(), mMode == 1))); + + // Don't show radius setting if in TE Mode + if (mMode == 0) tInfoDisplay.add(String.format("Radius setting: [%d / %d]", getRadiusTierOverride(), mTier)); + + return tInfoDisplay.toArray(new String[0]); + } + + public MTEWorldAccelerator(String pName, int pTier, int pInvSlotCount, String[] pDescription, + ITexture[][][] pTextures) { + super(pName, pTier, pInvSlotCount, pDescription, pTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity pTileEntity) { + return new MTEWorldAccelerator(mName, mTier, mInventory.length, mDescriptionArray, mTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] pTextures) { + return null; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity pBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean pActive, boolean pRedstone) { + if (mMode == 0) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], side.offsetY != 0 ? null + : pActive ? new GTRenderedTexture(_mGTIco_Norm_Active) : new GTRenderedTexture(_mGTIco_Norm_Idle) }; + } else { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][colorIndex + 1], side.offsetY != 0 ? null + : pActive ? new GTRenderedTexture(_mGTIco_TE_Active) : new GTRenderedTexture(_mGTIco_TE_Idle) }; + } + } + + @Override + public boolean allowPullStack(IGregTechTileEntity pBaseMetaTileEntity, int pIndex, ForgeDirection side, + ItemStack pStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity pBaseMetaTileEntity, int pIndex, ForgeDirection side, + ItemStack pStack) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound pNBT) { + pNBT.setByte("mAccelMode", mMode); + + // SpeedOverride can never be larger than mTier; Which will never exceed 255, so it's safe to cast here + pNBT.setByte("mSpeed", (byte) getSpeedTierOverride()); + pNBT.setByte("mRadius", (byte) getRadiusTierOverride()); + } + + public long getEnergyDemand(int pSpeedTier, int pRangeTier, boolean pIsAcceleratingTEs) { + // TE mode does not need to consider range setting + if (pIsAcceleratingTEs) return V[pSpeedTier] * AMPERAGE_TE; + + // Include range setting into power calculation + float multiplier = 100.0F / (float) mTier * (float) pRangeTier / 100.0F; + long demand = V[pSpeedTier] * AMPERAGE_NORMAL; + + float tDemand = demand * multiplier; + + return (int) tDemand; + } + + @Override + public void loadNBTData(NBTTagCompound pNBT) { + mMode = pNBT.getByte("mAccelMode"); + + // Make sure we're not crashing with old Accelerator Machines + if (pNBT.hasKey("mSpeed")) _mSpeedTierOverride = pNBT.getByte("mSpeed"); + if (pNBT.hasKey("mRadius")) _mRadiusTierOverride = pNBT.getByte("mRadius"); + } + + @Override + public boolean isAccessAllowed(EntityPlayer pPlayer) { + return true; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return true; + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 512; + } + + @Override + public long maxEUStore() { + return 512 + V[mTier] * 50; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxAmperesIn() { + return 8; + } + + private static String[] mModeStr = { "Blocks", "TileEntities" }; + + // This uses the Wrench as second tool to cycle speeds + @Override + public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer pPlayer, float aX, + float aY, float aZ) { + incSpeedTierOverride(); + + markDirty(); + PlayerChatHelper.SendInfo( + pPlayer, + String.format("Machine acceleration changed to x%d", mAccelerateStatic[getSpeedTierOverride()])); + + return true; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer pPlayer, float pX, float pY, float pZ) { + if (pPlayer.isSneaking()) { + if (mMode == 0) { + incRadiusTierOverride(); + + markDirty(); + PlayerChatHelper + .SendInfo(pPlayer, String.format("Machine radius changed to %d Blocks", getRadiusTierOverride())); + } else PlayerChatHelper + .SendError(pPlayer, String.format("Can't change radius; Machine is in TileEntity Mode!")); + } else { + mMode = (byte) (mMode == 0x00 ? 0x01 : 0x00); + markDirty(); + PlayerChatHelper.SendInfo(pPlayer, String.format("Switched mode to: %s", mModeStr[mMode])); + } + } + + @Override + public void onPostTick(IGregTechTileEntity pBaseMetaTileEntity, long pTick) { + try { + if (!pBaseMetaTileEntity.isServerSide()) { + return; + } + + long tEnergyDemand = getEnergyDemand(getSpeedTierOverride(), getRadiusTierOverride(), mMode == 1); + + // Do we have enough energy to run? Or are we not allowed to run? + if (pBaseMetaTileEntity.getStoredEU() < tEnergyDemand || !pBaseMetaTileEntity.isAllowedToWork()) { + // Check if machine was active before + if (pBaseMetaTileEntity.isActive()) { + pBaseMetaTileEntity.setActive(false); // Then disable it now + } + } else { + // Continue to drain power + if (pBaseMetaTileEntity.decreaseStoredEnergyUnits(tEnergyDemand, false)) { + World tWorld = pBaseMetaTileEntity.getWorld(); + // Limit the random ticks to once per second + if (mMode == 0) { + if (pTick % 20 == 0) { + doAccelerateNormalBlocks(pBaseMetaTileEntity, tWorld); + } + } else { + doAccelerateTileEntities(pBaseMetaTileEntity, tWorld); + } + + } else { + // Energy drain failed. Disable machine + if (pBaseMetaTileEntity.isActive()) { + pBaseMetaTileEntity.setActive(false); // Then disable it now + } + } + } + } catch (Exception e) { + GTLog.err.println("GT_MetaTileEntity_WorldAccelerator.onPostTick.crash\n" + e.getMessage()); + } + } + + private void doAccelerateTileEntities(IGregTechTileEntity pBaseMetaTileEntity, World pWorld) { + try { + if (!pBaseMetaTileEntity.isActive()) { + getBaseMetaTileEntity().setActive(true); + } + + for (ForgeDirection tDir : ForgeDirection.VALID_DIRECTIONS) { + TileEntity tTile = pBaseMetaTileEntity.getTileEntityAtSide(tDir); + if (isTEBlackListed(tTile)) { + continue; + } + + long tMaxTime = System.nanoTime() + 1000000; + for (int j = 0; j < mAccelerateStatic[getSpeedTierOverride()]; j++) { + tTile.updateEntity(); + if (System.nanoTime() > tMaxTime) { + break; + } + } + } + } catch (Exception e) { + GTLog.err.println("GT_MetaTileEntity_WorldAccelerator.doAccelerateTileEntities.crash\n" + e.getMessage()); + } + } + + // Inspired by ChromatiCraft's TileAccelerator + private boolean isTEBlackListed(TileEntity pTile) { + if (pTile == null) { + return true; // Obvious + } + if (!pTile.canUpdate()) { + return true; // Skip if TE can't update at all + } + if (pTile.isInvalid()) { + return true; // Obvious + } + + String tSimpleClassName = simpleNameCache.get(pTile.getClass()); + String tCanonicalName = pTile.getClass() + .getCanonicalName() + .toLowerCase(); + if (tSimpleClassName.contains("conduit") || tSimpleClassName.contains("wire") + || tSimpleClassName.contains("cable")) { + return true; + } + if (tCanonicalName.contains("appeng") || tCanonicalName.contains(GregTech.ID)) // Don't accelerate ANY gregtech + // machines + { + return true; + } + if (tSimpleClassName.contains("solar") || tCanonicalName.contains("solar")) // Don't accelerate ANY solars + { + return true; + } + + for (String tS : GTValues.blacklistedTileEntiyClassNamesForWA) { + if (tCanonicalName.equalsIgnoreCase(tS)) { + return true; + } + } + + return MTEWorldAccelerator._mBlacklistedTiles.stream() + .map(Class::getCanonicalName) + .map(String::toLowerCase) + .anyMatch(tCanonicalName::equalsIgnoreCase); + } + + /** + * Accelerate normal blocks. Eats some power and adds randomTicks to every block within its working area + * (Tier-Number = radius) This does only affect blocks that implement the "RandomTick" method; Which is mostly used + * for grass growth and plants. + * + * @param pBaseMetaTileEntity + */ + private void doAccelerateNormalBlocks(IGregTechTileEntity pBaseMetaTileEntity, World pWorld) { + if (!pBaseMetaTileEntity.isActive()) { + getBaseMetaTileEntity().setActive(true); + } + + Random rnd = new Random(); + int tX = pBaseMetaTileEntity.getXCoord(); + int tY = pBaseMetaTileEntity.getYCoord(); + int tZ = pBaseMetaTileEntity.getZCoord(); + + int tX1 = tX - getRadiusTierOverride(); + int tX2 = tX + getRadiusTierOverride(); + int tY1 = Math.max(tY - getRadiusTierOverride(), 0); // Limit to bedrock + int tY2 = Math.min(tY + getRadiusTierOverride(), 255); // Limit to build height + int tZ1 = tZ - getRadiusTierOverride(); + int tZ2 = tZ + getRadiusTierOverride(); + + for (int xi = tX1; xi <= tX2; xi++) { + for (int yi = tY1; yi <= tY2; yi++) { + for (int zi = tZ1; zi <= tZ2; zi++) { + tryTickBlock(pWorld, xi, yi, zi, rnd); + } + } + } + } + + /** + * Send a tick to the target block + * + * @param pWorld + * @param pX + * @param pY + * @param pZ + * @param pRnd + */ + private void tryTickBlock(World pWorld, int pX, int pY, int pZ, Random pRnd) { + try { + for (int j = 0; j < getSpeedTierOverride(); j++) { + Block tBlock = pWorld.getBlock(pX, pY, pZ); + if (tBlock.getTickRandomly()) { + tBlock.updateTick(pWorld, pX, pY, pZ, pRnd); + } + } + } catch (Exception e) { + GTLog.err.println("GT_MetaTileEntity_WorldAccelerator.tryTickBlock.crash\n" + e.getMessage()); + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineBase.java b/src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineBase.java deleted file mode 100644 index ff3048f4b2..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineBase.java +++ /dev/null @@ -1,415 +0,0 @@ -/** - * - * Inspired/ported from GregTech 6 under the LGPL license - * - * Copyright (c) 2020 GregTech-6 Team - * - * This file is part of GregTech. - * - * GregTech is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * GregTech is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License along with GregTech. If not, see - * . - */ -package gregtech.common.tileentities.machines.long_distance; - -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static mcp.mobius.waila.api.SpecialChars.BLUE; -import static mcp.mobius.waila.api.SpecialChars.GOLD; -import static mcp.mobius.waila.api.SpecialChars.GREEN; -import static mcp.mobius.waila.api.SpecialChars.RED; -import static mcp.mobius.waila.api.SpecialChars.RESET; -import static mcp.mobius.waila.api.SpecialChars.YELLOW; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_Block_LongDistancePipe; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicHull_NonElectric; -import gregtech.api.util.GT_Utility; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public abstract class GT_MetaTileEntity_LongDistancePipelineBase extends GT_MetaTileEntity_BasicHull_NonElectric { - - protected static final int INPUT_INDEX = 0; - protected static final int OUTPUT_INDEX = 1; - protected static final int SIDE_UP_DOWN_INDEX = 2; - protected static final int SIDE_LEFT_RIGHT_INDEX = 3; - - public static int minimalDistancePoints = 64; - - protected GT_MetaTileEntity_LongDistancePipelineBase mTarget = null; - // these two are updated by machine block update thread, so must be volatile - protected volatile GT_MetaTileEntity_LongDistancePipelineBase mSender = null; - protected volatile ChunkCoordinates mTargetPos = null; - protected GT_MetaTileEntity_LongDistancePipelineBase mTooCloseTarget = null, mTooCloseSender = null; - - public GT_MetaTileEntity_LongDistancePipelineBase(int aID, String aName, String aNameRegional, int aTier, - String aDescription) { - super(aID, aName, aNameRegional, aTier, aDescription); - } - - public GT_MetaTileEntity_LongDistancePipelineBase(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - return new String[] { "Only one Input and Output are allowed per pipeline", - "Only Input and Output have to be chunkloaded", "Transfer rate is solely limited by input rate", - "Minimum distance: " + minimalDistancePoints + " blocks" }; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (mTargetPos != null && mTarget != this) { - aNBT.setBoolean("target", true); - aNBT.setInteger("target.x", mTargetPos.posX); - aNBT.setInteger("target.y", mTargetPos.posY); - aNBT.setInteger("target.z", mTargetPos.posZ); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("target")) { - mTargetPos = new ChunkCoordinates( - aNBT.getInteger("target.x"), - aNBT.getInteger("target.y"), - aNBT.getInteger("target.z")); - if (getDistanceToSelf(mTargetPos) < minimalDistancePoints) mTargetPos = null; - } - } - - public boolean isSameClass(GT_MetaTileEntity_LongDistancePipelineBase other) { - return false; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) return true; - ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); - if (tCurrentItem != null) { - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSoftHammerList)) { - scanPipes(); - return true; - } - } - return false; - } - - public boolean isDead() { - return getBaseMetaTileEntity() == null || getBaseMetaTileEntity().isDead(); - } - - public boolean checkTarget() { - final IGregTechTileEntity gt_tile = getBaseMetaTileEntity(); - if (gt_tile == null || !gt_tile.isAllowedToWork() || gt_tile.isClientSide()) return false; - World world = gt_tile.getWorld(); - if (world == null) return false; - - if (mTargetPos == null) { - // We don't have a target position, scan the pipes - scanPipes(); - } else if (mTarget == null || mTarget.isDead()) { - // We don't have a target, or it's dead. Try checking the target position - mTarget = null; - if (world.blockExists(mTargetPos.posX, mTargetPos.posY, mTargetPos.posZ)) { - // Only check if the target position is loaded - TileEntity te = world.getTileEntity(mTargetPos.posX, mTargetPos.posY, mTargetPos.posZ); - final IMetaTileEntity tMeta; - if (te instanceof BaseMetaTileEntity - && ((tMeta = ((BaseMetaTileEntity) te) - .getMetaTileEntity()) instanceof GT_MetaTileEntity_LongDistancePipelineBase) - && isSameClass((GT_MetaTileEntity_LongDistancePipelineBase) tMeta)) { - // It's the right type! - mTarget = (GT_MetaTileEntity_LongDistancePipelineBase) tMeta; - } else if (te != null) { - // It isn't the right type, kill the target position - mTargetPos = null; - } - } - } - if (mTooCloseTarget != null && mTooCloseTarget.mSender == null) mTooCloseTarget.mTooCloseSender = this; - if (mTooCloseSender != null && (mTooCloseSender.isDead() || mTooCloseSender.mTarget != null)) - mTooCloseSender = null; - if (mTarget == null || mTarget == this) return false; - if (mTarget.mSender == null || mTarget.mSender.isDead() - || mTarget.mSender.mTarget == null - || mTarget.mSender.mTarget.isDead()) { - mTarget.mSender = this; - mTarget.mTooCloseSender = null; - } - - return mTarget.mSender == this; - } - - @Override - public ArrayList getSpecialDebugInfo(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, - int aLogLevel, ArrayList aList) { - if (mSender != null && !mSender.isDead() && mSender.mTarget == this) { - final ChunkCoordinates coords = mSender.getCoords(); - aList.addAll( - Arrays.asList( - "Is Pipeline Output", - "Pipeline Input is at: X: " + coords.posX + " Y: " + coords.posY + " Z: " + coords.posZ)); - } else { - aList.addAll( - Arrays.asList( - checkTarget() ? "Is connected to Pipeline Output" : "Pipeline Output is not connected/chunkloaded", - "Pipeline Output should be around: X: " + mTargetPos.posX - + " Y: " - + mTargetPos.posY - + " Z: " - + mTargetPos.posZ)); - } - - return aList; - } - - // What meta should the pipes for this pipeline have - public abstract int getPipeMeta(); - - protected void scanPipes() { - if (mSender != null && !mSender.isDead() && mSender.mTarget == this) return; - - // Check if we need to scan anything - final IGregTechTileEntity gtTile = getBaseMetaTileEntity(); - if (gtTile == null) return; - - final World world = gtTile.getWorld(); - if (world == null) return; - - mTargetPos = getCoords(); - mTarget = this; - mSender = null; - - // Start scanning from the output side - Block aBlock = gtTile.getBlockAtSide(gtTile.getBackFacing()); - - if (aBlock instanceof GT_Block_LongDistancePipe) { - byte aMetaData = gtTile.getMetaIDAtSide(gtTile.getBackFacing()); - if (aMetaData != getPipeMeta()) return; - - HashSet tVisited = new HashSet<>(Collections.singletonList(getCoords())), - tWires = new HashSet<>(); - Queue tQueue = new LinkedList<>( - Collections.singletonList(getFacingOffset(gtTile, gtTile.getBackFacing()))); - - while (!tQueue.isEmpty()) { - final ChunkCoordinates aCoords = tQueue.poll(); - - if (world.getBlock(aCoords.posX, aCoords.posY, aCoords.posZ) == aBlock - && world.getBlockMetadata(aCoords.posX, aCoords.posY, aCoords.posZ) == aMetaData) { - // We've got another pipe/wire block - // TODO: Make sure it's the right type of pipe/wire via meta - ChunkCoordinates tCoords; - tWires.add(aCoords); - - // For each direction, if we haven't already visited that coordinate, add it to the end of the - // queue - if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX + 1, aCoords.posY, aCoords.posZ))) - tQueue.add(tCoords); - if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX - 1, aCoords.posY, aCoords.posZ))) - tQueue.add(tCoords); - if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY + 1, aCoords.posZ))) - tQueue.add(tCoords); - if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY - 1, aCoords.posZ))) - tQueue.add(tCoords); - if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY, aCoords.posZ + 1))) - tQueue.add(tCoords); - if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY, aCoords.posZ - 1))) - tQueue.add(tCoords); - } else { - // It's not a block - let's see if it's a tile entity - TileEntity tTileEntity = world.getTileEntity(aCoords.posX, aCoords.posY, aCoords.posZ); - if (tTileEntity != gtTile && tTileEntity instanceof BaseMetaTileEntity - && ((BaseMetaTileEntity) tTileEntity) - .getMetaTileEntity() instanceof GT_MetaTileEntity_LongDistancePipelineBase tGtTile) { - if (isSameClass(tGtTile) && tWires.contains( - tGtTile.getFacingOffset( - (BaseMetaTileEntity) tTileEntity, - ((BaseMetaTileEntity) tTileEntity).getFrontFacing()))) { - // If it's the same class, and we've scanned a wire in front of it (the input side), we've - // found our target - // still need to check if it's distant enough - int distance = getDistanceToSelf(aCoords); - if (distance > minimalDistancePoints) { - mTarget = tGtTile; - mTargetPos = tGtTile.getCoords(); - mTooCloseTarget = null; - return; - } else { - if (mTooCloseTarget == null) { - mTooCloseTarget = tGtTile; - } - } - } - - // Remove this block from the visited because we might end up back here from another wire that - // IS connected to the - // input side - tVisited.remove(aCoords); - } - } - } - } - } - - protected int getDistanceToSelf(ChunkCoordinates aCoords) { - return Math.abs(getBaseMetaTileEntity().getXCoord() - aCoords.posX) - + Math.abs(getBaseMetaTileEntity().getYCoord() - aCoords.posY) / 2 - + Math.abs(getBaseMetaTileEntity().getZCoord() - aCoords.posZ); - } - - public ChunkCoordinates getFacingOffset(IGregTechTileEntity gt_tile, ForgeDirection side) { - return new ChunkCoordinates( - gt_tile.getOffsetX(side, 1), - gt_tile.getOffsetY(side, 1), - gt_tile.getOffsetZ(side, 1)); - } - - public ChunkCoordinates getCoords() { - final IGregTechTileEntity gt_tile = getBaseMetaTileEntity(); - return new ChunkCoordinates(gt_tile.getXCoord(), gt_tile.getYCoord(), gt_tile.getZCoord()); - } - - @Override - public void onMachineBlockUpdate() { - mTargetPos = null; - mSender = null; - } - - @Override - public boolean shouldTriggerBlockUpdate() { - return true; - } - - abstract public ITexture[] getTextureOverlays(); - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[4][17][]; - ITexture[] overlays = getTextureOverlays(); - for (int i = 0; i < rTextures[0].length; i++) { - rTextures[INPUT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], overlays[INPUT_INDEX] }; - rTextures[OUTPUT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], overlays[OUTPUT_INDEX] }; - rTextures[SIDE_UP_DOWN_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], - overlays[SIDE_UP_DOWN_INDEX] }; - rTextures[SIDE_LEFT_RIGHT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], - overlays[SIDE_LEFT_RIGHT_INDEX] }; - } - return rTextures; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - colorIndex += 1; - if (sideDirection == facingDirection) return mTextures[INPUT_INDEX][colorIndex]; - else if (sideDirection == facingDirection.getOpposite()) return mTextures[OUTPUT_INDEX][colorIndex]; - else { - switch (facingDirection) { - case UP, DOWN -> { - return mTextures[SIDE_UP_DOWN_INDEX][colorIndex]; - } - case NORTH -> { - switch (sideDirection) { - case DOWN, UP -> { - return mTextures[SIDE_UP_DOWN_INDEX][colorIndex]; - } - case EAST, WEST -> { - return mTextures[SIDE_LEFT_RIGHT_INDEX][colorIndex]; - } - default -> {} - } - } - case SOUTH -> { - switch (sideDirection) { - case DOWN, UP -> { - return mTextures[SIDE_UP_DOWN_INDEX][colorIndex]; - } - case EAST, WEST -> { - return mTextures[SIDE_LEFT_RIGHT_INDEX][colorIndex]; - } - default -> {} - } - } - case EAST, WEST -> { - return mTextures[SIDE_LEFT_RIGHT_INDEX][colorIndex]; - } - default -> {} - } - } - return mTextures[INPUT_INDEX][colorIndex]; // dummy - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - final ForgeDirection facing = getBaseMetaTileEntity().getFrontFacing(); - final ForgeDirection side = accessor.getSide(); - - final NBTTagCompound tag = accessor.getNBTData(); - final boolean hasInput = tag.getBoolean("hasInput"); - final boolean hasInputTooClose = tag.getBoolean("hasInputTooClose"); - final boolean hasOutput = tag.getBoolean("hasOutput"); - final boolean hasOutputTooClose = tag.getBoolean("hasOutputTooClose"); - - if (side == facing) currentTip.add(GOLD + "Pipeline Input" + RESET); - else if (side == facing.getOpposite()) currentTip.add(BLUE + "Pipeline Output" + RESET); - else currentTip.add("Pipeline Side"); - - if (!hasInput && !hasInputTooClose && !hasOutput && !hasOutputTooClose) { - currentTip.add(YELLOW + "Not connected" + RESET); - } - - if (hasInput) currentTip.add(GREEN + "Connected to " + GOLD + "Input" + RESET); - else if (hasInputTooClose) currentTip.add(RED + "Connected Input too close" + RESET); - else if (hasOutput) currentTip.add(GREEN + "Connected to " + BLUE + "Output" + RESET); - else if (hasOutputTooClose) currentTip.add(RED + "Connected Output too close" + RESET); - - super.getWailaBody(itemStack, currentTip, accessor, config); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - - tag.setBoolean("hasInput", mSender != null); - tag.setBoolean("hasInputTooClose", mTooCloseSender != null); - tag.setBoolean("hasOutput", mTarget != null && mTarget != this); - tag.setBoolean("hasOutputTooClose", mTooCloseTarget != null); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineFluid.java b/src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineFluid.java deleted file mode 100644 index 70e295f3ad..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineFluid.java +++ /dev/null @@ -1,125 +0,0 @@ -/** - * - * Inspired/ported from GregTech 6 under the LGPL license - * - * Copyright (c) 2020 GregTech-6 Team - * - * This file is part of GregTech. - * - * GregTech is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * GregTech is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License along with GregTech. If not, see - * . - */ -package gregtech.common.tileentities.machines.long_distance; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_BACK; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_FRONT; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_SIDE_LEFT_RIGHT; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_SIDE_LEFT_RIGHT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_SIDE_UP_DOWN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_SIDE_UP_DOWN_GLOW; - -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_LongDistancePipelineFluid extends GT_MetaTileEntity_LongDistancePipelineBase { - - static final FluidTankInfo[] emptyTank = { new FluidTankInfo(null, Integer.MAX_VALUE) }; - - public GT_MetaTileEntity_LongDistancePipelineFluid(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, "Sends fluids over long distances"); - } - - public GT_MetaTileEntity_LongDistancePipelineFluid(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public boolean isSameClass(GT_MetaTileEntity_LongDistancePipelineBase other) { - return other instanceof GT_MetaTileEntity_LongDistancePipelineFluid; - } - - @Override - public int getPipeMeta() { - return 0; - } - - public IFluidHandler getTank() { - final IGregTechTileEntity tTile = mTarget.getBaseMetaTileEntity(); - TileEntity tankTile = tTile.getTileEntityAtSide(tTile.getBackFacing()); - if (tankTile instanceof IFluidHandler) return (IFluidHandler) tankTile; - else return null; - } - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection side) { - if (checkTarget()) { - final IFluidHandler tankTile = getTank(); - if (tankTile != null) return tankTile.getTankInfo(side); - } - - return emptyTank; - } - - @Override - public int fill(ForgeDirection side, FluidStack aFluid, boolean aDoFill) { - if (checkTarget()) { - final IGregTechTileEntity tTile = mTarget.getBaseMetaTileEntity(); - final IFluidHandler tankTile = getTank(); - if (tankTile != null) return tankTile.fill(tTile.getFrontFacing(), aFluid, aDoFill); - } - return 0; - } - - @Override - public FluidStack drain(ForgeDirection side, FluidStack aFluid, boolean aDoDrain) { - return null; - } - - @Override - public FluidStack drain(ForgeDirection side, int aMaxDrain, boolean aDoDrain) { - return null; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LongDistancePipelineFluid(mName, mTier, getDescription()[0], mTextures); - } - - @Override - public ITexture[] getTextureOverlays() { - ITexture[] overlays = new ITexture[4]; - overlays[INPUT_INDEX] = TextureFactory.of(OVERLAY_PIPELINE_FLUID_FRONT); - overlays[OUTPUT_INDEX] = TextureFactory.of(OVERLAY_PIPELINE_FLUID_BACK); - overlays[SIDE_UP_DOWN_INDEX] = TextureFactory.of( - TextureFactory.of(OVERLAY_PIPELINE_FLUID_SIDE_UP_DOWN), - TextureFactory.builder() - .addIcon(OVERLAY_PIPELINE_FLUID_SIDE_UP_DOWN_GLOW) - .glow() - .build()); - overlays[SIDE_LEFT_RIGHT_INDEX] = TextureFactory.of( - TextureFactory.of(OVERLAY_PIPELINE_FLUID_SIDE_LEFT_RIGHT), - TextureFactory.builder() - .addIcon(OVERLAY_PIPELINE_FLUID_SIDE_LEFT_RIGHT_GLOW) - .glow() - .build()); - - return overlays; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineItem.java b/src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineItem.java deleted file mode 100644 index e1510f4d3d..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/long_distance/GT_MetaTileEntity_LongDistancePipelineItem.java +++ /dev/null @@ -1,214 +0,0 @@ -/** - * - * Inspired/ported from GregTech 6 under the LGPL license - * - * Copyright (c) 2020 GregTech-6 Team - * - * This file is part of GregTech. - * - * GregTech is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * GregTech is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License along with GregTech. If not, see - * . - */ -package gregtech.common.tileentities.machines.long_distance; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_BACK; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_FRONT; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_SIDE_LEFT_RIGHT; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_SIDE_LEFT_RIGHT_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_SIDE_UP_DOWN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_SIDE_UP_DOWN_GLOW; - -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; - -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_LongDistancePipelineItem extends GT_MetaTileEntity_LongDistancePipelineBase { - - public GT_MetaTileEntity_LongDistancePipelineItem(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, "Sends Items over long distances"); - } - - public GT_MetaTileEntity_LongDistancePipelineItem(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public boolean isSameClass(GT_MetaTileEntity_LongDistancePipelineBase other) { - return other instanceof GT_MetaTileEntity_LongDistancePipelineItem; - } - - @Override - public int getPipeMeta() { - return 1; - } - - public IInventory getInventory() { - final IGregTechTileEntity tTile = mTarget.getBaseMetaTileEntity(); - TileEntity invTile = tTile.getTileEntityAtSide(tTile.getBackFacing()); - if (invTile instanceof IInventory) return (IInventory) invTile; - else return null; - } - - @Override - public ItemStack decrStackSize(int aSlot, int aDecrement) { - if (checkTarget()) { - IInventory iInventory = getInventory(); - if (iInventory != null) return iInventory.decrStackSize(aSlot, aDecrement); - } - return null; - } - - @Override - public ItemStack getStackInSlotOnClosing(int aSlot) { - if (checkTarget()) { - IInventory iInventory = getInventory(); - if (iInventory != null) return iInventory.getStackInSlotOnClosing(aSlot); - } - return null; - } - - @Override - public ItemStack getStackInSlot(int aSlot) { - if (checkTarget()) { - IInventory iInventory = getInventory(); - if (iInventory != null) return iInventory.getStackInSlot(aSlot); - } - return null; - } - - @Override - public String getInventoryName() { - if (checkTarget()) { - IInventory iInventory = getInventory(); - if (iInventory != null) return iInventory.getInventoryName(); - } - return super.getInventoryName(); - } - - @Override - public int getSizeInventory() { - if (checkTarget()) { - IInventory iInventory = getInventory(); - if (iInventory != null) return iInventory.getSizeInventory(); - } - return 0; - } - - @Override - public int getInventoryStackLimit() { - if (checkTarget()) { - IInventory iInventory = getInventory(); - if (iInventory != null) return iInventory.getInventoryStackLimit(); - } - return 0; - } - - @Override - public void setInventorySlotContents(int aSlot, ItemStack aStack) { - if (checkTarget()) { - IInventory iInventory = getInventory(); - if (iInventory != null) iInventory.setInventorySlotContents(aSlot, aStack); - } - } - - @Override - public boolean hasCustomInventoryName() { - if (checkTarget()) { - IInventory iInventory = getInventory(); - if (iInventory != null) return iInventory.hasCustomInventoryName(); - } - return false; - } - - @Override - public boolean isItemValidForSlot(int aSlot, ItemStack aStack) { - if (checkTarget()) { - IInventory iInventory = getInventory(); - if (iInventory != null) return iInventory.isItemValidForSlot(aSlot, aStack); - } - return false; - } - - // // Relay Sided Inventories - // - - @Override - public int[] getAccessibleSlotsFromSide(int ordinalSide) { - if (checkTarget()) { - final IGregTechTileEntity tTile = mTarget.getBaseMetaTileEntity(); - final IInventory iInventory = getInventory(); - if (iInventory instanceof ISidedInventory inv) return inv.getAccessibleSlotsFromSide( - tTile.getFrontFacing() - .ordinal()); - if (iInventory != null) { - final int[] tReturn = new int[iInventory.getSizeInventory()]; - for (int i = 0; i < tReturn.length; i++) tReturn[i] = i; - return tReturn; - } - } - - return GT_Values.emptyIntArray; - } - - @Override - public boolean canInsertItem(int aSlot, ItemStack aStack, int ordinalSide) { - if (checkTarget()) { - final IGregTechTileEntity tTile = mTarget.getBaseMetaTileEntity(); - IInventory iInventory = getInventory(); - if (iInventory instanceof ISidedInventory iSidedInventory) return iSidedInventory.canInsertItem( - aSlot, - aStack, - tTile.getFrontFacing() - .ordinal()); - return iInventory != null; - } - return false; - } - - @Override - public boolean canExtractItem(int aSlot, ItemStack aStack, int ordinalSide) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LongDistancePipelineItem(mName, mTier, getDescription()[0], mTextures); - } - - @Override - public ITexture[] getTextureOverlays() { - ITexture[] overlays = new ITexture[4]; - overlays[INPUT_INDEX] = TextureFactory.of(OVERLAY_PIPELINE_ITEM_FRONT); - overlays[OUTPUT_INDEX] = TextureFactory.of(OVERLAY_PIPELINE_ITEM_BACK); - overlays[SIDE_UP_DOWN_INDEX] = TextureFactory.of( - TextureFactory.of(OVERLAY_PIPELINE_ITEM_SIDE_UP_DOWN), - TextureFactory.builder() - .addIcon(OVERLAY_PIPELINE_ITEM_SIDE_UP_DOWN_GLOW) - .glow() - .build()); - overlays[SIDE_LEFT_RIGHT_INDEX] = TextureFactory.of( - TextureFactory.of(OVERLAY_PIPELINE_ITEM_SIDE_LEFT_RIGHT), - TextureFactory.builder() - .addIcon(OVERLAY_PIPELINE_ITEM_SIDE_LEFT_RIGHT_GLOW) - .glow() - .build()); - - return overlays; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineBase.java b/src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineBase.java new file mode 100644 index 0000000000..6f6f01f3ba --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineBase.java @@ -0,0 +1,412 @@ +/** + * + * Inspired/ported from GregTech 6 under the LGPL license + * + * Copyright (c) 2020 GregTech-6 Team + * + * This file is part of GregTech. + * + * GregTech is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * GregTech is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License along with GregTech. If not, see + * . + */ +package gregtech.common.tileentities.machines.long_distance; + +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static mcp.mobius.waila.api.SpecialChars.BLUE; +import static mcp.mobius.waila.api.SpecialChars.GOLD; +import static mcp.mobius.waila.api.SpecialChars.GREEN; +import static mcp.mobius.waila.api.SpecialChars.RED; +import static mcp.mobius.waila.api.SpecialChars.RESET; +import static mcp.mobius.waila.api.SpecialChars.YELLOW; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.BlockLongDistancePipe; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicHullNonElectric; +import gregtech.api.util.GTUtility; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public abstract class MTELongDistancePipelineBase extends MTEBasicHullNonElectric { + + protected static final int INPUT_INDEX = 0; + protected static final int OUTPUT_INDEX = 1; + protected static final int SIDE_UP_DOWN_INDEX = 2; + protected static final int SIDE_LEFT_RIGHT_INDEX = 3; + + public static int minimalDistancePoints = 64; + + protected MTELongDistancePipelineBase mTarget = null; + // these two are updated by machine block update thread, so must be volatile + protected volatile MTELongDistancePipelineBase mSender = null; + protected volatile ChunkCoordinates mTargetPos = null; + protected MTELongDistancePipelineBase mTooCloseTarget = null, mTooCloseSender = null; + + public MTELongDistancePipelineBase(int aID, String aName, String aNameRegional, int aTier, String aDescription) { + super(aID, aName, aNameRegional, aTier, aDescription); + } + + public MTELongDistancePipelineBase(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + return new String[] { "Only one Input and Output are allowed per pipeline", + "Only Input and Output have to be chunkloaded", "Transfer rate is solely limited by input rate", + "Minimum distance: " + minimalDistancePoints + " blocks" }; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (mTargetPos != null && mTarget != this) { + aNBT.setBoolean("target", true); + aNBT.setInteger("target.x", mTargetPos.posX); + aNBT.setInteger("target.y", mTargetPos.posY); + aNBT.setInteger("target.z", mTargetPos.posZ); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("target")) { + mTargetPos = new ChunkCoordinates( + aNBT.getInteger("target.x"), + aNBT.getInteger("target.y"), + aNBT.getInteger("target.z")); + if (getDistanceToSelf(mTargetPos) < minimalDistancePoints) mTargetPos = null; + } + } + + public boolean isSameClass(MTELongDistancePipelineBase other) { + return false; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) return true; + ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + if (tCurrentItem != null) { + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSoftHammerList)) { + scanPipes(); + return true; + } + } + return false; + } + + public boolean isDead() { + return getBaseMetaTileEntity() == null || getBaseMetaTileEntity().isDead(); + } + + public boolean checkTarget() { + final IGregTechTileEntity gt_tile = getBaseMetaTileEntity(); + if (gt_tile == null || !gt_tile.isAllowedToWork() || gt_tile.isClientSide()) return false; + World world = gt_tile.getWorld(); + if (world == null) return false; + + if (mTargetPos == null) { + // We don't have a target position, scan the pipes + scanPipes(); + } else if (mTarget == null || mTarget.isDead()) { + // We don't have a target, or it's dead. Try checking the target position + mTarget = null; + if (world.blockExists(mTargetPos.posX, mTargetPos.posY, mTargetPos.posZ)) { + // Only check if the target position is loaded + TileEntity te = world.getTileEntity(mTargetPos.posX, mTargetPos.posY, mTargetPos.posZ); + final IMetaTileEntity tMeta; + if (te instanceof BaseMetaTileEntity + && ((tMeta = ((BaseMetaTileEntity) te).getMetaTileEntity()) instanceof MTELongDistancePipelineBase) + && isSameClass((MTELongDistancePipelineBase) tMeta)) { + // It's the right type! + mTarget = (MTELongDistancePipelineBase) tMeta; + } else if (te != null) { + // It isn't the right type, kill the target position + mTargetPos = null; + } + } + } + if (mTooCloseTarget != null && mTooCloseTarget.mSender == null) mTooCloseTarget.mTooCloseSender = this; + if (mTooCloseSender != null && (mTooCloseSender.isDead() || mTooCloseSender.mTarget != null)) + mTooCloseSender = null; + if (mTarget == null || mTarget == this) return false; + if (mTarget.mSender == null || mTarget.mSender.isDead() + || mTarget.mSender.mTarget == null + || mTarget.mSender.mTarget.isDead()) { + mTarget.mSender = this; + mTarget.mTooCloseSender = null; + } + + return mTarget.mSender == this; + } + + @Override + public ArrayList getSpecialDebugInfo(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, + int aLogLevel, ArrayList aList) { + if (mSender != null && !mSender.isDead() && mSender.mTarget == this) { + final ChunkCoordinates coords = mSender.getCoords(); + aList.addAll( + Arrays.asList( + "Is Pipeline Output", + "Pipeline Input is at: X: " + coords.posX + " Y: " + coords.posY + " Z: " + coords.posZ)); + } else { + aList.addAll( + Arrays.asList( + checkTarget() ? "Is connected to Pipeline Output" : "Pipeline Output is not connected/chunkloaded", + "Pipeline Output should be around: X: " + mTargetPos.posX + + " Y: " + + mTargetPos.posY + + " Z: " + + mTargetPos.posZ)); + } + + return aList; + } + + // What meta should the pipes for this pipeline have + public abstract int getPipeMeta(); + + protected void scanPipes() { + if (mSender != null && !mSender.isDead() && mSender.mTarget == this) return; + + // Check if we need to scan anything + final IGregTechTileEntity gtTile = getBaseMetaTileEntity(); + if (gtTile == null) return; + + final World world = gtTile.getWorld(); + if (world == null) return; + + mTargetPos = getCoords(); + mTarget = this; + mSender = null; + + // Start scanning from the output side + Block aBlock = gtTile.getBlockAtSide(gtTile.getBackFacing()); + + if (aBlock instanceof BlockLongDistancePipe) { + byte aMetaData = gtTile.getMetaIDAtSide(gtTile.getBackFacing()); + if (aMetaData != getPipeMeta()) return; + + HashSet tVisited = new HashSet<>(Collections.singletonList(getCoords())), + tWires = new HashSet<>(); + Queue tQueue = new LinkedList<>( + Collections.singletonList(getFacingOffset(gtTile, gtTile.getBackFacing()))); + + while (!tQueue.isEmpty()) { + final ChunkCoordinates aCoords = tQueue.poll(); + + if (world.getBlock(aCoords.posX, aCoords.posY, aCoords.posZ) == aBlock + && world.getBlockMetadata(aCoords.posX, aCoords.posY, aCoords.posZ) == aMetaData) { + // We've got another pipe/wire block + // TODO: Make sure it's the right type of pipe/wire via meta + ChunkCoordinates tCoords; + tWires.add(aCoords); + + // For each direction, if we haven't already visited that coordinate, add it to the end of the + // queue + if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX + 1, aCoords.posY, aCoords.posZ))) + tQueue.add(tCoords); + if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX - 1, aCoords.posY, aCoords.posZ))) + tQueue.add(tCoords); + if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY + 1, aCoords.posZ))) + tQueue.add(tCoords); + if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY - 1, aCoords.posZ))) + tQueue.add(tCoords); + if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY, aCoords.posZ + 1))) + tQueue.add(tCoords); + if (tVisited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY, aCoords.posZ - 1))) + tQueue.add(tCoords); + } else { + // It's not a block - let's see if it's a tile entity + TileEntity tTileEntity = world.getTileEntity(aCoords.posX, aCoords.posY, aCoords.posZ); + if (tTileEntity != gtTile && tTileEntity instanceof BaseMetaTileEntity + && ((BaseMetaTileEntity) tTileEntity) + .getMetaTileEntity() instanceof MTELongDistancePipelineBase tGtTile) { + if (isSameClass(tGtTile) && tWires.contains( + tGtTile.getFacingOffset( + (BaseMetaTileEntity) tTileEntity, + ((BaseMetaTileEntity) tTileEntity).getFrontFacing()))) { + // If it's the same class, and we've scanned a wire in front of it (the input side), we've + // found our target + // still need to check if it's distant enough + int distance = getDistanceToSelf(aCoords); + if (distance > minimalDistancePoints) { + mTarget = tGtTile; + mTargetPos = tGtTile.getCoords(); + mTooCloseTarget = null; + return; + } else { + if (mTooCloseTarget == null) { + mTooCloseTarget = tGtTile; + } + } + } + + // Remove this block from the visited because we might end up back here from another wire that + // IS connected to the + // input side + tVisited.remove(aCoords); + } + } + } + } + } + + protected int getDistanceToSelf(ChunkCoordinates aCoords) { + return Math.abs(getBaseMetaTileEntity().getXCoord() - aCoords.posX) + + Math.abs(getBaseMetaTileEntity().getYCoord() - aCoords.posY) / 2 + + Math.abs(getBaseMetaTileEntity().getZCoord() - aCoords.posZ); + } + + public ChunkCoordinates getFacingOffset(IGregTechTileEntity gt_tile, ForgeDirection side) { + return new ChunkCoordinates( + gt_tile.getOffsetX(side, 1), + gt_tile.getOffsetY(side, 1), + gt_tile.getOffsetZ(side, 1)); + } + + public ChunkCoordinates getCoords() { + final IGregTechTileEntity gt_tile = getBaseMetaTileEntity(); + return new ChunkCoordinates(gt_tile.getXCoord(), gt_tile.getYCoord(), gt_tile.getZCoord()); + } + + @Override + public void onMachineBlockUpdate() { + mTargetPos = null; + mSender = null; + } + + @Override + public boolean shouldTriggerBlockUpdate() { + return true; + } + + abstract public ITexture[] getTextureOverlays(); + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[4][17][]; + ITexture[] overlays = getTextureOverlays(); + for (int i = 0; i < rTextures[0].length; i++) { + rTextures[INPUT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], overlays[INPUT_INDEX] }; + rTextures[OUTPUT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], overlays[OUTPUT_INDEX] }; + rTextures[SIDE_UP_DOWN_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], + overlays[SIDE_UP_DOWN_INDEX] }; + rTextures[SIDE_LEFT_RIGHT_INDEX][i] = new ITexture[] { MACHINE_CASINGS[mTier][i], + overlays[SIDE_LEFT_RIGHT_INDEX] }; + } + return rTextures; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + colorIndex += 1; + if (sideDirection == facingDirection) return mTextures[INPUT_INDEX][colorIndex]; + else if (sideDirection == facingDirection.getOpposite()) return mTextures[OUTPUT_INDEX][colorIndex]; + else { + switch (facingDirection) { + case UP, DOWN -> { + return mTextures[SIDE_UP_DOWN_INDEX][colorIndex]; + } + case NORTH -> { + switch (sideDirection) { + case DOWN, UP -> { + return mTextures[SIDE_UP_DOWN_INDEX][colorIndex]; + } + case EAST, WEST -> { + return mTextures[SIDE_LEFT_RIGHT_INDEX][colorIndex]; + } + default -> {} + } + } + case SOUTH -> { + switch (sideDirection) { + case DOWN, UP -> { + return mTextures[SIDE_UP_DOWN_INDEX][colorIndex]; + } + case EAST, WEST -> { + return mTextures[SIDE_LEFT_RIGHT_INDEX][colorIndex]; + } + default -> {} + } + } + case EAST, WEST -> { + return mTextures[SIDE_LEFT_RIGHT_INDEX][colorIndex]; + } + default -> {} + } + } + return mTextures[INPUT_INDEX][colorIndex]; // dummy + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + final ForgeDirection facing = getBaseMetaTileEntity().getFrontFacing(); + final ForgeDirection side = accessor.getSide(); + + final NBTTagCompound tag = accessor.getNBTData(); + final boolean hasInput = tag.getBoolean("hasInput"); + final boolean hasInputTooClose = tag.getBoolean("hasInputTooClose"); + final boolean hasOutput = tag.getBoolean("hasOutput"); + final boolean hasOutputTooClose = tag.getBoolean("hasOutputTooClose"); + + if (side == facing) currentTip.add(GOLD + "Pipeline Input" + RESET); + else if (side == facing.getOpposite()) currentTip.add(BLUE + "Pipeline Output" + RESET); + else currentTip.add("Pipeline Side"); + + if (!hasInput && !hasInputTooClose && !hasOutput && !hasOutputTooClose) { + currentTip.add(YELLOW + "Not connected" + RESET); + } + + if (hasInput) currentTip.add(GREEN + "Connected to " + GOLD + "Input" + RESET); + else if (hasInputTooClose) currentTip.add(RED + "Connected Input too close" + RESET); + else if (hasOutput) currentTip.add(GREEN + "Connected to " + BLUE + "Output" + RESET); + else if (hasOutputTooClose) currentTip.add(RED + "Connected Output too close" + RESET); + + super.getWailaBody(itemStack, currentTip, accessor, config); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + + tag.setBoolean("hasInput", mSender != null); + tag.setBoolean("hasInputTooClose", mTooCloseSender != null); + tag.setBoolean("hasOutput", mTarget != null && mTarget != this); + tag.setBoolean("hasOutputTooClose", mTooCloseTarget != null); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineFluid.java b/src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineFluid.java new file mode 100644 index 0000000000..e3886360c6 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineFluid.java @@ -0,0 +1,124 @@ +/** + * + * Inspired/ported from GregTech 6 under the LGPL license + * + * Copyright (c) 2020 GregTech-6 Team + * + * This file is part of GregTech. + * + * GregTech is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * GregTech is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License along with GregTech. If not, see + * . + */ +package gregtech.common.tileentities.machines.long_distance; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_BACK; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_FRONT; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_SIDE_LEFT_RIGHT; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_SIDE_LEFT_RIGHT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_SIDE_UP_DOWN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_FLUID_SIDE_UP_DOWN_GLOW; + +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; + +public class MTELongDistancePipelineFluid extends MTELongDistancePipelineBase { + + static final FluidTankInfo[] emptyTank = { new FluidTankInfo(null, Integer.MAX_VALUE) }; + + public MTELongDistancePipelineFluid(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, "Sends fluids over long distances"); + } + + public MTELongDistancePipelineFluid(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public boolean isSameClass(MTELongDistancePipelineBase other) { + return other instanceof MTELongDistancePipelineFluid; + } + + @Override + public int getPipeMeta() { + return 0; + } + + public IFluidHandler getTank() { + final IGregTechTileEntity tTile = mTarget.getBaseMetaTileEntity(); + TileEntity tankTile = tTile.getTileEntityAtSide(tTile.getBackFacing()); + if (tankTile instanceof IFluidHandler) return (IFluidHandler) tankTile; + else return null; + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection side) { + if (checkTarget()) { + final IFluidHandler tankTile = getTank(); + if (tankTile != null) return tankTile.getTankInfo(side); + } + + return emptyTank; + } + + @Override + public int fill(ForgeDirection side, FluidStack aFluid, boolean aDoFill) { + if (checkTarget()) { + final IGregTechTileEntity tTile = mTarget.getBaseMetaTileEntity(); + final IFluidHandler tankTile = getTank(); + if (tankTile != null) return tankTile.fill(tTile.getFrontFacing(), aFluid, aDoFill); + } + return 0; + } + + @Override + public FluidStack drain(ForgeDirection side, FluidStack aFluid, boolean aDoDrain) { + return null; + } + + @Override + public FluidStack drain(ForgeDirection side, int aMaxDrain, boolean aDoDrain) { + return null; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELongDistancePipelineFluid(mName, mTier, getDescription()[0], mTextures); + } + + @Override + public ITexture[] getTextureOverlays() { + ITexture[] overlays = new ITexture[4]; + overlays[INPUT_INDEX] = TextureFactory.of(OVERLAY_PIPELINE_FLUID_FRONT); + overlays[OUTPUT_INDEX] = TextureFactory.of(OVERLAY_PIPELINE_FLUID_BACK); + overlays[SIDE_UP_DOWN_INDEX] = TextureFactory.of( + TextureFactory.of(OVERLAY_PIPELINE_FLUID_SIDE_UP_DOWN), + TextureFactory.builder() + .addIcon(OVERLAY_PIPELINE_FLUID_SIDE_UP_DOWN_GLOW) + .glow() + .build()); + overlays[SIDE_LEFT_RIGHT_INDEX] = TextureFactory.of( + TextureFactory.of(OVERLAY_PIPELINE_FLUID_SIDE_LEFT_RIGHT), + TextureFactory.builder() + .addIcon(OVERLAY_PIPELINE_FLUID_SIDE_LEFT_RIGHT_GLOW) + .glow() + .build()); + + return overlays; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineItem.java b/src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineItem.java new file mode 100644 index 0000000000..f619d40329 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/long_distance/MTELongDistancePipelineItem.java @@ -0,0 +1,213 @@ +/** + * + * Inspired/ported from GregTech 6 under the LGPL license + * + * Copyright (c) 2020 GregTech-6 Team + * + * This file is part of GregTech. + * + * GregTech is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * GregTech is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more + * details. + * + * You should have received a copy of the GNU Lesser General Public License along with GregTech. If not, see + * . + */ +package gregtech.common.tileentities.machines.long_distance; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_BACK; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_FRONT; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_SIDE_LEFT_RIGHT; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_SIDE_LEFT_RIGHT_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_SIDE_UP_DOWN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPELINE_ITEM_SIDE_UP_DOWN_GLOW; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; + +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; + +public class MTELongDistancePipelineItem extends MTELongDistancePipelineBase { + + public MTELongDistancePipelineItem(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, "Sends Items over long distances"); + } + + public MTELongDistancePipelineItem(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public boolean isSameClass(MTELongDistancePipelineBase other) { + return other instanceof MTELongDistancePipelineItem; + } + + @Override + public int getPipeMeta() { + return 1; + } + + public IInventory getInventory() { + final IGregTechTileEntity tTile = mTarget.getBaseMetaTileEntity(); + TileEntity invTile = tTile.getTileEntityAtSide(tTile.getBackFacing()); + if (invTile instanceof IInventory) return (IInventory) invTile; + else return null; + } + + @Override + public ItemStack decrStackSize(int aSlot, int aDecrement) { + if (checkTarget()) { + IInventory iInventory = getInventory(); + if (iInventory != null) return iInventory.decrStackSize(aSlot, aDecrement); + } + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(int aSlot) { + if (checkTarget()) { + IInventory iInventory = getInventory(); + if (iInventory != null) return iInventory.getStackInSlotOnClosing(aSlot); + } + return null; + } + + @Override + public ItemStack getStackInSlot(int aSlot) { + if (checkTarget()) { + IInventory iInventory = getInventory(); + if (iInventory != null) return iInventory.getStackInSlot(aSlot); + } + return null; + } + + @Override + public String getInventoryName() { + if (checkTarget()) { + IInventory iInventory = getInventory(); + if (iInventory != null) return iInventory.getInventoryName(); + } + return super.getInventoryName(); + } + + @Override + public int getSizeInventory() { + if (checkTarget()) { + IInventory iInventory = getInventory(); + if (iInventory != null) return iInventory.getSizeInventory(); + } + return 0; + } + + @Override + public int getInventoryStackLimit() { + if (checkTarget()) { + IInventory iInventory = getInventory(); + if (iInventory != null) return iInventory.getInventoryStackLimit(); + } + return 0; + } + + @Override + public void setInventorySlotContents(int aSlot, ItemStack aStack) { + if (checkTarget()) { + IInventory iInventory = getInventory(); + if (iInventory != null) iInventory.setInventorySlotContents(aSlot, aStack); + } + } + + @Override + public boolean hasCustomInventoryName() { + if (checkTarget()) { + IInventory iInventory = getInventory(); + if (iInventory != null) return iInventory.hasCustomInventoryName(); + } + return false; + } + + @Override + public boolean isItemValidForSlot(int aSlot, ItemStack aStack) { + if (checkTarget()) { + IInventory iInventory = getInventory(); + if (iInventory != null) return iInventory.isItemValidForSlot(aSlot, aStack); + } + return false; + } + + // // Relay Sided Inventories + // + + @Override + public int[] getAccessibleSlotsFromSide(int ordinalSide) { + if (checkTarget()) { + final IGregTechTileEntity tTile = mTarget.getBaseMetaTileEntity(); + final IInventory iInventory = getInventory(); + if (iInventory instanceof ISidedInventory inv) return inv.getAccessibleSlotsFromSide( + tTile.getFrontFacing() + .ordinal()); + if (iInventory != null) { + final int[] tReturn = new int[iInventory.getSizeInventory()]; + for (int i = 0; i < tReturn.length; i++) tReturn[i] = i; + return tReturn; + } + } + + return GTValues.emptyIntArray; + } + + @Override + public boolean canInsertItem(int aSlot, ItemStack aStack, int ordinalSide) { + if (checkTarget()) { + final IGregTechTileEntity tTile = mTarget.getBaseMetaTileEntity(); + IInventory iInventory = getInventory(); + if (iInventory instanceof ISidedInventory iSidedInventory) return iSidedInventory.canInsertItem( + aSlot, + aStack, + tTile.getFrontFacing() + .ordinal()); + return iInventory != null; + } + return false; + } + + @Override + public boolean canExtractItem(int aSlot, ItemStack aStack, int ordinalSide) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELongDistancePipelineItem(mName, mTier, getDescription()[0], mTextures); + } + + @Override + public ITexture[] getTextureOverlays() { + ITexture[] overlays = new ITexture[4]; + overlays[INPUT_INDEX] = TextureFactory.of(OVERLAY_PIPELINE_ITEM_FRONT); + overlays[OUTPUT_INDEX] = TextureFactory.of(OVERLAY_PIPELINE_ITEM_BACK); + overlays[SIDE_UP_DOWN_INDEX] = TextureFactory.of( + TextureFactory.of(OVERLAY_PIPELINE_ITEM_SIDE_UP_DOWN), + TextureFactory.builder() + .addIcon(OVERLAY_PIPELINE_ITEM_SIDE_UP_DOWN_GLOW) + .glow() + .build()); + overlays[SIDE_LEFT_RIGHT_INDEX] = TextureFactory.of( + TextureFactory.of(OVERLAY_PIPELINE_ITEM_SIDE_LEFT_RIGHT), + TextureFactory.builder() + .addIcon(OVERLAY_PIPELINE_ITEM_SIDE_LEFT_RIGHT_GLOW) + .glow() + .build()); + + return overlays; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AbstractMultiFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AbstractMultiFurnace.java deleted file mode 100644 index 0c91951e28..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AbstractMultiFurnace.java +++ /dev/null @@ -1,48 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; - -public abstract class GT_MetaTileEntity_AbstractMultiFurnace> - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase { - - private HeatingCoilLevel mCoilLevel; - - protected GT_MetaTileEntity_AbstractMultiFurnace(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - protected GT_MetaTileEntity_AbstractMultiFurnace(String aName) { - super(aName); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - public HeatingCoilLevel getCoilLevel() { - return mCoilLevel; - } - - public void setCoilLevel(HeatingCoilLevel aCoilLevel) { - mCoilLevel = aCoilLevel; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java deleted file mode 100644 index aa422505d7..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_AssemblyLine.java +++ /dev/null @@ -1,495 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.enums.VoidingMode; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_DataAccess; -import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_AssemblyLineUtils; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe.GT_Recipe_AssemblyLine; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; - -public class GT_MetaTileEntity_AssemblyLine extends - GT_MetaTileEntity_ExtendedPowerMultiBlockBase implements ISurvivalConstructable { - - public ArrayList mDataAccessHatches = new ArrayList<>(); - private static final String STRUCTURE_PIECE_FIRST = "first"; - private static final String STRUCTURE_PIECE_LATER = "later"; - private static final String STRUCTURE_PIECE_LAST = "last"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_FIRST, - transpose(new String[][] { { " ", "e", " " }, { "~", "l", "G" }, { "g", "m", "g" }, { "b", "i", "b" }, })) - .addShape( - STRUCTURE_PIECE_LATER, - transpose(new String[][] { { " ", "e", " " }, { "d", "l", "d" }, { "g", "m", "g" }, { "b", "I", "b" }, })) - .addShape( - STRUCTURE_PIECE_LAST, - transpose(new String[][] { { " ", "e", " " }, { "d", "l", "d" }, { "g", "m", "g" }, { "o", "i", "b" }, })) - .addElement('G', ofBlock(GregTech_API.sBlockCasings3, 10)) // grate machine casing - .addElement('l', ofBlock(GregTech_API.sBlockCasings2, 9)) // assembler machine casing - .addElement('m', ofBlock(GregTech_API.sBlockCasings2, 5)) // assembling line casing - .addElement('g', Glasses.chainAllGlasses()) - .addElement( - 'e', - ofChain( - Energy.newAny(16, 1, ForgeDirection.UP, ForgeDirection.NORTH, ForgeDirection.SOUTH), - ofBlock(GregTech_API.sBlockCasings2, 0))) - .addElement( - 'd', - buildHatchAdder(GT_MetaTileEntity_AssemblyLine.class).atLeast(DataHatchElement.DataAccess) - .dot(2) - .casingIndex(42) - .allowOnly(ForgeDirection.NORTH) - .buildAndChain(GregTech_API.sBlockCasings3, 10)) - .addElement( - 'b', - buildHatchAdder(GT_MetaTileEntity_AssemblyLine.class) - .atLeast(InputHatch, InputHatch, InputHatch, InputHatch, Maintenance) - .casingIndex(16) - .dot(3) - .allowOnly(ForgeDirection.DOWN) - .buildAndChain( - ofBlock(GregTech_API.sBlockCasings2, 0), - ofHatchAdder(GT_MetaTileEntity_AssemblyLine::addOutputToMachineList, 16, 4))) - .addElement( - 'I', - ofChain( - // all blocks nearby use solid steel casing, so let's use the texture of that - InputBus.newAny(16, 5, ForgeDirection.DOWN), - ofHatchAdder(GT_MetaTileEntity_AssemblyLine::addOutputToMachineList, 16, 4))) - .addElement('i', InputBus.newAny(16, 5, ForgeDirection.DOWN)) - .addElement('o', OutputBus.newAny(16, 4, ForgeDirection.DOWN)) - .build(); - - public GT_MetaTileEntity_AssemblyLine(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_AssemblyLine(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_AssemblyLine(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Assembling Line") - .addInfo("Controller block for the Assembling Line") - .addInfo("Used to make complex machine parts (LuV+)") - .addInfo("Does not make Assembler items") - .addInfo("Recipe tier is at most Energy Hatch tier + 1.") - .addSeparator() - .beginVariableStructureBlock(5, 16, 4, 4, 3, 3, false) // ? - .addStructureInfo("From Bottom to Top, Left to Right") - .addStructureInfo( - "Layer 1 - Solid Steel Machine Casing, Input Bus (last can be Output Bus), Solid Steel Machine Casing") - .addStructureInfo( - "Layer 2 - Borosilicate Glass(any)/Warded Glass/Reinforced Glass, Assembling Line Casing, Reinforced Glass") - .addStructureInfo("Layer 3 - Grate Machine Casing, Assembler Machine Casing, Grate Machine Casing") - .addStructureInfo("Layer 4 - Empty, Solid Steel Machine Casing, Empty") - .addStructureInfo("Up to 16 repeating slices, each one allows for 1 more item in recipes") - .addController("Either Grate on layer 3 of the first slice") - .addEnergyHatch("Any layer 4 casing", 1) - .addMaintenanceHatch("Any layer 1 casing", 3) - .addInputBus("As specified on layer 1", 4, 5) - .addInputHatch("Any layer 1 casing", 3) - .addOutputBus("Replaces Input Bus on final slice or on any solid steel casing on layer 1", 4) - .addOtherStructurePart("Data Access Hatch", "Optional, next to controller", 2) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection == facingDirection) { - if (active) return new ITexture[] { BlockIcons.casingTexturePages[0][16], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { BlockIcons.casingTexturePages[0][16], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][16] }; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.assemblylineVisualRecipes; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - if (GT_Values.D1) { - GT_FML_LOGGER.info("Start ALine recipe check"); - } - CheckRecipeResult result = CheckRecipeResultRegistry.NO_DATA_STICKS; - - ArrayList tDataStickList = getDataItems(2); - if (tDataStickList.isEmpty()) { - return result; - } - if (GT_Values.D1) { - GT_FML_LOGGER.info("Stick accepted, " + tDataStickList.size() + " Data Sticks found"); - } - - int[] tStacks = new int[0]; - FluidStack[] tFluids = new FluidStack[0]; - long averageVoltage = getAverageInputVoltage(); - long maxAmp = mEnergyHatches.size() <= 1 ? 1 : getMaxInputAmps(); - int maxParallel = 1; - Map inputsFromME = getStoredInputsFromME(); - Map fluidsFromME = getStoredFluidsFromME(); - - for (ItemStack tDataStick : tDataStickList) { - GT_AssemblyLineUtils.LookupResult tLookupResult = GT_AssemblyLineUtils - .findAssemblyLineRecipeFromDataStick(tDataStick, false); - - if (tLookupResult.getType() == GT_AssemblyLineUtils.LookupResultType.INVALID_STICK) { - result = CheckRecipeResultRegistry.NO_RECIPE; - continue; - } - - GT_Recipe_AssemblyLine tRecipe = tLookupResult.getRecipe(); - // Check if the recipe on the data stick is the current recipe for it's given output, if not we update it - // and continue to next. - if (tLookupResult.getType() != GT_AssemblyLineUtils.LookupResultType.VALID_STACK_AND_VALID_HASH) { - tRecipe = GT_AssemblyLineUtils.processDataStick(tDataStick); - if (tRecipe == null) { - result = CheckRecipeResultRegistry.NO_RECIPE; - continue; - } - } - - // Void protection check. - if (!canOutputAll(new ItemStack[] { tRecipe.mOutput })) { - result = CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; - continue; - } - - // So here we check against the recipe found on the data stick. - // If we run into missing buses/hatches or bad inputs, we go to the next data stick. - // This check only happens if we have a valid up-to-date data stick. - - // first validate we have enough input busses and input hatches for this recipe - if (mInputBusses.size() < tRecipe.mInputs.length || mInputHatches.size() < tRecipe.mFluidInputs.length) { - if (GT_Values.D1) { - GT_FML_LOGGER.info( - "Not enough sources: Need ({}, {}), has ({}, {})", - mInputBusses.size(), - tRecipe.mInputs.length, - mInputHatches.size(), - tRecipe.mFluidInputs.length); - } - result = CheckRecipeResultRegistry.NO_RECIPE; - continue; - } - - // Check Inputs allign - int[] itemConsumptions = GT_Recipe_AssemblyLine.getItemConsumptionAmountArray(mInputBusses, tRecipe); - if (itemConsumptions == null || itemConsumptions.length == 0) { - result = CheckRecipeResultRegistry.NO_RECIPE; - continue; - } - maxParallel = (int) GT_Recipe_AssemblyLine - .maxParallelCalculatedByInputItems(mInputBusses, maxParallel, itemConsumptions, inputsFromME); - if (maxParallel <= 0) { - result = CheckRecipeResultRegistry.NO_RECIPE; - continue; - } - tStacks = itemConsumptions; - - if (GT_Values.D1) { - GT_FML_LOGGER.info("All Items accepted"); - } - - // Check Fluid Inputs allign - if (tRecipe.mFluidInputs.length > 0) { - maxParallel = (int) GT_Recipe_AssemblyLine - .maxParallelCalculatedByInputFluids(mInputHatches, maxParallel, tRecipe.mFluidInputs, fluidsFromME); - if (maxParallel <= 0) { - result = CheckRecipeResultRegistry.NO_RECIPE; - continue; - } - tFluids = tRecipe.mFluidInputs; - } - - if (GT_Values.D1) { - GT_FML_LOGGER.info("All fluids accepted"); - } - - if (GT_Values.D1) { - GT_FML_LOGGER.info("Check overclock"); - } - - // Recipe tier is limited to hatch tier + 1. - if (tRecipe.mEUt > averageVoltage * 4) { - result = CheckRecipeResultRegistry.insufficientPower(tRecipe.mEUt); - continue; - } - - // Insufficient power check. - if (tRecipe.mEUt > maxAmp * averageVoltage) { - result = CheckRecipeResultRegistry.insufficientPower(tRecipe.mEUt); - continue; - } - - calculateOverclockedNessMultiInternal(tRecipe.mEUt, tRecipe.mDuration, (int) maxAmp, averageVoltage, false); - // In case recipe is too OP for that machine - if (lEUt == Long.MAX_VALUE) { - if (GT_Values.D1) { - GT_FML_LOGGER.info("Recipe too OP"); - } - result = CheckRecipeResultRegistry.POWER_OVERFLOW; - continue; - } - - if (mMaxProgresstime == Integer.MAX_VALUE) { - if (GT_Values.D1) { - GT_FML_LOGGER.info("Recipe too OP"); - } - result = CheckRecipeResultRegistry.DURATION_OVERFLOW; - continue; - } - - if (GT_Values.D1) { - GT_FML_LOGGER.info("Find available recipe"); - } - result = CheckRecipeResultRegistry.SUCCESSFUL; - mOutputItems = new ItemStack[] { tRecipe.mOutput }; - break; - } - - if (!result.wasSuccessful()) { - return result; - } - - // Must be something wrong here... - if (tStacks.length == 0 || maxParallel <= 0) { - return CheckRecipeResultRegistry.INTERNAL_ERROR; - } - - if (GT_Values.D1) { - GT_FML_LOGGER.info("All checked start consuming inputs"); - } - - GT_Recipe_AssemblyLine.consumeInputItems(mInputBusses, maxParallel, tStacks, inputsFromME); - GT_Recipe_AssemblyLine.consumeInputFluids(mInputHatches, maxParallel, tFluids, fluidsFromME); - - if (this.lEUt > 0) { - this.lEUt = -this.lEUt; - } - this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - updateSlots(); - if (GT_Values.D1) { - GT_FML_LOGGER.info("Recipe successful"); - } - return result; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - for (GT_MetaTileEntity_Hatch_DataAccess hatch_dataAccess : mDataAccessHatches) { - hatch_dataAccess.setActive(true); - } - return super.onRunningTick(aStack); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mDataAccessHatches.clear(); - if (!checkPiece(STRUCTURE_PIECE_FIRST, 0, 1, 0)) return false; - return checkMachine(true) || checkMachine(false); - } - - private boolean checkMachine(boolean leftToRight) { - for (int i = 1; i < 16; i++) { - if (!checkPiece(STRUCTURE_PIECE_LATER, leftToRight ? -i : i, 1, 0)) return false; - if (!mOutputBusses.isEmpty()) - return !mEnergyHatches.isEmpty() && mMaintenanceHatches.size() == 1 && mDataAccessHatches.size() <= 1; - } - return false; - } - - /** - * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb - */ - private static boolean isCorrectDataItem(ItemStack aStack, int state) { - if ((state & 1) != 0 && ItemList.Circuit_Integrated.isStackEqual(aStack, true, true)) return true; - if ((state & 2) != 0 && ItemList.Tool_DataStick.isStackEqual(aStack, false, true)) return true; - return (state & 4) != 0 && ItemList.Tool_DataOrb.isStackEqual(aStack, false, true); - } - - /** - * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb - */ - public ArrayList getDataItems(int state) { - ArrayList rList = new ArrayList<>(); - if (GT_Utility.isStackValid(mInventory[1]) && isCorrectDataItem(mInventory[1], state)) { - rList.add(mInventory[1]); - } - for (GT_MetaTileEntity_Hatch_DataAccess tHatch : filterValidMTEs(mDataAccessHatches)) { - rList.addAll(tHatch.getInventoryItems(stack -> isCorrectDataItem(stack, state))); - } - return rList; - } - - public boolean addDataAccessToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DataAccess) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mDataAccessHatches.add((GT_MetaTileEntity_Hatch_DataAccess) aMetaTileEntity); - } - return false; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_FIRST, stackSize, hintsOnly, 0, 1, 0); - int tLength = Math.min(stackSize.stackSize + 1, 16); - for (int i = 1; i < tLength; i++) { - buildPiece(STRUCTURE_PIECE_LATER, stackSize, hintsOnly, -i, 1, 0); - } - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int build = survivialBuildPiece(STRUCTURE_PIECE_FIRST, stackSize, 0, 1, 0, elementBudget, env, false, true); - if (build >= 0) return build; - int tLength = Math.min(stackSize.stackSize + 1, 16); - for (int i = 1; i < tLength - 1; i++) { - build = survivialBuildPiece(STRUCTURE_PIECE_LATER, stackSize, -i, 1, 0, elementBudget, env, false, true); - if (build >= 0) return build; - } - return survivialBuildPiece(STRUCTURE_PIECE_LAST, stackSize, 1 - tLength, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public Set getAllowedVoidingModes() { - return VoidingMode.ITEM_ONLY_MODES; - } - - private enum DataHatchElement implements IHatchElement { - - DataAccess; - - @Override - public List> mteClasses() { - return Collections.singletonList(GT_MetaTileEntity_Hatch_DataAccess.class); - } - - @Override - public IGT_HatchAdder adder() { - return GT_MetaTileEntity_AssemblyLine::addDataAccessToMachineList; - } - - @Override - public long count(GT_MetaTileEntity_AssemblyLine t) { - return t.mDataAccessHatches.size(); - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BrickedBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BrickedBlastFurnace.java deleted file mode 100644 index a9cb7708cf..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_BrickedBlastFurnace.java +++ /dev/null @@ -1,155 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.util.GT_Waila.getMachineProgressString; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.lwjgl.input.Keyboard; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SteamVariant; -import gregtech.api.enums.Textures; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.interfaces.ISecondaryDescribable; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_BrickedBlastFurnace extends GT_MetaTileEntity_PrimitiveBlastFurnace - implements ISecondaryDescribable { - - private static final ITexture[] FACING_SIDE = { TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_DENSEBRICKS) }; - private static final ITexture[] FACING_FRONT = { - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_BRICKEDBLASTFURNACE_INACTIVE) }; - private static final ITexture[] FACING_ACTIVE = { - TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_BRICKEDBLASTFURNACE_ACTIVE), TextureFactory.builder() - .addIcon(BlockIcons.MACHINE_CASING_BRICKEDBLASTFURNACE_ACTIVE_GLOW) - .glow() - .build() }; - private GT_Multiblock_Tooltip_Builder tooltipBuilder; - - public GT_MetaTileEntity_BrickedBlastFurnace(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_BrickedBlastFurnace(String aName) { - super(aName); - } - - @Override - public String[] getDescription() { - return getCurrentDescription(); - } - - @Override - public boolean isDisplaySecondaryDescription() { - return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT); - } - - public String[] getPrimaryDescription() { - return getTooltip().getInformation(); - } - - public String[] getSecondaryDescription() { - return getTooltip().getStructureInformation(); - } - - protected GT_Multiblock_Tooltip_Builder getTooltip() { - if (tooltipBuilder == null) { - tooltipBuilder = new GT_Multiblock_Tooltip_Builder(); - tooltipBuilder.addMachineType("Blast Furnace") - .addInfo("Controller Block for the Bricked Blast Furnace") - .addInfo("Usable for Steel and general Pyrometallurgy") - .addInfo("Has a useful interface, unlike other gregtech multis") - .addPollutionAmount(GT_Mod.gregtechproxy.mPollutionPrimitveBlastFurnacePerSecond) - .addSeparator() - .beginStructureBlock(3, 4, 3, true) - .addController("Front center") - .addOtherStructurePart("Firebricks", "Everything except the controller") - .addStructureInfo("The top block is also empty") - .addStructureInfo("You can share the walls of GT multis, so") - .addStructureInfo("each additional one costs less, up to 4") - .toolTipFinisher("Gregtech"); - } - return tooltipBuilder; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - return aActive ? FACING_ACTIVE : FACING_FRONT; - } - return FACING_SIDE; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_BrickedBlastFurnace(this.mName); - } - - @Override - protected Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - @Override - protected int getCasingMetaID() { - return 15; - } - - @Override - public String getName() { - return "Bricked Blast Furnace"; - } - - @Override - public SteamVariant getSteamVariant() { - return SteamVariant.PRIMITIVE; - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - if (!this.getBaseMetaTileEntity() - .isInvalidTileEntity()) { - NBTTagCompound nbt = accessor.getNBTData(); - currenttip.add( - getMachineProgressString( - this.getBaseMetaTileEntity() - .isActive(), - nbt.getInteger("mMaxProgressTime"), - nbt.getInteger("mProgressTime"))); - } - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - if (!this.getBaseMetaTileEntity() - .isInvalidTileEntity()) { - tag.setInteger("mProgressTime", this.getProgresstime()); - tag.setInteger("mMaxProgressTime", this.maxProgresstime()); - } - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - return getTooltip().getStructureHint(); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Charcoal_Pit.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Charcoal_Pit.java deleted file mode 100644 index 3a22c4ee99..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Charcoal_Pit.java +++ /dev/null @@ -1,312 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import java.util.ArrayList; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.world.ChunkPosition; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.oredict.OreDictionary; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.ParticleFX; -import gregtech.api.interfaces.ISecondaryDescribable; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TooltipMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.WorldSpawnedEventBuilder; -import gregtech.common.GT_Pollution; - -public class GT_MetaTileEntity_Charcoal_Pit extends GT_MetaTileEntity_TooltipMultiBlockBase - implements ISecondaryDescribable { - - private boolean running = false; - - public GT_MetaTileEntity_Charcoal_Pit(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_Charcoal_Pit(String aName) { - super(aName); - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return (facing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - // No GUI, do not capture right-click so it does not interfere when placing logs - return false; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Nonnull - @Override - public CheckRecipeResult checkProcessing() { - if (!checkRecursiveBlocks()) { - mEfficiency = 0; - mEfficiencyIncrease = 0; - mMaxProgresstime = 0; - running = false; - return CheckRecipeResultRegistry.NO_RECIPE; - } - - if (mEfficiency == 0) { - mEfficiency = 10000; - mEfficiencyIncrease = 10000; - mMaxProgresstime = Math.max(1, mMaxProgresstime); - - // adds all the pollution at once when the recipe starts - GT_Pollution.addPollution(getBaseMetaTileEntity(), mMaxProgresstime * getPollutionPerTick(null)); - return CheckRecipeResultRegistry.SUCCESSFUL; - } else { - mEfficiency = 0; - mEfficiencyIncrease = 0; - mMaxProgresstime = 0; - return CheckRecipeResultRegistry.NO_RECIPE; - } - } - - private boolean checkRecursiveBlocks() { - ArrayList tList1 = new ArrayList<>(); - ArrayList tList2 = new ArrayList<>(); - - Block tBlock = getBaseMetaTileEntity().getBlockOffset(0, -1, 0); - if (isWoodLog(tBlock, getBaseMetaTileEntity().getMetaIDOffset(0, -1, 0))) { - tList2.add(new ChunkPosition(0, -1, 0)); - } else return false; - while (!tList2.isEmpty()) { - ChunkPosition tPos = tList2.get(0); - tList2.remove(0); - if (!checkAllBlockSides(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ, tList1, tList2)) { - return false; - } - } - if (running) { - for (ChunkPosition tPos : tList1) { - if (isWoodLog( - getBaseMetaTileEntity().getBlockOffset(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ), - getBaseMetaTileEntity().getMetaIDOffset(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ))) - getBaseMetaTileEntity().getWorld() - .setBlock( - getBaseMetaTileEntity().getXCoord() + tPos.chunkPosX, - getBaseMetaTileEntity().getYCoord() + tPos.chunkPosY, - getBaseMetaTileEntity().getZCoord() + tPos.chunkPosZ, - GregTech_API.sBlockReinforced, - 4, - 3); - } - running = false; - return false; - } else { - mMaxProgresstime = (int) Math.sqrt(tList1.size() * 240000); - } - running = true; - return true; - } - - private boolean isWoodLog(Block log, int meta) { - for (int id : OreDictionary.getOreIDs(new ItemStack(log, 1, meta))) { - if (OreDictionary.getOreName(id) - .equals("logWood")) return true; - } - String tTool = log.getHarvestTool(meta); - return OrePrefixes.log.contains(new ItemStack(log, 1, meta)) && ("axe".equals(tTool)) - && (log.getMaterial() == Material.wood); - } - - private boolean checkAllBlockSides(int aX, int aY, int aZ, ArrayList aList1, - ArrayList aList2) { - boolean expandToChunkXPos = false; - boolean expandToChunkXNeg = false; - boolean expandToChunkYPos = false; - boolean expandToChunkYNeg = false; - boolean expandToChunkZPos = false; - boolean expandToChunkZNeg = false; - - Block blockXPos = getBaseMetaTileEntity().getBlockOffset(aX + 1, aY, aZ); - if (aX + 1 < 6 && (isWoodLog(blockXPos, getBaseMetaTileEntity().getMetaIDOffset(aX + 1, aY, aZ)))) { - if (!aList1.contains(new ChunkPosition(aX + 1, aY, aZ)) - && (!aList2.contains(new ChunkPosition(aX + 1, aY, aZ)))) expandToChunkXPos = true; - } else if (!(blockXPos == Blocks.dirt || blockXPos == Blocks.grass)) { - return false; - } - - Block blockXNeg = getBaseMetaTileEntity().getBlockOffset(aX - 1, aY, aZ); - if (aX - 1 > -6 && (isWoodLog(blockXNeg, getBaseMetaTileEntity().getMetaIDOffset(aX - 1, aY, aZ)))) { - if (!aList1.contains(new ChunkPosition(aX - 1, aY, aZ)) - && (!aList2.contains(new ChunkPosition(aX - 1, aY, aZ)))) expandToChunkXNeg = true; - } else if (!(blockXNeg == Blocks.dirt || blockXNeg == Blocks.grass)) { - return false; - } - - Block blockYPos = getBaseMetaTileEntity().getBlockOffset(aX, aY + 1, aZ); - if (aY + 1 < 1 && (isWoodLog(blockYPos, getBaseMetaTileEntity().getMetaIDOffset(aX, aY + 1, aZ)))) { - if (!aList1.contains(new ChunkPosition(aX, aY + 1, aZ)) - && (!aList2.contains(new ChunkPosition(aX, aY + 1, aZ)))) expandToChunkYPos = true; - } else if (!(blockYPos == Blocks.dirt || blockYPos == Blocks.grass - || (aX == 0 && aY == -1 && aZ == 0 && blockYPos == GregTech_API.sBlockMachines))) { - return false; - } - - Block blockYNeg = getBaseMetaTileEntity().getBlockOffset(aX, aY - 1, aZ); - if (aY - 1 > -6 && (isWoodLog(blockYNeg, getBaseMetaTileEntity().getMetaIDOffset(aX, aY - 1, aZ)))) { - if (!aList1.contains(new ChunkPosition(aX, aY - 1, aZ)) - && (!aList2.contains(new ChunkPosition(aX, aY - 1, aZ)))) expandToChunkYNeg = true; - } else if (blockYNeg != Blocks.brick_block) { - return false; - } - - Block blockZPos = getBaseMetaTileEntity().getBlockOffset(aX, aY, aZ + 1); - if (aZ + 1 < 6 && (isWoodLog(blockZPos, getBaseMetaTileEntity().getMetaIDOffset(aX, aY, aZ + 1)))) { - if (!aList1.contains(new ChunkPosition(aX, aY, aZ + 1)) - && (!aList2.contains(new ChunkPosition(aX, aY, aZ + 1)))) expandToChunkZPos = true; - } else if (!(blockZPos == Blocks.dirt || blockZPos == Blocks.grass)) { - return false; - } - - Block blockZNeg = getBaseMetaTileEntity().getBlockOffset(aX, aY, aZ - 1); - if (aZ - 1 > -6 && (isWoodLog(blockZNeg, getBaseMetaTileEntity().getMetaIDOffset(aX, aY, aZ - 1)))) { - if (!aList1.contains(new ChunkPosition(aX, aY, aZ - 1)) - && (!aList2.contains(new ChunkPosition(aX, aY, aZ - 1)))) expandToChunkZNeg = true; - } else if (!(blockZNeg == Blocks.dirt || blockZNeg == Blocks.grass)) { - return false; - } - aList1.add(new ChunkPosition(aX, aY, aZ)); - if (expandToChunkXPos) aList2.add(new ChunkPosition(aX + 1, aY, aZ)); - if (expandToChunkXNeg) aList2.add(new ChunkPosition(aX - 1, aY, aZ)); - if (expandToChunkYPos) aList2.add(new ChunkPosition(aX, aY + 1, aZ)); - if (expandToChunkYNeg) aList2.add(new ChunkPosition(aX, aY - 1, aZ)); - if (expandToChunkZPos) aList2.add(new ChunkPosition(aX, aY, aZ + 1)); - if (expandToChunkZNeg) aList2.add(new ChunkPosition(aX, aY, aZ - 1)); - return true; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return GT_Mod.gregtechproxy.mPollutionCharcoalPitPerSecond; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public RecipeMap getRecipeMap() { - return null; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Charcoal_Pit(mName); - } - - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Charcoal Pile Igniter") - .addInfo("Controller for the Charcoal Pit") - .addInfo("Converts Logs into Brittle Charcoal blocks") - .addInfo("Will automatically start when valid") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginVariableStructureBlock(3, 13, 3, 7, 3, 13, false) - .addStructureInfo("Can be up to 13x7x13 in size, including the dirt; shape doesn't matter") - .addOtherStructurePart("Controller", "Top layer, directly touching a wood log") - .addOtherStructurePart("Dirt/Grass", "Top and middle layers, covering wood logs") - .addOtherStructurePart("Bricks", "Bottom layer, under all wood logs") - .addOtherStructurePart("Wood Logs", "Up to 5 layers, inside the previously mentioned blocks") - .addStructureInfo("No air between logs allowed.") - .addStructureInfo( - "All logs must be within 6 x/z of the controller, so it must be dead-center for a full 11x11 square of wood.") - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == ForgeDirection.UP) { - if (aActive) return new ITexture[] { casingTexturePages[0][10], - TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW) - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][10], TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ROCK_BREAKER_GLOW) - .glow() - .build(), }; - } - return new ITexture[] { casingTexturePages[0][10] }; - } - - @Override - public boolean polluteEnvironment(int aPollutionLevel) { - // Do nothing and don't choke on pollution. This is fine because we add - // all the pollution at once when the recipe starts - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - super.onPostTick(aBaseMetaTileEntity, aTimer); - if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive())) { - - new WorldSpawnedEventBuilder.ParticleEventBuilder().setMotion(0D, 0.3D, 0D) - .setIdentifier(ParticleFX.LARGE_SMOKE) - .setPosition( - aBaseMetaTileEntity.getOffsetX(ForgeDirection.UP, 1) + XSTR_INSTANCE.nextFloat(), - aBaseMetaTileEntity.getOffsetY(ForgeDirection.UP, 1), - aBaseMetaTileEntity.getOffsetZ(ForgeDirection.UP, 1) + XSTR_INSTANCE.nextFloat()) - .setWorld(getBaseMetaTileEntity().getWorld()) - .run(); - } - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java deleted file mode 100644 index 93f6db2044..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java +++ /dev/null @@ -1,527 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.GT_Values.debugCleanroom; -import static gregtech.api.enums.Textures.BlockIcons.BLOCK_PLASCRETE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_CLEANROOM; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_CLEANROOM_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_CLEANROOM_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_CLEANROOM_GLOW; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.config.ConfigCategory; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.ICleanroom; -import gregtech.api.interfaces.ICleanroomReceiver; -import gregtech.api.interfaces.ISecondaryDescribable; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicHull; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TooltipMultiBlockBase; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiBlockBase - implements IConstructable, ISecondaryDescribable, ICleanroom { - - private final Set cleanroomReceivers = new HashSet<>(); - private int mHeight = -1; - - public GT_MetaTileEntity_Cleanroom(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_Cleanroom(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Cleanroom(mName); - } - - @Override - public int getCleanness() { - return mEfficiency; - } - - @Override - public boolean isValidCleanroom() { - return isValid() && mMachine; - } - - @Override - public void pollute() { - mEfficiency = 0; - mWrench = false; - mScrewdriver = false; - mSoftHammer = false; - mHardHammer = false; - mSolderingTool = false; - mCrowbar = false; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Cleanroom") - .addInfo("Controller block for the Cleanroom") - .addInfo("Consumes 40 EU/t when first turned on") - .addInfo("and 4 EU/t once at 100% efficiency") - .addInfo("If you use an LV energy hatch, it will actually accept 2A instead of just 1A.") - .addInfo( - "MV+ energy hatches just accept 1A as usual. For HV+ the cleanroom will overclock and gain efficiency faster.") - .addInfo("Time required to reach full efficiency is proportional to") - .addInfo("the height of empty space within") - .addInfo("Machines that cause pollution aren't allowed to be put in.") - .addSeparator() - .beginVariableStructureBlock(3, 15, 4, 15, 3, 15, true) - .addController("Top center") - .addCasingInfoRange("Plascrete", 20, 1007, false) - .addStructureInfo( - GT_Values.cleanroomGlass - + "% of the Plascrete can be replaced with Reinforced Glass (not counting the top layer)") - .addStructureInfo( - "Other material can be used in place of Plascrete, even in higher percentages. See config for detail") - .addOtherStructurePart("Filter Machine Casing", "Top besides controller and edges") - .addEnergyHatch("Any casing except top layer. Exactly one.") - .addMaintenanceHatch("Any casing except top layer") - .addStructureInfo("0-2x Reinforced Door (keep closed or efficiency will reduce)") - .addStructureInfo("Up to 1 Elevator, Rotating Elevator, and Travel Anchor each") - .addStructureInfo("Up to 10 Machine Hulls for Item & Energy transfer through walls") - .addStructureInfo("You can also use Diodes for more power") - .addStructureInfo("Diodes also count towards 10 Machine Hulls count limit") - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public String[] getStructureDescription(ItemStack itemStack) { - return new String[] { "The base can be rectangular." }; - } - - @Nonnull - @Override - public CheckRecipeResult checkProcessing() { - mEfficiencyIncrease = 100; - final long inputVoltage = getMaxInputVoltage(); - - // only allow LV+ energy hatches - if (inputVoltage < TierEU.LV) { - return CheckRecipeResultRegistry.insufficientPower(40); - } - - // use the standard overclock mechanism to determine duration and estimate a maximum consumption - // if the cleanroom is powered by an LV energy hatch, it will actually accept 2A instead of just 1A. - calculateOverclockedNessMultiInternal( - 40, - 45 * Math.max(1, mHeight - 1), - inputVoltage == TierEU.LV ? 2 : 1, - inputVoltage, - false); - // negate it to trigger the special energy consumption function. divide by 10 to get the actual final - // consumption. - mEUt /= -10; - return SimpleCheckRecipeResult.ofSuccess("cleanroom_running"); - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return (facing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - int x = 1; - int z = 1; - int y = 1; - int mDoorCount = 0; - int mHullCount = 0; - int mPlascreteCount = 0; - final HashMap otherBlocks = new HashMap<>(); - boolean doorState = false; - this.mUpdate = 100; - cleanroomReceivers.forEach(r -> r.setCleanroom(null)); - cleanroomReceivers.clear(); - - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Checking machine"); - } - for (int i = 1; i < 8; i++) { - final Block tBlock = aBaseMetaTileEntity.getBlockOffset(i, 0, 0); - final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(i, 0, 0); - if (tBlock != GregTech_API.sBlockCasings3 || tMeta != 11) { - if (tBlock == GregTech_API.sBlockReinforced || tMeta == 2) { - x = i; - break; - } else { - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Unable to detect room X edge?"); - } - return false; - } - } - } - for (int i = 1; i < 8; i++) { - final Block tBlock = aBaseMetaTileEntity.getBlockOffset(0, 0, i); - final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(0, 0, i); - if (tBlock != GregTech_API.sBlockCasings3 || tMeta != 11) { - if (tBlock == GregTech_API.sBlockReinforced || tMeta == 2) { - z = i; - break; - } else { - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Unable to detect room Z edge?"); - } - return false; - } - } - } - // detect rectangular area of filters - for (int i = -x + 1; i < x; i++) { - for (int j = -z + 1; j < z; j++) { - if (i == 0 && j == 0) continue; - final Block tBlock = aBaseMetaTileEntity.getBlockOffset(i, 0, j); - final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(i, 0, j); - if (tBlock != GregTech_API.sBlockCasings3 && tMeta != 11) { - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: This is not a filter."); - } - return false; - } - } - } - - for (int i = -1; i > -16; i--) { - final Block tBlock = aBaseMetaTileEntity.getBlockOffset(x, i, z); - final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(x, i, z); - if (tBlock != GregTech_API.sBlockReinforced || tMeta != 2) { - y = i + 1; - break; - } - } - if (y > -2) { - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Room not tall enough?"); - } - return false; - } - for (int dX = -x; dX <= x; dX++) { - for (int dZ = -z; dZ <= z; dZ++) { - for (int dY = 0; dY >= y; dY--) { - if (dX == -x || dX == x || dY == 0 || dY == y || dZ == -z || dZ == z) { - Block tBlock = aBaseMetaTileEntity.getBlockOffset(dX, dY, dZ); - int tMeta = aBaseMetaTileEntity.getMetaIDOffset(dX, dY, dZ); - if (dY == 0) { // TOP - if (dX == -x || dX == x || dZ == -z || dZ == z) { // Top Border - if (tBlock != GregTech_API.sBlockReinforced || tMeta != 2) { - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Non reinforced block on top edge? tMeta != 2"); - } - return false; - } - mPlascreteCount++; - } else if (dX != 0 || dZ != 0) { // Top Inner exclude center - if (tBlock != GregTech_API.sBlockCasings3 || tMeta != 11) { - if (debugCleanroom) { - GT_Log.out.println( - "Cleanroom: Non reinforced block on top face interior? tMeta != 11"); - } - return false; - } - } - } else if (tBlock == GregTech_API.sBlockReinforced && tMeta == 2) { - mPlascreteCount++; - } else { - final IGregTechTileEntity tTileEntity = aBaseMetaTileEntity - .getIGregTechTileEntityOffset(dX, dY, dZ); - if ((!this.addMaintenanceToMachineList(tTileEntity, 210)) - && (!this.addEnergyInputToMachineList(tTileEntity, 210))) { - if (tBlock instanceof ic2.core.block.BlockIC2Door) { - if ((tMeta & 8) == 0) { - // let's not fiddle with bits anymore. - if (Math.abs(dZ) < z) // on side parallel to z axis - doorState = tMeta == 1 || tMeta == 3 || tMeta == 4 || tMeta == 6; - else if (Math.abs(dX) < x) // on side parallel to x axis - doorState = tMeta == 0 || tMeta == 2 || tMeta == 5 || tMeta == 7; - // corners ignored - } - mDoorCount++; - } else { - if (tTileEntity != null) { - final IMetaTileEntity aMetaTileEntity = tTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Missing block? Not a aMetaTileEntity"); - } - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_BasicHull) { - mHullCount++; - } else { - if (debugCleanroom) { - GT_Log.out.println( - "Cleanroom: Incorrect GT block? " + tBlock.getUnlocalizedName()); - } - return false; - } - } else { - String key = tBlock.getUnlocalizedName() + ":" + tMeta; - if (config.containsKey(key)) { // check with meta first - otherBlocks.compute(key, (k, v) -> v == null ? 1 : v + 1); - } else { - key = tBlock.getUnlocalizedName(); - if (config.containsKey(key)) { - otherBlocks.compute(key, (k, v) -> v == null ? 1 : v + 1); - } else { - if (debugCleanroom) { - GT_Log.out.println( - "Cleanroom: not allowed block " + tBlock.getUnlocalizedName()); - } - return false; - } - } - } - } - } - } - } - } - } - } - if (this.mMaintenanceHatches.size() != 1 || this.mEnergyHatches.size() != 1 - || mDoorCount > 4 - || mHullCount > 10) { - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Incorrect number of doors, hulls, or hatches."); - } - return false; - } - if (mPlascreteCount < 20) { - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Could not find 20 Plascrete."); - } - return false; - } - int otherBlockCount = 0; - for (int v : otherBlocks.values()) { - otherBlockCount += v; - } - int maxAllowedRatio = 0; - for (Map.Entry e : otherBlocks.entrySet()) { - final ConfigEntry ce = config.get(e.getKey()); - maxAllowedRatio += Math.max(maxAllowedRatio, ce.percentage); - if (ce.allowedCount > 0) { // count has priority - if (e.getValue() > ce.allowedCount) { - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Absolute count too high for a block."); - } - return false; - } - } else if ((e.getValue() * 100) / (mPlascreteCount + otherBlockCount) > ce.percentage) { - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Relative count too high for a block."); - } - return false; - } - } - if ((otherBlockCount * 100) / (mPlascreteCount + otherBlockCount) > maxAllowedRatio) { - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Relative count of all non-plascrete blocks too high."); - } - return false; - } - - setCleanroomReceivers(x, y, z, aBaseMetaTileEntity); - - if (doorState) { - this.mEfficiency = Math.max(0, this.mEfficiency - 200); - } - for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { - final byte t = (byte) Math.max(1, (byte) (15 / (10000f / this.mEfficiency))); - aBaseMetaTileEntity.setInternalOutputRedstoneSignal(tSide, t); - } - this.mHeight = -y; - if (debugCleanroom) { - GT_Log.out.println("Cleanroom: Check successful."); - } - return true; - } - - private void setCleanroomReceivers(int x, int y, int z, IGregTechTileEntity aBaseMetaTileEntity) { - for (int dX = -x + 1; dX <= x - 1; dX++) { - for (int dZ = -z + 1; dZ <= z - 1; dZ++) for (int dY = -1; dY >= y + 1; dY--) { - TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityOffset(dX, dY, dZ); - if (tTileEntity instanceof ICleanroomReceiver receiver) { - receiver.setCleanroom(this); - cleanroomReceivers.add(receiver); - } - } - } - } - - @Override - public boolean allowGeneralRedstoneOutput() { - return true; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if ((sideDirection.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) != 0) { - return new ITexture[] { TextureFactory.of(BLOCK_PLASCRETE), active - ? TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_CLEANROOM_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_CLEANROOM_ACTIVE_GLOW) - .glow() - .build()) - : TextureFactory.of( - TextureFactory.of(OVERLAY_TOP_CLEANROOM), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_CLEANROOM_GLOW) - .glow() - .build()) }; - } - return new ITexture[] { TextureFactory.of(BLOCK_PLASCRETE) }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - int i = Math.min(itemStack.stackSize, 7); - IGregTechTileEntity baseEntity = this.getBaseMetaTileEntity(); - World world = baseEntity.getWorld(); - int x = baseEntity.getXCoord(); - int y = baseEntity.getYCoord(); - int z = baseEntity.getZCoord(); - int yoff = Math.max(i * 2, 3); - for (int X = x - i; X <= x + i; X++) for (int Y = y; Y >= y - yoff; Y--) for (int Z = z - i; Z <= z + i; Z++) { - if (X == x && Y == y && Z == z) continue; - if (X == x - i || X == x + i || Z == z - i || Z == z + i || Y == y - yoff) { - if (b) StructureLibAPI.hintParticle(world, X, Y, Z, GregTech_API.sBlockReinforced, 2); - else world.setBlock(X, Y, Z, GregTech_API.sBlockReinforced, 2, 2); - } else if (Y == y) { - if (b) StructureLibAPI.hintParticle(world, X, Y, Z, GregTech_API.sBlockCasings3, 11); - else world.setBlock(X, Y, Z, GregTech_API.sBlockCasings3, 11, 2); - } - } - } - - private static class ConfigEntry { - - final int percentage; - final int allowedCount; - - ConfigEntry(int percentage, int count) { - this.percentage = percentage; - this.allowedCount = count; - } - } - - private static final HashMap config = new HashMap<>(); - private static final String category = "cleanroom_allowed_blocks"; - - private static void setDefaultConfigValues(Configuration cfg) { - cfg.get("cleanroom_allowed_blocks.manaGlass", "Name", "tile.manaGlass"); - cfg.get("cleanroom_allowed_blocks.manaGlass", "Percentage", 50); - cfg.get("cleanroom_allowed_blocks.elfGlass", "Name", "tile.elfGlass"); - cfg.get("cleanroom_allowed_blocks.elfGlass", "Percentage", 50); - cfg.get("cleanroom_allowed_blocks.reinforced_glass", "Name", "blockAlloyGlass"); - cfg.get("cleanroom_allowed_blocks.reinforced_glass", "Percentage", 5); - cfg.get("cleanroom_allowed_blocks.bw_reinforced_glass_0", "Name", "BW_GlasBlocks"); - cfg.get("cleanroom_allowed_blocks.bw_reinforced_glass_0", "Percentage", 50); - cfg.get("cleanroom_allowed_blocks.bw_reinforced_glass_0", "Meta", 0); - cfg.get("cleanroom_allowed_blocks.bw_reinforced_glass", "Name", "BW_GlasBlocks"); - cfg.get("cleanroom_allowed_blocks.bw_reinforced_glass", "Percentage", 100); - cfg.get("cleanroom_allowed_blocks.elevator", "Name", "tile.openblocks.elevator"); - cfg.get("cleanroom_allowed_blocks.elevator", "Count", 1); - cfg.get("cleanroom_allowed_blocks.travel_anchor", "Name", "tile.blockTravelAnchor"); - cfg.get("cleanroom_allowed_blocks.travel_anchor", "Count", 1); - cfg.get("cleanroom_allowed_blocks.warded_glass", "Name", "tile.blockCosmeticOpaque"); - cfg.get("cleanroom_allowed_blocks.warded_glass", "Meta", 2); - cfg.get("cleanroom_allowed_blocks.warded_glass", "Percentage", 50); - cfg.save(); - } - - public static void loadConfig(Configuration cfg) { - if (!cfg.hasCategory(category)) setDefaultConfigValues(cfg); - for (ConfigCategory cc : cfg.getCategory(category) - .getChildren()) { - final String name = cc.get("Name") - .getString(); - if (cc.containsKey("Count")) { - if (cc.containsKey("Meta")) config.put( - name + ":" - + cc.get("Meta") - .getInt(), - new ConfigEntry( - 0, - cc.get("Count") - .getInt())); - else config.put( - name, - new ConfigEntry( - 0, - cc.get("Count") - .getInt())); - } else if (cc.containsKey("Percentage")) { - if (cc.containsKey("Meta")) config.put( - name + ":" - + cc.get("Meta") - .getInt(), - new ConfigEntry( - cc.get("Percentage") - .getInt(), - 0)); - else config.put( - name, - new ConfigEntry( - cc.get("Percentage") - .getInt(), - 0)); - } - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfiller1.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfiller1.java deleted file mode 100644 index e61cfc0feb..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfiller1.java +++ /dev/null @@ -1,53 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_ConcreteBackfiller1 extends GT_MetaTileEntity_ConcreteBackfillerBase { - - public GT_MetaTileEntity_ConcreteBackfiller1(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_ConcreteBackfiller1(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - return createTooltip("Concrete Backfiller"); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ConcreteBackfiller1(mName); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_SolidSteel; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.Steel; - } - - @Override - protected int getCasingTextureIndex() { - return 16; - } - - @Override - protected int getRadius() { - return 16; - } - - @Override - protected int getMinTier() { - return 2; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfiller2.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfiller2.java deleted file mode 100644 index c175d73cb1..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfiller2.java +++ /dev/null @@ -1,54 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_ConcreteBackfiller2 extends GT_MetaTileEntity_ConcreteBackfillerBase { - - public GT_MetaTileEntity_ConcreteBackfiller2(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_ConcreteBackfiller2(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - return createTooltip("Advanced Concrete Backfiller"); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ConcreteBackfiller2(mName); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_StableTitanium; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.Titanium; - } - - @Override - protected int getCasingTextureIndex() { - return 50; - } - - @Override - protected int getRadius() { - int tConfig = getTotalConfigValue() * 2; - return tConfig >= 128 ? 128 : tConfig <= 0 ? 64 : tConfig; - } - - @Override - protected int getMinTier() { - return 4; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java deleted file mode 100644 index 3ad37f4c37..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ConcreteBackfillerBase.java +++ /dev/null @@ -1,265 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.fluids.IFluidBlock; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.widgets.GT_LockedWhileActiveButton; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; - -public abstract class GT_MetaTileEntity_ConcreteBackfillerBase extends GT_MetaTileEntity_DrillerBase { - - private int mLastXOff = 0, mLastZOff = 0; - - /** Used to drive the readout in the GUI for the backfiller's current y-level. */ - private int clientYHead; - - protected boolean mLiquidEnabled = true; - - private static boolean isWater(Block aBlock) { - return aBlock == Blocks.water || aBlock == Blocks.flowing_water; - } - - private static boolean isLava(Block aBlock) { - return aBlock == Blocks.lava || aBlock == Blocks.flowing_lava; - } - - private static boolean isFluid(Block aBlock) { - return isWater(aBlock) || isLava(aBlock) || aBlock instanceof IFluidBlock; - } - - public GT_MetaTileEntity_ConcreteBackfillerBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - initRecipeResults(); - } - - public GT_MetaTileEntity_ConcreteBackfillerBase(String aName) { - super(aName); - initRecipeResults(); - } - - private void initRecipeResults() { - addResultMessage(STATE_UPWARD, true, "backfiller_working"); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("liquidenabled", mLiquidEnabled); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("liquidenabled")) mLiquidEnabled = aNBT.getBoolean("liquidenabled"); - } - - protected GT_Multiblock_Tooltip_Builder createTooltip(String aStructureName) { - String casings = getCasingBlockItem().get(0) - .getDisplayName(); - - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Concrete Backfiller") - .addInfo("Controller Block for the " + aStructureName) - .addInfo("Will fill in areas below it with light concrete. This goes through walls") - .addInfo("Use it to remove any spawning locations beneath your base to reduce lag") - .addInfo("Will pull back the pipes after it finishes that layer") - .addInfo("Radius is " + getRadius() + " blocks") - .addSeparator() - .beginStructureBlock(3, 7, 3, false) - .addController("Front bottom") - .addOtherStructurePart(casings, "form the 3x1x3 Base") - .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") - .addOtherStructurePart(getFrameMaterial().mName + " Frame Boxes", "Each pillar's side and 1x3x1 on top") - .addEnergyHatch("1x " + VN[getMinTier()] + "+, Any base casing", 1) - .addMaintenanceHatch("Any base casing", 1) - .addInputBus("Mining Pipes, optional, any base casing", 1) - .addInputHatch("GT Concrete, any base casing", 1) - .addOutputBus("Mining Pipes, optional, any base casing", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - protected abstract int getRadius(); - - @Override - protected boolean checkHatches() { - return !mMaintenanceHatches.isEmpty() && !mInputHatches.isEmpty() && mEnergyHatches.size() == 1; - } - - @Override - protected List> getAllowedHatches() { - return ImmutableList.of(InputHatch, InputBus, Maintenance, Energy); - } - - @Override - protected void setElectricityStats() { - this.mEfficiency = getCurrentEfficiency(null); - this.mEfficiencyIncrease = 10000; - int tier = Math.max(1, GT_Utility.getTier(getMaxInputVoltage())); - this.mEUt = -6 * (1 << (tier << 1)); - this.mMaxProgresstime = (workState == STATE_UPWARD ? 240 : 80) / (1 << tier); - this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime); - } - - @Override - protected boolean workingUpward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, - int yHead, int oldYHead) { - if (isRefillableBlock(xPipe, yHead - 1, zPipe)) return tryRefillBlock(xPipe, yHead - 1, zPipe); - int radius = getRadius(); - if (mLastXOff == 0 && mLastZOff == 0) { - mLastXOff = -radius; - mLastZOff = -radius; - } - if (yHead != yDrill) { - for (int i = mLastXOff; i <= radius; i++) { - for (int j = (i == mLastXOff ? mLastZOff : -radius); j <= radius; j++) { - if (isRefillableBlock(xPipe + i, yHead, zPipe + j)) { - mLastXOff = i; - mLastZOff = j; - return tryRefillBlock(xPipe + i, yHead, zPipe + j); - } - } - } - } - - if (tryPickPipe()) { - mLastXOff = 0; - mLastZOff = 0; - return true; - } else { - workState = STATE_DOWNWARD; - stopMachine(ShutDownReasonRegistry.NONE); - setShutdownReason(StatCollector.translateToLocal("GT5U.gui.text.backfiller_finished")); - return false; - } - } - - private boolean isRefillableBlock(int aX, int aY, int aZ) { - IGregTechTileEntity aBaseTile = getBaseMetaTileEntity(); - Block aBlock = aBaseTile.getBlock(aX, aY, aZ); - if (!aBlock.isAir(aBaseTile.getWorld(), aX, aY, aZ)) { - if (mLiquidEnabled) { - if (!isFluid(aBlock)) { - return false; - } - } else { - return false; - } - } - if (aBlock.getMaterial() - .isSolid()) { - return false; - } - return GT_Utility - .setBlockByFakePlayer(getFakePlayer(aBaseTile), aX, aY, aZ, GregTech_API.sBlockConcretes, 8, true); - } - - private boolean tryRefillBlock(int aX, int aY, int aZ) { - if (!tryConsumeFluid()) { - setRuntimeFailureReason(CheckRecipeResultRegistry.BACKFILLER_NO_CONCRETE); - return false; - } - getBaseMetaTileEntity().getWorld() - .setBlock(aX, aY, aZ, GregTech_API.sBlockConcretes, 8, 3); - return true; - } - - private boolean tryConsumeFluid() { - if (!depleteInput(Materials.Concrete.getMolten(144L))) { - mMaxProgresstime = 0; - return false; - } - return true; - } - - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - screenElements - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocalFormatted( - "GT5U.gui.text.backfiller_current_area", - numberFormat.format(clientYHead))) - .setSynced(false) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_UPWARD)) - .widget(new FakeSyncWidget.IntegerSyncer(this::getYHead, newInt -> clientYHead = newInt)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> workState, newInt -> workState = newInt)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - final int BUTTON_Y_LEVEL = 91; - - builder.widget( - new GT_LockedWhileActiveButton(this.getBaseMetaTileEntity(), builder) - .setOnClick((clickData, widget) -> mLiquidEnabled = !mLiquidEnabled) - .setPlayClickSound(true) - .setBackground(() -> { - if (mLiquidEnabled) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_BUTTON_LIQUIDMODE }; - } - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_LIQUIDMODE_OFF }; - }) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer(() -> mLiquidEnabled, newBoolean -> mLiquidEnabled = newBoolean), - builder, - (widget, val) -> widget.notifyTooltipChange()) - .dynamicTooltip( - () -> ImmutableList.of( - StatCollector.translateToLocal( - mLiquidEnabled ? "GT5U.gui.button.liquid_filling_ON" - : "GT5U.gui.button.liquid_filling_OFF"))) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(new Pos2d(100, BUTTON_Y_LEVEL)) - .setSize(16, 16)); - int left = 98; - for (ButtonWidget button : getAdditionalButtons(builder, buildContext)) { - button.setPos(new Pos2d(left, BUTTON_Y_LEVEL)) - .setSize(16, 16); - builder.widget(button); - left += 18; - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DieselEngine.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DieselEngine.java deleted file mode 100644 index 6c77dc7f0d..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DieselEngine.java +++ /dev/null @@ -1,416 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Dynamo; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.recipe.maps.FuelBackend; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_DieselEngine - extends GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { - - @Override - protected IStructureDefinition computeValue(Class type) { - return StructureDefinition.builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { "---", "iii", "chc", "chc", "ccc", }, { "---", "i~i", "hgh", "hgh", "cdc", }, - { "---", "iii", "chc", "chc", "ccc", }, })) - .addElement('i', lazy(t -> ofBlock(t.getIntakeBlock(), t.getIntakeMeta()))) - .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMeta()))) - .addElement('g', lazy(t -> ofBlock(t.getGearboxBlock(), t.getGearboxMeta()))) - .addElement('d', lazy(t -> Dynamo.newAny(t.getCasingTextureIndex(), 2))) - .addElement( - 'h', - lazy( - t -> buildHatchAdder(GT_MetaTileEntity_DieselEngine.class) - .atLeast(InputHatch, InputHatch, InputHatch, Muffler, Maintenance) - .casingIndex(t.getCasingTextureIndex()) - .dot(1) - .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) - .build(); - } - }; - protected int fuelConsumption = 0; - protected int fuelValue = 0; - protected int fuelRemaining = 0; - protected boolean boostEu = false; - - public GT_MetaTileEntity_DieselEngine(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_DieselEngine(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Combustion Generator") - .addInfo("Controller block for the Large Combustion Engine") - .addInfo("Supply Diesel Fuels and 1000L of Lubricant per hour to run") - .addInfo("Supply 40L/s of Oxygen to boost output (optional)") - .addInfo("Default: Produces 2048EU/t at 100% fuel efficiency") - .addInfo("Boosted: Produces 6144EU/t at 150% fuel efficiency") - .addInfo("You need to wait for it to reach 300% to output full power") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 4, false) - .addController("Front center") - .addCasingInfoRange("Stable Titanium Machine Casing", 16, 22, false) - .addOtherStructurePart("Titanium Gear Box Machine Casing", "Inner 2 blocks") - .addOtherStructurePart("Engine Intake Machine Casing", "8x, ring around controller") - .addStructureInfo("Engine Intake Casings must not be obstructed in front (only air blocks)") - .addDynamoHatch("Back center", 2) - .addMaintenanceHatch("One of the casings next to a Gear Box", 1) - .addMufflerHatch("Top middle back, above the rear Gear Box", 1) - .addInputHatch("Diesel Fuel, next to a Gear Box", 1) - .addInputHatch("Lubricant, next to a Gear Box", 1) - .addInputHatch("Oxygen, optional, next to a Gear Box", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { casingTexturePages[0][50], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][50], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DIESEL_ENGINE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][50] }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return getMaxEfficiency(aStack) > 0; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.dieselFuels; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - /** - * The nominal energy output This can be further multiplied by {@link #getMaxEfficiency(ItemStack)} when boosted - */ - protected int getNominalOutput() { - return 2048; - } - - protected Materials getBooster() { - return Materials.Oxygen; - } - - /** - * x times fuel will be consumed when boosted This will however NOT increase power output Go tweak - * {@link #getMaxEfficiency(ItemStack)} and {@link #getNominalOutput()} instead - */ - protected int getBoostFactor() { - return 2; - } - - /** - * x times of additive will be consumed when boosted - */ - protected int getAdditiveFactor() { - return 1; - } - - /** - * Efficiency will increase by this amount every tick - */ - protected int getEfficiencyIncrease() { - return 15; - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - ArrayList tFluids = getStoredFluids(); - - // fast track lookup - if (!tFluids.isEmpty()) { - double boostedFuelValue = 0; - double boostedOutput = 0; - double extraFuelFraction = 0; - for (FluidStack tFluid : tFluids) { - GT_Recipe tRecipe = getRecipeMap().getBackend() - .findFuel(tFluid); - if (tRecipe == null) continue; - fuelValue = tRecipe.mSpecialValue; - - FluidStack tLiquid = tFluid.copy(); - if (boostEu) { - boostedFuelValue = GT_Utility.safeInt((long) (fuelValue * 1.5)); - boostedOutput = getNominalOutput() * 3; - - fuelConsumption = tLiquid.amount = getBoostFactor() * getNominalOutput() / fuelValue; - - // HOG consumption rate is normally 1 L/t, when it's supposed to be around 1.64 L/t - // This code increases fuel consumption by 1 at random, but with a weighted chance - if (boostedFuelValue * 2 > boostedOutput) { - extraFuelFraction = boostedOutput / boostedFuelValue; - extraFuelFraction = extraFuelFraction - (int) extraFuelFraction; - double rand = Math.random(); - if (rand < extraFuelFraction) { - tLiquid.amount += 1; - } - } - - } else { - fuelConsumption = tLiquid.amount = getNominalOutput() / fuelValue; - } - - // Deplete that amount - if (!depleteInput(tLiquid)) return CheckRecipeResultRegistry.NO_FUEL_FOUND; - boostEu = depleteInput(getBooster().getGas(2L * getAdditiveFactor())); - - // Check to prevent burning HOG without consuming it, if not boosted - if (!boostEu && fuelValue > getNominalOutput()) { - return SimpleCheckRecipeResult.ofFailure("fuel_quality_too_high"); - } - - // Deplete Lubricant. 1000L should = 1 hour of runtime (if baseEU = 2048) - if ((mRuntime % 72 == 0 || mRuntime == 0) - && !depleteInput(Materials.Lubricant.getFluid((boostEu ? 2L : 1L) * getAdditiveFactor()))) - return SimpleCheckRecipeResult.ofFailure("no_lubricant"); - - fuelRemaining = tFluid.amount; // Record available fuel - this.mEUt = mEfficiency < 2000 ? 0 : getNominalOutput(); // Output 0 if startup is less than 20% - this.mProgresstime = 1; - this.mMaxProgresstime = 1; - this.mEfficiencyIncrease = getEfficiencyIncrease(); - return CheckRecipeResultRegistry.GENERATING; - } - } - this.mEUt = 0; - this.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION.get(getClass()); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 1) && !mMufflerHatches.isEmpty() - && mMaintenanceHatches.size() == 1; - } - - public Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - public byte getCasingMeta() { - return 2; - } - - public Block getIntakeBlock() { - return GregTech_API.sBlockCasings4; - } - - public byte getIntakeMeta() { - return 13; - } - - public Block getGearboxBlock() { - return GregTech_API.sBlockCasings2; - } - - public byte getGearboxMeta() { - return 4; - } - - public byte getCasingTextureIndex() { - return 50; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_DieselEngine(this.mName); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 1; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return boostEu ? 30000 : 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return GT_Mod.gregtechproxy.mPollutionLargeCombustionEnginePerSecond; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return true; - } - - @Override - public String[] getInfoData() { - int mPollutionReduction = 0; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); - } - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Dynamo tHatch : filterValidMTEs(mDynamoHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - - return new String[] { EnumChatFormatting.BLUE + "Diesel Engine" + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - getIdealStatus() == getRepairStatus() - ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") - + EnumChatFormatting.RESET - : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.engine.output") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(((long) mEUt * mEfficiency / 10000)) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("GT5U.engine.consumption") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(fuelConsumption) - + EnumChatFormatting.RESET - + " L/t", - StatCollector.translateToLocal("GT5U.engine.value") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(fuelValue) - + EnumChatFormatting.RESET - + " EU/L", - StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " - + EnumChatFormatting.GOLD - + GT_Utility.formatNumbers(fuelRemaining) - + EnumChatFormatting.RESET - + " L", - StatCollector.translateToLocal("GT5U.engine.efficiency") + ": " - + EnumChatFormatting.YELLOW - + (mEfficiency / 100F) - + EnumChatFormatting.YELLOW - + " %", - StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %" }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 1, 1); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 1, 1, elementBudget, env, false, true); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java deleted file mode 100644 index 1f5fec10f3..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DistillationTower.java +++ /dev/null @@ -1,369 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.fluid.IFluidStore; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Output_ME; - -public class GT_MetaTileEntity_DistillationTower extends - GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - protected static final int CASING_INDEX = 49; - protected static final String STRUCTURE_PIECE_BASE = "base"; - protected static final String STRUCTURE_PIECE_LAYER = "layer"; - protected static final String STRUCTURE_PIECE_LAYER_HINT = "layerHint"; - protected static final String STRUCTURE_PIECE_TOP_HINT = "topHint"; - private static final IStructureDefinition STRUCTURE_DEFINITION; - - static { - IHatchElement layeredOutputHatch = OutputHatch - .withCount(GT_MetaTileEntity_DistillationTower::getCurrentLayerOutputHatchCount) - .withAdder(GT_MetaTileEntity_DistillationTower::addLayerOutputHatch); - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape(STRUCTURE_PIECE_BASE, transpose(new String[][] { { "b~b", "bbb", "bbb" }, })) - .addShape(STRUCTURE_PIECE_LAYER, transpose(new String[][] { { "lll", "lcl", "lll" }, })) - .addShape(STRUCTURE_PIECE_LAYER_HINT, transpose(new String[][] { { "lll", "l-l", "lll" }, })) - .addShape(STRUCTURE_PIECE_TOP_HINT, transpose(new String[][] { { "LLL", "LLL", "LLL" }, })) - .addElement( - 'b', - ofChain( - buildHatchAdder(GT_MetaTileEntity_DistillationTower.class) - .atLeast(Energy, OutputBus, InputHatch, InputBus, Maintenance) - .casingIndex(CASING_INDEX) - .dot(1) - .build(), - onElementPass( - GT_MetaTileEntity_DistillationTower::onCasingFound, - ofBlock(GregTech_API.sBlockCasings4, 1)))) - .addElement( - 'l', - ofChain( - buildHatchAdder(GT_MetaTileEntity_DistillationTower.class).atLeast(layeredOutputHatch) - .casingIndex(CASING_INDEX) - .dot(2) - .disallowOnly(ForgeDirection.UP, ForgeDirection.DOWN) - .build(), - ofHatchAdder(GT_MetaTileEntity_DistillationTower::addEnergyInputToMachineList, CASING_INDEX, 2), - ofHatchAdder(GT_MetaTileEntity_DistillationTower::addLayerOutputHatch, CASING_INDEX, 2), - ofHatchAdder(GT_MetaTileEntity_DistillationTower::addMaintenanceToMachineList, CASING_INDEX, 2), - onElementPass( - GT_MetaTileEntity_DistillationTower::onCasingFound, - ofBlock(GregTech_API.sBlockCasings4, 1)))) - // hint element only used in top layer - .addElement( - 'L', - buildHatchAdder(GT_MetaTileEntity_DistillationTower.class).atLeast(layeredOutputHatch) - .casingIndex(CASING_INDEX) - .dot(2) - .disallowOnly(ForgeDirection.UP) - .buildAndChain(GregTech_API.sBlockCasings4, 1)) - .addElement( - 'c', - ofChain( - onElementPass( - t -> t.onTopLayerFound(false), - ofHatchAdder(GT_MetaTileEntity_DistillationTower::addOutputToMachineList, CASING_INDEX, 3)), - onElementPass( - t -> t.onTopLayerFound(false), - ofHatchAdder( - GT_MetaTileEntity_DistillationTower::addMaintenanceToMachineList, - CASING_INDEX, - 3)), - onElementPass(t -> t.onTopLayerFound(true), ofBlock(GregTech_API.sBlockCasings4, 1)), - isAir())) - .build(); - } - - protected final List> mOutputHatchesByLayer = new ArrayList<>(); - protected int mHeight; - protected int mCasing; - protected boolean mTopLayerFound; - - public GT_MetaTileEntity_DistillationTower(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_DistillationTower(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_DistillationTower(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Distillery") - .addInfo("Controller block for the Distillation Tower") - .addInfo("Fluids are only put out at the correct height") - .addInfo("The correct height equals the slot number in the NEI recipe") - .addSeparator() - .beginVariableStructureBlock(3, 3, 3, 12, 3, 3, true) - .addController("Front bottom") - .addOtherStructurePart("Clean Stainless Steel Machine Casing", "7 x h - 5 (minimum)") - .addEnergyHatch("Any casing except top centre", 1, 2) - .addMaintenanceHatch("Any casing", 1, 2, 3) - .addInputHatch("Any bottom layer casing", 1) - .addOutputBus("Any bottom layer casing", 1) - .addOutputHatch("2-11x Output Hatches (At least one per layer except bottom layer)", 2, 3) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection == facingDirection) { - if (active) return new ITexture[] { BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.distillationTowerRecipes; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic(); - } - - protected void onCasingFound() { - mCasing++; - } - - protected void onTopLayerFound(boolean aIsCasing) { - mTopLayerFound = true; - if (aIsCasing) onCasingFound(); - } - - protected int getCurrentLayerOutputHatchCount() { - return mOutputHatchesByLayer.size() < mHeight || mHeight <= 0 ? 0 - : mOutputHatchesByLayer.get(mHeight - 1) - .size(); - } - - protected boolean addLayerOutputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null || aTileEntity.isDead() - || !(aTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_Hatch_Output tHatch)) return false; - while (mOutputHatchesByLayer.size() < mHeight) mOutputHatchesByLayer.add(new ArrayList<>()); - tHatch.updateTexture(aBaseCasingIndex); - return mOutputHatchesByLayer.get(mHeight - 1) - .add(tHatch); - } - - @Override - public List getFluidOutputSlots(FluidStack[] toOutput) { - return getFluidOutputSlotsByLayer(toOutput, mOutputHatchesByLayer); - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - // don't rotate a freaking tower, it won't work - return (d, r, f) -> (d.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 && r.isNotRotated() - && !f.isVerticallyFliped(); - } - - @Override - public boolean isRotationChangeAllowed() { - return false; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - // reset - mOutputHatchesByLayer.forEach(List::clear); - mHeight = 1; - mTopLayerFound = false; - mCasing = 0; - - // check base - if (!checkPiece(STRUCTURE_PIECE_BASE, 1, 0, 0)) return false; - - // check each layer - while (mHeight < 12) { - if (!checkPiece(STRUCTURE_PIECE_LAYER, 1, mHeight, 0)) { - return false; - } - if (mOutputHatchesByLayer.size() < mHeight || mOutputHatchesByLayer.get(mHeight - 1) - .isEmpty()) - // layer without output hatch - return false; - if (mTopLayerFound) { - break; - } - // not top - mHeight++; - } - - // validate final invariants... (actual height is mHeight+1) - return mCasing >= 7 * (mHeight + 1) - 5 && mHeight + 1 >= 3 - && mTopLayerFound - && mMaintenanceHatches.size() == 1; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - protected void addFluidOutputs(FluidStack[] mOutputFluids2) { - for (int i = 0; i < mOutputFluids2.length && i < mOutputHatchesByLayer.size(); i++) { - final FluidStack fluidStack = mOutputFluids2[i]; - if (fluidStack == null) continue; - FluidStack tStack = fluidStack.copy(); - if (!dumpFluid(mOutputHatchesByLayer.get(i), tStack, true)) - dumpFluid(mOutputHatchesByLayer.get(i), tStack, false); - } - } - - @Override - public boolean canDumpFluidToME() { - // All fluids can be dumped to ME only if each layer contains a ME Output Hatch. - return this.mOutputHatchesByLayer.stream() - .allMatch( - tLayerOutputHatches -> tLayerOutputHatches.stream() - .anyMatch( - tHatch -> (tHatch instanceof GT_MetaTileEntity_Hatch_Output_ME tMEHatch) - && (tMEHatch.canAcceptFluid()))); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 1, 0, 0); - int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height - for (int i = 1; i < tTotalHeight - 1; i++) { - buildPiece(STRUCTURE_PIECE_LAYER_HINT, stackSize, hintsOnly, 1, i, 0); - } - buildPiece(STRUCTURE_PIECE_TOP_HINT, stackSize, hintsOnly, 1, tTotalHeight - 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - mHeight = 0; - int built = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 1, 0, 0, elementBudget, env, false, true); - if (built >= 0) return built; - int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height - for (int i = 1; i < tTotalHeight - 1; i++) { - mHeight = i; - built = survivialBuildPiece( - STRUCTURE_PIECE_LAYER_HINT, - stackSize, - 1, - i, - 0, - elementBudget, - env, - false, - true); - if (built >= 0) return built; - } - mHeight = tTotalHeight - 1; - return survivialBuildPiece( - STRUCTURE_PIECE_TOP_HINT, - stackSize, - 1, - tTotalHeight - 1, - 0, - elementBudget, - env, - false, - true); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.GT_MACHINES_DISTILLERY_LOOP; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DrillerBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DrillerBase.java deleted file mode 100644 index 702185c9bd..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_DrillerBase.java +++ /dev/null @@ -1,952 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.W; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ORE_DRILL; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ORE_DRILL_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ORE_DRILL_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ORE_DRILL_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.getCasingTextureForId; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.StatCollector; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.widgets.GT_LockedWhileActiveButton; -import gregtech.api.interfaces.IChunkLoader; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_DataAccess; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.objects.GT_ChunkManager; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; - -public abstract class GT_MetaTileEntity_DrillerBase - extends GT_MetaTileEntity_EnhancedMultiBlockBase - implements IChunkLoader, ISurvivalConstructable { - - private static final ItemStack miningPipe = GT_ModHandler.getIC2Item("miningPipe", 0); - private static final ItemStack miningPipeTip = GT_ModHandler.getIC2Item("miningPipeTip", 0); - private static final Block miningPipeBlock = GT_Utility.getBlockFromStack(miningPipe); - private static final Block miningPipeTipBlock = GT_Utility.getBlockFromStack(miningPipeTip); - protected static final String STRUCTURE_PIECE_MAIN = "main"; - protected static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { - - @Override - protected IStructureDefinition computeValue(Class type) { - return StructureDefinition.builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { " ", " f ", " " }, { " ", " f ", " " }, { " ", " f ", " " }, - { " f ", "fcf", " f " }, { " f ", "fcf", " f " }, { " f ", "fcf", " f " }, - { "b~b", "bbb", "bbb" }, })) - .addElement('f', lazy(t -> ofFrame(t.getFrameMaterial()))) - .addElement( - 'c', - lazy( - t -> ofBlock( - t.getCasingBlockItem() - .getBlock(), - t.getCasingBlockItem() - .get(0) - .getItemDamage()))) - .addElement( - 'b', - lazy( - t -> buildHatchAdder(GT_MetaTileEntity_DrillerBase.class).atLeastList(t.getAllowedHatches()) - .adder(GT_MetaTileEntity_DrillerBase::addToMachineList) - .casingIndex(t.casingTextureIndex) - .dot(1) - .buildAndChain( - t.getCasingBlockItem() - .getBlock(), - t.getCasingBlockItem() - .get(0) - .getItemDamage()))) - .build(); - } - }; - - private Block casingBlock; - private int casingMeta; - private int frameMeta; - protected int casingTextureIndex; - protected boolean isPickingPipes; - - private ForgeDirection back; - - private int xDrill, yDrill, zDrill, xPipe, zPipe, yHead; - - protected int getXDrill() { - return xDrill; - } - - protected int getZDrill() { - return zDrill; - } - - protected int getYHead() { - return yHead; - } - - protected int workState; - protected static final int STATE_DOWNWARD = 0, STATE_AT_BOTTOM = 1, STATE_UPWARD = 2, STATE_ABORT = 3; - - protected boolean mChunkLoadingEnabled = true; - protected ChunkCoordIntPair mCurrentChunk = null; - protected boolean mWorkChunkNeedsReload = true; - - /** Stores default result messages for success/failures of each work state. */ - private final Map resultRegistry = new HashMap<>(); - - /** Allows inheritors to supply custom runtime failure messages. */ - private CheckRecipeResult runtimeFailure = null; - private CheckRecipeResult lastRuntimeFailure = null; - - /** Allows inheritors to supply custom shutdown failure messages. */ - private @NotNull String shutdownReason = ""; - - /** Allows inheritors to suppress wiping the last error if the machine is forcibly turned off. */ - protected boolean suppressErrorWipe = false; - - public GT_MetaTileEntity_DrillerBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - initFields(); - } - - public GT_MetaTileEntity_DrillerBase(String aName) { - super(aName); - initFields(); - } - - private void initFields() { - casingBlock = getCasingBlockItem().getBlock(); - casingMeta = getCasingBlockItem().get(0) - .getItemDamage(); - int frameId = 4096 + getFrameMaterial().mMetaItemSubID; - frameMeta = GregTech_API.METATILEENTITIES[frameId] != null - ? GregTech_API.METATILEENTITIES[frameId].getTileEntityBaseType() - : W; - casingTextureIndex = getCasingTextureIndex(); - workState = STATE_DOWNWARD; - - // Inheritors can overwrite these to add custom operating messages. - addResultMessage(STATE_DOWNWARD, true, "deploying_pipe"); - addResultMessage(STATE_DOWNWARD, false, "extracting_pipe"); - addResultMessage(STATE_AT_BOTTOM, true, "drilling"); - addResultMessage(STATE_AT_BOTTOM, false, "no_mining_pipe"); - addResultMessage(STATE_UPWARD, true, "retracting_pipe"); - addResultMessage(STATE_UPWARD, false, "drill_generic_finished"); - addResultMessage(STATE_ABORT, true, "retracting_pipe"); - addResultMessage(STATE_ABORT, false, "drill_retract_pipes_finished"); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection == facingDirection) { - if (active) return new ITexture[] { getCasingTextureForId(casingTextureIndex), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ORE_DRILL_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ORE_DRILL_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { getCasingTextureForId(casingTextureIndex), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ORE_DRILL) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ORE_DRILL_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { getCasingTextureForId(casingTextureIndex) }; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("workState", workState); - aNBT.setBoolean("chunkLoadingEnabled", mChunkLoadingEnabled); - aNBT.setBoolean("isChunkloading", mCurrentChunk != null); - if (mCurrentChunk != null) { - aNBT.setInteger("loadedChunkXPos", mCurrentChunk.chunkXPos); - aNBT.setInteger("loadedChunkZPos", mCurrentChunk.chunkZPos); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - workState = aNBT.getInteger("workState"); - if (aNBT.hasKey("isPickingPipes")) - workState = aNBT.getBoolean("isPickingPipes") ? STATE_UPWARD : STATE_DOWNWARD; - if (aNBT.hasKey("chunkLoadingEnabled")) mChunkLoadingEnabled = aNBT.getBoolean("chunkLoadingEnabled"); - if (aNBT.getBoolean("isChunkloading")) { - mCurrentChunk = new ChunkCoordIntPair( - aNBT.getInteger("loadedChunkXPos"), - aNBT.getInteger("loadedChunkZPos")); - } - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, - EntityPlayer entityPlayer, float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getFrontFacing()) { - mChunkLoadingEnabled = !mChunkLoadingEnabled; - GT_Utility.sendChatToPlayer( - entityPlayer, - mChunkLoadingEnabled ? GT_Utility.trans("502", "Mining chunk loading enabled") - : GT_Utility.trans("503", "Mining chunk loading disabled")); - return true; - } - return super.onSolderingToolRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ); - } - - @Override - public void onRemoval() { - if (mChunkLoadingEnabled) GT_ChunkManager.releaseTicket((TileEntity) getBaseMetaTileEntity()); - super.onRemoval(); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && mCurrentChunk != null - && !mWorkChunkNeedsReload - && !aBaseMetaTileEntity.isAllowedToWork()) { - // if machine has stopped, stop chunkloading - GT_ChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); - mWorkChunkNeedsReload = true; - } - } - - protected boolean tryPickPipe() { - if (yHead == yDrill) return isPickingPipes = false; - if (tryOutputPipe()) { - if (checkBlockAndMeta(xPipe, yHead + 1, zPipe, miningPipeBlock, W)) getBaseMetaTileEntity().getWorld() - .setBlock(xPipe, yHead + 1, zPipe, miningPipeTipBlock); - getBaseMetaTileEntity().getWorld() - .setBlockToAir(xPipe, yHead, zPipe); - return isPickingPipes = true; - } - return isPickingPipes = false; - } - - /** - * @return 0 for succeeded, 1 for invalid block, 2 for not having mining pipes, 3 for event canceled. - */ - protected int tryLowerPipeState() { - return tryLowerPipeState(false); - } - - /** - * @return 0 for succeeded, 1 for invalid block, 2 for not having mining pipes, 3 for event canceled. - */ - protected int tryLowerPipeState(boolean isSimulating) { - if (!isHasMiningPipes()) return 2; - switch (canLowerPipe()) { - case 1 -> { - return 1; - } - case 2 -> { - return 3; - } - } - - Block b = getBaseMetaTileEntity().getBlock(xPipe, yHead - 1, zPipe); - if (b != miningPipeTipBlock && !GT_Utility.setBlockByFakePlayer( - getFakePlayer(getBaseMetaTileEntity()), - xPipe, - yHead - 1, - zPipe, - miningPipeTipBlock, - 0, - isSimulating)) return 3; - if (!isSimulating) { - if (yHead != yDrill) getBaseMetaTileEntity().getWorld() - .setBlock(xPipe, yHead, zPipe, miningPipeBlock); - if (b != miningPipeBlock && b != miningPipeTipBlock) getBaseMetaTileEntity().decrStackSize(1, 1); - } - - return 0; - } - - private void putMiningPipesFromInputsInController() { - int maxPipes = miningPipe.getMaxStackSize(); - if (isHasMiningPipes(maxPipes)) return; - - ItemStack pipes = getStackInSlot(1); - if (pipes != null && !pipes.isItemEqual(miningPipe)) return; - for (ItemStack storedItem : getStoredInputs()) { - if (!storedItem.isItemEqual(miningPipe)) continue; - - if (pipes == null) { - setInventorySlotContents(1, GT_Utility.copyOrNull(miningPipe)); - pipes = getStackInSlot(1); - } - - if (pipes.stackSize == maxPipes) break; - - int needPipes = maxPipes - pipes.stackSize; - int transferPipes = Math.min(storedItem.stackSize, needPipes); - - pipes.stackSize += transferPipes; - storedItem.stackSize -= transferPipes; - } - updateSlots(); - } - - private boolean tryOutputPipe() { - if (!getBaseMetaTileEntity().addStackToSlot(1, GT_Utility.copyAmount(1, miningPipe))) - mOutputItems = new ItemStack[] { GT_Utility.copyAmount(1, miningPipe) }; - return true; - } - - /** - * @return 0 for available, 1 for invalid block, 2 for event canceled. - */ - protected int canLowerPipe() { - IGregTechTileEntity aBaseTile = getBaseMetaTileEntity(); - if (yHead > 0 && GT_Utility.getBlockHardnessAt(aBaseTile.getWorld(), xPipe, yHead - 1, zPipe) >= 0) { - return GT_Utility.eraseBlockByFakePlayer(getFakePlayer(aBaseTile), xPipe, yHead - 1, zPipe, true) ? 0 : 2; - } - return 1; - } - - protected boolean reachingVoidOrBedrock() { - return yHead <= 0 || checkBlockAndMeta(xPipe, yHead - 1, zPipe, Blocks.bedrock, W); - } - - private boolean isHasMiningPipes() { - return isHasMiningPipes(1); - } - - private boolean isHasMiningPipes(int minCount) { - ItemStack pipe = getStackInSlot(1); - return pipe != null && pipe.stackSize > minCount - 1 && pipe.isItemEqual(miningPipe); - } - - /** - * @deprecated Readded for compability - * @return if no pipes are present - */ - @Deprecated - protected boolean waitForPipes() { - return !isHasMiningPipes(); - } - - private boolean isEnergyEnough() { - long requiredEnergy = 512 + getMaxInputVoltage() * 4; - for (GT_MetaTileEntity_Hatch_Energy energyHatch : mEnergyHatches) { - requiredEnergy -= energyHatch.getEUVar(); - if (requiredEnergy <= 0) return true; - } - return false; - } - - protected boolean workingDownward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, - int yHead, int oldYHead) { - switch (tryLowerPipeState()) { - case 2 -> { - mMaxProgresstime = 0; - setRuntimeFailureReason(CheckRecipeResultRegistry.MISSING_MINING_PIPE); - return false; - } - case 3 -> { - workState = STATE_UPWARD; - return true; - } - case 1 -> { - workState = STATE_AT_BOTTOM; - return true; - } - default -> { - return true; - } - } - } - - protected boolean workingAtBottom(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, - int yHead, int oldYHead) { - if (tryLowerPipeState(true) == 0) { - workState = STATE_DOWNWARD; - return true; - } - workState = STATE_UPWARD; - return true; - } - - protected boolean workingUpward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, - int yHead, int oldYHead) { - if (tryPickPipe()) { - return true; - } else { - workState = STATE_DOWNWARD; - stopMachine(ShutDownReasonRegistry.NONE); - return false; - } - } - - /** Called once when the abort button is clicked. Use to perform any needed cleanup (e.g. unloading chunks.) */ - protected void onAbort() {} - - protected void abortDrilling() { - if (workState != STATE_ABORT) { - workState = STATE_ABORT; - onAbort(); - setShutdownReason(""); - - if (!isAllowedToWork()) { - enableWorking(); - } - } - } - - // This is a distinct state from workingUpward, because some inheritors (like concrete backfiller) operate - // exclusively on the workingUpward phase. It also allows for more distinct status messages. - protected boolean workingToAbortOperation(@NotNull ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, - int zPipe, int yHead, int oldYHead) { - if (tryPickPipe()) { - return true; - } else { - workState = STATE_DOWNWARD; - stopMachine(ShutDownReasonRegistry.NONE); - return false; - } - } - - @Override - public void enableWorking() { - super.enableWorking(); - shutdownReason = ""; - } - - @Override - public void onDisableWorking() { - if (suppressErrorWipe) { - suppressErrorWipe = false; - } else { - super.onDisableWorking(); - } - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - ItemStack controllerStack = getControllerSlot(); - // Public pipe actions - setElectricityStats(); - int oldYHead = yHead; - if (!checkPipesAndSetYHead()) { - stopMachine(ShutDownReasonRegistry.NONE); - return SimpleCheckRecipeResult.ofFailure("no_mining_pipe"); - } else if (!isEnergyEnough()) { - stopMachine(ShutDownReasonRegistry.NONE); - return SimpleCheckRecipeResult.ofFailure("not_enough_energy"); - } - putMiningPipesFromInputsInController(); - - final boolean wasSuccessful; - switch (workState) { - case STATE_DOWNWARD -> wasSuccessful = workingDownward( - controllerStack, - xDrill, - yDrill, - zDrill, - xPipe, - zPipe, - yHead, - oldYHead); - case STATE_AT_BOTTOM -> wasSuccessful = workingAtBottom( - controllerStack, - xDrill, - yDrill, - zDrill, - xPipe, - zPipe, - yHead, - oldYHead); - case STATE_UPWARD -> wasSuccessful = workingUpward( - controllerStack, - xDrill, - yDrill, - zDrill, - xPipe, - zPipe, - yHead, - oldYHead); - case STATE_ABORT -> wasSuccessful = workingToAbortOperation( - controllerStack, - xDrill, - yDrill, - zDrill, - xPipe, - zPipe, - yHead, - oldYHead); - default -> wasSuccessful = false; - } - - if (runtimeFailure == null) { - if (wasSuccessful) { - lastRuntimeFailure = null; - } - - return resultRegistry.getOrDefault( - new ResultRegistryKey(workState, wasSuccessful), - SimpleCheckRecipeResult.ofFailure("no_mining_pipe")); - } else { - final CheckRecipeResult result; - result = lastRuntimeFailure = runtimeFailure; - runtimeFailure = null; - return result; - } - } - - /** - * Allow drills to set a specific failure reason specific to their situation. E.g.: out of drilling fluid. - * Should be used when the machine doesn't turn off due to the failure. - * - * @param newFailureReason A new failure reason - */ - protected void setRuntimeFailureReason(@NotNull CheckRecipeResult newFailureReason) { - runtimeFailure = newFailureReason; - } - - /** - * Gets a reason for why the drill turned off, for use in UIs and such. - * - * @return A reason, or empty if the machine is active or there is no message set yet. - */ - @NotNull - protected Optional getFailureReason() { - if (getBaseMetaTileEntity().isActive()) { - return Optional.empty(); - } - - if (!shutdownReason.isEmpty()) { - return Optional.of(shutdownReason); - } - - return Optional.ofNullable(lastRuntimeFailure) - .map(CheckRecipeResult::getDisplayString); - } - - /** - * Sets a line in the UI to explain why the drill shut down. E.g.: operation finished. - * Should be used when the machine has been turned off due to an operating issue or completion. - * - * @param newReason The reason for the machine shutdown - */ - protected void setShutdownReason(@NotNull String newReason) { - shutdownReason = newReason; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> (d.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 && r.isNotRotated() - && !f.isVerticallyFliped(); - } - - @Override - public boolean isRotationChangeAllowed() { - return false; - } - - @Override - public final IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION.get(getClass()); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - updateCoordinates(); - return checkPiece(STRUCTURE_PIECE_MAIN, 1, 6, 0) && checkHatches() - && GT_Utility.getTier(getMaxInputVoltage()) >= getMinTier() - && mMaintenanceHatches.size() == 1; - } - - private void updateCoordinates() { - xDrill = getBaseMetaTileEntity().getXCoord(); - yDrill = getBaseMetaTileEntity().getYCoord(); - zDrill = getBaseMetaTileEntity().getZCoord(); - back = getBaseMetaTileEntity().getBackFacing(); - xPipe = xDrill + back.offsetX; - zPipe = zDrill + back.offsetZ; - } - - private boolean checkPipesAndSetYHead() { - yHead = yDrill - 1; - while (checkBlockAndMeta(xPipe, yHead, zPipe, miningPipeBlock, W)) yHead--; // skip pipes - // is pipe tip OR is controller layer - if (checkBlockAndMeta(xPipe, yHead, zPipe, miningPipeTipBlock, W) || ++yHead == yDrill) return true; - // pipe column is broken - try fix - getBaseMetaTileEntity().getWorld() - .setBlock(xPipe, yHead, zPipe, miningPipeTipBlock); - return true; - } - - private boolean checkBlockAndMeta(int x, int y, int z, Block block, int meta) { - return (meta == W || getBaseMetaTileEntity().getMetaID(x, y, z) == meta) - && getBaseMetaTileEntity().getBlock(x, y, z) == block; - } - - private FakePlayer mFakePlayer = null; - - protected FakePlayer getFakePlayer(IGregTechTileEntity aBaseTile) { - if (mFakePlayer == null) mFakePlayer = GT_Utility.getFakePlayer(aBaseTile); - mFakePlayer.setWorld(aBaseTile.getWorld()); - mFakePlayer.setPosition(aBaseTile.getXCoord(), aBaseTile.getYCoord(), aBaseTile.getZCoord()); - return mFakePlayer; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - protected abstract ItemList getCasingBlockItem(); - - protected abstract Materials getFrameMaterial(); - - protected abstract int getCasingTextureIndex(); - - protected abstract int getMinTier(); - - protected abstract boolean checkHatches(); - - protected abstract void setElectricityStats(); - - public int getTotalConfigValue() { - int config = 0; - ArrayList tCircuitList = getDataItems(1); - for (ItemStack tCircuit : tCircuitList) config += tCircuit.getItemDamage(); - return config; - } - - public ArrayList mDataAccessHatches = new ArrayList<>(); - - /** - * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb - */ - private boolean isCorrectDataItem(ItemStack aStack, int state) { - if ((state & 1) != 0 && ItemList.Circuit_Integrated.isStackEqual(aStack, true, true)) return true; - if ((state & 2) != 0 && ItemList.Tool_DataStick.isStackEqual(aStack, false, true)) return true; - return (state & 4) != 0 && ItemList.Tool_DataOrb.isStackEqual(aStack, false, true); - } - - /** - * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb - */ - public ArrayList getDataItems(int state) { - ArrayList rList = new ArrayList<>(); - if (GT_Utility.isStackValid(mInventory[1]) && isCorrectDataItem(mInventory[1], state)) { - rList.add(mInventory[1]); - } - for (GT_MetaTileEntity_Hatch_DataAccess tHatch : filterValidMTEs(mDataAccessHatches)) { - for (int i = 0; i < tHatch.getBaseMetaTileEntity() - .getSizeInventory(); i++) { - if (tHatch.getBaseMetaTileEntity() - .getStackInSlot(i) != null && isCorrectDataItem( - tHatch.getBaseMetaTileEntity() - .getStackInSlot(i), - state)) - rList.add( - tHatch.getBaseMetaTileEntity() - .getStackInSlot(i)); - } - } - return rList; - } - - @Override - public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - return super.addToMachineList(aTileEntity, aBaseCasingIndex) - || addDataAccessToMachineList(aTileEntity, aBaseCasingIndex); - } - - public boolean addDataAccessToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DataAccess) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture((byte) aBaseCasingIndex); - return mDataAccessHatches.add((GT_MetaTileEntity_Hatch_DataAccess) aMetaTileEntity); - } - return false; - } - - @Override - public ChunkCoordIntPair getActiveChunk() { - return mCurrentChunk; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 6, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 6, 0, elementBudget, env, false, true); - } - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - screenElements.widget( - TextWidget.dynamicString(() -> shutdownReason) - .setSynced(false) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled(widget -> !(getBaseMetaTileEntity().isActive() || shutdownReason.isEmpty()))) - .widget(new FakeSyncWidget.StringSyncer(() -> shutdownReason, newString -> shutdownReason = newString)); - } - - @Override - protected boolean showRecipeTextInGUI() { - return false; - } - - /** - * Adds additional buttons to the main button row. You do not need to set the position. - * - * @param builder Only use to attach SyncWidgets. - * @param buildContext Context for things like the player. - */ - protected List getAdditionalButtons(ModularWindow.Builder builder, UIBuildContext buildContext) { - return ImmutableList.of(); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - final int BUTTON_Y_LEVEL = 91; - - builder.widget( - new GT_LockedWhileActiveButton(this.getBaseMetaTileEntity(), builder) - .setOnClick((clickData, widget) -> mChunkLoadingEnabled = !mChunkLoadingEnabled) - .setPlayClickSound(true) - .setBackground(() -> { - if (mChunkLoadingEnabled) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_BUTTON_CHUNK_LOADING }; - } - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_CHUNK_LOADING_OFF }; - }) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer( - () -> mChunkLoadingEnabled, - newBoolean -> mChunkLoadingEnabled = newBoolean), - builder, - (widget, val) -> widget.notifyTooltipChange()) - .dynamicTooltip( - () -> ImmutableList.of( - StatCollector.translateToLocal( - mChunkLoadingEnabled ? "GT5U.gui.button.chunk_loading_on" - : "GT5U.gui.button.chunk_loading_off"))) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(new Pos2d(80, BUTTON_Y_LEVEL)) - .setSize(16, 16)) - .widget( - new ButtonWidget().setOnClick((clickData, widget) -> abortDrilling()) - .setPlayClickSound(true) - .setBackground(() -> { - if (workState == STATE_ABORT) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_BUTTON_RETRACT_PIPE, GT_UITextures.OVERLAY_BUTTON_LOCKED }; - } - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_RETRACT_PIPE }; - }) - .attachSyncer( - new FakeSyncWidget.IntegerSyncer(() -> workState, (newInt) -> workState = newInt), - builder, - (widget, integer) -> widget.notifyTooltipChange()) - .dynamicTooltip( - () -> ImmutableList.of( - StatCollector.translateToLocalFormatted( - workState == STATE_ABORT ? "GT5U.gui.button.drill_retract_pipes_active" - : "GT5U.gui.button.drill_retract_pipes"))) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(new Pos2d(174, 112)) - .setSize(16, 16)); - - int left = 98; - for (ButtonWidget button : getAdditionalButtons(builder, buildContext)) { - button.setPos(new Pos2d(left, BUTTON_Y_LEVEL)) - .setSize(16, 16); - builder.widget(button); - left += 18; - } - } - - protected List> getAllowedHatches() { - return ImmutableList.of( - InputHatch, - OutputHatch, - InputBus, - OutputBus, - Muffler, - Maintenance, - Energy, - DataHatchElement.DataAccess); - } - - protected enum DataHatchElement implements IHatchElement { - - DataAccess; - - @Override - public List> mteClasses() { - return Collections.singletonList(GT_MetaTileEntity_Hatch_DataAccess.class); - } - - @Override - public IGT_HatchAdder adder() { - return GT_MetaTileEntity_DrillerBase::addDataAccessToMachineList; - } - - @Override - public long count(GT_MetaTileEntity_DrillerBase t) { - return t.mDataAccessHatches.size(); - } - } - - /** - * Sets or overrides the {@link CheckRecipeResult} for a given work state - * - * @param state A work state like {@link #STATE_DOWNWARD}. - * @param result A previously registered recipe result. - */ - protected void addResultMessage(final int state, @NotNull final CheckRecipeResult result) { - resultRegistry.put(new ResultRegistryKey(state, result.wasSuccessful()), result); - } - - /** - * Sets or overrides the {@link CheckRecipeResult} for a given work state and operation success type. - * - * @param state A work state like {@link #STATE_DOWNWARD}. - * @param wasSuccessful Whether the operation was successful. - * @param resultKey An I18N key for the message. - */ - protected void addResultMessage(final int state, final boolean wasSuccessful, @NotNull final String resultKey) { - addResultMessage( - state, - wasSuccessful ? SimpleCheckRecipeResult.ofSuccess(resultKey) - : SimpleCheckRecipeResult.ofFailure(resultKey)); - } - - @SuppressWarnings("ClassCanBeRecord") - private final static class ResultRegistryKey { - - private final int state; - private final boolean successful; - - public ResultRegistryKey(final int state, final boolean successful) { - this.state = state; - this.successful = successful; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (!(obj instanceof ResultRegistryKey other)) { - return false; - } - - return (state == other.state && successful == other.successful); - } - - @Override - public int hashCode() { - return Objects.hash(state, successful); - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java deleted file mode 100644 index 49b2cc6998..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ElectricBlastFurnace.java +++ /dev/null @@ -1,401 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.fluid.IFluidStore; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_ElectricBlastFurnace extends - GT_MetaTileEntity_AbstractMultiFurnace implements ISurvivalConstructable { - - private int mHeatingCapacity = 0; - protected final ArrayList mPollutionOutputHatches = new ArrayList<>(); - protected final FluidStack[] pollutionFluidStacks = { Materials.CarbonDioxide.getGas(1000), - Materials.CarbonMonoxide.getGas(1000), Materials.SulfurDioxide.getGas(1000) }; - - protected static final int CASING_INDEX = 11; - protected static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { "ttt", "tmt", "ttt" }, { "CCC", "C-C", "CCC" }, { "CCC", "C-C", "CCC" }, - { "b~b", "bbb", "bbb" } })) - .addElement( - 't', - buildHatchAdder(GT_MetaTileEntity_ElectricBlastFurnace.class) - .atLeast( - OutputHatch.withAdder(GT_MetaTileEntity_ElectricBlastFurnace::addOutputHatchToTopList) - .withCount(t -> t.mPollutionOutputHatches.size())) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(GregTech_API.sBlockCasings1, CASING_INDEX)) - .addElement('m', Muffler.newAny(CASING_INDEX, 2)) - .addElement( - 'C', - ofCoil( - GT_MetaTileEntity_ElectricBlastFurnace::setCoilLevel, - GT_MetaTileEntity_ElectricBlastFurnace::getCoilLevel)) - .addElement( - 'b', - buildHatchAdder(GT_MetaTileEntity_ElectricBlastFurnace.class) - .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(GregTech_API.sBlockCasings1, CASING_INDEX)) - .build(); - - public GT_MetaTileEntity_ElectricBlastFurnace(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_ElectricBlastFurnace(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ElectricBlastFurnace(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Blast Furnace") - .addInfo("Controller block for the Electric Blast Furnace") - .addInfo("You can use some fluids to reduce recipe time. Place the circuit in the Input Bus") - .addInfo("Each 900K over the min. Heat required reduces power consumption by 5% (multiplicatively)") - .addInfo("Each 1800K over the min. Heat allows for an overclock to be upgraded to a perfect overclock.") - .addInfo("That means the EBF will reduce recipe time by a factor 4 instead of 2 (giving 100% efficiency).") - .addInfo("Additionally gives +100K for every tier past MV") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 4, 3, true) - .addController("Front bottom") - .addCasingInfoRange("Heat Proof Machine Casing", 0, 15, false) - .addOtherStructurePart("Heating Coils", "Two middle Layers") - .addEnergyHatch("Any bottom layer casing", 3) - .addMaintenanceHatch("Any bottom layer casing", 3) - .addMufflerHatch("Top middle", 2) - .addInputBus("Any bottom layer casing", 3) - .addInputHatch("Any bottom layer casing", 3) - .addOutputBus("Any bottom layer casing", 3) - .addOutputHatch("Fluid outputs, Any bottom layer casing") - .addOutputHatch("Pollution gases (CO2/CO/SO2), Any top layer casing", 1) - .addStructureInfo("Pollution gas output amount scales with Muffler Hatch tier") - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return GT_Mod.gregtechproxy.mPollutionEBFPerSecond; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.blastFurnaceRecipes; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setRecipeHeat(recipe.mSpecialValue) - .setMachineHeat(mHeatingCapacity) - .setHeatOC(true) - .setHeatDiscount(true); - } - - @Override - protected @Nonnull CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - return recipe.mSpecialValue <= mHeatingCapacity ? CheckRecipeResultRegistry.SUCCESSFUL - : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); - } - }; - } - - public boolean addOutputHatchToTopList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mPollutionOutputHatches.add((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity); - } - return false; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.mHeatingCapacity = 0; - - setCoilLevel(HeatingCoilLevel.None); - - mPollutionOutputHatches.clear(); - - if (!checkPiece(STRUCTURE_PIECE_MAIN, 1, 3, 0)) return false; - - if (getCoilLevel() == HeatingCoilLevel.None) return false; - - if (mMaintenanceHatches.size() != 1) return false; - - this.mHeatingCapacity = (int) getCoilLevel().getHeat() + 100 * (GT_Utility.getTier(getMaxInputVoltage()) - 2); - return true; - } - - @Override - public boolean addOutput(FluidStack aLiquid) { - if (aLiquid == null) return false; - FluidStack tLiquid = aLiquid.copy(); - ArrayList tOutputHatches; - if (isPollutionFluid(tLiquid)) { - tOutputHatches = this.mPollutionOutputHatches; - multiplyPollutionFluidAmount(tLiquid); - } else { - tOutputHatches = this.mOutputHatches; - } - return dumpFluid(tOutputHatches, tLiquid, true) || dumpFluid(tOutputHatches, tLiquid, false); - } - - protected boolean isPollutionFluid(@Nullable FluidStack fluidStack) { - if (fluidStack == null) return false; - for (FluidStack pollutionFluidStack : pollutionFluidStacks) { - if (!fluidStack.isFluidEqual(pollutionFluidStack)) continue; - return true; - } - return false; - } - - @Override - public List getFluidOutputSlots(FluidStack[] toOutput) { - if (Arrays.stream(toOutput) - .anyMatch(this::isPollutionFluid)) { - return filterValidMTEs(mPollutionOutputHatches); - } - return filterValidMTEs(mOutputHatches); - } - - /** - * @return 100 -> all released to air, 0 -> all dumped to hatch - */ - public int getPollutionReduction() { - int reduction = 100; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - reduction = Math.min(tHatch.calculatePollutionReduction(100), reduction); - } - return reduction; - } - - protected void multiplyPollutionFluidAmount(@Nonnull FluidStack fluid) { - fluid.amount = fluid.amount * Math.min(100 - getPollutionReduction(), 100) / 100; - } - - @Override - public String[] getInfoData() { - int mPollutionReduction = getPollutionReduction(); - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - - return new String[] { - StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(-lEUt) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getMaxInputVoltage()) - + EnumChatFormatting.RESET - + " EU/t(*2A) " - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + VN[GT_Utility.getTier(getMaxInputVoltage())] - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - StatCollector.translateToLocal("GT5U.EBF.heat") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mHeatingCapacity) - + EnumChatFormatting.RESET - + " K", - StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %" }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 3, 0, elementBudget, env, false, true); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - inputSeparation = !inputSeparation; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("isBussesSeparate")) { - // backward compatibility - inputSeparation = aNBT.getBoolean("isBussesSeparate"); - } - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ExtremeDieselEngine.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ExtremeDieselEngine.java deleted file mode 100644 index dace58a492..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ExtremeDieselEngine.java +++ /dev/null @@ -1,237 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EXTREME_DIESEL_ENGINE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.maps.FuelBackend; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_ExtremeDieselEngine extends GT_MetaTileEntity_DieselEngine { - - public GT_MetaTileEntity_ExtremeDieselEngine(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_ExtremeDieselEngine(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Combustion Generator") - .addInfo("Controller block for the Extreme Combustion Engine") - .addInfo("Supply high rating fuel and 8000L of Lubricant per hour to run") - .addInfo("Supply 40L/s of Liquid Oxygen to boost output (optional)") - .addInfo("Default: Produces 10900EU/t at 100% fuel efficiency") - .addInfo("Boosted: Produces 32700EU/t at 150% fuel efficiency") - .addInfo("You need to wait for it to reach 300% to output full power") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 4, false) - .addController("Front center") - .addCasingInfoRange("Robust Tungstensteel Machine Casing", 16, 22, false) - .addOtherStructurePart("Titanium Gear Box Machine Casing", "Inner 2 blocks") - .addOtherStructurePart("Extreme Engine Intake Machine Casing", "8x, ring around controller") - .addStructureInfo("Extreme Engine Intake Casings must not be obstructed in front (only air blocks)") - .addDynamoHatch("Back center", 2) - .addMaintenanceHatch("One of the casings next to a Gear Box", 1) - .addMufflerHatch("Top middle back, above the rear Gear Box", 1) - .addInputHatch("HOG, next to a Gear Box", 1) - .addInputHatch("Lubricant, next to a Gear Box", 1) - .addInputHatch("Liquid Oxygen, optional, next to a Gear Box", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.extremeDieselFuels; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { casingTexturePages[0][60], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][60], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_EXTREME_DIESEL_ENGINE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][60] }; - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - @Override - public byte getCasingMeta() { - return 0; - } - - @Override - public Block getIntakeBlock() { - return GregTech_API.sBlockCasings8; - } - - @Override - public byte getIntakeMeta() { - return 4; - } - - @Override - public Block getGearboxBlock() { - return GregTech_API.sBlockCasings2; - } - - @Override - public byte getGearboxMeta() { - return 4; - } - - @Override - public byte getCasingTextureIndex() { - return 60; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ExtremeDieselEngine(this.mName); - } - - @Override - protected int getNominalOutput() { - return 10900; - } - - @Override - protected int getBoostFactor() { - return 2; - } - - @Override - protected Materials getBooster() { - return Materials.LiquidOxygen; - } - - @Override - protected int getAdditiveFactor() { - return 1; - } - - @Override - protected int getEfficiencyIncrease() { - return 20; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return boostEu ? 30000 : 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return GT_Mod.gregtechproxy.mPollutionExtremeCombustionEnginePerSecond; - } - - @Override - public String[] getInfoData() { - int mPollutionReduction = 0; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); - } - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Dynamo tHatch : filterValidMTEs(mDynamoHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - - return new String[] { EnumChatFormatting.BLUE + "Extreme Diesel Engine" + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - getIdealStatus() == getRepairStatus() - ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") - + EnumChatFormatting.RESET - : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.engine.output") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers((long) -mEUt * mEfficiency / 10000) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("GT5U.engine.consumption") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(fuelConsumption) - + EnumChatFormatting.RESET - + " L/t", - StatCollector.translateToLocal("GT5U.engine.value") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(fuelValue) - + EnumChatFormatting.RESET - + " EU/L", - StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " - + EnumChatFormatting.GOLD - + GT_Utility.formatNumbers(fuelRemaining) - + EnumChatFormatting.RESET - + " L", - StatCollector.translateToLocal("GT5U.engine.efficiency") + ": " - + EnumChatFormatting.YELLOW - + (mEfficiency / 100F) - + EnumChatFormatting.YELLOW - + " %", - StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %" }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java deleted file mode 100644 index 9dd01c969d..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer.java +++ /dev/null @@ -1,676 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.filterByMTETier; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.Set; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableMap; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.enums.VoidingMode; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IOverclockDescriptionProvider; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.overclockdescriber.FusionOverclockDescriber; -import gregtech.api.objects.overclockdescriber.OverclockDescriber; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.tileentities.machines.multi.drone.GT_MetaTileEntity_Hatch_DroneDownLink; - -public abstract class GT_MetaTileEntity_FusionComputer - extends GT_MetaTileEntity_EnhancedMultiBlockBase - implements ISurvivalConstructable, IAddUIWidgets, IOverclockDescriptionProvider { - - private final OverclockDescriber overclockDescriber; - - public static final String STRUCTURE_PIECE_MAIN = "main"; - private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { - - @Override - protected IStructureDefinition computeValue(Class type) { - return StructureDefinition.builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { - { " ", " ihi ", " hh hh ", " h h ", - " h h ", " h h ", " i i ", " h h ", - " i i ", " h h ", " h h ", " h h ", - " hh hh ", " ihi ", " ", }, - { " xhx ", " hhccchh ", " eccxdxcce ", " eceh hece ", - " hce ech ", " hch hch ", "xcx xcx", "hch hch", - "xcx xcx", " hch hch ", " hce ech ", " eceh hece ", - " eccx~xcce ", " hhccchh ", " xhx ", }, - { " ", " ihi ", " hh hh ", " h h ", - " h h ", " h h ", " i i ", " h h ", - " i i ", " h h ", " h h ", " h h ", - " hh hh ", " ihi ", " ", } })) - .addElement('c', lazy(t -> ofBlock(t.getFusionCoil(), t.getFusionCoilMeta()))) - .addElement('h', lazy(t -> ofBlock(t.getCasing(), t.getCasingMeta()))) - .addElement( - 'i', - lazy( - t -> buildHatchAdder(GT_MetaTileEntity_FusionComputer.class) - .atLeast( - ImmutableMap.of(InputHatch.withAdder(GT_MetaTileEntity_FusionComputer::addInjector), 1)) - .hatchItemFilterAnd(t2 -> filterByMTETier(t2.tier(), Integer.MAX_VALUE)) - .casingIndex(53) - .dot(1) - .buildAndChain(t.getCasing(), t.getCasingMeta()))) - .addElement( - 'e', - lazy( - t -> buildHatchAdder(GT_MetaTileEntity_FusionComputer.class).atLeast( - ImmutableMap.of(Energy.withAdder(GT_MetaTileEntity_FusionComputer::addEnergyInjector), 16)) - .hatchItemFilterAnd(t2 -> filterByMTETier(t2.tier(), Integer.MAX_VALUE)) - .casingIndex(53) - .dot(2) - .buildAndChain(t.getCasing(), t.getCasingMeta()))) - .addElement( - 'x', - lazy( - t -> buildHatchAdder(GT_MetaTileEntity_FusionComputer.class) - .atLeast(OutputHatch.withAdder(GT_MetaTileEntity_FusionComputer::addExtractor)) - .hatchItemFilterAnd(t2 -> filterByMTETier(t2.tier(), Integer.MAX_VALUE)) - .casingIndex(53) - .dot(3) - .buildAndChain(t.getCasing(), t.getCasingMeta()))) - .addElement( - 'd', - lazy( - t -> buildHatchAdder(GT_MetaTileEntity_FusionComputer.class) - .adder(GT_MetaTileEntity_FusionComputer::addDroneHatch) - .hatchId(9401) - .casingIndex(53) - .dot(4) - .buildAndChain(t.getCasing(), t.getCasingMeta()))) - .build(); - } - }; - public GT_Recipe mLastRecipe; - public long mEUStore; - - static { - Textures.BlockIcons.setCasingTextureForId( - 52, - TextureFactory.of( - TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) - .extFacing() - .glow() - .build())); - } - - public GT_MetaTileEntity_FusionComputer(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - this.overclockDescriber = createOverclockDescriber(); - } - - public GT_MetaTileEntity_FusionComputer(String aName) { - super(aName); - this.overclockDescriber = createOverclockDescriber(); - } - - protected OverclockDescriber createOverclockDescriber() { - return new FusionOverclockDescriber((byte) tier(), capableStartupCanonical()); - } - - @Nonnull - @Override - public OverclockDescriber getOverclockDescriber() { - return overclockDescriber; - } - - public abstract int tier(); - - @Override - public abstract long maxEUStore(); - - /** - * Unlike {@link #maxEUStore()}, this provides theoretical limit of startup EU, without considering the amount of - * hatches nor the room for extra energy. Intended for simulation. - */ - public abstract long capableStartupCanonical(); - - @Override - public abstract MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity); - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { - - return side != getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (mEUt > 0) { - mEUt = -mEUt; - } - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION.get(getClass()); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addController("Fusion Reactor") - .addInfo("Some kind of fusion reactor, maybe") - .addSeparator() - .addInfo("Some kind of fusion reactor, maybe") - .addStructureInfo("Should probably be built similar to other fusions") - .addStructureInfo("See controller tooltip for details") - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return checkPiece(STRUCTURE_PIECE_MAIN, 7, 1, 12) && !mOutputHatches.isEmpty() && !mEnergyHatches.isEmpty(); - } - - private boolean addEnergyInjector(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (!(aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy tHatch)) return false; - if (tHatch.mTier < tier()) return false; - tHatch.updateTexture(aBaseCasingIndex); - return mEnergyHatches.add(tHatch); - } - - private boolean addInjector(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (!(aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input tHatch)) return false; - if (tHatch.getTierForStructure() < tier()) return false; - tHatch.updateTexture(aBaseCasingIndex); - tHatch.mRecipeMap = getRecipeMap(); - return mInputHatches.add(tHatch); - } - - private boolean addExtractor(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { - if (aBaseMetaTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (!(aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output tHatch)) return false; - if (tHatch.getTierForStructure() < tier()) return false; - tHatch.updateTexture(aBaseCasingIndex); - return mOutputHatches.add(tHatch); - } - - private boolean addDroneHatch(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { - if (aBaseMetaTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (!(aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DroneDownLink tHatch)) return false; - tHatch.updateTexture(aBaseCasingIndex); - return addToMachineList(aBaseMetaTileEntity, aBaseCasingIndex); - } - - public abstract Block getCasing(); - - public abstract int getCasingMeta(); - - public abstract Block getFusionCoil(); - - public abstract int getFusionCoilMeta(); - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) return new ITexture[] { TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS) - .extFacing() - .build(), getTextureOverlay() }; - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; - return new ITexture[] { TextureFactory.builder() - .addIcon(MACHINE_CASING_FUSION_GLASS) - .extFacing() - .build() }; - } - - /** - * @return The list of textures overlay - */ - public abstract ITexture getTextureOverlay(); - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.fusionRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected GT_ParallelHelper createParallelHelper(@NotNull GT_Recipe recipe) { - // When the fusion first loads and is still processing, it does the recipe check without consuming. - return super.createParallelHelper(recipe).setConsumption(!mRunningOnLoad); - } - - @NotNull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return overclockDescriber.createCalculator(super.createOverclockCalculator(recipe), recipe); - } - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (!mRunningOnLoad && recipe.mSpecialValue > maxEUStore()) { - return CheckRecipeResultRegistry.insufficientStartupPower(recipe.mSpecialValue); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - public CheckRecipeResult process() { - CheckRecipeResult result = super.process(); - if (mRunningOnLoad) mRunningOnLoad = false; - turnCasingActive(result.wasSuccessful()); - if (result.wasSuccessful()) { - mLastRecipe = lastRecipe; - } else { - mLastRecipe = null; - } - return result; - } - }; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Values.V[tier()]); - logic.setAvailableAmperage(1); - logic.setAmperageOC(false); - } - - public boolean turnCasingActive(boolean status) { - if (this.mEnergyHatches != null) { - for (GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) { - hatch.updateTexture(status ? 52 : 53); - } - } - if (this.mOutputHatches != null) { - for (GT_MetaTileEntity_Hatch_Output hatch : this.mOutputHatches) { - hatch.updateTexture(status ? 52 : 53); - } - } - if (this.mInputHatches != null) { - for (GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) { - hatch.updateTexture(status ? 52 : 53); - } - } - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - mTotalRunTime++; - if (mEfficiency < 0) mEfficiency = 0; - if (mRunningOnLoad && checkMachine(aBaseMetaTileEntity, mInventory[1])) { - this.mEUStore = aBaseMetaTileEntity.getStoredEU(); - checkRecipe(); - } - if (mUpdated) { - mUpdate = 50; - mUpdated = false; - } - if (--mUpdate == 0 || --mStartUpCheck == 0) { - checkStructure(true, aBaseMetaTileEntity); - } - if (mStartUpCheck < 0) { - if (mMachine) { - this.mEUStore = aBaseMetaTileEntity.getStoredEU(); - if (this.mEnergyHatches != null) { - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - long energyToMove = GT_Values.V[tier()] / 16; - if (aBaseMetaTileEntity.getStoredEU() + energyToMove < maxEUStore() - && tHatch.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(energyToMove, false)) { - aBaseMetaTileEntity.increaseStoredEnergyUnits(energyToMove, true); - } - } - } - if (this.mEUStore <= 0 && mMaxProgresstime > 0) { - stopMachine(ShutDownReasonRegistry.POWER_LOSS); - } - if (mMaxProgresstime > 0) { - this.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(-mEUt, true); - if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) { - if (mOutputItems != null) - for (ItemStack tStack : mOutputItems) if (tStack != null) addOutput(tStack); - if (mOutputFluids != null) - for (FluidStack tStack : mOutputFluids) if (tStack != null) addOutput(tStack); - mEfficiency = Math - .max(0, Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]))); - mOutputItems = null; - mProgresstime = 0; - mMaxProgresstime = 0; - mEfficiencyIncrease = 0; - if (mOutputFluids != null && mOutputFluids.length > 0) { - try { - GT_Mod.achievements.issueAchivementHatchFluid( - aBaseMetaTileEntity.getWorld() - .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), - mOutputFluids[0]); - } catch (Exception ignored) {} - } - this.mEUStore = aBaseMetaTileEntity.getStoredEU(); - if (aBaseMetaTileEntity.isAllowedToWork()) checkRecipe(); - } - } else { - if (aTick % 100 == 0 || aBaseMetaTileEntity.hasWorkJustBeenEnabled() - || aBaseMetaTileEntity.hasInventoryBeenModified()) { - turnCasingActive(mMaxProgresstime > 0); - if (aBaseMetaTileEntity.isAllowedToWork()) { - this.mEUStore = aBaseMetaTileEntity.getStoredEU(); - if (checkRecipe()) { - if (this.mEUStore < this.mLastRecipe.mSpecialValue + this.mEUt) { - stopMachine(ShutDownReasonRegistry.POWER_LOSS); - } - aBaseMetaTileEntity - .decreaseStoredEnergyUnits(this.mLastRecipe.mSpecialValue + this.mEUt, true); - } - } - if (mMaxProgresstime <= 0) mEfficiency = Math.max(0, mEfficiency - 1000); - } - } - } else if (aBaseMetaTileEntity.isAllowedToWork()) { - this.mLastRecipe = null; - stopMachine(ShutDownReasonRegistry.STRUCTURE_INCOMPLETE); - } - } - aBaseMetaTileEntity - .setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID() & ~127) | (mMachine ? 0 : 64)); - aBaseMetaTileEntity.setActive(mMaxProgresstime > 0); - } else { - doActivitySound(getActivitySoundLoop()); - } - } - - @Override - public boolean drainEnergyInput(long aEU) { - return false; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public void stopMachine(@NotNull ShutDownReason reason) { - super.stopMachine(reason); - turnCasingActive(false); - } - - @Override - public String[] getInfoData() { - String tier = tier() == 6 ? EnumChatFormatting.RED + "I" + EnumChatFormatting.RESET - : tier() == 7 ? EnumChatFormatting.YELLOW + "II" + EnumChatFormatting.RESET - : tier() == 8 ? EnumChatFormatting.GRAY + "III" + EnumChatFormatting.RESET : "IV"; - float plasmaOut = 0; - int powerRequired = 0; - if (this.mLastRecipe != null) { - powerRequired = this.mLastRecipe.mEUt; - if (this.mLastRecipe.getFluidOutput(0) != null) { - plasmaOut = (float) this.mLastRecipe.getFluidOutput(0).amount / (float) this.mLastRecipe.mDuration; - } - } - - return new String[] { EnumChatFormatting.BLUE + "Fusion Reactor MK " + EnumChatFormatting.RESET + tier, - StatCollector.translateToLocal("GT5U.fusion.req") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(powerRequired) - + EnumChatFormatting.RESET - + "EU/t", - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mEUStore) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEUStore()) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.fusion.plasma") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(plasmaOut) - + EnumChatFormatting.RESET - + "L/t" }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 7, 1, 12); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 7, 1, 12, elementBudget, env, false, true); - } - - @SideOnly(Side.CLIENT) - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_FUSION_LOOP.resourceLocation; - } - - @Override - public boolean doesBindPlayerInventory() { - return false; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) - .setSize(17, 17) - .setPos(155, 145)); - } - - @Override - public GUITextureSet getGUITextureSet() { - return new GUITextureSet().setMainBackground(GT_UITextures.BACKGROUND_FUSION_COMPUTER); - } - - @Override - public int getGUIWidth() { - return 176; - } - - @Override - public int getGUIHeight() { - return 166; - } - - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - protected long clientEU; - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder - .widget( - new TextWidget(GT_Utility.trans("138", "Incomplete Structure.")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> !mMachine) - .setPos(10, 8)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val)) - .widget( - new TextWidget("Hit with Soft Mallet to (re-)start the Machine if it doesn't start.") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setTextAlignment(Alignment.Center) - .setEnabled( - widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 - && !getBaseMetaTileEntity().isActive()) - .setPos(-getGUIWidth() / 2, 170) - .setSize(getGUIWidth() * 2, 9)) - .widget( - new FakeSyncWidget.IntegerSyncer( - () -> getBaseMetaTileEntity().getErrorDisplayID(), - val -> getBaseMetaTileEntity().setErrorDisplayID(val))) - .widget( - new FakeSyncWidget.BooleanSyncer( - () -> getBaseMetaTileEntity().isActive(), - val -> getBaseMetaTileEntity().setActive(val))) - .widget( - new TextWidget("Running perfectly.").setDefaultColor(COLOR_TEXT_WHITE.get()) - .setTextAlignment(Alignment.Center) - .setEnabled( - widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 - && getBaseMetaTileEntity().isActive()) - .setPos(0, 170) - .setSize(getGUIWidth(), 9)) - .widget( - new FakeSyncWidget.IntegerSyncer( - () -> getBaseMetaTileEntity().getErrorDisplayID(), - val -> getBaseMetaTileEntity().setErrorDisplayID(val))) - .widget( - new ProgressBar() - .setProgress( - () -> (float) getBaseMetaTileEntity().getStoredEU() / getBaseMetaTileEntity().getEUCapacity()) - .setDirection(ProgressBar.Direction.RIGHT) - .setTexture(GT_UITextures.PROGRESSBAR_STORED_EU, 147) - .setPos(5, 156) - .setSize(147, 5)) - .widget(new TextWidget().setStringSupplier(() -> { - if (clientEU > 160_000_000L && clientEU < 160_010_000L) { - clientEU = 160_000_000L; - } - if (clientEU > 320_000_000L && clientEU < 320_010_000L) { - clientEU = 320_000_000L; - } - if (clientEU > 640_000_000L && clientEU < 640_010_000L) { - clientEU = 640_000_000L; - } - if (clientEU > 5_120_000_000L && clientEU < 5_120_080_000L) { - clientEU = 5_120_000_000L; - } - return numberFormat.format(clientEU) + " EU"; - }) - .setDefaultColor(COLOR_TEXT_RED.get()) - .setTextAlignment(Alignment.Center) - .setScale(0.5f) - .setPos(5, 157) - .setSize(147, 5)) - .widget(new FakeSyncWidget.LongSyncer(() -> getBaseMetaTileEntity().getStoredEU(), val -> clientEU = val)) - .widget( - new ButtonWidget().setNEITransferRect( - RecipeMaps.fusionRecipes.getFrontend() - .getUIProperties().neiTransferRectId) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_NEI) - .setPos(154, 4) - .setSize(18, 18)); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public Set getAllowedVoidingModes() { - return VoidingMode.FLUID_ONLY_MODES; - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer1.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer1.java deleted file mode 100644 index e3a2432bf9..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer1.java +++ /dev/null @@ -1,103 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW; - -import net.minecraft.block.Block; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_FusionComputer1 extends GT_MetaTileEntity_FusionComputer { - - private static final ITexture textureOverlay = TextureFactory.of( - TextureFactory.builder() - .addIcon(OVERLAY_FUSION1) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FUSION1_GLOW) - .extFacing() - .glow() - .build()); - - public GT_MetaTileEntity_FusionComputer1(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_FusionComputer1(String aName) { - super(aName); - } - - @Override - public int tier() { - return 6; - } - - @Override - public long maxEUStore() { - return 160003000L * (Math.min(16, this.mEnergyHatches.size())) / 16L; - } - - @Override - public long capableStartupCanonical() { - return 160_000_000; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_FusionComputer1(mName); - } - - @Override - public Block getCasing() { - return GregTech_API.sBlockCasings1; - } - - @Override - public int getCasingMeta() { - return 6; - } - - @Override - public Block getFusionCoil() { - return GregTech_API.sBlockCasings1; - } - - @Override - public int getFusionCoilMeta() { - return 15; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fusion Reactor") - .addInfo("It's over 9000!!!") - .addInfo("Controller block for the Fusion Reactor Mk I") - .addInfo("2048EU/t and 10M EU capacity per Energy Hatch") - .addInfo("If the recipe has a startup cost greater than the") - .addInfo("number of energy hatches * cap, you can't do it") - .addSeparator() - .beginStructureBlock(15, 3, 15, false) - .addController("See diagram when placed") - .addCasingInfoRange("LuV Machine Casing", 79, 123, false) - .addStructureInfo("Cover the coils with casing") - .addOtherStructurePart("Superconducting Coil Block", "Center part of the ring") - .addEnergyHatch("1-16, Specified casings", 2) - .addInputHatch("2-16, Specified casings", 1) - .addOutputHatch("1-16, Specified casings", 3) - .addStructureInfo("ALL Hatches must be LuV or better") - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture getTextureOverlay() { - return textureOverlay; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer2.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer2.java deleted file mode 100644 index 0b1f10158b..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer2.java +++ /dev/null @@ -1,103 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2_GLOW; - -import net.minecraft.block.Block; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_FusionComputer2 extends GT_MetaTileEntity_FusionComputer { - - private static final ITexture textureOverlay = TextureFactory.of( - TextureFactory.builder() - .addIcon(OVERLAY_FUSION2) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FUSION2_GLOW) - .extFacing() - .glow() - .build()); - - public GT_MetaTileEntity_FusionComputer2(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_FusionComputer2(String aName) { - super(aName); - } - - @Override - public int tier() { - return 7; - } - - @Override - public long maxEUStore() { - return 320006000L * (Math.min(16, this.mEnergyHatches.size())) / 16L; - } - - @Override - public long capableStartupCanonical() { - return 320_000_000; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_FusionComputer2(mName); - } - - @Override - public Block getCasing() { - return GregTech_API.sBlockCasings4; - } - - @Override - public int getCasingMeta() { - return 6; - } - - @Override - public Block getFusionCoil() { - return GregTech_API.sBlockCasings4; - } - - @Override - public int getFusionCoilMeta() { - return 7; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fusion Reactor") - .addInfo("It's over 9000!!!") - .addInfo("Controller block for the Fusion Reactor Mk II") - .addInfo("8192EU/t and 20M EU capacity per Energy Hatch") - .addInfo("If the recipe has a startup cost greater than the") - .addInfo("number of energy hatches * cap, you can't do it") - .addSeparator() - .beginStructureBlock(15, 3, 15, false) - .addController("See diagram when placed") - .addCasingInfoRange("Fusion Machine Casing", 79, 123, false) - .addStructureInfo("Cover the coils with casing") - .addOtherStructurePart("Fusion Coil Block", "Center part of the ring") - .addEnergyHatch("1-16, Specified casings", 2) - .addInputHatch("2-16, Specified casings", 1) - .addOutputHatch("1-16, Specified casings", 3) - .addStructureInfo("ALL Hatches must be ZPM or better") - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture getTextureOverlay() { - return textureOverlay; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer3.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer3.java deleted file mode 100644 index 64d92ccc99..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_FusionComputer3.java +++ /dev/null @@ -1,103 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3_GLOW; - -import net.minecraft.block.Block; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_FusionComputer3 extends GT_MetaTileEntity_FusionComputer { - - private static final ITexture textureOverlay = TextureFactory.of( - TextureFactory.builder() - .addIcon(OVERLAY_FUSION3) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FUSION3_GLOW) - .extFacing() - .glow() - .build()); - - public GT_MetaTileEntity_FusionComputer3(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_FusionComputer3(String aName) { - super(aName); - } - - @Override - public int tier() { - return 8; - } - - @Override - public long maxEUStore() { - return 640010000L * (Math.min(16, this.mEnergyHatches.size())) / 16L; - } - - @Override - public long capableStartupCanonical() { - return 640_000_000; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_FusionComputer3(mName); - } - - @Override - public Block getCasing() { - return GregTech_API.sBlockCasings4; - } - - @Override - public int getCasingMeta() { - return 8; - } - - @Override - public Block getFusionCoil() { - return GregTech_API.sBlockCasings4; - } - - @Override - public int getFusionCoilMeta() { - return 7; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fusion Reactor") - .addInfo("A SUN DOWN ON EARTH") - .addInfo("Controller block for the Fusion Reactor Mk III") - .addInfo("32768EU/t and 40M EU capacity per Energy Hatch") - .addInfo("If the recipe has a startup cost greater than the") - .addInfo("number of energy hatches * cap, you can't do it") - .addSeparator() - .beginStructureBlock(15, 3, 15, false) - .addController("See diagram when placed") - .addCasingInfoRange("Fusion Machine Casing Mk II", 79, 123, false) - .addStructureInfo("Cover the coils with casing") - .addOtherStructurePart("Fusion Coil Block", "Center part of the ring") - .addEnergyHatch("1-16, Specified casings", 2) - .addInputHatch("2-16, Specified casings", 1) - .addOutputHatch("1-16, Specified casings", 3) - .addStructureInfo("ALL Hatches must be UV or better") - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture getTextureOverlay() { - return textureOverlay; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java deleted file mode 100644 index 46c9c712ce..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_HeatExchanger.java +++ /dev/null @@ -1,400 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import javax.annotation.Nonnull; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.registries.LHECoolantRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_HeatExchanger extends - GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - private int dryHeatCounter = 0; // Counts up to dryHeatMaximum to check for explosion conditions - private static final int dryHeatMaximum = 2000; // 2000 ticks = 100 seconds - private static final int CASING_INDEX = 50; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { "ccc", "cCc", "ccc" }, { "ccc", "cPc", "ccc" }, { "ccc", "cPc", "ccc" }, - { "c~c", "cHc", "ccc" }, })) - .addElement('P', ofBlock(GregTech_API.sBlockCasings2, 14)) - .addElement( - 'C', - OutputHatch.withAdder(GT_MetaTileEntity_HeatExchanger::addColdFluidOutputToMachineList) - .withCount(t -> t.mOutputColdFluidHatch.isValid() ? 1 : 0) - .newAny(CASING_INDEX, 3)) - .addElement( - 'H', - InputHatch.withAdder(GT_MetaTileEntity_HeatExchanger::addHotFluidInputToMachineList) - .withCount(t -> t.mInputHotFluidHatch.isValid() ? 1 : 0) - .newAny(CASING_INDEX, 3)) - .addElement( - 'c', - buildHatchAdder(GT_MetaTileEntity_HeatExchanger.class) - .atLeast(InputBus, InputHatch, OutputBus, OutputHatch, Maintenance) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_HeatExchanger::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings4, (byte) 2)))) - .build(); - public static float penalty_per_config = 0.015f; // penalize 1.5% efficiency per circuitry level (1-25) - - private GT_MetaTileEntity_Hatch_Input mInputHotFluidHatch; - private GT_MetaTileEntity_Hatch_Output mOutputColdFluidHatch; - private boolean superheated = false; - private int superheated_threshold = 0; - /** - * How much more steam we can make without draining real water. Unit is (1L/GT_Values.STEAM_PER_WATER) - */ - private int steamBudget; - - private int mCasingAmount; - - public GT_MetaTileEntity_HeatExchanger(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_HeatExchanger(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Heat Exchanger") - .addInfo("Controller Block for the Large Heat Exchanger") - .addInfo("More complicated than a Fusion Reactor. Seriously") - .addInfo("Inputs are Hot Coolant or Lava") - .addInfo("Outputs Coolant or Pahoehoe Lava and SH Steam/Steam") - .addInfo("Read the wiki article to understand how it works") - .addInfo("Then go to the Discord to understand the wiki") - .addSeparator() - .beginStructureBlock(3, 4, 3, false) - .addController("Front bottom") - .addCasingInfoRange("Stable Titanium Machine Casing", 20, 32, false) - .addOtherStructurePart("Titanium Pipe Casing", "Center 2 blocks") - .addMaintenanceHatch("Any casing", 1) - .addInputHatch("Hot fluid, bottom center", 2) - .addInputHatch("Distilled water, any casing", 1) - .addOutputHatch("Cold fluid, top center", 3) - .addOutputHatch("Steam/SH Steam, any casing", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - superheated = aNBT.getBoolean("superheated"); - steamBudget = aNBT.getInteger("steamBudget"); - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setBoolean("superheated", superheated); - aNBT.setInteger("steamBudget", steamBudget); - super.saveNBTData(aNBT); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> !r.isUpsideDown() && !f.isVerticallyFliped(); - } - - @Override - @Nonnull - public CheckRecipeResult checkProcessing() { - if (mInputHotFluidHatch.getFluid() == null) return CheckRecipeResultRegistry.NO_RECIPE; - - int fluidAmountToConsume = mInputHotFluidHatch.getFluidAmount(); // how much fluid is in hatch - - superheated_threshold = 4000; // default: must have 4000L per second to generate superheated steam - float efficiency = 1f; // default: operate at 100% efficiency with no integrated circuitry - int shs_reduction_per_config = 150; // reduce threshold 150L/s per circuitry level (1-25) - float steam_output_multiplier = 20f; // default: multiply output by 4 * 10 (boosted x5) - float penalty = 0.0f; // penalty to apply to output based on circuitry level (1-25). - - // Do we have an integrated circuit with a valid configuration? - if (mInventory[1] != null && mInventory[1].getUnlocalizedName() - .startsWith("gt.integrated_circuit")) { - int circuit_config = mInventory[1].getItemDamage(); - if (circuit_config >= 1 && circuit_config <= 25) { - // If so, apply the penalty and reduce the threshold. - penalty = (circuit_config - 1) * penalty_per_config; - superheated_threshold -= shs_reduction_per_config * (circuit_config - 1); - } - } - - efficiency -= penalty; - - var coolant = LHECoolantRegistry.getCoolant( - mInputHotFluidHatch.getFluid() - .getFluid()); - - if (coolant == null) { - superheated_threshold = 0; - return CheckRecipeResultRegistry.NO_RECIPE; - } else { - steam_output_multiplier *= coolant.steamMultiplier; - superheated_threshold *= coolant.superheatedThreshold; - } - - // set the internal superheated flag if we have - // enough hot fluid. Used in the onRunningTick method. - superheated = fluidAmountToConsume >= superheated_threshold; - - // Don't consume too much hot fluid per second - fluidAmountToConsume = Math.min(fluidAmountToConsume, superheated_threshold * 2); - - mInputHotFluidHatch.drain(fluidAmountToConsume, true); - mOutputColdFluidHatch.fill(coolant.getColdFluid(fluidAmountToConsume), true); - - this.mMaxProgresstime = 20; - this.mEUt = (int) (fluidAmountToConsume * steam_output_multiplier * efficiency); - this.mEfficiencyIncrease = 80; - - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - private int useWater(int steam) { - steamBudget -= steam; - int usage = -Math.min(0, Math.floorDiv(steamBudget, GT_Values.STEAM_PER_WATER)); - // still subtract, because usage will be a negative number - steamBudget += usage * GT_Values.STEAM_PER_WATER; - return usage; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (this.mEUt > 0) { - int tGeneratedEU = (int) (this.mEUt * 2L * this.mEfficiency / 10000L); // APPROXIMATELY how much steam to - // generate. - if (tGeneratedEU > 0) { - - if (superheated) tGeneratedEU /= 2; // We produce half as much superheated steam if necessary - - int distilledConsumed = useWater(tGeneratedEU); // how much distilled water to consume - // tGeneratedEU = distilledConsumed * 160; // EXACTLY how much steam to generate, producing a perfect - // 1:160 ratio with distilled water consumption - - FluidStack distilledStack = GT_ModHandler.getDistilledWater(distilledConsumed); - startRecipeProcessing(); - if (depleteInput(distilledStack)) // Consume the distilled water - { - if (superheated) { - addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", tGeneratedEU)); // Generate - // superheated - // steam - } else { - addOutput(GT_ModHandler.getSteam(tGeneratedEU)); // Generate regular steam - } - dryHeatCounter = 0; - } else { - if (dryHeatCounter < dryHeatMaximum) { - dryHeatCounter += 1; - } else { - GT_Log.exp.println(this.mName + " was too hot and had no more Distilled Water!"); - explodeMultiblock(); // Generate crater - } - } - endRecipeProcessing(); - } - return true; - } - return true; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mOutputColdFluidHatch = null; - mInputHotFluidHatch = null; - mCasingAmount = 0; - return checkPiece(STRUCTURE_PIECE_MAIN, 1, 3, 0) && mCasingAmount >= 20 && mMaintenanceHatches.size() == 1; - } - - public boolean addColdFluidOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - mOutputColdFluidHatch = (GT_MetaTileEntity_Hatch_Output) aMetaTileEntity; - return true; - } - return false; - } - - public boolean addHotFluidInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = getRecipeMap(); - mInputHotFluidHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - return true; - } - return false; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_HeatExchanger(this.mName); - } - - @Override - public String[] getInfoData() { - return new String[] { - StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - StatCollector.translateToLocal("GT5U.multiblock.usage") + " " - + StatCollector.translateToLocal("GT5U.LHE.steam") - + ": " - + (superheated ? EnumChatFormatting.RED : EnumChatFormatting.YELLOW) - + GT_Utility.formatNumbers(superheated ? -2L * mEUt : -mEUt) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - StatCollector.translateToLocal("GT5U.LHE.superheated") + ": " - + (superheated ? EnumChatFormatting.RED : EnumChatFormatting.BLUE) - + superheated - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.LHE.superheated") + " " - + StatCollector.translateToLocal("GT5U.LHE.threshold") - + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(superheated_threshold) - + EnumChatFormatting.RESET }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 3, 0, elementBudget, env, false, true); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java deleted file mode 100644 index a1968b05d4..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ImplosionCompressor.java +++ /dev/null @@ -1,163 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_GLOW; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.structure.IStructureElement; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_CubicMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_ImplosionCompressor - extends GT_MetaTileEntity_CubicMultiBlockBase { - - public GT_MetaTileEntity_ImplosionCompressor(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_ImplosionCompressor(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ImplosionCompressor(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Implosion Compressor") - .addInfo("Explosions are fun") - .addInfo("Controller block for the Implosion Compressor") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front center") - .addCasingInfoRange("Solid Steel Machine Casing", 16, 24, false) - .addStructureInfo("Casings can be replaced with Explosion Warning Signs") - .addEnergyHatch("Any casing", 1) - .addMaintenanceHatch("Any casing", 1) - .addMufflerHatch("Any casing", 1) - .addInputBus("Any casing", 1) - .addOutputBus("Any casing", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - return super.addToMachineList(aTileEntity, aBaseCasingIndex) - || addMufflerToMachineList(aTileEntity, aBaseCasingIndex); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { BlockIcons.casingTexturePages[0][16], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { BlockIcons.casingTexturePages[0][16], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][16] }; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.implosionRecipes; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic(); - } - - @Override - protected int getTimeBetweenProcessSounds() { - return 10; - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.RANDOM_EXPLODE; - } - - @Override - protected IStructureElement> getCasingElement() { - return ofChain(ofBlock(GregTech_API.sBlockCasings2, 0), ofBlock(GregTech_API.sBlockCasings3, 4)); - } - - @Override - protected int getHatchTextureIndex() { - return 16; - } - - @Override - protected int getRequiredCasingCount() { - return 16; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return GT_Mod.gregtechproxy.mPollutionImplosionCompressorPerSecond; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialElectromagneticSeparator.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialElectromagneticSeparator.java deleted file mode 100644 index a3e65ce057..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialElectromagneticSeparator.java +++ /dev/null @@ -1,467 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.GT_Values.AuthorFourIsTheNumber; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EMS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EMS_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EMS_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EMS_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MagHatch; -import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Casings10; -import gregtech.common.items.GT_MetaGenerated_Item_01; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_IndustrialElectromagneticSeparator - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - public enum MagnetTiers { - - Iron(8, 0.8F, 1.1F, false), - Steel(24, 0.75F, 1.25F, false), - Neodymium(48, 0.7F, 1.5F, false), - Samarium(96, 0.6F, 2F, false), - Tengam(256, 0.5F, 2.5F, true); - - final int maxParallel; - final float euModifier, speedBoost; - final boolean supportsExotic; - - MagnetTiers(int maxParallel, float euModifier, float speedBoost, boolean supportsExotic) { - this.maxParallel = maxParallel; - this.euModifier = euModifier; - this.speedBoost = 1F / speedBoost; - this.supportsExotic = supportsExotic; - } - - public static String buildMagnetTooltip(MagnetTiers m) { - String tooltip = "Used in Magnetic Flux Exhibitor/n " + EnumChatFormatting.LIGHT_PURPLE - + "Speed: +" - + Math.round((1F / m.speedBoost * 100) - 100) - + "%/n " - + EnumChatFormatting.DARK_PURPLE - + "EU Usage: " - + Math.round(m.euModifier * 100) - + "%/n " - + EnumChatFormatting.AQUA - + "Parallel: " - + m.maxParallel; - - if (m.supportsExotic) tooltip = tooltip + "/n " - + EnumChatFormatting.BOLD - + EnumChatFormatting.GREEN - + "Can Use Multiamp Hatches"; - - return tooltip; - } - } - - final int MIN_CASING = 64; - private GT_MetaTileEntity_MagHatch mMagHatch = null; - private MagnetTiers magnetTier = null; - - private static final int MACHINEMODE_SEPARATOR = 0; - private static final int MACHINEMODE_POLARIZER = 1; - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - (new String[][] { { " CCC ", " ", " ", " ", " ", " B~B " }, - { " CC CC ", " ", " BBB ", " AAA ", " BEB ", " BBBBB " }, - { "CC CC", " ", " BBBBB ", " A A ", " BBBBB ", "BBBBBBB" }, - { "C C", "C C", "CBBBBBC", "CA C AC", "CBBBBBC", "BBBBBBB" }, - { "CC CC", " ", " BBBBB ", " A A ", " BBBBB ", "BBBBBBB" }, - { " CC CC ", " ", " BBB ", " AAA ", " BBB ", " BBBBB " }, - { " CCC ", " C ", " C ", " C ", " C ", " BBB " } })) - .addElement('A', Glasses.chainAllGlasses()) - .addElement( - 'B', - ofChain( - buildHatchAdder(GT_MetaTileEntity_IndustrialElectromagneticSeparator.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy.or(ExoticEnergy)) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(0)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_IndustrialElectromagneticSeparator::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings10, 0))))) - .addElement('C', ofFrame(Materials.NeodymiumMagnetic)) - .addElement( - 'E', - buildHatchAdder(GT_MetaTileEntity_IndustrialElectromagneticSeparator.class) - .adder(GT_MetaTileEntity_IndustrialElectromagneticSeparator::addMagHatch) - .hatchClass(GT_MetaTileEntity_MagHatch.class) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(0)) - .dot(2) - .build()) - .build(); - - public GT_MetaTileEntity_IndustrialElectromagneticSeparator(final int aID, final String aName, - final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_IndustrialElectromagneticSeparator(String aName) { - super(aName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_IndustrialElectromagneticSeparator(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - ITexture[] rTexture; - if (side == aFacing) { - if (aActive) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 0)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_EMS_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_EMS_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 0)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_EMS) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_EMS_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 0)) }; - } - return rTexture; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Electromagnetic Separator/Polarizer") - .addInfo("Controller Block for the Magnetic Flux Exhibitor") - .addInfo("Use screwdriver to switch mode") - .addInfo("Insert an electromagnet into the electromagnet housing to use") - .addInfo("Better electromagnets give further bonuses") - .addInfo("With Tengam electromagnet, multiamp (NOT laser) hatches are allowed") - .addInfo( - AuthorFourIsTheNumber + EnumChatFormatting.GRAY - + " & " - + EnumChatFormatting.GOLD - + "Ba" - + EnumChatFormatting.LIGHT_PURPLE - + "ps") - .addSeparator() - .beginStructureBlock(7, 6, 7, false) - .addController("Front Center") - .addCasingInfoMin("MagTech Casings", MIN_CASING, false) - .addOtherStructurePart("Any glass", "x12") - .addOtherStructurePart("Magnetic Neodymium Frame Box", "x37") - .addOtherStructurePart("Electromagnet Housing", "1 Block Above/Behind Controller", 2) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 5, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 5, 0, elementBudget, env, false, true); - } - - private int mCasingAmount; - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasingAmount = 0; - mMagHatch = null; - mExoticEnergyHatches.clear(); - mEnergyHatches.clear(); - - if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 5, 0)) return false; - if (mCasingAmount < MIN_CASING) return false; - if (mMagHatch == null) return false; - - // If there are exotic hatches, ensure there is only 1, and it is not laser. Only multiamp allowed - if (!mExoticEnergyHatches.isEmpty()) { - if (!mEnergyHatches.isEmpty()) return false; - if (mExoticEnergyHatches.size() > 1) return false; - if (mExoticEnergyHatches.get(0) - .maxWorkingAmperesIn() > 64) return false; - } - - // All checks passed! - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - findMagnet(); - if (magnetTier != null) { - if (!mExoticEnergyHatches.isEmpty() && !magnetTier.supportsExotic) - return SimpleCheckRecipeResult.ofFailure("electromagnet_insufficient"); - euModifier = magnetTier.euModifier; - speedBoost = magnetTier.speedBoost; - return CheckRecipeResultRegistry.SUCCESSFUL; - } - return SimpleCheckRecipeResult.ofFailure("electromagnet_missing"); - } - }.setMaxParallelSupplier(this::getMaxParallels); - } - - private int getMaxParallels() { - if (magnetTier != null) return magnetTier.maxParallel; - return 0; - } - - @Override - public RecipeMap getRecipeMap() { - return (machineMode == MACHINEMODE_POLARIZER) ? RecipeMaps.polarizerRecipes - : RecipeMaps.electroMagneticSeparatorRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(RecipeMaps.polarizerRecipes, RecipeMaps.electroMagneticSeparatorRecipes); - } - - @Override - public int getRecipeCatalystPriority() { - return -10; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - if (aNBT.hasKey("polarizerMode")) { - machineMode = aNBT.getBoolean("polarizerMode") ? MACHINEMODE_POLARIZER : MACHINEMODE_SEPARATOR; - aNBT.removeTag("polarizerMode"); - } - super.loadNBTData(aNBT); - } - - @Override - public boolean supportsMachineModeSwitch() { - return true; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - setMachineMode(nextMachineMode()); - PlayerUtils.messagePlayer( - aPlayer, - String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); - } - - @Override - public void setMachineModeIcons() { - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_SEPARATOR); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_POLARIZER); - } - - @Override - public String getMachineModeName() { - return StatCollector.translateToLocal("GT5U.INDUSTRIAL_ELECTROMAGNETIC_SEPARATOR.mode." + machineMode); - } - - @Override - public void clearHatches() { - super.clearHatches(); - mExoticEnergyHatches.clear(); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("mode", machineMode); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector - .translateToLocal("GT5U.INDUSTRIAL_ELECTROMAGNETIC_SEPARATOR.mode." + tag.getInteger("mode")) - + EnumChatFormatting.RESET); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - // This fix works for normal energy hatches, preventing over-paralleling with 1 energy hatch - // However, it does not work with multiamp. MuTEs can't come soon enough. - - if (mExoticEnergyHatches.isEmpty()) { - logic.setAvailableVoltage(GT_Utility.roundUpVoltage(this.getMaxInputVoltage())); - logic.setAvailableAmperage(1L); - } else super.setProcessingLogicPower(logic); - } - - private void findMagnet() { - magnetTier = null; - if (mMagHatch != null) { - ItemStack aSlot = mMagHatch.getStackInSlot(0); - if (aSlot != null) { - switch (aSlot.getItemDamage()) { - case 32345 -> magnetTier = MagnetTiers.Iron; - case 32346 -> magnetTier = MagnetTiers.Steel; - case 32347 -> magnetTier = MagnetTiers.Neodymium; - case 32348 -> magnetTier = MagnetTiers.Samarium; - case 32349 -> magnetTier = MagnetTiers.Tengam; - default -> magnetTier = null; - } - } - - } - } - - public static boolean isValidElectromagnet(ItemStack aMagnet) { - return aMagnet != null && aMagnet.getItem() instanceof GT_MetaGenerated_Item_01 - && aMagnet.getItemDamage() >= 32345 - && aMagnet.getItemDamage() <= 32349; - } - - private boolean addMagHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity != null) { - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_MagHatch) { - ((GT_MetaTileEntity_MagHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - if (mMagHatch == null) { - mMagHatch = (GT_MetaTileEntity_MagHatch) aMetaTileEntity; - return true; - } - } - } - return false; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialExtractor.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialExtractor.java deleted file mode 100644 index e10b497b6b..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialExtractor.java +++ /dev/null @@ -1,293 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.GT_Values.AuthorFourIsTheNumber; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Casings4; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_IndustrialExtractor - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - (new String[][] { { " A ", " BBB ", "AB~BA", " BBB " }, { " A ", " BBB ", "AB BA", " BBB " }, - { " A ", " BBB ", "AB BA", " BBB " }, { " A ", " BBB ", "ABBBA", " BBB " }, - { " A ", " A ", "AAAAA", " " } })) - .addElement( - 'B', - buildHatchAdder(GT_MetaTileEntity_IndustrialExtractor.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy) - .casingIndex(((GT_Block_Casings4) GregTech_API.sBlockCasings4).getTextureIndex(1)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_IndustrialExtractor::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings4, 1)))) - .addElement( - 'A', - ofBlocksTiered( - GT_MetaTileEntity_IndustrialExtractor::getItemPipeTierFromMeta, - ImmutableList.of( - Pair.of(GregTech_API.sBlockCasings11, 0), - Pair.of(GregTech_API.sBlockCasings11, 1), - Pair.of(GregTech_API.sBlockCasings11, 2), - Pair.of(GregTech_API.sBlockCasings11, 3), - Pair.of(GregTech_API.sBlockCasings11, 4), - Pair.of(GregTech_API.sBlockCasings11, 5), - Pair.of(GregTech_API.sBlockCasings11, 6), - Pair.of(GregTech_API.sBlockCasings11, 7)), - -2, - GT_MetaTileEntity_IndustrialExtractor::setItemPipeTier, - GT_MetaTileEntity_IndustrialExtractor::getItemPipeTier)) - .build(); - - private int itemPipeTier = 0; - - private static Integer getItemPipeTierFromMeta(Block block, Integer metaID) { - if (block != GregTech_API.sBlockCasings11) return -1; - if (metaID < 0 || metaID > 7) return -1; - return metaID + 1; - } - - private void setItemPipeTier(int tier) { - itemPipeTier = tier; - } - - private int getItemPipeTier() { - return itemPipeTier; - } - - public GT_MetaTileEntity_IndustrialExtractor(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_IndustrialExtractor(String aName) { - super(aName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_IndustrialExtractor(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - ITexture[] rTexture; - if (side == aFacing) { - if (aActive) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings4, 1)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings4, 1)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings4, 1)) }; - } - return rTexture; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Extractor") - .addInfo("Controller Block for the Dissection Apparatus") - .addInfo("200% faster than single block machines of the same voltage") - .addInfo("Only uses 85% of the EU/t normally required") - .addInfo("Gains 8 parallels per tier of Item Pipe Casing") - .addInfo(AuthorFourIsTheNumber) - .addSeparator() - .beginStructureBlock(5, 4, 5, true) - .addController("Front Center") - .addCasingInfoMin("Stainless Steel Machine Casing", 24, false) - .addCasingInfoExactly("Item Pipe Casing", 19, true) - .addInputBus("Any Stainless Steel Casing", 1) - .addOutputBus("Any Stainless Steel Casing", 1) - .addEnergyHatch("Any Stainless Steel Casing", 1) - .addMaintenanceHatch("Any Stainless Steel Casing", 1) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 2, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 2, 0, elementBudget, env, false, true); - } - - private int mCasingAmount; - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasingAmount = 0; - itemPipeTier = -2; - - if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 2, 0)) return false; - return mCasingAmount >= 24; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 3F) - .setMaxParallelSupplier(this::getMaxParallelRecipes) - .setEuModifier(0.85F); - } - - public int getMaxParallelRecipes() { - return 8 * itemPipeTier; - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("maxParallelRecipes", getMaxParallelRecipes()); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " - + EnumChatFormatting.WHITE - + tag.getInteger("maxParallelRecipes")); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.extractorRecipes; - } - - @Override - public int getRecipeCatalystPriority() { - return -10; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Utility.roundUpVoltage(this.getMaxInputVoltage())); - logic.setAvailableAmperage(1L); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialLaserEngraver.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialLaserEngraver.java deleted file mode 100644 index 50c55d11a5..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IndustrialLaserEngraver.java +++ /dev/null @@ -1,615 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.GT_Values.AuthorFourIsTheNumber; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ENGRAVER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ENGRAVER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ENGRAVER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ENGRAVER_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoTunnel; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GTVoltageIndex; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.LaserRenderingUtil; -import gregtech.common.blocks.GT_Block_Casings10; -import gregtech.common.tileentities.render.TileLaser; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_IndustrialLaserEngraver - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - (new String[][] { { " f ", " ", " ", " ", " a~a " }, - { " fsf ", " g ", " g ", "a g a", "aaraa" }, { "faaaf", "f f", "f f", "a a", "aaaaa" }, - { "aaaaa", "a a a", "a a a", "a a a", "aaaaa" }, { "aaaaa", "aaaaa", "aaaaa", "aaaaa", "aaaaa" } })) - .addElement( - 'a', - buildHatchAdder(GT_MetaTileEntity_IndustrialLaserEngraver.class) - .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Energy) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(1)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_IndustrialLaserEngraver::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings10, 1)))) - .addElement('f', ofFrame(Materials.TungstenSteel)) - .addElement( - 'g', - BorosilicateGlass - .ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier)) - .addElement( - 'r', - LaserRenderingUtil.ofBlockAdder( - GT_MetaTileEntity_IndustrialLaserEngraver::laserRendererAdder, - GregTech_API.sLaserRender, - 0)) - .addElement( - 's', - buildHatchAdder(GT_MetaTileEntity_IndustrialLaserEngraver.class) - .adder(GT_MetaTileEntity_IndustrialLaserEngraver::addLaserSource) - .hatchClass(GT_MetaTileEntity_Hatch_DynamoTunnel.class) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(1)) - .dot(3) - .build()) - .build(); - - protected TileLaser renderer; - private byte glassTier = 0; - private GT_MetaTileEntity_Hatch_DynamoTunnel laserSource = null; - private int laserAmps = 0; - private int laserTier = 0; - private String tierName = "LV"; - - private boolean addLaserSource(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity != null) { - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoTunnel) { - laserSource = (GT_MetaTileEntity_Hatch_DynamoTunnel) aMetaTileEntity; - laserSource.updateTexture(aBaseCasingIndex); - // Snap the laser source toward the plate. Player can rotate it if they want after but this will look - // nicer - switch (getRotation()) { - case NORMAL -> laserSource.getBaseMetaTileEntity() - .setFrontFacing(ForgeDirection.DOWN); - case UPSIDE_DOWN -> laserSource.getBaseMetaTileEntity() - .setFrontFacing(ForgeDirection.UP); - case CLOCKWISE -> laserSource.getBaseMetaTileEntity() - .setFrontFacing(getDirection().getRotation(ForgeDirection.UP)); - default -> laserSource.getBaseMetaTileEntity() - .setFrontFacing(getDirection().getRotation(ForgeDirection.DOWN)); - } - // Cube root the amperage to get the parallels - laserAmps = (int) Math.cbrt(laserSource.maxAmperesOut()); - laserTier = (int) laserSource.getOutputTier(); - tierName = GT_Values.VN[laserTier]; - return true; - } - } - return false; - } - - private boolean laserRendererAdder(Block block, int meta, World world, int x, int y, int z) { - if (block != GregTech_API.sLaserRender || world == null) { - return false; - } - TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof TileLaser) { - renderer = (TileLaser) te; - renderer.setRotationFields(getDirection(), getRotation(), getFlip()); - return true; - } - return false; - } - - public GT_MetaTileEntity_IndustrialLaserEngraver(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_IndustrialLaserEngraver(String aName) { - super(aName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_IndustrialLaserEngraver(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - ITexture[] rTexture; - if (side == aFacing) { - if (aActive) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 1)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ENGRAVER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ENGRAVER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 1)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ENGRAVER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ENGRAVER_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 1)) }; - } - return rTexture; - } - - private boolean stopAllRendering = false; - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - stopAllRendering = !stopAllRendering; - if (stopAllRendering) { - PlayerUtils.messagePlayer(aPlayer, "Rendering off"); - if (renderer != null) renderer.setShouldRender(false); - } else PlayerUtils.messagePlayer(aPlayer, "Rendering on"); - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ, ItemStack aTool) { - if (aPlayer.isSneaking()) { - batchMode = !batchMode; - if (batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); - } - return true; - } else { - if (renderer != null) { - renderer.realism = !renderer.realism; - PlayerUtils.messagePlayer(aPlayer, "Toggling realism!"); - return true; - } - } - return false; - } - - @Override - public void onDisableWorking() { - if (renderer != null) renderer.setShouldRender(false); - super.onDisableWorking(); - } - - @Override - public void onBlockDestroyed() { - if (renderer != null) renderer.setShouldRender(false); - super.onBlockDestroyed(); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Laser Engraver") - .addInfo("Controller Block for the Hyper-Intensity Laser Engraver") - .addInfo("200% faster than single block machines of the same voltage") - .addInfo("Uses 80% of the EU normally required") - .addInfo("Laser source hatch determines maximum recipe tier and parallels") - .addInfo("Parallels equal to the cube root of laser source amperage input") - .addInfo("Glass tier determines maximum laser source tier") - .addInfo("Only accepts borosilicate glass (no, really)") - .addInfo("UMV glass accepts all laser source hatches") - .addInfo("Use screwdriver to disable laser rendering") - .addInfo("Use wire cutter to toggle realism mode if you hate angled lasers") - .addInfo(AuthorFourIsTheNumber) - .addSeparator() - .beginStructureBlock(5, 5, 5, false) - .addController("Front Center") - .addCasingInfoMin("Laser Containment Casing", 45, false) - .addCasingInfoExactly("Tungstensteel Frame Box", 9, false) - .addOtherStructurePart("Laser Resistant Plate", "x1") - .addOtherStructurePart("Borosilicate Glass", "x3") - .addOtherStructurePart("Laser Source Hatch", "x1", 3) - .addInputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 4, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 4, 0, elementBudget, env, false, true); - } - - private int mCasingAmount; - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasingAmount = 0; - mEnergyHatches.clear(); - - if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 4, 0)) return false; - if (mCasingAmount < 45) return false; - if (laserSource == null) return false; - if (renderer == null) return false; - if (glassTier < GTVoltageIndex.UMV && laserSource.mTier > glassTier) return false; - - return true; - } - - private static String getUniqueIdentifier(ItemStack is) { - return is.getItem() - .getUnlocalizedName() + is.getItemDamage(); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - if (laserTier < GTVoltageIndex.UXV && recipe.mEUt > GT_Values.V[laserTier]) { - return SimpleCheckRecipeResult.ofFailure("laser_insufficient"); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - protected CheckRecipeResult onRecipeStart(@NotNull GT_Recipe recipe) { - Colors c = Colors.Red; - for (int i = 0; i < recipe.mInputs.length; i++) { - String uid = getUniqueIdentifier(recipe.mInputs[i]); - if (lensColors.containsKey(uid)) { - c = lensColors.get(uid); - } - } - if (renderer != null) { - renderer.setColors(c.r, c.g, c.b); - if (!stopAllRendering) { - renderer.setShouldRender(true); - } - } - return super.onRecipeStart(recipe); - } - - @Override - public ProcessingLogic clear() { - if (renderer != null) renderer.setShouldRender(false); - return super.clear(); - } - }.setSpeedBonus(1F / 3F) - .setEuModifier(0.8F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public boolean isRotationChangeAllowed() { - return true; - } - - private int getMaxParallelRecipes() { - return laserAmps; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.laserEngraverRecipes; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public int getRecipeCatalystPriority() { - return -10; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Utility.roundUpVoltage(this.getMaxInputVoltage())); - logic.setAvailableAmperage(1L); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setBoolean("stopAllRendering", stopAllRendering); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - if (aNBT.hasKey("stopAllRendering")) { - stopAllRendering = aNBT.getBoolean("stopAllRendering"); - } - super.loadNBTData(aNBT); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("laserAmps", laserAmps); - tag.setString("tierName", tierName); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " - + EnumChatFormatting.WHITE - + tag.getInteger("laserAmps") - + EnumChatFormatting.RESET); - currentTip.add( - StatCollector.translateToLocal("GT5U.multiblock.maxtier") + ": " - + EnumChatFormatting.WHITE - + tag.getString("tierName") - + EnumChatFormatting.RESET); - } - - private enum Colors { - - White(1, 1, 1), - Red(1, 0, 0), - Green(0, 1, 0), - Blue(0, 0, 1), - Yellow(1, 1, 0), - Purple(1, 0, 1), - Cyan(0, 1, 1), - Orange(1, 0.5F, 0), - Black(0, 0, 0), - Brown(0.647F, 0.164F, 0.164F); - - final float r, g, b; - - Colors(float r, float g, float b) { - this.r = r; - this.g = g; - this.b = b; - } - } - - private static final Map lensColors; - static { - lensColors = new HashMap<>(); - - // Black lenses - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Forcicium, 1)), Colors.Black); - lensColors.put( - getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Forcillium, 1)), - Colors.Black); - lensColors.put( - getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.InfusedEntropy, 1)), - Colors.Black); - - // White lenses - lensColors.put( - getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.NetherStar, 1)), - Colors.White); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Dilithium, 1)), Colors.White); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Glass, 1)), Colors.White); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1)), Colors.Cyan); - lensColors.put( - getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.InfusedOrder, 1)), - Colors.White); - - // Green lenses - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Emerald, 1)), Colors.Green); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Olivine, 1)), Colors.Green); - lensColors.put( - getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.GreenSapphire, 1)), - Colors.Green); - lensColors.put( - getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.InfusedEarth, 1)), - Colors.Green); - - // Red lenses - lensColors.put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Ruby, 1)), Colors.Red); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Firestone, 1)), Colors.Red); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Jasper, 1)), Colors.Red); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.FoolsRuby, 1)), Colors.Red); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.GarnetRed, 1)), Colors.Red); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.InfusedFire, 1)), Colors.Red); - - // Blue lenses - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.BlueTopaz, 1)), Colors.Blue); - lensColors.put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Opal, 1)), Colors.Blue); - lensColors.put( - getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.InfusedWater, 1)), - Colors.Blue); - - // Yellow lenses - lensColors.put( - getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.GarnetYellow, 1)), - Colors.Yellow); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Force, 1)), Colors.Yellow); - lensColors.put( - getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.InfusedAir, 1)), - Colors.Yellow); - - // Purple lenses - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Amethyst, 1)), Colors.Purple); - lensColors.put( - getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Tanzanite, 1)), - Colors.Purple); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Sapphire, 1)), Colors.Purple); - - // Cyan lenses - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.EnderEye, 1)), Colors.Cyan); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.EnderPearl, 1)), Colors.Cyan); - - // Orange lenses - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Topaz, 1)), Colors.Orange); - lensColors - .put(getUniqueIdentifier(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Amber, 1)), Colors.Orange); - - // Time to manually define a bunch of lenses based on id - lensColors.put("gt.bwMetaGeneratedlens1", Colors.Yellow); - lensColors.put("gt.bwMetaGeneratedlens4", Colors.White); - lensColors.put("gt.bwMetaGeneratedlens5", Colors.Black); - lensColors.put("gt.bwMetaGeneratedlens7", Colors.Green); - lensColors.put("gt.bwMetaGeneratedlens8", Colors.Green); - lensColors.put("gt.bwMetaGeneratedlens9", Colors.White); - lensColors.put("gt.bwMetaGeneratedlens19", Colors.Red); - lensColors.put("gt.bwMetaGeneratedlens20", Colors.White); - lensColors.put("gt.bwMetaGeneratedlens21", Colors.Brown); - lensColors.put("gt.bwMetaGeneratedlens22", Colors.Orange); - lensColors.put("gt.bwMetaGeneratedlens23", Colors.Black); - lensColors.put("gt.bwMetaGeneratedlens24", Colors.White); - lensColors.put("gt.bwMetaGeneratedlens25", Colors.Green); - lensColors.put("gt.bwMetaGeneratedlens35", Colors.Yellow); - lensColors.put("gt.bwMetaGeneratedlens36", Colors.Purple); - lensColors.put("gt.bwMetaGeneratedlens43", Colors.Green); - lensColors.put("gt.bwMetaGeneratedlens89", Colors.Green); - lensColors.put("gt.bwMetaGeneratedlens91", Colors.Purple); - lensColors.put("gt.bwMetaGeneratedlens10023", Colors.Red); - lensColors.put("gt.bwMetaGeneratedlens11499", Colors.Green); - lensColors.put("gt.bwMetaGeneratedlens11358", Colors.Red); - lensColors.put("MU-metaitem.0132140", Colors.Purple); - lensColors.put("MU-metaitem.0132140", Colors.Purple); - - // - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IntegratedOreFactory.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IntegratedOreFactory.java deleted file mode 100644 index 4dd9d6485e..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_IntegratedOreFactory.java +++ /dev/null @@ -1,829 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_GLOW; -import static gregtech.api.enums.TickTime.SECOND; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Random; -import java.util.stream.Collectors; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -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_ExtendedPowerMultiBlockBase; -import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_IntegratedOreFactory - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private static final int CASING_INDEX1 = 183; - private static final int CASING_INDEX2 = 49; - private static final int MAX_PARA = 1024; - private static final long RECIPE_EUT = 30; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { - { " ", " ", " WWW ", " WWW ", " ", " " }, - { " ", " sss ", " sppps", " sppps", " sss ", " " }, - { " ", " sss ", " s s", " s s", " sss ", " " }, - { " ", " sss ", " sppps", " sppps", " sss ", " " }, - { " ", " sss ", " s s", " s s", " sss ", " " }, - { " ", " sss ", " sppps", " sppps", " sss ", " " }, - { "iiiiii ", "iIIIIiisssi", "iIIIIis s", "iIIIIis s", "iIIIIiisssi", "iiiiii " }, - { "iggggi ", "gt t isssi", "g xx sppps", "g xx sppps", "gt t isssi", "iggggi " }, - { "iggggi ", "gt t isssi", "g xx s s", "g xx s s", "gt t isssi", "iggggi " }, - { "iggggi ", "gt t is~si", "g xx spppO", "g xx spppO", "gt t isssi", "iggggi " }, - { "iggggi ", "gt t isssi", "g xx s O", "g xx s O", "gt t isssi", "iggggi " }, - { "EEEEEE ", "EEEEEEEEEEE", "EEEEEEEEEEE", "EEEEEEEEEEE", "EEEEEEEEEEE", "EEEEEE " } })) - .addElement('i', ofBlock(GregTech_API.sBlockCasings8, 7)) - .addElement('s', ofBlock(GregTech_API.sBlockCasings4, 1)) - .addElement('g', Glasses.chainAllGlasses()) - .addElement('x', ofBlock(GregTech_API.sBlockCasings2, 3)) - .addElement('p', ofBlock(GregTech_API.sBlockCasings2, 15)) - .addElement('t', ofFrame(Materials.TungstenSteel)) - .addElement( - 'E', - buildHatchAdder(GT_MetaTileEntity_IntegratedOreFactory.class).atLeast(Energy, Maintenance) - .casingIndex(CASING_INDEX1) - .dot(1) - .buildAndChain(GregTech_API.sBlockCasings8, 7)) - .addElement( - 'I', - buildHatchAdder(GT_MetaTileEntity_IntegratedOreFactory.class).atLeast(InputBus) - .casingIndex(CASING_INDEX1) - .dot(2) - .buildAndChain(GregTech_API.sBlockCasings8, 7)) - .addElement( - 'W', - buildHatchAdder(GT_MetaTileEntity_IntegratedOreFactory.class).atLeast(InputHatch, Muffler) - .casingIndex(CASING_INDEX2) - .dot(3) - .buildAndChain(GregTech_API.sBlockCasings4, 1)) - .addElement( - 'O', - buildHatchAdder(GT_MetaTileEntity_IntegratedOreFactory.class).atLeast(OutputBus, OutputHatch) - .casingIndex(CASING_INDEX2) - .dot(4) - .buildAndChain(GregTech_API.sBlockCasings4, 1)) - .build(); - - private static final HashSet isCrushedOre = new HashSet<>(); - private static final HashSet isCrushedPureOre = new HashSet<>(); - private static final HashSet isPureDust = new HashSet<>(); - private static final HashSet isImpureDust = new HashSet<>(); - private static final HashSet isThermal = new HashSet<>(); - private static final HashSet isOre = new HashSet<>(); - private static boolean isInit = false; - private ItemStack[] sMidProduct; - private int sMode = 0; - private boolean sVoidStone = false; - private int currentParallelism = 0; - - private static void initHash() { - for (String name : OreDictionary.getOreNames()) { - if (name == null || name.isEmpty()) continue; - if (name.startsWith("crushedPurified")) { - for (ItemStack stack : OreDictionary.getOres(name)) { - isCrushedPureOre.add(GT_Utility.stackToInt(stack)); - } - } else if (name.startsWith("crushedCentrifuged")) { - for (ItemStack stack : OreDictionary.getOres(name)) { - isThermal.add(GT_Utility.stackToInt(stack)); - } - } else if (name.startsWith("crushed")) { - for (ItemStack stack : OreDictionary.getOres(name)) { - isCrushedOre.add(GT_Utility.stackToInt(stack)); - } - } else if (name.startsWith("dustImpure")) { - for (ItemStack stack : OreDictionary.getOres(name)) { - isImpureDust.add(GT_Utility.stackToInt(stack)); - } - } else if (name.startsWith("dustPure")) { - for (ItemStack stack : OreDictionary.getOres(name)) { - isPureDust.add(GT_Utility.stackToInt(stack)); - } - } else if (name.startsWith("ore")) { - for (ItemStack stack : OreDictionary.getOres(name)) { - isOre.add(GT_Utility.stackToInt(stack)); - } - } else if (name.startsWith("rawOre")) { - for (ItemStack stack : OreDictionary.getOres(name)) { - isOre.add(GT_Utility.stackToInt(stack)); - } - } - } - } - - public GT_MetaTileEntity_IntegratedOreFactory(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_IntegratedOreFactory(String aName) { - super(aName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Ore Processor") - .addInfo("Controller Block for the Integrated Ore Factory") - .addInfo("It is OP. I mean ore processor.") - .addInfo("Do all ore processing in one step.") - .addInfo("Can process up to 1024 ores at a time.") - .addInfo("Every ore costs 30EU/t, 2L lubricant, 200L distilled water.") - .addInfo("Processing time is dependent on mode.") - .addInfo("Use a screwdriver to switch mode.") - .addInfo("Sneak click with screwdriver to void the stone dust.") - .addSeparator() - .beginStructureBlock(6, 12, 11, false) - .addController("The third layer") - .addStructureInfo("128 Advanced Iridium Plated Machine Casing") - .addStructureInfo("105 Clean Stainless Steel Machine Casing") - .addStructureInfo("48 Reinforced Glass") - .addStructureInfo("30 Tungstensteel Pipe Casing") - .addStructureInfo("16 Tungstensteel Frame Box") - .addStructureInfo("16 Steel Gear Box Casing") - .addEnergyHatch("Any bottom Casing", 1) - .addMaintenanceHatch("Any bottom Casing", 1) - .addInputBus("Input ore/crushed ore", 2) - .addInputHatch("Input lubricant/distilled water/washing chemicals", 3) - .addMufflerHatch("Output Pollution", 3) - .addOutputBus("Output products", 4) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> !r.isUpsideDown() && !f.isVerticallyFliped(); - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 8, 9, 1); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 8, 9, 1, elementBudget, env, false, true); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - private static int getTime(int mode) { - return switch (mode) { - case 0 -> 30 * SECOND; - case 1 -> 15 * SECOND; - case 2 -> 10 * SECOND; - case 3 -> 20 * SECOND; - case 4 -> 17 * SECOND; - default -> - // go to hell - 1000000000; - }; - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - if (!isInit) { - initHash(); - isInit = true; - } - - List tInput = getStoredInputs(); - List tInputFluid = getStoredFluids(); - long availableEUt = GT_Utility.roundUpVoltage(getMaxInputVoltage()); - if (availableEUt < RECIPE_EUT) { - return CheckRecipeResultRegistry.insufficientPower(RECIPE_EUT); - } - if (tInput.isEmpty() || tInputFluid.isEmpty()) { - return CheckRecipeResultRegistry.NO_RECIPE; - } - - int maxParallel = MAX_PARA; - int originalMaxParallel = maxParallel; - - GT_OverclockCalculator calculator = new GT_OverclockCalculator().setEUt(availableEUt) - .setRecipeEUt(RECIPE_EUT) - .setDuration(getTime(sMode)) - .setParallel(originalMaxParallel); - - double tickTimeAfterOC = calculator.calculateDurationUnderOneTick(); - - if (tickTimeAfterOC < 1) { - maxParallel = GT_Utility.safeInt((long) (maxParallel / tickTimeAfterOC), 0); - } - - int maxParallelBeforeBatchMode = maxParallel; - if (isBatchModeEnabled()) { - maxParallel = GT_Utility.safeInt((long) maxParallel * getMaxBatchSize(), 0); - } - - int currentParallel = (int) Math.min(maxParallel, availableEUt / RECIPE_EUT); - // Calculate parallel by fluids - int tLube = 0; - int tWater = 0; - for (FluidStack fluid : tInputFluid) { - if (fluid != null && fluid.equals(GT_ModHandler.getDistilledWater(1L))) { - tWater += fluid.amount; - } else if (fluid != null && fluid.equals(Materials.Lubricant.getFluid(1L))) { - tLube += fluid.amount; - } - } - currentParallel = Math.min(currentParallel, tLube / 2); - currentParallel = Math.min(currentParallel, tWater / 200); - if (currentParallel <= 0) { - return CheckRecipeResultRegistry.NO_RECIPE; - } - - // Calculate parallel by items - int itemParallel = 0; - for (ItemStack ore : tInput) { - int tID = GT_Utility.stackToInt(ore); - if (tID == 0) continue; - if (isPureDust.contains(tID) || isImpureDust.contains(tID) - || isCrushedPureOre.contains(tID) - || isThermal.contains(tID) - || isCrushedOre.contains(tID) - || isOre.contains(tID)) { - if (itemParallel + ore.stackSize <= currentParallel) { - itemParallel += ore.stackSize; - } else { - itemParallel = currentParallel; - break; - } - } - } - currentParallel = itemParallel; - int currentParallelBeforeBatchMode = Math.min(currentParallel, maxParallelBeforeBatchMode); - - calculator.setCurrentParallel(currentParallelBeforeBatchMode) - .calculate(); - - double batchMultiplierMax = 1; - // In case batch mode enabled - if (currentParallel > maxParallelBeforeBatchMode && calculator.getDuration() < getMaxBatchSize()) { - batchMultiplierMax = (double) getMaxBatchSize() / calculator.getDuration(); - batchMultiplierMax = Math.min(batchMultiplierMax, (double) currentParallel / maxParallelBeforeBatchMode); - } - - int finalParallel = (int) (batchMultiplierMax * maxParallelBeforeBatchMode); - - // for scanner - setCurrentParallelism(finalParallel); - - // Consume fluids - depleteInput(GT_ModHandler.getDistilledWater(finalParallel * 200L)); - depleteInput(Materials.Lubricant.getFluid(finalParallel * 2L)); - - // Consume items and generate outputs - List tOres = new ArrayList<>(); - int remainingCost = finalParallel; - for (ItemStack ore : tInput) { - int tID = GT_Utility.stackToInt(ore); - if (tID == 0) continue; - if (isPureDust.contains(tID) || isImpureDust.contains(tID) - || isCrushedPureOre.contains(tID) - || isThermal.contains(tID) - || isCrushedOre.contains(tID) - || isOre.contains(tID)) { - if (remainingCost >= ore.stackSize) { - tOres.add(GT_Utility.copy(ore)); - remainingCost -= ore.stackSize; - ore.stackSize = 0; - } else { - tOres.add(GT_Utility.copyAmountUnsafe(remainingCost, ore)); - ore.stackSize -= remainingCost; - break; - } - } - } - sMidProduct = tOres.toArray(new ItemStack[0]); - switch (sMode) { - case 0 -> { - doMac(isOre); - doWash(isCrushedOre); - doThermal(isCrushedPureOre, isCrushedOre); - doMac(isThermal, isOre, isCrushedOre, isCrushedPureOre); - } - case 1 -> { - doMac(isOre); - doWash(isCrushedOre); - doMac(isOre, isCrushedOre, isCrushedPureOre); - doCentrifuge(isImpureDust, isPureDust); - } - case 2 -> { - doMac(isOre); - doMac(isThermal, isOre, isCrushedOre, isCrushedPureOre); - doCentrifuge(isImpureDust, isPureDust); - } - case 3 -> { - doMac(isOre); - doWash(isCrushedOre); - doSift(isCrushedPureOre); - } - case 4 -> { - doMac(isOre); - doChemWash(isCrushedOre, isCrushedPureOre); - doMac(isCrushedOre, isCrushedPureOre); - doCentrifuge(isImpureDust, isPureDust); - } - default -> { - return CheckRecipeResultRegistry.NO_RECIPE; - } - } - - this.mEfficiency = 10000 - (getIdealStatus() - getRepairStatus()) * 1000; - this.mEfficiencyIncrease = 10000; - this.mOutputItems = sMidProduct; - this.mMaxProgresstime = (int) (calculator.getDuration() * batchMultiplierMax); - this.lEUt = calculator.getConsumption(); - if (this.lEUt > 0) { - this.lEUt = -this.lEUt; - } - this.updateSlots(); - - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @SafeVarargs - private boolean checkTypes(int aID, HashSet... aTables) { - for (HashSet set : aTables) { - if (set.contains(aID)) { - return true; - } - } - return false; - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - sVoidStone = !sVoidStone; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.void", sVoidStone)); - return; - } - sMode = (sMode + 1) % 5; - List des = getDisplayMode(sMode); - GT_Utility.sendChatToPlayer(aPlayer, String.join("", des)); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - sMode = aNBT.getInteger("ssMode"); - sVoidStone = aNBT.getBoolean("ssStone"); - currentParallelism = aNBT.getInteger("currentParallelism"); - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("ssMode", sMode); - aNBT.setBoolean("ssStone", sVoidStone); - aNBT.setInteger("currentParallelism", currentParallelism); - super.saveNBTData(aNBT); - } - - @SafeVarargs - private void doMac(HashSet... aTables) { - List tProduct = new ArrayList<>(); - if (sMidProduct != null) { - for (ItemStack aStack : sMidProduct) { - int tID = GT_Utility.stackToInt(aStack); - if (checkTypes(tID, aTables)) { - GT_Recipe tRecipe = RecipeMaps.maceratorRecipes - .findRecipe(getBaseMetaTileEntity(), false, GT_Values.V[15], null, aStack); - if (tRecipe != null) { - tProduct.addAll(getOutputStack(tRecipe, aStack.stackSize)); - } else { - tProduct.add(aStack); - } - } else { - tProduct.add(aStack); - } - } - } - doCompress(tProduct); - } - - @SafeVarargs - private void doWash(HashSet... aTables) { - List tProduct = new ArrayList<>(); - if (sMidProduct != null) { - for (ItemStack aStack : sMidProduct) { - int tID = GT_Utility.stackToInt(aStack); - if (checkTypes(tID, aTables)) { - GT_Recipe tRecipe = RecipeMaps.oreWasherRecipes.findRecipe( - getBaseMetaTileEntity(), - false, - GT_Values.V[15], - new FluidStack[] { GT_ModHandler.getDistilledWater(Integer.MAX_VALUE) }, - aStack); - if (tRecipe != null) { - tProduct.addAll(getOutputStack(tRecipe, aStack.stackSize)); - } else { - tProduct.add(aStack); - } - } else { - tProduct.add(aStack); - } - } - } - doCompress(tProduct); - } - - @SafeVarargs - private void doThermal(HashSet... aTables) { - List tProduct = new ArrayList<>(); - if (sMidProduct != null) { - for (ItemStack aStack : sMidProduct) { - int tID = GT_Utility.stackToInt(aStack); - if (checkTypes(tID, aTables)) { - GT_Recipe tRecipe = RecipeMaps.thermalCentrifugeRecipes - .findRecipe(getBaseMetaTileEntity(), false, GT_Values.V[15], null, aStack); - if (tRecipe != null) { - tProduct.addAll(getOutputStack(tRecipe, aStack.stackSize)); - } else { - tProduct.add(aStack); - } - } else { - tProduct.add(aStack); - } - } - } - doCompress(tProduct); - } - - @SafeVarargs - private void doCentrifuge(HashSet... aTables) { - List tProduct = new ArrayList<>(); - if (sMidProduct != null) { - for (ItemStack aStack : sMidProduct) { - int tID = GT_Utility.stackToInt(aStack); - if (checkTypes(tID, aTables)) { - GT_Recipe tRecipe = RecipeMaps.centrifugeRecipes - .findRecipe(getBaseMetaTileEntity(), false, GT_Values.V[15], null, aStack); - if (tRecipe != null) { - tProduct.addAll(getOutputStack(tRecipe, aStack.stackSize)); - } else { - tProduct.add(aStack); - } - } else { - tProduct.add(aStack); - } - } - } - doCompress(tProduct); - } - - @SafeVarargs - private void doSift(HashSet... aTables) { - List tProduct = new ArrayList<>(); - if (sMidProduct != null) { - for (ItemStack aStack : sMidProduct) { - int tID = GT_Utility.stackToInt(aStack); - if (checkTypes(tID, aTables)) { - GT_Recipe tRecipe = RecipeMaps.sifterRecipes - .findRecipe(getBaseMetaTileEntity(), false, GT_Values.V[15], null, aStack); - if (tRecipe != null) { - tProduct.addAll(getOutputStack(tRecipe, aStack.stackSize)); - } else { - tProduct.add(aStack); - } - } else { - tProduct.add(aStack); - } - } - } - doCompress(tProduct); - } - - @SafeVarargs - private void doChemWash(HashSet... aTables) { - List tProduct = new ArrayList<>(); - if (sMidProduct != null) { - for (ItemStack aStack : sMidProduct) { - int tID = GT_Utility.stackToInt(aStack); - if (checkTypes(tID, aTables)) { - GT_Recipe tRecipe = RecipeMaps.chemicalBathRecipes.findRecipe( - getBaseMetaTileEntity(), - false, - GT_Values.V[15], - getStoredFluids().toArray(new FluidStack[0]), - aStack); - if (tRecipe != null && tRecipe.getRepresentativeFluidInput(0) != null) { - FluidStack tInputFluid = tRecipe.getRepresentativeFluidInput(0) - .copy(); - int tStored = getFluidAmount(tInputFluid); - int tWashed = Math.min(tStored / tInputFluid.amount, aStack.stackSize); - depleteInput(new FluidStack(tInputFluid.getFluid(), tWashed * tInputFluid.amount)); - tProduct.addAll(getOutputStack(tRecipe, tWashed)); - if (tWashed < aStack.stackSize) { - tProduct.add(GT_Utility.copyAmountUnsafe(aStack.stackSize - tWashed, aStack)); - } - } else { - tProduct.add(aStack); - } - } else { - tProduct.add(aStack); - } - } - } - doCompress(tProduct); - } - - private int getFluidAmount(FluidStack aFluid) { - int tAmt = 0; - if (aFluid == null) return 0; - for (FluidStack fluid : getStoredFluids()) { - if (aFluid.isFluidEqual(fluid)) { - tAmt += fluid.amount; - } - } - return tAmt; - } - - private List getOutputStack(GT_Recipe aRecipe, int aTime) { - List tOutput = new ArrayList<>(); - for (int i = 0; i < aRecipe.mOutputs.length; i++) { - if (aRecipe.getOutput(i) == null) { - continue; - } - int tChance = aRecipe.getOutputChance(i); - if (tChance == 10000) { - tOutput.add(GT_Utility.copyAmountUnsafe(aTime * aRecipe.getOutput(i).stackSize, aRecipe.getOutput(i))); - } else { - // Use Normal Distribution - double u = aTime * (tChance / 10000D); - double e = aTime * (tChance / 10000D) * (1 - (tChance / 10000D)); - Random random = new Random(); - int tAmount = (int) Math.ceil(Math.sqrt(e) * random.nextGaussian() + u); - tOutput - .add(GT_Utility.copyAmountUnsafe(tAmount * aRecipe.getOutput(i).stackSize, aRecipe.getOutput(i))); - } - } - return tOutput.stream() - .filter(i -> (i != null && i.stackSize > 0)) - .collect(Collectors.toList()); - } - - private void doCompress(List aList) { - HashMap rProduct = new HashMap<>(); - for (ItemStack stack : aList) { - int tID = GT_Utility.stackToInt(stack); - if (sVoidStone) { - if (GT_Utility.areStacksEqual(Materials.Stone.getDust(1), stack)) { - continue; - } - } - if (tID != 0) { - if (rProduct.containsKey(tID)) { - rProduct.put(tID, rProduct.get(tID) + stack.stackSize); - } else { - rProduct.put(tID, stack.stackSize); - } - } - } - sMidProduct = new ItemStack[rProduct.size()]; - int cnt = 0; - for (Integer id : rProduct.keySet()) { - ItemStack stack = GT_Utility.intToStack(id); - sMidProduct[cnt] = GT_Utility.copyAmountUnsafe(rProduct.get(id), stack); - cnt++; - } - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return checkPiece(STRUCTURE_PIECE_MAIN, 8, 9, 1) && mMaintenanceHatches.size() <= 1 - && !mMufflerHatches.isEmpty(); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return 200; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_IntegratedOreFactory(mName); - } - - private void setCurrentParallelism(int parallelism) { - this.currentParallelism = parallelism; - } - - private int getCurrentParallelism() { - return this.currentParallelism; - } - - @Override - public String[] getInfoData() { - List informationData = new ArrayList<>(Arrays.asList(super.getInfoData())); - String parallelism = StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " - + EnumChatFormatting.BLUE - + getCurrentParallelism() - + EnumChatFormatting.RESET; - informationData.add(parallelism); - informationData.add(StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.void", sVoidStone)); - informationData.addAll(getDisplayMode(sMode)); - return informationData.toArray(new String[0]); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX2), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX2), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX2) }; - } - - private static List getDisplayMode(int mode) { - final EnumChatFormatting AQUA = EnumChatFormatting.AQUA; - final String CRUSH = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Macerate"); - final String WASH = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Ore_Washer") - .replace(" ", " " + AQUA); - final String THERMAL = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Thermal_Centrifuge") - .replace(" ", " " + AQUA); - final String CENTRIFUGE = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Centrifuge"); - final String SIFTER = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Sifter"); - final String CHEM_WASH = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Chemical_Bathing") - .replace(" ", " " + AQUA); - final String ARROW = " " + AQUA + "-> "; - - List des = new ArrayList<>(); - des.add(StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor1") + " "); - - switch (mode) { - case 0 -> { - des.add(AQUA + CRUSH + ARROW); - des.add(AQUA + WASH + ARROW); - des.add(AQUA + THERMAL + ARROW); - des.add(AQUA + CRUSH + ' '); - } - case 1 -> { - des.add(AQUA + CRUSH + ARROW); - des.add(AQUA + WASH + ARROW); - des.add(AQUA + CRUSH + ARROW); - des.add(AQUA + CENTRIFUGE + ' '); - } - case 2 -> { - des.add(AQUA + CRUSH + ARROW); - des.add(AQUA + CRUSH + ARROW); - des.add(AQUA + CENTRIFUGE + ' '); - } - case 3 -> { - des.add(AQUA + CRUSH + ARROW); - des.add(AQUA + WASH + ARROW); - des.add(AQUA + SIFTER + ' '); - } - case 4 -> { - des.add(AQUA + CRUSH + ARROW); - des.add(AQUA + CHEM_WASH + ARROW); - des.add(AQUA + CRUSH + ARROW); - des.add(AQUA + CENTRIFUGE + ' '); - } - default -> des.add(StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.WRONG_MODE")); - } - - des.add(StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor2", getTime(mode) / 20)); - - return des; - - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " - + EnumChatFormatting.BLUE - + tag.getInteger("currentParallelism") - + EnumChatFormatting.RESET); - currenttip.addAll(getDisplayMode(tag.getInteger("ssMode"))); - currenttip - .add(StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.void", tag.getBoolean("ssStone"))); - - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("ssMode", sMode); - tag.setBoolean("ssStone", sVoidStone); - tag.setInteger("currentParallelism", currentParallelism); - } - - @Override - public boolean supportsBatchMode() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java deleted file mode 100644 index ae740447c8..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler.java +++ /dev/null @@ -1,504 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.STEAM_PER_WATER; -import static gregtech.api.enums.ItemList.Circuit_Integrated; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.formatNumbers; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.GT_Mod; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.maps.LargeBoilerFuelBackend; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public abstract class GT_MetaTileEntity_LargeBoiler - extends GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { - - @Override - protected IStructureDefinition computeValue(Class type) { - return StructureDefinition.builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { "ccc", "ccc", "ccc" }, { "ccc", "cPc", "ccc" }, { "ccc", "cPc", "ccc" }, - { "ccc", "cPc", "ccc" }, { "f~f", "fff", "fff" }, })) - .addElement('P', lazy(t -> ofBlock(t.getPipeBlock(), t.getPipeMeta()))) - .addElement( - 'c', - lazy( - t -> buildHatchAdder(GT_MetaTileEntity_LargeBoiler.class).atLeast(OutputHatch) - .casingIndex(t.getCasingTextureIndex()) - .dot(2) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_LargeBoiler::onCasingAdded, - ofBlock(t.getCasingBlock(), t.getCasingMeta()))))) - .addElement( - 'f', - lazy( - t -> buildHatchAdder(GT_MetaTileEntity_LargeBoiler.class) - .atLeast(Maintenance, InputHatch, InputBus, Muffler) - .casingIndex(t.getFireboxTextureIndex()) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_LargeBoiler::onFireboxAdded, - ofBlock(t.getFireboxBlock(), t.getFireboxMeta()))))) - .build(); - } - }; - private boolean firstRun = true; - private int mSuperEfficencyIncrease = 0; - private int integratedCircuitConfig = 0; // Steam output is reduced by 1000L per config - private int excessWater = 0; // Eliminate rounding errors for water - private int excessFuel = 0; // Eliminate rounding errors for fuels that burn half items - private int excessProjectedEU = 0; // Eliminate rounding errors from throttling the boiler - private int mCasingAmount; - private int mFireboxAmount; - protected int pollutionPerSecond = 1; // placeholder for the child classes - - public GT_MetaTileEntity_LargeBoiler(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_LargeBoiler(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - - tt.addMachineType("Boiler") - .addInfo("Controller block for the Large " + getCasingMaterial() + " Boiler"); - // Tooltip differs between the boilers that output Superheated Steam (Titanium and Tungstensteel) and the ones - // that do not (Bronze and Steel) - if (isSuperheated()) { - tt.addInfo( - "Produces " + formatNumbers((getEUt() * 40) * ((runtimeBoost(20) / (20f)) / superToNormalSteam)) - + "L of Superheated Steam with 1 Coal at " - + formatNumbers((getEUt() * 40L) / superToNormalSteam) - + "L/s") // ? - .addInfo("A programmed circuit in the main block throttles the boiler (-1000L/s per config)") - .addInfo("Only some solid fuels are allowed (check the NEI Large Boiler tab for details)") - .addInfo("If there are any disallowed fuels in the input bus, the boiler won't run!"); - } else { - tt.addInfo( - "Produces " + formatNumbers((getEUt() * 40) * (runtimeBoost(20) / 20f)) - + "L of Steam with 1 Coal at " - + formatNumbers(getEUt() * 40L) - + "L/s") // ? - .addInfo("A programmed circuit in the main block throttles the boiler (-1000L/s per config)") - .addInfo("Solid Fuels with a burn value that is too high or too low will not work"); - } - tt.addInfo( - String.format( - "Diesel fuels have 1/4 efficiency - Takes %s seconds to heat up", - formatNumbers(500.0 / getEfficiencyIncrease()))) // ? check semifluid again - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 5, 3, false) - .addController("Front bottom") - .addCasingInfoRange(getCasingMaterial() + " " + getCasingBlockType() + " Casing", 24, 31, false) // ? - .addOtherStructurePart(getCasingMaterial() + " Fire Boxes", "Bottom layer, 3 minimum") - .addOtherStructurePart(getCasingMaterial() + " Pipe Casing Blocks", "Inner 3 blocks") - .addMaintenanceHatch("Any firebox", 1) - .addMufflerHatch("Any firebox", 1) - .addInputBus("Solid fuel, Any firebox", 1) - .addInputHatch("Liquid fuel, Any firebox", 1) - .addStructureInfo("You can use either, or both") - .addInputHatch("Water, Any firebox", 1) - .addOutputHatch("Steam, any casing", 2) - .toolTipFinisher("Gregtech"); - - return tt; - } - - public abstract String getCasingMaterial(); - - public abstract Block getCasingBlock(); - - public abstract String getCasingBlockType(); - - public abstract byte getCasingMeta(); - - public abstract byte getCasingTextureIndex(); - - public abstract Block getPipeBlock(); - - public abstract byte getPipeMeta(); - - public abstract Block getFireboxBlock(); - - public abstract byte getFireboxMeta(); - - public abstract byte getFireboxTextureIndex(); - - public abstract int getEUt(); - - public abstract int getEfficiencyIncrease(); - - public int getIntegratedCircuitConfig() { - return integratedCircuitConfig; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - // allows for 0 pollution if circuit throttle is too high - return Math.max( - 0, - (int) (pollutionPerSecond - * (1 - GT_Mod.gregtechproxy.mPollutionReleasedByThrottle * getIntegratedCircuitConfig()))); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { BlockIcons.getCasingTextureForId(getCasingTextureIndex()), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_BOILER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_BOILER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { BlockIcons.getCasingTextureForId(getCasingTextureIndex()), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_BOILER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_BOILER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureIndex()) }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - boolean isFuelValid() { - if (!isSuperheated()) return true; - for (ItemStack input : getStoredInputs()) { - if (!LargeBoilerFuelBackend.isAllowedSolidFuel(input) - && !Circuit_Integrated.isStackEqual(input, true, true)) { - // if any item is not in ALLOWED_SOLID_FUELS, operation cannot be allowed because it might still be - // consumed - this.mMaxProgresstime = 0; - this.mEUt = 0; - return false; - } - } - return true; - } - - @Override - public RecipeMap getRecipeMap() { - // Only for visual - return RecipeMaps.largeBoilerFakeFuels; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - if (!isFuelValid()) return CheckRecipeResultRegistry.NO_FUEL_FOUND; - // Do we have an integrated circuit with a valid configuration? - if (Circuit_Integrated.isStackEqual(mInventory[1], true, true)) { - int circuit_config = mInventory[1].getItemDamage(); - if (circuit_config >= 1 && circuit_config <= 25) { - // If so, overwrite the current config - this.integratedCircuitConfig = circuit_config; - } - } else { - // If not, set the config to zero - this.integratedCircuitConfig = 0; - } - - this.mSuperEfficencyIncrease = 0; - if (!isSuperheated()) { - for (GT_Recipe tRecipe : RecipeMaps.dieselFuels.getAllRecipes()) { - FluidStack tFluid = GT_Utility.getFluidForFilledItem(tRecipe.getRepresentativeInput(0), true); - if (tFluid != null && tRecipe.mSpecialValue > 1) { - tFluid.amount = 1000; - if (depleteInput(tFluid)) { - this.mMaxProgresstime = adjustBurnTimeForConfig(runtimeBoost(tRecipe.mSpecialValue / 2)); - this.mEUt = adjustEUtForConfig(getEUt()); - this.mEfficiencyIncrease = this.mMaxProgresstime * getEfficiencyIncrease() * 4; - return CheckRecipeResultRegistry.SUCCESSFUL; - } - } - } - for (GT_Recipe tRecipe : RecipeMaps.denseLiquidFuels.getAllRecipes()) { - FluidStack tFluid = GT_Utility.getFluidForFilledItem(tRecipe.getRepresentativeInput(0), true); - if (tFluid != null) { - tFluid.amount = 1000; - if (depleteInput(tFluid)) { - this.mMaxProgresstime = adjustBurnTimeForConfig( - Math.max(1, runtimeBoost(tRecipe.mSpecialValue * 2))); - this.mEUt = adjustEUtForConfig(getEUt()); - this.mEfficiencyIncrease = this.mMaxProgresstime * getEfficiencyIncrease(); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - } - } - } - - ArrayList tInputList = getStoredInputs(); - if (!tInputList.isEmpty()) { - if (isSuperheated()) { - for (ItemStack tInput : tInputList) { - if (tInput != GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Lava, 1)) { - if (GT_Utility.getFluidForFilledItem(tInput, true) == null - && (this.mMaxProgresstime = GT_ModHandler.getFuelValue(tInput) / 80) > 0) { - this.excessFuel += GT_ModHandler.getFuelValue(tInput) % 80; - this.mMaxProgresstime += this.excessFuel / 80; - this.excessFuel %= 80; - this.mMaxProgresstime = adjustBurnTimeForConfig(runtimeBoost(this.mMaxProgresstime)); - this.mEUt = adjustEUtForConfig(getEUt()); - this.mEfficiencyIncrease = this.mMaxProgresstime * getEfficiencyIncrease(); - this.mOutputItems = new ItemStack[] { GT_Utility.getContainerItem(tInput, true) }; - tInput.stackSize -= 1; - updateSlots(); - if (this.mEfficiencyIncrease > 5000) { - this.mEfficiencyIncrease = 0; - this.mSuperEfficencyIncrease = 20; - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - } - } - } else { - for (ItemStack tInput : tInputList) { - if (tInput != GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Lava, 1)) { - // Solid fuels with burn values below getEUt are ignored (mostly items like sticks), and also - // those with very high fuel values that would cause an overflow error. - if (GT_Utility.getFluidForFilledItem(tInput, true) == null - && (this.mMaxProgresstime = GT_ModHandler.getFuelValue(tInput) / 80) > 0 - && (GT_ModHandler.getFuelValue(tInput) * 2 / this.getEUt()) > 1 - && GT_ModHandler.getFuelValue(tInput) < 100000000) { - this.excessFuel += GT_ModHandler.getFuelValue(tInput) % 80; - this.mMaxProgresstime += this.excessFuel / 80; - this.excessFuel %= 80; - this.mMaxProgresstime = adjustBurnTimeForConfig(runtimeBoost(this.mMaxProgresstime)); - this.mEUt = adjustEUtForConfig(getEUt()); - this.mEfficiencyIncrease = this.mMaxProgresstime * getEfficiencyIncrease(); - this.mOutputItems = new ItemStack[] { GT_Utility.getContainerItem(tInput, true) }; - tInput.stackSize -= 1; - updateSlots(); - if (this.mEfficiencyIncrease > 5000) { - this.mEfficiencyIncrease = 0; - this.mSuperEfficencyIncrease = 20; - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - } - } - } - } - this.mMaxProgresstime = 0; - this.mEUt = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - abstract int runtimeBoost(int mTime); - - abstract boolean isSuperheated(); - - private final int superToNormalSteam = 3; - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (this.mEUt > 0) { - if (this.mSuperEfficencyIncrease > 0) mEfficiency = Math.max( - 0, - Math.min( - mEfficiency + mSuperEfficencyIncrease, - getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000))); - int tGeneratedEU = (int) (this.mEUt * 2L * this.mEfficiency / 10000L); - if (tGeneratedEU > 0) { - long amount = (tGeneratedEU + STEAM_PER_WATER) / STEAM_PER_WATER; - excessWater += amount * STEAM_PER_WATER - tGeneratedEU; - amount -= excessWater / STEAM_PER_WATER; - excessWater %= STEAM_PER_WATER; - startRecipeProcessing(); - if (isSuperheated()) { - // Consumes only one third of the water if producing Superheated Steam, to maintain water in the - // chain. - if (depleteInput(Materials.Water.getFluid(amount / superToNormalSteam)) - || depleteInput(GT_ModHandler.getDistilledWater(amount / superToNormalSteam))) { - // Outputs Superheated Steam instead of Steam, at one third of the amount (equivalent in power - // output to the normal Steam amount). - addOutput( - FluidRegistry.getFluidStack("ic2superheatedsteam", tGeneratedEU / superToNormalSteam)); - } else { - GT_Log.exp.println("Boiler " + this.mName + " had no Water!"); - explodeMultiblock(); - } - } else { - if (depleteInput(Materials.Water.getFluid(amount)) - || depleteInput(GT_ModHandler.getDistilledWater(amount))) { - addOutput(GT_ModHandler.getSteam(tGeneratedEU)); - } else { - GT_Log.exp.println("Boiler " + this.mName + " had no Water!"); - explodeMultiblock(); - } - } - endRecipeProcessing(); - } - return true; - } - return true; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("excessFuel", excessFuel); - aNBT.setInteger("excessWater", excessWater); - aNBT.setInteger("excessProjectedEU", excessProjectedEU); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - excessFuel = aNBT.getInteger("excessFuel"); - excessWater = aNBT.getInteger("excessWater"); - excessProjectedEU = aNBT.getInteger("excessProjectedEU"); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (mProgresstime > 0 && firstRun) { - firstRun = false; - GT_Mod.achievements.issueAchievement( - aBaseMetaTileEntity.getWorld() - .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), - "extremepressure"); - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION.get(getClass()); - } - - private void onCasingAdded() { - mCasingAmount++; - } - - private void onFireboxAdded() { - mFireboxAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasingAmount = 0; - mFireboxAmount = 0; - return checkPiece(STRUCTURE_PIECE_MAIN, 1, 4, 0) && mCasingAmount >= 24 - && mFireboxAmount >= 3 - && mMaintenanceHatches.size() == 1 - && !mMufflerHatches.isEmpty(); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - private int adjustEUtForConfig(int rawEUt) { - int adjustedSteamOutput = rawEUt - (isSuperheated() ? 75 : 25) * integratedCircuitConfig; - return Math.max(adjustedSteamOutput, 25); - } - - private int adjustBurnTimeForConfig(int rawBurnTime) { - if (mEfficiency < getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000)) { - return rawBurnTime; - } - int adjustedEUt = Math.max(25, getEUt() - (isSuperheated() ? 75 : 25) * integratedCircuitConfig); - int adjustedBurnTime = rawBurnTime * getEUt() / adjustedEUt; - this.excessProjectedEU += getEUt() * rawBurnTime - adjustedEUt * adjustedBurnTime; - adjustedBurnTime += this.excessProjectedEU / adjustedEUt; - this.excessProjectedEU %= adjustedEUt; - return adjustedBurnTime; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 4, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 4, 0, elementBudget, env, false, true); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Bronze.java deleted file mode 100644 index 2effcf7966..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Bronze.java +++ /dev/null @@ -1,96 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import net.minecraft.block.Block; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class GT_MetaTileEntity_LargeBoiler_Bronze extends GT_MetaTileEntity_LargeBoiler { - - public GT_MetaTileEntity_LargeBoiler_Bronze(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - pollutionPerSecond = GT_Mod.gregtechproxy.mPollutionLargeBronzeBoilerPerSecond; - } - - public GT_MetaTileEntity_LargeBoiler_Bronze(String aName) { - super(aName); - pollutionPerSecond = GT_Mod.gregtechproxy.mPollutionLargeBronzeBoilerPerSecond; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LargeBoiler_Bronze(this.mName); - } - - @Override - public String getCasingMaterial() { - return "Bronze"; - } - - @Override - public String getCasingBlockType() { - return "Plated Bricks"; - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings1; - } - - @Override - public byte getCasingMeta() { - return 10; - } - - @Override - public byte getCasingTextureIndex() { - return 10; - } - - @Override - public Block getPipeBlock() { - return GregTech_API.sBlockCasings2; - } - - @Override - public byte getPipeMeta() { - return 12; - } - - @Override - public Block getFireboxBlock() { - return GregTech_API.sBlockCasings3; - } - - @Override - public byte getFireboxMeta() { - return 13; - } - - @Override - public byte getFireboxTextureIndex() { - return 45; - } - - @Override - public int getEUt() { - return 400; - } - - @Override - public int getEfficiencyIncrease() { - return 16; - } - - @Override - int runtimeBoost(int mTime) { - return mTime * 2; - } - - @Override - boolean isSuperheated() { - return false; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Steel.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Steel.java deleted file mode 100644 index c7bd766945..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Steel.java +++ /dev/null @@ -1,96 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import net.minecraft.block.Block; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class GT_MetaTileEntity_LargeBoiler_Steel extends GT_MetaTileEntity_LargeBoiler { - - public GT_MetaTileEntity_LargeBoiler_Steel(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - pollutionPerSecond = GT_Mod.gregtechproxy.mPollutionLargeSteelBoilerPerSecond; - } - - public GT_MetaTileEntity_LargeBoiler_Steel(String aName) { - super(aName); - pollutionPerSecond = GT_Mod.gregtechproxy.mPollutionLargeSteelBoilerPerSecond; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LargeBoiler_Steel(this.mName); - } - - @Override - public String getCasingMaterial() { - return "Steel"; - } - - @Override - public String getCasingBlockType() { - return "Machine Casings"; - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings2; - } - - @Override - public byte getCasingMeta() { - return 0; - } - - @Override - public byte getCasingTextureIndex() { - return 16; - } - - @Override - public Block getPipeBlock() { - return GregTech_API.sBlockCasings2; - } - - @Override - public byte getPipeMeta() { - return 13; - } - - @Override - public Block getFireboxBlock() { - return GregTech_API.sBlockCasings3; - } - - @Override - public byte getFireboxMeta() { - return 14; - } - - @Override - public byte getFireboxTextureIndex() { - return 46; - } - - @Override - public int getEUt() { - return 1000; - } - - @Override - public int getEfficiencyIncrease() { - return 12; - } - - @Override - int runtimeBoost(int mTime) { - return mTime; - } - - @Override - boolean isSuperheated() { - return false; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Titanium.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Titanium.java deleted file mode 100644 index 61f2756622..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_Titanium.java +++ /dev/null @@ -1,96 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import net.minecraft.block.Block; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class GT_MetaTileEntity_LargeBoiler_Titanium extends GT_MetaTileEntity_LargeBoiler { - - public GT_MetaTileEntity_LargeBoiler_Titanium(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - pollutionPerSecond = GT_Mod.gregtechproxy.mPollutionLargeTitaniumBoilerPerSecond; - } - - public GT_MetaTileEntity_LargeBoiler_Titanium(String aName) { - super(aName); - pollutionPerSecond = GT_Mod.gregtechproxy.mPollutionLargeTitaniumBoilerPerSecond; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LargeBoiler_Titanium(this.mName); - } - - @Override - public String getCasingMaterial() { - return "Titanium"; - } - - @Override - public String getCasingBlockType() { - return "Machine Casings"; - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - @Override - public byte getCasingMeta() { - return 2; - } - - @Override - public byte getCasingTextureIndex() { - return 50; - } - - @Override - public Block getPipeBlock() { - return GregTech_API.sBlockCasings2; - } - - @Override - public byte getPipeMeta() { - return 14; - } - - @Override - public Block getFireboxBlock() { - return GregTech_API.sBlockCasings4; - } - - @Override - public byte getFireboxMeta() { - return 3; - } - - @Override - public byte getFireboxTextureIndex() { - return 51; - } - - @Override - public int getEUt() { - return 4000; - } - - @Override - public int getEfficiencyIncrease() { - return 8; - } - - @Override - int runtimeBoost(int mTime) { - return mTime * 130 / 400; - } - - @Override - boolean isSuperheated() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_TungstenSteel.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_TungstenSteel.java deleted file mode 100644 index f00ea287b2..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeBoiler_TungstenSteel.java +++ /dev/null @@ -1,96 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import net.minecraft.block.Block; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class GT_MetaTileEntity_LargeBoiler_TungstenSteel extends GT_MetaTileEntity_LargeBoiler { - - public GT_MetaTileEntity_LargeBoiler_TungstenSteel(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - pollutionPerSecond = GT_Mod.gregtechproxy.mPollutionLargeTungstenSteelBoilerPerSecond; - } - - public GT_MetaTileEntity_LargeBoiler_TungstenSteel(String aName) { - super(aName); - pollutionPerSecond = GT_Mod.gregtechproxy.mPollutionLargeTungstenSteelBoilerPerSecond; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LargeBoiler_TungstenSteel(this.mName); - } - - @Override - public String getCasingMaterial() { - return "TungstenSteel"; - } - - @Override - public String getCasingBlockType() { - return "Machine Casings"; - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - @Override - public byte getCasingMeta() { - return 0; - } - - @Override - public byte getCasingTextureIndex() { - return 48; - } - - @Override - public Block getPipeBlock() { - return GregTech_API.sBlockCasings2; - } - - @Override - public byte getPipeMeta() { - return 15; - } - - @Override - public Block getFireboxBlock() { - return GregTech_API.sBlockCasings3; - } - - @Override - public byte getFireboxMeta() { - return 15; - } - - @Override - public byte getFireboxTextureIndex() { - return 47; - } - - @Override - public int getEUt() { - return 16000; - } - - @Override - public int getEfficiencyIncrease() { - return 4; - } - - @Override - int runtimeBoost(int mTime) { - return mTime * 120 / 750; - } - - @Override - boolean isSuperheated() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java deleted file mode 100644 index 8e4b5ec650..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java +++ /dev/null @@ -1,298 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.function.Consumer; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IChatComponent; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; -import com.gtnewhorizon.structurelib.structure.IItemSource; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureUtility; -import com.gtnewhorizon.structurelib.util.ItemStackPredicate; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.interfaces.IHeatingCoil; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_LargeChemicalReactor extends - GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - private static final int CASING_INDEX = 176; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose(new String[][] { { "ccc", "cxc", "ccc" }, { "c~c", "xPx", "cxc" }, { "ccc", "cxc", "ccc" }, })) - .addElement('P', ofBlock(GregTech_API.sBlockCasings8, 1)) - .addElement( - 'c', - buildHatchAdder(GT_MetaTileEntity_LargeChemicalReactor.class) - .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_LargeChemicalReactor::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings8, 0)))) - .addElement( - 'x', - buildHatchAdder(GT_MetaTileEntity_LargeChemicalReactor.class) - .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain( - CoilStructureElement.INSTANCE, - onElementPass( - GT_MetaTileEntity_LargeChemicalReactor::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings8, 0)))) - .build(); - - private int mCasingAmount; - private int mCoilAmount; - - public GT_MetaTileEntity_LargeChemicalReactor(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_LargeChemicalReactor(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LargeChemicalReactor(this.mName); - } - - @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Chemical Reactor") - .addInfo("Controller block for the Large Chemical Reactor") - .addInfo("Does not lose efficiency when overclocked") - .addInfo("Accepts fluids instead of fluid cells") - .addSeparator() - .beginStructureBlock(3, 3, 3, false) - .addController("Front center") - .addCasingInfoRange("Chemically Inert Machine Casing", 8, 22, false) - .addOtherStructurePart("PTFE Pipe Machine Casing", "Center") - .addOtherStructurePart("Heating Coil", "Adjacent to the PTFE Pipe Machine Casing", 1) - .addEnergyHatch("Any casing", 1, 2) - .addMaintenanceHatch("Any casing", 1, 2) - .addInputBus("Any casing", 1, 2) - .addInputHatch("Any casing", 1, 2) - .addOutputBus("Any casing", 1, 2) - .addOutputHatch("Any casing", 1, 2) - .addStructureInfo("You can have multiple hatches/busses") - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { casingTexturePages[1][48], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[1][48], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[1][48] }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.multiblockChemicalReactorRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().enablePerfectOverclock(); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasingAmount = 0; - mCoilAmount = 0; - return checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 0) && mCasingAmount >= 8 - && mCoilAmount == 1 - && !mEnergyHatches.isEmpty() - && mMaintenanceHatches.size() == 1; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - mCoilAmount = 0; - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - mCoilAmount = 0; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - private enum CoilStructureElement implements IStructureElement { - - INSTANCE; - - @Override - public boolean check(GT_MetaTileEntity_LargeChemicalReactor t, World world, int x, int y, int z) { - Block block = world.getBlock(x, y, z); - if (block instanceof IHeatingCoil - && ((IHeatingCoil) block).getCoilHeat(world.getBlockMetadata(x, y, z)) != HeatingCoilLevel.None) { - return t.mCoilAmount++ == 0; - } else { - return false; - } - } - - @Override - public boolean spawnHint(GT_MetaTileEntity_LargeChemicalReactor t, World world, int x, int y, int z, - ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, GregTech_API.sBlockCasings5, 0); - return true; - } - - @Override - public boolean placeBlock(GT_MetaTileEntity_LargeChemicalReactor t, World world, int x, int y, int z, - ItemStack trigger) { - if (t.mCoilAmount > 0) return false; - boolean b = world.setBlock(x, y, z, GregTech_API.sBlockCasings5, 0, 3); - if (b) t.mCoilAmount++; - return b; - } - - @Override - public PlaceResult survivalPlaceBlock(GT_MetaTileEntity_LargeChemicalReactor t, World world, int x, int y, - int z, ItemStack trigger, IItemSource s, EntityPlayerMP actor, Consumer chatter) { - return survivalPlaceBlock(t, world, x, y, z, trigger, AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); - } - - @Override - public BlocksToPlace getBlocksToPlace( - GT_MetaTileEntity_LargeChemicalReactor gt_metaTileEntity_largeChemicalReactor, World world, int x, int y, - int z, ItemStack trigger, AutoPlaceEnvironment env) { - return BlocksToPlace.create( - IntStream.range(0, 8) - .mapToObj(i -> new ItemStack(GregTech_API.sBlockCasings5, 1, i)) - .collect(Collectors.toList())); - } - - @Override - public PlaceResult survivalPlaceBlock(GT_MetaTileEntity_LargeChemicalReactor t, World world, int x, int y, - int z, ItemStack trigger, AutoPlaceEnvironment env) { - if (t.mCoilAmount > 0) return PlaceResult.SKIP; - if (check(t, world, x, y, z)) return PlaceResult.SKIP; - if (!StructureLibAPI.isBlockTriviallyReplaceable(world, x, y, z, env.getActor())) return PlaceResult.REJECT; - ItemStack result = env.getSource() - .takeOne(ItemStackPredicate.from(GregTech_API.sBlockCasings5), true); - if (result == null) return PlaceResult.REJECT; - PlaceResult ret = StructureUtility.survivalPlaceBlock( - result, - ItemStackPredicate.NBTMode.EXACT, - null, - true, - world, - x, - y, - z, - env.getSource(), - env.getActor(), - env.getChatter()); - if (ret == PlaceResult.ACCEPT) t.mCoilAmount++; - return ret; - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeFluidExtractor.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeFluidExtractor.java deleted file mode 100644 index c1a5bc3458..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeFluidExtractor.java +++ /dev/null @@ -1,419 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.github.bartimaeusnek.bartworks.util.BW_Util.ofGlassTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.getCasingTextureForId; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; -import static gregtech.api.util.GT_StructureUtility.ofFrame; -import static gregtech.api.util.GT_StructureUtility.ofSolenoidCoil; -import static net.minecraft.util.EnumChatFormatting.RESET; -import static net.minecraft.util.EnumChatFormatting.YELLOW; - -import java.util.ArrayList; -import java.util.Arrays; - -import javax.annotation.Nullable; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MetaTileEntity_LargeFluidExtractor - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final int CASING_INDEX = 48; // Robust Tungstensteel Machine Casing - private static final int BASE_CASING_COUNT = 24 + 24 + 9; - private static final int MAX_HATCHES_ALLOWED = 16; - - private static final double BASE_SPEED_BONUS = 1.5; - private static final double BASE_EU_MULTIPLIER = 0.8; - - private static final double SPEED_PER_COIL = 0.1; - private static final int PARALLELS_PER_SOLENOID = 8; - private static final double HEATING_COIL_EU_MULTIPLIER = 0.9; - - // spotless:off - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { - {" ", " ccc ", " ccc ", " ccc ", " "}, - {" ", " f f ", " s ", " f f ", " "}, - {" ", " f f ", " s ", " f f ", " "}, - {" ", " f f ", " s ", " f f ", " "}, - {"ccccc", "ccccc", "ccscc", "ccccc", "ccccc"}, - {"fgggf", "ghhhg", "ghshg", "ghhhg", "fgggf"}, - {"fgggf", "ghhhg", "ghshg", "ghhhg", "fgggf"}, - {"fgggf", "ghhhg", "ghshg", "ghhhg", "fgggf"}, - {"cc~cc", "ccccc", "ccccc", "ccccc", "ccccc"}, - })) - .addElement('c', - buildHatchAdder(GT_MetaTileEntity_LargeFluidExtractor.class) - .atLeast(InputBus, OutputBus, OutputHatch, Energy, Maintenance) - .casingIndex(CASING_INDEX) // Robust Tungstensteel Machine Casing - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_LargeFluidExtractor::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings4, 0))) // Robust Tungstensteel Machine Casing - ) - .addElement( - 'g', - withChannel( - "glass", - ofGlassTiered( - (byte) 1, (byte) 127, (byte) 0, - GT_MetaTileEntity_LargeFluidExtractor::setGlassTier, - GT_MetaTileEntity_LargeFluidExtractor::getGlassTier, - 2)) - ) - .addElement( - 'h', - withChannel( - "coil", - ofCoil( - GT_MetaTileEntity_LargeFluidExtractor::setCoilLevel, - GT_MetaTileEntity_LargeFluidExtractor::getCoilLevel)) - ) - .addElement( - 's', - withChannel( - "solenoid", - ofSolenoidCoil( - GT_MetaTileEntity_LargeFluidExtractor::setSolenoidLevel, - GT_MetaTileEntity_LargeFluidExtractor::getSolenoidLevel)) - ) - .addElement( - 'f', - ofFrame(Materials.BlackSteel) - ) - .build(); - // spotless:on - - private byte mGlassTier = 0; - @Nullable - private HeatingCoilLevel mCoilLevel = null; - @Nullable - private Byte mSolenoidLevel = null; - private int mCasingAmount; - private boolean mStructureBadGlassTier = false, mStructureBadCasingCount = false; - - public GT_MetaTileEntity_LargeFluidExtractor(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_LargeFluidExtractor(String aName) { - super(aName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public void clearHatches() { - super.clearHatches(); - - mCasingAmount = 0; - mStructureBadGlassTier = false; - mStructureBadCasingCount = false; - mGlassTier = 0; - mCoilLevel = null; - mSolenoidLevel = null; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 8, 0)) { - return false; - } - - if (mCasingAmount < (BASE_CASING_COUNT - MAX_HATCHES_ALLOWED)) { - mStructureBadCasingCount = true; - } - - for (var energyHatch : mEnergyHatches) { - if (energyHatch.getBaseMetaTileEntity() == null) { - continue; - } - - if (mGlassTier < 10 && energyHatch.getTierForStructure() > mGlassTier) { - mStructureBadGlassTier = true; - } - } - - return !mStructureBadGlassTier && !mStructureBadCasingCount; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 8, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 8, 0, elementBudget, env, false, true); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic(); - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - super.setProcessingLogicPower(logic); - logic.setAvailableAmperage(mEnergyHatches.size()); - logic.setEuModifier((float) (getEUMultiplier())); - logic.setMaxParallel(getParallels()); - logic.setSpeedBonus(1.0f / (float) (getSpeedBonus())); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LargeFluidExtractor(this.mName); - } - - private void onCasingAdded() { - mCasingAmount++; - } - - private byte getGlassTier() { - return mGlassTier; - } - - private void setGlassTier(byte tier) { - mGlassTier = tier; - } - - private HeatingCoilLevel getCoilLevel() { - return mCoilLevel; - } - - private void setCoilLevel(HeatingCoilLevel level) { - mCoilLevel = level; - } - - private Byte getSolenoidLevel() { - return mSolenoidLevel; - } - - private void setSolenoidLevel(byte level) { - mSolenoidLevel = level; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean active, boolean redstoneLevel) { - if (side == facing) { - if (active) { - return new ITexture[] { getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active) - .extFacing() - .build() }; - } else { - return new ITexture[] { getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(TexturesGtBlock.Overlay_Machine_Controller_Advanced) - .extFacing() - .build() }; - } - } - return new ITexture[] { getCasingTextureForId(CASING_INDEX) }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - - // spotless:off - tt.addMachineType("Fluid Extractor") - .addInfo("Controller block for the Large Fluid Extractor") - .addInfo(String.format( - "%d%% faster than single block machines of the same voltage", - (int) Math.round((BASE_SPEED_BONUS - 1) * 100) - )) - .addInfo(String.format( - "Only uses %d%% of the EU/t normally required", - (int) Math.round(BASE_EU_MULTIPLIER * 100) - )) - .addInfo(String.format( - "Every coil tier gives a +%d%% speed bonus and a %d%% EU/t discount (multiplicative)", - (int) Math.round(SPEED_PER_COIL * 100), - (int) Math.round((1 - HEATING_COIL_EU_MULTIPLIER) * 100) - )) - .addInfo(String.format( - "Every solenoid tier gives +%d parallels", - (int) PARALLELS_PER_SOLENOID - )) - .addInfo(String.format( - "The EU multiplier is %s%.2f * (%.2f ^ Heating Coil Tier)%s, prior to overclocks", - EnumChatFormatting.ITALIC, - BASE_EU_MULTIPLIER, - HEATING_COIL_EU_MULTIPLIER, - EnumChatFormatting.GRAY - )) - .addInfo("The energy hatch tier is limited by the glass tier. UEV glass unlocks all tiers.") - .addSeparator() - .beginStructureBlock(5, 9, 5, false) - .addController("Front Center (Bottom Layer)") - .addCasingInfoMin("Robust Tungstensteel Machine Casing", BASE_CASING_COUNT - MAX_HATCHES_ALLOWED, false) - .addCasingInfoExactly("Borosilicate Glass (any)", 9 * 4, true) - .addCasingInfoExactly("Solenoid Superconducting Coil (any)", 7, true) - .addCasingInfoExactly("Heating Coils (any)", 8 * 3, true) - .addCasingInfoExactly("Black Steel Frame Box", 3 * 8, false) - .addInputBus("Any Robust Tungstensteel Machine Casing", 1) - .addOutputBus("Any Robust Tungstensteel Machine Casing", 1) - .addOutputHatch("Any Robust Tungstensteel Machine Casing", 1) - .addEnergyHatch("Any Robust Tungstensteel Machine Casing", 1) - .addMaintenanceHatch("Any Robust Tungstensteel Machine Casing", 1) - .toolTipFinisher("GregTech"); - // spotless:on - - return tt; - } - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - - screenElements.widgets(TextWidget.dynamicString(() -> { - if (mStructureBadCasingCount) { - return String.format( - "%sNot enough casings: need %d, but\nhave %d.%s", - EnumChatFormatting.DARK_RED, - BASE_CASING_COUNT - MAX_HATCHES_ALLOWED, - mCasingAmount, - RESET); - } - - if (mStructureBadGlassTier) { - int hatchTier = 0; - - for (var hatch : mEnergyHatches) { - if (hatch.mTier > hatchTier) hatchTier = hatch.mTier; - } - - return String.format( - "%sEnergy hatch tier (%s) is too high\nfor the glass tier (%s).%s", - EnumChatFormatting.DARK_RED, - VN[hatchTier], - VN[mGlassTier], - RESET); - } - - return ""; - }) - .setTextAlignment(Alignment.CenterLeft)); - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10_000; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.fluidExtractionRecipes; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - public String[] getInfoData() { - var data = new ArrayList(); - - data.addAll(Arrays.asList(super.getInfoData())); - - data.add(String.format("Max Parallels: %s%d%s", YELLOW, getParallels(), RESET)); - data.add(String.format("Heating Coil Speed Bonus: +%s%.0f%s %%", YELLOW, getCoilSpeedBonus() * 100, RESET)); - data.add(String.format("Total Speed Multiplier: %s%.0f%s %%", YELLOW, getSpeedBonus() * 100, RESET)); - data.add(String.format("Total EU/t Multiplier: %s%.0f%s %%", YELLOW, getEUMultiplier() * 100, RESET)); - - return data.toArray(new String[data.size()]); - } - - public int getParallels() { - return Math.max(1, mSolenoidLevel == null ? 0 : (PARALLELS_PER_SOLENOID * mSolenoidLevel)); - } - - public float getCoilSpeedBonus() { - return (float) ((mCoilLevel == null ? 0 : SPEED_PER_COIL * mCoilLevel.getTier())); - } - - public float getSpeedBonus() { - return (float) (BASE_SPEED_BONUS + getCoilSpeedBonus()); - } - - public float getEUMultiplier() { - double heatingBonus = (mCoilLevel == null ? 0 : Math.pow(HEATING_COIL_EU_MULTIPLIER, mCoilLevel.getTier())); - - return (float) (BASE_EU_MULTIPLIER * heatingBonus); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java deleted file mode 100644 index 54ad5939f8..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine.java +++ /dev/null @@ -1,492 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Dynamo; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Textures.BlockIcons.TURBINE_NEW; -import static gregtech.api.enums.Textures.BlockIcons.TURBINE_NEW_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.TURBINE_NEW_EMPTY; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; -import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; -import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.Dyes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.LightingHelper; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.render.GT_RenderUtil; - -public abstract class GT_MetaTileEntity_LargeTurbine - extends GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { - - @Override - protected IStructureDefinition computeValue(Class type) { - return StructureDefinition.builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { " ", " ", " ", " ", " ", }, - { " --- ", " ccc ", " hhh ", " hhh ", " hhh ", }, - { " --- ", " c~c ", " h-h ", " h-h ", " hdh ", }, - { " --- ", " ccc ", " hhh ", " hhh ", " hhh ", }, - { " ", " ", " ", " ", " ", }, })) - .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMeta()))) - .addElement('d', lazy(t -> Dynamo.newAny(t.getCasingTextureIndex(), 1))) - .addElement( - 'h', - lazy( - t -> buildHatchAdder(GT_MetaTileEntity_LargeTurbine.class) - .atLeast(Maintenance, InputHatch, OutputHatch, OutputBus, InputBus, Muffler) - .casingIndex(t.getCasingTextureIndex()) - .dot(2) - .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) - .build(); - } - }; - - protected int baseEff = 0; - protected int optFlow = 0; - protected double realOptFlow = 0; - protected int storedFluid = 0; - protected int counter = 0; - protected boolean looseFit = false; - protected int overflowMultiplier = 0; - protected final float[] flowMultipliers = new float[] { 1, 1, 1 }; - - // client side stuff - protected boolean mHasTurbine; - // mMachine got overwritten by StructureLib extended facing query response - // so we use a separate field for this - protected boolean mFormed; - - public GT_MetaTileEntity_LargeTurbine(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_LargeTurbine(String aName) { - super(aName); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return getMaxEfficiency(aStack) > 0; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION.get(getClass()); - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> r.isNotRotated() && f.isNotFlipped(); - } - - @Override - protected ExtendedFacing getCorrectedAlignment(ExtendedFacing aOldFacing) { - return aOldFacing.with(Flip.NONE) - .with(Rotation.NORMAL); - } - - @Override - public boolean isFlipChangeAllowed() { - return false; - } - - @Override - public boolean isRotationChangeAllowed() { - return false; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - return checkPiece(STRUCTURE_PIECE_MAIN, 2, 2, 1) && mMaintenanceHatches.size() == 1 - && mMufflerHatches.isEmpty() == (getPollutionPerTick(null) == 0); - } - - public abstract Block getCasingBlock(); - - public abstract byte getCasingMeta(); - - public abstract int getCasingTextureIndex(); - - public boolean isNewStyleRendering() { - return false; - } - - public IIconContainer[] getTurbineTextureActive() { - return TURBINE_NEW_ACTIVE; - } - - public IIconContainer[] getTurbineTextureFull() { - return TURBINE_NEW; - } - - public IIconContainer[] getTurbineTextureEmpty() { - return TURBINE_NEW_EMPTY; - } - - @Override - public boolean renderInWorld(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, RenderBlocks aRenderer) { - if (!isNewStyleRendering() || !mFormed) return false; - int[] tABCCoord = new int[] { -1, -1, 0 }; - int[] tXYZOffset = new int[3]; - final ForgeDirection tFacing = getBaseMetaTileEntity().getFrontFacing(); - final ExtendedFacing tExtendedFacing = getExtendedFacing(); - final ForgeDirection tDirection = tExtendedFacing.getDirection(); - final LightingHelper tLighting = new LightingHelper(aRenderer); - - // for some reason +x and -z need this field set to true, but not any other sides - if (tFacing == ForgeDirection.NORTH || tFacing == ForgeDirection.EAST) aRenderer.field_152631_f = true; - final Block tBlock = getCasingBlock(); - - IIconContainer[] tTextures; - if (getBaseMetaTileEntity().isActive()) tTextures = getTurbineTextureActive(); - else if (hasTurbine()) tTextures = getTurbineTextureFull(); - else tTextures = getTurbineTextureEmpty(); - - assert tTextures != null && tTextures.length == tABCCoord.length; - - for (int i = 0; i < 9; i++) { - if (i != 4) { // do not draw ourselves again. - tExtendedFacing.getWorldOffset(tABCCoord, tXYZOffset); - // since structure check passed, we can assume it is turbine casing - int tX = tXYZOffset[0] + aX; - int tY = tXYZOffset[1] + aY; - int tZ = tXYZOffset[2] + aZ; - // we skip the occlusion test, as we always require a working turbine to have a block of air before it - // so the front face cannot be occluded whatsoever in the most cases. - Tessellator.instance.setBrightness( - tBlock.getMixedBrightnessForBlock( - aWorld, - aX + tDirection.offsetX, - tY + tDirection.offsetY, - aZ + tDirection.offsetZ)); - tLighting.setupLighting(tBlock, tX, tY, tZ, tFacing) - .setupColor(tFacing, Dyes._NULL.mRGBa); - GT_RenderUtil.renderBlockIcon( - aRenderer, - tBlock, - tX + tDirection.offsetX * 0.01, - tY + tDirection.offsetY * 0.01, - tZ + tDirection.offsetZ * 0.01, - tTextures[i].getIcon(), - tFacing); - } - if (++tABCCoord[0] == 2) { - tABCCoord[0] = -1; - tABCCoord[1]++; - } - } - - aRenderer.field_152631_f = false; - return false; - } - - @Override - public void onValueUpdate(byte aValue) { - mHasTurbine = (aValue & 0x1) != 0; - mFormed = (aValue & 0x2) != 0; - super.onValueUpdate(aValue); - } - - @Override - public byte getUpdateData() { - return (byte) ((hasTurbine() ? 1 : 0) | (mMachine ? 2 : 0)); - } - - @Override - public boolean addToMachineList(IGregTechTileEntity tTileEntity, int aBaseCasingIndex) { - return addMaintenanceToMachineList(tTileEntity, getCasingTextureIndex()) - || addInputToMachineList(tTileEntity, getCasingTextureIndex()) - || addOutputToMachineList(tTileEntity, getCasingTextureIndex()) - || addMufflerToMachineList(tTileEntity, getCasingTextureIndex()); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - ItemStack controllerSlot = getControllerSlot(); - if ((counter & 7) == 0 - && (controllerSlot == null || !(controllerSlot.getItem() instanceof GT_MetaGenerated_Tool) - || controllerSlot.getItemDamage() < 170 - || controllerSlot.getItemDamage() > 179)) { - stopMachine(ShutDownReasonRegistry.NO_TURBINE); - return CheckRecipeResultRegistry.NO_TURBINE_FOUND; - } - ArrayList tFluids = getStoredFluids(); - if (!tFluids.isEmpty()) { - - if (baseEff == 0 || optFlow == 0 - || counter >= 512 - || this.getBaseMetaTileEntity() - .hasWorkJustBeenEnabled() - || this.getBaseMetaTileEntity() - .hasInventoryBeenModified()) { - counter = 0; - baseEff = GT_Utility.safeInt( - (long) ((5F - + ((GT_MetaGenerated_Tool) controllerSlot.getItem()).getToolCombatDamage(controllerSlot)) - * 1000F)); - optFlow = GT_Utility.safeInt( - (long) Math.max( - Float.MIN_NORMAL, - ((GT_MetaGenerated_Tool) controllerSlot.getItem()).getToolStats(controllerSlot) - .getSpeedMultiplier() * GT_MetaGenerated_Tool.getPrimaryMaterial(controllerSlot).mToolSpeed - * 50)); - - overflowMultiplier = getOverflowMultiplier(controllerSlot); - - flowMultipliers[0] = GT_MetaGenerated_Tool.getPrimaryMaterial(controllerSlot).mSteamMultiplier; - flowMultipliers[1] = GT_MetaGenerated_Tool.getPrimaryMaterial(controllerSlot).mGasMultiplier; - flowMultipliers[2] = GT_MetaGenerated_Tool.getPrimaryMaterial(controllerSlot).mPlasmaMultiplier; - - if (optFlow <= 0 || baseEff <= 0) { - stopMachine(ShutDownReasonRegistry.NONE); // in case the turbine got removed - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - } else { - counter++; - } - } - - int newPower = fluidIntoPower(tFluids, optFlow, baseEff, overflowMultiplier, flowMultipliers); // How much the - // turbine should - // be producing - // with this flow - int difference = newPower - this.mEUt; // difference between current output and new output - - // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the difference in - // power level (per tick) - // This is how much the turbine can actually change during this tick - int maxChangeAllowed = Math.max(10, GT_Utility.safeInt((long) Math.abs(difference) / 100)); - - if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed change - int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative. - this.mEUt += change; // Apply the change - } else this.mEUt = newPower; - - if (this.mEUt <= 0) { - // stopMachine(); - this.mEUt = 0; - this.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } else { - this.mMaxProgresstime = 1; - this.mEfficiencyIncrease = 10; - // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. - return CheckRecipeResultRegistry.GENERATING; - } - } - - abstract int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowMultiplier, - float[] flowMultipliers); - - abstract float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier); - - // Gets the maximum output that the turbine currently can handle. Going above this will cause the turbine to explode - public long getMaximumOutput() { - long aTotal = 0; - for (GT_MetaTileEntity_Hatch_Dynamo aDynamo : filterValidMTEs(mDynamoHatches)) { - long aVoltage = aDynamo.maxEUOutput(); - aTotal = aDynamo.maxAmperesOut() * aVoltage; - } - return aTotal; - } - - public int getOverflowMultiplier(ItemStack aStack) { - int aOverflowMultiplier = 0; - int toolQualityLevel = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolQuality; - if (toolQualityLevel >= 6) { - aOverflowMultiplier = 3; - } else if (toolQualityLevel >= 3) { - aOverflowMultiplier = 2; - } else { - aOverflowMultiplier = 1; - } - return aOverflowMultiplier; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 1; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) { - return 0; - } - if (aStack.getItem() instanceof GT_MetaGenerated_Tool_01) { - return 10000; - } - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return true; - } - - @Override - public String[] getInfoData() { - int mPollutionReduction = 0; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); - } - - String tRunning = mMaxProgresstime > 0 - ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.running.true") - + EnumChatFormatting.RESET - : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.running.false") - + EnumChatFormatting.RESET; - String tMaintainance = getIdealStatus() == getRepairStatus() - ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") - + EnumChatFormatting.RESET - : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") - + EnumChatFormatting.RESET; - int tDura = 0; - - if (mInventory[1] != null && mInventory[1].getItem() instanceof GT_MetaGenerated_Tool_01) { - tDura = GT_Utility.safeInt( - (long) (100.0f / GT_MetaGenerated_Tool.getToolMaxDamage(mInventory[1]) - * (GT_MetaGenerated_Tool.getToolDamage(mInventory[1])) + 1)); - } - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Dynamo tHatch : filterValidMTEs(mDynamoHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - String[] ret = new String[] { - // 8 Lines available for information panels - tRunning + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(((long) mEUt * mEfficiency) / 10000) - + EnumChatFormatting.RESET - + " EU/t", /* 1 */ - tMaintainance, /* 2 */ - StatCollector.translateToLocal("GT5U.turbine.efficiency") + ": " - + EnumChatFormatting.YELLOW - + (mEfficiency / 100F) - + EnumChatFormatting.RESET - + "%", /* 2 */ - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + /* 3 */ EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.turbine.flow") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(GT_Utility.safeInt((long) realOptFlow)) - + EnumChatFormatting.RESET - + " L/t" - + /* 4 */ EnumChatFormatting.YELLOW - + " (" - + (looseFit ? StatCollector.translateToLocal("GT5U.turbine.loose") - : StatCollector.translateToLocal("GT5U.turbine.tight")) - + ")", /* 5 */ - StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " - + EnumChatFormatting.GOLD - + GT_Utility.formatNumbers(storedFluid) - + EnumChatFormatting.RESET - + "L", /* 6 */ - StatCollector.translateToLocal( - "GT5U.turbine.dmg") + ": " + EnumChatFormatting.RED + tDura + EnumChatFormatting.RESET + "%", /* 7 */ - StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %" /* 8 */ - }; - if (!this.getClass() - .getName() - .contains("Steam")) - ret[4] = StatCollector.translateToLocal("GT5U.turbine.flow") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.safeInt((long) realOptFlow) - + EnumChatFormatting.RESET - + " L/t"; - return ret; - } - - public boolean hasTurbine() { - return getBaseMetaTileEntity() != null && getBaseMetaTileEntity().isClientSide() ? mHasTurbine - : this.getMaxEfficiency(mInventory[1]) > 0; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 2, 1); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 2, 1, elementBudget, env, false, true); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Gas.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Gas.java deleted file mode 100644 index 71dc1c4d15..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Gas.java +++ /dev/null @@ -1,220 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW5; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_ACTIVE5; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_EMPTY5; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_LargeTurbine_Gas extends GT_MetaTileEntity_LargeTurbine { - - public GT_MetaTileEntity_LargeTurbine_Gas(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_LargeTurbine_Gas(String aName) { - super(aName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - return new ITexture[] { MACHINE_CASINGS[1][colorIndex + 1], - aFacing == side ? (aActive ? TextureFactory.builder() - .addIcon(LARGETURBINE_NEW_ACTIVE5) - .build() - : hasTurbine() ? TextureFactory.builder() - .addIcon(LARGETURBINE_NEW5) - .build() - : TextureFactory.builder() - .addIcon(LARGETURBINE_NEW_EMPTY5) - .build()) - : casingTexturePages[0][58] }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Gas Turbine") - .addInfo("Controller block for the Large Gas Turbine") - .addInfo("Needs a Turbine, place inside controller") - // .addInfo("The excess fuel that gets consumed will be voided!") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 4, true) - .addController("Front center") - .addCasingInfoRange("Stainless Steel Turbine Casing", 8, 30, false) - .addDynamoHatch("Back center", 1) - .addMaintenanceHatch("Side centered", 2) - .addMufflerHatch("Side centered", 2) - .addInputHatch("Gas Fuel, Side centered", 2) - .addOtherStructurePart("Air", "3x3 area in front of controller") - .toolTipFinisher("Gregtech"); - return tt; - } - - public int getFuelValue(FluidStack aLiquid) { - if (aLiquid == null) return 0; - GT_Recipe tFuel = RecipeMaps.gasTurbineFuels.getBackend() - .findFuel(aLiquid); - if (tFuel != null) return tFuel.mSpecialValue; - return 0; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LargeTurbine_Gas(mName); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.gasTurbineFuels; - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - @Override - public byte getCasingMeta() { - return 10; - } - - @Override - public int getCasingTextureIndex() { - return 58; - } - - @Override - public boolean isNewStyleRendering() { - return true; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return GT_Mod.gregtechproxy.mPollutionLargeGasTurbinePerSecond; - } - - @Override - int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowMultiplier, - float[] flowMultipliers) { - if (aFluids.size() >= 1) { - int tEU = 0; - int actualOptimalFlow = 0; - - FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. - // Doesn't matter which one. Ignore the rest! - int fuelValue = getFuelValue(firstFuelType); - - if (aOptFlow < fuelValue) { - // turbine too weak and/or fuel too powerful - // at least consume 1L - this.realOptFlow = 1; - // wastes the extra fuel and generate aOptFlow directly - depleteInput(new FluidStack(firstFuelType, 1)); - this.storedFluid += 1; - return GT_Utility.safeInt((long) aOptFlow * (long) aBaseEff / 10000L); - } - - actualOptimalFlow = GT_Utility.safeInt((long) (aOptFlow * flowMultipliers[1] / fuelValue)); - this.realOptFlow = actualOptimalFlow; - - // Allowed to use up to 450% optimal flow rate, depending on the value of overflowMultiplier. - // This value is chosen because the highest EU/t possible depends on the overflowMultiplier, and the formula - // used - // makes it so the flow rate for that max, per value of overflowMultiplier, is (percentage of optimal flow - // rate): - // - 150% if it is 1 - // - 300% if it is 2 - // - 450% if it is 3 - // Variable required outside of loop for multi-hatch scenarios. - int remainingFlow = GT_Utility.safeInt((long) (actualOptimalFlow * (1.5f * overflowMultiplier))); - int flow = 0; - int totalFlow = 0; - - storedFluid = 0; - for (FluidStack aFluid : aFluids) { - if (aFluid.isFluidEqual(firstFuelType)) { - flow = Math.min(aFluid.amount, remainingFlow); // try to use up to the max flow defined just above - depleteInput(new FluidStack(aFluid, flow)); // deplete that amount - this.storedFluid += aFluid.amount; - remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches - totalFlow += flow; // track total input used - } - } - if (totalFlow <= 0) return 0; - tEU = GT_Utility.safeInt((long) totalFlow * fuelValue); - - if (totalFlow != actualOptimalFlow) { - float efficiency = getOverflowEfficiency(totalFlow, actualOptimalFlow, overflowMultiplier); - tEU *= efficiency; - } - tEU = GT_Utility.safeInt((long) tEU * (long) aBaseEff / 10000L); - - // EU/t output cap to properly tier the LGT against the Advanced LGT, will be implemented in a future dev - // update - /* - * if (tEU > 8192) { tEU = 8192; } - */ - - // If next output is above the maximum the dynamo can handle, set it to the maximum instead of exploding the - // turbine - // Raising the maximum allowed flow rate to account for the efficiency changes beyond the optimal flow - // When the max fuel consumption rate was increased, turbines could explode on world load - if (tEU > getMaximumOutput()) { - tEU = GT_Utility.safeInt(getMaximumOutput()); - } - return tEU; - } - return 0; - } - - @Override - float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier) { - // overflowMultiplier changes how quickly the turbine loses efficiency after flow goes beyond the optimal value - // At the default value of 1, any flow will generate less EU/t than optimal flow, regardless of the amount of - // fuel used - // The bigger this number is, the slower efficiency loss happens as flow moves beyond the optimal value - // Gases are the second most efficient in this regard, with plasma being the most efficient - float efficiency = 0; - - if (totalFlow > actualOptimalFlow) { - efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow)) - / ((float) actualOptimalFlow * ((overflowMultiplier * 3) - 1)); - } else { - efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); - } - - return efficiency; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_GasAdvanced.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_GasAdvanced.java deleted file mode 100644 index 4926655476..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_GasAdvanced.java +++ /dev/null @@ -1,219 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW5; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_ACTIVE5; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_EMPTY5; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_LargeTurbine_GasAdvanced extends GT_MetaTileEntity_LargeTurbine { - - public GT_MetaTileEntity_LargeTurbine_GasAdvanced(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_LargeTurbine_GasAdvanced(String aName) { - super(aName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - return new ITexture[] { MACHINE_CASINGS[1][colorIndex + 1], - aFacing == side ? (aActive ? TextureFactory.builder() - .addIcon(LARGETURBINE_NEW_ACTIVE5) - .build() - : hasTurbine() ? TextureFactory.builder() - .addIcon(LARGETURBINE_NEW5) - .build() - : TextureFactory.builder() - .addIcon(LARGETURBINE_NEW_EMPTY5) - .build()) - : casingTexturePages[1][57] }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Gas Turbine") - .addInfo("Warning: This is an experimental multiblock, subject to changes ") - .addInfo("Controller block for the Large Advanced Gas Turbine") - .addInfo("Needs a Turbine, place inside controller") - .addInfo("Only accepts gases above 800k EU/bucket") - .addInfo("Has no maximum EU/t output, only depends on the Dynamo Hatch") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 4, true) - .addController("Front center") - .addCasingInfoRange("Advanced Gas Turbine Casing", 8, 30, false) - .addDynamoHatch("Back center", 1) - .addMaintenanceHatch("Side centered", 2) - .addMufflerHatch("Side centered", 2) - .addInputHatch("Gas Fuel, Side centered", 2) - .toolTipFinisher("Gregtech"); - return tt; - } - - public int getFuelValue(FluidStack aLiquid) { - if (aLiquid == null) return 0; - GT_Recipe tFuel = RecipeMaps.gasTurbineFuels.getBackend() - .findFuel(aLiquid); - if (tFuel != null) return tFuel.mSpecialValue; - return 0; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LargeTurbine_GasAdvanced(mName); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.gasTurbineFuels; - } - - @Override - public int getRecipeCatalystPriority() { - return -2; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings8; - } - - @Override - public byte getCasingMeta() { - return 9; - } - - @Override - public int getCasingTextureIndex() { - return 185; - } - - @Override - public boolean isNewStyleRendering() { - return true; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return GT_Mod.gregtechproxy.mPollutionLargeGasTurbinePerSecond; - } - - @Override - int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowMultiplier, - float[] flowMultipliers) { - if (aFluids.size() >= 1) { - int tEU = 0; - int actualOptimalFlow = 0; - - FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. - // Doesn't matter which one. Ignore the rest! - int fuelValue = getFuelValue(firstFuelType); - - if (fuelValue < 100) { - return 0; - } - - if (aOptFlow < fuelValue) { - // turbine too weak and/or fuel too powerful - // at least consume 1L - this.realOptFlow = 1; - // wastes the extra fuel and generate aOptFlow directly - depleteInput(new FluidStack(firstFuelType, 1)); - this.storedFluid += 1; - return GT_Utility.safeInt((long) aOptFlow * (long) aBaseEff / 10000L); - } - - actualOptimalFlow = GT_Utility.safeInt((long) (aOptFlow * flowMultipliers[1] / fuelValue)); - this.realOptFlow = actualOptimalFlow; - - // Allowed to use up to 450% optimal flow rate, depending on the value of overflowMultiplier. - // This value is chosen because the highest EU/t possible depends on the overflowMultiplier, and the formula - // used - // makes it so the flow rate for that max, per value of overflowMultiplier, is (percentage of optimal flow - // rate): - // - 150% if it is 1 - // - 300% if it is 2 - // - 450% if it is 3 - // Variable required outside of loop for multi-hatch scenarios. - int remainingFlow = GT_Utility.safeInt((long) (actualOptimalFlow * (1.5f * overflowMultiplier))); - int flow = 0; - int totalFlow = 0; - - storedFluid = 0; - for (FluidStack aFluid : aFluids) { - if (aFluid.isFluidEqual(firstFuelType)) { - flow = Math.min(aFluid.amount, remainingFlow); // try to use up to the max flow defined just above - depleteInput(new FluidStack(aFluid, flow)); // deplete that amount - this.storedFluid += aFluid.amount; - remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches - totalFlow += flow; // track total input used - } - } - if (totalFlow <= 0) return 0; - tEU = GT_Utility.safeInt((long) totalFlow * fuelValue); - - if (totalFlow != actualOptimalFlow) { - float efficiency = getOverflowEfficiency(totalFlow, actualOptimalFlow, overflowMultiplier); - tEU *= efficiency; - } - tEU = GT_Utility.safeInt((long) tEU * (long) aBaseEff / 10000L); - - // If next output is above the maximum the dynamo can handle, set it to the maximum instead of exploding the - // turbine - // Raising the maximum allowed flow rate to account for the efficiency changes beyond the optimal flow - // When the max fuel consumption rate was increased, turbines could explode on world load - if (tEU > getMaximumOutput()) { - tEU = GT_Utility.safeInt(getMaximumOutput()); - } - return tEU; - } - return 0; - } - - @Override - float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier) { - // overflowMultiplier changes how quickly the turbine loses efficiency after flow goes beyond the optimal value - // At the default value of 1, any flow will generate less EU/t than optimal flow, regardless of the amount of - // fuel used - // The bigger this number is, the slower efficiency loss happens as flow moves beyond the optimal value - // Gases are the second most efficient in this regard, with plasma being the most efficient - float efficiency = 0; - - if (totalFlow > actualOptimalFlow) { - efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow)) - / ((float) actualOptimalFlow * ((overflowMultiplier * 3) - 1)); - } else { - efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); - } - - return efficiency; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_HPSteam.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_HPSteam.java deleted file mode 100644 index d61e75eac3..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_HPSteam.java +++ /dev/null @@ -1,232 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW5; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_ACTIVE5; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_EMPTY5; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; -import static gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine_Steam.calculateLooseFlow; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_LargeTurbine_HPSteam extends GT_MetaTileEntity_LargeTurbine { - - public boolean achievement = false; - private boolean looseFit = false; - - public GT_MetaTileEntity_LargeTurbine_HPSteam(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_LargeTurbine_HPSteam(String aName) { - super(aName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - return new ITexture[] { MACHINE_CASINGS[1][colorIndex + 1], - aFacing == side ? (aActive ? TextureFactory.builder() - .addIcon(LARGETURBINE_NEW_ACTIVE5) - .build() - : hasTurbine() ? TextureFactory.builder() - .addIcon(LARGETURBINE_NEW5) - .build() - : TextureFactory.builder() - .addIcon(LARGETURBINE_NEW_EMPTY5) - .build()) - : casingTexturePages[0][59] }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Steam Turbine") - .addInfo("Controller block for the Large High Pressure Steam Turbine") - .addInfo("Needs a Turbine, place inside controller") - .addInfo("Outputs Steam as well as producing power") - .addInfo("Power output depends on turbine and fitting") - .addInfo("Use screwdriver to adjust fitting of turbine") - .addSeparator() - .beginStructureBlock(3, 3, 4, true) - .addController("Front center") - .addCasingInfoRange("Titanium Turbine Casing", 8, 31, false) - .addDynamoHatch("Back center", 1) - .addMaintenanceHatch("Side centered", 2) - .addInputHatch("Superheated Steam, Side centered", 2) - .addOutputHatch("Steam, Side centered", 2) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LargeTurbine_HPSteam(mName); - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - @Override - public byte getCasingMeta() { - return 11; - } - - @Override - public int getCasingTextureIndex() { - return 59; - } - - @Override - public boolean isNewStyleRendering() { - return true; - } - - @Override - int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowEfficiency, - float[] flowMultipliers) { - if (looseFit) { - float[] calculatedFlow = calculateLooseFlow(aOptFlow, aBaseEff); - aOptFlow = GT_Utility.safeInt((long) calculatedFlow[0]); - aBaseEff = GT_Utility.safeInt((long) calculatedFlow[1]); - } - int tEU = 0; - int totalFlow = 0; // Byproducts are based on actual flow - int flow = 0; - - // Allowed to use up to 300% optimal flow rate, depending on the value of overflowMultiplier. - // This value is chosen because the highest EU/t possible depends on the overflowMultiplier, and the formula - // used - // makes it so the flow rate for that max, per value of overflowMultiplier, is (percentage of optimal flow - // rate): - // - 200% if it is 1 - // - 250% if it is 2 - // - 300% if it is 3 - // Variable required outside of loop for multi-hatch scenarios. - this.realOptFlow = aOptFlow * flowMultipliers[0]; - int remainingFlow = GT_Utility.safeInt((long) (realOptFlow * (0.5f * overflowMultiplier + 1.5))); - - storedFluid = 0; - for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { - final FluidStack aFluidStack = aFluids.get(i); - if (GT_ModHandler.isSuperHeatedSteam(aFluidStack)) { - flow = Math.min(aFluidStack.amount, remainingFlow); // try to use up to the max flow defined just above - depleteInput(new FluidStack(aFluidStack, flow)); // deplete that amount - this.storedFluid += aFluidStack.amount; - remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches - totalFlow += flow; // track total input used - if (!achievement) { - try { - GT_Mod.achievements.issueAchievement( - this.getBaseMetaTileEntity() - .getWorld() - .getPlayerEntityByName( - this.getBaseMetaTileEntity() - .getOwnerName()), - "efficientsteam"); - } catch (Exception ignored) {} - achievement = true; - } - } else if (GT_ModHandler.isAnySteam(aFluidStack)) { - depleteInput(new FluidStack(aFluidStack, aFluidStack.amount)); - } - } - if (totalFlow <= 0) return 0; - tEU = totalFlow; - addOutput(GT_ModHandler.getSteam(totalFlow)); - if (totalFlow == (GT_Utility.safeInt((long) realOptFlow))) { - tEU = GT_Utility.safeInt((long) tEU * (long) aBaseEff / 10000L); - } else { - float efficiency = getOverflowEfficiency( - totalFlow, - (GT_Utility.safeInt((long) realOptFlow)), - overflowMultiplier); - tEU *= efficiency; - tEU = Math.max(1, GT_Utility.safeInt((long) tEU * (long) aBaseEff / 10000L)); - } - - // If next output is above the maximum the dynamo can handle, set it to the maximum instead of exploding the - // turbine - // Raising the maximum allowed flow rate to account for the efficiency changes beyond the optimal flow rate can - // explode turbines on world load - if (tEU > getMaximumOutput()) { - tEU = GT_Utility.safeInt(getMaximumOutput()); - } - - return tEU; - } - - @Override - float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier) { - // overflowMultiplier changes how quickly the turbine loses efficiency after flow goes beyond the optimal value - // At the default value of 1, any flow will generate less EU/t than optimal flow, regardless of the amount of - // fuel used - // The bigger this number is, the slower efficiency loss happens as flow moves beyond the optimal value - // Superheated steam is the second least efficient out of all turbine fuels in this regard, with steam being the - // least efficient - float efficiency = 0; - - if (totalFlow > actualOptimalFlow) { - efficiency = 1.0f - - Math.abs((totalFlow - actualOptimalFlow)) / ((float) actualOptimalFlow * (overflowMultiplier + 2)); - } else { - efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); - } - - return efficiency; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getFrontFacing()) { - looseFit ^= true; - GT_Utility.sendChatToPlayer( - aPlayer, - looseFit ? GT_Utility.trans("500", "Fitting: Loose - More Flow") - : GT_Utility.trans("501", "Fitting: Tight - More Efficiency")); - } - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return (looseFit && XSTR_INSTANCE.nextInt(4) == 0) ? 0 : 1; - } - - @Override - public String[] getInfoData() { - super.looseFit = looseFit; - return super.getInfoData(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("turbineFitting", looseFit); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - looseFit = aNBT.getBoolean("turbineFitting"); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Plasma.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Plasma.java deleted file mode 100644 index 2ecc79cd3b..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Plasma.java +++ /dev/null @@ -1,391 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW5; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_ACTIVE5; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_EMPTY5; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.items.GT_MetaGenerated_Tool_01; - -public class GT_MetaTileEntity_LargeTurbine_Plasma extends GT_MetaTileEntity_LargeTurbine { - - public GT_MetaTileEntity_LargeTurbine_Plasma(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_LargeTurbine_Plasma(String aName) { - super(aName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - return new ITexture[] { MACHINE_CASINGS[1][colorIndex + 1], - aFacing == side ? (aActive ? TextureFactory.builder() - .addIcon(LARGETURBINE_NEW_ACTIVE5) - .build() - : hasTurbine() ? TextureFactory.builder() - .addIcon(LARGETURBINE_NEW5) - .build() - : TextureFactory.builder() - .addIcon(LARGETURBINE_NEW_EMPTY5) - .build()) - : casingTexturePages[0][60] }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Plasma Turbine") - .addInfo("Controller block for the Large Plasma Generator") - .addInfo("Needs a Turbine, place inside controller") - .addInfo("Use your Fusion Reactor to produce the Plasma") - .addSeparator() - .beginStructureBlock(3, 3, 4, true) - .addController("Front center") - .addCasingInfoRange("Tungstensteel Turbine Casing", 8, 31, false) - .addDynamoHatch("Back center", 1) - .addMaintenanceHatch("Side centered", 2) - .addInputHatch("Plasma Fluid, Side centered", 2) - .addOutputHatch("Molten Fluid, optional, Side centered", 2) - .toolTipFinisher("Gregtech"); - return tt; - } - - public int getFuelValue(FluidStack aLiquid) { - if (aLiquid == null) return 0; - GT_Recipe tFuel = RecipeMaps.plasmaFuels.getBackend() - .findFuel(aLiquid); - if (tFuel != null) return tFuel.mSpecialValue; - return 0; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LargeTurbine_Plasma(mName); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.plasmaFuels; - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - @Override - public byte getCasingMeta() { - return 12; - } - - @Override - public int getCasingTextureIndex() { - return 60; - } - - @Override - public boolean isNewStyleRendering() { - return true; - } - - @Override - int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowMultiplier, - float[] flowMultipliers) { - if (aFluids.size() >= 1) { - aOptFlow *= 800; // CHANGED THINGS HERE, check recipe runs once per 20 ticks - int tEU = 0; - - int actualOptimalFlow = 0; - - FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. - // Doesn't matter which one. Ignore the rest! - int fuelValue = getFuelValue(firstFuelType); - actualOptimalFlow = GT_Utility - .safeInt((long) Math.ceil((double) aOptFlow * flowMultipliers[2] / (double) fuelValue)); - this.realOptFlow = actualOptimalFlow; // For scanner info - - // Allowed to use up to 550% optimal flow rate, depending on the value of overflowMultiplier. - // This value is chosen because the highest EU/t possible depends on the overflowMultiplier, and the formula - // used - // makes it so the flow rate for that max, per value of overflowMultiplier, is (percentage of optimal flow - // rate): - // - 250% if it is 1 - // - 400% if it is 2 - // - 550% if it is 3 - // Variable required outside of loop for multi-hatch scenarios. - int remainingFlow = GT_Utility.safeInt((long) (actualOptimalFlow * (1.5f * overflowMultiplier + 1))); - int flow = 0; - int totalFlow = 0; - - storedFluid = 0; - for (FluidStack aFluid : aFluids) { - if (aFluid.isFluidEqual(firstFuelType)) { - flow = Math.min(aFluid.amount, remainingFlow); // try to use up to the max flow defined just above - depleteInput(new FluidStack(aFluid, flow)); // deplete that amount - this.storedFluid += aFluid.amount; - remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches - totalFlow += flow; // track total input used - } - } - String fn = FluidRegistry.getFluidName(firstFuelType); - String[] nameSegments = fn.split("\\.", 2); - if (nameSegments.length == 2) { - String outputName = nameSegments[1]; - FluidStack output = FluidRegistry.getFluidStack(outputName, totalFlow); - if (output == null) { - output = FluidRegistry.getFluidStack("molten." + outputName, totalFlow); - } - if (output != null) { - addOutput(output); - } - } - if (totalFlow <= 0) return 0; - tEU = GT_Utility.safeInt((long) ((fuelValue / 20D) * (double) totalFlow)); - - // GT_FML_LOGGER.info(totalFlow+" : "+fuelValue+" : "+aOptFlow+" : "+actualOptimalFlow+" : "+tEU); - - if (totalFlow != actualOptimalFlow) { - float efficiency = getOverflowEfficiency(totalFlow, actualOptimalFlow, overflowMultiplier); - tEU = (int) (tEU * efficiency); - } - tEU = GT_Utility.safeInt((long) (aBaseEff / 10000D * tEU)); - - // If next output is above the maximum the dynamo can handle, set it to the maximum instead of exploding the - // turbine - // Raising the maximum allowed flow rate to account for the efficiency changes beyond the optimal flow rate - // can explode turbines on world load - if (tEU > getMaximumOutput()) { - tEU = GT_Utility.safeInt(getMaximumOutput()); - } - - return tEU; - } - return 0; - } - - @Override - float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier) { - // overflowMultiplier changes how quickly the turbine loses efficiency after flow goes beyond the optimal value - // At the default value of 1, any flow will generate less EU/t than optimal flow, regardless of the amount of - // fuel used - // The bigger this number is, the slower efficiency loss happens as flow moves beyond the optimal value - // Plasmas are the most efficient out of all turbine fuels in this regard - float efficiency = 0; - - if (totalFlow > actualOptimalFlow) { - efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow)) - / ((float) actualOptimalFlow * ((overflowMultiplier * 3) + 1)); - } else { - efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); - } - - return efficiency; - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - ItemStack controllerSlot = getControllerSlot(); - if ((counter & 7) == 0 - && (controllerSlot == null || !(controllerSlot.getItem() instanceof GT_MetaGenerated_Tool) - || controllerSlot.getItemDamage() < 170 - || controllerSlot.getItemDamage() > 179)) { - stopMachine(ShutDownReasonRegistry.NO_TURBINE); - return CheckRecipeResultRegistry.NO_TURBINE_FOUND; - } - ArrayList tFluids = getStoredFluids(); - if (!tFluids.isEmpty()) { - if (baseEff == 0 || optFlow == 0 - || counter >= 512 - || this.getBaseMetaTileEntity() - .hasWorkJustBeenEnabled() - || this.getBaseMetaTileEntity() - .hasInventoryBeenModified()) { - counter = 0; - baseEff = GT_Utility.safeInt( - (long) ((5F - + ((GT_MetaGenerated_Tool) controllerSlot.getItem()).getToolCombatDamage(controllerSlot)) - * 1000F)); - optFlow = GT_Utility.safeInt( - (long) Math.max( - Float.MIN_NORMAL, - ((GT_MetaGenerated_Tool) controllerSlot.getItem()).getToolStats(controllerSlot) - .getSpeedMultiplier() * GT_MetaGenerated_Tool.getPrimaryMaterial(controllerSlot).mToolSpeed - * 50)); - overflowMultiplier = getOverflowMultiplier(controllerSlot); - - flowMultipliers[0] = GT_MetaGenerated_Tool.getPrimaryMaterial(controllerSlot).mSteamMultiplier; - flowMultipliers[1] = GT_MetaGenerated_Tool.getPrimaryMaterial(controllerSlot).mGasMultiplier; - flowMultipliers[2] = GT_MetaGenerated_Tool.getPrimaryMaterial(controllerSlot).mPlasmaMultiplier; - - if (optFlow <= 0 || baseEff <= 0) { - stopMachine(ShutDownReasonRegistry.NONE); // in case the turbine got removed - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - } else { - counter++; - } - } - - int newPower = fluidIntoPower(tFluids, optFlow, baseEff, overflowMultiplier, flowMultipliers); // How much the - // turbine should - // be producing - // with this flow - - int difference = newPower - this.mEUt; // difference between current output and new output - - // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the difference in - // power level (per tick) - // This is how much the turbine can actually change during this tick - int maxChangeAllowed = Math.max(200, GT_Utility.safeInt((long) Math.abs(difference) / 5)); - - if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed change - int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative. - this.mEUt += change; // Apply the change - } else this.mEUt = newPower; - - if (this.mEUt <= 0) { - // stopMachine(); - this.mEUt = 0; - this.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } else { - this.mMaxProgresstime = 20; - this.mEfficiencyIncrease = 200; - // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. - - return CheckRecipeResultRegistry.GENERATING; - } - } - - @Override - public String[] getInfoData() { - int mPollutionReduction = 0; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); - } - - String tRunning = mMaxProgresstime > 0 - ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.running.true") - + EnumChatFormatting.RESET - : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.running.false") - + EnumChatFormatting.RESET; - String tMaintainance = getIdealStatus() == getRepairStatus() - ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") - + EnumChatFormatting.RESET - : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") - + EnumChatFormatting.RESET; - int tDura = 0; - - if (mInventory[1] != null && mInventory[1].getItem() instanceof GT_MetaGenerated_Tool_01) { - tDura = GT_Utility.safeInt( - (long) (100.0f / GT_MetaGenerated_Tool.getToolMaxDamage(mInventory[1]) - * (GT_MetaGenerated_Tool.getToolDamage(mInventory[1])) + 1)); - } - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Dynamo tHatch : filterValidMTEs(mDynamoHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - String[] ret = new String[] { - // 8 Lines available for information panels - tRunning + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(((long) mEUt * mEfficiency) / 10000) - + EnumChatFormatting.RESET - + " EU/t", /* 1 */ - tMaintainance, /* 2 */ - StatCollector.translateToLocal("GT5U.turbine.efficiency") + ": " - + EnumChatFormatting.YELLOW - + (mEfficiency / 100F) - + EnumChatFormatting.RESET - + "%", /* 2 */ - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + /* 3 */ EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.turbine.flow") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(GT_Utility.safeInt((long) realOptFlow)) - + EnumChatFormatting.RESET - + " L/s" - + /* 4 */ EnumChatFormatting.YELLOW - + " (" - + (looseFit ? StatCollector.translateToLocal("GT5U.turbine.loose") - : StatCollector.translateToLocal("GT5U.turbine.tight")) - + ")", /* 5 */ - StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " - + EnumChatFormatting.GOLD - + GT_Utility.formatNumbers(storedFluid) - + EnumChatFormatting.RESET - + "L", /* 6 */ - StatCollector.translateToLocal( - "GT5U.turbine.dmg") + ": " + EnumChatFormatting.RED + tDura + EnumChatFormatting.RESET + "%", /* 7 */ - StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %" /* 8 */ - }; - if (!this.getClass() - .getName() - .contains("Steam")) - ret[4] = StatCollector.translateToLocal("GT5U.turbine.flow") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.safeInt((long) realOptFlow) - + EnumChatFormatting.RESET - + " L/s"; - return ret; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java deleted file mode 100644 index 849d0af462..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeTurbine_Steam.java +++ /dev/null @@ -1,273 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.GT_Values.STEAM_PER_WATER; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW5; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_ACTIVE5; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_EMPTY5; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_LargeTurbine_Steam extends GT_MetaTileEntity_LargeTurbine { - - private int excessWater; - private boolean achievement = false; - private boolean looseFit = false; - - public GT_MetaTileEntity_LargeTurbine_Steam(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_LargeTurbine_Steam(String aName) { - super(aName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - return new ITexture[] { MACHINE_CASINGS[1][colorIndex + 1], - aFacing == side ? (aActive ? TextureFactory.builder() - .addIcon(LARGETURBINE_NEW_ACTIVE5) - .build() - : hasTurbine() ? TextureFactory.builder() - .addIcon(LARGETURBINE_NEW5) - .build() - : TextureFactory.builder() - .addIcon(LARGETURBINE_NEW_EMPTY5) - .build()) - : casingTexturePages[0][57] }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Steam Turbine") - .addInfo("Controller block for the Large Steam Turbine") - .addInfo("Needs a Turbine, place inside controller") - .addInfo("Outputs Distilled Water as well as producing power") - .addInfo("Power output depends on turbine and fitting") - .addInfo("Use screwdriver to adjust fitting of turbine") - .addSeparator() - .beginStructureBlock(3, 3, 4, true) - .addController("Front center") - .addCasingInfoRange("Turbine Casing", 8, 31, false) - .addDynamoHatch("Back center", 1) - .addMaintenanceHatch("Side centered", 2) - .addInputHatch("Steam, Side centered", 2) - .addOutputHatch("Distilled Water, Side centered", 2) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LargeTurbine_Steam(mName); - } - - @Override - public Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - @Override - public byte getCasingMeta() { - return 9; - } - - @Override - public int getCasingTextureIndex() { - return 16; - } - - @Override - public boolean isNewStyleRendering() { - return true; - } - - private int condenseSteam(int steam) { - excessWater += steam; - int water = excessWater / STEAM_PER_WATER; - excessWater %= STEAM_PER_WATER; - return water; - } - - @Override - int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowEfficiency, - float[] flowMultipliers) { - if (looseFit) { - float[] calculatedFlow = calculateLooseFlow(aOptFlow, aBaseEff); - aOptFlow = GT_Utility.safeInt((long) calculatedFlow[0]); - aBaseEff = GT_Utility.safeInt((long) calculatedFlow[1]); - } - int tEU = 0; - int totalFlow = 0; // Byproducts are based on actual flow - int flow = 0; - - // Allowed to use up to 250% optimal flow rate, depending on the value of overflowMultiplier. - // This value is chosen because the highest EU/t possible depends on the overflowMultiplier, and the formula - // used - // makes it so the flow rate for that max, per value of overflowMultiplier, is (percentage of optimal flow - // rate): - // - 150% if it is 1 - // - 200% if it is 2 - // - 250% if it is 3 - // Variable required outside of loop for multi-hatch scenarios. - this.realOptFlow = aOptFlow * flowMultipliers[0]; - int remainingFlow = GT_Utility.safeInt((long) (realOptFlow * (0.5f * overflowMultiplier + 1))); - - storedFluid = 0; - for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { // loop through each hatch; extract inputs and - // track totals. - final FluidStack aFluidStack = aFluids.get(i); - if (GT_ModHandler.isAnySteam(aFluidStack)) { - flow = Math.min(aFluidStack.amount, remainingFlow); // try to use up to the max flow defined just above - depleteInput(new FluidStack(aFluidStack, flow)); // deplete that amount - this.storedFluid += aFluidStack.amount; - remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches - totalFlow += flow; // track total input used - if (!achievement) { - GT_Mod.achievements.issueAchievement( - this.getBaseMetaTileEntity() - .getWorld() - .getPlayerEntityByName( - this.getBaseMetaTileEntity() - .getOwnerName()), - "muchsteam"); - achievement = true; - } - } else if (GT_ModHandler.isSuperHeatedSteam(aFluidStack)) { - depleteInput(new FluidStack(aFluidStack, aFluidStack.amount)); - } - } - if (totalFlow <= 0) return 0; - tEU = totalFlow; - int waterToOutput = condenseSteam(totalFlow); - addOutput(GT_ModHandler.getDistilledWater(waterToOutput)); - if (totalFlow == (GT_Utility.safeInt((long) realOptFlow))) { - tEU = GT_Utility.safeInt((long) tEU * (long) aBaseEff / 20000L); - } else { - float efficiency = getOverflowEfficiency( - totalFlow, - (GT_Utility.safeInt((long) realOptFlow)), - overflowMultiplier); - tEU *= efficiency; - tEU = Math.max(1, GT_Utility.safeInt((long) tEU * (long) aBaseEff / 20000L)); - } - - // If next output is above the maximum the dynamo can handle, set it to the maximum instead of exploding the - // turbine - // Raising the maximum allowed flow rate to account for the efficiency changes beyond the optimal flow rate can - // explode turbines on world load - if (tEU > getMaximumOutput()) { - tEU = GT_Utility.safeInt(getMaximumOutput()); - } - - return tEU; - } - - @Override - float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier) { - // overflowMultiplier changes how quickly the turbine loses efficiency after flow goes beyond the optimal value - // At the default value of 1, any flow will generate less EU/t than optimal flow, regardless of the amount of - // fuel used - // The bigger this number is, the slower efficiency loss happens as flow moves beyond the optimal value - // Steam is the least efficient out of all turbine fuels in this regard - float efficiency = 0; - - if (totalFlow > actualOptimalFlow) { - efficiency = 1.0f - - Math.abs((totalFlow - actualOptimalFlow)) / ((float) actualOptimalFlow * (overflowMultiplier + 1)); - } else { - efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); - } - - return efficiency; - } - - public static float[] calculateLooseFlow(float aOptFlow, float aBaseEff) { - aOptFlow *= 4f; - if (aBaseEff >= 26000f) { - aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 8000f) / 10000f) * 20f); - aBaseEff = aBaseEff * 0.6f; - } else if (aBaseEff > 22000f) { - aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 7000f) / 10000f) * 20f); - aBaseEff = aBaseEff * 0.65f; - } else if (aBaseEff > 18000f) { - aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 6000f) / 10000f) * 20f); - aBaseEff = aBaseEff * 0.70f; - } else if (aBaseEff > 14000f) { - aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 5000f) / 10000f) * 20f); - aBaseEff = aBaseEff * 0.75f; - } else if (aBaseEff > 10000f) { - aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 4000f) / 10000f) * 20f); - aBaseEff = aBaseEff * 0.8f; - } else if (aBaseEff > 6000f) { - aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 3000f) / 10000f) * 20f); - aBaseEff = aBaseEff * 0.85f; - } else { - aBaseEff = aBaseEff * 0.9f; - } - - if (aBaseEff % 100 != 0) { - aBaseEff -= aBaseEff % 100; - } - - float[] looseFlow = new float[2]; - looseFlow[0] = aOptFlow; - looseFlow[1] = aBaseEff; - return looseFlow; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getFrontFacing()) { - looseFit ^= true; - GT_Utility.sendChatToPlayer( - aPlayer, - looseFit ? GT_Utility.trans("500", "Fitting: Loose - More Flow") - : GT_Utility.trans("501", "Fitting: Tight - More Efficiency")); - } - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return (looseFit && XSTR_INSTANCE.nextInt(4) == 0) ? 0 : 1; - } - - @Override - public String[] getInfoData() { - super.looseFit = looseFit; - return super.getInfoData(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("turbineFitting", looseFit); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - looseFit = aNBT.getBoolean("turbineFitting"); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiAutoclave.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiAutoclave.java deleted file mode 100644 index fdb34b6d25..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiAutoclave.java +++ /dev/null @@ -1,425 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorVolence; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_AUTOCLAVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_AUTOCLAVE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_AUTOCLAVE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_AUTOCLAVE_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.text.DecimalFormat; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.Materials; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Casings10; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_MultiAutoclave extends - GT_MetaTileEntity_ExtendedPowerMultiBlockBase implements ISurvivalConstructable { - - public GT_MetaTileEntity_MultiAutoclave(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_MultiAutoclave(String aName) { - super(aName); - } - - private HeatingCoilLevel heatLevel; - - private static final String STRUCTURE_PIECE_MAIN = "main"; - - protected int itemPipeTier = 0; - protected int fluidPipeTier = 0; - - private static Integer getItemPipeTierFromMeta(Block block, Integer metaID) { - if (block != GregTech_API.sBlockCasings11) return -1; - if (metaID < 0 || metaID > 7) return -1; - return metaID + 1; - } - - private void setItemPipeTier(int tier) { - itemPipeTier = tier; - } - - private int getItemPipeTier() { - return itemPipeTier; - } - - private static Integer getFluidTierFromMeta(Block block, Integer metaID) { - if (block != GregTech_API.sBlockCasings2) return -1; - if (metaID < 12 || metaID > 15) return -1; - return metaID - 11; - } - - private void setFluidPipeTier(int tier) { - fluidPipeTier = tier; - } - - private int getFluidPipeTier() { - return fluidPipeTier; - } - - public HeatingCoilLevel getCoilLevel() { - return this.heatLevel; - } - - public void setCoilLevel(HeatingCoilLevel aCoilLevel) { - this.heatLevel = aCoilLevel; - } - - public Integer getCoilTier() { - return (int) this.getCoilLevel() - .getTier() + 1; - } - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { - { " AAA ", " AFA ", " AFA ", " AFA ", " AFA ", " AFA ", " AFA ", " AFA ", - " AAA " }, - { " ABBBA ", " A A ", " A A ", " A A ", " A A ", " A A ", " A A ", " A A ", - " ABBBA ", }, - { "ABBBBBA", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", - "ABBBBBA", }, - { "ABBBBBA", "ACDEDCA", "ACDEDCA", "ACDEDCA", "ACDEDCA", "ACDEDCA", "ACDEDCA", "ACDEDCA", - "ABBBBBA", }, - { "ABBBBBA", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", - "ABBBBBA", }, - { "AABBBAA", " A A ", " A A ", " A A ", " A A ", " A A ", " A A ", " A A ", - "AABBBAA", }, - { "A A~A A", " AAA ", " AAA ", " AAA ", " AAA ", " AAA ", " AAA ", " AAA ", - "A AAA A" } })) - .addElement( - 'A', - buildHatchAdder(GT_MetaTileEntity_MultiAutoclave.class) - .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Muffler, Energy) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(3)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_MultiAutoclave::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings10, 3)))) - .addElement('B', Glasses.chainAllGlasses()) // Steel Casings - .addElement('C', ofFrame(Materials.Polytetrafluoroethylene)) // PTFE Frame - .addElement( - 'D', - ofBlocksTiered( - GT_MetaTileEntity_MultiAutoclave::getFluidTierFromMeta, - ImmutableList.of( - Pair.of(GregTech_API.sBlockCasings2, 12), - Pair.of(GregTech_API.sBlockCasings2, 13), - Pair.of(GregTech_API.sBlockCasings2, 14), - Pair.of(GregTech_API.sBlockCasings2, 15)), - -2, - GT_MetaTileEntity_MultiAutoclave::setFluidPipeTier, - GT_MetaTileEntity_MultiAutoclave::getFluidPipeTier)) - .addElement( - 'E', - ofBlocksTiered( - GT_MetaTileEntity_MultiAutoclave::getItemPipeTierFromMeta, - ImmutableList.of( - Pair.of(GregTech_API.sBlockCasings11, 0), - Pair.of(GregTech_API.sBlockCasings11, 1), - Pair.of(GregTech_API.sBlockCasings11, 2), - Pair.of(GregTech_API.sBlockCasings11, 3), - Pair.of(GregTech_API.sBlockCasings11, 4), - Pair.of(GregTech_API.sBlockCasings11, 5), - Pair.of(GregTech_API.sBlockCasings11, 6), - Pair.of(GregTech_API.sBlockCasings11, 7)), - -2, - GT_MetaTileEntity_MultiAutoclave::setItemPipeTier, - GT_MetaTileEntity_MultiAutoclave::getItemPipeTier)) - .addElement( - 'F', - withChannel( - "coil", - ofCoil(GT_MetaTileEntity_MultiAutoclave::setCoilLevel, GT_MetaTileEntity_MultiAutoclave::getCoilLevel))) - .build(); - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Autoclave") - .addInfo("Controller Block for the Industrial Autoclave.") - .addInfo("Gains 12 parallels per item pipe casing tier.") - .addInfo("Each pipe casing (bronze, steel, titanium, tungstensteel)") - .addInfo("decreases the EU usageby 1/pipe tier.") - .addInfo("Heating Coils increase speed by 1/((tier + 1) / 2).") - .addInfo("Needs a minimum of 128 Pressure Containment Casings.") - .addInfo(AuthorVolence) - .addSeparator() - .beginStructureBlock(7, 5, 5, true) - .addController("Front Center") - .addCasingInfoMin("Pressure Containment Casings", 128, false) - .addCasingInfoExactly("Item Pipe Casings", 7, true) - .addCasingInfoExactly("Pipe Casings", 14, true) - .addCasingInfoExactly("Heating Coils", 7, true) - .addCasingInfoExactly("PTFE Frame", 42, false) - .addInputBus("Any of the Pressure Containment Casings", 1) - .addOutputBus("Any of the Pressure Containment Casings", 1) - .addEnergyHatch("Any of the Pressure Containment Casings", 1) - .addMaintenanceHatch("Any of the Pressure Containment Casings", 1) - .addMufflerHatch("Any of the Pressure Containment Casings", 1) - .toolTipFinisher("GregTech"); - return tt; - } - - private int mCasingAmount; - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - fluidPipeTier = -2; - itemPipeTier = -2; - mCasingAmount = 0; - mEnergyHatches.clear(); - setCoilLevel(HeatingCoilLevel.None); - if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 6, 0)) return false; - return this.mMaintenanceHatches.size() == 1 && fluidPipeTier >= 0 - && mCasingAmount >= 128 - && itemPipeTier >= 0 - && mEnergyHatches.size() >= 1 - && mMufflerHatches.size() == 1; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - ITexture[] rTexture; - if (side == aFacing) { - if (aActive) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 3)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_AUTOCLAVE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_AUTOCLAVE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 3)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_AUTOCLAVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_AUTOCLAVE_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 3)) }; - } - return rTexture; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 6, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int build = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 6, 0, elementBudget, env, false, true); - return build; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_MultiAutoclave(this.mName); - } - - public float euModifier(int fluidPipeTier) { - return (float) (12 - fluidPipeTier) / 12; - } - - public float speedBoost(int coilTier) { - return (float) 1 / (1 + 0.25f * coilTier); - } - - public int getMaxParallelRecipes() { - return itemPipeTier * 12; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Override - @Nonnull - public CheckRecipeResult process() { - euModifier = euModifier(fluidPipeTier); - speedBoost = speedBoost(getCoilTier()); - return super.process(); - } - }.setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("fluidPipeTier", getFluidPipeTier()); - tag.setInteger("itemPipeTier", getItemPipeTier()); - tag.setInteger("coilTier", getCoilTier()); - tag.setFloat("getMaxParallelRecipes", getMaxParallelRecipes()); - } - - private static final DecimalFormat dfTwo = new DecimalFormat("0.00"); - private static final DecimalFormat dfNone = new DecimalFormat("#"); - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.fluidPipeTier") + ": " - + EnumChatFormatting.WHITE - + Math.max(0, tag.getInteger("fluidPipeTier"))); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.euModifier") + ": " - + EnumChatFormatting.WHITE - + dfTwo.format(Math.max(0, euModifier(tag.getInteger("fluidPipeTier")) * 100)) - + "%"); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.itemPipeTier") + ": " - + EnumChatFormatting.WHITE - + Math.max(0, tag.getInteger("itemPipeTier"))); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " - + EnumChatFormatting.WHITE - + dfNone.format(Math.max(0, tag.getFloat("getMaxParallelRecipes")))); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.coilLevel") + ": " - + EnumChatFormatting.WHITE - + Math.max(0, tag.getInteger("coilTier"))); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.speed") + ": " - + EnumChatFormatting.WHITE - + dfNone.format(Math.max(0, 100 / speedBoost(tag.getInteger("coilTier")))) - + "%"); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.autoclaveRecipes; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Utility.roundUpVoltage(this.getMaxInputVoltage())); - logic.setAvailableAmperage(1L); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiCanner.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiCanner.java deleted file mode 100644 index a622f8db2c..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiCanner.java +++ /dev/null @@ -1,314 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.GT_Values.AuthorFourIsTheNumber; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Casings2; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_MultiCanner extends - GT_MetaTileEntity_ExtendedPowerMultiBlockBase implements ISurvivalConstructable { - - private static final int MACHINEMODE_CANNER = 0; - private static final int MACHINEMODE_FLUIDCANNER = 1; - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - (transpose( - new String[][] { { " AAA ", " AAAAA ", "AAAAAAA", "AAAAAAA", "AAAAAAA", " AAAAA ", " AAA " }, - { " ", " B B ", " BAAAB ", " A A ", " BAAAB ", " B B ", " " }, - { " ", " B B ", " BA~AB ", " A A ", " BAAAB ", " B B ", " " }, - { " ", " B B ", " BAAAB ", " A A ", " BAAAB ", " B B ", " " }, - { " AAA ", " AAAAA ", "AAAAAAA", "AAAAAAA", "AAAAAAA", " AAAAA ", " AAA " } }))) - .addElement( - 'A', - buildHatchAdder(GT_MetaTileEntity_MultiCanner.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, InputHatch, OutputHatch) - .casingIndex(((GT_Block_Casings2) GregTech_API.sBlockCasings2).getTextureIndex(0)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_MultiCanner::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings2, 0)))) - .addElement('B', ofBlock(GregTech_API.sBlockCasings2, 13)) - .build(); - - public GT_MetaTileEntity_MultiCanner(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_MultiCanner(String aName) { - super(aName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_MultiCanner(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - ITexture[] rTexture; - if (side == aFacing) { - if (aActive) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings2, 0)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_CANNER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_CANNER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings2, 0)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_CANNER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_CANNER_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings2, 0)) }; - } - return rTexture; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Canner/Fluid Canner") - .addInfo("Controller Block for the TurboCan Pro") - .addInfo("Use screwdriver to switch mode") - .addInfo("100% faster than single block machines of the same voltage") - .addInfo("Gains 8 parallels per voltage tier") - .addInfo(EnumChatFormatting.BLUE + "It's uncanny!") - .addInfo(AuthorFourIsTheNumber) - .addSeparator() - .beginStructureBlock(7, 5, 7, true) - .addController("Front Center") - .addCasingInfoMin("Solid Steel Machine Casing", 85, false) - .addCasingInfoExactly("Steel Pipe Casing", 24, false) - .addInputBus("Any Solid Steel Casing", 1) - .addOutputBus("Any Solid Steel Casing", 1) - .addInputHatch("Any Solid Steel Casing", 1) - .addOutputHatch("Any Solid Steel Casing", 1) - .addEnergyHatch("Any Solid Steel Casing", 1) - .addMaintenanceHatch("Any Solid Steel Casing", 1) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 2, 2); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 2, 2, elementBudget, env, false, true); - } - - private int mCasingAmount; - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasingAmount = 0; - mEnergyHatches.clear(); - - if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 2, 2)) return false; - if (mCasingAmount < 85) return false; - - // All checks passed! - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 2F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - public int getMaxParallelRecipes() { - return (8 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public RecipeMap getRecipeMap() { - return (machineMode == MACHINEMODE_FLUIDCANNER) ? RecipeMaps.fluidCannerRecipes : RecipeMaps.cannerRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(RecipeMaps.fluidCannerRecipes, RecipeMaps.cannerRecipes); - } - - @Override - public int getRecipeCatalystPriority() { - return -10; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - if (aNBT.hasKey("fluidMode")) { - machineMode = aNBT.getBoolean("fluidMode") ? MACHINEMODE_FLUIDCANNER : MACHINEMODE_CANNER; - } - super.loadNBTData(aNBT); - } - - @Override - public boolean supportsMachineModeSwitch() { - return true; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - setMachineMode(nextMachineMode()); - PlayerUtils.messagePlayer( - aPlayer, - String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); - } - - @Override - public void setMachineModeIcons() { - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_PACKAGER); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_LPF_FLUID); - } - - @Override - public String getMachineModeName() { - return StatCollector.translateToLocal("GT5U.MULTI_CANNER.mode." + machineMode); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("mode", machineMode); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector.translateToLocal("GT5U.MULTI_CANNER.mode." + tag.getInteger("mode")) - + EnumChatFormatting.RESET); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Utility.roundUpVoltage(this.getMaxInputVoltage())); - logic.setAvailableAmperage(1L); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java deleted file mode 100644 index 5d611b270d..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiFurnace.java +++ /dev/null @@ -1,377 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_MultiFurnace - extends GT_MetaTileEntity_AbstractMultiFurnace implements ISurvivalConstructable { - - private int mLevel = 0; - private int mCostDiscount = 1; - - private static final long RECIPE_EUT = 4; - private static final int RECIPE_DURATION = 512; - private static final int CASING_INDEX = 11; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose(new String[][] { { "ccc", "cmc", "ccc" }, { "CCC", "C-C", "CCC" }, { "b~b", "bbb", "bbb" } })) - .addElement('c', ofBlock(GregTech_API.sBlockCasings1, CASING_INDEX)) - .addElement('m', Muffler.newAny(CASING_INDEX, 2)) - .addElement( - 'C', - GT_StructureUtility - .ofCoil(GT_MetaTileEntity_MultiFurnace::setCoilLevel, GT_MetaTileEntity_MultiFurnace::getCoilLevel)) - .addElement( - 'b', - ofChain( - GT_StructureUtility.buildHatchAdder() - .atLeast(Maintenance, InputBus, OutputBus, Energy) - .casingIndex(CASING_INDEX) - .dot(1) - .build(), - ofBlock(GregTech_API.sBlockCasings1, CASING_INDEX))) - .build(); - - public GT_MetaTileEntity_MultiFurnace(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_MultiFurnace(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_MultiFurnace(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Furnace") - .addInfo("Controller Block for the Multi Smelter") - .addInfo("Smelts up to 8-8192 items at once") - .addInfo("Items smelted increases with coil tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front bottom") - .addCasingInfoRange("Heat Proof Machine Casing", 8, 14, false) - .addOtherStructurePart("Heating Coils", "Middle layer") - .addEnergyHatch("Any bottom casing", 1) - .addMaintenanceHatch("Any bottom casing", 1) - .addMufflerHatch("Top Middle", 2) - .addInputBus("Any bottom casing", 1) - .addOutputBus("Any bottom casing", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection != facingDirection) return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; - if (active) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_SMELTER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_SMELTER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_SMELTER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_SMELTER_GLOW) - .extFacing() - .glow() - .build() }; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.furnaceRecipes; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return GT_Mod.gregtechproxy.mPollutionMultiSmelterPerSecond; - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - ArrayList tInputList = getAllStoredInputs(); - if (tInputList.isEmpty()) return CheckRecipeResultRegistry.NO_RECIPE; - - long inputVoltage = getMaxInputVoltage(); - - int fakeOriginalMaxParallel = 1; - GT_OverclockCalculator calculator = new GT_OverclockCalculator().setEUt(inputVoltage) - .setRecipeEUt(RECIPE_EUT) - .setDuration(RECIPE_DURATION) - .setParallel(fakeOriginalMaxParallel); - - int maxParallel = this.mLevel; - int originalMaxParallel = maxParallel; - double tickTimeAfterOC = calculator.calculateDurationUnderOneTick(); - if (tickTimeAfterOC < 1) { - maxParallel = GT_Utility.safeInt((long) (maxParallel / tickTimeAfterOC), 0); - } - - int maxParallelBeforeBatchMode = maxParallel; - if (isBatchModeEnabled()) { - maxParallel = GT_Utility.safeInt((long) maxParallel * getMaxBatchSize(), 0); - } - - // Calculate parallel - int currentParallel = 0; - for (ItemStack item : tInputList) { - ItemStack smeltedOutput = GT_ModHandler.getSmeltingOutput(item, false, null); - if (smeltedOutput != null) { - if (item.stackSize <= (maxParallel - currentParallel)) { - currentParallel += item.stackSize; - } else { - currentParallel = maxParallel; - break; - } - } - } - if (currentParallel <= 0) { - return CheckRecipeResultRegistry.NO_RECIPE; - } - int currentParallelBeforeBatchMode = Math.min(currentParallel, maxParallelBeforeBatchMode); - int fakeCurrentParallel = (int) Math.ceil((double) currentParallelBeforeBatchMode / originalMaxParallel); - - calculator.setCurrentParallel(fakeCurrentParallel) - .calculate(); - - double batchMultiplierMax = 1; - // In case batch mode enabled - if (currentParallel > maxParallelBeforeBatchMode && calculator.getDuration() < getMaxBatchSize()) { - batchMultiplierMax = (double) getMaxBatchSize() / calculator.getDuration(); - batchMultiplierMax = Math.min(batchMultiplierMax, (double) currentParallel / maxParallelBeforeBatchMode); - } - int finalParallel = (int) (batchMultiplierMax * maxParallelBeforeBatchMode); - - // Consume inputs and generate outputs - ArrayList smeltedOutputs = new ArrayList<>(); - int remainingCost = finalParallel; - for (ItemStack item : tInputList) { - ItemStack smeltedOutput = GT_ModHandler.getSmeltingOutput(item, false, null); - if (smeltedOutput != null) { - if (remainingCost >= item.stackSize) { - remainingCost -= item.stackSize; - smeltedOutput.stackSize *= item.stackSize; - item.stackSize = 0; - smeltedOutputs.add(smeltedOutput); - } else { - smeltedOutput.stackSize *= remainingCost; - item.stackSize -= remainingCost; - smeltedOutputs.add(smeltedOutput); - break; - } - } - } - this.mOutputItems = smeltedOutputs.toArray(new ItemStack[0]); - - this.mEfficiency = 10000 - (getIdealStatus() - getRepairStatus()) * 1000; - this.mEfficiencyIncrease = 10000; - this.mMaxProgresstime = (int) (calculator.getDuration() * batchMultiplierMax); - this.lEUt = calculator.getConsumption(); - - if (this.lEUt > 0) this.lEUt = -this.lEUt; - - updateSlots(); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.mLevel = 0; - this.mCostDiscount = 1; - - replaceDeprecatedCoils(aBaseMetaTileEntity); - - setCoilLevel(HeatingCoilLevel.None); - - if (!checkPiece(STRUCTURE_PIECE_MAIN, 1, 2, 0)) return false; - - if (getCoilLevel() == HeatingCoilLevel.None) return false; - - if (mMaintenanceHatches.size() != 1) return false; - - if (getCoilLevel().getHeat() < 9000) { - this.mLevel = 8 * getCoilLevel().getLevel(); - } else { - this.mLevel = 1 << (getCoilLevel().getTier()); - } - this.mCostDiscount = getCoilLevel().getCostDiscount(); - return true; - } - - private void replaceDeprecatedCoils(IGregTechTileEntity aBaseMetaTileEntity) { - final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX; - final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ; - final int tX = aBaseMetaTileEntity.getXCoord() + xDir; - final int tY = aBaseMetaTileEntity.getYCoord(); - final int tZ = aBaseMetaTileEntity.getZCoord() + zDir; - int tUsedMeta; - for (int xPos = tX - 1; xPos <= tX + 1; xPos++) for (int zPos = tZ - 1; zPos <= tZ + 1; zPos++) { - if ((xPos == tX) && (zPos == tZ)) continue; - tUsedMeta = aBaseMetaTileEntity.getMetaID(xPos, tY + 1, zPos); - if (tUsedMeta >= 12 && tUsedMeta <= 14 - && aBaseMetaTileEntity.getBlock(xPos, tY + 1, zPos) == GregTech_API.sBlockCasings1) - aBaseMetaTileEntity.getWorld() - .setBlock(xPos, tY + 1, zPos, GregTech_API.sBlockCasings5, tUsedMeta - 12, 3); - } - } - - @Override - public String[] getInfoData() { - int mPollutionReduction = 0; - for (final GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) - mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); - - long storedEnergy = 0; - long maxEnergy = 0; - for (final GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - - return new String[] { - StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(-lEUt) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getMaxInputVoltage()) - + EnumChatFormatting.RESET - + " EU/t(*2A) " - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + VN[GT_Utility.getTier(getMaxInputVoltage())] - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - StatCollector.translateToLocal("GT5U.MS.multismelting") + ": " - + EnumChatFormatting.GREEN - + mLevel - + EnumChatFormatting.RESET - + " Discount: (EU/t) / " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mCostDiscount) - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %" }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 2, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 2, 0, elementBudget, env, false, true); - } - - @Override - public boolean supportsBatchMode() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiLathe.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiLathe.java deleted file mode 100644 index dc15d89c70..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_MultiLathe.java +++ /dev/null @@ -1,377 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_Values.AuthorVolence; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_LATHE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_LATHE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_LATHE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_LATHE_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.text.DecimalFormat; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.GregTechTileClientEvents; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Casings2; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_MultiLathe extends GT_MetaTileEntity_EnhancedMultiBlockBase - implements ISurvivalConstructable { - - public GT_MetaTileEntity_MultiLathe(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_MultiLathe(String aName) { - super(aName); - } - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final String STRUCTURE_PIECE_BODY = "body"; - private static final String STRUCTURE_PIECE_BODY_ALT = "body_alt"; - - protected int pipeTier = 0; - - public enum PipeTiers { - - Platinum(4, 1F), - Osmium(8, 1.25F), - Quantium(12, 1.5F), - FluxedElectrum(16, 2F), - BlackPlutonium(32, 2.5F); - - final int maxParallel; - final float speedBoost; - - PipeTiers(int maxParallel, float speedBoost) { - this.maxParallel = maxParallel; - this.speedBoost = speedBoost; - } - } - - private PipeTiers getPipeData() { - pipeTier = getPipeTier(); - return switch (pipeTier) { - case 2 -> PipeTiers.Osmium; - case 3 -> PipeTiers.Quantium; - case 4 -> PipeTiers.FluxedElectrum; - case 5 -> PipeTiers.BlackPlutonium; - default -> PipeTiers.Platinum; - }; - } - - // get tier from block meta - private static Integer getTierFromMeta(Block block, Integer metaID) { - if (block != GregTech_API.sBlockCasings11) return -1; - if (metaID < 3 || metaID > 7) return -1; - return (metaID - 2); - } - - private void setPipeTier(int tier) { - pipeTier = tier; - } - - private int getPipeTier() { - return pipeTier; - } - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose(new String[][] { { " " }, { " " }, { " " }, { " " }, { "AAA~AAA" } })) - .addShape( - STRUCTURE_PIECE_BODY, - (transpose( - new String[][] { { " ", "AAAAAAA", " ", " " }, - { "DBCCCCD", "DBCCCCD", "DBCCCCD", " " }, { "DBCCCCD", "DBFFFFD", "DBCCCCD", " " }, - { "DBCCCCD", "DBCCCCD", "DBCCCCD", " " }, { "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA" } }))) - .addShape( - STRUCTURE_PIECE_BODY_ALT, - (transpose( - new String[][] { { " ", "AAAAAAA", " ", " " }, - { "DCCCCBD", "DCCCCBD", "DCCCCBD", " " }, { "DCCCCBD", "DFFFFBD", "DCCCCBD", " " }, - { "DCCCCBD", "DCCCCBD", "DCCCCBD", " " }, { "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA" } }))) - .addElement( - 'A', - buildHatchAdder(GT_MetaTileEntity_MultiLathe.class).atLeast(Maintenance, Muffler, Energy) - .casingIndex(((GT_Block_Casings2) GregTech_API.sBlockCasings2).getTextureIndex(0)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_MultiLathe::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings2, 0)))) - .addElement('B', ofBlock(GregTech_API.sBlockCasings3, 10)) // Steel Casings - .addElement('C', Glasses.chainAllGlasses()) // Glass - .addElement( - 'D', - buildHatchAdder(GT_MetaTileEntity_MultiLathe.class) - .atLeast(InputBus, OutputBus, Maintenance, Muffler, Energy) - .casingIndex(((GT_Block_Casings2) GregTech_API.sBlockCasings2).getTextureIndex(0)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_MultiLathe::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings2, 0)))) - .addElement( - 'F', - ofBlocksTiered( - GT_MetaTileEntity_MultiLathe::getTierFromMeta, - ImmutableList.of( - Pair.of(GregTech_API.sBlockCasings11, 3), - Pair.of(GregTech_API.sBlockCasings11, 4), - Pair.of(GregTech_API.sBlockCasings11, 5), - Pair.of(GregTech_API.sBlockCasings11, 6), - Pair.of(GregTech_API.sBlockCasings11, 7)), - -2, - GT_MetaTileEntity_MultiLathe::setPipeTier, - GT_MetaTileEntity_MultiLathe::getPipeTier)) - .build(); - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_MultiLathe(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - ITexture[] rTexture; - if (side == aFacing) { - if (aActive) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings2, 0)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_LATHE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_LATHE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings2, 0)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_LATHE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_LATHE_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings2, 0)) }; - } - return rTexture; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Lathe") - .addInfo("Controller Block for the Industrial Precision Lathe") - .addInfo("Gains 2 parallels per voltage tier,") - .addInfo("and 4 parallels per pipe casing tier (16 for Black Plutonium)") - .addInfo("Better pipe casings increase speed") - .addInfo("Only uses 80% of the recipe's required energy") - .addInfo(AuthorVolence) - .addSeparator() - .beginStructureBlock(7, 5, 5, true) - .addController("Front Center") - .addCasingInfoMin("Solid Steel Machine Casing", 36, false) - .addCasingInfoExactly("Steel Pipe Casing", 8, false) - .addInputBus("Any of the 9 Solid Steel Casing at Each End", 1) - .addOutputBus("Any of the 9 Solid Steel Casing at Each End", 1) - .addEnergyHatch("Any Solid Steel Casing", 1) - .addMaintenanceHatch("Any Solid Steel Casing", 1) - .addMufflerHatch("Any Solid Steel Casing", 1) - .addOtherStructurePart("4 Item Pipe Casings", "Center of the glass", 4) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 4, 0); - buildPiece(STRUCTURE_PIECE_BODY, stackSize, hintsOnly, 3, 4, -1); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int build = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 4, 0, elementBudget, env, false, true); - if (build >= 0) return build; - build = survivialBuildPiece(STRUCTURE_PIECE_BODY, stackSize, 3, 4, -1, elementBudget, env, false, true); - if (build >= 0) return build; - build = survivialBuildPiece(STRUCTURE_PIECE_BODY_ALT, stackSize, 3, 4, -1, elementBudget, env, false, true); - return build; - } - - private int mCasingAmount; - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - pipeTier = -2; - mEnergyHatches.clear(); - if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 4, 0)) return false; - getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); - if (!checkPiece(STRUCTURE_PIECE_BODY, 3, 4, -1) && !checkPiece(STRUCTURE_PIECE_BODY_ALT, 3, 4, -1)) - return false; - return this.mMaintenanceHatches.size() == 1 && pipeTier >= -1 - && mEnergyHatches.size() >= 1 - && mInputBusses.size() >= 1 - && mMufflerHatches.size() == 1; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() - .setSpeedBonus(1F / (getPipeData().speedBoost + GT_Utility.getTier(this.getMaxInputVoltage()) / 4F)) - .setEuModifier(0.8F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - public int getMaxParallelRecipes() { - return getPipeData().maxParallel + (GT_Utility.getTier(this.getMaxInputVoltage()) * 2); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("itemPipeTier", Math.max(0, pipeTier)); - tag.setFloat( - "speedBonus", - Math.max(0, 100 / (1F / (getPipeData().speedBoost + GT_Utility.getTier(this.getMaxInputVoltage()) / 4F)))); - tag.setFloat("getMaxParallelRecipes", Math.max(0, getMaxParallelRecipes())); - } - - private static final DecimalFormat dfNone = new DecimalFormat("#"); - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.itemPipeTier") + ": " - + EnumChatFormatting.WHITE - + Math.max(0, tag.getInteger("itemPipeTier"))); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " - + EnumChatFormatting.WHITE - + dfNone.format(Math.max(0, tag.getFloat("getMaxParallelRecipes")))); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.speed") + ": " - + EnumChatFormatting.WHITE - + dfNone.format(Math.max(0, tag.getFloat("speedBonus"))) - + "%"); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.latheRecipes; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Utility.roundUpVoltage(this.getMaxInputVoltage())); - logic.setAvailableAmperage(1L); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java deleted file mode 100644 index adceabd70c..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_NanoForge.java +++ /dev/null @@ -1,467 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.ExoticEnergy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_Values.AuthorBlueWeabo; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Casings8; - -public class GT_MetaTileEntity_NanoForge extends - GT_MetaTileEntity_ExtendedPowerMultiBlockBase implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final String STRUCTURE_PIECE_TIER2 = "tier2"; - private static final String STRUCTURE_PIECE_TIER3 = "tier3"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - // spotless:off - .addShape(STRUCTURE_PIECE_MAIN, transpose(new String[][] { - {" "," "," F "," C "," C "," C "," C "," F "," "," "}, - {" "," "," F "," C "," C "," C "," C "," F "," "," "}, - {" "," "," F "," C "," C "," C "," C "," F "," "," "}, - {" "," "," F "," C "," C "," C "," C "," F "," "," "}, - {" "," "," F "," C "," C "," C "," C "," F "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, - {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, - {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, - {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, - {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, - {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, - {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, - {" C "," FCF "," CC CC "," CC CC "," CC CC "," CC CC "," CC CC "," CC CC "," FCF "," C "}, - {" C "," FCF "," CC CC "," CC CC "," CC CC "," CC CC "," CC CC "," CC CC "," FCF "," C "}, - {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, - {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, - {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, - {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, - {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, - {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, - {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, - {" "," BB~BB "," BBBBBBB ","BBBBBBBBB","BBBBBBBBB","BBBBBBBBB","BBBBBBBBB"," BBBBBBB "," BBBBB "," "} - })) - .addShape(STRUCTURE_PIECE_TIER2, transpose(new String[][] { - {" ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " "}, - {" ", " ", " AA ", " ACCA ", " ACCA ", " AA ", " ", " "}, - {" ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " "}, - {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, - {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, - {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, - {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, - {" ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " "}, - {" ", " ", " AA ", " ACCA ", " ACCA ", " AA ", " ", " "}, - {" ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " "}, - {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, - {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, - {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, - {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, - {" CCCCCC ", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", " CCCCCC "} - })) - .addShape(STRUCTURE_PIECE_TIER3, transpose(new String[][] { - {" ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " "}, - {" ", " ", " FFAA ", " ACCA ", " ACCA ", " AAFF ", " ", " "}, - {" ", " ", "F CC ", "F CCCC ", " CCCC F", " CC F", " ", " "}, - {" ", " ", " F", " CC F", "F CC ", "F ", " ", " "}, - {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, - {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, - {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, - {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, - {" ", " ", "F ", "F CC ", " CC F", " F", " ", " "}, - {" ", " ", " CC F", " CCCC F", "F CCCC ", "F CC ", " ", " "}, - {" ", " F ", " CC ", " CCCC ", " CCCC ", " CC ", " F ", " "}, - {" FF ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " FF "}, - {" FF ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " FF "}, - {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, - {" ", " ", "F ", "F CC ", " CC F", " F", " ", " "}, - {" ", " ", " F", " CC F", "F CC ", "F ", " ", " "}, - {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, - {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, - {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, - {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, - {" ", " ", "F CC ", "F CCCC ", " CCCC F", " CC F", " ", " "}, - {" ", " ", " AA F", " ACCA F", "F ACCA ", "F AA ", " ", " "}, - {" ", " F ", " CC ", " CCCC ", " CCCC ", " CC ", " F ", " "}, - {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, - {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, - {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, - {" CCCCCC ", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", " CCCCCC "} - })) - //spotless:on - .addElement('F', ofFrame(Materials.StellarAlloy)) - .addElement('C', ofBlock(GregTech_API.sBlockCasings8, 10)) - .addElement('A', ofBlock(GregTech_API.sBlockCasings2, 5)) - .addElement( - 'B', - buildHatchAdder(GT_MetaTileEntity_NanoForge.class) - .atLeast(InputHatch, OutputBus, InputBus, Maintenance, Energy.or(ExoticEnergy)) - .dot(1) - .casingIndex(((GT_Block_Casings8) GregTech_API.sBlockCasings8).getTextureIndex(10)) - .buildAndChain(GregTech_API.sBlockCasings8, 10)) - .build(); - private byte mSpecialTier = 0; - - public GT_MetaTileEntity_NanoForge(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_NanoForge(String aName) { - super(aName); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.nanoForgeRecipes; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 4, 37, 1); - if (stackSize.stackSize > 1) { - buildPiece(STRUCTURE_PIECE_TIER2, stackSize, hintsOnly, -7, 14, 4); - } - if (stackSize.stackSize > 2) { - buildPiece(STRUCTURE_PIECE_TIER3, stackSize, hintsOnly, 14, 26, 4); - } - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_NanoForge(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection == facingDirection) { - if (active) return new ITexture[] { - BlockIcons.getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings8, 10)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { - BlockIcons.getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings8, 10)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { - BlockIcons.getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings8, 10)) }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Override - protected @Nonnull CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - return recipe.mSpecialValue <= mSpecialTier ? CheckRecipeResultRegistry.SUCCESSFUL - : CheckRecipeResultRegistry.NO_RECIPE; - } - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe) - .setDurationDecreasePerOC(mSpecialTier > recipe.mSpecialValue ? 4.0 : 2.0); - } - }; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(getMaxInputEu()); - logic.setAvailableAmperage(1); - logic.setAmperageOC(false); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - // TODO: Look for proper fix - // Updates every 10 sec - if (mUpdate <= -150) mUpdate = 50; - } - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mSpecialTier = 0; - if (checkPiece(STRUCTURE_PIECE_MAIN, 4, 37, 1) && aStack != null) { - if (aStack.isItemEqual(Materials.Carbon.getNanite(1))) { - mSpecialTier = 1; - } - - if (aStack.isItemEqual(Materials.Neutronium.getNanite(1)) && checkPiece(STRUCTURE_PIECE_TIER2, -7, 14, 4)) { - mSpecialTier = 2; - } - - if (aStack.isItemEqual(MaterialsUEVplus.TranscendentMetal.getNanite(1)) - && checkPiece(STRUCTURE_PIECE_TIER2, -7, 14, 4) - && checkPiece(STRUCTURE_PIECE_TIER3, 14, 26, 4)) { - mSpecialTier = 3; - } - } - - if (mMaintenanceHatches.size() != 1) { - return false; - } - - if (!checkExoticAndNormalEnergyHatches()) { - return false; - } - - return mSpecialTier > 0; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 4, 37, 1, elementBudget, env, false, true); - if (built >= 0) return built; - if (stackSize.stackSize > 1) { - built += survivialBuildPiece(STRUCTURE_PIECE_TIER2, stackSize, -7, 14, 4, elementBudget, env, false, true); - } - if (stackSize.stackSize > 2) { - built += survivialBuildPiece(STRUCTURE_PIECE_TIER3, stackSize, 14, 26, 4, elementBudget, env, false, true); - } - return built; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setByte("mSpecialTier", mSpecialTier); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("mSeparate")) { - // backward compatibility - inputSeparation = aNBT.getBoolean("mSeparate"); - } - mSpecialTier = aNBT.getByte("mSpecialTier"); - } - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - screenElements - .widget( - new TextWidget(StatCollector.translateToLocal("GT5U.gui.button.tier") + " " + mSpecialTier) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) - .widget( - new FakeSyncWidget.IntegerSyncer( - () -> (int) mSpecialTier, - val -> mSpecialTier = (byte) (val % Byte.MAX_VALUE))); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Nanite Fabricator") - .addInfo("Controller block for the Nano Forge") - .addInfo("Requires insane amounts of power to create nanites. Each tier") - .addInfo("the multi gains a new building next to it. The nanite in the") - .addInfo("controller slot controls the tier.") - .addInfo("--------------------------------------------") - .addInfo("Requires a Carbon Nanite to use tier " + EnumChatFormatting.DARK_PURPLE + 1) - .addInfo("Requires a Neutronium Nanite to use tier " + EnumChatFormatting.DARK_PURPLE + 2) - .addInfo("Requires a Transcendent Metal Nanite to use tier " + EnumChatFormatting.DARK_PURPLE + 3) - .addInfo("--------------------------------------------") - .addInfo("If a recipe's tier is lower than the tier of the Nano Forge") - .addInfo("it gains " + EnumChatFormatting.RED + "perfect overclock" + EnumChatFormatting.GRAY + ".") - .addInfo(AuthorBlueWeabo) - .addSeparator() - .beginStructureBlock(30, 38, 13, false) - .addStructureInfo("Nano Forge Structure is too complex! See schematic for details.") - .addStructureInfo("--------------------------------------------") - .addStructureInfo("Tier " + EnumChatFormatting.DARK_PURPLE + 1 + EnumChatFormatting.GRAY) - .addStructureInfo( - EnumChatFormatting.GOLD + "527" + EnumChatFormatting.GRAY + " Radiant Naquadah Alloy Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "171" + EnumChatFormatting.GRAY + " Stellar Alloy Frame Box") - .addStructureInfo("--------------------------------------------") - .addStructureInfo("Tier " + EnumChatFormatting.DARK_PURPLE + 2 + EnumChatFormatting.GRAY) - .addStructureInfo( - EnumChatFormatting.GOLD + "148" + EnumChatFormatting.GRAY + " Radiant Naquadah Alloy Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "16" + EnumChatFormatting.GRAY + " Assembling Line Casing") - .addStructureInfo("--------------------------------------------") - .addStructureInfo("Tier " + EnumChatFormatting.DARK_PURPLE + 3 + EnumChatFormatting.GRAY) - .addStructureInfo( - EnumChatFormatting.GOLD + "228" + EnumChatFormatting.GRAY + " Radiant Naquadah Alloy Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "84" + EnumChatFormatting.GRAY + " Stellar Alloy Frame Box") - .addStructureInfo(EnumChatFormatting.GOLD + "16" + EnumChatFormatting.GRAY + " Assembling Line Casing") - .addStructureInfo("--------------------------------------------") - .addStructureInfo( - "Requires " + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + "-" - + EnumChatFormatting.GOLD - + "2" - + EnumChatFormatting.GRAY - + " energy hatches or " - + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + " TT energy hatch.") - .addStructureInfo( - "Requires " + EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " maintenance hatch.") - .addStructureInfo( - "Requires " + EnumChatFormatting.GOLD - + 1 - + EnumChatFormatting.GRAY - + "+" - + EnumChatFormatting.GRAY - + " input hatches.") - .addStructureInfo( - "Requires " + EnumChatFormatting.GOLD - + 0 - + EnumChatFormatting.GRAY - + "+" - + EnumChatFormatting.GRAY - + " output hatches.") - .addStructureInfo( - "Requires " + EnumChatFormatting.GOLD - + 1 - + EnumChatFormatting.GRAY - + "+" - + EnumChatFormatting.GRAY - + " input busses.") - .addStructureInfo( - "Requires " + EnumChatFormatting.GOLD - + 1 - + EnumChatFormatting.GRAY - + "+" - + EnumChatFormatting.GRAY - + " output busses.") - .addStructureInfo("--------------------------------------------") - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - inputSeparation = !inputSeparation; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java deleted file mode 100644 index 9ca671aa49..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilCracker.java +++ /dev/null @@ -1,423 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Nonnull; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_HatchElement; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.maps.OilCrackerBackend; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Input_ME; -import gregtech.common.tileentities.machines.IRecipeProcessingAwareHatch; - -public class GT_MetaTileEntity_OilCracker extends GT_MetaTileEntity_EnhancedMultiBlockBase - implements ISurvivalConstructable { - - private static final byte CASING_INDEX = 49; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { "lcmcr", "lcmcr", "lcmcr" }, { "lc~cr", "l---r", "lcmcr" }, - { "lcmcr", "lcmcr", "lcmcr" }, })) - .addElement('c', ofCoil(GT_MetaTileEntity_OilCracker::setCoilLevel, GT_MetaTileEntity_OilCracker::getCoilLevel)) - .addElement( - 'l', - buildHatchAdder(GT_MetaTileEntity_OilCracker.class) - .atLeast( - GT_HatchElement.InputHatch.withAdder(GT_MetaTileEntity_OilCracker::addLeftHatchToMachineList), - GT_HatchElement.Energy, - GT_HatchElement.Maintenance) - .dot(2) - .casingIndex(CASING_INDEX) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_OilCracker::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings4, 1)))) - .addElement( - 'r', - buildHatchAdder(GT_MetaTileEntity_OilCracker.class) - .atLeast( - GT_HatchElement.OutputHatch.withAdder(GT_MetaTileEntity_OilCracker::addRightHatchToMachineList), - GT_HatchElement.Energy, - GT_HatchElement.Maintenance) - .dot(3) - .casingIndex(CASING_INDEX) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_OilCracker::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings4, 1)))) - .addElement( - 'm', - buildHatchAdder(GT_MetaTileEntity_OilCracker.class) - .atLeast( - GT_HatchElement.InputHatch.withAdder(GT_MetaTileEntity_OilCracker::addMiddleInputToMachineList) - .withCount(t -> t.mMiddleInputHatches.size()), - GT_HatchElement.InputBus, - GT_HatchElement.Energy, - GT_HatchElement.Maintenance) - .dot(1) - .casingIndex(CASING_INDEX) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_OilCracker::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings4, 1)))) - .build(); - private HeatingCoilLevel heatLevel; - protected final List mMiddleInputHatches = new ArrayList<>(); - // 0 -> left, 1 -> right, any other -> not found - protected int mInputOnSide; - protected int mOutputOnSide; - protected int mCasingAmount; - - public GT_MetaTileEntity_OilCracker(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_OilCracker(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Cracker") - .addInfo("Controller block for the Oil Cracking Unit") - .addInfo("Thermally cracks heavy hydrocarbons into lighter fractions") - .addInfo("More efficient than the Chemical Reactor") - .addInfo("Gives different benefits whether it hydro or steam-cracks:") - .addInfo("Hydro - Consumes 20% less Hydrogen and outputs 25% more cracked fluid") - .addInfo("Steam - Outputs 50% more cracked fluid") - .addInfo("(Values compared to cracking in the Chemical Reactor)") - .addInfo("Place the appropriate circuit in the controller or an input bus") - .addSeparator() - .beginStructureBlock(5, 3, 3, true) - .addController("Front center") - .addCasingInfoRange("Clean Stainless Steel Machine Casing", 18, 21, false) - .addOtherStructurePart("2 Rings of 8 Coils", "Each side of the controller") - .addInfo("Gets 10% EU/t reduction per coil tier, up to a maximum of 50%") - .addEnergyHatch("Any casing", 1, 2, 3) - .addMaintenanceHatch("Any casing", 1, 2, 3) - .addInputHatch("For cracking fluid (Steam/Hydrogen/etc.) ONLY, Any middle ring casing", 1) - .addInputHatch("Any left/right side casing", 2, 3) - .addOutputHatch("Any right/left side casing", 2, 3) - .addStructureInfo("Input/Output Hatches must be on opposite sides!") - .addInputBus("Any middle ring casing, optional for programmed circuit automation") - .addStructureHint("GT5U.cracker.io_side") - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection == facingDirection) { - if (active) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.crackingRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - public CheckRecipeResult process() { - setEuModifier(1.0F - Math.min(0.1F * (heatLevel.getTier() + 1), 0.5F)); - return super.process(); - } - }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - public HeatingCoilLevel getCoilLevel() { - return heatLevel; - } - - public void setCoilLevel(HeatingCoilLevel aCoilLevel) { - heatLevel = aCoilLevel; - } - - private boolean addMiddleInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input tHatch) { - tHatch.updateTexture(aBaseCasingIndex); - tHatch.mRecipeMap = getRecipeMap(); - return mMiddleInputHatches.add(tHatch); - } - return false; - } - - private boolean addLeftHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input tHatch) { - if (mInputOnSide == 1) return false; - mInputOnSide = 0; - mOutputOnSide = 1; - tHatch.updateTexture(aBaseCasingIndex); - tHatch.mRecipeMap = getRecipeMap(); - return mInputHatches.add(tHatch); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output tHatch) { - if (mOutputOnSide == 1) return false; - mInputOnSide = 1; - mOutputOnSide = 0; - tHatch.updateTexture(aBaseCasingIndex); - return mOutputHatches.add(tHatch); - } - return false; - } - - private boolean addRightHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input tHatch) { - if (mInputOnSide == 0) return false; - mInputOnSide = 1; - mOutputOnSide = 0; - tHatch.updateTexture(aBaseCasingIndex); - tHatch.mRecipeMap = getRecipeMap(); - return mInputHatches.add(tHatch); - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output tHatch) { - if (mOutputOnSide == 0) return false; - mInputOnSide = 0; - mOutputOnSide = 1; - tHatch.updateTexture(aBaseCasingIndex); - return mOutputHatches.add(tHatch); - } - return false; - } - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - setCoilLevel(HeatingCoilLevel.None); - mCasingAmount = 0; - mMiddleInputHatches.clear(); - mInputOnSide = -1; - mOutputOnSide = -1; - replaceDeprecatedCoils(aBaseMetaTileEntity); - return checkPiece(STRUCTURE_PIECE_MAIN, 2, 1, 0) && mInputOnSide != -1 - && mOutputOnSide != -1 - && mCasingAmount >= 18 - && mMaintenanceHatches.size() == 1 - && !mMiddleInputHatches.isEmpty(); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_OilCracker(this.mName); - } - - private void replaceDeprecatedCoils(IGregTechTileEntity aBaseMetaTileEntity) { - final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX; - final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ; - final int tX = aBaseMetaTileEntity.getXCoord() + xDir; - final int tY = aBaseMetaTileEntity.getYCoord(); - final int tZ = aBaseMetaTileEntity.getZCoord() + zDir; - for (int xPos = tX - 1; xPos <= tX + 1; xPos += (xDir != 0 ? 1 : 2)) - for (int yPos = tY - 1; yPos <= tY + 1; yPos++) - for (int zPos = tZ - 1; zPos <= tZ + 1; zPos += (xDir != 0 ? 2 : 1)) { - if ((yPos == tY) && (xPos == tX || zPos == tZ)) continue; - final byte tUsedMeta = aBaseMetaTileEntity.getMetaID(xPos, yPos, zPos); - if (tUsedMeta < 12) continue; - if (tUsedMeta > 14) continue; - if (aBaseMetaTileEntity.getBlock(xPos, yPos, zPos) != GregTech_API.sBlockCasings1) continue; - - aBaseMetaTileEntity.getWorld() - .setBlock(xPos, yPos, zPos, GregTech_API.sBlockCasings5, tUsedMeta - 12, 3); - } - } - - @Override - public ArrayList getStoredFluids() { - final ArrayList rList = new ArrayList<>(); - Map inputsFromME = new HashMap<>(); - for (final GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) { - tHatch.mRecipeMap = getRecipeMap(); - if (tHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { - for (FluidStack tFluid : meHatch.getStoredFluids()) { - if (tFluid != null && !getRecipeMap().getBackend() - .isValidCatalystFluid(tFluid)) { - inputsFromME.put(tFluid.getFluid(), tFluid); - } - } - } else if (tHatch instanceof GT_MetaTileEntity_Hatch_MultiInput) { - for (final FluidStack tFluid : ((GT_MetaTileEntity_Hatch_MultiInput) tHatch).getStoredFluid()) { - if (tFluid != null && !getRecipeMap().getBackend() - .isValidCatalystFluid(tFluid)) { - rList.add(tFluid); - } - } - } else { - if (tHatch.getFillableStack() != null) { - if (!getRecipeMap().getBackend() - .isValidCatalystFluid(tHatch.getFillableStack())) rList.add(tHatch.getFillableStack()); - } - } - } - for (final GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mMiddleInputHatches)) { - tHatch.mRecipeMap = getRecipeMap(); - if (tHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { - for (FluidStack tFluid : meHatch.getStoredFluids()) { - if (tFluid != null && getRecipeMap().getBackend() - .isValidCatalystFluid(tFluid)) { - inputsFromME.put(tFluid.getFluid(), tFluid); - } - } - } else if (tHatch instanceof GT_MetaTileEntity_Hatch_MultiInput) { - for (final FluidStack tFluid : ((GT_MetaTileEntity_Hatch_MultiInput) tHatch).getStoredFluid()) { - if (tFluid != null && getRecipeMap().getBackend() - .isValidCatalystFluid(tFluid)) { - rList.add(tFluid); - } - } - } else { - if (tHatch.getFillableStack() != null) { - final FluidStack tStack = tHatch.getFillableStack(); - if (getRecipeMap().getBackend() - .isValidCatalystFluid(tStack)) { - rList.add(tStack); - } - } - } - } - if (!inputsFromME.isEmpty()) { - rList.addAll(inputsFromME.values()); - } - return rList; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - protected void startRecipeProcessing() { - for (GT_MetaTileEntity_Hatch_Input hatch : filterValidMTEs(mMiddleInputHatches)) { - if (hatch instanceof IRecipeProcessingAwareHatch aware) { - aware.startRecipeProcessing(); - } - } - super.startRecipeProcessing(); - } - - @Override - protected void endRecipeProcessing() { - super.endRecipeProcessing(); - for (GT_MetaTileEntity_Hatch_Input hatch : filterValidMTEs(mMiddleInputHatches)) { - if (hatch instanceof IRecipeProcessingAwareHatch aware) { - setResultIfFailure(aware.endRecipeProcessing(this)); - } - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill1.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill1.java deleted file mode 100644 index 1e37dcbac9..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill1.java +++ /dev/null @@ -1,53 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_OilDrill1 extends GT_MetaTileEntity_OilDrillBase { - - public GT_MetaTileEntity_OilDrill1(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_OilDrill1(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - return createTooltip("I"); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_OilDrill1(mName); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_SolidSteel; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.Steel; - } - - @Override - protected int getCasingTextureIndex() { - return 16; - } - - @Override - protected int getRangeInChunks() { - return 1; - } - - @Override - protected int getMinTier() { - return 2; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill2.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill2.java deleted file mode 100644 index 10a64a6b1d..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill2.java +++ /dev/null @@ -1,55 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_OilDrill2 extends GT_MetaTileEntity_OilDrillBase { - - public GT_MetaTileEntity_OilDrill2(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_OilDrill2(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - return createTooltip("II"); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_OilDrill2(mName); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_CleanStainlessSteel; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.StainlessSteel; - } - - @Override - protected int getCasingTextureIndex() { - return GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings4, 1); - } - - @Override - protected int getRangeInChunks() { - return 2; - } - - @Override - protected int getMinTier() { - return 3; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill3.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill3.java deleted file mode 100644 index bcbe42d794..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill3.java +++ /dev/null @@ -1,55 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_OilDrill3 extends GT_MetaTileEntity_OilDrillBase { - - public GT_MetaTileEntity_OilDrill3(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_OilDrill3(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - return createTooltip("III"); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_OilDrill3(mName); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_StableTitanium; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.Titanium; - } - - @Override - protected int getCasingTextureIndex() { - return GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings4, 2); - } - - @Override - protected int getRangeInChunks() { - return 4; - } - - @Override - protected int getMinTier() { - return 4; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill4.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill4.java deleted file mode 100644 index 802e9f1c5c..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrill4.java +++ /dev/null @@ -1,55 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_OilDrill4 extends GT_MetaTileEntity_OilDrillBase { - - public GT_MetaTileEntity_OilDrill4(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_OilDrill4(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - return createTooltip("IV"); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_OilDrill4(mName); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_RobustTungstenSteel; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.TungstenSteel; - } - - @Override - protected int getCasingTextureIndex() { - return GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings4, 0); - } - - @Override - protected int getRangeInChunks() { - return 8; - } - - @Override - protected int getMinTier() { - return 5; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java deleted file mode 100644 index 075b4e19a1..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java +++ /dev/null @@ -1,489 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.GT_Values.debugDriller; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_DRILL; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_DRILL_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_DRILL_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_DRILL_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.getCasingTextureForId; -import static gregtech.common.GT_UndergroundOil.undergroundOil; -import static gregtech.common.GT_UndergroundOil.undergroundOilReadInformation; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Nonnegative; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetricsExporter; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.GT_ChunkManager; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ValidationResult; -import gregtech.api.util.ValidationType; - -public abstract class GT_MetaTileEntity_OilDrillBase extends GT_MetaTileEntity_DrillerBase implements IMetricsExporter { - - private final ArrayList mOilFieldChunks = new ArrayList<>(); - private int mOilId = 0; - private int mOilFlow = 0; - - private int chunkRangeConfig = getRangeInChunks(); - - public GT_MetaTileEntity_OilDrillBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_OilDrillBase(String aName) { - super(aName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { getCasingTextureForId(casingTextureIndex), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_DRILL_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_DRILL_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { getCasingTextureForId(casingTextureIndex), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_DRILL) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_OIL_DRILL_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { getCasingTextureForId(casingTextureIndex) }; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mOilId", mOilId); - aNBT.setInteger("chunkRangeConfig", chunkRangeConfig); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mOilId = aNBT.getInteger("mOilId"); - if (aNBT.hasKey("chunkRangeConfig")) chunkRangeConfig = aNBT.getInteger("chunkRangeConfig"); - } - - protected GT_Multiblock_Tooltip_Builder createTooltip(String tierSuffix) { - String casings = getCasingBlockItem().get(0) - .getDisplayName(); - - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Pump") - .addInfo("Controller Block for the Oil/Gas/Fluid Drilling Rig " + (tierSuffix != null ? tierSuffix : "")) - .addInfo("Works on " + getRangeInChunks() + "x" + getRangeInChunks() + " chunks") - .addInfo("Use a Screwdriver to configure range") - .addInfo("Use Programmed Circuits to ignore near exhausted oil field") - .addInfo("If total circuit # is greater than output amount it will halt. If it worked right.") // doesn't - // work - .addSeparator() - .beginStructureBlock(3, 7, 3, false) - .addController("Front bottom") - .addOtherStructurePart(casings, "form the 3x1x3 Base") - .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") - .addOtherStructurePart(getFrameMaterial().mName + " Frame Boxes", "Each pillar's side and 1x3x1 on top") - .addEnergyHatch("1x " + VN[getMinTier()] + "+, Any base casing", 1) - .addMaintenanceHatch("Any base casing", 1) - .addInputBus("Mining Pipes or Circuits, optional, any base casing", 1) - .addOutputHatch("Any base casing", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - protected abstract int getRangeInChunks(); - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - int oldChunkRange = chunkRangeConfig; - if (aPlayer.isSneaking()) { - if (chunkRangeConfig > 0) { - chunkRangeConfig--; - } - if (chunkRangeConfig == 0) chunkRangeConfig = getRangeInChunks(); - } else { - if (chunkRangeConfig <= getRangeInChunks()) { - chunkRangeConfig++; - } - if (chunkRangeConfig > getRangeInChunks()) chunkRangeConfig = 1; - } - if (oldChunkRange != chunkRangeConfig) mOilFieldChunks.clear(); - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.workareaset") + " " - + chunkRangeConfig - + "x" - + chunkRangeConfig - + StatCollector.translateToLocal("GT5U.machines.chunks")); // TODO Add translation support - } - - @Override - protected boolean checkHatches() { - return !mMaintenanceHatches.isEmpty() && !mOutputHatches.isEmpty() && mEnergyHatches.size() == 1; - } - - @Override - protected List> getAllowedHatches() { - return ImmutableList.of(InputBus, OutputHatch, Maintenance, Energy); - } - - @Override - protected void setElectricityStats() { - this.mEfficiency = getCurrentEfficiency(null); - this.mEfficiencyIncrease = 10000; - int tier = Math.max(0, GT_Utility.getTier(getMaxInputVoltage())); - this.mEUt = -7 << (tier << 1); // (1/4) A of current tier when at bottom (7/8) A of current tier while mining - this.mMaxProgresstime = Math.max( - 1, - (workState == STATE_AT_BOTTOM ? (64 * (chunkRangeConfig * chunkRangeConfig)) >> (getMinTier() - 1) : 120) - >> tier); - } - - protected float computeSpeed() { - return .5F + (GT_Utility.getTier(getMaxInputVoltage()) - getMinTier()) * .25F; - } - - @Override - protected boolean workingAtBottom(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, - int yHead, int oldYHead) { - switch (tryLowerPipeState(true)) { - case 0 -> { - workState = STATE_DOWNWARD; - setElectricityStats(); - return true; - } - case 3 -> { - workState = STATE_UPWARD; - return true; - } - } - - if (reachingVoidOrBedrock() && tryFillChunkList()) { - if (mWorkChunkNeedsReload) { - mCurrentChunk = new ChunkCoordIntPair(xDrill >> 4, zDrill >> 4); - GT_ChunkManager.requestChunkLoad((TileEntity) getBaseMetaTileEntity(), null); - mWorkChunkNeedsReload = false; - } - float speed = computeSpeed(); - ValidationResult pumpResult = tryPumpOil(speed); - if (pumpResult.getType() != ValidationType.VALID) { - mEUt = 0; - mMaxProgresstime = 0; - setRuntimeFailureReason(CheckRecipeResultRegistry.FLUID_OUTPUT_FULL); - return false; - } - FluidStack tFluid = pumpResult.getResult(); - if (tFluid != null && tFluid.amount > getTotalConfigValue()) { - this.mOutputFluids = new FluidStack[] { tFluid }; - return true; - } - } - GT_ChunkManager.releaseTicket((TileEntity) getBaseMetaTileEntity()); - workState = STATE_UPWARD; - setShutdownReason(StatCollector.translateToLocal("GT5U.gui.text.drill_exhausted")); - return true; - } - - private boolean tryFillChunkList() { - FluidStack tFluid, tOil; - if (mOilId <= 0) { - tFluid = undergroundOilReadInformation(getBaseMetaTileEntity()); - if (tFluid == null) return false; - mOilId = tFluid.getFluidID(); - } - if (debugDriller) { - GT_Log.out.println(" Driller on fluid = " + mOilId); - } - - tOil = new FluidStack(FluidRegistry.getFluid(mOilId), 0); - - if (mOilFieldChunks.isEmpty()) { - Chunk tChunk = getBaseMetaTileEntity().getWorld() - .getChunkFromBlockCoords(getBaseMetaTileEntity().getXCoord(), getBaseMetaTileEntity().getZCoord()); - int range = chunkRangeConfig; - int xChunk = Math.floorDiv(tChunk.xPosition, range) * range; // Java was written by idiots. For negative - // values, / returns rounded towards zero. - // Fucking morons. - int zChunk = Math.floorDiv(tChunk.zPosition, range) * range; - if (debugDriller) { - GT_Log.out.println( - "tChunk.xPosition = " + tChunk.xPosition - + " tChunk.zPosition = " - + tChunk.zPosition - + " xChunk = " - + xChunk - + " zChunk = " - + zChunk); - } - for (int i = 0; i < range; i++) { - for (int j = 0; j < range; j++) { - if (debugDriller) { - GT_Log.out.println(" getChunkX = " + (xChunk + i) + " getChunkZ = " + (zChunk + j)); - } - tChunk = getBaseMetaTileEntity().getWorld() - .getChunkFromChunkCoords(xChunk + i, zChunk + j); - tFluid = undergroundOilReadInformation(tChunk); - if (debugDriller) { - GT_Log.out.println( - " Fluid in chunk = " + tFluid.getFluid() - .getID()); - } - if (tOil.isFluidEqual(tFluid) && tFluid.amount > 0) { - mOilFieldChunks.add(tChunk); - if (debugDriller) { - GT_Log.out.println(" Matching fluid, quantity = " + tFluid.amount); - } - } - } - } - } - if (debugDriller) { - GT_Log.out.println("mOilFieldChunks.size = " + mOilFieldChunks.size()); - } - return !mOilFieldChunks.isEmpty(); - } - - /** - * Tries to pump oil, accounting for output space if void protection is enabled. - *

- * If pumped fluid will not fit in output hatches, it returns a result with INVALID. - *

- * If vein is depleted, it returns a result with VALID and null fluid. - */ - protected ValidationResult tryPumpOil(float speed) { - if (mOilId <= 0) return null; - if (debugDriller) { - GT_Log.out.println(" pump speed = " + speed); - } - - // Even though it works fine without this check, - // it can save tiny amount of CPU time when void protection is disabled - if (protectsExcessFluid()) { - FluidStack simulatedOil = pumpOil(speed, true); - if (!canOutputAll(new FluidStack[] { simulatedOil })) { - return ValidationResult.of(ValidationType.INVALID, null); - } - } - - FluidStack pumpedOil = pumpOil(speed, false); - mOilFlow = pumpedOil.amount; - return ValidationResult.of(ValidationType.VALID, pumpedOil.amount == 0 ? null : pumpedOil); - } - - /** - * @param speed Speed to pump oil - * @param simulate If true, it actually does not consume vein - * @return Fluid pumped - */ - protected FluidStack pumpOil(@Nonnegative float speed, boolean simulate) { - if (speed < 0) { - throw new IllegalArgumentException("Don't pass negative speed"); - } - - ArrayList emptyChunks = new ArrayList<>(); - FluidStack returnOil = new FluidStack(FluidRegistry.getFluid(mOilId), 0); - - for (Chunk tChunk : mOilFieldChunks) { - FluidStack pumped = undergroundOil(tChunk, simulate ? -speed : speed); - if (debugDriller) { - GT_Log.out.println( - " chunkX = " + tChunk.getChunkCoordIntPair().chunkXPos - + " chunkZ = " - + tChunk.getChunkCoordIntPair().chunkZPos); - if (pumped != null) { - GT_Log.out.println(" Fluid pumped = " + pumped.amount); - } else { - GT_Log.out.println(" No fluid pumped "); - } - } - if (pumped == null || pumped.amount < 1) { - emptyChunks.add(tChunk); - continue; - } - if (returnOil.isFluidEqual(pumped)) { - returnOil.amount += pumped.amount; - } - } - for (Chunk tChunk : emptyChunks) { - mOilFieldChunks.remove(tChunk); - } - return returnOil; - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_PUMP_OP; - } - - @Override - public String[] getInfoData() { - List l = new ArrayList<>( - Arrays.asList( - EnumChatFormatting.BLUE + StatCollector.translateToLocal("GT5U.machines.oilfluidpump") - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.machines.workarea") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(chunkRangeConfig) - + " x " - + GT_Utility.formatNumbers(chunkRangeConfig) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.machines.chunks"), - "Drilling fluid: " + EnumChatFormatting.GREEN + getFluidName() + EnumChatFormatting.RESET, - "Drilling flow: " + EnumChatFormatting.GREEN - + getFlowRatePerTick() - + EnumChatFormatting.RESET - + " L/t")); - l.addAll(Arrays.asList(super.getInfoData())); - return l.toArray(new String[0]); - } - - @Override - public @NotNull List reportMetrics() { - final boolean machineIsActive = getBaseMetaTileEntity().isActive(); - final String failureReason = getFailureReason() - .map(reason -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_reason", reason)) - .orElseGet(() -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_generic")); - - if (workState == STATE_AT_BOTTOM) { - final ImmutableList.Builder builder = ImmutableList.builder(); - builder.add(StatCollector.translateToLocalFormatted("GT5U.gui.text.pump_fluid_type", getFluidName())); - - if (machineIsActive) { - builder.add( - StatCollector.translateToLocalFormatted( - "GT5U.gui.text.pump_rate.1", - EnumChatFormatting.AQUA + numberFormat.format(getFlowRatePerTick())) - + StatCollector.translateToLocal("GT5U.gui.text.pump_rate.2"), - mOilFlow + StatCollector.translateToLocal("GT5U.gui.text.pump_recovery.2")); - } else { - builder.add(failureReason); - } - - return builder.build(); - } - - if (machineIsActive) { - return switch (workState) { - case STATE_DOWNWARD -> ImmutableList.of(StatCollector.translateToLocal("GT5U.gui.text.deploying_pipe")); - case STATE_UPWARD, STATE_ABORT -> ImmutableList - .of(StatCollector.translateToLocal("GT5U.gui.text.retracting_pipe")); - default -> ImmutableList.of(); - }; - } - - return ImmutableList.of(failureReason); - } - - protected int getFlowRatePerTick() { - return this.mMaxProgresstime > 0 ? (mOilFlow / this.mMaxProgresstime) : 0; - } - - @NotNull - private String getFluidName() { - if (mOilId > 0) { - final Fluid fluid = FluidRegistry.getFluid(mOilId); - return fluid.getLocalizedName(new FluidStack(fluid, 0)); - } - return "None"; - } - - private @NotNull String clientFluidType = ""; - private int clientFlowPerTick = 0; - private int clientFlowPerOperation = 0; - - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - screenElements - .widget( - new TextWidget() - .setStringSupplier( - () -> EnumChatFormatting.GRAY - + StatCollector.translateToLocalFormatted("GT5U.gui.text.pump_fluid_type", clientFluidType)) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_AT_BOTTOM)) - .widget( - new TextWidget() - .setStringSupplier( - () -> EnumChatFormatting.GRAY - + StatCollector.translateToLocalFormatted( - "GT5U.gui.text.pump_rate.1", - EnumChatFormatting.AQUA + numberFormat.format(clientFlowPerTick)) - + EnumChatFormatting.GRAY - + StatCollector.translateToLocal("GT5U.gui.text.pump_rate.2")) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_AT_BOTTOM)) - .widget( - new TextWidget() - .setStringSupplier( - () -> EnumChatFormatting.GRAY - + StatCollector.translateToLocalFormatted( - "GT5U.gui.text.pump_recovery.1", - EnumChatFormatting.AQUA + numberFormat.format(clientFlowPerOperation)) - + EnumChatFormatting.GRAY - + StatCollector.translateToLocal("GT5U.gui.text.pump_recovery.2")) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_AT_BOTTOM)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> workState, newInt -> workState = newInt)) - .widget(new FakeSyncWidget.StringSyncer(this::getFluidName, newString -> clientFluidType = newString)) - .widget(new FakeSyncWidget.IntegerSyncer(this::getFlowRatePerTick, newInt -> clientFlowPerTick = newInt)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> mOilFlow, newInt -> clientFlowPerOperation = newInt)); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillInfinite.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillInfinite.java deleted file mode 100644 index 056577e8e8..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillInfinite.java +++ /dev/null @@ -1,87 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.GT_Values.VN; - -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_OilDrillInfinite extends GT_MetaTileEntity_OilDrillBase { - - public GT_MetaTileEntity_OilDrillInfinite(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_OilDrillInfinite(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - String casings = getCasingBlockItem().get(0) - .getDisplayName(); - - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Pump") - .addInfo("Controller Block for the Infinite Oil/Gas/Fluid Drilling Rig ") - .addInfo("Works on " + getRangeInChunks() + "x" + getRangeInChunks() + " chunks") - .addSeparator() - .beginStructureBlock(3, 7, 3, false) - .addController("Front bottom") - .addOtherStructurePart(casings, "form the 3x1x3 Base") - .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") - .addOtherStructurePart(getFrameMaterial().mName + " Frame Boxes", "Each pillar's side and 1x3x1 on top") - .addEnergyHatch("1x " + VN[getMinTier()] + "+, Any base casing", 1) - .addMaintenanceHatch("Any base casing", 1) - .addInputBus("Mining Pipes or Circuits, optional, any base casing", 1) - .addOutputHatch("Any base casing", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_OilDrillInfinite(mName); - } - - @Override - protected FluidStack pumpOil(float speed, boolean simulate) { - // always simulate to not deplete vein - return super.pumpOil(speed, true); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_MiningNeutronium; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.Neutronium; - } - - @Override - protected int getCasingTextureIndex() { - return 178; - } - - @Override - protected int getRangeInChunks() { - return 8; - } - - @Override - protected float computeSpeed() { - return .5F + (GT_Utility.getTier(getMaxInputVoltage()) - getMinTier() + 5) * .25F; - } - - @Override - protected int getMinTier() { - return 9; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant1.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant1.java deleted file mode 100644 index 50edf8928a..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant1.java +++ /dev/null @@ -1,60 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_OreDrillingPlant1 extends GT_MetaTileEntity_OreDrillingPlantBase { - - public GT_MetaTileEntity_OreDrillingPlant1(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - mTier = 1; - } - - public GT_MetaTileEntity_OreDrillingPlant1(String aName) { - super(aName); - mTier = 1; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - return createTooltip("I"); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_OreDrillingPlant1(mName); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_SolidSteel; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.Steel; - } - - @Override - protected int getCasingTextureIndex() { - return 16; - } - - @Override - protected int getRadiusInChunks() { - return 3; - } - - @Override - protected int getMinTier() { - return 2; - } - - @Override - protected int getBaseProgressTime() { - return 960; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant2.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant2.java deleted file mode 100644 index 6a80c96d26..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant2.java +++ /dev/null @@ -1,60 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_OreDrillingPlant2 extends GT_MetaTileEntity_OreDrillingPlantBase { - - public GT_MetaTileEntity_OreDrillingPlant2(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - mTier = 2; - } - - public GT_MetaTileEntity_OreDrillingPlant2(String aName) { - super(aName); - mTier = 2; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - return createTooltip("II"); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_OreDrillingPlant2(mName); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_StableTitanium; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.Titanium; - } - - @Override - protected int getCasingTextureIndex() { - return 50; - } - - @Override - protected int getRadiusInChunks() { - return 4; - } - - @Override - protected int getMinTier() { - return 3; - } - - @Override - protected int getBaseProgressTime() { - return 800; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant3.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant3.java deleted file mode 100644 index 2bb25b2254..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant3.java +++ /dev/null @@ -1,60 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_OreDrillingPlant3 extends GT_MetaTileEntity_OreDrillingPlantBase { - - public GT_MetaTileEntity_OreDrillingPlant3(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - mTier = 3; - } - - public GT_MetaTileEntity_OreDrillingPlant3(String aName) { - super(aName); - mTier = 3; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - return createTooltip("III"); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_OreDrillingPlant3(mName); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_RobustTungstenSteel; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.TungstenSteel; - } - - @Override - protected int getCasingTextureIndex() { - return 48; - } - - @Override - protected int getRadiusInChunks() { - return 6; - } - - @Override - protected int getMinTier() { - return 4; - } - - @Override - protected int getBaseProgressTime() { - return 640; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant4.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant4.java deleted file mode 100644 index 7ba26b9500..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlant4.java +++ /dev/null @@ -1,60 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_OreDrillingPlant4 extends GT_MetaTileEntity_OreDrillingPlantBase { - - public GT_MetaTileEntity_OreDrillingPlant4(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - mTier = 4; - } - - public GT_MetaTileEntity_OreDrillingPlant4(String aName) { - super(aName); - mTier = 4; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - return createTooltip("IV"); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_OreDrillingPlant4(mName); - } - - @Override - protected ItemList getCasingBlockItem() { - return ItemList.Casing_MiningOsmiridium; - } - - @Override - protected Materials getFrameMaterial() { - return Materials.Osmiridium; - } - - @Override - protected int getCasingTextureIndex() { - return 62; - } - - @Override - protected int getRadiusInChunks() { - return 9; - } - - @Override - protected int getMinTier() { - return 5; - } - - @Override - protected int getBaseProgressTime() { - return 480; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java deleted file mode 100644 index b60bac4f84..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OreDrillingPlantBase.java +++ /dev/null @@ -1,794 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_Values.TIER_COLORS; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraft.world.ChunkPosition; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.widgets.GT_LockedWhileActiveButton; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.metatileentity.IMetricsExporter; -import gregtech.api.objects.GT_ChunkManager; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_TileEntity_Ores; -import gregtech.crossmod.visualprospecting.GT_VisualProspecting_Database; - -public abstract class GT_MetaTileEntity_OreDrillingPlantBase extends GT_MetaTileEntity_DrillerBase - implements IMetricsExporter { - - private final List oreBlockPositions = new ArrayList<>(); - protected int mTier = 1; - private int chunkRadiusConfig = getRadiusInChunks(); - private boolean replaceWithCobblestone = true; - - /** Used to drive the remaining ores count in the UI. */ - private int clientOreListSize = 0; - - /** Used to drive the current chunk number in the UI. */ - private int clientCurrentChunk = 0; - - /** Used to drive the total chunk count in the UI. */ - private int clientTotalChunks = 0; - - /** Used to drive the drill's y-level in the UI. */ - private int clientYHead = 0; - - /** Contains the name of the currently mined vein. Used for driving metrics cover output. */ - private String veinName = null; - - GT_MetaTileEntity_OreDrillingPlantBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - GT_MetaTileEntity_OreDrillingPlantBase(String aName) { - super(aName); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("chunkRadiusConfig", chunkRadiusConfig); - aNBT.setBoolean("replaceWithCobblestone", replaceWithCobblestone); - if (veinName != null) { - aNBT.setString("veinName", veinName); - } else if (aNBT.hasKey("veinName")) { - aNBT.removeTag("veinName"); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("chunkRadiusConfig")) { - chunkRadiusConfig = aNBT.getInteger("chunkRadiusConfig"); - } - if (aNBT.hasKey("replaceWithCobblestone")) { - replaceWithCobblestone = aNBT.getBoolean("replaceWithCobblestone"); - } - if (aNBT.hasKey("veinName")) { - veinName = aNBT.getString("veinName"); - } else { - veinName = null; - } - } - - private void adjustChunkRadius(boolean increase) { - if (increase) { - if (chunkRadiusConfig <= getRadiusInChunks()) { - chunkRadiusConfig++; - } - if (chunkRadiusConfig > getRadiusInChunks()) chunkRadiusConfig = 1; - } else { - if (chunkRadiusConfig > 0) { - chunkRadiusConfig--; - } - if (chunkRadiusConfig == 0) chunkRadiusConfig = getRadiusInChunks(); - } - - if (mCurrentChunk != null && mChunkLoadingEnabled) { - GT_ChunkManager.releaseChunk((TileEntity) getBaseMetaTileEntity(), mCurrentChunk); - } - - oreBlockPositions.clear(); - createInitialWorkingChunk(); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - - if (getBaseMetaTileEntity().isActive()) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("GT5U.machines.workarea_fail")); - } else { - adjustChunkRadius(!aPlayer.isSneaking()); - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.workareaset") + " " - + GT_Utility.formatNumbers((long) chunkRadiusConfig << 4) - + " " - + StatCollector.translateToLocal("GT5U.machines.radius")); - } - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - replaceWithCobblestone = !replaceWithCobblestone; - GT_Utility.sendChatToPlayer(aPlayer, "Replace with cobblestone " + replaceWithCobblestone); - return true; - } - - @Override - protected boolean workingDownward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, - int yHead, int oldYHead) { - if (yHead != oldYHead) oreBlockPositions.clear(); - - if (mWorkChunkNeedsReload && mChunkLoadingEnabled) { // ask to load machine itself - GT_ChunkManager.requestChunkLoad((TileEntity) getBaseMetaTileEntity(), null); - mWorkChunkNeedsReload = false; - } - fillMineListIfEmpty(xDrill, yDrill, zDrill, xPipe, zPipe, yHead); - if (oreBlockPositions.isEmpty()) { - if (veinName == null) { - updateVeinNameFromVP(getDrillCoords()); - } - - switch (tryLowerPipeState()) { - case 2 -> { - mMaxProgresstime = 0; - setRuntimeFailureReason(CheckRecipeResultRegistry.MISSING_MINING_PIPE); - return false; - } - case 3 -> { - workState = STATE_UPWARD; - return true; - } - case 1 -> { - workState = STATE_AT_BOTTOM; - return true; - } - } - // new layer - fill again - fillMineListIfEmpty(xDrill, yDrill, zDrill, xPipe, zPipe, yHead); - } - return tryProcessOreList(); - } - - private boolean tryProcessOreList() { - // Even though it works fine without this check, - // it can save tiny amount of CPU time when void protection is disabled - if (protectsExcessItem()) { - boolean simulateResult = processOreList(true); - if (!simulateResult) { - mEUt = 0; - mMaxProgresstime = 0; - return false; - } - } - - boolean result = processOreList(false); - if (!result) { - mEUt = 0; - mMaxProgresstime = 0; - return false; - } - return true; - } - - private boolean processOreList(boolean simulate) { - ChunkPosition oreBlockPos = null; - List oreBlockPositions = simulate ? copyOreBlockPositions(this.oreBlockPositions) - : this.oreBlockPositions; - int x = 0, y = 0, z = 0; - Block oreBlock = null; - int oreBlockMetadata = 0; - - while ((oreBlock == null || !GT_Utility.isOre(oreBlock, oreBlockMetadata)) && !oreBlockPositions.isEmpty()) { - oreBlockPos = oreBlockPositions.remove(0); - x = oreBlockPos.chunkPosX; - y = oreBlockPos.chunkPosY; - z = oreBlockPos.chunkPosZ; - if (GT_Utility.eraseBlockByFakePlayer(getFakePlayer(getBaseMetaTileEntity()), x, y, z, true)) - oreBlock = getBaseMetaTileEntity().getBlock(x, y, z); - oreBlockMetadata = getBaseMetaTileEntity().getWorld() - .getBlockMetadata(x, y, z); - } - - if (!tryConsumeDrillingFluid(simulate)) { - oreBlockPositions.add(0, oreBlockPos); - setRuntimeFailureReason(CheckRecipeResultRegistry.NO_DRILLING_FLUID); - return false; - } - if (oreBlock != null && GT_Utility.isOre(oreBlock, oreBlockMetadata)) { - short metaData = 0; - TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntity(x, y, z); - if (tTileEntity instanceof GT_TileEntity_Ores) { - metaData = ((GT_TileEntity_Ores) tTileEntity).mMetaData; - } - - Collection oreBlockDrops = getBlockDrops(oreBlock, x, y, z); - ItemStack cobble = GT_Utility.getCobbleForOre(oreBlock, metaData); - if (!simulate) { - if (replaceWithCobblestone) { - getBaseMetaTileEntity().getWorld() - .setBlock(x, y, z, Block.getBlockFromItem(cobble.getItem()), cobble.getItemDamage(), 3); - } else { - getBaseMetaTileEntity().getWorld() - .setBlockToAir(oreBlockPos.chunkPosX, oreBlockPos.chunkPosY, oreBlockPos.chunkPosZ); - } - } - ItemStack[] toOutput = getOutputByDrops(oreBlockDrops); - if (simulate && !canOutputAll(toOutput)) { - setRuntimeFailureReason(CheckRecipeResultRegistry.ITEM_OUTPUT_FULL); - return false; - } - mOutputItems = toOutput; - } - return true; - } - - private static List copyOreBlockPositions(List oreBlockPositions) { - List ret = new ArrayList<>(); - for (ChunkPosition chunkPosition : oreBlockPositions) { - ret.add(new ChunkPosition(chunkPosition.chunkPosX, chunkPosition.chunkPosY, chunkPosition.chunkPosZ)); - } - return ret; - } - - @Override - protected boolean workingAtBottom(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, - int yHead, int oldYHead) { - if (!mChunkLoadingEnabled) - return super.workingAtBottom(aStack, xDrill, yDrill, zDrill, xPipe, zPipe, yHead, oldYHead); - - if (mCurrentChunk == null) { - createInitialWorkingChunk(); - return true; - } - - if (mWorkChunkNeedsReload) { - GT_ChunkManager.requestChunkLoad((TileEntity) getBaseMetaTileEntity(), mCurrentChunk); - mWorkChunkNeedsReload = false; - return true; - } - if (oreBlockPositions.isEmpty()) { - fillChunkMineList(yHead, yDrill); - if (oreBlockPositions.isEmpty()) { - GT_ChunkManager.releaseChunk((TileEntity) getBaseMetaTileEntity(), mCurrentChunk); - if (!moveToNextChunk(xDrill >> 4, zDrill >> 4)) { - workState = STATE_UPWARD; - updateVeinNameFromVP(); - } - return true; - } - } - return tryProcessOreList(); - } - - private void createInitialWorkingChunk() { - mCurrentChunk = getTopLeftChunkCoords(); - updateVeinNameFromVP(); - if (mChunkLoadingEnabled) { - GT_ChunkManager.requestChunkLoad((TileEntity) getBaseMetaTileEntity(), mCurrentChunk); - mWorkChunkNeedsReload = false; - } - } - - @NotNull - private ChunkCoordIntPair getTopLeftChunkCoords() { - return getCornerCoords(-1, -1); - } - - @NotNull - private ChunkCoordIntPair getBottomRightChunkCoords() { - return getCornerCoords(1, 1); - } - - @NotNull - private ChunkCoordIntPair getCornerCoords(int xMultiplier, int zMultiplier) { - final ChunkCoordIntPair drillPos = getDrillCoords(); - // use corner closest to the drill as mining area center - return new ChunkCoordIntPair( - drillPos.chunkXPos + xMultiplier * chunkRadiusConfig - + ((getXDrill() - (drillPos.chunkXPos << 4)) < 8 ? 0 : 1), - drillPos.chunkZPos + zMultiplier * chunkRadiusConfig - + ((getZDrill() - (drillPos.chunkZPos << 4)) < 8 ? 0 : 1)); - } - - @NotNull - private ChunkCoordIntPair getDrillCoords() { - return new ChunkCoordIntPair(getXDrill() >> 4, getZDrill() >> 4); - } - - private int getTotalChunkCount() { - final ChunkCoordIntPair topLeft = getTopLeftChunkCoords(); - final ChunkCoordIntPair bottomRight = getBottomRightChunkCoords(); - return (bottomRight.chunkXPos - topLeft.chunkXPos) * (bottomRight.chunkZPos - topLeft.chunkZPos); - } - - /** - * Returns a number corresponding to which chunk the drill is operating on. Only really useful for driving outputs - * in the controller UI. - * - * @return 0 if the miner is not in operation, positive integer corresponding to the chunk currently being drilled - */ - @SuppressWarnings("ExtractMethodRecommender") - private int getChunkNumber() { - if (mCurrentChunk == null) { - return 0; - } - - final ChunkCoordIntPair topLeft = getTopLeftChunkCoords(); - final ChunkCoordIntPair drillPos = getDrillCoords(); - - if (workState == STATE_DOWNWARD) { - return 1; - } else if (workState == STATE_UPWARD) { - // Technically, the miner isn't mining anything now; it's retracting the pipes in preparation to end - // operation. - return 0; - } - - int chunkNumber = (chunkRadiusConfig * 2) * (mCurrentChunk.chunkZPos - topLeft.chunkZPos) - + mCurrentChunk.chunkXPos - - topLeft.chunkXPos - + 1; - - // Drills mine the chunk they're in first, so if we're not there yet, bump the number to indicate that it - // was already mined. - if (mCurrentChunk.chunkZPos < drillPos.chunkZPos - || (mCurrentChunk.chunkZPos == drillPos.chunkZPos && mCurrentChunk.chunkXPos < drillPos.chunkXPos)) { - chunkNumber += 1; - } - return chunkNumber; - } - - @Override - protected boolean workingUpward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, - int yHead, int oldYHead) { - boolean result; - if (!mChunkLoadingEnabled || oreBlockPositions.isEmpty()) { - result = super.workingUpward(aStack, xDrill, yDrill, zDrill, xPipe, zPipe, yHead, oldYHead); - } else { - result = tryProcessOreList(); - if (oreBlockPositions.isEmpty()) GT_ChunkManager.releaseTicket((TileEntity) getBaseMetaTileEntity()); - } - - if (!result) { - setShutdownReason(StatCollector.translateToLocal("GT5U.gui.text.drill_exhausted")); - } - - return result; - } - - @Override - protected void onAbort() { - oreBlockPositions.clear(); - if (mCurrentChunk != null) { - GT_ChunkManager.releaseChunk((TileEntity) getBaseMetaTileEntity(), mCurrentChunk); - } - mCurrentChunk = null; - updateVeinNameFromVP(); - } - - private boolean moveToNextChunk(int centerX, int centerZ) { - if (mCurrentChunk == null) return false; - // use corner closest to the drill as mining area center - final int left = centerX - chunkRadiusConfig + ((getXDrill() - (centerX << 4)) < 8 ? 0 : 1); - final int right = left + chunkRadiusConfig * 2; - final int bottom = centerZ + chunkRadiusConfig + ((getZDrill() - (centerZ << 4)) < 8 ? 0 : 1); - - int nextChunkX = mCurrentChunk.chunkXPos + 1; - int nextChunkZ = mCurrentChunk.chunkZPos; - - // step to the next chunk - if (nextChunkX >= right) { - nextChunkX = left; - ++nextChunkZ; - } - // skip center chunk - dug in workingDownward() - if (nextChunkX == centerX && nextChunkZ == centerZ) { - ++nextChunkX; - - if (nextChunkX >= right) { - nextChunkX = left; - ++nextChunkZ; - } - } - - if (nextChunkZ >= bottom) { - mCurrentChunk = null; - return false; - } - - mCurrentChunk = new ChunkCoordIntPair(nextChunkX, nextChunkZ); - updateVeinNameFromVP(); - - GT_ChunkManager - .requestChunkLoad((TileEntity) getBaseMetaTileEntity(), new ChunkCoordIntPair(nextChunkX, nextChunkZ)); - return true; - } - - private void updateVeinNameFromVP() { - updateVeinNameFromVP(mCurrentChunk); - } - - private void updateVeinNameFromVP(@NotNull ChunkCoordIntPair coords) { - veinName = GT_VisualProspecting_Database - .getVeinName(getBaseMetaTileEntity().getWorld().provider.dimensionId, coords) - .orElse(null); - } - - @Override - protected boolean checkHatches() { - return !mMaintenanceHatches.isEmpty() && !mInputHatches.isEmpty() - && !mOutputBusses.isEmpty() - && !mEnergyHatches.isEmpty(); - } - - @Override - protected List> getAllowedHatches() { - return ImmutableList.of(InputHatch, InputBus, OutputBus, Maintenance, Energy); - } - - @Override - protected void setElectricityStats() { - this.mEfficiency = getCurrentEfficiency(null); - this.mEfficiencyIncrease = 10000; - int tier = Math.max(1, GT_Utility.getTier(getMaxInputVoltage())); - this.mEUt = -3 * (1 << (tier << 1)); - this.mMaxProgresstime = calculateMaxProgressTime(tier); - } - - private int calculateMaxProgressTime(int tier) { - return Math.max( - 1, - ((workState == STATE_DOWNWARD || workState == STATE_AT_BOTTOM) ? getBaseProgressTime() : 80) / (1 << tier)); - } - - private ItemStack[] getOutputByDrops(Collection oreBlockDrops) { - long voltage = getMaxInputVoltage(); - Collection outputItems = new HashSet<>(); - oreBlockDrops.forEach(currentItem -> { - if (!doUseMaceratorRecipe(currentItem)) { - outputItems.add(multiplyStackSize(currentItem)); - return; - } - GT_Recipe tRecipe = RecipeMaps.maceratorRecipes - .findRecipe(getBaseMetaTileEntity(), false, voltage, null, currentItem); - if (tRecipe == null) { - outputItems.add(currentItem); - return; - } - for (int i = 0; i < tRecipe.mOutputs.length; i++) { - ItemStack recipeOutput = tRecipe.mOutputs[i].copy(); - if (getBaseMetaTileEntity().getRandomNumber(10000) < tRecipe.getOutputChance(i)) - multiplyStackSize(recipeOutput); - outputItems.add(recipeOutput); - } - }); - return outputItems.toArray(new ItemStack[0]); - } - - private boolean doUseMaceratorRecipe(ItemStack currentItem) { - ItemData itemData = GT_OreDictUnificator.getItemData(currentItem); - return itemData == null || itemData.mPrefix != OrePrefixes.crushed && itemData.mPrefix != OrePrefixes.dustImpure - && itemData.mPrefix != OrePrefixes.dust - && itemData.mPrefix != OrePrefixes.gem - && itemData.mPrefix != OrePrefixes.gemChipped - && itemData.mPrefix != OrePrefixes.gemExquisite - && itemData.mPrefix != OrePrefixes.gemFlawed - && itemData.mPrefix != OrePrefixes.gemFlawless - && itemData.mMaterial.mMaterial != Materials.Oilsands; - } - - private ItemStack multiplyStackSize(ItemStack itemStack) { - itemStack.stackSize *= getBaseMetaTileEntity().getRandomNumber(4) + 1; - return itemStack; - } - - private Collection getBlockDrops(final Block oreBlock, int posX, int posY, int posZ) { - final int blockMeta = getBaseMetaTileEntity().getMetaID(posX, posY, posZ); - if (oreBlock.canSilkHarvest(getBaseMetaTileEntity().getWorld(), null, posX, posY, posZ, blockMeta)) { - return Collections.singleton(new ItemStack(oreBlock, 1, blockMeta)); - } - if (oreBlock instanceof GT_Block_Ores_Abstract) { - TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntity(posX, posY, posZ); - if (tTileEntity instanceof GT_TileEntity_Ores && ((GT_TileEntity_Ores) tTileEntity).mMetaData >= 16000) { - // GT_Log.out.println("Running Small Ore"); - return oreBlock.getDrops(getBaseMetaTileEntity().getWorld(), posX, posY, posZ, blockMeta, mTier + 3); - } - } - // GT_Log.out.println("Running Normal Ore"); - return oreBlock.getDrops(getBaseMetaTileEntity().getWorld(), posX, posY, posZ, blockMeta, 0); - } - - private boolean tryConsumeDrillingFluid(boolean simulate) { - return depleteInput(new FluidStack(ItemList.sDrillingFluid, 2000), simulate); - } - - private void fillChunkMineList(int yHead, int yDrill) { - if (mCurrentChunk == null || !oreBlockPositions.isEmpty()) return; - final int minX = mCurrentChunk.chunkXPos << 4; - final int maxX = minX + 16; - final int minZ = mCurrentChunk.chunkZPos << 4; - final int maxZ = minZ + 16; - for (int x = minX; x < maxX; ++x) - for (int z = minZ; z < maxZ; ++z) for (int y = yHead; y < yDrill; ++y) tryAddOreBlockToMineList(x, y, z); - } - - private void fillMineListIfEmpty(int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, int yHead) { - if (!oreBlockPositions.isEmpty()) return; - - tryAddOreBlockToMineList(xPipe, yHead - 1, zPipe); - if (yHead == yDrill) return; // skip controller block layer - - if (mChunkLoadingEnabled) { - int startX = (xDrill >> 4) << 4; - int startZ = (zDrill >> 4) << 4; - for (int x = startX; x < (startX + 16); ++x) - for (int z = startZ; z < (startZ + 16); ++z) tryAddOreBlockToMineList(x, yHead, z); - } else { - int radius = chunkRadiusConfig << 4; - for (int xOff = -radius; xOff <= radius; xOff++) for (int zOff = -radius; zOff <= radius; zOff++) - tryAddOreBlockToMineList(xDrill + xOff, yHead, zDrill + zOff); - } - } - - private void tryAddOreBlockToMineList(int x, int y, int z) { - Block block = getBaseMetaTileEntity().getBlock(x, y, z); - int blockMeta = getBaseMetaTileEntity().getMetaID(x, y, z); - ChunkPosition blockPos = new ChunkPosition(x, y, z); - if (!oreBlockPositions.contains(blockPos)) { - if (block instanceof GT_Block_Ores_Abstract) { - TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntity(x, y, z); - if (tTileEntity instanceof GT_TileEntity_Ores && ((GT_TileEntity_Ores) tTileEntity).mNatural) - oreBlockPositions.add(blockPos); - } else if (GT_Utility.isOre(block, blockMeta)) oreBlockPositions.add(blockPos); - } - } - - protected abstract int getRadiusInChunks(); - - protected abstract int getBaseProgressTime(); - - protected GT_Multiblock_Tooltip_Builder createTooltip(String tierSuffix) { - String casings = getCasingBlockItem().get(0) - .getDisplayName(); - - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - final int baseCycleTime = calculateMaxProgressTime(getMinTier()); - tt.addMachineType("Miner") - .addInfo("Controller Block for the Ore Drilling Plant " + (tierSuffix != null ? tierSuffix : "")) - .addInfo("Use a Screwdriver to configure block radius") - .addInfo("Maximum radius is " + GT_Utility.formatNumbers((long) getRadiusInChunks() << 4) + " blocks") - .addInfo("Use Soldering iron to turn off chunk mode") - .addInfo("Use Wire Cutter to toggle replacing mined blocks with cobblestone") - .addInfo("In chunk mode, working area center is the chunk corner nearest to the drill") - .addInfo("Gives ~3x as much crushed ore vs normal processing") - .addInfo("Fortune bonus of " + GT_Utility.formatNumbers(mTier + 3) + ". Only works on small ores") - .addInfo("Minimum energy hatch tier: " + TIER_COLORS[getMinTier()] + VN[getMinTier()]) - .addInfo( - "Base cycle time: " + (baseCycleTime < 20 ? GT_Utility.formatNumbers(baseCycleTime) + " ticks" - : GT_Utility.formatNumbers(baseCycleTime / 20) + " seconds")) - .addSeparator() - .beginStructureBlock(3, 7, 3, false) - .addController("Front bottom") - .addOtherStructurePart(casings, "form the 3x1x3 Base") - .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") - .addOtherStructurePart(getFrameMaterial().mName + " Frame Boxes", "Each pillar's side and 1x3x1 on top") - .addEnergyHatch(VN[getMinTier()] + "+, Any base casing", 1) - .addMaintenanceHatch("Any base casing", 1) - .addInputBus("Mining Pipes, optional, any base casing", 1) - .addInputHatch("Drilling Fluid, any base casing", 1) - .addOutputBus("Any base casing", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - screenElements - .widget( - new TextWidget() - .setStringSupplier( - () -> EnumChatFormatting.GRAY + StatCollector.translateToLocalFormatted( - "GT5U.gui.text.drill_ores_left_chunk", - numberFormat.format(clientOreListSize))) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled( - widget -> getBaseMetaTileEntity().isActive() && clientOreListSize > 0 - && workState == STATE_AT_BOTTOM)) - .widget( - new TextWidget() - .setStringSupplier( - () -> EnumChatFormatting.GRAY + StatCollector.translateToLocalFormatted( - "GT5U.gui.text.drill_ores_left_layer", - numberFormat.format(clientYHead), - numberFormat.format(clientOreListSize))) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled( - widget -> getBaseMetaTileEntity().isActive() && clientYHead > 0 && workState == STATE_DOWNWARD)) - .widget( - new TextWidget() - .setStringSupplier( - () -> EnumChatFormatting.GRAY + StatCollector.translateToLocalFormatted( - "GT5U.gui.text.drill_chunks_left", - numberFormat.format(clientCurrentChunk), - numberFormat.format(clientTotalChunks))) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled( - widget -> getBaseMetaTileEntity().isActive() && clientCurrentChunk > 0 - && workState == STATE_AT_BOTTOM)) - .widget( - new TextWidget() - .setStringSupplier( - () -> EnumChatFormatting.GRAY - + StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_current_vein", veinName)) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled( - widget -> veinName != null && (workState == STATE_AT_BOTTOM || workState == STATE_DOWNWARD))) - .widget(new FakeSyncWidget.IntegerSyncer(oreBlockPositions::size, (newInt) -> clientOreListSize = newInt)) - .widget(new FakeSyncWidget.IntegerSyncer(this::getTotalChunkCount, (newInt) -> clientTotalChunks = newInt)) - .widget(new FakeSyncWidget.IntegerSyncer(this::getChunkNumber, (newInt) -> clientCurrentChunk = newInt)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> workState, (newInt) -> workState = newInt)) - .widget(new FakeSyncWidget.IntegerSyncer(this::getYHead, (newInt) -> clientYHead = newInt)) - .widget(new FakeSyncWidget.StringSyncer(() -> veinName, (newString) -> veinName = newString)); - } - - @Override - protected List getAdditionalButtons(ModularWindow.Builder builder, UIBuildContext buildContext) { - return ImmutableList.of( - (ButtonWidget) new GT_LockedWhileActiveButton(this.getBaseMetaTileEntity(), builder) - .setOnClick((clickData, widget) -> adjustChunkRadius(clickData.mouseButton == 0)) - .setPlayClickSound(true) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_WORK_AREA) - .attachSyncer( - new FakeSyncWidget.IntegerSyncer(() -> chunkRadiusConfig, (val) -> chunkRadiusConfig = val), - builder, - (widget, val) -> widget.notifyTooltipChange()) - .dynamicTooltip( - () -> ImmutableList.of( - StatCollector.translateToLocalFormatted( - "GT5U.gui.button.ore_drill_radius_1", - GT_Utility.formatNumbers((long) chunkRadiusConfig << 4)), - StatCollector.translateToLocal("GT5U.gui.button.ore_drill_radius_2"))) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setSize(16, 16), - (ButtonWidget) new GT_LockedWhileActiveButton(this.getBaseMetaTileEntity(), builder) - .setOnClick((clickData, widget) -> replaceWithCobblestone = !replaceWithCobblestone) - .setPlayClickSound(true) - .setBackground(() -> { - if (replaceWithCobblestone) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_BUTTON_REPLACE_COBBLE_ON }; - } - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_REPLACE_COBBLE_OFF }; - }) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer( - () -> replaceWithCobblestone, - (val) -> replaceWithCobblestone = val), - builder, - (widget, val) -> widget.notifyTooltipChange()) - .dynamicTooltip( - () -> ImmutableList.of( - StatCollector.translateToLocal( - replaceWithCobblestone ? "GT5U.gui.button.ore_drill_cobblestone_on" - : "GT5U.gui.button.ore_drill_cobblestone_off"))) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setSize(16, 16)); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_MINER_OP; - } - - @Override - public String[] getInfoData() { - final String diameter = GT_Utility.formatNumbers(chunkRadiusConfig * 2L); - return new String[] { - EnumChatFormatting.BLUE + StatCollector.translateToLocal("GT5U.machines.minermulti") - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.machines.workarea") + ": " - + EnumChatFormatting.GREEN - + diameter - + "x" - + diameter - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.machines.chunks") }; - } - - @Override - public @NotNull List reportMetrics() { - if (getBaseMetaTileEntity().isActive()) { - return switch (workState) { - case STATE_AT_BOTTOM -> ImmutableList.of( - StatCollector.translateToLocalFormatted( - "GT5U.gui.text.drill_ores_left_chunk", - GT_Utility.formatNumbers(oreBlockPositions.size())), - StatCollector.translateToLocalFormatted( - "GT5U.gui.text.drill_chunks_left", - GT_Utility.formatNumbers(getChunkNumber()), - GT_Utility.formatNumbers(getTotalChunkCount())), - veinName == null ? "" - : StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_current_vein", veinName)); - case STATE_DOWNWARD -> ImmutableList.of( - StatCollector.translateToLocalFormatted( - "GT5U.gui.text.drill_ores_left_layer", - getYHead(), - GT_Utility.formatNumbers(oreBlockPositions.size())), - veinName == null ? "" - : StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_current_vein", veinName)); - case STATE_UPWARD, STATE_ABORT -> ImmutableList - .of(StatCollector.translateToLocal("GT5U.gui.text.retracting_pipe")); - - default -> ImmutableList.of(); - }; - } - - return ImmutableList.of( - getFailureReason() - .map(reason -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_reason", reason)) - .orElseGet(() -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_generic"))); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java deleted file mode 100644 index d07ad238a2..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java +++ /dev/null @@ -1,1290 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.ExoticEnergy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_Values.AuthorBlueWeabo; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; -import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; -import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; -import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import blockrenderer6343.client.world.ClientFakePlayer; -import cpw.mods.fml.common.Loader; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.GregTechTileClientEvents; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.recipe.metadata.PCBFactoryTierKey; -import gregtech.api.recipe.metadata.PCBFactoryUpgrade; -import gregtech.api.recipe.metadata.PCBFactoryUpgradeKey; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.blocks.GT_Block_Casings8; - -@SuppressWarnings("SpellCheckingInspection") -public class GT_MetaTileEntity_PCBFactory extends - GT_MetaTileEntity_ExtendedPowerMultiBlockBase implements ISurvivalConstructable { - - private static final String tier1 = "tier1"; - private static final String tier2 = "tier2"; - private static final String tier3 = "tier3"; - private static final String bioUpgrade = "bioUpgrade"; - private static final String ocTier1Upgrade = "ocTier1Upgrade"; - private static final String ocTier2Upgrade = "ocTier2Upgrade"; - private float mRoughnessMultiplier = 1; - private int mTier = 1, mSetTier = 1, mUpgradesInstalled = 0, mCurrentParallel = 0, mMaxParallel = 0; - private boolean mBioUpgrade = false, mBioRotate = false, mOCTier1 = false, mOCTier2 = false; - private final int[] mBioOffsets = new int[] { -5, -1 }; - private final int[] mOCTier1Offsets = new int[] { 2, -11 }; - private final int[] mOCTier2Offsets = new int[] { 2, -11 }; - private GT_MetaTileEntity_Hatch_Input mCoolantInputHatch; - private static final int mBioRotateBitMap = 0b1000000; - private static final int mOCTier2BitMap = 0b100000; - private static final int mOCTier1BitMap = 0b10000; - private static final int mBioBitMap = 0b1000; - private static final int mTier3BitMap = 0b100; - private static final int mTier2BitMap = 0b10; - private static final int mTier1BitMap = 0b1; - private static final int COOLANT_CONSUMED_PER_SEC = 10; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - tier1, - transpose( - new String[][] { - // spotless:off - {" ","E E","E E","EEEEEEE","E E","E E"," "}, - {"EEEEEEE","CAAAAAC","CAAAAAC","CCCCCCC","CCCCCCC","CCCCCCC","E E"}, - {"EAAAAAE","C-----C","C-----C","C-----C","C-----C","C-----C","ECCCCCE"}, - {"EAAAAAE","C-----C","B-----B","B-----B","B-----B","C-----C","ECCCCCE"}, - {"EAAAAAE","C-----C","B-FFF-B","B-FFF-B","B-FFF-B","C-----C","EPPPPPE"}, - {"ECC~CCE","CDDDDDC","CDDDDDC","CDDDDDC","CDDDDDC","CDDDDDC","EPPPPPE"} - //spotless:on - })) - .addShape( - tier2, - transpose( - new String[][] { - // spotless:off - {" "," "," ","HGGH","HGGH","HGGH","HGGH","HGGH"," "," "," "}, - {" "," ","HGGH","GGGG","GGGG","GGGG","GGGG","GGGG","HGGH"," "," "}, - {" ","HGGH","GGGG","G G","G G","G G","G G","G G","GGGG","HGGH"," "}, - {" ","HGGH","G G","G G","G G","G G","G G","G G","G G","HGGH"," "}, - {"HGGH","G G","G G","G G","G G","G G","G G","G G","G G","G G","HGGH"}, - {"HGGH","G G","G G","G G","G G","G G","G G","G G","G G","G G","HGGH"}, - {"HGGH","GGGG","GGGG","GGGG","GGGG","GGGG","GGGG","GGGG","GGGG","GGGG","HGGH"} - //spotless:on - })) - .addShape( - tier3, - transpose( - new String[][] { - // spotless:off - {" "," "," "," "," I "," I "," "," "," "," "}, - {" "," "," "," I "," I "," I "," I "," "," "," "}, - {" "," "," KKK "," KIK "," K K "," K K "," I "," "," "," "}, - {" "," "," KKK "," K K "," K K "," K K "," I "," "," "," "}, - {" "," III "," I I "," I I "," I I "," K K "," I "," "," "," "}, - {" "," III "," I I "," I I "," I I "," K K "," I "," "," "," "}, - {" "," III "," I I "," I I "," I I "," K K "," KIK "," "," "," "}, - {" "," I I "," I K I "," I I "," I I "," K K "," KIK "," "," "," "}, - {" "," I I "," I K I "," I I "," I I "," K K "," K K "," KKK "," "," "}, - {" "," I I "," I K I "," I I "," I I "," K K "," K K "," KKK "," "," "}, - {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, - {" "," III "," I I "," K K "," K K "," K K "," K K "," I I "," III "," "}, - {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, - {" "," "," KKK "," K K "," K K "," I I "," I I "," I I "," III "," "}, - {" "," "," KKK "," K K "," K K "," I I "," I I "," I I "," III "," "}, - {" "," "," KKK "," K K "," K K "," I I "," I I "," I I "," III "," "}, - {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, - {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, - {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, - {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, - {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, - {" II~II ","IIJJJII","IJJJJJI","IJJJJJI","IJJJJJI","IJJJJJI","IJJJJJI","IJJJJJI","IIJJJII"," IIIII "} - //spotless:on - })) - .addShape( - bioUpgrade, - transpose( - new String[][] { - // spotless:off - {" "," "," LLLLLL "," "," "}, - {" "," "," L L "," "," "}, - {"E E E E"," LLL LLL "," LLL LLL "," LLL LLL ","E E E E"}, - {"EAAAE EAAAE","A A A A","A A A A","A A A A","EAAAE EAAAE"}, - {"EAAAE EAAAE","A A A A","A A A A","A A A A","EAAAE EAAAE"}, - {"EAAAE EAAAE","A A A A","A A A A","A A A A","EAAAE EAAAE"}, - {"ELLLE ELLLE","LLLLL LLLLL","LLLLL LLLLL","LLLLL LLLLL","ELLLE ELLLE"} - //spotless:on - })) - .addShape( - ocTier1Upgrade, - transpose( - new String[][] { - // spotless:off - {"EKKKE","K K","K K","K K","EKKKE"}, - {"E E"," KKK "," K K "," KKK ","E E"}, - {"E E"," NNN "," N N "," NNN ","E E"}, - {"E E"," KKK "," K K "," KKK ","E E"}, - {"E E"," KKK "," K K "," KKK ","E E"}, - {"EOOOE","OKKKO","OK KO","OKKKO","EOOOE"}, - {"E E"," KKK "," K K "," KKK ","E E"}, - {"E E"," KKK "," K K "," KKK ","E E"}, - {"ENNNE","NKKKN","NK KN","NKKKN","ENNNE"}, - {"EGGGE","GGGGG","GGMGG","GGGGG","EGGGE"} - //spotless:on - })) - .addShape( - ocTier2Upgrade, - transpose( - new String[][] { - // spotless:off - {"RGGGR","G G","G G","G G","RGGGR"}, - {"R R"," GGG "," GTG "," GGG ","R R"}, - {"R R"," NNN "," NTN "," NNN ","R R"}, - {"R R"," QQQ "," QTQ "," QQQ ","R R"}, - {"R R"," QQQ "," QTQ "," QQQ ","R R"}, - {"R R"," QQQ "," QTQ "," QQQ ","R R"}, - {"R R"," QQQ "," QTQ "," QQQ ","R R"}, - {"R R"," QQQ "," QTQ "," QQQ ","R R"}, - {"RNNNR","NQQQN","NQTQN","NQQQN","RNNNR"}, - {"RGGGR","GGGGG","GGSGG","GGGGG","RGGGR"} - //spotless:on - })) - .addElement('E', ofFrame(Materials.DamascusSteel)) - .addElement('C', ofBlock(GregTech_API.sBlockCasings8, 11)) - .addElement('D', ofBlock(GregTech_API.sBlockReinforced, 2)) - .addElement('A', Glasses.chainAllGlasses()) - .addElement('B', ofBlock(GregTech_API.sBlockCasings3, 10)) - .addElement('F', ofFrame(Materials.VibrantAlloy)) - .addElement( - 'P', - buildHatchAdder(GT_MetaTileEntity_PCBFactory.class) - .atLeast(InputHatch, OutputBus, InputBus, Maintenance, Energy.or(ExoticEnergy)) - .dot(1) - .casingIndex(((GT_Block_Casings8) GregTech_API.sBlockCasings8).getTextureIndex(11)) - .buildAndChain(GregTech_API.sBlockCasings8, 11)) - .addElement('H', ofFrame(Materials.Duranium)) - .addElement('G', ofBlock(GregTech_API.sBlockCasings8, 12)) - .addElement('I', ofBlock(GregTech_API.sBlockCasings8, 13)) - .addElement('K', ofBlock(GregTech_API.sBlockCasings8, 10)) - .addElement( - 'J', - buildHatchAdder(GT_MetaTileEntity_PCBFactory.class) - .atLeast(InputHatch, OutputBus, InputBus, Maintenance, Energy.or(ExoticEnergy)) - .dot(1) - .casingIndex(((GT_Block_Casings8) GregTech_API.sBlockCasings8).getTextureIndex(13)) - .buildAndChain(GregTech_API.sBlockCasings8, 13)) - .addElement('L', ofBlock(GregTech_API.sBlockCasings4, 1)) - .addElement( - 'M', - buildHatchAdder(GT_MetaTileEntity_PCBFactory.class).hatchClass(GT_MetaTileEntity_Hatch_Input.class) - .adder(GT_MetaTileEntity_PCBFactory::addCoolantInputToMachineList) - .casingIndex(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings8, 12)) - .dot(2) - .buildAndChain(GregTech_API.sBlockCasings8, 12)) - .addElement('N', ofBlock(GregTech_API.sBlockCasings2, 15)) - .addElement('O', ofBlock(GregTech_API.sBlockCasings8, 4)) - .addElement( - 'S', - buildHatchAdder(GT_MetaTileEntity_PCBFactory.class).hatchClass(GT_MetaTileEntity_Hatch_Input.class) - .adder(GT_MetaTileEntity_PCBFactory::addCoolantInputToMachineList) - .casingIndex(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings8, 12)) - .dot(2) - .buildAndChain(GregTech_API.sBlockCasings8, 12)) - .addElement('R', ofFrame(Materials.Americium)) - .addElement('Q', ofBlock(GregTech_API.sBlockCasings8, 14)) - .addElement('T', ofBlock(GregTech_API.sBlockCasings1, 15)) - .build(); - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - if (mSetTier < 3) { - buildPiece(tier1, stackSize, hintsOnly, 3, 5, 0); - if (mSetTier == 2) { - buildPiece(tier2, stackSize, hintsOnly, 7, 6, 2); - } - } else { - buildPiece(tier3, stackSize, hintsOnly, 3, 21, 0); - } - - if (mBioUpgrade) { - if (mBioRotate) { - final IGregTechTileEntity tTile = getBaseMetaTileEntity(); - getStructureDefinition().buildOrHints( - this, - stackSize, - bioUpgrade, - tTile.getWorld(), - transformFacing(getExtendedFacing()), - tTile.getXCoord(), - tTile.getYCoord(), - tTile.getZCoord(), - mBioOffsets[1], - 6, - mBioOffsets[0], - hintsOnly); - } else { - buildPiece(bioUpgrade, stackSize, hintsOnly, mBioOffsets[0], 6, mBioOffsets[1]); - } - } - - if (mOCTier1 && !mOCTier2) { - buildPiece(ocTier1Upgrade, stackSize, hintsOnly, mOCTier1Offsets[0], 9, mOCTier1Offsets[1]); - } - - if (!mOCTier1 && mOCTier2) { - buildPiece(ocTier2Upgrade, stackSize, hintsOnly, mOCTier2Offsets[0], 9, mOCTier2Offsets[1]); - } - } - - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int built = 0; - if (Loader.isModLoaded("blockrenderer6343") && env.getActor() instanceof ClientFakePlayer) { - if (stackSize.stackSize < 3) { - built += survivialBuildPiece(tier1, stackSize, 3, 5, 0, elementBudget, env, false, false); - if (stackSize.stackSize == 2) { - built += survivialBuildPiece(tier2, stackSize, 7, 6, 2, elementBudget, env, false, false); - } - } else { - built += survivialBuildPiece(tier3, stackSize, 3, 21, 0, elementBudget, env, false, false); - } - return built; - } - if (mSetTier < 3) { - built += survivialBuildPiece(tier1, stackSize, 3, 5, 0, elementBudget, env, false, true); - if (mSetTier == 2) { - built += survivialBuildPiece(tier2, stackSize, 7, 6, 2, elementBudget, env, false, true); - } - } else { - built += survivialBuildPiece(tier3, stackSize, 3, 21, 0, elementBudget, env, false, true); - } - - if (mBioUpgrade) { - if (mBioRotate) { - final IGregTechTileEntity tTile = getBaseMetaTileEntity(); - getStructureDefinition().survivalBuild( - this, - stackSize, - bioUpgrade, - tTile.getWorld(), - transformFacing(getExtendedFacing()), - tTile.getXCoord(), - tTile.getYCoord(), - tTile.getZCoord(), - mBioOffsets[1], - 6, - mBioOffsets[0], - elementBudget, - env, - false); - } else { - built += survivialBuildPiece( - bioUpgrade, - stackSize, - mBioOffsets[0], - 6, - mBioOffsets[1], - elementBudget, - env, - false, - true); - } - } - - if (mOCTier1 && !mOCTier2) { - built += survivialBuildPiece( - ocTier1Upgrade, - stackSize, - mOCTier1Offsets[0], - 9, - mOCTier1Offsets[1], - elementBudget, - env, - false, - true); - } - if (!mOCTier1 && mOCTier2) { - built += survivialBuildPiece( - ocTier2Upgrade, - stackSize, - mOCTier2Offsets[0], - 9, - mOCTier2Offsets[1], - elementBudget, - env, - false, - true); - } - - return built; - } - - public GT_MetaTileEntity_PCBFactory(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PCBFactory(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PCBFactory(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection == facingDirection) { - if (active) - return new ITexture[] { - BlockIcons.getCasingTextureForId( - getTier() < 3 ? GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings8, 11) - : GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings8, 13)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { - BlockIcons.getCasingTextureForId( - getTier() < 3 ? GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings8, 11) - : GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings8, 13)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { BlockIcons.getCasingTextureForId( - mSetTier < 3 ? ((GT_Block_Casings8) GregTech_API.sBlockCasings8).getTextureIndex(11) - : ((GT_Block_Casings8) GregTech_API.sBlockCasings8).getTextureIndex(13)) }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mTier = 0; - mUpgradesInstalled = 0; - mCoolantInputHatch = null; - if (mSetTier < 3) { - if (!checkPiece(tier1, 3, 5, 0)) { - return false; - } - if (mSetTier == 2) { - if (!checkPiece(tier2, 7, 6, 2)) { - return false; - } - mTier = 2; - } else { - mTier = 1; - } - } else { - if (!checkPiece(tier3, 3, 21, 0)) { - return false; - } - mTier = 3; - } - - if (mBioUpgrade) { - if (mBioRotate) { - final IGregTechTileEntity tTile = getBaseMetaTileEntity(); - if (!getStructureDefinition().check( - this, - bioUpgrade, - tTile.getWorld(), - transformFacing(getExtendedFacing()), - tTile.getXCoord(), - tTile.getYCoord(), - tTile.getZCoord(), - mBioOffsets[1], - 6, - mBioOffsets[0], - !mMachine)) { - return false; - } - } else { - if (!checkPiece(bioUpgrade, mBioOffsets[0], 6, mBioOffsets[1])) { - return false; - } - } - mUpgradesInstalled++; - } - - if (mOCTier1 && !mOCTier2) { - if (!checkPiece(ocTier1Upgrade, mOCTier1Offsets[0], 9, mOCTier1Offsets[1])) { - return false; - } - if (mCoolantInputHatch == null) { - return false; - } - mUpgradesInstalled++; - } - - if (mOCTier2 && !mOCTier1) { - if (!checkPiece(ocTier2Upgrade, mOCTier2Offsets[0], 9, mOCTier2Offsets[1])) { - return false; - } - if (mCoolantInputHatch == null) { - return false; - } - mUpgradesInstalled++; - } - - getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); - - if (mMaintenanceHatches.size() != 1) { - return false; - } - - if (!checkExoticAndNormalEnergyHatches()) { - return false; - } - - return mTier > 0; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.pcbFactoryRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - // Here we check the dynamic parallels, which depend on the recipe - int numberOfNanites = 0; - ItemStack aNanite = recipe.getRepresentativeInput(1); - ItemData naniteData = GT_OreDictUnificator.getAssociation(aNanite); - if (naniteData != null && naniteData.mPrefix != null && naniteData.mPrefix.equals(OrePrefixes.nanite)) { - for (ItemStack aItem : inputItems) { - if (aItem != null && aItem.isItemEqual(aNanite)) { - numberOfNanites += aItem.stackSize; - } - } - } - maxParallel = (int) Math.max(Math.ceil(Math.log(numberOfNanites) / Math.log(2) + 0.00001), 1); - mMaxParallel = maxParallel; - - PCBFactoryUpgrade requiredUpgrade = recipe.getMetadata(PCBFactoryUpgradeKey.INSTANCE); - if (requiredUpgrade == PCBFactoryUpgrade.BIO && !mBioUpgrade) - return SimpleCheckRecipeResult.ofFailure("bio_upgrade_missing"); - - int requiredPCBTier = recipe.getMetadataOrDefault(PCBFactoryTierKey.INSTANCE, 1); - if (requiredPCBTier > mTier) return CheckRecipeResultRegistry.insufficientMachineTier(requiredPCBTier); - - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setNoOverclock(isNoOC()) - .setEUtDiscount((float) Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled)) - .setSpeedBoost(getDurationMultiplierFromRoughness()) - .setDurationDecreasePerOC(mOCTier2 ? 4.0 : 2.0); - } - - @Nonnull - @Override - protected GT_ParallelHelper createParallelHelper(@Nonnull GT_Recipe recipe) { - return super.createParallelHelper(recipe) - .setEUtModifier((float) Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled)) - .setChanceMultiplier(mRoughnessMultiplier); - } - }; - } - - private boolean isNoOC() { - return !mOCTier1 && !mOCTier2; - } - - private float getDurationMultiplierFromRoughness() { - return (float) Math.pow(mRoughnessMultiplier, 2); - } - - private int ticker = 0; - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (!super.onRunningTick(aStack)) { - return false; - } - - if (ticker % 20 == 0) { - if (!isNoOC()) { - FluidStack tFluid = mOCTier1 ? GT_ModHandler.getDistilledWater(COOLANT_CONSUMED_PER_SEC) - : Materials.SuperCoolant.getFluid(COOLANT_CONSUMED_PER_SEC); - if (!drain(mCoolantInputHatch, tFluid, true)) { - stopMachine(ShutDownReasonRegistry.outOfFluid(tFluid)); - return false; - } - } - ticker = 0; - } - - ticker++; - - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - // TODO: Look for proper fix - // Updates every 10 sec - if (mUpdate <= -150) mUpdate = 50; - } - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return (int) (10000f * mRoughnessMultiplier); - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - private int getTier() { - return mSetTier; - } - - @Override - public void receiveClientEvent(byte aEventID, byte aValue) { - if (aEventID == 1) { - if ((aValue & mTier1BitMap) == mTier1BitMap) { - mSetTier = 1; - } - - if ((aValue & mTier2BitMap) == mTier2BitMap) { - mSetTier = 2; - } - - if ((aValue & mTier3BitMap) == mTier3BitMap) { - mSetTier = 3; - } - - if ((aValue & mBioBitMap) == mBioBitMap) { - mBioUpgrade = true; - } - - if ((aValue & mBioRotateBitMap) == mBioRotateBitMap) { - mBioRotate = true; - } - - if ((aValue & mOCTier1BitMap) == mOCTier1BitMap) { - mOCTier1 = true; - } - - if ((aValue & mOCTier2BitMap) == mOCTier2BitMap) { - mOCTier2 = true; - } - } - } - - private ExtendedFacing transformFacing(ExtendedFacing facing) { - ForgeDirection curDirection = facing.getDirection(); - Rotation curRotation = facing.getRotation(); - Flip curFlip = facing.getFlip(); - ForgeDirection newDirection = curDirection; - Rotation newRotation = curRotation; - Flip newFlip = curFlip; - - if (curDirection == ForgeDirection.UP || curDirection == ForgeDirection.DOWN) { - switch (curRotation) { - case CLOCKWISE, COUNTER_CLOCKWISE -> { - newFlip = curFlip == Flip.NONE ? Flip.HORIZONTAL : Flip.NONE; - newDirection = curDirection == ForgeDirection.UP ? ForgeDirection.NORTH : ForgeDirection.SOUTH; - } - case NORMAL -> { - newRotation = curDirection == ForgeDirection.UP ? Rotation.CLOCKWISE : Rotation.COUNTER_CLOCKWISE; - newDirection = curDirection == ForgeDirection.UP ? ForgeDirection.EAST : ForgeDirection.WEST; - newFlip = Flip.NONE; - } - case UPSIDE_DOWN -> { - newRotation = curDirection == ForgeDirection.UP ? Rotation.COUNTER_CLOCKWISE : Rotation.CLOCKWISE; - newDirection = curDirection == ForgeDirection.UP ? ForgeDirection.EAST : ForgeDirection.WEST; - newFlip = Flip.NONE; - } - } - } else if (curRotation == Rotation.CLOCKWISE || curRotation == Rotation.COUNTER_CLOCKWISE) { - newFlip = curRotation == Rotation.CLOCKWISE ? curFlip == Flip.NONE ? Flip.NONE : Flip.HORIZONTAL - : curFlip != Flip.NONE ? Flip.NONE : Flip.HORIZONTAL; - newDirection = curRotation == Rotation.CLOCKWISE ? ForgeDirection.UP : ForgeDirection.DOWN; - } else { - newDirection = switch (curDirection) { - case EAST -> ForgeDirection.SOUTH; - case NORTH -> ForgeDirection.EAST; - case WEST -> ForgeDirection.NORTH; - case SOUTH -> ForgeDirection.WEST; - default -> curDirection; - }; - } - - if (curRotation == Rotation.UPSIDE_DOWN) { - if (curDirection != ForgeDirection.UP && curDirection != ForgeDirection.DOWN) { - newFlip = curFlip == Flip.NONE ? Flip.HORIZONTAL : Flip.NONE; - } - } - - return ExtendedFacing.of(newDirection, newRotation, newFlip); - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - public boolean addCoolantInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = null; - mCoolantInputHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - return true; - } - return false; - } - - @Override - protected long getActualEnergyUsage() { - return (-this.lEUt * 10000) / Math.min(Math.max(1000, mEfficiency), 10000); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - inputSeparation = !inputSeparation; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); - } - - @Override - public String[] getInfoData() { - int mPollutionReduction = 0; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); - } - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch tHatch : getExoticAndNormalEnergyHatchList()) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - long voltage = getAverageInputVoltage(); - long amps = getMaxInputAmps(); - - return new String[] { - /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(getActualEnergyUsage()) - + EnumChatFormatting.RESET - + " EU/t", - /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(voltage) - + EnumChatFormatting.RESET - + " EU/t(*" - + amps - + " A)" - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + VN[GT_Utility.getTier(voltage)] - + EnumChatFormatting.RESET, - /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - /* 6 */ StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %", - /* 7 */ StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " - + EnumChatFormatting.GREEN - + mMaxParallel, - /* 8 */ StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " - + EnumChatFormatting.GREEN - + mCurrentParallel }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Circuit Board Fabricator") - .addInfo("Controller for the PCB Factory") - .addInfo( - EnumChatFormatting.GOLD.toString() + EnumChatFormatting.BOLD - + "IMPORTANT!" - + " Check the configuration menu before building.") - .addInfo("Tier of the machine determines the available recipes.") - .addInfo("Machine tier (1-3) is set in the controller GUI.") - .addInfo("The configuration menu can be used to add upgrades.") - .addInfo("Each tier and upgrade requires additional structures.") - .addInfo("Power consumption is multiplied by Sqrt(structures).") - .addInfo("Tier 2 and 3 allow parallel by using extra nanites.") - .addInfo("Every doubling of nanites adds one parallel.") - .addInfo("1x->1, 2x->2, 4x->3, 8x->4 with no limit.") - .addInfo("Recipes require a cooling upgrade to be overclocked.") - .addInfo("Liquid Cooling uses 10 L/s of distilled water and enables default overclocks.") - .addInfo("Thermosink uses 10 L/s of Super Coolant and enables perfect overclocks.") - .addInfo("Trace size can be changed to modify the material usage and machine speed.") - .addInfo(AuthorBlueWeabo) - .beginStructureBlock(30, 38, 13, false) - .addSeparator() - .addMaintenanceHatch(EnumChatFormatting.GOLD + "1", 1) - .addEnergyHatch( - EnumChatFormatting.GOLD + "1" - + EnumChatFormatting.GRAY - + "-" - + EnumChatFormatting.GOLD - + "2" - + EnumChatFormatting.GRAY - + " or " - + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + " TT energy hatch.", - 1) - .addInputBus(EnumChatFormatting.GOLD + "0" + EnumChatFormatting.GRAY + "+", 1) - .addOutputBus(EnumChatFormatting.GOLD + "0" + EnumChatFormatting.GRAY + "+", 1) - .addInputHatch(EnumChatFormatting.GOLD + "0" + EnumChatFormatting.GRAY + "+", 1) - .addStructureInfo( - "Coolant Hatch (Input Hatch): " + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + " Center of the Liquid Cooling/Thermosink") - .addStructureInfo( - EnumChatFormatting.BLUE + "Base Multi (Tier " - + EnumChatFormatting.DARK_PURPLE - + 1 - + EnumChatFormatting.BLUE - + "):") - .addStructureInfo(EnumChatFormatting.GOLD + "40" + EnumChatFormatting.GRAY + " Damascus Steel Frame Box") - .addStructureInfo(EnumChatFormatting.GOLD + "9" + EnumChatFormatting.GRAY + " Vibrant Alloy Frame Box") - .addStructureInfo(EnumChatFormatting.GOLD + "25" + EnumChatFormatting.GRAY + " Reinforced Glass") - .addStructureInfo( - EnumChatFormatting.GOLD + "77" + EnumChatFormatting.GRAY + " Basic Photolithography Framework Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "12" + EnumChatFormatting.GRAY + " Grate Machine Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "25" + EnumChatFormatting.GRAY + " Plascrete Block") - .addStructureInfo( - EnumChatFormatting.BLUE + "Tier " - + EnumChatFormatting.DARK_PURPLE - + 2 - + EnumChatFormatting.BLUE - + " (Adds to Tier " - + EnumChatFormatting.DARK_PURPLE - + 1 - + EnumChatFormatting.BLUE - + "):") - .addStructureInfo(EnumChatFormatting.GOLD + "34" + EnumChatFormatting.GRAY + " Duranium Frame Box") - .addStructureInfo( - EnumChatFormatting.GOLD + "158" - + EnumChatFormatting.GRAY - + " Reinforced Photolithography Framework Casing") - .addStructureInfo( - EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 3 + EnumChatFormatting.BLUE + ":") - .addStructureInfo( - EnumChatFormatting.GOLD + "292" - + EnumChatFormatting.GRAY - + " Radiation Proof Photolithography Framework Casing") - .addStructureInfo( - EnumChatFormatting.GOLD + "76" + EnumChatFormatting.GRAY + " Radiant Naquadah Alloy Casing") - .addStructureInfo(EnumChatFormatting.BLUE + "Biochamber Upgrade") - .addStructureInfo( - EnumChatFormatting.GOLD + "68" + EnumChatFormatting.GRAY + " Clean Stainless Steel Machine Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "40" + EnumChatFormatting.GRAY + " Damascus Steel Frame Box") - .addStructureInfo(EnumChatFormatting.GOLD + "72" + EnumChatFormatting.GRAY + " Reinforced Glass") - .addStructureInfo( - EnumChatFormatting.BLUE + "Liquid Cooling Tower (Tier " - + EnumChatFormatting.DARK_PURPLE - + 1 - + EnumChatFormatting.BLUE - + "):") - .addStructureInfo(EnumChatFormatting.GOLD + "40" + EnumChatFormatting.GRAY + " Damascus Steel Frame Box") - .addStructureInfo( - EnumChatFormatting.GOLD + "68" + EnumChatFormatting.GRAY + " Radiant Naquadah Alloy Casing") - .addStructureInfo( - EnumChatFormatting.GOLD + "12" + EnumChatFormatting.GRAY + " Extreme Engine Intake Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "20" + EnumChatFormatting.GRAY + " Tungstensteel Pipe Casing") - .addStructureInfo( - EnumChatFormatting.GOLD + "21" - + EnumChatFormatting.GRAY - + " Reinforced Photolithography Framework Casing") - .addStructureInfo( - EnumChatFormatting.BLUE + "Thermosink Radiator(Tier " - + EnumChatFormatting.DARK_PURPLE - + 2 - + EnumChatFormatting.BLUE - + "):") - .addStructureInfo(EnumChatFormatting.GOLD + "40" + EnumChatFormatting.GRAY + " Americium Frame Box") - .addStructureInfo( - EnumChatFormatting.GOLD + "41" - + EnumChatFormatting.GRAY - + " Reinforced Photolithography Framework Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "8" + EnumChatFormatting.GRAY + " Superconducting Coil Block") - .addStructureInfo(EnumChatFormatting.GOLD + "20" + EnumChatFormatting.GRAY + " Tungstensteel Pipe Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "48" + EnumChatFormatting.GRAY + " Infinity Cooled Casing") - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("mBioUpgrade", mBioUpgrade); - aNBT.setBoolean("mBioRotate", mBioRotate); - aNBT.setInteger("mBioOffsetX", mBioOffsets[0]); - aNBT.setInteger("mBioOffsetZ", mBioOffsets[1]); - aNBT.setBoolean("mOCTier1Upgrade", mOCTier1); - aNBT.setInteger("mOCTier1OffsetX", mOCTier1Offsets[0]); - aNBT.setInteger("mOCTier1OffsetZ", mOCTier1Offsets[1]); - aNBT.setBoolean("mOCTier2Upgrade", mOCTier2); - aNBT.setInteger("mOCTier2OffsetX", mOCTier2Offsets[0]); - aNBT.setInteger("mOCTier2OffsetZ", mOCTier2Offsets[1]); - aNBT.setFloat("mRoughnessMultiplier", mRoughnessMultiplier); - aNBT.setInteger("mSetTier", mSetTier); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("mSeparate")) { - // backward compatibility - inputSeparation = aNBT.getBoolean("mSeparate"); - } - mBioUpgrade = aNBT.getBoolean("mBioUpgrade"); - mBioRotate = aNBT.getBoolean("mBioRotate"); - mBioOffsets[0] = aNBT.getInteger("mBioOffsetX"); - mBioOffsets[1] = aNBT.getInteger("mBioOffsetZ"); - mOCTier1 = aNBT.getBoolean("mOCTier1Upgrade"); - mOCTier1Offsets[0] = aNBT.getInteger("mOCTier1OffsetX"); - mOCTier1Offsets[1] = aNBT.getInteger("mOCTier1OffsetZ"); - mOCTier2 = aNBT.getBoolean("mOCTier2Upgrade"); - mOCTier2Offsets[0] = aNBT.getInteger("mOCTier2OffsetX"); - mOCTier2Offsets[1] = aNBT.getInteger("mOCTier2OffsetZ"); - mRoughnessMultiplier = aNBT.getFloat("mRoughnessMultiplier"); - mSetTier = aNBT.getInteger("mSetTier"); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_MAGNETIZER_LOOP; - } - - @Override - public byte getUpdateData() { - byte data = 0; - if (mSetTier == 1) { - data += mTier1BitMap; - } else if (mSetTier == 2) { - data += mTier2BitMap; - } else { - data += mTier3BitMap; - } - - if (mBioUpgrade) { - data += mBioBitMap; - } - - if (mBioRotate) { - data += mBioRotateBitMap; - } - - if (mOCTier1) { - data += mOCTier1BitMap; - } - - if (mOCTier2) { - data += mOCTier2BitMap; - } - - return data; - } - - @Override - public Pos2d getStructureUpdateButtonPos() { - return new Pos2d(80, 91); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - buildContext.addSyncedWindow(10, this::createConfigurationWindow); - builder.widget( - new ButtonWidget().setOnClick( - (clickData, widget) -> { - if (!widget.isClient()) widget.getContext() - .openSyncedWindow(10); - }) - .setSize(16, 16) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - ret.add(GT_UITextures.OVERLAY_BUTTON_CYCLIC); - return ret.toArray(new IDrawable[0]); - }) - .addTooltip("Configuration Menu") - .setPos(174, 130)) - .widget( - new TextWidget(new Text("Tier")).setTextAlignment(Alignment.Center) - .setScale(0.91f) - .setSize(20, 16) - .setPos(173, 98)) - .widget( - new NumericWidget().setGetter(() -> mSetTier) - .setSetter(val -> mSetTier = (int) val) - .setBounds(1, 3) - .setTextColor(Color.WHITE.normal) - .setTextAlignment(Alignment.Center) - .addTooltip("PCB Factory Tier") - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .setSize(18, 18) - .setPos(173, 110)); - } - - protected ModularWindow createConfigurationWindow(final EntityPlayer player) { - ModularWindow.Builder builder = ModularWindow.builder(200, 160); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.OVERLAY_BUTTON_CYCLIC) - .setPos(5, 5) - .setSize(16, 16)) - .widget(new TextWidget("Configuration Menu").setPos(25, 9)) - .widget( - ButtonWidget.closeWindowButton(true) - .setPos(185, 3)) - .widget( - new DynamicPositionedColumn().setSynced(false) - .widget( - new MultiChildWidget().addChild(new CycleButtonWidget().setToggle(() -> mBioUpgrade, val -> { - mBioUpgrade = val; - if (!mBioUpgrade) { - GT_Utility - .sendChatToPlayer(player, GT_Utility.trans("339.1", "Biochamber Upgrade Disabled")); - } else { - GT_Utility - .sendChatToPlayer(player, GT_Utility.trans("339", "Biochamber Upgrade Enabled")); - } - }) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setSize(90, 18) - .addTooltip( - "Enables nanites to construct organic circuitry. Required for Bioware and Wetware boards.")) - .addChild( - new DrawableWidget().setDrawable(GT_UITextures.OVERLAY_BUTTON_CYCLIC) - .setSize(18, 18)) - .addChild( - new TextWidget("Biochamber").setTextAlignment(Alignment.Center) - .setPos(23, 5)) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) - .widget(new MultiChildWidget().addChild(new CycleButtonWidget().setToggle(() -> mBioRotate, val -> { - mBioRotate = val; - if (!mBioRotate) { - GT_Utility - .sendChatToPlayer(player, GT_Utility.trans("340.1", "Rotated biochamber disabled")); - } else { - GT_Utility.sendChatToPlayer(player, GT_Utility.trans("340", "Rotated biochamber enabled")); - } - }) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setSize(90, 18) - .addTooltip("Rotates the biochamber by 90 degrees.")) - .addChild( - new DrawableWidget().setDrawable(GT_UITextures.OVERLAY_BUTTON_CYCLIC) - .setSize(18, 18)) - .addChild( - new TextWidget("Bio Rotation").setTextAlignment(Alignment.Center) - .setPos(23, 5)) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) - .widget(new MultiChildWidget().addChild(new CycleButtonWidget().setToggle(() -> mOCTier1, val -> { - mOCTier1 = val; - mOCTier2 = false; - if (!mOCTier1) { - GT_Utility.sendChatToPlayer(player, GT_Utility.trans("341.1", "Tier 1 cooling disabled")); - } else { - GT_Utility.sendChatToPlayer(player, GT_Utility.trans("341", "Tier 1 cooling enabled")); - } - }) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setSize(90, 18) - .addTooltip( - "Allows for overclocking. Requires 10 L/s of distilled water. Cooling upgrades are mutually exclusive.")) - .addChild( - new DrawableWidget().setDrawable(GT_UITextures.OVERLAY_BUTTON_CYCLIC) - .setSize(18, 18)) - .addChild( - new TextWidget("Liquid Cooling").setTextAlignment(Alignment.Center) - .setPos(20, 5)) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) - .widget(new MultiChildWidget().addChild(new CycleButtonWidget().setToggle(() -> mOCTier2, val -> { - mOCTier2 = val; - mOCTier1 = false; - if (!mOCTier2) { - GT_Utility.sendChatToPlayer(player, GT_Utility.trans("342.1", "Tier 2 cooling disabled")); - } else { - GT_Utility.sendChatToPlayer(player, GT_Utility.trans("342", "Tier 2 cooling enabled")); - } - }) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setSize(90, 18) - .addTooltip( - "Enables perfect overclocking by allowing nanites to work with extreme speed and efficiency. Uses 10 L/s of Super Coolant.")) - .addChild( - new DrawableWidget().setDrawable(GT_UITextures.OVERLAY_BUTTON_CYCLIC) - .setSize(18, 18)) - .addChild( - new TextWidget("Thermosink").setTextAlignment(Alignment.Center) - .setPos(20, 5)) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) - .widget( - new TextWidget(new Text("Trace Size")).setSize(90, 18) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive()) - .setPos(0, 4)) - .widget( - new NumericWidget().setGetter(() -> (int) ((1f / mRoughnessMultiplier) * 100f)) - .setSetter(val -> mRoughnessMultiplier = 100f / (int) val) - .setBounds(50, 200) - .setTextColor(Color.WHITE.normal) - .setTextAlignment(Alignment.Center) - .addTooltip( - "Set the trace size. Smaller traces allow material savings but take longer to fabricate. Larger traces waste material but are fast. 50-200 μm.") - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .setSize(90, 16)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.OVERLAY_BUTTON_CROSS) - .setSize(18, 18) - .addTooltip(new Text("Can't change configuration when running !").color(Color.RED.dark(3))) - .setEnabled(widget -> getBaseMetaTileEntity().isActive())) - .setPos(10, 25)) - .widget( - new DynamicPositionedColumn().setSynced(false) - .widget( - new TextWidget(new Text("Bio Upgrade Offsets")).setSize(72, 18) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) - .widget( - new DynamicPositionedRow().setSynced(false) - .widget( - new NumericWidget().setGetter(() -> mBioOffsets[0]) - .setSetter(val -> mBioOffsets[0] = (int) val) - .setBounds(-16, 16) - .setTextColor(Color.WHITE.normal) - .setTextAlignment(Alignment.Center) - .addTooltip("X Offset") - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .setSize(36, 18)) - .widget( - new NumericWidget().setGetter(() -> mBioOffsets[1]) - .setSetter(val -> mBioOffsets[1] = (int) val) - .setBounds(-16, 16) - .setTextColor(Color.WHITE.normal) - .setTextAlignment(Alignment.Center) - .addTooltip("Z Offset") - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .setSize(36, 18)) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) - .widget( - new TextWidget(new Text("Cooler Tier 1 Offsets")).setSize(72, 18) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) - .widget( - new DynamicPositionedRow().setSynced(false) - .widget( - new NumericWidget().setGetter(() -> mOCTier1Offsets[0]) - .setSetter(val -> mOCTier1Offsets[0] = (int) val) - .setBounds(-16, 16) - .setTextColor(Color.WHITE.normal) - .setTextAlignment(Alignment.Center) - .addTooltip("X Offset") - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .setSize(36, 18)) - .widget( - new NumericWidget().setGetter(() -> mOCTier1Offsets[1]) - .setSetter(val -> mOCTier1Offsets[1] = (int) val) - .setBounds(-16, 16) - .setTextColor(Color.WHITE.normal) - .setTextAlignment(Alignment.Center) - .addTooltip("Z Offset") - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .setSize(36, 18)) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) - .widget( - new TextWidget(new Text("Cooler Tier 2 Offsets")).setSize(72, 18) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) - .widget( - new DynamicPositionedRow().setSynced(false) - .widget( - new NumericWidget().setGetter(() -> mOCTier2Offsets[0]) - .setSetter(val -> mOCTier2Offsets[0] = (int) val) - .setBounds(-16, 16) - .setTextColor(Color.WHITE.normal) - .setTextAlignment(Alignment.Center) - .addTooltip("X Offset") - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .setSize(36, 18)) - .widget( - new NumericWidget().setGetter(() -> mOCTier2Offsets[1]) - .setSetter(val -> mOCTier2Offsets[1] = (int) val) - .setBounds(-16, 16) - .setTextColor(Color.WHITE.normal) - .setTextAlignment(Alignment.Center) - .addTooltip("Z Offset") - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .setSize(36, 18)) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) - .setPos(110, 25)); - return builder.build(); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java deleted file mode 100644 index d23ea912bb..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PlasmaForge.java +++ /dev/null @@ -1,1263 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.ExoticEnergy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorColen; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DTPF_OFF; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DTPF_ON; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_RAINBOWSCREEN_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.ChunkCoordIntPair; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.thing.gui.TecTechUITextures; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.SoundResource; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.GregTechTileClientEvents; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.objects.GT_ChunkManager; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_PlasmaForge extends - GT_MetaTileEntity_ExtendedPowerMultiBlockBase implements ISurvivalConstructable { - - // 3600 seconds in an hour, 8 hours, 20 ticks in a second. - private static final double max_efficiency_time_in_ticks = 3600d * 8d * 20d; - // Multiplier for the efficiency decay rate - private static final double efficiency_decay_rate = 100; - private static final double maximum_discount = 0.5d; - private static final int CONVERGENCE_BITMAP = 0b1; - private static final int DISCOUNT_BITMAP = 0b10; - - // Valid fuels which the discount will get applied to. - private static final FluidStack[] valid_fuels = { MaterialsUEVplus.ExcitedDTCC.getFluid(1L), - MaterialsUEVplus.ExcitedDTPC.getFluid(1L), MaterialsUEVplus.ExcitedDTRC.getFluid(1L), - MaterialsUEVplus.ExcitedDTEC.getFluid(1L), MaterialsUEVplus.ExcitedDTSC.getFluid(1L) }; - - private static final HashMap> FUEL_ENERGY_VALUES = new HashMap<>() { - - { - put( - MaterialsUEVplus.ExcitedDTCC.getFluid(1L) - .getFluid(), - Pair.of(14_514_983L, 1 / 8f)); - put( - MaterialsUEVplus.ExcitedDTPC.getFluid(1L) - .getFluid(), - Pair.of(66_768_460L, 1 / 4f)); - put( - MaterialsUEVplus.ExcitedDTRC.getFluid(1L) - .getFluid(), - Pair.of(269_326_451L, 1 / 2f)); - put( - MaterialsUEVplus.ExcitedDTEC.getFluid(1L) - .getFluid(), - Pair.of(1_073_007_393L, 1f)); - put( - MaterialsUEVplus.ExcitedDTSC.getFluid(1L) - .getFluid(), - Pair.of(4_276_767_521L, 2f)); - } - }; - - private static final int min_input_hatch = 0; - private static final int max_input_hatch = 7; - private static final int min_output_hatch = 0; - private static final int max_output_hatch = 2; - private static final int min_input_bus = 0; - private static final int max_input_bus = 6; - private static final int min_output_bus = 0; - private static final int max_output_bus = 1; - - // Current discount rate. 1 = 0%, 0 = 100%. - private double discount = 1; - private int mHeatingCapacity = 0; - private long running_time = 0; - private boolean convergence = false; - private HeatingCoilLevel mCoilLevel; - private GT_OverclockCalculator overclockCalculator; - - @SuppressWarnings("SpellCheckingInspection") - private static final String[][] structure_string = new String[][] { { " ", - " N N N N ", " N N N N ", " N N N N ", - " ", " ", " ", - " N N N N ", " N N N N ", " NNN NNN N N NNN NNN ", - " ", " ", " ", - " NNN NNN NNN NNN ", " ", " ", - " ", " ", " ", - " NNN NNN NNN NNN ", " ", " ", - " ", " NNN NNN NNN NNN " }, - { " N N N N ", " bCCCb bCCCb ", " bCCCb bCCCb ", - " bCCCb bCCCb ", " N N N N ", - " ", " N N N N ", - " bCCCb bCCCb ", " bCCCb bCCCb ", - "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CCC CCC N N CCC CCC ", - " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", - "NbbbN NbbbN NbbbN NbbbN", " N N N N ", - " N N N N ", " ", - " N N N N ", " N N N N ", - "NbbbN NbbbN NbbbN NbbbN", " CCC CCC CCC CCC ", - " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", - "NbbbN NbbbN N N NbbbN NbbbN", }, - { " N N N N ", " bCCCb bCCCb ", " NNNbbbbbNNsNNbbbbbNNN ", - " ss bCCCb bCCCb ss ", " s N N N N s ", - " s s ", " N N N N N N ", - " N bCCCb bCCCb N ", " N sbbbbbNNsNNbbbbbs N ", - "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CbC CbC N N CbC CbC ", - " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", - "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", - " NNN NNN NNN NNN ", " s s s s ", - " NNN NNN NNN NNN ", " NNN NNN NNN NNN ", - "NbbbN NbbbN NbbbN NbbbN", " CbC CbC CbC CbC ", - " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", - "NbbbN NbbbNNNNNsNsNNNNNbbbN NbbbN", }, - { " N N N N ", " bCCCb bCCCb ", " ss bCCCb bCCCb ss ", - " bCCCb bCCCb ", " s NCCCN NCCCN s ", - " s NCCCN NCCCN s ", " NCCCN NCCCN ", - " bCCCb bCCCb ", " bCCCb bCCCb ", - "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " CCCCCCCCC N N CCCCCCCCC ", - " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", - "NbbbNNNbbbN NbbbNNNbbbN", " N N N N ", - " N N N N ", " ", - " N N N N ", " N N N N ", - "NbbbNNNbbbN NbbbNNNbbbN", " CCCCCCCCC CCCCCCCCC ", - " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", - "NbbbNNNbbbN NbN NbbbNNNbbbN", }, - { " ", " N N N N ", " s N N N N s ", - " s NCCCN NCCCN s ", " ", - " ", " ", - " NCCCN NCCCN ", " N N N N ", - " NNN NN N N NN NNN ", " C C C C ", - " C C C C ", " C C C C ", - " NNN NNN NNN NNN ", " ", - " ", " ", - " ", " ", - " NNN NNN NNN NNN ", " C C C C ", - " C C C C ", " C C C C ", - " NNN NNN NbN NNN NNN ", }, - { " ", " ", " s s ", - " s NCCCN NCCCN s ", " ", - " ", " ", - " NCCCN NCCCN ", " ", - " N N N N ", " C C C C ", - " C C C C ", " C C C C ", - " N N N N ", " ", - " ", " ", - " ", " ", - " N N N N ", " C C C C ", - " C C C C ", " C C C C ", - " N N NbN N N ", }, - { " ", " N N N N ", " N N N N N N ", - " NCCCN NCCCN ", " ", - " ", " ", - " NCCCN NCCCN ", " N N N N ", - " NNN NN N N NN NNN ", " C C C C ", - " C C C C ", " C C C C ", - " NNN NNN NNN NNN ", " ", - " ", " ", - " ", " ", - " NNN NNN NNN NNN ", " C C C C ", - " C C C C ", " C C C C ", - " NNN NNN NbN NNN NNN ", }, - { " N N N N ", " bCCCb bCCCb ", " N bCCCb bCCCb N ", - " bCCCb bCCCb ", " NCCCN NCCCN ", - " NCCCN NCCCN ", " NCCCN NCCCN ", - " bCCCb bCCCb ", " bCCCb bCCCb ", - "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " CCCCCCCCC N N CCCCCCCCC ", - " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", - "NbbbNNNbbbN NbbbNNNbbbN", " N N N N ", - " N N N N ", " ", - " N N N N ", " N N N N ", - "NbbbNNNbbbN NbbbNNNbbbN", " CCCCCCCCC CCCCCCCCC ", - " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", - "NbbbNNNbbbN NbN NbbbNNNbbbN", }, - { " N N N N ", " bCCCb bCCCb ", " N sbbbbbNNsNNbbbbbs N ", - " bCCCb bCCCb ", " N N N N ", - " ", " N N N N ", - " bCCCb bCCCb ", " s sbbbbbNNsNNbbbbbs s ", - "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CbC CbC N N CbC CbC ", - " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", - "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", - " NNN NNN NNN NNN ", " s s s s ", - " NNN NNN NNN NNN ", " NNN NNN NNN NNN ", - "NbbbN NbbbN NbbbN NbbbN", " CbC CbC CbC CbC ", - " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", - "NbbbN NbbbNNNNNsNsNNNNNbbbN NbbbN", }, - { " NNN NNN N N NNN NNN ", "NbbbN NbbNCCCb bCCCNbbN NbbbN", "NbbbN NbbNCCCb bCCCNbbN NbbbN", - "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " NNN NNN N N NNN NNN ", - " N N N N ", " NNN NNN N N NNN NNN ", - "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", "NbbbN NbbNCCCb bCCCNbbN NbbbN", - "NNNN NNNCCCb bCCCNNN NNNN", " CCC CCC N N CCC CCC ", - " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", - "NbbbN NbbbN NbbbN NbbbN", " N N N N ", - " N N N N ", " ", - " N N N N ", " N N N N ", - "NbbbN NbbbN NbbbN NbbbN", " CCC CCC CCC CCC ", - " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", - "NbbbN NbbbN NbN NbbbN NbbbN", }, - { " ", " CCC CCC N N CCC CCC ", " CbC CbC N N CbC CbC ", - " CCCCCCCCC N N CCCCCCCCC ", " C C C C ", - " C C C C ", " C C C C ", - " CCCCCCCCC N N CCCCCCCCC ", " CbC CbC N N CbC CbC ", - " CCC CCC N N CCC CCC ", " ", - " ", " ", - " NNN NNN NNN NNN ", " ", - " ", " ", - " ", " ", - " NNN NNN NNN NNN ", " ", - " ", " ", - " NNN NNN NbN NNN NNN ", }, - { " ", " CCC CCC CCC CCC ", " CbC CbC CbC CbC ", - " CCCCCCCCC CCCCCCCCC ", " C C C C ", - " C C C C ", " C C C C ", - " CCCCCCCCC CCCCCCCCC ", " CbC CbC CbC CbC ", - " CCC CCC CCC CCC ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " N N NbN N N ", }, - { " ", " CCC CCC CCC CCC ", " CbC CbC CbC CbC ", - " CCCCCCCCC CCCCCCCCC ", " C C C C ", - " C C C C ", " C C C C ", - " CCCCCCCCC CCCCCCCCC ", " CbC CbC CbC CbC ", - " CCC CCC CCC CCC ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " N N NbN N N ", }, - { " NNN NNN NNN NNN ", "NbbbN NbbbN NbbbN NbbbN", "NbbbN NbbbN NbbbN NbbbN", - "NbbbNNNbbbN NbbbNNNbbbN", " NNN NNN NNN NNN ", - " N N N N ", " NNN NNN NNN NNN ", - "NbbbNNNbbbN NbbbNNNbbbN", "NbbbN NbbbN NbbbN NbbbN", - "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " N N NsNsN N N ", }, - { " ", " ", " N N N N ", - " ", " ", - " ", " ", - " ", " N N N N ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " N N NbbbbbN N N ", }, - { " ", " ", " N N N N ", - " ", " ", - " ", " ", - " ", " N N N N ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " N ", - " NsNNNNNsNNNNsbbbbbsNNNNsNNNNNsN ", }, - { " ", " ", " s s s s ", - " ", " ", - " ", " ", - " ", " s s s s ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ~ ", " NNN ", - " NbbbbbNbbbbNbbbbbNbbbbNbbbbbN ", }, - { " ", " ", " N N N N ", - " ", " ", - " ", " ", - " ", " N N N N ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " N ", - " NsNNNNNsNNNNsbbbbbsNNNNsNNNNNsN ", }, - { " ", " ", " N N N N ", - " ", " ", - " ", " ", - " ", " N N N N ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " N N NbbbbbN N N ", }, - { " NNN NNN NNN NNN ", "NbbbN NbbbN NbbbN NbbbN", "NbbbN NbbbN NbbbN NbbbN", - "NbbbNNNbbbN NbbbNNNbbbN", " NNN NNN NNN NNN ", - " N N N N ", " NNN NNN NNN NNN ", - "NbbbNNNbbbN NbbbNNNbbbN", "NbbbN NbbbN NbbbN NbbbN", - "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " N N NsNsN N N ", }, - { " ", " CCC CCC CCC CCC ", " CbC CbC CbC CbC ", - " CCCCCCCCC CCCCCCCCC ", " C C C C ", - " C C C C ", " C C C C ", - " CCCCCCCCC CCCCCCCCC ", " CbC CbC CbC CbC ", - " CCC CCC CCC CCC ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " N N NbN N N ", }, - { " ", " CCC CCC CCC CCC ", " CbC CbC CbC CbC ", - " CCCCCCCCC CCCCCCCCC ", " C C C C ", - " C C C C ", " C C C C ", - " CCCCCCCCC CCCCCCCCC ", " CbC CbC CbC CbC ", - " CCC CCC CCC CCC ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " ", " ", - " N N NbN N N ", }, - { " ", " CCC CCC N N CCC CCC ", " CbC CbC N N CbC CbC ", - " CCCCCCCCC N N CCCCCCCCC ", " C C C C ", - " C C C C ", " C C C C ", - " CCCCCCCCC N N CCCCCCCCC ", " CbC CbC N N CbC CbC ", - " CCC CCC N N CCC CCC ", " ", - " ", " ", - " NNN NNN NNN NNN ", " ", - " ", " ", - " ", " ", - " NNN NNN NNN NNN ", " ", - " ", " ", - " NNN NNN NbN NNN NNN ", }, - { " NNN NNN N N NNN NNN ", "NbbbN NbbNCCCb bCCCNbbN NbbbN", "NbbbN NbbNCCCb bCCCNbbN NbbbN", - "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " NNN NNN N N NNN NNN ", - " N N N N ", " NNN NNN N N NNN NNN ", - "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", "NbbbN NbbNCCCb bCCCNbbN NbbbN", - "NNNN NNNCCCb bCCCNNN NNNN", " CCC CCC N N CCC CCC ", - " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", - "NbbbN NbbbN NbbbN NbbbN", " N N N N ", - " N N N N ", " ", - " N N N N ", " N N N N ", - "NbbbN NbbbN NbbbN NbbbN", " CCC CCC CCC CCC ", - " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", - "NbbbN NbbbN NbN NbbbN NbbbN", }, - { " N N N N ", " bCCCb bCCCb ", " N sbbbbbNNsNNbbbbbs N ", - " bCCCb bCCCb ", " N N N N ", - " ", " N N N N ", - " bCCCb bCCCb ", " s sbbbbbNNsNNbbbbbs s ", - "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CbC CbC N N CbC CbC ", - " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", - "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", - " NNN NNN NNN NNN ", " s s s s ", - " NNN NNN NNN NNN ", " NNN NNN NNN NNN ", - "NbbbN NbbbN NbbbN NbbbN", " CbC CbC CbC CbC ", - " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", - "NbbbN NbbbNNNNNsNsNNNNNbbbN NbbbN", }, - { " N N N N ", " bCCCb bCCCb ", " N bCCCb bCCCb N ", - " bCCCb bCCCb ", " NCCCN NCCCN ", - " NCCCN NCCCN ", " NCCCN NCCCN ", - " bCCCb bCCCb ", " bCCCb bCCCb ", - "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " CCCCCCCCC N N CCCCCCCCC ", - " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", - "NbbbNNNbbbN NbbbNNNbbbN", " N N N N ", - " N N N N ", " ", - " N N N N ", " N N N N ", - "NbbbNNNbbbN NbbbNNNbbbN", " CCCCCCCCC CCCCCCCCC ", - " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", - "NbbbNNNbbbN NbN NbbbNNNbbbN", }, - { " ", " N N N N ", " N N N N N N ", - " NCCCN NCCCN ", " ", - " ", " ", - " NCCCN NCCCN ", " N N N N ", - " NNN NN N N NN NNN ", " C C C C ", - " C C C C ", " C C C C ", - " NNN NNN NNN NNN ", " ", - " ", " ", - " ", " ", - " NNN NNN NNN NNN ", " C C C C ", - " C C C C ", " C C C C ", - " NNN NNN NbN NNN NNN ", }, - { " ", " ", " s s ", - " s NCCCN NCCCN s ", " ", - " ", " ", - " NCCCN NCCCN ", " ", - " N N N N ", " C C C C ", - " C C C C ", " C C C C ", - " N N N N ", " ", - " ", " ", - " ", " ", - " N N N N ", " C C C C ", - " C C C C ", " C C C C ", - " N N NbN N N ", }, - { " ", " N N N N ", " s N N N N s ", - " s NCCCN NCCCN s ", " ", - " ", " ", - " NCCCN NCCCN ", " N N N N ", - " NNN NN N N NN NNN ", " C C C C ", - " C C C C ", " C C C C ", - " NNN NNN NNN NNN ", " ", - " ", " ", - " ", " ", - " NNN NNN NNN NNN ", " C C C C ", - " C C C C ", " C C C C ", - " NNN NNN NbN NNN NNN ", }, - { " N N N N ", " bCCCb bCCCb ", " ss bCCCb bCCCb ss ", - " bCCCb bCCCb ", " s NCCCN NCCCN s ", - " s NCCCN NCCCN s ", " NCCCN NCCCN ", - " bCCCb bCCCb ", " bCCCb bCCCb ", - "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " CCCCCCCCC N N CCCCCCCCC ", - " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", - "NbbbNNNbbbN NbbbNNNbbbN", " N N N N ", - " N N N N ", " ", - " N N N N ", " N N N N ", - "NbbbNNNbbbN NbbbNNNbbbN", " CCCCCCCCC CCCCCCCCC ", - " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", - "NbbbNNNbbbN NbN NbbbNNNbbbN", }, - { " N N N N ", " bCCCb bCCCb ", " NNNbbbbbNNsNNbbbbbNNN ", - " ss bCCCb bCCCb ss ", " s N N N N s ", - " s s ", " N N N N N N ", - " N bCCCb bCCCb N ", " N sbbbbbNNsNNbbbbbs N ", - "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CbC CbC N N CbC CbC ", - " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", - "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", - " NNN NNN NNN NNN ", " s s s s ", - " NNN NNN NNN NNN ", " NNN NNN NNN NNN ", - "NbbbN NbbbN NbbbN NbbbN", " CbC CbC CbC CbC ", - " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", - "NbbbN NbbbNNNNNsNsNNNNNbbbN NbbbN", }, - { " N N N N ", " bCCCb bCCCb ", " bCCCb bCCCb ", - " bCCCb bCCCb ", " N N N N ", - " ", " N N N N ", - " bCCCb bCCCb ", " bCCCb bCCCb ", - "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CCC CCC N N CCC CCC ", - " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", - "NbbbN NbbbN NbbbN NbbbN", " N N N N ", - " N N N N ", " ", - " N N N N ", " N N N N ", - "NbbbN NbbbN NbbbN NbbbN", " CCC CCC CCC CCC ", - " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", - "NbbbN NbbbN N N NbbbN NbbbN", }, - { " ", " N N N N ", " N N N N ", - " N N N N ", " ", - " ", " ", - " N N N N ", " N N N N ", - " NNN NNN N N NNN NNN ", " ", - " ", " ", - " NNN NNN NNN NNN ", " ", - " ", " ", - " ", " ", - " NNN NNN NNN NNN ", " ", - " ", " ", - " NNN NNN NNN NNN ", } }; - - protected static final int DIM_TRANS_CASING = 12; - protected static final int DIM_INJECTION_CASING = 13; - protected static final int DIM_BRIDGE_CASING = 14; - - private boolean isMultiChunkloaded = true; - - protected static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, structure_string) - .addElement( - 'C', - ofCoil(GT_MetaTileEntity_PlasmaForge::setCoilLevel, GT_MetaTileEntity_PlasmaForge::getCoilLevel)) - .addElement( - 'b', - buildHatchAdder(GT_MetaTileEntity_PlasmaForge.class) - .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Energy, ExoticEnergy, Maintenance) - .casingIndex(DIM_INJECTION_CASING) - .dot(3) - .buildAndChain(GregTech_API.sBlockCasings1, DIM_INJECTION_CASING)) - .addElement('N', ofBlock(GregTech_API.sBlockCasings1, DIM_TRANS_CASING)) - .addElement('s', ofBlock(GregTech_API.sBlockCasings1, DIM_BRIDGE_CASING)) - .build(); - - public GT_MetaTileEntity_PlasmaForge(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PlasmaForge(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PlasmaForge(mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Plasma Forge, DTPF") - .addInfo("Transcending Dimensional Boundaries.") - .addInfo( - "Takes " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(max_efficiency_time_in_ticks / (3600 * 20)) - + EnumChatFormatting.GRAY - + " hours of continuous run time to fully breach dimensional") - .addInfo( - "boundaries and achieve maximum efficiency, reducing fuel consumption by up to " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(100 * maximum_discount) - + "%" - + EnumChatFormatting.GRAY - + ".") - .addInfo("Multidimensional spaces can be perfectly aligned and synchronized in this state, ") - .addInfo( - "allowing " + EnumChatFormatting.GOLD - + "Dimensional Convergence " - + EnumChatFormatting.GRAY - + "to occur. To reach the required stability threshold,") - .addInfo( - "a " + EnumChatFormatting.AQUA - + "Transdimensional Alignment Matrix " - + EnumChatFormatting.GRAY - + "must be placed in the controller.") - .addInfo( - "When " + EnumChatFormatting.GOLD - + "Convergence " - + EnumChatFormatting.GRAY - + "is active, it allows the forge to perform " - + EnumChatFormatting.RED - + "Perfect Overclocks" - + EnumChatFormatting.GRAY - + ",") - .addInfo("but the extra power cost is instead added in form of increased catalyst amounts.") - .addInfo( - "When no recipe is running, fuel discount decays x" + EnumChatFormatting.RED - + GT_Utility.formatNumbers(efficiency_decay_rate) - + EnumChatFormatting.GRAY - + " as fast as it builds up.") - .addInfo(AuthorColen) - .addSeparator() - .beginStructureBlock(33, 24, 33, false) - .addStructureInfo("DTPF Structure is too complex! See schematic for details.") - .addStructureInfo(EnumChatFormatting.GOLD + "2,112" + EnumChatFormatting.GRAY + " Heating coils required.") - .addStructureInfo( - EnumChatFormatting.GOLD + "120" + EnumChatFormatting.GRAY + " Dimensional bridge blocks required.") - .addStructureInfo( - EnumChatFormatting.GOLD + "1,270" - + EnumChatFormatting.GRAY - + " Dimensional injection casings required.") - .addStructureInfo( - EnumChatFormatting.GOLD + "2,121" - + EnumChatFormatting.GRAY - + " Dimensionally transcendent casings required.") - .addStructureInfo("--------------------------------------------") - .addStructureInfo( - "Requires " + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + "-" - + EnumChatFormatting.GOLD - + "2" - + EnumChatFormatting.GRAY - + " energy hatches or " - + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + " TT energy hatch.") - .addStructureInfo( - "Requires " + EnumChatFormatting.GOLD - + min_input_hatch - + EnumChatFormatting.GRAY - + "-" - + EnumChatFormatting.GOLD - + max_input_hatch - + EnumChatFormatting.GRAY - + " input hatches.") - .addStructureInfo( - "Requires " + EnumChatFormatting.GOLD - + min_output_hatch - + EnumChatFormatting.GRAY - + "-" - + EnumChatFormatting.GOLD - + max_output_hatch - + EnumChatFormatting.GRAY - + " output hatches.") - .addStructureInfo( - "Requires " + EnumChatFormatting.GOLD - + min_input_bus - + EnumChatFormatting.GRAY - + "-" - + EnumChatFormatting.GOLD - + max_input_bus - + EnumChatFormatting.GRAY - + " input busses.") - .addStructureInfo( - "Requires " + EnumChatFormatting.GOLD - + min_output_bus - + EnumChatFormatting.GRAY - + "-" - + EnumChatFormatting.GOLD - + max_input_bus - + EnumChatFormatting.GRAY - + " output busses.") - .addStructureInfo("--------------------------------------------") - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - boolean exotic = addExoticEnergyInputToMachineList(aTileEntity, aBaseCasingIndex); - return super.addToMachineList(aTileEntity, aBaseCasingIndex) || exotic; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - IIconContainer glow = OVERLAY_FUSION1_GLOW; - if (convergence && discount == maximum_discount) { - glow = OVERLAY_RAINBOWSCREEN_GLOW; - } - if (side == aFacing) { - if (aActive) return new ITexture[] { casingTexturePages[0][DIM_BRIDGE_CASING], TextureFactory.builder() - .addIcon(OVERLAY_DTPF_ON) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(glow) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][DIM_BRIDGE_CASING], TextureFactory.builder() - .addIcon(OVERLAY_DTPF_OFF) - .extFacing() - .build() }; - } - return new ITexture[] { casingTexturePages[0][DIM_BRIDGE_CASING] }; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.plasmaForgeRecipes; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - CheckRecipeResult recipe_process = super.checkProcessing(); - if (recipe_process.wasSuccessful()) { - running_time = running_time + mMaxProgresstime; - } - return recipe_process; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - overclockCalculator = super.createOverclockCalculator(recipe).setRecipeHeat(recipe.mSpecialValue) - .setMachineHeat(mHeatingCapacity); - if (discount == maximum_discount && convergence) { - overclockCalculator = overclockCalculator.enablePerfectOC(); - } - return overclockCalculator; - } - - @NotNull - @Override - protected GT_ParallelHelper createParallelHelper(@Nonnull GT_Recipe recipe) { - return super.createParallelHelper(recipeAfterAdjustments(recipe)); - } - - @Override - protected @Nonnull CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - return recipe.mSpecialValue <= mHeatingCapacity ? CheckRecipeResultRegistry.SUCCESSFUL - : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); - } - }; - } - - @Nonnull - protected GT_Recipe recipeAfterAdjustments(@Nonnull GT_Recipe recipe) { - GT_Recipe tRecipe = recipe.copy(); - boolean adjusted = false; - outside: for (int i = 0; i < recipe.mFluidInputs.length; i++) { - for (FluidStack fuel : valid_fuels) { - if (tRecipe.mFluidInputs[i].isFluidEqual(fuel)) { - recalculateDiscount(); - if (discount == maximum_discount && convergence - && overclockCalculator != null - && overclockCalculator.getCalculationStatus()) { - calculateCatalystIncrease(tRecipe, i, false); - getBaseMetaTileEntity() - .sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); - } - tRecipe.mFluidInputs[i].amount = (int) Math.round(tRecipe.mFluidInputs[i].amount * discount); - adjusted = true; - break outside; - } - } - } - // Convergence adjusts the recipe even if it has no catalyst input - if (!adjusted && discount == maximum_discount - && convergence - && overclockCalculator != null - && overclockCalculator.getCalculationStatus()) { - recalculateDiscount(); - calculateCatalystIncrease(tRecipe, 0, true); - getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); - } - return tRecipe; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - - // Reset heating capacity. - mHeatingCapacity = 0; - - // Get heating capacity from coils in structure. - setCoilLevel(HeatingCoilLevel.None); - - // Check the main structure - if (!checkPiece(STRUCTURE_PIECE_MAIN, 16, 21, 16)) return false; - - if (getCoilLevel() == HeatingCoilLevel.None) return false; - - // Item input bus check. - if (mInputBusses.size() > max_input_bus) return false; - - // Item output bus check. - if (mOutputBusses.size() > max_output_bus) return false; - - // Fluid input hatch check. - if (mInputHatches.size() > max_input_hatch) return false; - - // Fluid output hatch check. - if (mOutputHatches.size() > max_output_hatch) return false; - - // If there is more than 1 TT energy hatch, the structure check will fail. - // If there is a TT hatch and a normal hatch, the structure check will fail. - if (mExoticEnergyHatches.size() > 0) { - if (mEnergyHatches.size() > 0) return false; - if (mExoticEnergyHatches.size() > 1) return false; - } - - // If there is 0 or more than 2 energy hatches structure check will fail. - if (mEnergyHatches.size() > 0) { - if (mEnergyHatches.size() > 2) return false; - - // Check will also fail if energy hatches are not of the same tier. - byte tier_of_hatch = mEnergyHatches.get(0).mTier; - for (GT_MetaTileEntity_Hatch_Energy energyHatch : mEnergyHatches) { - if (energyHatch.mTier != tier_of_hatch) { - return false; - } - } - } - - // If there are no energy hatches or TT energy hatches, structure will fail to form. - if ((mEnergyHatches.size() == 0) && (mExoticEnergyHatches.size() == 0)) return false; - - // Maintenance hatch not required but left for compatibility. - // Don't allow more than 1, no free casing spam! - if (mMaintenanceHatches.size() > 1) return false; - - // Heat capacity of coils used on multi. No free heat from extra EU! - mHeatingCapacity = (int) getCoilLevel().getHeat(); - - // All structure checks passed, return true. - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public void clearHatches() { - super.clearHatches(); - mExoticEnergyHatches.clear(); - } - - @Override - public boolean addOutput(FluidStack aLiquid) { - if (aLiquid == null) return false; - FluidStack tLiquid = aLiquid.copy(); - - return dumpFluid(mOutputHatches, tLiquid, true) || dumpFluid(mOutputHatches, tLiquid, false); - } - - @Override - public String[] getInfoData() { - - long storedEnergy = 0; - long maxEnergy = 0; - - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(mExoticEnergyHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - long voltage = getAverageInputVoltage(); - long amps = getMaxInputAmps(); - - // Calculate discount to make sure it is shown properly even when machine is off but decaying - recalculateDiscount(); - - return new String[] { "------------ Critical Information ------------", - StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime) - + EnumChatFormatting.RESET - + "t / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime) - + EnumChatFormatting.RESET - + "t", - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(getActualEnergyUsage()) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(voltage) - + EnumChatFormatting.RESET - + " EU/t(*" - + EnumChatFormatting.YELLOW - + amps - + EnumChatFormatting.RESET - + "A) " - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + VN[GT_Utility.getTier(voltage)] - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.EBF.heat") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mHeatingCapacity) - + EnumChatFormatting.RESET - + " K", - "Ticks run: " + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(running_time) - + EnumChatFormatting.RESET - + ", Fuel Discount: " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(100 * (1 - discount)) - + EnumChatFormatting.RESET - + "%", - "Convergence: " + (convergence ? EnumChatFormatting.GREEN + "Active" : EnumChatFormatting.RED + "Inactive"), - "-----------------------------------------" }; - } - - private void recalculateDiscount() { - double time_percentage = running_time / max_efficiency_time_in_ticks; - time_percentage = Math.min(time_percentage, 1.0d); - // Multiplied by 0.5 because that is the maximum achievable discount - discount = 1 - time_percentage * 0.5; - discount = Math.max(maximum_discount, discount); - } - - private int catalystTypeForRecipesWithoutCatalyst = 1; - - private void calculateCatalystIncrease(GT_Recipe recipe, int index, boolean withoutCatalyst) { - long machineConsumption = overclockCalculator.getConsumption(); - int numberOfOverclocks = (int) Math.ceil(calculateTier(machineConsumption) - GT_Utility.getTier(recipe.mEUt)); - double recipeDuration = recipe.mDuration / Math.pow(4, numberOfOverclocks); - // Power difference between regular and perfect OCs for this recipe duration - long extraPowerNeeded = (long) ((Math.pow(2, numberOfOverclocks) - 1) * machineConsumption * recipeDuration); - int inputFluids = recipe.mFluidInputs.length; - int outputFluids = recipe.mFluidOutputs.length; - int extraCatalystNeeded; - Fluid validFuel; - if (!withoutCatalyst) { - validFuel = recipe.mFluidInputs[index].getFluid(); - extraCatalystNeeded = (int) (extraPowerNeeded / FUEL_ENERGY_VALUES.get(validFuel) - .getLeft()); - recipe.mFluidInputs[index].amount += extraCatalystNeeded; - // Increase present catalyst and residue by calculated amount - for (int j = 0; j < outputFluids; j++) { - if (recipe.mFluidOutputs[j] - .isFluidEqual(MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1))) { - recipe.mFluidOutputs[j].amount += (int) (extraCatalystNeeded * FUEL_ENERGY_VALUES.get(validFuel) - .getRight()); - } - } - } else { - // Add chosen catalyst as recipe input - validFuel = valid_fuels[catalystTypeForRecipesWithoutCatalyst - 1].getFluid(); - extraCatalystNeeded = (int) (extraPowerNeeded / FUEL_ENERGY_VALUES.get(validFuel) - .getLeft()); - FluidStack[] newInputFluids = new FluidStack[inputFluids + 1]; - for (int i = 0; i < inputFluids; i++) { - newInputFluids[i] = recipe.mFluidInputs[i].copy(); - } - newInputFluids[inputFluids] = new FluidStack(validFuel, extraCatalystNeeded / 2); - recipe.mFluidInputs = newInputFluids; - // Add residue as recipe output - FluidStack[] newOutputFluids = new FluidStack[outputFluids + 1]; - for (int i = 0; i < outputFluids; i++) { - newOutputFluids[i] = recipe.mFluidOutputs[i].copy(); - } - newOutputFluids[outputFluids] = new FluidStack( - MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1), - (int) (extraCatalystNeeded * FUEL_ENERGY_VALUES.get(validFuel) - .getRight())); - recipe.mFluidOutputs = newOutputFluids; - } - } - - private static final double LN2 = Math.log(2); - - private double calculateTier(long voltage) { - return (1 + Math.max(0, (Math.log(voltage) / LN2) - 5) / 2); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide() && !aBaseMetaTileEntity.isAllowedToWork()) { - // If machine has stopped, stop chunkloading. - GT_ChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); - isMultiChunkloaded = false; - } else if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && !isMultiChunkloaded) { - // Load a 3x3 area centered on controller when machine is running. - GT_ChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); - - int ControllerXCoordinate = ((TileEntity) aBaseMetaTileEntity).xCoord; - int ControllerZCoordinate = ((TileEntity) aBaseMetaTileEntity).zCoord; - - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(ControllerXCoordinate, ControllerZCoordinate)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(ControllerXCoordinate + 16, ControllerZCoordinate)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(ControllerXCoordinate - 16, ControllerZCoordinate)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(ControllerXCoordinate, ControllerZCoordinate + 16)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(ControllerXCoordinate, ControllerZCoordinate - 16)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(ControllerXCoordinate + 16, ControllerZCoordinate + 16)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(ControllerXCoordinate + 16, ControllerZCoordinate - 16)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(ControllerXCoordinate - 16, ControllerZCoordinate + 16)); - GT_ChunkManager.requestChunkLoad( - (TileEntity) aBaseMetaTileEntity, - new ChunkCoordIntPair(ControllerXCoordinate - 16, ControllerZCoordinate - 16)); - - isMultiChunkloaded = true; - } - - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (aBaseMetaTileEntity.isServerSide()) { - if (mMaxProgresstime == 0) { - running_time = Math.max(0, running_time - (long) efficiency_decay_rate); - } - if (aTick % 100 == 0) { - ItemStack controllerStack = this.getControllerSlot(); - if (convergence && (controllerStack == null - || !controllerStack.isItemEqual(ItemList.Transdimensional_Alignment_Matrix.get(1)))) { - convergence = false; - getBaseMetaTileEntity() - .sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); - } - } - } - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 16, 21, 16); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 16, 21, 16, realBudget, env, false, true); - } - - @SideOnly(Side.CLIENT) - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_PLASMAFORGE_LOOP.resourceLocation; - } - - @Override - public byte getUpdateData() { - byte data = 0; - if (discount == maximum_discount) { - data += DISCOUNT_BITMAP; - } - if (convergence) { - data += CONVERGENCE_BITMAP; - } - return data; - } - - @Override - public void receiveClientEvent(byte aEventID, byte aValue) { - if (aEventID == GregTechTileClientEvents.CHANGE_CUSTOM_DATA) { - convergence = (aValue & CONVERGENCE_BITMAP) == CONVERGENCE_BITMAP; - if ((aValue & DISCOUNT_BITMAP) == DISCOUNT_BITMAP) { - discount = maximum_discount; - } - } - } - - private static final int CATALYST_WINDOW_ID = 10; - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - buildContext.addSyncedWindow(CATALYST_WINDOW_ID, this::createCatalystWindow); - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - ItemStack controllerStack = this.getControllerSlot(); - if (clickData.mouseButton == 0) { - if (controllerStack != null - && controllerStack.isItemEqual(ItemList.Transdimensional_Alignment_Matrix.get(1))) { - convergence = !convergence; - } - } else if (clickData.mouseButton == 1 && !widget.isClient()) { - widget.getContext() - .openSyncedWindow(CATALYST_WINDOW_ID); - } - }) - .setPlayClickSound(true) - .setBackground(() -> { - List ret = new ArrayList<>(); - if (convergence) { - ret.add(GT_UITextures.BUTTON_STANDARD_PRESSED); - ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_ON); - } else { - ret.add(GT_UITextures.BUTTON_STANDARD); - ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_OFF); - } - return ret.toArray(new IDrawable[0]); - }) - .addTooltip(translateToLocal("GT5U.DTPF.convergencebutton")) - .addTooltip(EnumChatFormatting.GRAY + translateToLocal("GT5U.DTPF.convergencebuttontooltip.0")) - .addTooltip(EnumChatFormatting.GRAY + translateToLocal("GT5U.DTPF.convergencebuttontooltip.1")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(174, 112) - .setSize(16, 16) - .attachSyncer(new FakeSyncWidget.BooleanSyncer(() -> convergence, (val) -> convergence = val), builder)); - super.addUIWidgets(builder, buildContext); - } - - protected ModularWindow createCatalystWindow(final EntityPlayer player) { - final int WIDTH = 58; - final int HEIGHT = 52; - final int PARENT_WIDTH = getGUIWidth(); - final int PARENT_HEIGHT = getGUIHeight(); - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.setDraggable(true); - builder.setPos( - (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) - .add( - Alignment.BottomRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) - .add(WIDTH - 3, 0) - .subtract(0, 10))); - builder.widget( - TextWidget.localised("GT5U.DTPF.catalysttier") - .setPos(3, 4) - .setSize(50, 20)) - .widget( - new NumericWidget().setSetter(val -> catalystTypeForRecipesWithoutCatalyst = (int) val) - .setGetter(() -> catalystTypeForRecipesWithoutCatalyst) - .setBounds(1, 5) - .setDefaultValue(1) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(50, 18) - .setPos(4, 25) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .addTooltip(translateToLocal("GT5U.DTPF.catalystinfotooltip")) - .attachSyncer( - new FakeSyncWidget.IntegerSyncer( - () -> catalystTypeForRecipesWithoutCatalyst, - (val) -> catalystTypeForRecipesWithoutCatalyst = val), - builder)); - return builder.build(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setLong("eRunningTime", running_time); - aNBT.setDouble("eLongDiscountValue", discount); - aNBT.setInteger("catalystType", catalystTypeForRecipesWithoutCatalyst); - aNBT.setBoolean("convergence", convergence); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - running_time = aNBT.getLong("eRunningTime"); - discount = aNBT.getDouble("eLongDiscountValue"); - catalystTypeForRecipesWithoutCatalyst = aNBT.getInteger("catalystType"); - convergence = aNBT.getBoolean("convergence"); - super.loadNBTData(aNBT); - } - - public HeatingCoilLevel getCoilLevel() { - return mCoilLevel; - } - - public void setCoilLevel(HeatingCoilLevel aCoilLevel) { - mCoilLevel = aCoilLevel; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PrimitiveBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PrimitiveBlastFurnace.java deleted file mode 100644 index d28aae81ce..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PrimitiveBlastFurnace.java +++ /dev/null @@ -1,521 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.IAlignment; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.ParticleFX; -import gregtech.api.enums.SteamVariant; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.modularui.IGetTitleColor; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.RecipeMapWorkable; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; -import gregtech.common.GT_Pollution; - -public abstract class GT_MetaTileEntity_PrimitiveBlastFurnace extends MetaTileEntity - implements IAlignment, ISurvivalConstructable, RecipeMapWorkable, IAddUIWidgets, IGetTitleColor { - - public static final int INPUT_SLOTS = 3, OUTPUT_SLOTS = 3; - private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { - - @Override - protected IStructureDefinition computeValue(Class type) { - return IStructureDefinition.builder() - .addShape( - "main", - transpose( - new String[][] { { "ccc", "c-c", "ccc" }, { "ccc", "clc", "ccc" }, { "c~c", "clc", "ccc" }, - { "ccc", "ccc", "ccc" }, })) - .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMetaID()))) - .addElement( - 'l', - ofChain(isAir(), ofBlockAnyMeta(Blocks.lava, 1), ofBlockAnyMeta(Blocks.flowing_lava, 1))) - .build(); - } - }; - - public int mMaxProgresstime = 0; - private volatile boolean mUpdated; - public int mUpdate = 5; - public int mProgresstime = 0; - public boolean mMachine = false; - - public ItemStack[] mOutputItems = new ItemStack[OUTPUT_SLOTS]; - - public GT_MetaTileEntity_PrimitiveBlastFurnace(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, INPUT_SLOTS + OUTPUT_SLOTS); - } - - public GT_MetaTileEntity_PrimitiveBlastFurnace(String aName) { - super(aName, INPUT_SLOTS + OUTPUT_SLOTS); - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return (facing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public int getProgresstime() { - return this.mProgresstime; - } - - @Override - public int maxProgresstime() { - return this.mMaxProgresstime; - } - - @Override - public int increaseProgress(int aProgress) { - this.mProgresstime += aProgress; - return this.mMaxProgresstime - this.mProgresstime; - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCoverID) { - return (GregTech_API.getCoverBehaviorNew(aCoverID.toStack()) - .isSimpleCover()) && (super.allowCoverOnSide(side, aCoverID)); - } - - @Override - public abstract MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity); - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mProgresstime", this.mProgresstime); - aNBT.setInteger("mMaxProgresstime", this.mMaxProgresstime); - if (this.mOutputItems != null) { - for (int i = 0; i < mOutputItems.length; i++) { - if (this.mOutputItems[i] != null) { - NBTTagCompound tNBT = new NBTTagCompound(); - this.mOutputItems[i].writeToNBT(tNBT); - aNBT.setTag("mOutputItem" + i, tNBT); - } - } - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.mUpdate = 5; - this.mProgresstime = aNBT.getInteger("mProgresstime"); - this.mMaxProgresstime = aNBT.getInteger("mMaxProgresstime"); - this.mOutputItems = new ItemStack[OUTPUT_SLOTS]; - for (int i = 0; i < OUTPUT_SLOTS; i++) { - this.mOutputItems[i] = GT_Utility.loadItem(aNBT, "mOutputItem" + i); - } - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public ExtendedFacing getExtendedFacing() { - return ExtendedFacing.of(getBaseMetaTileEntity().getFrontFacing()); - } - - @Override - public void setExtendedFacing(ExtendedFacing alignment) { - getBaseMetaTileEntity().setFrontFacing(alignment.getDirection()); - } - - @Override - public IAlignmentLimits getAlignmentLimits() { - return (d, r, f) -> (d.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 && r.isNotRotated() - && f.isNotFlipped(); - } - - private boolean checkMachine() { - return STRUCTURE_DEFINITION.get(this.getClass()) - .check( - this, - "main", - getBaseMetaTileEntity().getWorld(), - getExtendedFacing(), - getBaseMetaTileEntity().getXCoord(), - getBaseMetaTileEntity().getYCoord(), - getBaseMetaTileEntity().getZCoord(), - 1, - 2, - 0, - !mMachine); - } - - protected abstract Block getCasingBlock(); - - protected abstract int getCasingMetaID(); - - @Override - public void onMachineBlockUpdate() { - mUpdated = true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - final int lavaX = aBaseMetaTileEntity.getOffsetX(aBaseMetaTileEntity.getBackFacing(), 1); - final int lavaZ = aBaseMetaTileEntity.getOffsetZ(aBaseMetaTileEntity.getBackFacing(), 1); - if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive())) { - - new WorldSpawnedEventBuilder.ParticleEventBuilder().setMotion(0D, 0.3D, 0D) - .setIdentifier(ParticleFX.LARGE_SMOKE) - .setPosition( - lavaX + XSTR_INSTANCE.nextFloat(), - aBaseMetaTileEntity.getOffsetY(aBaseMetaTileEntity.getBackFacing(), 1), - lavaZ + XSTR_INSTANCE.nextFloat()) - .setWorld(getBaseMetaTileEntity().getWorld()) - .run(); - } - if (aBaseMetaTileEntity.isServerSide()) { - if (mUpdated) { - // duct tape fix for too many updates on an overloaded server, causing the structure check to not run - if (mUpdate < 0) mUpdate = 5; - mUpdated = false; - } - if (this.mUpdate-- == 0) { - this.mMachine = checkMachine(); - } - if (this.mMachine) { - if (this.mMaxProgresstime > 0) { - if (++this.mProgresstime >= this.mMaxProgresstime) { - addOutputProducts(); - this.mOutputItems = null; - this.mProgresstime = 0; - this.mMaxProgresstime = 0; - GT_Mod.achievements.issueAchievement( - aBaseMetaTileEntity.getWorld() - .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), - "steel"); - } - } else if (aBaseMetaTileEntity.isAllowedToWork()) { - checkRecipe(); - } - } - if (this.mMaxProgresstime > 0 && (aTimer % 20L == 0L)) { - GT_Pollution.addPollution( - this.getBaseMetaTileEntity(), - GT_Mod.gregtechproxy.mPollutionPrimitveBlastFurnacePerSecond); - } - - aBaseMetaTileEntity.setActive((this.mMaxProgresstime > 0) && (this.mMachine)); - final short lavaY = aBaseMetaTileEntity.getYCoord(); - if (aBaseMetaTileEntity.isActive()) { - if (aBaseMetaTileEntity.getAir(lavaX, lavaY, lavaZ)) { - aBaseMetaTileEntity.getWorld() - .setBlock(lavaX, lavaY, lavaZ, Blocks.lava, 1, 2); - this.mUpdate = 1; - } - if (aBaseMetaTileEntity.getAir(lavaX, lavaY + 1, lavaZ)) { - aBaseMetaTileEntity.getWorld() - .setBlock(lavaX, lavaY + 1, lavaZ, Blocks.lava, 1, 2); - this.mUpdate = 1; - } - } else { - Block lowerLava = aBaseMetaTileEntity.getBlock(lavaX, lavaY, lavaZ); - Block upperLava = aBaseMetaTileEntity.getBlock(lavaX, lavaY + 1, lavaZ); - if (lowerLava == Blocks.lava) { - aBaseMetaTileEntity.getWorld() - .setBlock(lavaX, lavaY, lavaZ, Blocks.air, 0, 2); - this.mUpdate = 1; - } - if (upperLava == Blocks.lava) { - aBaseMetaTileEntity.getWorld() - .setBlock(lavaX, lavaY + 1, lavaZ, Blocks.air, 0, 2); - this.mUpdate = 1; - } - } - } - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - if (aBaseMetaTileEntity.isClientSide()) - StructureLibAPI.queryAlignment((IAlignmentProvider) aBaseMetaTileEntity); - } - - /** - * Draws random flames and smoke particles in front of Primitive Blast Furnace when active - * - * @param aBaseMetaTileEntity The entity that will handle the {@link Block#randomDisplayTick} - */ - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { - if (aBaseMetaTileEntity.isActive()) { - - final ForgeDirection frontFacing = aBaseMetaTileEntity.getFrontFacing(); - - final double oX = aBaseMetaTileEntity.getOffsetX(frontFacing, 1) + 0.5D; - final double oY = aBaseMetaTileEntity.getOffsetY(frontFacing, 1); - final double oZ = aBaseMetaTileEntity.getOffsetZ(frontFacing, 1) + 0.5D; - final double offset = -0.48D; - final double horizontal = XSTR_INSTANCE.nextFloat() * 8D / 16D - 4D / 16D; - - final double x, y, z; - - y = oY + XSTR_INSTANCE.nextFloat() * 10D / 16D + 5D / 16D; - - if (frontFacing == ForgeDirection.WEST) { - x = oX - offset; - z = oZ + horizontal; - } else if (frontFacing == ForgeDirection.EAST) { - x = oX + offset; - z = oZ + horizontal; - } else if (frontFacing == ForgeDirection.NORTH) { - x = oX + horizontal; - z = oZ - offset; - } else // if (frontFacing == ForgeDirection.SOUTH.ordinal()) - { - x = oX + horizontal; - z = oZ + offset; - } - - ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(0D, 0D, 0D) - .setPosition(x, y, z) - .setWorld(getBaseMetaTileEntity().getWorld()); - particleEventBuilder.setIdentifier(ParticleFX.SMOKE) - .run(); - particleEventBuilder.setIdentifier(ParticleFX.FLAME) - .run(); - } - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.primitiveBlastRecipes; - } - - private void addOutputProducts() { - if (this.mOutputItems == null) { - return; - } - int limit = Math.min(mOutputItems.length, OUTPUT_SLOTS); - for (int i = 0; i < limit; i++) { - int absi = INPUT_SLOTS + i; - if (this.mInventory[absi] == null) { - this.mInventory[absi] = GT_Utility.copyOrNull(this.mOutputItems[i]); - } else if (GT_Utility.areStacksEqual(this.mInventory[absi], this.mOutputItems[i])) { - this.mInventory[absi].stackSize = Math.min( - this.mInventory[absi].getMaxStackSize(), - this.mInventory[absi].stackSize + this.mOutputItems[i].stackSize); - } - } - } - - private boolean spaceForOutput(ItemStack outputStack, int relativeOutputSlot) { - int absoluteSlot = relativeOutputSlot + INPUT_SLOTS; - if (this.mInventory[absoluteSlot] == null || outputStack == null) { - return true; - } - return ((this.mInventory[absoluteSlot].stackSize + outputStack.stackSize - <= this.mInventory[absoluteSlot].getMaxStackSize()) - && (GT_Utility.areStacksEqual(this.mInventory[absoluteSlot], outputStack))); - } - - private boolean checkRecipe() { - if (!this.mMachine) { - return false; - } - ItemStack[] inputs = new ItemStack[INPUT_SLOTS]; - System.arraycopy(mInventory, 0, inputs, 0, INPUT_SLOTS); - GT_Recipe recipe = getRecipeMap().findRecipe(getBaseMetaTileEntity(), false, 0, null, inputs); - if (recipe == null) { - this.mOutputItems = null; - return false; - } - for (int i = 0; i < OUTPUT_SLOTS; i++) { - if (!spaceForOutput(recipe.getOutput(i), i)) { - this.mOutputItems = null; - return false; - } - } - - if (!recipe.isRecipeInputEqual(true, null, inputs)) { - this.mOutputItems = null; - return false; - } - for (int i = 0; i < INPUT_SLOTS; i++) { - if (mInventory[i] != null && mInventory[i].stackSize == 0) { - mInventory[i] = null; - } - } - - this.mMaxProgresstime = recipe.mDuration; - this.mOutputItems = recipe.mOutputs; - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return aIndex > INPUT_SLOTS; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return !GT_Utility.areStacksEqual(aStack, this.mInventory[0]); - } - - @Override - public byte getTileEntityBaseType() { - return 0; - } - - public abstract String getName(); - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return STRUCTURE_DEFINITION.get(getClass()) - .survivalBuild( - this, - stackSize, - "main", - getBaseMetaTileEntity().getWorld(), - getExtendedFacing(), - getBaseMetaTileEntity().getXCoord(), - getBaseMetaTileEntity().getYCoord(), - getBaseMetaTileEntity().getZCoord(), - 1, - 2, - 0, - elementBudget, - env, - false); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION.get(getClass()); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - STRUCTURE_DEFINITION.get(getClass()) - .buildOrHints( - this, - stackSize, - "main", - getBaseMetaTileEntity().getWorld(), - getExtendedFacing(), - getBaseMetaTileEntity().getXCoord(), - getBaseMetaTileEntity().getYCoord(), - getBaseMetaTileEntity().getZCoord(), - 1, - 2, - 0, - hintsOnly); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder - .widget( - new SlotWidget(inventoryHandler, 0) - .setBackground( - getGUITextureSet().getItemSlot(), - GT_UITextures.OVERLAY_SLOT_INGOT_STEAM.get(getSteamVariant())) - .setPos(33, 15)) - .widget( - new SlotWidget(inventoryHandler, 1) - .setBackground( - getGUITextureSet().getItemSlot(), - GT_UITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant())) - .setPos(33, 33)) - .widget( - new SlotWidget(inventoryHandler, 2) - .setBackground( - getGUITextureSet().getItemSlot(), - GT_UITextures.OVERLAY_SLOT_FURNACE_STEAM.get(getSteamVariant())) - .setPos(33, 51)) - .widget( - new SlotWidget(inventoryHandler, 3).setAccess(true, false) - .setBackground( - getGUITextureSet().getItemSlot(), - GT_UITextures.OVERLAY_SLOT_INGOT_STEAM.get(getSteamVariant())) - .setPos(85, 24)) - .widget( - new SlotWidget(inventoryHandler, 4).setAccess(true, false) - .setBackground( - getGUITextureSet().getItemSlot(), - GT_UITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant())) - .setPos(103, 24)) - .widget( - new SlotWidget(inventoryHandler, 5).setAccess(true, false) - .setBackground( - getGUITextureSet().getItemSlot(), - GT_UITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant())) - .setPos(121, 24)) - .widget( - new ProgressBar().setTexture(GT_UITextures.PROGRESSBAR_ARROW_2_STEAM.get(getSteamVariant()), 20) - .setProgress(() -> (float) mProgresstime / mMaxProgresstime) - .setNEITransferRect( - getRecipeMap().getFrontend() - .getUIProperties().neiTransferRectId) - .setPos(58, 24) - .setSize(20, 18)); - } - - @Override - public GUITextureSet getGUITextureSet() { - return GUITextureSet.STEAM.apply(getSteamVariant()); - } - - @Override - public int getTitleColor() { - return getSteamVariant() == SteamVariant.BRONZE ? COLOR_TITLE.get() : COLOR_TITLE_WHITE.get(); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java deleted file mode 100644 index abb0605df7..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_ProcessingArray.java +++ /dev/null @@ -1,550 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.ExoticEnergy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_GLOW; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine.isValidForLowGravity; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ExoticEnergyInputHelper; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_ProcessingArray_Manager; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Item_Machines; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -@Deprecated -public class GT_MetaTileEntity_ProcessingArray extends - GT_MetaTileEntity_ExtendedPowerMultiBlockBase implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose(new String[][] { { "hhh", "hhh", "hhh" }, { "h~h", "h-h", "hhh" }, { "hhh", "hhh", "hhh" }, })) - .addElement( - 'h', - ofChain( - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeastList(t.getAllowedHatches()) - .casingIndex(48) - .dot(1) - .build()), - onElementPass(t -> t.mCasingAmount++, ofBlock(GregTech_API.sBlockCasings4, 0)))) - .build(); - - private int mCasingAmount = 0; - - private RecipeMap mLastRecipeMap; - private ItemStack lastControllerStack; - private int tTier = 0; - private int mMult = 0; - private boolean downtierUEV = true; - - public GT_MetaTileEntity_ProcessingArray(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_ProcessingArray(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ProcessingArray(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Processing Array") - .addInfo("Runs supplied machines as if placed in the world") - .addInfo("Place up to 64 singleblock GT machines into the controller") - .addInfo("Note that you still need to supply power to them all") - .addInfo("Use a screwdriver to enable separate input busses") - .addInfo("Use a wire cutter to disable UEV+ downtiering") - .addInfo("Doesn't work on certain machines, deal with it") - .addInfo("Use it if you hate GT++, or want even more speed later on") - .addInfo( - EnumChatFormatting.GOLD - + "On the way to be slowly removed. Use it strictly if you have no alternative.") - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front center") - .addCasingInfoRange("Robust Tungstensteel Machine Casing", 14, 24, false) - .addEnergyHatch("Any casing", 1) - .addMaintenanceHatch("Any casing", 1) - .addInputBus("Any casing", 1) - .addInputHatch("Any casing", 1) - .addOutputBus("Any casing", 1) - .addOutputHatch("Any casing", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - return super.addToMachineList(aTileEntity, aBaseCasingIndex) - || addExoticEnergyInputToMachineList(aTileEntity, aBaseCasingIndex); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { BlockIcons.casingTexturePages[0][48], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { BlockIcons.casingTexturePages[0][48], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][48] }; - } - - private RecipeMap fetchRecipeMap() { - if (isCorrectMachinePart(getControllerSlot())) { - // Gets the recipe map for the given machine through its unlocalized name - return GT_ProcessingArray_Manager - .giveRecipeMap(GT_ProcessingArray_Manager.getMachineName(getControllerSlot())); - } - return null; - } - - @Override - public RecipeMap getRecipeMap() { - return mLastRecipeMap; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return aStack != null && aStack.getUnlocalizedName() - .startsWith("gt.blockmachines."); - } - - @Override - protected void sendStartMultiBlockSoundLoop() { - SoundResource sound = GT_ProcessingArray_Manager - .getSoundResource(GT_ProcessingArray_Manager.getMachineName(getControllerSlot())); - if (sound != null) { - sendLoopStart((byte) sound.id); - } - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - SoundResource sound = SoundResource.get(aIndex < 0 ? aIndex + 256 : 0); - if (sound != null) { - GT_Utility.doSoundAtClient(sound, getTimeBetweenProcessSounds(), 1.0F, aX, aY, aZ); - } - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - if (!GT_Utility.areStacksEqual(lastControllerStack, getControllerSlot())) { - // controller slot has changed - lastControllerStack = getControllerSlot(); - mLastRecipeMap = fetchRecipeMap(); - setTierAndMult(); - } - if (mLastRecipeMap == null) return SimpleCheckRecipeResult.ofFailure("no_machine"); - if (mLockedToSingleRecipe && mSingleRecipeCheck != null) { - if (mSingleRecipeCheck.getRecipeMap() != mLastRecipeMap) { - return SimpleCheckRecipeResult.ofFailure("machine_mismatch"); - } - } - - return super.checkProcessing(); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - if (GT_Mod.gregtechproxy.mLowGravProcessing && recipe.mSpecialValue == -100 - && !isValidForLowGravity(recipe, getBaseMetaTileEntity().getWorld().provider.dimensionId)) { - return SimpleCheckRecipeResult.ofFailure("high_gravity"); - } - if (recipe.mEUt > availableVoltage) return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - }.setMaxParallelSupplier(this::getMaxParallel); - } - - @Override - protected boolean canUseControllerSlotForRecipe() { - return false; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Values.V[tTier] * (mLastRecipeMap != null ? mLastRecipeMap.getAmperage() : 1)); - logic.setAvailableAmperage(getMaxParallel()); - logic.setAmperageOC(false); - } - - private void setTierAndMult() { - IMetaTileEntity aMachine = GT_Item_Machines.getMetaTileEntity(getControllerSlot()); - if (aMachine instanceof GT_MetaTileEntity_TieredMachineBlock) { - tTier = ((GT_MetaTileEntity_TieredMachineBlock) aMachine).mTier; - } else { - tTier = 0; - } - mMult = 0; - if (downtierUEV && tTier > 9) { - tTier--; // Lowers down the tier by 1 to allow for bigger parallel - mMult = 2; // Multiplies Parallels by 4x, keeping the energy cost - } - } - - private int getMaxParallel() { - if (getControllerSlot() == null) { - return 0; - } - return getControllerSlot().stackSize << mMult; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (mMachine && aTick % 20 == 0) { - for (GT_MetaTileEntity_Hatch_InputBus tInputBus : mInputBusses) { - tInputBus.mRecipeMap = mLastRecipeMap; - } - for (GT_MetaTileEntity_Hatch_Input tInputHatch : mInputHatches) { - tInputHatch.mRecipeMap = mLastRecipeMap; - } - } - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack aStack, boolean aHintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - private boolean checkHatches() { - return mMaintenanceHatches.size() == 1; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("downtierUEV", downtierUEV); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("mSeparate")) { - // backward compatibility - inputSeparation = aNBT.getBoolean("mSeparate"); - } - if (aNBT.hasKey("mUseMultiparallelMode")) { - // backward compatibility - batchMode = aNBT.getBoolean("mUseMultiparallelMode"); - } - downtierUEV = aNBT.getBoolean("downtierUEV"); - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - // Lock to single recipe - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - } else { - inputSeparation = !inputSeparation; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); - } - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - batchMode = !batchMode; - if (batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, "Batch recipes"); - } else { - GT_Utility.sendChatToPlayer(aPlayer, "Don't batch recipes"); - } - } else { - downtierUEV = !downtierUEV; - GT_Utility.sendChatToPlayer(aPlayer, "Treat UEV+ machines as multiple UHV " + downtierUEV); - } - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - private List> getAllowedHatches() { - return ImmutableList.of(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy, ExoticEnergy); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mExoticEnergyHatches.clear(); - mCasingAmount = 0; - return checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 0) && mCasingAmount >= 14 && checkHatches(); - } - - @Override - public String[] getInfoData() { - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(mExoticEnergyHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - - return new String[] { - StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(-lEUt) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers( - GT_ExoticEnergyInputHelper.getMaxInputVoltageMulti(getExoticAndNormalEnergyHatchList())) - + EnumChatFormatting.RESET - + " EU/t(*" - + GT_Utility - .formatNumbers(GT_ExoticEnergyInputHelper.getMaxInputAmpsMulti(getExoticAndNormalEnergyHatchList())) - + "A) " - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + VN[GT_Utility - .getTier(GT_ExoticEnergyInputHelper.getMaxInputVoltageMulti(getExoticAndNormalEnergyHatchList()))] - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - StatCollector.translateToLocal("GT5U.PA.machinetier") + ": " - + EnumChatFormatting.GREEN - + tTier - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.PA.discount") - + ": " - + EnumChatFormatting.GREEN - + 1 - + EnumChatFormatting.RESET - + " x", - StatCollector.translateToLocal("GT5U.PA.parallel") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(getMaxParallel()) - + EnumChatFormatting.RESET }; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - protected boolean supportsSlotAutomation(int aSlot) { - return aSlot == getControllerSlotIndex(); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - downtierUEV = !downtierUEV; - setTierAndMult(); - }) - .setPlayClickSound(true) - .setBackground(() -> { - if (downtierUEV) { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_BUTTON_DOWN_TIERING_ON }; - } else { - return new IDrawable[] { GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_DOWN_TIERING_OFF }; - } - }) - .setPos(80, 91) - .setSize(16, 16) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.down_tier")) - .setTooltipShowUpDelay(TOOLTIP_DELAY)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> downtierUEV, val -> downtierUEV = val)); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - if (mLastRecipeMap != null && getControllerSlot() != null) { - tag.setString("type", getControllerSlot().getDisplayName()); - } - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - if (tag.hasKey("type")) { - currentTip.add("Machine: " + EnumChatFormatting.YELLOW + tag.getString("type")); - } else { - currentTip.add("Machine: " + EnumChatFormatting.YELLOW + "None"); - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java deleted file mode 100644 index ff84a69b44..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java +++ /dev/null @@ -1,263 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockUnlocalizedName; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PYROLYSE_OVEN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PYROLYSE_OVEN_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PYROLYSE_OVEN_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PYROLYSE_OVEN_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.Textures; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_PyrolyseOven - extends GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - private HeatingCoilLevel coilHeat; - private static final int CASING_INDEX = 1090; - private static final IStructureDefinition STRUCTURE_DEFINITION = createStructureDefinition(); - - private static IStructureDefinition createStructureDefinition() { - IStructureElement tCasingElement = NewHorizonsCoreMod.isModLoaded() - ? ofBlockUnlocalizedName(NewHorizonsCoreMod.ID, "gt.blockcasingsNH", 2) - : ofBlock(GregTech_API.sBlockCasings1, 0); - - return StructureDefinition.builder() - .addShape( - "main", - transpose( - new String[][] { { "ccccc", "ctttc", "ctttc", "ctttc", "ccccc" }, - { "ccccc", "c---c", "c---c", "c---c", "ccccc" }, - { "ccccc", "c---c", "c---c", "c---c", "ccccc" }, - { "bb~bb", "bCCCb", "bCCCb", "bCCCb", "bbbbb" }, })) - .addElement('c', onElementPass(GT_MetaTileEntity_PyrolyseOven::onCasingAdded, tCasingElement)) - .addElement( - 'C', - ofCoil(GT_MetaTileEntity_PyrolyseOven::setCoilLevel, GT_MetaTileEntity_PyrolyseOven::getCoilLevel)) - .addElement( - 'b', - buildHatchAdder(GT_MetaTileEntity_PyrolyseOven.class) - .atLeast(OutputBus, OutputHatch, Energy, Maintenance) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(onElementPass(GT_MetaTileEntity_PyrolyseOven::onCasingAdded, tCasingElement))) - .addElement( - 't', - buildHatchAdder(GT_MetaTileEntity_PyrolyseOven.class).atLeast(InputBus, InputHatch, Muffler) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(onElementPass(GT_MetaTileEntity_PyrolyseOven::onCasingAdded, tCasingElement))) - .build(); - } - - private int mCasingAmount; - - public GT_MetaTileEntity_PyrolyseOven(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PyrolyseOven(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Coke Oven") - .addInfo("Controller block for the Pyrolyse Oven") - .addInfo("Industrial Charcoal producer") - .addInfo("Processing speed scales linearly with Coil tier:") - .addInfo("CuNi: 50%, FeAlCr: 100%, Ni4Cr: 150%, TPV: 200%, etc.") - .addInfo("EU/t is not affected by Coil tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(5, 4, 5, true) - .addController("Front center") - .addCasingInfoRange("Pyrolyse Oven Casing", 60, 80, false) - .addOtherStructurePart("Heating Coils", "Center 3x1x3 of the bottom layer") - .addEnergyHatch("Any bottom layer casing", 1) - .addMaintenanceHatch("Any bottom layer casing", 1) - .addMufflerHatch("Center 3x1x3 area in top layer", 2) - .addInputBus("Center 3x1x3 area in top layer", 2) - .addInputHatch("Center 3x1x3 area in top layer", 2) - .addOutputBus("Any bottom layer casing", 1) - .addOutputHatch("Any bottom layer casing", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection == facingDirection) { - if (active) return new ITexture[] { BlockIcons.casingTexturePages[8][66], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PYROLYSE_OVEN_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PYROLYSE_OVEN_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { BlockIcons.casingTexturePages[8][66], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PYROLYSE_OVEN) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PYROLYSE_OVEN_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.casingTexturePages[8][66] }; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.pyrolyseRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - public CheckRecipeResult process() { - setSpeedBonus(2f / (1 + coilHeat.getTier())); - return super.process(); - } - }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - private void onCasingAdded() { - mCasingAmount++; - } - - public HeatingCoilLevel getCoilLevel() { - return coilHeat; - } - - private void setCoilLevel(HeatingCoilLevel aCoilLevel) { - coilHeat = aCoilLevel; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - coilHeat = HeatingCoilLevel.None; - mCasingAmount = 0; - replaceDeprecatedCoils(aBaseMetaTileEntity); - return checkPiece("main", 2, 3, 0) && mCasingAmount >= 60 - && mMaintenanceHatches.size() == 1 - && !mMufflerHatches.isEmpty(); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return GT_Mod.gregtechproxy.mPollutionPyrolyseOvenPerSecond; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PyrolyseOven(this.mName); - } - - private void replaceDeprecatedCoils(IGregTechTileEntity aBaseMetaTileEntity) { - final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX; - final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ; - final int tX = aBaseMetaTileEntity.getXCoord() + xDir * 2; - final int tY = aBaseMetaTileEntity.getYCoord(); - final int tZ = aBaseMetaTileEntity.getZCoord() + zDir * 2; - for (int xPos = tX - 1; xPos <= tX + 1; xPos++) { - for (int zPos = tZ - 1; zPos <= tZ + 1; zPos++) { - if (aBaseMetaTileEntity.getBlock(xPos, tY, zPos) == GregTech_API.sBlockCasings1 - && aBaseMetaTileEntity.getMetaID(xPos, tY, zPos) == 13) { - aBaseMetaTileEntity.getWorld() - .setBlock(xPos, tY, zPos, GregTech_API.sBlockCasings5, 1, 3); - } - } - } - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece("main", stackSize, hintsOnly, 2, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece("main", stackSize, 2, 3, 0, elementBudget, env, false, true); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java deleted file mode 100644 index 749a94df57..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_TranscendentPlasmaMixer.java +++ /dev/null @@ -1,389 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorColen; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DTPF_OFF; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DTPF_ON; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; -import static gregtech.common.misc.WirelessNetworkManager.getUserEU; -import static gregtech.common.misc.WirelessNetworkManager.processInitialSettings; -import static gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_PlasmaForge.DIM_BRIDGE_CASING; -import static gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_PlasmaForge.DIM_INJECTION_CASING; -import static gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_PlasmaForge.DIM_TRANS_CASING; -import static net.minecraft.util.EnumChatFormatting.GOLD; -import static net.minecraft.util.EnumChatFormatting.GRAY; -import static net.minecraft.util.StatCollector.translateToLocal; -import static util.Util.toStandardForm; - -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; - -public class GT_MetaTileEntity_TranscendentPlasmaMixer - extends GT_MetaTileEntity_EnhancedMultiBlockBase - implements ISurvivalConstructable { - - private static final String[][] structure = new String[][] { - { " CAC ", " ABA ", " ABA ", " A~A ", " ABA ", " ABA ", " CAC " }, - { "CBBBC", "A A", "A A", "A A", "A A", "A A", "CBBBC" }, - { "ABBBA", "B B", "B B", "B B", "B B", "B B", "ABBBA" }, - { "CBBBC", "A A", "A A", "A A", "A A", "A A", "CBBBC" }, - { " CAC ", " ABA ", " ABA ", " ABA ", " ABA ", " ABA ", " CAC " } }; - - private static final String STRUCTURE_PIECE_MAIN = "MAIN"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, structure) - .addElement( - 'B', - buildHatchAdder(GT_MetaTileEntity_TranscendentPlasmaMixer.class) - .atLeast(InputHatch, OutputHatch, InputBus, Maintenance) - .casingIndex(DIM_INJECTION_CASING) - .dot(1) - .buildAndChain(GregTech_API.sBlockCasings1, DIM_INJECTION_CASING)) - .addElement('A', ofBlock(GregTech_API.sBlockCasings1, DIM_TRANS_CASING)) - .addElement('C', ofBlock(GregTech_API.sBlockCasings1, DIM_BRIDGE_CASING)) - .build(); - - private UUID ownerUUID; - - public GT_MetaTileEntity_TranscendentPlasmaMixer(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_TranscendentPlasmaMixer(String aName) { - super(aName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Transcendent Mixer") - .addInfo("Assisting in all your DTPF needs.") - .addInfo("This multiblock will run in parallel according to the amount set") - .addInfo("in the parallel menu. All inputs will scale, except time.") - .addInfo("All EU is deducted from wireless EU networks only.") - .addInfo(AuthorColen) - .addSeparator() - .beginStructureBlock(5, 7, 5, false) - .addStructureInfo(GOLD + "1+ " + GRAY + "Input Hatch") - .addStructureInfo(GOLD + "1+ " + GRAY + "Output Hatch") - .addStructureInfo(GOLD + "1+ " + GRAY + "Input Bus") - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_TranscendentPlasmaMixer(mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { casingTexturePages[0][DIM_TRANS_CASING], TextureFactory.builder() - .addIcon(OVERLAY_DTPF_ON) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FUSION1_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][DIM_TRANS_CASING], TextureFactory.builder() - .addIcon(OVERLAY_DTPF_OFF) - .extFacing() - .build() }; - } - - return new ITexture[] { casingTexturePages[0][DIM_TRANS_CASING] }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - int multiplier = 1; - BigInteger finalConsumption = BigInteger.ZERO; - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.transcendentPlasmaMixerRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - BigInteger recipeEU; - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - BigInteger availableEU = getUserEU(ownerUUID); - recipeEU = BigInteger.valueOf(10L * recipe.mEUt * recipe.mDuration); - if (availableEU.compareTo(recipeEU) < 0) { - finalConsumption = BigInteger.ZERO; - return CheckRecipeResultRegistry.insufficientStartupPower(recipeEU); - } - maxParallel = availableEU.divide(recipeEU) - .min(BigInteger.valueOf(maxParallel)) - .intValue(); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { - finalConsumption = recipeEU.multiply(BigInteger.valueOf(-calculatedParallels)); - // This will void the inputs if wireless energy has dropped - // below the required amount between validateRecipe and here. - if (!addEUToGlobalEnergyMap(ownerUUID, finalConsumption)) { - return CheckRecipeResultRegistry.insufficientStartupPower(finalConsumption); - } - // Energy consumed all at once from wireless net. - setCalculatedEut(0); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Nonnull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@Nonnull GT_Recipe recipe) { - return GT_OverclockCalculator.ofNoOverclock(recipe); - } - }.setMaxParallelSupplier(() -> multiplier); - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - // The voltage is only used for recipe finding - logic.setAvailableVoltage(Long.MAX_VALUE); - logic.setAvailableAmperage(1); - logic.setAmperageOC(false); - } - - private static final int HORIZONTAL_OFFSET = 2; - private static final int VERTICAL_OFFSET = 3; - private static final int DEPTH_OFFSET = 0; - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFFSET, VERTICAL_OFFSET, DEPTH_OFFSET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - HORIZONTAL_OFFSET, - VERTICAL_OFFSET, - DEPTH_OFFSET, - elementBudget, - env, - false, - true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - - // Check the main structure - if (!checkPiece(STRUCTURE_PIECE_MAIN, HORIZONTAL_OFFSET, VERTICAL_OFFSET, DEPTH_OFFSET)) { - return false; - } - - // Maintenance hatch not required but left for compatibility. - // Don't allow more than 1, no free casing spam! - return (mMaintenanceHatches.size() <= 1); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - - super.onPreTick(aBaseMetaTileEntity, aTick); - - if (aBaseMetaTileEntity.isServerSide() && (aTick == 1)) { - // Adds player to the wireless network if they do not already exist on it. - ownerUUID = processInitialSettings(aBaseMetaTileEntity); - } - } - - private static final int PARALLEL_WINDOW_ID = 10; - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - buildContext.addSyncedWindow(PARALLEL_WINDOW_ID, this::createParallelWindow); - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient()) { - widget.getContext() - .openSyncedWindow(PARALLEL_WINDOW_ID); - } - }) - .setPlayClickSound(true) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_ON); - return ret.toArray(new IDrawable[0]); - }) - .addTooltip(translateToLocal("GT5U.tpm.parallelwindow")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(174, 112) - .setSize(16, 16)); - super.addUIWidgets(builder, buildContext); - } - - protected ModularWindow createParallelWindow(final EntityPlayer player) { - final int WIDTH = 158; - final int HEIGHT = 52; - final int PARENT_WIDTH = getGUIWidth(); - final int PARENT_HEIGHT = getGUIHeight(); - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.setDraggable(true); - builder.setPos( - (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) - .add( - Alignment.BottomRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) - .add(WIDTH - 3, 0) - .subtract(0, 10))); - builder.widget( - TextWidget.localised("GTPP.CC.parallel") - .setPos(3, 4) - .setSize(150, 20)) - .widget( - new NumericWidget().setSetter(val -> multiplier = (int) val) - .setGetter(() -> multiplier) - .setBounds(1, Integer.MAX_VALUE) - .setDefaultValue(1) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(150, 18) - .setPos(4, 25) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .attachSyncer( - new FakeSyncWidget.IntegerSyncer(() -> multiplier, (val) -> multiplier = val), - builder)); - return builder.build(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("eMultiplier", multiplier); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - multiplier = aNBT.getInteger("eMultiplier"); - super.loadNBTData(aNBT); - } - - @Override - public String[] getInfoData() { - return new String[] { - StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + (mMaxProgresstime == 0 ? "0" - : toStandardForm(finalConsumption.divide(BigInteger.valueOf(-mMaxProgresstime)))) - + EnumChatFormatting.RESET - + " EU/t" }; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java deleted file mode 100644 index 499da54bc3..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_VacuumFreezer.java +++ /dev/null @@ -1,163 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.StructureUtility; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_CubicMultiBlockBase; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; - -public class GT_MetaTileEntity_VacuumFreezer - extends GT_MetaTileEntity_CubicMultiBlockBase { - - public GT_MetaTileEntity_VacuumFreezer(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_VacuumFreezer(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_VacuumFreezer(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Vacuum Freezer") - .addInfo("Controller Block for the Vacuum Freezer") - .addInfo("Cools hot ingots and cells") - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front center") - .addCasingInfoRange("Frost Proof Machine Casing", 16, 24, false) - .addEnergyHatch("Any casing", 1) - .addMaintenanceHatch("Any casing", 1) - .addInputHatch("Any casing", 1) - .addOutputHatch("Any casing", 1) - .addInputBus("Any casing", 1) - .addOutputBus("Any casing", 1) - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - ITexture[] rTexture; - if (side == aFacing) { - if (aActive) { - rTexture = new ITexture[] { casingTexturePages[0][17], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { casingTexturePages[0][17], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_VACUUM_FREEZER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { casingTexturePages[0][17] }; - } - return rTexture; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.vacuumFreezerRecipes; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic(); - } - - @Override - protected IStructureElement> getCasingElement() { - return StructureUtility.ofBlock(GregTech_API.sBlockCasings2, 1); - } - - @Override - protected List>> getAllowedHatches() { - return ImmutableList.of(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy); - } - - @Override - protected int getHatchTextureIndex() { - return 17; - } - - @Override - protected int getRequiredCasingCount() { - return 16; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_WormholeGenerator.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_WormholeGenerator.java deleted file mode 100644 index eeb5770800..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_WormholeGenerator.java +++ /dev/null @@ -1,1119 +0,0 @@ -package gregtech.common.tileentities.machines.multi; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; -import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.GT_Values.VN; -import static gregtech.api.enums.Textures.BlockIcons.getCasingTextureForId; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.lang.ref.Reference; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.github.technus.tectech.thing.casing.GT_Block_CasingsTT; -import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti; -import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti; -import com.google.common.collect.MapMaker; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import appeng.api.AEApi; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_EnhancedMultiBlockBase; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.ResultMissingItem; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.common.tileentities.render.TileWormhole; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MetaTileEntity_WormholeGenerator extends - GT_MetaTileEntity_EnhancedMultiBlockBase implements ISurvivalConstructable { - - /** - * Number of seconds to average the wormhole energy over. - */ - public static int WH_ENERGY_AVG_WINDOW = 90; - - /** - * The amount of EU received per EU sent. - */ - public static double TRANSFER_EFFICIENCY = (1.0 - 0.00_0004 * 64); - - /** - * The amount of EU to lose every second the wormhole decays. - */ - public static double DECAY_RATE = 0.25; - - /** - * The amount of EU that the wormhole collapses at. - */ - public static double COLLAPSE_THRESHOLD = 32; - - /** - * The wormhole render radius percent of the max size when specified wormhole power is reached (purely aesthetical) - */ - public static double RENDER_PERCENT_TARGET = .1; - - /** - * Wormhole energy to specify reach the specified size percentage (purely aesthetical) - */ - public static double RENDER_TARGET_ENERGY = TierEU.IV * 256; - - /** - * Maximum wormhole radius (purely aesthetical) - */ - public static double RENDER_MAX_RADIUS = 2.999 / Math.sqrt(3); - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final byte GLASS_TIER_UNSET = -2; - - private static final int TT_CASING_INDEX = GT_Block_CasingsTT.textureOffset; - - private static final int TOP_HATCH = 0, BOTTOM_HATCH = 1, LEFT_HATCH = 2, RIGHT_HATCH = 3, BACK_HATCH = 4, - FRONT_HATCH = 5, MAX_HATCHES = 6; - - private static final int[] OPPOSITES = { BOTTOM_HATCH, TOP_HATCH, RIGHT_HATCH, LEFT_HATCH, FRONT_HATCH, - BACK_HATCH, }; - - private static final String[] HATCH_NAMES = { "Top", "Bottom", "Left", "Right", "Back", "Front" }; - private static final boolean[] HATCH_MASK = { true, true, true, true, false, false }; - - private byte mGlassTier = -2; - private boolean mStructureBadGlassTier = false; - - private final GT_MetaTileEntity_Hatch_EnergyMulti[] mSendHatches = new GT_MetaTileEntity_Hatch_EnergyMulti[MAX_HATCHES]; - private final GT_MetaTileEntity_Hatch_DynamoMulti[] mReceiveHatches = new GT_MetaTileEntity_Hatch_DynamoMulti[MAX_HATCHES]; - - private final ItemStack singularity = AEApi.instance() - .definitions() - .materials() - .singularity() - .maybeStack(1) - .get(); - private final ItemStack qeSingularity = AEApi.instance() - .definitions() - .materials() - .qESingularity() - .maybeStack(1) - .get(); - - private WormholeLink mLink; - private final WeakReference mSelfReference = new WeakReference<>(this); - - private double mWormholeEnergy_UI = 0; - - private boolean mIsUnloading = false; - - public GT_MetaTileEntity_WormholeGenerator(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_WormholeGenerator(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_WormholeGenerator(mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean active, boolean redstoneLevel) { - if (side == facing) { - if (active) { - return new ITexture[] { getCasingTextureForId(TT_CASING_INDEX), TextureFactory.builder() - .addIcon(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active) - .extFacing() - .build() }; - } else { - return new ITexture[] { getCasingTextureForId(TT_CASING_INDEX), TextureFactory.builder() - .addIcon(TexturesGtBlock.Overlay_Machine_Controller_Advanced) - .extFacing() - .build() }; - } - } - return new ITexture[] { getCasingTextureForId(TT_CASING_INDEX) }; - } - - // #region Structure - - // spotless:off - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][]{ - {" "," F "," EEE "," FEtEF "," EEE "," F "," "}, - {" F "," AADAA "," A B A ","FDBBBDF"," A B A "," AADAA "," F "}, - {" EEE "," A B A ","E E","EB BE","E E"," A B A "," EEE "}, - {" FE~EF ","FA B AF","E E","lB Br","E E","FA B AF"," FEEEF "}, - {" EEE "," A B A ","E E","EB BE","E E"," A B A "," EEE "}, - {" F "," AADAA "," A B A ","FDBBBDF"," A B A "," AADAA "," F "}, - {" "," F "," EEE "," FEbEF "," EEE "," F "," "} - })) - .addElement('E', - buildHatchAdder(GT_MetaTileEntity_WormholeGenerator.class) - .atLeast(Maintenance, InputBus) - .casingIndex(TT_CASING_INDEX) // High Power Casing - .dot(1) - .buildAndChain(lazy(() -> ofBlock(TT_Container_Casings.sBlockCasingsTT, 0))) // High Power Casing - ) - .addElement( - 'A', - withChannel( - "glass", - BorosilicateGlass.ofBoroGlass(GLASS_TIER_UNSET, (te, t) -> te.mGlassTier = t, te -> te.mGlassTier)) - ) - .addElement('D', ofBlock(GregTech_API.sBlockCasings8, 5)) // Europium Reinforced Radiation Proof Machine Casing - .addElement('B', ofBlock(GregTech_API.sBlockCasings4, 7)) // Fusion Coil Block - .addElement('F', lazy(() -> ofBlock(TT_Container_Casings.sBlockCasingsTT, 4))) // Molecular Casing - .addElement('t', - buildHatchAdder(GT_MetaTileEntity_WormholeGenerator.class) - .anyOf(new TransferHatch(TOP_HATCH)) - .casingIndex(TT_CASING_INDEX) // High Power Casing - .dot(2) - .buildAndChain(lazy(() -> ofBlock(TT_Container_Casings.sBlockCasingsTT, 0))) // High Power Casing - ) - .addElement('b', - buildHatchAdder(GT_MetaTileEntity_WormholeGenerator.class) - .anyOf(new TransferHatch(BOTTOM_HATCH)) - .casingIndex(TT_CASING_INDEX) // High Power Casing - .dot(2) - .buildAndChain(lazy(() -> ofBlock(TT_Container_Casings.sBlockCasingsTT, 0))) // High Power Casing - ) - .addElement('l', - buildHatchAdder(GT_MetaTileEntity_WormholeGenerator.class) - .anyOf(new TransferHatch(LEFT_HATCH)) - .casingIndex(TT_CASING_INDEX) // High Power Casing - .dot(2) - .buildAndChain(lazy(() -> ofBlock(TT_Container_Casings.sBlockCasingsTT, 0))) // High Power Casing - ) - .addElement('r', - buildHatchAdder(GT_MetaTileEntity_WormholeGenerator.class) - .anyOf(new TransferHatch(RIGHT_HATCH)) - .casingIndex(TT_CASING_INDEX) // High Power Casing - .dot(2) - .buildAndChain(lazy(() -> ofBlock(TT_Container_Casings.sBlockCasingsTT, 0))) // High Power Casing - ) - .build(); - // spotless:on - - private static class TransferHatch implements IHatchElement { - - public final int mIndex; - - public TransferHatch(int index) { - this.mIndex = index; - } - - @Override - public List> mteClasses() { - return Arrays.asList(GT_MetaTileEntity_Hatch_EnergyMulti.class, GT_MetaTileEntity_Hatch_DynamoMulti.class); - } - - @Override - public IGT_HatchAdder adder() { - return (tile, aTileEntity, aBaseCasingIndex) -> { - if (aTileEntity == null) return false; - - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - - if (aMetaTileEntity == null) return false; - - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_EnergyMulti input) { - input.updateTexture(aBaseCasingIndex); - input.updateCraftingIcon(tile.getMachineCraftingIcon()); - tile.mSendHatches[mIndex] = input; - return true; - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DynamoMulti output) { - output.updateTexture(aBaseCasingIndex); - output.updateCraftingIcon(tile.getMachineCraftingIcon()); - tile.mReceiveHatches[mIndex] = output; - return true; - } - - return false; - }; - } - - @Override - public String name() { - return "TransferHatch"; - } - - @Override - public long count(GT_MetaTileEntity_WormholeGenerator t) { - return t.mExoticEnergyHatches.size(); - } - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.GT_MACHINES_FUSION_LOOP; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 3, 0)) return false; - - mStructureBadGlassTier = false; - - for (var energyHatch : mExoticEnergyHatches) { - if (energyHatch.getBaseMetaTileEntity() == null) { - continue; - } - - if (energyHatch.getTierForStructure() > mGlassTier) { - mStructureBadGlassTier = true; - } - } - - return !mStructureBadGlassTier; - } - - @Override - public void clearHatches() { - super.clearHatches(); - - Arrays.fill(mSendHatches, null); - Arrays.fill(mReceiveHatches, null); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 3, 0, elementBudget, env, false, true); - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - // #endregion - @Override - public void onBlockDestroyed() { - super.onBlockDestroyed(); - destroyRenderBlock(); - } - - @Override - public void onDisableWorking() { - super.onDisableWorking(); - // destroyRenderBlock(); - } - - @Override - public void onStructureChange() { - super.onStructureChange(); - if (!checkStructure(false, this.getBaseMetaTileEntity())) { - destroyRenderBlock(); - } - } - - private void destroyRenderBlock() { - IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); - if (gregTechTileEntity.getWorld() == null) { - return; - } - - int x = gregTechTileEntity.getXCoord(); - int y = gregTechTileEntity.getYCoord(); - int z = gregTechTileEntity.getZCoord(); - - int xOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetX; - int yOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetY; - int zOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetZ; - - int xTarget = x + xOffset; - int yTarget = y + yOffset; - int zTarget = z + zOffset; - - Optional.of(gregTechTileEntity) - .map(IHasWorldObjectAndCoords::getWorld) - .ifPresent(w -> w.setBlock(xTarget, yTarget, zTarget, Blocks.air)); - } - - @Nullable - private TileWormhole createRenderBlock() { - - IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); - World world = gregTechTileEntity.getWorld(); - - if (world == null) { - return null; - } - - int x = gregTechTileEntity.getXCoord(); - int y = gregTechTileEntity.getYCoord(); - int z = gregTechTileEntity.getZCoord(); - - int xOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetX; - int yOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetY; - int zOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetZ; - - int xTarget = x + xOffset; - int yTarget = y + yOffset; - int zTarget = z + zOffset; - - world.setBlock(xTarget, yTarget, zTarget, Blocks.air); - world.setBlock(xTarget, yTarget, zTarget, GregTech_API.sWormholeRender); - - TileWormhole wormhole = (TileWormhole) world.getTileEntity(xTarget, yTarget, zTarget); - - if (wormhole == null) { - return null; - } - return wormhole; - } - - @Nullable - private TileWormhole getRenderBlock() { - IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); - - int x = gregTechTileEntity.getXCoord(); - int y = gregTechTileEntity.getYCoord(); - int z = gregTechTileEntity.getZCoord(); - - double xOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetX; - double zOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetZ; - double yOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetY; - - int wX = (int) (x + xOffset); - int wY = (int) (y + yOffset); - int wZ = (int) (z + zOffset); - - TileEntity tile = Optional.ofNullable(gregTechTileEntity.getWorld()) - .map(w -> w.getTileEntity(wX, wY, wZ)) - .orElse(null); - if (tile instanceof TileWormhole wormhole) return wormhole; - return null; - - } - - public void updateRenderDim() { - TileWormhole temp = getRenderBlock(); - - World target = Optional.ofNullable(mLink) - .map(link -> link.getDest(mSelfReference)) - .map(MetaTileEntity::getBaseMetaTileEntity) - .map(IHasWorldObjectAndCoords::getWorld) - .orElse(null); - - TileWormhole hole = getRenderBlock(); - if (hole == null) hole = createRenderBlock(); - - if (hole != null) { - hole.setDimFromWorld(target); - } - } - - public void updateRenderRadius(double radius) { - TileWormhole hole = getRenderBlock(); - if (hole == null) hole = createRenderBlock(); - - if (hole != null) { - hole.setRadius(radius); - } - } - - private static double wormholeRadiusCalc(double energy) { - if (energy < COLLAPSE_THRESHOLD) return 0; - - double offset = RENDER_TARGET_ENERGY + (COLLAPSE_THRESHOLD - RENDER_TARGET_ENERGY) / (RENDER_PERCENT_TARGET); - return RENDER_MAX_RADIUS * (COLLAPSE_THRESHOLD - energy) / (offset - energy); - } - - // #region Logic - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public void onUnload() { - super.onUnload(); - mIsUnloading = true; - if (mLink != null) { - mLink.disconnect(mSelfReference); - } - } - - @Override - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - checkFrequency(); - - mMaxProgresstime = 20; - mEfficiency = Math.max(0, getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000)); - - if (doRandomMaintenanceDamage()) { - if (onRunningTick(mInventory[1])) { - markDirty(); - - if (++mProgresstime >= mMaxProgresstime) { - mProgresstime = 0; - - if (mLink != null) { - mLink.update(mSelfReference); - } - checkRecipe(); - } - } - } - } - - @Override - @Nonnull - public CheckRecipeResult checkProcessing() { - if (mLink == null || !mLink.isConnected(mSelfReference) - || getBaseMetaTileEntity() == null - || !getBaseMetaTileEntity().isAllowedToWork()) { - return SimpleCheckRecipeResult.ofFailure("none"); - } - - if (mLink.isActive()) { - for (int i = 0; i < MAX_HATCHES; i++) { - if (!HATCH_MASK[i]) continue; - long optimal = mLink.mWormholeEnergy > Long.MAX_VALUE ? Long.MAX_VALUE : ((long) mLink.mWormholeEnergy); - if (getTransferable(i) > 0) { - if (mLink.mWormholeEnergy <= 0) { - var singularityStack = singularity.copy(); - - if (!depleteInput(singularityStack)) { - return new ResultMissingItem(singularityStack); - } - mLink.mWormholeEnergy = 1; - optimal = 1; - } - transferPower(optimal, i); - } - } - } - - if (mLink.mWormholeEnergy > 0) { - return SimpleCheckRecipeResult.ofSuccess("none"); - } - return SimpleCheckRecipeResult.ofFailure("none"); - } - - private void checkFrequency() { - if (mIsUnloading) { - return; - } - - ItemStack link = null; - - for (var slot : mInventory) { - if (slot != null && qeSingularity.getItem() == slot.getItem() - && qeSingularity.getItemDamage() == slot.getItemDamage()) { - link = slot; - break; - } - } - - Long freq = link != null && link.getTagCompound() != null - && link.getTagCompound() - .hasKey("freq", 4 /* Long */) ? link.getTagCompound() - .getLong("freq") : null; - - if (!Objects.equals(freq, mLink == null ? null : mLink.mFrequency)) { - if (mLink != null) { - mLink.disconnect(mSelfReference); - mLink = null; - } - - if (freq != null) { - mLink = WormholeLink.get(freq); - mLink.connect(mSelfReference); - } - } - } - - private long getTransferable(int index) { - var dest = mLink.getDest(mSelfReference); - - if (dest == null || mMaxProgresstime == 0 || dest.mMaxProgresstime == 0) { - return 0; - } - - var inputHatch = mSendHatches[index]; - var outputHatch = dest.mReceiveHatches[OPPOSITES[index]]; - - if (inputHatch == null || outputHatch == null) { - return 0; - } - - long available = inputHatch.getEUVar(); - long empty = outputHatch.maxEUStore() - outputHatch.getEUVar(); - - return Math.min(available, empty); - } - - private void transferPower(long optimal, int index) { - var dest = mLink.getDest(mSelfReference); - if (dest == null) { - return; - } - - var inputHatch = mSendHatches[index]; - var outputHatch = dest.mReceiveHatches[OPPOSITES[index]]; - - if (inputHatch == null || outputHatch == null) { - return; - } - - long available = inputHatch.getEUVar(); - long empty = outputHatch.maxEUStore() - outputHatch.getEUVar(); - long maxSend = inputHatch.maxAmperesIn() * V[inputHatch.mTier] * 20; - long maxReceive = outputHatch.maxAmperesOut() * V[outputHatch.mTier] * 20; - - // spotless:off - long toSend = (long)(Math.min(Math.min(Math.min(available, empty), maxSend), maxReceive) * (1.0 - (getIdealStatus() - getRepairStatus()) * 0.1)); - - double overclocks = Math.max(Math.log((double)toSend / (double)optimal) / Math.log(4.0), 0.0); - - long toReceive = (long) ( - toSend * - (1.0 / Math.pow(4.0, overclocks)) * - Math.pow(2.0, overclocks) * - (1.0 - (dest.getIdealStatus() - dest.getRepairStatus()) * 0.1) * - TRANSFER_EFFICIENCY - ); - // spotless:on - - inputHatch.setEUVar(inputHatch.getEUVar() - toSend); - outputHatch.setEUVar(outputHatch.getEUVar() + toReceive); - - double size = wormholeRadiusCalc((double) optimal / 20); - this.updateRenderRadius(size); - dest.updateRenderRadius(size); - - mLink.onEnergyTransferred(toSend); - mLink.mSendAmounts[index] += toSend; - mLink.mReceiveAmounts[OPPOSITES[index]] += toReceive; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - - try { - if (mLink != null) { - mLink.tryPromote(); - - NBTTagCompound link = new NBTTagCompound(); - - link.setLong("mFrequency", mLink.mFrequency); - link.setDouble("mWormholeEnergy", mLink.mWormholeEnergy); - - if (mLink.isMaster(mSelfReference)) { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - DataOutputStream dos = new DataOutputStream(baos); - - dos.writeInt(mLink.mReceiveAmounts.length); - for (var x : mLink.mReceiveAmounts) { - dos.writeLong(x); - } - - dos.writeInt(mLink.mSendAmounts.length); - for (var x : mLink.mSendAmounts) { - dos.writeLong(x); - } - - link.setByteArray("data", baos.toByteArray()); - } - - aNBT.setTag("mLink", link); - } - } catch (Throwable t) { - GT_Mod.GT_FML_LOGGER.error("Could not save GT_MetaTileEntity_WormholeGenerator", t); - } - - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - - checkFrequency(); - - if (aNBT.hasKey("mLink") && mLink != null) { - NBTTagCompound link = aNBT.getCompoundTag("mLink"); - - long freq = link.getLong("mFrequency"); - - try { - if (freq == mLink.mFrequency && mLink.isMaster(mSelfReference)) { - mLink.mWormholeEnergy = link.getDouble("mWormholeEnergy"); - - ByteArrayInputStream bais = new ByteArrayInputStream(link.getByteArray("data")); - DataInputStream dis = new DataInputStream(bais); - - long[] recv_amounts = new long[dis.readInt()]; - for (int i = 0; i < recv_amounts.length; i++) { - recv_amounts[i] = dis.readLong(); - } - - System.arraycopy( - recv_amounts, - 0, - mLink.mReceiveAmounts, - 0, - Math.min(recv_amounts.length, mLink.mReceiveAmounts.length)); - - long[] send_amounts = new long[dis.readInt()]; - for (int i = 0; i < send_amounts.length; i++) { - send_amounts[i] = dis.readLong(); - } - - System.arraycopy( - send_amounts, - 0, - mLink.mSendAmounts, - 0, - Math.min(send_amounts.length, mLink.mSendAmounts.length)); - } - } catch (Throwable t) { - GT_Mod.GT_FML_LOGGER.error("Could not load GT_MetaTileEntity_WormholeGenerator", t); - } - } - } - - private static class WormholeLink { - - private final static Map WORMHOLE_GENERATORS = new MapMaker().weakValues() - .makeMap(); - - public final long mFrequency; - - public WeakReference mMaster, mSlave; - - public final long[] mSendAmounts = new long[MAX_HATCHES]; - public final long[] mReceiveAmounts = new long[MAX_HATCHES]; - - public double mWormholeEnergy; - private double mPendingEnergy; - - private WormholeLink(long frequency) { - mFrequency = frequency; - } - - public static WormholeLink get(long frequency) { - return WORMHOLE_GENERATORS.computeIfAbsent(frequency, WormholeLink::new); - } - - public void update(WeakReference updater) { - tryPromote(); - - if (isMaster(updater)) { - if (isActive() && mPendingEnergy > 0) { - var delta = mPendingEnergy / WH_ENERGY_AVG_WINDOW; - - if (mPendingEnergy < mWormholeEnergy) { - // if the wormhole is shrinking and the next tick would take it below the pending energy, just - // use the pending energy - if (mWormholeEnergy - delta < mPendingEnergy) { - mWormholeEnergy = mPendingEnergy; - } else { - mWormholeEnergy -= delta; - } - } else if (mPendingEnergy > mWormholeEnergy) { - // if the wormhole is growing and the next tick would take it above the pending energy, just use - // the pending energy - if (mWormholeEnergy + delta > mPendingEnergy) { - mWormholeEnergy = mPendingEnergy; - } else { - mWormholeEnergy += delta; - } - } - - mPendingEnergy = 0; - } else { - mWormholeEnergy *= (1.0 - DECAY_RATE); - - if (mWormholeEnergy < COLLAPSE_THRESHOLD) { - mWormholeEnergy = 0; - - } - } - Arrays.fill(mSendAmounts, 0); - Arrays.fill(mReceiveAmounts, 0); - } - } - - public void onEnergyTransferred(long amount) { - mPendingEnergy += amount; - } - - public boolean isMaster(WeakReference tile) { - return mMaster == tile; - } - - public boolean isConnected(WeakReference tile) { - return mMaster == tile || mSlave == tile; - } - - public boolean isFormed() { - return mMaster != null && mSlave != null; - } - - public boolean connect(WeakReference tile) { - tryPromote(); - - if (mMaster == null) { - mMaster = tile; - Optional.ofNullable(mMaster) - .map(Reference::get) - .ifPresent(GT_MetaTileEntity_WormholeGenerator::updateRenderDim); - - Optional.ofNullable(mSlave) - .map(Reference::get) - .ifPresent(GT_MetaTileEntity_WormholeGenerator::updateRenderDim); - return true; - } - if (mSlave == null) { - mSlave = tile; - - Optional.of(mMaster) - .map(Reference::get) - .ifPresent(GT_MetaTileEntity_WormholeGenerator::updateRenderDim); - - Optional.ofNullable(mSlave) - .map(Reference::get) - .ifPresent(GT_MetaTileEntity_WormholeGenerator::updateRenderDim); - - return true; - } - - return false; - } - - public void disconnect(WeakReference tile) { - Objects.requireNonNull(tile.get()) - .destroyRenderBlock(); - - if (tile == mMaster) mMaster = null; - if (tile == mSlave) mSlave = null; - - tryPromote(); - - if (mMaster == null && mSlave == null) { - WORMHOLE_GENERATORS.remove(mFrequency, this); - } - } - - public void tryPromote() { - mMaster = tryClean(mMaster); - mSlave = tryClean(mSlave); - - if (mMaster == null && mSlave != null) { - mMaster = mSlave; - mSlave = null; - } - } - - private static WeakReference tryClean( - WeakReference tileReference) { - if (tileReference != null) { - var tile = tileReference.get(); - - if (tile == null) { - return null; - } else { - var base = tile.getBaseMetaTileEntity(); - - if (base == null || base.isDead()) { - return null; - } - } - } - - return tileReference; - } - - public GT_MetaTileEntity_WormholeGenerator getDest(WeakReference tile) { - if (tile == mMaster) { - return mSlave != null ? mSlave.get() : null; - } - - if (tile == mSlave) { - return mMaster != null ? mMaster.get() : null; - } - - return null; - } - - public boolean isActive() { - boolean masterCanWork = Optional.ofNullable(mMaster) - .map(WeakReference::get) - .map(GT_MetaTileEntity_WormholeGenerator::getBaseMetaTileEntity) - .map(IGregTechTileEntity::isAllowedToWork) - .orElse(false); - - boolean slaveCanWork = Optional.ofNullable(mSlave) - .map(WeakReference::get) - .map(GT_MetaTileEntity_WormholeGenerator::getBaseMetaTileEntity) - .map(IGregTechTileEntity::isAllowedToWork) - .orElse(false); - - return masterCanWork && slaveCanWork; - } - } - - // #endregion - - // #region UI - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - - // spotless:off - tt.addMachineType("Wormhole Generator") - .addInfo("Controller for the Miniature Wormhole Generator.") - .addInfo("Transfers EU between two wormhole generators.") - .addInfo("Wormholes are linked by placing an AE2 Entangled Singularity in each controller slot.") - .addInfo("The transfer rate is limited by the wormhole size, and the wormhole size is governed by the transfer rate.") - .addInfo("If the transfer rate is completely stable, the transfer efficiency is " + String.format("%.3f", TRANSFER_EFFICIENCY * 100.0) + "%.") - .addInfo("EU will only be transferred if there is space in the laser source hatch.") - .addInfo("Each laser target must have a laser source on the §oother§7 controller, on the §oopposite§7 side.") - .addInfo("Consumes an AE2 Singularity from an input bus each time the wormhole is kick-started.") - .addInfo("The structure is too complex!") - .addInfo(BLUE_PRINT_INFO) - .beginStructureBlock(7, 9, 7, false) - .addSeparator() - .addCasingInfoExactly("Molecular Casing", 2 * 12, false) - .addCasingInfoExactly("Europium Reinforced Radiation Proof Machine Casing", 4, false) - .addCasingInfoExactly("Fusion Coil Block", 3 * 4 + 5 * 2, false) - .addCasingInfoRange("High Power Casing", 8 * 6 + 1, 8 * 6 + 1 + 4, false) - .addCasingInfoExactly("Borosilicate Glass (any)", 9 * 4, true) - .addMaintenanceHatch("§61§r (dot 1)") - .addInputBus("§61§r (dot 1)") - .addDynamoHatch("§60§r - §64§r (laser only, dot 2)") - .addEnergyHatch("§60§r - §64§r (laser only, dot 2)") - .addStructureInfo("§rThe glass tier limits the hatch tier.") - .addSubChannelUsage("glass", "Borosilicate Glass Tier") - .toolTipFinisher("Gregtech"); - // spotless:on - - return tt; - } - - @Override - public String[] getInfoData() { - List data = new ArrayList<>(); - - data.addAll(Arrays.asList(super.getInfoData())); - - data.add("-----------------------"); - data.add("Wormhole Generator Info"); - - if (mStructureBadGlassTier) { - data.add(String.format("§cStructure errors:§r")); - - if (mStructureBadGlassTier) { - data.add(String.format("§cGlass tier must be greater than or equal to the energy hatch tiers.§r")); - } - } - - if (mLink == null) { - data.add("An entangled singularity must be present in the controller slot"); - } else { - if (!mLink.isFormed()) { - data.add("Wormhole status: §cNo destination§f"); - } else { - if (mLink.mWormholeEnergy > 0) { - if (mLink.isActive()) { - data.add("Wormhole status: §bActive§f"); - } else { - data.add("Wormhole status: §6Decaying§f"); - } - } else { - boolean anyTransferable = false; - - for (int i = 0; i < MAX_HATCHES; i++) { - if (!HATCH_MASK[i]) continue; - - if (getTransferable(i) > 0) { - anyTransferable = true; - break; - } - } - - if (anyTransferable) { - data.add("Wormhole status: §7Inactive§f"); - } else { - data.add("Wormhole status: §7No energy in input hatches§f"); - } - } - - double radius = Math.sqrt(mLink.mWormholeEnergy / 20.0 / 32.0); - data.add(String.format("Wormhole diameter: §b%,d§r ångström", (long) (radius * 2))); - - data.add(String.format("Optimal transfer speed: §b%,.0f§r EU/t", mLink.mWormholeEnergy / 20)); - } - } - - for (int i = 0; i < MAX_HATCHES; i++) { - if (!HATCH_MASK[i]) continue; - - var inputHatch = mSendHatches[i]; - var outputHatch = mReceiveHatches[i]; - - // spotless:off - if(inputHatch != null) { - data.add(String.format( - "%s hatch (%,dA/t %s) transferred §b%,d§f EU (equivalent to %,dA/t) with an efficiency of %.3f%% in the last second", - HATCH_NAMES[i], - inputHatch.Amperes, - VN[inputHatch.mTier], - mLink != null ? mLink.mSendAmounts[i] : 0, - mLink != null ? mLink.mSendAmounts[i] / 20 / V[inputHatch.mTier] : 0, - mLink != null && mLink.mSendAmounts[i] > 0 ? ((double)mLink.mReceiveAmounts[OPPOSITES[i]]) / ((double)mLink.mSendAmounts[i]) * 100 : 0 - )); - } else if(outputHatch != null) { - data.add(String.format( - "%s hatch (%,dA/t %s) received §b%,d§f EU (equivalent to %,dA/t) with an efficiency of %.3f%% in the last second", - HATCH_NAMES[i], - outputHatch.Amperes, - VN[outputHatch.mTier], - mLink != null ? mLink.mReceiveAmounts[i] : 0, - mLink != null ? mLink.mReceiveAmounts[i] / 20 / V[outputHatch.mTier] : 0, - mLink != null && mLink.mSendAmounts[OPPOSITES[i]] > 0 ? ((double)mLink.mReceiveAmounts[i]) / ((double)mLink.mSendAmounts[OPPOSITES[i]]) * 100 : 0 - )); - } else { - data.add(String.format("%s hatch is not present", HATCH_NAMES[i])); - } - // spotless:on - } - - data.add("-----------------------"); - - return data.toArray(new String[data.size()]); - } - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - - screenElements.widgets(TextWidget.dynamicString(() -> { - if (mLink == null) { - return String.format("§7Missing Entangled Singularity§f"); - } - - if (!mLink.isFormed()) { - return String.format("§7Wormhole status: §cNo destination§f"); - } - - if (mLink.mWormholeEnergy > 0 && !mLink.isActive()) { - return String.format("§7Wormhole status: §6Decaying§f"); - } - - if (mLink.mWormholeEnergy > 0) { - return String.format("§7Wormhole status: §bActive§f"); - } - - return String.format("§7Wormhole status: Inactive§f"); - }), - - TextWidget.dynamicString(() -> { - if (mLink == null) { - return ""; - } - - // LV power = 1 angstrom in diameter - double radius = Math.sqrt(mLink.mWormholeEnergy / 20.0 / 32.0); - - return String.format("§7Wormhole diameter: §b%,d§7 ŧf", (long) (radius * 2)); - }) - .setEnabled(w -> mWormholeEnergy_UI > 0), - - TextWidget.dynamicString(() -> { - if (mLink == null) { - return ""; - } - - if (mLink.mWormholeEnergy >= 1e10) { - return String.format("§7Max I/O per hatch: §b%3.3e§7 EU/t§f", mLink.mWormholeEnergy / 20); - } else { - return String.format("§7Max I/O per hatch: §b%,d§7 EU/t§f", (long) (mLink.mWormholeEnergy / 20)); - } - }) - .setEnabled(w -> mWormholeEnergy_UI > 0), - - new FakeSyncWidget.DoubleSyncer( - () -> mLink != null ? mLink.mWormholeEnergy : 0, - val -> mWormholeEnergy_UI = val)); - } - - // #endregion - -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEAbstractMultiFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEAbstractMultiFurnace.java new file mode 100644 index 0000000000..f81f7e1d96 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEAbstractMultiFurnace.java @@ -0,0 +1,48 @@ +package gregtech.common.tileentities.machines.multi; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; + +public abstract class MTEAbstractMultiFurnace> + extends MTEExtendedPowerMultiBlockBase { + + private HeatingCoilLevel mCoilLevel; + + protected MTEAbstractMultiFurnace(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + protected MTEAbstractMultiFurnace(String aName) { + super(aName); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + public HeatingCoilLevel getCoilLevel() { + return mCoilLevel; + } + + public void setCoilLevel(HeatingCoilLevel aCoilLevel) { + mCoilLevel = aCoilLevel; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java new file mode 100644 index 0000000000..31456825ba --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEAssemblyLine.java @@ -0,0 +1,494 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.enums.VoidingMode; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDataAccess; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.AssemblyLineUtils; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipe.RecipeAssemblyLine; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEAssemblyLine extends MTEExtendedPowerMultiBlockBase implements ISurvivalConstructable { + + public ArrayList mDataAccessHatches = new ArrayList<>(); + private static final String STRUCTURE_PIECE_FIRST = "first"; + private static final String STRUCTURE_PIECE_LATER = "later"; + private static final String STRUCTURE_PIECE_LAST = "last"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_FIRST, + transpose(new String[][] { { " ", "e", " " }, { "~", "l", "G" }, { "g", "m", "g" }, { "b", "i", "b" }, })) + .addShape( + STRUCTURE_PIECE_LATER, + transpose(new String[][] { { " ", "e", " " }, { "d", "l", "d" }, { "g", "m", "g" }, { "b", "I", "b" }, })) + .addShape( + STRUCTURE_PIECE_LAST, + transpose(new String[][] { { " ", "e", " " }, { "d", "l", "d" }, { "g", "m", "g" }, { "o", "i", "b" }, })) + .addElement('G', ofBlock(GregTechAPI.sBlockCasings3, 10)) // grate machine casing + .addElement('l', ofBlock(GregTechAPI.sBlockCasings2, 9)) // assembler machine casing + .addElement('m', ofBlock(GregTechAPI.sBlockCasings2, 5)) // assembling line casing + .addElement('g', Glasses.chainAllGlasses()) + .addElement( + 'e', + ofChain( + Energy.newAny(16, 1, ForgeDirection.UP, ForgeDirection.NORTH, ForgeDirection.SOUTH), + ofBlock(GregTechAPI.sBlockCasings2, 0))) + .addElement( + 'd', + buildHatchAdder(MTEAssemblyLine.class).atLeast(DataHatchElement.DataAccess) + .dot(2) + .casingIndex(42) + .allowOnly(ForgeDirection.NORTH) + .buildAndChain(GregTechAPI.sBlockCasings3, 10)) + .addElement( + 'b', + buildHatchAdder(MTEAssemblyLine.class).atLeast(InputHatch, InputHatch, InputHatch, InputHatch, Maintenance) + .casingIndex(16) + .dot(3) + .allowOnly(ForgeDirection.DOWN) + .buildAndChain( + ofBlock(GregTechAPI.sBlockCasings2, 0), + ofHatchAdder(MTEAssemblyLine::addOutputToMachineList, 16, 4))) + .addElement( + 'I', + ofChain( + // all blocks nearby use solid steel casing, so let's use the texture of that + InputBus.newAny(16, 5, ForgeDirection.DOWN), + ofHatchAdder(MTEAssemblyLine::addOutputToMachineList, 16, 4))) + .addElement('i', InputBus.newAny(16, 5, ForgeDirection.DOWN)) + .addElement('o', OutputBus.newAny(16, 4, ForgeDirection.DOWN)) + .build(); + + public MTEAssemblyLine(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEAssemblyLine(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAssemblyLine(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Assembling Line") + .addInfo("Controller block for the Assembling Line") + .addInfo("Used to make complex machine parts (LuV+)") + .addInfo("Does not make Assembler items") + .addInfo("Recipe tier is at most Energy Hatch tier + 1.") + .addSeparator() + .beginVariableStructureBlock(5, 16, 4, 4, 3, 3, false) // ? + .addStructureInfo("From Bottom to Top, Left to Right") + .addStructureInfo( + "Layer 1 - Solid Steel Machine Casing, Input Bus (last can be Output Bus), Solid Steel Machine Casing") + .addStructureInfo( + "Layer 2 - Borosilicate Glass(any)/Warded Glass/Reinforced Glass, Assembling Line Casing, Reinforced Glass") + .addStructureInfo("Layer 3 - Grate Machine Casing, Assembler Machine Casing, Grate Machine Casing") + .addStructureInfo("Layer 4 - Empty, Solid Steel Machine Casing, Empty") + .addStructureInfo("Up to 16 repeating slices, each one allows for 1 more item in recipes") + .addController("Either Grate on layer 3 of the first slice") + .addEnergyHatch("Any layer 4 casing", 1) + .addMaintenanceHatch("Any layer 1 casing", 3) + .addInputBus("As specified on layer 1", 4, 5) + .addInputHatch("Any layer 1 casing", 3) + .addOutputBus("Replaces Input Bus on final slice or on any solid steel casing on layer 1", 4) + .addOtherStructurePart("Data Access Hatch", "Optional, next to controller", 2) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection == facingDirection) { + if (active) return new ITexture[] { BlockIcons.casingTexturePages[0][16], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { BlockIcons.casingTexturePages[0][16], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][16] }; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.assemblylineVisualRecipes; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + if (GTValues.D1) { + GT_FML_LOGGER.info("Start ALine recipe check"); + } + CheckRecipeResult result = CheckRecipeResultRegistry.NO_DATA_STICKS; + + ArrayList tDataStickList = getDataItems(2); + if (tDataStickList.isEmpty()) { + return result; + } + if (GTValues.D1) { + GT_FML_LOGGER.info("Stick accepted, " + tDataStickList.size() + " Data Sticks found"); + } + + int[] tStacks = new int[0]; + FluidStack[] tFluids = new FluidStack[0]; + long averageVoltage = getAverageInputVoltage(); + long maxAmp = mEnergyHatches.size() <= 1 ? 1 : getMaxInputAmps(); + int maxParallel = 1; + Map inputsFromME = getStoredInputsFromME(); + Map fluidsFromME = getStoredFluidsFromME(); + + for (ItemStack tDataStick : tDataStickList) { + AssemblyLineUtils.LookupResult tLookupResult = AssemblyLineUtils + .findAssemblyLineRecipeFromDataStick(tDataStick, false); + + if (tLookupResult.getType() == AssemblyLineUtils.LookupResultType.INVALID_STICK) { + result = CheckRecipeResultRegistry.NO_RECIPE; + continue; + } + + GTRecipe.RecipeAssemblyLine tRecipe = tLookupResult.getRecipe(); + // Check if the recipe on the data stick is the current recipe for it's given output, if not we update it + // and continue to next. + if (tLookupResult.getType() != AssemblyLineUtils.LookupResultType.VALID_STACK_AND_VALID_HASH) { + tRecipe = AssemblyLineUtils.processDataStick(tDataStick); + if (tRecipe == null) { + result = CheckRecipeResultRegistry.NO_RECIPE; + continue; + } + } + + // Void protection check. + if (!canOutputAll(new ItemStack[] { tRecipe.mOutput })) { + result = CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; + continue; + } + + // So here we check against the recipe found on the data stick. + // If we run into missing buses/hatches or bad inputs, we go to the next data stick. + // This check only happens if we have a valid up-to-date data stick. + + // first validate we have enough input busses and input hatches for this recipe + if (mInputBusses.size() < tRecipe.mInputs.length || mInputHatches.size() < tRecipe.mFluidInputs.length) { + if (GTValues.D1) { + GT_FML_LOGGER.info( + "Not enough sources: Need ({}, {}), has ({}, {})", + mInputBusses.size(), + tRecipe.mInputs.length, + mInputHatches.size(), + tRecipe.mFluidInputs.length); + } + result = CheckRecipeResultRegistry.NO_RECIPE; + continue; + } + + // Check Inputs allign + int[] itemConsumptions = GTRecipe.RecipeAssemblyLine.getItemConsumptionAmountArray(mInputBusses, tRecipe); + if (itemConsumptions == null || itemConsumptions.length == 0) { + result = CheckRecipeResultRegistry.NO_RECIPE; + continue; + } + maxParallel = (int) GTRecipe.RecipeAssemblyLine + .maxParallelCalculatedByInputItems(mInputBusses, maxParallel, itemConsumptions, inputsFromME); + if (maxParallel <= 0) { + result = CheckRecipeResultRegistry.NO_RECIPE; + continue; + } + tStacks = itemConsumptions; + + if (GTValues.D1) { + GT_FML_LOGGER.info("All Items accepted"); + } + + // Check Fluid Inputs allign + if (tRecipe.mFluidInputs.length > 0) { + maxParallel = (int) RecipeAssemblyLine + .maxParallelCalculatedByInputFluids(mInputHatches, maxParallel, tRecipe.mFluidInputs, fluidsFromME); + if (maxParallel <= 0) { + result = CheckRecipeResultRegistry.NO_RECIPE; + continue; + } + tFluids = tRecipe.mFluidInputs; + } + + if (GTValues.D1) { + GT_FML_LOGGER.info("All fluids accepted"); + } + + if (GTValues.D1) { + GT_FML_LOGGER.info("Check overclock"); + } + + // Recipe tier is limited to hatch tier + 1. + if (tRecipe.mEUt > averageVoltage * 4) { + result = CheckRecipeResultRegistry.insufficientPower(tRecipe.mEUt); + continue; + } + + // Insufficient power check. + if (tRecipe.mEUt > maxAmp * averageVoltage) { + result = CheckRecipeResultRegistry.insufficientPower(tRecipe.mEUt); + continue; + } + + calculateOverclockedNessMultiInternal(tRecipe.mEUt, tRecipe.mDuration, (int) maxAmp, averageVoltage, false); + // In case recipe is too OP for that machine + if (lEUt == Long.MAX_VALUE) { + if (GTValues.D1) { + GT_FML_LOGGER.info("Recipe too OP"); + } + result = CheckRecipeResultRegistry.POWER_OVERFLOW; + continue; + } + + if (mMaxProgresstime == Integer.MAX_VALUE) { + if (GTValues.D1) { + GT_FML_LOGGER.info("Recipe too OP"); + } + result = CheckRecipeResultRegistry.DURATION_OVERFLOW; + continue; + } + + if (GTValues.D1) { + GT_FML_LOGGER.info("Find available recipe"); + } + result = CheckRecipeResultRegistry.SUCCESSFUL; + mOutputItems = new ItemStack[] { tRecipe.mOutput }; + break; + } + + if (!result.wasSuccessful()) { + return result; + } + + // Must be something wrong here... + if (tStacks.length == 0 || maxParallel <= 0) { + return CheckRecipeResultRegistry.INTERNAL_ERROR; + } + + if (GTValues.D1) { + GT_FML_LOGGER.info("All checked start consuming inputs"); + } + + GTRecipe.RecipeAssemblyLine.consumeInputItems(mInputBusses, maxParallel, tStacks, inputsFromME); + GTRecipe.RecipeAssemblyLine.consumeInputFluids(mInputHatches, maxParallel, tFluids, fluidsFromME); + + if (this.lEUt > 0) { + this.lEUt = -this.lEUt; + } + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + updateSlots(); + if (GTValues.D1) { + GT_FML_LOGGER.info("Recipe successful"); + } + return result; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + for (MTEHatchDataAccess hatch_dataAccess : mDataAccessHatches) { + hatch_dataAccess.setActive(true); + } + return super.onRunningTick(aStack); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mDataAccessHatches.clear(); + if (!checkPiece(STRUCTURE_PIECE_FIRST, 0, 1, 0)) return false; + return checkMachine(true) || checkMachine(false); + } + + private boolean checkMachine(boolean leftToRight) { + for (int i = 1; i < 16; i++) { + if (!checkPiece(STRUCTURE_PIECE_LATER, leftToRight ? -i : i, 1, 0)) return false; + if (!mOutputBusses.isEmpty()) + return !mEnergyHatches.isEmpty() && mMaintenanceHatches.size() == 1 && mDataAccessHatches.size() <= 1; + } + return false; + } + + /** + * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb + */ + private static boolean isCorrectDataItem(ItemStack aStack, int state) { + if ((state & 1) != 0 && ItemList.Circuit_Integrated.isStackEqual(aStack, true, true)) return true; + if ((state & 2) != 0 && ItemList.Tool_DataStick.isStackEqual(aStack, false, true)) return true; + return (state & 4) != 0 && ItemList.Tool_DataOrb.isStackEqual(aStack, false, true); + } + + /** + * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb + */ + public ArrayList getDataItems(int state) { + ArrayList rList = new ArrayList<>(); + if (GTUtility.isStackValid(mInventory[1]) && isCorrectDataItem(mInventory[1], state)) { + rList.add(mInventory[1]); + } + for (MTEHatchDataAccess tHatch : filterValidMTEs(mDataAccessHatches)) { + rList.addAll(tHatch.getInventoryItems(stack -> isCorrectDataItem(stack, state))); + } + return rList; + } + + public boolean addDataAccessToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchDataAccess) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mDataAccessHatches.add((MTEHatchDataAccess) aMetaTileEntity); + } + return false; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_FIRST, stackSize, hintsOnly, 0, 1, 0); + int tLength = Math.min(stackSize.stackSize + 1, 16); + for (int i = 1; i < tLength; i++) { + buildPiece(STRUCTURE_PIECE_LATER, stackSize, hintsOnly, -i, 1, 0); + } + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int build = survivialBuildPiece(STRUCTURE_PIECE_FIRST, stackSize, 0, 1, 0, elementBudget, env, false, true); + if (build >= 0) return build; + int tLength = Math.min(stackSize.stackSize + 1, 16); + for (int i = 1; i < tLength - 1; i++) { + build = survivialBuildPiece(STRUCTURE_PIECE_LATER, stackSize, -i, 1, 0, elementBudget, env, false, true); + if (build >= 0) return build; + } + return survivialBuildPiece(STRUCTURE_PIECE_LAST, stackSize, 1 - tLength, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public Set getAllowedVoidingModes() { + return VoidingMode.ITEM_ONLY_MODES; + } + + private enum DataHatchElement implements IHatchElement { + + DataAccess; + + @Override + public List> mteClasses() { + return Collections.singletonList(MTEHatchDataAccess.class); + } + + @Override + public IGTHatchAdder adder() { + return MTEAssemblyLine::addDataAccessToMachineList; + } + + @Override + public long count(MTEAssemblyLine t) { + return t.mDataAccessHatches.size(); + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEBrickedBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEBrickedBlastFurnace.java new file mode 100644 index 0000000000..f37b5e3e81 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEBrickedBlastFurnace.java @@ -0,0 +1,154 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.util.GTWaila.getMachineProgressString; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.input.Keyboard; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SteamVariant; +import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.interfaces.ISecondaryDescribable; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEBrickedBlastFurnace extends MTEPrimitiveBlastFurnace implements ISecondaryDescribable { + + private static final ITexture[] FACING_SIDE = { TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_DENSEBRICKS) }; + private static final ITexture[] FACING_FRONT = { + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_BRICKEDBLASTFURNACE_INACTIVE) }; + private static final ITexture[] FACING_ACTIVE = { + TextureFactory.of(Textures.BlockIcons.MACHINE_CASING_BRICKEDBLASTFURNACE_ACTIVE), TextureFactory.builder() + .addIcon(BlockIcons.MACHINE_CASING_BRICKEDBLASTFURNACE_ACTIVE_GLOW) + .glow() + .build() }; + private MultiblockTooltipBuilder tooltipBuilder; + + public MTEBrickedBlastFurnace(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEBrickedBlastFurnace(String aName) { + super(aName); + } + + @Override + public String[] getDescription() { + return getCurrentDescription(); + } + + @Override + public boolean isDisplaySecondaryDescription() { + return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT); + } + + public String[] getPrimaryDescription() { + return getTooltip().getInformation(); + } + + public String[] getSecondaryDescription() { + return getTooltip().getStructureInformation(); + } + + protected MultiblockTooltipBuilder getTooltip() { + if (tooltipBuilder == null) { + tooltipBuilder = new MultiblockTooltipBuilder(); + tooltipBuilder.addMachineType("Blast Furnace") + .addInfo("Controller Block for the Bricked Blast Furnace") + .addInfo("Usable for Steel and general Pyrometallurgy") + .addInfo("Has a useful interface, unlike other gregtech multis") + .addPollutionAmount(GTMod.gregtechproxy.mPollutionPrimitveBlastFurnacePerSecond) + .addSeparator() + .beginStructureBlock(3, 4, 3, true) + .addController("Front center") + .addOtherStructurePart("Firebricks", "Everything except the controller") + .addStructureInfo("The top block is also empty") + .addStructureInfo("You can share the walls of GT multis, so") + .addStructureInfo("each additional one costs less, up to 4") + .toolTipFinisher("Gregtech"); + } + return tooltipBuilder; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + return aActive ? FACING_ACTIVE : FACING_FRONT; + } + return FACING_SIDE; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBrickedBlastFurnace(this.mName); + } + + @Override + protected Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + @Override + protected int getCasingMetaID() { + return 15; + } + + @Override + public String getName() { + return "Bricked Blast Furnace"; + } + + @Override + public SteamVariant getSteamVariant() { + return SteamVariant.PRIMITIVE; + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + if (!this.getBaseMetaTileEntity() + .isInvalidTileEntity()) { + NBTTagCompound nbt = accessor.getNBTData(); + currenttip.add( + getMachineProgressString( + this.getBaseMetaTileEntity() + .isActive(), + nbt.getInteger("mMaxProgressTime"), + nbt.getInteger("mProgressTime"))); + } + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + if (!this.getBaseMetaTileEntity() + .isInvalidTileEntity()) { + tag.setInteger("mProgressTime", this.getProgresstime()); + tag.setInteger("mMaxProgressTime", this.maxProgresstime()); + } + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return getTooltip().getStructureHint(); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTECharcoalPit.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTECharcoalPit.java new file mode 100644 index 0000000000..268ef069a7 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTECharcoalPit.java @@ -0,0 +1,311 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import java.util.ArrayList; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.world.ChunkPosition; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.ParticleFX; +import gregtech.api.interfaces.ISecondaryDescribable; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTETooltipMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.WorldSpawnedEventBuilder; +import gregtech.common.Pollution; + +public class MTECharcoalPit extends MTETooltipMultiBlockBase implements ISecondaryDescribable { + + private boolean running = false; + + public MTECharcoalPit(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTECharcoalPit(String aName) { + super(aName); + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return (facing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + // No GUI, do not capture right-click so it does not interfere when placing logs + return false; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Nonnull + @Override + public CheckRecipeResult checkProcessing() { + if (!checkRecursiveBlocks()) { + mEfficiency = 0; + mEfficiencyIncrease = 0; + mMaxProgresstime = 0; + running = false; + return CheckRecipeResultRegistry.NO_RECIPE; + } + + if (mEfficiency == 0) { + mEfficiency = 10000; + mEfficiencyIncrease = 10000; + mMaxProgresstime = Math.max(1, mMaxProgresstime); + + // adds all the pollution at once when the recipe starts + Pollution.addPollution(getBaseMetaTileEntity(), mMaxProgresstime * getPollutionPerTick(null)); + return CheckRecipeResultRegistry.SUCCESSFUL; + } else { + mEfficiency = 0; + mEfficiencyIncrease = 0; + mMaxProgresstime = 0; + return CheckRecipeResultRegistry.NO_RECIPE; + } + } + + private boolean checkRecursiveBlocks() { + ArrayList tList1 = new ArrayList<>(); + ArrayList tList2 = new ArrayList<>(); + + Block tBlock = getBaseMetaTileEntity().getBlockOffset(0, -1, 0); + if (isWoodLog(tBlock, getBaseMetaTileEntity().getMetaIDOffset(0, -1, 0))) { + tList2.add(new ChunkPosition(0, -1, 0)); + } else return false; + while (!tList2.isEmpty()) { + ChunkPosition tPos = tList2.get(0); + tList2.remove(0); + if (!checkAllBlockSides(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ, tList1, tList2)) { + return false; + } + } + if (running) { + for (ChunkPosition tPos : tList1) { + if (isWoodLog( + getBaseMetaTileEntity().getBlockOffset(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ), + getBaseMetaTileEntity().getMetaIDOffset(tPos.chunkPosX, tPos.chunkPosY, tPos.chunkPosZ))) + getBaseMetaTileEntity().getWorld() + .setBlock( + getBaseMetaTileEntity().getXCoord() + tPos.chunkPosX, + getBaseMetaTileEntity().getYCoord() + tPos.chunkPosY, + getBaseMetaTileEntity().getZCoord() + tPos.chunkPosZ, + GregTechAPI.sBlockReinforced, + 4, + 3); + } + running = false; + return false; + } else { + mMaxProgresstime = (int) Math.sqrt(tList1.size() * 240000); + } + running = true; + return true; + } + + private boolean isWoodLog(Block log, int meta) { + for (int id : OreDictionary.getOreIDs(new ItemStack(log, 1, meta))) { + if (OreDictionary.getOreName(id) + .equals("logWood")) return true; + } + String tTool = log.getHarvestTool(meta); + return OrePrefixes.log.contains(new ItemStack(log, 1, meta)) && ("axe".equals(tTool)) + && (log.getMaterial() == Material.wood); + } + + private boolean checkAllBlockSides(int aX, int aY, int aZ, ArrayList aList1, + ArrayList aList2) { + boolean expandToChunkXPos = false; + boolean expandToChunkXNeg = false; + boolean expandToChunkYPos = false; + boolean expandToChunkYNeg = false; + boolean expandToChunkZPos = false; + boolean expandToChunkZNeg = false; + + Block blockXPos = getBaseMetaTileEntity().getBlockOffset(aX + 1, aY, aZ); + if (aX + 1 < 6 && (isWoodLog(blockXPos, getBaseMetaTileEntity().getMetaIDOffset(aX + 1, aY, aZ)))) { + if (!aList1.contains(new ChunkPosition(aX + 1, aY, aZ)) + && (!aList2.contains(new ChunkPosition(aX + 1, aY, aZ)))) expandToChunkXPos = true; + } else if (!(blockXPos == Blocks.dirt || blockXPos == Blocks.grass)) { + return false; + } + + Block blockXNeg = getBaseMetaTileEntity().getBlockOffset(aX - 1, aY, aZ); + if (aX - 1 > -6 && (isWoodLog(blockXNeg, getBaseMetaTileEntity().getMetaIDOffset(aX - 1, aY, aZ)))) { + if (!aList1.contains(new ChunkPosition(aX - 1, aY, aZ)) + && (!aList2.contains(new ChunkPosition(aX - 1, aY, aZ)))) expandToChunkXNeg = true; + } else if (!(blockXNeg == Blocks.dirt || blockXNeg == Blocks.grass)) { + return false; + } + + Block blockYPos = getBaseMetaTileEntity().getBlockOffset(aX, aY + 1, aZ); + if (aY + 1 < 1 && (isWoodLog(blockYPos, getBaseMetaTileEntity().getMetaIDOffset(aX, aY + 1, aZ)))) { + if (!aList1.contains(new ChunkPosition(aX, aY + 1, aZ)) + && (!aList2.contains(new ChunkPosition(aX, aY + 1, aZ)))) expandToChunkYPos = true; + } else if (!(blockYPos == Blocks.dirt || blockYPos == Blocks.grass + || (aX == 0 && aY == -1 && aZ == 0 && blockYPos == GregTechAPI.sBlockMachines))) { + return false; + } + + Block blockYNeg = getBaseMetaTileEntity().getBlockOffset(aX, aY - 1, aZ); + if (aY - 1 > -6 && (isWoodLog(blockYNeg, getBaseMetaTileEntity().getMetaIDOffset(aX, aY - 1, aZ)))) { + if (!aList1.contains(new ChunkPosition(aX, aY - 1, aZ)) + && (!aList2.contains(new ChunkPosition(aX, aY - 1, aZ)))) expandToChunkYNeg = true; + } else if (blockYNeg != Blocks.brick_block) { + return false; + } + + Block blockZPos = getBaseMetaTileEntity().getBlockOffset(aX, aY, aZ + 1); + if (aZ + 1 < 6 && (isWoodLog(blockZPos, getBaseMetaTileEntity().getMetaIDOffset(aX, aY, aZ + 1)))) { + if (!aList1.contains(new ChunkPosition(aX, aY, aZ + 1)) + && (!aList2.contains(new ChunkPosition(aX, aY, aZ + 1)))) expandToChunkZPos = true; + } else if (!(blockZPos == Blocks.dirt || blockZPos == Blocks.grass)) { + return false; + } + + Block blockZNeg = getBaseMetaTileEntity().getBlockOffset(aX, aY, aZ - 1); + if (aZ - 1 > -6 && (isWoodLog(blockZNeg, getBaseMetaTileEntity().getMetaIDOffset(aX, aY, aZ - 1)))) { + if (!aList1.contains(new ChunkPosition(aX, aY, aZ - 1)) + && (!aList2.contains(new ChunkPosition(aX, aY, aZ - 1)))) expandToChunkZNeg = true; + } else if (!(blockZNeg == Blocks.dirt || blockZNeg == Blocks.grass)) { + return false; + } + aList1.add(new ChunkPosition(aX, aY, aZ)); + if (expandToChunkXPos) aList2.add(new ChunkPosition(aX + 1, aY, aZ)); + if (expandToChunkXNeg) aList2.add(new ChunkPosition(aX - 1, aY, aZ)); + if (expandToChunkYPos) aList2.add(new ChunkPosition(aX, aY + 1, aZ)); + if (expandToChunkYNeg) aList2.add(new ChunkPosition(aX, aY - 1, aZ)); + if (expandToChunkZPos) aList2.add(new ChunkPosition(aX, aY, aZ + 1)); + if (expandToChunkZNeg) aList2.add(new ChunkPosition(aX, aY, aZ - 1)); + return true; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTMod.gregtechproxy.mPollutionCharcoalPitPerSecond; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public RecipeMap getRecipeMap() { + return null; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTECharcoalPit(mName); + } + + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Charcoal Pile Igniter") + .addInfo("Controller for the Charcoal Pit") + .addInfo("Converts Logs into Brittle Charcoal blocks") + .addInfo("Will automatically start when valid") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginVariableStructureBlock(3, 13, 3, 7, 3, 13, false) + .addStructureInfo("Can be up to 13x7x13 in size, including the dirt; shape doesn't matter") + .addOtherStructurePart("Controller", "Top layer, directly touching a wood log") + .addOtherStructurePart("Dirt/Grass", "Top and middle layers, covering wood logs") + .addOtherStructurePart("Bricks", "Bottom layer, under all wood logs") + .addOtherStructurePart("Wood Logs", "Up to 5 layers, inside the previously mentioned blocks") + .addStructureInfo("No air between logs allowed.") + .addStructureInfo( + "All logs must be within 6 x/z of the controller, so it must be dead-center for a full 11x11 square of wood.") + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == ForgeDirection.UP) { + if (aActive) return new ITexture[] { casingTexturePages[0][10], + TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ROCK_BREAKER_ACTIVE_GLOW) + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][10], TextureFactory.of(OVERLAY_FRONT_ROCK_BREAKER), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ROCK_BREAKER_GLOW) + .glow() + .build(), }; + } + return new ITexture[] { casingTexturePages[0][10] }; + } + + @Override + public boolean polluteEnvironment(int aPollutionLevel) { + // Do nothing and don't choke on pollution. This is fine because we add + // all the pollution at once when the recipe starts + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + super.onPostTick(aBaseMetaTileEntity, aTimer); + if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive())) { + + new WorldSpawnedEventBuilder.ParticleEventBuilder().setMotion(0D, 0.3D, 0D) + .setIdentifier(ParticleFX.LARGE_SMOKE) + .setPosition( + aBaseMetaTileEntity.getOffsetX(ForgeDirection.UP, 1) + XSTR_INSTANCE.nextFloat(), + aBaseMetaTileEntity.getOffsetY(ForgeDirection.UP, 1), + aBaseMetaTileEntity.getOffsetZ(ForgeDirection.UP, 1) + XSTR_INSTANCE.nextFloat()) + .setWorld(getBaseMetaTileEntity().getWorld()) + .run(); + } + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTECleanroom.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTECleanroom.java new file mode 100644 index 0000000000..99a256e3f8 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTECleanroom.java @@ -0,0 +1,527 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.GTValues.debugCleanroom; +import static gregtech.api.enums.Textures.BlockIcons.BLOCK_PLASCRETE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_CLEANROOM; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_CLEANROOM_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_CLEANROOM_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_CLEANROOM_GLOW; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.config.ConfigCategory; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.ICleanroom; +import gregtech.api.interfaces.ICleanroomReceiver; +import gregtech.api.interfaces.ISecondaryDescribable; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicHull; +import gregtech.api.metatileentity.implementations.MTETooltipMultiBlockBase; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTECleanroom extends MTETooltipMultiBlockBase + implements IConstructable, ISecondaryDescribable, ICleanroom { + + private final Set cleanroomReceivers = new HashSet<>(); + private int mHeight = -1; + + public MTECleanroom(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTECleanroom(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTECleanroom(mName); + } + + @Override + public int getCleanness() { + return mEfficiency; + } + + @Override + public boolean isValidCleanroom() { + return isValid() && mMachine; + } + + @Override + public void pollute() { + mEfficiency = 0; + mWrench = false; + mScrewdriver = false; + mSoftHammer = false; + mHardHammer = false; + mSolderingTool = false; + mCrowbar = false; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Cleanroom") + .addInfo("Controller block for the Cleanroom") + .addInfo("Consumes 40 EU/t when first turned on") + .addInfo("and 4 EU/t once at 100% efficiency") + .addInfo("If you use an LV energy hatch, it will actually accept 2A instead of just 1A.") + .addInfo( + "MV+ energy hatches just accept 1A as usual. For HV+ the cleanroom will overclock and gain efficiency faster.") + .addInfo("Time required to reach full efficiency is proportional to") + .addInfo("the height of empty space within") + .addInfo("Machines that cause pollution aren't allowed to be put in.") + .addSeparator() + .beginVariableStructureBlock(3, 15, 4, 15, 3, 15, true) + .addController("Top center") + .addCasingInfoRange("Plascrete", 20, 1007, false) + .addStructureInfo( + GTValues.cleanroomGlass + + "% of the Plascrete can be replaced with Reinforced Glass (not counting the top layer)") + .addStructureInfo( + "Other material can be used in place of Plascrete, even in higher percentages. See config for detail") + .addOtherStructurePart("Filter Machine Casing", "Top besides controller and edges") + .addEnergyHatch("Any casing except top layer. Exactly one.") + .addMaintenanceHatch("Any casing except top layer") + .addStructureInfo("0-2x Reinforced Door (keep closed or efficiency will reduce)") + .addStructureInfo("Up to 1 Elevator, Rotating Elevator, and Travel Anchor each") + .addStructureInfo("Up to 10 Machine Hulls for Item & Energy transfer through walls") + .addStructureInfo("You can also use Diodes for more power") + .addStructureInfo("Diodes also count towards 10 Machine Hulls count limit") + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public String[] getStructureDescription(ItemStack itemStack) { + return new String[] { "The base can be rectangular." }; + } + + @Nonnull + @Override + public CheckRecipeResult checkProcessing() { + mEfficiencyIncrease = 100; + final long inputVoltage = getMaxInputVoltage(); + + // only allow LV+ energy hatches + if (inputVoltage < TierEU.LV) { + return CheckRecipeResultRegistry.insufficientPower(40); + } + + // use the standard overclock mechanism to determine duration and estimate a maximum consumption + // if the cleanroom is powered by an LV energy hatch, it will actually accept 2A instead of just 1A. + calculateOverclockedNessMultiInternal( + 40, + 45 * Math.max(1, mHeight - 1), + inputVoltage == TierEU.LV ? 2 : 1, + inputVoltage, + false); + // negate it to trigger the special energy consumption function. divide by 10 to get the actual final + // consumption. + mEUt /= -10; + return SimpleCheckRecipeResult.ofSuccess("cleanroom_running"); + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return (facing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + int x = 1; + int z = 1; + int y = 1; + int mDoorCount = 0; + int mHullCount = 0; + int mPlascreteCount = 0; + final HashMap otherBlocks = new HashMap<>(); + boolean doorState = false; + this.mUpdate = 100; + cleanroomReceivers.forEach(r -> r.setCleanroom(null)); + cleanroomReceivers.clear(); + + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Checking machine"); + } + for (int i = 1; i < 8; i++) { + final Block tBlock = aBaseMetaTileEntity.getBlockOffset(i, 0, 0); + final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(i, 0, 0); + if (tBlock != GregTechAPI.sBlockCasings3 || tMeta != 11) { + if (tBlock == GregTechAPI.sBlockReinforced || tMeta == 2) { + x = i; + break; + } else { + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Unable to detect room X edge?"); + } + return false; + } + } + } + for (int i = 1; i < 8; i++) { + final Block tBlock = aBaseMetaTileEntity.getBlockOffset(0, 0, i); + final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(0, 0, i); + if (tBlock != GregTechAPI.sBlockCasings3 || tMeta != 11) { + if (tBlock == GregTechAPI.sBlockReinforced || tMeta == 2) { + z = i; + break; + } else { + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Unable to detect room Z edge?"); + } + return false; + } + } + } + // detect rectangular area of filters + for (int i = -x + 1; i < x; i++) { + for (int j = -z + 1; j < z; j++) { + if (i == 0 && j == 0) continue; + final Block tBlock = aBaseMetaTileEntity.getBlockOffset(i, 0, j); + final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(i, 0, j); + if (tBlock != GregTechAPI.sBlockCasings3 && tMeta != 11) { + if (debugCleanroom) { + GTLog.out.println("Cleanroom: This is not a filter."); + } + return false; + } + } + } + + for (int i = -1; i > -16; i--) { + final Block tBlock = aBaseMetaTileEntity.getBlockOffset(x, i, z); + final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(x, i, z); + if (tBlock != GregTechAPI.sBlockReinforced || tMeta != 2) { + y = i + 1; + break; + } + } + if (y > -2) { + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Room not tall enough?"); + } + return false; + } + for (int dX = -x; dX <= x; dX++) { + for (int dZ = -z; dZ <= z; dZ++) { + for (int dY = 0; dY >= y; dY--) { + if (dX == -x || dX == x || dY == 0 || dY == y || dZ == -z || dZ == z) { + Block tBlock = aBaseMetaTileEntity.getBlockOffset(dX, dY, dZ); + int tMeta = aBaseMetaTileEntity.getMetaIDOffset(dX, dY, dZ); + if (dY == 0) { // TOP + if (dX == -x || dX == x || dZ == -z || dZ == z) { // Top Border + if (tBlock != GregTechAPI.sBlockReinforced || tMeta != 2) { + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Non reinforced block on top edge? tMeta != 2"); + } + return false; + } + mPlascreteCount++; + } else if (dX != 0 || dZ != 0) { // Top Inner exclude center + if (tBlock != GregTechAPI.sBlockCasings3 || tMeta != 11) { + if (debugCleanroom) { + GTLog.out.println( + "Cleanroom: Non reinforced block on top face interior? tMeta != 11"); + } + return false; + } + } + } else if (tBlock == GregTechAPI.sBlockReinforced && tMeta == 2) { + mPlascreteCount++; + } else { + final IGregTechTileEntity tTileEntity = aBaseMetaTileEntity + .getIGregTechTileEntityOffset(dX, dY, dZ); + if ((!this.addMaintenanceToMachineList(tTileEntity, 210)) + && (!this.addEnergyInputToMachineList(tTileEntity, 210))) { + if (tBlock instanceof ic2.core.block.BlockIC2Door) { + if ((tMeta & 8) == 0) { + // let's not fiddle with bits anymore. + if (Math.abs(dZ) < z) // on side parallel to z axis + doorState = tMeta == 1 || tMeta == 3 || tMeta == 4 || tMeta == 6; + else if (Math.abs(dX) < x) // on side parallel to x axis + doorState = tMeta == 0 || tMeta == 2 || tMeta == 5 || tMeta == 7; + // corners ignored + } + mDoorCount++; + } else { + if (tTileEntity != null) { + final IMetaTileEntity aMetaTileEntity = tTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Missing block? Not a aMetaTileEntity"); + } + return false; + } + if (aMetaTileEntity instanceof MTEBasicHull) { + mHullCount++; + } else { + if (debugCleanroom) { + GTLog.out.println( + "Cleanroom: Incorrect GT block? " + tBlock.getUnlocalizedName()); + } + return false; + } + } else { + String key = tBlock.getUnlocalizedName() + ":" + tMeta; + if (config.containsKey(key)) { // check with meta first + otherBlocks.compute(key, (k, v) -> v == null ? 1 : v + 1); + } else { + key = tBlock.getUnlocalizedName(); + if (config.containsKey(key)) { + otherBlocks.compute(key, (k, v) -> v == null ? 1 : v + 1); + } else { + if (debugCleanroom) { + GTLog.out.println( + "Cleanroom: not allowed block " + tBlock.getUnlocalizedName()); + } + return false; + } + } + } + } + } + } + } + } + } + } + if (this.mMaintenanceHatches.size() != 1 || this.mEnergyHatches.size() != 1 + || mDoorCount > 4 + || mHullCount > 10) { + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Incorrect number of doors, hulls, or hatches."); + } + return false; + } + if (mPlascreteCount < 20) { + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Could not find 20 Plascrete."); + } + return false; + } + int otherBlockCount = 0; + for (int v : otherBlocks.values()) { + otherBlockCount += v; + } + int maxAllowedRatio = 0; + for (Map.Entry e : otherBlocks.entrySet()) { + final ConfigEntry ce = config.get(e.getKey()); + maxAllowedRatio += Math.max(maxAllowedRatio, ce.percentage); + if (ce.allowedCount > 0) { // count has priority + if (e.getValue() > ce.allowedCount) { + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Absolute count too high for a block."); + } + return false; + } + } else if ((e.getValue() * 100) / (mPlascreteCount + otherBlockCount) > ce.percentage) { + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Relative count too high for a block."); + } + return false; + } + } + if ((otherBlockCount * 100) / (mPlascreteCount + otherBlockCount) > maxAllowedRatio) { + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Relative count of all non-plascrete blocks too high."); + } + return false; + } + + setCleanroomReceivers(x, y, z, aBaseMetaTileEntity); + + if (doorState) { + this.mEfficiency = Math.max(0, this.mEfficiency - 200); + } + for (final ForgeDirection tSide : ForgeDirection.VALID_DIRECTIONS) { + final byte t = (byte) Math.max(1, (byte) (15 / (10000f / this.mEfficiency))); + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(tSide, t); + } + this.mHeight = -y; + if (debugCleanroom) { + GTLog.out.println("Cleanroom: Check successful."); + } + return true; + } + + private void setCleanroomReceivers(int x, int y, int z, IGregTechTileEntity aBaseMetaTileEntity) { + for (int dX = -x + 1; dX <= x - 1; dX++) { + for (int dZ = -z + 1; dZ <= z - 1; dZ++) for (int dY = -1; dY >= y + 1; dY--) { + TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityOffset(dX, dY, dZ); + if (tTileEntity instanceof ICleanroomReceiver receiver) { + receiver.setCleanroom(this); + cleanroomReceivers.add(receiver); + } + } + } + } + + @Override + public boolean allowGeneralRedstoneOutput() { + return true; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if ((sideDirection.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) != 0) { + return new ITexture[] { TextureFactory.of(BLOCK_PLASCRETE), active + ? TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_CLEANROOM_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_CLEANROOM_ACTIVE_GLOW) + .glow() + .build()) + : TextureFactory.of( + TextureFactory.of(OVERLAY_TOP_CLEANROOM), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_CLEANROOM_GLOW) + .glow() + .build()) }; + } + return new ITexture[] { TextureFactory.of(BLOCK_PLASCRETE) }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + int i = Math.min(itemStack.stackSize, 7); + IGregTechTileEntity baseEntity = this.getBaseMetaTileEntity(); + World world = baseEntity.getWorld(); + int x = baseEntity.getXCoord(); + int y = baseEntity.getYCoord(); + int z = baseEntity.getZCoord(); + int yoff = Math.max(i * 2, 3); + for (int X = x - i; X <= x + i; X++) for (int Y = y; Y >= y - yoff; Y--) for (int Z = z - i; Z <= z + i; Z++) { + if (X == x && Y == y && Z == z) continue; + if (X == x - i || X == x + i || Z == z - i || Z == z + i || Y == y - yoff) { + if (b) StructureLibAPI.hintParticle(world, X, Y, Z, GregTechAPI.sBlockReinforced, 2); + else world.setBlock(X, Y, Z, GregTechAPI.sBlockReinforced, 2, 2); + } else if (Y == y) { + if (b) StructureLibAPI.hintParticle(world, X, Y, Z, GregTechAPI.sBlockCasings3, 11); + else world.setBlock(X, Y, Z, GregTechAPI.sBlockCasings3, 11, 2); + } + } + } + + private static class ConfigEntry { + + final int percentage; + final int allowedCount; + + ConfigEntry(int percentage, int count) { + this.percentage = percentage; + this.allowedCount = count; + } + } + + private static final HashMap config = new HashMap<>(); + private static final String category = "cleanroom_allowed_blocks"; + + private static void setDefaultConfigValues(Configuration cfg) { + cfg.get("cleanroom_allowed_blocks.manaGlass", "Name", "tile.manaGlass"); + cfg.get("cleanroom_allowed_blocks.manaGlass", "Percentage", 50); + cfg.get("cleanroom_allowed_blocks.elfGlass", "Name", "tile.elfGlass"); + cfg.get("cleanroom_allowed_blocks.elfGlass", "Percentage", 50); + cfg.get("cleanroom_allowed_blocks.reinforced_glass", "Name", "blockAlloyGlass"); + cfg.get("cleanroom_allowed_blocks.reinforced_glass", "Percentage", 5); + cfg.get("cleanroom_allowed_blocks.bw_reinforced_glass_0", "Name", "BW_GlasBlocks"); + cfg.get("cleanroom_allowed_blocks.bw_reinforced_glass_0", "Percentage", 50); + cfg.get("cleanroom_allowed_blocks.bw_reinforced_glass_0", "Meta", 0); + cfg.get("cleanroom_allowed_blocks.bw_reinforced_glass", "Name", "BW_GlasBlocks"); + cfg.get("cleanroom_allowed_blocks.bw_reinforced_glass", "Percentage", 100); + cfg.get("cleanroom_allowed_blocks.elevator", "Name", "tile.openblocks.elevator"); + cfg.get("cleanroom_allowed_blocks.elevator", "Count", 1); + cfg.get("cleanroom_allowed_blocks.travel_anchor", "Name", "tile.blockTravelAnchor"); + cfg.get("cleanroom_allowed_blocks.travel_anchor", "Count", 1); + cfg.get("cleanroom_allowed_blocks.warded_glass", "Name", "tile.blockCosmeticOpaque"); + cfg.get("cleanroom_allowed_blocks.warded_glass", "Meta", 2); + cfg.get("cleanroom_allowed_blocks.warded_glass", "Percentage", 50); + cfg.save(); + } + + public static void loadConfig(Configuration cfg) { + if (!cfg.hasCategory(category)) setDefaultConfigValues(cfg); + for (ConfigCategory cc : cfg.getCategory(category) + .getChildren()) { + final String name = cc.get("Name") + .getString(); + if (cc.containsKey("Count")) { + if (cc.containsKey("Meta")) config.put( + name + ":" + + cc.get("Meta") + .getInt(), + new ConfigEntry( + 0, + cc.get("Count") + .getInt())); + else config.put( + name, + new ConfigEntry( + 0, + cc.get("Count") + .getInt())); + } else if (cc.containsKey("Percentage")) { + if (cc.containsKey("Meta")) config.put( + name + ":" + + cc.get("Meta") + .getInt(), + new ConfigEntry( + cc.get("Percentage") + .getInt(), + 0)); + else config.put( + name, + new ConfigEntry( + cc.get("Percentage") + .getInt(), + 0)); + } + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfiller1.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfiller1.java new file mode 100644 index 0000000000..080c4b3c40 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfiller1.java @@ -0,0 +1,53 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEConcreteBackfiller1 extends MTEConcreteBackfillerBase { + + public MTEConcreteBackfiller1(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEConcreteBackfiller1(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + return createTooltip("Concrete Backfiller"); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEConcreteBackfiller1(mName); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_SolidSteel; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.Steel; + } + + @Override + protected int getCasingTextureIndex() { + return 16; + } + + @Override + protected int getRadius() { + return 16; + } + + @Override + protected int getMinTier() { + return 2; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfiller2.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfiller2.java new file mode 100644 index 0000000000..2d5fd17c82 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfiller2.java @@ -0,0 +1,54 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEConcreteBackfiller2 extends MTEConcreteBackfillerBase { + + public MTEConcreteBackfiller2(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEConcreteBackfiller2(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + return createTooltip("Advanced Concrete Backfiller"); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEConcreteBackfiller2(mName); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_StableTitanium; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.Titanium; + } + + @Override + protected int getCasingTextureIndex() { + return 50; + } + + @Override + protected int getRadius() { + int tConfig = getTotalConfigValue() * 2; + return tConfig >= 128 ? 128 : tConfig <= 0 ? 64 : tConfig; + } + + @Override + protected int getMinTier() { + return 4; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfillerBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfillerBase.java new file mode 100644 index 0000000000..2671db1e8c --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEConcreteBackfillerBase.java @@ -0,0 +1,264 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.IFluidBlock; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.widgets.LockedWhileActiveButton; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; + +public abstract class MTEConcreteBackfillerBase extends MTEDrillerBase { + + private int mLastXOff = 0, mLastZOff = 0; + + /** Used to drive the readout in the GUI for the backfiller's current y-level. */ + private int clientYHead; + + protected boolean mLiquidEnabled = true; + + private static boolean isWater(Block aBlock) { + return aBlock == Blocks.water || aBlock == Blocks.flowing_water; + } + + private static boolean isLava(Block aBlock) { + return aBlock == Blocks.lava || aBlock == Blocks.flowing_lava; + } + + private static boolean isFluid(Block aBlock) { + return isWater(aBlock) || isLava(aBlock) || aBlock instanceof IFluidBlock; + } + + public MTEConcreteBackfillerBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + initRecipeResults(); + } + + public MTEConcreteBackfillerBase(String aName) { + super(aName); + initRecipeResults(); + } + + private void initRecipeResults() { + addResultMessage(STATE_UPWARD, true, "backfiller_working"); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("liquidenabled", mLiquidEnabled); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("liquidenabled")) mLiquidEnabled = aNBT.getBoolean("liquidenabled"); + } + + protected MultiblockTooltipBuilder createTooltip(String aStructureName) { + String casings = getCasingBlockItem().get(0) + .getDisplayName(); + + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Concrete Backfiller") + .addInfo("Controller Block for the " + aStructureName) + .addInfo("Will fill in areas below it with light concrete. This goes through walls") + .addInfo("Use it to remove any spawning locations beneath your base to reduce lag") + .addInfo("Will pull back the pipes after it finishes that layer") + .addInfo("Radius is " + getRadius() + " blocks") + .addSeparator() + .beginStructureBlock(3, 7, 3, false) + .addController("Front bottom") + .addOtherStructurePart(casings, "form the 3x1x3 Base") + .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") + .addOtherStructurePart(getFrameMaterial().mName + " Frame Boxes", "Each pillar's side and 1x3x1 on top") + .addEnergyHatch("1x " + VN[getMinTier()] + "+, Any base casing", 1) + .addMaintenanceHatch("Any base casing", 1) + .addInputBus("Mining Pipes, optional, any base casing", 1) + .addInputHatch("GT Concrete, any base casing", 1) + .addOutputBus("Mining Pipes, optional, any base casing", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + protected abstract int getRadius(); + + @Override + protected boolean checkHatches() { + return !mMaintenanceHatches.isEmpty() && !mInputHatches.isEmpty() && mEnergyHatches.size() == 1; + } + + @Override + protected List> getAllowedHatches() { + return ImmutableList.of(InputHatch, InputBus, Maintenance, Energy); + } + + @Override + protected void setElectricityStats() { + this.mEfficiency = getCurrentEfficiency(null); + this.mEfficiencyIncrease = 10000; + int tier = Math.max(1, GTUtility.getTier(getMaxInputVoltage())); + this.mEUt = -6 * (1 << (tier << 1)); + this.mMaxProgresstime = (workState == STATE_UPWARD ? 240 : 80) / (1 << tier); + this.mMaxProgresstime = Math.max(1, this.mMaxProgresstime); + } + + @Override + protected boolean workingUpward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, + int yHead, int oldYHead) { + if (isRefillableBlock(xPipe, yHead - 1, zPipe)) return tryRefillBlock(xPipe, yHead - 1, zPipe); + int radius = getRadius(); + if (mLastXOff == 0 && mLastZOff == 0) { + mLastXOff = -radius; + mLastZOff = -radius; + } + if (yHead != yDrill) { + for (int i = mLastXOff; i <= radius; i++) { + for (int j = (i == mLastXOff ? mLastZOff : -radius); j <= radius; j++) { + if (isRefillableBlock(xPipe + i, yHead, zPipe + j)) { + mLastXOff = i; + mLastZOff = j; + return tryRefillBlock(xPipe + i, yHead, zPipe + j); + } + } + } + } + + if (tryPickPipe()) { + mLastXOff = 0; + mLastZOff = 0; + return true; + } else { + workState = STATE_DOWNWARD; + stopMachine(ShutDownReasonRegistry.NONE); + setShutdownReason(StatCollector.translateToLocal("GT5U.gui.text.backfiller_finished")); + return false; + } + } + + private boolean isRefillableBlock(int aX, int aY, int aZ) { + IGregTechTileEntity aBaseTile = getBaseMetaTileEntity(); + Block aBlock = aBaseTile.getBlock(aX, aY, aZ); + if (!aBlock.isAir(aBaseTile.getWorld(), aX, aY, aZ)) { + if (mLiquidEnabled) { + if (!isFluid(aBlock)) { + return false; + } + } else { + return false; + } + } + if (aBlock.getMaterial() + .isSolid()) { + return false; + } + return GTUtility + .setBlockByFakePlayer(getFakePlayer(aBaseTile), aX, aY, aZ, GregTechAPI.sBlockConcretes, 8, true); + } + + private boolean tryRefillBlock(int aX, int aY, int aZ) { + if (!tryConsumeFluid()) { + setRuntimeFailureReason(CheckRecipeResultRegistry.BACKFILLER_NO_CONCRETE); + return false; + } + getBaseMetaTileEntity().getWorld() + .setBlock(aX, aY, aZ, GregTechAPI.sBlockConcretes, 8, 3); + return true; + } + + private boolean tryConsumeFluid() { + if (!depleteInput(Materials.Concrete.getMolten(144L))) { + mMaxProgresstime = 0; + return false; + } + return true; + } + + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + screenElements + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocalFormatted( + "GT5U.gui.text.backfiller_current_area", + numberFormat.format(clientYHead))) + .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_UPWARD)) + .widget(new FakeSyncWidget.IntegerSyncer(this::getYHead, newInt -> clientYHead = newInt)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> workState, newInt -> workState = newInt)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + final int BUTTON_Y_LEVEL = 91; + + builder.widget( + new LockedWhileActiveButton(this.getBaseMetaTileEntity(), builder) + .setOnClick((clickData, widget) -> mLiquidEnabled = !mLiquidEnabled) + .setPlayClickSound(true) + .setBackground(() -> { + if (mLiquidEnabled) { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED, + GTUITextures.OVERLAY_BUTTON_LIQUIDMODE }; + } + return new IDrawable[] { GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_LIQUIDMODE_OFF }; + }) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> mLiquidEnabled, newBoolean -> mLiquidEnabled = newBoolean), + builder, + (widget, val) -> widget.notifyTooltipChange()) + .dynamicTooltip( + () -> ImmutableList.of( + StatCollector.translateToLocal( + mLiquidEnabled ? "GT5U.gui.button.liquid_filling_ON" + : "GT5U.gui.button.liquid_filling_OFF"))) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(new Pos2d(100, BUTTON_Y_LEVEL)) + .setSize(16, 16)); + int left = 98; + for (ButtonWidget button : getAdditionalButtons(builder, buildContext)) { + button.setPos(new Pos2d(left, BUTTON_Y_LEVEL)) + .setSize(16, 16); + builder.widget(button); + left += 18; + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDieselEngine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDieselEngine.java new file mode 100644 index 0000000000..1465e6ba31 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDieselEngine.java @@ -0,0 +1,415 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Dynamo; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.recipe.maps.FuelBackend; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEDieselEngine extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { + + @Override + protected IStructureDefinition computeValue(Class type) { + return StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { "---", "iii", "chc", "chc", "ccc", }, { "---", "i~i", "hgh", "hgh", "cdc", }, + { "---", "iii", "chc", "chc", "ccc", }, })) + .addElement('i', lazy(t -> ofBlock(t.getIntakeBlock(), t.getIntakeMeta()))) + .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMeta()))) + .addElement('g', lazy(t -> ofBlock(t.getGearboxBlock(), t.getGearboxMeta()))) + .addElement('d', lazy(t -> Dynamo.newAny(t.getCasingTextureIndex(), 2))) + .addElement( + 'h', + lazy( + t -> buildHatchAdder(MTEDieselEngine.class) + .atLeast(InputHatch, InputHatch, InputHatch, Muffler, Maintenance) + .casingIndex(t.getCasingTextureIndex()) + .dot(1) + .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) + .build(); + } + }; + protected int fuelConsumption = 0; + protected int fuelValue = 0; + protected int fuelRemaining = 0; + protected boolean boostEu = false; + + public MTEDieselEngine(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEDieselEngine(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Combustion Generator") + .addInfo("Controller block for the Large Combustion Engine") + .addInfo("Supply Diesel Fuels and 1000L of Lubricant per hour to run") + .addInfo("Supply 40L/s of Oxygen to boost output (optional)") + .addInfo("Default: Produces 2048EU/t at 100% fuel efficiency") + .addInfo("Boosted: Produces 6144EU/t at 150% fuel efficiency") + .addInfo("You need to wait for it to reach 300% to output full power") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 4, false) + .addController("Front center") + .addCasingInfoRange("Stable Titanium Machine Casing", 16, 22, false) + .addOtherStructurePart("Titanium Gear Box Machine Casing", "Inner 2 blocks") + .addOtherStructurePart("Engine Intake Machine Casing", "8x, ring around controller") + .addStructureInfo("Engine Intake Casings must not be obstructed in front (only air blocks)") + .addDynamoHatch("Back center", 2) + .addMaintenanceHatch("One of the casings next to a Gear Box", 1) + .addMufflerHatch("Top middle back, above the rear Gear Box", 1) + .addInputHatch("Diesel Fuel, next to a Gear Box", 1) + .addInputHatch("Lubricant, next to a Gear Box", 1) + .addInputHatch("Oxygen, optional, next to a Gear Box", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { casingTexturePages[0][50], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][50], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DIESEL_ENGINE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DIESEL_ENGINE_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][50] }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return getMaxEfficiency(aStack) > 0; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.dieselFuels; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + /** + * The nominal energy output This can be further multiplied by {@link #getMaxEfficiency(ItemStack)} when boosted + */ + protected int getNominalOutput() { + return 2048; + } + + protected Materials getBooster() { + return Materials.Oxygen; + } + + /** + * x times fuel will be consumed when boosted This will however NOT increase power output Go tweak + * {@link #getMaxEfficiency(ItemStack)} and {@link #getNominalOutput()} instead + */ + protected int getBoostFactor() { + return 2; + } + + /** + * x times of additive will be consumed when boosted + */ + protected int getAdditiveFactor() { + return 1; + } + + /** + * Efficiency will increase by this amount every tick + */ + protected int getEfficiencyIncrease() { + return 15; + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + ArrayList tFluids = getStoredFluids(); + + // fast track lookup + if (!tFluids.isEmpty()) { + double boostedFuelValue = 0; + double boostedOutput = 0; + double extraFuelFraction = 0; + for (FluidStack tFluid : tFluids) { + GTRecipe tRecipe = getRecipeMap().getBackend() + .findFuel(tFluid); + if (tRecipe == null) continue; + fuelValue = tRecipe.mSpecialValue; + + FluidStack tLiquid = tFluid.copy(); + if (boostEu) { + boostedFuelValue = GTUtility.safeInt((long) (fuelValue * 1.5)); + boostedOutput = getNominalOutput() * 3; + + fuelConsumption = tLiquid.amount = getBoostFactor() * getNominalOutput() / fuelValue; + + // HOG consumption rate is normally 1 L/t, when it's supposed to be around 1.64 L/t + // This code increases fuel consumption by 1 at random, but with a weighted chance + if (boostedFuelValue * 2 > boostedOutput) { + extraFuelFraction = boostedOutput / boostedFuelValue; + extraFuelFraction = extraFuelFraction - (int) extraFuelFraction; + double rand = Math.random(); + if (rand < extraFuelFraction) { + tLiquid.amount += 1; + } + } + + } else { + fuelConsumption = tLiquid.amount = getNominalOutput() / fuelValue; + } + + // Deplete that amount + if (!depleteInput(tLiquid)) return CheckRecipeResultRegistry.NO_FUEL_FOUND; + boostEu = depleteInput(getBooster().getGas(2L * getAdditiveFactor())); + + // Check to prevent burning HOG without consuming it, if not boosted + if (!boostEu && fuelValue > getNominalOutput()) { + return SimpleCheckRecipeResult.ofFailure("fuel_quality_too_high"); + } + + // Deplete Lubricant. 1000L should = 1 hour of runtime (if baseEU = 2048) + if ((mRuntime % 72 == 0 || mRuntime == 0) + && !depleteInput(Materials.Lubricant.getFluid((boostEu ? 2L : 1L) * getAdditiveFactor()))) + return SimpleCheckRecipeResult.ofFailure("no_lubricant"); + + fuelRemaining = tFluid.amount; // Record available fuel + this.mEUt = mEfficiency < 2000 ? 0 : getNominalOutput(); // Output 0 if startup is less than 20% + this.mProgresstime = 1; + this.mMaxProgresstime = 1; + this.mEfficiencyIncrease = getEfficiencyIncrease(); + return CheckRecipeResultRegistry.GENERATING; + } + } + this.mEUt = 0; + this.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 1) && !mMufflerHatches.isEmpty() + && mMaintenanceHatches.size() == 1; + } + + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + public byte getCasingMeta() { + return 2; + } + + public Block getIntakeBlock() { + return GregTechAPI.sBlockCasings4; + } + + public byte getIntakeMeta() { + return 13; + } + + public Block getGearboxBlock() { + return GregTechAPI.sBlockCasings2; + } + + public byte getGearboxMeta() { + return 4; + } + + public byte getCasingTextureIndex() { + return 50; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEDieselEngine(this.mName); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return boostEu ? 30000 : 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTMod.gregtechproxy.mPollutionLargeCombustionEnginePerSecond; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return true; + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = 0; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); + } + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchDynamo tHatch : filterValidMTEs(mDynamoHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + return new String[] { EnumChatFormatting.BLUE + "Diesel Engine" + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + getIdealStatus() == getRepairStatus() + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.engine.output") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(((long) mEUt * mEfficiency / 10000)) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("GT5U.engine.consumption") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(fuelConsumption) + + EnumChatFormatting.RESET + + " L/t", + StatCollector.translateToLocal("GT5U.engine.value") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(fuelValue) + + EnumChatFormatting.RESET + + " EU/L", + StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " + + EnumChatFormatting.GOLD + + GTUtility.formatNumbers(fuelRemaining) + + EnumChatFormatting.RESET + + " L", + StatCollector.translateToLocal("GT5U.engine.efficiency") + ": " + + EnumChatFormatting.YELLOW + + (mEfficiency / 100F) + + EnumChatFormatting.YELLOW + + " %", + StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %" }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 1, 1); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 1, 1, elementBudget, env, false, true); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java new file mode 100644 index 0000000000..9e89ad1a22 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDistillationTower.java @@ -0,0 +1,360 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.fluid.IFluidStore; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.MTEHatchOutputME; + +public class MTEDistillationTower extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable { + + protected static final int CASING_INDEX = 49; + protected static final String STRUCTURE_PIECE_BASE = "base"; + protected static final String STRUCTURE_PIECE_LAYER = "layer"; + protected static final String STRUCTURE_PIECE_LAYER_HINT = "layerHint"; + protected static final String STRUCTURE_PIECE_TOP_HINT = "topHint"; + private static final IStructureDefinition STRUCTURE_DEFINITION; + + static { + IHatchElement layeredOutputHatch = OutputHatch + .withCount(MTEDistillationTower::getCurrentLayerOutputHatchCount) + .withAdder(MTEDistillationTower::addLayerOutputHatch); + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape(STRUCTURE_PIECE_BASE, transpose(new String[][] { { "b~b", "bbb", "bbb" }, })) + .addShape(STRUCTURE_PIECE_LAYER, transpose(new String[][] { { "lll", "lcl", "lll" }, })) + .addShape(STRUCTURE_PIECE_LAYER_HINT, transpose(new String[][] { { "lll", "l-l", "lll" }, })) + .addShape(STRUCTURE_PIECE_TOP_HINT, transpose(new String[][] { { "LLL", "LLL", "LLL" }, })) + .addElement( + 'b', + ofChain( + buildHatchAdder(MTEDistillationTower.class) + .atLeast(Energy, OutputBus, InputHatch, InputBus, Maintenance) + .casingIndex(CASING_INDEX) + .dot(1) + .build(), + onElementPass(MTEDistillationTower::onCasingFound, ofBlock(GregTechAPI.sBlockCasings4, 1)))) + .addElement( + 'l', + ofChain( + buildHatchAdder(MTEDistillationTower.class).atLeast(layeredOutputHatch) + .casingIndex(CASING_INDEX) + .dot(2) + .disallowOnly(ForgeDirection.UP, ForgeDirection.DOWN) + .build(), + ofHatchAdder(MTEDistillationTower::addEnergyInputToMachineList, CASING_INDEX, 2), + ofHatchAdder(MTEDistillationTower::addLayerOutputHatch, CASING_INDEX, 2), + ofHatchAdder(MTEDistillationTower::addMaintenanceToMachineList, CASING_INDEX, 2), + onElementPass(MTEDistillationTower::onCasingFound, ofBlock(GregTechAPI.sBlockCasings4, 1)))) + // hint element only used in top layer + .addElement( + 'L', + buildHatchAdder(MTEDistillationTower.class).atLeast(layeredOutputHatch) + .casingIndex(CASING_INDEX) + .dot(2) + .disallowOnly(ForgeDirection.UP) + .buildAndChain(GregTechAPI.sBlockCasings4, 1)) + .addElement( + 'c', + ofChain( + onElementPass( + t -> t.onTopLayerFound(false), + ofHatchAdder(MTEDistillationTower::addOutputToMachineList, CASING_INDEX, 3)), + onElementPass( + t -> t.onTopLayerFound(false), + ofHatchAdder(MTEDistillationTower::addMaintenanceToMachineList, CASING_INDEX, 3)), + onElementPass(t -> t.onTopLayerFound(true), ofBlock(GregTechAPI.sBlockCasings4, 1)), + isAir())) + .build(); + } + + protected final List> mOutputHatchesByLayer = new ArrayList<>(); + protected int mHeight; + protected int mCasing; + protected boolean mTopLayerFound; + + public MTEDistillationTower(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEDistillationTower(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEDistillationTower(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Distillery") + .addInfo("Controller block for the Distillation Tower") + .addInfo("Fluids are only put out at the correct height") + .addInfo("The correct height equals the slot number in the NEI recipe") + .addSeparator() + .beginVariableStructureBlock(3, 3, 3, 12, 3, 3, true) + .addController("Front bottom") + .addOtherStructurePart("Clean Stainless Steel Machine Casing", "7 x h - 5 (minimum)") + .addEnergyHatch("Any casing except top centre", 1, 2) + .addMaintenanceHatch("Any casing", 1, 2, 3) + .addInputHatch("Any bottom layer casing", 1) + .addOutputBus("Any bottom layer casing", 1) + .addOutputHatch("2-11x Output Hatches (At least one per layer except bottom layer)", 2, 3) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection == facingDirection) { + if (active) return new ITexture[] { BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.distillationTowerRecipes; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic(); + } + + protected void onCasingFound() { + mCasing++; + } + + protected void onTopLayerFound(boolean aIsCasing) { + mTopLayerFound = true; + if (aIsCasing) onCasingFound(); + } + + protected int getCurrentLayerOutputHatchCount() { + return mOutputHatchesByLayer.size() < mHeight || mHeight <= 0 ? 0 + : mOutputHatchesByLayer.get(mHeight - 1) + .size(); + } + + protected boolean addLayerOutputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null || aTileEntity.isDead() + || !(aTileEntity.getMetaTileEntity() instanceof MTEHatchOutput tHatch)) return false; + while (mOutputHatchesByLayer.size() < mHeight) mOutputHatchesByLayer.add(new ArrayList<>()); + tHatch.updateTexture(aBaseCasingIndex); + return mOutputHatchesByLayer.get(mHeight - 1) + .add(tHatch); + } + + @Override + public List getFluidOutputSlots(FluidStack[] toOutput) { + return getFluidOutputSlotsByLayer(toOutput, mOutputHatchesByLayer); + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + // don't rotate a freaking tower, it won't work + return (d, r, f) -> (d.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 && r.isNotRotated() + && !f.isVerticallyFliped(); + } + + @Override + public boolean isRotationChangeAllowed() { + return false; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + // reset + mOutputHatchesByLayer.forEach(List::clear); + mHeight = 1; + mTopLayerFound = false; + mCasing = 0; + + // check base + if (!checkPiece(STRUCTURE_PIECE_BASE, 1, 0, 0)) return false; + + // check each layer + while (mHeight < 12) { + if (!checkPiece(STRUCTURE_PIECE_LAYER, 1, mHeight, 0)) { + return false; + } + if (mOutputHatchesByLayer.size() < mHeight || mOutputHatchesByLayer.get(mHeight - 1) + .isEmpty()) + // layer without output hatch + return false; + if (mTopLayerFound) { + break; + } + // not top + mHeight++; + } + + // validate final invariants... (actual height is mHeight+1) + return mCasing >= 7 * (mHeight + 1) - 5 && mHeight + 1 >= 3 + && mTopLayerFound + && mMaintenanceHatches.size() == 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + protected void addFluidOutputs(FluidStack[] mOutputFluids2) { + for (int i = 0; i < mOutputFluids2.length && i < mOutputHatchesByLayer.size(); i++) { + final FluidStack fluidStack = mOutputFluids2[i]; + if (fluidStack == null) continue; + FluidStack tStack = fluidStack.copy(); + if (!dumpFluid(mOutputHatchesByLayer.get(i), tStack, true)) + dumpFluid(mOutputHatchesByLayer.get(i), tStack, false); + } + } + + @Override + public boolean canDumpFluidToME() { + // All fluids can be dumped to ME only if each layer contains a ME Output Hatch. + return this.mOutputHatchesByLayer.stream() + .allMatch( + tLayerOutputHatches -> tLayerOutputHatches.stream() + .anyMatch(tHatch -> (tHatch instanceof MTEHatchOutputME tMEHatch) && (tMEHatch.canAcceptFluid()))); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 1, 0, 0); + int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height + for (int i = 1; i < tTotalHeight - 1; i++) { + buildPiece(STRUCTURE_PIECE_LAYER_HINT, stackSize, hintsOnly, 1, i, 0); + } + buildPiece(STRUCTURE_PIECE_TOP_HINT, stackSize, hintsOnly, 1, tTotalHeight - 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + mHeight = 0; + int built = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 1, 0, 0, elementBudget, env, false, true); + if (built >= 0) return built; + int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height + for (int i = 1; i < tTotalHeight - 1; i++) { + mHeight = i; + built = survivialBuildPiece( + STRUCTURE_PIECE_LAYER_HINT, + stackSize, + 1, + i, + 0, + elementBudget, + env, + false, + true); + if (built >= 0) return built; + } + mHeight = tTotalHeight - 1; + return survivialBuildPiece( + STRUCTURE_PIECE_TOP_HINT, + stackSize, + 1, + tTotalHeight - 1, + 0, + elementBudget, + env, + false, + true); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.GT_MACHINES_DISTILLERY_LOOP; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEDrillerBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDrillerBase.java new file mode 100644 index 0000000000..131a1a3166 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEDrillerBase.java @@ -0,0 +1,951 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.W; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ORE_DRILL; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ORE_DRILL_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ORE_DRILL_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ORE_DRILL_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.getCasingTextureForId; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.StatCollector; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.widgets.LockedWhileActiveButton; +import gregtech.api.interfaces.IChunkLoader; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDataAccess; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.objects.GTChunkManager; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; + +public abstract class MTEDrillerBase extends MTEEnhancedMultiBlockBase + implements IChunkLoader, ISurvivalConstructable { + + private static final ItemStack miningPipe = GTModHandler.getIC2Item("miningPipe", 0); + private static final ItemStack miningPipeTip = GTModHandler.getIC2Item("miningPipeTip", 0); + private static final Block miningPipeBlock = GTUtility.getBlockFromStack(miningPipe); + private static final Block miningPipeTipBlock = GTUtility.getBlockFromStack(miningPipeTip); + protected static final String STRUCTURE_PIECE_MAIN = "main"; + protected static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { + + @Override + protected IStructureDefinition computeValue(Class type) { + return StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { " ", " f ", " " }, { " ", " f ", " " }, { " ", " f ", " " }, + { " f ", "fcf", " f " }, { " f ", "fcf", " f " }, { " f ", "fcf", " f " }, + { "b~b", "bbb", "bbb" }, })) + .addElement('f', lazy(t -> ofFrame(t.getFrameMaterial()))) + .addElement( + 'c', + lazy( + t -> ofBlock( + t.getCasingBlockItem() + .getBlock(), + t.getCasingBlockItem() + .get(0) + .getItemDamage()))) + .addElement( + 'b', + lazy( + t -> buildHatchAdder(MTEDrillerBase.class).atLeastList(t.getAllowedHatches()) + .adder(MTEDrillerBase::addToMachineList) + .casingIndex(t.casingTextureIndex) + .dot(1) + .buildAndChain( + t.getCasingBlockItem() + .getBlock(), + t.getCasingBlockItem() + .get(0) + .getItemDamage()))) + .build(); + } + }; + + private Block casingBlock; + private int casingMeta; + private int frameMeta; + protected int casingTextureIndex; + protected boolean isPickingPipes; + + private ForgeDirection back; + + private int xDrill, yDrill, zDrill, xPipe, zPipe, yHead; + + protected int getXDrill() { + return xDrill; + } + + protected int getZDrill() { + return zDrill; + } + + protected int getYHead() { + return yHead; + } + + protected int workState; + protected static final int STATE_DOWNWARD = 0, STATE_AT_BOTTOM = 1, STATE_UPWARD = 2, STATE_ABORT = 3; + + protected boolean mChunkLoadingEnabled = true; + protected ChunkCoordIntPair mCurrentChunk = null; + protected boolean mWorkChunkNeedsReload = true; + + /** Stores default result messages for success/failures of each work state. */ + private final Map resultRegistry = new HashMap<>(); + + /** Allows inheritors to supply custom runtime failure messages. */ + private CheckRecipeResult runtimeFailure = null; + private CheckRecipeResult lastRuntimeFailure = null; + + /** Allows inheritors to supply custom shutdown failure messages. */ + private @NotNull String shutdownReason = ""; + + /** Allows inheritors to suppress wiping the last error if the machine is forcibly turned off. */ + protected boolean suppressErrorWipe = false; + + public MTEDrillerBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + initFields(); + } + + public MTEDrillerBase(String aName) { + super(aName); + initFields(); + } + + private void initFields() { + casingBlock = getCasingBlockItem().getBlock(); + casingMeta = getCasingBlockItem().get(0) + .getItemDamage(); + int frameId = 4096 + getFrameMaterial().mMetaItemSubID; + frameMeta = GregTechAPI.METATILEENTITIES[frameId] != null + ? GregTechAPI.METATILEENTITIES[frameId].getTileEntityBaseType() + : W; + casingTextureIndex = getCasingTextureIndex(); + workState = STATE_DOWNWARD; + + // Inheritors can overwrite these to add custom operating messages. + addResultMessage(STATE_DOWNWARD, true, "deploying_pipe"); + addResultMessage(STATE_DOWNWARD, false, "extracting_pipe"); + addResultMessage(STATE_AT_BOTTOM, true, "drilling"); + addResultMessage(STATE_AT_BOTTOM, false, "no_mining_pipe"); + addResultMessage(STATE_UPWARD, true, "retracting_pipe"); + addResultMessage(STATE_UPWARD, false, "drill_generic_finished"); + addResultMessage(STATE_ABORT, true, "retracting_pipe"); + addResultMessage(STATE_ABORT, false, "drill_retract_pipes_finished"); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection == facingDirection) { + if (active) return new ITexture[] { getCasingTextureForId(casingTextureIndex), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ORE_DRILL_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ORE_DRILL_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { getCasingTextureForId(casingTextureIndex), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ORE_DRILL) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ORE_DRILL_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { getCasingTextureForId(casingTextureIndex) }; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("workState", workState); + aNBT.setBoolean("chunkLoadingEnabled", mChunkLoadingEnabled); + aNBT.setBoolean("isChunkloading", mCurrentChunk != null); + if (mCurrentChunk != null) { + aNBT.setInteger("loadedChunkXPos", mCurrentChunk.chunkXPos); + aNBT.setInteger("loadedChunkZPos", mCurrentChunk.chunkZPos); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + workState = aNBT.getInteger("workState"); + if (aNBT.hasKey("isPickingPipes")) + workState = aNBT.getBoolean("isPickingPipes") ? STATE_UPWARD : STATE_DOWNWARD; + if (aNBT.hasKey("chunkLoadingEnabled")) mChunkLoadingEnabled = aNBT.getBoolean("chunkLoadingEnabled"); + if (aNBT.getBoolean("isChunkloading")) { + mCurrentChunk = new ChunkCoordIntPair( + aNBT.getInteger("loadedChunkXPos"), + aNBT.getInteger("loadedChunkZPos")); + } + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, + EntityPlayer entityPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + mChunkLoadingEnabled = !mChunkLoadingEnabled; + GTUtility.sendChatToPlayer( + entityPlayer, + mChunkLoadingEnabled ? GTUtility.trans("502", "Mining chunk loading enabled") + : GTUtility.trans("503", "Mining chunk loading disabled")); + return true; + } + return super.onSolderingToolRightClick(side, wrenchingSide, entityPlayer, aX, aY, aZ); + } + + @Override + public void onRemoval() { + if (mChunkLoadingEnabled) GTChunkManager.releaseTicket((TileEntity) getBaseMetaTileEntity()); + super.onRemoval(); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && mCurrentChunk != null + && !mWorkChunkNeedsReload + && !aBaseMetaTileEntity.isAllowedToWork()) { + // if machine has stopped, stop chunkloading + GTChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); + mWorkChunkNeedsReload = true; + } + } + + protected boolean tryPickPipe() { + if (yHead == yDrill) return isPickingPipes = false; + if (tryOutputPipe()) { + if (checkBlockAndMeta(xPipe, yHead + 1, zPipe, miningPipeBlock, W)) getBaseMetaTileEntity().getWorld() + .setBlock(xPipe, yHead + 1, zPipe, miningPipeTipBlock); + getBaseMetaTileEntity().getWorld() + .setBlockToAir(xPipe, yHead, zPipe); + return isPickingPipes = true; + } + return isPickingPipes = false; + } + + /** + * @return 0 for succeeded, 1 for invalid block, 2 for not having mining pipes, 3 for event canceled. + */ + protected int tryLowerPipeState() { + return tryLowerPipeState(false); + } + + /** + * @return 0 for succeeded, 1 for invalid block, 2 for not having mining pipes, 3 for event canceled. + */ + protected int tryLowerPipeState(boolean isSimulating) { + if (!isHasMiningPipes()) return 2; + switch (canLowerPipe()) { + case 1 -> { + return 1; + } + case 2 -> { + return 3; + } + } + + Block b = getBaseMetaTileEntity().getBlock(xPipe, yHead - 1, zPipe); + if (b != miningPipeTipBlock && !GTUtility.setBlockByFakePlayer( + getFakePlayer(getBaseMetaTileEntity()), + xPipe, + yHead - 1, + zPipe, + miningPipeTipBlock, + 0, + isSimulating)) return 3; + if (!isSimulating) { + if (yHead != yDrill) getBaseMetaTileEntity().getWorld() + .setBlock(xPipe, yHead, zPipe, miningPipeBlock); + if (b != miningPipeBlock && b != miningPipeTipBlock) getBaseMetaTileEntity().decrStackSize(1, 1); + } + + return 0; + } + + private void putMiningPipesFromInputsInController() { + int maxPipes = miningPipe.getMaxStackSize(); + if (isHasMiningPipes(maxPipes)) return; + + ItemStack pipes = getStackInSlot(1); + if (pipes != null && !pipes.isItemEqual(miningPipe)) return; + for (ItemStack storedItem : getStoredInputs()) { + if (!storedItem.isItemEqual(miningPipe)) continue; + + if (pipes == null) { + setInventorySlotContents(1, GTUtility.copyOrNull(miningPipe)); + pipes = getStackInSlot(1); + } + + if (pipes.stackSize == maxPipes) break; + + int needPipes = maxPipes - pipes.stackSize; + int transferPipes = Math.min(storedItem.stackSize, needPipes); + + pipes.stackSize += transferPipes; + storedItem.stackSize -= transferPipes; + } + updateSlots(); + } + + private boolean tryOutputPipe() { + if (!getBaseMetaTileEntity().addStackToSlot(1, GTUtility.copyAmount(1, miningPipe))) + mOutputItems = new ItemStack[] { GTUtility.copyAmount(1, miningPipe) }; + return true; + } + + /** + * @return 0 for available, 1 for invalid block, 2 for event canceled. + */ + protected int canLowerPipe() { + IGregTechTileEntity aBaseTile = getBaseMetaTileEntity(); + if (yHead > 0 && GTUtility.getBlockHardnessAt(aBaseTile.getWorld(), xPipe, yHead - 1, zPipe) >= 0) { + return GTUtility.eraseBlockByFakePlayer(getFakePlayer(aBaseTile), xPipe, yHead - 1, zPipe, true) ? 0 : 2; + } + return 1; + } + + protected boolean reachingVoidOrBedrock() { + return yHead <= 0 || checkBlockAndMeta(xPipe, yHead - 1, zPipe, Blocks.bedrock, W); + } + + private boolean isHasMiningPipes() { + return isHasMiningPipes(1); + } + + private boolean isHasMiningPipes(int minCount) { + ItemStack pipe = getStackInSlot(1); + return pipe != null && pipe.stackSize > minCount - 1 && pipe.isItemEqual(miningPipe); + } + + /** + * @deprecated Readded for compability + * @return if no pipes are present + */ + @Deprecated + protected boolean waitForPipes() { + return !isHasMiningPipes(); + } + + private boolean isEnergyEnough() { + long requiredEnergy = 512 + getMaxInputVoltage() * 4; + for (MTEHatchEnergy energyHatch : mEnergyHatches) { + requiredEnergy -= energyHatch.getEUVar(); + if (requiredEnergy <= 0) return true; + } + return false; + } + + protected boolean workingDownward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, + int yHead, int oldYHead) { + switch (tryLowerPipeState()) { + case 2 -> { + mMaxProgresstime = 0; + setRuntimeFailureReason(CheckRecipeResultRegistry.MISSING_MINING_PIPE); + return false; + } + case 3 -> { + workState = STATE_UPWARD; + return true; + } + case 1 -> { + workState = STATE_AT_BOTTOM; + return true; + } + default -> { + return true; + } + } + } + + protected boolean workingAtBottom(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, + int yHead, int oldYHead) { + if (tryLowerPipeState(true) == 0) { + workState = STATE_DOWNWARD; + return true; + } + workState = STATE_UPWARD; + return true; + } + + protected boolean workingUpward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, + int yHead, int oldYHead) { + if (tryPickPipe()) { + return true; + } else { + workState = STATE_DOWNWARD; + stopMachine(ShutDownReasonRegistry.NONE); + return false; + } + } + + /** Called once when the abort button is clicked. Use to perform any needed cleanup (e.g. unloading chunks.) */ + protected void onAbort() {} + + protected void abortDrilling() { + if (workState != STATE_ABORT) { + workState = STATE_ABORT; + onAbort(); + setShutdownReason(""); + + if (!isAllowedToWork()) { + enableWorking(); + } + } + } + + // This is a distinct state from workingUpward, because some inheritors (like concrete backfiller) operate + // exclusively on the workingUpward phase. It also allows for more distinct status messages. + protected boolean workingToAbortOperation(@NotNull ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, + int zPipe, int yHead, int oldYHead) { + if (tryPickPipe()) { + return true; + } else { + workState = STATE_DOWNWARD; + stopMachine(ShutDownReasonRegistry.NONE); + return false; + } + } + + @Override + public void enableWorking() { + super.enableWorking(); + shutdownReason = ""; + } + + @Override + public void onDisableWorking() { + if (suppressErrorWipe) { + suppressErrorWipe = false; + } else { + super.onDisableWorking(); + } + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + ItemStack controllerStack = getControllerSlot(); + // Public pipe actions + setElectricityStats(); + int oldYHead = yHead; + if (!checkPipesAndSetYHead()) { + stopMachine(ShutDownReasonRegistry.NONE); + return SimpleCheckRecipeResult.ofFailure("no_mining_pipe"); + } else if (!isEnergyEnough()) { + stopMachine(ShutDownReasonRegistry.NONE); + return SimpleCheckRecipeResult.ofFailure("not_enough_energy"); + } + putMiningPipesFromInputsInController(); + + final boolean wasSuccessful; + switch (workState) { + case STATE_DOWNWARD -> wasSuccessful = workingDownward( + controllerStack, + xDrill, + yDrill, + zDrill, + xPipe, + zPipe, + yHead, + oldYHead); + case STATE_AT_BOTTOM -> wasSuccessful = workingAtBottom( + controllerStack, + xDrill, + yDrill, + zDrill, + xPipe, + zPipe, + yHead, + oldYHead); + case STATE_UPWARD -> wasSuccessful = workingUpward( + controllerStack, + xDrill, + yDrill, + zDrill, + xPipe, + zPipe, + yHead, + oldYHead); + case STATE_ABORT -> wasSuccessful = workingToAbortOperation( + controllerStack, + xDrill, + yDrill, + zDrill, + xPipe, + zPipe, + yHead, + oldYHead); + default -> wasSuccessful = false; + } + + if (runtimeFailure == null) { + if (wasSuccessful) { + lastRuntimeFailure = null; + } + + return resultRegistry.getOrDefault( + new ResultRegistryKey(workState, wasSuccessful), + SimpleCheckRecipeResult.ofFailure("no_mining_pipe")); + } else { + final CheckRecipeResult result; + result = lastRuntimeFailure = runtimeFailure; + runtimeFailure = null; + return result; + } + } + + /** + * Allow drills to set a specific failure reason specific to their situation. E.g.: out of drilling fluid. + * Should be used when the machine doesn't turn off due to the failure. + * + * @param newFailureReason A new failure reason + */ + protected void setRuntimeFailureReason(@NotNull CheckRecipeResult newFailureReason) { + runtimeFailure = newFailureReason; + } + + /** + * Gets a reason for why the drill turned off, for use in UIs and such. + * + * @return A reason, or empty if the machine is active or there is no message set yet. + */ + @NotNull + protected Optional getFailureReason() { + if (getBaseMetaTileEntity().isActive()) { + return Optional.empty(); + } + + if (!shutdownReason.isEmpty()) { + return Optional.of(shutdownReason); + } + + return Optional.ofNullable(lastRuntimeFailure) + .map(CheckRecipeResult::getDisplayString); + } + + /** + * Sets a line in the UI to explain why the drill shut down. E.g.: operation finished. + * Should be used when the machine has been turned off due to an operating issue or completion. + * + * @param newReason The reason for the machine shutdown + */ + protected void setShutdownReason(@NotNull String newReason) { + shutdownReason = newReason; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> (d.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 && r.isNotRotated() + && !f.isVerticallyFliped(); + } + + @Override + public boolean isRotationChangeAllowed() { + return false; + } + + @Override + public final IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + updateCoordinates(); + return checkPiece(STRUCTURE_PIECE_MAIN, 1, 6, 0) && checkHatches() + && GTUtility.getTier(getMaxInputVoltage()) >= getMinTier() + && mMaintenanceHatches.size() == 1; + } + + private void updateCoordinates() { + xDrill = getBaseMetaTileEntity().getXCoord(); + yDrill = getBaseMetaTileEntity().getYCoord(); + zDrill = getBaseMetaTileEntity().getZCoord(); + back = getBaseMetaTileEntity().getBackFacing(); + xPipe = xDrill + back.offsetX; + zPipe = zDrill + back.offsetZ; + } + + private boolean checkPipesAndSetYHead() { + yHead = yDrill - 1; + while (checkBlockAndMeta(xPipe, yHead, zPipe, miningPipeBlock, W)) yHead--; // skip pipes + // is pipe tip OR is controller layer + if (checkBlockAndMeta(xPipe, yHead, zPipe, miningPipeTipBlock, W) || ++yHead == yDrill) return true; + // pipe column is broken - try fix + getBaseMetaTileEntity().getWorld() + .setBlock(xPipe, yHead, zPipe, miningPipeTipBlock); + return true; + } + + private boolean checkBlockAndMeta(int x, int y, int z, Block block, int meta) { + return (meta == W || getBaseMetaTileEntity().getMetaID(x, y, z) == meta) + && getBaseMetaTileEntity().getBlock(x, y, z) == block; + } + + private FakePlayer mFakePlayer = null; + + protected FakePlayer getFakePlayer(IGregTechTileEntity aBaseTile) { + if (mFakePlayer == null) mFakePlayer = GTUtility.getFakePlayer(aBaseTile); + mFakePlayer.setWorld(aBaseTile.getWorld()); + mFakePlayer.setPosition(aBaseTile.getXCoord(), aBaseTile.getYCoord(), aBaseTile.getZCoord()); + return mFakePlayer; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + protected abstract ItemList getCasingBlockItem(); + + protected abstract Materials getFrameMaterial(); + + protected abstract int getCasingTextureIndex(); + + protected abstract int getMinTier(); + + protected abstract boolean checkHatches(); + + protected abstract void setElectricityStats(); + + public int getTotalConfigValue() { + int config = 0; + ArrayList tCircuitList = getDataItems(1); + for (ItemStack tCircuit : tCircuitList) config += tCircuit.getItemDamage(); + return config; + } + + public ArrayList mDataAccessHatches = new ArrayList<>(); + + /** + * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb + */ + private boolean isCorrectDataItem(ItemStack aStack, int state) { + if ((state & 1) != 0 && ItemList.Circuit_Integrated.isStackEqual(aStack, true, true)) return true; + if ((state & 2) != 0 && ItemList.Tool_DataStick.isStackEqual(aStack, false, true)) return true; + return (state & 4) != 0 && ItemList.Tool_DataOrb.isStackEqual(aStack, false, true); + } + + /** + * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb + */ + public ArrayList getDataItems(int state) { + ArrayList rList = new ArrayList<>(); + if (GTUtility.isStackValid(mInventory[1]) && isCorrectDataItem(mInventory[1], state)) { + rList.add(mInventory[1]); + } + for (MTEHatchDataAccess tHatch : filterValidMTEs(mDataAccessHatches)) { + for (int i = 0; i < tHatch.getBaseMetaTileEntity() + .getSizeInventory(); i++) { + if (tHatch.getBaseMetaTileEntity() + .getStackInSlot(i) != null && isCorrectDataItem( + tHatch.getBaseMetaTileEntity() + .getStackInSlot(i), + state)) + rList.add( + tHatch.getBaseMetaTileEntity() + .getStackInSlot(i)); + } + } + return rList; + } + + @Override + public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + return super.addToMachineList(aTileEntity, aBaseCasingIndex) + || addDataAccessToMachineList(aTileEntity, aBaseCasingIndex); + } + + public boolean addDataAccessToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchDataAccess) { + ((MTEHatch) aMetaTileEntity).updateTexture((byte) aBaseCasingIndex); + return mDataAccessHatches.add((MTEHatchDataAccess) aMetaTileEntity); + } + return false; + } + + @Override + public ChunkCoordIntPair getActiveChunk() { + return mCurrentChunk; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 6, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 6, 0, elementBudget, env, false, true); + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + screenElements.widget( + TextWidget.dynamicString(() -> shutdownReason) + .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled(widget -> !(getBaseMetaTileEntity().isActive() || shutdownReason.isEmpty()))) + .widget(new FakeSyncWidget.StringSyncer(() -> shutdownReason, newString -> shutdownReason = newString)); + } + + @Override + protected boolean showRecipeTextInGUI() { + return false; + } + + /** + * Adds additional buttons to the main button row. You do not need to set the position. + * + * @param builder Only use to attach SyncWidgets. + * @param buildContext Context for things like the player. + */ + protected List getAdditionalButtons(ModularWindow.Builder builder, UIBuildContext buildContext) { + return ImmutableList.of(); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + final int BUTTON_Y_LEVEL = 91; + + builder.widget( + new LockedWhileActiveButton(this.getBaseMetaTileEntity(), builder) + .setOnClick((clickData, widget) -> mChunkLoadingEnabled = !mChunkLoadingEnabled) + .setPlayClickSound(true) + .setBackground(() -> { + if (mChunkLoadingEnabled) { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED, + GTUITextures.OVERLAY_BUTTON_CHUNK_LOADING }; + } + return new IDrawable[] { GTUITextures.BUTTON_STANDARD, + GTUITextures.OVERLAY_BUTTON_CHUNK_LOADING_OFF }; + }) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer( + () -> mChunkLoadingEnabled, + newBoolean -> mChunkLoadingEnabled = newBoolean), + builder, + (widget, val) -> widget.notifyTooltipChange()) + .dynamicTooltip( + () -> ImmutableList.of( + StatCollector.translateToLocal( + mChunkLoadingEnabled ? "GT5U.gui.button.chunk_loading_on" + : "GT5U.gui.button.chunk_loading_off"))) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(new Pos2d(80, BUTTON_Y_LEVEL)) + .setSize(16, 16)) + .widget( + new ButtonWidget().setOnClick((clickData, widget) -> abortDrilling()) + .setPlayClickSound(true) + .setBackground(() -> { + if (workState == STATE_ABORT) { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED, + GTUITextures.OVERLAY_BUTTON_RETRACT_PIPE, GTUITextures.OVERLAY_BUTTON_LOCKED }; + } + return new IDrawable[] { GTUITextures.BUTTON_STANDARD, + GTUITextures.OVERLAY_BUTTON_RETRACT_PIPE }; + }) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer(() -> workState, (newInt) -> workState = newInt), + builder, + (widget, integer) -> widget.notifyTooltipChange()) + .dynamicTooltip( + () -> ImmutableList.of( + StatCollector.translateToLocalFormatted( + workState == STATE_ABORT ? "GT5U.gui.button.drill_retract_pipes_active" + : "GT5U.gui.button.drill_retract_pipes"))) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(new Pos2d(174, 112)) + .setSize(16, 16)); + + int left = 98; + for (ButtonWidget button : getAdditionalButtons(builder, buildContext)) { + button.setPos(new Pos2d(left, BUTTON_Y_LEVEL)) + .setSize(16, 16); + builder.widget(button); + left += 18; + } + } + + protected List> getAllowedHatches() { + return ImmutableList.of( + InputHatch, + OutputHatch, + InputBus, + OutputBus, + Muffler, + Maintenance, + Energy, + DataHatchElement.DataAccess); + } + + protected enum DataHatchElement implements IHatchElement { + + DataAccess; + + @Override + public List> mteClasses() { + return Collections.singletonList(MTEHatchDataAccess.class); + } + + @Override + public IGTHatchAdder adder() { + return MTEDrillerBase::addDataAccessToMachineList; + } + + @Override + public long count(MTEDrillerBase t) { + return t.mDataAccessHatches.size(); + } + } + + /** + * Sets or overrides the {@link CheckRecipeResult} for a given work state + * + * @param state A work state like {@link #STATE_DOWNWARD}. + * @param result A previously registered recipe result. + */ + protected void addResultMessage(final int state, @NotNull final CheckRecipeResult result) { + resultRegistry.put(new ResultRegistryKey(state, result.wasSuccessful()), result); + } + + /** + * Sets or overrides the {@link CheckRecipeResult} for a given work state and operation success type. + * + * @param state A work state like {@link #STATE_DOWNWARD}. + * @param wasSuccessful Whether the operation was successful. + * @param resultKey An I18N key for the message. + */ + protected void addResultMessage(final int state, final boolean wasSuccessful, @NotNull final String resultKey) { + addResultMessage( + state, + wasSuccessful ? SimpleCheckRecipeResult.ofSuccess(resultKey) + : SimpleCheckRecipeResult.ofFailure(resultKey)); + } + + @SuppressWarnings("ClassCanBeRecord") + private final static class ResultRegistryKey { + + private final int state; + private final boolean successful; + + public ResultRegistryKey(final int state, final boolean successful) { + this.state = state; + this.successful = successful; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (!(obj instanceof ResultRegistryKey other)) { + return false; + } + + return (state == other.state && successful == other.successful); + } + + @Override + public int hashCode() { + return Objects.hash(state, successful); + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEElectricBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEElectricBlastFurnace.java new file mode 100644 index 0000000000..844c6408df --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEElectricBlastFurnace.java @@ -0,0 +1,397 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.fluid.IFluidStore; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; + +public class MTEElectricBlastFurnace extends MTEAbstractMultiFurnace + implements ISurvivalConstructable { + + private int mHeatingCapacity = 0; + protected final ArrayList mPollutionOutputHatches = new ArrayList<>(); + protected final FluidStack[] pollutionFluidStacks = { Materials.CarbonDioxide.getGas(1000), + Materials.CarbonMonoxide.getGas(1000), Materials.SulfurDioxide.getGas(1000) }; + + protected static final int CASING_INDEX = 11; + protected static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { "ttt", "tmt", "ttt" }, { "CCC", "C-C", "CCC" }, { "CCC", "C-C", "CCC" }, + { "b~b", "bbb", "bbb" } })) + .addElement( + 't', + buildHatchAdder(MTEElectricBlastFurnace.class) + .atLeast( + OutputHatch.withAdder(MTEElectricBlastFurnace::addOutputHatchToTopList) + .withCount(t -> t.mPollutionOutputHatches.size())) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(GregTechAPI.sBlockCasings1, CASING_INDEX)) + .addElement('m', Muffler.newAny(CASING_INDEX, 2)) + .addElement('C', ofCoil(MTEElectricBlastFurnace::setCoilLevel, MTEElectricBlastFurnace::getCoilLevel)) + .addElement( + 'b', + buildHatchAdder(MTEElectricBlastFurnace.class) + .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(GregTechAPI.sBlockCasings1, CASING_INDEX)) + .build(); + + public MTEElectricBlastFurnace(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEElectricBlastFurnace(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEElectricBlastFurnace(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Blast Furnace") + .addInfo("Controller block for the Electric Blast Furnace") + .addInfo("You can use some fluids to reduce recipe time. Place the circuit in the Input Bus") + .addInfo("Each 900K over the min. Heat required reduces power consumption by 5% (multiplicatively)") + .addInfo("Each 1800K over the min. Heat allows for an overclock to be upgraded to a perfect overclock.") + .addInfo("That means the EBF will reduce recipe time by a factor 4 instead of 2 (giving 100% efficiency).") + .addInfo("Additionally gives +100K for every tier past MV") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 4, 3, true) + .addController("Front bottom") + .addCasingInfoRange("Heat Proof Machine Casing", 0, 15, false) + .addOtherStructurePart("Heating Coils", "Two middle Layers") + .addEnergyHatch("Any bottom layer casing", 3) + .addMaintenanceHatch("Any bottom layer casing", 3) + .addMufflerHatch("Top middle", 2) + .addInputBus("Any bottom layer casing", 3) + .addInputHatch("Any bottom layer casing", 3) + .addOutputBus("Any bottom layer casing", 3) + .addOutputHatch("Fluid outputs, Any bottom layer casing") + .addOutputHatch("Pollution gases (CO2/CO/SO2), Any top layer casing", 1) + .addStructureInfo("Pollution gas output amount scales with Muffler Hatch tier") + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTMod.gregtechproxy.mPollutionEBFPerSecond; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.blastFurnaceRecipes; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).setRecipeHeat(recipe.mSpecialValue) + .setMachineHeat(mHeatingCapacity) + .setHeatOC(true) + .setHeatDiscount(true); + } + + @Override + protected @Nonnull CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + return recipe.mSpecialValue <= mHeatingCapacity ? CheckRecipeResultRegistry.SUCCESSFUL + : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); + } + }; + } + + public boolean addOutputHatchToTopList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchOutput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mPollutionOutputHatches.add((MTEHatchOutput) aMetaTileEntity); + } + return false; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.mHeatingCapacity = 0; + + setCoilLevel(HeatingCoilLevel.None); + + mPollutionOutputHatches.clear(); + + if (!checkPiece(STRUCTURE_PIECE_MAIN, 1, 3, 0)) return false; + + if (getCoilLevel() == HeatingCoilLevel.None) return false; + + if (mMaintenanceHatches.size() != 1) return false; + + this.mHeatingCapacity = (int) getCoilLevel().getHeat() + 100 * (GTUtility.getTier(getMaxInputVoltage()) - 2); + return true; + } + + @Override + public boolean addOutput(FluidStack aLiquid) { + if (aLiquid == null) return false; + FluidStack tLiquid = aLiquid.copy(); + ArrayList tOutputHatches; + if (isPollutionFluid(tLiquid)) { + tOutputHatches = this.mPollutionOutputHatches; + multiplyPollutionFluidAmount(tLiquid); + } else { + tOutputHatches = this.mOutputHatches; + } + return dumpFluid(tOutputHatches, tLiquid, true) || dumpFluid(tOutputHatches, tLiquid, false); + } + + protected boolean isPollutionFluid(@Nullable FluidStack fluidStack) { + if (fluidStack == null) return false; + for (FluidStack pollutionFluidStack : pollutionFluidStacks) { + if (!fluidStack.isFluidEqual(pollutionFluidStack)) continue; + return true; + } + return false; + } + + @Override + public List getFluidOutputSlots(FluidStack[] toOutput) { + if (Arrays.stream(toOutput) + .anyMatch(this::isPollutionFluid)) { + return filterValidMTEs(mPollutionOutputHatches); + } + return filterValidMTEs(mOutputHatches); + } + + /** + * @return 100 -> all released to air, 0 -> all dumped to hatch + */ + public int getPollutionReduction() { + int reduction = 100; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + reduction = Math.min(tHatch.calculatePollutionReduction(100), reduction); + } + return reduction; + } + + protected void multiplyPollutionFluidAmount(@Nonnull FluidStack fluid) { + fluid.amount = fluid.amount * Math.min(100 - getPollutionReduction(), 100) / 100; + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = getPollutionReduction(); + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + return new String[] { + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(-lEUt) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getMaxInputVoltage()) + + EnumChatFormatting.RESET + + " EU/t(*2A) " + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + VN[GTUtility.getTier(getMaxInputVoltage())] + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + StatCollector.translateToLocal("GT5U.EBF.heat") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mHeatingCapacity) + + EnumChatFormatting.RESET + + " K", + StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %" }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 3, 0, elementBudget, env, false, true); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + inputSeparation = !inputSeparation; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("isBussesSeparate")) { + // backward compatibility + inputSeparation = aNBT.getBoolean("isBussesSeparate"); + } + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEExtremeDieselEngine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEExtremeDieselEngine.java new file mode 100644 index 0000000000..8aba224e9c --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEExtremeDieselEngine.java @@ -0,0 +1,237 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EXTREME_DIESEL_ENGINE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.maps.FuelBackend; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEExtremeDieselEngine extends MTEDieselEngine { + + public MTEExtremeDieselEngine(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEExtremeDieselEngine(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Combustion Generator") + .addInfo("Controller block for the Extreme Combustion Engine") + .addInfo("Supply high rating fuel and 8000L of Lubricant per hour to run") + .addInfo("Supply 40L/s of Liquid Oxygen to boost output (optional)") + .addInfo("Default: Produces 10900EU/t at 100% fuel efficiency") + .addInfo("Boosted: Produces 32700EU/t at 150% fuel efficiency") + .addInfo("You need to wait for it to reach 300% to output full power") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 4, false) + .addController("Front center") + .addCasingInfoRange("Robust Tungstensteel Machine Casing", 16, 22, false) + .addOtherStructurePart("Titanium Gear Box Machine Casing", "Inner 2 blocks") + .addOtherStructurePart("Extreme Engine Intake Machine Casing", "8x, ring around controller") + .addStructureInfo("Extreme Engine Intake Casings must not be obstructed in front (only air blocks)") + .addDynamoHatch("Back center", 2) + .addMaintenanceHatch("One of the casings next to a Gear Box", 1) + .addMufflerHatch("Top middle back, above the rear Gear Box", 1) + .addInputHatch("HOG, next to a Gear Box", 1) + .addInputHatch("Lubricant, next to a Gear Box", 1) + .addInputHatch("Liquid Oxygen, optional, next to a Gear Box", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.extremeDieselFuels; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { casingTexturePages[0][60], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][60], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_EXTREME_DIESEL_ENGINE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_EXTREME_DIESEL_ENGINE_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][60] }; + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public byte getCasingMeta() { + return 0; + } + + @Override + public Block getIntakeBlock() { + return GregTechAPI.sBlockCasings8; + } + + @Override + public byte getIntakeMeta() { + return 4; + } + + @Override + public Block getGearboxBlock() { + return GregTechAPI.sBlockCasings2; + } + + @Override + public byte getGearboxMeta() { + return 4; + } + + @Override + public byte getCasingTextureIndex() { + return 60; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEExtremeDieselEngine(this.mName); + } + + @Override + protected int getNominalOutput() { + return 10900; + } + + @Override + protected int getBoostFactor() { + return 2; + } + + @Override + protected Materials getBooster() { + return Materials.LiquidOxygen; + } + + @Override + protected int getAdditiveFactor() { + return 1; + } + + @Override + protected int getEfficiencyIncrease() { + return 20; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return boostEu ? 30000 : 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTMod.gregtechproxy.mPollutionExtremeCombustionEnginePerSecond; + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = 0; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); + } + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchDynamo tHatch : filterValidMTEs(mDynamoHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + return new String[] { EnumChatFormatting.BLUE + "Extreme Diesel Engine" + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + getIdealStatus() == getRepairStatus() + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.engine.output") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers((long) -mEUt * mEfficiency / 10000) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("GT5U.engine.consumption") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(fuelConsumption) + + EnumChatFormatting.RESET + + " L/t", + StatCollector.translateToLocal("GT5U.engine.value") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(fuelValue) + + EnumChatFormatting.RESET + + " EU/L", + StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " + + EnumChatFormatting.GOLD + + GTUtility.formatNumbers(fuelRemaining) + + EnumChatFormatting.RESET + + " L", + StatCollector.translateToLocal("GT5U.engine.efficiency") + ": " + + EnumChatFormatting.YELLOW + + (mEfficiency / 100F) + + EnumChatFormatting.YELLOW + + " %", + StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %" }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer.java new file mode 100644 index 0000000000..4527436285 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer.java @@ -0,0 +1,673 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.filterByMTETier; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.Set; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableMap; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.enums.VoidingMode; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IOverclockDescriptionProvider; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.overclockdescriber.FusionOverclockDescriber; +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.ParallelHelper; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.tileentities.machines.multi.drone.MTEHatchDroneDownLink; + +public abstract class MTEFusionComputer extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable, IAddUIWidgets, IOverclockDescriptionProvider { + + private final OverclockDescriber overclockDescriber; + + public static final String STRUCTURE_PIECE_MAIN = "main"; + private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { + + @Override + protected IStructureDefinition computeValue(Class type) { + return StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { + { " ", " ihi ", " hh hh ", " h h ", + " h h ", " h h ", " i i ", " h h ", + " i i ", " h h ", " h h ", " h h ", + " hh hh ", " ihi ", " ", }, + { " xhx ", " hhccchh ", " eccxdxcce ", " eceh hece ", + " hce ech ", " hch hch ", "xcx xcx", "hch hch", + "xcx xcx", " hch hch ", " hce ech ", " eceh hece ", + " eccx~xcce ", " hhccchh ", " xhx ", }, + { " ", " ihi ", " hh hh ", " h h ", + " h h ", " h h ", " i i ", " h h ", + " i i ", " h h ", " h h ", " h h ", + " hh hh ", " ihi ", " ", } })) + .addElement('c', lazy(t -> ofBlock(t.getFusionCoil(), t.getFusionCoilMeta()))) + .addElement('h', lazy(t -> ofBlock(t.getCasing(), t.getCasingMeta()))) + .addElement( + 'i', + lazy( + t -> buildHatchAdder(MTEFusionComputer.class) + .atLeast(ImmutableMap.of(InputHatch.withAdder(MTEFusionComputer::addInjector), 1)) + .hatchItemFilterAnd(t2 -> filterByMTETier(t2.tier(), Integer.MAX_VALUE)) + .casingIndex(53) + .dot(1) + .buildAndChain(t.getCasing(), t.getCasingMeta()))) + .addElement( + 'e', + lazy( + t -> buildHatchAdder(MTEFusionComputer.class) + .atLeast(ImmutableMap.of(Energy.withAdder(MTEFusionComputer::addEnergyInjector), 16)) + .hatchItemFilterAnd(t2 -> filterByMTETier(t2.tier(), Integer.MAX_VALUE)) + .casingIndex(53) + .dot(2) + .buildAndChain(t.getCasing(), t.getCasingMeta()))) + .addElement( + 'x', + lazy( + t -> buildHatchAdder(MTEFusionComputer.class) + .atLeast(OutputHatch.withAdder(MTEFusionComputer::addExtractor)) + .hatchItemFilterAnd(t2 -> filterByMTETier(t2.tier(), Integer.MAX_VALUE)) + .casingIndex(53) + .dot(3) + .buildAndChain(t.getCasing(), t.getCasingMeta()))) + .addElement( + 'd', + lazy( + t -> buildHatchAdder(MTEFusionComputer.class).adder(MTEFusionComputer::addDroneHatch) + .hatchId(9401) + .casingIndex(53) + .dot(4) + .buildAndChain(t.getCasing(), t.getCasingMeta()))) + .build(); + } + }; + public GTRecipe mLastRecipe; + public long mEUStore; + + static { + Textures.BlockIcons.setCasingTextureForId( + 52, + TextureFactory.of( + TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS_YELLOW_GLOW) + .extFacing() + .glow() + .build())); + } + + public MTEFusionComputer(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + this.overclockDescriber = createOverclockDescriber(); + } + + public MTEFusionComputer(String aName) { + super(aName); + this.overclockDescriber = createOverclockDescriber(); + } + + protected OverclockDescriber createOverclockDescriber() { + return new FusionOverclockDescriber((byte) tier(), capableStartupCanonical()); + } + + @Nonnull + @Override + public OverclockDescriber getOverclockDescriber() { + return overclockDescriber; + } + + public abstract int tier(); + + @Override + public abstract long maxEUStore(); + + /** + * Unlike {@link #maxEUStore()}, this provides theoretical limit of startup EU, without considering the amount of + * hatches nor the room for extra energy. Intended for simulation. + */ + public abstract long capableStartupCanonical(); + + @Override + public abstract MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity); + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { + + return side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (mEUt > 0) { + mEUt = -mEUt; + } + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addController("Fusion Reactor") + .addInfo("Some kind of fusion reactor, maybe") + .addSeparator() + .addInfo("Some kind of fusion reactor, maybe") + .addStructureInfo("Should probably be built similar to other fusions") + .addStructureInfo("See controller tooltip for details") + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return checkPiece(STRUCTURE_PIECE_MAIN, 7, 1, 12) && !mOutputHatches.isEmpty() && !mEnergyHatches.isEmpty(); + } + + private boolean addEnergyInjector(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (!(aMetaTileEntity instanceof MTEHatchEnergy tHatch)) return false; + if (tHatch.mTier < tier()) return false; + tHatch.updateTexture(aBaseCasingIndex); + return mEnergyHatches.add(tHatch); + } + + private boolean addInjector(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (!(aMetaTileEntity instanceof MTEHatchInput tHatch)) return false; + if (tHatch.getTierForStructure() < tier()) return false; + tHatch.updateTexture(aBaseCasingIndex); + tHatch.mRecipeMap = getRecipeMap(); + return mInputHatches.add(tHatch); + } + + private boolean addExtractor(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + if (aBaseMetaTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (!(aMetaTileEntity instanceof MTEHatchOutput tHatch)) return false; + if (tHatch.getTierForStructure() < tier()) return false; + tHatch.updateTexture(aBaseCasingIndex); + return mOutputHatches.add(tHatch); + } + + private boolean addDroneHatch(IGregTechTileEntity aBaseMetaTileEntity, int aBaseCasingIndex) { + if (aBaseMetaTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aBaseMetaTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (!(aMetaTileEntity instanceof MTEHatchDroneDownLink tHatch)) return false; + tHatch.updateTexture(aBaseCasingIndex); + return addToMachineList(aBaseMetaTileEntity, aBaseCasingIndex); + } + + public abstract Block getCasing(); + + public abstract int getCasingMeta(); + + public abstract Block getFusionCoil(); + + public abstract int getFusionCoilMeta(); + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS) + .extFacing() + .build(), getTextureOverlay() }; + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(52) }; + return new ITexture[] { TextureFactory.builder() + .addIcon(MACHINE_CASING_FUSION_GLASS) + .extFacing() + .build() }; + } + + /** + * @return The list of textures overlay + */ + public abstract ITexture getTextureOverlay(); + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.fusionRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected ParallelHelper createParallelHelper(@NotNull GTRecipe recipe) { + // When the fusion first loads and is still processing, it does the recipe check without consuming. + return super.createParallelHelper(recipe).setConsumption(!mRunningOnLoad); + } + + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return overclockDescriber.createCalculator(super.createOverclockCalculator(recipe), recipe); + } + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (!mRunningOnLoad && recipe.mSpecialValue > maxEUStore()) { + return CheckRecipeResultRegistry.insufficientStartupPower(recipe.mSpecialValue); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + public CheckRecipeResult process() { + CheckRecipeResult result = super.process(); + if (mRunningOnLoad) mRunningOnLoad = false; + turnCasingActive(result.wasSuccessful()); + if (result.wasSuccessful()) { + mLastRecipe = lastRecipe; + } else { + mLastRecipe = null; + } + return result; + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTValues.V[tier()]); + logic.setAvailableAmperage(1); + logic.setAmperageOC(false); + } + + public boolean turnCasingActive(boolean status) { + if (this.mEnergyHatches != null) { + for (MTEHatchEnergy hatch : this.mEnergyHatches) { + hatch.updateTexture(status ? 52 : 53); + } + } + if (this.mOutputHatches != null) { + for (MTEHatchOutput hatch : this.mOutputHatches) { + hatch.updateTexture(status ? 52 : 53); + } + } + if (this.mInputHatches != null) { + for (MTEHatchInput hatch : this.mInputHatches) { + hatch.updateTexture(status ? 52 : 53); + } + } + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + mTotalRunTime++; + if (mEfficiency < 0) mEfficiency = 0; + if (mRunningOnLoad && checkMachine(aBaseMetaTileEntity, mInventory[1])) { + this.mEUStore = aBaseMetaTileEntity.getStoredEU(); + checkRecipe(); + } + if (mUpdated) { + mUpdate = 50; + mUpdated = false; + } + if (--mUpdate == 0 || --mStartUpCheck == 0) { + checkStructure(true, aBaseMetaTileEntity); + } + if (mStartUpCheck < 0) { + if (mMachine) { + this.mEUStore = aBaseMetaTileEntity.getStoredEU(); + if (this.mEnergyHatches != null) { + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + long energyToMove = GTValues.V[tier()] / 16; + if (aBaseMetaTileEntity.getStoredEU() + energyToMove < maxEUStore() + && tHatch.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(energyToMove, false)) { + aBaseMetaTileEntity.increaseStoredEnergyUnits(energyToMove, true); + } + } + } + if (this.mEUStore <= 0 && mMaxProgresstime > 0) { + stopMachine(ShutDownReasonRegistry.POWER_LOSS); + } + if (mMaxProgresstime > 0) { + this.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(-mEUt, true); + if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) { + if (mOutputItems != null) + for (ItemStack tStack : mOutputItems) if (tStack != null) addOutput(tStack); + if (mOutputFluids != null) + for (FluidStack tStack : mOutputFluids) if (tStack != null) addOutput(tStack); + mEfficiency = Math + .max(0, Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]))); + mOutputItems = null; + mProgresstime = 0; + mMaxProgresstime = 0; + mEfficiencyIncrease = 0; + if (mOutputFluids != null && mOutputFluids.length > 0) { + try { + GTMod.achievements.issueAchivementHatchFluid( + aBaseMetaTileEntity.getWorld() + .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), + mOutputFluids[0]); + } catch (Exception ignored) {} + } + this.mEUStore = aBaseMetaTileEntity.getStoredEU(); + if (aBaseMetaTileEntity.isAllowedToWork()) checkRecipe(); + } + } else { + if (aTick % 100 == 0 || aBaseMetaTileEntity.hasWorkJustBeenEnabled() + || aBaseMetaTileEntity.hasInventoryBeenModified()) { + turnCasingActive(mMaxProgresstime > 0); + if (aBaseMetaTileEntity.isAllowedToWork()) { + this.mEUStore = aBaseMetaTileEntity.getStoredEU(); + if (checkRecipe()) { + if (this.mEUStore < this.mLastRecipe.mSpecialValue + this.mEUt) { + stopMachine(ShutDownReasonRegistry.POWER_LOSS); + } + aBaseMetaTileEntity + .decreaseStoredEnergyUnits(this.mLastRecipe.mSpecialValue + this.mEUt, true); + } + } + if (mMaxProgresstime <= 0) mEfficiency = Math.max(0, mEfficiency - 1000); + } + } + } else if (aBaseMetaTileEntity.isAllowedToWork()) { + this.mLastRecipe = null; + stopMachine(ShutDownReasonRegistry.STRUCTURE_INCOMPLETE); + } + } + aBaseMetaTileEntity + .setErrorDisplayID((aBaseMetaTileEntity.getErrorDisplayID() & ~127) | (mMachine ? 0 : 64)); + aBaseMetaTileEntity.setActive(mMaxProgresstime > 0); + } else { + doActivitySound(getActivitySoundLoop()); + } + } + + @Override + public boolean drainEnergyInput(long aEU) { + return false; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public void stopMachine(@NotNull ShutDownReason reason) { + super.stopMachine(reason); + turnCasingActive(false); + } + + @Override + public String[] getInfoData() { + String tier = tier() == 6 ? EnumChatFormatting.RED + "I" + EnumChatFormatting.RESET + : tier() == 7 ? EnumChatFormatting.YELLOW + "II" + EnumChatFormatting.RESET + : tier() == 8 ? EnumChatFormatting.GRAY + "III" + EnumChatFormatting.RESET : "IV"; + float plasmaOut = 0; + int powerRequired = 0; + if (this.mLastRecipe != null) { + powerRequired = this.mLastRecipe.mEUt; + if (this.mLastRecipe.getFluidOutput(0) != null) { + plasmaOut = (float) this.mLastRecipe.getFluidOutput(0).amount / (float) this.mLastRecipe.mDuration; + } + } + + return new String[] { EnumChatFormatting.BLUE + "Fusion Reactor MK " + EnumChatFormatting.RESET + tier, + StatCollector.translateToLocal("GT5U.fusion.req") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(powerRequired) + + EnumChatFormatting.RESET + + "EU/t", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mEUStore) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEUStore()) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.fusion.plasma") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(plasmaOut) + + EnumChatFormatting.RESET + + "L/t" }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 7, 1, 12); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 7, 1, 12, elementBudget, env, false, true); + } + + @SideOnly(Side.CLIENT) + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_FUSION_LOOP.resourceLocation; + } + + @Override + public boolean doesBindPlayerInventory() { + return false; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) + .setSize(17, 17) + .setPos(155, 145)); + } + + @Override + public GUITextureSet getGUITextureSet() { + return new GUITextureSet().setMainBackground(GTUITextures.BACKGROUND_FUSION_COMPUTER); + } + + @Override + public int getGUIWidth() { + return 176; + } + + @Override + public int getGUIHeight() { + return 166; + } + + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + protected long clientEU; + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder + .widget( + new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> !mMachine) + .setPos(10, 8)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val)) + .widget( + new TextWidget("Hit with Soft Mallet to (re-)start the Machine if it doesn't start.") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setTextAlignment(Alignment.Center) + .setEnabled( + widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 + && !getBaseMetaTileEntity().isActive()) + .setPos(-getGUIWidth() / 2, 170) + .setSize(getGUIWidth() * 2, 9)) + .widget( + new FakeSyncWidget.IntegerSyncer( + () -> getBaseMetaTileEntity().getErrorDisplayID(), + val -> getBaseMetaTileEntity().setErrorDisplayID(val))) + .widget( + new FakeSyncWidget.BooleanSyncer( + () -> getBaseMetaTileEntity().isActive(), + val -> getBaseMetaTileEntity().setActive(val))) + .widget( + new TextWidget("Running perfectly.").setDefaultColor(COLOR_TEXT_WHITE.get()) + .setTextAlignment(Alignment.Center) + .setEnabled( + widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 + && getBaseMetaTileEntity().isActive()) + .setPos(0, 170) + .setSize(getGUIWidth(), 9)) + .widget( + new FakeSyncWidget.IntegerSyncer( + () -> getBaseMetaTileEntity().getErrorDisplayID(), + val -> getBaseMetaTileEntity().setErrorDisplayID(val))) + .widget( + new ProgressBar() + .setProgress( + () -> (float) getBaseMetaTileEntity().getStoredEU() / getBaseMetaTileEntity().getEUCapacity()) + .setDirection(ProgressBar.Direction.RIGHT) + .setTexture(GTUITextures.PROGRESSBAR_STORED_EU, 147) + .setPos(5, 156) + .setSize(147, 5)) + .widget(new TextWidget().setStringSupplier(() -> { + if (clientEU > 160_000_000L && clientEU < 160_010_000L) { + clientEU = 160_000_000L; + } + if (clientEU > 320_000_000L && clientEU < 320_010_000L) { + clientEU = 320_000_000L; + } + if (clientEU > 640_000_000L && clientEU < 640_010_000L) { + clientEU = 640_000_000L; + } + if (clientEU > 5_120_000_000L && clientEU < 5_120_080_000L) { + clientEU = 5_120_000_000L; + } + return numberFormat.format(clientEU) + " EU"; + }) + .setDefaultColor(COLOR_TEXT_RED.get()) + .setTextAlignment(Alignment.Center) + .setScale(0.5f) + .setPos(5, 157) + .setSize(147, 5)) + .widget(new FakeSyncWidget.LongSyncer(() -> getBaseMetaTileEntity().getStoredEU(), val -> clientEU = val)) + .widget( + new ButtonWidget().setNEITransferRect( + RecipeMaps.fusionRecipes.getFrontend() + .getUIProperties().neiTransferRectId) + .setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_NEI) + .setPos(154, 4) + .setSize(18, 18)); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public Set getAllowedVoidingModes() { + return VoidingMode.FLUID_ONLY_MODES; + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer1.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer1.java new file mode 100644 index 0000000000..e0976106e5 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer1.java @@ -0,0 +1,103 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW; + +import net.minecraft.block.Block; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEFusionComputer1 extends MTEFusionComputer { + + private static final ITexture textureOverlay = TextureFactory.of( + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1_GLOW) + .extFacing() + .glow() + .build()); + + public MTEFusionComputer1(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEFusionComputer1(String aName) { + super(aName); + } + + @Override + public int tier() { + return 6; + } + + @Override + public long maxEUStore() { + return 160003000L * (Math.min(16, this.mEnergyHatches.size())) / 16L; + } + + @Override + public long capableStartupCanonical() { + return 160_000_000; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEFusionComputer1(mName); + } + + @Override + public Block getCasing() { + return GregTechAPI.sBlockCasings1; + } + + @Override + public int getCasingMeta() { + return 6; + } + + @Override + public Block getFusionCoil() { + return GregTechAPI.sBlockCasings1; + } + + @Override + public int getFusionCoilMeta() { + return 15; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fusion Reactor") + .addInfo("It's over 9000!!!") + .addInfo("Controller block for the Fusion Reactor Mk I") + .addInfo("2048EU/t and 10M EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addSeparator() + .beginStructureBlock(15, 3, 15, false) + .addController("See diagram when placed") + .addCasingInfoRange("LuV Machine Casing", 79, 123, false) + .addStructureInfo("Cover the coils with casing") + .addOtherStructurePart("Superconducting Coil Block", "Center part of the ring") + .addEnergyHatch("1-16, Specified casings", 2) + .addInputHatch("2-16, Specified casings", 1) + .addOutputHatch("1-16, Specified casings", 3) + .addStructureInfo("ALL Hatches must be LuV or better") + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture getTextureOverlay() { + return textureOverlay; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer2.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer2.java new file mode 100644 index 0000000000..ee67b74bf8 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer2.java @@ -0,0 +1,103 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION2_GLOW; + +import net.minecraft.block.Block; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEFusionComputer2 extends MTEFusionComputer { + + private static final ITexture textureOverlay = TextureFactory.of( + TextureFactory.builder() + .addIcon(OVERLAY_FUSION2) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION2_GLOW) + .extFacing() + .glow() + .build()); + + public MTEFusionComputer2(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEFusionComputer2(String aName) { + super(aName); + } + + @Override + public int tier() { + return 7; + } + + @Override + public long maxEUStore() { + return 320006000L * (Math.min(16, this.mEnergyHatches.size())) / 16L; + } + + @Override + public long capableStartupCanonical() { + return 320_000_000; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEFusionComputer2(mName); + } + + @Override + public Block getCasing() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public int getCasingMeta() { + return 6; + } + + @Override + public Block getFusionCoil() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public int getFusionCoilMeta() { + return 7; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fusion Reactor") + .addInfo("It's over 9000!!!") + .addInfo("Controller block for the Fusion Reactor Mk II") + .addInfo("8192EU/t and 20M EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addSeparator() + .beginStructureBlock(15, 3, 15, false) + .addController("See diagram when placed") + .addCasingInfoRange("Fusion Machine Casing", 79, 123, false) + .addStructureInfo("Cover the coils with casing") + .addOtherStructurePart("Fusion Coil Block", "Center part of the ring") + .addEnergyHatch("1-16, Specified casings", 2) + .addInputHatch("2-16, Specified casings", 1) + .addOutputHatch("1-16, Specified casings", 3) + .addStructureInfo("ALL Hatches must be ZPM or better") + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture getTextureOverlay() { + return textureOverlay; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer3.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer3.java new file mode 100644 index 0000000000..3e4f431351 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEFusionComputer3.java @@ -0,0 +1,103 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION3_GLOW; + +import net.minecraft.block.Block; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEFusionComputer3 extends MTEFusionComputer { + + private static final ITexture textureOverlay = TextureFactory.of( + TextureFactory.builder() + .addIcon(OVERLAY_FUSION3) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION3_GLOW) + .extFacing() + .glow() + .build()); + + public MTEFusionComputer3(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEFusionComputer3(String aName) { + super(aName); + } + + @Override + public int tier() { + return 8; + } + + @Override + public long maxEUStore() { + return 640010000L * (Math.min(16, this.mEnergyHatches.size())) / 16L; + } + + @Override + public long capableStartupCanonical() { + return 640_000_000; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEFusionComputer3(mName); + } + + @Override + public Block getCasing() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public int getCasingMeta() { + return 8; + } + + @Override + public Block getFusionCoil() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public int getFusionCoilMeta() { + return 7; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fusion Reactor") + .addInfo("A SUN DOWN ON EARTH") + .addInfo("Controller block for the Fusion Reactor Mk III") + .addInfo("32768EU/t and 40M EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addSeparator() + .beginStructureBlock(15, 3, 15, false) + .addController("See diagram when placed") + .addCasingInfoRange("Fusion Machine Casing Mk II", 79, 123, false) + .addStructureInfo("Cover the coils with casing") + .addOtherStructurePart("Fusion Coil Block", "Center part of the ring") + .addEnergyHatch("1-16, Specified casings", 2) + .addInputHatch("2-16, Specified casings", 1) + .addOutputHatch("1-16, Specified casings", 3) + .addStructureInfo("ALL Hatches must be UV or better") + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture getTextureOverlay() { + return textureOverlay; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEHeatExchanger.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEHeatExchanger.java new file mode 100644 index 0000000000..fb90f1acc4 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEHeatExchanger.java @@ -0,0 +1,396 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.registries.LHECoolantRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEHeatExchanger extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { + + private int dryHeatCounter = 0; // Counts up to dryHeatMaximum to check for explosion conditions + private static final int dryHeatMaximum = 2000; // 2000 ticks = 100 seconds + private static final int CASING_INDEX = 50; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { "ccc", "cCc", "ccc" }, { "ccc", "cPc", "ccc" }, { "ccc", "cPc", "ccc" }, + { "c~c", "cHc", "ccc" }, })) + .addElement('P', ofBlock(GregTechAPI.sBlockCasings2, 14)) + .addElement( + 'C', + OutputHatch.withAdder(MTEHeatExchanger::addColdFluidOutputToMachineList) + .withCount(t -> t.mOutputColdFluidHatch.isValid() ? 1 : 0) + .newAny(CASING_INDEX, 3)) + .addElement( + 'H', + InputHatch.withAdder(MTEHeatExchanger::addHotFluidInputToMachineList) + .withCount(t -> t.mInputHotFluidHatch.isValid() ? 1 : 0) + .newAny(CASING_INDEX, 3)) + .addElement( + 'c', + buildHatchAdder(MTEHeatExchanger.class).atLeast(InputBus, InputHatch, OutputBus, OutputHatch, Maintenance) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain( + onElementPass(MTEHeatExchanger::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings4, (byte) 2)))) + .build(); + public static float penalty_per_config = 0.015f; // penalize 1.5% efficiency per circuitry level (1-25) + + private MTEHatchInput mInputHotFluidHatch; + private MTEHatchOutput mOutputColdFluidHatch; + private boolean superheated = false; + private int superheated_threshold = 0; + /** + * How much more steam we can make without draining real water. Unit is (1L/GT_Values.STEAM_PER_WATER) + */ + private int steamBudget; + + private int mCasingAmount; + + public MTEHeatExchanger(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEHeatExchanger(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Heat Exchanger") + .addInfo("Controller Block for the Large Heat Exchanger") + .addInfo("More complicated than a Fusion Reactor. Seriously") + .addInfo("Inputs are Hot Coolant or Lava") + .addInfo("Outputs Coolant or Pahoehoe Lava and SH Steam/Steam") + .addInfo("Read the wiki article to understand how it works") + .addInfo("Then go to the Discord to understand the wiki") + .addSeparator() + .beginStructureBlock(3, 4, 3, false) + .addController("Front bottom") + .addCasingInfoRange("Stable Titanium Machine Casing", 20, 32, false) + .addOtherStructurePart("Titanium Pipe Casing", "Center 2 blocks") + .addMaintenanceHatch("Any casing", 1) + .addInputHatch("Hot fluid, bottom center", 2) + .addInputHatch("Distilled water, any casing", 1) + .addOutputHatch("Cold fluid, top center", 3) + .addOutputHatch("Steam/SH Steam, any casing", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + superheated = aNBT.getBoolean("superheated"); + steamBudget = aNBT.getInteger("steamBudget"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setBoolean("superheated", superheated); + aNBT.setInteger("steamBudget", steamBudget); + super.saveNBTData(aNBT); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> !r.isUpsideDown() && !f.isVerticallyFliped(); + } + + @Override + @Nonnull + public CheckRecipeResult checkProcessing() { + if (mInputHotFluidHatch.getFluid() == null) return CheckRecipeResultRegistry.NO_RECIPE; + + int fluidAmountToConsume = mInputHotFluidHatch.getFluidAmount(); // how much fluid is in hatch + + superheated_threshold = 4000; // default: must have 4000L per second to generate superheated steam + float efficiency = 1f; // default: operate at 100% efficiency with no integrated circuitry + int shs_reduction_per_config = 150; // reduce threshold 150L/s per circuitry level (1-25) + float steam_output_multiplier = 20f; // default: multiply output by 4 * 10 (boosted x5) + float penalty = 0.0f; // penalty to apply to output based on circuitry level (1-25). + + // Do we have an integrated circuit with a valid configuration? + if (mInventory[1] != null && mInventory[1].getUnlocalizedName() + .startsWith("gt.integrated_circuit")) { + int circuit_config = mInventory[1].getItemDamage(); + if (circuit_config >= 1 && circuit_config <= 25) { + // If so, apply the penalty and reduce the threshold. + penalty = (circuit_config - 1) * penalty_per_config; + superheated_threshold -= shs_reduction_per_config * (circuit_config - 1); + } + } + + efficiency -= penalty; + + var coolant = LHECoolantRegistry.getCoolant( + mInputHotFluidHatch.getFluid() + .getFluid()); + + if (coolant == null) { + superheated_threshold = 0; + return CheckRecipeResultRegistry.NO_RECIPE; + } else { + steam_output_multiplier *= coolant.steamMultiplier; + superheated_threshold *= coolant.superheatedThreshold; + } + + // set the internal superheated flag if we have + // enough hot fluid. Used in the onRunningTick method. + superheated = fluidAmountToConsume >= superheated_threshold; + + // Don't consume too much hot fluid per second + fluidAmountToConsume = Math.min(fluidAmountToConsume, superheated_threshold * 2); + + mInputHotFluidHatch.drain(fluidAmountToConsume, true); + mOutputColdFluidHatch.fill(coolant.getColdFluid(fluidAmountToConsume), true); + + this.mMaxProgresstime = 20; + this.mEUt = (int) (fluidAmountToConsume * steam_output_multiplier * efficiency); + this.mEfficiencyIncrease = 80; + + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + private int useWater(int steam) { + steamBudget -= steam; + int usage = -Math.min(0, Math.floorDiv(steamBudget, GTValues.STEAM_PER_WATER)); + // still subtract, because usage will be a negative number + steamBudget += usage * GTValues.STEAM_PER_WATER; + return usage; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (this.mEUt > 0) { + int tGeneratedEU = (int) (this.mEUt * 2L * this.mEfficiency / 10000L); // APPROXIMATELY how much steam to + // generate. + if (tGeneratedEU > 0) { + + if (superheated) tGeneratedEU /= 2; // We produce half as much superheated steam if necessary + + int distilledConsumed = useWater(tGeneratedEU); // how much distilled water to consume + // tGeneratedEU = distilledConsumed * 160; // EXACTLY how much steam to generate, producing a perfect + // 1:160 ratio with distilled water consumption + + FluidStack distilledStack = GTModHandler.getDistilledWater(distilledConsumed); + startRecipeProcessing(); + if (depleteInput(distilledStack)) // Consume the distilled water + { + if (superheated) { + addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", tGeneratedEU)); // Generate + // superheated + // steam + } else { + addOutput(GTModHandler.getSteam(tGeneratedEU)); // Generate regular steam + } + dryHeatCounter = 0; + } else { + if (dryHeatCounter < dryHeatMaximum) { + dryHeatCounter += 1; + } else { + GTLog.exp.println(this.mName + " was too hot and had no more Distilled Water!"); + explodeMultiblock(); // Generate crater + } + } + endRecipeProcessing(); + } + return true; + } + return true; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mOutputColdFluidHatch = null; + mInputHotFluidHatch = null; + mCasingAmount = 0; + return checkPiece(STRUCTURE_PIECE_MAIN, 1, 3, 0) && mCasingAmount >= 20 && mMaintenanceHatches.size() == 1; + } + + public boolean addColdFluidOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchOutput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + mOutputColdFluidHatch = (MTEHatchOutput) aMetaTileEntity; + return true; + } + return false; + } + + public boolean addHotFluidInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = getRecipeMap(); + mInputHotFluidHatch = (MTEHatchInput) aMetaTileEntity; + return true; + } + return false; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHeatExchanger(this.mName); + } + + @Override + public String[] getInfoData() { + return new String[] { + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + StatCollector.translateToLocal("GT5U.multiblock.usage") + " " + + StatCollector.translateToLocal("GT5U.LHE.steam") + + ": " + + (superheated ? EnumChatFormatting.RED : EnumChatFormatting.YELLOW) + + GTUtility.formatNumbers(superheated ? -2L * mEUt : -mEUt) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + StatCollector.translateToLocal("GT5U.LHE.superheated") + ": " + + (superheated ? EnumChatFormatting.RED : EnumChatFormatting.BLUE) + + superheated + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.LHE.superheated") + " " + + StatCollector.translateToLocal("GT5U.LHE.threshold") + + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(superheated_threshold) + + EnumChatFormatting.RESET }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 3, 0, elementBudget, env, false, true); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEImplosionCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEImplosionCompressor.java new file mode 100644 index 0000000000..a9c96266da --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEImplosionCompressor.java @@ -0,0 +1,162 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_IMPLOSION_COMPRESSOR_GLOW; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.structure.IStructureElement; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTECubicMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEImplosionCompressor extends MTECubicMultiBlockBase { + + public MTEImplosionCompressor(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEImplosionCompressor(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEImplosionCompressor(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Implosion Compressor") + .addInfo("Explosions are fun") + .addInfo("Controller block for the Implosion Compressor") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front center") + .addCasingInfoRange("Solid Steel Machine Casing", 16, 24, false) + .addStructureInfo("Casings can be replaced with Explosion Warning Signs") + .addEnergyHatch("Any casing", 1) + .addMaintenanceHatch("Any casing", 1) + .addMufflerHatch("Any casing", 1) + .addInputBus("Any casing", 1) + .addOutputBus("Any casing", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + return super.addToMachineList(aTileEntity, aBaseCasingIndex) + || addMufflerToMachineList(aTileEntity, aBaseCasingIndex); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { BlockIcons.casingTexturePages[0][16], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { BlockIcons.casingTexturePages[0][16], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_IMPLOSION_COMPRESSOR_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][16] }; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.implosionRecipes; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic(); + } + + @Override + protected int getTimeBetweenProcessSounds() { + return 10; + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.RANDOM_EXPLODE; + } + + @Override + protected IStructureElement> getCasingElement() { + return ofChain(ofBlock(GregTechAPI.sBlockCasings2, 0), ofBlock(GregTechAPI.sBlockCasings3, 4)); + } + + @Override + protected int getHatchTextureIndex() { + return 16; + } + + @Override + protected int getRequiredCasingCount() { + return 16; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTMod.gregtechproxy.mPollutionImplosionCompressorPerSecond; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java new file mode 100644 index 0000000000..20b3ce4b32 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialElectromagneticSeparator.java @@ -0,0 +1,465 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.GTValues.AuthorFourIsTheNumber; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EMS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EMS_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EMS_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_EMS_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchMagnet; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.blocks.BlockCasings10; +import gregtech.common.items.MetaGeneratedItem01; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEIndustrialElectromagneticSeparator + extends MTEExtendedPowerMultiBlockBase implements ISurvivalConstructable { + + public enum MagnetTiers { + + Iron(8, 0.8F, 1.1F, false), + Steel(24, 0.75F, 1.25F, false), + Neodymium(48, 0.7F, 1.5F, false), + Samarium(96, 0.6F, 2F, false), + Tengam(256, 0.5F, 2.5F, true); + + final int maxParallel; + final float euModifier, speedBoost; + final boolean supportsExotic; + + MagnetTiers(int maxParallel, float euModifier, float speedBoost, boolean supportsExotic) { + this.maxParallel = maxParallel; + this.euModifier = euModifier; + this.speedBoost = 1F / speedBoost; + this.supportsExotic = supportsExotic; + } + + public static String buildMagnetTooltip(MagnetTiers m) { + String tooltip = "Used in Magnetic Flux Exhibitor/n " + EnumChatFormatting.LIGHT_PURPLE + + "Speed: +" + + Math.round((1F / m.speedBoost * 100) - 100) + + "%/n " + + EnumChatFormatting.DARK_PURPLE + + "EU Usage: " + + Math.round(m.euModifier * 100) + + "%/n " + + EnumChatFormatting.AQUA + + "Parallel: " + + m.maxParallel; + + if (m.supportsExotic) tooltip = tooltip + "/n " + + EnumChatFormatting.BOLD + + EnumChatFormatting.GREEN + + "Can Use Multiamp Hatches"; + + return tooltip; + } + } + + final int MIN_CASING = 64; + private MTEHatchMagnet mMagHatch = null; + private MagnetTiers magnetTier = null; + + private static final int MACHINEMODE_SEPARATOR = 0; + private static final int MACHINEMODE_POLARIZER = 1; + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + (new String[][] { { " CCC ", " ", " ", " ", " ", " B~B " }, + { " CC CC ", " ", " BBB ", " AAA ", " BEB ", " BBBBB " }, + { "CC CC", " ", " BBBBB ", " A A ", " BBBBB ", "BBBBBBB" }, + { "C C", "C C", "CBBBBBC", "CA C AC", "CBBBBBC", "BBBBBBB" }, + { "CC CC", " ", " BBBBB ", " A A ", " BBBBB ", "BBBBBBB" }, + { " CC CC ", " ", " BBB ", " AAA ", " BBB ", " BBBBB " }, + { " CCC ", " C ", " C ", " C ", " C ", " BBB " } })) + .addElement('A', Glasses.chainAllGlasses()) + .addElement( + 'B', + ofChain( + buildHatchAdder(MTEIndustrialElectromagneticSeparator.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy.or(ExoticEnergy)) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(0)) + .dot(1) + .buildAndChain( + onElementPass( + MTEIndustrialElectromagneticSeparator::onCasingAdded, + ofBlock(GregTechAPI.sBlockCasings10, 0))))) + .addElement('C', ofFrame(Materials.NeodymiumMagnetic)) + .addElement( + 'E', + buildHatchAdder(MTEIndustrialElectromagneticSeparator.class) + .adder(MTEIndustrialElectromagneticSeparator::addMagHatch) + .hatchClass(MTEHatchMagnet.class) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(0)) + .dot(2) + .build()) + .build(); + + public MTEIndustrialElectromagneticSeparator(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialElectromagneticSeparator(String aName) { + super(aName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEIndustrialElectromagneticSeparator(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (aActive) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 0)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_EMS_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_EMS_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 0)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_EMS) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_EMS_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 0)) }; + } + return rTexture; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Electromagnetic Separator/Polarizer") + .addInfo("Controller Block for the Magnetic Flux Exhibitor") + .addInfo("Use screwdriver to switch mode") + .addInfo("Insert an electromagnet into the electromagnet housing to use") + .addInfo("Better electromagnets give further bonuses") + .addInfo("With Tengam electromagnet, multiamp (NOT laser) hatches are allowed") + .addInfo( + AuthorFourIsTheNumber + EnumChatFormatting.GRAY + + " & " + + EnumChatFormatting.GOLD + + "Ba" + + EnumChatFormatting.LIGHT_PURPLE + + "ps") + .addSeparator() + .beginStructureBlock(7, 6, 7, false) + .addController("Front Center") + .addCasingInfoMin("MagTech Casings", MIN_CASING, false) + .addOtherStructurePart("Any glass", "x12") + .addOtherStructurePart("Magnetic Neodymium Frame Box", "x37") + .addOtherStructurePart("Electromagnet Housing", "1 Block Above/Behind Controller", 2) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 5, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 5, 0, elementBudget, env, false, true); + } + + private int mCasingAmount; + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + mMagHatch = null; + mExoticEnergyHatches.clear(); + mEnergyHatches.clear(); + + if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 5, 0)) return false; + if (mCasingAmount < MIN_CASING) return false; + if (mMagHatch == null) return false; + + // If there are exotic hatches, ensure there is only 1, and it is not laser. Only multiamp allowed + if (!mExoticEnergyHatches.isEmpty()) { + if (!mEnergyHatches.isEmpty()) return false; + if (mExoticEnergyHatches.size() > 1) return false; + if (mExoticEnergyHatches.get(0) + .maxWorkingAmperesIn() > 64) return false; + } + + // All checks passed! + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + findMagnet(); + if (magnetTier != null) { + if (!mExoticEnergyHatches.isEmpty() && !magnetTier.supportsExotic) + return SimpleCheckRecipeResult.ofFailure("electromagnet_insufficient"); + euModifier = magnetTier.euModifier; + speedBoost = magnetTier.speedBoost; + return CheckRecipeResultRegistry.SUCCESSFUL; + } + return SimpleCheckRecipeResult.ofFailure("electromagnet_missing"); + } + }.setMaxParallelSupplier(this::getMaxParallels); + } + + private int getMaxParallels() { + if (magnetTier != null) return magnetTier.maxParallel; + return 0; + } + + @Override + public RecipeMap getRecipeMap() { + return (machineMode == MACHINEMODE_POLARIZER) ? RecipeMaps.polarizerRecipes + : RecipeMaps.electroMagneticSeparatorRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(RecipeMaps.polarizerRecipes, RecipeMaps.electroMagneticSeparatorRecipes); + } + + @Override + public int getRecipeCatalystPriority() { + return -10; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (aNBT.hasKey("polarizerMode")) { + machineMode = aNBT.getBoolean("polarizerMode") ? MACHINEMODE_POLARIZER : MACHINEMODE_SEPARATOR; + aNBT.removeTag("polarizerMode"); + } + super.loadNBTData(aNBT); + } + + @Override + public boolean supportsMachineModeSwitch() { + return true; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + setMachineMode(nextMachineMode()); + PlayerUtils.messagePlayer( + aPlayer, + String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); + } + + @Override + public void setMachineModeIcons() { + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_SEPARATOR); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_POLARIZER); + } + + @Override + public String getMachineModeName() { + return StatCollector.translateToLocal("GT5U.INDUSTRIAL_ELECTROMAGNETIC_SEPARATOR.mode." + machineMode); + } + + @Override + public void clearHatches() { + super.clearHatches(); + mExoticEnergyHatches.clear(); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("mode", machineMode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector + .translateToLocal("GT5U.INDUSTRIAL_ELECTROMAGNETIC_SEPARATOR.mode." + tag.getInteger("mode")) + + EnumChatFormatting.RESET); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + // This fix works for normal energy hatches, preventing over-paralleling with 1 energy hatch + // However, it does not work with multiamp. MuTEs can't come soon enough. + + if (mExoticEnergyHatches.isEmpty()) { + logic.setAvailableVoltage(GTUtility.roundUpVoltage(this.getMaxInputVoltage())); + logic.setAvailableAmperage(1L); + } else super.setProcessingLogicPower(logic); + } + + private void findMagnet() { + magnetTier = null; + if (mMagHatch != null) { + ItemStack aSlot = mMagHatch.getStackInSlot(0); + if (aSlot != null) { + switch (aSlot.getItemDamage()) { + case 32345 -> magnetTier = MagnetTiers.Iron; + case 32346 -> magnetTier = MagnetTiers.Steel; + case 32347 -> magnetTier = MagnetTiers.Neodymium; + case 32348 -> magnetTier = MagnetTiers.Samarium; + case 32349 -> magnetTier = MagnetTiers.Tengam; + default -> magnetTier = null; + } + } + + } + } + + public static boolean isValidElectromagnet(ItemStack aMagnet) { + return aMagnet != null && aMagnet.getItem() instanceof MetaGeneratedItem01 + && aMagnet.getItemDamage() >= 32345 + && aMagnet.getItemDamage() <= 32349; + } + + private boolean addMagHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity != null) { + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchMagnet) { + ((MTEHatchMagnet) aMetaTileEntity).updateTexture(aBaseCasingIndex); + if (mMagHatch == null) { + mMagHatch = (MTEHatchMagnet) aMetaTileEntity; + return true; + } + } + } + return false; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialExtractor.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialExtractor.java new file mode 100644 index 0000000000..74d55d8e50 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialExtractor.java @@ -0,0 +1,289 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.GTValues.AuthorFourIsTheNumber; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.blocks.BlockCasings4; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEIndustrialExtractor extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + (new String[][] { { " A ", " BBB ", "AB~BA", " BBB " }, { " A ", " BBB ", "AB BA", " BBB " }, + { " A ", " BBB ", "AB BA", " BBB " }, { " A ", " BBB ", "ABBBA", " BBB " }, + { " A ", " A ", "AAAAA", " " } })) + .addElement( + 'B', + buildHatchAdder(MTEIndustrialExtractor.class).atLeast(InputBus, OutputBus, Maintenance, Energy) + .casingIndex(((BlockCasings4) GregTechAPI.sBlockCasings4).getTextureIndex(1)) + .dot(1) + .buildAndChain( + onElementPass(MTEIndustrialExtractor::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings4, 1)))) + .addElement( + 'A', + ofBlocksTiered( + MTEIndustrialExtractor::getItemPipeTierFromMeta, + ImmutableList.of( + Pair.of(GregTechAPI.sBlockCasings11, 0), + Pair.of(GregTechAPI.sBlockCasings11, 1), + Pair.of(GregTechAPI.sBlockCasings11, 2), + Pair.of(GregTechAPI.sBlockCasings11, 3), + Pair.of(GregTechAPI.sBlockCasings11, 4), + Pair.of(GregTechAPI.sBlockCasings11, 5), + Pair.of(GregTechAPI.sBlockCasings11, 6), + Pair.of(GregTechAPI.sBlockCasings11, 7)), + -2, + MTEIndustrialExtractor::setItemPipeTier, + MTEIndustrialExtractor::getItemPipeTier)) + .build(); + + private int itemPipeTier = 0; + + private static Integer getItemPipeTierFromMeta(Block block, Integer metaID) { + if (block != GregTechAPI.sBlockCasings11) return -1; + if (metaID < 0 || metaID > 7) return -1; + return metaID + 1; + } + + private void setItemPipeTier(int tier) { + itemPipeTier = tier; + } + + private int getItemPipeTier() { + return itemPipeTier; + } + + public MTEIndustrialExtractor(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialExtractor(String aName) { + super(aName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEIndustrialExtractor(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (aActive) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings4, 1)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings4, 1)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_INDUSTRIAL_EXTRACTOR_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings4, 1)) }; + } + return rTexture; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Extractor") + .addInfo("Controller Block for the Dissection Apparatus") + .addInfo("200% faster than single block machines of the same voltage") + .addInfo("Only uses 85% of the EU/t normally required") + .addInfo("Gains 8 parallels per tier of Item Pipe Casing") + .addInfo(AuthorFourIsTheNumber) + .addSeparator() + .beginStructureBlock(5, 4, 5, true) + .addController("Front Center") + .addCasingInfoMin("Stainless Steel Machine Casing", 24, false) + .addCasingInfoExactly("Item Pipe Casing", 19, true) + .addInputBus("Any Stainless Steel Casing", 1) + .addOutputBus("Any Stainless Steel Casing", 1) + .addEnergyHatch("Any Stainless Steel Casing", 1) + .addMaintenanceHatch("Any Stainless Steel Casing", 1) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 2, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 2, 0, elementBudget, env, false, true); + } + + private int mCasingAmount; + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + itemPipeTier = -2; + + if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 2, 0)) return false; + return mCasingAmount >= 24; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 3F) + .setMaxParallelSupplier(this::getMaxParallelRecipes) + .setEuModifier(0.85F); + } + + public int getMaxParallelRecipes() { + return 8 * itemPipeTier; + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("maxParallelRecipes", getMaxParallelRecipes()); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " + + EnumChatFormatting.WHITE + + tag.getInteger("maxParallelRecipes")); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.extractorRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return -10; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTUtility.roundUpVoltage(this.getMaxInputVoltage())); + logic.setAvailableAmperage(1L); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java new file mode 100644 index 0000000000..e79244f881 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIndustrialLaserEngraver.java @@ -0,0 +1,605 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.GTValues.AuthorFourIsTheNumber; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ENGRAVER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ENGRAVER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ENGRAVER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ENGRAVER_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.API.BorosilicateGlass; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.Textures; +import gregtech.api.enums.VoltageIndex; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.LaserRenderingUtil; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.blocks.BlockCasings10; +import gregtech.common.tileentities.render.TileEntityLaser; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoTunnel; + +public class MTEIndustrialLaserEngraver extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + (new String[][] { { " f ", " ", " ", " ", " a~a " }, + { " fsf ", " g ", " g ", "a g a", "aaraa" }, { "faaaf", "f f", "f f", "a a", "aaaaa" }, + { "aaaaa", "a a a", "a a a", "a a a", "aaaaa" }, { "aaaaa", "aaaaa", "aaaaa", "aaaaa", "aaaaa" } })) + .addElement( + 'a', + buildHatchAdder(MTEIndustrialLaserEngraver.class) + .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Energy) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(1)) + .dot(1) + .buildAndChain( + onElementPass(MTEIndustrialLaserEngraver::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings10, 1)))) + .addElement('f', ofFrame(Materials.TungstenSteel)) + .addElement( + 'g', + BorosilicateGlass + .ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier)) + .addElement( + 'r', + LaserRenderingUtil + .ofBlockAdder(MTEIndustrialLaserEngraver::laserRendererAdder, GregTechAPI.sLaserRender, 0)) + .addElement( + 's', + buildHatchAdder(MTEIndustrialLaserEngraver.class).adder(MTEIndustrialLaserEngraver::addLaserSource) + .hatchClass(MTEHatchDynamoTunnel.class) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(1)) + .dot(3) + .build()) + .build(); + + protected TileEntityLaser renderer; + private byte glassTier = 0; + private MTEHatchDynamoTunnel laserSource = null; + private int laserAmps = 0; + private int laserTier = 0; + private String tierName = "LV"; + + private boolean addLaserSource(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity != null) { + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchDynamoTunnel) { + laserSource = (MTEHatchDynamoTunnel) aMetaTileEntity; + laserSource.updateTexture(aBaseCasingIndex); + // Snap the laser source toward the plate. Player can rotate it if they want after but this will look + // nicer + switch (getRotation()) { + case NORMAL -> laserSource.getBaseMetaTileEntity() + .setFrontFacing(ForgeDirection.DOWN); + case UPSIDE_DOWN -> laserSource.getBaseMetaTileEntity() + .setFrontFacing(ForgeDirection.UP); + case CLOCKWISE -> laserSource.getBaseMetaTileEntity() + .setFrontFacing(getDirection().getRotation(ForgeDirection.UP)); + default -> laserSource.getBaseMetaTileEntity() + .setFrontFacing(getDirection().getRotation(ForgeDirection.DOWN)); + } + // Cube root the amperage to get the parallels + laserAmps = (int) Math.cbrt(laserSource.maxAmperesOut()); + laserTier = (int) laserSource.getOutputTier(); + tierName = GTValues.VN[laserTier]; + return true; + } + } + return false; + } + + private boolean laserRendererAdder(Block block, int meta, World world, int x, int y, int z) { + if (block != GregTechAPI.sLaserRender || world == null) { + return false; + } + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof TileEntityLaser) { + renderer = (TileEntityLaser) te; + renderer.setRotationFields(getDirection(), getRotation(), getFlip()); + return true; + } + return false; + } + + public MTEIndustrialLaserEngraver(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialLaserEngraver(String aName) { + super(aName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEIndustrialLaserEngraver(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (aActive) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 1)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ENGRAVER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ENGRAVER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 1)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ENGRAVER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ENGRAVER_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 1)) }; + } + return rTexture; + } + + private boolean stopAllRendering = false; + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + stopAllRendering = !stopAllRendering; + if (stopAllRendering) { + PlayerUtils.messagePlayer(aPlayer, "Rendering off"); + if (renderer != null) renderer.setShouldRender(false); + } else PlayerUtils.messagePlayer(aPlayer, "Rendering on"); + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack aTool) { + if (aPlayer.isSneaking()) { + batchMode = !batchMode; + if (batchMode) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } else { + if (renderer != null) { + renderer.realism = !renderer.realism; + PlayerUtils.messagePlayer(aPlayer, "Toggling realism!"); + return true; + } + } + return false; + } + + @Override + public void onDisableWorking() { + if (renderer != null) renderer.setShouldRender(false); + super.onDisableWorking(); + } + + @Override + public void onBlockDestroyed() { + if (renderer != null) renderer.setShouldRender(false); + super.onBlockDestroyed(); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Laser Engraver") + .addInfo("Controller Block for the Hyper-Intensity Laser Engraver") + .addInfo("200% faster than single block machines of the same voltage") + .addInfo("Uses 80% of the EU normally required") + .addInfo("Laser source hatch determines maximum recipe tier and parallels") + .addInfo("Parallels equal to the cube root of laser source amperage input") + .addInfo("Glass tier determines maximum laser source tier") + .addInfo("Only accepts borosilicate glass (no, really)") + .addInfo("UMV glass accepts all laser source hatches") + .addInfo("Use screwdriver to disable laser rendering") + .addInfo("Use wire cutter to toggle realism mode if you hate angled lasers") + .addInfo(AuthorFourIsTheNumber) + .addSeparator() + .beginStructureBlock(5, 5, 5, false) + .addController("Front Center") + .addCasingInfoMin("Laser Containment Casing", 45, false) + .addCasingInfoExactly("Tungstensteel Frame Box", 9, false) + .addOtherStructurePart("Laser Resistant Plate", "x1") + .addOtherStructurePart("Borosilicate Glass", "x3") + .addOtherStructurePart("Laser Source Hatch", "x1", 3) + .addInputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 4, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 4, 0, elementBudget, env, false, true); + } + + private int mCasingAmount; + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + mEnergyHatches.clear(); + + if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 4, 0)) return false; + if (mCasingAmount < 45) return false; + if (laserSource == null) return false; + if (renderer == null) return false; + if (glassTier < VoltageIndex.UMV && laserSource.mTier > glassTier) return false; + + return true; + } + + private static String getUniqueIdentifier(ItemStack is) { + return is.getItem() + .getUnlocalizedName() + is.getItemDamage(); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + if (laserTier < VoltageIndex.UXV && recipe.mEUt > GTValues.V[laserTier]) { + return SimpleCheckRecipeResult.ofFailure("laser_insufficient"); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + protected CheckRecipeResult onRecipeStart(@NotNull GTRecipe recipe) { + Colors c = Colors.Red; + for (int i = 0; i < recipe.mInputs.length; i++) { + String uid = getUniqueIdentifier(recipe.mInputs[i]); + if (lensColors.containsKey(uid)) { + c = lensColors.get(uid); + } + } + if (renderer != null) { + renderer.setColors(c.r, c.g, c.b); + if (!stopAllRendering) { + renderer.setShouldRender(true); + } + } + return super.onRecipeStart(recipe); + } + + @Override + public ProcessingLogic clear() { + if (renderer != null) renderer.setShouldRender(false); + return super.clear(); + } + }.setSpeedBonus(1F / 3F) + .setEuModifier(0.8F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public boolean isRotationChangeAllowed() { + return true; + } + + private int getMaxParallelRecipes() { + return laserAmps; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.laserEngraverRecipes; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public int getRecipeCatalystPriority() { + return -10; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTUtility.roundUpVoltage(this.getMaxInputVoltage())); + logic.setAvailableAmperage(1L); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setBoolean("stopAllRendering", stopAllRendering); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (aNBT.hasKey("stopAllRendering")) { + stopAllRendering = aNBT.getBoolean("stopAllRendering"); + } + super.loadNBTData(aNBT); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("laserAmps", laserAmps); + tag.setString("tierName", tierName); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " + + EnumChatFormatting.WHITE + + tag.getInteger("laserAmps") + + EnumChatFormatting.RESET); + currentTip.add( + StatCollector.translateToLocal("GT5U.multiblock.maxtier") + ": " + + EnumChatFormatting.WHITE + + tag.getString("tierName") + + EnumChatFormatting.RESET); + } + + private enum Colors { + + White(1, 1, 1), + Red(1, 0, 0), + Green(0, 1, 0), + Blue(0, 0, 1), + Yellow(1, 1, 0), + Purple(1, 0, 1), + Cyan(0, 1, 1), + Orange(1, 0.5F, 0), + Black(0, 0, 0), + Brown(0.647F, 0.164F, 0.164F); + + final float r, g, b; + + Colors(float r, float g, float b) { + this.r = r; + this.g = g; + this.b = b; + } + } + + private static final Map lensColors; + static { + lensColors = new HashMap<>(); + + // Black lenses + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Forcicium, 1)), Colors.Black); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Forcillium, 1)), Colors.Black); + lensColors.put( + getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.InfusedEntropy, 1)), + Colors.Black); + + // White lenses + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.NetherStar, 1)), Colors.White); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Dilithium, 1)), Colors.White); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Glass, 1)), Colors.White); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1)), Colors.Cyan); + lensColors.put( + getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.InfusedOrder, 1)), + Colors.White); + + // Green lenses + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Emerald, 1)), Colors.Green); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Olivine, 1)), Colors.Green); + lensColors.put( + getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.GreenSapphire, 1)), + Colors.Green); + lensColors.put( + getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.InfusedEarth, 1)), + Colors.Green); + + // Red lenses + lensColors.put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Ruby, 1)), Colors.Red); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Firestone, 1)), Colors.Red); + lensColors.put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Jasper, 1)), Colors.Red); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.FoolsRuby, 1)), Colors.Red); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.GarnetRed, 1)), Colors.Red); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.InfusedFire, 1)), Colors.Red); + + // Blue lenses + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.BlueTopaz, 1)), Colors.Blue); + lensColors.put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Opal, 1)), Colors.Blue); + lensColors.put( + getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.InfusedWater, 1)), + Colors.Blue); + + // Yellow lenses + lensColors.put( + getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.GarnetYellow, 1)), + Colors.Yellow); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Force, 1)), Colors.Yellow); + lensColors.put( + getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.InfusedAir, 1)), + Colors.Yellow); + + // Purple lenses + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Amethyst, 1)), Colors.Purple); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Tanzanite, 1)), Colors.Purple); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Sapphire, 1)), Colors.Purple); + + // Cyan lenses + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.EnderEye, 1)), Colors.Cyan); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.EnderPearl, 1)), Colors.Cyan); + + // Orange lenses + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Topaz, 1)), Colors.Orange); + lensColors + .put(getUniqueIdentifier(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Amber, 1)), Colors.Orange); + + // Time to manually define a bunch of lenses based on id + lensColors.put("gt.bwMetaGeneratedlens1", Colors.Yellow); + lensColors.put("gt.bwMetaGeneratedlens4", Colors.White); + lensColors.put("gt.bwMetaGeneratedlens5", Colors.Black); + lensColors.put("gt.bwMetaGeneratedlens7", Colors.Green); + lensColors.put("gt.bwMetaGeneratedlens8", Colors.Green); + lensColors.put("gt.bwMetaGeneratedlens9", Colors.White); + lensColors.put("gt.bwMetaGeneratedlens19", Colors.Red); + lensColors.put("gt.bwMetaGeneratedlens20", Colors.White); + lensColors.put("gt.bwMetaGeneratedlens21", Colors.Brown); + lensColors.put("gt.bwMetaGeneratedlens22", Colors.Orange); + lensColors.put("gt.bwMetaGeneratedlens23", Colors.Black); + lensColors.put("gt.bwMetaGeneratedlens24", Colors.White); + lensColors.put("gt.bwMetaGeneratedlens25", Colors.Green); + lensColors.put("gt.bwMetaGeneratedlens35", Colors.Yellow); + lensColors.put("gt.bwMetaGeneratedlens36", Colors.Purple); + lensColors.put("gt.bwMetaGeneratedlens43", Colors.Green); + lensColors.put("gt.bwMetaGeneratedlens89", Colors.Green); + lensColors.put("gt.bwMetaGeneratedlens91", Colors.Purple); + lensColors.put("gt.bwMetaGeneratedlens10023", Colors.Red); + lensColors.put("gt.bwMetaGeneratedlens11499", Colors.Green); + lensColors.put("gt.bwMetaGeneratedlens11358", Colors.Red); + lensColors.put("MU-metaitem.0132140", Colors.Purple); + lensColors.put("MU-metaitem.0132140", Colors.Purple); + + // + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java new file mode 100644 index 0000000000..25a54021fa --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEIntegratedOreFactory.java @@ -0,0 +1,827 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_GLOW; +import static gregtech.api.enums.TickTime.SECOND; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Random; +import java.util.stream.Collectors; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +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.MTEExtendedPowerMultiBlockBase; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEIntegratedOreFactory extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final int CASING_INDEX1 = 183; + private static final int CASING_INDEX2 = 49; + private static final int MAX_PARA = 1024; + private static final long RECIPE_EUT = 30; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { + { " ", " ", " WWW ", " WWW ", " ", " " }, + { " ", " sss ", " sppps", " sppps", " sss ", " " }, + { " ", " sss ", " s s", " s s", " sss ", " " }, + { " ", " sss ", " sppps", " sppps", " sss ", " " }, + { " ", " sss ", " s s", " s s", " sss ", " " }, + { " ", " sss ", " sppps", " sppps", " sss ", " " }, + { "iiiiii ", "iIIIIiisssi", "iIIIIis s", "iIIIIis s", "iIIIIiisssi", "iiiiii " }, + { "iggggi ", "gt t isssi", "g xx sppps", "g xx sppps", "gt t isssi", "iggggi " }, + { "iggggi ", "gt t isssi", "g xx s s", "g xx s s", "gt t isssi", "iggggi " }, + { "iggggi ", "gt t is~si", "g xx spppO", "g xx spppO", "gt t isssi", "iggggi " }, + { "iggggi ", "gt t isssi", "g xx s O", "g xx s O", "gt t isssi", "iggggi " }, + { "EEEEEE ", "EEEEEEEEEEE", "EEEEEEEEEEE", "EEEEEEEEEEE", "EEEEEEEEEEE", "EEEEEE " } })) + .addElement('i', ofBlock(GregTechAPI.sBlockCasings8, 7)) + .addElement('s', ofBlock(GregTechAPI.sBlockCasings4, 1)) + .addElement('g', Glasses.chainAllGlasses()) + .addElement('x', ofBlock(GregTechAPI.sBlockCasings2, 3)) + .addElement('p', ofBlock(GregTechAPI.sBlockCasings2, 15)) + .addElement('t', ofFrame(Materials.TungstenSteel)) + .addElement( + 'E', + buildHatchAdder(MTEIntegratedOreFactory.class).atLeast(Energy, Maintenance) + .casingIndex(CASING_INDEX1) + .dot(1) + .buildAndChain(GregTechAPI.sBlockCasings8, 7)) + .addElement( + 'I', + buildHatchAdder(MTEIntegratedOreFactory.class).atLeast(InputBus) + .casingIndex(CASING_INDEX1) + .dot(2) + .buildAndChain(GregTechAPI.sBlockCasings8, 7)) + .addElement( + 'W', + buildHatchAdder(MTEIntegratedOreFactory.class).atLeast(InputHatch, Muffler) + .casingIndex(CASING_INDEX2) + .dot(3) + .buildAndChain(GregTechAPI.sBlockCasings4, 1)) + .addElement( + 'O', + buildHatchAdder(MTEIntegratedOreFactory.class).atLeast(OutputBus, OutputHatch) + .casingIndex(CASING_INDEX2) + .dot(4) + .buildAndChain(GregTechAPI.sBlockCasings4, 1)) + .build(); + + private static final HashSet isCrushedOre = new HashSet<>(); + private static final HashSet isCrushedPureOre = new HashSet<>(); + private static final HashSet isPureDust = new HashSet<>(); + private static final HashSet isImpureDust = new HashSet<>(); + private static final HashSet isThermal = new HashSet<>(); + private static final HashSet isOre = new HashSet<>(); + private static boolean isInit = false; + private ItemStack[] sMidProduct; + private int sMode = 0; + private boolean sVoidStone = false; + private int currentParallelism = 0; + + private static void initHash() { + for (String name : OreDictionary.getOreNames()) { + if (name == null || name.isEmpty()) continue; + if (name.startsWith("crushedPurified")) { + for (ItemStack stack : OreDictionary.getOres(name)) { + isCrushedPureOre.add(GTUtility.stackToInt(stack)); + } + } else if (name.startsWith("crushedCentrifuged")) { + for (ItemStack stack : OreDictionary.getOres(name)) { + isThermal.add(GTUtility.stackToInt(stack)); + } + } else if (name.startsWith("crushed")) { + for (ItemStack stack : OreDictionary.getOres(name)) { + isCrushedOre.add(GTUtility.stackToInt(stack)); + } + } else if (name.startsWith("dustImpure")) { + for (ItemStack stack : OreDictionary.getOres(name)) { + isImpureDust.add(GTUtility.stackToInt(stack)); + } + } else if (name.startsWith("dustPure")) { + for (ItemStack stack : OreDictionary.getOres(name)) { + isPureDust.add(GTUtility.stackToInt(stack)); + } + } else if (name.startsWith("ore")) { + for (ItemStack stack : OreDictionary.getOres(name)) { + isOre.add(GTUtility.stackToInt(stack)); + } + } else if (name.startsWith("rawOre")) { + for (ItemStack stack : OreDictionary.getOres(name)) { + isOre.add(GTUtility.stackToInt(stack)); + } + } + } + } + + public MTEIntegratedOreFactory(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIntegratedOreFactory(String aName) { + super(aName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Ore Processor") + .addInfo("Controller Block for the Integrated Ore Factory") + .addInfo("It is OP. I mean ore processor.") + .addInfo("Do all ore processing in one step.") + .addInfo("Can process up to 1024 ores at a time.") + .addInfo("Every ore costs 30EU/t, 2L lubricant, 200L distilled water.") + .addInfo("Processing time is dependent on mode.") + .addInfo("Use a screwdriver to switch mode.") + .addInfo("Sneak click with screwdriver to void the stone dust.") + .addSeparator() + .beginStructureBlock(6, 12, 11, false) + .addController("The third layer") + .addStructureInfo("128 Advanced Iridium Plated Machine Casing") + .addStructureInfo("105 Clean Stainless Steel Machine Casing") + .addStructureInfo("48 Reinforced Glass") + .addStructureInfo("30 Tungstensteel Pipe Casing") + .addStructureInfo("16 Tungstensteel Frame Box") + .addStructureInfo("16 Steel Gear Box Casing") + .addEnergyHatch("Any bottom Casing", 1) + .addMaintenanceHatch("Any bottom Casing", 1) + .addInputBus("Input ore/crushed ore", 2) + .addInputHatch("Input lubricant/distilled water/washing chemicals", 3) + .addMufflerHatch("Output Pollution", 3) + .addOutputBus("Output products", 4) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> !r.isUpsideDown() && !f.isVerticallyFliped(); + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 8, 9, 1); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 8, 9, 1, elementBudget, env, false, true); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + private static int getTime(int mode) { + return switch (mode) { + case 0 -> 30 * SECOND; + case 1 -> 15 * SECOND; + case 2 -> 10 * SECOND; + case 3 -> 20 * SECOND; + case 4 -> 17 * SECOND; + default -> + // go to hell + 1000000000; + }; + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + if (!isInit) { + initHash(); + isInit = true; + } + + List tInput = getStoredInputs(); + List tInputFluid = getStoredFluids(); + long availableEUt = GTUtility.roundUpVoltage(getMaxInputVoltage()); + if (availableEUt < RECIPE_EUT) { + return CheckRecipeResultRegistry.insufficientPower(RECIPE_EUT); + } + if (tInput.isEmpty() || tInputFluid.isEmpty()) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + + int maxParallel = MAX_PARA; + int originalMaxParallel = maxParallel; + + OverclockCalculator calculator = new OverclockCalculator().setEUt(availableEUt) + .setRecipeEUt(RECIPE_EUT) + .setDuration(getTime(sMode)) + .setParallel(originalMaxParallel); + + double tickTimeAfterOC = calculator.calculateDurationUnderOneTick(); + + if (tickTimeAfterOC < 1) { + maxParallel = GTUtility.safeInt((long) (maxParallel / tickTimeAfterOC), 0); + } + + int maxParallelBeforeBatchMode = maxParallel; + if (isBatchModeEnabled()) { + maxParallel = GTUtility.safeInt((long) maxParallel * getMaxBatchSize(), 0); + } + + int currentParallel = (int) Math.min(maxParallel, availableEUt / RECIPE_EUT); + // Calculate parallel by fluids + int tLube = 0; + int tWater = 0; + for (FluidStack fluid : tInputFluid) { + if (fluid != null && fluid.equals(GTModHandler.getDistilledWater(1L))) { + tWater += fluid.amount; + } else if (fluid != null && fluid.equals(Materials.Lubricant.getFluid(1L))) { + tLube += fluid.amount; + } + } + currentParallel = Math.min(currentParallel, tLube / 2); + currentParallel = Math.min(currentParallel, tWater / 200); + if (currentParallel <= 0) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + + // Calculate parallel by items + int itemParallel = 0; + for (ItemStack ore : tInput) { + int tID = GTUtility.stackToInt(ore); + if (tID == 0) continue; + if (isPureDust.contains(tID) || isImpureDust.contains(tID) + || isCrushedPureOre.contains(tID) + || isThermal.contains(tID) + || isCrushedOre.contains(tID) + || isOre.contains(tID)) { + if (itemParallel + ore.stackSize <= currentParallel) { + itemParallel += ore.stackSize; + } else { + itemParallel = currentParallel; + break; + } + } + } + currentParallel = itemParallel; + int currentParallelBeforeBatchMode = Math.min(currentParallel, maxParallelBeforeBatchMode); + + calculator.setCurrentParallel(currentParallelBeforeBatchMode) + .calculate(); + + double batchMultiplierMax = 1; + // In case batch mode enabled + if (currentParallel > maxParallelBeforeBatchMode && calculator.getDuration() < getMaxBatchSize()) { + batchMultiplierMax = (double) getMaxBatchSize() / calculator.getDuration(); + batchMultiplierMax = Math.min(batchMultiplierMax, (double) currentParallel / maxParallelBeforeBatchMode); + } + + int finalParallel = (int) (batchMultiplierMax * maxParallelBeforeBatchMode); + + // for scanner + setCurrentParallelism(finalParallel); + + // Consume fluids + depleteInput(GTModHandler.getDistilledWater(finalParallel * 200L)); + depleteInput(Materials.Lubricant.getFluid(finalParallel * 2L)); + + // Consume items and generate outputs + List tOres = new ArrayList<>(); + int remainingCost = finalParallel; + for (ItemStack ore : tInput) { + int tID = GTUtility.stackToInt(ore); + if (tID == 0) continue; + if (isPureDust.contains(tID) || isImpureDust.contains(tID) + || isCrushedPureOre.contains(tID) + || isThermal.contains(tID) + || isCrushedOre.contains(tID) + || isOre.contains(tID)) { + if (remainingCost >= ore.stackSize) { + tOres.add(GTUtility.copy(ore)); + remainingCost -= ore.stackSize; + ore.stackSize = 0; + } else { + tOres.add(GTUtility.copyAmountUnsafe(remainingCost, ore)); + ore.stackSize -= remainingCost; + break; + } + } + } + sMidProduct = tOres.toArray(new ItemStack[0]); + switch (sMode) { + case 0 -> { + doMac(isOre); + doWash(isCrushedOre); + doThermal(isCrushedPureOre, isCrushedOre); + doMac(isThermal, isOre, isCrushedOre, isCrushedPureOre); + } + case 1 -> { + doMac(isOre); + doWash(isCrushedOre); + doMac(isOre, isCrushedOre, isCrushedPureOre); + doCentrifuge(isImpureDust, isPureDust); + } + case 2 -> { + doMac(isOre); + doMac(isThermal, isOre, isCrushedOre, isCrushedPureOre); + doCentrifuge(isImpureDust, isPureDust); + } + case 3 -> { + doMac(isOre); + doWash(isCrushedOre); + doSift(isCrushedPureOre); + } + case 4 -> { + doMac(isOre); + doChemWash(isCrushedOre, isCrushedPureOre); + doMac(isCrushedOre, isCrushedPureOre); + doCentrifuge(isImpureDust, isPureDust); + } + default -> { + return CheckRecipeResultRegistry.NO_RECIPE; + } + } + + this.mEfficiency = 10000 - (getIdealStatus() - getRepairStatus()) * 1000; + this.mEfficiencyIncrease = 10000; + this.mOutputItems = sMidProduct; + this.mMaxProgresstime = (int) (calculator.getDuration() * batchMultiplierMax); + this.lEUt = calculator.getConsumption(); + if (this.lEUt > 0) { + this.lEUt = -this.lEUt; + } + this.updateSlots(); + + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @SafeVarargs + private boolean checkTypes(int aID, HashSet... aTables) { + for (HashSet set : aTables) { + if (set.contains(aID)) { + return true; + } + } + return false; + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + sVoidStone = !sVoidStone; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.void", sVoidStone)); + return; + } + sMode = (sMode + 1) % 5; + List des = getDisplayMode(sMode); + GTUtility.sendChatToPlayer(aPlayer, String.join("", des)); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + sMode = aNBT.getInteger("ssMode"); + sVoidStone = aNBT.getBoolean("ssStone"); + currentParallelism = aNBT.getInteger("currentParallelism"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("ssMode", sMode); + aNBT.setBoolean("ssStone", sVoidStone); + aNBT.setInteger("currentParallelism", currentParallelism); + super.saveNBTData(aNBT); + } + + @SafeVarargs + private void doMac(HashSet... aTables) { + List tProduct = new ArrayList<>(); + if (sMidProduct != null) { + for (ItemStack aStack : sMidProduct) { + int tID = GTUtility.stackToInt(aStack); + if (checkTypes(tID, aTables)) { + GTRecipe tRecipe = RecipeMaps.maceratorRecipes + .findRecipe(getBaseMetaTileEntity(), false, GTValues.V[15], null, aStack); + if (tRecipe != null) { + tProduct.addAll(getOutputStack(tRecipe, aStack.stackSize)); + } else { + tProduct.add(aStack); + } + } else { + tProduct.add(aStack); + } + } + } + doCompress(tProduct); + } + + @SafeVarargs + private void doWash(HashSet... aTables) { + List tProduct = new ArrayList<>(); + if (sMidProduct != null) { + for (ItemStack aStack : sMidProduct) { + int tID = GTUtility.stackToInt(aStack); + if (checkTypes(tID, aTables)) { + GTRecipe tRecipe = RecipeMaps.oreWasherRecipes.findRecipe( + getBaseMetaTileEntity(), + false, + GTValues.V[15], + new FluidStack[] { GTModHandler.getDistilledWater(Integer.MAX_VALUE) }, + aStack); + if (tRecipe != null) { + tProduct.addAll(getOutputStack(tRecipe, aStack.stackSize)); + } else { + tProduct.add(aStack); + } + } else { + tProduct.add(aStack); + } + } + } + doCompress(tProduct); + } + + @SafeVarargs + private void doThermal(HashSet... aTables) { + List tProduct = new ArrayList<>(); + if (sMidProduct != null) { + for (ItemStack aStack : sMidProduct) { + int tID = GTUtility.stackToInt(aStack); + if (checkTypes(tID, aTables)) { + GTRecipe tRecipe = RecipeMaps.thermalCentrifugeRecipes + .findRecipe(getBaseMetaTileEntity(), false, GTValues.V[15], null, aStack); + if (tRecipe != null) { + tProduct.addAll(getOutputStack(tRecipe, aStack.stackSize)); + } else { + tProduct.add(aStack); + } + } else { + tProduct.add(aStack); + } + } + } + doCompress(tProduct); + } + + @SafeVarargs + private void doCentrifuge(HashSet... aTables) { + List tProduct = new ArrayList<>(); + if (sMidProduct != null) { + for (ItemStack aStack : sMidProduct) { + int tID = GTUtility.stackToInt(aStack); + if (checkTypes(tID, aTables)) { + GTRecipe tRecipe = RecipeMaps.centrifugeRecipes + .findRecipe(getBaseMetaTileEntity(), false, GTValues.V[15], null, aStack); + if (tRecipe != null) { + tProduct.addAll(getOutputStack(tRecipe, aStack.stackSize)); + } else { + tProduct.add(aStack); + } + } else { + tProduct.add(aStack); + } + } + } + doCompress(tProduct); + } + + @SafeVarargs + private void doSift(HashSet... aTables) { + List tProduct = new ArrayList<>(); + if (sMidProduct != null) { + for (ItemStack aStack : sMidProduct) { + int tID = GTUtility.stackToInt(aStack); + if (checkTypes(tID, aTables)) { + GTRecipe tRecipe = RecipeMaps.sifterRecipes + .findRecipe(getBaseMetaTileEntity(), false, GTValues.V[15], null, aStack); + if (tRecipe != null) { + tProduct.addAll(getOutputStack(tRecipe, aStack.stackSize)); + } else { + tProduct.add(aStack); + } + } else { + tProduct.add(aStack); + } + } + } + doCompress(tProduct); + } + + @SafeVarargs + private void doChemWash(HashSet... aTables) { + List tProduct = new ArrayList<>(); + if (sMidProduct != null) { + for (ItemStack aStack : sMidProduct) { + int tID = GTUtility.stackToInt(aStack); + if (checkTypes(tID, aTables)) { + GTRecipe tRecipe = RecipeMaps.chemicalBathRecipes.findRecipe( + getBaseMetaTileEntity(), + false, + GTValues.V[15], + getStoredFluids().toArray(new FluidStack[0]), + aStack); + if (tRecipe != null && tRecipe.getRepresentativeFluidInput(0) != null) { + FluidStack tInputFluid = tRecipe.getRepresentativeFluidInput(0) + .copy(); + int tStored = getFluidAmount(tInputFluid); + int tWashed = Math.min(tStored / tInputFluid.amount, aStack.stackSize); + depleteInput(new FluidStack(tInputFluid.getFluid(), tWashed * tInputFluid.amount)); + tProduct.addAll(getOutputStack(tRecipe, tWashed)); + if (tWashed < aStack.stackSize) { + tProduct.add(GTUtility.copyAmountUnsafe(aStack.stackSize - tWashed, aStack)); + } + } else { + tProduct.add(aStack); + } + } else { + tProduct.add(aStack); + } + } + } + doCompress(tProduct); + } + + private int getFluidAmount(FluidStack aFluid) { + int tAmt = 0; + if (aFluid == null) return 0; + for (FluidStack fluid : getStoredFluids()) { + if (aFluid.isFluidEqual(fluid)) { + tAmt += fluid.amount; + } + } + return tAmt; + } + + private List getOutputStack(GTRecipe aRecipe, int aTime) { + List tOutput = new ArrayList<>(); + for (int i = 0; i < aRecipe.mOutputs.length; i++) { + if (aRecipe.getOutput(i) == null) { + continue; + } + int tChance = aRecipe.getOutputChance(i); + if (tChance == 10000) { + tOutput.add(GTUtility.copyAmountUnsafe(aTime * aRecipe.getOutput(i).stackSize, aRecipe.getOutput(i))); + } else { + // Use Normal Distribution + double u = aTime * (tChance / 10000D); + double e = aTime * (tChance / 10000D) * (1 - (tChance / 10000D)); + Random random = new Random(); + int tAmount = (int) Math.ceil(Math.sqrt(e) * random.nextGaussian() + u); + tOutput.add(GTUtility.copyAmountUnsafe(tAmount * aRecipe.getOutput(i).stackSize, aRecipe.getOutput(i))); + } + } + return tOutput.stream() + .filter(i -> (i != null && i.stackSize > 0)) + .collect(Collectors.toList()); + } + + private void doCompress(List aList) { + HashMap rProduct = new HashMap<>(); + for (ItemStack stack : aList) { + int tID = GTUtility.stackToInt(stack); + if (sVoidStone) { + if (GTUtility.areStacksEqual(Materials.Stone.getDust(1), stack)) { + continue; + } + } + if (tID != 0) { + if (rProduct.containsKey(tID)) { + rProduct.put(tID, rProduct.get(tID) + stack.stackSize); + } else { + rProduct.put(tID, stack.stackSize); + } + } + } + sMidProduct = new ItemStack[rProduct.size()]; + int cnt = 0; + for (Integer id : rProduct.keySet()) { + ItemStack stack = GTUtility.intToStack(id); + sMidProduct[cnt] = GTUtility.copyAmountUnsafe(rProduct.get(id), stack); + cnt++; + } + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return checkPiece(STRUCTURE_PIECE_MAIN, 8, 9, 1) && mMaintenanceHatches.size() <= 1 + && !mMufflerHatches.isEmpty(); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 200; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEIntegratedOreFactory(mName); + } + + private void setCurrentParallelism(int parallelism) { + this.currentParallelism = parallelism; + } + + private int getCurrentParallelism() { + return this.currentParallelism; + } + + @Override + public String[] getInfoData() { + List informationData = new ArrayList<>(Arrays.asList(super.getInfoData())); + String parallelism = StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " + + EnumChatFormatting.BLUE + + getCurrentParallelism() + + EnumChatFormatting.RESET; + informationData.add(parallelism); + informationData.add(StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.void", sVoidStone)); + informationData.addAll(getDisplayMode(sMode)); + return informationData.toArray(new String[0]); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX2), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX2), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX2) }; + } + + private static List getDisplayMode(int mode) { + final EnumChatFormatting AQUA = EnumChatFormatting.AQUA; + final String CRUSH = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Macerate"); + final String WASH = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Ore_Washer") + .replace(" ", " " + AQUA); + final String THERMAL = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Thermal_Centrifuge") + .replace(" ", " " + AQUA); + final String CENTRIFUGE = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Centrifuge"); + final String SIFTER = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Sifter"); + final String CHEM_WASH = StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.Chemical_Bathing") + .replace(" ", " " + AQUA); + final String ARROW = " " + AQUA + "-> "; + + List des = new ArrayList<>(); + des.add(StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor1") + " "); + + switch (mode) { + case 0 -> { + des.add(AQUA + CRUSH + ARROW); + des.add(AQUA + WASH + ARROW); + des.add(AQUA + THERMAL + ARROW); + des.add(AQUA + CRUSH + ' '); + } + case 1 -> { + des.add(AQUA + CRUSH + ARROW); + des.add(AQUA + WASH + ARROW); + des.add(AQUA + CRUSH + ARROW); + des.add(AQUA + CENTRIFUGE + ' '); + } + case 2 -> { + des.add(AQUA + CRUSH + ARROW); + des.add(AQUA + CRUSH + ARROW); + des.add(AQUA + CENTRIFUGE + ' '); + } + case 3 -> { + des.add(AQUA + CRUSH + ARROW); + des.add(AQUA + WASH + ARROW); + des.add(AQUA + SIFTER + ' '); + } + case 4 -> { + des.add(AQUA + CRUSH + ARROW); + des.add(AQUA + CHEM_WASH + ARROW); + des.add(AQUA + CRUSH + ARROW); + des.add(AQUA + CENTRIFUGE + ' '); + } + default -> des.add(StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.WRONG_MODE")); + } + + des.add(StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor2", getTime(mode) / 20)); + + return des; + + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " + + EnumChatFormatting.BLUE + + tag.getInteger("currentParallelism") + + EnumChatFormatting.RESET); + currenttip.addAll(getDisplayMode(tag.getInteger("ssMode"))); + currenttip + .add(StatCollector.translateToLocalFormatted("GT5U.machines.oreprocessor.void", tag.getBoolean("ssStone"))); + + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("ssMode", sMode); + tag.setBoolean("ssStone", sVoidStone); + tag.setInteger("currentParallelism", currentParallelism); + } + + @Override + public boolean supportsBatchMode() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoiler.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoiler.java new file mode 100644 index 0000000000..4d4025d7d4 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoiler.java @@ -0,0 +1,503 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.STEAM_PER_WATER; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.ItemList.Circuit_Integrated; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_BOILER_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.formatNumbers; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.GTMod; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.maps.LargeBoilerFuelBackend; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public abstract class MTELargeBoiler extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { + + @Override + protected IStructureDefinition computeValue(Class type) { + return StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { "ccc", "ccc", "ccc" }, { "ccc", "cPc", "ccc" }, { "ccc", "cPc", "ccc" }, + { "ccc", "cPc", "ccc" }, { "f~f", "fff", "fff" }, })) + .addElement('P', lazy(t -> ofBlock(t.getPipeBlock(), t.getPipeMeta()))) + .addElement( + 'c', + lazy( + t -> buildHatchAdder(MTELargeBoiler.class).atLeast(OutputHatch) + .casingIndex(t.getCasingTextureIndex()) + .dot(2) + .buildAndChain( + onElementPass( + MTELargeBoiler::onCasingAdded, + ofBlock(t.getCasingBlock(), t.getCasingMeta()))))) + .addElement( + 'f', + lazy( + t -> buildHatchAdder(MTELargeBoiler.class).atLeast(Maintenance, InputHatch, InputBus, Muffler) + .casingIndex(t.getFireboxTextureIndex()) + .dot(1) + .buildAndChain( + onElementPass( + MTELargeBoiler::onFireboxAdded, + ofBlock(t.getFireboxBlock(), t.getFireboxMeta()))))) + .build(); + } + }; + private boolean firstRun = true; + private int mSuperEfficencyIncrease = 0; + private int integratedCircuitConfig = 0; // Steam output is reduced by 1000L per config + private int excessWater = 0; // Eliminate rounding errors for water + private int excessFuel = 0; // Eliminate rounding errors for fuels that burn half items + private int excessProjectedEU = 0; // Eliminate rounding errors from throttling the boiler + private int mCasingAmount; + private int mFireboxAmount; + protected int pollutionPerSecond = 1; // placeholder for the child classes + + public MTELargeBoiler(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeBoiler(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + + tt.addMachineType("Boiler") + .addInfo("Controller block for the Large " + getCasingMaterial() + " Boiler"); + // Tooltip differs between the boilers that output Superheated Steam (Titanium and Tungstensteel) and the ones + // that do not (Bronze and Steel) + if (isSuperheated()) { + tt.addInfo( + "Produces " + formatNumbers((getEUt() * 40) * ((runtimeBoost(20) / (20f)) / superToNormalSteam)) + + "L of Superheated Steam with 1 Coal at " + + formatNumbers((getEUt() * 40L) / superToNormalSteam) + + "L/s") // ? + .addInfo("A programmed circuit in the main block throttles the boiler (-1000L/s per config)") + .addInfo("Only some solid fuels are allowed (check the NEI Large Boiler tab for details)") + .addInfo("If there are any disallowed fuels in the input bus, the boiler won't run!"); + } else { + tt.addInfo( + "Produces " + formatNumbers((getEUt() * 40) * (runtimeBoost(20) / 20f)) + + "L of Steam with 1 Coal at " + + formatNumbers(getEUt() * 40L) + + "L/s") // ? + .addInfo("A programmed circuit in the main block throttles the boiler (-1000L/s per config)") + .addInfo("Solid Fuels with a burn value that is too high or too low will not work"); + } + tt.addInfo( + String.format( + "Diesel fuels have 1/4 efficiency - Takes %s seconds to heat up", + formatNumbers(500.0 / getEfficiencyIncrease()))) // ? check semifluid again + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 5, 3, false) + .addController("Front bottom") + .addCasingInfoRange(getCasingMaterial() + " " + getCasingBlockType() + " Casing", 24, 31, false) // ? + .addOtherStructurePart(getCasingMaterial() + " Fire Boxes", "Bottom layer, 3 minimum") + .addOtherStructurePart(getCasingMaterial() + " Pipe Casing Blocks", "Inner 3 blocks") + .addMaintenanceHatch("Any firebox", 1) + .addMufflerHatch("Any firebox", 1) + .addInputBus("Solid fuel, Any firebox", 1) + .addInputHatch("Liquid fuel, Any firebox", 1) + .addStructureInfo("You can use either, or both") + .addInputHatch("Water, Any firebox", 1) + .addOutputHatch("Steam, any casing", 2) + .toolTipFinisher("Gregtech"); + + return tt; + } + + public abstract String getCasingMaterial(); + + public abstract Block getCasingBlock(); + + public abstract String getCasingBlockType(); + + public abstract byte getCasingMeta(); + + public abstract byte getCasingTextureIndex(); + + public abstract Block getPipeBlock(); + + public abstract byte getPipeMeta(); + + public abstract Block getFireboxBlock(); + + public abstract byte getFireboxMeta(); + + public abstract byte getFireboxTextureIndex(); + + public abstract int getEUt(); + + public abstract int getEfficiencyIncrease(); + + public int getIntegratedCircuitConfig() { + return integratedCircuitConfig; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + // allows for 0 pollution if circuit throttle is too high + return Math.max( + 0, + (int) (pollutionPerSecond + * (1 - GTMod.gregtechproxy.mPollutionReleasedByThrottle * getIntegratedCircuitConfig()))); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { BlockIcons.getCasingTextureForId(getCasingTextureIndex()), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_BOILER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_BOILER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { BlockIcons.getCasingTextureForId(getCasingTextureIndex()), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_BOILER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_BOILER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureIndex()) }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + boolean isFuelValid() { + if (!isSuperheated()) return true; + for (ItemStack input : getStoredInputs()) { + if (!LargeBoilerFuelBackend.isAllowedSolidFuel(input) + && !Circuit_Integrated.isStackEqual(input, true, true)) { + // if any item is not in ALLOWED_SOLID_FUELS, operation cannot be allowed because it might still be + // consumed + this.mMaxProgresstime = 0; + this.mEUt = 0; + return false; + } + } + return true; + } + + @Override + public RecipeMap getRecipeMap() { + // Only for visual + return RecipeMaps.largeBoilerFakeFuels; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + if (!isFuelValid()) return CheckRecipeResultRegistry.NO_FUEL_FOUND; + // Do we have an integrated circuit with a valid configuration? + if (Circuit_Integrated.isStackEqual(mInventory[1], true, true)) { + int circuit_config = mInventory[1].getItemDamage(); + if (circuit_config >= 1 && circuit_config <= 25) { + // If so, overwrite the current config + this.integratedCircuitConfig = circuit_config; + } + } else { + // If not, set the config to zero + this.integratedCircuitConfig = 0; + } + + this.mSuperEfficencyIncrease = 0; + if (!isSuperheated()) { + for (GTRecipe tRecipe : RecipeMaps.dieselFuels.getAllRecipes()) { + FluidStack tFluid = GTUtility.getFluidForFilledItem(tRecipe.getRepresentativeInput(0), true); + if (tFluid != null && tRecipe.mSpecialValue > 1) { + tFluid.amount = 1000; + if (depleteInput(tFluid)) { + this.mMaxProgresstime = adjustBurnTimeForConfig(runtimeBoost(tRecipe.mSpecialValue / 2)); + this.mEUt = adjustEUtForConfig(getEUt()); + this.mEfficiencyIncrease = this.mMaxProgresstime * getEfficiencyIncrease() * 4; + return CheckRecipeResultRegistry.SUCCESSFUL; + } + } + } + for (GTRecipe tRecipe : RecipeMaps.denseLiquidFuels.getAllRecipes()) { + FluidStack tFluid = GTUtility.getFluidForFilledItem(tRecipe.getRepresentativeInput(0), true); + if (tFluid != null) { + tFluid.amount = 1000; + if (depleteInput(tFluid)) { + this.mMaxProgresstime = adjustBurnTimeForConfig( + Math.max(1, runtimeBoost(tRecipe.mSpecialValue * 2))); + this.mEUt = adjustEUtForConfig(getEUt()); + this.mEfficiencyIncrease = this.mMaxProgresstime * getEfficiencyIncrease(); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + } + } + } + + ArrayList tInputList = getStoredInputs(); + if (!tInputList.isEmpty()) { + if (isSuperheated()) { + for (ItemStack tInput : tInputList) { + if (tInput != GTOreDictUnificator.get(OrePrefixes.bucket, Materials.Lava, 1)) { + if (GTUtility.getFluidForFilledItem(tInput, true) == null + && (this.mMaxProgresstime = GTModHandler.getFuelValue(tInput) / 80) > 0) { + this.excessFuel += GTModHandler.getFuelValue(tInput) % 80; + this.mMaxProgresstime += this.excessFuel / 80; + this.excessFuel %= 80; + this.mMaxProgresstime = adjustBurnTimeForConfig(runtimeBoost(this.mMaxProgresstime)); + this.mEUt = adjustEUtForConfig(getEUt()); + this.mEfficiencyIncrease = this.mMaxProgresstime * getEfficiencyIncrease(); + this.mOutputItems = new ItemStack[] { GTUtility.getContainerItem(tInput, true) }; + tInput.stackSize -= 1; + updateSlots(); + if (this.mEfficiencyIncrease > 5000) { + this.mEfficiencyIncrease = 0; + this.mSuperEfficencyIncrease = 20; + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + } + } + } else { + for (ItemStack tInput : tInputList) { + if (tInput != GTOreDictUnificator.get(OrePrefixes.bucket, Materials.Lava, 1)) { + // Solid fuels with burn values below getEUt are ignored (mostly items like sticks), and also + // those with very high fuel values that would cause an overflow error. + if (GTUtility.getFluidForFilledItem(tInput, true) == null + && (this.mMaxProgresstime = GTModHandler.getFuelValue(tInput) / 80) > 0 + && (GTModHandler.getFuelValue(tInput) * 2 / this.getEUt()) > 1 + && GTModHandler.getFuelValue(tInput) < 100000000) { + this.excessFuel += GTModHandler.getFuelValue(tInput) % 80; + this.mMaxProgresstime += this.excessFuel / 80; + this.excessFuel %= 80; + this.mMaxProgresstime = adjustBurnTimeForConfig(runtimeBoost(this.mMaxProgresstime)); + this.mEUt = adjustEUtForConfig(getEUt()); + this.mEfficiencyIncrease = this.mMaxProgresstime * getEfficiencyIncrease(); + this.mOutputItems = new ItemStack[] { GTUtility.getContainerItem(tInput, true) }; + tInput.stackSize -= 1; + updateSlots(); + if (this.mEfficiencyIncrease > 5000) { + this.mEfficiencyIncrease = 0; + this.mSuperEfficencyIncrease = 20; + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + } + } + } + } + this.mMaxProgresstime = 0; + this.mEUt = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + abstract int runtimeBoost(int mTime); + + abstract boolean isSuperheated(); + + private final int superToNormalSteam = 3; + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (this.mEUt > 0) { + if (this.mSuperEfficencyIncrease > 0) mEfficiency = Math.max( + 0, + Math.min( + mEfficiency + mSuperEfficencyIncrease, + getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000))); + int tGeneratedEU = (int) (this.mEUt * 2L * this.mEfficiency / 10000L); + if (tGeneratedEU > 0) { + long amount = (tGeneratedEU + STEAM_PER_WATER) / STEAM_PER_WATER; + excessWater += amount * STEAM_PER_WATER - tGeneratedEU; + amount -= excessWater / STEAM_PER_WATER; + excessWater %= STEAM_PER_WATER; + startRecipeProcessing(); + if (isSuperheated()) { + // Consumes only one third of the water if producing Superheated Steam, to maintain water in the + // chain. + if (depleteInput(Materials.Water.getFluid(amount / superToNormalSteam)) + || depleteInput(GTModHandler.getDistilledWater(amount / superToNormalSteam))) { + // Outputs Superheated Steam instead of Steam, at one third of the amount (equivalent in power + // output to the normal Steam amount). + addOutput( + FluidRegistry.getFluidStack("ic2superheatedsteam", tGeneratedEU / superToNormalSteam)); + } else { + GTLog.exp.println("Boiler " + this.mName + " had no Water!"); + explodeMultiblock(); + } + } else { + if (depleteInput(Materials.Water.getFluid(amount)) + || depleteInput(GTModHandler.getDistilledWater(amount))) { + addOutput(GTModHandler.getSteam(tGeneratedEU)); + } else { + GTLog.exp.println("Boiler " + this.mName + " had no Water!"); + explodeMultiblock(); + } + } + endRecipeProcessing(); + } + return true; + } + return true; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("excessFuel", excessFuel); + aNBT.setInteger("excessWater", excessWater); + aNBT.setInteger("excessProjectedEU", excessProjectedEU); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + excessFuel = aNBT.getInteger("excessFuel"); + excessWater = aNBT.getInteger("excessWater"); + excessProjectedEU = aNBT.getInteger("excessProjectedEU"); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (mProgresstime > 0 && firstRun) { + firstRun = false; + GTMod.achievements.issueAchievement( + aBaseMetaTileEntity.getWorld() + .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), + "extremepressure"); + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + private void onCasingAdded() { + mCasingAmount++; + } + + private void onFireboxAdded() { + mFireboxAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + mFireboxAmount = 0; + return checkPiece(STRUCTURE_PIECE_MAIN, 1, 4, 0) && mCasingAmount >= 24 + && mFireboxAmount >= 3 + && mMaintenanceHatches.size() == 1 + && !mMufflerHatches.isEmpty(); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + private int adjustEUtForConfig(int rawEUt) { + int adjustedSteamOutput = rawEUt - (isSuperheated() ? 75 : 25) * integratedCircuitConfig; + return Math.max(adjustedSteamOutput, 25); + } + + private int adjustBurnTimeForConfig(int rawBurnTime) { + if (mEfficiency < getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000)) { + return rawBurnTime; + } + int adjustedEUt = Math.max(25, getEUt() - (isSuperheated() ? 75 : 25) * integratedCircuitConfig); + int adjustedBurnTime = rawBurnTime * getEUt() / adjustedEUt; + this.excessProjectedEU += getEUt() * rawBurnTime - adjustedEUt * adjustedBurnTime; + adjustedBurnTime += this.excessProjectedEU / adjustedEUt; + this.excessProjectedEU %= adjustedEUt; + return adjustedBurnTime; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 4, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 4, 0, elementBudget, env, false, true); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerBronze.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerBronze.java new file mode 100644 index 0000000000..5d0032df6a --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerBronze.java @@ -0,0 +1,96 @@ +package gregtech.common.tileentities.machines.multi; + +import net.minecraft.block.Block; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class MTELargeBoilerBronze extends MTELargeBoiler { + + public MTELargeBoilerBronze(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeBronzeBoilerPerSecond; + } + + public MTELargeBoilerBronze(String aName) { + super(aName); + pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeBronzeBoilerPerSecond; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeBoilerBronze(this.mName); + } + + @Override + public String getCasingMaterial() { + return "Bronze"; + } + + @Override + public String getCasingBlockType() { + return "Plated Bricks"; + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings1; + } + + @Override + public byte getCasingMeta() { + return 10; + } + + @Override + public byte getCasingTextureIndex() { + return 10; + } + + @Override + public Block getPipeBlock() { + return GregTechAPI.sBlockCasings2; + } + + @Override + public byte getPipeMeta() { + return 12; + } + + @Override + public Block getFireboxBlock() { + return GregTechAPI.sBlockCasings3; + } + + @Override + public byte getFireboxMeta() { + return 13; + } + + @Override + public byte getFireboxTextureIndex() { + return 45; + } + + @Override + public int getEUt() { + return 400; + } + + @Override + public int getEfficiencyIncrease() { + return 16; + } + + @Override + int runtimeBoost(int mTime) { + return mTime * 2; + } + + @Override + boolean isSuperheated() { + return false; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerSteel.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerSteel.java new file mode 100644 index 0000000000..32f78c15ef --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerSteel.java @@ -0,0 +1,96 @@ +package gregtech.common.tileentities.machines.multi; + +import net.minecraft.block.Block; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class MTELargeBoilerSteel extends MTELargeBoiler { + + public MTELargeBoilerSteel(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeSteelBoilerPerSecond; + } + + public MTELargeBoilerSteel(String aName) { + super(aName); + pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeSteelBoilerPerSecond; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeBoilerSteel(this.mName); + } + + @Override + public String getCasingMaterial() { + return "Steel"; + } + + @Override + public String getCasingBlockType() { + return "Machine Casings"; + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings2; + } + + @Override + public byte getCasingMeta() { + return 0; + } + + @Override + public byte getCasingTextureIndex() { + return 16; + } + + @Override + public Block getPipeBlock() { + return GregTechAPI.sBlockCasings2; + } + + @Override + public byte getPipeMeta() { + return 13; + } + + @Override + public Block getFireboxBlock() { + return GregTechAPI.sBlockCasings3; + } + + @Override + public byte getFireboxMeta() { + return 14; + } + + @Override + public byte getFireboxTextureIndex() { + return 46; + } + + @Override + public int getEUt() { + return 1000; + } + + @Override + public int getEfficiencyIncrease() { + return 12; + } + + @Override + int runtimeBoost(int mTime) { + return mTime; + } + + @Override + boolean isSuperheated() { + return false; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTitanium.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTitanium.java new file mode 100644 index 0000000000..2893a72008 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTitanium.java @@ -0,0 +1,96 @@ +package gregtech.common.tileentities.machines.multi; + +import net.minecraft.block.Block; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class MTELargeBoilerTitanium extends MTELargeBoiler { + + public MTELargeBoilerTitanium(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeTitaniumBoilerPerSecond; + } + + public MTELargeBoilerTitanium(String aName) { + super(aName); + pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeTitaniumBoilerPerSecond; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeBoilerTitanium(this.mName); + } + + @Override + public String getCasingMaterial() { + return "Titanium"; + } + + @Override + public String getCasingBlockType() { + return "Machine Casings"; + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public byte getCasingMeta() { + return 2; + } + + @Override + public byte getCasingTextureIndex() { + return 50; + } + + @Override + public Block getPipeBlock() { + return GregTechAPI.sBlockCasings2; + } + + @Override + public byte getPipeMeta() { + return 14; + } + + @Override + public Block getFireboxBlock() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public byte getFireboxMeta() { + return 3; + } + + @Override + public byte getFireboxTextureIndex() { + return 51; + } + + @Override + public int getEUt() { + return 4000; + } + + @Override + public int getEfficiencyIncrease() { + return 8; + } + + @Override + int runtimeBoost(int mTime) { + return mTime * 130 / 400; + } + + @Override + boolean isSuperheated() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTungstenSteel.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTungstenSteel.java new file mode 100644 index 0000000000..e47c74d58a --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeBoilerTungstenSteel.java @@ -0,0 +1,96 @@ +package gregtech.common.tileentities.machines.multi; + +import net.minecraft.block.Block; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class MTELargeBoilerTungstenSteel extends MTELargeBoiler { + + public MTELargeBoilerTungstenSteel(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeTungstenSteelBoilerPerSecond; + } + + public MTELargeBoilerTungstenSteel(String aName) { + super(aName); + pollutionPerSecond = GTMod.gregtechproxy.mPollutionLargeTungstenSteelBoilerPerSecond; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeBoilerTungstenSteel(this.mName); + } + + @Override + public String getCasingMaterial() { + return "TungstenSteel"; + } + + @Override + public String getCasingBlockType() { + return "Machine Casings"; + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public byte getCasingMeta() { + return 0; + } + + @Override + public byte getCasingTextureIndex() { + return 48; + } + + @Override + public Block getPipeBlock() { + return GregTechAPI.sBlockCasings2; + } + + @Override + public byte getPipeMeta() { + return 15; + } + + @Override + public Block getFireboxBlock() { + return GregTechAPI.sBlockCasings3; + } + + @Override + public byte getFireboxMeta() { + return 15; + } + + @Override + public byte getFireboxTextureIndex() { + return 47; + } + + @Override + public int getEUt() { + return 16000; + } + + @Override + public int getEfficiencyIncrease() { + return 4; + } + + @Override + int runtimeBoost(int mTime) { + return mTime * 120 / 750; + } + + @Override + boolean isSuperheated() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeChemicalReactor.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeChemicalReactor.java new file mode 100644 index 0000000000..a7e94c9ea5 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeChemicalReactor.java @@ -0,0 +1,291 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureUtility; +import com.gtnewhorizon.structurelib.util.ItemStackPredicate; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.interfaces.IHeatingCoil; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTELargeChemicalReactor extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable { + + private static final int CASING_INDEX = 176; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose(new String[][] { { "ccc", "cxc", "ccc" }, { "c~c", "xPx", "cxc" }, { "ccc", "cxc", "ccc" }, })) + .addElement('P', ofBlock(GregTechAPI.sBlockCasings8, 1)) + .addElement( + 'c', + buildHatchAdder(MTELargeChemicalReactor.class) + .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain( + onElementPass(MTELargeChemicalReactor::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings8, 0)))) + .addElement( + 'x', + buildHatchAdder(MTELargeChemicalReactor.class) + .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain( + CoilStructureElement.INSTANCE, + onElementPass(MTELargeChemicalReactor::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings8, 0)))) + .build(); + + private int mCasingAmount; + private int mCoilAmount; + + public MTELargeChemicalReactor(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeChemicalReactor(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeChemicalReactor(this.mName); + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Chemical Reactor") + .addInfo("Controller block for the Large Chemical Reactor") + .addInfo("Does not lose efficiency when overclocked") + .addInfo("Accepts fluids instead of fluid cells") + .addSeparator() + .beginStructureBlock(3, 3, 3, false) + .addController("Front center") + .addCasingInfoRange("Chemically Inert Machine Casing", 8, 22, false) + .addOtherStructurePart("PTFE Pipe Machine Casing", "Center") + .addOtherStructurePart("Heating Coil", "Adjacent to the PTFE Pipe Machine Casing", 1) + .addEnergyHatch("Any casing", 1, 2) + .addMaintenanceHatch("Any casing", 1, 2) + .addInputBus("Any casing", 1, 2) + .addInputHatch("Any casing", 1, 2) + .addOutputBus("Any casing", 1, 2) + .addOutputHatch("Any casing", 1, 2) + .addStructureInfo("You can have multiple hatches/busses") + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { casingTexturePages[1][48], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[1][48], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[1][48] }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.multiblockChemicalReactorRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().enablePerfectOverclock(); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + mCoilAmount = 0; + return checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 0) && mCasingAmount >= 8 + && mCoilAmount == 1 + && !mEnergyHatches.isEmpty() + && mMaintenanceHatches.size() == 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + mCoilAmount = 0; + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + mCoilAmount = 0; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + private enum CoilStructureElement implements IStructureElement { + + INSTANCE; + + @Override + public boolean check(MTELargeChemicalReactor t, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + if (block instanceof IHeatingCoil + && ((IHeatingCoil) block).getCoilHeat(world.getBlockMetadata(x, y, z)) != HeatingCoilLevel.None) { + return t.mCoilAmount++ == 0; + } else { + return false; + } + } + + @Override + public boolean spawnHint(MTELargeChemicalReactor t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, GregTechAPI.sBlockCasings5, 0); + return true; + } + + @Override + public boolean placeBlock(MTELargeChemicalReactor t, World world, int x, int y, int z, ItemStack trigger) { + if (t.mCoilAmount > 0) return false; + boolean b = world.setBlock(x, y, z, GregTechAPI.sBlockCasings5, 0, 3); + if (b) t.mCoilAmount++; + return b; + } + + @Override + public PlaceResult survivalPlaceBlock(MTELargeChemicalReactor t, World world, int x, int y, int z, + ItemStack trigger, IItemSource s, EntityPlayerMP actor, Consumer chatter) { + return survivalPlaceBlock(t, world, x, y, z, trigger, AutoPlaceEnvironment.fromLegacy(s, actor, chatter)); + } + + @Override + public BlocksToPlace getBlocksToPlace(MTELargeChemicalReactor gt_metaTileEntity_largeChemicalReactor, + World world, int x, int y, int z, ItemStack trigger, AutoPlaceEnvironment env) { + return BlocksToPlace.create( + IntStream.range(0, 8) + .mapToObj(i -> new ItemStack(GregTechAPI.sBlockCasings5, 1, i)) + .collect(Collectors.toList())); + } + + @Override + public PlaceResult survivalPlaceBlock(MTELargeChemicalReactor t, World world, int x, int y, int z, + ItemStack trigger, AutoPlaceEnvironment env) { + if (t.mCoilAmount > 0) return PlaceResult.SKIP; + if (check(t, world, x, y, z)) return PlaceResult.SKIP; + if (!StructureLibAPI.isBlockTriviallyReplaceable(world, x, y, z, env.getActor())) return PlaceResult.REJECT; + ItemStack result = env.getSource() + .takeOne(ItemStackPredicate.from(GregTechAPI.sBlockCasings5), true); + if (result == null) return PlaceResult.REJECT; + PlaceResult ret = StructureUtility.survivalPlaceBlock( + result, + ItemStackPredicate.NBTMode.EXACT, + null, + true, + world, + x, + y, + z, + env.getSource(), + env.getActor(), + env.getChatter()); + if (ret == PlaceResult.ACCEPT) t.mCoilAmount++; + return ret; + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeFluidExtractor.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeFluidExtractor.java new file mode 100644 index 0000000000..c19b8a061d --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeFluidExtractor.java @@ -0,0 +1,418 @@ +package gregtech.common.tileentities.machines.multi; + +import static bartworks.util.BWUtil.ofGlassTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.getCasingTextureForId; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; +import static gregtech.api.util.GTStructureUtility.ofFrame; +import static gregtech.api.util.GTStructureUtility.ofSolenoidCoil; +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.EnumChatFormatting.YELLOW; + +import java.util.ArrayList; +import java.util.Arrays; + +import javax.annotation.Nullable; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTELargeFluidExtractor extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final int CASING_INDEX = 48; // Robust Tungstensteel Machine Casing + private static final int BASE_CASING_COUNT = 24 + 24 + 9; + private static final int MAX_HATCHES_ALLOWED = 16; + + private static final double BASE_SPEED_BONUS = 1.5; + private static final double BASE_EU_MULTIPLIER = 0.8; + + private static final double SPEED_PER_COIL = 0.1; + private static final int PARALLELS_PER_SOLENOID = 8; + private static final double HEATING_COIL_EU_MULTIPLIER = 0.9; + + // spotless:off + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { + {" ", " ccc ", " ccc ", " ccc ", " "}, + {" ", " f f ", " s ", " f f ", " "}, + {" ", " f f ", " s ", " f f ", " "}, + {" ", " f f ", " s ", " f f ", " "}, + {"ccccc", "ccccc", "ccscc", "ccccc", "ccccc"}, + {"fgggf", "ghhhg", "ghshg", "ghhhg", "fgggf"}, + {"fgggf", "ghhhg", "ghshg", "ghhhg", "fgggf"}, + {"fgggf", "ghhhg", "ghshg", "ghhhg", "fgggf"}, + {"cc~cc", "ccccc", "ccccc", "ccccc", "ccccc"}, + })) + .addElement('c', + buildHatchAdder(MTELargeFluidExtractor.class) + .atLeast(InputBus, OutputBus, OutputHatch, Energy, Maintenance) + .casingIndex(CASING_INDEX) // Robust Tungstensteel Machine Casing + .dot(1) + .buildAndChain( + onElementPass( + MTELargeFluidExtractor::onCasingAdded, + ofBlock(GregTechAPI.sBlockCasings4, 0))) // Robust Tungstensteel Machine Casing + ) + .addElement( + 'g', + withChannel( + "glass", + ofGlassTiered( + (byte) 1, (byte) 127, (byte) 0, + MTELargeFluidExtractor::setGlassTier, + MTELargeFluidExtractor::getGlassTier, + 2)) + ) + .addElement( + 'h', + withChannel( + "coil", + ofCoil( + MTELargeFluidExtractor::setCoilLevel, + MTELargeFluidExtractor::getCoilLevel)) + ) + .addElement( + 's', + withChannel( + "solenoid", + ofSolenoidCoil( + MTELargeFluidExtractor::setSolenoidLevel, + MTELargeFluidExtractor::getSolenoidLevel)) + ) + .addElement( + 'f', + ofFrame(Materials.BlackSteel) + ) + .build(); + // spotless:on + + private byte mGlassTier = 0; + @Nullable + private HeatingCoilLevel mCoilLevel = null; + @Nullable + private Byte mSolenoidLevel = null; + private int mCasingAmount; + private boolean mStructureBadGlassTier = false, mStructureBadCasingCount = false; + + public MTELargeFluidExtractor(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeFluidExtractor(String aName) { + super(aName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public void clearHatches() { + super.clearHatches(); + + mCasingAmount = 0; + mStructureBadGlassTier = false; + mStructureBadCasingCount = false; + mGlassTier = 0; + mCoilLevel = null; + mSolenoidLevel = null; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 8, 0)) { + return false; + } + + if (mCasingAmount < (BASE_CASING_COUNT - MAX_HATCHES_ALLOWED)) { + mStructureBadCasingCount = true; + } + + for (var energyHatch : mEnergyHatches) { + if (energyHatch.getBaseMetaTileEntity() == null) { + continue; + } + + if (mGlassTier < 10 && energyHatch.getTierForStructure() > mGlassTier) { + mStructureBadGlassTier = true; + } + } + + return !mStructureBadGlassTier && !mStructureBadCasingCount; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 8, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 8, 0, elementBudget, env, false, true); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic(); + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + super.setProcessingLogicPower(logic); + logic.setAvailableAmperage(mEnergyHatches.size()); + logic.setEuModifier((float) (getEUMultiplier())); + logic.setMaxParallel(getParallels()); + logic.setSpeedBonus(1.0f / (float) (getSpeedBonus())); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeFluidExtractor(this.mName); + } + + private void onCasingAdded() { + mCasingAmount++; + } + + private byte getGlassTier() { + return mGlassTier; + } + + private void setGlassTier(byte tier) { + mGlassTier = tier; + } + + private HeatingCoilLevel getCoilLevel() { + return mCoilLevel; + } + + private void setCoilLevel(HeatingCoilLevel level) { + mCoilLevel = level; + } + + private Byte getSolenoidLevel() { + return mSolenoidLevel; + } + + private void setSolenoidLevel(byte level) { + mSolenoidLevel = level; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean active, boolean redstoneLevel) { + if (side == facing) { + if (active) { + return new ITexture[] { getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active) + .extFacing() + .build() }; + } else { + return new ITexture[] { getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(TexturesGtBlock.Overlay_Machine_Controller_Advanced) + .extFacing() + .build() }; + } + } + return new ITexture[] { getCasingTextureForId(CASING_INDEX) }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + + // spotless:off + tt.addMachineType("Fluid Extractor") + .addInfo("Controller block for the Large Fluid Extractor") + .addInfo(String.format( + "%d%% faster than single block machines of the same voltage", + (int) Math.round((BASE_SPEED_BONUS - 1) * 100) + )) + .addInfo(String.format( + "Only uses %d%% of the EU/t normally required", + (int) Math.round(BASE_EU_MULTIPLIER * 100) + )) + .addInfo(String.format( + "Every coil tier gives a +%d%% speed bonus and a %d%% EU/t discount (multiplicative)", + (int) Math.round(SPEED_PER_COIL * 100), + (int) Math.round((1 - HEATING_COIL_EU_MULTIPLIER) * 100) + )) + .addInfo(String.format( + "Every solenoid tier gives +%d parallels", + (int) PARALLELS_PER_SOLENOID + )) + .addInfo(String.format( + "The EU multiplier is %s%.2f * (%.2f ^ Heating Coil Tier)%s, prior to overclocks", + EnumChatFormatting.ITALIC, + BASE_EU_MULTIPLIER, + HEATING_COIL_EU_MULTIPLIER, + EnumChatFormatting.GRAY + )) + .addInfo("The energy hatch tier is limited by the glass tier. UEV glass unlocks all tiers.") + .addSeparator() + .beginStructureBlock(5, 9, 5, false) + .addController("Front Center (Bottom Layer)") + .addCasingInfoMin("Robust Tungstensteel Machine Casing", BASE_CASING_COUNT - MAX_HATCHES_ALLOWED, false) + .addCasingInfoExactly("Borosilicate Glass (any)", 9 * 4, true) + .addCasingInfoExactly("Solenoid Superconducting Coil (any)", 7, true) + .addCasingInfoExactly("Heating Coils (any)", 8 * 3, true) + .addCasingInfoExactly("Black Steel Frame Box", 3 * 8, false) + .addInputBus("Any Robust Tungstensteel Machine Casing", 1) + .addOutputBus("Any Robust Tungstensteel Machine Casing", 1) + .addOutputHatch("Any Robust Tungstensteel Machine Casing", 1) + .addEnergyHatch("Any Robust Tungstensteel Machine Casing", 1) + .addMaintenanceHatch("Any Robust Tungstensteel Machine Casing", 1) + .toolTipFinisher("GregTech"); + // spotless:on + + return tt; + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + + screenElements.widgets(TextWidget.dynamicString(() -> { + if (mStructureBadCasingCount) { + return String.format( + "%sNot enough casings: need %d, but\nhave %d.%s", + EnumChatFormatting.DARK_RED, + BASE_CASING_COUNT - MAX_HATCHES_ALLOWED, + mCasingAmount, + RESET); + } + + if (mStructureBadGlassTier) { + int hatchTier = 0; + + for (var hatch : mEnergyHatches) { + if (hatch.mTier > hatchTier) hatchTier = hatch.mTier; + } + + return String.format( + "%sEnergy hatch tier (%s) is too high\nfor the glass tier (%s).%s", + EnumChatFormatting.DARK_RED, + VN[hatchTier], + VN[mGlassTier], + RESET); + } + + return ""; + }) + .setTextAlignment(Alignment.CenterLeft)); + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10_000; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.fluidExtractionRecipes; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + public String[] getInfoData() { + var data = new ArrayList(); + + data.addAll(Arrays.asList(super.getInfoData())); + + data.add(String.format("Max Parallels: %s%d%s", YELLOW, getParallels(), RESET)); + data.add(String.format("Heating Coil Speed Bonus: +%s%.0f%s %%", YELLOW, getCoilSpeedBonus() * 100, RESET)); + data.add(String.format("Total Speed Multiplier: %s%.0f%s %%", YELLOW, getSpeedBonus() * 100, RESET)); + data.add(String.format("Total EU/t Multiplier: %s%.0f%s %%", YELLOW, getEUMultiplier() * 100, RESET)); + + return data.toArray(new String[data.size()]); + } + + public int getParallels() { + return Math.max(1, mSolenoidLevel == null ? 0 : (PARALLELS_PER_SOLENOID * mSolenoidLevel)); + } + + public float getCoilSpeedBonus() { + return (float) ((mCoilLevel == null ? 0 : SPEED_PER_COIL * mCoilLevel.getTier())); + } + + public float getSpeedBonus() { + return (float) (BASE_SPEED_BONUS + getCoilSpeedBonus()); + } + + public float getEUMultiplier() { + double heatingBonus = (mCoilLevel == null ? 0 : Math.pow(HEATING_COIL_EU_MULTIPLIER, mCoilLevel.getTier())); + + return (float) (BASE_EU_MULTIPLIER * heatingBonus); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java new file mode 100644 index 0000000000..15dc5def03 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbine.java @@ -0,0 +1,490 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Dynamo; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.TURBINE_NEW; +import static gregtech.api.enums.Textures.BlockIcons.TURBINE_NEW_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.TURBINE_NEW_EMPTY; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; +import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTUtility; +import gregtech.api.util.LightingHelper; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.items.MetaGeneratedTool01; +import gregtech.common.render.GTRenderUtil; + +public abstract class MTELargeTurbine extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { + + @Override + protected IStructureDefinition computeValue(Class type) { + return StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { " ", " ", " ", " ", " ", }, + { " --- ", " ccc ", " hhh ", " hhh ", " hhh ", }, + { " --- ", " c~c ", " h-h ", " h-h ", " hdh ", }, + { " --- ", " ccc ", " hhh ", " hhh ", " hhh ", }, + { " ", " ", " ", " ", " ", }, })) + .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMeta()))) + .addElement('d', lazy(t -> Dynamo.newAny(t.getCasingTextureIndex(), 1))) + .addElement( + 'h', + lazy( + t -> buildHatchAdder(MTELargeTurbine.class) + .atLeast(Maintenance, InputHatch, OutputHatch, OutputBus, InputBus, Muffler) + .casingIndex(t.getCasingTextureIndex()) + .dot(2) + .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) + .build(); + } + }; + + protected int baseEff = 0; + protected int optFlow = 0; + protected double realOptFlow = 0; + protected int storedFluid = 0; + protected int counter = 0; + protected boolean looseFit = false; + protected int overflowMultiplier = 0; + protected final float[] flowMultipliers = new float[] { 1, 1, 1 }; + + // client side stuff + protected boolean mHasTurbine; + // mMachine got overwritten by StructureLib extended facing query response + // so we use a separate field for this + protected boolean mFormed; + + public MTELargeTurbine(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbine(String aName) { + super(aName); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return getMaxEfficiency(aStack) > 0; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> r.isNotRotated() && f.isNotFlipped(); + } + + @Override + protected ExtendedFacing getCorrectedAlignment(ExtendedFacing aOldFacing) { + return aOldFacing.with(Flip.NONE) + .with(Rotation.NORMAL); + } + + @Override + public boolean isFlipChangeAllowed() { + return false; + } + + @Override + public boolean isRotationChangeAllowed() { + return false; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return checkPiece(STRUCTURE_PIECE_MAIN, 2, 2, 1) && mMaintenanceHatches.size() == 1 + && mMufflerHatches.isEmpty() == (getPollutionPerTick(null) == 0); + } + + public abstract Block getCasingBlock(); + + public abstract byte getCasingMeta(); + + public abstract int getCasingTextureIndex(); + + public boolean isNewStyleRendering() { + return false; + } + + public IIconContainer[] getTurbineTextureActive() { + return TURBINE_NEW_ACTIVE; + } + + public IIconContainer[] getTurbineTextureFull() { + return TURBINE_NEW; + } + + public IIconContainer[] getTurbineTextureEmpty() { + return TURBINE_NEW_EMPTY; + } + + @Override + public boolean renderInWorld(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, RenderBlocks aRenderer) { + if (!isNewStyleRendering() || !mFormed) return false; + int[] tABCCoord = new int[] { -1, -1, 0 }; + int[] tXYZOffset = new int[3]; + final ForgeDirection tFacing = getBaseMetaTileEntity().getFrontFacing(); + final ExtendedFacing tExtendedFacing = getExtendedFacing(); + final ForgeDirection tDirection = tExtendedFacing.getDirection(); + final LightingHelper tLighting = new LightingHelper(aRenderer); + + // for some reason +x and -z need this field set to true, but not any other sides + if (tFacing == ForgeDirection.NORTH || tFacing == ForgeDirection.EAST) aRenderer.field_152631_f = true; + final Block tBlock = getCasingBlock(); + + IIconContainer[] tTextures; + if (getBaseMetaTileEntity().isActive()) tTextures = getTurbineTextureActive(); + else if (hasTurbine()) tTextures = getTurbineTextureFull(); + else tTextures = getTurbineTextureEmpty(); + + assert tTextures != null && tTextures.length == tABCCoord.length; + + for (int i = 0; i < 9; i++) { + if (i != 4) { // do not draw ourselves again. + tExtendedFacing.getWorldOffset(tABCCoord, tXYZOffset); + // since structure check passed, we can assume it is turbine casing + int tX = tXYZOffset[0] + aX; + int tY = tXYZOffset[1] + aY; + int tZ = tXYZOffset[2] + aZ; + // we skip the occlusion test, as we always require a working turbine to have a block of air before it + // so the front face cannot be occluded whatsoever in the most cases. + Tessellator.instance.setBrightness( + tBlock.getMixedBrightnessForBlock( + aWorld, + aX + tDirection.offsetX, + tY + tDirection.offsetY, + aZ + tDirection.offsetZ)); + tLighting.setupLighting(tBlock, tX, tY, tZ, tFacing) + .setupColor(tFacing, Dyes._NULL.mRGBa); + GTRenderUtil.renderBlockIcon( + aRenderer, + tBlock, + tX + tDirection.offsetX * 0.01, + tY + tDirection.offsetY * 0.01, + tZ + tDirection.offsetZ * 0.01, + tTextures[i].getIcon(), + tFacing); + } + if (++tABCCoord[0] == 2) { + tABCCoord[0] = -1; + tABCCoord[1]++; + } + } + + aRenderer.field_152631_f = false; + return false; + } + + @Override + public void onValueUpdate(byte aValue) { + mHasTurbine = (aValue & 0x1) != 0; + mFormed = (aValue & 0x2) != 0; + super.onValueUpdate(aValue); + } + + @Override + public byte getUpdateData() { + return (byte) ((hasTurbine() ? 1 : 0) | (mMachine ? 2 : 0)); + } + + @Override + public boolean addToMachineList(IGregTechTileEntity tTileEntity, int aBaseCasingIndex) { + return addMaintenanceToMachineList(tTileEntity, getCasingTextureIndex()) + || addInputToMachineList(tTileEntity, getCasingTextureIndex()) + || addOutputToMachineList(tTileEntity, getCasingTextureIndex()) + || addMufflerToMachineList(tTileEntity, getCasingTextureIndex()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + ItemStack controllerSlot = getControllerSlot(); + if ((counter & 7) == 0 && (controllerSlot == null || !(controllerSlot.getItem() instanceof MetaGeneratedTool) + || controllerSlot.getItemDamage() < 170 + || controllerSlot.getItemDamage() > 179)) { + stopMachine(ShutDownReasonRegistry.NO_TURBINE); + return CheckRecipeResultRegistry.NO_TURBINE_FOUND; + } + ArrayList tFluids = getStoredFluids(); + if (!tFluids.isEmpty()) { + + if (baseEff == 0 || optFlow == 0 + || counter >= 512 + || this.getBaseMetaTileEntity() + .hasWorkJustBeenEnabled() + || this.getBaseMetaTileEntity() + .hasInventoryBeenModified()) { + counter = 0; + baseEff = GTUtility.safeInt( + (long) ((5F + ((MetaGeneratedTool) controllerSlot.getItem()).getToolCombatDamage(controllerSlot)) + * 1000F)); + optFlow = GTUtility.safeInt( + (long) Math.max( + Float.MIN_NORMAL, + ((MetaGeneratedTool) controllerSlot.getItem()).getToolStats(controllerSlot) + .getSpeedMultiplier() * MetaGeneratedTool.getPrimaryMaterial(controllerSlot).mToolSpeed + * 50)); + + overflowMultiplier = getOverflowMultiplier(controllerSlot); + + flowMultipliers[0] = MetaGeneratedTool.getPrimaryMaterial(controllerSlot).mSteamMultiplier; + flowMultipliers[1] = MetaGeneratedTool.getPrimaryMaterial(controllerSlot).mGasMultiplier; + flowMultipliers[2] = MetaGeneratedTool.getPrimaryMaterial(controllerSlot).mPlasmaMultiplier; + + if (optFlow <= 0 || baseEff <= 0) { + stopMachine(ShutDownReasonRegistry.NONE); // in case the turbine got removed + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + } else { + counter++; + } + } + + int newPower = fluidIntoPower(tFluids, optFlow, baseEff, overflowMultiplier, flowMultipliers); // How much the + // turbine should + // be producing + // with this flow + int difference = newPower - this.mEUt; // difference between current output and new output + + // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the difference in + // power level (per tick) + // This is how much the turbine can actually change during this tick + int maxChangeAllowed = Math.max(10, GTUtility.safeInt((long) Math.abs(difference) / 100)); + + if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed change + int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative. + this.mEUt += change; // Apply the change + } else this.mEUt = newPower; + + if (this.mEUt <= 0) { + // stopMachine(); + this.mEUt = 0; + this.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } else { + this.mMaxProgresstime = 1; + this.mEfficiencyIncrease = 10; + // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. + return CheckRecipeResultRegistry.GENERATING; + } + } + + abstract int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowMultiplier, + float[] flowMultipliers); + + abstract float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier); + + // Gets the maximum output that the turbine currently can handle. Going above this will cause the turbine to explode + public long getMaximumOutput() { + long aTotal = 0; + for (MTEHatchDynamo aDynamo : filterValidMTEs(mDynamoHatches)) { + long aVoltage = aDynamo.maxEUOutput(); + aTotal = aDynamo.maxAmperesOut() * aVoltage; + } + return aTotal; + } + + public int getOverflowMultiplier(ItemStack aStack) { + int aOverflowMultiplier = 0; + int toolQualityLevel = MetaGeneratedTool.getPrimaryMaterial(aStack).mToolQuality; + if (toolQualityLevel >= 6) { + aOverflowMultiplier = 3; + } else if (toolQualityLevel >= 3) { + aOverflowMultiplier = 2; + } else { + aOverflowMultiplier = 1; + } + return aOverflowMultiplier; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) { + return 0; + } + if (aStack.getItem() instanceof MetaGeneratedTool01) { + return 10000; + } + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return true; + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = 0; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); + } + + String tRunning = mMaxProgresstime > 0 + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.running.true") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.running.false") + + EnumChatFormatting.RESET; + String tMaintainance = getIdealStatus() == getRepairStatus() + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") + + EnumChatFormatting.RESET; + int tDura = 0; + + if (mInventory[1] != null && mInventory[1].getItem() instanceof MetaGeneratedTool01) { + tDura = GTUtility.safeInt( + (long) (100.0f / MetaGeneratedTool.getToolMaxDamage(mInventory[1]) + * (MetaGeneratedTool.getToolDamage(mInventory[1])) + 1)); + } + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchDynamo tHatch : filterValidMTEs(mDynamoHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + String[] ret = new String[] { + // 8 Lines available for information panels + tRunning + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(((long) mEUt * mEfficiency) / 10000) + + EnumChatFormatting.RESET + + " EU/t", /* 1 */ + tMaintainance, /* 2 */ + StatCollector.translateToLocal("GT5U.turbine.efficiency") + ": " + + EnumChatFormatting.YELLOW + + (mEfficiency / 100F) + + EnumChatFormatting.RESET + + "%", /* 2 */ + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + /* 3 */ EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.turbine.flow") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(GTUtility.safeInt((long) realOptFlow)) + + EnumChatFormatting.RESET + + " L/t" + + /* 4 */ EnumChatFormatting.YELLOW + + " (" + + (looseFit ? StatCollector.translateToLocal("GT5U.turbine.loose") + : StatCollector.translateToLocal("GT5U.turbine.tight")) + + ")", /* 5 */ + StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " + + EnumChatFormatting.GOLD + + GTUtility.formatNumbers(storedFluid) + + EnumChatFormatting.RESET + + "L", /* 6 */ + StatCollector.translateToLocal( + "GT5U.turbine.dmg") + ": " + EnumChatFormatting.RED + tDura + EnumChatFormatting.RESET + "%", /* 7 */ + StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %" /* 8 */ + }; + if (!this.getClass() + .getName() + .contains("Steam")) + ret[4] = StatCollector.translateToLocal("GT5U.turbine.flow") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.safeInt((long) realOptFlow) + + EnumChatFormatting.RESET + + " L/t"; + return ret; + } + + public boolean hasTurbine() { + return getBaseMetaTileEntity() != null && getBaseMetaTileEntity().isClientSide() ? mHasTurbine + : this.getMaxEfficiency(mInventory[1]) > 0; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 2, 1); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 2, 1, elementBudget, env, false, true); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java new file mode 100644 index 0000000000..268bbf5da4 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGas.java @@ -0,0 +1,220 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW5; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_ACTIVE5; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_EMPTY5; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTELargeTurbineGas extends MTELargeTurbine { + + public MTELargeTurbineGas(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbineGas(String aName) { + super(aName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + return new ITexture[] { MACHINE_CASINGS[1][colorIndex + 1], + aFacing == side ? (aActive ? TextureFactory.builder() + .addIcon(LARGETURBINE_NEW_ACTIVE5) + .build() + : hasTurbine() ? TextureFactory.builder() + .addIcon(LARGETURBINE_NEW5) + .build() + : TextureFactory.builder() + .addIcon(LARGETURBINE_NEW_EMPTY5) + .build()) + : casingTexturePages[0][58] }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Gas Turbine") + .addInfo("Controller block for the Large Gas Turbine") + .addInfo("Needs a Turbine, place inside controller") + // .addInfo("The excess fuel that gets consumed will be voided!") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 4, true) + .addController("Front center") + .addCasingInfoRange("Stainless Steel Turbine Casing", 8, 30, false) + .addDynamoHatch("Back center", 1) + .addMaintenanceHatch("Side centered", 2) + .addMufflerHatch("Side centered", 2) + .addInputHatch("Gas Fuel, Side centered", 2) + .addOtherStructurePart("Air", "3x3 area in front of controller") + .toolTipFinisher("Gregtech"); + return tt; + } + + public int getFuelValue(FluidStack aLiquid) { + if (aLiquid == null) return 0; + GTRecipe tFuel = RecipeMaps.gasTurbineFuels.getBackend() + .findFuel(aLiquid); + if (tFuel != null) return tFuel.mSpecialValue; + return 0; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeTurbineGas(mName); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.gasTurbineFuels; + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public byte getCasingMeta() { + return 10; + } + + @Override + public int getCasingTextureIndex() { + return 58; + } + + @Override + public boolean isNewStyleRendering() { + return true; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTMod.gregtechproxy.mPollutionLargeGasTurbinePerSecond; + } + + @Override + int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowMultiplier, + float[] flowMultipliers) { + if (aFluids.size() >= 1) { + int tEU = 0; + int actualOptimalFlow = 0; + + FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. + // Doesn't matter which one. Ignore the rest! + int fuelValue = getFuelValue(firstFuelType); + + if (aOptFlow < fuelValue) { + // turbine too weak and/or fuel too powerful + // at least consume 1L + this.realOptFlow = 1; + // wastes the extra fuel and generate aOptFlow directly + depleteInput(new FluidStack(firstFuelType, 1)); + this.storedFluid += 1; + return GTUtility.safeInt((long) aOptFlow * (long) aBaseEff / 10000L); + } + + actualOptimalFlow = GTUtility.safeInt((long) (aOptFlow * flowMultipliers[1] / fuelValue)); + this.realOptFlow = actualOptimalFlow; + + // Allowed to use up to 450% optimal flow rate, depending on the value of overflowMultiplier. + // This value is chosen because the highest EU/t possible depends on the overflowMultiplier, and the formula + // used + // makes it so the flow rate for that max, per value of overflowMultiplier, is (percentage of optimal flow + // rate): + // - 150% if it is 1 + // - 300% if it is 2 + // - 450% if it is 3 + // Variable required outside of loop for multi-hatch scenarios. + int remainingFlow = GTUtility.safeInt((long) (actualOptimalFlow * (1.5f * overflowMultiplier))); + int flow = 0; + int totalFlow = 0; + + storedFluid = 0; + for (FluidStack aFluid : aFluids) { + if (aFluid.isFluidEqual(firstFuelType)) { + flow = Math.min(aFluid.amount, remainingFlow); // try to use up to the max flow defined just above + depleteInput(new FluidStack(aFluid, flow)); // deplete that amount + this.storedFluid += aFluid.amount; + remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches + totalFlow += flow; // track total input used + } + } + if (totalFlow <= 0) return 0; + tEU = GTUtility.safeInt((long) totalFlow * fuelValue); + + if (totalFlow != actualOptimalFlow) { + float efficiency = getOverflowEfficiency(totalFlow, actualOptimalFlow, overflowMultiplier); + tEU *= efficiency; + } + tEU = GTUtility.safeInt((long) tEU * (long) aBaseEff / 10000L); + + // EU/t output cap to properly tier the LGT against the Advanced LGT, will be implemented in a future dev + // update + /* + * if (tEU > 8192) { tEU = 8192; } + */ + + // If next output is above the maximum the dynamo can handle, set it to the maximum instead of exploding the + // turbine + // Raising the maximum allowed flow rate to account for the efficiency changes beyond the optimal flow + // When the max fuel consumption rate was increased, turbines could explode on world load + if (tEU > getMaximumOutput()) { + tEU = GTUtility.safeInt(getMaximumOutput()); + } + return tEU; + } + return 0; + } + + @Override + float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier) { + // overflowMultiplier changes how quickly the turbine loses efficiency after flow goes beyond the optimal value + // At the default value of 1, any flow will generate less EU/t than optimal flow, regardless of the amount of + // fuel used + // The bigger this number is, the slower efficiency loss happens as flow moves beyond the optimal value + // Gases are the second most efficient in this regard, with plasma being the most efficient + float efficiency = 0; + + if (totalFlow > actualOptimalFlow) { + efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow)) + / ((float) actualOptimalFlow * ((overflowMultiplier * 3) - 1)); + } else { + efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); + } + + return efficiency; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java new file mode 100644 index 0000000000..5b983ddc1b --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineGasAdvanced.java @@ -0,0 +1,219 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW5; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_ACTIVE5; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_EMPTY5; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTELargeTurbineGasAdvanced extends MTELargeTurbine { + + public MTELargeTurbineGasAdvanced(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbineGasAdvanced(String aName) { + super(aName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + return new ITexture[] { MACHINE_CASINGS[1][colorIndex + 1], + aFacing == side ? (aActive ? TextureFactory.builder() + .addIcon(LARGETURBINE_NEW_ACTIVE5) + .build() + : hasTurbine() ? TextureFactory.builder() + .addIcon(LARGETURBINE_NEW5) + .build() + : TextureFactory.builder() + .addIcon(LARGETURBINE_NEW_EMPTY5) + .build()) + : casingTexturePages[1][57] }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Gas Turbine") + .addInfo("Warning: This is an experimental multiblock, subject to changes ") + .addInfo("Controller block for the Large Advanced Gas Turbine") + .addInfo("Needs a Turbine, place inside controller") + .addInfo("Only accepts gases above 800k EU/bucket") + .addInfo("Has no maximum EU/t output, only depends on the Dynamo Hatch") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 4, true) + .addController("Front center") + .addCasingInfoRange("Advanced Gas Turbine Casing", 8, 30, false) + .addDynamoHatch("Back center", 1) + .addMaintenanceHatch("Side centered", 2) + .addMufflerHatch("Side centered", 2) + .addInputHatch("Gas Fuel, Side centered", 2) + .toolTipFinisher("Gregtech"); + return tt; + } + + public int getFuelValue(FluidStack aLiquid) { + if (aLiquid == null) return 0; + GTRecipe tFuel = RecipeMaps.gasTurbineFuels.getBackend() + .findFuel(aLiquid); + if (tFuel != null) return tFuel.mSpecialValue; + return 0; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeTurbineGasAdvanced(mName); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.gasTurbineFuels; + } + + @Override + public int getRecipeCatalystPriority() { + return -2; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings8; + } + + @Override + public byte getCasingMeta() { + return 9; + } + + @Override + public int getCasingTextureIndex() { + return 185; + } + + @Override + public boolean isNewStyleRendering() { + return true; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTMod.gregtechproxy.mPollutionLargeGasTurbinePerSecond; + } + + @Override + int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowMultiplier, + float[] flowMultipliers) { + if (aFluids.size() >= 1) { + int tEU = 0; + int actualOptimalFlow = 0; + + FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. + // Doesn't matter which one. Ignore the rest! + int fuelValue = getFuelValue(firstFuelType); + + if (fuelValue < 100) { + return 0; + } + + if (aOptFlow < fuelValue) { + // turbine too weak and/or fuel too powerful + // at least consume 1L + this.realOptFlow = 1; + // wastes the extra fuel and generate aOptFlow directly + depleteInput(new FluidStack(firstFuelType, 1)); + this.storedFluid += 1; + return GTUtility.safeInt((long) aOptFlow * (long) aBaseEff / 10000L); + } + + actualOptimalFlow = GTUtility.safeInt((long) (aOptFlow * flowMultipliers[1] / fuelValue)); + this.realOptFlow = actualOptimalFlow; + + // Allowed to use up to 450% optimal flow rate, depending on the value of overflowMultiplier. + // This value is chosen because the highest EU/t possible depends on the overflowMultiplier, and the formula + // used + // makes it so the flow rate for that max, per value of overflowMultiplier, is (percentage of optimal flow + // rate): + // - 150% if it is 1 + // - 300% if it is 2 + // - 450% if it is 3 + // Variable required outside of loop for multi-hatch scenarios. + int remainingFlow = GTUtility.safeInt((long) (actualOptimalFlow * (1.5f * overflowMultiplier))); + int flow = 0; + int totalFlow = 0; + + storedFluid = 0; + for (FluidStack aFluid : aFluids) { + if (aFluid.isFluidEqual(firstFuelType)) { + flow = Math.min(aFluid.amount, remainingFlow); // try to use up to the max flow defined just above + depleteInput(new FluidStack(aFluid, flow)); // deplete that amount + this.storedFluid += aFluid.amount; + remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches + totalFlow += flow; // track total input used + } + } + if (totalFlow <= 0) return 0; + tEU = GTUtility.safeInt((long) totalFlow * fuelValue); + + if (totalFlow != actualOptimalFlow) { + float efficiency = getOverflowEfficiency(totalFlow, actualOptimalFlow, overflowMultiplier); + tEU *= efficiency; + } + tEU = GTUtility.safeInt((long) tEU * (long) aBaseEff / 10000L); + + // If next output is above the maximum the dynamo can handle, set it to the maximum instead of exploding the + // turbine + // Raising the maximum allowed flow rate to account for the efficiency changes beyond the optimal flow + // When the max fuel consumption rate was increased, turbines could explode on world load + if (tEU > getMaximumOutput()) { + tEU = GTUtility.safeInt(getMaximumOutput()); + } + return tEU; + } + return 0; + } + + @Override + float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier) { + // overflowMultiplier changes how quickly the turbine loses efficiency after flow goes beyond the optimal value + // At the default value of 1, any flow will generate less EU/t than optimal flow, regardless of the amount of + // fuel used + // The bigger this number is, the slower efficiency loss happens as flow moves beyond the optimal value + // Gases are the second most efficient in this regard, with plasma being the most efficient + float efficiency = 0; + + if (totalFlow > actualOptimalFlow) { + efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow)) + / ((float) actualOptimalFlow * ((overflowMultiplier * 3) - 1)); + } else { + efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); + } + + return efficiency; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineHPSteam.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineHPSteam.java new file mode 100644 index 0000000000..e0f3669d39 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineHPSteam.java @@ -0,0 +1,232 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW5; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_ACTIVE5; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_EMPTY5; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; +import static gregtech.common.tileentities.machines.multi.MTELargeTurbineSteam.calculateLooseFlow; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTELargeTurbineHPSteam extends MTELargeTurbine { + + public boolean achievement = false; + private boolean looseFit = false; + + public MTELargeTurbineHPSteam(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbineHPSteam(String aName) { + super(aName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + return new ITexture[] { MACHINE_CASINGS[1][colorIndex + 1], + aFacing == side ? (aActive ? TextureFactory.builder() + .addIcon(LARGETURBINE_NEW_ACTIVE5) + .build() + : hasTurbine() ? TextureFactory.builder() + .addIcon(LARGETURBINE_NEW5) + .build() + : TextureFactory.builder() + .addIcon(LARGETURBINE_NEW_EMPTY5) + .build()) + : casingTexturePages[0][59] }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Steam Turbine") + .addInfo("Controller block for the Large High Pressure Steam Turbine") + .addInfo("Needs a Turbine, place inside controller") + .addInfo("Outputs Steam as well as producing power") + .addInfo("Power output depends on turbine and fitting") + .addInfo("Use screwdriver to adjust fitting of turbine") + .addSeparator() + .beginStructureBlock(3, 3, 4, true) + .addController("Front center") + .addCasingInfoRange("Titanium Turbine Casing", 8, 31, false) + .addDynamoHatch("Back center", 1) + .addMaintenanceHatch("Side centered", 2) + .addInputHatch("Superheated Steam, Side centered", 2) + .addOutputHatch("Steam, Side centered", 2) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeTurbineHPSteam(mName); + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public byte getCasingMeta() { + return 11; + } + + @Override + public int getCasingTextureIndex() { + return 59; + } + + @Override + public boolean isNewStyleRendering() { + return true; + } + + @Override + int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowEfficiency, + float[] flowMultipliers) { + if (looseFit) { + float[] calculatedFlow = calculateLooseFlow(aOptFlow, aBaseEff); + aOptFlow = GTUtility.safeInt((long) calculatedFlow[0]); + aBaseEff = GTUtility.safeInt((long) calculatedFlow[1]); + } + int tEU = 0; + int totalFlow = 0; // Byproducts are based on actual flow + int flow = 0; + + // Allowed to use up to 300% optimal flow rate, depending on the value of overflowMultiplier. + // This value is chosen because the highest EU/t possible depends on the overflowMultiplier, and the formula + // used + // makes it so the flow rate for that max, per value of overflowMultiplier, is (percentage of optimal flow + // rate): + // - 200% if it is 1 + // - 250% if it is 2 + // - 300% if it is 3 + // Variable required outside of loop for multi-hatch scenarios. + this.realOptFlow = aOptFlow * flowMultipliers[0]; + int remainingFlow = GTUtility.safeInt((long) (realOptFlow * (0.5f * overflowMultiplier + 1.5))); + + storedFluid = 0; + for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { + final FluidStack aFluidStack = aFluids.get(i); + if (GTModHandler.isSuperHeatedSteam(aFluidStack)) { + flow = Math.min(aFluidStack.amount, remainingFlow); // try to use up to the max flow defined just above + depleteInput(new FluidStack(aFluidStack, flow)); // deplete that amount + this.storedFluid += aFluidStack.amount; + remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches + totalFlow += flow; // track total input used + if (!achievement) { + try { + GTMod.achievements.issueAchievement( + this.getBaseMetaTileEntity() + .getWorld() + .getPlayerEntityByName( + this.getBaseMetaTileEntity() + .getOwnerName()), + "efficientsteam"); + } catch (Exception ignored) {} + achievement = true; + } + } else if (GTModHandler.isAnySteam(aFluidStack)) { + depleteInput(new FluidStack(aFluidStack, aFluidStack.amount)); + } + } + if (totalFlow <= 0) return 0; + tEU = totalFlow; + addOutput(GTModHandler.getSteam(totalFlow)); + if (totalFlow == (GTUtility.safeInt((long) realOptFlow))) { + tEU = GTUtility.safeInt((long) tEU * (long) aBaseEff / 10000L); + } else { + float efficiency = getOverflowEfficiency( + totalFlow, + (GTUtility.safeInt((long) realOptFlow)), + overflowMultiplier); + tEU *= efficiency; + tEU = Math.max(1, GTUtility.safeInt((long) tEU * (long) aBaseEff / 10000L)); + } + + // If next output is above the maximum the dynamo can handle, set it to the maximum instead of exploding the + // turbine + // Raising the maximum allowed flow rate to account for the efficiency changes beyond the optimal flow rate can + // explode turbines on world load + if (tEU > getMaximumOutput()) { + tEU = GTUtility.safeInt(getMaximumOutput()); + } + + return tEU; + } + + @Override + float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier) { + // overflowMultiplier changes how quickly the turbine loses efficiency after flow goes beyond the optimal value + // At the default value of 1, any flow will generate less EU/t than optimal flow, regardless of the amount of + // fuel used + // The bigger this number is, the slower efficiency loss happens as flow moves beyond the optimal value + // Superheated steam is the second least efficient out of all turbine fuels in this regard, with steam being the + // least efficient + float efficiency = 0; + + if (totalFlow > actualOptimalFlow) { + efficiency = 1.0f + - Math.abs((totalFlow - actualOptimalFlow)) / ((float) actualOptimalFlow * (overflowMultiplier + 2)); + } else { + efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); + } + + return efficiency; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + looseFit ^= true; + GTUtility.sendChatToPlayer( + aPlayer, + looseFit ? GTUtility.trans("500", "Fitting: Loose - More Flow") + : GTUtility.trans("501", "Fitting: Tight - More Efficiency")); + } + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return (looseFit && XSTR_INSTANCE.nextInt(4) == 0) ? 0 : 1; + } + + @Override + public String[] getInfoData() { + super.looseFit = looseFit; + return super.getInfoData(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("turbineFitting", looseFit); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + looseFit = aNBT.getBoolean("turbineFitting"); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbinePlasma.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbinePlasma.java new file mode 100644 index 0000000000..667d52a4cd --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbinePlasma.java @@ -0,0 +1,389 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW5; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_ACTIVE5; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_EMPTY5; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.items.MetaGeneratedTool01; + +public class MTELargeTurbinePlasma extends MTELargeTurbine { + + public MTELargeTurbinePlasma(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbinePlasma(String aName) { + super(aName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + return new ITexture[] { MACHINE_CASINGS[1][colorIndex + 1], + aFacing == side ? (aActive ? TextureFactory.builder() + .addIcon(LARGETURBINE_NEW_ACTIVE5) + .build() + : hasTurbine() ? TextureFactory.builder() + .addIcon(LARGETURBINE_NEW5) + .build() + : TextureFactory.builder() + .addIcon(LARGETURBINE_NEW_EMPTY5) + .build()) + : casingTexturePages[0][60] }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Plasma Turbine") + .addInfo("Controller block for the Large Plasma Generator") + .addInfo("Needs a Turbine, place inside controller") + .addInfo("Use your Fusion Reactor to produce the Plasma") + .addSeparator() + .beginStructureBlock(3, 3, 4, true) + .addController("Front center") + .addCasingInfoRange("Tungstensteel Turbine Casing", 8, 31, false) + .addDynamoHatch("Back center", 1) + .addMaintenanceHatch("Side centered", 2) + .addInputHatch("Plasma Fluid, Side centered", 2) + .addOutputHatch("Molten Fluid, optional, Side centered", 2) + .toolTipFinisher("Gregtech"); + return tt; + } + + public int getFuelValue(FluidStack aLiquid) { + if (aLiquid == null) return 0; + GTRecipe tFuel = RecipeMaps.plasmaFuels.getBackend() + .findFuel(aLiquid); + if (tFuel != null) return tFuel.mSpecialValue; + return 0; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeTurbinePlasma(mName); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.plasmaFuels; + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public byte getCasingMeta() { + return 12; + } + + @Override + public int getCasingTextureIndex() { + return 60; + } + + @Override + public boolean isNewStyleRendering() { + return true; + } + + @Override + int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowMultiplier, + float[] flowMultipliers) { + if (aFluids.size() >= 1) { + aOptFlow *= 800; // CHANGED THINGS HERE, check recipe runs once per 20 ticks + int tEU = 0; + + int actualOptimalFlow = 0; + + FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. + // Doesn't matter which one. Ignore the rest! + int fuelValue = getFuelValue(firstFuelType); + actualOptimalFlow = GTUtility + .safeInt((long) Math.ceil((double) aOptFlow * flowMultipliers[2] / (double) fuelValue)); + this.realOptFlow = actualOptimalFlow; // For scanner info + + // Allowed to use up to 550% optimal flow rate, depending on the value of overflowMultiplier. + // This value is chosen because the highest EU/t possible depends on the overflowMultiplier, and the formula + // used + // makes it so the flow rate for that max, per value of overflowMultiplier, is (percentage of optimal flow + // rate): + // - 250% if it is 1 + // - 400% if it is 2 + // - 550% if it is 3 + // Variable required outside of loop for multi-hatch scenarios. + int remainingFlow = GTUtility.safeInt((long) (actualOptimalFlow * (1.5f * overflowMultiplier + 1))); + int flow = 0; + int totalFlow = 0; + + storedFluid = 0; + for (FluidStack aFluid : aFluids) { + if (aFluid.isFluidEqual(firstFuelType)) { + flow = Math.min(aFluid.amount, remainingFlow); // try to use up to the max flow defined just above + depleteInput(new FluidStack(aFluid, flow)); // deplete that amount + this.storedFluid += aFluid.amount; + remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches + totalFlow += flow; // track total input used + } + } + String fn = FluidRegistry.getFluidName(firstFuelType); + String[] nameSegments = fn.split("\\.", 2); + if (nameSegments.length == 2) { + String outputName = nameSegments[1]; + FluidStack output = FluidRegistry.getFluidStack(outputName, totalFlow); + if (output == null) { + output = FluidRegistry.getFluidStack("molten." + outputName, totalFlow); + } + if (output != null) { + addOutput(output); + } + } + if (totalFlow <= 0) return 0; + tEU = GTUtility.safeInt((long) ((fuelValue / 20D) * (double) totalFlow)); + + // GT_FML_LOGGER.info(totalFlow+" : "+fuelValue+" : "+aOptFlow+" : "+actualOptimalFlow+" : "+tEU); + + if (totalFlow != actualOptimalFlow) { + float efficiency = getOverflowEfficiency(totalFlow, actualOptimalFlow, overflowMultiplier); + tEU = (int) (tEU * efficiency); + } + tEU = GTUtility.safeInt((long) (aBaseEff / 10000D * tEU)); + + // If next output is above the maximum the dynamo can handle, set it to the maximum instead of exploding the + // turbine + // Raising the maximum allowed flow rate to account for the efficiency changes beyond the optimal flow rate + // can explode turbines on world load + if (tEU > getMaximumOutput()) { + tEU = GTUtility.safeInt(getMaximumOutput()); + } + + return tEU; + } + return 0; + } + + @Override + float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier) { + // overflowMultiplier changes how quickly the turbine loses efficiency after flow goes beyond the optimal value + // At the default value of 1, any flow will generate less EU/t than optimal flow, regardless of the amount of + // fuel used + // The bigger this number is, the slower efficiency loss happens as flow moves beyond the optimal value + // Plasmas are the most efficient out of all turbine fuels in this regard + float efficiency = 0; + + if (totalFlow > actualOptimalFlow) { + efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow)) + / ((float) actualOptimalFlow * ((overflowMultiplier * 3) + 1)); + } else { + efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); + } + + return efficiency; + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + ItemStack controllerSlot = getControllerSlot(); + if ((counter & 7) == 0 && (controllerSlot == null || !(controllerSlot.getItem() instanceof MetaGeneratedTool) + || controllerSlot.getItemDamage() < 170 + || controllerSlot.getItemDamage() > 179)) { + stopMachine(ShutDownReasonRegistry.NO_TURBINE); + return CheckRecipeResultRegistry.NO_TURBINE_FOUND; + } + ArrayList tFluids = getStoredFluids(); + if (!tFluids.isEmpty()) { + if (baseEff == 0 || optFlow == 0 + || counter >= 512 + || this.getBaseMetaTileEntity() + .hasWorkJustBeenEnabled() + || this.getBaseMetaTileEntity() + .hasInventoryBeenModified()) { + counter = 0; + baseEff = GTUtility.safeInt( + (long) ((5F + ((MetaGeneratedTool) controllerSlot.getItem()).getToolCombatDamage(controllerSlot)) + * 1000F)); + optFlow = GTUtility.safeInt( + (long) Math.max( + Float.MIN_NORMAL, + ((MetaGeneratedTool) controllerSlot.getItem()).getToolStats(controllerSlot) + .getSpeedMultiplier() * MetaGeneratedTool.getPrimaryMaterial(controllerSlot).mToolSpeed + * 50)); + overflowMultiplier = getOverflowMultiplier(controllerSlot); + + flowMultipliers[0] = MetaGeneratedTool.getPrimaryMaterial(controllerSlot).mSteamMultiplier; + flowMultipliers[1] = MetaGeneratedTool.getPrimaryMaterial(controllerSlot).mGasMultiplier; + flowMultipliers[2] = MetaGeneratedTool.getPrimaryMaterial(controllerSlot).mPlasmaMultiplier; + + if (optFlow <= 0 || baseEff <= 0) { + stopMachine(ShutDownReasonRegistry.NONE); // in case the turbine got removed + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + } else { + counter++; + } + } + + int newPower = fluidIntoPower(tFluids, optFlow, baseEff, overflowMultiplier, flowMultipliers); // How much the + // turbine should + // be producing + // with this flow + + int difference = newPower - this.mEUt; // difference between current output and new output + + // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the difference in + // power level (per tick) + // This is how much the turbine can actually change during this tick + int maxChangeAllowed = Math.max(200, GTUtility.safeInt((long) Math.abs(difference) / 5)); + + if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed change + int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative. + this.mEUt += change; // Apply the change + } else this.mEUt = newPower; + + if (this.mEUt <= 0) { + // stopMachine(); + this.mEUt = 0; + this.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } else { + this.mMaxProgresstime = 20; + this.mEfficiencyIncrease = 200; + // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. + + return CheckRecipeResultRegistry.GENERATING; + } + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = 0; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); + } + + String tRunning = mMaxProgresstime > 0 + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.running.true") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.running.false") + + EnumChatFormatting.RESET; + String tMaintainance = getIdealStatus() == getRepairStatus() + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") + + EnumChatFormatting.RESET; + int tDura = 0; + + if (mInventory[1] != null && mInventory[1].getItem() instanceof MetaGeneratedTool01) { + tDura = GTUtility.safeInt( + (long) (100.0f / MetaGeneratedTool.getToolMaxDamage(mInventory[1]) + * (MetaGeneratedTool.getToolDamage(mInventory[1])) + 1)); + } + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchDynamo tHatch : filterValidMTEs(mDynamoHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + String[] ret = new String[] { + // 8 Lines available for information panels + tRunning + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(((long) mEUt * mEfficiency) / 10000) + + EnumChatFormatting.RESET + + " EU/t", /* 1 */ + tMaintainance, /* 2 */ + StatCollector.translateToLocal("GT5U.turbine.efficiency") + ": " + + EnumChatFormatting.YELLOW + + (mEfficiency / 100F) + + EnumChatFormatting.RESET + + "%", /* 2 */ + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + /* 3 */ EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.turbine.flow") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(GTUtility.safeInt((long) realOptFlow)) + + EnumChatFormatting.RESET + + " L/s" + + /* 4 */ EnumChatFormatting.YELLOW + + " (" + + (looseFit ? StatCollector.translateToLocal("GT5U.turbine.loose") + : StatCollector.translateToLocal("GT5U.turbine.tight")) + + ")", /* 5 */ + StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " + + EnumChatFormatting.GOLD + + GTUtility.formatNumbers(storedFluid) + + EnumChatFormatting.RESET + + "L", /* 6 */ + StatCollector.translateToLocal( + "GT5U.turbine.dmg") + ": " + EnumChatFormatting.RED + tDura + EnumChatFormatting.RESET + "%", /* 7 */ + StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %" /* 8 */ + }; + if (!this.getClass() + .getName() + .contains("Steam")) + ret[4] = StatCollector.translateToLocal("GT5U.turbine.flow") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.safeInt((long) realOptFlow) + + EnumChatFormatting.RESET + + " L/s"; + return ret; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java new file mode 100644 index 0000000000..b017862fa8 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTELargeTurbineSteam.java @@ -0,0 +1,273 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.GTValues.STEAM_PER_WATER; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW5; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_ACTIVE5; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_NEW_EMPTY5; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTELargeTurbineSteam extends MTELargeTurbine { + + private int excessWater; + private boolean achievement = false; + private boolean looseFit = false; + + public MTELargeTurbineSteam(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbineSteam(String aName) { + super(aName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + return new ITexture[] { MACHINE_CASINGS[1][colorIndex + 1], + aFacing == side ? (aActive ? TextureFactory.builder() + .addIcon(LARGETURBINE_NEW_ACTIVE5) + .build() + : hasTurbine() ? TextureFactory.builder() + .addIcon(LARGETURBINE_NEW5) + .build() + : TextureFactory.builder() + .addIcon(LARGETURBINE_NEW_EMPTY5) + .build()) + : casingTexturePages[0][57] }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Steam Turbine") + .addInfo("Controller block for the Large Steam Turbine") + .addInfo("Needs a Turbine, place inside controller") + .addInfo("Outputs Distilled Water as well as producing power") + .addInfo("Power output depends on turbine and fitting") + .addInfo("Use screwdriver to adjust fitting of turbine") + .addSeparator() + .beginStructureBlock(3, 3, 4, true) + .addController("Front center") + .addCasingInfoRange("Turbine Casing", 8, 31, false) + .addDynamoHatch("Back center", 1) + .addMaintenanceHatch("Side centered", 2) + .addInputHatch("Steam, Side centered", 2) + .addOutputHatch("Distilled Water, Side centered", 2) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeTurbineSteam(mName); + } + + @Override + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + @Override + public byte getCasingMeta() { + return 9; + } + + @Override + public int getCasingTextureIndex() { + return 16; + } + + @Override + public boolean isNewStyleRendering() { + return true; + } + + private int condenseSteam(int steam) { + excessWater += steam; + int water = excessWater / STEAM_PER_WATER; + excessWater %= STEAM_PER_WATER; + return water; + } + + @Override + int fluidIntoPower(ArrayList aFluids, int aOptFlow, int aBaseEff, int overflowEfficiency, + float[] flowMultipliers) { + if (looseFit) { + float[] calculatedFlow = calculateLooseFlow(aOptFlow, aBaseEff); + aOptFlow = GTUtility.safeInt((long) calculatedFlow[0]); + aBaseEff = GTUtility.safeInt((long) calculatedFlow[1]); + } + int tEU = 0; + int totalFlow = 0; // Byproducts are based on actual flow + int flow = 0; + + // Allowed to use up to 250% optimal flow rate, depending on the value of overflowMultiplier. + // This value is chosen because the highest EU/t possible depends on the overflowMultiplier, and the formula + // used + // makes it so the flow rate for that max, per value of overflowMultiplier, is (percentage of optimal flow + // rate): + // - 150% if it is 1 + // - 200% if it is 2 + // - 250% if it is 3 + // Variable required outside of loop for multi-hatch scenarios. + this.realOptFlow = aOptFlow * flowMultipliers[0]; + int remainingFlow = GTUtility.safeInt((long) (realOptFlow * (0.5f * overflowMultiplier + 1))); + + storedFluid = 0; + for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { // loop through each hatch; extract inputs and + // track totals. + final FluidStack aFluidStack = aFluids.get(i); + if (GTModHandler.isAnySteam(aFluidStack)) { + flow = Math.min(aFluidStack.amount, remainingFlow); // try to use up to the max flow defined just above + depleteInput(new FluidStack(aFluidStack, flow)); // deplete that amount + this.storedFluid += aFluidStack.amount; + remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches + totalFlow += flow; // track total input used + if (!achievement) { + GTMod.achievements.issueAchievement( + this.getBaseMetaTileEntity() + .getWorld() + .getPlayerEntityByName( + this.getBaseMetaTileEntity() + .getOwnerName()), + "muchsteam"); + achievement = true; + } + } else if (GTModHandler.isSuperHeatedSteam(aFluidStack)) { + depleteInput(new FluidStack(aFluidStack, aFluidStack.amount)); + } + } + if (totalFlow <= 0) return 0; + tEU = totalFlow; + int waterToOutput = condenseSteam(totalFlow); + addOutput(GTModHandler.getDistilledWater(waterToOutput)); + if (totalFlow == (GTUtility.safeInt((long) realOptFlow))) { + tEU = GTUtility.safeInt((long) tEU * (long) aBaseEff / 20000L); + } else { + float efficiency = getOverflowEfficiency( + totalFlow, + (GTUtility.safeInt((long) realOptFlow)), + overflowMultiplier); + tEU *= efficiency; + tEU = Math.max(1, GTUtility.safeInt((long) tEU * (long) aBaseEff / 20000L)); + } + + // If next output is above the maximum the dynamo can handle, set it to the maximum instead of exploding the + // turbine + // Raising the maximum allowed flow rate to account for the efficiency changes beyond the optimal flow rate can + // explode turbines on world load + if (tEU > getMaximumOutput()) { + tEU = GTUtility.safeInt(getMaximumOutput()); + } + + return tEU; + } + + @Override + float getOverflowEfficiency(int totalFlow, int actualOptimalFlow, int overflowMultiplier) { + // overflowMultiplier changes how quickly the turbine loses efficiency after flow goes beyond the optimal value + // At the default value of 1, any flow will generate less EU/t than optimal flow, regardless of the amount of + // fuel used + // The bigger this number is, the slower efficiency loss happens as flow moves beyond the optimal value + // Steam is the least efficient out of all turbine fuels in this regard + float efficiency = 0; + + if (totalFlow > actualOptimalFlow) { + efficiency = 1.0f + - Math.abs((totalFlow - actualOptimalFlow)) / ((float) actualOptimalFlow * (overflowMultiplier + 1)); + } else { + efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); + } + + return efficiency; + } + + public static float[] calculateLooseFlow(float aOptFlow, float aBaseEff) { + aOptFlow *= 4f; + if (aBaseEff >= 26000f) { + aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 8000f) / 10000f) * 20f); + aBaseEff = aBaseEff * 0.6f; + } else if (aBaseEff > 22000f) { + aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 7000f) / 10000f) * 20f); + aBaseEff = aBaseEff * 0.65f; + } else if (aBaseEff > 18000f) { + aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 6000f) / 10000f) * 20f); + aBaseEff = aBaseEff * 0.70f; + } else if (aBaseEff > 14000f) { + aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 5000f) / 10000f) * 20f); + aBaseEff = aBaseEff * 0.75f; + } else if (aBaseEff > 10000f) { + aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 4000f) / 10000f) * 20f); + aBaseEff = aBaseEff * 0.8f; + } else if (aBaseEff > 6000f) { + aOptFlow = aOptFlow * (float) Math.pow(1.1f, ((aBaseEff - 3000f) / 10000f) * 20f); + aBaseEff = aBaseEff * 0.85f; + } else { + aBaseEff = aBaseEff * 0.9f; + } + + if (aBaseEff % 100 != 0) { + aBaseEff -= aBaseEff % 100; + } + + float[] looseFlow = new float[2]; + looseFlow[0] = aOptFlow; + looseFlow[1] = aBaseEff; + return looseFlow; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + looseFit ^= true; + GTUtility.sendChatToPlayer( + aPlayer, + looseFit ? GTUtility.trans("500", "Fitting: Loose - More Flow") + : GTUtility.trans("501", "Fitting: Tight - More Efficiency")); + } + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return (looseFit && XSTR_INSTANCE.nextInt(4) == 0) ? 0 : 1; + } + + @Override + public String[] getInfoData() { + super.looseFit = looseFit; + return super.getInfoData(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("turbineFitting", looseFit); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + looseFit = aNBT.getBoolean("turbineFitting"); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiAutoclave.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiAutoclave.java new file mode 100644 index 0000000000..5d10d55277 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiAutoclave.java @@ -0,0 +1,419 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; +import static gregtech.api.enums.GTValues.AuthorVolence; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_AUTOCLAVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_AUTOCLAVE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_AUTOCLAVE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_AUTOCLAVE_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.text.DecimalFormat; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.Materials; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.blocks.BlockCasings10; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEMultiAutoclave extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + public MTEMultiAutoclave(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMultiAutoclave(String aName) { + super(aName); + } + + private HeatingCoilLevel heatLevel; + + private static final String STRUCTURE_PIECE_MAIN = "main"; + + protected int itemPipeTier = 0; + protected int fluidPipeTier = 0; + + private static Integer getItemPipeTierFromMeta(Block block, Integer metaID) { + if (block != GregTechAPI.sBlockCasings11) return -1; + if (metaID < 0 || metaID > 7) return -1; + return metaID + 1; + } + + private void setItemPipeTier(int tier) { + itemPipeTier = tier; + } + + private int getItemPipeTier() { + return itemPipeTier; + } + + private static Integer getFluidTierFromMeta(Block block, Integer metaID) { + if (block != GregTechAPI.sBlockCasings2) return -1; + if (metaID < 12 || metaID > 15) return -1; + return metaID - 11; + } + + private void setFluidPipeTier(int tier) { + fluidPipeTier = tier; + } + + private int getFluidPipeTier() { + return fluidPipeTier; + } + + public HeatingCoilLevel getCoilLevel() { + return this.heatLevel; + } + + public void setCoilLevel(HeatingCoilLevel aCoilLevel) { + this.heatLevel = aCoilLevel; + } + + public Integer getCoilTier() { + return (int) this.getCoilLevel() + .getTier() + 1; + } + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { + { " AAA ", " AFA ", " AFA ", " AFA ", " AFA ", " AFA ", " AFA ", " AFA ", + " AAA " }, + { " ABBBA ", " A A ", " A A ", " A A ", " A A ", " A A ", " A A ", " A A ", + " ABBBA ", }, + { "ABBBBBA", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", + "ABBBBBA", }, + { "ABBBBBA", "ACDEDCA", "ACDEDCA", "ACDEDCA", "ACDEDCA", "ACDEDCA", "ACDEDCA", "ACDEDCA", + "ABBBBBA", }, + { "ABBBBBA", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", "A C C A", + "ABBBBBA", }, + { "AABBBAA", " A A ", " A A ", " A A ", " A A ", " A A ", " A A ", " A A ", + "AABBBAA", }, + { "A A~A A", " AAA ", " AAA ", " AAA ", " AAA ", " AAA ", " AAA ", " AAA ", + "A AAA A" } })) + .addElement( + 'A', + buildHatchAdder(MTEMultiAutoclave.class) + .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Muffler, Energy) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(3)) + .dot(1) + .buildAndChain( + onElementPass(MTEMultiAutoclave::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings10, 3)))) + .addElement('B', Glasses.chainAllGlasses()) // Steel Casings + .addElement('C', ofFrame(Materials.Polytetrafluoroethylene)) // PTFE Frame + .addElement( + 'D', + ofBlocksTiered( + MTEMultiAutoclave::getFluidTierFromMeta, + ImmutableList.of( + Pair.of(GregTechAPI.sBlockCasings2, 12), + Pair.of(GregTechAPI.sBlockCasings2, 13), + Pair.of(GregTechAPI.sBlockCasings2, 14), + Pair.of(GregTechAPI.sBlockCasings2, 15)), + -2, + MTEMultiAutoclave::setFluidPipeTier, + MTEMultiAutoclave::getFluidPipeTier)) + .addElement( + 'E', + ofBlocksTiered( + MTEMultiAutoclave::getItemPipeTierFromMeta, + ImmutableList.of( + Pair.of(GregTechAPI.sBlockCasings11, 0), + Pair.of(GregTechAPI.sBlockCasings11, 1), + Pair.of(GregTechAPI.sBlockCasings11, 2), + Pair.of(GregTechAPI.sBlockCasings11, 3), + Pair.of(GregTechAPI.sBlockCasings11, 4), + Pair.of(GregTechAPI.sBlockCasings11, 5), + Pair.of(GregTechAPI.sBlockCasings11, 6), + Pair.of(GregTechAPI.sBlockCasings11, 7)), + -2, + MTEMultiAutoclave::setItemPipeTier, + MTEMultiAutoclave::getItemPipeTier)) + .addElement('F', withChannel("coil", ofCoil(MTEMultiAutoclave::setCoilLevel, MTEMultiAutoclave::getCoilLevel))) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Autoclave") + .addInfo("Controller Block for the Industrial Autoclave.") + .addInfo("Gains 12 parallels per item pipe casing tier.") + .addInfo("Each pipe casing (bronze, steel, titanium, tungstensteel)") + .addInfo("decreases the EU usageby 1/pipe tier.") + .addInfo("Heating Coils increase speed by 1/((tier + 1) / 2).") + .addInfo("Needs a minimum of 128 Pressure Containment Casings.") + .addInfo(AuthorVolence) + .addSeparator() + .beginStructureBlock(7, 5, 5, true) + .addController("Front Center") + .addCasingInfoMin("Pressure Containment Casings", 128, false) + .addCasingInfoExactly("Item Pipe Casings", 7, true) + .addCasingInfoExactly("Pipe Casings", 14, true) + .addCasingInfoExactly("Heating Coils", 7, true) + .addCasingInfoExactly("PTFE Frame", 42, false) + .addInputBus("Any of the Pressure Containment Casings", 1) + .addOutputBus("Any of the Pressure Containment Casings", 1) + .addEnergyHatch("Any of the Pressure Containment Casings", 1) + .addMaintenanceHatch("Any of the Pressure Containment Casings", 1) + .addMufflerHatch("Any of the Pressure Containment Casings", 1) + .toolTipFinisher("GregTech"); + return tt; + } + + private int mCasingAmount; + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + fluidPipeTier = -2; + itemPipeTier = -2; + mCasingAmount = 0; + mEnergyHatches.clear(); + setCoilLevel(HeatingCoilLevel.None); + if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 6, 0)) return false; + return this.mMaintenanceHatches.size() == 1 && fluidPipeTier >= 0 + && mCasingAmount >= 128 + && itemPipeTier >= 0 + && mEnergyHatches.size() >= 1 + && mMufflerHatches.size() == 1; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (aActive) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 3)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_AUTOCLAVE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_AUTOCLAVE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 3)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_AUTOCLAVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_AUTOCLAVE_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 3)) }; + } + return rTexture; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 6, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int build = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 6, 0, elementBudget, env, false, true); + return build; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMultiAutoclave(this.mName); + } + + public float euModifier(int fluidPipeTier) { + return (float) (12 - fluidPipeTier) / 12; + } + + public float speedBoost(int coilTier) { + return (float) 1 / (1 + 0.25f * coilTier); + } + + public int getMaxParallelRecipes() { + return itemPipeTier * 12; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Override + @Nonnull + public CheckRecipeResult process() { + euModifier = euModifier(fluidPipeTier); + speedBoost = speedBoost(getCoilTier()); + return super.process(); + } + }.setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("fluidPipeTier", getFluidPipeTier()); + tag.setInteger("itemPipeTier", getItemPipeTier()); + tag.setInteger("coilTier", getCoilTier()); + tag.setFloat("getMaxParallelRecipes", getMaxParallelRecipes()); + } + + private static final DecimalFormat dfTwo = new DecimalFormat("0.00"); + private static final DecimalFormat dfNone = new DecimalFormat("#"); + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.fluidPipeTier") + ": " + + EnumChatFormatting.WHITE + + Math.max(0, tag.getInteger("fluidPipeTier"))); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.euModifier") + ": " + + EnumChatFormatting.WHITE + + dfTwo.format(Math.max(0, euModifier(tag.getInteger("fluidPipeTier")) * 100)) + + "%"); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.itemPipeTier") + ": " + + EnumChatFormatting.WHITE + + Math.max(0, tag.getInteger("itemPipeTier"))); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " + + EnumChatFormatting.WHITE + + dfNone.format(Math.max(0, tag.getFloat("getMaxParallelRecipes")))); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.coilLevel") + ": " + + EnumChatFormatting.WHITE + + Math.max(0, tag.getInteger("coilTier"))); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.speed") + ": " + + EnumChatFormatting.WHITE + + dfNone.format(Math.max(0, 100 / speedBoost(tag.getInteger("coilTier")))) + + "%"); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.autoclaveRecipes; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTUtility.roundUpVoltage(this.getMaxInputVoltage())); + logic.setAvailableAmperage(1L); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiCanner.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiCanner.java new file mode 100644 index 0000000000..3af4b17e29 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiCanner.java @@ -0,0 +1,310 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.GTValues.AuthorFourIsTheNumber; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_CANNER_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.blocks.BlockCasings2; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEMultiCanner extends MTEExtendedPowerMultiBlockBase implements ISurvivalConstructable { + + private static final int MACHINEMODE_CANNER = 0; + private static final int MACHINEMODE_FLUIDCANNER = 1; + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + (transpose( + new String[][] { { " AAA ", " AAAAA ", "AAAAAAA", "AAAAAAA", "AAAAAAA", " AAAAA ", " AAA " }, + { " ", " B B ", " BAAAB ", " A A ", " BAAAB ", " B B ", " " }, + { " ", " B B ", " BA~AB ", " A A ", " BAAAB ", " B B ", " " }, + { " ", " B B ", " BAAAB ", " A A ", " BAAAB ", " B B ", " " }, + { " AAA ", " AAAAA ", "AAAAAAA", "AAAAAAA", "AAAAAAA", " AAAAA ", " AAA " } }))) + .addElement( + 'A', + buildHatchAdder(MTEMultiCanner.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, InputHatch, OutputHatch) + .casingIndex(((BlockCasings2) GregTechAPI.sBlockCasings2).getTextureIndex(0)) + .dot(1) + .buildAndChain(onElementPass(MTEMultiCanner::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings2, 0)))) + .addElement('B', ofBlock(GregTechAPI.sBlockCasings2, 13)) + .build(); + + public MTEMultiCanner(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMultiCanner(String aName) { + super(aName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMultiCanner(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (aActive) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings2, 0)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_CANNER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_CANNER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings2, 0)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_CANNER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_CANNER_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings2, 0)) }; + } + return rTexture; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Canner/Fluid Canner") + .addInfo("Controller Block for the TurboCan Pro") + .addInfo("Use screwdriver to switch mode") + .addInfo("100% faster than single block machines of the same voltage") + .addInfo("Gains 8 parallels per voltage tier") + .addInfo(EnumChatFormatting.BLUE + "It's uncanny!") + .addInfo(AuthorFourIsTheNumber) + .addSeparator() + .beginStructureBlock(7, 5, 7, true) + .addController("Front Center") + .addCasingInfoMin("Solid Steel Machine Casing", 85, false) + .addCasingInfoExactly("Steel Pipe Casing", 24, false) + .addInputBus("Any Solid Steel Casing", 1) + .addOutputBus("Any Solid Steel Casing", 1) + .addInputHatch("Any Solid Steel Casing", 1) + .addOutputHatch("Any Solid Steel Casing", 1) + .addEnergyHatch("Any Solid Steel Casing", 1) + .addMaintenanceHatch("Any Solid Steel Casing", 1) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 2, 2); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 2, 2, elementBudget, env, false, true); + } + + private int mCasingAmount; + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + mEnergyHatches.clear(); + + if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 2, 2)) return false; + if (mCasingAmount < 85) return false; + + // All checks passed! + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 2F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + public int getMaxParallelRecipes() { + return (8 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public RecipeMap getRecipeMap() { + return (machineMode == MACHINEMODE_FLUIDCANNER) ? RecipeMaps.fluidCannerRecipes : RecipeMaps.cannerRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(RecipeMaps.fluidCannerRecipes, RecipeMaps.cannerRecipes); + } + + @Override + public int getRecipeCatalystPriority() { + return -10; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (aNBT.hasKey("fluidMode")) { + machineMode = aNBT.getBoolean("fluidMode") ? MACHINEMODE_FLUIDCANNER : MACHINEMODE_CANNER; + } + super.loadNBTData(aNBT); + } + + @Override + public boolean supportsMachineModeSwitch() { + return true; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + setMachineMode(nextMachineMode()); + PlayerUtils.messagePlayer( + aPlayer, + String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); + } + + @Override + public void setMachineModeIcons() { + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_PACKAGER); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_LPF_FLUID); + } + + @Override + public String getMachineModeName() { + return StatCollector.translateToLocal("GT5U.MULTI_CANNER.mode." + machineMode); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("mode", machineMode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector.translateToLocal("GT5U.MULTI_CANNER.mode." + tag.getInteger("mode")) + + EnumChatFormatting.RESET); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTUtility.roundUpVoltage(this.getMaxInputVoltage())); + logic.setAvailableAmperage(1L); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiFurnace.java new file mode 100644 index 0000000000..a11ef41dbd --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiFurnace.java @@ -0,0 +1,373 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; + +public class MTEMultiFurnace extends MTEAbstractMultiFurnace implements ISurvivalConstructable { + + private int mLevel = 0; + private int mCostDiscount = 1; + + private static final long RECIPE_EUT = 4; + private static final int RECIPE_DURATION = 512; + private static final int CASING_INDEX = 11; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose(new String[][] { { "ccc", "cmc", "ccc" }, { "CCC", "C-C", "CCC" }, { "b~b", "bbb", "bbb" } })) + .addElement('c', ofBlock(GregTechAPI.sBlockCasings1, CASING_INDEX)) + .addElement('m', Muffler.newAny(CASING_INDEX, 2)) + .addElement('C', GTStructureUtility.ofCoil(MTEMultiFurnace::setCoilLevel, MTEMultiFurnace::getCoilLevel)) + .addElement( + 'b', + ofChain( + GTStructureUtility.buildHatchAdder() + .atLeast(Maintenance, InputBus, OutputBus, Energy) + .casingIndex(CASING_INDEX) + .dot(1) + .build(), + ofBlock(GregTechAPI.sBlockCasings1, CASING_INDEX))) + .build(); + + public MTEMultiFurnace(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMultiFurnace(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMultiFurnace(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Furnace") + .addInfo("Controller Block for the Multi Smelter") + .addInfo("Smelts up to 8-8192 items at once") + .addInfo("Items smelted increases with coil tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front bottom") + .addCasingInfoRange("Heat Proof Machine Casing", 8, 14, false) + .addOtherStructurePart("Heating Coils", "Middle layer") + .addEnergyHatch("Any bottom casing", 1) + .addMaintenanceHatch("Any bottom casing", 1) + .addMufflerHatch("Top Middle", 2) + .addInputBus("Any bottom casing", 1) + .addOutputBus("Any bottom casing", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection != facingDirection) return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; + if (active) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_SMELTER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_SMELTER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_SMELTER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_SMELTER_GLOW) + .extFacing() + .glow() + .build() }; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.furnaceRecipes; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTMod.gregtechproxy.mPollutionMultiSmelterPerSecond; + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + ArrayList tInputList = getAllStoredInputs(); + if (tInputList.isEmpty()) return CheckRecipeResultRegistry.NO_RECIPE; + + long inputVoltage = getMaxInputVoltage(); + + int fakeOriginalMaxParallel = 1; + OverclockCalculator calculator = new OverclockCalculator().setEUt(inputVoltage) + .setRecipeEUt(RECIPE_EUT) + .setDuration(RECIPE_DURATION) + .setParallel(fakeOriginalMaxParallel); + + int maxParallel = this.mLevel; + int originalMaxParallel = maxParallel; + double tickTimeAfterOC = calculator.calculateDurationUnderOneTick(); + if (tickTimeAfterOC < 1) { + maxParallel = GTUtility.safeInt((long) (maxParallel / tickTimeAfterOC), 0); + } + + int maxParallelBeforeBatchMode = maxParallel; + if (isBatchModeEnabled()) { + maxParallel = GTUtility.safeInt((long) maxParallel * getMaxBatchSize(), 0); + } + + // Calculate parallel + int currentParallel = 0; + for (ItemStack item : tInputList) { + ItemStack smeltedOutput = GTModHandler.getSmeltingOutput(item, false, null); + if (smeltedOutput != null) { + if (item.stackSize <= (maxParallel - currentParallel)) { + currentParallel += item.stackSize; + } else { + currentParallel = maxParallel; + break; + } + } + } + if (currentParallel <= 0) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + int currentParallelBeforeBatchMode = Math.min(currentParallel, maxParallelBeforeBatchMode); + int fakeCurrentParallel = (int) Math.ceil((double) currentParallelBeforeBatchMode / originalMaxParallel); + + calculator.setCurrentParallel(fakeCurrentParallel) + .calculate(); + + double batchMultiplierMax = 1; + // In case batch mode enabled + if (currentParallel > maxParallelBeforeBatchMode && calculator.getDuration() < getMaxBatchSize()) { + batchMultiplierMax = (double) getMaxBatchSize() / calculator.getDuration(); + batchMultiplierMax = Math.min(batchMultiplierMax, (double) currentParallel / maxParallelBeforeBatchMode); + } + int finalParallel = (int) (batchMultiplierMax * maxParallelBeforeBatchMode); + + // Consume inputs and generate outputs + ArrayList smeltedOutputs = new ArrayList<>(); + int remainingCost = finalParallel; + for (ItemStack item : tInputList) { + ItemStack smeltedOutput = GTModHandler.getSmeltingOutput(item, false, null); + if (smeltedOutput != null) { + if (remainingCost >= item.stackSize) { + remainingCost -= item.stackSize; + smeltedOutput.stackSize *= item.stackSize; + item.stackSize = 0; + smeltedOutputs.add(smeltedOutput); + } else { + smeltedOutput.stackSize *= remainingCost; + item.stackSize -= remainingCost; + smeltedOutputs.add(smeltedOutput); + break; + } + } + } + this.mOutputItems = smeltedOutputs.toArray(new ItemStack[0]); + + this.mEfficiency = 10000 - (getIdealStatus() - getRepairStatus()) * 1000; + this.mEfficiencyIncrease = 10000; + this.mMaxProgresstime = (int) (calculator.getDuration() * batchMultiplierMax); + this.lEUt = calculator.getConsumption(); + + if (this.lEUt > 0) this.lEUt = -this.lEUt; + + updateSlots(); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.mLevel = 0; + this.mCostDiscount = 1; + + replaceDeprecatedCoils(aBaseMetaTileEntity); + + setCoilLevel(HeatingCoilLevel.None); + + if (!checkPiece(STRUCTURE_PIECE_MAIN, 1, 2, 0)) return false; + + if (getCoilLevel() == HeatingCoilLevel.None) return false; + + if (mMaintenanceHatches.size() != 1) return false; + + if (getCoilLevel().getHeat() < 9000) { + this.mLevel = 8 * getCoilLevel().getLevel(); + } else { + this.mLevel = 1 << (getCoilLevel().getTier()); + } + this.mCostDiscount = getCoilLevel().getCostDiscount(); + return true; + } + + private void replaceDeprecatedCoils(IGregTechTileEntity aBaseMetaTileEntity) { + final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX; + final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ; + final int tX = aBaseMetaTileEntity.getXCoord() + xDir; + final int tY = aBaseMetaTileEntity.getYCoord(); + final int tZ = aBaseMetaTileEntity.getZCoord() + zDir; + int tUsedMeta; + for (int xPos = tX - 1; xPos <= tX + 1; xPos++) for (int zPos = tZ - 1; zPos <= tZ + 1; zPos++) { + if ((xPos == tX) && (zPos == tZ)) continue; + tUsedMeta = aBaseMetaTileEntity.getMetaID(xPos, tY + 1, zPos); + if (tUsedMeta >= 12 && tUsedMeta <= 14 + && aBaseMetaTileEntity.getBlock(xPos, tY + 1, zPos) == GregTechAPI.sBlockCasings1) + aBaseMetaTileEntity.getWorld() + .setBlock(xPos, tY + 1, zPos, GregTechAPI.sBlockCasings5, tUsedMeta - 12, 3); + } + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = 0; + for (final MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) + mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); + + long storedEnergy = 0; + long maxEnergy = 0; + for (final MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + return new String[] { + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(-lEUt) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getMaxInputVoltage()) + + EnumChatFormatting.RESET + + " EU/t(*2A) " + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + VN[GTUtility.getTier(getMaxInputVoltage())] + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + StatCollector.translateToLocal("GT5U.MS.multismelting") + ": " + + EnumChatFormatting.GREEN + + mLevel + + EnumChatFormatting.RESET + + " Discount: (EU/t) / " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mCostDiscount) + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %" }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 1, 2, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 2, 0, elementBudget, env, false, true); + } + + @Override + public boolean supportsBatchMode() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java new file mode 100644 index 0000000000..e0c8e35444 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEMultiLathe.java @@ -0,0 +1,369 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.AuthorVolence; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_LATHE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_LATHE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_LATHE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_LATHE_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.text.DecimalFormat; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.GregTechTileClientEvents; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.blocks.BlockCasings2; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEMultiLathe extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { + + public MTEMultiLathe(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMultiLathe(String aName) { + super(aName); + } + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final String STRUCTURE_PIECE_BODY = "body"; + private static final String STRUCTURE_PIECE_BODY_ALT = "body_alt"; + + protected int pipeTier = 0; + + public enum PipeTiers { + + Platinum(4, 1F), + Osmium(8, 1.25F), + Quantium(12, 1.5F), + FluxedElectrum(16, 2F), + BlackPlutonium(32, 2.5F); + + final int maxParallel; + final float speedBoost; + + PipeTiers(int maxParallel, float speedBoost) { + this.maxParallel = maxParallel; + this.speedBoost = speedBoost; + } + } + + private PipeTiers getPipeData() { + pipeTier = getPipeTier(); + return switch (pipeTier) { + case 2 -> PipeTiers.Osmium; + case 3 -> PipeTiers.Quantium; + case 4 -> PipeTiers.FluxedElectrum; + case 5 -> PipeTiers.BlackPlutonium; + default -> PipeTiers.Platinum; + }; + } + + // get tier from block meta + private static Integer getTierFromMeta(Block block, Integer metaID) { + if (block != GregTechAPI.sBlockCasings11) return -1; + if (metaID < 3 || metaID > 7) return -1; + return (metaID - 2); + } + + private void setPipeTier(int tier) { + pipeTier = tier; + } + + private int getPipeTier() { + return pipeTier; + } + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose(new String[][] { { " " }, { " " }, { " " }, { " " }, { "AAA~AAA" } })) + .addShape( + STRUCTURE_PIECE_BODY, + (transpose( + new String[][] { { " ", "AAAAAAA", " ", " " }, + { "DBCCCCD", "DBCCCCD", "DBCCCCD", " " }, { "DBCCCCD", "DBFFFFD", "DBCCCCD", " " }, + { "DBCCCCD", "DBCCCCD", "DBCCCCD", " " }, { "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA" } }))) + .addShape( + STRUCTURE_PIECE_BODY_ALT, + (transpose( + new String[][] { { " ", "AAAAAAA", " ", " " }, + { "DCCCCBD", "DCCCCBD", "DCCCCBD", " " }, { "DCCCCBD", "DFFFFBD", "DCCCCBD", " " }, + { "DCCCCBD", "DCCCCBD", "DCCCCBD", " " }, { "AAAAAAA", "AAAAAAA", "AAAAAAA", "AAAAAAA" } }))) + .addElement( + 'A', + buildHatchAdder(MTEMultiLathe.class).atLeast(Maintenance, Muffler, Energy) + .casingIndex(((BlockCasings2) GregTechAPI.sBlockCasings2).getTextureIndex(0)) + .dot(1) + .buildAndChain(onElementPass(MTEMultiLathe::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings2, 0)))) + .addElement('B', ofBlock(GregTechAPI.sBlockCasings3, 10)) // Steel Casings + .addElement('C', Glasses.chainAllGlasses()) // Glass + .addElement( + 'D', + buildHatchAdder(MTEMultiLathe.class).atLeast(InputBus, OutputBus, Maintenance, Muffler, Energy) + .casingIndex(((BlockCasings2) GregTechAPI.sBlockCasings2).getTextureIndex(0)) + .dot(1) + .buildAndChain(onElementPass(MTEMultiLathe::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings2, 0)))) + .addElement( + 'F', + ofBlocksTiered( + MTEMultiLathe::getTierFromMeta, + ImmutableList.of( + Pair.of(GregTechAPI.sBlockCasings11, 3), + Pair.of(GregTechAPI.sBlockCasings11, 4), + Pair.of(GregTechAPI.sBlockCasings11, 5), + Pair.of(GregTechAPI.sBlockCasings11, 6), + Pair.of(GregTechAPI.sBlockCasings11, 7)), + -2, + MTEMultiLathe::setPipeTier, + MTEMultiLathe::getPipeTier)) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMultiLathe(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (aActive) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings2, 0)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_LATHE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_LATHE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings2, 0)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_LATHE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_LATHE_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings2, 0)) }; + } + return rTexture; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Lathe") + .addInfo("Controller Block for the Industrial Precision Lathe") + .addInfo("Gains 2 parallels per voltage tier,") + .addInfo("and 4 parallels per pipe casing tier (16 for Black Plutonium)") + .addInfo("Better pipe casings increase speed") + .addInfo("Only uses 80% of the recipe's required energy") + .addInfo(AuthorVolence) + .addSeparator() + .beginStructureBlock(7, 5, 5, true) + .addController("Front Center") + .addCasingInfoMin("Solid Steel Machine Casing", 36, false) + .addCasingInfoExactly("Steel Pipe Casing", 8, false) + .addInputBus("Any of the 9 Solid Steel Casing at Each End", 1) + .addOutputBus("Any of the 9 Solid Steel Casing at Each End", 1) + .addEnergyHatch("Any Solid Steel Casing", 1) + .addMaintenanceHatch("Any Solid Steel Casing", 1) + .addMufflerHatch("Any Solid Steel Casing", 1) + .addOtherStructurePart("4 Item Pipe Casings", "Center of the glass", 4) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 4, 0); + buildPiece(STRUCTURE_PIECE_BODY, stackSize, hintsOnly, 3, 4, -1); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int build = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 4, 0, elementBudget, env, false, true); + if (build >= 0) return build; + build = survivialBuildPiece(STRUCTURE_PIECE_BODY, stackSize, 3, 4, -1, elementBudget, env, false, true); + if (build >= 0) return build; + build = survivialBuildPiece(STRUCTURE_PIECE_BODY_ALT, stackSize, 3, 4, -1, elementBudget, env, false, true); + return build; + } + + private int mCasingAmount; + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + pipeTier = -2; + mEnergyHatches.clear(); + if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 4, 0)) return false; + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); + if (!checkPiece(STRUCTURE_PIECE_BODY, 3, 4, -1) && !checkPiece(STRUCTURE_PIECE_BODY_ALT, 3, 4, -1)) + return false; + return this.mMaintenanceHatches.size() == 1 && pipeTier >= -1 + && mEnergyHatches.size() >= 1 + && mInputBusses.size() >= 1 + && mMufflerHatches.size() == 1; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() + .setSpeedBonus(1F / (getPipeData().speedBoost + GTUtility.getTier(this.getMaxInputVoltage()) / 4F)) + .setEuModifier(0.8F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + public int getMaxParallelRecipes() { + return getPipeData().maxParallel + (GTUtility.getTier(this.getMaxInputVoltage()) * 2); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("itemPipeTier", Math.max(0, pipeTier)); + tag.setFloat( + "speedBonus", + Math.max(0, 100 / (1F / (getPipeData().speedBoost + GTUtility.getTier(this.getMaxInputVoltage()) / 4F)))); + tag.setFloat("getMaxParallelRecipes", Math.max(0, getMaxParallelRecipes())); + } + + private static final DecimalFormat dfNone = new DecimalFormat("#"); + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.itemPipeTier") + ": " + + EnumChatFormatting.WHITE + + Math.max(0, tag.getInteger("itemPipeTier"))); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " + + EnumChatFormatting.WHITE + + dfNone.format(Math.max(0, tag.getFloat("getMaxParallelRecipes")))); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.speed") + ": " + + EnumChatFormatting.WHITE + + dfNone.format(Math.max(0, tag.getFloat("speedBonus"))) + + "%"); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.latheRecipes; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTUtility.roundUpVoltage(this.getMaxInputVoltage())); + logic.setAvailableAmperage(1L); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTENanoForge.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTENanoForge.java new file mode 100644 index 0000000000..b6dc31e943 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTENanoForge.java @@ -0,0 +1,466 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.AuthorBlueWeabo; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.ExoticEnergy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.blocks.BlockCasings8; + +public class MTENanoForge extends MTEExtendedPowerMultiBlockBase implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final String STRUCTURE_PIECE_TIER2 = "tier2"; + private static final String STRUCTURE_PIECE_TIER3 = "tier3"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + // spotless:off + .addShape(STRUCTURE_PIECE_MAIN, transpose(new String[][] { + {" "," "," F "," C "," C "," C "," C "," F "," "," "}, + {" "," "," F "," C "," C "," C "," C "," F "," "," "}, + {" "," "," F "," C "," C "," C "," C "," F "," "," "}, + {" "," "," F "," C "," C "," C "," C "," F "," "," "}, + {" "," "," F "," C "," C "," C "," C "," F "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, + {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, + {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, + {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, + {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, + {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, + {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, + {" C "," FCF "," CC CC "," CC CC "," CC CC "," CC CC "," CC CC "," CC CC "," FCF "," C "}, + {" C "," FCF "," CC CC "," CC CC "," CC CC "," CC CC "," CC CC "," CC CC "," FCF "," C "}, + {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, + {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, + {" C "," FCF "," CC CC "," C C "," C C "," C C "," C C "," CC CC "," FCF "," C "}, + {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, + {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, + {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, + {" "," FCF "," FC CF "," C C "," C C "," C C "," C C "," FC CF "," FCF "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," "," FCF "," C C "," C C "," C C "," C C "," FCF "," "," "}, + {" "," BB~BB "," BBBBBBB ","BBBBBBBBB","BBBBBBBBB","BBBBBBBBB","BBBBBBBBB"," BBBBBBB "," BBBBB "," "} + })) + .addShape(STRUCTURE_PIECE_TIER2, transpose(new String[][] { + {" ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " "}, + {" ", " ", " AA ", " ACCA ", " ACCA ", " AA ", " ", " "}, + {" ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " "}, + {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, + {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, + {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, + {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, + {" ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " "}, + {" ", " ", " AA ", " ACCA ", " ACCA ", " AA ", " ", " "}, + {" ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " "}, + {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, + {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, + {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, + {" ", " ", " ", " CC ", " CC ", " ", " ", " "}, + {" CCCCCC ", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", " CCCCCC "} + })) + .addShape(STRUCTURE_PIECE_TIER3, transpose(new String[][] { + {" ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " "}, + {" ", " ", " FFAA ", " ACCA ", " ACCA ", " AAFF ", " ", " "}, + {" ", " ", "F CC ", "F CCCC ", " CCCC F", " CC F", " ", " "}, + {" ", " ", " F", " CC F", "F CC ", "F ", " ", " "}, + {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, + {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, + {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, + {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, + {" ", " ", "F ", "F CC ", " CC F", " F", " ", " "}, + {" ", " ", " CC F", " CCCC F", "F CCCC ", "F CC ", " ", " "}, + {" ", " F ", " CC ", " CCCC ", " CCCC ", " CC ", " F ", " "}, + {" FF ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " FF "}, + {" FF ", " ", " CC ", " CCCC ", " CCCC ", " CC ", " ", " FF "}, + {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, + {" ", " ", "F ", "F CC ", " CC F", " F", " ", " "}, + {" ", " ", " F", " CC F", "F CC ", "F ", " ", " "}, + {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, + {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, + {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, + {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, + {" ", " ", "F CC ", "F CCCC ", " CCCC F", " CC F", " ", " "}, + {" ", " ", " AA F", " ACCA F", "F ACCA ", "F AA ", " ", " "}, + {" ", " F ", " CC ", " CCCC ", " CCCC ", " CC ", " F ", " "}, + {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, + {" FF ", " ", " ", " CC ", " CC ", " ", " ", " FF "}, + {" ", " F ", " ", " CC ", " CC ", " ", " F ", " "}, + {" CCCCCC ", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", "CCCCCCCC", " CCCCCC "} + })) + //spotless:on + .addElement('F', ofFrame(Materials.StellarAlloy)) + .addElement('C', ofBlock(GregTechAPI.sBlockCasings8, 10)) + .addElement('A', ofBlock(GregTechAPI.sBlockCasings2, 5)) + .addElement( + 'B', + buildHatchAdder(MTENanoForge.class) + .atLeast(InputHatch, OutputBus, InputBus, Maintenance, Energy.or(ExoticEnergy)) + .dot(1) + .casingIndex(((BlockCasings8) GregTechAPI.sBlockCasings8).getTextureIndex(10)) + .buildAndChain(GregTechAPI.sBlockCasings8, 10)) + .build(); + private byte mSpecialTier = 0; + + public MTENanoForge(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTENanoForge(String aName) { + super(aName); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.nanoForgeRecipes; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 4, 37, 1); + if (stackSize.stackSize > 1) { + buildPiece(STRUCTURE_PIECE_TIER2, stackSize, hintsOnly, -7, 14, 4); + } + if (stackSize.stackSize > 2) { + buildPiece(STRUCTURE_PIECE_TIER3, stackSize, hintsOnly, 14, 26, 4); + } + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTENanoForge(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection == facingDirection) { + if (active) return new ITexture[] { + BlockIcons.getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings8, 10)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { + BlockIcons.getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings8, 10)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { + BlockIcons.getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings8, 10)) }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Override + protected @Nonnull CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + return recipe.mSpecialValue <= mSpecialTier ? CheckRecipeResultRegistry.SUCCESSFUL + : CheckRecipeResultRegistry.NO_RECIPE; + } + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + return super.createOverclockCalculator(recipe) + .setDurationDecreasePerOC(mSpecialTier > recipe.mSpecialValue ? 4.0 : 2.0); + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getMaxInputEu()); + logic.setAvailableAmperage(1); + logic.setAmperageOC(false); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + // TODO: Look for proper fix + // Updates every 10 sec + if (mUpdate <= -150) mUpdate = 50; + } + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mSpecialTier = 0; + if (checkPiece(STRUCTURE_PIECE_MAIN, 4, 37, 1) && aStack != null) { + if (aStack.isItemEqual(Materials.Carbon.getNanite(1))) { + mSpecialTier = 1; + } + + if (aStack.isItemEqual(Materials.Neutronium.getNanite(1)) && checkPiece(STRUCTURE_PIECE_TIER2, -7, 14, 4)) { + mSpecialTier = 2; + } + + if (aStack.isItemEqual(MaterialsUEVplus.TranscendentMetal.getNanite(1)) + && checkPiece(STRUCTURE_PIECE_TIER2, -7, 14, 4) + && checkPiece(STRUCTURE_PIECE_TIER3, 14, 26, 4)) { + mSpecialTier = 3; + } + } + + if (mMaintenanceHatches.size() != 1) { + return false; + } + + if (!checkExoticAndNormalEnergyHatches()) { + return false; + } + + return mSpecialTier > 0; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 4, 37, 1, elementBudget, env, false, true); + if (built >= 0) return built; + if (stackSize.stackSize > 1) { + built += survivialBuildPiece(STRUCTURE_PIECE_TIER2, stackSize, -7, 14, 4, elementBudget, env, false, true); + } + if (stackSize.stackSize > 2) { + built += survivialBuildPiece(STRUCTURE_PIECE_TIER3, stackSize, 14, 26, 4, elementBudget, env, false, true); + } + return built; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByte("mSpecialTier", mSpecialTier); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("mSeparate")) { + // backward compatibility + inputSeparation = aNBT.getBoolean("mSeparate"); + } + mSpecialTier = aNBT.getByte("mSpecialTier"); + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + screenElements + .widget( + new TextWidget(StatCollector.translateToLocal("GT5U.gui.button.tier") + " " + mSpecialTier) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0)) + .widget( + new FakeSyncWidget.IntegerSyncer( + () -> (int) mSpecialTier, + val -> mSpecialTier = (byte) (val % Byte.MAX_VALUE))); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Nanite Fabricator") + .addInfo("Controller block for the Nano Forge") + .addInfo("Requires insane amounts of power to create nanites. Each tier") + .addInfo("the multi gains a new building next to it. The nanite in the") + .addInfo("controller slot controls the tier.") + .addInfo("--------------------------------------------") + .addInfo("Requires a Carbon Nanite to use tier " + EnumChatFormatting.DARK_PURPLE + 1) + .addInfo("Requires a Neutronium Nanite to use tier " + EnumChatFormatting.DARK_PURPLE + 2) + .addInfo("Requires a Transcendent Metal Nanite to use tier " + EnumChatFormatting.DARK_PURPLE + 3) + .addInfo("--------------------------------------------") + .addInfo("If a recipe's tier is lower than the tier of the Nano Forge") + .addInfo("it gains " + EnumChatFormatting.RED + "perfect overclock" + EnumChatFormatting.GRAY + ".") + .addInfo(AuthorBlueWeabo) + .addSeparator() + .beginStructureBlock(30, 38, 13, false) + .addStructureInfo("Nano Forge Structure is too complex! See schematic for details.") + .addStructureInfo("--------------------------------------------") + .addStructureInfo("Tier " + EnumChatFormatting.DARK_PURPLE + 1 + EnumChatFormatting.GRAY) + .addStructureInfo( + EnumChatFormatting.GOLD + "527" + EnumChatFormatting.GRAY + " Radiant Naquadah Alloy Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "171" + EnumChatFormatting.GRAY + " Stellar Alloy Frame Box") + .addStructureInfo("--------------------------------------------") + .addStructureInfo("Tier " + EnumChatFormatting.DARK_PURPLE + 2 + EnumChatFormatting.GRAY) + .addStructureInfo( + EnumChatFormatting.GOLD + "148" + EnumChatFormatting.GRAY + " Radiant Naquadah Alloy Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "16" + EnumChatFormatting.GRAY + " Assembling Line Casing") + .addStructureInfo("--------------------------------------------") + .addStructureInfo("Tier " + EnumChatFormatting.DARK_PURPLE + 3 + EnumChatFormatting.GRAY) + .addStructureInfo( + EnumChatFormatting.GOLD + "228" + EnumChatFormatting.GRAY + " Radiant Naquadah Alloy Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "84" + EnumChatFormatting.GRAY + " Stellar Alloy Frame Box") + .addStructureInfo(EnumChatFormatting.GOLD + "16" + EnumChatFormatting.GRAY + " Assembling Line Casing") + .addStructureInfo("--------------------------------------------") + .addStructureInfo( + "Requires " + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + "-" + + EnumChatFormatting.GOLD + + "2" + + EnumChatFormatting.GRAY + + " energy hatches or " + + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + " TT energy hatch.") + .addStructureInfo( + "Requires " + EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " maintenance hatch.") + .addStructureInfo( + "Requires " + EnumChatFormatting.GOLD + + 1 + + EnumChatFormatting.GRAY + + "+" + + EnumChatFormatting.GRAY + + " input hatches.") + .addStructureInfo( + "Requires " + EnumChatFormatting.GOLD + + 0 + + EnumChatFormatting.GRAY + + "+" + + EnumChatFormatting.GRAY + + " output hatches.") + .addStructureInfo( + "Requires " + EnumChatFormatting.GOLD + + 1 + + EnumChatFormatting.GRAY + + "+" + + EnumChatFormatting.GRAY + + " input busses.") + .addStructureInfo( + "Requires " + EnumChatFormatting.GOLD + + 1 + + EnumChatFormatting.GRAY + + "+" + + EnumChatFormatting.GRAY + + " output busses.") + .addStructureInfo("--------------------------------------------") + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + inputSeparation = !inputSeparation; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilCracker.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilCracker.java new file mode 100644 index 0000000000..2aac2b5a2e --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilCracker.java @@ -0,0 +1,413 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HatchElement; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchMultiInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.maps.OilCrackerBackend; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.IRecipeProcessingAwareHatch; +import gregtech.common.tileentities.machines.MTEHatchInputME; + +public class MTEOilCracker extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { + + private static final byte CASING_INDEX = 49; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { "lcmcr", "lcmcr", "lcmcr" }, { "lc~cr", "l---r", "lcmcr" }, + { "lcmcr", "lcmcr", "lcmcr" }, })) + .addElement('c', ofCoil(MTEOilCracker::setCoilLevel, MTEOilCracker::getCoilLevel)) + .addElement( + 'l', + buildHatchAdder(MTEOilCracker.class) + .atLeast( + HatchElement.InputHatch.withAdder(MTEOilCracker::addLeftHatchToMachineList), + HatchElement.Energy, + HatchElement.Maintenance) + .dot(2) + .casingIndex(CASING_INDEX) + .buildAndChain(onElementPass(MTEOilCracker::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings4, 1)))) + .addElement( + 'r', + buildHatchAdder(MTEOilCracker.class) + .atLeast( + HatchElement.OutputHatch.withAdder(MTEOilCracker::addRightHatchToMachineList), + HatchElement.Energy, + HatchElement.Maintenance) + .dot(3) + .casingIndex(CASING_INDEX) + .buildAndChain(onElementPass(MTEOilCracker::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings4, 1)))) + .addElement( + 'm', + buildHatchAdder(MTEOilCracker.class) + .atLeast( + HatchElement.InputHatch.withAdder(MTEOilCracker::addMiddleInputToMachineList) + .withCount(t -> t.mMiddleInputHatches.size()), + HatchElement.InputBus, + HatchElement.Energy, + HatchElement.Maintenance) + .dot(1) + .casingIndex(CASING_INDEX) + .buildAndChain(onElementPass(MTEOilCracker::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings4, 1)))) + .build(); + private HeatingCoilLevel heatLevel; + protected final List mMiddleInputHatches = new ArrayList<>(); + // 0 -> left, 1 -> right, any other -> not found + protected int mInputOnSide; + protected int mOutputOnSide; + protected int mCasingAmount; + + public MTEOilCracker(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEOilCracker(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Cracker") + .addInfo("Controller block for the Oil Cracking Unit") + .addInfo("Thermally cracks heavy hydrocarbons into lighter fractions") + .addInfo("More efficient than the Chemical Reactor") + .addInfo("Gives different benefits whether it hydro or steam-cracks:") + .addInfo("Hydro - Consumes 20% less Hydrogen and outputs 25% more cracked fluid") + .addInfo("Steam - Outputs 50% more cracked fluid") + .addInfo("(Values compared to cracking in the Chemical Reactor)") + .addInfo("Place the appropriate circuit in the controller or an input bus") + .addSeparator() + .beginStructureBlock(5, 3, 3, true) + .addController("Front center") + .addCasingInfoRange("Clean Stainless Steel Machine Casing", 18, 21, false) + .addOtherStructurePart("2 Rings of 8 Coils", "Each side of the controller") + .addInfo("Gets 10% EU/t reduction per coil tier, up to a maximum of 50%") + .addEnergyHatch("Any casing", 1, 2, 3) + .addMaintenanceHatch("Any casing", 1, 2, 3) + .addInputHatch("For cracking fluid (Steam/Hydrogen/etc.) ONLY, Any middle ring casing", 1) + .addInputHatch("Any left/right side casing", 2, 3) + .addOutputHatch("Any right/left side casing", 2, 3) + .addStructureInfo("Input/Output Hatches must be on opposite sides!") + .addInputBus("Any middle ring casing, optional for programmed circuit automation") + .addStructureHint("GT5U.cracker.io_side") + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection == facingDirection) { + if (active) return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][CASING_INDEX], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][CASING_INDEX] }; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.crackingRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + public CheckRecipeResult process() { + setEuModifier(1.0F - Math.min(0.1F * (heatLevel.getTier() + 1), 0.5F)); + return super.process(); + } + }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + public HeatingCoilLevel getCoilLevel() { + return heatLevel; + } + + public void setCoilLevel(HeatingCoilLevel aCoilLevel) { + heatLevel = aCoilLevel; + } + + private boolean addMiddleInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput tHatch) { + tHatch.updateTexture(aBaseCasingIndex); + tHatch.mRecipeMap = getRecipeMap(); + return mMiddleInputHatches.add(tHatch); + } + return false; + } + + private boolean addLeftHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput tHatch) { + if (mInputOnSide == 1) return false; + mInputOnSide = 0; + mOutputOnSide = 1; + tHatch.updateTexture(aBaseCasingIndex); + tHatch.mRecipeMap = getRecipeMap(); + return mInputHatches.add(tHatch); + } + if (aMetaTileEntity instanceof MTEHatchOutput tHatch) { + if (mOutputOnSide == 1) return false; + mInputOnSide = 1; + mOutputOnSide = 0; + tHatch.updateTexture(aBaseCasingIndex); + return mOutputHatches.add(tHatch); + } + return false; + } + + private boolean addRightHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput tHatch) { + if (mInputOnSide == 0) return false; + mInputOnSide = 1; + mOutputOnSide = 0; + tHatch.updateTexture(aBaseCasingIndex); + tHatch.mRecipeMap = getRecipeMap(); + return mInputHatches.add(tHatch); + } + if (aMetaTileEntity instanceof MTEHatchOutput tHatch) { + if (mOutputOnSide == 0) return false; + mInputOnSide = 0; + mOutputOnSide = 1; + tHatch.updateTexture(aBaseCasingIndex); + return mOutputHatches.add(tHatch); + } + return false; + } + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + setCoilLevel(HeatingCoilLevel.None); + mCasingAmount = 0; + mMiddleInputHatches.clear(); + mInputOnSide = -1; + mOutputOnSide = -1; + replaceDeprecatedCoils(aBaseMetaTileEntity); + return checkPiece(STRUCTURE_PIECE_MAIN, 2, 1, 0) && mInputOnSide != -1 + && mOutputOnSide != -1 + && mCasingAmount >= 18 + && mMaintenanceHatches.size() == 1 + && !mMiddleInputHatches.isEmpty(); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEOilCracker(this.mName); + } + + private void replaceDeprecatedCoils(IGregTechTileEntity aBaseMetaTileEntity) { + final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX; + final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ; + final int tX = aBaseMetaTileEntity.getXCoord() + xDir; + final int tY = aBaseMetaTileEntity.getYCoord(); + final int tZ = aBaseMetaTileEntity.getZCoord() + zDir; + for (int xPos = tX - 1; xPos <= tX + 1; xPos += (xDir != 0 ? 1 : 2)) + for (int yPos = tY - 1; yPos <= tY + 1; yPos++) + for (int zPos = tZ - 1; zPos <= tZ + 1; zPos += (xDir != 0 ? 2 : 1)) { + if ((yPos == tY) && (xPos == tX || zPos == tZ)) continue; + final byte tUsedMeta = aBaseMetaTileEntity.getMetaID(xPos, yPos, zPos); + if (tUsedMeta < 12) continue; + if (tUsedMeta > 14) continue; + if (aBaseMetaTileEntity.getBlock(xPos, yPos, zPos) != GregTechAPI.sBlockCasings1) continue; + + aBaseMetaTileEntity.getWorld() + .setBlock(xPos, yPos, zPos, GregTechAPI.sBlockCasings5, tUsedMeta - 12, 3); + } + } + + @Override + public ArrayList getStoredFluids() { + final ArrayList rList = new ArrayList<>(); + Map inputsFromME = new HashMap<>(); + for (final MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) { + tHatch.mRecipeMap = getRecipeMap(); + if (tHatch instanceof MTEHatchInputME meHatch) { + for (FluidStack tFluid : meHatch.getStoredFluids()) { + if (tFluid != null && !getRecipeMap().getBackend() + .isValidCatalystFluid(tFluid)) { + inputsFromME.put(tFluid.getFluid(), tFluid); + } + } + } else if (tHatch instanceof MTEHatchMultiInput) { + for (final FluidStack tFluid : ((MTEHatchMultiInput) tHatch).getStoredFluid()) { + if (tFluid != null && !getRecipeMap().getBackend() + .isValidCatalystFluid(tFluid)) { + rList.add(tFluid); + } + } + } else { + if (tHatch.getFillableStack() != null) { + if (!getRecipeMap().getBackend() + .isValidCatalystFluid(tHatch.getFillableStack())) rList.add(tHatch.getFillableStack()); + } + } + } + for (final MTEHatchInput tHatch : filterValidMTEs(mMiddleInputHatches)) { + tHatch.mRecipeMap = getRecipeMap(); + if (tHatch instanceof MTEHatchInputME meHatch) { + for (FluidStack tFluid : meHatch.getStoredFluids()) { + if (tFluid != null && getRecipeMap().getBackend() + .isValidCatalystFluid(tFluid)) { + inputsFromME.put(tFluid.getFluid(), tFluid); + } + } + } else if (tHatch instanceof MTEHatchMultiInput) { + for (final FluidStack tFluid : ((MTEHatchMultiInput) tHatch).getStoredFluid()) { + if (tFluid != null && getRecipeMap().getBackend() + .isValidCatalystFluid(tFluid)) { + rList.add(tFluid); + } + } + } else { + if (tHatch.getFillableStack() != null) { + final FluidStack tStack = tHatch.getFillableStack(); + if (getRecipeMap().getBackend() + .isValidCatalystFluid(tStack)) { + rList.add(tStack); + } + } + } + } + if (!inputsFromME.isEmpty()) { + rList.addAll(inputsFromME.values()); + } + return rList; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + protected void startRecipeProcessing() { + for (MTEHatchInput hatch : filterValidMTEs(mMiddleInputHatches)) { + if (hatch instanceof IRecipeProcessingAwareHatch aware) { + aware.startRecipeProcessing(); + } + } + super.startRecipeProcessing(); + } + + @Override + protected void endRecipeProcessing() { + super.endRecipeProcessing(); + for (MTEHatchInput hatch : filterValidMTEs(mMiddleInputHatches)) { + if (hatch instanceof IRecipeProcessingAwareHatch aware) { + setResultIfFailure(aware.endRecipeProcessing(this)); + } + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill1.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill1.java new file mode 100644 index 0000000000..7656bf16eb --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill1.java @@ -0,0 +1,53 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEOilDrill1 extends MTEOilDrillBase { + + public MTEOilDrill1(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEOilDrill1(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + return createTooltip("I"); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEOilDrill1(mName); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_SolidSteel; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.Steel; + } + + @Override + protected int getCasingTextureIndex() { + return 16; + } + + @Override + protected int getRangeInChunks() { + return 1; + } + + @Override + protected int getMinTier() { + return 2; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill2.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill2.java new file mode 100644 index 0000000000..96818f4af6 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill2.java @@ -0,0 +1,55 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEOilDrill2 extends MTEOilDrillBase { + + public MTEOilDrill2(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEOilDrill2(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + return createTooltip("II"); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEOilDrill2(mName); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_CleanStainlessSteel; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.StainlessSteel; + } + + @Override + protected int getCasingTextureIndex() { + return GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings4, 1); + } + + @Override + protected int getRangeInChunks() { + return 2; + } + + @Override + protected int getMinTier() { + return 3; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill3.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill3.java new file mode 100644 index 0000000000..e6a08c3f73 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill3.java @@ -0,0 +1,55 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEOilDrill3 extends MTEOilDrillBase { + + public MTEOilDrill3(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEOilDrill3(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + return createTooltip("III"); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEOilDrill3(mName); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_StableTitanium; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.Titanium; + } + + @Override + protected int getCasingTextureIndex() { + return GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings4, 2); + } + + @Override + protected int getRangeInChunks() { + return 4; + } + + @Override + protected int getMinTier() { + return 4; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill4.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill4.java new file mode 100644 index 0000000000..b90c78d103 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrill4.java @@ -0,0 +1,55 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEOilDrill4 extends MTEOilDrillBase { + + public MTEOilDrill4(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEOilDrill4(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + return createTooltip("IV"); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEOilDrill4(mName); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_RobustTungstenSteel; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.TungstenSteel; + } + + @Override + protected int getCasingTextureIndex() { + return GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings4, 0); + } + + @Override + protected int getRangeInChunks() { + return 8; + } + + @Override + protected int getMinTier() { + return 5; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java new file mode 100644 index 0000000000..b40e7e2d29 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillBase.java @@ -0,0 +1,489 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.GTValues.debugDriller; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_DRILL; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_DRILL_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_DRILL_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_DRILL_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.getCasingTextureForId; +import static gregtech.common.UndergroundOil.undergroundOil; +import static gregtech.common.UndergroundOil.undergroundOilReadInformation; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Nonnegative; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetricsExporter; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.objects.GTChunkManager; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.ValidationResult; +import gregtech.api.util.ValidationType; + +public abstract class MTEOilDrillBase extends MTEDrillerBase implements IMetricsExporter { + + private final ArrayList mOilFieldChunks = new ArrayList<>(); + private int mOilId = 0; + private int mOilFlow = 0; + + private int chunkRangeConfig = getRangeInChunks(); + + public MTEOilDrillBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEOilDrillBase(String aName) { + super(aName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { getCasingTextureForId(casingTextureIndex), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_DRILL_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_DRILL_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { getCasingTextureForId(casingTextureIndex), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_DRILL) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_DRILL_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { getCasingTextureForId(casingTextureIndex) }; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mOilId", mOilId); + aNBT.setInteger("chunkRangeConfig", chunkRangeConfig); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mOilId = aNBT.getInteger("mOilId"); + if (aNBT.hasKey("chunkRangeConfig")) chunkRangeConfig = aNBT.getInteger("chunkRangeConfig"); + } + + protected MultiblockTooltipBuilder createTooltip(String tierSuffix) { + String casings = getCasingBlockItem().get(0) + .getDisplayName(); + + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Pump") + .addInfo("Controller Block for the Oil/Gas/Fluid Drilling Rig " + (tierSuffix != null ? tierSuffix : "")) + .addInfo("Works on " + getRangeInChunks() + "x" + getRangeInChunks() + " chunks") + .addInfo("Use a Screwdriver to configure range") + .addInfo("Use Programmed Circuits to ignore near exhausted oil field") + .addInfo("If total circuit # is greater than output amount it will halt. If it worked right.") // doesn't + // work + .addSeparator() + .beginStructureBlock(3, 7, 3, false) + .addController("Front bottom") + .addOtherStructurePart(casings, "form the 3x1x3 Base") + .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") + .addOtherStructurePart(getFrameMaterial().mName + " Frame Boxes", "Each pillar's side and 1x3x1 on top") + .addEnergyHatch("1x " + VN[getMinTier()] + "+, Any base casing", 1) + .addMaintenanceHatch("Any base casing", 1) + .addInputBus("Mining Pipes or Circuits, optional, any base casing", 1) + .addOutputHatch("Any base casing", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + protected abstract int getRangeInChunks(); + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + int oldChunkRange = chunkRangeConfig; + if (aPlayer.isSneaking()) { + if (chunkRangeConfig > 0) { + chunkRangeConfig--; + } + if (chunkRangeConfig == 0) chunkRangeConfig = getRangeInChunks(); + } else { + if (chunkRangeConfig <= getRangeInChunks()) { + chunkRangeConfig++; + } + if (chunkRangeConfig > getRangeInChunks()) chunkRangeConfig = 1; + } + if (oldChunkRange != chunkRangeConfig) mOilFieldChunks.clear(); + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.workareaset") + " " + + chunkRangeConfig + + "x" + + chunkRangeConfig + + StatCollector.translateToLocal("GT5U.machines.chunks")); // TODO Add translation support + } + + @Override + protected boolean checkHatches() { + return !mMaintenanceHatches.isEmpty() && !mOutputHatches.isEmpty() && mEnergyHatches.size() == 1; + } + + @Override + protected List> getAllowedHatches() { + return ImmutableList.of(InputBus, OutputHatch, Maintenance, Energy); + } + + @Override + protected void setElectricityStats() { + this.mEfficiency = getCurrentEfficiency(null); + this.mEfficiencyIncrease = 10000; + int tier = Math.max(0, GTUtility.getTier(getMaxInputVoltage())); + this.mEUt = -7 << (tier << 1); // (1/4) A of current tier when at bottom (7/8) A of current tier while mining + this.mMaxProgresstime = Math.max( + 1, + (workState == STATE_AT_BOTTOM ? (64 * (chunkRangeConfig * chunkRangeConfig)) >> (getMinTier() - 1) : 120) + >> tier); + } + + protected float computeSpeed() { + return .5F + (GTUtility.getTier(getMaxInputVoltage()) - getMinTier()) * .25F; + } + + @Override + protected boolean workingAtBottom(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, + int yHead, int oldYHead) { + switch (tryLowerPipeState(true)) { + case 0 -> { + workState = STATE_DOWNWARD; + setElectricityStats(); + return true; + } + case 3 -> { + workState = STATE_UPWARD; + return true; + } + } + + if (reachingVoidOrBedrock() && tryFillChunkList()) { + if (mWorkChunkNeedsReload) { + mCurrentChunk = new ChunkCoordIntPair(xDrill >> 4, zDrill >> 4); + GTChunkManager.requestChunkLoad((TileEntity) getBaseMetaTileEntity(), null); + mWorkChunkNeedsReload = false; + } + float speed = computeSpeed(); + ValidationResult pumpResult = tryPumpOil(speed); + if (pumpResult.getType() != ValidationType.VALID) { + mEUt = 0; + mMaxProgresstime = 0; + setRuntimeFailureReason(CheckRecipeResultRegistry.FLUID_OUTPUT_FULL); + return false; + } + FluidStack tFluid = pumpResult.getResult(); + if (tFluid != null && tFluid.amount > getTotalConfigValue()) { + this.mOutputFluids = new FluidStack[] { tFluid }; + return true; + } + } + GTChunkManager.releaseTicket((TileEntity) getBaseMetaTileEntity()); + workState = STATE_UPWARD; + setShutdownReason(StatCollector.translateToLocal("GT5U.gui.text.drill_exhausted")); + return true; + } + + private boolean tryFillChunkList() { + FluidStack tFluid, tOil; + if (mOilId <= 0) { + tFluid = undergroundOilReadInformation(getBaseMetaTileEntity()); + if (tFluid == null) return false; + mOilId = tFluid.getFluidID(); + } + if (debugDriller) { + GTLog.out.println(" Driller on fluid = " + mOilId); + } + + tOil = new FluidStack(FluidRegistry.getFluid(mOilId), 0); + + if (mOilFieldChunks.isEmpty()) { + Chunk tChunk = getBaseMetaTileEntity().getWorld() + .getChunkFromBlockCoords(getBaseMetaTileEntity().getXCoord(), getBaseMetaTileEntity().getZCoord()); + int range = chunkRangeConfig; + int xChunk = Math.floorDiv(tChunk.xPosition, range) * range; // Java was written by idiots. For negative + // values, / returns rounded towards zero. + // Fucking morons. + int zChunk = Math.floorDiv(tChunk.zPosition, range) * range; + if (debugDriller) { + GTLog.out.println( + "tChunk.xPosition = " + tChunk.xPosition + + " tChunk.zPosition = " + + tChunk.zPosition + + " xChunk = " + + xChunk + + " zChunk = " + + zChunk); + } + for (int i = 0; i < range; i++) { + for (int j = 0; j < range; j++) { + if (debugDriller) { + GTLog.out.println(" getChunkX = " + (xChunk + i) + " getChunkZ = " + (zChunk + j)); + } + tChunk = getBaseMetaTileEntity().getWorld() + .getChunkFromChunkCoords(xChunk + i, zChunk + j); + tFluid = undergroundOilReadInformation(tChunk); + if (debugDriller) { + GTLog.out.println( + " Fluid in chunk = " + tFluid.getFluid() + .getID()); + } + if (tOil.isFluidEqual(tFluid) && tFluid.amount > 0) { + mOilFieldChunks.add(tChunk); + if (debugDriller) { + GTLog.out.println(" Matching fluid, quantity = " + tFluid.amount); + } + } + } + } + } + if (debugDriller) { + GTLog.out.println("mOilFieldChunks.size = " + mOilFieldChunks.size()); + } + return !mOilFieldChunks.isEmpty(); + } + + /** + * Tries to pump oil, accounting for output space if void protection is enabled. + *

+ * If pumped fluid will not fit in output hatches, it returns a result with INVALID. + *

+ * If vein is depleted, it returns a result with VALID and null fluid. + */ + protected ValidationResult tryPumpOil(float speed) { + if (mOilId <= 0) return null; + if (debugDriller) { + GTLog.out.println(" pump speed = " + speed); + } + + // Even though it works fine without this check, + // it can save tiny amount of CPU time when void protection is disabled + if (protectsExcessFluid()) { + FluidStack simulatedOil = pumpOil(speed, true); + if (!canOutputAll(new FluidStack[] { simulatedOil })) { + return ValidationResult.of(ValidationType.INVALID, null); + } + } + + FluidStack pumpedOil = pumpOil(speed, false); + mOilFlow = pumpedOil.amount; + return ValidationResult.of(ValidationType.VALID, pumpedOil.amount == 0 ? null : pumpedOil); + } + + /** + * @param speed Speed to pump oil + * @param simulate If true, it actually does not consume vein + * @return Fluid pumped + */ + protected FluidStack pumpOil(@Nonnegative float speed, boolean simulate) { + if (speed < 0) { + throw new IllegalArgumentException("Don't pass negative speed"); + } + + ArrayList emptyChunks = new ArrayList<>(); + FluidStack returnOil = new FluidStack(FluidRegistry.getFluid(mOilId), 0); + + for (Chunk tChunk : mOilFieldChunks) { + FluidStack pumped = undergroundOil(tChunk, simulate ? -speed : speed); + if (debugDriller) { + GTLog.out.println( + " chunkX = " + tChunk.getChunkCoordIntPair().chunkXPos + + " chunkZ = " + + tChunk.getChunkCoordIntPair().chunkZPos); + if (pumped != null) { + GTLog.out.println(" Fluid pumped = " + pumped.amount); + } else { + GTLog.out.println(" No fluid pumped "); + } + } + if (pumped == null || pumped.amount < 1) { + emptyChunks.add(tChunk); + continue; + } + if (returnOil.isFluidEqual(pumped)) { + returnOil.amount += pumped.amount; + } + } + for (Chunk tChunk : emptyChunks) { + mOilFieldChunks.remove(tChunk); + } + return returnOil; + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_PUMP_OP; + } + + @Override + public String[] getInfoData() { + List l = new ArrayList<>( + Arrays.asList( + EnumChatFormatting.BLUE + StatCollector.translateToLocal("GT5U.machines.oilfluidpump") + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.machines.workarea") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(chunkRangeConfig) + + " x " + + GTUtility.formatNumbers(chunkRangeConfig) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.machines.chunks"), + "Drilling fluid: " + EnumChatFormatting.GREEN + getFluidName() + EnumChatFormatting.RESET, + "Drilling flow: " + EnumChatFormatting.GREEN + + getFlowRatePerTick() + + EnumChatFormatting.RESET + + " L/t")); + l.addAll(Arrays.asList(super.getInfoData())); + return l.toArray(new String[0]); + } + + @Override + public @NotNull List reportMetrics() { + final boolean machineIsActive = getBaseMetaTileEntity().isActive(); + final String failureReason = getFailureReason() + .map(reason -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_reason", reason)) + .orElseGet(() -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_generic")); + + if (workState == STATE_AT_BOTTOM) { + final ImmutableList.Builder builder = ImmutableList.builder(); + builder.add(StatCollector.translateToLocalFormatted("GT5U.gui.text.pump_fluid_type", getFluidName())); + + if (machineIsActive) { + builder.add( + StatCollector.translateToLocalFormatted( + "GT5U.gui.text.pump_rate.1", + EnumChatFormatting.AQUA + numberFormat.format(getFlowRatePerTick())) + + StatCollector.translateToLocal("GT5U.gui.text.pump_rate.2"), + mOilFlow + StatCollector.translateToLocal("GT5U.gui.text.pump_recovery.2")); + } else { + builder.add(failureReason); + } + + return builder.build(); + } + + if (machineIsActive) { + return switch (workState) { + case STATE_DOWNWARD -> ImmutableList.of(StatCollector.translateToLocal("GT5U.gui.text.deploying_pipe")); + case STATE_UPWARD, STATE_ABORT -> ImmutableList + .of(StatCollector.translateToLocal("GT5U.gui.text.retracting_pipe")); + default -> ImmutableList.of(); + }; + } + + return ImmutableList.of(failureReason); + } + + protected int getFlowRatePerTick() { + return this.mMaxProgresstime > 0 ? (mOilFlow / this.mMaxProgresstime) : 0; + } + + @NotNull + private String getFluidName() { + if (mOilId > 0) { + final Fluid fluid = FluidRegistry.getFluid(mOilId); + return fluid.getLocalizedName(new FluidStack(fluid, 0)); + } + return "None"; + } + + private @NotNull String clientFluidType = ""; + private int clientFlowPerTick = 0; + private int clientFlowPerOperation = 0; + + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + screenElements + .widget( + new TextWidget() + .setStringSupplier( + () -> EnumChatFormatting.GRAY + + StatCollector.translateToLocalFormatted("GT5U.gui.text.pump_fluid_type", clientFluidType)) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_AT_BOTTOM)) + .widget( + new TextWidget() + .setStringSupplier( + () -> EnumChatFormatting.GRAY + + StatCollector.translateToLocalFormatted( + "GT5U.gui.text.pump_rate.1", + EnumChatFormatting.AQUA + numberFormat.format(clientFlowPerTick)) + + EnumChatFormatting.GRAY + + StatCollector.translateToLocal("GT5U.gui.text.pump_rate.2")) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_AT_BOTTOM)) + .widget( + new TextWidget() + .setStringSupplier( + () -> EnumChatFormatting.GRAY + + StatCollector.translateToLocalFormatted( + "GT5U.gui.text.pump_recovery.1", + EnumChatFormatting.AQUA + numberFormat.format(clientFlowPerOperation)) + + EnumChatFormatting.GRAY + + StatCollector.translateToLocal("GT5U.gui.text.pump_recovery.2")) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled(widget -> getBaseMetaTileEntity().isActive() && workState == STATE_AT_BOTTOM)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> workState, newInt -> workState = newInt)) + .widget(new FakeSyncWidget.StringSyncer(this::getFluidName, newString -> clientFluidType = newString)) + .widget(new FakeSyncWidget.IntegerSyncer(this::getFlowRatePerTick, newInt -> clientFlowPerTick = newInt)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> mOilFlow, newInt -> clientFlowPerOperation = newInt)); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillInfinite.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillInfinite.java new file mode 100644 index 0000000000..25870cc798 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOilDrillInfinite.java @@ -0,0 +1,87 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.GTValues.VN; + +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEOilDrillInfinite extends MTEOilDrillBase { + + public MTEOilDrillInfinite(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEOilDrillInfinite(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + String casings = getCasingBlockItem().get(0) + .getDisplayName(); + + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Pump") + .addInfo("Controller Block for the Infinite Oil/Gas/Fluid Drilling Rig ") + .addInfo("Works on " + getRangeInChunks() + "x" + getRangeInChunks() + " chunks") + .addSeparator() + .beginStructureBlock(3, 7, 3, false) + .addController("Front bottom") + .addOtherStructurePart(casings, "form the 3x1x3 Base") + .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") + .addOtherStructurePart(getFrameMaterial().mName + " Frame Boxes", "Each pillar's side and 1x3x1 on top") + .addEnergyHatch("1x " + VN[getMinTier()] + "+, Any base casing", 1) + .addMaintenanceHatch("Any base casing", 1) + .addInputBus("Mining Pipes or Circuits, optional, any base casing", 1) + .addOutputHatch("Any base casing", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEOilDrillInfinite(mName); + } + + @Override + protected FluidStack pumpOil(float speed, boolean simulate) { + // always simulate to not deplete vein + return super.pumpOil(speed, true); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_MiningNeutronium; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.Neutronium; + } + + @Override + protected int getCasingTextureIndex() { + return 178; + } + + @Override + protected int getRangeInChunks() { + return 8; + } + + @Override + protected float computeSpeed() { + return .5F + (GTUtility.getTier(getMaxInputVoltage()) - getMinTier() + 5) * .25F; + } + + @Override + protected int getMinTier() { + return 9; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant1.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant1.java new file mode 100644 index 0000000000..3585bce702 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant1.java @@ -0,0 +1,60 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEOreDrillingPlant1 extends MTEOreDrillingPlantBase { + + public MTEOreDrillingPlant1(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + mTier = 1; + } + + public MTEOreDrillingPlant1(String aName) { + super(aName); + mTier = 1; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + return createTooltip("I"); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEOreDrillingPlant1(mName); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_SolidSteel; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.Steel; + } + + @Override + protected int getCasingTextureIndex() { + return 16; + } + + @Override + protected int getRadiusInChunks() { + return 3; + } + + @Override + protected int getMinTier() { + return 2; + } + + @Override + protected int getBaseProgressTime() { + return 960; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant2.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant2.java new file mode 100644 index 0000000000..94542a4923 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant2.java @@ -0,0 +1,60 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEOreDrillingPlant2 extends MTEOreDrillingPlantBase { + + public MTEOreDrillingPlant2(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + mTier = 2; + } + + public MTEOreDrillingPlant2(String aName) { + super(aName); + mTier = 2; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + return createTooltip("II"); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEOreDrillingPlant2(mName); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_StableTitanium; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.Titanium; + } + + @Override + protected int getCasingTextureIndex() { + return 50; + } + + @Override + protected int getRadiusInChunks() { + return 4; + } + + @Override + protected int getMinTier() { + return 3; + } + + @Override + protected int getBaseProgressTime() { + return 800; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant3.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant3.java new file mode 100644 index 0000000000..ea89a15594 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant3.java @@ -0,0 +1,60 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEOreDrillingPlant3 extends MTEOreDrillingPlantBase { + + public MTEOreDrillingPlant3(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + mTier = 3; + } + + public MTEOreDrillingPlant3(String aName) { + super(aName); + mTier = 3; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + return createTooltip("III"); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEOreDrillingPlant3(mName); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_RobustTungstenSteel; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.TungstenSteel; + } + + @Override + protected int getCasingTextureIndex() { + return 48; + } + + @Override + protected int getRadiusInChunks() { + return 6; + } + + @Override + protected int getMinTier() { + return 4; + } + + @Override + protected int getBaseProgressTime() { + return 640; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant4.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant4.java new file mode 100644 index 0000000000..44bc71519b --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlant4.java @@ -0,0 +1,60 @@ +package gregtech.common.tileentities.machines.multi; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEOreDrillingPlant4 extends MTEOreDrillingPlantBase { + + public MTEOreDrillingPlant4(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + mTier = 4; + } + + public MTEOreDrillingPlant4(String aName) { + super(aName); + mTier = 4; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + return createTooltip("IV"); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEOreDrillingPlant4(mName); + } + + @Override + protected ItemList getCasingBlockItem() { + return ItemList.Casing_MiningOsmiridium; + } + + @Override + protected Materials getFrameMaterial() { + return Materials.Osmiridium; + } + + @Override + protected int getCasingTextureIndex() { + return 62; + } + + @Override + protected int getRadiusInChunks() { + return 9; + } + + @Override + protected int getMinTier() { + return 5; + } + + @Override + protected int getBaseProgressTime() { + return 480; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlantBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlantBase.java new file mode 100644 index 0000000000..47504c574e --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEOreDrillingPlantBase.java @@ -0,0 +1,793 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.GTValues.TIER_COLORS; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraft.world.ChunkPosition; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SoundResource; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.widgets.LockedWhileActiveButton; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.metatileentity.IMetricsExporter; +import gregtech.api.objects.GTChunkManager; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.blocks.BlockOresAbstract; +import gregtech.common.blocks.TileEntityOres; +import gregtech.crossmod.visualprospecting.VisualProspectingDatabase; + +public abstract class MTEOreDrillingPlantBase extends MTEDrillerBase implements IMetricsExporter { + + private final List oreBlockPositions = new ArrayList<>(); + protected int mTier = 1; + private int chunkRadiusConfig = getRadiusInChunks(); + private boolean replaceWithCobblestone = true; + + /** Used to drive the remaining ores count in the UI. */ + private int clientOreListSize = 0; + + /** Used to drive the current chunk number in the UI. */ + private int clientCurrentChunk = 0; + + /** Used to drive the total chunk count in the UI. */ + private int clientTotalChunks = 0; + + /** Used to drive the drill's y-level in the UI. */ + private int clientYHead = 0; + + /** Contains the name of the currently mined vein. Used for driving metrics cover output. */ + private String veinName = null; + + MTEOreDrillingPlantBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + MTEOreDrillingPlantBase(String aName) { + super(aName); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("chunkRadiusConfig", chunkRadiusConfig); + aNBT.setBoolean("replaceWithCobblestone", replaceWithCobblestone); + if (veinName != null) { + aNBT.setString("veinName", veinName); + } else if (aNBT.hasKey("veinName")) { + aNBT.removeTag("veinName"); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("chunkRadiusConfig")) { + chunkRadiusConfig = aNBT.getInteger("chunkRadiusConfig"); + } + if (aNBT.hasKey("replaceWithCobblestone")) { + replaceWithCobblestone = aNBT.getBoolean("replaceWithCobblestone"); + } + if (aNBT.hasKey("veinName")) { + veinName = aNBT.getString("veinName"); + } else { + veinName = null; + } + } + + private void adjustChunkRadius(boolean increase) { + if (increase) { + if (chunkRadiusConfig <= getRadiusInChunks()) { + chunkRadiusConfig++; + } + if (chunkRadiusConfig > getRadiusInChunks()) chunkRadiusConfig = 1; + } else { + if (chunkRadiusConfig > 0) { + chunkRadiusConfig--; + } + if (chunkRadiusConfig == 0) chunkRadiusConfig = getRadiusInChunks(); + } + + if (mCurrentChunk != null && mChunkLoadingEnabled) { + GTChunkManager.releaseChunk((TileEntity) getBaseMetaTileEntity(), mCurrentChunk); + } + + oreBlockPositions.clear(); + createInitialWorkingChunk(); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + + if (getBaseMetaTileEntity().isActive()) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("GT5U.machines.workarea_fail")); + } else { + adjustChunkRadius(!aPlayer.isSneaking()); + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.workareaset") + " " + + GTUtility.formatNumbers((long) chunkRadiusConfig << 4) + + " " + + StatCollector.translateToLocal("GT5U.machines.radius")); + } + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + replaceWithCobblestone = !replaceWithCobblestone; + GTUtility.sendChatToPlayer(aPlayer, "Replace with cobblestone " + replaceWithCobblestone); + return true; + } + + @Override + protected boolean workingDownward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, + int yHead, int oldYHead) { + if (yHead != oldYHead) oreBlockPositions.clear(); + + if (mWorkChunkNeedsReload && mChunkLoadingEnabled) { // ask to load machine itself + GTChunkManager.requestChunkLoad((TileEntity) getBaseMetaTileEntity(), null); + mWorkChunkNeedsReload = false; + } + fillMineListIfEmpty(xDrill, yDrill, zDrill, xPipe, zPipe, yHead); + if (oreBlockPositions.isEmpty()) { + if (veinName == null) { + updateVeinNameFromVP(getDrillCoords()); + } + + switch (tryLowerPipeState()) { + case 2 -> { + mMaxProgresstime = 0; + setRuntimeFailureReason(CheckRecipeResultRegistry.MISSING_MINING_PIPE); + return false; + } + case 3 -> { + workState = STATE_UPWARD; + return true; + } + case 1 -> { + workState = STATE_AT_BOTTOM; + return true; + } + } + // new layer - fill again + fillMineListIfEmpty(xDrill, yDrill, zDrill, xPipe, zPipe, yHead); + } + return tryProcessOreList(); + } + + private boolean tryProcessOreList() { + // Even though it works fine without this check, + // it can save tiny amount of CPU time when void protection is disabled + if (protectsExcessItem()) { + boolean simulateResult = processOreList(true); + if (!simulateResult) { + mEUt = 0; + mMaxProgresstime = 0; + return false; + } + } + + boolean result = processOreList(false); + if (!result) { + mEUt = 0; + mMaxProgresstime = 0; + return false; + } + return true; + } + + private boolean processOreList(boolean simulate) { + ChunkPosition oreBlockPos = null; + List oreBlockPositions = simulate ? copyOreBlockPositions(this.oreBlockPositions) + : this.oreBlockPositions; + int x = 0, y = 0, z = 0; + Block oreBlock = null; + int oreBlockMetadata = 0; + + while ((oreBlock == null || !GTUtility.isOre(oreBlock, oreBlockMetadata)) && !oreBlockPositions.isEmpty()) { + oreBlockPos = oreBlockPositions.remove(0); + x = oreBlockPos.chunkPosX; + y = oreBlockPos.chunkPosY; + z = oreBlockPos.chunkPosZ; + if (GTUtility.eraseBlockByFakePlayer(getFakePlayer(getBaseMetaTileEntity()), x, y, z, true)) + oreBlock = getBaseMetaTileEntity().getBlock(x, y, z); + oreBlockMetadata = getBaseMetaTileEntity().getWorld() + .getBlockMetadata(x, y, z); + } + + if (!tryConsumeDrillingFluid(simulate)) { + oreBlockPositions.add(0, oreBlockPos); + setRuntimeFailureReason(CheckRecipeResultRegistry.NO_DRILLING_FLUID); + return false; + } + if (oreBlock != null && GTUtility.isOre(oreBlock, oreBlockMetadata)) { + short metaData = 0; + TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntity(x, y, z); + if (tTileEntity instanceof TileEntityOres) { + metaData = ((TileEntityOres) tTileEntity).mMetaData; + } + + Collection oreBlockDrops = getBlockDrops(oreBlock, x, y, z); + ItemStack cobble = GTUtility.getCobbleForOre(oreBlock, metaData); + if (!simulate) { + if (replaceWithCobblestone) { + getBaseMetaTileEntity().getWorld() + .setBlock(x, y, z, Block.getBlockFromItem(cobble.getItem()), cobble.getItemDamage(), 3); + } else { + getBaseMetaTileEntity().getWorld() + .setBlockToAir(oreBlockPos.chunkPosX, oreBlockPos.chunkPosY, oreBlockPos.chunkPosZ); + } + } + ItemStack[] toOutput = getOutputByDrops(oreBlockDrops); + if (simulate && !canOutputAll(toOutput)) { + setRuntimeFailureReason(CheckRecipeResultRegistry.ITEM_OUTPUT_FULL); + return false; + } + mOutputItems = toOutput; + } + return true; + } + + private static List copyOreBlockPositions(List oreBlockPositions) { + List ret = new ArrayList<>(); + for (ChunkPosition chunkPosition : oreBlockPositions) { + ret.add(new ChunkPosition(chunkPosition.chunkPosX, chunkPosition.chunkPosY, chunkPosition.chunkPosZ)); + } + return ret; + } + + @Override + protected boolean workingAtBottom(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, + int yHead, int oldYHead) { + if (!mChunkLoadingEnabled) + return super.workingAtBottom(aStack, xDrill, yDrill, zDrill, xPipe, zPipe, yHead, oldYHead); + + if (mCurrentChunk == null) { + createInitialWorkingChunk(); + return true; + } + + if (mWorkChunkNeedsReload) { + GTChunkManager.requestChunkLoad((TileEntity) getBaseMetaTileEntity(), mCurrentChunk); + mWorkChunkNeedsReload = false; + return true; + } + if (oreBlockPositions.isEmpty()) { + fillChunkMineList(yHead, yDrill); + if (oreBlockPositions.isEmpty()) { + GTChunkManager.releaseChunk((TileEntity) getBaseMetaTileEntity(), mCurrentChunk); + if (!moveToNextChunk(xDrill >> 4, zDrill >> 4)) { + workState = STATE_UPWARD; + updateVeinNameFromVP(); + } + return true; + } + } + return tryProcessOreList(); + } + + private void createInitialWorkingChunk() { + mCurrentChunk = getTopLeftChunkCoords(); + updateVeinNameFromVP(); + if (mChunkLoadingEnabled) { + GTChunkManager.requestChunkLoad((TileEntity) getBaseMetaTileEntity(), mCurrentChunk); + mWorkChunkNeedsReload = false; + } + } + + @NotNull + private ChunkCoordIntPair getTopLeftChunkCoords() { + return getCornerCoords(-1, -1); + } + + @NotNull + private ChunkCoordIntPair getBottomRightChunkCoords() { + return getCornerCoords(1, 1); + } + + @NotNull + private ChunkCoordIntPair getCornerCoords(int xMultiplier, int zMultiplier) { + final ChunkCoordIntPair drillPos = getDrillCoords(); + // use corner closest to the drill as mining area center + return new ChunkCoordIntPair( + drillPos.chunkXPos + xMultiplier * chunkRadiusConfig + + ((getXDrill() - (drillPos.chunkXPos << 4)) < 8 ? 0 : 1), + drillPos.chunkZPos + zMultiplier * chunkRadiusConfig + + ((getZDrill() - (drillPos.chunkZPos << 4)) < 8 ? 0 : 1)); + } + + @NotNull + private ChunkCoordIntPair getDrillCoords() { + return new ChunkCoordIntPair(getXDrill() >> 4, getZDrill() >> 4); + } + + private int getTotalChunkCount() { + final ChunkCoordIntPair topLeft = getTopLeftChunkCoords(); + final ChunkCoordIntPair bottomRight = getBottomRightChunkCoords(); + return (bottomRight.chunkXPos - topLeft.chunkXPos) * (bottomRight.chunkZPos - topLeft.chunkZPos); + } + + /** + * Returns a number corresponding to which chunk the drill is operating on. Only really useful for driving outputs + * in the controller UI. + * + * @return 0 if the miner is not in operation, positive integer corresponding to the chunk currently being drilled + */ + @SuppressWarnings("ExtractMethodRecommender") + private int getChunkNumber() { + if (mCurrentChunk == null) { + return 0; + } + + final ChunkCoordIntPair topLeft = getTopLeftChunkCoords(); + final ChunkCoordIntPair drillPos = getDrillCoords(); + + if (workState == STATE_DOWNWARD) { + return 1; + } else if (workState == STATE_UPWARD) { + // Technically, the miner isn't mining anything now; it's retracting the pipes in preparation to end + // operation. + return 0; + } + + int chunkNumber = (chunkRadiusConfig * 2) * (mCurrentChunk.chunkZPos - topLeft.chunkZPos) + + mCurrentChunk.chunkXPos + - topLeft.chunkXPos + + 1; + + // Drills mine the chunk they're in first, so if we're not there yet, bump the number to indicate that it + // was already mined. + if (mCurrentChunk.chunkZPos < drillPos.chunkZPos + || (mCurrentChunk.chunkZPos == drillPos.chunkZPos && mCurrentChunk.chunkXPos < drillPos.chunkXPos)) { + chunkNumber += 1; + } + return chunkNumber; + } + + @Override + protected boolean workingUpward(ItemStack aStack, int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, + int yHead, int oldYHead) { + boolean result; + if (!mChunkLoadingEnabled || oreBlockPositions.isEmpty()) { + result = super.workingUpward(aStack, xDrill, yDrill, zDrill, xPipe, zPipe, yHead, oldYHead); + } else { + result = tryProcessOreList(); + if (oreBlockPositions.isEmpty()) GTChunkManager.releaseTicket((TileEntity) getBaseMetaTileEntity()); + } + + if (!result) { + setShutdownReason(StatCollector.translateToLocal("GT5U.gui.text.drill_exhausted")); + } + + return result; + } + + @Override + protected void onAbort() { + oreBlockPositions.clear(); + if (mCurrentChunk != null) { + GTChunkManager.releaseChunk((TileEntity) getBaseMetaTileEntity(), mCurrentChunk); + } + mCurrentChunk = null; + updateVeinNameFromVP(); + } + + private boolean moveToNextChunk(int centerX, int centerZ) { + if (mCurrentChunk == null) return false; + // use corner closest to the drill as mining area center + final int left = centerX - chunkRadiusConfig + ((getXDrill() - (centerX << 4)) < 8 ? 0 : 1); + final int right = left + chunkRadiusConfig * 2; + final int bottom = centerZ + chunkRadiusConfig + ((getZDrill() - (centerZ << 4)) < 8 ? 0 : 1); + + int nextChunkX = mCurrentChunk.chunkXPos + 1; + int nextChunkZ = mCurrentChunk.chunkZPos; + + // step to the next chunk + if (nextChunkX >= right) { + nextChunkX = left; + ++nextChunkZ; + } + // skip center chunk - dug in workingDownward() + if (nextChunkX == centerX && nextChunkZ == centerZ) { + ++nextChunkX; + + if (nextChunkX >= right) { + nextChunkX = left; + ++nextChunkZ; + } + } + + if (nextChunkZ >= bottom) { + mCurrentChunk = null; + return false; + } + + mCurrentChunk = new ChunkCoordIntPair(nextChunkX, nextChunkZ); + updateVeinNameFromVP(); + + GTChunkManager + .requestChunkLoad((TileEntity) getBaseMetaTileEntity(), new ChunkCoordIntPair(nextChunkX, nextChunkZ)); + return true; + } + + private void updateVeinNameFromVP() { + updateVeinNameFromVP(mCurrentChunk); + } + + private void updateVeinNameFromVP(@NotNull ChunkCoordIntPair coords) { + veinName = VisualProspectingDatabase + .getVeinName(getBaseMetaTileEntity().getWorld().provider.dimensionId, coords) + .orElse(null); + } + + @Override + protected boolean checkHatches() { + return !mMaintenanceHatches.isEmpty() && !mInputHatches.isEmpty() + && !mOutputBusses.isEmpty() + && !mEnergyHatches.isEmpty(); + } + + @Override + protected List> getAllowedHatches() { + return ImmutableList.of(InputHatch, InputBus, OutputBus, Maintenance, Energy); + } + + @Override + protected void setElectricityStats() { + this.mEfficiency = getCurrentEfficiency(null); + this.mEfficiencyIncrease = 10000; + int tier = Math.max(1, GTUtility.getTier(getMaxInputVoltage())); + this.mEUt = -3 * (1 << (tier << 1)); + this.mMaxProgresstime = calculateMaxProgressTime(tier); + } + + private int calculateMaxProgressTime(int tier) { + return Math.max( + 1, + ((workState == STATE_DOWNWARD || workState == STATE_AT_BOTTOM) ? getBaseProgressTime() : 80) / (1 << tier)); + } + + private ItemStack[] getOutputByDrops(Collection oreBlockDrops) { + long voltage = getMaxInputVoltage(); + Collection outputItems = new HashSet<>(); + oreBlockDrops.forEach(currentItem -> { + if (!doUseMaceratorRecipe(currentItem)) { + outputItems.add(multiplyStackSize(currentItem)); + return; + } + GTRecipe tRecipe = RecipeMaps.maceratorRecipes + .findRecipe(getBaseMetaTileEntity(), false, voltage, null, currentItem); + if (tRecipe == null) { + outputItems.add(currentItem); + return; + } + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + ItemStack recipeOutput = tRecipe.mOutputs[i].copy(); + if (getBaseMetaTileEntity().getRandomNumber(10000) < tRecipe.getOutputChance(i)) + multiplyStackSize(recipeOutput); + outputItems.add(recipeOutput); + } + }); + return outputItems.toArray(new ItemStack[0]); + } + + private boolean doUseMaceratorRecipe(ItemStack currentItem) { + ItemData itemData = GTOreDictUnificator.getItemData(currentItem); + return itemData == null || itemData.mPrefix != OrePrefixes.crushed && itemData.mPrefix != OrePrefixes.dustImpure + && itemData.mPrefix != OrePrefixes.dust + && itemData.mPrefix != OrePrefixes.gem + && itemData.mPrefix != OrePrefixes.gemChipped + && itemData.mPrefix != OrePrefixes.gemExquisite + && itemData.mPrefix != OrePrefixes.gemFlawed + && itemData.mPrefix != OrePrefixes.gemFlawless + && itemData.mMaterial.mMaterial != Materials.Oilsands; + } + + private ItemStack multiplyStackSize(ItemStack itemStack) { + itemStack.stackSize *= getBaseMetaTileEntity().getRandomNumber(4) + 1; + return itemStack; + } + + private Collection getBlockDrops(final Block oreBlock, int posX, int posY, int posZ) { + final int blockMeta = getBaseMetaTileEntity().getMetaID(posX, posY, posZ); + if (oreBlock.canSilkHarvest(getBaseMetaTileEntity().getWorld(), null, posX, posY, posZ, blockMeta)) { + return Collections.singleton(new ItemStack(oreBlock, 1, blockMeta)); + } + if (oreBlock instanceof BlockOresAbstract) { + TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntity(posX, posY, posZ); + if (tTileEntity instanceof TileEntityOres && ((TileEntityOres) tTileEntity).mMetaData >= 16000) { + // GTLog.out.println("Running Small Ore"); + return oreBlock.getDrops(getBaseMetaTileEntity().getWorld(), posX, posY, posZ, blockMeta, mTier + 3); + } + } + // GTLog.out.println("Running Normal Ore"); + return oreBlock.getDrops(getBaseMetaTileEntity().getWorld(), posX, posY, posZ, blockMeta, 0); + } + + private boolean tryConsumeDrillingFluid(boolean simulate) { + return depleteInput(new FluidStack(ItemList.sDrillingFluid, 2000), simulate); + } + + private void fillChunkMineList(int yHead, int yDrill) { + if (mCurrentChunk == null || !oreBlockPositions.isEmpty()) return; + final int minX = mCurrentChunk.chunkXPos << 4; + final int maxX = minX + 16; + final int minZ = mCurrentChunk.chunkZPos << 4; + final int maxZ = minZ + 16; + for (int x = minX; x < maxX; ++x) + for (int z = minZ; z < maxZ; ++z) for (int y = yHead; y < yDrill; ++y) tryAddOreBlockToMineList(x, y, z); + } + + private void fillMineListIfEmpty(int xDrill, int yDrill, int zDrill, int xPipe, int zPipe, int yHead) { + if (!oreBlockPositions.isEmpty()) return; + + tryAddOreBlockToMineList(xPipe, yHead - 1, zPipe); + if (yHead == yDrill) return; // skip controller block layer + + if (mChunkLoadingEnabled) { + int startX = (xDrill >> 4) << 4; + int startZ = (zDrill >> 4) << 4; + for (int x = startX; x < (startX + 16); ++x) + for (int z = startZ; z < (startZ + 16); ++z) tryAddOreBlockToMineList(x, yHead, z); + } else { + int radius = chunkRadiusConfig << 4; + for (int xOff = -radius; xOff <= radius; xOff++) for (int zOff = -radius; zOff <= radius; zOff++) + tryAddOreBlockToMineList(xDrill + xOff, yHead, zDrill + zOff); + } + } + + private void tryAddOreBlockToMineList(int x, int y, int z) { + Block block = getBaseMetaTileEntity().getBlock(x, y, z); + int blockMeta = getBaseMetaTileEntity().getMetaID(x, y, z); + ChunkPosition blockPos = new ChunkPosition(x, y, z); + if (!oreBlockPositions.contains(blockPos)) { + if (block instanceof BlockOresAbstract) { + TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntity(x, y, z); + if (tTileEntity instanceof TileEntityOres && ((TileEntityOres) tTileEntity).mNatural) + oreBlockPositions.add(blockPos); + } else if (GTUtility.isOre(block, blockMeta)) oreBlockPositions.add(blockPos); + } + } + + protected abstract int getRadiusInChunks(); + + protected abstract int getBaseProgressTime(); + + protected MultiblockTooltipBuilder createTooltip(String tierSuffix) { + String casings = getCasingBlockItem().get(0) + .getDisplayName(); + + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + final int baseCycleTime = calculateMaxProgressTime(getMinTier()); + tt.addMachineType("Miner") + .addInfo("Controller Block for the Ore Drilling Plant " + (tierSuffix != null ? tierSuffix : "")) + .addInfo("Use a Screwdriver to configure block radius") + .addInfo("Maximum radius is " + GTUtility.formatNumbers((long) getRadiusInChunks() << 4) + " blocks") + .addInfo("Use Soldering iron to turn off chunk mode") + .addInfo("Use Wire Cutter to toggle replacing mined blocks with cobblestone") + .addInfo("In chunk mode, working area center is the chunk corner nearest to the drill") + .addInfo("Gives ~3x as much crushed ore vs normal processing") + .addInfo("Fortune bonus of " + GTUtility.formatNumbers(mTier + 3) + ". Only works on small ores") + .addInfo("Minimum energy hatch tier: " + TIER_COLORS[getMinTier()] + VN[getMinTier()]) + .addInfo( + "Base cycle time: " + (baseCycleTime < 20 ? GTUtility.formatNumbers(baseCycleTime) + " ticks" + : GTUtility.formatNumbers(baseCycleTime / 20) + " seconds")) + .addSeparator() + .beginStructureBlock(3, 7, 3, false) + .addController("Front bottom") + .addOtherStructurePart(casings, "form the 3x1x3 Base") + .addOtherStructurePart(casings, "1x3x1 pillar above the center of the base (2 minimum total)") + .addOtherStructurePart(getFrameMaterial().mName + " Frame Boxes", "Each pillar's side and 1x3x1 on top") + .addEnergyHatch(VN[getMinTier()] + "+, Any base casing", 1) + .addMaintenanceHatch("Any base casing", 1) + .addInputBus("Mining Pipes, optional, any base casing", 1) + .addInputHatch("Drilling Fluid, any base casing", 1) + .addOutputBus("Any base casing", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + screenElements + .widget( + new TextWidget() + .setStringSupplier( + () -> EnumChatFormatting.GRAY + StatCollector.translateToLocalFormatted( + "GT5U.gui.text.drill_ores_left_chunk", + numberFormat.format(clientOreListSize))) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled( + widget -> getBaseMetaTileEntity().isActive() && clientOreListSize > 0 + && workState == STATE_AT_BOTTOM)) + .widget( + new TextWidget() + .setStringSupplier( + () -> EnumChatFormatting.GRAY + StatCollector.translateToLocalFormatted( + "GT5U.gui.text.drill_ores_left_layer", + numberFormat.format(clientYHead), + numberFormat.format(clientOreListSize))) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled( + widget -> getBaseMetaTileEntity().isActive() && clientYHead > 0 && workState == STATE_DOWNWARD)) + .widget( + new TextWidget() + .setStringSupplier( + () -> EnumChatFormatting.GRAY + StatCollector.translateToLocalFormatted( + "GT5U.gui.text.drill_chunks_left", + numberFormat.format(clientCurrentChunk), + numberFormat.format(clientTotalChunks))) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled( + widget -> getBaseMetaTileEntity().isActive() && clientCurrentChunk > 0 + && workState == STATE_AT_BOTTOM)) + .widget( + new TextWidget() + .setStringSupplier( + () -> EnumChatFormatting.GRAY + + StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_current_vein", veinName)) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled( + widget -> veinName != null && (workState == STATE_AT_BOTTOM || workState == STATE_DOWNWARD))) + .widget(new FakeSyncWidget.IntegerSyncer(oreBlockPositions::size, (newInt) -> clientOreListSize = newInt)) + .widget(new FakeSyncWidget.IntegerSyncer(this::getTotalChunkCount, (newInt) -> clientTotalChunks = newInt)) + .widget(new FakeSyncWidget.IntegerSyncer(this::getChunkNumber, (newInt) -> clientCurrentChunk = newInt)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> workState, (newInt) -> workState = newInt)) + .widget(new FakeSyncWidget.IntegerSyncer(this::getYHead, (newInt) -> clientYHead = newInt)) + .widget(new FakeSyncWidget.StringSyncer(() -> veinName, (newString) -> veinName = newString)); + } + + @Override + protected List getAdditionalButtons(ModularWindow.Builder builder, UIBuildContext buildContext) { + return ImmutableList.of( + (ButtonWidget) new LockedWhileActiveButton(this.getBaseMetaTileEntity(), builder) + .setOnClick((clickData, widget) -> adjustChunkRadius(clickData.mouseButton == 0)) + .setPlayClickSound(true) + .setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_WORK_AREA) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer(() -> chunkRadiusConfig, (val) -> chunkRadiusConfig = val), + builder, + (widget, val) -> widget.notifyTooltipChange()) + .dynamicTooltip( + () -> ImmutableList.of( + StatCollector.translateToLocalFormatted( + "GT5U.gui.button.ore_drill_radius_1", + GTUtility.formatNumbers((long) chunkRadiusConfig << 4)), + StatCollector.translateToLocal("GT5U.gui.button.ore_drill_radius_2"))) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setSize(16, 16), + (ButtonWidget) new LockedWhileActiveButton(this.getBaseMetaTileEntity(), builder) + .setOnClick((clickData, widget) -> replaceWithCobblestone = !replaceWithCobblestone) + .setPlayClickSound(true) + .setBackground(() -> { + if (replaceWithCobblestone) { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED, + GTUITextures.OVERLAY_BUTTON_REPLACE_COBBLE_ON }; + } + return new IDrawable[] { GTUITextures.BUTTON_STANDARD, + GTUITextures.OVERLAY_BUTTON_REPLACE_COBBLE_OFF }; + }) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer( + () -> replaceWithCobblestone, + (val) -> replaceWithCobblestone = val), + builder, + (widget, val) -> widget.notifyTooltipChange()) + .dynamicTooltip( + () -> ImmutableList.of( + StatCollector.translateToLocal( + replaceWithCobblestone ? "GT5U.gui.button.ore_drill_cobblestone_on" + : "GT5U.gui.button.ore_drill_cobblestone_off"))) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setSize(16, 16)); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_MINER_OP; + } + + @Override + public String[] getInfoData() { + final String diameter = GTUtility.formatNumbers(chunkRadiusConfig * 2L); + return new String[] { + EnumChatFormatting.BLUE + StatCollector.translateToLocal("GT5U.machines.minermulti") + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.machines.workarea") + ": " + + EnumChatFormatting.GREEN + + diameter + + "x" + + diameter + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.machines.chunks") }; + } + + @Override + public @NotNull List reportMetrics() { + if (getBaseMetaTileEntity().isActive()) { + return switch (workState) { + case STATE_AT_BOTTOM -> ImmutableList.of( + StatCollector.translateToLocalFormatted( + "GT5U.gui.text.drill_ores_left_chunk", + GTUtility.formatNumbers(oreBlockPositions.size())), + StatCollector.translateToLocalFormatted( + "GT5U.gui.text.drill_chunks_left", + GTUtility.formatNumbers(getChunkNumber()), + GTUtility.formatNumbers(getTotalChunkCount())), + veinName == null ? "" + : StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_current_vein", veinName)); + case STATE_DOWNWARD -> ImmutableList.of( + StatCollector.translateToLocalFormatted( + "GT5U.gui.text.drill_ores_left_layer", + getYHead(), + GTUtility.formatNumbers(oreBlockPositions.size())), + veinName == null ? "" + : StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_current_vein", veinName)); + case STATE_UPWARD, STATE_ABORT -> ImmutableList + .of(StatCollector.translateToLocal("GT5U.gui.text.retracting_pipe")); + + default -> ImmutableList.of(); + }; + } + + return ImmutableList.of( + getFailureReason() + .map(reason -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_reason", reason)) + .orElseGet(() -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_generic"))); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEPCBFactory.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPCBFactory.java new file mode 100644 index 0000000000..b2d20b9745 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPCBFactory.java @@ -0,0 +1,1287 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.AuthorBlueWeabo; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.ExoticEnergy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_ASSEMBLY_LINE_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; +import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; +import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import blockrenderer6343.client.world.ClientFakePlayer; +import cpw.mods.fml.common.Loader; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.GregTechTileClientEvents; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.recipe.metadata.PCBFactoryTierKey; +import gregtech.api.recipe.metadata.PCBFactoryUpgrade; +import gregtech.api.recipe.metadata.PCBFactoryUpgradeKey; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.ParallelHelper; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.blocks.BlockCasings8; + +@SuppressWarnings("SpellCheckingInspection") +public class MTEPCBFactory extends MTEExtendedPowerMultiBlockBase implements ISurvivalConstructable { + + private static final String tier1 = "tier1"; + private static final String tier2 = "tier2"; + private static final String tier3 = "tier3"; + private static final String bioUpgrade = "bioUpgrade"; + private static final String ocTier1Upgrade = "ocTier1Upgrade"; + private static final String ocTier2Upgrade = "ocTier2Upgrade"; + private float mRoughnessMultiplier = 1; + private int mTier = 1, mSetTier = 1, mUpgradesInstalled = 0, mCurrentParallel = 0, mMaxParallel = 0; + private boolean mBioUpgrade = false, mBioRotate = false, mOCTier1 = false, mOCTier2 = false; + private final int[] mBioOffsets = new int[] { -5, -1 }; + private final int[] mOCTier1Offsets = new int[] { 2, -11 }; + private final int[] mOCTier2Offsets = new int[] { 2, -11 }; + private MTEHatchInput mCoolantInputHatch; + private static final int mBioRotateBitMap = 0b1000000; + private static final int mOCTier2BitMap = 0b100000; + private static final int mOCTier1BitMap = 0b10000; + private static final int mBioBitMap = 0b1000; + private static final int mTier3BitMap = 0b100; + private static final int mTier2BitMap = 0b10; + private static final int mTier1BitMap = 0b1; + private static final int COOLANT_CONSUMED_PER_SEC = 10; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + tier1, + transpose( + new String[][] { + // spotless:off + {" ","E E","E E","EEEEEEE","E E","E E"," "}, + {"EEEEEEE","CAAAAAC","CAAAAAC","CCCCCCC","CCCCCCC","CCCCCCC","E E"}, + {"EAAAAAE","C-----C","C-----C","C-----C","C-----C","C-----C","ECCCCCE"}, + {"EAAAAAE","C-----C","B-----B","B-----B","B-----B","C-----C","ECCCCCE"}, + {"EAAAAAE","C-----C","B-FFF-B","B-FFF-B","B-FFF-B","C-----C","EPPPPPE"}, + {"ECC~CCE","CDDDDDC","CDDDDDC","CDDDDDC","CDDDDDC","CDDDDDC","EPPPPPE"} + //spotless:on + })) + .addShape( + tier2, + transpose( + new String[][] { + // spotless:off + {" "," "," ","HGGH","HGGH","HGGH","HGGH","HGGH"," "," "," "}, + {" "," ","HGGH","GGGG","GGGG","GGGG","GGGG","GGGG","HGGH"," "," "}, + {" ","HGGH","GGGG","G G","G G","G G","G G","G G","GGGG","HGGH"," "}, + {" ","HGGH","G G","G G","G G","G G","G G","G G","G G","HGGH"," "}, + {"HGGH","G G","G G","G G","G G","G G","G G","G G","G G","G G","HGGH"}, + {"HGGH","G G","G G","G G","G G","G G","G G","G G","G G","G G","HGGH"}, + {"HGGH","GGGG","GGGG","GGGG","GGGG","GGGG","GGGG","GGGG","GGGG","GGGG","HGGH"} + //spotless:on + })) + .addShape( + tier3, + transpose( + new String[][] { + // spotless:off + {" "," "," "," "," I "," I "," "," "," "," "}, + {" "," "," "," I "," I "," I "," I "," "," "," "}, + {" "," "," KKK "," KIK "," K K "," K K "," I "," "," "," "}, + {" "," "," KKK "," K K "," K K "," K K "," I "," "," "," "}, + {" "," III "," I I "," I I "," I I "," K K "," I "," "," "," "}, + {" "," III "," I I "," I I "," I I "," K K "," I "," "," "," "}, + {" "," III "," I I "," I I "," I I "," K K "," KIK "," "," "," "}, + {" "," I I "," I K I "," I I "," I I "," K K "," KIK "," "," "," "}, + {" "," I I "," I K I "," I I "," I I "," K K "," K K "," KKK "," "," "}, + {" "," I I "," I K I "," I I "," I I "," K K "," K K "," KKK "," "," "}, + {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, + {" "," III "," I I "," K K "," K K "," K K "," K K "," I I "," III "," "}, + {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, + {" "," "," KKK "," K K "," K K "," I I "," I I "," I I "," III "," "}, + {" "," "," KKK "," K K "," K K "," I I "," I I "," I I "," III "," "}, + {" "," "," KKK "," K K "," K K "," I I "," I I "," I I "," III "," "}, + {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, + {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, + {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, + {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, + {" "," III "," I I "," I I "," I I "," I I "," I I "," I I "," III "," "}, + {" II~II ","IIJJJII","IJJJJJI","IJJJJJI","IJJJJJI","IJJJJJI","IJJJJJI","IJJJJJI","IIJJJII"," IIIII "} + //spotless:on + })) + .addShape( + bioUpgrade, + transpose( + new String[][] { + // spotless:off + {" "," "," LLLLLL "," "," "}, + {" "," "," L L "," "," "}, + {"E E E E"," LLL LLL "," LLL LLL "," LLL LLL ","E E E E"}, + {"EAAAE EAAAE","A A A A","A A A A","A A A A","EAAAE EAAAE"}, + {"EAAAE EAAAE","A A A A","A A A A","A A A A","EAAAE EAAAE"}, + {"EAAAE EAAAE","A A A A","A A A A","A A A A","EAAAE EAAAE"}, + {"ELLLE ELLLE","LLLLL LLLLL","LLLLL LLLLL","LLLLL LLLLL","ELLLE ELLLE"} + //spotless:on + })) + .addShape( + ocTier1Upgrade, + transpose( + new String[][] { + // spotless:off + {"EKKKE","K K","K K","K K","EKKKE"}, + {"E E"," KKK "," K K "," KKK ","E E"}, + {"E E"," NNN "," N N "," NNN ","E E"}, + {"E E"," KKK "," K K "," KKK ","E E"}, + {"E E"," KKK "," K K "," KKK ","E E"}, + {"EOOOE","OKKKO","OK KO","OKKKO","EOOOE"}, + {"E E"," KKK "," K K "," KKK ","E E"}, + {"E E"," KKK "," K K "," KKK ","E E"}, + {"ENNNE","NKKKN","NK KN","NKKKN","ENNNE"}, + {"EGGGE","GGGGG","GGMGG","GGGGG","EGGGE"} + //spotless:on + })) + .addShape( + ocTier2Upgrade, + transpose( + new String[][] { + // spotless:off + {"RGGGR","G G","G G","G G","RGGGR"}, + {"R R"," GGG "," GTG "," GGG ","R R"}, + {"R R"," NNN "," NTN "," NNN ","R R"}, + {"R R"," QQQ "," QTQ "," QQQ ","R R"}, + {"R R"," QQQ "," QTQ "," QQQ ","R R"}, + {"R R"," QQQ "," QTQ "," QQQ ","R R"}, + {"R R"," QQQ "," QTQ "," QQQ ","R R"}, + {"R R"," QQQ "," QTQ "," QQQ ","R R"}, + {"RNNNR","NQQQN","NQTQN","NQQQN","RNNNR"}, + {"RGGGR","GGGGG","GGSGG","GGGGG","RGGGR"} + //spotless:on + })) + .addElement('E', ofFrame(Materials.DamascusSteel)) + .addElement('C', ofBlock(GregTechAPI.sBlockCasings8, 11)) + .addElement('D', ofBlock(GregTechAPI.sBlockReinforced, 2)) + .addElement('A', Glasses.chainAllGlasses()) + .addElement('B', ofBlock(GregTechAPI.sBlockCasings3, 10)) + .addElement('F', ofFrame(Materials.VibrantAlloy)) + .addElement( + 'P', + buildHatchAdder(MTEPCBFactory.class) + .atLeast(InputHatch, OutputBus, InputBus, Maintenance, Energy.or(ExoticEnergy)) + .dot(1) + .casingIndex(((BlockCasings8) GregTechAPI.sBlockCasings8).getTextureIndex(11)) + .buildAndChain(GregTechAPI.sBlockCasings8, 11)) + .addElement('H', ofFrame(Materials.Duranium)) + .addElement('G', ofBlock(GregTechAPI.sBlockCasings8, 12)) + .addElement('I', ofBlock(GregTechAPI.sBlockCasings8, 13)) + .addElement('K', ofBlock(GregTechAPI.sBlockCasings8, 10)) + .addElement( + 'J', + buildHatchAdder(MTEPCBFactory.class) + .atLeast(InputHatch, OutputBus, InputBus, Maintenance, Energy.or(ExoticEnergy)) + .dot(1) + .casingIndex(((BlockCasings8) GregTechAPI.sBlockCasings8).getTextureIndex(13)) + .buildAndChain(GregTechAPI.sBlockCasings8, 13)) + .addElement('L', ofBlock(GregTechAPI.sBlockCasings4, 1)) + .addElement( + 'M', + buildHatchAdder(MTEPCBFactory.class).hatchClass(MTEHatchInput.class) + .adder(MTEPCBFactory::addCoolantInputToMachineList) + .casingIndex(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings8, 12)) + .dot(2) + .buildAndChain(GregTechAPI.sBlockCasings8, 12)) + .addElement('N', ofBlock(GregTechAPI.sBlockCasings2, 15)) + .addElement('O', ofBlock(GregTechAPI.sBlockCasings8, 4)) + .addElement( + 'S', + buildHatchAdder(MTEPCBFactory.class).hatchClass(MTEHatchInput.class) + .adder(MTEPCBFactory::addCoolantInputToMachineList) + .casingIndex(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings8, 12)) + .dot(2) + .buildAndChain(GregTechAPI.sBlockCasings8, 12)) + .addElement('R', ofFrame(Materials.Americium)) + .addElement('Q', ofBlock(GregTechAPI.sBlockCasings8, 14)) + .addElement('T', ofBlock(GregTechAPI.sBlockCasings1, 15)) + .build(); + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + if (mSetTier < 3) { + buildPiece(tier1, stackSize, hintsOnly, 3, 5, 0); + if (mSetTier == 2) { + buildPiece(tier2, stackSize, hintsOnly, 7, 6, 2); + } + } else { + buildPiece(tier3, stackSize, hintsOnly, 3, 21, 0); + } + + if (mBioUpgrade) { + if (mBioRotate) { + final IGregTechTileEntity tTile = getBaseMetaTileEntity(); + getStructureDefinition().buildOrHints( + this, + stackSize, + bioUpgrade, + tTile.getWorld(), + transformFacing(getExtendedFacing()), + tTile.getXCoord(), + tTile.getYCoord(), + tTile.getZCoord(), + mBioOffsets[1], + 6, + mBioOffsets[0], + hintsOnly); + } else { + buildPiece(bioUpgrade, stackSize, hintsOnly, mBioOffsets[0], 6, mBioOffsets[1]); + } + } + + if (mOCTier1 && !mOCTier2) { + buildPiece(ocTier1Upgrade, stackSize, hintsOnly, mOCTier1Offsets[0], 9, mOCTier1Offsets[1]); + } + + if (!mOCTier1 && mOCTier2) { + buildPiece(ocTier2Upgrade, stackSize, hintsOnly, mOCTier2Offsets[0], 9, mOCTier2Offsets[1]); + } + } + + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int built = 0; + if (Loader.isModLoaded("blockrenderer6343") && env.getActor() instanceof ClientFakePlayer) { + if (stackSize.stackSize < 3) { + built += survivialBuildPiece(tier1, stackSize, 3, 5, 0, elementBudget, env, false, false); + if (stackSize.stackSize == 2) { + built += survivialBuildPiece(tier2, stackSize, 7, 6, 2, elementBudget, env, false, false); + } + } else { + built += survivialBuildPiece(tier3, stackSize, 3, 21, 0, elementBudget, env, false, false); + } + return built; + } + if (mSetTier < 3) { + built += survivialBuildPiece(tier1, stackSize, 3, 5, 0, elementBudget, env, false, true); + if (mSetTier == 2) { + built += survivialBuildPiece(tier2, stackSize, 7, 6, 2, elementBudget, env, false, true); + } + } else { + built += survivialBuildPiece(tier3, stackSize, 3, 21, 0, elementBudget, env, false, true); + } + + if (mBioUpgrade) { + if (mBioRotate) { + final IGregTechTileEntity tTile = getBaseMetaTileEntity(); + getStructureDefinition().survivalBuild( + this, + stackSize, + bioUpgrade, + tTile.getWorld(), + transformFacing(getExtendedFacing()), + tTile.getXCoord(), + tTile.getYCoord(), + tTile.getZCoord(), + mBioOffsets[1], + 6, + mBioOffsets[0], + elementBudget, + env, + false); + } else { + built += survivialBuildPiece( + bioUpgrade, + stackSize, + mBioOffsets[0], + 6, + mBioOffsets[1], + elementBudget, + env, + false, + true); + } + } + + if (mOCTier1 && !mOCTier2) { + built += survivialBuildPiece( + ocTier1Upgrade, + stackSize, + mOCTier1Offsets[0], + 9, + mOCTier1Offsets[1], + elementBudget, + env, + false, + true); + } + if (!mOCTier1 && mOCTier2) { + built += survivialBuildPiece( + ocTier2Upgrade, + stackSize, + mOCTier2Offsets[0], + 9, + mOCTier2Offsets[1], + elementBudget, + env, + false, + true); + } + + return built; + } + + public MTEPCBFactory(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPCBFactory(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPCBFactory(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection == facingDirection) { + if (active) return new ITexture[] { + BlockIcons.getCasingTextureForId( + getTier() < 3 ? GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings8, 11) + : GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings8, 13)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { + BlockIcons.getCasingTextureForId( + getTier() < 3 ? GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings8, 11) + : GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings8, 13)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_ASSEMBLY_LINE_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { BlockIcons.getCasingTextureForId( + mSetTier < 3 ? ((BlockCasings8) GregTechAPI.sBlockCasings8).getTextureIndex(11) + : ((BlockCasings8) GregTechAPI.sBlockCasings8).getTextureIndex(13)) }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mTier = 0; + mUpgradesInstalled = 0; + mCoolantInputHatch = null; + if (mSetTier < 3) { + if (!checkPiece(tier1, 3, 5, 0)) { + return false; + } + if (mSetTier == 2) { + if (!checkPiece(tier2, 7, 6, 2)) { + return false; + } + mTier = 2; + } else { + mTier = 1; + } + } else { + if (!checkPiece(tier3, 3, 21, 0)) { + return false; + } + mTier = 3; + } + + if (mBioUpgrade) { + if (mBioRotate) { + final IGregTechTileEntity tTile = getBaseMetaTileEntity(); + if (!getStructureDefinition().check( + this, + bioUpgrade, + tTile.getWorld(), + transformFacing(getExtendedFacing()), + tTile.getXCoord(), + tTile.getYCoord(), + tTile.getZCoord(), + mBioOffsets[1], + 6, + mBioOffsets[0], + !mMachine)) { + return false; + } + } else { + if (!checkPiece(bioUpgrade, mBioOffsets[0], 6, mBioOffsets[1])) { + return false; + } + } + mUpgradesInstalled++; + } + + if (mOCTier1 && !mOCTier2) { + if (!checkPiece(ocTier1Upgrade, mOCTier1Offsets[0], 9, mOCTier1Offsets[1])) { + return false; + } + if (mCoolantInputHatch == null) { + return false; + } + mUpgradesInstalled++; + } + + if (mOCTier2 && !mOCTier1) { + if (!checkPiece(ocTier2Upgrade, mOCTier2Offsets[0], 9, mOCTier2Offsets[1])) { + return false; + } + if (mCoolantInputHatch == null) { + return false; + } + mUpgradesInstalled++; + } + + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); + + if (mMaintenanceHatches.size() != 1) { + return false; + } + + if (!checkExoticAndNormalEnergyHatches()) { + return false; + } + + return mTier > 0; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.pcbFactoryRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + // Here we check the dynamic parallels, which depend on the recipe + int numberOfNanites = 0; + ItemStack aNanite = recipe.getRepresentativeInput(1); + ItemData naniteData = GTOreDictUnificator.getAssociation(aNanite); + if (naniteData != null && naniteData.mPrefix != null && naniteData.mPrefix.equals(OrePrefixes.nanite)) { + for (ItemStack aItem : inputItems) { + if (aItem != null && aItem.isItemEqual(aNanite)) { + numberOfNanites += aItem.stackSize; + } + } + } + maxParallel = (int) Math.max(Math.ceil(Math.log(numberOfNanites) / Math.log(2) + 0.00001), 1); + mMaxParallel = maxParallel; + + PCBFactoryUpgrade requiredUpgrade = recipe.getMetadata(PCBFactoryUpgradeKey.INSTANCE); + if (requiredUpgrade == PCBFactoryUpgrade.BIO && !mBioUpgrade) + return SimpleCheckRecipeResult.ofFailure("bio_upgrade_missing"); + + int requiredPCBTier = recipe.getMetadataOrDefault(PCBFactoryTierKey.INSTANCE, 1); + if (requiredPCBTier > mTier) return CheckRecipeResultRegistry.insufficientMachineTier(requiredPCBTier); + + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).setNoOverclock(isNoOC()) + .setEUtDiscount((float) Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled)) + .setSpeedBoost(getDurationMultiplierFromRoughness()) + .setDurationDecreasePerOC(mOCTier2 ? 4.0 : 2.0); + } + + @Nonnull + @Override + protected ParallelHelper createParallelHelper(@Nonnull GTRecipe recipe) { + return super.createParallelHelper(recipe) + .setEUtModifier((float) Math.sqrt(mUpgradesInstalled == 0 ? 1 : mUpgradesInstalled)) + .setChanceMultiplier(mRoughnessMultiplier); + } + }; + } + + private boolean isNoOC() { + return !mOCTier1 && !mOCTier2; + } + + private float getDurationMultiplierFromRoughness() { + return (float) Math.pow(mRoughnessMultiplier, 2); + } + + private int ticker = 0; + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (!super.onRunningTick(aStack)) { + return false; + } + + if (ticker % 20 == 0) { + if (!isNoOC()) { + FluidStack tFluid = mOCTier1 ? GTModHandler.getDistilledWater(COOLANT_CONSUMED_PER_SEC) + : Materials.SuperCoolant.getFluid(COOLANT_CONSUMED_PER_SEC); + if (!drain(mCoolantInputHatch, tFluid, true)) { + stopMachine(ShutDownReasonRegistry.outOfFluid(tFluid)); + return false; + } + } + ticker = 0; + } + + ticker++; + + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + // TODO: Look for proper fix + // Updates every 10 sec + if (mUpdate <= -150) mUpdate = 50; + } + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return (int) (10000f * mRoughnessMultiplier); + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + private int getTier() { + return mSetTier; + } + + @Override + public void receiveClientEvent(byte aEventID, byte aValue) { + if (aEventID == 1) { + if ((aValue & mTier1BitMap) == mTier1BitMap) { + mSetTier = 1; + } + + if ((aValue & mTier2BitMap) == mTier2BitMap) { + mSetTier = 2; + } + + if ((aValue & mTier3BitMap) == mTier3BitMap) { + mSetTier = 3; + } + + if ((aValue & mBioBitMap) == mBioBitMap) { + mBioUpgrade = true; + } + + if ((aValue & mBioRotateBitMap) == mBioRotateBitMap) { + mBioRotate = true; + } + + if ((aValue & mOCTier1BitMap) == mOCTier1BitMap) { + mOCTier1 = true; + } + + if ((aValue & mOCTier2BitMap) == mOCTier2BitMap) { + mOCTier2 = true; + } + } + } + + private ExtendedFacing transformFacing(ExtendedFacing facing) { + ForgeDirection curDirection = facing.getDirection(); + Rotation curRotation = facing.getRotation(); + Flip curFlip = facing.getFlip(); + ForgeDirection newDirection = curDirection; + Rotation newRotation = curRotation; + Flip newFlip = curFlip; + + if (curDirection == ForgeDirection.UP || curDirection == ForgeDirection.DOWN) { + switch (curRotation) { + case CLOCKWISE, COUNTER_CLOCKWISE -> { + newFlip = curFlip == Flip.NONE ? Flip.HORIZONTAL : Flip.NONE; + newDirection = curDirection == ForgeDirection.UP ? ForgeDirection.NORTH : ForgeDirection.SOUTH; + } + case NORMAL -> { + newRotation = curDirection == ForgeDirection.UP ? Rotation.CLOCKWISE : Rotation.COUNTER_CLOCKWISE; + newDirection = curDirection == ForgeDirection.UP ? ForgeDirection.EAST : ForgeDirection.WEST; + newFlip = Flip.NONE; + } + case UPSIDE_DOWN -> { + newRotation = curDirection == ForgeDirection.UP ? Rotation.COUNTER_CLOCKWISE : Rotation.CLOCKWISE; + newDirection = curDirection == ForgeDirection.UP ? ForgeDirection.EAST : ForgeDirection.WEST; + newFlip = Flip.NONE; + } + } + } else if (curRotation == Rotation.CLOCKWISE || curRotation == Rotation.COUNTER_CLOCKWISE) { + newFlip = curRotation == Rotation.CLOCKWISE ? curFlip == Flip.NONE ? Flip.NONE : Flip.HORIZONTAL + : curFlip != Flip.NONE ? Flip.NONE : Flip.HORIZONTAL; + newDirection = curRotation == Rotation.CLOCKWISE ? ForgeDirection.UP : ForgeDirection.DOWN; + } else { + newDirection = switch (curDirection) { + case EAST -> ForgeDirection.SOUTH; + case NORTH -> ForgeDirection.EAST; + case WEST -> ForgeDirection.NORTH; + case SOUTH -> ForgeDirection.WEST; + default -> curDirection; + }; + } + + if (curRotation == Rotation.UPSIDE_DOWN) { + if (curDirection != ForgeDirection.UP && curDirection != ForgeDirection.DOWN) { + newFlip = curFlip == Flip.NONE ? Flip.HORIZONTAL : Flip.NONE; + } + } + + return ExtendedFacing.of(newDirection, newRotation, newFlip); + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + public boolean addCoolantInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = null; + mCoolantInputHatch = (MTEHatchInput) aMetaTileEntity; + return true; + } + return false; + } + + @Override + protected long getActualEnergyUsage() { + return (-this.lEUt * 10000) / Math.min(Math.max(1000, mEfficiency), 10000); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + inputSeparation = !inputSeparation; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); + } + + @Override + public String[] getInfoData() { + int mPollutionReduction = 0; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + mPollutionReduction = Math.max(tHatch.calculatePollutionReduction(100), mPollutionReduction); + } + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatch tHatch : getExoticAndNormalEnergyHatchList()) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + long voltage = getAverageInputVoltage(); + long amps = getMaxInputAmps(); + + return new String[] { + /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(getActualEnergyUsage()) + + EnumChatFormatting.RESET + + " EU/t", + /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(voltage) + + EnumChatFormatting.RESET + + " EU/t(*" + + amps + + " A)" + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + VN[GTUtility.getTier(voltage)] + + EnumChatFormatting.RESET, + /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + /* 6 */ StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %", + /* 7 */ StatCollector.translateToLocal("GT5U.multiblock.parallelism") + ": " + + EnumChatFormatting.GREEN + + mMaxParallel, + /* 8 */ StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " + + EnumChatFormatting.GREEN + + mCurrentParallel }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Circuit Board Fabricator") + .addInfo("Controller for the PCB Factory") + .addInfo( + EnumChatFormatting.GOLD.toString() + EnumChatFormatting.BOLD + + "IMPORTANT!" + + " Check the configuration menu before building.") + .addInfo("Tier of the machine determines the available recipes.") + .addInfo("Machine tier (1-3) is set in the controller GUI.") + .addInfo("The configuration menu can be used to add upgrades.") + .addInfo("Each tier and upgrade requires additional structures.") + .addInfo("Power consumption is multiplied by Sqrt(structures).") + .addInfo("Tier 2 and 3 allow parallel by using extra nanites.") + .addInfo("Every doubling of nanites adds one parallel.") + .addInfo("1x->1, 2x->2, 4x->3, 8x->4 with no limit.") + .addInfo("Recipes require a cooling upgrade to be overclocked.") + .addInfo("Liquid Cooling uses 10 L/s of distilled water and enables default overclocks.") + .addInfo("Thermosink uses 10 L/s of Super Coolant and enables perfect overclocks.") + .addInfo("Trace size can be changed to modify the material usage and machine speed.") + .addInfo(AuthorBlueWeabo) + .beginStructureBlock(30, 38, 13, false) + .addSeparator() + .addMaintenanceHatch(EnumChatFormatting.GOLD + "1", 1) + .addEnergyHatch( + EnumChatFormatting.GOLD + "1" + + EnumChatFormatting.GRAY + + "-" + + EnumChatFormatting.GOLD + + "2" + + EnumChatFormatting.GRAY + + " or " + + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + " TT energy hatch.", + 1) + .addInputBus(EnumChatFormatting.GOLD + "0" + EnumChatFormatting.GRAY + "+", 1) + .addOutputBus(EnumChatFormatting.GOLD + "0" + EnumChatFormatting.GRAY + "+", 1) + .addInputHatch(EnumChatFormatting.GOLD + "0" + EnumChatFormatting.GRAY + "+", 1) + .addStructureInfo( + "Coolant Hatch (Input Hatch): " + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + " Center of the Liquid Cooling/Thermosink") + .addStructureInfo( + EnumChatFormatting.BLUE + "Base Multi (Tier " + + EnumChatFormatting.DARK_PURPLE + + 1 + + EnumChatFormatting.BLUE + + "):") + .addStructureInfo(EnumChatFormatting.GOLD + "40" + EnumChatFormatting.GRAY + " Damascus Steel Frame Box") + .addStructureInfo(EnumChatFormatting.GOLD + "9" + EnumChatFormatting.GRAY + " Vibrant Alloy Frame Box") + .addStructureInfo(EnumChatFormatting.GOLD + "25" + EnumChatFormatting.GRAY + " Reinforced Glass") + .addStructureInfo( + EnumChatFormatting.GOLD + "77" + EnumChatFormatting.GRAY + " Basic Photolithography Framework Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "12" + EnumChatFormatting.GRAY + " Grate Machine Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "25" + EnumChatFormatting.GRAY + " Plascrete Block") + .addStructureInfo( + EnumChatFormatting.BLUE + "Tier " + + EnumChatFormatting.DARK_PURPLE + + 2 + + EnumChatFormatting.BLUE + + " (Adds to Tier " + + EnumChatFormatting.DARK_PURPLE + + 1 + + EnumChatFormatting.BLUE + + "):") + .addStructureInfo(EnumChatFormatting.GOLD + "34" + EnumChatFormatting.GRAY + " Duranium Frame Box") + .addStructureInfo( + EnumChatFormatting.GOLD + "158" + + EnumChatFormatting.GRAY + + " Reinforced Photolithography Framework Casing") + .addStructureInfo( + EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 3 + EnumChatFormatting.BLUE + ":") + .addStructureInfo( + EnumChatFormatting.GOLD + "292" + + EnumChatFormatting.GRAY + + " Radiation Proof Photolithography Framework Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "76" + EnumChatFormatting.GRAY + " Radiant Naquadah Alloy Casing") + .addStructureInfo(EnumChatFormatting.BLUE + "Biochamber Upgrade") + .addStructureInfo( + EnumChatFormatting.GOLD + "68" + EnumChatFormatting.GRAY + " Clean Stainless Steel Machine Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "40" + EnumChatFormatting.GRAY + " Damascus Steel Frame Box") + .addStructureInfo(EnumChatFormatting.GOLD + "72" + EnumChatFormatting.GRAY + " Reinforced Glass") + .addStructureInfo( + EnumChatFormatting.BLUE + "Liquid Cooling Tower (Tier " + + EnumChatFormatting.DARK_PURPLE + + 1 + + EnumChatFormatting.BLUE + + "):") + .addStructureInfo(EnumChatFormatting.GOLD + "40" + EnumChatFormatting.GRAY + " Damascus Steel Frame Box") + .addStructureInfo( + EnumChatFormatting.GOLD + "68" + EnumChatFormatting.GRAY + " Radiant Naquadah Alloy Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "12" + EnumChatFormatting.GRAY + " Extreme Engine Intake Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "20" + EnumChatFormatting.GRAY + " Tungstensteel Pipe Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "21" + + EnumChatFormatting.GRAY + + " Reinforced Photolithography Framework Casing") + .addStructureInfo( + EnumChatFormatting.BLUE + "Thermosink Radiator(Tier " + + EnumChatFormatting.DARK_PURPLE + + 2 + + EnumChatFormatting.BLUE + + "):") + .addStructureInfo(EnumChatFormatting.GOLD + "40" + EnumChatFormatting.GRAY + " Americium Frame Box") + .addStructureInfo( + EnumChatFormatting.GOLD + "41" + + EnumChatFormatting.GRAY + + " Reinforced Photolithography Framework Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "8" + EnumChatFormatting.GRAY + " Superconducting Coil Block") + .addStructureInfo(EnumChatFormatting.GOLD + "20" + EnumChatFormatting.GRAY + " Tungstensteel Pipe Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "48" + EnumChatFormatting.GRAY + " Infinity Cooled Casing") + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("mBioUpgrade", mBioUpgrade); + aNBT.setBoolean("mBioRotate", mBioRotate); + aNBT.setInteger("mBioOffsetX", mBioOffsets[0]); + aNBT.setInteger("mBioOffsetZ", mBioOffsets[1]); + aNBT.setBoolean("mOCTier1Upgrade", mOCTier1); + aNBT.setInteger("mOCTier1OffsetX", mOCTier1Offsets[0]); + aNBT.setInteger("mOCTier1OffsetZ", mOCTier1Offsets[1]); + aNBT.setBoolean("mOCTier2Upgrade", mOCTier2); + aNBT.setInteger("mOCTier2OffsetX", mOCTier2Offsets[0]); + aNBT.setInteger("mOCTier2OffsetZ", mOCTier2Offsets[1]); + aNBT.setFloat("mRoughnessMultiplier", mRoughnessMultiplier); + aNBT.setInteger("mSetTier", mSetTier); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("mSeparate")) { + // backward compatibility + inputSeparation = aNBT.getBoolean("mSeparate"); + } + mBioUpgrade = aNBT.getBoolean("mBioUpgrade"); + mBioRotate = aNBT.getBoolean("mBioRotate"); + mBioOffsets[0] = aNBT.getInteger("mBioOffsetX"); + mBioOffsets[1] = aNBT.getInteger("mBioOffsetZ"); + mOCTier1 = aNBT.getBoolean("mOCTier1Upgrade"); + mOCTier1Offsets[0] = aNBT.getInteger("mOCTier1OffsetX"); + mOCTier1Offsets[1] = aNBT.getInteger("mOCTier1OffsetZ"); + mOCTier2 = aNBT.getBoolean("mOCTier2Upgrade"); + mOCTier2Offsets[0] = aNBT.getInteger("mOCTier2OffsetX"); + mOCTier2Offsets[1] = aNBT.getInteger("mOCTier2OffsetZ"); + mRoughnessMultiplier = aNBT.getFloat("mRoughnessMultiplier"); + mSetTier = aNBT.getInteger("mSetTier"); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_MAGNETIZER_LOOP; + } + + @Override + public byte getUpdateData() { + byte data = 0; + if (mSetTier == 1) { + data += mTier1BitMap; + } else if (mSetTier == 2) { + data += mTier2BitMap; + } else { + data += mTier3BitMap; + } + + if (mBioUpgrade) { + data += mBioBitMap; + } + + if (mBioRotate) { + data += mBioRotateBitMap; + } + + if (mOCTier1) { + data += mOCTier1BitMap; + } + + if (mOCTier2) { + data += mOCTier2BitMap; + } + + return data; + } + + @Override + public Pos2d getStructureUpdateButtonPos() { + return new Pos2d(80, 91); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + buildContext.addSyncedWindow(10, this::createConfigurationWindow); + builder.widget( + new ButtonWidget().setOnClick( + (clickData, widget) -> { + if (!widget.isClient()) widget.getContext() + .openSyncedWindow(10); + }) + .setSize(16, 16) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(GTUITextures.BUTTON_STANDARD); + ret.add(GTUITextures.OVERLAY_BUTTON_CYCLIC); + return ret.toArray(new IDrawable[0]); + }) + .addTooltip("Configuration Menu") + .setPos(174, 130)) + .widget( + new TextWidget(new Text("Tier")).setTextAlignment(Alignment.Center) + .setScale(0.91f) + .setSize(20, 16) + .setPos(173, 98)) + .widget( + new NumericWidget().setGetter(() -> mSetTier) + .setSetter(val -> mSetTier = (int) val) + .setBounds(1, 3) + .setTextColor(Color.WHITE.normal) + .setTextAlignment(Alignment.Center) + .addTooltip("PCB Factory Tier") + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .setSize(18, 18) + .setPos(173, 110)); + } + + protected ModularWindow createConfigurationWindow(final EntityPlayer player) { + ModularWindow.Builder builder = ModularWindow.builder(200, 160); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.OVERLAY_BUTTON_CYCLIC) + .setPos(5, 5) + .setSize(16, 16)) + .widget(new TextWidget("Configuration Menu").setPos(25, 9)) + .widget( + ButtonWidget.closeWindowButton(true) + .setPos(185, 3)) + .widget( + new DynamicPositionedColumn().setSynced(false) + .widget( + new MultiChildWidget().addChild(new CycleButtonWidget().setToggle(() -> mBioUpgrade, val -> { + mBioUpgrade = val; + if (!mBioUpgrade) { + GTUtility + .sendChatToPlayer(player, GTUtility.trans("339.1", "Biochamber Upgrade Disabled")); + } else { + GTUtility + .sendChatToPlayer(player, GTUtility.trans("339", "Biochamber Upgrade Enabled")); + } + }) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setSize(90, 18) + .addTooltip( + "Enables nanites to construct organic circuitry. Required for Bioware and Wetware boards.")) + .addChild( + new DrawableWidget().setDrawable(GTUITextures.OVERLAY_BUTTON_CYCLIC) + .setSize(18, 18)) + .addChild( + new TextWidget("Biochamber").setTextAlignment(Alignment.Center) + .setPos(23, 5)) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) + .widget(new MultiChildWidget().addChild(new CycleButtonWidget().setToggle(() -> mBioRotate, val -> { + mBioRotate = val; + if (!mBioRotate) { + GTUtility.sendChatToPlayer(player, GTUtility.trans("340.1", "Rotated biochamber disabled")); + } else { + GTUtility.sendChatToPlayer(player, GTUtility.trans("340", "Rotated biochamber enabled")); + } + }) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setSize(90, 18) + .addTooltip("Rotates the biochamber by 90 degrees.")) + .addChild( + new DrawableWidget().setDrawable(GTUITextures.OVERLAY_BUTTON_CYCLIC) + .setSize(18, 18)) + .addChild( + new TextWidget("Bio Rotation").setTextAlignment(Alignment.Center) + .setPos(23, 5)) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) + .widget(new MultiChildWidget().addChild(new CycleButtonWidget().setToggle(() -> mOCTier1, val -> { + mOCTier1 = val; + mOCTier2 = false; + if (!mOCTier1) { + GTUtility.sendChatToPlayer(player, GTUtility.trans("341.1", "Tier 1 cooling disabled")); + } else { + GTUtility.sendChatToPlayer(player, GTUtility.trans("341", "Tier 1 cooling enabled")); + } + }) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setSize(90, 18) + .addTooltip( + "Allows for overclocking. Requires 10 L/s of distilled water. Cooling upgrades are mutually exclusive.")) + .addChild( + new DrawableWidget().setDrawable(GTUITextures.OVERLAY_BUTTON_CYCLIC) + .setSize(18, 18)) + .addChild( + new TextWidget("Liquid Cooling").setTextAlignment(Alignment.Center) + .setPos(20, 5)) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) + .widget(new MultiChildWidget().addChild(new CycleButtonWidget().setToggle(() -> mOCTier2, val -> { + mOCTier2 = val; + mOCTier1 = false; + if (!mOCTier2) { + GTUtility.sendChatToPlayer(player, GTUtility.trans("342.1", "Tier 2 cooling disabled")); + } else { + GTUtility.sendChatToPlayer(player, GTUtility.trans("342", "Tier 2 cooling enabled")); + } + }) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setSize(90, 18) + .addTooltip( + "Enables perfect overclocking by allowing nanites to work with extreme speed and efficiency. Uses 10 L/s of Super Coolant.")) + .addChild( + new DrawableWidget().setDrawable(GTUITextures.OVERLAY_BUTTON_CYCLIC) + .setSize(18, 18)) + .addChild( + new TextWidget("Thermosink").setTextAlignment(Alignment.Center) + .setPos(20, 5)) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) + .widget( + new TextWidget(new Text("Trace Size")).setSize(90, 18) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive()) + .setPos(0, 4)) + .widget( + new NumericWidget().setGetter(() -> (int) ((1f / mRoughnessMultiplier) * 100f)) + .setSetter(val -> mRoughnessMultiplier = 100f / (int) val) + .setBounds(50, 200) + .setTextColor(Color.WHITE.normal) + .setTextAlignment(Alignment.Center) + .addTooltip( + "Set the trace size. Smaller traces allow material savings but take longer to fabricate. Larger traces waste material but are fast. 50-200 μm.") + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .setSize(90, 16)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.OVERLAY_BUTTON_CROSS) + .setSize(18, 18) + .addTooltip(new Text("Can't change configuration when running !").color(Color.RED.dark(3))) + .setEnabled(widget -> getBaseMetaTileEntity().isActive())) + .setPos(10, 25)) + .widget( + new DynamicPositionedColumn().setSynced(false) + .widget( + new TextWidget(new Text("Bio Upgrade Offsets")).setSize(72, 18) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) + .widget( + new DynamicPositionedRow().setSynced(false) + .widget( + new NumericWidget().setGetter(() -> mBioOffsets[0]) + .setSetter(val -> mBioOffsets[0] = (int) val) + .setBounds(-16, 16) + .setTextColor(Color.WHITE.normal) + .setTextAlignment(Alignment.Center) + .addTooltip("X Offset") + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .setSize(36, 18)) + .widget( + new NumericWidget().setGetter(() -> mBioOffsets[1]) + .setSetter(val -> mBioOffsets[1] = (int) val) + .setBounds(-16, 16) + .setTextColor(Color.WHITE.normal) + .setTextAlignment(Alignment.Center) + .addTooltip("Z Offset") + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .setSize(36, 18)) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) + .widget( + new TextWidget(new Text("Cooler Tier 1 Offsets")).setSize(72, 18) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) + .widget( + new DynamicPositionedRow().setSynced(false) + .widget( + new NumericWidget().setGetter(() -> mOCTier1Offsets[0]) + .setSetter(val -> mOCTier1Offsets[0] = (int) val) + .setBounds(-16, 16) + .setTextColor(Color.WHITE.normal) + .setTextAlignment(Alignment.Center) + .addTooltip("X Offset") + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .setSize(36, 18)) + .widget( + new NumericWidget().setGetter(() -> mOCTier1Offsets[1]) + .setSetter(val -> mOCTier1Offsets[1] = (int) val) + .setBounds(-16, 16) + .setTextColor(Color.WHITE.normal) + .setTextAlignment(Alignment.Center) + .addTooltip("Z Offset") + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .setSize(36, 18)) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) + .widget( + new TextWidget(new Text("Cooler Tier 2 Offsets")).setSize(72, 18) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) + .widget( + new DynamicPositionedRow().setSynced(false) + .widget( + new NumericWidget().setGetter(() -> mOCTier2Offsets[0]) + .setSetter(val -> mOCTier2Offsets[0] = (int) val) + .setBounds(-16, 16) + .setTextColor(Color.WHITE.normal) + .setTextAlignment(Alignment.Center) + .addTooltip("X Offset") + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .setSize(36, 18)) + .widget( + new NumericWidget().setGetter(() -> mOCTier2Offsets[1]) + .setSetter(val -> mOCTier2Offsets[1] = (int) val) + .setBounds(-16, 16) + .setTextColor(Color.WHITE.normal) + .setTextAlignment(Alignment.Center) + .addTooltip("Z Offset") + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .setSize(36, 18)) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive())) + .setPos(110, 25)); + return builder.build(); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java new file mode 100644 index 0000000000..feaead0047 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPlasmaForge.java @@ -0,0 +1,1260 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static gregtech.api.enums.GTValues.AuthorColen; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.ExoticEnergy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DTPF_OFF; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DTPF_ON; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_RAINBOWSCREEN_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.ChunkCoordIntPair; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.SoundResource; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.GregTechTileClientEvents; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.objects.GTChunkManager; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.ParallelHelper; +import tectech.thing.gui.TecTechUITextures; + +public class MTEPlasmaForge extends MTEExtendedPowerMultiBlockBase implements ISurvivalConstructable { + + // 3600 seconds in an hour, 8 hours, 20 ticks in a second. + private static final double max_efficiency_time_in_ticks = 3600d * 8d * 20d; + // Multiplier for the efficiency decay rate + private static final double efficiency_decay_rate = 100; + private static final double maximum_discount = 0.5d; + private static final int CONVERGENCE_BITMAP = 0b1; + private static final int DISCOUNT_BITMAP = 0b10; + + // Valid fuels which the discount will get applied to. + private static final FluidStack[] valid_fuels = { MaterialsUEVplus.ExcitedDTCC.getFluid(1L), + MaterialsUEVplus.ExcitedDTPC.getFluid(1L), MaterialsUEVplus.ExcitedDTRC.getFluid(1L), + MaterialsUEVplus.ExcitedDTEC.getFluid(1L), MaterialsUEVplus.ExcitedDTSC.getFluid(1L) }; + + private static final HashMap> FUEL_ENERGY_VALUES = new HashMap<>() { + + { + put( + MaterialsUEVplus.ExcitedDTCC.getFluid(1L) + .getFluid(), + Pair.of(14_514_983L, 1 / 8f)); + put( + MaterialsUEVplus.ExcitedDTPC.getFluid(1L) + .getFluid(), + Pair.of(66_768_460L, 1 / 4f)); + put( + MaterialsUEVplus.ExcitedDTRC.getFluid(1L) + .getFluid(), + Pair.of(269_326_451L, 1 / 2f)); + put( + MaterialsUEVplus.ExcitedDTEC.getFluid(1L) + .getFluid(), + Pair.of(1_073_007_393L, 1f)); + put( + MaterialsUEVplus.ExcitedDTSC.getFluid(1L) + .getFluid(), + Pair.of(4_276_767_521L, 2f)); + } + }; + + private static final int min_input_hatch = 0; + private static final int max_input_hatch = 7; + private static final int min_output_hatch = 0; + private static final int max_output_hatch = 2; + private static final int min_input_bus = 0; + private static final int max_input_bus = 6; + private static final int min_output_bus = 0; + private static final int max_output_bus = 1; + + // Current discount rate. 1 = 0%, 0 = 100%. + private double discount = 1; + private int mHeatingCapacity = 0; + private long running_time = 0; + private boolean convergence = false; + private HeatingCoilLevel mCoilLevel; + private OverclockCalculator overclockCalculator; + + @SuppressWarnings("SpellCheckingInspection") + private static final String[][] structure_string = new String[][] { { " ", + " N N N N ", " N N N N ", " N N N N ", + " ", " ", " ", + " N N N N ", " N N N N ", " NNN NNN N N NNN NNN ", + " ", " ", " ", + " NNN NNN NNN NNN ", " ", " ", + " ", " ", " ", + " NNN NNN NNN NNN ", " ", " ", + " ", " NNN NNN NNN NNN " }, + { " N N N N ", " bCCCb bCCCb ", " bCCCb bCCCb ", + " bCCCb bCCCb ", " N N N N ", + " ", " N N N N ", + " bCCCb bCCCb ", " bCCCb bCCCb ", + "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CCC CCC N N CCC CCC ", + " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", + "NbbbN NbbbN NbbbN NbbbN", " N N N N ", + " N N N N ", " ", + " N N N N ", " N N N N ", + "NbbbN NbbbN NbbbN NbbbN", " CCC CCC CCC CCC ", + " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", + "NbbbN NbbbN N N NbbbN NbbbN", }, + { " N N N N ", " bCCCb bCCCb ", " NNNbbbbbNNsNNbbbbbNNN ", + " ss bCCCb bCCCb ss ", " s N N N N s ", + " s s ", " N N N N N N ", + " N bCCCb bCCCb N ", " N sbbbbbNNsNNbbbbbs N ", + "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CbC CbC N N CbC CbC ", + " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", + "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", + " NNN NNN NNN NNN ", " s s s s ", + " NNN NNN NNN NNN ", " NNN NNN NNN NNN ", + "NbbbN NbbbN NbbbN NbbbN", " CbC CbC CbC CbC ", + " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", + "NbbbN NbbbNNNNNsNsNNNNNbbbN NbbbN", }, + { " N N N N ", " bCCCb bCCCb ", " ss bCCCb bCCCb ss ", + " bCCCb bCCCb ", " s NCCCN NCCCN s ", + " s NCCCN NCCCN s ", " NCCCN NCCCN ", + " bCCCb bCCCb ", " bCCCb bCCCb ", + "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " CCCCCCCCC N N CCCCCCCCC ", + " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", + "NbbbNNNbbbN NbbbNNNbbbN", " N N N N ", + " N N N N ", " ", + " N N N N ", " N N N N ", + "NbbbNNNbbbN NbbbNNNbbbN", " CCCCCCCCC CCCCCCCCC ", + " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", + "NbbbNNNbbbN NbN NbbbNNNbbbN", }, + { " ", " N N N N ", " s N N N N s ", + " s NCCCN NCCCN s ", " ", + " ", " ", + " NCCCN NCCCN ", " N N N N ", + " NNN NN N N NN NNN ", " C C C C ", + " C C C C ", " C C C C ", + " NNN NNN NNN NNN ", " ", + " ", " ", + " ", " ", + " NNN NNN NNN NNN ", " C C C C ", + " C C C C ", " C C C C ", + " NNN NNN NbN NNN NNN ", }, + { " ", " ", " s s ", + " s NCCCN NCCCN s ", " ", + " ", " ", + " NCCCN NCCCN ", " ", + " N N N N ", " C C C C ", + " C C C C ", " C C C C ", + " N N N N ", " ", + " ", " ", + " ", " ", + " N N N N ", " C C C C ", + " C C C C ", " C C C C ", + " N N NbN N N ", }, + { " ", " N N N N ", " N N N N N N ", + " NCCCN NCCCN ", " ", + " ", " ", + " NCCCN NCCCN ", " N N N N ", + " NNN NN N N NN NNN ", " C C C C ", + " C C C C ", " C C C C ", + " NNN NNN NNN NNN ", " ", + " ", " ", + " ", " ", + " NNN NNN NNN NNN ", " C C C C ", + " C C C C ", " C C C C ", + " NNN NNN NbN NNN NNN ", }, + { " N N N N ", " bCCCb bCCCb ", " N bCCCb bCCCb N ", + " bCCCb bCCCb ", " NCCCN NCCCN ", + " NCCCN NCCCN ", " NCCCN NCCCN ", + " bCCCb bCCCb ", " bCCCb bCCCb ", + "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " CCCCCCCCC N N CCCCCCCCC ", + " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", + "NbbbNNNbbbN NbbbNNNbbbN", " N N N N ", + " N N N N ", " ", + " N N N N ", " N N N N ", + "NbbbNNNbbbN NbbbNNNbbbN", " CCCCCCCCC CCCCCCCCC ", + " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", + "NbbbNNNbbbN NbN NbbbNNNbbbN", }, + { " N N N N ", " bCCCb bCCCb ", " N sbbbbbNNsNNbbbbbs N ", + " bCCCb bCCCb ", " N N N N ", + " ", " N N N N ", + " bCCCb bCCCb ", " s sbbbbbNNsNNbbbbbs s ", + "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CbC CbC N N CbC CbC ", + " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", + "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", + " NNN NNN NNN NNN ", " s s s s ", + " NNN NNN NNN NNN ", " NNN NNN NNN NNN ", + "NbbbN NbbbN NbbbN NbbbN", " CbC CbC CbC CbC ", + " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", + "NbbbN NbbbNNNNNsNsNNNNNbbbN NbbbN", }, + { " NNN NNN N N NNN NNN ", "NbbbN NbbNCCCb bCCCNbbN NbbbN", "NbbbN NbbNCCCb bCCCNbbN NbbbN", + "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " NNN NNN N N NNN NNN ", + " N N N N ", " NNN NNN N N NNN NNN ", + "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", "NbbbN NbbNCCCb bCCCNbbN NbbbN", + "NNNN NNNCCCb bCCCNNN NNNN", " CCC CCC N N CCC CCC ", + " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", + "NbbbN NbbbN NbbbN NbbbN", " N N N N ", + " N N N N ", " ", + " N N N N ", " N N N N ", + "NbbbN NbbbN NbbbN NbbbN", " CCC CCC CCC CCC ", + " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", + "NbbbN NbbbN NbN NbbbN NbbbN", }, + { " ", " CCC CCC N N CCC CCC ", " CbC CbC N N CbC CbC ", + " CCCCCCCCC N N CCCCCCCCC ", " C C C C ", + " C C C C ", " C C C C ", + " CCCCCCCCC N N CCCCCCCCC ", " CbC CbC N N CbC CbC ", + " CCC CCC N N CCC CCC ", " ", + " ", " ", + " NNN NNN NNN NNN ", " ", + " ", " ", + " ", " ", + " NNN NNN NNN NNN ", " ", + " ", " ", + " NNN NNN NbN NNN NNN ", }, + { " ", " CCC CCC CCC CCC ", " CbC CbC CbC CbC ", + " CCCCCCCCC CCCCCCCCC ", " C C C C ", + " C C C C ", " C C C C ", + " CCCCCCCCC CCCCCCCCC ", " CbC CbC CbC CbC ", + " CCC CCC CCC CCC ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " N N NbN N N ", }, + { " ", " CCC CCC CCC CCC ", " CbC CbC CbC CbC ", + " CCCCCCCCC CCCCCCCCC ", " C C C C ", + " C C C C ", " C C C C ", + " CCCCCCCCC CCCCCCCCC ", " CbC CbC CbC CbC ", + " CCC CCC CCC CCC ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " N N NbN N N ", }, + { " NNN NNN NNN NNN ", "NbbbN NbbbN NbbbN NbbbN", "NbbbN NbbbN NbbbN NbbbN", + "NbbbNNNbbbN NbbbNNNbbbN", " NNN NNN NNN NNN ", + " N N N N ", " NNN NNN NNN NNN ", + "NbbbNNNbbbN NbbbNNNbbbN", "NbbbN NbbbN NbbbN NbbbN", + "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " N N NsNsN N N ", }, + { " ", " ", " N N N N ", + " ", " ", + " ", " ", + " ", " N N N N ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " N N NbbbbbN N N ", }, + { " ", " ", " N N N N ", + " ", " ", + " ", " ", + " ", " N N N N ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " N ", + " NsNNNNNsNNNNsbbbbbsNNNNsNNNNNsN ", }, + { " ", " ", " s s s s ", + " ", " ", + " ", " ", + " ", " s s s s ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ~ ", " NNN ", + " NbbbbbNbbbbNbbbbbNbbbbNbbbbbN ", }, + { " ", " ", " N N N N ", + " ", " ", + " ", " ", + " ", " N N N N ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " N ", + " NsNNNNNsNNNNsbbbbbsNNNNsNNNNNsN ", }, + { " ", " ", " N N N N ", + " ", " ", + " ", " ", + " ", " N N N N ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " N N NbbbbbN N N ", }, + { " NNN NNN NNN NNN ", "NbbbN NbbbN NbbbN NbbbN", "NbbbN NbbbN NbbbN NbbbN", + "NbbbNNNbbbN NbbbNNNbbbN", " NNN NNN NNN NNN ", + " N N N N ", " NNN NNN NNN NNN ", + "NbbbNNNbbbN NbbbNNNbbbN", "NbbbN NbbbN NbbbN NbbbN", + "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " N N NsNsN N N ", }, + { " ", " CCC CCC CCC CCC ", " CbC CbC CbC CbC ", + " CCCCCCCCC CCCCCCCCC ", " C C C C ", + " C C C C ", " C C C C ", + " CCCCCCCCC CCCCCCCCC ", " CbC CbC CbC CbC ", + " CCC CCC CCC CCC ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " N N NbN N N ", }, + { " ", " CCC CCC CCC CCC ", " CbC CbC CbC CbC ", + " CCCCCCCCC CCCCCCCCC ", " C C C C ", + " C C C C ", " C C C C ", + " CCCCCCCCC CCCCCCCCC ", " CbC CbC CbC CbC ", + " CCC CCC CCC CCC ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " N N NbN N N ", }, + { " ", " CCC CCC N N CCC CCC ", " CbC CbC N N CbC CbC ", + " CCCCCCCCC N N CCCCCCCCC ", " C C C C ", + " C C C C ", " C C C C ", + " CCCCCCCCC N N CCCCCCCCC ", " CbC CbC N N CbC CbC ", + " CCC CCC N N CCC CCC ", " ", + " ", " ", + " NNN NNN NNN NNN ", " ", + " ", " ", + " ", " ", + " NNN NNN NNN NNN ", " ", + " ", " ", + " NNN NNN NbN NNN NNN ", }, + { " NNN NNN N N NNN NNN ", "NbbbN NbbNCCCb bCCCNbbN NbbbN", "NbbbN NbbNCCCb bCCCNbbN NbbbN", + "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " NNN NNN N N NNN NNN ", + " N N N N ", " NNN NNN N N NNN NNN ", + "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", "NbbbN NbbNCCCb bCCCNbbN NbbbN", + "NNNN NNNCCCb bCCCNNN NNNN", " CCC CCC N N CCC CCC ", + " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", + "NbbbN NbbbN NbbbN NbbbN", " N N N N ", + " N N N N ", " ", + " N N N N ", " N N N N ", + "NbbbN NbbbN NbbbN NbbbN", " CCC CCC CCC CCC ", + " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", + "NbbbN NbbbN NbN NbbbN NbbbN", }, + { " N N N N ", " bCCCb bCCCb ", " N sbbbbbNNsNNbbbbbs N ", + " bCCCb bCCCb ", " N N N N ", + " ", " N N N N ", + " bCCCb bCCCb ", " s sbbbbbNNsNNbbbbbs s ", + "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CbC CbC N N CbC CbC ", + " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", + "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", + " NNN NNN NNN NNN ", " s s s s ", + " NNN NNN NNN NNN ", " NNN NNN NNN NNN ", + "NbbbN NbbbN NbbbN NbbbN", " CbC CbC CbC CbC ", + " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", + "NbbbN NbbbNNNNNsNsNNNNNbbbN NbbbN", }, + { " N N N N ", " bCCCb bCCCb ", " N bCCCb bCCCb N ", + " bCCCb bCCCb ", " NCCCN NCCCN ", + " NCCCN NCCCN ", " NCCCN NCCCN ", + " bCCCb bCCCb ", " bCCCb bCCCb ", + "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " CCCCCCCCC N N CCCCCCCCC ", + " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", + "NbbbNNNbbbN NbbbNNNbbbN", " N N N N ", + " N N N N ", " ", + " N N N N ", " N N N N ", + "NbbbNNNbbbN NbbbNNNbbbN", " CCCCCCCCC CCCCCCCCC ", + " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", + "NbbbNNNbbbN NbN NbbbNNNbbbN", }, + { " ", " N N N N ", " N N N N N N ", + " NCCCN NCCCN ", " ", + " ", " ", + " NCCCN NCCCN ", " N N N N ", + " NNN NN N N NN NNN ", " C C C C ", + " C C C C ", " C C C C ", + " NNN NNN NNN NNN ", " ", + " ", " ", + " ", " ", + " NNN NNN NNN NNN ", " C C C C ", + " C C C C ", " C C C C ", + " NNN NNN NbN NNN NNN ", }, + { " ", " ", " s s ", + " s NCCCN NCCCN s ", " ", + " ", " ", + " NCCCN NCCCN ", " ", + " N N N N ", " C C C C ", + " C C C C ", " C C C C ", + " N N N N ", " ", + " ", " ", + " ", " ", + " N N N N ", " C C C C ", + " C C C C ", " C C C C ", + " N N NbN N N ", }, + { " ", " N N N N ", " s N N N N s ", + " s NCCCN NCCCN s ", " ", + " ", " ", + " NCCCN NCCCN ", " N N N N ", + " NNN NN N N NN NNN ", " C C C C ", + " C C C C ", " C C C C ", + " NNN NNN NNN NNN ", " ", + " ", " ", + " ", " ", + " NNN NNN NNN NNN ", " C C C C ", + " C C C C ", " C C C C ", + " NNN NNN NbN NNN NNN ", }, + { " N N N N ", " bCCCb bCCCb ", " ss bCCCb bCCCb ss ", + " bCCCb bCCCb ", " s NCCCN NCCCN s ", + " s NCCCN NCCCN s ", " NCCCN NCCCN ", + " bCCCb bCCCb ", " bCCCb bCCCb ", + "NbbbNNNbbNCCCb bCCCNbbNNNbbbN", " CCCCCCCCC N N CCCCCCCCC ", + " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", + "NbbbNNNbbbN NbbbNNNbbbN", " N N N N ", + " N N N N ", " ", + " N N N N ", " N N N N ", + "NbbbNNNbbbN NbbbNNNbbbN", " CCCCCCCCC CCCCCCCCC ", + " CCCCCCCCC CCCCCCCCC ", " CCCCCCCCC CCCCCCCCC ", + "NbbbNNNbbbN NbN NbbbNNNbbbN", }, + { " N N N N ", " bCCCb bCCCb ", " NNNbbbbbNNsNNbbbbbNNN ", + " ss bCCCb bCCCb ss ", " s N N N N s ", + " s s ", " N N N N N N ", + " N bCCCb bCCCb N ", " N sbbbbbNNsNNbbbbbs N ", + "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CbC CbC N N CbC CbC ", + " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", + "NbbbN NbbbN NbbbN NbbbN", " NNN NNN NNN NNN ", + " NNN NNN NNN NNN ", " s s s s ", + " NNN NNN NNN NNN ", " NNN NNN NNN NNN ", + "NbbbN NbbbN NbbbN NbbbN", " CbC CbC CbC CbC ", + " CbC CbC CbC CbC ", " CbC CbC CbC CbC ", + "NbbbN NbbbNNNNNsNsNNNNNbbbN NbbbN", }, + { " N N N N ", " bCCCb bCCCb ", " bCCCb bCCCb ", + " bCCCb bCCCb ", " N N N N ", + " ", " N N N N ", + " bCCCb bCCCb ", " bCCCb bCCCb ", + "NbbbN NbbNCCCb bCCCNbbN NbbbN", " CCC CCC N N CCC CCC ", + " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", + "NbbbN NbbbN NbbbN NbbbN", " N N N N ", + " N N N N ", " ", + " N N N N ", " N N N N ", + "NbbbN NbbbN NbbbN NbbbN", " CCC CCC CCC CCC ", + " CCC CCC CCC CCC ", " CCC CCC CCC CCC ", + "NbbbN NbbbN N N NbbbN NbbbN", }, + { " ", " N N N N ", " N N N N ", + " N N N N ", " ", + " ", " ", + " N N N N ", " N N N N ", + " NNN NNN N N NNN NNN ", " ", + " ", " ", + " NNN NNN NNN NNN ", " ", + " ", " ", + " ", " ", + " NNN NNN NNN NNN ", " ", + " ", " ", + " NNN NNN NNN NNN ", } }; + + protected static final int DIM_TRANS_CASING = 12; + protected static final int DIM_INJECTION_CASING = 13; + protected static final int DIM_BRIDGE_CASING = 14; + + private boolean isMultiChunkloaded = true; + + protected static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, structure_string) + .addElement('C', ofCoil(MTEPlasmaForge::setCoilLevel, MTEPlasmaForge::getCoilLevel)) + .addElement( + 'b', + buildHatchAdder(MTEPlasmaForge.class) + .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Energy, ExoticEnergy, Maintenance) + .casingIndex(DIM_INJECTION_CASING) + .dot(3) + .buildAndChain(GregTechAPI.sBlockCasings1, DIM_INJECTION_CASING)) + .addElement('N', ofBlock(GregTechAPI.sBlockCasings1, DIM_TRANS_CASING)) + .addElement('s', ofBlock(GregTechAPI.sBlockCasings1, DIM_BRIDGE_CASING)) + .build(); + + public MTEPlasmaForge(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPlasmaForge(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPlasmaForge(mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Plasma Forge, DTPF") + .addInfo("Transcending Dimensional Boundaries.") + .addInfo( + "Takes " + EnumChatFormatting.RED + + GTUtility.formatNumbers(max_efficiency_time_in_ticks / (3600 * 20)) + + EnumChatFormatting.GRAY + + " hours of continuous run time to fully breach dimensional") + .addInfo( + "boundaries and achieve maximum efficiency, reducing fuel consumption by up to " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(100 * maximum_discount) + + "%" + + EnumChatFormatting.GRAY + + ".") + .addInfo("Multidimensional spaces can be perfectly aligned and synchronized in this state, ") + .addInfo( + "allowing " + EnumChatFormatting.GOLD + + "Dimensional Convergence " + + EnumChatFormatting.GRAY + + "to occur. To reach the required stability threshold,") + .addInfo( + "a " + EnumChatFormatting.AQUA + + "Transdimensional Alignment Matrix " + + EnumChatFormatting.GRAY + + "must be placed in the controller.") + .addInfo( + "When " + EnumChatFormatting.GOLD + + "Convergence " + + EnumChatFormatting.GRAY + + "is active, it allows the forge to perform " + + EnumChatFormatting.RED + + "Perfect Overclocks" + + EnumChatFormatting.GRAY + + ",") + .addInfo("but the extra power cost is instead added in form of increased catalyst amounts.") + .addInfo( + "When no recipe is running, fuel discount decays x" + EnumChatFormatting.RED + + GTUtility.formatNumbers(efficiency_decay_rate) + + EnumChatFormatting.GRAY + + " as fast as it builds up.") + .addInfo(AuthorColen) + .addSeparator() + .beginStructureBlock(33, 24, 33, false) + .addStructureInfo("DTPF Structure is too complex! See schematic for details.") + .addStructureInfo(EnumChatFormatting.GOLD + "2,112" + EnumChatFormatting.GRAY + " Heating coils required.") + .addStructureInfo( + EnumChatFormatting.GOLD + "120" + EnumChatFormatting.GRAY + " Dimensional bridge blocks required.") + .addStructureInfo( + EnumChatFormatting.GOLD + "1,270" + + EnumChatFormatting.GRAY + + " Dimensional injection casings required.") + .addStructureInfo( + EnumChatFormatting.GOLD + "2,121" + + EnumChatFormatting.GRAY + + " Dimensionally transcendent casings required.") + .addStructureInfo("--------------------------------------------") + .addStructureInfo( + "Requires " + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + "-" + + EnumChatFormatting.GOLD + + "2" + + EnumChatFormatting.GRAY + + " energy hatches or " + + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + " TT energy hatch.") + .addStructureInfo( + "Requires " + EnumChatFormatting.GOLD + + min_input_hatch + + EnumChatFormatting.GRAY + + "-" + + EnumChatFormatting.GOLD + + max_input_hatch + + EnumChatFormatting.GRAY + + " input hatches.") + .addStructureInfo( + "Requires " + EnumChatFormatting.GOLD + + min_output_hatch + + EnumChatFormatting.GRAY + + "-" + + EnumChatFormatting.GOLD + + max_output_hatch + + EnumChatFormatting.GRAY + + " output hatches.") + .addStructureInfo( + "Requires " + EnumChatFormatting.GOLD + + min_input_bus + + EnumChatFormatting.GRAY + + "-" + + EnumChatFormatting.GOLD + + max_input_bus + + EnumChatFormatting.GRAY + + " input busses.") + .addStructureInfo( + "Requires " + EnumChatFormatting.GOLD + + min_output_bus + + EnumChatFormatting.GRAY + + "-" + + EnumChatFormatting.GOLD + + max_input_bus + + EnumChatFormatting.GRAY + + " output busses.") + .addStructureInfo("--------------------------------------------") + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + boolean exotic = addExoticEnergyInputToMachineList(aTileEntity, aBaseCasingIndex); + return super.addToMachineList(aTileEntity, aBaseCasingIndex) || exotic; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + IIconContainer glow = OVERLAY_FUSION1_GLOW; + if (convergence && discount == maximum_discount) { + glow = OVERLAY_RAINBOWSCREEN_GLOW; + } + if (side == aFacing) { + if (aActive) return new ITexture[] { casingTexturePages[0][DIM_BRIDGE_CASING], TextureFactory.builder() + .addIcon(OVERLAY_DTPF_ON) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(glow) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][DIM_BRIDGE_CASING], TextureFactory.builder() + .addIcon(OVERLAY_DTPF_OFF) + .extFacing() + .build() }; + } + return new ITexture[] { casingTexturePages[0][DIM_BRIDGE_CASING] }; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.plasmaForgeRecipes; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + CheckRecipeResult recipe_process = super.checkProcessing(); + if (recipe_process.wasSuccessful()) { + running_time = running_time + mMaxProgresstime; + } + return recipe_process; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + overclockCalculator = super.createOverclockCalculator(recipe).setRecipeHeat(recipe.mSpecialValue) + .setMachineHeat(mHeatingCapacity); + if (discount == maximum_discount && convergence) { + overclockCalculator = overclockCalculator.enablePerfectOC(); + } + return overclockCalculator; + } + + @NotNull + @Override + protected ParallelHelper createParallelHelper(@Nonnull GTRecipe recipe) { + return super.createParallelHelper(recipeAfterAdjustments(recipe)); + } + + @Override + protected @Nonnull CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + return recipe.mSpecialValue <= mHeatingCapacity ? CheckRecipeResultRegistry.SUCCESSFUL + : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); + } + }; + } + + @Nonnull + protected GTRecipe recipeAfterAdjustments(@Nonnull GTRecipe recipe) { + GTRecipe tRecipe = recipe.copy(); + boolean adjusted = false; + outside: for (int i = 0; i < recipe.mFluidInputs.length; i++) { + for (FluidStack fuel : valid_fuels) { + if (tRecipe.mFluidInputs[i].isFluidEqual(fuel)) { + recalculateDiscount(); + if (discount == maximum_discount && convergence + && overclockCalculator != null + && overclockCalculator.getCalculationStatus()) { + calculateCatalystIncrease(tRecipe, i, false); + getBaseMetaTileEntity() + .sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); + } + tRecipe.mFluidInputs[i].amount = (int) Math.round(tRecipe.mFluidInputs[i].amount * discount); + adjusted = true; + break outside; + } + } + } + // Convergence adjusts the recipe even if it has no catalyst input + if (!adjusted && discount == maximum_discount + && convergence + && overclockCalculator != null + && overclockCalculator.getCalculationStatus()) { + recalculateDiscount(); + calculateCatalystIncrease(tRecipe, 0, true); + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); + } + return tRecipe; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + + // Reset heating capacity. + mHeatingCapacity = 0; + + // Get heating capacity from coils in structure. + setCoilLevel(HeatingCoilLevel.None); + + // Check the main structure + if (!checkPiece(STRUCTURE_PIECE_MAIN, 16, 21, 16)) return false; + + if (getCoilLevel() == HeatingCoilLevel.None) return false; + + // Item input bus check. + if (mInputBusses.size() > max_input_bus) return false; + + // Item output bus check. + if (mOutputBusses.size() > max_output_bus) return false; + + // Fluid input hatch check. + if (mInputHatches.size() > max_input_hatch) return false; + + // Fluid output hatch check. + if (mOutputHatches.size() > max_output_hatch) return false; + + // If there is more than 1 TT energy hatch, the structure check will fail. + // If there is a TT hatch and a normal hatch, the structure check will fail. + if (mExoticEnergyHatches.size() > 0) { + if (mEnergyHatches.size() > 0) return false; + if (mExoticEnergyHatches.size() > 1) return false; + } + + // If there is 0 or more than 2 energy hatches structure check will fail. + if (mEnergyHatches.size() > 0) { + if (mEnergyHatches.size() > 2) return false; + + // Check will also fail if energy hatches are not of the same tier. + byte tier_of_hatch = mEnergyHatches.get(0).mTier; + for (MTEHatchEnergy energyHatch : mEnergyHatches) { + if (energyHatch.mTier != tier_of_hatch) { + return false; + } + } + } + + // If there are no energy hatches or TT energy hatches, structure will fail to form. + if ((mEnergyHatches.size() == 0) && (mExoticEnergyHatches.size() == 0)) return false; + + // Maintenance hatch not required but left for compatibility. + // Don't allow more than 1, no free casing spam! + if (mMaintenanceHatches.size() > 1) return false; + + // Heat capacity of coils used on multi. No free heat from extra EU! + mHeatingCapacity = (int) getCoilLevel().getHeat(); + + // All structure checks passed, return true. + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public void clearHatches() { + super.clearHatches(); + mExoticEnergyHatches.clear(); + } + + @Override + public boolean addOutput(FluidStack aLiquid) { + if (aLiquid == null) return false; + FluidStack tLiquid = aLiquid.copy(); + + return dumpFluid(mOutputHatches, tLiquid, true) || dumpFluid(mOutputHatches, tLiquid, false); + } + + @Override + public String[] getInfoData() { + + long storedEnergy = 0; + long maxEnergy = 0; + + for (MTEHatch tHatch : filterValidMTEs(mExoticEnergyHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + long voltage = getAverageInputVoltage(); + long amps = getMaxInputAmps(); + + // Calculate discount to make sure it is shown properly even when machine is off but decaying + recalculateDiscount(); + + return new String[] { "------------ Critical Information ------------", + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime) + + EnumChatFormatting.RESET + + "t / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime) + + EnumChatFormatting.RESET + + "t", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(getActualEnergyUsage()) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(voltage) + + EnumChatFormatting.RESET + + " EU/t(*" + + EnumChatFormatting.YELLOW + + amps + + EnumChatFormatting.RESET + + "A) " + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + VN[GTUtility.getTier(voltage)] + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.EBF.heat") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mHeatingCapacity) + + EnumChatFormatting.RESET + + " K", + "Ticks run: " + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(running_time) + + EnumChatFormatting.RESET + + ", Fuel Discount: " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(100 * (1 - discount)) + + EnumChatFormatting.RESET + + "%", + "Convergence: " + (convergence ? EnumChatFormatting.GREEN + "Active" : EnumChatFormatting.RED + "Inactive"), + "-----------------------------------------" }; + } + + private void recalculateDiscount() { + double time_percentage = running_time / max_efficiency_time_in_ticks; + time_percentage = Math.min(time_percentage, 1.0d); + // Multiplied by 0.5 because that is the maximum achievable discount + discount = 1 - time_percentage * 0.5; + discount = Math.max(maximum_discount, discount); + } + + private int catalystTypeForRecipesWithoutCatalyst = 1; + + private void calculateCatalystIncrease(GTRecipe recipe, int index, boolean withoutCatalyst) { + long machineConsumption = overclockCalculator.getConsumption(); + int numberOfOverclocks = (int) Math.ceil(calculateTier(machineConsumption) - GTUtility.getTier(recipe.mEUt)); + double recipeDuration = recipe.mDuration / Math.pow(4, numberOfOverclocks); + // Power difference between regular and perfect OCs for this recipe duration + long extraPowerNeeded = (long) ((Math.pow(2, numberOfOverclocks) - 1) * machineConsumption * recipeDuration); + int inputFluids = recipe.mFluidInputs.length; + int outputFluids = recipe.mFluidOutputs.length; + int extraCatalystNeeded; + Fluid validFuel; + if (!withoutCatalyst) { + validFuel = recipe.mFluidInputs[index].getFluid(); + extraCatalystNeeded = (int) (extraPowerNeeded / FUEL_ENERGY_VALUES.get(validFuel) + .getLeft()); + recipe.mFluidInputs[index].amount += extraCatalystNeeded; + // Increase present catalyst and residue by calculated amount + for (int j = 0; j < outputFluids; j++) { + if (recipe.mFluidOutputs[j] + .isFluidEqual(MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1))) { + recipe.mFluidOutputs[j].amount += (int) (extraCatalystNeeded * FUEL_ENERGY_VALUES.get(validFuel) + .getRight()); + } + } + } else { + // Add chosen catalyst as recipe input + validFuel = valid_fuels[catalystTypeForRecipesWithoutCatalyst - 1].getFluid(); + extraCatalystNeeded = (int) (extraPowerNeeded / FUEL_ENERGY_VALUES.get(validFuel) + .getLeft()); + FluidStack[] newInputFluids = new FluidStack[inputFluids + 1]; + for (int i = 0; i < inputFluids; i++) { + newInputFluids[i] = recipe.mFluidInputs[i].copy(); + } + newInputFluids[inputFluids] = new FluidStack(validFuel, extraCatalystNeeded / 2); + recipe.mFluidInputs = newInputFluids; + // Add residue as recipe output + FluidStack[] newOutputFluids = new FluidStack[outputFluids + 1]; + for (int i = 0; i < outputFluids; i++) { + newOutputFluids[i] = recipe.mFluidOutputs[i].copy(); + } + newOutputFluids[outputFluids] = new FluidStack( + MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1), + (int) (extraCatalystNeeded * FUEL_ENERGY_VALUES.get(validFuel) + .getRight())); + recipe.mFluidOutputs = newOutputFluids; + } + } + + private static final double LN2 = Math.log(2); + + private double calculateTier(long voltage) { + return (1 + Math.max(0, (Math.log(voltage) / LN2) - 5) / 2); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && !aBaseMetaTileEntity.isAllowedToWork()) { + // If machine has stopped, stop chunkloading. + GTChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); + isMultiChunkloaded = false; + } else if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && !isMultiChunkloaded) { + // Load a 3x3 area centered on controller when machine is running. + GTChunkManager.releaseTicket((TileEntity) aBaseMetaTileEntity); + + int ControllerXCoordinate = ((TileEntity) aBaseMetaTileEntity).xCoord; + int ControllerZCoordinate = ((TileEntity) aBaseMetaTileEntity).zCoord; + + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(ControllerXCoordinate, ControllerZCoordinate)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(ControllerXCoordinate + 16, ControllerZCoordinate)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(ControllerXCoordinate - 16, ControllerZCoordinate)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(ControllerXCoordinate, ControllerZCoordinate + 16)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(ControllerXCoordinate, ControllerZCoordinate - 16)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(ControllerXCoordinate + 16, ControllerZCoordinate + 16)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(ControllerXCoordinate + 16, ControllerZCoordinate - 16)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(ControllerXCoordinate - 16, ControllerZCoordinate + 16)); + GTChunkManager.requestChunkLoad( + (TileEntity) aBaseMetaTileEntity, + new ChunkCoordIntPair(ControllerXCoordinate - 16, ControllerZCoordinate - 16)); + + isMultiChunkloaded = true; + } + + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (aBaseMetaTileEntity.isServerSide()) { + if (mMaxProgresstime == 0) { + running_time = Math.max(0, running_time - (long) efficiency_decay_rate); + } + if (aTick % 100 == 0) { + ItemStack controllerStack = this.getControllerSlot(); + if (convergence && (controllerStack == null + || !controllerStack.isItemEqual(ItemList.Transdimensional_Alignment_Matrix.get(1)))) { + convergence = false; + getBaseMetaTileEntity() + .sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); + } + } + } + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 16, 21, 16); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 16, 21, 16, realBudget, env, false, true); + } + + @SideOnly(Side.CLIENT) + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_PLASMAFORGE_LOOP.resourceLocation; + } + + @Override + public byte getUpdateData() { + byte data = 0; + if (discount == maximum_discount) { + data += DISCOUNT_BITMAP; + } + if (convergence) { + data += CONVERGENCE_BITMAP; + } + return data; + } + + @Override + public void receiveClientEvent(byte aEventID, byte aValue) { + if (aEventID == GregTechTileClientEvents.CHANGE_CUSTOM_DATA) { + convergence = (aValue & CONVERGENCE_BITMAP) == CONVERGENCE_BITMAP; + if ((aValue & DISCOUNT_BITMAP) == DISCOUNT_BITMAP) { + discount = maximum_discount; + } + } + } + + private static final int CATALYST_WINDOW_ID = 10; + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + buildContext.addSyncedWindow(CATALYST_WINDOW_ID, this::createCatalystWindow); + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + ItemStack controllerStack = this.getControllerSlot(); + if (clickData.mouseButton == 0) { + if (controllerStack != null + && controllerStack.isItemEqual(ItemList.Transdimensional_Alignment_Matrix.get(1))) { + convergence = !convergence; + } + } else if (clickData.mouseButton == 1 && !widget.isClient()) { + widget.getContext() + .openSyncedWindow(CATALYST_WINDOW_ID); + } + }) + .setPlayClickSound(true) + .setBackground(() -> { + List ret = new ArrayList<>(); + if (convergence) { + ret.add(GTUITextures.BUTTON_STANDARD_PRESSED); + ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_ON); + } else { + ret.add(GTUITextures.BUTTON_STANDARD); + ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_OFF); + } + return ret.toArray(new IDrawable[0]); + }) + .addTooltip(translateToLocal("GT5U.DTPF.convergencebutton")) + .addTooltip(EnumChatFormatting.GRAY + translateToLocal("GT5U.DTPF.convergencebuttontooltip.0")) + .addTooltip(EnumChatFormatting.GRAY + translateToLocal("GT5U.DTPF.convergencebuttontooltip.1")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(174, 112) + .setSize(16, 16) + .attachSyncer(new FakeSyncWidget.BooleanSyncer(() -> convergence, (val) -> convergence = val), builder)); + super.addUIWidgets(builder, buildContext); + } + + protected ModularWindow createCatalystWindow(final EntityPlayer player) { + final int WIDTH = 58; + final int HEIGHT = 52; + final int PARENT_WIDTH = getGUIWidth(); + final int PARENT_HEIGHT = getGUIHeight(); + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.setPos( + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) + .add( + Alignment.BottomRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) + .add(WIDTH - 3, 0) + .subtract(0, 10))); + builder.widget( + TextWidget.localised("GT5U.DTPF.catalysttier") + .setPos(3, 4) + .setSize(50, 20)) + .widget( + new NumericWidget().setSetter(val -> catalystTypeForRecipesWithoutCatalyst = (int) val) + .setGetter(() -> catalystTypeForRecipesWithoutCatalyst) + .setBounds(1, 5) + .setDefaultValue(1) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(50, 18) + .setPos(4, 25) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .addTooltip(translateToLocal("GT5U.DTPF.catalystinfotooltip")) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer( + () -> catalystTypeForRecipesWithoutCatalyst, + (val) -> catalystTypeForRecipesWithoutCatalyst = val), + builder)); + return builder.build(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setLong("eRunningTime", running_time); + aNBT.setDouble("eLongDiscountValue", discount); + aNBT.setInteger("catalystType", catalystTypeForRecipesWithoutCatalyst); + aNBT.setBoolean("convergence", convergence); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + running_time = aNBT.getLong("eRunningTime"); + discount = aNBT.getDouble("eLongDiscountValue"); + catalystTypeForRecipesWithoutCatalyst = aNBT.getInteger("catalystType"); + convergence = aNBT.getBoolean("convergence"); + super.loadNBTData(aNBT); + } + + public HeatingCoilLevel getCoilLevel() { + return mCoilLevel; + } + + public void setCoilLevel(HeatingCoilLevel aCoilLevel) { + mCoilLevel = aCoilLevel; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEPrimitiveBlastFurnace.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPrimitiveBlastFurnace.java new file mode 100644 index 0000000000..c95abda9d7 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPrimitiveBlastFurnace.java @@ -0,0 +1,521 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.IAlignment; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ParticleFX; +import gregtech.api.enums.SteamVariant; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.modularui.IGetTitleColor; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.RecipeMapWorkable; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTItemStack; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; +import gregtech.common.Pollution; + +public abstract class MTEPrimitiveBlastFurnace extends MetaTileEntity + implements IAlignment, ISurvivalConstructable, RecipeMapWorkable, IAddUIWidgets, IGetTitleColor { + + public static final int INPUT_SLOTS = 3, OUTPUT_SLOTS = 3; + private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { + + @Override + protected IStructureDefinition computeValue(Class type) { + return IStructureDefinition.builder() + .addShape( + "main", + transpose( + new String[][] { { "ccc", "c-c", "ccc" }, { "ccc", "clc", "ccc" }, { "c~c", "clc", "ccc" }, + { "ccc", "ccc", "ccc" }, })) + .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMetaID()))) + .addElement( + 'l', + ofChain(isAir(), ofBlockAnyMeta(Blocks.lava, 1), ofBlockAnyMeta(Blocks.flowing_lava, 1))) + .build(); + } + }; + + public int mMaxProgresstime = 0; + private volatile boolean mUpdated; + public int mUpdate = 5; + public int mProgresstime = 0; + public boolean mMachine = false; + + public ItemStack[] mOutputItems = new ItemStack[OUTPUT_SLOTS]; + + public MTEPrimitiveBlastFurnace(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, INPUT_SLOTS + OUTPUT_SLOTS); + } + + public MTEPrimitiveBlastFurnace(String aName) { + super(aName, INPUT_SLOTS + OUTPUT_SLOTS); + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return (facing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public int getProgresstime() { + return this.mProgresstime; + } + + @Override + public int maxProgresstime() { + return this.mMaxProgresstime; + } + + @Override + public int increaseProgress(int aProgress) { + this.mProgresstime += aProgress; + return this.mMaxProgresstime - this.mProgresstime; + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCoverID) { + return (GregTechAPI.getCoverBehaviorNew(aCoverID.toStack()) + .isSimpleCover()) && (super.allowCoverOnSide(side, aCoverID)); + } + + @Override + public abstract MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity); + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mProgresstime", this.mProgresstime); + aNBT.setInteger("mMaxProgresstime", this.mMaxProgresstime); + if (this.mOutputItems != null) { + for (int i = 0; i < mOutputItems.length; i++) { + if (this.mOutputItems[i] != null) { + NBTTagCompound tNBT = new NBTTagCompound(); + this.mOutputItems[i].writeToNBT(tNBT); + aNBT.setTag("mOutputItem" + i, tNBT); + } + } + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.mUpdate = 5; + this.mProgresstime = aNBT.getInteger("mProgresstime"); + this.mMaxProgresstime = aNBT.getInteger("mMaxProgresstime"); + this.mOutputItems = new ItemStack[OUTPUT_SLOTS]; + for (int i = 0; i < OUTPUT_SLOTS; i++) { + this.mOutputItems[i] = GTUtility.loadItem(aNBT, "mOutputItem" + i); + } + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public ExtendedFacing getExtendedFacing() { + return ExtendedFacing.of(getBaseMetaTileEntity().getFrontFacing()); + } + + @Override + public void setExtendedFacing(ExtendedFacing alignment) { + getBaseMetaTileEntity().setFrontFacing(alignment.getDirection()); + } + + @Override + public IAlignmentLimits getAlignmentLimits() { + return (d, r, f) -> (d.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 && r.isNotRotated() + && f.isNotFlipped(); + } + + private boolean checkMachine() { + return STRUCTURE_DEFINITION.get(this.getClass()) + .check( + this, + "main", + getBaseMetaTileEntity().getWorld(), + getExtendedFacing(), + getBaseMetaTileEntity().getXCoord(), + getBaseMetaTileEntity().getYCoord(), + getBaseMetaTileEntity().getZCoord(), + 1, + 2, + 0, + !mMachine); + } + + protected abstract Block getCasingBlock(); + + protected abstract int getCasingMetaID(); + + @Override + public void onMachineBlockUpdate() { + mUpdated = true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + final int lavaX = aBaseMetaTileEntity.getOffsetX(aBaseMetaTileEntity.getBackFacing(), 1); + final int lavaZ = aBaseMetaTileEntity.getOffsetZ(aBaseMetaTileEntity.getBackFacing(), 1); + if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive())) { + + new WorldSpawnedEventBuilder.ParticleEventBuilder().setMotion(0D, 0.3D, 0D) + .setIdentifier(ParticleFX.LARGE_SMOKE) + .setPosition( + lavaX + XSTR_INSTANCE.nextFloat(), + aBaseMetaTileEntity.getOffsetY(aBaseMetaTileEntity.getBackFacing(), 1), + lavaZ + XSTR_INSTANCE.nextFloat()) + .setWorld(getBaseMetaTileEntity().getWorld()) + .run(); + } + if (aBaseMetaTileEntity.isServerSide()) { + if (mUpdated) { + // duct tape fix for too many updates on an overloaded server, causing the structure check to not run + if (mUpdate < 0) mUpdate = 5; + mUpdated = false; + } + if (this.mUpdate-- == 0) { + this.mMachine = checkMachine(); + } + if (this.mMachine) { + if (this.mMaxProgresstime > 0) { + if (++this.mProgresstime >= this.mMaxProgresstime) { + addOutputProducts(); + this.mOutputItems = null; + this.mProgresstime = 0; + this.mMaxProgresstime = 0; + GTMod.achievements.issueAchievement( + aBaseMetaTileEntity.getWorld() + .getPlayerEntityByName(aBaseMetaTileEntity.getOwnerName()), + "steel"); + } + } else if (aBaseMetaTileEntity.isAllowedToWork()) { + checkRecipe(); + } + } + if (this.mMaxProgresstime > 0 && (aTimer % 20L == 0L)) { + Pollution.addPollution( + this.getBaseMetaTileEntity(), + GTMod.gregtechproxy.mPollutionPrimitveBlastFurnacePerSecond); + } + + aBaseMetaTileEntity.setActive((this.mMaxProgresstime > 0) && (this.mMachine)); + final short lavaY = aBaseMetaTileEntity.getYCoord(); + if (aBaseMetaTileEntity.isActive()) { + if (aBaseMetaTileEntity.getAir(lavaX, lavaY, lavaZ)) { + aBaseMetaTileEntity.getWorld() + .setBlock(lavaX, lavaY, lavaZ, Blocks.lava, 1, 2); + this.mUpdate = 1; + } + if (aBaseMetaTileEntity.getAir(lavaX, lavaY + 1, lavaZ)) { + aBaseMetaTileEntity.getWorld() + .setBlock(lavaX, lavaY + 1, lavaZ, Blocks.lava, 1, 2); + this.mUpdate = 1; + } + } else { + Block lowerLava = aBaseMetaTileEntity.getBlock(lavaX, lavaY, lavaZ); + Block upperLava = aBaseMetaTileEntity.getBlock(lavaX, lavaY + 1, lavaZ); + if (lowerLava == Blocks.lava) { + aBaseMetaTileEntity.getWorld() + .setBlock(lavaX, lavaY, lavaZ, Blocks.air, 0, 2); + this.mUpdate = 1; + } + if (upperLava == Blocks.lava) { + aBaseMetaTileEntity.getWorld() + .setBlock(lavaX, lavaY + 1, lavaZ, Blocks.air, 0, 2); + this.mUpdate = 1; + } + } + } + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + if (aBaseMetaTileEntity.isClientSide()) + StructureLibAPI.queryAlignment((IAlignmentProvider) aBaseMetaTileEntity); + } + + /** + * Draws random flames and smoke particles in front of Primitive Blast Furnace when active + * + * @param aBaseMetaTileEntity The entity that will handle the {@link Block#randomDisplayTick} + */ + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { + if (aBaseMetaTileEntity.isActive()) { + + final ForgeDirection frontFacing = aBaseMetaTileEntity.getFrontFacing(); + + final double oX = aBaseMetaTileEntity.getOffsetX(frontFacing, 1) + 0.5D; + final double oY = aBaseMetaTileEntity.getOffsetY(frontFacing, 1); + final double oZ = aBaseMetaTileEntity.getOffsetZ(frontFacing, 1) + 0.5D; + final double offset = -0.48D; + final double horizontal = XSTR_INSTANCE.nextFloat() * 8D / 16D - 4D / 16D; + + final double x, y, z; + + y = oY + XSTR_INSTANCE.nextFloat() * 10D / 16D + 5D / 16D; + + if (frontFacing == ForgeDirection.WEST) { + x = oX - offset; + z = oZ + horizontal; + } else if (frontFacing == ForgeDirection.EAST) { + x = oX + offset; + z = oZ + horizontal; + } else if (frontFacing == ForgeDirection.NORTH) { + x = oX + horizontal; + z = oZ - offset; + } else // if (frontFacing == ForgeDirection.SOUTH.ordinal()) + { + x = oX + horizontal; + z = oZ + offset; + } + + ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(0D, 0D, 0D) + .setPosition(x, y, z) + .setWorld(getBaseMetaTileEntity().getWorld()); + particleEventBuilder.setIdentifier(ParticleFX.SMOKE) + .run(); + particleEventBuilder.setIdentifier(ParticleFX.FLAME) + .run(); + } + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.primitiveBlastRecipes; + } + + private void addOutputProducts() { + if (this.mOutputItems == null) { + return; + } + int limit = Math.min(mOutputItems.length, OUTPUT_SLOTS); + for (int i = 0; i < limit; i++) { + int absi = INPUT_SLOTS + i; + if (this.mInventory[absi] == null) { + this.mInventory[absi] = GTUtility.copyOrNull(this.mOutputItems[i]); + } else if (GTUtility.areStacksEqual(this.mInventory[absi], this.mOutputItems[i])) { + this.mInventory[absi].stackSize = Math.min( + this.mInventory[absi].getMaxStackSize(), + this.mInventory[absi].stackSize + this.mOutputItems[i].stackSize); + } + } + } + + private boolean spaceForOutput(ItemStack outputStack, int relativeOutputSlot) { + int absoluteSlot = relativeOutputSlot + INPUT_SLOTS; + if (this.mInventory[absoluteSlot] == null || outputStack == null) { + return true; + } + return ((this.mInventory[absoluteSlot].stackSize + outputStack.stackSize + <= this.mInventory[absoluteSlot].getMaxStackSize()) + && (GTUtility.areStacksEqual(this.mInventory[absoluteSlot], outputStack))); + } + + private boolean checkRecipe() { + if (!this.mMachine) { + return false; + } + ItemStack[] inputs = new ItemStack[INPUT_SLOTS]; + System.arraycopy(mInventory, 0, inputs, 0, INPUT_SLOTS); + GTRecipe recipe = getRecipeMap().findRecipe(getBaseMetaTileEntity(), false, 0, null, inputs); + if (recipe == null) { + this.mOutputItems = null; + return false; + } + for (int i = 0; i < OUTPUT_SLOTS; i++) { + if (!spaceForOutput(recipe.getOutput(i), i)) { + this.mOutputItems = null; + return false; + } + } + + if (!recipe.isRecipeInputEqual(true, null, inputs)) { + this.mOutputItems = null; + return false; + } + for (int i = 0; i < INPUT_SLOTS; i++) { + if (mInventory[i] != null && mInventory[i].stackSize == 0) { + mInventory[i] = null; + } + } + + this.mMaxProgresstime = recipe.mDuration; + this.mOutputItems = recipe.mOutputs; + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return aIndex > INPUT_SLOTS; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return !GTUtility.areStacksEqual(aStack, this.mInventory[0]); + } + + @Override + public byte getTileEntityBaseType() { + return 0; + } + + public abstract String getName(); + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return STRUCTURE_DEFINITION.get(getClass()) + .survivalBuild( + this, + stackSize, + "main", + getBaseMetaTileEntity().getWorld(), + getExtendedFacing(), + getBaseMetaTileEntity().getXCoord(), + getBaseMetaTileEntity().getYCoord(), + getBaseMetaTileEntity().getZCoord(), + 1, + 2, + 0, + elementBudget, + env, + false); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + STRUCTURE_DEFINITION.get(getClass()) + .buildOrHints( + this, + stackSize, + "main", + getBaseMetaTileEntity().getWorld(), + getExtendedFacing(), + getBaseMetaTileEntity().getXCoord(), + getBaseMetaTileEntity().getYCoord(), + getBaseMetaTileEntity().getZCoord(), + 1, + 2, + 0, + hintsOnly); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder + .widget( + new SlotWidget(inventoryHandler, 0) + .setBackground( + getGUITextureSet().getItemSlot(), + GTUITextures.OVERLAY_SLOT_INGOT_STEAM.get(getSteamVariant())) + .setPos(33, 15)) + .widget( + new SlotWidget(inventoryHandler, 1) + .setBackground( + getGUITextureSet().getItemSlot(), + GTUITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant())) + .setPos(33, 33)) + .widget( + new SlotWidget(inventoryHandler, 2) + .setBackground( + getGUITextureSet().getItemSlot(), + GTUITextures.OVERLAY_SLOT_FURNACE_STEAM.get(getSteamVariant())) + .setPos(33, 51)) + .widget( + new SlotWidget(inventoryHandler, 3).setAccess(true, false) + .setBackground( + getGUITextureSet().getItemSlot(), + GTUITextures.OVERLAY_SLOT_INGOT_STEAM.get(getSteamVariant())) + .setPos(85, 24)) + .widget( + new SlotWidget(inventoryHandler, 4).setAccess(true, false) + .setBackground( + getGUITextureSet().getItemSlot(), + GTUITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant())) + .setPos(103, 24)) + .widget( + new SlotWidget(inventoryHandler, 5).setAccess(true, false) + .setBackground( + getGUITextureSet().getItemSlot(), + GTUITextures.OVERLAY_SLOT_DUST_STEAM.get(getSteamVariant())) + .setPos(121, 24)) + .widget( + new ProgressBar().setTexture(GTUITextures.PROGRESSBAR_ARROW_2_STEAM.get(getSteamVariant()), 20) + .setProgress(() -> (float) mProgresstime / mMaxProgresstime) + .setNEITransferRect( + getRecipeMap().getFrontend() + .getUIProperties().neiTransferRectId) + .setPos(58, 24) + .setSize(20, 18)); + } + + @Override + public GUITextureSet getGUITextureSet() { + return GUITextureSet.STEAM.apply(getSteamVariant()); + } + + @Override + public int getTitleColor() { + return getSteamVariant() == SteamVariant.BRONZE ? COLOR_TITLE.get() : COLOR_TITLE_WHITE.get(); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEProcessingArray.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEProcessingArray.java new file mode 100644 index 0000000000..43f1c003a9 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEProcessingArray.java @@ -0,0 +1,549 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.ExoticEnergy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_GLOW; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.metatileentity.implementations.MTEBasicMachine.isValidForLowGravity; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.ExoticEnergyInputHelper; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.ProcessingArrayManager; +import gregtech.common.blocks.ItemMachines; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +@Deprecated +public class MTEProcessingArray extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose(new String[][] { { "hhh", "hhh", "hhh" }, { "h~h", "h-h", "hhh" }, { "hhh", "hhh", "hhh" }, })) + .addElement( + 'h', + ofChain( + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeastList(t.getAllowedHatches()) + .casingIndex(48) + .dot(1) + .build()), + onElementPass(t -> t.mCasingAmount++, ofBlock(GregTechAPI.sBlockCasings4, 0)))) + .build(); + + private int mCasingAmount = 0; + + private RecipeMap mLastRecipeMap; + private ItemStack lastControllerStack; + private int tTier = 0; + private int mMult = 0; + private boolean downtierUEV = true; + + public MTEProcessingArray(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEProcessingArray(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEProcessingArray(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Processing Array") + .addInfo("Runs supplied machines as if placed in the world") + .addInfo("Place up to 64 singleblock GT machines into the controller") + .addInfo("Note that you still need to supply power to them all") + .addInfo("Use a screwdriver to enable separate input busses") + .addInfo("Use a wire cutter to disable UEV+ downtiering") + .addInfo("Doesn't work on certain machines, deal with it") + .addInfo("Use it if you hate GT++, or want even more speed later on") + .addInfo( + EnumChatFormatting.GOLD + + "On the way to be slowly removed. Use it strictly if you have no alternative.") + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front center") + .addCasingInfoRange("Robust Tungstensteel Machine Casing", 14, 24, false) + .addEnergyHatch("Any casing", 1) + .addMaintenanceHatch("Any casing", 1) + .addInputBus("Any casing", 1) + .addInputHatch("Any casing", 1) + .addOutputBus("Any casing", 1) + .addOutputHatch("Any casing", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + return super.addToMachineList(aTileEntity, aBaseCasingIndex) + || addExoticEnergyInputToMachineList(aTileEntity, aBaseCasingIndex); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { BlockIcons.casingTexturePages[0][48], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { BlockIcons.casingTexturePages[0][48], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][48] }; + } + + private RecipeMap fetchRecipeMap() { + if (isCorrectMachinePart(getControllerSlot())) { + // Gets the recipe map for the given machine through its unlocalized name + return ProcessingArrayManager.giveRecipeMap(ProcessingArrayManager.getMachineName(getControllerSlot())); + } + return null; + } + + @Override + public RecipeMap getRecipeMap() { + return mLastRecipeMap; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return aStack != null && aStack.getUnlocalizedName() + .startsWith("gt.blockmachines."); + } + + @Override + protected void sendStartMultiBlockSoundLoop() { + SoundResource sound = ProcessingArrayManager + .getSoundResource(ProcessingArrayManager.getMachineName(getControllerSlot())); + if (sound != null) { + sendLoopStart((byte) sound.id); + } + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + SoundResource sound = SoundResource.get(aIndex < 0 ? aIndex + 256 : 0); + if (sound != null) { + GTUtility.doSoundAtClient(sound, getTimeBetweenProcessSounds(), 1.0F, aX, aY, aZ); + } + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + if (!GTUtility.areStacksEqual(lastControllerStack, getControllerSlot())) { + // controller slot has changed + lastControllerStack = getControllerSlot(); + mLastRecipeMap = fetchRecipeMap(); + setTierAndMult(); + } + if (mLastRecipeMap == null) return SimpleCheckRecipeResult.ofFailure("no_machine"); + if (mLockedToSingleRecipe && mSingleRecipeCheck != null) { + if (mSingleRecipeCheck.getRecipeMap() != mLastRecipeMap) { + return SimpleCheckRecipeResult.ofFailure("machine_mismatch"); + } + } + + return super.checkProcessing(); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + if (GTMod.gregtechproxy.mLowGravProcessing && recipe.mSpecialValue == -100 + && !isValidForLowGravity(recipe, getBaseMetaTileEntity().getWorld().provider.dimensionId)) { + return SimpleCheckRecipeResult.ofFailure("high_gravity"); + } + if (recipe.mEUt > availableVoltage) return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + }.setMaxParallelSupplier(this::getMaxParallel); + } + + @Override + protected boolean canUseControllerSlotForRecipe() { + return false; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTValues.V[tTier] * (mLastRecipeMap != null ? mLastRecipeMap.getAmperage() : 1)); + logic.setAvailableAmperage(getMaxParallel()); + logic.setAmperageOC(false); + } + + private void setTierAndMult() { + IMetaTileEntity aMachine = ItemMachines.getMetaTileEntity(getControllerSlot()); + if (aMachine instanceof MTETieredMachineBlock) { + tTier = ((MTETieredMachineBlock) aMachine).mTier; + } else { + tTier = 0; + } + mMult = 0; + if (downtierUEV && tTier > 9) { + tTier--; // Lowers down the tier by 1 to allow for bigger parallel + mMult = 2; // Multiplies Parallels by 4x, keeping the energy cost + } + } + + private int getMaxParallel() { + if (getControllerSlot() == null) { + return 0; + } + return getControllerSlot().stackSize << mMult; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (mMachine && aTick % 20 == 0) { + for (MTEHatchInputBus tInputBus : mInputBusses) { + tInputBus.mRecipeMap = mLastRecipeMap; + } + for (MTEHatchInput tInputHatch : mInputHatches) { + tInputHatch.mRecipeMap = mLastRecipeMap; + } + } + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack aStack, boolean aHintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, aStack, aHintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + private boolean checkHatches() { + return mMaintenanceHatches.size() == 1; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("downtierUEV", downtierUEV); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("mSeparate")) { + // backward compatibility + inputSeparation = aNBT.getBoolean("mSeparate"); + } + if (aNBT.hasKey("mUseMultiparallelMode")) { + // backward compatibility + batchMode = aNBT.getBoolean("mUseMultiparallelMode"); + } + downtierUEV = aNBT.getBoolean("downtierUEV"); + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + // Lock to single recipe + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + } else { + inputSeparation = !inputSeparation; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); + } + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + batchMode = !batchMode; + if (batchMode) { + GTUtility.sendChatToPlayer(aPlayer, "Batch recipes"); + } else { + GTUtility.sendChatToPlayer(aPlayer, "Don't batch recipes"); + } + } else { + downtierUEV = !downtierUEV; + GTUtility.sendChatToPlayer(aPlayer, "Treat UEV+ machines as multiple UHV " + downtierUEV); + } + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + private List> getAllowedHatches() { + return ImmutableList.of(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy, ExoticEnergy); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mExoticEnergyHatches.clear(); + mCasingAmount = 0; + return checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 0) && mCasingAmount >= 14 && checkHatches(); + } + + @Override + public String[] getInfoData() { + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatch tHatch : filterValidMTEs(mExoticEnergyHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + return new String[] { + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(-lEUt) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility + .formatNumbers(ExoticEnergyInputHelper.getMaxInputVoltageMulti(getExoticAndNormalEnergyHatchList())) + + EnumChatFormatting.RESET + + " EU/t(*" + + GTUtility + .formatNumbers(ExoticEnergyInputHelper.getMaxInputAmpsMulti(getExoticAndNormalEnergyHatchList())) + + "A) " + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + VN[GTUtility + .getTier(ExoticEnergyInputHelper.getMaxInputVoltageMulti(getExoticAndNormalEnergyHatchList()))] + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + StatCollector.translateToLocal("GT5U.PA.machinetier") + ": " + + EnumChatFormatting.GREEN + + tTier + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.PA.discount") + + ": " + + EnumChatFormatting.GREEN + + 1 + + EnumChatFormatting.RESET + + " x", + StatCollector.translateToLocal("GT5U.PA.parallel") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(getMaxParallel()) + + EnumChatFormatting.RESET }; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + protected boolean supportsSlotAutomation(int aSlot) { + return aSlot == getControllerSlotIndex(); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + downtierUEV = !downtierUEV; + setTierAndMult(); + }) + .setPlayClickSound(true) + .setBackground(() -> { + if (downtierUEV) { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED, + GTUITextures.OVERLAY_BUTTON_DOWN_TIERING_ON }; + } else { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD, + GTUITextures.OVERLAY_BUTTON_DOWN_TIERING_OFF }; + } + }) + .setPos(80, 91) + .setSize(16, 16) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.down_tier")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> downtierUEV, val -> downtierUEV = val)); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + if (mLastRecipeMap != null && getControllerSlot() != null) { + tag.setString("type", getControllerSlot().getDisplayName()); + } + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + if (tag.hasKey("type")) { + currentTip.add("Machine: " + EnumChatFormatting.YELLOW + tag.getString("type")); + } else { + currentTip.add("Machine: " + EnumChatFormatting.YELLOW + "None"); + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEPyrolyseOven.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPyrolyseOven.java new file mode 100644 index 0000000000..45d4c1931a --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEPyrolyseOven.java @@ -0,0 +1,259 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockUnlocalizedName; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PYROLYSE_OVEN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PYROLYSE_OVEN_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PYROLYSE_OVEN_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PYROLYSE_OVEN_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEPyrolyseOven extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { + + private HeatingCoilLevel coilHeat; + private static final int CASING_INDEX = 1090; + private static final IStructureDefinition STRUCTURE_DEFINITION = createStructureDefinition(); + + private static IStructureDefinition createStructureDefinition() { + IStructureElement tCasingElement = NewHorizonsCoreMod.isModLoaded() + ? ofBlockUnlocalizedName(NewHorizonsCoreMod.ID, "gt.blockcasingsNH", 2) + : ofBlock(GregTechAPI.sBlockCasings1, 0); + + return StructureDefinition.builder() + .addShape( + "main", + transpose( + new String[][] { { "ccccc", "ctttc", "ctttc", "ctttc", "ccccc" }, + { "ccccc", "c---c", "c---c", "c---c", "ccccc" }, + { "ccccc", "c---c", "c---c", "c---c", "ccccc" }, + { "bb~bb", "bCCCb", "bCCCb", "bCCCb", "bbbbb" }, })) + .addElement('c', onElementPass(MTEPyrolyseOven::onCasingAdded, tCasingElement)) + .addElement('C', ofCoil(MTEPyrolyseOven::setCoilLevel, MTEPyrolyseOven::getCoilLevel)) + .addElement( + 'b', + buildHatchAdder(MTEPyrolyseOven.class).atLeast(OutputBus, OutputHatch, Energy, Maintenance) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(onElementPass(MTEPyrolyseOven::onCasingAdded, tCasingElement))) + .addElement( + 't', + buildHatchAdder(MTEPyrolyseOven.class).atLeast(InputBus, InputHatch, Muffler) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(onElementPass(MTEPyrolyseOven::onCasingAdded, tCasingElement))) + .build(); + } + + private int mCasingAmount; + + public MTEPyrolyseOven(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPyrolyseOven(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Coke Oven") + .addInfo("Controller block for the Pyrolyse Oven") + .addInfo("Industrial Charcoal producer") + .addInfo("Processing speed scales linearly with Coil tier:") + .addInfo("CuNi: 50%, FeAlCr: 100%, Ni4Cr: 150%, TPV: 200%, etc.") + .addInfo("EU/t is not affected by Coil tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(5, 4, 5, true) + .addController("Front center") + .addCasingInfoRange("Pyrolyse Oven Casing", 60, 80, false) + .addOtherStructurePart("Heating Coils", "Center 3x1x3 of the bottom layer") + .addEnergyHatch("Any bottom layer casing", 1) + .addMaintenanceHatch("Any bottom layer casing", 1) + .addMufflerHatch("Center 3x1x3 area in top layer", 2) + .addInputBus("Center 3x1x3 area in top layer", 2) + .addInputHatch("Center 3x1x3 area in top layer", 2) + .addOutputBus("Any bottom layer casing", 1) + .addOutputHatch("Any bottom layer casing", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection == facingDirection) { + if (active) return new ITexture[] { BlockIcons.casingTexturePages[8][66], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PYROLYSE_OVEN_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PYROLYSE_OVEN_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { BlockIcons.casingTexturePages[8][66], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PYROLYSE_OVEN) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PYROLYSE_OVEN_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[8][66] }; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.pyrolyseRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + public CheckRecipeResult process() { + setSpeedBonus(2f / (1 + coilHeat.getTier())); + return super.process(); + } + }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + private void onCasingAdded() { + mCasingAmount++; + } + + public HeatingCoilLevel getCoilLevel() { + return coilHeat; + } + + private void setCoilLevel(HeatingCoilLevel aCoilLevel) { + coilHeat = aCoilLevel; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + coilHeat = HeatingCoilLevel.None; + mCasingAmount = 0; + replaceDeprecatedCoils(aBaseMetaTileEntity); + return checkPiece("main", 2, 3, 0) && mCasingAmount >= 60 + && mMaintenanceHatches.size() == 1 + && !mMufflerHatches.isEmpty(); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTMod.gregtechproxy.mPollutionPyrolyseOvenPerSecond; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPyrolyseOven(this.mName); + } + + private void replaceDeprecatedCoils(IGregTechTileEntity aBaseMetaTileEntity) { + final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX; + final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ; + final int tX = aBaseMetaTileEntity.getXCoord() + xDir * 2; + final int tY = aBaseMetaTileEntity.getYCoord(); + final int tZ = aBaseMetaTileEntity.getZCoord() + zDir * 2; + for (int xPos = tX - 1; xPos <= tX + 1; xPos++) { + for (int zPos = tZ - 1; zPos <= tZ + 1; zPos++) { + if (aBaseMetaTileEntity.getBlock(xPos, tY, zPos) == GregTechAPI.sBlockCasings1 + && aBaseMetaTileEntity.getMetaID(xPos, tY, zPos) == 13) { + aBaseMetaTileEntity.getWorld() + .setBlock(xPos, tY, zPos, GregTechAPI.sBlockCasings5, 1, 3); + } + } + } + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece("main", stackSize, hintsOnly, 2, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece("main", stackSize, 2, 3, 0, elementBudget, env, false, true); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java new file mode 100644 index 0000000000..c6fed966ef --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTETranscendentPlasmaMixer.java @@ -0,0 +1,387 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static gregtech.api.enums.GTValues.AuthorColen; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DTPF_OFF; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_DTPF_ON; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FUSION1_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.formatNumbers; +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static gregtech.common.misc.WirelessNetworkManager.getUserEU; +import static gregtech.common.misc.WirelessNetworkManager.processInitialSettings; +import static gregtech.common.tileentities.machines.multi.MTEPlasmaForge.DIM_BRIDGE_CASING; +import static gregtech.common.tileentities.machines.multi.MTEPlasmaForge.DIM_INJECTION_CASING; +import static gregtech.common.tileentities.machines.multi.MTEPlasmaForge.DIM_TRANS_CASING; +import static kekztech.util.Util.toStandardForm; +import static net.minecraft.util.EnumChatFormatting.GOLD; +import static net.minecraft.util.EnumChatFormatting.GRAY; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; + +public class MTETranscendentPlasmaMixer extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable { + + private static final String[][] structure = new String[][] { + { " CAC ", " ABA ", " ABA ", " A~A ", " ABA ", " ABA ", " CAC " }, + { "CBBBC", "A A", "A A", "A A", "A A", "A A", "CBBBC" }, + { "ABBBA", "B B", "B B", "B B", "B B", "B B", "ABBBA" }, + { "CBBBC", "A A", "A A", "A A", "A A", "A A", "CBBBC" }, + { " CAC ", " ABA ", " ABA ", " ABA ", " ABA ", " ABA ", " CAC " } }; + + private static final String STRUCTURE_PIECE_MAIN = "MAIN"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, structure) + .addElement( + 'B', + buildHatchAdder(MTETranscendentPlasmaMixer.class).atLeast(InputHatch, OutputHatch, InputBus, Maintenance) + .casingIndex(DIM_INJECTION_CASING) + .dot(1) + .buildAndChain(GregTechAPI.sBlockCasings1, DIM_INJECTION_CASING)) + .addElement('A', ofBlock(GregTechAPI.sBlockCasings1, DIM_TRANS_CASING)) + .addElement('C', ofBlock(GregTechAPI.sBlockCasings1, DIM_BRIDGE_CASING)) + .build(); + + private UUID ownerUUID; + + public MTETranscendentPlasmaMixer(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTETranscendentPlasmaMixer(String aName) { + super(aName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Transcendent Mixer") + .addInfo("Assisting in all your DTPF needs.") + .addInfo("This multiblock will run in parallel according to the amount set") + .addInfo("in the parallel menu. All inputs will scale, except time.") + .addInfo("All EU is deducted from wireless EU networks only.") + .addInfo(AuthorColen) + .addSeparator() + .beginStructureBlock(5, 7, 5, false) + .addStructureInfo(GOLD + "1+ " + GRAY + "Input Hatch") + .addStructureInfo(GOLD + "1+ " + GRAY + "Output Hatch") + .addStructureInfo(GOLD + "1+ " + GRAY + "Input Bus") + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTETranscendentPlasmaMixer(mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { casingTexturePages[0][DIM_TRANS_CASING], TextureFactory.builder() + .addIcon(OVERLAY_DTPF_ON) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FUSION1_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][DIM_TRANS_CASING], TextureFactory.builder() + .addIcon(OVERLAY_DTPF_OFF) + .extFacing() + .build() }; + } + + return new ITexture[] { casingTexturePages[0][DIM_TRANS_CASING] }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + int multiplier = 1; + BigInteger finalConsumption = BigInteger.ZERO; + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.transcendentPlasmaMixerRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + BigInteger recipeEU; + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + BigInteger availableEU = getUserEU(ownerUUID); + recipeEU = BigInteger.valueOf(10L * recipe.mEUt * recipe.mDuration); + if (availableEU.compareTo(recipeEU) < 0) { + finalConsumption = BigInteger.ZERO; + return CheckRecipeResultRegistry.insufficientStartupPower(recipeEU); + } + maxParallel = availableEU.divide(recipeEU) + .min(BigInteger.valueOf(maxParallel)) + .intValue(); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { + finalConsumption = recipeEU.multiply(BigInteger.valueOf(-calculatedParallels)); + // This will void the inputs if wireless energy has dropped + // below the required amount between validateRecipe and here. + if (!addEUToGlobalEnergyMap(ownerUUID, finalConsumption)) { + return CheckRecipeResultRegistry.insufficientStartupPower(finalConsumption); + } + // Energy consumed all at once from wireless net. + setCalculatedEut(0); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + return OverclockCalculator.ofNoOverclock(recipe); + } + }.setMaxParallelSupplier(() -> multiplier); + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + // The voltage is only used for recipe finding + logic.setAvailableVoltage(Long.MAX_VALUE); + logic.setAvailableAmperage(1); + logic.setAmperageOC(false); + } + + private static final int HORIZONTAL_OFFSET = 2; + private static final int VERTICAL_OFFSET = 3; + private static final int DEPTH_OFFSET = 0; + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFFSET, VERTICAL_OFFSET, DEPTH_OFFSET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + HORIZONTAL_OFFSET, + VERTICAL_OFFSET, + DEPTH_OFFSET, + elementBudget, + env, + false, + true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + + // Check the main structure + if (!checkPiece(STRUCTURE_PIECE_MAIN, HORIZONTAL_OFFSET, VERTICAL_OFFSET, DEPTH_OFFSET)) { + return false; + } + + // Maintenance hatch not required but left for compatibility. + // Don't allow more than 1, no free casing spam! + return (mMaintenanceHatches.size() <= 1); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + + super.onPreTick(aBaseMetaTileEntity, aTick); + + if (aBaseMetaTileEntity.isServerSide() && (aTick == 1)) { + // Adds player to the wireless network if they do not already exist on it. + ownerUUID = processInitialSettings(aBaseMetaTileEntity); + } + } + + private static final int PARALLEL_WINDOW_ID = 10; + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + buildContext.addSyncedWindow(PARALLEL_WINDOW_ID, this::createParallelWindow); + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getContext() + .openSyncedWindow(PARALLEL_WINDOW_ID); + } + }) + .setPlayClickSound(true) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(GTUITextures.BUTTON_STANDARD); + ret.add(GTUITextures.OVERLAY_BUTTON_BATCH_MODE_ON); + return ret.toArray(new IDrawable[0]); + }) + .addTooltip(translateToLocal("GT5U.tpm.parallelwindow")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(174, 112) + .setSize(16, 16)); + super.addUIWidgets(builder, buildContext); + } + + protected ModularWindow createParallelWindow(final EntityPlayer player) { + final int WIDTH = 158; + final int HEIGHT = 52; + final int PARENT_WIDTH = getGUIWidth(); + final int PARENT_HEIGHT = getGUIHeight(); + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.setPos( + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) + .add( + Alignment.BottomRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) + .add(WIDTH - 3, 0) + .subtract(0, 10))); + builder.widget( + TextWidget.localised("GTPP.CC.parallel") + .setPos(3, 4) + .setSize(150, 20)) + .widget( + new NumericWidget().setSetter(val -> multiplier = (int) val) + .setGetter(() -> multiplier) + .setBounds(1, Integer.MAX_VALUE) + .setDefaultValue(1) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(150, 18) + .setPos(4, 25) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer(() -> multiplier, (val) -> multiplier = val), + builder)); + return builder.build(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("eMultiplier", multiplier); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + multiplier = aNBT.getInteger("eMultiplier"); + super.loadNBTData(aNBT); + } + + @Override + public String[] getInfoData() { + return new String[] { + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + (mMaxProgresstime == 0 ? "0" + : toStandardForm(finalConsumption.divide(BigInteger.valueOf(-mMaxProgresstime)))) + + EnumChatFormatting.RESET + + " EU/t" }; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEVacuumFreezer.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEVacuumFreezer.java new file mode 100644 index 0000000000..c2879e0ab7 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEVacuumFreezer.java @@ -0,0 +1,162 @@ +package gregtech.common.tileentities.machines.multi; + +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.StructureUtility; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTECubicMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEVacuumFreezer extends MTECubicMultiBlockBase { + + public MTEVacuumFreezer(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEVacuumFreezer(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEVacuumFreezer(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Vacuum Freezer") + .addInfo("Controller Block for the Vacuum Freezer") + .addInfo("Cools hot ingots and cells") + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front center") + .addCasingInfoRange("Frost Proof Machine Casing", 16, 24, false) + .addEnergyHatch("Any casing", 1) + .addMaintenanceHatch("Any casing", 1) + .addInputHatch("Any casing", 1) + .addOutputHatch("Any casing", 1) + .addInputBus("Any casing", 1) + .addOutputBus("Any casing", 1) + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (aActive) { + rTexture = new ITexture[] { casingTexturePages[0][17], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { casingTexturePages[0][17], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_VACUUM_FREEZER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_VACUUM_FREEZER_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { casingTexturePages[0][17] }; + } + return rTexture; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.vacuumFreezerRecipes; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic(); + } + + @Override + protected IStructureElement> getCasingElement() { + return StructureUtility.ofBlock(GregTechAPI.sBlockCasings2, 1); + } + + @Override + protected List>> getAllowedHatches() { + return ImmutableList.of(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy); + } + + @Override + protected int getHatchTextureIndex() { + return 17; + } + + @Override + protected int getRequiredCasingCount() { + return 16; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java b/src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java new file mode 100644 index 0000000000..12153fc10e --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/MTEWormholeGenerator.java @@ -0,0 +1,1118 @@ +package gregtech.common.tileentities.machines.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; +import static goodgenerator.util.DescTextLocalization.BLUE_PRINT_INFO; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.Textures.BlockIcons.getCasingTextureForId; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.lang.ref.Reference; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.collect.MapMaker; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import appeng.api.AEApi; +import bartworks.API.BorosilicateGlass; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.ResultMissingItem; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.render.TileEntityWormhole; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import tectech.thing.casing.BlockGTCasingsTT; +import tectech.thing.casing.TTCasingsContainer; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; + +public class MTEWormholeGenerator extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable { + + /** + * Number of seconds to average the wormhole energy over. + */ + public static int WH_ENERGY_AVG_WINDOW = 90; + + /** + * The amount of EU received per EU sent. + */ + public static double TRANSFER_EFFICIENCY = (1.0 - 0.00_0004 * 64); + + /** + * The amount of EU to lose every second the wormhole decays. + */ + public static double DECAY_RATE = 0.25; + + /** + * The amount of EU that the wormhole collapses at. + */ + public static double COLLAPSE_THRESHOLD = 32; + + /** + * The wormhole render radius percent of the max size when specified wormhole power is reached (purely aesthetical) + */ + public static double RENDER_PERCENT_TARGET = .1; + + /** + * Wormhole energy to specify reach the specified size percentage (purely aesthetical) + */ + public static double RENDER_TARGET_ENERGY = TierEU.IV * 256; + + /** + * Maximum wormhole radius (purely aesthetical) + */ + public static double RENDER_MAX_RADIUS = 2.999 / Math.sqrt(3); + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final byte GLASS_TIER_UNSET = -2; + + private static final int TT_CASING_INDEX = BlockGTCasingsTT.textureOffset; + + private static final int TOP_HATCH = 0, BOTTOM_HATCH = 1, LEFT_HATCH = 2, RIGHT_HATCH = 3, BACK_HATCH = 4, + FRONT_HATCH = 5, MAX_HATCHES = 6; + + private static final int[] OPPOSITES = { BOTTOM_HATCH, TOP_HATCH, RIGHT_HATCH, LEFT_HATCH, FRONT_HATCH, + BACK_HATCH, }; + + private static final String[] HATCH_NAMES = { "Top", "Bottom", "Left", "Right", "Back", "Front" }; + private static final boolean[] HATCH_MASK = { true, true, true, true, false, false }; + + private byte mGlassTier = -2; + private boolean mStructureBadGlassTier = false; + + private final MTEHatchEnergyMulti[] mSendHatches = new MTEHatchEnergyMulti[MAX_HATCHES]; + private final MTEHatchDynamoMulti[] mReceiveHatches = new MTEHatchDynamoMulti[MAX_HATCHES]; + + private final ItemStack singularity = AEApi.instance() + .definitions() + .materials() + .singularity() + .maybeStack(1) + .get(); + private final ItemStack qeSingularity = AEApi.instance() + .definitions() + .materials() + .qESingularity() + .maybeStack(1) + .get(); + + private WormholeLink mLink; + private final WeakReference mSelfReference = new WeakReference<>(this); + + private double mWormholeEnergy_UI = 0; + + private boolean mIsUnloading = false; + + public MTEWormholeGenerator(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEWormholeGenerator(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEWormholeGenerator(mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean active, boolean redstoneLevel) { + if (side == facing) { + if (active) { + return new ITexture[] { getCasingTextureForId(TT_CASING_INDEX), TextureFactory.builder() + .addIcon(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active) + .extFacing() + .build() }; + } else { + return new ITexture[] { getCasingTextureForId(TT_CASING_INDEX), TextureFactory.builder() + .addIcon(TexturesGtBlock.Overlay_Machine_Controller_Advanced) + .extFacing() + .build() }; + } + } + return new ITexture[] { getCasingTextureForId(TT_CASING_INDEX) }; + } + + // #region Structure + + // spotless:off + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][]{ + {" "," F "," EEE "," FEtEF "," EEE "," F "," "}, + {" F "," AADAA "," A B A ","FDBBBDF"," A B A "," AADAA "," F "}, + {" EEE "," A B A ","E E","EB BE","E E"," A B A "," EEE "}, + {" FE~EF ","FA B AF","E E","lB Br","E E","FA B AF"," FEEEF "}, + {" EEE "," A B A ","E E","EB BE","E E"," A B A "," EEE "}, + {" F "," AADAA "," A B A ","FDBBBDF"," A B A "," AADAA "," F "}, + {" "," F "," EEE "," FEbEF "," EEE "," F "," "} + })) + .addElement('E', + buildHatchAdder(MTEWormholeGenerator.class) + .atLeast(Maintenance, InputBus) + .casingIndex(TT_CASING_INDEX) // High Power Casing + .dot(1) + .buildAndChain(lazy(() -> ofBlock(TTCasingsContainer.sBlockCasingsTT, 0))) // High Power Casing + ) + .addElement( + 'A', + withChannel( + "glass", + BorosilicateGlass.ofBoroGlass(GLASS_TIER_UNSET, (te, t) -> te.mGlassTier = t, te -> te.mGlassTier)) + ) + .addElement('D', ofBlock(GregTechAPI.sBlockCasings8, 5)) // Europium Reinforced Radiation Proof Machine Casing + .addElement('B', ofBlock(GregTechAPI.sBlockCasings4, 7)) // Fusion Coil Block + .addElement('F', lazy(() -> ofBlock(TTCasingsContainer.sBlockCasingsTT, 4))) // Molecular Casing + .addElement('t', + buildHatchAdder(MTEWormholeGenerator.class) + .anyOf(new TransferHatch(TOP_HATCH)) + .casingIndex(TT_CASING_INDEX) // High Power Casing + .dot(2) + .buildAndChain(lazy(() -> ofBlock(TTCasingsContainer.sBlockCasingsTT, 0))) // High Power Casing + ) + .addElement('b', + buildHatchAdder(MTEWormholeGenerator.class) + .anyOf(new TransferHatch(BOTTOM_HATCH)) + .casingIndex(TT_CASING_INDEX) // High Power Casing + .dot(2) + .buildAndChain(lazy(() -> ofBlock(TTCasingsContainer.sBlockCasingsTT, 0))) // High Power Casing + ) + .addElement('l', + buildHatchAdder(MTEWormholeGenerator.class) + .anyOf(new TransferHatch(LEFT_HATCH)) + .casingIndex(TT_CASING_INDEX) // High Power Casing + .dot(2) + .buildAndChain(lazy(() -> ofBlock(TTCasingsContainer.sBlockCasingsTT, 0))) // High Power Casing + ) + .addElement('r', + buildHatchAdder(MTEWormholeGenerator.class) + .anyOf(new TransferHatch(RIGHT_HATCH)) + .casingIndex(TT_CASING_INDEX) // High Power Casing + .dot(2) + .buildAndChain(lazy(() -> ofBlock(TTCasingsContainer.sBlockCasingsTT, 0))) // High Power Casing + ) + .build(); + // spotless:on + + private static class TransferHatch implements IHatchElement { + + public final int mIndex; + + public TransferHatch(int index) { + this.mIndex = index; + } + + @Override + public List> mteClasses() { + return Arrays.asList(MTEHatchEnergyMulti.class, MTEHatchDynamoMulti.class); + } + + @Override + public IGTHatchAdder adder() { + return (tile, aTileEntity, aBaseCasingIndex) -> { + if (aTileEntity == null) return false; + + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + + if (aMetaTileEntity == null) return false; + + if (aMetaTileEntity instanceof MTEHatchEnergyMulti input) { + input.updateTexture(aBaseCasingIndex); + input.updateCraftingIcon(tile.getMachineCraftingIcon()); + tile.mSendHatches[mIndex] = input; + return true; + } else if (aMetaTileEntity instanceof MTEHatchDynamoMulti output) { + output.updateTexture(aBaseCasingIndex); + output.updateCraftingIcon(tile.getMachineCraftingIcon()); + tile.mReceiveHatches[mIndex] = output; + return true; + } + + return false; + }; + } + + @Override + public String name() { + return "TransferHatch"; + } + + @Override + public long count(MTEWormholeGenerator t) { + return t.mExoticEnergyHatches.size(); + } + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.GT_MACHINES_FUSION_LOOP; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 3, 0)) return false; + + mStructureBadGlassTier = false; + + for (var energyHatch : mExoticEnergyHatches) { + if (energyHatch.getBaseMetaTileEntity() == null) { + continue; + } + + if (energyHatch.getTierForStructure() > mGlassTier) { + mStructureBadGlassTier = true; + } + } + + return !mStructureBadGlassTier; + } + + @Override + public void clearHatches() { + super.clearHatches(); + + Arrays.fill(mSendHatches, null); + Arrays.fill(mReceiveHatches, null); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 3, 0, elementBudget, env, false, true); + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + // #endregion + @Override + public void onBlockDestroyed() { + super.onBlockDestroyed(); + destroyRenderBlock(); + } + + @Override + public void onDisableWorking() { + super.onDisableWorking(); + // destroyRenderBlock(); + } + + @Override + public void onStructureChange() { + super.onStructureChange(); + if (!checkStructure(false, this.getBaseMetaTileEntity())) { + destroyRenderBlock(); + } + } + + private void destroyRenderBlock() { + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + if (gregTechTileEntity.getWorld() == null) { + return; + } + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + int xOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetX; + int yOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetY; + int zOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + + int xTarget = x + xOffset; + int yTarget = y + yOffset; + int zTarget = z + zOffset; + + Optional.of(gregTechTileEntity) + .map(IHasWorldObjectAndCoords::getWorld) + .ifPresent(w -> w.setBlock(xTarget, yTarget, zTarget, Blocks.air)); + } + + @Nullable + private TileEntityWormhole createRenderBlock() { + + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + World world = gregTechTileEntity.getWorld(); + + if (world == null) { + return null; + } + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + int xOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetX; + int yOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetY; + int zOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + + int xTarget = x + xOffset; + int yTarget = y + yOffset; + int zTarget = z + zOffset; + + world.setBlock(xTarget, yTarget, zTarget, Blocks.air); + world.setBlock(xTarget, yTarget, zTarget, GregTechAPI.sWormholeRender); + + TileEntityWormhole wormhole = (TileEntityWormhole) world.getTileEntity(xTarget, yTarget, zTarget); + + if (wormhole == null) { + return null; + } + return wormhole; + } + + @Nullable + private TileEntityWormhole getRenderBlock() { + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + double xOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetY; + + int wX = (int) (x + xOffset); + int wY = (int) (y + yOffset); + int wZ = (int) (z + zOffset); + + TileEntity tile = Optional.ofNullable(gregTechTileEntity.getWorld()) + .map(w -> w.getTileEntity(wX, wY, wZ)) + .orElse(null); + if (tile instanceof TileEntityWormhole wormhole) return wormhole; + return null; + + } + + public void updateRenderDim() { + TileEntityWormhole temp = getRenderBlock(); + + World target = Optional.ofNullable(mLink) + .map(link -> link.getDest(mSelfReference)) + .map(MetaTileEntity::getBaseMetaTileEntity) + .map(IHasWorldObjectAndCoords::getWorld) + .orElse(null); + + TileEntityWormhole hole = getRenderBlock(); + if (hole == null) hole = createRenderBlock(); + + if (hole != null) { + hole.setDimFromWorld(target); + } + } + + public void updateRenderRadius(double radius) { + TileEntityWormhole hole = getRenderBlock(); + if (hole == null) hole = createRenderBlock(); + + if (hole != null) { + hole.setRadius(radius); + } + } + + private static double wormholeRadiusCalc(double energy) { + if (energy < COLLAPSE_THRESHOLD) return 0; + + double offset = RENDER_TARGET_ENERGY + (COLLAPSE_THRESHOLD - RENDER_TARGET_ENERGY) / (RENDER_PERCENT_TARGET); + return RENDER_MAX_RADIUS * (COLLAPSE_THRESHOLD - energy) / (offset - energy); + } + + // #region Logic + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public void onUnload() { + super.onUnload(); + mIsUnloading = true; + if (mLink != null) { + mLink.disconnect(mSelfReference); + } + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + checkFrequency(); + + mMaxProgresstime = 20; + mEfficiency = Math.max(0, getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000)); + + if (doRandomMaintenanceDamage()) { + if (onRunningTick(mInventory[1])) { + markDirty(); + + if (++mProgresstime >= mMaxProgresstime) { + mProgresstime = 0; + + if (mLink != null) { + mLink.update(mSelfReference); + } + checkRecipe(); + } + } + } + } + + @Override + @Nonnull + public CheckRecipeResult checkProcessing() { + if (mLink == null || !mLink.isConnected(mSelfReference) + || getBaseMetaTileEntity() == null + || !getBaseMetaTileEntity().isAllowedToWork()) { + return SimpleCheckRecipeResult.ofFailure("none"); + } + + if (mLink.isActive()) { + for (int i = 0; i < MAX_HATCHES; i++) { + if (!HATCH_MASK[i]) continue; + long optimal = mLink.mWormholeEnergy > Long.MAX_VALUE ? Long.MAX_VALUE : ((long) mLink.mWormholeEnergy); + if (getTransferable(i) > 0) { + if (mLink.mWormholeEnergy <= 0) { + var singularityStack = singularity.copy(); + + if (!depleteInput(singularityStack)) { + return new ResultMissingItem(singularityStack); + } + mLink.mWormholeEnergy = 1; + optimal = 1; + } + transferPower(optimal, i); + } + } + } + + if (mLink.mWormholeEnergy > 0) { + return SimpleCheckRecipeResult.ofSuccess("none"); + } + return SimpleCheckRecipeResult.ofFailure("none"); + } + + private void checkFrequency() { + if (mIsUnloading) { + return; + } + + ItemStack link = null; + + for (var slot : mInventory) { + if (slot != null && qeSingularity.getItem() == slot.getItem() + && qeSingularity.getItemDamage() == slot.getItemDamage()) { + link = slot; + break; + } + } + + Long freq = link != null && link.getTagCompound() != null + && link.getTagCompound() + .hasKey("freq", 4 /* Long */) ? link.getTagCompound() + .getLong("freq") : null; + + if (!Objects.equals(freq, mLink == null ? null : mLink.mFrequency)) { + if (mLink != null) { + mLink.disconnect(mSelfReference); + mLink = null; + } + + if (freq != null) { + mLink = WormholeLink.get(freq); + mLink.connect(mSelfReference); + } + } + } + + private long getTransferable(int index) { + var dest = mLink.getDest(mSelfReference); + + if (dest == null || mMaxProgresstime == 0 || dest.mMaxProgresstime == 0) { + return 0; + } + + var inputHatch = mSendHatches[index]; + var outputHatch = dest.mReceiveHatches[OPPOSITES[index]]; + + if (inputHatch == null || outputHatch == null) { + return 0; + } + + long available = inputHatch.getEUVar(); + long empty = outputHatch.maxEUStore() - outputHatch.getEUVar(); + + return Math.min(available, empty); + } + + private void transferPower(long optimal, int index) { + var dest = mLink.getDest(mSelfReference); + if (dest == null) { + return; + } + + var inputHatch = mSendHatches[index]; + var outputHatch = dest.mReceiveHatches[OPPOSITES[index]]; + + if (inputHatch == null || outputHatch == null) { + return; + } + + long available = inputHatch.getEUVar(); + long empty = outputHatch.maxEUStore() - outputHatch.getEUVar(); + long maxSend = inputHatch.maxAmperesIn() * V[inputHatch.mTier] * 20; + long maxReceive = outputHatch.maxAmperesOut() * V[outputHatch.mTier] * 20; + + // spotless:off + long toSend = (long)(Math.min(Math.min(Math.min(available, empty), maxSend), maxReceive) * (1.0 - (getIdealStatus() - getRepairStatus()) * 0.1)); + + double overclocks = Math.max(Math.log((double)toSend / (double)optimal) / Math.log(4.0), 0.0); + + long toReceive = (long) ( + toSend * + (1.0 / Math.pow(4.0, overclocks)) * + Math.pow(2.0, overclocks) * + (1.0 - (dest.getIdealStatus() - dest.getRepairStatus()) * 0.1) * + TRANSFER_EFFICIENCY + ); + // spotless:on + + inputHatch.setEUVar(inputHatch.getEUVar() - toSend); + outputHatch.setEUVar(outputHatch.getEUVar() + toReceive); + + double size = wormholeRadiusCalc((double) optimal / 20); + this.updateRenderRadius(size); + dest.updateRenderRadius(size); + + mLink.onEnergyTransferred(toSend); + mLink.mSendAmounts[index] += toSend; + mLink.mReceiveAmounts[OPPOSITES[index]] += toReceive; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + + try { + if (mLink != null) { + mLink.tryPromote(); + + NBTTagCompound link = new NBTTagCompound(); + + link.setLong("mFrequency", mLink.mFrequency); + link.setDouble("mWormholeEnergy", mLink.mWormholeEnergy); + + if (mLink.isMaster(mSelfReference)) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(baos); + + dos.writeInt(mLink.mReceiveAmounts.length); + for (var x : mLink.mReceiveAmounts) { + dos.writeLong(x); + } + + dos.writeInt(mLink.mSendAmounts.length); + for (var x : mLink.mSendAmounts) { + dos.writeLong(x); + } + + link.setByteArray("data", baos.toByteArray()); + } + + aNBT.setTag("mLink", link); + } + } catch (Throwable t) { + GTMod.GT_FML_LOGGER.error("Could not save GT_MetaTileEntity_WormholeGenerator", t); + } + + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + + checkFrequency(); + + if (aNBT.hasKey("mLink") && mLink != null) { + NBTTagCompound link = aNBT.getCompoundTag("mLink"); + + long freq = link.getLong("mFrequency"); + + try { + if (freq == mLink.mFrequency && mLink.isMaster(mSelfReference)) { + mLink.mWormholeEnergy = link.getDouble("mWormholeEnergy"); + + ByteArrayInputStream bais = new ByteArrayInputStream(link.getByteArray("data")); + DataInputStream dis = new DataInputStream(bais); + + long[] recv_amounts = new long[dis.readInt()]; + for (int i = 0; i < recv_amounts.length; i++) { + recv_amounts[i] = dis.readLong(); + } + + System.arraycopy( + recv_amounts, + 0, + mLink.mReceiveAmounts, + 0, + Math.min(recv_amounts.length, mLink.mReceiveAmounts.length)); + + long[] send_amounts = new long[dis.readInt()]; + for (int i = 0; i < send_amounts.length; i++) { + send_amounts[i] = dis.readLong(); + } + + System.arraycopy( + send_amounts, + 0, + mLink.mSendAmounts, + 0, + Math.min(send_amounts.length, mLink.mSendAmounts.length)); + } + } catch (Throwable t) { + GTMod.GT_FML_LOGGER.error("Could not load GT_MetaTileEntity_WormholeGenerator", t); + } + } + } + + private static class WormholeLink { + + private final static Map WORMHOLE_GENERATORS = new MapMaker().weakValues() + .makeMap(); + + public final long mFrequency; + + public WeakReference mMaster, mSlave; + + public final long[] mSendAmounts = new long[MAX_HATCHES]; + public final long[] mReceiveAmounts = new long[MAX_HATCHES]; + + public double mWormholeEnergy; + private double mPendingEnergy; + + private WormholeLink(long frequency) { + mFrequency = frequency; + } + + public static WormholeLink get(long frequency) { + return WORMHOLE_GENERATORS.computeIfAbsent(frequency, WormholeLink::new); + } + + public void update(WeakReference updater) { + tryPromote(); + + if (isMaster(updater)) { + if (isActive() && mPendingEnergy > 0) { + var delta = mPendingEnergy / WH_ENERGY_AVG_WINDOW; + + if (mPendingEnergy < mWormholeEnergy) { + // if the wormhole is shrinking and the next tick would take it below the pending energy, just + // use the pending energy + if (mWormholeEnergy - delta < mPendingEnergy) { + mWormholeEnergy = mPendingEnergy; + } else { + mWormholeEnergy -= delta; + } + } else if (mPendingEnergy > mWormholeEnergy) { + // if the wormhole is growing and the next tick would take it above the pending energy, just use + // the pending energy + if (mWormholeEnergy + delta > mPendingEnergy) { + mWormholeEnergy = mPendingEnergy; + } else { + mWormholeEnergy += delta; + } + } + + mPendingEnergy = 0; + } else { + mWormholeEnergy *= (1.0 - DECAY_RATE); + + if (mWormholeEnergy < COLLAPSE_THRESHOLD) { + mWormholeEnergy = 0; + + } + } + Arrays.fill(mSendAmounts, 0); + Arrays.fill(mReceiveAmounts, 0); + } + } + + public void onEnergyTransferred(long amount) { + mPendingEnergy += amount; + } + + public boolean isMaster(WeakReference tile) { + return mMaster == tile; + } + + public boolean isConnected(WeakReference tile) { + return mMaster == tile || mSlave == tile; + } + + public boolean isFormed() { + return mMaster != null && mSlave != null; + } + + public boolean connect(WeakReference tile) { + tryPromote(); + + if (mMaster == null) { + mMaster = tile; + Optional.ofNullable(mMaster) + .map(Reference::get) + .ifPresent(MTEWormholeGenerator::updateRenderDim); + + Optional.ofNullable(mSlave) + .map(Reference::get) + .ifPresent(MTEWormholeGenerator::updateRenderDim); + return true; + } + if (mSlave == null) { + mSlave = tile; + + Optional.of(mMaster) + .map(Reference::get) + .ifPresent(MTEWormholeGenerator::updateRenderDim); + + Optional.ofNullable(mSlave) + .map(Reference::get) + .ifPresent(MTEWormholeGenerator::updateRenderDim); + + return true; + } + + return false; + } + + public void disconnect(WeakReference tile) { + Objects.requireNonNull(tile.get()) + .destroyRenderBlock(); + + if (tile == mMaster) mMaster = null; + if (tile == mSlave) mSlave = null; + + tryPromote(); + + if (mMaster == null && mSlave == null) { + WORMHOLE_GENERATORS.remove(mFrequency, this); + } + } + + public void tryPromote() { + mMaster = tryClean(mMaster); + mSlave = tryClean(mSlave); + + if (mMaster == null && mSlave != null) { + mMaster = mSlave; + mSlave = null; + } + } + + private static WeakReference tryClean(WeakReference tileReference) { + if (tileReference != null) { + var tile = tileReference.get(); + + if (tile == null) { + return null; + } else { + var base = tile.getBaseMetaTileEntity(); + + if (base == null || base.isDead()) { + return null; + } + } + } + + return tileReference; + } + + public MTEWormholeGenerator getDest(WeakReference tile) { + if (tile == mMaster) { + return mSlave != null ? mSlave.get() : null; + } + + if (tile == mSlave) { + return mMaster != null ? mMaster.get() : null; + } + + return null; + } + + public boolean isActive() { + boolean masterCanWork = Optional.ofNullable(mMaster) + .map(WeakReference::get) + .map(MTEWormholeGenerator::getBaseMetaTileEntity) + .map(IGregTechTileEntity::isAllowedToWork) + .orElse(false); + + boolean slaveCanWork = Optional.ofNullable(mSlave) + .map(WeakReference::get) + .map(MTEWormholeGenerator::getBaseMetaTileEntity) + .map(IGregTechTileEntity::isAllowedToWork) + .orElse(false); + + return masterCanWork && slaveCanWork; + } + } + + // #endregion + + // #region UI + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + + // spotless:off + tt.addMachineType("Wormhole Generator") + .addInfo("Controller for the Miniature Wormhole Generator.") + .addInfo("Transfers EU between two wormhole generators.") + .addInfo("Wormholes are linked by placing an AE2 Entangled Singularity in each controller slot.") + .addInfo("The transfer rate is limited by the wormhole size, and the wormhole size is governed by the transfer rate.") + .addInfo("If the transfer rate is completely stable, the transfer efficiency is " + String.format("%.3f", TRANSFER_EFFICIENCY * 100.0) + "%.") + .addInfo("EU will only be transferred if there is space in the laser source hatch.") + .addInfo("Each laser target must have a laser source on the §oother§7 controller, on the §oopposite§7 side.") + .addInfo("Consumes an AE2 Singularity from an input bus each time the wormhole is kick-started.") + .addInfo("The structure is too complex!") + .addInfo(BLUE_PRINT_INFO) + .beginStructureBlock(7, 9, 7, false) + .addSeparator() + .addCasingInfoExactly("Molecular Casing", 2 * 12, false) + .addCasingInfoExactly("Europium Reinforced Radiation Proof Machine Casing", 4, false) + .addCasingInfoExactly("Fusion Coil Block", 3 * 4 + 5 * 2, false) + .addCasingInfoRange("High Power Casing", 8 * 6 + 1, 8 * 6 + 1 + 4, false) + .addCasingInfoExactly("Borosilicate Glass (any)", 9 * 4, true) + .addMaintenanceHatch("§61§r (dot 1)") + .addInputBus("§61§r (dot 1)") + .addDynamoHatch("§60§r - §64§r (laser only, dot 2)") + .addEnergyHatch("§60§r - §64§r (laser only, dot 2)") + .addStructureInfo("§rThe glass tier limits the hatch tier.") + .addSubChannelUsage("glass", "Borosilicate Glass Tier") + .toolTipFinisher("Gregtech"); + // spotless:on + + return tt; + } + + @Override + public String[] getInfoData() { + List data = new ArrayList<>(); + + data.addAll(Arrays.asList(super.getInfoData())); + + data.add("-----------------------"); + data.add("Wormhole Generator Info"); + + if (mStructureBadGlassTier) { + data.add(String.format("§cStructure errors:§r")); + + if (mStructureBadGlassTier) { + data.add(String.format("§cGlass tier must be greater than or equal to the energy hatch tiers.§r")); + } + } + + if (mLink == null) { + data.add("An entangled singularity must be present in the controller slot"); + } else { + if (!mLink.isFormed()) { + data.add("Wormhole status: §cNo destination§f"); + } else { + if (mLink.mWormholeEnergy > 0) { + if (mLink.isActive()) { + data.add("Wormhole status: §bActive§f"); + } else { + data.add("Wormhole status: §6Decaying§f"); + } + } else { + boolean anyTransferable = false; + + for (int i = 0; i < MAX_HATCHES; i++) { + if (!HATCH_MASK[i]) continue; + + if (getTransferable(i) > 0) { + anyTransferable = true; + break; + } + } + + if (anyTransferable) { + data.add("Wormhole status: §7Inactive§f"); + } else { + data.add("Wormhole status: §7No energy in input hatches§f"); + } + } + + double radius = Math.sqrt(mLink.mWormholeEnergy / 20.0 / 32.0); + data.add(String.format("Wormhole diameter: §b%,d§r ångström", (long) (radius * 2))); + + data.add(String.format("Optimal transfer speed: §b%,.0f§r EU/t", mLink.mWormholeEnergy / 20)); + } + } + + for (int i = 0; i < MAX_HATCHES; i++) { + if (!HATCH_MASK[i]) continue; + + var inputHatch = mSendHatches[i]; + var outputHatch = mReceiveHatches[i]; + + // spotless:off + if(inputHatch != null) { + data.add(String.format( + "%s hatch (%,dA/t %s) transferred §b%,d§f EU (equivalent to %,dA/t) with an efficiency of %.3f%% in the last second", + HATCH_NAMES[i], + inputHatch.Amperes, + VN[inputHatch.mTier], + mLink != null ? mLink.mSendAmounts[i] : 0, + mLink != null ? mLink.mSendAmounts[i] / 20 / V[inputHatch.mTier] : 0, + mLink != null && mLink.mSendAmounts[i] > 0 ? ((double)mLink.mReceiveAmounts[OPPOSITES[i]]) / ((double)mLink.mSendAmounts[i]) * 100 : 0 + )); + } else if(outputHatch != null) { + data.add(String.format( + "%s hatch (%,dA/t %s) received §b%,d§f EU (equivalent to %,dA/t) with an efficiency of %.3f%% in the last second", + HATCH_NAMES[i], + outputHatch.Amperes, + VN[outputHatch.mTier], + mLink != null ? mLink.mReceiveAmounts[i] : 0, + mLink != null ? mLink.mReceiveAmounts[i] / 20 / V[outputHatch.mTier] : 0, + mLink != null && mLink.mSendAmounts[OPPOSITES[i]] > 0 ? ((double)mLink.mReceiveAmounts[i]) / ((double)mLink.mSendAmounts[OPPOSITES[i]]) * 100 : 0 + )); + } else { + data.add(String.format("%s hatch is not present", HATCH_NAMES[i])); + } + // spotless:on + } + + data.add("-----------------------"); + + return data.toArray(new String[data.size()]); + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + + screenElements.widgets(TextWidget.dynamicString(() -> { + if (mLink == null) { + return String.format("§7Missing Entangled Singularity§f"); + } + + if (!mLink.isFormed()) { + return String.format("§7Wormhole status: §cNo destination§f"); + } + + if (mLink.mWormholeEnergy > 0 && !mLink.isActive()) { + return String.format("§7Wormhole status: §6Decaying§f"); + } + + if (mLink.mWormholeEnergy > 0) { + return String.format("§7Wormhole status: §bActive§f"); + } + + return String.format("§7Wormhole status: Inactive§f"); + }), + + TextWidget.dynamicString(() -> { + if (mLink == null) { + return ""; + } + + // LV power = 1 angstrom in diameter + double radius = Math.sqrt(mLink.mWormholeEnergy / 20.0 / 32.0); + + return String.format("§7Wormhole diameter: §b%,d§7 ŧf", (long) (radius * 2)); + }) + .setEnabled(w -> mWormholeEnergy_UI > 0), + + TextWidget.dynamicString(() -> { + if (mLink == null) { + return ""; + } + + if (mLink.mWormholeEnergy >= 1e10) { + return String.format("§7Max I/O per hatch: §b%3.3e§7 EU/t§f", mLink.mWormholeEnergy / 20); + } else { + return String.format("§7Max I/O per hatch: §b%,d§7 EU/t§f", (long) (mLink.mWormholeEnergy / 20)); + } + }) + .setEnabled(w -> mWormholeEnergy_UI > 0), + + new FakeSyncWidget.DoubleSyncer( + () -> mLink != null ? mLink.mWormholeEnergy : 0, + val -> mWormholeEnergy_UI = val)); + } + + // #endregion + +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_BlackHoleCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_BlackHoleCompressor.java deleted file mode 100644 index 0b36d35cf8..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_BlackHoleCompressor.java +++ /dev/null @@ -1,539 +0,0 @@ -package gregtech.common.tileentities.machines.multi.compressor; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.GT_Values.AuthorFourIsTheNumber; -import static gregtech.api.enums.GT_Values.Ollie; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.stream.Stream; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.metadata.CompressionTierKey; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Casings10; -import gregtech.common.items.GT_MetaGenerated_Item_01; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_BlackHoleCompressor - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - // spotless:off - transpose(new String[][]{ - {" "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," CC CC "," CCC CCC "," CCC CCC "," CCCCC CCCCC "," CCCC CCCC "," "," "," "," CCCC CCCC "," CCCCC CCCCC "," CCC CCC "," CCC CCC "," CC CC "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "}, - {" "," "," "," "," "," "," "," CC CC "," CC CC "," CCC CCC "," CCC CCC "," CCCC CCCC "," CCCCC CCCCC "," CCCCCC CCCCCC "," CCCCCCC CCCCCCC "," CCCCCC CCCCCC "," "," "," "," CCCCCC CCCCCC "," CCCCCCC CCCCCCC "," CCCCCC CCCCCC "," CCCCC CCCCC "," CCCC CCCC "," CCC CCC "," CCC CCC "," CC CC "," CC CC "," "," "," "," "," "," "," "}, - {" "," "," "," "," "," "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCB BCCCCCCB "," CCCCCCCB BCCCCCCC "," CCCCCCB BBB BCCCCCC "," BCCCCCB B B BCCCCCB "," BCCCCCB B B BCCCCCB "," BCCCCCB B B BCCCCCB "," CCCCCCB BBB BCCCCCC "," CCCCCCCB BCCCCCCC "," BCCCCCCB BCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," "," "," "," "," "," "}, - {" "," "," "," "," "," CC CC "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCBCCCCCBCCCCCCB "," CCCCCCCCBCCCCCCCBCCCCCCCC "," CCCCCCCBCCCCCCCCCBCCCCCCC "," BCCCCCBCCCCCCCCCBCCCCCB "," BCCCCCBCCCCCCCCCBCCCCCB "," BCCCCCBCCCCCCCCCBCCCCCB "," CCCCCCCBCCCCCCCCCBCCCCCCC "," CCCCCCCCBCCCCCCCBCCCCCCCC "," BCCCCCCBCCCCCBCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," CC CC "," "," "," "," "," "}, - {" "," "," "," "," CC CC "," CCDDDCC "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCB BCCCCCCB "," CCCCCCCCCB BCCCCCCCCC "," CCCCCCCCB BCCCCCCCC "," DBCCCCCB BCCCCCBD "," DBCCCCCB BCCCCCBD "," DBCCCCCB BCCCCCBD "," CCCCCCCCB BCCCCCCCC "," CCCCCCCCCB BCCCCCCCCC "," BCCCCCCB BCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," CCDDDCC "," CC CC "," "," "," "," "}, - {" "," "," "," CC CC "," CC CC "," CC CC "," "," "," "," BB BB "," BBBB CCCCC BBBB "," BBBBCC CCBBBB "," BBC CBB "," C C "," CCC C C CCC "," CCC C C CCC "," C C "," C C "," C C "," CCC C C CCC "," CCC C C CCC "," C C "," BBC CBB "," BBBBCC CCBBBB "," BBBB CCCCC BBBB "," BB BB "," "," "," "," CC CC "," CC CC "," CC CC "," "," "," "}, - {" "," "," "," CC CC "," CCDDDCC "," "," "," "," "," "," "," BBB CCCCC BBB "," BBCC CCBB "," BC CB "," CC C C CC "," CC C C CC "," D C C D "," D C C D "," D C C D "," CC C C CC "," CC C C CC "," BC CB "," BBCC CCBB "," BBB CCCCC BBB "," "," "," "," "," "," "," CCDDDCC "," CC CC "," "," "," "}, - {" "," "," CC CC "," CC CC "," CC CC "," "," "," "," "," "," "," "," BBBCCCCCBBB "," BBC CBB "," CCC BC CB CCC "," CCC C C CCC "," C C "," C C "," C C "," CCC C C CCC "," CCC BC CB CCC "," BBC CBB "," BBBCCCCCBBB "," "," "," "," "," "," "," "," CC CC "," CC CC "," CC CC "," "," "}, - {" "," "," CC CC "," CCDDDCC "," "," "," "," "," "," "," "," "," "," BBCCCCCBB "," CC BC CB CC "," CC C C CC "," D C C D "," D C C D "," D C C D "," CC C C CC "," CC BC CB CC "," BBCCCCCBB "," "," "," "," "," "," "," "," "," "," CCDDDCC "," CC CC "," "," "}, - {" "," "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "," BCCCCCB "," CC BC CB CC "," CC C C CC "," C C "," C C "," C C "," CC C C CC "," CC BC CB CC "," BCCCCCB "," "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," "," "}, - {" "," CC CC "," CCDDDCC "," CC CC "," "," "," "," "," "," "," "," "," "," "," CCC BBCCCBB CCC "," CCC BC CB CCC "," D C C D "," D C C D "," D C C D "," CCC BC CB CCC "," CCC BBCCCBB CCC "," "," "," "," "," "," "," "," "," "," "," CC CC "," CCDDDCC "," CC CC "," "}, - {" "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "," "," "," CC BCCCB CC "," CC BC CB CC "," C C "," C C "," C C "," CC BC CB CC "," CC BCCCB CC "," "," "," "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," "}, - {" "," CCDDDCC "," CC CC "," "," "," "," "," "," "," "," "," "," "," "," CC BBB CC "," CC BCCCB CC "," D BCCCCCB D "," D BCCCCCB D "," D BCCCCCB D "," CC BCCCB CC "," CC BBB CC "," "," "," "," "," "," "," "," "," "," "," "," CC CC "," CCDDDCC "," "}, - {" "," CC CC "," CCBBBCC "," CCC "," "," "," "," "," "," "," "," "," "," "," CC CC "," CC BBB CC "," BC B B CB "," BC B B CB "," BC B B CB "," CC BBB CC "," CC CC "," "," "," "," "," "," "," "," "," "," "," CCC "," CCBBBCC "," CC CC "," "}, - {" CCDDDCC "," CC CC "," CBBBBBC "," C C "," "," "," "," "," "," "," "," "," "," ","CCC CCC","CCBC CBCC","D B B D","D B B D","D B B D","CCBC CBCC","CCC CCC"," "," "," "," "," "," "," "," "," "," "," C C "," CBBBBBC "," CC CC "," CCDDDCC "}, - {" CC CC "," CCCCCCC "," BBBBBBB "," C ABA C "," ABA "," A "," A "," "," "," "," "," "," "," ","CCBC CBCC","CCB BCC"," CBAA AABC "," CBBBAA AABBBC "," CBAA AABC ","CCB BCC","CCBC CBCC"," "," "," "," "," "," "," "," A "," A "," ABA "," C ABA C "," BBBBBBB "," CCCCCCC "," CC CC "}, - {" CC CC "," CCCECCC "," BBBBBBB "," C BBB C "," BBB "," ABA "," ABA "," B "," B "," "," "," "," "," ","CCBC CBCC","CCB BCC"," CBBBAA AABBBC "," EBBBBBBB BBBBBBBE "," CBBBAA AABBBC ","CCB BCC","CCBC CBCC"," "," "," "," "," "," B "," B "," ABA "," ABA "," BBB "," C BBB C "," BBBBBBB "," CCCECCC "," CC CC "}, - {" CC CC "," CCCCCCC "," BBBBBBB "," C ABA C "," ABA "," A "," A "," "," "," "," "," "," "," ","CCBC CBCC","CCB BCC"," CBAA AABC "," CBBBAA AABBBC "," CBAA AABC ","CCB BCC","CCBC CBCC"," "," "," "," "," "," "," "," A "," A "," ABA "," C ABA C "," BBBBBBB "," CCCCCCC "," CC CC "}, - {" CCDDDCC "," CC CC "," CBBBBBC "," C C "," "," "," "," "," "," "," "," "," "," ","CCC CCC","CCBC CBCC","D B B D","D B B D","D B B D","CCBC CBCC","CCC CCC"," "," "," "," "," "," "," "," "," "," "," C C "," CBBBBBC "," CC CC "," CCDDDCC "}, - {" "," CC CC "," CCBBBCC "," CCC "," "," "," "," "," "," "," "," "," "," "," CC CC "," CC BBB CC "," BC B B CB "," BC B B CB "," BC B B CB "," CC BBB CC "," CC CC "," "," "," "," "," "," "," "," "," "," "," CCC "," CCBBBCC "," CC CC "," "}, - {" "," CCDDDCC "," CC CC "," "," "," "," "," "," "," "," "," "," "," "," CC BBB CC "," CC BCCCB CC "," D BCCCCCB D "," D BCCCCCB D "," D BCCCCCB D "," CC BCCCB CC "," CC BBB CC "," "," "," "," "," "," "," "," "," "," "," "," CC CC "," CCDDDCC "," "}, - {" "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "," "," "," CC BCCCB CC "," CC BC CB CC "," C C "," C C "," C C "," CC BC CB CC "," CC BCCCB CC "," "," "," "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," "}, - {" "," CC CC "," CCDDDCC "," CC CC "," "," "," "," "," "," "," "," "," "," "," CCC BBCCCBB CCC "," CCC BC CB CCC "," D C C D "," D C C D "," D C C D "," CCC BC CB CCC "," CCC BBCCCBB CCC "," "," "," "," "," "," "," "," "," "," "," CC CC "," CCDDDCC "," CC CC "," "}, - {" "," "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "," BCCCCCB "," CC BC CB CC "," CC C C CC "," C C "," C C "," C C "," CC C C CC "," CC BC CB CC "," BCCCCCB "," "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," "," "}, - {" "," "," CC CC "," CCDDDCC "," "," "," "," "," "," "," "," "," "," BBCCCCCBB "," CC BC CB CC "," CC C C CC "," D C C D "," D C C D "," D C C D "," CC C C CC "," CC BC CB CC "," BBCCCCCBB "," "," "," "," "," "," "," "," "," "," CCDDDCC "," CC CC "," "," "}, - {" "," "," CC CC "," CC CC "," CC CC "," "," "," "," "," "," "," "," BBBCCCCCBBB "," BBC CBB "," CCC BC CB CCC "," CCC C C CCC "," C C "," C C "," C C "," CCC C C CCC "," CCC BC CB CCC "," BBC CBB "," BBBCCCCCBBB "," "," "," "," "," "," "," "," CC CC "," CC CC "," CC CC "," "," "}, - {" "," "," "," CC CC "," CCDDDCC "," "," "," "," "," "," "," BBB CCCCC BBB "," BBCC CCBB "," BC CB "," CC C C CC "," CC C C CC "," D C C D "," D C C D "," D C C D "," CC C C CC "," CC C C CC "," BC CB "," BBCC CCBB "," BBB CCCCC BBB "," "," "," "," "," "," "," CCDDDCC "," CC CC "," "," "," "}, - {" "," "," "," CC CC "," CC CC "," CC CC "," "," "," "," BB BB "," BBBB CC~CC BBBB "," BBBBCC CCBBBB "," BBC CBB "," C C "," CCC C C CCC "," CCC C C CCC "," C C "," C C "," C C "," CCC C C CCC "," CCC C C CCC "," C C "," BBC CBB "," BBBBCC CCBBBB "," BBBB CCCCC BBBB "," BB BB "," "," "," "," CC CC "," CC CC "," CC CC "," "," "," "}, - {" "," "," "," "," CC CC "," CCDDDCC "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCB BCCCCCCB "," CCCCCCCCCB BCCCCCCCCC "," CCCCCCCCB BCCCCCCCC "," DBCCCCCB BCCCCCBD "," DBCCCCCB BCCCCCBD "," DBCCCCCB BCCCCCBD "," CCCCCCCCB BCCCCCCCC "," CCCCCCCCCB BCCCCCCCCC "," BCCCCCCB BCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," CCDDDCC "," CC CC "," "," "," "," "}, - {" "," "," "," "," "," CC CC "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCBCCCCCBCCCCCCB "," CCCCCCCCBCCCCCCCBCCCCCCCC "," CCCCCCCBCCCCCCCCCBCCCCCCC "," BCCCCCBCCCCCCCCCBCCCCCB "," BCCCCCBCCCCCCCCCBCCCCCB "," BCCCCCBCCCCCCCCCBCCCCCB "," CCCCCCCBCCCCCCCCCBCCCCCCC "," CCCCCCCCBCCCCCCCBCCCCCCCC "," BCCCCCCBCCCCCBCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," CC CC "," "," "," "," "," "}, - {" "," "," "," "," "," "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCB BCCCCCCB "," CCCCCCCB BCCCCCCC "," CCCCCCB BBB BCCCCCC "," BCCCCCB B B BCCCCCB "," BCCCCCB B B BCCCCCB "," BCCCCCB B B BCCCCCB "," CCCCCCB BBB BCCCCCC "," CCCCCCCB BCCCCCCC "," BCCCCCCB BCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," "," "," "," "," "," "}, - {" "," "," "," "," "," "," "," CC CC "," CC CC "," CCC CCC "," CCC CCC "," CCCC CCCC "," CCCCC CCCCC "," CCCCCC CCCCCC "," CCCCCCC CCCCCCC "," CCCCCC CCCCCC "," "," "," "," CCCCCC CCCCCC "," CCCCCCC CCCCCCC "," CCCCCC CCCCCC "," CCCCC CCCCC "," CCCC CCCC "," CCC CCC "," CCC CCC "," CC CC "," CC CC "," "," "," "," "," "," "," "}, - {" "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," CC CC "," CCC CCC "," CCC CCC "," CCCCC CCCCC "," CCCC CCCC "," "," "," "," CCCC CCCC "," CCCCC CCCCC "," CCC CCC "," CCC CCC "," CC CC "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "} - })) - //spotless:on - .addElement('A', ofBlock(GregTech_API.sBlockGlass1, 4)) - .addElement( - 'B', - buildHatchAdder(GT_MetaTileEntity_BlackHoleCompressor.class).atLeast(Maintenance, Energy) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(12)) - .dot(2) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_BlackHoleCompressor::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings10, 12)))) - .addElement('C', ofBlock(GregTech_API.sBlockCasings10, 11)) - .addElement('D', ofFrame(Materials.NaquadahAlloy)) - .addElement( - 'E', - buildHatchAdder(GT_MetaTileEntity_BlackHoleCompressor.class).atLeast(InputBus, OutputBus, InputHatch) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(11)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_BlackHoleCompressor::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings10, 11)))) - - .build(); - - private boolean blackholeOn = false; - private int catalyzingCounter = 0; - private float blackHoleStability = 100; - - private final FluidStack blackholeCatalyzingCost = (MaterialsUEVplus.SpaceTime).getMolten(1); - private int catalyzingCostModifier = 1; - - public GT_MetaTileEntity_BlackHoleCompressor(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_BlackHoleCompressor(String aName) { - super(aName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_BlackHoleCompressor(this.mName); - } - - @Override - public boolean supportsMachineModeSwitch() { - return true; - } - - @Override - public void setMachineModeIcons() { - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_COMPRESSING); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_SINGULARITY); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - setMachineMode(nextMachineMode()); - PlayerUtils.messagePlayer( - aPlayer, - String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); - } - - @Override - public String getMachineModeName() { - return StatCollector.translateToLocal("GT5U.COMPRESSION_TIER.mode." + machineMode); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - ITexture[] rTexture; - if (side == aFacing) { - if (aActive) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 11)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 11)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 11)) }; - } - return rTexture; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Compressor/Advanced Neutronium Compressor") - .addInfo("Controller Block for the Semi-Stable Black Hole Containment Field") - .addInfo(EnumChatFormatting.LIGHT_PURPLE + "Uses the immense power of the event horizon to compress things") - .addInfo("No longer requires heat management to perform perfect compression") - .addInfo("Can create advanced singularities!") - .addSeparator() - .addInfo( - "Insert a " + EnumChatFormatting.WHITE - + "Black Hole Activation Catalyst" - + EnumChatFormatting.GRAY - + " to open a black hole") - .addInfo( - "The black hole will begin its life at " + EnumChatFormatting.RED - + "100%" - + EnumChatFormatting.GRAY - + " stability and slowly decay") - .addSeparator() - .addInfo("Natural decay takes " + EnumChatFormatting.RED + "100" + EnumChatFormatting.GRAY + " seconds") - .addInfo("Running recipes in the machine will slow the decay by " + EnumChatFormatting.RED + "25%") - .addInfo( - "The decay can be " + EnumChatFormatting.BOLD - + "halted" - + EnumChatFormatting.RESET - + EnumChatFormatting.GRAY - + " by inserting spacetime") - .addInfo( - "Every " + EnumChatFormatting.RED - + "30" - + EnumChatFormatting.GRAY - + " seconds saved by spacetime insertion will " - + EnumChatFormatting.RED - + "double" - + EnumChatFormatting.GRAY - + " the cost per second!") - .addInfo("Once the black hole becomes unstable, it will void all inputs for recipes which require it") - .addInfo( - "Insert a " + EnumChatFormatting.WHITE - + "Black Hole Deactivation Catalyst" - + EnumChatFormatting.GRAY - + " to close the black hole") - .addSeparator() - .addInfo( - "Recipes not utilizing the black hole have their lengths " + EnumChatFormatting.RED - + "doubled" - + EnumChatFormatting.GRAY - + " if it becomes unstable") - .addInfo("400% faster than singleblock machines of the same voltage when black hole is open") - .addInfo("Only uses 70% of the EU/t normally required") - .addInfo("Gains 8 parallels per voltage tier") - .addInfo( - "Parallels are " + EnumChatFormatting.RED - + "doubled" - + EnumChatFormatting.GRAY - + " when stability is BELOW " - + EnumChatFormatting.RED - + "50%") - .addInfo( - "Parallels are " + EnumChatFormatting.RED - + "quadrupled" - + EnumChatFormatting.GRAY - + " when stability is BELOW " - + EnumChatFormatting.RED - + "20%") - .addInfo(AuthorFourIsTheNumber + EnumChatFormatting.RESET + " & " + Ollie) - .addSeparator() - .beginStructureBlock(35, 33, 35, false) - .addCasingInfoMin("Background Radiation Absorbent Casing", 985, false) - .addCasingInfoExactly("Extreme Density Space-Bending Casing", 3667, false) - .addCasingInfoExactly("Hawking Radiation Realignment Focus", 64, false) - .addCasingInfoExactly("Naquadah Alloy Frame Box", 144, false) - .addInputBus("Behind Laser", 1) - .addOutputBus("Behind Laser", 1) - .addInputHatch("Behind Laser", 1) - .addEnergyHatch("Any Radiation Absorbent Casing", 2) - .addMaintenanceHatch("Any Radiation Absorbent Casing", 2) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 17, 27, 10); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 17, 27, 10, elementBudget, env, false, true); - } - - private int mCasingAmount; - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasingAmount = 0; - mEnergyHatches.clear(); - - if (!checkPiece(STRUCTURE_PIECE_MAIN, 17, 27, 10)) return false; - if (mCasingAmount < 0) return false; - - return true; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - aNBT.setInteger("catalyzingCostModifier", catalyzingCostModifier); - aNBT.setInteger("catalyzingCounter", catalyzingCounter); - aNBT.setBoolean("blackholeOn", blackholeOn); - aNBT.setFloat("blackholeStability", blackHoleStability); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (aNBT.hasKey("catalyzingCounter")) catalyzingCostModifier = aNBT.getInteger("catalyzingCounter"); - if (aNBT.hasKey("catalyzingCostModifier")) catalyzingCostModifier = aNBT.getInteger("catalyzingCostModifier"); - if (aNBT.hasKey("blackholeOn")) blackholeOn = aNBT.getBoolean("blackholeOn"); - if (aNBT.hasKey("blackholeStability")) blackHoleStability = aNBT.getFloat("blackholeStability"); - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Utility.roundUpVoltage(this.getMaxInputVoltage())); - logic.setAvailableAmperage(1L); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setBoolean("blackholeOn", blackholeOn); - tag.setFloat("blackHoleStability", blackHoleStability); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - if (tag.getBoolean("blackholeOn")) { - if (tag.getFloat("blackHoleStability") > 0) { - currentTip.add(EnumChatFormatting.DARK_PURPLE + "Black Hole Active"); - currentTip.add( - EnumChatFormatting.DARK_PURPLE + " Stability: " - + EnumChatFormatting.BOLD - + Math.round(tag.getFloat("blackHoleStability")) - + "%"); - } else { - currentTip.add(EnumChatFormatting.RED + "BLACK HOLE UNSTABLE"); - } - } else currentTip.add(EnumChatFormatting.DARK_PURPLE + "Black Hole Offline"); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected Stream findRecipeMatches(@Nullable RecipeMap map) { - - // Loop through all items and look for the Activation and Deactivation Catalysts - // Deactivation resets stability to 100 and catalyzing cost to 1 - for (ItemStack inputItem : inputItems) { - if (inputItem.getItem() instanceof GT_MetaGenerated_Item_01) { - if (inputItem.getItemDamage() == 32418 && !blackholeOn) { - inputItem.stackSize -= 1; - blackholeOn = true; - break; - } else if (inputItem.getItemDamage() == 32419 && blackholeOn) { - inputItem.stackSize -= 1; - blackholeOn = false; - blackHoleStability = 100; - catalyzingCostModifier = 1; - break; - } - } - } - return super.findRecipeMatches(map); - } - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - - // Default speed bonus - setSpeedBonus(1F); - - // If recipe needs a black hole and one is not open, just wait - // If the recipe doesn't require black hole, incur a 0.5x speed penalty - // If recipe doesn't require black hole but one is open, give 5x speed bonus - if (recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 1) > 0) { - if (!blackholeOn) return CheckRecipeResultRegistry.NO_BLACK_HOLE; - } else { - if (blackHoleStability <= 0) setSpeedBonus(5F); - else if (blackholeOn) setSpeedBonus(0.2F); - } - return super.validateRecipe(recipe); - } - - @Nonnull - protected CheckRecipeResult onRecipeStart(@Nonnull GT_Recipe recipe) { - // If recipe needs a black hole and one is active but unstable, continuously void items - if (blackHoleStability <= 0 && recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 1) > 0) { - return CheckRecipeResultRegistry.UNSTABLE_BLACK_HOLE; - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - }.setMaxParallelSupplier(this::getMaxParallelRecipes) - .setEuModifier(0.7F); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (aTick % 20 == 0) { - if (blackholeOn && blackHoleStability >= 0) { - float stabilityDecrease = 1F; - // If the machine is running, reduce stability loss by 25% - if (this.maxProgresstime() != 0) { - stabilityDecrease = 0.75F; - } - // Search all hatches for catalyst fluid - // If found enough, drain it and reduce stability loss to 0 - // Every 30 drains, double the cost - FluidStack totalCost = new FluidStack(blackholeCatalyzingCost, catalyzingCostModifier); - for (GT_MetaTileEntity_Hatch_Input hatch : mInputHatches) { - if (drain(hatch, totalCost, false)) { - drain(hatch, totalCost, true); - catalyzingCounter += 1; - stabilityDecrease = 0; - if (catalyzingCounter >= 30) { - catalyzingCostModifier *= 2; - catalyzingCounter = 0; - } - } - } - if (blackHoleStability >= 0) blackHoleStability -= stabilityDecrease; - else blackHoleStability = 0; - } - } - } - - public int getMaxParallelRecipes() { - int parallels = (8 * GT_Utility.getTier(this.getMaxInputVoltage())); - if (blackHoleStability < 60) { - parallels *= 2; - if (blackHoleStability < 20) parallels *= 2; - } - return parallels; - } - - private static final int MACHINEMODE_COMPRESSOR = 0; - private static final int MACHINEMODE_BLACKHOLE = 1; - - @Override - public RecipeMap getRecipeMap() { - return (machineMode == MACHINEMODE_COMPRESSOR) ? RecipeMaps.compressorRecipes - : RecipeMaps.neutroniumCompressorRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(RecipeMaps.compressorRecipes, RecipeMaps.neutroniumCompressorRecipes); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_HIPCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_HIPCompressor.java deleted file mode 100644 index bb79cf692b..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_HIPCompressor.java +++ /dev/null @@ -1,525 +0,0 @@ -package gregtech.common.tileentities.machines.multi.compressor; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.GT_Values.AuthorFourIsTheNumber; -import static gregtech.api.enums.GT_Values.Ollie; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_COOLING; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_COOLING_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.util.MathUtils; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.metadata.CompressionTierKey; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.api.util.shutdown.SimpleShutDownReason; -import gregtech.common.blocks.GT_Block_Casings10; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_HIPCompressor extends - GT_MetaTileEntity_ExtendedPowerMultiBlockBase implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - // spotless:off - transpose(new String[][]{ - {" "," "," "," CCCCCC DDDDDD "," "," "," "}, - {" "," "," "," C C D D "," "," "," "}, - {" "," HHH "," HHHHH "," C HHHHH D "," HHHHH "," HHH "," "}, - {" BBB "," BBBBB "," BBBBBBB "," C BBBBBBB D "," BBBBBBB "," BBBBB "," BBB "}, - {" HHH "," B B "," BF FB "," C BF FB D "," BF FB "," B B "," HHH "}, - {" HAH "," B B "," GF FG "," C GF FG D "," GF FG "," B B "," HAH "}, - {" HAH "," B B "," E GF FG E ","EEE GF FG EEE"," E GF FG E "," B B "," HAH "}, - {" HAH "," B B "," A GF FG A ","A A GF FG A A"," A GF FG A "," B B "," HAH "}, - {" HHH "," B B "," A BF FB A ","A A BF FB A A"," A BF FB A "," B B "," HHH "}, - {" B~B "," BBBBB "," E BBBBBBB E ","EEE BBBBBBB EEE"," E BBBBBBB E "," BBBBB "," BBB "} - })) - //spotless:on - .addElement('A', Glasses.chainAllGlasses()) - .addElement( - 'B', - buildHatchAdder(GT_MetaTileEntity_HIPCompressor.class) - .atLeast(Maintenance, Energy, SpecialHatchElement.HeatSensor) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(4)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_HIPCompressor::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings10, 4)))) - .addElement('C', ofBlock(GregTech_API.sBlockCasings10, 9)) - .addElement('D', ofBlock(GregTech_API.sBlockCasings10, 10)) - .addElement('E', ofBlock(GregTech_API.sBlockCasings4, 1)) - .addElement( - 'F', - ofCoil(GT_MetaTileEntity_HIPCompressor::setCoilLevel, GT_MetaTileEntity_HIPCompressor::getCoilLevel)) - .addElement( - 'G', - buildHatchAdder(GT_MetaTileEntity_HIPCompressor.class).atLeast(InputBus, OutputBus) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(5)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_HIPCompressor::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings10, 5)))) - .addElement('H', ofBlock(GregTech_API.sBlockCasings10, 5)) - .build(); - - private final ArrayList sensorHatches = new ArrayList<>(); - - private HeatingCoilLevel heatLevel; - private int coilTier = 0; - - private float heat = 0; - private boolean cooling = false; - - public GT_MetaTileEntity_HIPCompressor(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_HIPCompressor(String aName) { - super(aName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_HIPCompressor(this.mName); - } - - @Override - public void onValueUpdate(byte aValue) { - boolean oCooling = cooling; - cooling = (aValue & 1) == 1; - if (oCooling != cooling) getBaseMetaTileEntity().issueTextureUpdate(); - } - - @Override - public byte getUpdateData() { - return (byte) (cooling ? 1 : 0); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - ITexture[] rTexture; - if (side == aFacing) { - if (cooling) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 4)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_COOLING) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_COOLING_GLOW) - .extFacing() - .glow() - .build() }; - } else if (aActive) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 4)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 4)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 4)) }; - } - return rTexture; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Compressor") - .addInfo("Controller Block for the Hot Isostatic Pressurization Unit") - .addInfo("HIP Unit heats up while running") - .addInfo( - "When it reaches maximum heat, it becomes " + EnumChatFormatting.DARK_RED - + EnumChatFormatting.BOLD - + "overheated!") - .addInfo("This is only resolved by letting the machine fully cool down") - .addInfo( - "When " + EnumChatFormatting.DARK_RED - + "overheated" - + EnumChatFormatting.GRAY - + ", recipes are slowed down drastically") - .addSeparator() - .addInfo( - "Some recipes " + EnumChatFormatting.BOLD - + "require" - + EnumChatFormatting.RESET - + EnumChatFormatting.GRAY - + " HIP") - .addInfo( - "If the machine " + EnumChatFormatting.DARK_RED - + "overheats" - + EnumChatFormatting.GRAY - + " during these recipes, recipe will be voided!") - .addInfo("Read the current heat using Heat Sensor Hatches") - .addSeparator() - .addInfo("More advanced coils allow better heat control - the unit will take longer to overheat") - .addInfo( - "Unit heats by " + EnumChatFormatting.GREEN - + "(5% x 0.90 ^ (Coil Tier - 1))" - + EnumChatFormatting.GRAY - + " every second while running") - .addInfo( - "Unit cools by " + EnumChatFormatting.GREEN - + "2%" - + EnumChatFormatting.GRAY - + " every second while not running") - .addSeparator() - .addInfo( - "250% " + EnumChatFormatting.RED - + "faster" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.BLUE - + "slower" - + EnumChatFormatting.GRAY - + " than singleblock machines of the same voltage") - .addInfo( - "Uses " + EnumChatFormatting.RED - + "75%" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.BLUE - + "110%" - + EnumChatFormatting.GRAY - + " the EU/t normally required") - .addInfo( - "Gains " + EnumChatFormatting.RED - + "4" - + EnumChatFormatting.GRAY - + "/" - + EnumChatFormatting.BLUE - + "1" - + EnumChatFormatting.GRAY - + " parallels per voltage tier") - .addInfo(AuthorFourIsTheNumber + EnumChatFormatting.RESET + " & " + Ollie) - .addSeparator() - .beginStructureBlock(7, 5, 7, true) - .addController("Front Center") - .addCasingInfoMin("Electric Compressor Casing", 95, false) - .addCasingInfoMin("Compressor Pipe Casing", 45, false) - .addCasingInfoExactly("Coolant Duct", 12, false) - .addCasingInfoExactly("Heating Duct", 12, false) - .addCasingInfoExactly("EV+ Glass", 22, false) - .addCasingInfoExactly("Clean Stainless Steel Machine Casing", 20, false) - .addCasingInfoExactly("Coil", 30, true) - .addInputBus("Pipe Casings on Side", 2) - .addOutputBus("Pipe Casings on Side", 2) - .addEnergyHatch("Any Electric Compressor Casing", 1) - .addMaintenanceHatch("Any Electric Compressor Casing", 1) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 7, 9, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 7, 9, 0, elementBudget, env, false, true); - } - - private int mCasingAmount; - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - setCoilLevel(HeatingCoilLevel.None); - mCasingAmount = 0; - return checkPiece(STRUCTURE_PIECE_MAIN, 7, 9, 0) && mCasingAmount >= 95; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Utility.roundUpVoltage(this.getMaxInputVoltage())); - logic.setAvailableAmperage(1L); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setFloat("heat", heat); - aNBT.setBoolean("cooling", cooling); - aNBT.setInteger("coilTier", coilTier); - aNBT.setBoolean("doingHIP", doingHIP); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - if (aNBT.hasKey("heat")) heat = aNBT.getFloat("heat"); - if (aNBT.hasKey("cooling")) cooling = aNBT.getBoolean("cooling"); - if (aNBT.hasKey("coilTier")) coilTier = aNBT.getInteger("coilTier"); - if (aNBT.hasKey("doingHIP")) doingHIP = aNBT.getBoolean("doingHIP"); - super.loadNBTData(aNBT); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("heat", Math.round(heat)); - tag.setBoolean("cooling", cooling); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - if (tag.getBoolean("cooling")) currentTip.add( - "HIP Heat: " + EnumChatFormatting.RED - + EnumChatFormatting.BOLD - + tag.getInteger("heat") - + "%" - + EnumChatFormatting.RESET); - else currentTip.add( - "HIP Heat: " + EnumChatFormatting.AQUA - + EnumChatFormatting.BOLD - + tag.getInteger("heat") - + "%" - + EnumChatFormatting.RESET); - } - - private boolean doingHIP = false; - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - doingHIP = false; - setSpeedBonus(1F / 1.25F); - setEuModifier(0.75F); - - if (cooling) { - setSpeedBonus(2.5F); - setEuModifier(1.1F); - } - - if (recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 1) > 0) doingHIP = true; - return super.validateRecipe(recipe); - } - }.setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (cooling && doingHIP) { - stopMachine(SimpleShutDownReason.ofCritical("overheated")); - doingHIP = false; - } - return super.onRunningTick(aStack); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (aTick % 20 == 0) { - - // Default to cooling by 2% - float heatMod = -2; - - // If the machine is running, heat by 5% x 0.90 ^ (Coil Tier) - // Cupronickel is 0, so base will be 5% increase - if (this.maxProgresstime() != 0) { - heatMod = (float) (5 * Math.pow(0.9, coilTier)); - } - - heat = MathUtils.clamp(heat + heatMod, 0, 100); - - if ((cooling && heat <= 0) || (!cooling && heat >= 100)) { - cooling = !cooling; - } - } - - // Update all the sensors - for (GT_MetaTileEntity_HeatSensor hatch : sensorHatches) { - hatch.updateRedstoneOutput(heat); - } - - } - - public int getMaxParallelRecipes() { - return cooling ? GT_Utility.getTier(this.getMaxInputVoltage()) - : (4 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.compressorRecipes; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } - - public HeatingCoilLevel getCoilLevel() { - return heatLevel; - } - - public void setCoilLevel(HeatingCoilLevel aCoilLevel) { - heatLevel = aCoilLevel; - coilTier = aCoilLevel.getTier(); - } - - public boolean addSensorHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_HeatSensor sensor) { - sensor.updateTexture(aBaseCasingIndex); - return this.sensorHatches.add(sensor); - } - return false; - } - - private enum SpecialHatchElement implements IHatchElement { - - HeatSensor(GT_MetaTileEntity_HIPCompressor::addSensorHatchToMachineList, GT_MetaTileEntity_HeatSensor.class) { - - @Override - public long count(GT_MetaTileEntity_HIPCompressor gtMetaTileEntityHIPCompressor) { - return gtMetaTileEntityHIPCompressor.sensorHatches.size(); - } - }; - - private final List> mteClasses; - private final IGT_HatchAdder adder; - - @SafeVarargs - SpecialHatchElement(IGT_HatchAdder adder, - Class... mteClasses) { - this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); - this.adder = adder; - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - public IGT_HatchAdder adder() { - return adder; - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_HeatSensor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_HeatSensor.java deleted file mode 100644 index e4721428fc..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_HeatSensor.java +++ /dev/null @@ -1,188 +0,0 @@ -package gregtech.common.tileentities.machines.multi.compressor; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.common.gui.modularui.widget.CoverCycleButtonWidget; - -public class GT_MetaTileEntity_HeatSensor extends GT_MetaTileEntity_Hatch { - - protected float threshold = 0; - protected boolean inverted = false; - private boolean isOn = false; - - private static final IIconContainer textureFont = Textures.BlockIcons.OVERLAY_HATCH_BLACKHOLE; - private static final IIconContainer textureFont_Glow = Textures.BlockIcons.OVERLAY_HATCH_BLACKHOLE_GLOW; - - public GT_MetaTileEntity_HeatSensor(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 0, "Reads heat from HIP Unit."); - } - - public GT_MetaTileEntity_HeatSensor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean allowGeneralRedstoneOutput() { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection Side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void initDefaultModes(NBTTagCompound aNBT) { - getBaseMetaTileEntity().setActive(true); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public String[] getDescription() { - return new String[] { "Reads heat of Hot Isostatic Pressurization Unit.", - "Right click to open the GUI and change settings." }; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - threshold = aNBT.getFloat("mThreshold"); - inverted = aNBT.getBoolean("mInverted"); - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setFloat("mThreshold", threshold); - aNBT.setBoolean("mInverted", inverted); - super.saveNBTData(aNBT); - } - - /** - * Updates redstone output strength based on the heat of the HIP unit. - */ - public void updateRedstoneOutput(float heat) { - isOn = (heat > threshold) ^ inverted; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (isOn) { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, (byte) 15); - } - } else { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, (byte) 0); - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_HeatSensor(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), TextureFactory.builder() - .addIcon(textureFont_Glow) - .glow() - .build() }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont) }; - } - - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); - final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); - - builder.widget( - new CoverCycleButtonWidget().setToggle(() -> inverted, (val) -> inverted = val) - .setTextureGetter( - (state) -> state == 1 ? GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON - : GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF) - .addTooltip(0, NORMAL) - .addTooltip(1, INVERTED) - .setPos(10, 8)) - .widget( - new TextWidget().setStringSupplier(() -> inverted ? INVERTED : NORMAL) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setTextAlignment(Alignment.CenterLeft) - .setPos(28, 12)) - .widget( - new NumericWidget().setBounds(0, 100) - .setGetter(() -> (double) threshold) - .setSetter((value) -> threshold = (float) value) - .setScrollValues(0.1, 0.01, 1.0) - .setMaximumFractionDigits(2) - .setTextColor(Color.WHITE.dark(1)) - .setTextAlignment(Alignment.CenterLeft) - .setFocusOnGuiOpen(true) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) - .setPos(10, 28) - .setSize(77, 12)) - .widget( - new TextWidget(StatCollector.translateToLocal("GT5U.gui.text.heat_sensor")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setTextAlignment(Alignment.CenterLeft) - .setPos(90, 30)); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_IndustrialCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_IndustrialCompressor.java deleted file mode 100644 index 489841c5d4..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_IndustrialCompressor.java +++ /dev/null @@ -1,244 +0,0 @@ -package gregtech.common.tileentities.machines.multi.compressor; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.enums.GT_HatchElement.*; -import static gregtech.api.enums.GT_Values.AuthorFourIsTheNumber; -import static gregtech.api.enums.GT_Values.Ollie; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Casings10; - -public class GT_MetaTileEntity_IndustrialCompressor - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - // spotless:off - transpose(new String[][]{ - {" "," DDD "," DDDDD "," DDDDD "," DDDDD "," DDD "," "}, - {" BBB "," BBBBB ","BBBBBBB","BBBBBBB","BBBBBBB"," BBBBB "," BBB "}, - {" DDD "," B B ","B B","B B","B B"," B B "," DDD "}, - {" DAD "," B B ","C C","C C","C C"," B B "," DAD "}, - {" DAD "," B B ","C C","C C","C C"," B B "," DAD "}, - {" DAD "," B B ","C C","C C","C C"," B B "," DAD "}, - {" DDD "," B B ","B B","B B","B B"," B B "," DDD "}, - {" B~B "," BBBBB ","BBBBBBB","BBBBBBB","BBBBBBB"," BBBBB "," BBB "} - })) - //spotless:on - .addElement( - 'C', - buildHatchAdder(GT_MetaTileEntity_IndustrialCompressor.class).atLeast(InputBus, OutputBus) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(5)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_IndustrialCompressor::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings10, 5)))) - .addElement( - 'B', - buildHatchAdder(GT_MetaTileEntity_IndustrialCompressor.class).atLeast(Maintenance, Energy) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(4)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_IndustrialCompressor::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings10, 4)))) - .addElement('A', Glasses.chainAllGlasses()) - .addElement('D', ofBlock(GregTech_API.sBlockCasings10, 5)) - .build(); - - public GT_MetaTileEntity_IndustrialCompressor(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_IndustrialCompressor(String aName) { - super(aName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_IndustrialCompressor(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - ITexture[] rTexture; - if (side == aFacing) { - if (aActive) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 4)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 4)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 4)) }; - } - return rTexture; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Compressor") - .addInfo("Controller Block for the Large Electric Compressor") - .addInfo("100% faster than singleblock machines of the same voltage") - .addInfo("Only uses 90% of the EU/t normally required") - .addInfo("Gains 2 parallels per voltage tier") - .addInfo(AuthorFourIsTheNumber + EnumChatFormatting.RESET + " & " + Ollie) - .addSeparator() - .beginStructureBlock(7, 5, 7, true) - .addController("Front Center") - .addCasingInfoMin("Electric Compressor Casing", 95, false) - .addCasingInfoMin("Compressor Pipe Casing", 45, false) - .addCasingInfoExactly("EV+ Glass", 6, false) - .addInputBus("Pipe Casings on Side", 2) - .addOutputBus("Pipe Casings on Side", 2) - .addEnergyHatch("Any Electric Compressor Casing", 1) - .addMaintenanceHatch("Any Electric Compressor Casing", 1) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 7, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 7, 0, elementBudget, env, false, true); - } - - private int mCasingAmount; - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasingAmount = 0; - return checkPiece(STRUCTURE_PIECE_MAIN, 3, 7, 0) && mCasingAmount >= 95; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Utility.roundUpVoltage(this.getMaxInputVoltage())); - logic.setAvailableAmperage(1L); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 2F) - .setMaxParallelSupplier(this::getMaxParallelRecipes) - .setEuModifier(0.9F); - } - - public int getMaxParallelRecipes() { - return (2 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.compressorRecipes; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_NeutroniumCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_NeutroniumCompressor.java deleted file mode 100644 index 90406bcb50..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/GT_MetaTileEntity_NeutroniumCompressor.java +++ /dev/null @@ -1,261 +0,0 @@ -package gregtech.common.tileentities.machines.multi.compressor; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_Values.AuthorFourIsTheNumber; -import static gregtech.api.enums.GT_Values.Ollie; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Casings10; - -public class GT_MetaTileEntity_NeutroniumCompressor - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - // spotless:off - transpose(new String[][]{ - {" CEEEEEC "," CE EC ","CE EC","E E","E E","E E","E E","E E","CE EC"," CE EC "," CEEEEEC "}, - {" CE EC ","C BBBBB C","E BBBBBBB E"," BBCCCCCBB "," BBCBBBCBB "," BBCCCCCBB "," BBCBBBCBB "," BBCCCCCBB ","E BBBBBBB E","C BBBBB C"," CE EC "}, - {"CE EC","E BBBBBBB E"," B B "," D D "," B B "," B B "," D D "," B B "," B B ","E BDDDBDB E","CE EC"}, - {"E E"," BBAAAAABB "," B B "," D D "," B B "," D D "," D D "," B B "," B B "," BBDBBBDBB ","E E"}, - {"E E"," BBAAAAABB "," B B "," D D "," B B "," B B "," D D "," D D "," D D "," BDDBDDDDB ","E E"}, - {"E E"," BBAAAAABB "," D D "," D D "," D D "," B B "," B B "," B B "," B B "," BBDBBBBDB ","E E"}, - {"E E"," BBAAAAABB "," B B "," B B "," D D "," B B "," B B "," D D "," B B "," BBDBBDBBB ","E E"}, - {"E E"," BBAAAAABB "," B B "," D D "," D D "," B B "," D D "," D D "," D D "," BBBBBDDDB ","E E"}, - {"CE EC","E BBBBBBB E"," B B "," D D "," B B "," B B "," D D "," B B "," B B ","E BDDBBBB E","CE EC"}, - {" CE EC ","C BB~BB C","E BBBBBBB E"," BBBBBBBBB "," BBBBBBBBB "," BBBBBBBBB "," BBBBBBBBB "," BBBBBBBBB ","E BBBBBBB E","C BBBBB C"," CE EC "}, - {" CEEEEEC "," CE EC ","CE EC","E E","E E","E E","E E","E E","CE EC"," CE EC "," CEEEEEC "} - })) - //spotless:on - .addElement('A', Glasses.chainAllGlasses()) - .addElement( - 'B', - buildHatchAdder(GT_MetaTileEntity_NeutroniumCompressor.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy) - .casingIndex(((GT_Block_Casings10) GregTech_API.sBlockCasings10).getTextureIndex(6)) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_NeutroniumCompressor::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings10, 6)))) - .addElement('C', ofBlock(GregTech_API.sBlockCasings10, 8)) - .addElement('D', ofBlock(GregTech_API.sBlockCasings10, 7)) - .addElement('E', ofFrame(Materials.NaquadahAlloy)) - .build(); - - public GT_MetaTileEntity_NeutroniumCompressor(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_NeutroniumCompressor(String aName) { - super(aName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_NeutroniumCompressor(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - ITexture[] rTexture; - if (side == aFacing) { - if (aActive) { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 6)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - } else { - rTexture = new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 6)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW) - .extFacing() - .glow() - .build() }; - } - } else { - rTexture = new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings10, 6)) }; - } - return rTexture; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Neutronium Compressor") - .addInfo("Controller Block for the Neutronium Compressor") - .addInfo("Has a static 8 parallels") - .addInfo("Capable of compressing matter into " + EnumChatFormatting.GOLD + "singularities") - .addInfo("More advanced singularities will require even stronger compression...") - .addInfo(AuthorFourIsTheNumber + EnumChatFormatting.RESET + " & " + Ollie) - .addSeparator() - .beginStructureBlock(11, 11, 11, true) - .addController("Front Center") - .addCasingInfoMin("Neutronium Casing", 220, false) - .addCasingInfoExactly("Active Neutronium Casing", 63, false) - .addCasingInfoExactly("Any Glass", 25, false) - .addCasingInfoExactly("Naquadah Alloy Frame Box", 108, false) - .addCasingInfoExactly("Neutronium Stabilization Casing", 67, false) - .addInputBus("Any Neutronium Casing", 1) - .addOutputBus("Any Neutronium Casing", 1) - .addEnergyHatch("Any Neutronium Casing", 1) - .addMaintenanceHatch("Any Neutronium Casing", 1) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 5, 9, 1); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 5, 9, 1, elementBudget, env, false, true); - } - - private int mCasingAmount; - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasingAmount = 0; - - return (checkPiece(STRUCTURE_PIECE_MAIN, 5, 9, 1)) && mCasingAmount >= 220; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Utility.roundUpVoltage(this.getMaxInputVoltage())); - logic.setAvailableAmperage(1L); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (recipe.mSpecialValue > 0) { - return CheckRecipeResultRegistry.NO_BLACK_HOLE; - } - return super.validateRecipe(recipe); - } - }.setMaxParallel(8); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.neutroniumCompressorRecipes; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsSingleRecipeLocking() { - return true; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java new file mode 100644 index 0000000000..ba893e045d --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEBlackHoleCompressor.java @@ -0,0 +1,534 @@ +package gregtech.common.tileentities.machines.multi.compressor; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.GTValues.AuthorFourIsTheNumber; +import static gregtech.api.enums.GTValues.Ollie; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.metadata.CompressionTierKey; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.blocks.BlockCasings10; +import gregtech.common.items.MetaGeneratedItem01; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEBlackHoleCompressor extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + // spotless:off + transpose(new String[][]{ + {" "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," CC CC "," CCC CCC "," CCC CCC "," CCCCC CCCCC "," CCCC CCCC "," "," "," "," CCCC CCCC "," CCCCC CCCCC "," CCC CCC "," CCC CCC "," CC CC "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "}, + {" "," "," "," "," "," "," "," CC CC "," CC CC "," CCC CCC "," CCC CCC "," CCCC CCCC "," CCCCC CCCCC "," CCCCCC CCCCCC "," CCCCCCC CCCCCCC "," CCCCCC CCCCCC "," "," "," "," CCCCCC CCCCCC "," CCCCCCC CCCCCCC "," CCCCCC CCCCCC "," CCCCC CCCCC "," CCCC CCCC "," CCC CCC "," CCC CCC "," CC CC "," CC CC "," "," "," "," "," "," "," "}, + {" "," "," "," "," "," "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCB BCCCCCCB "," CCCCCCCB BCCCCCCC "," CCCCCCB BBB BCCCCCC "," BCCCCCB B B BCCCCCB "," BCCCCCB B B BCCCCCB "," BCCCCCB B B BCCCCCB "," CCCCCCB BBB BCCCCCC "," CCCCCCCB BCCCCCCC "," BCCCCCCB BCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," "," "," "," "," "," "}, + {" "," "," "," "," "," CC CC "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCBCCCCCBCCCCCCB "," CCCCCCCCBCCCCCCCBCCCCCCCC "," CCCCCCCBCCCCCCCCCBCCCCCCC "," BCCCCCBCCCCCCCCCBCCCCCB "," BCCCCCBCCCCCCCCCBCCCCCB "," BCCCCCBCCCCCCCCCBCCCCCB "," CCCCCCCBCCCCCCCCCBCCCCCCC "," CCCCCCCCBCCCCCCCBCCCCCCCC "," BCCCCCCBCCCCCBCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," CC CC "," "," "," "," "," "}, + {" "," "," "," "," CC CC "," CCDDDCC "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCB BCCCCCCB "," CCCCCCCCCB BCCCCCCCCC "," CCCCCCCCB BCCCCCCCC "," DBCCCCCB BCCCCCBD "," DBCCCCCB BCCCCCBD "," DBCCCCCB BCCCCCBD "," CCCCCCCCB BCCCCCCCC "," CCCCCCCCCB BCCCCCCCCC "," BCCCCCCB BCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," CCDDDCC "," CC CC "," "," "," "," "}, + {" "," "," "," CC CC "," CC CC "," CC CC "," "," "," "," BB BB "," BBBB CCCCC BBBB "," BBBBCC CCBBBB "," BBC CBB "," C C "," CCC C C CCC "," CCC C C CCC "," C C "," C C "," C C "," CCC C C CCC "," CCC C C CCC "," C C "," BBC CBB "," BBBBCC CCBBBB "," BBBB CCCCC BBBB "," BB BB "," "," "," "," CC CC "," CC CC "," CC CC "," "," "," "}, + {" "," "," "," CC CC "," CCDDDCC "," "," "," "," "," "," "," BBB CCCCC BBB "," BBCC CCBB "," BC CB "," CC C C CC "," CC C C CC "," D C C D "," D C C D "," D C C D "," CC C C CC "," CC C C CC "," BC CB "," BBCC CCBB "," BBB CCCCC BBB "," "," "," "," "," "," "," CCDDDCC "," CC CC "," "," "," "}, + {" "," "," CC CC "," CC CC "," CC CC "," "," "," "," "," "," "," "," BBBCCCCCBBB "," BBC CBB "," CCC BC CB CCC "," CCC C C CCC "," C C "," C C "," C C "," CCC C C CCC "," CCC BC CB CCC "," BBC CBB "," BBBCCCCCBBB "," "," "," "," "," "," "," "," CC CC "," CC CC "," CC CC "," "," "}, + {" "," "," CC CC "," CCDDDCC "," "," "," "," "," "," "," "," "," "," BBCCCCCBB "," CC BC CB CC "," CC C C CC "," D C C D "," D C C D "," D C C D "," CC C C CC "," CC BC CB CC "," BBCCCCCBB "," "," "," "," "," "," "," "," "," "," CCDDDCC "," CC CC "," "," "}, + {" "," "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "," BCCCCCB "," CC BC CB CC "," CC C C CC "," C C "," C C "," C C "," CC C C CC "," CC BC CB CC "," BCCCCCB "," "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," "," "}, + {" "," CC CC "," CCDDDCC "," CC CC "," "," "," "," "," "," "," "," "," "," "," CCC BBCCCBB CCC "," CCC BC CB CCC "," D C C D "," D C C D "," D C C D "," CCC BC CB CCC "," CCC BBCCCBB CCC "," "," "," "," "," "," "," "," "," "," "," CC CC "," CCDDDCC "," CC CC "," "}, + {" "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "," "," "," CC BCCCB CC "," CC BC CB CC "," C C "," C C "," C C "," CC BC CB CC "," CC BCCCB CC "," "," "," "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," "}, + {" "," CCDDDCC "," CC CC "," "," "," "," "," "," "," "," "," "," "," "," CC BBB CC "," CC BCCCB CC "," D BCCCCCB D "," D BCCCCCB D "," D BCCCCCB D "," CC BCCCB CC "," CC BBB CC "," "," "," "," "," "," "," "," "," "," "," "," CC CC "," CCDDDCC "," "}, + {" "," CC CC "," CCBBBCC "," CCC "," "," "," "," "," "," "," "," "," "," "," CC CC "," CC BBB CC "," BC B B CB "," BC B B CB "," BC B B CB "," CC BBB CC "," CC CC "," "," "," "," "," "," "," "," "," "," "," CCC "," CCBBBCC "," CC CC "," "}, + {" CCDDDCC "," CC CC "," CBBBBBC "," C C "," "," "," "," "," "," "," "," "," "," ","CCC CCC","CCBC CBCC","D B B D","D B B D","D B B D","CCBC CBCC","CCC CCC"," "," "," "," "," "," "," "," "," "," "," C C "," CBBBBBC "," CC CC "," CCDDDCC "}, + {" CC CC "," CCCCCCC "," BBBBBBB "," C ABA C "," ABA "," A "," A "," "," "," "," "," "," "," ","CCBC CBCC","CCB BCC"," CBAA AABC "," CBBBAA AABBBC "," CBAA AABC ","CCB BCC","CCBC CBCC"," "," "," "," "," "," "," "," A "," A "," ABA "," C ABA C "," BBBBBBB "," CCCCCCC "," CC CC "}, + {" CC CC "," CCCECCC "," BBBBBBB "," C BBB C "," BBB "," ABA "," ABA "," B "," B "," "," "," "," "," ","CCBC CBCC","CCB BCC"," CBBBAA AABBBC "," EBBBBBBB BBBBBBBE "," CBBBAA AABBBC ","CCB BCC","CCBC CBCC"," "," "," "," "," "," B "," B "," ABA "," ABA "," BBB "," C BBB C "," BBBBBBB "," CCCECCC "," CC CC "}, + {" CC CC "," CCCCCCC "," BBBBBBB "," C ABA C "," ABA "," A "," A "," "," "," "," "," "," "," ","CCBC CBCC","CCB BCC"," CBAA AABC "," CBBBAA AABBBC "," CBAA AABC ","CCB BCC","CCBC CBCC"," "," "," "," "," "," "," "," A "," A "," ABA "," C ABA C "," BBBBBBB "," CCCCCCC "," CC CC "}, + {" CCDDDCC "," CC CC "," CBBBBBC "," C C "," "," "," "," "," "," "," "," "," "," ","CCC CCC","CCBC CBCC","D B B D","D B B D","D B B D","CCBC CBCC","CCC CCC"," "," "," "," "," "," "," "," "," "," "," C C "," CBBBBBC "," CC CC "," CCDDDCC "}, + {" "," CC CC "," CCBBBCC "," CCC "," "," "," "," "," "," "," "," "," "," "," CC CC "," CC BBB CC "," BC B B CB "," BC B B CB "," BC B B CB "," CC BBB CC "," CC CC "," "," "," "," "," "," "," "," "," "," "," CCC "," CCBBBCC "," CC CC "," "}, + {" "," CCDDDCC "," CC CC "," "," "," "," "," "," "," "," "," "," "," "," CC BBB CC "," CC BCCCB CC "," D BCCCCCB D "," D BCCCCCB D "," D BCCCCCB D "," CC BCCCB CC "," CC BBB CC "," "," "," "," "," "," "," "," "," "," "," "," CC CC "," CCDDDCC "," "}, + {" "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "," "," "," CC BCCCB CC "," CC BC CB CC "," C C "," C C "," C C "," CC BC CB CC "," CC BCCCB CC "," "," "," "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," "}, + {" "," CC CC "," CCDDDCC "," CC CC "," "," "," "," "," "," "," "," "," "," "," CCC BBCCCBB CCC "," CCC BC CB CCC "," D C C D "," D C C D "," D C C D "," CCC BC CB CCC "," CCC BBCCCBB CCC "," "," "," "," "," "," "," "," "," "," "," CC CC "," CCDDDCC "," CC CC "," "}, + {" "," "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "," BCCCCCB "," CC BC CB CC "," CC C C CC "," C C "," C C "," C C "," CC C C CC "," CC BC CB CC "," BCCCCCB "," "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," "," "}, + {" "," "," CC CC "," CCDDDCC "," "," "," "," "," "," "," "," "," "," BBCCCCCBB "," CC BC CB CC "," CC C C CC "," D C C D "," D C C D "," D C C D "," CC C C CC "," CC BC CB CC "," BBCCCCCBB "," "," "," "," "," "," "," "," "," "," CCDDDCC "," CC CC "," "," "}, + {" "," "," CC CC "," CC CC "," CC CC "," "," "," "," "," "," "," "," BBBCCCCCBBB "," BBC CBB "," CCC BC CB CCC "," CCC C C CCC "," C C "," C C "," C C "," CCC C C CCC "," CCC BC CB CCC "," BBC CBB "," BBBCCCCCBBB "," "," "," "," "," "," "," "," CC CC "," CC CC "," CC CC "," "," "}, + {" "," "," "," CC CC "," CCDDDCC "," "," "," "," "," "," "," BBB CCCCC BBB "," BBCC CCBB "," BC CB "," CC C C CC "," CC C C CC "," D C C D "," D C C D "," D C C D "," CC C C CC "," CC C C CC "," BC CB "," BBCC CCBB "," BBB CCCCC BBB "," "," "," "," "," "," "," CCDDDCC "," CC CC "," "," "," "}, + {" "," "," "," CC CC "," CC CC "," CC CC "," "," "," "," BB BB "," BBBB CC~CC BBBB "," BBBBCC CCBBBB "," BBC CBB "," C C "," CCC C C CCC "," CCC C C CCC "," C C "," C C "," C C "," CCC C C CCC "," CCC C C CCC "," C C "," BBC CBB "," BBBBCC CCBBBB "," BBBB CCCCC BBBB "," BB BB "," "," "," "," CC CC "," CC CC "," CC CC "," "," "," "}, + {" "," "," "," "," CC CC "," CCDDDCC "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCB BCCCCCCB "," CCCCCCCCCB BCCCCCCCCC "," CCCCCCCCB BCCCCCCCC "," DBCCCCCB BCCCCCBD "," DBCCCCCB BCCCCCBD "," DBCCCCCB BCCCCCBD "," CCCCCCCCB BCCCCCCCC "," CCCCCCCCCB BCCCCCCCCC "," BCCCCCCB BCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," CCDDDCC "," CC CC "," "," "," "," "}, + {" "," "," "," "," "," CC CC "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCBCCCCCBCCCCCCB "," CCCCCCCCBCCCCCCCBCCCCCCCC "," CCCCCCCBCCCCCCCCCBCCCCCCC "," BCCCCCBCCCCCCCCCBCCCCCB "," BCCCCCBCCCCCCCCCBCCCCCB "," BCCCCCBCCCCCCCCCBCCCCCB "," CCCCCCCBCCCCCCCCCBCCCCCCC "," CCCCCCCCBCCCCCCCBCCCCCCCC "," BCCCCCCBCCCCCBCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," CC CC "," "," "," "," "," "}, + {" "," "," "," "," "," "," CCBBBCC "," BBCCCCCCCBB "," BCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCB BCCCCCCB "," CCCCCCCB BCCCCCCC "," CCCCCCB BBB BCCCCCC "," BCCCCCB B B BCCCCCB "," BCCCCCB B B BCCCCCB "," BCCCCCB B B BCCCCCB "," CCCCCCB BBB BCCCCCC "," CCCCCCCB BCCCCCCC "," BCCCCCCB BCCCCCCB "," BCCCCCCCBBBBBCCCCCCCB "," BCCCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCCCB "," BCCCCCCCCCCCCCB "," BCCCCCCCCCCCB "," BBCCCCCCCBB "," CCBBBCC "," "," "," "," "," "," "}, + {" "," "," "," "," "," "," "," CC CC "," CC CC "," CCC CCC "," CCC CCC "," CCCC CCCC "," CCCCC CCCCC "," CCCCCC CCCCCC "," CCCCCCC CCCCCCC "," CCCCCC CCCCCC "," "," "," "," CCCCCC CCCCCC "," CCCCCCC CCCCCCC "," CCCCCC CCCCCC "," CCCCC CCCCC "," CCCC CCCC "," CCC CCC "," CCC CCC "," CC CC "," CC CC "," "," "," "," "," "," "," "}, + {" "," "," "," "," "," "," "," "," "," CC CC "," CC CC "," CC CC "," CCC CCC "," CCC CCC "," CCCCC CCCCC "," CCCC CCCC "," "," "," "," CCCC CCCC "," CCCCC CCCCC "," CCC CCC "," CCC CCC "," CC CC "," CC CC "," CC CC "," "," "," "," "," "," "," "," "," "} + })) + //spotless:on + .addElement('A', ofBlock(GregTechAPI.sBlockGlass1, 4)) + .addElement( + 'B', + buildHatchAdder(MTEBlackHoleCompressor.class).atLeast(Maintenance, Energy) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(12)) + .dot(2) + .buildAndChain( + onElementPass(MTEBlackHoleCompressor::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings10, 12)))) + .addElement('C', ofBlock(GregTechAPI.sBlockCasings10, 11)) + .addElement('D', ofFrame(Materials.NaquadahAlloy)) + .addElement( + 'E', + buildHatchAdder(MTEBlackHoleCompressor.class).atLeast(InputBus, OutputBus, InputHatch) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(11)) + .dot(1) + .buildAndChain( + onElementPass(MTEBlackHoleCompressor::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings10, 11)))) + + .build(); + + private boolean blackholeOn = false; + private int catalyzingCounter = 0; + private float blackHoleStability = 100; + + private final FluidStack blackholeCatalyzingCost = (MaterialsUEVplus.SpaceTime).getMolten(1); + private int catalyzingCostModifier = 1; + + public MTEBlackHoleCompressor(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEBlackHoleCompressor(String aName) { + super(aName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBlackHoleCompressor(this.mName); + } + + @Override + public boolean supportsMachineModeSwitch() { + return true; + } + + @Override + public void setMachineModeIcons() { + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_COMPRESSING); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_SINGULARITY); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + setMachineMode(nextMachineMode()); + PlayerUtils.messagePlayer( + aPlayer, + String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); + } + + @Override + public String getMachineModeName() { + return StatCollector.translateToLocal("GT5U.COMPRESSION_TIER.mode." + machineMode); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (aActive) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 11)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 11)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 11)) }; + } + return rTexture; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Compressor/Advanced Neutronium Compressor") + .addInfo("Controller Block for the Semi-Stable Black Hole Containment Field") + .addInfo(EnumChatFormatting.LIGHT_PURPLE + "Uses the immense power of the event horizon to compress things") + .addInfo("No longer requires heat management to perform perfect compression") + .addInfo("Can create advanced singularities!") + .addSeparator() + .addInfo( + "Insert a " + EnumChatFormatting.WHITE + + "Black Hole Activation Catalyst" + + EnumChatFormatting.GRAY + + " to open a black hole") + .addInfo( + "The black hole will begin its life at " + EnumChatFormatting.RED + + "100%" + + EnumChatFormatting.GRAY + + " stability and slowly decay") + .addSeparator() + .addInfo("Natural decay takes " + EnumChatFormatting.RED + "100" + EnumChatFormatting.GRAY + " seconds") + .addInfo("Running recipes in the machine will slow the decay by " + EnumChatFormatting.RED + "25%") + .addInfo( + "The decay can be " + EnumChatFormatting.BOLD + + "halted" + + EnumChatFormatting.RESET + + EnumChatFormatting.GRAY + + " by inserting spacetime") + .addInfo( + "Every " + EnumChatFormatting.RED + + "30" + + EnumChatFormatting.GRAY + + " seconds saved by spacetime insertion will " + + EnumChatFormatting.RED + + "double" + + EnumChatFormatting.GRAY + + " the cost per second!") + .addInfo("Once the black hole becomes unstable, it will void all inputs for recipes which require it") + .addInfo( + "Insert a " + EnumChatFormatting.WHITE + + "Black Hole Deactivation Catalyst" + + EnumChatFormatting.GRAY + + " to close the black hole") + .addSeparator() + .addInfo( + "Recipes not utilizing the black hole have their lengths " + EnumChatFormatting.RED + + "doubled" + + EnumChatFormatting.GRAY + + " if it becomes unstable") + .addInfo("400% faster than singleblock machines of the same voltage when black hole is open") + .addInfo("Only uses 70% of the EU/t normally required") + .addInfo("Gains 8 parallels per voltage tier") + .addInfo( + "Parallels are " + EnumChatFormatting.RED + + "doubled" + + EnumChatFormatting.GRAY + + " when stability is BELOW " + + EnumChatFormatting.RED + + "50%") + .addInfo( + "Parallels are " + EnumChatFormatting.RED + + "quadrupled" + + EnumChatFormatting.GRAY + + " when stability is BELOW " + + EnumChatFormatting.RED + + "20%") + .addInfo(AuthorFourIsTheNumber + EnumChatFormatting.RESET + " & " + Ollie) + .addSeparator() + .beginStructureBlock(35, 33, 35, false) + .addCasingInfoMin("Background Radiation Absorbent Casing", 985, false) + .addCasingInfoExactly("Extreme Density Space-Bending Casing", 3667, false) + .addCasingInfoExactly("Hawking Radiation Realignment Focus", 64, false) + .addCasingInfoExactly("Naquadah Alloy Frame Box", 144, false) + .addInputBus("Behind Laser", 1) + .addOutputBus("Behind Laser", 1) + .addInputHatch("Behind Laser", 1) + .addEnergyHatch("Any Radiation Absorbent Casing", 2) + .addMaintenanceHatch("Any Radiation Absorbent Casing", 2) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 17, 27, 10); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 17, 27, 10, elementBudget, env, false, true); + } + + private int mCasingAmount; + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + mEnergyHatches.clear(); + + if (!checkPiece(STRUCTURE_PIECE_MAIN, 17, 27, 10)) return false; + if (mCasingAmount < 0) return false; + + return true; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + aNBT.setInteger("catalyzingCostModifier", catalyzingCostModifier); + aNBT.setInteger("catalyzingCounter", catalyzingCounter); + aNBT.setBoolean("blackholeOn", blackholeOn); + aNBT.setFloat("blackholeStability", blackHoleStability); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (aNBT.hasKey("catalyzingCounter")) catalyzingCostModifier = aNBT.getInteger("catalyzingCounter"); + if (aNBT.hasKey("catalyzingCostModifier")) catalyzingCostModifier = aNBT.getInteger("catalyzingCostModifier"); + if (aNBT.hasKey("blackholeOn")) blackholeOn = aNBT.getBoolean("blackholeOn"); + if (aNBT.hasKey("blackholeStability")) blackHoleStability = aNBT.getFloat("blackholeStability"); + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTUtility.roundUpVoltage(this.getMaxInputVoltage())); + logic.setAvailableAmperage(1L); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setBoolean("blackholeOn", blackholeOn); + tag.setFloat("blackHoleStability", blackHoleStability); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + if (tag.getBoolean("blackholeOn")) { + if (tag.getFloat("blackHoleStability") > 0) { + currentTip.add(EnumChatFormatting.DARK_PURPLE + "Black Hole Active"); + currentTip.add( + EnumChatFormatting.DARK_PURPLE + " Stability: " + + EnumChatFormatting.BOLD + + Math.round(tag.getFloat("blackHoleStability")) + + "%"); + } else { + currentTip.add(EnumChatFormatting.RED + "BLACK HOLE UNSTABLE"); + } + } else currentTip.add(EnumChatFormatting.DARK_PURPLE + "Black Hole Offline"); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected Stream findRecipeMatches(@Nullable RecipeMap map) { + + // Loop through all items and look for the Activation and Deactivation Catalysts + // Deactivation resets stability to 100 and catalyzing cost to 1 + for (ItemStack inputItem : inputItems) { + if (inputItem.getItem() instanceof MetaGeneratedItem01) { + if (inputItem.getItemDamage() == 32418 && !blackholeOn) { + inputItem.stackSize -= 1; + blackholeOn = true; + break; + } else if (inputItem.getItemDamage() == 32419 && blackholeOn) { + inputItem.stackSize -= 1; + blackholeOn = false; + blackHoleStability = 100; + catalyzingCostModifier = 1; + break; + } + } + } + return super.findRecipeMatches(map); + } + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + + // Default speed bonus + setSpeedBonus(1F); + + // If recipe needs a black hole and one is not open, just wait + // If the recipe doesn't require black hole, incur a 0.5x speed penalty + // If recipe doesn't require black hole but one is open, give 5x speed bonus + if (recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 1) > 0) { + if (!blackholeOn) return CheckRecipeResultRegistry.NO_BLACK_HOLE; + } else { + if (blackHoleStability <= 0) setSpeedBonus(5F); + else if (blackholeOn) setSpeedBonus(0.2F); + } + return super.validateRecipe(recipe); + } + + @Nonnull + protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { + // If recipe needs a black hole and one is active but unstable, continuously void items + if (blackHoleStability <= 0 && recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 1) > 0) { + return CheckRecipeResultRegistry.UNSTABLE_BLACK_HOLE; + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + }.setMaxParallelSupplier(this::getMaxParallelRecipes) + .setEuModifier(0.7F); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (aTick % 20 == 0) { + if (blackholeOn && blackHoleStability >= 0) { + float stabilityDecrease = 1F; + // If the machine is running, reduce stability loss by 25% + if (this.maxProgresstime() != 0) { + stabilityDecrease = 0.75F; + } + // Search all hatches for catalyst fluid + // If found enough, drain it and reduce stability loss to 0 + // Every 30 drains, double the cost + FluidStack totalCost = new FluidStack(blackholeCatalyzingCost, catalyzingCostModifier); + for (MTEHatchInput hatch : mInputHatches) { + if (drain(hatch, totalCost, false)) { + drain(hatch, totalCost, true); + catalyzingCounter += 1; + stabilityDecrease = 0; + if (catalyzingCounter >= 30) { + catalyzingCostModifier *= 2; + catalyzingCounter = 0; + } + } + } + if (blackHoleStability >= 0) blackHoleStability -= stabilityDecrease; + else blackHoleStability = 0; + } + } + } + + public int getMaxParallelRecipes() { + int parallels = (8 * GTUtility.getTier(this.getMaxInputVoltage())); + if (blackHoleStability < 60) { + parallels *= 2; + if (blackHoleStability < 20) parallels *= 2; + } + return parallels; + } + + private static final int MACHINEMODE_COMPRESSOR = 0; + private static final int MACHINEMODE_BLACKHOLE = 1; + + @Override + public RecipeMap getRecipeMap() { + return (machineMode == MACHINEMODE_COMPRESSOR) ? RecipeMaps.compressorRecipes + : RecipeMaps.neutroniumCompressorRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(RecipeMaps.compressorRecipes, RecipeMaps.neutroniumCompressorRecipes); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java new file mode 100644 index 0000000000..2491dcff38 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHIPCompressor.java @@ -0,0 +1,515 @@ +package gregtech.common.tileentities.machines.multi.compressor; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.GTValues.AuthorFourIsTheNumber; +import static gregtech.api.enums.GTValues.Ollie; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_COOLING; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_COOLING_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.util.MathUtils; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.metadata.CompressionTierKey; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.SimpleShutDownReason; +import gregtech.common.blocks.BlockCasings10; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEHIPCompressor extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + // spotless:off + transpose(new String[][]{ + {" "," "," "," CCCCCC DDDDDD "," "," "," "}, + {" "," "," "," C C D D "," "," "," "}, + {" "," HHH "," HHHHH "," C HHHHH D "," HHHHH "," HHH "," "}, + {" BBB "," BBBBB "," BBBBBBB "," C BBBBBBB D "," BBBBBBB "," BBBBB "," BBB "}, + {" HHH "," B B "," BF FB "," C BF FB D "," BF FB "," B B "," HHH "}, + {" HAH "," B B "," GF FG "," C GF FG D "," GF FG "," B B "," HAH "}, + {" HAH "," B B "," E GF FG E ","EEE GF FG EEE"," E GF FG E "," B B "," HAH "}, + {" HAH "," B B "," A GF FG A ","A A GF FG A A"," A GF FG A "," B B "," HAH "}, + {" HHH "," B B "," A BF FB A ","A A BF FB A A"," A BF FB A "," B B "," HHH "}, + {" B~B "," BBBBB "," E BBBBBBB E ","EEE BBBBBBB EEE"," E BBBBBBB E "," BBBBB "," BBB "} + })) + //spotless:on + .addElement('A', Glasses.chainAllGlasses()) + .addElement( + 'B', + buildHatchAdder(MTEHIPCompressor.class).atLeast(Maintenance, Energy, SpecialHatchElement.HeatSensor) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(4)) + .dot(1) + .buildAndChain(onElementPass(MTEHIPCompressor::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings10, 4)))) + .addElement('C', ofBlock(GregTechAPI.sBlockCasings10, 9)) + .addElement('D', ofBlock(GregTechAPI.sBlockCasings10, 10)) + .addElement('E', ofBlock(GregTechAPI.sBlockCasings4, 1)) + .addElement('F', ofCoil(MTEHIPCompressor::setCoilLevel, MTEHIPCompressor::getCoilLevel)) + .addElement( + 'G', + buildHatchAdder(MTEHIPCompressor.class).atLeast(InputBus, OutputBus) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(5)) + .dot(1) + .buildAndChain(onElementPass(MTEHIPCompressor::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings10, 5)))) + .addElement('H', ofBlock(GregTechAPI.sBlockCasings10, 5)) + .build(); + + private final ArrayList sensorHatches = new ArrayList<>(); + + private HeatingCoilLevel heatLevel; + private int coilTier = 0; + + private float heat = 0; + private boolean cooling = false; + + public MTEHIPCompressor(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEHIPCompressor(String aName) { + super(aName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHIPCompressor(this.mName); + } + + @Override + public void onValueUpdate(byte aValue) { + boolean oCooling = cooling; + cooling = (aValue & 1) == 1; + if (oCooling != cooling) getBaseMetaTileEntity().issueTextureUpdate(); + } + + @Override + public byte getUpdateData() { + return (byte) (cooling ? 1 : 0); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (cooling) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 4)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_COOLING) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_COOLING_GLOW) + .extFacing() + .glow() + .build() }; + } else if (aActive) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 4)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 4)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 4)) }; + } + return rTexture; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Compressor") + .addInfo("Controller Block for the Hot Isostatic Pressurization Unit") + .addInfo("HIP Unit heats up while running") + .addInfo( + "When it reaches maximum heat, it becomes " + EnumChatFormatting.DARK_RED + + EnumChatFormatting.BOLD + + "overheated!") + .addInfo("This is only resolved by letting the machine fully cool down") + .addInfo( + "When " + EnumChatFormatting.DARK_RED + + "overheated" + + EnumChatFormatting.GRAY + + ", recipes are slowed down drastically") + .addSeparator() + .addInfo( + "Some recipes " + EnumChatFormatting.BOLD + + "require" + + EnumChatFormatting.RESET + + EnumChatFormatting.GRAY + + " HIP") + .addInfo( + "If the machine " + EnumChatFormatting.DARK_RED + + "overheats" + + EnumChatFormatting.GRAY + + " during these recipes, recipe will be voided!") + .addInfo("Read the current heat using Heat Sensor Hatches") + .addSeparator() + .addInfo("More advanced coils allow better heat control - the unit will take longer to overheat") + .addInfo( + "Unit heats by " + EnumChatFormatting.GREEN + + "(5% x 0.90 ^ (Coil Tier - 1))" + + EnumChatFormatting.GRAY + + " every second while running") + .addInfo( + "Unit cools by " + EnumChatFormatting.GREEN + + "2%" + + EnumChatFormatting.GRAY + + " every second while not running") + .addSeparator() + .addInfo( + "250% " + EnumChatFormatting.RED + + "faster" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.BLUE + + "slower" + + EnumChatFormatting.GRAY + + " than singleblock machines of the same voltage") + .addInfo( + "Uses " + EnumChatFormatting.RED + + "75%" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.BLUE + + "110%" + + EnumChatFormatting.GRAY + + " the EU/t normally required") + .addInfo( + "Gains " + EnumChatFormatting.RED + + "4" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.BLUE + + "1" + + EnumChatFormatting.GRAY + + " parallels per voltage tier") + .addInfo(AuthorFourIsTheNumber + EnumChatFormatting.RESET + " & " + Ollie) + .addSeparator() + .beginStructureBlock(7, 5, 7, true) + .addController("Front Center") + .addCasingInfoMin("Electric Compressor Casing", 95, false) + .addCasingInfoMin("Compressor Pipe Casing", 45, false) + .addCasingInfoExactly("Coolant Duct", 12, false) + .addCasingInfoExactly("Heating Duct", 12, false) + .addCasingInfoExactly("EV+ Glass", 22, false) + .addCasingInfoExactly("Clean Stainless Steel Machine Casing", 20, false) + .addCasingInfoExactly("Coil", 30, true) + .addInputBus("Pipe Casings on Side", 2) + .addOutputBus("Pipe Casings on Side", 2) + .addEnergyHatch("Any Electric Compressor Casing", 1) + .addMaintenanceHatch("Any Electric Compressor Casing", 1) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 7, 9, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 7, 9, 0, elementBudget, env, false, true); + } + + private int mCasingAmount; + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + setCoilLevel(HeatingCoilLevel.None); + mCasingAmount = 0; + return checkPiece(STRUCTURE_PIECE_MAIN, 7, 9, 0) && mCasingAmount >= 95; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTUtility.roundUpVoltage(this.getMaxInputVoltage())); + logic.setAvailableAmperage(1L); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setFloat("heat", heat); + aNBT.setBoolean("cooling", cooling); + aNBT.setInteger("coilTier", coilTier); + aNBT.setBoolean("doingHIP", doingHIP); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (aNBT.hasKey("heat")) heat = aNBT.getFloat("heat"); + if (aNBT.hasKey("cooling")) cooling = aNBT.getBoolean("cooling"); + if (aNBT.hasKey("coilTier")) coilTier = aNBT.getInteger("coilTier"); + if (aNBT.hasKey("doingHIP")) doingHIP = aNBT.getBoolean("doingHIP"); + super.loadNBTData(aNBT); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("heat", Math.round(heat)); + tag.setBoolean("cooling", cooling); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + if (tag.getBoolean("cooling")) currentTip.add( + "HIP Heat: " + EnumChatFormatting.RED + + EnumChatFormatting.BOLD + + tag.getInteger("heat") + + "%" + + EnumChatFormatting.RESET); + else currentTip.add( + "HIP Heat: " + EnumChatFormatting.AQUA + + EnumChatFormatting.BOLD + + tag.getInteger("heat") + + "%" + + EnumChatFormatting.RESET); + } + + private boolean doingHIP = false; + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + doingHIP = false; + setSpeedBonus(1F / 1.25F); + setEuModifier(0.75F); + + if (cooling) { + setSpeedBonus(2.5F); + setEuModifier(1.1F); + } + + if (recipe.getMetadataOrDefault(CompressionTierKey.INSTANCE, 1) > 0) doingHIP = true; + return super.validateRecipe(recipe); + } + }.setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (cooling && doingHIP) { + stopMachine(SimpleShutDownReason.ofCritical("overheated")); + doingHIP = false; + } + return super.onRunningTick(aStack); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (aTick % 20 == 0) { + + // Default to cooling by 2% + float heatMod = -2; + + // If the machine is running, heat by 5% x 0.90 ^ (Coil Tier) + // Cupronickel is 0, so base will be 5% increase + if (this.maxProgresstime() != 0) { + heatMod = (float) (5 * Math.pow(0.9, coilTier)); + } + + heat = MathUtils.clamp(heat + heatMod, 0, 100); + + if ((cooling && heat <= 0) || (!cooling && heat >= 100)) { + cooling = !cooling; + } + } + + // Update all the sensors + for (MTEHeatSensor hatch : sensorHatches) { + hatch.updateRedstoneOutput(heat); + } + + } + + public int getMaxParallelRecipes() { + return cooling ? GTUtility.getTier(this.getMaxInputVoltage()) + : (4 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.compressorRecipes; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + public HeatingCoilLevel getCoilLevel() { + return heatLevel; + } + + public void setCoilLevel(HeatingCoilLevel aCoilLevel) { + heatLevel = aCoilLevel; + coilTier = aCoilLevel.getTier(); + } + + public boolean addSensorHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHeatSensor sensor) { + sensor.updateTexture(aBaseCasingIndex); + return this.sensorHatches.add(sensor); + } + return false; + } + + private enum SpecialHatchElement implements IHatchElement { + + HeatSensor(MTEHIPCompressor::addSensorHatchToMachineList, MTEHeatSensor.class) { + + @Override + public long count(MTEHIPCompressor gtMetaTileEntityHIPCompressor) { + return gtMetaTileEntityHIPCompressor.sensorHatches.size(); + } + }; + + private final List> mteClasses; + private final IGTHatchAdder adder; + + @SafeVarargs + SpecialHatchElement(IGTHatchAdder adder, Class... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + this.adder = adder; + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + public IGTHatchAdder adder() { + return adder; + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHeatSensor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHeatSensor.java new file mode 100644 index 0000000000..8ea57bc1cf --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEHeatSensor.java @@ -0,0 +1,188 @@ +package gregtech.common.tileentities.machines.multi.compressor; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.common.gui.modularui.widget.CoverCycleButtonWidget; + +public class MTEHeatSensor extends MTEHatch { + + protected float threshold = 0; + protected boolean inverted = false; + private boolean isOn = false; + + private static final IIconContainer textureFont = Textures.BlockIcons.OVERLAY_HATCH_BLACKHOLE; + private static final IIconContainer textureFont_Glow = Textures.BlockIcons.OVERLAY_HATCH_BLACKHOLE_GLOW; + + public MTEHeatSensor(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 0, "Reads heat from HIP Unit."); + } + + public MTEHeatSensor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean allowGeneralRedstoneOutput() { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection Side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void initDefaultModes(NBTTagCompound aNBT) { + getBaseMetaTileEntity().setActive(true); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public String[] getDescription() { + return new String[] { "Reads heat of Hot Isostatic Pressurization Unit.", + "Right click to open the GUI and change settings." }; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + threshold = aNBT.getFloat("mThreshold"); + inverted = aNBT.getBoolean("mInverted"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setFloat("mThreshold", threshold); + aNBT.setBoolean("mInverted", inverted); + super.saveNBTData(aNBT); + } + + /** + * Updates redstone output strength based on the heat of the HIP unit. + */ + public void updateRedstoneOutput(float heat) { + isOn = (heat > threshold) ^ inverted; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (isOn) { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, (byte) 15); + } + } else { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, (byte) 0); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHeatSensor(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), TextureFactory.builder() + .addIcon(textureFont_Glow) + .glow() + .build() }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont) }; + } + + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + final String INVERTED = GTUtility.trans("INVERTED", "Inverted"); + final String NORMAL = GTUtility.trans("NORMAL", "Normal"); + + builder.widget( + new CoverCycleButtonWidget().setToggle(() -> inverted, (val) -> inverted = val) + .setTextureGetter( + (state) -> state == 1 ? GTUITextures.OVERLAY_BUTTON_REDSTONE_ON + : GTUITextures.OVERLAY_BUTTON_REDSTONE_OFF) + .addTooltip(0, NORMAL) + .addTooltip(1, INVERTED) + .setPos(10, 8)) + .widget( + new TextWidget().setStringSupplier(() -> inverted ? INVERTED : NORMAL) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setTextAlignment(Alignment.CenterLeft) + .setPos(28, 12)) + .widget( + new NumericWidget().setBounds(0, 100) + .setGetter(() -> (double) threshold) + .setSetter((value) -> threshold = (float) value) + .setScrollValues(0.1, 0.01, 1.0) + .setMaximumFractionDigits(2) + .setTextColor(Color.WHITE.dark(1)) + .setTextAlignment(Alignment.CenterLeft) + .setFocusOnGuiOpen(true) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .setPos(10, 28) + .setSize(77, 12)) + .widget( + new TextWidget(StatCollector.translateToLocal("GT5U.gui.text.heat_sensor")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setTextAlignment(Alignment.CenterLeft) + .setPos(90, 30)); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java new file mode 100644 index 0000000000..e21da1856f --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTEIndustrialCompressor.java @@ -0,0 +1,239 @@ +package gregtech.common.tileentities.machines.multi.compressor; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.enums.GTValues.AuthorFourIsTheNumber; +import static gregtech.api.enums.GTValues.Ollie; +import static gregtech.api.enums.HatchElement.*; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.blocks.BlockCasings10; + +public class MTEIndustrialCompressor extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + // spotless:off + transpose(new String[][]{ + {" "," DDD "," DDDDD "," DDDDD "," DDDDD "," DDD "," "}, + {" BBB "," BBBBB ","BBBBBBB","BBBBBBB","BBBBBBB"," BBBBB "," BBB "}, + {" DDD "," B B ","B B","B B","B B"," B B "," DDD "}, + {" DAD "," B B ","C C","C C","C C"," B B "," DAD "}, + {" DAD "," B B ","C C","C C","C C"," B B "," DAD "}, + {" DAD "," B B ","C C","C C","C C"," B B "," DAD "}, + {" DDD "," B B ","B B","B B","B B"," B B "," DDD "}, + {" B~B "," BBBBB ","BBBBBBB","BBBBBBB","BBBBBBB"," BBBBB "," BBB "} + })) + //spotless:on + .addElement( + 'C', + buildHatchAdder(MTEIndustrialCompressor.class).atLeast(InputBus, OutputBus) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(5)) + .dot(1) + .buildAndChain( + onElementPass(MTEIndustrialCompressor::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings10, 5)))) + .addElement( + 'B', + buildHatchAdder(MTEIndustrialCompressor.class).atLeast(Maintenance, Energy) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(4)) + .dot(1) + .buildAndChain( + onElementPass(MTEIndustrialCompressor::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings10, 4)))) + .addElement('A', Glasses.chainAllGlasses()) + .addElement('D', ofBlock(GregTechAPI.sBlockCasings10, 5)) + .build(); + + public MTEIndustrialCompressor(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialCompressor(String aName) { + super(aName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEIndustrialCompressor(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (aActive) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 4)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 4)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 4)) }; + } + return rTexture; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Compressor") + .addInfo("Controller Block for the Large Electric Compressor") + .addInfo("100% faster than singleblock machines of the same voltage") + .addInfo("Only uses 90% of the EU/t normally required") + .addInfo("Gains 2 parallels per voltage tier") + .addInfo(AuthorFourIsTheNumber + EnumChatFormatting.RESET + " & " + Ollie) + .addSeparator() + .beginStructureBlock(7, 5, 7, true) + .addController("Front Center") + .addCasingInfoMin("Electric Compressor Casing", 95, false) + .addCasingInfoMin("Compressor Pipe Casing", 45, false) + .addCasingInfoExactly("EV+ Glass", 6, false) + .addInputBus("Pipe Casings on Side", 2) + .addOutputBus("Pipe Casings on Side", 2) + .addEnergyHatch("Any Electric Compressor Casing", 1) + .addMaintenanceHatch("Any Electric Compressor Casing", 1) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 7, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 7, 0, elementBudget, env, false, true); + } + + private int mCasingAmount; + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + return checkPiece(STRUCTURE_PIECE_MAIN, 3, 7, 0) && mCasingAmount >= 95; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTUtility.roundUpVoltage(this.getMaxInputVoltage())); + logic.setAvailableAmperage(1L); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 2F) + .setMaxParallelSupplier(this::getMaxParallelRecipes) + .setEuModifier(0.9F); + } + + public int getMaxParallelRecipes() { + return (2 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.compressorRecipes; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTENeutroniumCompressor.java b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTENeutroniumCompressor.java new file mode 100644 index 0000000000..323e09f61b --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/compressor/MTENeutroniumCompressor.java @@ -0,0 +1,257 @@ +package gregtech.common.tileentities.machines.multi.compressor; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.AuthorFourIsTheNumber; +import static gregtech.api.enums.GTValues.Ollie; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.multitileentity.multiblock.casing.Glasses; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.blocks.BlockCasings10; + +public class MTENeutroniumCompressor extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + // spotless:off + transpose(new String[][]{ + {" CEEEEEC "," CE EC ","CE EC","E E","E E","E E","E E","E E","CE EC"," CE EC "," CEEEEEC "}, + {" CE EC ","C BBBBB C","E BBBBBBB E"," BBCCCCCBB "," BBCBBBCBB "," BBCCCCCBB "," BBCBBBCBB "," BBCCCCCBB ","E BBBBBBB E","C BBBBB C"," CE EC "}, + {"CE EC","E BBBBBBB E"," B B "," D D "," B B "," B B "," D D "," B B "," B B ","E BDDDBDB E","CE EC"}, + {"E E"," BBAAAAABB "," B B "," D D "," B B "," D D "," D D "," B B "," B B "," BBDBBBDBB ","E E"}, + {"E E"," BBAAAAABB "," B B "," D D "," B B "," B B "," D D "," D D "," D D "," BDDBDDDDB ","E E"}, + {"E E"," BBAAAAABB "," D D "," D D "," D D "," B B "," B B "," B B "," B B "," BBDBBBBDB ","E E"}, + {"E E"," BBAAAAABB "," B B "," B B "," D D "," B B "," B B "," D D "," B B "," BBDBBDBBB ","E E"}, + {"E E"," BBAAAAABB "," B B "," D D "," D D "," B B "," D D "," D D "," D D "," BBBBBDDDB ","E E"}, + {"CE EC","E BBBBBBB E"," B B "," D D "," B B "," B B "," D D "," B B "," B B ","E BDDBBBB E","CE EC"}, + {" CE EC ","C BB~BB C","E BBBBBBB E"," BBBBBBBBB "," BBBBBBBBB "," BBBBBBBBB "," BBBBBBBBB "," BBBBBBBBB ","E BBBBBBB E","C BBBBB C"," CE EC "}, + {" CEEEEEC "," CE EC ","CE EC","E E","E E","E E","E E","E E","CE EC"," CE EC "," CEEEEEC "} + })) + //spotless:on + .addElement('A', Glasses.chainAllGlasses()) + .addElement( + 'B', + buildHatchAdder(MTENeutroniumCompressor.class).atLeast(InputBus, OutputBus, Maintenance, Energy) + .casingIndex(((BlockCasings10) GregTechAPI.sBlockCasings10).getTextureIndex(6)) + .dot(1) + .buildAndChain( + onElementPass(MTENeutroniumCompressor::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings10, 6)))) + .addElement('C', ofBlock(GregTechAPI.sBlockCasings10, 8)) + .addElement('D', ofBlock(GregTechAPI.sBlockCasings10, 7)) + .addElement('E', ofFrame(Materials.NaquadahAlloy)) + .build(); + + public MTENeutroniumCompressor(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTENeutroniumCompressor(String aName) { + super(aName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTENeutroniumCompressor(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + ITexture[] rTexture; + if (side == aFacing) { + if (aActive) { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 6)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + } else { + rTexture = new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 6)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_MULTI_COMPRESSOR_GLOW) + .extFacing() + .glow() + .build() }; + } + } else { + rTexture = new ITexture[] { Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings10, 6)) }; + } + return rTexture; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Neutronium Compressor") + .addInfo("Controller Block for the Neutronium Compressor") + .addInfo("Has a static 8 parallels") + .addInfo("Capable of compressing matter into " + EnumChatFormatting.GOLD + "singularities") + .addInfo("More advanced singularities will require even stronger compression...") + .addInfo(AuthorFourIsTheNumber + EnumChatFormatting.RESET + " & " + Ollie) + .addSeparator() + .beginStructureBlock(11, 11, 11, true) + .addController("Front Center") + .addCasingInfoMin("Neutronium Casing", 220, false) + .addCasingInfoExactly("Active Neutronium Casing", 63, false) + .addCasingInfoExactly("Any Glass", 25, false) + .addCasingInfoExactly("Naquadah Alloy Frame Box", 108, false) + .addCasingInfoExactly("Neutronium Stabilization Casing", 67, false) + .addInputBus("Any Neutronium Casing", 1) + .addOutputBus("Any Neutronium Casing", 1) + .addEnergyHatch("Any Neutronium Casing", 1) + .addMaintenanceHatch("Any Neutronium Casing", 1) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 5, 9, 1); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 5, 9, 1, elementBudget, env, false, true); + } + + private int mCasingAmount; + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + + return (checkPiece(STRUCTURE_PIECE_MAIN, 5, 9, 1)) && mCasingAmount >= 220; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTUtility.roundUpVoltage(this.getMaxInputVoltage())); + logic.setAvailableAmperage(1L); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (recipe.mSpecialValue > 0) { + return CheckRecipeResultRegistry.NO_BLACK_HOLE; + } + return super.validateRecipe(recipe); + } + }.setMaxParallel(8); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.neutroniumCompressorRecipes; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/drone/DroneConnection.java b/src/main/java/gregtech/common/tileentities/machines/multi/drone/DroneConnection.java index 92b1c65032..e5f3cb99ab 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/drone/DroneConnection.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/drone/DroneConnection.java @@ -1,6 +1,6 @@ package gregtech.common.tileentities.machines.multi.drone; -import static gregtech.GT_Mod.gregtechproxy; +import static gregtech.GTMod.gregtechproxy; import java.util.Optional; @@ -13,23 +13,23 @@ import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Util; -import gregtech.api.util.GT_Utility; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtil; +import gregtech.api.util.GTUtility; public class DroneConnection { String customName; String unlocalizedName; - GT_MetaTileEntity_MultiBlockBase machine; + MTEMultiBlockBase machine; ItemStack machineItem; ChunkCoordinates machineCoord; - GT_MetaTileEntity_DroneCentre centre; + MTEDroneCentre centre; ChunkCoordinates centreCoord; World world; - public DroneConnection(GT_MetaTileEntity_MultiBlockBase machine, GT_MetaTileEntity_DroneCentre centre) { + public DroneConnection(MTEMultiBlockBase machine, MTEDroneCentre centre) { this.machine = machine; this.machineItem = machine.getStackForm(1); machineCoord = machine.getBaseMetaTileEntity() @@ -62,19 +62,18 @@ public class DroneConnection { centreTag.getInteger("x"), centreTag.getInteger("y"), centreTag.getInteger("z")); - this.centre = (GT_MetaTileEntity_DroneCentre) getLoadedGT_BaseMachineAt(centreCoord, world, true); + this.centre = (MTEDroneCentre) getLoadedGT_BaseMachineAt(centreCoord, world, true); this.customName = aNBT.getString("name"); this.unlocalizedName = aNBT.getString("unlocalizedName"); } - public GT_MetaTileEntity_MultiBlockBase getMachine() { + public MTEMultiBlockBase getMachine() { return machine; } public boolean reCheckConnection() { if (machine == null) this.machine = getLoadedGT_BaseMachineAt(machineCoord, world, true); - if (centre == null) - this.centre = (GT_MetaTileEntity_DroneCentre) getLoadedGT_BaseMachineAt(centreCoord, world, true); + if (centre == null) this.centre = (MTEDroneCentre) getLoadedGT_BaseMachineAt(centreCoord, world, true); if (machine != null && centre != null && !centre.getConnectionList() .contains(this)) @@ -84,7 +83,7 @@ public class DroneConnection { } public String getCustomName(boolean localized) { - if (localized) return GT_LanguageManager.getTranslation("gt.blockmachines." + unlocalizedName + ".name"); + if (localized) return GTLanguageManager.getTranslation("gt.blockmachines." + unlocalizedName + ".name"); return customName; } @@ -100,7 +99,7 @@ public class DroneConnection { return machine != null && machine.shouldDisplayShutDownReason() && !machine.getBaseMetaTileEntity() .isActive() - && GT_Utility.isStringValid( + && GTUtility.isStringValid( machine.getBaseMetaTileEntity() .getLastShutDownReason() .getDisplayString()) @@ -122,11 +121,10 @@ public class DroneConnection { return aNBT; } - public GT_MetaTileEntity_MultiBlockBase getLoadedGT_BaseMachineAt(ChunkCoordinates coords, World world, - boolean isLoaded) { - TileEntity te = GT_Util.getTileEntity(world, coords, isLoaded); + public MTEMultiBlockBase getLoadedGT_BaseMachineAt(ChunkCoordinates coords, World world, boolean isLoaded) { + TileEntity te = GTUtil.getTileEntity(world, coords, isLoaded); if (te == null) return null; - return (GT_MetaTileEntity_MultiBlockBase) ((IGregTechTileEntity) te).getMetaTileEntity(); + return (MTEMultiBlockBase) ((IGregTechTileEntity) te).getMetaTileEntity(); } private NBTTagCompound transCoordsToNBT(ChunkCoordinates coord) { diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/drone/GT_MetaTileEntity_DroneCentre.java b/src/main/java/gregtech/common/tileentities/machines/multi/drone/GT_MetaTileEntity_DroneCentre.java deleted file mode 100644 index 8d2eaa0480..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/drone/GT_MetaTileEntity_DroneCentre.java +++ /dev/null @@ -1,917 +0,0 @@ -package gregtech.common.tileentities.machines.multi.drone; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_Values.AuthorSilverMoon; -import static gregtech.api.multitileentity.multiblock.casing.Glasses.chainAllGlasses; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.io.IOException; -import java.text.Collator; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Optional; -import java.util.stream.Collectors; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.HashMultimap; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizon.structurelib.util.Vec3Impl; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.MainAxisAlignment; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.Scrollable; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; - -import appeng.api.util.DimensionalCoord; -import appeng.api.util.WorldCoord; -import appeng.client.render.BlockPosHighlighter; -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.gui.modularui.widget.ShutDownReasonSyncer; -import gregtech.common.items.GT_TierDrone; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_DroneCentre extends - GT_MetaTileEntity_ExtendedPowerMultiBlockBase implements ISurvivalConstructable { - - private static final IIconContainer ACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/DRONE_CENTRE_ACTIVE"); - private static final IIconContainer FACE = new Textures.BlockIcons.CustomIcon("iconsets/DRONE_CENTRE_FACE"); - private static final IIconContainer INACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/DRONE_CENTRE_INACTIVE"); - private final int MACHINE_LIST_WINDOW_ID = 10; - private final int CUSTOM_NAME_WINDOW_ID = 11; - private static final int CASINGS_MIN = 85; - private int mCasingAmount = 0; - private Vec3Impl centreCoord; - private int droneLevel = 0; - private int buttonID; - private String searchFilter = ""; - private boolean useRender = true; - private boolean showLocalizedName = false; - private String sort = "distance"; - private List connectionList = new ArrayList<>(); - public HashMap tempNameList = new HashMap<>(); - // Save centre by dimID - private static final HashMultimap droneMap = HashMultimap.create(); - // spotless off - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - "main", - transpose( - new String[][] { { " ", " ", " ", " ", "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, - { "CC~CC", "C C", "C C", "C C", "CAAAC", "CCCCC", "CAAAC", "C C", "CCCCC" }, - { "CCCCC", "CBBBC", "CBDBC", "CBBBC", "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, - { "C C", " ", " ", " ", " ", " ", " ", " ", "C C" } })) - .addElement( - 'C', - buildHatchAdder(GT_MetaTileEntity_DroneCentre.class).atLeast(InputBus) - .casingIndex(59) - .dot(1) - .buildAndChain( - onElementPass( - GT_MetaTileEntity_DroneCentre::onCasingAdded, - ofBlock(GregTech_API.sBlockCasings4, 2)))) - .addElement('A', chainAllGlasses()) - .addElement('B', ofBlock(GregTech_API.sBlockCasings1, 11)) - .addElement('D', ofBlock(GregTech_API.sBlockCasings4, 0)) - .build(); - - // spotless on - public GT_MetaTileEntity_DroneCentre(String name) { - super(name); - } - - public GT_MetaTileEntity_DroneCentre(int ID, String Name, String NameRegional) { - super(ID, Name, NameRegional); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_DroneCentre(super.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (getBaseMetaTileEntity().isActive()) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(59), TextureFactory.builder() - .addIcon(ACTIVE) - .extFacing() - .build() }; - } else { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(59), TextureFactory.builder() - .addIcon(INACTIVE) - .extFacing() - .build() }; - } - } else if (side == aFacing.getOpposite()) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(59), TextureFactory.builder() - .addIcon(FACE) - .extFacing() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(59) }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Drone Centre") - .addInfo("Drone Center Controller") - .addInfo(EnumChatFormatting.AQUA + "Drone #10032, cleared for takeoff!") - .addInfo("Monitors multiblock machines in range.") - .addInfo("Replace maintenance hatch on other multi with drone downlink module.") - .addInfo("Provides maintenance, power control, monitoring and etc.") - .addInfo("Range is determined by drone tier: T1-128, T2-512, T3-4096") - .addInfo("Place drones in input bus; only one needed to operate.") - .addInfo("Automatically upgrade based on the drone level in the input bus.") - .addInfo("There is a chance per second that the drone will crash.") - .addInfo("Chance is determined by drone tier: T1-1/28800, T2-1/172800, T3-0") - .addInfo("If machine is too far, remote control would not available") - .addInfo(AuthorSilverMoon) - .addSeparator() - .beginStructureBlock(5, 4, 9, false) - .addController("Front center") - .addCasingInfoRange("Stable Titanium Machine Casing", CASINGS_MIN, 91, false) - .addCasingInfoExactly("Heat Proof Machine Casing", 8, false) - .addCasingInfoExactly("Robust Tungstensteel Machine Casing", 1, false) - .addCasingInfoExactly("Any tiered glass", 6, false) - .addInputBus("Any Titanium Casing", 1) - .addStructureInfo("No maintenance hatch needed") - .addSeparator() - .toolTipFinisher("Gregtech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece("main", stackSize, hintsOnly, 2, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stack, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece("main", stack, 2, 1, 0, elementBudget, env, false, true); - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - // I don't think a drone can take off HORIZONTALLY! - return (d, r, f) -> (d.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 && r.isNotRotated() - && !f.isVerticallyFliped(); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasingAmount = 0; - return checkPiece("main", 2, 1, 0) && mCasingAmount >= CASINGS_MIN; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - useRender = !useRender; - aPlayer.addChatComponentMessage( - new ChatComponentTranslation( - "GT5U.machines.dronecentre." + (useRender ? "enableRender" : "disableRender"))); - if (useRender) { - createRenderBlock(); - } else { - destroyRenderBlock(); - } - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return true; - } - - @Override - public void stopMachine(@NotNull ShutDownReason reason) { - destroyRenderBlock(); - super.stopMachine(reason); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (aTick % 20 == 0) { - if (switch (droneLevel) { - case 1 -> getBaseMetaTileEntity().getRandomNumber(28800); - case 2 -> getBaseMetaTileEntity().getRandomNumber(172800); - default -> 1; - } == 0) { - droneLevel = 0; - startRecipeProcessing(); - if (!tryConsumeDrone()) stopMachine(ShutDownReasonRegistry.outOfStuff("Any Drone", 1)); - endRecipeProcessing(); - } - } - // Clean invalid connections every 4 seconds - if (aTick % 80 == 0) connectionList.removeIf(v -> !v.isValid()); - } - if (mMaxProgresstime > 0 && mMaxProgresstime - mProgresstime == 1) destroyRenderBlock(); - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - droneLevel = aNBT.getInteger("drone"); - useRender = aNBT.getBoolean("useRender"); - sort = aNBT.getString("sort"); - NBTTagCompound nameList = aNBT.getCompoundTag("conList"); - for (String s : nameList.func_150296_c()) { - tempNameList.put(s, nameList.getString(s)); - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("drone", droneLevel); - aNBT.setBoolean("useRender", useRender); - aNBT.setString("sort", sort); - NBTTagCompound conList = new NBTTagCompound(); - for (DroneConnection con : connectionList) { - if (!con.customName.equals(con.machine.getLocalName())) - conList.setString(con.machineCoord.toString(), con.customName); - } - aNBT.setTag("conList", conList); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("connectionCount", connectionList.size()); - if (droneLevel != 0) tag.setInteger("droneLevel", droneLevel); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - NBTTagCompound tag = accessor.getNBTData(); - currenttip.add( - EnumChatFormatting.AQUA + StatCollector.translateToLocal("GT5U.waila.drone_downlink.droneLevel") - + tag.getInteger("droneLevel")); - currenttip.add( - StatCollector.translateToLocal("GT5U.waila.drone_downlink.connectionCount") - + tag.getInteger("connectionCount")); - super.getWailaBody(itemStack, currenttip, accessor, config); - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - if (droneLevel == 0) { - if (!tryConsumeDrone()) return SimpleCheckRecipeResult.ofFailure("drone_noDrone"); - } - if (droneLevel == 1 || droneLevel == 2) tryUpdateDrone(); - mMaxProgresstime = 200 * droneLevel; - createRenderBlock(); - return SimpleCheckRecipeResult.ofSuccess("drone_operating"); - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - if (aBaseMetaTileEntity.isServerSide()) { - if (droneMap.containsValue(this)) return; - centreCoord = new Vec3Impl( - getBaseMetaTileEntity().getXCoord(), - getBaseMetaTileEntity().getYCoord(), - getBaseMetaTileEntity().getZCoord()); - droneMap.put(getBaseMetaTileEntity().getWorld().provider.dimensionId, this); - } - } - - @Override - public void onBlockDestroyed() { - destroyRenderBlock(); - connectionList.clear(); - if (droneLevel != 0) spawnDroneItem(); - super.onBlockDestroyed(); - } - - private void spawnDroneItem() { - ItemStack insideDrone = new ItemStack(switch (droneLevel) { - case 1: - yield ItemList.TierdDrone0.getItem(); - case 2: - yield ItemList.TierdDrone1.getItem(); - case 3: - yield ItemList.TierdDrone2.getItem(); - default: - yield null; - }, 1); - final EntityItem tItemEntity = new EntityItem( - getBaseMetaTileEntity().getWorld(), - getBaseMetaTileEntity().getXCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, - getBaseMetaTileEntity().getYCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, - getBaseMetaTileEntity().getZCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, - insideDrone); - tItemEntity.motionX = (XSTR_INSTANCE.nextGaussian() * 0.05D); - tItemEntity.motionY = (XSTR_INSTANCE.nextGaussian() * 0.25D); - tItemEntity.motionZ = (XSTR_INSTANCE.nextGaussian() * 0.05D); - getBaseMetaTileEntity().getWorld() - .spawnEntityInWorld(tItemEntity); - } - - @Override - public void onRemoval() { - droneMap.remove(getBaseMetaTileEntity().getWorld().provider.dimensionId, this); - } - - @Override - public void onUnload() { - droneMap.remove(getBaseMetaTileEntity().getWorld().provider.dimensionId, this); - } - - public List getConnectionList() { - return connectionList; - } - - public int getRange() { - return switch (droneLevel) { - case 1 -> 128; - case 2 -> 512; - case 3 -> 4096; - default -> 0; - }; - } - - public Vec3Impl getCoords() { - return centreCoord; - } - - private boolean tryConsumeDrone() { - List inputs = getStoredInputs(); - if (inputs.isEmpty()) return false; - for (ItemStack item : inputs) { - if (item != null && item.getItem() instanceof GT_TierDrone drone) { - this.droneLevel = drone.getLevel(); - item.stackSize--; - updateSlots(); - return true; - } - } - return false; - } - - private void tryUpdateDrone() { - List inputs = getStoredInputs(); - if (inputs.isEmpty()) return; - for (ItemStack item : inputs) { - if (item != null && item.getItem() instanceof GT_TierDrone drone) { - if (drone.getLevel() <= this.droneLevel) continue; - this.droneLevel = drone.getLevel(); - item.stackSize--; - updateSlots(); - return; - } - } - } - - private void createRenderBlock() { - if (!useRender) return; - int x = getBaseMetaTileEntity().getXCoord(); - int y = getBaseMetaTileEntity().getYCoord(); - int z = getBaseMetaTileEntity().getZCoord(); - - double xOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetX; - double zOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetZ; - double yOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetY; - - this.getBaseMetaTileEntity() - .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); - this.getBaseMetaTileEntity() - .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), GregTech_API.sDroneRender); - } - - private void destroyRenderBlock() { - int x = getBaseMetaTileEntity().getXCoord(); - int y = getBaseMetaTileEntity().getYCoord(); - int z = getBaseMetaTileEntity().getZCoord(); - - double xOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetX; - double zOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetZ; - double yOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetY; - - this.getBaseMetaTileEntity() - .getWorld() - .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - buildContext.addSyncedWindow(MACHINE_LIST_WINDOW_ID, this::createMachineListWindow); - buildContext.addSyncedWindow(CUSTOM_NAME_WINDOW_ID, this::createCustomNameWindow); - builder.widget(// Machine List - new ButtonWidget().setOnClick( - (clickData, widget) -> { - if (!widget.isClient()) widget.getContext() - .openSyncedWindow(MACHINE_LIST_WINDOW_ID); - }) - .setSize(16, 16) - .setBackground(() -> { - List UI = new ArrayList<>(); - UI.add(GT_UITextures.BUTTON_STANDARD); - UI.add(GT_UITextures.OVERLAY_BUTTON_WHITELIST); - return UI.toArray(new IDrawable[0]); - }) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_open_list")) - .setPos(94, 91) - .setEnabled(var -> getBaseMetaTileEntity().isActive())) - .widget(// Turn on ALL machines - new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient()) { - if (!getBaseMetaTileEntity().isActive()) { - widget.getContext() - .getPlayer() - .addChatComponentMessage( - new ChatComponentTranslation("GT5U.machines.dronecentre.shutdown")); - return; - } - for (DroneConnection mte : connectionList) { - mte.machine.getBaseMetaTileEntity() - .enableWorking(); - } - widget.getContext() - .getPlayer() - .addChatComponentMessage(new ChatComponentTranslation("GT5U.machines.dronecentre.turnon")); - widget.getContext() - .getPlayer() - .closeScreen(); - } - }) - .setSize(16, 16) - .setBackground(() -> { - List UI = new ArrayList<>(); - UI.add(GT_UITextures.BUTTON_STANDARD); - UI.add(GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_ON); - return UI.toArray(new IDrawable[0]); - }) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_poweron_all")) - .setPos(146, 91) - .setEnabled(var -> getBaseMetaTileEntity().isActive())) - .widget(// Turn off ALL machines - new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient()) { - if (!getBaseMetaTileEntity().isActive()) { - widget.getContext() - .getPlayer() - .addChatComponentMessage( - new ChatComponentTranslation("GT5U.machines.dronecentre.shutdown")); - return; - } - for (DroneConnection mte : connectionList) { - mte.machine.getBaseMetaTileEntity() - .disableWorking(); - } - widget.getContext() - .getPlayer() - .addChatComponentMessage(new ChatComponentTranslation("GT5U.machines.dronecentre.turnoff")); - widget.getContext() - .getPlayer() - .closeScreen(); - } - }) - .setSize(16, 16) - .setBackground(() -> { - List UI = new ArrayList<>(); - UI.add(GT_UITextures.BUTTON_STANDARD); - UI.add(GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF); - return UI.toArray(new IDrawable[0]); - }) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_poweroff_all")) - .setPos(120, 91) - .setEnabled(var -> getBaseMetaTileEntity().isActive())) - .widget(new FakeSyncWidget.ListSyncer<>(() -> connectionList, var1 -> { - connectionList.clear(); - connectionList.addAll(var1); - }, (buffer, j) -> { - try { - buffer.writeNBTTagCompoundToBuffer(j.transConnectionToNBT()); - } catch (IOException e) { - GT_Log.err.println(e.getCause()); - } - }, buffer -> { - try { - return new DroneConnection(buffer.readNBTTagCompoundFromBuffer()); - } catch (IOException e) { - GT_Log.err.println(e.getCause()); - } - return null; - })); - } - - protected ModularWindow createMachineListWindow(final EntityPlayer player) { - int heightCoff = getBaseMetaTileEntity().isServerSide() ? 0 - : Minecraft.getMinecraft().currentScreen.height - 40; - ModularWindow.Builder builder = ModularWindow.builder(260, heightCoff); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.widget( - ButtonWidget.closeWindowButton(true) - .setPos(245, 3)); - builder.widget( - new TextWidget(EnumChatFormatting.BOLD + StatCollector.translateToLocal("GT5U.gui.text.drone_title")) - .setScale(2) - .setTextAlignment(Alignment.Center) - .setPos(0, 10) - .setSize(260, 8)); - // SearchBar - builder.widget(new TextFieldWidget() { - - @Override - public void onRemoveFocus() { - super.onRemoveFocus(); - syncToServer(2, buffer -> {}); - } - - // Refresh - @Override - public void readOnServer(int id, PacketBuffer buf) { - switch (id) { - case 1 -> super.readOnServer(id, buf); - case 2 -> { - getContext().closeWindow(MACHINE_LIST_WINDOW_ID); - getContext().openSyncedWindow(MACHINE_LIST_WINDOW_ID); - } - } - } - }.setGetter(() -> searchFilter) - .setSetter(var -> searchFilter = var) - .setTextAlignment(Alignment.CenterLeft) - .setTextColor(Color.WHITE.dark(1)) - .setFocusOnGuiOpen(false) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD_LIGHT_GRAY.withOffset(-1, -1, 2, 2)) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.text.drone_search")) - .setPos(50, 30) - .setSize(200, 16)) - // Sort button - .widget(new ButtonWidget() { - - @Override - public ClickResult onClick(int buttonId, boolean doubleClick) { - ClickResult result = super.onClick(buttonId, doubleClick); - syncToServer(2, buffer -> {}); - return result; - } - - @Override - public void readOnServer(int id, PacketBuffer buf) { - switch (id) { - case 1 -> super.readOnServer(id, buf); - case 2 -> { - getContext().closeWindow(MACHINE_LIST_WINDOW_ID); - getContext().openSyncedWindow(MACHINE_LIST_WINDOW_ID); - } - } - } - }.setOnClick((clickData, widget) -> { - switch (sort) { - case "name" -> sort = "distance"; - case "distance" -> sort = "error"; - case "error" -> sort = "name"; - } - }) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_" + sort)) - .setBackground( - () -> new IDrawable[] { GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_SORTING_MODE }) - .setPos(10, 30) - .setSize(16, 16)) - .widget(new FakeSyncWidget.StringSyncer(() -> sort, var1 -> sort = var1)) - // Localized Button - .widget(new ButtonWidget() { - - @Override - public ClickResult onClick(int buttonId, boolean doubleClick) { - ClickResult result = super.onClick(buttonId, doubleClick); - syncToServer(2, buffer -> {}); - return result; - } - - @Override - public void readOnServer(int id, PacketBuffer buf) { - switch (id) { - case 1 -> super.readOnServer(id, buf); - case 2 -> { - getContext().closeWindow(MACHINE_LIST_WINDOW_ID); - getContext().openSyncedWindow(MACHINE_LIST_WINDOW_ID); - } - } - } - }.setOnClick((clickData, widget) -> showLocalizedName = !showLocalizedName) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_showLocalName")) - .setBackground( - () -> new IDrawable[] { - showLocalizedName ? GT_UITextures.BUTTON_STANDARD_PRESSED : GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_CYCLIC }) - .setPos(30, 30) - .setSize(16, 16)); - // Sort first - switch (sort) { - case "name" -> connectionList = connectionList.stream() - .sorted( - (o1, o2) -> Collator.getInstance(Locale.UK) - .compare(o1.getCustomName(false), o2.getCustomName(false))) - .collect(Collectors.toList()); - case "distance" -> connectionList = connectionList.stream() - .sorted(Comparator.comparing(DroneConnection::getDistanceSquared)) - .collect(Collectors.toList()); - case "error" -> connectionList = connectionList.stream() - .sorted( - Comparator.comparing(DroneConnection::isMachineShutdown) - .reversed() - .thenComparing(DroneConnection::getDistanceSquared)) - .collect(Collectors.toList()); - } - - Scrollable MachineContainer = new Scrollable().setVerticalScroll(); - int posY = 0; - for (int i = 0; i < connectionList.size(); i++) { - DroneConnection connection = connectionList.get(i); - if (!connection.customName.toLowerCase() - .contains(searchFilter.toLowerCase())) continue; - ItemStackHandler drawitem = new ItemStackHandler(1); - drawitem.setStackInSlot(0, connection.machineItem); - DynamicPositionedRow row = new DynamicPositionedRow().setSynced(false); - GT_MetaTileEntity_MultiBlockBase coreMachine = connection.machine; - int finalI = i; - row.widget( - SlotWidget.phantom(drawitem, 0) - .disableInteraction() - .setPos(0, 0)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - buttonID = finalI; - if (!widget.isClient()) widget.getContext() - .openSyncedWindow(CUSTOM_NAME_WINDOW_ID); - }) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_setname")) - .setBackground( - () -> new IDrawable[] { GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_PRINT }) - .setSize(16, 16)); - // Client can't handle unloaded machines - row.widget( - new ButtonWidget().setOnClick( - (clickData, widget) -> Optional.ofNullable(coreMachine) - .ifPresent(machine -> { - if (!getBaseMetaTileEntity().isActive()) { - player.addChatComponentMessage( - new ChatComponentTranslation("GT5U.machines.dronecentre.shutdown")); - return; - } - if (machine.isAllowedToWork()) { - machine.disableWorking(); - } else { - machine.enableWorking(); - } - })) - .setPlayClickSoundResource( - () -> Optional.ofNullable(coreMachine) - .filter(GT_MetaTileEntity_MultiBlockBase::isAllowedToWork) - .map(var -> SoundResource.GUI_BUTTON_UP.resourceLocation) - .orElse(SoundResource.GUI_BUTTON_DOWN.resourceLocation)) - .setBackground( - () -> Optional.ofNullable(coreMachine) - .map( - machine -> machine.isAllowedToWork() - ? new IDrawable[] { GT_UITextures.BUTTON_STANDARD_PRESSED, - GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_ON } - : new IDrawable[] { GT_UITextures.BUTTON_STANDARD, - GT_UITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF }) - .orElse(new IDrawable[] { GT_UITextures.OVERLAY_BUTTON_CROSS })) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer( - () -> Optional.ofNullable(coreMachine) - .map(GT_MetaTileEntity_MultiBlockBase::isAllowedToWork) - .orElse(false), - var -> Optional.ofNullable(coreMachine) - .ifPresent(machine -> { - if (var) machine.enableWorking(); - else machine.disableWorking(); - })), - builder) - .addTooltip( - coreMachine != null ? StatCollector.translateToLocal("GT5U.gui.button.power_switch") - : StatCollector.translateToLocal("GT5U.gui.button.drone_outofrange")) - .setSize(16, 16)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (widget.isClient()) { - highlightMachine(player, connection.machineCoord); - player.closeScreen(); - } - }) - .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_highlight")) - .setBackground( - new IDrawable[] { GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_INVERT_REDSTONE }) - .setSize(16, 16)); - // Show the reason why the machine shutdown - row.widget( - new DrawableWidget().dynamicTooltip( - () -> Collections.singletonList( - Optional.ofNullable(coreMachine) - .map( - machine -> machine.getBaseMetaTileEntity() - .getLastShutDownReason() - .getDisplayString()) - .orElse(""))) - .setBackground(GT_UITextures.PICTURE_STALLED_ELECTRICITY) - .setSize(16, 16) - .setEnabled( - var -> coreMachine != null && coreMachine.shouldDisplayShutDownReason() - && !coreMachine.getBaseMetaTileEntity() - .isActive() - && GT_Utility.isStringValid( - coreMachine.getBaseMetaTileEntity() - .getLastShutDownReason() - .getDisplayString()) - && coreMachine.getBaseMetaTileEntity() - .wasShutdown()) - .attachSyncer( - new ShutDownReasonSyncer( - () -> Optional.ofNullable(coreMachine) - .map( - var -> coreMachine.getBaseMetaTileEntity() - .getLastShutDownReason()) - .orElse(ShutDownReasonRegistry.NONE), - reason -> Optional.ofNullable(coreMachine) - .ifPresent( - machine -> coreMachine.getBaseMetaTileEntity() - .setShutDownReason(reason))), - builder) - .attachSyncer( - new FakeSyncWidget.BooleanSyncer( - () -> Optional.ofNullable(coreMachine) - .map( - var -> coreMachine.getBaseMetaTileEntity() - .wasShutdown()) - .orElse(false), - wasShutDown -> Optional.ofNullable(coreMachine) - .ifPresent( - machine -> coreMachine.getBaseMetaTileEntity() - .setShutdownStatus(wasShutDown))), - builder)); - row.widget( - new TextWidget( - connectionList.get(i) - .getCustomName(showLocalizedName)).setTextAlignment(Alignment.CenterLeft) - .setPos(0, 4)); - MachineContainer.widget( - row.setAlignment(MainAxisAlignment.SPACE_BETWEEN) - .setSpace(4) - .setPos(0, posY)); - posY += 20; - } - return builder.widget( - MachineContainer.setPos(10, 50) - .setSize(240, heightCoff - 60)) - .setDraggable(false) - .build(); - } - - protected ModularWindow createCustomNameWindow(final EntityPlayer player) { - ModularWindow.Builder builder = ModularWindow.builder(150, 40); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - return builder.widget( - ButtonWidget.closeWindowButton(true) - .setPos(135, 3)) - .widget( - new TextWidget(StatCollector.translateToLocal("GT5U.gui.text.drone_custom_name")) - .setTextAlignment(Alignment.Center) - .setPos(0, 5) - .setSize(150, 8)) - .widget(new TextFieldWidget() { - - @Override - public void onDestroy() { - if (isClient()) return; - getContext().closeWindow(MACHINE_LIST_WINDOW_ID); - getContext().openSyncedWindow(MACHINE_LIST_WINDOW_ID); - } - }.setGetter( - () -> connectionList.get(buttonID) - .getCustomName(false)) - .setSetter( - var -> connectionList.get(buttonID) - .setCustomName(var)) - .setTextAlignment(Alignment.CenterLeft) - .setTextColor(Color.WHITE.dark(1)) - .setFocusOnGuiOpen(true) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD_LIGHT_GRAY.withOffset(-1, -1, 2, 2)) - .setPos(10, 16) - .setSize(130, 16)) - .build(); - } - - // Just like HIGHLIGHT_INTERFACE (and exactly from it) - private void highlightMachine(EntityPlayer player, ChunkCoordinates machineCoord) { - DimensionalCoord blockPos = new DimensionalCoord( - machineCoord.posX, - machineCoord.posY, - machineCoord.posZ, - player.dimension); - WorldCoord blockPos2 = new WorldCoord((int) player.posX, (int) player.posY, (int) player.posZ); - BlockPosHighlighter.highlightBlock( - blockPos, - System.currentTimeMillis() + 500 * WorldCoord.getTaxicabDistance(blockPos, blockPos2)); - } - - public static HashMultimap getCentreMap() { - return droneMap; - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/drone/GT_MetaTileEntity_Hatch_DroneDownLink.java b/src/main/java/gregtech/common/tileentities/machines/multi/drone/GT_MetaTileEntity_Hatch_DroneDownLink.java deleted file mode 100644 index 33dad93d52..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/drone/GT_MetaTileEntity_Hatch_DroneDownLink.java +++ /dev/null @@ -1,329 +0,0 @@ -package gregtech.common.tileentities.machines.multi.drone; - -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; -import java.util.Set; -import java.util.stream.Collectors; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.util.Vec3Impl; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; - -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.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.render.TextureFactory; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_Hatch_DroneDownLink extends GT_MetaTileEntity_Hatch_Maintenance { - - private Vec3Impl downlinkCoord; - private DroneConnection connection; - // This has to be existed for doing random damage. - private GT_MetaTileEntity_MultiBlockBase machine; - private static final IIconContainer moduleActive = new Textures.BlockIcons.CustomIcon( - "iconsets/OVERLAY_DRONE_MODULE_ACTIVE"); - - public GT_MetaTileEntity_Hatch_DroneDownLink(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_Hatch_DroneDownLink(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures, false); - } - - @Override - public String[] getDescription() { - return new String[] { "Built-in powerful navigation beacon!" }; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister aBlockIconRegister) { - super.registerIcons(aBlockIconRegister); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(moduleActive) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(moduleActive) }; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_DroneDownLink( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - downlinkCoord = new Vec3Impl( - getBaseMetaTileEntity().getXCoord(), - getBaseMetaTileEntity().getYCoord(), - getBaseMetaTileEntity().getZCoord()); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (hasConnection()) { - if (connection.centre.getBaseMetaTileEntity() - .isActive()) { - doNormalMaintain(); - } else { - // Centre offline? ...do nothing. - // machine.causeMaintenanceIssue(); - } - } else { - // If the connection invalid, set it to null. - // Find connection every 10 second - if (aTick % 200 == 0) { - connection = null; - tryFindConnection(); - // Let's have some "surprise". Sorry, surprise party is over. - // if (this.machine != null && this.machine.isValid()) { - // machine.causeMaintenanceIssue(); - } - } - } - } - - private void doNormalMaintain() { - this.mWrench = this.mScrewdriver = this.mSoftHammer = this.mHardHammer = this.mCrowbar = this.mSolderingTool = true; - connection.machine.mWrench = connection.machine.mScrewdriver = connection.machine.mSoftHammer = connection.machine.mHardHammer = connection.machine.mCrowbar = connection.machine.mSolderingTool = true; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - if (aBaseMetaTileEntity.isClientSide()) return true; - if (side == aBaseMetaTileEntity.getFrontFacing()) { - if (aPlayer instanceof FakePlayer) return false; - if (connection == null || !connection.isValid()) { - aPlayer.addChatComponentMessage(new ChatComponentTranslation("GT5U.machines.dronecentre.noconnection")); - return false; - } - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void onRemoval() { - if (hasConnection()) connection.machine = null; - } - - private boolean hasConnection() { - if (connection == null) return false; - if (connection.isValid()) return true; - return connection.reCheckConnection(); - } - - /** - * Find a drone connection. This will search for all DC in the same dimension, then find one in range. - */ - private void tryFindConnection() { - if (GT_MetaTileEntity_DroneCentre.getCentreMap() - .containsKey(getBaseMetaTileEntity().getWorld().provider.dimensionId)) { - List target = GT_MetaTileEntity_DroneCentre.getCentreMap() - .get(getBaseMetaTileEntity().getWorld().provider.dimensionId) - .stream() - .collect(Collectors.toList()); - for (GT_MetaTileEntity_DroneCentre centre : target) { - if (centre.getCoords() - .withinDistance(this.downlinkCoord, centre.getRange()) - && centre.getBaseMetaTileEntity() - .isActive()) { - GT_MetaTileEntity_MultiBlockBase machine = tryFindCoreGTMultiBlock(); - if (machine != null && machine.isValid()) { - this.machine = machine; - connection = new DroneConnection(machine, centre); - connection.centre.getConnectionList() - .add(connection); - return; - } - } - } - } - } - - // Find mainframe. Mainly from a method in GT_API——This will cause performance issue! Do not call it frequently. - private GT_MetaTileEntity_MultiBlockBase tryFindCoreGTMultiBlock() { - Queue tQueue = new LinkedList<>(); - Set visited = new HashSet<>(80); - tQueue.add( - this.getBaseMetaTileEntity() - .getCoords()); - World world = this.getBaseMetaTileEntity() - .getWorld(); - while (!tQueue.isEmpty()) { - final ChunkCoordinates aCoords = tQueue.poll(); - final TileEntity tTileEntity; - final boolean isMachineBlock; - tTileEntity = world.getTileEntity(aCoords.posX, aCoords.posY, aCoords.posZ); - Block block = world.getBlock(aCoords.posX, aCoords.posY, aCoords.posZ); - // Plascrete block isn't registered as machineBlock, therefore we have to check it manually so that drone - // can work with cleanroom. - // Todo: loading cleanroom's config for other blocks - isMachineBlock = GregTech_API - .isMachineBlock(block, world.getBlockMetadata(aCoords.posX, aCoords.posY, aCoords.posZ)) - || (block == GregTech_API.sBlockReinforced - && world.getBlockMetadata(aCoords.posX, aCoords.posY, aCoords.posZ) == 2); - // See if the block itself is MultiBlock, also the one we need. - if (tTileEntity instanceof IGregTechTileEntity te - && te.getMetaTileEntity() instanceof GT_MetaTileEntity_MultiBlockBase mte) - if (mte.mMaintenanceHatches.contains(this)) return mte; - - // Now see if we should add the nearby blocks to the queue: - // 1) If we've visited less than 5 blocks, then yes - // 2) If the tile says we should recursively update (pipes don't, machine blocks do) - // 3) If the block at the coordinates is marked as a machine block - if (visited.size() < 5 - || (tTileEntity instanceof IMachineBlockUpdateable - && ((IMachineBlockUpdateable) tTileEntity).isMachineBlockUpdateRecursive()) - || isMachineBlock) { - ChunkCoordinates tCoords; - - if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX + 1, aCoords.posY, aCoords.posZ))) - tQueue.add(tCoords); - if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX - 1, aCoords.posY, aCoords.posZ))) - tQueue.add(tCoords); - if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY + 1, aCoords.posZ))) - tQueue.add(tCoords); - if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY - 1, aCoords.posZ))) - tQueue.add(tCoords); - if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY, aCoords.posZ + 1))) - tQueue.add(tCoords); - if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY, aCoords.posZ - 1))) - tQueue.add(tCoords); - } - } - return null; - } - - @Override - public boolean doesBindPlayerInventory() { - return false; - } - - @Override - public int getGUIWidth() { - return 150; - } - - @Override - public int getGUIHeight() { - return 40; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.widget( - ButtonWidget.closeWindowButton(true) - .setPos(135, 3)) - .widget( - new TextWidget(StatCollector.translateToLocal("GT5U.gui.text.drone_custom_name")) - .setTextAlignment(Alignment.Center) - .setPos(0, 5) - .setSize(150, 8)) - .widget( - new TextFieldWidget().setGetter(() -> connection == null ? "" : connection.getCustomName(false)) - .setSetter(var -> { if (connection != null) connection.setCustomName(var); }) - .setTextAlignment(Alignment.CenterLeft) - .setTextColor(Color.WHITE.dark(1)) - .setFocusOnGuiOpen(true) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD_LIGHT_GRAY.withOffset(-1, -1, 2, 2)) - .setPos(10, 16) - .setSize(130, 16)) - .build(); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setBoolean("connection", connection == null); - if (connection != null) { - tag.setInteger("x", connection.centreCoord.posX); - tag.setInteger("y", connection.centreCoord.posY); - tag.setInteger("z", connection.centreCoord.posZ); - tag.setString("name", connection.customName); - } - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - NBTTagCompound tag = accessor.getNBTData(); - if (tag.getBoolean("connection")) { - currenttip - .add(EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.waila.drone_downlink.noConnection")); - } else { - currenttip.add( - EnumChatFormatting.AQUA + StatCollector.translateToLocal("GT5U.waila.drone_downlink.connection") - + tag.getInteger("x") - + " " - + tag.getInteger("y") - + " " - + tag.getInteger("z")); - currenttip.add(EnumChatFormatting.YELLOW + tag.getString("name")); - } - super.getWailaBody(itemStack, currenttip, accessor, config); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/drone/MTEDroneCentre.java b/src/main/java/gregtech/common/tileentities/machines/multi/drone/MTEDroneCentre.java new file mode 100644 index 0000000000..cf52680d71 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/drone/MTEDroneCentre.java @@ -0,0 +1,913 @@ +package gregtech.common.tileentities.machines.multi.drone; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.AuthorSilverMoon; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.multitileentity.multiblock.casing.Glasses.chainAllGlasses; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.io.IOException; +import java.text.Collator; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Optional; +import java.util.stream.Collectors; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.PacketBuffer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.HashMultimap; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizon.structurelib.util.Vec3Impl; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.MainAxisAlignment; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.Scrollable; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; + +import appeng.api.util.DimensionalCoord; +import appeng.api.util.WorldCoord; +import appeng.client.render.BlockPosHighlighter; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.gui.modularui.widget.ShutDownReasonSyncer; +import gregtech.common.items.ItemTierDrone; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEDroneCentre extends MTEExtendedPowerMultiBlockBase implements ISurvivalConstructable { + + private static final IIconContainer ACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/DRONE_CENTRE_ACTIVE"); + private static final IIconContainer FACE = new Textures.BlockIcons.CustomIcon("iconsets/DRONE_CENTRE_FACE"); + private static final IIconContainer INACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/DRONE_CENTRE_INACTIVE"); + private final int MACHINE_LIST_WINDOW_ID = 10; + private final int CUSTOM_NAME_WINDOW_ID = 11; + private static final int CASINGS_MIN = 85; + private int mCasingAmount = 0; + private Vec3Impl centreCoord; + private int droneLevel = 0; + private int buttonID; + private String searchFilter = ""; + private boolean useRender = true; + private boolean showLocalizedName = false; + private String sort = "distance"; + private List connectionList = new ArrayList<>(); + public HashMap tempNameList = new HashMap<>(); + // Save centre by dimID + private static final HashMultimap droneMap = HashMultimap.create(); + // spotless off + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + "main", + transpose( + new String[][] { { " ", " ", " ", " ", "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, + { "CC~CC", "C C", "C C", "C C", "CAAAC", "CCCCC", "CAAAC", "C C", "CCCCC" }, + { "CCCCC", "CBBBC", "CBDBC", "CBBBC", "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, + { "C C", " ", " ", " ", " ", " ", " ", " ", "C C" } })) + .addElement( + 'C', + buildHatchAdder(MTEDroneCentre.class).atLeast(InputBus) + .casingIndex(59) + .dot(1) + .buildAndChain(onElementPass(MTEDroneCentre::onCasingAdded, ofBlock(GregTechAPI.sBlockCasings4, 2)))) + .addElement('A', chainAllGlasses()) + .addElement('B', ofBlock(GregTechAPI.sBlockCasings1, 11)) + .addElement('D', ofBlock(GregTechAPI.sBlockCasings4, 0)) + .build(); + + // spotless on + public MTEDroneCentre(String name) { + super(name); + } + + public MTEDroneCentre(int ID, String Name, String NameRegional) { + super(ID, Name, NameRegional); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEDroneCentre(super.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (getBaseMetaTileEntity().isActive()) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(59), TextureFactory.builder() + .addIcon(ACTIVE) + .extFacing() + .build() }; + } else { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(59), TextureFactory.builder() + .addIcon(INACTIVE) + .extFacing() + .build() }; + } + } else if (side == aFacing.getOpposite()) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(59), TextureFactory.builder() + .addIcon(FACE) + .extFacing() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(59) }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Drone Centre") + .addInfo("Drone Center Controller") + .addInfo(EnumChatFormatting.AQUA + "Drone #10032, cleared for takeoff!") + .addInfo("Monitors multiblock machines in range.") + .addInfo("Replace maintenance hatch on other multi with drone downlink module.") + .addInfo("Provides maintenance, power control, monitoring and etc.") + .addInfo("Range is determined by drone tier: T1-128, T2-512, T3-4096") + .addInfo("Place drones in input bus; only one needed to operate.") + .addInfo("Automatically upgrade based on the drone level in the input bus.") + .addInfo("There is a chance per second that the drone will crash.") + .addInfo("Chance is determined by drone tier: T1-1/28800, T2-1/172800, T3-0") + .addInfo("If machine is too far, remote control would not available") + .addInfo(AuthorSilverMoon) + .addSeparator() + .beginStructureBlock(5, 4, 9, false) + .addController("Front center") + .addCasingInfoRange("Stable Titanium Machine Casing", CASINGS_MIN, 91, false) + .addCasingInfoExactly("Heat Proof Machine Casing", 8, false) + .addCasingInfoExactly("Robust Tungstensteel Machine Casing", 1, false) + .addCasingInfoExactly("Any tiered glass", 6, false) + .addInputBus("Any Titanium Casing", 1) + .addStructureInfo("No maintenance hatch needed") + .addSeparator() + .toolTipFinisher("Gregtech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece("main", stackSize, hintsOnly, 2, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stack, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece("main", stack, 2, 1, 0, elementBudget, env, false, true); + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + // I don't think a drone can take off HORIZONTALLY! + return (d, r, f) -> (d.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 && r.isNotRotated() + && !f.isVerticallyFliped(); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasingAmount = 0; + return checkPiece("main", 2, 1, 0) && mCasingAmount >= CASINGS_MIN; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + useRender = !useRender; + aPlayer.addChatComponentMessage( + new ChatComponentTranslation( + "GT5U.machines.dronecentre." + (useRender ? "enableRender" : "disableRender"))); + if (useRender) { + createRenderBlock(); + } else { + destroyRenderBlock(); + } + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return true; + } + + @Override + public void stopMachine(@NotNull ShutDownReason reason) { + destroyRenderBlock(); + super.stopMachine(reason); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (aTick % 20 == 0) { + if (switch (droneLevel) { + case 1 -> getBaseMetaTileEntity().getRandomNumber(28800); + case 2 -> getBaseMetaTileEntity().getRandomNumber(172800); + default -> 1; + } == 0) { + droneLevel = 0; + startRecipeProcessing(); + if (!tryConsumeDrone()) stopMachine(ShutDownReasonRegistry.outOfStuff("Any Drone", 1)); + endRecipeProcessing(); + } + } + // Clean invalid connections every 4 seconds + if (aTick % 80 == 0) connectionList.removeIf(v -> !v.isValid()); + } + if (mMaxProgresstime > 0 && mMaxProgresstime - mProgresstime == 1) destroyRenderBlock(); + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + droneLevel = aNBT.getInteger("drone"); + useRender = aNBT.getBoolean("useRender"); + sort = aNBT.getString("sort"); + NBTTagCompound nameList = aNBT.getCompoundTag("conList"); + for (String s : nameList.func_150296_c()) { + tempNameList.put(s, nameList.getString(s)); + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("drone", droneLevel); + aNBT.setBoolean("useRender", useRender); + aNBT.setString("sort", sort); + NBTTagCompound conList = new NBTTagCompound(); + for (DroneConnection con : connectionList) { + if (!con.customName.equals(con.machine.getLocalName())) + conList.setString(con.machineCoord.toString(), con.customName); + } + aNBT.setTag("conList", conList); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("connectionCount", connectionList.size()); + if (droneLevel != 0) tag.setInteger("droneLevel", droneLevel); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + NBTTagCompound tag = accessor.getNBTData(); + currenttip.add( + EnumChatFormatting.AQUA + StatCollector.translateToLocal("GT5U.waila.drone_downlink.droneLevel") + + tag.getInteger("droneLevel")); + currenttip.add( + StatCollector.translateToLocal("GT5U.waila.drone_downlink.connectionCount") + + tag.getInteger("connectionCount")); + super.getWailaBody(itemStack, currenttip, accessor, config); + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + if (droneLevel == 0) { + if (!tryConsumeDrone()) return SimpleCheckRecipeResult.ofFailure("drone_noDrone"); + } + if (droneLevel == 1 || droneLevel == 2) tryUpdateDrone(); + mMaxProgresstime = 200 * droneLevel; + createRenderBlock(); + return SimpleCheckRecipeResult.ofSuccess("drone_operating"); + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + if (aBaseMetaTileEntity.isServerSide()) { + if (droneMap.containsValue(this)) return; + centreCoord = new Vec3Impl( + getBaseMetaTileEntity().getXCoord(), + getBaseMetaTileEntity().getYCoord(), + getBaseMetaTileEntity().getZCoord()); + droneMap.put(getBaseMetaTileEntity().getWorld().provider.dimensionId, this); + } + } + + @Override + public void onBlockDestroyed() { + destroyRenderBlock(); + connectionList.clear(); + if (droneLevel != 0) spawnDroneItem(); + super.onBlockDestroyed(); + } + + private void spawnDroneItem() { + ItemStack insideDrone = new ItemStack(switch (droneLevel) { + case 1: + yield ItemList.TierdDrone0.getItem(); + case 2: + yield ItemList.TierdDrone1.getItem(); + case 3: + yield ItemList.TierdDrone2.getItem(); + default: + yield null; + }, 1); + final EntityItem tItemEntity = new EntityItem( + getBaseMetaTileEntity().getWorld(), + getBaseMetaTileEntity().getXCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, + getBaseMetaTileEntity().getYCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, + getBaseMetaTileEntity().getZCoord() + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, + insideDrone); + tItemEntity.motionX = (XSTR_INSTANCE.nextGaussian() * 0.05D); + tItemEntity.motionY = (XSTR_INSTANCE.nextGaussian() * 0.25D); + tItemEntity.motionZ = (XSTR_INSTANCE.nextGaussian() * 0.05D); + getBaseMetaTileEntity().getWorld() + .spawnEntityInWorld(tItemEntity); + } + + @Override + public void onRemoval() { + droneMap.remove(getBaseMetaTileEntity().getWorld().provider.dimensionId, this); + } + + @Override + public void onUnload() { + droneMap.remove(getBaseMetaTileEntity().getWorld().provider.dimensionId, this); + } + + public List getConnectionList() { + return connectionList; + } + + public int getRange() { + return switch (droneLevel) { + case 1 -> 128; + case 2 -> 512; + case 3 -> 4096; + default -> 0; + }; + } + + public Vec3Impl getCoords() { + return centreCoord; + } + + private boolean tryConsumeDrone() { + List inputs = getStoredInputs(); + if (inputs.isEmpty()) return false; + for (ItemStack item : inputs) { + if (item != null && item.getItem() instanceof ItemTierDrone drone) { + this.droneLevel = drone.getLevel(); + item.stackSize--; + updateSlots(); + return true; + } + } + return false; + } + + private void tryUpdateDrone() { + List inputs = getStoredInputs(); + if (inputs.isEmpty()) return; + for (ItemStack item : inputs) { + if (item != null && item.getItem() instanceof ItemTierDrone drone) { + if (drone.getLevel() <= this.droneLevel) continue; + this.droneLevel = drone.getLevel(); + item.stackSize--; + updateSlots(); + return; + } + } + } + + private void createRenderBlock() { + if (!useRender) return; + int x = getBaseMetaTileEntity().getXCoord(); + int y = getBaseMetaTileEntity().getYCoord(); + int z = getBaseMetaTileEntity().getZCoord(); + + double xOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetY; + + this.getBaseMetaTileEntity() + .getWorld() + .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); + this.getBaseMetaTileEntity() + .getWorld() + .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), GregTechAPI.sDroneRender); + } + + private void destroyRenderBlock() { + int x = getBaseMetaTileEntity().getXCoord(); + int y = getBaseMetaTileEntity().getYCoord(); + int z = getBaseMetaTileEntity().getZCoord(); + + double xOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = 2 * getExtendedFacing().getRelativeBackInWorld().offsetY; + + this.getBaseMetaTileEntity() + .getWorld() + .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + buildContext.addSyncedWindow(MACHINE_LIST_WINDOW_ID, this::createMachineListWindow); + buildContext.addSyncedWindow(CUSTOM_NAME_WINDOW_ID, this::createCustomNameWindow); + builder.widget(// Machine List + new ButtonWidget().setOnClick( + (clickData, widget) -> { + if (!widget.isClient()) widget.getContext() + .openSyncedWindow(MACHINE_LIST_WINDOW_ID); + }) + .setSize(16, 16) + .setBackground(() -> { + List UI = new ArrayList<>(); + UI.add(GTUITextures.BUTTON_STANDARD); + UI.add(GTUITextures.OVERLAY_BUTTON_WHITELIST); + return UI.toArray(new IDrawable[0]); + }) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_open_list")) + .setPos(94, 91) + .setEnabled(var -> getBaseMetaTileEntity().isActive())) + .widget(// Turn on ALL machines + new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + if (!getBaseMetaTileEntity().isActive()) { + widget.getContext() + .getPlayer() + .addChatComponentMessage( + new ChatComponentTranslation("GT5U.machines.dronecentre.shutdown")); + return; + } + for (DroneConnection mte : connectionList) { + mte.machine.getBaseMetaTileEntity() + .enableWorking(); + } + widget.getContext() + .getPlayer() + .addChatComponentMessage(new ChatComponentTranslation("GT5U.machines.dronecentre.turnon")); + widget.getContext() + .getPlayer() + .closeScreen(); + } + }) + .setSize(16, 16) + .setBackground(() -> { + List UI = new ArrayList<>(); + UI.add(GTUITextures.BUTTON_STANDARD); + UI.add(GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON); + return UI.toArray(new IDrawable[0]); + }) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_poweron_all")) + .setPos(146, 91) + .setEnabled(var -> getBaseMetaTileEntity().isActive())) + .widget(// Turn off ALL machines + new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + if (!getBaseMetaTileEntity().isActive()) { + widget.getContext() + .getPlayer() + .addChatComponentMessage( + new ChatComponentTranslation("GT5U.machines.dronecentre.shutdown")); + return; + } + for (DroneConnection mte : connectionList) { + mte.machine.getBaseMetaTileEntity() + .disableWorking(); + } + widget.getContext() + .getPlayer() + .addChatComponentMessage(new ChatComponentTranslation("GT5U.machines.dronecentre.turnoff")); + widget.getContext() + .getPlayer() + .closeScreen(); + } + }) + .setSize(16, 16) + .setBackground(() -> { + List UI = new ArrayList<>(); + UI.add(GTUITextures.BUTTON_STANDARD); + UI.add(GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF); + return UI.toArray(new IDrawable[0]); + }) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_poweroff_all")) + .setPos(120, 91) + .setEnabled(var -> getBaseMetaTileEntity().isActive())) + .widget(new FakeSyncWidget.ListSyncer<>(() -> connectionList, var1 -> { + connectionList.clear(); + connectionList.addAll(var1); + }, (buffer, j) -> { + try { + buffer.writeNBTTagCompoundToBuffer(j.transConnectionToNBT()); + } catch (IOException e) { + GTLog.err.println(e.getCause()); + } + }, buffer -> { + try { + return new DroneConnection(buffer.readNBTTagCompoundFromBuffer()); + } catch (IOException e) { + GTLog.err.println(e.getCause()); + } + return null; + })); + } + + protected ModularWindow createMachineListWindow(final EntityPlayer player) { + int heightCoff = getBaseMetaTileEntity().isServerSide() ? 0 + : Minecraft.getMinecraft().currentScreen.height - 40; + ModularWindow.Builder builder = ModularWindow.builder(260, heightCoff); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.widget( + ButtonWidget.closeWindowButton(true) + .setPos(245, 3)); + builder.widget( + new TextWidget(EnumChatFormatting.BOLD + StatCollector.translateToLocal("GT5U.gui.text.drone_title")) + .setScale(2) + .setTextAlignment(Alignment.Center) + .setPos(0, 10) + .setSize(260, 8)); + // SearchBar + builder.widget(new TextFieldWidget() { + + @Override + public void onRemoveFocus() { + super.onRemoveFocus(); + syncToServer(2, buffer -> {}); + } + + // Refresh + @Override + public void readOnServer(int id, PacketBuffer buf) { + switch (id) { + case 1 -> super.readOnServer(id, buf); + case 2 -> { + getContext().closeWindow(MACHINE_LIST_WINDOW_ID); + getContext().openSyncedWindow(MACHINE_LIST_WINDOW_ID); + } + } + } + }.setGetter(() -> searchFilter) + .setSetter(var -> searchFilter = var) + .setTextAlignment(Alignment.CenterLeft) + .setTextColor(Color.WHITE.dark(1)) + .setFocusOnGuiOpen(false) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD_LIGHT_GRAY.withOffset(-1, -1, 2, 2)) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.text.drone_search")) + .setPos(50, 30) + .setSize(200, 16)) + // Sort button + .widget(new ButtonWidget() { + + @Override + public ClickResult onClick(int buttonId, boolean doubleClick) { + ClickResult result = super.onClick(buttonId, doubleClick); + syncToServer(2, buffer -> {}); + return result; + } + + @Override + public void readOnServer(int id, PacketBuffer buf) { + switch (id) { + case 1 -> super.readOnServer(id, buf); + case 2 -> { + getContext().closeWindow(MACHINE_LIST_WINDOW_ID); + getContext().openSyncedWindow(MACHINE_LIST_WINDOW_ID); + } + } + } + }.setOnClick((clickData, widget) -> { + switch (sort) { + case "name" -> sort = "distance"; + case "distance" -> sort = "error"; + case "error" -> sort = "name"; + } + }) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_" + sort)) + .setBackground( + () -> new IDrawable[] { GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_SORTING_MODE }) + .setPos(10, 30) + .setSize(16, 16)) + .widget(new FakeSyncWidget.StringSyncer(() -> sort, var1 -> sort = var1)) + // Localized Button + .widget(new ButtonWidget() { + + @Override + public ClickResult onClick(int buttonId, boolean doubleClick) { + ClickResult result = super.onClick(buttonId, doubleClick); + syncToServer(2, buffer -> {}); + return result; + } + + @Override + public void readOnServer(int id, PacketBuffer buf) { + switch (id) { + case 1 -> super.readOnServer(id, buf); + case 2 -> { + getContext().closeWindow(MACHINE_LIST_WINDOW_ID); + getContext().openSyncedWindow(MACHINE_LIST_WINDOW_ID); + } + } + } + }.setOnClick((clickData, widget) -> showLocalizedName = !showLocalizedName) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_showLocalName")) + .setBackground( + () -> new IDrawable[] { + showLocalizedName ? GTUITextures.BUTTON_STANDARD_PRESSED : GTUITextures.BUTTON_STANDARD, + GTUITextures.OVERLAY_BUTTON_CYCLIC }) + .setPos(30, 30) + .setSize(16, 16)); + // Sort first + switch (sort) { + case "name" -> connectionList = connectionList.stream() + .sorted( + (o1, o2) -> Collator.getInstance(Locale.UK) + .compare(o1.getCustomName(false), o2.getCustomName(false))) + .collect(Collectors.toList()); + case "distance" -> connectionList = connectionList.stream() + .sorted(Comparator.comparing(DroneConnection::getDistanceSquared)) + .collect(Collectors.toList()); + case "error" -> connectionList = connectionList.stream() + .sorted( + Comparator.comparing(DroneConnection::isMachineShutdown) + .reversed() + .thenComparing(DroneConnection::getDistanceSquared)) + .collect(Collectors.toList()); + } + + Scrollable MachineContainer = new Scrollable().setVerticalScroll(); + int posY = 0; + for (int i = 0; i < connectionList.size(); i++) { + DroneConnection connection = connectionList.get(i); + if (!connection.customName.toLowerCase() + .contains(searchFilter.toLowerCase())) continue; + ItemStackHandler drawitem = new ItemStackHandler(1); + drawitem.setStackInSlot(0, connection.machineItem); + DynamicPositionedRow row = new DynamicPositionedRow().setSynced(false); + MTEMultiBlockBase coreMachine = connection.machine; + int finalI = i; + row.widget( + SlotWidget.phantom(drawitem, 0) + .disableInteraction() + .setPos(0, 0)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + buttonID = finalI; + if (!widget.isClient()) widget.getContext() + .openSyncedWindow(CUSTOM_NAME_WINDOW_ID); + }) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_setname")) + .setBackground( + () -> new IDrawable[] { GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_PRINT }) + .setSize(16, 16)); + // Client can't handle unloaded machines + row.widget( + new ButtonWidget().setOnClick( + (clickData, widget) -> Optional.ofNullable(coreMachine) + .ifPresent(machine -> { + if (!getBaseMetaTileEntity().isActive()) { + player.addChatComponentMessage( + new ChatComponentTranslation("GT5U.machines.dronecentre.shutdown")); + return; + } + if (machine.isAllowedToWork()) { + machine.disableWorking(); + } else { + machine.enableWorking(); + } + })) + .setPlayClickSoundResource( + () -> Optional.ofNullable(coreMachine) + .filter(MTEMultiBlockBase::isAllowedToWork) + .map(var -> SoundResource.GUI_BUTTON_UP.resourceLocation) + .orElse(SoundResource.GUI_BUTTON_DOWN.resourceLocation)) + .setBackground( + () -> Optional.ofNullable(coreMachine) + .map( + machine -> machine.isAllowedToWork() + ? new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED, + GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON } + : new IDrawable[] { GTUITextures.BUTTON_STANDARD, + GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF }) + .orElse(new IDrawable[] { GTUITextures.OVERLAY_BUTTON_CROSS })) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer( + () -> Optional.ofNullable(coreMachine) + .map(MTEMultiBlockBase::isAllowedToWork) + .orElse(false), + var -> Optional.ofNullable(coreMachine) + .ifPresent(machine -> { + if (var) machine.enableWorking(); + else machine.disableWorking(); + })), + builder) + .addTooltip( + coreMachine != null ? StatCollector.translateToLocal("GT5U.gui.button.power_switch") + : StatCollector.translateToLocal("GT5U.gui.button.drone_outofrange")) + .setSize(16, 16)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (widget.isClient()) { + highlightMachine(player, connection.machineCoord); + player.closeScreen(); + } + }) + .addTooltip(StatCollector.translateToLocal("GT5U.gui.button.drone_highlight")) + .setBackground( + new IDrawable[] { GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_INVERT_REDSTONE }) + .setSize(16, 16)); + // Show the reason why the machine shutdown + row.widget( + new DrawableWidget().dynamicTooltip( + () -> Collections.singletonList( + Optional.ofNullable(coreMachine) + .map( + machine -> machine.getBaseMetaTileEntity() + .getLastShutDownReason() + .getDisplayString()) + .orElse(""))) + .setBackground(GTUITextures.PICTURE_STALLED_ELECTRICITY) + .setSize(16, 16) + .setEnabled( + var -> coreMachine != null && coreMachine.shouldDisplayShutDownReason() + && !coreMachine.getBaseMetaTileEntity() + .isActive() + && GTUtility.isStringValid( + coreMachine.getBaseMetaTileEntity() + .getLastShutDownReason() + .getDisplayString()) + && coreMachine.getBaseMetaTileEntity() + .wasShutdown()) + .attachSyncer( + new ShutDownReasonSyncer( + () -> Optional.ofNullable(coreMachine) + .map( + var -> coreMachine.getBaseMetaTileEntity() + .getLastShutDownReason()) + .orElse(ShutDownReasonRegistry.NONE), + reason -> Optional.ofNullable(coreMachine) + .ifPresent( + machine -> coreMachine.getBaseMetaTileEntity() + .setShutDownReason(reason))), + builder) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer( + () -> Optional.ofNullable(coreMachine) + .map( + var -> coreMachine.getBaseMetaTileEntity() + .wasShutdown()) + .orElse(false), + wasShutDown -> Optional.ofNullable(coreMachine) + .ifPresent( + machine -> coreMachine.getBaseMetaTileEntity() + .setShutdownStatus(wasShutDown))), + builder)); + row.widget( + new TextWidget( + connectionList.get(i) + .getCustomName(showLocalizedName)).setTextAlignment(Alignment.CenterLeft) + .setPos(0, 4)); + MachineContainer.widget( + row.setAlignment(MainAxisAlignment.SPACE_BETWEEN) + .setSpace(4) + .setPos(0, posY)); + posY += 20; + } + return builder.widget( + MachineContainer.setPos(10, 50) + .setSize(240, heightCoff - 60)) + .setDraggable(false) + .build(); + } + + protected ModularWindow createCustomNameWindow(final EntityPlayer player) { + ModularWindow.Builder builder = ModularWindow.builder(150, 40); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + return builder.widget( + ButtonWidget.closeWindowButton(true) + .setPos(135, 3)) + .widget( + new TextWidget(StatCollector.translateToLocal("GT5U.gui.text.drone_custom_name")) + .setTextAlignment(Alignment.Center) + .setPos(0, 5) + .setSize(150, 8)) + .widget(new TextFieldWidget() { + + @Override + public void onDestroy() { + if (isClient()) return; + getContext().closeWindow(MACHINE_LIST_WINDOW_ID); + getContext().openSyncedWindow(MACHINE_LIST_WINDOW_ID); + } + }.setGetter( + () -> connectionList.get(buttonID) + .getCustomName(false)) + .setSetter( + var -> connectionList.get(buttonID) + .setCustomName(var)) + .setTextAlignment(Alignment.CenterLeft) + .setTextColor(Color.WHITE.dark(1)) + .setFocusOnGuiOpen(true) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD_LIGHT_GRAY.withOffset(-1, -1, 2, 2)) + .setPos(10, 16) + .setSize(130, 16)) + .build(); + } + + // Just like HIGHLIGHT_INTERFACE (and exactly from it) + private void highlightMachine(EntityPlayer player, ChunkCoordinates machineCoord) { + DimensionalCoord blockPos = new DimensionalCoord( + machineCoord.posX, + machineCoord.posY, + machineCoord.posZ, + player.dimension); + WorldCoord blockPos2 = new WorldCoord((int) player.posX, (int) player.posY, (int) player.posZ); + BlockPosHighlighter.highlightBlock( + blockPos, + System.currentTimeMillis() + 500 * WorldCoord.getTaxicabDistance(blockPos, blockPos2)); + } + + public static HashMultimap getCentreMap() { + return droneMap; + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/drone/MTEHatchDroneDownLink.java b/src/main/java/gregtech/common/tileentities/machines/multi/drone/MTEHatchDroneDownLink.java new file mode 100644 index 0000000000..224f187347 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/drone/MTEHatchDroneDownLink.java @@ -0,0 +1,324 @@ +package gregtech.common.tileentities.machines.multi.drone; + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import java.util.Set; +import java.util.stream.Collectors; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.util.Vec3Impl; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.render.TextureFactory; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEHatchDroneDownLink extends MTEHatchMaintenance { + + private Vec3Impl downlinkCoord; + private DroneConnection connection; + // This has to be existed for doing random damage. + private MTEMultiBlockBase machine; + private static final IIconContainer moduleActive = new Textures.BlockIcons.CustomIcon( + "iconsets/OVERLAY_DRONE_MODULE_ACTIVE"); + + public MTEHatchDroneDownLink(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEHatchDroneDownLink(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures, false); + } + + @Override + public String[] getDescription() { + return new String[] { "Built-in powerful navigation beacon!" }; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(moduleActive) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(moduleActive) }; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchDroneDownLink(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + downlinkCoord = new Vec3Impl( + getBaseMetaTileEntity().getXCoord(), + getBaseMetaTileEntity().getYCoord(), + getBaseMetaTileEntity().getZCoord()); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (hasConnection()) { + if (connection.centre.getBaseMetaTileEntity() + .isActive()) { + doNormalMaintain(); + } else { + // Centre offline? ...do nothing. + // machine.causeMaintenanceIssue(); + } + } else { + // If the connection invalid, set it to null. + // Find connection every 10 second + if (aTick % 200 == 0) { + connection = null; + tryFindConnection(); + // Let's have some "surprise". Sorry, surprise party is over. + // if (this.machine != null && this.machine.isValid()) { + // machine.causeMaintenanceIssue(); + } + } + } + } + + private void doNormalMaintain() { + this.mWrench = this.mScrewdriver = this.mSoftHammer = this.mHardHammer = this.mCrowbar = this.mSolderingTool = true; + connection.machine.mWrench = connection.machine.mScrewdriver = connection.machine.mSoftHammer = connection.machine.mHardHammer = connection.machine.mCrowbar = connection.machine.mSolderingTool = true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + if (aBaseMetaTileEntity.isClientSide()) return true; + if (side == aBaseMetaTileEntity.getFrontFacing()) { + if (aPlayer instanceof FakePlayer) return false; + if (connection == null || !connection.isValid()) { + aPlayer.addChatComponentMessage(new ChatComponentTranslation("GT5U.machines.dronecentre.noconnection")); + return false; + } + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void onRemoval() { + if (hasConnection()) connection.machine = null; + } + + private boolean hasConnection() { + if (connection == null) return false; + if (connection.isValid()) return true; + return connection.reCheckConnection(); + } + + /** + * Find a drone connection. This will search for all DC in the same dimension, then find one in range. + */ + private void tryFindConnection() { + if (MTEDroneCentre.getCentreMap() + .containsKey(getBaseMetaTileEntity().getWorld().provider.dimensionId)) { + List target = MTEDroneCentre.getCentreMap() + .get(getBaseMetaTileEntity().getWorld().provider.dimensionId) + .stream() + .collect(Collectors.toList()); + for (MTEDroneCentre centre : target) { + if (centre.getCoords() + .withinDistance(this.downlinkCoord, centre.getRange()) + && centre.getBaseMetaTileEntity() + .isActive()) { + MTEMultiBlockBase machine = tryFindCoreGTMultiBlock(); + if (machine != null && machine.isValid()) { + this.machine = machine; + connection = new DroneConnection(machine, centre); + connection.centre.getConnectionList() + .add(connection); + return; + } + } + } + } + } + + // Find mainframe. Mainly from a method in GT_API——This will cause performance issue! Do not call it frequently. + private MTEMultiBlockBase tryFindCoreGTMultiBlock() { + Queue tQueue = new LinkedList<>(); + Set visited = new HashSet<>(80); + tQueue.add( + this.getBaseMetaTileEntity() + .getCoords()); + World world = this.getBaseMetaTileEntity() + .getWorld(); + while (!tQueue.isEmpty()) { + final ChunkCoordinates aCoords = tQueue.poll(); + final TileEntity tTileEntity; + final boolean isMachineBlock; + tTileEntity = world.getTileEntity(aCoords.posX, aCoords.posY, aCoords.posZ); + Block block = world.getBlock(aCoords.posX, aCoords.posY, aCoords.posZ); + // Plascrete block isn't registered as machineBlock, therefore we have to check it manually so that drone + // can work with cleanroom. + // Todo: loading cleanroom's config for other blocks + isMachineBlock = GregTechAPI + .isMachineBlock(block, world.getBlockMetadata(aCoords.posX, aCoords.posY, aCoords.posZ)) + || (block == GregTechAPI.sBlockReinforced + && world.getBlockMetadata(aCoords.posX, aCoords.posY, aCoords.posZ) == 2); + // See if the block itself is MultiBlock, also the one we need. + if (tTileEntity instanceof IGregTechTileEntity te + && te.getMetaTileEntity() instanceof MTEMultiBlockBase mte) + if (mte.mMaintenanceHatches.contains(this)) return mte; + + // Now see if we should add the nearby blocks to the queue: + // 1) If we've visited less than 5 blocks, then yes + // 2) If the tile says we should recursively update (pipes don't, machine blocks do) + // 3) If the block at the coordinates is marked as a machine block + if (visited.size() < 5 + || (tTileEntity instanceof IMachineBlockUpdateable + && ((IMachineBlockUpdateable) tTileEntity).isMachineBlockUpdateRecursive()) + || isMachineBlock) { + ChunkCoordinates tCoords; + + if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX + 1, aCoords.posY, aCoords.posZ))) + tQueue.add(tCoords); + if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX - 1, aCoords.posY, aCoords.posZ))) + tQueue.add(tCoords); + if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY + 1, aCoords.posZ))) + tQueue.add(tCoords); + if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY - 1, aCoords.posZ))) + tQueue.add(tCoords); + if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY, aCoords.posZ + 1))) + tQueue.add(tCoords); + if (visited.add(tCoords = new ChunkCoordinates(aCoords.posX, aCoords.posY, aCoords.posZ - 1))) + tQueue.add(tCoords); + } + } + return null; + } + + @Override + public boolean doesBindPlayerInventory() { + return false; + } + + @Override + public int getGUIWidth() { + return 150; + } + + @Override + public int getGUIHeight() { + return 40; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.widget( + ButtonWidget.closeWindowButton(true) + .setPos(135, 3)) + .widget( + new TextWidget(StatCollector.translateToLocal("GT5U.gui.text.drone_custom_name")) + .setTextAlignment(Alignment.Center) + .setPos(0, 5) + .setSize(150, 8)) + .widget( + new TextFieldWidget().setGetter(() -> connection == null ? "" : connection.getCustomName(false)) + .setSetter(var -> { if (connection != null) connection.setCustomName(var); }) + .setTextAlignment(Alignment.CenterLeft) + .setTextColor(Color.WHITE.dark(1)) + .setFocusOnGuiOpen(true) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD_LIGHT_GRAY.withOffset(-1, -1, 2, 2)) + .setPos(10, 16) + .setSize(130, 16)) + .build(); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setBoolean("connection", connection == null); + if (connection != null) { + tag.setInteger("x", connection.centreCoord.posX); + tag.setInteger("y", connection.centreCoord.posY); + tag.setInteger("z", connection.centreCoord.posZ); + tag.setString("name", connection.customName); + } + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + NBTTagCompound tag = accessor.getNBTData(); + if (tag.getBoolean("connection")) { + currenttip + .add(EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.waila.drone_downlink.noConnection")); + } else { + currenttip.add( + EnumChatFormatting.AQUA + StatCollector.translateToLocal("GT5U.waila.drone_downlink.connection") + + tag.getInteger("x") + + " " + + tag.getInteger("y") + + " " + + tag.getInteger("z")); + currenttip.add(EnumChatFormatting.YELLOW + tag.getString("name")); + } + super.getWailaBody(itemStack, currenttip, accessor, config); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_Hatch_DegasifierControlHatch.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_Hatch_DegasifierControlHatch.java deleted file mode 100644 index 3d49f05dca..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_Hatch_DegasifierControlHatch.java +++ /dev/null @@ -1,122 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_Hatch_DegasifierControlHatch extends GT_MetaTileEntity_Hatch { - - private byte outputStrength = 0; - - private static final IIconContainer textureFont = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR; - private static final IIconContainer textureFont_Glow = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR_GLOW; - - public GT_MetaTileEntity_Hatch_DegasifierControlHatch(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 0, "Outputs a control signal for the Degasser Purification Unit"); - } - - public GT_MetaTileEntity_Hatch_DegasifierControlHatch(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean allowGeneralRedstoneOutput() { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection Side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public void initDefaultModes(NBTTagCompound aNBT) { - getBaseMetaTileEntity().setActive(true); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_DegasifierControlHatch(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public String[] getDescription() { - return new String[] { "Can be installed in the Degasser Purification Unit.", - "Outputs Redstone Signal Strength based on the current control signal." }; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - outputStrength = aNBT.getByte("mOutputStrength"); - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setByte("mOutputStrength", outputStrength); - super.saveNBTData(aNBT); - } - - // Pass zero signal to disable output - public void updateOutputSignal(byte signal) { - outputStrength = signal; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (outputStrength > 0) { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, outputStrength); - } - } else { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, (byte) 0); - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), TextureFactory.builder() - .addIcon(textureFont_Glow) - .glow() - .build() }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont) }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_LensHousing.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_LensHousing.java deleted file mode 100644 index bd025e0e69..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_LensHousing.java +++ /dev/null @@ -1,52 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.client.GT_TooltipHandler; - -public class GT_MetaTileEntity_LensHousing extends GT_MetaTileEntity_Hatch_InputBus { - - public GT_MetaTileEntity_LensHousing(int id, String name, String nameRegional) { - super( - id, - name, - nameRegional, - GT_TooltipHandler.Tier.UV.ordinal(), - 1, - new String[] { "Holds a lens for UV laser focusing." }); - } - - public GT_MetaTileEntity_LensHousing(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LensHousing(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public int getSizeInventory() { - return 1; - } - - @Override - public int getCircuitSlot() { - return -1; - } - - @Override - public boolean allowSelectCircuit() { - return false; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - getBaseMetaTileEntity().add1by1Slot(builder); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_LensIndicator.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_LensIndicator.java deleted file mode 100644 index c017025d42..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_LensIndicator.java +++ /dev/null @@ -1,117 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.render.TextureFactory; - -public class GT_MetaTileEntity_LensIndicator extends GT_MetaTileEntity_Hatch { - - private boolean isOn = false; - - private static final IIconContainer textureFont = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR; - private static final IIconContainer textureFont_Glow = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR_GLOW; - - public GT_MetaTileEntity_LensIndicator(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 0, "Indicates required lens swaps."); - } - - public GT_MetaTileEntity_LensIndicator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean allowGeneralRedstoneOutput() { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection Side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void initDefaultModes(NBTTagCompound aNBT) { - getBaseMetaTileEntity().setActive(true); - } - - @Override - public String[] getDescription() { - return new String[] { "Can be installed in the UV Treatment Purification Unit.", - "Outputs Redstone Signal when a lens swap is requested." }; - } - - /** - * Updates redstone output strength based on the pH of the multiblock. - */ - public void updateRedstoneOutput(boolean enabled) { - isOn = enabled; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (isOn) { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 15); - } - } else { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 0); - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_LensIndicator(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), TextureFactory.builder() - .addIcon(textureFont_Glow) - .glow() - .build() }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont) }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationPlant.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationPlant.java deleted file mode 100644 index 42bfd06d7a..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationPlant.java +++ /dev/null @@ -1,740 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.ExoticEnergy; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_Values.AuthorNotAPenguin; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_GLOW; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_StructureUtility.ofFrame; -import static gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitBase.WATER_BOOST_BONUS_CHANCE; -import static gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitBase.WATER_BOOST_NEEDED_FLUID; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.drawable.shapes.Rectangle; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.Scrollable; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.gui.modularui.widget.ShutDownReasonSyncer; -import gregtech.common.gui.modularui.widget.TextButtonWidget; - -public class GT_MetaTileEntity_PurificationPlant - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final String STRUCTURE_PIECE_MAIN_SURVIVAL = "main_survival"; - - /** - * Maximum distance in each axis between the purification plant main controller and the controller blocks of the - * purification plant units. - */ - public static final int MAX_UNIT_DISTANCE = 32; - - /** - * Time in ticks for a full processing cycle to complete. - */ - public static final int CYCLE_TIME_TICKS = 120 * SECONDS; - - /** - * Stores all purification units linked to this controller. - * Normally all units in this list should be valid and unique, if not then there is a bug where they are not being - * unlinked properly on block destruction/relinking. - */ - private final List mLinkedUnits = new ArrayList<>(); - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, PurificationPlantStructureString.STRUCTURE_STRING) - // Create an identical structure for survival autobuild, with water replaced with air - .addShape( - STRUCTURE_PIECE_MAIN_SURVIVAL, - Arrays.stream(PurificationPlantStructureString.STRUCTURE_STRING) - .map( - sa -> Arrays.stream(sa) - .map(s -> s.replaceAll("F", " ")) - .toArray(String[]::new)) - .toArray(String[][]::new)) - // Superplasticizer-treated high strength concrete - .addElement('A', ofBlock(GregTech_API.sBlockCasings9, 3)) - // Sterile Water Plant Casing - .addElement('B', ofBlock(GregTech_API.sBlockCasings9, 4)) - // Reinforced Sterile Water Plant Casing - .addElement('C', ofBlock(GregTech_API.sBlockCasings9, 5)) - // Tinted Industrial Glass - .addElement('D', ofBlockAnyMeta(GregTech_API.sBlockTintedGlass, 0)) - .addElement('F', ofBlock(Blocks.water, 0)) - .addElement('G', ofFrame(Materials.Tungsten)) - // Hatch space - .addElement( - 'H', - ofChain( - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeastList(t.getAllowedHatches()) - .dot(1) - .casingIndex(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings9, 4)) - .build()), - ofBlock(GregTech_API.sBlockCasings9, 4))) - .build(); - - public GT_MetaTileEntity_PurificationPlant(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PurificationPlant(String aName) { - super(aName); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 6, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN_SURVIVAL, stackSize, 3, 6, 0, elementBudget, env, true); - if (built == -1) { - GT_Utility.sendChatToPlayer( - env.getActor(), - EnumChatFormatting.GREEN + "Auto placing done ! Now go place the water yourself !"); - return 0; - } - return built; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Purification Plant") - .addInfo("Main controller block for the Water Purification Plant.") - .addInfo( - "Freely place " + EnumChatFormatting.YELLOW - + "Purification Units " - + EnumChatFormatting.GRAY - + "within " - + EnumChatFormatting.RED - + MAX_UNIT_DISTANCE - + EnumChatFormatting.GRAY - + " blocks along each axis.") - .addInfo("Left click this controller with a data stick, then right click a purification unit to link.") - .addInfo("Supplies power to linked purification units. This multiblock accepts TecTech energy hatches.") - .addSeparator() - .addInfo( - "Works in fixed time processing cycles of " + EnumChatFormatting.RED - + CYCLE_TIME_TICKS / SECONDS - + EnumChatFormatting.GRAY - + " seconds.") - .addInfo("All linked units follow this cycle.") - .addSeparator() - .addInfo("Every recipe has a base chance of success. Success rate can be boosted") - .addInfo("by using a portion of the target output as a secondary input.") - .addInfo( - EnumChatFormatting.RED + GT_Utility.formatNumbers(WATER_BOOST_NEEDED_FLUID * 100) - + "%" - + EnumChatFormatting.GRAY - + " of output yield will be consumed in exchange for an") - .addInfo( - "additive " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(WATER_BOOST_BONUS_CHANCE * 100) - + "%" - + EnumChatFormatting.GRAY - + " increase to success.") - .addInfo( - "On recipe failure, each purification unit has a " + EnumChatFormatting.RED - + "50%" - + EnumChatFormatting.GRAY - + " chance") - .addInfo("to return water of the same quality as the input or lower.") - .addSeparator() - .addInfo("Every purification unit has a configuration window to configure maximum parallel amount.") - .addInfo( - "This will only scale purified water I/O and power usage. Other catalysts and outputs are unchanged.") - .addSeparator() - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "Contaminants and ionized particles in water can cause significant imperfections in delicate") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "processes related to the cutting and engraving of silicon wafers and chips. It is crucial that") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "the water is systematically purified through a series of increasingly precise and complex") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "purification processes, and this multiblock is the heart of the operation.") - .addInfo(AuthorNotAPenguin) - .beginStructureBlock(7, 9, 8, false) - .addCasingInfoExactlyColored( - "Superplasticizer-Treated High Strength Concrete", - EnumChatFormatting.GRAY, - 56, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Sterile Water Plant Casing", - EnumChatFormatting.GRAY, - 77, - EnumChatFormatting.GOLD, - false) - .addCasingInfoRangeColored( - "Reinforced Sterile Water Plant Casing", - EnumChatFormatting.GRAY, - 71, - 72, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Tungsten Frame Box", - EnumChatFormatting.GRAY, - 30, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Tinted Industrial Glass", - EnumChatFormatting.GRAY, - 6, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored("Reinforced Door", EnumChatFormatting.GRAY, 1, EnumChatFormatting.GOLD, false) - .addController("Front center") - .addEnergyHatch(EnumChatFormatting.GOLD + "1", 1) - .addMaintenanceHatch(EnumChatFormatting.GOLD + "1", 1) - .addStructureInfo("Requires water to be placed in the tank.") - .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PurificationPlant(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean active, boolean redstoneLevel) { - if (side == facing) { - if (active) return new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings9, 4)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings9, 4)), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings9, 4)) }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - private List> getAllowedHatches() { - return ImmutableList.of(Maintenance, Energy, ExoticEnergy); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - // Check self - if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 6, 0)) { - return false; - } - - // Check hatches - if (!checkHatches()) { - return false; - } - - // using nano forge method of detecting hatches. - if (!checkExoticAndNormalEnergyHatches()) { - return false; - } - - return true; - } - - private boolean checkHatches() { - // Exactly one maintenance hatch is required - return mMaintenanceHatches.size() == 1; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (aBaseMetaTileEntity.isServerSide()) { - // Trigger structure check of linked units, but never all in the same tick, and at most once per cycle. - for (int i = 0; i < mLinkedUnits.size(); ++i) { - if (aTick % CYCLE_TIME_TICKS == i) { - LinkedPurificationUnit unit = mLinkedUnits.get(i); - boolean structure = unit.metaTileEntity() - .checkStructure(true); - // If unit was active but deformed, set as inactive - if (unit.isActive() && !structure) { - unit.setActive(false); - // Also remember to recalculate power usage, since otherwise the deformed unit will - // keep drawing power - this.lEUt = -calculateEffectivePowerUsage(); - } - } - } - } - } - - @Override - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - updateCycleProgress(); - // Calculate efficiency based on maintenance issues - if (mMaxProgresstime > 0) { - mEfficiency = Math.max( - 0, - Math.min( - mEfficiency + mEfficiencyIncrease, - getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000))); - } - } - - private void updateCycleProgress() { - // Since the plant does not run recipes directly, we just continuously loop the base cycle - if (mMachine) { - // cycle is running, so simply advance it - if (mMaxProgresstime > 0) { - // onRunningTick is responsible for draining power - if (onRunningTick(mInventory[1])) { - markDirty(); - mProgresstime += 1; - // Update progress time for active units - for (LinkedPurificationUnit unit : this.mLinkedUnits) { - if (unit.isActive()) { - GT_MetaTileEntity_PurificationUnitBase metaTileEntity = unit.metaTileEntity(); - metaTileEntity.mProgresstime = mProgresstime; - } - } - // Cycle finished - if (mProgresstime >= mMaxProgresstime) { - this.endCycle(); - } - } else { - // Power drain failed, shut down all other units due to power loss. - // Note that we do not need to shut down self, as this is done in - // onRunningTick already - for (LinkedPurificationUnit unit : mLinkedUnits) { - if (unit.isActive()) { - unit.metaTileEntity() - .stopMachine(ShutDownReasonRegistry.POWER_LOSS); - } - } - } - } - - // No cycle running, start a new cycle if the machine is turned on - if (mMaxProgresstime == 0 && isAllowedToWork()) { - this.startCycle(); - } - } - } - - private void startCycle() { - mProgresstime = 0; - mMaxProgresstime = CYCLE_TIME_TICKS; - mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - - // Find active units and notify them that the cycle started - for (LinkedPurificationUnit unit : this.mLinkedUnits) { - GT_MetaTileEntity_PurificationUnitBase metaTileEntity = unit.metaTileEntity(); - PurificationUnitStatus status = metaTileEntity.status(); - // Unit needs to be online to be considered active. - if (status == PurificationUnitStatus.ONLINE) { - // Perform recipe check for unit and start it if successful - if (metaTileEntity.doPurificationRecipeCheck()) { - unit.setActive(true); - metaTileEntity.startCycle(mMaxProgresstime, mProgresstime); - } - } - } - - // After activating all units, calculate power usage - lEUt = -calculateEffectivePowerUsage(); - } - - private void endCycle() { - mMaxProgresstime = 0; - - // Mark all units as inactive and reset their progress time - for (LinkedPurificationUnit unit : this.mLinkedUnits) { - GT_MetaTileEntity_PurificationUnitBase metaTileEntity = unit.metaTileEntity(); - // If this unit was active, end the cycle - if (unit.isActive()) { - metaTileEntity.endCycle(); - } - unit.setActive(false); - } - } - - /** - * Calculate power usage of all units - */ - private long calculateEffectivePowerUsage() { - long euT = 0; - for (LinkedPurificationUnit unit : mLinkedUnits) { - if (unit.isActive()) { - euT += unit.metaTileEntity() - .getActualPowerUsage(); - } - } - return euT; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - public void registerLinkedUnit(GT_MetaTileEntity_PurificationUnitBase unit) { - this.mLinkedUnits.add(new LinkedPurificationUnit(unit)); - } - - public void unregisterLinkedUnit(GT_MetaTileEntity_PurificationUnitBase unit) { - this.mLinkedUnits.removeIf(link -> link.metaTileEntity() == unit); - } - - @Override - public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (!(aPlayer instanceof EntityPlayerMP)) return; - - // Save link data to data stick, very similar to Crafting Input Buffer. - - ItemStack dataStick = aPlayer.inventory.getCurrentItem(); - if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) return; - - NBTTagCompound tag = new NBTTagCompound(); - tag.setString("type", "PurificationPlant"); - tag.setInteger("x", aBaseMetaTileEntity.getXCoord()); - tag.setInteger("y", aBaseMetaTileEntity.getYCoord()); - tag.setInteger("z", aBaseMetaTileEntity.getZCoord()); - - dataStick.stackTagCompound = tag; - dataStick.setStackDisplayName( - "Purification Plant Link Data Stick (" + aBaseMetaTileEntity - .getXCoord() + ", " + aBaseMetaTileEntity.getYCoord() + ", " + aBaseMetaTileEntity.getZCoord() + ")"); - aPlayer.addChatMessage(new ChatComponentText("Saved Link Data to Data Stick")); - } - - @Override - public String[] getInfoData() { - var ret = new ArrayList(); - // Show linked purification units and their status - ret.add("Linked Purification Units: "); - for (LinkedPurificationUnit unit : this.mLinkedUnits) { - String text = EnumChatFormatting.AQUA + unit.metaTileEntity() - .getLocalName() + ": "; - PurificationUnitStatus status = unit.metaTileEntity() - .status(); - switch (status) { - case ONLINE -> { - text = text + EnumChatFormatting.GREEN + "Online"; - } - case DISABLED -> { - text = text + EnumChatFormatting.YELLOW + "Disabled"; - } - case INCOMPLETE_STRUCTURE -> { - text = text + EnumChatFormatting.RED + "Incomplete Structure"; - } - } - ret.add(text); - } - return ret.toArray(new String[0]); - } - - @Override - public void onBlockDestroyed() { - // When the controller is destroyed we want to notify all currently linked units - for (LinkedPurificationUnit unit : this.mLinkedUnits) { - unit.metaTileEntity() - .unlinkController(); - } - super.onBlockDestroyed(); - } - - private void drawTopText(DynamicPositionedColumn screenElements) { - screenElements.setSynced(false) - .setSpace(0) - .setPos(10, 8); - - screenElements - .widget( - new TextWidget(GT_Utility.trans("138", "Incomplete Structure.")).setDefaultColor(EnumChatFormatting.RED) - .setEnabled(widget -> !mMachine)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val)); - - screenElements.widget( - new TextWidget("Hit with Soft Mallet to start.").setDefaultColor(EnumChatFormatting.BLACK) - .setEnabled( - widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && !getBaseMetaTileEntity().isActive())) - .widget( - new FakeSyncWidget.IntegerSyncer( - () -> getBaseMetaTileEntity().getErrorDisplayID(), - val -> getBaseMetaTileEntity().setErrorDisplayID(val))) - .widget( - new FakeSyncWidget.BooleanSyncer( - () -> getBaseMetaTileEntity().isActive(), - val -> getBaseMetaTileEntity().setActive(val))); - screenElements.widget( - new TextWidget(GT_Utility.trans("142", "Running perfectly.")).setDefaultColor(EnumChatFormatting.GREEN) - .setEnabled( - widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && getBaseMetaTileEntity().isActive())); - screenElements.widget( - TextWidget.dynamicString( - () -> getBaseMetaTileEntity().getLastShutDownReason() - .getDisplayString()) - .setSynced(false) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled( - widget -> shouldDisplayShutDownReason() && !getBaseMetaTileEntity().isActive() - && GT_Utility.isStringValid( - getBaseMetaTileEntity().getLastShutDownReason() - .getDisplayString()) - && getBaseMetaTileEntity().wasShutdown())) - .widget( - new ShutDownReasonSyncer( - () -> getBaseMetaTileEntity().getLastShutDownReason(), - reason -> getBaseMetaTileEntity().setShutDownReason(reason))) - .widget( - new FakeSyncWidget.BooleanSyncer( - () -> getBaseMetaTileEntity().wasShutdown(), - wasShutDown -> getBaseMetaTileEntity().setShutdownStatus(wasShutDown))); - screenElements.widget( - TextWidget.dynamicString(this::generateCurrentRecipeInfoString) - .setSynced(false) - .setTextAlignment(Alignment.CenterLeft) - .setEnabled(widget -> (mMaxProgresstime > 0))) - .widget(new FakeSyncWidget.IntegerSyncer(() -> mProgresstime, val -> mProgresstime = val)) - .widget(new FakeSyncWidget.IntegerSyncer(() -> mMaxProgresstime, val -> mMaxProgresstime = val)); - } - - private final int STATUS_WINDOW_ID = 10; - - private ModularWindow createStatusWindow(final EntityPlayer player) { - final int windowWidth = 260; - final int windowHeight = 200; - ModularWindow.Builder builder = ModularWindow.builder(windowWidth, windowHeight); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.widget( - ButtonWidget.closeWindowButton(true) - .setPos(windowWidth - 15, 3)); - - // Title widget - builder.widget( - new TextWidget(EnumChatFormatting.BOLD + "Purification Unit Status").setTextAlignment(Alignment.Center) - .setPos(5, 10) - .setSize(windowWidth, 8)); - - int currentYPosition = 20; - Scrollable mainDisp = new Scrollable().setVerticalScroll(); - - int rowHeight = 20; - for (int i = 0; i < this.mLinkedUnits.size(); i++) { - mainDisp.widget(makeUnitStatusWidget(mLinkedUnits.get(i)).setPos(0, rowHeight * (i + 1))); - } - - builder.widget( - mainDisp.setPos(5, currentYPosition) - .setSize(windowWidth - 10, windowHeight - currentYPosition - 5)); - return builder.build(); - } - - private Widget makeStatusWindowButton() { - TextButtonWidget widget = (TextButtonWidget) new TextButtonWidget("Status").setLeftMargin(4) - .setSize(40, 16) - .setPos(10, 40); - widget.button() - .setOnClick( - (clickData, w) -> { - if (!w.isClient()) w.getContext() - .openSyncedWindow(STATUS_WINDOW_ID); - }) - .setBackground(GT_UITextures.BUTTON_STANDARD); - widget.text() - .setTextAlignment(Alignment.CenterLeft) - .setDefaultColor(EnumChatFormatting.BLACK); - return widget; - } - - private Widget makeUnitStatusWidget(LinkedPurificationUnit unit) { - // Draw small machine controller icon - DynamicPositionedRow row = new DynamicPositionedRow(); - ItemStackHandler machineIcon = new ItemStackHandler(1); - machineIcon.setStackInSlot( - 0, - unit.metaTileEntity() - .getStackForm(1)); - - row.widget( - SlotWidget.phantom(machineIcon, 0) - .disableInteraction() - .setPos(0, 0)) - .setSize(20, 20); - - // Display machine name and status - String name = unit.metaTileEntity() - .getLocalName(); - - row.widget( - TextWidget.dynamicString(() -> name + " " + unit.getStatusString()) - .setSynced(false) - .setTextAlignment(Alignment.CenterLeft) - .setPos(25, 0) - .setSize(0, 20)) - .widget(new FakeSyncWidget.StringSyncer(() -> name, _name -> {})) - .widget( - unit.metaTileEntity() - .makeSyncerWidgets()) - .widget(new FakeSyncWidget.BooleanSyncer(unit::isActive, unit::setActive));; - - return row; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - - buildContext.addSyncedWindow(STATUS_WINDOW_ID, this::createStatusWindow); - - // Draw basic recipe info - final DynamicPositionedColumn controlTextArea = new DynamicPositionedColumn(); - drawTopText(controlTextArea); - builder.widget(controlTextArea); - - // Draw line separator - builder.widget( - new Rectangle().setColor(Color.rgb(114, 120, 139)) - .asWidget() - .setSizeProvider((screenSize, window, parent) -> new Size(window.getSize().width - 8, 2)) - .setPos(3, 32)); - - // Add status window button - builder.widget(makeStatusWindowButton()); - - // Add parallel count number input - - builder.widget(createPowerSwitchButton(builder)); - - // Add value syncers, note that we do this here so - // everything is updated once the status gui opens - addSyncers(builder); - } - - private void addSyncers(ModularWindow.Builder builder) { - // Sync connection list to client - builder.widget(new FakeSyncWidget.ListSyncer<>(() -> mLinkedUnits, links -> { - mLinkedUnits.clear(); - mLinkedUnits.addAll(links); - }, (buffer, link) -> { - // Try to save link data to NBT, so we can reconstruct it on client - try { - buffer.writeNBTTagCompoundToBuffer(link.writeLinkDataToNBT()); - } catch (IOException e) { - GT_Log.err.println(e.getCause()); - } - }, buffer -> { - // Try to load link data from NBT compound as constructed above. - try { - return new LinkedPurificationUnit(buffer.readNBTTagCompoundFromBuffer()); - } catch (IOException e) { - GT_Log.err.println(e.getCause()); - } - return null; - })); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitBase.java deleted file mode 100644 index 075ddc74c2..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitBase.java +++ /dev/null @@ -1,805 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static net.minecraft.util.StatCollector.translateToLocal; - -import java.util.ArrayList; -import java.util.Comparator; -import java.util.EnumSet; -import java.util.List; -import java.util.Set; -import java.util.concurrent.ThreadLocalRandom; -import java.util.stream.Stream; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.VoidingMode; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.metadata.PurificationPlantBaseChanceKey; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Casings_Abstract; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -/** - * Base class for purification units. This class handles all shared behaviour between units. - * When inheriting from this, make sure to call super.loadNBTData() and super.saveNBTData() - * if you override these methods, or linking will break. - */ -public abstract class GT_MetaTileEntity_PurificationUnitBase> - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase { - - /** - * Ratio of output fluid that needs to be inserted back as input to trigger a "water boost". - * Must be in [0, 1]. - */ - public static final float WATER_BOOST_NEEDED_FLUID = 0.1f; - /** - * Additive bonus to success chance when water boost is active. - * Must be in [0, 1] - */ - public static final float WATER_BOOST_BONUS_CHANCE = 0.15f; - - /** - * Small internal enum to report back the various error cases when linking purification units to the - * purification plant. - */ - private enum LinkResult { - /** - * Link target was out of range of the main controller - */ - TOO_FAR, - /** - * No valid GT_MetaTileEntity_PurificationPlant was found at the link target position. - */ - NO_VALID_PLANT, - /** - * Link successful - */ - SUCCESS, - } - - /** - * Coordinates of the main purification plant controller. These can be used to find the controller again - * on world load. - */ - private int controllerX, controllerY, controllerZ; - - /** - * Whether a controller was previously set. - */ - private boolean controllerSet = false; - - /** - * Pointer to the main purification plant controller. - */ - private GT_MetaTileEntity_PurificationPlant controller = null; - - /** - * The current recipe being run in the purification unit. Note that purification unit recipes are a bit special, - * so input and output in the recipe might not exactly match the required inputs and produced outputs. - * For more information, always look at the purification unit tooltip and implementation. - */ - protected GT_Recipe currentRecipe = null; - - /** - * Current chance of the recipe succeeding, always in [0, 100]. A chance above 100 will be interpreted as 100. - */ - protected float currentRecipeChance = 0.0f; - - /** - * Configured parallel amount. Only water I/O and power scale. - */ - protected int maxParallel = 1; - - protected int effectiveParallel = 1; - - protected ArrayList storedFluids = null; - - protected GT_MetaTileEntity_PurificationUnitBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - protected GT_MetaTileEntity_PurificationUnitBase(String aName) { - super(aName); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean doRandomMaintenanceDamage() { - // The individual purification unit structures cannot have maintenance issues, so do nothing. - return true; - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } - - @Override - protected void setHatchRecipeMap(GT_MetaTileEntity_Hatch_Input hatch) { - // Do nothing, we don't want to lock hatches to recipe maps since this can cause - // them to reject our catalyst fluids - } - - /** - * Used to more easily grab a correct texture index from a block + meta. - * - * @param block Block to use as base. Must implement GT_Block_Casings_Abstract - * @param meta Metadata of the block to pick the actual block - * @return The correct index into the global texture atlas. - */ - protected static int getTextureIndex(Block block, int meta) { - return ((GT_Block_Casings_Abstract) block).getTextureIndex(meta); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - super.onPostTick(aBaseMetaTileEntity, aTimer); - // Try to re-link to controller periodically, for example on game load. - if (aTimer % 100 == 5 && controllerSet && getController() == null) { - trySetControllerFromCoord(controllerX, controllerY, controllerZ); - } - } - - @Override - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - // Main controller updates progress time. We can do I/O logic here. - // The logic for operating purification units is typically implemented by overriding this behaviour. - if (mMaxProgresstime > 0) { - this.markDirty(); - // Do not take maintenance into consideration, because purification units do not get - // maintenance issues. - // Technically, this entire efficiency stat is a bit useless for purification units, since - // their power draw does not actually depend on it, but it's nice to keep around for consistency with other - // multiblocks. This way, you still gradually see the efficiency go down when it powers down. - mEfficiency = Math.max(0, Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]))); - } - } - - protected CheckRecipeResult findRecipeForInputs(FluidStack[] fluidInputs, ItemStack... itemInputs) { - RecipeMap recipeMap = this.getRecipeMap(); - - // Grab a stream of recipes and find the one with the highest success chance - Stream recipes = recipeMap.findRecipeQuery() - .fluids(fluidInputs) - .items(itemInputs) - .findAll(); - GT_Recipe recipe = recipes - .max(Comparator.comparing(r -> r.getMetadataOrDefault(PurificationPlantBaseChanceKey.INSTANCE, 0.0f))) - .orElse(null); - - if (recipe == null) { - return CheckRecipeResultRegistry.NO_RECIPE; - } - - if (this.protectsExcessFluid() && !this.canOutputAll(recipe.mFluidOutputs)) { - return CheckRecipeResultRegistry.FLUID_OUTPUT_FULL; - } - - if (this.protectsExcessItem() && !this.canOutputAll(recipe.mOutputs)) { - return CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; - } - - this.currentRecipe = recipe; - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - /** - * By default, only checks fluid input. - * - * @return - */ - @NotNull - @Override - public CheckRecipeResult checkProcessing() { - this.storedFluids = this.getStoredFluids(); - CheckRecipeResult result = overrideRecipeCheck(); - if (result == null) result = findRecipeForInputs(storedFluids.toArray(new FluidStack[] {})); - - // If we had a successful result, calculate effective parallel - if (result.wasSuccessful()) { - FluidStack waterInput = this.currentRecipe.mFluidInputs[0]; - // Count total available purified water input of the previous step - long amountAvailable = 0; - for (FluidStack fluid : this.storedFluids) { - if (fluid.isFluidEqual(waterInput)) { - amountAvailable += fluid.amount; - } - } - // Determine effective parallel - effectiveParallel = (int) Math.min(maxParallel, Math.floorDiv(amountAvailable, waterInput.amount)); - // This should not happen, throw an error - if (effectiveParallel == 0) return CheckRecipeResultRegistry.INTERNAL_ERROR; - } - - return result; - } - - public CheckRecipeResult overrideRecipeCheck() { - return null; - } - - /** - * Equivalent to checkRecipe(), but public because the purification plant needs to access it and checkRecipe() - * is protected. - * - * @return True if successfully found a recipe and/or started processing/ - */ - public boolean doPurificationRecipeCheck() { - effectiveParallel = 1; - return this.checkRecipe(); - } - - /** - * Get the success chance of the recipe, from 0 to 100. Never call this while a recipe is running, because items - * or modifiers used to boost might disappear by the time recipe check comes around, - * which would invalidate this result. - */ - public float calculateBoostedSuccessChance() { - // If this.currentRecipe is null, there is a bug, so throwing a NPE is fine. - float recipeChance = this.currentRecipe.getMetadataOrDefault(PurificationPlantBaseChanceKey.INSTANCE, 0.0f); - // Apply water boost if available. - if (isWaterBoosted(this.currentRecipe)) { - recipeChance = Math.min(recipeChance + WATER_BOOST_BONUS_CHANCE * 100.0f, 100.0f); - } - return recipeChance; - } - - /** - * By default, the final recipe success chance is simply the success chance calculated on recipe check. - * This applies water boosts when needed to the base chance. Purification units can override this to perform - * more complex success chance calculations, that even take into account what happened during the runtime of the - * recipe. - * - * @return The success chance of the recipe, at the point in time the outputs are to be produced. - */ - public float calculateFinalSuccessChance() { - return this.currentRecipeChance; - } - - /** - * Get the tier of water this unit makes. Starts at 1. - */ - public abstract int getWaterTier(); - - /** - * Get the amount of water needed to execute a water boost, in mb. - */ - public FluidStack getWaterBoostAmount(GT_Recipe recipe) { - // Recipes should always be constructed so that output water is always the first fluid output - FluidStack outputWater = recipe.mFluidOutputs[0]; - int amount = Math.round(outputWater.amount * WATER_BOOST_NEEDED_FLUID); - return new FluidStack(outputWater.getFluid(), amount); - } - - /** - * Returns true if this purification unit contains enough water to apply a water boost for the selected recipe. - * This should only be called during recipe check! Never call this while a recipe is running, because water used to - * boost might disappear by the time recipe check comes around, which would invalidate this result. - * - * @param recipe The recipe to check the water boost of - */ - public boolean isWaterBoosted(GT_Recipe recipe) { - FluidStack inputWater = getWaterBoostAmount(recipe); - // Simulate input drain to see if we can water boost - return depleteInput(inputWater, true); - } - - /** - * Consumes all fluid inputs of the current recipe. - */ - public void depleteRecipeInputs() { - for (FluidStack input : this.currentRecipe.mFluidInputs) { - FluidStack copyWithParallel = input.copy(); - copyWithParallel.amount = input.amount * effectiveParallel; - this.depleteInput(copyWithParallel); - } - } - - /** - * Called after a recipe is found and accepted. - * - * @param cycleTime Time for a full cycle to complete - * @param progressTime Current progress time - */ - public void startCycle(int cycleTime, int progressTime) { - // Important to calculate this before depleting inputs, otherwise we may get issues with boost items - // disappearing. - this.currentRecipeChance = this.calculateBoostedSuccessChance(); - - // Deplete inputs from water boost if enabled. - if (isWaterBoosted(this.currentRecipe)) { - FluidStack inputWater = this.getWaterBoostAmount(this.currentRecipe); - this.depleteInput(inputWater); - } - - // Consume inputs - this.depleteRecipeInputs(); - // Initialize recipe and progress information. - this.mMaxProgresstime = cycleTime; - this.mProgresstime = progressTime; - this.mEfficiency = 10000; - // These need to be set so the GUI code can display the produced outputs - - // Make sure to scale purified water output with parallel amount. - // Make sure to make a full copy of the array, so we don't go modifying recipes - FluidStack[] fluidOutputs = new FluidStack[this.currentRecipe.mFluidOutputs.length]; - for (int i = 0; i < this.currentRecipe.mFluidOutputs.length; ++i) { - fluidOutputs[i] = this.currentRecipe.mFluidOutputs[i].copy(); - } - fluidOutputs[0].amount *= effectiveParallel; - this.mOutputFluids = fluidOutputs; - this.mOutputItems = this.currentRecipe.mOutputs; - // Set this value, so it can be displayed in Waila. Note that the logic for the units is - // specifically overridden so setting this value does not actually drain power. - // Instead, power is drained by the main purification plant controller. - this.lEUt = -this.getActualPowerUsage(); - } - - public void addRecipeOutputs() { - ThreadLocalRandom random = ThreadLocalRandom.current(); - this.addFluidOutputs(mOutputFluids); - // If this recipe has random item outputs, roll on it and add outputs - if (this.currentRecipe.mChances != null) { - // Roll on each output individually - for (int i = 0; i < this.currentRecipe.mOutputs.length; ++i) { - // Recipes store probabilities as a value ranging from 1-10000 - int roll = random.nextInt(10000); - if (roll <= this.currentRecipe.mChances[i]) { - this.addOutput(this.currentRecipe.mOutputs[i]); - } - } - } else { - // Guaranteed item output - for (int i = 0; i < this.currentRecipe.mOutputs.length; ++i) { - this.addOutput(this.currentRecipe.mOutputs[i]); - } - } - } - - public void endCycle() { - ThreadLocalRandom random = ThreadLocalRandom.current(); - - // First see if the recipe succeeded. For some reason random.nextFloat does not compile, so we use this - // hack instead. - float successRoll = random.nextInt(0, 10000) / 100.0f; - if (successRoll <= calculateFinalSuccessChance()) { - addRecipeOutputs(); - } else { - onRecipeFail(); - } - - // Reset recipe values for next iteration - this.mMaxProgresstime = 0; - this.mProgresstime = 0; - this.lEUt = 0; - this.mEfficiency = 0; - this.currentRecipe = null; - this.currentRecipeChance = 0.0f; - this.mOutputItems = null; - this.mOutputFluids = null; - this.effectiveParallel = 1; - } - - /** - * Outputs fluid when recipe fails. - */ - private void onRecipeFail() { - // Possibly output lower quality water. - // Note that if there is no space for this, it will be voided regardless of fluid void setting! - FluidStack outputWater = getDegradedOutputWater(); - this.addOutput(outputWater); - } - - /** - * On recipe fail, water quality may degrade to the same or lower tier. This function returns the water to output - * in this case, or null if no water is produced at all. - */ - private FluidStack getDegradedOutputWater() { - ThreadLocalRandom random = ThreadLocalRandom.current(); - int roll = random.nextInt(0, 2); - // 50% chance to not output anything at all - if (roll == 0) return null; - - for (int waterTier = getWaterTier(); waterTier > 0; --waterTier) { - // 50% chance every time of degrading into the previous tier - roll = random.nextInt(0, 2); - if (roll == 1) { - // Rolled good, stop the loop and output water below current tier - int amount = mOutputFluids[0].amount; - // For tier 1, this is distilled water, so we cannot use the helper function! - if (waterTier == 1) { - return GT_ModHandler.getDistilledWater(amount); - } - Materials water = PurifiedWaterHelpers.getPurifiedWaterTier(waterTier - 1); - return water.getFluid(amount); - } - // Bad roll, keep looping and degrade quality even further - } - // Rolled bad on every iteration, no output for you - return null; - } - - /** - * Get the EU/t usage of this unit while it is running. - */ - public abstract long getBasePowerUsage(); - - public long getActualPowerUsage() { - return getBasePowerUsage() * effectiveParallel; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - // The individual purification unit structures cannot have maintenance issues, so fix them all. - this.mCrowbar = true; - this.mWrench = true; - this.mHardHammer = true; - this.mSoftHammer = true; - this.mSolderingTool = true; - this.mScrewdriver = true; - return true; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - // If a linked controller was found, load its coordinates. - // The unit will try to link to the real controller block periodically in onPostTick() - // We cannot do this linking here yet because the controller block might not be loaded yet. - // TODO: We could try though? - if (aNBT.hasKey("controller")) { - NBTTagCompound controllerNBT = aNBT.getCompoundTag("controller"); - controllerX = controllerNBT.getInteger("x"); - controllerY = controllerNBT.getInteger("y"); - controllerZ = controllerNBT.getInteger("z"); - controllerSet = true; - } - currentRecipeChance = aNBT.getFloat("currentRecipeChance"); - if (aNBT.hasKey("configuredParallel")) { - maxParallel = aNBT.getInteger("configuredParallel"); - } - if (aNBT.hasKey("effectiveParallel")) { - effectiveParallel = aNBT.getInteger("effectiveParallel"); - } - } - - public NBTTagCompound saveLinkDataToNBT() { - NBTTagCompound controllerNBT = new NBTTagCompound(); - controllerNBT.setInteger("x", controllerX); - controllerNBT.setInteger("y", controllerY); - controllerNBT.setInteger("z", controllerZ); - return controllerNBT; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (controllerSet) { - NBTTagCompound controllerNBT = saveLinkDataToNBT(); - aNBT.setTag("controller", controllerNBT); - } - aNBT.setFloat("currentRecipeChance", currentRecipeChance); - aNBT.setInteger("configuredParallel", maxParallel); - aNBT.setInteger("effectiveParallel", effectiveParallel); - } - - private LinkResult trySetControllerFromCoord(int x, int y, int z) { - IGregTechTileEntity ourBaseMetaTileEntity = this.getBaseMetaTileEntity(); - // First check whether the controller we try to link to is within range. The range is defined - // as a max distance in each axis. - if (Math.abs(ourBaseMetaTileEntity.getXCoord() - x) > GT_MetaTileEntity_PurificationPlant.MAX_UNIT_DISTANCE) - return LinkResult.TOO_FAR; - if (Math.abs(ourBaseMetaTileEntity.getYCoord() - y) > GT_MetaTileEntity_PurificationPlant.MAX_UNIT_DISTANCE) - return LinkResult.TOO_FAR; - if (Math.abs(ourBaseMetaTileEntity.getZCoord() - z) > GT_MetaTileEntity_PurificationPlant.MAX_UNIT_DISTANCE) - return LinkResult.TOO_FAR; - - // Find the block at the requested coordinated and check if it is a purification plant controller. - var tileEntity = getBaseMetaTileEntity().getWorld() - .getTileEntity(x, y, z); - if (tileEntity == null) return LinkResult.NO_VALID_PLANT; - if (!(tileEntity instanceof IGregTechTileEntity gtTileEntity)) return LinkResult.NO_VALID_PLANT; - var metaTileEntity = gtTileEntity.getMetaTileEntity(); - if (!(metaTileEntity instanceof GT_MetaTileEntity_PurificationPlant)) return LinkResult.NO_VALID_PLANT; - - // Before linking, unlink from current controller, so we don't end up with units linked to multiple - // controllers. - GT_MetaTileEntity_PurificationPlant oldController = getController(); - if (oldController != null) { - oldController.unregisterLinkedUnit(this); - this.unlinkController(); - } - - // Now link to new controller - controllerX = x; - controllerY = y; - controllerZ = z; - controllerSet = true; - controller = (GT_MetaTileEntity_PurificationPlant) metaTileEntity; - controller.registerLinkedUnit(this); - return LinkResult.SUCCESS; - } - - private boolean tryLinkDataStick(EntityPlayer aPlayer) { - // Make sure the held item is a data stick - ItemStack dataStick = aPlayer.inventory.getCurrentItem(); - if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) { - return false; - } - - // Make sure this data stick is a proper purification plant link data stick. - if (!dataStick.hasTagCompound() || !dataStick.stackTagCompound.getString("type") - .equals("PurificationPlant")) { - return false; - } - - // Now read link coordinates from the data stick. - NBTTagCompound nbt = dataStick.stackTagCompound; - int x = nbt.getInteger("x"); - int y = nbt.getInteger("y"); - int z = nbt.getInteger("z"); - - // Try to link, and report the result back to the player. - LinkResult result = trySetControllerFromCoord(x, y, z); - if (result == LinkResult.SUCCESS) { - aPlayer.addChatMessage(new ChatComponentText("Link successful")); - } else if (result == LinkResult.TOO_FAR) { - aPlayer.addChatMessage(new ChatComponentText("Link failed: Out of range.")); - } else if (result == LinkResult.NO_VALID_PLANT) { - aPlayer.addChatMessage(new ChatComponentText("Link failed: No Purification Plant found at link location")); - } - - return true; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (!(aPlayer instanceof EntityPlayerMP)) { - return false; - } - - // Right-clicking could be a data stick linking action, so try this first. - if (tryLinkDataStick(aPlayer)) { - return true; - } - - return super.onRightclick(aBaseMetaTileEntity, aPlayer); - } - - public GT_MetaTileEntity_PurificationPlant getController() { - if (controller == null) return null; - // Controller disappeared - if (controller.getBaseMetaTileEntity() == null) return null; - return controller; - } - - // If the controller is broken this can be called to explicitly unlink the controller, so we don't have any - // references lingering around - public void unlinkController() { - this.controllerSet = false; - this.controller = null; - this.controllerX = 0; - this.controllerY = 0; - this.controllerZ = 0; - } - - @Override - public void onBlockDestroyed() { - // When this block is destroyed, explicitly unlink it from the controller if there is any. - GT_MetaTileEntity_PurificationPlant controller = getController(); - if (controller != null) { - controller.unregisterLinkedUnit(this); - } - super.onBlockDestroyed(); - } - - @Override - public String[] getInfoData() { - var ret = new ArrayList(); - // If this purification unit is linked to a controller, add this info to the scanner output. - if (getController() != null) { - ret.add( - "This Purification Unit is linked to the Water Purification Plant at " + controllerX - + ", " - + controllerY - + ", " - + controllerZ - + "."); - - // If recipe is running, display success chance - if (this.mMaxProgresstime != 0) { - ret.add( - "Success chance: " + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.calculateFinalSuccessChance()) - + "%" - + EnumChatFormatting.RESET); - } - - } else ret.add("This Purification Unit is not linked to any Water Purification Plant."); - ret.add("Current parallel: " + EnumChatFormatting.YELLOW + this.effectiveParallel); - return ret.toArray(new String[0]); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - NBTTagCompound tag = accessor.getNBTData(); - - // Display linked controller in Waila. - if (tag.getBoolean("linked")) { - currenttip.add( - EnumChatFormatting.AQUA + "Linked to Purification Plant at " - + EnumChatFormatting.WHITE - + tag.getInteger("controllerX") - + ", " - + tag.getInteger("controllerY") - + ", " - + tag.getInteger("controllerZ") - + EnumChatFormatting.RESET); - } else { - currenttip.add(EnumChatFormatting.AQUA + "Unlinked"); - } - - super.getWailaBody(itemStack, currenttip, accessor, config); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - - tag.setBoolean("linked", getController() != null); - if (getController() != null) { - tag.setInteger("controllerX", controllerX); - tag.setInteger("controllerY", controllerY); - tag.setInteger("controllerZ", controllerZ); - } - - super.getWailaNBTData(player, tile, tag, world, x, y, z); - } - - public PurificationUnitStatus status() { - if (!this.mMachine) { - return PurificationUnitStatus.INCOMPLETE_STRUCTURE; - } else if (!this.isAllowedToWork()) { - return PurificationUnitStatus.DISABLED; - } else { - return PurificationUnitStatus.ONLINE; - } - } - - /** - * Creates all widgets needed to sync this unit's status with the client - */ - public Widget makeSyncerWidgets() { - return new MultiChildWidget() - .addChild(new FakeSyncWidget.BooleanSyncer(() -> this.mMachine, machine -> this.mMachine = machine)) - .addChild(new FakeSyncWidget.BooleanSyncer(this::isAllowedToWork, _work -> {})); - } - - private static final int PARALLEL_WINDOW_ID = 10; - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - buildContext.addSyncedWindow(PARALLEL_WINDOW_ID, this::createParallelWindow); - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (!widget.isClient()) { - widget.getContext() - .openSyncedWindow(PARALLEL_WINDOW_ID); - } - }) - .setPlayClickSound(true) - .setBackground(() -> { - List ret = new ArrayList<>(); - ret.add(GT_UITextures.BUTTON_STANDARD); - ret.add(GT_UITextures.OVERLAY_BUTTON_BATCH_MODE_ON); - return ret.toArray(new IDrawable[0]); - }) - .addTooltip(translateToLocal("GT5U.tpm.parallelwindow")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(174, 112) - .setSize(16, 16)); - super.addUIWidgets(builder, buildContext); - } - - protected ModularWindow createParallelWindow(final EntityPlayer player) { - final int WIDTH = 158; - final int HEIGHT = 52; - final int PARENT_WIDTH = getGUIWidth(); - final int PARENT_HEIGHT = getGUIHeight(); - ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); - builder.setGuiTint(getGUIColorization()); - builder.setDraggable(true); - builder.setPos( - (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) - .add( - Alignment.BottomRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) - .add(WIDTH - 3, 0) - .subtract(0, 10))); - builder.widget( - TextWidget.localised("GTPP.CC.parallel") - .setPos(3, 4) - .setSize(150, 20)) - .widget( - new NumericWidget().setSetter(val -> maxParallel = (int) val) - .setGetter(() -> maxParallel) - .setBounds(1, Integer.MAX_VALUE) - .setDefaultValue(1) - .setScrollValues(1, 4, 64) - .setTextAlignment(Alignment.Center) - .setTextColor(Color.WHITE.normal) - .setSize(150, 18) - .setPos(4, 25) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .attachSyncer( - new FakeSyncWidget.IntegerSyncer(() -> maxParallel, (val) -> maxParallel = val), - builder)); - return builder.build(); - } - - @Override - public boolean supportsVoidProtection() { - return false; - } - - @Override - public Set getAllowedVoidingModes() { - return EnumSet.of(VoidingMode.VOID_NONE); - } - - @Override - protected boolean supportsCraftingMEBuffer() { - return false; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitClarifier.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitClarifier.java deleted file mode 100644 index 7823fa0ba7..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitClarifier.java +++ /dev/null @@ -1,333 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorNotAPenguin; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.Arrays; -import java.util.List; -import java.util.concurrent.ThreadLocalRandom; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_PurificationUnitClarifier - extends GT_MetaTileEntity_PurificationUnitBase - implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final String STRUCTURE_PIECE_MAIN_SURVIVAL = "main_survival"; - - private static final int STRUCTURE_X_OFFSET = 5; - private static final int STRUCTURE_Y_OFFSET = 2; - private static final int STRUCTURE_Z_OFFSET = 1; - - // Chance that the filter is damaged every cycle. - public static final float FILTER_DAMAGE_RATE = 20.0f; - - private static final int CASING_TEXTURE_INDEX = getTextureIndex(GregTech_API.sBlockCasings9, 5); - - private static final String[][] structure = - // spotless:off - new String[][] { - { " ", " ", " ", " " }, - { " ", " AAAAA ", " AH~HA ", " AAAAA " }, - { " ", " A A ", " AWWWWWA ", " AAAAAAA " }, - { " ", " A A ", " AWWWWWWWA ", " AAAAAAAAA " }, - { " ", "A A", "AWWWCCCWWWA", "AAAAFFFAAAA" }, - { " DDD ", "A A", "HWWCWWWCWWH", "AAAFFFFFAAA" }, - { "DDDDDBD ", "A B A", "AWWCWBWCWWA", "AAAFFFFFAAA" }, - { " DDD ", "A A", "HWWCWWWCWWH", "AAAFFFFFAAA" }, - { " ", "A A", "AWWWCCCWWWA", "AAAAFFFAAAA" }, - { " ", " A A ", " AWWWWWWWA ", " AAAAAAAAA " }, - { " ", " A A ", " AWWWWWA ", " AAAAAAA " }, - { " ", " AAAAA ", " AHAHA ", " AAAAA " } }; - // spotless:on - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, structure) - .addShape( - STRUCTURE_PIECE_MAIN_SURVIVAL, - Arrays.stream(structure) - .map( - sa -> Arrays.stream(sa) - .map(s -> s.replaceAll("W", " ")) - .toArray(String[]::new)) - .toArray(String[][]::new)) - // Hatches - .addElement( - 'H', - ofChain( - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeastList(t.getAllowedHatches()) - .casingIndex(CASING_TEXTURE_INDEX) - .dot(1) - .build()), - // Reinforced Sterile Water Plant Casing - ofBlock(GregTech_API.sBlockCasings9, 5))) - // Reinforced Sterile Water Plant Casing - .addElement('A', ofBlock(GregTech_API.sBlockCasings9, 5)) - // PTFE pipe casing - .addElement('B', ofBlock(GregTech_API.sBlockCasings8, 1)) - .addElement('C', ofFrame(Materials.Iridium)) - .addElement('D', ofFrame(Materials.DamascusSteel)) - .addElement('W', ofChain(ofBlock(Blocks.water, 0))) - // Filter machine casing - .addElement('F', ofBlock(GregTech_API.sBlockCasings3, 11)) - .build(); - - public GT_MetaTileEntity_PurificationUnitClarifier(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PurificationUnitClarifier(String aName) { - super(aName); - } - - @Override - public int getWaterTier() { - return 1; - } - - @Override - public long getBasePowerUsage() { - return TierEU.RECIPE_LuV; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.purificationClarifierRecipes; - } - - @NotNull - @Override - public CheckRecipeResult overrideRecipeCheck() { - // Clarifier needs to check item inputs from recipe as well to find filter item - return findRecipeForInputs( - this.storedFluids.toArray(new FluidStack[] {}), - this.getStoredInputs() - .toArray(new ItemStack[] {})); - } - - @Override - public void depleteRecipeInputs() { - super.depleteRecipeInputs(); - - // Now do random roll to determine if the filter should be destroyed - ThreadLocalRandom random = ThreadLocalRandom.current(); - int roll = random.nextInt(1, 101); - if (roll < FILTER_DAMAGE_RATE) { - this.depleteInput(this.currentRecipe.mInputs[0]); - } - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - // Rotated sifter not allowed, water will flow out. - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Purification Unit") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.BOLD - + "Water Tier: " - + EnumChatFormatting.WHITE - + GT_Utility.formatNumbers(getWaterTier()) - + EnumChatFormatting.RESET) - .addInfo("Controller block for the Clarifier Purification Unit.") - .addInfo("Must be linked to a Purification Plant using a data stick to work.") - .addSeparator() - .addInfo("Requires a filter made of Activated Carbon to work.") - .addInfo( - "Every cycle, has a " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(FILTER_DAMAGE_RATE) - + "%" - + EnumChatFormatting.GRAY - + " chance to destroy the filter.") - .addSeparator() - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "The first step to acquiring purified water is to filter out macroscopic contaminants through the") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "use of large physical filters. As more contaminants are captured, the efficacy of the filter") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "decreases so continual replacements must be supplied to maintain full function of the Clarifier.") - .addInfo(AuthorNotAPenguin) - .beginStructureBlock(11, 4, 11, false) - .addSeparator() - .addCasingInfoRangeColored( - "Reinforced Sterile Water Plant Casing", - EnumChatFormatting.GRAY, - 123, - 131, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Filter Machine Casing", - EnumChatFormatting.GRAY, - 21, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Iridium Frame Box", - EnumChatFormatting.GRAY, - 21, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Damascus Steel Frame Box", - EnumChatFormatting.GRAY, - 12, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored("PTFE Pipe Casing", EnumChatFormatting.GRAY, 3, EnumChatFormatting.GOLD, false) - .addController("Front center") - .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) - .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) - .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) - .addOutputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) - .addStructureInfo("Requires water to be placed in the structure.") - .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - hintsOnly, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - int built = survivialBuildPiece( - STRUCTURE_PIECE_MAIN_SURVIVAL, - stackSize, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET, - elementBudget, - env, - true); - if (built == -1) { - GT_Utility.sendChatToPlayer( - env.getActor(), - EnumChatFormatting.GREEN + "Auto placing done ! Now go place the water yourself !"); - return 0; - } - return built; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PurificationUnitClarifier(this.mName); - } - - private List> getAllowedHatches() { - return ImmutableList.of(InputBus, InputHatch, OutputBus, OutputHatch); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection == facingDirection) { - if (active) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_INDEX) }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; - return super.checkMachine(aBaseMetaTileEntity, aStack); - } - - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_PURIFICATIONPLANT_LOOP.resourceLocation; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitDegasifier.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitDegasifier.java deleted file mode 100644 index 5a8e96ea48..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitDegasifier.java +++ /dev/null @@ -1,832 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorNotAPenguin; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Optional; -import java.util.concurrent.ThreadLocalRandom; -import java.util.function.Supplier; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; - -public class GT_MetaTileEntity_PurificationUnitDegasifier - extends GT_MetaTileEntity_PurificationUnitBase - implements ISurvivalConstructable { - - private static final int CASING_INDEX_MAIN = getTextureIndex(GregTech_API.sBlockCasings9, 11); - - private static final String STRUCTURE_PIECE_MAIN = "main"; - - // spotless:off - private static final String[][] structure = new String[][] { - { " AAAAA ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " AAAAA " }, - { " AAAAAAAAA ", " AAAAA ", " ", " C ", " CC ", " C ", " CC ", " C ", " ", " ", " ", " C ", " CC ", " C ", " CC ", " C ", " ", " ", " ", " C ", " CC ", " C ", " CC ", " CCAA~AA ", " AAAAAAAAA " }, - { " AAAAAAAAAAAAA ", " CAAAAAAAAA ", " BBBBB CC ", " BBBBB ", " BBBBB ", " BBB ", " B ", " ", " C ", " ", " C ", " ", " ", " ", " ", " ", " C ", " ", " B C ", " BBB ", " BBBBB ", " BBBBB ", " BBBBB ", " AAAAAAAAA ", " AAAAAAAAAAAAA " }, - { " AAAAAAAAAAAAA ", " AAAAAAAAAAAC ", " C BBB BB ", " BB BB ", " B B ", " BB BB ", " BBB BBB ", " BBBBB ", " BBB ", " C C ", " ", " ", " ", " ", " ", " ", " BBB ", " C BBBBB C ", " BBB BBB ", " BB BB ", " B B ", " BB BB ", " BB BB ", " AAAAAAAAAAA ", " AAAAAAAAAAAAA " }, - { " AAAAAAAAAAAAAAA ", " AAAAAAAAAAAAA ", " CB B ", " B B ", " B B ", " B B ", " B B ", " BB BB ", " BB BB C ", " BBBBB ", " C BBB ", " ", " ", " ", " BBB ", " BBBBB ", " BB BB C ", " BB BB ", " C B B ", " B B ", " B B ", " B B ", " B B ", " AAAAAAAAAAAAAC ", " AAAAAAAAAAAAAAA " }, - { " AAAAAAAAAAAAAAA ", " AAAAAAAAAAAAA ", " B B ", " C B B ", " B B ", " B B ", " B B ", " B B C ", " B B ", " B B ", " B B ", " C BBB ", " ", " BBB ", " B B ", " B B C ", " B B ", " B B ", " B B ", " C B B ", " B B ", " B B ", " B B ", " AAAAAAAAAAAAAC ", " AAAAAAAAAAAAAAA " }, - { "AAAAAAAAAAAAAAAAA", " AAAAAAAAAAAAAAA ", " B B ", " B B ", " CB B ", " B B ", " B B C ", " B B ", " B B ", " B B ", " B B ", " BBBBB ", " C BBB ", " BBBBB ", " B B C ", " B B ", " B B ", " B B ", " B B ", " B B ", " CB B ", " B B ", " B BC ", " AAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAAAA", " AAAAAAAAAAAAAAA ", " B B ", " B B ", " CB B ", " B B ", " B B C ", " B B ", " B B ", " B B ", " B B ", " BB BB ", " C BBBBB ", " BB BB ", " B B C ", " B B ", " B B ", " B B ", " B B ", " B B ", " CB B ", " B B ", " B BC ", " AAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAAAA", " AAAAAAAAAAAAAAA ", " B B ", " B B ", " B B ", " CB BC ", " B B ", " B B ", " B B ", " B B ", " B B ", " BB BB ", " BBBBB ", " C BB BB C ", " B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " CB BC ", " B B ", " AAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAAAA", " AAAAAAAAAAAAAAA ", " B B ", " B B ", " B BC ", " B B ", " C B B ", " B B ", " B B ", " B B ", " B B ", " BB BB ", " BBBBB C ", " BB BB ", " C B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " B BC ", " B B ", " CB B ", " AAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAA" }, - { "AAAAAAAAAAAAAAAAA", " AAAAAAAAAAAAAAA ", " B B ", " B B ", " B BC ", " B B ", " C B B ", " B B ", " B B ", " B B ", " B B ", " BBBBB ", " BBB C ", " BBBBB ", " C B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " B BC ", " B B ", " CB B ", " AAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAA" }, - { " AAAAAAAAAAAAAAA ", " AAAAAAAAAAAAA ", " B B ", " B B C ", " B B ", " B B ", " B B ", " C B B ", " B B ", " B B ", " B B ", " BBB C ", " ", " BBB ", " B B ", " C B B ", " B B ", " B B ", " B B ", " B B C ", " B B ", " B B ", " B B ", " CAAAAAAAAAAAAA ", " AAAAAAAAAAAAAAA " }, - { " AAAAAAAAAAAAAAA ", " AAAAAAAAAAAAA ", " B BC ", " B B ", " B B ", " B B ", " B B ", " BB BB ", " C BB BB ", " BBBBB ", " BBB C ", " ", " ", " ", " BBB ", " BBBBB ", " C BB BB ", " BB BB ", " B B C ", " B B ", " B B ", " B B ", " B B ", " CAAAAAAAAAAAAA ", " AAAAAAAAAAAAAAA " }, - { " AAAAAAAAAAAAA ", " CAAAAAAAAAAA ", " BB BB C ", " BB BB ", " B B ", " BB BB ", " BBB BBB ", " BBBBB ", " BBB ", " C C ", " ", " ", " ", " ", " ", " ", " BBB ", " C BBBBB C ", " BBB BBB ", " BB BB ", " B B ", " BB BB ", " BB BB ", " AAAAAAAAAAA ", " AAAAAAAAAAAAA " }, - { " AAAAAAAAAAAAA ", " AAAAAAAAAC ", " CC BBBBB ", " BBBBB ", " BBBBB ", " BBB ", " B ", " ", " C ", " ", " C ", " ", " ", " ", " ", " ", " C ", " ", " C B ", " BBB ", " BBBBB ", " BBBBB ", " BBBBB ", " AAAAAAAAA ", " AAAAAAAAAAAAA " }, - { " AAAAAAAAA ", " AAAAA ", " ", " C ", " CC ", " C ", " CC ", " C ", " ", " ", " ", " C ", " CC ", " C ", " CC ", " C ", " ", " ", " ", " C ", " CC ", " C ", " CC ", " AAAAACC ", " AAAAAAAAA " }, - { " AAAAA ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " AAAAA " } }; - // spotless:on - - private int casingCount = 0; - private static final int MIN_CASING = 780; - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, structure) - .addElement( - 'A', - ofChain( - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeastList(Arrays.asList(InputHatch, OutputHatch, SpecialHatchElement.ControlHatch)) - .casingIndex(CASING_INDEX_MAIN) - .dot(1) - .cacheHint(() -> "Input Hatch, Output Hatch, Control Hatch") - .build()), - onElementPass(t -> t.casingCount++, ofBlock(GregTech_API.sBlockCasings9, 11)))) - // Omni-purpose infinity fused glass - .addElement('B', ofBlock(GregTech_API.sBlockGlass1, 2)) - .addElement('C', ofFrame(Materials.Bedrockium)) - .build(); - - private static final int STRUCTURE_X_OFFSET = 8; - private static final int STRUCTURE_Y_OFFSET = 23; - private static final int STRUCTURE_Z_OFFSET = 1; - - // Supplier because werkstoff loads later than multiblock controllers... fml - private static final Supplier INERT_GASES = () -> new FluidStack[] { Materials.Helium.getGas(10000L), - WerkstoffLoader.Neon.getFluidOrGas(7500), WerkstoffLoader.Krypton.getFluidOrGas(5000), - WerkstoffLoader.Xenon.getFluidOrGas(2500) }; - - private static final class SuperconductorMaterial { - - public FluidStack fluid; - public float multiplier; - - SuperconductorMaterial(FluidStack fluid, float multiplier) { - this.fluid = fluid; - this.multiplier = multiplier; - } - } - - private static final long SUPERCON_FLUID_AMOUNT = 1440L; - - private static final Supplier SUPERCONDUCTOR_MATERIALS = () -> new SuperconductorMaterial[] { - new SuperconductorMaterial(Materials.Longasssuperconductornameforuvwire.getMolten(SUPERCON_FLUID_AMOUNT), 1.0f), - new SuperconductorMaterial( - Materials.Longasssuperconductornameforuhvwire.getMolten(SUPERCON_FLUID_AMOUNT), - 1.25f), - new SuperconductorMaterial(Materials.SuperconductorUEVBase.getMolten(SUPERCON_FLUID_AMOUNT), 1.5f), - new SuperconductorMaterial(Materials.SuperconductorUIVBase.getMolten(SUPERCON_FLUID_AMOUNT), 1.75f), - new SuperconductorMaterial(Materials.SuperconductorUMVBase.getMolten(SUPERCON_FLUID_AMOUNT), 2.0f), }; - - private static final FluidStack CATALYST_FLUID = Materials.Neutronium.getMolten(4608L); - private static final FluidStack COOLANT_FLUID = Materials.SuperCoolant.getFluid(10000L); - - private static final long CONSUME_INTERVAL = 20; - - private static class ControlSignal { - - private byte signal; - - public ControlSignal(byte sig) { - signal = sig; - } - - public void randomize() { - ThreadLocalRandom random = ThreadLocalRandom.current(); - // We want to give the final bit a lower chance at being on, since this bypasses most of the automation. - // If this bit has a 50% chance of being on, you could opt to not automate the degasser at all and never - // insert anything. This way you still get 50% output which might just be good enough. - - // To do this weighting, we simply only generate the lower 3 bits, and then with a smaller chance we add - // 8 to the result - signal = (byte) random.nextInt(0, 8); - if (random.nextInt(0, 5) == 0) { - signal += 8; - } - } - - public boolean getBit(int bit) { - if (bit < 0 || bit > 3) { - throw new IllegalArgumentException("Invalid bit index for degasser control signal"); - } - - // Shift signal so the requested bit is in the lowermost bit - // Then only keep the lowermost bit - // Then test if this bit is on. - return ((signal >> bit) & 1) == 1; - } - - public byte getSignal() { - return signal; - } - - // Get integer value representing control bits 1 and 2 - public int getControlBit12() { - return (signal >> 1) & 0b11; - } - - public boolean isZero() { - return signal == (byte) 0; - } - - @Override - public String toString() { - return Integer.toBinaryString(((int) signal) & 0b1111); - } - } - - private static class ControlBitStatus { - - public FluidStack stack; - public boolean satisfied; - - public ControlBitStatus(FluidStack stack, boolean satisfied) { - this.stack = stack; - this.satisfied = satisfied; - } - } - - private ControlSignal controlSignal = new ControlSignal((byte) 0); - - private final HashMap insertedStuffThisCycle = new HashMap<>(); - - private float outputMultiplier = 1.0f; - - private GT_MetaTileEntity_Hatch_DegasifierControlHatch controlHatch = null; - - public GT_MetaTileEntity_PurificationUnitDegasifier(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - protected GT_MetaTileEntity_PurificationUnitDegasifier(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PurificationUnitDegasifier(mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean active, boolean redstoneLevel) { - if (side == facing) { - if (active) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN) }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - hintsOnly, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET, - elementBudget, - env, - true); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Purification Unit") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.BOLD - + "Water Tier: " - + EnumChatFormatting.WHITE - + GT_Utility.formatNumbers(getWaterTier()) - + EnumChatFormatting.RESET) - .addInfo("Controller block for the Residual Decontaminant Degasser Purification Unit.") - .addInfo("Must be linked to a Purification Plant using a data stick to work.") - .addSeparator() - .addInfo( - "At the start of the operation, the " + EnumChatFormatting.WHITE - + "Degasser Control Hatch" - + EnumChatFormatting.GRAY - + " will output a redstone signal.") - .addInfo("To succeed the recipe, you will need to successfully decode the instructions in the signal.") - .addInfo("To decode the signal, interpret the signal strength as a 4-bit number from 0-15.") - .addInfo("Denote the lowest bit as bit 1, and the highest as bit 4.") - .addSeparator() - .addInfo( - EnumChatFormatting.WHITE + "" - + EnumChatFormatting.BOLD - + "Bit 1: " - + EnumChatFormatting.BLUE - + "" - + EnumChatFormatting.BOLD - + "Ozone Sparging by Inert Gas") - .addInfo( - "If this bit is on, you must insert an " + EnumChatFormatting.WHITE - + "inert gas" - + EnumChatFormatting.GRAY - + " into the machine.") - .addInfo( - "To determine which gas to insert, interpret bits " + EnumChatFormatting.WHITE - + "2-3" - + EnumChatFormatting.GRAY - + " as a 2-bit number.") - .addInfo( - EnumChatFormatting.GRAY + "0: " - + EnumChatFormatting.RED - + "10000L " - + EnumChatFormatting.WHITE - + "Helium" - + EnumChatFormatting.GRAY - + " / " - + "1: " - + EnumChatFormatting.RED - + "7500L " - + EnumChatFormatting.WHITE - + "Neon" - + EnumChatFormatting.GRAY - + " / " - + "2: " - + EnumChatFormatting.RED - + "5000L " - + EnumChatFormatting.WHITE - + "Krypton" - + EnumChatFormatting.GRAY - + " / " - + "3: " - + EnumChatFormatting.RED - + "2500L " - + EnumChatFormatting.WHITE - + "Xenon") - .addSeparator() - .addInfo( - EnumChatFormatting.WHITE + "" - + EnumChatFormatting.BOLD - + "Bit 2: " - + EnumChatFormatting.BLUE - + "" - + EnumChatFormatting.BOLD - + "Superconductive Deionization") - .addInfo( - "If this bit is on, you must insert " + EnumChatFormatting.RED - + "1440L " - + EnumChatFormatting.WHITE - + "Molten Superconductor Base.") - .addInfo("Using higher tier superconductor provides bonus output.") - .addInfo( - "Output multiplier: " + EnumChatFormatting.DARK_GREEN - + "UV" - + EnumChatFormatting.GRAY - + ": " - + EnumChatFormatting.WHITE - + "1x" - + EnumChatFormatting.GRAY - + " / " - + EnumChatFormatting.DARK_RED - + "UHV" - + EnumChatFormatting.GRAY - + ": " - + EnumChatFormatting.WHITE - + "1.25x" - + EnumChatFormatting.GRAY - + " / " - + EnumChatFormatting.DARK_PURPLE - + "UEV" - + EnumChatFormatting.GRAY - + ": " - + EnumChatFormatting.WHITE - + "1.5x" - + EnumChatFormatting.GRAY - + " / " - + EnumChatFormatting.DARK_BLUE - + "" - + EnumChatFormatting.BOLD - + "UIV" - + EnumChatFormatting.GRAY - + ": " - + EnumChatFormatting.WHITE - + "1.75x" - + EnumChatFormatting.GRAY - + " / " - + EnumChatFormatting.RED - + "" - + EnumChatFormatting.BOLD - + "UMV" - + EnumChatFormatting.GRAY - + ": " - + EnumChatFormatting.WHITE - + "2x") - .addSeparator() - .addInfo( - EnumChatFormatting.WHITE + "" - + EnumChatFormatting.BOLD - + "Bit 3: " - + EnumChatFormatting.BLUE - + "" - + EnumChatFormatting.BOLD - + "Gravitationally-Generated Differential Vacuum Extraction") - .addInfo( - "If this bit is on, you must insert " + EnumChatFormatting.RED - + "4608L " - + EnumChatFormatting.WHITE - + "Molten Neutronium") - .addSeparator() - .addInfo( - EnumChatFormatting.WHITE + "" - + EnumChatFormatting.BOLD - + "Bit 4: " - + EnumChatFormatting.BLUE - + "" - + EnumChatFormatting.BOLD - + "Seldonian Settlement Process") - .addInfo( - "If this bit is on," + EnumChatFormatting.RED - + " DISREGARD " - + EnumChatFormatting.GRAY - + "all other bits and do not insert anything.") - .addSeparator() - .addInfo( - EnumChatFormatting.WHITE + "" - + EnumChatFormatting.BOLD - + "No bits: " - + EnumChatFormatting.BLUE - + "" - + EnumChatFormatting.BOLD - + "Machine Overload") - .addInfo("In rare cases, the machine may overload and output no control signal at all.") - .addInfo( - "To prevent machine damage, insert " + EnumChatFormatting.RED - + "10000L " - + EnumChatFormatting.WHITE - + "Super Coolant.") - .addSeparator() - .addInfo("The recipe can only succeed if the entire signal is decoded correctly.") - .addInfo("Inserting any fluid not requested by the signal will always void the recipe.") - .addSeparator() - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "The penultimate stage of water purification, step seven, is an irregular series of complex") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "processes designed to remove any residual materials left by the decontaminants from the previous") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "steps such as any energetic ions, acids, clarifiers, or gasses. Depending on what the Degasser") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "detects in the water, it will request various materials to complete the processes listed above.") - .addInfo(AuthorNotAPenguin) - .beginStructureBlock(17, 25, 17, false) - .addCasingInfoRangeColored( - "Heat-Resistant Trinium Plated Casing", - EnumChatFormatting.GRAY, - MIN_CASING, - 803, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Omni-Purpose Infinity Fused Glass", - EnumChatFormatting.GRAY, - 622, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Bedrockium Frame Box", - EnumChatFormatting.GRAY, - 126, - EnumChatFormatting.GOLD, - false) - .addController("Front center") - .addOutputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+, Any Trinium Casing", 1) - .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+, Any Trinium Casing", 1) - .addOtherStructurePart( - "Degasser Control Hatch", - EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + ", Any Trinium Casing", - 1) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.purificationDegasifierRecipes; - } - - // Whether this fluid stack is accepted as a fluid in the inputs that the unit requires at runtime. - public static boolean isValidFluid(FluidStack stack) { - return stack.isFluidEqual(CATALYST_FLUID) || stack.isFluidEqual(COOLANT_FLUID) - || Arrays.stream(INERT_GASES.get()) - .anyMatch(stack::isFluidEqual) - || Arrays.stream(SUPERCONDUCTOR_MATERIALS.get()) - .anyMatch(mat -> stack.isFluidEqual(mat.fluid)); - } - - // Check if an exact match for this FluidStack was found in the map of inserted fluids - private boolean wasFluidInsertedExact(FluidStack toFind) { - FluidStack candidate = insertedStuffThisCycle.get(toFind.getFluid()); - // Fluid was inserted if found and the amount matches - return candidate != null && candidate.amount == toFind.amount; - } - - private ControlBitStatus isBit0Satisfied() { - // Check if instructions matching the first bit are satisfied. - // Instructions: - // If bit 0 is on, insert an inert gas. Bits 1-2 of the control signal determine which inert - // gas to insert. - - if (controlSignal.getBit(0)) { - // Grab the gas to insert from the control bits - int gasToInsert = controlSignal.getControlBit12(); - FluidStack gasStack = INERT_GASES.get()[gasToInsert]; - // Check if it was inserted - if (wasFluidInsertedExact(gasStack)) return new ControlBitStatus(gasStack, true); - else return new ControlBitStatus(null, false); - } - - // Bit 0 is not on, so this is always satisfied - return new ControlBitStatus(null, true); - } - - private ControlBitStatus isBit1Satisfied() { - // Check if instructions matching the second bit (bit 1) are satisfied. - // Instructions: - // If bit 1 is on, insert molten superconductor. - // Higher tier superconductor gives a better bonus. - // Only one type of superconductor may be inserted or the operation fails, - // so we don't care about the order in which we find it. - if (controlSignal.getBit(1)) { - // Find the first superconductor material in the list that was inserted with an exact match - Optional material = Arrays.stream(SUPERCONDUCTOR_MATERIALS.get()) - .filter(candidate -> wasFluidInsertedExact(candidate.fluid)) - .findFirst(); - if (material.isPresent()) { - // Get the material and set the output multiplier, then - // report success with the matching fluid. - SuperconductorMaterial scMaterial = material.get(); - this.outputMultiplier = scMaterial.multiplier; - return new ControlBitStatus(scMaterial.fluid, true); - } - // No superconductor was inserted but bit is on fail. - return new ControlBitStatus(null, false); - } - - return new ControlBitStatus(null, true); - } - - private ControlBitStatus isBit2Satisfied() { - // Check if instructions matching the third bit (bit 2) are satisfied. - // Instructions: - // If bit 2 is on, insert molten neutronium. - if (controlSignal.getBit(2)) { - // If steel was inserted, return it and report success. - if (wasFluidInsertedExact(CATALYST_FLUID)) return new ControlBitStatus(CATALYST_FLUID, true); - // Otherwise report failure. - return new ControlBitStatus(null, false); - } - - return new ControlBitStatus(null, true); - } - - private ControlBitStatus isBit3Satisfied() { - // Check if instructions matching the fourth bit (bit 3) are satisfied. - // Instructions: - // If bit 3 is on, do not insert anything. - if (controlSignal.getBit(3)) { - // Simply check if the map of inserted fluids is empty - if (insertedStuffThisCycle.isEmpty()) return new ControlBitStatus(null, true); - return new ControlBitStatus(null, false); - } - return new ControlBitStatus(null, true); - } - - private boolean areAllBitsSatisfied() { - // Check if each individual bit is satisfied. - // Additional instructions: If no bits are on, insert super coolant - - if (controlSignal.isZero()) { - return wasFluidInsertedExact(COOLANT_FLUID); - } - - ControlBitStatus bit0 = isBit0Satisfied(); - ControlBitStatus bit1 = isBit1Satisfied(); - ControlBitStatus bit2 = isBit2Satisfied(); - ControlBitStatus bit3 = isBit3Satisfied(); - - // If bit 3 is satisfied and on, all other bits are automatically satisfied, - // with no fluids being allowed to be inserted. - if (controlSignal.getBit(3) && bit3.satisfied) { - bit0 = bit1 = bit2 = new ControlBitStatus(null, true); - } - - if (bit0.satisfied && bit1.satisfied && bit2.satisfied && bit3.satisfied) { - // Check if the map contains any other stacks than the ones in the control bit statuses - for (FluidStack inserted : insertedStuffThisCycle.values()) { - // If the inserted stack is null, or any of the fluids required, this stack is fine. - if (inserted == null) continue; - if (bit0.stack != null && inserted.isFluidEqual(bit0.stack)) continue; - if (bit1.stack != null && inserted.isFluidEqual(bit1.stack)) continue; - if (bit2.stack != null && inserted.isFluidEqual(bit2.stack)) continue; - if (bit3.stack != null && inserted.isFluidEqual(bit3.stack)) continue; - // Otherwise it's a nonrequested stack and the recipe should fail. - return false; - } - return true; - } - - return false; - } - - @Override - public void startCycle(int cycleTime, int progressTime) { - super.startCycle(cycleTime, progressTime); - this.controlSignal.randomize(); - this.insertedStuffThisCycle.clear(); - this.outputMultiplier = 1.0f; - // Make sure to output the hatch control signal. - this.controlHatch.updateOutputSignal(this.controlSignal.getSignal()); - } - - private static ArrayList getDrainableFluidsFromHatch(GT_MetaTileEntity_Hatch_Input hatch) { - // Need special handling for quad input hatches, otherwise it only returns the first fluid in the hatch - if (hatch instanceof GT_MetaTileEntity_Hatch_MultiInput) { - return new ArrayList<>(Arrays.asList(((GT_MetaTileEntity_Hatch_MultiInput) hatch).getStoredFluid())); - } - return new ArrayList<>(Collections.singletonList(hatch.getFluid())); - } - - @Override - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.runMachine(aBaseMetaTileEntity, aTick); - - // If machine is running, continuously consume all valid inputs - if (mMaxProgresstime > 0 && aTick % CONSUME_INTERVAL == 0) { - // For each hatch, check if each fluid inside is one of the valid fluids. If so, consume it all. - for (GT_MetaTileEntity_Hatch_Input hatch : mInputHatches) { - ArrayList drainableFluids = getDrainableFluidsFromHatch(hatch); - for (FluidStack fluid : drainableFluids) { - if (fluid != null && isValidFluid(fluid)) { - // Apparently this parameter is mostly ignored, but might as well get it right. - ForgeDirection front = hatch.getBaseMetaTileEntity() - .getFrontFacing(); - // Drain the fluid and save it - FluidStack drainedFluid = hatch.drain(front, fluid, true); - // If the fluid does not yet exist in the map, insert it. - // Otherwise, merge the amounts - insertedStuffThisCycle.merge( - fluid.getFluid(), - drainedFluid, - (a, b) -> new FluidStack(a.getFluid(), a.amount + b.amount)); - } - } - } - } - } - - @Override - public void addRecipeOutputs() { - super.addRecipeOutputs(); - if (outputMultiplier > 1.01f) { - FluidStack waterOutput = currentRecipe.mFluidOutputs[0]; - FluidStack bonusOutput = new FluidStack( - waterOutput.getFluid(), - (int) (waterOutput.amount * (outputMultiplier - 1.0f))); - this.addOutput(bonusOutput); - } - } - - @Override - public float calculateFinalSuccessChance() { - // Success chance is 100% when all bits are satisfied, 0% otherwise. - if (areAllBitsSatisfied()) { - return 100.0f; - } else { - return 0.0f; - } - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getWaterTier() { - return 7; - } - - @Override - public long getBasePowerUsage() { - return TierEU.RECIPE_UHV; - } - - public boolean addControlHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DegasifierControlHatch) { - // Only allow a single control hatch, so fail structure check if there is already one - if (this.controlHatch == null) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - this.controlHatch = (GT_MetaTileEntity_Hatch_DegasifierControlHatch) aMetaTileEntity; - return true; - } - } - return false; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.casingCount = 0; - this.controlHatch = null; - if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; - if (casingCount < MIN_CASING) return false; - return super.checkMachine(aBaseMetaTileEntity, aStack); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - controlSignal = new ControlSignal(aNBT.getByte("controlSignal")); - outputMultiplier = aNBT.getFloat("outputMultiplier"); - NBTTagCompound fluidMap = aNBT.getCompoundTag("insertedFluidMap"); - for (String key : fluidMap.func_150296_c()) { - FluidStack fluid = FluidStack.loadFluidStackFromNBT(fluidMap.getCompoundTag(key)); - // Ignore if fluid failed to load, for example if the fluid ID was changed between versions - if (fluid == null) { - continue; - } - insertedStuffThisCycle.put(fluid.getFluid(), fluid); - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setByte("controlSignal", controlSignal.getSignal()); - aNBT.setFloat("outputMultiplier", outputMultiplier); - NBTTagCompound fluidMap = new NBTTagCompound(); - for (FluidStack stack : insertedStuffThisCycle.values()) { - NBTTagCompound compound = new NBTTagCompound(); - stack.writeToNBT(compound); - fluidMap.setTag( - stack.getFluid() - .getName(), - compound); - } - aNBT.setTag("insertedFluidMap", fluidMap); - } - - private static String generateInfoStringForBit(int i, ControlBitStatus status) { - String base = "Bit " + (i + 1) + " status: "; - if (status.satisfied) { - return base + EnumChatFormatting.GREEN + "OK"; - } else { - return base + EnumChatFormatting.RED + "NOT OK"; - } - } - - @Override - public String[] getInfoData() { - ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add("Current control signal: " + EnumChatFormatting.YELLOW + controlSignal.toString()); - info.add("Current output multiplier: " + EnumChatFormatting.YELLOW + outputMultiplier); - for (FluidStack stack : insertedStuffThisCycle.values()) { - info.add( - "Fluid inserted this cycle: " + EnumChatFormatting.YELLOW - + stack.amount - + "L " - + stack.getLocalizedName()); - } - info.add(generateInfoStringForBit(0, isBit0Satisfied())); - info.add(generateInfoStringForBit(1, isBit1Satisfied())); - info.add(generateInfoStringForBit(2, isBit2Satisfied())); - info.add(generateInfoStringForBit(3, isBit3Satisfied())); - return info.toArray(new String[] {}); - } - - private enum SpecialHatchElement implements IHatchElement { - - ControlHatch(GT_MetaTileEntity_PurificationUnitDegasifier::addControlHatchToMachineList, - GT_MetaTileEntity_Hatch_DegasifierControlHatch.class) { - - @Override - public long count(GT_MetaTileEntity_PurificationUnitDegasifier mte) { - return mte.controlHatch == null ? 0 : 1; - } - }; - - private final List> mteClasses; - private final IGT_HatchAdder adder; - - @SafeVarargs - SpecialHatchElement(IGT_HatchAdder adder, - Class... mteClasses) { - this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); - this.adder = adder; - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - public IGT_HatchAdder adder() { - return adder; - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitFlocculation.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitFlocculation.java deleted file mode 100644 index 3f414d0eca..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitFlocculation.java +++ /dev/null @@ -1,489 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorNotAPenguin; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; - -public class GT_MetaTileEntity_PurificationUnitFlocculation - extends GT_MetaTileEntity_PurificationUnitBase - implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final String STRUCTURE_PIECE_MAIN_SURVIVAL = "main_survival"; - - private static final int STRUCTURE_X_OFFSET = 4; - private static final int STRUCTURE_Y_OFFSET = 3; - private static final int STRUCTURE_Z_OFFSET = 0; - - /** - * Amount of input fluid needed to boost the success chance by another level - */ - public static final long INPUT_CHEMICAL_PER_LEVEL = 100000; - /** - * Amount of waste water produced for each success chance level. This matches the amount of input fluid - * so it can be perfectly recycled into each other. - */ - private static final long WASTE_WATER_PER_LEVEL = INPUT_CHEMICAL_PER_LEVEL; - /** - * Additive boost to success chance for each level of input fluid supplied - */ - public static final float SUCCESS_PER_LEVEL = 10.0f; - /** - * Amount of ticks between each tick the unit will try to consume input fluid - */ - private static final int CONSUME_INTERVAL = 1 * SECONDS; - - /** - * Fluid that needs to be supplied to boost success chance - */ - private static final Materials INPUT_CHEMICAL = Materials.PolyAluminiumChloride; - /** - * Output fluid to be produced as waste. The intended behaviour is that this output fluid can be cycled - * semi-perfectly into the input fluid. - */ - private static final Materials OUTPUT_WASTE = Materials.FlocculationWasteLiquid; - - /** - * Total amount of input fluid consumed during this recipe cycle. - */ - private long inputFluidConsumed = 0; - - private static final String[][] structure = new String[][] - // spotless:off - { - { " ", " ", " BBBBBBB ", " BBB~BBB ", " BBBBBBB " }, - { " ", " ", " B B ", " BWWWWWB ", " BCCCCCB " }, - { " ", " ", " B B ", " GWWWWWG ", " BCAAACB " }, - { " ", " ", " B B ", " GWWWWWG ", " BCAAACB " }, - { " ", " ", " B B ", " GWWWWWG ", " BCAAACB " }, - { " ", " EE EE ", " BE EB ", " BEWWWEB ", " BCCCCCB " }, - { "D D", "DEE EED", "DBBBBBBBD", "DBBBBBBBD", "DBBBBBBBD" }, - { "DD DD", "DD DD", "DD DD", "DD DD", "DD DD" } - }; - // spotless:on - - private static final int MAIN_CASING_INDEX = getTextureIndex(GregTech_API.sBlockCasings9, 6); - - private int casingCount = 0; - private static final int MIN_CASING = 56; - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, structure) - .addShape( - STRUCTURE_PIECE_MAIN_SURVIVAL, - Arrays.stream(structure) - .map( - sa -> Arrays.stream(sa) - .map(s -> s.replaceAll("W", " ")) - .toArray(String[]::new)) - .toArray(String[][]::new)) - // Filter machine casing - .addElement('A', ofBlock(GregTech_API.sBlockCasings3, 11)) - .addElement( - 'B', - ofChain( - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeastList(t.getAllowedHatches()) - .casingIndex(MAIN_CASING_INDEX) - .dot(1) - .build()), - // Clean Flocculation Casing - onElementPass(t -> t.casingCount++, ofBlock(GregTech_API.sBlockCasings9, 6)))) - // Reinforced Sterile Water Plant Casing - .addElement('C', ofBlock(GregTech_API.sBlockCasings9, 5)) - // Sterile Water Plant Casing - .addElement('D', ofBlock(GregTech_API.sBlockCasings9, 4)) - .addElement('E', ofFrame(Materials.Adamantium)) - .addElement('W', ofBlock(Blocks.water, 0)) - // Tinted industrial glass - .addElement('G', ofBlockAnyMeta(GregTech_API.sBlockTintedGlass)) - .build(); - - List> getAllowedHatches() { - return ImmutableList.of(InputBus, InputHatch, OutputBus, OutputHatch); - } - - public GT_MetaTileEntity_PurificationUnitFlocculation(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PurificationUnitFlocculation(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PurificationUnitFlocculation(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX) }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - hintsOnly, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - int built = survivialBuildPiece( - STRUCTURE_PIECE_MAIN_SURVIVAL, - stackSize, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET, - elementBudget, - env, - true); - if (built == -1) { - GT_Utility.sendChatToPlayer( - env.getActor(), - EnumChatFormatting.GREEN + "Auto placing done ! Now go place the water yourself !"); - return 0; - } - return built; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - // Do not allow rotation when water would flow out - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); - } - - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - casingCount = 0; - if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; - - // At most two input hatches allowed - if (mInputHatches.size() > 2) { - return false; - } - - // At most two output hatches allowed - if (mOutputHatches.size() > 2) { - return false; - } - - if (casingCount < MIN_CASING) return false; - - return super.checkMachine(aBaseMetaTileEntity, aStack); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Purification Unit") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.BOLD - + "Water Tier: " - + EnumChatFormatting.WHITE - + GT_Utility.formatNumbers(getWaterTier()) - + EnumChatFormatting.RESET) - .addInfo("Controller block for the Flocculation Purification Unit.") - .addInfo("Must be linked to a Purification Plant using a data stick to work.") - .addSeparator() - .addInfo( - "Supply with " + EnumChatFormatting.WHITE - + INPUT_CHEMICAL.mLocalizedName - + EnumChatFormatting.GRAY - + " to operate.") - .addInfo( - "Outputs " + EnumChatFormatting.WHITE - + OUTPUT_WASTE.mLocalizedName - + EnumChatFormatting.GRAY - + " that can be recycled.") - .addSeparator() - .addInfo( - "During operation, will consume ALL " + EnumChatFormatting.WHITE - + INPUT_CHEMICAL.mLocalizedName - + EnumChatFormatting.GRAY - + " in the input hatch.") - .addInfo( - "At the end of the recipe, for every " + EnumChatFormatting.RED - + INPUT_CHEMICAL_PER_LEVEL - + "L " - + EnumChatFormatting.GRAY - + "of " - + EnumChatFormatting.WHITE - + INPUT_CHEMICAL.mLocalizedName - + EnumChatFormatting.GRAY - + " consumed") - .addInfo( - "gain an additive " + EnumChatFormatting.RED - + SUCCESS_PER_LEVEL - + "%" - + EnumChatFormatting.GRAY - + " increase to success. If total fluid supplied is not") - .addInfo( - "a multiple of " + EnumChatFormatting.RED - + INPUT_CHEMICAL_PER_LEVEL - + "L" - + EnumChatFormatting.GRAY - + ", a penalty to success is applied using the following formula:") - .addInfo(EnumChatFormatting.GREEN + "Success = Success * 2^(-10 * Overflow ratio)") - .addSeparator() - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "Step three in purifying water is to remove microscopic contaminants such as dusts, microplastics and other") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "pollutants using a clarifying agent (In this case, polyaluminium chloride) to cause flocculation - the process") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "of aggregating dispersed suspended particles from a solution into larger clumps for further filtration.") - .addInfo(AuthorNotAPenguin) - .beginStructureBlock(7, 4, 7, false) - .addCasingInfoRangeColored( - "Slick Sterile Flocculation Casing", - EnumChatFormatting.GRAY, - MIN_CASING, - 65, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Sterile Water Plant Casing", - EnumChatFormatting.GRAY, - 16, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Reinforced Sterile Water Plant Casing", - EnumChatFormatting.GRAY, - 30, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Tinted Industrial Glass", - EnumChatFormatting.GRAY, - 6, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Adamantium Frame Box", - EnumChatFormatting.GRAY, - 12, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Filter Machine Casing", - EnumChatFormatting.GRAY, - 9, - EnumChatFormatting.GOLD, - false) - .addController("Front center") - .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) - .addInputHatch( - EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "-" + EnumChatFormatting.GOLD + "2", - 1) - .addOutputHatch( - EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "-" + EnumChatFormatting.GOLD + "2", - 1) - .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void startCycle(int cycleTime, int progressTime) { - super.startCycle(cycleTime, progressTime); - // Reset amount of fluid consumed in this cycle. - this.inputFluidConsumed = 0; - } - - @Override - public void endCycle() { - super.endCycle(); - // Output waste water proportional to amount of boost levels. We do this even when the recipe fails, so you can - // always fully recycle. - // NOTE: If this process ever PRODUCES excess chlorine, there is a recipe bug. - int levels = calculateBoostLevels(); - long amount = levels * WASTE_WATER_PER_LEVEL; - this.addFluidOutputs(new FluidStack[] { OUTPUT_WASTE.getFluid(amount) }); - // Make sure to reset consumed fluid (again) - this.inputFluidConsumed = 0; - } - - @Override - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.runMachine(aBaseMetaTileEntity, aTick); - - // Consume all input fluid periodically, only when running - if (aTick % CONSUME_INTERVAL == 0 && mMaxProgresstime > 0) { - // Iterate over all fluids stored - List fluids = this.getStoredFluids(); - for (FluidStack fluid : fluids) { - // If this FluidStack is the input chemical, consume it all - if (fluid.getFluid() - .equals(INPUT_CHEMICAL.mFluid)) { - this.inputFluidConsumed += fluid.amount; - if (!this.depleteInput(fluid)) { - stopMachine(ShutDownReasonRegistry.outOfFluid(fluid)); - } - } - } - } - } - - private int calculateBoostLevels() { - return (int) Math.floor((float) this.inputFluidConsumed / (float) INPUT_CHEMICAL_PER_LEVEL); - } - - @Override - public float calculateFinalSuccessChance() { - // Amount of times the required amount of input fluid was fully inserted - int levels = calculateBoostLevels(); - // Target amount of fluid needed to reach this amount of boost levels - long targetAmount = levels * INPUT_CHEMICAL_PER_LEVEL; - // Amount of excess fluid inserted. - long overflow = inputFluidConsumed - targetAmount; - // Base boost chance, before applying overflow penalty - float boost = SUCCESS_PER_LEVEL * levels; - // If there was any overflow, apply an exponential penalty multiplier based on percentage overflow - if (overflow > 0) { - float overflowPct = (float) overflow / INPUT_CHEMICAL_PER_LEVEL; - float penaltyMultiplier = (float) Math.pow(2.0f, overflowPct * -10.0); - return Math.max(0.0f, (this.currentRecipeChance + boost) * penaltyMultiplier); - } else { - return Math.min(100.0f, this.currentRecipeChance + boost); - } - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getWaterTier() { - return 3; - } - - @Override - public long getBasePowerUsage() { - return TierEU.RECIPE_ZPM; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.purificationFlocculationRecipes; - } - - @Override - public String[] getInfoData() { - ArrayList infoData = new ArrayList<>(Arrays.asList(super.getInfoData())); - infoData.add( - INPUT_CHEMICAL.mLocalizedName + " consumed this cycle: " - + EnumChatFormatting.RED - + inputFluidConsumed - + "L"); - return infoData.toArray(new String[] {}); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setLong("mInputFluidConsumed", inputFluidConsumed); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.inputFluidConsumed = aNBT.getLong("mInputFluidConsumed"); - } - - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_COAGULATION_LOOP.resourceLocation; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitOzonation.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitOzonation.java deleted file mode 100644 index a539cd157e..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitOzonation.java +++ /dev/null @@ -1,299 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorNotAPenguin; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_PurificationUnitOzonation - extends GT_MetaTileEntity_PurificationUnitBase - implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final String STRUCTURE_PIECE_MAIN_SURVIVAL = "main_survival"; - - private static final String[][] structure = new String[][] { - // spotless:off - { " ", " ", " A ", " A ", " AAA ", " AAA ", " A A ", " A A ", " A A ", " A~A " }, - { " A ", " A ", " A A ", " A A ", "BBBBA A", "BDDBA A", "BBBBA D A", "E A D A", "E A D A", "E AAAAA" }, - { " AAA ", " A A ", " A A", " A A", "BDDBA A", "O BA A", "BBBBA A", " C A A", " CCA A", " AAAAA" }, - { " A ", " A ", " A A ", " A A ", "BBBBA A", "BDDBA A", "BBBBA A", "E A A", "E A A", "E AAAAA" }, - { " ", " ", " A ", " A ", " AAA ", " AAA ", " AAA ", " AAA ", " AAA ", " AAA " } }; - // spotless:on - - private static final int MAIN_CASING_INDEX = getTextureIndex(GregTech_API.sBlockCasings9, 10); - - private static final int OFFSET_X = 6; - private static final int OFFSET_Y = 9; - private static final int OFFSET_Z = 0; - - /** - * If the player inserts more ozone gas than this amount, the multi will explode. - */ - public static final int MAX_OZONE_GAS_FOR_EXPLOSION = 1000 * (int) Math.pow(2, 10); - - private int casingCount = 0; - private static final int MIN_CASING = 96; - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, structure) - // Inert Filtration Casing - .addElement( - 'A', - ofChain( - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeastList(ImmutableList.of(InputHatch, OutputHatch, OutputBus)) - .casingIndex(getTextureIndex(GregTech_API.sBlockCasings9, 10)) - .dot(1) - .build()), - onElementPass(t -> t.casingCount++, ofBlock(GregTech_API.sBlockCasings9, 10)))) - // High Pressure Resistant Casing (possibly placeholder name) - .addElement('B', ofBlock(GregTech_API.sBlockCasings9, 9)) - // PTFE pipe casing - .addElement('C', ofBlock(GregTech_API.sBlockCasings8, 1)) - // Any tinted industrial glass - .addElement('D', ofBlockAnyMeta(GregTech_API.sBlockTintedGlass)) - .addElement('E', ofFrame(Materials.TungstenSteel)) - // Ozone input hatch - .addElement( - 'O', - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeast(InputHatch) - .casingIndex(getTextureIndex(GregTech_API.sBlockCasings9, 9)) - .dot(2) - .buildAndChain(ofBlock(GregTech_API.sBlockCasings9, 9)))) - .build(); - - public GT_MetaTileEntity_PurificationUnitOzonation(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - protected GT_MetaTileEntity_PurificationUnitOzonation(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PurificationUnitOzonation(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX) }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, OFFSET_X, OFFSET_Y, OFFSET_Z); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - OFFSET_X, - OFFSET_Y, - OFFSET_Z, - elementBudget, - env, - true); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Purification Unit") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.BOLD - + "Water Tier: " - + EnumChatFormatting.WHITE - + GT_Utility.formatNumbers(getWaterTier()) - + EnumChatFormatting.RESET) - .addInfo("Controller block for the Ozonation Purification Unit.") - .addInfo("Must be linked to a Purification Plant using a data stick to work.") - .addSeparator() - .addInfo( - "Will explode if the input hatch contains more than " + EnumChatFormatting.RED - + MAX_OZONE_GAS_FOR_EXPLOSION - + "L " - + EnumChatFormatting.WHITE - + "Ozone Gas.") - .addInfo( - "Receives a " + EnumChatFormatting.RED - + "20%" - + EnumChatFormatting.GRAY - + " bonus to success chance for every doubling of " - + EnumChatFormatting.WHITE - + "Ozone Gas.") - .addSeparator() - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "The second step in water purification is ozonation, which involves injecting large quantities of small") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "bubbles of highly reactive ozone gas into the water. This removes trace element contaminants like") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "sulfur, iron and manganese, creating insoluble oxide compounds which are then filtered out.") - .addInfo(AuthorNotAPenguin) - .beginStructureBlock(9, 10, 5, false) - .addCasingInfoRangeColored( - "Inert Filtration Casing", - EnumChatFormatting.GRAY, - MIN_CASING, - 102, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Reactive Gas Containment Casing", - EnumChatFormatting.GRAY, - 27, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Any Tinted Industrial Glass", - EnumChatFormatting.GRAY, - 9, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Tungstensteel Frame Box", - EnumChatFormatting.GRAY, - 6, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored("PTFE Pipe Casing", EnumChatFormatting.GRAY, 3, EnumChatFormatting.GOLD, false) - .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) - .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) - .addOutputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) - .addOtherStructurePart("Input Hatch (Ozone)", EnumChatFormatting.GOLD + "1", 2) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.purificationOzonationRecipes; - } - - @NotNull - @Override - public CheckRecipeResult checkProcessing() { - // First do recipe checking logic - CheckRecipeResult result = super.checkProcessing(); - if (!result.wasSuccessful()) return result; - // Look for ozone, blow up if more than max allowed - for (FluidStack fluid : this.storedFluids) { - if (fluid.isFluidEqual(Materials.Ozone.getGas(1L))) { - if (fluid.amount > MAX_OZONE_GAS_FOR_EXPLOSION) { - // TODO: Fix crash in hatch - // this.explodeMultiblock(); - } - } - } - return result; - } - - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_OZONATION_LOOP.resourceLocation; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getWaterTier() { - return 2; - } - - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - casingCount = 0; - if (!checkPiece(STRUCTURE_PIECE_MAIN, OFFSET_X, OFFSET_Y, OFFSET_Z)) return false; - if (casingCount < MIN_CASING) return false; - return super.checkMachine(aBaseMetaTileEntity, aStack); - } - - @Override - public long getBasePowerUsage() { - return TierEU.RECIPE_LuV; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitParticleExtractor.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitParticleExtractor.java deleted file mode 100644 index 17945f7cc9..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitParticleExtractor.java +++ /dev/null @@ -1,566 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorNotAPenguin; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_GLOW; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.concurrent.ThreadLocalRandom; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gregtech.common.items.GT_MetaGenerated_Item_03; -import gregtech.common.items.ID_MetaItem_03; - -public class GT_MetaTileEntity_PurificationUnitParticleExtractor - extends GT_MetaTileEntity_PurificationUnitBase - implements ISurvivalConstructable { - - public static long BARYONIC_MATTER_OUTPUT = 2000L; - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final int STRUCTURE_X_OFFSET = 8; - private static final int STRUCTURE_Y_OFFSET = 8; - private static final int STRUCTURE_Z_OFFSET = 0; - - static final String[][] structure = new String[][] { - // spotless:off - { " ", " ", " ", " ", " ", " ", " AAAAA ", " AAAAA ", " AA~AA ", " AAAAA ", " AAAAA ", " ", " ", " ", " ", " ", " " }, - { " ", " E ", " E ", " E ", " E ", " E ", " AAAAA ", " AAAAA ", " EEEEEAAAAAEEEEE ", " AAAAA ", " AAAAA ", " E ", " E ", " E ", " E ", " E ", " " }, - { " ", " E ", " ", " ", " ", " ", " CCCCC ", " CDDDC ", " E CDBDC E ", " CDDDC ", " CCCCC ", " ", " ", " ", " ", " E ", " " }, - { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " ", " E ", " " }, - { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " "," E ", " " }, - { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " ", " E ", " " }, - { " AAAAA ", " AAAAA ", " CCCCC ", " ", " ", " ", "AAC AAAAA CAA", "AAC ADDDA CAA", "AAC ADBDA CAA", "AAC ADDDA CAA", "AAC AAAAA CAA", " ", " ", " ", " CCCCC ", " AAAAA ", " AAAAA " }, - { " AAAAA ", " AAAAA ", " CDDDC ", " DDD ", " DDD ", " DDD ", "AAC ADDDA CAA", "AADDDDD DDDDDAA", "AADDDDD B DDDDDAA", "AADDDDD DDDDDAA", "AAC ADDDA CAA", " DDD ", " DDD ", " DDD ", " CDDDC ", " AAAAA ", " AAAAA " }, - { " AAAAA ", " EEEEEAAAAAEEEEE ", " E CDBDC E ", " E DBD E ", " E DBD E ", " E DBD E ", "AAC ADBDA CAA", "AADDDDD B DDDDDAA", "AABBBBBBBBBBBBBAA", "AADDDDD B DDDDDAA", "AAC ADBDA CAA", " E DBD E ", " E DBD E ", " E DBD E ", " E CDBDC E ", " EEEEEAAAAAEEEEE ", " AAAAA " }, - { " AAAAA ", " AAAAA ", " CDDDC ", " DDD ", " DDD ", " DDD ", "AAC ADDDA CAA", "AADDDDD DDDDDAA", "AADDDDD B DDDDDAA", "AADDDDD DDDDDAA", "AAC ADDDA CAA", " DDD ", " DDD ", " DDD ", " CDDDC ", " AAAAA ", " AAAAA " }, - { " AAAAA ", " AAAAA ", " CCCCC ", " ", " ", " ", "AAC AAAAA CAA", "AAC ADDDA CAA", "AAC ADBDA CAA", "AAC ADDDA CAA", "AAC AAAAA CAA", " ", " ", " ", " CCCCC ", " AAAAA ", " AAAAA " }, - { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " ", " E ", " " }, - { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " ", " E ", " " }, - { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " ", " E ", " " }, - { " ", " E ", " ", " ", " ", " ", " CCCCC ", " CDDDC ", " E CDBDC E ", " CDDDC ", " CCCCC ", " ", " ", " ", " ", " E ", " " }, - { " ", " E ", " E ", " E ", " E ", " E ", " AAAAA ", " AAAAA ", " EEEEEAAAAAEEEEE ", " AAAAA ", " AAAAA ", " E ", " E ", " E ", " E ", " E ", " " }, - { " ", " ", " ", " ", " ", " ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " ", " ", " ", " ", " ", " " } }; - // spotless:on - - // Dimensionally transcendent casing (placeholder) - private static final int CASING_INDEX_MAIN = getTextureIndex(GregTech_API.sBlockCasings10, 2); - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, structure) - // Quark Exclusion Casing - .addElement( - 'A', - ofChain( - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeastList(Arrays.asList(InputBus, OutputBus, InputHatch, OutputHatch)) - .dot(1) - .casingIndex(CASING_INDEX_MAIN) - .build()), - onElementPass(t -> t.numCasings++, ofBlock(GregTech_API.sBlockCasings10, 2)))) - // Particle Beam Guidance Pipe Casing - .addElement('B', ofBlock(GregTech_API.sBlockCasings9, 14)) - // Femtometer-Calibrated Particle Beam Casing - .addElement('C', ofBlock(GregTech_API.sBlockCasings9, 15)) - // Non-Photonic Matter Exclusion Glass - .addElement('D', ofBlock(GregTech_API.sBlockGlass1, 3)) - .addElement('E', ofFrame(Materials.Bedrockium)) - .build(); - - private static class CatalystCombination { - - public ItemStack firstCatalyst; - public ItemStack secondCatalyst; - - public static ItemList[] CATALYST_ITEMS = new ItemList[] { ItemList.Quark_Creation_Catalyst_Up, - ItemList.Quark_Creation_Catalyst_Down, ItemList.Quark_Creation_Catalyst_Bottom, - ItemList.Quark_Creation_Catalyst_Top, ItemList.Quark_Creation_Catalyst_Strange, - ItemList.Quark_Creation_Catalyst_Charm }; - - public CatalystCombination(ItemStack first, ItemStack second) { - firstCatalyst = first; - secondCatalyst = second; - } - - public boolean matches(ItemStack a, ItemStack b) { - return (a.isItemEqual(firstCatalyst) && b.isItemEqual(secondCatalyst)) - || (b.isItemEqual(firstCatalyst) && a.isItemEqual(secondCatalyst)); - } - - public NBTTagCompound saveToNBT() { - NBTTagCompound nbt = new NBTTagCompound(); - NBTTagCompound first = new NBTTagCompound(); - NBTTagCompound second = new NBTTagCompound(); - firstCatalyst.writeToNBT(first); - secondCatalyst.writeToNBT(second); - nbt.setTag("first", first); - nbt.setTag("second", second); - return nbt; - } - - public static CatalystCombination readFromNBT(NBTTagCompound nbt) { - NBTTagCompound first = nbt.getCompoundTag("first"); - NBTTagCompound second = nbt.getCompoundTag("second"); - return new CatalystCombination( - ItemStack.loadItemStackFromNBT(first), - ItemStack.loadItemStackFromNBT(second)); - } - } - - private static CatalystCombination generateNewCombination() { - ThreadLocalRandom random = ThreadLocalRandom.current(); - // Generate two unique indices into the list - int firstIndex = random.nextInt(0, CatalystCombination.CATALYST_ITEMS.length); - int secondIndex = random.nextInt(0, CatalystCombination.CATALYST_ITEMS.length); - while (secondIndex == firstIndex) { - secondIndex = random.nextInt(0, CatalystCombination.CATALYST_ITEMS.length); - } - - return new CatalystCombination( - CatalystCombination.CATALYST_ITEMS[firstIndex].get(1), - CatalystCombination.CATALYST_ITEMS[secondIndex].get(1)); - } - - private CatalystCombination currentCombination = null; - - private ArrayList insertedCatalysts = new ArrayList<>(); - - private static final long CATALYST_BASE_COST = 144L; - - private int correctStartIndex = -1; - private int numCasings = 0; - private static final int MIN_CASINGS = 300; - - public GT_MetaTileEntity_PurificationUnitParticleExtractor(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PurificationUnitParticleExtractor(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PurificationUnitParticleExtractor(mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean active, boolean redstoneLevel) { - if (side == facing) { - if (active) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN) }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - hintsOnly, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET, - elementBudget, - env, - true); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - numCasings = 0; - if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; - if (numCasings < MIN_CASINGS) return false; - return super.checkMachine(aBaseMetaTileEntity, aStack); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Purification Unit") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.BOLD - + "Water Tier: " - + EnumChatFormatting.WHITE - + GT_Utility.formatNumbers(getWaterTier()) - + EnumChatFormatting.RESET) - .addInfo("Controller block for the Absolute Baryonic Perfection Purification Unit.") - .addInfo("Must be linked to a Purification Plant using a data stick to work.") - .addSeparator() - .addInfo( - "Insert " + EnumChatFormatting.WHITE - + "Quark Releasing Catalysts " - + EnumChatFormatting.GRAY - + "into the input bus while running.") - .addInfo( - "Every recipe cycle, a different combination of " + EnumChatFormatting.RED - + "2" - + EnumChatFormatting.GRAY - + " different " - + EnumChatFormatting.WHITE - + "Quark Releasing Catalysts") - .addInfo("will correctly identify the lone quark and succeed the recipe.") - .addSeparator() - .addInfo( - "Every " + EnumChatFormatting.RED - + "20" - + EnumChatFormatting.GRAY - + " ticks, consumes ALL catalysts in the input bus.") - .addInfo( - "The base cost of inserting a catalyst is " + EnumChatFormatting.RED - + CATALYST_BASE_COST - + "L" - + EnumChatFormatting.WHITE - + " Molten Infinity") - .addInfo("For every duplicate occurrence of an inserted catalyst in the sequence, this cost is doubled.") - .addSeparator() - .addInfo("Keeps track of the entire sequence of catalysts inserted this recipe.") - .addInfo( - "If the correct catalyst combination is in the sequence of inserted catalysts, immediately outputs " - + EnumChatFormatting.WHITE - + "Stabilised Baryonic Matter") - .addInfo("At the end of the recipe, all incorrectly inserted catalysts are returned in the output bus.") - .addSeparator() - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "The final stage of water purification goes beyond subatomic particles and identifies the smallest") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "possible imperfections within the baryons themselves. By correctly identifying which pairs of quark") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "flavors are required, the unit will activate the catalysts, stabilizing the errant particles.") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "This ultimately creates both Stabilised Baryonic Matter and, most importantly, absolutely perfectly purified water.") - .addInfo(AuthorNotAPenguin) - .beginStructureBlock(17, 17, 17, false) - .addCasingInfoMinColored( - "Quark Exclusion Casing", - EnumChatFormatting.GRAY, - MIN_CASINGS, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Femtometer-Calibrated Particle Beam Casing", - EnumChatFormatting.GRAY, - 96, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Particle Beam Guidance Pipe Casing", - EnumChatFormatting.GRAY, - 37, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Non-Photonic Matter Exclusion Glass", - EnumChatFormatting.GRAY, - 240, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Bedrockium Frame Box", - EnumChatFormatting.GRAY, - 108, - EnumChatFormatting.GOLD, - false) - .addController("Front Center") - .addInputBus("Any Quark Exclusion Casing", 1) - .addInputHatch("Any Quark Exclusion Casing", 1) - .addOutputBus("Any Quark Exclusion Casing", 1) - .addOutputHatch("Any Quark Exclusion Casing", 1) - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.purificationParticleExtractionRecipes; - } - - @Override - public void startCycle(int cycleTime, int progressTime) { - super.startCycle(cycleTime, progressTime); - this.insertedCatalysts.clear(); - this.currentCombination = generateNewCombination(); - correctStartIndex = -1; - } - - private boolean isCatalyst(ItemStack stack) { - if (stack.getItem() instanceof GT_MetaGenerated_Item_03) { - int meta = stack.getItemDamage() - 32000; // why, greg. - return meta >= ID_MetaItem_03.Quark_Creation_Catalyst_Up.ID - && meta <= ID_MetaItem_03.Quark_Creation_Catalyst_Top.ID; - } - return false; - } - - @Override - public void endCycle() { - super.endCycle(); - // Output incorrect indices unchanged, the spent ones will follow if recipe was successful from the actual - // recipe outputs - for (int i = 0; i < insertedCatalysts.size(); ++i) { - if (i == correctStartIndex || i == correctStartIndex + 1) continue; - - addOutput(insertedCatalysts.get(i)); - } - } - - @Override - public float calculateFinalSuccessChance() { - // Only succeed if correct combination was inserted - if (correctStartIndex != -1) return 100.0f; - else return 0.0f; - } - - private int calculateCatalystCost(ItemStack newCatalyst) { - // Count number of previously inserted catalysts - int count = 0; - for (ItemStack cat : this.insertedCatalysts) { - // We already assume that newCatalyst is a valid catalyst item - if (cat.getItemDamage() == newCatalyst.getItemDamage()) { - ++count; - } - } - // Cost is exponential in function of amount of duplicate catalysts - return (int) (Math.pow(2, count) * CATALYST_BASE_COST); - } - - // Returns the first index of a valid combination, or -1 if there is no valid combination in the sequence - public int checkSequence() { - // Loop over the entire sequence and check if any pair contains a valid combination - for (int i = 0; i < insertedCatalysts.size() - 1; ++i) { - ItemStack first = insertedCatalysts.get(i); - ItemStack second = insertedCatalysts.get(i + 1); - // Found a match, return its starting index - if (currentCombination.matches(first, second)) { - return i; - } - } - // No match found, return -1 - return -1; - } - - @Override - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.runMachine(aBaseMetaTileEntity, aTick); - // Every 20 ticks, add all catalysts from the input bus to the internal inventory. - if (mMaxProgresstime > 0 && aTick % 20 == 0) { - ArrayList storedInputs = getStoredInputs(); - // For each stack in the input, check if it is a valid catalyst item and if so consume it - for (ItemStack stack : storedInputs) { - if (isCatalyst(stack)) { - // Try to deplete catalyst cost first - int cost = calculateCatalystCost(stack); - FluidStack inputCost = Materials.Infinity.getMolten(cost); - // Drain the input cost directly from a hatch since we are not inside - // recipe processing - boolean drained = false; - for (GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) { - FluidStack drainedStack = hatch.drain(ForgeDirection.UNKNOWN, inputCost, true); - if (drainedStack != null && drainedStack.amount == inputCost.amount) { - drained = true; - break; - } - } - // If we could not drain, stop the machine - if (!drained) { - stopMachine(ShutDownReasonRegistry.outOfFluid(inputCost)); - return; - } - // Now add the catalysts to the list, one by one since there may be multiples and we want to - // keep them as single entries in the list - for (int i = 0; i < stack.stackSize; ++i) { - ItemStack singleStack = new ItemStack(stack.getItem(), 1, stack.getItemDamage()); - this.insertedCatalysts.add(singleStack); - } - // Then deplete the entire stack - this.depleteInput(stack); - } - } - - // Only do this check if we didn't find a correct combination yet - if (correctStartIndex != -1) return; - - // Now check the sequence for a correct combination - correctStartIndex = checkSequence(); - // If we found something, immediately output stable baryonic matter - if (correctStartIndex != -1) addOutput(Materials.StableBaryonicMatter.getFluid(BARYONIC_MATTER_OUTPUT)); - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - NBTTagCompound insertedNBT = new NBTTagCompound(); - for (int i = 0; i < insertedCatalysts.size(); ++i) { - ItemStack inserted = insertedCatalysts.get(i); - NBTTagCompound itemNBT = new NBTTagCompound(); - inserted.writeToNBT(itemNBT); - insertedNBT.setTag(Integer.toString(i), itemNBT); - } - aNBT.setTag("insertedItems", insertedNBT); - aNBT.setInteger("correctStartIndex", correctStartIndex); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - // Generate a random combination on load - currentCombination = generateNewCombination(); - if (aNBT.hasKey("insertedItems")) { - NBTTagCompound insertedList = aNBT.getCompoundTag("insertedItems"); - // Initialize empty list with correct size - this.insertedCatalysts = new ArrayList<>( - Collections.nCopies( - insertedList.func_150296_c() - .size(), - null)); - for (String key : insertedList.func_150296_c()) { - NBTTagCompound itemCompound = insertedList.getCompoundTag(key); - int index = Integer.parseInt(key); - this.insertedCatalysts.set(index, ItemStack.loadItemStackFromNBT(itemCompound)); - } - } - if (aNBT.hasKey("correctStartIndex")) { - correctStartIndex = aNBT.getInteger("correctStartIndex"); - } - super.loadNBTData(aNBT); - } - - private String getCorrectlyDecodedString() { - if (correctStartIndex != -1) { - return EnumChatFormatting.GREEN + "Yes"; - } - return EnumChatFormatting.RED + "No"; - } - - public EnumChatFormatting getQuarkColor(ItemStack stack) { - int meta = stack.getItemDamage() - 32000; - if (meta == ID_MetaItem_03.Quark_Creation_Catalyst_Up.ID) return EnumChatFormatting.BLUE; - if (meta == ID_MetaItem_03.Quark_Creation_Catalyst_Down.ID) return EnumChatFormatting.LIGHT_PURPLE; - if (meta == ID_MetaItem_03.Quark_Creation_Catalyst_Strange.ID) return EnumChatFormatting.YELLOW; - if (meta == ID_MetaItem_03.Quark_Creation_Catalyst_Charm.ID) return EnumChatFormatting.GREEN; - if (meta == ID_MetaItem_03.Quark_Creation_Catalyst_Bottom.ID) return EnumChatFormatting.AQUA; - if (meta == ID_MetaItem_03.Quark_Creation_Catalyst_Top.ID) return EnumChatFormatting.RED; - return EnumChatFormatting.GRAY; - } - - public String[] getInfoData() { - ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add("Catalyst insertion history for this recipe cycle"); - for (int i = 0; i < insertedCatalysts.size(); ++i) { - ItemStack stack = insertedCatalysts.get(i); - String name = stack.getDisplayName(); - String[] split = name.split("-"); - info.add( - EnumChatFormatting.YELLOW + "" - + (i + 1) - + ": " - + getQuarkColor(stack) - + split[0] - + EnumChatFormatting.GRAY - + "-" - + split[1]); - } - info.add("Quark Combination correctly identified: " + getCorrectlyDecodedString()); - return info.toArray(new String[] {}); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getWaterTier() { - return 8; - } - - @Override - public long getBasePowerUsage() { - return TierEU.RECIPE_UEV; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitPhAdjustment.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitPhAdjustment.java deleted file mode 100644 index 58b689b04d..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitPhAdjustment.java +++ /dev/null @@ -1,611 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorNotAPenguin; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ThreadLocalRandom; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.api.util.shutdown.SimpleShutDownReason; - -public class GT_MetaTileEntity_PurificationUnitPhAdjustment - extends GT_MetaTileEntity_PurificationUnitBase - implements ISurvivalConstructable { - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final int STRUCTURE_X_OFFSET = 7; - private static final int STRUCTURE_Y_OFFSET = 4; - private static final int STRUCTURE_Z_OFFSET = 1; - - private static final String[][] structure = new String[][] { - // spotless:off - { "E E E E", "EAAAE EAAAE", "EAGAE EAHAE", "EAGAE EAHAE", "EAGAE EAHAE", "EAAAE EAAAE" }, - { " AAA AAA ", "A A A A", "A A A A", "A A A A", "A ABB~BBA A", "AAAAA AAAAA" }, - { " AXA AYA ", "A A A A", "G A A H", "G ABBBBBA H", "G H", "AAAAABRBRBAAAAA" }, - { " AAA AAA ", "A A A A", "A A A A", "A A A A", "A AIIIIIA A", "AAAAA AAAAA" }, - { "E E E E", "EAAAE EAAAE", "EAGAE EAHAE", "EAGAE EAHAE", "EAGAE EAHAE", "EAAAE EAAAE" } }; - // spotless:on - - private static final int CASING_INDEX_MIDDLE = getTextureIndex(GregTech_API.sBlockCasings9, 7); - private static final int CASING_INDEX_TOWER = getTextureIndex(GregTech_API.sBlockCasings9, 8); - - /** - * The current pH value of the water inside the multiblock - */ - private float currentpHValue = 0.0f; - - /** - * The multiblock will try to consume catalyst every CONSUME_INTERVAL ticks. - */ - private static final int CONSUME_INTERVAL = 1 * SECONDS; - - /** - * Maximum deviation the initial pH value can have away from the neutral value. - */ - private static final float INITIAL_PH_DEVIATION = 2.5f; - - /** - * pH value of entirely pH neutral water. - */ - private static final float PH_NEUTRAL_VALUE = 7.0f; - - /** - * Maximum deviation from the neutral value that is allowed for the recipe to succeed. - */ - private static final float PH_MAX_DEVIATION = 0.05f; - - /** - * Change in pH value for each piece of alkaline dust supplied. - */ - public static final float PH_PER_ALKALINE_DUST = 0.01f; - - /** - * Change in pH value for every 10L of acid supplied. - */ - public static final float PH_PER_10_ACID_LITER = -0.01f; - - /** - * Alkaline catalyst material - */ - public static final Materials ALKALINE_MATERIAL = Materials.SodiumHydroxide; - - /** - * Acidic catalyst material - */ - public static final Materials ACIDIC_MATERIAL = Materials.HydrochloricAcid; - - /** - * The input hatch for the acidic material - */ - private GT_MetaTileEntity_Hatch_Input acidInputHatch; - /** - * The input bus for the alkaline material - */ - private GT_MetaTileEntity_Hatch_InputBus alkalineInputBus; - - /** - * List of all placed sensor hatches in the multi, so we can update them with the proper pH value when it changes. - */ - private final ArrayList sensorHatches = new ArrayList<>(); - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, structure) - // Extreme Corrosion Resistant Casing - .addElement('A', ofBlock(GregTech_API.sBlockCasings9, 8)) - // Naquadah Reinforced Water Plant Casing - .addElement('B', ofBlock(GregTech_API.sBlockCasings9, 7)) - .addElement('E', ofFrame(Materials.NaquadahAlloy)) - // pH Resistant Glass - .addElement('G', ofBlock(GregTech_API.sBlockGlass1, 0)) - .addElement('H', ofBlock(GregTech_API.sBlockGlass1, 0)) - // Regular I/O hatches - .addElement( - 'I', - ofChain( - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeastList(t.getAllowedHatches()) - .dot(1) - .casingIndex(CASING_INDEX_MIDDLE) - .build()), - // Naquadah Reinforced Water Plant Casing - ofBlock(GregTech_API.sBlockCasings9, 7))) - .addElement( - 'R', - ofChain( - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeast(SpecialHatchElement.PhSensor) - .dot(2) - .cacheHint(() -> "pH Sensor Hatch") - .casingIndex(CASING_INDEX_MIDDLE) - .build()), - // Naquadah Reinforced Water Plant Casing - ofBlock(GregTech_API.sBlockCasings9, 7))) - // Special I/O hatches - .addElement( - 'X', - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeast(InputBus) - .dot(3) - .adder(GT_MetaTileEntity_PurificationUnitPhAdjustment::addAlkalineBusToMachineList) - .cacheHint(() -> "Input Bus (" + ALKALINE_MATERIAL.mLocalizedName + ")") - .casingIndex(CASING_INDEX_TOWER) - .allowOnly(ForgeDirection.UP) - .build())) - .addElement( - 'Y', - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeast(InputHatch) - .dot(4) - .adder(GT_MetaTileEntity_PurificationUnitPhAdjustment::addAcidHatchToMachineList) - .cacheHint(() -> "Input Hatch (" + ACIDIC_MATERIAL.mLocalizedName + ")") - .casingIndex(CASING_INDEX_TOWER) - .allowOnly(ForgeDirection.UP) - .build())) - .build(); - - private List> getAllowedHatches() { - return ImmutableList.of(InputHatch, OutputHatch); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MIDDLE), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MIDDLE), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MIDDLE) }; - } - - public GT_MetaTileEntity_PurificationUnitPhAdjustment(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PurificationUnitPhAdjustment(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PurificationUnitPhAdjustment(this.mName); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - hintsOnly, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET, - elementBudget, - env, - true); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.purificationPhAdjustmentRecipes; - } - - public boolean addAcidHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = null; - acidInputHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - return true; - } - return false; - } - - public boolean addAlkalineBusToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity).mRecipeMap = null; - alkalineInputBus = (GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity; - return true; - } - return false; - } - - public boolean addSensorHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_pHSensor) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return this.sensorHatches.add((GT_MetaTileEntity_pHSensor) aMetaTileEntity); - } - return false; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Purification Unit") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.BOLD - + "Water Tier: " - + EnumChatFormatting.WHITE - + GT_Utility.formatNumbers(getWaterTier()) - + EnumChatFormatting.RESET) - .addInfo("Controller block for the pH Neutralization Purification Unit.") - .addInfo("Must be linked to a Purification Plant using a data stick to work.") - .addSeparator() - .addInfo( - "Initial pH value every cycle varies from " + EnumChatFormatting.RED - + (PH_NEUTRAL_VALUE - INITIAL_PH_DEVIATION) - + EnumChatFormatting.GRAY - + " - " - + EnumChatFormatting.RED - + (PH_NEUTRAL_VALUE + INITIAL_PH_DEVIATION) - + " pH" - + EnumChatFormatting.GRAY - + ".") - .addInfo( - "If the pH value is within " + EnumChatFormatting.RED - + PH_MAX_DEVIATION - + " pH " - + EnumChatFormatting.GRAY - + "of 7.0 pH at the end of the cycle, the recipe always succeeds.") - .addInfo("Otherwise, the recipe always fails.") - .addInfo("Use a pH Sensor Hatch to read the current pH value.") - .addInfo("For safety, the machine will shut down if the pH goes below 0 or exceeds 14.") - .addSeparator() - .addInfo( - "Every " + EnumChatFormatting.RED - + CONSUME_INTERVAL - + EnumChatFormatting.GRAY - + " ticks, consumes ALL " - + EnumChatFormatting.WHITE - + ALKALINE_MATERIAL.mLocalizedName - + EnumChatFormatting.GRAY - + " and " - + EnumChatFormatting.WHITE - + ACIDIC_MATERIAL.mLocalizedName - + EnumChatFormatting.GRAY - + " in the special hatches.") - .addInfo( - EnumChatFormatting.RED + "Raises " - + EnumChatFormatting.GRAY - + "the pH value by " - + EnumChatFormatting.RED - + PH_PER_ALKALINE_DUST - + " pH " - + EnumChatFormatting.GRAY - + "per piece of " - + EnumChatFormatting.WHITE - + ALKALINE_MATERIAL.getDust(1) - .getDisplayName() - + EnumChatFormatting.GRAY - + ".") - .addInfo( - EnumChatFormatting.RED + "Lowers " - + EnumChatFormatting.GRAY - + "the pH value by " - + EnumChatFormatting.RED - + -PH_PER_10_ACID_LITER - + " pH " - + EnumChatFormatting.GRAY - + "per " - + EnumChatFormatting.RED - + "10L " - + EnumChatFormatting.GRAY - + "of " - + EnumChatFormatting.WHITE - + ACIDIC_MATERIAL.getFluid(1L) - .getLocalizedName() - + EnumChatFormatting.GRAY - + ".") - .addSeparator() - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "The fourth step of water purification is to neutralize the solution and bring its pH to exactly 7, rendering") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "the solution inert with no hydrogen ion activity beyond water’s natural amphiproticity. Acids and bases from soils") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "and geology cause natural alkalinity variations in water which can cause corrosive reactions with sensitive") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "materials. This necessitates the use of the corresponding neutralizing agents to pH balance the water.") - .addInfo(AuthorNotAPenguin) - .beginStructureBlock(7, 4, 7, false) - .addCasingInfoExactlyColored( - "Stabilized Naquadah Water Plant Casing", - EnumChatFormatting.GRAY, - 15, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Chemical Grade Glass", - EnumChatFormatting.GRAY, - 18, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Naquadah Alloy Frame Box", - EnumChatFormatting.GRAY, - 48, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Inert Neutralization Water Plant Casing", - EnumChatFormatting.GRAY, - 67 * 2, - EnumChatFormatting.GOLD, - false) - .addController("Front center") - .addOtherStructurePart("Input Hatch (Water)", EnumChatFormatting.GOLD + "1+", 1) - .addOtherStructurePart("Output Hatch", EnumChatFormatting.GOLD + "1", 1) - .addOtherStructurePart("pH Sensor Hatch", EnumChatFormatting.GOLD + "2", 2) - .addOtherStructurePart("Input Bus (Sodium Hydroxide)", EnumChatFormatting.GOLD + "1", 3) - .addOtherStructurePart("Input Hatch (Hydrochloric Acid)", EnumChatFormatting.GOLD + "1", 4) - .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void startCycle(int cycleTime, int progressTime) { - super.startCycle(cycleTime, progressTime); - // Randomize initial pH value - ThreadLocalRandom random = ThreadLocalRandom.current(); - // Generate random integer in [-RNG_PRECISION, RNG_PRECISION] - final int RNG_PRECISION = 1000; - int rng = random.nextInt(-RNG_PRECISION, RNG_PRECISION); - // Remap to [-1.0, 1.0] and then to [-INITIAL_PH_DEVIATION, INITIAL_PH_DEVIATION] - float deviation = ((float) rng / RNG_PRECISION) * INITIAL_PH_DEVIATION; - // Round to 2 digits - this.currentpHValue = Math.round((PH_NEUTRAL_VALUE + deviation) * 100.0f) / 100.0f; - } - - @Override - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.runMachine(aBaseMetaTileEntity, aTick); - // Eat all acid and alkaline material every second - if (mMaxProgresstime > 0 && aTick % CONSUME_INTERVAL == 0) { - // Important that we drain backwards, since draining stacks can auto-sort the bus - long totalAlkalineDrained = 0; - for (int i = alkalineInputBus.getSizeInventory() - 1; i >= 0; --i) { - ItemStack stack = alkalineInputBus.getStackInSlot(i); - // If this ItemStack is the alkaline material, drain it entirely and record the amount drained - if (stack != null && stack.isItemEqual(ALKALINE_MATERIAL.getDust(1))) { - totalAlkalineDrained += stack.stackSize; - alkalineInputBus.decrStackSize(i, stack.stackSize); - } - } - - // Now do fluid, this is simpler since we only need to bother with one slot - FluidStack stack = acidInputHatch.getDrainableStack(); - int numMultiples = 0; - if (stack != null && stack.isFluidEqual(ACIDIC_MATERIAL.getFluid(1))) { - int acidAvailable = stack.amount; - // We only care about multiples of 10, but we still drain all. - numMultiples = Math.floorDiv(acidAvailable, 10); - acidInputHatch.drain(acidAvailable, true); - } else { - // Little easier egg: Fluoroantimonic acid has a pH value of -31, it's an acid so strong it will - // instantly shatter the glass in the structure. - - Fluid acid = FluidRegistry.getFluid("fluoroantimonic acid"); - if (stack != null && stack.getFluid() - .equals(acid)) { - // TODO: Actually break the glass and trigger achievement lol - } - - } - - // Adjust pH with to new value - this.currentpHValue = this.currentpHValue + totalAlkalineDrained * PH_PER_ALKALINE_DUST - + numMultiples * PH_PER_10_ACID_LITER; - - // Clamp pH to sensible values - this.currentpHValue = Math.min(Math.max(this.currentpHValue, 0.0f), 14.0f); - - // Round to 2 decimals - this.currentpHValue = Math.round(this.currentpHValue * 100.0f) / 100.0f; - - // If pH is 0 or 14, stop the machine - if (Math.abs(this.currentpHValue) < 0.001 || Math.abs(this.currentpHValue - 14.0f) < 0.001) { - stopMachine(SimpleShutDownReason.ofNormal("critical_ph_value")); - } - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - super.onPostTick(aBaseMetaTileEntity, aTimer); - // Update sensor hatch - for (GT_MetaTileEntity_pHSensor hatch : sensorHatches) { - hatch.updateRedstoneOutput(this.currentpHValue); - } - } - - @Override - public float calculateFinalSuccessChance() { - // Success chance is 100% when inside target range, 0% otherwise - float distance = Math.abs(this.currentpHValue - PH_NEUTRAL_VALUE); - if (distance <= PH_MAX_DEVIATION) { - return 100.0f; - } else { - return 0.0f; - } - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getWaterTier() { - return 4; - } - - @Override - public long getBasePowerUsage() { - return TierEU.RECIPE_ZPM; - } - - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; - // Do not form without positioned hatches - if (acidInputHatch == null || alkalineInputBus == null) return false; - return super.checkMachine(aBaseMetaTileEntity, aStack); - } - - @Override - public String[] getInfoData() { - ArrayList infoData = new ArrayList<>(Arrays.asList(super.getInfoData())); - infoData.add("Current pH Value: " + EnumChatFormatting.YELLOW + currentpHValue + " pH"); - return infoData.toArray(new String[] {}); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setFloat("mCurrentpH", this.currentpHValue); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.currentpHValue = aNBT.getFloat("mCurrentpH"); - } - - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_PURIFICATION_PH_LOOP.resourceLocation; - } - - private enum SpecialHatchElement implements IHatchElement { - - PhSensor(GT_MetaTileEntity_PurificationUnitPhAdjustment::addSensorHatchToMachineList, - GT_MetaTileEntity_pHSensor.class) { - - @Override - public long count( - GT_MetaTileEntity_PurificationUnitPhAdjustment gtMetaTileEntityPurificationUnitPhAdjustment) { - return gtMetaTileEntityPurificationUnitPhAdjustment.sensorHatches.size(); - } - }; - - private final List> mteClasses; - private final IGT_HatchAdder adder; - - @SafeVarargs - SpecialHatchElement(IGT_HatchAdder adder, - Class... mteClasses) { - this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); - this.adder = adder; - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - public IGT_HatchAdder adder() { - return adder; - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitPlasmaHeater.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitPlasmaHeater.java deleted file mode 100644 index 8b10cae9b7..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitPlasmaHeater.java +++ /dev/null @@ -1,566 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorNotAPenguin; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; -import static gregtech.api.recipe.RecipeMaps.purificationPlasmaHeatingRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Mods; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_PurificationUnitPlasmaHeater - extends GT_MetaTileEntity_PurificationUnitBase - implements ISurvivalConstructable { - - private static final int CASING_INDEX_HEATER = getTextureIndex(GregTech_API.sBlockCasings9, 11); - private static final int CASING_INDEX_TOWER = getTextureIndex(GregTech_API.sBlockCasings9, 5); - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final int STRUCTURE_X_OFFSET = 2; - private static final int STRUCTURE_Y_OFFSET = 14; - private static final int STRUCTURE_Z_OFFSET = 5; - - /** - * Fluid is consumed every CONSUME_INTERVAL ticks - */ - private static final long CONSUME_INTERVAL = 1 * SECONDS; - - /** - * Current internal temperature of the multiblock - */ - private long currentTemperature = 0; - /** - * Amount of successful heating cycles completed - */ - private int cyclesCompleted = 0; - /** - * Whether this recipe is ruined due to high temperature - */ - private boolean ruinedCycle = false; - - private enum CycleState { - // Was previously at 0K, currently waiting to heat to 10000K - Heating, - // Was previously at 10000K, currently waiting to cool down to 0K - Cooling - } - - private CycleState state = CycleState.Heating; - - // A cycle is 30s at shortest, a purification plant cycle is 120s. 33% chance per heating cycle - // will give you plenty of room for delay and still get to 99% chance. - public static final long SUCCESS_PER_CYCLE = 33; - - // Consumption rates in liters/second - public static final long MAX_PLASMA_PER_SEC = 10; - public static final long MAX_COOLANT_PER_SEC = 100; - // Change in temperature per consumed liter of plasma - public static final long PLASMA_TEMP_PER_LITER = 100; - // Change in temperature per consumed liter of coolant - public static final long COOLANT_TEMP_PER_LITER = -5; - // Temperature at which the batch is ruined - public static final long MAX_TEMP = 12500; - // Point at which the heating point of the cycle is reached - public static final long HEATING_POINT = 10000; - - private static final Materials plasmaMaterial = Materials.Helium; - private static final Materials coolantMaterial = Materials.SuperCoolant; - - private GT_MetaTileEntity_Hatch_Input plasmaInputHatch; - private GT_MetaTileEntity_Hatch_Input coolantInputHatch; - - private static final String[][] structure = new String[][] { - // spotless:off - { " DDDDDDD ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " DDDDD ", " DDDDD ", " DDKDD " }, - { " DD DD ", " DDDDDDD ", " DDDDD ", " ", " ", " ", " ", " ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DD DD ", " DD DD ", " DDDDDDDDD " }, - { " D D ", " DDD DDD ", " DDDDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " D D ", " D D ", " DDDDDDDDDDD " }, - { " D D ", " D DD ", " DD D ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " DDDDDDDDDDDDD " }, - { " D D", " DD DD ", " DD D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " DDDDDDDDDDDDD " }, - { " D D", " D D ", " DD D ", " D D ", " D D ", "GBBBG D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D", "G G D D", "GB~BG DDDDDDDDDDDDDDD" }, - { " D D", " D D ", " DD D ", " D D ", " BBB D D ", "BBBBB D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D", " EEEBBBBD D", "BAAAB DDDDDDDDDDDDDDD" }, - { " D D", " D D ", " DD D ", " D D ", " BBB D D ", "BBBBB D D ", " EFE D D ", " EFE D D ", " EFE D D ", " EFE D D ", " EFE D D ", " EFE D D ", " EFEBBBBD D", " EFE D D", "PAAABBBBDDDDDDDDDDDDDDD" }, - { " D D", " D D ", " DD D ", " D D ", " BBB D D ", "BBBBB D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D", " EEEBBBBD D", "BAAAB DDDDDDDDDDDDDDD" }, - { " D D", " D D ", " DD D ", " D D ", " D D ", "GBBBG D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D", "G G D D", "GBBBG DDDDDDDDDDDDDDD" }, - { " D D", " D D ", " D D ", " D DD ", " D DD ", " D DD ", " D DD ", " D DD ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " DDDDDDDDDDDDD " }, - { " D DD", " D D ", " D D ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " DDDDDDDDDDDDD " }, - { " D D ", " DD DD ", " D D ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " D D ", " D D ", " DDDDDDDDDDD " }, - { " DD DD ", " DDDDDDD ", " DDDDD ", " ", " ", " ", " ", " ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DD DD ", " DD DD ", " DDDDDDDDD " }, - { " DDDDDDD ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " DDDDD ", " DDDDD ", " DDDDD " } }; - // spotless:on - - private int casingCount = 0; - private static final int MIN_CASING = 50; - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, structure) - // Superconducting coil block - .addElement('A', ofBlock(GregTech_API.sBlockCasings1, 15)) - // Plasma Heating Casing - .addElement( - 'B', - ofChain( - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeastList(t.getAllowedHatches()) - .dot(1) - .casingIndex(CASING_INDEX_HEATER) - .build()), - onElementPass(t -> t.casingCount++, ofBlock(GregTech_API.sBlockCasings9, 11)))) - // Reinforced Sterile Water Plant Casing - .addElement('D', ofBlock(GregTech_API.sBlockCasings9, 5)) - // Any Tinted Glass - .addElement('E', ofBlockAnyMeta(GregTech_API.sBlockTintedGlass, 0)) - // Neonite, with fallback to air - .addElement('F', lazy(t -> { - if (Mods.Chisel.isModLoaded()) { - Block neonite = GameRegistry.findBlock(Mods.Chisel.ID, "neonite"); - return ofBlockAnyMeta(neonite, 7); - } else { - return ofBlockAnyMeta(Blocks.air); - } - })) - // Superconductor Base ZPM frame box - .addElement('G', ofFrame(Materials.Tetranaquadahdiindiumhexaplatiumosminid)) - // Coolant input hatch - .addElement( - 'K', - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeast(InputHatch) - .dot(2) - .adder(GT_MetaTileEntity_PurificationUnitPlasmaHeater::addCoolantHatchToMachineList) - .cacheHint(() -> "Input Hatch (Coolant)") - .casingIndex(CASING_INDEX_TOWER) - .buildAndChain(ofBlock(GregTech_API.sBlockCasings9, 5)))) - // Plasma input hatch - .addElement( - 'P', - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeast(InputHatch) - .dot(3) - .adder(GT_MetaTileEntity_PurificationUnitPlasmaHeater::addPlasmaHatchToMachineList) - .cacheHint(() -> "Input Hatch (Plasma)") - .casingIndex(CASING_INDEX_HEATER) - .buildAndChain(ofBlock(GregTech_API.sBlockCasings9, 11)))) - .build(); - - private List> getAllowedHatches() { - return ImmutableList.of(InputHatch, OutputHatch); - } - - public GT_MetaTileEntity_PurificationUnitPlasmaHeater(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PurificationUnitPlasmaHeater(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PurificationUnitPlasmaHeater(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean active, boolean redstoneLevel) { - if (side == facing) { - if (active) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_HEATER), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_HEATER), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_HEATER) }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - hintsOnly, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET, - elementBudget, - env, - true); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public RecipeMap getRecipeMap() { - return purificationPlasmaHeatingRecipes; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Purification Unit") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.BOLD - + "Water Tier: " - + EnumChatFormatting.WHITE - + GT_Utility.formatNumbers(getWaterTier()) - + EnumChatFormatting.RESET) - .addInfo("Controller block for the Extreme Temperature Fluctuation Purification Unit.") - .addInfo("Must be linked to a Purification Plant using a data stick to work.") - .addSeparator() - .addInfo( - "Complete heating cycles by first heating the water to " + EnumChatFormatting.RED - + HEATING_POINT - + "K" - + EnumChatFormatting.GRAY - + ",") - .addInfo( - "and then cooling it back down to " + EnumChatFormatting.RED + "0K" + EnumChatFormatting.GRAY + ".") - .addInfo( - "Initial temperature is reset to " + EnumChatFormatting.RED - + "0K" - + EnumChatFormatting.GRAY - + " on recipe start.") - .addInfo( - // TODO: Refer to heating cycles in another way to avoid confusion - "Each completed heating cycle boosts success chance by " + EnumChatFormatting.RED - + SUCCESS_PER_CYCLE - + "%.") - .addInfo( - "If the temperature ever reaches " + EnumChatFormatting.RED - + MAX_TEMP - + "K" - + EnumChatFormatting.GRAY - + " the recipe will fail and output steam.") - .addSeparator() - .addInfo( - "Consumes up to " + EnumChatFormatting.RED - + MAX_PLASMA_PER_SEC - + "L/s " - + EnumChatFormatting.WHITE - + plasmaMaterial.getPlasma(1) - .getLocalizedName() - + EnumChatFormatting.GRAY - + " and up to " - + EnumChatFormatting.RED - + MAX_COOLANT_PER_SEC - + "L/s " - + EnumChatFormatting.WHITE - + coolantMaterial.getFluid(1) - .getLocalizedName()) - .addInfo( - EnumChatFormatting.RED + "Raises " - + EnumChatFormatting.GRAY - + "the temperature by " - + EnumChatFormatting.RED - + PLASMA_TEMP_PER_LITER - + "K" - + EnumChatFormatting.GRAY - + " per liter of plasma consumed.") - .addInfo( - EnumChatFormatting.RED + "Lowers " - + EnumChatFormatting.GRAY - + "the temperature by " - + EnumChatFormatting.RED - + -COOLANT_TEMP_PER_LITER - + "K" - + EnumChatFormatting.GRAY - + " per liter of coolant consumed.") - .addSeparator() - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "Step five of water purification is to evaporate complex organic polymers and extremophile organisms") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "that might be resistant to simple acids, clarifying agents, and filters. Using an ultra high") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "pressure chamber in combination with extreme temperature fluctuations allows the water to remain") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "supercritical while evaporating any remaining contaminants, ready for filtration.") - .addInfo(AuthorNotAPenguin) - .beginStructureBlock(23, 15, 15, false) - .addCasingInfoExactlyColored( - "Reinforced Sterile Water Plant Casing", - EnumChatFormatting.GRAY, - 1091, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Heat-Resistant Trinium Plated Casing", - EnumChatFormatting.GRAY, - 54, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Any Tinted Industrial Glass", - EnumChatFormatting.GRAY, - 64, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Superconductor Base ZPM Frame Box", - EnumChatFormatting.GRAY, - 40, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored("Any Neonite", EnumChatFormatting.GRAY, 8, EnumChatFormatting.GOLD, false) - .addCasingInfoExactlyColored( - "Superconducting Coil Block", - EnumChatFormatting.GRAY, - 8, - EnumChatFormatting.GOLD, - false) - .addController("Front center") - .addOtherStructurePart("Input Hatch (Water)", EnumChatFormatting.GOLD + "1+", 1) - .addOtherStructurePart("Output Hatch", EnumChatFormatting.GOLD + "1", 1) - .addOtherStructurePart("Input Hatch (Coolant)", EnumChatFormatting.GOLD + "1", 2) - .addOtherStructurePart("Input Hatch (Plasma)", EnumChatFormatting.GOLD + "1", 3) - .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public void startCycle(int cycleTime, int progressTime) { - super.startCycle(cycleTime, progressTime); - // Reset internal state - this.cyclesCompleted = 0; - this.currentTemperature = 0; - this.ruinedCycle = false; - this.state = CycleState.Heating; - } - - // Drains up to maxAmount of a fluid if it is the same fluid as given, returns the amount drained - private long drainFluidLimited(GT_MetaTileEntity_Hatch_Input inputHatch, FluidStack fluid, long maxAmount) { - FluidStack hatchStack = inputHatch.getDrainableStack(); - if (hatchStack == null) return 0; - if (hatchStack.isFluidEqual(fluid)) { - long amountToDrain = Math.min(maxAmount, hatchStack.amount); - if (amountToDrain > 0) { - inputHatch.drain((int) amountToDrain, true); - } - return amountToDrain; - } else { - return 0; - } - } - - @Override - public void addRecipeOutputs() { - super.addRecipeOutputs(); - // If the cycle was ruined, output steam - if (this.ruinedCycle) { - FluidStack insertedWater = currentRecipe.mFluidInputs[0]; - // Multiply by 60 since that's the water:steam ratio in GTNH - long steamAmount = insertedWater.amount * 60L; - addOutput(GT_ModHandler.getSteam(steamAmount)); - } - } - - @Override - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.runMachine(aBaseMetaTileEntity, aTick); - if (mMaxProgresstime > 0 && aTick % CONSUME_INTERVAL == 0) { - // Drain plasma and coolant up to limited amount per second - long plasmaDrained = drainFluidLimited(plasmaInputHatch, plasmaMaterial.getPlasma(1L), MAX_PLASMA_PER_SEC); - long coolantDrained = drainFluidLimited( - coolantInputHatch, - coolantMaterial.getFluid(1L), - MAX_COOLANT_PER_SEC); - // Calculate temperature change - long tempChance = plasmaDrained * PLASMA_TEMP_PER_LITER + coolantDrained * COOLANT_TEMP_PER_LITER; - currentTemperature = Math.max(0, currentTemperature + tempChance); - // Check if batch was ruined - if (currentTemperature > MAX_TEMP) { - ruinedCycle = true; - } - // Update cycle state. - switch (state) { - case Heating -> { - // Heating state can change to cooling when temperature exceeds 10000K - if (currentTemperature >= HEATING_POINT) { - state = CycleState.Cooling; - } - } - case Cooling -> { - if (currentTemperature == 0) { - state = CycleState.Heating; - cyclesCompleted += 1; - } - } - } - } - } - - public boolean addCoolantHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = null; - coolantInputHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - return true; - } - return false; - } - - public boolean addPlasmaHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = null; - plasmaInputHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - return true; - } - return false; - } - - @Override - public float calculateFinalSuccessChance() { - if (ruinedCycle) return 0.0f; - // Success chance directly depends on number of cycles completed. - return cyclesCompleted * SUCCESS_PER_CYCLE + currentRecipeChance; - } - - @Override - public String[] getInfoData() { - ArrayList infoData = new ArrayList<>(Arrays.asList(super.getInfoData())); - infoData.add("Current temperature: " + EnumChatFormatting.YELLOW + currentTemperature + "K"); - infoData.add("Heating cycles completed this run: " + EnumChatFormatting.YELLOW + cyclesCompleted); - return infoData.toArray(new String[] {}); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setLong("mCurrentTemperature", currentTemperature); - aNBT.setInteger("mCyclesCompleted", cyclesCompleted); - aNBT.setBoolean("mRuinedCycle", ruinedCycle); - aNBT.setString("mCycleState", state.toString()); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - currentTemperature = aNBT.getLong("mCurrentTemperature"); - cyclesCompleted = aNBT.getInteger("mCyclesCompleted"); - ruinedCycle = aNBT.getBoolean("mRuinedCycle"); - state = CycleState.valueOf(aNBT.getString("mCycleState")); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getWaterTier() { - return 5; - } - - @Override - public long getBasePowerUsage() { - return TierEU.RECIPE_UV; - } - - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - casingCount = 0; - if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; - if (casingCount < MIN_CASING) return false; - // Do not form without positioned hatches - if (plasmaInputHatch == null || coolantInputHatch == null) return false; - return super.checkMachine(aBaseMetaTileEntity, aStack); - } - - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_PURIFICATION_PLASMA_LOOP.resourceLocation; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitUVTreatment.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitUVTreatment.java deleted file mode 100644 index f542216617..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_PurificationUnitUVTreatment.java +++ /dev/null @@ -1,526 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorNotAPenguin; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.ThreadLocalRandom; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; - -public class GT_MetaTileEntity_PurificationUnitUVTreatment - extends GT_MetaTileEntity_PurificationUnitBase - implements ISurvivalConstructable { - - private static final int CASING_INDEX_MAIN = getTextureIndex(GregTech_API.sBlockCasings9, 12); - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final int STRUCTURE_X_OFFSET = 6; - private static final int STRUCTURE_Y_OFFSET = 8; - private static final int STRUCTURE_Z_OFFSET = 0; - - private GT_MetaTileEntity_LensHousing lensInputBus; - private GT_MetaTileEntity_LensIndicator lensIndicator; - - private UVTreatmentLensCycle lensCycle = null; - - /** - * Bonus chance to success for each lens swap - */ - public static final float SUCCESS_PER_LENS = 10.0f; - - /** - * Maximum amount of ticks between two lens swaps - */ - public static final int MAX_TIME_BETWEEN_SWAPS = GT_MetaTileEntity_PurificationPlant.CYCLE_TIME_TICKS / 8; - /** - * Minimum amount of time between two lens swaps - */ - public static final int MIN_TIME_BETWEEN_SWAPS = MAX_TIME_BETWEEN_SWAPS / 4; - - public static final ArrayList LENS_ITEMS = new ArrayList<>(); - - private int numSwapsPerformed = 0; - private int timeUntilNextSwap = 0; - - private boolean removedTooEarly = false; - - private static final String[][] structure = new String[][] { - // spotless:off - { " ", " DDD ", " ", " ", " ", " ", " ", " DDD ", " H~H " }, - { " AAA ", " DDAAADD ", " BBB ", " BBB ", " BBB ", " BBB ", " BBB ", " DDBBBDD ", " AAAAAAA " }, - { " AAAAAAA ", " DDAACCCAADD ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " DDBB BBDD ", " AAAAAAAAAAA " }, - { " AAAAAAAAAAA ", "DAACCCCCCCAAD", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", "DBB BBD", "HAAAAAAAAAAAH" }, - { " AAAAALAAAAA ", "DACCCCCCCCCAD", " B B ", " B B ", " B B ", " B B ", " B B ", "DB BD", "HAAAAAAAAAAAH" }, - { " AAAAAAAAAAA ", "DAACCCCCCCAAD", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", "DBB BBD", "HAAAAAAAAAAAH" }, - { " AAAAAAA ", " DDAACCCAADD ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " DDBB BBDD ", " AAAAAAAAAAA " }, - { " AIA ", " DDAAADD ", " BBB ", " BBB ", " BBB ", " BBB ", " BBB ", " DDBBBDD ", " AAAAAAA " }, - { " ", " DDD ", " ", " ", " ", " ", " ", " DDD ", " HHH " } }; - // spotless:on - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, structure) - // Naquadria-Reinforced Water Plant Casing - .addElement('A', ofBlock(GregTech_API.sBlockCasings9, 12)) - // Neutronium-Coated UV-Resistant Glass - .addElement('B', ofBlock(GregTech_API.sBlockGlass1, 1)) - // UV Backlight sterilizer casing - .addElement('C', ofBlock(GregTech_API.sBlockCasings9, 13)) - .addElement('D', ofFrame(Materials.StellarAlloy)) - // Lens housing bus - .addElement( - 'L', - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeast(SpecialHatchElement.LensHousing) - .dot(2) - .cacheHint(() -> "Lens Housing") - .casingIndex(CASING_INDEX_MAIN) - .build())) - // Lens indicator hatch - .addElement( - 'I', - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeast(SpecialHatchElement.LensIndicator) - .dot(3) - .cacheHint(() -> "Lens Indicator") - .casingIndex(CASING_INDEX_MAIN) - .build())) - // Input or output hatch - .addElement( - 'H', - ofChain( - lazy( - t -> GT_StructureUtility.buildHatchAdder() - .atLeastList(Arrays.asList(InputHatch, OutputHatch)) - .dot(1) - .cacheHint(() -> "Input Hatch, Output Hatch") - .casingIndex(CASING_INDEX_MAIN) - .build()), - // Naquadria-reinforced Water Plant Casing - ofBlock(GregTech_API.sBlockCasings9, 12))) - .build(); - - public GT_MetaTileEntity_PurificationUnitUVTreatment(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_PurificationUnitUVTreatment(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_PurificationUnitUVTreatment(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean active, boolean redstoneLevel) { - if (side == facing) { - if (active) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN) }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - hintsOnly, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - STRUCTURE_X_OFFSET, - STRUCTURE_Y_OFFSET, - STRUCTURE_Z_OFFSET, - elementBudget, - env, - true); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Purification Unit"); - tt.addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.BOLD - + "Water Tier: " - + EnumChatFormatting.WHITE - + GT_Utility.formatNumbers(getWaterTier()) - + EnumChatFormatting.RESET) - .addInfo("Controller block for the High Energy Laser Purification Unit.") - .addInfo("Must be linked to a Purification Plant using a data stick to work.") - .addSeparator() - .addInfo( - "During operation, swap the lens in the " + EnumChatFormatting.WHITE - + "Lens Housing" - + EnumChatFormatting.GRAY - + ".") - .addInfo( - "The multiblock will output a signal through the " + EnumChatFormatting.WHITE + "Lens Indicator Hatch") - .addInfo("when the current lens must be swapped.") - .addInfo( - "Lens swaps will be requested in random intervals of " + EnumChatFormatting.RED - + (MIN_TIME_BETWEEN_SWAPS / SECONDS) - + " to " - + (MAX_TIME_BETWEEN_SWAPS / SECONDS) - + "s" - + EnumChatFormatting.GRAY - + ".") - .addSeparator() - .addInfo( - "Success chance is boosted by " + EnumChatFormatting.RED - + SUCCESS_PER_LENS - + "% " - + EnumChatFormatting.GRAY - + "for each successful swap performed.") - .addInfo("Removing a lens too early will fail the recipe.") - .addInfo("Find the order of lenses in the recipe in NEI,") - .addInfo("or use a portable scanner to view the currently requested lens.") - .addSeparator() - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "The sixth step of water purification involves identifying any remaining negatively charged ions within") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "the water which may cause electrical faults in future wafer manufacturing. Bombarding the water with varying") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "wavelengths of photon beams will impart energy into outer-shell electrons, causing them to detach from the") - .addInfo( - EnumChatFormatting.AQUA + "" - + EnumChatFormatting.ITALIC - + "atoms themselves and pass through the walls of the tank, ensuring the water is perfectly electrically polar.") - .addInfo(AuthorNotAPenguin) - .beginStructureBlock(13, 9, 9, true) - .addCasingInfoRangeColored( - "Naquadria-Reinforced Water Plant Casing", - EnumChatFormatting.GRAY, - 147, - 155, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Electron-Permeable Neutronium Coated Glass", - EnumChatFormatting.GRAY, - 144, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "High Energy Ultraviolet Emitter Casing", - EnumChatFormatting.GRAY, - 24, - EnumChatFormatting.GOLD, - false) - .addCasingInfoExactlyColored( - "Stellar Alloy Frame Box", - EnumChatFormatting.GRAY, - 56, - EnumChatFormatting.GOLD, - false) - .addController("Front center") - .addOtherStructurePart("Input Hatch, Output Hatch", EnumChatFormatting.GOLD + "1+", 1) - .addOtherStructurePart("Lens Housing", EnumChatFormatting.GOLD + "1", 2) - .addOtherStructurePart("Lens Indicator", EnumChatFormatting.GOLD + "1", 3) - .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") - .toolTipFinisher("GregTech"); - return tt; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.purificationUVTreatmentRecipes; - } - - @NotNull - @Override - public CheckRecipeResult checkProcessing() { - CheckRecipeResult result = super.checkProcessing(); - if (result.wasSuccessful()) { - this.lensCycle = new UVTreatmentLensCycle(LENS_ITEMS); - } - return result; - } - - private int generateNextSwapTime() { - ThreadLocalRandom random = ThreadLocalRandom.current(); - return random.nextInt(MIN_TIME_BETWEEN_SWAPS, MAX_TIME_BETWEEN_SWAPS); - } - - @Override - public void startCycle(int cycleTime, int progressTime) { - super.startCycle(cycleTime, progressTime); - // Reset internal state - this.timeUntilNextSwap = 0; - this.numSwapsPerformed = 0; - this.lensCycle.reset(); - this.removedTooEarly = false; - } - - private ItemStack getCurrentlyInsertedLens() { - return this.lensInputBus.getStackInSlot(0); - } - - @Override - protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.runMachine(aBaseMetaTileEntity, aTick); - - // Do no processing if no recipe is running - if (mMaxProgresstime <= 0) return; - - // This can happen because the lens cycle isn't saved to NBT correctly yet, FIXME - if (this.lensCycle == null) { - // FIXME: Properly save current recipe in NBT instead of exiting early - return; - } - - ItemStack currentLens = getCurrentlyInsertedLens(); - - // If we are currently counting down to a next swap, do so - if (timeUntilNextSwap > 0) { - timeUntilNextSwap -= 1; - // Set the indicator to not output a signal for now - lensIndicator.updateRedstoneOutput(false); - - // If we are counting down to the next swap, and there is no correct lens in the bus, we removed a lens - // too early - if (currentLens == null || !currentLens.isItemEqual(lensCycle.current())) { - removedTooEarly = true; - } - - // If the time until the next swap became zero, move on to the next requested lens - if (timeUntilNextSwap == 0) { - boolean advanced = lensCycle.advance(); - if (!advanced) { - // cycle didn't advance, we arrived at the end. This mainly means we want to stop the cycle - // The easiest way to do this is by setting the time until next swap larger than the recipe time - timeUntilNextSwap = mMaxProgresstime + 1; - } - } - } - - // Time until next swap is zero, this means we are waiting for the user to output a lens. - else if (timeUntilNextSwap == 0) { - // Set the indicator to output a signal - lensIndicator.updateRedstoneOutput(true); - - // If we now have a matching lens, we can accept it and move on to the next swap - if (currentLens != null && currentLens.isItemEqual(lensCycle.current())) { - numSwapsPerformed += 1; - timeUntilNextSwap = generateNextSwapTime(); - } - } - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getWaterTier() { - return 6; - } - - @Override - public long getBasePowerUsage() { - return TierEU.RECIPE_UV; - } - - @Override - public float calculateFinalSuccessChance() { - if (removedTooEarly) return 0.0f; - return numSwapsPerformed * SUCCESS_PER_LENS + currentRecipeChance; - } - - @Override - public String[] getInfoData() { - ArrayList infoData = new ArrayList<>(Arrays.asList(super.getInfoData())); - if (this.lensCycle != null) { - infoData.add("Lens swaps performed this run: " + EnumChatFormatting.YELLOW + numSwapsPerformed); - infoData.add( - "Current lens requested: " + EnumChatFormatting.GREEN - + lensCycle.current() - .getDisplayName()); - if (removedTooEarly) { - infoData.add("Removed lens too early. Failing this recipe."); - } - } - return infoData.toArray(new String[] {}); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("numSwapsPerformed", numSwapsPerformed); - aNBT.setInteger("timeUntilNextSwap", timeUntilNextSwap); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - numSwapsPerformed = aNBT.getInteger("numSwapsPerformed"); - timeUntilNextSwap = aNBT.getInteger("timeUntilNextSwap"); - } - - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; - // Do not form without lens bus - if (lensInputBus == null) return false; - return super.checkMachine(aBaseMetaTileEntity, aStack); - } - - public boolean addLensHousingToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_LensHousing) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - this.lensInputBus = (GT_MetaTileEntity_LensHousing) aMetaTileEntity; - return true; - } - return false; - } - - public boolean addLensIndicatorToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_LensIndicator) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - this.lensIndicator = (GT_MetaTileEntity_LensIndicator) aMetaTileEntity; - lensIndicator.updateRedstoneOutput(false); - return true; - } - return false; - } - - private enum SpecialHatchElement implements IHatchElement { - - LensHousing(GT_MetaTileEntity_PurificationUnitUVTreatment::addLensHousingToMachineList, - GT_MetaTileEntity_LensHousing.class) { - - @Override - public long count( - GT_MetaTileEntity_PurificationUnitUVTreatment gtMetaTileEntityPurificationUnitUVTreatment) { - if (gtMetaTileEntityPurificationUnitUVTreatment.lensInputBus == null) return 0; - else return 1; - } - }, - - LensIndicator(GT_MetaTileEntity_PurificationUnitUVTreatment::addLensIndicatorToMachineList, - GT_MetaTileEntity_LensHousing.class) { - - @Override - public long count( - GT_MetaTileEntity_PurificationUnitUVTreatment gtMetaTileEntityPurificationUnitUVTreatment) { - if (gtMetaTileEntityPurificationUnitUVTreatment.lensIndicator == null) return 0; - else return 1; - } - }; - - private final List> mteClasses; - private final IGT_HatchAdder adder; - - @SafeVarargs - SpecialHatchElement(IGT_HatchAdder adder, - Class... mteClasses) { - this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); - this.adder = adder; - } - - @Override - public List> mteClasses() { - return mteClasses; - } - - public IGT_HatchAdder adder() { - return adder; - } - } - - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.IC2_MACHINES_MAGNETIZER_LOOP.resourceLocation; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_pHSensor.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_pHSensor.java deleted file mode 100644 index e8e393cb3c..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/GT_MetaTileEntity_pHSensor.java +++ /dev/null @@ -1,192 +0,0 @@ -package gregtech.common.tileentities.machines.multi.purification; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; - -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.common.gui.modularui.widget.CoverCycleButtonWidget; - -public class GT_MetaTileEntity_pHSensor extends GT_MetaTileEntity_Hatch { - - // This implementation was largely copied from the neutron sensor hatch - - protected float threshold = 0; - protected boolean inverted = false; - private boolean isOn = false; - - private static final IIconContainer textureFont = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR; - private static final IIconContainer textureFont_Glow = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR_GLOW; - - public GT_MetaTileEntity_pHSensor(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 0, "Detects pH value."); - } - - public GT_MetaTileEntity_pHSensor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 0, aDescription, aTextures); - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean allowGeneralRedstoneOutput() { - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection Side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void initDefaultModes(NBTTagCompound aNBT) { - getBaseMetaTileEntity().setActive(true); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public String[] getDescription() { - return new String[] { "Can be installed in the pH Neutralization Purification Unit.", - "Outputs Redstone Signal according to the current pH value.", - "Right click to open the GUI and change settings." }; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - threshold = aNBT.getFloat("mThreshold"); - inverted = aNBT.getBoolean("mInverted"); - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setFloat("mThreshold", threshold); - aNBT.setBoolean("mInverted", inverted); - super.saveNBTData(aNBT); - } - - /** - * Updates redstone output strength based on the pH of the multiblock. - */ - public void updateRedstoneOutput(float pH) { - isOn = (pH > threshold) ^ inverted; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (isOn) { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, (byte) 15); - } - } else { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, (byte) 0); - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_pHSensor(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), TextureFactory.builder() - .addIcon(textureFont_Glow) - .glow() - .build() }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont) }; - } - - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - final String INVERTED = GT_Utility.trans("INVERTED", "Inverted"); - final String NORMAL = GT_Utility.trans("NORMAL", "Normal"); - - builder.widget( - new CoverCycleButtonWidget().setToggle(() -> inverted, (val) -> inverted = val) - .setTextureGetter( - (state) -> state == 1 ? GT_UITextures.OVERLAY_BUTTON_REDSTONE_ON - : GT_UITextures.OVERLAY_BUTTON_REDSTONE_OFF) - .addTooltip(0, NORMAL) - .addTooltip(1, INVERTED) - .setPos(10, 8)) - .widget( - new TextWidget().setStringSupplier(() -> inverted ? INVERTED : NORMAL) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setTextAlignment(Alignment.CenterLeft) - .setPos(28, 12)) - .widget( - new NumericWidget().setBounds(0, 14.0) - .setIntegerOnly(false) - .setGetter(() -> (double) threshold) - .setSetter((value) -> threshold = (float) Math.round(value * 100.0) / 100.0f) - .setScrollValues(0.1, 0.01, 1.0) - .setMaximumFractionDigits(2) - .setTextColor(Color.WHITE.dark(1)) - .setTextAlignment(Alignment.CenterLeft) - .setFocusOnGuiOpen(true) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) - .setPos(10, 28) - .setSize(77, 12)) - .widget( - new TextWidget(StatCollector.translateToLocal("GT5U.gui.text.ph_sensor")) - .setDefaultColor(COLOR_TEXT_GRAY.get()) - .setTextAlignment(Alignment.CenterLeft) - .setPos(90, 30)); - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/LinkedPurificationUnit.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/LinkedPurificationUnit.java index 104cbe300f..8be6d0ab65 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/LinkedPurificationUnit.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/LinkedPurificationUnit.java @@ -1,6 +1,6 @@ package gregtech.common.tileentities.machines.multi.purification; -import static gregtech.GT_Mod.gregtechproxy; +import static gregtech.GTMod.gregtechproxy; import net.minecraft.client.Minecraft; import net.minecraft.nbt.NBTTagCompound; @@ -10,7 +10,7 @@ import net.minecraft.world.World; import net.minecraftforge.common.DimensionManager; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.util.GT_Util; +import gregtech.api.util.GTUtil; /** * Small wrapper around a GT_MetaTileEntity_PurificationUnitBase, to be stored in the main purification plant @@ -25,9 +25,9 @@ public class LinkedPurificationUnit { */ private boolean mIsActive = false; - private final GT_MetaTileEntity_PurificationUnitBase mMetaTileEntity; + private final MTEPurificationUnitBase mMetaTileEntity; - public LinkedPurificationUnit(GT_MetaTileEntity_PurificationUnitBase unit) { + public LinkedPurificationUnit(MTEPurificationUnitBase unit) { this.mMetaTileEntity = unit; } @@ -52,18 +52,17 @@ public class LinkedPurificationUnit { int z = linkData.getInteger("z"); // Find a TileEntity at this location - TileEntity te = GT_Util.getTileEntity(world, x, y, z, true); + TileEntity te = GTUtil.getTileEntity(world, x, y, z, true); if (te == null) { // This is a bug, throw a fatal error. throw new NullPointerException("Unit disappeared during server sync. This is a bug."); } // Cast TileEntity to proper GT TileEntity - this.mMetaTileEntity = (GT_MetaTileEntity_PurificationUnitBase) ((IGregTechTileEntity) te) - .getMetaTileEntity(); + this.mMetaTileEntity = (MTEPurificationUnitBase) ((IGregTechTileEntity) te).getMetaTileEntity(); } - public GT_MetaTileEntity_PurificationUnitBase metaTileEntity() { + public MTEPurificationUnitBase metaTileEntity() { return mMetaTileEntity; } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchDegasifierControl.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchDegasifierControl.java new file mode 100644 index 0000000000..53c042439c --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchDegasifierControl.java @@ -0,0 +1,121 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.render.TextureFactory; + +public class MTEHatchDegasifierControl extends MTEHatch { + + private byte outputStrength = 0; + + private static final IIconContainer textureFont = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR; + private static final IIconContainer textureFont_Glow = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR_GLOW; + + public MTEHatchDegasifierControl(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 0, "Outputs a control signal for the Degasser Purification Unit"); + } + + public MTEHatchDegasifierControl(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean allowGeneralRedstoneOutput() { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection Side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public void initDefaultModes(NBTTagCompound aNBT) { + getBaseMetaTileEntity().setActive(true); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchDegasifierControl(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public String[] getDescription() { + return new String[] { "Can be installed in the Degasser Purification Unit.", + "Outputs Redstone Signal Strength based on the current control signal." }; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + outputStrength = aNBT.getByte("mOutputStrength"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setByte("mOutputStrength", outputStrength); + super.saveNBTData(aNBT); + } + + // Pass zero signal to disable output + public void updateOutputSignal(byte signal) { + outputStrength = signal; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (outputStrength > 0) { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, outputStrength); + } + } else { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, (byte) 0); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), TextureFactory.builder() + .addIcon(textureFont_Glow) + .glow() + .build() }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont) }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchLensHousing.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchLensHousing.java new file mode 100644 index 0000000000..81dbab61cb --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchLensHousing.java @@ -0,0 +1,52 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.client.GTTooltipHandler; + +public class MTEHatchLensHousing extends MTEHatchInputBus { + + public MTEHatchLensHousing(int id, String name, String nameRegional) { + super( + id, + name, + nameRegional, + GTTooltipHandler.Tier.UV.ordinal(), + 1, + new String[] { "Holds a lens for UV laser focusing." }); + } + + public MTEHatchLensHousing(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchLensHousing(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public int getSizeInventory() { + return 1; + } + + @Override + public int getCircuitSlot() { + return -1; + } + + @Override + public boolean allowSelectCircuit() { + return false; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + getBaseMetaTileEntity().add1by1Slot(builder); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchLensIndicator.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchLensIndicator.java new file mode 100644 index 0000000000..5ed495f935 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchLensIndicator.java @@ -0,0 +1,117 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.render.TextureFactory; + +public class MTEHatchLensIndicator extends MTEHatch { + + private boolean isOn = false; + + private static final IIconContainer textureFont = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR; + private static final IIconContainer textureFont_Glow = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR_GLOW; + + public MTEHatchLensIndicator(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 0, "Indicates required lens swaps."); + } + + public MTEHatchLensIndicator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean allowGeneralRedstoneOutput() { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection Side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void initDefaultModes(NBTTagCompound aNBT) { + getBaseMetaTileEntity().setActive(true); + } + + @Override + public String[] getDescription() { + return new String[] { "Can be installed in the UV Treatment Purification Unit.", + "Outputs Redstone Signal when a lens swap is requested." }; + } + + /** + * Updates redstone output strength based on the pH of the multiblock. + */ + public void updateRedstoneOutput(boolean enabled) { + isOn = enabled; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (isOn) { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 15); + } + } else { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setInternalOutputRedstoneSignal(side, (byte) 0); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchLensIndicator(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), TextureFactory.builder() + .addIcon(textureFont_Glow) + .glow() + .build() }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont) }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchPHSensor.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchPHSensor.java new file mode 100644 index 0000000000..790b14c2f5 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEHatchPHSensor.java @@ -0,0 +1,192 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.common.gui.modularui.widget.CoverCycleButtonWidget; + +public class MTEHatchPHSensor extends MTEHatch { + + // This implementation was largely copied from the neutron sensor hatch + + protected float threshold = 0; + protected boolean inverted = false; + private boolean isOn = false; + + private static final IIconContainer textureFont = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR; + private static final IIconContainer textureFont_Glow = Textures.BlockIcons.OVERLAY_HATCH_PH_SENSOR_GLOW; + + public MTEHatchPHSensor(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 0, "Detects pH value."); + } + + public MTEHatchPHSensor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean allowGeneralRedstoneOutput() { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection Side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void initDefaultModes(NBTTagCompound aNBT) { + getBaseMetaTileEntity().setActive(true); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public String[] getDescription() { + return new String[] { "Can be installed in the pH Neutralization Purification Unit.", + "Outputs Redstone Signal according to the current pH value.", + "Right click to open the GUI and change settings." }; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + threshold = aNBT.getFloat("mThreshold"); + inverted = aNBT.getBoolean("mInverted"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setFloat("mThreshold", threshold); + aNBT.setBoolean("mInverted", inverted); + super.saveNBTData(aNBT); + } + + /** + * Updates redstone output strength based on the pH of the multiblock. + */ + public void updateRedstoneOutput(float pH) { + isOn = (pH > threshold) ^ inverted; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (isOn) { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, (byte) 15); + } + } else { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, (byte) 0); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchPHSensor(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont), TextureFactory.builder() + .addIcon(textureFont_Glow) + .glow() + .build() }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(textureFont) }; + } + + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + final String INVERTED = GTUtility.trans("INVERTED", "Inverted"); + final String NORMAL = GTUtility.trans("NORMAL", "Normal"); + + builder.widget( + new CoverCycleButtonWidget().setToggle(() -> inverted, (val) -> inverted = val) + .setTextureGetter( + (state) -> state == 1 ? GTUITextures.OVERLAY_BUTTON_REDSTONE_ON + : GTUITextures.OVERLAY_BUTTON_REDSTONE_OFF) + .addTooltip(0, NORMAL) + .addTooltip(1, INVERTED) + .setPos(10, 8)) + .widget( + new TextWidget().setStringSupplier(() -> inverted ? INVERTED : NORMAL) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setTextAlignment(Alignment.CenterLeft) + .setPos(28, 12)) + .widget( + new NumericWidget().setBounds(0, 14.0) + .setIntegerOnly(false) + .setGetter(() -> (double) threshold) + .setSetter((value) -> threshold = (float) Math.round(value * 100.0) / 100.0f) + .setScrollValues(0.1, 0.01, 1.0) + .setMaximumFractionDigits(2) + .setTextColor(Color.WHITE.dark(1)) + .setTextAlignment(Alignment.CenterLeft) + .setFocusOnGuiOpen(true) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .setPos(10, 28) + .setSize(77, 12)) + .widget( + new TextWidget(StatCollector.translateToLocal("GT5U.gui.text.ph_sensor")) + .setDefaultColor(COLOR_TEXT_GRAY.get()) + .setTextAlignment(Alignment.CenterLeft) + .setPos(90, 30)); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationPlant.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationPlant.java new file mode 100644 index 0000000000..86f2c2b5bd --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationPlant.java @@ -0,0 +1,739 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static gregtech.api.enums.GTValues.AuthorNotAPenguin; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.ExoticEnergy; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_GLOW; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTStructureUtility.ofFrame; +import static gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitBase.WATER_BOOST_BONUS_CHANCE; +import static gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitBase.WATER_BOOST_NEEDED_FLUID; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.drawable.shapes.Rectangle; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.Scrollable; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.gui.modularui.widget.ShutDownReasonSyncer; +import gregtech.common.gui.modularui.widget.TextButtonWidget; + +public class MTEPurificationPlant extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final String STRUCTURE_PIECE_MAIN_SURVIVAL = "main_survival"; + + /** + * Maximum distance in each axis between the purification plant main controller and the controller blocks of the + * purification plant units. + */ + public static final int MAX_UNIT_DISTANCE = 32; + + /** + * Time in ticks for a full processing cycle to complete. + */ + public static final int CYCLE_TIME_TICKS = 120 * SECONDS; + + /** + * Stores all purification units linked to this controller. + * Normally all units in this list should be valid and unique, if not then there is a bug where they are not being + * unlinked properly on block destruction/relinking. + */ + private final List mLinkedUnits = new ArrayList<>(); + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, PurificationPlantStructureString.STRUCTURE_STRING) + // Create an identical structure for survival autobuild, with water replaced with air + .addShape( + STRUCTURE_PIECE_MAIN_SURVIVAL, + Arrays.stream(PurificationPlantStructureString.STRUCTURE_STRING) + .map( + sa -> Arrays.stream(sa) + .map(s -> s.replaceAll("F", " ")) + .toArray(String[]::new)) + .toArray(String[][]::new)) + // Superplasticizer-treated high strength concrete + .addElement('A', ofBlock(GregTechAPI.sBlockCasings9, 3)) + // Sterile Water Plant Casing + .addElement('B', ofBlock(GregTechAPI.sBlockCasings9, 4)) + // Reinforced Sterile Water Plant Casing + .addElement('C', ofBlock(GregTechAPI.sBlockCasings9, 5)) + // Tinted Industrial Glass + .addElement('D', ofBlockAnyMeta(GregTechAPI.sBlockTintedGlass, 0)) + .addElement('F', ofBlock(Blocks.water, 0)) + .addElement('G', ofFrame(Materials.Tungsten)) + // Hatch space + .addElement( + 'H', + ofChain( + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeastList(t.getAllowedHatches()) + .dot(1) + .casingIndex(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings9, 4)) + .build()), + ofBlock(GregTechAPI.sBlockCasings9, 4))) + .build(); + + public MTEPurificationPlant(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPurificationPlant(String aName) { + super(aName); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 6, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN_SURVIVAL, stackSize, 3, 6, 0, elementBudget, env, true); + if (built == -1) { + GTUtility.sendChatToPlayer( + env.getActor(), + EnumChatFormatting.GREEN + "Auto placing done ! Now go place the water yourself !"); + return 0; + } + return built; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Purification Plant") + .addInfo("Main controller block for the Water Purification Plant.") + .addInfo( + "Freely place " + EnumChatFormatting.YELLOW + + "Purification Units " + + EnumChatFormatting.GRAY + + "within " + + EnumChatFormatting.RED + + MAX_UNIT_DISTANCE + + EnumChatFormatting.GRAY + + " blocks along each axis.") + .addInfo("Left click this controller with a data stick, then right click a purification unit to link.") + .addInfo("Supplies power to linked purification units. This multiblock accepts TecTech energy hatches.") + .addSeparator() + .addInfo( + "Works in fixed time processing cycles of " + EnumChatFormatting.RED + + CYCLE_TIME_TICKS / SECONDS + + EnumChatFormatting.GRAY + + " seconds.") + .addInfo("All linked units follow this cycle.") + .addSeparator() + .addInfo("Every recipe has a base chance of success. Success rate can be boosted") + .addInfo("by using a portion of the target output as a secondary input.") + .addInfo( + EnumChatFormatting.RED + GTUtility.formatNumbers(WATER_BOOST_NEEDED_FLUID * 100) + + "%" + + EnumChatFormatting.GRAY + + " of output yield will be consumed in exchange for an") + .addInfo( + "additive " + EnumChatFormatting.RED + + GTUtility.formatNumbers(WATER_BOOST_BONUS_CHANCE * 100) + + "%" + + EnumChatFormatting.GRAY + + " increase to success.") + .addInfo( + "On recipe failure, each purification unit has a " + EnumChatFormatting.RED + + "50%" + + EnumChatFormatting.GRAY + + " chance") + .addInfo("to return water of the same quality as the input or lower.") + .addSeparator() + .addInfo("Every purification unit has a configuration window to configure maximum parallel amount.") + .addInfo( + "This will only scale purified water I/O and power usage. Other catalysts and outputs are unchanged.") + .addSeparator() + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "Contaminants and ionized particles in water can cause significant imperfections in delicate") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "processes related to the cutting and engraving of silicon wafers and chips. It is crucial that") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "the water is systematically purified through a series of increasingly precise and complex") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "purification processes, and this multiblock is the heart of the operation.") + .addInfo(AuthorNotAPenguin) + .beginStructureBlock(7, 9, 8, false) + .addCasingInfoExactlyColored( + "Superplasticizer-Treated High Strength Concrete", + EnumChatFormatting.GRAY, + 56, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Sterile Water Plant Casing", + EnumChatFormatting.GRAY, + 77, + EnumChatFormatting.GOLD, + false) + .addCasingInfoRangeColored( + "Reinforced Sterile Water Plant Casing", + EnumChatFormatting.GRAY, + 71, + 72, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Tungsten Frame Box", + EnumChatFormatting.GRAY, + 30, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Tinted Industrial Glass", + EnumChatFormatting.GRAY, + 6, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored("Reinforced Door", EnumChatFormatting.GRAY, 1, EnumChatFormatting.GOLD, false) + .addController("Front center") + .addEnergyHatch(EnumChatFormatting.GOLD + "1", 1) + .addMaintenanceHatch(EnumChatFormatting.GOLD + "1", 1) + .addStructureInfo("Requires water to be placed in the tank.") + .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPurificationPlant(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean active, boolean redstoneLevel) { + if (side == facing) { + if (active) return new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings9, 4)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings9, 4)), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { + Textures.BlockIcons.getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings9, 4)) }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + private List> getAllowedHatches() { + return ImmutableList.of(Maintenance, Energy, ExoticEnergy); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + // Check self + if (!checkPiece(STRUCTURE_PIECE_MAIN, 3, 6, 0)) { + return false; + } + + // Check hatches + if (!checkHatches()) { + return false; + } + + // using nano forge method of detecting hatches. + if (!checkExoticAndNormalEnergyHatches()) { + return false; + } + + return true; + } + + private boolean checkHatches() { + // Exactly one maintenance hatch is required + return mMaintenanceHatches.size() == 1; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (aBaseMetaTileEntity.isServerSide()) { + // Trigger structure check of linked units, but never all in the same tick, and at most once per cycle. + for (int i = 0; i < mLinkedUnits.size(); ++i) { + if (aTick % CYCLE_TIME_TICKS == i) { + LinkedPurificationUnit unit = mLinkedUnits.get(i); + boolean structure = unit.metaTileEntity() + .checkStructure(true); + // If unit was active but deformed, set as inactive + if (unit.isActive() && !structure) { + unit.setActive(false); + // Also remember to recalculate power usage, since otherwise the deformed unit will + // keep drawing power + this.lEUt = -calculateEffectivePowerUsage(); + } + } + } + } + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + updateCycleProgress(); + // Calculate efficiency based on maintenance issues + if (mMaxProgresstime > 0) { + mEfficiency = Math.max( + 0, + Math.min( + mEfficiency + mEfficiencyIncrease, + getMaxEfficiency(mInventory[1]) - ((getIdealStatus() - getRepairStatus()) * 1000))); + } + } + + private void updateCycleProgress() { + // Since the plant does not run recipes directly, we just continuously loop the base cycle + if (mMachine) { + // cycle is running, so simply advance it + if (mMaxProgresstime > 0) { + // onRunningTick is responsible for draining power + if (onRunningTick(mInventory[1])) { + markDirty(); + mProgresstime += 1; + // Update progress time for active units + for (LinkedPurificationUnit unit : this.mLinkedUnits) { + if (unit.isActive()) { + MTEPurificationUnitBase metaTileEntity = unit.metaTileEntity(); + metaTileEntity.mProgresstime = mProgresstime; + } + } + // Cycle finished + if (mProgresstime >= mMaxProgresstime) { + this.endCycle(); + } + } else { + // Power drain failed, shut down all other units due to power loss. + // Note that we do not need to shut down self, as this is done in + // onRunningTick already + for (LinkedPurificationUnit unit : mLinkedUnits) { + if (unit.isActive()) { + unit.metaTileEntity() + .stopMachine(ShutDownReasonRegistry.POWER_LOSS); + } + } + } + } + + // No cycle running, start a new cycle if the machine is turned on + if (mMaxProgresstime == 0 && isAllowedToWork()) { + this.startCycle(); + } + } + } + + private void startCycle() { + mProgresstime = 0; + mMaxProgresstime = CYCLE_TIME_TICKS; + mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + + // Find active units and notify them that the cycle started + for (LinkedPurificationUnit unit : this.mLinkedUnits) { + MTEPurificationUnitBase metaTileEntity = unit.metaTileEntity(); + PurificationUnitStatus status = metaTileEntity.status(); + // Unit needs to be online to be considered active. + if (status == PurificationUnitStatus.ONLINE) { + // Perform recipe check for unit and start it if successful + if (metaTileEntity.doPurificationRecipeCheck()) { + unit.setActive(true); + metaTileEntity.startCycle(mMaxProgresstime, mProgresstime); + } + } + } + + // After activating all units, calculate power usage + lEUt = -calculateEffectivePowerUsage(); + } + + private void endCycle() { + mMaxProgresstime = 0; + + // Mark all units as inactive and reset their progress time + for (LinkedPurificationUnit unit : this.mLinkedUnits) { + MTEPurificationUnitBase metaTileEntity = unit.metaTileEntity(); + // If this unit was active, end the cycle + if (unit.isActive()) { + metaTileEntity.endCycle(); + } + unit.setActive(false); + } + } + + /** + * Calculate power usage of all units + */ + private long calculateEffectivePowerUsage() { + long euT = 0; + for (LinkedPurificationUnit unit : mLinkedUnits) { + if (unit.isActive()) { + euT += unit.metaTileEntity() + .getActualPowerUsage(); + } + } + return euT; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + public void registerLinkedUnit(MTEPurificationUnitBase unit) { + this.mLinkedUnits.add(new LinkedPurificationUnit(unit)); + } + + public void unregisterLinkedUnit(MTEPurificationUnitBase unit) { + this.mLinkedUnits.removeIf(link -> link.metaTileEntity() == unit); + } + + @Override + public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (!(aPlayer instanceof EntityPlayerMP)) return; + + // Save link data to data stick, very similar to Crafting Input Buffer. + + ItemStack dataStick = aPlayer.inventory.getCurrentItem(); + if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) return; + + NBTTagCompound tag = new NBTTagCompound(); + tag.setString("type", "PurificationPlant"); + tag.setInteger("x", aBaseMetaTileEntity.getXCoord()); + tag.setInteger("y", aBaseMetaTileEntity.getYCoord()); + tag.setInteger("z", aBaseMetaTileEntity.getZCoord()); + + dataStick.stackTagCompound = tag; + dataStick.setStackDisplayName( + "Purification Plant Link Data Stick (" + aBaseMetaTileEntity + .getXCoord() + ", " + aBaseMetaTileEntity.getYCoord() + ", " + aBaseMetaTileEntity.getZCoord() + ")"); + aPlayer.addChatMessage(new ChatComponentText("Saved Link Data to Data Stick")); + } + + @Override + public String[] getInfoData() { + var ret = new ArrayList(); + // Show linked purification units and their status + ret.add("Linked Purification Units: "); + for (LinkedPurificationUnit unit : this.mLinkedUnits) { + String text = EnumChatFormatting.AQUA + unit.metaTileEntity() + .getLocalName() + ": "; + PurificationUnitStatus status = unit.metaTileEntity() + .status(); + switch (status) { + case ONLINE -> { + text = text + EnumChatFormatting.GREEN + "Online"; + } + case DISABLED -> { + text = text + EnumChatFormatting.YELLOW + "Disabled"; + } + case INCOMPLETE_STRUCTURE -> { + text = text + EnumChatFormatting.RED + "Incomplete Structure"; + } + } + ret.add(text); + } + return ret.toArray(new String[0]); + } + + @Override + public void onBlockDestroyed() { + // When the controller is destroyed we want to notify all currently linked units + for (LinkedPurificationUnit unit : this.mLinkedUnits) { + unit.metaTileEntity() + .unlinkController(); + } + super.onBlockDestroyed(); + } + + private void drawTopText(DynamicPositionedColumn screenElements) { + screenElements.setSynced(false) + .setSpace(0) + .setPos(10, 8); + + screenElements + .widget( + new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setDefaultColor(EnumChatFormatting.RED) + .setEnabled(widget -> !mMachine)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val)); + + screenElements.widget( + new TextWidget("Hit with Soft Mallet to start.").setDefaultColor(EnumChatFormatting.BLACK) + .setEnabled( + widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && !getBaseMetaTileEntity().isActive())) + .widget( + new FakeSyncWidget.IntegerSyncer( + () -> getBaseMetaTileEntity().getErrorDisplayID(), + val -> getBaseMetaTileEntity().setErrorDisplayID(val))) + .widget( + new FakeSyncWidget.BooleanSyncer( + () -> getBaseMetaTileEntity().isActive(), + val -> getBaseMetaTileEntity().setActive(val))); + screenElements.widget( + new TextWidget(GTUtility.trans("142", "Running perfectly.")).setDefaultColor(EnumChatFormatting.GREEN) + .setEnabled( + widget -> getBaseMetaTileEntity().getErrorDisplayID() == 0 && getBaseMetaTileEntity().isActive())); + screenElements.widget( + TextWidget.dynamicString( + () -> getBaseMetaTileEntity().getLastShutDownReason() + .getDisplayString()) + .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled( + widget -> shouldDisplayShutDownReason() && !getBaseMetaTileEntity().isActive() + && GTUtility.isStringValid( + getBaseMetaTileEntity().getLastShutDownReason() + .getDisplayString()) + && getBaseMetaTileEntity().wasShutdown())) + .widget( + new ShutDownReasonSyncer( + () -> getBaseMetaTileEntity().getLastShutDownReason(), + reason -> getBaseMetaTileEntity().setShutDownReason(reason))) + .widget( + new FakeSyncWidget.BooleanSyncer( + () -> getBaseMetaTileEntity().wasShutdown(), + wasShutDown -> getBaseMetaTileEntity().setShutdownStatus(wasShutDown))); + screenElements.widget( + TextWidget.dynamicString(this::generateCurrentRecipeInfoString) + .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled(widget -> (mMaxProgresstime > 0))) + .widget(new FakeSyncWidget.IntegerSyncer(() -> mProgresstime, val -> mProgresstime = val)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> mMaxProgresstime, val -> mMaxProgresstime = val)); + } + + private final int STATUS_WINDOW_ID = 10; + + private ModularWindow createStatusWindow(final EntityPlayer player) { + final int windowWidth = 260; + final int windowHeight = 200; + ModularWindow.Builder builder = ModularWindow.builder(windowWidth, windowHeight); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.widget( + ButtonWidget.closeWindowButton(true) + .setPos(windowWidth - 15, 3)); + + // Title widget + builder.widget( + new TextWidget(EnumChatFormatting.BOLD + "Purification Unit Status").setTextAlignment(Alignment.Center) + .setPos(5, 10) + .setSize(windowWidth, 8)); + + int currentYPosition = 20; + Scrollable mainDisp = new Scrollable().setVerticalScroll(); + + int rowHeight = 20; + for (int i = 0; i < this.mLinkedUnits.size(); i++) { + mainDisp.widget(makeUnitStatusWidget(mLinkedUnits.get(i)).setPos(0, rowHeight * (i + 1))); + } + + builder.widget( + mainDisp.setPos(5, currentYPosition) + .setSize(windowWidth - 10, windowHeight - currentYPosition - 5)); + return builder.build(); + } + + private Widget makeStatusWindowButton() { + TextButtonWidget widget = (TextButtonWidget) new TextButtonWidget("Status").setLeftMargin(4) + .setSize(40, 16) + .setPos(10, 40); + widget.button() + .setOnClick( + (clickData, w) -> { + if (!w.isClient()) w.getContext() + .openSyncedWindow(STATUS_WINDOW_ID); + }) + .setBackground(GTUITextures.BUTTON_STANDARD); + widget.text() + .setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(EnumChatFormatting.BLACK); + return widget; + } + + private Widget makeUnitStatusWidget(LinkedPurificationUnit unit) { + // Draw small machine controller icon + DynamicPositionedRow row = new DynamicPositionedRow(); + ItemStackHandler machineIcon = new ItemStackHandler(1); + machineIcon.setStackInSlot( + 0, + unit.metaTileEntity() + .getStackForm(1)); + + row.widget( + SlotWidget.phantom(machineIcon, 0) + .disableInteraction() + .setPos(0, 0)) + .setSize(20, 20); + + // Display machine name and status + String name = unit.metaTileEntity() + .getLocalName(); + + row.widget( + TextWidget.dynamicString(() -> name + " " + unit.getStatusString()) + .setSynced(false) + .setTextAlignment(Alignment.CenterLeft) + .setPos(25, 0) + .setSize(0, 20)) + .widget(new FakeSyncWidget.StringSyncer(() -> name, _name -> {})) + .widget( + unit.metaTileEntity() + .makeSyncerWidgets()) + .widget(new FakeSyncWidget.BooleanSyncer(unit::isActive, unit::setActive));; + + return row; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + + buildContext.addSyncedWindow(STATUS_WINDOW_ID, this::createStatusWindow); + + // Draw basic recipe info + final DynamicPositionedColumn controlTextArea = new DynamicPositionedColumn(); + drawTopText(controlTextArea); + builder.widget(controlTextArea); + + // Draw line separator + builder.widget( + new Rectangle().setColor(Color.rgb(114, 120, 139)) + .asWidget() + .setSizeProvider((screenSize, window, parent) -> new Size(window.getSize().width - 8, 2)) + .setPos(3, 32)); + + // Add status window button + builder.widget(makeStatusWindowButton()); + + // Add parallel count number input + + builder.widget(createPowerSwitchButton(builder)); + + // Add value syncers, note that we do this here so + // everything is updated once the status gui opens + addSyncers(builder); + } + + private void addSyncers(ModularWindow.Builder builder) { + // Sync connection list to client + builder.widget(new FakeSyncWidget.ListSyncer<>(() -> mLinkedUnits, links -> { + mLinkedUnits.clear(); + mLinkedUnits.addAll(links); + }, (buffer, link) -> { + // Try to save link data to NBT, so we can reconstruct it on client + try { + buffer.writeNBTTagCompoundToBuffer(link.writeLinkDataToNBT()); + } catch (IOException e) { + GTLog.err.println(e.getCause()); + } + }, buffer -> { + // Try to load link data from NBT compound as constructed above. + try { + return new LinkedPurificationUnit(buffer.readNBTTagCompoundFromBuffer()); + } catch (IOException e) { + GTLog.err.println(e.getCause()); + } + return null; + })); + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBaryonicPerfection.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBaryonicPerfection.java new file mode 100644 index 0000000000..250d968945 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBaryonicPerfection.java @@ -0,0 +1,565 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static gregtech.api.enums.GTValues.AuthorNotAPenguin; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_PROCESSING_ARRAY_GLOW; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.concurrent.ThreadLocalRandom; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.common.items.IDMetaItem03; +import gregtech.common.items.MetaGeneratedItem03; + +public class MTEPurificationUnitBaryonicPerfection + extends MTEPurificationUnitBase implements ISurvivalConstructable { + + public static long BARYONIC_MATTER_OUTPUT = 2000L; + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final int STRUCTURE_X_OFFSET = 8; + private static final int STRUCTURE_Y_OFFSET = 8; + private static final int STRUCTURE_Z_OFFSET = 0; + + static final String[][] structure = new String[][] { + // spotless:off + { " ", " ", " ", " ", " ", " ", " AAAAA ", " AAAAA ", " AA~AA ", " AAAAA ", " AAAAA ", " ", " ", " ", " ", " ", " " }, + { " ", " E ", " E ", " E ", " E ", " E ", " AAAAA ", " AAAAA ", " EEEEEAAAAAEEEEE ", " AAAAA ", " AAAAA ", " E ", " E ", " E ", " E ", " E ", " " }, + { " ", " E ", " ", " ", " ", " ", " CCCCC ", " CDDDC ", " E CDBDC E ", " CDDDC ", " CCCCC ", " ", " ", " ", " ", " E ", " " }, + { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " ", " E ", " " }, + { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " "," E ", " " }, + { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " ", " E ", " " }, + { " AAAAA ", " AAAAA ", " CCCCC ", " ", " ", " ", "AAC AAAAA CAA", "AAC ADDDA CAA", "AAC ADBDA CAA", "AAC ADDDA CAA", "AAC AAAAA CAA", " ", " ", " ", " CCCCC ", " AAAAA ", " AAAAA " }, + { " AAAAA ", " AAAAA ", " CDDDC ", " DDD ", " DDD ", " DDD ", "AAC ADDDA CAA", "AADDDDD DDDDDAA", "AADDDDD B DDDDDAA", "AADDDDD DDDDDAA", "AAC ADDDA CAA", " DDD ", " DDD ", " DDD ", " CDDDC ", " AAAAA ", " AAAAA " }, + { " AAAAA ", " EEEEEAAAAAEEEEE ", " E CDBDC E ", " E DBD E ", " E DBD E ", " E DBD E ", "AAC ADBDA CAA", "AADDDDD B DDDDDAA", "AABBBBBBBBBBBBBAA", "AADDDDD B DDDDDAA", "AAC ADBDA CAA", " E DBD E ", " E DBD E ", " E DBD E ", " E CDBDC E ", " EEEEEAAAAAEEEEE ", " AAAAA " }, + { " AAAAA ", " AAAAA ", " CDDDC ", " DDD ", " DDD ", " DDD ", "AAC ADDDA CAA", "AADDDDD DDDDDAA", "AADDDDD B DDDDDAA", "AADDDDD DDDDDAA", "AAC ADDDA CAA", " DDD ", " DDD ", " DDD ", " CDDDC ", " AAAAA ", " AAAAA " }, + { " AAAAA ", " AAAAA ", " CCCCC ", " ", " ", " ", "AAC AAAAA CAA", "AAC ADDDA CAA", "AAC ADBDA CAA", "AAC ADDDA CAA", "AAC AAAAA CAA", " ", " ", " ", " CCCCC ", " AAAAA ", " AAAAA " }, + { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " ", " E ", " " }, + { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " ", " E ", " " }, + { " ", " E ", " ", " ", " ", " ", " ", " DDD ", " E DBD E ", " DDD ", " ", " ", " ", " ", " ", " E ", " " }, + { " ", " E ", " ", " ", " ", " ", " CCCCC ", " CDDDC ", " E CDBDC E ", " CDDDC ", " CCCCC ", " ", " ", " ", " ", " E ", " " }, + { " ", " E ", " E ", " E ", " E ", " E ", " AAAAA ", " AAAAA ", " EEEEEAAAAAEEEEE ", " AAAAA ", " AAAAA ", " E ", " E ", " E ", " E ", " E ", " " }, + { " ", " ", " ", " ", " ", " ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " ", " ", " ", " ", " ", " " } }; + // spotless:on + + // Dimensionally transcendent casing (placeholder) + private static final int CASING_INDEX_MAIN = getTextureIndex(GregTechAPI.sBlockCasings10, 2); + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, structure) + // Quark Exclusion Casing + .addElement( + 'A', + ofChain( + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeastList(Arrays.asList(InputBus, OutputBus, InputHatch, OutputHatch)) + .dot(1) + .casingIndex(CASING_INDEX_MAIN) + .build()), + onElementPass(t -> t.numCasings++, ofBlock(GregTechAPI.sBlockCasings10, 2)))) + // Particle Beam Guidance Pipe Casing + .addElement('B', ofBlock(GregTechAPI.sBlockCasings9, 14)) + // Femtometer-Calibrated Particle Beam Casing + .addElement('C', ofBlock(GregTechAPI.sBlockCasings9, 15)) + // Non-Photonic Matter Exclusion Glass + .addElement('D', ofBlock(GregTechAPI.sBlockGlass1, 3)) + .addElement('E', ofFrame(Materials.Bedrockium)) + .build(); + + private static class CatalystCombination { + + public ItemStack firstCatalyst; + public ItemStack secondCatalyst; + + public static ItemList[] CATALYST_ITEMS = new ItemList[] { ItemList.Quark_Creation_Catalyst_Up, + ItemList.Quark_Creation_Catalyst_Down, ItemList.Quark_Creation_Catalyst_Bottom, + ItemList.Quark_Creation_Catalyst_Top, ItemList.Quark_Creation_Catalyst_Strange, + ItemList.Quark_Creation_Catalyst_Charm }; + + public CatalystCombination(ItemStack first, ItemStack second) { + firstCatalyst = first; + secondCatalyst = second; + } + + public boolean matches(ItemStack a, ItemStack b) { + return (a.isItemEqual(firstCatalyst) && b.isItemEqual(secondCatalyst)) + || (b.isItemEqual(firstCatalyst) && a.isItemEqual(secondCatalyst)); + } + + public NBTTagCompound saveToNBT() { + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagCompound first = new NBTTagCompound(); + NBTTagCompound second = new NBTTagCompound(); + firstCatalyst.writeToNBT(first); + secondCatalyst.writeToNBT(second); + nbt.setTag("first", first); + nbt.setTag("second", second); + return nbt; + } + + public static CatalystCombination readFromNBT(NBTTagCompound nbt) { + NBTTagCompound first = nbt.getCompoundTag("first"); + NBTTagCompound second = nbt.getCompoundTag("second"); + return new CatalystCombination( + ItemStack.loadItemStackFromNBT(first), + ItemStack.loadItemStackFromNBT(second)); + } + } + + private static CatalystCombination generateNewCombination() { + ThreadLocalRandom random = ThreadLocalRandom.current(); + // Generate two unique indices into the list + int firstIndex = random.nextInt(0, CatalystCombination.CATALYST_ITEMS.length); + int secondIndex = random.nextInt(0, CatalystCombination.CATALYST_ITEMS.length); + while (secondIndex == firstIndex) { + secondIndex = random.nextInt(0, CatalystCombination.CATALYST_ITEMS.length); + } + + return new CatalystCombination( + CatalystCombination.CATALYST_ITEMS[firstIndex].get(1), + CatalystCombination.CATALYST_ITEMS[secondIndex].get(1)); + } + + private CatalystCombination currentCombination = null; + + private ArrayList insertedCatalysts = new ArrayList<>(); + + private static final long CATALYST_BASE_COST = 144L; + + private int correctStartIndex = -1; + private int numCasings = 0; + private static final int MIN_CASINGS = 300; + + public MTEPurificationUnitBaryonicPerfection(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPurificationUnitBaryonicPerfection(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPurificationUnitBaryonicPerfection(mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean active, boolean redstoneLevel) { + if (side == facing) { + if (active) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_PROCESSING_ARRAY_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN) }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + hintsOnly, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET, + elementBudget, + env, + true); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + numCasings = 0; + if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; + if (numCasings < MIN_CASINGS) return false; + return super.checkMachine(aBaseMetaTileEntity, aStack); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Purification Unit") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.BOLD + + "Water Tier: " + + EnumChatFormatting.WHITE + + GTUtility.formatNumbers(getWaterTier()) + + EnumChatFormatting.RESET) + .addInfo("Controller block for the Absolute Baryonic Perfection Purification Unit.") + .addInfo("Must be linked to a Purification Plant using a data stick to work.") + .addSeparator() + .addInfo( + "Insert " + EnumChatFormatting.WHITE + + "Quark Releasing Catalysts " + + EnumChatFormatting.GRAY + + "into the input bus while running.") + .addInfo( + "Every recipe cycle, a different combination of " + EnumChatFormatting.RED + + "2" + + EnumChatFormatting.GRAY + + " different " + + EnumChatFormatting.WHITE + + "Quark Releasing Catalysts") + .addInfo("will correctly identify the lone quark and succeed the recipe.") + .addSeparator() + .addInfo( + "Every " + EnumChatFormatting.RED + + "20" + + EnumChatFormatting.GRAY + + " ticks, consumes ALL catalysts in the input bus.") + .addInfo( + "The base cost of inserting a catalyst is " + EnumChatFormatting.RED + + CATALYST_BASE_COST + + "L" + + EnumChatFormatting.WHITE + + " Molten Infinity") + .addInfo("For every duplicate occurrence of an inserted catalyst in the sequence, this cost is doubled.") + .addSeparator() + .addInfo("Keeps track of the entire sequence of catalysts inserted this recipe.") + .addInfo( + "If the correct catalyst combination is in the sequence of inserted catalysts, immediately outputs " + + EnumChatFormatting.WHITE + + "Stabilised Baryonic Matter") + .addInfo("At the end of the recipe, all incorrectly inserted catalysts are returned in the output bus.") + .addSeparator() + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "The final stage of water purification goes beyond subatomic particles and identifies the smallest") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "possible imperfections within the baryons themselves. By correctly identifying which pairs of quark") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "flavors are required, the unit will activate the catalysts, stabilizing the errant particles.") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "This ultimately creates both Stabilised Baryonic Matter and, most importantly, absolutely perfectly purified water.") + .addInfo(AuthorNotAPenguin) + .beginStructureBlock(17, 17, 17, false) + .addCasingInfoMinColored( + "Quark Exclusion Casing", + EnumChatFormatting.GRAY, + MIN_CASINGS, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Femtometer-Calibrated Particle Beam Casing", + EnumChatFormatting.GRAY, + 96, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Particle Beam Guidance Pipe Casing", + EnumChatFormatting.GRAY, + 37, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Non-Photonic Matter Exclusion Glass", + EnumChatFormatting.GRAY, + 240, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Bedrockium Frame Box", + EnumChatFormatting.GRAY, + 108, + EnumChatFormatting.GOLD, + false) + .addController("Front Center") + .addInputBus("Any Quark Exclusion Casing", 1) + .addInputHatch("Any Quark Exclusion Casing", 1) + .addOutputBus("Any Quark Exclusion Casing", 1) + .addOutputHatch("Any Quark Exclusion Casing", 1) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.purificationParticleExtractionRecipes; + } + + @Override + public void startCycle(int cycleTime, int progressTime) { + super.startCycle(cycleTime, progressTime); + this.insertedCatalysts.clear(); + this.currentCombination = generateNewCombination(); + correctStartIndex = -1; + } + + private boolean isCatalyst(ItemStack stack) { + if (stack.getItem() instanceof MetaGeneratedItem03) { + int meta = stack.getItemDamage() - 32000; // why, greg. + return meta >= IDMetaItem03.Quark_Creation_Catalyst_Up.ID + && meta <= IDMetaItem03.Quark_Creation_Catalyst_Top.ID; + } + return false; + } + + @Override + public void endCycle() { + super.endCycle(); + // Output incorrect indices unchanged, the spent ones will follow if recipe was successful from the actual + // recipe outputs + for (int i = 0; i < insertedCatalysts.size(); ++i) { + if (i == correctStartIndex || i == correctStartIndex + 1) continue; + + addOutput(insertedCatalysts.get(i)); + } + } + + @Override + public float calculateFinalSuccessChance() { + // Only succeed if correct combination was inserted + if (correctStartIndex != -1) return 100.0f; + else return 0.0f; + } + + private int calculateCatalystCost(ItemStack newCatalyst) { + // Count number of previously inserted catalysts + int count = 0; + for (ItemStack cat : this.insertedCatalysts) { + // We already assume that newCatalyst is a valid catalyst item + if (cat.getItemDamage() == newCatalyst.getItemDamage()) { + ++count; + } + } + // Cost is exponential in function of amount of duplicate catalysts + return (int) (Math.pow(2, count) * CATALYST_BASE_COST); + } + + // Returns the first index of a valid combination, or -1 if there is no valid combination in the sequence + public int checkSequence() { + // Loop over the entire sequence and check if any pair contains a valid combination + for (int i = 0; i < insertedCatalysts.size() - 1; ++i) { + ItemStack first = insertedCatalysts.get(i); + ItemStack second = insertedCatalysts.get(i + 1); + // Found a match, return its starting index + if (currentCombination.matches(first, second)) { + return i; + } + } + // No match found, return -1 + return -1; + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.runMachine(aBaseMetaTileEntity, aTick); + // Every 20 ticks, add all catalysts from the input bus to the internal inventory. + if (mMaxProgresstime > 0 && aTick % 20 == 0) { + ArrayList storedInputs = getStoredInputs(); + // For each stack in the input, check if it is a valid catalyst item and if so consume it + for (ItemStack stack : storedInputs) { + if (isCatalyst(stack)) { + // Try to deplete catalyst cost first + int cost = calculateCatalystCost(stack); + FluidStack inputCost = Materials.Infinity.getMolten(cost); + // Drain the input cost directly from a hatch since we are not inside + // recipe processing + boolean drained = false; + for (MTEHatchInput hatch : this.mInputHatches) { + FluidStack drainedStack = hatch.drain(ForgeDirection.UNKNOWN, inputCost, true); + if (drainedStack != null && drainedStack.amount == inputCost.amount) { + drained = true; + break; + } + } + // If we could not drain, stop the machine + if (!drained) { + stopMachine(ShutDownReasonRegistry.outOfFluid(inputCost)); + return; + } + // Now add the catalysts to the list, one by one since there may be multiples and we want to + // keep them as single entries in the list + for (int i = 0; i < stack.stackSize; ++i) { + ItemStack singleStack = new ItemStack(stack.getItem(), 1, stack.getItemDamage()); + this.insertedCatalysts.add(singleStack); + } + // Then deplete the entire stack + this.depleteInput(stack); + } + } + + // Only do this check if we didn't find a correct combination yet + if (correctStartIndex != -1) return; + + // Now check the sequence for a correct combination + correctStartIndex = checkSequence(); + // If we found something, immediately output stable baryonic matter + if (correctStartIndex != -1) addOutput(Materials.StableBaryonicMatter.getFluid(BARYONIC_MATTER_OUTPUT)); + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + NBTTagCompound insertedNBT = new NBTTagCompound(); + for (int i = 0; i < insertedCatalysts.size(); ++i) { + ItemStack inserted = insertedCatalysts.get(i); + NBTTagCompound itemNBT = new NBTTagCompound(); + inserted.writeToNBT(itemNBT); + insertedNBT.setTag(Integer.toString(i), itemNBT); + } + aNBT.setTag("insertedItems", insertedNBT); + aNBT.setInteger("correctStartIndex", correctStartIndex); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + // Generate a random combination on load + currentCombination = generateNewCombination(); + if (aNBT.hasKey("insertedItems")) { + NBTTagCompound insertedList = aNBT.getCompoundTag("insertedItems"); + // Initialize empty list with correct size + this.insertedCatalysts = new ArrayList<>( + Collections.nCopies( + insertedList.func_150296_c() + .size(), + null)); + for (String key : insertedList.func_150296_c()) { + NBTTagCompound itemCompound = insertedList.getCompoundTag(key); + int index = Integer.parseInt(key); + this.insertedCatalysts.set(index, ItemStack.loadItemStackFromNBT(itemCompound)); + } + } + if (aNBT.hasKey("correctStartIndex")) { + correctStartIndex = aNBT.getInteger("correctStartIndex"); + } + super.loadNBTData(aNBT); + } + + private String getCorrectlyDecodedString() { + if (correctStartIndex != -1) { + return EnumChatFormatting.GREEN + "Yes"; + } + return EnumChatFormatting.RED + "No"; + } + + public EnumChatFormatting getQuarkColor(ItemStack stack) { + int meta = stack.getItemDamage() - 32000; + if (meta == IDMetaItem03.Quark_Creation_Catalyst_Up.ID) return EnumChatFormatting.BLUE; + if (meta == IDMetaItem03.Quark_Creation_Catalyst_Down.ID) return EnumChatFormatting.LIGHT_PURPLE; + if (meta == IDMetaItem03.Quark_Creation_Catalyst_Strange.ID) return EnumChatFormatting.YELLOW; + if (meta == IDMetaItem03.Quark_Creation_Catalyst_Charm.ID) return EnumChatFormatting.GREEN; + if (meta == IDMetaItem03.Quark_Creation_Catalyst_Bottom.ID) return EnumChatFormatting.AQUA; + if (meta == IDMetaItem03.Quark_Creation_Catalyst_Top.ID) return EnumChatFormatting.RED; + return EnumChatFormatting.GRAY; + } + + public String[] getInfoData() { + ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); + info.add("Catalyst insertion history for this recipe cycle"); + for (int i = 0; i < insertedCatalysts.size(); ++i) { + ItemStack stack = insertedCatalysts.get(i); + String name = stack.getDisplayName(); + String[] split = name.split("-"); + info.add( + EnumChatFormatting.YELLOW + "" + + (i + 1) + + ": " + + getQuarkColor(stack) + + split[0] + + EnumChatFormatting.GRAY + + "-" + + split[1]); + } + info.add("Quark Combination correctly identified: " + getCorrectlyDecodedString()); + return info.toArray(new String[] {}); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getWaterTier() { + return 8; + } + + @Override + public long getBasePowerUsage() { + return TierEU.RECIPE_UEV; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBase.java new file mode 100644 index 0000000000..e986f16940 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitBase.java @@ -0,0 +1,805 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.EnumSet; +import java.util.List; +import java.util.Set; +import java.util.concurrent.ThreadLocalRandom; +import java.util.stream.Stream; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.VoidingMode; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.metadata.PurificationPlantBaseChanceKey; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.BlockCasingsAbstract; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +/** + * Base class for purification units. This class handles all shared behaviour between units. + * When inheriting from this, make sure to call super.loadNBTData() and super.saveNBTData() + * if you override these methods, or linking will break. + */ +public abstract class MTEPurificationUnitBase> + extends MTEExtendedPowerMultiBlockBase { + + /** + * Ratio of output fluid that needs to be inserted back as input to trigger a "water boost". + * Must be in [0, 1]. + */ + public static final float WATER_BOOST_NEEDED_FLUID = 0.1f; + /** + * Additive bonus to success chance when water boost is active. + * Must be in [0, 1] + */ + public static final float WATER_BOOST_BONUS_CHANCE = 0.15f; + + /** + * Small internal enum to report back the various error cases when linking purification units to the + * purification plant. + */ + private enum LinkResult { + /** + * Link target was out of range of the main controller + */ + TOO_FAR, + /** + * No valid GT_MetaTileEntity_PurificationPlant was found at the link target position. + */ + NO_VALID_PLANT, + /** + * Link successful + */ + SUCCESS, + } + + /** + * Coordinates of the main purification plant controller. These can be used to find the controller again + * on world load. + */ + private int controllerX, controllerY, controllerZ; + + /** + * Whether a controller was previously set. + */ + private boolean controllerSet = false; + + /** + * Pointer to the main purification plant controller. + */ + private MTEPurificationPlant controller = null; + + /** + * The current recipe being run in the purification unit. Note that purification unit recipes are a bit special, + * so input and output in the recipe might not exactly match the required inputs and produced outputs. + * For more information, always look at the purification unit tooltip and implementation. + */ + protected GTRecipe currentRecipe = null; + + /** + * Current chance of the recipe succeeding, always in [0, 100]. A chance above 100 will be interpreted as 100. + */ + protected float currentRecipeChance = 0.0f; + + /** + * Configured parallel amount. Only water I/O and power scale. + */ + protected int maxParallel = 1; + + protected int effectiveParallel = 1; + + protected ArrayList storedFluids = null; + + protected MTEPurificationUnitBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + protected MTEPurificationUnitBase(String aName) { + super(aName); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean doRandomMaintenanceDamage() { + // The individual purification unit structures cannot have maintenance issues, so do nothing. + return true; + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } + + @Override + protected void setHatchRecipeMap(MTEHatchInput hatch) { + // Do nothing, we don't want to lock hatches to recipe maps since this can cause + // them to reject our catalyst fluids + } + + /** + * Used to more easily grab a correct texture index from a block + meta. + * + * @param block Block to use as base. Must implement GT_Block_Casings_Abstract + * @param meta Metadata of the block to pick the actual block + * @return The correct index into the global texture atlas. + */ + protected static int getTextureIndex(Block block, int meta) { + return ((BlockCasingsAbstract) block).getTextureIndex(meta); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + super.onPostTick(aBaseMetaTileEntity, aTimer); + // Try to re-link to controller periodically, for example on game load. + if (aTimer % 100 == 5 && controllerSet && getController() == null) { + trySetControllerFromCoord(controllerX, controllerY, controllerZ); + } + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + // Main controller updates progress time. We can do I/O logic here. + // The logic for operating purification units is typically implemented by overriding this behaviour. + if (mMaxProgresstime > 0) { + this.markDirty(); + // Do not take maintenance into consideration, because purification units do not get + // maintenance issues. + // Technically, this entire efficiency stat is a bit useless for purification units, since + // their power draw does not actually depend on it, but it's nice to keep around for consistency with other + // multiblocks. This way, you still gradually see the efficiency go down when it powers down. + mEfficiency = Math.max(0, Math.min(mEfficiency + mEfficiencyIncrease, getMaxEfficiency(mInventory[1]))); + } + } + + protected CheckRecipeResult findRecipeForInputs(FluidStack[] fluidInputs, ItemStack... itemInputs) { + RecipeMap recipeMap = this.getRecipeMap(); + + // Grab a stream of recipes and find the one with the highest success chance + Stream recipes = recipeMap.findRecipeQuery() + .fluids(fluidInputs) + .items(itemInputs) + .findAll(); + GTRecipe recipe = recipes + .max(Comparator.comparing(r -> r.getMetadataOrDefault(PurificationPlantBaseChanceKey.INSTANCE, 0.0f))) + .orElse(null); + + if (recipe == null) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + + if (this.protectsExcessFluid() && !this.canOutputAll(recipe.mFluidOutputs)) { + return CheckRecipeResultRegistry.FLUID_OUTPUT_FULL; + } + + if (this.protectsExcessItem() && !this.canOutputAll(recipe.mOutputs)) { + return CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; + } + + this.currentRecipe = recipe; + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + /** + * By default, only checks fluid input. + * + * @return + */ + @NotNull + @Override + public CheckRecipeResult checkProcessing() { + this.storedFluids = this.getStoredFluids(); + CheckRecipeResult result = overrideRecipeCheck(); + if (result == null) result = findRecipeForInputs(storedFluids.toArray(new FluidStack[] {})); + + // If we had a successful result, calculate effective parallel + if (result.wasSuccessful()) { + FluidStack waterInput = this.currentRecipe.mFluidInputs[0]; + // Count total available purified water input of the previous step + long amountAvailable = 0; + for (FluidStack fluid : this.storedFluids) { + if (fluid.isFluidEqual(waterInput)) { + amountAvailable += fluid.amount; + } + } + // Determine effective parallel + effectiveParallel = (int) Math.min(maxParallel, Math.floorDiv(amountAvailable, waterInput.amount)); + // This should not happen, throw an error + if (effectiveParallel == 0) return CheckRecipeResultRegistry.INTERNAL_ERROR; + } + + return result; + } + + public CheckRecipeResult overrideRecipeCheck() { + return null; + } + + /** + * Equivalent to checkRecipe(), but public because the purification plant needs to access it and checkRecipe() + * is protected. + * + * @return True if successfully found a recipe and/or started processing/ + */ + public boolean doPurificationRecipeCheck() { + effectiveParallel = 1; + return this.checkRecipe(); + } + + /** + * Get the success chance of the recipe, from 0 to 100. Never call this while a recipe is running, because items + * or modifiers used to boost might disappear by the time recipe check comes around, + * which would invalidate this result. + */ + public float calculateBoostedSuccessChance() { + // If this.currentRecipe is null, there is a bug, so throwing a NPE is fine. + float recipeChance = this.currentRecipe.getMetadataOrDefault(PurificationPlantBaseChanceKey.INSTANCE, 0.0f); + // Apply water boost if available. + if (isWaterBoosted(this.currentRecipe)) { + recipeChance = Math.min(recipeChance + WATER_BOOST_BONUS_CHANCE * 100.0f, 100.0f); + } + return recipeChance; + } + + /** + * By default, the final recipe success chance is simply the success chance calculated on recipe check. + * This applies water boosts when needed to the base chance. Purification units can override this to perform + * more complex success chance calculations, that even take into account what happened during the runtime of the + * recipe. + * + * @return The success chance of the recipe, at the point in time the outputs are to be produced. + */ + public float calculateFinalSuccessChance() { + return this.currentRecipeChance; + } + + /** + * Get the tier of water this unit makes. Starts at 1. + */ + public abstract int getWaterTier(); + + /** + * Get the amount of water needed to execute a water boost, in mb. + */ + public FluidStack getWaterBoostAmount(GTRecipe recipe) { + // Recipes should always be constructed so that output water is always the first fluid output + FluidStack outputWater = recipe.mFluidOutputs[0]; + int amount = Math.round(outputWater.amount * WATER_BOOST_NEEDED_FLUID); + return new FluidStack(outputWater.getFluid(), amount); + } + + /** + * Returns true if this purification unit contains enough water to apply a water boost for the selected recipe. + * This should only be called during recipe check! Never call this while a recipe is running, because water used to + * boost might disappear by the time recipe check comes around, which would invalidate this result. + * + * @param recipe The recipe to check the water boost of + */ + public boolean isWaterBoosted(GTRecipe recipe) { + FluidStack inputWater = getWaterBoostAmount(recipe); + // Simulate input drain to see if we can water boost + return depleteInput(inputWater, true); + } + + /** + * Consumes all fluid inputs of the current recipe. + */ + public void depleteRecipeInputs() { + for (FluidStack input : this.currentRecipe.mFluidInputs) { + FluidStack copyWithParallel = input.copy(); + copyWithParallel.amount = input.amount * effectiveParallel; + this.depleteInput(copyWithParallel); + } + } + + /** + * Called after a recipe is found and accepted. + * + * @param cycleTime Time for a full cycle to complete + * @param progressTime Current progress time + */ + public void startCycle(int cycleTime, int progressTime) { + // Important to calculate this before depleting inputs, otherwise we may get issues with boost items + // disappearing. + this.currentRecipeChance = this.calculateBoostedSuccessChance(); + + // Deplete inputs from water boost if enabled. + if (isWaterBoosted(this.currentRecipe)) { + FluidStack inputWater = this.getWaterBoostAmount(this.currentRecipe); + this.depleteInput(inputWater); + } + + // Consume inputs + this.depleteRecipeInputs(); + // Initialize recipe and progress information. + this.mMaxProgresstime = cycleTime; + this.mProgresstime = progressTime; + this.mEfficiency = 10000; + // These need to be set so the GUI code can display the produced outputs + + // Make sure to scale purified water output with parallel amount. + // Make sure to make a full copy of the array, so we don't go modifying recipes + FluidStack[] fluidOutputs = new FluidStack[this.currentRecipe.mFluidOutputs.length]; + for (int i = 0; i < this.currentRecipe.mFluidOutputs.length; ++i) { + fluidOutputs[i] = this.currentRecipe.mFluidOutputs[i].copy(); + } + fluidOutputs[0].amount *= effectiveParallel; + this.mOutputFluids = fluidOutputs; + this.mOutputItems = this.currentRecipe.mOutputs; + // Set this value, so it can be displayed in Waila. Note that the logic for the units is + // specifically overridden so setting this value does not actually drain power. + // Instead, power is drained by the main purification plant controller. + this.lEUt = -this.getActualPowerUsage(); + } + + public void addRecipeOutputs() { + ThreadLocalRandom random = ThreadLocalRandom.current(); + this.addFluidOutputs(mOutputFluids); + // If this recipe has random item outputs, roll on it and add outputs + if (this.currentRecipe.mChances != null) { + // Roll on each output individually + for (int i = 0; i < this.currentRecipe.mOutputs.length; ++i) { + // Recipes store probabilities as a value ranging from 1-10000 + int roll = random.nextInt(10000); + if (roll <= this.currentRecipe.mChances[i]) { + this.addOutput(this.currentRecipe.mOutputs[i]); + } + } + } else { + // Guaranteed item output + for (int i = 0; i < this.currentRecipe.mOutputs.length; ++i) { + this.addOutput(this.currentRecipe.mOutputs[i]); + } + } + } + + public void endCycle() { + ThreadLocalRandom random = ThreadLocalRandom.current(); + + // First see if the recipe succeeded. For some reason random.nextFloat does not compile, so we use this + // hack instead. + float successRoll = random.nextInt(0, 10000) / 100.0f; + if (successRoll <= calculateFinalSuccessChance()) { + addRecipeOutputs(); + } else { + onRecipeFail(); + } + + // Reset recipe values for next iteration + this.mMaxProgresstime = 0; + this.mProgresstime = 0; + this.lEUt = 0; + this.mEfficiency = 0; + this.currentRecipe = null; + this.currentRecipeChance = 0.0f; + this.mOutputItems = null; + this.mOutputFluids = null; + this.effectiveParallel = 1; + } + + /** + * Outputs fluid when recipe fails. + */ + private void onRecipeFail() { + // Possibly output lower quality water. + // Note that if there is no space for this, it will be voided regardless of fluid void setting! + FluidStack outputWater = getDegradedOutputWater(); + this.addOutput(outputWater); + } + + /** + * On recipe fail, water quality may degrade to the same or lower tier. This function returns the water to output + * in this case, or null if no water is produced at all. + */ + private FluidStack getDegradedOutputWater() { + ThreadLocalRandom random = ThreadLocalRandom.current(); + int roll = random.nextInt(0, 2); + // 50% chance to not output anything at all + if (roll == 0) return null; + + for (int waterTier = getWaterTier(); waterTier > 0; --waterTier) { + // 50% chance every time of degrading into the previous tier + roll = random.nextInt(0, 2); + if (roll == 1) { + // Rolled good, stop the loop and output water below current tier + int amount = mOutputFluids[0].amount; + // For tier 1, this is distilled water, so we cannot use the helper function! + if (waterTier == 1) { + return GTModHandler.getDistilledWater(amount); + } + Materials water = PurifiedWaterHelpers.getPurifiedWaterTier(waterTier - 1); + return water.getFluid(amount); + } + // Bad roll, keep looping and degrade quality even further + } + // Rolled bad on every iteration, no output for you + return null; + } + + /** + * Get the EU/t usage of this unit while it is running. + */ + public abstract long getBasePowerUsage(); + + public long getActualPowerUsage() { + return getBasePowerUsage() * effectiveParallel; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + // The individual purification unit structures cannot have maintenance issues, so fix them all. + this.mCrowbar = true; + this.mWrench = true; + this.mHardHammer = true; + this.mSoftHammer = true; + this.mSolderingTool = true; + this.mScrewdriver = true; + return true; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + // If a linked controller was found, load its coordinates. + // The unit will try to link to the real controller block periodically in onPostTick() + // We cannot do this linking here yet because the controller block might not be loaded yet. + // TODO: We could try though? + if (aNBT.hasKey("controller")) { + NBTTagCompound controllerNBT = aNBT.getCompoundTag("controller"); + controllerX = controllerNBT.getInteger("x"); + controllerY = controllerNBT.getInteger("y"); + controllerZ = controllerNBT.getInteger("z"); + controllerSet = true; + } + currentRecipeChance = aNBT.getFloat("currentRecipeChance"); + if (aNBT.hasKey("configuredParallel")) { + maxParallel = aNBT.getInteger("configuredParallel"); + } + if (aNBT.hasKey("effectiveParallel")) { + effectiveParallel = aNBT.getInteger("effectiveParallel"); + } + } + + public NBTTagCompound saveLinkDataToNBT() { + NBTTagCompound controllerNBT = new NBTTagCompound(); + controllerNBT.setInteger("x", controllerX); + controllerNBT.setInteger("y", controllerY); + controllerNBT.setInteger("z", controllerZ); + return controllerNBT; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (controllerSet) { + NBTTagCompound controllerNBT = saveLinkDataToNBT(); + aNBT.setTag("controller", controllerNBT); + } + aNBT.setFloat("currentRecipeChance", currentRecipeChance); + aNBT.setInteger("configuredParallel", maxParallel); + aNBT.setInteger("effectiveParallel", effectiveParallel); + } + + private LinkResult trySetControllerFromCoord(int x, int y, int z) { + IGregTechTileEntity ourBaseMetaTileEntity = this.getBaseMetaTileEntity(); + // First check whether the controller we try to link to is within range. The range is defined + // as a max distance in each axis. + if (Math.abs(ourBaseMetaTileEntity.getXCoord() - x) > MTEPurificationPlant.MAX_UNIT_DISTANCE) + return LinkResult.TOO_FAR; + if (Math.abs(ourBaseMetaTileEntity.getYCoord() - y) > MTEPurificationPlant.MAX_UNIT_DISTANCE) + return LinkResult.TOO_FAR; + if (Math.abs(ourBaseMetaTileEntity.getZCoord() - z) > MTEPurificationPlant.MAX_UNIT_DISTANCE) + return LinkResult.TOO_FAR; + + // Find the block at the requested coordinated and check if it is a purification plant controller. + var tileEntity = getBaseMetaTileEntity().getWorld() + .getTileEntity(x, y, z); + if (tileEntity == null) return LinkResult.NO_VALID_PLANT; + if (!(tileEntity instanceof IGregTechTileEntity gtTileEntity)) return LinkResult.NO_VALID_PLANT; + var metaTileEntity = gtTileEntity.getMetaTileEntity(); + if (!(metaTileEntity instanceof MTEPurificationPlant)) return LinkResult.NO_VALID_PLANT; + + // Before linking, unlink from current controller, so we don't end up with units linked to multiple + // controllers. + MTEPurificationPlant oldController = getController(); + if (oldController != null) { + oldController.unregisterLinkedUnit(this); + this.unlinkController(); + } + + // Now link to new controller + controllerX = x; + controllerY = y; + controllerZ = z; + controllerSet = true; + controller = (MTEPurificationPlant) metaTileEntity; + controller.registerLinkedUnit(this); + return LinkResult.SUCCESS; + } + + private boolean tryLinkDataStick(EntityPlayer aPlayer) { + // Make sure the held item is a data stick + ItemStack dataStick = aPlayer.inventory.getCurrentItem(); + if (!ItemList.Tool_DataStick.isStackEqual(dataStick, false, true)) { + return false; + } + + // Make sure this data stick is a proper purification plant link data stick. + if (!dataStick.hasTagCompound() || !dataStick.stackTagCompound.getString("type") + .equals("PurificationPlant")) { + return false; + } + + // Now read link coordinates from the data stick. + NBTTagCompound nbt = dataStick.stackTagCompound; + int x = nbt.getInteger("x"); + int y = nbt.getInteger("y"); + int z = nbt.getInteger("z"); + + // Try to link, and report the result back to the player. + LinkResult result = trySetControllerFromCoord(x, y, z); + if (result == LinkResult.SUCCESS) { + aPlayer.addChatMessage(new ChatComponentText("Link successful")); + } else if (result == LinkResult.TOO_FAR) { + aPlayer.addChatMessage(new ChatComponentText("Link failed: Out of range.")); + } else if (result == LinkResult.NO_VALID_PLANT) { + aPlayer.addChatMessage(new ChatComponentText("Link failed: No Purification Plant found at link location")); + } + + return true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (!(aPlayer instanceof EntityPlayerMP)) { + return false; + } + + // Right-clicking could be a data stick linking action, so try this first. + if (tryLinkDataStick(aPlayer)) { + return true; + } + + return super.onRightclick(aBaseMetaTileEntity, aPlayer); + } + + public MTEPurificationPlant getController() { + if (controller == null) return null; + // Controller disappeared + if (controller.getBaseMetaTileEntity() == null) return null; + return controller; + } + + // If the controller is broken this can be called to explicitly unlink the controller, so we don't have any + // references lingering around + public void unlinkController() { + this.controllerSet = false; + this.controller = null; + this.controllerX = 0; + this.controllerY = 0; + this.controllerZ = 0; + } + + @Override + public void onBlockDestroyed() { + // When this block is destroyed, explicitly unlink it from the controller if there is any. + MTEPurificationPlant controller = getController(); + if (controller != null) { + controller.unregisterLinkedUnit(this); + } + super.onBlockDestroyed(); + } + + @Override + public String[] getInfoData() { + var ret = new ArrayList(); + // If this purification unit is linked to a controller, add this info to the scanner output. + if (getController() != null) { + ret.add( + "This Purification Unit is linked to the Water Purification Plant at " + controllerX + + ", " + + controllerY + + ", " + + controllerZ + + "."); + + // If recipe is running, display success chance + if (this.mMaxProgresstime != 0) { + ret.add( + "Success chance: " + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(this.calculateFinalSuccessChance()) + + "%" + + EnumChatFormatting.RESET); + } + + } else ret.add("This Purification Unit is not linked to any Water Purification Plant."); + ret.add("Current parallel: " + EnumChatFormatting.YELLOW + this.effectiveParallel); + return ret.toArray(new String[0]); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + NBTTagCompound tag = accessor.getNBTData(); + + // Display linked controller in Waila. + if (tag.getBoolean("linked")) { + currenttip.add( + EnumChatFormatting.AQUA + "Linked to Purification Plant at " + + EnumChatFormatting.WHITE + + tag.getInteger("controllerX") + + ", " + + tag.getInteger("controllerY") + + ", " + + tag.getInteger("controllerZ") + + EnumChatFormatting.RESET); + } else { + currenttip.add(EnumChatFormatting.AQUA + "Unlinked"); + } + + super.getWailaBody(itemStack, currenttip, accessor, config); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + + tag.setBoolean("linked", getController() != null); + if (getController() != null) { + tag.setInteger("controllerX", controllerX); + tag.setInteger("controllerY", controllerY); + tag.setInteger("controllerZ", controllerZ); + } + + super.getWailaNBTData(player, tile, tag, world, x, y, z); + } + + public PurificationUnitStatus status() { + if (!this.mMachine) { + return PurificationUnitStatus.INCOMPLETE_STRUCTURE; + } else if (!this.isAllowedToWork()) { + return PurificationUnitStatus.DISABLED; + } else { + return PurificationUnitStatus.ONLINE; + } + } + + /** + * Creates all widgets needed to sync this unit's status with the client + */ + public Widget makeSyncerWidgets() { + return new MultiChildWidget() + .addChild(new FakeSyncWidget.BooleanSyncer(() -> this.mMachine, machine -> this.mMachine = machine)) + .addChild(new FakeSyncWidget.BooleanSyncer(this::isAllowedToWork, _work -> {})); + } + + private static final int PARALLEL_WINDOW_ID = 10; + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + buildContext.addSyncedWindow(PARALLEL_WINDOW_ID, this::createParallelWindow); + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getContext() + .openSyncedWindow(PARALLEL_WINDOW_ID); + } + }) + .setPlayClickSound(true) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(GTUITextures.BUTTON_STANDARD); + ret.add(GTUITextures.OVERLAY_BUTTON_BATCH_MODE_ON); + return ret.toArray(new IDrawable[0]); + }) + .addTooltip(translateToLocal("GT5U.tpm.parallelwindow")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(174, 112) + .setSize(16, 16)); + super.addUIWidgets(builder, buildContext); + } + + protected ModularWindow createParallelWindow(final EntityPlayer player) { + final int WIDTH = 158; + final int HEIGHT = 52; + final int PARENT_WIDTH = getGUIWidth(); + final int PARENT_HEIGHT = getGUIHeight(); + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.setPos( + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) + .add( + Alignment.BottomRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) + .add(WIDTH - 3, 0) + .subtract(0, 10))); + builder.widget( + TextWidget.localised("GTPP.CC.parallel") + .setPos(3, 4) + .setSize(150, 20)) + .widget( + new NumericWidget().setSetter(val -> maxParallel = (int) val) + .setGetter(() -> maxParallel) + .setBounds(1, Integer.MAX_VALUE) + .setDefaultValue(1) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(150, 18) + .setPos(4, 25) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer(() -> maxParallel, (val) -> maxParallel = val), + builder)); + return builder.build(); + } + + @Override + public boolean supportsVoidProtection() { + return false; + } + + @Override + public Set getAllowedVoidingModes() { + return EnumSet.of(VoidingMode.VOID_NONE); + } + + @Override + protected boolean supportsCraftingMEBuffer() { + return false; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitClarifier.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitClarifier.java new file mode 100644 index 0000000000..4cd654af28 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitClarifier.java @@ -0,0 +1,332 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static gregtech.api.enums.GTValues.AuthorNotAPenguin; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEPurificationUnitClarifier extends MTEPurificationUnitBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final String STRUCTURE_PIECE_MAIN_SURVIVAL = "main_survival"; + + private static final int STRUCTURE_X_OFFSET = 5; + private static final int STRUCTURE_Y_OFFSET = 2; + private static final int STRUCTURE_Z_OFFSET = 1; + + // Chance that the filter is damaged every cycle. + public static final float FILTER_DAMAGE_RATE = 20.0f; + + private static final int CASING_TEXTURE_INDEX = getTextureIndex(GregTechAPI.sBlockCasings9, 5); + + private static final String[][] structure = + // spotless:off + new String[][] { + { " ", " ", " ", " " }, + { " ", " AAAAA ", " AH~HA ", " AAAAA " }, + { " ", " A A ", " AWWWWWA ", " AAAAAAA " }, + { " ", " A A ", " AWWWWWWWA ", " AAAAAAAAA " }, + { " ", "A A", "AWWWCCCWWWA", "AAAAFFFAAAA" }, + { " DDD ", "A A", "HWWCWWWCWWH", "AAAFFFFFAAA" }, + { "DDDDDBD ", "A B A", "AWWCWBWCWWA", "AAAFFFFFAAA" }, + { " DDD ", "A A", "HWWCWWWCWWH", "AAAFFFFFAAA" }, + { " ", "A A", "AWWWCCCWWWA", "AAAAFFFAAAA" }, + { " ", " A A ", " AWWWWWWWA ", " AAAAAAAAA " }, + { " ", " A A ", " AWWWWWA ", " AAAAAAA " }, + { " ", " AAAAA ", " AHAHA ", " AAAAA " } }; + // spotless:on + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, structure) + .addShape( + STRUCTURE_PIECE_MAIN_SURVIVAL, + Arrays.stream(structure) + .map( + sa -> Arrays.stream(sa) + .map(s -> s.replaceAll("W", " ")) + .toArray(String[]::new)) + .toArray(String[][]::new)) + // Hatches + .addElement( + 'H', + ofChain( + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeastList(t.getAllowedHatches()) + .casingIndex(CASING_TEXTURE_INDEX) + .dot(1) + .build()), + // Reinforced Sterile Water Plant Casing + ofBlock(GregTechAPI.sBlockCasings9, 5))) + // Reinforced Sterile Water Plant Casing + .addElement('A', ofBlock(GregTechAPI.sBlockCasings9, 5)) + // PTFE pipe casing + .addElement('B', ofBlock(GregTechAPI.sBlockCasings8, 1)) + .addElement('C', ofFrame(Materials.Iridium)) + .addElement('D', ofFrame(Materials.DamascusSteel)) + .addElement('W', ofChain(ofBlock(Blocks.water, 0))) + // Filter machine casing + .addElement('F', ofBlock(GregTechAPI.sBlockCasings3, 11)) + .build(); + + public MTEPurificationUnitClarifier(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPurificationUnitClarifier(String aName) { + super(aName); + } + + @Override + public int getWaterTier() { + return 1; + } + + @Override + public long getBasePowerUsage() { + return TierEU.RECIPE_LuV; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.purificationClarifierRecipes; + } + + @NotNull + @Override + public CheckRecipeResult overrideRecipeCheck() { + // Clarifier needs to check item inputs from recipe as well to find filter item + return findRecipeForInputs( + this.storedFluids.toArray(new FluidStack[] {}), + this.getStoredInputs() + .toArray(new ItemStack[] {})); + } + + @Override + public void depleteRecipeInputs() { + super.depleteRecipeInputs(); + + // Now do random roll to determine if the filter should be destroyed + ThreadLocalRandom random = ThreadLocalRandom.current(); + int roll = random.nextInt(1, 101); + if (roll < FILTER_DAMAGE_RATE) { + this.depleteInput(this.currentRecipe.mInputs[0]); + } + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + // Rotated sifter not allowed, water will flow out. + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Purification Unit") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.BOLD + + "Water Tier: " + + EnumChatFormatting.WHITE + + GTUtility.formatNumbers(getWaterTier()) + + EnumChatFormatting.RESET) + .addInfo("Controller block for the Clarifier Purification Unit.") + .addInfo("Must be linked to a Purification Plant using a data stick to work.") + .addSeparator() + .addInfo("Requires a filter made of Activated Carbon to work.") + .addInfo( + "Every cycle, has a " + EnumChatFormatting.RED + + GTUtility.formatNumbers(FILTER_DAMAGE_RATE) + + "%" + + EnumChatFormatting.GRAY + + " chance to destroy the filter.") + .addSeparator() + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "The first step to acquiring purified water is to filter out macroscopic contaminants through the") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "use of large physical filters. As more contaminants are captured, the efficacy of the filter") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "decreases so continual replacements must be supplied to maintain full function of the Clarifier.") + .addInfo(AuthorNotAPenguin) + .beginStructureBlock(11, 4, 11, false) + .addSeparator() + .addCasingInfoRangeColored( + "Reinforced Sterile Water Plant Casing", + EnumChatFormatting.GRAY, + 123, + 131, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Filter Machine Casing", + EnumChatFormatting.GRAY, + 21, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Iridium Frame Box", + EnumChatFormatting.GRAY, + 21, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Damascus Steel Frame Box", + EnumChatFormatting.GRAY, + 12, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored("PTFE Pipe Casing", EnumChatFormatting.GRAY, 3, EnumChatFormatting.GOLD, false) + .addController("Front center") + .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) + .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) + .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) + .addOutputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) + .addStructureInfo("Requires water to be placed in the structure.") + .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + hintsOnly, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + int built = survivialBuildPiece( + STRUCTURE_PIECE_MAIN_SURVIVAL, + stackSize, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET, + elementBudget, + env, + true); + if (built == -1) { + GTUtility.sendChatToPlayer( + env.getActor(), + EnumChatFormatting.GREEN + "Auto placing done ! Now go place the water yourself !"); + return 0; + } + return built; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPurificationUnitClarifier(this.mName); + } + + private List> getAllowedHatches() { + return ImmutableList.of(InputBus, InputHatch, OutputBus, OutputHatch); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection == facingDirection) { + if (active) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_INDEX) }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; + return super.checkMachine(aBaseMetaTileEntity, aStack); + } + + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_PURIFICATIONPLANT_LOOP.resourceLocation; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitDegasser.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitDegasser.java new file mode 100644 index 0000000000..b139a0f6d4 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitDegasser.java @@ -0,0 +1,830 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static gregtech.api.enums.GTValues.AuthorNotAPenguin; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.ThreadLocalRandom; +import java.util.function.Supplier; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchMultiInput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEPurificationUnitDegasser extends MTEPurificationUnitBase + implements ISurvivalConstructable { + + private static final int CASING_INDEX_MAIN = getTextureIndex(GregTechAPI.sBlockCasings9, 11); + + private static final String STRUCTURE_PIECE_MAIN = "main"; + + // spotless:off + private static final String[][] structure = new String[][] { + { " AAAAA ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " AAAAA " }, + { " AAAAAAAAA ", " AAAAA ", " ", " C ", " CC ", " C ", " CC ", " C ", " ", " ", " ", " C ", " CC ", " C ", " CC ", " C ", " ", " ", " ", " C ", " CC ", " C ", " CC ", " CCAA~AA ", " AAAAAAAAA " }, + { " AAAAAAAAAAAAA ", " CAAAAAAAAA ", " BBBBB CC ", " BBBBB ", " BBBBB ", " BBB ", " B ", " ", " C ", " ", " C ", " ", " ", " ", " ", " ", " C ", " ", " B C ", " BBB ", " BBBBB ", " BBBBB ", " BBBBB ", " AAAAAAAAA ", " AAAAAAAAAAAAA " }, + { " AAAAAAAAAAAAA ", " AAAAAAAAAAAC ", " C BBB BB ", " BB BB ", " B B ", " BB BB ", " BBB BBB ", " BBBBB ", " BBB ", " C C ", " ", " ", " ", " ", " ", " ", " BBB ", " C BBBBB C ", " BBB BBB ", " BB BB ", " B B ", " BB BB ", " BB BB ", " AAAAAAAAAAA ", " AAAAAAAAAAAAA " }, + { " AAAAAAAAAAAAAAA ", " AAAAAAAAAAAAA ", " CB B ", " B B ", " B B ", " B B ", " B B ", " BB BB ", " BB BB C ", " BBBBB ", " C BBB ", " ", " ", " ", " BBB ", " BBBBB ", " BB BB C ", " BB BB ", " C B B ", " B B ", " B B ", " B B ", " B B ", " AAAAAAAAAAAAAC ", " AAAAAAAAAAAAAAA " }, + { " AAAAAAAAAAAAAAA ", " AAAAAAAAAAAAA ", " B B ", " C B B ", " B B ", " B B ", " B B ", " B B C ", " B B ", " B B ", " B B ", " C BBB ", " ", " BBB ", " B B ", " B B C ", " B B ", " B B ", " B B ", " C B B ", " B B ", " B B ", " B B ", " AAAAAAAAAAAAAC ", " AAAAAAAAAAAAAAA " }, + { "AAAAAAAAAAAAAAAAA", " AAAAAAAAAAAAAAA ", " B B ", " B B ", " CB B ", " B B ", " B B C ", " B B ", " B B ", " B B ", " B B ", " BBBBB ", " C BBB ", " BBBBB ", " B B C ", " B B ", " B B ", " B B ", " B B ", " B B ", " CB B ", " B B ", " B BC ", " AAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAAAA", " AAAAAAAAAAAAAAA ", " B B ", " B B ", " CB B ", " B B ", " B B C ", " B B ", " B B ", " B B ", " B B ", " BB BB ", " C BBBBB ", " BB BB ", " B B C ", " B B ", " B B ", " B B ", " B B ", " B B ", " CB B ", " B B ", " B BC ", " AAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAAAA", " AAAAAAAAAAAAAAA ", " B B ", " B B ", " B B ", " CB BC ", " B B ", " B B ", " B B ", " B B ", " B B ", " BB BB ", " BBBBB ", " C BB BB C ", " B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " CB BC ", " B B ", " AAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAAAA", " AAAAAAAAAAAAAAA ", " B B ", " B B ", " B BC ", " B B ", " C B B ", " B B ", " B B ", " B B ", " B B ", " BB BB ", " BBBBB C ", " BB BB ", " C B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " B BC ", " B B ", " CB B ", " AAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAA" }, + { "AAAAAAAAAAAAAAAAA", " AAAAAAAAAAAAAAA ", " B B ", " B B ", " B BC ", " B B ", " C B B ", " B B ", " B B ", " B B ", " B B ", " BBBBB ", " BBB C ", " BBBBB ", " C B B ", " B B ", " B B ", " B B ", " B B ", " B B ", " B BC ", " B B ", " CB B ", " AAAAAAAAAAAAAAA ", "AAAAAAAAAAAAAAAAA" }, + { " AAAAAAAAAAAAAAA ", " AAAAAAAAAAAAA ", " B B ", " B B C ", " B B ", " B B ", " B B ", " C B B ", " B B ", " B B ", " B B ", " BBB C ", " ", " BBB ", " B B ", " C B B ", " B B ", " B B ", " B B ", " B B C ", " B B ", " B B ", " B B ", " CAAAAAAAAAAAAA ", " AAAAAAAAAAAAAAA " }, + { " AAAAAAAAAAAAAAA ", " AAAAAAAAAAAAA ", " B BC ", " B B ", " B B ", " B B ", " B B ", " BB BB ", " C BB BB ", " BBBBB ", " BBB C ", " ", " ", " ", " BBB ", " BBBBB ", " C BB BB ", " BB BB ", " B B C ", " B B ", " B B ", " B B ", " B B ", " CAAAAAAAAAAAAA ", " AAAAAAAAAAAAAAA " }, + { " AAAAAAAAAAAAA ", " CAAAAAAAAAAA ", " BB BB C ", " BB BB ", " B B ", " BB BB ", " BBB BBB ", " BBBBB ", " BBB ", " C C ", " ", " ", " ", " ", " ", " ", " BBB ", " C BBBBB C ", " BBB BBB ", " BB BB ", " B B ", " BB BB ", " BB BB ", " AAAAAAAAAAA ", " AAAAAAAAAAAAA " }, + { " AAAAAAAAAAAAA ", " AAAAAAAAAC ", " CC BBBBB ", " BBBBB ", " BBBBB ", " BBB ", " B ", " ", " C ", " ", " C ", " ", " ", " ", " ", " ", " C ", " ", " C B ", " BBB ", " BBBBB ", " BBBBB ", " BBBBB ", " AAAAAAAAA ", " AAAAAAAAAAAAA " }, + { " AAAAAAAAA ", " AAAAA ", " ", " C ", " CC ", " C ", " CC ", " C ", " ", " ", " ", " C ", " CC ", " C ", " CC ", " C ", " ", " ", " ", " C ", " CC ", " C ", " CC ", " AAAAACC ", " AAAAAAAAA " }, + { " AAAAA ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " AAAAA " } }; + // spotless:on + + private int casingCount = 0; + private static final int MIN_CASING = 780; + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, structure) + .addElement( + 'A', + ofChain( + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeastList(Arrays.asList(InputHatch, OutputHatch, SpecialHatchElement.ControlHatch)) + .casingIndex(CASING_INDEX_MAIN) + .dot(1) + .cacheHint(() -> "Input Hatch, Output Hatch, Control Hatch") + .build()), + onElementPass(t -> t.casingCount++, ofBlock(GregTechAPI.sBlockCasings9, 11)))) + // Omni-purpose infinity fused glass + .addElement('B', ofBlock(GregTechAPI.sBlockGlass1, 2)) + .addElement('C', ofFrame(Materials.Bedrockium)) + .build(); + + private static final int STRUCTURE_X_OFFSET = 8; + private static final int STRUCTURE_Y_OFFSET = 23; + private static final int STRUCTURE_Z_OFFSET = 1; + + // Supplier because werkstoff loads later than multiblock controllers... fml + private static final Supplier INERT_GASES = () -> new FluidStack[] { Materials.Helium.getGas(10000L), + WerkstoffLoader.Neon.getFluidOrGas(7500), WerkstoffLoader.Krypton.getFluidOrGas(5000), + WerkstoffLoader.Xenon.getFluidOrGas(2500) }; + + private static final class SuperconductorMaterial { + + public FluidStack fluid; + public float multiplier; + + SuperconductorMaterial(FluidStack fluid, float multiplier) { + this.fluid = fluid; + this.multiplier = multiplier; + } + } + + private static final long SUPERCON_FLUID_AMOUNT = 1440L; + + private static final Supplier SUPERCONDUCTOR_MATERIALS = () -> new SuperconductorMaterial[] { + new SuperconductorMaterial(Materials.Longasssuperconductornameforuvwire.getMolten(SUPERCON_FLUID_AMOUNT), 1.0f), + new SuperconductorMaterial( + Materials.Longasssuperconductornameforuhvwire.getMolten(SUPERCON_FLUID_AMOUNT), + 1.25f), + new SuperconductorMaterial(Materials.SuperconductorUEVBase.getMolten(SUPERCON_FLUID_AMOUNT), 1.5f), + new SuperconductorMaterial(Materials.SuperconductorUIVBase.getMolten(SUPERCON_FLUID_AMOUNT), 1.75f), + new SuperconductorMaterial(Materials.SuperconductorUMVBase.getMolten(SUPERCON_FLUID_AMOUNT), 2.0f), }; + + private static final FluidStack CATALYST_FLUID = Materials.Neutronium.getMolten(4608L); + private static final FluidStack COOLANT_FLUID = Materials.SuperCoolant.getFluid(10000L); + + private static final long CONSUME_INTERVAL = 20; + + private static class ControlSignal { + + private byte signal; + + public ControlSignal(byte sig) { + signal = sig; + } + + public void randomize() { + ThreadLocalRandom random = ThreadLocalRandom.current(); + // We want to give the final bit a lower chance at being on, since this bypasses most of the automation. + // If this bit has a 50% chance of being on, you could opt to not automate the degasser at all and never + // insert anything. This way you still get 50% output which might just be good enough. + + // To do this weighting, we simply only generate the lower 3 bits, and then with a smaller chance we add + // 8 to the result + signal = (byte) random.nextInt(0, 8); + if (random.nextInt(0, 5) == 0) { + signal += 8; + } + } + + public boolean getBit(int bit) { + if (bit < 0 || bit > 3) { + throw new IllegalArgumentException("Invalid bit index for degasser control signal"); + } + + // Shift signal so the requested bit is in the lowermost bit + // Then only keep the lowermost bit + // Then test if this bit is on. + return ((signal >> bit) & 1) == 1; + } + + public byte getSignal() { + return signal; + } + + // Get integer value representing control bits 1 and 2 + public int getControlBit12() { + return (signal >> 1) & 0b11; + } + + public boolean isZero() { + return signal == (byte) 0; + } + + @Override + public String toString() { + return Integer.toBinaryString(((int) signal) & 0b1111); + } + } + + private static class ControlBitStatus { + + public FluidStack stack; + public boolean satisfied; + + public ControlBitStatus(FluidStack stack, boolean satisfied) { + this.stack = stack; + this.satisfied = satisfied; + } + } + + private ControlSignal controlSignal = new ControlSignal((byte) 0); + + private final HashMap insertedStuffThisCycle = new HashMap<>(); + + private float outputMultiplier = 1.0f; + + private MTEHatchDegasifierControl controlHatch = null; + + public MTEPurificationUnitDegasser(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + protected MTEPurificationUnitDegasser(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPurificationUnitDegasser(mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean active, boolean redstoneLevel) { + if (side == facing) { + if (active) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN) }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + hintsOnly, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET, + elementBudget, + env, + true); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Purification Unit") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.BOLD + + "Water Tier: " + + EnumChatFormatting.WHITE + + GTUtility.formatNumbers(getWaterTier()) + + EnumChatFormatting.RESET) + .addInfo("Controller block for the Residual Decontaminant Degasser Purification Unit.") + .addInfo("Must be linked to a Purification Plant using a data stick to work.") + .addSeparator() + .addInfo( + "At the start of the operation, the " + EnumChatFormatting.WHITE + + "Degasser Control Hatch" + + EnumChatFormatting.GRAY + + " will output a redstone signal.") + .addInfo("To succeed the recipe, you will need to successfully decode the instructions in the signal.") + .addInfo("To decode the signal, interpret the signal strength as a 4-bit number from 0-15.") + .addInfo("Denote the lowest bit as bit 1, and the highest as bit 4.") + .addSeparator() + .addInfo( + EnumChatFormatting.WHITE + "" + + EnumChatFormatting.BOLD + + "Bit 1: " + + EnumChatFormatting.BLUE + + "" + + EnumChatFormatting.BOLD + + "Ozone Sparging by Inert Gas") + .addInfo( + "If this bit is on, you must insert an " + EnumChatFormatting.WHITE + + "inert gas" + + EnumChatFormatting.GRAY + + " into the machine.") + .addInfo( + "To determine which gas to insert, interpret bits " + EnumChatFormatting.WHITE + + "2-3" + + EnumChatFormatting.GRAY + + " as a 2-bit number.") + .addInfo( + EnumChatFormatting.GRAY + "0: " + + EnumChatFormatting.RED + + "10000L " + + EnumChatFormatting.WHITE + + "Helium" + + EnumChatFormatting.GRAY + + " / " + + "1: " + + EnumChatFormatting.RED + + "7500L " + + EnumChatFormatting.WHITE + + "Neon" + + EnumChatFormatting.GRAY + + " / " + + "2: " + + EnumChatFormatting.RED + + "5000L " + + EnumChatFormatting.WHITE + + "Krypton" + + EnumChatFormatting.GRAY + + " / " + + "3: " + + EnumChatFormatting.RED + + "2500L " + + EnumChatFormatting.WHITE + + "Xenon") + .addSeparator() + .addInfo( + EnumChatFormatting.WHITE + "" + + EnumChatFormatting.BOLD + + "Bit 2: " + + EnumChatFormatting.BLUE + + "" + + EnumChatFormatting.BOLD + + "Superconductive Deionization") + .addInfo( + "If this bit is on, you must insert " + EnumChatFormatting.RED + + "1440L " + + EnumChatFormatting.WHITE + + "Molten Superconductor Base.") + .addInfo("Using higher tier superconductor provides bonus output.") + .addInfo( + "Output multiplier: " + EnumChatFormatting.DARK_GREEN + + "UV" + + EnumChatFormatting.GRAY + + ": " + + EnumChatFormatting.WHITE + + "1x" + + EnumChatFormatting.GRAY + + " / " + + EnumChatFormatting.DARK_RED + + "UHV" + + EnumChatFormatting.GRAY + + ": " + + EnumChatFormatting.WHITE + + "1.25x" + + EnumChatFormatting.GRAY + + " / " + + EnumChatFormatting.DARK_PURPLE + + "UEV" + + EnumChatFormatting.GRAY + + ": " + + EnumChatFormatting.WHITE + + "1.5x" + + EnumChatFormatting.GRAY + + " / " + + EnumChatFormatting.DARK_BLUE + + "" + + EnumChatFormatting.BOLD + + "UIV" + + EnumChatFormatting.GRAY + + ": " + + EnumChatFormatting.WHITE + + "1.75x" + + EnumChatFormatting.GRAY + + " / " + + EnumChatFormatting.RED + + "" + + EnumChatFormatting.BOLD + + "UMV" + + EnumChatFormatting.GRAY + + ": " + + EnumChatFormatting.WHITE + + "2x") + .addSeparator() + .addInfo( + EnumChatFormatting.WHITE + "" + + EnumChatFormatting.BOLD + + "Bit 3: " + + EnumChatFormatting.BLUE + + "" + + EnumChatFormatting.BOLD + + "Gravitationally-Generated Differential Vacuum Extraction") + .addInfo( + "If this bit is on, you must insert " + EnumChatFormatting.RED + + "4608L " + + EnumChatFormatting.WHITE + + "Molten Neutronium") + .addSeparator() + .addInfo( + EnumChatFormatting.WHITE + "" + + EnumChatFormatting.BOLD + + "Bit 4: " + + EnumChatFormatting.BLUE + + "" + + EnumChatFormatting.BOLD + + "Seldonian Settlement Process") + .addInfo( + "If this bit is on," + EnumChatFormatting.RED + + " DISREGARD " + + EnumChatFormatting.GRAY + + "all other bits and do not insert anything.") + .addSeparator() + .addInfo( + EnumChatFormatting.WHITE + "" + + EnumChatFormatting.BOLD + + "No bits: " + + EnumChatFormatting.BLUE + + "" + + EnumChatFormatting.BOLD + + "Machine Overload") + .addInfo("In rare cases, the machine may overload and output no control signal at all.") + .addInfo( + "To prevent machine damage, insert " + EnumChatFormatting.RED + + "10000L " + + EnumChatFormatting.WHITE + + "Super Coolant.") + .addSeparator() + .addInfo("The recipe can only succeed if the entire signal is decoded correctly.") + .addInfo("Inserting any fluid not requested by the signal will always void the recipe.") + .addSeparator() + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "The penultimate stage of water purification, step seven, is an irregular series of complex") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "processes designed to remove any residual materials left by the decontaminants from the previous") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "steps such as any energetic ions, acids, clarifiers, or gasses. Depending on what the Degasser") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "detects in the water, it will request various materials to complete the processes listed above.") + .addInfo(AuthorNotAPenguin) + .beginStructureBlock(17, 25, 17, false) + .addCasingInfoRangeColored( + "Heat-Resistant Trinium Plated Casing", + EnumChatFormatting.GRAY, + MIN_CASING, + 803, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Omni-Purpose Infinity Fused Glass", + EnumChatFormatting.GRAY, + 622, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Bedrockium Frame Box", + EnumChatFormatting.GRAY, + 126, + EnumChatFormatting.GOLD, + false) + .addController("Front center") + .addOutputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+, Any Trinium Casing", 1) + .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+, Any Trinium Casing", 1) + .addOtherStructurePart( + "Degasser Control Hatch", + EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + ", Any Trinium Casing", + 1) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.purificationDegasifierRecipes; + } + + // Whether this fluid stack is accepted as a fluid in the inputs that the unit requires at runtime. + public static boolean isValidFluid(FluidStack stack) { + return stack.isFluidEqual(CATALYST_FLUID) || stack.isFluidEqual(COOLANT_FLUID) + || Arrays.stream(INERT_GASES.get()) + .anyMatch(stack::isFluidEqual) + || Arrays.stream(SUPERCONDUCTOR_MATERIALS.get()) + .anyMatch(mat -> stack.isFluidEqual(mat.fluid)); + } + + // Check if an exact match for this FluidStack was found in the map of inserted fluids + private boolean wasFluidInsertedExact(FluidStack toFind) { + FluidStack candidate = insertedStuffThisCycle.get(toFind.getFluid()); + // Fluid was inserted if found and the amount matches + return candidate != null && candidate.amount == toFind.amount; + } + + private ControlBitStatus isBit0Satisfied() { + // Check if instructions matching the first bit are satisfied. + // Instructions: + // If bit 0 is on, insert an inert gas. Bits 1-2 of the control signal determine which inert + // gas to insert. + + if (controlSignal.getBit(0)) { + // Grab the gas to insert from the control bits + int gasToInsert = controlSignal.getControlBit12(); + FluidStack gasStack = INERT_GASES.get()[gasToInsert]; + // Check if it was inserted + if (wasFluidInsertedExact(gasStack)) return new ControlBitStatus(gasStack, true); + else return new ControlBitStatus(null, false); + } + + // Bit 0 is not on, so this is always satisfied + return new ControlBitStatus(null, true); + } + + private ControlBitStatus isBit1Satisfied() { + // Check if instructions matching the second bit (bit 1) are satisfied. + // Instructions: + // If bit 1 is on, insert molten superconductor. + // Higher tier superconductor gives a better bonus. + // Only one type of superconductor may be inserted or the operation fails, + // so we don't care about the order in which we find it. + if (controlSignal.getBit(1)) { + // Find the first superconductor material in the list that was inserted with an exact match + Optional material = Arrays.stream(SUPERCONDUCTOR_MATERIALS.get()) + .filter(candidate -> wasFluidInsertedExact(candidate.fluid)) + .findFirst(); + if (material.isPresent()) { + // Get the material and set the output multiplier, then + // report success with the matching fluid. + SuperconductorMaterial scMaterial = material.get(); + this.outputMultiplier = scMaterial.multiplier; + return new ControlBitStatus(scMaterial.fluid, true); + } + // No superconductor was inserted but bit is on fail. + return new ControlBitStatus(null, false); + } + + return new ControlBitStatus(null, true); + } + + private ControlBitStatus isBit2Satisfied() { + // Check if instructions matching the third bit (bit 2) are satisfied. + // Instructions: + // If bit 2 is on, insert molten neutronium. + if (controlSignal.getBit(2)) { + // If steel was inserted, return it and report success. + if (wasFluidInsertedExact(CATALYST_FLUID)) return new ControlBitStatus(CATALYST_FLUID, true); + // Otherwise report failure. + return new ControlBitStatus(null, false); + } + + return new ControlBitStatus(null, true); + } + + private ControlBitStatus isBit3Satisfied() { + // Check if instructions matching the fourth bit (bit 3) are satisfied. + // Instructions: + // If bit 3 is on, do not insert anything. + if (controlSignal.getBit(3)) { + // Simply check if the map of inserted fluids is empty + if (insertedStuffThisCycle.isEmpty()) return new ControlBitStatus(null, true); + return new ControlBitStatus(null, false); + } + return new ControlBitStatus(null, true); + } + + private boolean areAllBitsSatisfied() { + // Check if each individual bit is satisfied. + // Additional instructions: If no bits are on, insert super coolant + + if (controlSignal.isZero()) { + return wasFluidInsertedExact(COOLANT_FLUID); + } + + ControlBitStatus bit0 = isBit0Satisfied(); + ControlBitStatus bit1 = isBit1Satisfied(); + ControlBitStatus bit2 = isBit2Satisfied(); + ControlBitStatus bit3 = isBit3Satisfied(); + + // If bit 3 is satisfied and on, all other bits are automatically satisfied, + // with no fluids being allowed to be inserted. + if (controlSignal.getBit(3) && bit3.satisfied) { + bit0 = bit1 = bit2 = new ControlBitStatus(null, true); + } + + if (bit0.satisfied && bit1.satisfied && bit2.satisfied && bit3.satisfied) { + // Check if the map contains any other stacks than the ones in the control bit statuses + for (FluidStack inserted : insertedStuffThisCycle.values()) { + // If the inserted stack is null, or any of the fluids required, this stack is fine. + if (inserted == null) continue; + if (bit0.stack != null && inserted.isFluidEqual(bit0.stack)) continue; + if (bit1.stack != null && inserted.isFluidEqual(bit1.stack)) continue; + if (bit2.stack != null && inserted.isFluidEqual(bit2.stack)) continue; + if (bit3.stack != null && inserted.isFluidEqual(bit3.stack)) continue; + // Otherwise it's a nonrequested stack and the recipe should fail. + return false; + } + return true; + } + + return false; + } + + @Override + public void startCycle(int cycleTime, int progressTime) { + super.startCycle(cycleTime, progressTime); + this.controlSignal.randomize(); + this.insertedStuffThisCycle.clear(); + this.outputMultiplier = 1.0f; + // Make sure to output the hatch control signal. + this.controlHatch.updateOutputSignal(this.controlSignal.getSignal()); + } + + private static ArrayList getDrainableFluidsFromHatch(MTEHatchInput hatch) { + // Need special handling for quad input hatches, otherwise it only returns the first fluid in the hatch + if (hatch instanceof MTEHatchMultiInput) { + return new ArrayList<>(Arrays.asList(((MTEHatchMultiInput) hatch).getStoredFluid())); + } + return new ArrayList<>(Collections.singletonList(hatch.getFluid())); + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.runMachine(aBaseMetaTileEntity, aTick); + + // If machine is running, continuously consume all valid inputs + if (mMaxProgresstime > 0 && aTick % CONSUME_INTERVAL == 0) { + // For each hatch, check if each fluid inside is one of the valid fluids. If so, consume it all. + for (MTEHatchInput hatch : mInputHatches) { + ArrayList drainableFluids = getDrainableFluidsFromHatch(hatch); + for (FluidStack fluid : drainableFluids) { + if (fluid != null && isValidFluid(fluid)) { + // Apparently this parameter is mostly ignored, but might as well get it right. + ForgeDirection front = hatch.getBaseMetaTileEntity() + .getFrontFacing(); + // Drain the fluid and save it + FluidStack drainedFluid = hatch.drain(front, fluid, true); + // If the fluid does not yet exist in the map, insert it. + // Otherwise, merge the amounts + insertedStuffThisCycle.merge( + fluid.getFluid(), + drainedFluid, + (a, b) -> new FluidStack(a.getFluid(), a.amount + b.amount)); + } + } + } + } + } + + @Override + public void addRecipeOutputs() { + super.addRecipeOutputs(); + if (outputMultiplier > 1.01f) { + FluidStack waterOutput = currentRecipe.mFluidOutputs[0]; + FluidStack bonusOutput = new FluidStack( + waterOutput.getFluid(), + (int) (waterOutput.amount * (outputMultiplier - 1.0f))); + this.addOutput(bonusOutput); + } + } + + @Override + public float calculateFinalSuccessChance() { + // Success chance is 100% when all bits are satisfied, 0% otherwise. + if (areAllBitsSatisfied()) { + return 100.0f; + } else { + return 0.0f; + } + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getWaterTier() { + return 7; + } + + @Override + public long getBasePowerUsage() { + return TierEU.RECIPE_UHV; + } + + public boolean addControlHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchDegasifierControl) { + // Only allow a single control hatch, so fail structure check if there is already one + if (this.controlHatch == null) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + this.controlHatch = (MTEHatchDegasifierControl) aMetaTileEntity; + return true; + } + } + return false; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.casingCount = 0; + this.controlHatch = null; + if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; + if (casingCount < MIN_CASING) return false; + return super.checkMachine(aBaseMetaTileEntity, aStack); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + controlSignal = new ControlSignal(aNBT.getByte("controlSignal")); + outputMultiplier = aNBT.getFloat("outputMultiplier"); + NBTTagCompound fluidMap = aNBT.getCompoundTag("insertedFluidMap"); + for (String key : fluidMap.func_150296_c()) { + FluidStack fluid = FluidStack.loadFluidStackFromNBT(fluidMap.getCompoundTag(key)); + // Ignore if fluid failed to load, for example if the fluid ID was changed between versions + if (fluid == null) { + continue; + } + insertedStuffThisCycle.put(fluid.getFluid(), fluid); + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByte("controlSignal", controlSignal.getSignal()); + aNBT.setFloat("outputMultiplier", outputMultiplier); + NBTTagCompound fluidMap = new NBTTagCompound(); + for (FluidStack stack : insertedStuffThisCycle.values()) { + NBTTagCompound compound = new NBTTagCompound(); + stack.writeToNBT(compound); + fluidMap.setTag( + stack.getFluid() + .getName(), + compound); + } + aNBT.setTag("insertedFluidMap", fluidMap); + } + + private static String generateInfoStringForBit(int i, ControlBitStatus status) { + String base = "Bit " + (i + 1) + " status: "; + if (status.satisfied) { + return base + EnumChatFormatting.GREEN + "OK"; + } else { + return base + EnumChatFormatting.RED + "NOT OK"; + } + } + + @Override + public String[] getInfoData() { + ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); + info.add("Current control signal: " + EnumChatFormatting.YELLOW + controlSignal.toString()); + info.add("Current output multiplier: " + EnumChatFormatting.YELLOW + outputMultiplier); + for (FluidStack stack : insertedStuffThisCycle.values()) { + info.add( + "Fluid inserted this cycle: " + EnumChatFormatting.YELLOW + + stack.amount + + "L " + + stack.getLocalizedName()); + } + info.add(generateInfoStringForBit(0, isBit0Satisfied())); + info.add(generateInfoStringForBit(1, isBit1Satisfied())); + info.add(generateInfoStringForBit(2, isBit2Satisfied())); + info.add(generateInfoStringForBit(3, isBit3Satisfied())); + return info.toArray(new String[] {}); + } + + private enum SpecialHatchElement implements IHatchElement { + + ControlHatch(MTEPurificationUnitDegasser::addControlHatchToMachineList, MTEHatchDegasifierControl.class) { + + @Override + public long count(MTEPurificationUnitDegasser mte) { + return mte.controlHatch == null ? 0 : 1; + } + }; + + private final List> mteClasses; + private final IGTHatchAdder adder; + + @SafeVarargs + SpecialHatchElement(IGTHatchAdder adder, + Class... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + this.adder = adder; + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + public IGTHatchAdder adder() { + return adder; + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitFlocculation.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitFlocculation.java new file mode 100644 index 0000000000..36856fa11c --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitFlocculation.java @@ -0,0 +1,488 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static gregtech.api.enums.GTValues.AuthorNotAPenguin; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; + +public class MTEPurificationUnitFlocculation extends MTEPurificationUnitBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final String STRUCTURE_PIECE_MAIN_SURVIVAL = "main_survival"; + + private static final int STRUCTURE_X_OFFSET = 4; + private static final int STRUCTURE_Y_OFFSET = 3; + private static final int STRUCTURE_Z_OFFSET = 0; + + /** + * Amount of input fluid needed to boost the success chance by another level + */ + public static final long INPUT_CHEMICAL_PER_LEVEL = 100000; + /** + * Amount of waste water produced for each success chance level. This matches the amount of input fluid + * so it can be perfectly recycled into each other. + */ + private static final long WASTE_WATER_PER_LEVEL = INPUT_CHEMICAL_PER_LEVEL; + /** + * Additive boost to success chance for each level of input fluid supplied + */ + public static final float SUCCESS_PER_LEVEL = 10.0f; + /** + * Amount of ticks between each tick the unit will try to consume input fluid + */ + private static final int CONSUME_INTERVAL = 1 * SECONDS; + + /** + * Fluid that needs to be supplied to boost success chance + */ + private static final Materials INPUT_CHEMICAL = Materials.PolyAluminiumChloride; + /** + * Output fluid to be produced as waste. The intended behaviour is that this output fluid can be cycled + * semi-perfectly into the input fluid. + */ + private static final Materials OUTPUT_WASTE = Materials.FlocculationWasteLiquid; + + /** + * Total amount of input fluid consumed during this recipe cycle. + */ + private long inputFluidConsumed = 0; + + private static final String[][] structure = new String[][] + // spotless:off + { + { " ", " ", " BBBBBBB ", " BBB~BBB ", " BBBBBBB " }, + { " ", " ", " B B ", " BWWWWWB ", " BCCCCCB " }, + { " ", " ", " B B ", " GWWWWWG ", " BCAAACB " }, + { " ", " ", " B B ", " GWWWWWG ", " BCAAACB " }, + { " ", " ", " B B ", " GWWWWWG ", " BCAAACB " }, + { " ", " EE EE ", " BE EB ", " BEWWWEB ", " BCCCCCB " }, + { "D D", "DEE EED", "DBBBBBBBD", "DBBBBBBBD", "DBBBBBBBD" }, + { "DD DD", "DD DD", "DD DD", "DD DD", "DD DD" } + }; + // spotless:on + + private static final int MAIN_CASING_INDEX = getTextureIndex(GregTechAPI.sBlockCasings9, 6); + + private int casingCount = 0; + private static final int MIN_CASING = 56; + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, structure) + .addShape( + STRUCTURE_PIECE_MAIN_SURVIVAL, + Arrays.stream(structure) + .map( + sa -> Arrays.stream(sa) + .map(s -> s.replaceAll("W", " ")) + .toArray(String[]::new)) + .toArray(String[][]::new)) + // Filter machine casing + .addElement('A', ofBlock(GregTechAPI.sBlockCasings3, 11)) + .addElement( + 'B', + ofChain( + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeastList(t.getAllowedHatches()) + .casingIndex(MAIN_CASING_INDEX) + .dot(1) + .build()), + // Clean Flocculation Casing + onElementPass(t -> t.casingCount++, ofBlock(GregTechAPI.sBlockCasings9, 6)))) + // Reinforced Sterile Water Plant Casing + .addElement('C', ofBlock(GregTechAPI.sBlockCasings9, 5)) + // Sterile Water Plant Casing + .addElement('D', ofBlock(GregTechAPI.sBlockCasings9, 4)) + .addElement('E', ofFrame(Materials.Adamantium)) + .addElement('W', ofBlock(Blocks.water, 0)) + // Tinted industrial glass + .addElement('G', ofBlockAnyMeta(GregTechAPI.sBlockTintedGlass)) + .build(); + + List> getAllowedHatches() { + return ImmutableList.of(InputBus, InputHatch, OutputBus, OutputHatch); + } + + public MTEPurificationUnitFlocculation(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPurificationUnitFlocculation(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPurificationUnitFlocculation(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX) }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + hintsOnly, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + int built = survivialBuildPiece( + STRUCTURE_PIECE_MAIN_SURVIVAL, + stackSize, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET, + elementBudget, + env, + true); + if (built == -1) { + GTUtility.sendChatToPlayer( + env.getActor(), + EnumChatFormatting.GREEN + "Auto placing done ! Now go place the water yourself !"); + return 0; + } + return built; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + // Do not allow rotation when water would flow out + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); + } + + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + casingCount = 0; + if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; + + // At most two input hatches allowed + if (mInputHatches.size() > 2) { + return false; + } + + // At most two output hatches allowed + if (mOutputHatches.size() > 2) { + return false; + } + + if (casingCount < MIN_CASING) return false; + + return super.checkMachine(aBaseMetaTileEntity, aStack); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Purification Unit") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.BOLD + + "Water Tier: " + + EnumChatFormatting.WHITE + + GTUtility.formatNumbers(getWaterTier()) + + EnumChatFormatting.RESET) + .addInfo("Controller block for the Flocculation Purification Unit.") + .addInfo("Must be linked to a Purification Plant using a data stick to work.") + .addSeparator() + .addInfo( + "Supply with " + EnumChatFormatting.WHITE + + INPUT_CHEMICAL.mLocalizedName + + EnumChatFormatting.GRAY + + " to operate.") + .addInfo( + "Outputs " + EnumChatFormatting.WHITE + + OUTPUT_WASTE.mLocalizedName + + EnumChatFormatting.GRAY + + " that can be recycled.") + .addSeparator() + .addInfo( + "During operation, will consume ALL " + EnumChatFormatting.WHITE + + INPUT_CHEMICAL.mLocalizedName + + EnumChatFormatting.GRAY + + " in the input hatch.") + .addInfo( + "At the end of the recipe, for every " + EnumChatFormatting.RED + + INPUT_CHEMICAL_PER_LEVEL + + "L " + + EnumChatFormatting.GRAY + + "of " + + EnumChatFormatting.WHITE + + INPUT_CHEMICAL.mLocalizedName + + EnumChatFormatting.GRAY + + " consumed") + .addInfo( + "gain an additive " + EnumChatFormatting.RED + + SUCCESS_PER_LEVEL + + "%" + + EnumChatFormatting.GRAY + + " increase to success. If total fluid supplied is not") + .addInfo( + "a multiple of " + EnumChatFormatting.RED + + INPUT_CHEMICAL_PER_LEVEL + + "L" + + EnumChatFormatting.GRAY + + ", a penalty to success is applied using the following formula:") + .addInfo(EnumChatFormatting.GREEN + "Success = Success * 2^(-10 * Overflow ratio)") + .addSeparator() + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "Step three in purifying water is to remove microscopic contaminants such as dusts, microplastics and other") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "pollutants using a clarifying agent (In this case, polyaluminium chloride) to cause flocculation - the process") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "of aggregating dispersed suspended particles from a solution into larger clumps for further filtration.") + .addInfo(AuthorNotAPenguin) + .beginStructureBlock(7, 4, 7, false) + .addCasingInfoRangeColored( + "Slick Sterile Flocculation Casing", + EnumChatFormatting.GRAY, + MIN_CASING, + 65, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Sterile Water Plant Casing", + EnumChatFormatting.GRAY, + 16, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Reinforced Sterile Water Plant Casing", + EnumChatFormatting.GRAY, + 30, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Tinted Industrial Glass", + EnumChatFormatting.GRAY, + 6, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Adamantium Frame Box", + EnumChatFormatting.GRAY, + 12, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Filter Machine Casing", + EnumChatFormatting.GRAY, + 9, + EnumChatFormatting.GOLD, + false) + .addController("Front center") + .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) + .addInputHatch( + EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "-" + EnumChatFormatting.GOLD + "2", + 1) + .addOutputHatch( + EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "-" + EnumChatFormatting.GOLD + "2", + 1) + .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void startCycle(int cycleTime, int progressTime) { + super.startCycle(cycleTime, progressTime); + // Reset amount of fluid consumed in this cycle. + this.inputFluidConsumed = 0; + } + + @Override + public void endCycle() { + super.endCycle(); + // Output waste water proportional to amount of boost levels. We do this even when the recipe fails, so you can + // always fully recycle. + // NOTE: If this process ever PRODUCES excess chlorine, there is a recipe bug. + int levels = calculateBoostLevels(); + long amount = levels * WASTE_WATER_PER_LEVEL; + this.addFluidOutputs(new FluidStack[] { OUTPUT_WASTE.getFluid(amount) }); + // Make sure to reset consumed fluid (again) + this.inputFluidConsumed = 0; + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.runMachine(aBaseMetaTileEntity, aTick); + + // Consume all input fluid periodically, only when running + if (aTick % CONSUME_INTERVAL == 0 && mMaxProgresstime > 0) { + // Iterate over all fluids stored + List fluids = this.getStoredFluids(); + for (FluidStack fluid : fluids) { + // If this FluidStack is the input chemical, consume it all + if (fluid.getFluid() + .equals(INPUT_CHEMICAL.mFluid)) { + this.inputFluidConsumed += fluid.amount; + if (!this.depleteInput(fluid)) { + stopMachine(ShutDownReasonRegistry.outOfFluid(fluid)); + } + } + } + } + } + + private int calculateBoostLevels() { + return (int) Math.floor((float) this.inputFluidConsumed / (float) INPUT_CHEMICAL_PER_LEVEL); + } + + @Override + public float calculateFinalSuccessChance() { + // Amount of times the required amount of input fluid was fully inserted + int levels = calculateBoostLevels(); + // Target amount of fluid needed to reach this amount of boost levels + long targetAmount = levels * INPUT_CHEMICAL_PER_LEVEL; + // Amount of excess fluid inserted. + long overflow = inputFluidConsumed - targetAmount; + // Base boost chance, before applying overflow penalty + float boost = SUCCESS_PER_LEVEL * levels; + // If there was any overflow, apply an exponential penalty multiplier based on percentage overflow + if (overflow > 0) { + float overflowPct = (float) overflow / INPUT_CHEMICAL_PER_LEVEL; + float penaltyMultiplier = (float) Math.pow(2.0f, overflowPct * -10.0); + return Math.max(0.0f, (this.currentRecipeChance + boost) * penaltyMultiplier); + } else { + return Math.min(100.0f, this.currentRecipeChance + boost); + } + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getWaterTier() { + return 3; + } + + @Override + public long getBasePowerUsage() { + return TierEU.RECIPE_ZPM; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.purificationFlocculationRecipes; + } + + @Override + public String[] getInfoData() { + ArrayList infoData = new ArrayList<>(Arrays.asList(super.getInfoData())); + infoData.add( + INPUT_CHEMICAL.mLocalizedName + " consumed this cycle: " + + EnumChatFormatting.RED + + inputFluidConsumed + + "L"); + return infoData.toArray(new String[] {}); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setLong("mInputFluidConsumed", inputFluidConsumed); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.inputFluidConsumed = aNBT.getLong("mInputFluidConsumed"); + } + + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_COAGULATION_LOOP.resourceLocation; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitOzonation.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitOzonation.java new file mode 100644 index 0000000000..f1d3b56fe8 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitOzonation.java @@ -0,0 +1,298 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static gregtech.api.enums.GTValues.AuthorNotAPenguin; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEPurificationUnitOzonation extends MTEPurificationUnitBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final String STRUCTURE_PIECE_MAIN_SURVIVAL = "main_survival"; + + private static final String[][] structure = new String[][] { + // spotless:off + { " ", " ", " A ", " A ", " AAA ", " AAA ", " A A ", " A A ", " A A ", " A~A " }, + { " A ", " A ", " A A ", " A A ", "BBBBA A", "BDDBA A", "BBBBA D A", "E A D A", "E A D A", "E AAAAA" }, + { " AAA ", " A A ", " A A", " A A", "BDDBA A", "O BA A", "BBBBA A", " C A A", " CCA A", " AAAAA" }, + { " A ", " A ", " A A ", " A A ", "BBBBA A", "BDDBA A", "BBBBA A", "E A A", "E A A", "E AAAAA" }, + { " ", " ", " A ", " A ", " AAA ", " AAA ", " AAA ", " AAA ", " AAA ", " AAA " } }; + // spotless:on + + private static final int MAIN_CASING_INDEX = getTextureIndex(GregTechAPI.sBlockCasings9, 10); + + private static final int OFFSET_X = 6; + private static final int OFFSET_Y = 9; + private static final int OFFSET_Z = 0; + + /** + * If the player inserts more ozone gas than this amount, the multi will explode. + */ + public static final int MAX_OZONE_GAS_FOR_EXPLOSION = 1000 * (int) Math.pow(2, 10); + + private int casingCount = 0; + private static final int MIN_CASING = 96; + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, structure) + // Inert Filtration Casing + .addElement( + 'A', + ofChain( + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeastList(ImmutableList.of(InputHatch, OutputHatch, OutputBus)) + .casingIndex(getTextureIndex(GregTechAPI.sBlockCasings9, 10)) + .dot(1) + .build()), + onElementPass(t -> t.casingCount++, ofBlock(GregTechAPI.sBlockCasings9, 10)))) + // High Pressure Resistant Casing (possibly placeholder name) + .addElement('B', ofBlock(GregTechAPI.sBlockCasings9, 9)) + // PTFE pipe casing + .addElement('C', ofBlock(GregTechAPI.sBlockCasings8, 1)) + // Any tinted industrial glass + .addElement('D', ofBlockAnyMeta(GregTechAPI.sBlockTintedGlass)) + .addElement('E', ofFrame(Materials.TungstenSteel)) + // Ozone input hatch + .addElement( + 'O', + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeast(InputHatch) + .casingIndex(getTextureIndex(GregTechAPI.sBlockCasings9, 9)) + .dot(2) + .buildAndChain(ofBlock(GregTechAPI.sBlockCasings9, 9)))) + .build(); + + public MTEPurificationUnitOzonation(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + protected MTEPurificationUnitOzonation(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPurificationUnitOzonation(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(MAIN_CASING_INDEX) }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, OFFSET_X, OFFSET_Y, OFFSET_Z); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + OFFSET_X, + OFFSET_Y, + OFFSET_Z, + elementBudget, + env, + true); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Purification Unit") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.BOLD + + "Water Tier: " + + EnumChatFormatting.WHITE + + GTUtility.formatNumbers(getWaterTier()) + + EnumChatFormatting.RESET) + .addInfo("Controller block for the Ozonation Purification Unit.") + .addInfo("Must be linked to a Purification Plant using a data stick to work.") + .addSeparator() + .addInfo( + "Will explode if the input hatch contains more than " + EnumChatFormatting.RED + + MAX_OZONE_GAS_FOR_EXPLOSION + + "L " + + EnumChatFormatting.WHITE + + "Ozone Gas.") + .addInfo( + "Receives a " + EnumChatFormatting.RED + + "20%" + + EnumChatFormatting.GRAY + + " bonus to success chance for every doubling of " + + EnumChatFormatting.WHITE + + "Ozone Gas.") + .addSeparator() + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "The second step in water purification is ozonation, which involves injecting large quantities of small") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "bubbles of highly reactive ozone gas into the water. This removes trace element contaminants like") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "sulfur, iron and manganese, creating insoluble oxide compounds which are then filtered out.") + .addInfo(AuthorNotAPenguin) + .beginStructureBlock(9, 10, 5, false) + .addCasingInfoRangeColored( + "Inert Filtration Casing", + EnumChatFormatting.GRAY, + MIN_CASING, + 102, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Reactive Gas Containment Casing", + EnumChatFormatting.GRAY, + 27, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Any Tinted Industrial Glass", + EnumChatFormatting.GRAY, + 9, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Tungstensteel Frame Box", + EnumChatFormatting.GRAY, + 6, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored("PTFE Pipe Casing", EnumChatFormatting.GRAY, 3, EnumChatFormatting.GOLD, false) + .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) + .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) + .addOutputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + "+", 1) + .addOtherStructurePart("Input Hatch (Ozone)", EnumChatFormatting.GOLD + "1", 2) + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.purificationOzonationRecipes; + } + + @NotNull + @Override + public CheckRecipeResult checkProcessing() { + // First do recipe checking logic + CheckRecipeResult result = super.checkProcessing(); + if (!result.wasSuccessful()) return result; + // Look for ozone, blow up if more than max allowed + for (FluidStack fluid : this.storedFluids) { + if (fluid.isFluidEqual(Materials.Ozone.getGas(1L))) { + if (fluid.amount > MAX_OZONE_GAS_FOR_EXPLOSION) { + // TODO: Fix crash in hatch + // this.explodeMultiblock(); + } + } + } + return result; + } + + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_OZONATION_LOOP.resourceLocation; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getWaterTier() { + return 2; + } + + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + casingCount = 0; + if (!checkPiece(STRUCTURE_PIECE_MAIN, OFFSET_X, OFFSET_Y, OFFSET_Z)) return false; + if (casingCount < MIN_CASING) return false; + return super.checkMachine(aBaseMetaTileEntity, aStack); + } + + @Override + public long getBasePowerUsage() { + return TierEU.RECIPE_LuV; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitPhAdjustment.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitPhAdjustment.java new file mode 100644 index 0000000000..803d9b684e --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitPhAdjustment.java @@ -0,0 +1,608 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static gregtech.api.enums.GTValues.AuthorNotAPenguin; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.SimpleShutDownReason; + +public class MTEPurificationUnitPhAdjustment extends MTEPurificationUnitBase + implements ISurvivalConstructable { + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final int STRUCTURE_X_OFFSET = 7; + private static final int STRUCTURE_Y_OFFSET = 4; + private static final int STRUCTURE_Z_OFFSET = 1; + + private static final String[][] structure = new String[][] { + // spotless:off + { "E E E E", "EAAAE EAAAE", "EAGAE EAHAE", "EAGAE EAHAE", "EAGAE EAHAE", "EAAAE EAAAE" }, + { " AAA AAA ", "A A A A", "A A A A", "A A A A", "A ABB~BBA A", "AAAAA AAAAA" }, + { " AXA AYA ", "A A A A", "G A A H", "G ABBBBBA H", "G H", "AAAAABRBRBAAAAA" }, + { " AAA AAA ", "A A A A", "A A A A", "A A A A", "A AIIIIIA A", "AAAAA AAAAA" }, + { "E E E E", "EAAAE EAAAE", "EAGAE EAHAE", "EAGAE EAHAE", "EAGAE EAHAE", "EAAAE EAAAE" } }; + // spotless:on + + private static final int CASING_INDEX_MIDDLE = getTextureIndex(GregTechAPI.sBlockCasings9, 7); + private static final int CASING_INDEX_TOWER = getTextureIndex(GregTechAPI.sBlockCasings9, 8); + + /** + * The current pH value of the water inside the multiblock + */ + private float currentpHValue = 0.0f; + + /** + * The multiblock will try to consume catalyst every CONSUME_INTERVAL ticks. + */ + private static final int CONSUME_INTERVAL = 1 * SECONDS; + + /** + * Maximum deviation the initial pH value can have away from the neutral value. + */ + private static final float INITIAL_PH_DEVIATION = 2.5f; + + /** + * pH value of entirely pH neutral water. + */ + private static final float PH_NEUTRAL_VALUE = 7.0f; + + /** + * Maximum deviation from the neutral value that is allowed for the recipe to succeed. + */ + private static final float PH_MAX_DEVIATION = 0.05f; + + /** + * Change in pH value for each piece of alkaline dust supplied. + */ + public static final float PH_PER_ALKALINE_DUST = 0.01f; + + /** + * Change in pH value for every 10L of acid supplied. + */ + public static final float PH_PER_10_ACID_LITER = -0.01f; + + /** + * Alkaline catalyst material + */ + public static final Materials ALKALINE_MATERIAL = Materials.SodiumHydroxide; + + /** + * Acidic catalyst material + */ + public static final Materials ACIDIC_MATERIAL = Materials.HydrochloricAcid; + + /** + * The input hatch for the acidic material + */ + private MTEHatchInput acidInputHatch; + /** + * The input bus for the alkaline material + */ + private MTEHatchInputBus alkalineInputBus; + + /** + * List of all placed sensor hatches in the multi, so we can update them with the proper pH value when it changes. + */ + private final ArrayList sensorHatches = new ArrayList<>(); + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, structure) + // Extreme Corrosion Resistant Casing + .addElement('A', ofBlock(GregTechAPI.sBlockCasings9, 8)) + // Naquadah Reinforced Water Plant Casing + .addElement('B', ofBlock(GregTechAPI.sBlockCasings9, 7)) + .addElement('E', ofFrame(Materials.NaquadahAlloy)) + // pH Resistant Glass + .addElement('G', ofBlock(GregTechAPI.sBlockGlass1, 0)) + .addElement('H', ofBlock(GregTechAPI.sBlockGlass1, 0)) + // Regular I/O hatches + .addElement( + 'I', + ofChain( + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeastList(t.getAllowedHatches()) + .dot(1) + .casingIndex(CASING_INDEX_MIDDLE) + .build()), + // Naquadah Reinforced Water Plant Casing + ofBlock(GregTechAPI.sBlockCasings9, 7))) + .addElement( + 'R', + ofChain( + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeast(SpecialHatchElement.PhSensor) + .dot(2) + .cacheHint(() -> "pH Sensor Hatch") + .casingIndex(CASING_INDEX_MIDDLE) + .build()), + // Naquadah Reinforced Water Plant Casing + ofBlock(GregTechAPI.sBlockCasings9, 7))) + // Special I/O hatches + .addElement( + 'X', + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeast(InputBus) + .dot(3) + .adder(MTEPurificationUnitPhAdjustment::addAlkalineBusToMachineList) + .cacheHint(() -> "Input Bus (" + ALKALINE_MATERIAL.mLocalizedName + ")") + .casingIndex(CASING_INDEX_TOWER) + .allowOnly(ForgeDirection.UP) + .build())) + .addElement( + 'Y', + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeast(InputHatch) + .dot(4) + .adder(MTEPurificationUnitPhAdjustment::addAcidHatchToMachineList) + .cacheHint(() -> "Input Hatch (" + ACIDIC_MATERIAL.mLocalizedName + ")") + .casingIndex(CASING_INDEX_TOWER) + .allowOnly(ForgeDirection.UP) + .build())) + .build(); + + private List> getAllowedHatches() { + return ImmutableList.of(InputHatch, OutputHatch); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MIDDLE), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MIDDLE), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MIDDLE) }; + } + + public MTEPurificationUnitPhAdjustment(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPurificationUnitPhAdjustment(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPurificationUnitPhAdjustment(this.mName); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + hintsOnly, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET, + elementBudget, + env, + true); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.purificationPhAdjustmentRecipes; + } + + public boolean addAcidHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = null; + acidInputHatch = (MTEHatchInput) aMetaTileEntity; + return true; + } + return false; + } + + public boolean addAlkalineBusToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInputBus) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInputBus) aMetaTileEntity).mRecipeMap = null; + alkalineInputBus = (MTEHatchInputBus) aMetaTileEntity; + return true; + } + return false; + } + + public boolean addSensorHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchPHSensor) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return this.sensorHatches.add((MTEHatchPHSensor) aMetaTileEntity); + } + return false; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Purification Unit") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.BOLD + + "Water Tier: " + + EnumChatFormatting.WHITE + + GTUtility.formatNumbers(getWaterTier()) + + EnumChatFormatting.RESET) + .addInfo("Controller block for the pH Neutralization Purification Unit.") + .addInfo("Must be linked to a Purification Plant using a data stick to work.") + .addSeparator() + .addInfo( + "Initial pH value every cycle varies from " + EnumChatFormatting.RED + + (PH_NEUTRAL_VALUE - INITIAL_PH_DEVIATION) + + EnumChatFormatting.GRAY + + " - " + + EnumChatFormatting.RED + + (PH_NEUTRAL_VALUE + INITIAL_PH_DEVIATION) + + " pH" + + EnumChatFormatting.GRAY + + ".") + .addInfo( + "If the pH value is within " + EnumChatFormatting.RED + + PH_MAX_DEVIATION + + " pH " + + EnumChatFormatting.GRAY + + "of 7.0 pH at the end of the cycle, the recipe always succeeds.") + .addInfo("Otherwise, the recipe always fails.") + .addInfo("Use a pH Sensor Hatch to read the current pH value.") + .addInfo("For safety, the machine will shut down if the pH goes below 0 or exceeds 14.") + .addSeparator() + .addInfo( + "Every " + EnumChatFormatting.RED + + CONSUME_INTERVAL + + EnumChatFormatting.GRAY + + " ticks, consumes ALL " + + EnumChatFormatting.WHITE + + ALKALINE_MATERIAL.mLocalizedName + + EnumChatFormatting.GRAY + + " and " + + EnumChatFormatting.WHITE + + ACIDIC_MATERIAL.mLocalizedName + + EnumChatFormatting.GRAY + + " in the special hatches.") + .addInfo( + EnumChatFormatting.RED + "Raises " + + EnumChatFormatting.GRAY + + "the pH value by " + + EnumChatFormatting.RED + + PH_PER_ALKALINE_DUST + + " pH " + + EnumChatFormatting.GRAY + + "per piece of " + + EnumChatFormatting.WHITE + + ALKALINE_MATERIAL.getDust(1) + .getDisplayName() + + EnumChatFormatting.GRAY + + ".") + .addInfo( + EnumChatFormatting.RED + "Lowers " + + EnumChatFormatting.GRAY + + "the pH value by " + + EnumChatFormatting.RED + + -PH_PER_10_ACID_LITER + + " pH " + + EnumChatFormatting.GRAY + + "per " + + EnumChatFormatting.RED + + "10L " + + EnumChatFormatting.GRAY + + "of " + + EnumChatFormatting.WHITE + + ACIDIC_MATERIAL.getFluid(1L) + .getLocalizedName() + + EnumChatFormatting.GRAY + + ".") + .addSeparator() + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "The fourth step of water purification is to neutralize the solution and bring its pH to exactly 7, rendering") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "the solution inert with no hydrogen ion activity beyond water’s natural amphiproticity. Acids and bases from soils") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "and geology cause natural alkalinity variations in water which can cause corrosive reactions with sensitive") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "materials. This necessitates the use of the corresponding neutralizing agents to pH balance the water.") + .addInfo(AuthorNotAPenguin) + .beginStructureBlock(7, 4, 7, false) + .addCasingInfoExactlyColored( + "Stabilized Naquadah Water Plant Casing", + EnumChatFormatting.GRAY, + 15, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Chemical Grade Glass", + EnumChatFormatting.GRAY, + 18, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Naquadah Alloy Frame Box", + EnumChatFormatting.GRAY, + 48, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Inert Neutralization Water Plant Casing", + EnumChatFormatting.GRAY, + 67 * 2, + EnumChatFormatting.GOLD, + false) + .addController("Front center") + .addOtherStructurePart("Input Hatch (Water)", EnumChatFormatting.GOLD + "1+", 1) + .addOtherStructurePart("Output Hatch", EnumChatFormatting.GOLD + "1", 1) + .addOtherStructurePart("pH Sensor Hatch", EnumChatFormatting.GOLD + "2", 2) + .addOtherStructurePart("Input Bus (Sodium Hydroxide)", EnumChatFormatting.GOLD + "1", 3) + .addOtherStructurePart("Input Hatch (Hydrochloric Acid)", EnumChatFormatting.GOLD + "1", 4) + .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void startCycle(int cycleTime, int progressTime) { + super.startCycle(cycleTime, progressTime); + // Randomize initial pH value + ThreadLocalRandom random = ThreadLocalRandom.current(); + // Generate random integer in [-RNG_PRECISION, RNG_PRECISION] + final int RNG_PRECISION = 1000; + int rng = random.nextInt(-RNG_PRECISION, RNG_PRECISION); + // Remap to [-1.0, 1.0] and then to [-INITIAL_PH_DEVIATION, INITIAL_PH_DEVIATION] + float deviation = ((float) rng / RNG_PRECISION) * INITIAL_PH_DEVIATION; + // Round to 2 digits + this.currentpHValue = Math.round((PH_NEUTRAL_VALUE + deviation) * 100.0f) / 100.0f; + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.runMachine(aBaseMetaTileEntity, aTick); + // Eat all acid and alkaline material every second + if (mMaxProgresstime > 0 && aTick % CONSUME_INTERVAL == 0) { + // Important that we drain backwards, since draining stacks can auto-sort the bus + long totalAlkalineDrained = 0; + for (int i = alkalineInputBus.getSizeInventory() - 1; i >= 0; --i) { + ItemStack stack = alkalineInputBus.getStackInSlot(i); + // If this ItemStack is the alkaline material, drain it entirely and record the amount drained + if (stack != null && stack.isItemEqual(ALKALINE_MATERIAL.getDust(1))) { + totalAlkalineDrained += stack.stackSize; + alkalineInputBus.decrStackSize(i, stack.stackSize); + } + } + + // Now do fluid, this is simpler since we only need to bother with one slot + FluidStack stack = acidInputHatch.getDrainableStack(); + int numMultiples = 0; + if (stack != null && stack.isFluidEqual(ACIDIC_MATERIAL.getFluid(1))) { + int acidAvailable = stack.amount; + // We only care about multiples of 10, but we still drain all. + numMultiples = Math.floorDiv(acidAvailable, 10); + acidInputHatch.drain(acidAvailable, true); + } else { + // Little easier egg: Fluoroantimonic acid has a pH value of -31, it's an acid so strong it will + // instantly shatter the glass in the structure. + + Fluid acid = FluidRegistry.getFluid("fluoroantimonic acid"); + if (stack != null && stack.getFluid() + .equals(acid)) { + // TODO: Actually break the glass and trigger achievement lol + } + + } + + // Adjust pH with to new value + this.currentpHValue = this.currentpHValue + totalAlkalineDrained * PH_PER_ALKALINE_DUST + + numMultiples * PH_PER_10_ACID_LITER; + + // Clamp pH to sensible values + this.currentpHValue = Math.min(Math.max(this.currentpHValue, 0.0f), 14.0f); + + // Round to 2 decimals + this.currentpHValue = Math.round(this.currentpHValue * 100.0f) / 100.0f; + + // If pH is 0 or 14, stop the machine + if (Math.abs(this.currentpHValue) < 0.001 || Math.abs(this.currentpHValue - 14.0f) < 0.001) { + stopMachine(SimpleShutDownReason.ofNormal("critical_ph_value")); + } + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + super.onPostTick(aBaseMetaTileEntity, aTimer); + // Update sensor hatch + for (MTEHatchPHSensor hatch : sensorHatches) { + hatch.updateRedstoneOutput(this.currentpHValue); + } + } + + @Override + public float calculateFinalSuccessChance() { + // Success chance is 100% when inside target range, 0% otherwise + float distance = Math.abs(this.currentpHValue - PH_NEUTRAL_VALUE); + if (distance <= PH_MAX_DEVIATION) { + return 100.0f; + } else { + return 0.0f; + } + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getWaterTier() { + return 4; + } + + @Override + public long getBasePowerUsage() { + return TierEU.RECIPE_ZPM; + } + + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; + // Do not form without positioned hatches + if (acidInputHatch == null || alkalineInputBus == null) return false; + return super.checkMachine(aBaseMetaTileEntity, aStack); + } + + @Override + public String[] getInfoData() { + ArrayList infoData = new ArrayList<>(Arrays.asList(super.getInfoData())); + infoData.add("Current pH Value: " + EnumChatFormatting.YELLOW + currentpHValue + " pH"); + return infoData.toArray(new String[] {}); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setFloat("mCurrentpH", this.currentpHValue); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.currentpHValue = aNBT.getFloat("mCurrentpH"); + } + + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_PURIFICATION_PH_LOOP.resourceLocation; + } + + private enum SpecialHatchElement implements IHatchElement { + + PhSensor(MTEPurificationUnitPhAdjustment::addSensorHatchToMachineList, MTEHatchPHSensor.class) { + + @Override + public long count(MTEPurificationUnitPhAdjustment gtMetaTileEntityPurificationUnitPhAdjustment) { + return gtMetaTileEntityPurificationUnitPhAdjustment.sensorHatches.size(); + } + }; + + private final List> mteClasses; + private final IGTHatchAdder adder; + + @SafeVarargs + SpecialHatchElement(IGTHatchAdder adder, + Class... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + this.adder = adder; + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + public IGTHatchAdder adder() { + return adder; + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitPlasmaHeater.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitPlasmaHeater.java new file mode 100644 index 0000000000..f59554171f --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitPlasmaHeater.java @@ -0,0 +1,565 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static gregtech.api.enums.GTValues.AuthorNotAPenguin; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; +import static gregtech.api.recipe.RecipeMaps.purificationPlasmaHeatingRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Mods; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEPurificationUnitPlasmaHeater extends MTEPurificationUnitBase + implements ISurvivalConstructable { + + private static final int CASING_INDEX_HEATER = getTextureIndex(GregTechAPI.sBlockCasings9, 11); + private static final int CASING_INDEX_TOWER = getTextureIndex(GregTechAPI.sBlockCasings9, 5); + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final int STRUCTURE_X_OFFSET = 2; + private static final int STRUCTURE_Y_OFFSET = 14; + private static final int STRUCTURE_Z_OFFSET = 5; + + /** + * Fluid is consumed every CONSUME_INTERVAL ticks + */ + private static final long CONSUME_INTERVAL = 1 * SECONDS; + + /** + * Current internal temperature of the multiblock + */ + private long currentTemperature = 0; + /** + * Amount of successful heating cycles completed + */ + private int cyclesCompleted = 0; + /** + * Whether this recipe is ruined due to high temperature + */ + private boolean ruinedCycle = false; + + private enum CycleState { + // Was previously at 0K, currently waiting to heat to 10000K + Heating, + // Was previously at 10000K, currently waiting to cool down to 0K + Cooling + } + + private CycleState state = CycleState.Heating; + + // A cycle is 30s at shortest, a purification plant cycle is 120s. 33% chance per heating cycle + // will give you plenty of room for delay and still get to 99% chance. + public static final long SUCCESS_PER_CYCLE = 33; + + // Consumption rates in liters/second + public static final long MAX_PLASMA_PER_SEC = 10; + public static final long MAX_COOLANT_PER_SEC = 100; + // Change in temperature per consumed liter of plasma + public static final long PLASMA_TEMP_PER_LITER = 100; + // Change in temperature per consumed liter of coolant + public static final long COOLANT_TEMP_PER_LITER = -5; + // Temperature at which the batch is ruined + public static final long MAX_TEMP = 12500; + // Point at which the heating point of the cycle is reached + public static final long HEATING_POINT = 10000; + + private static final Materials plasmaMaterial = Materials.Helium; + private static final Materials coolantMaterial = Materials.SuperCoolant; + + private MTEHatchInput plasmaInputHatch; + private MTEHatchInput coolantInputHatch; + + private static final String[][] structure = new String[][] { + // spotless:off + { " DDDDDDD ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " DDDDD ", " DDDDD ", " DDKDD " }, + { " DD DD ", " DDDDDDD ", " DDDDD ", " ", " ", " ", " ", " ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DD DD ", " DD DD ", " DDDDDDDDD " }, + { " D D ", " DDD DDD ", " DDDDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " D D ", " D D ", " DDDDDDDDDDD " }, + { " D D ", " D DD ", " DD D ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " DDDDDDDDDDDDD " }, + { " D D", " DD DD ", " DD D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " DDDDDDDDDDDDD " }, + { " D D", " D D ", " DD D ", " D D ", " D D ", "GBBBG D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D", "G G D D", "GB~BG DDDDDDDDDDDDDDD" }, + { " D D", " D D ", " DD D ", " D D ", " BBB D D ", "BBBBB D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D", " EEEBBBBD D", "BAAAB DDDDDDDDDDDDDDD" }, + { " D D", " D D ", " DD D ", " D D ", " BBB D D ", "BBBBB D D ", " EFE D D ", " EFE D D ", " EFE D D ", " EFE D D ", " EFE D D ", " EFE D D ", " EFEBBBBD D", " EFE D D", "PAAABBBBDDDDDDDDDDDDDDD" }, + { " D D", " D D ", " DD D ", " D D ", " BBB D D ", "BBBBB D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D ", " EEE D D", " EEEBBBBD D", "BAAAB DDDDDDDDDDDDDDD" }, + { " D D", " D D ", " DD D ", " D D ", " D D ", "GBBBG D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D ", "G G D D", "G G D D", "GBBBG DDDDDDDDDDDDDDD" }, + { " D D", " D D ", " D D ", " D DD ", " D DD ", " D DD ", " D DD ", " D DD ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " DDDDDDDDDDDDD " }, + { " D DD", " D D ", " D D ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " D D ", " D D ", " D D ", " D D ", " D D ", " D D ", " DDDDDDDDDDDDD " }, + { " D D ", " DD DD ", " D D ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DD DD ", " DD DD ", " DD DD ", " DD DD ", " D D ", " D D ", " DDDDDDDDDDD " }, + { " DD DD ", " DDDDDDD ", " DDDDD ", " ", " ", " ", " ", " ", " DDDDD ", " DDDDD ", " DDDDD ", " DDDDD ", " DD DD ", " DD DD ", " DDDDDDDDD " }, + { " DDDDDDD ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " DDDDD ", " DDDDD ", " DDDDD " } }; + // spotless:on + + private int casingCount = 0; + private static final int MIN_CASING = 50; + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, structure) + // Superconducting coil block + .addElement('A', ofBlock(GregTechAPI.sBlockCasings1, 15)) + // Plasma Heating Casing + .addElement( + 'B', + ofChain( + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeastList(t.getAllowedHatches()) + .dot(1) + .casingIndex(CASING_INDEX_HEATER) + .build()), + onElementPass(t -> t.casingCount++, ofBlock(GregTechAPI.sBlockCasings9, 11)))) + // Reinforced Sterile Water Plant Casing + .addElement('D', ofBlock(GregTechAPI.sBlockCasings9, 5)) + // Any Tinted Glass + .addElement('E', ofBlockAnyMeta(GregTechAPI.sBlockTintedGlass, 0)) + // Neonite, with fallback to air + .addElement('F', lazy(t -> { + if (Mods.Chisel.isModLoaded()) { + Block neonite = GameRegistry.findBlock(Mods.Chisel.ID, "neonite"); + return ofBlockAnyMeta(neonite, 7); + } else { + return ofBlockAnyMeta(Blocks.air); + } + })) + // Superconductor Base ZPM frame box + .addElement('G', ofFrame(Materials.Tetranaquadahdiindiumhexaplatiumosminid)) + // Coolant input hatch + .addElement( + 'K', + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeast(InputHatch) + .dot(2) + .adder(MTEPurificationUnitPlasmaHeater::addCoolantHatchToMachineList) + .cacheHint(() -> "Input Hatch (Coolant)") + .casingIndex(CASING_INDEX_TOWER) + .buildAndChain(ofBlock(GregTechAPI.sBlockCasings9, 5)))) + // Plasma input hatch + .addElement( + 'P', + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeast(InputHatch) + .dot(3) + .adder(MTEPurificationUnitPlasmaHeater::addPlasmaHatchToMachineList) + .cacheHint(() -> "Input Hatch (Plasma)") + .casingIndex(CASING_INDEX_HEATER) + .buildAndChain(ofBlock(GregTechAPI.sBlockCasings9, 11)))) + .build(); + + private List> getAllowedHatches() { + return ImmutableList.of(InputHatch, OutputHatch); + } + + public MTEPurificationUnitPlasmaHeater(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPurificationUnitPlasmaHeater(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPurificationUnitPlasmaHeater(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean active, boolean redstoneLevel) { + if (side == facing) { + if (active) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_HEATER), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_HEATER), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_HEATER) }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + hintsOnly, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET, + elementBudget, + env, + true); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public RecipeMap getRecipeMap() { + return purificationPlasmaHeatingRecipes; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Purification Unit") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.BOLD + + "Water Tier: " + + EnumChatFormatting.WHITE + + GTUtility.formatNumbers(getWaterTier()) + + EnumChatFormatting.RESET) + .addInfo("Controller block for the Extreme Temperature Fluctuation Purification Unit.") + .addInfo("Must be linked to a Purification Plant using a data stick to work.") + .addSeparator() + .addInfo( + "Complete heating cycles by first heating the water to " + EnumChatFormatting.RED + + HEATING_POINT + + "K" + + EnumChatFormatting.GRAY + + ",") + .addInfo( + "and then cooling it back down to " + EnumChatFormatting.RED + "0K" + EnumChatFormatting.GRAY + ".") + .addInfo( + "Initial temperature is reset to " + EnumChatFormatting.RED + + "0K" + + EnumChatFormatting.GRAY + + " on recipe start.") + .addInfo( + // TODO: Refer to heating cycles in another way to avoid confusion + "Each completed heating cycle boosts success chance by " + EnumChatFormatting.RED + + SUCCESS_PER_CYCLE + + "%.") + .addInfo( + "If the temperature ever reaches " + EnumChatFormatting.RED + + MAX_TEMP + + "K" + + EnumChatFormatting.GRAY + + " the recipe will fail and output steam.") + .addSeparator() + .addInfo( + "Consumes up to " + EnumChatFormatting.RED + + MAX_PLASMA_PER_SEC + + "L/s " + + EnumChatFormatting.WHITE + + plasmaMaterial.getPlasma(1) + .getLocalizedName() + + EnumChatFormatting.GRAY + + " and up to " + + EnumChatFormatting.RED + + MAX_COOLANT_PER_SEC + + "L/s " + + EnumChatFormatting.WHITE + + coolantMaterial.getFluid(1) + .getLocalizedName()) + .addInfo( + EnumChatFormatting.RED + "Raises " + + EnumChatFormatting.GRAY + + "the temperature by " + + EnumChatFormatting.RED + + PLASMA_TEMP_PER_LITER + + "K" + + EnumChatFormatting.GRAY + + " per liter of plasma consumed.") + .addInfo( + EnumChatFormatting.RED + "Lowers " + + EnumChatFormatting.GRAY + + "the temperature by " + + EnumChatFormatting.RED + + -COOLANT_TEMP_PER_LITER + + "K" + + EnumChatFormatting.GRAY + + " per liter of coolant consumed.") + .addSeparator() + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "Step five of water purification is to evaporate complex organic polymers and extremophile organisms") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "that might be resistant to simple acids, clarifying agents, and filters. Using an ultra high") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "pressure chamber in combination with extreme temperature fluctuations allows the water to remain") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "supercritical while evaporating any remaining contaminants, ready for filtration.") + .addInfo(AuthorNotAPenguin) + .beginStructureBlock(23, 15, 15, false) + .addCasingInfoExactlyColored( + "Reinforced Sterile Water Plant Casing", + EnumChatFormatting.GRAY, + 1091, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Heat-Resistant Trinium Plated Casing", + EnumChatFormatting.GRAY, + 54, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Any Tinted Industrial Glass", + EnumChatFormatting.GRAY, + 64, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Superconductor Base ZPM Frame Box", + EnumChatFormatting.GRAY, + 40, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored("Any Neonite", EnumChatFormatting.GRAY, 8, EnumChatFormatting.GOLD, false) + .addCasingInfoExactlyColored( + "Superconducting Coil Block", + EnumChatFormatting.GRAY, + 8, + EnumChatFormatting.GOLD, + false) + .addController("Front center") + .addOtherStructurePart("Input Hatch (Water)", EnumChatFormatting.GOLD + "1+", 1) + .addOtherStructurePart("Output Hatch", EnumChatFormatting.GOLD + "1", 1) + .addOtherStructurePart("Input Hatch (Coolant)", EnumChatFormatting.GOLD + "1", 2) + .addOtherStructurePart("Input Hatch (Plasma)", EnumChatFormatting.GOLD + "1", 3) + .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public void startCycle(int cycleTime, int progressTime) { + super.startCycle(cycleTime, progressTime); + // Reset internal state + this.cyclesCompleted = 0; + this.currentTemperature = 0; + this.ruinedCycle = false; + this.state = CycleState.Heating; + } + + // Drains up to maxAmount of a fluid if it is the same fluid as given, returns the amount drained + private long drainFluidLimited(MTEHatchInput inputHatch, FluidStack fluid, long maxAmount) { + FluidStack hatchStack = inputHatch.getDrainableStack(); + if (hatchStack == null) return 0; + if (hatchStack.isFluidEqual(fluid)) { + long amountToDrain = Math.min(maxAmount, hatchStack.amount); + if (amountToDrain > 0) { + inputHatch.drain((int) amountToDrain, true); + } + return amountToDrain; + } else { + return 0; + } + } + + @Override + public void addRecipeOutputs() { + super.addRecipeOutputs(); + // If the cycle was ruined, output steam + if (this.ruinedCycle) { + FluidStack insertedWater = currentRecipe.mFluidInputs[0]; + // Multiply by 60 since that's the water:steam ratio in GTNH + long steamAmount = insertedWater.amount * 60L; + addOutput(GTModHandler.getSteam(steamAmount)); + } + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.runMachine(aBaseMetaTileEntity, aTick); + if (mMaxProgresstime > 0 && aTick % CONSUME_INTERVAL == 0) { + // Drain plasma and coolant up to limited amount per second + long plasmaDrained = drainFluidLimited(plasmaInputHatch, plasmaMaterial.getPlasma(1L), MAX_PLASMA_PER_SEC); + long coolantDrained = drainFluidLimited( + coolantInputHatch, + coolantMaterial.getFluid(1L), + MAX_COOLANT_PER_SEC); + // Calculate temperature change + long tempChance = plasmaDrained * PLASMA_TEMP_PER_LITER + coolantDrained * COOLANT_TEMP_PER_LITER; + currentTemperature = Math.max(0, currentTemperature + tempChance); + // Check if batch was ruined + if (currentTemperature > MAX_TEMP) { + ruinedCycle = true; + } + // Update cycle state. + switch (state) { + case Heating -> { + // Heating state can change to cooling when temperature exceeds 10000K + if (currentTemperature >= HEATING_POINT) { + state = CycleState.Cooling; + } + } + case Cooling -> { + if (currentTemperature == 0) { + state = CycleState.Heating; + cyclesCompleted += 1; + } + } + } + } + } + + public boolean addCoolantHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = null; + coolantInputHatch = (MTEHatchInput) aMetaTileEntity; + return true; + } + return false; + } + + public boolean addPlasmaHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = null; + plasmaInputHatch = (MTEHatchInput) aMetaTileEntity; + return true; + } + return false; + } + + @Override + public float calculateFinalSuccessChance() { + if (ruinedCycle) return 0.0f; + // Success chance directly depends on number of cycles completed. + return cyclesCompleted * SUCCESS_PER_CYCLE + currentRecipeChance; + } + + @Override + public String[] getInfoData() { + ArrayList infoData = new ArrayList<>(Arrays.asList(super.getInfoData())); + infoData.add("Current temperature: " + EnumChatFormatting.YELLOW + currentTemperature + "K"); + infoData.add("Heating cycles completed this run: " + EnumChatFormatting.YELLOW + cyclesCompleted); + return infoData.toArray(new String[] {}); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setLong("mCurrentTemperature", currentTemperature); + aNBT.setInteger("mCyclesCompleted", cyclesCompleted); + aNBT.setBoolean("mRuinedCycle", ruinedCycle); + aNBT.setString("mCycleState", state.toString()); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + currentTemperature = aNBT.getLong("mCurrentTemperature"); + cyclesCompleted = aNBT.getInteger("mCyclesCompleted"); + ruinedCycle = aNBT.getBoolean("mRuinedCycle"); + state = CycleState.valueOf(aNBT.getString("mCycleState")); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getWaterTier() { + return 5; + } + + @Override + public long getBasePowerUsage() { + return TierEU.RECIPE_UV; + } + + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + casingCount = 0; + if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; + if (casingCount < MIN_CASING) return false; + // Do not form without positioned hatches + if (plasmaInputHatch == null || coolantInputHatch == null) return false; + return super.checkMachine(aBaseMetaTileEntity, aStack); + } + + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_PURIFICATION_PLASMA_LOOP.resourceLocation; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitUVTreatment.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitUVTreatment.java new file mode 100644 index 0000000000..1ab8122d17 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/MTEPurificationUnitUVTreatment.java @@ -0,0 +1,521 @@ +package gregtech.common.tileentities.machines.multi.purification; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static gregtech.api.enums.GTValues.AuthorNotAPenguin; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ThreadLocalRandom; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; + +public class MTEPurificationUnitUVTreatment extends MTEPurificationUnitBase + implements ISurvivalConstructable { + + private static final int CASING_INDEX_MAIN = getTextureIndex(GregTechAPI.sBlockCasings9, 12); + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final int STRUCTURE_X_OFFSET = 6; + private static final int STRUCTURE_Y_OFFSET = 8; + private static final int STRUCTURE_Z_OFFSET = 0; + + private MTEHatchLensHousing lensInputBus; + private MTEHatchLensIndicator lensIndicator; + + private UVTreatmentLensCycle lensCycle = null; + + /** + * Bonus chance to success for each lens swap + */ + public static final float SUCCESS_PER_LENS = 10.0f; + + /** + * Maximum amount of ticks between two lens swaps + */ + public static final int MAX_TIME_BETWEEN_SWAPS = MTEPurificationPlant.CYCLE_TIME_TICKS / 8; + /** + * Minimum amount of time between two lens swaps + */ + public static final int MIN_TIME_BETWEEN_SWAPS = MAX_TIME_BETWEEN_SWAPS / 4; + + public static final ArrayList LENS_ITEMS = new ArrayList<>(); + + private int numSwapsPerformed = 0; + private int timeUntilNextSwap = 0; + + private boolean removedTooEarly = false; + + private static final String[][] structure = new String[][] { + // spotless:off + { " ", " DDD ", " ", " ", " ", " ", " ", " DDD ", " H~H " }, + { " AAA ", " DDAAADD ", " BBB ", " BBB ", " BBB ", " BBB ", " BBB ", " DDBBBDD ", " AAAAAAA " }, + { " AAAAAAA ", " DDAACCCAADD ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " DDBB BBDD ", " AAAAAAAAAAA " }, + { " AAAAAAAAAAA ", "DAACCCCCCCAAD", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", "DBB BBD", "HAAAAAAAAAAAH" }, + { " AAAAALAAAAA ", "DACCCCCCCCCAD", " B B ", " B B ", " B B ", " B B ", " B B ", "DB BD", "HAAAAAAAAAAAH" }, + { " AAAAAAAAAAA ", "DAACCCCCCCAAD", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", "DBB BBD", "HAAAAAAAAAAAH" }, + { " AAAAAAA ", " DDAACCCAADD ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " BB BB ", " DDBB BBDD ", " AAAAAAAAAAA " }, + { " AIA ", " DDAAADD ", " BBB ", " BBB ", " BBB ", " BBB ", " BBB ", " DDBBBDD ", " AAAAAAA " }, + { " ", " DDD ", " ", " ", " ", " ", " ", " DDD ", " HHH " } }; + // spotless:on + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, structure) + // Naquadria-Reinforced Water Plant Casing + .addElement('A', ofBlock(GregTechAPI.sBlockCasings9, 12)) + // Neutronium-Coated UV-Resistant Glass + .addElement('B', ofBlock(GregTechAPI.sBlockGlass1, 1)) + // UV Backlight sterilizer casing + .addElement('C', ofBlock(GregTechAPI.sBlockCasings9, 13)) + .addElement('D', ofFrame(Materials.StellarAlloy)) + // Lens housing bus + .addElement( + 'L', + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeast(SpecialHatchElement.LensHousing) + .dot(2) + .cacheHint(() -> "Lens Housing") + .casingIndex(CASING_INDEX_MAIN) + .build())) + // Lens indicator hatch + .addElement( + 'I', + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeast(SpecialHatchElement.LensIndicator) + .dot(3) + .cacheHint(() -> "Lens Indicator") + .casingIndex(CASING_INDEX_MAIN) + .build())) + // Input or output hatch + .addElement( + 'H', + ofChain( + lazy( + t -> GTStructureUtility.buildHatchAdder() + .atLeastList(Arrays.asList(InputHatch, OutputHatch)) + .dot(1) + .cacheHint(() -> "Input Hatch, Output Hatch") + .casingIndex(CASING_INDEX_MAIN) + .build()), + // Naquadria-reinforced Water Plant Casing + ofBlock(GregTechAPI.sBlockCasings9, 12))) + .build(); + + public MTEPurificationUnitUVTreatment(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPurificationUnitUVTreatment(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPurificationUnitUVTreatment(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean active, boolean redstoneLevel) { + if (side == facing) { + if (active) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_LARGE_CHEMICAL_REACTOR_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX_MAIN) }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + hintsOnly, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + STRUCTURE_X_OFFSET, + STRUCTURE_Y_OFFSET, + STRUCTURE_Z_OFFSET, + elementBudget, + env, + true); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Purification Unit"); + tt.addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.BOLD + + "Water Tier: " + + EnumChatFormatting.WHITE + + GTUtility.formatNumbers(getWaterTier()) + + EnumChatFormatting.RESET) + .addInfo("Controller block for the High Energy Laser Purification Unit.") + .addInfo("Must be linked to a Purification Plant using a data stick to work.") + .addSeparator() + .addInfo( + "During operation, swap the lens in the " + EnumChatFormatting.WHITE + + "Lens Housing" + + EnumChatFormatting.GRAY + + ".") + .addInfo( + "The multiblock will output a signal through the " + EnumChatFormatting.WHITE + "Lens Indicator Hatch") + .addInfo("when the current lens must be swapped.") + .addInfo( + "Lens swaps will be requested in random intervals of " + EnumChatFormatting.RED + + (MIN_TIME_BETWEEN_SWAPS / SECONDS) + + " to " + + (MAX_TIME_BETWEEN_SWAPS / SECONDS) + + "s" + + EnumChatFormatting.GRAY + + ".") + .addSeparator() + .addInfo( + "Success chance is boosted by " + EnumChatFormatting.RED + + SUCCESS_PER_LENS + + "% " + + EnumChatFormatting.GRAY + + "for each successful swap performed.") + .addInfo("Removing a lens too early will fail the recipe.") + .addInfo("Find the order of lenses in the recipe in NEI,") + .addInfo("or use a portable scanner to view the currently requested lens.") + .addSeparator() + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "The sixth step of water purification involves identifying any remaining negatively charged ions within") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "the water which may cause electrical faults in future wafer manufacturing. Bombarding the water with varying") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "wavelengths of photon beams will impart energy into outer-shell electrons, causing them to detach from the") + .addInfo( + EnumChatFormatting.AQUA + "" + + EnumChatFormatting.ITALIC + + "atoms themselves and pass through the walls of the tank, ensuring the water is perfectly electrically polar.") + .addInfo(AuthorNotAPenguin) + .beginStructureBlock(13, 9, 9, true) + .addCasingInfoRangeColored( + "Naquadria-Reinforced Water Plant Casing", + EnumChatFormatting.GRAY, + 147, + 155, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Electron-Permeable Neutronium Coated Glass", + EnumChatFormatting.GRAY, + 144, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "High Energy Ultraviolet Emitter Casing", + EnumChatFormatting.GRAY, + 24, + EnumChatFormatting.GOLD, + false) + .addCasingInfoExactlyColored( + "Stellar Alloy Frame Box", + EnumChatFormatting.GRAY, + 56, + EnumChatFormatting.GOLD, + false) + .addController("Front center") + .addOtherStructurePart("Input Hatch, Output Hatch", EnumChatFormatting.GOLD + "1+", 1) + .addOtherStructurePart("Lens Housing", EnumChatFormatting.GOLD + "1", 2) + .addOtherStructurePart("Lens Indicator", EnumChatFormatting.GOLD + "1", 3) + .addStructureInfo("Use the StructureLib Hologram Projector to build the structure.") + .toolTipFinisher("GregTech"); + return tt; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.purificationUVTreatmentRecipes; + } + + @NotNull + @Override + public CheckRecipeResult checkProcessing() { + CheckRecipeResult result = super.checkProcessing(); + if (result.wasSuccessful()) { + this.lensCycle = new UVTreatmentLensCycle(LENS_ITEMS); + } + return result; + } + + private int generateNextSwapTime() { + ThreadLocalRandom random = ThreadLocalRandom.current(); + return random.nextInt(MIN_TIME_BETWEEN_SWAPS, MAX_TIME_BETWEEN_SWAPS); + } + + @Override + public void startCycle(int cycleTime, int progressTime) { + super.startCycle(cycleTime, progressTime); + // Reset internal state + this.timeUntilNextSwap = 0; + this.numSwapsPerformed = 0; + this.lensCycle.reset(); + this.removedTooEarly = false; + } + + private ItemStack getCurrentlyInsertedLens() { + return this.lensInputBus.getStackInSlot(0); + } + + @Override + protected void runMachine(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.runMachine(aBaseMetaTileEntity, aTick); + + // Do no processing if no recipe is running + if (mMaxProgresstime <= 0) return; + + // This can happen because the lens cycle isn't saved to NBT correctly yet, FIXME + if (this.lensCycle == null) { + // FIXME: Properly save current recipe in NBT instead of exiting early + return; + } + + ItemStack currentLens = getCurrentlyInsertedLens(); + + // If we are currently counting down to a next swap, do so + if (timeUntilNextSwap > 0) { + timeUntilNextSwap -= 1; + // Set the indicator to not output a signal for now + lensIndicator.updateRedstoneOutput(false); + + // If we are counting down to the next swap, and there is no correct lens in the bus, we removed a lens + // too early + if (currentLens == null || !currentLens.isItemEqual(lensCycle.current())) { + removedTooEarly = true; + } + + // If the time until the next swap became zero, move on to the next requested lens + if (timeUntilNextSwap == 0) { + boolean advanced = lensCycle.advance(); + if (!advanced) { + // cycle didn't advance, we arrived at the end. This mainly means we want to stop the cycle + // The easiest way to do this is by setting the time until next swap larger than the recipe time + timeUntilNextSwap = mMaxProgresstime + 1; + } + } + } + + // Time until next swap is zero, this means we are waiting for the user to output a lens. + else if (timeUntilNextSwap == 0) { + // Set the indicator to output a signal + lensIndicator.updateRedstoneOutput(true); + + // If we now have a matching lens, we can accept it and move on to the next swap + if (currentLens != null && currentLens.isItemEqual(lensCycle.current())) { + numSwapsPerformed += 1; + timeUntilNextSwap = generateNextSwapTime(); + } + } + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getWaterTier() { + return 6; + } + + @Override + public long getBasePowerUsage() { + return TierEU.RECIPE_UV; + } + + @Override + public float calculateFinalSuccessChance() { + if (removedTooEarly) return 0.0f; + return numSwapsPerformed * SUCCESS_PER_LENS + currentRecipeChance; + } + + @Override + public String[] getInfoData() { + ArrayList infoData = new ArrayList<>(Arrays.asList(super.getInfoData())); + if (this.lensCycle != null) { + infoData.add("Lens swaps performed this run: " + EnumChatFormatting.YELLOW + numSwapsPerformed); + infoData.add( + "Current lens requested: " + EnumChatFormatting.GREEN + + lensCycle.current() + .getDisplayName()); + if (removedTooEarly) { + infoData.add("Removed lens too early. Failing this recipe."); + } + } + return infoData.toArray(new String[] {}); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("numSwapsPerformed", numSwapsPerformed); + aNBT.setInteger("timeUntilNextSwap", timeUntilNextSwap); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + numSwapsPerformed = aNBT.getInteger("numSwapsPerformed"); + timeUntilNextSwap = aNBT.getInteger("timeUntilNextSwap"); + } + + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + if (!checkPiece(STRUCTURE_PIECE_MAIN, STRUCTURE_X_OFFSET, STRUCTURE_Y_OFFSET, STRUCTURE_Z_OFFSET)) return false; + // Do not form without lens bus + if (lensInputBus == null) return false; + return super.checkMachine(aBaseMetaTileEntity, aStack); + } + + public boolean addLensHousingToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchLensHousing) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + this.lensInputBus = (MTEHatchLensHousing) aMetaTileEntity; + return true; + } + return false; + } + + public boolean addLensIndicatorToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchLensIndicator) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + this.lensIndicator = (MTEHatchLensIndicator) aMetaTileEntity; + lensIndicator.updateRedstoneOutput(false); + return true; + } + return false; + } + + private enum SpecialHatchElement implements IHatchElement { + + LensHousing(MTEPurificationUnitUVTreatment::addLensHousingToMachineList, MTEHatchLensHousing.class) { + + @Override + public long count(MTEPurificationUnitUVTreatment gtMetaTileEntityPurificationUnitUVTreatment) { + if (gtMetaTileEntityPurificationUnitUVTreatment.lensInputBus == null) return 0; + else return 1; + } + }, + + LensIndicator(MTEPurificationUnitUVTreatment::addLensIndicatorToMachineList, MTEHatchLensHousing.class) { + + @Override + public long count(MTEPurificationUnitUVTreatment gtMetaTileEntityPurificationUnitUVTreatment) { + if (gtMetaTileEntityPurificationUnitUVTreatment.lensIndicator == null) return 0; + else return 1; + } + }; + + private final List> mteClasses; + private final IGTHatchAdder adder; + + @SafeVarargs + SpecialHatchElement(IGTHatchAdder adder, + Class... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + this.adder = adder; + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + public IGTHatchAdder adder() { + return adder; + } + } + + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.IC2_MACHINES_MAGNETIZER_LOOP.resourceLocation; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/purification/PurifiedWaterHelpers.java b/src/main/java/gregtech/common/tileentities/machines/multi/purification/PurifiedWaterHelpers.java index ab397aac94..987a328f31 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/purification/PurifiedWaterHelpers.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/purification/PurifiedWaterHelpers.java @@ -3,7 +3,7 @@ package gregtech.common.tileentities.machines.multi.purification; import net.minecraftforge.fluids.FluidStack; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; public class PurifiedWaterHelpers { @@ -35,7 +35,7 @@ public class PurifiedWaterHelpers { } // Used to construct NEI comparator for water tier. Returns 0 if no water is used in this recipe - public static int getWaterTierFromRecipe(GT_Recipe recipe) { + public static int getWaterTierFromRecipe(GTRecipe recipe) { if (recipe.mFluidInputs.length == 0) return 0; else return getWaterTier(recipe.mFluidInputs[0]); } diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java index 87e986f941..b553849d3a 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/AdvChemicalProcessor.java @@ -40,18 +40,18 @@ import com.gtnewhorizons.modularui.common.widget.SlotGroup; import com.gtnewhorizons.modularui.common.widget.TextWidget; import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.enums.HeatingCoilLevel; import gregtech.api.enums.Materials; -import gregtech.api.fluid.FluidTankGT; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.fluid.GTFluidTank; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.multitileentity.enums.GT_MultiTileCasing; import gregtech.api.multitileentity.multiblock.base.ComplexParallelController; import gregtech.api.multitileentity.multiblock.casing.Glasses; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; +import gregtech.api.util.GTStructureUtility; import gregtech.api.util.GT_StructureUtilityMuTE; +import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.common.tileentities.machines.multiblock.logic.AdvChemicalProcessorProcessingLogic; public class AdvChemicalProcessor @@ -89,7 +89,7 @@ public class AdvChemicalProcessor processWhitelistInventoryHandlers.add(new ItemStackHandler(ITEM_WHITELIST_SLOTS)); ArrayList processFluidTanks = new ArrayList<>(FLUID_WHITELIST_SLOTS); for (int j = 0; j < FLUID_WHITELIST_SLOTS; j++) { - processFluidTanks.add(new FluidTankGT()); + processFluidTanks.add(new GTFluidTank()); } processFluidWhiteLists.add(processFluidTanks); } @@ -102,8 +102,8 @@ public class AdvChemicalProcessor setMaxComplexParallels(nbt.getInteger("processors"), false); final NBTTagCompound processWhiteLists = nbt.getCompoundTag("whiteLists"); long capacity = 1000; - if (nbt.hasKey(GT_Values.NBT.TANK_CAPACITY)) { - capacity = saturatedCast(nbt.getLong(GT_Values.NBT.TANK_CAPACITY)); + if (nbt.hasKey(GTValues.NBT.TANK_CAPACITY)) { + capacity = saturatedCast(nbt.getLong(GTValues.NBT.TANK_CAPACITY)); } for (int i = 0; i < MAX_PROCESSES; i++) { @@ -178,8 +178,8 @@ public class AdvChemicalProcessor } @Override - public GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); tt.addMachineType("Chemical Reactor") .addInfo("Controller block for the Advanced Chemical Processor") .addInfo("Does not lose efficiency when overclocked") @@ -188,7 +188,7 @@ public class AdvChemicalProcessor .addInfo("By using the whitelist filter a recipe can push its output") .addInfo("to a different recipes input to chain them") .addInfo("Disclaimer: Still WIP - Use at your own risk") - .addInfo(GT_Values.Authorminecraft7771) + .addInfo(GTValues.Authorminecraft7771) .addSeparator() .beginStructureBlock(5, 3, 3, false) .addController("Front center") @@ -348,14 +348,14 @@ public class AdvChemicalProcessor ofMuTECasings( FLUID_IN | ITEM_IN | FLUID_OUT | ITEM_OUT | ENERGY_IN, GT_MultiTileCasing.Chemical.getCasing())) - .addElement('P', ofBlock(GregTech_API.sBlockCasings8, 1)) + .addElement('P', ofBlock(GregTechAPI.sBlockCasings8, 1)) .addElement('T', ofMuTECasings(NOTHING, MOTOR_CASINGS)) .addElement( 'W', - GT_StructureUtility.ofCoil(AdvChemicalProcessor::setCoilTier, AdvChemicalProcessor::getCoilTier)) + GTStructureUtility.ofCoil(AdvChemicalProcessor::setCoilTier, AdvChemicalProcessor::getCoilTier)) .addElement('G', Glasses.chainAllGlasses()) - .addElement('B', ofBlock(GregTech_API.sBlockCasings4, 1)) - .addElement('F', GT_StructureUtility.ofFrame(Materials.Steel)) + .addElement('B', ofBlock(GregTechAPI.sBlockCasings4, 1)) + .addElement('F', GTStructureUtility.ofFrame(Materials.Steel)) .addElement( 'U', ofMuTECasings( @@ -384,7 +384,7 @@ public class AdvChemicalProcessor if (!widget.isClient()) widget.getContext() .openSyncedWindow(PROCESS_WINDOW_BASE_ID + processIndex); }) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_WHITELIST) + .setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_WHITELIST) .setSize(18, 18) .setEnabled((widget -> processIndex < maxComplexParallels)) .setPos(20 * (i % 4) + 18, 18 + (i / 4) * 20)); @@ -396,7 +396,7 @@ public class AdvChemicalProcessor .setTextColor(Color.WHITE.normal) .setTextAlignment(Alignment.Center) .addTooltip("Tier") - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) .setSize(18, 18) .setPos(130, 85)); return child; @@ -428,7 +428,7 @@ public class AdvChemicalProcessor builder.widget( new TextWidget("Process " + processIndex).setTextAlignment(Alignment.Center) .setPos(13, 7)); - builder.setBackground(GT_UITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); builder.widget( SlotGroup.ofItemHandler(processWhitelistInventoryHandlers.get(processIndex), 4) .startFromSlot(0) diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/CokeOven.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/CokeOven.java index e8e31ba32c..b208e27fe3 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multiblock/CokeOven.java +++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/CokeOven.java @@ -23,12 +23,12 @@ import com.gtnewhorizons.modularui.common.internal.network.NetworkUtils; import com.gtnewhorizons.modularui.common.widget.DrawableWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; -import gregtech.GT_Mod; -import gregtech.api.enums.GT_Values; +import gregtech.GTMod; +import gregtech.api.enums.GTValues; import gregtech.api.multitileentity.enums.GT_MultiTileCasing; import gregtech.api.multitileentity.multiblock.base.Controller; import gregtech.api.task.tasks.PollutionTask; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.common.tileentities.machines.multiblock.logic.CokeOvenProcessingLogic; public class CokeOven extends Controller { @@ -73,14 +73,14 @@ public class CokeOven extends Controller { } @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); tt.addMachineType("Coke Oven") .addInfo("Used for charcoal") .beginStructureBlock(3, 3, 3, true) .addCasingInfoExactly("Coke Oven Bricks", 25, false) .addPollutionAmount(POLLUTION_AMOUNT) - .toolTipFinisher(GT_Values.AuthorBlueWeabo); + .toolTipFinisher(GTValues.AuthorBlueWeabo); return tt; } @@ -125,7 +125,7 @@ public class CokeOven extends Controller { final TextWidget text = new TextWidget(title).setDefaultColor(getTitleColor()) .setTextAlignment(Alignment.CenterLeft) .setMaxWidth(titleWidth); - if (GT_Mod.gregtechproxy.mTitleTabStyle == 1) { + if (GTMod.gregtechproxy.mTitleTabStyle == 1) { tab.setDrawable(getGUITextureSet().getTitleTabAngular()) .setPos(0, -(titleHeight + TAB_PADDING) + 1) .setSize(getGUIWidth(), titleHeight + TAB_PADDING * 2); diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/DistillationTower.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/DistillationTower.java index 59efd46c94..d4ac6241d2 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multiblock/DistillationTower.java +++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/DistillationTower.java @@ -13,14 +13,14 @@ import com.gtnewhorizon.structurelib.structure.IStructureDefinition; import com.gtnewhorizon.structurelib.structure.StructureDefinition; import com.gtnewhorizon.structurelib.util.Vec3Impl; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.enums.HeatingCoilLevel; import gregtech.api.enums.Materials; import gregtech.api.multitileentity.enums.GT_MultiTileCasing; import gregtech.api.multitileentity.multiblock.base.StackableController; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.common.tileentities.machines.multiblock.logic.DistillationTowerProcessingLogic; public class DistillationTower extends StackableController { @@ -45,12 +45,12 @@ public class DistillationTower extends StackableController {}, (tile) -> HeatingCoilLevel.None)) + .addElement('D', GTStructureUtility.ofCoil((tile, meta) -> {}, (tile) -> HeatingCoilLevel.None)) .build(); } return STRUCTURE_DEFINITION_MEGA; diff --git a/src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java b/src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java index d4a7283f3e..36a1271e0d 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java +++ b/src/main/java/gregtech/common/tileentities/machines/multiblock/LaserEngraver.java @@ -25,15 +25,15 @@ import com.gtnewhorizons.modularui.common.widget.ButtonWidget; import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.multitileentity.enums.GT_MultiTileCasing; import gregtech.api.multitileentity.multiblock.base.ComplexParallelController; import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_StructureUtility; +import gregtech.api.util.GTStructureUtility; +import gregtech.api.util.MultiblockTooltipBuilder; import gregtech.common.tileentities.machines.multiblock.logic.LaserEngraverProcessingLogic; public class LaserEngraver extends ComplexParallelController { @@ -208,7 +208,7 @@ public class LaserEngraver extends ComplexParallelController processIndex < maxComplexParallels)) .setPos(20 * (i % 4) + 18, 18 + (i / 4) * 20)); @@ -256,7 +256,7 @@ public class LaserEngraver extends ComplexParallelController { @@ -75,8 +75,8 @@ public class Macerator extends StackableController { @@ -48,20 +48,20 @@ public class CokeOvenProcessingLogic extends MuTEProcessingLogic getRecipeMap() { - return RecipeMaps.alloySmelterRecipes; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_INDUCTION_LOOP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_ALLOY_SMELTER), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_ALLOY_SMELTER), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_ALLOY_SMELTER), TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_ALLOY_SMELTER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_GLOW) - .glow() - .build() }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java deleted file mode 100644 index 8b96906da1..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_AlloySmelter_Steel.java +++ /dev/null @@ -1,139 +0,0 @@ -package gregtech.common.tileentities.machines.steam; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER_GLOW; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_AlloySmelter_Steel extends GT_MetaTileEntity_BasicMachine_Steel { - - public GT_MetaTileEntity_AlloySmelter_Steel(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, "Combination Smelter", 2, 1, true); - } - - public GT_MetaTileEntity_AlloySmelter_Steel(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aDescription, aTextures, 2, 1, true); - } - - @Override - protected boolean isBricked() { - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_AlloySmelter_Steel(mName, mDescriptionArray, mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.alloySmelterRecipes; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_INDUCTION_LOOP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_ALLOY_SMELTER), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_ALLOY_SMELTER), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_ALLOY_SMELTER), TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_ALLOY_SMELTER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_GLOW) - .glow() - .build() }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java deleted file mode 100644 index ef91ed5baf..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Bronze.java +++ /dev/null @@ -1,134 +0,0 @@ -package gregtech.common.tileentities.machines.steam; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_GLOW; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Compressor_Bronze extends GT_MetaTileEntity_BasicMachine_Bronze { - - public GT_MetaTileEntity_Compressor_Bronze(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, "Compressing Items", 1, 1, false); - } - - public GT_MetaTileEntity_Compressor_Bronze(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aDescription, aTextures, 1, 1, false); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Compressor_Bronze(this.mName, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.compressorRecipes; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_COMPRESSOR_OP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_COMPRESSOR), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_COMPRESSOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_COMPRESSOR), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_COMPRESSOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_COMPRESSOR), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_COMPRESSOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_COMPRESSOR), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_COMPRESSOR_GLOW) - .glow() - .build() }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java deleted file mode 100644 index c213cf04f5..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Compressor_Steel.java +++ /dev/null @@ -1,134 +0,0 @@ -package gregtech.common.tileentities.machines.steam; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_GLOW; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Compressor_Steel extends GT_MetaTileEntity_BasicMachine_Steel { - - public GT_MetaTileEntity_Compressor_Steel(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, "Compressing Items", 1, 1, true); - } - - public GT_MetaTileEntity_Compressor_Steel(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aDescription, aTextures, 1, 1, true); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Compressor_Steel(this.mName, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.compressorRecipes; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_COMPRESSOR_OP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_COMPRESSOR), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_COMPRESSOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_COMPRESSOR), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_COMPRESSOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_COMPRESSOR), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_COMPRESSOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_COMPRESSOR), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_COMPRESSOR_GLOW) - .glow() - .build() }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java deleted file mode 100644 index 6e986992f3..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Bronze.java +++ /dev/null @@ -1,134 +0,0 @@ -package gregtech.common.tileentities.machines.steam; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_GLOW; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Extractor_Bronze extends GT_MetaTileEntity_BasicMachine_Bronze { - - public GT_MetaTileEntity_Extractor_Bronze(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, "Extracting your first Rubber", 1, 1, false); - } - - public GT_MetaTileEntity_Extractor_Bronze(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aDescription, aTextures, 1, 1, false); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Extractor_Bronze(this.mName, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.extractorRecipes; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_EXTRACTOR_OP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_EXTRACTOR), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_EXTRACTOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_EXTRACTOR), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_EXTRACTOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_EXTRACTOR), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_EXTRACTOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_EXTRACTOR), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_EXTRACTOR_GLOW) - .glow() - .build() }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java deleted file mode 100644 index 6a3d024e25..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Extractor_Steel.java +++ /dev/null @@ -1,134 +0,0 @@ -package gregtech.common.tileentities.machines.steam; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_GLOW; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Extractor_Steel extends GT_MetaTileEntity_BasicMachine_Steel { - - public GT_MetaTileEntity_Extractor_Steel(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, "Extracting your first Rubber", 1, 1, true); - } - - public GT_MetaTileEntity_Extractor_Steel(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aDescription, aTextures, 1, 1, true); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Extractor_Steel(this.mName, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.extractorRecipes; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_EXTRACTOR_OP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_EXTRACTOR), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_EXTRACTOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_EXTRACTOR), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_EXTRACTOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_EXTRACTOR), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_EXTRACTOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_EXTRACTOR), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_EXTRACTOR_GLOW) - .glow() - .build() }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java deleted file mode 100644 index b7d25ac172..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Bronze.java +++ /dev/null @@ -1,202 +0,0 @@ -package gregtech.common.tileentities.machines.steam; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_GLOW; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.block.Block; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ParticleFX; -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; - -public class GT_MetaTileEntity_ForgeHammer_Bronze extends GT_MetaTileEntity_BasicMachine_Bronze { - - public GT_MetaTileEntity_ForgeHammer_Bronze(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, "Forge Hammer", 1, 1, false); - } - - public GT_MetaTileEntity_ForgeHammer_Bronze(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aDescription, aTextures, 1, 1, false); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ForgeHammer_Bronze(this.mName, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.hammerRecipes; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.RANDOM_ANVIL_USE, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_HAMMER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_HAMMER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_HAMMER), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_HAMMER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_HAMMER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_HAMMER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_FRONT_STEAM_HAMMER), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_HAMMER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_HAMMER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_HAMMER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_HAMMER), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_HAMMER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_HAMMER), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_HAMMER_GLOW) - .glow() - .build() }; - } - - /** - * Handles {@link Block#randomDisplayTick}. Draws Random Sparkles at main face. - * - * @param aBaseMetaTileEntity The entity that will handle the {@see Block#randomDisplayTick} - */ - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { - - // Random Sparkles at main face - if (aBaseMetaTileEntity.isActive() && XSTR_INSTANCE.nextInt(3) == 0) { - - final ForgeDirection mainFacing = this.mMainFacing; - - if ((mainFacing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 - && aBaseMetaTileEntity.getCoverIDAtSide(mainFacing) == 0 - && !aBaseMetaTileEntity.getOpacityAtSide(mainFacing)) { - - final double oX = aBaseMetaTileEntity.getXCoord(); - final double oY = aBaseMetaTileEntity.getYCoord(); - final double oZ = aBaseMetaTileEntity.getZCoord(); - final double offset = 0.02D; - final double horizontal = 0.5D + XSTR_INSTANCE.nextFloat() * 8D / 16D - 4D / 16D; - - final double x, y, z, mX, mZ; - - y = oY + XSTR_INSTANCE.nextFloat() * 10D / 16D + 5D / 16D; - - if (mainFacing == ForgeDirection.WEST) { - x = oX - offset; - mX = -.05D; - z = oZ + horizontal; - mZ = 0D; - } else if (mainFacing == ForgeDirection.EAST) { - x = oX + offset; - mX = .05D; - z = oZ + horizontal; - mZ = 0D; - } else if (mainFacing == ForgeDirection.NORTH) { - x = oX + horizontal; - mX = 0D; - z = oZ - offset; - mZ = -.05D; - } else // if (frontFacing == ForgeDirection.SOUTH.ordinal()) - { - x = oX + horizontal; - mX = 0D; - z = oZ + offset; - mZ = .05D; - } - - ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(mX, 0, mZ) - .setPosition(x, y, z) - .setWorld(getBaseMetaTileEntity().getWorld()); - particleEventBuilder.setIdentifier(ParticleFX.LAVA) - .run(); - } - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java deleted file mode 100644 index 25785f3fa3..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_ForgeHammer_Steel.java +++ /dev/null @@ -1,202 +0,0 @@ -package gregtech.common.tileentities.machines.steam; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_GLOW; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.block.Block; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.ParticleFX; -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; - -public class GT_MetaTileEntity_ForgeHammer_Steel extends GT_MetaTileEntity_BasicMachine_Steel { - - public GT_MetaTileEntity_ForgeHammer_Steel(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, "Forge Hammer", 1, 1, true); - } - - public GT_MetaTileEntity_ForgeHammer_Steel(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aDescription, aTextures, 1, 1, true); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ForgeHammer_Steel(this.mName, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.hammerRecipes; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.RANDOM_ANVIL_USE, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_HAMMER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_HAMMER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_HAMMER), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_HAMMER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_HAMMER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_HAMMER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_FRONT_STEAM_HAMMER), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_HAMMER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_HAMMER_ACTIVE), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_HAMMER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_HAMMER), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_HAMMER_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_HAMMER), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_HAMMER_GLOW) - .glow() - .build() }; - } - - /** - * Handles {@link Block#randomDisplayTick}. Draws Random Sparkles at main face. - * - * @param aBaseMetaTileEntity The entity that will handle the {@see Block#randomDisplayTick} - */ - @SideOnly(Side.CLIENT) - @Override - public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { - - // Random Sparkles at main face - if (aBaseMetaTileEntity.isActive() && XSTR_INSTANCE.nextInt(3) == 0) { - - final ForgeDirection mainFacing = this.mMainFacing; - - if ((mainFacing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 - && aBaseMetaTileEntity.getCoverIDAtSide(mainFacing) == 0 - && !aBaseMetaTileEntity.getOpacityAtSide(mainFacing)) { - - final double oX = aBaseMetaTileEntity.getXCoord(); - final double oY = aBaseMetaTileEntity.getYCoord(); - final double oZ = aBaseMetaTileEntity.getZCoord(); - final double offset = 0.02D; - final double horizontal = 0.5D + XSTR_INSTANCE.nextFloat() * 8D / 16D - 4D / 16D; - - final double x, y, z, mX, mZ; - - y = oY + XSTR_INSTANCE.nextFloat() * 10D / 16D + 5D / 16D; - - if (mainFacing == ForgeDirection.WEST) { - x = oX - offset; - mX = -.05D; - z = oZ + horizontal; - mZ = 0D; - } else if (mainFacing == ForgeDirection.EAST) { - x = oX + offset; - mX = .05D; - z = oZ + horizontal; - mZ = 0D; - } else if (mainFacing == ForgeDirection.NORTH) { - x = oX + horizontal; - mX = 0D; - z = oZ - offset; - mZ = -.05D; - } else // if (frontFacing == ForgeDirection.SOUTH.ordinal()) - { - x = oX + horizontal; - mX = 0D; - z = oZ + offset; - mZ = .05D; - } - - ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(mX, 0, mZ) - .setPosition(x, y, z) - .setWorld(getBaseMetaTileEntity().getWorld()); - particleEventBuilder.setIdentifier(ParticleFX.LAVA) - .run(); - } - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java deleted file mode 100644 index 51a91874a0..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Bronze.java +++ /dev/null @@ -1,161 +0,0 @@ -package gregtech.common.tileentities.machines.steam; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE_GLOW; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Furnace_Bronze extends GT_MetaTileEntity_BasicMachine_Bronze { - - public GT_MetaTileEntity_Furnace_Bronze(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, "Smelting things with compressed Steam", 1, 1, false); - } - - public GT_MetaTileEntity_Furnace_Bronze(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aDescription, aTextures, 1, 1, false); - } - - @Override - protected boolean isBricked() { - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Furnace_Bronze(this.mName, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.furnaceRecipes; - } - - @Override - public int checkRecipe() { - if (null != (this.mOutputItems[0] = GT_ModHandler.getSmeltingOutput(getInputAt(0), true, getOutputAt(0)))) { - this.mEUt = 4; - this.mMaxProgresstime = 256; - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - return DID_NOT_FIND_RECIPE; - } - - @Override - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) - && GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(64, aStack), false, null) != null; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_FURNACE_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_FURNACE_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_FURNACE), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_FURNACE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_FURNACE_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_FURNACE_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_FRONT_STEAM_FURNACE), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_FURNACE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_FURNACE_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_FURNACE), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_FURNACE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of( - TextureFactory.of(OVERLAY_BOTTOM_STEAM_FURNACE), - TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_GLOW) - .glow() - .build()) }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java deleted file mode 100644 index a151c724f3..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Furnace_Steel.java +++ /dev/null @@ -1,159 +0,0 @@ -package gregtech.common.tileentities.machines.steam; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE_GLOW; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Furnace_Steel extends GT_MetaTileEntity_BasicMachine_Steel { - - public GT_MetaTileEntity_Furnace_Steel(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, "Smelting things with compressed Steam", 1, 1, true); - } - - public GT_MetaTileEntity_Furnace_Steel(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aDescription, aTextures, 1, 1, true); - } - - @Override - protected boolean isBricked() { - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Furnace_Steel(this.mName, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.furnaceRecipes; - } - - @Override - public int checkRecipe() { - if (null != (this.mOutputItems[0] = GT_ModHandler.getSmeltingOutput(getInputAt(0), true, getOutputAt(0)))) { - this.mEUt = 8; - this.mMaxProgresstime = 128; - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - return DID_NOT_FIND_RECIPE; - } - - @Override - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) - && GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(64, aStack), false, null) != null; - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_FURNACE_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_FURNACE_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_FURNACE), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_FURNACE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_FURNACE_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_FURNACE_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_FRONT_STEAM_FURNACE), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_FURNACE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_FURNACE_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_FURNACE), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_FURNACE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_FURNACE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_GLOW) - .glow() - .build() }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java deleted file mode 100644 index cdbf9f2123..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Bronze.java +++ /dev/null @@ -1,189 +0,0 @@ -package gregtech.common.tileentities.machines.steam; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_GLOW; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.ParticleFX; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Bronze; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; - -public class GT_MetaTileEntity_Macerator_Bronze extends GT_MetaTileEntity_BasicMachine_Bronze { - - public GT_MetaTileEntity_Macerator_Bronze(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, "Macerating your Ores", 1, 1, false); - } - - public GT_MetaTileEntity_Macerator_Bronze(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aDescription, aTextures, 1, 1, false); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Macerator_Bronze(this.mName, this.mDescriptionArray, this.mTextures); - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isClientSide() && aBaseMetaTileEntity.isActive()) { - - if (aBaseMetaTileEntity.getFrontFacing() != ForgeDirection.UP - && aBaseMetaTileEntity.getCoverIDAtSide(ForgeDirection.UP) == 0 - && !aBaseMetaTileEntity.getOpacityAtSide(ForgeDirection.UP)) { - - new ParticleEventBuilder().setMotion(0.0D, 0.0D, 0.0D) - .setIdentifier(ParticleFX.SMOKE) - .setPosition( - aBaseMetaTileEntity.getXCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F, - aBaseMetaTileEntity.getYCoord() + 0.9F + XSTR_INSTANCE.nextFloat() * 0.2F, - aBaseMetaTileEntity.getZCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F) - .setWorld(getBaseMetaTileEntity().getWorld()) - .run(); - } - } - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.maceratorRecipes; - } - - @Override - public int checkRecipe() { - GT_Recipe tRecipe = getRecipeMap() - .findRecipe(getBaseMetaTileEntity(), mLastRecipe, false, TierEU.LV, null, null, getAllInputs()); - if (tRecipe == null) return DID_NOT_FIND_RECIPE; - if (tRecipe.mCanBeBuffered) mLastRecipe = tRecipe; - if (!canOutput(tRecipe)) { - mOutputBlocked++; - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - } - - if (!tRecipe.isRecipeInputEqual(true, new FluidStack[] { getFillableStack() }, getAllInputs())) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - if (tRecipe.getOutput(0) != null) mOutputItems[0] = tRecipe.getOutput(0); - calculateCustomOverclock(tRecipe); - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - - @Override - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) - && RecipeMaps.maceratorRecipes.containsInput(GT_Utility.copyAmount(64, aStack)); - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_MACERATOR_OP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_MACERATOR), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_MACERATOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_MACERATOR), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_MACERATOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_MACERATOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_MACERATOR), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_MACERATOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_MACERATOR), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_MACERATOR_GLOW) - .glow() - .build() }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java b/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java deleted file mode 100644 index 95d510ffa3..0000000000 --- a/src/main/java/gregtech/common/tileentities/machines/steam/GT_MetaTileEntity_Macerator_Steel.java +++ /dev/null @@ -1,188 +0,0 @@ -package gregtech.common.tileentities.machines.steam; - -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_GLOW; -import static gregtech.api.objects.XSTR.XSTR_INSTANCE; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.ParticleFX; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_Steel; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.WorldSpawnedEventBuilder; - -public class GT_MetaTileEntity_Macerator_Steel extends GT_MetaTileEntity_BasicMachine_Steel { - - public GT_MetaTileEntity_Macerator_Steel(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, "Macerating your Ores", 1, 1, true); - } - - public GT_MetaTileEntity_Macerator_Steel(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aDescription, aTextures, 1, 1, true); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Macerator_Steel(this.mName, this.mDescriptionArray, this.mTextures); - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isClientSide() && aBaseMetaTileEntity.isActive()) { - if (aBaseMetaTileEntity.getFrontFacing() != ForgeDirection.UP - && aBaseMetaTileEntity.getCoverIDAtSide(ForgeDirection.UP) == 0 - && !aBaseMetaTileEntity.getOpacityAtSide(ForgeDirection.UP)) { - - new WorldSpawnedEventBuilder.ParticleEventBuilder().setMotion(0.0D, 0.0D, 0.0D) - .setIdentifier(ParticleFX.SMOKE) - .setPosition( - aBaseMetaTileEntity.getXCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F, - aBaseMetaTileEntity.getYCoord() + 0.9F + XSTR_INSTANCE.nextFloat() * 0.2F, - aBaseMetaTileEntity.getZCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F) - .setWorld(getBaseMetaTileEntity().getWorld()) - .run(); - } - } - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.maceratorRecipes; - } - - @Override - public int checkRecipe() { - GT_Recipe tRecipe = getRecipeMap() - .findRecipe(getBaseMetaTileEntity(), mLastRecipe, false, TierEU.LV, null, null, getAllInputs()); - if (tRecipe == null) return DID_NOT_FIND_RECIPE; - if (tRecipe.mCanBeBuffered) mLastRecipe = tRecipe; - if (!canOutput(tRecipe)) { - mOutputBlocked++; - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - } - - if (!tRecipe.isRecipeInputEqual(true, new FluidStack[] { getFillableStack() }, getAllInputs())) - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - if (tRecipe.getOutput(0) != null) mOutputItems[0] = tRecipe.getOutput(0); - calculateCustomOverclock(tRecipe); - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } - - @Override - public boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) - && RecipeMaps.maceratorRecipes.containsInput(GT_Utility.copyAmount(64, aStack)); - } - - @Override - public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { - super.startSoundLoop(aIndex, aX, aY, aZ); - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.IC2_MACHINES_MACERATOR_OP, 10, 1.0F, aX, aY, aZ); - } - } - - @Override - public void startProcess() { - sendLoopStart((byte) 1); - } - - @Override - public ITexture[] getSideFacingActive(byte aColor) { - return new ITexture[] { super.getSideFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getSideFacingInactive(byte aColor) { - return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_MACERATOR), - TextureFactory.builder() - .addIcon(OVERLAY_SIDE_STEAM_MACERATOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingActive(byte aColor) { - return new ITexture[] { super.getFrontFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getFrontFacingInactive(byte aColor) { - return new ITexture[] { super.getFrontFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_FRONT_STEAM_MACERATOR), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_STEAM_MACERATOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingActive(byte aColor) { - return new ITexture[] { super.getTopFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_TOP_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_MACERATOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_MACERATOR), - TextureFactory.builder() - .addIcon(OVERLAY_TOP_STEAM_MACERATOR_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingActive(byte aColor) { - return new ITexture[] { super.getBottomFacingActive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE_GLOW) - .glow() - .build() }; - } - - @Override - public ITexture[] getBottomFacingInactive(byte aColor) { - return new ITexture[] { super.getBottomFacingInactive(aColor)[0], - TextureFactory.of(OVERLAY_BOTTOM_STEAM_MACERATOR), TextureFactory.builder() - .addIcon(OVERLAY_BOTTOM_STEAM_MACERATOR_GLOW) - .glow() - .build() }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamAlloySmelterBronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamAlloySmelterBronze.java new file mode 100644 index 0000000000..9953a55bca --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamAlloySmelterBronze.java @@ -0,0 +1,139 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER_GLOW; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineBronze; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTESteamAlloySmelterBronze extends MTEBasicMachineBronze { + + public MTESteamAlloySmelterBronze(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Combination Smelter", 2, 1, false); + } + + public MTESteamAlloySmelterBronze(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 2, 1, false); + } + + @Override + protected boolean isBricked() { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamAlloySmelterBronze(mName, mDescriptionArray, mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.alloySmelterRecipes; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_INDUCTION_LOOP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_ALLOY_SMELTER), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_ALLOY_SMELTER), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_ALLOY_SMELTER), TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_ALLOY_SMELTER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_GLOW) + .glow() + .build() }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamAlloySmelterSteel.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamAlloySmelterSteel.java new file mode 100644 index 0000000000..f60de32cea --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamAlloySmelterSteel.java @@ -0,0 +1,139 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_ALLOY_SMELTER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_ALLOY_SMELTER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_ALLOY_SMELTER_GLOW; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineSteel; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTESteamAlloySmelterSteel extends MTEBasicMachineSteel { + + public MTESteamAlloySmelterSteel(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Combination Smelter", 2, 1, true); + } + + public MTESteamAlloySmelterSteel(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 2, 1, true); + } + + @Override + protected boolean isBricked() { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamAlloySmelterSteel(mName, mDescriptionArray, mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.alloySmelterRecipes; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_INDUCTION_LOOP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_ALLOY_SMELTER), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_ALLOY_SMELTER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_ALLOY_SMELTER), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_ALLOY_SMELTER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_ALLOY_SMELTER), TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_ALLOY_SMELTER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_ALLOY_SMELTER_GLOW) + .glow() + .build() }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamCompressorBronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamCompressorBronze.java new file mode 100644 index 0000000000..2895142f7e --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamCompressorBronze.java @@ -0,0 +1,134 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_GLOW; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineBronze; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTESteamCompressorBronze extends MTEBasicMachineBronze { + + public MTESteamCompressorBronze(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Compressing Items", 1, 1, false); + } + + public MTESteamCompressorBronze(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 1, 1, false); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamCompressorBronze(this.mName, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.compressorRecipes; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_COMPRESSOR_OP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_COMPRESSOR), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_COMPRESSOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_COMPRESSOR), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_COMPRESSOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_COMPRESSOR), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_COMPRESSOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_COMPRESSOR), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_COMPRESSOR_GLOW) + .glow() + .build() }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamCompressorSteel.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamCompressorSteel.java new file mode 100644 index 0000000000..6fa7672d83 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamCompressorSteel.java @@ -0,0 +1,134 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_COMPRESSOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_COMPRESSOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_COMPRESSOR_GLOW; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineSteel; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTESteamCompressorSteel extends MTEBasicMachineSteel { + + public MTESteamCompressorSteel(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Compressing Items", 1, 1, true); + } + + public MTESteamCompressorSteel(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 1, 1, true); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamCompressorSteel(this.mName, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.compressorRecipes; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_COMPRESSOR_OP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_COMPRESSOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_COMPRESSOR), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_COMPRESSOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_COMPRESSOR), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_COMPRESSOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_COMPRESSOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_COMPRESSOR), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_COMPRESSOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_COMPRESSOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_COMPRESSOR), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_COMPRESSOR_GLOW) + .glow() + .build() }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamExtractorBronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamExtractorBronze.java new file mode 100644 index 0000000000..a55105841d --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamExtractorBronze.java @@ -0,0 +1,134 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_GLOW; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineBronze; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTESteamExtractorBronze extends MTEBasicMachineBronze { + + public MTESteamExtractorBronze(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Extracting your first Rubber", 1, 1, false); + } + + public MTESteamExtractorBronze(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 1, 1, false); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamExtractorBronze(this.mName, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.extractorRecipes; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_EXTRACTOR_OP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_EXTRACTOR), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_EXTRACTOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_EXTRACTOR), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_EXTRACTOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_EXTRACTOR), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_EXTRACTOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_EXTRACTOR), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_EXTRACTOR_GLOW) + .glow() + .build() }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamExtractorSteel.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamExtractorSteel.java new file mode 100644 index 0000000000..d91ff6fb98 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamExtractorSteel.java @@ -0,0 +1,134 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_EXTRACTOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_EXTRACTOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_EXTRACTOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_EXTRACTOR_GLOW; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineSteel; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; + +public class MTESteamExtractorSteel extends MTEBasicMachineSteel { + + public MTESteamExtractorSteel(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Extracting your first Rubber", 1, 1, true); + } + + public MTESteamExtractorSteel(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 1, 1, true); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamExtractorSteel(this.mName, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.extractorRecipes; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_EXTRACTOR_OP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_EXTRACTOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_EXTRACTOR), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_EXTRACTOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_EXTRACTOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_EXTRACTOR), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_EXTRACTOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_EXTRACTOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_EXTRACTOR), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_EXTRACTOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_EXTRACTOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_EXTRACTOR), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_EXTRACTOR_GLOW) + .glow() + .build() }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamForgeHammerBronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamForgeHammerBronze.java new file mode 100644 index 0000000000..121778e198 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamForgeHammerBronze.java @@ -0,0 +1,202 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_GLOW; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.block.Block; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ParticleFX; +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineBronze; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; + +public class MTESteamForgeHammerBronze extends MTEBasicMachineBronze { + + public MTESteamForgeHammerBronze(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Forge Hammer", 1, 1, false); + } + + public MTESteamForgeHammerBronze(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 1, 1, false); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamForgeHammerBronze(this.mName, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.hammerRecipes; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.RANDOM_ANVIL_USE, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_HAMMER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_HAMMER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_HAMMER), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_HAMMER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_HAMMER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_HAMMER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_FRONT_STEAM_HAMMER), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_HAMMER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_HAMMER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_HAMMER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_HAMMER), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_HAMMER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_HAMMER), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_HAMMER_GLOW) + .glow() + .build() }; + } + + /** + * Handles {@link Block#randomDisplayTick}. Draws Random Sparkles at main face. + * + * @param aBaseMetaTileEntity The entity that will handle the {@see Block#randomDisplayTick} + */ + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { + + // Random Sparkles at main face + if (aBaseMetaTileEntity.isActive() && XSTR_INSTANCE.nextInt(3) == 0) { + + final ForgeDirection mainFacing = this.mMainFacing; + + if ((mainFacing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 + && aBaseMetaTileEntity.getCoverIDAtSide(mainFacing) == 0 + && !aBaseMetaTileEntity.getOpacityAtSide(mainFacing)) { + + final double oX = aBaseMetaTileEntity.getXCoord(); + final double oY = aBaseMetaTileEntity.getYCoord(); + final double oZ = aBaseMetaTileEntity.getZCoord(); + final double offset = 0.02D; + final double horizontal = 0.5D + XSTR_INSTANCE.nextFloat() * 8D / 16D - 4D / 16D; + + final double x, y, z, mX, mZ; + + y = oY + XSTR_INSTANCE.nextFloat() * 10D / 16D + 5D / 16D; + + if (mainFacing == ForgeDirection.WEST) { + x = oX - offset; + mX = -.05D; + z = oZ + horizontal; + mZ = 0D; + } else if (mainFacing == ForgeDirection.EAST) { + x = oX + offset; + mX = .05D; + z = oZ + horizontal; + mZ = 0D; + } else if (mainFacing == ForgeDirection.NORTH) { + x = oX + horizontal; + mX = 0D; + z = oZ - offset; + mZ = -.05D; + } else // if (frontFacing == ForgeDirection.SOUTH.ordinal()) + { + x = oX + horizontal; + mX = 0D; + z = oZ + offset; + mZ = .05D; + } + + ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(mX, 0, mZ) + .setPosition(x, y, z) + .setWorld(getBaseMetaTileEntity().getWorld()); + particleEventBuilder.setIdentifier(ParticleFX.LAVA) + .run(); + } + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamForgeHammerSteel.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamForgeHammerSteel.java new file mode 100644 index 0000000000..c3410232d0 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamForgeHammerSteel.java @@ -0,0 +1,202 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_HAMMER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_HAMMER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_HAMMER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_HAMMER_GLOW; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.block.Block; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ParticleFX; +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineSteel; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; + +public class MTESteamForgeHammerSteel extends MTEBasicMachineSteel { + + public MTESteamForgeHammerSteel(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Forge Hammer", 1, 1, true); + } + + public MTESteamForgeHammerSteel(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 1, 1, true); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamForgeHammerSteel(this.mName, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.hammerRecipes; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.RANDOM_ANVIL_USE, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_HAMMER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_HAMMER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_HAMMER), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_HAMMER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_HAMMER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_HAMMER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_FRONT_STEAM_HAMMER), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_HAMMER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_HAMMER_ACTIVE), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_HAMMER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_HAMMER), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_HAMMER_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_HAMMER_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_HAMMER), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_HAMMER_GLOW) + .glow() + .build() }; + } + + /** + * Handles {@link Block#randomDisplayTick}. Draws Random Sparkles at main face. + * + * @param aBaseMetaTileEntity The entity that will handle the {@see Block#randomDisplayTick} + */ + @SideOnly(Side.CLIENT) + @Override + public void onRandomDisplayTick(IGregTechTileEntity aBaseMetaTileEntity) { + + // Random Sparkles at main face + if (aBaseMetaTileEntity.isActive() && XSTR_INSTANCE.nextInt(3) == 0) { + + final ForgeDirection mainFacing = this.mMainFacing; + + if ((mainFacing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0 + && aBaseMetaTileEntity.getCoverIDAtSide(mainFacing) == 0 + && !aBaseMetaTileEntity.getOpacityAtSide(mainFacing)) { + + final double oX = aBaseMetaTileEntity.getXCoord(); + final double oY = aBaseMetaTileEntity.getYCoord(); + final double oZ = aBaseMetaTileEntity.getZCoord(); + final double offset = 0.02D; + final double horizontal = 0.5D + XSTR_INSTANCE.nextFloat() * 8D / 16D - 4D / 16D; + + final double x, y, z, mX, mZ; + + y = oY + XSTR_INSTANCE.nextFloat() * 10D / 16D + 5D / 16D; + + if (mainFacing == ForgeDirection.WEST) { + x = oX - offset; + mX = -.05D; + z = oZ + horizontal; + mZ = 0D; + } else if (mainFacing == ForgeDirection.EAST) { + x = oX + offset; + mX = .05D; + z = oZ + horizontal; + mZ = 0D; + } else if (mainFacing == ForgeDirection.NORTH) { + x = oX + horizontal; + mX = 0D; + z = oZ - offset; + mZ = -.05D; + } else // if (frontFacing == ForgeDirection.SOUTH.ordinal()) + { + x = oX + horizontal; + mX = 0D; + z = oZ + offset; + mZ = .05D; + } + + ParticleEventBuilder particleEventBuilder = (new ParticleEventBuilder()).setMotion(mX, 0, mZ) + .setPosition(x, y, z) + .setWorld(getBaseMetaTileEntity().getWorld()); + particleEventBuilder.setIdentifier(ParticleFX.LAVA) + .run(); + } + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamFurnaceBronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamFurnaceBronze.java new file mode 100644 index 0000000000..419ad9a1cd --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamFurnaceBronze.java @@ -0,0 +1,161 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE_GLOW; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineBronze; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +public class MTESteamFurnaceBronze extends MTEBasicMachineBronze { + + public MTESteamFurnaceBronze(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Smelting things with compressed Steam", 1, 1, false); + } + + public MTESteamFurnaceBronze(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 1, 1, false); + } + + @Override + protected boolean isBricked() { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamFurnaceBronze(this.mName, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.furnaceRecipes; + } + + @Override + public int checkRecipe() { + if (null != (this.mOutputItems[0] = GTModHandler.getSmeltingOutput(getInputAt(0), true, getOutputAt(0)))) { + this.mEUt = 4; + this.mMaxProgresstime = 256; + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + return DID_NOT_FIND_RECIPE; + } + + @Override + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) + && GTModHandler.getSmeltingOutput(GTUtility.copyAmount(64, aStack), false, null) != null; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_FURNACE_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_FURNACE_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_FURNACE), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_FURNACE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_FURNACE_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_FURNACE_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_FRONT_STEAM_FURNACE), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_FURNACE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_FURNACE_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_FURNACE), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_FURNACE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of( + TextureFactory.of(OVERLAY_BOTTOM_STEAM_FURNACE), + TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_GLOW) + .glow() + .build()) }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamFurnaceSteel.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamFurnaceSteel.java new file mode 100644 index 0000000000..dd9dff4be4 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamFurnaceSteel.java @@ -0,0 +1,159 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_FURNACE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_FURNACE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_FURNACE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_FURNACE_GLOW; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineSteel; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; + +public class MTESteamFurnaceSteel extends MTEBasicMachineSteel { + + public MTESteamFurnaceSteel(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Smelting things with compressed Steam", 1, 1, true); + } + + public MTESteamFurnaceSteel(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 1, 1, true); + } + + @Override + protected boolean isBricked() { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamFurnaceSteel(this.mName, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.furnaceRecipes; + } + + @Override + public int checkRecipe() { + if (null != (this.mOutputItems[0] = GTModHandler.getSmeltingOutput(getInputAt(0), true, getOutputAt(0)))) { + this.mEUt = 8; + this.mMaxProgresstime = 128; + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + return DID_NOT_FIND_RECIPE; + } + + @Override + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) + && GTModHandler.getSmeltingOutput(GTUtility.copyAmount(64, aStack), false, null) != null; + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_FURNACE_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_FURNACE_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_FURNACE), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_FURNACE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_FURNACE_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_FURNACE_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_FRONT_STEAM_FURNACE), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_FURNACE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_FURNACE_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_FURNACE), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_FURNACE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_FURNACE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_FURNACE_GLOW) + .glow() + .build() }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamMaceratorBronze.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamMaceratorBronze.java new file mode 100644 index 0000000000..441bf266bf --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamMaceratorBronze.java @@ -0,0 +1,189 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_GLOW; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.ParticleFX; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineBronze; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder; + +public class MTESteamMaceratorBronze extends MTEBasicMachineBronze { + + public MTESteamMaceratorBronze(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Macerating your Ores", 1, 1, false); + } + + public MTESteamMaceratorBronze(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 1, 1, false); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamMaceratorBronze(this.mName, this.mDescriptionArray, this.mTextures); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isClientSide() && aBaseMetaTileEntity.isActive()) { + + if (aBaseMetaTileEntity.getFrontFacing() != ForgeDirection.UP + && aBaseMetaTileEntity.getCoverIDAtSide(ForgeDirection.UP) == 0 + && !aBaseMetaTileEntity.getOpacityAtSide(ForgeDirection.UP)) { + + new ParticleEventBuilder().setMotion(0.0D, 0.0D, 0.0D) + .setIdentifier(ParticleFX.SMOKE) + .setPosition( + aBaseMetaTileEntity.getXCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F, + aBaseMetaTileEntity.getYCoord() + 0.9F + XSTR_INSTANCE.nextFloat() * 0.2F, + aBaseMetaTileEntity.getZCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F) + .setWorld(getBaseMetaTileEntity().getWorld()) + .run(); + } + } + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.maceratorRecipes; + } + + @Override + public int checkRecipe() { + GTRecipe tRecipe = getRecipeMap() + .findRecipe(getBaseMetaTileEntity(), mLastRecipe, false, TierEU.LV, null, null, getAllInputs()); + if (tRecipe == null) return DID_NOT_FIND_RECIPE; + if (tRecipe.mCanBeBuffered) mLastRecipe = tRecipe; + if (!canOutput(tRecipe)) { + mOutputBlocked++; + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + } + + if (!tRecipe.isRecipeInputEqual(true, new FluidStack[] { getFillableStack() }, getAllInputs())) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + if (tRecipe.getOutput(0) != null) mOutputItems[0] = tRecipe.getOutput(0); + calculateCustomOverclock(tRecipe); + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + + @Override + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) + && RecipeMaps.maceratorRecipes.containsInput(GTUtility.copyAmount(64, aStack)); + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_MACERATOR_OP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_MACERATOR), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_MACERATOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_MACERATOR), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_MACERATOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_MACERATOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_MACERATOR), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_MACERATOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_MACERATOR), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_MACERATOR_GLOW) + .glow() + .build() }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamMaceratorSteel.java b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamMaceratorSteel.java new file mode 100644 index 0000000000..226d0d387a --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/machines/steam/MTESteamMaceratorSteel.java @@ -0,0 +1,188 @@ +package gregtech.common.tileentities.machines.steam; + +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_BOTTOM_STEAM_MACERATOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_STEAM_MACERATOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SIDE_STEAM_MACERATOR_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_GLOW; +import static gregtech.api.objects.XSTR.XSTR_INSTANCE; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.ParticleFX; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachineSteel; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.WorldSpawnedEventBuilder; + +public class MTESteamMaceratorSteel extends MTEBasicMachineSteel { + + public MTESteamMaceratorSteel(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, "Macerating your Ores", 1, 1, true); + } + + public MTESteamMaceratorSteel(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aDescription, aTextures, 1, 1, true); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamMaceratorSteel(this.mName, this.mDescriptionArray, this.mTextures); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isClientSide() && aBaseMetaTileEntity.isActive()) { + if (aBaseMetaTileEntity.getFrontFacing() != ForgeDirection.UP + && aBaseMetaTileEntity.getCoverIDAtSide(ForgeDirection.UP) == 0 + && !aBaseMetaTileEntity.getOpacityAtSide(ForgeDirection.UP)) { + + new WorldSpawnedEventBuilder.ParticleEventBuilder().setMotion(0.0D, 0.0D, 0.0D) + .setIdentifier(ParticleFX.SMOKE) + .setPosition( + aBaseMetaTileEntity.getXCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F, + aBaseMetaTileEntity.getYCoord() + 0.9F + XSTR_INSTANCE.nextFloat() * 0.2F, + aBaseMetaTileEntity.getZCoord() + 0.8F - XSTR_INSTANCE.nextFloat() * 0.6F) + .setWorld(getBaseMetaTileEntity().getWorld()) + .run(); + } + } + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.maceratorRecipes; + } + + @Override + public int checkRecipe() { + GTRecipe tRecipe = getRecipeMap() + .findRecipe(getBaseMetaTileEntity(), mLastRecipe, false, TierEU.LV, null, null, getAllInputs()); + if (tRecipe == null) return DID_NOT_FIND_RECIPE; + if (tRecipe.mCanBeBuffered) mLastRecipe = tRecipe; + if (!canOutput(tRecipe)) { + mOutputBlocked++; + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + } + + if (!tRecipe.isRecipeInputEqual(true, new FluidStack[] { getFillableStack() }, getAllInputs())) + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + if (tRecipe.getOutput(0) != null) mOutputItems[0] = tRecipe.getOutput(0); + calculateCustomOverclock(tRecipe); + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } + + @Override + public boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) + && RecipeMaps.maceratorRecipes.containsInput(GTUtility.copyAmount(64, aStack)); + } + + @Override + public void startSoundLoop(byte aIndex, double aX, double aY, double aZ) { + super.startSoundLoop(aIndex, aX, aY, aZ); + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.IC2_MACHINES_MACERATOR_OP, 10, 1.0F, aX, aY, aZ); + } + } + + @Override + public void startProcess() { + sendLoopStart((byte) 1); + } + + @Override + public ITexture[] getSideFacingActive(byte aColor) { + return new ITexture[] { super.getSideFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_MACERATOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { super.getSideFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_SIDE_STEAM_MACERATOR), + TextureFactory.builder() + .addIcon(OVERLAY_SIDE_STEAM_MACERATOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { super.getFrontFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_MACERATOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { super.getFrontFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_FRONT_STEAM_MACERATOR), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_STEAM_MACERATOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { super.getTopFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_TOP_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_MACERATOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { super.getTopFacingInactive(aColor)[0], TextureFactory.of(OVERLAY_TOP_STEAM_MACERATOR), + TextureFactory.builder() + .addIcon(OVERLAY_TOP_STEAM_MACERATOR_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { super.getBottomFacingActive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_MACERATOR_ACTIVE_GLOW) + .glow() + .build() }; + } + + @Override + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { super.getBottomFacingInactive(aColor)[0], + TextureFactory.of(OVERLAY_BOTTOM_STEAM_MACERATOR), TextureFactory.builder() + .addIcon(OVERLAY_BOTTOM_STEAM_MACERATOR_GLOW) + .glow() + .build() }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/render/TileDrone.java b/src/main/java/gregtech/common/tileentities/render/TileDrone.java deleted file mode 100644 index 625157ff37..0000000000 --- a/src/main/java/gregtech/common/tileentities/render/TileDrone.java +++ /dev/null @@ -1,24 +0,0 @@ -package gregtech.common.tileentities.render; - -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.AxisAlignedBB; - -public class TileDrone extends TileEntity { - - public double rotation = 0; - - @Override - public AxisAlignedBB getRenderBoundingBox() { - return INFINITE_EXTENT_AABB; - } - - @Override - public double getMaxRenderDistanceSquared() { - return 65536; - } - - @Override - public void updateEntity() { - rotation = (rotation + 50) % 360d; - } -} diff --git a/src/main/java/gregtech/common/tileentities/render/TileEntityDrone.java b/src/main/java/gregtech/common/tileentities/render/TileEntityDrone.java new file mode 100644 index 0000000000..e6f292d895 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/render/TileEntityDrone.java @@ -0,0 +1,24 @@ +package gregtech.common.tileentities.render; + +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; + +public class TileEntityDrone extends TileEntity { + + public double rotation = 0; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return INFINITE_EXTENT_AABB; + } + + @Override + public double getMaxRenderDistanceSquared() { + return 65536; + } + + @Override + public void updateEntity() { + rotation = (rotation + 50) % 360d; + } +} diff --git a/src/main/java/gregtech/common/tileentities/render/TileEntityLaser.java b/src/main/java/gregtech/common/tileentities/render/TileEntityLaser.java new file mode 100644 index 0000000000..b719039fe0 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/render/TileEntityLaser.java @@ -0,0 +1,116 @@ +package gregtech.common.tileentities.render; + +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.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; +import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; + +public class TileEntityLaser extends TileEntity { + + public boolean shouldRender = false; + public float red = 0, green = 0, blue = 0; + public float counter = 0F; + public boolean realism = false; + public double rotAxisX = 0, rotAxisY = 0, rotAxisZ = 0, rotationAngle = 0; + + @Override + public void writeToNBT(NBTTagCompound compound) { + super.writeToNBT(compound); + compound.setFloat("rgb_red", red); + compound.setFloat("rgb_green", green); + compound.setFloat("rgb_blue", blue); + compound.setBoolean("shouldRender", shouldRender); + compound.setDouble("rotAxisX", rotAxisX); + compound.setDouble("rotAxisY", rotAxisY); + compound.setDouble("rotAxisZ", rotAxisZ); + compound.setDouble("rotationAngle", rotationAngle); + } + + @Override + public void readFromNBT(NBTTagCompound compound) { + super.readFromNBT(compound); + red = compound.getFloat("rgb_red"); + blue = compound.getFloat("rgb_blue"); + green = compound.getFloat("rgb_green"); + shouldRender = compound.getBoolean("shouldRender"); + rotAxisX = compound.getDouble("rotAxisX"); + rotAxisY = compound.getDouble("rotAxisY"); + rotAxisZ = compound.getDouble("rotAxisZ"); + rotationAngle = compound.getDouble("rotationAngle"); + } + + public void setColors(float red, float green, float blue) { + this.red = red; + this.green = green; + this.blue = blue; + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public void setRotationFields(ForgeDirection direction, Rotation rotation, Flip flip) { + setRotationAngle(rotation, flip); + setRotationAxis(direction); + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + private void setRotationAngle(Rotation rotation, Flip flip) { + int invert = (flip == Flip.HORIZONTAL || flip == Flip.VERTICAL) ? 1 : -1; + switch (rotation) { + case NORMAL -> rotationAngle = 0; + case CLOCKWISE -> rotationAngle = 90 * invert; + case COUNTER_CLOCKWISE -> rotationAngle = -90 * invert; + case UPSIDE_DOWN -> rotationAngle = 180; + } + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public void setRotationAxis(ForgeDirection direction) { + rotAxisX = direction.offsetX; + rotAxisY = direction.offsetY; + rotAxisZ = direction.offsetZ; + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public void setShouldRender(boolean shouldRender) { + this.shouldRender = shouldRender; + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public Boolean getShouldRender() { + return shouldRender; + } + + public float getRed() { + return red; + } + + public float getGreen() { + return green; + } + + public float getBlue() { + return blue; + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + writeToNBT(nbttagcompound); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + readFromNBT(pkt.func_148857_g()); + worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord); + } + + @Override + public double getMaxRenderDistanceSquared() { + return 4096; + } +} diff --git a/src/main/java/gregtech/common/tileentities/render/TileEntityWormhole.java b/src/main/java/gregtech/common/tileentities/render/TileEntityWormhole.java new file mode 100644 index 0000000000..f3385b5ed6 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/render/TileEntityWormhole.java @@ -0,0 +1,87 @@ +package gregtech.common.tileentities.render; + +import java.util.Optional; + +import net.minecraft.block.Block; +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.minecraft.world.World; +import net.minecraft.world.WorldProvider; + +import gtneioreplugin.plugin.block.ModBlocks; +import gtneioreplugin.util.DimensionHelper; + +public class TileEntityWormhole extends TileEntity { + + public int dimID = 0; + + public double targetRadius = 0; + + @Override + public void writeToNBT(NBTTagCompound compound) { + super.writeToNBT(compound); + compound.setInteger("dimID", dimID); + compound.setDouble("targetRadius", targetRadius); + } + + @Override + public void readFromNBT(NBTTagCompound compound) { + super.readFromNBT(compound); + dimID = compound.getInteger("dimID"); + targetRadius = compound.getDouble("targetRadius"); + } + + public int getDimFromWorld(World target) { + if (target == null) return 0; + String dimName = Optional.ofNullable(target.provider) + .map(WorldProvider::getDimensionName) + .orElse(null); + if (dimName == null) return 0; + for (int i = 0; i < DimensionHelper.DimName.length; i++) { + if (dimName.equals(DimensionHelper.DimName[i])) return i; + } + return 0; + } + + public void setDimFromWorld(World target) { + int newName = getDimFromWorld(target); + if (target != null & dimID != newName) { + dimID = newName; + this.markDirty(); + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + } + + public void setRadius(double target) { + targetRadius = target; + this.markDirty(); + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + } + + public Block getBlock() { + return ModBlocks.getBlock(DimensionHelper.DimNameDisplayed[dimID]); + } + + @Override + public double getMaxRenderDistanceSquared() { + return 65536; + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + writeToNBT(nbttagcompound); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + + readFromNBT(pkt.func_148857_g()); + worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord); + } + +} diff --git a/src/main/java/gregtech/common/tileentities/render/TileLaser.java b/src/main/java/gregtech/common/tileentities/render/TileLaser.java deleted file mode 100644 index 848eecdcf2..0000000000 --- a/src/main/java/gregtech/common/tileentities/render/TileLaser.java +++ /dev/null @@ -1,116 +0,0 @@ -package gregtech.common.tileentities.render; - -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.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; -import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; - -public class TileLaser extends TileEntity { - - public boolean shouldRender = false; - public float red = 0, green = 0, blue = 0; - public float counter = 0F; - public boolean realism = false; - public double rotAxisX = 0, rotAxisY = 0, rotAxisZ = 0, rotationAngle = 0; - - @Override - public void writeToNBT(NBTTagCompound compound) { - super.writeToNBT(compound); - compound.setFloat("rgb_red", red); - compound.setFloat("rgb_green", green); - compound.setFloat("rgb_blue", blue); - compound.setBoolean("shouldRender", shouldRender); - compound.setDouble("rotAxisX", rotAxisX); - compound.setDouble("rotAxisY", rotAxisY); - compound.setDouble("rotAxisZ", rotAxisZ); - compound.setDouble("rotationAngle", rotationAngle); - } - - @Override - public void readFromNBT(NBTTagCompound compound) { - super.readFromNBT(compound); - red = compound.getFloat("rgb_red"); - blue = compound.getFloat("rgb_blue"); - green = compound.getFloat("rgb_green"); - shouldRender = compound.getBoolean("shouldRender"); - rotAxisX = compound.getDouble("rotAxisX"); - rotAxisY = compound.getDouble("rotAxisY"); - rotAxisZ = compound.getDouble("rotAxisZ"); - rotationAngle = compound.getDouble("rotationAngle"); - } - - public void setColors(float red, float green, float blue) { - this.red = red; - this.green = green; - this.blue = blue; - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - } - - public void setRotationFields(ForgeDirection direction, Rotation rotation, Flip flip) { - setRotationAngle(rotation, flip); - setRotationAxis(direction); - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - } - - private void setRotationAngle(Rotation rotation, Flip flip) { - int invert = (flip == Flip.HORIZONTAL || flip == Flip.VERTICAL) ? 1 : -1; - switch (rotation) { - case NORMAL -> rotationAngle = 0; - case CLOCKWISE -> rotationAngle = 90 * invert; - case COUNTER_CLOCKWISE -> rotationAngle = -90 * invert; - case UPSIDE_DOWN -> rotationAngle = 180; - } - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - } - - public void setRotationAxis(ForgeDirection direction) { - rotAxisX = direction.offsetX; - rotAxisY = direction.offsetY; - rotAxisZ = direction.offsetZ; - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - } - - public void setShouldRender(boolean shouldRender) { - this.shouldRender = shouldRender; - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - } - - public Boolean getShouldRender() { - return shouldRender; - } - - public float getRed() { - return red; - } - - public float getGreen() { - return green; - } - - public float getBlue() { - return blue; - } - - @Override - public Packet getDescriptionPacket() { - NBTTagCompound nbttagcompound = new NBTTagCompound(); - writeToNBT(nbttagcompound); - return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - readFromNBT(pkt.func_148857_g()); - worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord); - } - - @Override - public double getMaxRenderDistanceSquared() { - return 4096; - } -} diff --git a/src/main/java/gregtech/common/tileentities/render/TileWormhole.java b/src/main/java/gregtech/common/tileentities/render/TileWormhole.java deleted file mode 100644 index d482fd7ce1..0000000000 --- a/src/main/java/gregtech/common/tileentities/render/TileWormhole.java +++ /dev/null @@ -1,87 +0,0 @@ -package gregtech.common.tileentities.render; - -import java.util.Optional; - -import net.minecraft.block.Block; -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.minecraft.world.World; -import net.minecraft.world.WorldProvider; - -import pers.gwyog.gtneioreplugin.plugin.block.ModBlocks; -import pers.gwyog.gtneioreplugin.util.DimensionHelper; - -public class TileWormhole extends TileEntity { - - public int dimID = 0; - - public double targetRadius = 0; - - @Override - public void writeToNBT(NBTTagCompound compound) { - super.writeToNBT(compound); - compound.setInteger("dimID", dimID); - compound.setDouble("targetRadius", targetRadius); - } - - @Override - public void readFromNBT(NBTTagCompound compound) { - super.readFromNBT(compound); - dimID = compound.getInteger("dimID"); - targetRadius = compound.getDouble("targetRadius"); - } - - public int getDimFromWorld(World target) { - if (target == null) return 0; - String dimName = Optional.ofNullable(target.provider) - .map(WorldProvider::getDimensionName) - .orElse(null); - if (dimName == null) return 0; - for (int i = 0; i < DimensionHelper.DimName.length; i++) { - if (dimName.equals(DimensionHelper.DimName[i])) return i; - } - return 0; - } - - public void setDimFromWorld(World target) { - int newName = getDimFromWorld(target); - if (target != null & dimID != newName) { - dimID = newName; - this.markDirty(); - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - } - } - - public void setRadius(double target) { - targetRadius = target; - this.markDirty(); - worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); - } - - public Block getBlock() { - return ModBlocks.getBlock(DimensionHelper.DimNameDisplayed[dimID]); - } - - @Override - public double getMaxRenderDistanceSquared() { - return 65536; - } - - @Override - public Packet getDescriptionPacket() { - NBTTagCompound nbttagcompound = new NBTTagCompound(); - writeToNBT(nbttagcompound); - return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - - readFromNBT(pkt.func_148857_g()); - worldObj.markBlockRangeForRenderUpdate(xCoord, yCoord, zCoord, xCoord, yCoord, zCoord); - } - -} diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java deleted file mode 100644 index 1576f61ff8..0000000000 --- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalChestBase.java +++ /dev/null @@ -1,559 +0,0 @@ -package gregtech.common.tileentities.storage; - -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCHEST; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCHEST_GLOW; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import appeng.api.storage.IMEMonitor; -import appeng.api.storage.IMEMonitorHandlerReceiver; -import appeng.api.storage.StorageChannel; -import appeng.api.storage.data.IAEItemStack; -import appeng.api.storage.data.IItemList; -import appeng.util.item.AEItemStack; -import appeng.util.item.ItemList; -import gregtech.api.enums.GT_Values; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.objects.AE2DigitalChestHandler; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public abstract class GT_MetaTileEntity_DigitalChestBase extends GT_MetaTileEntity_TieredMachineBlock - implements IMEMonitor, IAddUIWidgets { - - protected boolean mVoidOverflow = false; - protected boolean mDisableFilter; - private Map, Object> listeners = null; - - public GT_MetaTileEntity_DigitalChestBase(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 3, - new String[] { "This Chest stores " + GT_Utility.formatNumbers(commonSizeCompute(aTier)) + " Blocks", - "Use a screwdriver to enable", "voiding items on overflow", "Will keep its contents when harvested", }); - } - - protected static int commonSizeCompute(int tier) { - return switch (tier) { - case 1 -> 4000000; - case 2 -> 8000000; - case 3 -> 16000000; - case 4 -> 32000000; - case 5 -> 64000000; - case 6 -> 128000000; - case 7 -> 256000000; - case 8 -> 512000000; - case 9 -> 1024000000; - case 10 -> 2147483640; - default -> 0; - }; - } - - public GT_MetaTileEntity_DigitalChestBase(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - public GT_MetaTileEntity_DigitalChestBase(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - @Override - public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { - if (stack.hasTagCompound() && stack.stackTagCompound.hasKey("mItemStack")) { - final ItemStack tContents = ItemStack - .loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("mItemStack")); - final int tSize = stack.stackTagCompound.getInteger("mItemCount"); - if (tContents != null && tSize > 0) { - tooltip.add( - GT_LanguageManager.addStringLocalization("TileEntity_CHEST_INFO", "Contains Item: ") - + EnumChatFormatting.YELLOW - + tContents.getDisplayName() - + EnumChatFormatting.GRAY); - tooltip.add( - GT_LanguageManager.addStringLocalization("TileEntity_CHEST_AMOUNT", "Item Amount: ") - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(tSize) - + EnumChatFormatting.GRAY); - } - } - } - - public static void registerAEIntegration() { - appeng.api.AEApi.instance() - .registries() - .externalStorage() - .addExternalStorageInterface(new AE2DigitalChestHandler()); - } - - @Override - public void addListener(IMEMonitorHandlerReceiver imeMonitorHandlerReceiver, Object o) { - if (listeners == null) listeners = new HashMap<>(); - listeners.put(imeMonitorHandlerReceiver, o); - } - - @Override - public void removeListener(IMEMonitorHandlerReceiver imeMonitorHandlerReceiver) { - if (listeners == null) listeners = new HashMap<>(); - listeners.remove(imeMonitorHandlerReceiver); - } - - @Override - public appeng.api.config.AccessRestriction getAccess() { - return appeng.api.config.AccessRestriction.READ_WRITE; - } - - @Override - public boolean isPrioritized(IAEItemStack iaeItemStack) { - ItemStack s = getItemStack(); - if (s == null || iaeItemStack == null) return false; - return iaeItemStack.isSameType(s); - } - - @Override - public boolean canAccept(IAEItemStack iaeItemStack) { - ItemStack s = getItemStack(); - if (s == null || iaeItemStack == null) return true; - return iaeItemStack.isSameType(s); - } - - @Override - public int getPriority() { - return 0; - } - - @Override - public int getSlot() { - return 0; - } - - @Override - public boolean validForPass(int i) { - return true; - } - - protected abstract ItemStack getItemStack(); - - protected abstract void setItemStack(ItemStack s); - - @SuppressWarnings("unchecked") - @Override - public IItemList getAvailableItems(final IItemList out, int iteration) { - ItemStack storedStack = getItemStack(); - if (storedStack != null) { - AEItemStack s = AEItemStack.create(storedStack); - s.setStackSize(getItemCount()); - out.add(s); - } - return out; - } - - @Override - public IItemList getStorageList() { - IItemList res = new ItemList(); - ItemStack storedStack = getItemStack(); - if (storedStack != null) { - AEItemStack s = AEItemStack.create(storedStack); - s.setStackSize(getItemCount()); - res.add(s); - } - return res; - } - - protected abstract int getItemCount(); - - @Override - public abstract void setItemCount(int aCount); - - @Override - public int getMaxItemCount() { - return commonSizeCompute(mTier); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return new ITexture[0][0][0]; - } - - @Override - public IAEItemStack injectItems(final IAEItemStack input, final appeng.api.config.Actionable mode, - final appeng.api.networking.security.BaseActionSource src) { - if (getBaseMetaTileEntity() == null) return input; - - final ItemStack inputStack = input.getItemStack(); - final int maxCapacity = getMaxItemCount(); - final int itemCount = getItemCount(); - final long toAdd = input.getStackSize(); - final ItemStack storedStack = getItemStack(); - - if (storedStack != null && !GT_Utility.areStacksEqual(storedStack, inputStack)) { - // Can't stack with existing item, just return the input. - return input; - } - - // Number of items not added because there's too much to add. - final long notAdded = itemCount + toAdd - maxCapacity; - - if (mode == appeng.api.config.Actionable.MODULATE) { - final int newCount = (int) Math.min((long) maxCapacity, itemCount + toAdd); - - if (storedStack == null) { - setItemStack(inputStack.copy()); - } - setItemCount(newCount); - getBaseMetaTileEntity().markDirty(); - } - if (mVoidOverflow || notAdded <= 0) { - return null; - } else { - return input.copy() - .setStackSize(notAdded); - } - } - - @Override - public IAEItemStack extractItems(final IAEItemStack request, final appeng.api.config.Actionable mode, - final appeng.api.networking.security.BaseActionSource src) { - if (request.isSameType(getItemStack())) { - if (getBaseMetaTileEntity() == null) return null; - if (mode != appeng.api.config.Actionable.SIMULATE) getBaseMetaTileEntity().markDirty(); - if (request.getStackSize() >= getItemCount()) { - AEItemStack result = AEItemStack.create(getItemStack()); - result.setStackSize(getItemCount()); - if (mode != appeng.api.config.Actionable.SIMULATE) setItemCount(0); - return result; - } else { - if (mode != appeng.api.config.Actionable.SIMULATE) - setItemCount(getItemCount() - (int) request.getStackSize()); - return request.copy(); - } - } - return null; - } - - @Override - public StorageChannel getChannel() { - return StorageChannel.ITEMS; - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - mVoidOverflow = !mVoidOverflow; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal( - mVoidOverflow ? "GT5U.machines.digitalchest.voidoverflow.enabled" - : "GT5U.machines.digitalchest.voidoverflow.disabled")); - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (super.onSolderingToolRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ)) return true; - mDisableFilter = !mDisableFilter; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal( - mDisableFilter ? "GT5U.machines.digitalchest.inputfilter.disabled" - : "GT5U.machines.digitalchest.inputfilter.enabled")); - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - - if (getBaseMetaTileEntity().isServerSide() && getBaseMetaTileEntity().isAllowedToWork()) { - if ((getItemCount() <= 0)) { - setItemStack(null); - setItemCount(0); - } - if (getItemStack() == null && mInventory[0] != null) { - setItemStack(mInventory[0].copy()); - } - int count = getItemCount(); - ItemStack stack = getItemStack(); - int savedCount = count; - - if ((mInventory[0] != null) && ((count < getMaxItemCount()) || mVoidOverflow) - && GT_Utility.areStacksEqual(mInventory[0], stack)) { - count += mInventory[0].stackSize; - if (count <= getMaxItemCount()) { - mInventory[0] = null; - } else { - if (mVoidOverflow) { - mInventory[0] = null; - } else { - mInventory[0].stackSize = (count - getMaxItemCount()); - } - count = getMaxItemCount(); - } - } - if (mInventory[1] == null && stack != null) { - mInventory[1] = stack.copy(); - mInventory[1].stackSize = Math.min(stack.getMaxStackSize(), count); - count -= mInventory[1].stackSize; - } else if ((count > 0) && GT_Utility.areStacksEqual(mInventory[1], stack) - && mInventory[1].getMaxStackSize() > mInventory[1].stackSize) { - int tmp = Math.min(count, mInventory[1].getMaxStackSize() - mInventory[1].stackSize); - mInventory[1].stackSize += tmp; - count -= tmp; - } - setItemCount(count); - if (stack != null) { - mInventory[2] = stack.copy(); - mInventory[2].stackSize = Math.min(stack.getMaxStackSize(), count); - } else { - mInventory[2] = null; - } - - notifyListeners(count - savedCount, stack); - if (count != savedCount) getBaseMetaTileEntity().markDirty(); - } - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex != 2; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public int getProgresstime() { - return getItemCount() + (mInventory[0] == null ? 0 : mInventory[0].stackSize) - + (mInventory[1] == null ? 0 : mInventory[1].stackSize); - } - - @Override - public int maxProgresstime() { - return getMaxItemCount(); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - - if (getItemStack() == null) { - return new String[] { EnumChatFormatting.BLUE + chestName() + EnumChatFormatting.RESET, "Stored Items:", - EnumChatFormatting.GOLD + "No Items" + EnumChatFormatting.RESET, - EnumChatFormatting.GREEN + "0" - + EnumChatFormatting.RESET - + " " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getMaxItemCount()) - + EnumChatFormatting.RESET }; - } - return new String[] { EnumChatFormatting.BLUE + chestName() + EnumChatFormatting.RESET, "Stored Items:", - EnumChatFormatting.GOLD + getItemStack().getDisplayName() + EnumChatFormatting.RESET, - EnumChatFormatting.GREEN + GT_Utility.formatNumbers(getItemCount()) - + EnumChatFormatting.RESET - + " " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getMaxItemCount()) - + EnumChatFormatting.RESET }; - } - - @Override - public ItemStack[] getStoredItemData() { - return mInventory; - } - - protected abstract String chestName(); - - private void notifyListeners(int count, ItemStack stack) { - if (listeners == null) { - listeners = new HashMap<>(); - return; - } - if (count == 0 || stack == null) return; - ItemList change = new ItemList(); - AEItemStack s = AEItemStack.create(stack); - s.setStackSize(count); - change.add(s); - listeners.forEach((l, o) -> { - if (l.isValid(o)) l.postChange(this, change, null); - else removeListener(l); - }); - } - - private boolean hasActiveMEConnection() { - if (listeners == null || listeners.isEmpty()) return false; - for (Map.Entry, Object> e : listeners.entrySet()) { - if ((e.getKey() instanceof appeng.api.parts.IPart)) { - appeng.api.networking.IGridNode n = ((appeng.api.parts.IPart) e.getKey()).getGridNode(); - if (n != null && n.isActive()) return true; - } - } - // if there are no active storage buses - clear the listeners - listeners.clear(); - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mItemCount", getItemCount()); - if (getItemStack() != null) aNBT.setTag("mItemStack", getItemStack().writeToNBT(new NBTTagCompound())); - aNBT.setBoolean("mVoidOverflow", mVoidOverflow); - aNBT.setBoolean("mDisableFilter", mDisableFilter); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - if (aNBT.hasKey("mItemCount")) setItemCount(aNBT.getInteger("mItemCount")); - if (aNBT.hasKey("mItemStack")) - setItemStack(ItemStack.loadItemStackFromNBT((NBTTagCompound) aNBT.getTag("mItemStack"))); - mVoidOverflow = aNBT.getBoolean("mVoidOverflow"); - mDisableFilter = aNBT.getBoolean("mDisableFilter"); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (GT_Values.disableDigitalChestsExternalAccess && hasActiveMEConnection()) return false; - return aIndex == 1; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (GT_Values.disableDigitalChestsExternalAccess && hasActiveMEConnection()) return false; - if (aIndex != 0) return false; - if ((mInventory[0] != null && !GT_Utility.areStacksEqual(mInventory[0], aStack))) return false; - if (mDisableFilter) return true; - if (getItemStack() == null) return mInventory[1] == null || GT_Utility.areStacksEqual(mInventory[1], aStack); - return GT_Utility.areStacksEqual(getItemStack(), aStack); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side != aFacing) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1] }; - return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_SCHEST), - TextureFactory.builder() - .addIcon(OVERLAY_SCHEST_GLOW) - .glow() - .build() }; - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - if (tag.hasKey("itemType", Constants.NBT.TAG_COMPOUND)) { - currenttip.add("Item Count: " + GT_Utility.parseNumberToString(tag.getInteger("itemCount"))); - currenttip.add( - "Item Type: " + ItemStack.loadItemStackFromNBT(tag.getCompoundTag("itemType")) - .getDisplayName()); - } else { - currenttip.add("Chest Empty"); - } - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - ItemStack is = getItemStack(); - if (GT_Utility.isStackInvalid(is)) return; - int realItemCount = getItemCount(); - if (GT_Utility.isStackValid(mInventory[1]) && GT_Utility.areStacksEqual(mInventory[1], is)) - realItemCount += mInventory[1].stackSize; - tag.setInteger("itemCount", realItemCount); - tag.setTag("itemType", is.writeToNBT(new NBTTagCompound())); - } - - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - protected int clientItemCount; - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(7, 16) - .setSize(71, 45)) - .widget( - new SlotWidget(inventoryHandler, 0) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_IN) - .setPos(79, 16)) - .widget( - new SlotWidget(inventoryHandler, 1).setAccess(true, false) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_OUT) - .setPos(79, 52)) - .widget( - SlotWidget.phantom(inventoryHandler, 2) - .disableInteraction() - .setBackground(GT_UITextures.TRANSPARENT) - .setPos(59, 42)) - .widget( - new TextWidget("Item Amount").setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(10, 20)) - .widget( - new TextWidget().setStringSupplier(() -> numberFormat.format(clientItemCount)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(10, 30)) - .widget( - new FakeSyncWidget.IntegerSyncer( - () -> this instanceof GT_MetaTileEntity_QuantumChest - ? ((GT_MetaTileEntity_QuantumChest) this).mItemCount - : 0, - value -> clientItemCount = value)); - - } -} diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java deleted file mode 100644 index cd609af343..0000000000 --- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_DigitalTankBase.java +++ /dev/null @@ -1,694 +0,0 @@ -package gregtech.common.tileentities.storage; - -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_QTANK; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_QTANK_GLOW; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_Utility.formatNumbers; - -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; - -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IFluidLockable; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import gregtech.common.gui.modularui.widget.FluidLockWidget; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public abstract class GT_MetaTileEntity_DigitalTankBase extends GT_MetaTileEntity_BasicTank - implements IFluidLockable, IAddUIWidgets, IAddGregtechLogo { - - public boolean mOutputFluid = false, mVoidFluidPart = false, mVoidFluidFull = false, mLockFluid = false; - protected String lockedFluidName = null; - public boolean mAllowInputFromOutputSide = false; - - public GT_MetaTileEntity_DigitalTankBase(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 3, - new String[] { - StatCollector.translateToLocalFormatted( - "GT5U.machines.digitaltank.tooltip", - formatNumbers(commonSizeCompute(aTier))), - StatCollector.translateToLocal("GT5U.machines.digitaltank.tooltip1"), }); - } - - protected static int commonSizeCompute(int tier) { - return switch (tier) { - case 1 -> 4000000; - case 2 -> 8000000; - case 3 -> 16000000; - case 4 -> 32000000; - case 5 -> 64000000; - case 6 -> 128000000; - case 7 -> 256000000; - case 8 -> 512000000; - case 9 -> 1024000000; - case 10 -> 2147483640; - default -> 0; - }; - } - - private static int tierPump(int tier) { - return switch (tier) { - case 1 -> 2; - case 2 -> 3; - case 3 -> 3; - case 4 -> 4; - case 5 -> 4; - case 6 -> 5; - case 7 -> 5; - case 8 -> 6; - case 9 -> 7; - case 10 -> 8; - default -> 0; - }; - } - - public GT_MetaTileEntity_DigitalTankBase(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - public GT_MetaTileEntity_DigitalTankBase(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return new ITexture[0][0][0]; - } - - @Override - public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { - if (stack.hasTagCompound() - && (stack.stackTagCompound.hasKey("mFluid") || stack.stackTagCompound.hasKey("lockedFluidName"))) { - final FluidStack tContents = FluidStack - .loadFluidStackFromNBT(stack.stackTagCompound.getCompoundTag("mFluid")); - if (tContents != null && tContents.amount > 0) { - tooltip.add( - GT_LanguageManager.addStringLocalization("TileEntity_TANK_INFO", "Contains Fluid: ") - + EnumChatFormatting.YELLOW - + tContents.getLocalizedName() - + EnumChatFormatting.GRAY); - tooltip.add( - GT_LanguageManager.addStringLocalization("TileEntity_TANK_AMOUNT", "Fluid Amount: ") - + EnumChatFormatting.GREEN - + formatNumbers(tContents.amount) - + " L" - + EnumChatFormatting.GRAY); - } else if (stack.stackTagCompound.hasKey("lockedFluidName")) { - String fluidName = stack.stackTagCompound.getString("lockedFluidName"); - Fluid fluid = FluidRegistry.getFluid(fluidName); - if (fluid == null) return; - // noinspection deprecation - tooltip.add( - StatCollector.translateToLocalFormatted( - "GT5U.item.tank.locked_to", - EnumChatFormatting.YELLOW + fluid.getLocalizedName())); - } - } - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - if (mFluid != null && mFluid.amount >= 0) { - aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); - } - if (mOutputFluid) aNBT.setBoolean("mOutputFluid", true); - if (mVoidFluidPart) aNBT.setBoolean("mVoidOverflow", true); - if (mVoidFluidFull) aNBT.setBoolean("mVoidFluidFull", true); - if (mLockFluid) aNBT.setBoolean("mLockFluid", true); - if (mLockFluid && GT_Utility.isStringValid(lockedFluidName)) aNBT.setString("lockedFluidName", lockedFluidName); - if (this.mAllowInputFromOutputSide) aNBT.setBoolean("mAllowInputFromOutputSide", true); - - super.setItemNBT(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("mOutputFluid", this.mOutputFluid); - aNBT.setBoolean("mVoidOverflow", this.mVoidFluidPart); - aNBT.setBoolean("mVoidFluidFull", this.mVoidFluidFull); - aNBT.setBoolean("mLockFluid", mLockFluid); - if (mLockFluid && GT_Utility.isStringValid(lockedFluidName)) aNBT.setString("lockedFluidName", lockedFluidName); - else aNBT.removeTag("lockedFluidName"); - aNBT.setBoolean("mAllowInputFromOutputSide", this.mAllowInputFromOutputSide); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mOutputFluid = aNBT.getBoolean("mOutputFluid"); - mVoidFluidPart = aNBT.getBoolean("mVoidOverflow"); - mVoidFluidFull = aNBT.getBoolean("mVoidFluidFull"); - mLockFluid = aNBT.getBoolean("mLockFluid"); - if (mLockFluid) { - setLockedFluidName(aNBT.getString("lockedFluidName")); - } else { - setLockedFluidName(null); - } - mAllowInputFromOutputSide = aNBT.getBoolean("mAllowInputFromOutputSide"); - } - - @Override - public boolean isFluidInputAllowed(FluidStack aFluid) { - return !mLockFluid || lockedFluidName == null - || lockedFluidName.equals( - aFluid.getFluid() - .getName()); - } - - @Override - public boolean isFluidChangingAllowed() { - return !mLockFluid || lockedFluidName == null; - } - - @Override - public void onEmptyingContainerWhenEmpty() { - if (this.lockedFluidName == null && this.mFluid != null && isFluidLocked()) { - setLockedFluidName( - this.mFluid.getFluid() - .getName()); - } - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean doesFillContainers() { - return true; - } - - @Override - public boolean doesEmptyContainers() { - return true; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public boolean displaysItemStack() { - return true; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public void setLockedFluidName(String lockedFluidName) { - lockedFluidName = GT_Utility.isStringInvalid(lockedFluidName) ? null : lockedFluidName; - this.lockedFluidName = lockedFluidName; - if (lockedFluidName != null) { - Fluid fluid = FluidRegistry.getFluid(lockedFluidName); - if (fluid != null) { - // create new FluidStack, otherwise existing 0-amount FluidStack will - // prevent new fluid from being locked - setFillableStack(new FluidStack(fluid, getFluidAmount())); - mLockFluid = true; - } - } - // Don't unlock if lockedFluidName == null, - // as player might explicitly enable fluid locking with no fluid contained - } - - @Override - public String getLockedFluidName() { - return this.lockedFluidName; - } - - @Override - public void lockFluid(boolean lock) { - this.mLockFluid = lock; - if (!lock) { - setLockedFluidName(null); - } - } - - @Override - public boolean isFluidLocked() { - return this.mLockFluid; - } - - @Override - public boolean acceptsFluidLock(String name) { - if (name == null || getFluidAmount() == 0) return true; - return mFluid != null && mFluid.getFluid() - .getName() - .equals(name); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, - ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { - if (sideDirection != ForgeDirection.UP) { - if (sideDirection == baseMetaTileEntity.getFrontFacing()) { - return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_PIPE) }; - } else return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1] }; - } - return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_QTANK), - TextureFactory.builder() - .addIcon(OVERLAY_QTANK_GLOW) - .glow() - .build() }; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getFrontFacing()) { - mAllowInputFromOutputSide = !mAllowInputFromOutputSide; - GT_Utility.sendChatToPlayer( - aPlayer, - mAllowInputFromOutputSide ? GT_Utility.getTrans("095") : GT_Utility.getTrans("096")); - } - } - - @Override - public FluidStack setFillableStack(FluidStack aFluid) { - mFluid = aFluid; - if (mFluid != null) { - mFluid.amount = Math.min(mFluid.amount, getRealCapacity()); - } - return mFluid; - } - - @Override - public FluidStack setDrainableStack(FluidStack aFluid) { - mFluid = aFluid; - if (mFluid != null) { - mFluid.amount = Math.min(mFluid.amount, getRealCapacity()); - } - return mFluid; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (isFluidChangingAllowed() && getFillableStack() != null && getFillableStack().amount <= 0) - setFillableStack(null); - - if (mVoidFluidFull && getFillableStack() != null) { - mVoidFluidPart = false; - mLockFluid = false; - setFillableStack(null); - } - - if (doesEmptyContainers()) { - FluidStack tFluid = GT_Utility.getFluidForFilledItem(mInventory[getInputSlot()], true); - if (tFluid != null && isFluidInputAllowed(tFluid)) { - if (getFillableStack() == null) { - if (isFluidInputAllowed(tFluid)) { - if ((tFluid.amount <= getRealCapacity()) || mVoidFluidPart) { - tFluid = tFluid.copy(); - if (aBaseMetaTileEntity.addStackToSlot( - getOutputSlot(), - GT_Utility.getContainerForFilledItem(mInventory[getInputSlot()], true), - 1)) { - setFillableStack(tFluid); - this.onEmptyingContainerWhenEmpty(); - aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); - } - } - } - } else { - if (tFluid.isFluidEqual(getFillableStack())) { - if ((((long) tFluid.amount + getFillableStack().amount) <= (long) getRealCapacity()) - || mVoidFluidPart - || mVoidFluidFull) { - if (aBaseMetaTileEntity.addStackToSlot( - getOutputSlot(), - GT_Utility.getContainerForFilledItem(mInventory[getInputSlot()], true), - 1)) { - getFillableStack().amount += Math - .min(tFluid.amount, getRealCapacity() - getFillableStack().amount); - aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); - } - } - } - } - } - } - - if (doesFillContainers()) { - ItemStack tOutput = GT_Utility - .fillFluidContainer(getDrainableStack(), mInventory[getInputSlot()], false, true); - if (tOutput != null && aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), tOutput, 1)) { - FluidStack tFluid = GT_Utility.getFluidForFilledItem(tOutput, true); - aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); - if (tFluid != null) getDrainableStack().amount -= tFluid.amount; - if (getDrainableStack().amount <= 0 && isFluidChangingAllowed()) setDrainableStack(null); - } - } - } - } - - @Override - public int fill(FluidStack aFluid, boolean doFill) { - if (aFluid == null || aFluid.getFluid() - .getID() <= 0 || aFluid.amount <= 0 || !canTankBeFilled() || !isFluidInputAllowed(aFluid)) return 0; - if (getFillableStack() != null && !getFillableStack().isFluidEqual(aFluid)) { - return 0; - } - - FluidStack fillableStack = getFillableStack(); - if (fillableStack == null) { - fillableStack = aFluid.copy(); - fillableStack.amount = 0; - } - - int amount = Math.min(aFluid.amount, getRealCapacity() - fillableStack.amount); - if (doFill) { - fillableStack.amount += amount; - if (getFillableStack() == null) setFillableStack(fillableStack); - getBaseMetaTileEntity().markDirty(); - } - return (mVoidFluidPart || mVoidFluidFull) ? aFluid.amount : amount; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - if (mOutputFluid && getDrainableStack() != null && (aTick % 20 == 0)) { - IFluidHandler tTank = aBaseMetaTileEntity.getITankContainerAtSide(aBaseMetaTileEntity.getFrontFacing()); - if (tTank != null) { - FluidStack tDrained = drain(20 * (1 << (3 + 2 * tierPump(mTier))), false); - if (tDrained != null) { - int tFilledAmount = tTank.fill(aBaseMetaTileEntity.getBackFacing(), tDrained, false); - if (tFilledAmount > 0) - tTank.fill(aBaseMetaTileEntity.getBackFacing(), drain(tFilledAmount, true), true); - } - } - } - } - } - - @Override - public boolean isFacingValid(ForgeDirection side) { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return true; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return false; - } - - @Override - public boolean isLiquidInput(ForgeDirection side) { - return mAllowInputFromOutputSide || side != getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean isLiquidOutput(ForgeDirection side) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public int getTankPressure() { - return 100; - } - - public boolean allowOverflow() { - return mVoidFluidPart || mVoidFluidFull; - } - - @Override - public int getCapacity() { - return allowOverflow() ? Integer.MAX_VALUE : getRealCapacity(); - } - - @Override - public int getRealCapacity() { - return commonSizeCompute(mTier); - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public FluidTankInfo getInfo() { - return new FluidTankInfo(getFluid(), getCapacity()); - } - - @Override - public FluidTankInfo[] getTankInfo(ForgeDirection side) { - return new FluidTankInfo[] { getInfo() }; - } - - @Nonnull - public FluidTankInfo[] getRealTankInfo(ForgeDirection side) { - return new FluidTankInfo[] { new FluidTankInfo(getFluid(), getRealCapacity()) }; - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - - NBTTagCompound tag = accessor.getNBTData(); - FluidStack fluid = tag.hasKey("mFluid") ? FluidStack.loadFluidStackFromNBT(tag.getCompoundTag("mFluid")) : null; - if (fluid != null && fluid.amount >= 0) { - currenttip.remove(0); - currenttip.add( - 0, - formatNumbers(fluid.amount) + " / " - + formatNumbers(getRealCapacity()) - + " L " - + fluid.getLocalizedName()); - } else { - currenttip.add(0, "Tank Empty"); - } - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - FluidStack fluid = getFluid(); - if (fluid != null) tag.setTag("mFluid", fluid.writeToNBT(new NBTTagCompound())); - else if (tag.hasKey("mFluid")) tag.removeTag("mFluid"); - } - - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - fluidTank.setAllowOverflow(allowOverflow()); - fluidTank.setPreventDraining(mLockFluid); - - FluidSlotWidget fluidSlotWidget = new FluidSlotWidget(fluidTank); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(7, 16) - .setSize(71, 45)) - .widget( - new SlotWidget(inventoryHandler, getInputSlot()) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_IN) - .setPos(79, 16)) - .widget( - new SlotWidget(inventoryHandler, getOutputSlot()).setAccess(true, false) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_OUT) - .setPos(79, 43)) - .widget( - fluidSlotWidget.setOnClickContainer(widget -> onEmptyingContainerWhenEmpty()) - .setBackground(GT_UITextures.TRANSPARENT) - .setPos(58, 41)) - .widget( - new TextWidget(StatCollector.translateToLocal("GT5U.machines.digitaltank.fluid.amount")) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(10, 20)) - .widget( - new TextWidget().setStringSupplier(() -> numberFormat.format(mFluid != null ? mFluid.amount : 0)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(10, 30)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(98, 16) - .setSize(71, 45)) - .widget(new FluidLockWidget(this).setPos(149, 41)) - .widget( - new TextWidget(StatCollector.translateToLocal("GT5U.machines.digitaltank.lockfluid.label")) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(101, 20)) - .widget(TextWidget.dynamicString(() -> { - FluidStack fluidStack = FluidRegistry.getFluidStack(lockedFluidName, 1); - return fluidStack != null ? fluidStack.getLocalizedName() - : StatCollector.translateToLocal("GT5U.machines.digitaltank.lockfluid.empty"); - }) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setTextAlignment(Alignment.CenterLeft) - .setMaxWidth(65) - .setPos(101, 30)) - .widget(new CycleButtonWidget().setToggle(() -> mOutputFluid, val -> { - mOutputFluid = val; - if (!mOutputFluid) { - GT_Utility.sendChatToPlayer( - buildContext.getPlayer(), - GT_Utility.trans("262", "Fluid Auto Output Disabled")); - } else { - GT_Utility.sendChatToPlayer( - buildContext.getPlayer(), - GT_Utility.trans("263", "Fluid Auto Output Enabled")); - } - }) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_AUTOOUTPUT_FLUID) - .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.autooutput.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(7, 63) - .setSize(18, 18)) - .widget(new CycleButtonWidget().setToggle(() -> mLockFluid, val -> { - lockFluid(val); - fluidTank.setPreventDraining(mLockFluid); - - String inBrackets; - if (mLockFluid) { - if (mFluid == null) { - setLockedFluidName(null); - inBrackets = GT_Utility - .trans("264", "currently none, will be locked to the next that is put in"); - } else { - setLockedFluidName( - getDrainableStack().getFluid() - .getName()); - inBrackets = getDrainableStack().getLocalizedName(); - } - GT_Utility.sendChatToPlayer( - buildContext.getPlayer(), - String.format("%s (%s)", GT_Utility.trans("265", "1 specific Fluid"), inBrackets)); - } else { - fluidTank.drain(0, true); - GT_Utility.sendChatToPlayer( - buildContext.getPlayer(), - GT_Utility.trans("266", "Lock Fluid Mode Disabled")); - } - fluidSlotWidget.notifyTooltipChange(); - }) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_LOCK) - .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.lockfluid.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(25, 63) - .setSize(18, 18)) - .widget(new CycleButtonWidget().setToggle(() -> mAllowInputFromOutputSide, val -> { - mAllowInputFromOutputSide = val; - if (!mAllowInputFromOutputSide) { - GT_Utility.sendChatToPlayer(buildContext.getPlayer(), GT_Utility.getTrans("096")); - } else { - GT_Utility.sendChatToPlayer(buildContext.getPlayer(), GT_Utility.getTrans("095")); - } - }) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_INPUT_FROM_OUTPUT_SIDE) - .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.inputfromoutput.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(43, 63) - .setSize(18, 18)) - .widget(new CycleButtonWidget().setToggle(() -> mVoidFluidPart, val -> { - mVoidFluidPart = val; - fluidTank.setAllowOverflow(allowOverflow()); - if (!mVoidFluidPart) { - GT_Utility.sendChatToPlayer( - buildContext.getPlayer(), - GT_Utility.trans("267", "Overflow Voiding Mode Disabled")); - } else { - GT_Utility.sendChatToPlayer( - buildContext.getPlayer(), - GT_Utility.trans("268", "Overflow Voiding Mode Enabled")); - } - }) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_TANK_VOID_EXCESS) - .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.voidoverflow.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(98, 63) - .setSize(18, 18)) - .widget(new CycleButtonWidget().setToggle(() -> mVoidFluidFull, val -> { - mVoidFluidFull = val; - fluidTank.setAllowOverflow(allowOverflow()); - if (!mVoidFluidFull) { - GT_Utility - .sendChatToPlayer(buildContext.getPlayer(), GT_Utility.trans("269", "Void Full Mode Disabled")); - } else { - GT_Utility - .sendChatToPlayer(buildContext.getPlayer(), GT_Utility.trans("270", "Void Full Mode Enabled")); - } - }) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_TANK_VOID_ALL) - .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.voidfull.tooltip")) - .setTooltipShowUpDelay(TOOLTIP_DELAY) - .setPos(116, 63) - .setSize(18, 18)); - } -} diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_Locker.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_Locker.java deleted file mode 100644 index abce9514de..0000000000 --- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_Locker.java +++ /dev/null @@ -1,283 +0,0 @@ -package gregtech.common.tileentities.storage; - -import static gregtech.api.enums.Textures.BlockIcons.LOCKERS; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_IN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_LOCKER; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.SoundResource; -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_ItemStack; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GT_MetaTileEntity_Locker extends GT_MetaTileEntity_TieredMachineBlock { - - private static final String CHARGE_SLOT_WAILA_TAG = "charge_slot_"; - public byte mType = 0; - - public GT_MetaTileEntity_Locker(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 4, "Stores and recharges Armor"); - } - - public GT_MetaTileEntity_Locker(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 4, aDescription, aTextures); - } - - public GT_MetaTileEntity_Locker(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 4, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - String[] desc = new String[mDescriptionArray.length + 1]; - System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); - desc[mDescriptionArray.length] = "Click with Screwdriver to change Style"; - return desc; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[3][17][]; - for (byte i = -1; i < 16; i = (byte) (i + 1)) { - ITexture[] tmp0 = { MACHINE_CASINGS[this.mTier][(i + 1)] }; - rTextures[0][(i + 1)] = tmp0; - ITexture[] tmp1 = { MACHINE_CASINGS[this.mTier][(i + 1)], OVERLAYS_ENERGY_IN[this.mTier] }; - rTextures[1][(i + 1)] = tmp1; - ITexture[] tmp2 = { MACHINE_CASINGS[this.mTier][(i + 1)], TextureFactory.of(OVERLAY_LOCKER) }; - rTextures[2][(i + 1)] = tmp2; - } - return rTextures; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, - int colorIndex, boolean aActive, boolean redstoneLevel) { - if (side == aFacing) { - return new ITexture[] { this.mTextures[2][(colorIndex + 1)][0], this.mTextures[2][(colorIndex + 1)][1], - LOCKERS[Math.abs(this.mType % LOCKERS.length)] }; - } - return this.mTextures[0][(colorIndex + 1)]; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Locker(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return (facing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getBackFacing(); - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long maxEUStore() { - return gregtech.api.enums.GT_Values.V[this.mTier] * maxAmperesIn(); - } - - @Override - public long maxEUInput() { - return gregtech.api.enums.GT_Values.V[this.mTier]; - } - - @Override - public long maxAmperesIn() { - return this.mInventory.length * 2L; - } - - @Override - public int rechargerSlotStartIndex() { - return 0; - } - - @Override - public int rechargerSlotCount() { - return getBaseMetaTileEntity().isAllowedToWork() ? this.mInventory.length : 0; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setByte("mType", this.mType); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.mType = aNBT.getByte("mType"); - } - - @Override - public void onValueUpdate(byte aValue) { - this.mType = aValue; - } - - @Override - public byte getUpdateData() { - return this.mType; - } - - @Override - public void doSound(byte aIndex, double aX, double aY, double aZ) { - if (aIndex == 16) { - GT_Utility.doSoundAtClient(SoundResource.RANDOM_CLICK, 1, 1.0F); - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getFrontFacing()) { - this.mType = ((byte) (this.mType + 1)); - } - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { - return side != getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - if ((aBaseMetaTileEntity.isServerSide()) && (side == aBaseMetaTileEntity.getFrontFacing())) { - for (int i = 0; i < 4; i++) { - ItemStack tSwapStack = this.mInventory[i]; - this.mInventory[i] = aPlayer.inventory.armorInventory[i]; - aPlayer.inventory.armorInventory[i] = tSwapStack; - } - aPlayer.inventoryContainer.detectAndSendChanges(); - sendSound((byte) 16); - } - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - for (int i = 0; i < 4; i++) { - final ItemStack itemStack = this.mInventory[3 - i]; - - if (itemStack != null) { - tag.setTag(CHARGE_SLOT_WAILA_TAG + i, itemStack.writeToNBT(new NBTTagCompound())); - } - } - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - - final NBTTagCompound tag = accessor.getNBTData(); - - for (int i = 0; i < 4; i++) { - final String index = GT_Utility.formatNumbers(i + 1); - - if (tag.hasKey(CHARGE_SLOT_WAILA_TAG + i)) { - final ItemStack slotItem = ItemStack - .loadItemStackFromNBT(tag.getCompoundTag(CHARGE_SLOT_WAILA_TAG + i)); - assert slotItem != null; - - currentTip.add( - GT_ModHandler.getElectricItemCharge(slotItem) - .map(chargeInfo -> { - final float ratio = (float) chargeInfo[0] / (float) chargeInfo[1]; - final EnumChatFormatting chargeFormat; - - if (ratio == 0L) { - chargeFormat = EnumChatFormatting.GRAY; - } else if (ratio < 0.25) { - chargeFormat = EnumChatFormatting.RED; - } else if (ratio < 0.5) { - chargeFormat = EnumChatFormatting.GOLD; - } else if (ratio < 0.75) { - chargeFormat = EnumChatFormatting.YELLOW; - } else if (ratio < 1L) { - chargeFormat = EnumChatFormatting.GREEN; - } else { - chargeFormat = EnumChatFormatting.AQUA; - } - - return StatCollector.translateToLocalFormatted( - "gt.locker.waila_armor_slot_charged", - index, - slotItem.getDisplayName(), - chargeFormat, - GT_Utility.formatNumbers(ratio * 100)); - }) - .orElseGet( - // Lazy initialization - () -> StatCollector.translateToLocalFormatted( - "gt.locker.waila_armor_slot_generic", - index, - slotItem.getDisplayName()))); - } else { - currentTip.add(StatCollector.translateToLocalFormatted("gt.locker.waila_armor_slot_none", index)); - } - } - } -} diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumChest.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumChest.java deleted file mode 100644 index c830cd4e52..0000000000 --- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumChest.java +++ /dev/null @@ -1,102 +0,0 @@ -package gregtech.common.tileentities.storage; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.Nullable; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -public class GT_MetaTileEntity_QuantumChest extends GT_MetaTileEntity_DigitalChestBase { - - public int mItemCount = 0; - public ItemStack mItemStack = null; - NBTTagList mInvData = null; - - public GT_MetaTileEntity_QuantumChest(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_QuantumChest(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_QuantumChest(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_QuantumChest(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - mInvData = new NBTTagList(); - for (int i = 0; i < 3; i++) { - if (mInventory[i] != null) { - NBTTagCompound tNBT = new NBTTagCompound(); - tNBT.setByte("Count", (byte) mInventory[i].stackSize); - tNBT.setShort("Damage", (short) mInventory[i].getItemDamage()); - tNBT.setShort("id", (short) Item.getIdFromItem(mInventory[i].getItem())); - tNBT.setInteger("IntSlot", i); - if (mInventory[i].hasTagCompound()) { - tNBT.setTag("tag", mInventory[i].getTagCompound()); - } - mInvData.appendTag(tNBT); - } - } - if (mItemStack != null) aNBT.setTag("mItemStack", getItemStack().writeToNBT(new NBTTagCompound())); - aNBT.setTag("Inventory", mInvData); - aNBT.setInteger("mItemCount", getItemCount()); - aNBT.setBoolean("mVoidOverflow", mVoidOverflow); - - super.setItemNBT(aNBT); - } - - @Override - protected String chestName() { - return "Quantum Chest"; - } - - @Override - protected int getItemCount() { - return mItemCount; - } - - @Override - public void setItemCount(int aCount) { - mItemCount = aCount; - } - - @Override - protected ItemStack getItemStack() { - return mItemStack; - } - - @Override - protected void setItemStack(ItemStack s) { - mItemStack = s; - } - - @Nullable - @Override - public List getItemsForHoloGlasses() { - List ret = new ArrayList<>(); - ret.add(getStackInSlot(0)); - ret.add(getStackInSlot(1)); - if (mItemStack != null) { - ItemStack copy = mItemStack.copy(); - copy.stackSize = mItemCount; - ret.add(copy); - } - return ret; - } -} diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumTank.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumTank.java deleted file mode 100644 index 4d51d0b634..0000000000 --- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_QuantumTank.java +++ /dev/null @@ -1,55 +0,0 @@ -package gregtech.common.tileentities.storage; - -import net.minecraft.util.EnumChatFormatting; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_QuantumTank extends GT_MetaTileEntity_DigitalTankBase { - - public GT_MetaTileEntity_QuantumTank(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_QuantumTank(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_QuantumTank(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_QuantumTank(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public String[] getInfoData() { - - if (mFluid == null) { - return new String[] { EnumChatFormatting.BLUE + "Quantum Tank" + EnumChatFormatting.RESET, "Stored Fluid:", - EnumChatFormatting.GOLD + "No Fluid" + EnumChatFormatting.RESET, - EnumChatFormatting.GREEN + Integer.toString(0) - + " L" - + EnumChatFormatting.RESET - + " " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getCapacity()) - + " L" - + EnumChatFormatting.RESET }; - } - return new String[] { EnumChatFormatting.BLUE + "Quantum Tank" + EnumChatFormatting.RESET, "Stored Fluid:", - EnumChatFormatting.GOLD + mFluid.getLocalizedName() + EnumChatFormatting.RESET, - EnumChatFormatting.GREEN + GT_Utility.formatNumbers(mFluid.amount) - + " L" - + EnumChatFormatting.RESET - + " " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getCapacity()) - + " L" - + EnumChatFormatting.RESET }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_SuperChest.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_SuperChest.java deleted file mode 100644 index 271402f0de..0000000000 --- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_SuperChest.java +++ /dev/null @@ -1,30 +0,0 @@ -package gregtech.common.tileentities.storage; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -public class GT_MetaTileEntity_SuperChest extends GT_MetaTileEntity_QuantumChest { - - public GT_MetaTileEntity_SuperChest(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_SuperChest(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_SuperChest(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - protected String chestName() { - return "Super Chest"; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_SuperChest(mName, mTier, mDescriptionArray, mTextures); - } -} diff --git a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_SuperTank.java b/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_SuperTank.java deleted file mode 100644 index 4f0bdbc237..0000000000 --- a/src/main/java/gregtech/common/tileentities/storage/GT_MetaTileEntity_SuperTank.java +++ /dev/null @@ -1,54 +0,0 @@ -package gregtech.common.tileentities.storage; - -import net.minecraft.util.EnumChatFormatting; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_SuperTank extends GT_MetaTileEntity_DigitalTankBase { - - public GT_MetaTileEntity_SuperTank(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_SuperTank(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public GT_MetaTileEntity_SuperTank(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_SuperTank(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public String[] getInfoData() { - - if (mFluid == null) { - return new String[] { EnumChatFormatting.BLUE + "Super Tank" + EnumChatFormatting.RESET, "Stored Fluid:", - EnumChatFormatting.GOLD + "No Fluid" + EnumChatFormatting.RESET, - EnumChatFormatting.GREEN + "0 L" - + EnumChatFormatting.RESET - + " " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getCapacity()) - + " L" - + EnumChatFormatting.RESET }; - } - return new String[] { EnumChatFormatting.BLUE + "Super Tank" + EnumChatFormatting.RESET, "Stored Fluid:", - EnumChatFormatting.GOLD + mFluid.getLocalizedName() + EnumChatFormatting.RESET, - EnumChatFormatting.GREEN + GT_Utility.formatNumbers(mFluid.amount) - + " L" - + EnumChatFormatting.RESET - + " " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getCapacity()) - + " L" - + EnumChatFormatting.RESET }; - } -} diff --git a/src/main/java/gregtech/common/tileentities/storage/MTEDigitalChestBase.java b/src/main/java/gregtech/common/tileentities/storage/MTEDigitalChestBase.java new file mode 100644 index 0000000000..96ec6c06ae --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/storage/MTEDigitalChestBase.java @@ -0,0 +1,556 @@ +package gregtech.common.tileentities.storage; + +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCHEST; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_SCHEST_GLOW; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import appeng.api.storage.IMEMonitor; +import appeng.api.storage.IMEMonitorHandlerReceiver; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEItemStack; +import appeng.api.storage.data.IItemList; +import appeng.util.item.AEItemStack; +import appeng.util.item.ItemList; +import gregtech.api.enums.GTValues; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.objects.AE2DigitalChestHandler; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public abstract class MTEDigitalChestBase extends MTETieredMachineBlock + implements IMEMonitor, IAddUIWidgets { + + protected boolean mVoidOverflow = false; + protected boolean mDisableFilter; + private Map, Object> listeners = null; + + public MTEDigitalChestBase(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 3, + new String[] { "This Chest stores " + GTUtility.formatNumbers(commonSizeCompute(aTier)) + " Blocks", + "Use a screwdriver to enable", "voiding items on overflow", "Will keep its contents when harvested", }); + } + + protected static int commonSizeCompute(int tier) { + return switch (tier) { + case 1 -> 4000000; + case 2 -> 8000000; + case 3 -> 16000000; + case 4 -> 32000000; + case 5 -> 64000000; + case 6 -> 128000000; + case 7 -> 256000000; + case 8 -> 512000000; + case 9 -> 1024000000; + case 10 -> 2147483640; + default -> 0; + }; + } + + public MTEDigitalChestBase(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + public MTEDigitalChestBase(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + @Override + public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { + if (stack.hasTagCompound() && stack.stackTagCompound.hasKey("mItemStack")) { + final ItemStack tContents = ItemStack + .loadItemStackFromNBT(stack.stackTagCompound.getCompoundTag("mItemStack")); + final int tSize = stack.stackTagCompound.getInteger("mItemCount"); + if (tContents != null && tSize > 0) { + tooltip.add( + GTLanguageManager.addStringLocalization("TileEntity_CHEST_INFO", "Contains Item: ") + + EnumChatFormatting.YELLOW + + tContents.getDisplayName() + + EnumChatFormatting.GRAY); + tooltip.add( + GTLanguageManager.addStringLocalization("TileEntity_CHEST_AMOUNT", "Item Amount: ") + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(tSize) + + EnumChatFormatting.GRAY); + } + } + } + + public static void registerAEIntegration() { + appeng.api.AEApi.instance() + .registries() + .externalStorage() + .addExternalStorageInterface(new AE2DigitalChestHandler()); + } + + @Override + public void addListener(IMEMonitorHandlerReceiver imeMonitorHandlerReceiver, Object o) { + if (listeners == null) listeners = new HashMap<>(); + listeners.put(imeMonitorHandlerReceiver, o); + } + + @Override + public void removeListener(IMEMonitorHandlerReceiver imeMonitorHandlerReceiver) { + if (listeners == null) listeners = new HashMap<>(); + listeners.remove(imeMonitorHandlerReceiver); + } + + @Override + public appeng.api.config.AccessRestriction getAccess() { + return appeng.api.config.AccessRestriction.READ_WRITE; + } + + @Override + public boolean isPrioritized(IAEItemStack iaeItemStack) { + ItemStack s = getItemStack(); + if (s == null || iaeItemStack == null) return false; + return iaeItemStack.isSameType(s); + } + + @Override + public boolean canAccept(IAEItemStack iaeItemStack) { + ItemStack s = getItemStack(); + if (s == null || iaeItemStack == null) return true; + return iaeItemStack.isSameType(s); + } + + @Override + public int getPriority() { + return 0; + } + + @Override + public int getSlot() { + return 0; + } + + @Override + public boolean validForPass(int i) { + return true; + } + + protected abstract ItemStack getItemStack(); + + protected abstract void setItemStack(ItemStack s); + + @SuppressWarnings("unchecked") + @Override + public IItemList getAvailableItems(final IItemList out, int iteration) { + ItemStack storedStack = getItemStack(); + if (storedStack != null) { + AEItemStack s = AEItemStack.create(storedStack); + s.setStackSize(getItemCount()); + out.add(s); + } + return out; + } + + @Override + public IItemList getStorageList() { + IItemList res = new ItemList(); + ItemStack storedStack = getItemStack(); + if (storedStack != null) { + AEItemStack s = AEItemStack.create(storedStack); + s.setStackSize(getItemCount()); + res.add(s); + } + return res; + } + + protected abstract int getItemCount(); + + @Override + public abstract void setItemCount(int aCount); + + @Override + public int getMaxItemCount() { + return commonSizeCompute(mTier); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return new ITexture[0][0][0]; + } + + @Override + public IAEItemStack injectItems(final IAEItemStack input, final appeng.api.config.Actionable mode, + final appeng.api.networking.security.BaseActionSource src) { + if (getBaseMetaTileEntity() == null) return input; + + final ItemStack inputStack = input.getItemStack(); + final int maxCapacity = getMaxItemCount(); + final int itemCount = getItemCount(); + final long toAdd = input.getStackSize(); + final ItemStack storedStack = getItemStack(); + + if (storedStack != null && !GTUtility.areStacksEqual(storedStack, inputStack)) { + // Can't stack with existing item, just return the input. + return input; + } + + // Number of items not added because there's too much to add. + final long notAdded = itemCount + toAdd - maxCapacity; + + if (mode == appeng.api.config.Actionable.MODULATE) { + final int newCount = (int) Math.min((long) maxCapacity, itemCount + toAdd); + + if (storedStack == null) { + setItemStack(inputStack.copy()); + } + setItemCount(newCount); + getBaseMetaTileEntity().markDirty(); + } + if (mVoidOverflow || notAdded <= 0) { + return null; + } else { + return input.copy() + .setStackSize(notAdded); + } + } + + @Override + public IAEItemStack extractItems(final IAEItemStack request, final appeng.api.config.Actionable mode, + final appeng.api.networking.security.BaseActionSource src) { + if (request.isSameType(getItemStack())) { + if (getBaseMetaTileEntity() == null) return null; + if (mode != appeng.api.config.Actionable.SIMULATE) getBaseMetaTileEntity().markDirty(); + if (request.getStackSize() >= getItemCount()) { + AEItemStack result = AEItemStack.create(getItemStack()); + result.setStackSize(getItemCount()); + if (mode != appeng.api.config.Actionable.SIMULATE) setItemCount(0); + return result; + } else { + if (mode != appeng.api.config.Actionable.SIMULATE) + setItemCount(getItemCount() - (int) request.getStackSize()); + return request.copy(); + } + } + return null; + } + + @Override + public StorageChannel getChannel() { + return StorageChannel.ITEMS; + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + mVoidOverflow = !mVoidOverflow; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal( + mVoidOverflow ? "GT5U.machines.digitalchest.voidoverflow.enabled" + : "GT5U.machines.digitalchest.voidoverflow.disabled")); + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (super.onSolderingToolRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ)) return true; + mDisableFilter = !mDisableFilter; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal( + mDisableFilter ? "GT5U.machines.digitalchest.inputfilter.disabled" + : "GT5U.machines.digitalchest.inputfilter.enabled")); + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + + if (getBaseMetaTileEntity().isServerSide() && getBaseMetaTileEntity().isAllowedToWork()) { + if ((getItemCount() <= 0)) { + setItemStack(null); + setItemCount(0); + } + if (getItemStack() == null && mInventory[0] != null) { + setItemStack(mInventory[0].copy()); + } + int count = getItemCount(); + ItemStack stack = getItemStack(); + int savedCount = count; + + if ((mInventory[0] != null) && ((count < getMaxItemCount()) || mVoidOverflow) + && GTUtility.areStacksEqual(mInventory[0], stack)) { + count += mInventory[0].stackSize; + if (count <= getMaxItemCount()) { + mInventory[0] = null; + } else { + if (mVoidOverflow) { + mInventory[0] = null; + } else { + mInventory[0].stackSize = (count - getMaxItemCount()); + } + count = getMaxItemCount(); + } + } + if (mInventory[1] == null && stack != null) { + mInventory[1] = stack.copy(); + mInventory[1].stackSize = Math.min(stack.getMaxStackSize(), count); + count -= mInventory[1].stackSize; + } else if ((count > 0) && GTUtility.areStacksEqual(mInventory[1], stack) + && mInventory[1].getMaxStackSize() > mInventory[1].stackSize) { + int tmp = Math.min(count, mInventory[1].getMaxStackSize() - mInventory[1].stackSize); + mInventory[1].stackSize += tmp; + count -= tmp; + } + setItemCount(count); + if (stack != null) { + mInventory[2] = stack.copy(); + mInventory[2].stackSize = Math.min(stack.getMaxStackSize(), count); + } else { + mInventory[2] = null; + } + + notifyListeners(count - savedCount, stack); + if (count != savedCount) getBaseMetaTileEntity().markDirty(); + } + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex != 2; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public int getProgresstime() { + return getItemCount() + (mInventory[0] == null ? 0 : mInventory[0].stackSize) + + (mInventory[1] == null ? 0 : mInventory[1].stackSize); + } + + @Override + public int maxProgresstime() { + return getMaxItemCount(); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + + if (getItemStack() == null) { + return new String[] { EnumChatFormatting.BLUE + chestName() + EnumChatFormatting.RESET, "Stored Items:", + EnumChatFormatting.GOLD + "No Items" + EnumChatFormatting.RESET, + EnumChatFormatting.GREEN + "0" + + EnumChatFormatting.RESET + + " " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getMaxItemCount()) + + EnumChatFormatting.RESET }; + } + return new String[] { EnumChatFormatting.BLUE + chestName() + EnumChatFormatting.RESET, "Stored Items:", + EnumChatFormatting.GOLD + getItemStack().getDisplayName() + EnumChatFormatting.RESET, + EnumChatFormatting.GREEN + GTUtility.formatNumbers(getItemCount()) + + EnumChatFormatting.RESET + + " " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getMaxItemCount()) + + EnumChatFormatting.RESET }; + } + + @Override + public ItemStack[] getStoredItemData() { + return mInventory; + } + + protected abstract String chestName(); + + private void notifyListeners(int count, ItemStack stack) { + if (listeners == null) { + listeners = new HashMap<>(); + return; + } + if (count == 0 || stack == null) return; + ItemList change = new ItemList(); + AEItemStack s = AEItemStack.create(stack); + s.setStackSize(count); + change.add(s); + listeners.forEach((l, o) -> { + if (l.isValid(o)) l.postChange(this, change, null); + else removeListener(l); + }); + } + + private boolean hasActiveMEConnection() { + if (listeners == null || listeners.isEmpty()) return false; + for (Map.Entry, Object> e : listeners.entrySet()) { + if ((e.getKey() instanceof appeng.api.parts.IPart)) { + appeng.api.networking.IGridNode n = ((appeng.api.parts.IPart) e.getKey()).getGridNode(); + if (n != null && n.isActive()) return true; + } + } + // if there are no active storage buses - clear the listeners + listeners.clear(); + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mItemCount", getItemCount()); + if (getItemStack() != null) aNBT.setTag("mItemStack", getItemStack().writeToNBT(new NBTTagCompound())); + aNBT.setBoolean("mVoidOverflow", mVoidOverflow); + aNBT.setBoolean("mDisableFilter", mDisableFilter); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (aNBT.hasKey("mItemCount")) setItemCount(aNBT.getInteger("mItemCount")); + if (aNBT.hasKey("mItemStack")) + setItemStack(ItemStack.loadItemStackFromNBT((NBTTagCompound) aNBT.getTag("mItemStack"))); + mVoidOverflow = aNBT.getBoolean("mVoidOverflow"); + mDisableFilter = aNBT.getBoolean("mDisableFilter"); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (GTValues.disableDigitalChestsExternalAccess && hasActiveMEConnection()) return false; + return aIndex == 1; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (GTValues.disableDigitalChestsExternalAccess && hasActiveMEConnection()) return false; + if (aIndex != 0) return false; + if ((mInventory[0] != null && !GTUtility.areStacksEqual(mInventory[0], aStack))) return false; + if (mDisableFilter) return true; + if (getItemStack() == null) return mInventory[1] == null || GTUtility.areStacksEqual(mInventory[1], aStack); + return GTUtility.areStacksEqual(getItemStack(), aStack); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side != aFacing) return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1] }; + return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_SCHEST), + TextureFactory.builder() + .addIcon(OVERLAY_SCHEST_GLOW) + .glow() + .build() }; + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + if (tag.hasKey("itemType", Constants.NBT.TAG_COMPOUND)) { + currenttip.add("Item Count: " + GTUtility.parseNumberToString(tag.getInteger("itemCount"))); + currenttip.add( + "Item Type: " + ItemStack.loadItemStackFromNBT(tag.getCompoundTag("itemType")) + .getDisplayName()); + } else { + currenttip.add("Chest Empty"); + } + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + ItemStack is = getItemStack(); + if (GTUtility.isStackInvalid(is)) return; + int realItemCount = getItemCount(); + if (GTUtility.isStackValid(mInventory[1]) && GTUtility.areStacksEqual(mInventory[1], is)) + realItemCount += mInventory[1].stackSize; + tag.setInteger("itemCount", realItemCount); + tag.setTag("itemType", is.writeToNBT(new NBTTagCompound())); + } + + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + protected int clientItemCount; + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(7, 16) + .setSize(71, 45)) + .widget( + new SlotWidget(inventoryHandler, 0) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_IN) + .setPos(79, 16)) + .widget( + new SlotWidget(inventoryHandler, 1).setAccess(true, false) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_OUT) + .setPos(79, 52)) + .widget( + SlotWidget.phantom(inventoryHandler, 2) + .disableInteraction() + .setBackground(GTUITextures.TRANSPARENT) + .setPos(59, 42)) + .widget( + new TextWidget("Item Amount").setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(10, 20)) + .widget( + new TextWidget().setStringSupplier(() -> numberFormat.format(clientItemCount)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(10, 30)) + .widget( + new FakeSyncWidget.IntegerSyncer( + () -> this instanceof MTEQuantumChest ? ((MTEQuantumChest) this).mItemCount : 0, + value -> clientItemCount = value)); + + } +} diff --git a/src/main/java/gregtech/common/tileentities/storage/MTEDigitalTankBase.java b/src/main/java/gregtech/common/tileentities/storage/MTEDigitalTankBase.java new file mode 100644 index 0000000000..d4b8da15da --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/storage/MTEDigitalTankBase.java @@ -0,0 +1,693 @@ +package gregtech.common.tileentities.storage; + +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_QTANK; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_QTANK_GLOW; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTUtility.formatNumbers; + +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IFluidLockable; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.common.gui.modularui.widget.FluidLockWidget; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public abstract class MTEDigitalTankBase extends MTEBasicTank + implements IFluidLockable, IAddUIWidgets, IAddGregtechLogo { + + public boolean mOutputFluid = false, mVoidFluidPart = false, mVoidFluidFull = false, mLockFluid = false; + protected String lockedFluidName = null; + public boolean mAllowInputFromOutputSide = false; + + public MTEDigitalTankBase(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 3, + new String[] { + StatCollector.translateToLocalFormatted( + "GT5U.machines.digitaltank.tooltip", + formatNumbers(commonSizeCompute(aTier))), + StatCollector.translateToLocal("GT5U.machines.digitaltank.tooltip1"), }); + } + + protected static int commonSizeCompute(int tier) { + return switch (tier) { + case 1 -> 4000000; + case 2 -> 8000000; + case 3 -> 16000000; + case 4 -> 32000000; + case 5 -> 64000000; + case 6 -> 128000000; + case 7 -> 256000000; + case 8 -> 512000000; + case 9 -> 1024000000; + case 10 -> 2147483640; + default -> 0; + }; + } + + private static int tierPump(int tier) { + return switch (tier) { + case 1 -> 2; + case 2 -> 3; + case 3 -> 3; + case 4 -> 4; + case 5 -> 4; + case 6 -> 5; + case 7 -> 5; + case 8 -> 6; + case 9 -> 7; + case 10 -> 8; + default -> 0; + }; + } + + public MTEDigitalTankBase(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + public MTEDigitalTankBase(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return new ITexture[0][0][0]; + } + + @Override + public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { + if (stack.hasTagCompound() + && (stack.stackTagCompound.hasKey("mFluid") || stack.stackTagCompound.hasKey("lockedFluidName"))) { + final FluidStack tContents = FluidStack + .loadFluidStackFromNBT(stack.stackTagCompound.getCompoundTag("mFluid")); + if (tContents != null && tContents.amount > 0) { + tooltip.add( + GTLanguageManager.addStringLocalization("TileEntity_TANK_INFO", "Contains Fluid: ") + + EnumChatFormatting.YELLOW + + tContents.getLocalizedName() + + EnumChatFormatting.GRAY); + tooltip.add( + GTLanguageManager.addStringLocalization("TileEntity_TANK_AMOUNT", "Fluid Amount: ") + + EnumChatFormatting.GREEN + + formatNumbers(tContents.amount) + + " L" + + EnumChatFormatting.GRAY); + } else if (stack.stackTagCompound.hasKey("lockedFluidName")) { + String fluidName = stack.stackTagCompound.getString("lockedFluidName"); + Fluid fluid = FluidRegistry.getFluid(fluidName); + if (fluid == null) return; + // noinspection deprecation + tooltip.add( + StatCollector.translateToLocalFormatted( + "GT5U.item.tank.locked_to", + EnumChatFormatting.YELLOW + fluid.getLocalizedName())); + } + } + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + if (mFluid != null && mFluid.amount >= 0) { + aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); + } + if (mOutputFluid) aNBT.setBoolean("mOutputFluid", true); + if (mVoidFluidPart) aNBT.setBoolean("mVoidOverflow", true); + if (mVoidFluidFull) aNBT.setBoolean("mVoidFluidFull", true); + if (mLockFluid) aNBT.setBoolean("mLockFluid", true); + if (mLockFluid && GTUtility.isStringValid(lockedFluidName)) aNBT.setString("lockedFluidName", lockedFluidName); + if (this.mAllowInputFromOutputSide) aNBT.setBoolean("mAllowInputFromOutputSide", true); + + super.setItemNBT(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("mOutputFluid", this.mOutputFluid); + aNBT.setBoolean("mVoidOverflow", this.mVoidFluidPart); + aNBT.setBoolean("mVoidFluidFull", this.mVoidFluidFull); + aNBT.setBoolean("mLockFluid", mLockFluid); + if (mLockFluid && GTUtility.isStringValid(lockedFluidName)) aNBT.setString("lockedFluidName", lockedFluidName); + else aNBT.removeTag("lockedFluidName"); + aNBT.setBoolean("mAllowInputFromOutputSide", this.mAllowInputFromOutputSide); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mOutputFluid = aNBT.getBoolean("mOutputFluid"); + mVoidFluidPart = aNBT.getBoolean("mVoidOverflow"); + mVoidFluidFull = aNBT.getBoolean("mVoidFluidFull"); + mLockFluid = aNBT.getBoolean("mLockFluid"); + if (mLockFluid) { + setLockedFluidName(aNBT.getString("lockedFluidName")); + } else { + setLockedFluidName(null); + } + mAllowInputFromOutputSide = aNBT.getBoolean("mAllowInputFromOutputSide"); + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return !mLockFluid || lockedFluidName == null + || lockedFluidName.equals( + aFluid.getFluid() + .getName()); + } + + @Override + public boolean isFluidChangingAllowed() { + return !mLockFluid || lockedFluidName == null; + } + + @Override + public void onEmptyingContainerWhenEmpty() { + if (this.lockedFluidName == null && this.mFluid != null && isFluidLocked()) { + setLockedFluidName( + this.mFluid.getFluid() + .getName()); + } + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean doesFillContainers() { + return true; + } + + @Override + public boolean doesEmptyContainers() { + return true; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public boolean displaysItemStack() { + return true; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public void setLockedFluidName(String lockedFluidName) { + lockedFluidName = GTUtility.isStringInvalid(lockedFluidName) ? null : lockedFluidName; + this.lockedFluidName = lockedFluidName; + if (lockedFluidName != null) { + Fluid fluid = FluidRegistry.getFluid(lockedFluidName); + if (fluid != null) { + // create new FluidStack, otherwise existing 0-amount FluidStack will + // prevent new fluid from being locked + setFillableStack(new FluidStack(fluid, getFluidAmount())); + mLockFluid = true; + } + } + // Don't unlock if lockedFluidName == null, + // as player might explicitly enable fluid locking with no fluid contained + } + + @Override + public String getLockedFluidName() { + return this.lockedFluidName; + } + + @Override + public void lockFluid(boolean lock) { + this.mLockFluid = lock; + if (!lock) { + setLockedFluidName(null); + } + } + + @Override + public boolean isFluidLocked() { + return this.mLockFluid; + } + + @Override + public boolean acceptsFluidLock(String name) { + if (name == null || getFluidAmount() == 0) return true; + return mFluid != null && mFluid.getFluid() + .getName() + .equals(name); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection sideDirection, + ForgeDirection facingDirection, int colorIndex, boolean active, boolean redstoneLevel) { + if (sideDirection != ForgeDirection.UP) { + if (sideDirection == baseMetaTileEntity.getFrontFacing()) { + return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_PIPE) }; + } else return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1] }; + } + return new ITexture[] { MACHINE_CASINGS[mTier][colorIndex + 1], TextureFactory.of(OVERLAY_QTANK), + TextureFactory.builder() + .addIcon(OVERLAY_QTANK_GLOW) + .glow() + .build() }; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + mAllowInputFromOutputSide = !mAllowInputFromOutputSide; + GTUtility.sendChatToPlayer( + aPlayer, + mAllowInputFromOutputSide ? GTUtility.getTrans("095") : GTUtility.getTrans("096")); + } + } + + @Override + public FluidStack setFillableStack(FluidStack aFluid) { + mFluid = aFluid; + if (mFluid != null) { + mFluid.amount = Math.min(mFluid.amount, getRealCapacity()); + } + return mFluid; + } + + @Override + public FluidStack setDrainableStack(FluidStack aFluid) { + mFluid = aFluid; + if (mFluid != null) { + mFluid.amount = Math.min(mFluid.amount, getRealCapacity()); + } + return mFluid; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (isFluidChangingAllowed() && getFillableStack() != null && getFillableStack().amount <= 0) + setFillableStack(null); + + if (mVoidFluidFull && getFillableStack() != null) { + mVoidFluidPart = false; + mLockFluid = false; + setFillableStack(null); + } + + if (doesEmptyContainers()) { + FluidStack tFluid = GTUtility.getFluidForFilledItem(mInventory[getInputSlot()], true); + if (tFluid != null && isFluidInputAllowed(tFluid)) { + if (getFillableStack() == null) { + if (isFluidInputAllowed(tFluid)) { + if ((tFluid.amount <= getRealCapacity()) || mVoidFluidPart) { + tFluid = tFluid.copy(); + if (aBaseMetaTileEntity.addStackToSlot( + getOutputSlot(), + GTUtility.getContainerForFilledItem(mInventory[getInputSlot()], true), + 1)) { + setFillableStack(tFluid); + this.onEmptyingContainerWhenEmpty(); + aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); + } + } + } + } else { + if (tFluid.isFluidEqual(getFillableStack())) { + if ((((long) tFluid.amount + getFillableStack().amount) <= (long) getRealCapacity()) + || mVoidFluidPart + || mVoidFluidFull) { + if (aBaseMetaTileEntity.addStackToSlot( + getOutputSlot(), + GTUtility.getContainerForFilledItem(mInventory[getInputSlot()], true), + 1)) { + getFillableStack().amount += Math + .min(tFluid.amount, getRealCapacity() - getFillableStack().amount); + aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); + } + } + } + } + } + } + + if (doesFillContainers()) { + ItemStack tOutput = GTUtility + .fillFluidContainer(getDrainableStack(), mInventory[getInputSlot()], false, true); + if (tOutput != null && aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), tOutput, 1)) { + FluidStack tFluid = GTUtility.getFluidForFilledItem(tOutput, true); + aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); + if (tFluid != null) getDrainableStack().amount -= tFluid.amount; + if (getDrainableStack().amount <= 0 && isFluidChangingAllowed()) setDrainableStack(null); + } + } + } + } + + @Override + public int fill(FluidStack aFluid, boolean doFill) { + if (aFluid == null || aFluid.getFluid() + .getID() <= 0 || aFluid.amount <= 0 || !canTankBeFilled() || !isFluidInputAllowed(aFluid)) return 0; + if (getFillableStack() != null && !getFillableStack().isFluidEqual(aFluid)) { + return 0; + } + + FluidStack fillableStack = getFillableStack(); + if (fillableStack == null) { + fillableStack = aFluid.copy(); + fillableStack.amount = 0; + } + + int amount = Math.min(aFluid.amount, getRealCapacity() - fillableStack.amount); + if (doFill) { + fillableStack.amount += amount; + if (getFillableStack() == null) setFillableStack(fillableStack); + getBaseMetaTileEntity().markDirty(); + } + return (mVoidFluidPart || mVoidFluidFull) ? aFluid.amount : amount; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + if (mOutputFluid && getDrainableStack() != null && (aTick % 20 == 0)) { + IFluidHandler tTank = aBaseMetaTileEntity.getITankContainerAtSide(aBaseMetaTileEntity.getFrontFacing()); + if (tTank != null) { + FluidStack tDrained = drain(20 * (1 << (3 + 2 * tierPump(mTier))), false); + if (tDrained != null) { + int tFilledAmount = tTank.fill(aBaseMetaTileEntity.getBackFacing(), tDrained, false); + if (tFilledAmount > 0) + tTank.fill(aBaseMetaTileEntity.getBackFacing(), drain(tFilledAmount, true), true); + } + } + } + } + } + + @Override + public boolean isFacingValid(ForgeDirection side) { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return true; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isLiquidInput(ForgeDirection side) { + return mAllowInputFromOutputSide || side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isLiquidOutput(ForgeDirection side) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public int getTankPressure() { + return 100; + } + + public boolean allowOverflow() { + return mVoidFluidPart || mVoidFluidFull; + } + + @Override + public int getCapacity() { + return allowOverflow() ? Integer.MAX_VALUE : getRealCapacity(); + } + + @Override + public int getRealCapacity() { + return commonSizeCompute(mTier); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public FluidTankInfo getInfo() { + return new FluidTankInfo(getFluid(), getCapacity()); + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection side) { + return new FluidTankInfo[] { getInfo() }; + } + + @Nonnull + public FluidTankInfo[] getRealTankInfo(ForgeDirection side) { + return new FluidTankInfo[] { new FluidTankInfo(getFluid(), getRealCapacity()) }; + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + + NBTTagCompound tag = accessor.getNBTData(); + FluidStack fluid = tag.hasKey("mFluid") ? FluidStack.loadFluidStackFromNBT(tag.getCompoundTag("mFluid")) : null; + if (fluid != null && fluid.amount >= 0) { + currenttip.remove(0); + currenttip.add( + 0, + formatNumbers(fluid.amount) + " / " + + formatNumbers(getRealCapacity()) + + " L " + + fluid.getLocalizedName()); + } else { + currenttip.add(0, "Tank Empty"); + } + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + FluidStack fluid = getFluid(); + if (fluid != null) tag.setTag("mFluid", fluid.writeToNBT(new NBTTagCompound())); + else if (tag.hasKey("mFluid")) tag.removeTag("mFluid"); + } + + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + fluidTank.setAllowOverflow(allowOverflow()); + fluidTank.setPreventDraining(mLockFluid); + + FluidSlotWidget fluidSlotWidget = new FluidSlotWidget(fluidTank); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(7, 16) + .setSize(71, 45)) + .widget( + new SlotWidget(inventoryHandler, getInputSlot()) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_IN) + .setPos(79, 16)) + .widget( + new SlotWidget(inventoryHandler, getOutputSlot()).setAccess(true, false) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_OUT) + .setPos(79, 43)) + .widget( + fluidSlotWidget.setOnClickContainer(widget -> onEmptyingContainerWhenEmpty()) + .setBackground(GTUITextures.TRANSPARENT) + .setPos(58, 41)) + .widget( + new TextWidget(StatCollector.translateToLocal("GT5U.machines.digitaltank.fluid.amount")) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(10, 20)) + .widget( + new TextWidget().setStringSupplier(() -> numberFormat.format(mFluid != null ? mFluid.amount : 0)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(10, 30)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(98, 16) + .setSize(71, 45)) + .widget(new FluidLockWidget(this).setPos(149, 41)) + .widget( + new TextWidget(StatCollector.translateToLocal("GT5U.machines.digitaltank.lockfluid.label")) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(101, 20)) + .widget(TextWidget.dynamicString(() -> { + FluidStack fluidStack = FluidRegistry.getFluidStack(lockedFluidName, 1); + return fluidStack != null ? fluidStack.getLocalizedName() + : StatCollector.translateToLocal("GT5U.machines.digitaltank.lockfluid.empty"); + }) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setTextAlignment(Alignment.CenterLeft) + .setMaxWidth(65) + .setPos(101, 30)) + .widget(new CycleButtonWidget().setToggle(() -> mOutputFluid, val -> { + mOutputFluid = val; + if (!mOutputFluid) { + GTUtility.sendChatToPlayer( + buildContext.getPlayer(), + GTUtility.trans("262", "Fluid Auto Output Disabled")); + } else { + GTUtility.sendChatToPlayer( + buildContext.getPlayer(), + GTUtility.trans("263", "Fluid Auto Output Enabled")); + } + }) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_AUTOOUTPUT_FLUID) + .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.autooutput.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(7, 63) + .setSize(18, 18)) + .widget(new CycleButtonWidget().setToggle(() -> mLockFluid, val -> { + lockFluid(val); + fluidTank.setPreventDraining(mLockFluid); + + String inBrackets; + if (mLockFluid) { + if (mFluid == null) { + setLockedFluidName(null); + inBrackets = GTUtility + .trans("264", "currently none, will be locked to the next that is put in"); + } else { + setLockedFluidName( + getDrainableStack().getFluid() + .getName()); + inBrackets = getDrainableStack().getLocalizedName(); + } + GTUtility.sendChatToPlayer( + buildContext.getPlayer(), + String.format("%s (%s)", GTUtility.trans("265", "1 specific Fluid"), inBrackets)); + } else { + fluidTank.drain(0, true); + GTUtility + .sendChatToPlayer(buildContext.getPlayer(), GTUtility.trans("266", "Lock Fluid Mode Disabled")); + } + fluidSlotWidget.notifyTooltipChange(); + }) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_LOCK) + .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.lockfluid.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(25, 63) + .setSize(18, 18)) + .widget(new CycleButtonWidget().setToggle(() -> mAllowInputFromOutputSide, val -> { + mAllowInputFromOutputSide = val; + if (!mAllowInputFromOutputSide) { + GTUtility.sendChatToPlayer(buildContext.getPlayer(), GTUtility.getTrans("096")); + } else { + GTUtility.sendChatToPlayer(buildContext.getPlayer(), GTUtility.getTrans("095")); + } + }) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_INPUT_FROM_OUTPUT_SIDE) + .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.inputfromoutput.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(43, 63) + .setSize(18, 18)) + .widget(new CycleButtonWidget().setToggle(() -> mVoidFluidPart, val -> { + mVoidFluidPart = val; + fluidTank.setAllowOverflow(allowOverflow()); + if (!mVoidFluidPart) { + GTUtility.sendChatToPlayer( + buildContext.getPlayer(), + GTUtility.trans("267", "Overflow Voiding Mode Disabled")); + } else { + GTUtility.sendChatToPlayer( + buildContext.getPlayer(), + GTUtility.trans("268", "Overflow Voiding Mode Enabled")); + } + }) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_TANK_VOID_EXCESS) + .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.voidoverflow.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(98, 63) + .setSize(18, 18)) + .widget(new CycleButtonWidget().setToggle(() -> mVoidFluidFull, val -> { + mVoidFluidFull = val; + fluidTank.setAllowOverflow(allowOverflow()); + if (!mVoidFluidFull) { + GTUtility + .sendChatToPlayer(buildContext.getPlayer(), GTUtility.trans("269", "Void Full Mode Disabled")); + } else { + GTUtility + .sendChatToPlayer(buildContext.getPlayer(), GTUtility.trans("270", "Void Full Mode Enabled")); + } + }) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_TANK_VOID_ALL) + .setGTTooltip(() -> mTooltipCache.getData("GT5U.machines.digitaltank.voidfull.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(116, 63) + .setSize(18, 18)); + } +} diff --git a/src/main/java/gregtech/common/tileentities/storage/MTELocker.java b/src/main/java/gregtech/common/tileentities/storage/MTELocker.java new file mode 100644 index 0000000000..6398f56bec --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/storage/MTELocker.java @@ -0,0 +1,284 @@ +package gregtech.common.tileentities.storage; + +import static gregtech.api.enums.Textures.BlockIcons.LOCKERS; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_IN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_LOCKER; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.objects.GTItemStack; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTELocker extends MTETieredMachineBlock { + + private static final String CHARGE_SLOT_WAILA_TAG = "charge_slot_"; + public byte mType = 0; + + public MTELocker(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 4, "Stores and recharges Armor"); + } + + public MTELocker(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + public MTELocker(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + String[] desc = new String[mDescriptionArray.length + 1]; + System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); + desc[mDescriptionArray.length] = "Click with Screwdriver to change Style"; + return desc; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[3][17][]; + for (byte i = -1; i < 16; i = (byte) (i + 1)) { + ITexture[] tmp0 = { MACHINE_CASINGS[this.mTier][(i + 1)] }; + rTextures[0][(i + 1)] = tmp0; + ITexture[] tmp1 = { MACHINE_CASINGS[this.mTier][(i + 1)], OVERLAYS_ENERGY_IN[this.mTier] }; + rTextures[1][(i + 1)] = tmp1; + ITexture[] tmp2 = { MACHINE_CASINGS[this.mTier][(i + 1)], TextureFactory.of(OVERLAY_LOCKER) }; + rTextures[2][(i + 1)] = tmp2; + } + return rTextures; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection aFacing, + int colorIndex, boolean aActive, boolean redstoneLevel) { + if (side == aFacing) { + return new ITexture[] { this.mTextures[2][(colorIndex + 1)][0], this.mTextures[2][(colorIndex + 1)][1], + LOCKERS[Math.abs(this.mType % LOCKERS.length)] }; + } + return this.mTextures[0][(colorIndex + 1)]; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELocker(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return (facing.flag & (ForgeDirection.UP.flag | ForgeDirection.DOWN.flag)) == 0; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getBackFacing(); + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long maxEUStore() { + return GTValues.V[this.mTier] * maxAmperesIn(); + } + + @Override + public long maxEUInput() { + return GTValues.V[this.mTier]; + } + + @Override + public long maxAmperesIn() { + return this.mInventory.length * 2L; + } + + @Override + public int rechargerSlotStartIndex() { + return 0; + } + + @Override + public int rechargerSlotCount() { + return getBaseMetaTileEntity().isAllowedToWork() ? this.mInventory.length : 0; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setByte("mType", this.mType); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.mType = aNBT.getByte("mType"); + } + + @Override + public void onValueUpdate(byte aValue) { + this.mType = aValue; + } + + @Override + public byte getUpdateData() { + return this.mType; + } + + @Override + public void doSound(byte aIndex, double aX, double aY, double aZ) { + if (aIndex == 16) { + GTUtility.doSoundAtClient(SoundResource.RANDOM_CLICK, 1, 1.0F); + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + this.mType = ((byte) (this.mType + 1)); + } + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { + return side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + if ((aBaseMetaTileEntity.isServerSide()) && (side == aBaseMetaTileEntity.getFrontFacing())) { + for (int i = 0; i < 4; i++) { + ItemStack tSwapStack = this.mInventory[i]; + this.mInventory[i] = aPlayer.inventory.armorInventory[i]; + aPlayer.inventory.armorInventory[i] = tSwapStack; + } + aPlayer.inventoryContainer.detectAndSendChanges(); + sendSound((byte) 16); + } + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + for (int i = 0; i < 4; i++) { + final ItemStack itemStack = this.mInventory[3 - i]; + + if (itemStack != null) { + tag.setTag(CHARGE_SLOT_WAILA_TAG + i, itemStack.writeToNBT(new NBTTagCompound())); + } + } + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + + final NBTTagCompound tag = accessor.getNBTData(); + + for (int i = 0; i < 4; i++) { + final String index = GTUtility.formatNumbers(i + 1); + + if (tag.hasKey(CHARGE_SLOT_WAILA_TAG + i)) { + final ItemStack slotItem = ItemStack + .loadItemStackFromNBT(tag.getCompoundTag(CHARGE_SLOT_WAILA_TAG + i)); + assert slotItem != null; + + currentTip.add( + GTModHandler.getElectricItemCharge(slotItem) + .map(chargeInfo -> { + final float ratio = (float) chargeInfo[0] / (float) chargeInfo[1]; + final EnumChatFormatting chargeFormat; + + if (ratio == 0L) { + chargeFormat = EnumChatFormatting.GRAY; + } else if (ratio < 0.25) { + chargeFormat = EnumChatFormatting.RED; + } else if (ratio < 0.5) { + chargeFormat = EnumChatFormatting.GOLD; + } else if (ratio < 0.75) { + chargeFormat = EnumChatFormatting.YELLOW; + } else if (ratio < 1L) { + chargeFormat = EnumChatFormatting.GREEN; + } else { + chargeFormat = EnumChatFormatting.AQUA; + } + + return StatCollector.translateToLocalFormatted( + "gt.locker.waila_armor_slot_charged", + index, + slotItem.getDisplayName(), + chargeFormat, + GTUtility.formatNumbers(ratio * 100)); + }) + .orElseGet( + // Lazy initialization + () -> StatCollector.translateToLocalFormatted( + "gt.locker.waila_armor_slot_generic", + index, + slotItem.getDisplayName()))); + } else { + currentTip.add(StatCollector.translateToLocalFormatted("gt.locker.waila_armor_slot_none", index)); + } + } + } +} diff --git a/src/main/java/gregtech/common/tileentities/storage/MTEQuantumChest.java b/src/main/java/gregtech/common/tileentities/storage/MTEQuantumChest.java new file mode 100644 index 0000000000..5402ded873 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/storage/MTEQuantumChest.java @@ -0,0 +1,102 @@ +package gregtech.common.tileentities.storage; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Nullable; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; + +public class MTEQuantumChest extends MTEDigitalChestBase { + + public int mItemCount = 0; + public ItemStack mItemStack = null; + NBTTagList mInvData = null; + + public MTEQuantumChest(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEQuantumChest(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEQuantumChest(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEQuantumChest(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + mInvData = new NBTTagList(); + for (int i = 0; i < 3; i++) { + if (mInventory[i] != null) { + NBTTagCompound tNBT = new NBTTagCompound(); + tNBT.setByte("Count", (byte) mInventory[i].stackSize); + tNBT.setShort("Damage", (short) mInventory[i].getItemDamage()); + tNBT.setShort("id", (short) Item.getIdFromItem(mInventory[i].getItem())); + tNBT.setInteger("IntSlot", i); + if (mInventory[i].hasTagCompound()) { + tNBT.setTag("tag", mInventory[i].getTagCompound()); + } + mInvData.appendTag(tNBT); + } + } + if (mItemStack != null) aNBT.setTag("mItemStack", getItemStack().writeToNBT(new NBTTagCompound())); + aNBT.setTag("Inventory", mInvData); + aNBT.setInteger("mItemCount", getItemCount()); + aNBT.setBoolean("mVoidOverflow", mVoidOverflow); + + super.setItemNBT(aNBT); + } + + @Override + protected String chestName() { + return "Quantum Chest"; + } + + @Override + protected int getItemCount() { + return mItemCount; + } + + @Override + public void setItemCount(int aCount) { + mItemCount = aCount; + } + + @Override + protected ItemStack getItemStack() { + return mItemStack; + } + + @Override + protected void setItemStack(ItemStack s) { + mItemStack = s; + } + + @Nullable + @Override + public List getItemsForHoloGlasses() { + List ret = new ArrayList<>(); + ret.add(getStackInSlot(0)); + ret.add(getStackInSlot(1)); + if (mItemStack != null) { + ItemStack copy = mItemStack.copy(); + copy.stackSize = mItemCount; + ret.add(copy); + } + return ret; + } +} diff --git a/src/main/java/gregtech/common/tileentities/storage/MTEQuantumTank.java b/src/main/java/gregtech/common/tileentities/storage/MTEQuantumTank.java new file mode 100644 index 0000000000..5ec574a59f --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/storage/MTEQuantumTank.java @@ -0,0 +1,55 @@ +package gregtech.common.tileentities.storage; + +import net.minecraft.util.EnumChatFormatting; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.util.GTUtility; + +public class MTEQuantumTank extends MTEDigitalTankBase { + + public MTEQuantumTank(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEQuantumTank(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEQuantumTank(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEQuantumTank(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public String[] getInfoData() { + + if (mFluid == null) { + return new String[] { EnumChatFormatting.BLUE + "Quantum Tank" + EnumChatFormatting.RESET, "Stored Fluid:", + EnumChatFormatting.GOLD + "No Fluid" + EnumChatFormatting.RESET, + EnumChatFormatting.GREEN + Integer.toString(0) + + " L" + + EnumChatFormatting.RESET + + " " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getCapacity()) + + " L" + + EnumChatFormatting.RESET }; + } + return new String[] { EnumChatFormatting.BLUE + "Quantum Tank" + EnumChatFormatting.RESET, "Stored Fluid:", + EnumChatFormatting.GOLD + mFluid.getLocalizedName() + EnumChatFormatting.RESET, + EnumChatFormatting.GREEN + GTUtility.formatNumbers(mFluid.amount) + + " L" + + EnumChatFormatting.RESET + + " " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getCapacity()) + + " L" + + EnumChatFormatting.RESET }; + } +} diff --git a/src/main/java/gregtech/common/tileentities/storage/MTESuperChest.java b/src/main/java/gregtech/common/tileentities/storage/MTESuperChest.java new file mode 100644 index 0000000000..8e3f35d2c1 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/storage/MTESuperChest.java @@ -0,0 +1,30 @@ +package gregtech.common.tileentities.storage; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; + +public class MTESuperChest extends MTEQuantumChest { + + public MTESuperChest(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTESuperChest(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTESuperChest(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + protected String chestName() { + return "Super Chest"; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESuperChest(mName, mTier, mDescriptionArray, mTextures); + } +} diff --git a/src/main/java/gregtech/common/tileentities/storage/MTESuperTank.java b/src/main/java/gregtech/common/tileentities/storage/MTESuperTank.java new file mode 100644 index 0000000000..1e1e2fb109 --- /dev/null +++ b/src/main/java/gregtech/common/tileentities/storage/MTESuperTank.java @@ -0,0 +1,54 @@ +package gregtech.common.tileentities.storage; + +import net.minecraft.util.EnumChatFormatting; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.util.GTUtility; + +public class MTESuperTank extends MTEDigitalTankBase { + + public MTESuperTank(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTESuperTank(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTESuperTank(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESuperTank(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public String[] getInfoData() { + + if (mFluid == null) { + return new String[] { EnumChatFormatting.BLUE + "Super Tank" + EnumChatFormatting.RESET, "Stored Fluid:", + EnumChatFormatting.GOLD + "No Fluid" + EnumChatFormatting.RESET, + EnumChatFormatting.GREEN + "0 L" + + EnumChatFormatting.RESET + + " " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getCapacity()) + + " L" + + EnumChatFormatting.RESET }; + } + return new String[] { EnumChatFormatting.BLUE + "Super Tank" + EnumChatFormatting.RESET, "Stored Fluid:", + EnumChatFormatting.GOLD + mFluid.getLocalizedName() + EnumChatFormatting.RESET, + EnumChatFormatting.GREEN + GTUtility.formatNumbers(mFluid.amount) + + " L" + + EnumChatFormatting.RESET + + " " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getCapacity()) + + " L" + + EnumChatFormatting.RESET }; + } +} diff --git a/src/main/java/gregtech/common/tools/GTTool.java b/src/main/java/gregtech/common/tools/GTTool.java new file mode 100644 index 0000000000..436ec767a9 --- /dev/null +++ b/src/main/java/gregtech/common/tools/GTTool.java @@ -0,0 +1,196 @@ +package gregtech.common.tools; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.AchievementList; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EntityDamageSource; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; +import net.minecraftforge.event.world.BlockEvent; + +import gregtech.api.damagesources.GTDamageSources; +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IToolStats; +import gregtech.api.items.MetaGeneratedTool; + +public abstract class GTTool implements IToolStats { + + public static final Enchantment[] FORTUNE_ENCHANTMENT = { Enchantment.fortune }; + public static final Enchantment[] LOOTING_ENCHANTMENT = { Enchantment.looting }; + public static final Enchantment[] ZERO_ENCHANTMENTS = new Enchantment[0]; + public static final int[] ZERO_ENCHANTMENT_LEVELS = new int[0]; + + @Override + public int getToolDamagePerBlockBreak() { + return 100; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 800; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { + return aOriginalHurtResistance; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getBreakingSound() { + return SoundResource.RANDOM_BREAK.toString(); + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isGrafter() { + return false; + } + + @Override + public boolean isChainsaw() { + return false; + } + + @Override + public boolean isWrench() { + return false; + } + + @Override + public boolean isWeapon() { + return false; + } + + @Override + public boolean isRangedWeapon() { + return false; + } + + @Override + public boolean isMiningTool() { + return true; + } + + @Override + public DamageSource getDamageSource(EntityLivingBase aPlayer, Entity aEntity) { + return GTDamageSources.getCombatDamage( + (aPlayer instanceof EntityPlayer) ? "player" : "mob", + aPlayer, + (aEntity instanceof EntityLivingBase) ? getDeathMessage(aPlayer, (EntityLivingBase) aEntity) : null); + } + + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new EntityDamageSource((aPlayer instanceof EntityPlayer) ? "player" : "mob", aPlayer) + .func_151519_b(aEntity); + } + + @Override + public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, + int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { + return 0; + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public Enchantment[] getEnchantments(ItemStack aStack) { + return ZERO_ENCHANTMENTS; + } + + @Override + public int[] getEnchantmentLevels(ItemStack aStack) { + return ZERO_ENCHANTMENT_LEVELS; + } + + @Override + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { + aPlayer.triggerAchievement(AchievementList.openInventory); + aPlayer.triggerAchievement(AchievementList.mineWood); + aPlayer.triggerAchievement(AchievementList.buildWorkBench); + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) {} + + @Override + public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, + EntityPlayer aPlayer) { + return aOriginalDamage; + } + + @Override + public float getMagicDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, + EntityPlayer aPlayer) { + return aOriginalDamage; + } + + @Override + public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World worldObj, + int aX, int aY, int aZ) { + return aDefault; + } + + @Override + public String getToolTypeName() { + return "tool"; + } +} diff --git a/src/main/java/gregtech/common/tools/GT_Tool.java b/src/main/java/gregtech/common/tools/GT_Tool.java deleted file mode 100644 index cb637a1bd5..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool.java +++ /dev/null @@ -1,196 +0,0 @@ -package gregtech.common.tools; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.stats.AchievementList; -import net.minecraft.util.DamageSource; -import net.minecraft.util.EntityDamageSource; -import net.minecraft.util.IChatComponent; -import net.minecraft.world.World; -import net.minecraftforge.event.world.BlockEvent; - -import gregtech.api.damagesources.GT_DamageSources; -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.IToolStats; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public abstract class GT_Tool implements IToolStats { - - public static final Enchantment[] FORTUNE_ENCHANTMENT = { Enchantment.fortune }; - public static final Enchantment[] LOOTING_ENCHANTMENT = { Enchantment.looting }; - public static final Enchantment[] ZERO_ENCHANTMENTS = new Enchantment[0]; - public static final int[] ZERO_ENCHANTMENT_LEVELS = new int[0]; - - @Override - public int getToolDamagePerBlockBreak() { - return 100; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 800; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { - return aOriginalHurtResistance; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getBreakingSound() { - return SoundResource.RANDOM_BREAK.toString(); - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isGrafter() { - return false; - } - - @Override - public boolean isChainsaw() { - return false; - } - - @Override - public boolean isWrench() { - return false; - } - - @Override - public boolean isWeapon() { - return false; - } - - @Override - public boolean isRangedWeapon() { - return false; - } - - @Override - public boolean isMiningTool() { - return true; - } - - @Override - public DamageSource getDamageSource(EntityLivingBase aPlayer, Entity aEntity) { - return GT_DamageSources.getCombatDamage( - (aPlayer instanceof EntityPlayer) ? "player" : "mob", - aPlayer, - (aEntity instanceof EntityLivingBase) ? getDeathMessage(aPlayer, (EntityLivingBase) aEntity) : null); - } - - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new EntityDamageSource((aPlayer instanceof EntityPlayer) ? "player" : "mob", aPlayer) - .func_151519_b(aEntity); - } - - @Override - public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, - int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { - return 0; - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public Enchantment[] getEnchantments(ItemStack aStack) { - return ZERO_ENCHANTMENTS; - } - - @Override - public int[] getEnchantmentLevels(ItemStack aStack) { - return ZERO_ENCHANTMENT_LEVELS; - } - - @Override - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { - aPlayer.triggerAchievement(AchievementList.openInventory); - aPlayer.triggerAchievement(AchievementList.mineWood); - aPlayer.triggerAchievement(AchievementList.buildWorkBench); - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {} - - @Override - public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, - EntityPlayer aPlayer) { - return aOriginalDamage; - } - - @Override - public float getMagicDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, - EntityPlayer aPlayer) { - return aOriginalDamage; - } - - @Override - public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World worldObj, - int aX, int aY, int aZ) { - return aDefault; - } - - @Override - public String getToolTypeName() { - return "tool"; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Axe.java b/src/main/java/gregtech/common/tools/GT_Tool_Axe.java deleted file mode 100644 index c54ebac3c9..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Axe.java +++ /dev/null @@ -1,175 +0,0 @@ -package gregtech.common.tools; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraft.world.World; -import net.minecraftforge.event.world.BlockEvent; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; - -public class GT_Tool_Axe extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 100; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 3.0F; - } - - @Override - public float getSpeedMultiplier() { - return 2.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isWeapon() { - return true; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "axe") - || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.wood) - || GT_ToolHarvestHelper.isSpecialBlock(aBlock, Blocks.ladder); - } - - @Override - public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, - int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { - int rAmount = 0; - if ((GregTech_API.sTimber) && (!aPlayer.isSneaking()) - && (OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData)))) { - int tY = aY + 1; - for (int tH = aPlayer.worldObj.getHeight(); tY < tH; tY++) { - if ((aPlayer.worldObj.getBlock(aX, tY, aZ) != aBlock) - || (!aPlayer.worldObj.func_147480_a(aX, tY, aZ, true))) { - break; - } - rAmount++; - } - } - return rAmount; - } - - @Override - public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World aWorld, - int aX, int aY, int aZ) { - - if (aBlock.isWood(aPlayer.worldObj, aX, aY, aZ) - && OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData))) { - float rAmount = 1.0F; - float tIncrement = 1.0F; - if ((GregTech_API.sTimber) && !aPlayer.isSneaking()) { - int tY = aY + 1; - for (int tH = aPlayer.worldObj.getHeight(); (tY < tH) - && (aPlayer.worldObj.getBlock(aX, tY, aZ) == aBlock); tY++) { - tIncrement += 0.1F; - rAmount += tIncrement; - } - } - return 2.0F * aDefault / rAmount; - } - - return (aBlock.getMaterial() == Material.leaves) || (aBlock.getMaterial() == Material.vine) - || (aBlock.getMaterial() == Material.plants) - || (aBlock.getMaterial() == Material.gourd) ? aDefault / 4.0F : aDefault; - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[OrePrefixes.toolHeadAxe.mTextureIndex] - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mIconSet.mTextures[OrePrefixes.stick.mTextureIndex]; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {} - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " has been chopped by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java b/src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java deleted file mode 100644 index a8b83a0221..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_BranchCutter.java +++ /dev/null @@ -1,101 +0,0 @@ -package gregtech.common.tools; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraftforge.event.world.BlockEvent; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.api.util.GT_Utility; - -public class GT_Tool_BranchCutter extends GT_Tool { - - @Override - public float getBaseDamage() { - return 2.5F; - } - - @Override - public float getSpeedMultiplier() { - return 0.25F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 0.25F; - } - - @Override - public boolean isGrafter() { - return true; - } - - @Override - public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, - int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { - if (aBlock.getMaterial() == Material.leaves) { - aEvent.dropChance = Math.min( - 1.0F, - Math.max( - aEvent.dropChance, - (aStack.getItem() - .getHarvestLevel(aStack, "") + 1) * 0.2F)); - if (aBlock == Blocks.leaves) { - aDrops.clear(); - if (((aMetaData & 0x3) == 0) && (aPlayer.worldObj.rand.nextInt(9) <= aFortune * 2)) { - aDrops.add(new ItemStack(Items.apple, 1, 0)); - } else { - aDrops.add(new ItemStack(Blocks.sapling, 1, aMetaData & 0x3)); - } - } else if (aBlock == Blocks.leaves2) { - aDrops.clear(); - aDrops.add(new ItemStack(Blocks.sapling, 1, (aMetaData & 0x3) + 4)); - } else if (aBlock == GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("rubberLeaves", 1L))) { - aDrops.clear(); - aDrops.add(GT_ModHandler.getIC2Item("rubberSapling", 1L)); - } - } - return 0; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "grafter") - || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.leaves); - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.GRAFTER : null; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " has been trimmed by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java b/src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java deleted file mode 100644 index bdfe66401a..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_ButcheryKnife.java +++ /dev/null @@ -1,104 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public class GT_Tool_ButcheryKnife extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 200; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 100; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public float getBaseDamage() { - return 3.0F; - } - - @Override - public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { - return aOriginalHurtResistance * 2; - } - - @Override - public float getSpeedMultiplier() { - return 0.1F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public boolean isWeapon() { - return true; - } - - @Override - public boolean isMiningTool() { - return false; - } - - @Override - public Enchantment[] getEnchantments(ItemStack aStack) { - return LOOTING_ENCHANTMENT; - } - - @Override - public int[] getEnchantmentLevels(ItemStack aStack) { - return new int[] { (2 + GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolQuality) / 2 }; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.BUTCHERYKNIFE : null; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE - + " has butchered " - + EnumChatFormatting.RED - + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE); - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return false; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java b/src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java deleted file mode 100644 index 4d7192ce93..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_BuzzSaw.java +++ /dev/null @@ -1,81 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public class GT_Tool_BuzzSaw extends GT_Tool_Saw { - - @Override - public int getToolDamagePerContainerCraft() { - return 100; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 300; - } - - @Override - public float getBaseDamage() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_ONE.toString(); - } - - @Override - public String getEntityHitSound() { - return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_TWO.toString(); - } - - @Override - public String getMiningSound() { - return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_ONE.toString(); - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return false; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadBuzzSaw.mTextureIndex] - : Textures.ItemIcons.HANDLE_BUZZSAW; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " got buzzed by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_HV.java b/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_HV.java deleted file mode 100644 index 38c1d3acb8..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_HV.java +++ /dev/null @@ -1,57 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; - -public class GT_Tool_Chainsaw_HV extends GT_Tool_Chainsaw_LV { - - @Override - public int getToolDamagePerBlockBreak() { - return 800; - } - - @Override - public int getToolDamagePerDropConversion() { - return 1600; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 12800; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 3200; - } - - @Override - public int getBaseQuality() { - return 1; - } - - @Override - public float getBaseDamage() { - return 4.0F; - } - - @Override - public float getSpeedMultiplier() { - return 4.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? gregtech.api.items.GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadChainsaw.mTextureIndex] - : Textures.ItemIcons.POWER_UNIT_HV; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_LV.java b/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_LV.java deleted file mode 100644 index 142b0c50d2..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_LV.java +++ /dev/null @@ -1,185 +0,0 @@ -package gregtech.common.tools; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraft.world.World; -import net.minecraftforge.common.IShearable; -import net.minecraftforge.event.world.BlockEvent; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public class GT_Tool_Chainsaw_LV extends GT_Tool_Saw { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 800; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 3.0F; - } - - @Override - public float getSpeedMultiplier() { - return 2.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_ONE.toString(); - } - - @Override - public String getEntityHitSound() { - return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_TWO.toString(); - } - - @Override - public String getMiningSound() { - return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_ONE.toString(); - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isChainsaw() { - return true; - } - - @Override - public boolean isWeapon() { - return true; - } - - @Override - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { - super.onToolCrafted(aStack, aPlayer); - try { - GT_Mod.achievements.issueAchievement(aPlayer, "brrrr"); - GT_Mod.achievements.issueAchievement(aPlayer, "buildChainsaw"); - } catch (Exception ignored) {} - } - - @Override - public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, - int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { - int rAmount = 0; - if ((aBlock.getMaterial() == Material.leaves) && ((aBlock instanceof IShearable))) { - aPlayer.worldObj.setBlock(aX, aY, aZ, aBlock, aMetaData, 0); - if (((IShearable) aBlock).isShearable(aStack, aPlayer.worldObj, aX, aY, aZ)) { - ((IShearable) aBlock).onSheared(aStack, aPlayer.worldObj, aX, aY, aZ, aFortune); - aDrops.clear(); - } - aPlayer.worldObj.setBlock(aX, aY, aZ, Blocks.air, 0, 0); - } else if (((aBlock.getMaterial() == Material.ice) || (aBlock.getMaterial() == Material.packedIce)) - && (aDrops.isEmpty())) { - aDrops.add(new ItemStack(aBlock, 1, aMetaData)); - aPlayer.worldObj.setBlockToAir(aX, aY, aZ); - aEvent.dropChance = 1.0F; - return 1; - } - if ((GregTech_API.sTimber) && (!aPlayer.isSneaking()) - && (OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData)))) { - int tY = aY + 1; - for (int tH = aPlayer.worldObj.getHeight(); tY < tH; tY++) { - if ((aPlayer.worldObj.getBlock(aX, tY, aZ) != aBlock) - || (!aPlayer.worldObj.func_147480_a(aX, tY, aZ, true))) { - break; - } - rAmount++; - } - } - return rAmount; - } - - @Override - public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World aWorld, - int aX, int aY, int aZ) { - if (aBlock.isWood(aPlayer.worldObj, aX, aY, aZ) - && OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData))) { - float rAmount = 1.0F; - float tIncrement = 1.0F; - if ((GregTech_API.sTimber) && !aPlayer.isSneaking()) { - int tY = aY + 1; - for (int tH = aPlayer.worldObj.getHeight(); (tY < tH) - && (aPlayer.worldObj.getBlock(aX, tY, aZ) == aBlock); tY++) { - tIncrement += 0.1F; - rAmount += tIncrement; - } - } - return 2.0F * aDefault / rAmount; - } - return (aBlock.getMaterial() == Material.leaves) || (aBlock.getMaterial() == Material.vine) - || (aBlock.getMaterial() == Material.plants) - || (aBlock.getMaterial() == Material.gourd) ? aDefault / 4.0F : aDefault; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadChainsaw.mTextureIndex] - : Textures.ItemIcons.POWER_UNIT_LV; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " was massacred by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_MV.java b/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_MV.java deleted file mode 100644 index 6c88895e48..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Chainsaw_MV.java +++ /dev/null @@ -1,57 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; - -public class GT_Tool_Chainsaw_MV extends GT_Tool_Chainsaw_LV { - - @Override - public int getToolDamagePerBlockBreak() { - return 200; - } - - @Override - public int getToolDamagePerDropConversion() { - return 400; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 3200; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 800; - } - - @Override - public int getBaseQuality() { - return 1; - } - - @Override - public float getBaseDamage() { - return 3.5F; - } - - @Override - public float getSpeedMultiplier() { - return 3.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 2.0F; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? gregtech.api.items.GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadChainsaw.mTextureIndex] - : Textures.ItemIcons.POWER_UNIT_MV; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Crowbar.java b/src/main/java/gregtech/common/tools/GT_Tool_Crowbar.java deleted file mode 100644 index 3db30faca1..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Crowbar.java +++ /dev/null @@ -1,139 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import com.google.common.base.Strings; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.IToolStats; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.items.behaviors.Behaviour_Crowbar; - -public class GT_Tool_Crowbar extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 100; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 2.0F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return true; - } - - @Override - public boolean isCrowbar() { - return true; - } - - @Override - public boolean isWeapon() { - return true; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - if (aBlock.getMaterial() == Material.circuits) { - return true; - } - String tTool = aBlock.getHarvestTool(aMetaData); - if (Strings.isNullOrEmpty(tTool)) { - for (IToolStats i : GT_MetaGenerated_Tool_01.INSTANCE.mToolStats.values()) { - if (i instanceof GT_Tool_Crowbar && i != this && !i.isMinableBlock(aBlock, aMetaData)) { - return false; - } - } - return true; - } - return tTool.equals("crowbar"); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.CROWBAR : null; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : null; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new Behaviour_Crowbar(1, 1000)); - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " was removed by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Drill_HV.java b/src/main/java/gregtech/common/tools/GT_Tool_Drill_HV.java deleted file mode 100644 index 597e8b0725..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Drill_HV.java +++ /dev/null @@ -1,68 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -import gregtech.GT_Mod; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; - -public class GT_Tool_Drill_HV extends GT_Tool_Drill_LV { - - @Override - public int getToolDamagePerBlockBreak() { - return 800; - } - - @Override - public int getToolDamagePerDropConversion() { - return 1600; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 12800; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 3200; - } - - @Override - public int getBaseQuality() { - return 1; - } - - @Override - public float getBaseDamage() { - return 3.0F; - } - - @Override - public float getSpeedMultiplier() { - return 9.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { - super.onToolCrafted(aStack, aPlayer); - try { - GT_Mod.achievements.issueAchievement(aPlayer, "highpowerdrill"); - GT_Mod.achievements.issueAchievement(aPlayer, "buildDDrill"); - } catch (Exception ignored) {} - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? gregtech.api.items.GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadDrill.mTextureIndex] - : Textures.ItemIcons.POWER_UNIT_HV; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Drill_LV.java b/src/main/java/gregtech/common/tools/GT_Tool_Drill_LV.java deleted file mode 100644 index f06c2c812d..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Drill_LV.java +++ /dev/null @@ -1,152 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.stats.AchievementList; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.GT_Mod; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; - -public class GT_Tool_Drill_LV extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 100; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 2.0F; - } - - @Override - public float getSpeedMultiplier() { - return 3.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return SoundResource.IC2_TOOLS_DRILL_DRILL_SOFT.toString(); - } - - @Override - public String getEntityHitSound() { - return SoundResource.IC2_TOOLS_DRILL_DRILL_SOFT.toString(); - } - - @Override - public String getBreakingSound() { - return SoundResource.IC2_TOOLS_DRILL_DRILL_SOFT.toString(); - } - - @Override - public String getMiningSound() { - return SoundResource.IC2_TOOLS_DRILL_DRILL_SOFT.toString(); - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "pickaxe", "shovel") - || GT_ToolHarvestHelper.isAppropriateMaterial( - aBlock, - Material.rock, - Material.iron, - Material.anvil, - Material.sand, - Material.grass, - Material.ground, - Material.snow, - Material.clay, - Material.glass); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadDrill.mTextureIndex] - : Textures.ItemIcons.POWER_UNIT_LV; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {} - - @Override - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { - super.onToolCrafted(aStack, aPlayer); - aPlayer.triggerAchievement(AchievementList.buildPickaxe); - aPlayer.triggerAchievement(AchievementList.buildBetterPickaxe); - try { - GT_Mod.achievements.issueAchievement(aPlayer, "driltime"); - GT_Mod.achievements.issueAchievement(aPlayer, "buildDrill"); - } catch (Exception ignored) {} - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " got the Drill! (by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE - + ")"); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Drill_MV.java b/src/main/java/gregtech/common/tools/GT_Tool_Drill_MV.java deleted file mode 100644 index 7b6b54d4b5..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Drill_MV.java +++ /dev/null @@ -1,57 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; - -public class GT_Tool_Drill_MV extends GT_Tool_Drill_LV { - - @Override - public int getToolDamagePerBlockBreak() { - return 200; - } - - @Override - public int getToolDamagePerDropConversion() { - return 400; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 3200; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 800; - } - - @Override - public int getBaseQuality() { - return 1; - } - - @Override - public float getBaseDamage() { - return 2.5F; - } - - @Override - public float getSpeedMultiplier() { - return 6.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 2.0F; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? gregtech.api.items.GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadDrill.mTextureIndex] - : Textures.ItemIcons.POWER_UNIT_MV; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_File.java b/src/main/java/gregtech/common/tools/GT_Tool_File.java deleted file mode 100644 index 0a8610a462..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_File.java +++ /dev/null @@ -1,124 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; - -public class GT_Tool_File extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 400; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 1.5F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return true; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isMiningTool() { - return false; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "file"); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadFile.mTextureIndex] - : Textures.ItemIcons.HANDLE_FILE; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {} - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " has been filed D for 'Dead' by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_HardHammer.java b/src/main/java/gregtech/common/tools/GT_Tool_HardHammer.java deleted file mode 100644 index 066abd48b8..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_HardHammer.java +++ /dev/null @@ -1,203 +0,0 @@ -package gregtech.common.tools; - -import static gregtech.GT_Mod.MAX_IC2; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.EntityIronGolem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraftforge.event.world.BlockEvent; - -import gregtech.GT_Mod; -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.behaviors.Behaviour_Prospecting; - -public class GT_Tool_HardHammer extends GT_Tool { - - public static final List mEffectiveList = Arrays - .asList(EntityIronGolem.class.getName(), "EntityTowerGuardian"); - - @Override - public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, - EntityPlayer aPlayer) { - String tName = aEntity.getClass() - .getName(); - tName = tName.substring(tName.lastIndexOf('.') + 1); - return (mEffectiveList.contains(tName)) || (tName.contains("Golem")) ? aOriginalDamage * 2.0F : aOriginalDamage; - } - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 200; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 400; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 3.0F; - } - - @Override - public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { - return aOriginalHurtResistance * 2; - } - - @Override - public float getSpeedMultiplier() { - return 0.75F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return SoundResource.RANDOM_ANVIL_USE.toString(); - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getBreakingSound() { - return SoundResource.RANDOM_ANVIL_BREAK.toString(); - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return true; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isWeapon() { - return true; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "hammer", "pickaxe") - || GT_ToolHarvestHelper - .isAppropriateMaterial(aBlock, Material.rock, Material.glass, Material.ice, Material.packedIce) - || RecipeMaps.hammerRecipes.containsInput(new ItemStack(aBlock, 1, aMetaData)); - } - - @Override - public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, - int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { - int rConversions = 0; - GT_Recipe tRecipe = RecipeMaps.hammerRecipes - .findRecipe(null, true, MAX_IC2, null, new ItemStack(aBlock, 1, aMetaData)); - if ((tRecipe == null) || (aBlock.hasTileEntity(aMetaData))) { - for (ItemStack tDrop : aDrops) { - tRecipe = RecipeMaps.hammerRecipes - .findRecipe(null, true, MAX_IC2, null, GT_Utility.copyAmount(1, tDrop)); - if (tRecipe != null) { - ItemStack tHammeringOutput = tRecipe.getOutput(0); - if (tHammeringOutput != null) { - rConversions += tDrop.stackSize; - tDrop.stackSize *= tHammeringOutput.stackSize; - tHammeringOutput.stackSize = tDrop.stackSize; - GT_Utility.setStack(tDrop, tHammeringOutput); - } - } - } - } else { - aDrops.clear(); - aDrops.add(tRecipe.getOutput(0)); - rConversions++; - } - return rConversions; - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadHammer.mTextureIndex] - : GT_MetaGenerated_Tool - .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new Behaviour_Prospecting(1, 1000)); - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " was squashed by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } - - @Override - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { - super.onToolCrafted(aStack, aPlayer); - try { - GT_Mod.achievements.issueAchievement(aPlayer, "tools"); - } catch (Exception ignored) {} - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Hoe.java b/src/main/java/gregtech/common/tools/GT_Tool_Hoe.java deleted file mode 100644 index 2dc5496176..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Hoe.java +++ /dev/null @@ -1,132 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.stats.AchievementList; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.common.items.behaviors.Behaviour_Hoe; - -public class GT_Tool_Hoe extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 100; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 1.75F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "hoe") - || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.gourd); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool - .getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadHoe.mTextureIndex] - : GT_MetaGenerated_Tool - .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new Behaviour_Hoe(100)); - } - - @Override - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { - super.onToolCrafted(aStack, aPlayer); - aPlayer.triggerAchievement(AchievementList.buildHoe); - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " has been called a stupid Hoe by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_JackHammer.java b/src/main/java/gregtech/common/tools/GT_Tool_JackHammer.java deleted file mode 100644 index 7c8b17f711..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_JackHammer.java +++ /dev/null @@ -1,128 +0,0 @@ -package gregtech.common.tools; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraftforge.event.world.BlockEvent; - -import gregtech.GT_Mod; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.api.util.GT_Utility; - -public class GT_Tool_JackHammer extends GT_Tool_Drill_LV { - - @Override - public int getToolDamagePerBlockBreak() { - return 400; - } - - @Override - public int getToolDamagePerDropConversion() { - return 400; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 3200; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 800; - } - - @Override - public int getBaseQuality() { - return 1; - } - - @Override - public float getBaseDamage() { - return 3.0F; - } - - @Override - public float getSpeedMultiplier() { - return 12.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 2.0F; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "pickaxe") // - || GT_ToolHarvestHelper.isAppropriateMaterial( - aBlock, // - Material.rock, // - Material.glass, // - Material.ice, // - Material.packedIce // - ); - } - - @Override - public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, - int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { - int rConversions = 0; - GT_Recipe tRecipe = RecipeMaps.hammerRecipes - .findRecipe(null, true, 2147483647L, null, new ItemStack(aBlock, 1, aMetaData)); - if ((tRecipe == null) || (aBlock.hasTileEntity(aMetaData))) { - for (ItemStack tDrop : aDrops) { - tRecipe = RecipeMaps.hammerRecipes - .findRecipe(null, true, 2147483647L, null, GT_Utility.copyAmount(1, tDrop)); - if (tRecipe != null) { - ItemStack tHammeringOutput = tRecipe.getOutput(0); - if (tHammeringOutput != null) { - rConversions += tDrop.stackSize; - tDrop.stackSize *= tHammeringOutput.stackSize; - tHammeringOutput.stackSize = tDrop.stackSize; - GT_Utility.setStack(tDrop, tHammeringOutput); - } - } - } - } else { - aDrops.clear(); - aDrops.add(tRecipe.getOutput(0)); - rConversions++; - } - return rConversions; - } - - @Override - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { - super.onToolCrafted(aStack, aPlayer); - try { - GT_Mod.achievements.issueAchievement(aPlayer, "hammertime"); - } catch (Exception ignored) {} - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.JACKHAMMER : null; - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " has been jackhammered into pieces by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Knife.java b/src/main/java/gregtech/common/tools/GT_Tool_Knife.java deleted file mode 100644 index 152476fa2d..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Knife.java +++ /dev/null @@ -1,76 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; - -public class GT_Tool_Knife extends GT_Tool_Sword { - - @Override - public int getToolDamagePerBlockBreak() { - return 100; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 100; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 600; - } - - @Override - public float getBaseDamage() { - return 0F; - } - - @Override - public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { - return aOriginalHurtResistance * 3; - } - - @Override - public float getSpeedMultiplier() { - return 0.5F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.KNIFE : null; - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - "<" + EnumChatFormatting.RED - + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + "> " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE - + " what are you doing?, " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE - + "?!? STAHP!!!"); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Mortar.java b/src/main/java/gregtech/common/tools/GT_Tool_Mortar.java deleted file mode 100644 index 8e74d3bcc1..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Mortar.java +++ /dev/null @@ -1,120 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public class GT_Tool_Mortar extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 400; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 2.0F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isMiningTool() { - return false; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return false; - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.MORTAR : null; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : Dyes._NULL.mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {} - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " was grounded by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Pickaxe.java b/src/main/java/gregtech/common/tools/GT_Tool_Pickaxe.java deleted file mode 100644 index b755869112..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Pickaxe.java +++ /dev/null @@ -1,139 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.stats.AchievementList; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.GT_Mod; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; - -public class GT_Tool_Pickaxe extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 100; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 1.5F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "pickaxe") // - || GT_ToolHarvestHelper.isAppropriateMaterial( - aBlock, // - Material.rock, - Material.iron, - Material.anvil, - Material.glass); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadPickaxe.mTextureIndex] - : GT_MetaGenerated_Tool - .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {} - - @Override - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { - super.onToolCrafted(aStack, aPlayer); - aPlayer.triggerAchievement(AchievementList.buildPickaxe); - aPlayer.triggerAchievement(AchievementList.buildBetterPickaxe); - try { - GT_Mod.achievements.issueAchievement(aPlayer, "flintpick"); - } catch (Exception ignored) {} - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " got mined by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Plow.java b/src/main/java/gregtech/common/tools/GT_Tool_Plow.java deleted file mode 100644 index b6f4be25b5..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Plow.java +++ /dev/null @@ -1,110 +0,0 @@ -package gregtech.common.tools; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.EntitySnowman; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraft.world.World; -import net.minecraftforge.event.world.BlockEvent; - -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; - -public class GT_Tool_Plow extends GT_Tool { - - private final ThreadLocal sIsHarvestingRightNow = new ThreadLocal<>(); - - @Override - public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, - EntityPlayer aPlayer) { - return (aEntity instanceof EntitySnowman) ? aOriginalDamage * 4.0F : aOriginalDamage; - } - - @Override - public float getBaseDamage() { - return 1.0F; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "plow") - || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.snow, Material.craftedSnow); - } - - @Override - public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World worldObj, - int aX, int aY, int aZ) { - // Speed nerf for using AOE tools to break single block - if (aPlayer != null && aPlayer.isSneaking()) { - return aDefault / 2; - } - return super.getMiningSpeed(aBlock, aMetaData, aDefault, aPlayer, worldObj, aX, aY, aZ); - } - - @Override - public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, - int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { - int rConversions = 0; - if ((this.sIsHarvestingRightNow.get() == null) && ((aPlayer instanceof EntityPlayerMP))) { - this.sIsHarvestingRightNow.set(this); - - if (!aPlayer.isSneaking()) { - for (int i = -1; i < 2; i++) { - for (int j = -1; j < 2; j++) { - for (int k = -1; k < 2; k++) { - if (((i != 0) || (j != 0) || (k != 0)) && (aStack.getItem() - .getDigSpeed( - aStack, - aPlayer.worldObj.getBlock(aX + i, aY + j, aZ + k), - aPlayer.worldObj.getBlockMetadata(aX + i, aY + j, aZ + k)) - > 0.0F) - && (((EntityPlayerMP) aPlayer).theItemInWorldManager - .tryHarvestBlock(aX + i, aY + j, aZ + k))) { - rConversions++; - } - } - } - } - } - - this.sIsHarvestingRightNow.set(null); - } - return rConversions; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadPlow.mTextureIndex] - : GT_MetaGenerated_Tool - .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE - + " plew through the yard of " - + EnumChatFormatting.RED - + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Plunger.java b/src/main/java/gregtech/common/tools/GT_Tool_Plunger.java deleted file mode 100644 index 76c1ccbc24..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Plunger.java +++ /dev/null @@ -1,92 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.IItemBehaviour; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.behaviors.Behaviour_Plunger_Fluid; -import gregtech.common.items.behaviors.Behaviour_Plunger_Item; - -public class GT_Tool_Plunger extends GT_Tool { - - @Override - public float getBaseDamage() { - return 1.25F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 0.25F; - } - - @Override - public String getCraftingSound() { - return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); - } - - @Override - public String getEntityHitSound() { - return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); - } - - @Override - public String getMiningSound() { - return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "plunger"); - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.PLUNGER : null; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - @SuppressWarnings("unchecked") // the IItemBehaviour cast cannot be expressed strictly via generics - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new Behaviour_Plunger_Item(getToolDamagePerDropConversion())); - aItem.addItemBehavior(aID, new Behaviour_Plunger_Fluid(getToolDamagePerDropConversion())); - try { - Object tObject = GT_Utility.callConstructor( - "gregtech.common.items.behaviors.Behaviour_Plunger_Essentia", - 0, - null, - false, - getToolDamagePerDropConversion()); - if ((tObject instanceof IItemBehaviour)) { - aItem.addItemBehavior(aID, (IItemBehaviour) tObject); - } - } catch (Throwable ignored) {} - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " got stuck trying to escape through a Pipe while fighting " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_RollingPin.java b/src/main/java/gregtech/common/tools/GT_Tool_RollingPin.java deleted file mode 100644 index 9933c4eb13..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_RollingPin.java +++ /dev/null @@ -1,70 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public class GT_Tool_RollingPin extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 100; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public float getBaseDamage() { - return 2.0F; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return false; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : Dyes._NULL.mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {} - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.ROLLING_PIN : null; - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " got flattened by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Saw.java b/src/main/java/gregtech/common/tools/GT_Tool_Saw.java deleted file mode 100644 index b2c85e2a5e..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Saw.java +++ /dev/null @@ -1,149 +0,0 @@ -package gregtech.common.tools; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraftforge.common.IShearable; -import net.minecraftforge.event.world.BlockEvent; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; - -public class GT_Tool_Saw extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 200; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 1.75F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, - int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { - if ((aBlock.getMaterial() == Material.leaves) && ((aBlock instanceof IShearable))) { - aPlayer.worldObj.setBlock(aX, aY, aZ, aBlock, aMetaData, 0); - if (((IShearable) aBlock).isShearable(aStack, aPlayer.worldObj, aX, aY, aZ)) { - ArrayList tDrops = ((IShearable) aBlock) - .onSheared(aStack, aPlayer.worldObj, aX, aY, aZ, aFortune); - aDrops.clear(); - aDrops.addAll(tDrops); - aEvent.dropChance = 1.0F; - } - aPlayer.worldObj.setBlock(aX, aY, aZ, Blocks.air, 0, 0); - } else if (((aBlock.getMaterial() == Material.ice) || (aBlock.getMaterial() == Material.packedIce)) - && (aDrops.isEmpty())) { - aDrops.add(new ItemStack(aBlock, 1, aMetaData)); - aPlayer.worldObj.setBlockToAir(aX, aY, aZ); - aEvent.dropChance = 1.0F; - return 1; - } - return 0; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "axe", "saw") - || GT_ToolHarvestHelper.isAppropriateMaterial( - aBlock, - Material.leaves, - Material.vine, - Material.wood, - Material.cactus, - Material.ice, - Material.packedIce) - || GT_ToolHarvestHelper.isSpecialBlock(aBlock, Blocks.ladder); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool - .getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadSaw.mTextureIndex] - : Textures.ItemIcons.HANDLE_SAW; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {} - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " was getting cut down by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Scoop.java b/src/main/java/gregtech/common/tools/GT_Tool_Scoop.java deleted file mode 100644 index 3181e108bf..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Scoop.java +++ /dev/null @@ -1,130 +0,0 @@ -package gregtech.common.tools; - -import static gregtech.api.enums.Mods.Forestry; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.common.items.behaviors.Behaviour_None; -import gregtech.common.items.behaviors.Behaviour_Scoop; - -public class GT_Tool_Scoop extends GT_Tool { - - public static Material sBeeHiveMaterial; - - @Override - public int getToolDamagePerBlockBreak() { - return 200; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 200; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 1.0F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "scoop") - || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, sBeeHiveMaterial); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.SCOOP : null; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - if (Forestry.isModLoaded()) { - aItem.addItemBehavior(aID, new Behaviour_Scoop(200)); - } else { - aItem.addItemBehavior(aID, new Behaviour_None()); - } - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " got scooped up by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver.java b/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver.java deleted file mode 100644 index 1d7f4e655d..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver.java +++ /dev/null @@ -1,160 +0,0 @@ -package gregtech.common.tools; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.EntityCaveSpider; -import net.minecraft.entity.monster.EntitySpider; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.common.items.behaviors.Behaviour_Screwdriver; - -public class GT_Tool_Screwdriver extends GT_Tool { - - public static final List mEffectiveList = Arrays.asList( - EntityCaveSpider.class.getName(), - EntitySpider.class.getName(), - "EntityTFHedgeSpider", - "EntityTFKingSpider", - "EntityTFSwarmSpider", - "EntityTFTowerBroodling"); - - @Override - public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, - EntityPlayer aPlayer) { - String tName = aEntity.getClass() - .getName(); - tName = tName.substring(tName.lastIndexOf('.') + 1); - return mEffectiveList.contains(tName) ? aOriginalDamage * 2.0F : aOriginalDamage; - } - - @Override - public int getToolDamagePerBlockBreak() { - return 200; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 400; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 1.5F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return SoundResource.IC2_TOOLS_WRENCH.toString(); - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return true; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isMiningTool() { - return false; - } - - @Override - public boolean isScrewdriver() { - return true; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "screwdriver") - || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.circuits); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadScrewdriver.mTextureIndex] - : Textures.ItemIcons.HANDLE_SCREWDRIVER; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new Behaviour_Screwdriver(1, 200)); - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " is screwed! (by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE - + ")"); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver_LV.java b/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver_LV.java deleted file mode 100644 index e49e020b7b..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Screwdriver_LV.java +++ /dev/null @@ -1,34 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public class GT_Tool_Screwdriver_LV extends GT_Tool_Screwdriver { - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 200; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadScrewdriver.mTextureIndex] - : Textures.ItemIcons.HANDLE_ELECTRIC_SCREWDRIVER; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Sense.java b/src/main/java/gregtech/common/tools/GT_Tool_Sense.java deleted file mode 100644 index 013c0f800c..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Sense.java +++ /dev/null @@ -1,114 +0,0 @@ -package gregtech.common.tools; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraft.world.World; -import net.minecraftforge.event.world.BlockEvent; - -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.common.items.behaviors.Behaviour_Sense; - -public class GT_Tool_Sense extends GT_Tool { - - private final ThreadLocal sIsHarvestingRightNow = new ThreadLocal<>(); - - @Override - public float getBaseDamage() { - return 3.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "sense", "scythe") - || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.plants, Material.leaves); - } - - @Override - public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World worldObj, - int aX, int aY, int aZ) { - // Speed nerf for using AOE tools to break single block - if (aPlayer != null && aPlayer.isSneaking()) { - return aDefault / 2; - } - return super.getMiningSpeed(aBlock, aMetaData, aDefault, aPlayer, worldObj, aX, aY, aZ); - } - - @Override - public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, - int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { - int rConversions = 0; - if ((this.sIsHarvestingRightNow.get() == null) && ((aPlayer instanceof EntityPlayerMP))) { - this.sIsHarvestingRightNow.set(this); - - if (!aPlayer.isSneaking()) { - for (int i = -2; i < 3; i++) { - for (int j = -2; j < 3; j++) { - for (int k = -2; k < 3; k++) { - if (((i != 0) || (j != 0) || (k != 0)) && (aStack.getItem() - .getDigSpeed( - aStack, - aPlayer.worldObj.getBlock(aX + i, aY + j, aZ + k), - aPlayer.worldObj.getBlockMetadata(aX + i, aY + j, aZ + k)) - > 0.0F) - && (((EntityPlayerMP) aPlayer).theItemInWorldManager - .tryHarvestBlock(aX + i, aY + j, aZ + k))) { - rConversions++; - } - } - } - } - } - - this.sIsHarvestingRightNow.set(null); - } - return rConversions; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadSense.mTextureIndex] - : GT_MetaGenerated_Tool - .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new Behaviour_Sense(getToolDamagePerBlockBreak())); - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE - + " has taken the Soul of " - + EnumChatFormatting.RED - + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE); - } - -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Shovel.java b/src/main/java/gregtech/common/tools/GT_Tool_Shovel.java deleted file mode 100644 index 886ca126e0..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Shovel.java +++ /dev/null @@ -1,127 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; - -public class GT_Tool_Shovel extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 100; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 1.5F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "shovel") - || GT_ToolHarvestHelper.isAppropriateMaterial( - aBlock, - Material.sand, - Material.grass, - Material.ground, - Material.snow, - Material.clay); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadShovel.mTextureIndex] - : GT_MetaGenerated_Tool - .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {} - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " got dug up by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_SoftHammer.java b/src/main/java/gregtech/common/tools/GT_Tool_SoftHammer.java deleted file mode 100644 index cc3f5e738b..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_SoftHammer.java +++ /dev/null @@ -1,139 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.common.items.behaviors.Behaviour_SoftHammer; - -public class GT_Tool_SoftHammer extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 800; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 3.0F; - } - - @Override - public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { - return aOriginalHurtResistance * 2; - } - - @Override - public float getSpeedMultiplier() { - return 0.1F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 8.0F; - } - - @Override - public String getCraftingSound() { - return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); - } - - @Override - public String getEntityHitSound() { - return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); - } - - @Override - public String getMiningSound() { - return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); - } - - @Override - public boolean canBlock() { - return true; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isMiningTool() { - return false; - } - - @Override - public boolean isWeapon() { - return true; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "softhammer"); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadMallet.mTextureIndex] - : GT_MetaGenerated_Tool.getSecondaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.handleMallet.mTextureIndex]; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new Behaviour_SoftHammer(100)); - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " was hammered to death by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Soldering_Iron.java b/src/main/java/gregtech/common/tools/GT_Tool_Soldering_Iron.java deleted file mode 100644 index 9b5ef3a638..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Soldering_Iron.java +++ /dev/null @@ -1,153 +0,0 @@ -package gregtech.common.tools; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.EntityCaveSpider; -import net.minecraft.entity.monster.EntitySpider; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.common.items.behaviors.Behaviour_Screwdriver; - -public class GT_Tool_Soldering_Iron extends GT_Tool { - - public static final List mEffectiveList = Arrays.asList( - EntityCaveSpider.class.getName(), - EntitySpider.class.getName(), - "EntityTFHedgeSpider", - "EntityTFKingSpider", - "EntityTFSwarmSpider", - "EntityTFTowerBroodling"); - - @Override - public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, - EntityPlayer aPlayer) { - String tName = aEntity.getClass() - .getName(); - tName = tName.substring(tName.lastIndexOf('.') + 1); - return mEffectiveList.contains(tName) ? aOriginalDamage * 2.0F : aOriginalDamage; - } - - @Override - public int getToolDamagePerBlockBreak() { - return 1000; - } - - @Override - public int getToolDamagePerDropConversion() { - return 500; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 1000; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 500; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 1.5F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return SoundResource.IC2_TOOLS_WRENCH.toString(); - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return true; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isMiningTool() { - return false; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "soldering_iron") - || GT_ToolHarvestHelper.isAppropriateMaterial(aBlock, Material.circuits); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mIconSet.mTextures[49] - : Textures.ItemIcons.HANDLE_SOLDERING; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new Behaviour_Screwdriver(1, 200)); - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " got soldert! (by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE - + ")"); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Sword.java b/src/main/java/gregtech/common/tools/GT_Tool_Sword.java deleted file mode 100644 index 7bfaaee797..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Sword.java +++ /dev/null @@ -1,128 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.stats.AchievementList; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; - -public class GT_Tool_Sword extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 200; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 100; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 100; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 4.0F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return true; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isWeapon() { - return true; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "sword") - || GT_ToolHarvestHelper.isAppropriateMaterial( - aBlock, - Material.leaves, - Material.gourd, - Material.vine, - Material.web, - Material.cloth, - Material.carpet, - Material.plants, - Material.cactus, - Material.cake, - Material.tnt, - Material.sponge); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadSword.mTextureIndex] - : Textures.ItemIcons.HANDLE_SWORD; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return !aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { - super.onToolCrafted(aStack, aPlayer); - aPlayer.triggerAchievement(AchievementList.buildSword); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Turbine.java b/src/main/java/gregtech/common/tools/GT_Tool_Turbine.java deleted file mode 100644 index daaf2c4438..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Turbine.java +++ /dev/null @@ -1,58 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public abstract class GT_Tool_Turbine extends GT_Tool { - - @Override - public abstract float getBaseDamage(); - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return false; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? getTurbineIcon() : null; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : null; - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE - + " put " - + EnumChatFormatting.RED - + aEntity.getCommandSenderName() - + "s" - + EnumChatFormatting.WHITE - + " head into a turbine"); - } - - public abstract IIconContainer getTurbineIcon(); - - @Override - public abstract float getSpeedMultiplier(); - - @Override - public abstract float getMaxDurabilityMultiplier(); - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Huge.java b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Huge.java deleted file mode 100644 index 46b0de72d9..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Huge.java +++ /dev/null @@ -1,27 +0,0 @@ -package gregtech.common.tools; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; - -public class GT_Tool_Turbine_Huge extends GT_Tool_Turbine { - - @Override - public float getSpeedMultiplier() { - return 4.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public float getBaseDamage() { - return 7.5F; - } - - @Override - public IIconContainer getTurbineIcon() { - return Textures.ItemIcons.TURBINE_HUGE; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Large.java b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Large.java deleted file mode 100644 index 7e8307f6b0..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Large.java +++ /dev/null @@ -1,27 +0,0 @@ -package gregtech.common.tools; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; - -public class GT_Tool_Turbine_Large extends GT_Tool_Turbine { - - @Override - public float getSpeedMultiplier() { - return 3.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 3.0F; - } - - @Override - public float getBaseDamage() { - return 5.0F; - } - - @Override - public IIconContainer getTurbineIcon() { - return Textures.ItemIcons.TURBINE_LARGE; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Normal.java b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Normal.java deleted file mode 100644 index ac2fc29a89..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Normal.java +++ /dev/null @@ -1,27 +0,0 @@ -package gregtech.common.tools; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; - -public class GT_Tool_Turbine_Normal extends GT_Tool_Turbine { - - @Override - public float getSpeedMultiplier() { - return 2.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 2.0F; - } - - @Override - public float getBaseDamage() { - return 2.5F; - } - - @Override - public IIconContainer getTurbineIcon() { - return Textures.ItemIcons.TURBINE; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Small.java b/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Small.java deleted file mode 100644 index fab527386e..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Turbine_Small.java +++ /dev/null @@ -1,27 +0,0 @@ -package gregtech.common.tools; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; - -public class GT_Tool_Turbine_Small extends GT_Tool_Turbine { - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public float getBaseDamage() { - return 0.0F; - } - - @Override - public IIconContainer getTurbineIcon() { - return Textures.ItemIcons.TURBINE_SMALL; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_UniversalSpade.java b/src/main/java/gregtech/common/tools/GT_Tool_UniversalSpade.java deleted file mode 100644 index 184d506872..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_UniversalSpade.java +++ /dev/null @@ -1,160 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.stats.AchievementList; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.GT_Mod; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.common.items.behaviors.Behaviour_Crowbar; - -public class GT_Tool_UniversalSpade extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 400; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 100; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 3.0F; - } - - @Override - public float getSpeedMultiplier() { - return 0.75F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return null; - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return true; - } - - @Override - public boolean isCrowbar() { - return true; - } - - @Override - public boolean isWeapon() { - return true; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "shovel", "axe", "saw", "sword", "crowbar") - || GT_ToolHarvestHelper.isAppropriateMaterial( - aBlock, - Material.sand, - Material.grass, - Material.ground, - Material.snow, - Material.clay, - Material.leaves, - Material.vine, - Material.wood, - Material.cactus, - Material.circuits, - Material.gourd, - Material.web, - Material.cloth, - Material.carpet, - Material.plants, - Material.cake, - Material.tnt, - Material.sponge); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadUniversalSpade.mTextureIndex] - : GT_MetaGenerated_Tool - .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new Behaviour_Crowbar(2, 2000)); - } - - @Override - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { - super.onToolCrafted(aStack, aPlayer); - aPlayer.triggerAchievement(AchievementList.buildSword); - try { - GT_Mod.achievements.issueAchievement(aPlayer, "unitool"); - } catch (Exception ignored) {} - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " has been digged by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_WireCutter.java b/src/main/java/gregtech/common/tools/GT_Tool_WireCutter.java deleted file mode 100644 index 54b76e6d81..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_WireCutter.java +++ /dev/null @@ -1,117 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; - -public class GT_Tool_WireCutter extends GT_Tool { - - @Override - public int getToolDamagePerBlockBreak() { - return 100; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 400; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 1.25F; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return SoundResource.IC2_TOOLS_INSULATION_CUTTERS.toString(); - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return SoundResource.IC2_TOOLS_INSULATION_CUTTERS.toString(); - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "cutter"); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.WIRE_CUTTER : null; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) {} - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE - + " has cut the Cable for the Life Support Machine of " - + EnumChatFormatting.RED - + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Wrench.java b/src/main/java/gregtech/common/tools/GT_Tool_Wrench.java deleted file mode 100644 index fbca109f21..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Wrench.java +++ /dev/null @@ -1,279 +0,0 @@ -package gregtech.common.tools; - -import static gregtech.api.items.GT_MetaGenerated_Tool.getPrimaryMaterial; - -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.EntityIronGolem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import net.minecraftforge.event.world.BlockEvent; - -import appeng.api.parts.IPartHost; -import appeng.block.AEBaseTileBlock; -import appeng.parts.PartPlacement; -import appeng.util.Platform; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ToolHarvestHelper; -import gregtech.common.items.behaviors.Behaviour_Switch_Mode; -import gregtech.common.items.behaviors.Behaviour_Wrench; -import ic2.api.tile.IWrenchable; - -public class GT_Tool_Wrench extends GT_Tool { - - public static final List mEffectiveList = Arrays - .asList(EntityIronGolem.class.getName(), "EntityTowerGuardian"); - - @Override - public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, - EntityPlayer aPlayer) { - String tName = aEntity.getClass() - .getName(); - tName = tName.substring(tName.lastIndexOf('.') + 1); - return (mEffectiveList.contains(tName)) || (tName.contains("Golem")) ? aOriginalDamage * 2.0F : aOriginalDamage; - } - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 800; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 3.0F; - } - - @Override - public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { - return aOriginalHurtResistance * 2; - } - - @Override - public float getSpeedMultiplier() { - return 1.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public String getCraftingSound() { - return SoundResource.IC2_TOOLS_WRENCH.toString(); - } - - @Override - public String getEntityHitSound() { - return null; - } - - @Override - public String getMiningSound() { - return SoundResource.IC2_TOOLS_WRENCH.toString(); - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isWrench() { - return true; - } - - @Override - public boolean isMinableBlock(Block block, byte aMetaData) { - return GT_ToolHarvestHelper.isAppropriateTool(block, aMetaData, "wrench") - || GT_ToolHarvestHelper.isAppropriateMaterial(block, Material.piston) - || block instanceof AEBaseTileBlock - || GT_ToolHarvestHelper.isSpecialBlock(block, Blocks.crafting_table, Blocks.bookshelf) - || Behaviour_Wrench.isVanillaRotatable(block) - || GT_ToolHarvestHelper.isIC2Wrenchable(block); - } - - @Override - public ItemStack getBrokenItem(ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.WRENCH : null; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? getPrimaryMaterial(aStack).mRGBa : null; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - aItem.addItemBehavior(aID, new Behaviour_Switch_Mode()); - aItem.addItemBehavior(aID, new Behaviour_Wrench(100)); - } - - @Override - public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE - + " threw a Monkey Wrench into the Plans of " - + EnumChatFormatting.RED - + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE); - } - - /** - *

- * holding drop from {@link IWrenchable#getWrenchDrop(EntityPlayer)} - *

- * Since no tile available during - * {@link #convertBlockDrops(List, ItemStack, EntityPlayer, Block, int, int, int, byte, int, boolean, BlockEvent.HarvestDropsEvent)}, - * this is filled during - * {@link #onBreakBlock(EntityPlayer, int, int, int, Block, byte, TileEntity, BlockEvent.BreakEvent)} - */ - private ItemStack wrenchableDrop = null; - /** - *

- * drop rate from {@link IWrenchable#getWrenchDropRate()} - *

- * see {@link #wrenchableDrop} - */ - private float wrenchableDropRate = 0.0f; - - /** - *

- * prevent recursion from - * {@link AEBaseTileBlock#onBlockActivated(World, int, int, int, EntityPlayer, int, float, float, float)} - *

- */ - private boolean LastEventFromThis = false; - - @Override - public void onBreakBlock(@Nonnull EntityPlayer player, int x, int y, int z, @Nonnull Block block, byte metadata, - TileEntity tile, @Nonnull BlockEvent.BreakEvent event) { - if (tile instanceof IWrenchable wrenchable) { - if (!wrenchable.wrenchCanRemove(player)) { - event.setCanceled(true); - return; - } - wrenchableDrop = wrenchable.getWrenchDrop(player); - wrenchableDropRate = wrenchable.getWrenchDropRate(); - } - if (block instanceof AEBaseTileBlock aeBaseTileBlock) { - if (LastEventFromThis) { - return; - } - final boolean sneak = player.isSneaking(); - try { - LastEventFromThis = true; - player.setSneaking(true); - final MovingObjectPosition movObjPosition = Platform.rayTrace(player, true, false); - if (movObjPosition == null) { - event.setCanceled(true); - return; - } - - final int sideHit = movObjPosition.sideHit; - if (tile instanceof IPartHost) { - if (sneak && PartPlacement.place( - player.getHeldItem(), - x, - y, - z, - sideHit, - player, - player.worldObj, - PartPlacement.PlaceType.INTERACT_FIRST_PASS, - 0)) { - event.setCanceled(true); - } - return; - } - if (aeBaseTileBlock.onBlockActivated(event.world, x, y, z, player, sideHit, x, y, z)) { - event.setCanceled(true); - } - } finally { - LastEventFromThis = false; - player.setSneaking(sneak); - } - } - } - - @Override - public int convertBlockDrops(List drops, ItemStack Stack, EntityPlayer player, Block block, int x, int y, - int z, byte metaData, int fortune, boolean silkTouch, BlockEvent.HarvestDropsEvent event) { - ItemStack drop = null; - int modified = 0; - if (wrenchableDrop != null) { - drop = wrenchableDrop; - wrenchableDrop = null; - modified = wrenchableDropRate == 1.0f ? 3 : 10; - wrenchableDropRate = 0.0f; - } else if (block == Blocks.bookshelf || block == Blocks.ender_chest) { - drop = new ItemStack(block); - modified = 1; - } - - if (drop != null) { - event.dropChance = 1.0f; - drops.clear(); - drops.add(drop); - } - return modified; - } - - @Override - public byte getMaxMode() { - return 2; - } - - @Override - public String getToolTypeName() { - return "wrench"; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Wrench_HV.java b/src/main/java/gregtech/common/tools/GT_Tool_Wrench_HV.java deleted file mode 100644 index 7a7c725f8f..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Wrench_HV.java +++ /dev/null @@ -1,69 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public class GT_Tool_Wrench_HV extends GT_Tool_Wrench_LV { - - @Override - public int getToolDamagePerBlockBreak() { - return 800; - } - - @Override - public int getToolDamagePerDropConversion() { - return 1600; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 12800; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 3200; - } - - @Override - public int getBaseQuality() { - return 1; - } - - @Override - public float getBaseDamage() { - return 2.0F; - } - - @Override - public float getSpeedMultiplier() { - return 4.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadWrench.mTextureIndex] - : Textures.ItemIcons.POWER_UNIT_HV; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Wrench_LV.java b/src/main/java/gregtech/common/tools/GT_Tool_Wrench_LV.java deleted file mode 100644 index 5f82a7d5b1..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Wrench_LV.java +++ /dev/null @@ -1,77 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public class GT_Tool_Wrench_LV extends GT_Tool_Wrench { - - @Override - public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, - EntityPlayer aPlayer) { - return aOriginalDamage; - } - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 800; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 200; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 1.0F; - } - - @Override - public float getSpeedMultiplier() { - return 2.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.0F; - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadWrench.mTextureIndex] - : Textures.ItemIcons.POWER_UNIT_LV; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } -} diff --git a/src/main/java/gregtech/common/tools/GT_Tool_Wrench_MV.java b/src/main/java/gregtech/common/tools/GT_Tool_Wrench_MV.java deleted file mode 100644 index cc5b649647..0000000000 --- a/src/main/java/gregtech/common/tools/GT_Tool_Wrench_MV.java +++ /dev/null @@ -1,69 +0,0 @@ -package gregtech.common.tools; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; - -public class GT_Tool_Wrench_MV extends GT_Tool_Wrench_LV { - - @Override - public int getToolDamagePerBlockBreak() { - return 200; - } - - @Override - public int getToolDamagePerDropConversion() { - return 400; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 3200; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 800; - } - - @Override - public int getBaseQuality() { - return 1; - } - - @Override - public float getBaseDamage() { - return 1.5F; - } - - @Override - public float getSpeedMultiplier() { - return 3.0F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 2.0F; - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead - ? GT_MetaGenerated_Tool.getPrimaryMaterial( - aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadWrench.mTextureIndex] - : Textures.ItemIcons.POWER_UNIT_MV; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa - : GT_MetaGenerated_Tool.getSecondaryMaterial(aStack).mRGBa; - } -} diff --git a/src/main/java/gregtech/common/tools/ToolAxe.java b/src/main/java/gregtech/common/tools/ToolAxe.java new file mode 100644 index 0000000000..03b761227c --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolAxe.java @@ -0,0 +1,175 @@ +package gregtech.common.tools; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; +import net.minecraftforge.event.world.BlockEvent; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; + +public class ToolAxe extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 100; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 3.0F; + } + + @Override + public float getSpeedMultiplier() { + return 2.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isWeapon() { + return true; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "axe") + || GTToolHarvestHelper.isAppropriateMaterial(aBlock, Material.wood) + || GTToolHarvestHelper.isSpecialBlock(aBlock, Blocks.ladder); + } + + @Override + public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, + int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { + int rAmount = 0; + if ((GregTechAPI.sTimber) && (!aPlayer.isSneaking()) + && (OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData)))) { + int tY = aY + 1; + for (int tH = aPlayer.worldObj.getHeight(); tY < tH; tY++) { + if ((aPlayer.worldObj.getBlock(aX, tY, aZ) != aBlock) + || (!aPlayer.worldObj.func_147480_a(aX, tY, aZ, true))) { + break; + } + rAmount++; + } + } + return rAmount; + } + + @Override + public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World aWorld, + int aX, int aY, int aZ) { + + if (aBlock.isWood(aPlayer.worldObj, aX, aY, aZ) + && OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData))) { + float rAmount = 1.0F; + float tIncrement = 1.0F; + if ((GregTechAPI.sTimber) && !aPlayer.isSneaking()) { + int tY = aY + 1; + for (int tH = aPlayer.worldObj.getHeight(); (tY < tH) + && (aPlayer.worldObj.getBlock(aX, tY, aZ) == aBlock); tY++) { + tIncrement += 0.1F; + rAmount += tIncrement; + } + } + return 2.0F * aDefault / rAmount; + } + + return (aBlock.getMaterial() == Material.leaves) || (aBlock.getMaterial() == Material.vine) + || (aBlock.getMaterial() == Material.plants) + || (aBlock.getMaterial() == Material.gourd) ? aDefault / 4.0F : aDefault; + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial(aStack).mIconSet.mTextures[OrePrefixes.toolHeadAxe.mTextureIndex] + : MetaGeneratedTool.getSecondaryMaterial(aStack).mIconSet.mTextures[OrePrefixes.stick.mTextureIndex]; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) {} + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " has been chopped by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolBranchCutter.java b/src/main/java/gregtech/common/tools/ToolBranchCutter.java new file mode 100644 index 0000000000..c9ad255a45 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolBranchCutter.java @@ -0,0 +1,101 @@ +package gregtech.common.tools; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraftforge.event.world.BlockEvent; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.api.util.GTUtility; + +public class ToolBranchCutter extends GTTool { + + @Override + public float getBaseDamage() { + return 2.5F; + } + + @Override + public float getSpeedMultiplier() { + return 0.25F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 0.25F; + } + + @Override + public boolean isGrafter() { + return true; + } + + @Override + public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, + int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { + if (aBlock.getMaterial() == Material.leaves) { + aEvent.dropChance = Math.min( + 1.0F, + Math.max( + aEvent.dropChance, + (aStack.getItem() + .getHarvestLevel(aStack, "") + 1) * 0.2F)); + if (aBlock == Blocks.leaves) { + aDrops.clear(); + if (((aMetaData & 0x3) == 0) && (aPlayer.worldObj.rand.nextInt(9) <= aFortune * 2)) { + aDrops.add(new ItemStack(Items.apple, 1, 0)); + } else { + aDrops.add(new ItemStack(Blocks.sapling, 1, aMetaData & 0x3)); + } + } else if (aBlock == Blocks.leaves2) { + aDrops.clear(); + aDrops.add(new ItemStack(Blocks.sapling, 1, (aMetaData & 0x3) + 4)); + } else if (aBlock == GTUtility.getBlockFromStack(GTModHandler.getIC2Item("rubberLeaves", 1L))) { + aDrops.clear(); + aDrops.add(GTModHandler.getIC2Item("rubberSapling", 1L)); + } + } + return 0; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "grafter") + || GTToolHarvestHelper.isAppropriateMaterial(aBlock, Material.leaves); + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.GRAFTER : null; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " has been trimmed by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolButcheryKnife.java b/src/main/java/gregtech/common/tools/ToolButcheryKnife.java new file mode 100644 index 0000000000..43323b8404 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolButcheryKnife.java @@ -0,0 +1,104 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolButcheryKnife extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 200; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 100; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public float getBaseDamage() { + return 3.0F; + } + + @Override + public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { + return aOriginalHurtResistance * 2; + } + + @Override + public float getSpeedMultiplier() { + return 0.1F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public boolean isWeapon() { + return true; + } + + @Override + public boolean isMiningTool() { + return false; + } + + @Override + public Enchantment[] getEnchantments(ItemStack aStack) { + return LOOTING_ENCHANTMENT; + } + + @Override + public int[] getEnchantmentLevels(ItemStack aStack) { + return new int[] { (2 + MetaGeneratedTool.getPrimaryMaterial(aStack).mToolQuality) / 2 }; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.BUTCHERYKNIFE : null; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE + + " has butchered " + + EnumChatFormatting.RED + + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE); + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return false; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolBuzzSaw.java b/src/main/java/gregtech/common/tools/ToolBuzzSaw.java new file mode 100644 index 0000000000..7e62ab7bb4 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolBuzzSaw.java @@ -0,0 +1,81 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolBuzzSaw extends ToolSaw { + + @Override + public int getToolDamagePerContainerCraft() { + return 100; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 300; + } + + @Override + public float getBaseDamage() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_ONE.toString(); + } + + @Override + public String getEntityHitSound() { + return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_TWO.toString(); + } + + @Override + public String getMiningSound() { + return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_ONE.toString(); + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return false; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadBuzzSaw.mTextureIndex] + : Textures.ItemIcons.HANDLE_BUZZSAW; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " got buzzed by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolChainsawHV.java b/src/main/java/gregtech/common/tools/ToolChainsawHV.java new file mode 100644 index 0000000000..f2dc1df3bf --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolChainsawHV.java @@ -0,0 +1,58 @@ +package gregtech.common.tools; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolChainsawHV extends ToolChainsawLV { + + @Override + public int getToolDamagePerBlockBreak() { + return 800; + } + + @Override + public int getToolDamagePerDropConversion() { + return 1600; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 12800; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 3200; + } + + @Override + public int getBaseQuality() { + return 1; + } + + @Override + public float getBaseDamage() { + return 4.0F; + } + + @Override + public float getSpeedMultiplier() { + return 4.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadChainsaw.mTextureIndex] + : Textures.ItemIcons.POWER_UNIT_HV; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolChainsawLV.java b/src/main/java/gregtech/common/tools/ToolChainsawLV.java new file mode 100644 index 0000000000..ad47ae2cdc --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolChainsawLV.java @@ -0,0 +1,185 @@ +package gregtech.common.tools; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; +import net.minecraftforge.common.IShearable; +import net.minecraftforge.event.world.BlockEvent; + +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolChainsawLV extends ToolSaw { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 800; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 3.0F; + } + + @Override + public float getSpeedMultiplier() { + return 2.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_ONE.toString(); + } + + @Override + public String getEntityHitSound() { + return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_TWO.toString(); + } + + @Override + public String getMiningSound() { + return SoundResource.IC2_TOOLS_CHAINSAW_CHAINSAW_USE_ONE.toString(); + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isChainsaw() { + return true; + } + + @Override + public boolean isWeapon() { + return true; + } + + @Override + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { + super.onToolCrafted(aStack, aPlayer); + try { + GTMod.achievements.issueAchievement(aPlayer, "brrrr"); + GTMod.achievements.issueAchievement(aPlayer, "buildChainsaw"); + } catch (Exception ignored) {} + } + + @Override + public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, + int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { + int rAmount = 0; + if ((aBlock.getMaterial() == Material.leaves) && ((aBlock instanceof IShearable))) { + aPlayer.worldObj.setBlock(aX, aY, aZ, aBlock, aMetaData, 0); + if (((IShearable) aBlock).isShearable(aStack, aPlayer.worldObj, aX, aY, aZ)) { + ((IShearable) aBlock).onSheared(aStack, aPlayer.worldObj, aX, aY, aZ, aFortune); + aDrops.clear(); + } + aPlayer.worldObj.setBlock(aX, aY, aZ, Blocks.air, 0, 0); + } else if (((aBlock.getMaterial() == Material.ice) || (aBlock.getMaterial() == Material.packedIce)) + && (aDrops.isEmpty())) { + aDrops.add(new ItemStack(aBlock, 1, aMetaData)); + aPlayer.worldObj.setBlockToAir(aX, aY, aZ); + aEvent.dropChance = 1.0F; + return 1; + } + if ((GregTechAPI.sTimber) && (!aPlayer.isSneaking()) + && (OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData)))) { + int tY = aY + 1; + for (int tH = aPlayer.worldObj.getHeight(); tY < tH; tY++) { + if ((aPlayer.worldObj.getBlock(aX, tY, aZ) != aBlock) + || (!aPlayer.worldObj.func_147480_a(aX, tY, aZ, true))) { + break; + } + rAmount++; + } + } + return rAmount; + } + + @Override + public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World aWorld, + int aX, int aY, int aZ) { + if (aBlock.isWood(aPlayer.worldObj, aX, aY, aZ) + && OrePrefixes.log.contains(new ItemStack(aBlock, 1, aMetaData))) { + float rAmount = 1.0F; + float tIncrement = 1.0F; + if ((GregTechAPI.sTimber) && !aPlayer.isSneaking()) { + int tY = aY + 1; + for (int tH = aPlayer.worldObj.getHeight(); (tY < tH) + && (aPlayer.worldObj.getBlock(aX, tY, aZ) == aBlock); tY++) { + tIncrement += 0.1F; + rAmount += tIncrement; + } + } + return 2.0F * aDefault / rAmount; + } + return (aBlock.getMaterial() == Material.leaves) || (aBlock.getMaterial() == Material.vine) + || (aBlock.getMaterial() == Material.plants) + || (aBlock.getMaterial() == Material.gourd) ? aDefault / 4.0F : aDefault; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadChainsaw.mTextureIndex] + : Textures.ItemIcons.POWER_UNIT_LV; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " was massacred by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolChainsawMV.java b/src/main/java/gregtech/common/tools/ToolChainsawMV.java new file mode 100644 index 0000000000..48fc79f86d --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolChainsawMV.java @@ -0,0 +1,58 @@ +package gregtech.common.tools; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolChainsawMV extends ToolChainsawLV { + + @Override + public int getToolDamagePerBlockBreak() { + return 200; + } + + @Override + public int getToolDamagePerDropConversion() { + return 400; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 3200; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 800; + } + + @Override + public int getBaseQuality() { + return 1; + } + + @Override + public float getBaseDamage() { + return 3.5F; + } + + @Override + public float getSpeedMultiplier() { + return 3.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 2.0F; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadChainsaw.mTextureIndex] + : Textures.ItemIcons.POWER_UNIT_MV; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolCrowbar.java b/src/main/java/gregtech/common/tools/ToolCrowbar.java new file mode 100644 index 0000000000..db72d65a6d --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolCrowbar.java @@ -0,0 +1,139 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import com.google.common.base.Strings; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.IToolStats; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.common.items.MetaGeneratedTool01; +import gregtech.common.items.behaviors.BehaviourCrowbar; + +public class ToolCrowbar extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 100; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 2.0F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return true; + } + + @Override + public boolean isCrowbar() { + return true; + } + + @Override + public boolean isWeapon() { + return true; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + if (aBlock.getMaterial() == Material.circuits) { + return true; + } + String tTool = aBlock.getHarvestTool(aMetaData); + if (Strings.isNullOrEmpty(tTool)) { + for (IToolStats i : MetaGeneratedTool01.INSTANCE.mToolStats.values()) { + if (i instanceof ToolCrowbar && i != this && !i.isMinableBlock(aBlock, aMetaData)) { + return false; + } + } + return true; + } + return tTool.equals("crowbar"); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.CROWBAR : null; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa : null; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourCrowbar(1, 1000)); + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " was removed by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolDrillHV.java b/src/main/java/gregtech/common/tools/ToolDrillHV.java new file mode 100644 index 0000000000..fb1d2b421a --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolDrillHV.java @@ -0,0 +1,69 @@ +package gregtech.common.tools; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +import gregtech.GTMod; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolDrillHV extends ToolDrillLV { + + @Override + public int getToolDamagePerBlockBreak() { + return 800; + } + + @Override + public int getToolDamagePerDropConversion() { + return 1600; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 12800; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 3200; + } + + @Override + public int getBaseQuality() { + return 1; + } + + @Override + public float getBaseDamage() { + return 3.0F; + } + + @Override + public float getSpeedMultiplier() { + return 9.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { + super.onToolCrafted(aStack, aPlayer); + try { + GTMod.achievements.issueAchievement(aPlayer, "highpowerdrill"); + GTMod.achievements.issueAchievement(aPlayer, "buildDDrill"); + } catch (Exception ignored) {} + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadDrill.mTextureIndex] + : Textures.ItemIcons.POWER_UNIT_HV; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolDrillLV.java b/src/main/java/gregtech/common/tools/ToolDrillLV.java new file mode 100644 index 0000000000..1c6dfd7de3 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolDrillLV.java @@ -0,0 +1,152 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.AchievementList; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.GTMod; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; + +public class ToolDrillLV extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 100; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 2.0F; + } + + @Override + public float getSpeedMultiplier() { + return 3.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return SoundResource.IC2_TOOLS_DRILL_DRILL_SOFT.toString(); + } + + @Override + public String getEntityHitSound() { + return SoundResource.IC2_TOOLS_DRILL_DRILL_SOFT.toString(); + } + + @Override + public String getBreakingSound() { + return SoundResource.IC2_TOOLS_DRILL_DRILL_SOFT.toString(); + } + + @Override + public String getMiningSound() { + return SoundResource.IC2_TOOLS_DRILL_DRILL_SOFT.toString(); + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "pickaxe", "shovel") + || GTToolHarvestHelper.isAppropriateMaterial( + aBlock, + Material.rock, + Material.iron, + Material.anvil, + Material.sand, + Material.grass, + Material.ground, + Material.snow, + Material.clay, + Material.glass); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadDrill.mTextureIndex] + : Textures.ItemIcons.POWER_UNIT_LV; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) {} + + @Override + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { + super.onToolCrafted(aStack, aPlayer); + aPlayer.triggerAchievement(AchievementList.buildPickaxe); + aPlayer.triggerAchievement(AchievementList.buildBetterPickaxe); + try { + GTMod.achievements.issueAchievement(aPlayer, "driltime"); + GTMod.achievements.issueAchievement(aPlayer, "buildDrill"); + } catch (Exception ignored) {} + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " got the Drill! (by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE + + ")"); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolDrillMV.java b/src/main/java/gregtech/common/tools/ToolDrillMV.java new file mode 100644 index 0000000000..b1694ee74d --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolDrillMV.java @@ -0,0 +1,58 @@ +package gregtech.common.tools; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolDrillMV extends ToolDrillLV { + + @Override + public int getToolDamagePerBlockBreak() { + return 200; + } + + @Override + public int getToolDamagePerDropConversion() { + return 400; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 3200; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 800; + } + + @Override + public int getBaseQuality() { + return 1; + } + + @Override + public float getBaseDamage() { + return 2.5F; + } + + @Override + public float getSpeedMultiplier() { + return 6.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 2.0F; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadDrill.mTextureIndex] + : Textures.ItemIcons.POWER_UNIT_MV; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolFile.java b/src/main/java/gregtech/common/tools/ToolFile.java new file mode 100644 index 0000000000..8e64dafdd2 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolFile.java @@ -0,0 +1,124 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; + +public class ToolFile extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 400; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 1.5F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return true; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isMiningTool() { + return false; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "file"); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadFile.mTextureIndex] + : Textures.ItemIcons.HANDLE_FILE; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) {} + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " has been filed D for 'Dead' by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolHardHammer.java b/src/main/java/gregtech/common/tools/ToolHardHammer.java new file mode 100644 index 0000000000..d26fe2b43d --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolHardHammer.java @@ -0,0 +1,203 @@ +package gregtech.common.tools; + +import static gregtech.GTMod.MAX_IC2; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraftforge.event.world.BlockEvent; + +import gregtech.GTMod; +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.api.util.GTUtility; +import gregtech.common.items.behaviors.BehaviourProspecting; + +public class ToolHardHammer extends GTTool { + + public static final List mEffectiveList = Arrays + .asList(EntityIronGolem.class.getName(), "EntityTowerGuardian"); + + @Override + public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, + EntityPlayer aPlayer) { + String tName = aEntity.getClass() + .getName(); + tName = tName.substring(tName.lastIndexOf('.') + 1); + return (mEffectiveList.contains(tName)) || (tName.contains("Golem")) ? aOriginalDamage * 2.0F : aOriginalDamage; + } + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 200; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 400; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 3.0F; + } + + @Override + public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { + return aOriginalHurtResistance * 2; + } + + @Override + public float getSpeedMultiplier() { + return 0.75F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return SoundResource.RANDOM_ANVIL_USE.toString(); + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getBreakingSound() { + return SoundResource.RANDOM_ANVIL_BREAK.toString(); + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return true; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isWeapon() { + return true; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "hammer", "pickaxe") + || GTToolHarvestHelper + .isAppropriateMaterial(aBlock, Material.rock, Material.glass, Material.ice, Material.packedIce) + || RecipeMaps.hammerRecipes.containsInput(new ItemStack(aBlock, 1, aMetaData)); + } + + @Override + public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, + int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { + int rConversions = 0; + GTRecipe tRecipe = RecipeMaps.hammerRecipes + .findRecipe(null, true, MAX_IC2, null, new ItemStack(aBlock, 1, aMetaData)); + if ((tRecipe == null) || (aBlock.hasTileEntity(aMetaData))) { + for (ItemStack tDrop : aDrops) { + tRecipe = RecipeMaps.hammerRecipes + .findRecipe(null, true, MAX_IC2, null, GTUtility.copyAmount(1, tDrop)); + if (tRecipe != null) { + ItemStack tHammeringOutput = tRecipe.getOutput(0); + if (tHammeringOutput != null) { + rConversions += tDrop.stackSize; + tDrop.stackSize *= tHammeringOutput.stackSize; + tHammeringOutput.stackSize = tDrop.stackSize; + GTUtility.setStack(tDrop, tHammeringOutput); + } + } + } + } else { + aDrops.clear(); + aDrops.add(tRecipe.getOutput(0)); + rConversions++; + } + return rConversions; + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadHammer.mTextureIndex] + : MetaGeneratedTool + .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourProspecting(1, 1000)); + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " was squashed by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } + + @Override + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { + super.onToolCrafted(aStack, aPlayer); + try { + GTMod.achievements.issueAchievement(aPlayer, "tools"); + } catch (Exception ignored) {} + } +} diff --git a/src/main/java/gregtech/common/tools/ToolHoe.java b/src/main/java/gregtech/common/tools/ToolHoe.java new file mode 100644 index 0000000000..8c68d41b44 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolHoe.java @@ -0,0 +1,132 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.AchievementList; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.common.items.behaviors.BehaviourHoe; + +public class ToolHoe extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 100; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 1.75F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "hoe") + || GTToolHarvestHelper.isAppropriateMaterial(aBlock, Material.gourd); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool + .getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadHoe.mTextureIndex] + : MetaGeneratedTool + .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourHoe(100)); + } + + @Override + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { + super.onToolCrafted(aStack, aPlayer); + aPlayer.triggerAchievement(AchievementList.buildHoe); + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " has been called a stupid Hoe by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolJackHammer.java b/src/main/java/gregtech/common/tools/ToolJackHammer.java new file mode 100644 index 0000000000..6c46a4c9be --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolJackHammer.java @@ -0,0 +1,128 @@ +package gregtech.common.tools; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraftforge.event.world.BlockEvent; + +import gregtech.GTMod; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.api.util.GTUtility; + +public class ToolJackHammer extends ToolDrillLV { + + @Override + public int getToolDamagePerBlockBreak() { + return 400; + } + + @Override + public int getToolDamagePerDropConversion() { + return 400; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 3200; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 800; + } + + @Override + public int getBaseQuality() { + return 1; + } + + @Override + public float getBaseDamage() { + return 3.0F; + } + + @Override + public float getSpeedMultiplier() { + return 12.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 2.0F; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "pickaxe") // + || GTToolHarvestHelper.isAppropriateMaterial( + aBlock, // + Material.rock, // + Material.glass, // + Material.ice, // + Material.packedIce // + ); + } + + @Override + public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, + int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { + int rConversions = 0; + GTRecipe tRecipe = RecipeMaps.hammerRecipes + .findRecipe(null, true, 2147483647L, null, new ItemStack(aBlock, 1, aMetaData)); + if ((tRecipe == null) || (aBlock.hasTileEntity(aMetaData))) { + for (ItemStack tDrop : aDrops) { + tRecipe = RecipeMaps.hammerRecipes + .findRecipe(null, true, 2147483647L, null, GTUtility.copyAmount(1, tDrop)); + if (tRecipe != null) { + ItemStack tHammeringOutput = tRecipe.getOutput(0); + if (tHammeringOutput != null) { + rConversions += tDrop.stackSize; + tDrop.stackSize *= tHammeringOutput.stackSize; + tHammeringOutput.stackSize = tDrop.stackSize; + GTUtility.setStack(tDrop, tHammeringOutput); + } + } + } + } else { + aDrops.clear(); + aDrops.add(tRecipe.getOutput(0)); + rConversions++; + } + return rConversions; + } + + @Override + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { + super.onToolCrafted(aStack, aPlayer); + try { + GTMod.achievements.issueAchievement(aPlayer, "hammertime"); + } catch (Exception ignored) {} + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.JACKHAMMER : null; + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " has been jackhammered into pieces by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolKnife.java b/src/main/java/gregtech/common/tools/ToolKnife.java new file mode 100644 index 0000000000..908a9daaad --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolKnife.java @@ -0,0 +1,76 @@ +package gregtech.common.tools; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; + +public class ToolKnife extends ToolSword { + + @Override + public int getToolDamagePerBlockBreak() { + return 100; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 100; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 600; + } + + @Override + public float getBaseDamage() { + return 0F; + } + + @Override + public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { + return aOriginalHurtResistance * 3; + } + + @Override + public float getSpeedMultiplier() { + return 0.5F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.KNIFE : null; + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + "<" + EnumChatFormatting.RED + + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + "> " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE + + " what are you doing?, " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE + + "?!? STAHP!!!"); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolMortar.java b/src/main/java/gregtech/common/tools/ToolMortar.java new file mode 100644 index 0000000000..e67e5924de --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolMortar.java @@ -0,0 +1,120 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolMortar extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 400; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 2.0F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isMiningTool() { + return false; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return false; + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.MORTAR : null; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa : Dyes._NULL.mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) {} + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " was grounded by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolPickaxe.java b/src/main/java/gregtech/common/tools/ToolPickaxe.java new file mode 100644 index 0000000000..91be7dae29 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolPickaxe.java @@ -0,0 +1,139 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.AchievementList; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.GTMod; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; + +public class ToolPickaxe extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 100; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 1.5F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "pickaxe") // + || GTToolHarvestHelper.isAppropriateMaterial( + aBlock, // + Material.rock, + Material.iron, + Material.anvil, + Material.glass); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadPickaxe.mTextureIndex] + : MetaGeneratedTool + .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) {} + + @Override + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { + super.onToolCrafted(aStack, aPlayer); + aPlayer.triggerAchievement(AchievementList.buildPickaxe); + aPlayer.triggerAchievement(AchievementList.buildBetterPickaxe); + try { + GTMod.achievements.issueAchievement(aPlayer, "flintpick"); + } catch (Exception ignored) {} + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " got mined by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolPlow.java b/src/main/java/gregtech/common/tools/ToolPlow.java new file mode 100644 index 0000000000..e0f25fa2f1 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolPlow.java @@ -0,0 +1,110 @@ +package gregtech.common.tools; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntitySnowman; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; +import net.minecraftforge.event.world.BlockEvent; + +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; + +public class ToolPlow extends GTTool { + + private final ThreadLocal sIsHarvestingRightNow = new ThreadLocal<>(); + + @Override + public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, + EntityPlayer aPlayer) { + return (aEntity instanceof EntitySnowman) ? aOriginalDamage * 4.0F : aOriginalDamage; + } + + @Override + public float getBaseDamage() { + return 1.0F; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "plow") + || GTToolHarvestHelper.isAppropriateMaterial(aBlock, Material.snow, Material.craftedSnow); + } + + @Override + public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World worldObj, + int aX, int aY, int aZ) { + // Speed nerf for using AOE tools to break single block + if (aPlayer != null && aPlayer.isSneaking()) { + return aDefault / 2; + } + return super.getMiningSpeed(aBlock, aMetaData, aDefault, aPlayer, worldObj, aX, aY, aZ); + } + + @Override + public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, + int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { + int rConversions = 0; + if ((this.sIsHarvestingRightNow.get() == null) && ((aPlayer instanceof EntityPlayerMP))) { + this.sIsHarvestingRightNow.set(this); + + if (!aPlayer.isSneaking()) { + for (int i = -1; i < 2; i++) { + for (int j = -1; j < 2; j++) { + for (int k = -1; k < 2; k++) { + if (((i != 0) || (j != 0) || (k != 0)) && (aStack.getItem() + .getDigSpeed( + aStack, + aPlayer.worldObj.getBlock(aX + i, aY + j, aZ + k), + aPlayer.worldObj.getBlockMetadata(aX + i, aY + j, aZ + k)) + > 0.0F) + && (((EntityPlayerMP) aPlayer).theItemInWorldManager + .tryHarvestBlock(aX + i, aY + j, aZ + k))) { + rConversions++; + } + } + } + } + } + + this.sIsHarvestingRightNow.set(null); + } + return rConversions; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadPlow.mTextureIndex] + : MetaGeneratedTool + .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE + + " plew through the yard of " + + EnumChatFormatting.RED + + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolPlunger.java b/src/main/java/gregtech/common/tools/ToolPlunger.java new file mode 100644 index 0000000000..f4dc8bd77d --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolPlunger.java @@ -0,0 +1,92 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.IItemBehaviour; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.api.util.GTUtility; +import gregtech.common.items.behaviors.BehaviourPlungerFluid; +import gregtech.common.items.behaviors.BehaviourPlungerItem; + +public class ToolPlunger extends GTTool { + + @Override + public float getBaseDamage() { + return 1.25F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 0.25F; + } + + @Override + public String getCraftingSound() { + return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); + } + + @Override + public String getEntityHitSound() { + return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); + } + + @Override + public String getMiningSound() { + return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "plunger"); + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.PLUNGER : null; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + @SuppressWarnings("unchecked") // the IItemBehaviour cast cannot be expressed strictly via generics + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourPlungerItem(getToolDamagePerDropConversion())); + aItem.addItemBehavior(aID, new BehaviourPlungerFluid(getToolDamagePerDropConversion())); + try { + Object tObject = GTUtility.callConstructor( + "gregtech.common.items.behaviors.Behaviour_Plunger_Essentia", + 0, + null, + false, + getToolDamagePerDropConversion()); + if ((tObject instanceof IItemBehaviour)) { + aItem.addItemBehavior(aID, (IItemBehaviour) tObject); + } + } catch (Throwable ignored) {} + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " got stuck trying to escape through a Pipe while fighting " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolRollingPin.java b/src/main/java/gregtech/common/tools/ToolRollingPin.java new file mode 100644 index 0000000000..1af17f3072 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolRollingPin.java @@ -0,0 +1,70 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolRollingPin extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 100; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public float getBaseDamage() { + return 2.0F; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return false; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa : Dyes._NULL.mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) {} + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.ROLLING_PIN : null; + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " got flattened by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolSaw.java b/src/main/java/gregtech/common/tools/ToolSaw.java new file mode 100644 index 0000000000..ca1ec81b13 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolSaw.java @@ -0,0 +1,149 @@ +package gregtech.common.tools; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraftforge.common.IShearable; +import net.minecraftforge.event.world.BlockEvent; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; + +public class ToolSaw extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 200; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 1.75F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, + int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { + if ((aBlock.getMaterial() == Material.leaves) && ((aBlock instanceof IShearable))) { + aPlayer.worldObj.setBlock(aX, aY, aZ, aBlock, aMetaData, 0); + if (((IShearable) aBlock).isShearable(aStack, aPlayer.worldObj, aX, aY, aZ)) { + ArrayList tDrops = ((IShearable) aBlock) + .onSheared(aStack, aPlayer.worldObj, aX, aY, aZ, aFortune); + aDrops.clear(); + aDrops.addAll(tDrops); + aEvent.dropChance = 1.0F; + } + aPlayer.worldObj.setBlock(aX, aY, aZ, Blocks.air, 0, 0); + } else if (((aBlock.getMaterial() == Material.ice) || (aBlock.getMaterial() == Material.packedIce)) + && (aDrops.isEmpty())) { + aDrops.add(new ItemStack(aBlock, 1, aMetaData)); + aPlayer.worldObj.setBlockToAir(aX, aY, aZ); + aEvent.dropChance = 1.0F; + return 1; + } + return 0; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "axe", "saw") + || GTToolHarvestHelper.isAppropriateMaterial( + aBlock, + Material.leaves, + Material.vine, + Material.wood, + Material.cactus, + Material.ice, + Material.packedIce) + || GTToolHarvestHelper.isSpecialBlock(aBlock, Blocks.ladder); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool + .getPrimaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadSaw.mTextureIndex] + : Textures.ItemIcons.HANDLE_SAW; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) {} + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " was getting cut down by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolScoop.java b/src/main/java/gregtech/common/tools/ToolScoop.java new file mode 100644 index 0000000000..6f740da95e --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolScoop.java @@ -0,0 +1,130 @@ +package gregtech.common.tools; + +import static gregtech.api.enums.Mods.Forestry; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.common.items.behaviors.BehaviourNone; +import gregtech.common.items.behaviors.BehaviourScoop; + +public class ToolScoop extends GTTool { + + public static Material sBeeHiveMaterial; + + @Override + public int getToolDamagePerBlockBreak() { + return 200; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 200; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 1.0F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "scoop") + || GTToolHarvestHelper.isAppropriateMaterial(aBlock, sBeeHiveMaterial); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.SCOOP : null; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + if (Forestry.isModLoaded()) { + aItem.addItemBehavior(aID, new BehaviourScoop(200)); + } else { + aItem.addItemBehavior(aID, new BehaviourNone()); + } + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " got scooped up by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolScrewdriver.java b/src/main/java/gregtech/common/tools/ToolScrewdriver.java new file mode 100644 index 0000000000..b73f1371aa --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolScrewdriver.java @@ -0,0 +1,160 @@ +package gregtech.common.tools; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityCaveSpider; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.common.items.behaviors.BehaviourScrewdriver; + +public class ToolScrewdriver extends GTTool { + + public static final List mEffectiveList = Arrays.asList( + EntityCaveSpider.class.getName(), + EntitySpider.class.getName(), + "EntityTFHedgeSpider", + "EntityTFKingSpider", + "EntityTFSwarmSpider", + "EntityTFTowerBroodling"); + + @Override + public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, + EntityPlayer aPlayer) { + String tName = aEntity.getClass() + .getName(); + tName = tName.substring(tName.lastIndexOf('.') + 1); + return mEffectiveList.contains(tName) ? aOriginalDamage * 2.0F : aOriginalDamage; + } + + @Override + public int getToolDamagePerBlockBreak() { + return 200; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 400; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 1.5F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return SoundResource.IC2_TOOLS_WRENCH.toString(); + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return true; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isMiningTool() { + return false; + } + + @Override + public boolean isScrewdriver() { + return true; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "screwdriver") + || GTToolHarvestHelper.isAppropriateMaterial(aBlock, Material.circuits); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadScrewdriver.mTextureIndex] + : Textures.ItemIcons.HANDLE_SCREWDRIVER; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourScrewdriver(1, 200)); + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " is screwed! (by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE + + ")"); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolScrewdriverLV.java b/src/main/java/gregtech/common/tools/ToolScrewdriverLV.java new file mode 100644 index 0000000000..31a4ffaad2 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolScrewdriverLV.java @@ -0,0 +1,34 @@ +package gregtech.common.tools; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolScrewdriverLV extends ToolScrewdriver { + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 200; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadScrewdriver.mTextureIndex] + : Textures.ItemIcons.HANDLE_ELECTRIC_SCREWDRIVER; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolSense.java b/src/main/java/gregtech/common/tools/ToolSense.java new file mode 100644 index 0000000000..55a3882db5 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolSense.java @@ -0,0 +1,114 @@ +package gregtech.common.tools; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraft.world.World; +import net.minecraftforge.event.world.BlockEvent; + +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.common.items.behaviors.BehaviourSense; + +public class ToolSense extends GTTool { + + private final ThreadLocal sIsHarvestingRightNow = new ThreadLocal<>(); + + @Override + public float getBaseDamage() { + return 3.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "sense", "scythe") + || GTToolHarvestHelper.isAppropriateMaterial(aBlock, Material.plants, Material.leaves); + } + + @Override + public float getMiningSpeed(Block aBlock, byte aMetaData, float aDefault, EntityPlayer aPlayer, World worldObj, + int aX, int aY, int aZ) { + // Speed nerf for using AOE tools to break single block + if (aPlayer != null && aPlayer.isSneaking()) { + return aDefault / 2; + } + return super.getMiningSpeed(aBlock, aMetaData, aDefault, aPlayer, worldObj, aX, aY, aZ); + } + + @Override + public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, + int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent) { + int rConversions = 0; + if ((this.sIsHarvestingRightNow.get() == null) && ((aPlayer instanceof EntityPlayerMP))) { + this.sIsHarvestingRightNow.set(this); + + if (!aPlayer.isSneaking()) { + for (int i = -2; i < 3; i++) { + for (int j = -2; j < 3; j++) { + for (int k = -2; k < 3; k++) { + if (((i != 0) || (j != 0) || (k != 0)) && (aStack.getItem() + .getDigSpeed( + aStack, + aPlayer.worldObj.getBlock(aX + i, aY + j, aZ + k), + aPlayer.worldObj.getBlockMetadata(aX + i, aY + j, aZ + k)) + > 0.0F) + && (((EntityPlayerMP) aPlayer).theItemInWorldManager + .tryHarvestBlock(aX + i, aY + j, aZ + k))) { + rConversions++; + } + } + } + } + } + + this.sIsHarvestingRightNow.set(null); + } + return rConversions; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadSense.mTextureIndex] + : MetaGeneratedTool + .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourSense(getToolDamagePerBlockBreak())); + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE + + " has taken the Soul of " + + EnumChatFormatting.RED + + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE); + } + +} diff --git a/src/main/java/gregtech/common/tools/ToolShovel.java b/src/main/java/gregtech/common/tools/ToolShovel.java new file mode 100644 index 0000000000..d4676efeed --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolShovel.java @@ -0,0 +1,127 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; + +public class ToolShovel extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 100; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 1.5F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "shovel") + || GTToolHarvestHelper.isAppropriateMaterial( + aBlock, + Material.sand, + Material.grass, + Material.ground, + Material.snow, + Material.clay); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadShovel.mTextureIndex] + : MetaGeneratedTool + .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) {} + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " got dug up by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolSoftHammer.java b/src/main/java/gregtech/common/tools/ToolSoftHammer.java new file mode 100644 index 0000000000..0cd3aa2eac --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolSoftHammer.java @@ -0,0 +1,139 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.common.items.behaviors.BehaviourSoftHammer; + +public class ToolSoftHammer extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 800; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 3.0F; + } + + @Override + public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { + return aOriginalHurtResistance * 2; + } + + @Override + public float getSpeedMultiplier() { + return 0.1F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 8.0F; + } + + @Override + public String getCraftingSound() { + return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); + } + + @Override + public String getEntityHitSound() { + return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); + } + + @Override + public String getMiningSound() { + return SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE.toString(); + } + + @Override + public boolean canBlock() { + return true; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isMiningTool() { + return false; + } + + @Override + public boolean isWeapon() { + return true; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "softhammer"); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadMallet.mTextureIndex] + : MetaGeneratedTool.getSecondaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.handleMallet.mTextureIndex]; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourSoftHammer(100)); + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " was hammered to death by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolSolderingIron.java b/src/main/java/gregtech/common/tools/ToolSolderingIron.java new file mode 100644 index 0000000000..9ae4fade4c --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolSolderingIron.java @@ -0,0 +1,153 @@ +package gregtech.common.tools; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityCaveSpider; +import net.minecraft.entity.monster.EntitySpider; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.common.items.behaviors.BehaviourScrewdriver; + +public class ToolSolderingIron extends GTTool { + + public static final List mEffectiveList = Arrays.asList( + EntityCaveSpider.class.getName(), + EntitySpider.class.getName(), + "EntityTFHedgeSpider", + "EntityTFKingSpider", + "EntityTFSwarmSpider", + "EntityTFTowerBroodling"); + + @Override + public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, + EntityPlayer aPlayer) { + String tName = aEntity.getClass() + .getName(); + tName = tName.substring(tName.lastIndexOf('.') + 1); + return mEffectiveList.contains(tName) ? aOriginalDamage * 2.0F : aOriginalDamage; + } + + @Override + public int getToolDamagePerBlockBreak() { + return 1000; + } + + @Override + public int getToolDamagePerDropConversion() { + return 500; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 1000; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 500; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 1.5F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return SoundResource.IC2_TOOLS_WRENCH.toString(); + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return true; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isMiningTool() { + return false; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "soldering_iron") + || GTToolHarvestHelper.isAppropriateMaterial(aBlock, Material.circuits); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mIconSet.mTextures[49] + : Textures.ItemIcons.HANDLE_SOLDERING; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourScrewdriver(1, 200)); + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " got soldert! (by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE + + ")"); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolSword.java b/src/main/java/gregtech/common/tools/ToolSword.java new file mode 100644 index 0000000000..03c76f92c6 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolSword.java @@ -0,0 +1,128 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.AchievementList; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; + +public class ToolSword extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 200; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 100; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 100; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 4.0F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return true; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isWeapon() { + return true; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "sword") + || GTToolHarvestHelper.isAppropriateMaterial( + aBlock, + Material.leaves, + Material.gourd, + Material.vine, + Material.web, + Material.cloth, + Material.carpet, + Material.plants, + Material.cactus, + Material.cake, + Material.tnt, + Material.sponge); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadSword.mTextureIndex] + : Textures.ItemIcons.HANDLE_SWORD; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return !aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { + super.onToolCrafted(aStack, aPlayer); + aPlayer.triggerAchievement(AchievementList.buildSword); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolTurbine.java b/src/main/java/gregtech/common/tools/ToolTurbine.java new file mode 100644 index 0000000000..ace22b06ba --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolTurbine.java @@ -0,0 +1,58 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public abstract class ToolTurbine extends GTTool { + + @Override + public abstract float getBaseDamage(); + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return false; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? getTurbineIcon() : null; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa : null; + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE + + " put " + + EnumChatFormatting.RED + + aEntity.getCommandSenderName() + + "s" + + EnumChatFormatting.WHITE + + " head into a turbine"); + } + + public abstract IIconContainer getTurbineIcon(); + + @Override + public abstract float getSpeedMultiplier(); + + @Override + public abstract float getMaxDurabilityMultiplier(); + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolTurbineHuge.java b/src/main/java/gregtech/common/tools/ToolTurbineHuge.java new file mode 100644 index 0000000000..94b85f0d5c --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolTurbineHuge.java @@ -0,0 +1,27 @@ +package gregtech.common.tools; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; + +public class ToolTurbineHuge extends ToolTurbine { + + @Override + public float getSpeedMultiplier() { + return 4.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public float getBaseDamage() { + return 7.5F; + } + + @Override + public IIconContainer getTurbineIcon() { + return Textures.ItemIcons.TURBINE_HUGE; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolTurbineLarge.java b/src/main/java/gregtech/common/tools/ToolTurbineLarge.java new file mode 100644 index 0000000000..59b6a3afe1 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolTurbineLarge.java @@ -0,0 +1,27 @@ +package gregtech.common.tools; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; + +public class ToolTurbineLarge extends ToolTurbine { + + @Override + public float getSpeedMultiplier() { + return 3.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 3.0F; + } + + @Override + public float getBaseDamage() { + return 5.0F; + } + + @Override + public IIconContainer getTurbineIcon() { + return Textures.ItemIcons.TURBINE_LARGE; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolTurbineNormal.java b/src/main/java/gregtech/common/tools/ToolTurbineNormal.java new file mode 100644 index 0000000000..33328db96e --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolTurbineNormal.java @@ -0,0 +1,27 @@ +package gregtech.common.tools; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; + +public class ToolTurbineNormal extends ToolTurbine { + + @Override + public float getSpeedMultiplier() { + return 2.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 2.0F; + } + + @Override + public float getBaseDamage() { + return 2.5F; + } + + @Override + public IIconContainer getTurbineIcon() { + return Textures.ItemIcons.TURBINE; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolTurbineSmall.java b/src/main/java/gregtech/common/tools/ToolTurbineSmall.java new file mode 100644 index 0000000000..8313ed1818 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolTurbineSmall.java @@ -0,0 +1,27 @@ +package gregtech.common.tools; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; + +public class ToolTurbineSmall extends ToolTurbine { + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public float getBaseDamage() { + return 0.0F; + } + + @Override + public IIconContainer getTurbineIcon() { + return Textures.ItemIcons.TURBINE_SMALL; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolUniversalSpade.java b/src/main/java/gregtech/common/tools/ToolUniversalSpade.java new file mode 100644 index 0000000000..9333e1f19c --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolUniversalSpade.java @@ -0,0 +1,160 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.AchievementList; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.GTMod; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.common.items.behaviors.BehaviourCrowbar; + +public class ToolUniversalSpade extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 400; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 100; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 3.0F; + } + + @Override + public float getSpeedMultiplier() { + return 0.75F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return null; + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return true; + } + + @Override + public boolean isCrowbar() { + return true; + } + + @Override + public boolean isWeapon() { + return true; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "shovel", "axe", "saw", "sword", "crowbar") + || GTToolHarvestHelper.isAppropriateMaterial( + aBlock, + Material.sand, + Material.grass, + Material.ground, + Material.snow, + Material.clay, + Material.leaves, + Material.vine, + Material.wood, + Material.cactus, + Material.circuits, + Material.gourd, + Material.web, + Material.cloth, + Material.carpet, + Material.plants, + Material.cake, + Material.tnt, + Material.sponge); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadUniversalSpade.mTextureIndex] + : MetaGeneratedTool + .getSecondaryMaterial(aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.stick.mTextureIndex]; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourCrowbar(2, 2000)); + } + + @Override + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer) { + super.onToolCrafted(aStack, aPlayer); + aPlayer.triggerAchievement(AchievementList.buildSword); + try { + GTMod.achievements.issueAchievement(aPlayer, "unitool"); + } catch (Exception ignored) {} + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " has been digged by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolWireCutter.java b/src/main/java/gregtech/common/tools/ToolWireCutter.java new file mode 100644 index 0000000000..6009504d80 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolWireCutter.java @@ -0,0 +1,117 @@ +package gregtech.common.tools; + +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; + +public class ToolWireCutter extends GTTool { + + @Override + public int getToolDamagePerBlockBreak() { + return 100; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 400; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 1.25F; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return SoundResource.IC2_TOOLS_INSULATION_CUTTERS.toString(); + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return SoundResource.IC2_TOOLS_INSULATION_CUTTERS.toString(); + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(aBlock, aMetaData, "cutter"); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.WIRE_CUTTER : null; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) {} + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE + + " has cut the Cable for the Life Support Machine of " + + EnumChatFormatting.RED + + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gregtech/common/tools/ToolWrench.java b/src/main/java/gregtech/common/tools/ToolWrench.java new file mode 100644 index 0000000000..3d2adf4896 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolWrench.java @@ -0,0 +1,279 @@ +package gregtech.common.tools; + +import static gregtech.api.items.MetaGeneratedTool.getPrimaryMaterial; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.event.world.BlockEvent; + +import appeng.api.parts.IPartHost; +import appeng.block.AEBaseTileBlock; +import appeng.parts.PartPlacement; +import appeng.util.Platform; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTToolHarvestHelper; +import gregtech.common.items.behaviors.BehaviourSwitchMode; +import gregtech.common.items.behaviors.BehaviourWrench; +import ic2.api.tile.IWrenchable; + +public class ToolWrench extends GTTool { + + public static final List mEffectiveList = Arrays + .asList(EntityIronGolem.class.getName(), "EntityTowerGuardian"); + + @Override + public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, + EntityPlayer aPlayer) { + String tName = aEntity.getClass() + .getName(); + tName = tName.substring(tName.lastIndexOf('.') + 1); + return (mEffectiveList.contains(tName)) || (tName.contains("Golem")) ? aOriginalDamage * 2.0F : aOriginalDamage; + } + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 800; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 3.0F; + } + + @Override + public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity) { + return aOriginalHurtResistance * 2; + } + + @Override + public float getSpeedMultiplier() { + return 1.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public String getCraftingSound() { + return SoundResource.IC2_TOOLS_WRENCH.toString(); + } + + @Override + public String getEntityHitSound() { + return null; + } + + @Override + public String getMiningSound() { + return SoundResource.IC2_TOOLS_WRENCH.toString(); + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isWrench() { + return true; + } + + @Override + public boolean isMinableBlock(Block block, byte aMetaData) { + return GTToolHarvestHelper.isAppropriateTool(block, aMetaData, "wrench") + || GTToolHarvestHelper.isAppropriateMaterial(block, Material.piston) + || block instanceof AEBaseTileBlock + || GTToolHarvestHelper.isSpecialBlock(block, Blocks.crafting_table, Blocks.bookshelf) + || BehaviourWrench.isVanillaRotatable(block) + || GTToolHarvestHelper.isIC2Wrenchable(block); + } + + @Override + public ItemStack getBrokenItem(ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.WRENCH : null; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? getPrimaryMaterial(aStack).mRGBa : null; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + aItem.addItemBehavior(aID, new BehaviourSwitchMode()); + aItem.addItemBehavior(aID, new BehaviourWrench(100)); + } + + @Override + public IChatComponent getDeathMessage(EntityLivingBase aPlayer, EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.GREEN + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE + + " threw a Monkey Wrench into the Plans of " + + EnumChatFormatting.RED + + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE); + } + + /** + *

+ * holding drop from {@link IWrenchable#getWrenchDrop(EntityPlayer)} + *

+ * Since no tile available during + * {@link #convertBlockDrops(List, ItemStack, EntityPlayer, Block, int, int, int, byte, int, boolean, BlockEvent.HarvestDropsEvent)}, + * this is filled during + * {@link #onBreakBlock(EntityPlayer, int, int, int, Block, byte, TileEntity, BlockEvent.BreakEvent)} + */ + private ItemStack wrenchableDrop = null; + /** + *

+ * drop rate from {@link IWrenchable#getWrenchDropRate()} + *

+ * see {@link #wrenchableDrop} + */ + private float wrenchableDropRate = 0.0f; + + /** + *

+ * prevent recursion from + * {@link AEBaseTileBlock#onBlockActivated(World, int, int, int, EntityPlayer, int, float, float, float)} + *

+ */ + private boolean LastEventFromThis = false; + + @Override + public void onBreakBlock(@Nonnull EntityPlayer player, int x, int y, int z, @Nonnull Block block, byte metadata, + TileEntity tile, @Nonnull BlockEvent.BreakEvent event) { + if (tile instanceof IWrenchable wrenchable) { + if (!wrenchable.wrenchCanRemove(player)) { + event.setCanceled(true); + return; + } + wrenchableDrop = wrenchable.getWrenchDrop(player); + wrenchableDropRate = wrenchable.getWrenchDropRate(); + } + if (block instanceof AEBaseTileBlock aeBaseTileBlock) { + if (LastEventFromThis) { + return; + } + final boolean sneak = player.isSneaking(); + try { + LastEventFromThis = true; + player.setSneaking(true); + final MovingObjectPosition movObjPosition = Platform.rayTrace(player, true, false); + if (movObjPosition == null) { + event.setCanceled(true); + return; + } + + final int sideHit = movObjPosition.sideHit; + if (tile instanceof IPartHost) { + if (sneak && PartPlacement.place( + player.getHeldItem(), + x, + y, + z, + sideHit, + player, + player.worldObj, + PartPlacement.PlaceType.INTERACT_FIRST_PASS, + 0)) { + event.setCanceled(true); + } + return; + } + if (aeBaseTileBlock.onBlockActivated(event.world, x, y, z, player, sideHit, x, y, z)) { + event.setCanceled(true); + } + } finally { + LastEventFromThis = false; + player.setSneaking(sneak); + } + } + } + + @Override + public int convertBlockDrops(List drops, ItemStack Stack, EntityPlayer player, Block block, int x, int y, + int z, byte metaData, int fortune, boolean silkTouch, BlockEvent.HarvestDropsEvent event) { + ItemStack drop = null; + int modified = 0; + if (wrenchableDrop != null) { + drop = wrenchableDrop; + wrenchableDrop = null; + modified = wrenchableDropRate == 1.0f ? 3 : 10; + wrenchableDropRate = 0.0f; + } else if (block == Blocks.bookshelf || block == Blocks.ender_chest) { + drop = new ItemStack(block); + modified = 1; + } + + if (drop != null) { + event.dropChance = 1.0f; + drops.clear(); + drops.add(drop); + } + return modified; + } + + @Override + public byte getMaxMode() { + return 2; + } + + @Override + public String getToolTypeName() { + return "wrench"; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolWrenchHV.java b/src/main/java/gregtech/common/tools/ToolWrenchHV.java new file mode 100644 index 0000000000..f8e9e11244 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolWrenchHV.java @@ -0,0 +1,69 @@ +package gregtech.common.tools; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolWrenchHV extends ToolWrenchLV { + + @Override + public int getToolDamagePerBlockBreak() { + return 800; + } + + @Override + public int getToolDamagePerDropConversion() { + return 1600; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 12800; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 3200; + } + + @Override + public int getBaseQuality() { + return 1; + } + + @Override + public float getBaseDamage() { + return 2.0F; + } + + @Override + public float getSpeedMultiplier() { + return 4.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadWrench.mTextureIndex] + : Textures.ItemIcons.POWER_UNIT_HV; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolWrenchLV.java b/src/main/java/gregtech/common/tools/ToolWrenchLV.java new file mode 100644 index 0000000000..69e9b9f230 --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolWrenchLV.java @@ -0,0 +1,77 @@ +package gregtech.common.tools; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolWrenchLV extends ToolWrench { + + @Override + public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, + EntityPlayer aPlayer) { + return aOriginalDamage; + } + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 800; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 200; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 1.0F; + } + + @Override + public float getSpeedMultiplier() { + return 2.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.0F; + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadWrench.mTextureIndex] + : Textures.ItemIcons.POWER_UNIT_LV; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } +} diff --git a/src/main/java/gregtech/common/tools/ToolWrenchMV.java b/src/main/java/gregtech/common/tools/ToolWrenchMV.java new file mode 100644 index 0000000000..e1f1cf223d --- /dev/null +++ b/src/main/java/gregtech/common/tools/ToolWrenchMV.java @@ -0,0 +1,69 @@ +package gregtech.common.tools; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; + +public class ToolWrenchMV extends ToolWrenchLV { + + @Override + public int getToolDamagePerBlockBreak() { + return 200; + } + + @Override + public int getToolDamagePerDropConversion() { + return 400; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 3200; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 800; + } + + @Override + public int getBaseQuality() { + return 1; + } + + @Override + public float getBaseDamage() { + return 1.5F; + } + + @Override + public float getSpeedMultiplier() { + return 3.0F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 2.0F; + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead + ? MetaGeneratedTool.getPrimaryMaterial( + aStack).mIconSet.mTextures[gregtech.api.enums.OrePrefixes.toolHeadWrench.mTextureIndex] + : Textures.ItemIcons.POWER_UNIT_MV; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa + : MetaGeneratedTool.getSecondaryMaterial(aStack).mRGBa; + } +} diff --git a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_BranchCutter.java b/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_BranchCutter.java deleted file mode 100644 index b831306df9..0000000000 --- a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_BranchCutter.java +++ /dev/null @@ -1,39 +0,0 @@ -package gregtech.common.tools.pocket; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.common.items.behaviors.Behaviour_Switch_Metadata; -import gregtech.common.tools.GT_Tool_BranchCutter; - -public class GT_Tool_Pocket_BranchCutter extends GT_Tool_BranchCutter { - - public final int mSwitchIndex; - - public GT_Tool_Pocket_BranchCutter(int aSwitchIndex) { - mSwitchIndex = aSwitchIndex; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_BRANCHCUTTER : Textures.ItemIcons.VOID; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - super.onStatsAddedToTool(aItem, aID); - aItem.addItemBehavior(aID, new Behaviour_Switch_Metadata(mSwitchIndex, true, true)); - } -} diff --git a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_File.java b/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_File.java deleted file mode 100644 index 84372b1d98..0000000000 --- a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_File.java +++ /dev/null @@ -1,39 +0,0 @@ -package gregtech.common.tools.pocket; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.common.items.behaviors.Behaviour_Switch_Metadata; -import gregtech.common.tools.GT_Tool_File; - -public class GT_Tool_Pocket_File extends GT_Tool_File { - - public final int mSwitchIndex; - - public GT_Tool_Pocket_File(int aSwitchIndex) { - mSwitchIndex = aSwitchIndex; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_FILE : Textures.ItemIcons.VOID; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - super.onStatsAddedToTool(aItem, aID); - aItem.addItemBehavior(aID, new Behaviour_Switch_Metadata(mSwitchIndex, true, true)); - } -} diff --git a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Knife.java b/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Knife.java deleted file mode 100644 index 2b43984c51..0000000000 --- a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Knife.java +++ /dev/null @@ -1,39 +0,0 @@ -package gregtech.common.tools.pocket; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.common.items.behaviors.Behaviour_Switch_Metadata; -import gregtech.common.tools.GT_Tool_Knife; - -public class GT_Tool_Pocket_Knife extends GT_Tool_Knife { - - public final int mSwitchIndex; - - public GT_Tool_Pocket_Knife(int aSwitchIndex) { - mSwitchIndex = aSwitchIndex; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_KNIFE : Textures.ItemIcons.VOID; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - super.onStatsAddedToTool(aItem, aID); - aItem.addItemBehavior(aID, new Behaviour_Switch_Metadata(mSwitchIndex, true, true)); - } -} diff --git a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Multitool.java b/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Multitool.java deleted file mode 100644 index 16ab9229c6..0000000000 --- a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Multitool.java +++ /dev/null @@ -1,50 +0,0 @@ -package gregtech.common.tools.pocket; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.common.items.behaviors.Behaviour_Switch_Metadata; -import gregtech.common.tools.GT_Tool; - -public class GT_Tool_Pocket_Multitool extends GT_Tool { - - public final int mSwitchIndex; - - public GT_Tool_Pocket_Multitool(int aSwitchIndex) { - mSwitchIndex = aSwitchIndex; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_CLOSED : Textures.ItemIcons.VOID; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - super.onStatsAddedToTool(aItem, aID); - aItem.addItemBehavior(aID, new Behaviour_Switch_Metadata(mSwitchIndex, true, true)); - } - - @Override - public float getBaseDamage() { - return 0; - } - - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData) { - return false; - } -} diff --git a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Saw.java b/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Saw.java deleted file mode 100644 index 579f809f2a..0000000000 --- a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Saw.java +++ /dev/null @@ -1,39 +0,0 @@ -package gregtech.common.tools.pocket; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.common.items.behaviors.Behaviour_Switch_Metadata; -import gregtech.common.tools.GT_Tool_Saw; - -public class GT_Tool_Pocket_Saw extends GT_Tool_Saw { - - public final int mSwitchIndex; - - public GT_Tool_Pocket_Saw(int aSwitchIndex) { - mSwitchIndex = aSwitchIndex; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_SAW : Textures.ItemIcons.VOID; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - super.onStatsAddedToTool(aItem, aID); - aItem.addItemBehavior(aID, new Behaviour_Switch_Metadata(mSwitchIndex, true, true)); - } -} diff --git a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Screwdriver.java b/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Screwdriver.java deleted file mode 100644 index ce04ba2d15..0000000000 --- a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_Screwdriver.java +++ /dev/null @@ -1,39 +0,0 @@ -package gregtech.common.tools.pocket; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.common.items.behaviors.Behaviour_Switch_Metadata; -import gregtech.common.tools.GT_Tool_Screwdriver; - -public class GT_Tool_Pocket_Screwdriver extends GT_Tool_Screwdriver { - - public final int mSwitchIndex; - - public GT_Tool_Pocket_Screwdriver(int aSwitchIndex) { - mSwitchIndex = aSwitchIndex; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_SCREWDRIVER : Textures.ItemIcons.VOID; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - super.onStatsAddedToTool(aItem, aID); - aItem.addItemBehavior(aID, new Behaviour_Switch_Metadata(mSwitchIndex, true, true)); - } -} diff --git a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_WireCutter.java b/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_WireCutter.java deleted file mode 100644 index 6907ff6735..0000000000 --- a/src/main/java/gregtech/common/tools/pocket/GT_Tool_Pocket_WireCutter.java +++ /dev/null @@ -1,39 +0,0 @@ -package gregtech.common.tools.pocket; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.common.items.behaviors.Behaviour_Switch_Metadata; -import gregtech.common.tools.GT_Tool_WireCutter; - -public class GT_Tool_Pocket_WireCutter extends GT_Tool_WireCutter { - - public final int mSwitchIndex; - - public GT_Tool_Pocket_WireCutter(int aSwitchIndex) { - mSwitchIndex = aSwitchIndex; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 4.0F; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_WIRECUTTER : Textures.ItemIcons.VOID; - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa; - } - - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID) { - super.onStatsAddedToTool(aItem, aID); - aItem.addItemBehavior(aID, new Behaviour_Switch_Metadata(mSwitchIndex, true, true)); - } -} diff --git a/src/main/java/gregtech/common/tools/pocket/ToolPocketBranchCutter.java b/src/main/java/gregtech/common/tools/pocket/ToolPocketBranchCutter.java new file mode 100644 index 0000000000..a1bf6d9c8b --- /dev/null +++ b/src/main/java/gregtech/common/tools/pocket/ToolPocketBranchCutter.java @@ -0,0 +1,39 @@ +package gregtech.common.tools.pocket; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.common.items.behaviors.BehaviourSwitchMetadata; +import gregtech.common.tools.ToolBranchCutter; + +public class ToolPocketBranchCutter extends ToolBranchCutter { + + public final int mSwitchIndex; + + public ToolPocketBranchCutter(int aSwitchIndex) { + mSwitchIndex = aSwitchIndex; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_BRANCHCUTTER : Textures.ItemIcons.VOID; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + super.onStatsAddedToTool(aItem, aID); + aItem.addItemBehavior(aID, new BehaviourSwitchMetadata(mSwitchIndex, true, true)); + } +} diff --git a/src/main/java/gregtech/common/tools/pocket/ToolPocketFile.java b/src/main/java/gregtech/common/tools/pocket/ToolPocketFile.java new file mode 100644 index 0000000000..cd598437ab --- /dev/null +++ b/src/main/java/gregtech/common/tools/pocket/ToolPocketFile.java @@ -0,0 +1,39 @@ +package gregtech.common.tools.pocket; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.common.items.behaviors.BehaviourSwitchMetadata; +import gregtech.common.tools.ToolFile; + +public class ToolPocketFile extends ToolFile { + + public final int mSwitchIndex; + + public ToolPocketFile(int aSwitchIndex) { + mSwitchIndex = aSwitchIndex; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_FILE : Textures.ItemIcons.VOID; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + super.onStatsAddedToTool(aItem, aID); + aItem.addItemBehavior(aID, new BehaviourSwitchMetadata(mSwitchIndex, true, true)); + } +} diff --git a/src/main/java/gregtech/common/tools/pocket/ToolPocketKnife.java b/src/main/java/gregtech/common/tools/pocket/ToolPocketKnife.java new file mode 100644 index 0000000000..9dd2492a89 --- /dev/null +++ b/src/main/java/gregtech/common/tools/pocket/ToolPocketKnife.java @@ -0,0 +1,39 @@ +package gregtech.common.tools.pocket; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.common.items.behaviors.BehaviourSwitchMetadata; +import gregtech.common.tools.ToolKnife; + +public class ToolPocketKnife extends ToolKnife { + + public final int mSwitchIndex; + + public ToolPocketKnife(int aSwitchIndex) { + mSwitchIndex = aSwitchIndex; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_KNIFE : Textures.ItemIcons.VOID; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + super.onStatsAddedToTool(aItem, aID); + aItem.addItemBehavior(aID, new BehaviourSwitchMetadata(mSwitchIndex, true, true)); + } +} diff --git a/src/main/java/gregtech/common/tools/pocket/ToolPocketMultitool.java b/src/main/java/gregtech/common/tools/pocket/ToolPocketMultitool.java new file mode 100644 index 0000000000..e55671d486 --- /dev/null +++ b/src/main/java/gregtech/common/tools/pocket/ToolPocketMultitool.java @@ -0,0 +1,50 @@ +package gregtech.common.tools.pocket; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.common.items.behaviors.BehaviourSwitchMetadata; +import gregtech.common.tools.GTTool; + +public class ToolPocketMultitool extends GTTool { + + public final int mSwitchIndex; + + public ToolPocketMultitool(int aSwitchIndex) { + mSwitchIndex = aSwitchIndex; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_CLOSED : Textures.ItemIcons.VOID; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + super.onStatsAddedToTool(aItem, aID); + aItem.addItemBehavior(aID, new BehaviourSwitchMetadata(mSwitchIndex, true, true)); + } + + @Override + public float getBaseDamage() { + return 0; + } + + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData) { + return false; + } +} diff --git a/src/main/java/gregtech/common/tools/pocket/ToolPocketSaw.java b/src/main/java/gregtech/common/tools/pocket/ToolPocketSaw.java new file mode 100644 index 0000000000..4f73109d59 --- /dev/null +++ b/src/main/java/gregtech/common/tools/pocket/ToolPocketSaw.java @@ -0,0 +1,39 @@ +package gregtech.common.tools.pocket; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.common.items.behaviors.BehaviourSwitchMetadata; +import gregtech.common.tools.ToolSaw; + +public class ToolPocketSaw extends ToolSaw { + + public final int mSwitchIndex; + + public ToolPocketSaw(int aSwitchIndex) { + mSwitchIndex = aSwitchIndex; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_SAW : Textures.ItemIcons.VOID; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + super.onStatsAddedToTool(aItem, aID); + aItem.addItemBehavior(aID, new BehaviourSwitchMetadata(mSwitchIndex, true, true)); + } +} diff --git a/src/main/java/gregtech/common/tools/pocket/ToolPocketScrewdriver.java b/src/main/java/gregtech/common/tools/pocket/ToolPocketScrewdriver.java new file mode 100644 index 0000000000..f4a53ed6f6 --- /dev/null +++ b/src/main/java/gregtech/common/tools/pocket/ToolPocketScrewdriver.java @@ -0,0 +1,39 @@ +package gregtech.common.tools.pocket; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.common.items.behaviors.BehaviourSwitchMetadata; +import gregtech.common.tools.ToolScrewdriver; + +public class ToolPocketScrewdriver extends ToolScrewdriver { + + public final int mSwitchIndex; + + public ToolPocketScrewdriver(int aSwitchIndex) { + mSwitchIndex = aSwitchIndex; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_SCREWDRIVER : Textures.ItemIcons.VOID; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + super.onStatsAddedToTool(aItem, aID); + aItem.addItemBehavior(aID, new BehaviourSwitchMetadata(mSwitchIndex, true, true)); + } +} diff --git a/src/main/java/gregtech/common/tools/pocket/ToolPocketWireCutter.java b/src/main/java/gregtech/common/tools/pocket/ToolPocketWireCutter.java new file mode 100644 index 0000000000..5dcd03c53b --- /dev/null +++ b/src/main/java/gregtech/common/tools/pocket/ToolPocketWireCutter.java @@ -0,0 +1,39 @@ +package gregtech.common.tools.pocket; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.common.items.behaviors.BehaviourSwitchMetadata; +import gregtech.common.tools.ToolWireCutter; + +public class ToolPocketWireCutter extends ToolWireCutter { + + public final int mSwitchIndex; + + public ToolPocketWireCutter(int aSwitchIndex) { + mSwitchIndex = aSwitchIndex; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 4.0F; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? Textures.ItemIcons.POCKET_MULTITOOL_WIRECUTTER : Textures.ItemIcons.VOID; + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa; + } + + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID) { + super.onStatsAddedToTool(aItem, aID); + aItem.addItemBehavior(aID, new BehaviourSwitchMetadata(mSwitchIndex, true, true)); + } +} diff --git a/src/main/java/gregtech/crossmod/holoinventory/GTInventoryDecoder.java b/src/main/java/gregtech/crossmod/holoinventory/GTInventoryDecoder.java new file mode 100644 index 0000000000..6774a32c6d --- /dev/null +++ b/src/main/java/gregtech/crossmod/holoinventory/GTInventoryDecoder.java @@ -0,0 +1,38 @@ +package gregtech.crossmod.holoinventory; + +import static net.dries007.holoInventory.util.NBTKeys.NBT_KEY_COUNT; + +import java.util.List; + +import net.dries007.holoInventory.compat.InventoryDecoder; +import net.dries007.holoInventory.compat.InventoryDecoderRegistry; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; + +import gregtech.api.metatileentity.BaseTileEntity; + +public class GTInventoryDecoder extends InventoryDecoder { + + public GTInventoryDecoder() { + super(BaseTileEntity.class); + } + + @Override + public NBTTagList toNBT(IInventory inv) { + List items = ((BaseTileEntity) inv).getItemsForHoloGlasses(); + if (items == null) { + return InventoryDecoderRegistry.DEFAULT.toNBT(inv); + } + NBTTagList tagList = new NBTTagList(); + for (ItemStack stack : items) { + if (stack != null) { + NBTTagCompound tag = stack.writeToNBT(new NBTTagCompound()); + tag.setInteger(NBT_KEY_COUNT, stack.stackSize); + tagList.appendTag(tag); + } + } + return tagList; + } +} diff --git a/src/main/java/gregtech/crossmod/holoinventory/GT_InventoryDecoder.java b/src/main/java/gregtech/crossmod/holoinventory/GT_InventoryDecoder.java deleted file mode 100644 index 7f3651990d..0000000000 --- a/src/main/java/gregtech/crossmod/holoinventory/GT_InventoryDecoder.java +++ /dev/null @@ -1,38 +0,0 @@ -package gregtech.crossmod.holoinventory; - -import static net.dries007.holoInventory.util.NBTKeys.NBT_KEY_COUNT; - -import java.util.List; - -import net.dries007.holoInventory.compat.InventoryDecoder; -import net.dries007.holoInventory.compat.InventoryDecoderRegistry; -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; - -import gregtech.api.metatileentity.BaseTileEntity; - -public class GT_InventoryDecoder extends InventoryDecoder { - - public GT_InventoryDecoder() { - super(BaseTileEntity.class); - } - - @Override - public NBTTagList toNBT(IInventory inv) { - List items = ((BaseTileEntity) inv).getItemsForHoloGlasses(); - if (items == null) { - return InventoryDecoderRegistry.DEFAULT.toNBT(inv); - } - NBTTagList tagList = new NBTTagList(); - for (ItemStack stack : items) { - if (stack != null) { - NBTTagCompound tag = stack.writeToNBT(new NBTTagCompound()); - tag.setInteger(NBT_KEY_COUNT, stack.stackSize); - tagList.appendTag(tag); - } - } - return tagList; - } -} diff --git a/src/main/java/gregtech/crossmod/holoinventory/HoloInventory.java b/src/main/java/gregtech/crossmod/holoinventory/HoloInventory.java index d7dcdcf4b5..ce3c1f74eb 100644 --- a/src/main/java/gregtech/crossmod/holoinventory/HoloInventory.java +++ b/src/main/java/gregtech/crossmod/holoinventory/HoloInventory.java @@ -5,6 +5,6 @@ import net.dries007.holoInventory.compat.InventoryDecoderRegistry; public class HoloInventory { public static void init() { - InventoryDecoderRegistry.register(new GT_InventoryDecoder()); + InventoryDecoderRegistry.register(new GTInventoryDecoder()); } } diff --git a/src/main/java/gregtech/crossmod/visualprospecting/GT_VisualProspecting_Database.java b/src/main/java/gregtech/crossmod/visualprospecting/GT_VisualProspecting_Database.java deleted file mode 100644 index f18700f9ea..0000000000 --- a/src/main/java/gregtech/crossmod/visualprospecting/GT_VisualProspecting_Database.java +++ /dev/null @@ -1,25 +0,0 @@ -package gregtech.crossmod.visualprospecting; - -import java.util.Optional; - -import javax.annotation.Nullable; - -import net.minecraft.world.ChunkCoordIntPair; - -public class GT_VisualProspecting_Database { - - private static IDatabase database; - - @SuppressWarnings("unused") - public static void registerDatabase(IDatabase aDatabase) { - database = aDatabase; - } - - public static Optional getVeinName(int dimensionId, @Nullable ChunkCoordIntPair coordinates) { - if (database == null || coordinates == null) { - return Optional.empty(); - } - - return database.getVeinName(dimensionId, coordinates); - } -} diff --git a/src/main/java/gregtech/crossmod/visualprospecting/VisualProspectingDatabase.java b/src/main/java/gregtech/crossmod/visualprospecting/VisualProspectingDatabase.java new file mode 100644 index 0000000000..775326cacf --- /dev/null +++ b/src/main/java/gregtech/crossmod/visualprospecting/VisualProspectingDatabase.java @@ -0,0 +1,25 @@ +package gregtech.crossmod.visualprospecting; + +import java.util.Optional; + +import javax.annotation.Nullable; + +import net.minecraft.world.ChunkCoordIntPair; + +public class VisualProspectingDatabase { + + private static IDatabase database; + + @SuppressWarnings("unused") + public static void registerDatabase(IDatabase aDatabase) { + database = aDatabase; + } + + public static Optional getVeinName(int dimensionId, @Nullable ChunkCoordIntPair coordinates) { + if (database == null || coordinates == null) { + return Optional.empty(); + } + + return database.getVeinName(dimensionId, coordinates); + } +} diff --git a/src/main/java/gregtech/loaders/load/CoverBehaviorLoader.java b/src/main/java/gregtech/loaders/load/CoverBehaviorLoader.java new file mode 100644 index 0000000000..77fc7f4b30 --- /dev/null +++ b/src/main/java/gregtech/loaders/load/CoverBehaviorLoader.java @@ -0,0 +1,11 @@ +package gregtech.loaders.load; + +import gregtech.api.util.GTLog; + +public class CoverBehaviorLoader implements Runnable { + + @Override + public void run() { + GTLog.out.println("GTMod: Adding Cover Behaviors"); + } +} diff --git a/src/main/java/gregtech/loaders/load/FuelLoader.java b/src/main/java/gregtech/loaders/load/FuelLoader.java new file mode 100644 index 0000000000..639b5359a3 --- /dev/null +++ b/src/main/java/gregtech/loaders/load/FuelLoader.java @@ -0,0 +1,146 @@ +package gregtech.loaders.load; + +import static gregtech.api.enums.Mods.BloodMagic; +import static gregtech.api.enums.Mods.EnderIO; +import static gregtech.api.enums.Mods.Thaumcraft; +import static gregtech.api.recipe.RecipeMaps.extremeNaquadahReactorFuels; +import static gregtech.api.recipe.RecipeMaps.hugeNaquadahReactorFuels; +import static gregtech.api.recipe.RecipeMaps.largeNaquadahReactorFuels; +import static gregtech.api.recipe.RecipeMaps.magicFuels; +import static gregtech.api.recipe.RecipeMaps.smallNaquadahReactorFuels; +import static gregtech.api.recipe.RecipeMaps.ultraHugeNaquadahReactorFuels; +import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.FluidState; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.fluid.GTFluidFactory; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipeConstants; + +public class FuelLoader implements Runnable { + + @Override + public void run() { + GTLog.out.println("GTMod: Initializing various Fuels."); + ItemList.sBlueVitriol = GTFluidFactory + .of("solution.bluevitriol", "Blue Vitriol water solution", null, FluidState.LIQUID, 295); + ItemList.sNickelSulfate = GTFluidFactory + .of("solution.nickelsulfate", "Nickel sulfate water solution", null, FluidState.LIQUID, 295); + ItemList.sGreenVitriol = GTFluidFactory + .of("solution.greenvitriol", "Green Vitriol water solution", null, FluidState.LIQUID, 295); + ItemList.sIndiumConcentrate = GTFluidFactory + .of("indiumconcentrate", "Indium Concentrate", null, FluidState.LIQUID, 295); // TODO CHECK NEW x3 + ItemList.sLeadZincSolution = GTFluidFactory + .of("leadzincsolution", "Lead-Zinc solution", null, FluidState.LIQUID, 295); + ItemList.sRocketFuel = GTFluidFactory.of("rocket_fuel", "Rocket Fuel", null, FluidState.LIQUID, 295); + + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.bolt, Materials.NaquadahEnriched, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Naquadah, 1L)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 50_000) + .addTo(smallNaquadahReactorFuels); + + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.stick, Materials.NaquadahEnriched, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stick, Materials.Naquadah, 1L)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 250_000) + .addTo(largeNaquadahReactorFuels); + + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.NaquadahEnriched, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Naquadah, 1L)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 500_000) + .addTo(hugeNaquadahReactorFuels); + + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Naquadria, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Naquadah, 1L)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 250_000) + .addTo(extremeNaquadahReactorFuels); + + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.stick, Materials.Naquadria, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stick, Materials.Naquadah, 1L)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 1_000_000) + .addTo(ultraHugeNaquadahReactorFuels); + + // BloodMagic + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(BloodMagic.ID, "reinforcedSlate", 1L)) + .itemOutputs(GTModHandler.getModItem(BloodMagic.ID, "blankSlate", 1L)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 400) + .addTo(magicFuels); + + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(BloodMagic.ID, "imbuedSlate", 1L)) + .itemOutputs(GTModHandler.getModItem(BloodMagic.ID, "reinforcedSlate", 1L)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 1000) + .addTo(magicFuels); + + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(BloodMagic.ID, "demonicSlate", 1L)) + .itemOutputs(GTModHandler.getModItem(BloodMagic.ID, "imbuedSlate", 1L)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 8000) + .addTo(magicFuels); + + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(BloodMagic.ID, "bloodMagicBaseItems", 1L, 27)) + .itemOutputs(GTModHandler.getModItem(BloodMagic.ID, "demonicSlate", 1L)) + .duration(0) + .eut(0) + .metadata(FUEL_VALUE, 20000) + .addTo(magicFuels); + + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 4)) + .metadata(FUEL_VALUE, 4) + .metadata(FUEL_TYPE, 5) + .addTo(GTRecipeConstants.Fuel); + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Items.experience_bottle, 1)) + .metadata(FUEL_VALUE, 10) + .metadata(FUEL_TYPE, 5) + .addTo(GTRecipeConstants.Fuel); + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Items.ghast_tear, 1)) + .metadata(FUEL_VALUE, 50) + .metadata(FUEL_TYPE, 5) + .addTo(GTRecipeConstants.Fuel); + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.beacon, 1)) + .metadata(FUEL_VALUE, Materials.NetherStar.mFuelPower * 2) + .metadata(FUEL_TYPE, Materials.NetherStar.mFuelType) + .addTo(GTRecipeConstants.Fuel); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(EnderIO.ID, "bucketRocket_fuel", 1)) + .metadata(FUEL_VALUE, 250) + .metadata(FUEL_TYPE, 1) + .addTo(GTRecipeConstants.Fuel); + } +} diff --git a/src/main/java/gregtech/loaders/load/GTItemIterator.java b/src/main/java/gregtech/loaders/load/GTItemIterator.java new file mode 100644 index 0000000000..63ac59b7c2 --- /dev/null +++ b/src/main/java/gregtech/loaders/load/GTItemIterator.java @@ -0,0 +1,306 @@ +package gregtech.loaders.load; + +import static gregtech.api.recipe.RecipeMaps.cannerRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.WILDCARD; +import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemFood; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.IFluidContainerItem; + +import buildcraft.api.tools.IToolWrench; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OreDictNames; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.items.GTGenericItem; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTRecipeConstants; +import gregtech.api.util.GTUtility; +import gregtech.common.tools.ToolScoop; +import mods.railcraft.api.core.items.IToolCrowbar; + +public class GTItemIterator implements Runnable { + + @Override + public void run() { + GTLog.out.println("GTMod: Scanning for certain kinds of compatible Machineblocks."); + ItemStack tStack2 = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L); + ItemStack tStack = GTModHandler + .getRecipeOutput(tStack2, tStack2, tStack2, tStack2, null, tStack2, tStack2, tStack2, tStack2); + + if (null != tStack) { + GTValues.RA.stdBuilder() + .itemInputs(tStack) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 8L)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GTModHandler.addSmeltingRecipe(tStack, GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 8L)); + } + tStack2 = GTOreDictUnificator.get(OrePrefixes.plate, Materials.Bronze, 1L); + tStack = GTModHandler + .getRecipeOutput(tStack2, tStack2, tStack2, tStack2, null, tStack2, tStack2, tStack2, tStack2); + + if (null != tStack) { + GTOreDictUnificator.registerOre(OreDictNames.craftingRawMachineTier00, tStack); + + GTValues.RA.stdBuilder() + .itemInputs(tStack) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 8L)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + GTModHandler.addSmeltingRecipe(tStack, GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 8L)); + } + + ItemStack tStack3 = new ItemStack(Blocks.glass, 1, 0); + tStack2 = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L); + tStack = GTModHandler.getRecipeOutput( + tStack2, + tStack3, + tStack2, + tStack3, + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 1L), + tStack3, + tStack2, + tStack3, + tStack2); + + if (null != (tStack)) { + GTValues.RA.stdBuilder() + .itemInputs(tStack) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L)) + .outputChances(10000, 1000) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + } + + tStack2 = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L); + tStack3 = new ItemStack(Blocks.glass, 1, 0); + tStack = GTModHandler.getRecipeOutput( + tStack2, + tStack3, + tStack2, + tStack3, + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 1L), + tStack3, + tStack2, + tStack3, + tStack2); + if (null != tStack) { + GTValues.RA.stdBuilder() + .itemInputs(tStack) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L)) + .outputChances(10000, 1000) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + } + GTLog.out.println("GTMod: Registering various Tools to be usable on GregTech Machines"); + GregTechAPI.registerScrewdriver( + GTModHandler + .getRecipeOutput(null, new ItemStack(Items.iron_ingot, 1), null, new ItemStack(Items.stick, 1))); + GregTechAPI.registerScrewdriver( + GTModHandler + .getRecipeOutput(new ItemStack(Items.iron_ingot, 1), null, null, null, new ItemStack(Items.stick, 1))); + + GTLog.out.println( + "GTMod: Adding Food Recipes to the Automatic Canning Machine. (also during the following Item Iteration)"); + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Items.rotten_flesh, 2, WILDCARD), ItemList.IC2_Food_Can_Empty.get(1L)) + .itemOutputs(ItemList.IC2_Food_Can_Spoiled.get(1L)) + .duration(10 * SECONDS) + .eut(1) + .addTo(cannerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Items.spider_eye, 2, WILDCARD), ItemList.IC2_Food_Can_Empty.get(1L)) + .itemOutputs(ItemList.IC2_Food_Can_Spoiled.get(1L)) + .duration(5 * SECONDS) + .eut(1) + .addTo(cannerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Food_Poisonous_Potato.get(2L), ItemList.IC2_Food_Can_Empty.get(1L)) + .itemOutputs(ItemList.IC2_Food_Can_Spoiled.get(1L)) + .duration(5 * SECONDS) + .eut(1) + .addTo(cannerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Items.cake, 1, WILDCARD), ItemList.IC2_Food_Can_Empty.get(12L)) + .itemOutputs(ItemList.IC2_Food_Can_Filled.get(12L)) + .duration(30 * SECONDS) + .eut(1) + .addTo(cannerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Items.mushroom_stew, 1, WILDCARD), ItemList.IC2_Food_Can_Empty.get(6L)) + .itemOutputs(ItemList.IC2_Food_Can_Filled.get(6L), new ItemStack(Items.bowl, 1)) + .duration(15 * SECONDS) + .eut(1) + .addTo(cannerRecipes); + + GTLog.out.println("GTMod: Scanning ItemList."); + + try { + /* (tName.equals("tile.sedimentaryStone")) || **/ + for (Object o : Item.itemRegistry) { + Object tObject; + + if (!(((tObject = o) instanceof Item) && (!(tObject instanceof GTGenericItem)))) { + continue; + } + + Item tItem = (Item) tObject; + String tName; + if ((tName = tItem.getUnlocalizedName()) == null) { + continue; + } + + if ((tItem instanceof IToolCrowbar)) { + if ((tItem.isDamageable()) || (GTModHandler.isElectricItem(new ItemStack(tItem, 1, 0)))) { + if (GregTechAPI.registerCrowbar(new ItemStack(tItem, 1, WILDCARD))) { + GTLog.out.println("GTMod: Registered valid RC Crowbar: " + tName); + } + } + } + if ((tItem instanceof IToolWrench)) { + if ((tItem.isDamageable()) || (GTModHandler.isElectricItem(new ItemStack(tItem, 1, 0)))) { + if (GregTechAPI.registerWrench(new ItemStack(tItem, 1, WILDCARD))) { + GTLog.out.println("GTMod: Registered valid BC Wrench: " + tName); + } + } + } + Block tBlock = GTUtility.getBlockFromStack(new ItemStack(tItem, 1, 0)); + if (tBlock != null) { + if (tName.endsWith("beehives")) { + tBlock.setHarvestLevel("scoop", 0); + ToolScoop.sBeeHiveMaterial = tBlock.getMaterial(); + } + if (OrePrefixes.stone.mDefaultStackSize < tItem.getItemStackLimit(new ItemStack(tItem, 1, 0))) { + if ((tBlock.isReplaceableOreGen(GTValues.DW, 0, 0, 0, Blocks.stone)) + || (tBlock.isReplaceableOreGen(GTValues.DW, 0, 0, 0, Blocks.netherrack)) + || (tBlock.isReplaceableOreGen(GTValues.DW, 0, 0, 0, Blocks.end_stone))) { + tItem.setMaxStackSize(OrePrefixes.stone.mDefaultStackSize); + } + } + } + if (((tItem instanceof ItemFood)) && (tItem != ItemList.IC2_Food_Can_Filled.getItem()) + && (tItem != ItemList.IC2_Food_Can_Spoiled.getItem())) { + int tFoodValue = ((ItemFood) tItem).func_150905_g(new ItemStack(tItem, 1, 0)); + if (tFoodValue > 0) { + GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder(); + recipeBuilder + .itemInputs(new ItemStack(tItem, 1, WILDCARD), ItemList.IC2_Food_Can_Empty.get(tFoodValue)); + if (GTUtility.getContainerItem(new ItemStack(tItem, 1, 0), true) == null) { + recipeBuilder.itemOutputs(ItemList.IC2_Food_Can_Filled.get(tFoodValue)); + } else { + recipeBuilder.itemOutputs( + ItemList.IC2_Food_Can_Filled.get(tFoodValue), + GTUtility.getContainerItem(new ItemStack(tItem, 1, 0), true)); + } + recipeBuilder.duration(tFoodValue * 5 * SECONDS) + .eut(1) + .addTo(cannerRecipes); + } + } + if ((tItem instanceof IFluidContainerItem)) { + GTOreDictUnificator.addToBlacklist(new ItemStack(tItem, 1, WILDCARD)); + } + + switch (tName) { + // twilight forest + case "item.fieryBlood", "item.fieryTears" -> GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(tItem, 1, 0)) + .metadata(FUEL_VALUE, 2048) + .metadata(FUEL_TYPE, 5) + .addTo(GTRecipeConstants.Fuel); + + // twilight forest + case "tile.TFRoots" -> { + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(tItem, 1, 0)) + .itemOutputs(new ItemStack(Items.stick, 2), new ItemStack(Items.stick, 1)) + .outputChances(10000, 3000) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(tItem, 1, 1)) + .itemOutputs(new ItemStack(Items.stick, 4)) + .metadata(FUEL_VALUE, 32) + .metadata(FUEL_TYPE, 5) + .addTo(GTRecipeConstants.Fuel); + } + + // tinker construct + case "item.tconstruct.manual" -> GTOreDictUnificator + .registerOre("bookTinkersManual", new ItemStack(tItem, 1, WILDCARD)); + + // buildcraft + case "item.blueprintItem" -> GTOreDictUnificator + .registerOre("paperBlueprint", new ItemStack(tItem, 1, WILDCARD)); + + // Thaumcraft + case "item.ItemThaumonomicon" -> GTOreDictUnificator + .registerOre("bookThaumonomicon", new ItemStack(tItem, 1, WILDCARD)); + + // BoP + case "tile.bop.redRocks" -> { + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.Redrock, new ItemStack(tItem, 1, 0)); + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.Redrock, new ItemStack(tItem, 1, 1)); + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.Redrock, new ItemStack(tItem, 1, 2)); + } + + // Thaumcraft + case "tile.blockCosmeticSolid" -> { + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.Obsidian, new ItemStack(tItem, 1, 0)); + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.Obsidian, new ItemStack(tItem, 1, 1)); + GTOreDictUnificator + .registerOre(OrePrefixes.block, Materials.Thaumium, new ItemStack(tItem, 1, 4)); + } + + // minecraft + case "tile.enderchest" -> GTOreDictUnificator + .registerOre(OreDictNames.enderChest, new ItemStack(tItem, 1, WILDCARD)); + + // buildcraft + case "tile.autoWorkbenchBlock" -> GTOreDictUnificator + .registerOre(OreDictNames.craftingWorkBench, new ItemStack(tItem, 1, 0)); + + // buildcraft + case "tile.pumpBlock" -> GTOreDictUnificator + .registerOre(OreDictNames.craftingPump, new ItemStack(tItem, 1, 0)); + + // buildcraft + case "tile.tankBlock" -> GTOreDictUnificator + .registerOre(OreDictNames.craftingTank, new ItemStack(tItem, 1, 0)); + + } + } + } catch (Throwable e) { + /**/ + } + } +} diff --git a/src/main/java/gregtech/loaders/load/GT_CoverBehaviorLoader.java b/src/main/java/gregtech/loaders/load/GT_CoverBehaviorLoader.java deleted file mode 100644 index 37f626ef90..0000000000 --- a/src/main/java/gregtech/loaders/load/GT_CoverBehaviorLoader.java +++ /dev/null @@ -1,11 +0,0 @@ -package gregtech.loaders.load; - -import gregtech.api.util.GT_Log; - -public class GT_CoverBehaviorLoader implements Runnable { - - @Override - public void run() { - GT_Log.out.println("GT_Mod: Adding Cover Behaviors"); - } -} diff --git a/src/main/java/gregtech/loaders/load/GT_FuelLoader.java b/src/main/java/gregtech/loaders/load/GT_FuelLoader.java deleted file mode 100644 index bed97ca010..0000000000 --- a/src/main/java/gregtech/loaders/load/GT_FuelLoader.java +++ /dev/null @@ -1,146 +0,0 @@ -package gregtech.loaders.load; - -import static gregtech.api.enums.Mods.BloodMagic; -import static gregtech.api.enums.Mods.EnderIO; -import static gregtech.api.enums.Mods.Thaumcraft; -import static gregtech.api.recipe.RecipeMaps.extremeNaquadahReactorFuels; -import static gregtech.api.recipe.RecipeMaps.hugeNaquadahReactorFuels; -import static gregtech.api.recipe.RecipeMaps.largeNaquadahReactorFuels; -import static gregtech.api.recipe.RecipeMaps.magicFuels; -import static gregtech.api.recipe.RecipeMaps.smallNaquadahReactorFuels; -import static gregtech.api.recipe.RecipeMaps.ultraHugeNaquadahReactorFuels; -import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.FluidState; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.fluid.GT_FluidFactory; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_RecipeConstants; - -public class GT_FuelLoader implements Runnable { - - @Override - public void run() { - GT_Log.out.println("GT_Mod: Initializing various Fuels."); - ItemList.sBlueVitriol = GT_FluidFactory - .of("solution.bluevitriol", "Blue Vitriol water solution", null, FluidState.LIQUID, 295); - ItemList.sNickelSulfate = GT_FluidFactory - .of("solution.nickelsulfate", "Nickel sulfate water solution", null, FluidState.LIQUID, 295); - ItemList.sGreenVitriol = GT_FluidFactory - .of("solution.greenvitriol", "Green Vitriol water solution", null, FluidState.LIQUID, 295); - ItemList.sIndiumConcentrate = GT_FluidFactory - .of("indiumconcentrate", "Indium Concentrate", null, FluidState.LIQUID, 295); // TODO CHECK NEW x3 - ItemList.sLeadZincSolution = GT_FluidFactory - .of("leadzincsolution", "Lead-Zinc solution", null, FluidState.LIQUID, 295); - ItemList.sRocketFuel = GT_FluidFactory.of("rocket_fuel", "Rocket Fuel", null, FluidState.LIQUID, 295); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.NaquadahEnriched, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Naquadah, 1L)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 50_000) - .addTo(smallNaquadahReactorFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.NaquadahEnriched, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Naquadah, 1L)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 250_000) - .addTo(largeNaquadahReactorFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.NaquadahEnriched, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Naquadah, 1L)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 500_000) - .addTo(hugeNaquadahReactorFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Naquadria, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Naquadah, 1L)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 250_000) - .addTo(extremeNaquadahReactorFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Naquadria, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Naquadah, 1L)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 1_000_000) - .addTo(ultraHugeNaquadahReactorFuels); - - // BloodMagic - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(BloodMagic.ID, "reinforcedSlate", 1L)) - .itemOutputs(GT_ModHandler.getModItem(BloodMagic.ID, "blankSlate", 1L)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 400) - .addTo(magicFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(BloodMagic.ID, "imbuedSlate", 1L)) - .itemOutputs(GT_ModHandler.getModItem(BloodMagic.ID, "reinforcedSlate", 1L)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 1000) - .addTo(magicFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(BloodMagic.ID, "demonicSlate", 1L)) - .itemOutputs(GT_ModHandler.getModItem(BloodMagic.ID, "imbuedSlate", 1L)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 8000) - .addTo(magicFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(BloodMagic.ID, "bloodMagicBaseItems", 1L, 27)) - .itemOutputs(GT_ModHandler.getModItem(BloodMagic.ID, "demonicSlate", 1L)) - .duration(0) - .eut(0) - .metadata(FUEL_VALUE, 20000) - .addTo(magicFuels); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 4)) - .metadata(FUEL_VALUE, 4) - .metadata(FUEL_TYPE, 5) - .addTo(GT_RecipeConstants.Fuel); - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Items.experience_bottle, 1)) - .metadata(FUEL_VALUE, 10) - .metadata(FUEL_TYPE, 5) - .addTo(GT_RecipeConstants.Fuel); - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Items.ghast_tear, 1)) - .metadata(FUEL_VALUE, 50) - .metadata(FUEL_TYPE, 5) - .addTo(GT_RecipeConstants.Fuel); - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.beacon, 1)) - .metadata(FUEL_VALUE, Materials.NetherStar.mFuelPower * 2) - .metadata(FUEL_TYPE, Materials.NetherStar.mFuelType) - .addTo(GT_RecipeConstants.Fuel); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(EnderIO.ID, "bucketRocket_fuel", 1)) - .metadata(FUEL_VALUE, 250) - .metadata(FUEL_TYPE, 1) - .addTo(GT_RecipeConstants.Fuel); - } -} diff --git a/src/main/java/gregtech/loaders/load/GT_ItemIterator.java b/src/main/java/gregtech/loaders/load/GT_ItemIterator.java deleted file mode 100644 index a44b411ba0..0000000000 --- a/src/main/java/gregtech/loaders/load/GT_ItemIterator.java +++ /dev/null @@ -1,305 +0,0 @@ -package gregtech.loaders.load; - -import static gregtech.api.recipe.RecipeMaps.cannerRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.WILDCARD; -import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemFood; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.IFluidContainerItem; - -import buildcraft.api.tools.IToolWrench; -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.OreDictNames; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.items.GT_Generic_Item; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_RecipeConstants; -import gregtech.api.util.GT_Utility; -import mods.railcraft.api.core.items.IToolCrowbar; - -public class GT_ItemIterator implements Runnable { - - @Override - public void run() { - GT_Log.out.println("GT_Mod: Scanning for certain kinds of compatible Machineblocks."); - ItemStack tStack2 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L); - ItemStack tStack = GT_ModHandler - .getRecipeOutput(tStack2, tStack2, tStack2, tStack2, null, tStack2, tStack2, tStack2, tStack2); - - if (null != tStack) { - GT_Values.RA.stdBuilder() - .itemInputs(tStack) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 8L)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - GT_ModHandler.addSmeltingRecipe(tStack, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 8L)); - } - tStack2 = GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Bronze, 1L); - tStack = GT_ModHandler - .getRecipeOutput(tStack2, tStack2, tStack2, tStack2, null, tStack2, tStack2, tStack2, tStack2); - - if (null != tStack) { - GT_OreDictUnificator.registerOre(OreDictNames.craftingRawMachineTier00, tStack); - - GT_Values.RA.stdBuilder() - .itemInputs(tStack) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 8L)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - GT_ModHandler.addSmeltingRecipe(tStack, GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 8L)); - } - - ItemStack tStack3 = new ItemStack(Blocks.glass, 1, 0); - tStack2 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L); - tStack = GT_ModHandler.getRecipeOutput( - tStack2, - tStack3, - tStack2, - tStack3, - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 1L), - tStack3, - tStack2, - tStack3, - tStack2); - - if (null != (tStack)) { - GT_Values.RA.stdBuilder() - .itemInputs(tStack) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L)) - .outputChances(10000, 1000) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - } - - tStack2 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L); - tStack3 = new ItemStack(Blocks.glass, 1, 0); - tStack = GT_ModHandler.getRecipeOutput( - tStack2, - tStack3, - tStack2, - tStack3, - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 1L), - tStack3, - tStack2, - tStack3, - tStack2); - if (null != tStack) { - GT_Values.RA.stdBuilder() - .itemInputs(tStack) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L)) - .outputChances(10000, 1000) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - } - GT_Log.out.println("GT_Mod: Registering various Tools to be usable on GregTech Machines"); - GregTech_API.registerScrewdriver( - GT_ModHandler - .getRecipeOutput(null, new ItemStack(Items.iron_ingot, 1), null, new ItemStack(Items.stick, 1))); - GregTech_API.registerScrewdriver( - GT_ModHandler - .getRecipeOutput(new ItemStack(Items.iron_ingot, 1), null, null, null, new ItemStack(Items.stick, 1))); - - GT_Log.out.println( - "GT_Mod: Adding Food Recipes to the Automatic Canning Machine. (also during the following Item Iteration)"); - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Items.rotten_flesh, 2, WILDCARD), ItemList.IC2_Food_Can_Empty.get(1L)) - .itemOutputs(ItemList.IC2_Food_Can_Spoiled.get(1L)) - .duration(10 * SECONDS) - .eut(1) - .addTo(cannerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Items.spider_eye, 2, WILDCARD), ItemList.IC2_Food_Can_Empty.get(1L)) - .itemOutputs(ItemList.IC2_Food_Can_Spoiled.get(1L)) - .duration(5 * SECONDS) - .eut(1) - .addTo(cannerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Food_Poisonous_Potato.get(2L), ItemList.IC2_Food_Can_Empty.get(1L)) - .itemOutputs(ItemList.IC2_Food_Can_Spoiled.get(1L)) - .duration(5 * SECONDS) - .eut(1) - .addTo(cannerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Items.cake, 1, WILDCARD), ItemList.IC2_Food_Can_Empty.get(12L)) - .itemOutputs(ItemList.IC2_Food_Can_Filled.get(12L)) - .duration(30 * SECONDS) - .eut(1) - .addTo(cannerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Items.mushroom_stew, 1, WILDCARD), ItemList.IC2_Food_Can_Empty.get(6L)) - .itemOutputs(ItemList.IC2_Food_Can_Filled.get(6L), new ItemStack(Items.bowl, 1)) - .duration(15 * SECONDS) - .eut(1) - .addTo(cannerRecipes); - - GT_Log.out.println("GT_Mod: Scanning ItemList."); - - try { - /* (tName.equals("tile.sedimentaryStone")) || **/ - for (Object o : Item.itemRegistry) { - Object tObject; - - if (!(((tObject = o) instanceof Item) && (!(tObject instanceof GT_Generic_Item)))) { - continue; - } - - Item tItem = (Item) tObject; - String tName; - if ((tName = tItem.getUnlocalizedName()) == null) { - continue; - } - - if ((tItem instanceof IToolCrowbar)) { - if ((tItem.isDamageable()) || (GT_ModHandler.isElectricItem(new ItemStack(tItem, 1, 0)))) { - if (GregTech_API.registerCrowbar(new ItemStack(tItem, 1, WILDCARD))) { - GT_Log.out.println("GT_Mod: Registered valid RC Crowbar: " + tName); - } - } - } - if ((tItem instanceof IToolWrench)) { - if ((tItem.isDamageable()) || (GT_ModHandler.isElectricItem(new ItemStack(tItem, 1, 0)))) { - if (GregTech_API.registerWrench(new ItemStack(tItem, 1, WILDCARD))) { - GT_Log.out.println("GT_Mod: Registered valid BC Wrench: " + tName); - } - } - } - Block tBlock = GT_Utility.getBlockFromStack(new ItemStack(tItem, 1, 0)); - if (tBlock != null) { - if (tName.endsWith("beehives")) { - tBlock.setHarvestLevel("scoop", 0); - gregtech.common.tools.GT_Tool_Scoop.sBeeHiveMaterial = tBlock.getMaterial(); - } - if (OrePrefixes.stone.mDefaultStackSize < tItem.getItemStackLimit(new ItemStack(tItem, 1, 0))) { - if ((tBlock.isReplaceableOreGen(GT_Values.DW, 0, 0, 0, Blocks.stone)) - || (tBlock.isReplaceableOreGen(GT_Values.DW, 0, 0, 0, Blocks.netherrack)) - || (tBlock.isReplaceableOreGen(GT_Values.DW, 0, 0, 0, Blocks.end_stone))) { - tItem.setMaxStackSize(OrePrefixes.stone.mDefaultStackSize); - } - } - } - if (((tItem instanceof ItemFood)) && (tItem != ItemList.IC2_Food_Can_Filled.getItem()) - && (tItem != ItemList.IC2_Food_Can_Spoiled.getItem())) { - int tFoodValue = ((ItemFood) tItem).func_150905_g(new ItemStack(tItem, 1, 0)); - if (tFoodValue > 0) { - GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder(); - recipeBuilder - .itemInputs(new ItemStack(tItem, 1, WILDCARD), ItemList.IC2_Food_Can_Empty.get(tFoodValue)); - if (GT_Utility.getContainerItem(new ItemStack(tItem, 1, 0), true) == null) { - recipeBuilder.itemOutputs(ItemList.IC2_Food_Can_Filled.get(tFoodValue)); - } else { - recipeBuilder.itemOutputs( - ItemList.IC2_Food_Can_Filled.get(tFoodValue), - GT_Utility.getContainerItem(new ItemStack(tItem, 1, 0), true)); - } - recipeBuilder.duration(tFoodValue * 5 * SECONDS) - .eut(1) - .addTo(cannerRecipes); - } - } - if ((tItem instanceof IFluidContainerItem)) { - GT_OreDictUnificator.addToBlacklist(new ItemStack(tItem, 1, WILDCARD)); - } - - switch (tName) { - // twilight forest - case "item.fieryBlood", "item.fieryTears" -> GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(tItem, 1, 0)) - .metadata(FUEL_VALUE, 2048) - .metadata(FUEL_TYPE, 5) - .addTo(GT_RecipeConstants.Fuel); - - // twilight forest - case "tile.TFRoots" -> { - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(tItem, 1, 0)) - .itemOutputs(new ItemStack(Items.stick, 2), new ItemStack(Items.stick, 1)) - .outputChances(10000, 3000) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(tItem, 1, 1)) - .itemOutputs(new ItemStack(Items.stick, 4)) - .metadata(FUEL_VALUE, 32) - .metadata(FUEL_TYPE, 5) - .addTo(GT_RecipeConstants.Fuel); - } - - // tinker construct - case "item.tconstruct.manual" -> GT_OreDictUnificator - .registerOre("bookTinkersManual", new ItemStack(tItem, 1, WILDCARD)); - - // buildcraft - case "item.blueprintItem" -> GT_OreDictUnificator - .registerOre("paperBlueprint", new ItemStack(tItem, 1, WILDCARD)); - - // Thaumcraft - case "item.ItemThaumonomicon" -> GT_OreDictUnificator - .registerOre("bookThaumonomicon", new ItemStack(tItem, 1, WILDCARD)); - - // BoP - case "tile.bop.redRocks" -> { - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.Redrock, new ItemStack(tItem, 1, 0)); - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.Redrock, new ItemStack(tItem, 1, 1)); - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.Redrock, new ItemStack(tItem, 1, 2)); - } - - // Thaumcraft - case "tile.blockCosmeticSolid" -> { - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.Obsidian, new ItemStack(tItem, 1, 0)); - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.Obsidian, new ItemStack(tItem, 1, 1)); - GT_OreDictUnificator - .registerOre(OrePrefixes.block, Materials.Thaumium, new ItemStack(tItem, 1, 4)); - } - - // minecraft - case "tile.enderchest" -> GT_OreDictUnificator - .registerOre(OreDictNames.enderChest, new ItemStack(tItem, 1, WILDCARD)); - - // buildcraft - case "tile.autoWorkbenchBlock" -> GT_OreDictUnificator - .registerOre(OreDictNames.craftingWorkBench, new ItemStack(tItem, 1, 0)); - - // buildcraft - case "tile.pumpBlock" -> GT_OreDictUnificator - .registerOre(OreDictNames.craftingPump, new ItemStack(tItem, 1, 0)); - - // buildcraft - case "tile.tankBlock" -> GT_OreDictUnificator - .registerOre(OreDictNames.craftingTank, new ItemStack(tItem, 1, 0)); - - } - } - } catch (Throwable e) { - /**/ - } - } -} diff --git a/src/main/java/gregtech/loaders/load/GT_Loader_MetaTileEntities_Recipes.java b/src/main/java/gregtech/loaders/load/GT_Loader_MetaTileEntities_Recipes.java deleted file mode 100644 index 1c90187ee2..0000000000 --- a/src/main/java/gregtech/loaders/load/GT_Loader_MetaTileEntities_Recipes.java +++ /dev/null @@ -1,4675 +0,0 @@ -package gregtech.loaders.load; - -import static gregtech.api.enums.Mods.BuildCraftFactory; -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.enums.Mods.GalacticraftCore; -import static gregtech.api.enums.Mods.Gendustry; -import static gregtech.api.enums.Mods.IndustrialCraft2; -import static gregtech.api.enums.Mods.NotEnoughItems; -import static gregtech.api.enums.Mods.Thaumcraft; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import codechicken.nei.api.API; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OreDictNames; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe; -import gregtech.api.util.ExternalMaterials; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.loaders.postload.GT_PCBFactoryMaterialLoader; -import gregtech.loaders.postload.GT_ProcessingArrayRecipeLoader; -import ic2.core.Ic2Items; - -public class GT_Loader_MetaTileEntities_Recipes implements Runnable { - - private static final String aTextPlate = "PPP"; - private static final String aTextPlateWrench = "PwP"; - private static final String aTextPlateMotor = "PMP"; - private static final String aTextCableHull = "CMC"; - private static final String aTextWireHull = "WMW"; - private static final String aTextWireChest = "WTW"; - private static final String aTextWireCoil = "WCW"; - private static final String aTextMotorWire = "EWE"; - private static final String aTextWirePump = "WPW"; - - private static final long bits = GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED; - private static final long bitsd = GT_ModHandler.RecipeBits.DISMANTLEABLE | bits; - - private static void registerMachineTypes() { - registerAlloySmelter(); - registerArcFurnace(); - registerAutoclave(); - registerAssembler(); - registerBendingMachine(); - registerCanner(); - registerCentrifuge(); - registerCompressor(); - registerChemicalBath(); - registerChemicalReactor(); - registerCircuitAssembler(); - registerCuttingMachine(); - registerDistillery(); - registerElectricFurnace(); - registerElectrolyser(); - registerElectromagneticSeparator(); - registerExtractor(); - registerExtruder(); - registerFermenter(); - registerFluidCanner(); - registerFluidExtractor(); - registerFluidHeater(); - registerFluidSolidifier(); - registerForgeHammer(); - registerFormingPress(); - registerLathe(); - registerLaserEngraver(); - registerMacerator(); - registerMatterAmplifier(); - registerMicrowave(); - registerMixer(); - registerOreWasher(); - registerOven(); - registerPlasmaArcFurnace(); - registerPolarizer(); - registerPrinter(); - registerRecycler(); - registerSifter(); - registerSlicer(); - registerThermalCentrifuge(); - registerUnpackager(); - registerWiremill(); - } - - private static void registerAlloySmelter() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_AlloySmelter.get(1), - bitsd, - new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_AlloySmelter.get(1), - bitsd, - new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_AlloySmelter.get(1), - bitsd, - new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_AlloySmelter.get(1), - bitsd, - new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_AlloySmelter.get(1), - bitsd, - new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 5); - - } - - private static void registerArcFurnace() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_ArcFurnace.get(1), - bitsd, - new Object[] { "WGW", aTextCableHull, aTextPlate, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, 'G', OrePrefixes.cell.get(Materials.Graphite) }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_ArcFurnace.get(1), - bitsd, - new Object[] { "WGW", aTextCableHull, aTextPlate, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, 'G', OrePrefixes.cell.get(Materials.Graphite) }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_ArcFurnace.get(1), - bitsd, - new Object[] { "WGW", aTextCableHull, aTextPlate, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, 'G', OrePrefixes.cell.get(Materials.Graphite) }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_ArcFurnace.get(1), - bitsd, - new Object[] { "WGW", aTextCableHull, aTextPlate, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, 'G', OrePrefixes.cell.get(Materials.Graphite) }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_ArcFurnace.get(1), - bitsd, - new Object[] { "WGW", aTextCableHull, aTextPlate, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, 'G', OrePrefixes.cell.get(Materials.Graphite) }, - 5); - - } - - private static void registerAssembler() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Assembler.get(1), - bitsd, - new Object[] { "ACA", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Assembler.get(1), - bitsd, - new Object[] { "ACA", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Assembler.get(1), - bitsd, - new Object[] { "ACA", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Assembler.get(1), - bitsd, - new Object[] { "ACA", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Assembler.get(1), - bitsd, - new Object[] { "ACA", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - } - - private static void registerAutoclave() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Autoclave.get(1), - bitsd, - new Object[] { "IGI", "IMI", "CPC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'I', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, - 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Autoclave.get(1), - bitsd, - new Object[] { "IGI", "IMI", "CPC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'I', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, - 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Autoclave.get(1), - bitsd, - new Object[] { "IGI", "IMI", "CPC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'I', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, - 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Autoclave.get(1), - bitsd, - new Object[] { "IGI", "IMI", "CPC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'I', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, - 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Autoclave.get(1), - bitsd, - new Object[] { "IGI", "IMI", "CPC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'I', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, - 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 5); - - } - - private static void registerBendingMachine() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Bender.get(1), - bitsd, - new Object[] { aTextPlateWrench, aTextCableHull, aTextMotorWire, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Bender.get(1), - bitsd, - new Object[] { aTextPlateWrench, aTextCableHull, aTextMotorWire, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Bender.get(1), - bitsd, - new Object[] { aTextPlateWrench, aTextCableHull, aTextMotorWire, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Bender.get(1), - bitsd, - new Object[] { aTextPlateWrench, aTextCableHull, aTextMotorWire, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Bender.get(1), - bitsd, - new Object[] { aTextPlateWrench, aTextCableHull, aTextMotorWire, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - } - - private static void registerCanner() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Canner.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, "GGG", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Canner.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, "GGG", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Canner.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, "GGG", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Canner.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, "GGG", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Canner.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, "GGG", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 5); - } - - private static void registerCentrifuge() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Centrifuge.get(1), - bitsd, - new Object[] { "CEC", aTextWireHull, "CEC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Centrifuge.get(1), - bitsd, - new Object[] { "CEC", aTextWireHull, "CEC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Centrifuge.get(1), - bitsd, - new Object[] { "CEC", aTextWireHull, "CEC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Centrifuge.get(1), - bitsd, - new Object[] { "CEC", aTextWireHull, "CEC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Centrifuge.get(1), - bitsd, - new Object[] { "CEC", aTextWireHull, "CEC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - } - - private static void registerChemicalBath() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_ChemicalBath.get(1), - bitsd, - new Object[] { "VGW", "PGV", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_ChemicalBath.get(1), - bitsd, - new Object[] { "VGW", "PGV", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_ChemicalBath.get(1), - bitsd, - new Object[] { "VGW", "PGV", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_ChemicalBath.get(1), - bitsd, - new Object[] { "VGW", "PGV", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_ChemicalBath.get(1), - bitsd, - new Object[] { "VGW", "PGV", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 5); - - } - - private static void registerChemicalReactor() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_ChemicalReactor.get(1), - bitsd, - new Object[] { "GRG", "WEW", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_ChemicalReactor.get(1), - bitsd, - new Object[] { "GRG", "WEW", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_ChemicalReactor.get(1), - bitsd, - new Object[] { "GRG", "WEW", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OrePrefixes.pipeMedium.get(Materials.Plastic) }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_ChemicalReactor.get(1), - bitsd, - new Object[] { "GRG", "WEW", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OrePrefixes.pipeLarge.get(Materials.Plastic) }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_ChemicalReactor.get(1), - bitsd, - new Object[] { "GRG", "WEW", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OrePrefixes.pipeHuge.get(Materials.Plastic) }, - 5); - } - - private static void registerCircuitAssembler() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_CircuitAssembler.get(1), - bitsd, - new Object[] { "ACE", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_CircuitAssembler.get(1), - bitsd, - new Object[] { "ACE", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_CircuitAssembler.get(1), - bitsd, - new Object[] { "ACE", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_CircuitAssembler.get(1), - bitsd, - new Object[] { "ACE", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_CircuitAssembler.get(1), - bitsd, - new Object[] { "ACE", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER }, - 5); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LuV_CircuitAssembler.get(1), - bitsd, - new Object[] { "ACE", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER }, - 6); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_ZPM_CircuitAssembler.get(1), - bitsd, - new Object[] { "ACE", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER }, - 7); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_UV_CircuitAssembler.get(1), - bitsd, - new Object[] { "ACE", "VMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'A', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER }, - 8); - - } - - private static void registerCompressor() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Compressor.get(1), - bitsd, - new Object[] { aTextWireCoil, aTextPlateMotor, aTextWireCoil, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Compressor.get(1), - bitsd, - new Object[] { aTextWireCoil, aTextPlateMotor, aTextWireCoil, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Compressor.get(1), - bitsd, - new Object[] { aTextWireCoil, aTextPlateMotor, aTextWireCoil, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Compressor.get(1), - bitsd, - new Object[] { aTextWireCoil, aTextPlateMotor, aTextWireCoil, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Compressor.get(1), - bitsd, - new Object[] { aTextWireCoil, aTextPlateMotor, aTextWireCoil, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - - } - - private static void registerCuttingMachine() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Cutter.get(1), - bitsd, - new Object[] { "WCG", "VMB", "CWE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, - 'B', OreDictNames.craftingDiamondBlade }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Cutter.get(1), - bitsd, - new Object[] { "WCG", "VMB", "CWE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, - 'B', OreDictNames.craftingDiamondBlade }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Cutter.get(1), - bitsd, - new Object[] { "WCG", "VMB", "CWE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, - 'B', OreDictNames.craftingDiamondBlade }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Cutter.get(1), - bitsd, - new Object[] { "WCG", "VMB", "CWE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, - 'B', OreDictNames.craftingDiamondBlade }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Cutter.get(1), - bitsd, - new Object[] { "WCG", "VMB", "CWE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, - 'B', OreDictNames.craftingDiamondBlade }, - 5); - - } - - private static void registerDistillery() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Distillery.get(1), - bitsd, - new Object[] { "GBG", aTextCableHull, aTextWirePump, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'B', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Distillery.get(1), - bitsd, - new Object[] { "GBG", aTextCableHull, aTextWirePump, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'B', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Distillery.get(1), - bitsd, - new Object[] { "GBG", aTextCableHull, aTextWirePump, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'B', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Distillery.get(1), - bitsd, - new Object[] { "GBG", aTextCableHull, aTextWirePump, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'B', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Distillery.get(1), - bitsd, - new Object[] { "GBG", aTextCableHull, aTextWirePump, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'B', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 5); - - } - - private static void registerElectricFurnace() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_E_Furnace.get(1), - bitsd, - new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_E_Furnace.get(1), - bitsd, - new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_E_Furnace.get(1), - bitsd, - new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_E_Furnace.get(1), - bitsd, - new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_E_Furnace.get(1), - bitsd, - new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }, - 5); - - } - - private static void registerElectrolyser() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Electrolyzer.get(1), - bitsd, - new Object[] { "IGI", "IMI", "CWC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'I', OrePrefixes.wireGt01.get(Materials.Gold), 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Electrolyzer.get(1), - bitsd, - new Object[] { "IGI", "IMI", "CWC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'I', OrePrefixes.wireGt01.get(Materials.Silver), 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Electrolyzer.get(1), - bitsd, - new Object[] { "IGI", "IMI", "CWC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'I', OrePrefixes.wireGt01.get(Materials.Electrum), 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Electrolyzer.get(1), - bitsd, - new Object[] { "IGI", "IMI", "CWC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'I', OrePrefixes.wireGt01.get(Materials.Platinum), 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Electrolyzer.get(1), - bitsd, - new Object[] { "IGI", "IMI", "CWC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'I', OrePrefixes.wireGt01.get(Materials.HSSG), 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 5); - - } - - private static void registerElectromagneticSeparator() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_ElectromagneticSeparator.get(1), - bitsd, - new Object[] { "VWZ", "WMS", "CWZ", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'S', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'Z', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_ElectromagneticSeparator.get(1), - bitsd, - new Object[] { "VWZ", "WMS", "CWZ", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'S', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'Z', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_ElectromagneticSeparator.get(1), - bitsd, - new Object[] { "VWZ", "WMS", "CWZ", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'S', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'Z', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_ElectromagneticSeparator.get(1), - bitsd, - new Object[] { "VWZ", "WMS", "CWZ", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'S', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'Z', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_ElectromagneticSeparator.get(1), - bitsd, - new Object[] { "VWZ", "WMS", "CWZ", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'S', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'Z', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - - } - - private static void registerExtractor() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Extractor.get(1), - bitsd, - new Object[] { "GCG", "EMP", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Extractor.get(1), - bitsd, - new Object[] { "GCG", "EMP", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Extractor.get(1), - bitsd, - new Object[] { "GCG", "EMP", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Extractor.get(1), - bitsd, - new Object[] { "GCG", "EMP", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Extractor.get(1), - bitsd, - new Object[] { "GCG", "EMP", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 5); - - } - - private static void registerExtruder() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Extruder.get(1), - bitsd, - new Object[] { "CCE", "XMP", "CCE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'X', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Extruder.get(1), - bitsd, - new Object[] { "CCE", "XMP", "CCE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'X', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Extruder.get(1), - bitsd, - new Object[] { "CCE", "XMP", "CCE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'X', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Extruder.get(1), - bitsd, - new Object[] { "CCE", "XMP", "CCE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'X', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Extruder.get(1), - bitsd, - new Object[] { "CCE", "XMP", "CCE", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'X', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PIPE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 5); - - } - - private static void registerFermenter() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Fermenter.get(1), - bitsd, - new Object[] { aTextWirePump, "GMG", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Fermenter.get(1), - bitsd, - new Object[] { aTextWirePump, "GMG", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Fermenter.get(1), - bitsd, - new Object[] { aTextWirePump, "GMG", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Fermenter.get(1), - bitsd, - new Object[] { aTextWirePump, "GMG", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Fermenter.get(1), - bitsd, - new Object[] { aTextWirePump, "GMG", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 5); - - } - - private static void registerFluidCanner() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_FluidCanner.get(1), - bitsd, - new Object[] { "GCG", "GMG", "WPW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_FluidCanner.get(1), - bitsd, - new Object[] { "GCG", "GMG", "WPW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_FluidCanner.get(1), - bitsd, - new Object[] { "GCG", "GMG", "WPW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_FluidCanner.get(1), - bitsd, - new Object[] { "GCG", "GMG", "WPW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_FluidCanner.get(1), - bitsd, - new Object[] { "GCG", "GMG", "WPW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 5); - - } - - private static void registerFluidExtractor() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_FluidExtractor.get(1), - bitsd, - new Object[] { "GEG", "TPT", "CMC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'T', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_FluidExtractor.get(1), - bitsd, - new Object[] { "GEG", "TPT", "CMC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'T', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_FluidExtractor.get(1), - bitsd, - new Object[] { "GEG", "TPT", "CMC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'T', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_FluidExtractor.get(1), - bitsd, - new Object[] { "GEG", "TPT", "CMC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'T', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_FluidExtractor.get(1), - bitsd, - new Object[] { "GEG", "TPT", "CMC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'T', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 5); - - } - - private static void registerFluidHeater() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_FluidHeater.get(1), - bitsd, - new Object[] { "OGO", aTextPlateMotor, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_FluidHeater.get(1), - bitsd, - new Object[] { "OGO", aTextPlateMotor, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_FluidHeater.get(1), - bitsd, - new Object[] { "OGO", aTextPlateMotor, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_FluidHeater.get(1), - bitsd, - new Object[] { "OGO", aTextPlateMotor, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_FluidHeater.get(1), - bitsd, - new Object[] { "OGO", aTextPlateMotor, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 5); - } - - private static void registerFluidSolidifier() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_FluidSolidifier.get(1), - bitsd, - new Object[] { "PGP", aTextWireHull, "CBC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, - 'B', OreDictNames.craftingChest }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_FluidSolidifier.get(1), - bitsd, - new Object[] { "PGP", aTextWireHull, "CBC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, - 'B', OreDictNames.craftingChest }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_FluidSolidifier.get(1), - bitsd, - new Object[] { "PGP", aTextWireHull, "CBC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, - 'B', OreDictNames.craftingChest }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_FluidSolidifier.get(1), - bitsd, - new Object[] { "PGP", aTextWireHull, "CBC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, - 'B', OreDictNames.craftingChest }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_FluidSolidifier.get(1), - bitsd, - new Object[] { "PGP", aTextWireHull, "CBC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, - 'B', OreDictNames.craftingChest }, - 5); - - } - - private static void registerForgeHammer() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Hammer.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, "WAW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, 'A', OreDictNames.craftingAnvil }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Hammer.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, "WAW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, 'A', OreDictNames.craftingAnvil }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Hammer.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, "WAW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, 'A', OreDictNames.craftingAnvil }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Hammer.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, "WAW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, 'A', OreDictNames.craftingAnvil }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Hammer.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, "WAW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE, 'A', OreDictNames.craftingAnvil }, - 5); - - } - - private static void registerFormingPress() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Press.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, aTextWirePump, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Press.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, aTextWirePump, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Press.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, aTextWirePump, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Press.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, aTextWirePump, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Press.get(1), - bitsd, - new Object[] { aTextWirePump, aTextCableHull, aTextWirePump, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - } - - private static void registerLaserEngraver() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_LaserEngraver.get(1), - bitsd, - new Object[] { "PEP", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_LaserEngraver.get(1), - bitsd, - new Object[] { "PEP", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_LaserEngraver.get(1), - bitsd, - new Object[] { "PEP", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_LaserEngraver.get(1), - bitsd, - new Object[] { "PEP", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_LaserEngraver.get(1), - bitsd, - new Object[] { "PEP", aTextCableHull, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - - } - - private static void registerLathe() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Lathe.get(1), - bitsd, - new Object[] { aTextWireCoil, "EMD", "CWP", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'D', OrePrefixes.gem.get(Materials.Diamond) }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Lathe.get(1), - bitsd, - new Object[] { aTextWireCoil, "EMD", "CWP", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'D', OrePrefixes.gemFlawless.get(Materials.Diamond) }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Lathe.get(1), - bitsd, - new Object[] { aTextWireCoil, "EMD", "CWP", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'D', OreDictNames.craftingIndustrialDiamond }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Lathe.get(1), - bitsd, - new Object[] { aTextWireCoil, "EMD", "CWP", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'D', OreDictNames.craftingIndustrialDiamond }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Lathe.get(1), - bitsd, - new Object[] { aTextWireCoil, "EMD", "CWP", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'D', OreDictNames.craftingIndustrialDiamond }, - 5); - - } - - private static void registerMacerator() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Macerator.get(1), - bitsd, - new Object[] { "PEG", "WWM", "CCW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OrePrefixes.gem.get(Materials.Diamond) }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Macerator.get(1), - bitsd, - new Object[] { "PEG", "WWM", "CCW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OrePrefixes.gemFlawless.get(Materials.Diamond) }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Macerator.get(1), - bitsd, - new Object[] { "PEG", "WWM", "CCW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OreDictNames.craftingGrinder }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Macerator.get(1), - bitsd, - new Object[] { "PEG", "WWM", "CCW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OreDictNames.craftingGrinder }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Macerator.get(1), - bitsd, - new Object[] { "PEG", "WWM", "CCW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OreDictNames.craftingGrinder }, - 5); - - } - - private static void registerMatterAmplifier() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Amplifab.get(1), - bitsd, - new Object[] { aTextWirePump, aTextPlateMotor, "CPC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4 }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Amplifab.get(1), - bitsd, - new Object[] { aTextWirePump, aTextPlateMotor, "CPC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4 }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Amplifab.get(1), - bitsd, - new Object[] { aTextWirePump, aTextPlateMotor, "CPC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4 }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Amplifab.get(1), - bitsd, - new Object[] { aTextWirePump, aTextPlateMotor, "CPC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4 }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Amplifab.get(1), - bitsd, - new Object[] { aTextWirePump, aTextPlateMotor, "CPC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4 }, - 5); - - } - - private static void registerMicrowave() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Microwave.get(1), - bitsd, - new Object[] { "LWC", "LMR", "LEC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'L', OrePrefixes.plate.get(Materials.Lead) }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Microwave.get(1), - bitsd, - new Object[] { "LWC", "LMR", "LEC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'L', OrePrefixes.plate.get(Materials.Lead) }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Microwave.get(1), - bitsd, - new Object[] { "LWC", "LMR", "LEC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'L', OrePrefixes.plate.get(Materials.Lead) }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Microwave.get(1), - bitsd, - new Object[] { "LWC", "LMR", "LEC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'L', OrePrefixes.plate.get(Materials.Lead) }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Microwave.get(1), - bitsd, - new Object[] { "LWC", "LMR", "LEC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.EMITTER, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'L', OrePrefixes.plate.get(Materials.Lead) }, - 5); - - } - - private static void registerMixer() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Mixer.get(1), - bitsd, - new Object[] { "GRG", "GEG", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'R', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Mixer.get(1), - bitsd, - new Object[] { "GRG", "GEG", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'R', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Mixer.get(1), - bitsd, - new Object[] { "GRG", "GEG", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'R', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Mixer.get(1), - bitsd, - new Object[] { "GRG", "GEG", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'R', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Mixer.get(1), - bitsd, - new Object[] { "GRG", "GEG", aTextCableHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'R', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS }, - 5); - } - - private static void registerOreWasher() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_OreWasher.get(1), - bitsd, - new Object[] { "RGR", "CEC", aTextWireHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_OreWasher.get(1), - bitsd, - new Object[] { "RGR", "CEC", aTextWireHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_OreWasher.get(1), - bitsd, - new Object[] { "RGR", "CEC", aTextWireHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_OreWasher.get(1), - bitsd, - new Object[] { "RGR", "CEC", aTextWireHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_OreWasher.get(1), - bitsd, - new Object[] { "RGR", "CEC", aTextWireHull, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROTOR, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP }, - 5); - - } - - private static void registerOven() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Oven.get(1), - bitsd, - new Object[] { "CEC", aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Oven.get(1), - bitsd, - new Object[] { "CEC", aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Oven.get(1), - bitsd, - new Object[] { "CEC", aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Oven.get(1), - bitsd, - new Object[] { "CEC", aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Oven.get(1), - bitsd, - new Object[] { "CEC", aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING }, - 5); - - } - - private static void registerPlasmaArcFurnace() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_PlasmaArcFurnace.get(1), - bitsd, - new Object[] { "WGW", aTextCableHull, "TPT", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, 'T', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'G', OrePrefixes.cell.get(Materials.Graphite) }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_PlasmaArcFurnace.get(1), - bitsd, - new Object[] { "WGW", aTextCableHull, "TPT", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, 'T', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'G', OrePrefixes.cell.get(Materials.Graphite) }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_PlasmaArcFurnace.get(1), - bitsd, - new Object[] { "WGW", aTextCableHull, "TPT", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, 'T', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'G', OrePrefixes.cell.get(Materials.Graphite) }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_PlasmaArcFurnace.get(1), - bitsd, - new Object[] { "WGW", aTextCableHull, "TPT", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, 'T', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'G', OrePrefixes.cell.get(Materials.Graphite) }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_PlasmaArcFurnace.get(1), - bitsd, - new Object[] { "WGW", aTextCableHull, "TPT", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PLATE, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.BETTER_CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE4, 'T', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, - 'G', OrePrefixes.cell.get(Materials.Graphite) }, - 5); - - } - - private static void registerPolarizer() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Polarizer.get(1), - bitsd, - new Object[] { "ZSZ", aTextWireHull, "ZSZ", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'S', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'Z', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Polarizer.get(1), - bitsd, - new Object[] { "ZSZ", aTextWireHull, "ZSZ", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'S', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'Z', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Polarizer.get(1), - bitsd, - new Object[] { "ZSZ", aTextWireHull, "ZSZ", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'S', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'Z', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Polarizer.get(1), - bitsd, - new Object[] { "ZSZ", aTextWireHull, "ZSZ", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'S', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'Z', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Polarizer.get(1), - bitsd, - new Object[] { "ZSZ", aTextWireHull, "ZSZ", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'S', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.STICK_ELECTROMAGNETIC, 'Z', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_ELECTRIC, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - - } - - private static void registerPrinter() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Printer.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Printer.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Printer.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Printer.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Printer.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LuV_Printer.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 6); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_ZPM_Printer.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 7); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_UV_Printer.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 8); - - } - - private static void registerRecycler() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Recycler.get(1), - bitsd, - new Object[] { "GCG", aTextPlateMotor, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OrePrefixes.dust.get(Materials.Glowstone) }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Recycler.get(1), - bitsd, - new Object[] { "GCG", aTextPlateMotor, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OrePrefixes.dust.get(Materials.Glowstone) }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Recycler.get(1), - bitsd, - new Object[] { "GCG", aTextPlateMotor, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OrePrefixes.dust.get(Materials.Glowstone) }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Recycler.get(1), - bitsd, - new Object[] { "GCG", aTextPlateMotor, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OrePrefixes.dust.get(Materials.Glowstone) }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Recycler.get(1), - bitsd, - new Object[] { "GCG", aTextPlateMotor, aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', OrePrefixes.dust.get(Materials.Glowstone) }, - 5); - - } - - private static void registerSifter() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Sifter.get(1), - bitsd, - new Object[] { "WFW", aTextPlateMotor, "CFC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'F', OreDictNames.craftingFilter, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Sifter.get(1), - bitsd, - new Object[] { "WFW", aTextPlateMotor, "CFC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'F', OreDictNames.craftingFilter, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Sifter.get(1), - bitsd, - new Object[] { "WFW", aTextPlateMotor, "CFC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'F', OreDictNames.craftingFilter, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Sifter.get(1), - bitsd, - new Object[] { "WFW", aTextPlateMotor, "CFC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'F', OreDictNames.craftingFilter, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Sifter.get(1), - bitsd, - new Object[] { "WFW", aTextPlateMotor, "CFC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'F', OreDictNames.craftingFilter, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - - } - - private static void registerSlicer() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Slicer.get(1), - bitsd, - new Object[] { aTextWireCoil, "PMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Slicer.get(1), - bitsd, - new Object[] { aTextWireCoil, "PMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Slicer.get(1), - bitsd, - new Object[] { aTextWireCoil, "PMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Slicer.get(1), - bitsd, - new Object[] { aTextWireCoil, "PMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Slicer.get(1), - bitsd, - new Object[] { aTextWireCoil, "PMV", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, - 'P', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PISTON, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - - } - - private static void registerThermalCentrifuge() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_ThermalCentrifuge.get(1), - bitsd, - new Object[] { "CEC", "OMO", "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_ThermalCentrifuge.get(1), - bitsd, - new Object[] { "CEC", "OMO", "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_ThermalCentrifuge.get(1), - bitsd, - new Object[] { "CEC", "OMO", "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_ThermalCentrifuge.get(1), - bitsd, - new Object[] { "CEC", "OMO", "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_ThermalCentrifuge.get(1), - bitsd, - new Object[] { "CEC", "OMO", "WEW", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'O', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.COIL_HEATING_DOUBLE }, - 5); - - } - - private static void registerUnpackager() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Unboxinator.get(1), - bitsd, - new Object[] { "BCB", "VMR", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'B', OreDictNames.craftingChest }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Unboxinator.get(1), - bitsd, - new Object[] { "BCB", "VMR", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'B', OreDictNames.craftingChest }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Unboxinator.get(1), - bitsd, - new Object[] { "BCB", "VMR", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'B', OreDictNames.craftingChest }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Unboxinator.get(1), - bitsd, - new Object[] { "BCB", "VMR", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'B', OreDictNames.craftingChest }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Unboxinator.get(1), - bitsd, - new Object[] { "BCB", "VMR", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'B', OreDictNames.craftingChest }, - 5); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LuV_Unboxinator.get(1), - bitsd, - new Object[] { "BCB", "VMR", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'B', OreDictNames.craftingChest }, - 6); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_ZPM_Unboxinator.get(1), - bitsd, - new Object[] { "BCB", "VMR", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'B', OreDictNames.craftingChest }, - 7); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_UV_Unboxinator.get(1), - bitsd, - new Object[] { "BCB", "VMR", aTextWireCoil, 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'R', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM, 'V', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CONVEYOR, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'B', OreDictNames.craftingChest }, - 8); - } - - private static void registerWiremill() { - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_LV_Wiremill.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, aTextMotorWire, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 1); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_MV_Wiremill.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, aTextMotorWire, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 2); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_HV_Wiremill.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, aTextMotorWire, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 3); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_EV_Wiremill.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, aTextMotorWire, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 4); - - GT_ModHandler.addMachineCraftingRecipe( - ItemList.Machine_IV_Wiremill.get(1), - bitsd, - new Object[] { aTextMotorWire, aTextCableHull, aTextMotorWire, 'M', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'E', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.MOTOR, - 'C', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE }, - 5); - } - - private static void registerShapedCraftingRecipes() { - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Pipe_Polytetrafluoroethylene.get(1L), - bits, - new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.Polytetrafluoroethylene), 'F', - OrePrefixes.frameGt.get(Materials.Polytetrafluoroethylene), 'I', - OrePrefixes.pipeMedium.get(Materials.Polytetrafluoroethylene) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Pipe_Polybenzimidazole.get(1L), - bits, - new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.Polybenzimidazole), 'F', - OrePrefixes.frameGt.get(Materials.Polybenzimidazole), 'I', - OrePrefixes.pipeMedium.get(Materials.Polybenzimidazole) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_ULV.get(1L), - bits, - new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', - OrePrefixes.plate.get(Materials.WroughtIron) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_LV.get(1L), - bits, - new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', OrePrefixes.plate.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_MV.get(1L), - bits, - new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', OrePrefixes.plate.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_HV.get(1L), - bits, - new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', - OrePrefixes.plate.get(Materials.StainlessSteel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_EV.get(1L), - bits, - new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', OrePrefixes.plate.get(Materials.Titanium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_IV.get(1L), - bits, - new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', - OrePrefixes.plate.get(Materials.TungstenSteel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_LuV.get(1L), - bits, - new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', - OrePrefixes.plate.get(ExternalMaterials.getRhodiumPlatedPalladium()) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_ZPM.get(1L), - bits, - new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', OrePrefixes.plate.get(Materials.Iridium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_UV.get(1L), - bits, - new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', OrePrefixes.plate.get(Materials.Osmium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_MAX.get(1L), - bits, - new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', - OrePrefixes.plate.get(Materials.Neutronium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_BronzePlatedBricks.get(1L), - bits, - new Object[] { "PhP", "PBP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Bronze), 'B', - new ItemStack(Blocks.brick_block, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_SolidSteel.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Steel), 'F', - OrePrefixes.frameGt.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_StableTitanium.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Titanium), 'F', - OrePrefixes.frameGt.get(Materials.Titanium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_HeatProof.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Invar), 'F', - OrePrefixes.frameGt.get(Materials.Invar) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_FrostProof.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Aluminium), 'F', - OrePrefixes.frameGt.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_CleanStainlessSteel.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.StainlessSteel), 'F', - OrePrefixes.frameGt.get(Materials.StainlessSteel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_RobustTungstenSteel.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'F', - OrePrefixes.frameGt.get(Materials.TungstenSteel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_MiningOsmiridium.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Osmiridium), 'F', - OrePrefixes.frameGt.get(Materials.Osmiridium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_MiningNeutronium.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Neutronium), 'F', - OrePrefixes.frameGt.get(Materials.Neutronium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_MiningBlackPlutonium.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.BlackPlutonium), 'F', - OrePrefixes.frameGt.get(Materials.BlackPlutonium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Turbine.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Magnalium), 'F', - OrePrefixes.frameGt.get(Materials.BlueSteel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Turbine1.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.StainlessSteel), 'F', - ItemList.Casing_Turbine }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Turbine2.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Titanium), 'F', - ItemList.Casing_Turbine }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Turbine3.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'F', - ItemList.Casing_Turbine }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_TurbineGasAdvanced.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.HSSS), 'F', - ItemList.Casing_Turbine }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Pipe_Bronze.get(1L), - bits, - new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.Bronze), 'F', - OrePrefixes.frameGt.get(Materials.Bronze), 'I', OrePrefixes.pipeMedium.get(Materials.Bronze) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Pipe_Steel.get(1L), - bits, - new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.Steel), 'F', - OrePrefixes.frameGt.get(Materials.Steel), 'I', OrePrefixes.pipeMedium.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Pipe_Titanium.get(1L), - bits, - new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.Titanium), 'F', - OrePrefixes.frameGt.get(Materials.Titanium), 'I', OrePrefixes.pipeMedium.get(Materials.Titanium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Pipe_TungstenSteel.get(1L), - bits, - new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'F', - OrePrefixes.frameGt.get(Materials.TungstenSteel), 'I', - OrePrefixes.pipeMedium.get(Materials.TungstenSteel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Gearbox_Bronze.get(1L), - bits, - new Object[] { "PhP", "GFG", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Bronze), 'F', - OrePrefixes.frameGt.get(Materials.Bronze), 'G', OrePrefixes.gearGt.get(Materials.Bronze) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Gearbox_Steel.get(1L), - bits, - new Object[] { "PhP", "GFG", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Steel), 'F', - OrePrefixes.frameGt.get(Materials.Steel), 'G', OrePrefixes.gearGt.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Gearbox_Titanium.get(1L), - bits, - new Object[] { "PhP", "GFG", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Steel), 'F', - OrePrefixes.frameGt.get(Materials.Titanium), 'G', OrePrefixes.gearGt.get(Materials.Titanium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Gearbox_TungstenSteel.get(1L), - bits, - new Object[] { "PhP", "GFG", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Steel), 'F', - OrePrefixes.frameGt.get(Materials.TungstenSteel), 'G', ItemList.Robot_Arm_IV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Grate.get(1L), - bits, - new Object[] { "PVP", "PFP", aTextPlateMotor, 'P', new ItemStack(Blocks.iron_bars, 1), 'F', - OrePrefixes.frameGt.get(Materials.Steel), 'M', ItemList.Electric_Motor_MV, 'V', - OrePrefixes.rotor.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Assembler.get(1L), - bits, - new Object[] { "PVP", "PFP", aTextPlateMotor, 'P', OrePrefixes.circuit.get(Materials.ZPM), 'F', - OrePrefixes.frameGt.get(Materials.TungstenSteel), 'M', ItemList.Electric_Motor_IV, 'V', - OrePrefixes.circuit.get(Materials.LuV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Firebox_Bronze.get(1L), - bits, - new Object[] { "PSP", "SFS", "PSP", 'P', OrePrefixes.plate.get(Materials.Bronze), 'F', - OrePrefixes.frameGt.get(Materials.Bronze), 'S', OrePrefixes.stick.get(Materials.Bronze) }); - GT_ModHandler.addCraftingRecipe( - ItemList.WoodenCasing.get(1L), - bits, - new Object[] { "PSP", "PFP", "PSP", 'F', OrePrefixes.gear.get(Materials.Wood), 'P', - OrePrefixes.frameGt.get(Materials.Wood), 'S', OrePrefixes.screw.get(Materials.Wood) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_Output_ULV.get(1L), - bits, - new Object[] { "ASA", "AFA", "APA", 'S', GT_ModHandler.getModItem(BuildCraftFactory.ID, "tankBlock", 1L, 0), - 'F', ItemList.Hull_ULV.get(1L), 'A', OrePrefixes.plate.get(Materials.Rubber), 'P', - OrePrefixes.ring.get(Materials.Rubber) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_Input_ULV.get(1L), - bits, - new Object[] { "ASA", "AFA", "APA", 'S', GT_ModHandler.getModItem(BuildCraftFactory.ID, "tankBlock", 1L, 0), - 'F', ItemList.Hull_ULV.get(1L), 'A', OrePrefixes.plate.get(Materials.Rubber), 'P', - OrePrefixes.gear.get(Materials.Rubber) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Firebox_Steel.get(1L), - bits, - new Object[] { "PSP", "SFS", "PSP", 'P', OrePrefixes.plate.get(Materials.Steel), 'F', - OrePrefixes.frameGt.get(Materials.Steel), 'S', OrePrefixes.stick.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Firebox_Titanium.get(1L), - bits, - new Object[] { "PSP", "SFS", "PSP", 'P', OrePrefixes.plate.get(Materials.Titanium), 'F', - OrePrefixes.frameGt.get(Materials.Titanium), 'S', OrePrefixes.stick.get(Materials.Titanium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Firebox_TungstenSteel.get(1L), - bits, - new Object[] { "PSP", "SFS", "PSP", 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'F', - OrePrefixes.frameGt.get(Materials.TungstenSteel), 'S', - OrePrefixes.stick.get(Materials.TungstenSteel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Stripes_A.get(1L), - bits, - new Object[] { "Y ", " M ", " B", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', - Dyes.dyeBlack }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Stripes_B.get(1L), - bits, - new Object[] { " Y", " M ", "B ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', - Dyes.dyeBlack }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_RadioactiveHazard.get(1L), - bits, - new Object[] { " YB", " M ", " ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', - Dyes.dyeBlack }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_BioHazard.get(1L), - bits, - new Object[] { " Y ", " MB", " ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', - Dyes.dyeBlack }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_ExplosionHazard.get(1L), - bits, - new Object[] { " Y ", " M ", " B", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', - Dyes.dyeBlack }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_FireHazard.get(1L), - bits, - new Object[] { " Y ", " M ", " B ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', - Dyes.dyeBlack }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_AcidHazard.get(1L), - bits, - new Object[] { " Y ", " M ", "B ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', - Dyes.dyeBlack }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_MagicHazard.get(1L), - bits, - new Object[] { " Y ", "BM ", " ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', - Dyes.dyeBlack }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_FrostHazard.get(1L), - bits, - new Object[] { "BY ", " M ", " ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', - Dyes.dyeBlack }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_NoiseHazard.get(1L), - bits, - new Object[] { " ", " M ", "BY ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', - Dyes.dyeBlack }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Advanced_Iridium.get(1L), - bits, - new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Iridium), 'F', - OrePrefixes.frameGt.get(Materials.Iridium) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Bricked_BlastFurnace.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "BFB", "FwF", "BFB", 'B', ItemList.Casing_Firebricks, 'F', - OreDictNames.craftingIronFurnace }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_Bronze.get(1L), - bits, - new Object[] { aTextPlate, "PhP", aTextPlate, 'P', OrePrefixes.plate.get(Materials.Bronze) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_Bronze_Bricks.get(1L), - bits, - new Object[] { aTextPlate, "PhP", "BBB", 'P', OrePrefixes.plate.get(Materials.Bronze), 'B', - new ItemStack(Blocks.brick_block, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_HP.get(1L), - bits, - new Object[] { aTextPlate, "PhP", aTextPlate, 'P', OrePrefixes.plate.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_HP_Bricks.get(1L), - bits, - new Object[] { aTextPlate, "PhP", "BBB", 'P', OrePrefixes.plate.get(Materials.WroughtIron), 'B', - new ItemStack(Blocks.brick_block, 1) }); - - // hull crafting recipes. (They can't be used for recycling as that would create an exploit loop with the - // assembler recipes.) - - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_ULV.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_ULV, 'C', - OrePrefixes.cableGt01.get(Materials.Lead), 'H', OrePrefixes.plate.get(Materials.WroughtIron), 'P', - OrePrefixes.plate.get(Materials.Wood) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_LV.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_LV, 'C', - OrePrefixes.cableGt01.get(Materials.Tin), 'H', OrePrefixes.plate.get(Materials.Steel), 'P', - OrePrefixes.plate.get(Materials.WroughtIron) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_MV.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_MV, 'C', - OrePrefixes.cableGt01.get(Materials.Copper), 'H', OrePrefixes.plate.get(Materials.Aluminium), 'P', - OrePrefixes.plate.get(Materials.WroughtIron) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_HV.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_HV, 'C', - OrePrefixes.cableGt01.get(Materials.Gold), 'H', OrePrefixes.plate.get(Materials.StainlessSteel), 'P', - OrePrefixes.plate.get(Materials.Plastic) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_EV.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_EV, 'C', - OrePrefixes.cableGt01.get(Materials.Aluminium), 'H', OrePrefixes.plate.get(Materials.Titanium), 'P', - OrePrefixes.plate.get(Materials.Plastic) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_IV.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_IV, 'C', - OrePrefixes.cableGt01.get(Materials.Tungsten), 'H', OrePrefixes.plate.get(Materials.TungstenSteel), 'P', - OrePrefixes.plate.get(Materials.Polytetrafluoroethylene) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_LuV.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_LuV, 'C', - OrePrefixes.cableGt01.get(Materials.VanadiumGallium), 'H', - OrePrefixes.plate.get(ExternalMaterials.getRhodiumPlatedPalladium()), 'P', - OrePrefixes.plate.get(Materials.Polytetrafluoroethylene) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_ZPM.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_ZPM, 'C', - OrePrefixes.cableGt01.get(Materials.Naquadah), 'H', OrePrefixes.plate.get(Materials.Iridium), 'P', - OrePrefixes.plate.get(Materials.Polybenzimidazole) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_UV.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_UV, 'C', - OrePrefixes.wireGt04.get(Materials.NaquadahAlloy), 'H', OrePrefixes.plate.get(Materials.Osmium), 'P', - OrePrefixes.plate.get(Materials.Polybenzimidazole) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hull_MAX.get(1L), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_MAX, 'C', - OrePrefixes.wireGt04.get(Materials.SuperconductorUV), 'H', OrePrefixes.plate.get(Materials.Neutronium), - 'P', OrePrefixes.plate.get(Materials.Polybenzimidazole) }); - - // hull recycling data - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hull_ULV.get(1L), - ItemList.Casing_ULV.get(1), - OrePrefixes.cableGt01.get(Materials.Lead), - OrePrefixes.cableGt01.get(Materials.Lead)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hull_LV.get(1L), - ItemList.Casing_LV.get(1), - OrePrefixes.cableGt01.get(Materials.Tin), - OrePrefixes.cableGt01.get(Materials.Tin)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hull_MV.get(1L), - ItemList.Casing_MV.get(1), - OrePrefixes.cableGt01.get(Materials.AnyCopper), - OrePrefixes.cableGt01.get(Materials.AnyCopper)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hull_HV.get(1L), - ItemList.Casing_HV.get(1), - OrePrefixes.cableGt01.get(Materials.Gold), - OrePrefixes.cableGt01.get(Materials.Gold)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hull_EV.get(1L), - ItemList.Casing_EV.get(1), - OrePrefixes.cableGt01.get(Materials.Aluminium), - OrePrefixes.cableGt01.get(Materials.Aluminium)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hull_IV.get(1L), - ItemList.Casing_IV.get(1), - OrePrefixes.cableGt01.get(Materials.Tungsten), - OrePrefixes.cableGt01.get(Materials.Tungsten)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hull_LuV.get(1L), - ItemList.Casing_LuV.get(1), - OrePrefixes.cableGt01.get(Materials.VanadiumGallium), - OrePrefixes.cableGt01.get(Materials.VanadiumGallium)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hull_ZPM.get(1L), - ItemList.Casing_ZPM.get(1), - OrePrefixes.cableGt02.get(Materials.Naquadah), - OrePrefixes.cableGt02.get(Materials.Naquadah)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hull_UV.get(1L), - ItemList.Casing_UV.get(1), - OrePrefixes.cableGt04.get(Materials.NaquadahAlloy), - OrePrefixes.cableGt04.get(Materials.NaquadahAlloy)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hull_MAX.get(1L), - ItemList.Casing_MAX.get(1), - OrePrefixes.cableGt04.get(Materials.SuperconductorUV), - OrePrefixes.cableGt04.get(Materials.SuperconductorUV)); - - GT_ModHandler.addCraftingRecipe( - ItemList.Transformer_LV_ULV.get(1L), - bitsd, - new Object[] { " BB", "CM ", " BB", 'M', ItemList.Hull_ULV, 'C', OrePrefixes.cableGt01.get(Materials.Tin), - 'B', OrePrefixes.cableGt01.get(Materials.Lead) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Transformer_MV_LV.get(1L), - bitsd, - new Object[] { " BB", "CM ", " BB", 'M', ItemList.Hull_LV, 'C', - OrePrefixes.cableGt01.get(Materials.AnyCopper), 'B', OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Transformer_HV_MV.get(1L), - bitsd, - new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_MV, 'C', OrePrefixes.cableGt01.get(Materials.Gold), - 'B', OrePrefixes.cableGt01.get(Materials.AnyCopper), 'K', - OrePrefixes.componentCircuit.get(Materials.Inductor) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Transformer_EV_HV.get(1L), - bitsd, - new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_HV, 'C', - OrePrefixes.cableGt01.get(Materials.Aluminium), 'B', OrePrefixes.cableGt01.get(Materials.Gold), 'K', - ItemList.Circuit_Chip_ULPIC }); - GT_ModHandler.addCraftingRecipe( - ItemList.Transformer_IV_EV.get(1L), - bitsd, - new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_EV, 'C', - OrePrefixes.cableGt01.get(Materials.Tungsten), 'B', OrePrefixes.cableGt01.get(Materials.Aluminium), 'K', - ItemList.Circuit_Chip_LPIC }); - GT_ModHandler.addCraftingRecipe( - ItemList.Transformer_LuV_IV.get(1L), - bitsd, - new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_IV, 'C', - OrePrefixes.cableGt01.get(Materials.VanadiumGallium), 'B', - OrePrefixes.cableGt01.get(Materials.Tungsten), 'K', ItemList.Circuit_Chip_PIC }); - GT_ModHandler.addCraftingRecipe( - ItemList.Transformer_ZPM_LuV.get(1L), - bitsd, - new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_LuV, 'C', - OrePrefixes.cableGt01.get(Materials.Naquadah), 'B', - OrePrefixes.cableGt01.get(Materials.VanadiumGallium), 'K', ItemList.Circuit_Chip_HPIC }); - GT_ModHandler.addCraftingRecipe( - ItemList.Transformer_UV_ZPM.get(1L), - bitsd, - new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_ZPM, 'C', - OrePrefixes.cableGt01.get(Materials.NaquadahAlloy), 'B', OrePrefixes.cableGt01.get(Materials.Naquadah), - 'K', ItemList.Circuit_Chip_UHPIC }); - GT_ModHandler.addCraftingRecipe( - ItemList.Transformer_MAX_UV.get(1L), - bitsd, - new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_UV, 'C', - OrePrefixes.wireGt01.get(Materials.Bedrockium), 'B', OrePrefixes.cableGt01.get(Materials.NaquadahAlloy), - 'K', ItemList.Circuit_Chip_NPIC }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_Dynamo_ULV.get(1L), - bitsd, - new Object[] { "XOL", "SMP", "XOL", 'M', ItemList.Hull_ULV, 'S', OrePrefixes.spring.get(Materials.Lead), - 'X', OrePrefixes.circuit.get(Materials.ULV), 'O', ItemList.ULV_Coil, 'L', - OrePrefixes.cell.get(Materials.Lubricant), 'P', OrePrefixes.rotor.get(Materials.Lead) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_Dynamo_LV.get(1L), - bitsd, - new Object[] { "XOL", "SMP", "XOL", 'M', ItemList.Hull_LV, 'S', OrePrefixes.spring.get(Materials.Tin), 'X', - OrePrefixes.circuit.get(Materials.LV), 'O', ItemList.LV_Coil, 'L', - OrePrefixes.cell.get(Materials.Lubricant), 'P', ItemList.Electric_Pump_LV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_Dynamo_MV.get(1L), - bitsd, - new Object[] { "XOL", "SMP", "XOL", 'M', ItemList.Hull_MV, 'S', OrePrefixes.spring.get(Materials.Copper), - 'X', ItemList.Circuit_Chip_ULPIC, 'O', ItemList.MV_Coil, 'L', OrePrefixes.cell.get(Materials.Lubricant), - 'P', ItemList.Electric_Pump_MV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_Energy_ULV.get(1L), - bitsd, - new Object[] { "COL", "XMP", "COL", 'M', ItemList.Hull_ULV, 'C', OrePrefixes.cableGt01.get(Materials.Lead), - 'X', OrePrefixes.circuit.get(Materials.ULV), 'O', ItemList.ULV_Coil, 'L', - OrePrefixes.cell.get(Materials.Lubricant), 'P', OrePrefixes.rotor.get(Materials.Lead) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_Energy_LV.get(1L), - bitsd, - new Object[] { "COL", "XMP", "COL", 'M', ItemList.Hull_LV, 'C', OrePrefixes.cableGt01.get(Materials.Tin), - 'X', OrePrefixes.circuit.get(Materials.LV), 'O', ItemList.LV_Coil, 'L', - OrePrefixes.cell.get(Materials.Lubricant), 'P', ItemList.Electric_Pump_LV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_Energy_MV.get(1L), - bitsd, - new Object[] { "XOL", "CMP", "XOL", 'M', ItemList.Hull_MV, 'C', OrePrefixes.cableGt01.get(Materials.Copper), - 'X', ItemList.Circuit_Chip_ULPIC, 'O', ItemList.MV_Coil, 'L', OrePrefixes.cell.get(Materials.Lubricant), - 'P', ItemList.Electric_Pump_MV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_Maintenance.get(1L), - bitsd, - new Object[] { "dwx", "hMc", "fsr", 'M', ItemList.Hull_LV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_DataAccess_EV.get(1L), - bitsd, - new Object[] { "COC", "OMO", "COC", 'M', ItemList.Hull_EV, 'O', ItemList.Tool_DataStick, 'C', - OrePrefixes.circuit.get(Materials.IV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_DataAccess_LuV.get(1L), - bitsd, - new Object[] { "COC", "OMO", "COC", 'M', ItemList.Hull_LuV, 'O', ItemList.Tool_DataOrb, 'C', - OrePrefixes.circuit.get(Materials.ZPM) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_DataAccess_UV.get(1L), - bitsd, - new Object[] { "CRC", "OMO", "CRC", 'M', ItemList.Hull_UV, 'O', ItemList.Tool_DataOrb, 'C', - OrePrefixes.circuit.get(Materials.UHV), 'R', ItemList.Robot_Arm_UV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_AutoMaintenance.get(1L), - bitsd, - new Object[] { "CHC", "AMA", "CHC", 'M', ItemList.Hull_LuV, 'H', ItemList.Hatch_Maintenance, 'A', - ItemList.Robot_Arm_LuV, 'C', OrePrefixes.circuit.get(Materials.ZPM) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_Muffler_LV.get(1L), - bitsd, - new Object[] { "MX ", "PR ", 'M', ItemList.Hull_LV, 'P', OrePrefixes.pipeMedium.get(Materials.Bronze), 'R', - OrePrefixes.rotor.get(Materials.Bronze), 'X', ItemList.Electric_Motor_LV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_Muffler_MV.get(1L), - bitsd, - new Object[] { "MX ", "PR ", 'M', ItemList.Hull_MV, 'P', OrePrefixes.pipeMedium.get(Materials.Steel), 'R', - OrePrefixes.rotor.get(Materials.Steel), 'X', ItemList.Electric_Motor_MV }); - - // recycling data for the other mufflers, recipes are in assembler - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hatch_Muffler_HV.get(1L), - ItemList.Hull_HV.get(1), - OrePrefixes.pipeLarge.get(Materials.StainlessSteel), - OrePrefixes.rotor.get(Materials.StainlessSteel), - ItemList.Electric_Motor_HV.get(1)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hatch_Muffler_EV.get(1L), - ItemList.Hull_EV.get(1), - OrePrefixes.pipeLarge.get(Materials.Titanium), - OrePrefixes.rotor.get(Materials.Titanium), - ItemList.Electric_Motor_EV.get(1)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hatch_Muffler_IV.get(1L), - ItemList.Hull_IV.get(1), - OrePrefixes.pipeLarge.get(Materials.TungstenSteel), - OrePrefixes.rotor.get(Materials.TungstenSteel), - ItemList.Electric_Motor_IV.get(1)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hatch_Muffler_LuV.get(1L), - ItemList.Hull_LuV.get(1), - OrePrefixes.pipeLarge.get(Materials.Enderium), - OrePrefixes.rotor.get(Materials.Enderium), - ItemList.Electric_Motor_LuV.get(1)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hatch_Muffler_ZPM.get(1L), - ItemList.Hull_ZPM.get(1), - OrePrefixes.pipeLarge.get(Materials.Naquadah), - OrePrefixes.rotor.get(Materials.NaquadahAlloy), - ItemList.Electric_Motor_ZPM.get(1)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hatch_Muffler_UV.get(1L), - ItemList.Hull_UV.get(1), - OrePrefixes.pipeLarge.get(Materials.NetherStar), - OrePrefixes.rotor.get(Materials.Neutronium), - ItemList.Electric_Motor_UV.get(1)); - GT_OreDictUnificator.addItemDataFromInputs( - ItemList.Hatch_Muffler_MAX.get(1L), - ItemList.Hull_MAX.get(1), - OrePrefixes.pipeLarge.get(Materials.MysteriousCrystal), - OrePrefixes.rotor.get(Materials.CosmicNeutronium), - ItemList.Electric_Motor_UHV.get(1)); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Bronze_Boiler.get(1L), - bitsd, - new Object[] { aTextPlate, "PwP", "BFB", 'F', OreDictNames.craftingIronFurnace, 'P', - OrePrefixes.plate.get(Materials.Bronze), 'B', new ItemStack(Blocks.brick_block, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Steel_Boiler.get(1L), - bitsd, - new Object[] { aTextPlate, "PwP", "BFB", 'F', OreDictNames.craftingIronFurnace, 'P', - OrePrefixes.plate.get(Materials.Steel), 'B', new ItemStack(Blocks.brick_block, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Steel_Boiler_Lava.get(1L), - bitsd, - new Object[] { aTextPlate, "PTP", aTextPlateMotor, 'M', ItemList.Hull_HP, 'P', - OrePrefixes.plate.get(Materials.Steel), 'T', - GT_ModHandler.getModItem(BuildCraftFactory.ID, "tankBlock", 1L, 0) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Bronze_Boiler_Solar.get(1L), - bitsd, - new Object[] { "GGG", "SSS", aTextPlateMotor, 'M', ItemList.Hull_Bronze_Bricks, 'P', - OrePrefixes.pipeSmall.get(Materials.Bronze), 'S', OrePrefixes.plateDouble.get(Materials.Silver), 'G', - new ItemStack(Blocks.glass, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HP_Solar.get(1L), - bitsd, - new Object[] { "GGG", "SSS", aTextPlateMotor, 'M', ItemList.Hull_HP_Bricks, 'P', - OrePrefixes.pipeSmall.get(Materials.Steel), 'S', OrePrefixes.plateTriple.get(Materials.Silver), 'G', - GT_ModHandler.getModItem(IndustrialCraft2.ID, "blockAlloyGlass", 1L) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Bronze_Furnace.get(1L), - bitsd, - new Object[] { "XXX", "XMX", "XFX", 'M', ItemList.Hull_Bronze_Bricks, 'X', - OrePrefixes.pipeSmall.get(Materials.Bronze), 'F', OreDictNames.craftingFurnace }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HP_Furnace.get(1L), - bitsd, - new Object[] { "XSX", "PMP", "XXX", 'M', ItemList.Machine_Bronze_Furnace, 'X', - OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), - 'S', OrePrefixes.plate.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Bronze_Macerator.get(1L), - bitsd, - new Object[] { "DXD", "XMX", "PXP", 'M', ItemList.Hull_Bronze, 'X', - OrePrefixes.pipeSmall.get(Materials.Bronze), 'P', OreDictNames.craftingPiston, 'D', - OrePrefixes.gem.get(Materials.Diamond) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HP_Macerator.get(1L), - bitsd, - new Object[] { "PSP", "XMX", "PPP", 'M', ItemList.Machine_Bronze_Macerator, 'X', - OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), - 'S', OrePrefixes.plate.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Bronze_Extractor.get(1L), - bitsd, - new Object[] { "XXX", "PMG", "XXX", 'M', ItemList.Hull_Bronze, 'X', - OrePrefixes.pipeSmall.get(Materials.Bronze), 'P', OreDictNames.craftingPiston, 'G', - new ItemStack(Blocks.glass, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HP_Extractor.get(1L), - bitsd, - new Object[] { "XSX", "PMP", "XXX", 'M', ItemList.Machine_Bronze_Extractor, 'X', - OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), - 'S', OrePrefixes.plate.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Bronze_Hammer.get(1L), - bitsd, - new Object[] { "XPX", "XMX", "XAX", 'M', ItemList.Hull_Bronze, 'X', - OrePrefixes.pipeSmall.get(Materials.Bronze), 'P', OreDictNames.craftingPiston, 'A', - OreDictNames.craftingAnvil }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HP_Hammer.get(1L), - bitsd, - new Object[] { "PSP", "XMX", "PPP", 'M', ItemList.Machine_Bronze_Hammer, 'X', - OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), - 'S', OrePrefixes.plate.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Bronze_Compressor.get(1L), - bitsd, - new Object[] { "XXX", aTextPlateMotor, "XXX", 'M', ItemList.Hull_Bronze, 'X', - OrePrefixes.pipeSmall.get(Materials.Bronze), 'P', OreDictNames.craftingPiston }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HP_Compressor.get(1L), - bitsd, - new Object[] { "XSX", "PMP", "XXX", 'M', ItemList.Machine_Bronze_Compressor, 'X', - OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), - 'S', OrePrefixes.plate.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Bronze_AlloySmelter.get(1L), - bitsd, - new Object[] { "XXX", "FMF", "XXX", 'M', ItemList.Hull_Bronze_Bricks, 'X', - OrePrefixes.pipeSmall.get(Materials.Bronze), 'F', OreDictNames.craftingFurnace }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HP_AlloySmelter.get(1L), - bitsd, - new Object[] { "PSP", "PMP", "PXP", 'M', ItemList.Machine_Bronze_AlloySmelter, 'X', - OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), - 'S', OrePrefixes.plate.get(Materials.Steel) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_1by1_ULV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ULV, 'W', - OrePrefixes.wireGt01.get(Materials.Lead), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_1by1_LV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LV, 'W', - OrePrefixes.wireGt01.get(Materials.Tin), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_1by1_MV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MV, 'W', - OrePrefixes.wireGt01.get(Materials.AnyCopper), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_1by1_HV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_HV, 'W', - OrePrefixes.wireGt01.get(Materials.Gold), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_1by1_EV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_EV, 'W', - OrePrefixes.wireGt01.get(Materials.Aluminium), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_1by1_IV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_IV, 'W', - OrePrefixes.wireGt01.get(Materials.Tungsten), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_1by1_LuV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LuV, 'W', - OrePrefixes.wireGt01.get(Materials.VanadiumGallium), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_1by1_ZPM.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ZPM, 'W', - OrePrefixes.wireGt01.get(Materials.Naquadah), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_1by1_UV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_UV, 'W', - OrePrefixes.wireGt01.get(Materials.NaquadahAlloy), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_1by1_UHV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MAX, 'W', - OrePrefixes.wireGt01.get(Materials.SuperconductorUHV), 'T', OreDictNames.craftingChest }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_2by2_ULV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ULV, 'W', - OrePrefixes.wireGt04.get(Materials.Lead), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_2by2_LV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LV, 'W', - OrePrefixes.wireGt04.get(Materials.Tin), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_2by2_MV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MV, 'W', - OrePrefixes.wireGt04.get(Materials.AnyCopper), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_2by2_HV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_HV, 'W', - OrePrefixes.wireGt04.get(Materials.Gold), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_2by2_EV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_EV, 'W', - OrePrefixes.wireGt04.get(Materials.Aluminium), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_2by2_IV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_IV, 'W', - OrePrefixes.wireGt04.get(Materials.Tungsten), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_2by2_LuV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LuV, 'W', - OrePrefixes.wireGt04.get(Materials.VanadiumGallium), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_2by2_ZPM.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ZPM, 'W', - OrePrefixes.wireGt04.get(Materials.Naquadah), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_2by2_UV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_UV, 'W', - OrePrefixes.wireGt04.get(Materials.NaquadahAlloy), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_2by2_UHV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MAX, 'W', - OrePrefixes.wireGt04.get(Materials.SuperconductorUHV), 'T', OreDictNames.craftingChest }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_3by3_ULV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ULV, 'W', - OrePrefixes.wireGt08.get(Materials.Lead), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_3by3_LV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LV, 'W', - OrePrefixes.wireGt08.get(Materials.Tin), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_3by3_MV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MV, 'W', - OrePrefixes.wireGt08.get(Materials.AnyCopper), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_3by3_HV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_HV, 'W', - OrePrefixes.wireGt08.get(Materials.Gold), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_3by3_EV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_EV, 'W', - OrePrefixes.wireGt08.get(Materials.Aluminium), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_3by3_IV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_IV, 'W', - OrePrefixes.wireGt08.get(Materials.Tungsten), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_3by3_LuV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LuV, 'W', - OrePrefixes.wireGt08.get(Materials.VanadiumGallium), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_3by3_ZPM.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ZPM, 'W', - OrePrefixes.wireGt08.get(Materials.Naquadah), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_3by3_UV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_UV, 'W', - OrePrefixes.wireGt08.get(Materials.NaquadahAlloy), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_3by3_UHV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MAX, 'W', - OrePrefixes.wireGt08.get(Materials.SuperconductorUHV), 'T', OreDictNames.craftingChest }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_4by4_ULV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ULV, 'W', - OrePrefixes.wireGt16.get(Materials.Lead), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_4by4_LV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LV, 'W', - OrePrefixes.wireGt16.get(Materials.Tin), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_4by4_MV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MV, 'W', - OrePrefixes.wireGt16.get(Materials.AnyCopper), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_4by4_HV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_HV, 'W', - OrePrefixes.wireGt16.get(Materials.Gold), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_4by4_EV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_EV, 'W', - OrePrefixes.wireGt16.get(Materials.Aluminium), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_4by4_IV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_IV, 'W', - OrePrefixes.wireGt16.get(Materials.Tungsten), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_4by4_LuV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LuV, 'W', - OrePrefixes.wireGt16.get(Materials.VanadiumGallium), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_4by4_ZPM.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ZPM, 'W', - OrePrefixes.wireGt16.get(Materials.Naquadah), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_4by4_UV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_UV, 'W', - OrePrefixes.wireGt16.get(Materials.NaquadahAlloy), 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Buffer_4by4_UHV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MAX, 'W', - OrePrefixes.wireGt16.get(Materials.SuperconductorUHV), 'T', OreDictNames.craftingChest }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Charger_4by4_ULV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_ULV, 'W', - OrePrefixes.wireGt16.get(Materials.Lead), 'T', OreDictNames.craftingChest, 'B', - ItemList.Battery_RE_ULV_Tantalum, 'C', OrePrefixes.circuit.get(Materials.ULV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Charger_4by4_LV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_LV, 'W', - OrePrefixes.wireGt16.get(Materials.Tin), 'T', OreDictNames.craftingChest, 'B', - ItemList.Battery_RE_LV_Lithium, 'C', OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Charger_4by4_MV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_MV, 'W', - OrePrefixes.wireGt16.get(Materials.AnyCopper), 'T', OreDictNames.craftingChest, 'B', - ItemList.Battery_RE_MV_Lithium, 'C', OrePrefixes.circuit.get(Materials.MV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Charger_4by4_HV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_HV, 'W', - OrePrefixes.wireGt16.get(Materials.Gold), 'T', OreDictNames.craftingChest, 'B', - ItemList.Battery_RE_HV_Lithium, 'C', OrePrefixes.circuit.get(Materials.HV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Charger_4by4_EV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_EV, 'W', - OrePrefixes.wireGt16.get(Materials.Aluminium), 'T', OreDictNames.craftingChest, 'B', - OrePrefixes.battery.get(Materials.EV), 'C', OrePrefixes.circuit.get(Materials.EV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Charger_4by4_IV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_IV, 'W', - OrePrefixes.wireGt16.get(Materials.Tungsten), 'T', OreDictNames.craftingChest, 'B', - OrePrefixes.battery.get(Materials.IV), 'C', OrePrefixes.circuit.get(Materials.IV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Charger_4by4_LuV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_LuV, 'W', - OrePrefixes.wireGt16.get(Materials.VanadiumGallium), 'T', OreDictNames.craftingChest, 'B', - OrePrefixes.battery.get(Materials.LuV), 'C', OrePrefixes.circuit.get(Materials.LuV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Charger_4by4_ZPM.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_ZPM, 'W', - OrePrefixes.wireGt16.get(Materials.Naquadah), 'T', OreDictNames.craftingChest, 'B', - OrePrefixes.battery.get(Materials.ZPM), 'C', OrePrefixes.circuit.get(Materials.ZPM) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Charger_4by4_UV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_UV, 'W', - OrePrefixes.wireGt16.get(Materials.NaquadahAlloy), 'T', OreDictNames.craftingChest, 'B', ItemList.ZPM2, - 'C', OrePrefixes.circuit.get(Materials.UV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Battery_Charger_4by4_UHV.get(1L), - bitsd, - new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_MAX, 'W', - OrePrefixes.wireGt16.get(Materials.SuperconductorUHV), 'T', OreDictNames.craftingChest, 'B', - ItemList.ZPM2, 'C', OrePrefixes.circuit.get(Materials.UHV) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Locker_ULV.get(1L), - bitsd, - new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_ULV, 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Locker_LV.get(1L), - bitsd, - new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_LV, 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Locker_MV.get(1L), - bitsd, - new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_MV, 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Locker_HV.get(1L), - bitsd, - new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_HV, 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Locker_EV.get(1L), - bitsd, - new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_EV, 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Locker_IV.get(1L), - bitsd, - new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_IV, 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Locker_LuV.get(1L), - bitsd, - new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_LuV, 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Locker_ZPM.get(1L), - bitsd, - new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_ZPM, 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Locker_UV.get(1L), - bitsd, - new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_UV, 'T', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Locker_MAX.get(1L), - bitsd, - new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_UHV, 'T', OreDictNames.craftingChest }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_LV_Scanner.get(1L), - bitsd, - new Object[] { "CTC", aTextWireHull, "CRC", 'M', ItemList.Hull_LV, 'T', ItemList.Emitter_LV, 'R', - ItemList.Sensor_LV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', - OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_MV_Scanner.get(1L), - bitsd, - new Object[] { "CTC", aTextWireHull, "CRC", 'M', ItemList.Hull_MV, 'T', ItemList.Emitter_MV, 'R', - ItemList.Sensor_MV, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', - OrePrefixes.cableGt01.get(Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HV_Scanner.get(1L), - bitsd, - new Object[] { "CTC", aTextWireHull, "CRC", 'M', ItemList.Hull_HV, 'T', ItemList.Emitter_HV, 'R', - ItemList.Sensor_HV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', - OrePrefixes.cableGt01.get(Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_EV_Scanner.get(1L), - bitsd, - new Object[] { "CTC", aTextWireHull, "CRC", 'M', ItemList.Hull_EV, 'T', ItemList.Emitter_EV, 'R', - ItemList.Sensor_EV, 'C', OrePrefixes.circuit.get(Materials.IV), 'W', - OrePrefixes.cableGt01.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_IV_Scanner.get(1L), - bitsd, - new Object[] { "CTC", aTextWireHull, "CRC", 'M', ItemList.Hull_IV, 'T', ItemList.Emitter_IV, 'R', - ItemList.Sensor_IV, 'C', OrePrefixes.circuit.get(Materials.LuV), 'W', - OrePrefixes.cableGt01.get(Materials.Tungsten) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_LV_Boxinator.get(1L), - bitsd, - new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_LV, 'R', ItemList.Robot_Arm_LV, 'V', - ItemList.Conveyor_Module_LV, 'C', OrePrefixes.circuit.get(Materials.LV), 'W', - OrePrefixes.cableGt01.get(Materials.Tin), 'B', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_MV_Boxinator.get(1L), - bitsd, - new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_MV, 'R', ItemList.Robot_Arm_MV, 'V', - ItemList.Conveyor_Module_MV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', - OrePrefixes.cableGt01.get(Materials.AnyCopper), 'B', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HV_Boxinator.get(1L), - bitsd, - new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_HV, 'R', ItemList.Robot_Arm_HV, 'V', - ItemList.Conveyor_Module_HV, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', - OrePrefixes.cableGt01.get(Materials.Gold), 'B', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_EV_Boxinator.get(1L), - bitsd, - new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_EV, 'R', ItemList.Robot_Arm_EV, 'V', - ItemList.Conveyor_Module_EV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', - OrePrefixes.cableGt01.get(Materials.Aluminium), 'B', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_IV_Boxinator.get(1L), - bitsd, - new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_IV, 'R', ItemList.Robot_Arm_IV, 'V', - ItemList.Conveyor_Module_IV, 'C', OrePrefixes.circuit.get(Materials.IV), 'W', - OrePrefixes.cableGt01.get(Materials.Tungsten), 'B', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_LuV_Boxinator.get(1L), - bitsd, - new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_LuV, 'R', ItemList.Robot_Arm_LuV, 'V', - ItemList.Conveyor_Module_LuV, 'C', OrePrefixes.circuit.get(Materials.LuV), 'W', - OrePrefixes.cableGt01.get(Materials.VanadiumGallium), 'B', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_ZPM_Boxinator.get(1L), - bitsd, - new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_ZPM, 'R', ItemList.Robot_Arm_ZPM, 'V', - ItemList.Conveyor_Module_ZPM, 'C', OrePrefixes.circuit.get(Materials.ZPM), 'W', - OrePrefixes.cableGt01.get(Materials.Naquadah), 'B', OreDictNames.craftingChest }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_UV_Boxinator.get(1L), - bitsd, - new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_UV, 'R', ItemList.Robot_Arm_UV, 'V', - ItemList.Conveyor_Module_UV, 'C', OrePrefixes.circuit.get(Materials.UV), 'W', - OrePrefixes.cableGt01.get(Materials.NaquadahAlloy), 'B', OreDictNames.craftingChest }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_LV_RockBreaker.get(1L), - bitsd, - new Object[] { "PED", aTextWireHull, "GGG", 'M', ItemList.Hull_LV, 'D', OreDictNames.craftingGrinder, 'E', - ItemList.Electric_Motor_LV, 'P', ItemList.Electric_Piston_LV, 'C', - OrePrefixes.circuit.get(Materials.LV), 'W', OrePrefixes.cableGt01.get(Materials.Tin), 'G', - new ItemStack(Blocks.glass, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_MV_RockBreaker.get(1L), - bitsd, - new Object[] { "PED", aTextWireHull, "GGG", 'M', ItemList.Hull_MV, 'D', OreDictNames.craftingGrinder, 'E', - ItemList.Electric_Motor_MV, 'P', ItemList.Electric_Piston_MV, 'C', - OrePrefixes.circuit.get(Materials.MV), 'W', OrePrefixes.cableGt01.get(Materials.AnyCopper), 'G', - new ItemStack(Blocks.glass, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HV_RockBreaker.get(1L), - bitsd, - new Object[] { "PED", aTextWireHull, "GGG", 'M', ItemList.Hull_HV, 'D', OreDictNames.craftingGrinder, 'E', - ItemList.Electric_Motor_HV, 'P', ItemList.Electric_Piston_HV, 'C', - OrePrefixes.circuit.get(Materials.HV), 'W', OrePrefixes.cableGt01.get(Materials.Gold), 'G', - new ItemStack(Blocks.glass, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_EV_RockBreaker.get(1L), - bitsd, - new Object[] { "PED", aTextWireHull, "GGG", 'M', ItemList.Hull_EV, 'D', OreDictNames.craftingGrinder, 'E', - ItemList.Electric_Motor_EV, 'P', ItemList.Electric_Piston_EV, 'C', - OrePrefixes.circuit.get(Materials.EV), 'W', OrePrefixes.cableGt01.get(Materials.Aluminium), 'G', - new ItemStack(Blocks.glass, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_IV_RockBreaker.get(1L), - bitsd, - new Object[] { "PED", aTextWireHull, "GGG", 'M', ItemList.Hull_IV, 'D', OreDictNames.craftingGrinder, 'E', - ItemList.Electric_Motor_IV, 'P', ItemList.Electric_Piston_IV, 'C', - OrePrefixes.circuit.get(Materials.IV), 'W', OrePrefixes.cableGt01.get(Materials.Tungsten), 'G', - new ItemStack(Blocks.glass, 1) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_LV_Massfab.get(1L), - bitsd, - new Object[] { "CFC", aTextWireHull, "CFC", 'M', ItemList.Hull_LV, 'F', ItemList.Field_Generator_LV, 'C', - OrePrefixes.circuit.get(Materials.MV), 'W', OrePrefixes.cableGt04.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_MV_Massfab.get(1L), - bitsd, - new Object[] { "CFC", aTextWireHull, "CFC", 'M', ItemList.Hull_MV, 'F', ItemList.Field_Generator_MV, 'C', - OrePrefixes.circuit.get(Materials.HV), 'W', OrePrefixes.cableGt04.get(Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HV_Massfab.get(1L), - bitsd, - new Object[] { "CFC", aTextWireHull, "CFC", 'M', ItemList.Hull_HV, 'F', ItemList.Field_Generator_HV, 'C', - OrePrefixes.circuit.get(Materials.EV), 'W', OrePrefixes.cableGt04.get(Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_EV_Massfab.get(1L), - bitsd, - new Object[] { "CFC", aTextWireHull, "CFC", 'M', ItemList.Hull_EV, 'F', ItemList.Field_Generator_EV, 'C', - OrePrefixes.circuit.get(Materials.IV), 'W', OrePrefixes.cableGt04.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_IV_Massfab.get(1L), - bitsd, - new Object[] { "CFC", aTextWireHull, "CFC", 'M', ItemList.Hull_IV, 'F', ItemList.Field_Generator_IV, 'C', - OrePrefixes.circuit.get(Materials.LuV), 'W', OrePrefixes.cableGt04.get(Materials.Tungsten) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_LV_Replicator.get(1L), - bitsd, - new Object[] { "EFE", aTextCableHull, aTextMotorWire, 'M', ItemList.Hull_LV, 'F', - ItemList.Field_Generator_LV, 'E', ItemList.Emitter_LV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', - OrePrefixes.cableGt04.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_MV_Replicator.get(1L), - bitsd, - new Object[] { "EFE", aTextCableHull, aTextMotorWire, 'M', ItemList.Hull_MV, 'F', - ItemList.Field_Generator_MV, 'E', ItemList.Emitter_MV, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', - OrePrefixes.cableGt04.get(Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HV_Replicator.get(1L), - bitsd, - new Object[] { "EFE", aTextCableHull, aTextMotorWire, 'M', ItemList.Hull_HV, 'F', - ItemList.Field_Generator_HV, 'E', ItemList.Emitter_HV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', - OrePrefixes.cableGt04.get(Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_EV_Replicator.get(1L), - bitsd, - new Object[] { "EFE", aTextCableHull, aTextMotorWire, 'M', ItemList.Hull_EV, 'F', - ItemList.Field_Generator_EV, 'E', ItemList.Emitter_EV, 'C', OrePrefixes.circuit.get(Materials.IV), 'W', - OrePrefixes.cableGt04.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_IV_Replicator.get(1L), - bitsd, - new Object[] { "EFE", aTextCableHull, aTextMotorWire, 'M', ItemList.Hull_IV, 'F', - ItemList.Field_Generator_IV, 'E', ItemList.Emitter_IV, 'C', OrePrefixes.circuit.get(Materials.LuV), 'W', - OrePrefixes.cableGt04.get(Materials.Tungsten) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_LV_Brewery.get(1L), - bitsd, - new Object[] { "GPG", aTextWireHull, "CBC", 'M', ItemList.Hull_LV, 'P', ItemList.Electric_Pump_LV, 'B', - new ItemStack(Items.brewing_stand, 0), 'C', OrePrefixes.circuit.get(Materials.LV), 'W', - OrePrefixes.cableGt01.get(Materials.Tin), 'G', new ItemStack(Blocks.glass, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_MV_Brewery.get(1L), - bitsd, - new Object[] { "GPG", aTextWireHull, "CBC", 'M', ItemList.Hull_MV, 'P', ItemList.Electric_Pump_MV, 'B', - new ItemStack(Items.brewing_stand, 0), 'C', OrePrefixes.circuit.get(Materials.MV), 'W', - OrePrefixes.cableGt01.get(Materials.AnyCopper), 'G', new ItemStack(Blocks.glass, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HV_Brewery.get(1L), - bitsd, - new Object[] { "GPG", aTextWireHull, "CBC", 'M', ItemList.Hull_HV, 'P', ItemList.Electric_Pump_HV, 'B', - new ItemStack(Items.brewing_stand, 0), 'C', OrePrefixes.circuit.get(Materials.HV), 'W', - OrePrefixes.cableGt01.get(Materials.Gold), 'G', new ItemStack(Blocks.glass, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_EV_Brewery.get(1L), - bitsd, - new Object[] { "GPG", aTextWireHull, "CBC", 'M', ItemList.Hull_EV, 'P', ItemList.Electric_Pump_EV, 'B', - new ItemStack(Items.brewing_stand, 0), 'C', OrePrefixes.circuit.get(Materials.EV), 'W', - OrePrefixes.cableGt01.get(Materials.Aluminium), 'G', new ItemStack(Blocks.glass, 1) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_IV_Brewery.get(1L), - bitsd, - new Object[] { "GPG", aTextWireHull, "CBC", 'M', ItemList.Hull_IV, 'P', ItemList.Electric_Pump_IV, 'B', - new ItemStack(Items.brewing_stand, 0), 'C', OrePrefixes.circuit.get(Materials.IV), 'W', - OrePrefixes.cableGt01.get(Materials.Tungsten), 'G', new ItemStack(Blocks.glass, 1) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_LV_Miner.get(1L), - bitsd, - new Object[] { "EEE", aTextWireHull, "CSC", 'M', ItemList.Hull_LV, 'E', ItemList.Electric_Motor_LV, 'C', - OrePrefixes.circuit.get(Materials.LV), 'W', OrePrefixes.cableGt01.get(Materials.Tin), 'S', - ItemList.Sensor_LV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_MV_Miner.get(1L), - bitsd, - new Object[] { "PEP", aTextWireHull, "CSC", 'M', ItemList.Hull_MV, 'E', ItemList.Electric_Motor_MV, 'P', - ItemList.Electric_Piston_MV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', - OrePrefixes.cableGt02.get(Materials.Copper), 'S', ItemList.Sensor_MV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HV_Miner.get(1L), - bitsd, - new Object[] { "RPR", aTextWireHull, "CSC", 'M', ItemList.Hull_HV, 'E', ItemList.Electric_Motor_HV, 'P', - ItemList.Electric_Piston_HV, 'R', ItemList.Robot_Arm_HV, 'C', OrePrefixes.circuit.get(Materials.HV), - 'W', OrePrefixes.cableGt04.get(Materials.Gold), 'S', ItemList.Sensor_HV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_BlastFurnace.get(1L), - bitsd, - new Object[] { "FFF", aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_HeatProof, 'F', - OreDictNames.craftingIronFurnace, 'C', OrePrefixes.circuit.get(Materials.LV), 'W', - OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_VacuumFreezer.get(1L), - bitsd, - new Object[] { aTextPlate, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_FrostProof, 'P', - ItemList.Electric_Pump_HV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', - OrePrefixes.cableGt01.get(Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_ImplosionCompressor.get(1L), - bitsd, - new Object[] { "OOO", aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_SolidSteel, 'O', - Ic2Items.reinforcedStone, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', - OrePrefixes.cableGt01.get(Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_Furnace.get(1L), - bitsd, - new Object[] { "FFF", aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_HeatProof, 'F', - OreDictNames.craftingIronFurnace, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', - OrePrefixes.cableGt01.get(Materials.AnnealedCopper) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_LargeBoiler_Bronze.get(1L), - bitsd, - new Object[] { aTextWireCoil, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_Firebox_Bronze, 'C', - OrePrefixes.circuit.get(Materials.MV), 'W', OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_LargeBoiler_Steel.get(1L), - bitsd, - new Object[] { aTextWireCoil, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_Firebox_Steel, 'C', - OrePrefixes.circuit.get(Materials.HV), 'W', OrePrefixes.cableGt01.get(Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_LargeBoiler_Titanium.get(1L), - bitsd, - new Object[] { aTextWireCoil, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_Firebox_Titanium, 'C', - OrePrefixes.circuit.get(Materials.EV), 'W', OrePrefixes.cableGt01.get(Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_LargeBoiler_TungstenSteel.get(1L), - bitsd, - new Object[] { aTextWireCoil, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_Firebox_TungstenSteel, - 'C', OrePrefixes.circuit.get(Materials.IV), 'W', OrePrefixes.cableGt01.get(Materials.Aluminium) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Diesel_LV.get(1L), - bitsd, - new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_LV, 'P', ItemList.Electric_Piston_LV, 'E', - ItemList.Electric_Motor_LV, 'C', OrePrefixes.circuit.get(Materials.LV), 'W', - OrePrefixes.cableGt01.get(Materials.Tin), 'G', OrePrefixes.gearGt.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Diesel_MV.get(1L), - bitsd, - new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_MV, 'P', ItemList.Electric_Piston_MV, 'E', - ItemList.Electric_Motor_MV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', - OrePrefixes.cableGt01.get(Materials.AnyCopper), 'G', OrePrefixes.gearGt.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Diesel_HV.get(1L), - bitsd, - new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_HV, 'P', ItemList.Electric_Piston_HV, 'E', - ItemList.Electric_Motor_HV, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', - OrePrefixes.cableGt01.get(Materials.Gold), 'G', OrePrefixes.gearGt.get(Materials.StainlessSteel) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Gas_Turbine_LV.get(1L), - bitsd, - new Object[] { "CRC", "RMR", aTextMotorWire, 'M', ItemList.Hull_LV, 'E', ItemList.Electric_Motor_LV, 'R', - OrePrefixes.rotor.get(Materials.Tin), 'C', OrePrefixes.circuit.get(Materials.LV), 'W', - OrePrefixes.cableGt01.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Gas_Turbine_MV.get(1L), - bitsd, - new Object[] { "CRC", "RMR", aTextMotorWire, 'M', ItemList.Hull_MV, 'E', ItemList.Electric_Motor_MV, 'R', - OrePrefixes.rotor.get(Materials.Bronze), 'C', OrePrefixes.circuit.get(Materials.MV), 'W', - OrePrefixes.cableGt01.get(Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Gas_Turbine_HV.get(1L), - bitsd, - new Object[] { "CRC", "RMR", aTextMotorWire, 'M', ItemList.Hull_HV, 'E', ItemList.Electric_Motor_HV, 'R', - OrePrefixes.rotor.get(Materials.Steel), 'C', OrePrefixes.circuit.get(Materials.HV), 'W', - OrePrefixes.cableGt01.get(Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Gas_Turbine_EV.get(1L), - bitsd, - new Object[] { "CRC", "RMR", aTextMotorWire, 'M', ItemList.Hull_EV, 'E', ItemList.Electric_Motor_EV, 'R', - OrePrefixes.rotor.get(Materials.Titanium), 'C', OrePrefixes.circuit.get(Materials.EV), 'W', - OrePrefixes.cableGt01.get(Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Gas_Turbine_IV.get(1L), - bitsd, - new Object[] { "CRC", "RMR", aTextMotorWire, 'M', ItemList.Hull_IV, 'E', ItemList.Electric_Motor_IV, 'R', - OrePrefixes.rotor.get(Materials.TungstenSteel), 'C', OrePrefixes.circuit.get(Materials.IV), 'W', - OrePrefixes.cableGt01.get(Materials.Tungsten) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Steam_Turbine_LV.get(1L), - bitsd, - new Object[] { "PCP", "RMR", aTextMotorWire, 'M', ItemList.Hull_LV, 'E', ItemList.Electric_Motor_LV, 'R', - OrePrefixes.rotor.get(Materials.Tin), 'C', OrePrefixes.circuit.get(Materials.LV), 'W', - OrePrefixes.cableGt01.get(Materials.Tin), 'P', OrePrefixes.pipeMedium.get(Materials.Bronze) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Steam_Turbine_MV.get(1L), - bitsd, - new Object[] { "PCP", "RMR", aTextMotorWire, 'M', ItemList.Hull_MV, 'E', ItemList.Electric_Motor_MV, 'R', - OrePrefixes.rotor.get(Materials.Bronze), 'C', OrePrefixes.circuit.get(Materials.MV), 'W', - OrePrefixes.cableGt01.get(Materials.AnyCopper), 'P', OrePrefixes.pipeMedium.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Steam_Turbine_HV.get(1L), - bitsd, - new Object[] { "PCP", "RMR", aTextMotorWire, 'M', ItemList.Hull_HV, 'E', ItemList.Electric_Motor_HV, 'R', - OrePrefixes.rotor.get(Materials.Steel), 'C', OrePrefixes.circuit.get(Materials.HV), 'W', - OrePrefixes.cableGt01.get(Materials.Gold), 'P', OrePrefixes.pipeMedium.get(Materials.StainlessSteel) }); - - if (!Thaumcraft.isModLoaded()) { - GT_ModHandler.addCraftingRecipe( - ItemList.MagicEnergyConverter_LV.get(1L), - bitsd, - new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_LV, 'B', new ItemStack(Blocks.beacon), 'C', - OrePrefixes.circuit.get(Materials.HV), 'T', ItemList.Field_Generator_LV, 'F', - OrePrefixes.plate.get(Materials.Platinum) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MagicEnergyConverter_MV.get(1L), - bitsd, - new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_MV, 'B', new ItemStack(Blocks.beacon), 'C', - OrePrefixes.circuit.get(Materials.EV), 'T', ItemList.Field_Generator_MV, 'F', - OrePrefixes.plate.get(Materials.Iridium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MagicEnergyConverter_HV.get(1L), - bitsd, - new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_HV, 'B', new ItemStack(Blocks.beacon), 'C', - OrePrefixes.circuit.get(Materials.IV), 'T', ItemList.Field_Generator_HV, 'F', - OrePrefixes.plate.get(Materials.Neutronium) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.MagicEnergyAbsorber_LV.get(1L), - bitsd, - new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_LV, 'B', - ItemList.MagicEnergyConverter_LV.get(1L), 'C', OrePrefixes.circuit.get(Materials.HV), 'T', - ItemList.Field_Generator_LV, 'F', OrePrefixes.plate.get(Materials.Platinum) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MagicEnergyAbsorber_MV.get(1L), - bitsd, - new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_MV, 'B', - ItemList.MagicEnergyConverter_MV.get(1L), 'C', OrePrefixes.circuit.get(Materials.EV), 'T', - ItemList.Field_Generator_MV, 'F', OrePrefixes.plate.get(Materials.Iridium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MagicEnergyAbsorber_HV.get(1L), - bitsd, - new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_HV, 'B', - ItemList.MagicEnergyConverter_MV.get(1L), 'C', OrePrefixes.circuit.get(Materials.IV), 'T', - ItemList.Field_Generator_HV, 'F', OrePrefixes.plate.get(Materials.Europium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MagicEnergyAbsorber_EV.get(1L), - bitsd, - new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_HV, 'B', - ItemList.MagicEnergyConverter_HV.get(1L), 'C', OrePrefixes.circuit.get(Materials.LuV), 'T', - ItemList.Field_Generator_EV, 'F', OrePrefixes.plate.get(Materials.Neutronium) }); - } - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_Fusion_Coil.get(1L), - bitsd, - new Object[] { "CTC", "FMF", "CTC", 'M', ItemList.Casing_Coil_Superconductor, 'C', - OrePrefixes.circuit.get(Materials.LuV), 'F', ItemList.Field_Generator_MV, 'T', - ItemList.Neutron_Reflector }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Plasma_EV.get(1L), - bitsd, - new Object[] { "UCU", "FMF", aTextWireCoil, 'M', ItemList.Hull_LuV, 'F', ItemList.Field_Generator_HV, 'C', - OrePrefixes.circuit.get(Materials.IV), 'W', OrePrefixes.cableGt04.get(Materials.Tungsten), 'U', - OrePrefixes.stick.get(Materials.Plutonium241) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Plasma_IV.get(1L), - bitsd, - new Object[] { "UCU", "FMF", aTextWireCoil, 'M', ItemList.Hull_ZPM, 'F', ItemList.Field_Generator_EV, 'C', - OrePrefixes.circuit.get(Materials.LuV), 'W', OrePrefixes.wireGt04.get(Materials.VanadiumGallium), 'U', - OrePrefixes.stick.get(Materials.Europium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Generator_Plasma_LuV.get(1L), - bitsd, - new Object[] { "UCU", "FMF", aTextWireCoil, 'M', ItemList.Hull_UV, 'F', ItemList.Field_Generator_IV, 'C', - OrePrefixes.circuit.get(Materials.ZPM), 'W', OrePrefixes.wireGt04.get(Materials.Naquadah), 'U', - OrePrefixes.stick.get(Materials.Americium) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Processing_Array.get(1L), - bitsd, - new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_EV, 'B', - OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.IV), 'F', - ItemList.Robot_Arm_EV, 'T', ItemList.Energy_LapotronicOrb }); - - GT_ProcessingArrayRecipeLoader.registerDefaultGregtechMaps(); - GT_ModHandler.addCraftingRecipe( - ItemList.Distillation_Tower.get(1L), - bitsd, - new Object[] { "CBC", "FMF", "CBC", 'M', ItemList.Hull_HV, 'B', - OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.EV), 'F', - ItemList.Electric_Pump_HV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.LargeSteamTurbine.get(1L), - bitsd, - new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_HV, 'B', - OrePrefixes.pipeLarge.get(Materials.Steel), 'C', OrePrefixes.circuit.get(Materials.HV), 'P', - OrePrefixes.gearGt.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.LargeGasTurbine.get(1L), - bitsd, - new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_EV, 'B', - OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.EV), 'P', - OrePrefixes.gearGt.get(Materials.StainlessSteel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.LargeAdvancedGasTurbine.get(1L), - bitsd, - new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_IV, 'B', - OrePrefixes.pipeLarge.get(Materials.TungstenSteel), 'C', OrePrefixes.circuit.get(Materials.LuV), 'P', - OrePrefixes.gearGt.get(Materials.HSSG) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Pump_LV.get(1L), - bitsd, - new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_LV, 'B', - OrePrefixes.pipeLarge.get(Materials.Bronze), 'C', OrePrefixes.circuit.get(Materials.LV), 'P', - ItemList.Electric_Pump_LV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Pump_MV.get(1L), - bitsd, - new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_MV, 'B', - OrePrefixes.pipeLarge.get(Materials.Steel), 'C', OrePrefixes.circuit.get(Materials.MV), 'P', - ItemList.Electric_Pump_MV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Pump_HV.get(1L), - bitsd, - new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_HV, 'B', - OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.HV), 'P', - ItemList.Electric_Pump_HV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Pump_EV.get(1L), - bitsd, - new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_EV, 'B', - OrePrefixes.pipeLarge.get(Materials.Titanium), 'C', OrePrefixes.circuit.get(Materials.EV), 'P', - ItemList.Electric_Pump_EV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Pump_IV.get(1L), - bitsd, - new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_IV, 'B', - OrePrefixes.pipeLarge.get(Materials.TungstenSteel), 'C', OrePrefixes.circuit.get(Materials.IV), 'P', - ItemList.Electric_Pump_IV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.MobRep_LV.get(1L), - bitsd, - new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_LV, 'E', ItemList.Emitter_LV.get(1L), 'C', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MobRep_MV.get(1L), - bitsd, - new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_MV, 'E', ItemList.Emitter_MV.get(1L), 'C', - OrePrefixes.circuit.get(Materials.MV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MobRep_HV.get(1L), - bitsd, - new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_HV, 'E', ItemList.Emitter_HV.get(1L), 'C', - OrePrefixes.circuit.get(Materials.HV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MobRep_EV.get(1L), - bitsd, - new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_EV, 'E', ItemList.Emitter_EV.get(1L), 'C', - OrePrefixes.circuit.get(Materials.EV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MobRep_IV.get(1L), - bitsd, - new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_IV, 'E', ItemList.Emitter_IV.get(1L), 'C', - OrePrefixes.circuit.get(Materials.IV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MobRep_LuV.get(1L), - bitsd, - new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_LuV, 'E', ItemList.Emitter_LuV.get(1L), 'C', - OrePrefixes.circuit.get(Materials.LuV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MobRep_ZPM.get(1L), - bitsd, - new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_ZPM, 'E', ItemList.Emitter_ZPM.get(1L), 'C', - OrePrefixes.circuit.get(Materials.ZPM) }); - GT_ModHandler.addCraftingRecipe( - ItemList.MobRep_UV.get(1L), - bitsd, - new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_UV, 'E', ItemList.Emitter_UV.get(1L), 'C', - OrePrefixes.circuit.get(Materials.UV) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_HeatExchanger.get(1L), - bitsd, - new Object[] { aTextWireCoil, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_Pipe_Titanium, 'C', - OrePrefixes.pipeMedium.get(Materials.Titanium), 'W', ItemList.Electric_Pump_EV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Charcoal_Pile.get(1L), - bitsd, - new Object[] { "EXE", "EME", "hCw", 'M', ItemList.Hull_HP_Bricks, 'E', - OrePrefixes.plate.get(Materials.AnyBronze), 'C', new ItemStack(Items.flint_and_steel, 1), 'X', - OrePrefixes.rotor.get(Materials.Steel), }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Seismic_Prospector_Adv_LV.get(1L), - bitsd, - new Object[] { "WWW", "EME", "CXC", 'M', ItemList.Hull_LV, 'W', - OrePrefixes.plateDouble.get(Materials.Steel), 'E', OrePrefixes.circuit.get(Materials.LV), 'C', - ItemList.Sensor_LV, 'X', OrePrefixes.cableGt02.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Seismic_Prospector_Adv_MV.get(1L), - bitsd, - new Object[] { "WWW", "EME", "CXC", 'M', ItemList.Hull_MV, 'W', - OrePrefixes.plateDouble.get(Materials.BlackSteel), 'E', OrePrefixes.circuit.get(Materials.MV), 'C', - ItemList.Sensor_MV, 'X', OrePrefixes.cableGt02.get(Materials.Copper) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Seismic_Prospector_Adv_HV.get(1L), - bitsd, - new Object[] { "WWW", "EME", "CXC", 'M', ItemList.Hull_HV, 'W', - OrePrefixes.plateDouble.get(Materials.StainlessSteel), 'E', OrePrefixes.circuit.get(Materials.HV), 'C', - ItemList.Sensor_HV, 'X', OrePrefixes.cableGt04.get(Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Seismic_Prospector_Adv_EV.get(1L), - bitsd, - new Object[] { "WWW", "EME", "CXC", 'M', ItemList.Hull_EV, 'W', - OrePrefixes.plateDouble.get(Materials.VanadiumSteel), 'E', OrePrefixes.circuit.get(Materials.EV), 'C', - ItemList.Sensor_EV, 'X', OrePrefixes.cableGt04.get(Materials.Aluminium) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.ConcreteBackfiller1.get(1L), - bitsd, - new Object[] { "WPW", "EME", "CQC", 'M', ItemList.Hull_MV, 'W', OrePrefixes.frameGt.get(Materials.Steel), - 'E', OrePrefixes.circuit.get(Materials.MV), 'C', ItemList.Electric_Motor_MV, 'P', - OrePrefixes.pipeLarge.get(Materials.Steel), 'Q', ItemList.Electric_Pump_MV }); - GT_ModHandler.addCraftingRecipe( - ItemList.ConcreteBackfiller2.get(1L), - bitsd, - new Object[] { "WPW", "EME", "CQC", 'M', ItemList.ConcreteBackfiller1, 'W', - OrePrefixes.frameGt.get(Materials.Titanium), 'E', OrePrefixes.circuit.get(Materials.EV), 'C', - ItemList.Electric_Motor_EV, 'P', OrePrefixes.pipeLarge.get(Materials.Steel), 'Q', - ItemList.Electric_Pump_EV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.PyrolyseOven.get(1L), - bitsd, - new Object[] { "WEP", "EME", "WCP", 'M', ItemList.Hull_MV, 'W', ItemList.Electric_Piston_MV, 'P', - OrePrefixes.wireGt04.get(Materials.Cupronickel), 'E', OrePrefixes.circuit.get(Materials.MV), 'C', - ItemList.Electric_Pump_MV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.OilCracker.get(1L), - bitsd, - new Object[] { aTextWireCoil, "EME", aTextWireCoil, 'M', ItemList.Hull_HV, 'W', - ItemList.Casing_Coil_Cupronickel, 'E', OrePrefixes.circuit.get(Materials.HV), 'C', - ItemList.Electric_Pump_HV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.MicroTransmitter_HV.get(1L), - bitsd, - new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_HV, 'B', ItemList.Battery_RE_HV_Lithium, - 'C', ItemList.Emitter_HV, 'G', OrePrefixes.circuit.get(Materials.HV), 'P', - ItemList.Field_Generator_HV }); - GT_ModHandler.addCraftingRecipe( - ItemList.MicroTransmitter_EV.get(1L), - bitsd, - new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_EV, 'B', - GT_ModHandler.getIC2Item("lapotronCrystal", 1L, GT_Values.W), 'C', ItemList.Emitter_EV, 'G', - OrePrefixes.circuit.get(Materials.EV), 'P', ItemList.Field_Generator_EV }); - GT_ModHandler.addCraftingRecipe( - ItemList.MicroTransmitter_IV.get(1L), - bitsd, - new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_IV, 'B', ItemList.Energy_LapotronicOrb, 'C', - ItemList.Emitter_IV, 'G', OrePrefixes.circuit.get(Materials.IV), 'P', ItemList.Field_Generator_IV }); - GT_ModHandler.addCraftingRecipe( - ItemList.MicroTransmitter_LUV.get(1L), - bitsd, - new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_LuV, 'B', ItemList.Energy_LapotronicOrb2, - 'C', ItemList.Emitter_LuV, 'G', OrePrefixes.circuit.get(Materials.LuV), 'P', - ItemList.Field_Generator_LuV }); - GT_ModHandler.addCraftingRecipe( - ItemList.MicroTransmitter_ZPM.get(1L), - bitsd, - new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_ZPM, 'B', ItemList.Energy_Module, 'C', - ItemList.Emitter_ZPM, 'G', OrePrefixes.circuit.get(Materials.ZPM), 'P', ItemList.Field_Generator_ZPM }); - GT_ModHandler.addCraftingRecipe( - ItemList.MicroTransmitter_UV.get(1L), - bitsd, - new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_UV, 'B', ItemList.Energy_Module, 'C', - ItemList.Emitter_UV, 'G', OrePrefixes.circuit.get(Materials.UV), 'P', ItemList.Field_Generator_UV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_Assemblyline.get(1L), - bitsd, - new Object[] { aTextWireCoil, "EME", aTextWireCoil, 'M', ItemList.Hull_IV, 'W', ItemList.Casing_Assembler, - 'E', OrePrefixes.circuit.get(Materials.IV), 'C', ItemList.Robot_Arm_IV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_DieselEngine.get(1L), - bitsd, - new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_EV, 'P', ItemList.Electric_Piston_EV, 'E', - ItemList.Electric_Motor_EV, 'C', OrePrefixes.circuit.get(Materials.IV), 'W', - OrePrefixes.cableGt01.get(Materials.TungstenSteel), 'G', OrePrefixes.gearGt.get(Materials.Titanium) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_EngineIntake.get(4L), - bitsd, - new Object[] { "PhP", "RFR", aTextPlateWrench, 'R', OrePrefixes.pipeMedium.get(Materials.Titanium), 'F', - ItemList.Casing_StableTitanium, 'P', OrePrefixes.rotor.get(Materials.Titanium) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_ExtremeDieselEngine.get(1L), - bitsd, - new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_IV, 'P', ItemList.Electric_Piston_IV, 'E', - ItemList.Electric_Motor_IV, 'C', OrePrefixes.circuit.get(Materials.LuV), 'W', - OrePrefixes.cableGt01.get(Materials.HSSG), 'G', OrePrefixes.gearGt.get(Materials.TungstenSteel) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Casing_ExtremeEngineIntake.get(4L), - bitsd, - new Object[] { "PhP", "RFR", aTextPlateWrench, 'R', OrePrefixes.pipeMedium.get(Materials.TungstenSteel), - 'F', ItemList.Casing_RobustTungstenSteel, 'P', OrePrefixes.rotor.get(Materials.TungstenSteel) }); - - // If Cleanroom is enabled, add a recipe, else hide from NEI. - if (GT_Mod.gregtechproxy.mEnableCleanroom) { - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_Cleanroom.get(1L), - bitsd, - new Object[] { "FFF", "RHR", "MCM", 'H', ItemList.Hull_HV, 'F', ItemList.Component_Filter, 'R', - OrePrefixes.rotor.get(Materials.StainlessSteel), 'M', ItemList.Electric_Motor_HV, 'C', - OrePrefixes.circuit.get(Materials.HV) }); - } else { - if (NotEnoughItems.isModLoaded()) { - API.hideItem(ItemList.Machine_Multi_Cleanroom.get(1L)); - } - } - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_HV_LightningRod.get(1L), - bitsd, - new Object[] { "LTL", "TMT", "LTL", 'M', ItemList.Hull_LuV, 'L', ItemList.Energy_LapotronicOrb, 'T', - ItemList.Transformer_ZPM_LuV }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_EV_LightningRod.get(1L), - bitsd, - new Object[] { "LTL", "TMT", "LTL", 'M', ItemList.Hull_ZPM, 'L', ItemList.Energy_LapotronicOrb2, 'T', - ItemList.Transformer_UV_ZPM }); - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_IV_LightningRod.get(1L), - bitsd, - new Object[] { "LTL", "TMT", "LTL", 'M', ItemList.Hull_UV, 'L', ItemList.ZPM2, 'T', - ItemList.Transformer_MAX_UV }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Machine_Multi_LargeChemicalReactor.get(1L), - bitsd, - new Object[] { "CRC", "PMP", "CBC", 'C', OrePrefixes.circuit.get(Materials.HV), 'R', - OrePrefixes.rotor.get(Materials.StainlessSteel), 'P', - OrePrefixes.pipeLarge.get(Materials.Polytetrafluoroethylene), 'M', ItemList.Electric_Motor_HV, 'B', - ItemList.Hull_HV }); - - // Add Drone down link hatch - GT_ModHandler.addCraftingRecipe( - ItemList.Hatch_DroneDownLink.get(1L), - bits, - new Object[] { " S ", "CMC", "RRR", 'M', ItemList.Hatch_Maintenance, 'S', ItemList.Sensor_IV, 'R', - new ItemStack(GregTech_API.sBlockReinforced, 1, 9), 'C', ItemList.Conveyor_Module_EV }); - - // And Drone Centre - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_Assembler.get(1), - ItemList.Cover_SolarPanel_HV.get(4), - ItemList.Conveyor_Module_IV.get(2), - ItemList.Robot_Arm_IV.get(2), - ItemList.Sensor_IV.get(2), - ItemList.Energy_LapotronicOrb.get(4), - ItemList.Cover_WirelessNeedsMaintainance.get(1), - GalacticraftCore.isModLoaded() ? GT_ModHandler.getModItem(GalacticraftCore.ID, "item.basicItem", 1, 19) - : ItemList.Sensor_EV.get(4)) - .itemOutputs(ItemList.Machine_Multi_DroneCentre.get(1L)) - .fluidInputs(Materials.AdvancedGlue.getFluid(8000L)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - } - - private static void registerShapelessCraftingRecipes() { - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Casing_SolidSteel.get(1L), - bits, - new Object[] { ItemList.Casing_Stripes_A }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Casing_SolidSteel.get(1L), - bits, - new Object[] { ItemList.Casing_Stripes_B }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Casing_SolidSteel.get(1L), - bits, - new Object[] { ItemList.Casing_RadioactiveHazard }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Casing_SolidSteel.get(1L), - bits, - new Object[] { ItemList.Casing_BioHazard }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Casing_SolidSteel.get(1L), - bits, - new Object[] { ItemList.Casing_ExplosionHazard }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Casing_SolidSteel.get(1L), - bits, - new Object[] { ItemList.Casing_FireHazard }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Casing_SolidSteel.get(1L), - bits, - new Object[] { ItemList.Casing_AcidHazard }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Casing_SolidSteel.get(1L), - bits, - new Object[] { ItemList.Casing_MagicHazard }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Casing_SolidSteel.get(1L), - bits, - new Object[] { ItemList.Casing_FrostHazard }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Casing_SolidSteel.get(1L), - bits, - new Object[] { ItemList.Casing_NoiseHazard }); - - if (Forestry.isModLoaded() && Gendustry.isModLoaded()) { - /* Conversion recipes */ - // TODO: Move those recipes with the other recipes - - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.Machine_IndustrialApiary.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "IndustrialApiary", 1, 0) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_Frame.get(1), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "UpgradeFrame", 1) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_PRODUCTION.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 0) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_PLAINS.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 17) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_LIGHT.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 11) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_FLOWERING.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 2) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_WINTER.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 20) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_DRYER.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 5) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_AUTOMATION.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 14) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_HUMIDIFIER.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 4) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_HELL.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 13) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_POLLEN.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 22) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_DESERT.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 16) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_COOLER.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 7) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_LIFESPAN.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 1) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_SEAL.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 10) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_STABILIZER.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 19) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_JUNGLE.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 18) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_TERRITORY.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 3) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_OCEAN.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 21) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_SKY.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 12) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_HEATER.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 6) }); - GT_ModHandler.addShapelessCraftingRecipe( - ItemList.IndustrialApiary_Upgrade_SIEVE.get(1L), - new Object[] { GT_ModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 15) }); - - } - } - - private static void run4() { - long bits = GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED; - - // high pressure fluid pipes - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.TungstenSteel, 1L), - ItemList.Electric_Pump_EV.get(1L), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.Ultimate, 1L)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.TungstenSteel, 1L), - ItemList.Electric_Pump_IV.get(1L), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Ultimate, 1L)) - .duration(20 * SECONDS) - .eut(4096) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.TungstenSteel, 1L), - ItemList.Electric_Pump_IV.get(2L), - GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Ultimate, 1L)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ChestBuffer_ULV.get(1L), - bits, - new Object[] { "CMV", " X ", 'M', ItemList.Hull_ULV, 'V', ItemList.Conveyor_Module_LV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.ULV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ChestBuffer_LV.get(1L), - bits, - new Object[] { "CMV", " X ", 'M', ItemList.Hull_LV, 'V', ItemList.Conveyor_Module_LV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ChestBuffer_MV.get(1L), - bits, - new Object[] { "CMV", " X ", 'M', ItemList.Hull_MV, 'V', ItemList.Conveyor_Module_MV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.MV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ChestBuffer_HV.get(1L), - bits, - new Object[] { "CMV", " X ", 'M', ItemList.Hull_HV, 'V', ItemList.Conveyor_Module_HV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.HV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ChestBuffer_EV.get(1L), - bits, - new Object[] { "CMV", " X ", 'M', ItemList.Hull_EV, 'V', ItemList.Conveyor_Module_EV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.EV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ChestBuffer_IV.get(1L), - bits, - new Object[] { "CMV", " X ", 'M', ItemList.Hull_IV, 'V', ItemList.Conveyor_Module_IV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.IV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ChestBuffer_LuV.get(1L), - bits, - new Object[] { "CMV", " X ", 'M', ItemList.Hull_LuV, 'V', ItemList.Conveyor_Module_LuV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LuV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ChestBuffer_ZPM.get(1L), - bits, - new Object[] { "CMV", " X ", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.ZPM) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ChestBuffer_UV.get(1L), - bits, - new Object[] { "CMV", " X ", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.UV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ChestBuffer_UHV.get(1L), - bits, - new Object[] { "CMV", " X ", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UHV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.UHV) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Filter_ULV.get(1L), - bits, - new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_ULV, 'V', ItemList.Conveyor_Module_LV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Filter_LV.get(1L), - bits, - new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_LV, 'V', ItemList.Conveyor_Module_LV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Filter_MV.get(1L), - bits, - new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_MV, 'V', ItemList.Conveyor_Module_MV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Filter_HV.get(1L), - bits, - new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_HV, 'V', ItemList.Conveyor_Module_HV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Filter_EV.get(1L), - bits, - new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_EV, 'V', ItemList.Conveyor_Module_EV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Filter_IV.get(1L), - bits, - new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_IV, 'V', ItemList.Conveyor_Module_IV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Filter_LuV.get(1L), - bits, - new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_LuV, 'V', ItemList.Conveyor_Module_LuV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Filter_ZPM.get(1L), - bits, - new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Filter_UV.get(1L), - bits, - new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Filter_MAX.get(1L), - bits, - new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UHV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_TypeFilter_ULV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_ULV, 'V', ItemList.Conveyor_Module_LV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_TypeFilter_LV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_LV, 'V', ItemList.Conveyor_Module_LV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_TypeFilter_MV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_MV, 'V', ItemList.Conveyor_Module_MV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_TypeFilter_HV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_HV, 'V', ItemList.Conveyor_Module_HV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_TypeFilter_EV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_EV, 'V', ItemList.Conveyor_Module_EV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_TypeFilter_IV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_IV, 'V', ItemList.Conveyor_Module_IV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_TypeFilter_LuV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_LuV, 'V', ItemList.Conveyor_Module_LuV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_TypeFilter_ZPM.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_TypeFilter_UV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_TypeFilter_MAX.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UHV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Regulator_ULV.get(1L), - bits, - new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_ULV, 'V', ItemList.Robot_Arm_LV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Regulator_LV.get(1L), - bits, - new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_LV, 'V', ItemList.Robot_Arm_LV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Regulator_MV.get(1L), - bits, - new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_MV, 'V', ItemList.Robot_Arm_MV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Regulator_HV.get(1L), - bits, - new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_HV, 'V', ItemList.Robot_Arm_HV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Regulator_EV.get(1L), - bits, - new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_EV, 'V', ItemList.Robot_Arm_EV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Regulator_IV.get(1L), - bits, - new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_IV, 'V', ItemList.Robot_Arm_IV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Regulator_LuV.get(1L), - bits, - new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_LuV, 'V', ItemList.Robot_Arm_LuV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Regulator_ZPM.get(1L), - bits, - new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_ZPM, 'V', ItemList.Robot_Arm_ZPM, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Regulator_UV.get(1L), - bits, - new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_UV, 'V', ItemList.Robot_Arm_UV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_Regulator_MAX.get(1L), - bits, - new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_MAX, 'V', ItemList.Robot_Arm_UHV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_ULV.get(1L), - bits, - new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_ULV, 'V', ItemList.Conveyor_Module_LV, 'D', - ItemList.Tool_DataOrb }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_LV.get(1L), - bits, - new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_LV, 'V', ItemList.Conveyor_Module_LV, 'D', - ItemList.Tool_DataOrb }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_MV.get(1L), - bits, - new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_MV, 'V', ItemList.Conveyor_Module_MV, 'D', - ItemList.Tool_DataOrb }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_HV.get(1L), - bits, - new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_HV, 'V', ItemList.Conveyor_Module_HV, 'D', - ItemList.Tool_DataOrb }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_EV.get(1L), - bits, - new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_EV, 'V', ItemList.Conveyor_Module_EV, 'D', - ItemList.Tool_DataOrb }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_IV.get(1L), - bits, - new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_IV, 'V', ItemList.Conveyor_Module_IV, 'D', - ItemList.Tool_DataOrb }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_LuV.get(1L), - bits, - new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_LuV, 'V', ItemList.Conveyor_Module_LuV, 'D', - ItemList.Tool_DataOrb }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_ZPM.get(1L), - bits, - new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'D', - ItemList.Tool_DataOrb }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_UV.get(1L), - bits, - new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_UV, 'V', ItemList.Conveyor_Module_UV, 'D', - ItemList.Tool_DataOrb }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_MAX.get(1L), - bits, - new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_UHV, 'V', ItemList.Conveyor_Module_UHV, 'D', - ItemList.Tool_DataOrb }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_ULV.get(1L), - bits, - new Object[] { "DMV", "DDD", 'M', ItemList.Hull_ULV, 'V', ItemList.Conveyor_Module_LV, 'D', - ItemList.Tool_DataStick }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_LV.get(1L), - bits, - new Object[] { "DMV", "DDD", 'M', ItemList.Hull_LV, 'V', ItemList.Conveyor_Module_LV, 'D', - ItemList.Tool_DataStick }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_MV.get(1L), - bits, - new Object[] { "DMV", "DDD", 'M', ItemList.Hull_MV, 'V', ItemList.Conveyor_Module_MV, 'D', - ItemList.Tool_DataStick }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_HV.get(1L), - bits, - new Object[] { "DMV", "DDD", 'M', ItemList.Hull_HV, 'V', ItemList.Conveyor_Module_HV, 'D', - ItemList.Tool_DataStick }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_EV.get(1L), - bits, - new Object[] { "DMV", "DDD", 'M', ItemList.Hull_EV, 'V', ItemList.Conveyor_Module_EV, 'D', - ItemList.Tool_DataStick }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_IV.get(1L), - bits, - new Object[] { "DMV", "DDD", 'M', ItemList.Hull_IV, 'V', ItemList.Conveyor_Module_IV, 'D', - ItemList.Tool_DataStick }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_LuV.get(1L), - bits, - new Object[] { "DMV", "DDD", 'M', ItemList.Hull_LuV, 'V', ItemList.Conveyor_Module_LuV, 'D', - ItemList.Tool_DataStick }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_ZPM.get(1L), - bits, - new Object[] { "DMV", "DDD", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'D', - ItemList.Tool_DataStick }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_UV.get(1L), - bits, - new Object[] { "DMV", "DDD", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'D', - ItemList.Tool_DataStick }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_SuperBuffer_MAX.get(1L), - bits, - new Object[] { "DMV", "DDD", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UHV, 'D', - ItemList.Tool_DataStick }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ItemDistributor_ULV.get(1L), - bits, - new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_ULV, 'V', ItemList.Conveyor_Module_LV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ItemDistributor_LV.get(1L), - bits, - new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_LV, 'V', ItemList.Conveyor_Module_LV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ItemDistributor_MV.get(1L), - bits, - new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_MV, 'V', ItemList.Conveyor_Module_MV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ItemDistributor_HV.get(1L), - bits, - new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_HV, 'V', ItemList.Conveyor_Module_HV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ItemDistributor_EV.get(1L), - bits, - new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_EV, 'V', ItemList.Conveyor_Module_EV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ItemDistributor_IV.get(1L), - bits, - new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_IV, 'V', ItemList.Conveyor_Module_IV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ItemDistributor_LuV.get(1L), - bits, - new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_LuV, 'V', ItemList.Conveyor_Module_LuV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ItemDistributor_ZPM.get(1L), - bits, - new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ItemDistributor_UV.get(1L), - bits, - new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_ItemDistributor_MAX.get(1L), - bits, - new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UHV, 'C', - OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); - - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_RecipeFilter_ULV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_ULV, 'V', ItemList.Robot_Arm_LV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_RecipeFilter_LV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_LV, 'V', ItemList.Robot_Arm_LV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_RecipeFilter_MV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_MV, 'V', ItemList.Robot_Arm_MV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_RecipeFilter_HV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_HV, 'V', ItemList.Robot_Arm_HV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_RecipeFilter_EV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_EV, 'V', ItemList.Robot_Arm_EV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_RecipeFilter_IV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_IV, 'V', ItemList.Robot_Arm_IV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_RecipeFilter_LuV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_LuV, 'V', ItemList.Robot_Arm_LuV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_RecipeFilter_ZPM.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_ZPM, 'V', ItemList.Robot_Arm_ZPM, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_RecipeFilter_UV.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_UV, 'V', ItemList.Robot_Arm_UV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - GT_ModHandler.addCraftingRecipe( - ItemList.Automation_RecipeFilter_MAX.get(1L), - bits, - new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_MAX, 'V', ItemList.Robot_Arm_UHV, 'C', - OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', - OrePrefixes.circuit.get(Materials.LV) }); - } - - @Override - public void run() { - registerShapelessCraftingRecipes(); - registerShapedCraftingRecipes(); - GT_Log.out.println("GT_Mod: Recipes for MetaTileEntities."); - registerMachineTypes(); - GT_PCBFactoryMaterialLoader.load(); - run4(); - } -} diff --git a/src/main/java/gregtech/loaders/load/GT_SonictronLoader.java b/src/main/java/gregtech/loaders/load/GT_SonictronLoader.java deleted file mode 100644 index e5fb8042f7..0000000000 --- a/src/main/java/gregtech/loaders/load/GT_SonictronLoader.java +++ /dev/null @@ -1,159 +0,0 @@ -package gregtech.loaders.load; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import gregtech.GT_Mod; -import gregtech.api.enums.SoundResource; -import gregtech.api.util.GT_Log; - -public class GT_SonictronLoader implements Runnable { - - @Override - public void run() { - GT_Log.out.println("GT_Mod: Loading Sonictron Sounds"); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.iron_block, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_HARP.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(25); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.gold_block, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_PLING.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(25); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.stone, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_BD.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(25); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.log, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_BASSATTACK.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(25); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.planks, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_BASS.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(25); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.glass, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_HAT.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(25); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.sand, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_BASS.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(25); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.record_cat, 1)); - GT_Mod.gregtechproxy.mSoundNames.add("streaming."); - GT_Mod.gregtechproxy.mSoundCounts.add(12); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.tnt, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_EXPLODE.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(3); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.fire, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.FIRE_FIRE.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.flint_and_steel, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.FIRE_IGNITE.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.lava, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.LIQUID_LAVAPOP.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.water, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.LIQUID_WATER.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.water_bucket, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.LIQUID_SPLASH.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.lava_bucket, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_FIZZ.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.portal, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.PORTAL_PORTAL.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.end_portal, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.PORTAL_TRAVEL.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.end_portal_frame, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.PORTAL_TRIGGER.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.glass_pane, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_GLASS.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.ender_pearl, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_ORB.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.ender_eye, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_LEVELUP.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.stone_button, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_CLICK.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.cobblestone, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.DAMAGE_FALLBIG.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.dirt, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.DAMAGE_FALLSMALL.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.iron_sword, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.DAMAGE_HURTFLESH.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.diamond_sword, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_HURT.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.bow, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_BOW.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.arrow, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_DRR.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.fishing_rod, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_BOWHIT.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.iron_shovel, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_BREAK.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.bucket, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_BREATH.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.potionitem, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_DRINK.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.glass_bottle, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_BURP.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems - .add(new ItemStack(Blocks.ender_chest == null ? Blocks.obsidian : Blocks.ender_chest, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_CHESTOPEN.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.chest, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_CHESTCLOSED.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.iron_door, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_DOOR_OPEN.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.wooden_door, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_DOOR_CLOSE.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Items.porkchop, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_EAT.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.wool, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.STEP_CLOTH.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.grass, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.STEP_GRASS.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.gravel, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.STEP_GRAVEL.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.snow, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.STEP_SNOW.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.piston, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.TILE_PISTON_OUT.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.sticky_piston, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.TILE_PISTON_IN.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.mossy_cobblestone, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.AMBIENT_CAVE_CAVE.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.lapis_block, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.AMBIENT_WEATHER_RAIN.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - GT_Mod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.diamond_block, 1)); - GT_Mod.gregtechproxy.mSoundNames.add(SoundResource.AMBIENT_WEATHER_THUNDER.toString()); - GT_Mod.gregtechproxy.mSoundCounts.add(1); - } -} diff --git a/src/main/java/gregtech/loaders/load/MTERecipeLoader.java b/src/main/java/gregtech/loaders/load/MTERecipeLoader.java new file mode 100644 index 0000000000..3e638e7e60 --- /dev/null +++ b/src/main/java/gregtech/loaders/load/MTERecipeLoader.java @@ -0,0 +1,4386 @@ +package gregtech.loaders.load; + +import static gregtech.api.enums.Mods.BuildCraftFactory; +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.enums.Mods.GalacticraftCore; +import static gregtech.api.enums.Mods.Gendustry; +import static gregtech.api.enums.Mods.IndustrialCraft2; +import static gregtech.api.enums.Mods.NotEnoughItems; +import static gregtech.api.enums.Mods.Thaumcraft; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import codechicken.nei.api.API; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OreDictNames; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe; +import gregtech.api.util.ExternalMaterials; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.loaders.postload.PCBFactoryMaterialLoader; +import gregtech.loaders.postload.ProcessingArrayRecipeLoader; +import ic2.core.Ic2Items; + +public class MTERecipeLoader implements Runnable { + + private static final String aTextPlate = "PPP"; + private static final String aTextPlateWrench = "PwP"; + private static final String aTextPlateMotor = "PMP"; + private static final String aTextCableHull = "CMC"; + private static final String aTextWireHull = "WMW"; + private static final String aTextWireChest = "WTW"; + private static final String aTextWireCoil = "WCW"; + private static final String aTextMotorWire = "EWE"; + private static final String aTextWirePump = "WPW"; + + private static final long bits = GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED; + private static final long bitsd = GTModHandler.RecipeBits.DISMANTLEABLE | bits; + + private static void registerMachineTypes() { + registerAlloySmelter(); + registerArcFurnace(); + registerAutoclave(); + registerAssembler(); + registerBendingMachine(); + registerCanner(); + registerCentrifuge(); + registerCompressor(); + registerChemicalBath(); + registerChemicalReactor(); + registerCircuitAssembler(); + registerCuttingMachine(); + registerDistillery(); + registerElectricFurnace(); + registerElectrolyser(); + registerElectromagneticSeparator(); + registerExtractor(); + registerExtruder(); + registerFermenter(); + registerFluidCanner(); + registerFluidExtractor(); + registerFluidHeater(); + registerFluidSolidifier(); + registerForgeHammer(); + registerFormingPress(); + registerLathe(); + registerLaserEngraver(); + registerMacerator(); + registerMatterAmplifier(); + registerMicrowave(); + registerMixer(); + registerOreWasher(); + registerOven(); + registerPlasmaArcFurnace(); + registerPolarizer(); + registerPrinter(); + registerRecycler(); + registerSifter(); + registerSlicer(); + registerThermalCentrifuge(); + registerUnpackager(); + registerWiremill(); + } + + private static void registerAlloySmelter() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_AlloySmelter.get(1), + bitsd, + new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_AlloySmelter.get(1), + bitsd, + new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_AlloySmelter.get(1), + bitsd, + new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_AlloySmelter.get(1), + bitsd, + new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_AlloySmelter.get(1), + bitsd, + new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 5); + + } + + private static void registerArcFurnace() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_ArcFurnace.get(1), + bitsd, + new Object[] { "WGW", aTextCableHull, aTextPlate, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PLATE, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4, 'G', OrePrefixes.cell.get(Materials.Graphite) }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_ArcFurnace.get(1), + bitsd, + new Object[] { "WGW", aTextCableHull, aTextPlate, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PLATE, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4, 'G', OrePrefixes.cell.get(Materials.Graphite) }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_ArcFurnace.get(1), + bitsd, + new Object[] { "WGW", aTextCableHull, aTextPlate, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PLATE, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4, 'G', OrePrefixes.cell.get(Materials.Graphite) }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_ArcFurnace.get(1), + bitsd, + new Object[] { "WGW", aTextCableHull, aTextPlate, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PLATE, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4, 'G', OrePrefixes.cell.get(Materials.Graphite) }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_ArcFurnace.get(1), + bitsd, + new Object[] { "WGW", aTextCableHull, aTextPlate, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PLATE, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4, 'G', OrePrefixes.cell.get(Materials.Graphite) }, + 5); + + } + + private static void registerAssembler() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Assembler.get(1), + bitsd, + new Object[] { "ACA", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Assembler.get(1), + bitsd, + new Object[] { "ACA", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Assembler.get(1), + bitsd, + new Object[] { "ACA", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Assembler.get(1), + bitsd, + new Object[] { "ACA", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Assembler.get(1), + bitsd, + new Object[] { "ACA", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 5); + } + + private static void registerAutoclave() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Autoclave.get(1), + bitsd, + new Object[] { "IGI", "IMI", "CPC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'I', MTEBasicMachineWithRecipe.X.PLATE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Autoclave.get(1), + bitsd, + new Object[] { "IGI", "IMI", "CPC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'I', MTEBasicMachineWithRecipe.X.PLATE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Autoclave.get(1), + bitsd, + new Object[] { "IGI", "IMI", "CPC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'I', MTEBasicMachineWithRecipe.X.PLATE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Autoclave.get(1), + bitsd, + new Object[] { "IGI", "IMI", "CPC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'I', MTEBasicMachineWithRecipe.X.PLATE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Autoclave.get(1), + bitsd, + new Object[] { "IGI", "IMI", "CPC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'I', MTEBasicMachineWithRecipe.X.PLATE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 5); + + } + + private static void registerBendingMachine() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Bender.get(1), + bitsd, + new Object[] { aTextPlateWrench, aTextCableHull, aTextMotorWire, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Bender.get(1), + bitsd, + new Object[] { aTextPlateWrench, aTextCableHull, aTextMotorWire, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Bender.get(1), + bitsd, + new Object[] { aTextPlateWrench, aTextCableHull, aTextMotorWire, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Bender.get(1), + bitsd, + new Object[] { aTextPlateWrench, aTextCableHull, aTextMotorWire, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Bender.get(1), + bitsd, + new Object[] { aTextPlateWrench, aTextCableHull, aTextMotorWire, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 5); + } + + private static void registerCanner() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Canner.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, "GGG", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Canner.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, "GGG", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Canner.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, "GGG", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Canner.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, "GGG", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Canner.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, "GGG", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 5); + } + + private static void registerCentrifuge() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Centrifuge.get(1), + bitsd, + new Object[] { "CEC", aTextWireHull, "CEC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Centrifuge.get(1), + bitsd, + new Object[] { "CEC", aTextWireHull, "CEC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Centrifuge.get(1), + bitsd, + new Object[] { "CEC", aTextWireHull, "CEC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Centrifuge.get(1), + bitsd, + new Object[] { "CEC", aTextWireHull, "CEC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Centrifuge.get(1), + bitsd, + new Object[] { "CEC", aTextWireHull, "CEC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 5); + } + + private static void registerChemicalBath() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_ChemicalBath.get(1), + bitsd, + new Object[] { "VGW", "PGV", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_ChemicalBath.get(1), + bitsd, + new Object[] { "VGW", "PGV", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_ChemicalBath.get(1), + bitsd, + new Object[] { "VGW", "PGV", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_ChemicalBath.get(1), + bitsd, + new Object[] { "VGW", "PGV", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_ChemicalBath.get(1), + bitsd, + new Object[] { "VGW", "PGV", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 5); + + } + + private static void registerChemicalReactor() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_ChemicalReactor.get(1), + bitsd, + new Object[] { "GRG", "WEW", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROTOR, 'E', MTEBasicMachineWithRecipe.X.MOTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_ChemicalReactor.get(1), + bitsd, + new Object[] { "GRG", "WEW", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROTOR, 'E', MTEBasicMachineWithRecipe.X.MOTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_ChemicalReactor.get(1), + bitsd, + new Object[] { "GRG", "WEW", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROTOR, 'E', MTEBasicMachineWithRecipe.X.MOTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + OrePrefixes.pipeMedium.get(Materials.Plastic) }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_ChemicalReactor.get(1), + bitsd, + new Object[] { "GRG", "WEW", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROTOR, 'E', MTEBasicMachineWithRecipe.X.MOTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + OrePrefixes.pipeLarge.get(Materials.Plastic) }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_ChemicalReactor.get(1), + bitsd, + new Object[] { "GRG", "WEW", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROTOR, 'E', MTEBasicMachineWithRecipe.X.MOTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + OrePrefixes.pipeHuge.get(Materials.Plastic) }, + 5); + } + + private static void registerCircuitAssembler() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_CircuitAssembler.get(1), + bitsd, + new Object[] { "ACE", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'E', + MTEBasicMachineWithRecipe.X.EMITTER }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_CircuitAssembler.get(1), + bitsd, + new Object[] { "ACE", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'E', + MTEBasicMachineWithRecipe.X.EMITTER }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_CircuitAssembler.get(1), + bitsd, + new Object[] { "ACE", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'E', + MTEBasicMachineWithRecipe.X.EMITTER }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_CircuitAssembler.get(1), + bitsd, + new Object[] { "ACE", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'E', + MTEBasicMachineWithRecipe.X.EMITTER }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_CircuitAssembler.get(1), + bitsd, + new Object[] { "ACE", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'E', + MTEBasicMachineWithRecipe.X.EMITTER }, + 5); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LuV_CircuitAssembler.get(1), + bitsd, + new Object[] { "ACE", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'E', + MTEBasicMachineWithRecipe.X.EMITTER }, + 6); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_ZPM_CircuitAssembler.get(1), + bitsd, + new Object[] { "ACE", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'E', + MTEBasicMachineWithRecipe.X.EMITTER }, + 7); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_UV_CircuitAssembler.get(1), + bitsd, + new Object[] { "ACE", "VMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'A', MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'C', + MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'E', + MTEBasicMachineWithRecipe.X.EMITTER }, + 8); + + } + + private static void registerCompressor() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Compressor.get(1), + bitsd, + new Object[] { aTextWireCoil, aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Compressor.get(1), + bitsd, + new Object[] { aTextWireCoil, aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Compressor.get(1), + bitsd, + new Object[] { aTextWireCoil, aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Compressor.get(1), + bitsd, + new Object[] { aTextWireCoil, aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Compressor.get(1), + bitsd, + new Object[] { aTextWireCoil, aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 5); + + } + + private static void registerCuttingMachine() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Cutter.get(1), + bitsd, + new Object[] { "WCG", "VMB", "CWE", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS, 'B', OreDictNames.craftingDiamondBlade }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Cutter.get(1), + bitsd, + new Object[] { "WCG", "VMB", "CWE", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS, 'B', OreDictNames.craftingDiamondBlade }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Cutter.get(1), + bitsd, + new Object[] { "WCG", "VMB", "CWE", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS, 'B', OreDictNames.craftingDiamondBlade }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Cutter.get(1), + bitsd, + new Object[] { "WCG", "VMB", "CWE", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS, 'B', OreDictNames.craftingDiamondBlade }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Cutter.get(1), + bitsd, + new Object[] { "WCG", "VMB", "CWE", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS, 'B', OreDictNames.craftingDiamondBlade }, + 5); + + } + + private static void registerDistillery() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Distillery.get(1), + bitsd, + new Object[] { "GBG", aTextCableHull, aTextWirePump, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'B', MTEBasicMachineWithRecipe.X.PIPE, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Distillery.get(1), + bitsd, + new Object[] { "GBG", aTextCableHull, aTextWirePump, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'B', MTEBasicMachineWithRecipe.X.PIPE, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Distillery.get(1), + bitsd, + new Object[] { "GBG", aTextCableHull, aTextWirePump, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'B', MTEBasicMachineWithRecipe.X.PIPE, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Distillery.get(1), + bitsd, + new Object[] { "GBG", aTextCableHull, aTextWirePump, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'B', MTEBasicMachineWithRecipe.X.PIPE, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Distillery.get(1), + bitsd, + new Object[] { "GBG", aTextCableHull, aTextWirePump, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'B', MTEBasicMachineWithRecipe.X.PIPE, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 5); + + } + + private static void registerElectricFurnace() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_E_Furnace.get(1), + bitsd, + new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_E_Furnace.get(1), + bitsd, + new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_E_Furnace.get(1), + bitsd, + new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_E_Furnace.get(1), + bitsd, + new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_E_Furnace.get(1), + bitsd, + new Object[] { "ECE", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING }, + 5); + + } + + private static void registerElectrolyser() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Electrolyzer.get(1), + bitsd, + new Object[] { "IGI", "IMI", "CWC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'I', OrePrefixes.wireGt01.get(Materials.Gold), 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Electrolyzer.get(1), + bitsd, + new Object[] { "IGI", "IMI", "CWC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'I', OrePrefixes.wireGt01.get(Materials.Silver), 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Electrolyzer.get(1), + bitsd, + new Object[] { "IGI", "IMI", "CWC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'I', OrePrefixes.wireGt01.get(Materials.Electrum), 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Electrolyzer.get(1), + bitsd, + new Object[] { "IGI", "IMI", "CWC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'I', OrePrefixes.wireGt01.get(Materials.Platinum), 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Electrolyzer.get(1), + bitsd, + new Object[] { "IGI", "IMI", "CWC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'I', OrePrefixes.wireGt01.get(Materials.HSSG), 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 5); + + } + + private static void registerElectromagneticSeparator() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_ElectromagneticSeparator.get(1), + bitsd, + new Object[] { "VWZ", "WMS", "CWZ", 'M', MTEBasicMachineWithRecipe.X.HULL, 'S', + MTEBasicMachineWithRecipe.X.STICK_ELECTROMAGNETIC, 'Z', MTEBasicMachineWithRecipe.X.COIL_ELECTRIC, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_ElectromagneticSeparator.get(1), + bitsd, + new Object[] { "VWZ", "WMS", "CWZ", 'M', MTEBasicMachineWithRecipe.X.HULL, 'S', + MTEBasicMachineWithRecipe.X.STICK_ELECTROMAGNETIC, 'Z', MTEBasicMachineWithRecipe.X.COIL_ELECTRIC, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_ElectromagneticSeparator.get(1), + bitsd, + new Object[] { "VWZ", "WMS", "CWZ", 'M', MTEBasicMachineWithRecipe.X.HULL, 'S', + MTEBasicMachineWithRecipe.X.STICK_ELECTROMAGNETIC, 'Z', MTEBasicMachineWithRecipe.X.COIL_ELECTRIC, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_ElectromagneticSeparator.get(1), + bitsd, + new Object[] { "VWZ", "WMS", "CWZ", 'M', MTEBasicMachineWithRecipe.X.HULL, 'S', + MTEBasicMachineWithRecipe.X.STICK_ELECTROMAGNETIC, 'Z', MTEBasicMachineWithRecipe.X.COIL_ELECTRIC, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_ElectromagneticSeparator.get(1), + bitsd, + new Object[] { "VWZ", "WMS", "CWZ", 'M', MTEBasicMachineWithRecipe.X.HULL, 'S', + MTEBasicMachineWithRecipe.X.STICK_ELECTROMAGNETIC, 'Z', MTEBasicMachineWithRecipe.X.COIL_ELECTRIC, 'V', + MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 5); + + } + + private static void registerExtractor() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Extractor.get(1), + bitsd, + new Object[] { "GCG", "EMP", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.PISTON, 'P', MTEBasicMachineWithRecipe.X.PUMP, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Extractor.get(1), + bitsd, + new Object[] { "GCG", "EMP", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.PISTON, 'P', MTEBasicMachineWithRecipe.X.PUMP, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Extractor.get(1), + bitsd, + new Object[] { "GCG", "EMP", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.PISTON, 'P', MTEBasicMachineWithRecipe.X.PUMP, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Extractor.get(1), + bitsd, + new Object[] { "GCG", "EMP", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.PISTON, 'P', MTEBasicMachineWithRecipe.X.PUMP, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Extractor.get(1), + bitsd, + new Object[] { "GCG", "EMP", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.PISTON, 'P', MTEBasicMachineWithRecipe.X.PUMP, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 5); + + } + + private static void registerExtruder() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Extruder.get(1), + bitsd, + new Object[] { "CCE", "XMP", "CCE", 'M', MTEBasicMachineWithRecipe.X.HULL, 'X', + MTEBasicMachineWithRecipe.X.PISTON, 'E', MTEBasicMachineWithRecipe.X.CIRCUIT, 'P', + MTEBasicMachineWithRecipe.X.PIPE, 'C', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Extruder.get(1), + bitsd, + new Object[] { "CCE", "XMP", "CCE", 'M', MTEBasicMachineWithRecipe.X.HULL, 'X', + MTEBasicMachineWithRecipe.X.PISTON, 'E', MTEBasicMachineWithRecipe.X.CIRCUIT, 'P', + MTEBasicMachineWithRecipe.X.PIPE, 'C', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Extruder.get(1), + bitsd, + new Object[] { "CCE", "XMP", "CCE", 'M', MTEBasicMachineWithRecipe.X.HULL, 'X', + MTEBasicMachineWithRecipe.X.PISTON, 'E', MTEBasicMachineWithRecipe.X.CIRCUIT, 'P', + MTEBasicMachineWithRecipe.X.PIPE, 'C', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Extruder.get(1), + bitsd, + new Object[] { "CCE", "XMP", "CCE", 'M', MTEBasicMachineWithRecipe.X.HULL, 'X', + MTEBasicMachineWithRecipe.X.PISTON, 'E', MTEBasicMachineWithRecipe.X.CIRCUIT, 'P', + MTEBasicMachineWithRecipe.X.PIPE, 'C', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Extruder.get(1), + bitsd, + new Object[] { "CCE", "XMP", "CCE", 'M', MTEBasicMachineWithRecipe.X.HULL, 'X', + MTEBasicMachineWithRecipe.X.PISTON, 'E', MTEBasicMachineWithRecipe.X.CIRCUIT, 'P', + MTEBasicMachineWithRecipe.X.PIPE, 'C', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 5); + + } + + private static void registerFermenter() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Fermenter.get(1), + bitsd, + new Object[] { aTextWirePump, "GMG", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Fermenter.get(1), + bitsd, + new Object[] { aTextWirePump, "GMG", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Fermenter.get(1), + bitsd, + new Object[] { aTextWirePump, "GMG", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Fermenter.get(1), + bitsd, + new Object[] { aTextWirePump, "GMG", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Fermenter.get(1), + bitsd, + new Object[] { aTextWirePump, "GMG", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 5); + + } + + private static void registerFluidCanner() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_FluidCanner.get(1), + bitsd, + new Object[] { "GCG", "GMG", "WPW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_FluidCanner.get(1), + bitsd, + new Object[] { "GCG", "GMG", "WPW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_FluidCanner.get(1), + bitsd, + new Object[] { "GCG", "GMG", "WPW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_FluidCanner.get(1), + bitsd, + new Object[] { "GCG", "GMG", "WPW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_FluidCanner.get(1), + bitsd, + new Object[] { "GCG", "GMG", "WPW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 5); + + } + + private static void registerFluidExtractor() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_FluidExtractor.get(1), + bitsd, + new Object[] { "GEG", "TPT", "CMC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.PISTON, 'P', MTEBasicMachineWithRecipe.X.PUMP, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'T', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_FluidExtractor.get(1), + bitsd, + new Object[] { "GEG", "TPT", "CMC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.PISTON, 'P', MTEBasicMachineWithRecipe.X.PUMP, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'T', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_FluidExtractor.get(1), + bitsd, + new Object[] { "GEG", "TPT", "CMC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.PISTON, 'P', MTEBasicMachineWithRecipe.X.PUMP, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'T', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_FluidExtractor.get(1), + bitsd, + new Object[] { "GEG", "TPT", "CMC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.PISTON, 'P', MTEBasicMachineWithRecipe.X.PUMP, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'T', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_FluidExtractor.get(1), + bitsd, + new Object[] { "GEG", "TPT", "CMC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.PISTON, 'P', MTEBasicMachineWithRecipe.X.PUMP, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'T', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 5); + + } + + private static void registerFluidHeater() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_FluidHeater.get(1), + bitsd, + new Object[] { "OGO", aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_FluidHeater.get(1), + bitsd, + new Object[] { "OGO", aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_FluidHeater.get(1), + bitsd, + new Object[] { "OGO", aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_FluidHeater.get(1), + bitsd, + new Object[] { "OGO", aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_FluidHeater.get(1), + bitsd, + new Object[] { "OGO", aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.GLASS }, + 5); + } + + private static void registerFluidSolidifier() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_FluidSolidifier.get(1), + bitsd, + new Object[] { "PGP", aTextWireHull, "CBC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS, 'B', + OreDictNames.craftingChest }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_FluidSolidifier.get(1), + bitsd, + new Object[] { "PGP", aTextWireHull, "CBC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS, 'B', + OreDictNames.craftingChest }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_FluidSolidifier.get(1), + bitsd, + new Object[] { "PGP", aTextWireHull, "CBC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS, 'B', + OreDictNames.craftingChest }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_FluidSolidifier.get(1), + bitsd, + new Object[] { "PGP", aTextWireHull, "CBC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS, 'B', + OreDictNames.craftingChest }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_FluidSolidifier.get(1), + bitsd, + new Object[] { "PGP", aTextWireHull, "CBC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', MTEBasicMachineWithRecipe.X.GLASS, 'B', + OreDictNames.craftingChest }, + 5); + + } + + private static void registerForgeHammer() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Hammer.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, "WAW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE, 'A', + OreDictNames.craftingAnvil }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Hammer.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, "WAW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE, 'A', + OreDictNames.craftingAnvil }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Hammer.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, "WAW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE, 'A', + OreDictNames.craftingAnvil }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Hammer.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, "WAW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE, 'A', + OreDictNames.craftingAnvil }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Hammer.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, "WAW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE, 'A', + OreDictNames.craftingAnvil }, + 5); + + } + + private static void registerFormingPress() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Press.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, aTextWirePump, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Press.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, aTextWirePump, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Press.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, aTextWirePump, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Press.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, aTextWirePump, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Press.get(1), + bitsd, + new Object[] { aTextWirePump, aTextCableHull, aTextWirePump, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 5); + } + + private static void registerLaserEngraver() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_LaserEngraver.get(1), + bitsd, + new Object[] { "PEP", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.EMITTER, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_LaserEngraver.get(1), + bitsd, + new Object[] { "PEP", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.EMITTER, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_LaserEngraver.get(1), + bitsd, + new Object[] { "PEP", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.EMITTER, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_LaserEngraver.get(1), + bitsd, + new Object[] { "PEP", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.EMITTER, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_LaserEngraver.get(1), + bitsd, + new Object[] { "PEP", aTextCableHull, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.EMITTER, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 5); + + } + + private static void registerLathe() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Lathe.get(1), + bitsd, + new Object[] { aTextWireCoil, "EMD", "CWP", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'D', + OrePrefixes.gem.get(Materials.Diamond) }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Lathe.get(1), + bitsd, + new Object[] { aTextWireCoil, "EMD", "CWP", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'D', + OrePrefixes.gemFlawless.get(Materials.Diamond) }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Lathe.get(1), + bitsd, + new Object[] { aTextWireCoil, "EMD", "CWP", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'D', + OreDictNames.craftingIndustrialDiamond }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Lathe.get(1), + bitsd, + new Object[] { aTextWireCoil, "EMD", "CWP", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'D', + OreDictNames.craftingIndustrialDiamond }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Lathe.get(1), + bitsd, + new Object[] { aTextWireCoil, "EMD", "CWP", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'D', + OreDictNames.craftingIndustrialDiamond }, + 5); + + } + + private static void registerMacerator() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Macerator.get(1), + bitsd, + new Object[] { "PEG", "WWM", "CCW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + OrePrefixes.gem.get(Materials.Diamond) }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Macerator.get(1), + bitsd, + new Object[] { "PEG", "WWM", "CCW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + OrePrefixes.gemFlawless.get(Materials.Diamond) }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Macerator.get(1), + bitsd, + new Object[] { "PEG", "WWM", "CCW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + OreDictNames.craftingGrinder }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Macerator.get(1), + bitsd, + new Object[] { "PEG", "WWM", "CCW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + OreDictNames.craftingGrinder }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Macerator.get(1), + bitsd, + new Object[] { "PEG", "WWM", "CCW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'P', MTEBasicMachineWithRecipe.X.PISTON, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + OreDictNames.craftingGrinder }, + 5); + + } + + private static void registerMatterAmplifier() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Amplifab.get(1), + bitsd, + new Object[] { aTextWirePump, aTextPlateMotor, "CPC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4 }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Amplifab.get(1), + bitsd, + new Object[] { aTextWirePump, aTextPlateMotor, "CPC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4 }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Amplifab.get(1), + bitsd, + new Object[] { aTextWirePump, aTextPlateMotor, "CPC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4 }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Amplifab.get(1), + bitsd, + new Object[] { aTextWirePump, aTextPlateMotor, "CPC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4 }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Amplifab.get(1), + bitsd, + new Object[] { aTextWirePump, aTextPlateMotor, "CPC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PUMP, 'C', MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4 }, + 5); + + } + + private static void registerMicrowave() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Microwave.get(1), + bitsd, + new Object[] { "LWC", "LMR", "LEC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'R', MTEBasicMachineWithRecipe.X.EMITTER, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'L', + OrePrefixes.plate.get(Materials.Lead) }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Microwave.get(1), + bitsd, + new Object[] { "LWC", "LMR", "LEC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'R', MTEBasicMachineWithRecipe.X.EMITTER, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'L', + OrePrefixes.plate.get(Materials.Lead) }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Microwave.get(1), + bitsd, + new Object[] { "LWC", "LMR", "LEC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'R', MTEBasicMachineWithRecipe.X.EMITTER, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'L', + OrePrefixes.plate.get(Materials.Lead) }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Microwave.get(1), + bitsd, + new Object[] { "LWC", "LMR", "LEC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'R', MTEBasicMachineWithRecipe.X.EMITTER, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'L', + OrePrefixes.plate.get(Materials.Lead) }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Microwave.get(1), + bitsd, + new Object[] { "LWC", "LMR", "LEC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'R', MTEBasicMachineWithRecipe.X.EMITTER, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'L', + OrePrefixes.plate.get(Materials.Lead) }, + 5); + + } + + private static void registerMixer() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Mixer.get(1), + bitsd, + new Object[] { "GRG", "GEG", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'R', MTEBasicMachineWithRecipe.X.ROTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Mixer.get(1), + bitsd, + new Object[] { "GRG", "GEG", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'R', MTEBasicMachineWithRecipe.X.ROTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Mixer.get(1), + bitsd, + new Object[] { "GRG", "GEG", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'R', MTEBasicMachineWithRecipe.X.ROTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Mixer.get(1), + bitsd, + new Object[] { "GRG", "GEG", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'R', MTEBasicMachineWithRecipe.X.ROTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Mixer.get(1), + bitsd, + new Object[] { "GRG", "GEG", aTextCableHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'R', MTEBasicMachineWithRecipe.X.ROTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'G', MTEBasicMachineWithRecipe.X.GLASS }, + 5); + } + + private static void registerOreWasher() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_OreWasher.get(1), + bitsd, + new Object[] { "RGR", "CEC", aTextWireHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROTOR, 'E', MTEBasicMachineWithRecipe.X.MOTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.PUMP }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_OreWasher.get(1), + bitsd, + new Object[] { "RGR", "CEC", aTextWireHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROTOR, 'E', MTEBasicMachineWithRecipe.X.MOTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.PUMP }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_OreWasher.get(1), + bitsd, + new Object[] { "RGR", "CEC", aTextWireHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROTOR, 'E', MTEBasicMachineWithRecipe.X.MOTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.PUMP }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_OreWasher.get(1), + bitsd, + new Object[] { "RGR", "CEC", aTextWireHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROTOR, 'E', MTEBasicMachineWithRecipe.X.MOTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.PUMP }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_OreWasher.get(1), + bitsd, + new Object[] { "RGR", "CEC", aTextWireHull, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROTOR, 'E', MTEBasicMachineWithRecipe.X.MOTOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'G', + MTEBasicMachineWithRecipe.X.PUMP }, + 5); + + } + + private static void registerOven() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Oven.get(1), + bitsd, + new Object[] { "CEC", aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Oven.get(1), + bitsd, + new Object[] { "CEC", aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Oven.get(1), + bitsd, + new Object[] { "CEC", aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Oven.get(1), + bitsd, + new Object[] { "CEC", aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Oven.get(1), + bitsd, + new Object[] { "CEC", aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'C', + MTEBasicMachineWithRecipe.X.COIL_HEATING }, + 5); + + } + + private static void registerPlasmaArcFurnace() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_PlasmaArcFurnace.get(1), + bitsd, + new Object[] { "WGW", aTextCableHull, "TPT", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PLATE, 'C', MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4, 'T', MTEBasicMachineWithRecipe.X.PUMP, 'G', + OrePrefixes.cell.get(Materials.Graphite) }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_PlasmaArcFurnace.get(1), + bitsd, + new Object[] { "WGW", aTextCableHull, "TPT", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PLATE, 'C', MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4, 'T', MTEBasicMachineWithRecipe.X.PUMP, 'G', + OrePrefixes.cell.get(Materials.Graphite) }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_PlasmaArcFurnace.get(1), + bitsd, + new Object[] { "WGW", aTextCableHull, "TPT", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PLATE, 'C', MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4, 'T', MTEBasicMachineWithRecipe.X.PUMP, 'G', + OrePrefixes.cell.get(Materials.Graphite) }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_PlasmaArcFurnace.get(1), + bitsd, + new Object[] { "WGW", aTextCableHull, "TPT", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PLATE, 'C', MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4, 'T', MTEBasicMachineWithRecipe.X.PUMP, 'G', + OrePrefixes.cell.get(Materials.Graphite) }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_PlasmaArcFurnace.get(1), + bitsd, + new Object[] { "WGW", aTextCableHull, "TPT", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PLATE, 'C', MTEBasicMachineWithRecipe.X.BETTER_CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE4, 'T', MTEBasicMachineWithRecipe.X.PUMP, 'G', + OrePrefixes.cell.get(Materials.Graphite) }, + 5); + + } + + private static void registerPolarizer() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Polarizer.get(1), + bitsd, + new Object[] { "ZSZ", aTextWireHull, "ZSZ", 'M', MTEBasicMachineWithRecipe.X.HULL, 'S', + MTEBasicMachineWithRecipe.X.STICK_ELECTROMAGNETIC, 'Z', MTEBasicMachineWithRecipe.X.COIL_ELECTRIC, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Polarizer.get(1), + bitsd, + new Object[] { "ZSZ", aTextWireHull, "ZSZ", 'M', MTEBasicMachineWithRecipe.X.HULL, 'S', + MTEBasicMachineWithRecipe.X.STICK_ELECTROMAGNETIC, 'Z', MTEBasicMachineWithRecipe.X.COIL_ELECTRIC, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Polarizer.get(1), + bitsd, + new Object[] { "ZSZ", aTextWireHull, "ZSZ", 'M', MTEBasicMachineWithRecipe.X.HULL, 'S', + MTEBasicMachineWithRecipe.X.STICK_ELECTROMAGNETIC, 'Z', MTEBasicMachineWithRecipe.X.COIL_ELECTRIC, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Polarizer.get(1), + bitsd, + new Object[] { "ZSZ", aTextWireHull, "ZSZ", 'M', MTEBasicMachineWithRecipe.X.HULL, 'S', + MTEBasicMachineWithRecipe.X.STICK_ELECTROMAGNETIC, 'Z', MTEBasicMachineWithRecipe.X.COIL_ELECTRIC, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Polarizer.get(1), + bitsd, + new Object[] { "ZSZ", aTextWireHull, "ZSZ", 'M', MTEBasicMachineWithRecipe.X.HULL, 'S', + MTEBasicMachineWithRecipe.X.STICK_ELECTROMAGNETIC, 'Z', MTEBasicMachineWithRecipe.X.COIL_ELECTRIC, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 5); + + } + + private static void registerPrinter() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Printer.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Printer.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Printer.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Printer.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Printer.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 5); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LuV_Printer.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 6); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_ZPM_Printer.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 7); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_UV_Printer.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 8); + + } + + private static void registerRecycler() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Recycler.get(1), + bitsd, + new Object[] { "GCG", aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', OrePrefixes.dust.get(Materials.Glowstone) }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Recycler.get(1), + bitsd, + new Object[] { "GCG", aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', OrePrefixes.dust.get(Materials.Glowstone) }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Recycler.get(1), + bitsd, + new Object[] { "GCG", aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', OrePrefixes.dust.get(Materials.Glowstone) }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Recycler.get(1), + bitsd, + new Object[] { "GCG", aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', OrePrefixes.dust.get(Materials.Glowstone) }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Recycler.get(1), + bitsd, + new Object[] { "GCG", aTextPlateMotor, aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'G', OrePrefixes.dust.get(Materials.Glowstone) }, + 5); + + } + + private static void registerSifter() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Sifter.get(1), + bitsd, + new Object[] { "WFW", aTextPlateMotor, "CFC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'F', OreDictNames.craftingFilter, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Sifter.get(1), + bitsd, + new Object[] { "WFW", aTextPlateMotor, "CFC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'F', OreDictNames.craftingFilter, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Sifter.get(1), + bitsd, + new Object[] { "WFW", aTextPlateMotor, "CFC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'F', OreDictNames.craftingFilter, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Sifter.get(1), + bitsd, + new Object[] { "WFW", aTextPlateMotor, "CFC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'F', OreDictNames.craftingFilter, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Sifter.get(1), + bitsd, + new Object[] { "WFW", aTextPlateMotor, "CFC", 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'F', OreDictNames.craftingFilter, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 5); + + } + + private static void registerSlicer() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Slicer.get(1), + bitsd, + new Object[] { aTextWireCoil, "PMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Slicer.get(1), + bitsd, + new Object[] { aTextWireCoil, "PMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Slicer.get(1), + bitsd, + new Object[] { aTextWireCoil, "PMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Slicer.get(1), + bitsd, + new Object[] { aTextWireCoil, "PMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Slicer.get(1), + bitsd, + new Object[] { aTextWireCoil, "PMV", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'P', + MTEBasicMachineWithRecipe.X.PISTON, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE }, + 5); + + } + + private static void registerThermalCentrifuge() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_ThermalCentrifuge.get(1), + bitsd, + new Object[] { "CEC", "OMO", "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_ThermalCentrifuge.get(1), + bitsd, + new Object[] { "CEC", "OMO", "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_ThermalCentrifuge.get(1), + bitsd, + new Object[] { "CEC", "OMO", "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_ThermalCentrifuge.get(1), + bitsd, + new Object[] { "CEC", "OMO", "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_ThermalCentrifuge.get(1), + bitsd, + new Object[] { "CEC", "OMO", "WEW", 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE, 'O', MTEBasicMachineWithRecipe.X.COIL_HEATING_DOUBLE }, + 5); + + } + + private static void registerUnpackager() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Unboxinator.get(1), + bitsd, + new Object[] { "BCB", "VMR", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'B', + OreDictNames.craftingChest }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Unboxinator.get(1), + bitsd, + new Object[] { "BCB", "VMR", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'B', + OreDictNames.craftingChest }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Unboxinator.get(1), + bitsd, + new Object[] { "BCB", "VMR", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'B', + OreDictNames.craftingChest }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Unboxinator.get(1), + bitsd, + new Object[] { "BCB", "VMR", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'B', + OreDictNames.craftingChest }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Unboxinator.get(1), + bitsd, + new Object[] { "BCB", "VMR", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'B', + OreDictNames.craftingChest }, + 5); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LuV_Unboxinator.get(1), + bitsd, + new Object[] { "BCB", "VMR", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'B', + OreDictNames.craftingChest }, + 6); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_ZPM_Unboxinator.get(1), + bitsd, + new Object[] { "BCB", "VMR", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'B', + OreDictNames.craftingChest }, + 7); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_UV_Unboxinator.get(1), + bitsd, + new Object[] { "BCB", "VMR", aTextWireCoil, 'M', MTEBasicMachineWithRecipe.X.HULL, 'R', + MTEBasicMachineWithRecipe.X.ROBOT_ARM, 'V', MTEBasicMachineWithRecipe.X.CONVEYOR, 'C', + MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', MTEBasicMachineWithRecipe.X.WIRE, 'B', + OreDictNames.craftingChest }, + 8); + } + + private static void registerWiremill() { + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_LV_Wiremill.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, aTextMotorWire, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 1); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_MV_Wiremill.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, aTextMotorWire, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 2); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_HV_Wiremill.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, aTextMotorWire, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 3); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_EV_Wiremill.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, aTextMotorWire, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 4); + + GTModHandler.addMachineCraftingRecipe( + ItemList.Machine_IV_Wiremill.get(1), + bitsd, + new Object[] { aTextMotorWire, aTextCableHull, aTextMotorWire, 'M', MTEBasicMachineWithRecipe.X.HULL, 'E', + MTEBasicMachineWithRecipe.X.MOTOR, 'C', MTEBasicMachineWithRecipe.X.CIRCUIT, 'W', + MTEBasicMachineWithRecipe.X.WIRE }, + 5); + } + + private static void registerShapedCraftingRecipes() { + GTModHandler.addCraftingRecipe( + ItemList.Casing_Pipe_Polytetrafluoroethylene.get(1L), + bits, + new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.Polytetrafluoroethylene), 'F', + OrePrefixes.frameGt.get(Materials.Polytetrafluoroethylene), 'I', + OrePrefixes.pipeMedium.get(Materials.Polytetrafluoroethylene) }); + + GTModHandler.addCraftingRecipe( + ItemList.Casing_Pipe_Polybenzimidazole.get(1L), + bits, + new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.Polybenzimidazole), 'F', + OrePrefixes.frameGt.get(Materials.Polybenzimidazole), 'I', + OrePrefixes.pipeMedium.get(Materials.Polybenzimidazole) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_ULV.get(1L), + bits, + new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', + OrePrefixes.plate.get(Materials.WroughtIron) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_LV.get(1L), + bits, + new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', OrePrefixes.plate.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_MV.get(1L), + bits, + new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', OrePrefixes.plate.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_HV.get(1L), + bits, + new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', + OrePrefixes.plate.get(Materials.StainlessSteel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_EV.get(1L), + bits, + new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', OrePrefixes.plate.get(Materials.Titanium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_IV.get(1L), + bits, + new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', + OrePrefixes.plate.get(Materials.TungstenSteel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_LuV.get(1L), + bits, + new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', + OrePrefixes.plate.get(ExternalMaterials.getRhodiumPlatedPalladium()) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_ZPM.get(1L), + bits, + new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', OrePrefixes.plate.get(Materials.Iridium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_UV.get(1L), + bits, + new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', OrePrefixes.plate.get(Materials.Osmium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_MAX.get(1L), + bits, + new Object[] { aTextPlate, aTextPlateWrench, aTextPlate, 'P', + OrePrefixes.plate.get(Materials.Neutronium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_BronzePlatedBricks.get(1L), + bits, + new Object[] { "PhP", "PBP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Bronze), 'B', + new ItemStack(Blocks.brick_block, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_SolidSteel.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Steel), 'F', + OrePrefixes.frameGt.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_StableTitanium.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Titanium), 'F', + OrePrefixes.frameGt.get(Materials.Titanium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_HeatProof.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Invar), 'F', + OrePrefixes.frameGt.get(Materials.Invar) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_FrostProof.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Aluminium), 'F', + OrePrefixes.frameGt.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_CleanStainlessSteel.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.StainlessSteel), 'F', + OrePrefixes.frameGt.get(Materials.StainlessSteel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_RobustTungstenSteel.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'F', + OrePrefixes.frameGt.get(Materials.TungstenSteel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_MiningOsmiridium.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Osmiridium), 'F', + OrePrefixes.frameGt.get(Materials.Osmiridium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_MiningNeutronium.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Neutronium), 'F', + OrePrefixes.frameGt.get(Materials.Neutronium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_MiningBlackPlutonium.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.BlackPlutonium), 'F', + OrePrefixes.frameGt.get(Materials.BlackPlutonium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Turbine.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Magnalium), 'F', + OrePrefixes.frameGt.get(Materials.BlueSteel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Turbine1.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.StainlessSteel), 'F', + ItemList.Casing_Turbine }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Turbine2.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Titanium), 'F', + ItemList.Casing_Turbine }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Turbine3.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'F', + ItemList.Casing_Turbine }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_TurbineGasAdvanced.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.HSSS), 'F', + ItemList.Casing_Turbine }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Pipe_Bronze.get(1L), + bits, + new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.Bronze), 'F', + OrePrefixes.frameGt.get(Materials.Bronze), 'I', OrePrefixes.pipeMedium.get(Materials.Bronze) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Pipe_Steel.get(1L), + bits, + new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.Steel), 'F', + OrePrefixes.frameGt.get(Materials.Steel), 'I', OrePrefixes.pipeMedium.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Pipe_Titanium.get(1L), + bits, + new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.Titanium), 'F', + OrePrefixes.frameGt.get(Materials.Titanium), 'I', OrePrefixes.pipeMedium.get(Materials.Titanium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Pipe_TungstenSteel.get(1L), + bits, + new Object[] { "PIP", "IFI", "PIP", 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'F', + OrePrefixes.frameGt.get(Materials.TungstenSteel), 'I', + OrePrefixes.pipeMedium.get(Materials.TungstenSteel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Gearbox_Bronze.get(1L), + bits, + new Object[] { "PhP", "GFG", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Bronze), 'F', + OrePrefixes.frameGt.get(Materials.Bronze), 'G', OrePrefixes.gearGt.get(Materials.Bronze) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Gearbox_Steel.get(1L), + bits, + new Object[] { "PhP", "GFG", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Steel), 'F', + OrePrefixes.frameGt.get(Materials.Steel), 'G', OrePrefixes.gearGt.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Gearbox_Titanium.get(1L), + bits, + new Object[] { "PhP", "GFG", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Steel), 'F', + OrePrefixes.frameGt.get(Materials.Titanium), 'G', OrePrefixes.gearGt.get(Materials.Titanium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Gearbox_TungstenSteel.get(1L), + bits, + new Object[] { "PhP", "GFG", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Steel), 'F', + OrePrefixes.frameGt.get(Materials.TungstenSteel), 'G', ItemList.Robot_Arm_IV }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Grate.get(1L), + bits, + new Object[] { "PVP", "PFP", aTextPlateMotor, 'P', new ItemStack(Blocks.iron_bars, 1), 'F', + OrePrefixes.frameGt.get(Materials.Steel), 'M', ItemList.Electric_Motor_MV, 'V', + OrePrefixes.rotor.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Assembler.get(1L), + bits, + new Object[] { "PVP", "PFP", aTextPlateMotor, 'P', OrePrefixes.circuit.get(Materials.ZPM), 'F', + OrePrefixes.frameGt.get(Materials.TungstenSteel), 'M', ItemList.Electric_Motor_IV, 'V', + OrePrefixes.circuit.get(Materials.LuV) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Firebox_Bronze.get(1L), + bits, + new Object[] { "PSP", "SFS", "PSP", 'P', OrePrefixes.plate.get(Materials.Bronze), 'F', + OrePrefixes.frameGt.get(Materials.Bronze), 'S', OrePrefixes.stick.get(Materials.Bronze) }); + GTModHandler.addCraftingRecipe( + ItemList.WoodenCasing.get(1L), + bits, + new Object[] { "PSP", "PFP", "PSP", 'F', OrePrefixes.gear.get(Materials.Wood), 'P', + OrePrefixes.frameGt.get(Materials.Wood), 'S', OrePrefixes.screw.get(Materials.Wood) }); + GTModHandler.addCraftingRecipe( + ItemList.Hatch_Output_ULV.get(1L), + bits, + new Object[] { "ASA", "AFA", "APA", 'S', GTModHandler.getModItem(BuildCraftFactory.ID, "tankBlock", 1L, 0), + 'F', ItemList.Hull_ULV.get(1L), 'A', OrePrefixes.plate.get(Materials.Rubber), 'P', + OrePrefixes.ring.get(Materials.Rubber) }); + GTModHandler.addCraftingRecipe( + ItemList.Hatch_Input_ULV.get(1L), + bits, + new Object[] { "ASA", "AFA", "APA", 'S', GTModHandler.getModItem(BuildCraftFactory.ID, "tankBlock", 1L, 0), + 'F', ItemList.Hull_ULV.get(1L), 'A', OrePrefixes.plate.get(Materials.Rubber), 'P', + OrePrefixes.gear.get(Materials.Rubber) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Firebox_Steel.get(1L), + bits, + new Object[] { "PSP", "SFS", "PSP", 'P', OrePrefixes.plate.get(Materials.Steel), 'F', + OrePrefixes.frameGt.get(Materials.Steel), 'S', OrePrefixes.stick.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Firebox_Titanium.get(1L), + bits, + new Object[] { "PSP", "SFS", "PSP", 'P', OrePrefixes.plate.get(Materials.Titanium), 'F', + OrePrefixes.frameGt.get(Materials.Titanium), 'S', OrePrefixes.stick.get(Materials.Titanium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Firebox_TungstenSteel.get(1L), + bits, + new Object[] { "PSP", "SFS", "PSP", 'P', OrePrefixes.plate.get(Materials.TungstenSteel), 'F', + OrePrefixes.frameGt.get(Materials.TungstenSteel), 'S', + OrePrefixes.stick.get(Materials.TungstenSteel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Stripes_A.get(1L), + bits, + new Object[] { "Y ", " M ", " B", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', + Dyes.dyeBlack }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Stripes_B.get(1L), + bits, + new Object[] { " Y", " M ", "B ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', + Dyes.dyeBlack }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_RadioactiveHazard.get(1L), + bits, + new Object[] { " YB", " M ", " ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', + Dyes.dyeBlack }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_BioHazard.get(1L), + bits, + new Object[] { " Y ", " MB", " ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', + Dyes.dyeBlack }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_ExplosionHazard.get(1L), + bits, + new Object[] { " Y ", " M ", " B", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', + Dyes.dyeBlack }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_FireHazard.get(1L), + bits, + new Object[] { " Y ", " M ", " B ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', + Dyes.dyeBlack }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_AcidHazard.get(1L), + bits, + new Object[] { " Y ", " M ", "B ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', + Dyes.dyeBlack }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_MagicHazard.get(1L), + bits, + new Object[] { " Y ", "BM ", " ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', + Dyes.dyeBlack }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_FrostHazard.get(1L), + bits, + new Object[] { "BY ", " M ", " ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', + Dyes.dyeBlack }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_NoiseHazard.get(1L), + bits, + new Object[] { " ", " M ", "BY ", 'M', ItemList.Casing_SolidSteel, 'Y', Dyes.dyeYellow, 'B', + Dyes.dyeBlack }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_Advanced_Iridium.get(1L), + bits, + new Object[] { "PhP", "PFP", aTextPlateWrench, 'P', OrePrefixes.plate.get(Materials.Iridium), 'F', + OrePrefixes.frameGt.get(Materials.Iridium) }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_Bricked_BlastFurnace.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "BFB", "FwF", "BFB", 'B', ItemList.Casing_Firebricks, 'F', + OreDictNames.craftingIronFurnace }); + + GTModHandler.addCraftingRecipe( + ItemList.Hull_Bronze.get(1L), + bits, + new Object[] { aTextPlate, "PhP", aTextPlate, 'P', OrePrefixes.plate.get(Materials.Bronze) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_Bronze_Bricks.get(1L), + bits, + new Object[] { aTextPlate, "PhP", "BBB", 'P', OrePrefixes.plate.get(Materials.Bronze), 'B', + new ItemStack(Blocks.brick_block, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_HP.get(1L), + bits, + new Object[] { aTextPlate, "PhP", aTextPlate, 'P', OrePrefixes.plate.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_HP_Bricks.get(1L), + bits, + new Object[] { aTextPlate, "PhP", "BBB", 'P', OrePrefixes.plate.get(Materials.WroughtIron), 'B', + new ItemStack(Blocks.brick_block, 1) }); + + // hull crafting recipes. (They can't be used for recycling as that would create an exploit loop with the + // assembler recipes.) + + GTModHandler.addCraftingRecipe( + ItemList.Hull_ULV.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_ULV, 'C', + OrePrefixes.cableGt01.get(Materials.Lead), 'H', OrePrefixes.plate.get(Materials.WroughtIron), 'P', + OrePrefixes.plate.get(Materials.Wood) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_LV.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_LV, 'C', + OrePrefixes.cableGt01.get(Materials.Tin), 'H', OrePrefixes.plate.get(Materials.Steel), 'P', + OrePrefixes.plate.get(Materials.WroughtIron) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_MV.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_MV, 'C', + OrePrefixes.cableGt01.get(Materials.Copper), 'H', OrePrefixes.plate.get(Materials.Aluminium), 'P', + OrePrefixes.plate.get(Materials.WroughtIron) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_HV.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_HV, 'C', + OrePrefixes.cableGt01.get(Materials.Gold), 'H', OrePrefixes.plate.get(Materials.StainlessSteel), 'P', + OrePrefixes.plate.get(Materials.Plastic) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_EV.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_EV, 'C', + OrePrefixes.cableGt01.get(Materials.Aluminium), 'H', OrePrefixes.plate.get(Materials.Titanium), 'P', + OrePrefixes.plate.get(Materials.Plastic) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_IV.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_IV, 'C', + OrePrefixes.cableGt01.get(Materials.Tungsten), 'H', OrePrefixes.plate.get(Materials.TungstenSteel), 'P', + OrePrefixes.plate.get(Materials.Polytetrafluoroethylene) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_LuV.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_LuV, 'C', + OrePrefixes.cableGt01.get(Materials.VanadiumGallium), 'H', + OrePrefixes.plate.get(ExternalMaterials.getRhodiumPlatedPalladium()), 'P', + OrePrefixes.plate.get(Materials.Polytetrafluoroethylene) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_ZPM.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_ZPM, 'C', + OrePrefixes.cableGt01.get(Materials.Naquadah), 'H', OrePrefixes.plate.get(Materials.Iridium), 'P', + OrePrefixes.plate.get(Materials.Polybenzimidazole) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_UV.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_UV, 'C', + OrePrefixes.wireGt04.get(Materials.NaquadahAlloy), 'H', OrePrefixes.plate.get(Materials.Osmium), 'P', + OrePrefixes.plate.get(Materials.Polybenzimidazole) }); + GTModHandler.addCraftingRecipe( + ItemList.Hull_MAX.get(1L), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PHP", aTextCableHull, 'M', ItemList.Casing_MAX, 'C', + OrePrefixes.wireGt04.get(Materials.SuperconductorUV), 'H', OrePrefixes.plate.get(Materials.Neutronium), + 'P', OrePrefixes.plate.get(Materials.Polybenzimidazole) }); + + // hull recycling data + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hull_ULV.get(1L), + ItemList.Casing_ULV.get(1), + OrePrefixes.cableGt01.get(Materials.Lead), + OrePrefixes.cableGt01.get(Materials.Lead)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hull_LV.get(1L), + ItemList.Casing_LV.get(1), + OrePrefixes.cableGt01.get(Materials.Tin), + OrePrefixes.cableGt01.get(Materials.Tin)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hull_MV.get(1L), + ItemList.Casing_MV.get(1), + OrePrefixes.cableGt01.get(Materials.AnyCopper), + OrePrefixes.cableGt01.get(Materials.AnyCopper)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hull_HV.get(1L), + ItemList.Casing_HV.get(1), + OrePrefixes.cableGt01.get(Materials.Gold), + OrePrefixes.cableGt01.get(Materials.Gold)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hull_EV.get(1L), + ItemList.Casing_EV.get(1), + OrePrefixes.cableGt01.get(Materials.Aluminium), + OrePrefixes.cableGt01.get(Materials.Aluminium)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hull_IV.get(1L), + ItemList.Casing_IV.get(1), + OrePrefixes.cableGt01.get(Materials.Tungsten), + OrePrefixes.cableGt01.get(Materials.Tungsten)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hull_LuV.get(1L), + ItemList.Casing_LuV.get(1), + OrePrefixes.cableGt01.get(Materials.VanadiumGallium), + OrePrefixes.cableGt01.get(Materials.VanadiumGallium)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hull_ZPM.get(1L), + ItemList.Casing_ZPM.get(1), + OrePrefixes.cableGt02.get(Materials.Naquadah), + OrePrefixes.cableGt02.get(Materials.Naquadah)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hull_UV.get(1L), + ItemList.Casing_UV.get(1), + OrePrefixes.cableGt04.get(Materials.NaquadahAlloy), + OrePrefixes.cableGt04.get(Materials.NaquadahAlloy)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hull_MAX.get(1L), + ItemList.Casing_MAX.get(1), + OrePrefixes.cableGt04.get(Materials.SuperconductorUV), + OrePrefixes.cableGt04.get(Materials.SuperconductorUV)); + + GTModHandler.addCraftingRecipe( + ItemList.Transformer_LV_ULV.get(1L), + bitsd, + new Object[] { " BB", "CM ", " BB", 'M', ItemList.Hull_ULV, 'C', OrePrefixes.cableGt01.get(Materials.Tin), + 'B', OrePrefixes.cableGt01.get(Materials.Lead) }); + GTModHandler.addCraftingRecipe( + ItemList.Transformer_MV_LV.get(1L), + bitsd, + new Object[] { " BB", "CM ", " BB", 'M', ItemList.Hull_LV, 'C', + OrePrefixes.cableGt01.get(Materials.AnyCopper), 'B', OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Transformer_HV_MV.get(1L), + bitsd, + new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_MV, 'C', OrePrefixes.cableGt01.get(Materials.Gold), + 'B', OrePrefixes.cableGt01.get(Materials.AnyCopper), 'K', + OrePrefixes.componentCircuit.get(Materials.Inductor) }); + GTModHandler.addCraftingRecipe( + ItemList.Transformer_EV_HV.get(1L), + bitsd, + new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_HV, 'C', + OrePrefixes.cableGt01.get(Materials.Aluminium), 'B', OrePrefixes.cableGt01.get(Materials.Gold), 'K', + ItemList.Circuit_Chip_ULPIC }); + GTModHandler.addCraftingRecipe( + ItemList.Transformer_IV_EV.get(1L), + bitsd, + new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_EV, 'C', + OrePrefixes.cableGt01.get(Materials.Tungsten), 'B', OrePrefixes.cableGt01.get(Materials.Aluminium), 'K', + ItemList.Circuit_Chip_LPIC }); + GTModHandler.addCraftingRecipe( + ItemList.Transformer_LuV_IV.get(1L), + bitsd, + new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_IV, 'C', + OrePrefixes.cableGt01.get(Materials.VanadiumGallium), 'B', + OrePrefixes.cableGt01.get(Materials.Tungsten), 'K', ItemList.Circuit_Chip_PIC }); + GTModHandler.addCraftingRecipe( + ItemList.Transformer_ZPM_LuV.get(1L), + bitsd, + new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_LuV, 'C', + OrePrefixes.cableGt01.get(Materials.Naquadah), 'B', + OrePrefixes.cableGt01.get(Materials.VanadiumGallium), 'K', ItemList.Circuit_Chip_HPIC }); + GTModHandler.addCraftingRecipe( + ItemList.Transformer_UV_ZPM.get(1L), + bitsd, + new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_ZPM, 'C', + OrePrefixes.cableGt01.get(Materials.NaquadahAlloy), 'B', OrePrefixes.cableGt01.get(Materials.Naquadah), + 'K', ItemList.Circuit_Chip_UHPIC }); + GTModHandler.addCraftingRecipe( + ItemList.Transformer_MAX_UV.get(1L), + bitsd, + new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Hull_UV, 'C', + OrePrefixes.wireGt01.get(Materials.Bedrockium), 'B', OrePrefixes.cableGt01.get(Materials.NaquadahAlloy), + 'K', ItemList.Circuit_Chip_NPIC }); + + GTModHandler.addCraftingRecipe( + ItemList.Hatch_Dynamo_ULV.get(1L), + bitsd, + new Object[] { "XOL", "SMP", "XOL", 'M', ItemList.Hull_ULV, 'S', OrePrefixes.spring.get(Materials.Lead), + 'X', OrePrefixes.circuit.get(Materials.ULV), 'O', ItemList.ULV_Coil, 'L', + OrePrefixes.cell.get(Materials.Lubricant), 'P', OrePrefixes.rotor.get(Materials.Lead) }); + GTModHandler.addCraftingRecipe( + ItemList.Hatch_Dynamo_LV.get(1L), + bitsd, + new Object[] { "XOL", "SMP", "XOL", 'M', ItemList.Hull_LV, 'S', OrePrefixes.spring.get(Materials.Tin), 'X', + OrePrefixes.circuit.get(Materials.LV), 'O', ItemList.LV_Coil, 'L', + OrePrefixes.cell.get(Materials.Lubricant), 'P', ItemList.Electric_Pump_LV }); + GTModHandler.addCraftingRecipe( + ItemList.Hatch_Dynamo_MV.get(1L), + bitsd, + new Object[] { "XOL", "SMP", "XOL", 'M', ItemList.Hull_MV, 'S', OrePrefixes.spring.get(Materials.Copper), + 'X', ItemList.Circuit_Chip_ULPIC, 'O', ItemList.MV_Coil, 'L', OrePrefixes.cell.get(Materials.Lubricant), + 'P', ItemList.Electric_Pump_MV }); + GTModHandler.addCraftingRecipe( + ItemList.Hatch_Energy_ULV.get(1L), + bitsd, + new Object[] { "COL", "XMP", "COL", 'M', ItemList.Hull_ULV, 'C', OrePrefixes.cableGt01.get(Materials.Lead), + 'X', OrePrefixes.circuit.get(Materials.ULV), 'O', ItemList.ULV_Coil, 'L', + OrePrefixes.cell.get(Materials.Lubricant), 'P', OrePrefixes.rotor.get(Materials.Lead) }); + GTModHandler.addCraftingRecipe( + ItemList.Hatch_Energy_LV.get(1L), + bitsd, + new Object[] { "COL", "XMP", "COL", 'M', ItemList.Hull_LV, 'C', OrePrefixes.cableGt01.get(Materials.Tin), + 'X', OrePrefixes.circuit.get(Materials.LV), 'O', ItemList.LV_Coil, 'L', + OrePrefixes.cell.get(Materials.Lubricant), 'P', ItemList.Electric_Pump_LV }); + GTModHandler.addCraftingRecipe( + ItemList.Hatch_Energy_MV.get(1L), + bitsd, + new Object[] { "XOL", "CMP", "XOL", 'M', ItemList.Hull_MV, 'C', OrePrefixes.cableGt01.get(Materials.Copper), + 'X', ItemList.Circuit_Chip_ULPIC, 'O', ItemList.MV_Coil, 'L', OrePrefixes.cell.get(Materials.Lubricant), + 'P', ItemList.Electric_Pump_MV }); + GTModHandler.addCraftingRecipe( + ItemList.Hatch_Maintenance.get(1L), + bitsd, + new Object[] { "dwx", "hMc", "fsr", 'M', ItemList.Hull_LV }); + + GTModHandler.addCraftingRecipe( + ItemList.Hatch_DataAccess_EV.get(1L), + bitsd, + new Object[] { "COC", "OMO", "COC", 'M', ItemList.Hull_EV, 'O', ItemList.Tool_DataStick, 'C', + OrePrefixes.circuit.get(Materials.IV) }); + GTModHandler.addCraftingRecipe( + ItemList.Hatch_DataAccess_LuV.get(1L), + bitsd, + new Object[] { "COC", "OMO", "COC", 'M', ItemList.Hull_LuV, 'O', ItemList.Tool_DataOrb, 'C', + OrePrefixes.circuit.get(Materials.ZPM) }); + GTModHandler.addCraftingRecipe( + ItemList.Hatch_DataAccess_UV.get(1L), + bitsd, + new Object[] { "CRC", "OMO", "CRC", 'M', ItemList.Hull_UV, 'O', ItemList.Tool_DataOrb, 'C', + OrePrefixes.circuit.get(Materials.UHV), 'R', ItemList.Robot_Arm_UV }); + + GTModHandler.addCraftingRecipe( + ItemList.Hatch_AutoMaintenance.get(1L), + bitsd, + new Object[] { "CHC", "AMA", "CHC", 'M', ItemList.Hull_LuV, 'H', ItemList.Hatch_Maintenance, 'A', + ItemList.Robot_Arm_LuV, 'C', OrePrefixes.circuit.get(Materials.ZPM) }); + + GTModHandler.addCraftingRecipe( + ItemList.Hatch_Muffler_LV.get(1L), + bitsd, + new Object[] { "MX ", "PR ", 'M', ItemList.Hull_LV, 'P', OrePrefixes.pipeMedium.get(Materials.Bronze), 'R', + OrePrefixes.rotor.get(Materials.Bronze), 'X', ItemList.Electric_Motor_LV }); + GTModHandler.addCraftingRecipe( + ItemList.Hatch_Muffler_MV.get(1L), + bitsd, + new Object[] { "MX ", "PR ", 'M', ItemList.Hull_MV, 'P', OrePrefixes.pipeMedium.get(Materials.Steel), 'R', + OrePrefixes.rotor.get(Materials.Steel), 'X', ItemList.Electric_Motor_MV }); + + // recycling data for the other mufflers, recipes are in assembler + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hatch_Muffler_HV.get(1L), + ItemList.Hull_HV.get(1), + OrePrefixes.pipeLarge.get(Materials.StainlessSteel), + OrePrefixes.rotor.get(Materials.StainlessSteel), + ItemList.Electric_Motor_HV.get(1)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hatch_Muffler_EV.get(1L), + ItemList.Hull_EV.get(1), + OrePrefixes.pipeLarge.get(Materials.Titanium), + OrePrefixes.rotor.get(Materials.Titanium), + ItemList.Electric_Motor_EV.get(1)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hatch_Muffler_IV.get(1L), + ItemList.Hull_IV.get(1), + OrePrefixes.pipeLarge.get(Materials.TungstenSteel), + OrePrefixes.rotor.get(Materials.TungstenSteel), + ItemList.Electric_Motor_IV.get(1)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hatch_Muffler_LuV.get(1L), + ItemList.Hull_LuV.get(1), + OrePrefixes.pipeLarge.get(Materials.Enderium), + OrePrefixes.rotor.get(Materials.Enderium), + ItemList.Electric_Motor_LuV.get(1)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hatch_Muffler_ZPM.get(1L), + ItemList.Hull_ZPM.get(1), + OrePrefixes.pipeLarge.get(Materials.Naquadah), + OrePrefixes.rotor.get(Materials.NaquadahAlloy), + ItemList.Electric_Motor_ZPM.get(1)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hatch_Muffler_UV.get(1L), + ItemList.Hull_UV.get(1), + OrePrefixes.pipeLarge.get(Materials.NetherStar), + OrePrefixes.rotor.get(Materials.Neutronium), + ItemList.Electric_Motor_UV.get(1)); + GTOreDictUnificator.addItemDataFromInputs( + ItemList.Hatch_Muffler_MAX.get(1L), + ItemList.Hull_MAX.get(1), + OrePrefixes.pipeLarge.get(Materials.MysteriousCrystal), + OrePrefixes.rotor.get(Materials.CosmicNeutronium), + ItemList.Electric_Motor_UHV.get(1)); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_Bronze_Boiler.get(1L), + bitsd, + new Object[] { aTextPlate, "PwP", "BFB", 'F', OreDictNames.craftingIronFurnace, 'P', + OrePrefixes.plate.get(Materials.Bronze), 'B', new ItemStack(Blocks.brick_block, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Steel_Boiler.get(1L), + bitsd, + new Object[] { aTextPlate, "PwP", "BFB", 'F', OreDictNames.craftingIronFurnace, 'P', + OrePrefixes.plate.get(Materials.Steel), 'B', new ItemStack(Blocks.brick_block, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Steel_Boiler_Lava.get(1L), + bitsd, + new Object[] { aTextPlate, "PTP", aTextPlateMotor, 'M', ItemList.Hull_HP, 'P', + OrePrefixes.plate.get(Materials.Steel), 'T', + GTModHandler.getModItem(BuildCraftFactory.ID, "tankBlock", 1L, 0) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Bronze_Boiler_Solar.get(1L), + bitsd, + new Object[] { "GGG", "SSS", aTextPlateMotor, 'M', ItemList.Hull_Bronze_Bricks, 'P', + OrePrefixes.pipeSmall.get(Materials.Bronze), 'S', OrePrefixes.plateDouble.get(Materials.Silver), 'G', + new ItemStack(Blocks.glass, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HP_Solar.get(1L), + bitsd, + new Object[] { "GGG", "SSS", aTextPlateMotor, 'M', ItemList.Hull_HP_Bricks, 'P', + OrePrefixes.pipeSmall.get(Materials.Steel), 'S', OrePrefixes.plateTriple.get(Materials.Silver), 'G', + GTModHandler.getModItem(IndustrialCraft2.ID, "blockAlloyGlass", 1L) }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_Bronze_Furnace.get(1L), + bitsd, + new Object[] { "XXX", "XMX", "XFX", 'M', ItemList.Hull_Bronze_Bricks, 'X', + OrePrefixes.pipeSmall.get(Materials.Bronze), 'F', OreDictNames.craftingFurnace }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HP_Furnace.get(1L), + bitsd, + new Object[] { "XSX", "PMP", "XXX", 'M', ItemList.Machine_Bronze_Furnace, 'X', + OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), + 'S', OrePrefixes.plate.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Bronze_Macerator.get(1L), + bitsd, + new Object[] { "DXD", "XMX", "PXP", 'M', ItemList.Hull_Bronze, 'X', + OrePrefixes.pipeSmall.get(Materials.Bronze), 'P', OreDictNames.craftingPiston, 'D', + OrePrefixes.gem.get(Materials.Diamond) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HP_Macerator.get(1L), + bitsd, + new Object[] { "PSP", "XMX", "PPP", 'M', ItemList.Machine_Bronze_Macerator, 'X', + OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), + 'S', OrePrefixes.plate.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Bronze_Extractor.get(1L), + bitsd, + new Object[] { "XXX", "PMG", "XXX", 'M', ItemList.Hull_Bronze, 'X', + OrePrefixes.pipeSmall.get(Materials.Bronze), 'P', OreDictNames.craftingPiston, 'G', + new ItemStack(Blocks.glass, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HP_Extractor.get(1L), + bitsd, + new Object[] { "XSX", "PMP", "XXX", 'M', ItemList.Machine_Bronze_Extractor, 'X', + OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), + 'S', OrePrefixes.plate.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Bronze_Hammer.get(1L), + bitsd, + new Object[] { "XPX", "XMX", "XAX", 'M', ItemList.Hull_Bronze, 'X', + OrePrefixes.pipeSmall.get(Materials.Bronze), 'P', OreDictNames.craftingPiston, 'A', + OreDictNames.craftingAnvil }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HP_Hammer.get(1L), + bitsd, + new Object[] { "PSP", "XMX", "PPP", 'M', ItemList.Machine_Bronze_Hammer, 'X', + OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), + 'S', OrePrefixes.plate.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Bronze_Compressor.get(1L), + bitsd, + new Object[] { "XXX", aTextPlateMotor, "XXX", 'M', ItemList.Hull_Bronze, 'X', + OrePrefixes.pipeSmall.get(Materials.Bronze), 'P', OreDictNames.craftingPiston }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HP_Compressor.get(1L), + bitsd, + new Object[] { "XSX", "PMP", "XXX", 'M', ItemList.Machine_Bronze_Compressor, 'X', + OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), + 'S', OrePrefixes.plate.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Bronze_AlloySmelter.get(1L), + bitsd, + new Object[] { "XXX", "FMF", "XXX", 'M', ItemList.Hull_Bronze_Bricks, 'X', + OrePrefixes.pipeSmall.get(Materials.Bronze), 'F', OreDictNames.craftingFurnace }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HP_AlloySmelter.get(1L), + bitsd, + new Object[] { "PSP", "PMP", "PXP", 'M', ItemList.Machine_Bronze_AlloySmelter, 'X', + OrePrefixes.pipeSmall.get(Materials.WroughtIron), 'P', OrePrefixes.plate.get(Materials.WroughtIron), + 'S', OrePrefixes.plate.get(Materials.Steel) }); + + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_1by1_ULV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ULV, 'W', + OrePrefixes.wireGt01.get(Materials.Lead), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_1by1_LV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LV, 'W', + OrePrefixes.wireGt01.get(Materials.Tin), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_1by1_MV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MV, 'W', + OrePrefixes.wireGt01.get(Materials.AnyCopper), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_1by1_HV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_HV, 'W', + OrePrefixes.wireGt01.get(Materials.Gold), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_1by1_EV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_EV, 'W', + OrePrefixes.wireGt01.get(Materials.Aluminium), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_1by1_IV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_IV, 'W', + OrePrefixes.wireGt01.get(Materials.Tungsten), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_1by1_LuV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LuV, 'W', + OrePrefixes.wireGt01.get(Materials.VanadiumGallium), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_1by1_ZPM.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ZPM, 'W', + OrePrefixes.wireGt01.get(Materials.Naquadah), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_1by1_UV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_UV, 'W', + OrePrefixes.wireGt01.get(Materials.NaquadahAlloy), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_1by1_UHV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MAX, 'W', + OrePrefixes.wireGt01.get(Materials.SuperconductorUHV), 'T', OreDictNames.craftingChest }); + + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_2by2_ULV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ULV, 'W', + OrePrefixes.wireGt04.get(Materials.Lead), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_2by2_LV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LV, 'W', + OrePrefixes.wireGt04.get(Materials.Tin), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_2by2_MV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MV, 'W', + OrePrefixes.wireGt04.get(Materials.AnyCopper), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_2by2_HV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_HV, 'W', + OrePrefixes.wireGt04.get(Materials.Gold), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_2by2_EV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_EV, 'W', + OrePrefixes.wireGt04.get(Materials.Aluminium), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_2by2_IV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_IV, 'W', + OrePrefixes.wireGt04.get(Materials.Tungsten), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_2by2_LuV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LuV, 'W', + OrePrefixes.wireGt04.get(Materials.VanadiumGallium), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_2by2_ZPM.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ZPM, 'W', + OrePrefixes.wireGt04.get(Materials.Naquadah), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_2by2_UV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_UV, 'W', + OrePrefixes.wireGt04.get(Materials.NaquadahAlloy), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_2by2_UHV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MAX, 'W', + OrePrefixes.wireGt04.get(Materials.SuperconductorUHV), 'T', OreDictNames.craftingChest }); + + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_3by3_ULV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ULV, 'W', + OrePrefixes.wireGt08.get(Materials.Lead), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_3by3_LV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LV, 'W', + OrePrefixes.wireGt08.get(Materials.Tin), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_3by3_MV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MV, 'W', + OrePrefixes.wireGt08.get(Materials.AnyCopper), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_3by3_HV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_HV, 'W', + OrePrefixes.wireGt08.get(Materials.Gold), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_3by3_EV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_EV, 'W', + OrePrefixes.wireGt08.get(Materials.Aluminium), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_3by3_IV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_IV, 'W', + OrePrefixes.wireGt08.get(Materials.Tungsten), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_3by3_LuV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LuV, 'W', + OrePrefixes.wireGt08.get(Materials.VanadiumGallium), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_3by3_ZPM.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ZPM, 'W', + OrePrefixes.wireGt08.get(Materials.Naquadah), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_3by3_UV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_UV, 'W', + OrePrefixes.wireGt08.get(Materials.NaquadahAlloy), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_3by3_UHV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MAX, 'W', + OrePrefixes.wireGt08.get(Materials.SuperconductorUHV), 'T', OreDictNames.craftingChest }); + + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_4by4_ULV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ULV, 'W', + OrePrefixes.wireGt16.get(Materials.Lead), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_4by4_LV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LV, 'W', + OrePrefixes.wireGt16.get(Materials.Tin), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_4by4_MV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MV, 'W', + OrePrefixes.wireGt16.get(Materials.AnyCopper), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_4by4_HV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_HV, 'W', + OrePrefixes.wireGt16.get(Materials.Gold), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_4by4_EV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_EV, 'W', + OrePrefixes.wireGt16.get(Materials.Aluminium), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_4by4_IV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_IV, 'W', + OrePrefixes.wireGt16.get(Materials.Tungsten), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_4by4_LuV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_LuV, 'W', + OrePrefixes.wireGt16.get(Materials.VanadiumGallium), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_4by4_ZPM.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_ZPM, 'W', + OrePrefixes.wireGt16.get(Materials.Naquadah), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_4by4_UV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_UV, 'W', + OrePrefixes.wireGt16.get(Materials.NaquadahAlloy), 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Buffer_4by4_UHV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, 'M', ItemList.Hull_MAX, 'W', + OrePrefixes.wireGt16.get(Materials.SuperconductorUHV), 'T', OreDictNames.craftingChest }); + + GTModHandler.addCraftingRecipe( + ItemList.Battery_Charger_4by4_ULV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_ULV, 'W', + OrePrefixes.wireGt16.get(Materials.Lead), 'T', OreDictNames.craftingChest, 'B', + ItemList.Battery_RE_ULV_Tantalum, 'C', OrePrefixes.circuit.get(Materials.ULV) }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Charger_4by4_LV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_LV, 'W', + OrePrefixes.wireGt16.get(Materials.Tin), 'T', OreDictNames.craftingChest, 'B', + ItemList.Battery_RE_LV_Lithium, 'C', OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Charger_4by4_MV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_MV, 'W', + OrePrefixes.wireGt16.get(Materials.AnyCopper), 'T', OreDictNames.craftingChest, 'B', + ItemList.Battery_RE_MV_Lithium, 'C', OrePrefixes.circuit.get(Materials.MV) }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Charger_4by4_HV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_HV, 'W', + OrePrefixes.wireGt16.get(Materials.Gold), 'T', OreDictNames.craftingChest, 'B', + ItemList.Battery_RE_HV_Lithium, 'C', OrePrefixes.circuit.get(Materials.HV) }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Charger_4by4_EV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_EV, 'W', + OrePrefixes.wireGt16.get(Materials.Aluminium), 'T', OreDictNames.craftingChest, 'B', + OrePrefixes.battery.get(Materials.EV), 'C', OrePrefixes.circuit.get(Materials.EV) }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Charger_4by4_IV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_IV, 'W', + OrePrefixes.wireGt16.get(Materials.Tungsten), 'T', OreDictNames.craftingChest, 'B', + OrePrefixes.battery.get(Materials.IV), 'C', OrePrefixes.circuit.get(Materials.IV) }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Charger_4by4_LuV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_LuV, 'W', + OrePrefixes.wireGt16.get(Materials.VanadiumGallium), 'T', OreDictNames.craftingChest, 'B', + OrePrefixes.battery.get(Materials.LuV), 'C', OrePrefixes.circuit.get(Materials.LuV) }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Charger_4by4_ZPM.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_ZPM, 'W', + OrePrefixes.wireGt16.get(Materials.Naquadah), 'T', OreDictNames.craftingChest, 'B', + OrePrefixes.battery.get(Materials.ZPM), 'C', OrePrefixes.circuit.get(Materials.ZPM) }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Charger_4by4_UV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_UV, 'W', + OrePrefixes.wireGt16.get(Materials.NaquadahAlloy), 'T', OreDictNames.craftingChest, 'B', ItemList.ZPM2, + 'C', OrePrefixes.circuit.get(Materials.UV) }); + GTModHandler.addCraftingRecipe( + ItemList.Battery_Charger_4by4_UHV.get(1L), + bitsd, + new Object[] { aTextWireChest, aTextWireHull, "BCB", 'M', ItemList.Hull_MAX, 'W', + OrePrefixes.wireGt16.get(Materials.SuperconductorUHV), 'T', OreDictNames.craftingChest, 'B', + ItemList.ZPM2, 'C', OrePrefixes.circuit.get(Materials.UHV) }); + + GTModHandler.addCraftingRecipe( + ItemList.Locker_ULV.get(1L), + bitsd, + new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_ULV, 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Locker_LV.get(1L), + bitsd, + new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_LV, 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Locker_MV.get(1L), + bitsd, + new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_MV, 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Locker_HV.get(1L), + bitsd, + new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_HV, 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Locker_EV.get(1L), + bitsd, + new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_EV, 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Locker_IV.get(1L), + bitsd, + new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_IV, 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Locker_LuV.get(1L), + bitsd, + new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_LuV, 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Locker_ZPM.get(1L), + bitsd, + new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_ZPM, 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Locker_UV.get(1L), + bitsd, + new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_UV, 'T', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Locker_MAX.get(1L), + bitsd, + new Object[] { "T", "M", 'M', ItemList.Battery_Buffer_2by2_UHV, 'T', OreDictNames.craftingChest }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_LV_Scanner.get(1L), + bitsd, + new Object[] { "CTC", aTextWireHull, "CRC", 'M', ItemList.Hull_LV, 'T', ItemList.Emitter_LV, 'R', + ItemList.Sensor_LV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', + OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_MV_Scanner.get(1L), + bitsd, + new Object[] { "CTC", aTextWireHull, "CRC", 'M', ItemList.Hull_MV, 'T', ItemList.Emitter_MV, 'R', + ItemList.Sensor_MV, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', + OrePrefixes.cableGt01.get(Materials.AnyCopper) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HV_Scanner.get(1L), + bitsd, + new Object[] { "CTC", aTextWireHull, "CRC", 'M', ItemList.Hull_HV, 'T', ItemList.Emitter_HV, 'R', + ItemList.Sensor_HV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', + OrePrefixes.cableGt01.get(Materials.Gold) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_EV_Scanner.get(1L), + bitsd, + new Object[] { "CTC", aTextWireHull, "CRC", 'M', ItemList.Hull_EV, 'T', ItemList.Emitter_EV, 'R', + ItemList.Sensor_EV, 'C', OrePrefixes.circuit.get(Materials.IV), 'W', + OrePrefixes.cableGt01.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_IV_Scanner.get(1L), + bitsd, + new Object[] { "CTC", aTextWireHull, "CRC", 'M', ItemList.Hull_IV, 'T', ItemList.Emitter_IV, 'R', + ItemList.Sensor_IV, 'C', OrePrefixes.circuit.get(Materials.LuV), 'W', + OrePrefixes.cableGt01.get(Materials.Tungsten) }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_LV_Boxinator.get(1L), + bitsd, + new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_LV, 'R', ItemList.Robot_Arm_LV, 'V', + ItemList.Conveyor_Module_LV, 'C', OrePrefixes.circuit.get(Materials.LV), 'W', + OrePrefixes.cableGt01.get(Materials.Tin), 'B', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_MV_Boxinator.get(1L), + bitsd, + new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_MV, 'R', ItemList.Robot_Arm_MV, 'V', + ItemList.Conveyor_Module_MV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', + OrePrefixes.cableGt01.get(Materials.AnyCopper), 'B', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HV_Boxinator.get(1L), + bitsd, + new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_HV, 'R', ItemList.Robot_Arm_HV, 'V', + ItemList.Conveyor_Module_HV, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', + OrePrefixes.cableGt01.get(Materials.Gold), 'B', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_EV_Boxinator.get(1L), + bitsd, + new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_EV, 'R', ItemList.Robot_Arm_EV, 'V', + ItemList.Conveyor_Module_EV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', + OrePrefixes.cableGt01.get(Materials.Aluminium), 'B', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_IV_Boxinator.get(1L), + bitsd, + new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_IV, 'R', ItemList.Robot_Arm_IV, 'V', + ItemList.Conveyor_Module_IV, 'C', OrePrefixes.circuit.get(Materials.IV), 'W', + OrePrefixes.cableGt01.get(Materials.Tungsten), 'B', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_LuV_Boxinator.get(1L), + bitsd, + new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_LuV, 'R', ItemList.Robot_Arm_LuV, 'V', + ItemList.Conveyor_Module_LuV, 'C', OrePrefixes.circuit.get(Materials.LuV), 'W', + OrePrefixes.cableGt01.get(Materials.VanadiumGallium), 'B', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_ZPM_Boxinator.get(1L), + bitsd, + new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_ZPM, 'R', ItemList.Robot_Arm_ZPM, 'V', + ItemList.Conveyor_Module_ZPM, 'C', OrePrefixes.circuit.get(Materials.ZPM), 'W', + OrePrefixes.cableGt01.get(Materials.Naquadah), 'B', OreDictNames.craftingChest }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_UV_Boxinator.get(1L), + bitsd, + new Object[] { "BCB", "RMV", aTextWireCoil, 'M', ItemList.Hull_UV, 'R', ItemList.Robot_Arm_UV, 'V', + ItemList.Conveyor_Module_UV, 'C', OrePrefixes.circuit.get(Materials.UV), 'W', + OrePrefixes.cableGt01.get(Materials.NaquadahAlloy), 'B', OreDictNames.craftingChest }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_LV_RockBreaker.get(1L), + bitsd, + new Object[] { "PED", aTextWireHull, "GGG", 'M', ItemList.Hull_LV, 'D', OreDictNames.craftingGrinder, 'E', + ItemList.Electric_Motor_LV, 'P', ItemList.Electric_Piston_LV, 'C', + OrePrefixes.circuit.get(Materials.LV), 'W', OrePrefixes.cableGt01.get(Materials.Tin), 'G', + new ItemStack(Blocks.glass, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_MV_RockBreaker.get(1L), + bitsd, + new Object[] { "PED", aTextWireHull, "GGG", 'M', ItemList.Hull_MV, 'D', OreDictNames.craftingGrinder, 'E', + ItemList.Electric_Motor_MV, 'P', ItemList.Electric_Piston_MV, 'C', + OrePrefixes.circuit.get(Materials.MV), 'W', OrePrefixes.cableGt01.get(Materials.AnyCopper), 'G', + new ItemStack(Blocks.glass, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HV_RockBreaker.get(1L), + bitsd, + new Object[] { "PED", aTextWireHull, "GGG", 'M', ItemList.Hull_HV, 'D', OreDictNames.craftingGrinder, 'E', + ItemList.Electric_Motor_HV, 'P', ItemList.Electric_Piston_HV, 'C', + OrePrefixes.circuit.get(Materials.HV), 'W', OrePrefixes.cableGt01.get(Materials.Gold), 'G', + new ItemStack(Blocks.glass, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_EV_RockBreaker.get(1L), + bitsd, + new Object[] { "PED", aTextWireHull, "GGG", 'M', ItemList.Hull_EV, 'D', OreDictNames.craftingGrinder, 'E', + ItemList.Electric_Motor_EV, 'P', ItemList.Electric_Piston_EV, 'C', + OrePrefixes.circuit.get(Materials.EV), 'W', OrePrefixes.cableGt01.get(Materials.Aluminium), 'G', + new ItemStack(Blocks.glass, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_IV_RockBreaker.get(1L), + bitsd, + new Object[] { "PED", aTextWireHull, "GGG", 'M', ItemList.Hull_IV, 'D', OreDictNames.craftingGrinder, 'E', + ItemList.Electric_Motor_IV, 'P', ItemList.Electric_Piston_IV, 'C', + OrePrefixes.circuit.get(Materials.IV), 'W', OrePrefixes.cableGt01.get(Materials.Tungsten), 'G', + new ItemStack(Blocks.glass, 1) }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_LV_Massfab.get(1L), + bitsd, + new Object[] { "CFC", aTextWireHull, "CFC", 'M', ItemList.Hull_LV, 'F', ItemList.Field_Generator_LV, 'C', + OrePrefixes.circuit.get(Materials.MV), 'W', OrePrefixes.cableGt04.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_MV_Massfab.get(1L), + bitsd, + new Object[] { "CFC", aTextWireHull, "CFC", 'M', ItemList.Hull_MV, 'F', ItemList.Field_Generator_MV, 'C', + OrePrefixes.circuit.get(Materials.HV), 'W', OrePrefixes.cableGt04.get(Materials.AnyCopper) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HV_Massfab.get(1L), + bitsd, + new Object[] { "CFC", aTextWireHull, "CFC", 'M', ItemList.Hull_HV, 'F', ItemList.Field_Generator_HV, 'C', + OrePrefixes.circuit.get(Materials.EV), 'W', OrePrefixes.cableGt04.get(Materials.Gold) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_EV_Massfab.get(1L), + bitsd, + new Object[] { "CFC", aTextWireHull, "CFC", 'M', ItemList.Hull_EV, 'F', ItemList.Field_Generator_EV, 'C', + OrePrefixes.circuit.get(Materials.IV), 'W', OrePrefixes.cableGt04.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_IV_Massfab.get(1L), + bitsd, + new Object[] { "CFC", aTextWireHull, "CFC", 'M', ItemList.Hull_IV, 'F', ItemList.Field_Generator_IV, 'C', + OrePrefixes.circuit.get(Materials.LuV), 'W', OrePrefixes.cableGt04.get(Materials.Tungsten) }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_LV_Replicator.get(1L), + bitsd, + new Object[] { "EFE", aTextCableHull, aTextMotorWire, 'M', ItemList.Hull_LV, 'F', + ItemList.Field_Generator_LV, 'E', ItemList.Emitter_LV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', + OrePrefixes.cableGt04.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_MV_Replicator.get(1L), + bitsd, + new Object[] { "EFE", aTextCableHull, aTextMotorWire, 'M', ItemList.Hull_MV, 'F', + ItemList.Field_Generator_MV, 'E', ItemList.Emitter_MV, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', + OrePrefixes.cableGt04.get(Materials.AnyCopper) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HV_Replicator.get(1L), + bitsd, + new Object[] { "EFE", aTextCableHull, aTextMotorWire, 'M', ItemList.Hull_HV, 'F', + ItemList.Field_Generator_HV, 'E', ItemList.Emitter_HV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', + OrePrefixes.cableGt04.get(Materials.Gold) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_EV_Replicator.get(1L), + bitsd, + new Object[] { "EFE", aTextCableHull, aTextMotorWire, 'M', ItemList.Hull_EV, 'F', + ItemList.Field_Generator_EV, 'E', ItemList.Emitter_EV, 'C', OrePrefixes.circuit.get(Materials.IV), 'W', + OrePrefixes.cableGt04.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_IV_Replicator.get(1L), + bitsd, + new Object[] { "EFE", aTextCableHull, aTextMotorWire, 'M', ItemList.Hull_IV, 'F', + ItemList.Field_Generator_IV, 'E', ItemList.Emitter_IV, 'C', OrePrefixes.circuit.get(Materials.LuV), 'W', + OrePrefixes.cableGt04.get(Materials.Tungsten) }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_LV_Brewery.get(1L), + bitsd, + new Object[] { "GPG", aTextWireHull, "CBC", 'M', ItemList.Hull_LV, 'P', ItemList.Electric_Pump_LV, 'B', + new ItemStack(Items.brewing_stand, 0), 'C', OrePrefixes.circuit.get(Materials.LV), 'W', + OrePrefixes.cableGt01.get(Materials.Tin), 'G', new ItemStack(Blocks.glass, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_MV_Brewery.get(1L), + bitsd, + new Object[] { "GPG", aTextWireHull, "CBC", 'M', ItemList.Hull_MV, 'P', ItemList.Electric_Pump_MV, 'B', + new ItemStack(Items.brewing_stand, 0), 'C', OrePrefixes.circuit.get(Materials.MV), 'W', + OrePrefixes.cableGt01.get(Materials.AnyCopper), 'G', new ItemStack(Blocks.glass, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HV_Brewery.get(1L), + bitsd, + new Object[] { "GPG", aTextWireHull, "CBC", 'M', ItemList.Hull_HV, 'P', ItemList.Electric_Pump_HV, 'B', + new ItemStack(Items.brewing_stand, 0), 'C', OrePrefixes.circuit.get(Materials.HV), 'W', + OrePrefixes.cableGt01.get(Materials.Gold), 'G', new ItemStack(Blocks.glass, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_EV_Brewery.get(1L), + bitsd, + new Object[] { "GPG", aTextWireHull, "CBC", 'M', ItemList.Hull_EV, 'P', ItemList.Electric_Pump_EV, 'B', + new ItemStack(Items.brewing_stand, 0), 'C', OrePrefixes.circuit.get(Materials.EV), 'W', + OrePrefixes.cableGt01.get(Materials.Aluminium), 'G', new ItemStack(Blocks.glass, 1) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_IV_Brewery.get(1L), + bitsd, + new Object[] { "GPG", aTextWireHull, "CBC", 'M', ItemList.Hull_IV, 'P', ItemList.Electric_Pump_IV, 'B', + new ItemStack(Items.brewing_stand, 0), 'C', OrePrefixes.circuit.get(Materials.IV), 'W', + OrePrefixes.cableGt01.get(Materials.Tungsten), 'G', new ItemStack(Blocks.glass, 1) }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_LV_Miner.get(1L), + bitsd, + new Object[] { "EEE", aTextWireHull, "CSC", 'M', ItemList.Hull_LV, 'E', ItemList.Electric_Motor_LV, 'C', + OrePrefixes.circuit.get(Materials.LV), 'W', OrePrefixes.cableGt01.get(Materials.Tin), 'S', + ItemList.Sensor_LV }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_MV_Miner.get(1L), + bitsd, + new Object[] { "PEP", aTextWireHull, "CSC", 'M', ItemList.Hull_MV, 'E', ItemList.Electric_Motor_MV, 'P', + ItemList.Electric_Piston_MV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', + OrePrefixes.cableGt02.get(Materials.Copper), 'S', ItemList.Sensor_MV }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_HV_Miner.get(1L), + bitsd, + new Object[] { "RPR", aTextWireHull, "CSC", 'M', ItemList.Hull_HV, 'E', ItemList.Electric_Motor_HV, 'P', + ItemList.Electric_Piston_HV, 'R', ItemList.Robot_Arm_HV, 'C', OrePrefixes.circuit.get(Materials.HV), + 'W', OrePrefixes.cableGt04.get(Materials.Gold), 'S', ItemList.Sensor_HV }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_BlastFurnace.get(1L), + bitsd, + new Object[] { "FFF", aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_HeatProof, 'F', + OreDictNames.craftingIronFurnace, 'C', OrePrefixes.circuit.get(Materials.LV), 'W', + OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_VacuumFreezer.get(1L), + bitsd, + new Object[] { aTextPlate, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_FrostProof, 'P', + ItemList.Electric_Pump_HV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', + OrePrefixes.cableGt01.get(Materials.Gold) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_ImplosionCompressor.get(1L), + bitsd, + new Object[] { "OOO", aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_SolidSteel, 'O', + Ic2Items.reinforcedStone, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', + OrePrefixes.cableGt01.get(Materials.Gold) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_Furnace.get(1L), + bitsd, + new Object[] { "FFF", aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_HeatProof, 'F', + OreDictNames.craftingIronFurnace, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', + OrePrefixes.cableGt01.get(Materials.AnnealedCopper) }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_LargeBoiler_Bronze.get(1L), + bitsd, + new Object[] { aTextWireCoil, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_Firebox_Bronze, 'C', + OrePrefixes.circuit.get(Materials.MV), 'W', OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_LargeBoiler_Steel.get(1L), + bitsd, + new Object[] { aTextWireCoil, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_Firebox_Steel, 'C', + OrePrefixes.circuit.get(Materials.HV), 'W', OrePrefixes.cableGt01.get(Materials.AnyCopper) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_LargeBoiler_Titanium.get(1L), + bitsd, + new Object[] { aTextWireCoil, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_Firebox_Titanium, 'C', + OrePrefixes.circuit.get(Materials.EV), 'W', OrePrefixes.cableGt01.get(Materials.Gold) }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_LargeBoiler_TungstenSteel.get(1L), + bitsd, + new Object[] { aTextWireCoil, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_Firebox_TungstenSteel, + 'C', OrePrefixes.circuit.get(Materials.IV), 'W', OrePrefixes.cableGt01.get(Materials.Aluminium) }); + + GTModHandler.addCraftingRecipe( + ItemList.Generator_Diesel_LV.get(1L), + bitsd, + new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_LV, 'P', ItemList.Electric_Piston_LV, 'E', + ItemList.Electric_Motor_LV, 'C', OrePrefixes.circuit.get(Materials.LV), 'W', + OrePrefixes.cableGt01.get(Materials.Tin), 'G', OrePrefixes.gearGt.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Generator_Diesel_MV.get(1L), + bitsd, + new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_MV, 'P', ItemList.Electric_Piston_MV, 'E', + ItemList.Electric_Motor_MV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', + OrePrefixes.cableGt01.get(Materials.AnyCopper), 'G', OrePrefixes.gearGt.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Generator_Diesel_HV.get(1L), + bitsd, + new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_HV, 'P', ItemList.Electric_Piston_HV, 'E', + ItemList.Electric_Motor_HV, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', + OrePrefixes.cableGt01.get(Materials.Gold), 'G', OrePrefixes.gearGt.get(Materials.StainlessSteel) }); + + GTModHandler.addCraftingRecipe( + ItemList.Generator_Gas_Turbine_LV.get(1L), + bitsd, + new Object[] { "CRC", "RMR", aTextMotorWire, 'M', ItemList.Hull_LV, 'E', ItemList.Electric_Motor_LV, 'R', + OrePrefixes.rotor.get(Materials.Tin), 'C', OrePrefixes.circuit.get(Materials.LV), 'W', + OrePrefixes.cableGt01.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Generator_Gas_Turbine_MV.get(1L), + bitsd, + new Object[] { "CRC", "RMR", aTextMotorWire, 'M', ItemList.Hull_MV, 'E', ItemList.Electric_Motor_MV, 'R', + OrePrefixes.rotor.get(Materials.Bronze), 'C', OrePrefixes.circuit.get(Materials.MV), 'W', + OrePrefixes.cableGt01.get(Materials.AnyCopper) }); + GTModHandler.addCraftingRecipe( + ItemList.Generator_Gas_Turbine_HV.get(1L), + bitsd, + new Object[] { "CRC", "RMR", aTextMotorWire, 'M', ItemList.Hull_HV, 'E', ItemList.Electric_Motor_HV, 'R', + OrePrefixes.rotor.get(Materials.Steel), 'C', OrePrefixes.circuit.get(Materials.HV), 'W', + OrePrefixes.cableGt01.get(Materials.Gold) }); + GTModHandler.addCraftingRecipe( + ItemList.Generator_Gas_Turbine_EV.get(1L), + bitsd, + new Object[] { "CRC", "RMR", aTextMotorWire, 'M', ItemList.Hull_EV, 'E', ItemList.Electric_Motor_EV, 'R', + OrePrefixes.rotor.get(Materials.Titanium), 'C', OrePrefixes.circuit.get(Materials.EV), 'W', + OrePrefixes.cableGt01.get(Materials.Aluminium) }); + GTModHandler.addCraftingRecipe( + ItemList.Generator_Gas_Turbine_IV.get(1L), + bitsd, + new Object[] { "CRC", "RMR", aTextMotorWire, 'M', ItemList.Hull_IV, 'E', ItemList.Electric_Motor_IV, 'R', + OrePrefixes.rotor.get(Materials.TungstenSteel), 'C', OrePrefixes.circuit.get(Materials.IV), 'W', + OrePrefixes.cableGt01.get(Materials.Tungsten) }); + + GTModHandler.addCraftingRecipe( + ItemList.Generator_Steam_Turbine_LV.get(1L), + bitsd, + new Object[] { "PCP", "RMR", aTextMotorWire, 'M', ItemList.Hull_LV, 'E', ItemList.Electric_Motor_LV, 'R', + OrePrefixes.rotor.get(Materials.Tin), 'C', OrePrefixes.circuit.get(Materials.LV), 'W', + OrePrefixes.cableGt01.get(Materials.Tin), 'P', OrePrefixes.pipeMedium.get(Materials.Bronze) }); + GTModHandler.addCraftingRecipe( + ItemList.Generator_Steam_Turbine_MV.get(1L), + bitsd, + new Object[] { "PCP", "RMR", aTextMotorWire, 'M', ItemList.Hull_MV, 'E', ItemList.Electric_Motor_MV, 'R', + OrePrefixes.rotor.get(Materials.Bronze), 'C', OrePrefixes.circuit.get(Materials.MV), 'W', + OrePrefixes.cableGt01.get(Materials.AnyCopper), 'P', OrePrefixes.pipeMedium.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.Generator_Steam_Turbine_HV.get(1L), + bitsd, + new Object[] { "PCP", "RMR", aTextMotorWire, 'M', ItemList.Hull_HV, 'E', ItemList.Electric_Motor_HV, 'R', + OrePrefixes.rotor.get(Materials.Steel), 'C', OrePrefixes.circuit.get(Materials.HV), 'W', + OrePrefixes.cableGt01.get(Materials.Gold), 'P', OrePrefixes.pipeMedium.get(Materials.StainlessSteel) }); + + if (!Thaumcraft.isModLoaded()) { + GTModHandler.addCraftingRecipe( + ItemList.MagicEnergyConverter_LV.get(1L), + bitsd, + new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_LV, 'B', new ItemStack(Blocks.beacon), 'C', + OrePrefixes.circuit.get(Materials.HV), 'T', ItemList.Field_Generator_LV, 'F', + OrePrefixes.plate.get(Materials.Platinum) }); + GTModHandler.addCraftingRecipe( + ItemList.MagicEnergyConverter_MV.get(1L), + bitsd, + new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_MV, 'B', new ItemStack(Blocks.beacon), 'C', + OrePrefixes.circuit.get(Materials.EV), 'T', ItemList.Field_Generator_MV, 'F', + OrePrefixes.plate.get(Materials.Iridium) }); + GTModHandler.addCraftingRecipe( + ItemList.MagicEnergyConverter_HV.get(1L), + bitsd, + new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_HV, 'B', new ItemStack(Blocks.beacon), 'C', + OrePrefixes.circuit.get(Materials.IV), 'T', ItemList.Field_Generator_HV, 'F', + OrePrefixes.plate.get(Materials.Neutronium) }); + + GTModHandler.addCraftingRecipe( + ItemList.MagicEnergyAbsorber_LV.get(1L), + bitsd, + new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_LV, 'B', + ItemList.MagicEnergyConverter_LV.get(1L), 'C', OrePrefixes.circuit.get(Materials.HV), 'T', + ItemList.Field_Generator_LV, 'F', OrePrefixes.plate.get(Materials.Platinum) }); + GTModHandler.addCraftingRecipe( + ItemList.MagicEnergyAbsorber_MV.get(1L), + bitsd, + new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_MV, 'B', + ItemList.MagicEnergyConverter_MV.get(1L), 'C', OrePrefixes.circuit.get(Materials.EV), 'T', + ItemList.Field_Generator_MV, 'F', OrePrefixes.plate.get(Materials.Iridium) }); + GTModHandler.addCraftingRecipe( + ItemList.MagicEnergyAbsorber_HV.get(1L), + bitsd, + new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_HV, 'B', + ItemList.MagicEnergyConverter_MV.get(1L), 'C', OrePrefixes.circuit.get(Materials.IV), 'T', + ItemList.Field_Generator_HV, 'F', OrePrefixes.plate.get(Materials.Europium) }); + GTModHandler.addCraftingRecipe( + ItemList.MagicEnergyAbsorber_EV.get(1L), + bitsd, + new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_HV, 'B', + ItemList.MagicEnergyConverter_HV.get(1L), 'C', OrePrefixes.circuit.get(Materials.LuV), 'T', + ItemList.Field_Generator_EV, 'F', OrePrefixes.plate.get(Materials.Neutronium) }); + } + GTModHandler.addCraftingRecipe( + ItemList.Casing_Fusion_Coil.get(1L), + bitsd, + new Object[] { "CTC", "FMF", "CTC", 'M', ItemList.Casing_Coil_Superconductor, 'C', + OrePrefixes.circuit.get(Materials.LuV), 'F', ItemList.Field_Generator_MV, 'T', + ItemList.Neutron_Reflector }); + + GTModHandler.addCraftingRecipe( + ItemList.Generator_Plasma_EV.get(1L), + bitsd, + new Object[] { "UCU", "FMF", aTextWireCoil, 'M', ItemList.Hull_LuV, 'F', ItemList.Field_Generator_HV, 'C', + OrePrefixes.circuit.get(Materials.IV), 'W', OrePrefixes.cableGt04.get(Materials.Tungsten), 'U', + OrePrefixes.stick.get(Materials.Plutonium241) }); + GTModHandler.addCraftingRecipe( + ItemList.Generator_Plasma_IV.get(1L), + bitsd, + new Object[] { "UCU", "FMF", aTextWireCoil, 'M', ItemList.Hull_ZPM, 'F', ItemList.Field_Generator_EV, 'C', + OrePrefixes.circuit.get(Materials.LuV), 'W', OrePrefixes.wireGt04.get(Materials.VanadiumGallium), 'U', + OrePrefixes.stick.get(Materials.Europium) }); + GTModHandler.addCraftingRecipe( + ItemList.Generator_Plasma_LuV.get(1L), + bitsd, + new Object[] { "UCU", "FMF", aTextWireCoil, 'M', ItemList.Hull_UV, 'F', ItemList.Field_Generator_IV, 'C', + OrePrefixes.circuit.get(Materials.ZPM), 'W', OrePrefixes.wireGt04.get(Materials.Naquadah), 'U', + OrePrefixes.stick.get(Materials.Americium) }); + + GTModHandler.addCraftingRecipe( + ItemList.Processing_Array.get(1L), + bitsd, + new Object[] { "CTC", "FMF", "CBC", 'M', ItemList.Hull_EV, 'B', + OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.IV), 'F', + ItemList.Robot_Arm_EV, 'T', ItemList.Energy_LapotronicOrb }); + + ProcessingArrayRecipeLoader.registerDefaultGregtechMaps(); + GTModHandler.addCraftingRecipe( + ItemList.Distillation_Tower.get(1L), + bitsd, + new Object[] { "CBC", "FMF", "CBC", 'M', ItemList.Hull_HV, 'B', + OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.EV), 'F', + ItemList.Electric_Pump_HV }); + + GTModHandler.addCraftingRecipe( + ItemList.LargeSteamTurbine.get(1L), + bitsd, + new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_HV, 'B', + OrePrefixes.pipeLarge.get(Materials.Steel), 'C', OrePrefixes.circuit.get(Materials.HV), 'P', + OrePrefixes.gearGt.get(Materials.Steel) }); + GTModHandler.addCraftingRecipe( + ItemList.LargeGasTurbine.get(1L), + bitsd, + new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_EV, 'B', + OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.EV), 'P', + OrePrefixes.gearGt.get(Materials.StainlessSteel) }); + GTModHandler.addCraftingRecipe( + ItemList.LargeAdvancedGasTurbine.get(1L), + bitsd, + new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_IV, 'B', + OrePrefixes.pipeLarge.get(Materials.TungstenSteel), 'C', OrePrefixes.circuit.get(Materials.LuV), 'P', + OrePrefixes.gearGt.get(Materials.HSSG) }); + + GTModHandler.addCraftingRecipe( + ItemList.Pump_LV.get(1L), + bitsd, + new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_LV, 'B', + OrePrefixes.pipeLarge.get(Materials.Bronze), 'C', OrePrefixes.circuit.get(Materials.LV), 'P', + ItemList.Electric_Pump_LV }); + GTModHandler.addCraftingRecipe( + ItemList.Pump_MV.get(1L), + bitsd, + new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_MV, 'B', + OrePrefixes.pipeLarge.get(Materials.Steel), 'C', OrePrefixes.circuit.get(Materials.MV), 'P', + ItemList.Electric_Pump_MV }); + GTModHandler.addCraftingRecipe( + ItemList.Pump_HV.get(1L), + bitsd, + new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_HV, 'B', + OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.HV), 'P', + ItemList.Electric_Pump_HV }); + GTModHandler.addCraftingRecipe( + ItemList.Pump_EV.get(1L), + bitsd, + new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_EV, 'B', + OrePrefixes.pipeLarge.get(Materials.Titanium), 'C', OrePrefixes.circuit.get(Materials.EV), 'P', + ItemList.Electric_Pump_EV }); + GTModHandler.addCraftingRecipe( + ItemList.Pump_IV.get(1L), + bitsd, + new Object[] { "CPC", aTextPlateMotor, "BPB", 'M', ItemList.Hull_IV, 'B', + OrePrefixes.pipeLarge.get(Materials.TungstenSteel), 'C', OrePrefixes.circuit.get(Materials.IV), 'P', + ItemList.Electric_Pump_IV }); + + GTModHandler.addCraftingRecipe( + ItemList.MobRep_LV.get(1L), + bitsd, + new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_LV, 'E', ItemList.Emitter_LV.get(1L), 'C', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.MobRep_MV.get(1L), + bitsd, + new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_MV, 'E', ItemList.Emitter_MV.get(1L), 'C', + OrePrefixes.circuit.get(Materials.MV) }); + GTModHandler.addCraftingRecipe( + ItemList.MobRep_HV.get(1L), + bitsd, + new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_HV, 'E', ItemList.Emitter_HV.get(1L), 'C', + OrePrefixes.circuit.get(Materials.HV) }); + GTModHandler.addCraftingRecipe( + ItemList.MobRep_EV.get(1L), + bitsd, + new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_EV, 'E', ItemList.Emitter_EV.get(1L), 'C', + OrePrefixes.circuit.get(Materials.EV) }); + GTModHandler.addCraftingRecipe( + ItemList.MobRep_IV.get(1L), + bitsd, + new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_IV, 'E', ItemList.Emitter_IV.get(1L), 'C', + OrePrefixes.circuit.get(Materials.IV) }); + GTModHandler.addCraftingRecipe( + ItemList.MobRep_LuV.get(1L), + bitsd, + new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_LuV, 'E', ItemList.Emitter_LuV.get(1L), 'C', + OrePrefixes.circuit.get(Materials.LuV) }); + GTModHandler.addCraftingRecipe( + ItemList.MobRep_ZPM.get(1L), + bitsd, + new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_ZPM, 'E', ItemList.Emitter_ZPM.get(1L), 'C', + OrePrefixes.circuit.get(Materials.ZPM) }); + GTModHandler.addCraftingRecipe( + ItemList.MobRep_UV.get(1L), + bitsd, + new Object[] { "EEE", " M ", "CCC", 'M', ItemList.Hull_UV, 'E', ItemList.Emitter_UV.get(1L), 'C', + OrePrefixes.circuit.get(Materials.UV) }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_HeatExchanger.get(1L), + bitsd, + new Object[] { aTextWireCoil, aTextCableHull, aTextWireCoil, 'M', ItemList.Casing_Pipe_Titanium, 'C', + OrePrefixes.pipeMedium.get(Materials.Titanium), 'W', ItemList.Electric_Pump_EV }); + + GTModHandler.addCraftingRecipe( + ItemList.Charcoal_Pile.get(1L), + bitsd, + new Object[] { "EXE", "EME", "hCw", 'M', ItemList.Hull_HP_Bricks, 'E', + OrePrefixes.plate.get(Materials.AnyBronze), 'C', new ItemStack(Items.flint_and_steel, 1), 'X', + OrePrefixes.rotor.get(Materials.Steel), }); + + GTModHandler.addCraftingRecipe( + ItemList.Seismic_Prospector_Adv_LV.get(1L), + bitsd, + new Object[] { "WWW", "EME", "CXC", 'M', ItemList.Hull_LV, 'W', + OrePrefixes.plateDouble.get(Materials.Steel), 'E', OrePrefixes.circuit.get(Materials.LV), 'C', + ItemList.Sensor_LV, 'X', OrePrefixes.cableGt02.get(Materials.Tin) }); + GTModHandler.addCraftingRecipe( + ItemList.Seismic_Prospector_Adv_MV.get(1L), + bitsd, + new Object[] { "WWW", "EME", "CXC", 'M', ItemList.Hull_MV, 'W', + OrePrefixes.plateDouble.get(Materials.BlackSteel), 'E', OrePrefixes.circuit.get(Materials.MV), 'C', + ItemList.Sensor_MV, 'X', OrePrefixes.cableGt02.get(Materials.Copper) }); + GTModHandler.addCraftingRecipe( + ItemList.Seismic_Prospector_Adv_HV.get(1L), + bitsd, + new Object[] { "WWW", "EME", "CXC", 'M', ItemList.Hull_HV, 'W', + OrePrefixes.plateDouble.get(Materials.StainlessSteel), 'E', OrePrefixes.circuit.get(Materials.HV), 'C', + ItemList.Sensor_HV, 'X', OrePrefixes.cableGt04.get(Materials.Gold) }); + GTModHandler.addCraftingRecipe( + ItemList.Seismic_Prospector_Adv_EV.get(1L), + bitsd, + new Object[] { "WWW", "EME", "CXC", 'M', ItemList.Hull_EV, 'W', + OrePrefixes.plateDouble.get(Materials.VanadiumSteel), 'E', OrePrefixes.circuit.get(Materials.EV), 'C', + ItemList.Sensor_EV, 'X', OrePrefixes.cableGt04.get(Materials.Aluminium) }); + + GTModHandler.addCraftingRecipe( + ItemList.ConcreteBackfiller1.get(1L), + bitsd, + new Object[] { "WPW", "EME", "CQC", 'M', ItemList.Hull_MV, 'W', OrePrefixes.frameGt.get(Materials.Steel), + 'E', OrePrefixes.circuit.get(Materials.MV), 'C', ItemList.Electric_Motor_MV, 'P', + OrePrefixes.pipeLarge.get(Materials.Steel), 'Q', ItemList.Electric_Pump_MV }); + GTModHandler.addCraftingRecipe( + ItemList.ConcreteBackfiller2.get(1L), + bitsd, + new Object[] { "WPW", "EME", "CQC", 'M', ItemList.ConcreteBackfiller1, 'W', + OrePrefixes.frameGt.get(Materials.Titanium), 'E', OrePrefixes.circuit.get(Materials.EV), 'C', + ItemList.Electric_Motor_EV, 'P', OrePrefixes.pipeLarge.get(Materials.Steel), 'Q', + ItemList.Electric_Pump_EV }); + + GTModHandler.addCraftingRecipe( + ItemList.PyrolyseOven.get(1L), + bitsd, + new Object[] { "WEP", "EME", "WCP", 'M', ItemList.Hull_MV, 'W', ItemList.Electric_Piston_MV, 'P', + OrePrefixes.wireGt04.get(Materials.Cupronickel), 'E', OrePrefixes.circuit.get(Materials.MV), 'C', + ItemList.Electric_Pump_MV }); + + GTModHandler.addCraftingRecipe( + ItemList.OilCracker.get(1L), + bitsd, + new Object[] { aTextWireCoil, "EME", aTextWireCoil, 'M', ItemList.Hull_HV, 'W', + ItemList.Casing_Coil_Cupronickel, 'E', OrePrefixes.circuit.get(Materials.HV), 'C', + ItemList.Electric_Pump_HV }); + + GTModHandler.addCraftingRecipe( + ItemList.MicroTransmitter_HV.get(1L), + bitsd, + new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_HV, 'B', ItemList.Battery_RE_HV_Lithium, + 'C', ItemList.Emitter_HV, 'G', OrePrefixes.circuit.get(Materials.HV), 'P', + ItemList.Field_Generator_HV }); + GTModHandler.addCraftingRecipe( + ItemList.MicroTransmitter_EV.get(1L), + bitsd, + new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_EV, 'B', + GTModHandler.getIC2Item("lapotronCrystal", 1L, GTValues.W), 'C', ItemList.Emitter_EV, 'G', + OrePrefixes.circuit.get(Materials.EV), 'P', ItemList.Field_Generator_EV }); + GTModHandler.addCraftingRecipe( + ItemList.MicroTransmitter_IV.get(1L), + bitsd, + new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_IV, 'B', ItemList.Energy_LapotronicOrb, 'C', + ItemList.Emitter_IV, 'G', OrePrefixes.circuit.get(Materials.IV), 'P', ItemList.Field_Generator_IV }); + GTModHandler.addCraftingRecipe( + ItemList.MicroTransmitter_LUV.get(1L), + bitsd, + new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_LuV, 'B', ItemList.Energy_LapotronicOrb2, + 'C', ItemList.Emitter_LuV, 'G', OrePrefixes.circuit.get(Materials.LuV), 'P', + ItemList.Field_Generator_LuV }); + GTModHandler.addCraftingRecipe( + ItemList.MicroTransmitter_ZPM.get(1L), + bitsd, + new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_ZPM, 'B', ItemList.Energy_Module, 'C', + ItemList.Emitter_ZPM, 'G', OrePrefixes.circuit.get(Materials.ZPM), 'P', ItemList.Field_Generator_ZPM }); + GTModHandler.addCraftingRecipe( + ItemList.MicroTransmitter_UV.get(1L), + bitsd, + new Object[] { "CPC", aTextCableHull, "GBG", 'M', ItemList.Hull_UV, 'B', ItemList.Energy_Module, 'C', + ItemList.Emitter_UV, 'G', OrePrefixes.circuit.get(Materials.UV), 'P', ItemList.Field_Generator_UV }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_Assemblyline.get(1L), + bitsd, + new Object[] { aTextWireCoil, "EME", aTextWireCoil, 'M', ItemList.Hull_IV, 'W', ItemList.Casing_Assembler, + 'E', OrePrefixes.circuit.get(Materials.IV), 'C', ItemList.Robot_Arm_IV }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_DieselEngine.get(1L), + bitsd, + new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_EV, 'P', ItemList.Electric_Piston_EV, 'E', + ItemList.Electric_Motor_EV, 'C', OrePrefixes.circuit.get(Materials.IV), 'W', + OrePrefixes.cableGt01.get(Materials.TungstenSteel), 'G', OrePrefixes.gearGt.get(Materials.Titanium) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_EngineIntake.get(4L), + bitsd, + new Object[] { "PhP", "RFR", aTextPlateWrench, 'R', OrePrefixes.pipeMedium.get(Materials.Titanium), 'F', + ItemList.Casing_StableTitanium, 'P', OrePrefixes.rotor.get(Materials.Titanium) }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_ExtremeDieselEngine.get(1L), + bitsd, + new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_IV, 'P', ItemList.Electric_Piston_IV, 'E', + ItemList.Electric_Motor_IV, 'C', OrePrefixes.circuit.get(Materials.LuV), 'W', + OrePrefixes.cableGt01.get(Materials.HSSG), 'G', OrePrefixes.gearGt.get(Materials.TungstenSteel) }); + GTModHandler.addCraftingRecipe( + ItemList.Casing_ExtremeEngineIntake.get(4L), + bitsd, + new Object[] { "PhP", "RFR", aTextPlateWrench, 'R', OrePrefixes.pipeMedium.get(Materials.TungstenSteel), + 'F', ItemList.Casing_RobustTungstenSteel, 'P', OrePrefixes.rotor.get(Materials.TungstenSteel) }); + + // If Cleanroom is enabled, add a recipe, else hide from NEI. + if (GTMod.gregtechproxy.mEnableCleanroom) { + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_Cleanroom.get(1L), + bitsd, + new Object[] { "FFF", "RHR", "MCM", 'H', ItemList.Hull_HV, 'F', ItemList.Component_Filter, 'R', + OrePrefixes.rotor.get(Materials.StainlessSteel), 'M', ItemList.Electric_Motor_HV, 'C', + OrePrefixes.circuit.get(Materials.HV) }); + } else { + if (NotEnoughItems.isModLoaded()) { + API.hideItem(ItemList.Machine_Multi_Cleanroom.get(1L)); + } + } + + GTModHandler.addCraftingRecipe( + ItemList.Machine_HV_LightningRod.get(1L), + bitsd, + new Object[] { "LTL", "TMT", "LTL", 'M', ItemList.Hull_LuV, 'L', ItemList.Energy_LapotronicOrb, 'T', + ItemList.Transformer_ZPM_LuV }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_EV_LightningRod.get(1L), + bitsd, + new Object[] { "LTL", "TMT", "LTL", 'M', ItemList.Hull_ZPM, 'L', ItemList.Energy_LapotronicOrb2, 'T', + ItemList.Transformer_UV_ZPM }); + GTModHandler.addCraftingRecipe( + ItemList.Machine_IV_LightningRod.get(1L), + bitsd, + new Object[] { "LTL", "TMT", "LTL", 'M', ItemList.Hull_UV, 'L', ItemList.ZPM2, 'T', + ItemList.Transformer_MAX_UV }); + + GTModHandler.addCraftingRecipe( + ItemList.Machine_Multi_LargeChemicalReactor.get(1L), + bitsd, + new Object[] { "CRC", "PMP", "CBC", 'C', OrePrefixes.circuit.get(Materials.HV), 'R', + OrePrefixes.rotor.get(Materials.StainlessSteel), 'P', + OrePrefixes.pipeLarge.get(Materials.Polytetrafluoroethylene), 'M', ItemList.Electric_Motor_HV, 'B', + ItemList.Hull_HV }); + + // Add Drone down link hatch + GTModHandler.addCraftingRecipe( + ItemList.Hatch_DroneDownLink.get(1L), + bits, + new Object[] { " S ", "CMC", "RRR", 'M', ItemList.Hatch_Maintenance, 'S', ItemList.Sensor_IV, 'R', + new ItemStack(GregTechAPI.sBlockReinforced, 1, 9), 'C', ItemList.Conveyor_Module_EV }); + + // And Drone Centre + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_Assembler.get(1), + ItemList.Cover_SolarPanel_HV.get(4), + ItemList.Conveyor_Module_IV.get(2), + ItemList.Robot_Arm_IV.get(2), + ItemList.Sensor_IV.get(2), + ItemList.Energy_LapotronicOrb.get(4), + ItemList.Cover_WirelessNeedsMaintainance.get(1), + GalacticraftCore.isModLoaded() ? GTModHandler.getModItem(GalacticraftCore.ID, "item.basicItem", 1, 19) + : ItemList.Sensor_EV.get(4)) + .itemOutputs(ItemList.Machine_Multi_DroneCentre.get(1L)) + .fluidInputs(Materials.AdvancedGlue.getFluid(8000L)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + } + + private static void registerShapelessCraftingRecipes() { + GTModHandler.addShapelessCraftingRecipe( + ItemList.Casing_SolidSteel.get(1L), + bits, + new Object[] { ItemList.Casing_Stripes_A }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Casing_SolidSteel.get(1L), + bits, + new Object[] { ItemList.Casing_Stripes_B }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Casing_SolidSteel.get(1L), + bits, + new Object[] { ItemList.Casing_RadioactiveHazard }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Casing_SolidSteel.get(1L), + bits, + new Object[] { ItemList.Casing_BioHazard }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Casing_SolidSteel.get(1L), + bits, + new Object[] { ItemList.Casing_ExplosionHazard }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Casing_SolidSteel.get(1L), + bits, + new Object[] { ItemList.Casing_FireHazard }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Casing_SolidSteel.get(1L), + bits, + new Object[] { ItemList.Casing_AcidHazard }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Casing_SolidSteel.get(1L), + bits, + new Object[] { ItemList.Casing_MagicHazard }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Casing_SolidSteel.get(1L), + bits, + new Object[] { ItemList.Casing_FrostHazard }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.Casing_SolidSteel.get(1L), + bits, + new Object[] { ItemList.Casing_NoiseHazard }); + + if (Forestry.isModLoaded() && Gendustry.isModLoaded()) { + /* Conversion recipes */ + // TODO: Move those recipes with the other recipes + + GTModHandler.addShapelessCraftingRecipe( + ItemList.Machine_IndustrialApiary.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "IndustrialApiary", 1, 0) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_Frame.get(1), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "UpgradeFrame", 1) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_PRODUCTION.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 0) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_PLAINS.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 17) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_LIGHT.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 11) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_FLOWERING.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 2) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_WINTER.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 20) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_DRYER.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 5) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_AUTOMATION.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 14) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_HUMIDIFIER.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 4) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_HELL.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 13) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_POLLEN.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 22) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_DESERT.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 16) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_COOLER.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 7) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_LIFESPAN.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 1) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_SEAL.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 10) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_STABILIZER.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 19) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_JUNGLE.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 18) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_TERRITORY.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 3) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_OCEAN.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 21) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_SKY.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 12) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_HEATER.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 6) }); + GTModHandler.addShapelessCraftingRecipe( + ItemList.IndustrialApiary_Upgrade_SIEVE.get(1L), + new Object[] { GTModHandler.getModItem(Gendustry.ID, "ApiaryUpgrade", 1, 15) }); + + } + } + + private static void run4() { + long bits = GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED; + + // high pressure fluid pipes + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.pipeSmall, Materials.TungstenSteel, 1L), + ItemList.Electric_Pump_EV.get(1L), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeSmall, Materials.Ultimate, 1L)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.TungstenSteel, 1L), + ItemList.Electric_Pump_IV.get(1L), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Ultimate, 1L)) + .duration(20 * SECONDS) + .eut(4096) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.TungstenSteel, 1L), + ItemList.Electric_Pump_IV.get(2L), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Ultimate, 1L)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTModHandler.addCraftingRecipe( + ItemList.Automation_ChestBuffer_ULV.get(1L), + bits, + new Object[] { "CMV", " X ", 'M', ItemList.Hull_ULV, 'V', ItemList.Conveyor_Module_LV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.ULV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ChestBuffer_LV.get(1L), + bits, + new Object[] { "CMV", " X ", 'M', ItemList.Hull_LV, 'V', ItemList.Conveyor_Module_LV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ChestBuffer_MV.get(1L), + bits, + new Object[] { "CMV", " X ", 'M', ItemList.Hull_MV, 'V', ItemList.Conveyor_Module_MV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.MV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ChestBuffer_HV.get(1L), + bits, + new Object[] { "CMV", " X ", 'M', ItemList.Hull_HV, 'V', ItemList.Conveyor_Module_HV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.HV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ChestBuffer_EV.get(1L), + bits, + new Object[] { "CMV", " X ", 'M', ItemList.Hull_EV, 'V', ItemList.Conveyor_Module_EV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.EV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ChestBuffer_IV.get(1L), + bits, + new Object[] { "CMV", " X ", 'M', ItemList.Hull_IV, 'V', ItemList.Conveyor_Module_IV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.IV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ChestBuffer_LuV.get(1L), + bits, + new Object[] { "CMV", " X ", 'M', ItemList.Hull_LuV, 'V', ItemList.Conveyor_Module_LuV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LuV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ChestBuffer_ZPM.get(1L), + bits, + new Object[] { "CMV", " X ", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.ZPM) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ChestBuffer_UV.get(1L), + bits, + new Object[] { "CMV", " X ", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.UV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ChestBuffer_UHV.get(1L), + bits, + new Object[] { "CMV", " X ", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UHV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.UHV) }); + + GTModHandler.addCraftingRecipe( + ItemList.Automation_Filter_ULV.get(1L), + bits, + new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_ULV, 'V', ItemList.Conveyor_Module_LV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Filter_LV.get(1L), + bits, + new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_LV, 'V', ItemList.Conveyor_Module_LV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Filter_MV.get(1L), + bits, + new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_MV, 'V', ItemList.Conveyor_Module_MV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Filter_HV.get(1L), + bits, + new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_HV, 'V', ItemList.Conveyor_Module_HV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Filter_EV.get(1L), + bits, + new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_EV, 'V', ItemList.Conveyor_Module_EV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Filter_IV.get(1L), + bits, + new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_IV, 'V', ItemList.Conveyor_Module_IV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Filter_LuV.get(1L), + bits, + new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_LuV, 'V', ItemList.Conveyor_Module_LuV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Filter_ZPM.get(1L), + bits, + new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Filter_UV.get(1L), + bits, + new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Filter_MAX.get(1L), + bits, + new Object[] { " F ", "CMV", " X ", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UHV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + + GTModHandler.addCraftingRecipe( + ItemList.Automation_TypeFilter_ULV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_ULV, 'V', ItemList.Conveyor_Module_LV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_TypeFilter_LV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_LV, 'V', ItemList.Conveyor_Module_LV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_TypeFilter_MV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_MV, 'V', ItemList.Conveyor_Module_MV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_TypeFilter_HV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_HV, 'V', ItemList.Conveyor_Module_HV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_TypeFilter_EV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_EV, 'V', ItemList.Conveyor_Module_EV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_TypeFilter_IV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_IV, 'V', ItemList.Conveyor_Module_IV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_TypeFilter_LuV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_LuV, 'V', ItemList.Conveyor_Module_LuV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_TypeFilter_ZPM.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_TypeFilter_UV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_TypeFilter_MAX.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UHV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + + GTModHandler.addCraftingRecipe( + ItemList.Automation_Regulator_ULV.get(1L), + bits, + new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_ULV, 'V', ItemList.Robot_Arm_LV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Regulator_LV.get(1L), + bits, + new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_LV, 'V', ItemList.Robot_Arm_LV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Regulator_MV.get(1L), + bits, + new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_MV, 'V', ItemList.Robot_Arm_MV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Regulator_HV.get(1L), + bits, + new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_HV, 'V', ItemList.Robot_Arm_HV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Regulator_EV.get(1L), + bits, + new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_EV, 'V', ItemList.Robot_Arm_EV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Regulator_IV.get(1L), + bits, + new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_IV, 'V', ItemList.Robot_Arm_IV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Regulator_LuV.get(1L), + bits, + new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_LuV, 'V', ItemList.Robot_Arm_LuV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Regulator_ZPM.get(1L), + bits, + new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_ZPM, 'V', ItemList.Robot_Arm_ZPM, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Regulator_UV.get(1L), + bits, + new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_UV, 'V', ItemList.Robot_Arm_UV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_Regulator_MAX.get(1L), + bits, + new Object[] { "XFX", "VMV", "XCX", 'M', ItemList.Hull_MAX, 'V', ItemList.Robot_Arm_UHV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_ULV.get(1L), + bits, + new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_ULV, 'V', ItemList.Conveyor_Module_LV, 'D', + ItemList.Tool_DataOrb }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_LV.get(1L), + bits, + new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_LV, 'V', ItemList.Conveyor_Module_LV, 'D', + ItemList.Tool_DataOrb }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_MV.get(1L), + bits, + new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_MV, 'V', ItemList.Conveyor_Module_MV, 'D', + ItemList.Tool_DataOrb }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_HV.get(1L), + bits, + new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_HV, 'V', ItemList.Conveyor_Module_HV, 'D', + ItemList.Tool_DataOrb }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_EV.get(1L), + bits, + new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_EV, 'V', ItemList.Conveyor_Module_EV, 'D', + ItemList.Tool_DataOrb }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_IV.get(1L), + bits, + new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_IV, 'V', ItemList.Conveyor_Module_IV, 'D', + ItemList.Tool_DataOrb }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_LuV.get(1L), + bits, + new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_LuV, 'V', ItemList.Conveyor_Module_LuV, 'D', + ItemList.Tool_DataOrb }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_ZPM.get(1L), + bits, + new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'D', + ItemList.Tool_DataOrb }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_UV.get(1L), + bits, + new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_UV, 'V', ItemList.Conveyor_Module_UV, 'D', + ItemList.Tool_DataOrb }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_MAX.get(1L), + bits, + new Object[] { "DMV", 'M', ItemList.Automation_ChestBuffer_UHV, 'V', ItemList.Conveyor_Module_UHV, 'D', + ItemList.Tool_DataOrb }); + + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_ULV.get(1L), + bits, + new Object[] { "DMV", "DDD", 'M', ItemList.Hull_ULV, 'V', ItemList.Conveyor_Module_LV, 'D', + ItemList.Tool_DataStick }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_LV.get(1L), + bits, + new Object[] { "DMV", "DDD", 'M', ItemList.Hull_LV, 'V', ItemList.Conveyor_Module_LV, 'D', + ItemList.Tool_DataStick }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_MV.get(1L), + bits, + new Object[] { "DMV", "DDD", 'M', ItemList.Hull_MV, 'V', ItemList.Conveyor_Module_MV, 'D', + ItemList.Tool_DataStick }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_HV.get(1L), + bits, + new Object[] { "DMV", "DDD", 'M', ItemList.Hull_HV, 'V', ItemList.Conveyor_Module_HV, 'D', + ItemList.Tool_DataStick }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_EV.get(1L), + bits, + new Object[] { "DMV", "DDD", 'M', ItemList.Hull_EV, 'V', ItemList.Conveyor_Module_EV, 'D', + ItemList.Tool_DataStick }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_IV.get(1L), + bits, + new Object[] { "DMV", "DDD", 'M', ItemList.Hull_IV, 'V', ItemList.Conveyor_Module_IV, 'D', + ItemList.Tool_DataStick }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_LuV.get(1L), + bits, + new Object[] { "DMV", "DDD", 'M', ItemList.Hull_LuV, 'V', ItemList.Conveyor_Module_LuV, 'D', + ItemList.Tool_DataStick }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_ZPM.get(1L), + bits, + new Object[] { "DMV", "DDD", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'D', + ItemList.Tool_DataStick }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_UV.get(1L), + bits, + new Object[] { "DMV", "DDD", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'D', + ItemList.Tool_DataStick }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_SuperBuffer_MAX.get(1L), + bits, + new Object[] { "DMV", "DDD", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UHV, 'D', + ItemList.Tool_DataStick }); + + GTModHandler.addCraftingRecipe( + ItemList.Automation_ItemDistributor_ULV.get(1L), + bits, + new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_ULV, 'V', ItemList.Conveyor_Module_LV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ItemDistributor_LV.get(1L), + bits, + new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_LV, 'V', ItemList.Conveyor_Module_LV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ItemDistributor_MV.get(1L), + bits, + new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_MV, 'V', ItemList.Conveyor_Module_MV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ItemDistributor_HV.get(1L), + bits, + new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_HV, 'V', ItemList.Conveyor_Module_HV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ItemDistributor_EV.get(1L), + bits, + new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_EV, 'V', ItemList.Conveyor_Module_EV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ItemDistributor_IV.get(1L), + bits, + new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_IV, 'V', ItemList.Conveyor_Module_IV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ItemDistributor_LuV.get(1L), + bits, + new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_LuV, 'V', ItemList.Conveyor_Module_LuV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ItemDistributor_ZPM.get(1L), + bits, + new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_ZPM, 'V', ItemList.Conveyor_Module_ZPM, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ItemDistributor_UV.get(1L), + bits, + new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_UV, 'V', ItemList.Conveyor_Module_UV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_ItemDistributor_MAX.get(1L), + bits, + new Object[] { "XCX", "VMV", " V ", 'M', ItemList.Hull_MAX, 'V', ItemList.Conveyor_Module_UHV, 'C', + OreDictNames.craftingChest, 'X', OrePrefixes.circuit.get(Materials.LV) }); + + GTModHandler.addCraftingRecipe( + ItemList.Automation_RecipeFilter_ULV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_ULV, 'V', ItemList.Robot_Arm_LV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_RecipeFilter_LV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_LV, 'V', ItemList.Robot_Arm_LV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_RecipeFilter_MV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_MV, 'V', ItemList.Robot_Arm_MV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_RecipeFilter_HV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_HV, 'V', ItemList.Robot_Arm_HV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_RecipeFilter_EV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_EV, 'V', ItemList.Robot_Arm_EV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_RecipeFilter_IV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_IV, 'V', ItemList.Robot_Arm_IV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_RecipeFilter_LuV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_LuV, 'V', ItemList.Robot_Arm_LuV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_RecipeFilter_ZPM.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_ZPM, 'V', ItemList.Robot_Arm_ZPM, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_RecipeFilter_UV.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_UV, 'V', ItemList.Robot_Arm_UV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + GTModHandler.addCraftingRecipe( + ItemList.Automation_RecipeFilter_MAX.get(1L), + bits, + new Object[] { " F ", "VMC", " X ", 'M', ItemList.Hull_MAX, 'V', ItemList.Robot_Arm_UHV, 'C', + OreDictNames.craftingChest, 'F', OreDictNames.craftingFilter, 'X', + OrePrefixes.circuit.get(Materials.LV) }); + } + + @Override + public void run() { + registerShapelessCraftingRecipes(); + registerShapedCraftingRecipes(); + GTLog.out.println("GTMod: Recipes for MetaTileEntities."); + registerMachineTypes(); + PCBFactoryMaterialLoader.load(); + run4(); + } +} diff --git a/src/main/java/gregtech/loaders/load/SonictronLoader.java b/src/main/java/gregtech/loaders/load/SonictronLoader.java new file mode 100644 index 0000000000..be83b213db --- /dev/null +++ b/src/main/java/gregtech/loaders/load/SonictronLoader.java @@ -0,0 +1,159 @@ +package gregtech.loaders.load; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gregtech.GTMod; +import gregtech.api.enums.SoundResource; +import gregtech.api.util.GTLog; + +public class SonictronLoader implements Runnable { + + @Override + public void run() { + GTLog.out.println("GTMod: Loading Sonictron Sounds"); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.iron_block, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_HARP.toString()); + GTMod.gregtechproxy.mSoundCounts.add(25); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.gold_block, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_PLING.toString()); + GTMod.gregtechproxy.mSoundCounts.add(25); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.stone, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_BD.toString()); + GTMod.gregtechproxy.mSoundCounts.add(25); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.log, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_BASSATTACK.toString()); + GTMod.gregtechproxy.mSoundCounts.add(25); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.planks, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_BASS.toString()); + GTMod.gregtechproxy.mSoundCounts.add(25); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.glass, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_HAT.toString()); + GTMod.gregtechproxy.mSoundCounts.add(25); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.sand, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.NOTE_BASS.toString()); + GTMod.gregtechproxy.mSoundCounts.add(25); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.record_cat, 1)); + GTMod.gregtechproxy.mSoundNames.add("streaming."); + GTMod.gregtechproxy.mSoundCounts.add(12); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.tnt, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_EXPLODE.toString()); + GTMod.gregtechproxy.mSoundCounts.add(3); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.fire, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.FIRE_FIRE.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.flint_and_steel, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.FIRE_IGNITE.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.lava, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.LIQUID_LAVAPOP.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.water, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.LIQUID_WATER.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.water_bucket, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.LIQUID_SPLASH.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.lava_bucket, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_FIZZ.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.portal, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.PORTAL_PORTAL.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.end_portal, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.PORTAL_TRAVEL.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.end_portal_frame, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.PORTAL_TRIGGER.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.glass_pane, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_GLASS.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.ender_pearl, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_ORB.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.ender_eye, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_LEVELUP.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.stone_button, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_CLICK.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.cobblestone, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.DAMAGE_FALLBIG.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.dirt, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.DAMAGE_FALLSMALL.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.iron_sword, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.DAMAGE_HURTFLESH.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.diamond_sword, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_HURT.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.bow, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_BOW.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.arrow, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_DRR.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.fishing_rod, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_BOWHIT.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.iron_shovel, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_BREAK.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.bucket, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_BREATH.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.potionitem, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_DRINK.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.glass_bottle, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_BURP.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems + .add(new ItemStack(Blocks.ender_chest == null ? Blocks.obsidian : Blocks.ender_chest, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_CHESTOPEN.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.chest, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_CHESTCLOSED.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.iron_door, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_DOOR_OPEN.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.wooden_door, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_DOOR_CLOSE.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Items.porkchop, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.RANDOM_EAT.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.wool, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.STEP_CLOTH.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.grass, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.STEP_GRASS.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.gravel, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.STEP_GRAVEL.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.snow, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.STEP_SNOW.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.piston, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.TILE_PISTON_OUT.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.sticky_piston, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.TILE_PISTON_IN.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.mossy_cobblestone, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.AMBIENT_CAVE_CAVE.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.lapis_block, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.AMBIENT_WEATHER_RAIN.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + GTMod.gregtechproxy.mSoundItems.add(new ItemStack(Blocks.diamond_block, 1)); + GTMod.gregtechproxy.mSoundNames.add(SoundResource.AMBIENT_WEATHER_THUNDER.toString()); + GTMod.gregtechproxy.mSoundCounts.add(1); + } +} diff --git a/src/main/java/gregtech/loaders/materialprocessing/ProcessingConfig.java b/src/main/java/gregtech/loaders/materialprocessing/ProcessingConfig.java index 4fb7388367..6784c32bfc 100644 --- a/src/main/java/gregtech/loaders/materialprocessing/ProcessingConfig.java +++ b/src/main/java/gregtech/loaders/materialprocessing/ProcessingConfig.java @@ -1,12 +1,12 @@ package gregtech.loaders.materialprocessing; -import gregtech.api.enums.GTNH_ExtraMaterials; import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsGTNH; public class ProcessingConfig implements gregtech.api.interfaces.IMaterialHandler { public ProcessingConfig() { - new GTNH_ExtraMaterials(); + new MaterialsGTNH(); Materials.add(this); } @@ -15,7 +15,7 @@ public class ProcessingConfig implements gregtech.api.interfaces.IMaterialHandle *
* *
-     * int numberOfMaterialSlots = GregTech_API.sMaterialProperties.get("general", "AmountOfCustomMaterialSlots", 16);
+     * int numberOfMaterialSlots = GregTechAPI.sMaterialProperties.get("general", "AmountOfCustomMaterialSlots", 16);
      * for (int i = 0; i < numberOfMaterialSlots; i++) {
      *     String aID = (i < 10 ? "0" : "") + i;
      *     new Materials(
diff --git a/src/main/java/gregtech/loaders/materials/MaterialsInit1.java b/src/main/java/gregtech/loaders/materials/MaterialsInit1.java
index 964fcc5c8f..b32ddde894 100644
--- a/src/main/java/gregtech/loaders/materials/MaterialsInit1.java
+++ b/src/main/java/gregtech/loaders/materials/MaterialsInit1.java
@@ -160,7 +160,7 @@ import gregtech.api.enums.Dyes;
 import gregtech.api.enums.Element;
 import gregtech.api.enums.MaterialBuilder;
 import gregtech.api.enums.Materials;
-import gregtech.api.enums.TC_Aspects;
+import gregtech.api.enums.TCAspects;
 import gregtech.api.enums.TextureSet;
 import gregtech.api.enums.TierEU;
 import gregtech.api.objects.MaterialStack;
@@ -169,101 +169,101 @@ public class MaterialsInit1 {
 
     public static void load() {
         // spotless:off
-        Materials.Aluminium               = new Materials(  19, TextureSet.SET_DULL              ,  10.0F,    128,  2, 1|2  |8   |32|64|128      , 128, 200, 240,   0,   "Aluminium"               ,   "Aluminium"                     ,    0,       0,        933, 1700,  true, false,   3,   1,   1, Dyes.dyeLightBlue   , Element.Al        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.VOLATUS, 1))).disableAutoGeneratedBlastFurnaceRecipes();
-        Materials.Americium               = new Materials( 103, TextureSet.SET_METALLIC          ,   1.0F,      0,  3, 1|2  |8   |32             , 200, 200, 200,   0,   "Americium"               ,   "Americium"                     ,    0,       0,       1449,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Element.Am        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Antimony                = new Materials(  58, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             , 220, 220, 240,   0,   "Antimony"                ,   "Antimony"                      ,    0,       0,        903,    0, false, false,   2,   1,   1, Dyes.dyeLightGray   , Element.Sb        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1)));
-        Materials.Argon                   = new Materials(  24, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             ,   0, 255,   0, 240,   "Argon"                   ,   "Argon"                         ,    0,       0,         83,    0, false,  true,   5,   1,   1, Dyes.dyeGreen       , Element.Ar        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 2)));
-        Materials.Arsenic                 = new Materials(  39, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1|2  |8|16|32             , 255, 255, 255,   0,   "Arsenic"                 ,   "Arsenic"                       ,    0,       0,       1090,    0, false, false,   3,   1,   1, Dyes.dyeOrange      , Element.As        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 3)));
-        Materials.Barium                  = new Materials(  63, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 255, 255, 255,   0,   "Barium"                  ,   "Barium"                        ,    0,       0,       1000,    0, false, false,   1,   1,   1, Dyes._NULL          , Element.Ba        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VINCULUM, 3)));
-        Materials.Beryllium               = new Materials(   8, TextureSet.SET_METALLIC          ,  14.0F,     64,  2, 1|2  |8   |32|64          , 100, 180, 100,   0,   "Beryllium"               ,   "Beryllium"                     ,    0,       0,       1560,    0, false, false,   6,   1,   1, Dyes.dyeGreen       , Element.Be        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1)));
-        Materials.Bismuth                 = new Materials(  90, TextureSet.SET_METALLIC          ,   6.0F,     64,  1, 1|2  |8   |32|64|128      , 100, 160, 160,   0,   "Bismuth"                 ,   "Bismuth"                       ,    0,       0,        544,    0, false, false,   2,   1,   1, Dyes.dyeCyan        , Element.Bi        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1)));
-        Materials.Boron                   = new Materials(   9, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1         |32             , 210, 250, 210,   0,   "Boron"                   ,   "Boron"                         ,    0,       0,       2349,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , Element.B         , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 3)));
-        Materials.Caesium                 = new Materials(  62, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 176, 196, 222,   0,   "Caesium"                 ,   "Caesium"                       ,    0,       0,        301,    0, false, false,   4,   1,   1, Dyes._NULL          , Element.Cs        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Calcium                 = new Materials(  26, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1         |32             , 255, 245, 245,   0,   "Calcium"                 ,   "Calcium"                       ,    0,       0,       1115, 1115,  true, false,   4,   1,   1, Dyes.dyePink        , Element.Ca        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1)));
-        Materials.Carbon                  = new Materials(  10, TextureSet.SET_DULL              ,   1.0F,     64,  2, 1|2    |16|32|64|128      ,  20,  20,  20,   0,   "Carbon"                  ,   "Carbon"                        ,    0,       0,       3800,    0, false, false,   2,   1,   1, Dyes.dyeBlack       , Element.C         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1)));
-        Materials.Cadmium                 = new Materials(  55, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1    |8   |32             ,  50,  50,  60,   0,   "Cadmium"                 ,   "Cadmium"                       ,    0,       0,        594,    0, false, false,   3,   1,   1, Dyes.dyeGray        , Element.Cd        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1)));
-        Materials.Cerium                  = new Materials(  65, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 123, 212, 144,   0,   "Cerium"                  ,   "Cerium"                        ,    0,       0,       1068, 1068,  true, false,   4,   1,   1, Dyes._NULL          , Element.Ce        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Chlorine                = new Materials(  23, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255, 255, 255,   0,   "Chlorine"                ,   "Chlorine"                      ,    0,       0,        171,    0, false, false,   2,   1,   1, Dyes.dyeCyan        , Element.Cl        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.PANNUS, 1)));
-        Materials.Chrome                  = new Materials(  30, TextureSet.SET_SHINY             ,  11.0F,    256,  3, 1|2  |8   |32|64|128      , 255, 230, 230,   0,   "Chrome"                  ,   "Chrome"                        ,    0,       0,       2180, 1700,  true, false,   5,   1,   1, Dyes.dyePink        , Element.Cr        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1)));
-        Materials.Cobalt                  = new Materials(  33, TextureSet.SET_METALLIC          ,   8.0F,    512,  3, 1|2  |8   |32|64|128      ,  80,  80, 250,   0,   "Cobalt"                  ,   "Cobalt"                        ,    0,       0,       1768, 1700,  true, false,   3,   1,   1, Dyes.dyeBlue        , Element.Co        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1))).disableAutoGeneratedBlastFurnaceRecipes();
-        Materials.Copper                  = new Materials(  35, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1|2  |8   |32   |128      , 255, 100,   0,   0,   "Copper"                  ,   "Copper"                        ,    0,       0,       1357,    0, false, false,   3,   1,   1, Dyes.dyeOrange      , Element.Cu        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 1)));
-        Materials.Deuterium               = new Materials(   2, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255, 255,   0, 240,   "Deuterium"               ,   "Deuterium"                     ,    0,       0,         14,    0, false,  true,  10,   1,   1, Dyes.dyeYellow      , Element.D         , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 3)));
-        Materials.Dysprosium              = new Materials(  73, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 105, 209,  80,   0,   "Dysprosium"              ,   "Dysprosium"                    ,    0,       0,       1680, 1680,  true, false,   4,   1,   1, Dyes._NULL          , Element.Dy        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 3)));
-        Materials.Empty                   = new Materials(   0, TextureSet.SET_NONE              ,   1.0F,      0,  2, 256/*Only when needed*/   , 255, 255, 255, 255,   "Empty"                   ,   "Empty"                         ,    0,       0,         -1,    0, false,  true,   1,   1,   1, Dyes._NULL          , Element._NULL     , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2)));
-        Materials.Erbium                  = new Materials(  75, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             , 176, 152,  81,   0,   "Erbium"                  ,   "Erbium"                        ,    0,       0,       1802, 1802,  true, false,   4,   1,   1, Dyes._NULL          , Element.Er        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Europium                = new Materials(  70, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             , 246, 181, 255,   0,   "Europium"                ,   "Europium"                      ,    0,       0,       1099, 1099,  true, false,   4,   1,   1, Dyes._NULL          , Element.Eu        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Fluorine                = new Materials(  14, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255, 255, 255, 127,   "Fluorine"                ,   "Fluorine"                      ,    0,       0,         53,    0, false,  true,   2,   1,   1, Dyes.dyeGreen       , Element.F         , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2)));
-        Materials.Gadolinium              = new Materials(  71, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             ,  59, 186,  28,   0,   "Gadolinium"              ,   "Gadolinium"                    ,    0,       0,       1585, 1585,  true, false,   4,   1,   1, Dyes._NULL          , Element.Gd        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Gallium                 = new Materials(  37, TextureSet.SET_SHINY             ,   1.0F,     64,  2, 1|2  |8   |32             , 220, 220, 255,   0,   "Gallium"                 ,   "Gallium"                       ,    0,       0,        302,    0, false, false,   5,   1,   1, Dyes.dyeLightGray   , Element.Ga        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1)));
-        Materials.Gold                    = new Materials(  86, TextureSet.SET_SHINY             ,  12.0F,     64,  2, 1|2  |8   |32|64|128      , 255, 255,  30,   0,   "Gold"                    ,   "Gold"                          ,    0,       0,       1337,    0, false, false,   4,   1,   1, Dyes.dyeYellow      , Element.Au        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 2)));
-        Materials.Holmium                 = new Materials(  74, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             ,  22,   8, 166,   0,   "Holmium"                 ,   "Holmium"                       ,    0,       0,       1734, 1734,  true, false,   4,   1,   1, Dyes._NULL          , Element.Ho        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Hydrogen                = new Materials(   1, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             ,   0,   0, 255, 240,   "Hydrogen"                ,   "Hydrogen"                      ,    1,      20,         14,    0, false,  true,   2,   1,   1, Dyes.dyeBlue        , Element.H         , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1)));
-        Materials.Helium                  = new Materials(   4, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255, 255,   0, 240,   "Helium"                  ,   "Helium"                        ,    0,       0,          1,    0, false,  true,   5,   1,   1, Dyes.dyeYellow      , Element.He        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 2)));
-        Materials.Helium_3                = new Materials(   5, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255, 255,   0, 240,   "Helium_3"                ,   "Helium-3"                      ,    0,       0,          1,    0, false,  true,  10,   1,   1, Dyes.dyeYellow      , Element.He_3      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 3)));
-        Materials.Indium                  = new Materials(  56, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             ,  64,   0, 128,   0,   "Indium"                  ,   "Indium"                        ,    0,       0,        429,    0, false, false,   4,   1,   1, Dyes.dyeGray        , Element.In        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Iridium                 = new Materials(  84, TextureSet.SET_DULL              ,   6.0F,   2560,  3, 1|2  |8   |32|64|128      , 240, 240, 245,   0,   "Iridium"                 ,   "Iridium"                       ,    0,       0,       2719, 4500,  true, false,  10,   1,   1, Dyes.dyeWhite       , Element.Ir        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Iron                    = new Materials(  32, TextureSet.SET_METALLIC          ,   6.0F,    256,  2, 1|2  |8   |32|64|128      , 200, 200, 200,   0,   "Iron"                    ,   "Iron"                          ,    0,       0,       1811,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Element.Fe        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 3)));
-        Materials.Lanthanum               = new Materials(  64, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 138, 138, 138,   0,   "Lanthanum"               ,   "Lanthanum"                     ,    0,       0,       1193, 1193,  true, false,   4,   1,   1, Dyes._NULL          , Element.La        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Lead                    = new Materials(  89, TextureSet.SET_DULL              ,   8.0F,     64,  1, 1|2  |8   |32|64|128      , 140, 100, 140,   0,   "Lead"                    ,   "Lead"                          ,    0,       0,        600,    0, false, false,   3,   1,   1, Dyes.dyePurple      , Element.Pb        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1)));
-        Materials.Lithium                 = new Materials(   6, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1|2  |8   |32             , 225, 220, 255,   0,   "Lithium"                 ,   "Lithium"                       ,    0,       0,        454,    0, false, false,   4,   1,   1, Dyes.dyeLightBlue   , Element.Li        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2)));
-        Materials.Lutetium                = new Materials(  78, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             , 188,  62, 199,   0,   "Lutetium"                ,   "Lutetium"                      ,    0,       0,       1925, 1925,  true, false,   4,   1,   1, Dyes._NULL          , Element.Lu        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Magic                   = new Materials(-128, TextureSet.SET_SHINY             ,   8.0F,   5120,  5, 1|2|4|8|16|32|64|128      , 100,   0, 200,   0,   "Magic"                   ,   "Magic"                         ,    5,      32,       5000,    0, false, false,   7,   1,   1, Dyes.dyePurple      , Element.Ma        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 4)));
-        Materials.Magnesium               = new Materials(  18, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 255, 200, 200,   0,   "Magnesium"               ,   "Magnesium"                     ,    0,       0,        923,    0, false, false,   3,   1,   1, Dyes.dyePink        , Element.Mg        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1)));
-        Materials.Manganese               = new Materials(  31, TextureSet.SET_DULL              ,   7.0F,    512,  2, 1|2  |8   |32|64          , 250, 250, 250,   0,   "Manganese"               ,   "Manganese"                     ,    0,       0,       1519,    0, false, false,   3,   1,   1, Dyes.dyeWhite       , Element.Mn        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 3)));
-        Materials.Mercury                 = new Materials(  87, TextureSet.SET_SHINY             ,   1.0F,      0,  0,         16|32             , 255, 220, 220,   0,   "Mercury"                 ,   "Mercury"                       ,    5,      32,        234,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Element.Hg        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1)));
-        Materials.Molybdenum              = new Materials(  48, TextureSet.SET_SHINY             ,   7.0F,    512,  2, 1|2  |8   |32|64          , 180, 180, 220,   0,   "Molybdenum"              ,   "Molybdenum"                    ,    0,       0,       2896,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , Element.Mo        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1)));
-        Materials.Neodymium               = new Materials(  67, TextureSet.SET_METALLIC          ,   7.0F,    512,  2, 1|2  |8   |32|64|128      , 100, 100, 100,   0,   "Neodymium"               ,   "Neodymium"                     ,    0,       0,       1297, 1297,  true, false,   4,   1,   1, Dyes._NULL          , Element.Nd        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 2)));
-        Materials.Neutronium              = new Materials( 129, TextureSet.SET_DULL              ,  24.0F, 655360,  6, 1|2  |8   |32|64|128      , 250, 250, 250,   0,   "Neutronium"              ,   "Neutronium"                    ,    0,       0,      10000, 10000, true, false,  20,   1,   1, Dyes.dyeWhite       , Element.Nt        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 3), new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 2))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe().setProcessingMaterialTierEU(TierEU.RECIPE_LuV);
-        Materials.Nickel                  = new Materials(  34, TextureSet.SET_METALLIC          ,   6.0F,     64,  2, 1|2  |8   |32|64|128      , 200, 200, 250,   0,   "Nickel"                  ,   "Nickel"                        ,    0,       0,       1728,    0, false, false,   4,   1,   1, Dyes.dyeLightBlue   , Element.Ni        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1)));
-        Materials.Niobium                 = new Materials(  47, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 190, 180, 200,   0,   "Niobium"                 ,   "Niobium"                       ,    0,       0,       2750, 2750,  true, false,   5,   1,   1, Dyes._NULL          , Element.Nb        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1)));
-        Materials.Nitrogen                = new Materials(  12, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             ,   0, 150, 200, 240,   "Nitrogen"                ,   "Nitrogen"                      ,    0,       0,         63,    0, false,  true,   2,   1,   1, Dyes.dyeCyan        , Element.N         , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 2)));
-        Materials.Osmium                  = new Materials(  83, TextureSet.SET_METALLIC          ,  16.0F,   1280,  4, 1|2  |8   |32|64|128      ,  50,  50, 255,   0,   "Osmium"                  ,   "Osmium"                        ,    0,       0,       3306, 4500,  true, false,  10,   1,   1, Dyes.dyeBlue        , Element.Os        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Oxygen                  = new Materials(  13, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             ,   0, 100, 200, 240,   "Oxygen"                  ,   "Oxygen"                        ,    0,       0,         54,    0, false,  true,   1,   1,   1, Dyes.dyeWhite       , Element.O         , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 1)));
-        Materials.Palladium               = new Materials(  52, TextureSet.SET_SHINY             ,   8.0F,    512,  4, 1|2  |8   |32|64|128      , 128, 128, 128,   0,   "Palladium"               ,   "Palladium"                     ,    0,       0,       1828, 1828,  true, false,   4,   1,   1, Dyes.dyeGray        , Element.Pd        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 3))).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Phosphorus              = new Materials(  21, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1         |32             , 255, 255,   0,   0,   "Phosphorus"              ,   "Phosphorus"                    ,    0,       0,        317,    0, false, false,   2,   1,   1, Dyes.dyeYellow      , Element.P         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1)));
-        Materials.Platinum                = new Materials(  85, TextureSet.SET_SHINY             ,  12.0F,     64,  4, 1|2  |8   |32|64|128      , 255, 255, 200,   0,   "Platinum"                ,   "Platinum"                      ,    0,       0,       2041,    0, false, false,   6,   1,   1, Dyes.dyeOrange      , Element.Pt        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 1)));
-        Materials.Plutonium               = new Materials( 100, TextureSet.SET_METALLIC          ,   6.0F,    512,  3, 1|2  |8   |32|64          , 240,  50,  50,   0,   "Plutonium"               ,   "Plutonium 239"                 ,    0,       0,        912,    0, false, false,   6,   1,   1, Dyes.dyeLime        , Element.Pu        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 2)));
-        Materials.Plutonium241            = new Materials( 101, TextureSet.SET_SHINY             ,   6.0F,    512,  3, 1|2  |8   |32|64          , 250,  70,  70,   0,   "Plutonium241"            ,   "Plutonium 241"                 ,    0,       0,        912,    0, false, false,   6,   1,   1, Dyes.dyeLime        , Element.Pu_241    , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 3)));
-        Materials.Potassium               = new Materials(  25, TextureSet.SET_METALLIC          ,   1.0F,      0,  1, 1|2       |32             , 154, 172, 223,   0,   "Potassium"               ,   "Potassium"                     ,    0,       0,        336,    0, false, false,   2,   1,   1, Dyes.dyeWhite       , Element.K         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1)));
-        Materials.Praseodymium            = new Materials(  66, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1|2  |8   |32             , 117, 214, 129,   0,   "Praseodymium"            ,   "Praseodymium"                  ,    0,       0,       1208, 1208,  true, false,   4,   1,   1, Dyes._NULL          , Element.Pr        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Promethium              = new Materials(  68, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             ,  36, 181,  53,   0,   "Promethium"              ,   "Promethium"                    ,    0,       0,       1315, 1315,  true, false,   4,   1,   1, Dyes._NULL          , Element.Pm        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Radon                   = new Materials(  93, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255,   0, 255, 240,   "Radon"                   ,   "Radon"                         ,    0,       0,        202,    0, false,  true,   5,   1,   1, Dyes.dyePurple      , Element.Rn        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Rubidium                = new Materials(  43, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 240,  30,  30,   0,   "Rubidium"                ,   "Rubidium"                      ,    0,       0,        312,    0, false, false,   4,   1,   1, Dyes.dyeRed         , Element.Rb        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1)));
-        Materials.Samarium                = new Materials(  69, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 255, 255, 204,   0,   "Samarium"                ,   "Samarium"                      ,    0,       0,       1345, 1345,  true, false,   4,   1,   1, Dyes.dyeWhite       , Element.Sm        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO,10)));
-        Materials.Scandium                = new Materials(  27, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 204, 204, 204,   0,   "Scandium"                ,   "Scandium"                      ,    0,       0,       1814, 1814,  true, false,   2,   1,   1, Dyes.dyeYellow      , Element.Sc        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Silicon                 = new Materials(  20, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             ,  60,  60,  80,   0,   "Silicon"                 ,   "Raw Silicon"                   ,    0,       0,       2273, 2273,  true, false,   1,   1,   1, Dyes.dyeBlack       , Element.Si        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 1)));
-        Materials.Silver                  = new Materials(  54, TextureSet.SET_SHINY             ,  10.0F,     64,  2, 1|2  |8   |32|64|128      , 220, 220, 255,   0,   "Silver"                  ,   "Silver"                        ,    0,       0,       1234,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Element.Ag        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1)));
-        Materials.Sodium                  = new Materials(  17, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1      |16|32             ,   0,   0, 150,   0,   "Sodium"                  ,   "Sodium"                        ,    0,       0,        370,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , Element.Na        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 1)));
-        Materials.Strontium               = new Materials(  44, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1    |8   |32             , 200, 200, 200,   0,   "Strontium"               ,   "Strontium"                     ,    0,       0,       1050,    0, false, false,   1,   1,   1, Dyes.dyeLightGray   , Element.Sr        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 1)));
-        Materials.Sulfur                  = new Materials(  22, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1    |8   |32             , 200, 200,   0,   0,   "Sulfur"                  ,   "Sulfur"                        ,    0,       0,        388,    0, false, false,   2,   1,   1, Dyes.dyeYellow      , Element.S         , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1)));
-        Materials.Tantalum                = new Materials(  80, TextureSet.SET_SHINY             ,   6.0F,   2560,  3, 1|2  |8   |32             , 105, 183, 255,   0,   "Tantalum"                ,   "Tantalum"                      ,    0,       0,       3290, 3290,  true, false,   4,   1,   1, Dyes._NULL          , Element.Ta        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.VINCULUM, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Tellurium               = new Materials(  59, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1|2  |8   |32             , 206, 277,  86,   0,   "Tellurium"               ,   "Tellurium"                     ,    0,       0,        722,    0, false, false,   4,   1,   1, Dyes.dyeGray        , Element.Te        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Terbium                 = new Materials(  72, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 255, 255, 255,   0,   "Terbium"                 ,   "Terbium"                       ,    0,       0,       1629, 1629,  true, false,   4,   1,   1, Dyes._NULL          , Element.Tb        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Thorium                 = new Materials(  96, TextureSet.SET_SHINY             ,   6.0F,    512,  2, 1|2  |8   |32|64          ,   0,  30,   0,   0,   "Thorium"                 ,   "Thorium"                       ,    0,       0,       2115,    0, false, false,   4,   1,   1, Dyes.dyeBlack       , Element.Th        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Thulium                 = new Materials(  76, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             ,  89, 107, 194,   0,   "Thulium"                 ,   "Thulium"                       ,    0,       0,       1818, 1818,  true, false,   4,   1,   1, Dyes._NULL          , Element.Tm        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Tin                     = new Materials(  57, TextureSet.SET_DULL              ,   1.0F,      0,  3, 1|2  |8   |32   |128      , 220, 220, 220,   0,   "Tin"                     ,   "Tin"                           ,    0,       0,        505,  505, false, false,   3,   1,   1, Dyes.dyeWhite       , Element.Sn        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1)));
-        Materials.Titanium                = new Materials(  28, TextureSet.SET_METALLIC          ,   7.0F,   1600,  3, 1|2  |8   |32|64|128      , 220, 160, 240,   0,   "Titanium"                ,   "Titanium"                      ,    0,       0,       1941, 1940,  true, false,   5,   1,   1, Dyes.dyePurple      , Element.Ti        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Tritanium               = new Materials( 329, TextureSet.SET_METALLIC          ,  20.0F,1435392,  6, 1|2  |8   |32|64          , 96, 0, 0,   0,   "Tritanium"               ,   "Tritanium"                     ,    0,       0,       9900, 9900,  true, false,   1,   1,   1, Dyes.dyeWhite       , Element.Tn  ,Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2))).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Tritium                 = new Materials(   3, TextureSet.SET_METALLIC          ,   1.0F,      0,  2,         16|32             , 255,   0,   0, 240,   "Tritium"                 ,   "Tritium"                       ,    0,       0,         14,    0, false,  true,  10,   1,   1, Dyes.dyeRed         , Element.T         , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4)));
-        Materials.Tungsten                = new Materials(  81, TextureSet.SET_METALLIC          ,   7.0F,   2560,  3, 1|2  |8   |32|64|128      ,  50,  50,  50,   0,   "Tungsten"                ,   "Tungsten"                      ,    0,       0,       3695, 3000,  true, false,   4,   1,   1, Dyes.dyeBlack       , Element.W         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 3), new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Uranium                 = new Materials(  98, TextureSet.SET_METALLIC          ,   6.0F,    512,  3, 1|2  |8   |32|64          ,  50, 240,  50,   0,   "Uranium"                 ,   "Uranium 238"                   ,    0,       0,       1405,    0, false, false,   4,   1,   1, Dyes.dyeGreen       , Element.U         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Uranium235              = new Materials(  97, TextureSet.SET_SHINY             ,   6.0F,    512,  3, 1|2  |8   |32|64          ,  70, 250,  70,   0,   "Uranium235"              ,   "Uranium 235"                   ,    0,       0,       1405,    0, false, false,   4,   1,   1, Dyes.dyeGreen       , Element.U_235     , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 2)));
-        Materials.Vanadium                = new Materials(  29, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             ,  50,  50,  50,   0,   "Vanadium"                ,   "Vanadium"                      ,    0,       0,       2183, 2183,  true, false,   2,   1,   1, Dyes.dyeBlack       , Element.V         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Ytterbium               = new Materials(  77, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             ,  44, 199,  80,   0,   "Ytterbium"               ,   "Ytterbium"                     ,    0,       0,       1097, 1097,  true, false,   4,   1,   1, Dyes._NULL          , Element.Yb        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Yttrium                 = new Materials(  45, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 220, 250, 220,   0,   "Yttrium"                 ,   "Yttrium"                       ,    0,       0,       1799, 1799,  true, false,   4,   1,   1, Dyes._NULL          , Element.Y         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1)));
-        Materials.Zinc                    = new Materials(  36, TextureSet.SET_METALLIC          ,   1.0F,      0,  1, 1|2  |8   |32             , 250, 240, 240,   0,   "Zinc"                    ,   "Zinc"                          ,    0,       0,        692,    0, false, false,   2,   1,   1, Dyes.dyeWhite       , Element.Zn        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1)));
+        Materials.Aluminium               = new Materials(  19, TextureSet.SET_DULL              ,  10.0F,    128,  2, 1|2  |8   |32|64|128      , 128, 200, 240,   0,   "Aluminium"               ,   "Aluminium"                     ,    0,       0,        933, 1700,  true, false,   3,   1,   1, Dyes.dyeLightBlue   , Element.Al        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.VOLATUS, 1))).disableAutoGeneratedBlastFurnaceRecipes();
+        Materials.Americium               = new Materials( 103, TextureSet.SET_METALLIC          ,   1.0F,      0,  3, 1|2  |8   |32             , 200, 200, 200,   0,   "Americium"               ,   "Americium"                     ,    0,       0,       1449,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Element.Am        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Antimony                = new Materials(  58, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             , 220, 220, 240,   0,   "Antimony"                ,   "Antimony"                      ,    0,       0,        903,    0, false, false,   2,   1,   1, Dyes.dyeLightGray   , Element.Sb        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.AQUA, 1)));
+        Materials.Argon                   = new Materials(  24, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             ,   0, 255,   0, 240,   "Argon"                   ,   "Argon"                         ,    0,       0,         83,    0, false,  true,   5,   1,   1, Dyes.dyeGreen       , Element.Ar        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AER, 2)));
+        Materials.Arsenic                 = new Materials(  39, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1|2  |8|16|32             , 255, 255, 255,   0,   "Arsenic"                 ,   "Arsenic"                       ,    0,       0,       1090,    0, false, false,   3,   1,   1, Dyes.dyeOrange      , Element.As        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VENENUM, 3)));
+        Materials.Barium                  = new Materials(  63, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 255, 255, 255,   0,   "Barium"                  ,   "Barium"                        ,    0,       0,       1000,    0, false, false,   1,   1,   1, Dyes._NULL          , Element.Ba        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VINCULUM, 3)));
+        Materials.Beryllium               = new Materials(   8, TextureSet.SET_METALLIC          ,  14.0F,     64,  2, 1|2  |8   |32|64          , 100, 180, 100,   0,   "Beryllium"               ,   "Beryllium"                     ,    0,       0,       1560,    0, false, false,   6,   1,   1, Dyes.dyeGreen       , Element.Be        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1)));
+        Materials.Bismuth                 = new Materials(  90, TextureSet.SET_METALLIC          ,   6.0F,     64,  1, 1|2  |8   |32|64|128      , 100, 160, 160,   0,   "Bismuth"                 ,   "Bismuth"                       ,    0,       0,        544,    0, false, false,   2,   1,   1, Dyes.dyeCyan        , Element.Bi        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 1)));
+        Materials.Boron                   = new Materials(   9, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1         |32             , 210, 250, 210,   0,   "Boron"                   ,   "Boron"                         ,    0,       0,       2349,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , Element.B         , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 3)));
+        Materials.Caesium                 = new Materials(  62, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 176, 196, 222,   0,   "Caesium"                 ,   "Caesium"                       ,    0,       0,        301,    0, false, false,   4,   1,   1, Dyes._NULL          , Element.Cs        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Calcium                 = new Materials(  26, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1         |32             , 255, 245, 245,   0,   "Calcium"                 ,   "Calcium"                       ,    0,       0,       1115, 1115,  true, false,   4,   1,   1, Dyes.dyePink        , Element.Ca        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.SANO, 1), new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 1)));
+        Materials.Carbon                  = new Materials(  10, TextureSet.SET_DULL              ,   1.0F,     64,  2, 1|2    |16|32|64|128      ,  20,  20,  20,   0,   "Carbon"                  ,   "Carbon"                        ,    0,       0,       3800,    0, false, false,   2,   1,   1, Dyes.dyeBlack       , Element.C         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1)));
+        Materials.Cadmium                 = new Materials(  55, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1    |8   |32             ,  50,  50,  60,   0,   "Cadmium"                 ,   "Cadmium"                       ,    0,       0,        594,    0, false, false,   3,   1,   1, Dyes.dyeGray        , Element.Cd        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1), new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1), new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1)));
+        Materials.Cerium                  = new Materials(  65, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 123, 212, 144,   0,   "Cerium"                  ,   "Cerium"                        ,    0,       0,       1068, 1068,  true, false,   4,   1,   1, Dyes._NULL          , Element.Ce        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Chlorine                = new Materials(  23, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255, 255, 255,   0,   "Chlorine"                ,   "Chlorine"                      ,    0,       0,        171,    0, false, false,   2,   1,   1, Dyes.dyeCyan        , Element.Cl        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 2), new TCAspects.TC_AspectStack(TCAspects.PANNUS, 1)));
+        Materials.Chrome                  = new Materials(  30, TextureSet.SET_SHINY             ,  11.0F,    256,  3, 1|2  |8   |32|64|128      , 255, 230, 230,   0,   "Chrome"                  ,   "Chrome"                        ,    0,       0,       2180, 1700,  true, false,   5,   1,   1, Dyes.dyePink        , Element.Cr        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1)));
+        Materials.Cobalt                  = new Materials(  33, TextureSet.SET_METALLIC          ,   8.0F,    512,  3, 1|2  |8   |32|64|128      ,  80,  80, 250,   0,   "Cobalt"                  ,   "Cobalt"                        ,    0,       0,       1768, 1700,  true, false,   3,   1,   1, Dyes.dyeBlue        , Element.Co        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 1))).disableAutoGeneratedBlastFurnaceRecipes();
+        Materials.Copper                  = new Materials(  35, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1|2  |8   |32   |128      , 255, 100,   0,   0,   "Copper"                  ,   "Copper"                        ,    0,       0,       1357,    0, false, false,   3,   1,   1, Dyes.dyeOrange      , Element.Cu        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 1)));
+        Materials.Deuterium               = new Materials(   2, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255, 255,   0, 240,   "Deuterium"               ,   "Deuterium"                     ,    0,       0,         14,    0, false,  true,  10,   1,   1, Dyes.dyeYellow      , Element.D         , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 3)));
+        Materials.Dysprosium              = new Materials(  73, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 105, 209,  80,   0,   "Dysprosium"              ,   "Dysprosium"                    ,    0,       0,       1680, 1680,  true, false,   4,   1,   1, Dyes._NULL          , Element.Dy        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 3)));
+        Materials.Empty                   = new Materials(   0, TextureSet.SET_NONE              ,   1.0F,      0,  2, 256/*Only when needed*/   , 255, 255, 255, 255,   "Empty"                   ,   "Empty"                         ,    0,       0,         -1,    0, false,  true,   1,   1,   1, Dyes._NULL          , Element._NULL     , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VACUOS, 2)));
+        Materials.Erbium                  = new Materials(  75, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             , 176, 152,  81,   0,   "Erbium"                  ,   "Erbium"                        ,    0,       0,       1802, 1802,  true, false,   4,   1,   1, Dyes._NULL          , Element.Er        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Europium                = new Materials(  70, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             , 246, 181, 255,   0,   "Europium"                ,   "Europium"                      ,    0,       0,       1099, 1099,  true, false,   4,   1,   1, Dyes._NULL          , Element.Eu        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Fluorine                = new Materials(  14, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255, 255, 255, 127,   "Fluorine"                ,   "Fluorine"                      ,    0,       0,         53,    0, false,  true,   2,   1,   1, Dyes.dyeGreen       , Element.F         , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 2)));
+        Materials.Gadolinium              = new Materials(  71, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             ,  59, 186,  28,   0,   "Gadolinium"              ,   "Gadolinium"                    ,    0,       0,       1585, 1585,  true, false,   4,   1,   1, Dyes._NULL          , Element.Gd        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Gallium                 = new Materials(  37, TextureSet.SET_SHINY             ,   1.0F,     64,  2, 1|2  |8   |32             , 220, 220, 255,   0,   "Gallium"                 ,   "Gallium"                       ,    0,       0,        302,    0, false, false,   5,   1,   1, Dyes.dyeLightGray   , Element.Ga        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1)));
+        Materials.Gold                    = new Materials(  86, TextureSet.SET_SHINY             ,  12.0F,     64,  2, 1|2  |8   |32|64|128      , 255, 255,  30,   0,   "Gold"                    ,   "Gold"                          ,    0,       0,       1337,    0, false, false,   4,   1,   1, Dyes.dyeYellow      , Element.Au        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 2)));
+        Materials.Holmium                 = new Materials(  74, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             ,  22,   8, 166,   0,   "Holmium"                 ,   "Holmium"                       ,    0,       0,       1734, 1734,  true, false,   4,   1,   1, Dyes._NULL          , Element.Ho        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Hydrogen                = new Materials(   1, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             ,   0,   0, 255, 240,   "Hydrogen"                ,   "Hydrogen"                      ,    1,      20,         14,    0, false,  true,   2,   1,   1, Dyes.dyeBlue        , Element.H         , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1)));
+        Materials.Helium                  = new Materials(   4, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255, 255,   0, 240,   "Helium"                  ,   "Helium"                        ,    0,       0,          1,    0, false,  true,   5,   1,   1, Dyes.dyeYellow      , Element.He        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AER, 2)));
+        Materials.Helium_3                = new Materials(   5, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255, 255,   0, 240,   "Helium_3"                ,   "Helium-3"                      ,    0,       0,          1,    0, false,  true,  10,   1,   1, Dyes.dyeYellow      , Element.He_3      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AER, 3)));
+        Materials.Indium                  = new Materials(  56, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             ,  64,   0, 128,   0,   "Indium"                  ,   "Indium"                        ,    0,       0,        429,    0, false, false,   4,   1,   1, Dyes.dyeGray        , Element.In        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Iridium                 = new Materials(  84, TextureSet.SET_DULL              ,   6.0F,   2560,  3, 1|2  |8   |32|64|128      , 240, 240, 245,   0,   "Iridium"                 ,   "Iridium"                       ,    0,       0,       2719, 4500,  true, false,  10,   1,   1, Dyes.dyeWhite       , Element.Ir        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Iron                    = new Materials(  32, TextureSet.SET_METALLIC          ,   6.0F,    256,  2, 1|2  |8   |32|64|128      , 200, 200, 200,   0,   "Iron"                    ,   "Iron"                          ,    0,       0,       1811,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Element.Fe        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 3)));
+        Materials.Lanthanum               = new Materials(  64, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 138, 138, 138,   0,   "Lanthanum"               ,   "Lanthanum"                     ,    0,       0,       1193, 1193,  true, false,   4,   1,   1, Dyes._NULL          , Element.La        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Lead                    = new Materials(  89, TextureSet.SET_DULL              ,   8.0F,     64,  1, 1|2  |8   |32|64|128      , 140, 100, 140,   0,   "Lead"                    ,   "Lead"                          ,    0,       0,        600,    0, false, false,   3,   1,   1, Dyes.dyePurple      , Element.Pb        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.ORDO, 1)));
+        Materials.Lithium                 = new Materials(   6, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1|2  |8   |32             , 225, 220, 255,   0,   "Lithium"                 ,   "Lithium"                       ,    0,       0,        454,    0, false, false,   4,   1,   1, Dyes.dyeLightBlue   , Element.Li        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1), new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2)));
+        Materials.Lutetium                = new Materials(  78, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             , 188,  62, 199,   0,   "Lutetium"                ,   "Lutetium"                      ,    0,       0,       1925, 1925,  true, false,   4,   1,   1, Dyes._NULL          , Element.Lu        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Magic                   = new Materials(-128, TextureSet.SET_SHINY             ,   8.0F,   5120,  5, 1|2|4|8|16|32|64|128      , 100,   0, 200,   0,   "Magic"                   ,   "Magic"                         ,    5,      32,       5000,    0, false, false,   7,   1,   1, Dyes.dyePurple      , Element.Ma        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 4)));
+        Materials.Magnesium               = new Materials(  18, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 255, 200, 200,   0,   "Magnesium"               ,   "Magnesium"                     ,    0,       0,        923,    0, false, false,   3,   1,   1, Dyes.dyePink        , Element.Mg        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.SANO, 1)));
+        Materials.Manganese               = new Materials(  31, TextureSet.SET_DULL              ,   7.0F,    512,  2, 1|2  |8   |32|64          , 250, 250, 250,   0,   "Manganese"               ,   "Manganese"                     ,    0,       0,       1519,    0, false, false,   3,   1,   1, Dyes.dyeWhite       , Element.Mn        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 3)));
+        Materials.Mercury                 = new Materials(  87, TextureSet.SET_SHINY             ,   1.0F,      0,  0,         16|32             , 255, 220, 220,   0,   "Mercury"                 ,   "Mercury"                       ,    5,      32,        234,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Element.Hg        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1), new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1)));
+        Materials.Molybdenum              = new Materials(  48, TextureSet.SET_SHINY             ,   7.0F,    512,  2, 1|2  |8   |32|64          , 180, 180, 220,   0,   "Molybdenum"              ,   "Molybdenum"                    ,    0,       0,       2896,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , Element.Mo        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 1)));
+        Materials.Neodymium               = new Materials(  67, TextureSet.SET_METALLIC          ,   7.0F,    512,  2, 1|2  |8   |32|64|128      , 100, 100, 100,   0,   "Neodymium"               ,   "Neodymium"                     ,    0,       0,       1297, 1297,  true, false,   4,   1,   1, Dyes._NULL          , Element.Nd        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 2)));
+        Materials.Neutronium              = new Materials( 129, TextureSet.SET_DULL              ,  24.0F, 655360,  6, 1|2  |8   |32|64|128      , 250, 250, 250,   0,   "Neutronium"              ,   "Neutronium"                    ,    0,       0,      10000, 10000, true, false,  20,   1,   1, Dyes.dyeWhite       , Element.Nt        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 3), new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 2))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe().setProcessingMaterialTierEU(TierEU.RECIPE_LuV);
+        Materials.Nickel                  = new Materials(  34, TextureSet.SET_METALLIC          ,   6.0F,     64,  2, 1|2  |8   |32|64|128      , 200, 200, 250,   0,   "Nickel"                  ,   "Nickel"                        ,    0,       0,       1728,    0, false, false,   4,   1,   1, Dyes.dyeLightBlue   , Element.Ni        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1)));
+        Materials.Niobium                 = new Materials(  47, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 190, 180, 200,   0,   "Niobium"                 ,   "Niobium"                       ,    0,       0,       2750, 2750,  true, false,   5,   1,   1, Dyes._NULL          , Element.Nb        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1)));
+        Materials.Nitrogen                = new Materials(  12, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             ,   0, 150, 200, 240,   "Nitrogen"                ,   "Nitrogen"                      ,    0,       0,         63,    0, false,  true,   2,   1,   1, Dyes.dyeCyan        , Element.N         , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AER, 2)));
+        Materials.Osmium                  = new Materials(  83, TextureSet.SET_METALLIC          ,  16.0F,   1280,  4, 1|2  |8   |32|64|128      ,  50,  50, 255,   0,   "Osmium"                  ,   "Osmium"                        ,    0,       0,       3306, 4500,  true, false,  10,   1,   1, Dyes.dyeBlue        , Element.Os        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1), new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Oxygen                  = new Materials(  13, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             ,   0, 100, 200, 240,   "Oxygen"                  ,   "Oxygen"                        ,    0,       0,         54,    0, false,  true,   1,   1,   1, Dyes.dyeWhite       , Element.O         , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AER, 1)));
+        Materials.Palladium               = new Materials(  52, TextureSet.SET_SHINY             ,   8.0F,    512,  4, 1|2  |8   |32|64|128      , 128, 128, 128,   0,   "Palladium"               ,   "Palladium"                     ,    0,       0,       1828, 1828,  true, false,   4,   1,   1, Dyes.dyeGray        , Element.Pd        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 3))).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Phosphorus              = new Materials(  21, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1         |32             , 255, 255,   0,   0,   "Phosphorus"              ,   "Phosphorus"                    ,    0,       0,        317,    0, false, false,   2,   1,   1, Dyes.dyeYellow      , Element.P         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.IGNIS, 2), new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1)));
+        Materials.Platinum                = new Materials(  85, TextureSet.SET_SHINY             ,  12.0F,     64,  4, 1|2  |8   |32|64|128      , 255, 255, 200,   0,   "Platinum"                ,   "Platinum"                      ,    0,       0,       2041,    0, false, false,   6,   1,   1, Dyes.dyeOrange      , Element.Pt        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 1)));
+        Materials.Plutonium               = new Materials( 100, TextureSet.SET_METALLIC          ,   6.0F,    512,  3, 1|2  |8   |32|64          , 240,  50,  50,   0,   "Plutonium"               ,   "Plutonium 239"                 ,    0,       0,        912,    0, false, false,   6,   1,   1, Dyes.dyeLime        , Element.Pu        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 2)));
+        Materials.Plutonium241            = new Materials( 101, TextureSet.SET_SHINY             ,   6.0F,    512,  3, 1|2  |8   |32|64          , 250,  70,  70,   0,   "Plutonium241"            ,   "Plutonium 241"                 ,    0,       0,        912,    0, false, false,   6,   1,   1, Dyes.dyeLime        , Element.Pu_241    , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 3)));
+        Materials.Potassium               = new Materials(  25, TextureSet.SET_METALLIC          ,   1.0F,      0,  1, 1|2       |32             , 154, 172, 223,   0,   "Potassium"               ,   "Potassium"                     ,    0,       0,        336,    0, false, false,   2,   1,   1, Dyes.dyeWhite       , Element.K         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1), new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1)));
+        Materials.Praseodymium            = new Materials(  66, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1|2  |8   |32             , 117, 214, 129,   0,   "Praseodymium"            ,   "Praseodymium"                  ,    0,       0,       1208, 1208,  true, false,   4,   1,   1, Dyes._NULL          , Element.Pr        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Promethium              = new Materials(  68, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             ,  36, 181,  53,   0,   "Promethium"              ,   "Promethium"                    ,    0,       0,       1315, 1315,  true, false,   4,   1,   1, Dyes._NULL          , Element.Pm        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Radon                   = new Materials(  93, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 255,   0, 255, 240,   "Radon"                   ,   "Radon"                         ,    0,       0,        202,    0, false,  true,   5,   1,   1, Dyes.dyePurple      , Element.Rn        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.AER, 1), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Rubidium                = new Materials(  43, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 240,  30,  30,   0,   "Rubidium"                ,   "Rubidium"                      ,    0,       0,        312,    0, false, false,   4,   1,   1, Dyes.dyeRed         , Element.Rb        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1)));
+        Materials.Samarium                = new Materials(  69, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 255, 255, 204,   0,   "Samarium"                ,   "Samarium"                      ,    0,       0,       1345, 1345,  true, false,   4,   1,   1, Dyes.dyeWhite       , Element.Sm        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1), new TCAspects.TC_AspectStack(TCAspects.MAGNETO,10)));
+        Materials.Scandium                = new Materials(  27, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 204, 204, 204,   0,   "Scandium"                ,   "Scandium"                      ,    0,       0,       1814, 1814,  true, false,   2,   1,   1, Dyes.dyeYellow      , Element.Sc        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Silicon                 = new Materials(  20, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             ,  60,  60,  80,   0,   "Silicon"                 ,   "Raw Silicon"                   ,    0,       0,       2273, 2273,  true, false,   1,   1,   1, Dyes.dyeBlack       , Element.Si        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 1)));
+        Materials.Silver                  = new Materials(  54, TextureSet.SET_SHINY             ,  10.0F,     64,  2, 1|2  |8   |32|64|128      , 220, 220, 255,   0,   "Silver"                  ,   "Silver"                        ,    0,       0,       1234,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Element.Ag        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1)));
+        Materials.Sodium                  = new Materials(  17, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1      |16|32             ,   0,   0, 150,   0,   "Sodium"                  ,   "Sodium"                        ,    0,       0,        370,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , Element.Na        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 2), new TCAspects.TC_AspectStack(TCAspects.LUX, 1)));
+        Materials.Strontium               = new Materials(  44, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1    |8   |32             , 200, 200, 200,   0,   "Strontium"               ,   "Strontium"                     ,    0,       0,       1050,    0, false, false,   1,   1,   1, Dyes.dyeLightGray   , Element.Sr        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 1)));
+        Materials.Sulfur                  = new Materials(  22, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1    |8   |32             , 200, 200,   0,   0,   "Sulfur"                  ,   "Sulfur"                        ,    0,       0,        388,    0, false, false,   2,   1,   1, Dyes.dyeYellow      , Element.S         , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1)));
+        Materials.Tantalum                = new Materials(  80, TextureSet.SET_SHINY             ,   6.0F,   2560,  3, 1|2  |8   |32             , 105, 183, 255,   0,   "Tantalum"                ,   "Tantalum"                      ,    0,       0,       3290, 3290,  true, false,   4,   1,   1, Dyes._NULL          , Element.Ta        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.VINCULUM, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Tellurium               = new Materials(  59, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1|2  |8   |32             , 206, 277,  86,   0,   "Tellurium"               ,   "Tellurium"                     ,    0,       0,        722,    0, false, false,   4,   1,   1, Dyes.dyeGray        , Element.Te        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Terbium                 = new Materials(  72, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 255, 255, 255,   0,   "Terbium"                 ,   "Terbium"                       ,    0,       0,       1629, 1629,  true, false,   4,   1,   1, Dyes._NULL          , Element.Tb        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Thorium                 = new Materials(  96, TextureSet.SET_SHINY             ,   6.0F,    512,  2, 1|2  |8   |32|64          ,   0,  30,   0,   0,   "Thorium"                 ,   "Thorium"                       ,    0,       0,       2115,    0, false, false,   4,   1,   1, Dyes.dyeBlack       , Element.Th        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Thulium                 = new Materials(  76, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             ,  89, 107, 194,   0,   "Thulium"                 ,   "Thulium"                       ,    0,       0,       1818, 1818,  true, false,   4,   1,   1, Dyes._NULL          , Element.Tm        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Tin                     = new Materials(  57, TextureSet.SET_DULL              ,   1.0F,      0,  3, 1|2  |8   |32   |128      , 220, 220, 220,   0,   "Tin"                     ,   "Tin"                           ,    0,       0,        505,  505, false, false,   3,   1,   1, Dyes.dyeWhite       , Element.Sn        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1)));
+        Materials.Titanium                = new Materials(  28, TextureSet.SET_METALLIC          ,   7.0F,   1600,  3, 1|2  |8   |32|64|128      , 220, 160, 240,   0,   "Titanium"                ,   "Titanium"                      ,    0,       0,       1941, 1940,  true, false,   5,   1,   1, Dyes.dyePurple      , Element.Ti        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Tritanium               = new Materials( 329, TextureSet.SET_METALLIC          ,  20.0F,1435392,  6, 1|2  |8   |32|64          , 96, 0, 0,   0,   "Tritanium"               ,   "Tritanium"                     ,    0,       0,       9900, 9900,  true, false,   1,   1,   1, Dyes.dyeWhite       , Element.Tn  ,Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.ORDO, 2))).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Tritium                 = new Materials(   3, TextureSet.SET_METALLIC          ,   1.0F,      0,  2,         16|32             , 255,   0,   0, 240,   "Tritium"                 ,   "Tritium"                       ,    0,       0,         14,    0, false,  true,  10,   1,   1, Dyes.dyeRed         , Element.T         , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 4)));
+        Materials.Tungsten                = new Materials(  81, TextureSet.SET_METALLIC          ,   7.0F,   2560,  3, 1|2  |8   |32|64|128      ,  50,  50,  50,   0,   "Tungsten"                ,   "Tungsten"                      ,    0,       0,       3695, 3000,  true, false,   4,   1,   1, Dyes.dyeBlack       , Element.W         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 3), new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Uranium                 = new Materials(  98, TextureSet.SET_METALLIC          ,   6.0F,    512,  3, 1|2  |8   |32|64          ,  50, 240,  50,   0,   "Uranium"                 ,   "Uranium 238"                   ,    0,       0,       1405,    0, false, false,   4,   1,   1, Dyes.dyeGreen       , Element.U         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Uranium235              = new Materials(  97, TextureSet.SET_SHINY             ,   6.0F,    512,  3, 1|2  |8   |32|64          ,  70, 250,  70,   0,   "Uranium235"              ,   "Uranium 235"                   ,    0,       0,       1405,    0, false, false,   4,   1,   1, Dyes.dyeGreen       , Element.U_235     , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 2)));
+        Materials.Vanadium                = new Materials(  29, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             ,  50,  50,  50,   0,   "Vanadium"                ,   "Vanadium"                      ,    0,       0,       2183, 2183,  true, false,   2,   1,   1, Dyes.dyeBlack       , Element.V         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Ytterbium               = new Materials(  77, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8   |32             ,  44, 199,  80,   0,   "Ytterbium"               ,   "Ytterbium"                     ,    0,       0,       1097, 1097,  true, false,   4,   1,   1, Dyes._NULL          , Element.Yb        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Yttrium                 = new Materials(  45, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2  |8   |32             , 220, 250, 220,   0,   "Yttrium"                 ,   "Yttrium"                       ,    0,       0,       1799, 1799,  true, false,   4,   1,   1, Dyes._NULL          , Element.Y         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1)));
+        Materials.Zinc                    = new Materials(  36, TextureSet.SET_METALLIC          ,   1.0F,      0,  1, 1|2  |8   |32             , 250, 240, 240,   0,   "Zinc"                    ,   "Zinc"                          ,    0,       0,        692,    0, false, false,   2,   1,   1, Dyes.dyeWhite       , Element.Zn        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.SANO, 1)));
 
-        Materials.Grade1PurifiedWater                = new Materials(   554, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16             ,   63,   76, 253, 0,   "Grade1PurifiedWater"                ,   "Filtered Water (Grade 1)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue               , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true);
-        Materials.Grade2PurifiedWater                = new Materials(   555, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16             ,   93,   93, 254, 0,   "Grade2PurifiedWater"                ,   "Ozonated Water (Grade 2)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue               , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true);
-        Materials.Grade3PurifiedWater                = new Materials(   556, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16            ,   115,   109, 254, 0,   "Grade3PurifiedWater"                ,   "Flocculated Water (Grade 3)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue             , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true);
-        Materials.Grade4PurifiedWater                = new Materials(   557, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16            ,   135,   126, 255, 0,   "Grade4PurifiedWater"                ,   "pH Neutralized Water (Grade 4)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                 , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true);
-        Materials.Grade5PurifiedWater                = new Materials(   558, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16             ,   152,   144, 255, 0,   "Grade5PurifiedWater"                ,   "Extreme-Temperature Treated Water (Grade 5)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                 , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true);
-        Materials.Grade6PurifiedWater                = new Materials(   559, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16            ,   168,   161, 255, 0,   "Grade6PurifiedWater"                ,   "Ultraviolet Treated Electrically Neutral Water (Grade 6)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                 , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true);
-        Materials.Grade7PurifiedWater                = new Materials(   560, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16             ,   183,   179, 255, 0,   "Grade7PurifiedWater"                ,   "Degassed Decontaminant-Free Water (Grade 7)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true);
-        Materials.Grade8PurifiedWater                = new Materials(   561, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16             ,   197,   197, 255, 0,   "Grade8PurifiedWater"                ,   "Subatomically Perfect Water (Grade 8)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                 , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true);
-        Materials.FlocculationWasteLiquid            = new Materials(562, TextureSet.SET_FLUID, 1.0f, 0, 2, 16, 61, 58, 82, 0, "FlocculationWasteLiquid", "Flocculation Waste Liquid", 0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                 , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))).setHasCorrespondingFluid(true);
+        Materials.Grade1PurifiedWater                = new Materials(   554, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16             ,   63,   76, 253, 0,   "Grade1PurifiedWater"                ,   "Filtered Water (Grade 1)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue               , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))).setHasCorrespondingFluid(true);
+        Materials.Grade2PurifiedWater                = new Materials(   555, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16             ,   93,   93, 254, 0,   "Grade2PurifiedWater"                ,   "Ozonated Water (Grade 2)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue               , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))).setHasCorrespondingFluid(true);
+        Materials.Grade3PurifiedWater                = new Materials(   556, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16            ,   115,   109, 254, 0,   "Grade3PurifiedWater"                ,   "Flocculated Water (Grade 3)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue             , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))).setHasCorrespondingFluid(true);
+        Materials.Grade4PurifiedWater                = new Materials(   557, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16            ,   135,   126, 255, 0,   "Grade4PurifiedWater"                ,   "pH Neutralized Water (Grade 4)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                 , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))).setHasCorrespondingFluid(true);
+        Materials.Grade5PurifiedWater                = new Materials(   558, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16             ,   152,   144, 255, 0,   "Grade5PurifiedWater"                ,   "Extreme-Temperature Treated Water (Grade 5)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                 , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))).setHasCorrespondingFluid(true);
+        Materials.Grade6PurifiedWater                = new Materials(   559, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16            ,   168,   161, 255, 0,   "Grade6PurifiedWater"                ,   "Ultraviolet Treated Electrically Neutral Water (Grade 6)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                 , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))).setHasCorrespondingFluid(true);
+        Materials.Grade7PurifiedWater                = new Materials(   560, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16             ,   183,   179, 255, 0,   "Grade7PurifiedWater"                ,   "Degassed Decontaminant-Free Water (Grade 7)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))).setHasCorrespondingFluid(true);
+        Materials.Grade8PurifiedWater                = new Materials(   561, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16             ,   197,   197, 255, 0,   "Grade8PurifiedWater"                ,   "Subatomically Perfect Water (Grade 8)"                      ,    0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                 , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))).setHasCorrespondingFluid(true);
+        Materials.FlocculationWasteLiquid            = new Materials(562, TextureSet.SET_FLUID, 1.0f, 0, 2, 16, 61, 58, 82, 0, "FlocculationWasteLiquid", "Flocculation Waste Liquid", 0,      0,         273,    0, false,  true,   2,   1,   1, Dyes.dyeBlue                 , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))).setHasCorrespondingFluid(true);
 
-        Materials.Flerovium                          = new Materials( 984, TextureSet.SET_SHINY             ,   1.0F,      0,  0, 1|2  |8   |32|64|128      , 255,255, 255,   0,   "Flerovium_GT5U"                ,    "Flerovium"                ,     0,       0,         0,    0, false,  false,  1 ,  1,   1, Dyes.dyeWhite      , Element.Fl         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 3))).disableAutoGeneratedBlastFurnaceRecipes();
+        Materials.Flerovium                          = new Materials( 984, TextureSet.SET_SHINY             ,   1.0F,      0,  0, 1|2  |8   |32|64|128      , 255,255, 255,   0,   "Flerovium_GT5U"                ,    "Flerovium"                ,     0,       0,         0,    0, false,  false,  1 ,  1,   1, Dyes.dyeWhite      , Element.Fl         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 3))).disableAutoGeneratedBlastFurnaceRecipes();
         Materials.Organic                            = new Materials(  -1, TextureSet.SET_LEAF              ,   1.0F,      0,  1,                                          false,   "Organic"                 ,   "Organic"                       );
         Materials.AnyCopper                          = new Materials(  -1, TextureSet.SET_SHINY             ,   1.0F,      0,  3,                                          false,   "AnyCopper"               ,   "AnyCopper"                     );
         Materials.AnyBronze                          = new Materials(  -1, TextureSet.SET_SHINY             ,   1.0F,      0,  3,                                          false,   "AnyBronze"               ,   "AnyBronze"                     );
@@ -304,7 +304,7 @@ public class MaterialsInit1 {
         Materials.Adluorite               = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1|2  |8      |64|128      , 255, 255, 255,   0,   "Adluorite"               ,   "Adluorite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLightBlue   );
         Materials.Agate                   = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1                         , 255, 255, 255,   0,   "Agate"                   ,   "Agate"                         ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes._NULL          );
         Materials.Alduorite               = new Materials( 485, TextureSet.SET_SHINY             ,  32.0F,   8192,  1, 1|2  |8      |64|128      , 159, 180, 180,   0,   "Alduorite"               ,   "Alduorite"                     ,    0,       0,       6600, 6600,  true, false,   1,   1,   1, Dyes._NULL          ).disableAutoGeneratedBlastFurnaceRecipes().setTurbineMultipliers(6, 1, 1);
-        Materials.Amber                   = new Materials( 514, TextureSet.SET_RUBY              ,   4.0F,    128,  2, 1  |4|8      |64          , 255, 128,   0, 127,   "Amber"                   ,   "Amber"                         ,    5,       3,         -1,    0, false,  true,   1,   1,   1, Dyes.dyeOrange      ,1,  Arrays.asList(new MaterialStack(Carbon, 10), new MaterialStack(Hydrogen, 10), new MaterialStack(Oxygen, 16)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VINCULUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1)));
+        Materials.Amber                   = new Materials( 514, TextureSet.SET_RUBY              ,   4.0F,    128,  2, 1  |4|8      |64          , 255, 128,   0, 127,   "Amber"                   ,   "Amber"                         ,    5,       3,         -1,    0, false,  true,   1,   1,   1, Dyes.dyeOrange      ,1,  Arrays.asList(new MaterialStack(Carbon, 10), new MaterialStack(Hydrogen, 10), new MaterialStack(Oxygen, 16)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VINCULUM, 2), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1)));
         Materials.Ammonium                = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1                         , 255, 255, 255,   0,   "Ammonium"                ,   "Ammonium"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Amordrine               = new Materials(  -1, TextureSet.SET_NONE              ,   6.0F,     64,  2, 1|2  |8      |64          , 255, 255, 255,   0,   "Amordrine"               ,   "Amordrine"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Andesite                = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1    |8                   , 255, 255, 255,   0,   "Andesite"                ,   "Andesite"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
@@ -321,8 +321,8 @@ public class MaterialsInit1 {
         Materials.Blutonium               = new Materials(  -1, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2  |8                   ,   0,   0, 255,   0,   "Blutonium"               ,   "Blutonium"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeBlue        );
         Materials.Carmot                  = new Materials( 962, TextureSet.SET_METALLIC          ,  16.0F,    128,  1, 1|2  |8      |64          , 217, 205, 140,   0,   "Carmot"                  ,   "Carmot"                        ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Celenegil               = new Materials( 964, TextureSet.SET_METALLIC          ,  10.0F,   4096,  2, 1|2  |8      |64          , 148, 204,  72,   0,   "Celenegil"               ,   "Celenegil"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
-        Materials.CertusQuartz            = new Materials( 516, TextureSet.SET_QUARTZ            ,   5.0F,     32,  1, 1  |4|8      |64          , 210, 210, 230,   0,   "CertusQuartz"            ,   "Certus Quartz"                 ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1)));
-        Materials.CertusQuartzCharged     = new Materials( 517, TextureSet.SET_QUARTZ            ,   5.0F,     32,  1,       8                   , 221, 221, 236,   0,   "ChargedCertusQuartz"     ,   "Charged Certus Quartz"         ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1)));
+        Materials.CertusQuartz            = new Materials( 516, TextureSet.SET_QUARTZ            ,   5.0F,     32,  1, 1  |4|8      |64          , 210, 210, 230,   0,   "CertusQuartz"            ,   "Certus Quartz"                 ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1)));
+        Materials.CertusQuartzCharged     = new Materials( 517, TextureSet.SET_QUARTZ            ,   5.0F,     32,  1,       8                   , 221, 221, 236,   0,   "ChargedCertusQuartz"     ,   "Charged Certus Quartz"         ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1), new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1)));
         Materials.Ceruclase               = new Materials( 952, TextureSet.SET_METALLIC          ,  32.0F,   1280,  2, 1|2  |8      |64|128      , 140, 189, 208,   0,   "Ceruclase"               ,   "Ceruclase"                     ,    0,       0,         6600,    6600, true, false,   1,   1,   1, Dyes.dyeBlue        ).disableAutoGeneratedBlastFurnaceRecipes().setTurbineMultipliers(1, 22, 1);
         Materials.Citrine                 = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1                         , 255, 255, 255,   0,   "Citrine"                 ,   "Citrine"                       ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes._NULL          );
         Materials.CobaltHexahydrate       = new Materials( 853, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1      |16                ,  80,  80, 250,   0,   "CobaltHexahydrate"       ,   "Cobalt Hexahydrate"            ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlue        );
@@ -338,7 +338,7 @@ public class MaterialsInit1 {
         Materials.DarkIron                = new Materials( 342, TextureSet.SET_DULL              ,   7.0F,    384,  3, 1|2  |8      |64          ,  55,  40,  60,   0,   "DarkIron"                ,   "Deep Dark Iron"                ,    0,       0,         -1,    0, false, false,   5,   1,   1, Dyes.dyePurple      );
         Materials.DarkStone               = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1                         , 255, 255, 255,   0,   "DarkStone"               ,   "Dark Stone"                    ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeBlack       );
         Materials.Demonite                = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1                         , 255, 255, 255,   0,   "Demonite"                ,   "Demonite"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeRed         );
-        Materials.Desh                    = new Materials( 884, TextureSet.SET_DULL              ,  20.0F,   1280,  4, 1|2  |8   |32|64|128      ,  40,  40,  40,   0,   "Desh"                    ,   "Desh"                          ,    0,       0,       2500, 2500,  true, false,   1,   1,   1, Dyes.dyeBlack       ,Element.De, Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Desh                    = new Materials( 884, TextureSet.SET_DULL              ,  20.0F,   1280,  4, 1|2  |8   |32|64|128      ,  40,  40,  40,   0,   "Desh"                    ,   "Desh"                          ,    0,       0,       2500, 2500,  true, false,   1,   1,   1, Dyes.dyeBlack       ,Element.De, Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.Desichalkos             = new Materials(  -1, TextureSet.SET_NONE              ,   6.0F,   1280,  3, 1|2  |8      |64          , 255, 255, 255,   0,   "Desichalkos"             ,   "Desichalkos"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Dilithium               = new Materials( 515, TextureSet.SET_DIAMOND           ,   1.0F,      0,  1, 1  |4|8|16                , 255, 250, 250, 127,   "Dilithium"               ,   "Dilithium"                     ,    0,       0,         -1,    0, false,  true,   1,   1,   1, Dyes.dyeWhite       );
         Materials.Draconic                = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1                         , 255, 255, 255,   0,   "Draconic"                ,   "Draconic"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeRed         );
@@ -347,44 +347,44 @@ public class MaterialsInit1 {
         Materials.Eclogite                = new Materials( 860, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1                         , 255, 255, 255,   0,   "Eclogite"                ,   "Eclogite"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.ElectrumFlux            = new Materials( 320, TextureSet.SET_SHINY             ,  16.0F,    512,  3, 1|2  |8      |64|128      , 255, 255, 120,   0,   "ElectrumFlux"            ,   "Fluxed Electrum"               ,    0,       0,       9000, 9000,  true, false,   1,   1,   1, Dyes.dyeYellow      ).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.Emery                   = new Materials( 861, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1    |8                   , 255, 255, 255,   0,   "Emery"                   ,   "Emery"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
-        Materials.EnderiumBase            = new Materials( 380, TextureSet.SET_DULL              ,  16.0F,    768,  4, 1|2          |64|128      ,  72, 119, 153,   0,   "EnderiumBase"            ,   "Enderium Base"                 ,    0,       0,       3600, 3600,  true, false,   1,   1,   1, Dyes.dyeGreen       , 1, Arrays.asList(new MaterialStack(Tin, 2), new MaterialStack(Silver, 1), new MaterialStack(Platinum, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.EnderiumBase            = new Materials( 380, TextureSet.SET_DULL              ,  16.0F,    768,  4, 1|2          |64|128      ,  72, 119, 153,   0,   "EnderiumBase"            ,   "Enderium Base"                 ,    0,       0,       3600, 3600,  true, false,   1,   1,   1, Dyes.dyeGreen       , 1, Arrays.asList(new MaterialStack(Tin, 2), new MaterialStack(Silver, 1), new MaterialStack(Platinum, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.Energized               = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 0                         , 255, 255, 255,   0,   "Energized"               ,   "Energized"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Epidote                 = new Materials( 862, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1                         , 255, 255, 255,   0,   "Epidote"                 ,   "Epidote"                       ,    0,       0,         -1,    0, false, false,   0,   1,   1, Dyes._NULL          );
         Materials.Eximite                 = new Materials( 959, TextureSet.SET_METALLIC          ,   5.0F,   2560,  3, 1|2  |8      |64          , 124,  90, 150,   0,   "Eximite"                 ,   "Eximite"                       ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
-        Materials.FierySteel              = new Materials( 346, TextureSet.SET_FIERY             ,   8.0F,    256,  3, 1|2          |64|128      ,  64,   0,   0,   0,   "FierySteel"              ,   "Fiery Steel"                   ,    5,    2048,       1811, 1800,  true, false,   1,   1,   1, Dyes.dyeRed         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 3), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3), new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 3))).disableAutoGeneratedBlastFurnaceRecipes();
+        Materials.FierySteel              = new Materials( 346, TextureSet.SET_FIERY             ,   8.0F,    256,  3, 1|2          |64|128      ,  64,   0,   0,   0,   "FierySteel"              ,   "Fiery Steel"                   ,    5,    2048,       1811, 1800,  true, false,   1,   1,   1, Dyes.dyeRed         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 3), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 3), new TCAspects.TC_AspectStack(TCAspects.CORPUS, 3))).disableAutoGeneratedBlastFurnaceRecipes();
         Materials.Firestone               = new Materials( 347, TextureSet.SET_QUARTZ            ,   6.0F,   1280,  3, 1  |4|8      |64          , 200,  20,   0,   0,   "Firestone"               ,   "Firestone"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeRed         );
         Materials.Fluorite                = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1    |8                   , 255, 255, 255,   0,   "Fluorite"                ,   "Fluorite"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeGreen       );
-        Materials.FoolsRuby               = new Materials( 512, TextureSet.SET_RUBY              ,   1.0F,      0,  2, 1  |4|8                   , 255, 100, 100, 127,   "FoolsRuby"               ,   "Spinel"                          ,    0,       0,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeRed         , 1, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 4)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 2)));
-        Materials.Force                   = new Materials( 521, TextureSet.SET_DIAMOND           ,  10.0F,    128,  3, 1|2|4|8      |64|128      , 255, 255,   0,   0,   "Force"                   ,   "Force"                         ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeYellow      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 5)));
-        Materials.Forcicium               = new Materials( 518, TextureSet.SET_DIAMOND           ,   1.0F,      0,  1, 1  |4|8|16                ,  50,  50,  70,   0,   "Forcicium"               ,   "Forcicium"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeGreen       , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2)));
-        Materials.Forcillium              = new Materials( 519, TextureSet.SET_DIAMOND           ,   1.0F,      0,  1, 1  |4|8|16                ,  50,  50,  70,   0,   "Forcillium"              ,   "Forcillium"                    ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeGreen       , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2)));
+        Materials.FoolsRuby               = new Materials( 512, TextureSet.SET_RUBY              ,   1.0F,      0,  2, 1  |4|8                   , 255, 100, 100, 127,   "FoolsRuby"               ,   "Spinel"                          ,    0,       0,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeRed         , 1, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 4)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 2), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 2)));
+        Materials.Force                   = new Materials( 521, TextureSet.SET_DIAMOND           ,  10.0F,    128,  3, 1|2|4|8      |64|128      , 255, 255,   0,   0,   "Force"                   ,   "Force"                         ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeYellow      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 5)));
+        Materials.Forcicium               = new Materials( 518, TextureSet.SET_DIAMOND           ,   1.0F,      0,  1, 1  |4|8|16                ,  50,  50,  70,   0,   "Forcicium"               ,   "Forcicium"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeGreen       , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2)));
+        Materials.Forcillium              = new Materials( 519, TextureSet.SET_DIAMOND           ,   1.0F,      0,  1, 1  |4|8|16                ,  50,  50,  70,   0,   "Forcillium"              ,   "Forcillium"                    ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeGreen       , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2)));
         Materials.Gabbro                  = new Materials( 863, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 255, 255, 255,   0,   "Gabbro"                  ,   "Gabbro"                        ,    0,       0,         -1,    0, false, false,   0,   1,   1, Dyes._NULL          );
-        Materials.Glowstone               = new Materials( 811, TextureSet.SET_SHINY             ,   1.0F,      0,  1, 1      |16                , 255, 255,   0,   0,   "Glowstone"               ,   "Glowstone"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUX, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1)));
+        Materials.Glowstone               = new Materials( 811, TextureSet.SET_SHINY             ,   1.0F,      0,  1, 1      |16                , 255, 255,   0,   0,   "Glowstone"               ,   "Glowstone"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUX, 2), new TCAspects.TC_AspectStack(TCAspects.SENSUS, 1)));
         Materials.Gneiss                  = new Materials( 864, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 255, 255, 255,   0,   "Gneiss"                  ,   "Gneiss"                        ,    0,       0,         -1,    0, false, false,   0,   1,   1, Dyes._NULL          );
-        Materials.Graphite                = new Materials( 865, TextureSet.SET_DULL              ,   5.0F,     32,  2, 1    |8|16   |64          , 128, 128, 128,   0,   "Graphite"                ,   "Graphite"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeGray        , 0, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1)));
-        Materials.Graphene                = new Materials( 819, TextureSet.SET_DULL              ,   6.0F,     32,  1, 1            |64          , 128, 128, 128,   0,   "Graphene"                ,   "Graphene"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeGray        , 0, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1)));
+        Materials.Graphite                = new Materials( 865, TextureSet.SET_DULL              ,   5.0F,     32,  2, 1    |8|16   |64          , 128, 128, 128,   0,   "Graphite"                ,   "Graphite"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeGray        , 0, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 2), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1)));
+        Materials.Graphene                = new Materials( 819, TextureSet.SET_DULL              ,   6.0F,     32,  1, 1            |64          , 128, 128, 128,   0,   "Graphene"                ,   "Graphene"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeGray        , 0, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 2), new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1)));
         Materials.Greenschist             = new Materials( 866, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 255, 255, 255,   0,   "Greenschist"             ,   "Green Schist"                  ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGreen       );
         Materials.Greenstone              = new Materials( 867, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 255, 255, 255,   0,   "Greenstone"              ,   "Greenstone"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGreen       );
         Materials.Greywacke               = new Materials( 897, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 255, 255, 255,   0,   "Greywacke"               ,   "Greywacke"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        );
         Materials.Haderoth                = new Materials( 963, TextureSet.SET_METALLIC          ,  10.0F,   3200,  3, 1|2  |8      |64          , 119,  52,  30,   0,   "Haderoth"                ,   "Haderoth"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Hematite                = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1|2  |8                   , 255, 255, 255,   0,   "Hematite"                ,   "Hematite"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes._NULL          );
         Materials.Hepatizon               = new Materials( 957, TextureSet.SET_METALLIC          ,  12.0F,    128,  2, 1|2  |8      |64          , 117,  94, 117,   0,   "Hepatizon"               ,   "Hepatizon"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
-        Materials.HSLA                    = new Materials( 322, TextureSet.SET_METALLIC          ,   6.0F,    500,  3, 1|2          |64|128      , 128, 128, 128,   0,   "HSLA"                    ,   "HSLA Steel"                    ,    0,       0,       1811, 1000,  true, false,   3,   1,   1, Dyes._NULL          , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1)));
+        Materials.HSLA                    = new Materials( 322, TextureSet.SET_METALLIC          ,   6.0F,    500,  3, 1|2          |64|128      , 128, 128, 128,   0,   "HSLA"                    ,   "HSLA Steel"                    ,    0,       0,       1811, 1000,  true, false,   3,   1,   1, Dyes._NULL          , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1), new TCAspects.TC_AspectStack(TCAspects.ORDO, 1)));
         Materials.Ignatius                = new Materials( 950, TextureSet.SET_METALLIC          ,  12.0F,    512,  2, 1|2                       , 255, 169,  83,   0,   "Ignatius"                ,   "Ignatius"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Infernal                = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 0                         , 255, 255, 255,   0,   "Infernal"                ,   "Infernal"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Infuscolium             = new Materials( 490, TextureSet.SET_METALLIC          ,   6.0F,     64,  2, 1|2  |8      |64          , 146,  33,  86,   0,   "Infuscolium"             ,   "Infuscolium"                   ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes._NULL          );
         Materials.InfusedGold             = new Materials( 323, TextureSet.SET_SHINY             ,  12.0F,     64,  3, 1|2  |8      |64|128      , 255, 200,  60,   0,   "InfusedGold"             ,   "Infused Gold"                  ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeYellow      );
-        Materials.InfusedAir              = new Materials( 540, TextureSet.SET_SHARDS            ,   8.0F,     64,  3, 1  |4|8      |64|128      , 255, 255,   0,   0,   "InfusedAir"              ,   "Aer"                           ,    5,     160,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeYellow      , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 2)));
-        Materials.InfusedFire             = new Materials( 541, TextureSet.SET_SHARDS            ,   8.0F,     64,  3, 1  |4|8      |64|128      , 255,   0,   0,   0,   "InfusedFire"             ,   "Ignis"                         ,    5,     320,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeRed         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2)));
-        Materials.InfusedEarth            = new Materials( 542, TextureSet.SET_SHARDS            ,   8.0F,    256,  3, 1  |4|8      |64|128      ,   0, 255,   0,   0,   "InfusedEarth"            ,   "Terra"                         ,    5,     160,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeGreen       , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 2)));
-        Materials.InfusedWater            = new Materials( 543, TextureSet.SET_SHARDS            ,   8.0F,     64,  3, 1  |4|8      |64|128      ,   0,   0, 255,   0,   "InfusedWater"            ,   "Aqua"                          ,    5,     160,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeBlue        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2)));
-        Materials.InfusedEntropy          = new Materials( 544, TextureSet.SET_SHARDS            ,  32.0F,     64,  4, 1  |4|8      |64|128      ,  62,  62,  62,   0,   "InfusedEntropy"          ,   "Perditio"                      ,    5,     320,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeBlack       , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 2)));
-        Materials.InfusedOrder            = new Materials( 545, TextureSet.SET_SHARDS            ,   8.0F,     64,  3, 1  |4|8      |64|128      , 252, 252, 252,   0,   "InfusedOrder"            ,   "Ordo"                          ,    5,     240,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeWhite       , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2)));
-        Materials.InfusedVis              = new Materials(  -1, TextureSet.SET_SHARDS            ,   8.0F,     64,  3, 1  |4|8      |64|128      , 255,   0, 255,   0,   "InfusedVis"              ,   "Auram"                         ,    5,     240,         -1,    0, false,  true,   3,   1,   1, Dyes.dyePurple      , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 2)));
-        Materials.InfusedDull             = new Materials(  -1, TextureSet.SET_SHARDS            ,  32.0F,     64,  3, 1  |4|8      |64|128      , 100, 100, 100,   0,   "InfusedDull"             ,   "Vacuus"                        ,    5,     160,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeLightGray   , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2)));
+        Materials.InfusedAir              = new Materials( 540, TextureSet.SET_SHARDS            ,   8.0F,     64,  3, 1  |4|8      |64|128      , 255, 255,   0,   0,   "InfusedAir"              ,   "Aer"                           ,    5,     160,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeYellow      , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1), new TCAspects.TC_AspectStack(TCAspects.AER, 2)));
+        Materials.InfusedFire             = new Materials( 541, TextureSet.SET_SHARDS            ,   8.0F,     64,  3, 1  |4|8      |64|128      , 255,   0,   0,   0,   "InfusedFire"             ,   "Ignis"                         ,    5,     320,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeRed         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 2)));
+        Materials.InfusedEarth            = new Materials( 542, TextureSet.SET_SHARDS            ,   8.0F,    256,  3, 1  |4|8      |64|128      ,   0, 255,   0,   0,   "InfusedEarth"            ,   "Terra"                         ,    5,     160,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeGreen       , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1), new TCAspects.TC_AspectStack(TCAspects.TERRA, 2)));
+        Materials.InfusedWater            = new Materials( 543, TextureSet.SET_SHARDS            ,   8.0F,     64,  3, 1  |4|8      |64|128      ,   0,   0, 255,   0,   "InfusedWater"            ,   "Aqua"                          ,    5,     160,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeBlue        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1), new TCAspects.TC_AspectStack(TCAspects.AQUA, 2)));
+        Materials.InfusedEntropy          = new Materials( 544, TextureSet.SET_SHARDS            ,  32.0F,     64,  4, 1  |4|8      |64|128      ,  62,  62,  62,   0,   "InfusedEntropy"          ,   "Perditio"                      ,    5,     320,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeBlack       , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1), new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 2)));
+        Materials.InfusedOrder            = new Materials( 545, TextureSet.SET_SHARDS            ,   8.0F,     64,  3, 1  |4|8      |64|128      , 252, 252, 252,   0,   "InfusedOrder"            ,   "Ordo"                          ,    5,     240,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeWhite       , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1), new TCAspects.TC_AspectStack(TCAspects.ORDO, 2)));
+        Materials.InfusedVis              = new Materials(  -1, TextureSet.SET_SHARDS            ,   8.0F,     64,  3, 1  |4|8      |64|128      , 255,   0, 255,   0,   "InfusedVis"              ,   "Auram"                         ,    5,     240,         -1,    0, false,  true,   3,   1,   1, Dyes.dyePurple      , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1), new TCAspects.TC_AspectStack(TCAspects.AURAM, 2)));
+        Materials.InfusedDull             = new Materials(  -1, TextureSet.SET_SHARDS            ,  32.0F,     64,  3, 1  |4|8      |64|128      , 100, 100, 100,   0,   "InfusedDull"             ,   "Vacuus"                        ,    5,     160,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeLightGray   , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1), new TCAspects.TC_AspectStack(TCAspects.VACUOS, 2)));
         Materials.Inolashite              = new Materials( 954, TextureSet.SET_NONE              ,   8.0F,   2304,  3, 1|2  |8      |64          , 148, 216, 187,   0,   "Inolashite"              ,   "Inolashite"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGreen       );
         Materials.Invisium                = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1                         , 255, 255, 255,   0,   "Invisium"                ,   "Invisium"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes._NULL          );
-        Materials.Jade                    = new Materials( 537, TextureSet.SET_SHINY             ,   1.0F,     16,  2, 1  |4|8      |64          ,   0, 100,   0,   0,   "Jade"                    ,   "Jade"                          ,    0,       0,         -1,    0, false, false,   5,   1,   1, Dyes.dyeGreen       ,0, Arrays.asList(new MaterialStack(Sodium, 1), new MaterialStack(Aluminium, 1), new MaterialStack(Silicon, 2), new MaterialStack(Oxygen, 6)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 6), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 3)));
+        Materials.Jade                    = new Materials( 537, TextureSet.SET_SHINY             ,   1.0F,     16,  2, 1  |4|8      |64          ,   0, 100,   0,   0,   "Jade"                    ,   "Jade"                          ,    0,       0,         -1,    0, false, false,   5,   1,   1, Dyes.dyeGreen       ,0, Arrays.asList(new MaterialStack(Sodium, 1), new MaterialStack(Aluminium, 1), new MaterialStack(Silicon, 2), new MaterialStack(Oxygen, 6)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 6), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 3)));
         Materials.Kalendrite              = new Materials( 953, TextureSet.SET_METALLIC          ,   5.0F,   2560,  3, 1|2                       , 170,  91, 189,   0,   "Kalendrite"              ,   "Kalendrite"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Komatiite               = new Materials( 869, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 255, 255, 255,   0,   "Komatiite"               ,   "Komatiite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      );
         Materials.Lava                    = new Materials( 700, TextureSet.SET_FLUID             ,   1.0F,      0,  1,         16                , 255,  64,   0,   0,   "Lava"                    ,   "Lava"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      );
@@ -393,20 +393,20 @@ public class MaterialsInit1 {
         Materials.Magma                   = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 0                         , 255,  64,   0,   0,   "Magma"                   ,   "Magma"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      );
         Materials.Mawsitsit               = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 1                         , 255, 255, 255,   0,   "Mawsitsit"               ,   "Mawsitsit"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes._NULL          );
         Materials.Mercassium              = new Materials(  -1, TextureSet.SET_NONE              ,   6.0F,     64,  1, 1|2  |8      |64          , 255, 255, 255,   0,   "Mercassium"              ,   "Mercassium"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
-        Materials.MeteoricIron            = new Materials( 340, TextureSet.SET_METALLIC          ,   6.0F,    384,  3, 1|2  |8   |32|64          , 100,  50,  80,   0,   "MeteoricIron"            ,   "Meteoric Iron"                 ,    0,       0,       1811, 1000,  true, false,   1,   1,   1, Dyes.dyeGray        ,Element.SpFe, Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1)));
-        Materials.MeteoricSteel           = new Materials( 341, TextureSet.SET_METALLIC          ,   6.0F,    768,  4, 1|2          |64          ,  50,  25,  40,   0,   "MeteoricSteel"           ,   "Meteoric Steel"                ,    0,       0,       1811, 1000,  true, false,   4,  51,  50, Dyes.dyeGray        , 1, Arrays.asList(new MaterialStack(Materials.MeteoricIron, 50), new MaterialStack(Carbon, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1)));
+        Materials.MeteoricIron            = new Materials( 340, TextureSet.SET_METALLIC          ,   6.0F,    384,  3, 1|2  |8   |32|64          , 100,  50,  80,   0,   "MeteoricIron"            ,   "Meteoric Iron"                 ,    0,       0,       1811, 1000,  true, false,   1,   1,   1, Dyes.dyeGray        ,Element.SpFe, Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1)));
+        Materials.MeteoricSteel           = new Materials( 341, TextureSet.SET_METALLIC          ,   6.0F,    768,  4, 1|2          |64          ,  50,  25,  40,   0,   "MeteoricSteel"           ,   "Meteoric Steel"                ,    0,       0,       1811, 1000,  true, false,   4,  51,  50, Dyes.dyeGray        , 1, Arrays.asList(new MaterialStack(Materials.MeteoricIron, 50), new MaterialStack(Carbon, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1), new TCAspects.TC_AspectStack(TCAspects.ORDO, 1)));
         Materials.Meteorite               = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 1    |8                   ,  80,  35,  60,   0,   "Meteorite"               ,   "Meteorite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePurple      );
         Materials.Meutoite                = new Materials( 487, TextureSet.SET_METALLIC          ,   1.0F,      0,  1, 1    |8                   ,  95,  82, 105,   0,   "Meutoite"                ,   "Meutoite"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Migmatite               = new Materials( 872, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 255, 255, 255,   0,   "Migmatite"               ,   "Migmatite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Mimichite               = new Materials(  -1, TextureSet.SET_GEM_VERTICAL      ,   1.0F,      0,  1, 1  |4|8                   , 255, 255, 255,   0,   "Mimichite"               ,   "Mimichite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
-        Materials.Moonstone               = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 1    |8                   , 255, 255, 255,   0,   "Moonstone"               ,   "Moonstone"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeWhite       , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 1)));
-        Materials.Naquadah                = new Materials( 324, TextureSet.SET_METALLIC          ,   6.0F,   1280,  4, 1|2  |8   |32|64|128      ,  50,  50,  50,   0,   "Naquadah"                ,   "Naquadah"                      ,    0,       0,       5400, 5400,  true, false,  10,   1,   1, Dyes.dyeBlack       , Element.Nq, Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 3), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.NaquadahAlloy           = new Materials( 325, TextureSet.SET_METALLIC          ,   8.0F,   5120,  5, 1|2          |64|128      ,  40,  40,  40,   0,   "NaquadahAlloy"           ,   "Naquadah Alloy"                ,    0,       0,       7200, 7200,  true, false,  10,   1,   1, Dyes.dyeBlack       , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.NaquadahEnriched        = new Materials( 326, TextureSet.SET_METALLIC          ,   6.0F,   1280,  4, 1|2  |8      |64          ,  50,  50,  50,   0,   "NaquadahEnriched"        ,   "Enriched Naquadah"             ,    0,       0,       4500, 4500,  true, false,  15,   1,   1, Dyes.dyeBlack       , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 3), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 2))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Naquadria               = new Materials( 327, TextureSet.SET_SHINY             ,   1.0F,    512,  4, 1|2  |8      |64          ,  30,  30,  30,   0,   "Naquadria"               ,   "Naquadria"                     ,    0,       0,       9000, 9000,  true, false,  20,   1,   1, Dyes.dyeBlack       , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 3), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 3))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Moonstone               = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 1    |8                   , 255, 255, 255,   0,   "Moonstone"               ,   "Moonstone"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeWhite       , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1), new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 1)));
+        Materials.Naquadah                = new Materials( 324, TextureSet.SET_METALLIC          ,   6.0F,   1280,  4, 1|2  |8   |32|64|128      ,  50,  50,  50,   0,   "Naquadah"                ,   "Naquadah"                      ,    0,       0,       5400, 5400,  true, false,  10,   1,   1, Dyes.dyeBlack       , Element.Nq, Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 3), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1), new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.NaquadahAlloy           = new Materials( 325, TextureSet.SET_METALLIC          ,   8.0F,   5120,  5, 1|2          |64|128      ,  40,  40,  40,   0,   "NaquadahAlloy"           ,   "Naquadah Alloy"                ,    0,       0,       7200, 7200,  true, false,  10,   1,   1, Dyes.dyeBlack       , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4), new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.NaquadahEnriched        = new Materials( 326, TextureSet.SET_METALLIC          ,   6.0F,   1280,  4, 1|2  |8      |64          ,  50,  50,  50,   0,   "NaquadahEnriched"        ,   "Enriched Naquadah"             ,    0,       0,       4500, 4500,  true, false,  15,   1,   1, Dyes.dyeBlack       , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 3), new TCAspects.TC_AspectStack(TCAspects.RADIO, 2), new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 2))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Naquadria               = new Materials( 327, TextureSet.SET_SHINY             ,   1.0F,    512,  4, 1|2  |8      |64          ,  30,  30,  30,   0,   "Naquadria"               ,   "Naquadria"                     ,    0,       0,       9000, 9000,  true, false,  20,   1,   1, Dyes.dyeBlack       , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4), new TCAspects.TC_AspectStack(TCAspects.RADIO, 3), new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 3))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.Nether                  = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 0                         , 255, 255, 255,   0,   "Nether"                  ,   "Nether"                        ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes._NULL          );
-        Materials.NetherBrick             = new Materials( 814, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 100,   0,   0,   0,   "NetherBrick"             ,   "Nether Brick"                  ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeRed         , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1)));
-        Materials.NetherQuartz            = new Materials( 522, TextureSet.SET_QUARTZ            ,   1.0F,     32,  1, 1  |4|8      |64          , 230, 210, 210,   0,   "NetherQuartz"            ,   "Nether Quartz"                 ,    0,       0,         -1,    0, false, false,   2,   1,   1, Dyes.dyeWhite       , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1)));
+        Materials.NetherBrick             = new Materials( 814, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 100,   0,   0,   0,   "NetherBrick"             ,   "Nether Brick"                  ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeRed         , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1)));
+        Materials.NetherQuartz            = new Materials( 522, TextureSet.SET_QUARTZ            ,   1.0F,     32,  1, 1  |4|8      |64          , 230, 210, 210,   0,   "NetherQuartz"            ,   "Nether Quartz"                 ,    0,       0,         -1,    0, false, false,   2,   1,   1, Dyes.dyeWhite       , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 1), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1)));
         Materials.NetherStar              = new Materials( 506, TextureSet.SET_NETHERSTAR        ,   6.0F,   5120,  4, 1|  4|8      |64          , 255, 255, 255,   0,   "NetherStar"              ,   "Nether Star"                   ,    5,   50000,         -1,    0, false, false,  15,   1,   1, Dyes.dyeWhite       );
         Materials.ObsidianFlux            = new Materials(  -1, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1|2                       ,  80,  50, 100,   0,   "ObsidianFlux"            ,   "Fluxed Obsidian"               ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePurple      );
         Materials.Oilsands                = new Materials( 878, TextureSet.SET_NONE              ,   1.0F,      0,  1, 1    |8                   ,  10,  10,  10,   0,   "Oilsands"                ,   "Oilsands"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
@@ -427,20 +427,20 @@ public class MaterialsInit1 {
         Materials.Sand                    = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 0                         , 255, 255, 255,   0,   "Sand"                    ,   "Sand"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      );
         Materials.Sanguinite              = new Materials( 955, TextureSet.SET_METALLIC          ,   3.0F,   4480,  4, 1|2  |8                   , 185,   0,   0,   0,   "Sanguinite"              ,   "Sanguinite"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
         Materials.Siltstone               = new Materials( 876, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 255, 255, 255,   0,   "Siltstone"               ,   "Siltstone"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          );
-        Materials.Sunstone                = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 1    |8                   , 255, 255, 255,   0,   "Sunstone"                ,   "Sunstone"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeYellow      , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 1)));
+        Materials.Sunstone                = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 1    |8                   , 255, 255, 255,   0,   "Sunstone"                ,   "Sunstone"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeYellow      , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1), new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 1)));
         Materials.Tar                     = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 0                         ,  10,  10,  10,   0,   "Tar"                     ,   "Tar"                           ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       );
         Materials.Tartarite               = new Materials( 956, TextureSet.SET_METALLIC          ,  32.0F,  20480,  3, 1|2  |8                   , 255, 118,  60,   0,   "Tartarite"               ,   "Tartarite"                     ,    0,       0,         10400,    10400, true, false,   1,   1,   1, Dyes._NULL          ).disableAutoGeneratedBlastFurnaceRecipes().setTurbineMultipliers(1120, 1120, 1);
         Materials.UUAmplifier             = new Materials( 721, TextureSet.SET_FLUID             ,   1.0F,      0,  1,         16                ,  96,   0, 128,   0,   "UUAmplifier"             ,   "UU-Amplifier"                  ,    0,       0,         -1,    0, false, false,  10,   1,   1, Dyes.dyePink        );
         Materials.UUMatter                = new Materials( 703, TextureSet.SET_FLUID             ,   1.0F,      0,  1,         16                , 128,   0, 196,   0,   "UUMatter"                ,   "UU-Matter"                     ,    0,       0,         -1,    0, false, false,  10,   1,   1, Dyes.dyePink        );
-        Materials.Void                    = new Materials( 970, TextureSet.SET_METALLIC          ,  32.0F,    512,  4, 1|2          |64|128      ,  28,   6,  57,   0,   "Void"                    ,   "Void"                          ,    5,    1500,         -1,    0, false,  true,   5,   2,   1, Dyes.dyeBlack       , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1)));
-        Materials.Voidstone               = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 0                         , 255, 255, 255, 200,   "Voidstone"               ,   "Voidstone"                     ,    0,       0,         -1,    0, false,  true,   1,   1,   1, Dyes._NULL          , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 1)));
+        Materials.Void                    = new Materials( 970, TextureSet.SET_METALLIC          ,  32.0F,    512,  4, 1|2          |64|128      ,  28,   6,  57,   0,   "Void"                    ,   "Void"                          ,    5,    1500,         -1,    0, false,  true,   5,   2,   1, Dyes.dyeBlack       , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1)));
+        Materials.Voidstone               = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  1, 0                         , 255, 255, 255, 200,   "Voidstone"               ,   "Voidstone"                     ,    0,       0,         -1,    0, false,  true,   1,   1,   1, Dyes._NULL          , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1), new TCAspects.TC_AspectStack(TCAspects.VACUOS, 1)));
         Materials.Vulcanite               = new Materials( 489, TextureSet.SET_METALLIC          ,  32.0F,  20480,  2, 1|2  |8      |64|128      , 255, 132,  72,   0,   "Vulcanite"               ,   "Vulcanite"                     ,    0,       0,         8400,    8400, true, false,   1,   1,   1, Dyes._NULL          ).disableAutoGeneratedBlastFurnaceRecipes().setTurbineMultipliers(40, 1, 1);
         Materials.Vyroxeres               = new Materials( 951, TextureSet.SET_METALLIC          ,  32.0F,   7680,  1, 1|2  |8      |64          ,  85, 224,   1,   0,   "Vyroxeres"               ,   "Vyroxeres"                     ,    0,       0,       5400, 5400, true, false,   1,   1,   1, Dyes._NULL          ).disableAutoGeneratedBlastFurnaceRecipes().setTurbineMultipliers(1, 3, 1);
         Materials.Yellorium               = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1|2                       , 255, 255, 255,   0,   "Yellorium"               ,   "Yellorium"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeYellow      );
         Materials.Zectium                 = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  2, 1|2  |8                   , 255, 255, 255,   0,   "Zectium"                 ,   "Zectium"                       ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeBlack       );
 
-        Materials.Antimatter              = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  0, 0                         , 255, 255, 255,   0,   "Antimatter"              ,   "Antimatter"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePink        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 9), new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 8)));
-        Materials.AdvancedGlue            = new MaterialBuilder(567, TextureSet.SET_FLUID         ,                                                                                                         "Advanced Glue").setName("AdvancedGlue").addCell().addFluid().setRGB(255, 255, 185).setColor(Dyes.dyeYellow).setAspects(Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.LIMUS, 5))).constructMaterial();
+        Materials.Antimatter              = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  0, 0                         , 255, 255, 255,   0,   "Antimatter"              ,   "Antimatter"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePink        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 9), new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 8)));
+        Materials.AdvancedGlue            = new MaterialBuilder(567, TextureSet.SET_FLUID         ,                                                                                                         "Advanced Glue").setName("AdvancedGlue").addCell().addFluid().setRGB(255, 255, 185).setColor(Dyes.dyeYellow).setAspects(Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.LIMUS, 5))).constructMaterial();
         Materials.BioFuel                 = new Materials( 705, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 255, 128,   0,   0,   "BioFuel"                 ,   "Biofuel"                       ,    0,       6,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      );
         Materials.Biomass                 = new Materials( 704, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                ,   0, 255,   0,   0,   "Biomass"        	     ,   "Forestry Biomass"              ,    3,       8,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGreen       );
         Materials.CharcoalByproducts      = new MaterialBuilder(675, TextureSet.SET_FLUID             ,                                                                                                     "Charcoal Byproducts").addCell().setRGB(120, 68, 33).setColor(Dyes.dyeBrown).constructMaterial();
@@ -452,36 +452,36 @@ public class MaterialsInit1 {
         Materials.Cocoa                   = new Materials( 887, TextureSet.SET_FINE              ,   1.0F,      0,  0, 1                         , 190,  95,   0,   0,   "Cocoa"                   ,   "Cocoa"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       );
         Materials.Coffee                  = new Materials( 888, TextureSet.SET_FINE              ,   1.0F,      0,  0, 1                         , 150,  75,   0,   0,   "Coffee"                  ,   "Coffee"                        ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       );
         Materials.Creosote                = new Materials( 712, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 128,  64,   0,   0,   "Creosote"                ,   "Creosote"                      ,    3,       8,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       );
-        Materials.Ethanol                 = new Materials( 706, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 255, 128,   0,   0,   "Ethanol"                 ,   "Ethanol"                       ,    0,     192,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , 1, Arrays.asList(new MaterialStack(Carbon, 2), new MaterialStack(Hydrogen, 6), new MaterialStack(Oxygen, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1)));
-        Materials.FishOil                 = new Materials( 711, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 255, 196,   0,   0,   "FishOil"                 ,   "Fish Oil"                      ,    3,       2,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 2)));
+        Materials.Ethanol                 = new Materials( 706, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 255, 128,   0,   0,   "Ethanol"                 ,   "Ethanol"                       ,    0,     192,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , 1, Arrays.asList(new MaterialStack(Carbon, 2), new MaterialStack(Hydrogen, 6), new MaterialStack(Oxygen, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1), new TCAspects.TC_AspectStack(TCAspects.AQUA, 1)));
+        Materials.FishOil                 = new Materials( 711, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 255, 196,   0,   0,   "FishOil"                 ,   "Fish Oil"                      ,    3,       2,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.CORPUS, 2)));
         Materials.FermentedBiomass        = new MaterialBuilder(691, TextureSet.SET_FLUID             ,                                                                                                     "Fermented Biomass").addCell().addFluid().setRGB(68, 85, 0).setColor(Dyes.dyeBrown).constructMaterial();
         Materials.Fuel                    = new Materials( 708, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 255, 255,   0,   0,   "Fuel"                  ,   "Diesel"                        ,    0,     480,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      );
-        Materials.Glue                    = new Materials( 726, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 200, 196,   0,   0,   "Glue"                    ,   "Refined Glue"                  ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.LIMUS, 2)));
-        Materials.Gunpowder               = new Materials( 800, TextureSet.SET_DULL              ,   1.0F,      0,  0, 1                         , 128, 128, 128,   0,   "Gunpowder"               ,   "Gunpowder"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 3), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 4)));
-        Materials.FryingOilHot            = new Materials( 727, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 200, 196,   0,   0,   "FryingOilHot"            ,   "Hot Frying Oil"                ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1)));
+        Materials.Glue                    = new Materials( 726, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 200, 196,   0,   0,   "Glue"                    ,   "Refined Glue"                  ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.LIMUS, 2)));
+        Materials.Gunpowder               = new Materials( 800, TextureSet.SET_DULL              ,   1.0F,      0,  0, 1                         , 128, 128, 128,   0,   "Gunpowder"               ,   "Gunpowder"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 3), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 4)));
+        Materials.FryingOilHot            = new Materials( 727, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 200, 196,   0,   0,   "FryingOilHot"            ,   "Hot Frying Oil"                ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1)));
         Materials.Honey                   = new Materials( 725, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 210, 200,   0,   0,   "Honey"                   ,   "Honey"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      );
         Materials.Leather                 = new Materials(  -1, TextureSet.SET_ROUGH             ,   1.0F,      0,  0, 1                         , 150, 150,  80, 127,   "Leather"                 ,   "Leather"                       ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      );
-        Materials.Lubricant               = new Materials( 724, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 255, 196,   0,   0,   "Lubricant"               ,   "Lubricant"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1)));
-        Materials.McGuffium239            = new Materials( 999, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 200,  50, 150,   0,   "McGuffium239"            ,   "Mc Guffium 239"                ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePink        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 8), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 8), new TC_Aspects.TC_AspectStack(TC_Aspects.SPIRITUS, 8), new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 8), new TC_Aspects.TC_AspectStack(TC_Aspects.VITIUM, 8), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 8), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 8), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 8), new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 8), new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 8)));
+        Materials.Lubricant               = new Materials( 724, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 255, 196,   0,   0,   "Lubricant"               ,   "Lubricant"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 2), new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1)));
+        Materials.McGuffium239            = new Materials( 999, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 200,  50, 150,   0,   "McGuffium239"            ,   "Mc Guffium 239"                ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePink        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 8), new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 8), new TCAspects.TC_AspectStack(TCAspects.SPIRITUS, 8), new TCAspects.TC_AspectStack(TCAspects.AURAM, 8), new TCAspects.TC_AspectStack(TCAspects.VITIUM, 8), new TCAspects.TC_AspectStack(TCAspects.RADIO, 8), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 8), new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 8), new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 8), new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 8)));
         Materials.MeatRaw                 = new Materials( 892, TextureSet.SET_FINE              ,   1.0F,      0,  0, 1                         , 255, 100, 100,   0,   "MeatRaw"                 ,   "Raw Meat"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePink        );
         Materials.MeatCooked              = new Materials( 893, TextureSet.SET_FINE              ,   1.0F,      0,  0, 1                         , 150,  60,  20,   0,   "MeatCooked"              ,   "Cooked Meat"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePink        );
-        Materials.Milk                    = new Materials( 885, TextureSet.SET_FINE              ,   1.0F,      0,  0, 1      |16                , 254, 254, 254,   0,   "Milk"                    ,   "Milk"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 2)));
+        Materials.Milk                    = new Materials( 885, TextureSet.SET_FINE              ,   1.0F,      0,  0, 1      |16                , 254, 254, 254,   0,   "Milk"                    ,   "Milk"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.SANO, 2)));
         Materials.Mud                     = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  0, 0                         , 255, 255, 255,   0,   "Mud"                     ,   "Mud"                           ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       );
         Materials.Oil                     = new Materials( 707, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                ,  10,  10,  10,   0,   "Oil"                     ,   "Oil"                           ,    3,      20,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       );
-        Materials.Paper                   = new Materials( 879, TextureSet.SET_PAPER             ,   1.0F,      0,  0, 1                         , 250, 250, 250,   0,   "Paper"                   ,   "Paper"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 1)));
-        Materials.Peat                    = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  0, 0                         , 255, 255, 255,   0,   "Peat"                    ,   "Peat"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2)));
-        Materials.RareEarth               = new Materials( 891, TextureSet.SET_FINE              ,   1.0F,      0,  0, 1                         , 128, 128, 100,   0,   "RareEarth"               ,   "Rare Earth"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1)));
+        Materials.Paper                   = new Materials( 879, TextureSet.SET_PAPER             ,   1.0F,      0,  0, 1                         , 250, 250, 250,   0,   "Paper"                   ,   "Paper"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 1)));
+        Materials.Peat                    = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  0, 0                         , 255, 255, 255,   0,   "Peat"                    ,   "Peat"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 2)));
+        Materials.RareEarth               = new Materials( 891, TextureSet.SET_FINE              ,   1.0F,      0,  0, 1                         , 128, 128, 100,   0,   "RareEarth"               ,   "Rare Earth"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1), new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1)));
         Materials.Red                     = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  0, 0                         , 255,   0,   0,   0,   "Red"                     ,   "Red"                           ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeRed         );
         Materials.Reinforced              = new Materials( 383, TextureSet.SET_METALLIC          ,   7.0F,    480,  4, 1|2          |64|128      , 105, 141, 165,   0,   "Reinforced"              ,   "Reinforced"                    ,    0,       0,         -1, 1700,  true, false,   1,   1,   1, Dyes.dyeBlue        ).disableAutoGeneratedBlastFurnaceRecipes();
-        Materials.SeedOil                 = new Materials( 713, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 196, 255,   0,   0,   "SeedOil"                 ,   "Seed Oil"                      ,    3,       2,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLime        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.GRANUM, 2)));
-        Materials.SeedOilHemp             = new Materials( 722, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 196, 255,   0,   0,   "SeedOilHemp"             ,   "Hemp Seed Oil"                 ,    3,       2,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLime        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.GRANUM, 2)));
-        Materials.SeedOilLin              = new Materials( 723, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 196, 255,   0,   0,   "SeedOilLin"              ,   "Lin Seed Oil"                  ,    3,       2,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLime        , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.GRANUM, 2)));
-        Materials.Stone                   = new Materials( 299, TextureSet.SET_ROUGH             ,   4.0F,     32,  1, 1            |64|128      , 205, 205, 205,   0,   "Stone"                   ,   "Stone"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLightGray   , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1)));
-        Materials.TNT                     = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  0, 0                         , 255, 255, 255,   0,   "TNT"                     ,   "TNT"                           ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeRed         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 7), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 4)));
-        Materials.Unstable                = new Materials( 396, TextureSet.SET_SHINY             ,   1.0F,      0,  4, 1                         , 220, 220, 220, 127,   "Unstable"                ,   "Unstable"                      ,    0,       0,         -1,    0, false,  true,   1,   1,   1, Dyes.dyeWhite       , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 4)));
-        Materials.Unstableingot           = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  4, 0                         , 255, 255, 255, 127,   "Unstableingot"           ,   "Unstable"                      ,    0,       0,         -1,    0, false,  true,   1,   1,   1, Dyes.dyeWhite       , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 4)));
+        Materials.SeedOil                 = new Materials( 713, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 196, 255,   0,   0,   "SeedOil"                 ,   "Seed Oil"                      ,    3,       2,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLime        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.GRANUM, 2)));
+        Materials.SeedOilHemp             = new Materials( 722, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 196, 255,   0,   0,   "SeedOilHemp"             ,   "Hemp Seed Oil"                 ,    3,       2,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLime        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.GRANUM, 2)));
+        Materials.SeedOilLin              = new Materials( 723, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                , 196, 255,   0,   0,   "SeedOilLin"              ,   "Lin Seed Oil"                  ,    3,       2,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLime        , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.GRANUM, 2)));
+        Materials.Stone                   = new Materials( 299, TextureSet.SET_ROUGH             ,   4.0F,     32,  1, 1            |64|128      , 205, 205, 205,   0,   "Stone"                   ,   "Stone"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLightGray   , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.TERRA, 1)));
+        Materials.TNT                     = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  0, 0                         , 255, 255, 255,   0,   "TNT"                     ,   "TNT"                           ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeRed         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 7), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 4)));
+        Materials.Unstable                = new Materials( 396, TextureSet.SET_SHINY             ,   1.0F,      0,  4, 1                         , 220, 220, 220, 127,   "Unstable"                ,   "Unstable"                      ,    0,       0,         -1,    0, false,  true,   1,   1,   1, Dyes.dyeWhite       , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 4)));
+        Materials.Unstableingot           = new Materials(  -1, TextureSet.SET_NONE              ,   1.0F,      0,  4, 0                         , 255, 255, 255, 127,   "Unstableingot"           ,   "Unstable"                      ,    0,       0,         -1,    0, false,  true,   1,   1,   1, Dyes.dyeWhite       , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 4)));
         Materials.Vinegar                 = new MaterialBuilder(690, TextureSet.SET_FLUID             ,                                                                                                     "Vinegar").setColor(Dyes.dyeBrown).constructMaterial();
-        Materials.Wheat                   = new Materials( 881, TextureSet.SET_POWDER            ,   1.0F,      0,  0, 1                         , 255, 255, 196,   0,   "Wheat"                   ,   "Wheat"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 2)));
+        Materials.Wheat                   = new Materials( 881, TextureSet.SET_POWDER            ,   1.0F,      0,  0, 1                         , 255, 255, 196,   0,   "Wheat"                   ,   "Wheat"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.MESSIS, 2)));
         Materials.WoodGas                 = new MaterialBuilder(660, TextureSet.SET_FLUID             ,                                                                                                     "Wood Gas").addCell().addGas().setRGB(222, 205, 135).setColor(Dyes.dyeBrown).setFuelType(MaterialBuilder.GAS).setFuelPower(24).constructMaterial();
         Materials.WoodTar                 = new MaterialBuilder(662, TextureSet.SET_FLUID             ,                                                                                                     "Wood Tar").addCell().addFluid().setRGB(40, 23, 11).setColor(Dyes.dyeBrown).constructMaterial();
         Materials.WoodVinegar             = new MaterialBuilder(661, TextureSet.SET_FLUID             ,                                                                                                     "Wood Vinegar").addCell().addFluid().setRGB(212, 85, 0).setColor(Dyes.dyeBrown).constructMaterial();
@@ -502,57 +502,57 @@ public class MaterialsInit1 {
         Materials.LiquidNitrogen          = new Materials( 494, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 169, 208, 245, 240,   "LiquidNitrogen"          ,   "Liquid Nitrogen"               ,    0,       0,          4,    0, false,  true,   1,   1,   1, Dyes.dyeLightBlue   , 1, Collections.singletonList(new MaterialStack(Nitrogen, 1)));
         Materials.LiquidOxygen            = new Materials( 493, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16|32             , 169, 208, 245, 240,   "LiquidOxygen"            ,   "Liquid Oxygen"                 ,    0,       0,          4,    0, false,  true,   1,   1,   1, Dyes.dyeLightBlue   , 1, Collections.singletonList(new MaterialStack(Oxygen, 1)));
         Materials.SiliconDioxide          = new MaterialBuilder(837, TextureSet.SET_QUARTZ, "Silicon Dioxide").setToolSpeed(1.0F).setDurability(0).setToolQuality(1).addDustItems().setRGB(255, 255, 255).setColor(Dyes.dyeLightGray).setOreValue(1).setExtraData(0).setMaterialList(new MaterialStack(Silicon, 1), new MaterialStack(Oxygen, 2)).constructMaterial();
-        Materials.Jasper                  = new Materials( 511, TextureSet.SET_EMERALD           ,   1.0F,      0,  2, 1  |4|8      |64          , 200,  80,  80, 100,   "Jasper"                  ,   "Jasper"                        ,    0,       0,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeRed         , 1, Collections.singletonList(new MaterialStack(SiliconDioxide, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 2)));
+        Materials.Jasper                  = new Materials( 511, TextureSet.SET_EMERALD           ,   1.0F,      0,  2, 1  |4|8      |64          , 200,  80,  80, 100,   "Jasper"                  ,   "Jasper"                        ,    0,       0,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeRed         , 1, Collections.singletonList(new MaterialStack(SiliconDioxide, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 4), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 2)));
         Materials.Almandine               = new Materials( 820, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1    |8                   , 255,   0,   0,   0,   "Almandine"               ,   "Almandine"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeRed         , 0, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Iron, 3), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12)));
         Materials.Andradite               = new Materials( 821, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1    |8                   , 150, 120,   0,   0,   "Andradite"               ,   "Andradite"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeYellow      , 1, Arrays.asList(new MaterialStack(Calcium, 3), new MaterialStack(Iron, 2), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12)));
         Materials.AnnealedCopper          = new Materials( 345, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2             |128      , 255, 120,  20,   0,   "AnnealedCopper"          ,   "Annealed Copper"               ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeOrange      , 2, Collections.singletonList(new MaterialStack(Copper, 1)));
         Materials.Asbestos                = new Materials( 946, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1    |8                   , 230, 230, 230,   0,   "Asbestos"                ,   "Asbestos"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 1, Arrays.asList(new MaterialStack(Magnesium, 3), new MaterialStack(Silicon, 2), new MaterialStack(Hydrogen, 4), new MaterialStack(Oxygen, 9))); // Mg3Si2O5(OH)4
-        Materials.Ash                     = new Materials( 815, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 150, 150, 150,   0,   "Ash"                     ,   "Ashes"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLightGray   , 2, Collections.singletonList(new MaterialStack(Carbon, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 1)));
+        Materials.Ash                     = new Materials( 815, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 150, 150, 150,   0,   "Ash"                     ,   "Ashes"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLightGray   , 2, Collections.singletonList(new MaterialStack(Carbon, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 1)));
         Materials.BandedIron              = new Materials( 917, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1    |8                   , 145,  90,  90,   0,   "BandedIron"              ,   "Banded Iron"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , 1, Arrays.asList(new MaterialStack(Iron, 2), new MaterialStack(Oxygen, 3)));
         Materials.BatteryAlloy            = new Materials( 315, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1|2                       , 156, 124, 160,   0,   "BatteryAlloy"            ,   "Battery Alloy"                 ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePurple      , 2, Arrays.asList(new MaterialStack(Lead, 4), new MaterialStack(Antimony, 1)));
-        Materials.BlueTopaz               = new Materials( 513, TextureSet.SET_GEM_HORIZONTAL    ,   7.0F,    256,  3, 1  |4|8      |64          ,   0,   0, 255, 127,   "BlueTopaz"               ,   "Blue Topaz"                    ,    0,       0,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeBlue        , 0, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 1), new MaterialStack(Fluorine, 2), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 6)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 6), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4)));
-        Materials.Bone                    = new Materials( 806, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 250, 250, 250,   0,   "Bone"                    ,   "Bone"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Collections.singletonList(new MaterialStack(Calcium, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.MORTUUS, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.CORPUS, 1)));
-        Materials.Brass                   = new Materials( 301, TextureSet.SET_METALLIC          ,   7.0F,     96,  1, 1|2          |64|128      , 255, 180,   0,   0,   "Brass"                   ,   "Brass"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Zinc, 1), new MaterialStack(Copper, 3)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1)));
-        Materials.Bronze                  = new Materials( 300, TextureSet.SET_METALLIC          ,   6.0F,    192,  2, 1|2          |64|128      , 255, 128,   0,   0,   "Bronze"                  ,   "Bronze"                        ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , 2, Arrays.asList(new MaterialStack(Tin, 1), new MaterialStack(Copper, 3)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1)));
+        Materials.BlueTopaz               = new Materials( 513, TextureSet.SET_GEM_HORIZONTAL    ,   7.0F,    256,  3, 1  |4|8      |64          ,   0,   0, 255, 127,   "BlueTopaz"               ,   "Blue Topaz"                    ,    0,       0,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeBlue        , 0, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 1), new MaterialStack(Fluorine, 2), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 6)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 6), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4)));
+        Materials.Bone                    = new Materials( 806, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         , 250, 250, 250,   0,   "Bone"                    ,   "Bone"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Collections.singletonList(new MaterialStack(Calcium, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.MORTUUS, 2), new TCAspects.TC_AspectStack(TCAspects.CORPUS, 1)));
+        Materials.Brass                   = new Materials( 301, TextureSet.SET_METALLIC          ,   7.0F,     96,  1, 1|2          |64|128      , 255, 180,   0,   0,   "Brass"                   ,   "Brass"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Zinc, 1), new MaterialStack(Copper, 3)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 1)));
+        Materials.Bronze                  = new Materials( 300, TextureSet.SET_METALLIC          ,   6.0F,    192,  2, 1|2          |64|128      , 255, 128,   0,   0,   "Bronze"                  ,   "Bronze"                        ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , 2, Arrays.asList(new MaterialStack(Tin, 1), new MaterialStack(Copper, 3)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 1)));
         Materials.BrownLimonite           = new Materials( 930, TextureSet.SET_METALLIC          ,   1.0F,      0,  1, 1    |8                   , 200, 100,   0,   0,   "BrownLimonite"           ,   "Brown Limonite"                ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , 2, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Hydrogen, 1), new MaterialStack(Oxygen, 2))); // FeO(OH)
         Materials.Calcite                 = new Materials( 823, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1    |8                   , 250, 230, 220,   0,   "Calcite"                 ,   "Calcite"                       ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , 1, Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Carbon, 1), new MaterialStack(Oxygen, 3)));
         Materials.Cassiterite             = new Materials( 824, TextureSet.SET_METALLIC          ,   1.0F,      0,  3, 1    |8                   , 220, 220, 220,   0,   "Cassiterite"             ,   "Cassiterite"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 1, Arrays.asList(new MaterialStack(Tin, 1), new MaterialStack(Oxygen, 2)));
         Materials.CassiteriteSand         = new Materials( 937, TextureSet.SET_SAND              ,   1.0F,      0,  1, 1    |8                   , 220, 220, 220,   0,   "CassiteriteSand"         ,   "Cassiterite Sand"              ,    0,       0,         -1,    0, false, false,   4,   1,   1, Dyes.dyeWhite       , 1, Arrays.asList(new MaterialStack(Tin, 1), new MaterialStack(Oxygen, 2)));
         Materials.Chalcopyrite            = new Materials( 855, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1    |8                   , 160, 120,  40,   0,   "Chalcopyrite"            ,   "Chalcopyrite"                  ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      , 1, Arrays.asList(new MaterialStack(Copper, 1), new MaterialStack(Iron, 1), new MaterialStack(Sulfur, 2)));
-        Materials.Charcoal                = new Materials( 536, TextureSet.SET_FINE              ,   1.0F,      0,  1, 1  |4                     , 100,  70,  70,   0,   "Charcoal"                ,   "Charcoal"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 1, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2)));
+        Materials.Charcoal                = new Materials( 536, TextureSet.SET_FINE              ,   1.0F,      0,  1, 1  |4                     , 100,  70,  70,   0,   "Charcoal"                ,   "Charcoal"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 1, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 2)));
         Materials.Chromite                = new Materials( 825, TextureSet.SET_METALLIC          ,   1.0F,      0,  1, 1    |8                   ,  35,  20,  15,   0,   "Chromite"                ,   "Chromite"                      ,    0,       0,       1700, 1700,  true, false,   6,   1,   1, Dyes.dyePink        , 1, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Chrome, 2), new MaterialStack(Oxygen, 4)));
-        Materials.ChromiumDioxide         = new Materials( 361, TextureSet.SET_DULL              ,  11.0F,    256,  3, 1|2                       , 230, 200, 200,   0,   "ChromiumDioxide"         ,   "Chromium Dioxide"              ,    0,       0,        650,  650, false, false,   5,   1,   1, Dyes.dyePink        , 1, Arrays.asList(new MaterialStack(Chrome, 1), new MaterialStack(Oxygen, 2)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1)));
+        Materials.ChromiumDioxide         = new Materials( 361, TextureSet.SET_DULL              ,  11.0F,    256,  3, 1|2                       , 230, 200, 200,   0,   "ChromiumDioxide"         ,   "Chromium Dioxide"              ,    0,       0,        650,  650, false, false,   5,   1,   1, Dyes.dyePink        , 1, Arrays.asList(new MaterialStack(Chrome, 1), new MaterialStack(Oxygen, 2)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1)));
         Materials.Cinnabar                = new Materials( 826, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1    |8                   , 150,   0,   0,   0,   "Cinnabar"                ,   "Cinnabar"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeBrown       , 2, Arrays.asList(new MaterialStack(Mercury, 1), new MaterialStack(Sulfur, 1)));
-        Materials.Water                   = new Materials( 701, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                ,   0,   0, 255,   0,   "Water"                   ,   "Water"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2)));
+        Materials.Water                   = new Materials( 701, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                ,   0,   0, 255,   0,   "Water"                   ,   "Water"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 2)));
         Materials.Clay                    = new Materials( 805, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1                         , 200, 200, 220,   0,   "Clay"                    ,   "Clay"                          ,    0,       0,         -1,    0, false, false,   5,   1,   1, Dyes.dyeLightBlue   , 0, Arrays.asList(new MaterialStack(Sodium, 2), new MaterialStack(Lithium, 1), new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 2),new MaterialStack(Oxygen,7),new MaterialStack(Water,2)));
-        Materials.Coal                    = new Materials( 535, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1  |4|8                   ,  70,  70,  70,   0,   "Coal"                    ,   "Coal"                          ,    0,       0,         -1,    0, false, false,   2,   2,   1, Dyes.dyeBlack       , 1, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2)));
+        Materials.Coal                    = new Materials( 535, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1  |4|8                   ,  70,  70,  70,   0,   "Coal"                    ,   "Coal"                          ,    0,       0,         -1,    0, false, false,   2,   2,   1, Dyes.dyeBlack       , 1, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 2)));
         Materials.Cobaltite               = new Materials( 827, TextureSet.SET_METALLIC          ,   1.0F,      0,  1, 1    |8                   ,  80,  80, 250,   0,   "Cobaltite"               ,   "Cobaltite"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeBlue        , 1, Arrays.asList(new MaterialStack(Cobalt, 1), new MaterialStack(Arsenic, 1), new MaterialStack(Sulfur, 1)));
         Materials.Cooperite               = new Materials( 828, TextureSet.SET_METALLIC          ,   1.0F,      0,  1, 1    |8                   , 255, 255, 200,   0,   "Cooperite"               ,   "Sheldonite"                    ,    0,       0,         -1,    0, false, false,   5,   1,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Platinum, 3), new MaterialStack(Nickel, 1), new MaterialStack(Sulfur, 1), new MaterialStack(Palladium, 1)));
         Materials.Cupronickel             = new Materials( 310, TextureSet.SET_METALLIC          ,   6.0F,     64,  1, 1|2          |64          , 227, 150, 128,   0,   "Cupronickel"             ,   "Cupronickel"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , 2, Arrays.asList(new MaterialStack(Copper, 1), new MaterialStack(Nickel, 1)));
-        Materials.DarkAsh                 = new Materials( 816, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         ,  50,  50,  50,   0,   "DarkAsh"                 ,   "Dark Ashes"                    ,    0,       0,         -1,    0, false, false,   1,   2,   1, Dyes.dyeGray        , 1, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.PERDITIO, 1)));
-        Materials.DeepIron                = new Materials( 829, TextureSet.SET_METALLIC          ,   6.0F,    384,  2, 1|2  |8      |64          , 150, 140, 140,   0,   "DeepIron"                ,   "Deep Iron"                     ,    0,       0,       7500, 7500,  true, false,   3,   1,   1, Dyes.dyePink        , 2, Collections.singletonList(new MaterialStack(Iron, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1))).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Diamond                 = new Materials( 500, TextureSet.SET_DIAMOND           ,   8.0F,   1280,  4, 1  |4|8      |64|128      , 200, 255, 255, 127,   "Diamond"                 ,   "Diamond"                       ,    0,       0,         -1,    0, false,  true,   5,  64,   1, Dyes.dyeWhite       , 1, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 3), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 4)));
+        Materials.DarkAsh                 = new Materials( 816, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1                         ,  50,  50,  50,   0,   "DarkAsh"                 ,   "Dark Ashes"                    ,    0,       0,         -1,    0, false, false,   1,   2,   1, Dyes.dyeGray        , 1, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1), new TCAspects.TC_AspectStack(TCAspects.PERDITIO, 1)));
+        Materials.DeepIron                = new Materials( 829, TextureSet.SET_METALLIC          ,   6.0F,    384,  2, 1|2  |8      |64          , 150, 140, 140,   0,   "DeepIron"                ,   "Deep Iron"                     ,    0,       0,       7500, 7500,  true, false,   3,   1,   1, Dyes.dyePink        , 2, Collections.singletonList(new MaterialStack(Iron, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1))).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Diamond                 = new Materials( 500, TextureSet.SET_DIAMOND           ,   8.0F,   1280,  4, 1  |4|8      |64|128      , 200, 255, 255, 127,   "Diamond"                 ,   "Diamond"                       ,    0,       0,         -1,    0, false,  true,   5,  64,   1, Dyes.dyeWhite       , 1, Collections.singletonList(new MaterialStack(Carbon, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 3), new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 4)));
         Materials.Electrum                = new Materials( 303, TextureSet.SET_SHINY             ,  12.0F,     64,  2, 1|2  |8      |64|128      , 255, 255, 100,   0,   "Electrum"                ,   "Electrum"                      ,    0,       0,         -1,    0, false, false,   4,   1,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Silver, 1), new MaterialStack(Gold, 1)));
-        Materials.Emerald                 = new Materials( 501, TextureSet.SET_EMERALD           ,   7.0F,    256,  4, 1  |4|8      |64          ,  80, 255,  80, 127,   "Emerald"                 ,   "Emerald"                       ,    0,       0,         -1,    0, false,  true,   5,   1,   1, Dyes.dyeGreen       , 0, Arrays.asList(new MaterialStack(Beryllium, 3), new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 6), new MaterialStack(Oxygen, 18)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 3), new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 5)));
-        Materials.FreshWater              = new Materials(  -1, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                ,   0,   0, 255,   0,   "FreshWater"              ,   "Fresh Water"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2)));
+        Materials.Emerald                 = new Materials( 501, TextureSet.SET_EMERALD           ,   7.0F,    256,  4, 1  |4|8      |64          ,  80, 255,  80, 127,   "Emerald"                 ,   "Emerald"                       ,    0,       0,         -1,    0, false,  true,   5,   1,   1, Dyes.dyeGreen       , 0, Arrays.asList(new MaterialStack(Beryllium, 3), new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 6), new MaterialStack(Oxygen, 18)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 3), new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 5)));
+        Materials.FreshWater              = new Materials(  -1, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                ,   0,   0, 255,   0,   "FreshWater"              ,   "Fresh Water"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 2)));
         Materials.Galena                  = new Materials( 830, TextureSet.SET_DULL              ,   1.0F,      0,  3, 1 |8                      , 100,  60, 100,   0,   "Galena"                  ,   "Galena"                        ,    0,       0,         -1,    0, false, false,   4,   1,   1, Dyes.dyePurple      , 1, Arrays.asList(new MaterialStack(Lead, 1), new MaterialStack(Sulfur, 1)));
         Materials.Garnierite              = new Materials( 906, TextureSet.SET_METALLIC          ,   1.0F,      0,  3, 1    |8                   ,  50, 200,  70,   0,   "Garnierite"              ,   "Garnierite"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLightBlue   , 1, Arrays.asList(new MaterialStack(Nickel, 1), new MaterialStack(Oxygen, 1)));
         Materials.Glyceryl                = new Materials( 714, TextureSet.SET_FLUID             ,   1.0F,      0,  1,         16                ,   0, 150, 150,   0,   "Glyceryl"                ,   "Glyceryl Trinitrate"           ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeCyan        , 1, Arrays.asList(new MaterialStack(Carbon, 3), new MaterialStack(Hydrogen, 5), new MaterialStack(Nitrogen, 3), new MaterialStack(Oxygen, 9)));
-        Materials.GreenSapphire           = new MaterialBuilder(504, TextureSet.SET_GEM_HORIZONTAL, "Green Sapphire").setToolSpeed(7.0F).setDurability(256).setToolQuality(2).addDustItems().addGemItems().setTransparent(true).addOreItems().addToolHeadItems().setRGBA(100, 200, 130, 127).setColor(Dyes.dyeCyan).setOreValue(5).setExtraData(0).setMaterialList(new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 3)).setAspects(Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 5), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 3))).constructMaterial().disableAutoGeneratedBlastFurnaceRecipes();
+        Materials.GreenSapphire           = new MaterialBuilder(504, TextureSet.SET_GEM_HORIZONTAL, "Green Sapphire").setToolSpeed(7.0F).setDurability(256).setToolQuality(2).addDustItems().addGemItems().setTransparent(true).addOreItems().addToolHeadItems().setRGBA(100, 200, 130, 127).setColor(Dyes.dyeCyan).setOreValue(5).setExtraData(0).setMaterialList(new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 3)).setAspects(Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 5), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 3))).constructMaterial().disableAutoGeneratedBlastFurnaceRecipes();
         Materials.Grossular               = new Materials( 831, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1    |8                   , 200, 100,   0,   0,   "Grossular"               ,   "Grossular"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeOrange      , 0, Arrays.asList(new MaterialStack(Calcium, 3), new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12)));
-        Materials.HolyWater               = new Materials( 729, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                ,   0,   0, 255,   0,   "HolyWater"               ,   "Holy Water"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 1)));
-        Materials.Ice                     = new Materials( 702, TextureSet.SET_SHINY             ,   1.0F,      0,  0, 1|      16                , 200, 200, 255,   0,   "Ice"                     ,   "Ice"                           ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 2)));
+        Materials.HolyWater               = new Materials( 729, TextureSet.SET_FLUID             ,   1.0F,      0,  0,         16                ,   0,   0, 255,   0,   "HolyWater"               ,   "Holy Water"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 2), new TCAspects.TC_AspectStack(TCAspects.AURAM, 1)));
+        Materials.Ice                     = new Materials( 702, TextureSet.SET_SHINY             ,   1.0F,      0,  0, 1|      16                , 200, 200, 255,   0,   "Ice"                     ,   "Ice"                           ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.GELUM, 2)));
         Materials.Ilmenite                = new Materials( 918, TextureSet.SET_METALLIC          ,   1.0F,      0,  3, 1    |8                   ,  70,  55,  50,   0,   "Ilmenite"                ,   "Ilmenite"                      ,    0,       0,         -1,    0, false, false,   1,   2,   1, Dyes.dyePurple      , 0, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Titanium, 1), new MaterialStack(Oxygen, 3)));
         Materials.Rutile                  = new Materials( 375, TextureSet.SET_GEM_HORIZONTAL    ,   1.0F,      0,  2, 1    |8                   , 212,  13,  92,   0,   "Rutile"                  ,   "Rutile"                        ,    0,       0,         -1,    0, false, false,   1,   2,   1, Dyes.dyeRed         , 0, Arrays.asList(new MaterialStack(Titanium, 1), new MaterialStack(Oxygen, 2)));
         Materials.Bauxite                 = new Materials( 822, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1    |8                   , 200, 100,   0,   0,   "Bauxite"                 ,   "Bauxite"                       ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeBrown       , 1, Arrays.asList(new MaterialStack(Rutile, 2), new MaterialStack(Aluminium, 16), new MaterialStack(Hydrogen, 10), new MaterialStack(Oxygen, 11)));
         Materials.Titaniumtetrachloride   = new Materials( 376, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16                , 212,  13,  92,   0,   "Titaniumtetrachloride"   ,   "Titaniumtetrachloride"         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeRed         , 0, Arrays.asList(new MaterialStack(Titanium, 1), new MaterialStack(Chlorine, 4)));
         Materials.Magnesiumchloride       = new Materials( 377, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1|16                      , 212,  13,  92,   0,   "Magnesiumchloride"       ,   "Magnesiumchloride"             ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeRed         , 0, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Chlorine, 2)));
-        Materials.Invar                   = new Materials( 302, TextureSet.SET_METALLIC          ,   6.0F,    256,  2, 1|2          |64|128      , 180, 180, 120,   0,   "Invar"                   ,   "Invar"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , 2, Arrays.asList(new MaterialStack(Iron, 2), new MaterialStack(Nickel, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1)));
+        Materials.Invar                   = new Materials( 302, TextureSet.SET_METALLIC          ,   6.0F,    256,  2, 1|2          |64|128      , 180, 180, 120,   0,   "Invar"                   ,   "Invar"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , 2, Arrays.asList(new MaterialStack(Iron, 2), new MaterialStack(Nickel, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.GELUM, 1)));
         Materials.Kanthal                 = new Materials( 312, TextureSet.SET_METALLIC          ,   6.0F,     64,  2, 1|2          |64          , 194, 210, 223,   0,   "Kanthal"                 ,   "Kanthal"                       ,    0,       0,       1800, 1800,  true, false,   1,   1,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Aluminium, 1), new MaterialStack(Chrome, 1))).disableAutoGeneratedBlastFurnaceRecipes();
         Materials.Lazurite                = new Materials( 524, TextureSet.SET_LAPIS             ,   1.0F,      0,  1, 1  |4|8                   , 100, 120, 255,   0,   "Lazurite"                ,   "Lazurite"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeCyan        , 1, Arrays.asList(new MaterialStack(Aluminium, 6), new MaterialStack(Silicon, 6), new MaterialStack(Calcium, 8), new MaterialStack(Sodium, 8)));
         Materials.Magnalium               = new Materials( 313, TextureSet.SET_DULL              ,   6.0F,    256,  2, 1|2          |64|128      , 200, 190, 255,   0,   "Magnalium"               ,   "Magnalium"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLightBlue   , 2, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Aluminium, 2)));
         Materials.Magnesite               = new Materials( 908, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1    |8                   , 250, 250, 180,   0,   "Magnesite"               ,   "Magnesite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePink        , 1, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Carbon, 1), new MaterialStack(Oxygen, 3)));
-        Materials.Magnetite               = new Materials( 870, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1    |8                   ,  30,  30,  30,   0,   "Magnetite"               ,   "Magnetite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        , 1, Arrays.asList(new MaterialStack(Iron, 3), new MaterialStack(Oxygen, 4)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1)));
+        Materials.Magnetite               = new Materials( 870, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1    |8                   ,  30,  30,  30,   0,   "Magnetite"               ,   "Magnetite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        , 1, Arrays.asList(new MaterialStack(Iron, 3), new MaterialStack(Oxygen, 4)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1)));
         Materials.Molybdenite             = new Materials( 942, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1    |8                   ,  25,  25,  25,   0,   "Molybdenite"             ,   "Molybdenite"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlue        , 1, Arrays.asList(new MaterialStack(Molybdenum, 1), new MaterialStack(Sulfur, 2))); // MoS2 (also source of Re)
         Materials.Nichrome                = new Materials( 311, TextureSet.SET_METALLIC          ,   6.0F,     64,  2, 1|2          |64          , 205, 206, 246,   0,   "Nichrome"                ,   "Nichrome"                      ,    0,       0,       2700, 2700,  true, false,   1,   1,   1, Dyes.dyeRed         , 2, Arrays.asList(new MaterialStack(Nickel, 4), new MaterialStack(Chrome, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.NiobiumNitride          = new Materials( 359, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1|2                       ,  29,  41,  29,   0,   "NiobiumNitride"          ,   "Niobium Nitride"               ,    0,       0,       2573, 2573,  true, false,   1,   1,   1, Dyes.dyeBlack       , 1, Arrays.asList(new MaterialStack(Niobium, 1), new MaterialStack(Nitrogen, 1))); // Anti-Reflective Material
@@ -562,27 +562,27 @@ public class MaterialsInit1 {
         Materials.Obsidian                = new Materials( 804, TextureSet.SET_DULL              ,   1.0F,      0,  3, 1|2                       ,  80,  50, 100,   0,   "Obsidian"                ,   "Obsidian"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 1, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Iron, 1), new MaterialStack(Silicon, 2), new MaterialStack(Oxygen, 8)));
         Materials.Phosphate               = new Materials( 833, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1    |8|16                , 255, 255,   0,   0,   "Phosphate"               ,   "Phosphate"                     ,    0,       0,         -1,    0, false, false,   2,   1,   1, Dyes.dyeYellow      , 1, Arrays.asList(new MaterialStack(Phosphorus, 1), new MaterialStack(Oxygen, 4)));
         Materials.PigIron                 = new Materials( 307, TextureSet.SET_METALLIC          ,   6.0F,    384,  2, 1|2  |8      |64          , 200, 180, 180,   0,   "PigIron"                 ,   "Pig Iron"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyePink        , 2, Collections.singletonList(new MaterialStack(Iron, 1)));
-        Materials.Plastic                 = new Materials( 874, TextureSet.SET_DULL              ,   3.0F,     32,  1, 1|2          |64|128      , 200, 200, 200,   0,   "Plastic"                 ,   "Polyethylene"                  ,    0,       0,        400,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 1), new MaterialStack(Hydrogen, 2)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2)));
-        Materials.Epoxid                  = new Materials( 470, TextureSet.SET_DULL              ,   3.0F,     32,  1, 1|2          |64|128      , 200, 140,  20,   0,   "Epoxid"                  ,   "Epoxid"                        ,    0,       0,        400,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 21), new MaterialStack(Hydrogen, 24), new MaterialStack(Oxygen, 4)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2)));
+        Materials.Plastic                 = new Materials( 874, TextureSet.SET_DULL              ,   3.0F,     32,  1, 1|2          |64|128      , 200, 200, 200,   0,   "Plastic"                 ,   "Polyethylene"                  ,    0,       0,        400,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 1), new MaterialStack(Hydrogen, 2)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2)));
+        Materials.Epoxid                  = new Materials( 470, TextureSet.SET_DULL              ,   3.0F,     32,  1, 1|2          |64|128      , 200, 140,  20,   0,   "Epoxid"                  ,   "Epoxid"                        ,    0,       0,        400,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 21), new MaterialStack(Hydrogen, 24), new MaterialStack(Oxygen, 4)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2)));
         Materials.Polydimethylsiloxane    = new MaterialBuilder(633, TextureSet.SET_FLUID         ,                                                                                                     "Polydimethylsiloxane").addDustItems().setRGB(245, 245, 245).setColor(Dyes.dyeWhite).setMaterialList(new MaterialStack(Carbon, 2), new MaterialStack(Hydrogen, 6), new MaterialStack(Oxygen, 1), new MaterialStack(Silicon, 1)).addElectrolyzerRecipe().constructMaterial();
-        Materials.Silicone                = new Materials( 471, TextureSet.SET_DULL              ,   3.0F,    128,  1, 1|2          |64|128      , 220, 220, 220,   0,   "Silicone"                ,   "Silicone Rubber"               ,    0,       0,        900,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 2), new MaterialStack(Hydrogen, 6), new MaterialStack(Oxygen, 1), new MaterialStack(Silicon, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2)));
-        Materials.Polycaprolactam         = new Materials( 472, TextureSet.SET_DULL              ,   3.0F,     32,  1, 1|2          |64|128      ,  50,  50,  50,   0,   "Polycaprolactam"         ,   "Polycaprolactam"               ,    0,       0,        500,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 6), new MaterialStack(Hydrogen, 11), new MaterialStack(Nitrogen, 1), new MaterialStack(Oxygen, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2)));
-        Materials.Polytetrafluoroethylene = new Materials( 473, TextureSet.SET_DULL              ,   3.0F,     32,  1, 1|2          |64|128      , 100, 100, 100,   0,   "Polytetrafluoroethylene" ,   "Polytetrafluoroethylene"       ,    0,       0,       1400,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 2), new MaterialStack(Fluorine, 4)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2)));
+        Materials.Silicone                = new Materials( 471, TextureSet.SET_DULL              ,   3.0F,    128,  1, 1|2          |64|128      , 220, 220, 220,   0,   "Silicone"                ,   "Silicone Rubber"               ,    0,       0,        900,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 2), new MaterialStack(Hydrogen, 6), new MaterialStack(Oxygen, 1), new MaterialStack(Silicon, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2)));
+        Materials.Polycaprolactam         = new Materials( 472, TextureSet.SET_DULL              ,   3.0F,     32,  1, 1|2          |64|128      ,  50,  50,  50,   0,   "Polycaprolactam"         ,   "Polycaprolactam"               ,    0,       0,        500,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 6), new MaterialStack(Hydrogen, 11), new MaterialStack(Nitrogen, 1), new MaterialStack(Oxygen, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2)));
+        Materials.Polytetrafluoroethylene = new Materials( 473, TextureSet.SET_DULL              ,   3.0F,     32,  1, 1|2          |64|128      , 100, 100, 100,   0,   "Polytetrafluoroethylene" ,   "Polytetrafluoroethylene"       ,    0,       0,       1400,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 2), new MaterialStack(Fluorine, 4)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2)));
         Materials.Powellite               = new Materials( 883, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1    |8                   , 255, 255,   0,   0,   "Powellite"               ,   "Powellite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Molybdenum, 1), new MaterialStack(Oxygen, 4)));
         Materials.Pumice                  = new Materials( 926, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1    |8                   , 230, 185, 185,   0,   "Pumice"                  ,   "Pumice"                        ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        , 2, Collections.singletonList(new MaterialStack(Stone, 1)));
         Materials.Pyrite                  = new Materials( 834, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1    |8                   , 150, 120,  40,   0,   "Pyrite"                  ,   "Pyrite"                        ,    0,       0,         -1,    0, false, false,   2,   1,   1, Dyes.dyeOrange      , 1, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Sulfur, 2)));
         Materials.Pyrolusite              = new Materials( 943, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1    |8                   , 150, 150, 170,   0,   "Pyrolusite"              ,   "Pyrolusite"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLightGray   , 1, Arrays.asList(new MaterialStack(Manganese, 1), new MaterialStack(Oxygen, 2)));
         Materials.Pyrope                  = new Materials( 835, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1    |8                   , 120,  50, 100,   0,   "Pyrope"                  ,   "Pyrope"                        ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyePurple      , 0, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Magnesium, 3), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12)));
         Materials.RockSalt                = new Materials( 944, TextureSet.SET_FINE              ,   1.0F,      0,  1, 1    |8                   , 240, 200, 200,   0,   "RockSalt"                ,   "Rock Salt"                     ,    0,       0,         -1,    0, false, false,   2,   1,   1, Dyes.dyeWhite       , 1, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Chlorine, 1)));
-        Materials.Rubber                  = new Materials( 880, TextureSet.SET_SHINY             ,   1.5F,     32,  0, 1|2          |64|128      ,   0,   0,   0,   0,   "Rubber"                  ,   "Rubber"                        ,    0,       0,        400,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 0, Arrays.asList(new MaterialStack(Carbon, 5), new MaterialStack(Hydrogen, 8)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2)));
-        Materials.RawRubber               = new Materials( 896, TextureSet.SET_DULL              ,   1.0F,      0,  0, 1                         , 204, 199, 137,   0,   "RawRubber"               ,   "Raw Rubber"                    ,    0,       0,        400,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 5), new MaterialStack(Hydrogen, 8)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2)));
-        Materials.Ruby                    = new Materials( 502, TextureSet.SET_RUBY              ,   7.0F,    256,  2, 1  |4|8      |64          , 255, 100, 100, 127,   "Ruby"                    ,   "Ruby"                          ,    0,       0,         -1,    0, false,  true,   5,   1,   1, Dyes.dyeRed         , 0, Arrays.asList(new MaterialStack(Chrome, 1), new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 3)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 6), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4))).disableAutoGeneratedBlastFurnaceRecipes();
+        Materials.Rubber                  = new Materials( 880, TextureSet.SET_SHINY             ,   1.5F,     32,  0, 1|2          |64|128      ,   0,   0,   0,   0,   "Rubber"                  ,   "Rubber"                        ,    0,       0,        400,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 0, Arrays.asList(new MaterialStack(Carbon, 5), new MaterialStack(Hydrogen, 8)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2)));
+        Materials.RawRubber               = new Materials( 896, TextureSet.SET_DULL              ,   1.0F,      0,  0, 1                         , 204, 199, 137,   0,   "RawRubber"               ,   "Raw Rubber"                    ,    0,       0,        400,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Carbon, 5), new MaterialStack(Hydrogen, 8)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2)));
+        Materials.Ruby                    = new Materials( 502, TextureSet.SET_RUBY              ,   7.0F,    256,  2, 1  |4|8      |64          , 255, 100, 100, 127,   "Ruby"                    ,   "Ruby"                          ,    0,       0,         -1,    0, false,  true,   5,   1,   1, Dyes.dyeRed         , 0, Arrays.asList(new MaterialStack(Chrome, 1), new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 3)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 6), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4))).disableAutoGeneratedBlastFurnaceRecipes();
         Materials.Salt                    = new Materials( 817, TextureSet.SET_FINE              ,   1.0F,      0,  1, 1    |8                   , 250, 250, 250,   0,   "Salt"                    ,   "Salt"                          ,    0,       0,         -1,    0, false, false,   2,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Sodium, 1), new MaterialStack(Chlorine, 1)));
         Materials.Saltpeter               = new Materials( 836, TextureSet.SET_FINE              ,   1.0F,      0,  1, 1    |8                   , 230, 230, 230,   0,   "Saltpeter"               ,   "Saltpeter"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeWhite       , 1, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Nitrogen, 1), new MaterialStack(Oxygen, 3)));
-        Materials.Sapphire                = new MaterialBuilder(503, TextureSet.SET_GEM_VERTICAL, "Sapphire").setToolSpeed(7.0F).setDurability(256).setToolQuality(2).addDustItems().addGemItems().setTransparent(true).addOreItems().addToolHeadItems().setRGBA(100, 100, 200, 127).setColor(Dyes.dyeBlue).setOreValue(5).setExtraData(0).setMaterialList(new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 3)).setAspects(Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 5), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 3))).constructMaterial().disableAutoGeneratedBlastFurnaceRecipes();
+        Materials.Sapphire                = new MaterialBuilder(503, TextureSet.SET_GEM_VERTICAL, "Sapphire").setToolSpeed(7.0F).setDurability(256).setToolQuality(2).addDustItems().addGemItems().setTransparent(true).addOreItems().addToolHeadItems().setRGBA(100, 100, 200, 127).setColor(Dyes.dyeBlue).setOreValue(5).setExtraData(0).setMaterialList(new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 3)).setAspects(Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 5), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 3))).constructMaterial().disableAutoGeneratedBlastFurnaceRecipes();
 
         Materials.Scheelite               = new Materials( 910, TextureSet.SET_DULL              ,   1.0F,      0,  3, 1    |8                   , 200, 140,  20,   0,   "Scheelite"               ,   "Scheelite"                     ,    0,       0,       2500, 2500, false, false,   4,   1,   1, Dyes.dyeBlack       , 0, Arrays.asList(new MaterialStack(Tungsten, 1), new MaterialStack(Calcium, 1), new MaterialStack(Oxygen, 4)));
-        Materials.Snow                    = new Materials( 728, TextureSet.SET_FINE              ,   1.0F,      0,  0, 1|      16                , 250, 250, 250,   0,   "Snow"                    ,   "Snow"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1)));
+        Materials.Snow                    = new Materials( 728, TextureSet.SET_FINE              ,   1.0F,      0,  0, 1|      16                , 250, 250, 250,   0,   "Snow"                    ,   "Snow"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 0, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.GELUM, 1)));
         Materials.Sodalite                = new Materials( 525, TextureSet.SET_LAPIS             ,   1.0F,      0,  1, 1  |4|8                   ,  20,  20, 255,   0,   "Sodalite"                ,   "Sodalite"                      ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeBlue        , 1, Arrays.asList(new MaterialStack(Aluminium, 3), new MaterialStack(Silicon, 3), new MaterialStack(Sodium, 4), new MaterialStack(Chlorine, 1)));
         Materials.SodiumPersulfate        = new Materials( 718, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16                , 255, 255, 255,   0,   "SodiumPersulfate"        ,   "Sodium Persulfate"             ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , 1, Arrays.asList(new MaterialStack(Sodium, 2), new MaterialStack(Sulfur, 2), new MaterialStack(Oxygen, 8)));
         Materials.SodiumSulfide           = new Materials( 719, TextureSet.SET_FLUID             ,   1.0F,      0,  2, 1                         , 255, 230, 128,   0,   "SodiumSulfide"           ,   "Sodium Sulfide"                ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , 1, Arrays.asList(new MaterialStack(Sodium, 2), new MaterialStack(Sulfur, 1)));
@@ -695,16 +695,16 @@ public class MaterialsInit1 {
         Materials.RoastedArsenic            = new MaterialBuilder(552, TextureSet.SET_SHINY   , "Roasted Arsenic").setName("RoastedArsenic").addDustItems().setRGB(240, 240, 240).constructMaterial();
         Materials.RoastedLead               = new MaterialBuilder(553, TextureSet.SET_SHINY   , "Roasted Lead").setName("RoastedLead").addDustItems().setRGB(168, 149, 43).constructMaterial();
 
-        Materials.SiliconSG               = new Materials(  856, TextureSet.SET_METALLIC         ,   1.0F,      0,  2, 1|2  |8   |32             ,  80,  80, 100,   0,   "SiliconSolarGrade"  ,   "Silicon Solar Grade (Poly SI)"      ,    0,       0,         2273,   2273, true, false,   1,   1,   1, Dyes.dyeBlack       , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 2))).disableAutoGeneratedBlastFurnaceRecipes();
-        Materials.CalciumDisilicide       = new Materials(  971, TextureSet.SET_METALLIC         ,   1.0F,      0,  2, 1    |8                   , 180, 180, 180,   0,   "CalciumDisilicide"       ,   "Calcium Disilicide"            ,    0,       0,       1313,   -1, false, false,   1,   1,   1, Dyes.dyeGray        ,1         , Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Silicon, 2)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1)));//CaSi2
-        Materials.SiliconTetrafluoride    = new MaterialBuilder(  967, TextureSet.SET_FLUID            , "Silicon Tetrafluoride" ).setName("SiliconTetrafluoride").addCell().addGas().setTransparent(true).setRGB(200, 200, 200).setColor(Dyes.dyeWhite).setMeltingPoint(178).setMaterialList(new MaterialStack(Silicon, 1), new MaterialStack(Fluorine, 4)).setAspects(Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1))).constructMaterial();//SIF4
-        Materials.SiliconTetrachloride    = new MaterialBuilder(  968, TextureSet.SET_FLUID            ,  "Silicon Tetrachloride").setName("SiliconTetrachloride").addCell().addFluid().setRGB(220, 220, 220).setColor(Dyes.dyeWhite).setMeltingPoint(204).setMaterialList(new MaterialStack(Silicon, 1), new MaterialStack(Chlorine, 4)).setAspects(Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1))).constructMaterial();//SICL4
-        Materials.Trichlorosilane         = new MaterialBuilder(  972, TextureSet.SET_FLUID            ,   "Trichlorosilane" ).setName("Trichlorosilane" ).addCell().addFluid().setRGB( 255, 255, 255).setColor(Dyes.dyeWhite).setMeltingPoint(139).setMaterialList(new MaterialStack(Hydrogen, 1), new MaterialStack(Silicon, 1), new MaterialStack(Chlorine, 3)).setAspects(Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1))).constructMaterial();//HSICL3
-        Materials.Hexachlorodisilane      = new MaterialBuilder(  973, TextureSet.SET_FLUID            ,  "Hexachlorodisilane").setName("Hexachlorodisilane" ).addCell().addFluid().setRGB( 255, 255, 255).setColor(Dyes.dyeWhite).setMeltingPoint(272).setExtraData(1).setMaterialList(new MaterialStack(Silicon, 2), new MaterialStack(Chlorine, 6)).setAspects(Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))).constructMaterial();//SI2CL6
-        Materials.Dichlorosilane          = new MaterialBuilder(  799, TextureSet.SET_FLUID            ,   "Dichlorosilane").setName("Dichlorosilane").addCell().addGas().setTransparent(true).setRGB( 255, 255, 255).setColor(Dyes.dyeWhite).setMeltingPoint(151).setExtraData(1).setMaterialList(new MaterialStack(Silicon, 1), new MaterialStack(Hydrogen, 2), new MaterialStack(Chlorine, 2)).setAspects(Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1))).constructMaterial();//SIH2CL2
-        Materials.Silane                  = new MaterialBuilder(  798, TextureSet.SET_FLUID            ,   "Silane").setName( "Silane").addCell().addGas().setRGB( 255, 255, 255).setColor(Dyes.dyeWhite).setMeltingPoint(88).setMaterialList(new MaterialStack(Silicon, 1), new MaterialStack(Hydrogen, 4)).setAspects(Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1))).constructMaterial();//SIH4
-        Materials.Calciumhydride          = new Materials(  797, TextureSet.SET_METALLIC         ,   1.0F,      0,  2, 1    |8                   , 220, 220, 220,   0,   "CalciumHydride"       ,   "Calcium Hydride"            ,    0,       0,       1089,   -1, false, false,   1,   1,   1, Dyes.dyeGray        ,1         , Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Hydrogen, 2)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1)));//CaH2
-        Materials.AluminiumFluoride       = new Materials(  969, TextureSet.SET_METALLIC         ,   1.0F,      0,  2, 1    |8                   , 255, 255, 255,   0,   "Aluminiumfluoride"        ,   "Aluminium Fluoride"             ,    0,       0,       1533,   -1, false, false,   1,   1,   1, Dyes.dyeWhite       ,1         , Arrays.asList(new MaterialStack(Aluminium, 1), new MaterialStack(Fluorine, 3)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1)));//ALF3
+        Materials.SiliconSG               = new Materials(  856, TextureSet.SET_METALLIC         ,   1.0F,      0,  2, 1|2  |8   |32             ,  80,  80, 100,   0,   "SiliconSolarGrade"  ,   "Silicon Solar Grade (Poly SI)"      ,    0,       0,         2273,   2273, true, false,   1,   1,   1, Dyes.dyeBlack       , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 4), new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 2))).disableAutoGeneratedBlastFurnaceRecipes();
+        Materials.CalciumDisilicide       = new Materials(  971, TextureSet.SET_METALLIC         ,   1.0F,      0,  2, 1    |8                   , 180, 180, 180,   0,   "CalciumDisilicide"       ,   "Calcium Disilicide"            ,    0,       0,       1313,   -1, false, false,   1,   1,   1, Dyes.dyeGray        ,1         , Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Silicon, 2)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.TERRA, 1), new TCAspects.TC_AspectStack(TCAspects.ORDO, 1)));//CaSi2
+        Materials.SiliconTetrafluoride    = new MaterialBuilder(  967, TextureSet.SET_FLUID            , "Silicon Tetrafluoride" ).setName("SiliconTetrafluoride").addCell().addGas().setTransparent(true).setRGB(200, 200, 200).setColor(Dyes.dyeWhite).setMeltingPoint(178).setMaterialList(new MaterialStack(Silicon, 1), new MaterialStack(Fluorine, 4)).setAspects(Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1))).constructMaterial();//SIF4
+        Materials.SiliconTetrachloride    = new MaterialBuilder(  968, TextureSet.SET_FLUID            ,  "Silicon Tetrachloride").setName("SiliconTetrachloride").addCell().addFluid().setRGB(220, 220, 220).setColor(Dyes.dyeWhite).setMeltingPoint(204).setMaterialList(new MaterialStack(Silicon, 1), new MaterialStack(Chlorine, 4)).setAspects(Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1))).constructMaterial();//SICL4
+        Materials.Trichlorosilane         = new MaterialBuilder(  972, TextureSet.SET_FLUID            ,   "Trichlorosilane" ).setName("Trichlorosilane" ).addCell().addFluid().setRGB( 255, 255, 255).setColor(Dyes.dyeWhite).setMeltingPoint(139).setMaterialList(new MaterialStack(Hydrogen, 1), new MaterialStack(Silicon, 1), new MaterialStack(Chlorine, 3)).setAspects(Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1))).constructMaterial();//HSICL3
+        Materials.Hexachlorodisilane      = new MaterialBuilder(  973, TextureSet.SET_FLUID            ,  "Hexachlorodisilane").setName("Hexachlorodisilane" ).addCell().addFluid().setRGB( 255, 255, 255).setColor(Dyes.dyeWhite).setMeltingPoint(272).setExtraData(1).setMaterialList(new MaterialStack(Silicon, 2), new MaterialStack(Chlorine, 6)).setAspects(Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))).constructMaterial();//SI2CL6
+        Materials.Dichlorosilane          = new MaterialBuilder(  799, TextureSet.SET_FLUID            ,   "Dichlorosilane").setName("Dichlorosilane").addCell().addGas().setTransparent(true).setRGB( 255, 255, 255).setColor(Dyes.dyeWhite).setMeltingPoint(151).setExtraData(1).setMaterialList(new MaterialStack(Silicon, 1), new MaterialStack(Hydrogen, 2), new MaterialStack(Chlorine, 2)).setAspects(Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1))).constructMaterial();//SIH2CL2
+        Materials.Silane                  = new MaterialBuilder(  798, TextureSet.SET_FLUID            ,   "Silane").setName( "Silane").addCell().addGas().setRGB( 255, 255, 255).setColor(Dyes.dyeWhite).setMeltingPoint(88).setMaterialList(new MaterialStack(Silicon, 1), new MaterialStack(Hydrogen, 4)).setAspects(Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 1))).constructMaterial();//SIH4
+        Materials.Calciumhydride          = new Materials(  797, TextureSet.SET_METALLIC         ,   1.0F,      0,  2, 1    |8                   , 220, 220, 220,   0,   "CalciumHydride"       ,   "Calcium Hydride"            ,    0,       0,       1089,   -1, false, false,   1,   1,   1, Dyes.dyeGray        ,1         , Arrays.asList(new MaterialStack(Calcium, 1), new MaterialStack(Hydrogen, 2)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.TERRA, 1), new TCAspects.TC_AspectStack(TCAspects.ORDO, 1)));//CaH2
+        Materials.AluminiumFluoride       = new Materials(  969, TextureSet.SET_METALLIC         ,   1.0F,      0,  2, 1    |8                   , 255, 255, 255,   0,   "Aluminiumfluoride"        ,   "Aluminium Fluoride"             ,    0,       0,       1533,   -1, false, false,   1,   1,   1, Dyes.dyeWhite       ,1         , Arrays.asList(new MaterialStack(Aluminium, 1), new MaterialStack(Fluorine, 3)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.TERRA, 1), new TCAspects.TC_AspectStack(TCAspects.ORDO, 1)));//ALF3
 
         Materials.SolderingAlloy          = new Materials( 314, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1|2                       , 220, 220, 230,   0,   "SolderingAlloy"          ,   "Soldering Alloy"               ,    0,       0,        400,  400, false, false,   1,   1,   1, Dyes.dyeWhite       , 2, Arrays.asList(new MaterialStack(Tin, 9), new MaterialStack(Antimony, 1)));
         Materials.GalliumArsenide         = new Materials( 980, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1|2                       , 160, 160, 160,   0,   "GalliumArsenide"         ,   "Gallium Arsenide"              ,    0,       0,         -1, 1200,  true, false,   1,   1,   1, Dyes.dyeGray        , 2, Arrays.asList(new MaterialStack(Arsenic, 1), new MaterialStack(Gallium, 1)));
@@ -712,52 +712,52 @@ public class MaterialsInit1 {
         Materials.Spessartine             = new Materials( 838, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1    |8                   , 255, 100, 100,   0,   "Spessartine"             ,   "Spessartine"                   ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeRed         , 0, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Manganese, 3), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12)));
         Materials.Sphalerite              = new Materials( 839, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1    |8                   , 255, 255, 255,   0,   "Sphalerite"              ,   "Sphalerite"                    ,    0,       0,         -1,    0, false, false,   2,   1,   1, Dyes.dyeYellow      , 1, Arrays.asList(new MaterialStack(Zinc, 1), new MaterialStack(Sulfur, 1)));
         Materials.StainlessSteel          = new Materials( 306, TextureSet.SET_SHINY             ,   7.0F,    480,  4, 1|2          |64|128      , 200, 200, 220,   0,   "StainlessSteel"          ,   "Stainless Steel"               ,    0,       0,         -1, 1700,  true, false,   1,   1,   1, Dyes.dyeWhite       , 1, Arrays.asList(new MaterialStack(Iron, 6), new MaterialStack(Chrome, 1), new MaterialStack(Manganese, 1), new MaterialStack(Nickel, 1)));
-        Materials.Steel                   = new Materials( 305, TextureSet.SET_METALLIC          ,   6.0F,    512,  3, 1|2          |64|128      , 128, 128, 128,   0,   "Steel"                   ,   "Steel"                         ,    0,       0,       1811, 1000,  true, false,   4,  51,  50, Dyes.dyeGray        , 1, Arrays.asList(new MaterialStack(Iron, 50), new MaterialStack(Carbon, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1)));
+        Materials.Steel                   = new Materials( 305, TextureSet.SET_METALLIC          ,   6.0F,    512,  3, 1|2          |64|128      , 128, 128, 128,   0,   "Steel"                   ,   "Steel"                         ,    0,       0,       1811, 1000,  true, false,   4,  51,  50, Dyes.dyeGray        , 1, Arrays.asList(new MaterialStack(Iron, 50), new MaterialStack(Carbon, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.ORDO, 1)));
         Materials.Stibnite                = new Materials( 945, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1    |8                   ,  70,  70,  70,   0,   "Stibnite"                ,   "Stibnite"                      ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 2, Arrays.asList(new MaterialStack(Antimony, 2), new MaterialStack(Sulfur, 3)));
         Materials.SulfuricAcid            = new Materials( 720, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16                , 255, 128,   0,   0,   "SulfuricAcid"            ,   "Sulfuric Acid"                 ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , 1, Arrays.asList(new MaterialStack(Hydrogen, 2), new MaterialStack(Sulfur, 1), new MaterialStack(Oxygen, 4)));
-        Materials.Tanzanite               = new Materials( 508, TextureSet.SET_GEM_VERTICAL      ,   7.0F,    256,  2, 1  |4|8      |64          ,  64,   0, 200, 127,   "Tanzanite"               ,   "Tanzanite"                     ,    0,       0,         -1,    0, false,  true,   5,   1,   1, Dyes.dyePurple      , 0, Arrays.asList(new MaterialStack(Calcium, 2), new MaterialStack(Aluminium, 3), new MaterialStack(Silicon, 3), new MaterialStack(Hydrogen, 1), new MaterialStack(Oxygen, 13)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 5), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 3)));
+        Materials.Tanzanite               = new Materials( 508, TextureSet.SET_GEM_VERTICAL      ,   7.0F,    256,  2, 1  |4|8      |64          ,  64,   0, 200, 127,   "Tanzanite"               ,   "Tanzanite"                     ,    0,       0,         -1,    0, false,  true,   5,   1,   1, Dyes.dyePurple      , 0, Arrays.asList(new MaterialStack(Calcium, 2), new MaterialStack(Aluminium, 3), new MaterialStack(Silicon, 3), new MaterialStack(Hydrogen, 1), new MaterialStack(Oxygen, 13)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 5), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 3)));
         Materials.Tetrahedrite            = new Materials( 840, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1    |8                   , 200,  32,   0,   0,   "Tetrahedrite"            ,   "Tetrahedrite"                  ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeRed         , 2, Arrays.asList(new MaterialStack(Copper, 3), new MaterialStack(Antimony, 1), new MaterialStack(Sulfur, 3), new MaterialStack(Iron, 1))); //Cu3SbS3 + x(Fe,Zn)6Sb2S9
-        Materials.TinAlloy                = new Materials( 363, TextureSet.SET_METALLIC          ,   6.5F,     96,  2, 1|2          |64|128      , 200, 200, 200,   0,   "TinAlloy"                ,   "Tin Alloy"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 2, Arrays.asList(new MaterialStack(Tin, 1), new MaterialStack(Iron, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1)));
-        Materials.Topaz                   = new Materials( 507, TextureSet.SET_GEM_HORIZONTAL    ,   7.0F,    256,  3, 1  |4|8      |64          , 255, 128,   0, 127,   "Topaz"                   ,   "Topaz"                         ,    0,       0,         -1,    0, false,  true,   5,   1,   1, Dyes.dyeOrange      , 0, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 1), new MaterialStack(Fluorine, 2), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 6)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 6), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4)));
+        Materials.TinAlloy                = new Materials( 363, TextureSet.SET_METALLIC          ,   6.5F,     96,  2, 1|2          |64|128      , 200, 200, 200,   0,   "TinAlloy"                ,   "Tin Alloy"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 2, Arrays.asList(new MaterialStack(Tin, 1), new MaterialStack(Iron, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 1)));
+        Materials.Topaz                   = new Materials( 507, TextureSet.SET_GEM_HORIZONTAL    ,   7.0F,    256,  3, 1  |4|8      |64          , 255, 128,   0, 127,   "Topaz"                   ,   "Topaz"                         ,    0,       0,         -1,    0, false,  true,   5,   1,   1, Dyes.dyeOrange      , 0, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 1), new MaterialStack(Fluorine, 2), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 6)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 6), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4)));
         Materials.Tungstate               = new Materials( 841, TextureSet.SET_DULL              ,   1.0F,      0,  3, 1    |8                   ,  55,  50,  35,   0,   "Tungstate"               ,   "Tungstate"                     ,    0,       0,       2500, 2500,  true, false,   4,   1,   1, Dyes.dyeBlack       , 0, Arrays.asList(new MaterialStack(Tungsten, 1), new MaterialStack(Lithium, 2), new MaterialStack(Oxygen, 4)));
         Materials.Ultimet                 = new Materials( 344, TextureSet.SET_SHINY             ,   9.0F,   2048,  4, 1|2          |64|128      , 180, 180, 230,   0,   "Ultimet"                 ,   "Ultimet"                       ,    0,       0,       2700, 2700,  true, false,   1,   1,   1, Dyes.dyeLightBlue   , 1, Arrays.asList(new MaterialStack(Cobalt, 5), new MaterialStack(Chrome, 2), new MaterialStack(Nickel, 1), new MaterialStack(Molybdenum, 1))); // 54% Cobalt, 26% Chromium, 9% Nickel, 5% Molybdenum, 3% Iron, 2% Tungsten, 0.8% Manganese, 0.3% Silicon, 0.08% Nitrogen and 0.06% Carbon
         Materials.Uraninite               = new Materials( 922, TextureSet.SET_METALLIC          ,   1.0F,      0,  3, 1    |8                   ,  35,  35,  35,   0,   "Uraninite"               ,   "Uraninite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLime        , 2, Arrays.asList(new MaterialStack(Uranium, 1), new MaterialStack(Oxygen, 2)));
         Materials.Uvarovite               = new Materials( 842, TextureSet.SET_DIAMOND           ,   1.0F,      0,  2, 1    |8                   , 180, 255, 180,   0,   "Uvarovite"               ,   "Uvarovite"                     ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeGreen       , 1, Arrays.asList(new MaterialStack(Calcium, 3), new MaterialStack(Chrome, 2), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 12)));
         Materials.VanadiumGallium         = new Materials( 357, TextureSet.SET_SHINY             ,   1.0F,      0,  2, 1|2             |128      , 128, 128, 140,   0,   "VanadiumGallium"         ,   "Vanadium-Gallium"              ,    0,       0,       4500, 4500,  true, false,   1,   1,   1, Dyes.dyeGray        , 2, Arrays.asList(new MaterialStack(Vanadium, 3), new MaterialStack(Gallium, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Wood                    = new Materials( 809, TextureSet.SET_WOOD              ,   2.0F,     16,  0, 1|2          |64|128      , 100,  50,   0,   0,   "Wood"                    ,   "Wood"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , 0, Arrays.asList(new MaterialStack(Carbon, 1), new MaterialStack(Oxygen, 1), new MaterialStack(Hydrogen, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2)));
+        Materials.Wood                    = new Materials( 809, TextureSet.SET_WOOD              ,   2.0F,     16,  0, 1|2          |64|128      , 100,  50,   0,   0,   "Wood"                    ,   "Wood"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , 0, Arrays.asList(new MaterialStack(Carbon, 1), new MaterialStack(Oxygen, 1), new MaterialStack(Hydrogen, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ARBOR, 2)));
         Materials.WroughtIron             = new Materials( 304, TextureSet.SET_METALLIC          ,   6.0F,    384,  2, 1|2          |64|128      , 200, 180, 180,   0,   "WroughtIron"             ,   "Wrought Iron"                  ,    0,       0,       1811,    0, false, false,   3,   1,   1, Dyes.dyeLightGray   , 2, Collections.singletonList(new MaterialStack(Iron, 1)));
         Materials.Wulfenite               = new Materials( 882, TextureSet.SET_DULL              ,   1.0F,      0,  3, 1    |8                   , 255, 128,   0,   0,   "Wulfenite"               ,   "Wulfenite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , 2, Arrays.asList(new MaterialStack(Lead, 1), new MaterialStack(Molybdenum, 1), new MaterialStack(Oxygen, 4)));
         Materials.YellowLimonite          = new Materials( 931, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1    |8                   , 200, 200,   0,   0,   "YellowLimonite"          ,   "Yellow Limonite"               ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Hydrogen, 1), new MaterialStack(Oxygen, 2))); // FeO(OH) + a bit of Ni and Co
         Materials.YttriumBariumCuprate    = new Materials( 358, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1|2                       ,  80,  64,  70,   0,   "YttriumBariumCuprate"    ,   "Yttrium Barium Cuprate"        ,    0,       0,       4500, 4500,  true, false,   1,   1,   1, Dyes.dyeGray        , 0, Arrays.asList(new MaterialStack(Yttrium, 1), new MaterialStack(Barium, 2), new MaterialStack(Copper, 3), new MaterialStack(Oxygen, 7))).disableAutoGeneratedVacuumFreezerRecipe();
 
-        Materials.WoodSealed              = new Materials( 889, TextureSet.SET_WOOD              ,   3.0F,     24,  0, 1|2          |64|128      ,  80,  40,   0,   0,   "WoodSealed"              ,   "Sealed Wood"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , 0, Collections.singletonList(new MaterialStack(Wood, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 1)));
-        Materials.LiveRoot                = new Materials( 832, TextureSet.SET_WOOD              ,   1.0F,      0,  1, 1                         , 220, 200,   0,   0,   "LiveRoot"                ,   "Liveroot"                      ,    5,      16,         -1,    0, false, false,   2,   4,   3, Dyes.dyeBrown       , 2, Arrays.asList(new MaterialStack(Wood, 3), new MaterialStack(Magic, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.VICTUS, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1)));
+        Materials.WoodSealed              = new Materials( 889, TextureSet.SET_WOOD              ,   3.0F,     24,  0, 1|2          |64|128      ,  80,  40,   0,   0,   "WoodSealed"              ,   "Sealed Wood"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , 0, Collections.singletonList(new MaterialStack(Wood, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.ARBOR, 2), new TCAspects.TC_AspectStack(TCAspects.FABRICO, 1)));
+        Materials.LiveRoot                = new Materials( 832, TextureSet.SET_WOOD              ,   1.0F,      0,  1, 1                         , 220, 200,   0,   0,   "LiveRoot"                ,   "Liveroot"                      ,    5,      16,         -1,    0, false, false,   2,   4,   3, Dyes.dyeBrown       , 2, Arrays.asList(new MaterialStack(Wood, 3), new MaterialStack(Magic, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.ARBOR, 2), new TCAspects.TC_AspectStack(TCAspects.VICTUS, 2), new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1)));
         Materials.IronWood                = new Materials( 338, TextureSet.SET_WOOD              ,   6.0F,    384,  2, 1|2          |64|128      , 150, 140, 110,   0,   "IronWood"                ,   "Ironwood"                      ,    5,       8,         -1,    0, false, false,   2,  19,  18, Dyes.dyeBrown       , 2, Arrays.asList(new MaterialStack(Iron, 9), new MaterialStack(LiveRoot, 9), new MaterialStack(Gold, 1)));
-        Materials.Glass                   = new Materials( 890, TextureSet.SET_GLASS             ,   1.0F,      4,  0, 1  |4                     , 250, 250, 250, 220,   "Glass"                   ,   "Glass"                         ,    0,       0,       1500,    0, false,  true,   1,   1,   1, Dyes.dyeWhite       , 2, Collections.singletonList(new MaterialStack(SiliconDioxide, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 2)));
+        Materials.Glass                   = new Materials( 890, TextureSet.SET_GLASS             ,   1.0F,      4,  0, 1  |4                     , 250, 250, 250, 220,   "Glass"                   ,   "Glass"                         ,    0,       0,       1500,    0, false,  true,   1,   1,   1, Dyes.dyeWhite       , 2, Collections.singletonList(new MaterialStack(SiliconDioxide, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 2)));
         Materials.BorosilicateGlass  = new MaterialBuilder(611, TextureSet.SET_GLASS             ,                                                                                                     "Borosilicate Glass").addDustItems().addMetalItems().setRGB(230, 243, 230).setColor(Dyes.dyeWhite).setMaterialList(new MaterialStack(Boron, 1), new MaterialStack(Glass, 7)).addCentrifugeRecipe().constructMaterial();
         Materials.Perlite                 = new Materials( 925, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1    |8                   ,  30,  20,  30,   0,   "Perlite"                 ,   "Perlite"                       ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Obsidian, 2), new MaterialStack(Water, 1)));
         Materials.Borax                   = new Materials( 941, TextureSet.SET_FINE              ,   1.0F,      0,  1, 1    |8                   , 250, 250, 250,   0,   "Borax"                   ,   "Borax"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 1, Arrays.asList(new MaterialStack(Sodium, 2), new MaterialStack(Boron, 4), new MaterialStack(Oxygen, 7), new MaterialStack(Water, 10)));
         Materials.Lignite                 = new Materials( 538, TextureSet.SET_LIGNITE           ,   1.0F,      0,  0, 1  |4|8                   , 100,  70,  70,   0,   "Lignite"                 ,   "Lignite Coal"                  ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 1, Arrays.asList(new MaterialStack(Carbon, 3), new MaterialStack(Water, 1)));
-        Materials.Olivine                 = new Materials( 505, TextureSet.SET_RUBY              ,   7.0F,    256,  2, 1  |4|8      |64          , 150, 255, 150, 127,   "Olivine"                 ,   "Olivine"                       ,    0,       0,         -1,    0, false,  true,   5,   1,   1, Dyes.dyeLime        , 1, Arrays.asList(new MaterialStack(Magnesium, 2), new MaterialStack(Iron, 1), new MaterialStack(SiliconDioxide, 2)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 2)));
-        Materials.Opal                    = new Materials( 510, TextureSet.SET_OPAL              ,   7.0F,    256,  2, 1  |4|8      |64          ,   0,   0, 255,   0,   "Opal"                    ,   "Opal"                          ,    0,       0,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeBlue        , 1, Collections.singletonList(new MaterialStack(SiliconDioxide, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 5), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 3)));
-        Materials.Amethyst                = new Materials( 509, TextureSet.SET_FLINT             ,   7.0F,    256,  3, 1  |4|8      |64          , 210,  50, 210, 127,   "Amethyst"                ,   "Amethyst"                      ,    0,       0,         -1,    0, false,  true,   3,   1,   1, Dyes.dyePink        , 1, Arrays.asList(new MaterialStack(SiliconDioxide, 4), new MaterialStack(Iron, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 6), new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4)));
-        Materials.Redstone                = new Materials( 810, TextureSet.SET_ROUGH             ,   1.0F,      0,  2, 1    |8                   , 200,   0,   0,   0,   "Redstone"                ,   "Redstone"                      ,    0,       0,        500,    0, false, false,   3,   1,   1, Dyes.dyeRed         , 2, Arrays.asList(new MaterialStack(Silicon, 1), new MaterialStack(Pyrite, 5), new MaterialStack(Ruby, 1), new MaterialStack(Mercury, 3)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 2)));
-        Materials.Lapis                   = new Materials( 526, TextureSet.SET_LAPIS             ,   1.0F,      0,  1, 1  |4|8                   ,  70,  70, 220,   0,   "Lapis"                   ,   "Lapis"                         ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeBlue        , 2, Arrays.asList(new MaterialStack(Lazurite, 12), new MaterialStack(Sodalite, 2), new MaterialStack(Pyrite, 1), new MaterialStack(Calcite, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 1)));
-        Materials.Blaze                   = new Materials( 801, TextureSet.SET_POWDER            ,   2.0F,     16,  1, 1            |64          , 255, 200,   0,   0,   "Blaze"                   ,   "Blaze"                         ,    0,       0,       6400,    0, false, false,   2,   3,   2, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(DarkAsh, 1), new MaterialStack(Sulfur, 1), new MaterialStack(Magic, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 4)));
-        Materials.EnderPearl              = new Materials( 532, TextureSet.SET_SHINY             ,   1.0F,     16,  1, 1  |4                     , 108, 220, 200,   0,   "EnderPearl"              ,   "Enderpearl"                    ,    0,       0,         -1,    0, false, false,   1,  16,  10, Dyes.dyeGreen       , 1, Arrays.asList(new MaterialStack(Beryllium, 1), new MaterialStack(Potassium, 4), new MaterialStack(Nitrogen, 5), new MaterialStack(Magic, 6)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 2)));
-        Materials.EnderEye                = new Materials( 533, TextureSet.SET_SHINY             ,   1.0F,     16,  1, 1  |4                     , 160, 250, 230,   0,   "EnderEye"                ,   "Endereye"                      ,    5,      10,         -1,    0, false, false,   1,   2,   1, Dyes.dyeGreen       , 2, Arrays.asList(new MaterialStack(EnderPearl, 1), new MaterialStack(Blaze, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.SENSUS, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.ITER, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 3), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 2)));
-        Materials.Flint                   = new Materials( 802, TextureSet.SET_FLINT             ,   2.5F,    128,  1, 1            |64          ,   0,  32,  64,   0,   "Flint"                   ,   "Flint"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        , 2, Collections.singletonList(new MaterialStack(SiliconDioxide, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1)));
+        Materials.Olivine                 = new Materials( 505, TextureSet.SET_RUBY              ,   7.0F,    256,  2, 1  |4|8      |64          , 150, 255, 150, 127,   "Olivine"                 ,   "Olivine"                       ,    0,       0,         -1,    0, false,  true,   5,   1,   1, Dyes.dyeLime        , 1, Arrays.asList(new MaterialStack(Magnesium, 2), new MaterialStack(Iron, 1), new MaterialStack(SiliconDioxide, 2)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 4), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 2)));
+        Materials.Opal                    = new Materials( 510, TextureSet.SET_OPAL              ,   7.0F,    256,  2, 1  |4|8      |64          ,   0,   0, 255,   0,   "Opal"                    ,   "Opal"                          ,    0,       0,         -1,    0, false,  true,   3,   1,   1, Dyes.dyeBlue        , 1, Collections.singletonList(new MaterialStack(SiliconDioxide, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 5), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 3)));
+        Materials.Amethyst                = new Materials( 509, TextureSet.SET_FLINT             ,   7.0F,    256,  3, 1  |4|8      |64          , 210,  50, 210, 127,   "Amethyst"                ,   "Amethyst"                      ,    0,       0,         -1,    0, false,  true,   3,   1,   1, Dyes.dyePink        , 1, Arrays.asList(new MaterialStack(SiliconDioxide, 4), new MaterialStack(Iron, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 6), new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4)));
+        Materials.Redstone                = new Materials( 810, TextureSet.SET_ROUGH             ,   1.0F,      0,  2, 1    |8                   , 200,   0,   0,   0,   "Redstone"                ,   "Redstone"                      ,    0,       0,        500,    0, false, false,   3,   1,   1, Dyes.dyeRed         , 2, Arrays.asList(new MaterialStack(Silicon, 1), new MaterialStack(Pyrite, 5), new MaterialStack(Ruby, 1), new MaterialStack(Mercury, 3)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.MACHINA, 1), new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 2)));
+        Materials.Lapis                   = new Materials( 526, TextureSet.SET_LAPIS             ,   1.0F,      0,  1, 1  |4|8                   ,  70,  70, 220,   0,   "Lapis"                   ,   "Lapis"                         ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeBlue        , 2, Arrays.asList(new MaterialStack(Lazurite, 12), new MaterialStack(Sodalite, 2), new MaterialStack(Pyrite, 1), new MaterialStack(Calcite, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.SENSUS, 1)));
+        Materials.Blaze                   = new Materials( 801, TextureSet.SET_POWDER            ,   2.0F,     16,  1, 1            |64          , 255, 200,   0,   0,   "Blaze"                   ,   "Blaze"                         ,    0,       0,       6400,    0, false, false,   2,   3,   2, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(DarkAsh, 1), new MaterialStack(Sulfur, 1), new MaterialStack(Magic, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 2), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 4)));
+        Materials.EnderPearl              = new Materials( 532, TextureSet.SET_SHINY             ,   1.0F,     16,  1, 1  |4                     , 108, 220, 200,   0,   "EnderPearl"              ,   "Enderpearl"                    ,    0,       0,         -1,    0, false, false,   1,  16,  10, Dyes.dyeGreen       , 1, Arrays.asList(new MaterialStack(Beryllium, 1), new MaterialStack(Potassium, 4), new MaterialStack(Nitrogen, 5), new MaterialStack(Magic, 6)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 4), new TCAspects.TC_AspectStack(TCAspects.ITER, 4), new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 2)));
+        Materials.EnderEye                = new Materials( 533, TextureSet.SET_SHINY             ,   1.0F,     16,  1, 1  |4                     , 160, 250, 230,   0,   "EnderEye"                ,   "Endereye"                      ,    5,      10,         -1,    0, false, false,   1,   2,   1, Dyes.dyeGreen       , 2, Arrays.asList(new MaterialStack(EnderPearl, 1), new MaterialStack(Blaze, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.SENSUS, 4), new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 4), new TCAspects.TC_AspectStack(TCAspects.ITER, 4), new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 3), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 2)));
+        Materials.Flint                   = new Materials( 802, TextureSet.SET_FLINT             ,   2.5F,    128,  1, 1            |64          ,   0,  32,  64,   0,   "Flint"                   ,   "Flint"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        , 2, Collections.singletonList(new MaterialStack(SiliconDioxide, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.TERRA, 1), new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 1)));
         Materials.Diatomite               = new Materials( 948, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1    |8                   , 225, 225, 225,   0,   "Diatomite"               ,   "Diatomite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        , 2, Arrays.asList(new MaterialStack(Flint, 8), new MaterialStack(BandedIron, 1), new MaterialStack(Sapphire, 1)));
         Materials.VolcanicAsh             = new Materials( 940, TextureSet.SET_FLINT             ,   1.0F,      0,  0, 1                         ,  60,  50,  50,   0,   "VolcanicAsh"             ,   "Volcanic Ashes"                ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Flint, 6), new MaterialStack(Iron, 1), new MaterialStack(Magnesium, 1)));
         Materials.Niter                   = new Materials( 531, TextureSet.SET_FLINT             ,   1.0F,      0,  1, 1  |4|8                   , 255, 200, 200,   0,   "Niter"                   ,   "Niter"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePink        , 2, Collections.singletonList(new MaterialStack(Saltpeter, 1)));
-        Materials.Pyrotheum               = new Materials( 843, TextureSet.SET_FIERY             ,   1.0F,      0,  1, 1                         , 255, 128,   0,   0,   "Pyrotheum"               ,   "Pyrotheum"                     ,    2,      62,         -1,    0, false, false,   2,   3,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Coal, 1), new MaterialStack(Redstone, 1), new MaterialStack(Blaze, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1)));
-        Materials.Cryotheum               = new Materials( 898, TextureSet.SET_SHINY             ,   1.0F,      0,  1, 1                         ,   0, 148, 203,   0,   "Cryotheum"               ,   "Cryotheum"                     ,    2,      62,         -1,    0, false, false,   2,   3,   1, Dyes.dyeLightBlue   , 2, Arrays.asList(new MaterialStack(Saltpeter, 1), new MaterialStack(Redstone, 1), new MaterialStack(Snow, 1), new MaterialStack(Blizz, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1),  new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1)));
+        Materials.Pyrotheum               = new Materials( 843, TextureSet.SET_FIERY             ,   1.0F,      0,  1, 1                         , 255, 128,   0,   0,   "Pyrotheum"               ,   "Pyrotheum"                     ,    2,      62,         -1,    0, false, false,   2,   3,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Coal, 1), new MaterialStack(Redstone, 1), new MaterialStack(Blaze, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 2), new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1)));
+        Materials.Cryotheum               = new Materials( 898, TextureSet.SET_SHINY             ,   1.0F,      0,  1, 1                         ,   0, 148, 203,   0,   "Cryotheum"               ,   "Cryotheum"                     ,    2,      62,         -1,    0, false, false,   2,   3,   1, Dyes.dyeLightBlue   , 2, Arrays.asList(new MaterialStack(Saltpeter, 1), new MaterialStack(Redstone, 1), new MaterialStack(Snow, 1), new MaterialStack(Blizz, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 2), new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1),  new TCAspects.TC_AspectStack(TCAspects.GELUM, 1)));
         Materials.HydratedCoal            = new Materials( 818, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1                         ,  70,  70, 100,   0,   "HydratedCoal"            ,   "Hydrated Coal"                 ,    0,       0,         -1,    0, false, false,   1,   9,   8, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Coal, 8), new MaterialStack(Water, 1)));
-        Materials.Apatite                 = new Materials( 530, TextureSet.SET_DIAMOND           ,   1.0F,      0,  1, 1  |4|8                   , 200, 200, 255,   0,   "Apatite"                 ,   "Apatite"                       ,    0,       0,         -1,    0, false, false,   2,   1,   1, Dyes.dyeCyan        , 1, Arrays.asList(new MaterialStack(Calcium, 5), new MaterialStack(Phosphate, 3), new MaterialStack(Chlorine, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.MESSIS, 2)));
-        Materials.Alumite                 = new Materials( 400, TextureSet.SET_METALLIC          ,   5.0F,    768,  2, 1|2          |64|128      , 255, 105, 180,   0,   "Alumite"                 ,   "Alumite"                       ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePink        , 2, Arrays.asList(new MaterialStack(Aluminium, 5), new MaterialStack(Steel, 2), new MaterialStack(Obsidian, 2)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 2)));
-        Materials.Manyullyn               = new Materials( 386, TextureSet.SET_SHINY             ,  25.0F,   2048,  5, 1|2  |8      |64|128      , 154,  76, 185,   0,   "Manyullyn"               ,   "Manyullyn"                     ,    0,       0,       3600, 3600,  true, false,   1,   1,   1, Dyes.dyePurple      , 2, Arrays.asList(new MaterialStack(Cobalt, 1), new MaterialStack(Ardite, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 2))).disableAutoGeneratedBlastFurnaceRecipes();
-        Materials.Steeleaf                = new Materials( 339, TextureSet.SET_LEAF              ,   8.0F,    768,  3, 1|2          |64|128      ,  50, 127,  50,   0,   "Steeleaf"                ,   "Steeleaf"                      ,    5,      24,         -1,    0, false, false,   4,   1,   1, Dyes.dyeGreen       , 2, Arrays.asList(new MaterialStack(Steel, 1), new MaterialStack(Magic, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1)));
-        Materials.Knightmetal             = new Materials( 362, TextureSet.SET_METALLIC          ,   8.0F,   1024,  3, 1|2          |64|128      , 210, 240, 200,   0,   "Knightmetal"             ,   "Knightmetal"                   ,    5,      24,         -1,    0, false, false,   4,   1,   1, Dyes.dyeLime        , 2, Arrays.asList(new MaterialStack(Steel, 2), new MaterialStack(Magic, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2)));
+        Materials.Apatite                 = new Materials( 530, TextureSet.SET_DIAMOND           ,   1.0F,      0,  1, 1  |4|8                   , 200, 200, 255,   0,   "Apatite"                 ,   "Apatite"                       ,    0,       0,         -1,    0, false, false,   2,   1,   1, Dyes.dyeCyan        , 1, Arrays.asList(new MaterialStack(Calcium, 5), new MaterialStack(Phosphate, 3), new MaterialStack(Chlorine, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.MESSIS, 2)));
+        Materials.Alumite                 = new Materials( 400, TextureSet.SET_METALLIC          ,   5.0F,    768,  2, 1|2          |64|128      , 255, 105, 180,   0,   "Alumite"                 ,   "Alumite"                       ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePink        , 2, Arrays.asList(new MaterialStack(Aluminium, 5), new MaterialStack(Steel, 2), new MaterialStack(Obsidian, 2)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 2)));
+        Materials.Manyullyn               = new Materials( 386, TextureSet.SET_SHINY             ,  25.0F,   2048,  5, 1|2  |8      |64|128      , 154,  76, 185,   0,   "Manyullyn"               ,   "Manyullyn"                     ,    0,       0,       3600, 3600,  true, false,   1,   1,   1, Dyes.dyePurple      , 2, Arrays.asList(new MaterialStack(Cobalt, 1), new MaterialStack(Ardite, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 2))).disableAutoGeneratedBlastFurnaceRecipes();
+        Materials.Steeleaf                = new Materials( 339, TextureSet.SET_LEAF              ,   8.0F,    768,  3, 1|2          |64|128      ,  50, 127,  50,   0,   "Steeleaf"                ,   "Steeleaf"                      ,    5,      24,         -1,    0, false, false,   4,   1,   1, Dyes.dyeGreen       , 2, Arrays.asList(new MaterialStack(Steel, 1), new MaterialStack(Magic, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.HERBA, 2), new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1)));
+        Materials.Knightmetal             = new Materials( 362, TextureSet.SET_METALLIC          ,   8.0F,   1024,  3, 1|2          |64|128      , 210, 240, 200,   0,   "Knightmetal"             ,   "Knightmetal"                   ,    5,      24,         -1,    0, false, false,   4,   1,   1, Dyes.dyeLime        , 2, Arrays.asList(new MaterialStack(Steel, 2), new MaterialStack(Magic, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1), new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2)));
         Materials.SterlingSilver          = new Materials( 350, TextureSet.SET_SHINY             ,  13.0F,    128,  2, 1|2          |64|128      , 250, 220, 225,   0,   "SterlingSilver"          ,   "Sterling Silver"               ,    0,       0,         -1, 1700,  true, false,   4,   1,   1, Dyes.dyeWhite       , 2, Arrays.asList(new MaterialStack(Copper, 1), new MaterialStack(Silver, 4)));
         Materials.RoseGold                = new Materials( 351, TextureSet.SET_SHINY             ,  14.0F,    128,  2, 1|2          |64|128      , 255, 230,  30,   0,   "RoseGold"                ,   "Rose Gold"                     ,    0,       0,         -1, 1600,  true, false,   4,   1,   1, Dyes.dyeOrange      , 2, Arrays.asList(new MaterialStack(Copper, 1), new MaterialStack(Gold, 4)));
         Materials.BlackBronze             = new Materials( 352, TextureSet.SET_DULL              ,  12.0F,    256,  2, 1|2          |64|128      , 100,  50, 125,   0,   "BlackBronze"             ,   "Black Bronze"                  ,    0,       0,         -1, 2000,  true, false,   4,   1,   1, Dyes.dyePurple      , 2, Arrays.asList(new MaterialStack(Gold, 1), new MaterialStack(Silver, 1), new MaterialStack(Copper, 3)));
@@ -769,27 +769,27 @@ public class MaterialsInit1 {
         Materials.TungstenSteel           = new Materials( 316, TextureSet.SET_METALLIC          ,   8.0F,   2560,  4, 1|2          |64|128      , 100, 100, 160,   0,   "TungstenSteel"           ,   "Tungstensteel"                 ,    0,       0,       4000, 4000,  true, false,   4,   1,   1, Dyes.dyeBlue        , 2, Arrays.asList(new MaterialStack(Steel, 1), new MaterialStack(Tungsten, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.NitroCoalFuel           = new Materials(  -1, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16                ,  50,  70,  50,   0,   "NitroCoalFuel"           ,   "Nitro-Coalfuel"                ,    0,      48,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 0, Arrays.asList(new MaterialStack(Glyceryl, 1), new MaterialStack(CoalFuel, 4)));
         Materials.NitroFuel               = new Materials( 709, TextureSet.SET_FLUID             ,   1.0F,      0,  2,         16                , 200, 255,   0,   0,   "NitroFuel"               ,   "Cetane-Boosted Diesel"         ,    0,    1000,         -1,    0, false, false,   1,   1,   1, Dyes.dyeLime        );
-        Materials.RedAlloy                = new Materials( 308, TextureSet.SET_DULL              ,   1.0F,      0,  0, 1|2                       , 200,   0,   0,   0,   "RedAlloy"                ,   "Red Alloy"                     ,    0,       0,        500,    0, false, false,   3,   5,   1, Dyes.dyeRed         , 2, Arrays.asList(new MaterialStack(Copper, 1), new MaterialStack(Redstone, 4)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 3)));
+        Materials.RedAlloy                = new Materials( 308, TextureSet.SET_DULL              ,   1.0F,      0,  0, 1|2                       , 200,   0,   0,   0,   "RedAlloy"                ,   "Red Alloy"                     ,    0,       0,        500,    0, false, false,   3,   5,   1, Dyes.dyeRed         , 2, Arrays.asList(new MaterialStack(Copper, 1), new MaterialStack(Redstone, 4)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.MACHINA, 3)));
         Materials.CobaltBrass             = new Materials( 343, TextureSet.SET_METALLIC          ,   8.0F,    256,  2, 1|2          |64|128      , 180, 180, 160,   0,   "CobaltBrass"             ,   "Cobalt Brass"                  ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeOrange      , 2, Arrays.asList(new MaterialStack(Brass, 7), new MaterialStack(Aluminium, 1), new MaterialStack(Cobalt, 1)));
         Materials.TricalciumPhosphate     = new Materials( 534, TextureSet.SET_FLINT             ,   1.0F,      0, 2,  1|4|8|16                  , 255, 255,   0,   0,   "TricalciumPhosphate"     ,   "Tricalcium Phosphate"          ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Calcium, 3), new MaterialStack(Phosphate, 2)));
-        Materials.Basalt                  = new Materials( 844, TextureSet.SET_ROUGH             ,   1.0F,     64,  1, 1            |64|128      ,  30,  20,  20,   0,   "Basalt"                  ,   "Basalt"                        ,    0,       0,         -1,    0, false, false,   2,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Olivine, 1), new MaterialStack(Calcite, 3), new MaterialStack(Flint, 8), new MaterialStack(DarkAsh, 4)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 1))).disableAutoGeneratedRecycleRecipes();
-        Materials.GarnetRed               = new Materials( 527, TextureSet.SET_RUBY              ,   7.0F,    128,  2, 1  |4|8      |64          , 200,  80,  80, 127,   "GarnetRed"               ,   "Red Garnet"                    ,    0,       0,         -1,    0, false,  true,   4,   1,   1, Dyes.dyeRed         , 2, Arrays.asList(new MaterialStack(Pyrope, 3), new MaterialStack(Almandine, 5), new MaterialStack(Spessartine, 8)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 3)));
-        Materials.GarnetYellow            = new Materials( 528, TextureSet.SET_RUBY              ,   7.0F,    128,  2, 1  |4|8      |64          , 200, 200,  80, 127,   "GarnetYellow"            ,   "Yellow Garnet"                 ,    0,       0,         -1,    0, false,  true,   4,   1,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Andradite, 5), new MaterialStack(Grossular, 8), new MaterialStack(Uvarovite, 3)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 3)));
-        Materials.Marble                  = new Materials( 845, TextureSet.SET_FINE              ,   1.0F,     16,  1, 1            |64|128      , 200, 200, 200,   0,   "Marble"                  ,   "Marble"                        ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 2, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Calcite, 7)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.PERFODIO, 1)));
-        Materials.Sugar                   = new Materials( 803, TextureSet.SET_FINE              ,   1.0F,      0,  1, 1                         , 250, 250, 250,   0,   "Sugar"                   ,   "Sugar"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 1, Arrays.asList(new MaterialStack(Carbon, 2), new MaterialStack(Water, 5), new MaterialStack(Oxygen, 25)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.HERBA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.AER, 1)));
-        Materials.Thaumium                = new Materials( 330, TextureSet.SET_METALLIC          ,  12.0F,    256,  3, 1|2          |64|128      , 150, 100, 200,   0,   "Thaumium"                ,   "Thaumium"                      ,    0,       0,         -1,    0, false, false,   5,   2,   1, Dyes.dyePurple      , 0, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Magic, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1)));
-        Materials.Vinteum                 = new Materials( 529, TextureSet.SET_METALLIC          ,  10.0F,    128,  3, 1|2|4|8      |64|128      , 100, 200, 255,   0,   "Vinteum"                 ,   "Vinteum"                       ,    5,      32,         -1,    0, false, false,   4,   1,   1, Dyes.dyeLightBlue   , 2, Collections.singletonList(new MaterialStack(Thaumium, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1)));
-        Materials.Vis                     = new Materials(  -1, TextureSet.SET_SHINY             ,   1.0F,      0,  3, 0                         , 128,   0, 255,   0,   "Vis"                     ,   "Vis"                           ,    5,      32,         -1,    0, false, false,   1,   1,   1, Dyes.dyePurple      , 2, Collections.singletonList(new MaterialStack(Magic, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.AURAM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1)));
+        Materials.Basalt                  = new Materials( 844, TextureSet.SET_ROUGH             ,   1.0F,     64,  1, 1            |64|128      ,  30,  20,  20,   0,   "Basalt"                  ,   "Basalt"                        ,    0,       0,         -1,    0, false, false,   2,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Olivine, 1), new MaterialStack(Calcite, 3), new MaterialStack(Flint, 8), new MaterialStack(DarkAsh, 4)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 1))).disableAutoGeneratedRecycleRecipes();
+        Materials.GarnetRed               = new Materials( 527, TextureSet.SET_RUBY              ,   7.0F,    128,  2, 1  |4|8      |64          , 200,  80,  80, 127,   "GarnetRed"               ,   "Red Garnet"                    ,    0,       0,         -1,    0, false,  true,   4,   1,   1, Dyes.dyeRed         , 2, Arrays.asList(new MaterialStack(Pyrope, 3), new MaterialStack(Almandine, 5), new MaterialStack(Spessartine, 8)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 3)));
+        Materials.GarnetYellow            = new Materials( 528, TextureSet.SET_RUBY              ,   7.0F,    128,  2, 1  |4|8      |64          , 200, 200,  80, 127,   "GarnetYellow"            ,   "Yellow Garnet"                 ,    0,       0,         -1,    0, false,  true,   4,   1,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(Andradite, 5), new MaterialStack(Grossular, 8), new MaterialStack(Uvarovite, 3)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 3)));
+        Materials.Marble                  = new Materials( 845, TextureSet.SET_FINE              ,   1.0F,     16,  1, 1            |64|128      , 200, 200, 200,   0,   "Marble"                  ,   "Marble"                        ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 2, Arrays.asList(new MaterialStack(Magnesium, 1), new MaterialStack(Calcite, 7)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.PERFODIO, 1)));
+        Materials.Sugar                   = new Materials( 803, TextureSet.SET_FINE              ,   1.0F,      0,  1, 1                         , 250, 250, 250,   0,   "Sugar"                   ,   "Sugar"                         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 1, Arrays.asList(new MaterialStack(Carbon, 2), new MaterialStack(Water, 5), new MaterialStack(Oxygen, 25)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.HERBA, 1), new TCAspects.TC_AspectStack(TCAspects.AQUA, 1), new TCAspects.TC_AspectStack(TCAspects.AER, 1)));
+        Materials.Thaumium                = new Materials( 330, TextureSet.SET_METALLIC          ,  12.0F,    256,  3, 1|2          |64|128      , 150, 100, 200,   0,   "Thaumium"                ,   "Thaumium"                      ,    0,       0,         -1,    0, false, false,   5,   2,   1, Dyes.dyePurple      , 0, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Magic, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1)));
+        Materials.Vinteum                 = new Materials( 529, TextureSet.SET_METALLIC          ,  10.0F,    128,  3, 1|2|4|8      |64|128      , 100, 200, 255,   0,   "Vinteum"                 ,   "Vinteum"                       ,    5,      32,         -1,    0, false, false,   4,   1,   1, Dyes.dyeLightBlue   , 2, Collections.singletonList(new MaterialStack(Thaumium, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 2), new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1)));
+        Materials.Vis                     = new Materials(  -1, TextureSet.SET_SHINY             ,   1.0F,      0,  3, 0                         , 128,   0, 255,   0,   "Vis"                     ,   "Vis"                           ,    5,      32,         -1,    0, false, false,   1,   1,   1, Dyes.dyePurple      , 2, Collections.singletonList(new MaterialStack(Magic, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.AURAM, 2), new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1)));
         Materials.Redrock                 = new Materials( 846, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1                         , 255,  80,  50,   0,   "Redrock"                 ,   "Redrock"                       ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeRed         , 2, Arrays.asList(new MaterialStack(Calcite, 2), new MaterialStack(Flint, 1), new MaterialStack(Clay, 1)));
         Materials.PotassiumFeldspar       = new Materials( 847, TextureSet.SET_FINE              ,   1.0F,      0,  1, 1                         , 120,  40,  40,   0,   "PotassiumFeldspar"       ,   "Potassium Feldspar"            ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyePink        , 0, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Aluminium, 1), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 8)));
         Materials.Biotite                 = new Materials( 848, TextureSet.SET_METALLIC          ,   1.0F,      0,  1, 1                         ,  20,  30,  20,   0,   "Biotite"                 ,   "Biotite"                       ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeGray        , 0, Arrays.asList(new MaterialStack(Potassium, 1), new MaterialStack(Magnesium, 3), new MaterialStack(Aluminium, 3), new MaterialStack(Fluorine, 2), new MaterialStack(Silicon, 3), new MaterialStack(Oxygen, 10)));
-        Materials.GraniteBlack            = new Materials( 849, TextureSet.SET_ROUGH             ,   4.0F,     64,  3, 1            |64|128      ,  10,  10,  10,   0,   "GraniteBlack"            ,   "Black Granite"                 ,    0,       0,         -1,    0, false, false,   0,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(SiliconDioxide, 4), new MaterialStack(Biotite, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1)));
-        Materials.GraniteRed              = new Materials( 850, TextureSet.SET_ROUGH             ,   4.0F,     64,  3, 1            |64|128      , 255,   0, 128,   0,   "GraniteRed"              ,   "Red Granite"                   ,    0,       0,         -1,    0, false, false,   0,   1,   1, Dyes.dyeMagenta     , 0, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(PotassiumFeldspar, 1), new MaterialStack(Oxygen, 3)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1)));
+        Materials.GraniteBlack            = new Materials( 849, TextureSet.SET_ROUGH             ,   4.0F,     64,  3, 1            |64|128      ,  10,  10,  10,   0,   "GraniteBlack"            ,   "Black Granite"                 ,    0,       0,         -1,    0, false, false,   0,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(SiliconDioxide, 4), new MaterialStack(Biotite, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 1)));
+        Materials.GraniteRed              = new Materials( 850, TextureSet.SET_ROUGH             ,   4.0F,     64,  3, 1            |64|128      , 255,   0, 128,   0,   "GraniteRed"              ,   "Red Granite"                   ,    0,       0,         -1,    0, false, false,   0,   1,   1, Dyes.dyeMagenta     , 0, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(PotassiumFeldspar, 1), new MaterialStack(Oxygen, 3)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 1)));
         Materials.Chrysotile              = new Materials( 912, TextureSet.SET_DULL              ,  32.0F,  10240,  3, 1|2  |8      |64|128      , 110, 140, 110,   0,   "Chrysotile"              ,   "Chrysotile"                    ,    0,       0,       9400, 9400,  true, false,   1,   1,   1, Dyes.dyeWhite       , 2, Collections.singletonList(new MaterialStack(Asbestos, 1))).disableAutoGeneratedBlastFurnaceRecipes().setTurbineMultipliers(280, 280, 1);
         Materials.Realgar                 = new Materials( 913, TextureSet.SET_DULL              ,   1.0F,     32,  1, 1|2  |8      |64|128      , 140, 100, 100,   0,   "Realgar"                 ,   "Realgar"                       ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 2, Arrays.asList(new MaterialStack(Arsenic, 4), new MaterialStack(Sulfur,4)));
-        Materials.VanadiumMagnetite       = new Materials( 923, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1    |8                   ,  35,  35,  60,   0,   "VanadiumMagnetite"       ,   "Vanadium Magnetite"            ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Magnetite, 1), new MaterialStack(Vanadium, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1))); // Mixture of Fe3O4 and V2O5
-        Materials.BasalticMineralSand     = new Materials( 935, TextureSet.SET_SAND              ,   1.0F,      0,  1, 1    |8                   ,  40,  50,  40,   0,   "BasalticMineralSand"     ,   "Basaltic Mineral Sand"         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Magnetite, 1), new MaterialStack(Basalt, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1)));
-        Materials.GraniticMineralSand     = new Materials( 936, TextureSet.SET_SAND              ,   1.0F,      0,  1, 1    |8                   ,  40,  60,  60,   0,   "GraniticMineralSand"     ,   "Granitic Mineral Sand"         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Magnetite, 1), new MaterialStack(GraniteBlack, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1)));
+        Materials.VanadiumMagnetite       = new Materials( 923, TextureSet.SET_METALLIC          ,   1.0F,      0,  2, 1    |8                   ,  35,  35,  60,   0,   "VanadiumMagnetite"       ,   "Vanadium Magnetite"            ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Magnetite, 1), new MaterialStack(Vanadium, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1))); // Mixture of Fe3O4 and V2O5
+        Materials.BasalticMineralSand     = new Materials( 935, TextureSet.SET_SAND              ,   1.0F,      0,  1, 1    |8                   ,  40,  50,  40,   0,   "BasalticMineralSand"     ,   "Basaltic Mineral Sand"         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Magnetite, 1), new MaterialStack(Basalt, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1)));
+        Materials.GraniticMineralSand     = new Materials( 936, TextureSet.SET_SAND              ,   1.0F,      0,  1, 1    |8                   ,  40,  60,  60,   0,   "GraniticMineralSand"     ,   "Granitic Mineral Sand"         ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Magnetite, 1), new MaterialStack(GraniteBlack, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1)));
         Materials.GarnetSand              = new Materials( 938, TextureSet.SET_SAND              ,   1.0F,      0,  1, 1    |8                   , 200, 100,   0,   0,   "GarnetSand"              ,   "Garnet Sand"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeOrange      , 2, Arrays.asList(new MaterialStack(GarnetRed, 1), new MaterialStack(GarnetYellow, 1)));
         Materials.QuartzSand              = new Materials( 939, TextureSet.SET_SAND              ,   1.0F,      0,  1, 1    |8                   , 194, 178, 128,   0,   "QuartzSand"              ,   "Quartz Sand"                   ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes.dyeWhite       , 2, Arrays.asList(new MaterialStack(CertusQuartz, 1), new MaterialStack(Quartzite, 1)));
         Materials.Bastnasite              = new Materials( 905, TextureSet.SET_FINE              ,   1.0F,      0,  2, 1    |8                   , 200, 110,  45,   0,   "Bastnasite"              ,   "Bastnasite"                    ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          , 1, Arrays.asList(new MaterialStack(Cerium, 1), new MaterialStack(Carbon, 1), new MaterialStack(Fluorine, 1), new MaterialStack(Oxygen, 3))); // (Ce, La, Y)CO3F
@@ -819,11 +819,11 @@ public class MaterialsInit1 {
         Materials.Kaolinite               = new Materials( 929, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1    |8                   , 245, 235, 235,   0,   "Kaolinite"               ,   "Kaolinite"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          , 0, Arrays.asList(new MaterialStack(Aluminium, 2), new MaterialStack(Silicon, 2), new MaterialStack(Hydrogen, 4), new MaterialStack(Oxygen, 9))); // Al2Si2O5(OH)4
         Materials.Talc                    = new Materials( 902, TextureSet.SET_DULL              ,   1.0F,      0,  2, 1    |8                   ,  90, 180,  90,   0,   "Talc"                    ,   "Talc"                          ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          , 1, Arrays.asList(new MaterialStack(Magnesium, 3), new MaterialStack(Silicon, 4), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 12))); // H2Mg3(SiO3)4
         Materials.Soapstone               = new Materials( 877, TextureSet.SET_DULL              ,   1.0F,      0,  1, 1    |8                   ,  95, 145,  95,   0,   "Soapstone"               ,   "Soapstone"                     ,    0,       0,         -1,    0, false, false,   1,   1,   1, Dyes._NULL          , 1, Arrays.asList(new MaterialStack(Magnesium, 3), new MaterialStack(Silicon, 4), new MaterialStack(Hydrogen, 2), new MaterialStack(Oxygen, 12))); // H2Mg3(SiO3)4
-        Materials.Concrete                = new Materials( 947, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1                         , 100, 100, 100,   0,   "Concrete"                ,   "Concrete"                      ,    0,       0,        300,    0, false, false,   0,   1,   1, Dyes.dyeGray        , 0, Collections.singletonList(new MaterialStack(Stone, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1)));
-        Materials.IronMagnetic            = new Materials( 354, TextureSet.SET_MAGNETIC          ,   6.0F,    256,  2, 1|2          |64|128      , 200, 200, 200,   0,   "IronMagnetic"            ,   "Magnetic Iron"                 ,    0,       0,         -1,    0, false, false,   4,  51,  50, Dyes.dyeGray        , 1, Collections.singletonList(new MaterialStack(Iron, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1)));
-        Materials.SteelMagnetic           = new Materials( 355, TextureSet.SET_MAGNETIC          ,   6.0F,    512,  3, 1|2          |64|128      , 128, 128, 128,   0,   "SteelMagnetic"           ,   "Magnetic Steel"                ,    0,       0,       1000, 1000,  true, false,   4,  51,  50, Dyes.dyeGray        , 1, Collections.singletonList(new MaterialStack(Steel, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1)));
-        Materials.NeodymiumMagnetic       = new Materials( 356, TextureSet.SET_MAGNETIC          ,   7.0F,    512,  2, 1|2          |64|128      , 100, 100, 100,   0,   "NeodymiumMagnetic"       ,   "Magnetic Neodymium"            ,    0,       0,       1297, 1297,  true, false,   4,  51,  50, Dyes.dyeGray        , 1, Collections.singletonList(new MaterialStack(Neodymium, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 3)));
-        Materials.SamariumMagnetic        = new Materials( 399, TextureSet.SET_MAGNETIC          ,   1.0F,      0,  2, 1|2          |64|128      , 255, 255, 204,   0,   "SamariumMagnetic"        ,   "Magnetic Samarium"             ,    0,       0,       1345, 1345,  true, false,   4,   1,   1, Dyes.dyeWhite       , 1, Collections.singletonList(new MaterialStack(Samarium, 1)),Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO,10)));
+        Materials.Concrete                = new Materials( 947, TextureSet.SET_ROUGH             ,   1.0F,      0,  1, 1                         , 100, 100, 100,   0,   "Concrete"                ,   "Concrete"                      ,    0,       0,        300,    0, false, false,   0,   1,   1, Dyes.dyeGray        , 0, Collections.singletonList(new MaterialStack(Stone, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.TERRA, 1)));
+        Materials.IronMagnetic            = new Materials( 354, TextureSet.SET_MAGNETIC          ,   6.0F,    256,  2, 1|2          |64|128      , 200, 200, 200,   0,   "IronMagnetic"            ,   "Magnetic Iron"                 ,    0,       0,         -1,    0, false, false,   4,  51,  50, Dyes.dyeGray        , 1, Collections.singletonList(new MaterialStack(Iron, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1)));
+        Materials.SteelMagnetic           = new Materials( 355, TextureSet.SET_MAGNETIC          ,   6.0F,    512,  3, 1|2          |64|128      , 128, 128, 128,   0,   "SteelMagnetic"           ,   "Magnetic Steel"                ,    0,       0,       1000, 1000,  true, false,   4,  51,  50, Dyes.dyeGray        , 1, Collections.singletonList(new MaterialStack(Steel, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1), new TCAspects.TC_AspectStack(TCAspects.ORDO, 1), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1)));
+        Materials.NeodymiumMagnetic       = new Materials( 356, TextureSet.SET_MAGNETIC          ,   7.0F,    512,  2, 1|2          |64|128      , 100, 100, 100,   0,   "NeodymiumMagnetic"       ,   "Magnetic Neodymium"            ,    0,       0,       1297, 1297,  true, false,   4,  51,  50, Dyes.dyeGray        , 1, Collections.singletonList(new MaterialStack(Neodymium, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 1), new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 3)));
+        Materials.SamariumMagnetic        = new Materials( 399, TextureSet.SET_MAGNETIC          ,   1.0F,      0,  2, 1|2          |64|128      , 255, 255, 204,   0,   "SamariumMagnetic"        ,   "Magnetic Samarium"             ,    0,       0,       1345, 1345,  true, false,   4,   1,   1, Dyes.dyeWhite       , 1, Collections.singletonList(new MaterialStack(Samarium, 1)),Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.RADIO, 1), new TCAspects.TC_AspectStack(TCAspects.MAGNETO,10)));
         Materials.TungstenCarbide         = new Materials( 370, TextureSet.SET_METALLIC          ,  14.0F,   1280,  4, 1|2          |64|128      ,  51,   0, 102,   0,   "TungstenCarbide"         ,   "Tungstencarbide"               ,    0,       0,       2460, 2460,  true, false,   4,   1,   1, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Tungsten, 1), new MaterialStack(Carbon, 1))).disableAutoGeneratedVacuumFreezerRecipe();
         Materials.VanadiumSteel           = new Materials( 371, TextureSet.SET_METALLIC          ,   3.0F,   1920,  3, 1|2          |64|128      , 192, 192, 192,   0,   "VanadiumSteel"           ,   "Vanadiumsteel"                 ,    0,       0,       1453, 1453,  true, false,   4,   1,   1, Dyes.dyeWhite       , 2, Arrays.asList(new MaterialStack(Vanadium, 1), new MaterialStack(Chrome, 1), new MaterialStack(Steel, 7))).disableAutoGeneratedBlastFurnaceRecipes();
         Materials.HSSG                    = new Materials( 372, TextureSet.SET_METALLIC          ,  10.0F,   4000,  3, 1|2          |64|128      , 153, 153,   0,   0,   "HSSG"                    ,   "HSS-G"                         ,    0,       0,       4500, 4500,  true, false,   4,   1,   1, Dyes.dyeYellow      , 2, Arrays.asList(new MaterialStack(TungstenSteel, 5), new MaterialStack(Chrome, 1), new MaterialStack(Molybdenum, 2), new MaterialStack(Vanadium, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
@@ -831,11 +831,11 @@ public class MaterialsInit1 {
         Materials.HSSS                    = new Materials( 374, TextureSet.SET_METALLIC          ,  32.0F,  10240,  8, 1|2          |64|128      , 102,   0,  51,   0,   "HSSS"                    ,   "HSS-S"                         ,    0,       0,       5400, 5400,  true, false,   4,   1,   1, Dyes.dyeRed         , 2, Arrays.asList(new MaterialStack(HSSG, 6), new MaterialStack(Iridium, 2), new MaterialStack(Osmium, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.TPV                     = new Materials( 576, TextureSet.SET_METALLIC          ,  16.0F,   4000,  5, 1|2          |64|128      , 250,  170,250,   0,   "TPVAlloy"                ,   "TPV-Alloy"                     ,    0,       0,       3000, 3000,  true, false,   4,   1,   1, Dyes.dyeRed         , 2, Arrays.asList(new MaterialStack(Titanium, 3), new MaterialStack(Platinum, 3), new MaterialStack(Vanadium, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.DilutedSulfuricAcid     = new MaterialBuilder(640, TextureSet.SET_FLUID             ,                                                                                                     "Diluted Sulfuric Acid").addCell().addFluid().setRGB(192, 120, 32).setColor(Dyes.dyeOrange).setMaterialList(new MaterialStack(SulfuricAcid, 1)).constructMaterial();
-        Materials.EpoxidFiberReinforced   = new Materials( 610, TextureSet.SET_DULL                 ,3.0F,     64,  1, 1|2          |64|128      , 160, 112,  16,   0,   "EpoxidFiberReinforced"   ,   "Fiber-Reinforced Epoxy Resin"  ,    0,       0,        400,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , 2, Collections.singletonList(new MaterialStack(Epoxid, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.MOTUS, 2)));
+        Materials.EpoxidFiberReinforced   = new Materials( 610, TextureSet.SET_DULL                 ,3.0F,     64,  1, 1|2          |64|128      , 160, 112,  16,   0,   "EpoxidFiberReinforced"   ,   "Fiber-Reinforced Epoxy Resin"  ,    0,       0,        400,    0, false, false,   1,   1,   1, Dyes.dyeBrown       , 2, Collections.singletonList(new MaterialStack(Epoxid, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.MOTUS, 2)));
         Materials.SodiumCarbonate         = new MaterialBuilder(695, TextureSet.SET_QUARTZ, "Sodium Carbonate").setToolSpeed(1.0F).setDurability(64).setToolQuality(1).addDustItems().setRGB(255, 255, 235).setColor(Dyes.dyeWhite).setBlastFurnaceTemp(851 ).setMeltingPoint(851 ).setBlastFurnaceRequired(false).setOreValue(1).setExtraData(1).setMaterialList(new MaterialStack(Sodium, 2), new MaterialStack(Carbon, 1), new MaterialStack(Oxygen, 3)).constructMaterial().disableAutoGeneratedBlastFurnaceRecipes();
         Materials.SodiumAluminate         = new MaterialBuilder(696, TextureSet.SET_QUARTZ, "Sodium Aluminate").setToolSpeed(1.0F).setDurability(64).setToolQuality(1).addDustItems().setRGB(255, 235, 255).setColor(Dyes.dyeWhite).setBlastFurnaceTemp(1800).setMeltingPoint(1800).setBlastFurnaceRequired(false).setOreValue(1).setExtraData(0).setMaterialList(new MaterialStack(Sodium, 1), new MaterialStack(Aluminium, 1), new MaterialStack(Oxygen, 2)).constructMaterial().disableAutoGeneratedBlastFurnaceRecipes();
-        Materials.Aluminiumoxide          = new MaterialBuilder(697, TextureSet.SET_QUARTZ, "Alumina").setToolSpeed(1.0F).setDurability(64).setToolQuality(1).addDustItems().setRGB(235, 255, 255).setColor(Dyes.dyeWhite).setBlastFurnaceTemp(2054).setMeltingPoint(2054).setBlastFurnaceRequired(true).setOreValue(1).setExtraData(0).setMaterialList(new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 3)).setAspects(Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 2))).constructMaterial().disableAutoGeneratedBlastFurnaceRecipes();
-        Materials.Aluminiumhydroxide      = new MaterialBuilder(698, TextureSet.SET_QUARTZ, "Aluminium Hydroxide").setToolSpeed(1.0F).setDurability(64).setToolQuality(1).addDustItems().setRGB(235, 235, 255).setColor(Dyes.dyeWhite).setBlastFurnaceTemp(1200).setMeltingPoint(1200).setBlastFurnaceRequired(true).setOreValue(1).setExtraData(0).setMaterialList(new MaterialStack(Aluminium, 1), new MaterialStack(Oxygen, 3),  new MaterialStack(Hydrogen, 3)).setAspects(Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 2))).constructMaterial().disableAutoGeneratedBlastFurnaceRecipes();
+        Materials.Aluminiumoxide          = new MaterialBuilder(697, TextureSet.SET_QUARTZ, "Alumina").setToolSpeed(1.0F).setDurability(64).setToolQuality(1).addDustItems().setRGB(235, 255, 255).setColor(Dyes.dyeWhite).setBlastFurnaceTemp(2054).setMeltingPoint(2054).setBlastFurnaceRequired(true).setOreValue(1).setExtraData(0).setMaterialList(new MaterialStack(Aluminium, 2), new MaterialStack(Oxygen, 3)).setAspects(Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.GELUM, 2))).constructMaterial().disableAutoGeneratedBlastFurnaceRecipes();
+        Materials.Aluminiumhydroxide      = new MaterialBuilder(698, TextureSet.SET_QUARTZ, "Aluminium Hydroxide").setToolSpeed(1.0F).setDurability(64).setToolQuality(1).addDustItems().setRGB(235, 235, 255).setColor(Dyes.dyeWhite).setBlastFurnaceTemp(1200).setMeltingPoint(1200).setBlastFurnaceRequired(true).setOreValue(1).setExtraData(0).setMaterialList(new MaterialStack(Aluminium, 1), new MaterialStack(Oxygen, 3),  new MaterialStack(Hydrogen, 3)).setAspects(Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.GELUM, 2))).constructMaterial().disableAutoGeneratedBlastFurnaceRecipes();
         Materials.Cryolite                = new MaterialBuilder(699, TextureSet.SET_QUARTZ, "Cryolite").setToolSpeed(1.0F).setDurability(64).setToolQuality(1).addOreItems().setRGB(191, 239, 255).setColor(Dyes.dyeLightBlue).setMeltingPoint(1012).setBlastFurnaceTemp(1012).setExtraData(0).setMaterialList(new MaterialStack(Sodium, 3), new MaterialStack(Aluminium, 1), new MaterialStack(Fluorine, 6)).constructMaterial().disableAutoGeneratedBlastFurnaceRecipes();
         Materials.RedMud                  = new MaterialBuilder(743, TextureSet.SET_FLUID, "Red Mud").addCell().addFluid().setRGB(140, 22, 22).setColor(Dyes.dyeRed).constructMaterial();
 
@@ -851,7 +851,7 @@ public class MaterialsInit1 {
         Materials.Dichlorobenzidine = new MaterialBuilder(596, TextureSet.SET_FLUID             ,                                                                                                     "3,3-Dichlorobenzidine").addCell().addFluid().setRGB(161, 222, 166).setColor(Dyes.dyeOrange).setMaterialList(new MaterialStack(Carbon, 12),new MaterialStack(Hydrogen, 10), new MaterialStack(Nitrogen, 2), new MaterialStack(Chlorine, 2)).constructMaterial();
         Materials.Diaminobenzidin = new MaterialBuilder(597, TextureSet.SET_FLUID             ,                                                                                                     "3,3-Diaminobenzidine").addCell().addFluid().setRGB(51, 125, 89).setColor(Dyes.dyeOrange).setMaterialList(new MaterialStack(Carbon, 12),new MaterialStack(Hydrogen, 14),new MaterialStack(Nitrogen, 4)).constructMaterial();
         Materials.Diphenylisophthalate = new MaterialBuilder(598, TextureSet.SET_FLUID             ,                                                                                                     "Diphenyl Isophtalate").addCell().addFluid().setRGB(36, 110, 87).setColor(Dyes.dyeOrange).setMaterialList(new MaterialStack(Carbon, 20),new MaterialStack(Hydrogen, 14),new MaterialStack(Oxygen, 4)).constructMaterial();
-        Materials.Polybenzimidazole   = new Materials(599, TextureSet.SET_DULL                 ,3.0F,     64,  1, 1|2          |64|128      , 45, 45,  45,   0,   "Polybenzimidazole"   ,   "Polybenzimidazole"  ,    0,       0,        1450,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 0, Arrays.asList(new MaterialStack(Carbon, 20), new MaterialStack(Nitrogen, 4), new MaterialStack(Hydrogen, 12)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2),new TC_Aspects.TC_AspectStack(TC_Aspects.VOLATUS, 1)));
+        Materials.Polybenzimidazole   = new Materials(599, TextureSet.SET_DULL                 ,3.0F,     64,  1, 1|2          |64|128      , 45, 45,  45,   0,   "Polybenzimidazole"   ,   "Polybenzimidazole"  ,    0,       0,        1450,    0, false, false,   1,   1,   1, Dyes.dyeBlack       , 0, Arrays.asList(new MaterialStack(Carbon, 20), new MaterialStack(Nitrogen, 4), new MaterialStack(Hydrogen, 12)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.ORDO, 2),new TCAspects.TC_AspectStack(TCAspects.VOLATUS, 1)));
 
         Materials.MTBEMixture        = new MaterialBuilder(983, TextureSet.SET_FLUID             ,                                                                                                      "MTBE Reaction Mixture (Butene)").addCell().addGas().setRGB(255, 255, 255).setColor(Dyes.dyeWhite).setMaterialList(new MaterialStack(Carbon, 5), new MaterialStack(Hydrogen, 12), new MaterialStack(Oxygen, 1)).constructMaterial();
         Materials.MTBEMixtureAlt = new MaterialBuilder(425, TextureSet.SET_FLUID , "MTBE Reaction Mixture (Butane)").addCell().addGas().setRGB(255, 255, 255).setColor(Dyes.dyeWhite).setMaterialList(new MaterialStack(Carbon, 5), new MaterialStack(Hydrogen, 14), new MaterialStack(Oxygen, 1)).constructMaterial();
@@ -862,10 +862,10 @@ public class MaterialsInit1 {
         Materials.GasolineRegular    = new MaterialBuilder(997, TextureSet.SET_FLUID             ,                                                                                                      "Gasoline").addCell().addFluid().setRGB(255,165,0).setColor(Dyes.dyeOrange).setFuelType(MaterialBuilder.DIESEL).setFuelPower(576).constructMaterial();
         Materials.GasolinePremium    = new MaterialBuilder(998, TextureSet.SET_FLUID             ,                                                                                                      "High Octane Gasoline").addCell().addFluid().setRGB(255,165,0).setColor(Dyes.dyeOrange).setFuelType(MaterialBuilder.DIESEL).setFuelPower(2500).constructMaterial();
 
-        Materials.Electrotine             = new Materials( 812, TextureSet.SET_SHINY             ,   1.0F,      0,  1, 1    |8                   ,  60, 180, 200,   0,   "Electrotine"             ,   "Electrotine"                   ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeCyan        , 0, Arrays.asList(new MaterialStack(Redstone, 1), new MaterialStack(Electrum, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2)));
+        Materials.Electrotine             = new Materials( 812, TextureSet.SET_SHINY             ,   1.0F,      0,  1, 1    |8                   ,  60, 180, 200,   0,   "Electrotine"             ,   "Electrotine"                   ,    0,       0,         -1,    0, false, false,   3,   1,   1, Dyes.dyeCyan        , 0, Arrays.asList(new MaterialStack(Redstone, 1), new MaterialStack(Electrum, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2)));
         Materials.Galgadorian             = new Materials( 384, TextureSet.SET_METALLIC          ,  16.0F,   3600,  3, 1|2          |64|128      , 154, 105, 119,   0,   "Galgadorian"             ,   "Galgadorian"                   ,    0,       0,       3000, 3000,  true, false,   1,   1,   1, Dyes.dyePink        ).disableAutoGeneratedBlastFurnaceRecipes();
         Materials.EnhancedGalgadorian     = new Materials( 385, TextureSet.SET_METALLIC          ,  32.0F,   7200,  5, 1|2|          64|128      , 152, 93, 133,    0,   "EnhancedGalgadorian"     ,   "Enhanced Galgadorian"          ,    0,       0,       4500, 4500,  true, false,   1,   1,   1, Dyes.dyePink        ).disableAutoGeneratedBlastFurnaceRecipes();
-        Materials.BloodInfusedIron        = new Materials( 977, TextureSet.SET_METALLIC          ,  10.0F,    384,  2, 1|2          |64|128      ,  69,   9,  10,   0,   "BloodInfusedIron"        ,   "Blood Infused Iron"            ,    0,       0,       2400,    0, false, false,   3,   1,   1, Dyes.dyeRed         , Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 3),  new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 1)));
+        Materials.BloodInfusedIron        = new Materials( 977, TextureSet.SET_METALLIC          ,  10.0F,    384,  2, 1|2          |64|128      ,  69,   9,  10,   0,   "BloodInfusedIron"        ,   "Blood Infused Iron"            ,    0,       0,       2400,    0, false, false,   3,   1,   1, Dyes.dyeRed         , Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 3),  new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 1)));
         Materials.Shadow                  = new Materials( 368, TextureSet.SET_METALLIC          ,  32.0F,   8192,  4, 1|2  |8      |64|128      ,  16,   3,  66,   0,   "Shadow"                  ,   "Shadow Metal"                  ,    0,       0,       1800, 1800,  true, false,   3,   4,   3, Dyes.dyeBlue        );
 
         Materials.Ledox                   = new Materials( 390, TextureSet.SET_SHINY             ,  15.0F,   1024,  4, 1|2  |8      |64|128      ,   0, 116, 255,   0,   "Ledox"                   ,   "Ledox"                         ,     0,       0,        -1,    0, false, false,  4,   1,   1, Dyes.dyeBlue         );
@@ -874,7 +874,7 @@ public class MaterialsInit1 {
         Materials.BlackPlutonium          = new Materials( 388, TextureSet.SET_DULL              ,  36.0F,   8192,  8, 1|2  |8      |64|128      ,  50,  50,  50,   0,   "BlackPlutonium"          ,   "Black Plutonium"               ,     0,       0,     9000,  9000,  true, false,  4,   1,   1, Dyes.dyeBlack        ).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.CallistoIce             = new Materials( 389, TextureSet.SET_SHINY             ,   9.0F,   1024,  4, 1|2  |8      |64|128      ,  30, 177, 255,   0,   "CallistoIce"             ,   "Callisto Ice"                  ,     0,       0,       -1,     0, false, false,  4,   1,   1, Dyes.dyeLightBlue    );
         Materials.Duralumin               = new Materials( 392, TextureSet.SET_SHINY             ,  16.0F,    512,  3, 1|2  |8      |64|128      , 235, 209, 160,   0,   "Duralumin"               ,   "Duralumin"                     ,     0,       0,     1600,  1600,  true, false,  4,   1,   1, Dyes.dyeOrange       , 2, Arrays.asList(new MaterialStack(Aluminium, 6), new MaterialStack(Copper, 1), new MaterialStack(Manganese, 1), new MaterialStack(Magnesium, 1)));
-        Materials.Oriharukon              = new Materials( 393, TextureSet.SET_SHINY             ,  32.0F,  10240,  5, 1|2  |8   |32|64|128      , 103, 125, 104,   0,   "Oriharukon"              ,   "Oriharukon"                    ,     0,       0,     5400,  5400,  true, false,  4,   1,   1, Dyes.dyeLime         , Element.Oh, Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2),new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Oriharukon              = new Materials( 393, TextureSet.SET_SHINY             ,  32.0F,  10240,  5, 1|2  |8   |32|64|128      , 103, 125, 104,   0,   "Oriharukon"              ,   "Oriharukon"                    ,     0,       0,     5400,  5400,  true, false,  4,   1,   1, Dyes.dyeLime         , Element.Oh, Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2),new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 2), new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.MysteriousCrystal       = new Materials( 398, TextureSet.SET_SHINY             ,   8.0F,    256,  6, 1|2  |8      |64|128      ,  22, 133, 108,   0,   "MysteriousCrystal"       ,   "Mysterious Crystal"            ,     0,       0,     7200,  7200,  true, false,  4,   1,   1, Dyes.dyeCyan         ).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
 
         Materials.RedstoneAlloy           = new Materials( 381, TextureSet.SET_METALLIC          ,   3.0F,    128,  2, 1|2          |64|128      , 181,  51,  51,   0,   "RedstoneAlloy"           ,   "Redstone Alloy"                ,    0,       0,        671, 1000,  true, false,   1,   1,   1, Dyes.dyeRed         , 1, Arrays.asList(new MaterialStack(Redstone, 1), new MaterialStack(Silicon, 1), new MaterialStack(Coal, 1))).disableAutoGeneratedBlastFurnaceRecipes();
@@ -893,9 +893,9 @@ public class MaterialsInit1 {
         Materials.CrystallinePinkSlime    = new Materials( 406, TextureSet.SET_METALLIC          ,   6.0F,    128,  3, 1|2          |64|128      , 231, 158, 219,   0,   "CrystallinePinkSlime"    ,   "Crystalline Pink Slime"        ,    0,       0,       5000, 5000,  true, false,   4,   1,   1, Dyes.dyePink        , 1, Arrays.asList(new MaterialStack(CrystallineAlloy, 1), new MaterialStack(Diamond, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.EnergeticSilver         = new Materials( 407, TextureSet.SET_METALLIC          ,   8.0F,    512,  3, 1|2          |64|128      , 149, 183, 205,   0,   "EnergeticSilver"         ,   "Energetic Silver"              ,    0,       0,         -1, 2200,  true, false,   4,   1,   1, Dyes.dyeLightBlue   , 1, Arrays.asList(new MaterialStack(Silver, 1), new MaterialStack(ConductiveIron, 1), new MaterialStack(BlackSteel, 1))).disableAutoGeneratedBlastFurnaceRecipes();
         Materials.VividAlloy              = new Materials( 408, TextureSet.SET_METALLIC          ,  12.0F,    768,  4, 1|2          |64|128      ,  70, 188, 219,   0,   "VividAlloy"              ,   "Vivid Alloy"                   ,    0,       0,       3300, 3300,  true, false,   4,   1,   1, Dyes.dyeBlue        , 1, Arrays.asList(new MaterialStack(EnergeticSilver, 1), new MaterialStack(EnderEye, 1), new MaterialStack(Chrome, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Enderium                = new Materials( 321, TextureSet.SET_DULL              ,   8.0F,   1500,  3, 1|2          |64|128      ,  89, 145, 135,   0,   "Enderium"                ,   "Enderium"                      ,    0,       0,       4500, 4500,  true, false,   1,   1,   1, Dyes.dyeGreen       , 1, Arrays.asList(new MaterialStack(EnderiumBase, 2), new MaterialStack(Thaumium, 1), new MaterialStack(EnderPearl, 1)), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Enderium                = new Materials( 321, TextureSet.SET_DULL              ,   8.0F,   1500,  3, 1|2          |64|128      ,  89, 145, 135,   0,   "Enderium"                ,   "Enderium"                      ,    0,       0,       4500, 4500,  true, false,   1,   1,   1, Dyes.dyeGreen       , 1, Arrays.asList(new MaterialStack(EnderiumBase, 2), new MaterialStack(Thaumium, 1), new MaterialStack(EnderPearl, 1)), Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2), new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 1))).disableAutoGeneratedBlastFurnaceRecipes().disableAutoGeneratedVacuumFreezerRecipe();
         Materials.Mithril                 = new Materials( 331, TextureSet.SET_SHINY             ,  32.0F,     64,  2, 1|2  |8      |64          , 255, 255, 210,   0,   "Mithril"                 ,   "Mithril"                       ,    0,       0,       6600, 6600,  true, false,   4,   3,   2, Dyes.dyeLightBlue   , 2, Arrays.asList(new MaterialStack(Platinum, 2), new MaterialStack(Thaumium, 1))).disableAutoGeneratedBlastFurnaceRecipes().setTurbineMultipliers(22, 1, 1);
-        Materials.BlueAlloy               = new Materials( 309, TextureSet.SET_DULL              ,   1.0F,      0,  0, 1|2                       , 100, 180, 255,   0,   "BlueAlloy"               ,   "Blue Alloy"                    ,    0,       0,         -1,    0, false, false,   3,   5,   1, Dyes.dyeLightBlue   , 2, Arrays.asList(new MaterialStack(Silver, 1), new MaterialStack(Electrotine, 4)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 3)));
+        Materials.BlueAlloy               = new Materials( 309, TextureSet.SET_DULL              ,   1.0F,      0,  0, 1|2                       , 100, 180, 255,   0,   "BlueAlloy"               ,   "Blue Alloy"                    ,    0,       0,         -1,    0, false, false,   3,   5,   1, Dyes.dyeLightBlue   , 2, Arrays.asList(new MaterialStack(Silver, 1), new MaterialStack(Electrotine, 4)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 3)));
         Materials.ShadowIron              = new Materials( 336, TextureSet.SET_METALLIC          ,  32.0F,  10240,  2, 1|2  |8      |64          , 120, 120, 120,   0,   "ShadowIron"              ,   "Shadow Iron"                   ,    0,       0,       8400, 8400,  true, false,   3,   4,   3, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Iron, 1), new MaterialStack(Thaumium, 3))).disableAutoGeneratedBlastFurnaceRecipes().setTurbineMultipliers(1, 76, 1);
         Materials.ShadowSteel             = new Materials( 337, TextureSet.SET_METALLIC          ,   6.0F,    768,  4, 1|2          |64          ,  90,  90,  90,   0,   "ShadowSteel"             ,   "Shadow Steel"                  ,    0,       0,         -1, 1700,  true, false,   4,   4,   3, Dyes.dyeBlack       , 2, Arrays.asList(new MaterialStack(Steel, 1), new MaterialStack(Thaumium, 3)));
         Materials.AstralSilver            = new Materials( 333, TextureSet.SET_SHINY             ,  10.0F,     64,  2, 1|2          |64          , 230, 230, 255,   0,   "AstralSilver"            ,   "Astral Silver"                 ,    0,       0,         -1,    0, false, false,   4,   3,   2, Dyes.dyeWhite       , 2, Arrays.asList(new MaterialStack(Silver, 2), new MaterialStack(Thaumium, 1)));
@@ -907,37 +907,37 @@ public class MaterialsInit1 {
         Materials.Ichorium                = new Materials( 978, TextureSet.SET_SHINY             ,  32.0F, 850000,  12, 1|2    |8 |32|64|128      , 211, 120,   6,   0,   "Ichorium"                ,   "Ichorium"                      ,     5,  250000,      9000,   9000,  true, false,  4,   1,   1, Dyes.dyeOrange       ).setTurbineMultipliers(6, 6, 3).setHasCorrespondingPlasma(true);
         Materials.CosmicNeutronium        = new Materials( 982, TextureSet.SET_SHINY             ,  96.0F, 163840,  12, 1|2    |8 |32|64|128      ,  50,  50,  50,   0,   "CosmicNeutronium"        ,   "Cosmic Neutronium"             ,     0,       0,      9900,   9900,  true, false,  4,   1,   1, Dyes.dyeBlack        ).setProcessingMaterialTierEU(TierEU.RECIPE_ZPM).disableAutoGeneratedVacuumFreezerRecipe().setHasCorrespondingPlasma(true);
 
-        Materials.Pentacadmiummagnesiumhexaoxid                                   = new Materials( 987, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  85, 85,  85,   0,   "Pentacadmiummagnesiumhexaoxid"                                 ,   "Superconductor Base MV"       ,     0,       0,     2500,  2500,  true,  false,  1,   1,   1, Dyes.dyeGray       , 1, Arrays.asList(new MaterialStack(Cadmium, 5), new MaterialStack(Magnesium, 1), new MaterialStack(Oxygen, 6)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 3))).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Titaniumonabariumdecacoppereikosaoxid                           = new Materials( 988, TextureSet.SET_METALLIC       ,   1.0F,      0,  3, 1|2                ,  51, 25,   0,   0,   "Titaniumonabariumdecacoppereikosaoxid"                         ,   "Superconductor Base HV"       ,     0,       0,     3300,  3300,  true,  false,  1,   1,   1, Dyes.dyeBrown      , 1, Arrays.asList(new MaterialStack(Titanium, 1), new MaterialStack(Barium, 9),  new MaterialStack(Copper, 10), new MaterialStack(Oxygen, 20)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 6))).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Uraniumtriplatinid                                              = new Materials( 989, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,   0,135,   0,   0,   "Uraniumtriplatinid"                                            ,   "Superconductor Base EV"       ,     0,       0,     4400,  4400,  true,  false,  1,   1,   1, Dyes.dyeLime       , 1, Arrays.asList(new MaterialStack(Uranium, 1), new MaterialStack(Platinum, 3)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 9))).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Vanadiumtriindinid                                              = new Materials( 990, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  51,  0,  51,   0,   "Vanadiumtriindinid"                                            ,   "Superconductor Base IV"       ,     0,       0,     5200,  5200,  true,  false,  1,   1,   1, Dyes.dyeMagenta    , 1, Arrays.asList(new MaterialStack(Vanadium , 1), new MaterialStack(Indium, 3)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 12))).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid     = new Materials( 991, TextureSet.SET_METALLIC       ,   1.0F,      0,  3, 1|2                , 153, 76,   0,   0,   "Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid"   ,   "Superconductor Base LuV"      ,     0,       0,     6000,  6000,  true,  false,  1,   1,   1, Dyes.dyeBrown      , 1, Arrays.asList(new MaterialStack(Indium, 4), new MaterialStack(Tin, 2), new MaterialStack(Barium, 2), new MaterialStack(Titanium, 1), new MaterialStack(Copper, 7), new MaterialStack(Oxygen, 14)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 15))).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Tetranaquadahdiindiumhexaplatiumosminid                         = new Materials( 992, TextureSet.SET_METALLIC       ,   1.0F,      0,  3, 1|2                ,  10, 10,  10,   0,   "Tetranaquadahdiindiumhexaplatiumosminid"                       ,   "Superconductor Base ZPM"      ,     0,       0,     9000,  9000,  true,  false,  1,   1,   1, Dyes.dyeBlack      , 1, Arrays.asList(new MaterialStack(Naquadah, 4), new MaterialStack(Indium, 2), new MaterialStack(Palladium, 6), new MaterialStack(Osmium, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 18))).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Longasssuperconductornameforuvwire                              = new Materials( 986, TextureSet.SET_METALLIC       ,   1.0F,      0,  3, 1|2                , 224,210,   7,   0,   "Longasssuperconductornameforuvwire"                            ,   "Superconductor Base UV"       ,     0,       0,     9900,  9900,  true,  false,  1,   1,   1, Dyes.dyeYellow     , 1, Arrays.asList(new MaterialStack(Naquadria, 4), new MaterialStack(Osmiridium, 3), new MaterialStack(Europium, 1), new MaterialStack(Samarium, 1)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 21))).setProcessingMaterialTierEU(TierEU.RECIPE_LuV).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.Longasssuperconductornameforuhvwire                             = new Materials( 985, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  38,129, 189,   0,   "Longasssuperconductornameforuhvwire"                           ,   "Superconductor Base UHV"      ,     0,       0,     10800,  10800,  true,  false,  1,   1,   1, Dyes.dyeWhite      , 1, Arrays.asList(new MaterialStack(Draconium, 6), new MaterialStack(CosmicNeutronium, 7), new MaterialStack(Tritanium, 5), new MaterialStack(Americium, 6)), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 24))).setProcessingMaterialTierEU(TierEU.RECIPE_ZPM).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.SuperconductorUEVBase                                           = new Materials( 974, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  174, 8,   8,   0,   "SuperconductorUEVBase"                                         ,   "Superconductor Base UEV"      ,     0,       0,     11700,  11800,  true,  false,  1,   1,   1, Dyes.dyeWhite, Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 27))).setProcessingMaterialTierEU(TierEU.RECIPE_UV).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.SuperconductorUIVBase                                           = new Materials( 131, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  229, 88,   177,   0,   "SuperconductorUIVBase"                                         ,   "Superconductor Base UIV"      ,     0,       0,     12700,  12700,  true,  false,  1,   1,   1, Dyes.dyeWhite, Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 34))).setProcessingMaterialTierEU(TierEU.RECIPE_UHV).disableAutoGeneratedVacuumFreezerRecipe();
-        Materials.SuperconductorUMVBase                                           = new Materials( 134, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  181, 38,   205,   0,   "SuperconductorUMVBase"                                         ,   "Superconductor Base UMV"      ,     0,       0,     13600,  13600,  true,  false,  1,   1,   1, Dyes.dyeWhite, Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 40))).setProcessingMaterialTierEU(TierEU.RECIPE_UEV).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Pentacadmiummagnesiumhexaoxid                                   = new Materials( 987, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  85, 85,  85,   0,   "Pentacadmiummagnesiumhexaoxid"                                 ,   "Superconductor Base MV"       ,     0,       0,     2500,  2500,  true,  false,  1,   1,   1, Dyes.dyeGray       , 1, Arrays.asList(new MaterialStack(Cadmium, 5), new MaterialStack(Magnesium, 1), new MaterialStack(Oxygen, 6)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 3))).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Titaniumonabariumdecacoppereikosaoxid                           = new Materials( 988, TextureSet.SET_METALLIC       ,   1.0F,      0,  3, 1|2                ,  51, 25,   0,   0,   "Titaniumonabariumdecacoppereikosaoxid"                         ,   "Superconductor Base HV"       ,     0,       0,     3300,  3300,  true,  false,  1,   1,   1, Dyes.dyeBrown      , 1, Arrays.asList(new MaterialStack(Titanium, 1), new MaterialStack(Barium, 9),  new MaterialStack(Copper, 10), new MaterialStack(Oxygen, 20)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 6))).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Uraniumtriplatinid                                              = new Materials( 989, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,   0,135,   0,   0,   "Uraniumtriplatinid"                                            ,   "Superconductor Base EV"       ,     0,       0,     4400,  4400,  true,  false,  1,   1,   1, Dyes.dyeLime       , 1, Arrays.asList(new MaterialStack(Uranium, 1), new MaterialStack(Platinum, 3)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 9))).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Vanadiumtriindinid                                              = new Materials( 990, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  51,  0,  51,   0,   "Vanadiumtriindinid"                                            ,   "Superconductor Base IV"       ,     0,       0,     5200,  5200,  true,  false,  1,   1,   1, Dyes.dyeMagenta    , 1, Arrays.asList(new MaterialStack(Vanadium , 1), new MaterialStack(Indium, 3)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 12))).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid     = new Materials( 991, TextureSet.SET_METALLIC       ,   1.0F,      0,  3, 1|2                , 153, 76,   0,   0,   "Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid"   ,   "Superconductor Base LuV"      ,     0,       0,     6000,  6000,  true,  false,  1,   1,   1, Dyes.dyeBrown      , 1, Arrays.asList(new MaterialStack(Indium, 4), new MaterialStack(Tin, 2), new MaterialStack(Barium, 2), new MaterialStack(Titanium, 1), new MaterialStack(Copper, 7), new MaterialStack(Oxygen, 14)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 15))).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Tetranaquadahdiindiumhexaplatiumosminid                         = new Materials( 992, TextureSet.SET_METALLIC       ,   1.0F,      0,  3, 1|2                ,  10, 10,  10,   0,   "Tetranaquadahdiindiumhexaplatiumosminid"                       ,   "Superconductor Base ZPM"      ,     0,       0,     9000,  9000,  true,  false,  1,   1,   1, Dyes.dyeBlack      , 1, Arrays.asList(new MaterialStack(Naquadah, 4), new MaterialStack(Indium, 2), new MaterialStack(Palladium, 6), new MaterialStack(Osmium, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 18))).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Longasssuperconductornameforuvwire                              = new Materials( 986, TextureSet.SET_METALLIC       ,   1.0F,      0,  3, 1|2                , 224,210,   7,   0,   "Longasssuperconductornameforuvwire"                            ,   "Superconductor Base UV"       ,     0,       0,     9900,  9900,  true,  false,  1,   1,   1, Dyes.dyeYellow     , 1, Arrays.asList(new MaterialStack(Naquadria, 4), new MaterialStack(Osmiridium, 3), new MaterialStack(Europium, 1), new MaterialStack(Samarium, 1)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 21))).setProcessingMaterialTierEU(TierEU.RECIPE_LuV).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.Longasssuperconductornameforuhvwire                             = new Materials( 985, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  38,129, 189,   0,   "Longasssuperconductornameforuhvwire"                           ,   "Superconductor Base UHV"      ,     0,       0,     10800,  10800,  true,  false,  1,   1,   1, Dyes.dyeWhite      , 1, Arrays.asList(new MaterialStack(Draconium, 6), new MaterialStack(CosmicNeutronium, 7), new MaterialStack(Tritanium, 5), new MaterialStack(Americium, 6)), Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 24))).setProcessingMaterialTierEU(TierEU.RECIPE_ZPM).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.SuperconductorUEVBase                                           = new Materials( 974, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  174, 8,   8,   0,   "SuperconductorUEVBase"                                         ,   "Superconductor Base UEV"      ,     0,       0,     11700,  11800,  true,  false,  1,   1,   1, Dyes.dyeWhite, Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 27))).setProcessingMaterialTierEU(TierEU.RECIPE_UV).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.SuperconductorUIVBase                                           = new Materials( 131, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  229, 88,   177,   0,   "SuperconductorUIVBase"                                         ,   "Superconductor Base UIV"      ,     0,       0,     12700,  12700,  true,  false,  1,   1,   1, Dyes.dyeWhite, Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 34))).setProcessingMaterialTierEU(TierEU.RECIPE_UHV).disableAutoGeneratedVacuumFreezerRecipe();
+        Materials.SuperconductorUMVBase                                           = new Materials( 134, TextureSet.SET_SHINY          ,   1.0F,      0,  3, 1|2                ,  181, 38,   205,   0,   "SuperconductorUMVBase"                                         ,   "Superconductor Base UMV"      ,     0,       0,     13600,  13600,  true,  false,  1,   1,   1, Dyes.dyeWhite, Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 40))).setProcessingMaterialTierEU(TierEU.RECIPE_UEV).disableAutoGeneratedVacuumFreezerRecipe();
 
-        Materials.SuperconductorMV      = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,  85, 85,  85,   0,   "SuperconductorMV"   ,   "Superconductor MV"       ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeGray       , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 6)));
-        Materials.SuperconductorHV      = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,  51, 25,   0,   0,   "SuperconductorHV"   ,   "Superconductor HV"       ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeBrown      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 12)));
-        Materials.SuperconductorEV      = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,   0,135,   0,   0,   "SuperconductorEV"   ,   "Superconductor EV"       ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeLime       , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 18)));
-        Materials.SuperconductorIV      = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,  51,  0,  51,   0,   "SuperconductorIV"   ,   "Superconductor IV"       ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeMagenta    , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 24)));
-        Materials.SuperconductorLuV     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                , 153, 76,   0,   0,   "SuperconductorLuV"  ,   "Superconductor LuV"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeBrown      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 30)));
-        Materials.SuperconductorZPM     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,  10, 10,  10,   0,   "SuperconductorZPM"  ,   "Superconductor ZPM"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeBlack      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 36)));
-        Materials.SuperconductorUV      = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                , 224,210,   7,   0,   "SuperconductorUV"   ,   "Superconductor UV"       ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeYellow     , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 42)));
-        Materials.SuperconductorUHV     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,  38,129, 189,   0,   "Superconductor"     ,   "Superconductor UHV"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeWhite      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 48)));
-        Materials.SuperconductorUEV     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                , 174,  8,   8,   0,   "SuperconductorUEV"  ,   "Superconductor UEV"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeWhite      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 54)));
-        Materials.SuperconductorUIV     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                , 229, 88, 177,   0,   "SuperconductorUIV"  ,   "Superconductor UIV"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeWhite      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 60)));
-        Materials.SuperconductorUMV     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                , 181, 38, 205,   0,   "SuperconductorUMV"  ,   "Superconductor UMV"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeWhite      , Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 66)));
+        Materials.SuperconductorMV      = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,  85, 85,  85,   0,   "SuperconductorMV"   ,   "Superconductor MV"       ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeGray       , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 6)));
+        Materials.SuperconductorHV      = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,  51, 25,   0,   0,   "SuperconductorHV"   ,   "Superconductor HV"       ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeBrown      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 12)));
+        Materials.SuperconductorEV      = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,   0,135,   0,   0,   "SuperconductorEV"   ,   "Superconductor EV"       ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeLime       , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 18)));
+        Materials.SuperconductorIV      = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,  51,  0,  51,   0,   "SuperconductorIV"   ,   "Superconductor IV"       ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeMagenta    , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 24)));
+        Materials.SuperconductorLuV     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                , 153, 76,   0,   0,   "SuperconductorLuV"  ,   "Superconductor LuV"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeBrown      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 30)));
+        Materials.SuperconductorZPM     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,  10, 10,  10,   0,   "SuperconductorZPM"  ,   "Superconductor ZPM"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeBlack      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 36)));
+        Materials.SuperconductorUV      = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                , 224,210,   7,   0,   "SuperconductorUV"   ,   "Superconductor UV"       ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeYellow     , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 42)));
+        Materials.SuperconductorUHV     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                ,  38,129, 189,   0,   "Superconductor"     ,   "Superconductor UHV"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeWhite      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 48)));
+        Materials.SuperconductorUEV     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                , 174,  8,   8,   0,   "SuperconductorUEV"  ,   "Superconductor UEV"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeWhite      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 54)));
+        Materials.SuperconductorUIV     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                , 229, 88, 177,   0,   "SuperconductorUIV"  ,   "Superconductor UIV"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeWhite      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 60)));
+        Materials.SuperconductorUMV     = new Materials( -1, TextureSet.SET_SHINY       ,   1.0F,      0,  0, 0                , 181, 38, 205,   0,   "SuperconductorUMV"  ,   "Superconductor UMV"      ,     0,       0,     -1,  -1,  false,  false,  1,   1,   1, Dyes.dyeWhite      , Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 66)));
 
         Materials.SuperCoolant = new MaterialBuilder( 140, TextureSet.SET_DULL,"Super Coolant").setRGB(2, 91, 111).addCell().addFluid().constructMaterial().setLiquidTemperature(1);
 
         Materials.EnrichedHolmium       = new Materials(582, TextureSet.SET_METALLIC    ,   1.0F,      0,  2,    2             ,  18,  100, 255,   0,   "EnrichedHolmium"    ,   "Enriched Holmium"        ,    -1,      -1,      0, 3000,  true,  false,200,   1,   1, Dyes.dyePurple);
 
-        Materials.TengamPurified = new MaterialBuilder(111, TextureSet.SET_METALLIC, "Purified Tengam").addDustItems().addGearItems().addMetalItems().addToolHeadItems().setAspects(Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 2), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 2))).setColor(Dyes.dyeLime).setName("TengamPurified").setRGB(186, 223, 112).constructMaterial().setProcessingMaterialTierEU(TierEU.RECIPE_UV);
-        Materials.TengamAttuned  = new MaterialBuilder(112, TextureSet.SET_MAGNETIC, "Attuned Tengam") .addDustItems().addGearItems().addMetalItems().addToolHeadItems().setAspects(Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 4), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 1))).setColor(Dyes.dyeLime).setName("TengamAttuned") .setRGB(213, 255, 128).constructMaterial().setProcessingMaterialTierEU(TierEU.RECIPE_UV);
-        Materials.TengamRaw      = new MaterialBuilder(110, TextureSet.SET_ROUGH,    "Raw Tengam")     .addOreItems()                                                   .setAspects(Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1), new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 4))).setColor(Dyes.dyeLime).setName("TengamRaw")     .setRGB(160, 191,  96).constructMaterial().setProcessingMaterialTierEU(TierEU.RECIPE_UV);
+        Materials.TengamPurified = new MaterialBuilder(111, TextureSet.SET_METALLIC, "Purified Tengam").addDustItems().addGearItems().addMetalItems().addToolHeadItems().setAspects(Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 2), new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 2))).setColor(Dyes.dyeLime).setName("TengamPurified").setRGB(186, 223, 112).constructMaterial().setProcessingMaterialTierEU(TierEU.RECIPE_UV);
+        Materials.TengamAttuned  = new MaterialBuilder(112, TextureSet.SET_MAGNETIC, "Attuned Tengam") .addDustItems().addGearItems().addMetalItems().addToolHeadItems().setAspects(Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 4), new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 1))).setColor(Dyes.dyeLime).setName("TengamAttuned") .setRGB(213, 255, 128).constructMaterial().setProcessingMaterialTierEU(TierEU.RECIPE_UV);
+        Materials.TengamRaw      = new MaterialBuilder(110, TextureSet.SET_ROUGH,    "Raw Tengam")     .addOreItems()                                                   .setAspects(Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1), new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 4))).setColor(Dyes.dyeLime).setName("TengamRaw")     .setRGB(160, 191,  96).constructMaterial().setProcessingMaterialTierEU(TierEU.RECIPE_UV);
 
         Materials.ActivatedCarbon = new MaterialBuilder(563, TextureSet.SET_DULL, "Activated Carbon")
             .addDustItems()
@@ -1039,7 +1039,7 @@ public class MaterialsInit1 {
                 new MaterialStack(Materials.Oxygen, 7),
                 new MaterialStack(Materials.Silver, 3),
                 new MaterialStack(Materials.CallistoIce, 1)),
-            Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.HUMANUS, 2))).setHasCorrespondingGas(true)
+            Arrays.asList(new TCAspects.TC_AspectStack(TCAspects.HUMANUS, 2))).setHasCorrespondingGas(true)
             .setGasTemperature(12406);
 
         // spotless:on
diff --git a/src/main/java/gregtech/loaders/misc/CoverLoader.java b/src/main/java/gregtech/loaders/misc/CoverLoader.java
new file mode 100644
index 0000000000..f2feaa3a29
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/CoverLoader.java
@@ -0,0 +1,42 @@
+package gregtech.loaders.misc;
+
+import static gregtech.api.enums.Textures.BlockIcons.VENT_ADVANCED;
+import static gregtech.api.enums.Textures.BlockIcons.VENT_NORMAL;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+
+import gregtech.api.GregTechAPI;
+import gregtech.api.render.TextureFactory;
+import gregtech.api.util.GTModHandler;
+import gregtech.common.covers.CoverVent;
+
+public class CoverLoader implements Runnable {
+
+    @Override
+    public void run() {
+        for (byte i = 0; i < 16; i = (byte) (i + 1)) {
+            GregTechAPI.registerCover(new ItemStack(Blocks.carpet, 1, i), TextureFactory.of(Blocks.wool, i), null);
+        }
+        GregTechAPI.registerCover(
+            GTModHandler.getIC2Item("reactorVent", 1L, 1),
+            TextureFactory.of(VENT_NORMAL),
+            new CoverVent(1));
+        GregTechAPI.registerCover(
+            GTModHandler.getIC2Item("reactorVentCore", 1L, 1),
+            TextureFactory.of(VENT_NORMAL),
+            new CoverVent(1));
+        GregTechAPI.registerCover(
+            GTModHandler.getIC2Item("reactorVentGold", 1L, 1),
+            TextureFactory.of(VENT_ADVANCED),
+            new CoverVent(2));
+        GregTechAPI.registerCover(
+            GTModHandler.getIC2Item("reactorVentSpread", 1L),
+            TextureFactory.of(VENT_NORMAL),
+            new CoverVent(2));
+        GregTechAPI.registerCover(
+            GTModHandler.getIC2Item("reactorVentDiamond", 1L, 1),
+            TextureFactory.of(VENT_ADVANCED),
+            new CoverVent(3));
+    }
+}
diff --git a/src/main/java/gregtech/loaders/misc/GTAchievements.java b/src/main/java/gregtech/loaders/misc/GTAchievements.java
new file mode 100644
index 0000000000..aed2ff6d28
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/GTAchievements.java
@@ -0,0 +1,814 @@
+package gregtech.loaders.misc;
+
+import static gregtech.api.enums.Mods.Thaumcraft;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.stats.Achievement;
+import net.minecraft.stats.AchievementList;
+import net.minecraft.stats.StatBase;
+import net.minecraftforge.common.AchievementPage;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
+import net.minecraftforge.fluids.FluidStack;
+
+import cpw.mods.fml.common.FMLCommonHandler;
+import cpw.mods.fml.common.eventhandler.SubscribeEvent;
+import cpw.mods.fml.common.gameevent.PlayerEvent.ItemCraftedEvent;
+import cpw.mods.fml.common.gameevent.PlayerEvent.ItemSmeltedEvent;
+import gregtech.GTMod;
+import gregtech.api.enums.GTValues;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.objects.ItemData;
+import gregtech.api.recipe.RecipeMaps;
+import gregtech.api.util.GTLog;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipe;
+import gregtech.common.items.IDMetaTool01;
+import gregtech.common.items.MetaGeneratedTool01;
+import ic2.core.Ic2Items;
+import thaumcraft.api.ThaumcraftApiHelper;
+
+public class GTAchievements {
+
+    public static int oreReg = -1;
+    public static int assReg = -1;
+    public ConcurrentHashMap achievementList;
+    public ConcurrentHashMap issuedAchievements;
+    public int adjX = 5;
+    public int adjY = 9;
+
+    public GTAchievements() {
+        this.achievementList = new ConcurrentHashMap<>();
+        this.issuedAchievements = new ConcurrentHashMap<>();
+
+        for (GTRecipe recipe : RecipeMaps.assemblylineVisualRecipes.getAllRecipes()) {
+            registerAssAchievement(recipe);
+        }
+
+        registerAchievement(
+            "flintpick",
+            0,
+            0,
+            MetaGeneratedTool01.INSTANCE.getToolWithStats(2, 1, Materials.Flint, Materials.Wood, null),
+            "",
+            false);
+        registerAchievement("crops", -4, 0, GTModHandler.getIC2Item("crop", 1L), "flintpick", false);
+        registerAchievement("havestlead", -4, 2, ItemList.Crop_Drop_Plumbilia.get(1), "crops", false);
+        registerAchievement("havestcopper", -2, 1, ItemList.Crop_Drop_Coppon.get(1), "crops", false);
+        registerAchievement("havesttin", -2, -1, ItemList.Crop_Drop_Tine.get(1), "crops", false);
+        registerAchievement("havestoil", -4, -4, ItemList.Crop_Drop_OilBerry.get(1), "crops", false);
+        registerAchievement("havestiron", -2, -3, ItemList.Crop_Drop_Ferru.get(1), "crops", false);
+        registerAchievement("havestgold", -2, -6, ItemList.Crop_Drop_Aurelia.get(1), "havestiron", false);
+        registerAchievement("havestsilver", -4, -5, ItemList.Crop_Drop_Argentia.get(1), "havestiron", false);
+        registerAchievement("havestemeralds", -2, -8, ItemList.Crop_Drop_BobsYerUncleRanks.get(1), "havestgold", false);
+
+        registerAchievement(
+            "tools",
+            0,
+            4,
+            MetaGeneratedTool01.INSTANCE
+                .getToolWithStats(IDMetaTool01.HARDHAMMER.ID, 1, Materials.Iron, Materials.Wood, null),
+            "flintpick",
+            false);
+        registerAchievement(
+            "driltime",
+            2,
+            4,
+            MetaGeneratedTool01.INSTANCE
+                .getToolWithStats(IDMetaTool01.DRILL_LV.ID, 1, Materials.BlueSteel, Materials.StainlessSteel, null),
+            "tools",
+            false);
+        registerAchievement(
+            "brrrr",
+            2,
+            6,
+            MetaGeneratedTool01.INSTANCE
+                .getToolWithStats(IDMetaTool01.CHAINSAW_LV.ID, 1, Materials.BlueSteel, Materials.StainlessSteel, null),
+            "driltime",
+            false);
+        registerAchievement(
+            "highpowerdrill",
+            3,
+            5,
+            MetaGeneratedTool01.INSTANCE
+                .getToolWithStats(IDMetaTool01.DRILL_HV.ID, 1, Materials.TungstenSteel, Materials.TungstenSteel, null),
+            "driltime",
+            false);
+        registerAchievement(
+            "hammertime",
+            3,
+            7,
+            MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                IDMetaTool01.JACKHAMMER.ID,
+                1,
+                Materials.TungstenSteel,
+                Materials.TungstenSteel,
+                null),
+            "highpowerdrill",
+            false);
+
+        registerAchievement(
+            "unitool",
+            -2,
+            4,
+            MetaGeneratedTool01.INSTANCE
+                .getToolWithStats(IDMetaTool01.UNIVERSALSPADE.ID, 1, Materials.Steel, Materials.Iron, null),
+            "tools",
+            false);
+        registerAchievement("recycling", -4, 4, ItemList.Machine_LV_ArcFurnace.get(1), "unitool", false);
+
+        registerAchievement(
+            "crushed",
+            0,
+            6,
+            GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Tin, 1L),
+            "tools",
+            false);
+        registerAchievement(
+            "cleandust",
+            0,
+            10,
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L),
+            "crushed",
+            false);
+        registerAchievement(
+            "washing",
+            -2,
+            6,
+            GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Iron, 1L),
+            "crushed",
+            false);
+        registerAchievement(
+            "spinit",
+            -4,
+            6,
+            GTOreDictUnificator.get(OrePrefixes.crushedCentrifuged, Materials.Redstone, 1L),
+            "crushed",
+            false);
+
+        registerAchievement("newfuel", -4, 8, ItemList.ThoriumCell_4.get(1), "spinit", false);
+        registerAchievement(
+            "newmetal",
+            -4,
+            10,
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lutetium, 1L),
+            "newfuel",
+            false);
+        registerAchievement("reflect", -2, 9, ItemList.Neutron_Reflector.get(1), "newfuel", false);
+
+        registerAchievement(
+            "bronze",
+            2,
+            0,
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 1L),
+            "flintpick",
+            false);
+        registerAchievement(
+            "simplyeco",
+            2,
+            2,
+            ItemList.Machine_Bronze_Boiler_Solar.get(1, ItemList.Machine_HP_Solar.get(1L)),
+            "bronze",
+            false);
+        registerAchievement("firststeam", 2, -2, ItemList.Machine_Bronze_Boiler.get(1), "bronze", false);
+        registerAchievement("alloysmelter", 2, -4, ItemList.Machine_Bronze_AlloySmelter.get(1), "firststeam", false);
+        registerAchievement("macerator", 0, -2, ItemList.Machine_Bronze_Macerator.get(1), "firststeam", false);
+        registerAchievement("extract", 0, -4, ItemList.Machine_Bronze_Extractor.get(1), "alloysmelter", false);
+
+        registerAchievement("smallparts", 0, -5, ItemList.Circuit_Primitive.get(1), "alloysmelter", false);
+        registerAchievement("gtbasiccircuit", 0, -8, Ic2Items.electronicCircuit.copy(), "smallparts", false);
+        registerAchievement("bettercircuits", 0, -9, ItemList.Circuit_Good.get(1), "gtbasiccircuit", false);
+        registerAchievement("stepforward", -2, -9, Ic2Items.advancedCircuit.copy(), "bettercircuits", false);
+        registerAchievement("gtmonosilicon", -5, -10, ItemList.Circuit_Silicon_Ingot.get(1), "stepforward", false);
+        registerAchievement("gtlogicwafer", -7, -10, ItemList.Circuit_Wafer_ILC.get(1), "gtmonosilicon", false);
+        registerAchievement("gtlogiccircuit", -9, -10, ItemList.Circuit_Basic.get(1), "gtlogicwafer", false);
+        registerAchievement("gtcleanroom", -11, -10, ItemList.Machine_Multi_Cleanroom.get(1), "gtlogiccircuit", false);
+        registerAchievement("energyflow", -13, -10, ItemList.Circuit_Nanoprocessor.get(1), "gtcleanroom", false);
+        registerAchievement(
+            "gtquantumprocessor",
+            -13,
+            -12,
+            ItemList.Circuit_Quantumprocessor.get(1),
+            "energyflow",
+            false);
+        registerAchievement(
+            "gtcrystalprocessor",
+            -11,
+            -12,
+            ItemList.Circuit_Crystalprocessor.get(1),
+            "gtquantumprocessor",
+            false);
+        registerAchievement("gtwetware", -9, -12, ItemList.Circuit_Neuroprocessor.get(1), "gtcrystalprocessor", false);
+        registerAchievement("gtwetmain", -7, -12, ItemList.Circuit_Wetwaremainframe.get(1), "gtwetware", false);
+
+        registerAchievement("orbs", -10, -14, ItemList.Energy_LapotronicOrb.get(1), "energyflow", false);
+        registerAchievement("thatspower", -8, -14, ItemList.Energy_LapotronicOrb2.get(1), "orbs", false);
+        registerAchievement("datasaving", -2, -12, ItemList.Tool_DataOrb.get(1), "stepforward", false);
+        registerAchievement("superbuffer", 0, -12, ItemList.Automation_SuperBuffer_LV.get(1), "datasaving", false);
+        registerAchievement("newstorage", -2, -14, ItemList.Quantum_Chest_HV.get(1), "superbuffer", false);
+        registerAchievement("whereistheocean", 2, -14, ItemList.Quantum_Tank_IV.get(1), "superbuffer", false);
+        registerAchievement("luck", 2, -6, ItemList.ZPM.get(1), "", false);
+
+        registerAchievement(
+            "steel",
+            4,
+            0,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L),
+            "bronze",
+            false);
+        registerAchievement("highpressure", 4, 2, ItemList.Machine_Steel_Boiler.get(1), "steel", false);
+        registerAchievement(
+            "extremepressure",
+            4,
+            4,
+            ItemList.Machine_Multi_LargeBoiler_Steel.get(1),
+            "highpressure",
+            false);
+        registerAchievement("cheapermac", 6, 1, ItemList.Machine_LV_Hammer.get(1), "steel", false);
+        registerAchievement(
+            "complexalloys",
+            6,
+            3,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.BlueSteel, 1L),
+            "cheapermac",
+            false);
+
+        registerAchievement(
+            "magneticiron",
+            4,
+            -2,
+            GTOreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1L),
+            "steel",
+            false);
+        registerAchievement("lvmotor", 4, -6, ItemList.Electric_Motor_LV.get(1), "magneticiron", false);
+        registerAchievement("pumpcover", 2, -8, ItemList.Electric_Pump_LV.get(1), "lvmotor", false);
+        registerAchievement("closeit", 2, -10, ItemList.Cover_Shutter.get(1), "pumpcover", false);
+        registerAchievement("slurp", 2, -12, ItemList.Pump_HV.get(1), "closeit", false);
+        registerAchievement("transport", 4, -10, ItemList.Conveyor_Module_LV.get(1), "lvmotor", false);
+        registerAchievement("manipulation", 4, -12, ItemList.Cover_Controller.get(1), "transport", false);
+        registerAchievement("buffer", 4, -14, ItemList.Automation_ChestBuffer_LV.get(1), "manipulation", false);
+        registerAchievement("complexmachines", 6, -9, ItemList.Robot_Arm_LV.get(1), "lvmotor", false);
+        registerAchievement("avengers", 8, -11, ItemList.Machine_LV_Assembler.get(1), "complexmachines", false);
+        registerAchievement("filterregulate", 10, -11, ItemList.Component_Filter.get(1), "avengers", false);
+
+        registerAchievement("steampower", 6, -6, ItemList.Generator_Steam_Turbine_LV.get(1), "lvmotor", false);
+        registerAchievement("batterys", 6, -4, ItemList.Battery_Buffer_2by2_MV.get(1), "steampower", false);
+        registerAchievement("badweather", 6, -8, ItemList.Casing_FireHazard.get(1), "steampower", false);
+        registerAchievement("electricproblems", 7, -7, ItemList.Casing_ExplosionHazard.get(1), "steampower", false);
+        registerAchievement("ebf", 8, -6, ItemList.Machine_Multi_BlastFurnace.get(1), "steampower", false);
+        registerAchievement("energyhatch", 12, -6, ItemList.Hatch_Energy_LV.get(1), "ebf", false);
+
+        registerAchievement(
+            "gtaluminium",
+            8,
+            0,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Aluminium, 1L),
+            "steel",
+            false);
+        registerAchievement("highpowersmelt", 8, 2, ItemList.Machine_Multi_Furnace.get(1), "gtaluminium", false);
+        registerAchievement("oilplant", 8, 4, ItemList.Distillation_Tower.get(1), "highpowersmelt", false);
+        registerAchievement("factory", 8, 6, ItemList.Processing_Array.get(1), "oilplant", false);
+        registerAchievement("upgradeebf", 8, -2, ItemList.Hatch_Energy_MV.get(1), "gtaluminium", false);
+        registerAchievement("maintainance", 10, -2, ItemList.Hatch_Maintenance.get(1), "upgradeebf", false);
+
+        registerAchievement("upgrade", 10, 0, ItemList.Casing_Coil_Kanthal.get(1), "gtaluminium", false);
+        registerAchievement(
+            "titan",
+            14,
+            0,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Titanium, 1L),
+            "upgrade",
+            false);
+        registerAchievement("magic", 14, 3, ItemList.MagicEnergyConverter_LV.get(1), "titan", false);
+        registerAchievement("highmage", 10, 3, ItemList.MagicEnergyAbsorber_HV.get(1), "magic", false);
+        registerAchievement("artificaldia", 12, 2, ItemList.IC2_Industrial_Diamond.get(1), "titan", false);
+        registerAchievement("muchsteam", 13, 1, ItemList.LargeSteamTurbine.get(1), "titan", false);
+        registerAchievement("efficientsteam", 11, 1, ItemList.LargeSteamTurbine.get(1), "muchsteam", false);
+
+        registerAchievement("upgrade2", 16, 0, ItemList.Casing_Coil_Nichrome.get(1), "titan", false);
+        registerAchievement(
+            "tungsten",
+            16,
+            2,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tungsten, 1L),
+            "upgrade2",
+            false);
+        registerAchievement(
+            "osmium",
+            16,
+            -2,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Osmium, 1L),
+            "upgrade2",
+            false);
+        registerAchievement("hightech", 15, -3, ItemList.Field_Generator_LV.get(1), "osmium", false);
+        registerAchievement("amplifier", 16, -5, ItemList.Machine_LV_Amplifab.get(1), "hightech", false);
+        registerAchievement("scanning", 13, -3, ItemList.Machine_HV_Scanner.get(1), "hightech", false);
+        registerAchievement("alienpower", 14, -5, ItemList.Generator_Naquadah_Mark_I.get(1), "hightech", false);
+        registerAchievement("universal", 15, -6, ItemList.Machine_LV_Massfab.get(1), "hightech", false);
+        registerAchievement("replication", 17, -6, ItemList.Machine_LV_Replicator.get(1), "universal", false);
+
+        registerAchievement(
+            "tungstensteel",
+            16,
+            4,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 1L),
+            "tungsten",
+            false);
+        registerAchievement("upgrade3", 15, 5, ItemList.Casing_Coil_TungstenSteel.get(1), "tungstensteel", false);
+        registerAchievement(
+            "hssg",
+            13,
+            5,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.HSSG, 1L),
+            "upgrade3",
+            false);
+        registerAchievement("upgrade4", 11, 5, ItemList.Casing_Coil_HSSG.get(1), "hssg", false);
+        registerAchievement(
+            "stargatematerial",
+            11,
+            7,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 1L),
+            "upgrade4",
+            false);
+        registerAchievement("conducting", 14, 6, ItemList.Casing_Coil_Superconductor.get(1), "upgrade3", false);
+        registerAchievement("fusion", 15, 7, ItemList.FusionComputer_LuV.get(1), "tungstensteel", false);
+        registerAchievement("higherefficency", 15, 9, ItemList.Generator_Plasma_EV.get(1), "fusion", false);
+        registerAchievement("advancing", 13, 7, ItemList.FusionComputer_ZPMV.get(1), "fusion", false);
+
+        registerAchievement("stargateliquid", 11, 9, ItemList.Generator_Plasma_IV.get(1), "advancing", false);
+        registerAchievement("tothelimit", 13, 9, ItemList.Generator_Plasma_IV.get(1), "advancing", false);
+        registerAchievement("fullefficiency", 12, 10, ItemList.Generator_Plasma_LuV.get(1), "tothelimit", false);
+        registerAchievement("upgrade5", 9, 9, ItemList.Casing_Coil_Naquadah.get(1), "stargateliquid", false);
+        registerAchievement(
+            "alienmetallurgy",
+            9,
+            7,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.NaquadahAlloy, 1L),
+            "upgrade5",
+            false);
+        registerAchievement("over9000", 7, 7, ItemList.Casing_Coil_NaquadahAlloy.get(1), "alienmetallurgy", false);
+        registerAchievement(
+            "finalpreparations",
+            7,
+            9,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadria, 1L),
+            "over9000",
+            false);
+        registerAchievement("denseaspossible", 6, 10, ItemList.FusionComputer_UV.get(1), "finalpreparations", false);
+
+        registerAchievement("zpmage", 8, 10, ItemList.Energy_Module.get(1), "denseaspossible", false);
+        registerAchievement("uvage", 10, 10, ItemList.Energy_Cluster.get(1), "zpmage", false);
+        registerAchievement("whatnow", 12, 10, ItemList.ZPM2.get(1), "uvage", false);
+
+        if (GTMod.gregtechproxy.mAchievements) {
+            AchievementPage.registerAchievementPage(
+                new AchievementPage(
+                    "GregTech 5",
+                    this.achievementList.values()
+                        .toArray(new Achievement[0])));
+            MinecraftForge.EVENT_BUS.register(this);
+            FMLCommonHandler.instance()
+                .bus()
+                .register(this);
+        }
+    }
+
+    public static void registerOre(Materials aMaterial, int min, int max, int chance, boolean overworld, boolean nether,
+        boolean end) {}
+
+    public Achievement registerAchievement(String textId, int x, int y, ItemStack icon, Achievement requirement,
+        boolean special) {
+        if (!GTMod.gregtechproxy.mAchievements) {
+            return null;
+        }
+        Achievement achievement = new Achievement(textId, textId, this.adjX + x, this.adjY + y, icon, requirement);
+        if (special) {
+            achievement.setSpecial();
+        }
+        ((StatBase) achievement).registerStat();
+        if (GTValues.D2) {
+            GTLog.out.println("achievement." + textId + "=");
+            GTLog.out.println("achievement." + textId + ".desc=");
+        }
+        this.achievementList.put(textId, achievement);
+        return achievement;
+    }
+
+    public Achievement registerAchievement(String textId, int x, int y, ItemStack icon, String requirement,
+        boolean special) {
+        if (!GTMod.gregtechproxy.mAchievements) {
+            return null;
+        }
+        Achievement achievement = new Achievement(
+            textId,
+            textId,
+            this.adjX + x,
+            this.adjY + y,
+            icon,
+            getAchievement(requirement));
+        if (special) {
+            achievement.setSpecial();
+        }
+        ((StatBase) achievement).registerStat();
+        if (GTValues.D2) {
+            GTLog.out.println("achievement." + textId + "=");
+            GTLog.out.println("achievement." + textId + ".desc=");
+        }
+        this.achievementList.put(textId, achievement);
+        return achievement;
+    }
+
+    public Achievement registerOreAchievement(Materials aMaterial) {
+        return null;
+    }
+
+    public Achievement registerAssAchievement(GTRecipe recipe) {
+        if (recipe == null) {
+            GTMod.GT_FML_LOGGER.error("Invalid achievement registration attempt for null recipe", new Exception());
+            return null;
+        }
+        if (recipe.getOutput(0) == null) {
+            GTMod.GT_FML_LOGGER
+                .error("Invalid achievement registration attempt for recipe with null output", new Exception());
+            return null;
+        }
+        if (this.achievementList.get(
+            recipe.getOutput(0)
+                .getUnlocalizedName())
+            == null) {
+            assReg++;
+            return registerAchievement(
+                recipe.getOutput(0)
+                    .getUnlocalizedName(),
+                -(11 + assReg % 5),
+                ((assReg) / 5) - 8,
+                recipe.getOutput(0),
+                AchievementList.openInventory,
+                false);
+        }
+        return null;
+    }
+
+    public void issueAchievement(EntityPlayer entityplayer, String textId) {
+        if (entityplayer == null || !GTMod.gregtechproxy.mAchievements) {
+            return;
+        }
+        entityplayer.triggerAchievement(this.achievementList.get(textId));
+    }
+
+    public Achievement getAchievement(String textId) {
+        if (this.achievementList.containsKey(textId)) {
+            return this.achievementList.get(textId);
+        }
+        return null;
+    }
+
+    public void issueAchivementHatch(EntityPlayer player, ItemStack stack) {
+        if (player == null || stack == null) {
+            return;
+        }
+        ItemData data = GTOreDictUnificator.getItemData(stack);
+
+        if ((data != null) && (data.mPrefix == OrePrefixes.ingot)) {
+            if (data.mMaterial.mMaterial == Materials.Aluminium) {
+                issueAchievement(player, "gtaluminium");
+            } else if (data.mMaterial.mMaterial == Materials.Titanium) {
+                issueAchievement(player, "titan");
+            } else if (data.mMaterial.mMaterial == Materials.BlueSteel) {
+                issueAchievement(player, "complexalloys");
+            } else if (data.mMaterial.mMaterial == Materials.Tungsten) {
+                issueAchievement(player, "tungsten");
+            } else if (data.mMaterial.mMaterial == Materials.Osmium) {
+                issueAchievement(player, "osmium");
+            } else if (data.mMaterial.mMaterial == Materials.TungstenSteel) {
+                issueAchievement(player, "tungstensteel");
+            } else if (data.mMaterial.mMaterial == Materials.HSSG) {
+                issueAchievement(player, "hssg");
+            } else if (data.mMaterial.mMaterial == Materials.Naquadah) {
+                issueAchievement(player, "stargatematerial");
+            } else if (data.mMaterial.mMaterial == Materials.NaquadahAlloy) {
+                issueAchievement(player, "alienmetallurgy");
+            } else if (data.mMaterial.mMaterial == Materials.Naquadria) {
+                issueAchievement(player, "finalpreparations");
+            }
+        }
+        if (stack.getUnlocalizedName()
+            .equals("ic2.itemPartIndustrialDiamond")) {
+            issueAchievement(player, "artificaldia");
+            issueAchievement(player, "buildCoalDiamond");
+        }
+    }
+
+    public void issueAchivementHatchFluid(EntityPlayer player, FluidStack fluid) {
+        if (player == null || fluid == null) {
+            return;
+        }
+        switch (fluid.getFluid()
+            .getUnlocalizedName()) {
+            case "fluid.plasma.helium" -> issueAchievement(player, "fusion");
+            case "fluid.molten.europium" -> issueAchievement(player, "advancing");
+            case "fluid.molten.naquadah" -> issueAchievement(player, "stargateliquid");
+            case "fluid.molten.americium" -> issueAchievement(player, "tothelimit");
+            case "fluid.molten.neutronium" -> issueAchievement(player, "denseaspossible");
+            case "fluid.plasma.nitrogen" -> issueAchievement(player, "higherefficency");
+        }
+    }
+
+    @SubscribeEvent
+    public void onCrafting(ItemCraftedEvent event) {
+        EntityPlayer player = event.player;
+        ItemStack stack = event.crafting;
+        if (player == null || stack == null) {
+            return;
+        }
+        ItemData data = GTOreDictUnificator.getItemData(stack);
+        if (data != null) {
+            if (data.mPrefix == OrePrefixes.dust && data.mMaterial.mMaterial == Materials.Bronze) {
+                issueAchievement(player, "bronze");
+            }
+        }
+        switch (stack.getUnlocalizedName()) {
+            case "gt.metaitem.01.2300" -> issueAchievement(player, "bronze");
+            case "gt.metaitem.01.32700" -> issueAchievement(player, "smallparts");
+            case "gt.metaitem.01.32702" -> issueAchievement(player, "bettercircuits");
+            case "gt.metaitem.01.23354" -> issueAchievement(player, "magneticiron");
+            case "gt.metaitem.01.32600" -> {
+                issueAchievement(player, "lvmotor");
+                issueAchievement(player, "buildCable");
+            }
+            case "gt.metaitem.01.32610" -> issueAchievement(player, "pumpcover");
+            case "gt.metaitem.01.32630" -> issueAchievement(player, "transport");
+            case "gt.metaitem.01.32650" -> issueAchievement(player, "complexmachines");
+            case "gt.metaitem.01.32670" -> issueAchievement(player, "hightech");
+            case "ic2.blockCrop" -> issueAchievement(player, "crops");
+            case "ic2.itemPartCircuit" -> issueAchievement(player, "gtbasiccircuit");
+            case "ic2.itemPartCircuitAdv" -> issueAchievement(player, "stepforward");
+            case "gt.blockmachines.boiler.solar" -> issueAchievement(player, "simplyeco");
+            case "gt.blockmachines.boiler.bronze" -> issueAchievement(player, "firststeam");
+            case "gt.blockmachines.boiler.steel" -> issueAchievement(player, "highpressure");
+            case "gt.blockmachines.bronzemachine.macerator" -> {
+                issueAchievement(player, "macerator");
+                issueAchievement(player, "buildMacerator");
+            }
+            case "gt.blockmachines.bronzemachine.alloysmelter.tier.3" -> issueAchievement(player, "buildIndFurnace");
+            case "gt.blockmachines.bronzemachine.alloysmelter" -> {
+                issueAchievement(player, "alloysmelter");
+                issueAchievement(player, "buildElecFurnace");
+            }
+
+            case "gt.blockmachines.bronzemachine.extractor" -> {
+                issueAchievement(player, "extract");
+                issueAchievement(player, "buildCompressor");
+                issueAchievement(player, "buildExtractor");
+            }
+            case "gt.blockmachines.basicmachine.pump.tier.03" -> issueAchievement(player, "slurp");
+            case "gt.blockmachines.multimachine.blastfurnace" -> issueAchievement(player, "ebf");
+            case "gt.blockmachines.hatch.energy.tier.02" -> issueAchievement(player, "upgradeebf");
+            case "gt.blockmachines.multimachine.multifurnace" -> issueAchievement(player, "highpowersmelt");
+            case "gt.blockmachines.hatch.energy.tier.01" -> issueAchievement(player, "energyhatch");
+            case "gt.blockmachines.multimachine.processingarray" -> issueAchievement(player, "factory");
+            case "gt.blockmachines.basicgenerator.magicenergyconverter.tier.01" -> issueAchievement(player, "magic");
+            case "gt.blockmachines.basicgenerator.magicenergyabsorber.tier.03" -> issueAchievement(player, "highmage");
+            case "gt.blockmachines.basicgenerator.plasmagenerator.tier.07" -> issueAchievement(
+                player,
+                "fullefficiency");
+            case "gt.blockmachines.multimachine.largeturbine" -> issueAchievement(player, "muchsteam");
+            case "gt.blockmachines.multimachine.largehpturbine" -> issueAchievement(player, "efficientsteam");
+            case "gt.blockmachines.multimachine.cleanroom" -> issueAchievement(player, "gtcleanroom");
+            case "gt.neutronreflector" -> issueAchievement(player, "reflect");
+            case "gt.blockcasings5.1" -> issueAchievement(player, "upgrade");
+            case "gt.blockcasings5.2" -> issueAchievement(player, "upgrade2");
+            case "gt.blockcasings5.3" -> issueAchievement(player, "upgrade3");
+            case "gt.blockcasings5.4" -> issueAchievement(player, "upgrade4");
+            case "gt.blockcasings5.5" -> issueAchievement(player, "upgrade5");
+            case "gt.blockcasings5.6" -> issueAchievement(player, "over9000");
+            case "gt.blockcasings.15" -> issueAchievement(player, "conducting");
+        }
+
+        if (!stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.")) {
+            return;
+        }
+
+        // from here, it only concerns "gt.blockmachines." kind of achievements
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.basicmachine.arcfurnace.tier.")) {
+            issueAchievement(player, "recycling");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.basicmachine.disassembler.tier.")) {
+            issueAchievement(player, "repair");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.automation.superbuffer.tier.")) {
+            issueAchievement(player, "superbuffer");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.quantum.tank.tier.")) {
+            issueAchievement(player, "whereistheocean");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.quantum.chest.tier.")) {
+            issueAchievement(player, "newstorage");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.basicmachine.hammer.tier.")) {
+            issueAchievement(player, "cheapermac");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.automation.chestbuffer.tier.")) {
+            issueAchievement(player, "buffer");
+            issueAchievement(player, "buildBatBox");
+            if (stack.getUnlocalizedName()
+                .startsWith("gt.blockmachines.automation.chestbuffer.tier.3")) {
+                issueAchievement(player, "buildMFE");
+            }
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.basicgenerator.steamturbine.tier.")) {
+            issueAchievement(player, "steampower");
+            issueAchievement(player, "buildGenerator");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.basicmachine.assembler.tier.")) {
+            issueAchievement(player, "avengers");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.batterybuffer.")) {
+            issueAchievement(player, "batterys");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.basicmachine.amplifab.tier.")) {
+            issueAchievement(player, "amplifier");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.basicmachine.massfab.tier.")) {
+            issueAchievement(player, "universal");
+            issueAchievement(player, "buildMassFab");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.basicgenerator.naquadah.tier.")) {
+            issueAchievement(player, "alienpower");
+            return;
+        }
+        if (stack.getUnlocalizedName()
+            .startsWith("gt.blockmachines.basicmachine.replicator.tier.")) {
+            issueAchievement(player, "replication");
+            return;
+        }
+
+    }
+
+    @SubscribeEvent
+    public void onSmelting(ItemSmeltedEvent event) {
+        EntityPlayer player = event.player;
+        ItemStack stack = event.smelting;
+        if (player == null || stack == null) {
+            return;
+        }
+        if (stack.getItem() == Items.bread) {
+            event.player.triggerAchievement(AchievementList.makeBread);
+        }
+    }
+
+    @SubscribeEvent
+    public void onItemPickup(EntityItemPickupEvent event) {
+        EntityPlayer player = event.entityPlayer;
+        ItemStack stack = event.item.getEntityItem();
+        if (player == null || stack == null) {
+            return;
+        }
+        ItemData data = GTOreDictUnificator.getItemData(stack);
+        if (data != null && data.mPrefix != null) {
+            if (data.mPrefix == OrePrefixes.dust) {
+                if (data.mMaterial.mMaterial == Materials.Lutetium) {
+                    issueAchievement(player, "newmetal");
+                }
+                if (data.mMaterial.mMaterial != Materials.Gunpowder) {
+                    issueAchievement(player, "cleandust");
+                }
+            } else if (data.mPrefix.name()
+                .startsWith("ore")) {
+                    int data_getAllMaterialStacks_sS = data.getAllMaterialStacks()
+                        .size();
+                    for (int i = 0; i < data_getAllMaterialStacks_sS; i++) {
+                        issueAchievement(
+                            player,
+                            data.getAllMaterialStacks()
+                                .get(i).mMaterial.mName);
+                        if (data.getAllMaterialStacks()
+                            .get(i).mMaterial == Materials.AnyIron) {
+                            issueAchievement(player, "iron");
+                        }
+                        if (data.getAllMaterialStacks()
+                            .get(i).mMaterial == Materials.Copper
+                            || data.getAllMaterialStacks()
+                                .get(i).mMaterial == Materials.Tin) {
+                            issueAchievement(event.entityPlayer, "mineOre");
+                        }
+                    }
+                } else if (data.mPrefix == OrePrefixes.crushed) {
+                    issueAchievement(player, "crushed");
+                } else if (data.mPrefix == OrePrefixes.crushedPurified) {
+                    issueAchievement(player, "washing");
+                } else if (data.mPrefix == OrePrefixes.crushedCentrifuged) {
+                    issueAchievement(player, "spinit");
+                } else if (data.mMaterial.mMaterial == Materials.Steel) {
+                    if (data.mPrefix == OrePrefixes.ingot && stack.stackSize == stack.getMaxStackSize()) {
+                        issueAchievement(player, "steel");
+                    } else if (data.mPrefix == OrePrefixes.nugget && Thaumcraft.isModLoaded()
+                        && ThaumcraftApiHelper.isResearchComplete(player.getDisplayName(), "GT_IRON_TO_STEEL")) {
+                            issueAchievement(player, "steel");
+                        }
+                }
+        }
+        // GT_FML_LOGGER.info(stack.getUnlocalizedName());
+        switch (stack.getUnlocalizedName()) {
+            case "gt.metaitem.02.32500" -> issueAchievement(player, "havestlead");
+            case "gt.metaitem.02.32501" -> issueAchievement(player, "havestsilver");
+            case "gt.metaitem.02.32503" -> issueAchievement(player, "havestiron");
+            case "gt.metaitem.02.32504" -> issueAchievement(player, "havestgold");
+            case "gt.metaitem.02.32530" -> issueAchievement(player, "havestcopper");
+            case "gt.metaitem.02.32540" -> issueAchievement(player, "havesttin");
+            case "gt.metaitem.02.32510" -> issueAchievement(player, "havestoil");
+            case "gt.metaitem.02.32511" -> issueAchievement(player, "havestemeralds");
+            case "gt.metaitem.03.32082" -> issueAchievement(player, "energyflow");
+            case "gt.metaitem.01.32702" -> issueAchievement(player, "bettercircuits");
+            case "gt.metaitem.01.32707" -> issueAchievement(player, "datasaving");
+            case "gt.metaitem.01.32597" -> issueAchievement(player, "orbs");
+            case "gt.metaitem.01.32599" -> issueAchievement(player, "thatspower");
+            case "gt.metaitem.01.32598" -> issueAchievement(player, "luck");
+            case "gt.metaitem.01.32749" -> issueAchievement(player, "closeit");
+            case "gt.metaitem.01.32730" -> issueAchievement(player, "manipulation");
+            case "gt.metaitem.01.32729" -> issueAchievement(player, "filterregulate");
+            case "gt.metaitem.01.32605" -> issueAchievement(player, "whatnow");
+            case "gt.metaitem.01.32736" -> issueAchievement(player, "zpmage");
+            case "gt.metaitem.01.32737" -> issueAchievement(player, "uvage");
+            case "gt.metaitem.03.32030" -> issueAchievement(player, "gtmonosilicon");
+            case "gt.metaitem.03.32036" -> issueAchievement(player, "gtlogicwafer");
+            case "gt.metaitem.01.32701" -> issueAchievement(player, "gtlogiccircuit");
+            case "gt.metaitem.03.32085" -> issueAchievement(player, "gtquantumprocessor");
+            case "gt.metaitem.03.32089" -> issueAchievement(player, "gtcrystalprocessor");
+            case "gt.metaitem.03.32092" -> issueAchievement(player, "gtwetware");
+            case "gt.metaitem.03.32095" -> issueAchievement(player, "gtwetmain");
+            case "gt.Thoriumcell" -> issueAchievement(player, "newfuel");
+            case "ic2.itemPartCircuitAdv" -> issueAchievement(player, "stepforward");
+            case "gt.blockcasings5.1" -> issueAchievement(player, "upgrade");
+            case "gt.blockcasings5.2" -> issueAchievement(player, "upgrade2");
+            case "gt.blockcasings5.3" -> issueAchievement(player, "upgrade3");
+            case "gt.blockcasings5.4" -> issueAchievement(player, "upgrade4");
+            case "gt.blockcasings5.5" -> issueAchievement(player, "upgrade5");
+            case "gt.blockcasings5.6" -> issueAchievement(player, "over9000");
+            case "gt.blockcasings.15" -> issueAchievement(player, "conducting");
+            case "gt.metaitem.01.32761" -> { // Debug Scanner pickup shows all assline recipes.
+                if (player.capabilities.isCreativeMode) {
+                    for (GTRecipe recipe : RecipeMaps.assemblylineVisualRecipes.getAllRecipes()) {
+                        issueAchievement(
+                            player,
+                            recipe.getOutput(0)
+                                .getUnlocalizedName());
+                        recipe.mHidden = false;
+                    }
+                }
+            }
+        }
+
+        if ((stack.getItem() == Ic2Items.quantumBodyarmor.getItem())
+            || (stack.getItem() == Ic2Items.quantumBoots.getItem())
+            || (stack.getItem() == Ic2Items.quantumHelmet.getItem())
+            || (stack.getItem() == Ic2Items.quantumLeggings.getItem())) {
+            issueAchievement(player, "buildQArmor");
+        }
+
+        for (GTRecipe recipe : RecipeMaps.assemblylineVisualRecipes.getAllRecipes()) {
+            if (recipe.getOutput(0)
+                .getUnlocalizedName()
+                .equals(stack.getUnlocalizedName())) {
+                issueAchievement(
+                    player,
+                    recipe.getOutput(0)
+                        .getUnlocalizedName());
+                recipe.mHidden = false;
+            }
+        }
+    }
+}
diff --git a/src/main/java/gregtech/loaders/misc/GTBeeDefinition.java b/src/main/java/gregtech/loaders/misc/GTBeeDefinition.java
new file mode 100644
index 0000000000..c8fcf5839e
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/GTBeeDefinition.java
@@ -0,0 +1,2818 @@
+package gregtech.loaders.misc;
+
+import static forestry.api.apiculture.EnumBeeChromosome.CAVE_DWELLING;
+import static forestry.api.apiculture.EnumBeeChromosome.EFFECT;
+import static forestry.api.apiculture.EnumBeeChromosome.FERTILITY;
+import static forestry.api.apiculture.EnumBeeChromosome.FLOWERING;
+import static forestry.api.apiculture.EnumBeeChromosome.FLOWER_PROVIDER;
+import static forestry.api.apiculture.EnumBeeChromosome.HUMIDITY_TOLERANCE;
+import static forestry.api.apiculture.EnumBeeChromosome.LIFESPAN;
+import static forestry.api.apiculture.EnumBeeChromosome.NOCTURNAL;
+import static forestry.api.apiculture.EnumBeeChromosome.SPECIES;
+import static forestry.api.apiculture.EnumBeeChromosome.SPEED;
+import static forestry.api.apiculture.EnumBeeChromosome.TEMPERATURE_TOLERANCE;
+import static forestry.api.apiculture.EnumBeeChromosome.TERRITORY;
+import static forestry.api.apiculture.EnumBeeChromosome.TOLERANT_FLYER;
+import static forestry.api.core.EnumHumidity.ARID;
+import static forestry.api.core.EnumHumidity.DAMP;
+import static forestry.api.core.EnumTemperature.COLD;
+import static forestry.api.core.EnumTemperature.HELLISH;
+import static forestry.api.core.EnumTemperature.HOT;
+import static forestry.api.core.EnumTemperature.ICY;
+import static forestry.api.core.EnumTemperature.NORMAL;
+import static forestry.api.core.EnumTemperature.WARM;
+import static forestry.core.genetics.alleles.EnumAllele.Fertility;
+import static forestry.core.genetics.alleles.EnumAllele.Flowering;
+import static forestry.core.genetics.alleles.EnumAllele.Flowers;
+import static forestry.core.genetics.alleles.EnumAllele.Lifespan;
+import static forestry.core.genetics.alleles.EnumAllele.Speed;
+import static forestry.core.genetics.alleles.EnumAllele.Territory;
+import static forestry.core.genetics.alleles.EnumAllele.Tolerance;
+import static gregtech.api.enums.Mods.AdvancedSolarPanel;
+import static gregtech.api.enums.Mods.AppliedEnergistics2;
+import static gregtech.api.enums.Mods.Avaritia;
+import static gregtech.api.enums.Mods.AvaritiaAddons;
+import static gregtech.api.enums.Mods.BiomesOPlenty;
+import static gregtech.api.enums.Mods.CropsPlusPlus;
+import static gregtech.api.enums.Mods.EnderStorage;
+import static gregtech.api.enums.Mods.ExtraBees;
+import static gregtech.api.enums.Mods.ExtraCells2;
+import static gregtech.api.enums.Mods.ExtraUtilities;
+import static gregtech.api.enums.Mods.Forestry;
+import static gregtech.api.enums.Mods.GalacticraftCore;
+import static gregtech.api.enums.Mods.GalacticraftMars;
+import static gregtech.api.enums.Mods.GalaxySpace;
+import static gregtech.api.enums.Mods.HardcoreEnderExpansion;
+import static gregtech.api.enums.Mods.IndustrialCraft2;
+import static gregtech.api.enums.Mods.MagicBees;
+import static gregtech.api.enums.Mods.NewHorizonsCoreMod;
+import static gregtech.api.enums.Mods.PamsHarvestCraft;
+import static gregtech.api.enums.Mods.TaintedMagic;
+import static gregtech.api.enums.Mods.Thaumcraft;
+import static gregtech.api.enums.Mods.ThaumicBases;
+import static gregtech.api.enums.Mods.TinkerConstruct;
+import static gregtech.loaders.misc.GTBeeDefinitionReference.EXTRABEES;
+import static gregtech.loaders.misc.GTBeeDefinitionReference.FORESTRY;
+import static gregtech.loaders.misc.GTBeeDefinitionReference.GENDUSTRY;
+import static gregtech.loaders.misc.GTBeeDefinitionReference.GREGTECH;
+import static gregtech.loaders.misc.GTBeeDefinitionReference.MAGICBEES;
+
+import java.awt.Color;
+import java.util.Arrays;
+import java.util.Locale;
+import java.util.function.Consumer;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+import org.apache.commons.lang3.text.WordUtils;
+
+import cpw.mods.fml.common.registry.GameRegistry;
+import forestry.api.apiculture.BeeManager;
+import forestry.api.apiculture.EnumBeeType;
+import forestry.api.apiculture.IAlleleBeeEffect;
+import forestry.api.apiculture.IAlleleBeeSpecies;
+import forestry.api.apiculture.IBee;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeMutationCustom;
+import forestry.api.core.EnumHumidity;
+import forestry.api.core.EnumTemperature;
+import forestry.api.genetics.AlleleManager;
+import forestry.api.genetics.IAllele;
+import forestry.api.genetics.IAlleleFlowers;
+import forestry.api.genetics.IMutationCustom;
+import forestry.apiculture.genetics.Bee;
+import forestry.apiculture.genetics.IBeeDefinition;
+import forestry.apiculture.genetics.alleles.AlleleEffect;
+import forestry.core.genetics.alleles.AlleleHelper;
+import gregtech.api.GregTechAPI;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.MaterialsKevlar;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GTLanguageManager;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.JubilanceMegaApiary;
+import gregtech.common.bees.GTAlleleBeeSpecies;
+import gregtech.common.bees.GTBeeMutation;
+import gregtech.common.items.CombType;
+import gregtech.common.items.DropType;
+import gregtech.common.items.PropolisType;
+import gregtech.loaders.misc.bees.GTFlowers;
+import gtnhlanth.common.register.WerkstoffMaterialPool;
+
+/**
+ * Bride Class for Lambdas
+ */
+class GTBeeDefinitionReference {
+
+    protected static final byte FORESTRY = 0;
+    protected static final byte EXTRABEES = 1;
+    protected static final byte GENDUSTRY = 2;
+    protected static final byte MAGICBEES = 3;
+    protected static final byte GREGTECH = 4;
+
+    private GTBeeDefinitionReference() {}
+}
+
+public enum GTBeeDefinition implements IBeeDefinition {
+
+    // organic
+    CLAY(GTBranchDefinition.ORGANIC, "Clay", true, new Color(0xC8C8DA), new Color(0x0000FF), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 0), 0.30f);
+        beeSpecies.addProduct(new ItemStack(Items.clay_ball, 1), 0.15f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(BiomesOPlenty.ID, "mudball", 1, 0), 0.05f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> {
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOWER);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.VANILLA);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis
+            .registerMutation(getSpecies(FORESTRY, "Industrious"), getSpecies(FORESTRY, "Diligent"), 10);
+        tMutation.requireResource(Blocks.clay, 0); // blockStainedHardenedClay
+    }),
+    SLIMEBALL(GTBranchDefinition.ORGANIC, "SlimeBall", true, new Color(0x4E9E55), new Color(0x00FF15), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 15), 0.30f);
+        beeSpecies.addProduct(new ItemStack(Items.slime_ball, 1), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.STICKY), 0.05f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        if (TinkerConstruct.isModLoaded()) {
+            beeSpecies.addProduct(GTModHandler.getModItem(TinkerConstruct.ID, "strangeFood", 1, 0), 0.10f);
+            beeSpecies.addSpecialty(GTModHandler.getModItem(TinkerConstruct.ID, "slime.gel", 1, 2), 0.02f);
+        }
+    }, template -> {
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.MUSHROOMS);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOWER);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "water"));
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Marshy"), CLAY, 7);
+        if (TinkerConstruct.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(TinkerConstruct.ID, "slime.gel"), 1);
+    }),
+    PEAT(GTBranchDefinition.ORGANIC, "Peat", true, new Color(0x906237), new Color(0x58300B), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.LIGNIE), 0.30f);
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 0), 0.15f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(Forestry.ID, "peat", 1, 0), 0.15f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(Forestry.ID, "mulch", 1, 0), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.WHEAT);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.FASTER);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
+    }, dis -> dis.registerMutation(getSpecies(FORESTRY, "Rural"), CLAY, 10)),
+    STICKYRESIN(GTBranchDefinition.ORGANIC, "StickyResin", true, new Color(0x2E8F5B), new Color(0xDCC289),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 0), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.STICKY), 0.15f);
+            beeSpecies.addSpecialty(ItemList.IC2_Resin.get(1), 0.15f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        }, template -> {
+            AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOWER);
+            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(SLIMEBALL, PEAT, 15);
+            tMutation.requireResource("logRubber");
+        }),
+    COAL(GTBranchDefinition.ORGANIC, "Coal", true, new Color(0x666666), new Color(0x525252), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.LIGNIE), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.COAL), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> {
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.CACTI);
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.DOWN_1);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectCreeper);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Industrious"), PEAT, 9);
+        tMutation.requireResource("blockCoal");
+    }),
+    OIL(GTBranchDefinition.ORGANIC, "Oil", true, new Color(0x4C4C4C), new Color(0x333333), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 0), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.OIL), 0.75f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOWER);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.NORMAL);
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "water"));
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
+    }, dis -> dis.registerMutation(COAL, STICKYRESIN, 4)),
+    SANDWICH(GTBranchDefinition.ORGANIC, "Sandwich", true, new Color(0x32CD32), new Color(0xDAA520), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 9), 0.15f);
+        beeSpecies.addSpecialty(ItemList.Food_Sliced_Cucumber.get(1), 0.05f);
+        beeSpecies.addSpecialty(ItemList.Food_Sliced_Onion.get(1), 0.05f);
+        beeSpecies.addSpecialty(ItemList.Food_Sliced_Tomato.get(1), 0.05f);
+        beeSpecies.addSpecialty(ItemList.Food_Sliced_Cheese.get(1), 0.05f);
+        beeSpecies.addSpecialty(new ItemStack(Items.cooked_porkchop, 1, 0), 0.05f);
+        beeSpecies.addSpecialty(new ItemStack(Items.cooked_beef, 1, 0), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOW);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_2);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectFertile);
+        AlleleHelper.instance.set(template, TERRITORY, Territory.LARGE);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.WHEAT);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.FASTER);
+    }, dis -> dis.registerMutation(getSpecies(FORESTRY, "Agrarian"), getSpecies(MAGICBEES, "TCBatty"), 10)),
+    ASH(GTBranchDefinition.ORGANIC, "Ash", true, new Color(0x1e1a18), new Color(0xc6c6c6), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 9), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ASH), 0.15f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.NORMAL);
+        AlleleHelper.instance.set(template, TERRITORY, Territory.LARGE);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.WHEAT);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.FASTER);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(COAL, CLAY, 10);
+        tMutation.restrictTemperature(HELLISH);
+    }),
+    APATITE(GTBranchDefinition.ORGANIC, "Apatite", true, new Color(0xc1c1f6), new Color(0x676784), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 9), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.APATITE), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(WARM);
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FASTEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.WHEAT);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.FASTER);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(ASH, COAL, 10);
+        tMutation.requireResource("blockApatite");
+    }),
+    FERTILIZER(GTBranchDefinition.ORGANIC, "Fertilizer", true, new Color(0x7fcef5), new Color(0x654525), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 9), 0.15f);
+        beeSpecies.addSpecialty(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1), 0.2f);
+        beeSpecies.addSpecialty(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1), 0.2f);
+        beeSpecies.addSpecialty(ItemList.FR_Fertilizer.get(1), 0.3f);
+        beeSpecies.addSpecialty(ItemList.IC2_Fertilizer.get(1), 0.3f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(WARM);
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FASTEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.WHEAT);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.FASTER);
+    }, dis -> dis.registerMutation(ASH, APATITE, 8)),
+    // Phosphorus bee, Humidity: normal, Temperature: Hot, Parents: Apatite & Ash, Mutationrate: 12%, Combrate: 55%
+    PHOSPHORUS(GTBranchDefinition.ORGANIC, "Phosphorus", false, new Color(0xFFC826), new Color(0xC1C1F6),
+        beeSpecies -> {
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.PHOSPHORUS), 0.35f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(HOT);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(APATITE, ASH, 12);
+            tMutation.restrictTemperature(HOT);
+            GregTechAPI.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTechAPI.sBlockGem2, 8));
+        }),
+    // Tea bee, Humidity: normal, Parents: Ash and Fertilizer, Mutationrate: 10%, combrate: 10%
+    TEA(GTBranchDefinition.ORGANIC, "Tea", false, new Color(0x65D13A), new Color(0x9a9679), beeSpecies -> {
+        beeSpecies.addProduct(
+            GTModHandler.getModItem(PamsHarvestCraft.ID, "tealeafItem", 1, ItemList.Crop_Drop_TeaLeaf.get(1)),
+            0.10f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST),
+        dis -> dis.registerMutation(FERTILIZER, ASH, 10)),
+    // Mica bee, Humidity: normal, Parents: Silicon & PEAT, Mutationrate: 15%, Combrate: 25%
+    MICA(GTBranchDefinition.ORGANIC, "Mica", false, new Color(0xFFC826), new Color(0xC1C1F6), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.MICA), 0.25f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(HOT);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(PEAT, getSpecies(MAGICBEES, "Silicon"), 15);
+        GregTechAPI.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTechAPI.sBlockCasings5, 0));
+    }),
+
+    // gems
+    REDSTONE(GTBranchDefinition.GEM, "Redstone", true, new Color(0x7D0F0F), new Color(0xD11919), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.REDSTONE), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.RAREEARTH), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis
+            .registerMutation(getSpecies(FORESTRY, "Industrious"), getSpecies(FORESTRY, "Demonic"), 10);
+        tMutation.requireResource("blockRedstone");
+    }),
+    LAPIS(GTBranchDefinition.GEM, "Lapis", true, new Color(0x1947D1), new Color(0x476CDA), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.LAPIS), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis
+            .registerMutation(getSpecies(FORESTRY, "Demonic"), getSpecies(FORESTRY, "Imperial"), 10);
+        tMutation.requireResource("blockLapis");
+    }),
+    CERTUS(GTBranchDefinition.GEM, "CertusQuartz", true, new Color(0x57CFFB), new Color(0xBBEEFF), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.CERTUS), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Hermitic"), LAPIS, 10);
+        tMutation.requireResource(GameRegistry.findBlock(AppliedEnergistics2.ID, "tile.BlockQuartz"), 0);
+    }),
+    FLUIX(GTBranchDefinition.GEM, "FluixDust", true, new Color(0xA375FF), new Color(0xB591FF), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.FLUIX), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, LAPIS, 7);
+        tMutation.requireResource(GameRegistry.findBlock(AppliedEnergistics2.ID, "tile.BlockFluix"), 0);
+    }),
+    DIAMOND(GTBranchDefinition.GEM, "Diamond", false, new Color(0xCCFFFF), new Color(0xA3CCCC), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.DIAMOND), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(HOT);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(CERTUS, COAL, 3);
+        tMutation.requireResource("blockDiamond");
+    }),
+    RUBY(GTBranchDefinition.GEM, "Ruby", false, new Color(0xE6005C), new Color(0xCC0052), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.RUBY), 0.15f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.REDGARNET), 0.05f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, DIAMOND, 5);
+        tMutation.requireResource("blockRuby");
+    }),
+    SAPPHIRE(GTBranchDefinition.GEM, "Sapphire", true, new Color(0x0033CC), new Color(0x00248F), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.SAPPHIRE), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(CERTUS, LAPIS, 5);
+        tMutation.requireResource(GregTechAPI.sBlockGem2, 12);
+    }),
+    OLIVINE(GTBranchDefinition.GEM, "Olivine", true, new Color(0x248F24), new Color(0xCCFFCC), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.OLIVINE), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.MAGNESIUM), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER),
+        dis -> dis.registerMutation(CERTUS, getSpecies(FORESTRY, "Ended"), 5)),
+    EMERALD(GTBranchDefinition.GEM, "Emerald", false, new Color(0x248F24), new Color(0x2EB82E), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.EMERALD), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ALUMINIUM), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(OLIVINE, DIAMOND, 4);
+        tMutation.requireResource("blockEmerald");
+    }),
+    REDGARNET(GTBranchDefinition.GEM, "RedGarnet", false, new Color(0xBD4C4C), new Color(0xECCECE), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.REDGARNET), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.PYROPE), 0.05f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(WARM);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(DIAMOND, RUBY, 4);
+        tMutation.requireResource("blockGarnetRed");
+    }),
+    YELLOWGARNET(GTBranchDefinition.GEM, "YellowGarnet", false, new Color(0xA3A341), new Color(0xEDEDCE),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.YELLOWGARNET), 0.15f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.GROSSULAR), 0.05f);
+            beeSpecies.setHumidity(DAMP);
+            beeSpecies.setTemperature(WARM);
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(EMERALD, REDGARNET, 3);
+            tMutation.requireResource("blockGarnetYellow");
+        }),
+    FIRESTONE(GTBranchDefinition.GEM, "Firestone", false, new Color(0xC00000), new Color(0xFF0000), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.FIRESTONE), 0.15f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(WARM);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, RUBY, 4);
+        tMutation.requireResource("blockFirestone");
+    }),
+
+    // Metal Line
+    COPPER(GTBranchDefinition.METAL, "Copper", true, new Color(0xFF6600), new Color(0xE65C00), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.COPPER), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.GOLD), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Majestic"), CLAY, 13);
+        tMutation.requireResource("blockCopper");
+    }),
+    TIN(GTBranchDefinition.METAL, "Tin", true, new Color(0xD4D4D4), new Color(0xDDDDDD), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.TIN), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ZINC), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(CLAY, getSpecies(FORESTRY, "Diligent"), 13);
+        tMutation.requireResource("blockTin");
+    }),
+    LEAD(GTBranchDefinition.METAL, "Lead", true, new Color(0x666699), new Color(0xA3A3CC), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.LEAD), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.SULFUR), 0.05f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(WARM);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(COAL, COPPER, 13);
+        tMutation.requireResource("blockLead");
+    }),
+    IRON(GTBranchDefinition.METAL, "Iron", true, new Color(0xDA9147), new Color(0xDE9C59), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.IRON), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.TIN), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(TIN, COPPER, 13);
+        tMutation.requireResource("blockIron");
+    }),
+    STEEL(GTBranchDefinition.METAL, "Steel", true, new Color(0x808080), new Color(0x999999), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STEEL), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.IRON), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(WARM);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(IRON, COAL, 10);
+        tMutation.requireResource(GregTechAPI.sBlockMetal6, 13);
+    }),
+    NICKEL(GTBranchDefinition.METAL, "Nickel", true, new Color(0x8585AD), new Color(0x8585AD), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.NICKEL), 0.15f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.PLATINUM), 0.02f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(IRON, COPPER, 13);
+        tMutation.requireResource("blockNickel");
+    }),
+    ZINC(GTBranchDefinition.METAL, "Zinc", true, new Color(0xF0DEF0), new Color(0xF2E1F2), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.ZINC), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.GALLIUM), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(IRON, TIN, 13);
+        tMutation.requireResource("blockZinc");
+    }),
+    SILVER(GTBranchDefinition.METAL, "Silver", true, new Color(0xC2C2D6), new Color(0xCECEDE), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SILVER), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.SULFUR), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(COLD);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(LEAD, TIN, 10);
+        tMutation.requireResource("blockSilver");
+    }),
+    CRYOLITE(GTBranchDefinition.METAL, "Cryolite", true, new Color(0xBFEFFF), new Color(0x73B9D0), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.CRYOLITE), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.SILVER), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(WARM);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.FASTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(LEAD, SILVER, 9);
+        tMutation.requireResource("blockCryolite");
+    }),
+    GOLD(GTBranchDefinition.METAL, "Gold", true, new Color(0xEBC633), new Color(0xEDCC47), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.GOLD), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.NICKEL), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(WARM);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(LEAD, COPPER, 13);
+        tMutation.requireResource("blockGold");
+        tMutation.restrictTemperature(HOT);
+    }),
+    ARSENIC(GTBranchDefinition.METAL, "Arsenic", true, new Color(0x736C52), new Color(0x292412), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.ARSENIC), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(WARM);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(ZINC, SILVER, 10);
+        tMutation.requireResource("blockArsenic");
+    }),
+
+    // Rare Metals
+    ALUMINIUM(GTBranchDefinition.RAREMETAL, "Aluminium", true, new Color(0xB8B8FF), new Color(0xD6D6FF), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.ALUMINIUM), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.BAUXITE), 0.05f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(NICKEL, ZINC, 9);
+        tMutation.requireResource("blockAluminium");
+    }),
+    TITANIUM(GTBranchDefinition.RAREMETAL, "Titanium", true, new Color(0xCC99FF), new Color(0xDBB8FF), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.TITANIUM), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ALMANDINE), 0.05f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, ALUMINIUM, 5);
+        tMutation.requireResource(GregTechAPI.sBlockMetal7, 9);
+    }),
+    GLOWSTONE(GTBranchDefinition.RAREMETAL, "Glowstone", false, new Color(0xE5CA2A), new Color(0xFFBC5E),
+        beeSpecies -> {
+            beeSpecies.addSpecialty(Materials.Glowstone.getDust(1), 0.20f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.NORMAL),
+        dis -> dis.registerMutation(REDSTONE, GOLD, 10)),
+    SUNNARIUM(GTBranchDefinition.RAREMETAL, "Sunnarium", false, new Color(0xFFBC5E), new Color(0xE5CA2A),
+        beeSpecies -> {
+            beeSpecies.addProduct(Materials.Glowstone.getDust(1), 0.30f);
+            beeSpecies.addSpecialty(Materials.Sunnarium.getDust(1), 0.05f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST), dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(GLOWSTONE, GOLD, 5);
+            GregTechAPI.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTechAPI.sBlockCasings1, 15));
+        }),
+    CHROME(GTBranchDefinition.RAREMETAL, "Chrome", true, new Color(0xEBA1EB), new Color(0xF2C3F2), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.CHROME), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.MAGNESIUM), 0.05f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(TITANIUM, RUBY, 5);
+        tMutation.requireResource(GregTechAPI.sBlockMetal2, 3);
+    }),
+    MANGANESE(GTBranchDefinition.RAREMETAL, "Manganese", true, new Color(0xD5D5D5), new Color(0xAAAAAA), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.MANGANESE), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.IRON), 0.05f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(TITANIUM, ALUMINIUM, 5);
+        tMutation.requireResource(GregTechAPI.sBlockMetal4, 6);
+    }),
+    TUNGSTEN(GTBranchDefinition.RAREMETAL, "Tungsten", false, new Color(0x5C5C8A), new Color(0x7D7DA1), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.TUNGSTEN), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.MOLYBDENUM), 0.05f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Heroic"), MANGANESE, 5);
+        tMutation.requireResource(GregTechAPI.sBlockMetal7, 11);
+    }),
+    PLATINUM(GTBranchDefinition.RAREMETAL, "Platinum", false, new Color(0xE6E6E6), new Color(0xFFFFCC), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.PLATINUM), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.IRIDIUM), 0.02f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(DIAMOND, CHROME, 5);
+        tMutation.requireResource("blockNickel");
+    }),
+    IRIDIUM(GTBranchDefinition.RAREMETAL, "Iridium", false, new Color(0xDADADA), new Color(0xD1D1E0), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.IRIDIUM), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.OSMIUM), 0.05f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.PALLADIUM), 0.30f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(TUNGSTEN, PLATINUM, 5);
+        tMutation.requireResource(GregTechAPI.sBlockMetal3, 12);
+    }),
+    OSMIUM(GTBranchDefinition.RAREMETAL, "Osmium", false, new Color(0x2B2BDA), new Color(0x8B8B8B), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.OSMIUM), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.IRIDIUM), 0.05f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(TUNGSTEN, PLATINUM, 5);
+        tMutation.requireResource(GregTechAPI.sBlockMetal5, 9);
+    }),
+    SALTY(GTBranchDefinition.RAREMETAL, "Salt", true, new Color(0xF0C8C8), new Color(0xFAFAFA), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.SALT), 0.35f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.LITHIUM), 0.05f);
+        beeSpecies.addSpecialty(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Borax, 1L), 0.1f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(WARM);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(CLAY, ALUMINIUM, 5);
+        tMutation.requireResource("blockSalt");
+    }),
+    LITHIUM(GTBranchDefinition.RAREMETAL, "Lithium", false, new Color(0xF0328C), new Color(0xE1DCFF), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.LITHIUM), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.SALT), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(COLD);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(SALTY, ALUMINIUM, 5);
+        tMutation.requireResource("frameGtLithium");
+    }),
+    ELECTROTINE(GTBranchDefinition.RAREMETAL, "Electrotine", false, new Color(0x1E90FF), new Color(0x3CB4C8),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ELECTROTINE), 0.15f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.REDSTONE), 0.05f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(HOT);
+        }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, GOLD, 5);
+            tMutation.requireResource("blockElectrotine");
+        }),
+    // Sulfur bee, Humidity: normal, Temperature: Hot, Parents: PEAT & Ash, Mutationrate: 15%, Combrate: 80%
+    SULFUR(GTBranchDefinition.RAREMETAL, "Sulfur", false, new Color(0x1E90FF), new Color(0x3CB4C8), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SULFUR), 0.70f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.FIRESTONE), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.NORMAL),
+        dis -> dis.registerMutation(ASH, PEAT, 15)),
+
+    INDIUM(GTBranchDefinition.RAREMETAL, "Indium", false, new Color(0xFFA9FF), new Color(0x8F5D99), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.INDIUM), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(LEAD, OSMIUM, 1);
+        tMutation.requireResource("blockIndium");
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(39, "Venus")); // Venus Dim
+        // Harder mutation that isn't dim locked
+        tMutation = dis.registerMutation(SILVER, OSMIUM, 1);
+        tMutation.requireResource("blockCinobiteA243");
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(60, "Bedrock")); // Thaumic Tinkerer
+                                                                                              // Bedrock Dim
+    }),
+
+    // IC2
+    COOLANT(GTBranchDefinition.IC2, "Coolant", false, new Color(0x144F5A), new Color(0x2494A2), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 4), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.COOLANT), 0.15f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOW);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectGlacial);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis
+            .registerMutation(getSpecies(FORESTRY, "Icy"), getSpecies(FORESTRY, "Glacial"), 10);
+        tMutation.requireResource(
+            Block.getBlockFromItem(
+                GTModHandler.getModItem(IndustrialCraft2.ID, "fluidCoolant", 1)
+                    .getItem()),
+            0);
+        tMutation.restrictTemperature(ICY);
+    }),
+    ENERGY(GTBranchDefinition.IC2, "Energy", false, new Color(0xC11F1F), new Color(0xEBB9B9), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 12), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ENERGY), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(WARM);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.NETHER);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis
+            .registerMutation(getSpecies(FORESTRY, "Demonic"), getSpecies(EXTRABEES, "volcanic"), 10);
+        tMutation.requireResource(
+            Block.getBlockFromItem(
+                GTModHandler.getModItem(IndustrialCraft2.ID, "fluidHotCoolant", 1)
+                    .getItem()),
+            0);
+        tMutation.addMutationCondition(new GTBees.BiomeIDMutationCondition(128, "Boneyard Biome")); // Boneyard Biome
+    }),
+    LAPOTRON(GTBranchDefinition.IC2, "Lapotron", false, new Color(0x6478FF), new Color(0x1414FF), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.LAPIS), 0.20f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ENERGY), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.LAPOTRON), 0.10f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(LAPIS, ENERGY, 6);
+        tMutation.requireResource("blockLapis");
+        tMutation.restrictTemperature(ICY);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(28, "Moon")); // moon dim
+    }),
+    PYROTHEUM(GTBranchDefinition.IC2, "Pyrotheum", false, new Color(0xffebc4), new Color(0xe36400), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.ENERGY), 0.20f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.PYROTHEUM), 0.15f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FASTEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.NETHER);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, ENERGY, 4);
+        tMutation.restrictTemperature(HELLISH);
+    }),
+    CRYOTHEUM(GTBranchDefinition.IC2, "Cryotheum", false, new Color(0x2660ff), new Color(0x5af7ff), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.BLIZZ), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.CRYOTHEUM), 0.20f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectSnowing);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, COOLANT, 4);
+        tMutation.restrictTemperature(ICY);
+    }),
+    Explosive(GTBranchDefinition.IC2, "explosive", false, new Color(0x7E270F), new Color(0x747474), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getIC2Item("industrialTnt", 1L), 0.2f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectSnowing);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(FIRESTONE, COAL, 4);
+        tMutation.requireResource(GameRegistry.findBlock(IndustrialCraft2.ID, "blockITNT"), 0);
+    }),
+    // Alloy
+    REDALLOY(GTBranchDefinition.GTALLOY, "RedAlloy", false, new Color(0xE60000), new Color(0xB80000), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.REDALLOY), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(COPPER, REDSTONE, 10);
+        tMutation.requireResource("blockRedAlloy");
+    }),
+    REDSTONEALLOY(GTBranchDefinition.GTALLOY, "RedStoneAlloy", false, new Color(0xA50808), new Color(0xE80000),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.REDSTONEALLOY), 0.15f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, REDALLOY, 8);
+            tMutation.requireResource("blockRedstoneAlloy");
+        }),
+    CONDUCTIVEIRON(GTBranchDefinition.GTALLOY, "ConductiveIron", false, new Color(0xCEADA3), new Color(0x817671),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.CONDUCTIVEIRON), 0.15f);
+            beeSpecies.setHumidity(DAMP);
+            beeSpecies.setTemperature(WARM);
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(REDSTONEALLOY, IRON, 8);
+            tMutation.requireResource("blockConductiveIron");
+        }),
+    ENERGETICALLOY(GTBranchDefinition.GTALLOY, "EnergeticAlloy", false, new Color(0xFF9933), new Color(0xFFAD5C),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ENERGETICALLOY), 0.15f);
+            beeSpecies.setHumidity(DAMP);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(REDSTONEALLOY, getSpecies(FORESTRY, "Demonic"), 9);
+            tMutation.requireResource("blockEnergeticAlloy");
+        }),
+    VIBRANTALLOY(GTBranchDefinition.GTALLOY, "VibrantAlloy", false, new Color(0x86A12D), new Color(0xC4F2AE),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.VIBRANTALLOY), 0.15f);
+            beeSpecies.setHumidity(DAMP);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+            AlleleHelper.instance.set(template, FLOWERING, Flowering.FAST);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(ENERGETICALLOY, getSpecies(FORESTRY, "Phantasmal"), 6);
+            tMutation.requireResource("blockVibrantAlloy");
+            tMutation.restrictTemperature(HOT, HELLISH);
+        }),
+    ELECTRICALSTEEL(GTBranchDefinition.GTALLOY, "ElectricalSteel", false, new Color(0x787878), new Color(0xD8D8D8),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ELECTRICALSTEEL), 0.15f);
+            beeSpecies.setHumidity(DAMP);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(STEEL, getSpecies(FORESTRY, "Demonic"), 9);
+            tMutation.requireResource("blockElectricalSteel");
+        }),
+    DARKSTEEL(GTBranchDefinition.GTALLOY, "DarkSteel", false, new Color(0x252525), new Color(0x443B44), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.DARKSTEEL), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(COLD);
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(ELECTRICALSTEEL, getSpecies(FORESTRY, "Demonic"), 7);
+        tMutation.requireResource("blockDarkSteel");
+    }),
+    PULSATINGIRON(GTBranchDefinition.GTALLOY, "PulsatingIron", false, new Color(0x6DD284), new Color(0x006600),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.PULSATINGIRON), 0.15f);
+            beeSpecies.setHumidity(DAMP);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(REDALLOY, getSpecies(FORESTRY, "Ended"), 9);
+            tMutation.requireResource("blockPulsatingIron");
+        }),
+    STAINLESSSTEEL(GTBranchDefinition.GTALLOY, "StainlessSteel", false, new Color(0xC8C8DC), new Color(0x778899),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STEEL), 0.10f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.STAINLESSSTEEL), 0.15f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.CHROME), 0.05f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(HOT);
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(CHROME, STEEL, 9);
+            tMutation.requireResource("blockStainlessSteel");
+        }),
+    ENDERIUM(GTBranchDefinition.GTALLOY, "Enderium", false, new Color(0x599087), new Color(0x2E8B57), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ENDERIUM), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.CHROME), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(HOT);
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, GTBees.speedBlinding);
+        AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "teleport"));
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(PLATINUM, getSpecies(FORESTRY, "Phantasmal"), 3);
+        tMutation.requireResource("blockEnderium");
+    }),
+    BEDROCKIUM(GTBranchDefinition.GTALLOY, "Bedrockium", false, new Color(0x0C0C0C), new Color(0xC6C6C6),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.20f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.BEDROCKIUM), 0.55f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(HOT);
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOW);
+            AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "gravity"));
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(Explosive, DIAMOND, 2);
+            if (ExtraUtilities.isModLoaded())
+                tMutation.requireResource(GameRegistry.findBlock(ExtraUtilities.ID, "block_bedrockium"), 0);
+        }),
+
+    // thaumic
+    THAUMIUMDUST(GTBranchDefinition.THAUMIC, "ThaumiumDust", true, new Color(0x7A007A), new Color(0x5C005C),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 3), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.THAUMIUMDUST), 0.20f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
+            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_2);
+            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectExploration);
+            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.UP_1);
+            AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.JUNGLE);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis
+                .registerMutation(getSpecies(MAGICBEES, "TCFire"), getSpecies(FORESTRY, "Edenic"), 10);
+            tMutation.requireResource("blockThaumium");
+            tMutation.addMutationCondition(new GTBees.BiomeIDMutationCondition(192, "Magical Forest")); // magical
+                                                                                                        // forest
+        }),
+    THAUMIUMSHARD(GTBranchDefinition.THAUMIC, "ThaumiumShard", true, new Color(0x9966FF), new Color(0xAD85FF),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.THAUMIUMDUST), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.THAUMIUMSHARD), 0.20f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
+            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+            AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
+            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectGlacial);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(THAUMIUMDUST, getSpecies(MAGICBEES, "TCWater"), 10);
+            tMutation.addMutationCondition(new GTBees.BiomeIDMutationCondition(192, "Magical Forest")); // magical
+                                                                                                        // forest
+        }),
+    AMBER(GTBranchDefinition.THAUMIC, "Amber", true, new Color(0xEE7700), new Color(0x774B15), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 3), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.AMBER), 0.20f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(THAUMIUMDUST, STICKYRESIN, 10);
+        tMutation.requireResource("blockAmber");
+    }),
+    QUICKSILVER(GTBranchDefinition.THAUMIC, "Quicksilver", true, new Color(0x7A007A), new Color(0x5C005C),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 3), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.QUICKSILVER), 0.20f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
+            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.UP_1);
+            AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.JUNGLE);
+            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectMiasmic);
+        }, dis -> dis.registerMutation(THAUMIUMDUST, SILVER, 10)),
+    SALISMUNDUS(GTBranchDefinition.THAUMIC, "SalisMundus", true, new Color(0xF7ADDE), new Color(0x592582),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 3), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.SALISMUNDUS), 0.20f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
+            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.UP_1);
+            AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.JUNGLE);
+            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectMiasmic);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(THAUMIUMDUST, THAUMIUMSHARD, 8);
+            tMutation.addMutationCondition(new GTBees.BiomeIDMutationCondition(192, "Magical Forest")); // magical
+                                                                                                        // forest
+        }),
+    TAINTED(GTBranchDefinition.THAUMIC, "Tainted", true, new Color(0x904BB8), new Color(0xE800FF), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 3), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.TAINTED), 0.20f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, CAVE_DWELLING, true);
+        AlleleHelper.instance.set(template, TOLERANT_FLYER, true);
+        AlleleHelper.instance.set(template, FERTILITY, Fertility.LOW);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(THAUMIUMDUST, THAUMIUMSHARD, 7);
+        tMutation.addMutationCondition(new GTBees.BiomeIDMutationCondition(193, "Tainted Land")); // Tainted Land
+    }),
+    MITHRIL(GTBranchDefinition.THAUMIC, "Mithril", true, new Color(0xF0E68C), new Color(0xFFFFD2), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.PLATINUM), 0.20f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.MITHRIL), 0.125f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> {
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, CAVE_DWELLING, true);
+        AlleleHelper.instance.set(template, TOLERANT_FLYER, true);
+        AlleleHelper.instance.set(template, FERTILITY, Fertility.LOW);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
+    }, new Consumer<>() {
+
+        @Override
+        public void accept(GTBeeDefinition dis) {
+            IBeeMutationCustom tMutation = dis.registerMutation(IO, PLATINUM, 7);
+            tMutation.requireResource(GregTechAPI.sBlockMetal4, 10);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(36, "IO")); // IO Dim
+        }
+    }),
+    ASTRALSILVER(GTBranchDefinition.THAUMIC, "AstralSilver", true, new Color(0xAFEEEE), new Color(0xE6E6FF),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SILVER), 0.20f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ASTRALSILVER), 0.125f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        }, template -> {
+            AlleleHelper.instance.set(template, NOCTURNAL, true);
+            AlleleHelper.instance.set(template, CAVE_DWELLING, true);
+            AlleleHelper.instance.set(template, TOLERANT_FLYER, true);
+            AlleleHelper.instance.set(template, FERTILITY, Fertility.LOW);
+            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+            AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(SILVER, IRON, 3);
+            tMutation.requireResource(GregTechAPI.sBlockMetal1, 6);
+        }),
+    THAUMINITE(GTBranchDefinition.THAUMIC, "Thauminite", true, new Color(0x2E2D79), new Color(0x7581E0), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(MagicBees.ID, "comb", 1, 19), 0.20f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.THAUMINITE), 0.125f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOW);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(MAGICBEES, "TCOrder"), THAUMIUMDUST, 8);
+        if (ThaumicBases.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(ThaumicBases.ID, "thauminiteBlock"), 0);
+    }),
+    SHADOWMETAL(GTBranchDefinition.THAUMIC, "ShadowMetal", true, new Color(0x100322), new Color(0x100342),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(MagicBees.ID, "comb", 1, 20), 0.20f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.SHADOWMETAL), 0.125f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+            AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOW);
+            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
+            AlleleHelper.instance.set(template, NOCTURNAL, true);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis
+                .registerMutation(getSpecies(MAGICBEES, "TCChaos"), getSpecies(MAGICBEES, "TCVoid"), 6);
+            if (TaintedMagic.isModLoaded()) {
+                tMutation.requireResource("blockShadow");
+            }
+        }),
+    DIVIDED(GTBranchDefinition.THAUMIC, "Unstable", true, new Color(0xF0F0F0), new Color(0xDCDCDC), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 61), 0.20f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.DIVIDED), 0.125f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOW);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(DIAMOND, IRON, 3);
+        if (ExtraUtilities.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(ExtraUtilities.ID, "decorativeBlock1"), 5);
+    }),
+    CAELESTIS(GTBranchDefinition.THAUMIC, "Caelestis", true, new Color(0xF0F0F0), new Color(0xDCDCDC), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.CAELESTISRED), 0.60f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.CAELESTISBLUE), 0.60f);
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.CAELESTISGREEN), 0.60f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOW);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+    }, dis -> dis.registerMutation(DIAMOND, DIVIDED, 10)),
+    SPARKELING(GTBranchDefinition.THAUMIC, "NetherStar", true, new Color(0x7A007A), new Color(0xFFFFFF), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(MagicBees.ID, "miscResources", 1, 3), 0.20f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.SPARKLING), 0.125f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> {
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, CAVE_DWELLING, true);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.NETHER);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectAggressive);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis
+            .registerMutation(getSpecies(MAGICBEES, "Withering"), getSpecies(MAGICBEES, "Draconic"), 1);
+        tMutation.requireResource(GregTechAPI.sBlockGem3, 3);
+        tMutation.addMutationCondition(new GTBees.BiomeIDMutationCondition(9, "END Biome")); // sky end biome
+    }),
+
+    ESSENTIA(GTBranchDefinition.THAUMIC, "Essentia", true, new Color(0x7A007A), new Color(0xFFFFFF), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(MagicBees.ID, "miscResources", 1, 3), 0.20f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+    }, template -> {
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
+        AlleleHelper.instance.set(template, CAVE_DWELLING, true);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.VANILLA);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectReanimation);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(SHADOWMETAL, SPARKELING, 5);
+        if (Thaumcraft.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 6);
+    }),
+
+    DRAKE(GTBranchDefinition.THAUMIC, "Drake", true, new Color(0x100322), new Color(0x7A007A), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.DRACONIC), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.AWAKENEDDRACONIUM), 0.20f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(HELLISH);
+        beeSpecies.setJubilanceProvider(JubilanceMegaApiary.instance);
+    }, template -> {
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_3);
+        AlleleHelper.instance.set(template, CAVE_DWELLING, false);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.END);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectDrunkard);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(ESSENTIA, THAUMINITE, 5);
+        GregTechAPI.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTechAPI.sBlockCasings5, 8));
+    }),
+
+    // radioctive
+    URANIUM(GTBranchDefinition.RADIOACTIVE, "Uranium", true, new Color(0x19AF19), new Color(0x169E16), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.URANIUM), 0.15f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setNocturnal();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Avenging"), PLATINUM, 3);
+        tMutation.requireResource(GregTechAPI.sBlockMetal7, 14);
+    }),
+    PLUTONIUM(GTBranchDefinition.RADIOACTIVE, "Plutonium", true, new Color(0x570000), new Color(0x240000),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.LEAD), 0.15f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.PLUTONIUM), 0.15f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(ICY);
+            beeSpecies.setNocturnal();
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(URANIUM, EMERALD, 3);
+            tMutation.requireResource(GregTechAPI.sBlockMetal5, 13);
+        }),
+    NAQUADAH(GTBranchDefinition.RADIOACTIVE, "Naquadah", false, new Color(0x003300), new Color(0x002400),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.NAQUADAH), 0.15f);
+            beeSpecies.setHumidity(ARID);
+            beeSpecies.setTemperature(ICY);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(PLUTONIUM, IRIDIUM, 3);
+            tMutation.requireResource(GregTechAPI.sBlockMetal4, 12);
+        }),
+    NAQUADRIA(GTBranchDefinition.RADIOACTIVE, "Naquadria", false, new Color(0x000000), new Color(0x002400),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SLAG), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.NAQUADAH), 0.20f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.NAQUADRIA), 0.15f);
+            beeSpecies.setHumidity(ARID);
+            beeSpecies.setTemperature(ICY);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(PLUTONIUM, IRIDIUM, 8, 10);
+            tMutation.requireResource(GregTechAPI.sBlockMetal4, 15);
+        }),
+    DOB(GTBranchDefinition.RADIOACTIVE, "DOB", false, new Color(0x003300), new Color(0x002400), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.DOB), 0.75f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(NAQUADAH, THAUMIUMSHARD, 2);
+        if (AdvancedSolarPanel.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(AdvancedSolarPanel.ID, "BlockAdvSolarPanel"), 2);
+        tMutation.addMutationCondition(new GTBees.BiomeIDMutationCondition(9, "END Biome")); // sky end biome
+    }),
+    THORIUM(GTBranchDefinition.RADIOACTIVE, "Thorium", false, new Color(0x005000), new Color(0x001E00), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.THORIUM), 0.75f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setNocturnal();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+    }, dis -> {
+        IMutationCustom tMutation = dis.registerMutation(COAL, URANIUM, 3)
+            .setIsSecret();
+        tMutation.requireResource(GregTechAPI.sBlockMetal7, 5);
+    }),
+    LUTETIUM(GTBranchDefinition.RADIOACTIVE, "Lutetium", false, new Color(0xE6FFE6), new Color(0xFFFFFF),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.LUTETIUM), 0.15f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+        }, dis -> {
+            IMutationCustom tMutation = dis.registerMutation(THORIUM, getSpecies(EXTRABEES, "rotten"), 1)
+                .setIsSecret();
+            tMutation.requireResource(GregTechAPI.sBlockMetal4, 3);
+        }),
+    AMERICIUM(GTBranchDefinition.RADIOACTIVE, "Americium", false, new Color(0xE6E6FF), new Color(0xC8C8C8),
+        beeSpecies -> {
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.AMERICIUM), 0.075f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+            // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
+            beeSpecies.setJubilanceProvider(JubilanceMegaApiary.instance);
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+        }, dis -> {
+            IMutationCustom tMutation = dis.registerMutation(LUTETIUM, CHROME, 5, 4)
+                .setIsSecret();
+            GregTechAPI.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTechAPI.sBlockMachines, 32020));
+        }),
+    NEUTRONIUM(GTBranchDefinition.RADIOACTIVE, "Neutronium", false, new Color(0xFFF0F0), new Color(0xFAFAFA),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.NEUTRONIUM), 0.02f);
+            beeSpecies.setHumidity(DAMP);
+            beeSpecies.setTemperature(HELLISH);
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+            AlleleHelper.instance.set(template, NOCTURNAL, true);
+        }, dis -> {
+            IMutationCustom tMutation = dis.registerMutation(NAQUADRIA, AMERICIUM, 2, 2)
+                .setIsSecret();
+            tMutation.requireResource(GregTechAPI.sBlockMetal5, 2);
+        }),
+    // Twilight
+    NAGA(GTBranchDefinition.TWILIGHT, "Naga", true, new Color(0x0D5A0D), new Color(0x28874B), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SALISMUNDUS), 0.02f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.NAGA), 0.10f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis
+            .registerMutation(getSpecies(MAGICBEES, "Eldritch"), getSpecies(FORESTRY, "Imperial"), 8);
+        tMutation.restrictHumidity(DAMP);
+    }),
+    LICH(GTBranchDefinition.TWILIGHT, "Lich", true, new Color(0xC5C5C5), new Color(0x5C605E), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SALISMUNDUS), 0.04f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.LICH), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(MAGICBEES, "Supernatural"), NAGA, 7);
+        tMutation.restrictHumidity(ARID);
+    }),
+    HYDRA(GTBranchDefinition.TWILIGHT, "Hydra", true, new Color(0x872836), new Color(0xB8132C), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SALISMUNDUS), 0.06f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.HYDRA), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(LICH, getSpecies(MAGICBEES, "TCFire"), 6);
+        tMutation.addMutationCondition(new GTBees.BiomeIDMutationCondition(138, "Undergarden")); // undergarden biome
+    }),
+    URGHAST(GTBranchDefinition.TWILIGHT, "UrGhast", true, new Color(0xA7041C), new Color(0x7C0618), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SALISMUNDUS), 0.08f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.URGHAST), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+        beeSpecies.setHasEffect();
+        beeSpecies.setNocturnal();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(HYDRA, THAUMIUMDUST, 5);
+        if (Thaumcraft.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCosmeticSolid"), 4);
+        tMutation.restrictTemperature(HELLISH);
+    }),
+    SNOWQUEEN(GTBranchDefinition.TWILIGHT, "SnowQueen", true, new Color(0xD02001), new Color(0x9C0018), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SALISMUNDUS), 0.15f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.SNOWQUEEN), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setHasEffect();
+        beeSpecies.setNocturnal();
+    }, template -> {}, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(URGHAST, SALISMUNDUS, 4);
+        if (ThaumicBases.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(ThaumicBases.ID, "blockSalisMundus"), 0);
+        tMutation.restrictTemperature(ICY);
+    }),
+    // HEE
+    ENDDUST(GTBranchDefinition.HEE, "End Dust", true, new Color(0xCC00FA), new Color(0x003A7D), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ENDDUST), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.NORMAL), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Ended"), STAINLESSSTEEL, 8);
+
+        tMutation.restrictHumidity(ARID);
+        if (HardcoreEnderExpansion.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "end_powder_ore"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(1, "End")); // End Dim
+    }),
+    ENDIUM(GTBranchDefinition.HEE, "Endium", true, new Color(0xa0ffff), new Color(0x2F5A6C), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ENDIUM), 0.10f);
+        beeSpecies.addSpecialty(GTBees.propolis.getStackForType(PropolisType.Endium), 0.15f);
+        beeSpecies.addSpecialty(GTBees.drop.getStackForType(DropType.ENDERGOO), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.NORMAL), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Ended"), THAUMIUMDUST, 8);
+        tMutation.restrictHumidity(ARID);
+        if (HardcoreEnderExpansion.isModLoaded()) tMutation.requireResource("blockHeeEndium");
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(1, "End")); // End Dim
+    }),
+    STARDUST(GTBranchDefinition.HEE, "Star Dust", true, new Color(0xffff00), new Color(0xDCBE13), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.STARDUST), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, GTBees.speedBlinding);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOWER);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Ended"), ZINC, 8);
+        tMutation.restrictHumidity(ARID);
+        if (HardcoreEnderExpansion.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "stardust_ore"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(1, "End")); // End Dim
+    }),
+    ECTOPLASMA(GTBranchDefinition.HEE, "Ectoplasma", true, new Color(0xDCB0E5), new Color(0x381C40), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ECTOPLASMA), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Ended"), ENDDUST, 5);
+        tMutation.restrictHumidity(ARID);
+        if (HardcoreEnderExpansion.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "spooky_log"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(1, "End")); // End Dim
+    }),
+    ARCANESHARDS(GTBranchDefinition.HEE, "Arcane Shards", true, new Color(0x9010AD), new Color(0x333D82),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ARCANESHARD), 0.10f);
+            beeSpecies.setHumidity(ARID);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONG);
+            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(THAUMIUMSHARD, ENDDUST, 5);
+            tMutation.restrictHumidity(ARID);
+            if (HardcoreEnderExpansion.isModLoaded())
+                tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "laboratory_floor"), 0);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(1, "End")); // End Dim
+        }),
+    DRAGONESSENCE(GTBranchDefinition.HEE, "Dragonessence", true, new Color(0xFFA12B), new Color(0x911ECE),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.DRAGONESSENCE), 0.10f);
+            beeSpecies.setHumidity(ARID);
+            beeSpecies.setTemperature(EnumTemperature.NORMAL);
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
+            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectBeatific);
+            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_3);
+            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_3);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(ECTOPLASMA, ARCANESHARDS, 4);
+            tMutation.restrictHumidity(ARID);
+            if (HardcoreEnderExpansion.isModLoaded())
+                tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "essence_altar"), 1);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(1, "End")); // End Dim
+        }),
+    FIREESSENCE(GTBranchDefinition.HEE, "Fireessence", true, new Color(0xD41238), new Color(0xFFA157), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.FIREESSENSE), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.ELONGATED);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_3);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.DOWN_3);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(FIRESTONE, ARCANESHARDS, 4);
+        tMutation.restrictHumidity(ARID);
+        if (HardcoreEnderExpansion.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "essence_altar"), 2);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(1, "End")); // End Dim
+    }),
+    ENDERMANHEAD(GTBranchDefinition.HEE, "EndermanHead", true, new Color(0x161616), new Color(0x6200e7), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ENDERMAN), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
+        AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "teleport"));
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.UP_1);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(ENDERIUM, STARDUST, 4);
+        tMutation.restrictHumidity(ARID);
+        if (HardcoreEnderExpansion.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "ender_goo"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(1, "End")); // End Dim
+    }),
+    SILVERFISH(GTBranchDefinition.HEE, "Silverfisch", true, new Color(0xEE053D), new Color(0x000000), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.SILVERFISH), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
+        AlleleHelper.instance.set(template, EFFECT, getEffect(MAGICBEES, "SlowSpeed"));
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_1);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.DOWN_1);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(ECTOPLASMA, STARDUST, 5);
+        tMutation.restrictHumidity(ARID);
+        if (HardcoreEnderExpansion.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "ender_goo"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(1, "End")); // End Dim
+    }),
+    RUNE(GTBranchDefinition.HEE, "Rune", true, new Color(0xE31010), new Color(0x0104D9), beeSpecies -> {
+        beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.RUNEI), 0.025f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.RUNEII), 0.0125f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, LIFESPAN, GTBees.superLife);
+        AlleleHelper.instance.set(template, EFFECT, getEffect(MAGICBEES, "SlowSpeed"));
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
+    }, dis -> {
+        IMutationCustom tMutation = dis.registerMutation(DRAGONESSENCE, STARDUST, 2)
+            .setIsSecret();
+        tMutation.restrictHumidity(ARID);
+        if (EnderStorage.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(EnderStorage.ID, "enderChest"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(1, "End")); // End Dim
+    }),
+    // Walrus Bee, 100% Combchance, Parents: Catty and Watery
+    WALRUS(GTBranchDefinition.PLANET, "Walrus", true, new Color(0xD6D580), new Color(0xB5CFC9), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.WALRUS), 1.00f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.FASTEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis
+            .registerMutation(getSpecies(MAGICBEES, "Watery"), getSpecies(MAGICBEES, "Catty"), 45, 2);
+        if (ExtraCells2.isModLoaded()) {
+            tMutation.requireResource(GameRegistry.findBlock(ExtraCells2.ID, "walrus"), 0);
+        }
+    }),
+    MACHINIST(GTBranchDefinition.ORGANIC, "Machinist", true, new Color(85, 37, 130), new Color(253, 185, 39),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.MACHINIST), 0.2f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(NORMAL);
+            beeSpecies.setHasEffect();
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.FASTEST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+            AlleleHelper.instance.set(template, NOCTURNAL, true);
+            AlleleHelper.instance.set(template, FLOWER_PROVIDER, GTFlowers.FLAMING);
+            AlleleHelper.instance.set(template, FERTILITY, Fertility.MAXIMUM);
+            AlleleHelper.instance.set(template, EFFECT, getEffect(GREGTECH, "MachineBoost"));
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis
+                .registerMutation(getSpecies(FORESTRY, "Industrious"), getSpecies(FORESTRY, "Imperial"), 1);
+            tMutation.addMutationCondition(new GTBees.ActiveGTMachineMutationCondition());
+        }),
+    // Space Bees
+    SPACE(GTBranchDefinition.SPACE, "Space", true, new Color(0x003366), new Color(0xC0C0C0), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SPACE), 0.02f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+    }, template -> {}, dis -> {
+        IBeeMutationCustom tMutation = dis
+            .registerMutation(getSpecies(FORESTRY, "Industrious"), getSpecies(FORESTRY, "Heroic"), 10);
+        tMutation.restrictTemperature(ICY);
+    }),
+    METEORICIRON(GTBranchDefinition.SPACE, "MeteoricIron", true, new Color(0x321928), new Color(0x643250),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SPACE), 0.04f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.METEORICIRON), 0.10f);
+            beeSpecies.setHumidity(ARID);
+            beeSpecies.setTemperature(HOT);
+            beeSpecies.setNocturnal();
+        }, template -> {}, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(SPACE, IRON, 9);
+            tMutation.requireResource(GregTechAPI.sBlockMetal4, 7);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(28, "Moon")); // Moon Dim
+        }),
+    DESH(GTBranchDefinition.SPACE, "Desh", false, new Color(0x323232), new Color(0x282828), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SPACE), 0.06f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.DESH), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+        beeSpecies.setNocturnal();
+    }, template -> AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition), new Consumer<>() {
+
+        @Override
+        public void accept(GTBeeDefinition dis) {
+            IBeeMutationCustom tMutation = dis.registerMutation(MARS, TITANIUM, 9);
+            tMutation.requireResource(GregTechAPI.sBlockMetal2, 12);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(29, "Mars")); // Mars Dim
+        }
+    }),
+    LEDOX(GTBranchDefinition.SPACE, "Ledox", false, new Color(0x0000CD), new Color(0x0074FF), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SPACE), 0.10f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.LEDOX), 0.10f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "freezing")), new Consumer<>() {
+
+        @Override
+        public void accept(GTBeeDefinition dis) {
+            IBeeMutationCustom tMutation = dis.registerMutation(CALLISTO, LEAD, 7);
+            if (NewHorizonsCoreMod.isModLoaded())
+                tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.Ledox"), 0);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(35, "Europa")); // Europa Dim
+        }
+    }),
+    CALLISTOICE(GTBranchDefinition.SPACE, "CallistoIce", false, new Color(0x0074FF), new Color(0x1EB1FF),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SPACE), 0.10f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.CALLISTOICE), 0.10f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(ICY);
+            beeSpecies.setHasEffect();
+        }, template -> AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "freezing")), new Consumer<>() {
+
+            @Override
+            public void accept(GTBeeDefinition dis) {
+                IBeeMutationCustom tMutation = dis.registerMutation(CALLISTO, getSpecies(EXTRABEES, "freezing"), 7);
+                if (NewHorizonsCoreMod.isModLoaded())
+                    tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.CallistoColdIce"), 0);
+                tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(45, "Callisto")); // Callisto
+                // Dim
+            }
+        }),
+    MYTRYL(GTBranchDefinition.SPACE, "Mytryl", false, new Color(0xDAA520), new Color(0xF26404), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SPACE), 0.16f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.MYTRYL), 0.10f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> {}, new Consumer<>() {
+
+        @Override
+        public void accept(GTBeeDefinition dis) {
+            IBeeMutationCustom tMutation = dis.registerMutation(IO, MITHRIL, 6);
+            if (NewHorizonsCoreMod.isModLoaded())
+                tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.Mytryl"), 0);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(36, "IO")); // IO Dim
+        }
+    }),
+    QUANTIUM(GTBranchDefinition.SPACE, "Quantium", false, new Color(0x00FF00), new Color(0x00D10B), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SPACE), 0.16f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.QUANTIUM), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> {}, new Consumer<>() {
+
+        @Override
+        public void accept(GTBeeDefinition dis) {
+            IBeeMutationCustom tMutation = dis.registerMutation(VENUS, OSMIUM, 6);
+            if (NewHorizonsCoreMod.isModLoaded())
+                tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.Quantinum"), 0);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(39, "Venus")); // Venus Dim
+        }
+    }),
+    ORIHARUKON(GTBranchDefinition.SPACE, "Oriharukon", false, new Color(0x228B22), new Color(0x677D68), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SPACE), 0.26f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.ORIHARUKON), 0.10f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setHasEffect();
+    }, template -> {}, new Consumer<>() {
+
+        @Override
+        public void accept(GTBeeDefinition dis) {
+            IBeeMutationCustom tMutation = dis.registerMutation(LEAD, OBERON, 5);
+            if (GalaxySpace.isModLoaded())
+                tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "metalsblock"), 6);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(46, "Oberon")); // Oberon Dim
+        }
+    }),
+    INFUSEDGOLD(GTBranchDefinition.SPACE, "Infused Gold", false, new Color(0x80641E), new Color(0xFFC83C),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.GOLD), 0.20f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.INFUSEDGOLD), 0.30f);
+            beeSpecies.setHumidity(DAMP);
+            beeSpecies.setTemperature(ICY);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> {}, new Consumer<>() {
+
+            @Override
+            public void accept(GTBeeDefinition dis) {
+                IBeeMutationCustom tMutation = dis.registerMutation(GOLD, HAUMEA, 5);
+                tMutation.requireResource(GregTechAPI.sBlockMetal3, 10);
+                tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(83, "Haumea")); // Haumea Dim
+            }
+        }),
+    MYSTERIOUSCRYSTAL(GTBranchDefinition.SPACE, "MysteriousCrystal", false, new Color(0x3CB371), new Color(0x16856C),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SPACE), 0.42f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.MYSTERIOUSCRYSTAL), 0.30f);
+            beeSpecies.setHumidity(ARID);
+            beeSpecies.setTemperature(ICY);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> {}, new Consumer<>() {
+
+            @Override
+            public void accept(GTBeeDefinition dis) {
+                IBeeMutationCustom tMutation = dis.registerMutation(ENCELADUS, EMERALD, 3);
+                if (NewHorizonsCoreMod.isModLoaded()) tMutation
+                    .requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.MysteriousCrystal"), 0);
+                tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(41, "Enceladus")); // Enceladus
+                // Dim
+            }
+        }),
+    BLACKPLUTONIUM(GTBranchDefinition.SPACE, "BlackPlutonium", false, new Color(0x000000), new Color(0x323232),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SPACE), 0.68f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.BLACKPLUTONIUM), 0.10f);
+            beeSpecies.setHumidity(ARID);
+            beeSpecies.setTemperature(HELLISH);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> {}, new Consumer<>() {
+
+            @Override
+            public void accept(GTBeeDefinition dis) {
+                IBeeMutationCustom tMutation = dis.registerMutation(PLUTO, PLUTONIUM, 2);
+                if (NewHorizonsCoreMod.isModLoaded())
+                    tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.BlackPlutonium"), 0);
+                tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(49, "Pluto")); // Pluto Dim
+            }
+        }),
+    TRINIUM(GTBranchDefinition.SPACE, "Trinium", false, new Color(0xB0E0E6), new Color(0xC8C8D2), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.TRINIUM), 0.75f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.QUANTIUM), 0.10f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, SPEED, GTBees.speedBlinding), new Consumer<>() {
+
+        @Override
+        public void accept(GTBeeDefinition dis) {
+            IBeeMutationCustom tMutation = dis.registerMutation(ENCELADUS, IRIDIUM, 4);
+            tMutation.requireResource(GregTechAPI.sBlockMetal4, 9);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(41, "Enceladus")); // Enceladus Dim
+        }
+    }),
+    // Planet Line
+    MOON(GTBranchDefinition.PLANET, "Moon", false, new Color(0x373735), new Color(0x7E7E78), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.MOON), 0.35f);
+        if (NewHorizonsCoreMod.isModLoaded())
+            beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MoonStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(SPACE, CLAY, 25);
+        if (GalacticraftCore.isModLoaded()) {
+            tMutation.requireResource(GameRegistry.findBlock(GalacticraftCore.ID, "tile.moonBlock"), 4);
+        }
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(28, "Moon")); // Moon Dim
+    }),
+    MARS(GTBranchDefinition.PLANET, "Mars", false, new Color(0x220D05), new Color(0x3A1505), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.MARS), 0.35f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MarsStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(MOON, IRON, 20);
+        if (GalacticraftMars.isModLoaded()) {
+            tMutation.requireResource(GameRegistry.findBlock(GalacticraftMars.ID, "tile.mars"), 5);
+        }
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(29, "Mars")); // Mars Dim
+    }),
+    PHOBOS(GTBranchDefinition.PLANET, "Phobos", true, new Color(0x220D05), new Color(0x7a5706), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.MARS), 0.25f);
+        if (NewHorizonsCoreMod.isModLoaded()) beeSpecies
+            .addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PhobosStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+        beeSpecies.setNocturnal();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(MARS, MOON, 20);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "phobosblocks"), 2);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(38, "Phobos")); // Phobos Dim
+    }),
+    DEIMOS(GTBranchDefinition.PLANET, "Deimos", true, new Color(0x220D05), new Color(0x7a3206), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.MARS), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.DeimosStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(HOT);
+        beeSpecies.setNocturnal();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(MARS, SPACE, 20);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "deimosblocks"), 1);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(40, "Deimos")); // Deimos Dim
+    }),
+    CERES(GTBranchDefinition.PLANET, "Ceres", true, new Color(0x3ca5b7), new Color(0x1e7267), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.JUPITER), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CeresStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+        beeSpecies.setNocturnal();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(MARS, METEORICIRON, 20);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "ceresblocks"), 1);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(42, "Ceres")); // Ceres Dim
+    }),
+    JUPITER(GTBranchDefinition.PLANET, "Jupiter", false, new Color(0x734B2E), new Color(0xD0CBC4), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.JUPITER), 0.35f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CallistoStoneDust", 1, 0), 0.05f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CallistoIceDust", 1, 0), 0.05f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.IoStoneDust", 1, 0), 0.05f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaStoneDust", 1, 0), 0.05f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaIceDust", 1, 0), 0.05f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.GanymedeStoneDust", 1, 0), 0.05f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(MARS, DESH, 15);
+        if (NewHorizonsCoreMod.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.Ledox"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(30, "Asteroids")); // Asteroid Dim
+    }),
+    IO(GTBranchDefinition.PLANET, "IO", true, new Color(0x734B2E), new Color(0xe5701b), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.JUPITER), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.IoStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, getSpecies(EXTRABEES, "volcanic"), 15);
+        tMutation.restrictTemperature(HELLISH);
+        if (GalaxySpace.isModLoaded()) tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "ioblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(36, "IO")); // IO Dim
+    }),
+    EUROPA(GTBranchDefinition.PLANET, "Europa", true, new Color(0x5982ea), new Color(0x0b36a3), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.JUPITER), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaStoneDust", 1, 0), 0.10f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaIceDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, IRON, 15);
+        tMutation.restrictTemperature(ICY);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "europagrunt"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(35, "Europa")); // Europa Dim
+    }),
+    GANYMEDE(GTBranchDefinition.PLANET, "Ganymede", true, new Color(0x3d1b10), new Color(0x190c07), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.JUPITER), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.GanymedeStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(COLD);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, TITANIUM, 15);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "ganymedeblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(43, "Ganymede")); // Ganymede Dim
+    }),
+    CALLISTO(GTBranchDefinition.PLANET, "Callisto", true, new Color(0x0f333d), new Color(0x0d84a5), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.JUPITER), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CallistoStoneDust", 1, 0), 0.10f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CallistoIceDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, getSpecies(EXTRABEES, "artic"), 15);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "callistoblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(45, "Callisto")); // Callisto Dim
+    }),
+    SATURN(GTBranchDefinition.PLANET, "Saturn", false, new Color(0xD2A472), new Color(0xF8C37B), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SATURN), 0.35f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TitanStoneDust", 1, 0), 0.05f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EnceladusStoneDust", 1, 0), 0.05f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EnceladusIceDust", 1, 0), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, LEDOX, 25, 2);
+        if (NewHorizonsCoreMod.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.Quantinum"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(30, "Asteriods")); // Asteriods Dim
+    }),
+    ENCELADUS(GTBranchDefinition.PLANET, "Enceladus", true, new Color(0xD2A472), new Color(0x193fa0), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SATURN), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EnceladusStoneDust", 1, 0), 0.10f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EnceladusIceDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(SATURN, CHROME, 25, 2);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "enceladusblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(41, "Enceladus")); // Enceladus Dim
+    }),
+    TITAN(GTBranchDefinition.PLANET, "Titan", true, new Color(0xa0641b), new Color(0x7c1024), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SATURN), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TitanStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(SATURN, NICKEL, 25, 2);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "titanblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(44, "Titan")); // Titan Dim
+    }),
+    URANUS(GTBranchDefinition.PLANET, "Uranus", false, new Color(0x75C0C9), new Color(0x84D8EC), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.URANUS), 0.35f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MirandaStoneDust", 1, 0), 0.05f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.OberonStoneDust", 1, 0), 0.05f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(SATURN, TRINIUM, 10);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "metalsblock"), 6);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(30, "Asteroids")); // Asteroids Dim
+    }),
+    MIRANDA(GTBranchDefinition.PLANET, "Miranda", true, new Color(0x75C0C9), new Color(0x0d211c), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.URANUS), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MirandaStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(URANUS, TIN, 10);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "mirandablocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(86, "Miranda")); // Miranda Dim
+    }),
+    OBERON(GTBranchDefinition.PLANET, "Oberon", true, new Color(0x4A4033), new Color(0xB5A288), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.URANUS), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.OberonStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(ICY);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(URANUS, IRIDIUM, 10);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "oberonblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(46, "Oberon")); // Oberon Dim
+    }),
+    NEPTUNE(GTBranchDefinition.PLANET, "Neptune", false, new Color(0x334CFF), new Color(0x576DFF), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.NEPTUNE), 0.35f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ProteusStoneDust", 1, 0), 0.05f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TritonStoneDust", 1, 0), 0.05f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(URANUS, ORIHARUKON, 7);
+        if (NewHorizonsCoreMod.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.MysteriousCrystal"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(30, "Asteroids")); // Asteroids Dim
+    }),
+    PROTEUS(GTBranchDefinition.PLANET, "Proteus", true, new Color(0x334CFF), new Color(0x592610), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.NEPTUNE), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ProteusStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setNocturnal();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(NEPTUNE, COPPER, 7);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "proteusblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(47, "Proteus")); // Proteus Dim
+    }),
+    TRITON(GTBranchDefinition.PLANET, "Triton", true, new Color(0x334CFF), new Color(0x421118), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.NEPTUNE), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TritonStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(NEPTUNE, GOLD, 7);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "tritonblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(48, "Triton")); // Triton Dim
+    }),
+    PLUTO(GTBranchDefinition.PLANET, "Pluto", false, new Color(0x34271E), new Color(0x69503D), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.PLUTO), 0.35f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PlutoStoneDust", 1, 0), 0.10f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PlutoIceDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(NEPTUNE, PLUTONIUM, 5);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "plutoblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(49, "Pluto")); // Pluto Dim
+    }),
+    HAUMEA(GTBranchDefinition.PLANET, "Haumea", false, new Color(0x1C1413), new Color(0x392B28), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.HAUMEA), 0.35f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.HaumeaStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(ICY);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(PLUTO, NAQUADAH, 7, 2);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "haumeablocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(83, "Haumea")); // Haumea Dim
+    }),
+    MAKEMAKE(GTBranchDefinition.PLANET, "MakeMake", false, new Color(0x301811), new Color(0x120A07), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.MAKEMAKE), 0.35f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MakeMakeStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(PLUTO, NAQUADRIA, 7, 2);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "makemakegrunt"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(25, "MakeMake")); // MakeMake Dim
+    }),
+    CENTAURI(GTBranchDefinition.PLANET, "Centauri", false, new Color(0x2F2A14), new Color(0xB06B32), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.CENTAURI), 0.35f);
+        beeSpecies
+            .addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CentauriASurfaceDust", 1, 0), 0.05f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(MAKEMAKE, DESH, 3);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "acentauribbgrunt"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(33, "Kuiper Belt")); // Kuiper Belt Dim
+    }),
+    ACENTAURI(GTBranchDefinition.PLANET, "aCentauri", false, new Color(0x2F2A14), new Color(0xa01e14), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.CENTAURI), 0.25f);
+        beeSpecies
+            .addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CentauriASurfaceDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), new Consumer<>() {
+
+        @Override
+        public void accept(GTBeeDefinition dis) {
+            IBeeMutationCustom tMutation = dis.registerMutation(CENTAURI, INFINITYCATALYST, 3);
+            if (GalaxySpace.isModLoaded())
+                tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "acentauribbgrunt"), 0);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(31, "aCentauri")); // aCentauri Dim
+        }
+    }),
+    TCETI(GTBranchDefinition.PLANET, "tCeti", false, new Color(0x46241A), new Color(0x7B412F), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.TCETI), 0.35f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TCetiEStoneDust", 1, 0), 0.05f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(MAKEMAKE, HAUMEA, 5, 2);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "tcetieblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(33, "Kuiper Belt")); // Kuiper Belt Dim
+    }),
+    TCETIE(GTBranchDefinition.PLANET, "tCetiE", false, new Color(0x2d561b), new Color(0x0c0f60), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.TCETI), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TCetiEStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(TCETI, getSpecies(MAGICBEES, "TCWater"), 5, 2);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "tcetieblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(85, "tCeti E")); // tCeti E Dim
+    }),
+    // Parents: TCETI and TCETIE, 25% combchance, needs Damp Humidity and Normal temperature. Is Mycophilic
+    SEAWEED(GTBranchDefinition.PLANET, "SeaWeed", true, new Color(0xCBCBCB), new Color(0x83FF83), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SEAWEED), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TCetiEStoneDust", 1, 0), 0.15f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(EnumTemperature.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_1);
+        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.DOWN_1);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectMycophilic);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(TCETI, TCETIE, 5, 2);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "tcetieblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(85, "tCeti E")); // tCeti E Dim
+    }),
+
+    BARNARDA(GTBranchDefinition.PLANET, "Barnarda", false, new Color(0x0D5A0D), new Color(0xE6C18D), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.BARNARDA), 0.35f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaEStoneDust", 1, 0), 0.05f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaFStoneDust", 1, 0), 0.05f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(MAKEMAKE, THORIUM, 3, 2);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "barnardaEgrunt"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(33, "Kuiper Belt")); // Kuiper Belt Dim
+    }),
+    BARNARDAC(GTBranchDefinition.PLANET, "BarnardaC", false, new Color(0x0D5A0D), new Color(0x473f0a), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.BARNARDA), 0.25f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> {
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+        AlleleHelper.instance.set(template, EFFECT, getEffect(GREGTECH, "Treetwister"));
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(BARNARDA, AMERICIUM, 3, 2);
+        if (GalaxySpace.isModLoaded()) {
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "barnardaEgrunt"), 0);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(32, "Barnarda C")); // Barnarda C Dim
+        }
+    }),
+    BARNARDAE(GTBranchDefinition.PLANET, "BarnardaE", false, new Color(0x0D5A0D), new Color(0x4c1f0a), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.BARNARDA), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaEStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(BARNARDA, DIVIDED, 3, 2);
+        if (GalaxySpace.isModLoaded()) {
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "barnardaEgrunt"), 0);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(81, "Barnard E")); // "Barnard E Dim
+        }
+    }),
+    BARNARDAF(GTBranchDefinition.PLANET, "BarnardaF", false, new Color(0x0D5A0D), new Color(0x1e0b49), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.BARNARDA), 0.25f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaFStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HOT);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(BARNARDA, NEUTRONIUM, 3, 2);
+        if (GalaxySpace.isModLoaded()) {
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "barnardaFgrunt"), 0);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(82, "Barnard F")); // "Barnard F Dim
+        }
+    }),
+    VEGA(GTBranchDefinition.PLANET, "Vega", false, new Color(0x1A2036), new Color(0xB5C0DE), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.VEGA), 0.35f);
+        beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.VegaBStoneDust", 1, 0), 0.05f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(MAKEMAKE, NAQUADAH, 2);
+        if (GalaxySpace.isModLoaded()) {
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "vegabgrunt"), 0);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(33, "Kuiper Belt")); // Kuiper Belt
+                                                                                                      // Dim
+        }
+    }),
+    VEGAB(GTBranchDefinition.PLANET, "VegaB", false, new Color(0x1A2036), new Color(0x81e261), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.VEGA), 0.35f);
+        if (NewHorizonsCoreMod.isModLoaded())
+            beeSpecies.addSpecialty(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.VegaBStoneDust", 1, 0), 0.10f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(COLD);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(VEGA, NAQUADRIA, 2);
+        if (GalaxySpace.isModLoaded()) {
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "vegabgrunt"), 0);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(84, "VegaB")); // VegaB Dim
+        }
+    }),
+    MERCURY(GTBranchDefinition.PLANET, "Mercury", false, new Color(0x4A4033), new Color(0xB5A288), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.MERCURY), 0.35f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, TUNGSTEN, 25, 2);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "mercuryblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(37, "Mercury")); // Mercury Dim
+    }),
+    VENUS(GTBranchDefinition.PLANET, "Venus", false, new Color(0x4A4033), new Color(0xB5A288), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.VENUS), 0.35f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setTemperature(HELLISH);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, MITHRIL, 25, 2);
+        if (GalaxySpace.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "venusblocks"), 0);
+        tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(39, "Venus")); // Venus Dim
+    }),
+
+    // Infinity Line
+    COSMICNEUTRONIUM(GTBranchDefinition.PLANET, "CosmicNeutronium", false, new Color(0x484848), new Color(0x323232),
+        beeSpecies -> {
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.COSMICNEUTRONIUM), 0.375f);
+            beeSpecies.setHumidity(DAMP);
+            beeSpecies.setTemperature(ICY);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+            // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
+            beeSpecies.setJubilanceProvider(JubilanceMegaApiary.instance);
+        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(NEUTRONIUM, BARNARDAF, 7, 10);
+            if (Avaritia.isModLoaded())
+                tMutation.requireResource(GameRegistry.findBlock(Avaritia.ID, "Resource_Block"), 0);
+        }),
+    INFINITYCATALYST(GTBranchDefinition.PLANET, "InfinityCatalyst", false, new Color(0xFFFFFF), new Color(0xFFFFFF),
+        beeSpecies -> {
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.INFINITYCATALYST), 0.015f);
+            beeSpecies.setHumidity(DAMP);
+            beeSpecies.setTemperature(HELLISH);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+            // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
+            beeSpecies.setJubilanceProvider(JubilanceMegaApiary.instance);
+        }, template -> {
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
+            AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "blindness"));
+        }, dis -> {
+            IMutationCustom tMutation = dis.registerMutation(DOB, COSMICNEUTRONIUM, 3, 10)
+                .setIsSecret();
+            if (Avaritia.isModLoaded()) {
+                tMutation.requireResource(GameRegistry.findBlock(Avaritia.ID, "Resource_Block"), 1);
+            }
+        }),
+    INFINITY(GTBranchDefinition.PLANET, "Infinity", false, new Color(0xFFFFFF), new Color(0xFFFFFF), beeSpecies -> {
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.INFINITY), 0.015f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+        // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
+        beeSpecies.setJubilanceProvider(JubilanceMegaApiary.instance);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(INFINITYCATALYST, COSMICNEUTRONIUM, 1, 10);
+        if (AvaritiaAddons.isModLoaded()) {
+            tMutation.requireResource(GameRegistry.findBlock(AvaritiaAddons.ID, "InfinityChest"), 0);
+        }
+    }),
+    KEVLAR(GTBranchDefinition.IC2, "Kevlar", false, new Color(0x2d542f), new Color(0xa2baa3), beeSpecies -> {
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.KEVLAR), 0.075f);
+        beeSpecies.addSpecialty(MaterialsKevlar.Kevlar.getNuggets(1), 0.01f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setTemperature(COLD);
+        beeSpecies.setHasEffect();
+        beeSpecies.setJubilanceProvider(JubilanceMegaApiary.instance);
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectSnowing);
+        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(template, NOCTURNAL, true);
+        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
+        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(OIL, INFINITYCATALYST, 4);
+        // UHV Replicator (UU-Matter)
+        GregTechAPI.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTechAPI.sBlockMachines, 11003));
+    }),
+
+    // Noble Gas Line
+    // Helium bee, Humidity: normal, Temperature: Icy, Parents: Space & Mars, Mutationrate: 10%, Combrate: 50%
+    HELIUM(GTBranchDefinition.NOBLEGAS, "Helium", false, new Color(0xFFA9FF), new Color(0xC8B8B4), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.HELIUM), 0.35f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(MAGICBEES, "Watery"), ENDDUST, 10);
+        tMutation.restrictTemperature(ICY);
+    }),
+    // Argon bee, Humidity: normal, Temperature: Icy, Parents: Helium & Phobos, Mutationrate: 8%, Combrate: 50%
+    ARGON(GTBranchDefinition.NOBLEGAS, "Argon", false, new Color(0x89D9E1), new Color(0xBDA5C2), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.ARGON), 0.35f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(HELIUM, LICH, 8);
+        tMutation.restrictTemperature(ICY);
+    }),
+    // Neon bee, Humidity: normal, Temperature: Icy, Parents: Xenon & Ceres, Mutationrate: 6%, Combrate: 50%
+    NEON(GTBranchDefinition.NOBLEGAS, "Neon", false, new Color(0xFFC826), new Color(0xFF7200), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.NEON), 0.35f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(ARGON, HYDRA, 6);
+        tMutation.restrictTemperature(ICY);
+    }),
+    // Krypton bee, Humidity: normal, Temperature: Icy, Parents: Neon & Jupiter, Mutationrate: 4%, Combrate: 50%
+    KRYPTON(GTBranchDefinition.NOBLEGAS, "Krypton", false, new Color(0x8A97B0), new Color(0x160822), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.KRYPTON), 0.35f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(NEON, URGHAST, 4);
+        tMutation.restrictTemperature(ICY);
+    }),
+    // Xenon bee, Humidity: normal, Temperature: Icy, Parents: Argon & Deimos, Mutationrate: 6%, Combrate: 50%
+    XENON(GTBranchDefinition.NOBLEGAS, "Xenon", false, new Color(0x8A97B0), new Color(0x160822), beeSpecies -> {
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.XENON), 0.525f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+        // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
+        beeSpecies.setJubilanceProvider(JubilanceMegaApiary.instance);
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(KRYPTON, SNOWQUEEN, 2);
+        tMutation.restrictTemperature(ICY);
+    }),
+    // Oxygen bee, Humidity: normal, Temperature: Icy, Parents: Space & Callisto, Mutationrate: 15%, Combrate: 50%
+    OXYGEN(GTBranchDefinition.NOBLEGAS, "Oxygen", false, new Color(0xFFFFFF), new Color(0x8F8FFF), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.OXYGEN), 0.45f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.HYDROGEN), 0.20f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(HELIUM, DRAGONESSENCE, 15);
+        tMutation.restrictTemperature(ICY);
+    }),
+    // Hydrogen bee, Humidity: normal, Temperature: Icy, Parents: Oxygen & Watery, Mutationrate: 15%, Combrate: 50%
+    HYDROGEN(GTBranchDefinition.NOBLEGAS, "Oxygen", false, new Color(0xFFFFFF), new Color(0xFF1493), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.HYDROGEN), 0.45f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.NITROGEN), 0.20f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(OXYGEN, getSpecies(MAGICBEES, "Watery"), 15);
+        tMutation.restrictTemperature(ICY);
+    }),
+    // Nitrogen bee, Humidity: normal, Temperature: Icy, Parents: Oxygen & Hydrogen, Mutationrate: 15%, Combrate: 50%
+    NITROGEN(GTBranchDefinition.NOBLEGAS, "Nitrogen", false, new Color(0xFFC832), new Color(0xA52A2A), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.NITROGEN), 0.45f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.FLUORINE), 0.20f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(OXYGEN, HYDROGEN, 15);
+        tMutation.restrictTemperature(ICY);
+    }),
+    // Fluorine bee, Humidity: normal, Temperature: Icy, Parents: Nitrogen & Hydrogen, Mutationrate: 15%, Combrate: 50%
+    FLUORINE(GTBranchDefinition.NOBLEGAS, "Fluorine", false, new Color(0x86AFF0), new Color(0xFF6D00), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.FLUORINE), 0.45f);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.OXYGEN), 0.20f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(ICY);
+        beeSpecies.setNocturnal();
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(NITROGEN, HYDROGEN, 15);
+        tMutation.restrictTemperature(ICY);
+    }),
+    // Europium line, needed after fluorine definition
+    RAREEARTH(GTBranchDefinition.RAREMETAL, "RareEarth", false, new Color(0x555643), new Color(0x343428),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.RAREEARTH), 0.20f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.NEODYMIUM), 0.05f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(NORMAL);
+        }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST),
+        dis -> dis.registerMutation(FLUORINE, REDSTONE, 10)),
+    NEODYMIUM(GTBranchDefinition.RAREMETAL, "Neodymium", false, new Color(0x555555), new Color(0x4F4F4F),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.RAREEARTH), 0.15f);
+            beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.NEODYMIUM), 0.15f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setTemperature(HOT);
+        }, template -> {
+            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+        }, dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(RAREEARTH, IRON, 10);
+            tMutation.requireResource(GregTechAPI.sBlockMetal5, 0);
+        }),
+    EUROPIUM(GTBranchDefinition.RAREMETAL, "Europium", false, new Color(0xDAA0E2), new Color(0xAB7EB1), beeSpecies -> {
+        beeSpecies.addProduct(WerkstoffMaterialPool.EuropiumIIIOxide.get(OrePrefixes.dust, 1), 0.10F);
+        beeSpecies.addSpecialty(GTBees.combs.getStackForType(CombType.EUROPIUM), 0.075f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setTemperature(HOT);
+        beeSpecies.setNocturnal();
+        // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
+        beeSpecies.setJubilanceProvider(JubilanceMegaApiary.instance);
+    }, template -> {
+        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
+        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
+    }, dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(NEODYMIUM, HYDROGEN, 5, 4);
+        // Compact fusion reactor mark 1 controller
+        GregTechAPI.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTechAPI.sBlockMachines, 32019));
+    }),
+    // infused Shards line
+    AIR(GTBranchDefinition.INFUSEDSHARD, "Air", false, new Color(0xFFFF7E), new Color(0x60602F), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.INFUSEDAER), 0.30f);
+        beeSpecies.setHumidity(DAMP);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis
+            .registerMutation(getSpecies(MAGICBEES, "Supernatural"), getSpecies(MAGICBEES, "Windy"), 15);
+        tMutation.restrictTemperature(HOT);
+        if (Thaumcraft.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 0);
+    }),
+    FIRE(GTBranchDefinition.INFUSEDSHARD, "Fire", false, new Color(0xED3801), new Color(0x3B0E00), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.INFUSEDIGNIS), 0.30f);
+        beeSpecies.setHumidity(ARID);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(MAGICBEES, "Supernatural"), AIR, 15);
+        tMutation.restrictTemperature(HELLISH);
+        if (Thaumcraft.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 1);
+    }),
+    WATER(GTBranchDefinition.INFUSEDSHARD, "Water", false, new Color(0x0090FF), new Color(0x002542), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.INFUSEDAQUA), 0.30f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(FIRE, AIR, 15);
+        tMutation.restrictTemperature(ICY);
+        if (Thaumcraft.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 2);
+    }),
+    EARTH(GTBranchDefinition.INFUSEDSHARD, "Earth", false, new Color(0x008600), new Color(0x003300), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.INFUSEDTERRA), 0.30f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(WATER, FIRE, 15);
+        tMutation.restrictTemperature(WARM);
+        if (Thaumcraft.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 3);
+    }),
+    ORDER(GTBranchDefinition.INFUSEDSHARD, "Order", false, new Color(0x8A97B0), new Color(0x5C5F62), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.INFUSEDORDO), 0.30f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(EARTH, FIRE, 15);
+        tMutation.restrictTemperature(ICY);
+        if (Thaumcraft.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 4);
+    }),
+    CHAOS(GTBranchDefinition.INFUSEDSHARD, "Chaos", false, new Color(0x2E2E41), new Color(0x232129), beeSpecies -> {
+        beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.INFUSEDPERDITIO), 0.30f);
+        beeSpecies.setHumidity(EnumHumidity.NORMAL);
+        beeSpecies.setHasEffect();
+    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+        IBeeMutationCustom tMutation = dis.registerMutation(ORDER, FIRE, 15);
+        tMutation.restrictTemperature(ICY);
+        if (Thaumcraft.isModLoaded())
+            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 5);
+    }),
+    NETHERSHARD(GTBranchDefinition.INFUSEDSHARD, "NetherShard", false, new Color(0xBE0135), new Color(0x350211),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.NETHERSHARD), 0.30f);
+            beeSpecies.setHumidity(ARID);
+            beeSpecies.setTemperature(HOT);
+            beeSpecies.setHasEffect();
+        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(CHAOS, FIRE, 15);
+            GregTechAPI.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTechAPI.sBlockGem3, 3));
+        }),
+    ENDSHARD(GTBranchDefinition.INFUSEDSHARD, "EnderShard", false, new Color(0x2E2E41), new Color(0x232129),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.ENDERSHARD), 0.30f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(NETHERSHARD, ENDDUST, 15);
+            tMutation.restrictTemperature(ICY);
+            GregTechAPI.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTechAPI.sBlockGem1, 7));
+        }),
+    // Organic branch 2.0
+    UNKNOWNWATER(GTBranchDefinition.ORGANIC, "UnknownLiquid", false, new Color(0x4333A5), new Color(0x36ABFF),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.UNKNOWNLIQUID), 0.20f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST),
+        dis -> dis.registerMutation(INFINITYCATALYST, MYSTERIOUSCRYSTAL, 5)),
+    // Endgame bees
+    JAEGERMEISTER(GTBranchDefinition.ENDGAME, "JaegerMeister", false, new Color(0x05AD18), new Color(0xE7DAC3),
+        beeSpecies -> {
+            beeSpecies.addProduct(GTModHandler.getModItem(CropsPlusPlus.ID, "BppPotions", 1L, 8), 0.01f);
+            beeSpecies.setHumidity(EnumHumidity.NORMAL);
+            beeSpecies.setNocturnal();
+            beeSpecies.setHasEffect();
+        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
+            IBeeMutationCustom tMutation = dis.registerMutation(INFINITYCATALYST, NAQUADRIA, 5);
+            tMutation.requireResource(GregTechAPI.sBlockMachines, 4684);
+            tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(100, "Deep Dark")); // Deep Dark
+                                                                                                     // dim
+        });
+
+    private final GTBranchDefinition branch;
+    private final GTAlleleBeeSpecies species;
+    private final Consumer mSpeciesProperties;
+    private final Consumer mAlleles;
+    private final Consumer mMutations;
+    private IAllele[] template;
+    private IBeeGenome genome;
+
+    GTBeeDefinition(GTBranchDefinition branch, String binomial, boolean dominant, Color primary, Color secondary,
+        Consumer aSpeciesProperties, Consumer aAlleles,
+        Consumer aMutations) {
+        this.mAlleles = aAlleles;
+        this.mMutations = aMutations;
+        this.mSpeciesProperties = aSpeciesProperties;
+        String lowercaseName = this.toString()
+            .toLowerCase(Locale.ENGLISH);
+        String species = WordUtils.capitalize(lowercaseName);
+
+        String uid = "gregtech.bee.species" + species;
+        String description = "for.description." + lowercaseName;
+        String name = "for.bees.species." + lowercaseName;
+        GTLanguageManager.addStringLocalization("for.bees.species." + lowercaseName, species);
+
+        String authority = GTLanguageManager.getTranslation("for.bees.authority." + lowercaseName);
+        if (authority.equals("for.bees.authority." + lowercaseName)) {
+            authority = "GTNH";
+        }
+        this.branch = branch;
+        this.species = new GTAlleleBeeSpecies(
+            uid,
+            dominant,
+            name,
+            authority,
+            description,
+            branch.getBranch(),
+            binomial,
+            primary,
+            secondary);
+    }
+
+    public static void initBees() {
+        for (GTBeeDefinition bee : values()) {
+            bee.init();
+        }
+        for (GTBeeDefinition bee : values()) {
+            bee.registerMutations();
+        }
+    }
+
+    static IAlleleBeeEffect getEffect(byte modid, String name) {
+        String s = switch (modid) {
+            case EXTRABEES -> "extrabees.effect." + name;
+            case GENDUSTRY -> "gendustry.effect." + name;
+            case MAGICBEES -> "magicbees.effect" + name;
+            case GREGTECH -> "gregtech.effect" + name;
+            default -> "forestry.effect" + name;
+        };
+        return (IAlleleBeeEffect) AlleleManager.alleleRegistry.getAllele(s);
+    }
+
+    static IAlleleFlowers getFlowers(byte modid, String name) {
+        String s = switch (modid) {
+            case EXTRABEES -> "extrabees.flower." + name;
+            case GENDUSTRY -> "gendustry.flower." + name;
+            case MAGICBEES -> "magicbees.flower" + name;
+            case GREGTECH -> "gregtech.flower" + name;
+            default -> "forestry.flowers" + name;
+        };
+        return (IAlleleFlowers) AlleleManager.alleleRegistry.getAllele(s);
+    }
+
+    private static IAlleleBeeSpecies getSpecies(byte modid, String name) {
+        String s = switch (modid) {
+            case EXTRABEES -> "extrabees.species." + name;
+            case GENDUSTRY -> "gendustry.bee." + name;
+            case MAGICBEES -> "magicbees.species" + name;
+            case GREGTECH -> "gregtech.species" + name;
+            default -> "forestry.species" + name;
+        };
+        IAlleleBeeSpecies ret = (IAlleleBeeSpecies) AlleleManager.alleleRegistry.getAllele(s);
+        if (ret == null) {
+            ret = NAQUADRIA.species;
+        }
+
+        return ret;
+    }
+
+    private void setSpeciesProperties(GTAlleleBeeSpecies beeSpecies) {
+        this.mSpeciesProperties.accept(beeSpecies);
+    }
+
+    private void setAlleles(IAllele[] template) {
+        this.mAlleles.accept(template);
+    }
+
+    private void registerMutations() {
+        this.mMutations.accept(this);
+    }
+
+    private void init() {
+        setSpeciesProperties(species);
+
+        template = branch.getTemplate();
+        AlleleHelper.instance.set(template, SPECIES, species);
+        setAlleles(template);
+
+        genome = BeeManager.beeRoot.templateAsGenome(template);
+
+        BeeManager.beeRoot.registerTemplate(template);
+    }
+
+    private IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, IAlleleBeeSpecies parent2, int chance) {
+        return registerMutation(parent1, parent2, chance, 1f);
+    }
+
+    private IBeeMutationCustom registerMutation(GTBeeDefinition parent1, IAlleleBeeSpecies parent2, int chance) {
+        return registerMutation(parent1, parent2, chance, 1f);
+    }
+
+    private IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, GTBeeDefinition parent2, int chance) {
+        return registerMutation(parent1, parent2, chance, 1f);
+    }
+
+    private IBeeMutationCustom registerMutation(GTBeeDefinition parent1, GTBeeDefinition parent2, int chance) {
+        return registerMutation(parent1, parent2, chance, 1f);
+    }
+
+    /**
+     * Diese neue Funtion erlaubt Mutationsraten unter 1%. Setze dazu die Mutationsrate als Bruch mit chance /
+     * chanceDivider This new function allows Mutation percentages under 1%. Set them as a fraction with chance /
+     * chanceDivider
+     */
+    private IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, IAlleleBeeSpecies parent2, int chance,
+        float chanceDivider) {
+        return new GTBeeMutation(parent1, parent2, this.getTemplate(), chance, chanceDivider);
+    }
+
+    private IBeeMutationCustom registerMutation(GTBeeDefinition parent1, IAlleleBeeSpecies parent2, int chance,
+        float chanceDivider) {
+        return registerMutation(parent1.species, parent2, chance, chanceDivider);
+    }
+
+    private IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, GTBeeDefinition parent2, int chance,
+        float chanceDivider) {
+        return registerMutation(parent1, parent2.species, chance, chanceDivider);
+    }
+
+    private IBeeMutationCustom registerMutation(GTBeeDefinition parent1, GTBeeDefinition parent2, int chance,
+        float chanceDivider) {
+        return registerMutation(parent1.species, parent2, chance, chanceDivider);
+    }
+
+    @Override
+    public final IAllele[] getTemplate() {
+        return Arrays.copyOf(template, template.length);
+    }
+
+    @Override
+    public final IBeeGenome getGenome() {
+        return genome;
+    }
+
+    @Override
+    public final IBee getIndividual() {
+        return new Bee(genome);
+    }
+
+    @Override
+    public final ItemStack getMemberStack(EnumBeeType beeType) {
+        return BeeManager.beeRoot.getMemberStack(getIndividual(), beeType.ordinal());
+    }
+}
diff --git a/src/main/java/gregtech/loaders/misc/GTBees.java b/src/main/java/gregtech/loaders/misc/GTBees.java
new file mode 100644
index 0000000000..02fb6d19e5
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/GTBees.java
@@ -0,0 +1,231 @@
+package gregtech.loaders.misc;
+
+import static gregtech.api.enums.Mods.Forestry;
+import static gregtech.api.enums.Mods.GalaxySpace;
+import static gregtech.api.enums.Mods.TwilightForest;
+
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.world.World;
+import net.minecraft.world.biome.BiomeGenBase;
+
+import forestry.api.apiculture.EnumBeeChromosome;
+import forestry.api.apiculture.IAlleleBeeEffect;
+import forestry.api.core.IClimateProvider;
+import forestry.api.genetics.AlleleManager;
+import forestry.api.genetics.IAllele;
+import forestry.api.genetics.IAlleleArea;
+import forestry.api.genetics.IAlleleFloat;
+import forestry.api.genetics.IAlleleInteger;
+import forestry.api.genetics.IGenome;
+import forestry.api.genetics.IMutationCondition;
+import forestry.core.genetics.alleles.Allele;
+import forestry.core.utils.StringUtil;
+import gregtech.GTMod;
+import gregtech.api.metatileentity.BaseMetaTileEntity;
+import gregtech.common.bees.GTAlleleHelper;
+import gregtech.common.items.ItemComb;
+import gregtech.common.items.ItemDrop;
+import gregtech.common.items.ItemPollen;
+import gregtech.common.items.ItemPropolis;
+import gregtech.loaders.misc.bees.GTAlleleEffect;
+import gregtech.loaders.misc.bees.GTEffectMachineBoost;
+import gregtech.loaders.misc.bees.GTEffectTreeTwister;
+import gregtech.loaders.misc.bees.GTFlowers;
+
+public class GTBees {
+
+    public static IAlleleInteger noFertility;
+    public static IAlleleInteger superFertility;
+
+    public static IAlleleInteger noFlowering;
+    public static IAlleleInteger superFlowering;
+
+    public static IAlleleArea noTerritory;
+    public static IAlleleArea superTerritory;
+
+    public static IAlleleFloat noWork;
+    public static IAlleleFloat speedBlinding;
+    public static IAlleleFloat superSpeed;
+
+    public static IAlleleInteger blinkLife;
+    public static IAlleleInteger superLife;
+
+    public static IAlleleBeeEffect treetwisterEffect;
+    public static IAlleleBeeEffect machineBoostEffect;
+
+    public static ItemPropolis propolis;
+    public static ItemPollen pollen;
+    public static ItemDrop drop;
+    public static ItemComb combs;
+
+    public GTBees() {
+        if (!(Forestry.isModLoaded() && GTMod.gregtechproxy.mGTBees)) {
+            return;
+        }
+        GTFlowers.doInit();
+        GTAlleleHelper.initialisation();
+        setupGTAlleles();
+        propolis = new ItemPropolis();
+        propolis.initPropolisRecipes();
+        pollen = new ItemPollen();
+        drop = new ItemDrop();
+        drop.initDropsRecipes();
+        combs = new ItemComb();
+        combs.initCombsRecipes();
+        combs.registerOreDict();
+        GTBeeDefinition.initBees();
+
+    }
+
+    private static void setupGTAlleles() {
+
+        noFertility = new AlleleInteger("fertilitySterile", 0, false, EnumBeeChromosome.FERTILITY);
+        superFertility = new AlleleInteger("fertilityMultiply", 8, false, EnumBeeChromosome.FERTILITY);
+
+        noFlowering = new AlleleInteger("floweringNonpollinating", 0, false, EnumBeeChromosome.FLOWERING);
+        superFlowering = new AlleleInteger("floweringNaturalistic", 240, false, EnumBeeChromosome.FLOWERING);
+
+        noTerritory = new AlleleArea("areaLethargic", 1, 1, false);
+        superTerritory = new AlleleArea("areaExploratory", 32, 16, false);
+
+        noWork = new AlleleFloat("speedUnproductive", 0, false);
+        superSpeed = new AlleleFloat("speedAccelerated", 4F, false);
+        speedBlinding = AlleleManager.alleleRegistry.getAllele("magicbees.speedBlinding") == null
+            ? new AlleleFloat("speedBlinding", 2f, false)
+            : (IAlleleFloat) AlleleManager.alleleRegistry.getAllele("magicbees.speedBlinding");
+
+        blinkLife = new AlleleInteger("lifeBlink", 2, false, EnumBeeChromosome.LIFESPAN);
+        superLife = new AlleleInteger("lifeEon", 600, false, EnumBeeChromosome.LIFESPAN);
+        machineBoostEffect = new GTEffectMachineBoost();
+
+        if (GalaxySpace.isModLoaded() && TwilightForest.isModLoaded()) {
+            GTMod.GT_FML_LOGGER.info("treetwisterEffect: GalaxySpace and TwilightForest loaded, using default impl");
+            treetwisterEffect = new GTEffectTreeTwister();
+        } else {
+            GTMod.GT_FML_LOGGER
+                .info("treetwisterEffect: GalaxySpace or TwilightForest was not loaded, using fallback impl");
+            treetwisterEffect = GTAlleleEffect.FORESTRY_BASE_EFFECT;
+        }
+    }
+
+    private static class AlleleFloat extends Allele implements IAlleleFloat {
+
+        private final float value;
+
+        public AlleleFloat(String id, float val, boolean isDominant) {
+            super("gregtech." + id, "gregtech." + id, isDominant);
+            this.value = val;
+            AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.SPEED);
+        }
+
+        @Override
+        public float getValue() {
+            return this.value;
+        }
+    }
+
+    private static class AlleleInteger extends Allele implements IAlleleInteger {
+
+        private final int value;
+
+        public AlleleInteger(String id, int val, boolean isDominant, EnumBeeChromosome c) {
+            super("gregtech." + id, "gregtech." + id, isDominant);
+            this.value = val;
+            AlleleManager.alleleRegistry.registerAllele(this, c);
+        }
+
+        @Override
+        public int getValue() {
+            return this.value;
+        }
+    }
+
+    private static class AlleleArea extends Allele implements IAlleleArea {
+
+        private final int[] value;
+
+        public AlleleArea(String id, int rangeXZ, int rangeY, boolean isDominant) {
+            super("gregtech." + id, "gregtech." + id, isDominant);
+            this.value = new int[] { rangeXZ, rangeY, rangeXZ };
+            AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.TERRITORY);
+        }
+
+        @Override
+        public int[] getValue() {
+            return this.value;
+        }
+    }
+
+    public static class DimensionMutationCondition implements IMutationCondition {
+
+        final int dimID;
+        final String dimName;
+
+        public DimensionMutationCondition(int id, String name) {
+            dimID = id;
+            dimName = name;
+        }
+
+        @Override
+        public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0,
+            IGenome genome1, IClimateProvider climate) {
+            if (world.provider.dimensionId == dimID) return 1;
+            return 0;
+        }
+
+        @Override
+        public String getDescription() {
+            return StringUtil.localizeAndFormat("mutation.condition.dim") + " " + dimName;
+        }
+    }
+
+    public static class BiomeIDMutationCondition implements IMutationCondition {
+
+        final int biomeID;
+        final String biomeName;
+
+        public BiomeIDMutationCondition(int id, String name) {
+            biomeID = id;
+            biomeName = name;
+        }
+
+        @Override
+        public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0,
+            IGenome genome1, IClimateProvider climate) {
+            if (climate.getBiome().biomeID == biomeID) return 1;
+            return 0;
+        }
+
+        @Override
+        public String getDescription() {
+            if (BiomeGenBase.getBiome(biomeID) != null) {
+                return StringUtil.localizeAndFormat("mutation.condition.biomeid") + " " + biomeName;
+            }
+            return "";
+        }
+    }
+
+    public static class ActiveGTMachineMutationCondition implements IMutationCondition {
+
+        public ActiveGTMachineMutationCondition() {
+
+        }
+
+        @Override
+        public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0,
+            IGenome genome1, IClimateProvider climate) {
+            TileEntity tileEntity = world.getTileEntity(x, y - 1, z);
+            if (tileEntity instanceof BaseMetaTileEntity machine) {
+                if (machine.isActive()) {
+                    return 1;
+                }
+            }
+            return 0;
+        }
+
+        @Override
+        public String getDescription() {
+            return "Needs a running GT Machine below to breed";
+        }
+    }
+}
diff --git a/src/main/java/gregtech/loaders/misc/GTBranchDefinition.java b/src/main/java/gregtech/loaders/misc/GTBranchDefinition.java
new file mode 100644
index 0000000000..9bc4acb114
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/GTBranchDefinition.java
@@ -0,0 +1,207 @@
+package gregtech.loaders.misc;
+
+import static forestry.api.apiculture.EnumBeeChromosome.CAVE_DWELLING;
+import static forestry.api.apiculture.EnumBeeChromosome.EFFECT;
+import static forestry.api.apiculture.EnumBeeChromosome.FERTILITY;
+import static forestry.api.apiculture.EnumBeeChromosome.FLOWERING;
+import static forestry.api.apiculture.EnumBeeChromosome.FLOWER_PROVIDER;
+import static forestry.api.apiculture.EnumBeeChromosome.HUMIDITY_TOLERANCE;
+import static forestry.api.apiculture.EnumBeeChromosome.LIFESPAN;
+import static forestry.api.apiculture.EnumBeeChromosome.NOCTURNAL;
+import static forestry.api.apiculture.EnumBeeChromosome.SPEED;
+import static forestry.api.apiculture.EnumBeeChromosome.TEMPERATURE_TOLERANCE;
+import static forestry.api.apiculture.EnumBeeChromosome.TERRITORY;
+import static forestry.api.apiculture.EnumBeeChromosome.TOLERANT_FLYER;
+import static forestry.core.genetics.alleles.EnumAllele.Fertility;
+import static forestry.core.genetics.alleles.EnumAllele.Flowering;
+import static forestry.core.genetics.alleles.EnumAllele.Flowers;
+import static forestry.core.genetics.alleles.EnumAllele.Lifespan;
+import static forestry.core.genetics.alleles.EnumAllele.Speed;
+import static forestry.core.genetics.alleles.EnumAllele.Territory;
+import static forestry.core.genetics.alleles.EnumAllele.Tolerance;
+import static gregtech.loaders.misc.GTBeeDefinition.getEffect;
+import static gregtech.loaders.misc.GTBeeDefinition.getFlowers;
+import static gregtech.loaders.misc.GTBeeDefinitionReference.EXTRABEES;
+import static gregtech.loaders.misc.GTBeeDefinitionReference.MAGICBEES;
+
+import java.util.Arrays;
+import java.util.function.Consumer;
+
+import forestry.api.apiculture.BeeManager;
+import forestry.api.apiculture.EnumBeeChromosome;
+import forestry.api.genetics.IAllele;
+import forestry.api.genetics.IClassification;
+import forestry.apiculture.genetics.alleles.AlleleEffect;
+import forestry.core.genetics.alleles.AlleleHelper;
+
+public enum GTBranchDefinition {
+
+    ORGANIC("Fuelis", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(alleles, HUMIDITY_TOLERANCE, Tolerance.BOTH_2);
+        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.WHEAT);
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.SLOW);
+        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORTER);
+        AlleleHelper.instance.set(alleles, SPEED, Speed.SLOWEST);
+    }),
+    IC2("Industrialis", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
+        AlleleHelper.instance.set(alleles, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.SNOW);
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTER);
+        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORT);
+        AlleleHelper.instance.set(alleles, SPEED, Speed.SLOW);
+    }),
+    GTALLOY("Amalgamis", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
+        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.VANILLA);
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.AVERAGE);
+        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORTEST);
+        AlleleHelper.instance.set(alleles, SPEED, Speed.FAST);
+    }),
+    THAUMIC("Arcanis", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(alleles, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, getFlowers(EXTRABEES, "book"));
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTER);
+        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.LONGEST);
+    }),
+    GEM("Ornamentis", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.NETHER);
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.AVERAGE);
+    }),
+    METAL("Metaliferis", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
+        AlleleHelper.instance.set(alleles, CAVE_DWELLING, true);
+        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.JUNGLE);
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.SLOWER);
+    }),
+    RAREMETAL("Mineralis", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.DOWN_1);
+        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.CACTI);
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FAST);
+    }),
+    RADIOACTIVE("Criticalis", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.END);
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.AVERAGE);
+        AlleleHelper.instance.set(alleles, SPEED, GTBees.speedBlinding);
+        AlleleHelper.instance.set(alleles, SPEED, getEffect(EXTRABEES, "radioactive"));
+    }),
+    TWILIGHT("Nemoris Obscuri", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(alleles, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.VANILLA);
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTER);
+    }),
+    HEE("Finis Expansiones", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_2);
+        AlleleHelper.instance.set(alleles, HUMIDITY_TOLERANCE, Tolerance.BOTH_2);
+        AlleleHelper.instance.set(alleles, NOCTURNAL, true);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, getFlowers(EXTRABEES, "book"));
+        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORT);
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.SLOW);
+        AlleleHelper.instance.set(alleles, SPEED, Speed.FASTEST);
+        AlleleHelper.instance.set(alleles, TERRITORY, Territory.LARGER);
+    }),
+    SPACE("Cosmicis", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
+        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
+        AlleleHelper.instance.set(alleles, NOCTURNAL, true);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTEST);
+        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.LONGEST);
+        AlleleHelper.instance.set(alleles, SPEED, Speed.FAST);
+        AlleleHelper.instance.set(alleles, TERRITORY, Territory.LARGEST);
+    }),
+    PLANET("Planetaris", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTEST);
+        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.NORMAL);
+        AlleleHelper.instance.set(alleles, SPEED, Speed.FASTEST);
+        AlleleHelper.instance.set(alleles, TERRITORY, Territory.LARGER);
+    }),
+    NOBLEGAS("Nobilis Gasorum", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_2);
+        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTEST);
+        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.NORMAL);
+        AlleleHelper.instance.set(alleles, SPEED, Speed.FASTEST);
+        AlleleHelper.instance.set(alleles, TERRITORY, Territory.AVERAGE);
+    }),
+    INFUSEDSHARD("Infusa Shard", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
+        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
+        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, getFlowers(MAGICBEES, "rock"));
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTEST);
+        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORTEST);
+        AlleleHelper.instance.set(alleles, SPEED, Speed.FASTEST);
+        AlleleHelper.instance.set(alleles, TERRITORY, Territory.LARGEST);
+    }),
+    ENDGAME("ENDUS GAMUS", alleles -> {
+        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_5);
+        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
+        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTEST);
+        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORTEST);
+        AlleleHelper.instance.set(alleles, SPEED, Speed.FASTEST);
+        AlleleHelper.instance.set(alleles, TERRITORY, Territory.LARGEST);
+    });
+
+    private static IAllele[] defaultTemplate;
+    private final IClassification branch;
+    private final Consumer mBranchProperties;
+
+    GTBranchDefinition(String scientific, Consumer aBranchProperties) {
+        this.branch = BeeManager.beeFactory.createBranch(
+            this.name()
+                .toLowerCase(),
+            scientific);
+        this.mBranchProperties = aBranchProperties;
+    }
+
+    private static IAllele[] getDefaultTemplate() {
+        if (defaultTemplate == null) {
+            defaultTemplate = new IAllele[EnumBeeChromosome.values().length];
+
+            AlleleHelper.instance.set(defaultTemplate, SPEED, Speed.SLOWEST);
+            AlleleHelper.instance.set(defaultTemplate, LIFESPAN, Lifespan.SHORTER);
+            AlleleHelper.instance.set(defaultTemplate, FERTILITY, Fertility.NORMAL);
+            AlleleHelper.instance.set(defaultTemplate, TEMPERATURE_TOLERANCE, Tolerance.NONE);
+            AlleleHelper.instance.set(defaultTemplate, NOCTURNAL, false);
+            AlleleHelper.instance.set(defaultTemplate, HUMIDITY_TOLERANCE, Tolerance.NONE);
+            AlleleHelper.instance.set(defaultTemplate, TOLERANT_FLYER, false);
+            AlleleHelper.instance.set(defaultTemplate, CAVE_DWELLING, false);
+            AlleleHelper.instance.set(defaultTemplate, FLOWER_PROVIDER, Flowers.VANILLA);
+            AlleleHelper.instance.set(defaultTemplate, FLOWERING, Flowering.SLOWEST);
+            AlleleHelper.instance.set(defaultTemplate, TERRITORY, Territory.AVERAGE);
+            AlleleHelper.instance.set(defaultTemplate, EFFECT, AlleleEffect.effectNone);
+        }
+        return Arrays.copyOf(defaultTemplate, defaultTemplate.length);
+    }
+
+    void setBranchProperties(IAllele[] template) {
+        this.mBranchProperties.accept(template);
+    }
+
+    public final IAllele[] getTemplate() {
+        IAllele[] template = getDefaultTemplate();
+        setBranchProperties(template);
+        return template;
+    }
+
+    public final IClassification getBranch() {
+        return branch;
+    }
+}
diff --git a/src/main/java/gregtech/loaders/misc/GT_Achievements.java b/src/main/java/gregtech/loaders/misc/GT_Achievements.java
deleted file mode 100644
index 1245a1dbaf..0000000000
--- a/src/main/java/gregtech/loaders/misc/GT_Achievements.java
+++ /dev/null
@@ -1,822 +0,0 @@
-package gregtech.loaders.misc;
-
-import static gregtech.api.enums.Mods.Thaumcraft;
-
-import java.util.concurrent.ConcurrentHashMap;
-
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.init.Items;
-import net.minecraft.item.ItemStack;
-import net.minecraft.stats.Achievement;
-import net.minecraft.stats.AchievementList;
-import net.minecraft.stats.StatBase;
-import net.minecraftforge.common.AchievementPage;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.event.entity.player.EntityItemPickupEvent;
-import net.minecraftforge.fluids.FluidStack;
-
-import cpw.mods.fml.common.FMLCommonHandler;
-import cpw.mods.fml.common.eventhandler.SubscribeEvent;
-import cpw.mods.fml.common.gameevent.PlayerEvent.ItemCraftedEvent;
-import cpw.mods.fml.common.gameevent.PlayerEvent.ItemSmeltedEvent;
-import gregtech.GT_Mod;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.objects.ItemData;
-import gregtech.api.recipe.RecipeMaps;
-import gregtech.api.util.GT_Log;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Recipe;
-import gregtech.common.items.GT_MetaGenerated_Tool_01;
-import gregtech.common.items.ID_MetaTool_01;
-import ic2.core.Ic2Items;
-import thaumcraft.api.ThaumcraftApiHelper;
-
-public class GT_Achievements {
-
-    public static int oreReg = -1;
-    public static int assReg = -1;
-    public ConcurrentHashMap achievementList;
-    public ConcurrentHashMap issuedAchievements;
-    public int adjX = 5;
-    public int adjY = 9;
-
-    public GT_Achievements() {
-        this.achievementList = new ConcurrentHashMap<>();
-        this.issuedAchievements = new ConcurrentHashMap<>();
-
-        for (GT_Recipe recipe : RecipeMaps.assemblylineVisualRecipes.getAllRecipes()) {
-            registerAssAchievement(recipe);
-        }
-
-        registerAchievement(
-            "flintpick",
-            0,
-            0,
-            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(2, 1, Materials.Flint, Materials.Wood, null),
-            "",
-            false);
-        registerAchievement("crops", -4, 0, GT_ModHandler.getIC2Item("crop", 1L), "flintpick", false);
-        registerAchievement("havestlead", -4, 2, ItemList.Crop_Drop_Plumbilia.get(1), "crops", false);
-        registerAchievement("havestcopper", -2, 1, ItemList.Crop_Drop_Coppon.get(1), "crops", false);
-        registerAchievement("havesttin", -2, -1, ItemList.Crop_Drop_Tine.get(1), "crops", false);
-        registerAchievement("havestoil", -4, -4, ItemList.Crop_Drop_OilBerry.get(1), "crops", false);
-        registerAchievement("havestiron", -2, -3, ItemList.Crop_Drop_Ferru.get(1), "crops", false);
-        registerAchievement("havestgold", -2, -6, ItemList.Crop_Drop_Aurelia.get(1), "havestiron", false);
-        registerAchievement("havestsilver", -4, -5, ItemList.Crop_Drop_Argentia.get(1), "havestiron", false);
-        registerAchievement("havestemeralds", -2, -8, ItemList.Crop_Drop_BobsYerUncleRanks.get(1), "havestgold", false);
-
-        registerAchievement(
-            "tools",
-            0,
-            4,
-            GT_MetaGenerated_Tool_01.INSTANCE
-                .getToolWithStats(ID_MetaTool_01.HARDHAMMER.ID, 1, Materials.Iron, Materials.Wood, null),
-            "flintpick",
-            false);
-        registerAchievement(
-            "driltime",
-            2,
-            4,
-            GT_MetaGenerated_Tool_01.INSTANCE
-                .getToolWithStats(ID_MetaTool_01.DRILL_LV.ID, 1, Materials.BlueSteel, Materials.StainlessSteel, null),
-            "tools",
-            false);
-        registerAchievement(
-            "brrrr",
-            2,
-            6,
-            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                ID_MetaTool_01.CHAINSAW_LV.ID,
-                1,
-                Materials.BlueSteel,
-                Materials.StainlessSteel,
-                null),
-            "driltime",
-            false);
-        registerAchievement(
-            "highpowerdrill",
-            3,
-            5,
-            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                ID_MetaTool_01.DRILL_HV.ID,
-                1,
-                Materials.TungstenSteel,
-                Materials.TungstenSteel,
-                null),
-            "driltime",
-            false);
-        registerAchievement(
-            "hammertime",
-            3,
-            7,
-            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                ID_MetaTool_01.JACKHAMMER.ID,
-                1,
-                Materials.TungstenSteel,
-                Materials.TungstenSteel,
-                null),
-            "highpowerdrill",
-            false);
-
-        registerAchievement(
-            "unitool",
-            -2,
-            4,
-            GT_MetaGenerated_Tool_01.INSTANCE
-                .getToolWithStats(ID_MetaTool_01.UNIVERSALSPADE.ID, 1, Materials.Steel, Materials.Iron, null),
-            "tools",
-            false);
-        registerAchievement("recycling", -4, 4, ItemList.Machine_LV_ArcFurnace.get(1), "unitool", false);
-
-        registerAchievement(
-            "crushed",
-            0,
-            6,
-            GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Tin, 1L),
-            "tools",
-            false);
-        registerAchievement(
-            "cleandust",
-            0,
-            10,
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L),
-            "crushed",
-            false);
-        registerAchievement(
-            "washing",
-            -2,
-            6,
-            GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Iron, 1L),
-            "crushed",
-            false);
-        registerAchievement(
-            "spinit",
-            -4,
-            6,
-            GT_OreDictUnificator.get(OrePrefixes.crushedCentrifuged, Materials.Redstone, 1L),
-            "crushed",
-            false);
-
-        registerAchievement("newfuel", -4, 8, ItemList.ThoriumCell_4.get(1), "spinit", false);
-        registerAchievement(
-            "newmetal",
-            -4,
-            10,
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lutetium, 1L),
-            "newfuel",
-            false);
-        registerAchievement("reflect", -2, 9, ItemList.Neutron_Reflector.get(1), "newfuel", false);
-
-        registerAchievement(
-            "bronze",
-            2,
-            0,
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 1L),
-            "flintpick",
-            false);
-        registerAchievement(
-            "simplyeco",
-            2,
-            2,
-            ItemList.Machine_Bronze_Boiler_Solar.get(1, ItemList.Machine_HP_Solar.get(1L)),
-            "bronze",
-            false);
-        registerAchievement("firststeam", 2, -2, ItemList.Machine_Bronze_Boiler.get(1), "bronze", false);
-        registerAchievement("alloysmelter", 2, -4, ItemList.Machine_Bronze_AlloySmelter.get(1), "firststeam", false);
-        registerAchievement("macerator", 0, -2, ItemList.Machine_Bronze_Macerator.get(1), "firststeam", false);
-        registerAchievement("extract", 0, -4, ItemList.Machine_Bronze_Extractor.get(1), "alloysmelter", false);
-
-        registerAchievement("smallparts", 0, -5, ItemList.Circuit_Primitive.get(1), "alloysmelter", false);
-        registerAchievement("gtbasiccircuit", 0, -8, Ic2Items.electronicCircuit.copy(), "smallparts", false);
-        registerAchievement("bettercircuits", 0, -9, ItemList.Circuit_Good.get(1), "gtbasiccircuit", false);
-        registerAchievement("stepforward", -2, -9, Ic2Items.advancedCircuit.copy(), "bettercircuits", false);
-        registerAchievement("gtmonosilicon", -5, -10, ItemList.Circuit_Silicon_Ingot.get(1), "stepforward", false);
-        registerAchievement("gtlogicwafer", -7, -10, ItemList.Circuit_Wafer_ILC.get(1), "gtmonosilicon", false);
-        registerAchievement("gtlogiccircuit", -9, -10, ItemList.Circuit_Basic.get(1), "gtlogicwafer", false);
-        registerAchievement("gtcleanroom", -11, -10, ItemList.Machine_Multi_Cleanroom.get(1), "gtlogiccircuit", false);
-        registerAchievement("energyflow", -13, -10, ItemList.Circuit_Nanoprocessor.get(1), "gtcleanroom", false);
-        registerAchievement(
-            "gtquantumprocessor",
-            -13,
-            -12,
-            ItemList.Circuit_Quantumprocessor.get(1),
-            "energyflow",
-            false);
-        registerAchievement(
-            "gtcrystalprocessor",
-            -11,
-            -12,
-            ItemList.Circuit_Crystalprocessor.get(1),
-            "gtquantumprocessor",
-            false);
-        registerAchievement("gtwetware", -9, -12, ItemList.Circuit_Neuroprocessor.get(1), "gtcrystalprocessor", false);
-        registerAchievement("gtwetmain", -7, -12, ItemList.Circuit_Wetwaremainframe.get(1), "gtwetware", false);
-
-        registerAchievement("orbs", -10, -14, ItemList.Energy_LapotronicOrb.get(1), "energyflow", false);
-        registerAchievement("thatspower", -8, -14, ItemList.Energy_LapotronicOrb2.get(1), "orbs", false);
-        registerAchievement("datasaving", -2, -12, ItemList.Tool_DataOrb.get(1), "stepforward", false);
-        registerAchievement("superbuffer", 0, -12, ItemList.Automation_SuperBuffer_LV.get(1), "datasaving", false);
-        registerAchievement("newstorage", -2, -14, ItemList.Quantum_Chest_HV.get(1), "superbuffer", false);
-        registerAchievement("whereistheocean", 2, -14, ItemList.Quantum_Tank_IV.get(1), "superbuffer", false);
-        registerAchievement("luck", 2, -6, ItemList.ZPM.get(1), "", false);
-
-        registerAchievement(
-            "steel",
-            4,
-            0,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L),
-            "bronze",
-            false);
-        registerAchievement("highpressure", 4, 2, ItemList.Machine_Steel_Boiler.get(1), "steel", false);
-        registerAchievement(
-            "extremepressure",
-            4,
-            4,
-            ItemList.Machine_Multi_LargeBoiler_Steel.get(1),
-            "highpressure",
-            false);
-        registerAchievement("cheapermac", 6, 1, ItemList.Machine_LV_Hammer.get(1), "steel", false);
-        registerAchievement(
-            "complexalloys",
-            6,
-            3,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.BlueSteel, 1L),
-            "cheapermac",
-            false);
-
-        registerAchievement(
-            "magneticiron",
-            4,
-            -2,
-            GT_OreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1L),
-            "steel",
-            false);
-        registerAchievement("lvmotor", 4, -6, ItemList.Electric_Motor_LV.get(1), "magneticiron", false);
-        registerAchievement("pumpcover", 2, -8, ItemList.Electric_Pump_LV.get(1), "lvmotor", false);
-        registerAchievement("closeit", 2, -10, ItemList.Cover_Shutter.get(1), "pumpcover", false);
-        registerAchievement("slurp", 2, -12, ItemList.Pump_HV.get(1), "closeit", false);
-        registerAchievement("transport", 4, -10, ItemList.Conveyor_Module_LV.get(1), "lvmotor", false);
-        registerAchievement("manipulation", 4, -12, ItemList.Cover_Controller.get(1), "transport", false);
-        registerAchievement("buffer", 4, -14, ItemList.Automation_ChestBuffer_LV.get(1), "manipulation", false);
-        registerAchievement("complexmachines", 6, -9, ItemList.Robot_Arm_LV.get(1), "lvmotor", false);
-        registerAchievement("avengers", 8, -11, ItemList.Machine_LV_Assembler.get(1), "complexmachines", false);
-        registerAchievement("filterregulate", 10, -11, ItemList.Component_Filter.get(1), "avengers", false);
-
-        registerAchievement("steampower", 6, -6, ItemList.Generator_Steam_Turbine_LV.get(1), "lvmotor", false);
-        registerAchievement("batterys", 6, -4, ItemList.Battery_Buffer_2by2_MV.get(1), "steampower", false);
-        registerAchievement("badweather", 6, -8, ItemList.Casing_FireHazard.get(1), "steampower", false);
-        registerAchievement("electricproblems", 7, -7, ItemList.Casing_ExplosionHazard.get(1), "steampower", false);
-        registerAchievement("ebf", 8, -6, ItemList.Machine_Multi_BlastFurnace.get(1), "steampower", false);
-        registerAchievement("energyhatch", 12, -6, ItemList.Hatch_Energy_LV.get(1), "ebf", false);
-
-        registerAchievement(
-            "gtaluminium",
-            8,
-            0,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Aluminium, 1L),
-            "steel",
-            false);
-        registerAchievement("highpowersmelt", 8, 2, ItemList.Machine_Multi_Furnace.get(1), "gtaluminium", false);
-        registerAchievement("oilplant", 8, 4, ItemList.Distillation_Tower.get(1), "highpowersmelt", false);
-        registerAchievement("factory", 8, 6, ItemList.Processing_Array.get(1), "oilplant", false);
-        registerAchievement("upgradeebf", 8, -2, ItemList.Hatch_Energy_MV.get(1), "gtaluminium", false);
-        registerAchievement("maintainance", 10, -2, ItemList.Hatch_Maintenance.get(1), "upgradeebf", false);
-
-        registerAchievement("upgrade", 10, 0, ItemList.Casing_Coil_Kanthal.get(1), "gtaluminium", false);
-        registerAchievement(
-            "titan",
-            14,
-            0,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Titanium, 1L),
-            "upgrade",
-            false);
-        registerAchievement("magic", 14, 3, ItemList.MagicEnergyConverter_LV.get(1), "titan", false);
-        registerAchievement("highmage", 10, 3, ItemList.MagicEnergyAbsorber_HV.get(1), "magic", false);
-        registerAchievement("artificaldia", 12, 2, ItemList.IC2_Industrial_Diamond.get(1), "titan", false);
-        registerAchievement("muchsteam", 13, 1, ItemList.LargeSteamTurbine.get(1), "titan", false);
-        registerAchievement("efficientsteam", 11, 1, ItemList.LargeSteamTurbine.get(1), "muchsteam", false);
-
-        registerAchievement("upgrade2", 16, 0, ItemList.Casing_Coil_Nichrome.get(1), "titan", false);
-        registerAchievement(
-            "tungsten",
-            16,
-            2,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tungsten, 1L),
-            "upgrade2",
-            false);
-        registerAchievement(
-            "osmium",
-            16,
-            -2,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Osmium, 1L),
-            "upgrade2",
-            false);
-        registerAchievement("hightech", 15, -3, ItemList.Field_Generator_LV.get(1), "osmium", false);
-        registerAchievement("amplifier", 16, -5, ItemList.Machine_LV_Amplifab.get(1), "hightech", false);
-        registerAchievement("scanning", 13, -3, ItemList.Machine_HV_Scanner.get(1), "hightech", false);
-        registerAchievement("alienpower", 14, -5, ItemList.Generator_Naquadah_Mark_I.get(1), "hightech", false);
-        registerAchievement("universal", 15, -6, ItemList.Machine_LV_Massfab.get(1), "hightech", false);
-        registerAchievement("replication", 17, -6, ItemList.Machine_LV_Replicator.get(1), "universal", false);
-
-        registerAchievement(
-            "tungstensteel",
-            16,
-            4,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 1L),
-            "tungsten",
-            false);
-        registerAchievement("upgrade3", 15, 5, ItemList.Casing_Coil_TungstenSteel.get(1), "tungstensteel", false);
-        registerAchievement(
-            "hssg",
-            13,
-            5,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.HSSG, 1L),
-            "upgrade3",
-            false);
-        registerAchievement("upgrade4", 11, 5, ItemList.Casing_Coil_HSSG.get(1), "hssg", false);
-        registerAchievement(
-            "stargatematerial",
-            11,
-            7,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 1L),
-            "upgrade4",
-            false);
-        registerAchievement("conducting", 14, 6, ItemList.Casing_Coil_Superconductor.get(1), "upgrade3", false);
-        registerAchievement("fusion", 15, 7, ItemList.FusionComputer_LuV.get(1), "tungstensteel", false);
-        registerAchievement("higherefficency", 15, 9, ItemList.Generator_Plasma_EV.get(1), "fusion", false);
-        registerAchievement("advancing", 13, 7, ItemList.FusionComputer_ZPMV.get(1), "fusion", false);
-
-        registerAchievement("stargateliquid", 11, 9, ItemList.Generator_Plasma_IV.get(1), "advancing", false);
-        registerAchievement("tothelimit", 13, 9, ItemList.Generator_Plasma_IV.get(1), "advancing", false);
-        registerAchievement("fullefficiency", 12, 10, ItemList.Generator_Plasma_LuV.get(1), "tothelimit", false);
-        registerAchievement("upgrade5", 9, 9, ItemList.Casing_Coil_Naquadah.get(1), "stargateliquid", false);
-        registerAchievement(
-            "alienmetallurgy",
-            9,
-            7,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.NaquadahAlloy, 1L),
-            "upgrade5",
-            false);
-        registerAchievement("over9000", 7, 7, ItemList.Casing_Coil_NaquadahAlloy.get(1), "alienmetallurgy", false);
-        registerAchievement(
-            "finalpreparations",
-            7,
-            9,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadria, 1L),
-            "over9000",
-            false);
-        registerAchievement("denseaspossible", 6, 10, ItemList.FusionComputer_UV.get(1), "finalpreparations", false);
-
-        registerAchievement("zpmage", 8, 10, ItemList.Energy_Module.get(1), "denseaspossible", false);
-        registerAchievement("uvage", 10, 10, ItemList.Energy_Cluster.get(1), "zpmage", false);
-        registerAchievement("whatnow", 12, 10, ItemList.ZPM2.get(1), "uvage", false);
-
-        if (GT_Mod.gregtechproxy.mAchievements) {
-            AchievementPage.registerAchievementPage(
-                new AchievementPage(
-                    "GregTech 5",
-                    this.achievementList.values()
-                        .toArray(new Achievement[0])));
-            MinecraftForge.EVENT_BUS.register(this);
-            FMLCommonHandler.instance()
-                .bus()
-                .register(this);
-        }
-    }
-
-    public static void registerOre(Materials aMaterial, int min, int max, int chance, boolean overworld, boolean nether,
-        boolean end) {}
-
-    public Achievement registerAchievement(String textId, int x, int y, ItemStack icon, Achievement requirement,
-        boolean special) {
-        if (!GT_Mod.gregtechproxy.mAchievements) {
-            return null;
-        }
-        Achievement achievement = new Achievement(textId, textId, this.adjX + x, this.adjY + y, icon, requirement);
-        if (special) {
-            achievement.setSpecial();
-        }
-        ((StatBase) achievement).registerStat();
-        if (GT_Values.D2) {
-            GT_Log.out.println("achievement." + textId + "=");
-            GT_Log.out.println("achievement." + textId + ".desc=");
-        }
-        this.achievementList.put(textId, achievement);
-        return achievement;
-    }
-
-    public Achievement registerAchievement(String textId, int x, int y, ItemStack icon, String requirement,
-        boolean special) {
-        if (!GT_Mod.gregtechproxy.mAchievements) {
-            return null;
-        }
-        Achievement achievement = new Achievement(
-            textId,
-            textId,
-            this.adjX + x,
-            this.adjY + y,
-            icon,
-            getAchievement(requirement));
-        if (special) {
-            achievement.setSpecial();
-        }
-        ((StatBase) achievement).registerStat();
-        if (GT_Values.D2) {
-            GT_Log.out.println("achievement." + textId + "=");
-            GT_Log.out.println("achievement." + textId + ".desc=");
-        }
-        this.achievementList.put(textId, achievement);
-        return achievement;
-    }
-
-    public Achievement registerOreAchievement(Materials aMaterial) {
-        return null;
-    }
-
-    public Achievement registerAssAchievement(GT_Recipe recipe) {
-        if (recipe == null) {
-            GT_Mod.GT_FML_LOGGER.error("Invalid achievement registration attempt for null recipe", new Exception());
-            return null;
-        }
-        if (recipe.getOutput(0) == null) {
-            GT_Mod.GT_FML_LOGGER
-                .error("Invalid achievement registration attempt for recipe with null output", new Exception());
-            return null;
-        }
-        if (this.achievementList.get(
-            recipe.getOutput(0)
-                .getUnlocalizedName())
-            == null) {
-            assReg++;
-            return registerAchievement(
-                recipe.getOutput(0)
-                    .getUnlocalizedName(),
-                -(11 + assReg % 5),
-                ((assReg) / 5) - 8,
-                recipe.getOutput(0),
-                AchievementList.openInventory,
-                false);
-        }
-        return null;
-    }
-
-    public void issueAchievement(EntityPlayer entityplayer, String textId) {
-        if (entityplayer == null || !GT_Mod.gregtechproxy.mAchievements) {
-            return;
-        }
-        entityplayer.triggerAchievement(this.achievementList.get(textId));
-    }
-
-    public Achievement getAchievement(String textId) {
-        if (this.achievementList.containsKey(textId)) {
-            return this.achievementList.get(textId);
-        }
-        return null;
-    }
-
-    public void issueAchivementHatch(EntityPlayer player, ItemStack stack) {
-        if (player == null || stack == null) {
-            return;
-        }
-        ItemData data = GT_OreDictUnificator.getItemData(stack);
-
-        if ((data != null) && (data.mPrefix == OrePrefixes.ingot)) {
-            if (data.mMaterial.mMaterial == Materials.Aluminium) {
-                issueAchievement(player, "gtaluminium");
-            } else if (data.mMaterial.mMaterial == Materials.Titanium) {
-                issueAchievement(player, "titan");
-            } else if (data.mMaterial.mMaterial == Materials.BlueSteel) {
-                issueAchievement(player, "complexalloys");
-            } else if (data.mMaterial.mMaterial == Materials.Tungsten) {
-                issueAchievement(player, "tungsten");
-            } else if (data.mMaterial.mMaterial == Materials.Osmium) {
-                issueAchievement(player, "osmium");
-            } else if (data.mMaterial.mMaterial == Materials.TungstenSteel) {
-                issueAchievement(player, "tungstensteel");
-            } else if (data.mMaterial.mMaterial == Materials.HSSG) {
-                issueAchievement(player, "hssg");
-            } else if (data.mMaterial.mMaterial == Materials.Naquadah) {
-                issueAchievement(player, "stargatematerial");
-            } else if (data.mMaterial.mMaterial == Materials.NaquadahAlloy) {
-                issueAchievement(player, "alienmetallurgy");
-            } else if (data.mMaterial.mMaterial == Materials.Naquadria) {
-                issueAchievement(player, "finalpreparations");
-            }
-        }
-        if (stack.getUnlocalizedName()
-            .equals("ic2.itemPartIndustrialDiamond")) {
-            issueAchievement(player, "artificaldia");
-            issueAchievement(player, "buildCoalDiamond");
-        }
-    }
-
-    public void issueAchivementHatchFluid(EntityPlayer player, FluidStack fluid) {
-        if (player == null || fluid == null) {
-            return;
-        }
-        switch (fluid.getFluid()
-            .getUnlocalizedName()) {
-            case "fluid.plasma.helium" -> issueAchievement(player, "fusion");
-            case "fluid.molten.europium" -> issueAchievement(player, "advancing");
-            case "fluid.molten.naquadah" -> issueAchievement(player, "stargateliquid");
-            case "fluid.molten.americium" -> issueAchievement(player, "tothelimit");
-            case "fluid.molten.neutronium" -> issueAchievement(player, "denseaspossible");
-            case "fluid.plasma.nitrogen" -> issueAchievement(player, "higherefficency");
-        }
-    }
-
-    @SubscribeEvent
-    public void onCrafting(ItemCraftedEvent event) {
-        EntityPlayer player = event.player;
-        ItemStack stack = event.crafting;
-        if (player == null || stack == null) {
-            return;
-        }
-        ItemData data = GT_OreDictUnificator.getItemData(stack);
-        if (data != null) {
-            if (data.mPrefix == OrePrefixes.dust && data.mMaterial.mMaterial == Materials.Bronze) {
-                issueAchievement(player, "bronze");
-            }
-        }
-        switch (stack.getUnlocalizedName()) {
-            case "gt.metaitem.01.2300" -> issueAchievement(player, "bronze");
-            case "gt.metaitem.01.32700" -> issueAchievement(player, "smallparts");
-            case "gt.metaitem.01.32702" -> issueAchievement(player, "bettercircuits");
-            case "gt.metaitem.01.23354" -> issueAchievement(player, "magneticiron");
-            case "gt.metaitem.01.32600" -> {
-                issueAchievement(player, "lvmotor");
-                issueAchievement(player, "buildCable");
-            }
-            case "gt.metaitem.01.32610" -> issueAchievement(player, "pumpcover");
-            case "gt.metaitem.01.32630" -> issueAchievement(player, "transport");
-            case "gt.metaitem.01.32650" -> issueAchievement(player, "complexmachines");
-            case "gt.metaitem.01.32670" -> issueAchievement(player, "hightech");
-            case "ic2.blockCrop" -> issueAchievement(player, "crops");
-            case "ic2.itemPartCircuit" -> issueAchievement(player, "gtbasiccircuit");
-            case "ic2.itemPartCircuitAdv" -> issueAchievement(player, "stepforward");
-            case "gt.blockmachines.boiler.solar" -> issueAchievement(player, "simplyeco");
-            case "gt.blockmachines.boiler.bronze" -> issueAchievement(player, "firststeam");
-            case "gt.blockmachines.boiler.steel" -> issueAchievement(player, "highpressure");
-            case "gt.blockmachines.bronzemachine.macerator" -> {
-                issueAchievement(player, "macerator");
-                issueAchievement(player, "buildMacerator");
-            }
-            case "gt.blockmachines.bronzemachine.alloysmelter.tier.3" -> issueAchievement(player, "buildIndFurnace");
-            case "gt.blockmachines.bronzemachine.alloysmelter" -> {
-                issueAchievement(player, "alloysmelter");
-                issueAchievement(player, "buildElecFurnace");
-            }
-
-            case "gt.blockmachines.bronzemachine.extractor" -> {
-                issueAchievement(player, "extract");
-                issueAchievement(player, "buildCompressor");
-                issueAchievement(player, "buildExtractor");
-            }
-            case "gt.blockmachines.basicmachine.pump.tier.03" -> issueAchievement(player, "slurp");
-            case "gt.blockmachines.multimachine.blastfurnace" -> issueAchievement(player, "ebf");
-            case "gt.blockmachines.hatch.energy.tier.02" -> issueAchievement(player, "upgradeebf");
-            case "gt.blockmachines.multimachine.multifurnace" -> issueAchievement(player, "highpowersmelt");
-            case "gt.blockmachines.hatch.energy.tier.01" -> issueAchievement(player, "energyhatch");
-            case "gt.blockmachines.multimachine.processingarray" -> issueAchievement(player, "factory");
-            case "gt.blockmachines.basicgenerator.magicenergyconverter.tier.01" -> issueAchievement(player, "magic");
-            case "gt.blockmachines.basicgenerator.magicenergyabsorber.tier.03" -> issueAchievement(player, "highmage");
-            case "gt.blockmachines.basicgenerator.plasmagenerator.tier.07" -> issueAchievement(
-                player,
-                "fullefficiency");
-            case "gt.blockmachines.multimachine.largeturbine" -> issueAchievement(player, "muchsteam");
-            case "gt.blockmachines.multimachine.largehpturbine" -> issueAchievement(player, "efficientsteam");
-            case "gt.blockmachines.multimachine.cleanroom" -> issueAchievement(player, "gtcleanroom");
-            case "gt.neutronreflector" -> issueAchievement(player, "reflect");
-            case "gt.blockcasings5.1" -> issueAchievement(player, "upgrade");
-            case "gt.blockcasings5.2" -> issueAchievement(player, "upgrade2");
-            case "gt.blockcasings5.3" -> issueAchievement(player, "upgrade3");
-            case "gt.blockcasings5.4" -> issueAchievement(player, "upgrade4");
-            case "gt.blockcasings5.5" -> issueAchievement(player, "upgrade5");
-            case "gt.blockcasings5.6" -> issueAchievement(player, "over9000");
-            case "gt.blockcasings.15" -> issueAchievement(player, "conducting");
-        }
-
-        if (!stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.")) {
-            return;
-        }
-
-        // from here, it only concerns "gt.blockmachines." kind of achievements
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.basicmachine.arcfurnace.tier.")) {
-            issueAchievement(player, "recycling");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.basicmachine.disassembler.tier.")) {
-            issueAchievement(player, "repair");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.automation.superbuffer.tier.")) {
-            issueAchievement(player, "superbuffer");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.quantum.tank.tier.")) {
-            issueAchievement(player, "whereistheocean");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.quantum.chest.tier.")) {
-            issueAchievement(player, "newstorage");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.basicmachine.hammer.tier.")) {
-            issueAchievement(player, "cheapermac");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.automation.chestbuffer.tier.")) {
-            issueAchievement(player, "buffer");
-            issueAchievement(player, "buildBatBox");
-            if (stack.getUnlocalizedName()
-                .startsWith("gt.blockmachines.automation.chestbuffer.tier.3")) {
-                issueAchievement(player, "buildMFE");
-            }
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.basicgenerator.steamturbine.tier.")) {
-            issueAchievement(player, "steampower");
-            issueAchievement(player, "buildGenerator");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.basicmachine.assembler.tier.")) {
-            issueAchievement(player, "avengers");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.batterybuffer.")) {
-            issueAchievement(player, "batterys");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.basicmachine.amplifab.tier.")) {
-            issueAchievement(player, "amplifier");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.basicmachine.massfab.tier.")) {
-            issueAchievement(player, "universal");
-            issueAchievement(player, "buildMassFab");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.basicgenerator.naquadah.tier.")) {
-            issueAchievement(player, "alienpower");
-            return;
-        }
-        if (stack.getUnlocalizedName()
-            .startsWith("gt.blockmachines.basicmachine.replicator.tier.")) {
-            issueAchievement(player, "replication");
-            return;
-        }
-
-    }
-
-    @SubscribeEvent
-    public void onSmelting(ItemSmeltedEvent event) {
-        EntityPlayer player = event.player;
-        ItemStack stack = event.smelting;
-        if (player == null || stack == null) {
-            return;
-        }
-        if (stack.getItem() == Items.bread) {
-            event.player.triggerAchievement(AchievementList.makeBread);
-        }
-    }
-
-    @SubscribeEvent
-    public void onItemPickup(EntityItemPickupEvent event) {
-        EntityPlayer player = event.entityPlayer;
-        ItemStack stack = event.item.getEntityItem();
-        if (player == null || stack == null) {
-            return;
-        }
-        ItemData data = GT_OreDictUnificator.getItemData(stack);
-        if (data != null && data.mPrefix != null) {
-            if (data.mPrefix == OrePrefixes.dust) {
-                if (data.mMaterial.mMaterial == Materials.Lutetium) {
-                    issueAchievement(player, "newmetal");
-                }
-                if (data.mMaterial.mMaterial != Materials.Gunpowder) {
-                    issueAchievement(player, "cleandust");
-                }
-            } else if (data.mPrefix.name()
-                .startsWith("ore")) {
-                    int data_getAllMaterialStacks_sS = data.getAllMaterialStacks()
-                        .size();
-                    for (int i = 0; i < data_getAllMaterialStacks_sS; i++) {
-                        issueAchievement(
-                            player,
-                            data.getAllMaterialStacks()
-                                .get(i).mMaterial.mName);
-                        if (data.getAllMaterialStacks()
-                            .get(i).mMaterial == Materials.AnyIron) {
-                            issueAchievement(player, "iron");
-                        }
-                        if (data.getAllMaterialStacks()
-                            .get(i).mMaterial == Materials.Copper
-                            || data.getAllMaterialStacks()
-                                .get(i).mMaterial == Materials.Tin) {
-                            issueAchievement(event.entityPlayer, "mineOre");
-                        }
-                    }
-                } else if (data.mPrefix == OrePrefixes.crushed) {
-                    issueAchievement(player, "crushed");
-                } else if (data.mPrefix == OrePrefixes.crushedPurified) {
-                    issueAchievement(player, "washing");
-                } else if (data.mPrefix == OrePrefixes.crushedCentrifuged) {
-                    issueAchievement(player, "spinit");
-                } else if (data.mMaterial.mMaterial == Materials.Steel) {
-                    if (data.mPrefix == OrePrefixes.ingot && stack.stackSize == stack.getMaxStackSize()) {
-                        issueAchievement(player, "steel");
-                    } else if (data.mPrefix == OrePrefixes.nugget && Thaumcraft.isModLoaded()
-                        && ThaumcraftApiHelper.isResearchComplete(player.getDisplayName(), "GT_IRON_TO_STEEL")) {
-                            issueAchievement(player, "steel");
-                        }
-                }
-        }
-        // GT_FML_LOGGER.info(stack.getUnlocalizedName());
-        switch (stack.getUnlocalizedName()) {
-            case "gt.metaitem.02.32500" -> issueAchievement(player, "havestlead");
-            case "gt.metaitem.02.32501" -> issueAchievement(player, "havestsilver");
-            case "gt.metaitem.02.32503" -> issueAchievement(player, "havestiron");
-            case "gt.metaitem.02.32504" -> issueAchievement(player, "havestgold");
-            case "gt.metaitem.02.32530" -> issueAchievement(player, "havestcopper");
-            case "gt.metaitem.02.32540" -> issueAchievement(player, "havesttin");
-            case "gt.metaitem.02.32510" -> issueAchievement(player, "havestoil");
-            case "gt.metaitem.02.32511" -> issueAchievement(player, "havestemeralds");
-            case "gt.metaitem.03.32082" -> issueAchievement(player, "energyflow");
-            case "gt.metaitem.01.32702" -> issueAchievement(player, "bettercircuits");
-            case "gt.metaitem.01.32707" -> issueAchievement(player, "datasaving");
-            case "gt.metaitem.01.32597" -> issueAchievement(player, "orbs");
-            case "gt.metaitem.01.32599" -> issueAchievement(player, "thatspower");
-            case "gt.metaitem.01.32598" -> issueAchievement(player, "luck");
-            case "gt.metaitem.01.32749" -> issueAchievement(player, "closeit");
-            case "gt.metaitem.01.32730" -> issueAchievement(player, "manipulation");
-            case "gt.metaitem.01.32729" -> issueAchievement(player, "filterregulate");
-            case "gt.metaitem.01.32605" -> issueAchievement(player, "whatnow");
-            case "gt.metaitem.01.32736" -> issueAchievement(player, "zpmage");
-            case "gt.metaitem.01.32737" -> issueAchievement(player, "uvage");
-            case "gt.metaitem.03.32030" -> issueAchievement(player, "gtmonosilicon");
-            case "gt.metaitem.03.32036" -> issueAchievement(player, "gtlogicwafer");
-            case "gt.metaitem.01.32701" -> issueAchievement(player, "gtlogiccircuit");
-            case "gt.metaitem.03.32085" -> issueAchievement(player, "gtquantumprocessor");
-            case "gt.metaitem.03.32089" -> issueAchievement(player, "gtcrystalprocessor");
-            case "gt.metaitem.03.32092" -> issueAchievement(player, "gtwetware");
-            case "gt.metaitem.03.32095" -> issueAchievement(player, "gtwetmain");
-            case "gt.Thoriumcell" -> issueAchievement(player, "newfuel");
-            case "ic2.itemPartCircuitAdv" -> issueAchievement(player, "stepforward");
-            case "gt.blockcasings5.1" -> issueAchievement(player, "upgrade");
-            case "gt.blockcasings5.2" -> issueAchievement(player, "upgrade2");
-            case "gt.blockcasings5.3" -> issueAchievement(player, "upgrade3");
-            case "gt.blockcasings5.4" -> issueAchievement(player, "upgrade4");
-            case "gt.blockcasings5.5" -> issueAchievement(player, "upgrade5");
-            case "gt.blockcasings5.6" -> issueAchievement(player, "over9000");
-            case "gt.blockcasings.15" -> issueAchievement(player, "conducting");
-            case "gt.metaitem.01.32761" -> { // Debug Scanner pickup shows all assline recipes.
-                if (player.capabilities.isCreativeMode) {
-                    for (GT_Recipe recipe : RecipeMaps.assemblylineVisualRecipes.getAllRecipes()) {
-                        issueAchievement(
-                            player,
-                            recipe.getOutput(0)
-                                .getUnlocalizedName());
-                        recipe.mHidden = false;
-                    }
-                }
-            }
-        }
-
-        if ((stack.getItem() == Ic2Items.quantumBodyarmor.getItem())
-            || (stack.getItem() == Ic2Items.quantumBoots.getItem())
-            || (stack.getItem() == Ic2Items.quantumHelmet.getItem())
-            || (stack.getItem() == Ic2Items.quantumLeggings.getItem())) {
-            issueAchievement(player, "buildQArmor");
-        }
-
-        for (GT_Recipe recipe : RecipeMaps.assemblylineVisualRecipes.getAllRecipes()) {
-            if (recipe.getOutput(0)
-                .getUnlocalizedName()
-                .equals(stack.getUnlocalizedName())) {
-                issueAchievement(
-                    player,
-                    recipe.getOutput(0)
-                        .getUnlocalizedName());
-                recipe.mHidden = false;
-            }
-        }
-    }
-}
diff --git a/src/main/java/gregtech/loaders/misc/GT_BeeDefinition.java b/src/main/java/gregtech/loaders/misc/GT_BeeDefinition.java
deleted file mode 100644
index 87292ced62..0000000000
--- a/src/main/java/gregtech/loaders/misc/GT_BeeDefinition.java
+++ /dev/null
@@ -1,2831 +0,0 @@
-package gregtech.loaders.misc;
-
-import static forestry.api.apiculture.EnumBeeChromosome.CAVE_DWELLING;
-import static forestry.api.apiculture.EnumBeeChromosome.EFFECT;
-import static forestry.api.apiculture.EnumBeeChromosome.FERTILITY;
-import static forestry.api.apiculture.EnumBeeChromosome.FLOWERING;
-import static forestry.api.apiculture.EnumBeeChromosome.FLOWER_PROVIDER;
-import static forestry.api.apiculture.EnumBeeChromosome.HUMIDITY_TOLERANCE;
-import static forestry.api.apiculture.EnumBeeChromosome.LIFESPAN;
-import static forestry.api.apiculture.EnumBeeChromosome.NOCTURNAL;
-import static forestry.api.apiculture.EnumBeeChromosome.SPECIES;
-import static forestry.api.apiculture.EnumBeeChromosome.SPEED;
-import static forestry.api.apiculture.EnumBeeChromosome.TEMPERATURE_TOLERANCE;
-import static forestry.api.apiculture.EnumBeeChromosome.TERRITORY;
-import static forestry.api.apiculture.EnumBeeChromosome.TOLERANT_FLYER;
-import static forestry.api.core.EnumHumidity.ARID;
-import static forestry.api.core.EnumHumidity.DAMP;
-import static forestry.api.core.EnumTemperature.COLD;
-import static forestry.api.core.EnumTemperature.HELLISH;
-import static forestry.api.core.EnumTemperature.HOT;
-import static forestry.api.core.EnumTemperature.ICY;
-import static forestry.api.core.EnumTemperature.NORMAL;
-import static forestry.api.core.EnumTemperature.WARM;
-import static forestry.core.genetics.alleles.EnumAllele.Fertility;
-import static forestry.core.genetics.alleles.EnumAllele.Flowering;
-import static forestry.core.genetics.alleles.EnumAllele.Flowers;
-import static forestry.core.genetics.alleles.EnumAllele.Lifespan;
-import static forestry.core.genetics.alleles.EnumAllele.Speed;
-import static forestry.core.genetics.alleles.EnumAllele.Territory;
-import static forestry.core.genetics.alleles.EnumAllele.Tolerance;
-import static gregtech.api.enums.Mods.AdvancedSolarPanel;
-import static gregtech.api.enums.Mods.AppliedEnergistics2;
-import static gregtech.api.enums.Mods.Avaritia;
-import static gregtech.api.enums.Mods.AvaritiaAddons;
-import static gregtech.api.enums.Mods.BiomesOPlenty;
-import static gregtech.api.enums.Mods.CropsPlusPlus;
-import static gregtech.api.enums.Mods.EnderStorage;
-import static gregtech.api.enums.Mods.ExtraBees;
-import static gregtech.api.enums.Mods.ExtraCells2;
-import static gregtech.api.enums.Mods.ExtraUtilities;
-import static gregtech.api.enums.Mods.Forestry;
-import static gregtech.api.enums.Mods.GalacticraftCore;
-import static gregtech.api.enums.Mods.GalacticraftMars;
-import static gregtech.api.enums.Mods.GalaxySpace;
-import static gregtech.api.enums.Mods.HardcoreEnderExpansion;
-import static gregtech.api.enums.Mods.IndustrialCraft2;
-import static gregtech.api.enums.Mods.MagicBees;
-import static gregtech.api.enums.Mods.NewHorizonsCoreMod;
-import static gregtech.api.enums.Mods.PamsHarvestCraft;
-import static gregtech.api.enums.Mods.TaintedMagic;
-import static gregtech.api.enums.Mods.Thaumcraft;
-import static gregtech.api.enums.Mods.ThaumicBases;
-import static gregtech.api.enums.Mods.TinkerConstruct;
-import static gregtech.loaders.misc.GT_BeeDefinitionReference.EXTRABEES;
-import static gregtech.loaders.misc.GT_BeeDefinitionReference.FORESTRY;
-import static gregtech.loaders.misc.GT_BeeDefinitionReference.GENDUSTRY;
-import static gregtech.loaders.misc.GT_BeeDefinitionReference.GREGTECH;
-import static gregtech.loaders.misc.GT_BeeDefinitionReference.MAGICBEES;
-
-import java.awt.Color;
-import java.util.Arrays;
-import java.util.Locale;
-import java.util.function.Consumer;
-
-import net.minecraft.block.Block;
-import net.minecraft.init.Blocks;
-import net.minecraft.init.Items;
-import net.minecraft.item.ItemStack;
-
-import org.apache.commons.lang3.text.WordUtils;
-
-import com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool;
-
-import cpw.mods.fml.common.registry.GameRegistry;
-import forestry.api.apiculture.BeeManager;
-import forestry.api.apiculture.EnumBeeType;
-import forestry.api.apiculture.IAlleleBeeEffect;
-import forestry.api.apiculture.IAlleleBeeSpecies;
-import forestry.api.apiculture.IBee;
-import forestry.api.apiculture.IBeeGenome;
-import forestry.api.apiculture.IBeeMutationCustom;
-import forestry.api.core.EnumHumidity;
-import forestry.api.core.EnumTemperature;
-import forestry.api.genetics.AlleleManager;
-import forestry.api.genetics.IAllele;
-import forestry.api.genetics.IAlleleFlowers;
-import forestry.api.genetics.IMutationCustom;
-import forestry.apiculture.genetics.Bee;
-import forestry.apiculture.genetics.IBeeDefinition;
-import forestry.apiculture.genetics.alleles.AlleleEffect;
-import forestry.core.genetics.alleles.AlleleHelper;
-import gregtech.api.GregTech_API;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.MaterialsKevlar;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_JubilanceMegaApiary;
-import gregtech.api.util.GT_LanguageManager;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.common.bees.GT_AlleleBeeSpecies;
-import gregtech.common.bees.GT_Bee_Mutation;
-import gregtech.common.items.CombType;
-import gregtech.common.items.DropType;
-import gregtech.common.items.PropolisType;
-import gregtech.loaders.misc.bees.GT_Flowers;
-
-/**
- * Bride Class for Lambdas
- */
-class GT_BeeDefinitionReference {
-
-    protected static final byte FORESTRY = 0;
-    protected static final byte EXTRABEES = 1;
-    protected static final byte GENDUSTRY = 2;
-    protected static final byte MAGICBEES = 3;
-    protected static final byte GREGTECH = 4;
-
-    private GT_BeeDefinitionReference() {}
-}
-
-public enum GT_BeeDefinition implements IBeeDefinition {
-
-    // organic
-    CLAY(GT_BranchDefinition.ORGANIC, "Clay", true, new Color(0xC8C8DA), new Color(0x0000FF), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 0), 0.30f);
-        beeSpecies.addProduct(new ItemStack(Items.clay_ball, 1), 0.15f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(BiomesOPlenty.ID, "mudball", 1, 0), 0.05f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> {
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOWER);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.VANILLA);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis
-            .registerMutation(getSpecies(FORESTRY, "Industrious"), getSpecies(FORESTRY, "Diligent"), 10);
-        tMutation.requireResource(Blocks.clay, 0); // blockStainedHardenedClay
-    }),
-    SLIMEBALL(GT_BranchDefinition.ORGANIC, "SlimeBall", true, new Color(0x4E9E55), new Color(0x00FF15), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 15), 0.30f);
-        beeSpecies.addProduct(new ItemStack(Items.slime_ball, 1), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.STICKY), 0.05f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        if (TinkerConstruct.isModLoaded()) {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(TinkerConstruct.ID, "strangeFood", 1, 0), 0.10f);
-            beeSpecies.addSpecialty(GT_ModHandler.getModItem(TinkerConstruct.ID, "slime.gel", 1, 2), 0.02f);
-        }
-    }, template -> {
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.MUSHROOMS);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOWER);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "water"));
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Marshy"), CLAY, 7);
-        if (TinkerConstruct.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(TinkerConstruct.ID, "slime.gel"), 1);
-    }),
-    PEAT(GT_BranchDefinition.ORGANIC, "Peat", true, new Color(0x906237), new Color(0x58300B), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.LIGNIE), 0.30f);
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 0), 0.15f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(Forestry.ID, "peat", 1, 0), 0.15f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(Forestry.ID, "mulch", 1, 0), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.WHEAT);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.FASTER);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
-    }, dis -> dis.registerMutation(getSpecies(FORESTRY, "Rural"), CLAY, 10)),
-    STICKYRESIN(GT_BranchDefinition.ORGANIC, "StickyResin", true, new Color(0x2E8F5B), new Color(0xDCC289),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 0), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.STICKY), 0.15f);
-            beeSpecies.addSpecialty(ItemList.IC2_Resin.get(1), 0.15f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        }, template -> {
-            AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOWER);
-            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(SLIMEBALL, PEAT, 15);
-            tMutation.requireResource("logRubber");
-        }),
-    COAL(GT_BranchDefinition.ORGANIC, "Coal", true, new Color(0x666666), new Color(0x525252), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.LIGNIE), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.COAL), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> {
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.CACTI);
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.DOWN_1);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectCreeper);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Industrious"), PEAT, 9);
-        tMutation.requireResource("blockCoal");
-    }),
-    OIL(GT_BranchDefinition.ORGANIC, "Oil", true, new Color(0x4C4C4C), new Color(0x333333), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 0), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.OIL), 0.75f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOWER);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.NORMAL);
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "water"));
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
-    }, dis -> dis.registerMutation(COAL, STICKYRESIN, 4)),
-    SANDWICH(GT_BranchDefinition.ORGANIC, "Sandwich", true, new Color(0x32CD32), new Color(0xDAA520), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 9), 0.15f);
-        beeSpecies.addSpecialty(ItemList.Food_Sliced_Cucumber.get(1), 0.05f);
-        beeSpecies.addSpecialty(ItemList.Food_Sliced_Onion.get(1), 0.05f);
-        beeSpecies.addSpecialty(ItemList.Food_Sliced_Tomato.get(1), 0.05f);
-        beeSpecies.addSpecialty(ItemList.Food_Sliced_Cheese.get(1), 0.05f);
-        beeSpecies.addSpecialty(new ItemStack(Items.cooked_porkchop, 1, 0), 0.05f);
-        beeSpecies.addSpecialty(new ItemStack(Items.cooked_beef, 1, 0), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOW);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_2);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectFertile);
-        AlleleHelper.instance.set(template, TERRITORY, Territory.LARGE);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.WHEAT);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.FASTER);
-    }, dis -> dis.registerMutation(getSpecies(FORESTRY, "Agrarian"), getSpecies(MAGICBEES, "TCBatty"), 10)),
-    ASH(GT_BranchDefinition.ORGANIC, "Ash", true, new Color(0x1e1a18), new Color(0xc6c6c6), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 9), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ASH), 0.15f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.NORMAL);
-        AlleleHelper.instance.set(template, TERRITORY, Territory.LARGE);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.WHEAT);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.FASTER);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(COAL, CLAY, 10);
-        tMutation.restrictTemperature(HELLISH);
-    }),
-    APATITE(GT_BranchDefinition.ORGANIC, "Apatite", true, new Color(0xc1c1f6), new Color(0x676784), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 9), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.APATITE), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(WARM);
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.FASTEST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.WHEAT);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.FASTER);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(ASH, COAL, 10);
-        tMutation.requireResource("blockApatite");
-    }),
-    FERTILIZER(GT_BranchDefinition.ORGANIC, "Fertilizer", true, new Color(0x7fcef5), new Color(0x654525),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 9), 0.15f);
-            beeSpecies.addSpecialty(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1), 0.2f);
-            beeSpecies.addSpecialty(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1), 0.2f);
-            beeSpecies.addSpecialty(ItemList.FR_Fertilizer.get(1), 0.3f);
-            beeSpecies.addSpecialty(ItemList.IC2_Fertilizer.get(1), 0.3f);
-            beeSpecies.setHumidity(DAMP);
-            beeSpecies.setTemperature(WARM);
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.FASTEST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
-            AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.WHEAT);
-            AlleleHelper.instance.set(template, FLOWERING, Flowering.FASTER);
-        }, dis -> dis.registerMutation(ASH, APATITE, 8)),
-    // Phosphorus bee, Humidity: normal, Temperature: Hot, Parents: Apatite & Ash, Mutationrate: 12%, Combrate: 55%
-    PHOSPHORUS(GT_BranchDefinition.ORGANIC, "Phosphorus", false, new Color(0xFFC826), new Color(0xC1C1F6),
-        beeSpecies -> {
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.PHOSPHORUS), 0.35f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(HOT);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(APATITE, ASH, 12);
-            tMutation.restrictTemperature(HOT);
-            GregTech_API.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTech_API.sBlockGem2, 8));
-        }),
-    // Tea bee, Humidity: normal, Parents: Ash and Fertilizer, Mutationrate: 10%, combrate: 10%
-    TEA(GT_BranchDefinition.ORGANIC, "Tea", false, new Color(0x65D13A), new Color(0x9a9679), beeSpecies -> {
-        beeSpecies.addProduct(
-            GT_ModHandler.getModItem(PamsHarvestCraft.ID, "tealeafItem", 1, ItemList.Crop_Drop_TeaLeaf.get(1)),
-            0.10f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST),
-        dis -> dis.registerMutation(FERTILIZER, ASH, 10)),
-    // Mica bee, Humidity: normal, Parents: Silicon & PEAT, Mutationrate: 15%, Combrate: 25%
-    MICA(GT_BranchDefinition.ORGANIC, "Mica", false, new Color(0xFFC826), new Color(0xC1C1F6), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.MICA), 0.25f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(HOT);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(PEAT, getSpecies(MAGICBEES, "Silicon"), 15);
-        GregTech_API.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTech_API.sBlockCasings5, 0));
-    }),
-
-    // gems
-    REDSTONE(GT_BranchDefinition.GEM, "Redstone", true, new Color(0x7D0F0F), new Color(0xD11919), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.REDSTONE), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.RAREEARTH), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis
-            .registerMutation(getSpecies(FORESTRY, "Industrious"), getSpecies(FORESTRY, "Demonic"), 10);
-        tMutation.requireResource("blockRedstone");
-    }),
-    LAPIS(GT_BranchDefinition.GEM, "Lapis", true, new Color(0x1947D1), new Color(0x476CDA), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.LAPIS), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis
-            .registerMutation(getSpecies(FORESTRY, "Demonic"), getSpecies(FORESTRY, "Imperial"), 10);
-        tMutation.requireResource("blockLapis");
-    }),
-    CERTUS(GT_BranchDefinition.GEM, "CertusQuartz", true, new Color(0x57CFFB), new Color(0xBBEEFF), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.CERTUS), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Hermitic"), LAPIS, 10);
-        tMutation.requireResource(GameRegistry.findBlock(AppliedEnergistics2.ID, "tile.BlockQuartz"), 0);
-    }),
-    FLUIX(GT_BranchDefinition.GEM, "FluixDust", true, new Color(0xA375FF), new Color(0xB591FF), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.FLUIX), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, LAPIS, 7);
-        tMutation.requireResource(GameRegistry.findBlock(AppliedEnergistics2.ID, "tile.BlockFluix"), 0);
-    }),
-    DIAMOND(GT_BranchDefinition.GEM, "Diamond", false, new Color(0xCCFFFF), new Color(0xA3CCCC), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.DIAMOND), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(HOT);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(CERTUS, COAL, 3);
-        tMutation.requireResource("blockDiamond");
-    }),
-    RUBY(GT_BranchDefinition.GEM, "Ruby", false, new Color(0xE6005C), new Color(0xCC0052), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.RUBY), 0.15f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.REDGARNET), 0.05f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(HOT);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, DIAMOND, 5);
-        tMutation.requireResource("blockRuby");
-    }),
-    SAPPHIRE(GT_BranchDefinition.GEM, "Sapphire", true, new Color(0x0033CC), new Color(0x00248F), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.SAPPHIRE), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(CERTUS, LAPIS, 5);
-        tMutation.requireResource(GregTech_API.sBlockGem2, 12);
-    }),
-    OLIVINE(GT_BranchDefinition.GEM, "Olivine", true, new Color(0x248F24), new Color(0xCCFFCC), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.OLIVINE), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.MAGNESIUM), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER),
-        dis -> dis.registerMutation(CERTUS, getSpecies(FORESTRY, "Ended"), 5)),
-    EMERALD(GT_BranchDefinition.GEM, "Emerald", false, new Color(0x248F24), new Color(0x2EB82E), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.EMERALD), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ALUMINIUM), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(OLIVINE, DIAMOND, 4);
-        tMutation.requireResource("blockEmerald");
-    }),
-    REDGARNET(GT_BranchDefinition.GEM, "RedGarnet", false, new Color(0xBD4C4C), new Color(0xECCECE), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.REDGARNET), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.PYROPE), 0.05f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(WARM);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(DIAMOND, RUBY, 4);
-        tMutation.requireResource("blockGarnetRed");
-    }),
-    YELLOWGARNET(GT_BranchDefinition.GEM, "YellowGarnet", false, new Color(0xA3A341), new Color(0xEDEDCE),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.YELLOWGARNET), 0.15f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.GROSSULAR), 0.05f);
-            beeSpecies.setHumidity(DAMP);
-            beeSpecies.setTemperature(WARM);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(EMERALD, REDGARNET, 3);
-            tMutation.requireResource("blockGarnetYellow");
-        }),
-    FIRESTONE(GT_BranchDefinition.GEM, "Firestone", false, new Color(0xC00000), new Color(0xFF0000), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.FIRESTONE), 0.15f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(WARM);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, RUBY, 4);
-        tMutation.requireResource("blockFirestone");
-    }),
-
-    // Metal Line
-    COPPER(GT_BranchDefinition.METAL, "Copper", true, new Color(0xFF6600), new Color(0xE65C00), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.COPPER), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.GOLD), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Majestic"), CLAY, 13);
-        tMutation.requireResource("blockCopper");
-    }),
-    TIN(GT_BranchDefinition.METAL, "Tin", true, new Color(0xD4D4D4), new Color(0xDDDDDD), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.TIN), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ZINC), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(CLAY, getSpecies(FORESTRY, "Diligent"), 13);
-        tMutation.requireResource("blockTin");
-    }),
-    LEAD(GT_BranchDefinition.METAL, "Lead", true, new Color(0x666699), new Color(0xA3A3CC), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.LEAD), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.SULFUR), 0.05f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(WARM);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(COAL, COPPER, 13);
-        tMutation.requireResource("blockLead");
-    }),
-    IRON(GT_BranchDefinition.METAL, "Iron", true, new Color(0xDA9147), new Color(0xDE9C59), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.IRON), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.TIN), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(TIN, COPPER, 13);
-        tMutation.requireResource("blockIron");
-    }),
-    STEEL(GT_BranchDefinition.METAL, "Steel", true, new Color(0x808080), new Color(0x999999), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STEEL), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.IRON), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(WARM);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(IRON, COAL, 10);
-        tMutation.requireResource(GregTech_API.sBlockMetal6, 13);
-    }),
-    NICKEL(GT_BranchDefinition.METAL, "Nickel", true, new Color(0x8585AD), new Color(0x8585AD), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.NICKEL), 0.15f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.PLATINUM), 0.02f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(IRON, COPPER, 13);
-        tMutation.requireResource("blockNickel");
-    }),
-    ZINC(GT_BranchDefinition.METAL, "Zinc", true, new Color(0xF0DEF0), new Color(0xF2E1F2), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.ZINC), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.GALLIUM), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(IRON, TIN, 13);
-        tMutation.requireResource("blockZinc");
-    }),
-    SILVER(GT_BranchDefinition.METAL, "Silver", true, new Color(0xC2C2D6), new Color(0xCECEDE), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SILVER), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.SULFUR), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(COLD);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(LEAD, TIN, 10);
-        tMutation.requireResource("blockSilver");
-    }),
-    CRYOLITE(GT_BranchDefinition.METAL, "Cryolite", true, new Color(0xBFEFFF), new Color(0x73B9D0), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.CRYOLITE), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.SILVER), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(WARM);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.FASTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(LEAD, SILVER, 9);
-        tMutation.requireResource("blockCryolite");
-    }),
-    GOLD(GT_BranchDefinition.METAL, "Gold", true, new Color(0xEBC633), new Color(0xEDCC47), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.GOLD), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.NICKEL), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(WARM);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(LEAD, COPPER, 13);
-        tMutation.requireResource("blockGold");
-        tMutation.restrictTemperature(HOT);
-    }),
-    ARSENIC(GT_BranchDefinition.METAL, "Arsenic", true, new Color(0x736C52), new Color(0x292412), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.ARSENIC), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(WARM);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(ZINC, SILVER, 10);
-        tMutation.requireResource("blockArsenic");
-    }),
-
-    // Rare Metals
-    ALUMINIUM(GT_BranchDefinition.RAREMETAL, "Aluminium", true, new Color(0xB8B8FF), new Color(0xD6D6FF),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.ALUMINIUM), 0.15f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.BAUXITE), 0.05f);
-            beeSpecies.setHumidity(ARID);
-            beeSpecies.setTemperature(HOT);
-        }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(NICKEL, ZINC, 9);
-            tMutation.requireResource("blockAluminium");
-        }),
-    TITANIUM(GT_BranchDefinition.RAREMETAL, "Titanium", true, new Color(0xCC99FF), new Color(0xDBB8FF), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.TITANIUM), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ALMANDINE), 0.05f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, ALUMINIUM, 5);
-        tMutation.requireResource(GregTech_API.sBlockMetal7, 9);
-    }),
-    GLOWSTONE(GT_BranchDefinition.RAREMETAL, "Glowstone", false, new Color(0xE5CA2A), new Color(0xFFBC5E),
-        beeSpecies -> {
-            beeSpecies.addSpecialty(Materials.Glowstone.getDust(1), 0.20f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.NORMAL),
-        dis -> dis.registerMutation(REDSTONE, GOLD, 10)),
-    SUNNARIUM(GT_BranchDefinition.RAREMETAL, "Sunnarium", false, new Color(0xFFBC5E), new Color(0xE5CA2A),
-        beeSpecies -> {
-            beeSpecies.addProduct(Materials.Glowstone.getDust(1), 0.30f);
-            beeSpecies.addSpecialty(Materials.Sunnarium.getDust(1), 0.05f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST), dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(GLOWSTONE, GOLD, 5);
-            GregTech_API.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTech_API.sBlockCasings1, 15));
-        }),
-    CHROME(GT_BranchDefinition.RAREMETAL, "Chrome", true, new Color(0xEBA1EB), new Color(0xF2C3F2), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.CHROME), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.MAGNESIUM), 0.05f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(TITANIUM, RUBY, 5);
-        tMutation.requireResource(GregTech_API.sBlockMetal2, 3);
-    }),
-    MANGANESE(GT_BranchDefinition.RAREMETAL, "Manganese", true, new Color(0xD5D5D5), new Color(0xAAAAAA),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.MANGANESE), 0.15f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.IRON), 0.05f);
-            beeSpecies.setHumidity(ARID);
-            beeSpecies.setTemperature(HOT);
-        }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(TITANIUM, ALUMINIUM, 5);
-            tMutation.requireResource(GregTech_API.sBlockMetal4, 6);
-        }),
-    TUNGSTEN(GT_BranchDefinition.RAREMETAL, "Tungsten", false, new Color(0x5C5C8A), new Color(0x7D7DA1), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.TUNGSTEN), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.MOLYBDENUM), 0.05f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Heroic"), MANGANESE, 5);
-        tMutation.requireResource(GregTech_API.sBlockMetal7, 11);
-    }),
-    PLATINUM(GT_BranchDefinition.RAREMETAL, "Platinum", false, new Color(0xE6E6E6), new Color(0xFFFFCC), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.PLATINUM), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.IRIDIUM), 0.02f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(DIAMOND, CHROME, 5);
-        tMutation.requireResource("blockNickel");
-    }),
-    IRIDIUM(GT_BranchDefinition.RAREMETAL, "Iridium", false, new Color(0xDADADA), new Color(0xD1D1E0), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.IRIDIUM), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.OSMIUM), 0.05f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.PALLADIUM), 0.30f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(TUNGSTEN, PLATINUM, 5);
-        tMutation.requireResource(GregTech_API.sBlockMetal3, 12);
-    }),
-    OSMIUM(GT_BranchDefinition.RAREMETAL, "Osmium", false, new Color(0x2B2BDA), new Color(0x8B8B8B), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.OSMIUM), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.IRIDIUM), 0.05f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(TUNGSTEN, PLATINUM, 5);
-        tMutation.requireResource(GregTech_API.sBlockMetal5, 9);
-    }),
-    SALTY(GT_BranchDefinition.RAREMETAL, "Salt", true, new Color(0xF0C8C8), new Color(0xFAFAFA), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.SALT), 0.35f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.LITHIUM), 0.05f);
-        beeSpecies.addSpecialty(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Borax, 1L), 0.1f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(WARM);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(CLAY, ALUMINIUM, 5);
-        tMutation.requireResource("blockSalt");
-    }),
-    LITHIUM(GT_BranchDefinition.RAREMETAL, "Lithium", false, new Color(0xF0328C), new Color(0xE1DCFF), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.LITHIUM), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.SALT), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(COLD);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(SALTY, ALUMINIUM, 5);
-        tMutation.requireResource("frameGtLithium");
-    }),
-    ELECTROTINE(GT_BranchDefinition.RAREMETAL, "Electrotine", false, new Color(0x1E90FF), new Color(0x3CB4C8),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ELECTROTINE), 0.15f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.REDSTONE), 0.05f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(HOT);
-        }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWER), dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, GOLD, 5);
-            tMutation.requireResource("blockElectrotine");
-        }),
-    // Sulfur bee, Humidity: normal, Temperature: Hot, Parents: PEAT & Ash, Mutationrate: 15%, Combrate: 80%
-    SULFUR(GT_BranchDefinition.RAREMETAL, "Sulfur", false, new Color(0x1E90FF), new Color(0x3CB4C8), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SULFUR), 0.70f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.FIRESTONE), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(HOT);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.NORMAL),
-        dis -> dis.registerMutation(ASH, PEAT, 15)),
-
-    INDIUM(GT_BranchDefinition.RAREMETAL, "Indium", false, new Color(0xFFA9FF), new Color(0x8F5D99), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.INDIUM), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(HOT);
-    }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(LEAD, OSMIUM, 1);
-        tMutation.requireResource("blockIndium");
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(39, "Venus")); // Venus Dim
-        // Harder mutation that isn't dim locked
-        tMutation = dis.registerMutation(SILVER, OSMIUM, 1);
-        tMutation.requireResource("blockCinobiteA243");
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(60, "Bedrock")); // Thaumic Tinkerer
-                                                                                               // Bedrock Dim
-    }),
-
-    // IC2
-    COOLANT(GT_BranchDefinition.IC2, "Coolant", false, new Color(0x144F5A), new Color(0x2494A2), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 4), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.COOLANT), 0.15f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOW);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectGlacial);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis
-            .registerMutation(getSpecies(FORESTRY, "Icy"), getSpecies(FORESTRY, "Glacial"), 10);
-        tMutation.requireResource(
-            Block.getBlockFromItem(
-                GT_ModHandler.getModItem(IndustrialCraft2.ID, "fluidCoolant", 1)
-                    .getItem()),
-            0);
-        tMutation.restrictTemperature(ICY);
-    }),
-    ENERGY(GT_BranchDefinition.IC2, "Energy", false, new Color(0xC11F1F), new Color(0xEBB9B9), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 12), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ENERGY), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(WARM);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.NETHER);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis
-            .registerMutation(getSpecies(FORESTRY, "Demonic"), getSpecies(EXTRABEES, "volcanic"), 10);
-        tMutation.requireResource(
-            Block.getBlockFromItem(
-                GT_ModHandler.getModItem(IndustrialCraft2.ID, "fluidHotCoolant", 1)
-                    .getItem()),
-            0);
-        tMutation.addMutationCondition(new GT_Bees.BiomeIDMutationCondition(128, "Boneyard Biome")); // Boneyard Biome
-    }),
-    LAPOTRON(GT_BranchDefinition.IC2, "Lapotron", false, new Color(0x6478FF), new Color(0x1414FF), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.LAPIS), 0.20f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ENERGY), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.LAPOTRON), 0.10f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(LAPIS, ENERGY, 6);
-        tMutation.requireResource("blockLapis");
-        tMutation.restrictTemperature(ICY);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(28, "Moon")); // moon dim
-    }),
-    PYROTHEUM(GT_BranchDefinition.IC2, "Pyrotheum", false, new Color(0xffebc4), new Color(0xe36400), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.ENERGY), 0.20f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.PYROTHEUM), 0.15f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.FASTEST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.NETHER);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, ENERGY, 4);
-        tMutation.restrictTemperature(HELLISH);
-    }),
-    CRYOTHEUM(GT_BranchDefinition.IC2, "Cryotheum", false, new Color(0x2660ff), new Color(0x5af7ff), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.BLIZZ), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.CRYOTHEUM), 0.20f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectSnowing);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, COOLANT, 4);
-        tMutation.restrictTemperature(ICY);
-    }),
-    Explosive(GT_BranchDefinition.IC2, "explosive", false, new Color(0x7E270F), new Color(0x747474), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getIC2Item("industrialTnt", 1L), 0.2f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectSnowing);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(FIRESTONE, COAL, 4);
-        tMutation.requireResource(GameRegistry.findBlock(IndustrialCraft2.ID, "blockITNT"), 0);
-    }),
-    // Alloy
-    REDALLOY(GT_BranchDefinition.GTALLOY, "RedAlloy", false, new Color(0xE60000), new Color(0xB80000), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.REDALLOY), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(COPPER, REDSTONE, 10);
-        tMutation.requireResource("blockRedAlloy");
-    }),
-    REDSTONEALLOY(GT_BranchDefinition.GTALLOY, "RedStoneAlloy", false, new Color(0xA50808), new Color(0xE80000),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.REDSTONEALLOY), 0.15f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(REDSTONE, REDALLOY, 8);
-            tMutation.requireResource("blockRedstoneAlloy");
-        }),
-    CONDUCTIVEIRON(GT_BranchDefinition.GTALLOY, "ConductiveIron", false, new Color(0xCEADA3), new Color(0x817671),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.CONDUCTIVEIRON), 0.15f);
-            beeSpecies.setHumidity(DAMP);
-            beeSpecies.setTemperature(WARM);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(REDSTONEALLOY, IRON, 8);
-            tMutation.requireResource("blockConductiveIron");
-        }),
-    ENERGETICALLOY(GT_BranchDefinition.GTALLOY, "EnergeticAlloy", false, new Color(0xFF9933), new Color(0xFFAD5C),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ENERGETICALLOY), 0.15f);
-            beeSpecies.setHumidity(DAMP);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(REDSTONEALLOY, getSpecies(FORESTRY, "Demonic"), 9);
-            tMutation.requireResource("blockEnergeticAlloy");
-        }),
-    VIBRANTALLOY(GT_BranchDefinition.GTALLOY, "VibrantAlloy", false, new Color(0x86A12D), new Color(0xC4F2AE),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.VIBRANTALLOY), 0.15f);
-            beeSpecies.setHumidity(DAMP);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-            AlleleHelper.instance.set(template, FLOWERING, Flowering.FAST);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(ENERGETICALLOY, getSpecies(FORESTRY, "Phantasmal"), 6);
-            tMutation.requireResource("blockVibrantAlloy");
-            tMutation.restrictTemperature(HOT, HELLISH);
-        }),
-    ELECTRICALSTEEL(GT_BranchDefinition.GTALLOY, "ElectricalSteel", false, new Color(0x787878), new Color(0xD8D8D8),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ELECTRICALSTEEL), 0.15f);
-            beeSpecies.setHumidity(DAMP);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTER);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(STEEL, getSpecies(FORESTRY, "Demonic"), 9);
-            tMutation.requireResource("blockElectricalSteel");
-        }),
-    DARKSTEEL(GT_BranchDefinition.GTALLOY, "DarkSteel", false, new Color(0x252525), new Color(0x443B44), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.DARKSTEEL), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(COLD);
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(ELECTRICALSTEEL, getSpecies(FORESTRY, "Demonic"), 7);
-        tMutation.requireResource("blockDarkSteel");
-    }),
-    PULSATINGIRON(GT_BranchDefinition.GTALLOY, "PulsatingIron", false, new Color(0x6DD284), new Color(0x006600),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 7), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.PULSATINGIRON), 0.15f);
-            beeSpecies.setHumidity(DAMP);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(REDALLOY, getSpecies(FORESTRY, "Ended"), 9);
-            tMutation.requireResource("blockPulsatingIron");
-        }),
-    STAINLESSSTEEL(GT_BranchDefinition.GTALLOY, "StainlessSteel", false, new Color(0xC8C8DC), new Color(0x778899),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STEEL), 0.10f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.STAINLESSSTEEL), 0.15f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.CHROME), 0.05f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(HOT);
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(CHROME, STEEL, 9);
-            tMutation.requireResource("blockStainlessSteel");
-        }),
-    ENDERIUM(GT_BranchDefinition.GTALLOY, "Enderium", false, new Color(0x599087), new Color(0x2E8B57), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ENDERIUM), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.CHROME), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(HOT);
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, GT_Bees.speedBlinding);
-        AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "teleport"));
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(PLATINUM, getSpecies(FORESTRY, "Phantasmal"), 3);
-        tMutation.requireResource("blockEnderium");
-    }),
-    BEDROCKIUM(GT_BranchDefinition.GTALLOY, "Bedrockium", false, new Color(0x0C0C0C), new Color(0xC6C6C6),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.20f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.BEDROCKIUM), 0.55f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(HOT);
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOW);
-            AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "gravity"));
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(Explosive, DIAMOND, 2);
-            if (ExtraUtilities.isModLoaded())
-                tMutation.requireResource(GameRegistry.findBlock(ExtraUtilities.ID, "block_bedrockium"), 0);
-        }),
-
-    // thaumic
-    THAUMIUMDUST(GT_BranchDefinition.THAUMIC, "ThaumiumDust", true, new Color(0x7A007A), new Color(0x5C005C),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 3), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.THAUMIUMDUST), 0.20f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
-            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_2);
-            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectExploration);
-            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.UP_1);
-            AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.JUNGLE);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis
-                .registerMutation(getSpecies(MAGICBEES, "TCFire"), getSpecies(FORESTRY, "Edenic"), 10);
-            tMutation.requireResource("blockThaumium");
-            tMutation.addMutationCondition(new GT_Bees.BiomeIDMutationCondition(192, "Magical Forest")); // magical
-                                                                                                         // forest
-        }),
-    THAUMIUMSHARD(GT_BranchDefinition.THAUMIC, "ThaumiumShard", true, new Color(0x9966FF), new Color(0xAD85FF),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.THAUMIUMDUST), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.THAUMIUMSHARD), 0.20f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
-            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-            AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
-            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectGlacial);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(THAUMIUMDUST, getSpecies(MAGICBEES, "TCWater"), 10);
-            tMutation.addMutationCondition(new GT_Bees.BiomeIDMutationCondition(192, "Magical Forest")); // magical
-                                                                                                         // forest
-        }),
-    AMBER(GT_BranchDefinition.THAUMIC, "Amber", true, new Color(0xEE7700), new Color(0x774B15), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 3), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.AMBER), 0.20f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(THAUMIUMDUST, STICKYRESIN, 10);
-        tMutation.requireResource("blockAmber");
-    }),
-    QUICKSILVER(GT_BranchDefinition.THAUMIC, "Quicksilver", true, new Color(0x7A007A), new Color(0x5C005C),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 3), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.QUICKSILVER), 0.20f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
-            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.UP_1);
-            AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.JUNGLE);
-            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectMiasmic);
-        }, dis -> dis.registerMutation(THAUMIUMDUST, SILVER, 10)),
-    SALISMUNDUS(GT_BranchDefinition.THAUMIC, "SalisMundus", true, new Color(0xF7ADDE), new Color(0x592582),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 3), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.SALISMUNDUS), 0.20f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
-            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.UP_1);
-            AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.JUNGLE);
-            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectMiasmic);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(THAUMIUMDUST, THAUMIUMSHARD, 8);
-            tMutation.addMutationCondition(new GT_Bees.BiomeIDMutationCondition(192, "Magical Forest")); // magical
-                                                                                                         // forest
-        }),
-    TAINTED(GT_BranchDefinition.THAUMIC, "Tainted", true, new Color(0x904BB8), new Color(0xE800FF), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 3), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.TAINTED), 0.20f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-        AlleleHelper.instance.set(template, CAVE_DWELLING, true);
-        AlleleHelper.instance.set(template, TOLERANT_FLYER, true);
-        AlleleHelper.instance.set(template, FERTILITY, Fertility.LOW);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(THAUMIUMDUST, THAUMIUMSHARD, 7);
-        tMutation.addMutationCondition(new GT_Bees.BiomeIDMutationCondition(193, "Tainted Land")); // Tainted Land
-    }),
-    MITHRIL(GT_BranchDefinition.THAUMIC, "Mithril", true, new Color(0xF0E68C), new Color(0xFFFFD2), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.PLATINUM), 0.20f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.MITHRIL), 0.125f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> {
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-        AlleleHelper.instance.set(template, CAVE_DWELLING, true);
-        AlleleHelper.instance.set(template, TOLERANT_FLYER, true);
-        AlleleHelper.instance.set(template, FERTILITY, Fertility.LOW);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
-    }, new Consumer<>() {
-
-        @Override
-        public void accept(GT_BeeDefinition dis) {
-            IBeeMutationCustom tMutation = dis.registerMutation(IO, PLATINUM, 7);
-            tMutation.requireResource(GregTech_API.sBlockMetal4, 10);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(36, "IO")); // IO Dim
-        }
-    }),
-    ASTRALSILVER(GT_BranchDefinition.THAUMIC, "AstralSilver", true, new Color(0xAFEEEE), new Color(0xE6E6FF),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SILVER), 0.20f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ASTRALSILVER), 0.125f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        }, template -> {
-            AlleleHelper.instance.set(template, NOCTURNAL, true);
-            AlleleHelper.instance.set(template, CAVE_DWELLING, true);
-            AlleleHelper.instance.set(template, TOLERANT_FLYER, true);
-            AlleleHelper.instance.set(template, FERTILITY, Fertility.LOW);
-            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-            AlleleHelper.instance.set(template, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(SILVER, IRON, 3);
-            tMutation.requireResource(GregTech_API.sBlockMetal1, 6);
-        }),
-    THAUMINITE(GT_BranchDefinition.THAUMIC, "Thauminite", true, new Color(0x2E2D79), new Color(0x7581E0),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(MagicBees.ID, "comb", 1, 19), 0.20f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.THAUMINITE), 0.125f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-            AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOW);
-            AlleleHelper.instance.set(template, NOCTURNAL, true);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(MAGICBEES, "TCOrder"), THAUMIUMDUST, 8);
-            if (ThaumicBases.isModLoaded())
-                tMutation.requireResource(GameRegistry.findBlock(ThaumicBases.ID, "thauminiteBlock"), 0);
-        }),
-    SHADOWMETAL(GT_BranchDefinition.THAUMIC, "ShadowMetal", true, new Color(0x100322), new Color(0x100342),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(MagicBees.ID, "comb", 1, 20), 0.20f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.SHADOWMETAL), 0.125f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-            AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOW);
-            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
-            AlleleHelper.instance.set(template, NOCTURNAL, true);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis
-                .registerMutation(getSpecies(MAGICBEES, "TCChaos"), getSpecies(MAGICBEES, "TCVoid"), 6);
-            if (TaintedMagic.isModLoaded()) {
-                tMutation.requireResource("blockShadow");
-            }
-        }),
-    DIVIDED(GT_BranchDefinition.THAUMIC, "Unstable", true, new Color(0xF0F0F0), new Color(0xDCDCDC), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(ExtraBees.ID, "honeyComb", 1, 61), 0.20f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.DIVIDED), 0.125f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOW);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(DIAMOND, IRON, 3);
-        if (ExtraUtilities.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(ExtraUtilities.ID, "decorativeBlock1"), 5);
-    }),
-    CAELESTIS(GT_BranchDefinition.THAUMIC, "Caelestis", true, new Color(0xF0F0F0), new Color(0xDCDCDC), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.CAELESTISRED), 0.60f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.CAELESTISBLUE), 0.60f);
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.CAELESTISGREEN), 0.60f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWER);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOW);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-    }, dis -> dis.registerMutation(DIAMOND, DIVIDED, 10)),
-    SPARKELING(GT_BranchDefinition.THAUMIC, "NetherStar", true, new Color(0x7A007A), new Color(0xFFFFFF),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(MagicBees.ID, "miscResources", 1, 3), 0.20f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.SPARKLING), 0.125f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        }, template -> {
-            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
-            AlleleHelper.instance.set(template, NOCTURNAL, true);
-            AlleleHelper.instance.set(template, CAVE_DWELLING, true);
-            AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.NETHER);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectAggressive);
-            AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis
-                .registerMutation(getSpecies(MAGICBEES, "Withering"), getSpecies(MAGICBEES, "Draconic"), 1);
-            tMutation.requireResource(GregTech_API.sBlockGem3, 3);
-            tMutation.addMutationCondition(new GT_Bees.BiomeIDMutationCondition(9, "END Biome")); // sky end biome
-        }),
-
-    ESSENTIA(GT_BranchDefinition.THAUMIC, "Essentia", true, new Color(0x7A007A), new Color(0xFFFFFF), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(MagicBees.ID, "miscResources", 1, 3), 0.20f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-    }, template -> {
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
-        AlleleHelper.instance.set(template, CAVE_DWELLING, true);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.VANILLA);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectReanimation);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(SHADOWMETAL, SPARKELING, 5);
-        if (Thaumcraft.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 6);
-    }),
-
-    DRAKE(GT_BranchDefinition.THAUMIC, "Drake", true, new Color(0x100322), new Color(0x7A007A), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.DRACONIC), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.AWAKENEDDRACONIUM), 0.20f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(HELLISH);
-        beeSpecies.setJubilanceProvider(GT_JubilanceMegaApiary.instance);
-    }, template -> {
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_3);
-        AlleleHelper.instance.set(template, CAVE_DWELLING, false);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.END);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectDrunkard);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(ESSENTIA, THAUMINITE, 5);
-        GregTech_API.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTech_API.sBlockCasings5, 8));
-    }),
-
-    // radioctive
-    URANIUM(GT_BranchDefinition.RADIOACTIVE, "Uranium", true, new Color(0x19AF19), new Color(0x169E16), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.URANIUM), 0.15f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setNocturnal();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Avenging"), PLATINUM, 3);
-        tMutation.requireResource(GregTech_API.sBlockMetal7, 14);
-    }),
-    PLUTONIUM(GT_BranchDefinition.RADIOACTIVE, "Plutonium", true, new Color(0x570000), new Color(0x240000),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.LEAD), 0.15f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.PLUTONIUM), 0.15f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(ICY);
-            beeSpecies.setNocturnal();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(URANIUM, EMERALD, 3);
-            tMutation.requireResource(GregTech_API.sBlockMetal5, 13);
-        }),
-    NAQUADAH(GT_BranchDefinition.RADIOACTIVE, "Naquadah", false, new Color(0x003300), new Color(0x002400),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.NAQUADAH), 0.15f);
-            beeSpecies.setHumidity(ARID);
-            beeSpecies.setTemperature(ICY);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(PLUTONIUM, IRIDIUM, 3);
-            tMutation.requireResource(GregTech_API.sBlockMetal4, 12);
-        }),
-    NAQUADRIA(GT_BranchDefinition.RADIOACTIVE, "Naquadria", false, new Color(0x000000), new Color(0x002400),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SLAG), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.NAQUADAH), 0.20f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.NAQUADRIA), 0.15f);
-            beeSpecies.setHumidity(ARID);
-            beeSpecies.setTemperature(ICY);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(PLUTONIUM, IRIDIUM, 8, 10);
-            tMutation.requireResource(GregTech_API.sBlockMetal4, 15);
-        }),
-    DOB(GT_BranchDefinition.RADIOACTIVE, "DOB", false, new Color(0x003300), new Color(0x002400), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.DOB), 0.75f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(NAQUADAH, THAUMIUMSHARD, 2);
-        if (AdvancedSolarPanel.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(AdvancedSolarPanel.ID, "BlockAdvSolarPanel"), 2);
-        tMutation.addMutationCondition(new GT_Bees.BiomeIDMutationCondition(9, "END Biome")); // sky end biome
-    }),
-    THORIUM(GT_BranchDefinition.RADIOACTIVE, "Thorium", false, new Color(0x005000), new Color(0x001E00), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.THORIUM), 0.75f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setNocturnal();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-    }, dis -> {
-        IMutationCustom tMutation = dis.registerMutation(COAL, URANIUM, 3)
-            .setIsSecret();
-        tMutation.requireResource(GregTech_API.sBlockMetal7, 5);
-    }),
-    LUTETIUM(GT_BranchDefinition.RADIOACTIVE, "Lutetium", false, new Color(0xE6FFE6), new Color(0xFFFFFF),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.LUTETIUM), 0.15f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-        }, dis -> {
-            IMutationCustom tMutation = dis.registerMutation(THORIUM, getSpecies(EXTRABEES, "rotten"), 1)
-                .setIsSecret();
-            tMutation.requireResource(GregTech_API.sBlockMetal4, 3);
-        }),
-    AMERICIUM(GT_BranchDefinition.RADIOACTIVE, "Americium", false, new Color(0xE6E6FF), new Color(0xC8C8C8),
-        beeSpecies -> {
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.AMERICIUM), 0.075f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-            // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
-            beeSpecies.setJubilanceProvider(GT_JubilanceMegaApiary.instance);
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-        }, dis -> {
-            IMutationCustom tMutation = dis.registerMutation(LUTETIUM, CHROME, 5, 4)
-                .setIsSecret();
-            GregTech_API.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTech_API.sBlockMachines, 32020));
-        }),
-    NEUTRONIUM(GT_BranchDefinition.RADIOACTIVE, "Neutronium", false, new Color(0xFFF0F0), new Color(0xFAFAFA),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.NEUTRONIUM), 0.02f);
-            beeSpecies.setHumidity(DAMP);
-            beeSpecies.setTemperature(HELLISH);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-            AlleleHelper.instance.set(template, NOCTURNAL, true);
-        }, dis -> {
-            IMutationCustom tMutation = dis.registerMutation(NAQUADRIA, AMERICIUM, 2, 2)
-                .setIsSecret();
-            tMutation.requireResource(GregTech_API.sBlockMetal5, 2);
-        }),
-    // Twilight
-    NAGA(GT_BranchDefinition.TWILIGHT, "Naga", true, new Color(0x0D5A0D), new Color(0x28874B), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SALISMUNDUS), 0.02f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.NAGA), 0.10f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis
-            .registerMutation(getSpecies(MAGICBEES, "Eldritch"), getSpecies(FORESTRY, "Imperial"), 8);
-        tMutation.restrictHumidity(DAMP);
-    }),
-    LICH(GT_BranchDefinition.TWILIGHT, "Lich", true, new Color(0xC5C5C5), new Color(0x5C605E), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SALISMUNDUS), 0.04f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.LICH), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(MAGICBEES, "Supernatural"), NAGA, 7);
-        tMutation.restrictHumidity(ARID);
-    }),
-    HYDRA(GT_BranchDefinition.TWILIGHT, "Hydra", true, new Color(0x872836), new Color(0xB8132C), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SALISMUNDUS), 0.06f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.HYDRA), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(LICH, getSpecies(MAGICBEES, "TCFire"), 6);
-        tMutation.addMutationCondition(new GT_Bees.BiomeIDMutationCondition(138, "Undergarden")); // undergarden biome
-    }),
-    URGHAST(GT_BranchDefinition.TWILIGHT, "UrGhast", true, new Color(0xA7041C), new Color(0x7C0618), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SALISMUNDUS), 0.08f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.URGHAST), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-        beeSpecies.setHasEffect();
-        beeSpecies.setNocturnal();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.FAST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(HYDRA, THAUMIUMDUST, 5);
-        if (Thaumcraft.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCosmeticSolid"), 4);
-        tMutation.restrictTemperature(HELLISH);
-    }),
-    SNOWQUEEN(GT_BranchDefinition.TWILIGHT, "SnowQueen", true, new Color(0xD02001), new Color(0x9C0018), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SALISMUNDUS), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.SNOWQUEEN), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setHasEffect();
-        beeSpecies.setNocturnal();
-    }, template -> {}, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(URGHAST, SALISMUNDUS, 4);
-        if (ThaumicBases.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(ThaumicBases.ID, "blockSalisMundus"), 0);
-        tMutation.restrictTemperature(ICY);
-    }),
-    // HEE
-    ENDDUST(GT_BranchDefinition.HEE, "End Dust", true, new Color(0xCC00FA), new Color(0x003A7D), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ENDDUST), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.NORMAL), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Ended"), STAINLESSSTEEL, 8);
-
-        tMutation.restrictHumidity(ARID);
-        if (HardcoreEnderExpansion.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "end_powder_ore"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(1, "End")); // End Dim
-    }),
-    ENDIUM(GT_BranchDefinition.HEE, "Endium", true, new Color(0xa0ffff), new Color(0x2F5A6C), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ENDIUM), 0.10f);
-        beeSpecies.addSpecialty(GT_Bees.propolis.getStackForType(PropolisType.Endium), 0.15f);
-        beeSpecies.addSpecialty(GT_Bees.drop.getStackForType(DropType.ENDERGOO), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.NORMAL), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Ended"), THAUMIUMDUST, 8);
-        tMutation.restrictHumidity(ARID);
-        if (HardcoreEnderExpansion.isModLoaded()) tMutation.requireResource("blockHeeEndium");
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(1, "End")); // End Dim
-    }),
-    STARDUST(GT_BranchDefinition.HEE, "Star Dust", true, new Color(0xffff00), new Color(0xDCBE13), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.STARDUST), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, GT_Bees.speedBlinding);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.SLOWER);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Ended"), ZINC, 8);
-        tMutation.restrictHumidity(ARID);
-        if (HardcoreEnderExpansion.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "stardust_ore"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(1, "End")); // End Dim
-    }),
-    ECTOPLASMA(GT_BranchDefinition.HEE, "Ectoplasma", true, new Color(0xDCB0E5), new Color(0x381C40), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ECTOPLASMA), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORT);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(FORESTRY, "Ended"), ENDDUST, 5);
-        tMutation.restrictHumidity(ARID);
-        if (HardcoreEnderExpansion.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "spooky_log"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(1, "End")); // End Dim
-    }),
-    ARCANESHARDS(GT_BranchDefinition.HEE, "Arcane Shards", true, new Color(0x9010AD), new Color(0x333D82),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ARCANESHARD), 0.10f);
-            beeSpecies.setHumidity(ARID);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONG);
-            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(THAUMIUMSHARD, ENDDUST, 5);
-            tMutation.restrictHumidity(ARID);
-            if (HardcoreEnderExpansion.isModLoaded())
-                tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "laboratory_floor"), 0);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(1, "End")); // End Dim
-        }),
-    DRAGONESSENCE(GT_BranchDefinition.HEE, "Dragonessence", true, new Color(0xFFA12B), new Color(0x911ECE),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.DRAGONESSENCE), 0.10f);
-            beeSpecies.setHumidity(ARID);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
-            AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectBeatific);
-            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_3);
-            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_3);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(ECTOPLASMA, ARCANESHARDS, 4);
-            tMutation.restrictHumidity(ARID);
-            if (HardcoreEnderExpansion.isModLoaded())
-                tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "essence_altar"), 1);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(1, "End")); // End Dim
-        }),
-    FIREESSENCE(GT_BranchDefinition.HEE, "Fireessence", true, new Color(0xD41238), new Color(0xFFA157), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.FIREESSENSE), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.ELONGATED);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_3);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.DOWN_3);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(FIRESTONE, ARCANESHARDS, 4);
-        tMutation.restrictHumidity(ARID);
-        if (HardcoreEnderExpansion.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "essence_altar"), 2);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(1, "End")); // End Dim
-    }),
-    ENDERMANHEAD(GT_BranchDefinition.HEE, "EndermanHead", true, new Color(0x161616), new Color(0x6200e7),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ENDERMAN), 0.10f);
-            beeSpecies.setHumidity(ARID);
-            beeSpecies.setTemperature(EnumTemperature.NORMAL);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
-            AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "teleport"));
-            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
-            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.UP_1);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(ENDERIUM, STARDUST, 4);
-            tMutation.restrictHumidity(ARID);
-            if (HardcoreEnderExpansion.isModLoaded())
-                tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "ender_goo"), 0);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(1, "End")); // End Dim
-        }),
-    SILVERFISH(GT_BranchDefinition.HEE, "Silverfisch", true, new Color(0xEE053D), new Color(0x000000), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.SILVERFISH), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
-        AlleleHelper.instance.set(template, EFFECT, getEffect(MAGICBEES, "SlowSpeed"));
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_1);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.DOWN_1);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(ECTOPLASMA, STARDUST, 5);
-        tMutation.restrictHumidity(ARID);
-        if (HardcoreEnderExpansion.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(HardcoreEnderExpansion.ID, "ender_goo"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(1, "End")); // End Dim
-    }),
-    RUNE(GT_BranchDefinition.HEE, "Rune", true, new Color(0xE31010), new Color(0x0104D9), beeSpecies -> {
-        beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.RUNEI), 0.025f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.RUNEII), 0.0125f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, LIFESPAN, GT_Bees.superLife);
-        AlleleHelper.instance.set(template, EFFECT, getEffect(MAGICBEES, "SlowSpeed"));
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.NONE);
-    }, dis -> {
-        IMutationCustom tMutation = dis.registerMutation(DRAGONESSENCE, STARDUST, 2)
-            .setIsSecret();
-        tMutation.restrictHumidity(ARID);
-        if (EnderStorage.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(EnderStorage.ID, "enderChest"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(1, "End")); // End Dim
-    }),
-    // Walrus Bee, 100% Combchance, Parents: Catty and Watery
-    WALRUS(GT_BranchDefinition.PLANET, "Walrus", true, new Color(0xD6D580), new Color(0xB5CFC9), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.WALRUS), 1.00f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.FASTEST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis
-            .registerMutation(getSpecies(MAGICBEES, "Watery"), getSpecies(MAGICBEES, "Catty"), 45, 2);
-        if (ExtraCells2.isModLoaded()) {
-            tMutation.requireResource(GameRegistry.findBlock(ExtraCells2.ID, "walrus"), 0);
-        }
-    }),
-    MACHINIST(GT_BranchDefinition.ORGANIC, "Machinist", true, new Color(85, 37, 130), new Color(253, 185, 39),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.MACHINIST), 0.2f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(NORMAL);
-            beeSpecies.setHasEffect();
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.FASTEST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-            AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-            AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-            AlleleHelper.instance.set(template, NOCTURNAL, true);
-            AlleleHelper.instance.set(template, FLOWER_PROVIDER, GT_Flowers.FLAMING);
-            AlleleHelper.instance.set(template, FERTILITY, Fertility.MAXIMUM);
-            AlleleHelper.instance.set(template, EFFECT, getEffect(GREGTECH, "MachineBoost"));
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis
-                .registerMutation(getSpecies(FORESTRY, "Industrious"), getSpecies(FORESTRY, "Imperial"), 1);
-            tMutation.addMutationCondition(new GT_Bees.ActiveGTMachineMutationCondition());
-        }),
-    // Space Bees
-    SPACE(GT_BranchDefinition.SPACE, "Space", true, new Color(0x003366), new Color(0xC0C0C0), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SPACE), 0.02f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-    }, template -> {}, dis -> {
-        IBeeMutationCustom tMutation = dis
-            .registerMutation(getSpecies(FORESTRY, "Industrious"), getSpecies(FORESTRY, "Heroic"), 10);
-        tMutation.restrictTemperature(ICY);
-    }),
-    METEORICIRON(GT_BranchDefinition.SPACE, "MeteoricIron", true, new Color(0x321928), new Color(0x643250),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SPACE), 0.04f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.METEORICIRON), 0.10f);
-            beeSpecies.setHumidity(ARID);
-            beeSpecies.setTemperature(HOT);
-            beeSpecies.setNocturnal();
-        }, template -> {}, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(SPACE, IRON, 9);
-            tMutation.requireResource(GregTech_API.sBlockMetal4, 7);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(28, "Moon")); // Moon Dim
-        }),
-    DESH(GT_BranchDefinition.SPACE, "Desh", false, new Color(0x323232), new Color(0x282828), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SPACE), 0.06f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.DESH), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-        beeSpecies.setNocturnal();
-    }, template -> AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectIgnition), new Consumer<>() {
-
-        @Override
-        public void accept(GT_BeeDefinition dis) {
-            IBeeMutationCustom tMutation = dis.registerMutation(MARS, TITANIUM, 9);
-            tMutation.requireResource(GregTech_API.sBlockMetal2, 12);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(29, "Mars")); // Mars Dim
-        }
-    }),
-    LEDOX(GT_BranchDefinition.SPACE, "Ledox", false, new Color(0x0000CD), new Color(0x0074FF), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SPACE), 0.10f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.LEDOX), 0.10f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "freezing")), new Consumer<>() {
-
-        @Override
-        public void accept(GT_BeeDefinition dis) {
-            IBeeMutationCustom tMutation = dis.registerMutation(CALLISTO, LEAD, 7);
-            if (NewHorizonsCoreMod.isModLoaded())
-                tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.Ledox"), 0);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(35, "Europa")); // Europa Dim
-        }
-    }),
-    CALLISTOICE(GT_BranchDefinition.SPACE, "CallistoIce", false, new Color(0x0074FF), new Color(0x1EB1FF),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SPACE), 0.10f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.CALLISTOICE), 0.10f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(ICY);
-            beeSpecies.setHasEffect();
-        }, template -> AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "freezing")), new Consumer<>() {
-
-            @Override
-            public void accept(GT_BeeDefinition dis) {
-                IBeeMutationCustom tMutation = dis.registerMutation(CALLISTO, getSpecies(EXTRABEES, "freezing"), 7);
-                if (NewHorizonsCoreMod.isModLoaded())
-                    tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.CallistoColdIce"), 0);
-                tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(45, "Callisto")); // Callisto
-                // Dim
-            }
-        }),
-    MYTRYL(GT_BranchDefinition.SPACE, "Mytryl", false, new Color(0xDAA520), new Color(0xF26404), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SPACE), 0.16f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.MYTRYL), 0.10f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> {}, new Consumer<>() {
-
-        @Override
-        public void accept(GT_BeeDefinition dis) {
-            IBeeMutationCustom tMutation = dis.registerMutation(IO, MITHRIL, 6);
-            if (NewHorizonsCoreMod.isModLoaded())
-                tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.Mytryl"), 0);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(36, "IO")); // IO Dim
-        }
-    }),
-    QUANTIUM(GT_BranchDefinition.SPACE, "Quantium", false, new Color(0x00FF00), new Color(0x00D10B), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SPACE), 0.16f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.QUANTIUM), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> {}, new Consumer<>() {
-
-        @Override
-        public void accept(GT_BeeDefinition dis) {
-            IBeeMutationCustom tMutation = dis.registerMutation(VENUS, OSMIUM, 6);
-            if (NewHorizonsCoreMod.isModLoaded())
-                tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.Quantinum"), 0);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(39, "Venus")); // Venus Dim
-        }
-    }),
-    ORIHARUKON(GT_BranchDefinition.SPACE, "Oriharukon", false, new Color(0x228B22), new Color(0x677D68), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SPACE), 0.26f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.ORIHARUKON), 0.10f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setHasEffect();
-    }, template -> {}, new Consumer<>() {
-
-        @Override
-        public void accept(GT_BeeDefinition dis) {
-            IBeeMutationCustom tMutation = dis.registerMutation(LEAD, OBERON, 5);
-            if (GalaxySpace.isModLoaded())
-                tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "metalsblock"), 6);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(46, "Oberon")); // Oberon Dim
-        }
-    }),
-    INFUSEDGOLD(GT_BranchDefinition.SPACE, "Infused Gold", false, new Color(0x80641E), new Color(0xFFC83C),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.GOLD), 0.20f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.INFUSEDGOLD), 0.30f);
-            beeSpecies.setHumidity(DAMP);
-            beeSpecies.setTemperature(ICY);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> {}, new Consumer<>() {
-
-            @Override
-            public void accept(GT_BeeDefinition dis) {
-                IBeeMutationCustom tMutation = dis.registerMutation(GOLD, HAUMEA, 5);
-                tMutation.requireResource(GregTech_API.sBlockMetal3, 10);
-                tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(83, "Haumea")); // Haumea Dim
-            }
-        }),
-    MYSTERIOUSCRYSTAL(GT_BranchDefinition.SPACE, "MysteriousCrystal", false, new Color(0x3CB371), new Color(0x16856C),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SPACE), 0.42f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.MYSTERIOUSCRYSTAL), 0.30f);
-            beeSpecies.setHumidity(ARID);
-            beeSpecies.setTemperature(ICY);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> {}, new Consumer<>() {
-
-            @Override
-            public void accept(GT_BeeDefinition dis) {
-                IBeeMutationCustom tMutation = dis.registerMutation(ENCELADUS, EMERALD, 3);
-                if (NewHorizonsCoreMod.isModLoaded()) tMutation
-                    .requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.MysteriousCrystal"), 0);
-                tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(41, "Enceladus")); // Enceladus
-                // Dim
-            }
-        }),
-    BLACKPLUTONIUM(GT_BranchDefinition.SPACE, "BlackPlutonium", false, new Color(0x000000), new Color(0x323232),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SPACE), 0.68f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.BLACKPLUTONIUM), 0.10f);
-            beeSpecies.setHumidity(ARID);
-            beeSpecies.setTemperature(HELLISH);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> {}, new Consumer<>() {
-
-            @Override
-            public void accept(GT_BeeDefinition dis) {
-                IBeeMutationCustom tMutation = dis.registerMutation(PLUTO, PLUTONIUM, 2);
-                if (NewHorizonsCoreMod.isModLoaded())
-                    tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.BlackPlutonium"), 0);
-                tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(49, "Pluto")); // Pluto Dim
-            }
-        }),
-    TRINIUM(GT_BranchDefinition.SPACE, "Trinium", false, new Color(0xB0E0E6), new Color(0xC8C8D2), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.TRINIUM), 0.75f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.QUANTIUM), 0.10f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, SPEED, GT_Bees.speedBlinding), new Consumer<>() {
-
-        @Override
-        public void accept(GT_BeeDefinition dis) {
-            IBeeMutationCustom tMutation = dis.registerMutation(ENCELADUS, IRIDIUM, 4);
-            tMutation.requireResource(GregTech_API.sBlockMetal4, 9);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(41, "Enceladus")); // Enceladus Dim
-        }
-    }),
-    // Planet Line
-    MOON(GT_BranchDefinition.PLANET, "Moon", false, new Color(0x373735), new Color(0x7E7E78), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.MOON), 0.35f);
-        if (NewHorizonsCoreMod.isModLoaded())
-            beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MoonStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(SPACE, CLAY, 25);
-        if (GalacticraftCore.isModLoaded()) {
-            tMutation.requireResource(GameRegistry.findBlock(GalacticraftCore.ID, "tile.moonBlock"), 4);
-        }
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(28, "Moon")); // Moon Dim
-    }),
-    MARS(GT_BranchDefinition.PLANET, "Mars", false, new Color(0x220D05), new Color(0x3A1505), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.MARS), 0.35f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MarsStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(MOON, IRON, 20);
-        if (GalacticraftMars.isModLoaded()) {
-            tMutation.requireResource(GameRegistry.findBlock(GalacticraftMars.ID, "tile.mars"), 5);
-        }
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(29, "Mars")); // Mars Dim
-    }),
-    PHOBOS(GT_BranchDefinition.PLANET, "Phobos", true, new Color(0x220D05), new Color(0x7a5706), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.MARS), 0.25f);
-        if (NewHorizonsCoreMod.isModLoaded()) beeSpecies
-            .addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PhobosStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-        beeSpecies.setNocturnal();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(MARS, MOON, 20);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "phobosblocks"), 2);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(38, "Phobos")); // Phobos Dim
-    }),
-    DEIMOS(GT_BranchDefinition.PLANET, "Deimos", true, new Color(0x220D05), new Color(0x7a3206), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.MARS), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.DeimosStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(HOT);
-        beeSpecies.setNocturnal();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(MARS, SPACE, 20);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "deimosblocks"), 1);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(40, "Deimos")); // Deimos Dim
-    }),
-    CERES(GT_BranchDefinition.PLANET, "Ceres", true, new Color(0x3ca5b7), new Color(0x1e7267), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.JUPITER), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CeresStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-        beeSpecies.setNocturnal();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(MARS, METEORICIRON, 20);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "ceresblocks"), 1);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(42, "Ceres")); // Ceres Dim
-    }),
-    JUPITER(GT_BranchDefinition.PLANET, "Jupiter", false, new Color(0x734B2E), new Color(0xD0CBC4), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.JUPITER), 0.35f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CallistoStoneDust", 1, 0), 0.05f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CallistoIceDust", 1, 0), 0.05f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.IoStoneDust", 1, 0), 0.05f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaStoneDust", 1, 0), 0.05f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaIceDust", 1, 0), 0.05f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.GanymedeStoneDust", 1, 0), 0.05f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(MARS, DESH, 15);
-        if (NewHorizonsCoreMod.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.Ledox"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(30, "Asteroids")); // Asteroid Dim
-    }),
-    IO(GT_BranchDefinition.PLANET, "IO", true, new Color(0x734B2E), new Color(0xe5701b), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.JUPITER), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.IoStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, getSpecies(EXTRABEES, "volcanic"), 15);
-        tMutation.restrictTemperature(HELLISH);
-        if (GalaxySpace.isModLoaded()) tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "ioblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(36, "IO")); // IO Dim
-    }),
-    EUROPA(GT_BranchDefinition.PLANET, "Europa", true, new Color(0x5982ea), new Color(0x0b36a3), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.JUPITER), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaStoneDust", 1, 0), 0.10f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EuropaIceDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, IRON, 15);
-        tMutation.restrictTemperature(ICY);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "europagrunt"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(35, "Europa")); // Europa Dim
-    }),
-    GANYMEDE(GT_BranchDefinition.PLANET, "Ganymede", true, new Color(0x3d1b10), new Color(0x190c07), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.JUPITER), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.GanymedeStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(COLD);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, TITANIUM, 15);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "ganymedeblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(43, "Ganymede")); // Ganymede Dim
-    }),
-    CALLISTO(GT_BranchDefinition.PLANET, "Callisto", true, new Color(0x0f333d), new Color(0x0d84a5), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.JUPITER), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CallistoStoneDust", 1, 0), 0.10f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CallistoIceDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, getSpecies(EXTRABEES, "artic"), 15);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "callistoblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(45, "Callisto")); // Callisto Dim
-    }),
-    SATURN(GT_BranchDefinition.PLANET, "Saturn", false, new Color(0xD2A472), new Color(0xF8C37B), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SATURN), 0.35f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TitanStoneDust", 1, 0), 0.05f);
-        beeSpecies
-            .addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EnceladusStoneDust", 1, 0), 0.05f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EnceladusIceDust", 1, 0), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, LEDOX, 25, 2);
-        if (NewHorizonsCoreMod.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.Quantinum"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(30, "Asteriods")); // Asteriods Dim
-    }),
-    ENCELADUS(GT_BranchDefinition.PLANET, "Enceladus", true, new Color(0xD2A472), new Color(0x193fa0), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SATURN), 0.25f);
-        beeSpecies
-            .addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EnceladusStoneDust", 1, 0), 0.10f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EnceladusIceDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(SATURN, CHROME, 25, 2);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "enceladusblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(41, "Enceladus")); // Enceladus Dim
-    }),
-    TITAN(GT_BranchDefinition.PLANET, "Titan", true, new Color(0xa0641b), new Color(0x7c1024), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SATURN), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TitanStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(SATURN, NICKEL, 25, 2);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "titanblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(44, "Titan")); // Titan Dim
-    }),
-    URANUS(GT_BranchDefinition.PLANET, "Uranus", false, new Color(0x75C0C9), new Color(0x84D8EC), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.URANUS), 0.35f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MirandaStoneDust", 1, 0), 0.05f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.OberonStoneDust", 1, 0), 0.05f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(SATURN, TRINIUM, 10);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "metalsblock"), 6);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(30, "Asteroids")); // Asteroids Dim
-    }),
-    MIRANDA(GT_BranchDefinition.PLANET, "Miranda", true, new Color(0x75C0C9), new Color(0x0d211c), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.URANUS), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MirandaStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(URANUS, TIN, 10);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "mirandablocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(86, "Miranda")); // Miranda Dim
-    }),
-    OBERON(GT_BranchDefinition.PLANET, "Oberon", true, new Color(0x4A4033), new Color(0xB5A288), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.URANUS), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.OberonStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(ICY);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(URANUS, IRIDIUM, 10);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "oberonblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(46, "Oberon")); // Oberon Dim
-    }),
-    NEPTUNE(GT_BranchDefinition.PLANET, "Neptune", false, new Color(0x334CFF), new Color(0x576DFF), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.NEPTUNE), 0.35f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ProteusStoneDust", 1, 0), 0.05f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TritonStoneDust", 1, 0), 0.05f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(URANUS, ORIHARUKON, 7);
-        if (NewHorizonsCoreMod.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(NewHorizonsCoreMod.ID, "tile.MysteriousCrystal"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(30, "Asteroids")); // Asteroids Dim
-    }),
-    PROTEUS(GT_BranchDefinition.PLANET, "Proteus", true, new Color(0x334CFF), new Color(0x592610), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.NEPTUNE), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ProteusStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setNocturnal();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(NEPTUNE, COPPER, 7);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "proteusblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(47, "Proteus")); // Proteus Dim
-    }),
-    TRITON(GT_BranchDefinition.PLANET, "Triton", true, new Color(0x334CFF), new Color(0x421118), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.NEPTUNE), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TritonStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(NEPTUNE, GOLD, 7);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "tritonblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(48, "Triton")); // Triton Dim
-    }),
-    PLUTO(GT_BranchDefinition.PLANET, "Pluto", false, new Color(0x34271E), new Color(0x69503D), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.PLUTO), 0.35f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PlutoStoneDust", 1, 0), 0.10f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PlutoIceDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(NEPTUNE, PLUTONIUM, 5);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "plutoblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(49, "Pluto")); // Pluto Dim
-    }),
-    HAUMEA(GT_BranchDefinition.PLANET, "Haumea", false, new Color(0x1C1413), new Color(0x392B28), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.HAUMEA), 0.35f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.HaumeaStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(ICY);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(PLUTO, NAQUADAH, 7, 2);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "haumeablocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(83, "Haumea")); // Haumea Dim
-    }),
-    MAKEMAKE(GT_BranchDefinition.PLANET, "MakeMake", false, new Color(0x301811), new Color(0x120A07), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.MAKEMAKE), 0.35f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MakeMakeStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(PLUTO, NAQUADRIA, 7, 2);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "makemakegrunt"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(25, "MakeMake")); // MakeMake Dim
-    }),
-    CENTAURI(GT_BranchDefinition.PLANET, "Centauri", false, new Color(0x2F2A14), new Color(0xB06B32), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.CENTAURI), 0.35f);
-        beeSpecies
-            .addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CentauriASurfaceDust", 1, 0), 0.05f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(MAKEMAKE, DESH, 3);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "acentauribbgrunt"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(33, "Kuiper Belt")); // Kuiper Belt Dim
-    }),
-    ACENTAURI(GT_BranchDefinition.PLANET, "aCentauri", false, new Color(0x2F2A14), new Color(0xa01e14), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.CENTAURI), 0.25f);
-        beeSpecies
-            .addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CentauriASurfaceDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), new Consumer<>() {
-
-        @Override
-        public void accept(GT_BeeDefinition dis) {
-            IBeeMutationCustom tMutation = dis.registerMutation(CENTAURI, INFINITYCATALYST, 3);
-            if (GalaxySpace.isModLoaded())
-                tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "acentauribbgrunt"), 0);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(31, "aCentauri")); // aCentauri Dim
-        }
-    }),
-    TCETI(GT_BranchDefinition.PLANET, "tCeti", false, new Color(0x46241A), new Color(0x7B412F), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.TCETI), 0.35f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TCetiEStoneDust", 1, 0), 0.05f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(MAKEMAKE, HAUMEA, 5, 2);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "tcetieblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(33, "Kuiper Belt")); // Kuiper Belt Dim
-    }),
-    TCETIE(GT_BranchDefinition.PLANET, "tCetiE", false, new Color(0x2d561b), new Color(0x0c0f60), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.TCETI), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TCetiEStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(TCETI, getSpecies(MAGICBEES, "TCWater"), 5, 2);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "tcetieblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(85, "tCeti E")); // tCeti E Dim
-    }),
-    // Parents: TCETI and TCETIE, 25% combchance, needs Damp Humidity and Normal temperature. Is Mycophilic
-    SEAWEED(GT_BranchDefinition.PLANET, "SeaWeed", true, new Color(0xCBCBCB), new Color(0x83FF83), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SEAWEED), 0.25f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TCetiEStoneDust", 1, 0), 0.15f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(EnumTemperature.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGER);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.DOWN_1);
-        AlleleHelper.instance.set(template, HUMIDITY_TOLERANCE, Tolerance.DOWN_1);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectMycophilic);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(TCETI, TCETIE, 5, 2);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "tcetieblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(85, "tCeti E")); // tCeti E Dim
-    }),
-
-    BARNARDA(GT_BranchDefinition.PLANET, "Barnarda", false, new Color(0x0D5A0D), new Color(0xE6C18D), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.BARNARDA), 0.35f);
-        beeSpecies
-            .addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaEStoneDust", 1, 0), 0.05f);
-        beeSpecies
-            .addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaFStoneDust", 1, 0), 0.05f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(MAKEMAKE, THORIUM, 3, 2);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "barnardaEgrunt"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(33, "Kuiper Belt")); // Kuiper Belt Dim
-    }),
-    BARNARDAC(GT_BranchDefinition.PLANET, "BarnardaC", false, new Color(0x0D5A0D), new Color(0x473f0a), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.BARNARDA), 0.25f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-    }, template -> {
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-        AlleleHelper.instance.set(template, EFFECT, getEffect(GREGTECH, "Treetwister"));
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(BARNARDA, AMERICIUM, 3, 2);
-        if (GalaxySpace.isModLoaded()) {
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "barnardaEgrunt"), 0);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(32, "Barnarda C")); // Barnarda C Dim
-        }
-    }),
-    BARNARDAE(GT_BranchDefinition.PLANET, "BarnardaE", false, new Color(0x0D5A0D), new Color(0x4c1f0a), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.BARNARDA), 0.25f);
-        beeSpecies
-            .addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaEStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(BARNARDA, DIVIDED, 3, 2);
-        if (GalaxySpace.isModLoaded()) {
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "barnardaEgrunt"), 0);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(81, "Barnard E")); // "Barnard E Dim
-        }
-    }),
-    BARNARDAF(GT_BranchDefinition.PLANET, "BarnardaF", false, new Color(0x0D5A0D), new Color(0x1e0b49), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.BARNARDA), 0.25f);
-        beeSpecies
-            .addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.BarnardaFStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HOT);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(BARNARDA, NEUTRONIUM, 3, 2);
-        if (GalaxySpace.isModLoaded()) {
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "barnardaFgrunt"), 0);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(82, "Barnard F")); // "Barnard F Dim
-        }
-    }),
-    VEGA(GT_BranchDefinition.PLANET, "Vega", false, new Color(0x1A2036), new Color(0xB5C0DE), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.VEGA), 0.35f);
-        beeSpecies.addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.VegaBStoneDust", 1, 0), 0.05f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(MAKEMAKE, NAQUADAH, 2);
-        if (GalaxySpace.isModLoaded()) {
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "vegabgrunt"), 0);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(33, "Kuiper Belt")); // Kuiper Belt
-                                                                                                       // Dim
-        }
-    }),
-    VEGAB(GT_BranchDefinition.PLANET, "VegaB", false, new Color(0x1A2036), new Color(0x81e261), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.VEGA), 0.35f);
-        if (NewHorizonsCoreMod.isModLoaded()) beeSpecies
-            .addSpecialty(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.VegaBStoneDust", 1, 0), 0.10f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(COLD);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(VEGA, NAQUADRIA, 2);
-        if (GalaxySpace.isModLoaded()) {
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "vegabgrunt"), 0);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(84, "VegaB")); // VegaB Dim
-        }
-    }),
-    MERCURY(GT_BranchDefinition.PLANET, "Mercury", false, new Color(0x4A4033), new Color(0xB5A288), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.MERCURY), 0.35f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, TUNGSTEN, 25, 2);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "mercuryblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(37, "Mercury")); // Mercury Dim
-    }),
-    VENUS(GT_BranchDefinition.PLANET, "Venus", false, new Color(0x4A4033), new Color(0xB5A288), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.VENUS), 0.35f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setTemperature(HELLISH);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(JUPITER, MITHRIL, 25, 2);
-        if (GalaxySpace.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(GalaxySpace.ID, "venusblocks"), 0);
-        tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(39, "Venus")); // Venus Dim
-    }),
-
-    // Infinity Line
-    COSMICNEUTRONIUM(GT_BranchDefinition.PLANET, "CosmicNeutronium", false, new Color(0x484848), new Color(0x323232),
-        beeSpecies -> {
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.COSMICNEUTRONIUM), 0.375f);
-            beeSpecies.setHumidity(DAMP);
-            beeSpecies.setTemperature(ICY);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-            // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
-            beeSpecies.setJubilanceProvider(GT_JubilanceMegaApiary.instance);
-        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(NEUTRONIUM, BARNARDAF, 7, 10);
-            if (Avaritia.isModLoaded())
-                tMutation.requireResource(GameRegistry.findBlock(Avaritia.ID, "Resource_Block"), 0);
-        }),
-    INFINITYCATALYST(GT_BranchDefinition.PLANET, "InfinityCatalyst", false, new Color(0xFFFFFF), new Color(0xFFFFFF),
-        beeSpecies -> {
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.INFINITYCATALYST), 0.015f);
-            beeSpecies.setHumidity(DAMP);
-            beeSpecies.setTemperature(HELLISH);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-            // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
-            beeSpecies.setJubilanceProvider(GT_JubilanceMegaApiary.instance);
-        }, template -> {
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST);
-            AlleleHelper.instance.set(template, EFFECT, getEffect(EXTRABEES, "blindness"));
-        }, dis -> {
-            IMutationCustom tMutation = dis.registerMutation(DOB, COSMICNEUTRONIUM, 3, 10)
-                .setIsSecret();
-            if (Avaritia.isModLoaded()) {
-                tMutation.requireResource(GameRegistry.findBlock(Avaritia.ID, "Resource_Block"), 1);
-            }
-        }),
-    INFINITY(GT_BranchDefinition.PLANET, "Infinity", false, new Color(0xFFFFFF), new Color(0xFFFFFF), beeSpecies -> {
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.INFINITY), 0.015f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-        // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
-        beeSpecies.setJubilanceProvider(GT_JubilanceMegaApiary.instance);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(INFINITYCATALYST, COSMICNEUTRONIUM, 1, 10);
-        if (AvaritiaAddons.isModLoaded()) {
-            tMutation.requireResource(GameRegistry.findBlock(AvaritiaAddons.ID, "InfinityChest"), 0);
-        }
-    }),
-    KEVLAR(GT_BranchDefinition.IC2, "Kevlar", false, new Color(0x2d542f), new Color(0xa2baa3), beeSpecies -> {
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.KEVLAR), 0.075f);
-        beeSpecies.addSpecialty(MaterialsKevlar.Kevlar.getNuggets(1), 0.01f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setTemperature(COLD);
-        beeSpecies.setHasEffect();
-        beeSpecies.setJubilanceProvider(GT_JubilanceMegaApiary.instance);
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-        AlleleHelper.instance.set(template, EFFECT, AlleleEffect.effectSnowing);
-        AlleleHelper.instance.set(template, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(template, NOCTURNAL, true);
-        AlleleHelper.instance.set(template, FLOWER_PROVIDER, Flowers.SNOW);
-        AlleleHelper.instance.set(template, FLOWERING, Flowering.AVERAGE);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(OIL, INFINITYCATALYST, 4);
-        // UHV Replicator (UU-Matter)
-        GregTech_API.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTech_API.sBlockMachines, 11003));
-    }),
-
-    // Noble Gas Line
-    // Helium bee, Humidity: normal, Temperature: Icy, Parents: Space & Mars, Mutationrate: 10%, Combrate: 50%
-    HELIUM(GT_BranchDefinition.NOBLEGAS, "Helium", false, new Color(0xFFA9FF), new Color(0xC8B8B4), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.HELIUM), 0.35f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(MAGICBEES, "Watery"), ENDDUST, 10);
-        tMutation.restrictTemperature(ICY);
-    }),
-    // Argon bee, Humidity: normal, Temperature: Icy, Parents: Helium & Phobos, Mutationrate: 8%, Combrate: 50%
-    ARGON(GT_BranchDefinition.NOBLEGAS, "Argon", false, new Color(0x89D9E1), new Color(0xBDA5C2), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.ARGON), 0.35f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(HELIUM, LICH, 8);
-        tMutation.restrictTemperature(ICY);
-    }),
-    // Neon bee, Humidity: normal, Temperature: Icy, Parents: Xenon & Ceres, Mutationrate: 6%, Combrate: 50%
-    NEON(GT_BranchDefinition.NOBLEGAS, "Neon", false, new Color(0xFFC826), new Color(0xFF7200), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.NEON), 0.35f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(ARGON, HYDRA, 6);
-        tMutation.restrictTemperature(ICY);
-    }),
-    // Krypton bee, Humidity: normal, Temperature: Icy, Parents: Neon & Jupiter, Mutationrate: 4%, Combrate: 50%
-    KRYPTON(GT_BranchDefinition.NOBLEGAS, "Krypton", false, new Color(0x8A97B0), new Color(0x160822), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.KRYPTON), 0.35f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(NEON, URGHAST, 4);
-        tMutation.restrictTemperature(ICY);
-    }),
-    // Xenon bee, Humidity: normal, Temperature: Icy, Parents: Argon & Deimos, Mutationrate: 6%, Combrate: 50%
-    XENON(GT_BranchDefinition.NOBLEGAS, "Xenon", false, new Color(0x8A97B0), new Color(0x160822), beeSpecies -> {
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.XENON), 0.525f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-        // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
-        beeSpecies.setJubilanceProvider(GT_JubilanceMegaApiary.instance);
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(KRYPTON, SNOWQUEEN, 2);
-        tMutation.restrictTemperature(ICY);
-    }),
-    // Oxygen bee, Humidity: normal, Temperature: Icy, Parents: Space & Callisto, Mutationrate: 15%, Combrate: 50%
-    OXYGEN(GT_BranchDefinition.NOBLEGAS, "Oxygen", false, new Color(0xFFFFFF), new Color(0x8F8FFF), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.OXYGEN), 0.45f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.HYDROGEN), 0.20f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(HELIUM, DRAGONESSENCE, 15);
-        tMutation.restrictTemperature(ICY);
-    }),
-    // Hydrogen bee, Humidity: normal, Temperature: Icy, Parents: Oxygen & Watery, Mutationrate: 15%, Combrate: 50%
-    HYDROGEN(GT_BranchDefinition.NOBLEGAS, "Oxygen", false, new Color(0xFFFFFF), new Color(0xFF1493), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.HYDROGEN), 0.45f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.NITROGEN), 0.20f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(OXYGEN, getSpecies(MAGICBEES, "Watery"), 15);
-        tMutation.restrictTemperature(ICY);
-    }),
-    // Nitrogen bee, Humidity: normal, Temperature: Icy, Parents: Oxygen & Hydrogen, Mutationrate: 15%, Combrate: 50%
-    NITROGEN(GT_BranchDefinition.NOBLEGAS, "Nitrogen", false, new Color(0xFFC832), new Color(0xA52A2A), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.NITROGEN), 0.45f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.FLUORINE), 0.20f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(OXYGEN, HYDROGEN, 15);
-        tMutation.restrictTemperature(ICY);
-    }),
-    // Fluorine bee, Humidity: normal, Temperature: Icy, Parents: Nitrogen & Hydrogen, Mutationrate: 15%, Combrate: 50%
-    FLUORINE(GT_BranchDefinition.NOBLEGAS, "Fluorine", false, new Color(0x86AFF0), new Color(0xFF6D00), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.FLUORINE), 0.45f);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.OXYGEN), 0.20f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(ICY);
-        beeSpecies.setNocturnal();
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(NITROGEN, HYDROGEN, 15);
-        tMutation.restrictTemperature(ICY);
-    }),
-    // Europium line, needed after fluorine definition
-    RAREEARTH(GT_BranchDefinition.RAREMETAL, "RareEarth", false, new Color(0x555643), new Color(0x343428),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.RAREEARTH), 0.20f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.NEODYMIUM), 0.05f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(NORMAL);
-        }, template -> AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST),
-        dis -> dis.registerMutation(FLUORINE, REDSTONE, 10)),
-    NEODYMIUM(GT_BranchDefinition.RAREMETAL, "Neodymium", false, new Color(0x555555), new Color(0x4F4F4F),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.RAREEARTH), 0.15f);
-            beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.NEODYMIUM), 0.15f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setTemperature(HOT);
-        }, template -> {
-            AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-            AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-        }, dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(RAREEARTH, IRON, 10);
-            tMutation.requireResource(GregTech_API.sBlockMetal5, 0);
-        }),
-    EUROPIUM(GT_BranchDefinition.RAREMETAL, "Europium", false, new Color(0xDAA0E2), new Color(0xAB7EB1), beeSpecies -> {
-        beeSpecies.addProduct(WerkstoffMaterialPool.EuropiumIIIOxide.get(OrePrefixes.dust, 1), 0.10F);
-        beeSpecies.addSpecialty(GT_Bees.combs.getStackForType(CombType.EUROPIUM), 0.075f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setTemperature(HOT);
-        beeSpecies.setNocturnal();
-        // Makes it only work in the Mega Apiary NOTE: COMB MUST BE SPECIALITY COMB
-        beeSpecies.setJubilanceProvider(GT_JubilanceMegaApiary.instance);
-    }, template -> {
-        AlleleHelper.instance.set(template, SPEED, Speed.SLOWEST);
-        AlleleHelper.instance.set(template, LIFESPAN, Lifespan.LONGEST);
-    }, dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(NEODYMIUM, HYDROGEN, 5, 4);
-        // Compact fusion reactor mark 1 controller
-        GregTech_API.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTech_API.sBlockMachines, 32019));
-    }),
-    // infused Shards line
-    AIR(GT_BranchDefinition.INFUSEDSHARD, "Air", false, new Color(0xFFFF7E), new Color(0x60602F), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.INFUSEDAER), 0.30f);
-        beeSpecies.setHumidity(DAMP);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis
-            .registerMutation(getSpecies(MAGICBEES, "Supernatural"), getSpecies(MAGICBEES, "Windy"), 15);
-        tMutation.restrictTemperature(HOT);
-        if (Thaumcraft.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 0);
-    }),
-    FIRE(GT_BranchDefinition.INFUSEDSHARD, "Fire", false, new Color(0xED3801), new Color(0x3B0E00), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.INFUSEDIGNIS), 0.30f);
-        beeSpecies.setHumidity(ARID);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(getSpecies(MAGICBEES, "Supernatural"), AIR, 15);
-        tMutation.restrictTemperature(HELLISH);
-        if (Thaumcraft.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 1);
-    }),
-    WATER(GT_BranchDefinition.INFUSEDSHARD, "Water", false, new Color(0x0090FF), new Color(0x002542), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.INFUSEDAQUA), 0.30f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(FIRE, AIR, 15);
-        tMutation.restrictTemperature(ICY);
-        if (Thaumcraft.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 2);
-    }),
-    EARTH(GT_BranchDefinition.INFUSEDSHARD, "Earth", false, new Color(0x008600), new Color(0x003300), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.INFUSEDTERRA), 0.30f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(WATER, FIRE, 15);
-        tMutation.restrictTemperature(WARM);
-        if (Thaumcraft.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 3);
-    }),
-    ORDER(GT_BranchDefinition.INFUSEDSHARD, "Order", false, new Color(0x8A97B0), new Color(0x5C5F62), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.INFUSEDORDO), 0.30f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(EARTH, FIRE, 15);
-        tMutation.restrictTemperature(ICY);
-        if (Thaumcraft.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 4);
-    }),
-    CHAOS(GT_BranchDefinition.INFUSEDSHARD, "Chaos", false, new Color(0x2E2E41), new Color(0x232129), beeSpecies -> {
-        beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.INFUSEDPERDITIO), 0.30f);
-        beeSpecies.setHumidity(EnumHumidity.NORMAL);
-        beeSpecies.setHasEffect();
-    }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-        IBeeMutationCustom tMutation = dis.registerMutation(ORDER, FIRE, 15);
-        tMutation.restrictTemperature(ICY);
-        if (Thaumcraft.isModLoaded())
-            tMutation.requireResource(GameRegistry.findBlock(Thaumcraft.ID, "blockCrystal"), 5);
-    }),
-    NETHERSHARD(GT_BranchDefinition.INFUSEDSHARD, "NetherShard", false, new Color(0xBE0135), new Color(0x350211),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.NETHERSHARD), 0.30f);
-            beeSpecies.setHumidity(ARID);
-            beeSpecies.setTemperature(HOT);
-            beeSpecies.setHasEffect();
-        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(CHAOS, FIRE, 15);
-            GregTech_API.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTech_API.sBlockGem3, 3));
-        }),
-    ENDSHARD(GT_BranchDefinition.INFUSEDSHARD, "EnderShard", false, new Color(0x2E2E41), new Color(0x232129),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.ENDERSHARD), 0.30f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(NETHERSHARD, ENDDUST, 15);
-            tMutation.restrictTemperature(ICY);
-            GregTech_API.sGTCompleteLoad.add(() -> tMutation.requireResource(GregTech_API.sBlockGem1, 7));
-        }),
-    // Organic branch 2.0
-    UNKNOWNWATER(GT_BranchDefinition.ORGANIC, "UnknownLiquid", false, new Color(0x4333A5), new Color(0x36ABFF),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.UNKNOWNLIQUID), 0.20f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST),
-        dis -> dis.registerMutation(INFINITYCATALYST, MYSTERIOUSCRYSTAL, 5)),
-    // Endgame bees
-    JAEGERMEISTER(GT_BranchDefinition.ENDGAME, "JaegerMeister", false, new Color(0x05AD18), new Color(0xE7DAC3),
-        beeSpecies -> {
-            beeSpecies.addProduct(GT_ModHandler.getModItem(CropsPlusPlus.ID, "BppPotions", 1L, 8), 0.01f);
-            beeSpecies.setHumidity(EnumHumidity.NORMAL);
-            beeSpecies.setNocturnal();
-            beeSpecies.setHasEffect();
-        }, template -> AlleleHelper.instance.set(template, LIFESPAN, Lifespan.SHORTEST), dis -> {
-            IBeeMutationCustom tMutation = dis.registerMutation(INFINITYCATALYST, NAQUADRIA, 5);
-            tMutation.requireResource(GregTech_API.sBlockMachines, 4684);
-            tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(100, "Deep Dark")); // Deep Dark
-                                                                                                      // dim
-        });
-
-    private final GT_BranchDefinition branch;
-    private final GT_AlleleBeeSpecies species;
-    private final Consumer mSpeciesProperties;
-    private final Consumer mAlleles;
-    private final Consumer mMutations;
-    private IAllele[] template;
-    private IBeeGenome genome;
-
-    GT_BeeDefinition(GT_BranchDefinition branch, String binomial, boolean dominant, Color primary, Color secondary,
-        Consumer aSpeciesProperties, Consumer aAlleles,
-        Consumer aMutations) {
-        this.mAlleles = aAlleles;
-        this.mMutations = aMutations;
-        this.mSpeciesProperties = aSpeciesProperties;
-        String lowercaseName = this.toString()
-            .toLowerCase(Locale.ENGLISH);
-        String species = WordUtils.capitalize(lowercaseName);
-
-        String uid = "gregtech.bee.species" + species;
-        String description = "for.description." + lowercaseName;
-        String name = "for.bees.species." + lowercaseName;
-        GT_LanguageManager.addStringLocalization("for.bees.species." + lowercaseName, species);
-
-        String authority = GT_LanguageManager.getTranslation("for.bees.authority." + lowercaseName);
-        if (authority.equals("for.bees.authority." + lowercaseName)) {
-            authority = "GTNH";
-        }
-        this.branch = branch;
-        this.species = new GT_AlleleBeeSpecies(
-            uid,
-            dominant,
-            name,
-            authority,
-            description,
-            branch.getBranch(),
-            binomial,
-            primary,
-            secondary);
-    }
-
-    public static void initBees() {
-        for (GT_BeeDefinition bee : values()) {
-            bee.init();
-        }
-        for (GT_BeeDefinition bee : values()) {
-            bee.registerMutations();
-        }
-    }
-
-    static IAlleleBeeEffect getEffect(byte modid, String name) {
-        String s = switch (modid) {
-            case EXTRABEES -> "extrabees.effect." + name;
-            case GENDUSTRY -> "gendustry.effect." + name;
-            case MAGICBEES -> "magicbees.effect" + name;
-            case GREGTECH -> "gregtech.effect" + name;
-            default -> "forestry.effect" + name;
-        };
-        return (IAlleleBeeEffect) AlleleManager.alleleRegistry.getAllele(s);
-    }
-
-    static IAlleleFlowers getFlowers(byte modid, String name) {
-        String s = switch (modid) {
-            case EXTRABEES -> "extrabees.flower." + name;
-            case GENDUSTRY -> "gendustry.flower." + name;
-            case MAGICBEES -> "magicbees.flower" + name;
-            case GREGTECH -> "gregtech.flower" + name;
-            default -> "forestry.flowers" + name;
-        };
-        return (IAlleleFlowers) AlleleManager.alleleRegistry.getAllele(s);
-    }
-
-    private static IAlleleBeeSpecies getSpecies(byte modid, String name) {
-        String s = switch (modid) {
-            case EXTRABEES -> "extrabees.species." + name;
-            case GENDUSTRY -> "gendustry.bee." + name;
-            case MAGICBEES -> "magicbees.species" + name;
-            case GREGTECH -> "gregtech.species" + name;
-            default -> "forestry.species" + name;
-        };
-        IAlleleBeeSpecies ret = (IAlleleBeeSpecies) AlleleManager.alleleRegistry.getAllele(s);
-        if (ret == null) {
-            ret = NAQUADRIA.species;
-        }
-
-        return ret;
-    }
-
-    private void setSpeciesProperties(GT_AlleleBeeSpecies beeSpecies) {
-        this.mSpeciesProperties.accept(beeSpecies);
-    }
-
-    private void setAlleles(IAllele[] template) {
-        this.mAlleles.accept(template);
-    }
-
-    private void registerMutations() {
-        this.mMutations.accept(this);
-    }
-
-    private void init() {
-        setSpeciesProperties(species);
-
-        template = branch.getTemplate();
-        AlleleHelper.instance.set(template, SPECIES, species);
-        setAlleles(template);
-
-        genome = BeeManager.beeRoot.templateAsGenome(template);
-
-        BeeManager.beeRoot.registerTemplate(template);
-    }
-
-    private IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, IAlleleBeeSpecies parent2, int chance) {
-        return registerMutation(parent1, parent2, chance, 1f);
-    }
-
-    private IBeeMutationCustom registerMutation(GT_BeeDefinition parent1, IAlleleBeeSpecies parent2, int chance) {
-        return registerMutation(parent1, parent2, chance, 1f);
-    }
-
-    private IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, GT_BeeDefinition parent2, int chance) {
-        return registerMutation(parent1, parent2, chance, 1f);
-    }
-
-    private IBeeMutationCustom registerMutation(GT_BeeDefinition parent1, GT_BeeDefinition parent2, int chance) {
-        return registerMutation(parent1, parent2, chance, 1f);
-    }
-
-    /**
-     * Diese neue Funtion erlaubt Mutationsraten unter 1%. Setze dazu die Mutationsrate als Bruch mit chance /
-     * chanceDivider This new function allows Mutation percentages under 1%. Set them as a fraction with chance /
-     * chanceDivider
-     */
-    private IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, IAlleleBeeSpecies parent2, int chance,
-        float chanceDivider) {
-        return new GT_Bee_Mutation(parent1, parent2, this.getTemplate(), chance, chanceDivider);
-    }
-
-    private IBeeMutationCustom registerMutation(GT_BeeDefinition parent1, IAlleleBeeSpecies parent2, int chance,
-        float chanceDivider) {
-        return registerMutation(parent1.species, parent2, chance, chanceDivider);
-    }
-
-    private IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, GT_BeeDefinition parent2, int chance,
-        float chanceDivider) {
-        return registerMutation(parent1, parent2.species, chance, chanceDivider);
-    }
-
-    private IBeeMutationCustom registerMutation(GT_BeeDefinition parent1, GT_BeeDefinition parent2, int chance,
-        float chanceDivider) {
-        return registerMutation(parent1.species, parent2, chance, chanceDivider);
-    }
-
-    @Override
-    public final IAllele[] getTemplate() {
-        return Arrays.copyOf(template, template.length);
-    }
-
-    @Override
-    public final IBeeGenome getGenome() {
-        return genome;
-    }
-
-    @Override
-    public final IBee getIndividual() {
-        return new Bee(genome);
-    }
-
-    @Override
-    public final ItemStack getMemberStack(EnumBeeType beeType) {
-        return BeeManager.beeRoot.getMemberStack(getIndividual(), beeType.ordinal());
-    }
-}
diff --git a/src/main/java/gregtech/loaders/misc/GT_Bees.java b/src/main/java/gregtech/loaders/misc/GT_Bees.java
deleted file mode 100644
index a8246360cf..0000000000
--- a/src/main/java/gregtech/loaders/misc/GT_Bees.java
+++ /dev/null
@@ -1,231 +0,0 @@
-package gregtech.loaders.misc;
-
-import static gregtech.api.enums.Mods.Forestry;
-import static gregtech.api.enums.Mods.GalaxySpace;
-import static gregtech.api.enums.Mods.TwilightForest;
-
-import net.minecraft.tileentity.TileEntity;
-import net.minecraft.world.World;
-import net.minecraft.world.biome.BiomeGenBase;
-
-import forestry.api.apiculture.EnumBeeChromosome;
-import forestry.api.apiculture.IAlleleBeeEffect;
-import forestry.api.core.IClimateProvider;
-import forestry.api.genetics.AlleleManager;
-import forestry.api.genetics.IAllele;
-import forestry.api.genetics.IAlleleArea;
-import forestry.api.genetics.IAlleleFloat;
-import forestry.api.genetics.IAlleleInteger;
-import forestry.api.genetics.IGenome;
-import forestry.api.genetics.IMutationCondition;
-import forestry.core.genetics.alleles.Allele;
-import forestry.core.utils.StringUtil;
-import gregtech.GT_Mod;
-import gregtech.api.metatileentity.BaseMetaTileEntity;
-import gregtech.common.bees.GT_AlleleHelper;
-import gregtech.common.items.ItemComb;
-import gregtech.common.items.ItemDrop;
-import gregtech.common.items.ItemPollen;
-import gregtech.common.items.ItemPropolis;
-import gregtech.loaders.misc.bees.GT_AlleleEffect;
-import gregtech.loaders.misc.bees.GT_EffectMachineBoost;
-import gregtech.loaders.misc.bees.GT_EffectTreeTwister;
-import gregtech.loaders.misc.bees.GT_Flowers;
-
-public class GT_Bees {
-
-    public static IAlleleInteger noFertility;
-    public static IAlleleInteger superFertility;
-
-    public static IAlleleInteger noFlowering;
-    public static IAlleleInteger superFlowering;
-
-    public static IAlleleArea noTerritory;
-    public static IAlleleArea superTerritory;
-
-    public static IAlleleFloat noWork;
-    public static IAlleleFloat speedBlinding;
-    public static IAlleleFloat superSpeed;
-
-    public static IAlleleInteger blinkLife;
-    public static IAlleleInteger superLife;
-
-    public static IAlleleBeeEffect treetwisterEffect;
-    public static IAlleleBeeEffect machineBoostEffect;
-
-    public static ItemPropolis propolis;
-    public static ItemPollen pollen;
-    public static ItemDrop drop;
-    public static ItemComb combs;
-
-    public GT_Bees() {
-        if (!(Forestry.isModLoaded() && GT_Mod.gregtechproxy.mGTBees)) {
-            return;
-        }
-        GT_Flowers.doInit();
-        GT_AlleleHelper.initialisation();
-        setupGTAlleles();
-        propolis = new ItemPropolis();
-        propolis.initPropolisRecipes();
-        pollen = new ItemPollen();
-        drop = new ItemDrop();
-        drop.initDropsRecipes();
-        combs = new ItemComb();
-        combs.initCombsRecipes();
-        combs.registerOreDict();
-        GT_BeeDefinition.initBees();
-
-    }
-
-    private static void setupGTAlleles() {
-
-        noFertility = new AlleleInteger("fertilitySterile", 0, false, EnumBeeChromosome.FERTILITY);
-        superFertility = new AlleleInteger("fertilityMultiply", 8, false, EnumBeeChromosome.FERTILITY);
-
-        noFlowering = new AlleleInteger("floweringNonpollinating", 0, false, EnumBeeChromosome.FLOWERING);
-        superFlowering = new AlleleInteger("floweringNaturalistic", 240, false, EnumBeeChromosome.FLOWERING);
-
-        noTerritory = new AlleleArea("areaLethargic", 1, 1, false);
-        superTerritory = new AlleleArea("areaExploratory", 32, 16, false);
-
-        noWork = new AlleleFloat("speedUnproductive", 0, false);
-        superSpeed = new AlleleFloat("speedAccelerated", 4F, false);
-        speedBlinding = AlleleManager.alleleRegistry.getAllele("magicbees.speedBlinding") == null
-            ? new AlleleFloat("speedBlinding", 2f, false)
-            : (IAlleleFloat) AlleleManager.alleleRegistry.getAllele("magicbees.speedBlinding");
-
-        blinkLife = new AlleleInteger("lifeBlink", 2, false, EnumBeeChromosome.LIFESPAN);
-        superLife = new AlleleInteger("lifeEon", 600, false, EnumBeeChromosome.LIFESPAN);
-        machineBoostEffect = new GT_EffectMachineBoost();
-
-        if (GalaxySpace.isModLoaded() && TwilightForest.isModLoaded()) {
-            GT_Mod.GT_FML_LOGGER.info("treetwisterEffect: GalaxySpace and TwilightForest loaded, using default impl");
-            treetwisterEffect = new GT_EffectTreeTwister();
-        } else {
-            GT_Mod.GT_FML_LOGGER
-                .info("treetwisterEffect: GalaxySpace or TwilightForest was not loaded, using fallback impl");
-            treetwisterEffect = GT_AlleleEffect.FORESTRY_BASE_EFFECT;
-        }
-    }
-
-    private static class AlleleFloat extends Allele implements IAlleleFloat {
-
-        private final float value;
-
-        public AlleleFloat(String id, float val, boolean isDominant) {
-            super("gregtech." + id, "gregtech." + id, isDominant);
-            this.value = val;
-            AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.SPEED);
-        }
-
-        @Override
-        public float getValue() {
-            return this.value;
-        }
-    }
-
-    private static class AlleleInteger extends Allele implements IAlleleInteger {
-
-        private final int value;
-
-        public AlleleInteger(String id, int val, boolean isDominant, EnumBeeChromosome c) {
-            super("gregtech." + id, "gregtech." + id, isDominant);
-            this.value = val;
-            AlleleManager.alleleRegistry.registerAllele(this, c);
-        }
-
-        @Override
-        public int getValue() {
-            return this.value;
-        }
-    }
-
-    private static class AlleleArea extends Allele implements IAlleleArea {
-
-        private final int[] value;
-
-        public AlleleArea(String id, int rangeXZ, int rangeY, boolean isDominant) {
-            super("gregtech." + id, "gregtech." + id, isDominant);
-            this.value = new int[] { rangeXZ, rangeY, rangeXZ };
-            AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.TERRITORY);
-        }
-
-        @Override
-        public int[] getValue() {
-            return this.value;
-        }
-    }
-
-    public static class DimensionMutationCondition implements IMutationCondition {
-
-        final int dimID;
-        final String dimName;
-
-        public DimensionMutationCondition(int id, String name) {
-            dimID = id;
-            dimName = name;
-        }
-
-        @Override
-        public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0,
-            IGenome genome1, IClimateProvider climate) {
-            if (world.provider.dimensionId == dimID) return 1;
-            return 0;
-        }
-
-        @Override
-        public String getDescription() {
-            return StringUtil.localizeAndFormat("mutation.condition.dim") + " " + dimName;
-        }
-    }
-
-    public static class BiomeIDMutationCondition implements IMutationCondition {
-
-        final int biomeID;
-        final String biomeName;
-
-        public BiomeIDMutationCondition(int id, String name) {
-            biomeID = id;
-            biomeName = name;
-        }
-
-        @Override
-        public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0,
-            IGenome genome1, IClimateProvider climate) {
-            if (climate.getBiome().biomeID == biomeID) return 1;
-            return 0;
-        }
-
-        @Override
-        public String getDescription() {
-            if (BiomeGenBase.getBiome(biomeID) != null) {
-                return StringUtil.localizeAndFormat("mutation.condition.biomeid") + " " + biomeName;
-            }
-            return "";
-        }
-    }
-
-    public static class ActiveGTMachineMutationCondition implements IMutationCondition {
-
-        public ActiveGTMachineMutationCondition() {
-
-        }
-
-        @Override
-        public float getChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0,
-            IGenome genome1, IClimateProvider climate) {
-            TileEntity tileEntity = world.getTileEntity(x, y - 1, z);
-            if (tileEntity instanceof BaseMetaTileEntity machine) {
-                if (machine.isActive()) {
-                    return 1;
-                }
-            }
-            return 0;
-        }
-
-        @Override
-        public String getDescription() {
-            return "Needs a running GT Machine below to breed";
-        }
-    }
-}
diff --git a/src/main/java/gregtech/loaders/misc/GT_BranchDefinition.java b/src/main/java/gregtech/loaders/misc/GT_BranchDefinition.java
deleted file mode 100644
index 3eae8c73e2..0000000000
--- a/src/main/java/gregtech/loaders/misc/GT_BranchDefinition.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package gregtech.loaders.misc;
-
-import static forestry.api.apiculture.EnumBeeChromosome.CAVE_DWELLING;
-import static forestry.api.apiculture.EnumBeeChromosome.EFFECT;
-import static forestry.api.apiculture.EnumBeeChromosome.FERTILITY;
-import static forestry.api.apiculture.EnumBeeChromosome.FLOWERING;
-import static forestry.api.apiculture.EnumBeeChromosome.FLOWER_PROVIDER;
-import static forestry.api.apiculture.EnumBeeChromosome.HUMIDITY_TOLERANCE;
-import static forestry.api.apiculture.EnumBeeChromosome.LIFESPAN;
-import static forestry.api.apiculture.EnumBeeChromosome.NOCTURNAL;
-import static forestry.api.apiculture.EnumBeeChromosome.SPEED;
-import static forestry.api.apiculture.EnumBeeChromosome.TEMPERATURE_TOLERANCE;
-import static forestry.api.apiculture.EnumBeeChromosome.TERRITORY;
-import static forestry.api.apiculture.EnumBeeChromosome.TOLERANT_FLYER;
-import static forestry.core.genetics.alleles.EnumAllele.Fertility;
-import static forestry.core.genetics.alleles.EnumAllele.Flowering;
-import static forestry.core.genetics.alleles.EnumAllele.Flowers;
-import static forestry.core.genetics.alleles.EnumAllele.Lifespan;
-import static forestry.core.genetics.alleles.EnumAllele.Speed;
-import static forestry.core.genetics.alleles.EnumAllele.Territory;
-import static forestry.core.genetics.alleles.EnumAllele.Tolerance;
-import static gregtech.loaders.misc.GT_BeeDefinition.getEffect;
-import static gregtech.loaders.misc.GT_BeeDefinition.getFlowers;
-import static gregtech.loaders.misc.GT_BeeDefinitionReference.EXTRABEES;
-import static gregtech.loaders.misc.GT_BeeDefinitionReference.MAGICBEES;
-
-import java.util.Arrays;
-import java.util.function.Consumer;
-
-import forestry.api.apiculture.BeeManager;
-import forestry.api.apiculture.EnumBeeChromosome;
-import forestry.api.genetics.IAllele;
-import forestry.api.genetics.IClassification;
-import forestry.apiculture.genetics.alleles.AlleleEffect;
-import forestry.core.genetics.alleles.AlleleHelper;
-
-public enum GT_BranchDefinition {
-
-    ORGANIC("Fuelis", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(alleles, HUMIDITY_TOLERANCE, Tolerance.BOTH_2);
-        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.WHEAT);
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.SLOW);
-        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORTER);
-        AlleleHelper.instance.set(alleles, SPEED, Speed.SLOWEST);
-    }),
-    IC2("Industrialis", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.UP_1);
-        AlleleHelper.instance.set(alleles, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.SNOW);
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTER);
-        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORT);
-        AlleleHelper.instance.set(alleles, SPEED, Speed.SLOW);
-    }),
-    GTALLOY("Amalgamis", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
-        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.VANILLA);
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.AVERAGE);
-        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORTEST);
-        AlleleHelper.instance.set(alleles, SPEED, Speed.FAST);
-    }),
-    THAUMIC("Arcanis", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(alleles, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, getFlowers(EXTRABEES, "book"));
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTER);
-        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.LONGEST);
-    }),
-    GEM("Ornamentis", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.NETHER);
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.AVERAGE);
-    }),
-    METAL("Metaliferis", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
-        AlleleHelper.instance.set(alleles, CAVE_DWELLING, true);
-        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.JUNGLE);
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.SLOWER);
-    }),
-    RAREMETAL("Mineralis", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.DOWN_1);
-        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.CACTI);
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FAST);
-    }),
-    RADIOACTIVE("Criticalis", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.END);
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.AVERAGE);
-        AlleleHelper.instance.set(alleles, SPEED, GT_Bees.speedBlinding);
-        AlleleHelper.instance.set(alleles, SPEED, getEffect(EXTRABEES, "radioactive"));
-    }),
-    TWILIGHT("Nemoris Obscuri", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(alleles, HUMIDITY_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(alleles, NOCTURNAL, false);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, Flowers.VANILLA);
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTER);
-    }),
-    HEE("Finis Expansiones", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_2);
-        AlleleHelper.instance.set(alleles, HUMIDITY_TOLERANCE, Tolerance.BOTH_2);
-        AlleleHelper.instance.set(alleles, NOCTURNAL, true);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, getFlowers(EXTRABEES, "book"));
-        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORT);
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.SLOW);
-        AlleleHelper.instance.set(alleles, SPEED, Speed.FASTEST);
-        AlleleHelper.instance.set(alleles, TERRITORY, Territory.LARGER);
-    }),
-    SPACE("Cosmicis", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.DOWN_2);
-        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
-        AlleleHelper.instance.set(alleles, NOCTURNAL, true);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTEST);
-        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.LONGEST);
-        AlleleHelper.instance.set(alleles, SPEED, Speed.FAST);
-        AlleleHelper.instance.set(alleles, TERRITORY, Territory.LARGEST);
-    }),
-    PLANET("Planetaris", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, getFlowers(EXTRABEES, "rock"));
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTEST);
-        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.NORMAL);
-        AlleleHelper.instance.set(alleles, SPEED, Speed.FASTEST);
-        AlleleHelper.instance.set(alleles, TERRITORY, Territory.LARGER);
-    }),
-    NOBLEGAS("Nobilis Gasorum", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_2);
-        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTEST);
-        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.NORMAL);
-        AlleleHelper.instance.set(alleles, SPEED, Speed.FASTEST);
-        AlleleHelper.instance.set(alleles, TERRITORY, Territory.AVERAGE);
-    }),
-    INFUSEDSHARD("Infusa Shard", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_1);
-        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
-        AlleleHelper.instance.set(alleles, FLOWER_PROVIDER, getFlowers(MAGICBEES, "rock"));
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTEST);
-        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORTEST);
-        AlleleHelper.instance.set(alleles, SPEED, Speed.FASTEST);
-        AlleleHelper.instance.set(alleles, TERRITORY, Territory.LARGEST);
-    }),
-    ENDGAME("ENDUS GAMUS", alleles -> {
-        AlleleHelper.instance.set(alleles, TEMPERATURE_TOLERANCE, Tolerance.BOTH_5);
-        AlleleHelper.instance.set(alleles, TOLERANT_FLYER, true);
-        AlleleHelper.instance.set(alleles, FLOWERING, Flowering.FASTEST);
-        AlleleHelper.instance.set(alleles, LIFESPAN, Lifespan.SHORTEST);
-        AlleleHelper.instance.set(alleles, SPEED, Speed.FASTEST);
-        AlleleHelper.instance.set(alleles, TERRITORY, Territory.LARGEST);
-    });
-
-    private static IAllele[] defaultTemplate;
-    private final IClassification branch;
-    private final Consumer mBranchProperties;
-
-    GT_BranchDefinition(String scientific, Consumer aBranchProperties) {
-        this.branch = BeeManager.beeFactory.createBranch(
-            this.name()
-                .toLowerCase(),
-            scientific);
-        this.mBranchProperties = aBranchProperties;
-    }
-
-    private static IAllele[] getDefaultTemplate() {
-        if (defaultTemplate == null) {
-            defaultTemplate = new IAllele[EnumBeeChromosome.values().length];
-
-            AlleleHelper.instance.set(defaultTemplate, SPEED, Speed.SLOWEST);
-            AlleleHelper.instance.set(defaultTemplate, LIFESPAN, Lifespan.SHORTER);
-            AlleleHelper.instance.set(defaultTemplate, FERTILITY, Fertility.NORMAL);
-            AlleleHelper.instance.set(defaultTemplate, TEMPERATURE_TOLERANCE, Tolerance.NONE);
-            AlleleHelper.instance.set(defaultTemplate, NOCTURNAL, false);
-            AlleleHelper.instance.set(defaultTemplate, HUMIDITY_TOLERANCE, Tolerance.NONE);
-            AlleleHelper.instance.set(defaultTemplate, TOLERANT_FLYER, false);
-            AlleleHelper.instance.set(defaultTemplate, CAVE_DWELLING, false);
-            AlleleHelper.instance.set(defaultTemplate, FLOWER_PROVIDER, Flowers.VANILLA);
-            AlleleHelper.instance.set(defaultTemplate, FLOWERING, Flowering.SLOWEST);
-            AlleleHelper.instance.set(defaultTemplate, TERRITORY, Territory.AVERAGE);
-            AlleleHelper.instance.set(defaultTemplate, EFFECT, AlleleEffect.effectNone);
-        }
-        return Arrays.copyOf(defaultTemplate, defaultTemplate.length);
-    }
-
-    void setBranchProperties(IAllele[] template) {
-        this.mBranchProperties.accept(template);
-    }
-
-    public final IAllele[] getTemplate() {
-        IAllele[] template = getDefaultTemplate();
-        setBranchProperties(template);
-        return template;
-    }
-
-    public final IClassification getBranch() {
-        return branch;
-    }
-}
diff --git a/src/main/java/gregtech/loaders/misc/GT_CoverLoader.java b/src/main/java/gregtech/loaders/misc/GT_CoverLoader.java
deleted file mode 100644
index dc83202724..0000000000
--- a/src/main/java/gregtech/loaders/misc/GT_CoverLoader.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package gregtech.loaders.misc;
-
-import static gregtech.api.enums.Textures.BlockIcons.VENT_ADVANCED;
-import static gregtech.api.enums.Textures.BlockIcons.VENT_NORMAL;
-
-import net.minecraft.init.Blocks;
-import net.minecraft.item.ItemStack;
-
-import gregtech.api.GregTech_API;
-import gregtech.api.render.TextureFactory;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.common.covers.GT_Cover_Vent;
-
-public class GT_CoverLoader implements Runnable {
-
-    @Override
-    public void run() {
-        for (byte i = 0; i < 16; i = (byte) (i + 1)) {
-            GregTech_API.registerCover(new ItemStack(Blocks.carpet, 1, i), TextureFactory.of(Blocks.wool, i), null);
-        }
-        GregTech_API.registerCover(
-            GT_ModHandler.getIC2Item("reactorVent", 1L, 1),
-            TextureFactory.of(VENT_NORMAL),
-            new GT_Cover_Vent(1));
-        GregTech_API.registerCover(
-            GT_ModHandler.getIC2Item("reactorVentCore", 1L, 1),
-            TextureFactory.of(VENT_NORMAL),
-            new GT_Cover_Vent(1));
-        GregTech_API.registerCover(
-            GT_ModHandler.getIC2Item("reactorVentGold", 1L, 1),
-            TextureFactory.of(VENT_ADVANCED),
-            new GT_Cover_Vent(2));
-        GregTech_API.registerCover(
-            GT_ModHandler.getIC2Item("reactorVentSpread", 1L),
-            TextureFactory.of(VENT_NORMAL),
-            new GT_Cover_Vent(2));
-        GregTech_API.registerCover(
-            GT_ModHandler.getIC2Item("reactorVentDiamond", 1L, 1),
-            TextureFactory.of(VENT_ADVANCED),
-            new GT_Cover_Vent(3));
-    }
-}
diff --git a/src/main/java/gregtech/loaders/misc/bees/GTAlleleEffect.java b/src/main/java/gregtech/loaders/misc/bees/GTAlleleEffect.java
new file mode 100644
index 0000000000..128e3dfeb1
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/bees/GTAlleleEffect.java
@@ -0,0 +1,57 @@
+package gregtech.loaders.misc.bees;
+
+import forestry.api.apiculture.EnumBeeChromosome;
+import forestry.api.apiculture.IAlleleBeeEffect;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.genetics.AlleleManager;
+import forestry.api.genetics.IEffectData;
+import forestry.core.genetics.alleles.Allele;
+
+// helper class for implementing custom bee effects, based on MagicBees' implementation
+public abstract class GTAlleleEffect extends Allele implements IAlleleBeeEffect {
+
+    public static final IAlleleBeeEffect FORESTRY_BASE_EFFECT = (IAlleleBeeEffect) AlleleManager.alleleRegistry
+        .getAllele("forestry.effectNone");
+    protected boolean combinable;
+    protected int tickThrottle; // If set, this amount of ticks have to pass before an effect ticks
+
+    public GTAlleleEffect(String id, boolean isDominant, int tickThrottle) {
+        super("gregtech." + id, "gregtech." + id, isDominant);
+        AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.EFFECT);
+        combinable = false;
+        this.tickThrottle = tickThrottle;
+    }
+
+    @Override
+    public boolean isCombinable() {
+        return combinable;
+    }
+
+    public GTAlleleEffect setIsCombinable(boolean canCombine) {
+        combinable = canCombine;
+        return this;
+    }
+
+    @Override
+    public abstract IEffectData validateStorage(IEffectData storedData);
+
+    @Override
+    public IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
+        int ticksPassed = storedData.getInteger(0);
+        if (ticksPassed >= this.tickThrottle) {
+            storedData = this.doEffectTickThrottled(genome, storedData, housing);
+        } else {
+            storedData.setInteger(0, ticksPassed + 1);
+        }
+        return storedData;
+    }
+
+    protected abstract IEffectData doEffectTickThrottled(IBeeGenome genome, IEffectData storedData,
+        IBeeHousing housing);
+
+    @Override
+    public IEffectData doFX(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
+        return FORESTRY_BASE_EFFECT.doFX(genome, storedData, housing);
+    }
+}
diff --git a/src/main/java/gregtech/loaders/misc/bees/GTEffectMachineBoost.java b/src/main/java/gregtech/loaders/misc/bees/GTEffectMachineBoost.java
new file mode 100644
index 0000000000..e0454e0d27
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/bees/GTEffectMachineBoost.java
@@ -0,0 +1,61 @@
+package gregtech.loaders.misc.bees;
+
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.ChunkCoordinates;
+import net.minecraft.world.World;
+
+import forestry.api.apiculture.BeeManager;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IBeeModifier;
+import forestry.api.genetics.IEffectData;
+import forestry.core.genetics.EffectData;
+import gregtech.api.metatileentity.BaseMetaTileEntity;
+import gregtech.api.metatileentity.implementations.MTETieredMachineBlock;
+
+public class GTEffectMachineBoost extends GTAlleleEffect {
+
+    public GTEffectMachineBoost() {
+        super("effectMachineBoost", false, 600);
+    }
+
+    @Override
+    public IEffectData validateStorage(IEffectData storedData) {
+        if (storedData == null) {
+            storedData = new EffectData(1, 1);
+        }
+        return storedData;
+    }
+
+    @Override
+    protected IEffectData doEffectTickThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
+        World world = housing.getWorld();
+        ChunkCoordinates coords = housing.getCoordinates();
+        IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
+
+        // Get random coords within territory
+        int xRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[0]);
+        int yRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[1]);
+        int zRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[2]);
+
+        int xCoord = coords.posX + world.rand.nextInt(xRange) - xRange / 2;
+        int yCoord = coords.posY + world.rand.nextInt(yRange) - yRange / 2;
+        int zCoord = coords.posZ + world.rand.nextInt(zRange) - zRange / 2;
+
+        // If gt machine of tier lower equal than ev, boost recipe by 2s
+        TileEntity tileEntity = world.getTileEntity(xCoord, yCoord, zCoord);
+        if (tileEntity instanceof BaseMetaTileEntity machine) {
+            if (machine.getMetaTileEntity() instanceof MTETieredMachineBlock tieredMachine) {
+                if (tieredMachine.mTier <= 4) { // EV
+                    if (machine.isActive() && machine.getMaxProgress() > 60) {
+                        machine.increaseProgress(40);
+                    }
+                }
+            }
+        }
+
+        storedData.setInteger(0, 0);
+
+        return storedData;
+    }
+}
diff --git a/src/main/java/gregtech/loaders/misc/bees/GTEffectTreeTwister.java b/src/main/java/gregtech/loaders/misc/bees/GTEffectTreeTwister.java
new file mode 100644
index 0000000000..65c150bd1d
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/bees/GTEffectTreeTwister.java
@@ -0,0 +1,87 @@
+package gregtech.loaders.misc.bees;
+
+import static gregtech.api.enums.Mods.GalaxySpace;
+import static gregtech.api.enums.Mods.TwilightForest;
+
+import java.util.Arrays;
+
+import net.minecraft.block.Block;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.ChunkCoordinates;
+import net.minecraft.world.World;
+
+import forestry.api.apiculture.BeeManager;
+import forestry.api.apiculture.IBeeGenome;
+import forestry.api.apiculture.IBeeHousing;
+import forestry.api.apiculture.IBeeModifier;
+import forestry.api.genetics.IEffectData;
+import gregtech.GTMod;
+import gregtech.api.util.GTModHandler;
+
+public class GTEffectTreeTwister extends GTAlleleEffect {
+
+    private static final Integer[] ALLOWED_DIMS = { 2, // spectre
+        112, // last millenium
+        60, // bedrock
+        69, // pocket plane
+    };
+
+    private static final ItemStack TF_TRANS_SAPLING = GTModHandler
+        .getModItem(TwilightForest.ID, "tile.TFSapling", 1, 6);
+    private static final ItemStack BARN_SAPLING = GTModHandler.getModItem(GalaxySpace.ID, "barnardaCsapling", 1, 1);
+
+    static {
+        if (TF_TRANS_SAPLING == null) {
+            GTMod.GT_FML_LOGGER.info("GT_EffectTreeTwister(): Could not get ItemStack for BarnardaC sapling");
+        }
+        if (BARN_SAPLING == null) {
+            GTMod.GT_FML_LOGGER.info("GT_EffectTreeTwister(): Could not get ItemStack for BarnardaC sapling");
+        }
+    }
+
+    public GTEffectTreeTwister() {
+        super("effectTreetwister", false, 0);
+    }
+
+    public IEffectData validateStorage(IEffectData storedData) {
+        return storedData; // unused for this effect
+    }
+
+    @Override
+    protected IEffectData doEffectTickThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
+        if (TF_TRANS_SAPLING == null || BARN_SAPLING == null) {
+            return storedData;
+        }
+        World world = housing.getWorld();
+        if (!Arrays.asList(ALLOWED_DIMS)
+            .contains(world.provider.dimensionId)) {
+            return storedData;
+        }
+        ChunkCoordinates coords = housing.getCoordinates();
+        IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
+
+        // Get random coords within territory
+        int xRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[0]);
+        int yRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[1]);
+        int zRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[2]);
+
+        int xCoord = coords.posX + world.rand.nextInt(xRange) - xRange / 2;
+        int yCoord = coords.posY + world.rand.nextInt(yRange) - yRange / 2;
+        int zCoord = coords.posZ + world.rand.nextInt(zRange) - zRange / 2;
+
+        ItemStack sourceBlock = new ItemStack(
+            world.getBlock(xCoord, yCoord, zCoord),
+            1,
+            world.getBlockMetadata(xCoord, yCoord, zCoord));
+        if (TF_TRANS_SAPLING != null && BARN_SAPLING != null && TF_TRANS_SAPLING.isItemEqual(sourceBlock)) {
+            world.setBlock(
+                xCoord,
+                yCoord,
+                zCoord,
+                Block.getBlockFromItem(BARN_SAPLING.getItem()),
+                BARN_SAPLING.getItemDamage(),
+                2);
+        }
+        return storedData;
+    }
+}
diff --git a/src/main/java/gregtech/loaders/misc/bees/GTFlowers.java b/src/main/java/gregtech/loaders/misc/bees/GTFlowers.java
new file mode 100644
index 0000000000..db96bfb454
--- /dev/null
+++ b/src/main/java/gregtech/loaders/misc/bees/GTFlowers.java
@@ -0,0 +1,135 @@
+package gregtech.loaders.misc.bees;
+
+import java.util.EnumSet;
+import java.util.HashSet;
+import java.util.Set;
+
+import net.minecraft.block.Block;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemStack;
+import net.minecraft.world.World;
+import net.minecraftforge.common.EnumPlantType;
+
+import forestry.api.apiculture.FlowerManager;
+import forestry.api.genetics.AlleleManager;
+import forestry.api.genetics.IAllele;
+import forestry.api.genetics.IAlleleFlowers;
+import forestry.api.genetics.IChromosomeType;
+import forestry.api.genetics.IFlower;
+import forestry.api.genetics.IFlowerProvider;
+import forestry.api.genetics.IIndividual;
+import forestry.api.genetics.IPollinatable;
+import forestry.api.genetics.ISpeciesRoot;
+import gregtech.api.util.GTLanguageManager;
+
+public enum GTFlowers implements IFlowerProvider, IAlleleFlowers, IChromosomeType {
+
+    FLAMING;
+
+    protected boolean dominant;
+
+    GTFlowers() {
+        dominant = true;
+    }
+
+    public static void doInit() {
+        for (GTFlowers effect : values()) {
+            effect.register();
+        }
+    }
+
+    @Override
+    public String getUID() {
+        return "for.flowers." + toString().toLowerCase();
+    }
+
+    @Override
+    public boolean isDominant() {
+        return dominant;
+    }
+
+    @Override
+    public IFlowerProvider getProvider() {
+        return this;
+    }
+
+    @Override
+    public String getDescription() {
+        return GTLanguageManager.getTranslation("for.flowers." + name().toLowerCase());
+    }
+
+    public void register() {
+        for (ItemStack stack : getItemStacks()) {
+            FlowerManager.flowerRegistry.registerAcceptableFlower(Block.getBlockFromItem(stack.getItem()), getUID());
+        }
+
+        AlleleManager.alleleRegistry.registerAllele(this, this);
+    }
+
+    public ItemStack[] getItemStacks() {
+        switch (this) {
+            case FLAMING:
+                return new ItemStack[] { new ItemStack(Blocks.fire) };
+        }
+        return new ItemStack[0];
+    }
+
+    @Override
+    public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
+        EnumSet types = pollinatable.getPlantType();
+        return types.size() > 1 || !types.contains(EnumPlantType.Nether);
+    }
+
+    public boolean isAcceptedFlower(World world, int x, int y, int z) {
+        Block block = world.getBlock(x, y, z);
+        if (block == null) {
+            return false;
+        }
+
+        switch (this) {
+            case FLAMING:
+                return block == Blocks.fire;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean growFlower(World world, IIndividual individual, int x, int y, int z) {
+        return false;
+    }
+
+    @Override
+    public ItemStack[] affectProducts(World world, IIndividual individual, int x, int y, int z, ItemStack[] products) {
+        return products;
+    }
+
+    @Override
+    public String getName() {
+        return getDescription();
+    }
+
+    @Override
+    public String getUnlocalizedName() {
+        return getUID();
+    }
+
+    @Override
+    public String getFlowerType() {
+        return getUID();
+    }
+
+    @Override
+    public Set getFlowers() {
+        return new HashSet<>();
+    }
+
+    @Override
+    public Class getAlleleClass() {
+        return getClass();
+    }
+
+    @Override
+    public ISpeciesRoot getSpeciesRoot() {
+        return AlleleManager.alleleRegistry.getSpeciesRoot(getUID());
+    }
+}
diff --git a/src/main/java/gregtech/loaders/misc/bees/GT_AlleleEffect.java b/src/main/java/gregtech/loaders/misc/bees/GT_AlleleEffect.java
deleted file mode 100644
index 25198968d2..0000000000
--- a/src/main/java/gregtech/loaders/misc/bees/GT_AlleleEffect.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package gregtech.loaders.misc.bees;
-
-import forestry.api.apiculture.EnumBeeChromosome;
-import forestry.api.apiculture.IAlleleBeeEffect;
-import forestry.api.apiculture.IBeeGenome;
-import forestry.api.apiculture.IBeeHousing;
-import forestry.api.genetics.AlleleManager;
-import forestry.api.genetics.IEffectData;
-import forestry.core.genetics.alleles.Allele;
-
-// helper class for implementing custom bee effects, based on MagicBees' implementation
-public abstract class GT_AlleleEffect extends Allele implements IAlleleBeeEffect {
-
-    public static final IAlleleBeeEffect FORESTRY_BASE_EFFECT = (IAlleleBeeEffect) AlleleManager.alleleRegistry
-        .getAllele("forestry.effectNone");
-    protected boolean combinable;
-    protected int tickThrottle; // If set, this amount of ticks have to pass before an effect ticks
-
-    public GT_AlleleEffect(String id, boolean isDominant, int tickThrottle) {
-        super("gregtech." + id, "gregtech." + id, isDominant);
-        AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.EFFECT);
-        combinable = false;
-        this.tickThrottle = tickThrottle;
-    }
-
-    @Override
-    public boolean isCombinable() {
-        return combinable;
-    }
-
-    public GT_AlleleEffect setIsCombinable(boolean canCombine) {
-        combinable = canCombine;
-        return this;
-    }
-
-    @Override
-    public abstract IEffectData validateStorage(IEffectData storedData);
-
-    @Override
-    public IEffectData doEffect(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
-        int ticksPassed = storedData.getInteger(0);
-        if (ticksPassed >= this.tickThrottle) {
-            storedData = this.doEffectTickThrottled(genome, storedData, housing);
-        } else {
-            storedData.setInteger(0, ticksPassed + 1);
-        }
-        return storedData;
-    }
-
-    protected abstract IEffectData doEffectTickThrottled(IBeeGenome genome, IEffectData storedData,
-        IBeeHousing housing);
-
-    @Override
-    public IEffectData doFX(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
-        return FORESTRY_BASE_EFFECT.doFX(genome, storedData, housing);
-    }
-}
diff --git a/src/main/java/gregtech/loaders/misc/bees/GT_EffectMachineBoost.java b/src/main/java/gregtech/loaders/misc/bees/GT_EffectMachineBoost.java
deleted file mode 100644
index a50c0452bb..0000000000
--- a/src/main/java/gregtech/loaders/misc/bees/GT_EffectMachineBoost.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package gregtech.loaders.misc.bees;
-
-import net.minecraft.tileentity.TileEntity;
-import net.minecraft.util.ChunkCoordinates;
-import net.minecraft.world.World;
-
-import forestry.api.apiculture.BeeManager;
-import forestry.api.apiculture.IBeeGenome;
-import forestry.api.apiculture.IBeeHousing;
-import forestry.api.apiculture.IBeeModifier;
-import forestry.api.genetics.IEffectData;
-import forestry.core.genetics.EffectData;
-import gregtech.api.metatileentity.BaseMetaTileEntity;
-import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock;
-
-public class GT_EffectMachineBoost extends GT_AlleleEffect {
-
-    public GT_EffectMachineBoost() {
-        super("effectMachineBoost", false, 600);
-    }
-
-    @Override
-    public IEffectData validateStorage(IEffectData storedData) {
-        if (storedData == null) {
-            storedData = new EffectData(1, 1);
-        }
-        return storedData;
-    }
-
-    @Override
-    protected IEffectData doEffectTickThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
-        World world = housing.getWorld();
-        ChunkCoordinates coords = housing.getCoordinates();
-        IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
-
-        // Get random coords within territory
-        int xRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[0]);
-        int yRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[1]);
-        int zRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[2]);
-
-        int xCoord = coords.posX + world.rand.nextInt(xRange) - xRange / 2;
-        int yCoord = coords.posY + world.rand.nextInt(yRange) - yRange / 2;
-        int zCoord = coords.posZ + world.rand.nextInt(zRange) - zRange / 2;
-
-        // If gt machine of tier lower equal than ev, boost recipe by 2s
-        TileEntity tileEntity = world.getTileEntity(xCoord, yCoord, zCoord);
-        if (tileEntity instanceof BaseMetaTileEntity machine) {
-            if (machine.getMetaTileEntity() instanceof GT_MetaTileEntity_TieredMachineBlock tieredMachine) {
-                if (tieredMachine.mTier <= 4) { // EV
-                    if (machine.isActive() && machine.getMaxProgress() > 60) {
-                        machine.increaseProgress(40);
-                    }
-                }
-            }
-        }
-
-        storedData.setInteger(0, 0);
-
-        return storedData;
-    }
-}
diff --git a/src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java b/src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java
deleted file mode 100644
index a36635db57..0000000000
--- a/src/main/java/gregtech/loaders/misc/bees/GT_EffectTreeTwister.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package gregtech.loaders.misc.bees;
-
-import static gregtech.api.enums.Mods.GalaxySpace;
-import static gregtech.api.enums.Mods.TwilightForest;
-
-import java.util.Arrays;
-
-import net.minecraft.block.Block;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.ChunkCoordinates;
-import net.minecraft.world.World;
-
-import forestry.api.apiculture.BeeManager;
-import forestry.api.apiculture.IBeeGenome;
-import forestry.api.apiculture.IBeeHousing;
-import forestry.api.apiculture.IBeeModifier;
-import forestry.api.genetics.IEffectData;
-import gregtech.GT_Mod;
-import gregtech.api.util.GT_ModHandler;
-
-public class GT_EffectTreeTwister extends GT_AlleleEffect {
-
-    private static final Integer[] ALLOWED_DIMS = { 2, // spectre
-        112, // last millenium
-        60, // bedrock
-        69, // pocket plane
-    };
-
-    private static final ItemStack TF_TRANS_SAPLING = GT_ModHandler
-        .getModItem(TwilightForest.ID, "tile.TFSapling", 1, 6);
-    private static final ItemStack BARN_SAPLING = GT_ModHandler.getModItem(GalaxySpace.ID, "barnardaCsapling", 1, 1);
-
-    static {
-        if (TF_TRANS_SAPLING == null) {
-            GT_Mod.GT_FML_LOGGER.info("GT_EffectTreeTwister(): Could not get ItemStack for BarnardaC sapling");
-        }
-        if (BARN_SAPLING == null) {
-            GT_Mod.GT_FML_LOGGER.info("GT_EffectTreeTwister(): Could not get ItemStack for BarnardaC sapling");
-        }
-    }
-
-    public GT_EffectTreeTwister() {
-        super("effectTreetwister", false, 0);
-    }
-
-    public IEffectData validateStorage(IEffectData storedData) {
-        return storedData; // unused for this effect
-    }
-
-    @Override
-    protected IEffectData doEffectTickThrottled(IBeeGenome genome, IEffectData storedData, IBeeHousing housing) {
-        if (TF_TRANS_SAPLING == null || BARN_SAPLING == null) {
-            return storedData;
-        }
-        World world = housing.getWorld();
-        if (!Arrays.asList(ALLOWED_DIMS)
-            .contains(world.provider.dimensionId)) {
-            return storedData;
-        }
-        ChunkCoordinates coords = housing.getCoordinates();
-        IBeeModifier beeModifier = BeeManager.beeRoot.createBeeHousingModifier(housing);
-
-        // Get random coords within territory
-        int xRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[0]);
-        int yRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[1]);
-        int zRange = (int) (beeModifier.getTerritoryModifier(genome, 1f) * genome.getTerritory()[2]);
-
-        int xCoord = coords.posX + world.rand.nextInt(xRange) - xRange / 2;
-        int yCoord = coords.posY + world.rand.nextInt(yRange) - yRange / 2;
-        int zCoord = coords.posZ + world.rand.nextInt(zRange) - zRange / 2;
-
-        ItemStack sourceBlock = new ItemStack(
-            world.getBlock(xCoord, yCoord, zCoord),
-            1,
-            world.getBlockMetadata(xCoord, yCoord, zCoord));
-        if (TF_TRANS_SAPLING != null && BARN_SAPLING != null && TF_TRANS_SAPLING.isItemEqual(sourceBlock)) {
-            world.setBlock(
-                xCoord,
-                yCoord,
-                zCoord,
-                Block.getBlockFromItem(BARN_SAPLING.getItem()),
-                BARN_SAPLING.getItemDamage(),
-                2);
-        }
-        return storedData;
-    }
-}
diff --git a/src/main/java/gregtech/loaders/misc/bees/GT_Flowers.java b/src/main/java/gregtech/loaders/misc/bees/GT_Flowers.java
deleted file mode 100644
index d2ab1d6297..0000000000
--- a/src/main/java/gregtech/loaders/misc/bees/GT_Flowers.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package gregtech.loaders.misc.bees;
-
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.Set;
-
-import net.minecraft.block.Block;
-import net.minecraft.init.Blocks;
-import net.minecraft.item.ItemStack;
-import net.minecraft.world.World;
-import net.minecraftforge.common.EnumPlantType;
-
-import forestry.api.apiculture.FlowerManager;
-import forestry.api.genetics.AlleleManager;
-import forestry.api.genetics.IAllele;
-import forestry.api.genetics.IAlleleFlowers;
-import forestry.api.genetics.IChromosomeType;
-import forestry.api.genetics.IFlower;
-import forestry.api.genetics.IFlowerProvider;
-import forestry.api.genetics.IIndividual;
-import forestry.api.genetics.IPollinatable;
-import forestry.api.genetics.ISpeciesRoot;
-import gregtech.api.util.GT_LanguageManager;
-
-public enum GT_Flowers implements IFlowerProvider, IAlleleFlowers, IChromosomeType {
-
-    FLAMING;
-
-    protected boolean dominant;
-
-    GT_Flowers() {
-        dominant = true;
-    }
-
-    public static void doInit() {
-        for (GT_Flowers effect : values()) {
-            effect.register();
-        }
-    }
-
-    @Override
-    public String getUID() {
-        return "for.flowers." + toString().toLowerCase();
-    }
-
-    @Override
-    public boolean isDominant() {
-        return dominant;
-    }
-
-    @Override
-    public IFlowerProvider getProvider() {
-        return this;
-    }
-
-    @Override
-    public String getDescription() {
-        return GT_LanguageManager.getTranslation("for.flowers." + name().toLowerCase());
-    }
-
-    public void register() {
-        for (ItemStack stack : getItemStacks()) {
-            FlowerManager.flowerRegistry.registerAcceptableFlower(Block.getBlockFromItem(stack.getItem()), getUID());
-        }
-
-        AlleleManager.alleleRegistry.registerAllele(this, this);
-    }
-
-    public ItemStack[] getItemStacks() {
-        switch (this) {
-            case FLAMING:
-                return new ItemStack[] { new ItemStack(Blocks.fire) };
-        }
-        return new ItemStack[0];
-    }
-
-    @Override
-    public boolean isAcceptedPollinatable(World world, IPollinatable pollinatable) {
-        EnumSet types = pollinatable.getPlantType();
-        return types.size() > 1 || !types.contains(EnumPlantType.Nether);
-    }
-
-    public boolean isAcceptedFlower(World world, int x, int y, int z) {
-        Block block = world.getBlock(x, y, z);
-        if (block == null) {
-            return false;
-        }
-
-        switch (this) {
-            case FLAMING:
-                return block == Blocks.fire;
-        }
-        return false;
-    }
-
-    @Override
-    public boolean growFlower(World world, IIndividual individual, int x, int y, int z) {
-        return false;
-    }
-
-    @Override
-    public ItemStack[] affectProducts(World world, IIndividual individual, int x, int y, int z, ItemStack[] products) {
-        return products;
-    }
-
-    @Override
-    public String getName() {
-        return getDescription();
-    }
-
-    @Override
-    public String getUnlocalizedName() {
-        return getUID();
-    }
-
-    @Override
-    public String getFlowerType() {
-        return getUID();
-    }
-
-    @Override
-    public Set getFlowers() {
-        return new HashSet<>();
-    }
-
-    @Override
-    public Class getAlleleClass() {
-        return getClass();
-    }
-
-    @Override
-    public ISpeciesRoot getSpeciesRoot() {
-        return AlleleManager.alleleRegistry.getSpeciesRoot(getUID());
-    }
-}
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingBeans.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBeans.java
index 2fb200216e..5a7316bfa3 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingBeans.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBeans.java
@@ -1,15 +1,15 @@
 package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingBeans implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -25,9 +25,9 @@ public class ProcessingBeans implements gregtech.api.interfaces.IOreRecipeRegist
             return;
         }
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L))
             .duration(20 * SECONDS)
             .eut(2)
             .addTo(maceratorRecipes);
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingBlock.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBlock.java
index b9926b188b..056feb0b33 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingBlock.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBlock.java
@@ -4,21 +4,21 @@ import static gregtech.api.recipe.RecipeMaps.compressorRecipes;
 import static gregtech.api.recipe.RecipeMaps.cutterRecipes;
 import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes;
 import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsBotania;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -35,14 +35,14 @@ public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegist
         }
 
         if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV
-            && GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
+            && GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
 
             if (aMaterial == MaterialsBotania.Livingrock || aMaterial == MaterialsBotania.Livingwood
                 || aMaterial == MaterialsBotania.Dreamwood) {
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(3))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(3))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
                     .fluidInputs(
                         Materials.Water.getFluid(
                             Math.max(
@@ -52,11 +52,11 @@ public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegist
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(3))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(3))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
                     .fluidInputs(
-                        GT_ModHandler.getDistilledWater(
+                        GTModHandler.getDistilledWater(
                             Math.max(
                                 3,
                                 Math.min(750, ((int) Math.max(aMaterial.getMass() * 10L, 1L)) * TICKS * 30 / 426))))
@@ -64,9 +64,9 @@ public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegist
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(3))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(3))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
                     .fluidInputs(
                         Materials.Lubricant.getFluid(
                             Math.max(
@@ -80,9 +80,9 @@ public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegist
 
             else if (aMaterial != Materials.Clay && aMaterial != Materials.Basalt) {
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
                     .fluidInputs(
                         Materials.Water.getFluid(
                             Math.max(
@@ -92,11 +92,11 @@ public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegist
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
                     .fluidInputs(
-                        GT_ModHandler.getDistilledWater(
+                        GTModHandler.getDistilledWater(
                             Math.max(
                                 3,
                                 Math.min(750, ((int) Math.max(aMaterial.getMass() * 10L, 1L)) * TICKS * 30 / 426))))
@@ -104,9 +104,9 @@ public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegist
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L))
                     .fluidInputs(
                         Materials.Lubricant.getFluid(
                             Math.max(
@@ -118,18 +118,18 @@ public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegist
             }
         }
 
-        ItemStack tStack1 = GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L);
-        ItemStack tStack2 = GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L);
-        ItemStack tStack3 = GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L);
+        ItemStack tStack1 = GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L);
+        ItemStack tStack2 = GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L);
+        ItemStack tStack3 = GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L);
 
-        GT_ModHandler.removeRecipeDelayed(GT_Utility.copyAmount(1, aStack));
+        GTModHandler.removeRecipeDelayed(GTUtility.copyAmount(1, aStack));
 
-        if (tStack1 != null) GT_ModHandler
+        if (tStack1 != null) GTModHandler
             .removeRecipeDelayed(tStack1, tStack1, tStack1, tStack1, tStack1, tStack1, tStack1, tStack1, tStack1);
-        if (tStack2 != null) GT_ModHandler
+        if (tStack2 != null) GTModHandler
             .removeRecipeDelayed(tStack2, tStack2, tStack2, tStack2, tStack2, tStack2, tStack2, tStack2, tStack2);
         if (tStack3 != null) {
-            GT_ModHandler
+            GTModHandler
                 .removeRecipeDelayed(tStack3, tStack3, tStack3, tStack3, tStack3, tStack3, tStack3, tStack3, tStack3);
         }
 
@@ -137,9 +137,9 @@ public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegist
             if (!(aMaterial == Materials.AnnealedCopper || aMaterial == Materials.WroughtIron)) {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
 
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(ItemList.Shape_Mold_Block.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.block, aMaterial, 1L))
                         .fluidInputs(aMaterial.getMolten(1296L))
                         .duration(14 * SECONDS + 8 * TICKS)
                         .eut(8)
@@ -153,7 +153,7 @@ public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegist
         if (tStack3 != null) tStack3.stackSize = 9;
 
         if (tStack2 != null) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(aStack)
                 .itemOutputs(tStack2)
                 .duration(5 * SECONDS)
@@ -163,17 +163,17 @@ public class ProcessingBlock implements gregtech.api.interfaces.IOreRecipeRegist
 
         if (tStack2 != null && aMaterial != Materials.NetherQuartz) {
             if (tStack3 != null)
-                GT_ModHandler.addShapelessCraftingRecipe(tStack3, new Object[] { OrePrefixes.block.get(aMaterial) });
-            GT_ModHandler.addShapelessCraftingRecipe(tStack2, new Object[] { OrePrefixes.block.get(aMaterial) });
+                GTModHandler.addShapelessCraftingRecipe(tStack3, new Object[] { OrePrefixes.block.get(aMaterial) });
+            GTModHandler.addShapelessCraftingRecipe(tStack2, new Object[] { OrePrefixes.block.get(aMaterial) });
             if (tStack1 != null)
-                GT_ModHandler.addShapelessCraftingRecipe(tStack1, new Object[] { OrePrefixes.block.get(aMaterial) });
+                GTModHandler.addShapelessCraftingRecipe(tStack1, new Object[] { OrePrefixes.block.get(aMaterial) });
         }
 
         if (!OrePrefixes.block.isIgnored(aMaterial) && tStack1 != null) {
             // 9 ingots -> 1 block
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 9L))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 9L))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.block, aMaterial, 1L))
                 .duration(15 * SECONDS)
                 .eut(calculateRecipeEU(aMaterial, 2))
                 .addTo(compressorRecipes);
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingBolt.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBolt.java
index 0d28c417a8..3df65eb483 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingBolt.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingBolt.java
@@ -6,9 +6,9 @@ import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 public class ProcessingBolt implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -35,9 +35,9 @@ public class ProcessingBolt implements gregtech.api.interfaces.IOreRecipeRegistr
             return;
         }
 
-        GT_ModHandler.addCraftingRecipe(
-            GT_Utility.copyAmount(2, aStack),
-            GT_Proxy.tBits,
+        GTModHandler.addCraftingRecipe(
+            GTUtility.copyAmount(2, aStack),
+            GTProxy.tBits,
             new Object[] { "s ", " X", 'X', OrePrefixes.stick.get(aMaterial) });
 
     }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCell.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCell.java
index dcdbda4508..62c1c7cc5c 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCell.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCell.java
@@ -1,14 +1,14 @@
 package gregtech.loaders.oreprocessing;
 
-import static gregtech.api.enums.GT_Values.RA;
+import static gregtech.api.enums.GTValues.RA;
 import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes;
 import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes;
 import static gregtech.api.recipe.RecipeMaps.extractorRecipes;
 import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE;
+import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE;
 
 import java.util.ArrayList;
 
@@ -20,11 +20,11 @@ import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
 import gregtech.api.interfaces.IOreRecipeRegistrator;
 import gregtech.api.objects.MaterialStack;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeBuilder;
-import gregtech.api.util.GT_RecipeConstants;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeBuilder;
+import gregtech.api.util.GTRecipeConstants;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingCell implements IOreRecipeRegistrator {
 
@@ -39,7 +39,7 @@ public class ProcessingCell implements IOreRecipeRegistrator {
         switch (aPrefix) {
             case cell -> {
                 if (aMaterial == Materials.Empty) {
-                    GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+                    GTModHandler.removeRecipeByOutputDelayed(aStack);
                     if (aModName.equalsIgnoreCase("AtomicScience")) {
                         RA.stdBuilder()
                             .itemInputs(ItemList.Cell_Empty.get(1L))
@@ -50,15 +50,15 @@ public class ProcessingCell implements IOreRecipeRegistrator {
                     }
                 } else {
                     if (aMaterial.mFuelPower > 0) {
-                        GT_RecipeBuilder recipeBuilder = RA.stdBuilder();
-                        recipeBuilder.itemInputs(GT_Utility.copyAmount(1, aStack));
-                        if (GT_Utility.getFluidForFilledItem(aStack, true) == null
-                            && GT_Utility.getContainerItem(aStack, true) != null) {
-                            recipeBuilder.itemOutputs(GT_Utility.getContainerItem(aStack, true));
+                        GTRecipeBuilder recipeBuilder = RA.stdBuilder();
+                        recipeBuilder.itemInputs(GTUtility.copyAmount(1, aStack));
+                        if (GTUtility.getFluidForFilledItem(aStack, true) == null
+                            && GTUtility.getContainerItem(aStack, true) != null) {
+                            recipeBuilder.itemOutputs(GTUtility.getContainerItem(aStack, true));
                         }
                         recipeBuilder.metadata(FUEL_VALUE, aMaterial.mFuelPower)
                             .metadata(FUEL_TYPE, aMaterial.mFuelType)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                     }
                     if (!((aMaterial.mMaterialList.size() > 0) && ((aMaterial.mExtraData & 0x3) != 0))) {
                         break;
@@ -69,8 +69,8 @@ public class ProcessingCell implements IOreRecipeRegistrator {
                         tAllAmount = (int) (tAllAmount + tMat2.mAmount);
                     }
                     long tItemAmount = 0L;
-                    long tCapsuleCount = (long) GT_ModHandler
-                        .getCapsuleCellContainerCountMultipliedWithStackSize(aStack) * -tAllAmount;
+                    long tCapsuleCount = (long) GTModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(aStack)
+                        * -tAllAmount;
                     long tDensityMultiplier = aMaterial.getDensity() > 3628800L ? aMaterial.getDensity() / 3628800L
                         : 1L;
                     ArrayList tList = new ArrayList<>();
@@ -83,9 +83,9 @@ public class ProcessingCell implements IOreRecipeRegistrator {
                         if (tMat.mMaterial == Materials.Air) {
                             tStack = ItemList.Cell_Air.get(tMat.mAmount * tDensityMultiplier / 2L);
                         } else {
-                            tStack = GT_OreDictUnificator.get(OrePrefixes.dust, tMat.mMaterial, tMat.mAmount);
+                            tStack = GTOreDictUnificator.get(OrePrefixes.dust, tMat.mMaterial, tMat.mAmount);
                             if (tStack == null) {
-                                tStack = GT_OreDictUnificator.get(OrePrefixes.cell, tMat.mMaterial, tMat.mAmount);
+                                tStack = GTOreDictUnificator.get(OrePrefixes.cell, tMat.mMaterial, tMat.mAmount);
                             }
                         }
                         if (tItemAmount + tMat.mAmount * 3628800L > aStack.getMaxStackSize() * aMaterial.getDensity()) {
@@ -100,15 +100,15 @@ public class ProcessingCell implements IOreRecipeRegistrator {
 
                         tStack.stackSize = ((int) (tStack.stackSize * tDensityMultiplier));
                         while ((tStack.stackSize > 64)
-                            && (tCapsuleCount + GT_ModHandler.getCapsuleCellContainerCount(tStack) * 64L < 0L
+                            && (tCapsuleCount + GTModHandler.getCapsuleCellContainerCount(tStack) * 64L < 0L
                                 ? tList.size() < 5
                                 : tList.size() < 6)
-                            && (tCapsuleCount + GT_ModHandler.getCapsuleCellContainerCount(tStack) * 64L <= 64L)) {
-                            tCapsuleCount += GT_ModHandler.getCapsuleCellContainerCount(tStack) * 64L;
-                            tList.add(GT_Utility.copyAmount(64, tStack));
+                            && (tCapsuleCount + GTModHandler.getCapsuleCellContainerCount(tStack) * 64L <= 64L)) {
+                            tCapsuleCount += GTModHandler.getCapsuleCellContainerCount(tStack) * 64L;
+                            tList.add(GTUtility.copyAmount(64, tStack));
                             tStack.stackSize -= 64;
                         }
-                        int tThisCapsuleCount = GT_ModHandler
+                        int tThisCapsuleCount = GTModHandler
                             .getCapsuleCellContainerCountMultipliedWithStackSize(tStack);
                         if (tStack.stackSize > 0 && tCapsuleCount + tThisCapsuleCount <= 64L) {
                             if (tCapsuleCount + tThisCapsuleCount < 0L ? tList.size() < 5 : tList.size() < 6) {
@@ -118,7 +118,7 @@ public class ProcessingCell implements IOreRecipeRegistrator {
                         }
                     }
 
-                    tItemAmount = GT_Utility.ceilDiv(tItemAmount * tDensityMultiplier, aMaterial.getDensity());
+                    tItemAmount = GTUtility.ceilDiv(tItemAmount * tDensityMultiplier, aMaterial.getDensity());
 
                     if (tList.size() <= 0) {
                         break;
@@ -127,15 +127,15 @@ public class ProcessingCell implements IOreRecipeRegistrator {
                     if ((aMaterial.mExtraData & 0x1) != 0) {
 
                         // Electrolyzer recipe
-                        if (GT_Utility.getFluidForFilledItem(aStack, true) == null) {
+                        if (GTUtility.getFluidForFilledItem(aStack, true) == null) {
                             // dust stuffed cell e.g. Phosphate, Phosphorous Pentoxide
-                            GT_RecipeBuilder recipeBuilder = RA.stdBuilder();
+                            GTRecipeBuilder recipeBuilder = RA.stdBuilder();
                             if (tCapsuleCount > 0L) {
                                 recipeBuilder.itemInputs(
-                                    GT_Utility.copyAmount(tItemAmount, aStack),
+                                    GTUtility.copyAmount(tItemAmount, aStack),
                                     ItemList.Cell_Empty.get(tCapsuleCount));
                             } else {
-                                recipeBuilder.itemInputs(GT_Utility.copyAmount(tItemAmount, aStack));
+                                recipeBuilder.itemInputs(GTUtility.copyAmount(tItemAmount, aStack));
                             }
                             if (tCapsuleCount < 0L) {
                                 tList.add(ItemList.Cell_Empty.get(-tCapsuleCount));
@@ -147,7 +147,7 @@ public class ProcessingCell implements IOreRecipeRegistrator {
                                 .addTo(electrolyzerRecipes);
                         } else {
                             long tCellBalance = tCapsuleCount + tItemAmount - 1;
-                            GT_RecipeBuilder recipeBuilder = RA.stdBuilder();
+                            GTRecipeBuilder recipeBuilder = RA.stdBuilder();
                             if (tCellBalance > 0L) {
                                 recipeBuilder.itemInputs(aStack, ItemList.Cell_Empty.get(tCellBalance));
                             } else {
@@ -164,13 +164,13 @@ public class ProcessingCell implements IOreRecipeRegistrator {
                         }
                     }
                     if ((aMaterial.mExtraData & 0x2) != 0) {
-                        GT_RecipeBuilder recipeBuilder = RA.stdBuilder();
+                        GTRecipeBuilder recipeBuilder = RA.stdBuilder();
                         if (tCapsuleCount > 0L) {
                             recipeBuilder.itemInputs(
-                                GT_Utility.copyAmount(tItemAmount, aStack),
+                                GTUtility.copyAmount(tItemAmount, aStack),
                                 ItemList.Cell_Empty.get(tCapsuleCount));
                         } else {
-                            recipeBuilder.itemInputs(GT_Utility.copyAmount(tItemAmount, aStack));
+                            recipeBuilder.itemInputs(GTUtility.copyAmount(tItemAmount, aStack));
                         }
                         if (tCapsuleCount < 0L) {
                             tList.add(ItemList.Cell_Empty.get(-tCapsuleCount));
@@ -185,257 +185,257 @@ public class ProcessingCell implements IOreRecipeRegistrator {
             }
             case cellPlasma -> {
                 if (aMaterial == Materials.Empty) {
-                    GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+                    GTModHandler.removeRecipeByOutputDelayed(aStack);
                 } else {
-                    GT_RecipeBuilder recipeBuilder = RA.stdBuilder();
-                    recipeBuilder.itemInputs(GT_Utility.copyAmount(1, aStack));
-                    if (GT_Utility.getFluidForFilledItem(aStack, true) == null
-                        && GT_Utility.getContainerItem(aStack, true) != null) {
-                        recipeBuilder.itemOutputs(GT_Utility.getContainerItem(aStack, true));
+                    GTRecipeBuilder recipeBuilder = RA.stdBuilder();
+                    recipeBuilder.itemInputs(GTUtility.copyAmount(1, aStack));
+                    if (GTUtility.getFluidForFilledItem(aStack, true) == null
+                        && GTUtility.getContainerItem(aStack, true) != null) {
+                        recipeBuilder.itemOutputs(GTUtility.getContainerItem(aStack, true));
                     }
                     // Switch case to set manual values for specific plasmas and escape the formula based on mass
                     // when it doesn't make sense for powergen balance.
                     switch (aMaterial.mName) {
                         case "Aluminium" -> recipeBuilder.metadata(FUEL_VALUE, 159_744)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Americium" -> recipeBuilder.metadata(FUEL_VALUE, 501_760)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Antimony" -> recipeBuilder.metadata(FUEL_VALUE, 309_760)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Argon" -> recipeBuilder.metadata(FUEL_VALUE, 188_416)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Arsenic" -> recipeBuilder.metadata(FUEL_VALUE, 230_400)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Barium" -> recipeBuilder.metadata(FUEL_VALUE, 342_302)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Beryllium" -> recipeBuilder.metadata(FUEL_VALUE, 110_592)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Bismuth" -> recipeBuilder.metadata(FUEL_VALUE, 425_984)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Boron" -> recipeBuilder.metadata(FUEL_VALUE, 112_640)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Cadmium" -> recipeBuilder.metadata(FUEL_VALUE, 293_601)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Caesium" -> recipeBuilder.metadata(FUEL_VALUE, 332_513)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Calcium" -> recipeBuilder.metadata(FUEL_VALUE, 188_416)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Cerium" -> recipeBuilder.metadata(FUEL_VALUE, 346_931)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Chlorine" -> recipeBuilder.metadata(FUEL_VALUE, 172_032)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Chrome" -> recipeBuilder.metadata(FUEL_VALUE, 202_342)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Cobalt" -> recipeBuilder.metadata(FUEL_VALUE, 217_497)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Copper" -> recipeBuilder.metadata(FUEL_VALUE, 219_340)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Deuterium" -> recipeBuilder.metadata(FUEL_VALUE, 40_960)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Erbium" -> recipeBuilder.metadata(FUEL_VALUE, 376_217)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Europium" -> recipeBuilder.metadata(FUEL_VALUE, 355_635)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Fluorine" -> recipeBuilder.metadata(FUEL_VALUE, 147_456)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Force" -> recipeBuilder.metadata(FUEL_VALUE, 180_000)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Gadolinium" -> recipeBuilder.metadata(FUEL_VALUE, 366_551)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Gallium" -> recipeBuilder.metadata(FUEL_VALUE, 229_376)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Gold" -> recipeBuilder.metadata(FUEL_VALUE, 401_408)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Helium_3" -> recipeBuilder.metadata(FUEL_VALUE, 61_440)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Helium" -> recipeBuilder.metadata(FUEL_VALUE, 81_920)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Holmium" -> recipeBuilder.metadata(FUEL_VALUE, 376_176)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Hydrogen" -> recipeBuilder.metadata(FUEL_VALUE, 20_480)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Indium" -> recipeBuilder.metadata(FUEL_VALUE, 296_509)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Iridium" -> recipeBuilder.metadata(FUEL_VALUE, 397_148)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Iron" -> recipeBuilder.metadata(FUEL_VALUE, 206_438)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Lanthanum" -> recipeBuilder.metadata(FUEL_VALUE, 344_801)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Lead" -> recipeBuilder.metadata(FUEL_VALUE, 423_936)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Lithium" -> recipeBuilder.metadata(FUEL_VALUE, 100_352)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Lutetium" -> recipeBuilder.metadata(FUEL_VALUE, 381_296)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Magnesium" -> recipeBuilder.metadata(FUEL_VALUE, 152_371)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Manganese" -> recipeBuilder.metadata(FUEL_VALUE, 202_752)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Mercury" -> recipeBuilder.metadata(FUEL_VALUE, 409_600)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Molybdenum" -> recipeBuilder.metadata(FUEL_VALUE, 272_384)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Neodymium" -> recipeBuilder.metadata(FUEL_VALUE, 347_996)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Nickel" -> recipeBuilder.metadata(FUEL_VALUE, 213_811)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Niobium" -> recipeBuilder.metadata(FUEL_VALUE, 269_516)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Nitrogen" -> recipeBuilder.metadata(FUEL_VALUE, 129_024)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Osmium" -> recipeBuilder.metadata(FUEL_VALUE, 393_659)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Oxygen" -> recipeBuilder.metadata(FUEL_VALUE, 131_072)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Palladium" -> recipeBuilder.metadata(FUEL_VALUE, 282_214)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Phosphor" -> recipeBuilder.metadata(FUEL_VALUE, 165_888)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Platinum" -> recipeBuilder.metadata(FUEL_VALUE, 399_360)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Plutonium241" -> recipeBuilder.metadata(FUEL_VALUE, 497_664)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Plutonium" -> recipeBuilder.metadata(FUEL_VALUE, 503_808)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Potassium" -> recipeBuilder.metadata(FUEL_VALUE, 183_705)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Praseodymium" -> recipeBuilder.metadata(FUEL_VALUE, 346_931)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Promethium" -> recipeBuilder.metadata(FUEL_VALUE, 347_996)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Radon" -> recipeBuilder.metadata(FUEL_VALUE, 450_560)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Rubidium" -> recipeBuilder.metadata(FUEL_VALUE, 243_712)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Samarium" -> recipeBuilder.metadata(FUEL_VALUE, 353_280)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Scandium" -> recipeBuilder.metadata(FUEL_VALUE, 193_536)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Silicon" -> recipeBuilder.metadata(FUEL_VALUE, 160_563)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Silver" -> recipeBuilder.metadata(FUEL_VALUE, 282_685)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Sodium" -> recipeBuilder.metadata(FUEL_VALUE, 148_684)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Strontium" -> recipeBuilder.metadata(FUEL_VALUE, 249_446)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Sulfur" -> recipeBuilder.metadata(FUEL_VALUE, 170_393)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Tantalum" -> recipeBuilder.metadata(FUEL_VALUE, 384_000)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Terbium" -> recipeBuilder.metadata(FUEL_VALUE, 368_885)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Thorium" -> recipeBuilder.metadata(FUEL_VALUE, 471_040)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Thulium" -> recipeBuilder.metadata(FUEL_VALUE, 378_470)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Tin" -> recipeBuilder.metadata(FUEL_VALUE, 150_000)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Titanium" -> recipeBuilder.metadata(FUEL_VALUE, 196_608)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Tritium" -> recipeBuilder.metadata(FUEL_VALUE, 61_440)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Tungsten" -> recipeBuilder.metadata(FUEL_VALUE, 384_778)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Uranium235" -> recipeBuilder.metadata(FUEL_VALUE, 481_280)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Uranium" -> recipeBuilder.metadata(FUEL_VALUE, 487_424)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Vanadium" -> recipeBuilder.metadata(FUEL_VALUE, 198_451)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Ytterbium" -> recipeBuilder.metadata(FUEL_VALUE, 379_695)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Yttrium" -> recipeBuilder.metadata(FUEL_VALUE, 255_180)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         case "Zinc" -> recipeBuilder.metadata(FUEL_VALUE, 226_304)
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                         default -> recipeBuilder
                             .metadata(FUEL_VALUE, (int) Math.max(1024L, 1024L * aMaterial.getMass()))
                             .metadata(FUEL_TYPE, 4)
-                            .addTo(GT_RecipeConstants.Fuel);
+                            .addTo(GTRecipeConstants.Fuel);
                     }
-                    if (GT_OreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L) != null) {
+                    if (GTOreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L) != null) {
                         RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L))
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L))
                             .duration(((int) Math.max(aMaterial.getMass() * 2L, 1L)) * TICKS)
                             .eut(TierEU.RECIPE_MV)
                             .addTo(vacuumFreezerRecipes);
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCircuit.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCircuit.java
index c2a68c5bc2..bca59a3543 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCircuit.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCircuit.java
@@ -6,8 +6,8 @@ import net.minecraft.item.ItemStack;
 
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class ProcessingCircuit implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -18,13 +18,13 @@ public class ProcessingCircuit implements gregtech.api.interfaces.IOreRecipeRegi
     @Override
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
-        if (gregtech.api.util.GT_OreDictUnificator.isBlacklisted(aStack) && aModName.equals(GregTech.ID)) return;
+        if (GTOreDictUnificator.isBlacklisted(aStack) && aModName.equals(GregTech.ID)) return;
         switch (aMaterial.mName) {
             case "Good", "Data", "Elite", "Master", "Ultimate", "Superconductor", "Infinite", "Bio" -> {
-                if (!GT_OreDictUnificator.isBlacklisted(aStack) && !aModName.equals(GregTech.ID))
-                    GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+                if (!GTOreDictUnificator.isBlacklisted(aStack) && !aModName.equals(GregTech.ID))
+                    GTModHandler.removeRecipeByOutputDelayed(aStack);
             }
-            case "Primitive", "Basic", "Advanced" -> GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+            case "Primitive", "Basic", "Advanced" -> GTModHandler.removeRecipeByOutputDelayed(aStack);
         }
     }
 }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCompressed.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCompressed.java
index 4ef818df5b..00f901b6be 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCompressed.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCompressed.java
@@ -2,12 +2,12 @@ package gregtech.loaders.oreprocessing;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.GregTech_API;
+import gregtech.api.GregTechAPI;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.interfaces.IOreRecipeRegistrator;
 import gregtech.api.render.TextureFactory;
-import gregtech.api.util.GT_ModHandler;
+import gregtech.api.util.GTModHandler;
 
 public class ProcessingCompressed implements IOreRecipeRegistrator {
 
@@ -18,8 +18,8 @@ public class ProcessingCompressed implements IOreRecipeRegistrator {
     @Override
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
-        GT_ModHandler.removeRecipeByOutputDelayed(aStack);
-        GregTech_API
+        GTModHandler.removeRecipeByOutputDelayed(aStack);
+        GregTechAPI
             .registerCover(aStack, TextureFactory.of(aMaterial.mIconSet.mTextures[72], aMaterial.mRGBa, false), null);
     }
 }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java
index 200ce743c9..861694e35a 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrafting.java
@@ -5,22 +5,22 @@ import static gregtech.api.enums.Mods.BuildCraftSilicon;
 import static gregtech.api.enums.Mods.NewHorizonsCoreMod;
 import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
 import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeConstants.WaferEngravingRecipes;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeConstants.WaferEngravingRecipes;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 @SuppressWarnings("RedundantLabeledSwitchRuleCodeBlock")
 public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeRegistrator {
@@ -34,8 +34,8 @@ public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeReg
         ItemStack aStack) {
         switch (aOreDictName) {
             case "craftingQuartz" -> {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(new ItemStack(Blocks.redstone_torch, 3, 32767), GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(new ItemStack(Blocks.redstone_torch, 3, 32767), GTUtility.copyAmount(1, aStack))
                     .itemOutputs(new ItemStack(net.minecraft.init.Items.comparator, 1, 0))
                     .fluidInputs(Materials.Concrete.getMolten(144L))
                     .duration(2 * SECONDS)
@@ -44,58 +44,58 @@ public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeReg
             }
             case "craftingLensBlue" -> {
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L),
-                        GT_Utility.copyAmount(0, aStack))
-                    .itemOutputs(GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 13))
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L),
+                        GTUtility.copyAmount(0, aStack))
+                    .itemOutputs(GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 13))
                     .duration(1 * MINUTES + 40 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L),
-                        GT_Utility.copyAmount(0, aStack))
-                    .itemOutputs(GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 13))
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L),
+                        GTUtility.copyAmount(0, aStack))
+                    .itemOutputs(GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 13))
                     .duration(1 * MINUTES + 40 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.IC2_LapotronCrystal.getWildcard(1L), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.IC2_LapotronCrystal.getWildcard(1L), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Parts_Crystal_Chip_Master.get(3L))
                     .requiresCleanRoom()
                     .duration(45 * SECONDS)
                     .eut(TierEU.RECIPE_HV)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Chip_CrystalCPU.get(1L), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Chip_CrystalCPU.get(1L), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Chip_CrystalSoC.get(1))
                     .requiresCleanRoom()
                     .duration(30 * SECONDS)
                     .eut(40000)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_PIC.get(1))
                     .requiresCleanRoom()
                     .duration(60 * SECONDS)
                     .eut(TierEU.RECIPE_HV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_PIC.get(4))
                     .requiresCleanRoom()
                     .duration(40 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_QPIC.get(1))
                     .requiresCleanRoom()
                     .duration(2 * MINUTES)
@@ -105,57 +105,57 @@ public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeReg
             }
             case "craftingLensYellow" -> {
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L),
-                        GT_Utility.copyAmount(0, aStack))
-                    .itemOutputs(GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 14))
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L),
+                        GTUtility.copyAmount(0, aStack))
+                    .itemOutputs(GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 14))
                     .duration(1 * MINUTES + 40 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L),
-                        GT_Utility.copyAmount(0, aStack))
-                    .itemOutputs(GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 14))
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L),
+                        GTUtility.copyAmount(0, aStack))
+                    .itemOutputs(GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 14))
                     .duration(1 * MINUTES + 40 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_LPIC.get(1))
                     .duration(40 * SECONDS)
                     .eut(TierEU.RECIPE_MV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_LPIC.get(4))
                     .requiresCleanRoom()
                     .duration(30 * SECONDS)
                     .eut(TierEU.RECIPE_HV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_SoC.get(1))
                     .requiresCleanRoom()
                     .duration(45 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_SoC.get(4))
                     .requiresCleanRoom()
                     .duration(30 * SECONDS)
                     .eut(TierEU.RECIPE_IV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_SoC.get(8))
                     .requiresCleanRoom()
                     .duration(15 * SECONDS)
@@ -164,29 +164,29 @@ public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeReg
             }
             case "craftingLensOrange" -> {
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_Simple_SoC.get(1))
                     .duration(15 * SECONDS)
                     .eut(64)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_Simple_SoC.get(4))
                     .duration(15 * SECONDS)
                     .eut(256)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_Simple_SoC.get(16))
                     .duration(15 * SECONDS)
                     .eut(1024)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_Simple_SoC.get(64))
                     .duration(15 * SECONDS)
                     .eut(4096)
@@ -195,57 +195,57 @@ public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeReg
             }
             case "craftingLensCyan" -> {
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L),
-                        GT_Utility.copyAmount(0, aStack))
-                    .itemOutputs(GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 15))
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L),
+                        GTUtility.copyAmount(0, aStack))
+                    .itemOutputs(GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 15))
                     .duration(1 * MINUTES + 40 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L),
-                        GT_Utility.copyAmount(0, aStack))
-                    .itemOutputs(GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 15))
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L),
+                        GTUtility.copyAmount(0, aStack))
+                    .itemOutputs(GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 15))
                     .duration(1 * MINUTES + 40 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_Ram.get(1))
                     .duration(60 * SECONDS)
                     .eut(TierEU.RECIPE_MV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_Ram.get(4))
                     .requiresCleanRoom()
                     .duration(45 * SECONDS)
                     .eut(TierEU.RECIPE_HV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_Ram.get(8))
                     .requiresCleanRoom()
                     .duration(30 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_Ram.get(16))
                     .requiresCleanRoom()
                     .duration(15 * SECONDS)
                     .eut(TierEU.RECIPE_IV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_Ram.get(32))
                     .requiresCleanRoom()
                     .duration(7 * SECONDS + 10 * TICKS)
@@ -255,57 +255,57 @@ public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeReg
             }
             case "craftingLensRed" -> {
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Redstone, 1L),
-                        GT_Utility.copyAmount(0, aStack))
-                    .itemOutputs(GT_ModHandler.getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 0))
+                        GTOreDictUnificator.get(OrePrefixes.plate, Materials.Redstone, 1L),
+                        GTUtility.copyAmount(0, aStack))
+                    .itemOutputs(GTModHandler.getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 0))
                     .duration(2 * SECONDS + 10 * TICKS)
                     .eut(TierEU.RECIPE_MV)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.foil, Materials.RedAlloy, 1L),
-                        GT_Utility.copyAmount(0, aStack))
-                    .itemOutputs(GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EtchedLowVoltageWiring", 1L, 0))
+                        GTOreDictUnificator.get(OrePrefixes.foil, Materials.RedAlloy, 1L),
+                        GTUtility.copyAmount(0, aStack))
+                    .itemOutputs(GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EtchedLowVoltageWiring", 1L, 0))
                     .duration(10 * SECONDS)
                     .eut(16)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_ILC.get(1))
                     .duration(60 * SECONDS)
                     .eut(TierEU.RECIPE_MV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_ILC.get(4))
                     .requiresCleanRoom()
                     .duration(45 * SECONDS)
                     .eut(TierEU.RECIPE_HV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_ILC.get(8))
                     .requiresCleanRoom()
                     .duration(30 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_NPIC.get(1))
                     .requiresCleanRoom()
                     .duration(1 * MINUTES + 30 * SECONDS)
                     .eut(TierEU.RECIPE_LuV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_NPIC.get(4))
                     .requiresCleanRoom()
                     .duration(1 * MINUTES + 15 * SECONDS)
@@ -315,54 +315,54 @@ public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeReg
             }
             case "craftingLensGreen" -> {
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Parts_Crystal_Chip_Elite.get(1L), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Parts_Crystal_Chip_Elite.get(1L), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Chip_CrystalCPU.get(1))
                     .requiresCleanRoom()
                     .duration(30 * SECONDS)
                     .eut(10000)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Chip_CrystalSoC.get(1L), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Chip_CrystalSoC.get(1L), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Chip_CrystalSoC2.get(1))
                     .requiresCleanRoom()
                     .duration(60 * SECONDS)
                     .eut(80000)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_ULPIC.get(2))
                     .duration(30 * SECONDS)
                     .eut(30)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_ULPIC.get(8))
                     .duration(30 * SECONDS)
                     .eut(TierEU.RECIPE_MV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_SoC2.get(1))
                     .requiresCleanRoom()
                     .duration(1 * MINUTES + 30 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_SoC2.get(2))
                     .requiresCleanRoom()
                     .duration(1 * MINUTES + 15 * SECONDS)
                     .eut(TierEU.RECIPE_IV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_SoC2.get(4))
                     .requiresCleanRoom()
                     .duration(60 * SECONDS)
@@ -371,88 +371,88 @@ public class ProcessingCrafting implements gregtech.api.interfaces.IOreRecipeReg
             }
             case "craftingLensWhite" -> {
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L),
-                        GT_Utility.copyAmount(0, aStack))
-                    .itemOutputs(GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 19))
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L),
+                        GTUtility.copyAmount(0, aStack))
+                    .itemOutputs(GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 19))
                     .duration(1 * MINUTES + 40 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L),
-                        GT_Utility.copyAmount(0, aStack))
-                    .itemOutputs(GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 19))
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.WroughtIron, 1L),
+                        GTUtility.copyAmount(0, aStack))
+                    .itemOutputs(GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 19))
                     .duration(1 * MINUTES + 40 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(new ItemStack(Blocks.sandstone, 1, 2), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(new ItemStack(Blocks.sandstone, 1, 2), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(new ItemStack(Blocks.sandstone, 1, 1))
                     .duration(2 * SECONDS + 10 * TICKS)
                     .eut(16)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(new ItemStack(Blocks.stone, 1, 0), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(new ItemStack(Blocks.stone, 1, 0), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(new ItemStack(Blocks.stonebrick, 1, 3))
                     .duration(2 * SECONDS + 10 * TICKS)
                     .eut(16)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(new ItemStack(Blocks.quartz_block, 1, 0), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(new ItemStack(Blocks.quartz_block, 1, 0), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(new ItemStack(Blocks.quartz_block, 1, 1))
                     .duration(2 * SECONDS + 10 * TICKS)
                     .eut(16)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_ModHandler.getModItem(AppliedEnergistics2.ID, "tile.BlockQuartz", 1L),
-                        GT_Utility.copyAmount(0, aStack))
-                    .itemOutputs(GT_ModHandler.getModItem(AppliedEnergistics2.ID, "tile.BlockQuartzChiseled", 1L))
+                        GTModHandler.getModItem(AppliedEnergistics2.ID, "tile.BlockQuartz", 1L),
+                        GTUtility.copyAmount(0, aStack))
+                    .itemOutputs(GTModHandler.getModItem(AppliedEnergistics2.ID, "tile.BlockQuartzChiseled", 1L))
                     .duration(2 * SECONDS + 10 * TICKS)
                     .eut(16)
                     .addTo(laserEngraverRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_CPU.get(1))
                     .requiresCleanRoom()
                     .duration(60 * SECONDS)
                     .eut(TierEU.RECIPE_MV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer2.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_CPU.get(4))
                     .requiresCleanRoom()
                     .duration(45 * SECONDS)
                     .eut(TierEU.RECIPE_HV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer3.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_CPU.get(8))
                     .requiresCleanRoom()
                     .duration(30 * SECONDS)
                     .eut(TierEU.RECIPE_EV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer4.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_CPU.get(16))
                     .requiresCleanRoom()
                     .duration(15 * SECONDS)
                     .eut(TierEU.RECIPE_IV)
                     .addTo(WaferEngravingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GT_Utility.copyAmount(0, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(ItemList.Circuit_Silicon_Wafer5.get(1), GTUtility.copyAmount(0, aStack))
                     .itemOutputs(ItemList.Circuit_Wafer_CPU.get(32))
                     .requiresCleanRoom()
                     .duration(7 * SECONDS + 10 * TICKS)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrop.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrop.java
index 92b5ae9cda..b4db15db42 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrop.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrop.java
@@ -5,19 +5,20 @@ import static gregtech.api.recipe.RecipeMaps.brewingRecipes;
 import static gregtech.api.recipe.RecipeMaps.compressorRecipes;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
 import static gregtech.api.recipe.RecipeMaps.slicerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraftforge.fluids.Fluid;
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -29,8 +30,8 @@ public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistr
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         net.minecraft.item.ItemStack aStack) {
         // Compressor recipes
-        GT_Values.RA.stdBuilder()
-            .itemInputs(gregtech.api.util.GT_Utility.copyAmount(8, aStack))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(8, aStack))
             .itemOutputs(ItemList.IC2_PlantballCompressed.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
@@ -39,7 +40,7 @@ public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistr
         Fluid[] waterArray;
 
         if (IndustrialCraft2.isModLoaded()) {
-            waterArray = new Fluid[] { FluidRegistry.WATER, GT_ModHandler.getDistilledWater(1L)
+            waterArray = new Fluid[] { FluidRegistry.WATER, GTModHandler.getDistilledWater(1L)
                 .getFluid() };
         } else {
             waterArray = new Fluid[] { FluidRegistry.WATER };
@@ -48,7 +49,7 @@ public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistr
         switch (aOreDictName) {
             case "cropTea" -> {
                 for (Fluid tFluid : waterArray) {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(aStack)
                         .fluidInputs(new FluidStack(tFluid, 750))
                         .fluidOutputs(new FluidStack(FluidRegistry.getFluid("potion.tea"), 750))
@@ -59,7 +60,7 @@ public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistr
             }
             case "cropGrape" -> {
                 for (Fluid tFluid : waterArray) {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(aStack)
                         .fluidInputs(new FluidStack(tFluid, 750))
                         .fluidOutputs(new FluidStack(FluidRegistry.getFluid("potion.grapejuice"), 750))
@@ -68,27 +69,27 @@ public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistr
                         .addTo(brewingRecipes);
                 }
             }
-            case "cropChilipepper" -> GT_Values.RA.stdBuilder()
+            case "cropChilipepper" -> GTValues.RA.stdBuilder()
                 .itemInputs(aStack)
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L))
                 .duration(20 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
-            case "cropCoffee" -> GT_Values.RA.stdBuilder()
+            case "cropCoffee" -> GTValues.RA.stdBuilder()
                 .itemInputs(aStack)
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coffee, 1L))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coffee, 1L))
                 .duration(20 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
             case "cropPotato" -> {
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(aStack, ItemList.Shape_Slicer_Flat.get(0))
                     .itemOutputs(ItemList.Food_Raw_PotatoChips.get(1L))
                     .duration(3 * SECONDS + 4 * TICKS)
                     .eut(4)
                     .addTo(slicerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(aStack, ItemList.Shape_Slicer_Stripes.get(0L))
                     .itemOutputs(ItemList.Food_Raw_Fries.get(1L))
                     .duration(3 * SECONDS + 4 * TICKS)
@@ -96,7 +97,7 @@ public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistr
                     .addTo(slicerRecipes);
 
                 for (Fluid tFluid : waterArray) {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(aStack)
                         .fluidInputs(new FluidStack(tFluid, 750))
                         .fluidOutputs(new FluidStack(FluidRegistry.getFluid("potion.potatojuice"), 750))
@@ -106,7 +107,7 @@ public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistr
                 }
             }
             case "cropLemon" -> {
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(aStack, ItemList.Shape_Slicer_Flat.get(0))
                     .itemOutputs(ItemList.Food_Sliced_Lemon.get(4L))
                     .duration(3 * SECONDS + 4 * TICKS)
@@ -114,7 +115,7 @@ public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistr
                     .addTo(slicerRecipes);
 
                 for (Fluid tFluid : waterArray) {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(aStack)
                         .fluidInputs(new FluidStack(tFluid, 750))
                         .fluidOutputs(new FluidStack(FluidRegistry.getFluid("potion.lemonjuice"), 750))
@@ -123,7 +124,7 @@ public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistr
                         .addTo(brewingRecipes);
                 }
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(aStack)
                     .fluidInputs(new FluidStack(FluidRegistry.getFluid("potion.vodka"), 750))
                     .fluidOutputs(new FluidStack(FluidRegistry.getFluid("potion.leninade"), 750))
@@ -131,19 +132,19 @@ public class ProcessingCrop implements gregtech.api.interfaces.IOreRecipeRegistr
                     .eut(4)
                     .addTo(brewingRecipes);
             }
-            case "cropTomato" -> GT_Values.RA.stdBuilder()
+            case "cropTomato" -> GTValues.RA.stdBuilder()
                 .itemInputs(aStack, ItemList.Shape_Slicer_Flat.get(0))
                 .itemOutputs(ItemList.Food_Sliced_Tomato.get(4L))
                 .duration(3 * SECONDS + 4 * TICKS)
                 .eut(4)
                 .addTo(slicerRecipes);
-            case "cropCucumber" -> GT_Values.RA.stdBuilder()
+            case "cropCucumber" -> GTValues.RA.stdBuilder()
                 .itemInputs(aStack, ItemList.Shape_Slicer_Flat.get(0))
                 .itemOutputs(ItemList.Food_Sliced_Cucumber.get(4L))
                 .duration(3 * SECONDS + 4 * TICKS)
                 .eut(4)
                 .addTo(slicerRecipes);
-            case "cropOnion" -> GT_Values.RA.stdBuilder()
+            case "cropOnion" -> GTValues.RA.stdBuilder()
                 .itemInputs(aStack, ItemList.Shape_Slicer_Flat.get(0))
                 .itemOutputs(ItemList.Food_Sliced_Onion.get(4L))
                 .duration(3 * SECONDS + 4 * TICKS)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedOre.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedOre.java
index a730a1849b..ed80d04e99 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedOre.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrushedOre.java
@@ -4,16 +4,16 @@ import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
 import static gregtech.api.recipe.RecipeMaps.sifterRecipes;
 import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingCrushedOre implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -27,20 +27,20 @@ public class ProcessingCrushedOre implements gregtech.api.interfaces.IOreRecipeR
         ItemStack aStack) {
         switch (aPrefix) {
             case crushedCentrifuged -> {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L))
                     .duration(10 * TICKS)
                     .eut(16)
                     .addTo(hammerRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L),
-                        GT_OreDictUnificator.get(
+                        GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L),
+                        GTOreDictUnificator.get(
                             OrePrefixes.dust,
-                            GT_Utility.selectItemInList(2, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
+                            GTUtility.selectItemInList(2, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
                             1L))
                     .outputChances(10000, 1000)
                     .duration(20 * SECONDS)
@@ -48,52 +48,52 @@ public class ProcessingCrushedOre implements gregtech.api.interfaces.IOreRecipeR
                     .addTo(maceratorRecipes);
             }
             case crushedPurified -> {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(
+                        GTOreDictUnificator.get(
                             OrePrefixes.crushedCentrifuged,
                             aMaterial.mMacerateInto,
-                            GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L),
                             1L),
-                        GT_OreDictUnificator.get(
+                        GTOreDictUnificator.get(
                             OrePrefixes.dust,
-                            GT_Utility.selectItemInList(1, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
+                            GTUtility.selectItemInList(1, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
                             1L))
                     .outputChances(10000, 1111)
                     .duration(25 * SECONDS)
                     .eut(48)
                     .addTo(thermalCentrifugeRecipes);
 
-                ItemStack tGem = GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L);
+                ItemStack tGem = GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L);
                 if (tGem == null) {
                     break;
                 }
 
                 switch (aMaterial.mName) {
-                    case "Tanzanite", "Sapphire", "Olivine", "GreenSapphire", "Opal", "Amethyst", "Emerald", "Ruby", "Amber", "Diamond", "FoolsRuby", "BlueTopaz", "GarnetRed", "Topaz", "Jasper", "GarnetYellow" -> GT_Values.RA
+                    case "Tanzanite", "Sapphire", "Olivine", "GreenSapphire", "Opal", "Amethyst", "Emerald", "Ruby", "Amber", "Diamond", "FoolsRuby", "BlueTopaz", "GarnetRed", "Topaz", "Jasper", "GarnetYellow" -> GTValues.RA
                         .stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .itemOutputs(
-                            GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, tGem, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, tGem, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, tGem, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, tGem, 1L),
                             tGem,
-                            GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, tGem, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, tGem, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, tGem, 1L))
+                            GTOreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, tGem, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, tGem, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, tGem, 1L))
                         .outputChances(300, 1200, 4500, 1400, 2800, 3500)
                         .duration(40 * SECONDS)
                         .eut(16)
                         .addTo(sifterRecipes);
-                    default -> GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    default -> GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .itemOutputs(
-                            GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, tGem, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, tGem, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, tGem, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, tGem, 1L),
                             tGem,
-                            GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, tGem, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, tGem, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, tGem, 1L))
+                            GTOreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, tGem, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, tGem, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, tGem, 1L))
                         .outputChances(100, 400, 1500, 2000, 4000, 5000)
                         .duration(40 * SECONDS)
                         .eut(16)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrystallized.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrystallized.java
index ec8fd12a74..435573420d 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrystallized.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingCrystallized.java
@@ -2,16 +2,16 @@ package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingCrystallized implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -27,20 +27,20 @@ public class ProcessingCrystallized implements gregtech.api.interfaces.IOreRecip
             return;
         }
 
-        if (GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1) == null) {
+        if (GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1) == null) {
             return;
         }
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L))
             .duration(20 * SECONDS)
             .eut(2)
             .addTo(maceratorRecipes);
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDirty.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDirty.java
index ed152fc47f..a09cc2ca44 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDirty.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDirty.java
@@ -1,22 +1,22 @@
 package gregtech.loaders.oreprocessing;
 
-import static gregtech.api.enums.GT_Values.RA;
+import static gregtech.api.enums.GTValues.RA;
 import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes;
 import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
 import static gregtech.api.recipe.RecipeMaps.oreWasherRecipes;
 import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingDirty implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -30,24 +30,24 @@ public class ProcessingDirty implements gregtech.api.interfaces.IOreRecipeRegist
     @Override
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         net.minecraft.item.ItemStack aStack) {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial.mMacerateInto, 1L))
             .duration(10)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
             .itemOutputs(
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     OrePrefixes.dustImpure,
                     aMaterial.mMacerateInto,
-                    GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L),
                     1L),
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     OrePrefixes.dust,
-                    GT_Utility.selectItemInList(0, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
+                    GTUtility.selectItemInList(0, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
                     1L))
             .outputChances(10000, 1000)
             .duration(20 * SECONDS)
@@ -55,52 +55,52 @@ public class ProcessingDirty implements gregtech.api.interfaces.IOreRecipeRegist
             .addTo(maceratorRecipes);
 
         RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
+            .itemInputs(GTUtility.copyAmount(1, aStack))
             .itemOutputs(
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     aPrefix == OrePrefixes.crushed ? OrePrefixes.crushedPurified : OrePrefixes.dustPure,
                     aMaterial,
                     1L),
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     OrePrefixes.dust,
-                    GT_Utility.selectItemInList(0, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
+                    GTUtility.selectItemInList(0, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
                     1L),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
             .outputChances(100_00, 11_11, 100_00)
-            .fluidInputs(GT_ModHandler.getWater(1000))
+            .fluidInputs(GTModHandler.getWater(1000))
             .duration(25 * SECONDS)
             .eut(16)
             .addTo(oreWasherRecipes);
 
         RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
+            .itemInputs(GTUtility.copyAmount(1, aStack))
             .itemOutputs(
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     aPrefix == OrePrefixes.crushed ? OrePrefixes.crushedPurified : OrePrefixes.dustPure,
                     aMaterial,
                     1L),
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     OrePrefixes.dust,
-                    GT_Utility.selectItemInList(0, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
+                    GTUtility.selectItemInList(0, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
                     1L),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
             .outputChances(100_00, 11_11, 100_00)
-            .fluidInputs(GT_ModHandler.getDistilledWater(200))
+            .fluidInputs(GTModHandler.getDistilledWater(200))
             .duration(15 * SECONDS)
             .eut(16)
             .addTo(oreWasherRecipes);
 
         OrePrefixes prefix = aPrefix == OrePrefixes.crushed ? OrePrefixes.crushedCentrifuged : OrePrefixes.dust;
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
             .itemOutputs(
-                GT_OreDictUnificator.get(prefix, aMaterial, 1L),
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(prefix, aMaterial, 1L),
+                GTOreDictUnificator.get(
                     OrePrefixes.dust,
-                    GT_Utility.selectItemInList(1, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
+                    GTUtility.selectItemInList(1, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
                     1L),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
             .outputChances(10000, 1111, 10000)
             .duration(25 * SECONDS)
             .eut(48)
@@ -118,12 +118,12 @@ public class ProcessingDirty implements gregtech.api.interfaces.IOreRecipeRegist
             : OrePrefixes.dustPure;
 
         if (byproduct.contains(SubTag.WASHING_MERCURY)) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, stack))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, stack))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(chemicalBathPrefix, material, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, byproduct.mMacerateInto, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
+                    GTOreDictUnificator.get(chemicalBathPrefix, material, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, byproduct.mMacerateInto, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
                 .outputChances(10000, 7000, 4000)
                 .fluidInputs(Materials.Mercury.getFluid(1000L))
                 .duration(40 * SECONDS)
@@ -131,12 +131,12 @@ public class ProcessingDirty implements gregtech.api.interfaces.IOreRecipeRegist
                 .addTo(chemicalBathRecipes);
         }
         if (byproduct.contains(SubTag.WASHING_MERCURY_99_PERCENT)) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, stack))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, stack))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(chemicalBathPrefix, material, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, byproduct.mMacerateInto, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
+                    GTOreDictUnificator.get(chemicalBathPrefix, material, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, byproduct.mMacerateInto, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
                 .outputChances(10000, 9900, 4000)
                 .fluidInputs(Materials.Mercury.getFluid(1000L))
                 .duration(40 * SECONDS)
@@ -144,12 +144,12 @@ public class ProcessingDirty implements gregtech.api.interfaces.IOreRecipeRegist
                 .addTo(chemicalBathRecipes);
         }
         if (byproduct.contains(SubTag.WASHING_SODIUMPERSULFATE)) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, stack))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, stack))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(chemicalBathPrefix, material, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, byproduct.mMacerateInto, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
+                    GTOreDictUnificator.get(chemicalBathPrefix, material, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, byproduct.mMacerateInto, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L))
                 .outputChances(10000, 7000, 4000)
                 .fluidInputs(Materials.SodiumPersulfate.getFluid(100L))
                 .duration(40 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java
index c8a3af1130..3398fda98d 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDust.java
@@ -9,12 +9,12 @@ import static gregtech.api.recipe.RecipeMaps.electroMagneticSeparatorRecipes;
 import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes;
 import static gregtech.api.recipe.RecipeMaps.implosionRecipes;
 import static gregtech.api.recipe.RecipeMaps.packagerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeConstants.COIL_HEAT;
+import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE;
+import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE;
 
 import java.util.ArrayList;
 
@@ -22,7 +22,7 @@ import net.minecraft.init.Blocks;
 import net.minecraft.item.ItemStack;
 import net.minecraftforge.fluids.FluidStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsUEVplus;
@@ -30,12 +30,12 @@ import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
 import gregtech.api.objects.MaterialStack;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeBuilder;
-import gregtech.api.util.GT_RecipeConstants;
-import gregtech.api.util.GT_RecipeRegistrator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeBuilder;
+import gregtech.api.util.GTRecipeConstants;
+import gregtech.api.util.GTRecipeRegistrator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -54,26 +54,26 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
         switch (aPrefix) {
             case dust -> {
                 if (aMaterial.mFuelPower > 0) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .metadata(FUEL_VALUE, aMaterial.mFuelPower)
                         .metadata(FUEL_TYPE, aMaterial.mFuelType)
-                        .addTo(GT_RecipeConstants.Fuel);
+                        .addTo(GTRecipeConstants.Fuel);
                 }
-                if ((GT_Utility.getFluidForFilledItem(GT_OreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L), true)
-                    == null) && (GT_OreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L) != null)) {
-                    GT_Values.RA.stdBuilder()
+                if ((GTUtility.getFluidForFilledItem(GTOreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L), true)
+                    == null) && (GTOreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L) != null)) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(aStack, ItemList.Cell_Empty.get(1L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, aMaterial, 1L))
                         .duration(5 * SECONDS)
                         .eut(1)
                         .addTo(cannerRecipes);
                 }
                 if (!aMaterial.mBlastFurnaceRequired) {
-                    GT_RecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
+                    GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
                     if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) {
-                        GT_RecipeRegistrator.registerReverseArcSmelting(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTRecipeRegistrator.registerReverseArcSmelting(
+                            GTUtility.copyAmount(1, aStack),
                             aMaterial,
                             aPrefix.mMaterialAmount,
                             null,
@@ -82,20 +82,20 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                     }
                 }
                 ItemStack tDustStack;
-                if ((null != (tDustStack = GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L)))
+                if ((null != (tDustStack = GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L)))
                     && (!aMaterial.contains(SubTag.NO_SMELTING))) {
                     if (aMaterial.mBlastFurnaceRequired) {
-                        GT_ModHandler.removeFurnaceSmelting(aStack);
+                        GTModHandler.removeFurnaceSmelting(aStack);
                         if (aMaterial.mAutoGenerateBlastFurnaceRecipes) {
-                            GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder();
+                            GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder();
                             recipeBuilder
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1));
+                                .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1));
                             if (aMaterial.mBlastFurnaceTemp > 1750) {
                                 recipeBuilder.itemOutputs(
-                                    GT_OreDictUnificator
+                                    GTOreDictUnificator
                                         .get(OrePrefixes.ingotHot, aMaterial.mSmeltInto, tDustStack, 1L));
                             } else {
-                                recipeBuilder.itemOutputs(GT_Utility.copyAmount(1, tDustStack));
+                                recipeBuilder.itemOutputs(GTUtility.copyAmount(1, tDustStack));
                             }
                             recipeBuilder
                                 .duration(
@@ -105,23 +105,23 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                                 .addTo(blastFurnaceRecipes);
                         }
                     } else {
-                        GT_ModHandler.addSmeltingRecipe(aStack, tDustStack);
+                        GTModHandler.addSmeltingRecipe(aStack, tDustStack);
                     }
                 } else if (!aMaterial.contains(SubTag.NO_WORKING)) {
                     if ((!OrePrefixes.block.isIgnored(aMaterial))
-                        && (null == GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
-                        && GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L) != null) {
+                        && (null == GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
+                        && GTOreDictUnificator.get(OrePrefixes.block, aMaterial, 1L) != null) {
 
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(9, aStack))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(9, aStack))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.block, aMaterial, 1L))
                             .duration(15 * SECONDS)
                             .eut(2)
                             .addTo(compressorRecipes);
                     }
                     // This is so disgustingly bad.
                     if (((OrePrefixes.block.isIgnored(aMaterial))
-                        || (null == GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L)))
+                        || (null == GTOreDictUnificator.get(OrePrefixes.block, aMaterial, 1L)))
                         && (aMaterial != Materials.GraniteRed)
                         && (aMaterial != Materials.GraniteBlack)
                         && (aMaterial != Materials.Basalt)
@@ -134,10 +134,10 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                         && (aMaterial != Materials.Clay)) {
                         // compressor recipe
                         {
-                            if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                            if (GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                                     .duration(15 * SECONDS)
                                     .eut(2)
                                     .addTo(compressorRecipes);
@@ -155,9 +155,9 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                         if (tMat.mMaterial == Materials.Air) {
                             tDustStack = ItemList.Cell_Air.get(tMat.mAmount / 2L);
                         } else {
-                            tDustStack = GT_OreDictUnificator.get(OrePrefixes.dust, tMat.mMaterial, tMat.mAmount);
+                            tDustStack = GTOreDictUnificator.get(OrePrefixes.dust, tMat.mMaterial, tMat.mAmount);
                             if (tDustStack == null)
-                                tDustStack = GT_OreDictUnificator.get(OrePrefixes.cell, tMat.mMaterial, tMat.mAmount);
+                                tDustStack = GTOreDictUnificator.get(OrePrefixes.cell, tMat.mMaterial, tMat.mAmount);
                         }
                         if (tItemAmount + tMat.mAmount * 3628800L
                             <= aStack.getMaxStackSize() * aMaterial.getDensity()) {
@@ -165,17 +165,17 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                             if (tDustStack != null) {
                                 tDustStack.stackSize = ((int) (tDustStack.stackSize * tDensityMultiplier));
                                 while ((tDustStack.stackSize > 64) && (tList.size() < 6)
-                                    && (tCapsuleCount + GT_ModHandler.getCapsuleCellContainerCount(tDustStack) * 64L
+                                    && (tCapsuleCount + GTModHandler.getCapsuleCellContainerCount(tDustStack) * 64L
                                         <= 64L)) {
-                                    tCapsuleCount += GT_ModHandler.getCapsuleCellContainerCount(tDustStack) * 64L;
-                                    tList.add(GT_Utility.copyAmount(64, tDustStack));
+                                    tCapsuleCount += GTModHandler.getCapsuleCellContainerCount(tDustStack) * 64L;
+                                    tList.add(GTUtility.copyAmount(64, tDustStack));
                                     tDustStack.stackSize -= 64;
                                 }
                                 if ((tDustStack.stackSize > 0) && (tList.size() < 6)
                                     && (tCapsuleCount
-                                        + GT_ModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(tDustStack)
+                                        + GTModHandler.getCapsuleCellContainerCountMultipliedWithStackSize(tDustStack)
                                         <= 64L)) {
-                                    tCapsuleCount += GT_ModHandler
+                                    tCapsuleCount += GTModHandler
                                         .getCapsuleCellContainerCountMultipliedWithStackSize(tDustStack);
                                     tList.add(tDustStack);
                                 }
@@ -189,9 +189,9 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                         int tList_sS = tList.size();
                         for (int i = 0; i < tList_sS; i++) {
                             if ((!ItemList.Cell_Air.isStackEqual(tList.get(i)))
-                                && ((tFluid = GT_Utility.getFluidForFilledItem(tList.get(i), true)) != null)) {
+                                && ((tFluid = GTUtility.getFluidForFilledItem(tList.get(i), true)) != null)) {
                                 tFluid.amount *= tList.get(i).stackSize;
-                                tCapsuleCount -= GT_ModHandler
+                                tCapsuleCount -= GTModHandler
                                     .getCapsuleCellContainerCountMultipliedWithStackSize(tList.get(i));
                                 tList.remove(i);
                                 break;
@@ -199,13 +199,13 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                         }
                         if ((aMaterial.mExtraData & 0x1) != 0) {
                             if (tList.size() > 0 || tFluid != null) {
-                                GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder();
+                                GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder();
                                 if (tCapsuleCount > 0L) {
                                     recipeBuilder.itemInputs(
-                                        GT_Utility.copyAmount(tItemAmount, aStack),
+                                        GTUtility.copyAmount(tItemAmount, aStack),
                                         ItemList.Cell_Empty.get(tCapsuleCount));
                                 } else {
-                                    recipeBuilder.itemInputs(GT_Utility.copyAmount(tItemAmount, aStack));
+                                    recipeBuilder.itemInputs(GTUtility.copyAmount(tItemAmount, aStack));
                                 }
                                 if (tList.size() > 0) {
                                     ItemStack[] outputsArray = tList.toArray(new ItemStack[Math.min(tList.size(), 6)]);
@@ -222,13 +222,13 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                         }
                         if ((aMaterial.mExtraData & 0x2) != 0) {
                             if (tList.size() > 0 || tFluid != null) {
-                                GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder();
+                                GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder();
                                 if (tCapsuleCount > 0L) {
                                     recipeBuilder.itemInputs(
-                                        GT_Utility.copyAmount(tItemAmount, aStack),
+                                        GTUtility.copyAmount(tItemAmount, aStack),
                                         ItemList.Cell_Empty.get(tCapsuleCount));
                                 } else {
-                                    recipeBuilder.itemInputs(GT_Utility.copyAmount(tItemAmount, aStack));
+                                    recipeBuilder.itemInputs(GTUtility.copyAmount(tItemAmount, aStack));
                                 }
                                 if (tList.size() > 0) {
                                     ItemStack[] outputsArray = tList.toArray(new ItemStack[Math.min(tList.size(), 6)]);
@@ -245,26 +245,26 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                     }
                 }
                 if (aMaterial.contains(SubTag.CRYSTALLISABLE)
-                    && GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
+                    && GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
                         .outputChances(7000)
                         .fluidInputs(Materials.Water.getFluid(200L))
                         .duration(1 * MINUTES + 40 * SECONDS)
                         .eut(24)
                         .addTo(autoclaveRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(2))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(2))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
                         .outputChances(9000)
-                        .fluidInputs(GT_ModHandler.getDistilledWater(100L))
+                        .fluidInputs(GTModHandler.getDistilledWater(100L))
                         .duration(1 * MINUTES + 15 * SECONDS)
                         .eut(24)
                         .addTo(autoclaveRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(3))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(3))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
                         .outputChances(10000)
                         .fluidInputs(Materials.Void.getMolten(36L))
                         .duration(1 * MINUTES)
@@ -275,65 +275,63 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                     case "NULL", "Mercury", "Coal":
                         break;
                     case "Glass":
-                        GT_ModHandler.addSmeltingRecipe(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTModHandler.addSmeltingRecipe(
+                            GTUtility.copyAmount(1, aStack),
                             new ItemStack(net.minecraft.init.Blocks.glass));
                         break;
                     case "NetherQuartz":
                     case "Quartz":
                     case "CertusQuartz":
-                        GT_ModHandler.removeFurnaceSmelting(aStack);
+                        GTModHandler.removeFurnaceSmelting(aStack);
                         break;
                     case "MeatRaw":
-                        GT_ModHandler.addSmeltingRecipe(
-                            GT_Utility.copyAmount(1, aStack),
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1L));
+                        GTModHandler.addSmeltingRecipe(
+                            GTUtility.copyAmount(1, aStack),
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1L));
                         break;
                     case "Oilsands":
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
                             .fluidOutputs(Materials.OilHeavy.getFluid(1000))
                             .duration(33 * SECONDS)
                             .eut(8)
                             .addTo(centrifugeRecipes);
                         break;
                     case "HydratedCoal":
-                        GT_ModHandler.addSmeltingRecipe(
-                            GT_Utility.copyAmount(1, aStack),
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L));
+                        GTModHandler.addSmeltingRecipe(
+                            GTUtility.copyAmount(1, aStack),
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L));
                         break;
                     case "Diamond": {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(4, aStack), ItemList.Block_Powderbarrel.get(64))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), ItemList.Block_Powderbarrel.get(64))
                             .itemOutputs(
                                 ItemList.IC2_Industrial_Diamond.get(3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 16L))
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 16L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(
-                                GT_Utility.copyAmount(4, aStack),
-                                GT_ModHandler.getIC2Item("dynamite", 16, null))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), GTModHandler.getIC2Item("dynamite", 16, null))
                             .itemOutputs(
                                 ItemList.IC2_Industrial_Diamond.get(3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 16L))
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 16L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(4, aStack), new ItemStack(Blocks.tnt, 32))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), new ItemStack(Blocks.tnt, 32))
                             .itemOutputs(
                                 ItemList.IC2_Industrial_Diamond.get(3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 16L))
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 16L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(4, aStack), GT_ModHandler.getIC2Item("industrialTnt", 8))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), GTModHandler.getIC2Item("industrialTnt", 8))
                             .itemOutputs(
                                 ItemList.IC2_Industrial_Diamond.get(3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 16L))
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 16L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
@@ -349,37 +347,35 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                     case "BlueTopaz":
                     case "Tanzanite":
                     case "Amethyst": {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(4, aStack), ItemList.Block_Powderbarrel.get(48))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), ItemList.Block_Powderbarrel.get(48))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 12L))
+                                GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 12L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(
-                                GT_Utility.copyAmount(4, aStack),
-                                GT_ModHandler.getIC2Item("dynamite", 12, null))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), GTModHandler.getIC2Item("dynamite", 12, null))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 12L))
+                                GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 12L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(4, aStack), new ItemStack(Blocks.tnt, 24))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), new ItemStack(Blocks.tnt, 24))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 12L))
+                                GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 12L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(4, aStack), GT_ModHandler.getIC2Item("industrialTnt", 6))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), GTModHandler.getIC2Item("industrialTnt", 6))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 12L))
+                                GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 12L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
@@ -394,35 +390,35 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                     case "Forcicium":
                     case "Forcillium":
                     case "Force": {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(4, aStack), ItemList.Block_Powderbarrel.get(32))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), ItemList.Block_Powderbarrel.get(32))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 8L))
+                                GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 8L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(4, aStack), GT_ModHandler.getIC2Item("dynamite", 8, null))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), GTModHandler.getIC2Item("dynamite", 8, null))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 8L))
+                                GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 8L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(4, aStack), new ItemStack(Blocks.tnt, 16))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), new ItemStack(Blocks.tnt, 16))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 8L))
+                                GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 8L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(4, aStack), GT_ModHandler.getIC2Item("industrialTnt", 4))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), GTModHandler.getIC2Item("industrialTnt", 4))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 8L))
+                                GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 3L),
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 8L))
                             .duration(1 * SECONDS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(implosionRecipes);
@@ -430,42 +426,42 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                 }
             }
             case dustPure, dustImpure, dustRefined -> {
-                Materials tByProduct = GT_Utility.selectItemInList(
+                Materials tByProduct = GTUtility.selectItemInList(
                     aPrefix == OrePrefixes.dustRefined ? 2 : aPrefix == OrePrefixes.dustPure ? 1 : 0,
                     aMaterial,
                     aMaterial.mOreByProducts);
                 if (aPrefix == OrePrefixes.dustPure) {
                     if (aMaterial.contains(SubTag.ELECTROMAGNETIC_SEPERATION_GOLD)) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Gold, 1L),
-                                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 1L))
+                                GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
+                                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Gold, 1L),
+                                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 1L))
                             .outputChances(10000, 4000, 2000)
                             .duration(20 * SECONDS)
                             .eut(24)
                             .addTo(electroMagneticSeparatorRecipes);
                     }
                     if (aMaterial.contains(SubTag.ELECTROMAGNETIC_SEPERATION_IRON)) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Iron, 1L),
-                                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 1L))
+                                GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
+                                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Iron, 1L),
+                                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 1L))
                             .outputChances(10000, 4000, 2000)
                             .duration(20 * SECONDS)
                             .eut(24)
                             .addTo(electroMagneticSeparatorRecipes);
                     }
                     if (aMaterial.contains(SubTag.ELECTROMAGNETIC_SEPERATION_NEODYMIUM)) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Neodymium, 1L),
-                                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Neodymium, 1L))
+                                GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
+                                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Neodymium, 1L),
+                                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Neodymium, 1L))
                             .outputChances(10000, 4000, 2000)
                             .duration(20 * SECONDS)
                             .eut(24)
@@ -473,70 +469,70 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                     }
                 }
                 if (aMaterial.contains(SubTag.CRYSTALLISABLE)
-                    && GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
+                    && GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
                         .outputChances(9000)
                         .fluidInputs(Materials.Water.getFluid(200L))
                         .duration(1 * MINUTES + 40 * SECONDS)
                         .eut(24)
                         .addTo(autoclaveRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(2))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(2))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
                         .outputChances(9500)
-                        .fluidInputs(GT_ModHandler.getDistilledWater(100L))
+                        .fluidInputs(GTModHandler.getDistilledWater(100L))
                         .duration(1 * MINUTES + 15 * SECONDS)
                         .eut(24)
                         .addTo(autoclaveRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(3))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(3))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
                         .outputChances(10000)
                         .fluidInputs(Materials.Void.getMolten(36L))
                         .duration(1 * MINUTES)
                         .eut(24)
                         .addTo(autoclaveRecipes);
                 }
-                ItemStack tImpureStack = GT_OreDictUnificator.get(
+                ItemStack tImpureStack = GTOreDictUnificator.get(
                     OrePrefixes.dustTiny,
                     tByProduct,
-                    GT_OreDictUnificator.get(OrePrefixes.nugget, tByProduct, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.nugget, tByProduct, 1L),
                     1L);
                 if (tImpureStack == null) {
-                    tImpureStack = GT_OreDictUnificator.get(OrePrefixes.dustSmall, tByProduct, 1L);
+                    tImpureStack = GTOreDictUnificator.get(OrePrefixes.dustSmall, tByProduct, 1L);
                     if (tImpureStack == null) {
-                        tImpureStack = GT_OreDictUnificator.get(
+                        tImpureStack = GTOreDictUnificator.get(
                             OrePrefixes.dust,
                             tByProduct,
-                            GT_OreDictUnificator.get(OrePrefixes.gem, tByProduct, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.gem, tByProduct, 1L),
                             1L);
                         if (tImpureStack == null) {
-                            tImpureStack = GT_OreDictUnificator.get(OrePrefixes.cell, tByProduct, 1L);
+                            tImpureStack = GTOreDictUnificator.get(OrePrefixes.cell, tByProduct, 1L);
                             if (tImpureStack == null) {
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
                                     .duration(Math.max(1L, aMaterial.getMass()))
                                     .eut(5)
                                     .addTo(centrifugeRecipes);
                             } else {
-                                FluidStack tFluid = GT_Utility.getFluidForFilledItem(tImpureStack, true);
+                                FluidStack tFluid = GTUtility.getFluidForFilledItem(tImpureStack, true);
                                 if (tFluid == null) {
-                                    GT_Values.RA.stdBuilder()
-                                        .itemInputs(GT_Utility.copyAmount(9, aStack), ItemList.Cell_Empty.get(1))
+                                    GTValues.RA.stdBuilder()
+                                        .itemInputs(GTUtility.copyAmount(9, aStack), ItemList.Cell_Empty.get(1))
                                         .itemOutputs(
-                                            GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 9L),
+                                            GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 9L),
                                             tImpureStack)
                                         .duration(Math.max(1L, aMaterial.getMass() * 72L))
                                         .eut(5)
                                         .addTo(centrifugeRecipes);
                                 } else {
                                     tFluid.amount /= 10;
-                                    GT_Values.RA.stdBuilder()
-                                        .itemInputs(GT_Utility.copyAmount(1, aStack))
-                                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
+                                    GTValues.RA.stdBuilder()
+                                        .itemInputs(GTUtility.copyAmount(1, aStack))
+                                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
                                         .fluidOutputs(tFluid)
                                         .duration(Math.max(1L, aMaterial.getMass() * 8L))
                                         .eut(5)
@@ -544,30 +540,30 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                                 }
                             }
                         } else {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(9, aStack))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 9L), tImpureStack)
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(9, aStack))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 9L), tImpureStack)
                                 .duration(Math.max(1L, aMaterial.getMass() * 72L))
                                 .eut(5)
                                 .addTo(centrifugeRecipes);
                         }
                     } else {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(2, aStack))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 2L), tImpureStack)
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(2, aStack))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 2L), tImpureStack)
                             .duration(Math.max(1L, aMaterial.getMass() * 16L))
                             .eut(5)
                             .addTo(centrifugeRecipes);
                     }
                 } else {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .itemOutputs(
-                            GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
-                            GT_OreDictUnificator.get(
+                            GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
+                            GTOreDictUnificator.get(
                                 OrePrefixes.dust,
                                 tByProduct,
-                                GT_OreDictUnificator.get(OrePrefixes.nugget, tByProduct, 1L),
+                                GTOreDictUnificator.get(OrePrefixes.nugget, tByProduct, 1L),
                                 1L))
                         .outputChances(10000, 1111)
                         .duration(Math.max(1L, aMaterial.getMass() * 8L))
@@ -576,17 +572,17 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                 }
             }
             case dustSmall -> {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(4, aStack), ItemList.Schematic_Dust.get(0L))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(4, aStack), ItemList.Schematic_Dust.get(0L))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
                     .duration(1 * SECONDS)
                     .eut(4)
                     .addTo(packagerRecipes);
                 if (!aMaterial.mBlastFurnaceRequired) {
-                    GT_RecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
+                    GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
                     if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) {
-                        GT_RecipeRegistrator.registerReverseArcSmelting(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTRecipeRegistrator.registerReverseArcSmelting(
+                            GTUtility.copyAmount(1, aStack),
                             aMaterial,
                             aPrefix.mMaterialAmount,
                             null,
@@ -596,17 +592,17 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                 }
             }
             case dustTiny -> {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(9, aStack), ItemList.Schematic_Dust.get(0L))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(9, aStack), ItemList.Schematic_Dust.get(0L))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
                     .duration(1 * SECONDS)
                     .eut(4)
                     .addTo(packagerRecipes);
                 if (!aMaterial.mBlastFurnaceRequired) {
-                    GT_RecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
+                    GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
                     if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) {
-                        GT_RecipeRegistrator.registerReverseArcSmelting(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTRecipeRegistrator.registerReverseArcSmelting(
+                            GTUtility.copyAmount(1, aStack),
                             aMaterial,
                             aPrefix.mMaterialAmount,
                             null,
@@ -616,7 +612,7 @@ public class ProcessingDust implements gregtech.api.interfaces.IOreRecipeRegistr
                 }
                 if (!aMaterial.contains(SubTag.NO_SMELTING)) {
                     if (aMaterial.mBlastFurnaceRequired) {
-                        GT_ModHandler.removeFurnaceSmelting(aStack);
+                        GTModHandler.removeFurnaceSmelting(aStack);
                     }
                 }
             }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDye.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDye.java
index 9661033e6a..5c2be8a785 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingDye.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingDye.java
@@ -1,12 +1,12 @@
 package gregtech.loaders.oreprocessing;
 
-import static gregtech.api.enums.GT_Values.RA;
+import static gregtech.api.enums.GTValues.RA;
 import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes;
 import static gregtech.api.recipe.RecipeMaps.mixerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeBuilder.WILDCARD;
-import static gregtech.api.util.GT_RecipeConstants.UniversalChemical;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.WILDCARD;
+import static gregtech.api.util.GTRecipeConstants.UniversalChemical;
 
 import java.util.Locale;
 
@@ -15,13 +15,13 @@ import net.minecraft.item.ItemStack;
 import net.minecraftforge.fluids.FluidRegistry;
 
 import gregtech.api.enums.Dyes;
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.interfaces.IOreRecipeRegistrator;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingDye implements IOreRecipeRegistrator {
 
@@ -33,7 +33,7 @@ public class ProcessingDye implements IOreRecipeRegistrator {
     public void registerOre(OrePrefixes prefix, Materials material, String oreDictName, String modName,
         ItemStack stack) {
         Dyes aDye = Dyes.get(oreDictName);
-        if ((aDye.mIndex >= 0) && (aDye.mIndex < 16) && (GT_Utility.getContainerItem(stack, true) == null)) {
+        if ((aDye.mIndex >= 0) && (aDye.mIndex < 16) && (GTUtility.getContainerItem(stack, true) == null)) {
             registerAlloySmelter(stack, aDye);
             registerMixer(stack, aDye);
             registerChemicalReactor(stack, aDye);
@@ -44,17 +44,17 @@ public class ProcessingDye implements IOreRecipeRegistrator {
         String fluidName = "dye.watermixed." + dye.name()
             .toLowerCase(Locale.ENGLISH);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, stack), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, stack), GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Water.getFluid(216L))
             .fluidOutputs(FluidRegistry.getFluidStack(fluidName, 192))
             .duration(16 * TICKS)
             .eut(4)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, stack), GT_Utility.getIntegratedCircuit(1))
-            .fluidInputs(GT_ModHandler.getDistilledWater(288L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, stack), GTUtility.getIntegratedCircuit(1))
+            .fluidInputs(GTModHandler.getDistilledWater(288L))
             .fluidOutputs(FluidRegistry.getFluidStack(fluidName, 216))
             .duration(16 * TICKS)
             .eut(4)
@@ -63,16 +63,14 @@ public class ProcessingDye implements IOreRecipeRegistrator {
 
     public void registerAlloySmelter(ItemStack stack, Dyes dye) {
         RA.stdBuilder()
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 8L),
-                GT_Utility.copyAmount(1, stack))
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 8L), GTUtility.copyAmount(1, stack))
             .itemOutputs(new ItemStack(Blocks.stained_glass, 8, 15 - dye.mIndex))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(alloySmelterRecipes);
 
         RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.glass, 8, WILDCARD), GT_Utility.copyAmount(1, stack))
+            .itemInputs(new ItemStack(Blocks.glass, 8, WILDCARD), GTUtility.copyAmount(1, stack))
             .itemOutputs(new ItemStack(Blocks.stained_glass, 8, 15 - dye.mIndex))
             .duration(10 * SECONDS)
             .eut(8)
@@ -83,8 +81,8 @@ public class ProcessingDye implements IOreRecipeRegistrator {
         String fluidName = "dye.chemical." + dye.name()
             .toLowerCase(Locale.ENGLISH);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, stack), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Salt, 2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, stack), GTOreDictUnificator.get(OrePrefixes.dust, Materials.Salt, 2))
             .fluidInputs(Materials.SulfuricAcid.getFluid(432))
             .fluidOutputs(FluidRegistry.getFluidStack(fluidName, 288))
             .duration(30 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingFineWire.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingFineWire.java
index cfd33f1ace..a9c40975e8 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingFineWire.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingFineWire.java
@@ -5,10 +5,10 @@ import net.minecraft.item.ItemStack;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_RecipeRegistrator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTRecipeRegistrator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 public class ProcessingFineWire implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -20,13 +20,13 @@ public class ProcessingFineWire implements gregtech.api.interfaces.IOreRecipeReg
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
         if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) {
-            GT_RecipeRegistrator.registerWiremillRecipes(aMaterial, 100, 4);
+            GTRecipeRegistrator.registerWiremillRecipes(aMaterial, 100, 4);
         }
         if ((aMaterial.mUnificatable) && (aMaterial.mMaterialInto == aMaterial)
             && !aMaterial.contains(SubTag.NO_WORKING)) {
-            GT_ModHandler.addCraftingRecipe(
-                GT_Utility.copyAmount(1, aStack),
-                GT_Proxy.tBits,
+            GTModHandler.addCraftingRecipe(
+                GTUtility.copyAmount(1, aStack),
+                GTProxy.tBits,
                 new Object[] { "Xx", 'X', OrePrefixes.foil.get(aMaterial) });
         }
     }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingFoil.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingFoil.java
index 9b46710b71..3839c38c66 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingFoil.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingFoil.java
@@ -1,18 +1,18 @@
 package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.benderRecipes;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.GregTech_API;
-import gregtech.api.enums.GT_Values;
+import gregtech.api.GregTechAPI;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.interfaces.IOreRecipeRegistrator;
 import gregtech.api.render.TextureFactory;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingFoil implements IOreRecipeRegistrator {
 
@@ -28,18 +28,18 @@ public class ProcessingFoil implements IOreRecipeRegistrator {
     }
 
     private void registerBenderRecipe(Materials material) {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.copyAmount(1, GT_OreDictUnificator.get(OrePrefixes.plate, material, 4L)),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.foil, material, 4L))
+                GTUtility.copyAmount(1, GTOreDictUnificator.get(OrePrefixes.plate, material, 4L)),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.foil, material, 4L))
             .duration((int) Math.max(material.getMass(), 1L))
             .eut(calculateRecipeEU(material, 24))
             .addTo(benderRecipes);
     }
 
     private void registerCover(ItemStack stack, Materials material) {
-        GregTech_API
+        GregTechAPI
             .registerCover(stack, TextureFactory.of(material.mIconSet.mTextures[70], material.mRGBa, false), null);
     }
 }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingFood.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingFood.java
index e7fc25038f..0c8119ded3 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingFood.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingFood.java
@@ -4,18 +4,18 @@ import static gregtech.api.recipe.RecipeMaps.benderRecipes;
 import static gregtech.api.recipe.RecipeMaps.formingPressRecipes;
 import static gregtech.api.recipe.RecipeMaps.mixerRecipes;
 import static gregtech.api.recipe.RecipeMaps.slicerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingFood implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -29,10 +29,10 @@ public class ProcessingFood implements gregtech.api.interfaces.IOreRecipeRegistr
         switch (aOreDictName) {
             case "foodCheese" -> {
                 registerSlicerRecipes(aStack);
-                GT_OreDictUnificator.addItemData(aStack, new gregtech.api.objects.ItemData(Materials.Cheese, 3628800L));
+                GTOreDictUnificator.addItemData(aStack, new gregtech.api.objects.ItemData(Materials.Cheese, 3628800L));
             }
             case "foodDough" -> {
-                GT_ModHandler.removeFurnaceSmelting(aStack);
+                GTModHandler.removeFurnaceSmelting(aStack);
                 registerBenderRecipes(aStack);
                 registerMixerRecipes(aStack);
                 registerFormingPressRecipes(aStack);
@@ -41,7 +41,7 @@ public class ProcessingFood implements gregtech.api.interfaces.IOreRecipeRegistr
     }
 
     private void registerSlicerRecipes(ItemStack stack) {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(stack, ItemList.Shape_Slicer_Flat.get(0L))
             .itemOutputs(ItemList.Food_Sliced_Cheese.get(4L))
             .duration(3 * SECONDS + 4 * TICKS)
@@ -50,8 +50,8 @@ public class ProcessingFood implements gregtech.api.interfaces.IOreRecipeRegistr
     }
 
     private void registerBenderRecipes(ItemStack stack) {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, stack), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, stack), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Food_Flat_Dough.get(1L))
             .duration(16 * TICKS)
             .eut(4)
@@ -59,22 +59,22 @@ public class ProcessingFood implements gregtech.api.interfaces.IOreRecipeRegistr
     }
 
     private void registerMixerRecipes(ItemStack stack) {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(stack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(stack, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
             .itemOutputs(ItemList.Food_Dough_Sugar.get(2L))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(stack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(stack, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L))
             .itemOutputs(ItemList.Food_Dough_Chocolate.get(2L))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(stack, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chocolate, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(stack, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chocolate, 1L))
             .itemOutputs(ItemList.Food_Dough_Chocolate.get(2L))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(8)
@@ -83,22 +83,22 @@ public class ProcessingFood implements gregtech.api.interfaces.IOreRecipeRegistr
 
     private void registerFormingPressRecipes(ItemStack stack) {
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, stack), ItemList.Shape_Mold_Bun.get(0L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, stack), ItemList.Shape_Mold_Bun.get(0L))
             .itemOutputs(ItemList.Food_Raw_Bun.get(1L))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(formingPressRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(2, stack), ItemList.Shape_Mold_Bread.get(0L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(2, stack), ItemList.Shape_Mold_Bread.get(0L))
             .itemOutputs(ItemList.Food_Raw_Bread.get(1L))
             .duration(12 * SECONDS + 16 * TICKS)
             .eut(4)
             .addTo(formingPressRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(3, stack), ItemList.Shape_Mold_Baguette.get(0L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(3, stack), ItemList.Shape_Mold_Baguette.get(0L))
             .itemOutputs(ItemList.Food_Raw_Baguette.get(1L))
             .duration(19 * SECONDS + 4 * TICKS)
             .eut(4)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingGear.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGear.java
index aa973cddfe..d7ef154a9f 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingGear.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGear.java
@@ -1,23 +1,23 @@
 package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 public class ProcessingGear implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -31,12 +31,12 @@ public class ProcessingGear implements gregtech.api.interfaces.IOreRecipeRegistr
         ItemStack aStack) {
         switch (aPrefix) {
             case gearGt -> {
-                GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+                GTModHandler.removeRecipeByOutputDelayed(aStack);
                 if (aMaterial.mStandardMoltenFluid != null) {
                     if (!(aMaterial == Materials.AnnealedCopper || aMaterial == Materials.WroughtIron)) {
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(ItemList.Shape_Mold_Gear.get(0L))
-                            .itemOutputs(GT_OreDictUnificator.get(aPrefix, aMaterial, 1L))
+                            .itemOutputs(GTOreDictUnificator.get(aPrefix, aMaterial, 1L))
                             .fluidInputs(aMaterial.getMolten(576L))
                             .duration(6 * SECONDS + 8 * TICKS)
                             .eut(calculateRecipeEU(aMaterial, 8))
@@ -46,21 +46,21 @@ public class ProcessingGear implements gregtech.api.interfaces.IOreRecipeRegistr
                 if (aMaterial.mUnificatable && (aMaterial.mMaterialInto == aMaterial)
                     && !aMaterial.contains(SubTag.NO_WORKING)) {
                     switch (aMaterial.mName) {
-                        case "Wood" -> GT_ModHandler.addCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial, 1L),
-                            GT_Proxy.tBits,
+                        case "Wood" -> GTModHandler.addCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.gearGt, aMaterial, 1L),
+                            GTProxy.tBits,
                             new Object[] { "SPS", "PsP", "SPS", 'P', OrePrefixes.plank.get(aMaterial), 'S',
                                 OrePrefixes.stick.get(aMaterial) });
-                        case "Stone" -> GT_ModHandler.addCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial, 1L),
-                            GT_Proxy.tBits,
+                        case "Stone" -> GTModHandler.addCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.gearGt, aMaterial, 1L),
+                            GTProxy.tBits,
                             new Object[] { "SPS", "PfP", "SPS", 'P', OrePrefixes.stoneSmooth, 'S',
                                 new ItemStack(Blocks.stone_button, 1, 32767) });
                         default -> {
                             if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                                GT_ModHandler.addCraftingRecipe(
-                                    GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial, 1L),
-                                    GT_Proxy.tBits,
+                                GTModHandler.addCraftingRecipe(
+                                    GTOreDictUnificator.get(OrePrefixes.gearGt, aMaterial, 1L),
+                                    GTProxy.tBits,
                                     new Object[] { "SPS", "PwP", "SPS", 'P', OrePrefixes.plate.get(aMaterial), 'S',
                                         OrePrefixes.stick.get(aMaterial) });
                             }
@@ -71,9 +71,9 @@ public class ProcessingGear implements gregtech.api.interfaces.IOreRecipeRegistr
             case gearGtSmall -> {
                 if (aMaterial.mStandardMoltenFluid != null) {
                     if (!(aMaterial == Materials.AnnealedCopper || aMaterial == Materials.WroughtIron)) {
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(ItemList.Shape_Mold_Gear_Small.get(0L))
-                            .itemOutputs(GT_Utility.copyAmount(1, aStack))
+                            .itemOutputs(GTUtility.copyAmount(1, aStack))
                             .fluidInputs(aMaterial.getMolten(144L))
                             .duration(16 * TICKS)
                             .eut(calculateRecipeEU(aMaterial, 8))
@@ -83,19 +83,19 @@ public class ProcessingGear implements gregtech.api.interfaces.IOreRecipeRegistr
                 if (aMaterial.mUnificatable && (aMaterial.mMaterialInto == aMaterial)
                     && !aMaterial.contains(SubTag.NO_WORKING)) {
                     switch (aMaterial.mName) {
-                        case "Wood" -> GT_ModHandler.addCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial, 1L),
-                            GT_Proxy.tBits,
+                        case "Wood" -> GTModHandler.addCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial, 1L),
+                            GTProxy.tBits,
                             new Object[] { "P ", " s", 'P', OrePrefixes.plank.get(aMaterial) });
-                        case "Stone" -> GT_ModHandler.addCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial, 1L),
-                            GT_Proxy.tBits,
+                        case "Stone" -> GTModHandler.addCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial, 1L),
+                            GTProxy.tBits,
                             new Object[] { "P ", " f", 'P', OrePrefixes.stoneSmooth });
                         default -> {
                             if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                                GT_ModHandler.addCraftingRecipe(
-                                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial, 1L),
-                                    GT_Proxy.tBits,
+                                GTModHandler.addCraftingRecipe(
+                                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial, 1L),
+                                    GTProxy.tBits,
                                     new Object[] { " S ", "hPx", " S ", 'S', OrePrefixes.stick.get(aMaterial), 'P',
                                         OrePrefixes.plate.get(aMaterial) });
                             }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingGem.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGem.java
index 76e60e18c5..2f92e58e56 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingGem.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingGem.java
@@ -6,28 +6,28 @@ import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
 import static gregtech.api.recipe.RecipeMaps.implosionRecipes;
 import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes;
 import static gregtech.api.recipe.RecipeMaps.latheRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE;
+import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.item.ItemStack;
 import net.minecraftforge.oredict.OreDictionary;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeConstants;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeConstants;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistrator { // TODO COMPARE WITH GEM???
                                                                                       // generators
@@ -54,21 +54,21 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
             case gem -> {
                 // fuel recipes
                 if (aFuelPower) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .metadata(FUEL_VALUE, aMaterial.mFuelPower * 2)
                         .metadata(FUEL_TYPE, aMaterial.mFuelType)
-                        .addTo(GT_RecipeConstants.Fuel);
+                        .addTo(GTRecipeConstants.Fuel);
                 }
 
                 if (!OrePrefixes.block.isIgnored(aMaterial)
-                    && GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L) != null) {
+                    && GTOreDictUnificator.get(OrePrefixes.block, aMaterial, 1L) != null) {
                     // Compressor recipes
                     // need to avoid iridium exploit
                     if (aMaterial != Materials.Iridium) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(9, aStack))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.block, aMaterial, 1L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(9, aStack))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.block, aMaterial, 1L))
                             .duration(15 * SECONDS)
                             .eut(2)
                             .addTo(compressorRecipes);
@@ -77,18 +77,18 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
 
                 // Smelting recipe
                 if (!aNoSmelting) {
-                    GT_ModHandler.addSmeltingRecipe(
-                        GT_Utility.copyAmount(1, aStack),
-                        GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L));
+                    GTModHandler.addSmeltingRecipe(
+                        GTUtility.copyAmount(1, aStack),
+                        GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L));
                 }
 
                 if (aNoSmashing) {
                     // Forge hammer recipes
                     {
-                        if (GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(aStack)
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 2L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 2L))
                                 .duration(3 * SECONDS + 4 * TICKS)
                                 .eut(16)
                                 .addTo(hammerRecipes);
@@ -98,11 +98,11 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
                     // Forge hammer recipes
                     {
                         // need to avoid iridium exploit
-                        if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null
+                        if (GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null
                             && aMaterial != Materials.Iridium) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 16))
                                 .addTo(hammerRecipes);
@@ -111,61 +111,61 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
 
                     // Bender recipes
                     if (aMaterial != Materials.Iridium) {
-                        if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
+                        if (GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
                             // Plate
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                                 .duration((int) Math.max(aMaterialMass * 2L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 24))
                                 .addTo(benderRecipes);
                         }
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L) != null) {
+                        if (GTOreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L) != null) {
                             // Double plates
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(2, aStack), GT_Utility.getIntegratedCircuit(2))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(2, aStack), GTUtility.getIntegratedCircuit(2))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass * 2L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 96))
                                 .addTo(benderRecipes);
                         }
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L) != null) {
+                        if (GTOreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L) != null) {
                             // Triple plate
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(3, aStack), GT_Utility.getIntegratedCircuit(3))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(3, aStack), GTUtility.getIntegratedCircuit(3))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass * 3L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 96))
                                 .addTo(benderRecipes);
                         }
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L) != null) {
+                        if (GTOreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L) != null) {
                             // Quadruple plate
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(4, aStack), GT_Utility.getIntegratedCircuit(4))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(4, aStack), GTUtility.getIntegratedCircuit(4))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass * 4L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 96))
                                 .addTo(benderRecipes);
                         }
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L) != null) {
+                        if (GTOreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L) != null) {
                             // Quintuple plate
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(5, aStack), GT_Utility.getIntegratedCircuit(5))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(5, aStack), GTUtility.getIntegratedCircuit(5))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass * 5L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 96))
                                 .addTo(benderRecipes);
                         }
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L) != null) {
+                        if (GTOreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L) != null) {
                             // dense plate
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(9, aStack), GT_Utility.getIntegratedCircuit(9))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(9, aStack), GTUtility.getIntegratedCircuit(9))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass * 9L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 96))
                                 .addTo(benderRecipes);
@@ -175,13 +175,13 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
                 if (aNoWorking) {
                     if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
                         // Lathe recipes
-                        if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L) != null
-                            && GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack))
+                        if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L) != null
+                            && GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack))
                                 .itemOutputs(
-                                    GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L),
-                                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 2L))
+                                    GTOreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L),
+                                    GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 2L))
                                 .duration(((int) Math.max(aMaterialMass, 1L)) * TICKS)
                                 .eut(calculateRecipeEU(aMaterial, 16))
                                 .addTo(latheRecipes);
@@ -191,40 +191,40 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
                     if (aMaterial.mUnificatable && (aMaterial.mMaterialInto == aMaterial)) {
                         // Implosion compressor recipes
                         {
-                            if (GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1) != null) {
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(3, aStack), ItemList.Block_Powderbarrel.get(16))
+                            if (GTOreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1) != null) {
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(3, aStack), ItemList.Block_Powderbarrel.get(16))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(
-                                        GT_Utility.copyAmount(3, aStack),
-                                        GT_ModHandler.getIC2Item("dynamite", 4, null))
+                                        GTUtility.copyAmount(3, aStack),
+                                        GTModHandler.getIC2Item("dynamite", 4, null))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(3, aStack), new ItemStack(Blocks.tnt, 8))
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(3, aStack), new ItemStack(Blocks.tnt, 8))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(
-                                        GT_Utility.copyAmount(3, aStack),
-                                        GT_ModHandler.getIC2Item("industrialTnt", 2))
+                                        GTUtility.copyAmount(3, aStack),
+                                        GTModHandler.getIC2Item("industrialTnt", 2))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
@@ -233,22 +233,22 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
 
                         // Crafting recipes
                         {
-                            GT_ModHandler.addCraftingRecipe(
-                                GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 2L),
-                                GT_Proxy.tBits,
+                            GTModHandler.addCraftingRecipe(
+                                GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 2L),
+                                GTProxy.tBits,
                                 new Object[] { "h", "X", 'X', OrePrefixes.gemFlawless.get(aMaterial) });
 
                             if (aMaterial.contains(SubTag.SMELTING_TO_GEM)) {
-                                GT_ModHandler.addCraftingRecipe(
-                                    GT_Utility.copyAmount(1, aStack),
-                                    GT_Proxy.tBits,
+                                GTModHandler.addCraftingRecipe(
+                                    GTUtility.copyAmount(1, aStack),
+                                    GTProxy.tBits,
                                     new Object[] { "XXX", "XXX", "XXX", 'X', OrePrefixes.nugget.get(aMaterial) });
                             }
 
                             if (aSpecialRecipeReq) {
-                                GT_ModHandler.addCraftingRecipe(
-                                    GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
-                                    GT_Proxy.tBits,
+                                GTModHandler.addCraftingRecipe(
+                                    GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
+                                    GTProxy.tBits,
                                     new Object[] { "X", "m", 'X', OrePrefixes.gem.get(aMaterial) });
                             }
                         }
@@ -259,12 +259,12 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
                     // Laser engraver recipes
                     {
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1L) != null) {
+                        if (GTOreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1L) != null) {
                             is.stackSize = 0;
 
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(3, aStack), is)
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1L))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(3, aStack), is)
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 1L))
                                 .duration(60 * SECONDS)
                                 .eut(TierEU.RECIPE_HV)
                                 .addTo(laserEngraverRecipes);
@@ -276,22 +276,22 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
             case gemChipped -> {
                 // Fuel recipes
                 if (aFuelPower) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .metadata(FUEL_VALUE, aMaterial.mFuelPower / 2)
                         .metadata(FUEL_TYPE, aMaterial.mFuelType)
-                        .addTo(GT_RecipeConstants.Fuel);
+                        .addTo(GTRecipeConstants.Fuel);
                 }
 
                 if (!aNoWorking) {
                     // Lathe recipes
-                    if (GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L) != null
-                        && GT_OreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    if (GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L) != null
+                        && GTOreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, 1L))
+                                GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L),
+                                GTOreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, 1L))
                             .duration(((int) Math.max(aMaterialMass, 1L)) * TICKS)
                             .eut(8)
                             .addTo(latheRecipes);
@@ -300,40 +300,40 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
                     if (aMaterial.mUnificatable && (aMaterial.mMaterialInto == aMaterial)) {
                         // Implosion compressor recipes
                         {
-                            if (GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1) != null) {
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(3, aStack), ItemList.Block_Powderbarrel.get(16))
+                            if (GTOreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1) != null) {
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(3, aStack), ItemList.Block_Powderbarrel.get(16))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(
-                                        GT_Utility.copyAmount(3, aStack),
-                                        GT_ModHandler.getIC2Item("dynamite", 4, null))
+                                        GTUtility.copyAmount(3, aStack),
+                                        GTModHandler.getIC2Item("dynamite", 4, null))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(3, aStack), new ItemStack(Blocks.tnt, 8))
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(3, aStack), new ItemStack(Blocks.tnt, 8))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(
-                                        GT_Utility.copyAmount(3, aStack),
-                                        GT_ModHandler.getIC2Item("industrialTnt", 2))
+                                        GTUtility.copyAmount(3, aStack),
+                                        GTModHandler.getIC2Item("industrialTnt", 2))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
@@ -342,14 +342,14 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
 
                         // Crafting recipes
                         {
-                            GT_ModHandler.addCraftingRecipe(
-                                GT_OreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, 2L),
-                                GT_Proxy.tBits,
+                            GTModHandler.addCraftingRecipe(
+                                GTOreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, 2L),
+                                GTProxy.tBits,
                                 new Object[] { "h", "X", 'X', OrePrefixes.gemFlawed.get(aMaterial) });
                             if (aSpecialRecipeReq) {
-                                GT_ModHandler.addCraftingRecipe(
-                                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L),
-                                    GT_Proxy.tBits,
+                                GTModHandler.addCraftingRecipe(
+                                    GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L),
+                                    GTProxy.tBits,
                                     new Object[] { "X", "m", 'X', OrePrefixes.gemChipped.get(aMaterial) });
                             }
                         }
@@ -358,9 +358,9 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
                 for (ItemStack is : OreDictionary.getOres("craftingLens" + aMaterial.mColor.mName.replace(" ", ""))) { // Engraver
                     is.stackSize = 0;
 
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(3, aStack), is)
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(3, aStack), is)
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 1L))
                         .duration(30 * SECONDS)
                         .eut(30)
                         .addTo(laserEngraverRecipes);
@@ -370,11 +370,11 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
             case gemExquisite -> {
                 // Fuel recipes
                 if (aFuelPower) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .metadata(FUEL_VALUE, aMaterial.mFuelPower * 8)
                         .metadata(FUEL_TYPE, aMaterial.mFuelType)
-                        .addTo(GT_RecipeConstants.Fuel);
+                        .addTo(GTRecipeConstants.Fuel);
                 }
 
                 if (!aNoWorking) {
@@ -382,9 +382,9 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
                         // Crafting recipes
                         {
                             if (aSpecialRecipeReq) {
-                                GT_ModHandler.addCraftingRecipe(
-                                    GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 4L),
-                                    GT_Proxy.tBits,
+                                GTModHandler.addCraftingRecipe(
+                                    GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 4L),
+                                    GTProxy.tBits,
                                     new Object[] { "X", "m", 'X', OrePrefixes.gemExquisite.get(aMaterial) });
                             }
                         }
@@ -393,9 +393,9 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
 
                 // Forge hammer recipes
                 {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(aStack)
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 2L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 2L))
                         .duration(3 * SECONDS + 4 * TICKS)
                         .eut(16)
                         .addTo(hammerRecipes);
@@ -404,22 +404,22 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
             case gemFlawed -> {
                 // fuel recipes
                 if (aFuelPower) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .metadata(FUEL_VALUE, aMaterial.mFuelPower)
                         .metadata(FUEL_TYPE, aMaterial.mFuelType)
-                        .addTo(GT_RecipeConstants.Fuel);
+                        .addTo(GTRecipeConstants.Fuel);
                 }
 
                 if (!aNoWorking) {
                     // Lathe recipes
-                    if (GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L) != null
-                        && GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    if (GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L) != null
+                        && GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 2L),
-                                GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L))
+                                GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 2L),
+                                GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L))
                             .duration(((int) Math.max(aMaterialMass, 1L)) * TICKS)
                             .eut(12)
                             .addTo(latheRecipes);
@@ -428,40 +428,40 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
                     if (aMaterial.mUnificatable && (aMaterial.mMaterialInto == aMaterial)) {
                         // Implosion compressor recipes
                         {
-                            if (GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1) != null) {
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(3, aStack), ItemList.Block_Powderbarrel.get(16))
+                            if (GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1) != null) {
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(3, aStack), ItemList.Block_Powderbarrel.get(16))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(
-                                        GT_Utility.copyAmount(3, aStack),
-                                        GT_ModHandler.getIC2Item("dynamite", 4, null))
+                                        GTUtility.copyAmount(3, aStack),
+                                        GTModHandler.getIC2Item("dynamite", 4, null))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(3, aStack), new ItemStack(Blocks.tnt, 8))
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(3, aStack), new ItemStack(Blocks.tnt, 8))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(
-                                        GT_Utility.copyAmount(3, aStack),
-                                        GT_ModHandler.getIC2Item("industrialTnt", 2))
+                                        GTUtility.copyAmount(3, aStack),
+                                        GTModHandler.getIC2Item("industrialTnt", 2))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
@@ -470,22 +470,22 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
 
                         // Crafting recipes
                         {
-                            GT_ModHandler.addCraftingRecipe(
-                                GT_OreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 2L),
-                                GT_Proxy.tBits,
+                            GTModHandler.addCraftingRecipe(
+                                GTOreDictUnificator.get(OrePrefixes.gemFlawed, aMaterial, 2L),
+                                GTProxy.tBits,
                                 new Object[] { "h", "X", 'X', OrePrefixes.gem.get(aMaterial) });
                             if (aSpecialRecipeReq) {
-                                GT_ModHandler.addCraftingRecipe(
-                                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 2L),
-                                    GT_Proxy.tBits,
+                                GTModHandler.addCraftingRecipe(
+                                    GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 2L),
+                                    GTProxy.tBits,
                                     new Object[] { "X", "m", 'X', OrePrefixes.gemFlawed.get(aMaterial) });
                             }
                         }
                     }
                 }
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(aStack)
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, 2L))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gemChipped, aMaterial, 2L))
                     .duration(3 * SECONDS + 4 * TICKS)
                     .eut(16)
                     .addTo(hammerRecipes);
@@ -494,9 +494,9 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
 
                     is.stackSize = 0;
 
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(3, aStack), is)
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(3, aStack), is)
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L))
                         .duration(30 * SECONDS)
                         .eut(TierEU.RECIPE_MV)
                         .addTo(laserEngraverRecipes);
@@ -507,22 +507,22 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
 
                 // Fuel recipes
                 if (aFuelPower) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .metadata(FUEL_VALUE, aMaterial.mFuelPower * 4)
                         .metadata(FUEL_TYPE, aMaterial.mFuelType)
-                        .addTo(GT_RecipeConstants.Fuel);
+                        .addTo(GTRecipeConstants.Fuel);
                 }
 
                 if (!aNoWorking) {
                     // Lathe recipes
-                    if (GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L) != null
-                        && GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    if (GTOreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L) != null
+                        && GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L),
-                                GT_OreDictUnificator.getDust(
+                                GTOreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L),
+                                GTOreDictUnificator.getDust(
                                     aMaterial,
                                     aPrefix.mMaterialAmount - OrePrefixes.stickLong.mMaterialAmount))
                             .duration(((int) Math.max(aMaterialMass * 5L, 1L)) * TICKS)
@@ -533,40 +533,40 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
                     if (aMaterial.mUnificatable && (aMaterial.mMaterialInto == aMaterial)) {
                         // Implosion compressor recipes
                         {
-                            if (GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1) != null) {
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(3, aStack), ItemList.Block_Powderbarrel.get(16))
+                            if (GTOreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1) != null) {
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(3, aStack), ItemList.Block_Powderbarrel.get(16))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(
-                                        GT_Utility.copyAmount(3, aStack),
-                                        GT_ModHandler.getIC2Item("dynamite", 4, null))
+                                        GTUtility.copyAmount(3, aStack),
+                                        GTModHandler.getIC2Item("dynamite", 4, null))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(3, aStack), new ItemStack(Blocks.tnt, 8))
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(3, aStack), new ItemStack(Blocks.tnt, 8))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(
-                                        GT_Utility.copyAmount(3, aStack),
-                                        GT_ModHandler.getIC2Item("industrialTnt", 2))
+                                        GTUtility.copyAmount(3, aStack),
+                                        GTModHandler.getIC2Item("industrialTnt", 2))
                                     .itemOutputs(
-                                        GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1),
-                                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
+                                        GTOreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1),
+                                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 2))
                                     .duration(1 * SECONDS)
                                     .eut(TierEU.RECIPE_LV)
                                     .addTo(implosionRecipes);
@@ -575,22 +575,22 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
 
                         // Crafting recipes
                         {
-                            GT_ModHandler.addCraftingRecipe(
-                                GT_OreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 2L),
-                                GT_Proxy.tBits,
+                            GTModHandler.addCraftingRecipe(
+                                GTOreDictUnificator.get(OrePrefixes.gemFlawless, aMaterial, 2L),
+                                GTProxy.tBits,
                                 new Object[] { "h", "X", 'X', OrePrefixes.gemExquisite.get(aMaterial) });
                             if (aSpecialRecipeReq) {
-                                GT_ModHandler.addCraftingRecipe(
-                                    GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 2L),
-                                    GT_Proxy.tBits,
+                                GTModHandler.addCraftingRecipe(
+                                    GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 2L),
+                                    GTProxy.tBits,
                                     new Object[] { "X", "m", 'X', OrePrefixes.gemFlawless.get(aMaterial) });
                             }
                         }
                     }
                 }
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(aStack)
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 2L))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 2L))
                     .duration(3 * SECONDS + 4 * TICKS)
                     .eut(16)
                     .addTo(hammerRecipes);
@@ -598,9 +598,9 @@ public class ProcessingGem implements gregtech.api.interfaces.IOreRecipeRegistra
                 for (ItemStack is : OreDictionary.getOres("craftingLens" + aMaterial.mColor.mName.replace(" ", ""))) { // Engraver
 
                     is.stackSize = 0;
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(3, aStack), is)
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(3, aStack), is)
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1L))
                         .duration(2 * MINUTES)
                         .eut(TierEU.RECIPE_EV)
                         .addTo(laserEngraverRecipes);
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot.java
index 0be31a7e1d..7d27c2ee16 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingIngot.java
@@ -4,27 +4,27 @@ import static gregtech.api.recipe.RecipeMaps.benderRecipes;
 import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes;
 import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
 import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE;
+import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
 import gregtech.api.enums.ToolDictNames;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeConstants;
-import gregtech.api.util.GT_RecipeRegistrator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeConstants;
+import gregtech.api.util.GTRecipeRegistrator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -51,19 +51,19 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
             case ingot -> {
                 // Fuel recipe
                 if (aMaterial.mFuelPower > 0) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .metadata(FUEL_VALUE, aMaterial.mFuelPower)
                         .metadata(FUEL_TYPE, aMaterial.mFuelType)
-                        .addTo(GT_RecipeConstants.Fuel);
+                        .addTo(GTRecipeConstants.Fuel);
                 }
                 if (aMaterial.mStandardMoltenFluid != null
                     && !(aMaterial == Materials.AnnealedCopper || aMaterial == Materials.WroughtIron)) {
                     // Fluid solidifier recipes
 
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(ItemList.Shape_Mold_Ingot.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L))
                         .fluidInputs(aMaterial.getMolten(144L))
                         .duration(1 * SECONDS + 12 * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8))
@@ -71,12 +71,12 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
                 }
                 // Reverse recipes
                 {
-                    GT_RecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
-                    GT_RecipeRegistrator
+                    GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
+                    GTRecipeRegistrator
                         .registerReverseMacerating(aStack, aMaterial, aPrefix.mMaterialAmount, null, null, null, false);
                     if (aMaterial.mSmeltInto.mArcSmeltInto != aMaterial) {
-                        GT_RecipeRegistrator.registerReverseArcSmelting(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTRecipeRegistrator.registerReverseArcSmelting(
+                            GTUtility.copyAmount(1, aStack),
                             aMaterial,
                             aPrefix.mMaterialAmount,
                             null,
@@ -84,26 +84,26 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
                             null);
                     }
                 }
-                ItemStack tStack = GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L);
+                ItemStack tStack = GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L);
                 if ((tStack != null) && ((aMaterial.mBlastFurnaceRequired) || aNoSmelting)) {
-                    GT_ModHandler.removeFurnaceSmelting(tStack);
+                    GTModHandler.removeFurnaceSmelting(tStack);
                 }
                 if (aMaterial.mUnificatable && (aMaterial.mMaterialInto == aMaterial)
                     && !aMaterial.contains(SubTag.NO_WORKING)
                     && !aMaterial.contains(SubTag.SMELTING_TO_GEM)
                     && aMaterial.contains(SubTag.MORTAR_GRINDABLE)) {
-                    GT_ModHandler.addShapelessCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    GTModHandler.addShapelessCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { ToolDictNames.craftingToolMortar, OrePrefixes.ingot.get(aMaterial) });
                 }
                 if (!aNoSmashing) {
                     // Forge hammer recipes
                     if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV
-                        && GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(3, aStack))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 2L))
+                        && GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(3, aStack))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 2L))
                             .duration(Math.max(aMaterialMass, 1L))
                             .eut(calculateRecipeEU(aMaterial, 16))
                             .addTo(hammerRecipes);
@@ -113,64 +113,64 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
 
                     // Bender recipes
                     {
-                        if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                        if (GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 24))
                                 .addTo(benderRecipes);
                         }
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(2, aStack), GT_Utility.getIntegratedCircuit(2))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L))
+                        if (GTOreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(2, aStack), GTUtility.getIntegratedCircuit(2))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass * 2L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 96))
                                 .addTo(benderRecipes);
                         }
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(3, aStack), GT_Utility.getIntegratedCircuit(3))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L))
+                        if (GTOreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(3, aStack), GTUtility.getIntegratedCircuit(3))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass * 3L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 96))
                                 .addTo(benderRecipes);
                         }
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(4, aStack), GT_Utility.getIntegratedCircuit(4))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L))
+                        if (GTOreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(4, aStack), GTUtility.getIntegratedCircuit(4))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass * 4L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 96))
                                 .addTo(benderRecipes);
                         }
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(5, aStack), GT_Utility.getIntegratedCircuit(5))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L))
+                        if (GTOreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(5, aStack), GTUtility.getIntegratedCircuit(5))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass * 5L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 96))
                                 .addTo(benderRecipes);
                         }
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(9, aStack), GT_Utility.getIntegratedCircuit(9))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L))
+                        if (GTOreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(9, aStack), GTUtility.getIntegratedCircuit(9))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L))
                                 .duration(Math.max(aMaterialMass * 9L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 96))
                                 .addTo(benderRecipes);
                         }
 
-                        if (GT_OreDictUnificator.get(OrePrefixes.foil, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(10))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.foil, aMaterial, 4L))
+                        if (GTOreDictUnificator.get(OrePrefixes.foil, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(10))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.foil, aMaterial, 4L))
                                 .duration(Math.max(aMaterialMass * 2L, 1L))
                                 .eut(calculateRecipeEU(aMaterial, 24))
                                 .addTo(benderRecipes);
@@ -182,16 +182,16 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
                 if (!aNoSmashing || aStretchy) {
                     // bender recipes
                     {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L))
                             .duration(Math.max(aMaterialMass, 1L))
                             .eut(calculateRecipeEU(aMaterial, 96))
                             .addTo(benderRecipes);
 
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(2, aStack), GT_Utility.getIntegratedCircuit(2))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(2, aStack), GTUtility.getIntegratedCircuit(2))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L))
                             .duration(Math.max(aMaterialMass * 2L, 1L))
                             .eut(calculateRecipeEU(aMaterial, 96))
                             .addTo(benderRecipes);
@@ -199,9 +199,9 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
 
                     // Enable crafting with hammer if tier is < IV.
                     if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV && aSpecialRecipeReq) {
-                        GT_ModHandler.addCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.ingotDouble, aMaterial, 1L),
-                            GT_Proxy.tBits,
+                        GTModHandler.addCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.ingotDouble, aMaterial, 1L),
+                            GTProxy.tBits,
                             new Object[] { "I", "I", "h", 'I', OrePrefixes.ingot.get(aMaterial) });
                     }
                 }
@@ -210,25 +210,25 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
                 if (!aNoSmashing || aStretchy) {
                     // Bender recipes
                     {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateTriple, aMaterial, 1L))
                             .duration(Math.max(aMaterialMass, 1L))
                             .eut(calculateRecipeEU(aMaterial, 96))
                             .addTo(benderRecipes);
 
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(3, aStack), GT_Utility.getIntegratedCircuit(3))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(3, aStack), GTUtility.getIntegratedCircuit(3))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L))
                             .duration(Math.max(aMaterialMass * 3L, 1L))
                             .eut(calculateRecipeEU(aMaterial, 96))
                             .addTo(benderRecipes);
                     }
 
                     if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV && aSpecialRecipeReq) {
-                        GT_ModHandler.addCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.ingotTriple, aMaterial, 1L),
-                            GT_Proxy.tBits,
+                        GTModHandler.addCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.ingotTriple, aMaterial, 1L),
+                            GTProxy.tBits,
                             new Object[] { "I", "B", "h", 'I', OrePrefixes.ingotDouble.get(aMaterial), 'B',
                                 OrePrefixes.ingot.get(aMaterial) });
                     }
@@ -238,9 +238,9 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
                 if (!aNoSmashing || aStretchy) {
                     // Bender recipes
                     {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L))
                             .duration(Math.max(aMaterialMass, 1L))
                             .eut(calculateRecipeEU(aMaterial, 96))
                             .addTo(benderRecipes);
@@ -248,9 +248,9 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
 
                     // If tier < IV add manual crafting.
                     if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV && aSpecialRecipeReq) {
-                        GT_ModHandler.addCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.ingotQuadruple, aMaterial, 1L),
-                            GT_Proxy.tBits,
+                        GTModHandler.addCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.ingotQuadruple, aMaterial, 1L),
+                            GTProxy.tBits,
                             new Object[] { "I", "B", "h", 'I', OrePrefixes.ingotTriple.get(aMaterial), 'B',
                                 OrePrefixes.ingot.get(aMaterial) });
                     }
@@ -260,9 +260,9 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
                 if (!aNoSmashing || aStretchy) {
                     // Bender recipes
                     {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateQuintuple, aMaterial, 1L))
                             .duration(Math.max(aMaterialMass, 1L))
                             .eut(calculateRecipeEU(aMaterial, 96))
                             .addTo(benderRecipes);
@@ -270,9 +270,9 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
 
                     // Crafting recipes
                     if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV && aSpecialRecipeReq) {
-                        GT_ModHandler.addCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.ingotQuintuple, aMaterial, 1L),
-                            GT_Proxy.tBits,
+                        GTModHandler.addCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.ingotQuintuple, aMaterial, 1L),
+                            GTProxy.tBits,
                             new Object[] { "I", "B", "h", 'I', OrePrefixes.ingotQuadruple.get(aMaterial), 'B',
                                 OrePrefixes.ingot.get(aMaterial) });
                     }
@@ -280,11 +280,11 @@ public class ProcessingIngot implements gregtech.api.interfaces.IOreRecipeRegist
             }
             case ingotHot -> {
                 if (aMaterial.mAutoGenerateVacuumFreezerRecipes
-                    && GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
+                    && GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
                     // Vacuum freezer recipes
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L))
                         .duration(((int) Math.max(aMaterialMass * 3L, 1L)) * TICKS)
                         .eut(TierEU.RECIPE_MV)
                         .addTo(vacuumFreezerRecipes);
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingItem.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingItem.java
index 6a132e2dba..cd453943d2 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingItem.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingItem.java
@@ -5,7 +5,7 @@ import net.minecraft.item.ItemStack;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.objects.ItemData;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class ProcessingItem implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -16,29 +16,29 @@ public class ProcessingItem implements gregtech.api.interfaces.IOreRecipeRegistr
     @Override
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
-        if (GT_OreDictUnificator.getItemData(aStack) == null && !aOreDictName.equals("itemCertusQuartz")
+        if (GTOreDictUnificator.getItemData(aStack) == null && !aOreDictName.equals("itemCertusQuartz")
             && !aOreDictName.equals("itemNetherQuartz")) {
             switch (aOreDictName) {
                 case "itemSilicon":
-                    GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Silicon, 3628800L));
+                    GTOreDictUnificator.addItemData(aStack, new ItemData(Materials.Silicon, 3628800L));
                 case "itemWheat":
-                    GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Wheat, 3628800L));
+                    GTOreDictUnificator.addItemData(aStack, new ItemData(Materials.Wheat, 3628800L));
                 case "itemManganese":
-                    GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Manganese, 3628800L));
+                    GTOreDictUnificator.addItemData(aStack, new ItemData(Materials.Manganese, 3628800L));
                 case "itemSalt":
-                    GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Salt, 3628800L));
+                    GTOreDictUnificator.addItemData(aStack, new ItemData(Materials.Salt, 3628800L));
                 case "itemMagnesium":
-                    GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Magnesium, 3628800L));
+                    GTOreDictUnificator.addItemData(aStack, new ItemData(Materials.Magnesium, 3628800L));
                 case "itemPhosphorite":
-                    GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.TricalciumPhosphate, 3628800L));
+                    GTOreDictUnificator.addItemData(aStack, new ItemData(Materials.TricalciumPhosphate, 3628800L));
                 case "itemSulfur":
-                    GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Sulfur, 3628800L));
+                    GTOreDictUnificator.addItemData(aStack, new ItemData(Materials.Sulfur, 3628800L));
                 case "itemAluminum":
-                    GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Aluminium, 3628800L));
+                    GTOreDictUnificator.addItemData(aStack, new ItemData(Materials.Aluminium, 3628800L));
                 case "itemSaltpeter":
-                    GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Saltpeter, 3628800L));
+                    GTOreDictUnificator.addItemData(aStack, new ItemData(Materials.Saltpeter, 3628800L));
                 case "itemUranium":
-                    GT_OreDictUnificator.addItemData(aStack, new ItemData(Materials.Uranium, 3628800L));
+                    GTOreDictUnificator.addItemData(aStack, new ItemData(Materials.Uranium, 3628800L));
             }
         }
     }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingLens.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingLens.java
index c3f73f7966..9576262818 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingLens.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingLens.java
@@ -2,20 +2,21 @@ package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.compressorRecipes;
 import static gregtech.api.recipe.RecipeMaps.latheRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.GregTech_API;
-import gregtech.api.enums.GT_Values;
+import gregtech.api.GregTechAPI;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.Textures;
 import gregtech.api.enums.TierEU;
 import gregtech.api.interfaces.ITexture;
 import gregtech.api.render.TextureFactory;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeBuilder;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeBuilder;
+import gregtech.common.covers.CoverLens;
 
 @SuppressWarnings("RedundantLabeledSwitchRuleCodeBlock")
 public class ProcessingLens implements gregtech.api.interfaces.IOreRecipeRegistrator {
@@ -29,56 +30,56 @@ public class ProcessingLens implements gregtech.api.interfaces.IOreRecipeRegistr
         ItemStack aStack) {
         switch (aMaterial.mName) {
             case "Diamond", "Glass" -> {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L))
                     .duration(1 * MINUTES)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(latheRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1L))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.lens, aMaterial, 3L),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.lens, aMaterial, 3L),
+                        GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
                     .duration(2 * MINUTES)
                     .eut(16)
                     .addTo(latheRecipes);
             }
             case "ChromaticGlass" -> {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 16L))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 16L))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L))
                     .duration(10 * MINUTES)
                     .eut(TierEU.RECIPE_UHV)
                     .addTo(compressorRecipes);
             }
             default -> {
-                if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
-                    GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder();
-                    recipeBuilder.itemInputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L));
-                    if (GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L) == null) {
-                        recipeBuilder.itemOutputs(GT_OreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L));
+                if (GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
+                    GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder();
+                    recipeBuilder.itemInputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L));
+                    if (GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L) == null) {
+                        recipeBuilder.itemOutputs(GTOreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L));
                     } else {
                         recipeBuilder.itemOutputs(
-                            GT_OreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L));
+                            GTOreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial, 1L));
                     }
                     recipeBuilder.duration(1 * MINUTES)
                         .eut(TierEU.RECIPE_MV)
                         .addTo(latheRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1L) != null) {
-                    GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder();
-                    recipeBuilder.itemInputs(GT_OreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1L));
-                    if (GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L) == null) {
-                        recipeBuilder.itemOutputs(GT_OreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L));
+                if (GTOreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1L) != null) {
+                    GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder();
+                    recipeBuilder.itemInputs(GTOreDictUnificator.get(OrePrefixes.gemExquisite, aMaterial, 1L));
+                    if (GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L) == null) {
+                        recipeBuilder.itemOutputs(GTOreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L));
                     } else {
                         recipeBuilder.itemOutputs(
-                            GT_OreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 2L));
+                            GTOreDictUnificator.get(OrePrefixes.lens, aMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 2L));
                     }
                     recipeBuilder.duration(2 * MINUTES)
                         .eut(TierEU.RECIPE_LV)
@@ -86,10 +87,10 @@ public class ProcessingLens implements gregtech.api.interfaces.IOreRecipeRegistr
                 }
                 final ITexture lensCoverTexture = TextureFactory
                     .of(Textures.BlockIcons.OVERLAY_LENS, aMaterial.mRGBa, false);
-                GregTech_API.registerCover(
+                GregTechAPI.registerCover(
                     aStack,
                     TextureFactory.of(Textures.BlockIcons.MACHINE_CASINGS[2][0], lensCoverTexture),
-                    new gregtech.common.covers.GT_Cover_Lens(aMaterial.mColor.mIndex, lensCoverTexture));
+                    new CoverLens(aMaterial.mColor.mIndex, lensCoverTexture));
             }
         }
     }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingLog.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingLog.java
index 5985e24dc7..f60987ec9e 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingLog.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingLog.java
@@ -9,21 +9,21 @@ import static gregtech.api.recipe.RecipeMaps.extractorRecipes;
 import static gregtech.api.recipe.RecipeMaps.latheRecipes;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
 import static gregtech.api.recipe.RecipeMaps.pyrolyseRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.GT_Mod;
-import gregtech.api.enums.GT_Values;
+import gregtech.GTMod;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingLog implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -35,86 +35,85 @@ public class ProcessingLog implements gregtech.api.interfaces.IOreRecipeRegistra
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
         if (aOreDictName.equals("logRubber")) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(2))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(
                     ItemList.IC2_Resin.get(1L),
-                    GT_ModHandler.getIC2Item("plantBall", 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L))
+                    GTModHandler.getIC2Item("plantBall", 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L))
                 .outputChances(5000, 3750, 2500, 2500)
                 .fluidOutputs(Materials.Methane.getGas(60L))
                 .duration(10 * SECONDS)
                 .eut(20)
                 .addTo(centrifugeRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 1L))
                 .duration(15 * SECONDS)
                 .eut(2)
                 .addTo(extractorRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 6L), ItemList.IC2_Resin.get(1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 6L), ItemList.IC2_Resin.get(1L))
                 .outputChances(10000, 3300)
                 .duration(20 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
         } else {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
                 .fluidOutputs(Materials.Methane.getGas(60L))
                 .duration(10 * SECONDS)
                 .eut(20)
                 .addTo(centrifugeRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 6L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 6L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L))
                 .outputChances(10000, 8000)
                 .duration(20 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
         }
 
-        GT_ModHandler.addCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Wood, 2L),
-            gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { "sLf", 'L', GT_Utility.copyAmount(1, aStack) });
+        GTModHandler.addCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Wood, 2L),
+            GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { "sLf", 'L', GTUtility.copyAmount(1, aStack) });
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Wood, 4L),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
+                GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Wood, 4L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
             .duration(8 * SECONDS)
             .eut(7)
             .addTo(latheRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.FR_Stick.get(1L))
             .fluidInputs(Materials.SeedOil.getFluid(50L))
             .duration(16 * TICKS)
             .eut(7)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(8, aStack), GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(8, aStack), GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.FR_Casing_Impregnated.get(1L))
             .fluidInputs(Materials.SeedOil.getFluid(250L))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
-            .itemOutputs(GT_ModHandler.getModItem(Railcraft.ID, "cube", 1L, 8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
+            .itemOutputs(GTModHandler.getModItem(Railcraft.ID, "cube", 1L, 8))
             .fluidInputs(Materials.Creosote.getFluid(750L))
             .duration(16 * TICKS)
             .eut(TierEU.ULV)
@@ -123,172 +122,171 @@ public class ProcessingLog implements gregtech.api.interfaces.IOreRecipeRegistra
         short aMeta = (short) aStack.getItemDamage();
 
         if (aMeta == Short.MAX_VALUE) {
-            if ((GT_Utility.areStacksEqual(
-                GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(1, aStack), false, null),
+            if ((GTUtility.areStacksEqual(
+                GTModHandler.getSmeltingOutput(GTUtility.copyAmount(1, aStack), false, null),
                 new ItemStack(Items.coal, 1, 1)))) {
                 addPyrolyeOvenRecipes(aStack);
-                GT_ModHandler.removeFurnaceSmelting(GT_Utility.copyAmount(1, aStack));
+                GTModHandler.removeFurnaceSmelting(GTUtility.copyAmount(1, aStack));
             }
             for (int i = 0; i < 32767; i++) {
-                if ((GT_Utility.areStacksEqual(
-                    GT_ModHandler.getSmeltingOutput(new ItemStack(aStack.getItem(), 1, i), false, null),
+                if ((GTUtility.areStacksEqual(
+                    GTModHandler.getSmeltingOutput(new ItemStack(aStack.getItem(), 1, i), false, null),
                     new ItemStack(Items.coal, 1, 1)))) {
                     addPyrolyeOvenRecipes(aStack);
-                    GT_ModHandler.removeFurnaceSmelting(new ItemStack(aStack.getItem(), 1, i));
+                    GTModHandler.removeFurnaceSmelting(new ItemStack(aStack.getItem(), 1, i));
                 }
-                ItemStack tStack = GT_ModHandler.getRecipeOutput(new ItemStack(aStack.getItem(), 1, i));
+                ItemStack tStack = GTModHandler.getRecipeOutput(new ItemStack(aStack.getItem(), 1, i));
                 if (tStack == null) {
                     if (i >= 16) {
                         break;
                     }
                 } else {
-                    ItemStack tPlanks = GT_Utility.copyOrNull(tStack);
+                    ItemStack tPlanks = GTUtility.copyOrNull(tStack);
                     if (tPlanks != null) {
                         tPlanks.stackSize = (tPlanks.stackSize * 3 / 2);
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(new ItemStack(aStack.getItem(), 1, i))
                             .itemOutputs(
-                                GT_Utility.copyOrNull(tPlanks),
-                                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L))
+                                GTUtility.copyOrNull(tPlanks),
+                                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L))
                             .fluidInputs(Materials.Lubricant.getFluid(1L))
                             .duration(10 * SECONDS)
                             .eut(8)
                             .addTo(cutterRecipes);
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(new ItemStack(aStack.getItem(), 1, i))
                             .itemOutputs(
-                                GT_Utility.copyAmount(
-                                    GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
+                                GTUtility.copyAmount(
+                                    GTMod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
                                     tStack),
-                                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
+                                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
                             .fluidInputs(Materials.Water.getFluid(Math.min(1000, 200 * 8 / 320)))
                             .duration(20 * SECONDS)
                             .eut(8)
                             .addTo(cutterRecipes);
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(new ItemStack(aStack.getItem(), 1, i))
                             .itemOutputs(
-                                GT_Utility.copyAmount(
-                                    GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
+                                GTUtility.copyAmount(
+                                    GTMod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
                                     tStack),
-                                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
-                            .fluidInputs(GT_ModHandler.getDistilledWater(3))
+                                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
+                            .fluidInputs(GTModHandler.getDistilledWater(3))
                             .duration(20 * SECONDS)
                             .eut(8)
                             .addTo(cutterRecipes);
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(new ItemStack(aStack.getItem(), 1, i))
                             .itemOutputs(
-                                GT_Utility.copyAmount(
-                                    GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
+                                GTUtility.copyAmount(
+                                    GTMod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
                                     tStack),
-                                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
+                                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
                             .fluidInputs(Materials.Lubricant.getFluid(1))
                             .duration(10 * SECONDS)
                             .eut(8)
                             .addTo(cutterRecipes);
-                        GT_ModHandler.removeRecipeDelayed(new ItemStack(aStack.getItem(), 1, i));
-                        GT_ModHandler.addCraftingRecipe(
-                            GT_Utility.copyAmount(
-                                GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
+                        GTModHandler.removeRecipeDelayed(new ItemStack(aStack.getItem(), 1, i));
+                        GTModHandler.addCraftingRecipe(
+                            GTUtility.copyAmount(
+                                GTMod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
                                 tStack),
-                            GT_ModHandler.RecipeBits.BUFFERED,
+                            GTModHandler.RecipeBits.BUFFERED,
                             new Object[] { "s", "L", 'L', new ItemStack(aStack.getItem(), 1, i) });
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_Utility
-                                .copyAmount(tStack.stackSize / (GT_Mod.gregtechproxy.mNerfedWoodPlank ? 2 : 1), tStack),
-                            GT_ModHandler.RecipeBits.BUFFERED,
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTUtility
+                                .copyAmount(tStack.stackSize / (GTMod.gregtechproxy.mNerfedWoodPlank ? 2 : 1), tStack),
+                            GTModHandler.RecipeBits.BUFFERED,
                             new Object[] { new ItemStack(aStack.getItem(), 1, i) });
                     }
                 }
             }
         } else {
-            if ((GT_Utility.areStacksEqual(
-                GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(1, aStack), false, null),
+            if ((GTUtility.areStacksEqual(
+                GTModHandler.getSmeltingOutput(GTUtility.copyAmount(1, aStack), false, null),
                 new ItemStack(Items.coal, 1, 1)))) {
                 addPyrolyeOvenRecipes(aStack);
-                GT_ModHandler.removeFurnaceSmelting(GT_Utility.copyAmount(1, aStack));
+                GTModHandler.removeFurnaceSmelting(GTUtility.copyAmount(1, aStack));
             }
-            ItemStack tStack = GT_ModHandler.getRecipeOutput(GT_Utility.copyAmount(1, aStack));
+            ItemStack tStack = GTModHandler.getRecipeOutput(GTUtility.copyAmount(1, aStack));
             if (tStack != null) {
-                ItemStack tPlanks = GT_Utility.copyOrNull(tStack);
+                ItemStack tPlanks = GTUtility.copyOrNull(tStack);
                 if (tPlanks != null) {
                     tPlanks.stackSize = (tPlanks.stackSize * 3 / 2);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .itemOutputs(
-                            GT_Utility.copyOrNull(tPlanks),
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L))
+                            GTUtility.copyOrNull(tPlanks),
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L))
                         .fluidInputs(Materials.Lubricant.getFluid(1L))
                         .duration(10 * SECONDS)
                         .eut(8)
                         .addTo(cutterRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .itemOutputs(
-                            GT_Utility.copyAmount(
-                                GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
+                            GTUtility.copyAmount(
+                                GTMod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
                                 tStack),
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
                         .fluidInputs(Materials.Water.getFluid(Math.min(1000, 200 * 8 / 320)))
                         .duration(20 * SECONDS)
                         .eut(8)
                         .addTo(cutterRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .itemOutputs(
-                            GT_Utility.copyAmount(
-                                GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
+                            GTUtility.copyAmount(
+                                GTMod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
                                 tStack),
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
-                        .fluidInputs(GT_ModHandler.getDistilledWater(3))
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
+                        .fluidInputs(GTModHandler.getDistilledWater(3))
                         .duration(20 * SECONDS)
                         .eut(8)
                         .addTo(cutterRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
                         .itemOutputs(
-                            GT_Utility.copyAmount(
-                                GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
+                            GTUtility.copyAmount(
+                                GTMod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
                                 tStack),
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L))
                         .fluidInputs(Materials.Lubricant.getFluid(1))
                         .duration(10 * SECONDS)
                         .eut(8)
                         .addTo(cutterRecipes);
-                    GT_ModHandler.removeRecipeDelayed(GT_Utility.copyAmount(1, aStack));
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_Utility.copyAmount(
-                            GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
+                    GTModHandler.removeRecipeDelayed(GTUtility.copyAmount(1, aStack));
+                    GTModHandler.addCraftingRecipe(
+                        GTUtility.copyAmount(
+                            GTMod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
                             tStack),
-                        new Object[] { "s", "L", 'L', GT_Utility.copyAmount(1, aStack) });
-                    GT_ModHandler.addShapelessCraftingRecipe(
-                        GT_Utility
-                            .copyAmount(tStack.stackSize / (GT_Mod.gregtechproxy.mNerfedWoodPlank ? 2 : 1), tStack),
-                        new Object[] { GT_Utility.copyAmount(1, aStack) });
+                        new Object[] { "s", "L", 'L', GTUtility.copyAmount(1, aStack) });
+                    GTModHandler.addShapelessCraftingRecipe(
+                        GTUtility.copyAmount(tStack.stackSize / (GTMod.gregtechproxy.mNerfedWoodPlank ? 2 : 1), tStack),
+                        new Object[] { GTUtility.copyAmount(1, aStack) });
                 }
             }
         }
 
-        if ((GT_Utility.areStacksEqual(
-            GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(1, aStack), false, null),
+        if ((GTUtility.areStacksEqual(
+            GTModHandler.getSmeltingOutput(GTUtility.copyAmount(1, aStack), false, null),
             new ItemStack(Items.coal, 1, 1)))) {
             addPyrolyeOvenRecipes(aStack);
-            GT_ModHandler.removeFurnaceSmelting(GT_Utility.copyAmount(1, aStack));
+            GTModHandler.removeFurnaceSmelting(GTUtility.copyAmount(1, aStack));
         }
     }
 
     public static void addPyrolyeOvenRecipes(ItemStack logStack) {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, logStack), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, logStack), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Charcoal.getGems(20))
             .fluidOutputs(Materials.Creosote.getFluid(4000))
             .duration(32 * SECONDS)
             .eut(64)
             .noOptimize()
             .addTo(pyrolyseRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, logStack), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, logStack), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Charcoal.getGems(20))
             .fluidInputs(Materials.Nitrogen.getGas(1000))
             .fluidOutputs(Materials.Creosote.getFluid(4000))
@@ -296,16 +294,16 @@ public class ProcessingLog implements gregtech.api.interfaces.IOreRecipeRegistra
             .eut(96)
             .noOptimize()
             .addTo(pyrolyseRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, logStack), GT_Utility.getIntegratedCircuit(3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, logStack), GTUtility.getIntegratedCircuit(3))
             .itemOutputs(Materials.Charcoal.getGems(20))
             .fluidOutputs(Materials.CharcoalByproducts.getGas(4000))
             .duration(32 * SECONDS)
             .eut(64)
             .noOptimize()
             .addTo(pyrolyseRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, logStack), GT_Utility.getIntegratedCircuit(4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, logStack), GTUtility.getIntegratedCircuit(4))
             .itemOutputs(Materials.Charcoal.getGems(20))
             .fluidInputs(Materials.Nitrogen.getGas(1000))
             .fluidOutputs(Materials.CharcoalByproducts.getGas(4000))
@@ -313,16 +311,16 @@ public class ProcessingLog implements gregtech.api.interfaces.IOreRecipeRegistra
             .eut(96)
             .noOptimize()
             .addTo(pyrolyseRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, logStack), GT_Utility.getIntegratedCircuit(5))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, logStack), GTUtility.getIntegratedCircuit(5))
             .itemOutputs(Materials.Charcoal.getGems(20))
             .fluidOutputs(Materials.WoodGas.getGas(1500))
             .duration(32 * SECONDS)
             .eut(64)
             .noOptimize()
             .addTo(pyrolyseRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, logStack), GT_Utility.getIntegratedCircuit(6))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, logStack), GTUtility.getIntegratedCircuit(6))
             .itemOutputs(Materials.Charcoal.getGems(20))
             .fluidInputs(Materials.Nitrogen.getGas(1000))
             .fluidOutputs(Materials.WoodGas.getGas(1500))
@@ -330,16 +328,16 @@ public class ProcessingLog implements gregtech.api.interfaces.IOreRecipeRegistra
             .eut(96)
             .noOptimize()
             .addTo(pyrolyseRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, logStack), GT_Utility.getIntegratedCircuit(7))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, logStack), GTUtility.getIntegratedCircuit(7))
             .itemOutputs(Materials.Charcoal.getGems(20))
             .fluidOutputs(Materials.WoodVinegar.getFluid(3000))
             .duration(32 * SECONDS)
             .eut(64)
             .noOptimize()
             .addTo(pyrolyseRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, logStack), GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, logStack), GTUtility.getIntegratedCircuit(8))
             .itemOutputs(Materials.Charcoal.getGems(20))
             .fluidInputs(Materials.Nitrogen.getGas(1000))
             .fluidOutputs(Materials.WoodVinegar.getFluid(3000))
@@ -347,16 +345,16 @@ public class ProcessingLog implements gregtech.api.interfaces.IOreRecipeRegistra
             .eut(96)
             .noOptimize()
             .addTo(pyrolyseRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, logStack), GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, logStack), GTUtility.getIntegratedCircuit(9))
             .itemOutputs(Materials.Charcoal.getGems(20))
             .fluidOutputs(Materials.WoodTar.getFluid(1500))
             .duration(32 * SECONDS)
             .eut(64)
             .noOptimize()
             .addTo(pyrolyseRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, logStack), GT_Utility.getIntegratedCircuit(10))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, logStack), GTUtility.getIntegratedCircuit(10))
             .itemOutputs(Materials.Charcoal.getGems(20))
             .fluidInputs(Materials.Nitrogen.getGas(1000))
             .fluidOutputs(Materials.WoodTar.getFluid(1500))
@@ -364,8 +362,8 @@ public class ProcessingLog implements gregtech.api.interfaces.IOreRecipeRegistra
             .eut(96)
             .noOptimize()
             .addTo(pyrolyseRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, logStack), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, logStack), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Ash.getDust(4))
             .fluidOutputs(Materials.OilHeavy.getFluid(200))
             .duration(16 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java
index 8d7ca9e518..624730af3e 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingNugget.java
@@ -2,23 +2,23 @@ package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes;
 import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
 import gregtech.api.recipe.RecipeCategories;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeRegistrator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeRegistrator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingNugget implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -31,21 +31,21 @@ public class ProcessingNugget implements gregtech.api.interfaces.IOreRecipeRegis
         ItemStack aStack) {
 
         if (aMaterial.contains(SubTag.SMELTING_TO_GEM)
-            && GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial.mSmeltInto, 1L) != null) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(9, aStack), ItemList.Shape_Mold_Ball.get(0L))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial.mSmeltInto, 1L))
+            && GTOreDictUnificator.get(OrePrefixes.gem, aMaterial.mSmeltInto, 1L) != null) {
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(9, aStack), ItemList.Shape_Mold_Ball.get(0L))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, aMaterial.mSmeltInto, 1L))
                 .duration(10 * SECONDS)
                 .eut(calculateRecipeEU(aMaterial, 2))
                 .addTo(alloySmelterRecipes);
         }
 
         if ((!aMaterial.contains(SubTag.SMELTING_TO_GEM))
-            && GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L) != null
+            && GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L) != null
             && aMaterial != Materials.Aluminium) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(9, aStack), ItemList.Shape_Mold_Ingot.get(0L))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(9, aStack), ItemList.Shape_Mold_Ingot.get(0L))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L))
                 .duration(10 * SECONDS)
                 .eut(calculateRecipeEU(aMaterial, 2))
                 .recipeCategory(RecipeCategories.alloySmelterMolding)
@@ -54,9 +54,9 @@ public class ProcessingNugget implements gregtech.api.interfaces.IOreRecipeRegis
 
         if (aMaterial.mStandardMoltenFluid != null) {
             if (!(aMaterial == Materials.AnnealedCopper || aMaterial == Materials.WroughtIron)) {
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(ItemList.Shape_Mold_Nugget.get(0L))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial, 1L))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.nugget, aMaterial, 1L))
                     .fluidInputs(aMaterial.getMolten(16L))
                     .duration(16 * TICKS)
                     .eut(calculateRecipeEU(aMaterial, 4))
@@ -64,24 +64,24 @@ public class ProcessingNugget implements gregtech.api.interfaces.IOreRecipeRegis
             }
         }
 
-        GT_RecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
-        GT_RecipeRegistrator
+        GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
+        GTRecipeRegistrator
             .registerReverseMacerating(aStack, aMaterial, aPrefix.mMaterialAmount, null, null, null, false);
         if (!aMaterial.contains(SubTag.NO_SMELTING)
-            && GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
-            GT_Values.RA.stdBuilder()
+            && GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L),
                     ItemList.Shape_Mold_Nugget.get(0L))
-                .itemOutputs(GT_Utility.copyAmount(9, aStack))
+                .itemOutputs(GTUtility.copyAmount(9, aStack))
                 .duration(5 * SECONDS)
                 .eut(calculateRecipeEU(aMaterial, 1))
                 .recipeCategory(RecipeCategories.alloySmelterMolding)
                 .addTo(alloySmelterRecipes);
             if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial, 8L),
-                    GT_ModHandler.RecipeBits.BUFFERED,
+                GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.nugget, aMaterial, 8L),
+                    GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "sI ", 'I', OrePrefixes.ingot.get(aMaterial) });
             }
         }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java
index 79342a460d..4d0b405fea 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOre.java
@@ -4,22 +4,22 @@ import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes;
 import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes;
 import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeConstants.COIL_HEAT;
 
 import java.util.ArrayList;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.GT_Mod;
-import gregtech.api.enums.GT_Values;
+import gregtech.GTMod;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingOre implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -41,21 +41,21 @@ public class ProcessingOre implements gregtech.api.interfaces.IOreRecipeRegistra
         // For Sake of god of balance!
 
         // Dense ore
-        if (GT_Mod.gregtechproxy.mRichOreYieldMultiplier) {
+        if (GTMod.gregtechproxy.mRichOreYieldMultiplier) {
             tIsRich = (aPrefix == OrePrefixes.oreRich) || (aPrefix == OrePrefixes.oreDense);
         }
         // NetherOre
-        if (GT_Mod.gregtechproxy.mNetherOreYieldMultiplier && !tIsRich) {
+        if (GTMod.gregtechproxy.mNetherOreYieldMultiplier && !tIsRich) {
             tIsRich = (aPrefix == OrePrefixes.oreNetherrack) || (aPrefix == OrePrefixes.oreNether);
         }
         // EndOre
-        if (GT_Mod.gregtechproxy.mEndOreYieldMultiplier && !tIsRich) {
+        if (GTMod.gregtechproxy.mEndOreYieldMultiplier && !tIsRich) {
             tIsRich = (aPrefix == OrePrefixes.oreEndstone) || (aPrefix == OrePrefixes.oreEnd);
         }
 
         if (aMaterial == Materials.Oilsands) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack))
                 .itemOutputs(new ItemStack(net.minecraft.init.Blocks.sand, 1, 0))
                 .outputChances(tIsRich ? 2000 : 4000)
                 .fluidOutputs(Materials.OilHeavy.getFluid(tIsRich ? 4000L : 2000L))
@@ -63,67 +63,67 @@ public class ProcessingOre implements gregtech.api.interfaces.IOreRecipeRegistra
                 .eut(TierEU.RECIPE_LV)
                 .addTo(centrifugeRecipes);
         } else {
-            registerStandardOreRecipes(aPrefix, aMaterial, GT_Utility.copyAmount(1, aStack), tIsRich ? 2 : 1);
+            registerStandardOreRecipes(aPrefix, aMaterial, GTUtility.copyAmount(1, aStack), tIsRich ? 2 : 1);
         }
     }
 
     private boolean registerStandardOreRecipes(OrePrefixes aPrefix, Materials aMaterial, ItemStack aOreStack,
         int aMultiplier) {
         if ((aOreStack == null) || (aMaterial == null)) return false;
-        GT_ModHandler
-            .addValuableOre(GT_Utility.getBlockFromStack(aOreStack), aOreStack.getItemDamage(), aMaterial.mOreValue);
+        GTModHandler
+            .addValuableOre(GTUtility.getBlockFromStack(aOreStack), aOreStack.getItemDamage(), aMaterial.mOreValue);
         Materials tMaterial = aMaterial.mOreReplacement;
         Materials tPrimaryByMaterial = null;
         aMultiplier = Math.max(1, aMultiplier);
-        aOreStack = GT_Utility.copyAmount(1, aOreStack);
+        aOreStack = GTUtility.copyAmount(1, aOreStack);
         aOreStack.stackSize = 1;
 
-        ItemStack tIngot = GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mDirectSmelting, 1L);
-        ItemStack tGem = GT_OreDictUnificator.get(OrePrefixes.gem, tMaterial, 1L);
+        ItemStack tIngot = GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial.mDirectSmelting, 1L);
+        ItemStack tGem = GTOreDictUnificator.get(OrePrefixes.gem, tMaterial, 1L);
         ItemStack tSmeltInto = tIngot
             == null
                 ? null
                 : aMaterial.contains(SubTag.SMELTING_TO_GEM)
-                    ? GT_OreDictUnificator.get(
+                    ? GTOreDictUnificator.get(
                         OrePrefixes.gem,
                         tMaterial.mDirectSmelting,
-                        GT_OreDictUnificator.get(
+                        GTOreDictUnificator.get(
                             OrePrefixes.crystal,
                             tMaterial.mDirectSmelting,
-                            GT_OreDictUnificator.get(
+                            GTOreDictUnificator.get(
                                 OrePrefixes.gem,
                                 tMaterial,
-                                GT_OreDictUnificator.get(OrePrefixes.crystal, tMaterial, 1L),
+                                GTOreDictUnificator.get(OrePrefixes.crystal, tMaterial, 1L),
                                 1L),
                             1L),
                         1L)
                     : tIngot;
 
-        ItemStack tDust = GT_OreDictUnificator.get(OrePrefixes.dust, tMaterial, tGem, 1L);
-        ItemStack tCleaned = GT_OreDictUnificator.get(OrePrefixes.crushedPurified, tMaterial, tDust, 1L);
-        ItemStack tCrushed = GT_OreDictUnificator
+        ItemStack tDust = GTOreDictUnificator.get(OrePrefixes.dust, tMaterial, tGem, 1L);
+        ItemStack tCleaned = GTOreDictUnificator.get(OrePrefixes.crushedPurified, tMaterial, tDust, 1L);
+        ItemStack tCrushed = GTOreDictUnificator
             .get(OrePrefixes.crushed, tMaterial, (long) aMaterial.mOreMultiplier * aMultiplier);
         ItemStack tPrimaryByProduct = null;
 
         if (tCrushed == null) {
-            tCrushed = GT_OreDictUnificator.get(
+            tCrushed = GTOreDictUnificator.get(
                 OrePrefixes.dustImpure,
                 tMaterial,
-                GT_Utility.copyAmount(aMaterial.mOreMultiplier * aMultiplier, tCleaned, tDust, tGem),
+                GTUtility.copyAmount(aMaterial.mOreMultiplier * aMultiplier, tCleaned, tDust, tGem),
                 (long) aMaterial.mOreMultiplier * aMultiplier);
         }
 
         for (Materials tMat : aMaterial.mOreByProducts) {
-            GT_OreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
+            GTOreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
             if (tPrimaryByProduct == null) {
                 tPrimaryByMaterial = tMat;
-                tPrimaryByProduct = GT_OreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
-                if (GT_OreDictUnificator.get(OrePrefixes.dustSmall, tMat, 1L) == null) GT_OreDictUnificator
-                    .get(OrePrefixes.dustTiny, tMat, GT_OreDictUnificator.get(OrePrefixes.nugget, tMat, 2L), 2L);
+                tPrimaryByProduct = GTOreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
+                if (GTOreDictUnificator.get(OrePrefixes.dustSmall, tMat, 1L) == null) GTOreDictUnificator
+                    .get(OrePrefixes.dustTiny, tMat, GTOreDictUnificator.get(OrePrefixes.nugget, tMat, 2L), 2L);
             }
-            GT_OreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
-            if (GT_OreDictUnificator.get(OrePrefixes.dustSmall, tMat, 1L) == null) GT_OreDictUnificator
-                .get(OrePrefixes.dustTiny, tMat, GT_OreDictUnificator.get(OrePrefixes.nugget, tMat, 2L), 2L);
+            GTOreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
+            if (GTOreDictUnificator.get(OrePrefixes.dustSmall, tMat, 1L) == null) GTOreDictUnificator
+                .get(OrePrefixes.dustTiny, tMat, GTOreDictUnificator.get(OrePrefixes.nugget, tMat, 2L), 2L);
         }
 
         if (tPrimaryByMaterial == null) tPrimaryByMaterial = tMaterial;
@@ -132,33 +132,33 @@ public class ProcessingOre implements gregtech.api.interfaces.IOreRecipeRegistra
 
         if (tSmeltInto != null) {
             if ((aMaterial.mBlastFurnaceRequired) || (aMaterial.mDirectSmelting.mBlastFurnaceRequired)) {
-                GT_ModHandler.removeFurnaceSmelting(aOreStack);
+                GTModHandler.removeFurnaceSmelting(aOreStack);
             } else {
-                tHasSmelting = GT_ModHandler.addSmeltingRecipe(
+                tHasSmelting = GTModHandler.addSmeltingRecipe(
                     aOreStack,
-                    GT_Utility.copyAmount(aMultiplier * aMaterial.mSmeltingMultiplier, tSmeltInto));
+                    GTUtility.copyAmount(aMultiplier * aMaterial.mSmeltingMultiplier, tSmeltInto));
             }
 
             if (aMaterial.contains(SubTag.BLASTFURNACE_CALCITE_TRIPLE)) {
                 if (aMaterial.mAutoGenerateBlastFurnaceRecipes) {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
                             aOreStack,
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, aMultiplier))
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, aMultiplier))
                         .itemOutputs(
-                            GT_Utility.mul(aMultiplier * 3 * aMaterial.mSmeltingMultiplier, tSmeltInto),
-                            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
+                            GTUtility.mul(aMultiplier * 3 * aMaterial.mSmeltingMultiplier, tSmeltInto),
+                            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
                         .duration(tSmeltInto.stackSize * 25 * SECONDS)
                         .eut(TierEU.RECIPE_MV)
                         .metadata(COIL_HEAT, 1500)
                         .addTo(blastFurnaceRecipes);
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
                             aOreStack,
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, aMultiplier))
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, aMultiplier))
                         .itemOutputs(
-                            GT_Utility.mul(aMultiplier * 3 * aMaterial.mSmeltingMultiplier, tSmeltInto),
-                            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
+                            GTUtility.mul(aMultiplier * 3 * aMaterial.mSmeltingMultiplier, tSmeltInto),
+                            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
                         .duration(tSmeltInto.stackSize * 25 * SECONDS)
                         .eut(TierEU.RECIPE_MV)
                         .metadata(COIL_HEAT, 1500)
@@ -166,24 +166,24 @@ public class ProcessingOre implements gregtech.api.interfaces.IOreRecipeRegistra
                 }
             } else if (aMaterial.contains(SubTag.BLASTFURNACE_CALCITE_DOUBLE)) {
                 if (aMaterial.mAutoGenerateBlastFurnaceRecipes) {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
                             aOreStack,
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, aMultiplier))
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, aMultiplier))
                         .itemOutputs(
-                            GT_Utility.mul(aMultiplier * 2 * aMaterial.mSmeltingMultiplier, tSmeltInto),
-                            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
+                            GTUtility.mul(aMultiplier * 2 * aMaterial.mSmeltingMultiplier, tSmeltInto),
+                            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
                         .duration(tSmeltInto.stackSize * 25 * SECONDS)
                         .eut(TierEU.RECIPE_MV)
                         .metadata(COIL_HEAT, 1500)
                         .addTo(blastFurnaceRecipes);
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
                             aOreStack,
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, aMultiplier))
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, aMultiplier))
                         .itemOutputs(
-                            GT_Utility.mul(aMultiplier * 2 * aMaterial.mSmeltingMultiplier, tSmeltInto),
-                            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
+                            GTUtility.mul(aMultiplier * 2 * aMaterial.mSmeltingMultiplier, tSmeltInto),
+                            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
                         .duration(tSmeltInto.stackSize * 25 * SECONDS)
                         .eut(TierEU.RECIPE_MV)
                         .metadata(COIL_HEAT, 1500)
@@ -193,18 +193,18 @@ public class ProcessingOre implements gregtech.api.interfaces.IOreRecipeRegistra
         }
 
         if (!tHasSmelting) {
-            GT_ModHandler.addSmeltingRecipe(
+            GTModHandler.addSmeltingRecipe(
                 aOreStack,
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     OrePrefixes.gem,
                     tMaterial.mDirectSmelting,
                     Math.max(1, aMultiplier * aMaterial.mSmeltingMultiplier / 2)));
         }
 
         if (tCrushed != null) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(aOreStack)
-                .itemOutputs(GT_Utility.copy(GT_Utility.copyAmount(tCrushed.stackSize, tGem), tCrushed))
+                .itemOutputs(GTUtility.copy(GTUtility.copyAmount(tCrushed.stackSize, tGem), tCrushed))
                 .duration(10)
                 .eut(16)
                 .addTo(hammerRecipes);
@@ -212,19 +212,19 @@ public class ProcessingOre implements gregtech.api.interfaces.IOreRecipeRegistra
             int chanceOre2 = tPrimaryByProduct == null ? 0
                 : tPrimaryByProduct.stackSize * 10 * aMultiplier * aMaterial.mByProductMultiplier;
             chanceOre2 = 100 * chanceOre2; // converting to the GT format, 100% is 10000
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(aOreStack)
                 .itemOutputs(
-                    GT_Utility.mul(2, tCrushed),
-                    tMaterial.contains(SubTag.PULVERIZING_CINNABAR) ? GT_OreDictUnificator.get(
+                    GTUtility.mul(2, tCrushed),
+                    tMaterial.contains(SubTag.PULVERIZING_CINNABAR) ? GTOreDictUnificator.get(
                         OrePrefixes.crystal,
                         Materials.Cinnabar,
-                        GT_OreDictUnificator
-                            .get(OrePrefixes.gem, tPrimaryByMaterial, GT_Utility.copyAmount(1, tPrimaryByProduct), 1L),
+                        GTOreDictUnificator
+                            .get(OrePrefixes.gem, tPrimaryByMaterial, GTUtility.copyAmount(1, tPrimaryByProduct), 1L),
                         1L)
-                        : GT_OreDictUnificator
-                            .get(OrePrefixes.gem, tPrimaryByMaterial, GT_Utility.copyAmount(1, tPrimaryByProduct), 1L),
-                    GT_OreDictUnificator.getDust(aPrefix.mSecondaryMaterial))
+                        : GTOreDictUnificator
+                            .get(OrePrefixes.gem, tPrimaryByMaterial, GTUtility.copyAmount(1, tPrimaryByProduct), 1L),
+                    GTOreDictUnificator.getDust(aPrefix.mSecondaryMaterial))
                 .outputChances(10000, chanceOre2, 5000)
                 .duration(20 * SECONDS)
                 .eut(2)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingOrePoor.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOrePoor.java
index ac9106d31b..d71b4a61f4 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingOrePoor.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOrePoor.java
@@ -2,17 +2,17 @@ package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingOrePoor implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -43,30 +43,30 @@ public class ProcessingOrePoor implements gregtech.api.interfaces.IOreRecipeRegi
                 break;
         }
         if (aMaterial != null) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, aMultiplier))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, aMultiplier))
                 .duration(10)
                 .eut(16)
                 .addTo(hammerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, 2 * aMultiplier),
-                    GT_OreDictUnificator.get(
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, aMaterial, 2 * aMultiplier),
+                    GTOreDictUnificator.get(
                         OrePrefixes.dustTiny,
-                        GT_Utility.selectItemInList(0, aMaterial, aMaterial.mOreByProducts),
+                        GTUtility.selectItemInList(0, aMaterial, aMaterial.mOreByProducts),
                         1L),
-                    GT_OreDictUnificator.getDust(aPrefix.mSecondaryMaterial))
+                    GTOreDictUnificator.getDust(aPrefix.mSecondaryMaterial))
                 .outputChances(10000, 100 * 5 * aMultiplier, 10000)
                 .duration(20 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
 
-            if (aMaterial.contains(SubTag.NO_SMELTING)) GT_ModHandler.addSmeltingRecipe(
-                GT_Utility.copyAmount(1, aStack),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial.mDirectSmelting, aMultiplier));
+            if (aMaterial.contains(SubTag.NO_SMELTING)) GTModHandler.addSmeltingRecipe(
+                GTUtility.copyAmount(1, aStack),
+                GTOreDictUnificator.get(OrePrefixes.nugget, aMaterial.mDirectSmelting, aMultiplier));
         }
     }
 }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingOreSmelting.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOreSmelting.java
index 93458ee467..315bdcd6dd 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingOreSmelting.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingOreSmelting.java
@@ -2,24 +2,24 @@ package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes;
 import static gregtech.api.recipe.RecipeMaps.primitiveBlastRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeConstants.ADDITIVE_AMOUNT;
-import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeConstants.ADDITIVE_AMOUNT;
+import static gregtech.api.util.GTRecipeConstants.COIL_HEAT;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.item.ItemStack;
 
-import gregtech.GT_Mod;
-import gregtech.api.enums.GT_Values;
+import gregtech.GTMod;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeBuilder;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeBuilder;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -34,24 +34,24 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
     @Override
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
-        GT_ModHandler.removeFurnaceSmelting(aStack);
+        GTModHandler.removeFurnaceSmelting(aStack);
         if (!aMaterial.contains(SubTag.NO_SMELTING)) {
             if ((aMaterial.mBlastFurnaceRequired) || (aMaterial.mDirectSmelting.mBlastFurnaceRequired)) {
                 if (aMaterial.mBlastFurnaceTemp < 1000 && aMaterial.mDirectSmelting.mBlastFurnaceTemp < 1000)
                     if (aMaterial.mAutoGenerateBlastFurnaceRecipes
-                        && GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
-                            GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder();
+                        && GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
+                            GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder();
                             recipeBuilder
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1));
+                                .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1));
                             if (aMaterial.mBlastFurnaceTemp > 1750) {
                                 recipeBuilder.itemOutputs(
-                                    GT_OreDictUnificator.get(
+                                    GTOreDictUnificator.get(
                                         OrePrefixes.ingotHot,
                                         aMaterial,
-                                        GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L),
+                                        GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L),
                                         1L));
                             } else {
-                                recipeBuilder.itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L));
+                                recipeBuilder.itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L));
                             }
                             recipeBuilder
                                 .duration(Math.max(aMaterial.getMass() / 4L, 1L) * aMaterial.mBlastFurnaceTemp * TICKS)
@@ -70,7 +70,7 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
                             outputSize = 10;
                             outputPrefix = OrePrefixes.nugget;
                         } else {
-                            if (GT_Mod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre) {
+                            if (GTMod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre) {
                                 outputSize = 6;
                                 outputPrefix = OrePrefixes.nugget;
                             } else {
@@ -80,18 +80,18 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
                         }
                         break;
                     case dust:
-                        int outputAmount = GT_Mod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre ? 2 : 3;
+                        int outputAmount = GTMod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre ? 2 : 3;
                         if (aMaterial.mDirectSmelting != aMaterial) {
                             if (!aMaterial.contains(SubTag.DONT_ADD_DEFAULT_BBF_RECIPE)
                                 && aMaterial.mDirectSmelting.getIngots(1) != null) {
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(2, aStack))
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(2, aStack))
                                     .itemOutputs(aMaterial.mDirectSmelting.getIngots(outputAmount))
                                     .duration(2 * MINUTES)
                                     .metadata(ADDITIVE_AMOUNT, 2)
                                     .addTo(primitiveBlastRecipes);
                             } else if (aMaterial == Materials.Chalcopyrite) {
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(aMaterial.getDust(2), new ItemStack(Blocks.sand, 2))
                                     .itemOutputs(
                                         aMaterial.mDirectSmelting.getIngots(outputAmount),
@@ -99,7 +99,7 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
                                     .duration(2 * MINUTES)
                                     .metadata(ADDITIVE_AMOUNT, 2)
                                     .addTo(primitiveBlastRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(aMaterial.getDust(2), Materials.Glass.getDust(2))
                                     .itemOutputs(
                                         aMaterial.mDirectSmelting.getIngots(outputAmount),
@@ -107,7 +107,7 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
                                     .duration(2 * MINUTES)
                                     .metadata(ADDITIVE_AMOUNT, 2)
                                     .addTo(primitiveBlastRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(aMaterial.getDust(2), Materials.SiliconDioxide.getDust(2))
                                     .itemOutputs(
                                         aMaterial.mDirectSmelting.getIngots(outputAmount),
@@ -115,7 +115,7 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
                                     .duration(2 * MINUTES)
                                     .metadata(ADDITIVE_AMOUNT, 2)
                                     .addTo(primitiveBlastRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(aMaterial.getDust(2), Materials.Quartzite.getDust(4))
                                     .itemOutputs(
                                         aMaterial.mDirectSmelting.getIngots(outputAmount),
@@ -123,7 +123,7 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
                                     .duration(2 * MINUTES)
                                     .metadata(ADDITIVE_AMOUNT, 2)
                                     .addTo(primitiveBlastRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(aMaterial.getDust(2), Materials.NetherQuartz.getDust(2))
                                     .itemOutputs(
                                         aMaterial.mDirectSmelting.getIngots(outputAmount),
@@ -131,7 +131,7 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
                                     .duration(2 * MINUTES)
                                     .metadata(ADDITIVE_AMOUNT, 2)
                                     .addTo(primitiveBlastRecipes);
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(aMaterial.getDust(2), Materials.CertusQuartz.getDust(2))
                                     .itemOutputs(
                                         aMaterial.mDirectSmelting.getIngots(outputAmount),
@@ -140,7 +140,7 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
                                     .metadata(ADDITIVE_AMOUNT, 2)
                                     .addTo(primitiveBlastRecipes);
                             } else if (aMaterial == Materials.Tetrahedrite) {
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(aMaterial.getDust(2))
                                     .itemOutputs(
                                         aMaterial.mDirectSmelting.getIngots(outputAmount),
@@ -149,7 +149,7 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
                                     .metadata(ADDITIVE_AMOUNT, 2)
                                     .addTo(primitiveBlastRecipes);
                             } else if (aMaterial == Materials.Galena) {
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(aMaterial.getDust(2))
                                     .itemOutputs(
                                         aMaterial.mDirectSmelting.getIngots(outputAmount),
@@ -166,7 +166,7 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
                             outputPrefix = OrePrefixes.ingot;
                             outputSize = 1;
                         } else {
-                            if (GT_Mod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre) {
+                            if (GTMod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre) {
                                 outputSize = 6;
                                 outputPrefix = OrePrefixes.nugget;
                             } else {
@@ -180,14 +180,14 @@ public class ProcessingOreSmelting implements gregtech.api.interfaces.IOreRecipe
                         outputSize = 1;
                         break;
                 }
-                ItemStack tStack = GT_OreDictUnificator.get(outputPrefix, aMaterial.mDirectSmelting, outputSize);
-                if (tStack == null) tStack = GT_OreDictUnificator.get(
+                ItemStack tStack = GTOreDictUnificator.get(outputPrefix, aMaterial.mDirectSmelting, outputSize);
+                if (tStack == null) tStack = GTOreDictUnificator.get(
                     aMaterial.contains(SubTag.SMELTING_TO_GEM) ? OrePrefixes.gem : OrePrefixes.ingot,
                     aMaterial.mDirectSmelting,
                     1L);
                 if ((tStack == null) && (!aMaterial.contains(SubTag.SMELTING_TO_GEM)))
-                    tStack = GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mDirectSmelting, 1L);
-                GT_ModHandler.addSmeltingRecipe(aStack, tStack);
+                    tStack = GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial.mDirectSmelting, 1L);
+                GTModHandler.addSmeltingRecipe(aStack, tStack);
             }
         }
     }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipe.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipe.java
index 1f97e1e32a..b8a39737cc 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipe.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPipe.java
@@ -1,21 +1,21 @@
 package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
 import gregtech.api.enums.ToolDictNames;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 @SuppressWarnings("RedundantLabeledSwitchRuleCodeBlock")
 public class ProcessingPipe implements gregtech.api.interfaces.IOreRecipeRegistrator {
@@ -42,13 +42,13 @@ public class ProcessingPipe implements gregtech.api.interfaces.IOreRecipeRegistr
             case pipeHuge, pipeLarge, pipeMedium, pipeSmall, pipeTiny -> {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
 
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial, 8L),
-                        GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial, 8L),
+                        GTModHandler.RecipeBits.BUFFERED,
                         new Object[] { "PPP", "h w", "PPP", 'P', OrePrefixes.plate.get(aMaterial) });
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial, 6L),
-                        GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial, 6L),
+                        GTModHandler.RecipeBits.BUFFERED,
                         new Object[] { "PWP", "P P", "PHP", 'P',
                             aMaterial == Materials.Wood ? OrePrefixes.plank.get(aMaterial)
                                 : OrePrefixes.plate.get(aMaterial),
@@ -57,9 +57,9 @@ public class ProcessingPipe implements gregtech.api.interfaces.IOreRecipeRegistr
                                 : ToolDictNames.craftingToolHardHammer,
                             'W', aMaterial.contains(SubTag.WOOD) ? ToolDictNames.craftingToolSaw
                                 : ToolDictNames.craftingToolWrench });
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 2L),
-                        GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 2L),
+                        GTModHandler.RecipeBits.BUFFERED,
                         new Object[] { "PPP", "W H", "PPP", 'P',
                             aMaterial == Materials.Wood ? OrePrefixes.plank.get(aMaterial)
                                 : OrePrefixes.plate.get(aMaterial),
@@ -68,9 +68,9 @@ public class ProcessingPipe implements gregtech.api.interfaces.IOreRecipeRegistr
                                 : ToolDictNames.craftingToolHardHammer,
                             'W', aMaterial.contains(SubTag.WOOD) ? ToolDictNames.craftingToolSaw
                                 : ToolDictNames.craftingToolWrench });
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial, 1L),
-                        GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial, 1L),
+                        GTModHandler.RecipeBits.BUFFERED,
                         new Object[] { "PHP", "P P", "PWP", 'P',
                             aMaterial == Materials.Wood ? OrePrefixes.plank.get(aMaterial)
                                 : OrePrefixes.plate.get(aMaterial),
@@ -79,21 +79,21 @@ public class ProcessingPipe implements gregtech.api.interfaces.IOreRecipeRegistr
                                 : ToolDictNames.craftingToolHardHammer,
                             'W', aMaterial.contains(SubTag.WOOD) ? ToolDictNames.craftingToolSaw
                                 : ToolDictNames.craftingToolWrench });
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial, 1L),
-                        GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial, 1L),
+                        GTModHandler.RecipeBits.BUFFERED,
                         new Object[] { "DhD", "D D", "DwD", 'D', OrePrefixes.plateDouble.get(aMaterial) });
                 }
             }
             case pipeRestrictiveHuge, pipeRestrictiveLarge, pipeRestrictiveMedium, pipeRestrictiveSmall, pipeRestrictiveTiny -> {
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(
+                        GTOreDictUnificator.get(
                             OrePrefixes.ring,
                             Materials.Steel,
                             aPrefix.mSecondaryMaterial.mAmount / OrePrefixes.ring.mMaterialAmount),
-                        GT_OreDictUnificator.get(aOreDictName.replaceFirst("Restrictive", ""), null, 1L, false, true))
-                    .itemOutputs(GT_Utility.copyAmount(1, aStack))
+                        GTOreDictUnificator.get(aOreDictName.replaceFirst("Restrictive", ""), null, 1L, false, true))
+                    .itemOutputs(GTUtility.copyAmount(1, aStack))
                     .duration(
                         ((int) (aPrefix.mSecondaryMaterial.mAmount * 400L / OrePrefixes.ring.mMaterialAmount)) * TICKS)
                     .eut(4)
@@ -102,17 +102,17 @@ public class ProcessingPipe implements gregtech.api.interfaces.IOreRecipeRegistr
             case pipeQuadruple -> {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
 
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.pipeQuadruple, aMaterial, 1),
-                        GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.pipeQuadruple, aMaterial, 1),
+                        GTModHandler.RecipeBits.REVERSIBLE | GTModHandler.RecipeBits.BUFFERED,
                         new Object[] { "MM ", "MM ", "   ", 'M',
-                            GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 1) });
+                            GTOreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 1) });
                 }
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 4),
-                        GT_Utility.getIntegratedCircuit(9))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeQuadruple, aMaterial, 1))
+                        GTOreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 4),
+                        GTUtility.getIntegratedCircuit(9))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeQuadruple, aMaterial, 1))
                     .duration(3 * SECONDS)
                     .eut(calculateRecipeEU(aMaterial, 4))
                     .addTo(assemblerRecipes);
@@ -120,17 +120,17 @@ public class ProcessingPipe implements gregtech.api.interfaces.IOreRecipeRegistr
             case pipeNonuple -> {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
 
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_Utility.copyAmount(1, aStack),
-                        GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED,
-                        new Object[] { "PPP", "PPP", "PPP", 'P', GT_OreDictUnificator
+                    GTModHandler.addCraftingRecipe(
+                        GTUtility.copyAmount(1, aStack),
+                        GTModHandler.RecipeBits.REVERSIBLE | GTModHandler.RecipeBits.BUFFERED,
+                        new Object[] { "PPP", "PPP", "PPP", 'P', GTOreDictUnificator
                             .get(aOreDictName.replaceFirst("Nonuple", "Small"), null, 1L, false, true) });
                 }
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial, 9),
-                        GT_Utility.getIntegratedCircuit(9))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeNonuple, aMaterial, 1))
+                        GTOreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial, 9),
+                        GTUtility.getIntegratedCircuit(9))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeNonuple, aMaterial, 1))
                     .duration(3 * SECONDS)
                     .eut(calculateRecipeEU(aMaterial, 8))
                     .addTo(assemblerRecipes);
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlank.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlank.java
index 3b06babee6..e6a74aac19 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlank.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlank.java
@@ -3,19 +3,19 @@ package gregtech.loaders.oreprocessing;
 import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
 import static gregtech.api.recipe.RecipeMaps.cutterRecipes;
 import static gregtech.api.recipe.RecipeMaps.latheRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingPlank implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -27,38 +27,38 @@ public class ProcessingPlank implements gregtech.api.interfaces.IOreRecipeRegist
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
         if (aOreDictName.startsWith("plankWood")) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2L))
                 .duration(10 * TICKS)
                 .eut(8)
                 .addTo(latheRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(1, aStack),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Iron, 1L))
+                    GTUtility.copyAmount(1, aStack),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Iron, 1L))
                 .itemOutputs(ItemList.Crate_Empty.get(1L))
                 .duration(10 * SECONDS)
                 .eut(1)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(1, aStack),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.WroughtIron, 1L))
+                    GTUtility.copyAmount(1, aStack),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.WroughtIron, 1L))
                 .itemOutputs(ItemList.Crate_Empty.get(1L))
                 .duration(10 * SECONDS)
                 .eut(1)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(1, aStack),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 1L))
+                    GTUtility.copyAmount(1, aStack),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 1L))
                 .itemOutputs(ItemList.Crate_Empty.get(1L))
                 .duration(10 * SECONDS)
                 .eut(1)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(8, aStack), GT_Utility.getIntegratedCircuit(8))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(8, aStack), GTUtility.getIntegratedCircuit(8))
                 .itemOutputs(new ItemStack(Blocks.chest, 1))
                 .duration(40 * SECONDS)
                 .eut(4)
@@ -66,69 +66,69 @@ public class ProcessingPlank implements gregtech.api.interfaces.IOreRecipeRegist
 
             if (aStack.getItemDamage() == 32767) {
                 for (byte i = 0; i < 64; i = (byte) (i + 1)) {
-                    ItemStack tStack = GT_Utility.copyMetaData(i, aStack);
+                    ItemStack tStack = GTUtility.copyMetaData(i, aStack);
                     // Get Recipe and Output, add recipe to delayed removal
-                    ItemStack tOutput = GT_ModHandler.getRecipeOutput(tStack, tStack, tStack);
+                    ItemStack tOutput = GTModHandler.getRecipeOutput(tStack, tStack, tStack);
                     if ((tOutput != null) && (tOutput.stackSize >= 3)) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, tStack))
-                            .itemOutputs(GT_Utility.copyAmount(tOutput.stackSize / 3, tOutput))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, tStack))
+                            .itemOutputs(GTUtility.copyAmount(tOutput.stackSize / 3, tOutput))
                             .fluidInputs(Materials.Water.getFluid(4))
                             .duration(2 * 25 * TICKS)
                             .eut(4)
                             .addTo(cutterRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, tStack))
-                            .itemOutputs(GT_Utility.copyAmount(tOutput.stackSize / 3, tOutput))
-                            .fluidInputs(GT_ModHandler.getDistilledWater(3))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, tStack))
+                            .itemOutputs(GTUtility.copyAmount(tOutput.stackSize / 3, tOutput))
+                            .fluidInputs(GTModHandler.getDistilledWater(3))
                             .duration(2 * 25 * TICKS)
                             .eut(4)
                             .addTo(cutterRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, tStack))
-                            .itemOutputs(GT_Utility.copyAmount(tOutput.stackSize / 3, tOutput))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, tStack))
+                            .itemOutputs(GTUtility.copyAmount(tOutput.stackSize / 3, tOutput))
                             .fluidInputs(Materials.Lubricant.getFluid(1))
                             .duration(25 * TICKS)
                             .eut(4)
                             .addTo(cutterRecipes);
-                        GT_ModHandler.removeRecipeDelayed(tStack, tStack, tStack);
-                        GT_ModHandler.addCraftingRecipe(
-                            GT_Utility.copyAmount(tOutput.stackSize / 3, tOutput),
-                            GT_ModHandler.RecipeBits.BUFFERED,
+                        GTModHandler.removeRecipeDelayed(tStack, tStack, tStack);
+                        GTModHandler.addCraftingRecipe(
+                            GTUtility.copyAmount(tOutput.stackSize / 3, tOutput),
+                            GTModHandler.RecipeBits.BUFFERED,
                             new Object[] { "sP", 'P', tStack });
                     }
                     if ((tStack == null) && (i >= 16)) break;
                 }
             } else {
                 ItemStack tOutput = !aModName.equalsIgnoreCase("thaumcraft")
-                    ? GT_ModHandler.getRecipeOutput(aStack, aStack, aStack)
-                    : GT_ModHandler.getRecipeOutputNoOreDict(aStack, aStack, aStack);
+                    ? GTModHandler.getRecipeOutput(aStack, aStack, aStack)
+                    : GTModHandler.getRecipeOutputNoOreDict(aStack, aStack, aStack);
                 if ((tOutput != null) && (tOutput.stackSize >= 3)) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
-                        .itemOutputs(GT_Utility.copyAmount(tOutput.stackSize / 3, tOutput))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
+                        .itemOutputs(GTUtility.copyAmount(tOutput.stackSize / 3, tOutput))
                         .fluidInputs(Materials.Water.getFluid(4))
                         .duration(2 * 25)
                         .eut(4)
                         .addTo(cutterRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
-                        .itemOutputs(GT_Utility.copyAmount(tOutput.stackSize / 3, tOutput))
-                        .fluidInputs(GT_ModHandler.getDistilledWater(3))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
+                        .itemOutputs(GTUtility.copyAmount(tOutput.stackSize / 3, tOutput))
+                        .fluidInputs(GTModHandler.getDistilledWater(3))
                         .duration(2 * 25)
                         .eut(4)
                         .addTo(cutterRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
-                        .itemOutputs(GT_Utility.copyAmount(tOutput.stackSize / 3, tOutput))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
+                        .itemOutputs(GTUtility.copyAmount(tOutput.stackSize / 3, tOutput))
                         .fluidInputs(Materials.Lubricant.getFluid(1))
                         .duration(25)
                         .eut(4)
                         .addTo(cutterRecipes);
-                    GT_ModHandler.removeRecipeDelayed(aStack, aStack, aStack);
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_Utility.copyAmount(tOutput.stackSize / 3, tOutput),
-                        GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.removeRecipeDelayed(aStack, aStack, aStack);
+                    GTModHandler.addCraftingRecipe(
+                        GTUtility.copyAmount(tOutput.stackSize / 3, tOutput),
+                        GTModHandler.RecipeBits.BUFFERED,
                         new Object[] { "sP", 'P', aStack });
                 }
             }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate.java
index 801eaa8354..574af24531 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPlate.java
@@ -1,9 +1,9 @@
 package gregtech.loaders.oreprocessing;
 
-import static gregtech.api.enums.GT_Values.L;
-import static gregtech.api.enums.GT_Values.NI;
-import static gregtech.api.enums.GT_Values.RA;
-import static gregtech.api.enums.GT_Values.W;
+import static gregtech.api.enums.GTValues.L;
+import static gregtech.api.enums.GTValues.NI;
+import static gregtech.api.enums.GTValues.RA;
+import static gregtech.api.enums.GTValues.W;
 import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes;
 import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
 import static gregtech.api.recipe.RecipeMaps.benderRecipes;
@@ -11,24 +11,24 @@ import static gregtech.api.recipe.RecipeMaps.cutterRecipes;
 import static gregtech.api.recipe.RecipeMaps.extruderRecipes;
 import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes;
 import static gregtech.api.recipe.RecipeMaps.implosionRecipes;
-import static gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED;
-import static gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeBuilder.WILDCARD;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
-import static gregtech.common.GT_Proxy.tBits;
+import static gregtech.api.util.GTModHandler.RecipeBits.BUFFERED;
+import static gregtech.api.util.GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.WILDCARD;
+import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE;
+import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
+import static gregtech.common.GTProxy.tBits;
 
 import net.minecraft.block.Block;
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.GregTech_API;
-import gregtech.api.enums.GT_Values;
+import gregtech.api.GregTechAPI;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
@@ -38,11 +38,11 @@ import gregtech.api.enums.TierEU;
 import gregtech.api.enums.ToolDictNames;
 import gregtech.api.recipe.RecipeCategories;
 import gregtech.api.render.TextureFactory;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeConstants;
-import gregtech.api.util.GT_RecipeRegistrator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeConstants;
+import gregtech.api.util.GTRecipeRegistrator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -92,25 +92,25 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
 
         registerCover(aMaterial, aStack);
 
-        GT_ModHandler.removeRecipeByOutputDelayed(aStack);
-        GT_ModHandler.removeRecipeDelayed(aStack);
+        GTModHandler.removeRecipeByOutputDelayed(aStack);
+        GTModHandler.removeRecipeDelayed(aStack);
 
-        GT_Utility.removeSimpleIC2MachineRecipe(
-            GT_Utility.copyAmount(9, aStack),
-            GT_ModHandler.getCompressorRecipeList(),
-            GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L));
+        GTUtility.removeSimpleIC2MachineRecipe(
+            GTUtility.copyAmount(9, aStack),
+            GTModHandler.getCompressorRecipeList(),
+            GTOreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L));
 
         if (aMaterial.mFuelPower > 0) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack))
                 .metadata(FUEL_VALUE, aMaterial.mFuelPower)
                 .metadata(FUEL_TYPE, aMaterial.mFuelType)
-                .addTo(GT_RecipeConstants.Fuel);
+                .addTo(GTRecipeConstants.Fuel);
         }
 
         if (aMaterial.mStandardMoltenFluid != null
             && !(aMaterial == Materials.AnnealedCopper || aMaterial == Materials.WroughtIron)) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Mold_Plate.get(0L))
                 .itemOutputs(aMaterial.getPlates(1))
                 .fluidInputs(aMaterial.getMolten(L))
@@ -119,14 +119,14 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
                 .addTo(fluidSolidifierRecipes);
         }
 
-        GT_ModHandler.addCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.foil, aMaterial, 2L),
+        GTModHandler.addCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.foil, aMaterial, 2L),
             tBits, // DO_NOT_CHECK_FOR_COLLISIONS|BUFFERED|ONLY_ADD_IF_RESULT_IS_NOT_NULL|NOT_REMOVABLE
             new Object[] { "hX", 'X', OrePrefixes.plate.get(aMaterial) });
 
         if (aMaterial == Materials.Paper) {
-            GT_ModHandler.addCraftingRecipe(
-                GT_Utility.copyAmount(2, aStack),
+            GTModHandler.addCraftingRecipe(
+                GTUtility.copyAmount(2, aStack),
                 BUFFERED,
                 new Object[] { "XXX", 'X', new ItemStack(Items.reeds, 1, W) });
         }
@@ -136,27 +136,27 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
             if (!aNoSmashing) {
 
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                    GT_ModHandler.addCraftingRecipe(
+                    GTModHandler.addCraftingRecipe(
                         aMaterial.getPlates(1),
                         tBits, // DO_NOT_CHECK_FOR_COLLISIONS|BUFFERED|ONLY_ADD_IF_RESULT_IS_NOT_NULL|NOT_REMOVABLE
                         new Object[] { "h", // craftingToolHardHammer
                             "X", "X", 'X', OrePrefixes.ingot.get(aMaterial) });
 
                     // Only added if IC2 Forge Hammer is enabled in Recipes.cfg: B:ic2forgehammer_true=false
-                    GT_ModHandler.addCraftingRecipe(
+                    GTModHandler.addCraftingRecipe(
                         aMaterial.getPlates(1),
                         tBits, // DO_NOT_CHECK_FOR_COLLISIONS|BUFFERED|ONLY_ADD_IF_RESULT_IS_NOT_NULL|NOT_REMOVABLE
                         new Object[] { "H", // craftingToolForgeHammer
                             "X", 'H', ToolDictNames.craftingToolForgeHammer, 'X', OrePrefixes.ingot.get(aMaterial) });
 
-                    GT_ModHandler.addCraftingRecipe(
+                    GTModHandler.addCraftingRecipe(
                         aMaterial.getPlates(1),
                         tBits, // DO_NOT_CHECK_FOR_COLLISIONS|BUFFERED|ONLY_ADD_IF_RESULT_IS_NOT_NULL|NOT_REMOVABLE
                         new Object[] { "h", // craftingToolHardHammer
                             "X", 'X', OrePrefixes.gem.get(aMaterial) });
 
                     // Only added if IC2 Forge Hammer is enabled in Recipes.cfg: B:ic2forgehammer_true=false
-                    GT_ModHandler.addCraftingRecipe(
+                    GTModHandler.addCraftingRecipe(
                         aMaterial.getPlates(1),
                         tBits, // DO_NOT_CHECK_FOR_COLLISIONS|BUFFERED|ONLY_ADD_IF_RESULT_IS_NOT_NULL|NOT_REMOVABLE
                         new Object[] { "H", // craftingToolForgeHammer
@@ -167,7 +167,7 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
             if (aMaterial.contains(SubTag.MORTAR_GRINDABLE)) {
 
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                    GT_ModHandler.addShapelessCraftingRecipe(
+                    GTModHandler.addShapelessCraftingRecipe(
                         aMaterial.getDust(1),
                         tBits, // DO_NOT_CHECK_FOR_COLLISIONS|BUFFERED|ONLY_ADD_IF_RESULT_IS_NOT_NULL|NOT_REMOVABLE
                         new Object[] { ToolDictNames.craftingToolMortar, OrePrefixes.plate.get(aMaterial) });
@@ -181,33 +181,33 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
 
         registerCover(aMaterial, aStack);
 
-        GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+        GTModHandler.removeRecipeByOutputDelayed(aStack);
 
         if (!aNoSmashing || aMaterial.contains(SubTag.STRETCHY)) {
             // 2 double -> 1 quadruple plate
-            if (GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L) != null) {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(2, aStack), GT_Utility.getIntegratedCircuit(2))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L))
+            if (GTOreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L) != null) {
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(2, aStack), GTUtility.getIntegratedCircuit(2))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateQuadruple, aMaterial, 1L))
                     .duration(Math.max(aMaterialMass * 2L, 1L))
                     .eut(calculateRecipeEU(aMaterial, 96))
                     .addTo(benderRecipes);
             }
             // 2 plates -> 1 double plate
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 2L),
-                    GT_Utility.getIntegratedCircuit(2))
-                .itemOutputs(GT_Utility.copyAmount(1, aStack))
+                    GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 2L),
+                    GTUtility.getIntegratedCircuit(2))
+                .itemOutputs(GTUtility.copyAmount(1, aStack))
                 .duration(Math.max(aMaterialMass * 2L, 1L))
                 .eut(calculateRecipeEU(aMaterial, 96))
                 .addTo(benderRecipes);
         } else {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 2L),
-                    GT_Utility.getIntegratedCircuit(2))
-                .itemOutputs(GT_Utility.copyAmount(1, aStack))
+                    GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 2L),
+                    GTUtility.getIntegratedCircuit(2))
+                .itemOutputs(GTUtility.copyAmount(1, aStack))
                 .fluidInputs(Materials.Glue.getFluid(10L))
                 .duration(3 * SECONDS + 4 * TICKS)
                 .eut(8)
@@ -217,8 +217,8 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
         if (!aNoSmashing) {
             Object aPlateStack = OrePrefixes.plate.get(aMaterial);
             if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                GT_ModHandler.addCraftingRecipe(
-                    GT_Utility.copyAmount(1, aStack),
+                GTModHandler.addCraftingRecipe(
+                    GTUtility.copyAmount(1, aStack),
                     DO_NOT_CHECK_FOR_COLLISIONS | BUFFERED,
                     new Object[] { "I", "B", "h", // craftingToolHardHammer
                         'I', aPlateStack, 'B', aPlateStack });
@@ -231,33 +231,33 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
 
         registerCover(aMaterial, aStack);
 
-        GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+        GTModHandler.removeRecipeByOutputDelayed(aStack);
 
         if (!aNoSmashing || aMaterial.contains(SubTag.STRETCHY)) {
-            if (GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L) != null) {
+            if (GTOreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L) != null) {
                 // 3 triple plates -> 1 dense plate
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(3, aStack), GT_Utility.getIntegratedCircuit(3))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(3, aStack), GTUtility.getIntegratedCircuit(3))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateDense, aMaterial, 1L))
                     .duration(Math.max(aMaterialMass * 3L, 1L))
                     .eut(calculateRecipeEU(aMaterial, 96))
                     .addTo(benderRecipes);
             }
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 3L),
-                    GT_Utility.getIntegratedCircuit(3))
-                .itemOutputs(GT_Utility.copyAmount(1, aStack))
+                    GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 3L),
+                    GTUtility.getIntegratedCircuit(3))
+                .itemOutputs(GTUtility.copyAmount(1, aStack))
                 .duration(Math.max(aMaterialMass * 3L, 1L))
                 .eut(calculateRecipeEU(aMaterial, 96))
                 .addTo(benderRecipes);
         } else {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 3L),
-                    GT_Utility.getIntegratedCircuit(3))
-                .itemOutputs(GT_Utility.copyAmount(1, aStack))
+                    GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 3L),
+                    GTUtility.getIntegratedCircuit(3))
+                .itemOutputs(GTUtility.copyAmount(1, aStack))
                 .fluidInputs(Materials.Glue.getFluid(20L))
                 .duration(4 * SECONDS + 16 * TICKS)
                 .eut(8)
@@ -267,50 +267,50 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
         if (!aNoSmashing) {
             if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
                 Object aPlateStack = OrePrefixes.plate.get(aMaterial);
-                GT_ModHandler.addCraftingRecipe(
-                    GT_Utility.copyAmount(1, aStack),
+                GTModHandler.addCraftingRecipe(
+                    GTUtility.copyAmount(1, aStack),
                     DO_NOT_CHECK_FOR_COLLISIONS | BUFFERED,
                     new Object[] { "I", "B", "h", // craftingToolHardHammer
                         'I', OrePrefixes.plateDouble.get(aMaterial), 'B', aPlateStack });
 
-                GT_ModHandler.addShapelessCraftingRecipe(
-                    GT_Utility.copyAmount(1, aStack),
+                GTModHandler.addShapelessCraftingRecipe(
+                    GTUtility.copyAmount(1, aStack),
                     DO_NOT_CHECK_FOR_COLLISIONS | BUFFERED,
                     new Object[] { gregtech.api.enums.ToolDictNames.craftingToolForgeHammer, aPlateStack, aPlateStack,
                         aPlateStack });
             }
         }
 
-        if (GT_OreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L) != null) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Block_Powderbarrel.get(4))
+        if (GTOreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L) != null) {
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Block_Powderbarrel.get(4))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L))
+                    GTOreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L))
                 .duration(1 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(implosionRecipes);
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack), GT_ModHandler.getIC2Item("dynamite", 1, null))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack), GTModHandler.getIC2Item("dynamite", 1, null))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L))
+                    GTOreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L))
                 .duration(1 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(implosionRecipes);
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack), new ItemStack(Blocks.tnt, 2))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack), new ItemStack(Blocks.tnt, 2))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L))
+                    GTOreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L))
                 .duration(1 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(implosionRecipes);
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack), GT_ModHandler.getIC2Item("industrialTnt", 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack), GTModHandler.getIC2Item("industrialTnt", 1))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L))
+                    GTOreDictUnificator.get(OrePrefixes.compressed, aMaterial, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L))
                 .duration(1 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(implosionRecipes);
@@ -322,24 +322,24 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
 
         registerCover(aMaterial, aStack);
 
-        GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+        GTModHandler.removeRecipeByOutputDelayed(aStack);
 
         if (!aNoSmashing || aMaterial.contains(SubTag.STRETCHY)) {
             // Quadruple plate
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 4L),
-                    GT_Utility.getIntegratedCircuit(4))
-                .itemOutputs(GT_Utility.copyAmount(1, aStack))
+                    GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 4L),
+                    GTUtility.getIntegratedCircuit(4))
+                .itemOutputs(GTUtility.copyAmount(1, aStack))
                 .duration(Math.max(aMaterialMass * 4L, 1L))
                 .eut(calculateRecipeEU(aMaterial, 96))
                 .addTo(benderRecipes);
         } else {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 4L),
-                    GT_Utility.getIntegratedCircuit(4))
-                .itemOutputs(GT_Utility.copyAmount(1, aStack))
+                    GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 4L),
+                    GTUtility.getIntegratedCircuit(4))
+                .itemOutputs(GTUtility.copyAmount(1, aStack))
                 .fluidInputs(Materials.Glue.getFluid(30L))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(8)
@@ -348,14 +348,14 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
         if (!aNoSmashing) {
             if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
                 Object aPlateStack = OrePrefixes.plate.get(aMaterial);
-                GT_ModHandler.addCraftingRecipe(
-                    GT_Utility.copyAmount(1, aStack),
+                GTModHandler.addCraftingRecipe(
+                    GTUtility.copyAmount(1, aStack),
                     DO_NOT_CHECK_FOR_COLLISIONS | BUFFERED,
                     new Object[] { "I", "B", "h", // craftingToolHardHammer
                         'I', OrePrefixes.plateTriple.get(aMaterial), 'B', aPlateStack });
 
-                GT_ModHandler.addShapelessCraftingRecipe(
-                    GT_Utility.copyAmount(1, aStack),
+                GTModHandler.addShapelessCraftingRecipe(
+                    GTUtility.copyAmount(1, aStack),
                     DO_NOT_CHECK_FOR_COLLISIONS | BUFFERED,
                     new Object[] { gregtech.api.enums.ToolDictNames.craftingToolForgeHammer, aPlateStack, aPlateStack,
                         aPlateStack, aPlateStack });
@@ -368,24 +368,24 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
 
         registerCover(aMaterial, aStack);
 
-        GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+        GTModHandler.removeRecipeByOutputDelayed(aStack);
 
         if (!aNoSmashing || aMaterial.contains(SubTag.STRETCHY)) {
             // quintuple plate
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 5L),
-                    GT_Utility.getIntegratedCircuit(5))
-                .itemOutputs(GT_Utility.copyAmount(1, aStack))
+                    GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 5L),
+                    GTUtility.getIntegratedCircuit(5))
+                .itemOutputs(GTUtility.copyAmount(1, aStack))
                 .duration(Math.max(aMaterialMass * 5L, 1L))
                 .eut(calculateRecipeEU(aMaterial, 96))
                 .addTo(benderRecipes);
         } else {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 5L),
-                    GT_Utility.getIntegratedCircuit(5))
-                .itemOutputs(GT_Utility.copyAmount(1, aStack))
+                    GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 5L),
+                    GTUtility.getIntegratedCircuit(5))
+                .itemOutputs(GTUtility.copyAmount(1, aStack))
                 .fluidInputs(Materials.Glue.getFluid(40L))
                 .duration(8 * SECONDS)
                 .eut(8)
@@ -394,14 +394,14 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
         if (!aNoSmashing) {
             if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
                 Object aPlateStack = OrePrefixes.plate.get(aMaterial);
-                GT_ModHandler.addCraftingRecipe(
-                    GT_Utility.copyAmount(1, aStack),
+                GTModHandler.addCraftingRecipe(
+                    GTUtility.copyAmount(1, aStack),
                     DO_NOT_CHECK_FOR_COLLISIONS | BUFFERED,
                     new Object[] { "I", "B", "h", // craftingToolHardHammer
                         'I', OrePrefixes.plateQuadruple.get(aMaterial), 'B', aPlateStack });
 
-                GT_ModHandler.addShapelessCraftingRecipe(
-                    GT_Utility.copyAmount(1, aStack),
+                GTModHandler.addShapelessCraftingRecipe(
+                    GTUtility.copyAmount(1, aStack),
                     DO_NOT_CHECK_FOR_COLLISIONS | BUFFERED,
                     new Object[] { ToolDictNames.craftingToolForgeHammer, aPlateStack, aPlateStack, aPlateStack,
                         aPlateStack, aPlateStack });
@@ -414,15 +414,15 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
 
         registerCover(aMaterial, aStack);
 
-        GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+        GTModHandler.removeRecipeByOutputDelayed(aStack);
 
         if (!aNoSmashing || aMaterial.contains(SubTag.STRETCHY)) {
             // Dense plate
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L),
-                    GT_Utility.getIntegratedCircuit(9))
-                .itemOutputs(GT_Utility.copyAmount(1, aStack))
+                    GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 9L),
+                    GTUtility.getIntegratedCircuit(9))
+                .itemOutputs(GTUtility.copyAmount(1, aStack))
                 .duration(Math.max(aMaterialMass * 9L, 1L))
                 .eut(calculateRecipeEU(aMaterial, 96))
                 .addTo(benderRecipes);
@@ -432,12 +432,12 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
     private void registerItemCasing(final OrePrefixes aPrefix, final Materials aMaterial, final ItemStack aStack,
         final boolean aNoSmashing) {
 
-        GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+        GTModHandler.removeRecipeByOutputDelayed(aStack);
 
         if (aMaterial.mStandardMoltenFluid != null) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Mold_Casing.get(0L))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 1L))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 1L))
                 .fluidInputs(aMaterial.getMolten(L / 2))
                 .duration(16 * TICKS)
                 .eut(calculateRecipeEU(aMaterial, 8))
@@ -447,45 +447,45 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
         if (aMaterial.mUnificatable && aMaterial.mMaterialInto == aMaterial && !aNoSmashing) {
 
             if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 1L),
+                GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 1L),
                     tBits, // DO_NOT_CHECK_FOR_COLLISIONS|BUFFERED|ONLY_ADD_IF_RESULT_IS_NOT_NULL|NOT_REMOVABLE
                     new Object[] { "h X", 'X', OrePrefixes.plate.get(aMaterial) });
 
                 // Only added if IC2 Forge Hammer is enabled in Recipes.cfg: B:ic2forgehammer_true=false
-                GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 1L),
+                GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 1L),
                     tBits, // DO_NOT_CHECK_FOR_COLLISIONS|BUFFERED|ONLY_ADD_IF_RESULT_IS_NOT_NULL|NOT_REMOVABLE
                     new Object[] { "H X", 'H', ToolDictNames.craftingToolForgeHammer, 'X',
                         OrePrefixes.plate.get(aMaterial) });
             }
         }
 
-        if (GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
-            GT_Values.RA.stdBuilder()
+        if (GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 2L),
                     ItemList.Shape_Mold_Casing.get(0L))
-                .itemOutputs(GT_Utility.copyAmount(3, aStack))
+                .itemOutputs(GTUtility.copyAmount(3, aStack))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(calculateRecipeEU(aMaterial, 15))
                 .recipeCategory(RecipeCategories.alloySmelterMolding)
                 .addTo(alloySmelterRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L),
                     ItemList.Shape_Extruder_Casing.get(0L))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 2L))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 2L))
                 .duration(((int) Math.max(aMaterial.getMass(), 1L)) * TICKS)
                 .eut(calculateRecipeEU(aMaterial, 45))
                 .addTo(extruderRecipes);
         }
 
-        if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 2L))
+        if (GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L) != null) {
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 2L))
                 .fluidInputs(
                     Materials.Water.getFluid(
                         Math.max(
@@ -497,11 +497,11 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
                 .eut(calculateRecipeEU(aMaterial, 16))
                 .addTo(cutterRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 2L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 2L))
                 .fluidInputs(
-                    GT_ModHandler.getDistilledWater(
+                    GTModHandler.getDistilledWater(
                         Math.max(
                             3,
                             Math.min(
@@ -511,9 +511,9 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
                 .eut(calculateRecipeEU(aMaterial, 16))
                 .addTo(cutterRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 2L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, aMaterial, 2L))
                 .fluidInputs(
                     Materials.Lubricant.getFluid(
                         Math.max(
@@ -526,43 +526,43 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
                 .eut(calculateRecipeEU(aMaterial, 16))
                 .addTo(cutterRecipes);
         }
-        GT_RecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
+        GTRecipeRegistrator.registerReverseFluidSmelting(aStack, aMaterial, aPrefix.mMaterialAmount, null);
     }
 
     private void registerPlateAlloy(final String aOreDictName, final ItemStack aStack) {
 
         switch (aOreDictName) {
             case "plateAlloyCarbon" -> {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_ModHandler.getIC2Item("generator", 1L), GT_Utility.copyAmount(4, aStack))
-                    .itemOutputs(GT_ModHandler.getIC2Item("windMill", 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTModHandler.getIC2Item("generator", 1L), GTUtility.copyAmount(4, aStack))
+                    .itemOutputs(GTModHandler.getIC2Item("windMill", 1L))
                     .duration(5 * MINUTES + 20 * SECONDS)
                     .eut(8)
                     .addTo(assemblerRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack), new ItemStack(Blocks.glass, 3, W))
-                    .itemOutputs(GT_ModHandler.getIC2Item("reinforcedGlass", 4L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack), new ItemStack(Blocks.glass, 3, W))
+                    .itemOutputs(GTModHandler.getIC2Item("reinforcedGlass", 4L))
                     .duration(20 * SECONDS)
                     .eut(4)
                     .addTo(alloySmelterRecipes);
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack), Materials.Glass.getDust(3))
-                    .itemOutputs(GT_ModHandler.getIC2Item("reinforcedGlass", 4L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack), Materials.Glass.getDust(3))
+                    .itemOutputs(GTModHandler.getIC2Item("reinforcedGlass", 4L))
                     .duration(20 * SECONDS)
                     .eut(4)
                     .addTo(alloySmelterRecipes);
             }
             case "plateAlloyAdvanced" -> {
                 RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack), new ItemStack(Blocks.glass, 3, WILDCARD))
-                    .itemOutputs(GT_ModHandler.getIC2Item("reinforcedGlass", 4L))
+                    .itemInputs(GTUtility.copyAmount(1, aStack), new ItemStack(Blocks.glass, 3, WILDCARD))
+                    .itemOutputs(GTModHandler.getIC2Item("reinforcedGlass", 4L))
                     .duration(20 * SECONDS)
                     .eut(4)
                     .addTo(alloySmelterRecipes);
                 RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack), Materials.Glass.getDust(3))
-                    .itemOutputs(GT_ModHandler.getIC2Item("reinforcedGlass", 4L))
+                    .itemInputs(GTUtility.copyAmount(1, aStack), Materials.Glass.getDust(3))
+                    .itemOutputs(GTModHandler.getIC2Item("reinforcedGlass", 4L))
                     .duration(20 * SECONDS)
                     .eut(4)
                     .addTo(alloySmelterRecipes);
@@ -570,7 +570,7 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
             case "plateAlloyIridium" ->
 
                 // Remove IC2 Shaped recipe for Iridium Reinforced Plate
-                GT_ModHandler.removeRecipeByOutputDelayed(aStack);
+                GTModHandler.removeRecipeByOutputDelayed(aStack);
             default -> {}
         }
     }
@@ -582,11 +582,11 @@ public class ProcessingPlate implements gregtech.api.interfaces.IOreRecipeRegist
         // Try different prefixes to use same smooth stones as older GT5U
         for (OrePrefixes orePrefix : new OrePrefixes[] { OrePrefixes.block, OrePrefixes.block_, OrePrefixes.stoneSmooth,
             OrePrefixes.stone }) {
-            if ((tStack = GT_OreDictUnificator.get(orePrefix, aMaterial, 1)) != NI) break;
+            if ((tStack = GTOreDictUnificator.get(orePrefix, aMaterial, 1)) != NI) break;
         }
 
         // Register the cover
-        GregTech_API.registerCover(
+        GregTechAPI.registerCover(
             aStack,
             // If there is an ItemStack of Block for Materials
             tStack == NI ?
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPure.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPure.java
index 01262d32f4..40adf386f8 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingPure.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingPure.java
@@ -2,15 +2,15 @@ package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingPure implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -23,24 +23,24 @@ public class ProcessingPure implements gregtech.api.interfaces.IOreRecipeRegistr
     @Override
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustPure, aMaterial.mMacerateInto, 1L))
             .duration(10)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
             .itemOutputs(
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     OrePrefixes.dustPure,
                     aMaterial.mMacerateInto,
-                    GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, aMaterial.mMacerateInto, 1L),
                     1L),
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     OrePrefixes.dust,
-                    GT_Utility.selectItemInList(1, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
+                    GTUtility.selectItemInList(1, aMaterial.mMacerateInto, aMaterial.mOreByProducts),
                     1L))
             .outputChances(10000, 1000)
             .duration(20 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingRawOre.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingRawOre.java
index 2da9f4b865..902c46bd0b 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingRawOre.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingRawOre.java
@@ -4,20 +4,20 @@ import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes;
 import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes;
 import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeConstants.COIL_HEAT;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
 import gregtech.api.enums.ToolDictNames;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingRawOre implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -31,8 +31,8 @@ public class ProcessingRawOre implements gregtech.api.interfaces.IOreRecipeRegis
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
         if (aMaterial == Materials.Oilsands) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack))
                 .itemOutputs(new ItemStack(net.minecraft.init.Blocks.sand, 1, 0))
                 .outputChances(4000)
                 .fluidOutputs(Materials.OilHeavy.getFluid(2000L))
@@ -40,64 +40,64 @@ public class ProcessingRawOre implements gregtech.api.interfaces.IOreRecipeRegis
                 .eut(TierEU.RECIPE_LV)
                 .addTo(centrifugeRecipes);
         } else {
-            registerStandardOreRecipes(aPrefix, aMaterial, GT_Utility.copyAmount(1, aStack), 1);
+            registerStandardOreRecipes(aPrefix, aMaterial, GTUtility.copyAmount(1, aStack), 1);
         }
     }
 
     private boolean registerStandardOreRecipes(OrePrefixes aPrefix, Materials aMaterial, ItemStack aOreStack,
         int aMultiplier) {
         if ((aOreStack == null) || (aMaterial == null)) return false;
-        GT_ModHandler
-            .addValuableOre(GT_Utility.getBlockFromStack(aOreStack), aOreStack.getItemDamage(), aMaterial.mOreValue);
+        GTModHandler
+            .addValuableOre(GTUtility.getBlockFromStack(aOreStack), aOreStack.getItemDamage(), aMaterial.mOreValue);
         Materials tMaterial = aMaterial.mOreReplacement;
         Materials tPrimaryByMaterial = null;
         aMultiplier = Math.max(1, aMultiplier);
-        aOreStack = GT_Utility.copyAmount(1, aOreStack);
+        aOreStack = GTUtility.copyAmount(1, aOreStack);
         aOreStack.stackSize = 1;
-        ItemStack tIngot = GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mDirectSmelting, 1L);
-        ItemStack tGem = GT_OreDictUnificator.get(OrePrefixes.gem, tMaterial, 1L);
+        ItemStack tIngot = GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial.mDirectSmelting, 1L);
+        ItemStack tGem = GTOreDictUnificator.get(OrePrefixes.gem, tMaterial, 1L);
         ItemStack tSmeltInto = tIngot
             == null
                 ? null
                 : aMaterial.contains(SubTag.SMELTING_TO_GEM)
-                    ? GT_OreDictUnificator.get(
+                    ? GTOreDictUnificator.get(
                         OrePrefixes.gem,
                         tMaterial.mDirectSmelting,
-                        GT_OreDictUnificator.get(
+                        GTOreDictUnificator.get(
                             OrePrefixes.crystal,
                             tMaterial.mDirectSmelting,
-                            GT_OreDictUnificator.get(
+                            GTOreDictUnificator.get(
                                 OrePrefixes.gem,
                                 tMaterial,
-                                GT_OreDictUnificator.get(OrePrefixes.crystal, tMaterial, 1L),
+                                GTOreDictUnificator.get(OrePrefixes.crystal, tMaterial, 1L),
                                 1L),
                             1L),
                         1L)
                     : tIngot;
-        ItemStack tDust = GT_OreDictUnificator.get(OrePrefixes.dust, tMaterial, tGem, 1L);
-        ItemStack tCleaned = GT_OreDictUnificator.get(OrePrefixes.crushedPurified, tMaterial, tDust, 1L);
-        ItemStack tCrushed = GT_OreDictUnificator.get(OrePrefixes.crushed, tMaterial, (long) aMaterial.mOreMultiplier);
+        ItemStack tDust = GTOreDictUnificator.get(OrePrefixes.dust, tMaterial, tGem, 1L);
+        ItemStack tCleaned = GTOreDictUnificator.get(OrePrefixes.crushedPurified, tMaterial, tDust, 1L);
+        ItemStack tCrushed = GTOreDictUnificator.get(OrePrefixes.crushed, tMaterial, (long) aMaterial.mOreMultiplier);
         ItemStack tPrimaryByProduct = null;
 
         if (tCrushed == null) {
-            tCrushed = GT_OreDictUnificator.get(
+            tCrushed = GTOreDictUnificator.get(
                 OrePrefixes.dustImpure,
                 tMaterial,
-                GT_Utility.copyAmount(aMaterial.mOreMultiplier, tCleaned, tDust, tGem),
+                GTUtility.copyAmount(aMaterial.mOreMultiplier, tCleaned, tDust, tGem),
                 (long) aMaterial.mOreMultiplier);
         }
 
         for (Materials tMat : aMaterial.mOreByProducts) {
-            GT_OreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
+            GTOreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
             if (tPrimaryByProduct == null) {
                 tPrimaryByMaterial = tMat;
-                tPrimaryByProduct = GT_OreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
-                if (GT_OreDictUnificator.get(OrePrefixes.dustSmall, tMat, 1L) == null) GT_OreDictUnificator
-                    .get(OrePrefixes.dustTiny, tMat, GT_OreDictUnificator.get(OrePrefixes.nugget, tMat, 2L), 2L);
+                tPrimaryByProduct = GTOreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
+                if (GTOreDictUnificator.get(OrePrefixes.dustSmall, tMat, 1L) == null) GTOreDictUnificator
+                    .get(OrePrefixes.dustTiny, tMat, GTOreDictUnificator.get(OrePrefixes.nugget, tMat, 2L), 2L);
             }
-            GT_OreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
-            if (GT_OreDictUnificator.get(OrePrefixes.dustSmall, tMat, 1L) == null) GT_OreDictUnificator
-                .get(OrePrefixes.dustTiny, tMat, GT_OreDictUnificator.get(OrePrefixes.nugget, tMat, 2L), 2L);
+            GTOreDictUnificator.get(OrePrefixes.dust, tMat, 1L);
+            if (GTOreDictUnificator.get(OrePrefixes.dustSmall, tMat, 1L) == null) GTOreDictUnificator
+                .get(OrePrefixes.dustTiny, tMat, GTOreDictUnificator.get(OrePrefixes.nugget, tMat, 2L), 2L);
         }
 
         if (tPrimaryByMaterial == null) tPrimaryByMaterial = tMaterial;
@@ -106,32 +106,32 @@ public class ProcessingRawOre implements gregtech.api.interfaces.IOreRecipeRegis
 
         if (tSmeltInto != null) {
             if ((aMaterial.mBlastFurnaceRequired) || (aMaterial.mDirectSmelting.mBlastFurnaceRequired)) {
-                GT_ModHandler.removeFurnaceSmelting(aOreStack);
+                GTModHandler.removeFurnaceSmelting(aOreStack);
             } else {
-                tHasSmelting = GT_ModHandler
-                    .addSmeltingRecipe(aOreStack, GT_Utility.copyAmount(aMaterial.mSmeltingMultiplier, tSmeltInto));
+                tHasSmelting = GTModHandler
+                    .addSmeltingRecipe(aOreStack, GTUtility.copyAmount(aMaterial.mSmeltingMultiplier, tSmeltInto));
             }
 
             if (aMaterial.contains(SubTag.BLASTFURNACE_CALCITE_TRIPLE)) {
                 if (aMaterial.mAutoGenerateBlastFurnaceRecipes) {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
                             aOreStack,
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, aMultiplier))
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, aMultiplier))
                         .itemOutputs(
-                            GT_Utility.mul(3 * aMaterial.mSmeltingMultiplier, tSmeltInto),
-                            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
+                            GTUtility.mul(3 * aMaterial.mSmeltingMultiplier, tSmeltInto),
+                            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
                         .duration(tSmeltInto.stackSize * 25 * SECONDS)
                         .eut(TierEU.RECIPE_MV)
                         .metadata(COIL_HEAT, 1500)
                         .addTo(blastFurnaceRecipes);
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
                             aOreStack,
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, aMultiplier))
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, aMultiplier))
                         .itemOutputs(
-                            GT_Utility.mul(3 * aMaterial.mSmeltingMultiplier, tSmeltInto),
-                            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
+                            GTUtility.mul(3 * aMaterial.mSmeltingMultiplier, tSmeltInto),
+                            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
                         .duration(tSmeltInto.stackSize * 25 * SECONDS)
                         .eut(TierEU.RECIPE_MV)
                         .metadata(COIL_HEAT, 1500)
@@ -139,24 +139,24 @@ public class ProcessingRawOre implements gregtech.api.interfaces.IOreRecipeRegis
                 }
             } else if (aMaterial.contains(SubTag.BLASTFURNACE_CALCITE_DOUBLE)) {
                 if (aMaterial.mAutoGenerateBlastFurnaceRecipes) {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
                             aOreStack,
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, aMultiplier))
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, aMultiplier))
                         .itemOutputs(
-                            GT_Utility.mul(2 * aMaterial.mSmeltingMultiplier, tSmeltInto),
-                            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
+                            GTUtility.mul(2 * aMaterial.mSmeltingMultiplier, tSmeltInto),
+                            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
                         .duration(tSmeltInto.stackSize * 25 * SECONDS)
                         .eut(TierEU.RECIPE_MV)
                         .metadata(COIL_HEAT, 1500)
                         .addTo(blastFurnaceRecipes);
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
                             aOreStack,
-                            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, aMultiplier))
+                            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quicklime, aMultiplier))
                         .itemOutputs(
-                            GT_Utility.mul(2 * aMaterial.mSmeltingMultiplier, tSmeltInto),
-                            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
+                            GTUtility.mul(2 * aMaterial.mSmeltingMultiplier, tSmeltInto),
+                            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.DarkAsh, 1L))
                         .duration(tSmeltInto.stackSize * 25 * SECONDS)
                         .eut(TierEU.RECIPE_MV)
                         .metadata(COIL_HEAT, 1500)
@@ -166,20 +166,20 @@ public class ProcessingRawOre implements gregtech.api.interfaces.IOreRecipeRegis
         }
 
         if (!tHasSmelting) {
-            GT_ModHandler.addSmeltingRecipe(
+            GTModHandler.addSmeltingRecipe(
                 aOreStack,
-                GT_OreDictUnificator
+                GTOreDictUnificator
                     .get(OrePrefixes.gem, tMaterial.mDirectSmelting, Math.max(1, aMaterial.mSmeltingMultiplier / 2)));
         }
 
         if (tCrushed != null) {
-            GT_ModHandler.addShapelessCraftingRecipe(
-                GT_Utility.mul(1, tCrushed),
+            GTModHandler.addShapelessCraftingRecipe(
+                GTUtility.mul(1, tCrushed),
                 new Object[] { aOreStack, ToolDictNames.craftingToolHardHammer });
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(aOreStack)
-                .itemOutputs(GT_Utility.copy(GT_Utility.copyAmount(tCrushed.stackSize, tGem), tCrushed))
+                .itemOutputs(GTUtility.copy(GTUtility.copyAmount(tCrushed.stackSize, tGem), tCrushed))
                 .duration(10)
                 .eut(16)
                 .addTo(hammerRecipes);
@@ -187,19 +187,19 @@ public class ProcessingRawOre implements gregtech.api.interfaces.IOreRecipeRegis
             int chanceOre2 = tPrimaryByProduct == null ? 0
                 : tPrimaryByProduct.stackSize * 5 * aMaterial.mByProductMultiplier;
             chanceOre2 = 100 * chanceOre2; // converting to the GT format, 100% is 10000
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(aOreStack)
                 .itemOutputs(
-                    GT_Utility.mul(2, tCrushed),
-                    tMaterial.contains(SubTag.PULVERIZING_CINNABAR) ? GT_OreDictUnificator.get(
+                    GTUtility.mul(2, tCrushed),
+                    tMaterial.contains(SubTag.PULVERIZING_CINNABAR) ? GTOreDictUnificator.get(
                         OrePrefixes.crystal,
                         Materials.Cinnabar,
-                        GT_OreDictUnificator
-                            .get(OrePrefixes.gem, tPrimaryByMaterial, GT_Utility.copyAmount(1, tPrimaryByProduct), 1L),
+                        GTOreDictUnificator
+                            .get(OrePrefixes.gem, tPrimaryByMaterial, GTUtility.copyAmount(1, tPrimaryByProduct), 1L),
                         1L)
-                        : GT_OreDictUnificator
-                            .get(OrePrefixes.gem, tPrimaryByMaterial, GT_Utility.copyAmount(1, tPrimaryByProduct), 1L),
-                    GT_OreDictUnificator.getDust(aPrefix.mSecondaryMaterial))
+                        : GTOreDictUnificator
+                            .get(OrePrefixes.gem, tPrimaryByMaterial, GTUtility.copyAmount(1, tPrimaryByProduct), 1L),
+                    GTOreDictUnificator.getDust(aPrefix.mSecondaryMaterial))
                 .outputChances(10000, chanceOre2, 5000)
                 .duration(20 * SECONDS)
                 .eut(2)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingRecycling.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingRecycling.java
index bfa580b4c4..92daf2926b 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingRecycling.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingRecycling.java
@@ -1,17 +1,17 @@
 package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.cannerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeBuilder;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeBuilder;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingRecycling implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -24,18 +24,18 @@ public class ProcessingRecycling implements gregtech.api.interfaces.IOreRecipeRe
     @Override
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
-        if ((aMaterial != Materials.Empty) && (GT_Utility.getFluidForFilledItem(aStack, true) == null)
+        if ((aMaterial != Materials.Empty) && (GTUtility.getFluidForFilledItem(aStack, true) == null)
             && !aMaterial.contains(SubTag.SMELTING_TO_FLUID)
-            && (GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L) != null)) {
-            GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder();
+            && (GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L) != null)) {
+            GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder();
             recipeBuilder.itemInputs(aStack);
-            if (GT_Utility.getContainerItem(aStack, true) == null) {
+            if (GTUtility.getContainerItem(aStack, true) == null) {
                 recipeBuilder.itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, aPrefix.mMaterialAmount / 3628800L));
+                    GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, aPrefix.mMaterialAmount / 3628800L));
             } else {
                 recipeBuilder.itemOutputs(
-                    GT_Utility.getContainerItem(aStack, true),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, aPrefix.mMaterialAmount / 3628800L));
+                    GTUtility.getContainerItem(aStack, true),
+                    GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, aPrefix.mMaterialAmount / 3628800L));
             }
             recipeBuilder.duration(((int) Math.max(aMaterial.getMass() / 2L, 1L)) * TICKS)
                 .eut(2)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingRotor.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingRotor.java
index 3548bd437b..f8c5a620b0 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingRotor.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingRotor.java
@@ -3,21 +3,21 @@ package gregtech.loaders.oreprocessing;
 import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
 import static gregtech.api.recipe.RecipeMaps.extruderRecipes;
 import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 public class ProcessingRotor implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -30,52 +30,52 @@ public class ProcessingRotor implements gregtech.api.interfaces.IOreRecipeRegist
         ItemStack aStack) {
         if ((aMaterial.mUnificatable) && (aMaterial.mMaterialInto == aMaterial)
             && !aMaterial.contains(SubTag.NO_WORKING)) {
-            ItemStack tPlate = GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 4L);
-            ItemStack tRing = GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L);
-            if (GT_Utility.isStackValid(tPlate) && GT_Utility.isStackValid(tRing)) {
+            ItemStack tPlate = GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 4L);
+            ItemStack tRing = GTOreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L);
+            if (GTUtility.isStackValid(tPlate) && GTUtility.isStackValid(tRing)) {
 
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
 
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "PhP", "SRf", "PdP", 'P',
                             aMaterial == Materials.Wood ? OrePrefixes.plank.get(aMaterial)
                                 : OrePrefixes.plate.get(aMaterial),
                             'R', OrePrefixes.ring.get(aMaterial), 'S', OrePrefixes.screw.get(aMaterial) });
                 }
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(tPlate.copy(), tRing.copy(), GT_Utility.getIntegratedCircuit(4))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(tPlate.copy(), tRing.copy(), GTUtility.getIntegratedCircuit(4))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L))
                     .fluidInputs(Materials.Tin.getMolten(32))
                     .duration(((int) Math.max(aMaterial.getMass(), 1L)) * TICKS)
                     .eut(calculateRecipeEU(aMaterial, 24))
                     .addTo(assemblerRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(tPlate.copy(), tRing.copy(), GT_Utility.getIntegratedCircuit(4))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(tPlate.copy(), tRing.copy(), GTUtility.getIntegratedCircuit(4))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L))
                     .fluidInputs(Materials.Lead.getMolten(48))
                     .duration(((int) Math.max(aMaterial.getMass(), 1L)) * TICKS)
                     .eut(calculateRecipeEU(aMaterial, 24))
                     .addTo(assemblerRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(tPlate.copy(), tRing.copy(), GT_Utility.getIntegratedCircuit(4))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(tPlate.copy(), tRing.copy(), GTUtility.getIntegratedCircuit(4))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L))
                     .fluidInputs(Materials.SolderingAlloy.getMolten(16))
                     .duration(((int) Math.max(aMaterial.getMass(), 1L)) * TICKS)
                     .eut(calculateRecipeEU(aMaterial, 24))
                     .addTo(assemblerRecipes);
             }
 
-            if (GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
-                GT_Values.RA.stdBuilder()
+            if (GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 5L),
+                        GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 5L),
                         ItemList.Shape_Extruder_Rotor.get(0L))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L))
                     .duration(((int) Math.max(aMaterial.getMass(), 1L)) * TICKS)
                     .eut(calculateRecipeEU(aMaterial, 24))
                     .addTo(extruderRecipes);
@@ -83,9 +83,9 @@ public class ProcessingRotor implements gregtech.api.interfaces.IOreRecipeRegist
             if (aMaterial.mStandardMoltenFluid != null) {
                 if (!(aMaterial == Materials.AnnealedCopper || aMaterial == Materials.WroughtIron)) {
 
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(ItemList.Shape_Mold_Rotor.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.rotor, aMaterial, 1L))
                         .fluidInputs(aMaterial.getMolten(612L))
                         .duration(((int) Math.max(aMaterial.getMass(), 1L)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 24))
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingRound.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingRound.java
index 0eb2cb3dd0..95ca9eb48b 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingRound.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingRound.java
@@ -1,19 +1,19 @@
 package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.latheRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.item.ItemStack;
 
 import appeng.core.Api;
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 public class ProcessingRound implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -25,28 +25,28 @@ public class ProcessingRound implements gregtech.api.interfaces.IOreRecipeRegist
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
         if (!aMaterial.contains(SubTag.NO_WORKING)) {
-            if (GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial, 1L) != null) {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.nugget, aMaterial, 1L))
-                    .itemOutputs(GT_Utility.copyAmount(1, aStack))
+            if (GTOreDictUnificator.get(OrePrefixes.nugget, aMaterial, 1L) != null) {
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.nugget, aMaterial, 1L))
+                    .itemOutputs(GTUtility.copyAmount(1, aStack))
                     .duration(((int) Math.max(aMaterial.getMass() / 4L, 1L)) * TICKS)
                     .eut(8)
                     .addTo(latheRecipes);
             }
 
             if ((aMaterial.mUnificatable) && (aMaterial.mMaterialInto == aMaterial)) {
-                GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.round, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.round, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "fX", "Xh", 'X', OrePrefixes.nugget.get(aMaterial) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.round, aMaterial, 4L),
-                    GT_Proxy.tBits,
+                GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.round, aMaterial, 4L),
+                    GTProxy.tBits,
                     new Object[] { "fXh", 'X', OrePrefixes.ingot.get(aMaterial) });
             }
         }
         Api.INSTANCE.registries()
             .matterCannon()
-            .registerAmmo(GT_OreDictUnificator.get(OrePrefixes.round, aMaterial, 1L), aMaterial.getMass());
+            .registerAmmo(GTOreDictUnificator.get(OrePrefixes.round, aMaterial, 1L), aMaterial.getMass());
     }
 }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingSand.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSand.java
index b1996d067f..7d9cdc338f 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingSand.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSand.java
@@ -1,17 +1,17 @@
 package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingSand implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -23,10 +23,10 @@ public class ProcessingSand implements gregtech.api.interfaces.IOreRecipeRegistr
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
         if (aOreDictName.equals("sandOil")) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Cell_Empty.get(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Cell_Empty.get(1))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oil, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oil, 1L),
                     new ItemStack(Blocks.sand, 1, 0))
                 .duration(50 * SECONDS)
                 .eut(5)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingSaplings.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSaplings.java
index f13c2aa9b5..3dc11940e7 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingSaplings.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSaplings.java
@@ -3,17 +3,17 @@ package gregtech.loaders.oreprocessing;
 import static gregtech.api.recipe.RecipeMaps.compressorRecipes;
 import static gregtech.api.recipe.RecipeMaps.latheRecipes;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingSaplings implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -24,25 +24,25 @@ public class ProcessingSaplings implements gregtech.api.interfaces.IOreRecipeReg
     @Override
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 2L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 2L))
             .duration(20 * SECONDS)
             .eut(2)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(8, aStack))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(8, aStack))
             .itemOutputs(ItemList.IC2_Plantball.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(1, aStack))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(1, aStack))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Wood, 1L))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Wood, 1L))
             .duration(16 * TICKS)
             .eut(8)
             .addTo(latheRecipes);
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingScrew.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingScrew.java
index afafe8525d..23dd8ed407 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingScrew.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingScrew.java
@@ -1,20 +1,20 @@
 package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.latheRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 public class ProcessingScrew implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -26,19 +26,19 @@ public class ProcessingScrew implements gregtech.api.interfaces.IOreRecipeRegist
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
         if (!aMaterial.contains(SubTag.NO_WORKING)) {
-            if (GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L) != null) {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L))
-                    .itemOutputs(GT_Utility.copyAmount(1, aStack))
+            if (GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L) != null) {
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L))
+                    .itemOutputs(GTUtility.copyAmount(1, aStack))
                     .duration(((int) Math.max(aMaterial.getMass() / 8L, 1L)) * TICKS)
                     .eut(calculateRecipeEU(aMaterial, 4))
                     .addTo(latheRecipes);
             }
             if ((aMaterial.mUnificatable) && (aMaterial.mMaterialInto == aMaterial))
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "fX", "X ", 'X', OrePrefixes.bolt.get(aMaterial) });
                 }
         }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java
index 5493aa9b8e..396cce0c8c 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingShaping.java
@@ -3,25 +3,25 @@ package gregtech.loaders.oreprocessing;
 import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes;
 import static gregtech.api.recipe.RecipeMaps.extruderRecipes;
 import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
 import gregtech.api.recipe.RecipeCategories;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 @SuppressWarnings("RedundantLabeledSwitchRuleCodeBlock")
 public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegistrator {
@@ -34,7 +34,7 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
     @Override
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
-        if (((aMaterial == Materials.Glass) || (GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null))
+        if (((aMaterial == Materials.Glass) || (GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null))
             && (!aMaterial.contains(SubTag.NO_SMELTING))) {
             long aMaterialMass = aMaterial.getMass();
             int tAmount = (int) (aPrefix.mMaterialAmount / 3628800L);
@@ -50,20 +50,20 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
                     }
 
                 if (!OrePrefixes.block.isIgnored(aMaterial.mSmeltInto)
-                    && (GT_OreDictUnificator.get(OrePrefixes.block, aMaterial.mSmeltInto, 1L) != null)
+                    && (GTOreDictUnificator.get(OrePrefixes.block, aMaterial.mSmeltInto, 1L) != null)
                     && aMaterial != Materials.Ichorium) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(9, aStack), ItemList.Shape_Extruder_Block.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.block, aMaterial.mSmeltInto, tAmount))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(9, aStack), ItemList.Shape_Extruder_Block.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.block, aMaterial.mSmeltInto, tAmount))
                         .duration((10 * tAmount) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
 
                     // Allow creation of alloy smelter recipes for material recycling if < IV tier.
                     if (tTrueVoltage < TierEU.IV) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(9, aStack), ItemList.Shape_Mold_Block.get(0L))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.block, aMaterial.mSmeltInto, tAmount))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(9, aStack), ItemList.Shape_Mold_Block.get(0L))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.block, aMaterial.mSmeltInto, tAmount))
                             .duration((5 * tAmount) * TICKS)
                             .eut(calculateRecipeEU(aMaterial, 4 * tVoltageMultiplier))
                             .recipeCategory(RecipeCategories.alloySmelterMolding)
@@ -71,74 +71,74 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
                     }
                 }
                 if ((aPrefix != OrePrefixes.ingot || aMaterial != aMaterial.mSmeltInto)
-                    && GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Ingot.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, tAmount))
+                    && GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Ingot.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial.mSmeltInto, tAmount))
                         .duration(10 * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 4 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Pipe_Tiny.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial.mSmeltInto, tAmount * 2))
+                if (GTOreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Pipe_Tiny.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial.mSmeltInto, tAmount * 2))
                         .duration((4 * tAmount) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Pipe_Small.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Pipe_Small.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial.mSmeltInto, tAmount))
                         .duration((8 * tAmount) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(3, aStack), ItemList.Shape_Extruder_Pipe_Medium.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(3, aStack), ItemList.Shape_Extruder_Pipe_Medium.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial.mSmeltInto, tAmount))
                         .duration((24 * tAmount) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(6, aStack), ItemList.Shape_Extruder_Pipe_Large.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(6, aStack), ItemList.Shape_Extruder_Pipe_Large.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial.mSmeltInto, tAmount))
                         .duration((48 * tAmount) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(12, aStack), ItemList.Shape_Extruder_Pipe_Huge.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(12, aStack), ItemList.Shape_Extruder_Pipe_Huge.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial.mSmeltInto, tAmount))
                         .duration((96 * tAmount) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Plate.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Plate.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Small_Gear.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Small_Gear.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gearGtSmall, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(6, aStack), ItemList.Shape_Extruder_Turbine_Blade.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(6, aStack), ItemList.Shape_Extruder_Turbine_Blade.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
@@ -146,109 +146,109 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
 
                 if (!(aMaterial == Materials.AnnealedCopper || aMaterial == Materials.WroughtIron)) {
                     if (aMaterial.mStandardMoltenFluid != null) {
-                        if (GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Ring.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(36L))
                                 .duration(5 * SECONDS)
                                 .eut(calculateRecipeEU(aMaterial, 4 * tVoltageMultiplier))
                                 .addTo(fluidSolidifierRecipes);
                         }
-                        if (GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Screw.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(18L))
                                 .duration(2 * SECONDS + 10 * TICKS)
                                 .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                 .addTo(fluidSolidifierRecipes);
                         }
-                        if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Rod.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(72L))
                                 .duration(7 * SECONDS + 10 * TICKS)
                                 .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                 .addTo(fluidSolidifierRecipes);
                         }
-                        if (GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Bolt.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(18L))
                                 .duration(2 * SECONDS + 10 * TICKS)
                                 .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                 .addTo(fluidSolidifierRecipes);
                         }
-                        if (GT_OreDictUnificator.get(OrePrefixes.round, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.round, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Round.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.round, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.round, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(18L))
                                 .duration(2 * SECONDS + 10 * TICKS)
                                 .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                 .addTo(fluidSolidifierRecipes);
                         }
-                        if (GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Rod_Long.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(144L))
                                 .duration(15 * SECONDS)
                                 .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                 .addTo(fluidSolidifierRecipes);
                         }
-                        if (GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Turbine_Blade.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(864L))
                                 .duration(20 * SECONDS)
                                 .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                 .addTo(fluidSolidifierRecipes);
                         }
-                        if (GT_OreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Pipe_Tiny.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeTiny, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(72L))
                                 .duration(1 * SECONDS)
                                 .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                 .addTo(fluidSolidifierRecipes);
                         }
-                        if (GT_OreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Pipe_Small.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeSmall, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(144L))
                                 .duration(2 * SECONDS)
                                 .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                 .addTo(fluidSolidifierRecipes);
                         }
-                        if (GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Pipe_Medium.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeMedium, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(432L))
                                 .duration(4 * SECONDS)
                                 .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                 .addTo(fluidSolidifierRecipes);
                         }
-                        if (GT_OreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Pipe_Large.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeLarge, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(864L))
                                 .duration(8 * SECONDS)
                                 .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                                 .addTo(fluidSolidifierRecipes);
                         }
-                        if (GT_OreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
+                        if (GTOreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
                                 .itemInputs(ItemList.Shape_Mold_Pipe_Huge.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial, 1L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeHuge, aMaterial, 1L))
                                 .fluidInputs(aMaterial.getMolten(1728L))
                                 .duration(16 * SECONDS)
                                 .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
@@ -258,21 +258,21 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
                 }
                 if (tAmount * 2 <= 64 && aMaterial != Materials.Obsidian) {
                     if (!(aMaterial == Materials.Aluminium)) {
-                        if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Rod.get(0L))
+                        if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Rod.get(0L))
                                 .itemOutputs(
-                                    GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, tAmount * 2))
+                                    GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, tAmount * 2))
                                 .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                                 .eut(calculateRecipeEU(aMaterial, 6 * tVoltageMultiplier))
                                 .addTo(extruderRecipes);
                         }
                     } else {
-                        if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Rod.get(0L))
+                        if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Rod.get(0L))
                                 .itemOutputs(
-                                    GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, tAmount * 2))
+                                    GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mSmeltInto, tAmount * 2))
                                 .duration(10 * SECONDS)
                                 .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                 .addTo(extruderRecipes);
@@ -280,31 +280,31 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
                     }
                 }
                 if (tAmount * 2 <= 64) {
-                    if (GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial.mSmeltInto, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Wire.get(0L))
+                    if (GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial.mSmeltInto, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Wire.get(0L))
                             .itemOutputs(
-                                GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial.mSmeltInto, tAmount * 2))
+                                GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial.mSmeltInto, tAmount * 2))
                             .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                             .eut(calculateRecipeEU(aMaterial, 6 * tVoltageMultiplier))
                             .addTo(extruderRecipes);
                     }
                 }
                 if (tAmount * 8 <= 64) {
-                    if (GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial.mSmeltInto, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Bolt.get(0L))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial.mSmeltInto, tAmount * 8))
+                    if (GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial.mSmeltInto, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Bolt.get(0L))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial.mSmeltInto, tAmount * 8))
                             .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                             .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                             .addTo(extruderRecipes);
                     }
                 }
                 if (tAmount * 4 <= 64) {
-                    if (GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial.mSmeltInto, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Ring.get(0L))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial.mSmeltInto, tAmount * 4))
+                    if (GTOreDictUnificator.get(OrePrefixes.ring, aMaterial.mSmeltInto, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Ring.get(0L))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ring, aMaterial.mSmeltInto, tAmount * 4))
                             .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                             .eut(calculateRecipeEU(aMaterial, 6 * tVoltageMultiplier))
                             .addTo(extruderRecipes);
@@ -313,86 +313,84 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
                         && !aMaterial.contains(SubTag.NO_SMASHING)) {
                         // If material tier < IV then add manual recipe.
                         if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV
-                            && GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L) != null) {
-                            GT_ModHandler.addCraftingRecipe(
-                                GT_OreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L),
-                                GT_Proxy.tBits,
+                            && GTOreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L) != null) {
+                            GTModHandler.addCraftingRecipe(
+                                GTOreDictUnificator.get(OrePrefixes.ring, aMaterial, 1L),
+                                GTProxy.tBits,
                                 new Object[] { "h ", "fX", 'X', OrePrefixes.stick.get(aMaterial) });
                         }
                     }
                 }
 
-                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Extruder_Sword.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Extruder_Sword.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(3, aStack), ItemList.Shape_Extruder_Pickaxe.get(0L))
+                if (GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(3, aStack), ItemList.Shape_Extruder_Pickaxe.get(0L))
                         .itemOutputs(
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial.mSmeltInto, tAmount))
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * 3L * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Shovel.get(0L))
-                        .itemOutputs(
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Shovel.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * 1L * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(3, aStack), ItemList.Shape_Extruder_Axe.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(3, aStack), ItemList.Shape_Extruder_Axe.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * 3L * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Extruder_Hoe.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Extruder_Hoe.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(6, aStack), ItemList.Shape_Extruder_Hammer.get(0L))
-                        .itemOutputs(
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(6, aStack), ItemList.Shape_Extruder_Hammer.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * 6L * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadFile, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Extruder_File.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadFile, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.toolHeadFile, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Extruder_File.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.toolHeadFile, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Extruder_Saw.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Extruder_Saw.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(4, aStack), ItemList.Shape_Extruder_Gear.get(0L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, tAmount))
+                if (GTOreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(4, aStack), ItemList.Shape_Extruder_Gear.get(0L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, tAmount))
                         .duration(((int) Math.max(aMaterialMass * 5L * tAmount, tAmount)) * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8 * tVoltageMultiplier))
                         .addTo(extruderRecipes);
@@ -400,10 +398,10 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
 
                 if (!(aMaterial == Materials.StyreneButadieneRubber || aMaterial == Materials.Silicone)) {
                     if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                        if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Mold_Plate.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, tAmount))
+                        if (GTOreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Mold_Plate.get(0L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, tAmount))
                                 .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                                 .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                 .recipeCategory(RecipeCategories.alloySmelterMolding)
@@ -413,10 +411,10 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
                 } else {
                     // If tier < IV then add ability to turn ingots into plates via alloy smelter.
                     if (tTrueVoltage < TierEU.IV) {
-                        if (GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Mold_Plate.get(0L))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, tAmount))
+                        if (GTOreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Mold_Plate.get(0L))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial.mSmeltInto, tAmount))
                                 .duration(((int) Math.max(aMaterialMass * 2L * tAmount, tAmount)) * TICKS)
                                 .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                                 .recipeCategory(RecipeCategories.alloySmelterMolding)
@@ -427,10 +425,10 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
 
                 // If tier < IV then add ability to turn ingots into gears via alloy smelter.
                 if (tTrueVoltage < TierEU.IV) {
-                    if (GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(8, aStack), ItemList.Shape_Mold_Gear.get(0L))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, tAmount))
+                    if (GTOreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(8, aStack), ItemList.Shape_Mold_Gear.get(0L))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gearGt, aMaterial.mSmeltInto, tAmount))
                             .duration(((int) Math.max(aMaterialMass * 10L * tAmount, tAmount)) * TICKS)
                             .eut(calculateRecipeEU(aMaterial, 2 * tVoltageMultiplier))
                             .recipeCategory(RecipeCategories.alloySmelterMolding)
@@ -440,69 +438,69 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
 
                 switch (aMaterial.mSmeltInto.mName) {
                     case "Glass" -> {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Bottle.get(0L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Bottle.get(0L))
                             .itemOutputs(new ItemStack(Items.glass_bottle, 1))
                             .duration((tAmount * 32) * TICKS)
                             .eut(16)
                             .addTo(extruderRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Mold_Bottle.get(0L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Mold_Bottle.get(0L))
                             .itemOutputs(new ItemStack(Items.glass_bottle, 1))
                             .duration((tAmount * 64) * TICKS)
                             .eut(4)
                             .addTo(alloySmelterRecipes);
                     }
                     case "Steel" -> {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Cell.get(0L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Cell.get(0L))
                             .itemOutputs(ItemList.Cell_Empty.get(tAmount))
                             .duration((tAmount * 128) * TICKS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(extruderRecipes);
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casingadviron", tAmount * 2))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casingadviron", tAmount * 2))
                                 .duration((tAmount * 32) * TICKS)
                                 .eut(3 * tVoltageMultiplier)
                                 .addTo(extruderRecipes);
                         }
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casingadviron", tAmount * 3))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casingadviron", tAmount * 3))
                                 .duration((tAmount * 128) * TICKS)
                                 .eut(1 * tVoltageMultiplier)
                                 .addTo(alloySmelterRecipes);
                         }
                     }
                     case "Iron", "WroughtIron" -> {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Cell.get(0L))
-                            .itemOutputs(GT_ModHandler.getIC2Item("fuelRod", tAmount))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Cell.get(0L))
+                            .itemOutputs(GTModHandler.getIC2Item("fuelRod", tAmount))
                             .duration((tAmount * 128) * TICKS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(extruderRecipes);
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casingiron", tAmount * 2))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casingiron", tAmount * 2))
                                 .duration((tAmount * 32) * TICKS)
                                 .eut(3 * tVoltageMultiplier)
                                 .addTo(extruderRecipes);
                         }
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casingiron", tAmount * 3))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casingiron", tAmount * 3))
                                 .duration((tAmount * 128) * TICKS)
                                 .eut(1 * tVoltageMultiplier)
                                 .addTo(alloySmelterRecipes);
                         }
                         if (tAmount * 31 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(31, aStack), ItemList.Shape_Mold_Anvil.get(0L))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(31, aStack), ItemList.Shape_Mold_Anvil.get(0L))
                                 .itemOutputs(new ItemStack(Blocks.anvil, 1, 0))
                                 .duration((tAmount * 512) * TICKS)
                                 .eut(4 * tVoltageMultiplier)
@@ -510,24 +508,24 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
                         }
                     }
                     case "Tin" -> {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Extruder_Cell.get(0L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Extruder_Cell.get(0L))
                             .itemOutputs(ItemList.Cell_Empty.get(tAmount))
                             .duration((tAmount * 128) * TICKS)
                             .eut(TierEU.RECIPE_LV)
                             .addTo(extruderRecipes);
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casingtin", tAmount * 2))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casingtin", tAmount * 2))
                                 .duration((tAmount * 32) * TICKS)
                                 .eut(3 * tVoltageMultiplier)
                                 .addTo(extruderRecipes);
                         }
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casingtin", tAmount * 3))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casingtin", tAmount * 3))
                                 .duration((tAmount * 128) * TICKS)
                                 .eut(1 * tVoltageMultiplier)
                                 .addTo(alloySmelterRecipes);
@@ -535,17 +533,17 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
                     }
                     case "Lead" -> {
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casinglead", tAmount * 2))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casinglead", tAmount * 2))
                                 .duration((tAmount * 32) * TICKS)
                                 .eut(3 * tVoltageMultiplier)
                                 .addTo(extruderRecipes);
                         }
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casinglead", tAmount * 3))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casinglead", tAmount * 3))
                                 .duration((tAmount * 128) * TICKS)
                                 .eut(1 * tVoltageMultiplier)
                                 .addTo(alloySmelterRecipes);
@@ -553,17 +551,17 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
                     }
                     case "Copper", "AnnealedCopper" -> {
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casingcopper", tAmount * 2))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casingcopper", tAmount * 2))
                                 .duration((tAmount * 32) * TICKS)
                                 .eut(3 * tVoltageMultiplier)
                                 .addTo(extruderRecipes);
                         }
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casingcopper", tAmount * 3))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casingcopper", tAmount * 3))
                                 .duration((tAmount * 128) * TICKS)
                                 .eut(1 * tVoltageMultiplier)
                                 .addTo(alloySmelterRecipes);
@@ -571,17 +569,17 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
                     }
                     case "Bronze" -> {
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casingbronze", tAmount * 2))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casingbronze", tAmount * 2))
                                 .duration((tAmount * 32) * TICKS)
                                 .eut(3 * tVoltageMultiplier)
                                 .addTo(extruderRecipes);
                         }
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casingbronze", tAmount * 3))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casingbronze", tAmount * 3))
                                 .duration((tAmount * 128) * TICKS)
                                 .eut(1 * tVoltageMultiplier)
                                 .addTo(alloySmelterRecipes);
@@ -589,25 +587,25 @@ public class ProcessingShaping implements gregtech.api.interfaces.IOreRecipeRegi
                     }
                     case "Gold" -> {
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casinggold", tAmount * 2))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casinggold", tAmount * 2))
                                 .duration((tAmount * 32) * TICKS)
                                 .eut(3 * tVoltageMultiplier)
                                 .addTo(extruderRecipes);
                         }
                         if (tAmount * 2 <= 64) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
-                                .itemOutputs(GT_ModHandler.getIC2Item("casinggold", tAmount * 3))
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(2, aStack), ItemList.Shape_Mold_Casing.get(0L))
+                                .itemOutputs(GTModHandler.getIC2Item("casinggold", tAmount * 3))
                                 .duration((tAmount * 128) * TICKS)
                                 .eut(1 * tVoltageMultiplier)
                                 .addTo(alloySmelterRecipes);
                         }
                     }
                     case "Polytetrafluoroethylene" -> {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack), ItemList.Shape_Extruder_Cell.get(0L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack), ItemList.Shape_Extruder_Cell.get(0L))
                             .itemOutputs(ItemList.Cell_Empty.get(tAmount * 4))
                             .duration((tAmount * 128) * TICKS)
                             .eut(TierEU.RECIPE_LV)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingSlab.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSlab.java
index 35947755d3..d4f7ed4f7e 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingSlab.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingSlab.java
@@ -2,15 +2,15 @@ package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.enums.Mods.Railcraft;
 import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingSlab implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -23,8 +23,8 @@ public class ProcessingSlab implements gregtech.api.interfaces.IOreRecipeRegistr
         ItemStack aStack) {
         if (aOreDictName.startsWith("slabWood")) {
             if (Railcraft.isModLoaded()) {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(3, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(3, aStack))
                     .itemOutputs(ItemList.RC_Tie_Wood.get(3L))
                     .fluidInputs(Materials.Creosote.getFluid(300L))
                     .duration(10 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStick.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStick.java
index e5aac7bfe7..d04ffd1190 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStick.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStick.java
@@ -4,21 +4,21 @@ import static gregtech.api.recipe.RecipeMaps.benderRecipes;
 import static gregtech.api.recipe.RecipeMaps.cutterRecipes;
 import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
 import static gregtech.api.recipe.RecipeMaps.latheRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 public class ProcessingStick implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -30,33 +30,33 @@ public class ProcessingStick implements gregtech.api.interfaces.IOreRecipeRegist
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
         if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-            GT_ModHandler.addCraftingRecipe(
-                GT_OreDictUnificator.get(OrePrefixes.springSmall, aMaterial, 1L),
-                GT_ModHandler.RecipeBits.BUFFERED,
+            GTModHandler.addCraftingRecipe(
+                GTOreDictUnificator.get(OrePrefixes.springSmall, aMaterial, 1L),
+                GTModHandler.RecipeBits.BUFFERED,
                 new Object[] { " s ", "fPx", 'P', OrePrefixes.stick.get(aMaterial) });
         }
         if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_WORKING)) {
 
-            if ((aMaterial.contains(SubTag.CRYSTAL) ? GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L)
-                : GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L)) != null
-                && GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial.mMacerateInto, 1L) != null) {
-                GT_Values.RA.stdBuilder()
+            if ((aMaterial.contains(SubTag.CRYSTAL) ? GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L)
+                : GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L)) != null
+                && GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial.mMacerateInto, 1L) != null) {
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        aMaterial.contains(SubTag.CRYSTAL) ? GT_OreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L)
-                            : GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L))
+                        aMaterial.contains(SubTag.CRYSTAL) ? GTOreDictUnificator.get(OrePrefixes.gem, aMaterial, 1L)
+                            : GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dustSmall, aMaterial.mMacerateInto, 2L))
+                        GTOreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dustSmall, aMaterial.mMacerateInto, 2L))
                     .duration(((int) Math.max(aMaterial.getMass() * 5L, 1L)) * TICKS)
                     .eut(calculateRecipeEU(aMaterial, 16))
                     .addTo(latheRecipes);
             }
 
-            if (GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L) != null) {
+            if (GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 1L) != null) {
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 4L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 4L))
                     .fluidInputs(
                         Materials.Water.getFluid(
                             Math.max(
@@ -70,11 +70,11 @@ public class ProcessingStick implements gregtech.api.interfaces.IOreRecipeRegist
                     .eut(calculateRecipeEU(aMaterial, 4))
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 4L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 4L))
                     .fluidInputs(
-                        GT_ModHandler.getDistilledWater(
+                        GTModHandler.getDistilledWater(
                             Math.max(
                                 3,
                                 Math.min(
@@ -86,9 +86,9 @@ public class ProcessingStick implements gregtech.api.interfaces.IOreRecipeRegist
                     .eut(calculateRecipeEU(aMaterial, 4))
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.bolt, aMaterial, 4L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.bolt, aMaterial, 4L))
                     .fluidInputs(
                         Materials.Lubricant.getFluid(
                             Math.max(
@@ -104,13 +104,13 @@ public class ProcessingStick implements gregtech.api.interfaces.IOreRecipeRegist
 
             if ((aMaterial.mUnificatable) && (aMaterial.mMaterialInto == aMaterial)) {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 2L),
-                        GT_Proxy.tBits,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.stick, aMaterial, 2L),
+                        GTProxy.tBits,
                         new Object[] { "s", "X", 'X', OrePrefixes.stickLong.get(aMaterial) });
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "f ", " X", 'X', OrePrefixes.ingot.get(aMaterial) });
                 }
             }
@@ -118,20 +118,20 @@ public class ProcessingStick implements gregtech.api.interfaces.IOreRecipeRegist
         if (!aMaterial.contains(gregtech.api.enums.SubTag.NO_SMASHING)) {
             // bender recipe
             {
-                if (GT_OreDictUnificator.get(OrePrefixes.springSmall, aMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.springSmall, aMaterial, 2L))
+                if (GTOreDictUnificator.get(OrePrefixes.springSmall, aMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.springSmall, aMaterial, 2L))
                         .duration(5 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, 8))
                         .addTo(benderRecipes);
                 }
             }
 
-            if (GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L) != null) {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(2, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L))
+            if (GTOreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L) != null) {
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(2, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L))
                     .duration(Math.max(aMaterial.getMass(), 1L))
                     .eut(calculateRecipeEU(aMaterial, 16))
                     .addTo(hammerRecipes);
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStickLong.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStickLong.java
index 1f00300264..02253bb5a3 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStickLong.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStickLong.java
@@ -2,21 +2,21 @@ package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.benderRecipes;
 import static gregtech.api.recipe.RecipeMaps.cutterRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 public class ProcessingStickLong implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -28,17 +28,17 @@ public class ProcessingStickLong implements gregtech.api.interfaces.IOreRecipeRe
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
         if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-            GT_ModHandler.addCraftingRecipe(
-                GT_OreDictUnificator.get(OrePrefixes.spring, aMaterial, 1L),
-                GT_ModHandler.RecipeBits.BUFFERED,
+            GTModHandler.addCraftingRecipe(
+                GTOreDictUnificator.get(OrePrefixes.spring, aMaterial, 1L),
+                GTModHandler.RecipeBits.BUFFERED,
                 new Object[] { " s ", "fSx", " S ", 'S', OrePrefixes.stickLong.get(aMaterial) });
         }
         if (!aMaterial.contains(SubTag.NO_WORKING)) {
 
-            if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L) != null) {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 2L))
+            if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial, 1L) != null) {
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stick, aMaterial, 2L))
                     .fluidInputs(
                         Materials.Water.getFluid(
                             Math.max(
@@ -51,11 +51,11 @@ public class ProcessingStickLong implements gregtech.api.interfaces.IOreRecipeRe
                     .eut(calculateRecipeEU(aMaterial, 4))
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 2L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stick, aMaterial, 2L))
                     .fluidInputs(
-                        GT_ModHandler.getDistilledWater(
+                        GTModHandler.getDistilledWater(
                             Math.max(
                                 3,
                                 Math.min(
@@ -66,9 +66,9 @@ public class ProcessingStickLong implements gregtech.api.interfaces.IOreRecipeRe
                     .eut(calculateRecipeEU(aMaterial, 4))
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial, 2L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stick, aMaterial, 2L))
                     .fluidInputs(
                         Materials.Lubricant.getFluid(
                             Math.max(
@@ -84,13 +84,13 @@ public class ProcessingStickLong implements gregtech.api.interfaces.IOreRecipeRe
 
             if (aMaterial.mUnificatable && (aMaterial.mMaterialInto == aMaterial)) {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "sf", "G ", 'G', OrePrefixes.gemFlawless.get(aMaterial) });
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 2L),
-                        GT_Proxy.tBits,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 2L),
+                        GTProxy.tBits,
                         new Object[] { "sf", "G ", 'G', OrePrefixes.gemExquisite.get(aMaterial) });
                 }
             }
@@ -98,10 +98,10 @@ public class ProcessingStickLong implements gregtech.api.interfaces.IOreRecipeRe
         if (!aMaterial.contains(SubTag.NO_SMASHING)) {
             // Bender recipes
             {
-                if (GT_OreDictUnificator.get(OrePrefixes.spring, aMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.spring, aMaterial, 1L))
+                if (GTOreDictUnificator.get(OrePrefixes.spring, aMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.spring, aMaterial, 1L))
                         .duration(10 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, 16))
                         .addTo(benderRecipes);
@@ -110,9 +110,9 @@ public class ProcessingStickLong implements gregtech.api.interfaces.IOreRecipeRe
 
             if (aMaterial.mUnificatable && (aMaterial.mMaterialInto == aMaterial))
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "ShS", 'S', OrePrefixes.stick.get(aMaterial) });
                 }
         }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStone.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStone.java
index 840f49b4dd..da21829d0c 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStone.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStone.java
@@ -3,21 +3,21 @@ package gregtech.loaders.oreprocessing;
 import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
 import static gregtech.api.recipe.RecipeMaps.cutterRecipes;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
 import net.minecraft.block.Block;
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
 import gregtech.api.interfaces.IOreRecipeRegistrator;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingStone implements IOreRecipeRegistrator {
 
@@ -28,11 +28,11 @@ public class ProcessingStone implements IOreRecipeRegistrator {
     @Override
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
-        Block aBlock = GT_Utility.getBlockFromStack(aStack);
+        Block aBlock = GTUtility.getBlockFromStack(aStack);
         switch (aMaterial.mName) {
             case "NULL":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(3, aStack), new ItemStack(Blocks.redstone_torch, 2))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(3, aStack), new ItemStack(Blocks.redstone_torch, 2))
                     .itemOutputs(new ItemStack(Items.repeater, 1))
                     .fluidInputs(Materials.Redstone.getMolten(144L))
                     .duration(5 * SECONDS)
@@ -40,38 +40,38 @@ public class ProcessingStone implements IOreRecipeRegistrator {
                     .addTo(assemblerRecipes);
                 break;
             case "Sand":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(new ItemStack(Blocks.sand, 1, 0))
                     .duration(20 * SECONDS)
                     .eut(2)
                     .addTo(maceratorRecipes);
                 break;
             case "Endstone":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dustImpure, Materials.Endstone, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tungstate, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dustImpure, Materials.Endstone, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tungstate, 1L))
                     .outputChances(10000, 500)
                     .duration(20 * SECONDS)
                     .eut(2)
                     .addTo(maceratorRecipes);
                 break;
             case "Netherrack":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dustImpure, Materials.Netherrack, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dustImpure, Materials.Netherrack, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 1L))
                     .outputChances(10000, 500)
                     .duration(20 * SECONDS)
                     .eut(2)
                     .addTo(maceratorRecipes);
                 break;
             case "NetherBrick":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(new ItemStack(Blocks.nether_brick_fence, 1))
                     .duration(5 * SECONDS)
                     .eut(4)
@@ -81,54 +81,54 @@ public class ProcessingStone implements IOreRecipeRegistrator {
                 if (aBlock != Blocks.air) aBlock.setResistance(20.0F);
                 break;
             case "Concrete":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                     .fluidInputs(Materials.Water.getFluid(Math.max(4, Math.min(1000, 200 * 30 / 320))))
                     .duration(10 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
-                    .fluidInputs(GT_ModHandler.getDistilledWater(Math.max(3, Math.min(750, 200 * 30 / 426))))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                    .fluidInputs(GTModHandler.getDistilledWater(Math.max(3, Math.min(750, 200 * 30 / 426))))
                     .duration(10 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                     .fluidInputs(Materials.Lubricant.getFluid(Math.max(1, Math.min(250, 100 * 30 / 1280))))
                     .duration(5 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
                     .duration(20 * SECONDS)
                     .eut(2)
                     .addTo(maceratorRecipes);
                 break;
             case "Rhyolite":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.PotassiumFeldspar, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quartz, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.PotassiumFeldspar, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quartz, 1L))
                     .outputChances(10000, 2000)
                     .duration(20 * SECONDS)
                     .eut(2)
                     .addTo(maceratorRecipes);
                 break;
             case "Komatiite":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Biotite, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.Biotite, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium, 1L))
                     .outputChances(10000, 500)
                     .duration(20 * SECONDS)
                     .eut(2)
@@ -136,44 +136,44 @@ public class ProcessingStone implements IOreRecipeRegistrator {
                 break;
             case "Dacite":
             case "Andesite":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Obsidian, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.Obsidian, 1L))
                     .outputChances(10000, 2000)
                     .duration(20 * SECONDS)
                     .eut(2)
                     .addTo(maceratorRecipes);
                 break;
             case "Gabbro":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.PotassiumFeldspar, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Pyrite, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.PotassiumFeldspar, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.Pyrite, 1L))
                     .outputChances(10000, 2000)
                     .duration(20 * SECONDS)
                     .eut(2)
                     .addTo(maceratorRecipes);
                 break;
             case "Eclogite":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Rutile, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Rutile, 1L))
                     .outputChances(10000, 1000)
                     .duration(20 * SECONDS)
                     .eut(2)
                     .addTo(maceratorRecipes);
                 break;
             case "Soapstone":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dustImpure, Materials.Talc, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Chromite, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dustImpure, Materials.Talc, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Chromite, 1L))
                     .outputChances(10000, 1000)
                     .duration(20 * SECONDS)
                     .eut(2)
@@ -181,11 +181,11 @@ public class ProcessingStone implements IOreRecipeRegistrator {
                 break;
             case "Greenschist":
             case "Blueschist":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Glauconite, 2L),
-                        GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Basalt, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Glauconite, 2L),
+                        GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Basalt, 1L))
                     .outputChances(10000, 1000)
                     .duration(20 * SECONDS)
                     .eut(2)
@@ -193,11 +193,11 @@ public class ProcessingStone implements IOreRecipeRegistrator {
                 break;
             case "Gneiss":
             case "Migmatite":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dustImpure, Materials.GraniteBlack, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dustImpure, Materials.GraniteBlack, 1L))
                     .outputChances(10000, 5000)
                     .duration(20 * SECONDS)
                     .eut(2)
@@ -205,69 +205,69 @@ public class ProcessingStone implements IOreRecipeRegistrator {
                 break;
             case "Redrock":
             case "Marble":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                     .fluidInputs(Materials.Water.getFluid(Math.max(4, Math.min(1000, 400 * 30 / 320))))
                     .duration(20 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
-                    .fluidInputs(GT_ModHandler.getDistilledWater(Math.max(3, Math.min(750, 400 * 30 / 426))))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                    .fluidInputs(GTModHandler.getDistilledWater(Math.max(3, Math.min(750, 400 * 30 / 426))))
                     .duration(20 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                     .fluidInputs(Materials.Lubricant.getFluid(Math.max(1, Math.min(250, 200 * 30 / 1280))))
                     .duration(10 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
             case "Basalt":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(3))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(3))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                     .fluidInputs(Materials.Water.getFluid(Math.max(4, Math.min(1000, 400 * 30 / 320))))
                     .duration(20 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(3))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
-                    .fluidInputs(GT_ModHandler.getDistilledWater(Math.max(3, Math.min(750, 400 * 30 / 426))))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(3))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                    .fluidInputs(GTModHandler.getDistilledWater(Math.max(3, Math.min(750, 400 * 30 / 426))))
                     .duration(20 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(3))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(3))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                     .fluidInputs(Materials.Lubricant.getFluid(Math.max(1, Math.min(250, 200 * 30 / 1280))))
                     .duration(10 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
             case "Quartzite":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dust, aMaterial, 1L))
                     .outputChances(10000, 1000)
                     .duration(20 * SECONDS)
                     .eut(2)
                     .addTo(maceratorRecipes);
                 break;
             case "Flint":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 2L),
+                        GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 2L),
                         new ItemStack(Items.flint, 1))
                     .outputChances(10000, 5000)
                     .duration(20 * SECONDS)
@@ -275,70 +275,70 @@ public class ProcessingStone implements IOreRecipeRegistrator {
                     .addTo(maceratorRecipes);
                 break;
             case "GraniteBlack":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                     .fluidInputs(Materials.Water.getFluid(Math.max(4, Math.min(1000, 400 * 30 / 320))))
                     .duration(20 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
-                    .fluidInputs(GT_ModHandler.getDistilledWater(Math.max(3, Math.min(750, 400 * 30 / 426))))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                    .fluidInputs(GTModHandler.getDistilledWater(Math.max(3, Math.min(750, 400 * 30 / 426))))
                     .duration(20 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                     .fluidInputs(Materials.Lubricant.getFluid(Math.max(1, Math.min(250, 200 * 30 / 1280))))
                     .duration(10 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 1L))
                     .outputChances(10000, 100)
                     .duration(20 * SECONDS)
                     .eut(2)
                     .addTo(maceratorRecipes);
                 break;
             case "GraniteRed":
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                     .fluidInputs(Materials.Water.getFluid(Math.max(4, Math.min(1000, 400 * 30 / 320))))
                     .duration(20 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
-                    .fluidInputs(GT_ModHandler.getDistilledWater(Math.max(3, Math.min(750, 400 * 30 / 426))))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                    .fluidInputs(GTModHandler.getDistilledWater(Math.max(3, Math.min(750, 400 * 30 / 426))))
                     .duration(20 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
-                    .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
+                    .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L))
                     .fluidInputs(Materials.Lubricant.getFluid(Math.max(1, Math.min(250, 200 * 30 / 1280))))
                     .duration(10 * SECONDS)
                     .eut(TierEU.RECIPE_LV)
                     .addTo(cutterRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_Utility.copyAmount(1, aStack))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTUtility.copyAmount(1, aStack))
                     .itemOutputs(
-                        GT_OreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L),
-                        GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Uranium, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.dustImpure, aMaterial, 1L),
+                        GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Uranium, 1L))
                     .outputChances(10000, 100)
                     .duration(20 * SECONDS)
                     .eut(2)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneCobble.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneCobble.java
index fb9431e8e4..f764ebd4a8 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneCobble.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingStoneCobble.java
@@ -1,15 +1,15 @@
 package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingStoneCobble implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -20,8 +20,8 @@ public class ProcessingStoneCobble implements gregtech.api.interfaces.IOreRecipe
     @Override
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(8, aStack), GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(8, aStack), GTUtility.getIntegratedCircuit(8))
             .itemOutputs(new ItemStack(Blocks.furnace, 1))
             .duration(20 * SECONDS)
             .eut(4)
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHead.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHead.java
index db3175279d..888c6221af 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHead.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolHead.java
@@ -4,25 +4,25 @@ import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
 import static gregtech.api.recipe.RecipeMaps.extruderRecipes;
 import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes;
 import static gregtech.api.recipe.RecipeMaps.formingPressRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
 import gregtech.api.enums.ToolDictNames;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
-import gregtech.common.items.GT_MetaGenerated_Tool_01;
-import gregtech.common.items.ID_MetaTool_01;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
+import gregtech.common.items.IDMetaTool01;
+import gregtech.common.items.MetaGeneratedTool01;
 
 public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeRegistrator { // TODO COMPARE WITH OLD TOOL
                                                                                            // HEAD??? generator
@@ -58,460 +58,460 @@ public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeReg
             || aMaterial.contains(SubTag.SOFT);
         switch (aPrefix) {
             case toolHeadAxe -> {
-                GT_ModHandler.addShapelessCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.AXE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
+                GTModHandler.addShapelessCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE
+                        .getToolWithStats(IDMetaTool01.AXE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
                     new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
-                if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial, 1L),
-                            GT_Utility.getIntegratedCircuit(2))
+                            GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial, 1L),
+                            GTUtility.getIntegratedCircuit(2))
                         .itemOutputs(
-                            GT_MetaGenerated_Tool_01.INSTANCE
-                                .getToolWithStats(ID_MetaTool_01.AXE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null))
+                            MetaGeneratedTool01.INSTANCE
+                                .getToolWithStats(IDMetaTool01.AXE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null))
                         .duration(10 * SECONDS)
                         .eut(TierEU.RECIPE_MV)
                         .addTo(assemblerRecipes);
                 }
-                if (aSpecialRecipeReq1) GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                if (aSpecialRecipeReq1) GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "PIh", "P  ", "f  ", 'P', OrePrefixes.plate.get(aMaterial), 'I',
                         OrePrefixes.ingot.get(aMaterial) });
-                if (!aNoWorking) GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                if (!aNoWorking) GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "GG ", "G  ", "f  ", 'G', OrePrefixes.gem.get(aMaterial) });
             }
             case toolHeadBuzzSaw -> {
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.BUZZSAW_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.BUZZSAW_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 100000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PBM", "dXG", "SGP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.BUZZSAW_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.BUZZSAW_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 75000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PBM", "dXG", "SGP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.BUZZSAW_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.BUZZSAW_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 50000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PBM", "dXG", "SGP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.BUZZSAW_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.BUZZSAW_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 400000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PBM", "dXG", "SGP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.BUZZSAW_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.BUZZSAW_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 300000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PBM", "dXG", "SGP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.BUZZSAW_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.BUZZSAW_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 200000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PBM", "dXG", "SGP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.BUZZSAW_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.BUZZSAW_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1600000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PBM", "dXG", "SGP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.BUZZSAW_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.BUZZSAW_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1200000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PBM", "dXG", "SGP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.BUZZSAW_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.BUZZSAW_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 800000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PBM", "dXG", "SGP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Sodium.get(1L) });
-                if (aSpecialRecipeReq2) GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.toolHeadBuzzSaw, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                if (aSpecialRecipeReq2) GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.toolHeadBuzzSaw, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "wXh", "X X", "fXx", 'X', OrePrefixes.plate.get(aMaterial) });
             }
             case toolHeadChainsaw -> {
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.CHAINSAW_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.CHAINSAW_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 100000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.CHAINSAW_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.CHAINSAW_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 75000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.CHAINSAW_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.CHAINSAW_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 50000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.CHAINSAW_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.CHAINSAW_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 400000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.CHAINSAW_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.CHAINSAW_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 300000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.CHAINSAW_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.CHAINSAW_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 200000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.CHAINSAW_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.CHAINSAW_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1600000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.CHAINSAW_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.CHAINSAW_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1200000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.CHAINSAW_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.CHAINSAW_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 800000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Sodium.get(1L) });
-                if (aSpecialRecipeReq2) GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.toolHeadChainsaw, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                if (aSpecialRecipeReq2) GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.toolHeadChainsaw, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "SRS", "XhX", "SRS", 'X', OrePrefixes.plate.get(aMaterial), 'S',
                         OrePrefixes.plate.get(Materials.Steel), 'R', OrePrefixes.ring.get(Materials.Steel) });
             }
             case toolHeadDrill -> {
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.DRILL_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.DRILL_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 100_000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.DRILL_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.DRILL_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 75_000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.DRILL_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.DRILL_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 50_000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.DRILL_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.DRILL_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 400_000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.DRILL_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.DRILL_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 300_000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.DRILL_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.DRILL_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 200_000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.DRILL_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.DRILL_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1_600_000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.DRILL_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.DRILL_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1_200_000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.DRILL_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.DRILL_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 800_000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.JACKHAMMER.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.JACKHAMMER.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1_600_000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "PRP", "MPB", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Piston_HV.get(1L), 'S', OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'R',
                         OrePrefixes.spring.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.JACKHAMMER.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.JACKHAMMER.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1_200_000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "PRP", "MPB", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Piston_HV.get(1L), 'S', OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'R',
                         OrePrefixes.spring.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.JACKHAMMER.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.JACKHAMMER.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 800_000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "PRP", "MPB", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Piston_HV.get(1L), 'S', OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'R',
                         OrePrefixes.spring.get(Materials.StainlessSteel), 'B', ItemList.Battery_RE_HV_Sodium.get(1L) });
                 if (aSpecialRecipeReq2) {
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.toolHeadDrill, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.toolHeadDrill, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "XSX", "XSX", "ShS", 'X', OrePrefixes.plate.get(aMaterial), 'S',
                             OrePrefixes.plate.get(Materials.Steel) });
                     if (aMaterial.mStandardMoltenFluid != null) {
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(ItemList.Shape_Mold_ToolHeadDrill.get(0))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadDrill, aMaterial, 1L))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.toolHeadDrill, aMaterial, 1L))
                             .fluidInputs(aMaterial.getMolten(144 * 4))
                             .duration(5 * SECONDS)
                             .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV))
                             .addTo(fluidSolidifierRecipes);
                     }
-                    if (GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
+                    if (GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 1L) != null) {
+                        GTValues.RA.stdBuilder()
                             .itemInputs(
-                                GT_OreDictUnificator.get(OrePrefixes.ingot, aMaterial, 4L),
+                                GTOreDictUnificator.get(OrePrefixes.ingot, aMaterial, 4L),
                                 ItemList.Shape_Extruder_ToolHeadDrill.get(0))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.toolHeadDrill, aMaterial, 1L))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.toolHeadDrill, aMaterial, 1L))
                             .duration(5 * SECONDS)
                             .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV))
                             .addTo(extruderRecipes);
@@ -520,40 +520,36 @@ public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeReg
             }
             case toolHeadFile -> {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                    GT_ModHandler.addShapelessCraftingRecipe(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(ID_MetaTool_01.FILE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
+                    GTModHandler.addShapelessCraftingRecipe(
+                        MetaGeneratedTool01.INSTANCE
+                            .getToolWithStats(IDMetaTool01.FILE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
                         new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
 
                     if ((!aMaterial.contains(SubTag.NO_SMASHING)) && (!aMaterial.contains(SubTag.BOUNCY))) {
                         if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                            GT_ModHandler.addCraftingRecipe(
-                                GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                                    ID_MetaTool_01.FILE.ID,
+                            GTModHandler.addCraftingRecipe(
+                                MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                                    IDMetaTool01.FILE.ID,
                                     1,
                                     aMaterial,
                                     aMaterial.mHandleMaterial,
                                     null),
-                                GT_ModHandler.RecipeBits.MIRRORED | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                                    | GT_ModHandler.RecipeBits.BUFFERED,
+                                GTModHandler.RecipeBits.MIRRORED | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                                    | GTModHandler.RecipeBits.BUFFERED,
                                 new Object[] { "P", "P", "S", 'P', OrePrefixes.plate.get(aMaterial), 'S',
                                     OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
                         }
                     }
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadFile, aMaterial, 1L),
-                            GT_Utility.getIntegratedCircuit(15))
+                            GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadFile, aMaterial, 1L),
+                            GTUtility.getIntegratedCircuit(15))
                         .itemOutputs(
-                            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                                ID_MetaTool_01.FILE.ID,
-                                1,
-                                aMaterial,
-                                aMaterial.mHandleMaterial,
-                                null))
+                            MetaGeneratedTool01.INSTANCE
+                                .getToolWithStats(IDMetaTool01.FILE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null))
                         .duration(10 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV))
                         .addTo(assemblerRecipes);
@@ -561,62 +557,62 @@ public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeReg
             }
             case toolHeadHoe -> {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                    GT_ModHandler.addShapelessCraftingRecipe(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(ID_MetaTool_01.HOE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
+                    GTModHandler.addShapelessCraftingRecipe(
+                        MetaGeneratedTool01.INSTANCE
+                            .getToolWithStats(IDMetaTool01.HOE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
                         new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial, 1L),
-                            GT_Utility.getIntegratedCircuit(16))
+                            GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial, 1L),
+                            GTUtility.getIntegratedCircuit(16))
                         .itemOutputs(
-                            GT_MetaGenerated_Tool_01.INSTANCE
-                                .getToolWithStats(ID_MetaTool_01.HOE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null))
+                            MetaGeneratedTool01.INSTANCE
+                                .getToolWithStats(IDMetaTool01.HOE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null))
                         .duration(10 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV))
                         .addTo(assemblerRecipes);
                 }
-                if (aSpecialRecipeReq1) GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                if (aSpecialRecipeReq1) GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "PIh", "f  ", 'P', OrePrefixes.plate.get(aMaterial), 'I',
                         OrePrefixes.ingot.get(aMaterial) });
-                if (!aNoWorking) GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                if (!aNoWorking) GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "GG ", "f  ", "   ", 'G', OrePrefixes.gem.get(aMaterial) });
             }
             case toolHeadPickaxe -> {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
 
-                    GT_ModHandler.addShapelessCraftingRecipe(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(ID_MetaTool_01.PICKAXE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
+                    GTModHandler.addShapelessCraftingRecipe(
+                        MetaGeneratedTool01.INSTANCE
+                            .getToolWithStats(IDMetaTool01.PICKAXE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
                         new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
 
-                    if (aSpecialRecipeReq1) GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    if (aSpecialRecipeReq1) GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "PII", "f h", 'P', OrePrefixes.plate.get(aMaterial), 'I',
                             OrePrefixes.ingot.get(aMaterial) });
 
-                    if (!aNoWorking) GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    if (!aNoWorking) GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "GGG", "f  ", 'G', OrePrefixes.gem.get(aMaterial) });
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial, 1L),
-                            GT_Utility.getIntegratedCircuit(5))
+                            GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, aMaterial, 1L),
+                            GTUtility.getIntegratedCircuit(5))
                         .itemOutputs(
-                            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                                ID_MetaTool_01.PICKAXE.ID,
+                            MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                                IDMetaTool01.PICKAXE.ID,
                                 1,
                                 aMaterial,
                                 aMaterial.mHandleMaterial,
@@ -629,34 +625,30 @@ public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeReg
             case toolHeadPlow -> {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
 
-                    GT_ModHandler.addShapelessCraftingRecipe(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(ID_MetaTool_01.PLOW.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
+                    GTModHandler.addShapelessCraftingRecipe(
+                        MetaGeneratedTool01.INSTANCE
+                            .getToolWithStats(IDMetaTool01.PLOW.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
                         new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
 
-                    if (aSpecialRecipeReq1) GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.toolHeadPlow, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    if (aSpecialRecipeReq1) GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.toolHeadPlow, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "PP", "PP", "hf", 'P', OrePrefixes.plate.get(aMaterial) });
 
-                    if (!aNoWorking) GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.toolHeadPlow, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    if (!aNoWorking) GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.toolHeadPlow, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "GG", "GG", " f", 'G', OrePrefixes.gem.get(aMaterial) });
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadPlow, aMaterial, 1L),
-                            GT_Utility.getIntegratedCircuit(6))
+                            GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadPlow, aMaterial, 1L),
+                            GTUtility.getIntegratedCircuit(6))
                         .itemOutputs(
-                            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                                ID_MetaTool_01.PLOW.ID,
-                                1,
-                                aMaterial,
-                                aMaterial.mHandleMaterial,
-                                null))
+                            MetaGeneratedTool01.INSTANCE
+                                .getToolWithStats(IDMetaTool01.PLOW.ID, 1, aMaterial, aMaterial.mHandleMaterial, null))
                         .duration(10 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV))
                         .addTo(assemblerRecipes);
@@ -665,31 +657,31 @@ public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeReg
             case toolHeadSaw -> {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
 
-                    GT_ModHandler.addShapelessCraftingRecipe(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(ID_MetaTool_01.SAW.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
+                    GTModHandler.addShapelessCraftingRecipe(
+                        MetaGeneratedTool01.INSTANCE
+                            .getToolWithStats(IDMetaTool01.SAW.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
                         new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
 
-                    if (aSpecialRecipeReq1) GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    if (aSpecialRecipeReq1) GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "PP ", "fh ", 'P', OrePrefixes.plate.get(aMaterial), 'I',
                             OrePrefixes.ingot.get(aMaterial) });
 
-                    if (!aNoWorking) GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    if (!aNoWorking) GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "GGf", 'G', OrePrefixes.gem.get(aMaterial) });
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial, 1L),
-                            GT_Utility.getIntegratedCircuit(7))
+                            GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadSaw, aMaterial, 1L),
+                            GTUtility.getIntegratedCircuit(7))
                         .itemOutputs(
-                            GT_MetaGenerated_Tool_01.INSTANCE
-                                .getToolWithStats(ID_MetaTool_01.SAW.ID, 1, aMaterial, aMaterial.mHandleMaterial, null))
+                            MetaGeneratedTool01.INSTANCE
+                                .getToolWithStats(IDMetaTool01.SAW.ID, 1, aMaterial, aMaterial.mHandleMaterial, null))
                         .duration(10 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV))
                         .addTo(assemblerRecipes);
@@ -698,54 +690,50 @@ public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeReg
             case toolHeadSense -> {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
 
-                    GT_ModHandler.addShapelessCraftingRecipe(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(ID_MetaTool_01.SENSE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
+                    GTModHandler.addShapelessCraftingRecipe(
+                        MetaGeneratedTool01.INSTANCE
+                            .getToolWithStats(IDMetaTool01.SENSE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
                         new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
 
-                    if (aSpecialRecipeReq1) GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.toolHeadSense, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    if (aSpecialRecipeReq1) GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.toolHeadSense, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "PPI", "hf ", 'P', OrePrefixes.plate.get(aMaterial), 'I',
                             OrePrefixes.ingot.get(aMaterial) });
 
-                    if (!aNoWorking) GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.toolHeadSense, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    if (!aNoWorking) GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.toolHeadSense, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "GGG", " f ", "   ", 'G', OrePrefixes.gem.get(aMaterial) });
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadSense, aMaterial, 1L),
-                            GT_Utility.getIntegratedCircuit(8))
+                            GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadSense, aMaterial, 1L),
+                            GTUtility.getIntegratedCircuit(8))
                         .itemOutputs(
-                            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                                ID_MetaTool_01.SENSE.ID,
-                                1,
-                                aMaterial,
-                                aMaterial.mHandleMaterial,
-                                null))
+                            MetaGeneratedTool01.INSTANCE
+                                .getToolWithStats(IDMetaTool01.SENSE.ID, 1, aMaterial, aMaterial.mHandleMaterial, null))
                         .duration(10 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV))
                         .addTo(assemblerRecipes);
                 }
             }
             case toolHeadShovel -> {
-                GT_ModHandler.addShapelessCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.SHOVEL.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
+                GTModHandler.addShapelessCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE
+                        .getToolWithStats(IDMetaTool01.SHOVEL.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
                     new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
-                if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial, 1L),
-                            GT_Utility.getIntegratedCircuit(9))
+                            GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial, 1L),
+                            GTUtility.getIntegratedCircuit(9))
                         .itemOutputs(
-                            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                                ID_MetaTool_01.SHOVEL.ID,
+                            MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                                IDMetaTool01.SHOVEL.ID,
                                 1,
                                 aMaterial,
                                 aMaterial.mHandleMaterial,
@@ -754,70 +742,66 @@ public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeReg
                         .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV))
                         .addTo(assemblerRecipes);
                 }
-                if (aSpecialRecipeReq1) GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                if (aSpecialRecipeReq1) GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "fPh", 'P', OrePrefixes.plate.get(aMaterial), 'I',
                         OrePrefixes.ingot.get(aMaterial) });
-                if (!aNoWorking) GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                if (!aNoWorking) GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "fG", 'G', OrePrefixes.gem.get(aMaterial) });
             }
             case toolHeadSword -> {
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
 
-                    GT_ModHandler.addShapelessCraftingRecipe(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(ID_MetaTool_01.SWORD.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
+                    GTModHandler.addShapelessCraftingRecipe(
+                        MetaGeneratedTool01.INSTANCE
+                            .getToolWithStats(IDMetaTool01.SWORD.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
                         new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
 
-                    if (aSpecialRecipeReq1) GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    if (aSpecialRecipeReq1) GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { " P ", "fPh", 'P', OrePrefixes.plate.get(aMaterial), 'I',
                             OrePrefixes.ingot.get(aMaterial) });
 
-                    if (!aNoWorking) GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    if (!aNoWorking) GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { " G", "fG", 'G', OrePrefixes.gem.get(aMaterial) });
                 }
-                if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial, 1L),
-                            GT_Utility.getIntegratedCircuit(10))
+                            GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadSword, aMaterial, 1L),
+                            GTUtility.getIntegratedCircuit(10))
                         .itemOutputs(
-                            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                                ID_MetaTool_01.SWORD.ID,
-                                1,
-                                aMaterial,
-                                aMaterial.mHandleMaterial,
-                                null))
+                            MetaGeneratedTool01.INSTANCE
+                                .getToolWithStats(IDMetaTool01.SWORD.ID, 1, aMaterial, aMaterial.mHandleMaterial, null))
                         .duration(10 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV))
                         .addTo(assemblerRecipes);
                 }
             }
             case toolHeadUniversalSpade -> {
-                GT_ModHandler.addShapelessCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.UNIVERSALSPADE.ID, 1, aMaterial, aMaterial, null),
+                GTModHandler.addShapelessCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE
+                        .getToolWithStats(IDMetaTool01.UNIVERSALSPADE.ID, 1, aMaterial, aMaterial, null),
                     new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial), OrePrefixes.screw.get(aMaterial),
                         ToolDictNames.craftingToolScrewdriver });
-                if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null
-                    && GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null
+                    && GTOreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadUniversalSpade, aMaterial, 1L),
-                            GT_Utility.getIntegratedCircuit(11))
+                            GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadUniversalSpade, aMaterial, 1L),
+                            GTUtility.getIntegratedCircuit(11))
                         .itemOutputs(
-                            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                                ID_MetaTool_01.UNIVERSALSPADE.ID,
+                            MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                                IDMetaTool01.UNIVERSALSPADE.ID,
                                 1,
                                 aMaterial,
                                 aMaterial.mHandleMaterial,
@@ -826,268 +810,268 @@ public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeReg
                         .eut(calculateRecipeEU(aMaterial, (int) TierEU.RECIPE_MV))
                         .addTo(assemblerRecipes);
                 }
-                if (aSpecialRecipeReq2) GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.toolHeadUniversalSpade, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                if (aSpecialRecipeReq2) GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.toolHeadUniversalSpade, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "fX", 'X', OrePrefixes.toolHeadShovel.get(aMaterial) });
             }
             case toolHeadWrench -> {
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.WRENCH_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.WRENCH_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 100000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.WRENCH_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.WRENCH_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 75000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.WRENCH_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.WRENCH_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 50000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_LV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Steel), 'P', OrePrefixes.plate.get(Materials.Steel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Steel), 'B', ItemList.Battery_RE_LV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.WRENCH_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.WRENCH_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 400000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.WRENCH_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.WRENCH_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 300000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.WRENCH_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.WRENCH_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 200000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_MV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.Aluminium), 'P', OrePrefixes.plate.get(Materials.Aluminium),
                         'G', OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.WRENCH_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.WRENCH_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1600000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.WRENCH_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.WRENCH_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1200000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.WRENCH_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.WRENCH_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 800000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SXd", "GMG", "PBP", 'X', aOreDictName, 'M', ItemList.Electric_Motor_HV.get(1L), 'S',
                         OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SCREWDRIVER_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SCREWDRIVER_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 100000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PdX", "MGS", "GBP", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Motor_LV.get(1L), 'S', OrePrefixes.screw.get(Materials.Steel), 'P',
                         OrePrefixes.plate.get(Materials.Steel), 'G', OrePrefixes.gearGtSmall.get(Materials.Steel), 'B',
                         ItemList.Battery_RE_LV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SCREWDRIVER_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SCREWDRIVER_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 75000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PdX", "MGS", "GBP", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Motor_LV.get(1L), 'S', OrePrefixes.screw.get(Materials.Steel), 'P',
                         OrePrefixes.plate.get(Materials.Steel), 'G', OrePrefixes.gearGtSmall.get(Materials.Steel), 'B',
                         ItemList.Battery_RE_LV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SCREWDRIVER_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SCREWDRIVER_LV.ID,
                         1,
                         aMaterial,
                         Materials.Steel,
                         new long[] { 50000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PdX", "MGS", "GBP", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Motor_LV.get(1L), 'S', OrePrefixes.screw.get(Materials.Steel), 'P',
                         OrePrefixes.plate.get(Materials.Steel), 'G', OrePrefixes.gearGtSmall.get(Materials.Steel), 'B',
                         ItemList.Battery_RE_LV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SCREWDRIVER_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SCREWDRIVER_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 400000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PdX", "MGS", "GBP", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Motor_MV.get(1L), 'S', OrePrefixes.screw.get(Materials.Aluminium), 'P',
                         OrePrefixes.plate.get(Materials.Aluminium), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SCREWDRIVER_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SCREWDRIVER_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 300000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PdX", "MGS", "GBP", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Motor_MV.get(1L), 'S', OrePrefixes.screw.get(Materials.Aluminium), 'P',
                         OrePrefixes.plate.get(Materials.Aluminium), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B',
                         ItemList.Battery_RE_MV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SCREWDRIVER_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SCREWDRIVER_MV.ID,
                         1,
                         aMaterial,
                         Materials.Aluminium,
                         new long[] { 200000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PdX", "MGS", "GBP", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Motor_MV.get(1L), 'S', OrePrefixes.screw.get(Materials.Aluminium), 'P',
                         OrePrefixes.plate.get(Materials.Aluminium), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.Aluminium), 'B', ItemList.Battery_RE_MV_Sodium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SCREWDRIVER_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SCREWDRIVER_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1600000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PdX", "MGS", "GBP", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Motor_HV.get(1L), 'S', OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SCREWDRIVER_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SCREWDRIVER_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 1200000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PdX", "MGS", "GBP", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Motor_HV.get(1L), 'S', OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Cadmium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SCREWDRIVER_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SCREWDRIVER_HV.ID,
                         1,
                         aMaterial,
                         Materials.StainlessSteel,
                         new long[] { 800000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
-                        | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS
+                        | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PdX", "MGS", "GBP", 'X', OrePrefixes.stickLong.get(aMaterial), 'M',
                         ItemList.Electric_Motor_HV.get(1L), 'S', OrePrefixes.screw.get(Materials.StainlessSteel), 'P',
                         OrePrefixes.plate.get(Materials.StainlessSteel), 'G',
                         OrePrefixes.gearGtSmall.get(Materials.StainlessSteel), 'B',
                         ItemList.Battery_RE_HV_Sodium.get(1L) });
-                if (aSpecialRecipeReq2) GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.toolHeadWrench, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                if (aSpecialRecipeReq2) GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.toolHeadWrench, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "hXW", "XRX", "WXd", 'X', OrePrefixes.plate.get(aMaterial), 'S',
                         OrePrefixes.plate.get(Materials.Steel), 'R', OrePrefixes.ring.get(Materials.Steel), 'W',
                         OrePrefixes.screw.get(Materials.Steel) });
             }
             case toolHeadHammer, toolHeadMallet -> {
-                if (GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
-                            GT_OreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial, 1L),
-                            GT_Utility.getIntegratedCircuit(14))
+                            GTOreDictUnificator.get(OrePrefixes.stick, aMaterial.mHandleMaterial, 1L),
+                            GTOreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial, 1L),
+                            GTUtility.getIntegratedCircuit(14))
                         .itemOutputs(
-                            GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                                aProducesSoftMallet ? ID_MetaTool_01.SOFTMALLET.ID : ID_MetaTool_01.HARDHAMMER.ID,
+                            MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                                aProducesSoftMallet ? IDMetaTool01.SOFTMALLET.ID : IDMetaTool01.HARDHAMMER.ID,
                                 1,
                                 aMaterial,
                                 aMaterial.mHandleMaterial,
@@ -1097,84 +1081,84 @@ public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeReg
                         .addTo(assemblerRecipes);
                 }
                 if ((aMaterial != Materials.Stone) && (aMaterial != Materials.Flint)) {
-                    GT_ModHandler.addShapelessCraftingRecipe(
-                        GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                            aProducesSoftMallet ? ID_MetaTool_01.SOFTMALLET.ID : ID_MetaTool_01.HARDHAMMER.ID,
+                    GTModHandler.addShapelessCraftingRecipe(
+                        MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                            aProducesSoftMallet ? IDMetaTool01.SOFTMALLET.ID : IDMetaTool01.HARDHAMMER.ID,
                             1,
                             aMaterial,
                             aMaterial.mHandleMaterial,
                             null),
-                        GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                        GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                         new Object[] { aOreDictName, OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                            aProducesSoftMallet ? ID_MetaTool_01.SOFTMALLET.ID : ID_MetaTool_01.HARDHAMMER.ID,
+                    GTModHandler.addCraftingRecipe(
+                        MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                            aProducesSoftMallet ? IDMetaTool01.SOFTMALLET.ID : IDMetaTool01.HARDHAMMER.ID,
                             1,
                             aMaterial,
                             aMaterial.mHandleMaterial,
                             null),
-                        GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                        GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                         new Object[] { "XX ", "XXS", "XX ", 'X',
                             aMaterial == Materials.Wood ? OrePrefixes.plank.get(Materials.Wood)
                                 : OrePrefixes.ingot.get(aMaterial),
                             'S', OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                            aProducesSoftMallet ? ID_MetaTool_01.SOFTMALLET.ID : ID_MetaTool_01.HARDHAMMER.ID,
+                    GTModHandler.addCraftingRecipe(
+                        MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                            aProducesSoftMallet ? IDMetaTool01.SOFTMALLET.ID : IDMetaTool01.HARDHAMMER.ID,
                             1,
                             aMaterial,
                             aMaterial.mHandleMaterial,
                             null),
-                        GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                        GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                         new Object[] { "XX ", "XXS", "XX ", 'X',
                             aMaterial == Materials.Wood ? OrePrefixes.plank.get(Materials.Wood)
                                 : OrePrefixes.gem.get(aMaterial),
                             'S', OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
                 }
-                if (aPrefix == OrePrefixes.toolHeadHammer) if (aSpecialRecipeReq1) GT_ModHandler.addCraftingRecipe(
-                    GT_OreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial, 1L),
-                    GT_Proxy.tBits,
+                if (aPrefix == OrePrefixes.toolHeadHammer) if (aSpecialRecipeReq1) GTModHandler.addCraftingRecipe(
+                    GTOreDictUnificator.get(OrePrefixes.toolHeadHammer, aMaterial, 1L),
+                    GTProxy.tBits,
                     new Object[] { "II ", "IIh", "II ", 'P', OrePrefixes.plate.get(aMaterial), 'I',
                         OrePrefixes.ingot.get(aMaterial) });
             }
             case turbineBlade -> {
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 4L),
-                        GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Magnalium, 1L))
-                    .itemOutputs(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(170, 1, aMaterial, aMaterial, null))
+                        GTOreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 4L),
+                        GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Magnalium, 1L))
+                    .itemOutputs(MetaGeneratedTool01.INSTANCE.getToolWithStats(170, 1, aMaterial, aMaterial, null))
                     .duration(8 * SECONDS)
                     .eut(calculateRecipeEU(aMaterial, 100))
                     .addTo(assemblerRecipes);
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 8L),
-                        GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Titanium, 1L))
-                    .itemOutputs(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(172, 1, aMaterial, aMaterial, null))
+                        GTOreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 8L),
+                        GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Titanium, 1L))
+                    .itemOutputs(MetaGeneratedTool01.INSTANCE.getToolWithStats(172, 1, aMaterial, aMaterial, null))
                     .duration(16 * SECONDS)
                     .eut(calculateRecipeEU(aMaterial, 400))
                     .addTo(assemblerRecipes);
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 12L),
-                        GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenSteel, 1L))
-                    .itemOutputs(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(174, 1, aMaterial, aMaterial, null))
+                        GTOreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 12L),
+                        GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenSteel, 1L))
+                    .itemOutputs(MetaGeneratedTool01.INSTANCE.getToolWithStats(174, 1, aMaterial, aMaterial, null))
                     .duration(32 * SECONDS)
                     .eut(calculateRecipeEU(aMaterial, 1600))
                     .addTo(assemblerRecipes);
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 16L),
-                        GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Americium, 1L))
-                    .itemOutputs(GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(176, 1, aMaterial, aMaterial, null))
+                        GTOreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 16L),
+                        GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Americium, 1L))
+                    .itemOutputs(MetaGeneratedTool01.INSTANCE.getToolWithStats(176, 1, aMaterial, aMaterial, null))
                     .duration(1 * MINUTES + 4 * SECONDS)
                     .eut(calculateRecipeEU(aMaterial, 6400))
                     .addTo(assemblerRecipes);
                 if (aSpecialRecipeReq2) {
                     if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
-                        GT_ModHandler.addCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 1L),
-                            GT_Proxy.tBits,
+                        GTModHandler.addCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 1L),
+                            GTProxy.tBits,
                             new Object[] { "fPd", "SPS", " P ", 'P',
                                 aMaterial == Materials.Wood ? OrePrefixes.plank.get(aMaterial)
                                     : OrePrefixes.plateDouble.get(aMaterial),
@@ -1182,13 +1166,13 @@ public class ProcessingToolHead implements gregtech.api.interfaces.IOreRecipeReg
                     }
 
                     // Turbine blades
-                    if (GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L) != null
-                        && GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
+                    if (GTOreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 1L) != null
+                        && GTOreDictUnificator.get(OrePrefixes.screw, aMaterial, 1L) != null) {
+                        GTValues.RA.stdBuilder()
                             .itemInputs(
-                                GT_OreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 3L),
-                                GT_OreDictUnificator.get(OrePrefixes.screw, aMaterial, 2L))
-                            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 1L))
+                                GTOreDictUnificator.get(OrePrefixes.plateDouble, aMaterial, 3L),
+                                GTOreDictUnificator.get(OrePrefixes.screw, aMaterial, 2L))
+                            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.turbineBlade, aMaterial, 1L))
                             .duration(10 * SECONDS)
                             .eut(calculateRecipeEU(aMaterial, 60))
                             .addTo(formingPressRecipes);
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolOther.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolOther.java
index cbb0ca3668..04aac52d4f 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolOther.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingToolOther.java
@@ -8,9 +8,9 @@ import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.common.items.GT_MetaGenerated_Tool_01;
-import gregtech.common.items.ID_MetaTool_01;
+import gregtech.api.util.GTModHandler;
+import gregtech.common.items.IDMetaTool01;
+import gregtech.common.items.MetaGeneratedTool01;
 
 public class ProcessingToolOther implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -28,10 +28,10 @@ public class ProcessingToolOther implements gregtech.api.interfaces.IOreRecipeRe
         if (aMaterial != Materials.Rubber) {
             // Crafting recipes
             {
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.PLUNGER.ID, 1, aMaterial, aMaterial, null),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE
+                        .getToolWithStats(IDMetaTool01.PLUNGER.ID, 1, aMaterial, aMaterial, null),
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "xRR", " SR", "S f", 'S', OrePrefixes.stick.get(aMaterial), 'R',
                         OrePrefixes.plate.get(Materials.AnyRubber) });
             }
@@ -41,89 +41,87 @@ public class ProcessingToolOther implements gregtech.api.interfaces.IOreRecipeRe
             && (!aMaterial.contains(SubTag.NO_SMASHING))) {
             // Crafting recipes
             {
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.WRENCH.ID, 1, aMaterial, aMaterial, null),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE
+                        .getToolWithStats(IDMetaTool01.WRENCH.ID, 1, aMaterial, aMaterial, null),
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "IhI", "III", " I ", 'I', OrePrefixes.ingot.get(aMaterial) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.CROWBAR.ID, 1, aMaterial, aMaterial, null),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE
+                        .getToolWithStats(IDMetaTool01.CROWBAR.ID, 1, aMaterial, aMaterial, null),
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "hDS", "DSD", "SDf", 'S', OrePrefixes.stick.get(aMaterial), 'D', Dyes.dyeBlue });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.SCREWDRIVER.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE
+                        .getToolWithStats(IDMetaTool01.SCREWDRIVER.ID, 1, aMaterial, aMaterial.mHandleMaterial, null),
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { " fS", " Sh", "W  ", 'S', OrePrefixes.stick.get(aMaterial), 'W',
                         OrePrefixes.stick.get(aMaterial.mHandleMaterial) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.WIRECUTTER.ID, 1, aMaterial, aMaterial, null),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE
+                        .getToolWithStats(IDMetaTool01.WIRECUTTER.ID, 1, aMaterial, aMaterial, null),
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PfP", "hPd", "STS", 'S', OrePrefixes.stick.get(aMaterial), 'P',
                         OrePrefixes.plate.get(aMaterial), 'T', OrePrefixes.screw.get(aMaterial) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.SCOOP.ID, 1, aMaterial, aMaterial, null),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(IDMetaTool01.SCOOP.ID, 1, aMaterial, aMaterial, null),
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "SWS", "SSS", "xSh", 'S', OrePrefixes.stick.get(aMaterial), 'W',
                         new ItemStack(Blocks.wool, 1, 32767) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.BRANCHCUTTER.ID, 1, aMaterial, aMaterial, null),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE
+                        .getToolWithStats(IDMetaTool01.BRANCHCUTTER.ID, 1, aMaterial, aMaterial, null),
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PfP", "PdP", "STS", 'S', OrePrefixes.stick.get(aMaterial), 'P',
                         OrePrefixes.plate.get(aMaterial), 'T', OrePrefixes.screw.get(aMaterial) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.KNIFE.ID, 1, aMaterial, aMaterial, null),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(IDMetaTool01.KNIFE.ID, 1, aMaterial, aMaterial, null),
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "fPh", " S ", 'S', OrePrefixes.stick.get(aMaterial), 'P',
                         OrePrefixes.plate.get(aMaterial) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.BUTCHERYKNIFE.ID, 1, aMaterial, aMaterial, null),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE
+                        .getToolWithStats(IDMetaTool01.BUTCHERYKNIFE.ID, 1, aMaterial, aMaterial, null),
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "PPf", "PP ", "Sh ", 'S', OrePrefixes.stick.get(aMaterial), 'P',
                         OrePrefixes.plate.get(aMaterial) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SOLDERING_IRON_LV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SOLDERING_IRON_LV.ID,
                         1,
                         aMaterial,
                         Materials.Rubber,
                         new long[] { 100000L, 32L, 1L, -1L }),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "LBf", "Sd ", "P  ", 'B', OrePrefixes.bolt.get(aMaterial), 'P',
                         OrePrefixes.plate.get(Materials.AnyRubber), 'S', OrePrefixes.stick.get(Materials.Iron), 'L',
                         ItemList.Battery_RE_LV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SOLDERING_IRON_MV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SOLDERING_IRON_MV.ID,
                         1,
                         aMaterial,
                         Materials.Rubber,
                         new long[] { 400000L, 128L, 2L, -1L }),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "LBf", "Sd ", "P  ", 'B', OrePrefixes.bolt.get(aMaterial), 'P',
                         OrePrefixes.plate.get(Materials.AnyRubber), 'S', OrePrefixes.stick.get(Materials.Steel), 'L',
                         ItemList.Battery_RE_MV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(
-                        ID_MetaTool_01.SOLDERING_IRON_HV.ID,
+                GTModHandler.addCraftingRecipe(
+                    MetaGeneratedTool01.INSTANCE.getToolWithStats(
+                        IDMetaTool01.SOLDERING_IRON_HV.ID,
                         1,
                         aMaterial,
                         Materials.AnySyntheticRubber,
                         new long[] { 1600000L, 512L, 3L, -1L }),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "LBf", "Sd ", "P  ", 'B', OrePrefixes.bolt.get(aMaterial), 'P',
                         OrePrefixes.plate.get(Materials.AnySyntheticRubber), 'S',
                         OrePrefixes.stick.get(Materials.StainlessSteel), 'L', ItemList.Battery_RE_HV_Lithium.get(1L) });
-                GT_ModHandler.addCraftingRecipe(
-                    (GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolWithStats(ID_MetaTool_01.POCKET_MULTITOOL.ID, 1, aMaterial, aMaterial, null)),
-                    GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED,
+                GTModHandler.addCraftingRecipe(
+                    (MetaGeneratedTool01.INSTANCE
+                        .getToolWithStats(IDMetaTool01.POCKET_MULTITOOL.ID, 1, aMaterial, aMaterial, null)),
+                    GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED,
                     new Object[] { "ABC", "DEF", "CFG", 'A', OrePrefixes.stickLong.get(aMaterial), 'B',
                         OrePrefixes.toolHeadSaw.get(aMaterial), 'C', OrePrefixes.ring.get(aMaterial), 'D',
                         OrePrefixes.toolHeadFile.get(aMaterial), 'E', OrePrefixes.plate.get(aMaterial), 'F',
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingTransforming.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingTransforming.java
index 4e3febc469..8d72819d26 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingTransforming.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingTransforming.java
@@ -2,18 +2,18 @@ package gregtech.loaders.oreprocessing;
 
 import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes;
 import static gregtech.api.recipe.RecipeMaps.polarizerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
 import gregtech.api.interfaces.IOreRecipeRegistrator;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingTransforming implements IOreRecipeRegistrator {
 
@@ -35,13 +35,13 @@ public class ProcessingTransforming implements IOreRecipeRegistrator {
             case "Wood" ->
             // Chemical bath recipes
             {
-                if (GT_OreDictUnificator.get(aPrefix, Materials.WoodSealed, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
-                        .itemOutputs(GT_OreDictUnificator.get(aPrefix, Materials.WoodSealed, 1L))
+                if (GTOreDictUnificator.get(aPrefix, Materials.WoodSealed, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
+                        .itemOutputs(GTOreDictUnificator.get(aPrefix, Materials.WoodSealed, 1L))
                         .fluidInputs(
                             Materials.SeedOil
-                                .getFluid(GT_Utility.translateMaterialToAmount(aPrefix.mMaterialAmount, 120L, true)))
+                                .getFluid(GTUtility.translateMaterialToAmount(aPrefix.mMaterialAmount, 120L, true)))
                         .duration(5 * SECONDS)
                         .eut(TierEU.ULV)
                         .addTo(chemicalBathRecipes);
@@ -51,13 +51,13 @@ public class ProcessingTransforming implements IOreRecipeRegistrator {
             case "Iron" -> {
                 // Chemical bath recipes
                 {
-                    if (GT_OreDictUnificator.get(aPrefix, Materials.FierySteel, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
-                            .itemOutputs(GT_OreDictUnificator.get(aPrefix, Materials.FierySteel, 1L))
+                    if (GTOreDictUnificator.get(aPrefix, Materials.FierySteel, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
+                            .itemOutputs(GTOreDictUnificator.get(aPrefix, Materials.FierySteel, 1L))
                             .fluidInputs(
-                                Materials.FierySteel.getFluid(
-                                    GT_Utility.translateMaterialToAmount(aPrefix.mMaterialAmount, 250L, true)))
+                                Materials.FierySteel
+                                    .getFluid(GTUtility.translateMaterialToAmount(aPrefix.mMaterialAmount, 250L, true)))
                             .duration(5 * SECONDS)
                             .eut(TierEU.ULV)
                             .addTo(chemicalBathRecipes);
@@ -66,11 +66,11 @@ public class ProcessingTransforming implements IOreRecipeRegistrator {
 
                 // Polarizer recipes
                 {
-                    if (GT_OreDictUnificator.get(aPrefix, Materials.IronMagnetic, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
-                            .itemOutputs(GT_OreDictUnificator.get(aPrefix, Materials.IronMagnetic, 1L))
-                            .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GT_Values.M)) * TICKS)
+                    if (GTOreDictUnificator.get(aPrefix, Materials.IronMagnetic, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
+                            .itemOutputs(GTOreDictUnificator.get(aPrefix, Materials.IronMagnetic, 1L))
+                            .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GTValues.M)) * TICKS)
                             .eut((int) TierEU.LV / 2)
                             .addTo(polarizerRecipes);
                     }
@@ -79,13 +79,13 @@ public class ProcessingTransforming implements IOreRecipeRegistrator {
             case "WroughtIron" -> {
                 // Chemical bath recipes
                 {
-                    if (GT_OreDictUnificator.get(aPrefix, Materials.FierySteel, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
-                            .itemOutputs(GT_OreDictUnificator.get(aPrefix, Materials.FierySteel, 1L))
+                    if (GTOreDictUnificator.get(aPrefix, Materials.FierySteel, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
+                            .itemOutputs(GTOreDictUnificator.get(aPrefix, Materials.FierySteel, 1L))
                             .fluidInputs(
-                                Materials.FierySteel.getFluid(
-                                    GT_Utility.translateMaterialToAmount(aPrefix.mMaterialAmount, 225L, true)))
+                                Materials.FierySteel
+                                    .getFluid(GTUtility.translateMaterialToAmount(aPrefix.mMaterialAmount, 225L, true)))
                             .duration(5 * SECONDS)
                             .eut(TierEU.ULV)
                             .addTo(chemicalBathRecipes);
@@ -94,11 +94,11 @@ public class ProcessingTransforming implements IOreRecipeRegistrator {
 
                 // Polarizer recipes
                 {
-                    if (GT_OreDictUnificator.get(aPrefix, Materials.IronMagnetic, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
-                            .itemOutputs(GT_OreDictUnificator.get(aPrefix, Materials.IronMagnetic, 1L))
-                            .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GT_Values.M)) * TICKS)
+                    if (GTOreDictUnificator.get(aPrefix, Materials.IronMagnetic, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
+                            .itemOutputs(GTOreDictUnificator.get(aPrefix, Materials.IronMagnetic, 1L))
+                            .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GTValues.M)) * TICKS)
                             .eut((int) TierEU.LV / 2)
                             .addTo(polarizerRecipes);
                     }
@@ -107,13 +107,13 @@ public class ProcessingTransforming implements IOreRecipeRegistrator {
             case "Steel" -> {
                 // Chemical Bath recipes
                 {
-                    if (GT_OreDictUnificator.get(aPrefix, Materials.FierySteel, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
-                            .itemOutputs(GT_OreDictUnificator.get(aPrefix, Materials.FierySteel, 1L))
+                    if (GTOreDictUnificator.get(aPrefix, Materials.FierySteel, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
+                            .itemOutputs(GTOreDictUnificator.get(aPrefix, Materials.FierySteel, 1L))
                             .fluidInputs(
-                                Materials.FierySteel.getFluid(
-                                    GT_Utility.translateMaterialToAmount(aPrefix.mMaterialAmount, 200L, true)))
+                                Materials.FierySteel
+                                    .getFluid(GTUtility.translateMaterialToAmount(aPrefix.mMaterialAmount, 200L, true)))
                             .duration(5 * SECONDS)
                             .eut(TierEU.ULV)
                             .addTo(chemicalBathRecipes);
@@ -122,11 +122,11 @@ public class ProcessingTransforming implements IOreRecipeRegistrator {
 
                 // Polarizer recipes
                 {
-                    if (GT_OreDictUnificator.get(aPrefix, Materials.SteelMagnetic, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(1, aStack))
-                            .itemOutputs(GT_OreDictUnificator.get(aPrefix, Materials.SteelMagnetic, 1L))
-                            .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GT_Values.M)) * TICKS)
+                    if (GTOreDictUnificator.get(aPrefix, Materials.SteelMagnetic, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(1, aStack))
+                            .itemOutputs(GTOreDictUnificator.get(aPrefix, Materials.SteelMagnetic, 1L))
+                            .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GTValues.M)) * TICKS)
                             .eut((int) TierEU.LV / 2)
                             .addTo(polarizerRecipes);
                     }
@@ -135,11 +135,11 @@ public class ProcessingTransforming implements IOreRecipeRegistrator {
             case "Neodymium" ->
             // Polarizer recipes
             {
-                if (GT_OreDictUnificator.get(aPrefix, Materials.NeodymiumMagnetic, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
-                        .itemOutputs(GT_OreDictUnificator.get(aPrefix, Materials.NeodymiumMagnetic, 1L))
-                        .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GT_Values.M)) * TICKS)
+                if (GTOreDictUnificator.get(aPrefix, Materials.NeodymiumMagnetic, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
+                        .itemOutputs(GTOreDictUnificator.get(aPrefix, Materials.NeodymiumMagnetic, 1L))
+                        .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GTValues.M)) * TICKS)
                         .eut((int) TierEU.HV / 2)
                         .addTo(polarizerRecipes);
                 }
@@ -147,11 +147,11 @@ public class ProcessingTransforming implements IOreRecipeRegistrator {
             case "Samarium" ->
             // Polarizer recipes
             {
-                if (GT_OreDictUnificator.get(aPrefix, Materials.SamariumMagnetic, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
-                        .itemOutputs(GT_OreDictUnificator.get(aPrefix, Materials.SamariumMagnetic, 1L))
-                        .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GT_Values.M)) * TICKS)
+                if (GTOreDictUnificator.get(aPrefix, Materials.SamariumMagnetic, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
+                        .itemOutputs(GTOreDictUnificator.get(aPrefix, Materials.SamariumMagnetic, 1L))
+                        .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GTValues.M)) * TICKS)
                         .eut((int) TierEU.IV / 2)
                         .addTo(polarizerRecipes);
                 }
@@ -160,11 +160,11 @@ public class ProcessingTransforming implements IOreRecipeRegistrator {
             case "TengamPurified" ->
             // Polarizer recipes
             {
-                if (GT_OreDictUnificator.get(aPrefix, Materials.TengamAttuned, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(1, aStack))
-                        .itemOutputs(GT_OreDictUnificator.get(aPrefix, Materials.TengamAttuned, 1L))
-                        .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GT_Values.M)) * TICKS)
+                if (GTOreDictUnificator.get(aPrefix, Materials.TengamAttuned, 1L) != null) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(1, aStack))
+                        .itemOutputs(GTOreDictUnificator.get(aPrefix, Materials.TengamAttuned, 1L))
+                        .duration(((int) Math.max(16L, aPrefix.mMaterialAmount * 128L / GTValues.M)) * TICKS)
                         .eut((int) TierEU.RECIPE_UHV)
                         .addTo(polarizerRecipes);
                 }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingWax.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWax.java
index 7635546d23..41f5511754 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingWax.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWax.java
@@ -1,15 +1,15 @@
 package gregtech.loaders.oreprocessing;
 
-import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE;
+import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE;
+import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_RecipeConstants;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTRecipeConstants;
+import gregtech.api.util.GTUtility;
 
 public class ProcessingWax implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -21,11 +21,11 @@ public class ProcessingWax implements gregtech.api.interfaces.IOreRecipeRegistra
     public void registerOre(OrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName,
         ItemStack aStack) {
         if (aOreDictName.equals("waxMagical")) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(1, aStack))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(1, aStack))
                 .metadata(FUEL_VALUE, 6)
                 .metadata(FUEL_TYPE, 5)
-                .addTo(GT_RecipeConstants.Fuel);
+                .addTo(GTRecipeConstants.Fuel);
         }
     }
 }
diff --git a/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire.java b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire.java
index 1f5bd5f1c2..c38c8fb72b 100644
--- a/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire.java
+++ b/src/main/java/gregtech/loaders/oreprocessing/ProcessingWire.java
@@ -6,9 +6,9 @@ import static gregtech.api.recipe.RecipeMaps.benderRecipes;
 import static gregtech.api.recipe.RecipeMaps.packagerRecipes;
 import static gregtech.api.recipe.RecipeMaps.unpackagerRecipes;
 import static gregtech.api.recipe.RecipeMaps.wiremillRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_Utility.calculateRecipeEU;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTUtility.calculateRecipeEU;
 
 import java.util.ArrayList;
 
@@ -16,16 +16,16 @@ import net.minecraft.item.ItemStack;
 
 import appeng.api.config.TunnelType;
 import appeng.core.Api;
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_Log;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.GT_Proxy;
+import gregtech.api.util.GTLog;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.GTProxy;
 
 public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistrator {
 
@@ -64,10 +64,10 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                 if (!aMaterial.contains(SubTag.NO_SMASHING)) {
                     // Bender recipes
                     {
-                        if (GT_OreDictUnificator.get(OrePrefixes.springSmall, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.springSmall, aMaterial, 2L))
+                        if (GTOreDictUnificator.get(OrePrefixes.springSmall, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.springSmall, aMaterial, 2L))
                                 .duration(5 * SECONDS)
                                 .eut(calculateRecipeEU(aMaterial, 8))
                                 .addTo(benderRecipes);
@@ -76,10 +76,10 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
 
                     // Wiremill Recipes
                     {
-                        if (GT_OreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 1L) != null) {
-                            GT_Values.RA.stdBuilder()
-                                .itemInputs(GT_Utility.copyAmount(1, aStack), GT_Utility.getIntegratedCircuit(1))
-                                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 4L))
+                        if (GTOreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 1L) != null) {
+                            GTValues.RA.stdBuilder()
+                                .itemInputs(GTUtility.copyAmount(1, aStack), GTUtility.getIntegratedCircuit(1))
+                                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireFine, aMaterial, 4L))
                                 .duration(10 * SECONDS)
                                 .eut(calculateRecipeEU(aMaterial, 8))
                                 .addTo(wiremillRecipes);
@@ -91,42 +91,42 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                 if (aMaterial.mUnificatable && (aMaterial.mMaterialInto == aMaterial)
                     && !aMaterial.contains(SubTag.NO_WORKING)
                     && (aMaterial.getProcessingMaterialTierEU() < TierEU.IV)) {
-                    GT_ModHandler.addCraftingRecipe(
-                        GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 1L),
-                        GT_Proxy.tBits,
+                    GTModHandler.addCraftingRecipe(
+                        GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 1L),
+                        GTProxy.tBits,
                         new Object[] { "Xx", 'X', OrePrefixes.plate.get(aMaterial) });
 
                 }
 
                 // Assembler recipes
                 {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(2, aStack), GT_Utility.getIntegratedCircuit(2))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt02, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(2, aStack), GTUtility.getIntegratedCircuit(2))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt02, aMaterial, 1L))
                         .duration(7 * SECONDS + 10 * TICKS)
                         .eut(calculateRecipeEU(aMaterial, 8))
                         .addTo(assemblerRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(4, aStack), GT_Utility.getIntegratedCircuit(4))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt04, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(4, aStack), GTUtility.getIntegratedCircuit(4))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt04, aMaterial, 1L))
                         .duration(10 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, 8))
                         .addTo(assemblerRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(8, aStack), GT_Utility.getIntegratedCircuit(8))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt08, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(8, aStack), GTUtility.getIntegratedCircuit(8))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt08, aMaterial, 1L))
                         .duration(15 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, 8))
                         .addTo(assemblerRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(12, aStack), GT_Utility.getIntegratedCircuit(12))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt12, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(12, aStack), GTUtility.getIntegratedCircuit(12))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt12, aMaterial, 1L))
                         .duration(20 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, 8))
                         .addTo(assemblerRecipes);
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(GT_Utility.copyAmount(16, aStack), GT_Utility.getIntegratedCircuit(16))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt16, aMaterial, 1L))
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(GTUtility.copyAmount(16, aStack), GTUtility.getIntegratedCircuit(16))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt16, aMaterial, 1L))
                         .duration(25 * SECONDS)
                         .eut(calculateRecipeEU(aMaterial, 8))
                         .addTo(assemblerRecipes);
@@ -138,12 +138,12 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
                     // Shapeless crafting recipes
                     {
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 2L),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 2L),
                             new Object[] { aOreDictName });
 
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTUtility.copyAmount(1, aStack),
                             new Object[] { OrePrefixes.wireGt01.get(aMaterial), OrePrefixes.wireGt01.get(aMaterial) });
                     }
                 }
@@ -154,15 +154,15 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
                     // Shapeless crafting recipes
                     {
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 4L),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 4L),
                             new Object[] { aOreDictName });
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTUtility.copyAmount(1, aStack),
                             new Object[] { OrePrefixes.wireGt01.get(aMaterial), OrePrefixes.wireGt01.get(aMaterial),
                                 OrePrefixes.wireGt01.get(aMaterial), OrePrefixes.wireGt01.get(aMaterial) });
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTUtility.copyAmount(1, aStack),
                             new Object[] { OrePrefixes.wireGt02.get(aMaterial), OrePrefixes.wireGt02.get(aMaterial) });
                     }
                 }
@@ -173,17 +173,17 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
                     // Shapeless crafting recipes
                     {
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 8L),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 8L),
                             new Object[] { aOreDictName });
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTUtility.copyAmount(1, aStack),
                             new Object[] { OrePrefixes.wireGt01.get(aMaterial), OrePrefixes.wireGt01.get(aMaterial),
                                 OrePrefixes.wireGt01.get(aMaterial), OrePrefixes.wireGt01.get(aMaterial),
                                 OrePrefixes.wireGt01.get(aMaterial), OrePrefixes.wireGt01.get(aMaterial),
                                 OrePrefixes.wireGt01.get(aMaterial), OrePrefixes.wireGt01.get(aMaterial) });
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTUtility.copyAmount(1, aStack),
                             new Object[] { OrePrefixes.wireGt04.get(aMaterial), OrePrefixes.wireGt04.get(aMaterial) });
                     }
                 }
@@ -194,11 +194,11 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
                     // Shapeless crafting recipes
                     {
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 12L),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 12L),
                             new Object[] { aOreDictName });
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTUtility.copyAmount(1, aStack),
                             new Object[] { OrePrefixes.wireGt08.get(aMaterial), OrePrefixes.wireGt04.get(aMaterial) });
                     }
                 }
@@ -209,14 +209,14 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                 if (aMaterial.getProcessingMaterialTierEU() < TierEU.IV) {
                     // Shapeless crafting recipes
                     {
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 16L),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 16L),
                             new Object[] { aOreDictName });
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTUtility.copyAmount(1, aStack),
                             new Object[] { OrePrefixes.wireGt08.get(aMaterial), OrePrefixes.wireGt08.get(aMaterial) });
-                        GT_ModHandler.addShapelessCraftingRecipe(
-                            GT_Utility.copyAmount(1, aStack),
+                        GTModHandler.addShapelessCraftingRecipe(
+                            GTUtility.copyAmount(1, aStack),
                             new Object[] { OrePrefixes.wireGt12.get(aMaterial), OrePrefixes.wireGt04.get(aMaterial) });
                     }
 
@@ -224,7 +224,7 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                 }
             }
             default -> {
-                GT_Log.err.println(
+                GTLog.err.println(
                     "OrePrefix " + aPrefix.name() + " cannot be registered as a cable for Material " + aMaterial.mName);
                 return;
             }
@@ -241,72 +241,72 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                 }
 
                 // shapeless crafting
-                if (GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L) != null) {
-                    GT_ModHandler.addShapelessCraftingRecipe(
-                        GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L),
+                if (GTOreDictUnificator.get(correspondingCable, aMaterial, 1L) != null) {
+                    GTModHandler.addShapelessCraftingRecipe(
+                        GTOreDictUnificator.get(correspondingCable, aMaterial, 1L),
                         craftingListRubber.toArray());
                 }
 
                 // Packer recipe
-                if (GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L) != null) {
-                    GT_Values.RA.stdBuilder()
+                if (GTOreDictUnificator.get(correspondingCable, aMaterial, 1L) != null) {
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_Utility.copyAmount(1, aStack),
-                            GT_OreDictUnificator.get(OrePrefixes.plate.get(Materials.Rubber), costMultiplier))
-                        .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                            GTUtility.copyAmount(1, aStack),
+                            GTOreDictUnificator.get(OrePrefixes.plate.get(Materials.Rubber), costMultiplier))
+                        .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                         .duration(5 * SECONDS)
                         .eut(8)
                         .addTo(packagerRecipes);
                 }
                 // alloy smelter recipes
                 {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 2L),
-                            GT_OreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 1L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cableGt01, aMaterial, 1L))
+                            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 2L),
+                            GTOreDictUnificator.get(OrePrefixes.wireGt01, aMaterial, 1L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cableGt01, aMaterial, 1L))
                         .duration(5 * SECONDS)
                         .eut(8)
                         .addTo(alloySmelterRecipes);
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 2L),
-                            GT_OreDictUnificator.get(OrePrefixes.wireGt02, aMaterial, 1L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cableGt02, aMaterial, 1L))
+                            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 2L),
+                            GTOreDictUnificator.get(OrePrefixes.wireGt02, aMaterial, 1L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cableGt02, aMaterial, 1L))
                         .duration(10 * SECONDS)
                         .eut(16)
                         .addTo(alloySmelterRecipes);
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(
-                            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 4L),
-                            GT_OreDictUnificator.get(OrePrefixes.wireGt04, aMaterial, 1L))
-                        .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cableGt04, aMaterial, 1L))
+                            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 4L),
+                            GTOreDictUnificator.get(OrePrefixes.wireGt04, aMaterial, 1L))
+                        .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cableGt04, aMaterial, 1L))
                         .duration(15 * SECONDS)
                         .eut(TierEU.RECIPE_LV)
                         .addTo(alloySmelterRecipes);
                 }
                 // Assembler recipes
                 {
-                    if (GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L) != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(aStack, GT_Utility.getIntegratedCircuit(24))
-                            .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                    if (GTOreDictUnificator.get(correspondingCable, aMaterial, 1L) != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(aStack, GTUtility.getIntegratedCircuit(24))
+                            .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                             .fluidInputs(Materials.Rubber.getMolten(144L * costMultiplier))
                             .duration(5 * SECONDS)
                             .eut(8)
                             .addTo(assemblerRecipes);
 
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(aStack, GT_Utility.getIntegratedCircuit(24))
-                            .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(aStack, GTUtility.getIntegratedCircuit(24))
+                            .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                             .fluidInputs(Materials.StyreneButadieneRubber.getMolten(108L * costMultiplier))
                             .duration(5 * SECONDS)
                             .eut(8)
                             .addTo(assemblerRecipes);
 
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(aStack, GT_Utility.getIntegratedCircuit(24))
-                            .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(aStack, GTUtility.getIntegratedCircuit(24))
+                            .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                             .fluidInputs(Materials.Silicone.getMolten(72L * costMultiplier))
                             .duration(5 * SECONDS)
                             .eut(8)
@@ -315,17 +315,17 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                         for (Materials dielectric : dielectrics) {
                             for (Materials syntheticRubber : syntheticRubbers) {
 
-                                GT_Values.RA.stdBuilder()
-                                    .itemInputs(GT_Utility.copyAmount(4, aStack), dielectric.getDust(costMultiplier))
-                                    .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 4L))
+                                GTValues.RA.stdBuilder()
+                                    .itemInputs(GTUtility.copyAmount(4, aStack), dielectric.getDust(costMultiplier))
+                                    .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 4L))
                                     .fluidInputs(syntheticRubber.getMolten(costMultiplier * 144L))
                                     .duration(20 * SECONDS)
                                     .eut(8)
                                     .addTo(assemblerRecipes);
 
-                                GT_Values.RA.stdBuilder()
+                                GTValues.RA.stdBuilder()
                                     .itemInputs(aStack, dielectric.getDustSmall(costMultiplier))
-                                    .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                                    .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                                     .fluidInputs(syntheticRubber.getMolten(costMultiplier * 36L))
                                     .duration(5 * SECONDS)
                                     .eut(8)
@@ -337,29 +337,29 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
             }
             case "Iron", "Nickel", "Cupronickel", "Copper", "AnnealedCopper", "Kanthal", "Gold", "Electrum", "Silver", "Nichrome", "Steel", "BlackSteel", "Titanium", "Aluminium", "BlueAlloy", "NetherStar", "RedstoneAlloy" -> {
 
-                if (GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L) == null) {
+                if (GTOreDictUnificator.get(correspondingCable, aMaterial, 1L) == null) {
                     break;
                 }
                 // Assembler recipes
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(aStack, GT_Utility.getIntegratedCircuit(24))
-                    .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(aStack, GTUtility.getIntegratedCircuit(24))
+                    .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                     .fluidInputs(Materials.Rubber.getMolten(144 * costMultiplier))
                     .duration(5 * SECONDS)
                     .eut(8)
                     .addTo(assemblerRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(aStack, GT_Utility.getIntegratedCircuit(24))
-                    .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(aStack, GTUtility.getIntegratedCircuit(24))
+                    .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                     .fluidInputs(Materials.StyreneButadieneRubber.getMolten(108 * costMultiplier))
                     .duration(5 * SECONDS)
                     .eut(8)
                     .addTo(assemblerRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(aStack, GT_Utility.getIntegratedCircuit(24))
-                    .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(aStack, GTUtility.getIntegratedCircuit(24))
+                    .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                     .fluidInputs(Materials.Silicone.getMolten(72 * costMultiplier))
                     .duration(5 * SECONDS)
                     .eut(8)
@@ -368,17 +368,17 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                 for (Materials dielectric : dielectrics) {
                     for (Materials syntheticRubber : syntheticRubbers) {
 
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(GT_Utility.copyAmount(4, aStack), dielectric.getDust(costMultiplier))
-                            .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 4L))
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(GTUtility.copyAmount(4, aStack), dielectric.getDust(costMultiplier))
+                            .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 4L))
                             .fluidInputs(syntheticRubber.getMolten(costMultiplier * 144L))
                             .duration(20 * SECONDS)
                             .eut(8)
                             .addTo(assemblerRecipes);
 
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(aStack, dielectric.getDustSmall(costMultiplier))
-                            .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                            .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                             .fluidInputs(syntheticRubber.getMolten(costMultiplier * 36L))
                             .duration(5 * SECONDS)
                             .eut(8)
@@ -388,28 +388,28 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
             }
 
             default -> {
-                if (GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L) == null) {
+                if (GTOreDictUnificator.get(correspondingCable, aMaterial, 1L) == null) {
                     break;
                 }
 
                 // Assembler recipes
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         aStack,
-                        GT_OreDictUnificator.get(OrePrefixes.foil, aMaterial, costMultiplier),
-                        GT_Utility.getIntegratedCircuit(24))
-                    .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.foil, aMaterial, costMultiplier),
+                        GTUtility.getIntegratedCircuit(24))
+                    .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                     .fluidInputs(Materials.Silicone.getMolten(costMultiplier * 72))
                     .duration(5 * SECONDS)
                     .eut(calculateRecipeEU(aMaterial, 8))
                     .addTo(assemblerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         aStack,
-                        GT_OreDictUnificator.get(OrePrefixes.foil, Materials.PolyphenyleneSulfide, costMultiplier),
-                        GT_Utility.getIntegratedCircuit(24))
-                    .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                        GTOreDictUnificator.get(OrePrefixes.foil, Materials.PolyphenyleneSulfide, costMultiplier),
+                        GTUtility.getIntegratedCircuit(24))
+                    .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                     .fluidInputs(Materials.Silicone.getMolten(costMultiplier * 72))
                     .duration(5 * SECONDS)
                     .eut(calculateRecipeEU(aMaterial, 8))
@@ -418,44 +418,44 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
                 for (Materials dielectric : dielectrics) {
                     for (Materials syntheticRubber : syntheticRubbers) {
 
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(
-                                GT_Utility.copyAmount(4, aStack),
+                                GTUtility.copyAmount(4, aStack),
                                 dielectric.getDust(costMultiplier),
-                                GT_OreDictUnificator.get(OrePrefixes.foil, aMaterial, costMultiplier * 4L))
-                            .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 4L))
+                                GTOreDictUnificator.get(OrePrefixes.foil, aMaterial, costMultiplier * 4L))
+                            .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 4L))
                             .fluidInputs(syntheticRubber.getMolten(costMultiplier * 144L))
                             .duration(20 * SECONDS)
                             .eut(calculateRecipeEU(aMaterial, 8))
                             .addTo(assemblerRecipes);
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(
-                                GT_Utility.copyAmount(4, aStack),
+                                GTUtility.copyAmount(4, aStack),
                                 dielectric.getDust(costMultiplier),
-                                GT_OreDictUnificator
+                                GTOreDictUnificator
                                     .get(OrePrefixes.foil, Materials.PolyphenyleneSulfide, costMultiplier * 4L))
-                            .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 4L))
+                            .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 4L))
                             .fluidInputs(syntheticRubber.getMolten(costMultiplier * 144L))
                             .duration(20 * SECONDS)
                             .eut(calculateRecipeEU(aMaterial, 8))
                             .addTo(assemblerRecipes);
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(
                                 aStack,
                                 dielectric.getDustSmall(costMultiplier),
-                                GT_OreDictUnificator.get(OrePrefixes.foil, aMaterial, costMultiplier))
-                            .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                                GTOreDictUnificator.get(OrePrefixes.foil, aMaterial, costMultiplier))
+                            .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                             .fluidInputs(syntheticRubber.getMolten(costMultiplier * 36L))
                             .duration(5 * SECONDS)
                             .eut(calculateRecipeEU(aMaterial, 8))
                             .addTo(assemblerRecipes);
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(
                                 aStack,
                                 dielectric.getDustSmall(costMultiplier),
-                                GT_OreDictUnificator
+                                GTOreDictUnificator
                                     .get(OrePrefixes.foil, Materials.PolyphenyleneSulfide, costMultiplier))
-                            .itemOutputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                            .itemOutputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
                             .fluidInputs(syntheticRubber.getMolten(costMultiplier * 36L))
                             .duration(5 * SECONDS)
                             .eut(calculateRecipeEU(aMaterial, 8))
@@ -465,16 +465,16 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
             }
         }
 
-        if (GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L) != null) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L))
-                .itemOutputs(GT_Utility.copyAmount(1, aStack))
+        if (GTOreDictUnificator.get(correspondingCable, aMaterial, 1L) != null) {
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L))
+                .itemOutputs(GTUtility.copyAmount(1, aStack))
                 .duration(5 * SECONDS)
                 .eut(calculateRecipeEU(aMaterial, 8))
                 .addTo(unpackagerRecipes);
         }
 
-        if (GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L) != null) {
+        if (GTOreDictUnificator.get(correspondingCable, aMaterial, 1L) != null) {
             AE2AddNetAttunementCable(aStack, correspondingCable, aMaterial);
         }
     }
@@ -500,7 +500,7 @@ public class ProcessingWire implements gregtech.api.interfaces.IOreRecipeRegistr
             .addNewAttunement(aStack, (TunnelType) tt);
         Api.INSTANCE.registries()
             .p2pTunnel()
-            .addNewAttunement(GT_OreDictUnificator.get(correspondingCable, aMaterial, 1L), (TunnelType) tt);
+            .addNewAttunement(GTOreDictUnificator.get(correspondingCable, aMaterial, 1L), (TunnelType) tt);
     }
     // end region
 }
diff --git a/src/main/java/gregtech/loaders/postload/BlockResistanceLoader.java b/src/main/java/gregtech/loaders/postload/BlockResistanceLoader.java
new file mode 100644
index 0000000000..264cd9e6b9
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/BlockResistanceLoader.java
@@ -0,0 +1,43 @@
+package gregtech.loaders.postload;
+
+import java.util.Set;
+
+import net.minecraft.block.Block;
+import net.minecraft.block.material.Material;
+import net.minecraft.init.Blocks;
+import net.minecraft.item.ItemAxe;
+import net.minecraft.item.ItemPickaxe;
+
+import gregtech.api.util.GTUtility;
+
+public class BlockResistanceLoader implements Runnable {
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public void run() {
+        Blocks.stone.setResistance(10.0F);
+        Blocks.cobblestone.setResistance(10.0F);
+        Blocks.stonebrick.setResistance(10.0F);
+        Blocks.brick_block.setResistance(20.0F);
+        Blocks.hardened_clay.setResistance(15.0F);
+        Blocks.stained_hardened_clay.setResistance(15.0F);
+
+        Blocks.bed.setHarvestLevel("axe", 0);
+        Blocks.hay_block.setHarvestLevel("axe", 0);
+        Blocks.tnt.setHarvestLevel("pickaxe", 0);
+        Blocks.sponge.setHarvestLevel("axe", 0);
+        Blocks.monster_egg.setHarvestLevel("pickaxe", 0);
+
+        GTUtility.callMethod(Material.tnt, "func_85158_p", true, false, false);
+        GTUtility.callMethod(Material.tnt, "setAdventureModeExempt", true, false, false);
+
+        Set tSet = (Set) GTUtility.getFieldContent(ItemAxe.class, "field_150917_c", true, true);
+        tSet.add(Blocks.bed);
+        tSet.add(Blocks.hay_block);
+        tSet.add(Blocks.sponge);
+
+        tSet = (Set) GTUtility.getFieldContent(ItemPickaxe.class, "field_150915_c", true, true);
+        tSet.add(Blocks.monster_egg);
+        tSet.add(Blocks.tnt);
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/BookAndLootLoader.java b/src/main/java/gregtech/loaders/postload/BookAndLootLoader.java
new file mode 100644
index 0000000000..e227d7f21a
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/BookAndLootLoader.java
@@ -0,0 +1,337 @@
+package gregtech.loaders.postload;
+
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+import net.minecraft.util.WeightedRandomChestContent;
+import net.minecraftforge.common.ChestGenHooks;
+
+import gregtech.GTMod;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GTLog;
+import gregtech.api.util.GTOreDictUnificator;
+
+public class BookAndLootLoader implements Runnable {
+
+    @Override
+    public void run() {
+        GTLog.out.println("GTMod: Adding worldgenerated Chest Content.");
+        if (GTMod.gregtechproxy.mIncreaseDungeonLoot) {
+            ChestGenHooks tChest = ChestGenHooks.getInfo("bonusChest");
+            tChest.setMax(tChest.getMax() + 8);
+            tChest.setMin(tChest.getMin() + 4);
+            tChest = ChestGenHooks.getInfo("dungeonChest");
+            tChest.setMax(tChest.getMax() + 6);
+            tChest.setMin(tChest.getMin() + 3);
+            tChest = ChestGenHooks.getInfo("pyramidDesertyChest");
+            tChest.setMax(tChest.getMax() + 8);
+            tChest.setMin(tChest.getMin() + 4);
+            tChest = ChestGenHooks.getInfo("pyramidJungleChest");
+            tChest.setMax(tChest.getMax() + 16);
+            tChest.setMin(tChest.getMin() + 8);
+            tChest = ChestGenHooks.getInfo("pyramidJungleDispenser");
+            tChest.setMax(tChest.getMax() + 2);
+            tChest.setMin(tChest.getMin() + 1);
+            tChest = ChestGenHooks.getInfo("mineshaftCorridor");
+            tChest.setMax(tChest.getMax() + 4);
+            tChest.setMin(tChest.getMin() + 2);
+            tChest = ChestGenHooks.getInfo("villageBlacksmith");
+            tChest.setMax(tChest.getMax() + 12);
+            tChest.setMin(tChest.getMin() + 6);
+            tChest = ChestGenHooks.getInfo("strongholdCrossing");
+            tChest.setMax(tChest.getMax() + 8);
+            tChest.setMin(tChest.getMin() + 4);
+            tChest = ChestGenHooks.getInfo("strongholdCorridor");
+            tChest.setMax(tChest.getMax() + 6);
+            tChest.setMin(tChest.getMin() + 3);
+            tChest = ChestGenHooks.getInfo("strongholdLibrary");
+            tChest.setMax(tChest.getMax() + 16);
+            tChest.setMin(tChest.getMin() + 8);
+        }
+        ChestGenHooks
+            .addItem("bonusChest", new WeightedRandomChestContent(ItemList.Bottle_Purple_Drink.get(1L), 8, 16, 2));
+
+        ChestGenHooks
+            .addItem("dungeonChest", new WeightedRandomChestContent(ItemList.Bottle_Holy_Water.get(1L), 4, 8, 20));
+        ChestGenHooks
+            .addItem("dungeonChest", new WeightedRandomChestContent(ItemList.Bottle_Purple_Drink.get(1L), 8, 16, 80));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1L),
+                1,
+                6,
+                120));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Lead, 1L), 1, 6, 30));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), 1, 6, 60));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L), 1, 6, 60));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Manganese, 1L),
+                1,
+                6,
+                60));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.DamascusSteel, 1L),
+                1,
+                6,
+                10));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Emerald, 1L), 1, 6, 20));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 1, 6, 20));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), 1, 6, 20));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L),
+                1,
+                6,
+                20));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 1, 6, 20));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L),
+                1,
+                6,
+                40));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L),
+                1,
+                6,
+                40));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Neodymium, 1L),
+                1,
+                6,
+                40));
+        ChestGenHooks.addItem(
+            "dungeonChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1L), 1, 3, 40));
+
+        ChestGenHooks.addItem(
+            "pyramidDesertyChest",
+            new WeightedRandomChestContent(ItemList.Bottle_Holy_Water.get(1L), 4, 8, 2));
+        ChestGenHooks.addItem(
+            "pyramidDesertyChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1L),
+                4,
+                16,
+                12));
+        ChestGenHooks.addItem(
+            "pyramidDesertyChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Platinum, 1L),
+                2,
+                8,
+                4));
+        ChestGenHooks.addItem(
+            "pyramidDesertyChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 2, 8, 2));
+        ChestGenHooks.addItem(
+            "pyramidDesertyChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), 2, 8, 2));
+        ChestGenHooks.addItem(
+            "pyramidDesertyChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L),
+                2,
+                8,
+                2));
+        ChestGenHooks.addItem(
+            "pyramidDesertyChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 2, 8, 2));
+        ChestGenHooks.addItem(
+            "pyramidDesertyChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L), 2, 8, 4));
+        ChestGenHooks.addItem(
+            "pyramidDesertyChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L),
+                2,
+                8,
+                4));
+
+        ChestGenHooks.addItem(
+            "pyramidJungleChest",
+            new WeightedRandomChestContent(ItemList.Coin_Gold_Ancient.get(1L), 16, 64, 10));
+        ChestGenHooks.addItem(
+            "pyramidJungleChest",
+            new WeightedRandomChestContent(ItemList.ZPM.getWithCharge(1L, 2147483647), 1, 1, 1));
+        ChestGenHooks.addItem(
+            "pyramidJungleChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L),
+                4,
+                16,
+                12));
+        ChestGenHooks.addItem(
+            "pyramidJungleChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 2, 8, 2));
+        ChestGenHooks.addItem(
+            "pyramidJungleChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), 2, 8, 2));
+        ChestGenHooks.addItem(
+            "pyramidJungleChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L),
+                2,
+                8,
+                2));
+        ChestGenHooks.addItem(
+            "pyramidJungleChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 2, 8, 2));
+        ChestGenHooks.addItem(
+            "pyramidJungleChest",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L), 2, 8, 4));
+        ChestGenHooks.addItem(
+            "pyramidJungleChest",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L),
+                2,
+                8,
+                4));
+
+        ChestGenHooks.addItem(
+            "pyramidJungleDispenser",
+            new WeightedRandomChestContent(new ItemStack(Items.fire_charge, 1), 2, 8, 30));
+
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1L), 1, 4, 12));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Lead, 1L), 1, 4, 3));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), 1, 4, 6));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L), 1, 4, 6));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), 1, 4, 2));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L),
+                1,
+                4,
+                2));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 1, 4, 2));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L), 1, 4, 4));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L),
+                1,
+                4,
+                4));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 1, 4, 2));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Emerald, 1L), 1, 4, 2));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.DamascusSteel, 1L),
+                1,
+                4,
+                1));
+        ChestGenHooks.addItem(
+            "mineshaftCorridor",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.DamascusSteel, 1L),
+                1,
+                4,
+                1));
+
+        ChestGenHooks
+            .addItem("villageBlacksmith", new WeightedRandomChestContent(ItemList.McGuffium_239.get(1L), 1, 1, 1));
+        ChestGenHooks.addItem(
+            "villageBlacksmith",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1L), 1, 4, 6));
+        ChestGenHooks.addItem(
+            "villageBlacksmith",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Neodymium, 1L),
+                2,
+                8,
+                6));
+        ChestGenHooks.addItem(
+            "villageBlacksmith",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Manganese, 1L),
+                2,
+                8,
+                12));
+        ChestGenHooks.addItem(
+            "villageBlacksmith",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), 4, 12, 12));
+        ChestGenHooks.addItem(
+            "villageBlacksmith",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L),
+                4,
+                12,
+                12));
+        ChestGenHooks.addItem(
+            "villageBlacksmith",
+            new WeightedRandomChestContent(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Brass, 1L), 4, 12, 12));
+        ChestGenHooks.addItem(
+            "villageBlacksmith",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.DamascusSteel, 1L),
+                4,
+                12,
+                1));
+
+        ChestGenHooks
+            .addItem("strongholdCrossing", new WeightedRandomChestContent(ItemList.Bottle_Holy_Water.get(1L), 4, 8, 6));
+        ChestGenHooks
+            .addItem("strongholdCrossing", new WeightedRandomChestContent(ItemList.McGuffium_239.get(1L), 1, 1, 10));
+
+        ChestGenHooks.addItem(
+            "strongholdCorridor",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.DamascusSteel, 1L),
+                1,
+                4,
+                6));
+        ChestGenHooks.addItem(
+            "strongholdCorridor",
+            new WeightedRandomChestContent(
+                GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.DamascusSteel, 1L),
+                1,
+                4,
+                6));
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/CraftingRecipeLoader.java b/src/main/java/gregtech/loaders/postload/CraftingRecipeLoader.java
new file mode 100644
index 0000000000..ae41a07e97
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/CraftingRecipeLoader.java
@@ -0,0 +1,2011 @@
+package gregtech.loaders.postload;
+
+import static gregtech.api.enums.Mods.Forestry;
+import static gregtech.api.enums.Mods.GraviSuite;
+import static gregtech.api.enums.Mods.IndustrialCraft2;
+import static gregtech.api.enums.Mods.NotEnoughItems;
+import static gregtech.api.util.GTModHandler.getModItem;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+import bartworks.system.material.WerkstoffLoader;
+import gregtech.GTMod;
+import gregtech.api.enums.Dyes;
+import gregtech.api.enums.GTValues;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OreDictNames;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.ToolDictNames;
+import gregtech.api.util.GTLog;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import ic2.core.Ic2Items;
+
+public class CraftingRecipeLoader implements Runnable {
+
+    private static final String aTextIron1 = "X X";
+    private static final String aTextIron2 = "XXX";
+    private static final long bits_no_remove_buffered = GTModHandler.RecipeBits.NOT_REMOVABLE
+        | GTModHandler.RecipeBits.BUFFERED;
+    private static final long bits = GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE
+        | GTModHandler.RecipeBits.BUFFERED;
+    private static final String aTextPlateWrench = "PwP";
+
+    @Override
+    public void run() {
+        GTLog.out.println("GTMod: Adding nerfed Vanilla Recipes.");
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.bucket, 1),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
+            new Object[] { "XhX", " X ", 'X', OrePrefixes.plate.get(Materials.AnyIron) });
+        ItemStack tMat = new ItemStack(Items.iron_ingot);
+        {
+            ItemStack tStack;
+            if (null != (tStack = GTModHandler.removeRecipe(tMat, tMat, null, null, null, null, null, null, null))) {
+                GTModHandler.addCraftingRecipe(
+                    tStack,
+                    bits_no_remove_buffered | GTModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
+                    new Object[] { "ShS", "XZX", "SdS", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'S',
+                        OrePrefixes.screw.get(Materials.Steel), 'Z', OrePrefixes.spring.get(Materials.Steel) });
+            }
+        }
+        {
+            ItemStack tStack;
+            if (null != (tStack = GTModHandler.removeRecipe(tMat, tMat, null, tMat, tMat, null, tMat, tMat, null))) {
+                GTModHandler.addCraftingRecipe(
+                    tStack,
+                    bits_no_remove_buffered | GTModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
+                    new Object[] { "XX ", "XXh", "XX ", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'S',
+                        OrePrefixes.stick.get(Materials.Wood), 'I', OrePrefixes.ingot.get(Materials.AnyIron) });
+            }
+        }
+        {
+            ItemStack tStack;
+            if (null != (tStack = GTModHandler.removeRecipe(tMat, null, tMat, tMat, null, tMat, tMat, tMat, tMat))) {
+                GTModHandler.addCraftingRecipe(
+                    tStack,
+                    bits_no_remove_buffered | GTModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
+                    new Object[] { aTextIron1, "XhX", aTextIron2, 'X', OrePrefixes.plate.get(Materials.AnyIron), 'S',
+                        OrePrefixes.stick.get(Materials.Wood), 'I', OrePrefixes.ingot.get(Materials.AnyIron) });
+            }
+        }
+        {
+            ItemStack tStack;
+            if (null != (tStack = GTModHandler
+                .removeRecipe(tMat, null, tMat, tMat, new ItemStack(Blocks.chest, 1, 0), tMat, null, tMat, null))) {
+                GTModHandler.addCraftingRecipe(
+                    tStack,
+                    bits_no_remove_buffered | GTModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
+                    new Object[] { "XwX", "XCX", " X ", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'S',
+                        OrePrefixes.stick.get(Materials.Wood), 'I', OrePrefixes.ingot.get(Materials.AnyIron), 'C',
+                        "craftingChest" });
+            }
+        }
+        {
+            ItemStack tStack;
+            if (null != (tStack = GTModHandler.removeRecipe(tMat, tMat, tMat, tMat, tMat, tMat, null, null, null))) {
+                tStack.stackSize /= 2;
+                GTModHandler.addCraftingRecipe(
+                    tStack,
+                    bits_no_remove_buffered | GTModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
+                    new Object[] { " w ", aTextIron2, aTextIron2, 'X', OrePrefixes.stick.get(Materials.AnyIron), 'S',
+                        OrePrefixes.stick.get(Materials.Wood), 'I', OrePrefixes.ingot.get(Materials.AnyIron) });
+            }
+        }
+
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("ironFence", 6L),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.REVERSIBLE,
+            new Object[] { aTextIron2, aTextIron2, " w ", 'X', OrePrefixes.stick.get(Materials.AnyIron), 'S',
+                OrePrefixes.stick.get(Materials.Wood), 'I', OrePrefixes.ingot.get(Materials.AnyIron) });
+
+        tMat = new ItemStack(Items.gold_ingot);
+        {
+            ItemStack tStack;
+            if (null != (tStack = GTModHandler.removeRecipe(tMat, tMat, null, null, null, null, null, null, null))) {
+                GTModHandler.addCraftingRecipe(
+                    tStack,
+                    bits_no_remove_buffered | GTModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
+                    new Object[] { "ShS", "XZX", "SdS", 'X', OrePrefixes.plate.get(Materials.Gold), 'S',
+                        OrePrefixes.screw.get(Materials.Steel), 'Z', OrePrefixes.spring.get(Materials.Steel) });
+            }
+        }
+        tMat = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 1L);
+        {
+            ItemStack tStack;
+            if (null != (tStack = GTModHandler.removeRecipe(tMat, tMat, tMat, tMat, tMat, tMat, null, null, null))) {
+                GTModHandler.addCraftingRecipe(
+                    tStack,
+                    bits_no_remove_buffered | GTModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
+                    new Object[] { aTextIron2, aTextIron2, 'X', OrePrefixes.plate.get(Materials.Rubber) });
+            }
+        }
+        GTModHandler.removeRecipeByOutputDelayed(ItemList.Bottle_Empty.get(1L));
+        GTModHandler.removeRecipeByOutputDelayed(ItemList.IC2_Spray_WeedEx.get(1L));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("reBattery", 1L));
+        GTModHandler.removeRecipeByOutputDelayed(new ItemStack(Blocks.tnt));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("dynamite", 1L));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("industrialTnt", 1L));
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getModItem(Forestry.ID, "stamps", 1L, 0));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getModItem(Forestry.ID, "stamps", 1L, 1));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getModItem(Forestry.ID, "stamps", 1L, 2));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getModItem(Forestry.ID, "stamps", 1L, 3));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getModItem(Forestry.ID, "stamps", 1L, 4));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getModItem(Forestry.ID, "stamps", 1L, 5));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getModItem(Forestry.ID, "stamps", 1L, 6));
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getModItem(Forestry.ID, "engine", 1L, 0));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getModItem(Forestry.ID, "engine", 1L, 1));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getModItem(Forestry.ID, "engine", 1L, 2));
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getModItem(Forestry.ID, "engine", 1L, 4));
+
+        ItemStack tStack = GTModHandler
+            .removeRecipe(new ItemStack(Blocks.planks, 1, 0), null, null, new ItemStack(Blocks.planks, 1, 0));
+        if (tStack != null) {
+            GTModHandler.addCraftingRecipe(
+                GTUtility.copyAmount(
+                    GTMod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
+                    tStack),
+                bits_no_remove_buffered,
+                new Object[] { "s", "P", "P", 'P', OrePrefixes.plank.get(Materials.Wood) });
+            GTModHandler.addCraftingRecipe(
+                GTUtility
+                    .copyAmount(GTMod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize / 2 : tStack.stackSize, tStack),
+                bits_no_remove_buffered,
+                new Object[] { "P", "P", 'P', OrePrefixes.plank.get(Materials.Wood) });
+        }
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.stone_button, 2, 0),
+            bits_no_remove_buffered,
+            new Object[] { "S", "S", 'S', OrePrefixes.stone });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.stone_button, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.stone });
+
+        GTLog.out.println("GTMod: Adding Vanilla Convenience Recipes.");
+
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.stonebrick, 1, 3),
+            bits_no_remove_buffered,
+            new Object[] { "f", "X", 'X', new ItemStack(Blocks.double_stone_slab, 1, 8) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.gravel, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { "h", "X", 'X', new ItemStack(Blocks.cobblestone, 1, 0) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.sand, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { "h", "X", 'X', new ItemStack(Blocks.gravel, 1, 0) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.cobblestone, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { "h", "X", 'X', new ItemStack(Blocks.stone, 1, 0) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.stonebrick, 1, 2),
+            bits_no_remove_buffered,
+            new Object[] { "h", "X", 'X', new ItemStack(Blocks.stonebrick, 1, 0) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.double_stone_slab, 1, 8),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.double_stone_slab, 1, 0) });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.double_stone_slab, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.double_stone_slab, 1, 8) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.double_stone_slab, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 0) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.cobblestone, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 3) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.brick_block, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 4) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.stonebrick, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 5) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.nether_brick, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 6) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.quartz_block, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 7) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.double_stone_slab, 1, 8),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 8) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.planks, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 0) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.planks, 1, 1),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 1) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.planks, 1, 2),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 2) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.planks, 1, 3),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 3) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.planks, 1, 4),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 4) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.planks, 1, 5),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 5) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.planks, 1, 6),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 6) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.planks, 1, 7),
+            bits_no_remove_buffered,
+            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 7) });
+
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.stick, 2, 0),
+            bits_no_remove_buffered,
+            new Object[] { "s", "X", 'X', new ItemStack(Blocks.deadbush, 1, 32767) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.stick, 2, 0),
+            bits_no_remove_buffered,
+            new Object[] { "s", "X", 'X', new ItemStack(Blocks.tallgrass, 1, 0) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.stick, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { "s", "X", 'X', OrePrefixes.treeSapling });
+
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.comparator, 1, 0),
+            bits_no_remove_buffered,
+            new Object[] { " T ", "TQT", "SSS", 'Q', OreDictNames.craftingQuartz, 'S', OrePrefixes.stoneSmooth, 'T',
+                OreDictNames.craftingRedstoneTorch });
+
+        GTLog.out.println("GTMod: Adding Tool Recipes.");
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.minecart, 1),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
+            new Object[] { " h ", "PwP", "WPW", 'P', OrePrefixes.plate.get(Materials.AnyIron), 'W',
+                ItemList.Component_Minecart_Wheels_Iron });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.minecart, 1),
+            bits_no_remove_buffered,
+            new Object[] { " h ", "PwP", "WPW", 'P', OrePrefixes.plate.get(Materials.Steel), 'W',
+                ItemList.Component_Minecart_Wheels_Steel });
+
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.chest_minecart, 1),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.REVERSIBLE
+                | GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
+            new Object[] { "X", "C", 'C', new ItemStack(Items.minecart, 1), 'X', OreDictNames.craftingChest });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.furnace_minecart, 1),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.REVERSIBLE
+                | GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
+            new Object[] { "X", "C", 'C', new ItemStack(Items.minecart, 1), 'X', OreDictNames.craftingFurnace });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.hopper_minecart, 1),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.REVERSIBLE
+                | GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
+            new Object[] { "X", "C", 'C', new ItemStack(Items.minecart, 1), 'X',
+                new ItemStack(Blocks.hopper, 1, 32767) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.tnt_minecart, 1),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.REVERSIBLE
+                | GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
+            new Object[] { "X", "C", 'C', new ItemStack(Items.minecart, 1), 'X', new ItemStack(Blocks.tnt, 1, 32767) });
+
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.chainmail_helmet, 1),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.REVERSIBLE
+                | GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
+            new Object[] { "RRR", "RhR", 'R', OrePrefixes.ring.get(Materials.Steel) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.chainmail_chestplate, 1),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.REVERSIBLE
+                | GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
+            new Object[] { "RhR", "RRR", "RRR", 'R', OrePrefixes.ring.get(Materials.Steel) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.chainmail_leggings, 1),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.REVERSIBLE
+                | GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
+            new Object[] { "RRR", "RhR", "R R", 'R', OrePrefixes.ring.get(Materials.Steel) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.chainmail_boots, 1),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.REVERSIBLE
+                | GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
+            new Object[] { "R R", "RhR", 'R', OrePrefixes.ring.get(Materials.Steel) });
+
+        GTLog.out.println("GTMod: Adding Wool and Color releated Recipes.");
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 1),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeOrange });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 2),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeMagenta });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 3),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeLightBlue });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 4),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeYellow });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 5),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeLime });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 6),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyePink });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 7),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeGray });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 8),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeLightGray });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 9),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeCyan });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 10),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyePurple });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 11),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeBlue });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 12),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeBrown });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 13),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeGreen });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 14),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeRed });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Blocks.wool, 1, 15),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeBlack });
+
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.stained_glass, 8, 0),
+            bits_no_remove_buffered,
+            new Object[] { "GGG", "GDG", "GGG", 'G', new ItemStack(Blocks.glass, 1), 'D', Dyes.dyeWhite });
+
+        GTLog.out.println("GTMod: Putting a Potato on a Stick.");
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Packaged_PotatoChips.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.foil.get(Materials.Aluminium), ItemList.Food_PotatoChips });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Packaged_ChiliChips.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.foil.get(Materials.Aluminium), ItemList.Food_ChiliChips });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Packaged_Fries.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.plateDouble.get(Materials.Paper), ItemList.Food_Fries });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Chum_On_Stick.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.stick.get(Materials.Wood), ItemList.Food_Chum });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Potato_On_Stick.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.stick.get(Materials.Wood), ItemList.Food_Raw_Potato });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Potato_On_Stick_Roasted.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.stick.get(Materials.Wood), ItemList.Food_Baked_Potato });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Dough.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.bucket.get(Materials.Water), OrePrefixes.dust.get(Materials.Wheat) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Dough_Sugar.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "foodDough", OrePrefixes.dust.get(Materials.Sugar) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Dough_Chocolate.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "foodDough", OrePrefixes.dust.get(Materials.Cocoa) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Dough_Chocolate.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "foodDough", OrePrefixes.dust.get(Materials.Chocolate) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Flat_Dough.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "foodDough", ToolDictNames.craftingToolRollingPin });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Raw_Bun.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "foodDough" });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Raw_Bread.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "foodDough", "foodDough" });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Raw_Baguette.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "foodDough", "foodDough", "foodDough" });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Raw_Cake.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Dough_Sugar, ItemList.Food_Dough_Sugar, ItemList.Food_Dough_Sugar,
+                ItemList.Food_Dough_Sugar });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_ChiliChips.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_PotatoChips, OrePrefixes.dust.get(Materials.Chili) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sliced_Buns.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sliced_Breads.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sliced_Baguettes.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sliced_Bun.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Buns });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sliced_Bread.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Breads });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sliced_Baguette.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Baguettes });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Burger_Veggie.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Buns, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato,
+                ItemList.Food_Sliced_Onion });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Burger_Cheese.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Buns, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
+                ItemList.Food_Sliced_Cheese });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Burger_Meat.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Buns, OrePrefixes.dust.get(Materials.MeatCooked) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Burger_Chum.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Buns, ItemList.Food_Chum });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Burger_Veggie.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Cucumber,
+                ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Burger_Cheese.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Cheese,
+                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Burger_Meat.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun,
+                OrePrefixes.dust.get(Materials.MeatCooked) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Burger_Chum.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun, ItemList.Food_Chum });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sandwich_Veggie.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Breads, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber,
+                ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sandwich_Cheese.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Breads, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
+                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sandwich_Bacon.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Breads, new ItemStack(Items.cooked_porkchop, 1) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sandwich_Steak.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Breads, new ItemStack(Items.cooked_beef, 1) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sandwich_Veggie.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Cucumber,
+                ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato,
+                ItemList.Food_Sliced_Onion });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sandwich_Cheese.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Cheese,
+                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
+                ItemList.Food_Sliced_Cheese });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sandwich_Bacon.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread,
+                new ItemStack(Items.cooked_porkchop, 1) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Sandwich_Steak.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread,
+                new ItemStack(Items.cooked_beef, 1) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Large_Sandwich_Veggie.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Baguettes, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber,
+                ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato,
+                ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Large_Sandwich_Cheese.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Baguettes, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
+                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
+                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Large_Sandwich_Bacon.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Baguettes, new ItemStack(Items.cooked_porkchop, 1),
+                new ItemStack(Items.cooked_porkchop, 1) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Large_Sandwich_Steak.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Baguettes, new ItemStack(Items.cooked_beef, 1),
+                new ItemStack(Items.cooked_beef, 1) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Large_Sandwich_Veggie.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Cucumber,
+                ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato,
+                ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Large_Sandwich_Cheese.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Cheese,
+                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
+                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Large_Sandwich_Bacon.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette,
+                new ItemStack(Items.cooked_porkchop, 1), new ItemStack(Items.cooked_porkchop, 1) });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Large_Sandwich_Steak.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette,
+                new ItemStack(Items.cooked_beef, 1), new ItemStack(Items.cooked_beef, 1) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Raw_Pizza_Veggie.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Flat_Dough, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato,
+                ItemList.Food_Sliced_Onion });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Raw_Pizza_Cheese.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Flat_Dough, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
+                ItemList.Food_Sliced_Cheese });
+        GTModHandler.addShapelessCraftingRecipe(
+            ItemList.Food_Raw_Pizza_Meat.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { ItemList.Food_Flat_Dough, OrePrefixes.dust.get(Materials.MeatCooked) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.Food_Sliced_Cheese.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "kX", 'X', "foodCheese" });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Food_Sliced_Lemon.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "kX", 'X', "cropLemon" });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Food_Sliced_Tomato.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "kX", 'X', "cropTomato" });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Food_Sliced_Onion.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "kX", 'X', "cropOnion" });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Food_Sliced_Cucumber.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "kX", 'X', "cropCucumber" });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Food_Sliced_Bun.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "kX", 'X', ItemList.Food_Baked_Bun });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Food_Sliced_Bread.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "kX", 'X', ItemList.Food_Baked_Bread });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Food_Sliced_Baguette.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "kX", 'X', ItemList.Food_Baked_Baguette });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Food_Raw_PotatoChips.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "kX", 'X', "cropPotato" });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Food_Raw_Cookie.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "kX", 'X', ItemList.Food_Dough_Chocolate });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.Food_Raw_Fries.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "k", "X", 'X', "cropPotato" });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.bowl, 1),
+            bits_no_remove_buffered,
+            new Object[] { "k", "X", 'X', OrePrefixes.plank.get(Materials.Wood) });
+        GTModHandler.addCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.ring, Materials.Rubber, 1L),
+            bits_no_remove_buffered,
+            new Object[] { "k", "X", 'X', OrePrefixes.plate.get(Materials.Rubber) });
+
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.arrow, 1),
+            bits_no_remove_buffered | GTModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
+            new Object[] { "  H", " S ", "F  ", 'H', new ItemStack(Items.flint, 1, 32767), 'S',
+                OrePrefixes.stick.get(Materials.Wood), 'F', OreDictNames.craftingFeather });
+
+        GTModHandler.removeRecipe(
+            new ItemStack(Blocks.planks),
+            null,
+            new ItemStack(Blocks.planks),
+            null,
+            new ItemStack(Blocks.planks));
+        GTModHandler.removeRecipeByOutputDelayed(ItemList.Food_Baked_Bread.get(1L));
+        GTModHandler.removeRecipeByOutputDelayed(new ItemStack(Items.cookie, 1));
+        GTModHandler.removeRecipe(
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L),
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L),
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L));
+        if (null != GTUtility.setStack(
+            GTModHandler.getRecipeOutput(
+                true,
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L),
+                null,
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L)),
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L))) {
+            GTLog.out.println("GTMod: Changed Forestrys Bronze Recipe");
+        }
+        tStack = GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1L);
+
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getRecipeOutput(
+                null,
+                new ItemStack(Blocks.sand, 1, 0),
+                null,
+                null,
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.Apatite, 1L),
+                null,
+                null,
+                new ItemStack(Blocks.sand, 1, 0),
+                null),
+            GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { "S", "A", "S", 'A', OrePrefixes.dust.get(Materials.Apatite), 'S',
+                new ItemStack(Blocks.sand, 1, 32767) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getRecipeOutput(
+                tStack,
+                tStack,
+                tStack,
+                tStack,
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.Apatite, 1L),
+                tStack,
+                tStack,
+                tStack,
+                tStack),
+            GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { "SSS", "SAS", "SSS", 'A', OrePrefixes.dust.get(Materials.Apatite), 'S',
+                OrePrefixes.dust.get(Materials.Ash) });
+
+        GTLog.out.println("GTMod: Adding Mixed Metal Ingot Recipes.");
+        GTModHandler.removeRecipeByOutputDelayed(ItemList.IC2_Mixed_Metal_Ingot.get(1L));
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(5L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(5L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(6L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(5L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(5L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(6L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(8L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(8L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(8L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(10L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.Tin) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(10L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(10L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
+                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(12L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
+                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.AnnealedCopper) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(12L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
+                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.RoseGold) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(12L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
+                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.AstralSilver) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(14L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
+                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z',
+                OrePrefixes.plate.get(Materials.AnnealedCopper) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(14L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
+                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.RoseGold) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(14L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
+                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.AstralSilver) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(16L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSG), 'Y',
+                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z',
+                OrePrefixes.plate.get(Materials.AnnealedCopper) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(16L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSG), 'Y',
+                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.RoseGold) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(16L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSG), 'Y',
+                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.AstralSilver) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(18L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSE), 'Y',
+                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.AnnealedCopper) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(18L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSE), 'Y',
+                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.RoseGold) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(18L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSE), 'Y',
+                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.AstralSilver) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(20L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSS), 'Y',
+                OrePrefixes.plate.get(Materials.TungstenSteel), 'Z', OrePrefixes.plate.get(Materials.AnnealedCopper) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(20L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSS), 'Y',
+                OrePrefixes.plate.get(Materials.TungstenSteel), 'Z', OrePrefixes.plate.get(Materials.RoseGold) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(20L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSS), 'Y',
+                OrePrefixes.plate.get(Materials.TungstenSteel), 'Z', OrePrefixes.plate.get(Materials.AstralSilver) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.Long_Distance_Pipeline_Fluid.get(1L),
+            GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE,
+            new Object[] { "GPG", "IwI", "GPG", 'G', GTOreDictUnificator.get(OrePrefixes.gear, Materials.Steel, 1L),
+                'P', GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 1L), 'I',
+                GTOreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Steel, 1L) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Long_Distance_Pipeline_Item.get(1L),
+            GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE,
+            new Object[] { "GPG", "IwI", "GPG", 'G', GTOreDictUnificator.get(OrePrefixes.gear, Materials.Steel, 1L),
+                'P', GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 1L), 'I',
+                GTOreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Tin, 1L) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Long_Distance_Pipeline_Fluid_Pipe.get(32L),
+            GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE,
+            new Object[] { "PPP", "IwI", "PPP", 'P', GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 1L),
+                'I', GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Steel, 1L) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.Long_Distance_Pipeline_Item_Pipe.get(32L),
+            GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE,
+            new Object[] { "PPP", "IwI", "PPP", 'P', GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 1L),
+                'I', GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Tin, 1L) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(22L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Naquadah), 'Y',
+                OrePrefixes.plate.get(Materials.Iridium), 'Z', OrePrefixes.plate.get(Materials.HSSG) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(24L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Naquadah), 'Y',
+                OrePrefixes.plate.get(Materials.Iridium), 'Z', OrePrefixes.plate.get(Materials.HSSE) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(26L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Naquadah), 'Y',
+                OrePrefixes.plate.get(Materials.Iridium), 'Z', OrePrefixes.plate.get(Materials.HSSS) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(28L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.NaquadahAlloy), 'Y',
+                OrePrefixes.plate.get(Materials.Osmiridium), 'Z', OrePrefixes.plate.get(Materials.HSSE) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(30L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.NaquadahAlloy), 'Y',
+                OrePrefixes.plate.get(Materials.Osmiridium), 'Z', OrePrefixes.plate.get(Materials.HSSG) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(32L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.NaquadahAlloy), 'Y',
+                OrePrefixes.plate.get(Materials.Osmiridium), 'Z', OrePrefixes.plate.get(Materials.HSSS) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(34L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Neutronium), 'Y',
+                OrePrefixes.plate.get(Materials.EnergeticAlloy), 'Z', OrePrefixes.plate.get(Materials.Naquadah) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(36L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Neutronium), 'Y',
+                OrePrefixes.plate.get(Materials.EnergeticAlloy), 'Z', OrePrefixes.plate.get(Materials.NaquadahAlloy) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(38L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Neutronium), 'Y',
+                OrePrefixes.plate.get(Materials.EnergeticAlloy), 'Z', OrePrefixes.plate.get(Materials.Draconium) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(40L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.BlackPlutonium), 'Y',
+                OrePrefixes.plate.get(Materials.Sunnarium), 'Z', OrePrefixes.plate.get(Materials.Naquadah) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(42L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.BlackPlutonium), 'Y',
+                OrePrefixes.plate.get(Materials.Sunnarium), 'Z', OrePrefixes.plate.get(Materials.NaquadahAlloy) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(44L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.BlackPlutonium), 'Y',
+                OrePrefixes.plate.get(Materials.Sunnarium), 'Z', OrePrefixes.plate.get(Materials.Draconium) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(48L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.DraconiumAwakened), 'Y',
+                OrePrefixes.plate.get(Materials.Neutronium), 'Z', OrePrefixes.plate.get(Materials.HSSS) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(52L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.DraconiumAwakened), 'Y',
+                OrePrefixes.plate.get(Materials.Neutronium), 'Z', OrePrefixes.plate.get(Materials.Naquadah) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(56L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.DraconiumAwakened), 'Y',
+                OrePrefixes.plate.get(Materials.Neutronium), 'Z', OrePrefixes.plate.get(Materials.NaquadahAlloy) });
+        GTModHandler.addCraftingRecipe(
+            ItemList.IC2_Mixed_Metal_Ingot.get(64L),
+            bits_no_remove_buffered,
+            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.DraconiumAwakened), 'Y',
+                OrePrefixes.plate.get(Materials.Neutronium), 'Z', OrePrefixes.plate.get(Materials.BlackPlutonium) });
+
+        GTLog.out.println("GTMod: Beginning to add regular Crafting Recipes.");
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("scaffold", 4L),
+            bits_no_remove_buffered,
+            new Object[] { "WWW", " S ", "S S", 'W', OrePrefixes.plank.get(Materials.Wood), 'S',
+                OrePrefixes.stick.get(Materials.Wood) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.stick.get(Materials.AnyIron), OrePrefixes.dust.get(Materials.Redstone),
+                OrePrefixes.dust.get(Materials.Redstone), OrePrefixes.dust.get(Materials.Redstone),
+                OrePrefixes.dust.get(Materials.Redstone) });
+        GTModHandler.addCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.ring, Materials.Paper, 1L),
+            bits_no_remove_buffered,
+            new Object[] { "PPk", 'P', OrePrefixes.plate.get(Materials.Paper) });
+
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.torch, 2),
+            bits_no_remove_buffered,
+            new Object[] { "C", "S", 'C', OrePrefixes.dust.get(Materials.Sulfur), 'S',
+                OrePrefixes.stick.get(Materials.Wood) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.torch, 6),
+            bits_no_remove_buffered,
+            new Object[] { "C", "S", 'C', OrePrefixes.dust.get(Materials.TricalciumPhosphate), 'S',
+                OrePrefixes.stick.get(Materials.Wood) });
+
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.piston, 1),
+            bits_no_remove_buffered,
+            new Object[] { "WWW", "CBC", "CRC", 'W', OrePrefixes.plank.get(Materials.Wood), 'C',
+                OrePrefixes.stoneCobble, 'R', OrePrefixes.dust.get(Materials.Redstone), 'B',
+                OrePrefixes.ingot.get(Materials.AnyIron) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.piston, 1),
+            bits_no_remove_buffered,
+            new Object[] { "WWW", "CBC", "CRC", 'W', OrePrefixes.plank.get(Materials.Wood), 'C',
+                OrePrefixes.stoneCobble, 'R', OrePrefixes.dust.get(Materials.Redstone), 'B',
+                OrePrefixes.ingot.get(Materials.AnyBronze) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.piston, 1),
+            bits_no_remove_buffered,
+            new Object[] { "WWW", "CBC", "CRC", 'W', OrePrefixes.plank.get(Materials.Wood), 'C',
+                OrePrefixes.stoneCobble, 'R', OrePrefixes.dust.get(Materials.Redstone), 'B',
+                OrePrefixes.ingot.get(Materials.Aluminium) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.piston, 1),
+            bits_no_remove_buffered,
+            new Object[] { "WWW", "CBC", "CRC", 'W', OrePrefixes.plank.get(Materials.Wood), 'C',
+                OrePrefixes.stoneCobble, 'R', OrePrefixes.dust.get(Materials.Redstone), 'B',
+                OrePrefixes.ingot.get(Materials.Steel) });
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Blocks.piston, 1),
+            bits_no_remove_buffered,
+            new Object[] { "WWW", "CBC", "CRC", 'W', OrePrefixes.plank.get(Materials.Wood), 'C',
+                OrePrefixes.stoneCobble, 'R', OrePrefixes.dust.get(Materials.Redstone), 'B',
+                OrePrefixes.ingot.get(Materials.Titanium) });
+
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("reactorVent", 1L, 1),
+            bits_no_remove_buffered,
+            new Object[] { "AIA", "I I", "AIA", 'I', new ItemStack(Blocks.iron_bars, 1), 'A',
+                OrePrefixes.plate.get(Materials.Aluminium) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTModHandler.getIC2Item("reactorPlatingExplosive", 1L),
+            bits_no_remove_buffered,
+            new Object[] { GTModHandler.getIC2Item("reactorPlating", 1L), OrePrefixes.plate.get(Materials.Lead) });
+        if (!Materials.Steel.mBlastFurnaceRequired) {
+            GTModHandler.addShapelessCraftingRecipe(
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 1L),
+                bits_no_remove_buffered,
+                new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Coal),
+                    OrePrefixes.dust.get(Materials.Coal) });
+        }
+
+        GTModHandler.removeRecipeByOutputDelayed(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 1L));
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 3L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper),
+                OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.Zinc) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Brass, 9L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite),
+                OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Zinc) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 3L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper),
+                OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.Tin) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Bronze, 9L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite),
+                OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tin) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Invar, 9L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Iron),
+                OrePrefixes.dust.get(Materials.Nickel) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Cupronickel, 6L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.AnyCopper) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.RoseGold, 4L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Gold), OrePrefixes.dust.get(Materials.Gold),
+                OrePrefixes.dust.get(Materials.Gold), OrePrefixes.dust.get(Materials.Gold),
+                OrePrefixes.dust.get(Materials.AnyCopper) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.SterlingSilver, 4L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Silver), OrePrefixes.dust.get(Materials.Silver),
+                OrePrefixes.dust.get(Materials.Silver), OrePrefixes.dust.get(Materials.Silver),
+                OrePrefixes.dust.get(Materials.AnyCopper) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.BlackBronze, 4L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Gold), OrePrefixes.dust.get(Materials.Silver),
+                OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper),
+                OrePrefixes.dust.get(Materials.AnyCopper) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.BismuthBronze, 4L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Bismuth), OrePrefixes.dust.get(Materials.Zinc),
+                OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper),
+                OrePrefixes.dust.get(Materials.AnyCopper) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.CobaltBrass, 8L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass),
+                OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass),
+                OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass),
+                OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Aluminium),
+                OrePrefixes.dust.get(Materials.Cobalt) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.DamascusSteel, 2L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dustSmall.get(Materials.Nickel),
+                OrePrefixes.dustSmall.get(Materials.Nickel), OrePrefixes.dustSmall.get(Materials.Nickel),
+                OrePrefixes.dustTiny.get(Materials.Coal), OrePrefixes.dustTiny.get(Materials.Silicon),
+                OrePrefixes.dustTiny.get(Materials.Manganese), OrePrefixes.dustTiny.get(Materials.Chrome),
+                OrePrefixes.dustTiny.get(Materials.Molybdenum) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.DamascusSteel, 2L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dustSmall.get(Materials.Manganese),
+                OrePrefixes.dustSmall.get(Materials.Manganese), OrePrefixes.dustSmall.get(Materials.Chrome),
+                OrePrefixes.dustSmall.get(Materials.Chrome), OrePrefixes.dustTiny.get(Materials.Coal),
+                OrePrefixes.dustTiny.get(Materials.Silicon), OrePrefixes.dustTiny.get(Materials.Vanadium) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.RedstoneAlloy, 2L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Redstone), OrePrefixes.dust.get(Materials.Silicon),
+                OrePrefixes.dust.get(Materials.Coal) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.CrudeSteel, 2L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Clay), OrePrefixes.dust.get(Materials.Flint),
+                OrePrefixes.dust.get(Materials.Stone) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.ConductiveIron, 2L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.RedstoneAlloy), OrePrefixes.dust.get(Materials.Iron),
+                OrePrefixes.dust.get(Materials.Silver) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.EnergeticAlloy, 2L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.ConductiveIron), OrePrefixes.dust.get(Materials.Gold),
+                OrePrefixes.dust.get(Materials.BlackSteel) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.EnergeticSilver, 2L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.ConductiveIron), OrePrefixes.dust.get(Materials.Silver),
+                OrePrefixes.dust.get(Materials.BlackSteel) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.ElectricalSteel, 2L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dust.get(Materials.Coal),
+                OrePrefixes.dust.get(Materials.Silicon) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Soularium, 2L),
+            bits_no_remove_buffered,
+            new Object[] { new ItemStack(Blocks.soul_sand, 1, 32767), OrePrefixes.dust.get(Materials.Gold),
+                OrePrefixes.dust.get(Materials.Ash) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.DarkSteel, 2L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.ElectricalSteel), OrePrefixes.dust.get(Materials.Coal),
+                OrePrefixes.dust.get(Materials.Obsidian) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Manyullyn, 3L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Ardite), OrePrefixes.dust.get(Materials.Ardite),
+                OrePrefixes.dust.get(Materials.Ardite), OrePrefixes.dust.get(Materials.Ardite),
+                OrePrefixes.dust.get(Materials.Cobalt), OrePrefixes.dust.get(Materials.Cobalt),
+                OrePrefixes.dust.get(Materials.Cobalt), OrePrefixes.dust.get(Materials.Cobalt) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Haderoth, 1L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Rubracium), OrePrefixes.dust.get(Materials.Mithril) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Celenegil, 1L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Platinum), OrePrefixes.dust.get(Materials.Orichalcum) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.IronWood, 2L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.LiveRoot),
+                OrePrefixes.dustTiny.get(Materials.Gold) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Hepatizon, 3L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Copper), OrePrefixes.dust.get(Materials.Copper),
+                OrePrefixes.dust.get(Materials.Copper), OrePrefixes.dustTiny.get(Materials.Gold),
+                OrePrefixes.dustTiny.get(Materials.Gold), OrePrefixes.dustTiny.get(Materials.Gold),
+                OrePrefixes.dustTiny.get(Materials.Silver), OrePrefixes.dustTiny.get(Materials.Silver),
+                OrePrefixes.dustTiny.get(Materials.Silver) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Angmallen, 2L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Gold) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Inolashite, 1L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Alduorite), OrePrefixes.dust.get(Materials.Ceruclase) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Items.gunpowder, 6),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Coal), OrePrefixes.dust.get(Materials.Coal),
+                OrePrefixes.dust.get(Materials.Coal), OrePrefixes.dust.get(Materials.Sulfur),
+                OrePrefixes.dust.get(Materials.Saltpeter), OrePrefixes.dust.get(Materials.Saltpeter) });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Items.gunpowder, 6),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Charcoal), OrePrefixes.dust.get(Materials.Charcoal),
+                OrePrefixes.dust.get(Materials.Charcoal), OrePrefixes.dust.get(Materials.Sulfur),
+                OrePrefixes.dust.get(Materials.Saltpeter), OrePrefixes.dust.get(Materials.Saltpeter) });
+        GTModHandler.addShapelessCraftingRecipe(
+            new ItemStack(Items.gunpowder, 6),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Carbon), OrePrefixes.dust.get(Materials.Carbon),
+                OrePrefixes.dust.get(Materials.Carbon), OrePrefixes.dust.get(Materials.Sulfur),
+                OrePrefixes.dust.get(Materials.Saltpeter), OrePrefixes.dust.get(Materials.Saltpeter) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.IndiumGalliumPhosphide, 3L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Indium), OrePrefixes.dust.get(Materials.Gallium),
+                OrePrefixes.dust.get(Materials.Phosphorus) });
+
+        GTModHandler.addShapelessCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 5L),
+            bits_no_remove_buffered,
+            new Object[] { OrePrefixes.dust.get(Materials.Potassium), OrePrefixes.cell.get(Materials.Nitrogen),
+                OrePrefixes.cell.get(Materials.Oxygen), OrePrefixes.cell.get(Materials.Oxygen),
+                OrePrefixes.cell.get(Materials.Oxygen) });
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("carbonFiber", 1L));
+
+        ItemStack[] tChestAndTank = new ItemStack[] { ItemList.Super_Chest_EV.get(1), ItemList.Super_Chest_IV.get(1),
+            ItemList.Super_Chest_HV.get(1), ItemList.Super_Chest_MV.get(1), ItemList.Super_Chest_LV.get(1),
+            ItemList.Quantum_Chest_EV.get(1), ItemList.Quantum_Chest_IV.get(1), ItemList.Quantum_Chest_HV.get(1),
+            ItemList.Quantum_Chest_MV.get(1), ItemList.Quantum_Chest_LV.get(1), ItemList.Super_Tank_EV.get(1),
+            ItemList.Super_Tank_IV.get(1), ItemList.Super_Tank_HV.get(1), ItemList.Super_Tank_MV.get(1),
+            ItemList.Super_Tank_LV.get(1), ItemList.Quantum_Tank_EV.get(1), ItemList.Quantum_Tank_IV.get(1),
+            ItemList.Quantum_Tank_HV.get(1), ItemList.Quantum_Tank_MV.get(1), ItemList.Quantum_Tank_LV.get(1) };
+        for (ItemStack tItem : tChestAndTank) {
+            GTModHandler.addShapelessCraftingRecipe(tItem, new Object[] { tItem });
+        }
+
+        List iToRemoveAndHide = Arrays
+            .stream(
+                new String[] { "copperCableItem", "insulatedCopperCableItem", "goldCableItem", "insulatedGoldCableItem",
+                    "insulatedIronCableItem", "glassFiberCableItem", "tinCableItem", "ironCableItem",
+                    "insulatedTinCableItem", "detectorCableItem", "splitterCableItem", "electrolyzer", "cutter" })
+            .map(x -> GTModHandler.getIC2Item(x, 1L))
+            .collect(Collectors.toList());
+
+        if (NotEnoughItems.isModLoaded()) {
+            iToRemoveAndHide.forEach(item -> {
+                codechicken.nei.api.API.hideItem(item);
+                GTModHandler.removeRecipeByOutputDelayed(item);
+            });
+        }
+
+        Arrays
+            .stream(
+                new String[] { "batBox", "mfeUnit", "lvTransformer", "mvTransformer", "hvTransformer", "evTransformer",
+                    "cesuUnit", "luminator", "teleporter", "energyOMat", "advBattery", "boatElectric", "cropnalyzer",
+                    "coil", "powerunit", "powerunitsmall", "remote", "odScanner", "ovScanner", "solarHelmet",
+                    "staticBoots", "ecMeter", "obscurator", "overclockerUpgrade", "transformerUpgrade",
+                    "energyStorageUpgrade", "ejectorUpgrade", "suBattery", "frequencyTransmitter", "pullingUpgrade" })
+            .map(x -> GTModHandler.getIC2Item(x, 1L))
+            .forEach(GTModHandler::removeRecipeByOutputDelayed);
+
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("batBox", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "PCP", "BBB", "PPP", 'C', OrePrefixes.cableGt01.get(Materials.Tin), 'P',
+                OrePrefixes.plank.get(Materials.Wood), 'B', OrePrefixes.battery.get(Materials.LV) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("mfeUnit", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "CEC", "EME", "CEC", 'C', OrePrefixes.cableGt01.get(Materials.Gold), 'E',
+                OrePrefixes.battery.get(Materials.IV), 'M', GTModHandler.getIC2Item("machine", 1L) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("lvTransformer", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "PCP", "POP", "PCP", 'C', OrePrefixes.cableGt01.get(Materials.Tin), 'O',
+                GTModHandler.getIC2Item("coil", 1L), 'P', OrePrefixes.plank.get(Materials.Wood) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("mvTransformer", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "CMC", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'M',
+                GTModHandler.getIC2Item("machine", 1L) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("hvTransformer", 1L),
+            bits_no_remove_buffered,
+            new Object[] { " C ", "IMB", " C ", 'C', OrePrefixes.cableGt01.get(Materials.Gold), 'M',
+                GTModHandler.getIC2Item("mvTransformer", 1L), 'I', OrePrefixes.circuit.get(Materials.LV), 'B',
+                OrePrefixes.battery.get(Materials.HV) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("evTransformer", 1L),
+            bits_no_remove_buffered,
+            new Object[] { " C ", "IMB", " C ", 'C', OrePrefixes.cableGt01.get(Materials.Aluminium), 'M',
+                GTModHandler.getIC2Item("hvTransformer", 1L), 'I', OrePrefixes.circuit.get(Materials.HV), 'B',
+                OrePrefixes.battery.get(Materials.LuV) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("cesuUnit", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "PCP", "BBB", "PPP", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'P',
+                OrePrefixes.plate.get(Materials.Bronze), 'B', OrePrefixes.battery.get(Materials.HV) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("teleporter", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "GFG", "CMC", "GDG", 'C', OrePrefixes.cableGt01.get(Materials.Platinum), 'G',
+                OrePrefixes.circuit.get(Materials.HV), 'D', OrePrefixes.gem.get(Materials.Diamond), 'M',
+                GTModHandler.getIC2Item("machine", 1L), 'F', GTModHandler.getIC2Item("frequencyTransmitter", 1L) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("energyOMat", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "RBR", "CMC", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'R',
+                OrePrefixes.dust.get(Materials.Redstone), 'B', OrePrefixes.battery.get(Materials.LV), 'M',
+                GTModHandler.getIC2Item("machine", 1L) });
+
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("boatElectric", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "CCC", "XWX", aTextIron2, 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'X',
+                OrePrefixes.plate.get(Materials.Iron), 'W', GTModHandler.getIC2Item("waterMill", 1L) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("cropnalyzer", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "CC ", "RGR", "RIR", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'R',
+                OrePrefixes.dust.get(Materials.Redstone), 'G', OrePrefixes.block.get(Materials.Glass), 'I',
+                OrePrefixes.circuit.get(Materials.LV) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("coil", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "CCC", "CXC", "CCC", 'C', OrePrefixes.wireGt01.get(Materials.Copper), 'X',
+                OrePrefixes.ingot.get(Materials.AnyIron) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("powerunit", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "BCA", "BIM", "BCA", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'B',
+                OrePrefixes.battery.get(Materials.LV), 'A', GTModHandler.getIC2Item("casingiron", 1L), 'I',
+                OrePrefixes.circuit.get(Materials.LV), 'M', GTModHandler.getIC2Item("elemotor", 1L) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("powerunitsmall", 1L),
+            bits_no_remove_buffered,
+            new Object[] { " CA", "BIM", " CA", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'B',
+                OrePrefixes.battery.get(Materials.LV), 'A', GTModHandler.getIC2Item("casingiron", 1L), 'I',
+                OrePrefixes.circuit.get(Materials.LV), 'M', GTModHandler.getIC2Item("elemotor", 1L) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("remote", 1L),
+            bits_no_remove_buffered,
+            new Object[] { " C ", "TLT", " F ", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'L',
+                OrePrefixes.dust.get(Materials.Lapis), 'T', GTModHandler.getIC2Item("casingtin", 1L), 'F',
+                GTModHandler.getIC2Item("frequencyTransmitter", 1L) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("odScanner", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "PGP", "CBC", "WWW", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'G',
+                OrePrefixes.dust.get(Materials.Glowstone), 'B', OrePrefixes.battery.get(Materials.HV), 'C',
+                OrePrefixes.circuit.get(Materials.HV), 'P', GTModHandler.getIC2Item("casinggold", 1L) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("ovScanner", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "PDP", "GCG", "WSW", 'W', OrePrefixes.cableGt01.get(Materials.Gold), 'G',
+                OrePrefixes.dust.get(Materials.Glowstone), 'D', OrePrefixes.battery.get(Materials.IV), 'C',
+                OrePrefixes.circuit.get(Materials.HV), 'P', GTModHandler.getIC2Item("casinggold", 1L), 'S',
+                GTModHandler.getIC2Item("odScanner", 1L) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("staticBoots", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "I I", "IWI", "CCC", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'I',
+                OrePrefixes.ingot.get(Materials.Iron), 'W', new ItemStack(Blocks.wool) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("ecMeter", 1L),
+            bits_no_remove_buffered,
+            new Object[] { " G ", "CIC", "C C", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'G',
+                OrePrefixes.dust.get(Materials.Glowstone), 'I', OrePrefixes.circuit.get(Materials.LV) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("obscurator", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "RER", "CAC", "RRR", 'C', OrePrefixes.cableGt01.get(Materials.Gold), 'R',
+                OrePrefixes.dust.get(Materials.Redstone), 'E', OrePrefixes.battery.get(Materials.HV), 'A',
+                OrePrefixes.circuit.get(Materials.HV) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("overclockerUpgrade", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "CCC", "WEW", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'C',
+                GTModHandler.getIC2Item("reactorCoolantSimple", 1L, 1), 'E', OrePrefixes.circuit.get(Materials.LV) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("transformerUpgrade", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "GGG", "WTW", "GEG", 'W', OrePrefixes.cableGt01.get(Materials.Gold), 'T',
+                GTModHandler.getIC2Item("mvTransformer", 1L), 'E', OrePrefixes.circuit.get(Materials.LV), 'G',
+                OrePrefixes.block.get(Materials.Glass) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("energyStorageUpgrade", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "PPP", "WBW", "PEP", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'E',
+                OrePrefixes.circuit.get(Materials.LV), 'P', OrePrefixes.plank.get(Materials.Wood), 'B',
+                OrePrefixes.battery.get(Materials.LV) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("ejectorUpgrade", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "PHP", "WEW", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'E',
+                OrePrefixes.circuit.get(Materials.LV), 'P', new ItemStack(Blocks.piston), 'H',
+                new ItemStack(Blocks.hopper) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("suBattery", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "W", "C", "R", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'C',
+                OrePrefixes.dust.get(Materials.HydratedCoal), 'R', OrePrefixes.dust.get(Materials.Redstone) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("pullingUpgrade", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "PHP", "WEW", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'P',
+                new ItemStack(Blocks.sticky_piston), 'R', new ItemStack(Blocks.hopper), 'E',
+                OrePrefixes.circuit.get(Materials.LV) });
+
+        if (NotEnoughItems.isModLoaded()) {
+            codechicken.nei.api.API.hideItem(GTModHandler.getIC2Item("reactorUraniumSimple", 1L, 1));
+            codechicken.nei.api.API.hideItem(GTModHandler.getIC2Item("reactorUraniumDual", 1L, 1));
+            codechicken.nei.api.API.hideItem(GTModHandler.getIC2Item("reactorUraniumQuad", 1L, 1));
+            codechicken.nei.api.API.hideItem(GTModHandler.getIC2Item("reactorMOXSimple", 1L, 1));
+            codechicken.nei.api.API.hideItem(GTModHandler.getIC2Item("reactorMOXDual", 1L, 1));
+            codechicken.nei.api.API.hideItem(GTModHandler.getIC2Item("reactorMOXQuad", 1L, 1));
+        }
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("UranFuel", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "UUU", "NNN", "UUU", 'U', OrePrefixes.ingot.get(Materials.Uranium), 'N',
+                OrePrefixes.nugget.get(Materials.Uranium235) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("MOXFuel", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "UUU", "NNN", "UUU", 'U', OrePrefixes.ingot.get(Materials.Uranium), 'N',
+                OrePrefixes.ingot.get(Materials.Plutonium) });
+
+        GTModHandler.removeRecipeByOutputDelayed(Ic2Items.miningLaser.copy());
+        GTModHandler.addCraftingRecipe(
+            Ic2Items.miningLaser.copy(),
+            GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { "PPP", "GEC", "SBd", 'P', OrePrefixes.plate.get(Materials.Titanium), 'G',
+                OrePrefixes.gemExquisite.get(Materials.Diamond), 'E', ItemList.Emitter_HV, 'C',
+                OrePrefixes.circuit.get(Materials.IV), 'S', OrePrefixes.screw.get(Materials.Titanium), 'B',
+                new ItemStack(
+                    Ic2Items.chargingEnergyCrystal.copy()
+                        .getItem(),
+                    1,
+                    GTValues.W) });
+        GTModHandler.addCraftingRecipe(
+            Ic2Items.miningLaser.copy(),
+            GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { "PPP", "GEC", "SBd", 'P', OrePrefixes.plate.get(Materials.Titanium), 'G',
+                OrePrefixes.gemExquisite.get(Materials.Ruby), 'E', ItemList.Emitter_HV, 'C',
+                OrePrefixes.circuit.get(Materials.IV), 'S', OrePrefixes.screw.get(Materials.Titanium), 'B',
+                new ItemStack(
+                    Ic2Items.chargingEnergyCrystal.copy()
+                        .getItem(),
+                    1,
+                    GTValues.W) });
+        GTModHandler.addCraftingRecipe(
+            Ic2Items.miningLaser.copy(),
+            GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { "PPP", "GEC", "SBd", 'P', OrePrefixes.plate.get(Materials.Titanium), 'G',
+                OrePrefixes.gemExquisite.get(Materials.Jasper), 'E', ItemList.Emitter_HV, 'C',
+                OrePrefixes.circuit.get(Materials.IV), 'S', OrePrefixes.screw.get(Materials.Titanium), 'B',
+                new ItemStack(
+                    Ic2Items.chargingEnergyCrystal.copy()
+                        .getItem(),
+                    1,
+                    GTValues.W) });
+        GTModHandler.addCraftingRecipe(
+            Ic2Items.miningLaser.copy(),
+            GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { "PPP", "GEC", "SBd", 'P', OrePrefixes.plate.get(Materials.Titanium), 'G',
+                OrePrefixes.gemExquisite.get(Materials.GarnetRed), 'E', ItemList.Emitter_HV, 'C',
+                OrePrefixes.circuit.get(Materials.IV), 'S', OrePrefixes.screw.get(Materials.Titanium), 'B',
+                new ItemStack(
+                    Ic2Items.chargingEnergyCrystal.copy()
+                        .getItem(),
+                    1,
+                    GTValues.W) });
+
+        GTModHandler.removeRecipeDelayed(GTModHandler.getIC2Item("miningPipe", 8));
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("miningPipe", 1),
+            GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { "hPf", 'P', OrePrefixes.pipeSmall.get(Materials.Steel) });
+
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("luminator", 16L),
+            bits_no_remove_buffered,
+            new Object[] { "RTR", "GHG", "GGG", 'H', OrePrefixes.cell.get(Materials.Helium), 'T',
+                OrePrefixes.ingot.get(Materials.Tin), 'R', OrePrefixes.ingot.get(Materials.AnyIron), 'G',
+                new ItemStack(Blocks.glass, 1) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("luminator", 16L),
+            bits_no_remove_buffered,
+            new Object[] { "RTR", "GHG", "GGG", 'H', OrePrefixes.cell.get(Materials.Mercury), 'T',
+                OrePrefixes.ingot.get(Materials.Tin), 'R', OrePrefixes.ingot.get(Materials.AnyIron), 'G',
+                new ItemStack(Blocks.glass, 1) });
+
+        GTModHandler.removeRecipeDelayed(
+            tStack = GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L),
+            tStack,
+            tStack,
+            tStack,
+            new ItemStack(Items.coal, 1, 0),
+            tStack,
+            tStack,
+            tStack,
+            tStack);
+        GTModHandler.removeRecipeDelayed(
+            tStack = GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L),
+            tStack,
+            tStack,
+            tStack,
+            new ItemStack(Items.coal, 1, 1),
+            tStack,
+            tStack,
+            tStack,
+            tStack);
+        GTModHandler.removeRecipeDelayed(
+            null,
+            tStack = new ItemStack(Items.coal, 1),
+            null,
+            tStack,
+            GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L),
+            tStack,
+            null,
+            tStack,
+            null);
+
+        GTModHandler.removeFurnaceSmelting(new ItemStack(Blocks.hopper));
+
+        GTLog.out.println("GTMod: Applying harder Recipes for several Blocks."); // TODO: Not Buffered
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("reactorReflectorThick", 1L, 1));
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("reactorReflectorThick", 1L, 1),
+            bits_no_remove_buffered,
+            new Object[] { " N ", "NBN", " N ", 'B', OrePrefixes.plateDouble.get(Materials.Beryllium), 'N',
+                GTModHandler.getIC2Item("reactorReflector", 1L, 1) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("reactorReflectorThick", 1L, 1),
+            bits_no_remove_buffered,
+            new Object[] { " B ", "NCN", " B ", 'B', OrePrefixes.plate.get(Materials.Beryllium), 'N',
+                GTModHandler.getIC2Item("reactorReflector", 1L, 1), 'C',
+                OrePrefixes.plate.get(Materials.TungstenCarbide) });
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("reactorReflector", 1L, 1));
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("reactorReflector", 1L, 1),
+            bits_no_remove_buffered,
+            new Object[] { "TGT", "GSG", "TGT", 'T', OrePrefixes.plate.get(Materials.Tin), 'G',
+                OrePrefixes.dust.get(Materials.Graphite), 'S', OrePrefixes.plateDouble.get(Materials.Steel) });
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("reactorReflector", 1L, 1),
+            bits_no_remove_buffered,
+            new Object[] { "TTT", "GSG", "TTT", 'T', OrePrefixes.plate.get(Materials.TinAlloy), 'G',
+                OrePrefixes.dust.get(Materials.Graphite), 'S', OrePrefixes.plate.get(Materials.Beryllium) });
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("crophavester", 1L));
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("crophavester", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "ACA", "PMS", "WOW", 'M', ItemList.Hull_MV, 'C', OrePrefixes.circuit.get(Materials.MV), 'A',
+                ItemList.Robot_Arm_LV, 'P', ItemList.Electric_Piston_LV, 'S', ItemList.Sensor_LV, 'W',
+                OrePrefixes.toolHeadSense.get(Materials.Aluminium), 'O', ItemList.Conveyor_Module_LV });
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("RTGenerator", 1L));
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("RTGenerator", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "III", "IMI", "ICI", 'I', OrePrefixes.itemCasing.get(Materials.Steel), 'C',
+                OrePrefixes.circuit.get(Materials.LuV), 'M', ItemList.Hull_IV });
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("RTHeatGenerator", 1L));
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("RTHeatGenerator", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "III", "IMB", "ICI", 'I', OrePrefixes.itemCasing.get(Materials.Steel), 'C',
+                OrePrefixes.circuit.get(Materials.LuV), 'M', ItemList.Hull_IV, 'B',
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Copper, 1) });
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("carbonrotor", 1L));
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("carbonrotor", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "dBS", "BTB", "SBw", 'B', GTModHandler.getIC2Item("carbonrotorblade", 1), 'S',
+                OrePrefixes.screw.get(Materials.Iridium), 'T', GTModHandler.getIC2Item("steelshaft", 1) });
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("steelrotor", 1L));
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("steelrotor", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "dBS", "BTB", "SBw", 'B', GTModHandler.getIC2Item("steelrotorblade", 1), 'S',
+                OrePrefixes.screw.get(Materials.StainlessSteel), 'T', GTModHandler.getIC2Item("ironshaft", 1) });
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("ironrotor", 1L));
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("ironrotor", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "dBS", "BTB", "SBw", 'B', GTModHandler.getIC2Item("ironrotorblade", 1), 'S',
+                OrePrefixes.screw.get(Materials.WroughtIron), 'T', GTModHandler.getIC2Item("ironshaft", 1) });
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("woodrotor", 1L));
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("woodrotor", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "dBS", "BTB", "SBw", 'B', GTModHandler.getIC2Item("woodrotorblade", 1), 'S',
+                OrePrefixes.screw.get(Materials.WroughtIron), 'T', OrePrefixes.stickLong.get(Materials.WroughtIron) });
+
+        if (GTOreDictUnificator.get(OrePrefixes.gear, Materials.Diamond, 1L) != null) {
+            tStack = GTModHandler.getRecipeOutput(
+                GTOreDictUnificator.get(OrePrefixes.gear, Materials.Iron, 1L),
+                new ItemStack(Items.redstone, 1),
+                GTOreDictUnificator.get(OrePrefixes.gear, Materials.Iron, 1L),
+                GTOreDictUnificator.get(OrePrefixes.gear, Materials.Gold, 1L),
+                GTOreDictUnificator.get(OrePrefixes.gear, Materials.Iron, 1L),
+                GTOreDictUnificator.get(OrePrefixes.gear, Materials.Gold, 1L),
+                GTOreDictUnificator.get(OrePrefixes.gear, Materials.Diamond, 1L),
+                new ItemStack(Items.diamond_pickaxe, 1),
+                GTOreDictUnificator.get(OrePrefixes.gear, Materials.Diamond, 1L));
+            GTModHandler.removeRecipeByOutputDelayed(tStack);
+            GTModHandler.addCraftingRecipe(
+                tStack,
+                bits_no_remove_buffered,
+                new Object[] { "ICI", "GIG", "DPD", 'C', OrePrefixes.circuit.get(Materials.HV), 'D',
+                    OrePrefixes.gear.get(Materials.Diamond), 'G', OrePrefixes.gear.get(Materials.Gold), 'I',
+                    OrePrefixes.gear.get(Materials.Steel), 'P', GTModHandler.getIC2Item("diamondDrill", 1L, 32767) });
+        }
+
+        GTModHandler.removeRecipeByOutputDelayed(new ItemStack(Items.paper));
+        GTModHandler.removeRecipeByOutputDelayed(new ItemStack(Items.sugar));
+        GTModHandler.addCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Paper, 2),
+            GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { "SSS", " m ", 'S', new ItemStack(Items.reeds) });
+        GTModHandler.addCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1),
+            GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { "Sm ", 'S', new ItemStack(Items.reeds) });
+        GTModHandler.addCraftingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.paper, Materials.Empty, 2),
+            GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { " C ", "SSS", " C ", 'S', GTOreDictUnificator.get(OrePrefixes.dust, Materials.Paper, 1), 'C',
+                new ItemStack(Blocks.stone_slab) });
+
+        GTLog.out.println("GTMod: Applying Recipes for Tools");
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("nanoSaber", 1L));
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("nanoSaber", 1L),
+            bits_no_remove_buffered,
+            new Object[] { "PI ", "PI ", "CLC", 'L', OrePrefixes.battery.get(Materials.EV), 'I',
+                OrePrefixes.plateAlloy.get("Iridium"), 'P', OrePrefixes.plate.get(Materials.Platinum), 'C',
+                OrePrefixes.circuit.get(Materials.IV) });
+
+        GTModHandler.removeRecipeByOutputDelayed(new ItemStack(Items.flint_and_steel, 1));
+        GTModHandler.addCraftingRecipe(
+            new ItemStack(Items.flint_and_steel, 1),
+            bits_no_remove_buffered,
+            new Object[] { "S ", " F", 'F', new ItemStack(Items.flint, 1), 'S', "nuggetSteel" });
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("diamondDrill", 1L));
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("miningDrill", 1L));
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("chainsaw", 1L));
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("electricHoe", 1L));
+
+        GTModHandler.removeRecipeByOutputDelayed(GTModHandler.getIC2Item("electricTreetap", 1L));
+
+        if (GraviSuite.isModLoaded()) {
+            GTModHandler.removeRecipeByOutputDelayed(
+                GTModHandler.getModItem(GraviSuite.ID, "advNanoChestPlate", 1, GTValues.W));
+            GTModHandler.addCraftingRecipe(
+                GTModHandler.getModItem(GraviSuite.ID, "advNanoChestPlate", 1, GTValues.W),
+                bits_no_remove_buffered,
+                new Object[] { "CJC", "TNT", "WPW", 'C', OrePrefixes.plateAlloy.get(Materials.Advanced), 'T',
+                    OrePrefixes.plate.get(Materials.TungstenSteel), 'J',
+                    GTModHandler.getModItem(GraviSuite.ID, "advJetpack", 1, GTValues.W), 'N',
+                    GTModHandler.getModItem(IndustrialCraft2.ID, "itemArmorNanoChestplate", 1, GTValues.W), 'W',
+                    OrePrefixes.wireGt12.get(Materials.Platinum), 'P', OrePrefixes.circuit.get(Materials.IV) });
+
+            GTModHandler
+                .removeRecipeByOutputDelayed(GTModHandler.getModItem(GraviSuite.ID, "advLappack", 1, GTValues.W));
+            GTModHandler.addCraftingRecipe(
+                GTModHandler.getModItem(GraviSuite.ID, "advLappack", 1, GTValues.W),
+                bits_no_remove_buffered,
+                new Object[] { "CEC", "EJE", "WPW", 'C', OrePrefixes.plateAlloy.get(Materials.Carbon), 'J',
+                    GTModHandler.getModItem(IndustrialCraft2.ID, "itemArmorEnergypack", 1L, GTValues.W), 'E',
+                    GTModHandler.getModItem(IndustrialCraft2.ID, "itemBatCrystal", 1L, GTValues.W), 'W',
+                    OrePrefixes.wireGt04.get(Materials.Platinum), 'P', OrePrefixes.circuit.get(Materials.EV) });
+
+            GTModHandler
+                .removeRecipeByOutputDelayed(GTModHandler.getModItem(GraviSuite.ID, "advJetpack", 1, GTValues.W));
+            GTModHandler.addCraftingRecipe(
+                GTModHandler.getModItem(GraviSuite.ID, "advJetpack", 1, GTValues.W),
+                bits_no_remove_buffered,
+                new Object[] { "CJC", "EXE", "YZY", 'C', OrePrefixes.plateAlloy.get(Materials.Carbon), 'J',
+                    GTModHandler.getModItem(IndustrialCraft2.ID, "itemArmorJetpackElectric", 1, GTValues.W), 'E',
+                    OrePrefixes.plate.get(Materials.Titanium), 'X',
+                    GTModHandler.getModItem(IndustrialCraft2.ID, "itemArmorAlloyChestplate", 1L), 'Z',
+                    OrePrefixes.circuit.get(Materials.EV), 'Y', OrePrefixes.wireGt02.get(Materials.Platinum) });
+        }
+
+        GTModHandler.addShapelessCraftingRecipe(
+            Materials.Fireclay.getDust(2),
+            new Object[] { Materials.Brick.getDust(1), Materials.Clay.getDust(1) });
+
+        GTModHandler.addCraftingRecipe(
+            ItemList.Casing_Advanced_Rhodium_Palladium.get(1L),
+            bits,
+            new Object[] { "PhP", "PFP", aTextPlateWrench, 'P',
+                new ItemStack(WerkstoffLoader.items.get(OrePrefixes.plate), 1, 88), 'F',
+                OrePrefixes.frameGt.get(Materials.Chrome) });
+
+        if (Forestry.isModLoaded()) {
+            ItemStack[] coverIDs = { ItemList.Plank_Larch.get(2L), ItemList.Plank_Teak.get(2L),
+                ItemList.Plank_Acacia_Green.get(2L), ItemList.Plank_Lime.get(2L), ItemList.Plank_Chestnut.get(2L),
+                ItemList.Plank_Wenge.get(2L), ItemList.Plank_Baobab.get(2L), ItemList.Plank_Sequoia.get(2L),
+                ItemList.Plank_Kapok.get(2L), ItemList.Plank_Ebony.get(2L), ItemList.Plank_Mahagony.get(2L),
+                ItemList.Plank_Balsa.get(2L), ItemList.Plank_Willow.get(2L), ItemList.Plank_Walnut.get(2L),
+                ItemList.Plank_Greenheart.get(2L), ItemList.Plank_Cherry.get(2L), ItemList.Plank_Mahoe.get(2L),
+                ItemList.Plank_Poplar.get(2L), ItemList.Plank_Palm.get(2L), ItemList.Plank_Papaya.get(2L),
+                ItemList.Plank_Pine.get(2L), ItemList.Plank_Plum.get(2L), ItemList.Plank_Maple.get(2L),
+                ItemList.Plank_Citrus.get(2L) };
+            for (int i = 0; i < coverIDs.length; i++) {
+                ItemStack slabWood = getModItem(Forestry.ID, "slabs", 1, i);
+                ItemStack slabWoodFireproof = getModItem(Forestry.ID, "slabsFireproof", 1, i);
+
+                GTModHandler.addCraftingRecipe(
+                    coverIDs[i],
+                    GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE,
+                    new Object[] { "s ", " P", 'P', slabWood });
+
+                GTModHandler.addCraftingRecipe(
+                    coverIDs[i],
+                    GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE,
+                    new Object[] { "s ", " P", 'P', slabWoodFireproof });
+            }
+        }
+        GTModHandler.addCraftingRecipe(
+            GTModHandler.getIC2Item("electronicCircuit", 1L),
+            GTModHandler.RecipeBits.BUFFERED,
+            new Object[] { "RIR", "VBV", "CCC", 'R', ItemList.Circuit_Parts_Resistor.get(1), 'C',
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.RedAlloy, 1), 'V',
+                ItemList.Circuit_Parts_Vacuum_Tube.get(1), 'B', ItemList.Circuit_Board_Coated_Basic.get(1), 'I',
+                ItemList.IC2_Item_Casing_Steel.get(1) });
+        GTModHandler.addShapelessCraftingRecipe(
+            GTModHandler.getIC2Item("electronicCircuit", 1L),
+            new Object[] { ItemList.Circuit_Integrated.getWildcard(1L) });
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/CropLoader.java b/src/main/java/gregtech/loaders/postload/CropLoader.java
new file mode 100644
index 0000000000..752c6923b9
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/CropLoader.java
@@ -0,0 +1,1055 @@
+package gregtech.loaders.postload;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GTBaseCrop;
+import gregtech.api.util.GTLog;
+import gregtech.api.util.GTOreDictUnificator;
+
+public class CropLoader implements Runnable {
+
+    @Override
+    public void run() {
+        GTLog.out.println("GTMod: Register Crops to IC2.");
+        try {
+            /*
+             * Tags: Vines = Tendrilly Edible = Food
+             */
+            ItemStack[] tI = { ItemList.Crop_Drop_Indigo.get(4L), ItemList.Crop_Drop_MilkWart.get(4L),
+                new ItemStack(Blocks.brown_mushroom, 4), new ItemStack(Blocks.red_mushroom, 4) };
+            new GTBaseCrop(
+                124,
+                "Indigo",
+                "Eloraam",
+                tI[0],
+                2,
+                4,
+                0,
+                1,
+                4,
+                1,
+                1,
+                0,
+                4,
+                0,
+                new String[] { "Flower", "Blue", "Ingredient" },
+                ItemList.Crop_Drop_Indigo.get(1L),
+                null);
+            new GTBaseCrop(
+                125,
+                "Flax",
+                "Eloraam",
+                null,
+                2,
+                4,
+                0,
+                1,
+                4,
+                1,
+                1,
+                2,
+                0,
+                1,
+                new String[] { "Silk", "Tendrilly", "Addictive" },
+                new ItemStack(Items.string, 1),
+                null);
+            new GTBaseCrop(
+                126,
+                "Oilberries",
+                "Spacetoad",
+                null,
+                9,
+                4,
+                0,
+                1,
+                4,
+                6,
+                1,
+                2,
+                1,
+                12,
+                new String[] { "Fire", "Dark", "Reed", "Rotten", "Coal", "Oil" },
+                ItemList.Crop_Drop_OilBerry.get(1L),
+                null);
+            new GTBaseCrop(
+                127,
+                "Bobsyeruncleranks",
+                "GenerikB",
+                null,
+                11,
+                4,
+                0,
+                1,
+                4,
+                4,
+                0,
+                8,
+                2,
+                9,
+                new String[] { "Shiny", "Tendrilly", "Emerald", "Berylium", "Crystal" },
+                Materials.Emerald,
+                ItemList.Crop_Drop_BobsYerUncleRanks.get(1L),
+                new ItemStack[] { new ItemStack(Items.emerald, 1) });
+            new GTBaseCrop(
+                128,
+                "Diareed",
+                "Direwolf20",
+                null,
+                12,
+                4,
+                0,
+                1,
+                4,
+                5,
+                0,
+                10,
+                2,
+                10,
+                new String[] { "Fire", "Shiny", "Reed", "Coal", "Diamond", "Crystal" },
+                Materials.Diamond,
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1L),
+                new ItemStack[] { new ItemStack(Items.diamond, 1) });
+            new GTBaseCrop(
+                129,
+                "Withereed",
+                "CovertJaguar",
+                null,
+                8,
+                4,
+                0,
+                1,
+                4,
+                2,
+                0,
+                4,
+                1,
+                3,
+                new String[] { "Fire", "Undead", "Reed", "Coal", "Rotten", "Wither" },
+                Materials.Coal,
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L),
+                new ItemStack[] { new ItemStack(Items.coal, 1), new ItemStack(Items.coal, 1) });
+            new GTBaseCrop(
+                130,
+                "Blazereed",
+                "Mr. Brain",
+                null,
+                6,
+                4,
+                0,
+                1,
+                4,
+                0,
+                4,
+                1,
+                0,
+                0,
+                new String[] { "Fire", "Blaze", "Reed", "Sulfur" },
+                new ItemStack(Items.blaze_powder, 1),
+                new ItemStack[] { new ItemStack(Items.blaze_rod, 1) });
+            new GTBaseCrop(
+                131,
+                "Eggplant",
+                "Link",
+                null,
+                6,
+                3,
+                900,
+                2,
+                3,
+                0,
+                4,
+                1,
+                0,
+                0,
+                new String[] { "Chicken", "Egg", "Food", "Feather", "Flower", "Addictive" },
+                new ItemStack(Items.egg, 1),
+                new ItemStack[] { new ItemStack(Items.chicken, 1), new ItemStack(Items.feather, 1),
+                    new ItemStack(Items.feather, 1), new ItemStack(Items.feather, 1) });
+            new GTBaseCrop(
+                132,
+                "Corium",
+                "Gregorius Techneticies",
+                null,
+                6,
+                4,
+                0,
+                1,
+                4,
+                0,
+                2,
+                3,
+                1,
+                0,
+                new String[] { "Cow", "Silk", "Tendrilly" },
+                new ItemStack(Items.leather, 1),
+                null);
+            new GTBaseCrop(
+                133,
+                "Corpseplant",
+                "Mr. Kenny",
+                null,
+                5,
+                4,
+                0,
+                1,
+                4,
+                0,
+                2,
+                1,
+                0,
+                3,
+                new String[] { "Toxic", "Undead", "Tendrilly", "Food", "Rotten" },
+                new ItemStack(Items.rotten_flesh, 1),
+                new ItemStack[] { ItemList.Dye_Bonemeal.get(1L), ItemList.Dye_Bonemeal.get(1L),
+                    new ItemStack(Items.bone, 1) });
+            new GTBaseCrop(
+                134,
+                "Creeperweed",
+                "General Spaz",
+                null,
+                7,
+                4,
+                0,
+                1,
+                4,
+                3,
+                0,
+                5,
+                1,
+                3,
+                new String[] { "Creeper", "Tendrilly", "Explosive", "Fire", "Sulfur", "Saltpeter", "Coal" },
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1L),
+                null);
+            new GTBaseCrop(
+                135,
+                "Enderbloom",
+                "RichardG",
+                null,
+                10,
+                4,
+                0,
+                1,
+                4,
+                5,
+                0,
+                2,
+                1,
+                6,
+                new String[] { "Ender", "Flower", "Shiny" },
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.EnderPearl, 1L),
+                new ItemStack[] { new ItemStack(Items.ender_pearl, 1), new ItemStack(Items.ender_pearl, 1),
+                    new ItemStack(Items.ender_eye, 1) });
+            new GTBaseCrop(
+                136,
+                "Meatrose",
+                "VintageBeef",
+                null,
+                7,
+                4,
+                1500,
+                1,
+                4,
+                0,
+                4,
+                1,
+                3,
+                0,
+                new String[] { "Food", "Flower", "Cow", "Fish", "Chicken", "Pig" },
+                new ItemStack(Items.dye, 1, 9),
+                new ItemStack[] { new ItemStack(Items.beef, 1), new ItemStack(Items.porkchop, 1),
+                    new ItemStack(Items.chicken, 1), new ItemStack(Items.fish, 1) });
+            new GTBaseCrop(
+                137,
+                "Milkwart",
+                "Mr. Brain",
+                tI[1],
+                6,
+                3,
+                900,
+                1,
+                3,
+                0,
+                3,
+                0,
+                1,
+                0,
+                new String[] { "Food", "Milk", "Cow" },
+                ItemList.Crop_Drop_MilkWart.get(1L),
+                null);
+            new GTBaseCrop(
+                138,
+                "Slimeplant",
+                "Neowulf",
+                null,
+                6,
+                4,
+                0,
+                3,
+                4,
+                3,
+                0,
+                0,
+                0,
+                2,
+                new String[] { "Slime", "Bouncy", "Sticky", "Bush" },
+                new ItemStack(Items.slime_ball, 1),
+                null);
+            new GTBaseCrop(
+                139,
+                "Spidernip",
+                "Mr. Kenny",
+                null,
+                4,
+                4,
+                600,
+                1,
+                4,
+                2,
+                1,
+                4,
+                1,
+                3,
+                new String[] { "Toxic", "Silk", "Spider", "Flower", "Ingredient", "Addictive" },
+                new ItemStack(Items.string, 1),
+                new ItemStack[] { new ItemStack(Items.spider_eye, 1), new ItemStack(Blocks.web, 1) });
+            new GTBaseCrop(
+                140,
+                "Tearstalks",
+                "Neowulf",
+                null,
+                8,
+                4,
+                0,
+                1,
+                4,
+                1,
+                2,
+                0,
+                0,
+                0,
+                new String[] { "Healing", "Nether", "Ingredient", "Reed", "Ghast" },
+                new ItemStack(Items.ghast_tear, 1),
+                null);
+            new GTBaseCrop(
+                141,
+                "Tine",
+                "Gregorius Techneticies",
+                null,
+                5,
+                3,
+                0,
+                2,
+                3,
+                2,
+                0,
+                3,
+                0,
+                0,
+                new String[] { "Shiny", "Metal", "Pine", "Tin", "Bush" },
+                Materials.Tin,
+                ItemList.Crop_Drop_Tine.get(1L),
+                null);
+            new GTBaseCrop(
+                142,
+                "Coppon",
+                "Mr. Brain",
+                null,
+                6,
+                3,
+                0,
+                2,
+                3,
+                2,
+                0,
+                1,
+                1,
+                1,
+                new String[] { "Shiny", "Metal", "Cotton", "Copper", "Bush" },
+                Materials.Copper,
+                ItemList.Crop_Drop_Coppon.get(1L),
+                null);
+            new GTBaseCrop(
+                143,
+                "Brown Mushrooms",
+                "Mr. Brain",
+                tI[2],
+                1,
+                3,
+                0,
+                1,
+                3,
+                0,
+                2,
+                0,
+                0,
+                2,
+                new String[] { "Food", "Mushroom", "Ingredient" },
+                new ItemStack(Blocks.brown_mushroom, 1),
+                null);
+            new GTBaseCrop(
+                144,
+                "Red Mushrooms",
+                "Mr. Kenny",
+                tI[3],
+                1,
+                3,
+                0,
+                1,
+                3,
+                0,
+                1,
+                3,
+                0,
+                2,
+                new String[] { "Toxic", "Mushroom", "Ingredient" },
+                new ItemStack(Blocks.red_mushroom, 1),
+                null);
+            new GTBaseCrop(
+                145,
+                "Argentia",
+                "Eloraam",
+                null,
+                7,
+                4,
+                0,
+                3,
+                4,
+                2,
+                0,
+                1,
+                0,
+                0,
+                new String[] { "Shiny", "Metal", "Silver", "Reed" },
+                Materials.Silver,
+                ItemList.Crop_Drop_Argentia.get(1L),
+                null);
+            new GTBaseCrop(
+                146,
+                "Plumbilia",
+                "KingLemming",
+                null,
+                6,
+                4,
+                0,
+                3,
+                4,
+                2,
+                0,
+                3,
+                1,
+                1,
+                new String[] { "Heavy", "Metal", "Lead", "Reed" },
+                Materials.Lead,
+                ItemList.Crop_Drop_Plumbilia.get(1L),
+                null);
+            new GTBaseCrop(
+                147,
+                "Steeleafranks",
+                "Benimatic",
+                null,
+                10,
+                4,
+                0,
+                1,
+                4,
+                3,
+                0,
+                7,
+                2,
+                8,
+                new String[] { "Metal", "Tendrilly", "Iron" },
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steeleaf, 1L),
+                new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steeleaf, 1L) });
+            new GTBaseCrop(
+                148,
+                "Liveroots",
+                "Benimatic",
+                null,
+                8,
+                4,
+                0,
+                1,
+                4,
+                2,
+                0,
+                5,
+                2,
+                6,
+                new String[] { "Wood", "Tendrilly" },
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.LiveRoot, 1L),
+                new ItemStack[] { ItemList.TF_LiveRoot.get(1L) });
+            new GTBaseCrop(
+                149,
+                "Trollplant",
+                "unknown",
+                null,
+                6,
+                5,
+                1000,
+                1,
+                4,
+                0,
+                0,
+                5,
+                2,
+                8,
+                new String[] { "Troll", "Bad", "Scrap" },
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.FoolsRuby, 1L),
+                new ItemStack[] { ItemList.IC2_Plantball.get(1), ItemList.IC2_Scrap.get(1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium241, 1L) });
+            new GTBaseCrop(
+                150,
+                "Lazulia",
+                "unknown",
+                null,
+                7,
+                4,
+                0,
+                2,
+                4,
+                4,
+                2,
+                5,
+                7,
+                4,
+                new String[] { "Shiny", "Bad", "Crystal", "Lapis" },
+                Materials.Lapis,
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lapis, 1L),
+                null);
+            new GTBaseCrop(
+                151,
+                "Glowheat",
+                "unknown",
+                null,
+                10,
+                7,
+                0,
+                5,
+                7,
+                3,
+                3,
+                3,
+                5,
+                4,
+                new String[] { "Light", "Shiny", "Crystal" },
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L),
+                null);
+            new GTBaseCrop(
+                153,
+                "Fertilia",
+                "unknown",
+                null,
+                3,
+                4,
+                0,
+                1,
+                4,
+                2,
+                3,
+                5,
+                4,
+                8,
+                new String[] { "Growth", "Healing", "Flower" },
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L),
+                new ItemStack[] { ItemList.IC2_Fertilizer.get(1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1L) });
+            new GTBaseCrop(
+                154,
+                "Bauxia",
+                "unknown",
+                null,
+                6,
+                3,
+                0,
+                2,
+                3,
+                5,
+                0,
+                2,
+                3,
+                3,
+                new String[] { "Metal", "Aluminium", "Reed", "Aluminium" },
+                Materials.Aluminium,
+                ItemList.Crop_Drop_Bauxite.get(1),
+                null);
+            new GTBaseCrop(
+                155,
+                "Titania",
+                "unknown",
+                null,
+                9,
+                3,
+                0,
+                2,
+                3,
+                5,
+                0,
+                3,
+                3,
+                1,
+                new String[] { "Metal", "Heavy", "Reed", "Titanium" },
+                Materials.Titanium,
+                ItemList.Crop_Drop_Ilmenite.get(1),
+                null);
+            new GTBaseCrop(
+                156,
+                "Reactoria",
+                "unknown",
+                null,
+                12,
+                4,
+                0,
+                2,
+                4,
+                4,
+                0,
+                1,
+                2,
+                1,
+                new String[] { "Radioactive", "Metal", "Danger", "Uranium" },
+                Materials.Uranium,
+                ItemList.Crop_Drop_Pitchblende.get(1),
+                new ItemStack[] { ItemList.Crop_Drop_Uraninite.get(1) });
+            new GTBaseCrop(
+                157,
+                "God of Thunder",
+                "unknown",
+                null,
+                9,
+                4,
+                0,
+                2,
+                4,
+                3,
+                0,
+                5,
+                1,
+                2,
+                new String[] { "Radioactive", "Metal", "Coal", "Thorium" },
+                Materials.Thorium,
+                ItemList.Crop_Drop_Thorium.get(1),
+                null);
+            new GTBaseCrop(
+                158,
+                "Transformium",
+                "unknown",
+                null,
+                12,
+                4,
+                2500,
+                1,
+                4,
+                6,
+                2,
+                1,
+                6,
+                1,
+                new String[] { "Transform", "Coal", "Reed" },
+                ItemList.Crop_Drop_UUABerry.get(1L),
+                new ItemStack[] { ItemList.Crop_Drop_UUABerry.get(1L), ItemList.Crop_Drop_UUABerry.get(1L),
+                    ItemList.Crop_Drop_UUABerry.get(1L), ItemList.Crop_Drop_UUABerry.get(1L),
+                    ItemList.Crop_Drop_UUMBerry.get(1L) });
+            new GTBaseCrop(
+                159,
+                "Starwart",
+                "unknown",
+                null,
+                12,
+                4,
+                4000,
+                1,
+                4,
+                2,
+                0,
+                0,
+                1,
+                0,
+                new String[] { "Wither", "Nether", "Undead", "Netherstar" },
+                Materials.NetherStar,
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L),
+                new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 1L),
+                    new ItemStack(Items.skull, 1), new ItemStack(Items.skull, 1, 1), new ItemStack(Items.skull, 1, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherStar, 1L) });
+            new GTBaseCrop(
+                160,
+                "Zomplant",
+                "unknown",
+                null,
+                3,
+                4,
+                0,
+                1,
+                4,
+                1,
+                3,
+                4,
+                2,
+                6,
+                new String[] { "Zombie", "Rotten", "Undead" },
+                new ItemStack(Items.rotten_flesh),
+                null);
+            new GTBaseCrop(
+                161,
+                "Nickelback",
+                "unknown",
+                null,
+                5,
+                3,
+                0,
+                2,
+                3,
+                3,
+                0,
+                1,
+                2,
+                2,
+                new String[] { "Metal", "Fire", "Alloy" },
+                Materials.Nickel,
+                ItemList.Crop_Drop_Nickel.get(1),
+                null);
+            new GTBaseCrop(
+                162,
+                "Galvania",
+                "unknown",
+                null,
+                6,
+                3,
+                0,
+                2,
+                3,
+                3,
+                0,
+                2,
+                2,
+                3,
+                new String[] { "Metal", "Alloy", "Bush" },
+                Materials.Zinc,
+                ItemList.Crop_Drop_Zinc.get(1),
+                null);
+            new GTBaseCrop(
+                163,
+                "Evil Ore",
+                "unknown",
+                null,
+                8,
+                4,
+                0,
+                3,
+                4,
+                4,
+                0,
+                2,
+                1,
+                3,
+                new String[] { "Crystal", "Fire", "Nether" },
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 1L),
+                new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 1L), });
+            new GTBaseCrop(
+                164,
+                "Olivia",
+                "unknown",
+                null,
+                2,
+                4,
+                0,
+                3,
+                4,
+                1,
+                0,
+                1,
+                4,
+                0,
+                new String[] { "Crystal", "Shiny", "Processing", "Olivine" },
+                Materials.Olivine,
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Olivine, 1L),
+                new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), });
+            new GTBaseCrop(
+                165,
+                "Sapphirum",
+                "unknown",
+                null,
+                4,
+                4,
+                0,
+                3,
+                4,
+                1,
+                0,
+                1,
+                5,
+                0,
+                new String[] { "Crystal", "Shiny", "Metal", "Sapphire" },
+                Materials.Sapphire,
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sapphire, 1L),
+                new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), });
+            new GTBaseCrop(
+                166,
+                "Pyrolusium",
+                "unknown",
+                null,
+                12,
+                3,
+                0,
+                2,
+                3,
+                1,
+                0,
+                1,
+                1,
+                0,
+                new String[] { "Metal", "Clean", "Bush", "Manganese" },
+                Materials.Manganese,
+                ItemList.Crop_Drop_Manganese.get(1),
+                null);
+            new GTBaseCrop(
+                167,
+                "Scheelinium",
+                "unknown",
+                null,
+                12,
+                3,
+                0,
+                2,
+                3,
+                3,
+                0,
+                1,
+                1,
+                0,
+                new String[] { "Metal", "Hard", "Bush", "Tungsten" },
+                Materials.Tungsten,
+                ItemList.Crop_Drop_Scheelite.get(1),
+                null);
+            new GTBaseCrop(
+                168,
+                "Platina",
+                "unknown",
+                null,
+                11,
+                4,
+                0,
+                1,
+                4,
+                3,
+                0,
+                0,
+                3,
+                0,
+                new String[] { "Metal", "Shiny", "Reed", "Platinum" },
+                Materials.Platinum,
+                ItemList.Crop_Drop_Platinum.get(1),
+                null);
+            new GTBaseCrop(
+                169,
+                "Quantaria",
+                "unknown",
+                null,
+                12,
+                4,
+                1000,
+                1,
+                4,
+                4,
+                0,
+                0,
+                1,
+                0,
+                new String[] { "Metal", "Iridium", "Reed" },
+                Materials.Iridium,
+                ItemList.Crop_Drop_Iridium.get(1),
+                new ItemStack[] { ItemList.Crop_Drop_Osmium.get(1) });
+            new GTBaseCrop(
+                170,
+                "Stargatium",
+                "unknown",
+                null,
+                12,
+                4,
+                1500,
+                1,
+                4,
+                4,
+                0,
+                0,
+                2,
+                0,
+                new String[] { "Metal", "Heavy", "Alien", "Naquadah" },
+                Materials.Naquadah,
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 1L),
+                new ItemStack[] { ItemList.Crop_Drop_Naquadah.get(1) });
+            new GTBaseCrop(
+                171,
+                "Lemon",
+                "unknown",
+                null,
+                4,
+                4,
+                0,
+                1,
+                4,
+                1,
+                1,
+                0,
+                2,
+                0,
+                new String[] { "Food", "Yellow", "Sour" },
+                ItemList.Crop_Drop_Lemon.get(1),
+                null);
+            new GTBaseCrop(
+                172,
+                "Chilly",
+                "unknown",
+                null,
+                4,
+                4,
+                0,
+                1,
+                4,
+                1,
+                1,
+                0,
+                2,
+                0,
+                new String[] { "Food", "Red", "Spicy" },
+                ItemList.Crop_Drop_Chilly.get(1),
+                null);
+            new GTBaseCrop(
+                173,
+                "Tomato",
+                "unknown",
+                null,
+                4,
+                4,
+                0,
+                1,
+                4,
+                1,
+                1,
+                0,
+                2,
+                0,
+                new String[] { "Food", "Red" },
+                ItemList.Crop_Drop_Tomato.get(1),
+                new ItemStack[] { ItemList.Crop_Drop_MTomato.get(1) });
+            new GTBaseCrop(
+                174,
+                "Grape",
+                "unknown",
+                null,
+                4,
+                4,
+                0,
+                1,
+                4,
+                1,
+                1,
+                0,
+                2,
+                0,
+                new String[] { "Food", "Purple" },
+                ItemList.Crop_Drop_Grapes.get(1),
+                null);
+            new GTBaseCrop(
+                175,
+                "Onion",
+                "unknown",
+                null,
+                4,
+                4,
+                0,
+                1,
+                4,
+                1,
+                1,
+                0,
+                2,
+                0,
+                new String[] { "Food", "Brown" },
+                ItemList.Crop_Drop_Onion.get(1),
+                null);
+            new GTBaseCrop(
+                176,
+                "Cucumber",
+                "unknown",
+                null,
+                4,
+                4,
+                0,
+                1,
+                4,
+                1,
+                1,
+                0,
+                2,
+                0,
+                new String[] { "Food", "Green" },
+                ItemList.Crop_Drop_Cucumber.get(1),
+                null);
+            new GTBaseCrop(
+                177,
+                "Tea",
+                "unknown",
+                null,
+                4,
+                4,
+                0,
+                1,
+                4,
+                1,
+                1,
+                0,
+                2,
+                0,
+                new String[] { "Food", "Green", "Ingredient" },
+                ItemList.Crop_Drop_TeaLeaf.get(1),
+                null);
+            new GTBaseCrop(
+                178,
+                "Rape",
+                "unknown",
+                null,
+                4,
+                4,
+                0,
+                1,
+                4,
+                1,
+                1,
+                0,
+                2,
+                0,
+                new String[] { "Food", "Yellow", "Oil" },
+                ItemList.Crop_Drop_Rape.get(1),
+                null);
+            new GTBaseCrop(
+                179,
+                "Micadia",
+                "bartimaeusnek",
+                null,
+                9,
+                3,
+                0,
+                2,
+                3,
+                2,
+                0,
+                3,
+                0,
+                0,
+                new String[] { "Metal", "Pine", "Mica", "Bush" },
+                Materials.Mica,
+                ItemList.Crop_Drop_Mica.get(1L),
+                null);
+        } catch (Throwable e) {
+            GTLog.err.println("GTMod: Failed to register Crops to IC2.");
+            e.printStackTrace(GTLog.err);
+        }
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/FakeRecipeLoader.java b/src/main/java/gregtech/loaders/postload/FakeRecipeLoader.java
new file mode 100644
index 0000000000..335423cdce
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/FakeRecipeLoader.java
@@ -0,0 +1,23 @@
+package gregtech.loaders.postload;
+
+import gregtech.api.enums.GTValues;
+import gregtech.api.recipe.RecipeMaps;
+import gregtech.api.util.GTModHandler;
+
+public class FakeRecipeLoader implements Runnable {
+
+    @Override
+    public void run() {
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("reactorLithiumCell", 1))
+            .itemOutputs(GTModHandler.getIC2Item("TritiumCell", 1))
+            .setNEIDesc(
+                "Neutron reflecting Breeder",
+                String.format("Every %d reactor hull heat", 3_000),
+                String.format("increase speed by %d00%%", 1),
+                String.format("Required pulses: %d", 10_000))
+            .duration(0)
+            .eut(0)
+            .addTo(RecipeMaps.ic2NuclearFakeRecipes);
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GTPostLoad.java b/src/main/java/gregtech/loaders/postload/GTPostLoad.java
new file mode 100644
index 0000000000..66c89dfe4b
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GTPostLoad.java
@@ -0,0 +1,537 @@
+package gregtech.loaders.postload;
+
+import static gregtech.api.enums.Mods.Forestry;
+import static gregtech.api.enums.Mods.GalacticraftCore;
+import static gregtech.api.enums.Mods.GalacticraftMars;
+import static gregtech.api.enums.Mods.GalaxySpace;
+import static gregtech.api.enums.Mods.Thaumcraft;
+import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes;
+import static gregtech.api.recipe.RecipeMaps.massFabFakeRecipes;
+import static gregtech.api.recipe.RecipeMaps.rockBreakerFakeRecipes;
+import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import net.minecraft.creativetab.CreativeTabs;
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.FluidContainerRegistry;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+import com.google.common.base.Stopwatch;
+
+import cpw.mods.fml.common.ProgressManager;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import gregtech.GTMod;
+import gregtech.api.enums.GTValues;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.SubTag;
+import gregtech.api.enums.TierEU;
+import gregtech.api.recipe.RecipeMaps;
+import gregtech.api.util.GTCLSCompat;
+import gregtech.api.util.GTForestryCompat;
+import gregtech.api.util.GTLog;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeBuilder;
+import gregtech.api.util.GTRecipeConstants;
+import gregtech.api.util.GTRecipeRegistrator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.items.MetaGeneratedTool01;
+import gregtech.common.items.behaviors.BehaviourDataOrb;
+import gregtech.common.tileentities.machines.basic.MTEMassfabricator;
+import ic2.api.recipe.IRecipeInput;
+import ic2.api.recipe.RecipeOutput;
+
+@SuppressWarnings("deprecation")
+public class GTPostLoad {
+
+    public static void activateOreDictHandler() {
+        @SuppressWarnings("UnstableApiUsage") // Stable enough for this project
+        Stopwatch stopwatch = Stopwatch.createStarted();
+        GTMod.gregtechproxy.activateOreDictHandler();
+
+        // noinspection UnstableApiUsage// Stable enough for this project
+        GTMod.GT_FML_LOGGER
+            .info("Congratulations, you have been waiting long enough (" + stopwatch.stop() + "). Have a Cake.");
+        GTLog.out.println(
+            "GTMod: List of Lists of Tool Recipes: " + GTModHandler.sSingleNonBlockDamagableRecipeList_list.toString());
+        GTLog.out.println(
+            "GTMod: Vanilla Recipe List -> Outputs null or stackSize <=0: "
+                + GTModHandler.sVanillaRecipeList_warntOutput.toString());
+        GTLog.out.println(
+            "GTMod: Single Non Block Damageable Recipe List -> Outputs null or stackSize <=0: "
+                + GTModHandler.sSingleNonBlockDamagableRecipeList_warntOutput.toString());
+    }
+
+    public static void removeIc2Recipes(Map aMaceratorRecipeList,
+        Map aCompressorRecipeList, Map aExtractorRecipeList,
+        Map aOreWashingRecipeList,
+        Map aThermalCentrifugeRecipeList) {
+        @SuppressWarnings("UnstableApiUsage") // Stable enough for this project
+        Stopwatch stopwatch = Stopwatch.createStarted();
+        // remove gemIridium exploit
+        ItemStack iridiumOre = GTModHandler.getIC2Item("iridiumOre", 1);
+        aCompressorRecipeList.entrySet()
+            .parallelStream()
+            .filter(
+                e -> e.getKey()
+                    .getInputs()
+                    .size() == 1 && e.getKey()
+                        .getInputs()
+                        .get(0)
+                        .isItemEqual(iridiumOre))
+            .findAny()
+            .ifPresent(e -> aCompressorRecipeList.remove(e.getKey()));
+        // Remove all IC2
+        GTModHandler.removeAllIC2Recipes();
+        // noinspection UnstableApiUsage// Stable enough for this project
+        GTMod.GT_FML_LOGGER.info("IC2 Removal (" + stopwatch.stop() + "). Have a Cake.");
+    }
+
+    public static void registerFluidCannerRecipes() {
+        for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry
+            .getRegisteredFluidContainerData()) {
+            // lava clay bucket is registered with empty container with 0 stack size
+            ItemStack emptyContainer = tData.emptyContainer.copy();
+            emptyContainer.stackSize = 1;
+            GTValues.RA.stdBuilder()
+                .itemInputs(emptyContainer)
+                .itemOutputs(tData.filledContainer)
+                .fluidInputs(tData.fluid)
+                .duration((tData.fluid.amount / 62) * TICKS)
+                .eut(1)
+                .addTo(fluidCannerRecipes);
+            GTRecipeBuilder builder = GTValues.RA.stdBuilder()
+                .itemInputs(tData.filledContainer);
+            if (tData.emptyContainer.stackSize > 0) {
+                builder.itemOutputs(tData.emptyContainer);
+            }
+            builder.fluidOutputs(tData.fluid)
+                .duration((tData.fluid.amount / 62) * TICKS)
+                .eut(1)
+                .addTo(fluidCannerRecipes);
+        }
+    }
+
+    public static void addFakeRecipes() {
+        GTLog.out.println("GTMod: Adding Fake Recipes for NEI");
+
+        if (Forestry.isModLoaded()) {
+            GTForestryCompat.populateFakeNeiRecipes();
+        }
+
+        if (ItemList.IC2_Crop_Seeds.get(1L) != null) {
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.IC2_Crop_Seeds.getWildcard(1L))
+                .itemOutputs(ItemList.IC2_Crop_Seeds.getWithName(1L, "Scanned Seeds"))
+                .duration(8 * SECONDS)
+                .eut(8)
+                .noOptimize()
+                .ignoreCollision()
+                .fake()
+                .addTo(scannerFakeRecipes);
+        }
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.written_book, 1, 32767))
+            .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Scanned Book Data"))
+            .special(ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to"))
+            .duration(6 * SECONDS + 8 * TICKS)
+            .eut(TierEU.RECIPE_LV)
+            .noOptimize()
+            .ignoreCollision()
+            .fake()
+            .addTo(scannerFakeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.filled_map, 1, 32767))
+            .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Scanned Map Data"))
+            .special(ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to"))
+            .duration(6 * SECONDS + 8 * TICKS)
+            .eut(TierEU.RECIPE_LV)
+            .noOptimize()
+            .ignoreCollision()
+            .fake()
+            .addTo(scannerFakeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Tool_DataOrb.getWithName(1L, "Orb to overwrite"))
+            .itemOutputs(ItemList.Tool_DataOrb.getWithName(1L, "Copy of the Orb"))
+            .duration(25 * SECONDS + 12 * TICKS)
+            .eut(TierEU.RECIPE_LV)
+            .noOptimize()
+            .ignoreCollision()
+            .fake()
+            .addTo(scannerFakeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Tool_DataStick.getWithName(1L, "Stick to overwrite"))
+            .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Copy of the Stick"))
+            .special(ItemList.Tool_DataStick.getWithName(0L, "Stick to copy"))
+            .duration(6 * SECONDS + 8 * TICKS)
+            .eut(TierEU.RECIPE_LV)
+            .noOptimize()
+            .ignoreCollision()
+            .fake()
+            .addTo(scannerFakeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Tool_DataStick.getWithName(1L, "Raw Prospection Data"))
+            .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Analyzed Prospection Data"))
+            .duration(50 * SECONDS)
+            .eut(TierEU.RECIPE_LV)
+            .noOptimize()
+            .ignoreCollision()
+            .fake()
+            .addTo(scannerFakeRecipes);
+
+        if (GalacticraftCore.isModLoaded()) {
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    Objects
+                        .requireNonNull(
+                            GTModHandler.getModItem(GalacticraftCore.ID, "item.schematic", 1, Short.MAX_VALUE))
+                        .setStackDisplayName("Any Schematic"))
+                .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Scanned Schematic"))
+                .special(ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to"))
+                .duration(30 * MINUTES)
+                .eut(TierEU.RECIPE_HV)
+                .noOptimize()
+                .ignoreCollision()
+                .fake()
+                .addTo(scannerFakeRecipes);
+
+            if (GalacticraftMars.isModLoaded()) {
+                GTValues.RA.stdBuilder()
+                    .itemInputs(
+                        Objects
+                            .requireNonNull(
+                                GTModHandler.getModItem(GalacticraftMars.ID, "item.schematic", 1, Short.MAX_VALUE))
+                            .setStackDisplayName("Any Schematic"))
+                    .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Scanned Schematic"))
+                    .special(ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to"))
+                    .duration(30 * MINUTES)
+                    .eut(TierEU.RECIPE_MV)
+                    .noOptimize()
+                    .ignoreCollision()
+                    .fake()
+                    .addTo(scannerFakeRecipes);
+            }
+            if (GalaxySpace.isModLoaded()) {
+                for (int i = 4; i < 9; i++) {
+                    GTValues.RA.stdBuilder()
+                        .itemInputs(
+                            GTModHandler.getModItem(GalaxySpace.ID, "item.SchematicTier" + i, 1)
+                                .setStackDisplayName("Any Schematic"))
+                        .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Scanned Schematic"))
+                        .special(ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to"))
+                        .duration(30 * MINUTES)
+                        .eut(TierEU.RECIPE_HV)
+                        .noOptimize()
+                        .ignoreCollision()
+                        .fake()
+                        .addTo(scannerFakeRecipes);
+                }
+            }
+        }
+        Materials.getMaterialsMap()
+            .values()
+            .forEach(tMaterial -> {
+                if ((tMaterial.mElement != null) && (!tMaterial.mElement.mIsIsotope)
+                    && (tMaterial != Materials.Magic)
+                    && (tMaterial.getMass() > 0L)) {
+                    ItemStack dataOrb = ItemList.Tool_DataOrb.get(1L);
+                    BehaviourDataOrb.setDataTitle(dataOrb, "Elemental-Scan");
+                    BehaviourDataOrb.setDataName(dataOrb, tMaterial.mElement.name());
+                    ItemStack dustItem = GTOreDictUnificator.get(OrePrefixes.dust, tMaterial, 1L);
+                    if (dustItem != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(dustItem)
+                            .itemOutputs(dataOrb)
+                            .special(ItemList.Tool_DataOrb.get(1L))
+                            .duration((int) (tMaterial.getMass() * 8192L))
+                            .eut(TierEU.RECIPE_LV)
+                            .fake()
+                            .ignoreCollision()
+                            .addTo(scannerFakeRecipes);
+                        GTValues.RA.stdBuilder()
+                            .itemOutputs(dustItem)
+                            .special(dataOrb)
+                            .metadata(GTRecipeConstants.MATERIAL, tMaterial)
+                            .addTo(RecipeMaps.replicatorRecipes);
+                        return;
+                    }
+                    ItemStack cellItem = GTOreDictUnificator.get(OrePrefixes.cell, tMaterial, 1L);
+                    if (cellItem != null) {
+                        GTValues.RA.stdBuilder()
+                            .itemInputs(cellItem)
+                            .itemOutputs(dataOrb)
+                            .special(ItemList.Tool_DataOrb.get(1L))
+                            .duration((int) (tMaterial.getMass() * 8192L))
+                            .eut(TierEU.RECIPE_LV)
+                            .fake()
+                            .ignoreCollision()
+                            .addTo(scannerFakeRecipes);
+                        FluidStack fluidStack = GTUtility.getFluidForFilledItem(cellItem, false);
+                        GTRecipeBuilder builder = GTValues.RA.stdBuilder();
+                        if (fluidStack != null) {
+                            builder.fluidOutputs(fluidStack);
+                        } else {
+                            builder.itemInputs(Materials.Empty.getCells(1))
+                                .itemOutputs(cellItem);
+                        }
+                        builder.special(dataOrb)
+                            .metadata(GTRecipeConstants.MATERIAL, tMaterial)
+                            .addTo(RecipeMaps.replicatorRecipes);
+                    }
+                }
+            });
+
+        if (!MTEMassfabricator.sRequiresUUA) {
+
+            MTEMassfabricator.nonUUARecipe = GTValues.RA.stdBuilder()
+                .fluidOutputs(Materials.UUMatter.getFluid(1L))
+                .duration(MTEMassfabricator.sDurationMultiplier)
+                .eut(MTEMassfabricator.BASE_EUT)
+                .ignoreCollision()
+                .noOptimize()
+                .fake()
+                .build()
+                .get();
+
+            massFabFakeRecipes.add(MTEMassfabricator.nonUUARecipe);
+
+        }
+
+        MTEMassfabricator.uuaRecipe = GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
+            .fluidInputs(Materials.UUAmplifier.getFluid(MTEMassfabricator.sUUAperUUM))
+            .fluidOutputs(Materials.UUMatter.getFluid(1L))
+            .duration(MTEMassfabricator.sDurationMultiplier / MTEMassfabricator.sUUASpeedBonus)
+            .eut(MTEMassfabricator.BASE_EUT)
+            .ignoreCollision()
+            .noOptimize()
+            .fake()
+            .build()
+            .get();
+
+        massFabFakeRecipes.add(MTEMassfabricator.uuaRecipe);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Display_ITS_FREE.getWithName(1L, "IT'S FREE! Place Lava on Side"))
+            .itemOutputs(new ItemStack(Blocks.cobblestone, 1))
+            .duration(16 * TICKS)
+            .eut(TierEU.RECIPE_LV)
+            .ignoreCollision()
+            .noOptimize()
+            .fake()
+            .addTo(rockBreakerFakeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Display_ITS_FREE.getWithName(1L, "IT'S FREE! Place Lava on Side"))
+            .itemOutputs(new ItemStack(Blocks.stone, 1))
+            .duration(16 * TICKS)
+            .eut(TierEU.RECIPE_LV)
+            .ignoreCollision()
+            .noOptimize()
+            .fake()
+            .addTo(rockBreakerFakeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(new ItemStack(Blocks.obsidian, 1))
+            .duration(6 * SECONDS + 8 * TICKS)
+            .eut(TierEU.RECIPE_LV)
+            .ignoreCollision()
+            .noOptimize()
+            .fake()
+            .addTo(rockBreakerFakeRecipes);
+    }
+
+    public static void nerfVanillaTools() {
+        if (!GTMod.gregtechproxy.mNerfedVanillaTools) {
+            return;
+        }
+
+        GTLog.out.println("GTMod: Nerfing Vanilla Tool Durability");
+        Items.wooden_sword.setMaxDamage(12);
+        Items.wooden_pickaxe.setMaxDamage(12);
+        Items.wooden_shovel.setMaxDamage(12);
+        Items.wooden_axe.setMaxDamage(12);
+        Items.wooden_hoe.setMaxDamage(12);
+
+        Items.stone_sword.setMaxDamage(48);
+        Items.stone_pickaxe.setMaxDamage(48);
+        Items.stone_shovel.setMaxDamage(48);
+        Items.stone_axe.setMaxDamage(48);
+        Items.stone_hoe.setMaxDamage(48);
+
+        Items.iron_sword.setMaxDamage(256);
+        Items.iron_pickaxe.setMaxDamage(256);
+        Items.iron_shovel.setMaxDamage(256);
+        Items.iron_axe.setMaxDamage(256);
+        Items.iron_hoe.setMaxDamage(256);
+
+        Items.golden_sword.setMaxDamage(24);
+        Items.golden_pickaxe.setMaxDamage(24);
+        Items.golden_shovel.setMaxDamage(24);
+        Items.golden_axe.setMaxDamage(24);
+        Items.golden_hoe.setMaxDamage(24);
+
+        Items.diamond_sword.setMaxDamage(768);
+        Items.diamond_pickaxe.setMaxDamage(768);
+        Items.diamond_shovel.setMaxDamage(768);
+        Items.diamond_axe.setMaxDamage(768);
+        Items.diamond_hoe.setMaxDamage(768);
+
+    }
+
+    public static void replaceVanillaMaterials() {
+        @SuppressWarnings("UnstableApiUsage") // Stable enough for this project
+        Stopwatch stopwatch = Stopwatch.createStarted();
+        GTMod.GT_FML_LOGGER.info("Replacing Vanilla Materials in recipes, please wait.");
+        Set replaceVanillaItemsSet = Arrays.stream(Materials.values())
+            .filter(GTRecipeRegistrator::hasVanillaRecipes)
+            .collect(Collectors.toSet());
+
+        ProgressManager.ProgressBar progressBar = ProgressManager
+            .push("Register materials", replaceVanillaItemsSet.size());
+        if (GTValues.cls_enabled) {
+            try {
+                GTCLSCompat.doActualRegistrationCLS(progressBar, replaceVanillaItemsSet);
+                GTCLSCompat.pushToDisplayProgress();
+            } catch (InvocationTargetException | IllegalAccessException e) {
+                GTMod.GT_FML_LOGGER.catching(e);
+            }
+        } else {
+            replaceVanillaItemsSet.forEach(m -> {
+                progressBar.step(m.mDefaultLocalName);
+                doActualRegistration(m);
+            });
+        }
+        ProgressManager.pop(progressBar);
+        // noinspection UnstableApiUsage// stable enough for project
+        GTMod.GT_FML_LOGGER.info("Replaced Vanilla Materials (" + stopwatch.stop() + "). Have a Cake.");
+    }
+
+    public static void doActualRegistration(Materials m) {
+        String plateName = OrePrefixes.plate.get(m)
+            .toString();
+        boolean noSmash = !m.contains(SubTag.NO_SMASHING);
+        if ((m.mTypes & 2) != 0) GTRecipeRegistrator.registerUsagesForMaterials(plateName, noSmash, m.getIngots(1));
+        if ((m.mTypes & 4) != 0) GTRecipeRegistrator.registerUsagesForMaterials(plateName, noSmash, m.getGems(1));
+        if (m.getBlocks(1) != null) GTRecipeRegistrator.registerUsagesForMaterials(null, noSmash, m.getBlocks(1));
+    }
+
+    public static void createGTtoolsCreativeTab() {
+        new CreativeTabs("GTtools") {
+
+            @SideOnly(Side.CLIENT)
+            @Override
+            public ItemStack getIconItemStack() {
+                return ItemList.Tool_Cheat.get(1, new ItemStack(Blocks.iron_block, 1));
+            }
+
+            @SideOnly(Side.CLIENT)
+            @Override
+            public Item getTabIconItem() {
+                return ItemList.Circuit_Integrated.getItem();
+            }
+
+            @Override
+            public void displayAllReleventItems(List aList) {
+
+                for (int i = 0; i < 32766; i += 2) {
+                    if (MetaGeneratedTool01.INSTANCE.getToolStats(new ItemStack(MetaGeneratedTool01.INSTANCE, 1, i))
+                        == null) {
+                        continue;
+                    }
+
+                    ItemStack tStack = new ItemStack(MetaGeneratedTool01.INSTANCE, 1, i);
+                    MetaGeneratedTool01.INSTANCE.isItemStackUsable(tStack);
+                    aList
+                        .add(MetaGeneratedTool01.INSTANCE.getToolWithStats(i, 1, Materials.Lead, Materials.Lead, null));
+                    aList.add(
+                        MetaGeneratedTool01.INSTANCE.getToolWithStats(i, 1, Materials.Nickel, Materials.Nickel, null));
+                    aList.add(
+                        MetaGeneratedTool01.INSTANCE.getToolWithStats(i, 1, Materials.Cobalt, Materials.Cobalt, null));
+                    aList.add(
+                        MetaGeneratedTool01.INSTANCE.getToolWithStats(i, 1, Materials.Osmium, Materials.Osmium, null));
+                    aList.add(
+                        MetaGeneratedTool01.INSTANCE
+                            .getToolWithStats(i, 1, Materials.Adamantium, Materials.Adamantium, null));
+                    aList.add(
+                        MetaGeneratedTool01.INSTANCE
+                            .getToolWithStats(i, 1, Materials.Neutronium, Materials.Neutronium, null));
+
+                }
+                super.displayAllReleventItems(aList);
+            }
+        };
+    }
+
+    public static void addSolidFakeLargeBoilerFuels() {
+        RecipeMaps.largeBoilerFakeFuels.getBackend()
+            .addSolidRecipes(
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Charcoal, 1),
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 1),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1),
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 1),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Coal, 1),
+                GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Coal, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lignite, 1),
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.Lignite, 1),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 1),
+                GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Lignite, 1),
+                GTOreDictUnificator.get(OrePrefixes.log, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.plank, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.slab, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Caesium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
+                GTOreDictUnificator.get(ItemList.Block_SSFUEL.get(1)),
+                GTOreDictUnificator.get(ItemList.Block_MSSFUEL.get(1)),
+                GTOreDictUnificator.get(OrePrefixes.rod, Materials.Blaze, 1));
+        if (Thaumcraft.isModLoaded()) {
+            RecipeMaps.largeBoilerFakeFuels.getBackend()
+                .addSolidRecipe(GTModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1));
+        }
+    }
+
+    public static void identifyAnySteam() {
+        final String[] steamCandidates = { "steam", "ic2steam" };
+        final String[] superHeatedSteamCandidates = { "ic2superheatedsteam" };
+
+        GTModHandler.sAnySteamFluidIDs = Arrays.stream(steamCandidates)
+            .map(FluidRegistry::getFluid)
+            .filter(Objects::nonNull)
+            .map(FluidRegistry::getFluidID)
+            .collect(Collectors.toList());
+        GTModHandler.sSuperHeatedSteamFluidIDs = Arrays.stream(superHeatedSteamCandidates)
+            .map(FluidRegistry::getFluid)
+            .filter(Objects::nonNull)
+            .map(FluidRegistry::getFluidID)
+            .collect(Collectors.toList());
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GTWorldgenloader.java b/src/main/java/gregtech/loaders/postload/GTWorldgenloader.java
new file mode 100644
index 0000000000..85e81a1ec0
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/GTWorldgenloader.java
@@ -0,0 +1,33 @@
+package gregtech.loaders.postload;
+
+import galacticgreg.WorldgenGaGT;
+import gregtech.api.enums.GTStones;
+import gregtech.api.enums.OreMixes;
+import gregtech.api.enums.SmallOres;
+import gregtech.api.util.GTLog;
+import gregtech.common.GTWorldgenerator;
+
+public class GTWorldgenloader implements Runnable {
+
+    public void run() {
+        new GTWorldgenerator();
+
+        // GT Stones
+        for (GTStones stone : GTStones.values()) {
+            stone.addGTStone();
+        }
+
+        // GT Default Small Ores
+        for (SmallOres smallOre : SmallOres.values()) {
+            smallOre.addGTSmallOre();
+        }
+
+        // GT Veins registration
+        for (OreMixes oreMix : OreMixes.values()) {
+            oreMix.addGTOreLayer();
+        }
+
+        new WorldgenGaGT().run();
+        GTLog.out.println("Started Galactic Greg ore gen code");
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/GT_BlockResistanceLoader.java b/src/main/java/gregtech/loaders/postload/GT_BlockResistanceLoader.java
deleted file mode 100644
index b122646c92..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_BlockResistanceLoader.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package gregtech.loaders.postload;
-
-import java.util.Set;
-
-import net.minecraft.block.Block;
-import net.minecraft.block.material.Material;
-import net.minecraft.init.Blocks;
-import net.minecraft.item.ItemAxe;
-import net.minecraft.item.ItemPickaxe;
-
-import gregtech.api.util.GT_Utility;
-
-public class GT_BlockResistanceLoader implements Runnable {
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public void run() {
-        Blocks.stone.setResistance(10.0F);
-        Blocks.cobblestone.setResistance(10.0F);
-        Blocks.stonebrick.setResistance(10.0F);
-        Blocks.brick_block.setResistance(20.0F);
-        Blocks.hardened_clay.setResistance(15.0F);
-        Blocks.stained_hardened_clay.setResistance(15.0F);
-
-        Blocks.bed.setHarvestLevel("axe", 0);
-        Blocks.hay_block.setHarvestLevel("axe", 0);
-        Blocks.tnt.setHarvestLevel("pickaxe", 0);
-        Blocks.sponge.setHarvestLevel("axe", 0);
-        Blocks.monster_egg.setHarvestLevel("pickaxe", 0);
-
-        GT_Utility.callMethod(Material.tnt, "func_85158_p", true, false, false);
-        GT_Utility.callMethod(Material.tnt, "setAdventureModeExempt", true, false, false);
-
-        Set tSet = (Set) GT_Utility.getFieldContent(ItemAxe.class, "field_150917_c", true, true);
-        tSet.add(Blocks.bed);
-        tSet.add(Blocks.hay_block);
-        tSet.add(Blocks.sponge);
-
-        tSet = (Set) GT_Utility.getFieldContent(ItemPickaxe.class, "field_150915_c", true, true);
-        tSet.add(Blocks.monster_egg);
-        tSet.add(Blocks.tnt);
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_BookAndLootLoader.java b/src/main/java/gregtech/loaders/postload/GT_BookAndLootLoader.java
deleted file mode 100644
index a30962631e..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_BookAndLootLoader.java
+++ /dev/null
@@ -1,369 +0,0 @@
-package gregtech.loaders.postload;
-
-import net.minecraft.init.Items;
-import net.minecraft.item.ItemStack;
-import net.minecraft.util.WeightedRandomChestContent;
-import net.minecraftforge.common.ChestGenHooks;
-
-import gregtech.GT_Mod;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_Log;
-import gregtech.api.util.GT_OreDictUnificator;
-
-public class GT_BookAndLootLoader implements Runnable {
-
-    @Override
-    public void run() {
-        GT_Log.out.println("GT_Mod: Adding worldgenerated Chest Content.");
-        if (GT_Mod.gregtechproxy.mIncreaseDungeonLoot) {
-            ChestGenHooks tChest = ChestGenHooks.getInfo("bonusChest");
-            tChest.setMax(tChest.getMax() + 8);
-            tChest.setMin(tChest.getMin() + 4);
-            tChest = ChestGenHooks.getInfo("dungeonChest");
-            tChest.setMax(tChest.getMax() + 6);
-            tChest.setMin(tChest.getMin() + 3);
-            tChest = ChestGenHooks.getInfo("pyramidDesertyChest");
-            tChest.setMax(tChest.getMax() + 8);
-            tChest.setMin(tChest.getMin() + 4);
-            tChest = ChestGenHooks.getInfo("pyramidJungleChest");
-            tChest.setMax(tChest.getMax() + 16);
-            tChest.setMin(tChest.getMin() + 8);
-            tChest = ChestGenHooks.getInfo("pyramidJungleDispenser");
-            tChest.setMax(tChest.getMax() + 2);
-            tChest.setMin(tChest.getMin() + 1);
-            tChest = ChestGenHooks.getInfo("mineshaftCorridor");
-            tChest.setMax(tChest.getMax() + 4);
-            tChest.setMin(tChest.getMin() + 2);
-            tChest = ChestGenHooks.getInfo("villageBlacksmith");
-            tChest.setMax(tChest.getMax() + 12);
-            tChest.setMin(tChest.getMin() + 6);
-            tChest = ChestGenHooks.getInfo("strongholdCrossing");
-            tChest.setMax(tChest.getMax() + 8);
-            tChest.setMin(tChest.getMin() + 4);
-            tChest = ChestGenHooks.getInfo("strongholdCorridor");
-            tChest.setMax(tChest.getMax() + 6);
-            tChest.setMin(tChest.getMin() + 3);
-            tChest = ChestGenHooks.getInfo("strongholdLibrary");
-            tChest.setMax(tChest.getMax() + 16);
-            tChest.setMin(tChest.getMin() + 8);
-        }
-        ChestGenHooks
-            .addItem("bonusChest", new WeightedRandomChestContent(ItemList.Bottle_Purple_Drink.get(1L), 8, 16, 2));
-
-        ChestGenHooks
-            .addItem("dungeonChest", new WeightedRandomChestContent(ItemList.Bottle_Holy_Water.get(1L), 4, 8, 20));
-        ChestGenHooks
-            .addItem("dungeonChest", new WeightedRandomChestContent(ItemList.Bottle_Purple_Drink.get(1L), 8, 16, 80));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1L),
-                1,
-                6,
-                120));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Lead, 1L), 1, 6, 30));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), 1, 6, 60));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L),
-                1,
-                6,
-                60));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Manganese, 1L),
-                1,
-                6,
-                60));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.DamascusSteel, 1L),
-                1,
-                6,
-                10));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Emerald, 1L), 1, 6, 20));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 1, 6, 20));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L),
-                1,
-                6,
-                20));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L),
-                1,
-                6,
-                20));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 1, 6, 20));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L),
-                1,
-                6,
-                40));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L),
-                1,
-                6,
-                40));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neodymium, 1L),
-                1,
-                6,
-                40));
-        ChestGenHooks.addItem(
-            "dungeonChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1L), 1, 3, 40));
-
-        ChestGenHooks.addItem(
-            "pyramidDesertyChest",
-            new WeightedRandomChestContent(ItemList.Bottle_Holy_Water.get(1L), 4, 8, 2));
-        ChestGenHooks.addItem(
-            "pyramidDesertyChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1L),
-                4,
-                16,
-                12));
-        ChestGenHooks.addItem(
-            "pyramidDesertyChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Platinum, 1L),
-                2,
-                8,
-                4));
-        ChestGenHooks.addItem(
-            "pyramidDesertyChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 2, 8, 2));
-        ChestGenHooks.addItem(
-            "pyramidDesertyChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), 2, 8, 2));
-        ChestGenHooks.addItem(
-            "pyramidDesertyChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L),
-                2,
-                8,
-                2));
-        ChestGenHooks.addItem(
-            "pyramidDesertyChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 2, 8, 2));
-        ChestGenHooks.addItem(
-            "pyramidDesertyChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L),
-                2,
-                8,
-                4));
-        ChestGenHooks.addItem(
-            "pyramidDesertyChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L),
-                2,
-                8,
-                4));
-
-        ChestGenHooks.addItem(
-            "pyramidJungleChest",
-            new WeightedRandomChestContent(ItemList.Coin_Gold_Ancient.get(1L), 16, 64, 10));
-        ChestGenHooks.addItem(
-            "pyramidJungleChest",
-            new WeightedRandomChestContent(ItemList.ZPM.getWithCharge(1L, 2147483647), 1, 1, 1));
-        ChestGenHooks.addItem(
-            "pyramidJungleChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L),
-                4,
-                16,
-                12));
-        ChestGenHooks.addItem(
-            "pyramidJungleChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 2, 8, 2));
-        ChestGenHooks.addItem(
-            "pyramidJungleChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), 2, 8, 2));
-        ChestGenHooks.addItem(
-            "pyramidJungleChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L),
-                2,
-                8,
-                2));
-        ChestGenHooks.addItem(
-            "pyramidJungleChest",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 2, 8, 2));
-        ChestGenHooks.addItem(
-            "pyramidJungleChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L),
-                2,
-                8,
-                4));
-        ChestGenHooks.addItem(
-            "pyramidJungleChest",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L),
-                2,
-                8,
-                4));
-
-        ChestGenHooks.addItem(
-            "pyramidJungleDispenser",
-            new WeightedRandomChestContent(new ItemStack(Items.fire_charge, 1), 2, 8, 30));
-
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1L),
-                1,
-                4,
-                12));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Lead, 1L), 1, 4, 3));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L), 1, 4, 6));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L), 1, 4, 6));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), 1, 4, 2));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L),
-                1,
-                4,
-                2));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), 1, 4, 2));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetRed, 1L),
-                1,
-                4,
-                4));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GarnetYellow, 1L),
-                1,
-                4,
-                4));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L), 1, 4, 2));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Emerald, 1L), 1, 4, 2));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.DamascusSteel, 1L),
-                1,
-                4,
-                1));
-        ChestGenHooks.addItem(
-            "mineshaftCorridor",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.DamascusSteel, 1L),
-                1,
-                4,
-                1));
-
-        ChestGenHooks
-            .addItem("villageBlacksmith", new WeightedRandomChestContent(ItemList.McGuffium_239.get(1L), 1, 1, 1));
-        ChestGenHooks.addItem(
-            "villageBlacksmith",
-            new WeightedRandomChestContent(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1L), 1, 4, 6));
-        ChestGenHooks.addItem(
-            "villageBlacksmith",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neodymium, 1L),
-                2,
-                8,
-                6));
-        ChestGenHooks.addItem(
-            "villageBlacksmith",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Manganese, 1L),
-                2,
-                8,
-                12));
-        ChestGenHooks.addItem(
-            "villageBlacksmith",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L),
-                4,
-                12,
-                12));
-        ChestGenHooks.addItem(
-            "villageBlacksmith",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L),
-                4,
-                12,
-                12));
-        ChestGenHooks.addItem(
-            "villageBlacksmith",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Brass, 1L),
-                4,
-                12,
-                12));
-        ChestGenHooks.addItem(
-            "villageBlacksmith",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.DamascusSteel, 1L),
-                4,
-                12,
-                1));
-
-        ChestGenHooks
-            .addItem("strongholdCrossing", new WeightedRandomChestContent(ItemList.Bottle_Holy_Water.get(1L), 4, 8, 6));
-        ChestGenHooks
-            .addItem("strongholdCrossing", new WeightedRandomChestContent(ItemList.McGuffium_239.get(1L), 1, 1, 10));
-
-        ChestGenHooks.addItem(
-            "strongholdCorridor",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.DamascusSteel, 1L),
-                1,
-                4,
-                6));
-        ChestGenHooks.addItem(
-            "strongholdCorridor",
-            new WeightedRandomChestContent(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.DamascusSteel, 1L),
-                1,
-                4,
-                6));
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_CraftingRecipeLoader.java b/src/main/java/gregtech/loaders/postload/GT_CraftingRecipeLoader.java
deleted file mode 100644
index fff50aff2f..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_CraftingRecipeLoader.java
+++ /dev/null
@@ -1,2013 +0,0 @@
-package gregtech.loaders.postload;
-
-import static gregtech.api.enums.Mods.Forestry;
-import static gregtech.api.enums.Mods.GraviSuite;
-import static gregtech.api.enums.Mods.IndustrialCraft2;
-import static gregtech.api.enums.Mods.NotEnoughItems;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import net.minecraft.init.Blocks;
-import net.minecraft.init.Items;
-import net.minecraft.item.ItemStack;
-
-import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader;
-
-import gregtech.GT_Mod;
-import gregtech.api.enums.Dyes;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.OreDictNames;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.enums.ToolDictNames;
-import gregtech.api.util.GT_Log;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import ic2.core.Ic2Items;
-
-public class GT_CraftingRecipeLoader implements Runnable {
-
-    private static final String aTextIron1 = "X X";
-    private static final String aTextIron2 = "XXX";
-    private static final long bits_no_remove_buffered = GT_ModHandler.RecipeBits.NOT_REMOVABLE
-        | GT_ModHandler.RecipeBits.BUFFERED;
-    private static final long bits = GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE
-        | GT_ModHandler.RecipeBits.BUFFERED;
-    private static final String aTextPlateWrench = "PwP";
-
-    @Override
-    public void run() {
-        GT_Log.out.println("GT_Mod: Adding nerfed Vanilla Recipes.");
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.bucket, 1),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
-            new Object[] { "XhX", " X ", 'X', OrePrefixes.plate.get(Materials.AnyIron) });
-        ItemStack tMat = new ItemStack(Items.iron_ingot);
-        {
-            ItemStack tStack;
-            if (null != (tStack = GT_ModHandler.removeRecipe(tMat, tMat, null, null, null, null, null, null, null))) {
-                GT_ModHandler.addCraftingRecipe(
-                    tStack,
-                    bits_no_remove_buffered | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
-                    new Object[] { "ShS", "XZX", "SdS", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'S',
-                        OrePrefixes.screw.get(Materials.Steel), 'Z', OrePrefixes.spring.get(Materials.Steel) });
-            }
-        }
-        {
-            ItemStack tStack;
-            if (null != (tStack = GT_ModHandler.removeRecipe(tMat, tMat, null, tMat, tMat, null, tMat, tMat, null))) {
-                GT_ModHandler.addCraftingRecipe(
-                    tStack,
-                    bits_no_remove_buffered | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
-                    new Object[] { "XX ", "XXh", "XX ", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'S',
-                        OrePrefixes.stick.get(Materials.Wood), 'I', OrePrefixes.ingot.get(Materials.AnyIron) });
-            }
-        }
-        {
-            ItemStack tStack;
-            if (null != (tStack = GT_ModHandler.removeRecipe(tMat, null, tMat, tMat, null, tMat, tMat, tMat, tMat))) {
-                GT_ModHandler.addCraftingRecipe(
-                    tStack,
-                    bits_no_remove_buffered | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
-                    new Object[] { aTextIron1, "XhX", aTextIron2, 'X', OrePrefixes.plate.get(Materials.AnyIron), 'S',
-                        OrePrefixes.stick.get(Materials.Wood), 'I', OrePrefixes.ingot.get(Materials.AnyIron) });
-            }
-        }
-        {
-            ItemStack tStack;
-            if (null != (tStack = GT_ModHandler
-                .removeRecipe(tMat, null, tMat, tMat, new ItemStack(Blocks.chest, 1, 0), tMat, null, tMat, null))) {
-                GT_ModHandler.addCraftingRecipe(
-                    tStack,
-                    bits_no_remove_buffered | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
-                    new Object[] { "XwX", "XCX", " X ", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'S',
-                        OrePrefixes.stick.get(Materials.Wood), 'I', OrePrefixes.ingot.get(Materials.AnyIron), 'C',
-                        "craftingChest" });
-            }
-        }
-        {
-            ItemStack tStack;
-            if (null != (tStack = GT_ModHandler.removeRecipe(tMat, tMat, tMat, tMat, tMat, tMat, null, null, null))) {
-                tStack.stackSize /= 2;
-                GT_ModHandler.addCraftingRecipe(
-                    tStack,
-                    bits_no_remove_buffered | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
-                    new Object[] { " w ", aTextIron2, aTextIron2, 'X', OrePrefixes.stick.get(Materials.AnyIron), 'S',
-                        OrePrefixes.stick.get(Materials.Wood), 'I', OrePrefixes.ingot.get(Materials.AnyIron) });
-            }
-        }
-
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("ironFence", 6L),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.REVERSIBLE,
-            new Object[] { aTextIron2, aTextIron2, " w ", 'X', OrePrefixes.stick.get(Materials.AnyIron), 'S',
-                OrePrefixes.stick.get(Materials.Wood), 'I', OrePrefixes.ingot.get(Materials.AnyIron) });
-
-        tMat = new ItemStack(Items.gold_ingot);
-        {
-            ItemStack tStack;
-            if (null != (tStack = GT_ModHandler.removeRecipe(tMat, tMat, null, null, null, null, null, null, null))) {
-                GT_ModHandler.addCraftingRecipe(
-                    tStack,
-                    bits_no_remove_buffered | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
-                    new Object[] { "ShS", "XZX", "SdS", 'X', OrePrefixes.plate.get(Materials.Gold), 'S',
-                        OrePrefixes.screw.get(Materials.Steel), 'Z', OrePrefixes.spring.get(Materials.Steel) });
-            }
-        }
-        tMat = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 1L);
-        {
-            ItemStack tStack;
-            if (null != (tStack = GT_ModHandler.removeRecipe(tMat, tMat, tMat, tMat, tMat, tMat, null, null, null))) {
-                GT_ModHandler.addCraftingRecipe(
-                    tStack,
-                    bits_no_remove_buffered | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_RECIPES,
-                    new Object[] { aTextIron2, aTextIron2, 'X', OrePrefixes.plate.get(Materials.Rubber) });
-            }
-        }
-        GT_ModHandler.removeRecipeByOutputDelayed(ItemList.Bottle_Empty.get(1L));
-        GT_ModHandler.removeRecipeByOutputDelayed(ItemList.IC2_Spray_WeedEx.get(1L));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("reBattery", 1L));
-        GT_ModHandler.removeRecipeByOutputDelayed(new ItemStack(Blocks.tnt));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("dynamite", 1L));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("industrialTnt", 1L));
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getModItem(Forestry.ID, "stamps", 1L, 0));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getModItem(Forestry.ID, "stamps", 1L, 1));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getModItem(Forestry.ID, "stamps", 1L, 2));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getModItem(Forestry.ID, "stamps", 1L, 3));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getModItem(Forestry.ID, "stamps", 1L, 4));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getModItem(Forestry.ID, "stamps", 1L, 5));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getModItem(Forestry.ID, "stamps", 1L, 6));
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getModItem(Forestry.ID, "engine", 1L, 0));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getModItem(Forestry.ID, "engine", 1L, 1));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getModItem(Forestry.ID, "engine", 1L, 2));
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getModItem(Forestry.ID, "engine", 1L, 4));
-
-        ItemStack tStack = GT_ModHandler
-            .removeRecipe(new ItemStack(Blocks.planks, 1, 0), null, null, new ItemStack(Blocks.planks, 1, 0));
-        if (tStack != null) {
-            GT_ModHandler.addCraftingRecipe(
-                GT_Utility.copyAmount(
-                    GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize : tStack.stackSize * 5 / 4,
-                    tStack),
-                bits_no_remove_buffered,
-                new Object[] { "s", "P", "P", 'P', OrePrefixes.plank.get(Materials.Wood) });
-            GT_ModHandler.addCraftingRecipe(
-                GT_Utility.copyAmount(
-                    GT_Mod.gregtechproxy.mNerfedWoodPlank ? tStack.stackSize / 2 : tStack.stackSize,
-                    tStack),
-                bits_no_remove_buffered,
-                new Object[] { "P", "P", 'P', OrePrefixes.plank.get(Materials.Wood) });
-        }
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.stone_button, 2, 0),
-            bits_no_remove_buffered,
-            new Object[] { "S", "S", 'S', OrePrefixes.stone });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.stone_button, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.stone });
-
-        GT_Log.out.println("GT_Mod: Adding Vanilla Convenience Recipes.");
-
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.stonebrick, 1, 3),
-            bits_no_remove_buffered,
-            new Object[] { "f", "X", 'X', new ItemStack(Blocks.double_stone_slab, 1, 8) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.gravel, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { "h", "X", 'X', new ItemStack(Blocks.cobblestone, 1, 0) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.sand, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { "h", "X", 'X', new ItemStack(Blocks.gravel, 1, 0) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.cobblestone, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { "h", "X", 'X', new ItemStack(Blocks.stone, 1, 0) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.stonebrick, 1, 2),
-            bits_no_remove_buffered,
-            new Object[] { "h", "X", 'X', new ItemStack(Blocks.stonebrick, 1, 0) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.double_stone_slab, 1, 8),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.double_stone_slab, 1, 0) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.double_stone_slab, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.double_stone_slab, 1, 8) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.double_stone_slab, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 0) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.cobblestone, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 3) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.brick_block, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 4) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.stonebrick, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 5) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.nether_brick, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 6) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.quartz_block, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 7) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.double_stone_slab, 1, 8),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.stone_slab, 1, 8) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.planks, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 0) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.planks, 1, 1),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 1) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.planks, 1, 2),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 2) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.planks, 1, 3),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 3) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.planks, 1, 4),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 4) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.planks, 1, 5),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 5) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.planks, 1, 6),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 6) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.planks, 1, 7),
-            bits_no_remove_buffered,
-            new Object[] { "B", "B", 'B', new ItemStack(Blocks.wooden_slab, 1, 7) });
-
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.stick, 2, 0),
-            bits_no_remove_buffered,
-            new Object[] { "s", "X", 'X', new ItemStack(Blocks.deadbush, 1, 32767) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.stick, 2, 0),
-            bits_no_remove_buffered,
-            new Object[] { "s", "X", 'X', new ItemStack(Blocks.tallgrass, 1, 0) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.stick, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { "s", "X", 'X', OrePrefixes.treeSapling });
-
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.comparator, 1, 0),
-            bits_no_remove_buffered,
-            new Object[] { " T ", "TQT", "SSS", 'Q', OreDictNames.craftingQuartz, 'S', OrePrefixes.stoneSmooth, 'T',
-                OreDictNames.craftingRedstoneTorch });
-
-        GT_Log.out.println("GT_Mod: Adding Tool Recipes.");
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.minecart, 1),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
-            new Object[] { " h ", "PwP", "WPW", 'P', OrePrefixes.plate.get(Materials.AnyIron), 'W',
-                ItemList.Component_Minecart_Wheels_Iron });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.minecart, 1),
-            bits_no_remove_buffered,
-            new Object[] { " h ", "PwP", "WPW", 'P', OrePrefixes.plate.get(Materials.Steel), 'W',
-                ItemList.Component_Minecart_Wheels_Steel });
-
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.chest_minecart, 1),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.REVERSIBLE
-                | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
-            new Object[] { "X", "C", 'C', new ItemStack(Items.minecart, 1), 'X', OreDictNames.craftingChest });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.furnace_minecart, 1),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.REVERSIBLE
-                | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
-            new Object[] { "X", "C", 'C', new ItemStack(Items.minecart, 1), 'X', OreDictNames.craftingFurnace });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.hopper_minecart, 1),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.REVERSIBLE
-                | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
-            new Object[] { "X", "C", 'C', new ItemStack(Items.minecart, 1), 'X',
-                new ItemStack(Blocks.hopper, 1, 32767) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.tnt_minecart, 1),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.REVERSIBLE
-                | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
-            new Object[] { "X", "C", 'C', new ItemStack(Items.minecart, 1), 'X', new ItemStack(Blocks.tnt, 1, 32767) });
-
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.chainmail_helmet, 1),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.REVERSIBLE
-                | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
-            new Object[] { "RRR", "RhR", 'R', OrePrefixes.ring.get(Materials.Steel) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.chainmail_chestplate, 1),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.REVERSIBLE
-                | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
-            new Object[] { "RhR", "RRR", "RRR", 'R', OrePrefixes.ring.get(Materials.Steel) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.chainmail_leggings, 1),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.REVERSIBLE
-                | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
-            new Object[] { "RRR", "RhR", "R R", 'R', OrePrefixes.ring.get(Materials.Steel) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.chainmail_boots, 1),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.REVERSIBLE
-                | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
-            new Object[] { "R R", "RhR", 'R', OrePrefixes.ring.get(Materials.Steel) });
-
-        GT_Log.out.println("GT_Mod: Adding Wool and Color releated Recipes.");
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 1),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeOrange });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 2),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeMagenta });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 3),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeLightBlue });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 4),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeYellow });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 5),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeLime });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 6),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyePink });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 7),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeGray });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 8),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeLightGray });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 9),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeCyan });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 10),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyePurple });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 11),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeBlue });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 12),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeBrown });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 13),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeGreen });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 14),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeRed });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Blocks.wool, 1, 15),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.wool, 1, 0), Dyes.dyeBlack });
-
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.stained_glass, 8, 0),
-            bits_no_remove_buffered,
-            new Object[] { "GGG", "GDG", "GGG", 'G', new ItemStack(Blocks.glass, 1), 'D', Dyes.dyeWhite });
-
-        GT_Log.out.println("GT_Mod: Putting a Potato on a Stick.");
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Packaged_PotatoChips.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.foil.get(Materials.Aluminium), ItemList.Food_PotatoChips });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Packaged_ChiliChips.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.foil.get(Materials.Aluminium), ItemList.Food_ChiliChips });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Packaged_Fries.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.plateDouble.get(Materials.Paper), ItemList.Food_Fries });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Chum_On_Stick.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.stick.get(Materials.Wood), ItemList.Food_Chum });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Potato_On_Stick.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.stick.get(Materials.Wood), ItemList.Food_Raw_Potato });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Potato_On_Stick_Roasted.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.stick.get(Materials.Wood), ItemList.Food_Baked_Potato });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Dough.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.bucket.get(Materials.Water), OrePrefixes.dust.get(Materials.Wheat) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Dough_Sugar.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "foodDough", OrePrefixes.dust.get(Materials.Sugar) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Dough_Chocolate.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "foodDough", OrePrefixes.dust.get(Materials.Cocoa) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Dough_Chocolate.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "foodDough", OrePrefixes.dust.get(Materials.Chocolate) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Flat_Dough.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "foodDough", ToolDictNames.craftingToolRollingPin });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Raw_Bun.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "foodDough" });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Raw_Bread.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "foodDough", "foodDough" });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Raw_Baguette.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "foodDough", "foodDough", "foodDough" });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Raw_Cake.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Dough_Sugar, ItemList.Food_Dough_Sugar, ItemList.Food_Dough_Sugar,
-                ItemList.Food_Dough_Sugar });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_ChiliChips.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_PotatoChips, OrePrefixes.dust.get(Materials.Chili) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sliced_Buns.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sliced_Breads.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sliced_Baguettes.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sliced_Bun.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Buns });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sliced_Bread.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Breads });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sliced_Baguette.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Baguettes });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Burger_Veggie.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Buns, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato,
-                ItemList.Food_Sliced_Onion });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Burger_Cheese.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Buns, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
-                ItemList.Food_Sliced_Cheese });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Burger_Meat.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Buns, OrePrefixes.dust.get(Materials.MeatCooked) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Burger_Chum.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Buns, ItemList.Food_Chum });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Burger_Veggie.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Cucumber,
-                ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Burger_Cheese.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Cheese,
-                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Burger_Meat.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun,
-                OrePrefixes.dust.get(Materials.MeatCooked) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Burger_Chum.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Bun, ItemList.Food_Sliced_Bun, ItemList.Food_Chum });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sandwich_Veggie.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Breads, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber,
-                ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sandwich_Cheese.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Breads, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
-                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sandwich_Bacon.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Breads, new ItemStack(Items.cooked_porkchop, 1) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sandwich_Steak.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Breads, new ItemStack(Items.cooked_beef, 1) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sandwich_Veggie.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Cucumber,
-                ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato,
-                ItemList.Food_Sliced_Onion });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sandwich_Cheese.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Cheese,
-                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
-                ItemList.Food_Sliced_Cheese });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sandwich_Bacon.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread,
-                new ItemStack(Items.cooked_porkchop, 1) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Sandwich_Steak.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Bread, ItemList.Food_Sliced_Bread,
-                new ItemStack(Items.cooked_beef, 1) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Large_Sandwich_Veggie.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Baguettes, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber,
-                ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato,
-                ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Large_Sandwich_Cheese.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Baguettes, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
-                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
-                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Large_Sandwich_Bacon.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Baguettes, new ItemStack(Items.cooked_porkchop, 1),
-                new ItemStack(Items.cooked_porkchop, 1) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Large_Sandwich_Steak.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Baguettes, new ItemStack(Items.cooked_beef, 1),
-                new ItemStack(Items.cooked_beef, 1) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Large_Sandwich_Veggie.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Cucumber,
-                ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato,
-                ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Tomato, ItemList.Food_Sliced_Onion });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Large_Sandwich_Cheese.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Cheese,
-                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
-                ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Large_Sandwich_Bacon.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette,
-                new ItemStack(Items.cooked_porkchop, 1), new ItemStack(Items.cooked_porkchop, 1) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Large_Sandwich_Steak.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Sliced_Baguette, ItemList.Food_Sliced_Baguette,
-                new ItemStack(Items.cooked_beef, 1), new ItemStack(Items.cooked_beef, 1) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Raw_Pizza_Veggie.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Flat_Dough, ItemList.Food_Sliced_Cucumber, ItemList.Food_Sliced_Tomato,
-                ItemList.Food_Sliced_Onion });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Raw_Pizza_Cheese.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Flat_Dough, ItemList.Food_Sliced_Cheese, ItemList.Food_Sliced_Cheese,
-                ItemList.Food_Sliced_Cheese });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            ItemList.Food_Raw_Pizza_Meat.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { ItemList.Food_Flat_Dough, OrePrefixes.dust.get(Materials.MeatCooked) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Food_Sliced_Cheese.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "kX", 'X', "foodCheese" });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Food_Sliced_Lemon.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "kX", 'X', "cropLemon" });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Food_Sliced_Tomato.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "kX", 'X', "cropTomato" });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Food_Sliced_Onion.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "kX", 'X', "cropOnion" });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Food_Sliced_Cucumber.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "kX", 'X', "cropCucumber" });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Food_Sliced_Bun.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "kX", 'X', ItemList.Food_Baked_Bun });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Food_Sliced_Bread.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "kX", 'X', ItemList.Food_Baked_Bread });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Food_Sliced_Baguette.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "kX", 'X', ItemList.Food_Baked_Baguette });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Food_Raw_PotatoChips.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "kX", 'X', "cropPotato" });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Food_Raw_Cookie.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "kX", 'X', ItemList.Food_Dough_Chocolate });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Food_Raw_Fries.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "k", "X", 'X', "cropPotato" });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.bowl, 1),
-            bits_no_remove_buffered,
-            new Object[] { "k", "X", 'X', OrePrefixes.plank.get(Materials.Wood) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Rubber, 1L),
-            bits_no_remove_buffered,
-            new Object[] { "k", "X", 'X', OrePrefixes.plate.get(Materials.Rubber) });
-
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.arrow, 1),
-            bits_no_remove_buffered | GT_ModHandler.RecipeBits.DELETE_ALL_OTHER_SHAPED_RECIPES,
-            new Object[] { "  H", " S ", "F  ", 'H', new ItemStack(Items.flint, 1, 32767), 'S',
-                OrePrefixes.stick.get(Materials.Wood), 'F', OreDictNames.craftingFeather });
-
-        GT_ModHandler.removeRecipe(
-            new ItemStack(Blocks.planks),
-            null,
-            new ItemStack(Blocks.planks),
-            null,
-            new ItemStack(Blocks.planks));
-        GT_ModHandler.removeRecipeByOutputDelayed(ItemList.Food_Baked_Bread.get(1L));
-        GT_ModHandler.removeRecipeByOutputDelayed(new ItemStack(Items.cookie, 1));
-        GT_ModHandler.removeRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L));
-        if (null != GT_Utility.setStack(
-            GT_ModHandler.getRecipeOutput(
-                true,
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L),
-                null,
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1L)),
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1L))) {
-            GT_Log.out.println("GT_Mod: Changed Forestrys Bronze Recipe");
-        }
-        tStack = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1L);
-
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getRecipeOutput(
-                null,
-                new ItemStack(Blocks.sand, 1, 0),
-                null,
-                null,
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Apatite, 1L),
-                null,
-                null,
-                new ItemStack(Blocks.sand, 1, 0),
-                null),
-            GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { "S", "A", "S", 'A', OrePrefixes.dust.get(Materials.Apatite), 'S',
-                new ItemStack(Blocks.sand, 1, 32767) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getRecipeOutput(
-                tStack,
-                tStack,
-                tStack,
-                tStack,
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Apatite, 1L),
-                tStack,
-                tStack,
-                tStack,
-                tStack),
-            GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { "SSS", "SAS", "SSS", 'A', OrePrefixes.dust.get(Materials.Apatite), 'S',
-                OrePrefixes.dust.get(Materials.Ash) });
-
-        GT_Log.out.println("GT_Mod: Adding Mixed Metal Ingot Recipes.");
-        GT_ModHandler.removeRecipeByOutputDelayed(ItemList.IC2_Mixed_Metal_Ingot.get(1L));
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.AnyIron), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(1L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Nickel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Invar), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(2L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Steel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.StainlessSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Titanium), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(3L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(4L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Tungsten), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(5L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(5L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(6L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Bronze), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(5L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(5L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(6L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Brass), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(8L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(8L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(8L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(10L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.Tin) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(10L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.Zinc) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(10L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.TungstenSteel), 'Y',
-                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.Aluminium) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(12L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
-                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.AnnealedCopper) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(12L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
-                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.RoseGold) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(12L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
-                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.AstralSilver) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(14L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
-                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z',
-                OrePrefixes.plate.get(Materials.AnnealedCopper) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(14L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
-                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.RoseGold) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(14L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Iridium), 'Y',
-                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.AstralSilver) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(16L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSG), 'Y',
-                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z',
-                OrePrefixes.plate.get(Materials.AnnealedCopper) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(16L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSG), 'Y',
-                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.RoseGold) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(16L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSG), 'Y',
-                OrePrefixes.plate.get(Materials.StainlessSteel), 'Z', OrePrefixes.plate.get(Materials.AstralSilver) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(18L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSE), 'Y',
-                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.AnnealedCopper) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(18L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSE), 'Y',
-                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.RoseGold) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(18L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSE), 'Y',
-                OrePrefixes.plate.get(Materials.Chrome), 'Z', OrePrefixes.plate.get(Materials.AstralSilver) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(20L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSS), 'Y',
-                OrePrefixes.plate.get(Materials.TungstenSteel), 'Z', OrePrefixes.plate.get(Materials.AnnealedCopper) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(20L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSS), 'Y',
-                OrePrefixes.plate.get(Materials.TungstenSteel), 'Z', OrePrefixes.plate.get(Materials.RoseGold) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(20L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.HSSS), 'Y',
-                OrePrefixes.plate.get(Materials.TungstenSteel), 'Z', OrePrefixes.plate.get(Materials.AstralSilver) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Long_Distance_Pipeline_Fluid.get(1L),
-            GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE,
-            new Object[] { "GPG", "IwI", "GPG", 'G', GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Steel, 1L),
-                'P', GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 1L), 'I',
-                GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Steel, 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Long_Distance_Pipeline_Item.get(1L),
-            GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE,
-            new Object[] { "GPG", "IwI", "GPG", 'G', GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Steel, 1L),
-                'P', GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 1L), 'I',
-                GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Tin, 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Long_Distance_Pipeline_Fluid_Pipe.get(32L),
-            GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE,
-            new Object[] { "PPP", "IwI", "PPP", 'P', GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 1L),
-                'I', GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Steel, 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Long_Distance_Pipeline_Item_Pipe.get(32L),
-            GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE,
-            new Object[] { "PPP", "IwI", "PPP", 'P', GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 1L),
-                'I', GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Tin, 1L) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(22L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Naquadah), 'Y',
-                OrePrefixes.plate.get(Materials.Iridium), 'Z', OrePrefixes.plate.get(Materials.HSSG) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(24L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Naquadah), 'Y',
-                OrePrefixes.plate.get(Materials.Iridium), 'Z', OrePrefixes.plate.get(Materials.HSSE) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(26L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Naquadah), 'Y',
-                OrePrefixes.plate.get(Materials.Iridium), 'Z', OrePrefixes.plate.get(Materials.HSSS) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(28L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.NaquadahAlloy), 'Y',
-                OrePrefixes.plate.get(Materials.Osmiridium), 'Z', OrePrefixes.plate.get(Materials.HSSE) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(30L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.NaquadahAlloy), 'Y',
-                OrePrefixes.plate.get(Materials.Osmiridium), 'Z', OrePrefixes.plate.get(Materials.HSSG) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(32L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.NaquadahAlloy), 'Y',
-                OrePrefixes.plate.get(Materials.Osmiridium), 'Z', OrePrefixes.plate.get(Materials.HSSS) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(34L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Neutronium), 'Y',
-                OrePrefixes.plate.get(Materials.EnergeticAlloy), 'Z', OrePrefixes.plate.get(Materials.Naquadah) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(36L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Neutronium), 'Y',
-                OrePrefixes.plate.get(Materials.EnergeticAlloy), 'Z', OrePrefixes.plate.get(Materials.NaquadahAlloy) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(38L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.Neutronium), 'Y',
-                OrePrefixes.plate.get(Materials.EnergeticAlloy), 'Z', OrePrefixes.plate.get(Materials.Draconium) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(40L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.BlackPlutonium), 'Y',
-                OrePrefixes.plate.get(Materials.Sunnarium), 'Z', OrePrefixes.plate.get(Materials.Naquadah) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(42L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.BlackPlutonium), 'Y',
-                OrePrefixes.plate.get(Materials.Sunnarium), 'Z', OrePrefixes.plate.get(Materials.NaquadahAlloy) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(44L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.BlackPlutonium), 'Y',
-                OrePrefixes.plate.get(Materials.Sunnarium), 'Z', OrePrefixes.plate.get(Materials.Draconium) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(48L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.DraconiumAwakened), 'Y',
-                OrePrefixes.plate.get(Materials.Neutronium), 'Z', OrePrefixes.plate.get(Materials.HSSS) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(52L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.DraconiumAwakened), 'Y',
-                OrePrefixes.plate.get(Materials.Neutronium), 'Z', OrePrefixes.plate.get(Materials.Naquadah) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(56L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.DraconiumAwakened), 'Y',
-                OrePrefixes.plate.get(Materials.Neutronium), 'Z', OrePrefixes.plate.get(Materials.NaquadahAlloy) });
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.IC2_Mixed_Metal_Ingot.get(64L),
-            bits_no_remove_buffered,
-            new Object[] { "X", "Y", "Z", 'X', OrePrefixes.plate.get(Materials.DraconiumAwakened), 'Y',
-                OrePrefixes.plate.get(Materials.Neutronium), 'Z', OrePrefixes.plate.get(Materials.BlackPlutonium) });
-
-        GT_Log.out.println("GT_Mod: Beginning to add regular Crafting Recipes.");
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("scaffold", 4L),
-            bits_no_remove_buffered,
-            new Object[] { "WWW", " S ", "S S", 'W', OrePrefixes.plank.get(Materials.Wood), 'S',
-                OrePrefixes.stick.get(Materials.Wood) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.stick.get(Materials.AnyIron), OrePrefixes.dust.get(Materials.Redstone),
-                OrePrefixes.dust.get(Materials.Redstone), OrePrefixes.dust.get(Materials.Redstone),
-                OrePrefixes.dust.get(Materials.Redstone) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Paper, 1L),
-            bits_no_remove_buffered,
-            new Object[] { "PPk", 'P', OrePrefixes.plate.get(Materials.Paper) });
-
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.torch, 2),
-            bits_no_remove_buffered,
-            new Object[] { "C", "S", 'C', OrePrefixes.dust.get(Materials.Sulfur), 'S',
-                OrePrefixes.stick.get(Materials.Wood) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.torch, 6),
-            bits_no_remove_buffered,
-            new Object[] { "C", "S", 'C', OrePrefixes.dust.get(Materials.TricalciumPhosphate), 'S',
-                OrePrefixes.stick.get(Materials.Wood) });
-
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.piston, 1),
-            bits_no_remove_buffered,
-            new Object[] { "WWW", "CBC", "CRC", 'W', OrePrefixes.plank.get(Materials.Wood), 'C',
-                OrePrefixes.stoneCobble, 'R', OrePrefixes.dust.get(Materials.Redstone), 'B',
-                OrePrefixes.ingot.get(Materials.AnyIron) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.piston, 1),
-            bits_no_remove_buffered,
-            new Object[] { "WWW", "CBC", "CRC", 'W', OrePrefixes.plank.get(Materials.Wood), 'C',
-                OrePrefixes.stoneCobble, 'R', OrePrefixes.dust.get(Materials.Redstone), 'B',
-                OrePrefixes.ingot.get(Materials.AnyBronze) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.piston, 1),
-            bits_no_remove_buffered,
-            new Object[] { "WWW", "CBC", "CRC", 'W', OrePrefixes.plank.get(Materials.Wood), 'C',
-                OrePrefixes.stoneCobble, 'R', OrePrefixes.dust.get(Materials.Redstone), 'B',
-                OrePrefixes.ingot.get(Materials.Aluminium) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.piston, 1),
-            bits_no_remove_buffered,
-            new Object[] { "WWW", "CBC", "CRC", 'W', OrePrefixes.plank.get(Materials.Wood), 'C',
-                OrePrefixes.stoneCobble, 'R', OrePrefixes.dust.get(Materials.Redstone), 'B',
-                OrePrefixes.ingot.get(Materials.Steel) });
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Blocks.piston, 1),
-            bits_no_remove_buffered,
-            new Object[] { "WWW", "CBC", "CRC", 'W', OrePrefixes.plank.get(Materials.Wood), 'C',
-                OrePrefixes.stoneCobble, 'R', OrePrefixes.dust.get(Materials.Redstone), 'B',
-                OrePrefixes.ingot.get(Materials.Titanium) });
-
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("reactorVent", 1L, 1),
-            bits_no_remove_buffered,
-            new Object[] { "AIA", "I I", "AIA", 'I', new ItemStack(Blocks.iron_bars, 1), 'A',
-                OrePrefixes.plate.get(Materials.Aluminium) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_ModHandler.getIC2Item("reactorPlatingExplosive", 1L),
-            bits_no_remove_buffered,
-            new Object[] { GT_ModHandler.getIC2Item("reactorPlating", 1L), OrePrefixes.plate.get(Materials.Lead) });
-        if (!Materials.Steel.mBlastFurnaceRequired) {
-            GT_ModHandler.addShapelessCraftingRecipe(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 1L),
-                bits_no_remove_buffered,
-                new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Coal),
-                    OrePrefixes.dust.get(Materials.Coal) });
-        }
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 1L));
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 3L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper),
-                OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.Zinc) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Brass, 9L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite),
-                OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Zinc) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 3L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper),
-                OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.Tin) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Bronze, 9L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tetrahedrite),
-                OrePrefixes.dust.get(Materials.Tetrahedrite), OrePrefixes.dust.get(Materials.Tin) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Invar, 9L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Iron),
-                OrePrefixes.dust.get(Materials.Nickel) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Cupronickel, 6L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Nickel), OrePrefixes.dust.get(Materials.AnyCopper) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RoseGold, 4L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Gold), OrePrefixes.dust.get(Materials.Gold),
-                OrePrefixes.dust.get(Materials.Gold), OrePrefixes.dust.get(Materials.Gold),
-                OrePrefixes.dust.get(Materials.AnyCopper) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SterlingSilver, 4L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Silver), OrePrefixes.dust.get(Materials.Silver),
-                OrePrefixes.dust.get(Materials.Silver), OrePrefixes.dust.get(Materials.Silver),
-                OrePrefixes.dust.get(Materials.AnyCopper) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BlackBronze, 4L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Gold), OrePrefixes.dust.get(Materials.Silver),
-                OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper),
-                OrePrefixes.dust.get(Materials.AnyCopper) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BismuthBronze, 4L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Bismuth), OrePrefixes.dust.get(Materials.Zinc),
-                OrePrefixes.dust.get(Materials.AnyCopper), OrePrefixes.dust.get(Materials.AnyCopper),
-                OrePrefixes.dust.get(Materials.AnyCopper) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CobaltBrass, 8L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass),
-                OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass),
-                OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Brass),
-                OrePrefixes.dust.get(Materials.Brass), OrePrefixes.dust.get(Materials.Aluminium),
-                OrePrefixes.dust.get(Materials.Cobalt) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DamascusSteel, 2L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dustSmall.get(Materials.Nickel),
-                OrePrefixes.dustSmall.get(Materials.Nickel), OrePrefixes.dustSmall.get(Materials.Nickel),
-                OrePrefixes.dustTiny.get(Materials.Coal), OrePrefixes.dustTiny.get(Materials.Silicon),
-                OrePrefixes.dustTiny.get(Materials.Manganese), OrePrefixes.dustTiny.get(Materials.Chrome),
-                OrePrefixes.dustTiny.get(Materials.Molybdenum) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DamascusSteel, 2L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dustSmall.get(Materials.Manganese),
-                OrePrefixes.dustSmall.get(Materials.Manganese), OrePrefixes.dustSmall.get(Materials.Chrome),
-                OrePrefixes.dustSmall.get(Materials.Chrome), OrePrefixes.dustTiny.get(Materials.Coal),
-                OrePrefixes.dustTiny.get(Materials.Silicon), OrePrefixes.dustTiny.get(Materials.Vanadium) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RedstoneAlloy, 2L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Redstone), OrePrefixes.dust.get(Materials.Silicon),
-                OrePrefixes.dust.get(Materials.Coal) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CrudeSteel, 2L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Clay), OrePrefixes.dust.get(Materials.Flint),
-                OrePrefixes.dust.get(Materials.Stone) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.ConductiveIron, 2L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.RedstoneAlloy), OrePrefixes.dust.get(Materials.Iron),
-                OrePrefixes.dust.get(Materials.Silver) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.EnergeticAlloy, 2L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.ConductiveIron), OrePrefixes.dust.get(Materials.Gold),
-                OrePrefixes.dust.get(Materials.BlackSteel) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.EnergeticSilver, 2L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.ConductiveIron), OrePrefixes.dust.get(Materials.Silver),
-                OrePrefixes.dust.get(Materials.BlackSteel) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.ElectricalSteel, 2L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Steel), OrePrefixes.dust.get(Materials.Coal),
-                OrePrefixes.dust.get(Materials.Silicon) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Soularium, 2L),
-            bits_no_remove_buffered,
-            new Object[] { new ItemStack(Blocks.soul_sand, 1, 32767), OrePrefixes.dust.get(Materials.Gold),
-                OrePrefixes.dust.get(Materials.Ash) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkSteel, 2L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.ElectricalSteel), OrePrefixes.dust.get(Materials.Coal),
-                OrePrefixes.dust.get(Materials.Obsidian) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Manyullyn, 3L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Ardite), OrePrefixes.dust.get(Materials.Ardite),
-                OrePrefixes.dust.get(Materials.Ardite), OrePrefixes.dust.get(Materials.Ardite),
-                OrePrefixes.dust.get(Materials.Cobalt), OrePrefixes.dust.get(Materials.Cobalt),
-                OrePrefixes.dust.get(Materials.Cobalt), OrePrefixes.dust.get(Materials.Cobalt) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Haderoth, 1L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Rubracium), OrePrefixes.dust.get(Materials.Mithril) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Celenegil, 1L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Platinum), OrePrefixes.dust.get(Materials.Orichalcum) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.IronWood, 2L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.LiveRoot),
-                OrePrefixes.dustTiny.get(Materials.Gold) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Hepatizon, 3L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Copper), OrePrefixes.dust.get(Materials.Copper),
-                OrePrefixes.dust.get(Materials.Copper), OrePrefixes.dustTiny.get(Materials.Gold),
-                OrePrefixes.dustTiny.get(Materials.Gold), OrePrefixes.dustTiny.get(Materials.Gold),
-                OrePrefixes.dustTiny.get(Materials.Silver), OrePrefixes.dustTiny.get(Materials.Silver),
-                OrePrefixes.dustTiny.get(Materials.Silver) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Angmallen, 2L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Iron), OrePrefixes.dust.get(Materials.Gold) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Inolashite, 1L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Alduorite), OrePrefixes.dust.get(Materials.Ceruclase) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Items.gunpowder, 6),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Coal), OrePrefixes.dust.get(Materials.Coal),
-                OrePrefixes.dust.get(Materials.Coal), OrePrefixes.dust.get(Materials.Sulfur),
-                OrePrefixes.dust.get(Materials.Saltpeter), OrePrefixes.dust.get(Materials.Saltpeter) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Items.gunpowder, 6),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Charcoal), OrePrefixes.dust.get(Materials.Charcoal),
-                OrePrefixes.dust.get(Materials.Charcoal), OrePrefixes.dust.get(Materials.Sulfur),
-                OrePrefixes.dust.get(Materials.Saltpeter), OrePrefixes.dust.get(Materials.Saltpeter) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            new ItemStack(Items.gunpowder, 6),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Carbon), OrePrefixes.dust.get(Materials.Carbon),
-                OrePrefixes.dust.get(Materials.Carbon), OrePrefixes.dust.get(Materials.Sulfur),
-                OrePrefixes.dust.get(Materials.Saltpeter), OrePrefixes.dust.get(Materials.Saltpeter) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.IndiumGalliumPhosphide, 3L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Indium), OrePrefixes.dust.get(Materials.Gallium),
-                OrePrefixes.dust.get(Materials.Phosphorus) });
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 5L),
-            bits_no_remove_buffered,
-            new Object[] { OrePrefixes.dust.get(Materials.Potassium), OrePrefixes.cell.get(Materials.Nitrogen),
-                OrePrefixes.cell.get(Materials.Oxygen), OrePrefixes.cell.get(Materials.Oxygen),
-                OrePrefixes.cell.get(Materials.Oxygen) });
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("carbonFiber", 1L));
-
-        ItemStack[] tChestAndTank = new ItemStack[] { ItemList.Super_Chest_EV.get(1), ItemList.Super_Chest_IV.get(1),
-            ItemList.Super_Chest_HV.get(1), ItemList.Super_Chest_MV.get(1), ItemList.Super_Chest_LV.get(1),
-            ItemList.Quantum_Chest_EV.get(1), ItemList.Quantum_Chest_IV.get(1), ItemList.Quantum_Chest_HV.get(1),
-            ItemList.Quantum_Chest_MV.get(1), ItemList.Quantum_Chest_LV.get(1), ItemList.Super_Tank_EV.get(1),
-            ItemList.Super_Tank_IV.get(1), ItemList.Super_Tank_HV.get(1), ItemList.Super_Tank_MV.get(1),
-            ItemList.Super_Tank_LV.get(1), ItemList.Quantum_Tank_EV.get(1), ItemList.Quantum_Tank_IV.get(1),
-            ItemList.Quantum_Tank_HV.get(1), ItemList.Quantum_Tank_MV.get(1), ItemList.Quantum_Tank_LV.get(1) };
-        for (ItemStack tItem : tChestAndTank) {
-            GT_ModHandler.addShapelessCraftingRecipe(tItem, new Object[] { tItem });
-        }
-
-        List iToRemoveAndHide = Arrays
-            .stream(
-                new String[] { "copperCableItem", "insulatedCopperCableItem", "goldCableItem", "insulatedGoldCableItem",
-                    "insulatedIronCableItem", "glassFiberCableItem", "tinCableItem", "ironCableItem",
-                    "insulatedTinCableItem", "detectorCableItem", "splitterCableItem", "electrolyzer", "cutter" })
-            .map(x -> GT_ModHandler.getIC2Item(x, 1L))
-            .collect(Collectors.toList());
-
-        if (NotEnoughItems.isModLoaded()) {
-            iToRemoveAndHide.forEach(item -> {
-                codechicken.nei.api.API.hideItem(item);
-                GT_ModHandler.removeRecipeByOutputDelayed(item);
-            });
-        }
-
-        Arrays
-            .stream(
-                new String[] { "batBox", "mfeUnit", "lvTransformer", "mvTransformer", "hvTransformer", "evTransformer",
-                    "cesuUnit", "luminator", "teleporter", "energyOMat", "advBattery", "boatElectric", "cropnalyzer",
-                    "coil", "powerunit", "powerunitsmall", "remote", "odScanner", "ovScanner", "solarHelmet",
-                    "staticBoots", "ecMeter", "obscurator", "overclockerUpgrade", "transformerUpgrade",
-                    "energyStorageUpgrade", "ejectorUpgrade", "suBattery", "frequencyTransmitter", "pullingUpgrade" })
-            .map(x -> GT_ModHandler.getIC2Item(x, 1L))
-            .forEach(GT_ModHandler::removeRecipeByOutputDelayed);
-
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("batBox", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "PCP", "BBB", "PPP", 'C', OrePrefixes.cableGt01.get(Materials.Tin), 'P',
-                OrePrefixes.plank.get(Materials.Wood), 'B', OrePrefixes.battery.get(Materials.LV) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("mfeUnit", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "CEC", "EME", "CEC", 'C', OrePrefixes.cableGt01.get(Materials.Gold), 'E',
-                OrePrefixes.battery.get(Materials.IV), 'M', GT_ModHandler.getIC2Item("machine", 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("lvTransformer", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "PCP", "POP", "PCP", 'C', OrePrefixes.cableGt01.get(Materials.Tin), 'O',
-                GT_ModHandler.getIC2Item("coil", 1L), 'P', OrePrefixes.plank.get(Materials.Wood) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("mvTransformer", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "CMC", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'M',
-                GT_ModHandler.getIC2Item("machine", 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("hvTransformer", 1L),
-            bits_no_remove_buffered,
-            new Object[] { " C ", "IMB", " C ", 'C', OrePrefixes.cableGt01.get(Materials.Gold), 'M',
-                GT_ModHandler.getIC2Item("mvTransformer", 1L), 'I', OrePrefixes.circuit.get(Materials.LV), 'B',
-                OrePrefixes.battery.get(Materials.HV) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("evTransformer", 1L),
-            bits_no_remove_buffered,
-            new Object[] { " C ", "IMB", " C ", 'C', OrePrefixes.cableGt01.get(Materials.Aluminium), 'M',
-                GT_ModHandler.getIC2Item("hvTransformer", 1L), 'I', OrePrefixes.circuit.get(Materials.HV), 'B',
-                OrePrefixes.battery.get(Materials.LuV) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("cesuUnit", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "PCP", "BBB", "PPP", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'P',
-                OrePrefixes.plate.get(Materials.Bronze), 'B', OrePrefixes.battery.get(Materials.HV) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("teleporter", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "GFG", "CMC", "GDG", 'C', OrePrefixes.cableGt01.get(Materials.Platinum), 'G',
-                OrePrefixes.circuit.get(Materials.HV), 'D', OrePrefixes.gem.get(Materials.Diamond), 'M',
-                GT_ModHandler.getIC2Item("machine", 1L), 'F', GT_ModHandler.getIC2Item("frequencyTransmitter", 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("energyOMat", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "RBR", "CMC", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'R',
-                OrePrefixes.dust.get(Materials.Redstone), 'B', OrePrefixes.battery.get(Materials.LV), 'M',
-                GT_ModHandler.getIC2Item("machine", 1L) });
-
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("boatElectric", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "CCC", "XWX", aTextIron2, 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'X',
-                OrePrefixes.plate.get(Materials.Iron), 'W', GT_ModHandler.getIC2Item("waterMill", 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("cropnalyzer", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "CC ", "RGR", "RIR", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'R',
-                OrePrefixes.dust.get(Materials.Redstone), 'G', OrePrefixes.block.get(Materials.Glass), 'I',
-                OrePrefixes.circuit.get(Materials.LV) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("coil", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "CCC", "CXC", "CCC", 'C', OrePrefixes.wireGt01.get(Materials.Copper), 'X',
-                OrePrefixes.ingot.get(Materials.AnyIron) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("powerunit", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "BCA", "BIM", "BCA", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'B',
-                OrePrefixes.battery.get(Materials.LV), 'A', GT_ModHandler.getIC2Item("casingiron", 1L), 'I',
-                OrePrefixes.circuit.get(Materials.LV), 'M', GT_ModHandler.getIC2Item("elemotor", 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("powerunitsmall", 1L),
-            bits_no_remove_buffered,
-            new Object[] { " CA", "BIM", " CA", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'B',
-                OrePrefixes.battery.get(Materials.LV), 'A', GT_ModHandler.getIC2Item("casingiron", 1L), 'I',
-                OrePrefixes.circuit.get(Materials.LV), 'M', GT_ModHandler.getIC2Item("elemotor", 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("remote", 1L),
-            bits_no_remove_buffered,
-            new Object[] { " C ", "TLT", " F ", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'L',
-                OrePrefixes.dust.get(Materials.Lapis), 'T', GT_ModHandler.getIC2Item("casingtin", 1L), 'F',
-                GT_ModHandler.getIC2Item("frequencyTransmitter", 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("odScanner", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "PGP", "CBC", "WWW", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'G',
-                OrePrefixes.dust.get(Materials.Glowstone), 'B', OrePrefixes.battery.get(Materials.HV), 'C',
-                OrePrefixes.circuit.get(Materials.HV), 'P', GT_ModHandler.getIC2Item("casinggold", 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("ovScanner", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "PDP", "GCG", "WSW", 'W', OrePrefixes.cableGt01.get(Materials.Gold), 'G',
-                OrePrefixes.dust.get(Materials.Glowstone), 'D', OrePrefixes.battery.get(Materials.IV), 'C',
-                OrePrefixes.circuit.get(Materials.HV), 'P', GT_ModHandler.getIC2Item("casinggold", 1L), 'S',
-                GT_ModHandler.getIC2Item("odScanner", 1L) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("staticBoots", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "I I", "IWI", "CCC", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'I',
-                OrePrefixes.ingot.get(Materials.Iron), 'W', new ItemStack(Blocks.wool) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("ecMeter", 1L),
-            bits_no_remove_buffered,
-            new Object[] { " G ", "CIC", "C C", 'C', OrePrefixes.cableGt01.get(Materials.Copper), 'G',
-                OrePrefixes.dust.get(Materials.Glowstone), 'I', OrePrefixes.circuit.get(Materials.LV) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("obscurator", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "RER", "CAC", "RRR", 'C', OrePrefixes.cableGt01.get(Materials.Gold), 'R',
-                OrePrefixes.dust.get(Materials.Redstone), 'E', OrePrefixes.battery.get(Materials.HV), 'A',
-                OrePrefixes.circuit.get(Materials.HV) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("overclockerUpgrade", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "CCC", "WEW", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'C',
-                GT_ModHandler.getIC2Item("reactorCoolantSimple", 1L, 1), 'E', OrePrefixes.circuit.get(Materials.LV) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("transformerUpgrade", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "GGG", "WTW", "GEG", 'W', OrePrefixes.cableGt01.get(Materials.Gold), 'T',
-                GT_ModHandler.getIC2Item("mvTransformer", 1L), 'E', OrePrefixes.circuit.get(Materials.LV), 'G',
-                OrePrefixes.block.get(Materials.Glass) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("energyStorageUpgrade", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "PPP", "WBW", "PEP", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'E',
-                OrePrefixes.circuit.get(Materials.LV), 'P', OrePrefixes.plank.get(Materials.Wood), 'B',
-                OrePrefixes.battery.get(Materials.LV) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("ejectorUpgrade", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "PHP", "WEW", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'E',
-                OrePrefixes.circuit.get(Materials.LV), 'P', new ItemStack(Blocks.piston), 'H',
-                new ItemStack(Blocks.hopper) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("suBattery", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "W", "C", "R", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'C',
-                OrePrefixes.dust.get(Materials.HydratedCoal), 'R', OrePrefixes.dust.get(Materials.Redstone) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("pullingUpgrade", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "PHP", "WEW", 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'P',
-                new ItemStack(Blocks.sticky_piston), 'R', new ItemStack(Blocks.hopper), 'E',
-                OrePrefixes.circuit.get(Materials.LV) });
-
-        if (NotEnoughItems.isModLoaded()) {
-            codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("reactorUraniumSimple", 1L, 1));
-            codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("reactorUraniumDual", 1L, 1));
-            codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("reactorUraniumQuad", 1L, 1));
-            codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("reactorMOXSimple", 1L, 1));
-            codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("reactorMOXDual", 1L, 1));
-            codechicken.nei.api.API.hideItem(GT_ModHandler.getIC2Item("reactorMOXQuad", 1L, 1));
-        }
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("UranFuel", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "UUU", "NNN", "UUU", 'U', OrePrefixes.ingot.get(Materials.Uranium), 'N',
-                OrePrefixes.nugget.get(Materials.Uranium235) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("MOXFuel", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "UUU", "NNN", "UUU", 'U', OrePrefixes.ingot.get(Materials.Uranium), 'N',
-                OrePrefixes.ingot.get(Materials.Plutonium) });
-
-        GT_ModHandler.removeRecipeByOutputDelayed(Ic2Items.miningLaser.copy());
-        GT_ModHandler.addCraftingRecipe(
-            Ic2Items.miningLaser.copy(),
-            GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { "PPP", "GEC", "SBd", 'P', OrePrefixes.plate.get(Materials.Titanium), 'G',
-                OrePrefixes.gemExquisite.get(Materials.Diamond), 'E', ItemList.Emitter_HV, 'C',
-                OrePrefixes.circuit.get(Materials.IV), 'S', OrePrefixes.screw.get(Materials.Titanium), 'B',
-                new ItemStack(
-                    Ic2Items.chargingEnergyCrystal.copy()
-                        .getItem(),
-                    1,
-                    GT_Values.W) });
-        GT_ModHandler.addCraftingRecipe(
-            Ic2Items.miningLaser.copy(),
-            GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { "PPP", "GEC", "SBd", 'P', OrePrefixes.plate.get(Materials.Titanium), 'G',
-                OrePrefixes.gemExquisite.get(Materials.Ruby), 'E', ItemList.Emitter_HV, 'C',
-                OrePrefixes.circuit.get(Materials.IV), 'S', OrePrefixes.screw.get(Materials.Titanium), 'B',
-                new ItemStack(
-                    Ic2Items.chargingEnergyCrystal.copy()
-                        .getItem(),
-                    1,
-                    GT_Values.W) });
-        GT_ModHandler.addCraftingRecipe(
-            Ic2Items.miningLaser.copy(),
-            GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { "PPP", "GEC", "SBd", 'P', OrePrefixes.plate.get(Materials.Titanium), 'G',
-                OrePrefixes.gemExquisite.get(Materials.Jasper), 'E', ItemList.Emitter_HV, 'C',
-                OrePrefixes.circuit.get(Materials.IV), 'S', OrePrefixes.screw.get(Materials.Titanium), 'B',
-                new ItemStack(
-                    Ic2Items.chargingEnergyCrystal.copy()
-                        .getItem(),
-                    1,
-                    GT_Values.W) });
-        GT_ModHandler.addCraftingRecipe(
-            Ic2Items.miningLaser.copy(),
-            GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { "PPP", "GEC", "SBd", 'P', OrePrefixes.plate.get(Materials.Titanium), 'G',
-                OrePrefixes.gemExquisite.get(Materials.GarnetRed), 'E', ItemList.Emitter_HV, 'C',
-                OrePrefixes.circuit.get(Materials.IV), 'S', OrePrefixes.screw.get(Materials.Titanium), 'B',
-                new ItemStack(
-                    Ic2Items.chargingEnergyCrystal.copy()
-                        .getItem(),
-                    1,
-                    GT_Values.W) });
-
-        GT_ModHandler.removeRecipeDelayed(GT_ModHandler.getIC2Item("miningPipe", 8));
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("miningPipe", 1),
-            GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { "hPf", 'P', OrePrefixes.pipeSmall.get(Materials.Steel) });
-
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("luminator", 16L),
-            bits_no_remove_buffered,
-            new Object[] { "RTR", "GHG", "GGG", 'H', OrePrefixes.cell.get(Materials.Helium), 'T',
-                OrePrefixes.ingot.get(Materials.Tin), 'R', OrePrefixes.ingot.get(Materials.AnyIron), 'G',
-                new ItemStack(Blocks.glass, 1) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("luminator", 16L),
-            bits_no_remove_buffered,
-            new Object[] { "RTR", "GHG", "GGG", 'H', OrePrefixes.cell.get(Materials.Mercury), 'T',
-                OrePrefixes.ingot.get(Materials.Tin), 'R', OrePrefixes.ingot.get(Materials.AnyIron), 'G',
-                new ItemStack(Blocks.glass, 1) });
-
-        GT_ModHandler.removeRecipeDelayed(
-            tStack = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L),
-            tStack,
-            tStack,
-            tStack,
-            new ItemStack(Items.coal, 1, 0),
-            tStack,
-            tStack,
-            tStack,
-            tStack);
-        GT_ModHandler.removeRecipeDelayed(
-            tStack = GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L),
-            tStack,
-            tStack,
-            tStack,
-            new ItemStack(Items.coal, 1, 1),
-            tStack,
-            tStack,
-            tStack,
-            tStack);
-        GT_ModHandler.removeRecipeDelayed(
-            null,
-            tStack = new ItemStack(Items.coal, 1),
-            null,
-            tStack,
-            GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L),
-            tStack,
-            null,
-            tStack,
-            null);
-
-        GT_ModHandler.removeFurnaceSmelting(new ItemStack(Blocks.hopper));
-
-        GT_Log.out.println("GT_Mod: Applying harder Recipes for several Blocks."); // TODO: Not Buffered
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("reactorReflectorThick", 1L, 1));
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("reactorReflectorThick", 1L, 1),
-            bits_no_remove_buffered,
-            new Object[] { " N ", "NBN", " N ", 'B', OrePrefixes.plateDouble.get(Materials.Beryllium), 'N',
-                GT_ModHandler.getIC2Item("reactorReflector", 1L, 1) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("reactorReflectorThick", 1L, 1),
-            bits_no_remove_buffered,
-            new Object[] { " B ", "NCN", " B ", 'B', OrePrefixes.plate.get(Materials.Beryllium), 'N',
-                GT_ModHandler.getIC2Item("reactorReflector", 1L, 1), 'C',
-                OrePrefixes.plate.get(Materials.TungstenCarbide) });
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("reactorReflector", 1L, 1));
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("reactorReflector", 1L, 1),
-            bits_no_remove_buffered,
-            new Object[] { "TGT", "GSG", "TGT", 'T', OrePrefixes.plate.get(Materials.Tin), 'G',
-                OrePrefixes.dust.get(Materials.Graphite), 'S', OrePrefixes.plateDouble.get(Materials.Steel) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("reactorReflector", 1L, 1),
-            bits_no_remove_buffered,
-            new Object[] { "TTT", "GSG", "TTT", 'T', OrePrefixes.plate.get(Materials.TinAlloy), 'G',
-                OrePrefixes.dust.get(Materials.Graphite), 'S', OrePrefixes.plate.get(Materials.Beryllium) });
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("crophavester", 1L));
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("crophavester", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "ACA", "PMS", "WOW", 'M', ItemList.Hull_MV, 'C', OrePrefixes.circuit.get(Materials.MV), 'A',
-                ItemList.Robot_Arm_LV, 'P', ItemList.Electric_Piston_LV, 'S', ItemList.Sensor_LV, 'W',
-                OrePrefixes.toolHeadSense.get(Materials.Aluminium), 'O', ItemList.Conveyor_Module_LV });
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("RTGenerator", 1L));
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("RTGenerator", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "III", "IMI", "ICI", 'I', OrePrefixes.itemCasing.get(Materials.Steel), 'C',
-                OrePrefixes.circuit.get(Materials.LuV), 'M', ItemList.Hull_IV });
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("RTHeatGenerator", 1L));
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("RTHeatGenerator", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "III", "IMB", "ICI", 'I', OrePrefixes.itemCasing.get(Materials.Steel), 'C',
-                OrePrefixes.circuit.get(Materials.LuV), 'M', ItemList.Hull_IV, 'B',
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Copper, 1) });
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("carbonrotor", 1L));
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("carbonrotor", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "dBS", "BTB", "SBw", 'B', GT_ModHandler.getIC2Item("carbonrotorblade", 1), 'S',
-                OrePrefixes.screw.get(Materials.Iridium), 'T', GT_ModHandler.getIC2Item("steelshaft", 1) });
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("steelrotor", 1L));
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("steelrotor", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "dBS", "BTB", "SBw", 'B', GT_ModHandler.getIC2Item("steelrotorblade", 1), 'S',
-                OrePrefixes.screw.get(Materials.StainlessSteel), 'T', GT_ModHandler.getIC2Item("ironshaft", 1) });
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("ironrotor", 1L));
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("ironrotor", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "dBS", "BTB", "SBw", 'B', GT_ModHandler.getIC2Item("ironrotorblade", 1), 'S',
-                OrePrefixes.screw.get(Materials.WroughtIron), 'T', GT_ModHandler.getIC2Item("ironshaft", 1) });
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("woodrotor", 1L));
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("woodrotor", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "dBS", "BTB", "SBw", 'B', GT_ModHandler.getIC2Item("woodrotorblade", 1), 'S',
-                OrePrefixes.screw.get(Materials.WroughtIron), 'T', OrePrefixes.stickLong.get(Materials.WroughtIron) });
-
-        if (GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Diamond, 1L) != null) {
-            tStack = GT_ModHandler.getRecipeOutput(
-                GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Iron, 1L),
-                new ItemStack(Items.redstone, 1),
-                GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Iron, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Gold, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Iron, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Gold, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Diamond, 1L),
-                new ItemStack(Items.diamond_pickaxe, 1),
-                GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Diamond, 1L));
-            GT_ModHandler.removeRecipeByOutputDelayed(tStack);
-            GT_ModHandler.addCraftingRecipe(
-                tStack,
-                bits_no_remove_buffered,
-                new Object[] { "ICI", "GIG", "DPD", 'C', OrePrefixes.circuit.get(Materials.HV), 'D',
-                    OrePrefixes.gear.get(Materials.Diamond), 'G', OrePrefixes.gear.get(Materials.Gold), 'I',
-                    OrePrefixes.gear.get(Materials.Steel), 'P', GT_ModHandler.getIC2Item("diamondDrill", 1L, 32767) });
-        }
-
-        GT_ModHandler.removeRecipeByOutputDelayed(new ItemStack(Items.paper));
-        GT_ModHandler.removeRecipeByOutputDelayed(new ItemStack(Items.sugar));
-        GT_ModHandler.addCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Paper, 2),
-            GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { "SSS", " m ", 'S', new ItemStack(Items.reeds) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1),
-            GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { "Sm ", 'S', new ItemStack(Items.reeds) });
-        GT_ModHandler.addCraftingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.paper, Materials.Empty, 2),
-            GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { " C ", "SSS", " C ", 'S', GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Paper, 1),
-                'C', new ItemStack(Blocks.stone_slab) });
-
-        GT_Log.out.println("GT_Mod: Applying Recipes for Tools");
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("nanoSaber", 1L));
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("nanoSaber", 1L),
-            bits_no_remove_buffered,
-            new Object[] { "PI ", "PI ", "CLC", 'L', OrePrefixes.battery.get(Materials.EV), 'I',
-                OrePrefixes.plateAlloy.get("Iridium"), 'P', OrePrefixes.plate.get(Materials.Platinum), 'C',
-                OrePrefixes.circuit.get(Materials.IV) });
-
-        GT_ModHandler.removeRecipeByOutputDelayed(new ItemStack(Items.flint_and_steel, 1));
-        GT_ModHandler.addCraftingRecipe(
-            new ItemStack(Items.flint_and_steel, 1),
-            bits_no_remove_buffered,
-            new Object[] { "S ", " F", 'F', new ItemStack(Items.flint, 1), 'S', "nuggetSteel" });
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("diamondDrill", 1L));
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("miningDrill", 1L));
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("chainsaw", 1L));
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("electricHoe", 1L));
-
-        GT_ModHandler.removeRecipeByOutputDelayed(GT_ModHandler.getIC2Item("electricTreetap", 1L));
-
-        if (GraviSuite.isModLoaded()) {
-            GT_ModHandler.removeRecipeByOutputDelayed(
-                GT_ModHandler.getModItem(GraviSuite.ID, "advNanoChestPlate", 1, GT_Values.W));
-            GT_ModHandler.addCraftingRecipe(
-                GT_ModHandler.getModItem(GraviSuite.ID, "advNanoChestPlate", 1, GT_Values.W),
-                bits_no_remove_buffered,
-                new Object[] { "CJC", "TNT", "WPW", 'C', OrePrefixes.plateAlloy.get(Materials.Advanced), 'T',
-                    OrePrefixes.plate.get(Materials.TungstenSteel), 'J',
-                    GT_ModHandler.getModItem(GraviSuite.ID, "advJetpack", 1, GT_Values.W), 'N',
-                    GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemArmorNanoChestplate", 1, GT_Values.W), 'W',
-                    OrePrefixes.wireGt12.get(Materials.Platinum), 'P', OrePrefixes.circuit.get(Materials.IV) });
-
-            GT_ModHandler
-                .removeRecipeByOutputDelayed(GT_ModHandler.getModItem(GraviSuite.ID, "advLappack", 1, GT_Values.W));
-            GT_ModHandler.addCraftingRecipe(
-                GT_ModHandler.getModItem(GraviSuite.ID, "advLappack", 1, GT_Values.W),
-                bits_no_remove_buffered,
-                new Object[] { "CEC", "EJE", "WPW", 'C', OrePrefixes.plateAlloy.get(Materials.Carbon), 'J',
-                    GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemArmorEnergypack", 1L, GT_Values.W), 'E',
-                    GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemBatCrystal", 1L, GT_Values.W), 'W',
-                    OrePrefixes.wireGt04.get(Materials.Platinum), 'P', OrePrefixes.circuit.get(Materials.EV) });
-
-            GT_ModHandler
-                .removeRecipeByOutputDelayed(GT_ModHandler.getModItem(GraviSuite.ID, "advJetpack", 1, GT_Values.W));
-            GT_ModHandler.addCraftingRecipe(
-                GT_ModHandler.getModItem(GraviSuite.ID, "advJetpack", 1, GT_Values.W),
-                bits_no_remove_buffered,
-                new Object[] { "CJC", "EXE", "YZY", 'C', OrePrefixes.plateAlloy.get(Materials.Carbon), 'J',
-                    GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemArmorJetpackElectric", 1, GT_Values.W), 'E',
-                    OrePrefixes.plate.get(Materials.Titanium), 'X',
-                    GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemArmorAlloyChestplate", 1L), 'Z',
-                    OrePrefixes.circuit.get(Materials.EV), 'Y', OrePrefixes.wireGt02.get(Materials.Platinum) });
-        }
-
-        GT_ModHandler.addShapelessCraftingRecipe(
-            Materials.Fireclay.getDust(2),
-            new Object[] { Materials.Brick.getDust(1), Materials.Clay.getDust(1) });
-
-        GT_ModHandler.addCraftingRecipe(
-            ItemList.Casing_Advanced_Rhodium_Palladium.get(1L),
-            bits,
-            new Object[] { "PhP", "PFP", aTextPlateWrench, 'P',
-                new ItemStack(WerkstoffLoader.items.get(OrePrefixes.plate), 1, 88), 'F',
-                OrePrefixes.frameGt.get(Materials.Chrome) });
-
-        if (Forestry.isModLoaded()) {
-            ItemStack[] coverIDs = { ItemList.Plank_Larch.get(2L), ItemList.Plank_Teak.get(2L),
-                ItemList.Plank_Acacia_Green.get(2L), ItemList.Plank_Lime.get(2L), ItemList.Plank_Chestnut.get(2L),
-                ItemList.Plank_Wenge.get(2L), ItemList.Plank_Baobab.get(2L), ItemList.Plank_Sequoia.get(2L),
-                ItemList.Plank_Kapok.get(2L), ItemList.Plank_Ebony.get(2L), ItemList.Plank_Mahagony.get(2L),
-                ItemList.Plank_Balsa.get(2L), ItemList.Plank_Willow.get(2L), ItemList.Plank_Walnut.get(2L),
-                ItemList.Plank_Greenheart.get(2L), ItemList.Plank_Cherry.get(2L), ItemList.Plank_Mahoe.get(2L),
-                ItemList.Plank_Poplar.get(2L), ItemList.Plank_Palm.get(2L), ItemList.Plank_Papaya.get(2L),
-                ItemList.Plank_Pine.get(2L), ItemList.Plank_Plum.get(2L), ItemList.Plank_Maple.get(2L),
-                ItemList.Plank_Citrus.get(2L) };
-            for (int i = 0; i < coverIDs.length; i++) {
-                ItemStack slabWood = getModItem(Forestry.ID, "slabs", 1, i);
-                ItemStack slabWoodFireproof = getModItem(Forestry.ID, "slabsFireproof", 1, i);
-
-                GT_ModHandler.addCraftingRecipe(
-                    coverIDs[i],
-                    GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE,
-                    new Object[] { "s ", " P", 'P', slabWood });
-
-                GT_ModHandler.addCraftingRecipe(
-                    coverIDs[i],
-                    GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE,
-                    new Object[] { "s ", " P", 'P', slabWoodFireproof });
-            }
-        }
-        GT_ModHandler.addCraftingRecipe(
-            GT_ModHandler.getIC2Item("electronicCircuit", 1L),
-            GT_ModHandler.RecipeBits.BUFFERED,
-            new Object[] { "RIR", "VBV", "CCC", 'R', ItemList.Circuit_Parts_Resistor.get(1), 'C',
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.RedAlloy, 1), 'V',
-                ItemList.Circuit_Parts_Vacuum_Tube.get(1), 'B', ItemList.Circuit_Board_Coated_Basic.get(1), 'I',
-                ItemList.IC2_Item_Casing_Steel.get(1) });
-        GT_ModHandler.addShapelessCraftingRecipe(
-            GT_ModHandler.getIC2Item("electronicCircuit", 1L),
-            new Object[] { ItemList.Circuit_Integrated.getWildcard(1L) });
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_CropLoader.java b/src/main/java/gregtech/loaders/postload/GT_CropLoader.java
deleted file mode 100644
index e6608a52b6..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_CropLoader.java
+++ /dev/null
@@ -1,1055 +0,0 @@
-package gregtech.loaders.postload;
-
-import net.minecraft.init.Blocks;
-import net.minecraft.init.Items;
-import net.minecraft.item.ItemStack;
-
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_BaseCrop;
-import gregtech.api.util.GT_Log;
-import gregtech.api.util.GT_OreDictUnificator;
-
-public class GT_CropLoader implements Runnable {
-
-    @Override
-    public void run() {
-        GT_Log.out.println("GT_Mod: Register Crops to IC2.");
-        try {
-            /*
-             * Tags: Vines = Tendrilly Edible = Food
-             */
-            ItemStack[] tI = { ItemList.Crop_Drop_Indigo.get(4L), ItemList.Crop_Drop_MilkWart.get(4L),
-                new ItemStack(Blocks.brown_mushroom, 4), new ItemStack(Blocks.red_mushroom, 4) };
-            new GT_BaseCrop(
-                124,
-                "Indigo",
-                "Eloraam",
-                tI[0],
-                2,
-                4,
-                0,
-                1,
-                4,
-                1,
-                1,
-                0,
-                4,
-                0,
-                new String[] { "Flower", "Blue", "Ingredient" },
-                ItemList.Crop_Drop_Indigo.get(1L),
-                null);
-            new GT_BaseCrop(
-                125,
-                "Flax",
-                "Eloraam",
-                null,
-                2,
-                4,
-                0,
-                1,
-                4,
-                1,
-                1,
-                2,
-                0,
-                1,
-                new String[] { "Silk", "Tendrilly", "Addictive" },
-                new ItemStack(Items.string, 1),
-                null);
-            new GT_BaseCrop(
-                126,
-                "Oilberries",
-                "Spacetoad",
-                null,
-                9,
-                4,
-                0,
-                1,
-                4,
-                6,
-                1,
-                2,
-                1,
-                12,
-                new String[] { "Fire", "Dark", "Reed", "Rotten", "Coal", "Oil" },
-                ItemList.Crop_Drop_OilBerry.get(1L),
-                null);
-            new GT_BaseCrop(
-                127,
-                "Bobsyeruncleranks",
-                "GenerikB",
-                null,
-                11,
-                4,
-                0,
-                1,
-                4,
-                4,
-                0,
-                8,
-                2,
-                9,
-                new String[] { "Shiny", "Tendrilly", "Emerald", "Berylium", "Crystal" },
-                Materials.Emerald,
-                ItemList.Crop_Drop_BobsYerUncleRanks.get(1L),
-                new ItemStack[] { new ItemStack(Items.emerald, 1) });
-            new GT_BaseCrop(
-                128,
-                "Diareed",
-                "Direwolf20",
-                null,
-                12,
-                4,
-                0,
-                1,
-                4,
-                5,
-                0,
-                10,
-                2,
-                10,
-                new String[] { "Fire", "Shiny", "Reed", "Coal", "Diamond", "Crystal" },
-                Materials.Diamond,
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1L),
-                new ItemStack[] { new ItemStack(Items.diamond, 1) });
-            new GT_BaseCrop(
-                129,
-                "Withereed",
-                "CovertJaguar",
-                null,
-                8,
-                4,
-                0,
-                1,
-                4,
-                2,
-                0,
-                4,
-                1,
-                3,
-                new String[] { "Fire", "Undead", "Reed", "Coal", "Rotten", "Wither" },
-                Materials.Coal,
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L),
-                new ItemStack[] { new ItemStack(Items.coal, 1), new ItemStack(Items.coal, 1) });
-            new GT_BaseCrop(
-                130,
-                "Blazereed",
-                "Mr. Brain",
-                null,
-                6,
-                4,
-                0,
-                1,
-                4,
-                0,
-                4,
-                1,
-                0,
-                0,
-                new String[] { "Fire", "Blaze", "Reed", "Sulfur" },
-                new ItemStack(Items.blaze_powder, 1),
-                new ItemStack[] { new ItemStack(Items.blaze_rod, 1) });
-            new GT_BaseCrop(
-                131,
-                "Eggplant",
-                "Link",
-                null,
-                6,
-                3,
-                900,
-                2,
-                3,
-                0,
-                4,
-                1,
-                0,
-                0,
-                new String[] { "Chicken", "Egg", "Food", "Feather", "Flower", "Addictive" },
-                new ItemStack(Items.egg, 1),
-                new ItemStack[] { new ItemStack(Items.chicken, 1), new ItemStack(Items.feather, 1),
-                    new ItemStack(Items.feather, 1), new ItemStack(Items.feather, 1) });
-            new GT_BaseCrop(
-                132,
-                "Corium",
-                "Gregorius Techneticies",
-                null,
-                6,
-                4,
-                0,
-                1,
-                4,
-                0,
-                2,
-                3,
-                1,
-                0,
-                new String[] { "Cow", "Silk", "Tendrilly" },
-                new ItemStack(Items.leather, 1),
-                null);
-            new GT_BaseCrop(
-                133,
-                "Corpseplant",
-                "Mr. Kenny",
-                null,
-                5,
-                4,
-                0,
-                1,
-                4,
-                0,
-                2,
-                1,
-                0,
-                3,
-                new String[] { "Toxic", "Undead", "Tendrilly", "Food", "Rotten" },
-                new ItemStack(Items.rotten_flesh, 1),
-                new ItemStack[] { ItemList.Dye_Bonemeal.get(1L), ItemList.Dye_Bonemeal.get(1L),
-                    new ItemStack(Items.bone, 1) });
-            new GT_BaseCrop(
-                134,
-                "Creeperweed",
-                "General Spaz",
-                null,
-                7,
-                4,
-                0,
-                1,
-                4,
-                3,
-                0,
-                5,
-                1,
-                3,
-                new String[] { "Creeper", "Tendrilly", "Explosive", "Fire", "Sulfur", "Saltpeter", "Coal" },
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1L),
-                null);
-            new GT_BaseCrop(
-                135,
-                "Enderbloom",
-                "RichardG",
-                null,
-                10,
-                4,
-                0,
-                1,
-                4,
-                5,
-                0,
-                2,
-                1,
-                6,
-                new String[] { "Ender", "Flower", "Shiny" },
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.EnderPearl, 1L),
-                new ItemStack[] { new ItemStack(Items.ender_pearl, 1), new ItemStack(Items.ender_pearl, 1),
-                    new ItemStack(Items.ender_eye, 1) });
-            new GT_BaseCrop(
-                136,
-                "Meatrose",
-                "VintageBeef",
-                null,
-                7,
-                4,
-                1500,
-                1,
-                4,
-                0,
-                4,
-                1,
-                3,
-                0,
-                new String[] { "Food", "Flower", "Cow", "Fish", "Chicken", "Pig" },
-                new ItemStack(Items.dye, 1, 9),
-                new ItemStack[] { new ItemStack(Items.beef, 1), new ItemStack(Items.porkchop, 1),
-                    new ItemStack(Items.chicken, 1), new ItemStack(Items.fish, 1) });
-            new GT_BaseCrop(
-                137,
-                "Milkwart",
-                "Mr. Brain",
-                tI[1],
-                6,
-                3,
-                900,
-                1,
-                3,
-                0,
-                3,
-                0,
-                1,
-                0,
-                new String[] { "Food", "Milk", "Cow" },
-                ItemList.Crop_Drop_MilkWart.get(1L),
-                null);
-            new GT_BaseCrop(
-                138,
-                "Slimeplant",
-                "Neowulf",
-                null,
-                6,
-                4,
-                0,
-                3,
-                4,
-                3,
-                0,
-                0,
-                0,
-                2,
-                new String[] { "Slime", "Bouncy", "Sticky", "Bush" },
-                new ItemStack(Items.slime_ball, 1),
-                null);
-            new GT_BaseCrop(
-                139,
-                "Spidernip",
-                "Mr. Kenny",
-                null,
-                4,
-                4,
-                600,
-                1,
-                4,
-                2,
-                1,
-                4,
-                1,
-                3,
-                new String[] { "Toxic", "Silk", "Spider", "Flower", "Ingredient", "Addictive" },
-                new ItemStack(Items.string, 1),
-                new ItemStack[] { new ItemStack(Items.spider_eye, 1), new ItemStack(Blocks.web, 1) });
-            new GT_BaseCrop(
-                140,
-                "Tearstalks",
-                "Neowulf",
-                null,
-                8,
-                4,
-                0,
-                1,
-                4,
-                1,
-                2,
-                0,
-                0,
-                0,
-                new String[] { "Healing", "Nether", "Ingredient", "Reed", "Ghast" },
-                new ItemStack(Items.ghast_tear, 1),
-                null);
-            new GT_BaseCrop(
-                141,
-                "Tine",
-                "Gregorius Techneticies",
-                null,
-                5,
-                3,
-                0,
-                2,
-                3,
-                2,
-                0,
-                3,
-                0,
-                0,
-                new String[] { "Shiny", "Metal", "Pine", "Tin", "Bush" },
-                Materials.Tin,
-                ItemList.Crop_Drop_Tine.get(1L),
-                null);
-            new GT_BaseCrop(
-                142,
-                "Coppon",
-                "Mr. Brain",
-                null,
-                6,
-                3,
-                0,
-                2,
-                3,
-                2,
-                0,
-                1,
-                1,
-                1,
-                new String[] { "Shiny", "Metal", "Cotton", "Copper", "Bush" },
-                Materials.Copper,
-                ItemList.Crop_Drop_Coppon.get(1L),
-                null);
-            new GT_BaseCrop(
-                143,
-                "Brown Mushrooms",
-                "Mr. Brain",
-                tI[2],
-                1,
-                3,
-                0,
-                1,
-                3,
-                0,
-                2,
-                0,
-                0,
-                2,
-                new String[] { "Food", "Mushroom", "Ingredient" },
-                new ItemStack(Blocks.brown_mushroom, 1),
-                null);
-            new GT_BaseCrop(
-                144,
-                "Red Mushrooms",
-                "Mr. Kenny",
-                tI[3],
-                1,
-                3,
-                0,
-                1,
-                3,
-                0,
-                1,
-                3,
-                0,
-                2,
-                new String[] { "Toxic", "Mushroom", "Ingredient" },
-                new ItemStack(Blocks.red_mushroom, 1),
-                null);
-            new GT_BaseCrop(
-                145,
-                "Argentia",
-                "Eloraam",
-                null,
-                7,
-                4,
-                0,
-                3,
-                4,
-                2,
-                0,
-                1,
-                0,
-                0,
-                new String[] { "Shiny", "Metal", "Silver", "Reed" },
-                Materials.Silver,
-                ItemList.Crop_Drop_Argentia.get(1L),
-                null);
-            new GT_BaseCrop(
-                146,
-                "Plumbilia",
-                "KingLemming",
-                null,
-                6,
-                4,
-                0,
-                3,
-                4,
-                2,
-                0,
-                3,
-                1,
-                1,
-                new String[] { "Heavy", "Metal", "Lead", "Reed" },
-                Materials.Lead,
-                ItemList.Crop_Drop_Plumbilia.get(1L),
-                null);
-            new GT_BaseCrop(
-                147,
-                "Steeleafranks",
-                "Benimatic",
-                null,
-                10,
-                4,
-                0,
-                1,
-                4,
-                3,
-                0,
-                7,
-                2,
-                8,
-                new String[] { "Metal", "Tendrilly", "Iron" },
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steeleaf, 1L),
-                new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steeleaf, 1L) });
-            new GT_BaseCrop(
-                148,
-                "Liveroots",
-                "Benimatic",
-                null,
-                8,
-                4,
-                0,
-                1,
-                4,
-                2,
-                0,
-                5,
-                2,
-                6,
-                new String[] { "Wood", "Tendrilly" },
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.LiveRoot, 1L),
-                new ItemStack[] { ItemList.TF_LiveRoot.get(1L) });
-            new GT_BaseCrop(
-                149,
-                "Trollplant",
-                "unknown",
-                null,
-                6,
-                5,
-                1000,
-                1,
-                4,
-                0,
-                0,
-                5,
-                2,
-                8,
-                new String[] { "Troll", "Bad", "Scrap" },
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.FoolsRuby, 1L),
-                new ItemStack[] { ItemList.IC2_Plantball.get(1), ItemList.IC2_Scrap.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium241, 1L) });
-            new GT_BaseCrop(
-                150,
-                "Lazulia",
-                "unknown",
-                null,
-                7,
-                4,
-                0,
-                2,
-                4,
-                4,
-                2,
-                5,
-                7,
-                4,
-                new String[] { "Shiny", "Bad", "Crystal", "Lapis" },
-                Materials.Lapis,
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lapis, 1L),
-                null);
-            new GT_BaseCrop(
-                151,
-                "Glowheat",
-                "unknown",
-                null,
-                10,
-                7,
-                0,
-                5,
-                7,
-                3,
-                3,
-                3,
-                5,
-                4,
-                new String[] { "Light", "Shiny", "Crystal" },
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L),
-                null);
-            new GT_BaseCrop(
-                153,
-                "Fertilia",
-                "unknown",
-                null,
-                3,
-                4,
-                0,
-                1,
-                4,
-                2,
-                3,
-                5,
-                4,
-                8,
-                new String[] { "Growth", "Healing", "Flower" },
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L),
-                new ItemStack[] { ItemList.IC2_Fertilizer.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1L) });
-            new GT_BaseCrop(
-                154,
-                "Bauxia",
-                "unknown",
-                null,
-                6,
-                3,
-                0,
-                2,
-                3,
-                5,
-                0,
-                2,
-                3,
-                3,
-                new String[] { "Metal", "Aluminium", "Reed", "Aluminium" },
-                Materials.Aluminium,
-                ItemList.Crop_Drop_Bauxite.get(1),
-                null);
-            new GT_BaseCrop(
-                155,
-                "Titania",
-                "unknown",
-                null,
-                9,
-                3,
-                0,
-                2,
-                3,
-                5,
-                0,
-                3,
-                3,
-                1,
-                new String[] { "Metal", "Heavy", "Reed", "Titanium" },
-                Materials.Titanium,
-                ItemList.Crop_Drop_Ilmenite.get(1),
-                null);
-            new GT_BaseCrop(
-                156,
-                "Reactoria",
-                "unknown",
-                null,
-                12,
-                4,
-                0,
-                2,
-                4,
-                4,
-                0,
-                1,
-                2,
-                1,
-                new String[] { "Radioactive", "Metal", "Danger", "Uranium" },
-                Materials.Uranium,
-                ItemList.Crop_Drop_Pitchblende.get(1),
-                new ItemStack[] { ItemList.Crop_Drop_Uraninite.get(1) });
-            new GT_BaseCrop(
-                157,
-                "God of Thunder",
-                "unknown",
-                null,
-                9,
-                4,
-                0,
-                2,
-                4,
-                3,
-                0,
-                5,
-                1,
-                2,
-                new String[] { "Radioactive", "Metal", "Coal", "Thorium" },
-                Materials.Thorium,
-                ItemList.Crop_Drop_Thorium.get(1),
-                null);
-            new GT_BaseCrop(
-                158,
-                "Transformium",
-                "unknown",
-                null,
-                12,
-                4,
-                2500,
-                1,
-                4,
-                6,
-                2,
-                1,
-                6,
-                1,
-                new String[] { "Transform", "Coal", "Reed" },
-                ItemList.Crop_Drop_UUABerry.get(1L),
-                new ItemStack[] { ItemList.Crop_Drop_UUABerry.get(1L), ItemList.Crop_Drop_UUABerry.get(1L),
-                    ItemList.Crop_Drop_UUABerry.get(1L), ItemList.Crop_Drop_UUABerry.get(1L),
-                    ItemList.Crop_Drop_UUMBerry.get(1L) });
-            new GT_BaseCrop(
-                159,
-                "Starwart",
-                "unknown",
-                null,
-                12,
-                4,
-                4000,
-                1,
-                4,
-                2,
-                0,
-                0,
-                1,
-                0,
-                new String[] { "Wither", "Nether", "Undead", "Netherstar" },
-                Materials.NetherStar,
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L),
-                new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 1L),
-                    new ItemStack(Items.skull, 1), new ItemStack(Items.skull, 1, 1), new ItemStack(Items.skull, 1, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherStar, 1L) });
-            new GT_BaseCrop(
-                160,
-                "Zomplant",
-                "unknown",
-                null,
-                3,
-                4,
-                0,
-                1,
-                4,
-                1,
-                3,
-                4,
-                2,
-                6,
-                new String[] { "Zombie", "Rotten", "Undead" },
-                new ItemStack(Items.rotten_flesh),
-                null);
-            new GT_BaseCrop(
-                161,
-                "Nickelback",
-                "unknown",
-                null,
-                5,
-                3,
-                0,
-                2,
-                3,
-                3,
-                0,
-                1,
-                2,
-                2,
-                new String[] { "Metal", "Fire", "Alloy" },
-                Materials.Nickel,
-                ItemList.Crop_Drop_Nickel.get(1),
-                null);
-            new GT_BaseCrop(
-                162,
-                "Galvania",
-                "unknown",
-                null,
-                6,
-                3,
-                0,
-                2,
-                3,
-                3,
-                0,
-                2,
-                2,
-                3,
-                new String[] { "Metal", "Alloy", "Bush" },
-                Materials.Zinc,
-                ItemList.Crop_Drop_Zinc.get(1),
-                null);
-            new GT_BaseCrop(
-                163,
-                "Evil Ore",
-                "unknown",
-                null,
-                8,
-                4,
-                0,
-                3,
-                4,
-                4,
-                0,
-                2,
-                1,
-                3,
-                new String[] { "Crystal", "Fire", "Nether" },
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 1L),
-                new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 1L), });
-            new GT_BaseCrop(
-                164,
-                "Olivia",
-                "unknown",
-                null,
-                2,
-                4,
-                0,
-                3,
-                4,
-                1,
-                0,
-                1,
-                4,
-                0,
-                new String[] { "Crystal", "Shiny", "Processing", "Olivine" },
-                Materials.Olivine,
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Olivine, 1L),
-                new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L), });
-            new GT_BaseCrop(
-                165,
-                "Sapphirum",
-                "unknown",
-                null,
-                4,
-                4,
-                0,
-                3,
-                4,
-                1,
-                0,
-                1,
-                5,
-                0,
-                new String[] { "Crystal", "Shiny", "Metal", "Sapphire" },
-                Materials.Sapphire,
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sapphire, 1L),
-                new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L), });
-            new GT_BaseCrop(
-                166,
-                "Pyrolusium",
-                "unknown",
-                null,
-                12,
-                3,
-                0,
-                2,
-                3,
-                1,
-                0,
-                1,
-                1,
-                0,
-                new String[] { "Metal", "Clean", "Bush", "Manganese" },
-                Materials.Manganese,
-                ItemList.Crop_Drop_Manganese.get(1),
-                null);
-            new GT_BaseCrop(
-                167,
-                "Scheelinium",
-                "unknown",
-                null,
-                12,
-                3,
-                0,
-                2,
-                3,
-                3,
-                0,
-                1,
-                1,
-                0,
-                new String[] { "Metal", "Hard", "Bush", "Tungsten" },
-                Materials.Tungsten,
-                ItemList.Crop_Drop_Scheelite.get(1),
-                null);
-            new GT_BaseCrop(
-                168,
-                "Platina",
-                "unknown",
-                null,
-                11,
-                4,
-                0,
-                1,
-                4,
-                3,
-                0,
-                0,
-                3,
-                0,
-                new String[] { "Metal", "Shiny", "Reed", "Platinum" },
-                Materials.Platinum,
-                ItemList.Crop_Drop_Platinum.get(1),
-                null);
-            new GT_BaseCrop(
-                169,
-                "Quantaria",
-                "unknown",
-                null,
-                12,
-                4,
-                1000,
-                1,
-                4,
-                4,
-                0,
-                0,
-                1,
-                0,
-                new String[] { "Metal", "Iridium", "Reed" },
-                Materials.Iridium,
-                ItemList.Crop_Drop_Iridium.get(1),
-                new ItemStack[] { ItemList.Crop_Drop_Osmium.get(1) });
-            new GT_BaseCrop(
-                170,
-                "Stargatium",
-                "unknown",
-                null,
-                12,
-                4,
-                1500,
-                1,
-                4,
-                4,
-                0,
-                0,
-                2,
-                0,
-                new String[] { "Metal", "Heavy", "Alien", "Naquadah" },
-                Materials.Naquadah,
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 1L),
-                new ItemStack[] { ItemList.Crop_Drop_Naquadah.get(1) });
-            new GT_BaseCrop(
-                171,
-                "Lemon",
-                "unknown",
-                null,
-                4,
-                4,
-                0,
-                1,
-                4,
-                1,
-                1,
-                0,
-                2,
-                0,
-                new String[] { "Food", "Yellow", "Sour" },
-                ItemList.Crop_Drop_Lemon.get(1),
-                null);
-            new GT_BaseCrop(
-                172,
-                "Chilly",
-                "unknown",
-                null,
-                4,
-                4,
-                0,
-                1,
-                4,
-                1,
-                1,
-                0,
-                2,
-                0,
-                new String[] { "Food", "Red", "Spicy" },
-                ItemList.Crop_Drop_Chilly.get(1),
-                null);
-            new GT_BaseCrop(
-                173,
-                "Tomato",
-                "unknown",
-                null,
-                4,
-                4,
-                0,
-                1,
-                4,
-                1,
-                1,
-                0,
-                2,
-                0,
-                new String[] { "Food", "Red" },
-                ItemList.Crop_Drop_Tomato.get(1),
-                new ItemStack[] { ItemList.Crop_Drop_MTomato.get(1) });
-            new GT_BaseCrop(
-                174,
-                "Grape",
-                "unknown",
-                null,
-                4,
-                4,
-                0,
-                1,
-                4,
-                1,
-                1,
-                0,
-                2,
-                0,
-                new String[] { "Food", "Purple" },
-                ItemList.Crop_Drop_Grapes.get(1),
-                null);
-            new GT_BaseCrop(
-                175,
-                "Onion",
-                "unknown",
-                null,
-                4,
-                4,
-                0,
-                1,
-                4,
-                1,
-                1,
-                0,
-                2,
-                0,
-                new String[] { "Food", "Brown" },
-                ItemList.Crop_Drop_Onion.get(1),
-                null);
-            new GT_BaseCrop(
-                176,
-                "Cucumber",
-                "unknown",
-                null,
-                4,
-                4,
-                0,
-                1,
-                4,
-                1,
-                1,
-                0,
-                2,
-                0,
-                new String[] { "Food", "Green" },
-                ItemList.Crop_Drop_Cucumber.get(1),
-                null);
-            new GT_BaseCrop(
-                177,
-                "Tea",
-                "unknown",
-                null,
-                4,
-                4,
-                0,
-                1,
-                4,
-                1,
-                1,
-                0,
-                2,
-                0,
-                new String[] { "Food", "Green", "Ingredient" },
-                ItemList.Crop_Drop_TeaLeaf.get(1),
-                null);
-            new GT_BaseCrop(
-                178,
-                "Rape",
-                "unknown",
-                null,
-                4,
-                4,
-                0,
-                1,
-                4,
-                1,
-                1,
-                0,
-                2,
-                0,
-                new String[] { "Food", "Yellow", "Oil" },
-                ItemList.Crop_Drop_Rape.get(1),
-                null);
-            new GT_BaseCrop(
-                179,
-                "Micadia",
-                "bartimaeusnek",
-                null,
-                9,
-                3,
-                0,
-                2,
-                3,
-                2,
-                0,
-                3,
-                0,
-                0,
-                new String[] { "Metal", "Pine", "Mica", "Bush" },
-                Materials.Mica,
-                ItemList.Crop_Drop_Mica.get(1L),
-                null);
-        } catch (Throwable e) {
-            GT_Log.err.println("GT_Mod: Failed to register Crops to IC2.");
-            e.printStackTrace(GT_Log.err);
-        }
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_FakeRecipeLoader.java b/src/main/java/gregtech/loaders/postload/GT_FakeRecipeLoader.java
deleted file mode 100644
index d4e653dba2..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_FakeRecipeLoader.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package gregtech.loaders.postload;
-
-import gregtech.api.enums.GT_Values;
-import gregtech.api.recipe.RecipeMaps;
-import gregtech.api.util.GT_ModHandler;
-
-public class GT_FakeRecipeLoader implements Runnable {
-
-    @Override
-    public void run() {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("reactorLithiumCell", 1))
-            .itemOutputs(GT_ModHandler.getIC2Item("TritiumCell", 1))
-            .setNEIDesc(
-                "Neutron reflecting Breeder",
-                String.format("Every %d reactor hull heat", 3_000),
-                String.format("increase speed by %d00%%", 1),
-                String.format("Required pulses: %d", 10_000))
-            .duration(0)
-            .eut(0)
-            .addTo(RecipeMaps.ic2NuclearFakeRecipes);
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_ItemMaxStacksizeLoader.java b/src/main/java/gregtech/loaders/postload/GT_ItemMaxStacksizeLoader.java
deleted file mode 100644
index 67f7f00d87..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_ItemMaxStacksizeLoader.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package gregtech.loaders.postload;
-
-import net.minecraft.init.Blocks;
-import net.minecraft.init.Items;
-import net.minecraft.item.Item;
-
-import gregtech.GT_Mod;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_Log;
-
-public class GT_ItemMaxStacksizeLoader implements Runnable {
-
-    @Override
-    public void run() {
-        GT_Log.out.println("GT_Mod: Changing maximum Stacksizes if configured.");
-
-        ItemList.Upgrade_Overclocker.getItem()
-            .setMaxStackSize(GT_Mod.gregtechproxy.mUpgradeCount);
-        Items.cake.setMaxStackSize(64);
-        Items.wooden_door.setMaxStackSize(8);
-        Items.iron_door.setMaxStackSize(8);
-        Items.ender_pearl.setMaxStackSize(64);
-        Items.egg.setMaxStackSize(64);
-        Items.snowball.setMaxStackSize(64);
-        Items.mushroom_stew.setMaxStackSize(64);
-        if (OrePrefixes.plank.mDefaultStackSize < 64) {
-            Item.getItemFromBlock(Blocks.wooden_slab)
-                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.double_wooden_slab)
-                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.oak_stairs)
-                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.jungle_stairs)
-                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.birch_stairs)
-                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.spruce_stairs)
-                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.acacia_stairs)
-                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.dark_oak_stairs)
-                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
-        }
-        if (OrePrefixes.block.mDefaultStackSize < 64) {
-            Item.getItemFromBlock(Blocks.stone_slab)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.double_stone_slab)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.brick_stairs)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.nether_brick_stairs)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.sandstone_stairs)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.stone_stairs)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.stone_brick_stairs)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.packed_ice)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.ice)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.soul_sand)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.glowstone)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.snow)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.snow)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.iron_block)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.gold_block)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.emerald_block)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.lapis_block)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.diamond_block)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.clay)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.redstone_lamp)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.dirt)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.grass)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.mycelium)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.gravel)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.sand)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.brick_block)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.wool)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.melon_block)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.pumpkin)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.lit_pumpkin)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.dispenser)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.obsidian)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.piston)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.sticky_piston)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.crafting_table)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.glass)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.jukebox)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.anvil)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.chest)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.trapped_chest)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.noteblock)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.mob_spawner)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.bookshelf)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.furnace)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-            Item.getItemFromBlock(Blocks.lit_furnace)
-                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
-        }
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java b/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java
deleted file mode 100644
index 92de5291e1..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_MachineRecipeLoader.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package gregtech.loaders.postload;
-
-import gregtech.api.enums.Materials;
-import gregtech.loaders.postload.chains.GT_BauxiteRefineChain;
-import gregtech.loaders.postload.chains.GT_NaniteChain;
-import gregtech.loaders.postload.chains.GT_PCBFactoryRecipes;
-import gregtech.loaders.postload.chains.GT_PurifiedWaterRecipes;
-import gregtech.loaders.postload.recipes.AlloySmelterRecipes;
-import gregtech.loaders.postload.recipes.ArcFurnaceRecipes;
-import gregtech.loaders.postload.recipes.AssemblerRecipes;
-import gregtech.loaders.postload.recipes.AssemblyLineRecipes;
-import gregtech.loaders.postload.recipes.AutoclaveRecipes;
-import gregtech.loaders.postload.recipes.BenderRecipes;
-import gregtech.loaders.postload.recipes.BlastFurnaceRecipes;
-import gregtech.loaders.postload.recipes.BreweryRecipes;
-import gregtech.loaders.postload.recipes.CannerRecipes;
-import gregtech.loaders.postload.recipes.CentrifugeRecipes;
-import gregtech.loaders.postload.recipes.ChemicalBathRecipes;
-import gregtech.loaders.postload.recipes.ChemicalRecipes;
-import gregtech.loaders.postload.recipes.CircuitAssemblerRecipes;
-import gregtech.loaders.postload.recipes.CompressorRecipes;
-import gregtech.loaders.postload.recipes.CropProcessingRecipes;
-import gregtech.loaders.postload.recipes.CuttingRecipes;
-import gregtech.loaders.postload.recipes.DistilleryRecipes;
-import gregtech.loaders.postload.recipes.ElectrolyzerRecipes;
-import gregtech.loaders.postload.recipes.ElectromagneticSeparatorRecipes;
-import gregtech.loaders.postload.recipes.ExtractorRecipes;
-import gregtech.loaders.postload.recipes.ExtruderRecipes;
-import gregtech.loaders.postload.recipes.FermenterRecipes;
-import gregtech.loaders.postload.recipes.FluidCannerRecipes;
-import gregtech.loaders.postload.recipes.FluidExtractorRecipes;
-import gregtech.loaders.postload.recipes.FluidHeaterRecipes;
-import gregtech.loaders.postload.recipes.FluidSolidifierRecipes;
-import gregtech.loaders.postload.recipes.ForgeHammerRecipes;
-import gregtech.loaders.postload.recipes.FormingPressRecipes;
-import gregtech.loaders.postload.recipes.FuelRecipes;
-import gregtech.loaders.postload.recipes.FusionReactorRecipes;
-import gregtech.loaders.postload.recipes.ImplosionCompressorRecipes;
-import gregtech.loaders.postload.recipes.LaserEngraverRecipes;
-import gregtech.loaders.postload.recipes.LatheRecipes;
-import gregtech.loaders.postload.recipes.MatterAmplifierRecipes;
-import gregtech.loaders.postload.recipes.MixerRecipes;
-import gregtech.loaders.postload.recipes.NEIHiding;
-import gregtech.loaders.postload.recipes.OreDictUnification;
-import gregtech.loaders.postload.recipes.PackagerRecipes;
-import gregtech.loaders.postload.recipes.PlasmaForgeRecipes;
-import gregtech.loaders.postload.recipes.PrinterRecipes;
-import gregtech.loaders.postload.recipes.Pulverizer;
-import gregtech.loaders.postload.recipes.PyrolyseRecipes;
-import gregtech.loaders.postload.recipes.RecipeRemover;
-import gregtech.loaders.postload.recipes.SifterRecipes;
-import gregtech.loaders.postload.recipes.SlicerRecipes;
-import gregtech.loaders.postload.recipes.SmelterRecipes;
-import gregtech.loaders.postload.recipes.ThaumcraftRecipes;
-import gregtech.loaders.postload.recipes.ThermalCentrifugeRecipes;
-import gregtech.loaders.postload.recipes.TranscendentPlasmaMixerRecipes;
-import gregtech.loaders.postload.recipes.VacuumFreezerRecipes;
-import gregtech.loaders.postload.recipes.WiremillRecipes;
-
-public class GT_MachineRecipeLoader implements Runnable {
-
-    public static final String aTextTCGTPage = "gt.research.page.1.";
-
-    public static final Materials[] solderingMats = new Materials[] { Materials.Lead, Materials.SolderingAlloy,
-        Materials.Tin };
-
-    @Override
-    public void run() {
-        new AlloySmelterRecipes().run();
-        new ArcFurnaceRecipes().run();
-        new AssemblerRecipes().run();
-        new AssemblyLineRecipes().run();
-        new AutoclaveRecipes().run();
-        new BenderRecipes().run();
-        new BlastFurnaceRecipes().run();
-        new BreweryRecipes().run();
-        new CannerRecipes().run();
-        new CentrifugeRecipes().run();
-        new ChemicalBathRecipes().run();
-        new ChemicalRecipes().run();
-        new CircuitAssemblerRecipes().run();
-        new CompressorRecipes().run();
-        new CropProcessingRecipes().run();
-        new CuttingRecipes().run();
-        new DistilleryRecipes().run();
-        new ElectrolyzerRecipes().run();
-        new ElectromagneticSeparatorRecipes().run();
-        new ExtractorRecipes().run();
-        new ExtruderRecipes().run();
-        new FermenterRecipes().run();
-        new FluidCannerRecipes().run();
-        new FluidExtractorRecipes().run();
-        new FluidHeaterRecipes().run();
-        new FluidSolidifierRecipes().run();
-        new ForgeHammerRecipes().run();
-        new FormingPressRecipes().run();
-        new FuelRecipes().run();
-        new FusionReactorRecipes().run();
-        new ImplosionCompressorRecipes().run();
-        new LaserEngraverRecipes().run();
-        new LatheRecipes().run();
-        new MatterAmplifierRecipes().run();
-        new MixerRecipes().run();
-        new NEIHiding().run();
-        new OreDictUnification().run();
-        new PackagerRecipes().run();
-        new PlasmaForgeRecipes().run();
-        new PrinterRecipes().run();
-        new Pulverizer().run();
-        new PyrolyseRecipes().run();
-        new RecipeRemover().run();
-        new SifterRecipes().run();
-        new SlicerRecipes().run();
-        new SmelterRecipes().run();
-        new ThaumcraftRecipes().run();
-        new ThermalCentrifugeRecipes().run();
-        new VacuumFreezerRecipes().run();
-        new WiremillRecipes().run();
-        new TranscendentPlasmaMixerRecipes().run();
-
-        GT_BauxiteRefineChain.run();
-        GT_NaniteChain.run();
-        GT_PCBFactoryRecipes.load();
-        GT_PurifiedWaterRecipes.run();
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_MachineTooltipsLoader.java b/src/main/java/gregtech/loaders/postload/GT_MachineTooltipsLoader.java
deleted file mode 100644
index d18ccd6c83..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_MachineTooltipsLoader.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package gregtech.loaders.postload;
-
-import static gregtech.api.enums.GT_Values.GT;
-
-import net.minecraft.item.ItemStack;
-
-import gregtech.api.GregTech_API;
-import gregtech.api.util.GT_LanguageManager;
-import gregtech.api.util.GT_Log;
-import gregtech.common.blocks.GT_Item_Machines;
-
-public class GT_MachineTooltipsLoader implements Runnable {
-
-    @Override
-    public void run() {
-        if (!GT.isClientSide()) return;
-        GT_Log.out.println("GT Mod: Register Block Machine's tooltips");
-        for (int i = 0; i < 32768; i++) {
-            ItemStack tStack = new ItemStack(GregTech_API.sBlockMachines, 1, i);
-            if (tStack.getItem() != null && tStack.getItem() instanceof GT_Item_Machines) {
-                ((GT_Item_Machines) tStack.getItem()).registerDescription(i);
-            }
-        }
-        GT_LanguageManager.addStringLocalization("TileEntity_EUp_IN", "Voltage IN: ");
-        GT_LanguageManager.addStringLocalization("TileEntity_EUp_OUT", "Voltage OUT: ");
-        GT_LanguageManager.addStringLocalization("TileEntity_EUp_AMOUNT", "Amperage: ");
-        GT_LanguageManager.addStringLocalization("TileEntity_EUp_STORE", "Capacity: ");
-        GT_LanguageManager.addStringLocalization("TileEntity_TANK_INFO", "Contains Fluid: ");
-        GT_LanguageManager.addStringLocalization("TileEntity_TANK_AMOUNT", "Fluid Amount: ");
-        GT_LanguageManager.addStringLocalization("TileEntity_CHEST_INFO", "Contains Item: ");
-        GT_LanguageManager.addStringLocalization("TileEntity_CHEST_AMOUNT", "Item Amount: ");
-        GT_LanguageManager.addStringLocalization("GT_TileEntity_MUFFLER", "has Muffler Upgrade");
-        GT_LanguageManager.addStringLocalization("GT_TileEntity_STEAMCONVERTER", "has Steam Upgrade");
-        GT_LanguageManager.addStringLocalization("GT_TileEntity_STEAMTANKS", "Steam Tank Upgrades");
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_MinableRegistrator.java b/src/main/java/gregtech/loaders/postload/GT_MinableRegistrator.java
deleted file mode 100644
index afa98e0b38..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_MinableRegistrator.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package gregtech.loaders.postload;
-
-import net.minecraft.init.Blocks;
-
-import gregtech.api.util.GT_Log;
-import gregtech.api.util.GT_ModHandler;
-
-public class GT_MinableRegistrator implements Runnable {
-
-    @Override
-    public void run() {
-        GT_Log.out.println("GT_Mod: Adding Blocks to the Miners Valuable List.");
-        GT_ModHandler.addValuableOre(Blocks.glowstone, 0, 1);
-        GT_ModHandler.addValuableOre(Blocks.soul_sand, 0, 1);
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_PCBFactoryMaterialLoader.java b/src/main/java/gregtech/loaders/postload/GT_PCBFactoryMaterialLoader.java
deleted file mode 100644
index 95732076d9..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_PCBFactoryMaterialLoader.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package gregtech.loaders.postload;
-
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.MaterialsKevlar;
-import gregtech.api.util.GT_PCBFactoryManager;
-
-public class GT_PCBFactoryMaterialLoader {
-
-    public static void load() {
-        // add Plastics
-        GT_PCBFactoryManager.addPlasticTier(Materials.Plastic, 1);
-        GT_PCBFactoryManager.addPlasticTier(Materials.PolyvinylChloride, 2);
-        GT_PCBFactoryManager.addPlasticTier(Materials.Polytetrafluoroethylene, 3);
-        GT_PCBFactoryManager.addPlasticTier(Materials.Epoxid, 4);
-        GT_PCBFactoryManager.addPlasticTier(Materials.EpoxidFiberReinforced, 5);
-        GT_PCBFactoryManager.addPlasticTier(Materials.Polybenzimidazole, 6);
-        GT_PCBFactoryManager.addPlasticTier(MaterialsKevlar.Kevlar, 7);
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_PostLoad.java b/src/main/java/gregtech/loaders/postload/GT_PostLoad.java
deleted file mode 100644
index 4dae7d5313..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_PostLoad.java
+++ /dev/null
@@ -1,542 +0,0 @@
-package gregtech.loaders.postload;
-
-import static gregtech.api.enums.Mods.Forestry;
-import static gregtech.api.enums.Mods.GalacticraftCore;
-import static gregtech.api.enums.Mods.GalacticraftMars;
-import static gregtech.api.enums.Mods.GalaxySpace;
-import static gregtech.api.enums.Mods.Thaumcraft;
-import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes;
-import static gregtech.api.recipe.RecipeMaps.massFabFakeRecipes;
-import static gregtech.api.recipe.RecipeMaps.rockBreakerFakeRecipes;
-import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-
-import java.lang.reflect.InvocationTargetException;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import net.minecraft.creativetab.CreativeTabs;
-import net.minecraft.init.Blocks;
-import net.minecraft.init.Items;
-import net.minecraft.item.Item;
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.FluidContainerRegistry;
-import net.minecraftforge.fluids.FluidRegistry;
-import net.minecraftforge.fluids.FluidStack;
-
-import com.google.common.base.Stopwatch;
-
-import cpw.mods.fml.common.ProgressManager;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import gregtech.GT_Mod;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.enums.SubTag;
-import gregtech.api.enums.TierEU;
-import gregtech.api.recipe.RecipeMaps;
-import gregtech.api.util.GT_CLS_Compat;
-import gregtech.api.util.GT_Forestry_Compat;
-import gregtech.api.util.GT_Log;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeBuilder;
-import gregtech.api.util.GT_RecipeConstants;
-import gregtech.api.util.GT_RecipeRegistrator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.items.GT_MetaGenerated_Tool_01;
-import gregtech.common.items.behaviors.Behaviour_DataOrb;
-import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Massfabricator;
-import ic2.api.recipe.IRecipeInput;
-import ic2.api.recipe.RecipeOutput;
-
-@SuppressWarnings("deprecation")
-public class GT_PostLoad {
-
-    public static void activateOreDictHandler() {
-        @SuppressWarnings("UnstableApiUsage") // Stable enough for this project
-        Stopwatch stopwatch = Stopwatch.createStarted();
-        GT_Mod.gregtechproxy.activateOreDictHandler();
-
-        // noinspection UnstableApiUsage// Stable enough for this project
-        GT_Mod.GT_FML_LOGGER
-            .info("Congratulations, you have been waiting long enough (" + stopwatch.stop() + "). Have a Cake.");
-        GT_Log.out.println(
-            "GT_Mod: List of Lists of Tool Recipes: "
-                + GT_ModHandler.sSingleNonBlockDamagableRecipeList_list.toString());
-        GT_Log.out.println(
-            "GT_Mod: Vanilla Recipe List -> Outputs null or stackSize <=0: "
-                + GT_ModHandler.sVanillaRecipeList_warntOutput.toString());
-        GT_Log.out.println(
-            "GT_Mod: Single Non Block Damageable Recipe List -> Outputs null or stackSize <=0: "
-                + GT_ModHandler.sSingleNonBlockDamagableRecipeList_warntOutput.toString());
-    }
-
-    public static void removeIc2Recipes(Map aMaceratorRecipeList,
-        Map aCompressorRecipeList, Map aExtractorRecipeList,
-        Map aOreWashingRecipeList,
-        Map aThermalCentrifugeRecipeList) {
-        @SuppressWarnings("UnstableApiUsage") // Stable enough for this project
-        Stopwatch stopwatch = Stopwatch.createStarted();
-        // remove gemIridium exploit
-        ItemStack iridiumOre = GT_ModHandler.getIC2Item("iridiumOre", 1);
-        aCompressorRecipeList.entrySet()
-            .parallelStream()
-            .filter(
-                e -> e.getKey()
-                    .getInputs()
-                    .size() == 1 && e.getKey()
-                        .getInputs()
-                        .get(0)
-                        .isItemEqual(iridiumOre))
-            .findAny()
-            .ifPresent(e -> aCompressorRecipeList.remove(e.getKey()));
-        // Remove all IC2
-        GT_ModHandler.removeAllIC2Recipes();
-        // noinspection UnstableApiUsage// Stable enough for this project
-        GT_Mod.GT_FML_LOGGER.info("IC2 Removal (" + stopwatch.stop() + "). Have a Cake.");
-    }
-
-    public static void registerFluidCannerRecipes() {
-        for (FluidContainerRegistry.FluidContainerData tData : FluidContainerRegistry
-            .getRegisteredFluidContainerData()) {
-            // lava clay bucket is registered with empty container with 0 stack size
-            ItemStack emptyContainer = tData.emptyContainer.copy();
-            emptyContainer.stackSize = 1;
-            GT_Values.RA.stdBuilder()
-                .itemInputs(emptyContainer)
-                .itemOutputs(tData.filledContainer)
-                .fluidInputs(tData.fluid)
-                .duration((tData.fluid.amount / 62) * TICKS)
-                .eut(1)
-                .addTo(fluidCannerRecipes);
-            GT_RecipeBuilder builder = GT_Values.RA.stdBuilder()
-                .itemInputs(tData.filledContainer);
-            if (tData.emptyContainer.stackSize > 0) {
-                builder.itemOutputs(tData.emptyContainer);
-            }
-            builder.fluidOutputs(tData.fluid)
-                .duration((tData.fluid.amount / 62) * TICKS)
-                .eut(1)
-                .addTo(fluidCannerRecipes);
-        }
-    }
-
-    public static void addFakeRecipes() {
-        GT_Log.out.println("GT_Mod: Adding Fake Recipes for NEI");
-
-        if (Forestry.isModLoaded()) {
-            GT_Forestry_Compat.populateFakeNeiRecipes();
-        }
-
-        if (ItemList.IC2_Crop_Seeds.get(1L) != null) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.IC2_Crop_Seeds.getWildcard(1L))
-                .itemOutputs(ItemList.IC2_Crop_Seeds.getWithName(1L, "Scanned Seeds"))
-                .duration(8 * SECONDS)
-                .eut(8)
-                .noOptimize()
-                .ignoreCollision()
-                .fake()
-                .addTo(scannerFakeRecipes);
-        }
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.written_book, 1, 32767))
-            .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Scanned Book Data"))
-            .special(ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to"))
-            .duration(6 * SECONDS + 8 * TICKS)
-            .eut(TierEU.RECIPE_LV)
-            .noOptimize()
-            .ignoreCollision()
-            .fake()
-            .addTo(scannerFakeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.filled_map, 1, 32767))
-            .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Scanned Map Data"))
-            .special(ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to"))
-            .duration(6 * SECONDS + 8 * TICKS)
-            .eut(TierEU.RECIPE_LV)
-            .noOptimize()
-            .ignoreCollision()
-            .fake()
-            .addTo(scannerFakeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Tool_DataOrb.getWithName(1L, "Orb to overwrite"))
-            .itemOutputs(ItemList.Tool_DataOrb.getWithName(1L, "Copy of the Orb"))
-            .duration(25 * SECONDS + 12 * TICKS)
-            .eut(TierEU.RECIPE_LV)
-            .noOptimize()
-            .ignoreCollision()
-            .fake()
-            .addTo(scannerFakeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Tool_DataStick.getWithName(1L, "Stick to overwrite"))
-            .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Copy of the Stick"))
-            .special(ItemList.Tool_DataStick.getWithName(0L, "Stick to copy"))
-            .duration(6 * SECONDS + 8 * TICKS)
-            .eut(TierEU.RECIPE_LV)
-            .noOptimize()
-            .ignoreCollision()
-            .fake()
-            .addTo(scannerFakeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Tool_DataStick.getWithName(1L, "Raw Prospection Data"))
-            .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Analyzed Prospection Data"))
-            .duration(50 * SECONDS)
-            .eut(TierEU.RECIPE_LV)
-            .noOptimize()
-            .ignoreCollision()
-            .fake()
-            .addTo(scannerFakeRecipes);
-
-        if (GalacticraftCore.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    Objects
-                        .requireNonNull(
-                            GT_ModHandler.getModItem(GalacticraftCore.ID, "item.schematic", 1, Short.MAX_VALUE))
-                        .setStackDisplayName("Any Schematic"))
-                .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Scanned Schematic"))
-                .special(ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to"))
-                .duration(30 * MINUTES)
-                .eut(TierEU.RECIPE_HV)
-                .noOptimize()
-                .ignoreCollision()
-                .fake()
-                .addTo(scannerFakeRecipes);
-
-            if (GalacticraftMars.isModLoaded()) {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(
-                        Objects
-                            .requireNonNull(
-                                GT_ModHandler.getModItem(GalacticraftMars.ID, "item.schematic", 1, Short.MAX_VALUE))
-                            .setStackDisplayName("Any Schematic"))
-                    .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Scanned Schematic"))
-                    .special(ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to"))
-                    .duration(30 * MINUTES)
-                    .eut(TierEU.RECIPE_MV)
-                    .noOptimize()
-                    .ignoreCollision()
-                    .fake()
-                    .addTo(scannerFakeRecipes);
-            }
-            if (GalaxySpace.isModLoaded()) {
-                for (int i = 4; i < 9; i++) {
-                    GT_Values.RA.stdBuilder()
-                        .itemInputs(
-                            GT_ModHandler.getModItem(GalaxySpace.ID, "item.SchematicTier" + i, 1)
-                                .setStackDisplayName("Any Schematic"))
-                        .itemOutputs(ItemList.Tool_DataStick.getWithName(1L, "Scanned Schematic"))
-                        .special(ItemList.Tool_DataStick.getWithName(1L, "Stick to save it to"))
-                        .duration(30 * MINUTES)
-                        .eut(TierEU.RECIPE_HV)
-                        .noOptimize()
-                        .ignoreCollision()
-                        .fake()
-                        .addTo(scannerFakeRecipes);
-                }
-            }
-        }
-        Materials.getMaterialsMap()
-            .values()
-            .forEach(tMaterial -> {
-                if ((tMaterial.mElement != null) && (!tMaterial.mElement.mIsIsotope)
-                    && (tMaterial != Materials.Magic)
-                    && (tMaterial.getMass() > 0L)) {
-                    ItemStack dataOrb = ItemList.Tool_DataOrb.get(1L);
-                    Behaviour_DataOrb.setDataTitle(dataOrb, "Elemental-Scan");
-                    Behaviour_DataOrb.setDataName(dataOrb, tMaterial.mElement.name());
-                    ItemStack dustItem = GT_OreDictUnificator.get(OrePrefixes.dust, tMaterial, 1L);
-                    if (dustItem != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(dustItem)
-                            .itemOutputs(dataOrb)
-                            .special(ItemList.Tool_DataOrb.get(1L))
-                            .duration((int) (tMaterial.getMass() * 8192L))
-                            .eut(TierEU.RECIPE_LV)
-                            .fake()
-                            .ignoreCollision()
-                            .addTo(scannerFakeRecipes);
-                        GT_Values.RA.stdBuilder()
-                            .itemOutputs(dustItem)
-                            .special(dataOrb)
-                            .metadata(GT_RecipeConstants.MATERIAL, tMaterial)
-                            .addTo(RecipeMaps.replicatorRecipes);
-                        return;
-                    }
-                    ItemStack cellItem = GT_OreDictUnificator.get(OrePrefixes.cell, tMaterial, 1L);
-                    if (cellItem != null) {
-                        GT_Values.RA.stdBuilder()
-                            .itemInputs(cellItem)
-                            .itemOutputs(dataOrb)
-                            .special(ItemList.Tool_DataOrb.get(1L))
-                            .duration((int) (tMaterial.getMass() * 8192L))
-                            .eut(TierEU.RECIPE_LV)
-                            .fake()
-                            .ignoreCollision()
-                            .addTo(scannerFakeRecipes);
-                        FluidStack fluidStack = GT_Utility.getFluidForFilledItem(cellItem, false);
-                        GT_RecipeBuilder builder = GT_Values.RA.stdBuilder();
-                        if (fluidStack != null) {
-                            builder.fluidOutputs(fluidStack);
-                        } else {
-                            builder.itemInputs(Materials.Empty.getCells(1))
-                                .itemOutputs(cellItem);
-                        }
-                        builder.special(dataOrb)
-                            .metadata(GT_RecipeConstants.MATERIAL, tMaterial)
-                            .addTo(RecipeMaps.replicatorRecipes);
-                    }
-                }
-            });
-
-        if (!GT_MetaTileEntity_Massfabricator.sRequiresUUA) {
-
-            GT_MetaTileEntity_Massfabricator.nonUUARecipe = GT_Values.RA.stdBuilder()
-                .fluidOutputs(Materials.UUMatter.getFluid(1L))
-                .duration(GT_MetaTileEntity_Massfabricator.sDurationMultiplier)
-                .eut(GT_MetaTileEntity_Massfabricator.BASE_EUT)
-                .ignoreCollision()
-                .noOptimize()
-                .fake()
-                .build()
-                .get();
-
-            massFabFakeRecipes.add(GT_MetaTileEntity_Massfabricator.nonUUARecipe);
-
-        }
-
-        GT_MetaTileEntity_Massfabricator.uuaRecipe = GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
-            .fluidInputs(Materials.UUAmplifier.getFluid(GT_MetaTileEntity_Massfabricator.sUUAperUUM))
-            .fluidOutputs(Materials.UUMatter.getFluid(1L))
-            .duration(
-                GT_MetaTileEntity_Massfabricator.sDurationMultiplier / GT_MetaTileEntity_Massfabricator.sUUASpeedBonus)
-            .eut(GT_MetaTileEntity_Massfabricator.BASE_EUT)
-            .ignoreCollision()
-            .noOptimize()
-            .fake()
-            .build()
-            .get();
-
-        massFabFakeRecipes.add(GT_MetaTileEntity_Massfabricator.uuaRecipe);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Display_ITS_FREE.getWithName(1L, "IT'S FREE! Place Lava on Side"))
-            .itemOutputs(new ItemStack(Blocks.cobblestone, 1))
-            .duration(16 * TICKS)
-            .eut(TierEU.RECIPE_LV)
-            .ignoreCollision()
-            .noOptimize()
-            .fake()
-            .addTo(rockBreakerFakeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Display_ITS_FREE.getWithName(1L, "IT'S FREE! Place Lava on Side"))
-            .itemOutputs(new ItemStack(Blocks.stone, 1))
-            .duration(16 * TICKS)
-            .eut(TierEU.RECIPE_LV)
-            .ignoreCollision()
-            .noOptimize()
-            .fake()
-            .addTo(rockBreakerFakeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(new ItemStack(Blocks.obsidian, 1))
-            .duration(6 * SECONDS + 8 * TICKS)
-            .eut(TierEU.RECIPE_LV)
-            .ignoreCollision()
-            .noOptimize()
-            .fake()
-            .addTo(rockBreakerFakeRecipes);
-    }
-
-    public static void nerfVanillaTools() {
-        if (!GT_Mod.gregtechproxy.mNerfedVanillaTools) {
-            return;
-        }
-
-        GT_Log.out.println("GT_Mod: Nerfing Vanilla Tool Durability");
-        Items.wooden_sword.setMaxDamage(12);
-        Items.wooden_pickaxe.setMaxDamage(12);
-        Items.wooden_shovel.setMaxDamage(12);
-        Items.wooden_axe.setMaxDamage(12);
-        Items.wooden_hoe.setMaxDamage(12);
-
-        Items.stone_sword.setMaxDamage(48);
-        Items.stone_pickaxe.setMaxDamage(48);
-        Items.stone_shovel.setMaxDamage(48);
-        Items.stone_axe.setMaxDamage(48);
-        Items.stone_hoe.setMaxDamage(48);
-
-        Items.iron_sword.setMaxDamage(256);
-        Items.iron_pickaxe.setMaxDamage(256);
-        Items.iron_shovel.setMaxDamage(256);
-        Items.iron_axe.setMaxDamage(256);
-        Items.iron_hoe.setMaxDamage(256);
-
-        Items.golden_sword.setMaxDamage(24);
-        Items.golden_pickaxe.setMaxDamage(24);
-        Items.golden_shovel.setMaxDamage(24);
-        Items.golden_axe.setMaxDamage(24);
-        Items.golden_hoe.setMaxDamage(24);
-
-        Items.diamond_sword.setMaxDamage(768);
-        Items.diamond_pickaxe.setMaxDamage(768);
-        Items.diamond_shovel.setMaxDamage(768);
-        Items.diamond_axe.setMaxDamage(768);
-        Items.diamond_hoe.setMaxDamage(768);
-
-    }
-
-    public static void replaceVanillaMaterials() {
-        @SuppressWarnings("UnstableApiUsage") // Stable enough for this project
-        Stopwatch stopwatch = Stopwatch.createStarted();
-        GT_Mod.GT_FML_LOGGER.info("Replacing Vanilla Materials in recipes, please wait.");
-        Set replaceVanillaItemsSet = Arrays.stream(Materials.values())
-            .filter(GT_RecipeRegistrator::hasVanillaRecipes)
-            .collect(Collectors.toSet());
-
-        ProgressManager.ProgressBar progressBar = ProgressManager
-            .push("Register materials", replaceVanillaItemsSet.size());
-        if (GT_Values.cls_enabled) {
-            try {
-                GT_CLS_Compat.doActualRegistrationCLS(progressBar, replaceVanillaItemsSet);
-                GT_CLS_Compat.pushToDisplayProgress();
-            } catch (InvocationTargetException | IllegalAccessException e) {
-                GT_Mod.GT_FML_LOGGER.catching(e);
-            }
-        } else {
-            replaceVanillaItemsSet.forEach(m -> {
-                progressBar.step(m.mDefaultLocalName);
-                doActualRegistration(m);
-            });
-        }
-        ProgressManager.pop(progressBar);
-        // noinspection UnstableApiUsage// stable enough for project
-        GT_Mod.GT_FML_LOGGER.info("Replaced Vanilla Materials (" + stopwatch.stop() + "). Have a Cake.");
-    }
-
-    public static void doActualRegistration(Materials m) {
-        String plateName = OrePrefixes.plate.get(m)
-            .toString();
-        boolean noSmash = !m.contains(SubTag.NO_SMASHING);
-        if ((m.mTypes & 2) != 0) GT_RecipeRegistrator.registerUsagesForMaterials(plateName, noSmash, m.getIngots(1));
-        if ((m.mTypes & 4) != 0) GT_RecipeRegistrator.registerUsagesForMaterials(plateName, noSmash, m.getGems(1));
-        if (m.getBlocks(1) != null) GT_RecipeRegistrator.registerUsagesForMaterials(null, noSmash, m.getBlocks(1));
-    }
-
-    public static void createGTtoolsCreativeTab() {
-        new CreativeTabs("GTtools") {
-
-            @SideOnly(Side.CLIENT)
-            @Override
-            public ItemStack getIconItemStack() {
-                return ItemList.Tool_Cheat.get(1, new ItemStack(Blocks.iron_block, 1));
-            }
-
-            @SideOnly(Side.CLIENT)
-            @Override
-            public Item getTabIconItem() {
-                return ItemList.Circuit_Integrated.getItem();
-            }
-
-            @Override
-            public void displayAllReleventItems(List aList) {
-
-                for (int i = 0; i < 32766; i += 2) {
-                    if (GT_MetaGenerated_Tool_01.INSTANCE
-                        .getToolStats(new ItemStack(GT_MetaGenerated_Tool_01.INSTANCE, 1, i)) == null) {
-                        continue;
-                    }
-
-                    ItemStack tStack = new ItemStack(GT_MetaGenerated_Tool_01.INSTANCE, 1, i);
-                    GT_MetaGenerated_Tool_01.INSTANCE.isItemStackUsable(tStack);
-                    aList.add(
-                        GT_MetaGenerated_Tool_01.INSTANCE.getToolWithStats(i, 1, Materials.Lead, Materials.Lead, null));
-                    aList.add(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(i, 1, Materials.Nickel, Materials.Nickel, null));
-                    aList.add(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(i, 1, Materials.Cobalt, Materials.Cobalt, null));
-                    aList.add(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(i, 1, Materials.Osmium, Materials.Osmium, null));
-                    aList.add(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(i, 1, Materials.Adamantium, Materials.Adamantium, null));
-                    aList.add(
-                        GT_MetaGenerated_Tool_01.INSTANCE
-                            .getToolWithStats(i, 1, Materials.Neutronium, Materials.Neutronium, null));
-
-                }
-                super.displayAllReleventItems(aList);
-            }
-        };
-    }
-
-    public static void addSolidFakeLargeBoilerFuels() {
-        RecipeMaps.largeBoilerFakeFuels.getBackend()
-            .addSolidRecipes(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Charcoal, 1),
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 1),
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1),
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 1),
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Coal, 1),
-                GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Coal, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lignite, 1),
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Lignite, 1),
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 1),
-                GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Lignite, 1),
-                GT_OreDictUnificator.get(OrePrefixes.log, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.plank, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.slab, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Caesium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
-                GT_OreDictUnificator.get(ItemList.Block_SSFUEL.get(1)),
-                GT_OreDictUnificator.get(ItemList.Block_MSSFUEL.get(1)),
-                GT_OreDictUnificator.get(OrePrefixes.rod, Materials.Blaze, 1));
-        if (Thaumcraft.isModLoaded()) {
-            RecipeMaps.largeBoilerFakeFuels.getBackend()
-                .addSolidRecipe(GT_ModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1));
-        }
-    }
-
-    public static void identifyAnySteam() {
-        final String[] steamCandidates = { "steam", "ic2steam" };
-        final String[] superHeatedSteamCandidates = { "ic2superheatedsteam" };
-
-        GT_ModHandler.sAnySteamFluidIDs = Arrays.stream(steamCandidates)
-            .map(FluidRegistry::getFluid)
-            .filter(Objects::nonNull)
-            .map(FluidRegistry::getFluidID)
-            .collect(Collectors.toList());
-        GT_ModHandler.sSuperHeatedSteamFluidIDs = Arrays.stream(superHeatedSteamCandidates)
-            .map(FluidRegistry::getFluid)
-            .filter(Objects::nonNull)
-            .map(FluidRegistry::getFluidID)
-            .collect(Collectors.toList());
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_ProcessingArrayRecipeLoader.java b/src/main/java/gregtech/loaders/postload/GT_ProcessingArrayRecipeLoader.java
deleted file mode 100644
index 0ff53d0424..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_ProcessingArrayRecipeLoader.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package gregtech.loaders.postload;
-
-import gregtech.api.enums.SoundResource;
-import gregtech.api.recipe.RecipeMaps;
-import gregtech.api.util.GT_ProcessingArray_Manager;
-
-public class GT_ProcessingArrayRecipeLoader {
-
-    public static void registerDefaultGregtechMaps() {
-
-        // Alloy Smelter
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.alloysmelter", RecipeMaps.alloySmelterRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.alloysmelter", SoundResource.IC2_MACHINES_INDUCTION_LOOP);
-        // Arc Furnace
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.arcfurnace", RecipeMaps.arcFurnaceRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.arcfurnace", SoundResource.IC2_MACHINES_INDUCTION_LOOP);
-        // Assembler
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.assembler", RecipeMaps.assemblerRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.assembler", SoundResource.NONE);
-        // Autoclave
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.autoclave", RecipeMaps.autoclaveRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.autoclave", SoundResource.NONE);
-        // Bender
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.bender", RecipeMaps.benderRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.bender", SoundResource.IC2_MACHINES_COMPRESSOR_OP);
-        // Boxinator
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.boxinator", RecipeMaps.packagerRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.boxinator", SoundResource.NONE);
-        // Brewery
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.brewery", RecipeMaps.brewingRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.brewery", SoundResource.NONE);
-        // Canner
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.canner", RecipeMaps.cannerRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.canner", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
-        // Centrifuge
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.centrifuge", RecipeMaps.centrifugeNonCellRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.centrifuge", SoundResource.NONE);
-        // Chemical Bath
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.chemicalbath", RecipeMaps.chemicalBathRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.chemicalbath", SoundResource.NONE);
-        // Chemical Reactor
-        GT_ProcessingArray_Manager
-            .addRecipeMapToPA("basicmachine.chemicalreactor", RecipeMaps.multiblockChemicalReactorRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.chemicalreactor", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
-        // Circuit Assembler
-        GT_ProcessingArray_Manager
-            .addRecipeMapToPA("basicmachine.circuitassembler", RecipeMaps.circuitAssemblerRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.circuitassembler", SoundResource.NONE);
-        // Compressor
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.compressor", RecipeMaps.compressorRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.compressor", SoundResource.IC2_MACHINES_COMPRESSOR_OP);
-        // Cutting Machine
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.cutter", RecipeMaps.cutterRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.cutter", SoundResource.NONE);
-        // Distillery
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.distillery", RecipeMaps.distilleryRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.distillery", SoundResource.GT_MACHINES_DISTILLERY_LOOP);
-        // Electrolyzer
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.electrolyzer", RecipeMaps.electrolyzerNonCellRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.electrolyzer", SoundResource.IC2_MACHINES_MAGNETIZER_LOOP);
-        // Extractor
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.extractor", RecipeMaps.extractorRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.extractor", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
-        // Extruder
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.extruder", RecipeMaps.extruderRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.extruder", SoundResource.IC2_MACHINES_INDUCTION_LOOP);
-        // Fermenter
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.fermenter", RecipeMaps.fermentingRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.fermenter", SoundResource.NONE);
-        // Fluid Canner
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.fluidcanner", RecipeMaps.fluidCannerRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.fluidcanner", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
-        // Fluid Extractor
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.fluidextractor", RecipeMaps.fluidExtractionRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.fluidextractor", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
-        // Fluid Heater
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.fluidheater", RecipeMaps.fluidHeaterRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.fluidheater", SoundResource.NONE);
-        // Fluid Solidifier
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.fluidsolidifier", RecipeMaps.fluidSolidifierRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.fluidsolidifier", SoundResource.NONE);
-        // Forge Hammer
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.hammer", RecipeMaps.hammerRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.hammer", SoundResource.RANDOM_ANVIL_USE);
-        // Forming Press
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.press", RecipeMaps.formingPressRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.press", SoundResource.IC2_MACHINES_COMPRESSOR_OP);
-        // Laser Engraver
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.laserengraver", RecipeMaps.laserEngraverRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.laserengraver", SoundResource.IC2_MACHINES_MAGNETIZER_LOOP);
-        // Lathe
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.lathe", RecipeMaps.latheRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.lathe", SoundResource.NONE);
-        // Macerator
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.macerator", RecipeMaps.maceratorRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.macerator", SoundResource.IC2_MACHINES_MACERATOR_OP);
-        // Magnetic Separator
-        GT_ProcessingArray_Manager
-            .addRecipeMapToPA("basicmachine.electromagneticseparator", RecipeMaps.electroMagneticSeparatorRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.electromagneticseparator", SoundResource.IC2_MACHINES_MAGNETIZER_LOOP);
-        // Matter Amplifier
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.amplifab", RecipeMaps.amplifierRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.amplifab", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
-        // Microwave
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.microwave", RecipeMaps.microwaveRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.microwave", SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP);
-        // Mixer
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.mixer", RecipeMaps.mixerNonCellRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.mixer", SoundResource.NONE);
-        // Ore Washer
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.orewasher", RecipeMaps.oreWasherRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.orewasher", SoundResource.NONE);
-        // Plasma Arc Furnace
-        GT_ProcessingArray_Manager
-            .addRecipeMapToPA("basicmachine.plasmaarcfurnace", RecipeMaps.plasmaArcFurnaceRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.plasmaarcfurnace", SoundResource.IC2_MACHINES_INDUCTION_LOOP);
-        // Polarizer
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.polarizer", RecipeMaps.polarizerRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.polarizer", SoundResource.IC2_MACHINES_MAGNETIZER_LOOP);
-        // Printer
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.printer", RecipeMaps.printerRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.printer", SoundResource.IC2_MACHINES_COMPRESSOR_OP);
-        // Recycler
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.recycler", RecipeMaps.recyclerRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.recycler", SoundResource.IC2_MACHINES_RECYCLER_OP);
-        // Scanner
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.scanner", RecipeMaps.scannerFakeRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.scanner", SoundResource.IC2_MACHINES_MAGNETIZER_LOOP);
-        // Sifter
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.sifter", RecipeMaps.sifterRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.sifter", SoundResource.NONE);
-        // Slicer
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.slicer", RecipeMaps.slicerRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.slicer", SoundResource.NONE);
-        // Thermal Centrifuge
-        GT_ProcessingArray_Manager
-            .addRecipeMapToPA("basicmachine.thermalcentrifuge", RecipeMaps.thermalCentrifugeRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.thermalcentrifuge", SoundResource.NONE);
-        // Unboxinator
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.unboxinator", RecipeMaps.unpackagerRecipes);
-        GT_ProcessingArray_Manager.addSoundResourceToPA("basicmachine.unboxinator", SoundResource.NONE);
-        // Wiremill
-        GT_ProcessingArray_Manager.addRecipeMapToPA("basicmachine.wiremill", RecipeMaps.wiremillRecipes);
-        GT_ProcessingArray_Manager
-            .addSoundResourceToPA("basicmachine.wiremill", SoundResource.IC2_MACHINES_RECYCLER_OP);
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_RecyclerBlacklistLoader.java b/src/main/java/gregtech/loaders/postload/GT_RecyclerBlacklistLoader.java
deleted file mode 100644
index 70bb18527c..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_RecyclerBlacklistLoader.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package gregtech.loaders.postload;
-
-import static gregtech.api.enums.Mods.Chisel;
-import static gregtech.api.util.GT_ModHandler.addToRecyclerBlackList;
-
-import net.minecraft.init.Blocks;
-import net.minecraft.init.Items;
-import net.minecraft.item.ItemStack;
-
-import com.glodblock.github.loader.ItemAndBlockHolder;
-
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Mods;
-import gregtech.api.util.GT_Log;
-import gregtech.api.util.GT_ModHandler;
-
-public class GT_RecyclerBlacklistLoader implements Runnable {
-
-    @Override
-    public void run() {
-        GT_Log.out.println("GT_Mod: Adding Stuff to the Recycler Blacklist.");
-        addToRecyclerBlackList(new ItemStack(Items.arrow, 1, 0));
-        addToRecyclerBlackList(new ItemStack(Items.bone, 1, 0));
-        addToRecyclerBlackList(ItemList.Dye_Bonemeal.get(1L));
-
-        addToRecyclerBlackList(new ItemStack(Items.rotten_flesh, 1, 0));
-
-        addToRecyclerBlackList(new ItemStack(Items.string, 1, 0));
-
-        addToRecyclerBlackList(new ItemStack(Items.egg, 1, 0));
-        ItemStack tStack = new ItemStack(Blocks.cobblestone, 1, 0);
-        while (tStack != null) {
-            addToRecyclerBlackList(tStack);
-            tStack = GT_ModHandler
-                .getRecipeOutput(tStack, tStack, tStack, tStack, tStack, tStack, tStack, tStack, tStack);
-        }
-        addToRecyclerBlackList(new ItemStack(Blocks.gravel, 1, 32767));
-        addToRecyclerBlackList(new ItemStack(Items.flint, 1, 32767));
-        addToRecyclerBlackList(new ItemStack(Blocks.cobblestone_wall, 1, 32767));
-        addToRecyclerBlackList(new ItemStack(Blocks.sandstone_stairs, 1, 32767));
-        addToRecyclerBlackList(new ItemStack(Blocks.stone_stairs, 1, 32767));
-        addToRecyclerBlackList(new ItemStack(Blocks.stone_brick_stairs, 1, 32767));
-        addToRecyclerBlackList(GT_ModHandler.getSmeltingOutput(new ItemStack(Blocks.stone, 1, 0), false, null));
-        addToRecyclerBlackList(
-            GT_ModHandler
-                .getRecipeOutput(new ItemStack(Blocks.glass, 1, 0), null, null, new ItemStack(Blocks.glass, 1, 0)));
-        addToRecyclerBlackList(
-            GT_ModHandler
-                .getRecipeOutput(new ItemStack(Blocks.stone, 1, 0), null, null, new ItemStack(Blocks.stone, 1, 0)));
-        addToRecyclerBlackList(
-            GT_ModHandler.getRecipeOutput(
-                new ItemStack(Blocks.cobblestone, 1, 0),
-                null,
-                null,
-                new ItemStack(Blocks.cobblestone, 1, 0)));
-        addToRecyclerBlackList(
-            GT_ModHandler.getRecipeOutput(
-                new ItemStack(Blocks.stone, 1, 0),
-                null,
-                new ItemStack(Blocks.stone, 1, 0),
-                null,
-                new ItemStack(Blocks.stone, 1, 0)));
-        addToRecyclerBlackList(
-            GT_ModHandler.getRecipeOutput(
-                new ItemStack(Blocks.stone, 1, 0),
-                new ItemStack(Blocks.glass, 1, 0),
-                new ItemStack(Blocks.stone, 1, 0)));
-        addToRecyclerBlackList(
-            GT_ModHandler.getRecipeOutput(
-                new ItemStack(Blocks.cobblestone, 1, 0),
-                new ItemStack(Blocks.glass, 1, 0),
-                new ItemStack(Blocks.cobblestone, 1, 0)));
-        addToRecyclerBlackList(
-            GT_ModHandler.getRecipeOutput(
-                new ItemStack(Blocks.sandstone, 1, 0),
-                new ItemStack(Blocks.glass, 1, 0),
-                new ItemStack(Blocks.sandstone, 1, 0)));
-        addToRecyclerBlackList(
-            GT_ModHandler.getRecipeOutput(
-                new ItemStack(Blocks.sand, 1, 0),
-                new ItemStack(Blocks.glass, 1, 0),
-                new ItemStack(Blocks.sand, 1, 0)));
-        addToRecyclerBlackList(
-            GT_ModHandler.getRecipeOutput(
-                new ItemStack(Blocks.sandstone, 1, 0),
-                new ItemStack(Blocks.sandstone, 1, 0),
-                new ItemStack(Blocks.sandstone, 1, 0),
-                new ItemStack(Blocks.sandstone, 1, 0),
-                new ItemStack(Blocks.sandstone, 1, 0),
-                new ItemStack(Blocks.sandstone, 1, 0)));
-        addToRecyclerBlackList(GT_ModHandler.getRecipeOutput(new ItemStack(Blocks.glass, 1, 0)));
-        addToRecyclerBlackList(
-            GT_ModHandler.getRecipeOutput(new ItemStack(Blocks.glass, 1, 0), new ItemStack(Blocks.glass, 1, 0)));
-        if (Chisel.isModLoaded()) {
-            for (int i = 1; i <= 15; i++) {
-                addToRecyclerBlackList(GT_ModHandler.getModItem(Chisel.ID, "cobblestone", 1, i));
-            }
-            for (int i = 0; i <= 15; i++) {
-                addToRecyclerBlackList(GT_ModHandler.getModItem(Chisel.ID, "stonebricksmooth", 1, i));
-            }
-        }
-        if (Mods.AE2FluidCraft.isModLoaded()) {
-            addToRecyclerBlackList(new ItemStack(ItemAndBlockHolder.DROP));
-            addToRecyclerBlackList(new ItemStack(ItemAndBlockHolder.PACKET));
-        }
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_ScrapboxDropLoader.java b/src/main/java/gregtech/loaders/postload/GT_ScrapboxDropLoader.java
deleted file mode 100644
index 6d466abaa9..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_ScrapboxDropLoader.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package gregtech.loaders.postload;
-
-import net.minecraft.init.Blocks;
-import net.minecraft.init.Items;
-import net.minecraft.item.ItemStack;
-
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_Log;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-
-public class GT_ScrapboxDropLoader implements Runnable {
-
-    @Override
-    public void run() {
-        GT_Log.out.println("GT_Mod: (re-)adding Scrapbox Drops.");
-
-        GT_ModHandler.addScrapboxDrop(9.5F, new ItemStack(Items.wooden_hoe));
-        GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_axe));
-        GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_sword));
-        GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_shovel));
-        GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_pickaxe));
-        GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.sign));
-        GT_ModHandler.addScrapboxDrop(9.5F, new ItemStack(Items.stick));
-        GT_ModHandler.addScrapboxDrop(5.0F, new ItemStack(Blocks.dirt));
-        GT_ModHandler.addScrapboxDrop(3.0F, new ItemStack(Blocks.grass));
-        GT_ModHandler.addScrapboxDrop(3.0F, new ItemStack(Blocks.gravel));
-        GT_ModHandler.addScrapboxDrop(0.5F, new ItemStack(Blocks.pumpkin));
-        GT_ModHandler.addScrapboxDrop(1.0F, new ItemStack(Blocks.soul_sand));
-        GT_ModHandler.addScrapboxDrop(2.0F, new ItemStack(Blocks.netherrack));
-        GT_ModHandler.addScrapboxDrop(1.0F, new ItemStack(Items.bone));
-        GT_ModHandler.addScrapboxDrop(9.0F, new ItemStack(Items.rotten_flesh));
-        GT_ModHandler.addScrapboxDrop(0.4F, new ItemStack(Items.cooked_porkchop));
-        GT_ModHandler.addScrapboxDrop(0.4F, new ItemStack(Items.cooked_beef));
-        GT_ModHandler.addScrapboxDrop(0.4F, new ItemStack(Items.cooked_chicken));
-        GT_ModHandler.addScrapboxDrop(0.5F, new ItemStack(Items.apple));
-        GT_ModHandler.addScrapboxDrop(0.5F, new ItemStack(Items.bread));
-        GT_ModHandler.addScrapboxDrop(0.1F, new ItemStack(Items.cake));
-        GT_ModHandler.addScrapboxDrop(1.0F, ItemList.IC2_Food_Can_Filled.get(1L));
-        GT_ModHandler.addScrapboxDrop(2.0F, ItemList.IC2_Food_Can_Spoiled.get(1L));
-        GT_ModHandler.addScrapboxDrop(0.2F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1L));
-        GT_ModHandler.addScrapboxDrop(1.0F, GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L));
-        GT_ModHandler.addScrapboxDrop(2.0F, ItemList.Cell_Empty.get(1L));
-        GT_ModHandler.addScrapboxDrop(5.0F, GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 1L));
-        GT_ModHandler.addScrapboxDrop(1.0F, new ItemStack(Items.leather));
-        GT_ModHandler.addScrapboxDrop(1.0F, new ItemStack(Items.feather));
-        GT_ModHandler.addScrapboxDrop(0.7F, GT_ModHandler.getIC2Item("plantBall", 1L));
-        GT_ModHandler.addScrapboxDrop(3.8F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L));
-        GT_ModHandler.addScrapboxDrop(0.6F, new ItemStack(Items.slime_ball));
-        GT_ModHandler.addScrapboxDrop(0.8F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Rubber, 1L));
-        GT_ModHandler.addScrapboxDrop(2.7F, GT_ModHandler.getIC2Item("suBattery", 1L));
-        GT_ModHandler.addScrapboxDrop(3.6F, ItemList.Circuit_Primitive.get(1L));
-        GT_ModHandler.addScrapboxDrop(0.8F, ItemList.Circuit_Parts_Advanced.get(1L));
-        GT_ModHandler.addScrapboxDrop(1.8F, ItemList.Circuit_Board_Basic.get(1L));
-        GT_ModHandler.addScrapboxDrop(0.4F, ItemList.Circuit_Board_Advanced.get(1L));
-        GT_ModHandler.addScrapboxDrop(0.2F, ItemList.Circuit_Board_Elite.get(1L));
-        GT_ModHandler.addScrapboxDrop(0.9F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L));
-        GT_ModHandler.addScrapboxDrop(0.8F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L));
-        GT_ModHandler.addScrapboxDrop(0.8F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L));
-        GT_ModHandler.addScrapboxDrop(2.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Charcoal, 1L));
-        GT_ModHandler.addScrapboxDrop(1.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L));
-        GT_ModHandler.addScrapboxDrop(1.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L));
-        GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1L));
-        GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Electrum, 1L));
-        GT_ModHandler.addScrapboxDrop(1.2F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1L));
-        GT_ModHandler.addScrapboxDrop(1.2F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1L));
-        GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bauxite, 1L));
-        GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1L));
-        GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lead, 1L));
-        GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1L));
-        GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1L));
-        GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 1L));
-        GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 1L));
-        GT_ModHandler.addScrapboxDrop(1.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Obsidian, 1L));
-        GT_ModHandler.addScrapboxDrop(1.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L));
-        GT_ModHandler.addScrapboxDrop(2.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1L));
-        GT_ModHandler.addScrapboxDrop(2.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lazurite, 1L));
-        GT_ModHandler.addScrapboxDrop(2.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Pyrite, 1L));
-        GT_ModHandler.addScrapboxDrop(2.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L));
-        GT_ModHandler.addScrapboxDrop(2.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodalite, 1L));
-        GT_ModHandler.addScrapboxDrop(4.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 1L));
-        GT_ModHandler.addScrapboxDrop(4.0F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Flint, 1L));
-        GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1L));
-        GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tungsten, 1L));
-        GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1L));
-        GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 1L));
-        GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 1L));
-        GT_ModHandler.addScrapboxDrop(0.03F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 1L));
-        GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GarnetRed, 1L));
-        GT_ModHandler.addScrapboxDrop(0.5F, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GarnetYellow, 1L));
-        GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L));
-        GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L));
-        GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L));
-        GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L));
-        GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Emerald, 1L));
-        GT_ModHandler.addScrapboxDrop(0.05F, GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Diamond, 1L));
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java b/src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java
deleted file mode 100644
index 921f227b08..0000000000
--- a/src/main/java/gregtech/loaders/postload/GT_Worldgenloader.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package gregtech.loaders.postload;
-
-import bloodasp.galacticgreg.WorldGenGaGT;
-import gregtech.api.enums.GTStones;
-import gregtech.api.enums.OreMixes;
-import gregtech.api.enums.SmallOres;
-import gregtech.api.util.GT_Log;
-import gregtech.common.GT_Worldgenerator;
-
-public class GT_Worldgenloader implements Runnable {
-
-    public void run() {
-        new GT_Worldgenerator();
-
-        // GT Stones
-        for (GTStones stone : GTStones.values()) {
-            stone.addGTStone();
-        }
-
-        // GT Default Small Ores
-        for (SmallOres smallOre : SmallOres.values()) {
-            smallOre.addGTSmallOre();
-        }
-
-        // GT Veins registration
-        for (OreMixes oreMix : OreMixes.values()) {
-            oreMix.addGTOreLayer();
-        }
-
-        new WorldGenGaGT().run();
-        GT_Log.out.println("Started Galactic Greg ore gen code");
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/ItemMaxStacksizeLoader.java b/src/main/java/gregtech/loaders/postload/ItemMaxStacksizeLoader.java
new file mode 100644
index 0000000000..7e2a1164e1
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/ItemMaxStacksizeLoader.java
@@ -0,0 +1,138 @@
+package gregtech.loaders.postload;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.Item;
+
+import gregtech.GTMod;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GTLog;
+
+public class ItemMaxStacksizeLoader implements Runnable {
+
+    @Override
+    public void run() {
+        GTLog.out.println("GTMod: Changing maximum Stacksizes if configured.");
+
+        ItemList.Upgrade_Overclocker.getItem()
+            .setMaxStackSize(GTMod.gregtechproxy.mUpgradeCount);
+        Items.cake.setMaxStackSize(64);
+        Items.wooden_door.setMaxStackSize(8);
+        Items.iron_door.setMaxStackSize(8);
+        Items.ender_pearl.setMaxStackSize(64);
+        Items.egg.setMaxStackSize(64);
+        Items.snowball.setMaxStackSize(64);
+        Items.mushroom_stew.setMaxStackSize(64);
+        if (OrePrefixes.plank.mDefaultStackSize < 64) {
+            Item.getItemFromBlock(Blocks.wooden_slab)
+                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.double_wooden_slab)
+                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.oak_stairs)
+                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.jungle_stairs)
+                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.birch_stairs)
+                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.spruce_stairs)
+                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.acacia_stairs)
+                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.dark_oak_stairs)
+                .setMaxStackSize(OrePrefixes.plank.mDefaultStackSize);
+        }
+        if (OrePrefixes.block.mDefaultStackSize < 64) {
+            Item.getItemFromBlock(Blocks.stone_slab)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.double_stone_slab)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.brick_stairs)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.nether_brick_stairs)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.sandstone_stairs)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.stone_stairs)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.stone_brick_stairs)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.packed_ice)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.ice)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.soul_sand)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.glowstone)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.snow)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.snow)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.iron_block)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.gold_block)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.emerald_block)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.lapis_block)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.diamond_block)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.clay)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.redstone_lamp)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.dirt)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.grass)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.mycelium)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.gravel)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.sand)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.brick_block)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.wool)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.melon_block)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.pumpkin)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.lit_pumpkin)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.dispenser)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.obsidian)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.piston)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.sticky_piston)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.crafting_table)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.glass)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.jukebox)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.anvil)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.chest)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.trapped_chest)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.noteblock)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.mob_spawner)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.bookshelf)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.furnace)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+            Item.getItemFromBlock(Blocks.lit_furnace)
+                .setMaxStackSize(OrePrefixes.block.mDefaultStackSize);
+        }
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/MachineRecipeLoader.java b/src/main/java/gregtech/loaders/postload/MachineRecipeLoader.java
new file mode 100644
index 0000000000..c64ea6cf7b
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/MachineRecipeLoader.java
@@ -0,0 +1,126 @@
+package gregtech.loaders.postload;
+
+import gregtech.api.enums.Materials;
+import gregtech.loaders.postload.chains.BauxiteRefineChain;
+import gregtech.loaders.postload.chains.NaniteChain;
+import gregtech.loaders.postload.chains.PCBFactoryRecipes;
+import gregtech.loaders.postload.chains.PurifiedWaterRecipes;
+import gregtech.loaders.postload.recipes.AlloySmelterRecipes;
+import gregtech.loaders.postload.recipes.ArcFurnaceRecipes;
+import gregtech.loaders.postload.recipes.AssemblerRecipes;
+import gregtech.loaders.postload.recipes.AssemblyLineRecipes;
+import gregtech.loaders.postload.recipes.AutoclaveRecipes;
+import gregtech.loaders.postload.recipes.BenderRecipes;
+import gregtech.loaders.postload.recipes.BlastFurnaceRecipes;
+import gregtech.loaders.postload.recipes.BreweryRecipes;
+import gregtech.loaders.postload.recipes.CannerRecipes;
+import gregtech.loaders.postload.recipes.CentrifugeRecipes;
+import gregtech.loaders.postload.recipes.ChemicalBathRecipes;
+import gregtech.loaders.postload.recipes.ChemicalRecipes;
+import gregtech.loaders.postload.recipes.CircuitAssemblerRecipes;
+import gregtech.loaders.postload.recipes.CompressorRecipes;
+import gregtech.loaders.postload.recipes.CropProcessingRecipes;
+import gregtech.loaders.postload.recipes.CuttingRecipes;
+import gregtech.loaders.postload.recipes.DistilleryRecipes;
+import gregtech.loaders.postload.recipes.ElectrolyzerRecipes;
+import gregtech.loaders.postload.recipes.ElectromagneticSeparatorRecipes;
+import gregtech.loaders.postload.recipes.ExtractorRecipes;
+import gregtech.loaders.postload.recipes.ExtruderRecipes;
+import gregtech.loaders.postload.recipes.FermenterRecipes;
+import gregtech.loaders.postload.recipes.FluidCannerRecipes;
+import gregtech.loaders.postload.recipes.FluidExtractorRecipes;
+import gregtech.loaders.postload.recipes.FluidHeaterRecipes;
+import gregtech.loaders.postload.recipes.FluidSolidifierRecipes;
+import gregtech.loaders.postload.recipes.ForgeHammerRecipes;
+import gregtech.loaders.postload.recipes.FormingPressRecipes;
+import gregtech.loaders.postload.recipes.FuelRecipes;
+import gregtech.loaders.postload.recipes.FusionReactorRecipes;
+import gregtech.loaders.postload.recipes.ImplosionCompressorRecipes;
+import gregtech.loaders.postload.recipes.LaserEngraverRecipes;
+import gregtech.loaders.postload.recipes.LatheRecipes;
+import gregtech.loaders.postload.recipes.MatterAmplifierRecipes;
+import gregtech.loaders.postload.recipes.MixerRecipes;
+import gregtech.loaders.postload.recipes.NEIHiding;
+import gregtech.loaders.postload.recipes.OreDictUnification;
+import gregtech.loaders.postload.recipes.PackagerRecipes;
+import gregtech.loaders.postload.recipes.PlasmaForgeRecipes;
+import gregtech.loaders.postload.recipes.PrinterRecipes;
+import gregtech.loaders.postload.recipes.Pulverizer;
+import gregtech.loaders.postload.recipes.PyrolyseRecipes;
+import gregtech.loaders.postload.recipes.RecipeRemover;
+import gregtech.loaders.postload.recipes.SifterRecipes;
+import gregtech.loaders.postload.recipes.SlicerRecipes;
+import gregtech.loaders.postload.recipes.SmelterRecipes;
+import gregtech.loaders.postload.recipes.ThaumcraftRecipes;
+import gregtech.loaders.postload.recipes.ThermalCentrifugeRecipes;
+import gregtech.loaders.postload.recipes.TranscendentPlasmaMixerRecipes;
+import gregtech.loaders.postload.recipes.VacuumFreezerRecipes;
+import gregtech.loaders.postload.recipes.WiremillRecipes;
+
+public class MachineRecipeLoader implements Runnable {
+
+    public static final String aTextTCGTPage = "gt.research.page.1.";
+
+    public static final Materials[] solderingMats = new Materials[] { Materials.Lead, Materials.SolderingAlloy,
+        Materials.Tin };
+
+    @Override
+    public void run() {
+        new AlloySmelterRecipes().run();
+        new ArcFurnaceRecipes().run();
+        new AssemblerRecipes().run();
+        new AssemblyLineRecipes().run();
+        new AutoclaveRecipes().run();
+        new BenderRecipes().run();
+        new BlastFurnaceRecipes().run();
+        new BreweryRecipes().run();
+        new CannerRecipes().run();
+        new CentrifugeRecipes().run();
+        new ChemicalBathRecipes().run();
+        new ChemicalRecipes().run();
+        new CircuitAssemblerRecipes().run();
+        new CompressorRecipes().run();
+        new CropProcessingRecipes().run();
+        new CuttingRecipes().run();
+        new DistilleryRecipes().run();
+        new ElectrolyzerRecipes().run();
+        new ElectromagneticSeparatorRecipes().run();
+        new ExtractorRecipes().run();
+        new ExtruderRecipes().run();
+        new FermenterRecipes().run();
+        new FluidCannerRecipes().run();
+        new FluidExtractorRecipes().run();
+        new FluidHeaterRecipes().run();
+        new FluidSolidifierRecipes().run();
+        new ForgeHammerRecipes().run();
+        new FormingPressRecipes().run();
+        new FuelRecipes().run();
+        new FusionReactorRecipes().run();
+        new ImplosionCompressorRecipes().run();
+        new LaserEngraverRecipes().run();
+        new LatheRecipes().run();
+        new MatterAmplifierRecipes().run();
+        new MixerRecipes().run();
+        new NEIHiding().run();
+        new OreDictUnification().run();
+        new PackagerRecipes().run();
+        new PlasmaForgeRecipes().run();
+        new PrinterRecipes().run();
+        new Pulverizer().run();
+        new PyrolyseRecipes().run();
+        new RecipeRemover().run();
+        new SifterRecipes().run();
+        new SlicerRecipes().run();
+        new SmelterRecipes().run();
+        new ThaumcraftRecipes().run();
+        new ThermalCentrifugeRecipes().run();
+        new VacuumFreezerRecipes().run();
+        new WiremillRecipes().run();
+        new TranscendentPlasmaMixerRecipes().run();
+
+        BauxiteRefineChain.run();
+        NaniteChain.run();
+        PCBFactoryRecipes.load();
+        PurifiedWaterRecipes.run();
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/MachineTooltipsLoader.java b/src/main/java/gregtech/loaders/postload/MachineTooltipsLoader.java
new file mode 100644
index 0000000000..2043576494
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/MachineTooltipsLoader.java
@@ -0,0 +1,36 @@
+package gregtech.loaders.postload;
+
+import static gregtech.api.enums.GTValues.GT;
+
+import net.minecraft.item.ItemStack;
+
+import gregtech.api.GregTechAPI;
+import gregtech.api.util.GTLanguageManager;
+import gregtech.api.util.GTLog;
+import gregtech.common.blocks.ItemMachines;
+
+public class MachineTooltipsLoader implements Runnable {
+
+    @Override
+    public void run() {
+        if (!GT.isClientSide()) return;
+        GTLog.out.println("GT Mod: Register Block Machine's tooltips");
+        for (int i = 0; i < 32768; i++) {
+            ItemStack tStack = new ItemStack(GregTechAPI.sBlockMachines, 1, i);
+            if (tStack.getItem() != null && tStack.getItem() instanceof ItemMachines) {
+                ((ItemMachines) tStack.getItem()).registerDescription(i);
+            }
+        }
+        GTLanguageManager.addStringLocalization("TileEntity_EUp_IN", "Voltage IN: ");
+        GTLanguageManager.addStringLocalization("TileEntity_EUp_OUT", "Voltage OUT: ");
+        GTLanguageManager.addStringLocalization("TileEntity_EUp_AMOUNT", "Amperage: ");
+        GTLanguageManager.addStringLocalization("TileEntity_EUp_STORE", "Capacity: ");
+        GTLanguageManager.addStringLocalization("TileEntity_TANK_INFO", "Contains Fluid: ");
+        GTLanguageManager.addStringLocalization("TileEntity_TANK_AMOUNT", "Fluid Amount: ");
+        GTLanguageManager.addStringLocalization("TileEntity_CHEST_INFO", "Contains Item: ");
+        GTLanguageManager.addStringLocalization("TileEntity_CHEST_AMOUNT", "Item Amount: ");
+        GTLanguageManager.addStringLocalization("GT_TileEntity_MUFFLER", "has Muffler Upgrade");
+        GTLanguageManager.addStringLocalization("GT_TileEntity_STEAMCONVERTER", "has Steam Upgrade");
+        GTLanguageManager.addStringLocalization("GT_TileEntity_STEAMTANKS", "Steam Tank Upgrades");
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/MinableRegistrator.java b/src/main/java/gregtech/loaders/postload/MinableRegistrator.java
new file mode 100644
index 0000000000..ea59486146
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/MinableRegistrator.java
@@ -0,0 +1,16 @@
+package gregtech.loaders.postload;
+
+import net.minecraft.init.Blocks;
+
+import gregtech.api.util.GTLog;
+import gregtech.api.util.GTModHandler;
+
+public class MinableRegistrator implements Runnable {
+
+    @Override
+    public void run() {
+        GTLog.out.println("GTMod: Adding Blocks to the Miners Valuable List.");
+        GTModHandler.addValuableOre(Blocks.glowstone, 0, 1);
+        GTModHandler.addValuableOre(Blocks.soul_sand, 0, 1);
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/PCBFactoryMaterialLoader.java b/src/main/java/gregtech/loaders/postload/PCBFactoryMaterialLoader.java
new file mode 100644
index 0000000000..0f6ab52a32
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/PCBFactoryMaterialLoader.java
@@ -0,0 +1,19 @@
+package gregtech.loaders.postload;
+
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.MaterialsKevlar;
+import gregtech.api.util.PCBFactoryManager;
+
+public class PCBFactoryMaterialLoader {
+
+    public static void load() {
+        // add Plastics
+        PCBFactoryManager.addPlasticTier(Materials.Plastic, 1);
+        PCBFactoryManager.addPlasticTier(Materials.PolyvinylChloride, 2);
+        PCBFactoryManager.addPlasticTier(Materials.Polytetrafluoroethylene, 3);
+        PCBFactoryManager.addPlasticTier(Materials.Epoxid, 4);
+        PCBFactoryManager.addPlasticTier(Materials.EpoxidFiberReinforced, 5);
+        PCBFactoryManager.addPlasticTier(Materials.Polybenzimidazole, 6);
+        PCBFactoryManager.addPlasticTier(MaterialsKevlar.Kevlar, 7);
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/PartP2PGTPower.java b/src/main/java/gregtech/loaders/postload/PartP2PGTPower.java
index 389ac1cc57..cb8d73cae1 100644
--- a/src/main/java/gregtech/loaders/postload/PartP2PGTPower.java
+++ b/src/main/java/gregtech/loaders/postload/PartP2PGTPower.java
@@ -14,7 +14,7 @@ import appeng.api.networking.ticking.TickingRequest;
 import appeng.parts.AEBasePart;
 import appeng.parts.p2p.PartP2PIC2Power;
 import gregtech.api.interfaces.tileentity.IEnergyConnected;
-import gregtech.api.util.GT_Log;
+import gregtech.api.util.GTLog;
 
 public class PartP2PGTPower extends PartP2PIC2Power implements IGridTickable {
 
@@ -96,8 +96,8 @@ public class PartP2PGTPower extends PartP2PIC2Power implements IGridTickable {
             fSide.setAccessible(true);
             return (ForgeDirection) fSide.get(this);
         } catch (Exception e) {
-            GT_Log.out.println("A fatal error occured at the P2P tunnel for GT electricity");
-            e.printStackTrace(GT_Log.out);
+            GTLog.out.println("A fatal error occured at the P2P tunnel for GT electricity");
+            e.printStackTrace(GTLog.out);
             throw new RuntimeException(e);
         }
     }
diff --git a/src/main/java/gregtech/loaders/postload/PosteaTransformers.java b/src/main/java/gregtech/loaders/postload/PosteaTransformers.java
index ae24de26e8..d920872f0e 100644
--- a/src/main/java/gregtech/loaders/postload/PosteaTransformers.java
+++ b/src/main/java/gregtech/loaders/postload/PosteaTransformers.java
@@ -8,8 +8,8 @@ import com.gtnewhorizons.postea.api.TileEntityReplacementManager;
 import com.gtnewhorizons.postea.utility.BlockInfo;
 
 import cpw.mods.fml.common.registry.GameRegistry;
-import gregtech.api.GregTech_API;
-import gregtech.api.enums.GT_Values;
+import gregtech.api.GregTechAPI;
+import gregtech.api.enums.GTValues;
 import vexatos.tgregworks.reference.Mods;
 
 public class PosteaTransformers implements Runnable {
@@ -34,7 +34,7 @@ public class PosteaTransformers implements Runnable {
             int indexInMaterialList = id - 4096;
             // The offset from 4096 is the index in the material list, so if this is outside the valid range then this
             // is not a valid frame box, and we don't want to modify it
-            if (indexInMaterialList < 0 || indexInMaterialList >= GregTech_API.sGeneratedMaterials.length) {
+            if (indexInMaterialList < 0 || indexInMaterialList >= GregTechAPI.sGeneratedMaterials.length) {
                 // Do not modify this TE, so return null
                 return null;
             }
@@ -44,12 +44,12 @@ public class PosteaTransformers implements Runnable {
             // is the new frame block. We can make sure to keep the TE using a pass-through transformer.
             // This works because between the old and new frame systems, the TileEntity used for covered frames
             // is still the same
-            if (tag.hasKey(GT_Values.NBT.COVERS)) {
-                return new BlockInfo(GregTech_API.sBlockFrames, indexInMaterialList, PosteaTransformers::passthrough);
+            if (tag.hasKey(GTValues.NBT.COVERS)) {
+                return new BlockInfo(GregTechAPI.sBlockFrames, indexInMaterialList, PosteaTransformers::passthrough);
             }
 
             // If this frame has no covers, simply return a block and delete the TileEntity
-            return new BlockInfo(GregTech_API.sBlockFrames, indexInMaterialList);
+            return new BlockInfo(GregTechAPI.sBlockFrames, indexInMaterialList);
         });
 
         ItemStackReplacementManager.addItemReplacement("gregtech:gt.blockmachines", (tag) -> {
@@ -57,12 +57,12 @@ public class PosteaTransformers implements Runnable {
             int id = tag.getInteger("Damage");
             int indexInMaterialList = id - 4096;
             // Not a frame box
-            if (indexInMaterialList < 0 || indexInMaterialList >= GregTech_API.sGeneratedMaterials.length) {
+            if (indexInMaterialList < 0 || indexInMaterialList >= GregTechAPI.sGeneratedMaterials.length) {
                 return tag;
             }
             // Not a frame box if the material for this id does not have a frame box associated with it.
             // Apparently the DEFC ID overlaps with the material ID for a Bastnasite frame box for example
-            if ((GregTech_API.sGeneratedMaterials[indexInMaterialList].mTypes & 0x2) == 0) {
+            if ((GregTechAPI.sGeneratedMaterials[indexInMaterialList].mTypes & 0x2) == 0) {
                 return tag;
             }
             Item frameItem = GameRegistry.findItem(Mods.GregTech, "gt.blockframes");
diff --git a/src/main/java/gregtech/loaders/postload/ProcessingArrayRecipeLoader.java b/src/main/java/gregtech/loaders/postload/ProcessingArrayRecipeLoader.java
new file mode 100644
index 0000000000..9525041fcc
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/ProcessingArrayRecipeLoader.java
@@ -0,0 +1,156 @@
+package gregtech.loaders.postload;
+
+import gregtech.api.enums.SoundResource;
+import gregtech.api.recipe.RecipeMaps;
+import gregtech.api.util.ProcessingArrayManager;
+
+public class ProcessingArrayRecipeLoader {
+
+    public static void registerDefaultGregtechMaps() {
+
+        // Alloy Smelter
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.alloysmelter", RecipeMaps.alloySmelterRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.alloysmelter", SoundResource.IC2_MACHINES_INDUCTION_LOOP);
+        // Arc Furnace
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.arcfurnace", RecipeMaps.arcFurnaceRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.arcfurnace", SoundResource.IC2_MACHINES_INDUCTION_LOOP);
+        // Assembler
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.assembler", RecipeMaps.assemblerRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.assembler", SoundResource.NONE);
+        // Autoclave
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.autoclave", RecipeMaps.autoclaveRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.autoclave", SoundResource.NONE);
+        // Bender
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.bender", RecipeMaps.benderRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.bender", SoundResource.IC2_MACHINES_COMPRESSOR_OP);
+        // Boxinator
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.boxinator", RecipeMaps.packagerRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.boxinator", SoundResource.NONE);
+        // Brewery
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.brewery", RecipeMaps.brewingRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.brewery", SoundResource.NONE);
+        // Canner
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.canner", RecipeMaps.cannerRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.canner", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
+        // Centrifuge
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.centrifuge", RecipeMaps.centrifugeNonCellRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.centrifuge", SoundResource.NONE);
+        // Chemical Bath
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.chemicalbath", RecipeMaps.chemicalBathRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.chemicalbath", SoundResource.NONE);
+        // Chemical Reactor
+        ProcessingArrayManager
+            .addRecipeMapToPA("basicmachine.chemicalreactor", RecipeMaps.multiblockChemicalReactorRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.chemicalreactor", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
+        // Circuit Assembler
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.circuitassembler", RecipeMaps.circuitAssemblerRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.circuitassembler", SoundResource.NONE);
+        // Compressor
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.compressor", RecipeMaps.compressorRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.compressor", SoundResource.IC2_MACHINES_COMPRESSOR_OP);
+        // Cutting Machine
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.cutter", RecipeMaps.cutterRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.cutter", SoundResource.NONE);
+        // Distillery
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.distillery", RecipeMaps.distilleryRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.distillery", SoundResource.GT_MACHINES_DISTILLERY_LOOP);
+        // Electrolyzer
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.electrolyzer", RecipeMaps.electrolyzerNonCellRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.electrolyzer", SoundResource.IC2_MACHINES_MAGNETIZER_LOOP);
+        // Extractor
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.extractor", RecipeMaps.extractorRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.extractor", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
+        // Extruder
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.extruder", RecipeMaps.extruderRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.extruder", SoundResource.IC2_MACHINES_INDUCTION_LOOP);
+        // Fermenter
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.fermenter", RecipeMaps.fermentingRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.fermenter", SoundResource.NONE);
+        // Fluid Canner
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.fluidcanner", RecipeMaps.fluidCannerRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.fluidcanner", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
+        // Fluid Extractor
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.fluidextractor", RecipeMaps.fluidExtractionRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.fluidextractor", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
+        // Fluid Heater
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.fluidheater", RecipeMaps.fluidHeaterRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.fluidheater", SoundResource.NONE);
+        // Fluid Solidifier
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.fluidsolidifier", RecipeMaps.fluidSolidifierRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.fluidsolidifier", SoundResource.NONE);
+        // Forge Hammer
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.hammer", RecipeMaps.hammerRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.hammer", SoundResource.RANDOM_ANVIL_USE);
+        // Forming Press
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.press", RecipeMaps.formingPressRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.press", SoundResource.IC2_MACHINES_COMPRESSOR_OP);
+        // Laser Engraver
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.laserengraver", RecipeMaps.laserEngraverRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.laserengraver", SoundResource.IC2_MACHINES_MAGNETIZER_LOOP);
+        // Lathe
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.lathe", RecipeMaps.latheRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.lathe", SoundResource.NONE);
+        // Macerator
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.macerator", RecipeMaps.maceratorRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.macerator", SoundResource.IC2_MACHINES_MACERATOR_OP);
+        // Magnetic Separator
+        ProcessingArrayManager
+            .addRecipeMapToPA("basicmachine.electromagneticseparator", RecipeMaps.electroMagneticSeparatorRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.electromagneticseparator", SoundResource.IC2_MACHINES_MAGNETIZER_LOOP);
+        // Matter Amplifier
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.amplifab", RecipeMaps.amplifierRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.amplifab", SoundResource.IC2_MACHINES_EXTRACTOR_OP);
+        // Microwave
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.microwave", RecipeMaps.microwaveRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.microwave", SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP);
+        // Mixer
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.mixer", RecipeMaps.mixerNonCellRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.mixer", SoundResource.NONE);
+        // Ore Washer
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.orewasher", RecipeMaps.oreWasherRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.orewasher", SoundResource.NONE);
+        // Plasma Arc Furnace
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.plasmaarcfurnace", RecipeMaps.plasmaArcFurnaceRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.plasmaarcfurnace", SoundResource.IC2_MACHINES_INDUCTION_LOOP);
+        // Polarizer
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.polarizer", RecipeMaps.polarizerRecipes);
+        ProcessingArrayManager
+            .addSoundResourceToPA("basicmachine.polarizer", SoundResource.IC2_MACHINES_MAGNETIZER_LOOP);
+        // Printer
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.printer", RecipeMaps.printerRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.printer", SoundResource.IC2_MACHINES_COMPRESSOR_OP);
+        // Recycler
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.recycler", RecipeMaps.recyclerRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.recycler", SoundResource.IC2_MACHINES_RECYCLER_OP);
+        // Scanner
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.scanner", RecipeMaps.scannerFakeRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.scanner", SoundResource.IC2_MACHINES_MAGNETIZER_LOOP);
+        // Sifter
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.sifter", RecipeMaps.sifterRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.sifter", SoundResource.NONE);
+        // Slicer
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.slicer", RecipeMaps.slicerRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.slicer", SoundResource.NONE);
+        // Thermal Centrifuge
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.thermalcentrifuge", RecipeMaps.thermalCentrifugeRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.thermalcentrifuge", SoundResource.NONE);
+        // Unboxinator
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.unboxinator", RecipeMaps.unpackagerRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.unboxinator", SoundResource.NONE);
+        // Wiremill
+        ProcessingArrayManager.addRecipeMapToPA("basicmachine.wiremill", RecipeMaps.wiremillRecipes);
+        ProcessingArrayManager.addSoundResourceToPA("basicmachine.wiremill", SoundResource.IC2_MACHINES_RECYCLER_OP);
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/RecyclerBlacklistLoader.java b/src/main/java/gregtech/loaders/postload/RecyclerBlacklistLoader.java
new file mode 100644
index 0000000000..e2c821512f
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/RecyclerBlacklistLoader.java
@@ -0,0 +1,107 @@
+package gregtech.loaders.postload;
+
+import static gregtech.api.enums.Mods.Chisel;
+import static gregtech.api.util.GTModHandler.addToRecyclerBlackList;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+import com.glodblock.github.loader.ItemAndBlockHolder;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Mods;
+import gregtech.api.util.GTLog;
+import gregtech.api.util.GTModHandler;
+
+public class RecyclerBlacklistLoader implements Runnable {
+
+    @Override
+    public void run() {
+        GTLog.out.println("GTMod: Adding Stuff to the Recycler Blacklist.");
+        addToRecyclerBlackList(new ItemStack(Items.arrow, 1, 0));
+        addToRecyclerBlackList(new ItemStack(Items.bone, 1, 0));
+        addToRecyclerBlackList(ItemList.Dye_Bonemeal.get(1L));
+
+        addToRecyclerBlackList(new ItemStack(Items.rotten_flesh, 1, 0));
+
+        addToRecyclerBlackList(new ItemStack(Items.string, 1, 0));
+
+        addToRecyclerBlackList(new ItemStack(Items.egg, 1, 0));
+        ItemStack tStack = new ItemStack(Blocks.cobblestone, 1, 0);
+        while (tStack != null) {
+            addToRecyclerBlackList(tStack);
+            tStack = GTModHandler
+                .getRecipeOutput(tStack, tStack, tStack, tStack, tStack, tStack, tStack, tStack, tStack);
+        }
+        addToRecyclerBlackList(new ItemStack(Blocks.gravel, 1, 32767));
+        addToRecyclerBlackList(new ItemStack(Items.flint, 1, 32767));
+        addToRecyclerBlackList(new ItemStack(Blocks.cobblestone_wall, 1, 32767));
+        addToRecyclerBlackList(new ItemStack(Blocks.sandstone_stairs, 1, 32767));
+        addToRecyclerBlackList(new ItemStack(Blocks.stone_stairs, 1, 32767));
+        addToRecyclerBlackList(new ItemStack(Blocks.stone_brick_stairs, 1, 32767));
+        addToRecyclerBlackList(GTModHandler.getSmeltingOutput(new ItemStack(Blocks.stone, 1, 0), false, null));
+        addToRecyclerBlackList(
+            GTModHandler
+                .getRecipeOutput(new ItemStack(Blocks.glass, 1, 0), null, null, new ItemStack(Blocks.glass, 1, 0)));
+        addToRecyclerBlackList(
+            GTModHandler
+                .getRecipeOutput(new ItemStack(Blocks.stone, 1, 0), null, null, new ItemStack(Blocks.stone, 1, 0)));
+        addToRecyclerBlackList(
+            GTModHandler.getRecipeOutput(
+                new ItemStack(Blocks.cobblestone, 1, 0),
+                null,
+                null,
+                new ItemStack(Blocks.cobblestone, 1, 0)));
+        addToRecyclerBlackList(
+            GTModHandler.getRecipeOutput(
+                new ItemStack(Blocks.stone, 1, 0),
+                null,
+                new ItemStack(Blocks.stone, 1, 0),
+                null,
+                new ItemStack(Blocks.stone, 1, 0)));
+        addToRecyclerBlackList(
+            GTModHandler.getRecipeOutput(
+                new ItemStack(Blocks.stone, 1, 0),
+                new ItemStack(Blocks.glass, 1, 0),
+                new ItemStack(Blocks.stone, 1, 0)));
+        addToRecyclerBlackList(
+            GTModHandler.getRecipeOutput(
+                new ItemStack(Blocks.cobblestone, 1, 0),
+                new ItemStack(Blocks.glass, 1, 0),
+                new ItemStack(Blocks.cobblestone, 1, 0)));
+        addToRecyclerBlackList(
+            GTModHandler.getRecipeOutput(
+                new ItemStack(Blocks.sandstone, 1, 0),
+                new ItemStack(Blocks.glass, 1, 0),
+                new ItemStack(Blocks.sandstone, 1, 0)));
+        addToRecyclerBlackList(
+            GTModHandler.getRecipeOutput(
+                new ItemStack(Blocks.sand, 1, 0),
+                new ItemStack(Blocks.glass, 1, 0),
+                new ItemStack(Blocks.sand, 1, 0)));
+        addToRecyclerBlackList(
+            GTModHandler.getRecipeOutput(
+                new ItemStack(Blocks.sandstone, 1, 0),
+                new ItemStack(Blocks.sandstone, 1, 0),
+                new ItemStack(Blocks.sandstone, 1, 0),
+                new ItemStack(Blocks.sandstone, 1, 0),
+                new ItemStack(Blocks.sandstone, 1, 0),
+                new ItemStack(Blocks.sandstone, 1, 0)));
+        addToRecyclerBlackList(GTModHandler.getRecipeOutput(new ItemStack(Blocks.glass, 1, 0)));
+        addToRecyclerBlackList(
+            GTModHandler.getRecipeOutput(new ItemStack(Blocks.glass, 1, 0), new ItemStack(Blocks.glass, 1, 0)));
+        if (Chisel.isModLoaded()) {
+            for (int i = 1; i <= 15; i++) {
+                addToRecyclerBlackList(GTModHandler.getModItem(Chisel.ID, "cobblestone", 1, i));
+            }
+            for (int i = 0; i <= 15; i++) {
+                addToRecyclerBlackList(GTModHandler.getModItem(Chisel.ID, "stonebricksmooth", 1, i));
+            }
+        }
+        if (Mods.AE2FluidCraft.isModLoaded()) {
+            addToRecyclerBlackList(new ItemStack(ItemAndBlockHolder.DROP));
+            addToRecyclerBlackList(new ItemStack(ItemAndBlockHolder.PACKET));
+        }
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/ScrapboxDropLoader.java b/src/main/java/gregtech/loaders/postload/ScrapboxDropLoader.java
new file mode 100644
index 0000000000..8574087d31
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/ScrapboxDropLoader.java
@@ -0,0 +1,100 @@
+package gregtech.loaders.postload;
+
+import net.minecraft.init.Blocks;
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.util.GTLog;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+
+public class ScrapboxDropLoader implements Runnable {
+
+    @Override
+    public void run() {
+        GTLog.out.println("GTMod: (re-)adding Scrapbox Drops.");
+
+        GTModHandler.addScrapboxDrop(9.5F, new ItemStack(Items.wooden_hoe));
+        GTModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_axe));
+        GTModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_sword));
+        GTModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_shovel));
+        GTModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.wooden_pickaxe));
+        GTModHandler.addScrapboxDrop(2.0F, new ItemStack(Items.sign));
+        GTModHandler.addScrapboxDrop(9.5F, new ItemStack(Items.stick));
+        GTModHandler.addScrapboxDrop(5.0F, new ItemStack(Blocks.dirt));
+        GTModHandler.addScrapboxDrop(3.0F, new ItemStack(Blocks.grass));
+        GTModHandler.addScrapboxDrop(3.0F, new ItemStack(Blocks.gravel));
+        GTModHandler.addScrapboxDrop(0.5F, new ItemStack(Blocks.pumpkin));
+        GTModHandler.addScrapboxDrop(1.0F, new ItemStack(Blocks.soul_sand));
+        GTModHandler.addScrapboxDrop(2.0F, new ItemStack(Blocks.netherrack));
+        GTModHandler.addScrapboxDrop(1.0F, new ItemStack(Items.bone));
+        GTModHandler.addScrapboxDrop(9.0F, new ItemStack(Items.rotten_flesh));
+        GTModHandler.addScrapboxDrop(0.4F, new ItemStack(Items.cooked_porkchop));
+        GTModHandler.addScrapboxDrop(0.4F, new ItemStack(Items.cooked_beef));
+        GTModHandler.addScrapboxDrop(0.4F, new ItemStack(Items.cooked_chicken));
+        GTModHandler.addScrapboxDrop(0.5F, new ItemStack(Items.apple));
+        GTModHandler.addScrapboxDrop(0.5F, new ItemStack(Items.bread));
+        GTModHandler.addScrapboxDrop(0.1F, new ItemStack(Items.cake));
+        GTModHandler.addScrapboxDrop(1.0F, ItemList.IC2_Food_Can_Filled.get(1L));
+        GTModHandler.addScrapboxDrop(2.0F, ItemList.IC2_Food_Can_Spoiled.get(1L));
+        GTModHandler.addScrapboxDrop(0.2F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1L));
+        GTModHandler.addScrapboxDrop(1.0F, GTOreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L));
+        GTModHandler.addScrapboxDrop(2.0F, ItemList.Cell_Empty.get(1L));
+        GTModHandler.addScrapboxDrop(5.0F, GTOreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 1L));
+        GTModHandler.addScrapboxDrop(1.0F, new ItemStack(Items.leather));
+        GTModHandler.addScrapboxDrop(1.0F, new ItemStack(Items.feather));
+        GTModHandler.addScrapboxDrop(0.7F, GTModHandler.getIC2Item("plantBall", 1L));
+        GTModHandler.addScrapboxDrop(3.8F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L));
+        GTModHandler.addScrapboxDrop(0.6F, new ItemStack(Items.slime_ball));
+        GTModHandler.addScrapboxDrop(0.8F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Rubber, 1L));
+        GTModHandler.addScrapboxDrop(2.7F, GTModHandler.getIC2Item("suBattery", 1L));
+        GTModHandler.addScrapboxDrop(3.6F, ItemList.Circuit_Primitive.get(1L));
+        GTModHandler.addScrapboxDrop(0.8F, ItemList.Circuit_Parts_Advanced.get(1L));
+        GTModHandler.addScrapboxDrop(1.8F, ItemList.Circuit_Board_Basic.get(1L));
+        GTModHandler.addScrapboxDrop(0.4F, ItemList.Circuit_Board_Advanced.get(1L));
+        GTModHandler.addScrapboxDrop(0.2F, ItemList.Circuit_Board_Elite.get(1L));
+        GTModHandler.addScrapboxDrop(0.9F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L));
+        GTModHandler.addScrapboxDrop(0.8F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L));
+        GTModHandler.addScrapboxDrop(0.8F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L));
+        GTModHandler.addScrapboxDrop(2.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Charcoal, 1L));
+        GTModHandler.addScrapboxDrop(1.0F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L));
+        GTModHandler.addScrapboxDrop(1.0F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L));
+        GTModHandler.addScrapboxDrop(0.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1L));
+        GTModHandler.addScrapboxDrop(0.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Electrum, 1L));
+        GTModHandler.addScrapboxDrop(1.2F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1L));
+        GTModHandler.addScrapboxDrop(1.2F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1L));
+        GTModHandler.addScrapboxDrop(0.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bauxite, 1L));
+        GTModHandler.addScrapboxDrop(0.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1L));
+        GTModHandler.addScrapboxDrop(0.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lead, 1L));
+        GTModHandler.addScrapboxDrop(0.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1L));
+        GTModHandler.addScrapboxDrop(0.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1L));
+        GTModHandler.addScrapboxDrop(0.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 1L));
+        GTModHandler.addScrapboxDrop(0.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 1L));
+        GTModHandler.addScrapboxDrop(1.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Obsidian, 1L));
+        GTModHandler.addScrapboxDrop(1.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L));
+        GTModHandler.addScrapboxDrop(2.0F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1L));
+        GTModHandler.addScrapboxDrop(2.0F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lazurite, 1L));
+        GTModHandler.addScrapboxDrop(2.0F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Pyrite, 1L));
+        GTModHandler.addScrapboxDrop(2.0F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L));
+        GTModHandler.addScrapboxDrop(2.0F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodalite, 1L));
+        GTModHandler.addScrapboxDrop(4.0F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 1L));
+        GTModHandler.addScrapboxDrop(4.0F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Flint, 1L));
+        GTModHandler.addScrapboxDrop(0.03F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1L));
+        GTModHandler.addScrapboxDrop(0.03F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tungsten, 1L));
+        GTModHandler.addScrapboxDrop(0.03F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1L));
+        GTModHandler.addScrapboxDrop(0.03F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 1L));
+        GTModHandler.addScrapboxDrop(0.03F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 1L));
+        GTModHandler.addScrapboxDrop(0.03F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 1L));
+        GTModHandler.addScrapboxDrop(0.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.GarnetRed, 1L));
+        GTModHandler.addScrapboxDrop(0.5F, GTOreDictUnificator.get(OrePrefixes.dust, Materials.GarnetYellow, 1L));
+        GTModHandler.addScrapboxDrop(0.05F, GTOreDictUnificator.get(OrePrefixes.gem, Materials.Olivine, 1L));
+        GTModHandler.addScrapboxDrop(0.05F, GTOreDictUnificator.get(OrePrefixes.gem, Materials.Ruby, 1L));
+        GTModHandler.addScrapboxDrop(0.05F, GTOreDictUnificator.get(OrePrefixes.gem, Materials.Sapphire, 1L));
+        GTModHandler.addScrapboxDrop(0.05F, GTOreDictUnificator.get(OrePrefixes.gem, Materials.GreenSapphire, 1L));
+        GTModHandler.addScrapboxDrop(0.05F, GTOreDictUnificator.get(OrePrefixes.gem, Materials.Emerald, 1L));
+        GTModHandler.addScrapboxDrop(0.05F, GTOreDictUnificator.get(OrePrefixes.gem, Materials.Diamond, 1L));
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/chains/BauxiteRefineChain.java b/src/main/java/gregtech/loaders/postload/chains/BauxiteRefineChain.java
new file mode 100644
index 0000000000..ec108b7cc9
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/chains/BauxiteRefineChain.java
@@ -0,0 +1,297 @@
+package gregtech.loaders.postload.chains;
+
+import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes;
+import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes;
+import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes;
+import static gregtech.api.recipe.RecipeMaps.mixerRecipes;
+import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+
+import net.minecraftforge.fluids.FluidStack;
+
+import gregtech.api.enums.GTValues;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.MaterialsOreAlum;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.TierEU;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+
+public class BauxiteRefineChain {
+
+    public static void run() {
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Bauxite, 32),
+                Materials.SodiumHydroxide.getDust(9),
+                Materials.Quicklime.getDust(4),
+                GTUtility.getIntegratedCircuit(8))
+            .fluidInputs(Materials.Water.getFluid(5000))
+            .fluidOutputs(MaterialsOreAlum.BauxiteSlurry.getFluid(8000))
+            .duration(10 * SECONDS)
+            .eut(TierEU.RECIPE_MV)
+            .addTo(mixerRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Bauxite, 32),
+                Materials.SodiumHydroxide.getDust(9),
+                Materials.Quicklime.getDust(4),
+                GTUtility.getIntegratedCircuit(8))
+            .fluidInputs(Materials.Water.getFluid(5000))
+            .fluidOutputs(MaterialsOreAlum.BauxiteSlurry.getFluid(8000))
+            .duration(10 * SECONDS)
+            .eut(TierEU.RECIPE_MV)
+            .addTo(mixerRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
+            .fluidInputs(MaterialsOreAlum.BauxiteSlurry.getFluid(2000))
+            .fluidOutputs(MaterialsOreAlum.HeatedBauxiteSlurry.getFluid(2000))
+            .duration(2 * SECONDS)
+            .eut(TierEU.RECIPE_HV)
+            .noOptimize()
+            .addTo(fluidHeaterRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Aluminiumhydroxide.getDust(1))
+            .itemOutputs(
+                Materials.Aluminiumoxide.getDust(64),
+                Materials.Aluminiumoxide.getDust(16),
+                Materials.SodiumCarbonate.getDust(9),
+                Materials.Calcite.getDust(10),
+                MaterialsOreAlum.BauxiteSlag.getDust(16))
+            .fluidInputs(Materials.CarbonDioxide.getGas(5000), MaterialsOreAlum.HeatedBauxiteSlurry.getFluid(8000))
+            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(5000))
+            .duration(15 * SECONDS)
+            .eut(TierEU.RECIPE_HV)
+            .addTo(multiblockChemicalReactorRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(MaterialsOreAlum.BauxiteSlag.getDust(1))
+            .itemOutputs(
+                Materials.Rutile.getDust(1),
+                Materials.Gallium.getDust(1),
+                Materials.Quicklime.getDust(1),
+                Materials.SiliconDioxide.getDust(1),
+                Materials.Iron.getDust(1))
+            .outputChances(10000, 3000, 2000, 9000, 8000)
+            .duration(2 * SECONDS)
+            .eut(TierEU.RECIPE_MV)
+            .addTo(centrifugeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Ilmenite, 1))
+            .itemOutputs(Materials.Rutile.getDust(2), MaterialsOreAlum.IlmeniteSlag.getDust(1))
+            .outputChances(10000, 3000)
+            .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
+            .fluidOutputs(new FluidStack(ItemList.sGreenVitriol, 2000))
+            .duration(21 * SECONDS)
+            .eut(1000)
+            .addTo(chemicalBathRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Ilmenite, 1))
+            .itemOutputs(Materials.Rutile.getDust(2), MaterialsOreAlum.IlmeniteSlag.getDust(1))
+            .outputChances(10000, 6000)
+            .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
+            .fluidOutputs(new FluidStack(ItemList.sGreenVitriol, 2000))
+            .duration(21 * SECONDS)
+            .eut(1000)
+            .addTo(chemicalBathRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(MaterialsOreAlum.IlmeniteSlag.getDust(1))
+            .itemOutputs(
+                Materials.Iron.getDust(1),
+                Materials.Niobium.getDust(1),
+                Materials.Tantalum.getDust(1),
+                Materials.Manganese.getDust(1),
+                Materials.Magnesium.getDust(1))
+            .outputChances(8000, 500, 2000, 5000, 6000)
+            .duration(2 * SECONDS)
+            .eut(TierEU.RECIPE_MV)
+            .addTo(centrifugeRecipes);
+
+        OrePrefixes[] washable = new OrePrefixes[] { OrePrefixes.crushed, OrePrefixes.crushedPurified,
+            OrePrefixes.dustImpure, OrePrefixes.dustPure };
+
+        for (OrePrefixes ore : washable) {
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTOreDictUnificator.get(ore, Materials.Sapphire, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.SodiumHydroxide, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
+                .fluidOutputs(MaterialsOreAlum.SapphireJuice.getFluid(1000))
+                .duration(2 * SECONDS)
+                .eut(100)
+                .addTo(mixerRecipes);
+
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTOreDictUnificator.get(ore, Materials.GreenSapphire, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.SodiumHydroxide, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
+                .fluidOutputs(MaterialsOreAlum.GreenSapphireJuice.getFluid(1000))
+                .duration(2 * SECONDS)
+                .eut(100)
+                .addTo(mixerRecipes);
+
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTOreDictUnificator.get(ore, Materials.Ruby, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.SodiumHydroxide, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
+                .fluidOutputs(MaterialsOreAlum.RubyJuice.getFluid(1000))
+                .duration(2 * SECONDS)
+                .eut(100)
+                .addTo(mixerRecipes);
+        }
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(
+                Materials.Aluminiumhydroxide.getDust(3),
+                Materials.Iron.getDust(1),
+                Materials.Vanadium.getDust(1),
+                Materials.Magnesium.getDust(1))
+            .outputChances(10000, 300, 200, 200)
+            .fluidInputs(MaterialsOreAlum.SapphireJuice.getFluid(1000))
+            .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
+            .duration(2 * SECONDS + 5 * TICKS)
+            .eut(100)
+            .addTo(centrifugeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(
+                Materials.Aluminiumhydroxide.getDust(3),
+                Materials.Iron.getDust(1),
+                Materials.Vanadium.getDust(1),
+                Materials.Manganese.getDust(1),
+                Materials.Beryllium.getDust(1))
+            .outputChances(10000, 300, 200, 200, 200)
+            .fluidInputs(MaterialsOreAlum.GreenSapphireJuice.getFluid(1000))
+            .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
+            .duration(2 * SECONDS + 5 * TICKS)
+            .eut(100)
+            .addTo(centrifugeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(
+                Materials.Aluminiumhydroxide.getDust(3),
+                Materials.Chrome.getDust(1),
+                Materials.Iron.getDust(1),
+                Materials.Vanadium.getDust(1),
+                Materials.Magnesium.getDust(1))
+            .outputChances(10000, 5000, 300, 200, 200)
+            .fluidInputs(MaterialsOreAlum.RubyJuice.getFluid(1000))
+            .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
+            .duration(2 * SECONDS + 5 * TICKS)
+            .eut(100)
+            .addTo(centrifugeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Pyrope.getDust(1))
+            .itemOutputs(
+                Materials.Aluminiumoxide.getDust(1),
+                Materials.Magnesia.getDust(1),
+                Materials.Silver.getDust(1),
+                Materials.Iron.getDust(1),
+                Materials.Calcite.getDust(1),
+                Materials.Vanadium.getDust(1))
+            .outputChances(5000, 4000, 300, 300, 300, 200)
+            .fluidInputs(Materials.NitricAcid.getFluid(10))
+            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
+            .duration(2 * SECONDS + 5 * TICKS)
+            .eut(TierEU.RECIPE_MV)
+            .addTo(centrifugeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Almandine.getDust(1))
+            .itemOutputs(
+                Materials.Aluminiumoxide.getDust(1),
+                Materials.Iron.getDust(1),
+                Materials.Gold.getDust(1),
+                Materials.Calcite.getDust(1),
+                Materials.Chrome.getDust(1),
+                Materials.Vanadium.getDust(1))
+            .outputChances(5000, 4000, 300, 300, 200, 200)
+            .fluidInputs(Materials.NitricAcid.getFluid(10))
+            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
+            .duration(2 * SECONDS + 5 * TICKS)
+            .eut(TierEU.RECIPE_MV)
+            .addTo(centrifugeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Spessartine.getDust(1))
+            .itemOutputs(
+                Materials.Aluminiumoxide.getDust(1),
+                Materials.Pyrolusite.getDust(1),
+                Materials.Iron.getDust(1),
+                Materials.Calcite.getDust(1),
+                Materials.Magnesium.getDust(1),
+                Materials.Tantalum.getDust(1))
+            .outputChances(5000, 4000, 300, 300, 300, 200)
+            .fluidInputs(Materials.NitricAcid.getFluid(10))
+            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
+            .duration(2 * SECONDS + 5 * TICKS)
+            .eut(TierEU.RECIPE_MV)
+            .addTo(centrifugeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Andradite.getDust(1))
+            .itemOutputs(
+                Materials.Quicklime.getDust(1),
+                Materials.Iron.getDust(1),
+                Materials.Aluminiumoxide.getDust(1),
+                Materials.Gold.getDust(1),
+                Materials.Vanadium.getDust(1),
+                Materials.Rutile.getDust(1))
+            .outputChances(5000, 4000, 300, 300, 200, 600)
+            .fluidInputs(Materials.NitricAcid.getFluid(10))
+            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
+            .duration(2 * SECONDS + 5 * TICKS)
+            .eut(TierEU.RECIPE_MV)
+            .addTo(centrifugeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Uvarovite.getDust(1))
+            .itemOutputs(
+                Materials.Quicklime.getDust(1),
+                Materials.Chrome.getDust(1),
+                Materials.Iron.getDust(1),
+                Materials.Silver.getDust(1),
+                Materials.Aluminiumoxide.getDust(1),
+                Materials.Manganese.getDust(1))
+            .outputChances(5000, 1000, 300, 300, 200, 200)
+            .fluidInputs(Materials.NitricAcid.getFluid(10))
+            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
+            .duration(2 * SECONDS + 5 * TICKS)
+            .eut(TierEU.RECIPE_MV)
+            .addTo(centrifugeRecipes);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Grossular.getDust(1))
+            .itemOutputs(
+                Materials.Quicklime.getDust(1),
+                Materials.Aluminiumoxide.getDust(1),
+                Materials.Iron.getDust(1),
+                Materials.Gold.getDust(1),
+                Materials.Calcite.getDust(1),
+                Materials.Vanadium.getDust(1))
+            .outputChances(5000, 4000, 300, 300, 300, 200)
+            .fluidInputs(Materials.NitricAcid.getFluid(10))
+            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
+            .duration(2 * SECONDS + 5 * TICKS)
+            .eut(TierEU.RECIPE_MV)
+            .addTo(centrifugeRecipes);
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/chains/GT_BauxiteRefineChain.java b/src/main/java/gregtech/loaders/postload/chains/GT_BauxiteRefineChain.java
deleted file mode 100644
index dfe14762c5..0000000000
--- a/src/main/java/gregtech/loaders/postload/chains/GT_BauxiteRefineChain.java
+++ /dev/null
@@ -1,297 +0,0 @@
-package gregtech.loaders.postload.chains;
-
-import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes;
-import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes;
-import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes;
-import static gregtech.api.recipe.RecipeMaps.mixerRecipes;
-import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-
-import net.minecraftforge.fluids.FluidStack;
-
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.MaterialsOreAlum;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-
-public class GT_BauxiteRefineChain {
-
-    public static void run() {
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Bauxite, 32),
-                Materials.SodiumHydroxide.getDust(9),
-                Materials.Quicklime.getDust(4),
-                GT_Utility.getIntegratedCircuit(8))
-            .fluidInputs(Materials.Water.getFluid(5000))
-            .fluidOutputs(MaterialsOreAlum.BauxiteSlurry.getFluid(8000))
-            .duration(10 * SECONDS)
-            .eut(TierEU.RECIPE_MV)
-            .addTo(mixerRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Bauxite, 32),
-                Materials.SodiumHydroxide.getDust(9),
-                Materials.Quicklime.getDust(4),
-                GT_Utility.getIntegratedCircuit(8))
-            .fluidInputs(Materials.Water.getFluid(5000))
-            .fluidOutputs(MaterialsOreAlum.BauxiteSlurry.getFluid(8000))
-            .duration(10 * SECONDS)
-            .eut(TierEU.RECIPE_MV)
-            .addTo(mixerRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
-            .fluidInputs(MaterialsOreAlum.BauxiteSlurry.getFluid(2000))
-            .fluidOutputs(MaterialsOreAlum.HeatedBauxiteSlurry.getFluid(2000))
-            .duration(2 * SECONDS)
-            .eut(TierEU.RECIPE_HV)
-            .noOptimize()
-            .addTo(fluidHeaterRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Aluminiumhydroxide.getDust(1))
-            .itemOutputs(
-                Materials.Aluminiumoxide.getDust(64),
-                Materials.Aluminiumoxide.getDust(16),
-                Materials.SodiumCarbonate.getDust(9),
-                Materials.Calcite.getDust(10),
-                MaterialsOreAlum.BauxiteSlag.getDust(16))
-            .fluidInputs(Materials.CarbonDioxide.getGas(5000), MaterialsOreAlum.HeatedBauxiteSlurry.getFluid(8000))
-            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(5000))
-            .duration(15 * SECONDS)
-            .eut(TierEU.RECIPE_HV)
-            .addTo(multiblockChemicalReactorRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(MaterialsOreAlum.BauxiteSlag.getDust(1))
-            .itemOutputs(
-                Materials.Rutile.getDust(1),
-                Materials.Gallium.getDust(1),
-                Materials.Quicklime.getDust(1),
-                Materials.SiliconDioxide.getDust(1),
-                Materials.Iron.getDust(1))
-            .outputChances(10000, 3000, 2000, 9000, 8000)
-            .duration(2 * SECONDS)
-            .eut(TierEU.RECIPE_MV)
-            .addTo(centrifugeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Ilmenite, 1))
-            .itemOutputs(Materials.Rutile.getDust(2), MaterialsOreAlum.IlmeniteSlag.getDust(1))
-            .outputChances(10000, 3000)
-            .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
-            .fluidOutputs(new FluidStack(ItemList.sGreenVitriol, 2000))
-            .duration(21 * SECONDS)
-            .eut(1000)
-            .addTo(chemicalBathRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Ilmenite, 1))
-            .itemOutputs(Materials.Rutile.getDust(2), MaterialsOreAlum.IlmeniteSlag.getDust(1))
-            .outputChances(10000, 6000)
-            .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
-            .fluidOutputs(new FluidStack(ItemList.sGreenVitriol, 2000))
-            .duration(21 * SECONDS)
-            .eut(1000)
-            .addTo(chemicalBathRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(MaterialsOreAlum.IlmeniteSlag.getDust(1))
-            .itemOutputs(
-                Materials.Iron.getDust(1),
-                Materials.Niobium.getDust(1),
-                Materials.Tantalum.getDust(1),
-                Materials.Manganese.getDust(1),
-                Materials.Magnesium.getDust(1))
-            .outputChances(8000, 500, 2000, 5000, 6000)
-            .duration(2 * SECONDS)
-            .eut(TierEU.RECIPE_MV)
-            .addTo(centrifugeRecipes);
-
-        OrePrefixes[] washable = new OrePrefixes[] { OrePrefixes.crushed, OrePrefixes.crushedPurified,
-            OrePrefixes.dustImpure, OrePrefixes.dustPure };
-
-        for (OrePrefixes ore : washable) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_OreDictUnificator.get(ore, Materials.Sapphire, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.SodiumHydroxide, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
-                .fluidOutputs(MaterialsOreAlum.SapphireJuice.getFluid(1000))
-                .duration(2 * SECONDS)
-                .eut(100)
-                .addTo(mixerRecipes);
-
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_OreDictUnificator.get(ore, Materials.GreenSapphire, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.SodiumHydroxide, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
-                .fluidOutputs(MaterialsOreAlum.GreenSapphireJuice.getFluid(1000))
-                .duration(2 * SECONDS)
-                .eut(100)
-                .addTo(mixerRecipes);
-
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_OreDictUnificator.get(ore, Materials.Ruby, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.SodiumHydroxide, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
-                .fluidOutputs(MaterialsOreAlum.RubyJuice.getFluid(1000))
-                .duration(2 * SECONDS)
-                .eut(100)
-                .addTo(mixerRecipes);
-        }
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(
-                Materials.Aluminiumhydroxide.getDust(3),
-                Materials.Iron.getDust(1),
-                Materials.Vanadium.getDust(1),
-                Materials.Magnesium.getDust(1))
-            .outputChances(10000, 300, 200, 200)
-            .fluidInputs(MaterialsOreAlum.SapphireJuice.getFluid(1000))
-            .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
-            .duration(2 * SECONDS + 5 * TICKS)
-            .eut(100)
-            .addTo(centrifugeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(
-                Materials.Aluminiumhydroxide.getDust(3),
-                Materials.Iron.getDust(1),
-                Materials.Vanadium.getDust(1),
-                Materials.Manganese.getDust(1),
-                Materials.Beryllium.getDust(1))
-            .outputChances(10000, 300, 200, 200, 200)
-            .fluidInputs(MaterialsOreAlum.GreenSapphireJuice.getFluid(1000))
-            .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
-            .duration(2 * SECONDS + 5 * TICKS)
-            .eut(100)
-            .addTo(centrifugeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(
-                Materials.Aluminiumhydroxide.getDust(3),
-                Materials.Chrome.getDust(1),
-                Materials.Iron.getDust(1),
-                Materials.Vanadium.getDust(1),
-                Materials.Magnesium.getDust(1))
-            .outputChances(10000, 5000, 300, 200, 200)
-            .fluidInputs(MaterialsOreAlum.RubyJuice.getFluid(1000))
-            .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
-            .duration(2 * SECONDS + 5 * TICKS)
-            .eut(100)
-            .addTo(centrifugeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Pyrope.getDust(1))
-            .itemOutputs(
-                Materials.Aluminiumoxide.getDust(1),
-                Materials.Magnesia.getDust(1),
-                Materials.Silver.getDust(1),
-                Materials.Iron.getDust(1),
-                Materials.Calcite.getDust(1),
-                Materials.Vanadium.getDust(1))
-            .outputChances(5000, 4000, 300, 300, 300, 200)
-            .fluidInputs(Materials.NitricAcid.getFluid(10))
-            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
-            .duration(2 * SECONDS + 5 * TICKS)
-            .eut(TierEU.RECIPE_MV)
-            .addTo(centrifugeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Almandine.getDust(1))
-            .itemOutputs(
-                Materials.Aluminiumoxide.getDust(1),
-                Materials.Iron.getDust(1),
-                Materials.Gold.getDust(1),
-                Materials.Calcite.getDust(1),
-                Materials.Chrome.getDust(1),
-                Materials.Vanadium.getDust(1))
-            .outputChances(5000, 4000, 300, 300, 200, 200)
-            .fluidInputs(Materials.NitricAcid.getFluid(10))
-            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
-            .duration(2 * SECONDS + 5 * TICKS)
-            .eut(TierEU.RECIPE_MV)
-            .addTo(centrifugeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Spessartine.getDust(1))
-            .itemOutputs(
-                Materials.Aluminiumoxide.getDust(1),
-                Materials.Pyrolusite.getDust(1),
-                Materials.Iron.getDust(1),
-                Materials.Calcite.getDust(1),
-                Materials.Magnesium.getDust(1),
-                Materials.Tantalum.getDust(1))
-            .outputChances(5000, 4000, 300, 300, 300, 200)
-            .fluidInputs(Materials.NitricAcid.getFluid(10))
-            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
-            .duration(2 * SECONDS + 5 * TICKS)
-            .eut(TierEU.RECIPE_MV)
-            .addTo(centrifugeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Andradite.getDust(1))
-            .itemOutputs(
-                Materials.Quicklime.getDust(1),
-                Materials.Iron.getDust(1),
-                Materials.Aluminiumoxide.getDust(1),
-                Materials.Gold.getDust(1),
-                Materials.Vanadium.getDust(1),
-                Materials.Rutile.getDust(1))
-            .outputChances(5000, 4000, 300, 300, 200, 600)
-            .fluidInputs(Materials.NitricAcid.getFluid(10))
-            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
-            .duration(2 * SECONDS + 5 * TICKS)
-            .eut(TierEU.RECIPE_MV)
-            .addTo(centrifugeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Uvarovite.getDust(1))
-            .itemOutputs(
-                Materials.Quicklime.getDust(1),
-                Materials.Chrome.getDust(1),
-                Materials.Iron.getDust(1),
-                Materials.Silver.getDust(1),
-                Materials.Aluminiumoxide.getDust(1),
-                Materials.Manganese.getDust(1))
-            .outputChances(5000, 1000, 300, 300, 200, 200)
-            .fluidInputs(Materials.NitricAcid.getFluid(10))
-            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
-            .duration(2 * SECONDS + 5 * TICKS)
-            .eut(TierEU.RECIPE_MV)
-            .addTo(centrifugeRecipes);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Grossular.getDust(1))
-            .itemOutputs(
-                Materials.Quicklime.getDust(1),
-                Materials.Aluminiumoxide.getDust(1),
-                Materials.Iron.getDust(1),
-                Materials.Gold.getDust(1),
-                Materials.Calcite.getDust(1),
-                Materials.Vanadium.getDust(1))
-            .outputChances(5000, 4000, 300, 300, 300, 200)
-            .fluidInputs(Materials.NitricAcid.getFluid(10))
-            .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(10))
-            .duration(2 * SECONDS + 5 * TICKS)
-            .eut(TierEU.RECIPE_MV)
-            .addTo(centrifugeRecipes);
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/chains/GT_NaniteChain.java b/src/main/java/gregtech/loaders/postload/chains/GT_NaniteChain.java
deleted file mode 100644
index 836756a18a..0000000000
--- a/src/main/java/gregtech/loaders/postload/chains/GT_NaniteChain.java
+++ /dev/null
@@ -1,267 +0,0 @@
-package gregtech.loaders.postload.chains;
-
-import static goodgenerator.loader.Loaders.huiCircuit;
-import static gregtech.api.enums.Mods.NewHorizonsCoreMod;
-import static gregtech.api.recipe.RecipeMaps.nanoForgeRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.HOURS;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeConstants.AssemblyLine;
-import static gregtech.api.util.GT_RecipeConstants.NANO_FORGE_TIER;
-import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM;
-import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME;
-import static gtPlusPlus.core.block.ModBlocks.blockCompressedObsidian;
-
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.Fluid;
-import net.minecraftforge.fluids.FluidRegistry;
-import net.minecraftforge.fluids.FluidStack;
-
-import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader;
-
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.MaterialsUEVplus;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_OreDictUnificator;
-import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
-
-public class GT_NaniteChain {
-
-    public static void run() {
-
-        ItemStack aUVTierLens = getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0);
-        ItemStack aUHVTierLens = getModItem(NewHorizonsCoreMod.ID, "item.ChromaticLens", 0);
-        ItemStack aUEVTierLens = getModItem(NewHorizonsCoreMod.ID, "item.RadoxPolymerLens", 0);
-        ItemStack aUIVTierLens = ItemList.EnergisedTesseract.get(0);
-        ItemStack aUMVTierLens = GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Dilithium, 0, false);
-
-        // Carbon Nanite Recipe Before Nano Forge
-        Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null
-            ? FluidRegistry.getFluid("molten.indalloy140")
-            : FluidRegistry.getFluid("molten.solderingalloy");
-
-        GT_Values.RA.stdBuilder()
-            .metadata(RESEARCH_ITEM, Materials.Carbon.getNanite(1))
-            .metadata(RESEARCH_TIME, 1 * HOURS)
-            .itemInputs(
-                ItemList.Hull_UV.get(16),
-                Materials.Carbon.getNanite(16),
-                ItemList.Field_Generator_ZPM.get(16),
-                ItemList.Conveyor_Module_UV.get(16),
-                ItemList.Electric_Motor_UV.get(32),
-                new Object[] { OrePrefixes.circuit.get(Materials.LuV), 16 },
-                GT_OreDictUnificator.get(OrePrefixes.wireGt08, Materials.Naquadah, 32))
-            .fluidInputs(
-                new FluidStack(solderIndalloy, 144 * 32),
-                Materials.HSSS.getMolten(144L * 32),
-                Materials.Osmiridium.getMolten(144L * 16))
-            .itemOutputs(ItemList.NanoForge.get(1))
-            .eut(TierEU.RECIPE_ZPM)
-            .duration(5 * MINUTES)
-            .addTo(AssemblyLine);
-
-        GT_Values.RA.stdBuilder()
-            .metadata(RESEARCH_ITEM, ItemList.Circuit_Crystalmainframe.get(1))
-            .metadata(RESEARCH_TIME, 2 * HOURS)
-            .itemInputs(
-                new Object[] { OrePrefixes.circuit.get(Materials.UV), 16 },
-                ItemList.Robot_Arm_UV.get(16),
-                ItemList.Circuit_Chip_Stemcell.get(32),
-                GT_OreDictUnificator.get(OrePrefixes.ring, Materials.NaquadahAlloy, 32),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.NaquadahAlloy, 16),
-                Materials.Carbon.getDust(64))
-            .fluidInputs(Materials.UUMatter.getFluid(10000), new FluidStack(solderIndalloy, 144 * 32))
-            .itemOutputs(Materials.Carbon.getNanite(2))
-            .eut(TierEU.RECIPE_UV)
-            .duration(50 * SECONDS)
-            .addTo(AssemblyLine);
-
-        /*
-         * General Rules for making nanite recipes: 1. Never make a nanite that takes a long time to make and only gives
-         * 1, just to be consumed. 2. Nanites meant to be consumed should either have a short duration or a big output.
-         * 3. Nanites which aren't consumed should have a long duration and output less than 16. 4. Nanites should
-         * always take UUM as a fluid and a lot of power to make.
-         */
-
-        // Carbon Nanites - Used to make more Nano Forge Controllers
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                aUVTierLens,
-                new ItemStack(WerkstoffLoader.BWBlockCasingsAdvanced, 8, 31776),
-                ItemList.Circuit_Chip_SoC.get(64))
-            .itemOutputs(Materials.Carbon.getNanite(64))
-            .fluidInputs(Materials.UUMatter.getFluid(200_000))
-            .metadata(NANO_FORGE_TIER, 1)
-            .duration(8 * MINUTES + 20 * SECONDS)
-            .eut(10_000_000)
-            .addTo(nanoForgeRecipes);
-
-        // Silver Nanites - Used in Tier 2 PCB Factory to improve board production
-        GT_Values.RA.stdBuilder()
-            .itemInputs(aUEVTierLens, Materials.Silver.getBlocks(8), ItemList.Circuit_Chip_SoC.get(16))
-            .itemOutputs(Materials.Silver.getNanite(1))
-            .fluidInputs(Materials.UUMatter.getFluid(200_000))
-            .metadata(NANO_FORGE_TIER, 2)
-            .duration(12 * MINUTES + 30 * SECONDS)
-            .eut(10_000_000)
-            .addTo(nanoForgeRecipes);
-
-        // Neutronium Nanites - Used to upgrade the Nano Forge to Tier 2
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                aUHVTierLens,
-                Materials.Neutronium.getBlocks(8),
-                ItemList.Circuit_Chip_SoC2.get(64),
-                ItemList.Circuit_Chip_SoC2.get(32))
-            .itemOutputs(Materials.Neutronium.getNanite(1))
-            .fluidInputs(Materials.UUMatter.getFluid(200_000))
-            .metadata(NANO_FORGE_TIER, 1)
-            .duration(1 * MINUTES + 40 * SECONDS)
-            .eut(100_000_000)
-            .addTo(nanoForgeRecipes);
-
-        // Glowstone Nanites - Used in the optical circuit line
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                aUEVTierLens,
-                new ItemStack(blockCompressedObsidian, 8, 7), // Double compressed glowstone blocks (yes,
-                                                              // it's not obsidian)
-                ItemList.Circuit_Chip_SoC2.get(64))
-            .itemOutputs(Materials.Glowstone.getNanite(64))
-            .fluidInputs(Materials.UUMatter.getFluid(50_000))
-            .metadata(NANO_FORGE_TIER, 2)
-            .duration(3 * MINUTES + 20 * SECONDS)
-            .eut(50_000_000)
-            .addTo(nanoForgeRecipes);
-
-        // Gold Nanites - Used in Tier 3 PCB Factory to improve board production
-        GT_Values.RA.stdBuilder()
-            .itemInputs(aUMVTierLens, Materials.Gold.getBlocks(8), ItemList.Circuit_Chip_SoC.get(16))
-            .itemOutputs(Materials.Gold.getNanite(1))
-            .fluidInputs(Materials.UUMatter.getFluid(300_000))
-            .metadata(NANO_FORGE_TIER, 3)
-            .duration(16 * MINUTES + 40 * SECONDS)
-            .eut(100_000_000)
-            .addTo(nanoForgeRecipes);
-
-        // Transcendent Metal Nanites - Used to upgrade the Nano Forge to Tier 3
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                aUIVTierLens,
-                MaterialsUEVplus.TranscendentMetal.getBlocks(8),
-                ItemList.Circuit_Chip_SoC2.get(64),
-                ItemList.Circuit_Chip_SoC2.get(64),
-                ItemList.Circuit_Chip_SoC2.get(64))
-            .itemOutputs(MaterialsUEVplus.TranscendentMetal.getNanite(1))
-            .fluidInputs(Materials.UUMatter.getFluid(2_000_000))
-            .metadata(NANO_FORGE_TIER, 2)
-            .duration(12 * MINUTES + 30 * SECONDS)
-            .eut(1_000_000_000)
-            .addTo(nanoForgeRecipes);
-
-        // Six-Phased Copper Nanites - Used in Phononic Crystal production for the godforge
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                aUIVTierLens,
-                MaterialsUEVplus.SixPhasedCopper.getBlocks(16),
-                ItemList.Circuit_Chip_SoC2.get(64),
-                ItemList.Circuit_Chip_SoC2.get(64),
-                ItemList.Circuit_Chip_SoC2.get(64))
-            .itemOutputs(MaterialsUEVplus.SixPhasedCopper.getNanite(8))
-            .fluidInputs(
-                Materials.UUMatter.getFluid(500_000),
-                MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(50_000))
-            .metadata(NANO_FORGE_TIER, 3)
-            .duration(100 * SECONDS)
-            .eut(2_000_000_000)
-            .addTo(nanoForgeRecipes);
-
-        // White Dwarf Matter Nanites. Used to make Magnetohydrodynamically constrained star matter.
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                aUMVTierLens,
-                new ItemStack(WerkstoffLoader.items.get(OrePrefixes.lens), 0, 36), // Magneto lens
-                GregtechItemList.Laser_Lens_Special.get(0), // Quantum Anomaly, couldn't find any better
-                                                            // naming
-                MaterialsUEVplus.WhiteDwarfMatter.getBlocks(8),
-                getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 32),
-                new ItemStack(huiCircuit, 1, 4) // Paradox circuit
-            )
-            .itemOutputs(MaterialsUEVplus.WhiteDwarfMatter.getNanite(4))
-            .fluidInputs(
-                Materials.UUMatter.getFluid(500_000),
-                MaterialsUEVplus.RawStarMatter.getFluid(50_000),
-                MaterialsUEVplus.Space.getMolten(720))
-            .metadata(NANO_FORGE_TIER, 3)
-            .duration(12 * MINUTES + 30 * SECONDS)
-            .eut(2_000_000_000)
-            .addTo(nanoForgeRecipes);
-
-        // Black Dwarf Matter Nanites. Used to make Magnetohydrodynamically constrained star matter.
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                aUMVTierLens,
-                new ItemStack(WerkstoffLoader.items.get(OrePrefixes.lens), 0, 36), // Magneto lens
-                GregtechItemList.Laser_Lens_Special.get(0), // Quantum Anomaly, couldn't find any better
-                                                            // naming
-                MaterialsUEVplus.BlackDwarfMatter.getBlocks(8),
-                getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 32),
-                new ItemStack(huiCircuit, 1, 4) // Paradox circuit
-            )
-            .itemOutputs(MaterialsUEVplus.BlackDwarfMatter.getNanite(4))
-            .fluidInputs(
-                Materials.UUMatter.getFluid(500_000),
-                MaterialsUEVplus.RawStarMatter.getFluid(50_000),
-                MaterialsUEVplus.Time.getMolten(720))
-            .metadata(NANO_FORGE_TIER, 3)
-            .duration(12 * MINUTES + 30 * SECONDS)
-            .eut(2_000_000_000)
-            .addTo(nanoForgeRecipes);
-
-        // Universium nanites.
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                aUMVTierLens,
-                // Quantum Anomaly, couldn't find any better naming.
-                GregtechItemList.Laser_Lens_Special.get(0),
-                MaterialsUEVplus.Universium.getBlocks(8),
-                ItemList.Optically_Perfected_CPU.get(16),
-                ItemList.Optically_Compatible_Memory.get(16),
-                new ItemStack(huiCircuit, 1, 4) // Paradox circuit
-            )
-            .itemOutputs(MaterialsUEVplus.Universium.getNanite(2))
-            .fluidInputs(
-                MaterialsUEVplus.SpaceTime.getMolten(144),
-                Materials.Infinity.getMolten(576),
-                MaterialsUEVplus.PrimordialMatter.getFluid(64_000))
-            .metadata(NANO_FORGE_TIER, 3)
-            .duration(12 * MINUTES + 30 * SECONDS)
-            .eut(2_000_000_000)
-            .addTo(nanoForgeRecipes);
-
-        // Eternity nanites
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Forcicium, 0, false),
-                // Quantum Anomaly
-                GregtechItemList.Laser_Lens_Special.get(0),
-                MaterialsUEVplus.TranscendentMetal.getNanite(1),
-                MaterialsUEVplus.Eternity.getBlocks(8),
-                getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 32),
-                ItemList.Timepiece.get(4))
-            .itemOutputs(MaterialsUEVplus.Eternity.getNanite(4))
-            .fluidInputs(
-                MaterialsUEVplus.Space.getMolten(1152),
-                MaterialsUEVplus.ExcitedDTSC.getFluid(50_000),
-                MaterialsUEVplus.PrimordialMatter.getFluid(64_000))
-            .metadata(NANO_FORGE_TIER, 3)
-            .duration(12 * MINUTES + 30 * SECONDS)
-            .eut(TierEU.RECIPE_MAX)
-            .addTo(nanoForgeRecipes);
-
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/chains/GT_PCBFactoryRecipes.java b/src/main/java/gregtech/loaders/postload/chains/GT_PCBFactoryRecipes.java
deleted file mode 100644
index 6be4ab534e..0000000000
--- a/src/main/java/gregtech/loaders/postload/chains/GT_PCBFactoryRecipes.java
+++ /dev/null
@@ -1,694 +0,0 @@
-package gregtech.loaders.postload.chains;
-
-import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
-import static gregtech.api.recipe.metadata.PCBFactoryUpgrade.BIO;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeConstants.AssemblyLine;
-import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM;
-import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME;
-import static gtPlusPlus.core.material.ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN;
-import static gtPlusPlus.core.material.ELEMENT.STANDALONE.CHRONOMATIC_GLASS;
-import static gtPlusPlus.core.material.ELEMENT.STANDALONE.HYPOGEN;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.Fluid;
-import net.minecraftforge.fluids.FluidRegistry;
-import net.minecraftforge.fluids.FluidStack;
-
-import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader;
-
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.MaterialsUEVplus;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.enums.TierEU;
-import gregtech.api.recipe.RecipeMaps;
-import gregtech.api.recipe.metadata.PCBFactoryTierKey;
-import gregtech.api.recipe.metadata.PCBFactoryUpgradeKey;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_PCBFactoryManager;
-import gregtech.api.util.GT_Utility;
-
-@SuppressWarnings("SpellCheckingInspection")
-public class GT_PCBFactoryRecipes {
-
-    private static final PCBFactoryTierKey TIER = PCBFactoryTierKey.INSTANCE;
-    private static final PCBFactoryUpgradeKey UPGRADE = PCBFactoryUpgradeKey.INSTANCE;
-
-    public static void load() {
-        final Fluid solderLuV = FluidRegistry.getFluid("molten.indalloy140") != null
-            ? FluidRegistry.getFluid("molten.indalloy140")
-            : FluidRegistry.getFluid("molten.solderingalloy");
-
-        // Load Multi Recipes
-        GT_Values.RA.stdBuilder()
-            .metadata(RESEARCH_ITEM, ItemList.Circuit_Board_Wetware.get(1))
-            .metadata(RESEARCH_TIME, 3 * MINUTES)
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 32),
-                ItemList.Machine_ZPM_CircuitAssembler.get(4),
-                new Object[] { OrePrefixes.circuit.get(Materials.LuV), 16 },
-                ItemList.Robot_Arm_ZPM.get(8))
-            .fluidInputs(new FluidStack(solderLuV, 144 * 36), Materials.Naquadah.getMolten(144 * 18))
-            .itemOutputs(ItemList.PCBFactory.get(1))
-            .eut(TierEU.RECIPE_UV)
-            .duration(5 * MINUTES)
-            .addTo(AssemblyLine);
-
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 1),
-                Materials.get("Artherium-Sn")
-                    .getPlates(6))
-            .itemOutputs(ItemList.BasicPhotolithographicFrameworkCasing.get(1))
-            .duration(30 * SECONDS)
-            .eut(TierEU.RECIPE_ZPM)
-            .addTo(assemblerRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1),
-                Materials.EnrichedHolmium.getPlates(6))
-            .itemOutputs(ItemList.ReinforcedPhotolithographicFrameworkCasing.get(1))
-            .duration(30 * SECONDS)
-            .eut(TierEU.RECIPE_UHV)
-            .addTo(assemblerRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                CELESTIAL_TUNGSTEN.getFrameBox(1),
-                Materials.get("Quantum")
-                    .getPlates(6))
-            .itemOutputs(ItemList.RadiationProofPhotolithographicFrameworkCasing.get(1))
-            .duration(30 * SECONDS)
-            .eut(TierEU.RECIPE_UIV)
-            .addTo(assemblerRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                HYPOGEN.getFrameBox(1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Infinity, 2),
-                Materials.Thulium.getPlates(6))
-            .itemOutputs(ItemList.InfinityCooledCasing.get(1))
-            .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(8 * 144))
-            .duration(10 * SECONDS)
-            .eut(TierEU.RECIPE_UMV)
-            .addTo(assemblerRecipes);
-
-        // Load CircuitBoard Recipes
-
-        // Plastic Circuit Board
-        for (int tier = 1; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 1))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(64));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(1),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.AnnealedCopper, (long) (16 * (Math.sqrt(tier)))),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Copper, (long) (16 * (Math.sqrt(tier)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier)))),
-                    Materials.IronIIIChloride.getFluid((long) (250 * (Math.sqrt(tier)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 1.5))))
-                .eut((int) GT_Values.VP[tier] * 3 / 4)
-                .metadata(TIER, 1)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 1; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 0.5))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(64));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(2),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Silver),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.AnnealedCopper, (long) (16 * (Math.sqrt(tier)))),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Copper, (long) (16 * (Math.sqrt(tier)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier)))),
-                    Materials.IronIIIChloride.getFluid((long) (250 * (Math.sqrt(tier)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 1.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 2)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 1; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(64));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(3),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Gold),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.AnnealedCopper, (long) (16 * (Math.sqrt(tier)))),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Copper, (long) (16 * (Math.sqrt(tier)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier)))),
-                    Materials.IronIIIChloride.getFluid((long) (250 * (Math.sqrt(tier)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 1.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 3)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-
-        // Advanced Circuit Board
-        for (int tier = 2; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 2))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(1),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gold, (long) (16 * (Math.sqrt(tier - 1)))),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, (long) (16 * (Math.sqrt(tier - 1)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 1)))),
-                    Materials.IronIIIChloride.getFluid((long) (500 * (Math.sqrt(tier - 1)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 2.5))))
-                .eut((int) GT_Values.VP[tier] * 3 / 4)
-                .metadata(TIER, 1)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 2; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 1.5))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(2),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Silver),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gold, (long) (16 * (Math.sqrt(tier - 1)))),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, (long) (16 * (Math.sqrt(tier - 1)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 1)))),
-                    Materials.IronIIIChloride.getFluid((long) (500 * (Math.sqrt(tier - 1)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 2.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 2)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 2; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 1))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(3),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Gold),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gold, (long) (16 * (Math.sqrt(tier - 1)))),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, (long) (16 * (Math.sqrt(tier - 1)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 1)))),
-                    Materials.IronIIIChloride.getFluid((long) (500 * (Math.sqrt(tier - 1)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 2.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 3)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-
-        // More Advanced Circuit Board
-        for (int tier = 3; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 3))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(1),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.Aluminium, (long) (16 * (Math.sqrt(tier - 2)))),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.EnergeticAlloy, (long) (16 * (Math.sqrt(tier - 2)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 2)))),
-                    Materials.IronIIIChloride.getFluid((long) (1000 * (Math.sqrt(tier - 2)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 3.5))))
-                .eut((int) GT_Values.VP[tier] * 3 / 4)
-                .metadata(TIER, 1)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 3; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 2.5))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(2),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Silver),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.Aluminium, (long) (16 * (Math.sqrt(tier - 2)))),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.EnergeticAlloy, (long) (16 * (Math.sqrt(tier - 2)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 2)))),
-                    Materials.IronIIIChloride.getFluid((long) (1000 * (Math.sqrt(tier - 2)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 3.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 2)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 3; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 2))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(3),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Gold),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.Aluminium, (long) (16 * (Math.sqrt(tier - 2)))),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.EnergeticAlloy, (long) (16 * (Math.sqrt(tier - 2)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 2)))),
-                    Materials.IronIIIChloride.getFluid((long) (1000 * (Math.sqrt(tier - 2)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 3.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 3)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-
-        // Elite Circuit Board
-        for (int tier = 4; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 4))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(1),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.Palladium, (long) (16 * (Math.sqrt(tier - 3)))),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, (long) (16 * (Math.sqrt(tier - 3)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 3)))),
-                    Materials.IronIIIChloride.getFluid((long) (2000 * (Math.sqrt(tier - 3)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 4.5))))
-                .eut((int) GT_Values.VP[tier] * 3 / 4)
-                .metadata(TIER, 1)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 4; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 3.5))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(2),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Silver),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.Palladium, (long) (16 * (Math.sqrt(tier - 3)))),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, (long) (16 * (Math.sqrt(tier - 3)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 3)))),
-                    Materials.IronIIIChloride.getFluid((long) (2000 * (Math.sqrt(tier - 3)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 4.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 2)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 4; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 3))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(3),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Gold),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.Palladium, (long) (16 * (Math.sqrt(tier - 3)))),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, (long) (16 * (Math.sqrt(tier - 3)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 3)))),
-                    Materials.IronIIIChloride.getFluid((long) (2000 * (Math.sqrt(tier - 3)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 4.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 3)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-
-        // Wetware Circuit Board
-        for (int tier = 5; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 5))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(1),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.EnrichedHolmium, (long) (16 * (Math.sqrt(tier - 4)))),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.NiobiumTitanium, (long) (16 * (Math.sqrt(tier - 4)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 4)))),
-                    Materials.IronIIIChloride.getFluid((long) (5000 * (Math.sqrt(tier - 4)))),
-                    Materials.GrowthMediumSterilized.getFluid((long) (2000 * (Math.sqrt(tier - 4)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 5.5))))
-                .eut((int) GT_Values.VP[tier] * 3 / 4)
-                .metadata(TIER, 1)
-                .metadata(UPGRADE, BIO)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 5; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 4.5))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(2),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Silver),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.EnrichedHolmium, (long) (16 * (Math.sqrt(tier - 4)))),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.NiobiumTitanium, (long) (16 * (Math.sqrt(tier - 4)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 4)))),
-                    Materials.IronIIIChloride.getFluid((long) (5000 * (Math.sqrt(tier - 4)))),
-                    Materials.GrowthMediumSterilized.getFluid((long) (2000 * (Math.sqrt(tier - 4)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 5.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 2)
-                .metadata(UPGRADE, BIO)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 5; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 4))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(3),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Gold),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.EnrichedHolmium, (long) (16 * (Math.sqrt(tier - 4)))),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.NiobiumTitanium, (long) (16 * (Math.sqrt(tier - 4)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 4)))),
-                    Materials.IronIIIChloride.getFluid((long) (5000 * (Math.sqrt(tier - 4)))),
-                    Materials.GrowthMediumSterilized.getFluid((long) (2000 * (Math.sqrt(tier - 4)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 5.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 3)
-                .metadata(UPGRADE, BIO)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-
-        // Bioware Circuit Board
-        for (int tier = 6; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 6))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(1),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator.get(
-                        OrePrefixes.foil,
-                        Materials.Longasssuperconductornameforuvwire,
-                        (long) (16 * (Math.sqrt(tier - 5)))),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.Neutronium, (long) (16 * (Math.sqrt(tier - 5)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 5)))),
-                    Materials.IronIIIChloride.getFluid((long) (7500 * (Math.sqrt(tier - 5)))),
-                    Materials.BioMediumSterilized.getFluid((long) (4000 * (Math.sqrt(tier - 5)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 5.5))))
-                .eut((int) GT_Values.VP[tier] * 3 / 4)
-                .metadata(TIER, 1)
-                .metadata(UPGRADE, BIO)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 6; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 5.5))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(2),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Silver),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator.get(
-                        OrePrefixes.foil,
-                        Materials.Longasssuperconductornameforuvwire,
-                        (long) (16 * (Math.sqrt(tier - 5)))),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.Neutronium, (long) (16 * (Math.sqrt(tier - 5)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 5)))),
-                    Materials.IronIIIChloride.getFluid((long) (7500 * (Math.sqrt(tier - 5)))),
-                    Materials.BioMediumSterilized.getFluid((long) (4000 * (Math.sqrt(tier - 5)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 6.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 2)
-                .metadata(UPGRADE, BIO)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 6; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 5))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(3),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Gold),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    GT_OreDictUnificator.get(
-                        OrePrefixes.foil,
-                        Materials.Longasssuperconductornameforuvwire,
-                        (long) (16 * (Math.sqrt(tier - 5)))),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.Neutronium, (long) (16 * (Math.sqrt(tier - 5)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 5)))),
-                    Materials.IronIIIChloride.getFluid((long) (7500 * (Math.sqrt(tier - 5)))),
-                    Materials.BioMediumSterilized.getFluid((long) (4000 * (Math.sqrt(tier - 5)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 6.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 3)
-                .metadata(UPGRADE, BIO)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-
-        // Optical Circuit Board
-        for (int tier = 7; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 7))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Optical.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Optical.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(1),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    new ItemStack(
-                        WerkstoffLoader.items.get(OrePrefixes.foil),
-                        (int) (16 * (Math.sqrt(tier - 6))),
-                        10106),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.InfinityCatalyst, (long) (16 * (Math.sqrt(tier - 6)))),
-                    CHRONOMATIC_GLASS.getFoil((int) (16 * (Math.sqrt(tier - 6)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 6)))),
-                    Materials.IronIIIChloride.getFluid((long) (12500 * (Math.sqrt(tier - 6)))),
-                    Materials.MysteriousCrystal.getMolten((long) (2880 * (Math.sqrt(tier - 6)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 5.5))))
-                .eut((int) GT_Values.VP[tier] * 3 / 4)
-                .metadata(TIER, 1)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 7; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 6.5))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Optical.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Optical.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(2),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Silver),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    new ItemStack(
-                        WerkstoffLoader.items.get(OrePrefixes.foil),
-                        (int) (16 * (Math.sqrt(tier - 6))),
-                        10106),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.InfinityCatalyst, (long) (16 * (Math.sqrt(tier - 6)))),
-                    CHRONOMATIC_GLASS.getFoil((int) (16 * (Math.sqrt(tier - 6)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 6)))),
-                    Materials.IronIIIChloride.getFluid((long) (12500 * (Math.sqrt(tier - 6)))),
-                    Materials.MysteriousCrystal.getMolten((long) (2880 * (Math.sqrt(tier - 6)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 6.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 2)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-        for (int tier = 7; tier <= GT_PCBFactoryManager.mTiersOfPlastics; tier++) {
-            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 6))));
-            List aBoards = new ArrayList<>();
-            for (int i = amountOfBoards; i > 64; i -= 64) {
-                aBoards.add(ItemList.Circuit_Board_Optical.get(i));
-                amountOfBoards -= 64;
-            }
-            aBoards.add(ItemList.Circuit_Board_Optical.get(amountOfBoards));
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    GT_Utility.getIntegratedCircuit(3),
-                    GT_Utility.getNaniteAsCatalyst(Materials.Gold),
-                    GT_PCBFactoryManager.getPlasticMaterialFromTier(tier)
-                        .getPlates(1),
-                    new ItemStack(
-                        WerkstoffLoader.items.get(OrePrefixes.foil),
-                        (int) (16 * (Math.sqrt(tier - 6))),
-                        10106),
-                    GT_OreDictUnificator
-                        .get(OrePrefixes.foil, Materials.InfinityCatalyst, (long) (16 * (Math.sqrt(tier - 6)))),
-                    CHRONOMATIC_GLASS.getFoil((int) (16 * (Math.sqrt(tier - 6)))))
-                .fluidInputs(
-                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 6)))),
-                    Materials.IronIIIChloride.getFluid((long) (12500 * (Math.sqrt(tier - 6)))),
-                    Materials.MysteriousCrystal.getMolten((long) (2880 * (Math.sqrt(tier - 6)))))
-                .itemOutputs(aBoards.toArray(new ItemStack[0]))
-                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 6.5))))
-                .eut((int) GT_Values.VP[tier + 1] * 3 / 4)
-                .metadata(TIER, 3)
-                .addTo(RecipeMaps.pcbFactoryRecipes);
-        }
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/chains/GT_PurifiedWaterRecipes.java b/src/main/java/gregtech/loaders/postload/chains/GT_PurifiedWaterRecipes.java
deleted file mode 100644
index 9aa13b3f33..0000000000
--- a/src/main/java/gregtech/loaders/postload/chains/GT_PurifiedWaterRecipes.java
+++ /dev/null
@@ -1,324 +0,0 @@
-package gregtech.loaders.postload.chains;
-
-import static com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader.FluorBuergerit;
-import static gregtech.api.enums.MaterialsBotania.ManaDiamond;
-import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
-import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes;
-import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes;
-import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes;
-import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes;
-import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes;
-import static gregtech.api.recipe.RecipeMaps.plasmaForgeRecipes;
-import static gregtech.api.recipe.RecipeMaps.purificationClarifierRecipes;
-import static gregtech.api.recipe.RecipeMaps.purificationDegasifierRecipes;
-import static gregtech.api.recipe.RecipeMaps.purificationFlocculationRecipes;
-import static gregtech.api.recipe.RecipeMaps.purificationOzonationRecipes;
-import static gregtech.api.recipe.RecipeMaps.purificationParticleExtractionRecipes;
-import static gregtech.api.recipe.RecipeMaps.purificationPhAdjustmentRecipes;
-import static gregtech.api.recipe.RecipeMaps.purificationPlasmaHeatingRecipes;
-import static gregtech.api.recipe.RecipeMaps.purificationUVTreatmentRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.HOURS;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeConstants.AssemblyLine;
-import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT;
-import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM;
-import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME;
-import static gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitParticleExtractor.BARYONIC_MATTER_OUTPUT;
-
-import net.minecraft.init.Items;
-import net.minecraft.item.ItemStack;
-
-import goodgenerator.items.MyMaterial;
-import gregtech.api.enums.GT_Values;
-import gregtech.api.enums.HeatingCoilLevel;
-import gregtech.api.enums.ItemList;
-import gregtech.api.enums.Materials;
-import gregtech.api.enums.MaterialsUEVplus;
-import gregtech.api.enums.OrePrefixes;
-import gregtech.api.enums.TierEU;
-import gregtech.api.recipe.maps.PurificationUnitParticleExtractorFrontend;
-import gregtech.api.recipe.metadata.PurificationPlantBaseChanceKey;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationPlant;
-import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitUVTreatment;
-import gtPlusPlus.core.material.Particle;
-
-public class GT_PurifiedWaterRecipes {
-
-    static final PurificationPlantBaseChanceKey BASE_CHANCE = PurificationPlantBaseChanceKey.INSTANCE;
-
-    public static void run() {
-        final int duration = GT_MetaTileEntity_PurificationPlant.CYCLE_TIME_TICKS;
-
-        // Grade 1 - Clarifier
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.ActivatedCarbonFilterMesh.get(1))
-            .fluidInputs(GT_ModHandler.getWater(1000L))
-            .fluidOutputs(Materials.Grade1PurifiedWater.getFluid(900L))
-            .itemOutputs(new ItemStack(Items.stick, 1), Materials.Stone.getDust(1), Materials.Gold.getNuggets(1))
-            .outputChances(1000, 500, 100)
-            .duration(duration)
-            .eut(TierEU.RECIPE_LuV)
-            .metadata(BASE_CHANCE, 70.0f)
-            .addTo(purificationClarifierRecipes);
-
-        // Activated Carbon Line
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Carbon.getDust(1))
-            .fluidInputs(Materials.PhosphoricAcid.getFluid(1000L))
-            .itemOutputs(Materials.PreActivatedCarbon.getDust(1))
-            .duration(5 * SECONDS)
-            .eut(TierEU.RECIPE_LuV)
-            .addTo(multiblockChemicalReactorRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.PreActivatedCarbon.getDust(1))
-            .itemOutputs(Materials.DirtyActivatedCarbon.getDust(1))
-            .duration(10 * SECONDS)
-            .eut(TierEU.RECIPE_EV)
-            .specialValue((int) HeatingCoilLevel.EV.getHeat())
-            .addTo(blastFurnaceRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.DirtyActivatedCarbon.getDust(1))
-            .fluidInputs(Materials.Water.getFluid(1000L))
-            .itemOutputs(Materials.ActivatedCarbon.getDust(1))
-            .fluidOutputs(Materials.PhosphoricAcid.getFluid(1000L))
-            .noOptimize()
-            .duration(2 * SECONDS)
-            .eut(TierEU.RECIPE_IV)
-            .addTo(chemicalBathRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                Materials.ActivatedCarbon.getDust(64),
-                GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Zinc, 16))
-            .itemOutputs(ItemList.ActivatedCarbonFilterMesh.get(1))
-            .duration(10 * SECONDS)
-            .eut(TierEU.RECIPE_IV)
-            .addTo(assemblerRecipes);
-
-        // Grade 2 - Ozonation
-        for (ItemStack lens : GT_OreDictUnificator.getOres("craftingLensBlue")) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.copyAmount(0, lens))
-                .noOptimize()
-                .fluidInputs(Materials.Air.getGas(10000L))
-                .fluidOutputs(Materials.Ozone.getGas(2000L))
-                .duration(1 * SECONDS)
-                .eut(TierEU.RECIPE_LuV)
-                .addTo(laserEngraverRecipes);
-        }
-
-        // Recipes for ozonation, uses 128kL, 256kL, 512kL, 1m kL at each tier
-        // 20% boost per tier
-        // Gets you up to 80%, need to water boost for 95%
-        for (int tier = 1; tier <= 4; ++tier) {
-            GT_Values.RA.stdBuilder()
-                .noOptimize()
-                .fluidInputs(
-                    Materials.Grade1PurifiedWater.getFluid(1000L),
-                    Materials.Ozone.getGas(1000 * (long) Math.pow(2, (tier + 6))))
-                .fluidOutputs(Materials.Grade2PurifiedWater.getFluid(900L))
-                .itemOutputs(Materials.Manganese.getDust(1), Materials.Iron.getDust(1), Materials.Sulfur.getDust(1))
-                .outputChances(500, 500, 500)
-                .duration(duration)
-                .ignoreCollision()
-                .eut(TierEU.RECIPE_LuV)
-                .metadata(BASE_CHANCE, tier * 20.0f)
-                .addTo(purificationOzonationRecipes);
-        }
-
-        // Grade 3 - Flocculation.
-        GT_Values.RA.stdBuilder()
-            .fluidInputs(Materials.Grade2PurifiedWater.getFluid(1000L))
-            .fluidOutputs(Materials.Grade3PurifiedWater.getFluid(900L))
-            .itemOutputs(
-                new ItemStack(Items.clay_ball, 1),
-                Materials.QuartzSand.getDust(1),
-                Materials.PolyvinylChloride.getNuggets(1))
-            .outputChances(1000, 500, 100)
-            .duration(duration)
-            .eut(TierEU.RECIPE_ZPM)
-            .metadata(BASE_CHANCE, 1 * 10.0f)
-            .addTo(purificationFlocculationRecipes);
-
-        // 2 Al(OH)3 + 3 HCl -> Al2(OH)3 Cl3 + 3 H2O
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Aluminiumhydroxide.getDust(8))
-            .fluidInputs(Materials.HydrochloricAcid.getFluid(3000L))
-            .fluidOutputs(Materials.PolyAluminiumChloride.getFluid(1000L), Materials.Water.getFluid(3000L))
-            .duration(4 * SECONDS)
-            .eut(TierEU.RECIPE_EV)
-            .addTo(multiblockChemicalReactorRecipes);
-
-        // Diluted is twice what chem balance would suggest, but it is 2:1 with hydrochloric acid which makes it
-        // correct I believe.
-        GT_Values.RA.stdBuilder()
-            .fluidInputs(Materials.FlocculationWasteLiquid.getFluid(10000L))
-            .itemOutputs(Materials.Aluminium.getDust(11))
-            .fluidOutputs(Materials.Oxygen.getGas(29000L), Materials.DilutedHydrochloricAcid.getFluid(58000L))
-            .duration(1 * SECONDS)
-            .eut(TierEU.RECIPE_EV)
-            .addTo(distillationTowerRecipes);
-
-        // Grade 4 - pH adjustment
-        GT_Values.RA.stdBuilder()
-            .fluidInputs(Materials.Grade3PurifiedWater.getFluid(1000L))
-            .fluidOutputs(Materials.Grade4PurifiedWater.getFluid(900L))
-            .ignoreCollision()
-            .duration(duration)
-            .eut(TierEU.RECIPE_ZPM)
-            .metadata(BASE_CHANCE, 0.0f)
-            .addTo(purificationPhAdjustmentRecipes);
-
-        // Grade 5 - Plasma Heating
-        GT_Values.RA.stdBuilder()
-            .fluidInputs(Materials.Grade4PurifiedWater.getFluid(1000L))
-            .fluidOutputs(Materials.Grade5PurifiedWater.getFluid(900L))
-            .ignoreCollision()
-            .duration(duration)
-            .eut(TierEU.RECIPE_UV)
-            .metadata(BASE_CHANCE, 0.0f)
-            .addTo(purificationPlasmaHeatingRecipes);
-
-        GT_MetaTileEntity_PurificationUnitUVTreatment.LENS_ITEMS.add(MyMaterial.orundum.get(OrePrefixes.lens, 1));
-        GT_MetaTileEntity_PurificationUnitUVTreatment.LENS_ITEMS
-            .add(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Amber, 1));
-        GT_MetaTileEntity_PurificationUnitUVTreatment.LENS_ITEMS
-            .add(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.InfusedAir, 1));
-        GT_MetaTileEntity_PurificationUnitUVTreatment.LENS_ITEMS
-            .add(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Emerald, 1));
-        GT_MetaTileEntity_PurificationUnitUVTreatment.LENS_ITEMS
-            .add(GT_OreDictUnificator.get(OrePrefixes.lens, ManaDiamond, 1));
-        GT_MetaTileEntity_PurificationUnitUVTreatment.LENS_ITEMS
-            .add(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.BlueTopaz, 1));
-        GT_MetaTileEntity_PurificationUnitUVTreatment.LENS_ITEMS
-            .add(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Amethyst, 1));
-        GT_MetaTileEntity_PurificationUnitUVTreatment.LENS_ITEMS.add(FluorBuergerit.get(OrePrefixes.lens, 1));
-        GT_MetaTileEntity_PurificationUnitUVTreatment.LENS_ITEMS
-            .add(GT_OreDictUnificator.get(OrePrefixes.lens, Materials.Dilithium, 1));
-
-        // Grade 6 - UV treatment
-        GT_Values.RA.stdBuilder()
-            .fluidInputs(Materials.Grade5PurifiedWater.getFluid(1000L))
-            .fluidOutputs(Materials.Grade6PurifiedWater.getFluid(900L))
-            .ignoreCollision()
-            .duration(duration)
-            .eut(TierEU.RECIPE_UV)
-            .metadata(BASE_CHANCE, 0.0f)
-            .addTo(purificationUVTreatmentRecipes);
-
-        // Grade 7 - Degasification
-        GT_Values.RA.stdBuilder()
-            .fluidInputs(Materials.Grade6PurifiedWater.getFluid(1000L))
-            .fluidOutputs(Materials.Grade7PurifiedWater.getFluid(900L))
-            .ignoreCollision()
-            .duration(duration)
-            .eut(TierEU.RECIPE_UHV)
-            .metadata(BASE_CHANCE, 0.0f)
-            .addTo(purificationDegasifierRecipes);
-
-        // Grade 8 - Quark Extraction
-
-        ItemStack[] catalystInputs = new ItemStack[] { ItemList.Quark_Creation_Catalyst_Up.get(1L),
-            ItemList.Quark_Creation_Catalyst_Down.get(1L), ItemList.Quark_Creation_Catalyst_Bottom.get(1L),
-            ItemList.Quark_Creation_Catalyst_Top.get(1L), ItemList.Quark_Creation_Catalyst_Strange.get(1L),
-            ItemList.Quark_Creation_Catalyst_Charm.get(1L) };
-
-        // Add all combinations of input items to the frontend map
-        for (int i = 0; i < catalystInputs.length; ++i) {
-            for (int j = 1; j < catalystInputs.length; ++j) {
-                PurificationUnitParticleExtractorFrontend.inputItems.add(catalystInputs[i]);
-                PurificationUnitParticleExtractorFrontend.inputItemsShuffled
-                    .add(catalystInputs[(i + j) % catalystInputs.length]);
-            }
-        }
-
-        // Add re-alignment recipes
-        for (int i = 0; i < catalystInputs.length; ++i) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Quark_Creation_Catalyst_Unaligned.get(1), GT_Utility.getIntegratedCircuit(i + 1))
-                .fluidInputs(Materials.StableBaryonicMatter.getFluid(1000L))
-                .itemOutputs(catalystInputs[i])
-                .duration(30 * SECONDS)
-                .eut(TierEU.RECIPE_UHV)
-                // Not sure how I feel about it being in the laser engraver, but I don't see a better multi for it right
-                // now,
-                // and we can't really add a new one specifically for this (... for now)
-                .addTo(laserEngraverRecipes);
-        }
-
-        // Initial aligned quark catalysts, these are not meant to be done often, and simply exist to get you started
-        ItemStack[] quarks = new ItemStack[] { // make sure these are in the same order as the list above
-            Particle.getBaseParticle(Particle.UP), Particle.getBaseParticle(Particle.DOWN),
-            Particle.getBaseParticle(Particle.BOTTOM), Particle.getBaseParticle(Particle.TOP),
-            Particle.getBaseParticle(Particle.STRANGE), Particle.getBaseParticle(Particle.CHARM) };
-
-        for (int i = 0; i < catalystInputs.length; ++i) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Quark_Catalyst_Housing.get(1), quarks[i])
-                .fluidInputs(MaterialsUEVplus.ExcitedDTRC.getFluid(10000L))
-                .itemOutputs(catalystInputs[i])
-                .metadata(COIL_HEAT, 10800)
-                .eut(TierEU.RECIPE_UMV)
-                .duration(5 * MINUTES)
-                .addTo(plasmaForgeRecipes);
-        }
-
-        // Recipe for quark catalyst housing
-        GT_Values.RA.stdBuilder()
-            .metadata(RESEARCH_ITEM, ItemList.Electromagnet_Tengam.get(1))
-            .metadata(RESEARCH_TIME, 1 * HOURS)
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 16),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 16),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tritanium, 16),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 16),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64),
-                GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UHV, 16),
-                GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 8),
-                ItemList.Field_Generator_UEV.get(4))
-            .fluidInputs(
-                Materials.Neutronium.getMolten(16 * 144),
-                Materials.Infinity.getMolten(16 * 144),
-                Materials.Tritanium.getMolten(16 * 144),
-                Materials.CosmicNeutronium.getMolten(16 * 144))
-            .itemOutputs(ItemList.Quark_Catalyst_Housing.get(1))
-            .eut(TierEU.RECIPE_UIV)
-            .duration(60 * SECONDS)
-            .addTo(AssemblyLine);
-
-        GT_Values.RA.stdBuilder()
-            // Fake item inputs
-            .itemInputs(ItemList.Quark_Creation_Catalyst_Charm.get(1), ItemList.Quark_Creation_Catalyst_Strange.get(1))
-            .fluidInputs(Materials.Grade7PurifiedWater.getFluid(1000L))
-            .fluidOutputs(
-                Materials.Grade8PurifiedWater.getFluid(900L),
-                Materials.StableBaryonicMatter.getFluid(BARYONIC_MATTER_OUTPUT))
-            .itemOutputs(ItemList.Quark_Creation_Catalyst_Unaligned.get(2L), Particle.getBaseParticle(Particle.UNKNOWN))
-            .outputChances(10000, 100)
-            .ignoreCollision()
-            .duration(duration)
-            .eut(TierEU.RECIPE_UEV)
-            .metadata(BASE_CHANCE, 0.0f)
-            .fake()
-            .addTo(purificationParticleExtractionRecipes);
-
-        // real recipe
-        GT_Values.RA.stdBuilder()
-            .fluidInputs(Materials.Grade7PurifiedWater.getFluid(1000L))
-            .fluidOutputs(Materials.Grade8PurifiedWater.getFluid(900L))
-            .itemOutputs(ItemList.Quark_Creation_Catalyst_Unaligned.get(2L), Particle.getBaseParticle(Particle.UNKNOWN))
-            .outputChances(10000, 100)
-            .ignoreCollision()
-            .duration(duration)
-            .eut(TierEU.RECIPE_UEV)
-            .metadata(BASE_CHANCE, 0.0f)
-            .hidden()
-            .addTo(purificationParticleExtractionRecipes);
-    }
-}
diff --git a/src/main/java/gregtech/loaders/postload/chains/NaniteChain.java b/src/main/java/gregtech/loaders/postload/chains/NaniteChain.java
new file mode 100644
index 0000000000..9be7e1b6b6
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/chains/NaniteChain.java
@@ -0,0 +1,266 @@
+package gregtech.loaders.postload.chains;
+
+import static goodgenerator.loader.Loaders.huiCircuit;
+import static gregtech.api.enums.Mods.NewHorizonsCoreMod;
+import static gregtech.api.recipe.RecipeMaps.nanoForgeRecipes;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.HOURS;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeConstants.AssemblyLine;
+import static gregtech.api.util.GTRecipeConstants.NANO_FORGE_TIER;
+import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM;
+import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME;
+import static gtPlusPlus.core.block.ModBlocks.blockCompressedObsidian;
+
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+import bartworks.system.material.WerkstoffLoader;
+import gregtech.api.enums.GTValues;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.MaterialsUEVplus;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.TierEU;
+import gregtech.api.util.GTOreDictUnificator;
+import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
+
+public class NaniteChain {
+
+    public static void run() {
+
+        ItemStack aUVTierLens = getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0);
+        ItemStack aUHVTierLens = getModItem(NewHorizonsCoreMod.ID, "item.ChromaticLens", 0);
+        ItemStack aUEVTierLens = getModItem(NewHorizonsCoreMod.ID, "item.RadoxPolymerLens", 0);
+        ItemStack aUIVTierLens = ItemList.EnergisedTesseract.get(0);
+        ItemStack aUMVTierLens = GTOreDictUnificator.get(OrePrefixes.lens, Materials.Dilithium, 0, false);
+
+        // Carbon Nanite Recipe Before Nano Forge
+        Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null
+            ? FluidRegistry.getFluid("molten.indalloy140")
+            : FluidRegistry.getFluid("molten.solderingalloy");
+
+        GTValues.RA.stdBuilder()
+            .metadata(RESEARCH_ITEM, Materials.Carbon.getNanite(1))
+            .metadata(RESEARCH_TIME, 1 * HOURS)
+            .itemInputs(
+                ItemList.Hull_UV.get(16),
+                Materials.Carbon.getNanite(16),
+                ItemList.Field_Generator_ZPM.get(16),
+                ItemList.Conveyor_Module_UV.get(16),
+                ItemList.Electric_Motor_UV.get(32),
+                new Object[] { OrePrefixes.circuit.get(Materials.LuV), 16 },
+                GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Naquadah, 32))
+            .fluidInputs(
+                new FluidStack(solderIndalloy, 144 * 32),
+                Materials.HSSS.getMolten(144L * 32),
+                Materials.Osmiridium.getMolten(144L * 16))
+            .itemOutputs(ItemList.NanoForge.get(1))
+            .eut(TierEU.RECIPE_ZPM)
+            .duration(5 * MINUTES)
+            .addTo(AssemblyLine);
+
+        GTValues.RA.stdBuilder()
+            .metadata(RESEARCH_ITEM, ItemList.Circuit_Crystalmainframe.get(1))
+            .metadata(RESEARCH_TIME, 2 * HOURS)
+            .itemInputs(
+                new Object[] { OrePrefixes.circuit.get(Materials.UV), 16 },
+                ItemList.Robot_Arm_UV.get(16),
+                ItemList.Circuit_Chip_Stemcell.get(32),
+                GTOreDictUnificator.get(OrePrefixes.ring, Materials.NaquadahAlloy, 32),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.NaquadahAlloy, 16),
+                Materials.Carbon.getDust(64))
+            .fluidInputs(Materials.UUMatter.getFluid(10000), new FluidStack(solderIndalloy, 144 * 32))
+            .itemOutputs(Materials.Carbon.getNanite(2))
+            .eut(TierEU.RECIPE_UV)
+            .duration(50 * SECONDS)
+            .addTo(AssemblyLine);
+
+        /*
+         * General Rules for making nanite recipes: 1. Never make a nanite that takes a long time to make and only gives
+         * 1, just to be consumed. 2. Nanites meant to be consumed should either have a short duration or a big output.
+         * 3. Nanites which aren't consumed should have a long duration and output less than 16. 4. Nanites should
+         * always take UUM as a fluid and a lot of power to make.
+         */
+
+        // Carbon Nanites - Used to make more Nano Forge Controllers
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                aUVTierLens,
+                new ItemStack(WerkstoffLoader.BWBlockCasingsAdvanced, 8, 31776),
+                ItemList.Circuit_Chip_SoC.get(64))
+            .itemOutputs(Materials.Carbon.getNanite(64))
+            .fluidInputs(Materials.UUMatter.getFluid(200_000))
+            .metadata(NANO_FORGE_TIER, 1)
+            .duration(8 * MINUTES + 20 * SECONDS)
+            .eut(10_000_000)
+            .addTo(nanoForgeRecipes);
+
+        // Silver Nanites - Used in Tier 2 PCB Factory to improve board production
+        GTValues.RA.stdBuilder()
+            .itemInputs(aUEVTierLens, Materials.Silver.getBlocks(8), ItemList.Circuit_Chip_SoC.get(16))
+            .itemOutputs(Materials.Silver.getNanite(1))
+            .fluidInputs(Materials.UUMatter.getFluid(200_000))
+            .metadata(NANO_FORGE_TIER, 2)
+            .duration(12 * MINUTES + 30 * SECONDS)
+            .eut(10_000_000)
+            .addTo(nanoForgeRecipes);
+
+        // Neutronium Nanites - Used to upgrade the Nano Forge to Tier 2
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                aUHVTierLens,
+                Materials.Neutronium.getBlocks(8),
+                ItemList.Circuit_Chip_SoC2.get(64),
+                ItemList.Circuit_Chip_SoC2.get(32))
+            .itemOutputs(Materials.Neutronium.getNanite(1))
+            .fluidInputs(Materials.UUMatter.getFluid(200_000))
+            .metadata(NANO_FORGE_TIER, 1)
+            .duration(1 * MINUTES + 40 * SECONDS)
+            .eut(100_000_000)
+            .addTo(nanoForgeRecipes);
+
+        // Glowstone Nanites - Used in the optical circuit line
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                aUEVTierLens,
+                new ItemStack(blockCompressedObsidian, 8, 7), // Double compressed glowstone blocks (yes,
+                                                              // it's not obsidian)
+                ItemList.Circuit_Chip_SoC2.get(64))
+            .itemOutputs(Materials.Glowstone.getNanite(64))
+            .fluidInputs(Materials.UUMatter.getFluid(50_000))
+            .metadata(NANO_FORGE_TIER, 2)
+            .duration(3 * MINUTES + 20 * SECONDS)
+            .eut(50_000_000)
+            .addTo(nanoForgeRecipes);
+
+        // Gold Nanites - Used in Tier 3 PCB Factory to improve board production
+        GTValues.RA.stdBuilder()
+            .itemInputs(aUMVTierLens, Materials.Gold.getBlocks(8), ItemList.Circuit_Chip_SoC.get(16))
+            .itemOutputs(Materials.Gold.getNanite(1))
+            .fluidInputs(Materials.UUMatter.getFluid(300_000))
+            .metadata(NANO_FORGE_TIER, 3)
+            .duration(16 * MINUTES + 40 * SECONDS)
+            .eut(100_000_000)
+            .addTo(nanoForgeRecipes);
+
+        // Transcendent Metal Nanites - Used to upgrade the Nano Forge to Tier 3
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                aUIVTierLens,
+                MaterialsUEVplus.TranscendentMetal.getBlocks(8),
+                ItemList.Circuit_Chip_SoC2.get(64),
+                ItemList.Circuit_Chip_SoC2.get(64),
+                ItemList.Circuit_Chip_SoC2.get(64))
+            .itemOutputs(MaterialsUEVplus.TranscendentMetal.getNanite(1))
+            .fluidInputs(Materials.UUMatter.getFluid(2_000_000))
+            .metadata(NANO_FORGE_TIER, 2)
+            .duration(12 * MINUTES + 30 * SECONDS)
+            .eut(1_000_000_000)
+            .addTo(nanoForgeRecipes);
+
+        // Six-Phased Copper Nanites - Used in Phononic Crystal production for the godforge
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                aUIVTierLens,
+                MaterialsUEVplus.SixPhasedCopper.getBlocks(16),
+                ItemList.Circuit_Chip_SoC2.get(64),
+                ItemList.Circuit_Chip_SoC2.get(64),
+                ItemList.Circuit_Chip_SoC2.get(64))
+            .itemOutputs(MaterialsUEVplus.SixPhasedCopper.getNanite(8))
+            .fluidInputs(
+                Materials.UUMatter.getFluid(500_000),
+                MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(50_000))
+            .metadata(NANO_FORGE_TIER, 3)
+            .duration(100 * SECONDS)
+            .eut(2_000_000_000)
+            .addTo(nanoForgeRecipes);
+
+        // White Dwarf Matter Nanites. Used to make Magnetohydrodynamically constrained star matter.
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                aUMVTierLens,
+                new ItemStack(WerkstoffLoader.items.get(OrePrefixes.lens), 0, 36), // Magneto lens
+                GregtechItemList.Laser_Lens_Special.get(0), // Quantum Anomaly, couldn't find any better
+                                                            // naming
+                MaterialsUEVplus.WhiteDwarfMatter.getBlocks(8),
+                getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 32),
+                new ItemStack(huiCircuit, 1, 4) // Paradox circuit
+            )
+            .itemOutputs(MaterialsUEVplus.WhiteDwarfMatter.getNanite(4))
+            .fluidInputs(
+                Materials.UUMatter.getFluid(500_000),
+                MaterialsUEVplus.RawStarMatter.getFluid(50_000),
+                MaterialsUEVplus.Space.getMolten(720))
+            .metadata(NANO_FORGE_TIER, 3)
+            .duration(12 * MINUTES + 30 * SECONDS)
+            .eut(2_000_000_000)
+            .addTo(nanoForgeRecipes);
+
+        // Black Dwarf Matter Nanites. Used to make Magnetohydrodynamically constrained star matter.
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                aUMVTierLens,
+                new ItemStack(WerkstoffLoader.items.get(OrePrefixes.lens), 0, 36), // Magneto lens
+                GregtechItemList.Laser_Lens_Special.get(0), // Quantum Anomaly, couldn't find any better
+                                                            // naming
+                MaterialsUEVplus.BlackDwarfMatter.getBlocks(8),
+                getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 32),
+                new ItemStack(huiCircuit, 1, 4) // Paradox circuit
+            )
+            .itemOutputs(MaterialsUEVplus.BlackDwarfMatter.getNanite(4))
+            .fluidInputs(
+                Materials.UUMatter.getFluid(500_000),
+                MaterialsUEVplus.RawStarMatter.getFluid(50_000),
+                MaterialsUEVplus.Time.getMolten(720))
+            .metadata(NANO_FORGE_TIER, 3)
+            .duration(12 * MINUTES + 30 * SECONDS)
+            .eut(2_000_000_000)
+            .addTo(nanoForgeRecipes);
+
+        // Universium nanites.
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                aUMVTierLens,
+                // Quantum Anomaly, couldn't find any better naming.
+                GregtechItemList.Laser_Lens_Special.get(0),
+                MaterialsUEVplus.Universium.getBlocks(8),
+                ItemList.Optically_Perfected_CPU.get(16),
+                ItemList.Optically_Compatible_Memory.get(16),
+                new ItemStack(huiCircuit, 1, 4) // Paradox circuit
+            )
+            .itemOutputs(MaterialsUEVplus.Universium.getNanite(2))
+            .fluidInputs(
+                MaterialsUEVplus.SpaceTime.getMolten(144),
+                Materials.Infinity.getMolten(576),
+                MaterialsUEVplus.PrimordialMatter.getFluid(64_000))
+            .metadata(NANO_FORGE_TIER, 3)
+            .duration(12 * MINUTES + 30 * SECONDS)
+            .eut(2_000_000_000)
+            .addTo(nanoForgeRecipes);
+
+        // Eternity nanites
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                GTOreDictUnificator.get(OrePrefixes.lens, Materials.Forcicium, 0, false),
+                // Quantum Anomaly
+                GregtechItemList.Laser_Lens_Special.get(0),
+                MaterialsUEVplus.TranscendentMetal.getNanite(1),
+                MaterialsUEVplus.Eternity.getBlocks(8),
+                getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 32),
+                ItemList.Timepiece.get(4))
+            .itemOutputs(MaterialsUEVplus.Eternity.getNanite(4))
+            .fluidInputs(
+                MaterialsUEVplus.Space.getMolten(1152),
+                MaterialsUEVplus.ExcitedDTSC.getFluid(50_000),
+                MaterialsUEVplus.PrimordialMatter.getFluid(64_000))
+            .metadata(NANO_FORGE_TIER, 3)
+            .duration(12 * MINUTES + 30 * SECONDS)
+            .eut(TierEU.RECIPE_MAX)
+            .addTo(nanoForgeRecipes);
+
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/chains/PCBFactoryRecipes.java b/src/main/java/gregtech/loaders/postload/chains/PCBFactoryRecipes.java
new file mode 100644
index 0000000000..f047bdcab2
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/chains/PCBFactoryRecipes.java
@@ -0,0 +1,687 @@
+package gregtech.loaders.postload.chains;
+
+import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
+import static gregtech.api.recipe.metadata.PCBFactoryUpgrade.BIO;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeConstants.AssemblyLine;
+import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM;
+import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME;
+import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN;
+import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.CHRONOMATIC_GLASS;
+import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.HYPOGEN;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.minecraft.item.ItemStack;
+import net.minecraftforge.fluids.Fluid;
+import net.minecraftforge.fluids.FluidRegistry;
+import net.minecraftforge.fluids.FluidStack;
+
+import bartworks.system.material.WerkstoffLoader;
+import gregtech.api.enums.GTValues;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.MaterialsUEVplus;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.TierEU;
+import gregtech.api.recipe.RecipeMaps;
+import gregtech.api.recipe.metadata.PCBFactoryTierKey;
+import gregtech.api.recipe.metadata.PCBFactoryUpgradeKey;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gregtech.api.util.PCBFactoryManager;
+
+@SuppressWarnings("SpellCheckingInspection")
+public class PCBFactoryRecipes {
+
+    private static final PCBFactoryTierKey TIER = PCBFactoryTierKey.INSTANCE;
+    private static final PCBFactoryUpgradeKey UPGRADE = PCBFactoryUpgradeKey.INSTANCE;
+
+    public static void load() {
+        final Fluid solderLuV = FluidRegistry.getFluid("molten.indalloy140") != null
+            ? FluidRegistry.getFluid("molten.indalloy140")
+            : FluidRegistry.getFluid("molten.solderingalloy");
+
+        // Load Multi Recipes
+        GTValues.RA.stdBuilder()
+            .metadata(RESEARCH_ITEM, ItemList.Circuit_Board_Wetware.get(1))
+            .metadata(RESEARCH_TIME, 3 * MINUTES)
+            .itemInputs(
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 32),
+                ItemList.Machine_ZPM_CircuitAssembler.get(4),
+                new Object[] { OrePrefixes.circuit.get(Materials.LuV), 16 },
+                ItemList.Robot_Arm_ZPM.get(8))
+            .fluidInputs(new FluidStack(solderLuV, 144 * 36), Materials.Naquadah.getMolten(144 * 18))
+            .itemOutputs(ItemList.PCBFactory.get(1))
+            .eut(TierEU.RECIPE_UV)
+            .duration(5 * MINUTES)
+            .addTo(AssemblyLine);
+
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 1),
+                Materials.get("Artherium-Sn")
+                    .getPlates(6))
+            .itemOutputs(ItemList.BasicPhotolithographicFrameworkCasing.get(1))
+            .duration(30 * SECONDS)
+            .eut(TierEU.RECIPE_ZPM)
+            .addTo(assemblerRecipes);
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1),
+                Materials.EnrichedHolmium.getPlates(6))
+            .itemOutputs(ItemList.ReinforcedPhotolithographicFrameworkCasing.get(1))
+            .duration(30 * SECONDS)
+            .eut(TierEU.RECIPE_UHV)
+            .addTo(assemblerRecipes);
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                CELESTIAL_TUNGSTEN.getFrameBox(1),
+                Materials.get("Quantum")
+                    .getPlates(6))
+            .itemOutputs(ItemList.RadiationProofPhotolithographicFrameworkCasing.get(1))
+            .duration(30 * SECONDS)
+            .eut(TierEU.RECIPE_UIV)
+            .addTo(assemblerRecipes);
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                HYPOGEN.getFrameBox(1),
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Infinity, 2),
+                Materials.Thulium.getPlates(6))
+            .itemOutputs(ItemList.InfinityCooledCasing.get(1))
+            .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(8 * 144))
+            .duration(10 * SECONDS)
+            .eut(TierEU.RECIPE_UMV)
+            .addTo(assemblerRecipes);
+
+        // Load CircuitBoard Recipes
+
+        // Plastic Circuit Board
+        for (int tier = 1; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 1))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(64));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(1),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.AnnealedCopper, (long) (16 * (Math.sqrt(tier)))),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Copper, (long) (16 * (Math.sqrt(tier)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier)))),
+                    Materials.IronIIIChloride.getFluid((long) (250 * (Math.sqrt(tier)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 1.5))))
+                .eut((int) GTValues.VP[tier] * 3 / 4)
+                .metadata(TIER, 1)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 1; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 0.5))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(64));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(2),
+                    GTUtility.getNaniteAsCatalyst(Materials.Silver),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.AnnealedCopper, (long) (16 * (Math.sqrt(tier)))),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Copper, (long) (16 * (Math.sqrt(tier)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier)))),
+                    Materials.IronIIIChloride.getFluid((long) (250 * (Math.sqrt(tier)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 1.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 2)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 1; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(64));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Plastic_Advanced.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(3),
+                    GTUtility.getNaniteAsCatalyst(Materials.Gold),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.AnnealedCopper, (long) (16 * (Math.sqrt(tier)))),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Copper, (long) (16 * (Math.sqrt(tier)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier)))),
+                    Materials.IronIIIChloride.getFluid((long) (250 * (Math.sqrt(tier)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 1.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 3)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+
+        // Advanced Circuit Board
+        for (int tier = 2; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 2))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(1),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Gold, (long) (16 * (Math.sqrt(tier - 1)))),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, (long) (16 * (Math.sqrt(tier - 1)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 1)))),
+                    Materials.IronIIIChloride.getFluid((long) (500 * (Math.sqrt(tier - 1)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 2.5))))
+                .eut((int) GTValues.VP[tier] * 3 / 4)
+                .metadata(TIER, 1)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 2; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 1.5))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(2),
+                    GTUtility.getNaniteAsCatalyst(Materials.Silver),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Gold, (long) (16 * (Math.sqrt(tier - 1)))),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, (long) (16 * (Math.sqrt(tier - 1)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 1)))),
+                    Materials.IronIIIChloride.getFluid((long) (500 * (Math.sqrt(tier - 1)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 2.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 2)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 2; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 1))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Epoxy_Advanced.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(3),
+                    GTUtility.getNaniteAsCatalyst(Materials.Gold),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Gold, (long) (16 * (Math.sqrt(tier - 1)))),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, (long) (16 * (Math.sqrt(tier - 1)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 1)))),
+                    Materials.IronIIIChloride.getFluid((long) (500 * (Math.sqrt(tier - 1)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 2.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 3)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+
+        // More Advanced Circuit Board
+        for (int tier = 3; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 3))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(1),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, (long) (16 * (Math.sqrt(tier - 2)))),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.EnergeticAlloy, (long) (16 * (Math.sqrt(tier - 2)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 2)))),
+                    Materials.IronIIIChloride.getFluid((long) (1000 * (Math.sqrt(tier - 2)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 3.5))))
+                .eut((int) GTValues.VP[tier] * 3 / 4)
+                .metadata(TIER, 1)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 3; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 2.5))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(2),
+                    GTUtility.getNaniteAsCatalyst(Materials.Silver),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, (long) (16 * (Math.sqrt(tier - 2)))),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.EnergeticAlloy, (long) (16 * (Math.sqrt(tier - 2)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 2)))),
+                    Materials.IronIIIChloride.getFluid((long) (1000 * (Math.sqrt(tier - 2)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 3.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 2)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 3; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 2))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Fiberglass_Advanced.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(3),
+                    GTUtility.getNaniteAsCatalyst(Materials.Gold),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, (long) (16 * (Math.sqrt(tier - 2)))),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.EnergeticAlloy, (long) (16 * (Math.sqrt(tier - 2)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 2)))),
+                    Materials.IronIIIChloride.getFluid((long) (1000 * (Math.sqrt(tier - 2)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 3.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 3)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+
+        // Elite Circuit Board
+        for (int tier = 4; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 4))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(1),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Palladium, (long) (16 * (Math.sqrt(tier - 3)))),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, (long) (16 * (Math.sqrt(tier - 3)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 3)))),
+                    Materials.IronIIIChloride.getFluid((long) (2000 * (Math.sqrt(tier - 3)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 4.5))))
+                .eut((int) GTValues.VP[tier] * 3 / 4)
+                .metadata(TIER, 1)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 4; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 3.5))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(2),
+                    GTUtility.getNaniteAsCatalyst(Materials.Silver),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Palladium, (long) (16 * (Math.sqrt(tier - 3)))),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, (long) (16 * (Math.sqrt(tier - 3)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 3)))),
+                    Materials.IronIIIChloride.getFluid((long) (2000 * (Math.sqrt(tier - 3)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 4.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 2)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 4; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 3))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Multifiberglass_Elite.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(3),
+                    GTUtility.getNaniteAsCatalyst(Materials.Gold),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Palladium, (long) (16 * (Math.sqrt(tier - 3)))),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Platinum, (long) (16 * (Math.sqrt(tier - 3)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 3)))),
+                    Materials.IronIIIChloride.getFluid((long) (2000 * (Math.sqrt(tier - 3)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 4.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 3)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+
+        // Wetware Circuit Board
+        for (int tier = 5; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 5))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(1),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.EnrichedHolmium, (long) (16 * (Math.sqrt(tier - 4)))),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.NiobiumTitanium, (long) (16 * (Math.sqrt(tier - 4)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 4)))),
+                    Materials.IronIIIChloride.getFluid((long) (5000 * (Math.sqrt(tier - 4)))),
+                    Materials.GrowthMediumSterilized.getFluid((long) (2000 * (Math.sqrt(tier - 4)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 5.5))))
+                .eut((int) GTValues.VP[tier] * 3 / 4)
+                .metadata(TIER, 1)
+                .metadata(UPGRADE, BIO)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 5; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 4.5))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(2),
+                    GTUtility.getNaniteAsCatalyst(Materials.Silver),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.EnrichedHolmium, (long) (16 * (Math.sqrt(tier - 4)))),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.NiobiumTitanium, (long) (16 * (Math.sqrt(tier - 4)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 4)))),
+                    Materials.IronIIIChloride.getFluid((long) (5000 * (Math.sqrt(tier - 4)))),
+                    Materials.GrowthMediumSterilized.getFluid((long) (2000 * (Math.sqrt(tier - 4)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 5.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 2)
+                .metadata(UPGRADE, BIO)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 5; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 4))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Wetware_Extreme.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(3),
+                    GTUtility.getNaniteAsCatalyst(Materials.Gold),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.EnrichedHolmium, (long) (16 * (Math.sqrt(tier - 4)))),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.NiobiumTitanium, (long) (16 * (Math.sqrt(tier - 4)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 4)))),
+                    Materials.IronIIIChloride.getFluid((long) (5000 * (Math.sqrt(tier - 4)))),
+                    Materials.GrowthMediumSterilized.getFluid((long) (2000 * (Math.sqrt(tier - 4)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 5.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 3)
+                .metadata(UPGRADE, BIO)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+
+        // Bioware Circuit Board
+        for (int tier = 6; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 6))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(1),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(
+                        OrePrefixes.foil,
+                        Materials.Longasssuperconductornameforuvwire,
+                        (long) (16 * (Math.sqrt(tier - 5)))),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.Neutronium, (long) (16 * (Math.sqrt(tier - 5)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 5)))),
+                    Materials.IronIIIChloride.getFluid((long) (7500 * (Math.sqrt(tier - 5)))),
+                    Materials.BioMediumSterilized.getFluid((long) (4000 * (Math.sqrt(tier - 5)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 5.5))))
+                .eut((int) GTValues.VP[tier] * 3 / 4)
+                .metadata(TIER, 1)
+                .metadata(UPGRADE, BIO)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 6; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 5.5))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(2),
+                    GTUtility.getNaniteAsCatalyst(Materials.Silver),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(
+                        OrePrefixes.foil,
+                        Materials.Longasssuperconductornameforuvwire,
+                        (long) (16 * (Math.sqrt(tier - 5)))),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.Neutronium, (long) (16 * (Math.sqrt(tier - 5)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 5)))),
+                    Materials.IronIIIChloride.getFluid((long) (7500 * (Math.sqrt(tier - 5)))),
+                    Materials.BioMediumSterilized.getFluid((long) (4000 * (Math.sqrt(tier - 5)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 6.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 2)
+                .metadata(UPGRADE, BIO)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 6; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 5))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Bio_Ultra.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(3),
+                    GTUtility.getNaniteAsCatalyst(Materials.Gold),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    GTOreDictUnificator.get(
+                        OrePrefixes.foil,
+                        Materials.Longasssuperconductornameforuvwire,
+                        (long) (16 * (Math.sqrt(tier - 5)))),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.Neutronium, (long) (16 * (Math.sqrt(tier - 5)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 5)))),
+                    Materials.IronIIIChloride.getFluid((long) (7500 * (Math.sqrt(tier - 5)))),
+                    Materials.BioMediumSterilized.getFluid((long) (4000 * (Math.sqrt(tier - 5)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 6.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 3)
+                .metadata(UPGRADE, BIO)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+
+        // Optical Circuit Board
+        for (int tier = 7; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 7))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Optical.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Optical.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(1),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    new ItemStack(
+                        WerkstoffLoader.items.get(OrePrefixes.foil),
+                        (int) (16 * (Math.sqrt(tier - 6))),
+                        10106),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.InfinityCatalyst, (long) (16 * (Math.sqrt(tier - 6)))),
+                    CHRONOMATIC_GLASS.getFoil((int) (16 * (Math.sqrt(tier - 6)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 6)))),
+                    Materials.IronIIIChloride.getFluid((long) (12500 * (Math.sqrt(tier - 6)))),
+                    Materials.MysteriousCrystal.getMolten((long) (2880 * (Math.sqrt(tier - 6)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(600 / Math.sqrt(Math.pow(1.5, tier - 5.5))))
+                .eut((int) GTValues.VP[tier] * 3 / 4)
+                .metadata(TIER, 1)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 7; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 6.5))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Optical.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Optical.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(2),
+                    GTUtility.getNaniteAsCatalyst(Materials.Silver),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    new ItemStack(
+                        WerkstoffLoader.items.get(OrePrefixes.foil),
+                        (int) (16 * (Math.sqrt(tier - 6))),
+                        10106),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.InfinityCatalyst, (long) (16 * (Math.sqrt(tier - 6)))),
+                    CHRONOMATIC_GLASS.getFoil((int) (16 * (Math.sqrt(tier - 6)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 6)))),
+                    Materials.IronIIIChloride.getFluid((long) (12500 * (Math.sqrt(tier - 6)))),
+                    Materials.MysteriousCrystal.getMolten((long) (2880 * (Math.sqrt(tier - 6)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(500 / Math.sqrt(Math.pow(1.5, tier - 6.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 2)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+        for (int tier = 7; tier <= PCBFactoryManager.mTiersOfPlastics; tier++) {
+            int amountOfBoards = (int) Math.ceil(8 * (Math.sqrt(Math.pow(2, tier - 6))));
+            List aBoards = new ArrayList<>();
+            for (int i = amountOfBoards; i > 64; i -= 64) {
+                aBoards.add(ItemList.Circuit_Board_Optical.get(i));
+                amountOfBoards -= 64;
+            }
+            aBoards.add(ItemList.Circuit_Board_Optical.get(amountOfBoards));
+            GTValues.RA.stdBuilder()
+                .itemInputs(
+                    GTUtility.getIntegratedCircuit(3),
+                    GTUtility.getNaniteAsCatalyst(Materials.Gold),
+                    PCBFactoryManager.getPlasticMaterialFromTier(tier)
+                        .getPlates(1),
+                    new ItemStack(
+                        WerkstoffLoader.items.get(OrePrefixes.foil),
+                        (int) (16 * (Math.sqrt(tier - 6))),
+                        10106),
+                    GTOreDictUnificator
+                        .get(OrePrefixes.foil, Materials.InfinityCatalyst, (long) (16 * (Math.sqrt(tier - 6)))),
+                    CHRONOMATIC_GLASS.getFoil((int) (16 * (Math.sqrt(tier - 6)))))
+                .fluidInputs(
+                    Materials.SulfuricAcid.getFluid((long) (500 * (Math.sqrt(tier - 6)))),
+                    Materials.IronIIIChloride.getFluid((long) (12500 * (Math.sqrt(tier - 6)))),
+                    Materials.MysteriousCrystal.getMolten((long) (2880 * (Math.sqrt(tier - 6)))))
+                .itemOutputs(aBoards.toArray(new ItemStack[0]))
+                .duration((int) Math.ceil(400 / Math.sqrt(Math.pow(1.5, tier - 6.5))))
+                .eut((int) GTValues.VP[tier + 1] * 3 / 4)
+                .metadata(TIER, 3)
+                .addTo(RecipeMaps.pcbFactoryRecipes);
+        }
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/chains/PurifiedWaterRecipes.java b/src/main/java/gregtech/loaders/postload/chains/PurifiedWaterRecipes.java
new file mode 100644
index 0000000000..c0d73d02b6
--- /dev/null
+++ b/src/main/java/gregtech/loaders/postload/chains/PurifiedWaterRecipes.java
@@ -0,0 +1,320 @@
+package gregtech.loaders.postload.chains;
+
+import static bartworks.system.material.WerkstoffLoader.FluorBuergerit;
+import static gregtech.api.enums.MaterialsBotania.ManaDiamond;
+import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
+import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes;
+import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes;
+import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes;
+import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes;
+import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes;
+import static gregtech.api.recipe.RecipeMaps.plasmaForgeRecipes;
+import static gregtech.api.recipe.RecipeMaps.purificationClarifierRecipes;
+import static gregtech.api.recipe.RecipeMaps.purificationDegasifierRecipes;
+import static gregtech.api.recipe.RecipeMaps.purificationFlocculationRecipes;
+import static gregtech.api.recipe.RecipeMaps.purificationOzonationRecipes;
+import static gregtech.api.recipe.RecipeMaps.purificationParticleExtractionRecipes;
+import static gregtech.api.recipe.RecipeMaps.purificationPhAdjustmentRecipes;
+import static gregtech.api.recipe.RecipeMaps.purificationPlasmaHeatingRecipes;
+import static gregtech.api.recipe.RecipeMaps.purificationUVTreatmentRecipes;
+import static gregtech.api.util.GTRecipeBuilder.HOURS;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeConstants.AssemblyLine;
+import static gregtech.api.util.GTRecipeConstants.COIL_HEAT;
+import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM;
+import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME;
+import static gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitBaryonicPerfection.BARYONIC_MATTER_OUTPUT;
+
+import net.minecraft.init.Items;
+import net.minecraft.item.ItemStack;
+
+import goodgenerator.items.GGMaterial;
+import gregtech.api.enums.GTValues;
+import gregtech.api.enums.HeatingCoilLevel;
+import gregtech.api.enums.ItemList;
+import gregtech.api.enums.Materials;
+import gregtech.api.enums.MaterialsUEVplus;
+import gregtech.api.enums.OrePrefixes;
+import gregtech.api.enums.TierEU;
+import gregtech.api.recipe.maps.PurificationUnitParticleExtractorFrontend;
+import gregtech.api.recipe.metadata.PurificationPlantBaseChanceKey;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gregtech.common.tileentities.machines.multi.purification.MTEPurificationPlant;
+import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitUVTreatment;
+import gtPlusPlus.core.material.Particle;
+
+public class PurifiedWaterRecipes {
+
+    static final PurificationPlantBaseChanceKey BASE_CHANCE = PurificationPlantBaseChanceKey.INSTANCE;
+
+    public static void run() {
+        final int duration = MTEPurificationPlant.CYCLE_TIME_TICKS;
+
+        // Grade 1 - Clarifier
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.ActivatedCarbonFilterMesh.get(1))
+            .fluidInputs(GTModHandler.getWater(1000L))
+            .fluidOutputs(Materials.Grade1PurifiedWater.getFluid(900L))
+            .itemOutputs(new ItemStack(Items.stick, 1), Materials.Stone.getDust(1), Materials.Gold.getNuggets(1))
+            .outputChances(1000, 500, 100)
+            .duration(duration)
+            .eut(TierEU.RECIPE_LuV)
+            .metadata(BASE_CHANCE, 70.0f)
+            .addTo(purificationClarifierRecipes);
+
+        // Activated Carbon Line
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Carbon.getDust(1))
+            .fluidInputs(Materials.PhosphoricAcid.getFluid(1000L))
+            .itemOutputs(Materials.PreActivatedCarbon.getDust(1))
+            .duration(5 * SECONDS)
+            .eut(TierEU.RECIPE_LuV)
+            .addTo(multiblockChemicalReactorRecipes);
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.PreActivatedCarbon.getDust(1))
+            .itemOutputs(Materials.DirtyActivatedCarbon.getDust(1))
+            .duration(10 * SECONDS)
+            .eut(TierEU.RECIPE_EV)
+            .specialValue((int) HeatingCoilLevel.EV.getHeat())
+            .addTo(blastFurnaceRecipes);
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.DirtyActivatedCarbon.getDust(1))
+            .fluidInputs(Materials.Water.getFluid(1000L))
+            .itemOutputs(Materials.ActivatedCarbon.getDust(1))
+            .fluidOutputs(Materials.PhosphoricAcid.getFluid(1000L))
+            .noOptimize()
+            .duration(2 * SECONDS)
+            .eut(TierEU.RECIPE_IV)
+            .addTo(chemicalBathRecipes);
+        GTValues.RA.stdBuilder()
+            .itemInputs(
+                Materials.ActivatedCarbon.getDust(64),
+                GTOreDictUnificator.get(OrePrefixes.foil, Materials.Zinc, 16))
+            .itemOutputs(ItemList.ActivatedCarbonFilterMesh.get(1))
+            .duration(10 * SECONDS)
+            .eut(TierEU.RECIPE_IV)
+            .addTo(assemblerRecipes);
+
+        // Grade 2 - Ozonation
+        for (ItemStack lens : GTOreDictUnificator.getOres("craftingLensBlue")) {
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.copyAmount(0, lens))
+                .noOptimize()
+                .fluidInputs(Materials.Air.getGas(10000L))
+                .fluidOutputs(Materials.Ozone.getGas(2000L))
+                .duration(1 * SECONDS)
+                .eut(TierEU.RECIPE_LuV)
+                .addTo(laserEngraverRecipes);
+        }
+
+        // Recipes for ozonation, uses 128kL, 256kL, 512kL, 1m kL at each tier
+        // 20% boost per tier
+        // Gets you up to 80%, need to water boost for 95%
+        for (int tier = 1; tier <= 4; ++tier) {
+            GTValues.RA.stdBuilder()
+                .noOptimize()
+                .fluidInputs(
+                    Materials.Grade1PurifiedWater.getFluid(1000L),
+                    Materials.Ozone.getGas(1000 * (long) Math.pow(2, (tier + 6))))
+                .fluidOutputs(Materials.Grade2PurifiedWater.getFluid(900L))
+                .itemOutputs(Materials.Manganese.getDust(1), Materials.Iron.getDust(1), Materials.Sulfur.getDust(1))
+                .outputChances(500, 500, 500)
+                .duration(duration)
+                .ignoreCollision()
+                .eut(TierEU.RECIPE_LuV)
+                .metadata(BASE_CHANCE, tier * 20.0f)
+                .addTo(purificationOzonationRecipes);
+        }
+
+        // Grade 3 - Flocculation.
+        GTValues.RA.stdBuilder()
+            .fluidInputs(Materials.Grade2PurifiedWater.getFluid(1000L))
+            .fluidOutputs(Materials.Grade3PurifiedWater.getFluid(900L))
+            .itemOutputs(
+                new ItemStack(Items.clay_ball, 1),
+                Materials.QuartzSand.getDust(1),
+                Materials.PolyvinylChloride.getNuggets(1))
+            .outputChances(1000, 500, 100)
+            .duration(duration)
+            .eut(TierEU.RECIPE_ZPM)
+            .metadata(BASE_CHANCE, 1 * 10.0f)
+            .addTo(purificationFlocculationRecipes);
+
+        // 2 Al(OH)3 + 3 HCl -> Al2(OH)3 Cl3 + 3 H2O
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Aluminiumhydroxide.getDust(8))
+            .fluidInputs(Materials.HydrochloricAcid.getFluid(3000L))
+            .fluidOutputs(Materials.PolyAluminiumChloride.getFluid(1000L), Materials.Water.getFluid(3000L))
+            .duration(4 * SECONDS)
+            .eut(TierEU.RECIPE_EV)
+            .addTo(multiblockChemicalReactorRecipes);
+
+        // Diluted is twice what chem balance would suggest, but it is 2:1 with hydrochloric acid which makes it
+        // correct I believe.
+        GTValues.RA.stdBuilder()
+            .fluidInputs(Materials.FlocculationWasteLiquid.getFluid(10000L))
+            .itemOutputs(Materials.Aluminium.getDust(11))
+            .fluidOutputs(Materials.Oxygen.getGas(29000L), Materials.DilutedHydrochloricAcid.getFluid(58000L))
+            .duration(1 * SECONDS)
+            .eut(TierEU.RECIPE_EV)
+            .addTo(distillationTowerRecipes);
+
+        // Grade 4 - pH adjustment
+        GTValues.RA.stdBuilder()
+            .fluidInputs(Materials.Grade3PurifiedWater.getFluid(1000L))
+            .fluidOutputs(Materials.Grade4PurifiedWater.getFluid(900L))
+            .ignoreCollision()
+            .duration(duration)
+            .eut(TierEU.RECIPE_ZPM)
+            .metadata(BASE_CHANCE, 0.0f)
+            .addTo(purificationPhAdjustmentRecipes);
+
+        // Grade 5 - Plasma Heating
+        GTValues.RA.stdBuilder()
+            .fluidInputs(Materials.Grade4PurifiedWater.getFluid(1000L))
+            .fluidOutputs(Materials.Grade5PurifiedWater.getFluid(900L))
+            .ignoreCollision()
+            .duration(duration)
+            .eut(TierEU.RECIPE_UV)
+            .metadata(BASE_CHANCE, 0.0f)
+            .addTo(purificationPlasmaHeatingRecipes);
+
+        MTEPurificationUnitUVTreatment.LENS_ITEMS.add(GGMaterial.orundum.get(OrePrefixes.lens, 1));
+        MTEPurificationUnitUVTreatment.LENS_ITEMS.add(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Amber, 1));
+        MTEPurificationUnitUVTreatment.LENS_ITEMS
+            .add(GTOreDictUnificator.get(OrePrefixes.lens, Materials.InfusedAir, 1));
+        MTEPurificationUnitUVTreatment.LENS_ITEMS.add(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Emerald, 1));
+        MTEPurificationUnitUVTreatment.LENS_ITEMS.add(GTOreDictUnificator.get(OrePrefixes.lens, ManaDiamond, 1));
+        MTEPurificationUnitUVTreatment.LENS_ITEMS
+            .add(GTOreDictUnificator.get(OrePrefixes.lens, Materials.BlueTopaz, 1));
+        MTEPurificationUnitUVTreatment.LENS_ITEMS.add(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Amethyst, 1));
+        MTEPurificationUnitUVTreatment.LENS_ITEMS.add(FluorBuergerit.get(OrePrefixes.lens, 1));
+        MTEPurificationUnitUVTreatment.LENS_ITEMS
+            .add(GTOreDictUnificator.get(OrePrefixes.lens, Materials.Dilithium, 1));
+
+        // Grade 6 - UV treatment
+        GTValues.RA.stdBuilder()
+            .fluidInputs(Materials.Grade5PurifiedWater.getFluid(1000L))
+            .fluidOutputs(Materials.Grade6PurifiedWater.getFluid(900L))
+            .ignoreCollision()
+            .duration(duration)
+            .eut(TierEU.RECIPE_UV)
+            .metadata(BASE_CHANCE, 0.0f)
+            .addTo(purificationUVTreatmentRecipes);
+
+        // Grade 7 - Degasification
+        GTValues.RA.stdBuilder()
+            .fluidInputs(Materials.Grade6PurifiedWater.getFluid(1000L))
+            .fluidOutputs(Materials.Grade7PurifiedWater.getFluid(900L))
+            .ignoreCollision()
+            .duration(duration)
+            .eut(TierEU.RECIPE_UHV)
+            .metadata(BASE_CHANCE, 0.0f)
+            .addTo(purificationDegasifierRecipes);
+
+        // Grade 8 - Quark Extraction
+
+        ItemStack[] catalystInputs = new ItemStack[] { ItemList.Quark_Creation_Catalyst_Up.get(1L),
+            ItemList.Quark_Creation_Catalyst_Down.get(1L), ItemList.Quark_Creation_Catalyst_Bottom.get(1L),
+            ItemList.Quark_Creation_Catalyst_Top.get(1L), ItemList.Quark_Creation_Catalyst_Strange.get(1L),
+            ItemList.Quark_Creation_Catalyst_Charm.get(1L) };
+
+        // Add all combinations of input items to the frontend map
+        for (int i = 0; i < catalystInputs.length; ++i) {
+            for (int j = 1; j < catalystInputs.length; ++j) {
+                PurificationUnitParticleExtractorFrontend.inputItems.add(catalystInputs[i]);
+                PurificationUnitParticleExtractorFrontend.inputItemsShuffled
+                    .add(catalystInputs[(i + j) % catalystInputs.length]);
+            }
+        }
+
+        // Add re-alignment recipes
+        for (int i = 0; i < catalystInputs.length; ++i) {
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Quark_Creation_Catalyst_Unaligned.get(1), GTUtility.getIntegratedCircuit(i + 1))
+                .fluidInputs(Materials.StableBaryonicMatter.getFluid(1000L))
+                .itemOutputs(catalystInputs[i])
+                .duration(30 * SECONDS)
+                .eut(TierEU.RECIPE_UHV)
+                // Not sure how I feel about it being in the laser engraver, but I don't see a better multi for it right
+                // now,
+                // and we can't really add a new one specifically for this (... for now)
+                .addTo(laserEngraverRecipes);
+        }
+
+        // Initial aligned quark catalysts, these are not meant to be done often, and simply exist to get you started
+        ItemStack[] quarks = new ItemStack[] { // make sure these are in the same order as the list above
+            Particle.getBaseParticle(Particle.UP), Particle.getBaseParticle(Particle.DOWN),
+            Particle.getBaseParticle(Particle.BOTTOM), Particle.getBaseParticle(Particle.TOP),
+            Particle.getBaseParticle(Particle.STRANGE), Particle.getBaseParticle(Particle.CHARM) };
+
+        for (int i = 0; i < catalystInputs.length; ++i) {
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Quark_Catalyst_Housing.get(1), quarks[i])
+                .fluidInputs(MaterialsUEVplus.ExcitedDTRC.getFluid(10000L))
+                .itemOutputs(catalystInputs[i])
+                .metadata(COIL_HEAT, 10800)
+                .eut(TierEU.RECIPE_UMV)
+                .duration(5 * MINUTES)
+                .addTo(plasmaForgeRecipes);
+        }
+
+        // Recipe for quark catalyst housing
+        GTValues.RA.stdBuilder()
+            .metadata(RESEARCH_ITEM, ItemList.Electromagnet_Tengam.get(1))
+            .metadata(RESEARCH_TIME, 1 * HOURS)
+            .itemInputs(
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 16),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 16),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Tritanium, 16),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 16),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64),
+                GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UHV, 16),
+                GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 8),
+                ItemList.Field_Generator_UEV.get(4))
+            .fluidInputs(
+                Materials.Neutronium.getMolten(16 * 144),
+                Materials.Infinity.getMolten(16 * 144),
+                Materials.Tritanium.getMolten(16 * 144),
+                Materials.CosmicNeutronium.getMolten(16 * 144))
+            .itemOutputs(ItemList.Quark_Catalyst_Housing.get(1))
+            .eut(TierEU.RECIPE_UIV)
+            .duration(60 * SECONDS)
+            .addTo(AssemblyLine);
+
+        GTValues.RA.stdBuilder()
+            // Fake item inputs
+            .itemInputs(ItemList.Quark_Creation_Catalyst_Charm.get(1), ItemList.Quark_Creation_Catalyst_Strange.get(1))
+            .fluidInputs(Materials.Grade7PurifiedWater.getFluid(1000L))
+            .fluidOutputs(
+                Materials.Grade8PurifiedWater.getFluid(900L),
+                Materials.StableBaryonicMatter.getFluid(BARYONIC_MATTER_OUTPUT))
+            .itemOutputs(ItemList.Quark_Creation_Catalyst_Unaligned.get(2L), Particle.getBaseParticle(Particle.UNKNOWN))
+            .outputChances(10000, 100)
+            .ignoreCollision()
+            .duration(duration)
+            .eut(TierEU.RECIPE_UEV)
+            .metadata(BASE_CHANCE, 0.0f)
+            .fake()
+            .addTo(purificationParticleExtractionRecipes);
+
+        // real recipe
+        GTValues.RA.stdBuilder()
+            .fluidInputs(Materials.Grade7PurifiedWater.getFluid(1000L))
+            .fluidOutputs(Materials.Grade8PurifiedWater.getFluid(900L))
+            .itemOutputs(ItemList.Quark_Creation_Catalyst_Unaligned.get(2L), Particle.getBaseParticle(Particle.UNKNOWN))
+            .outputChances(10000, 100)
+            .ignoreCollision()
+            .duration(duration)
+            .eut(TierEU.RECIPE_UEV)
+            .metadata(BASE_CHANCE, 0.0f)
+            .hidden()
+            .addTo(purificationParticleExtractionRecipes);
+    }
+}
diff --git a/src/main/java/gregtech/loaders/postload/recipes/AlloySmelterRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/AlloySmelterRecipes.java
index a9e587a145..01d77704f7 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/AlloySmelterRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/AlloySmelterRecipes.java
@@ -1,15 +1,15 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.objects.MaterialStack;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class AlloySmelterRecipes implements Runnable {
 
@@ -58,24 +58,22 @@ public class AlloySmelterRecipes implements Runnable {
     @Override
     public void run() {
         for (MaterialStack[] materials : mAlloySmelterList) {
-            ItemStack dust1 = GT_OreDictUnificator.get(OrePrefixes.dust, materials[0].mMaterial, materials[0].mAmount);
-            ItemStack dust2 = GT_OreDictUnificator.get(OrePrefixes.dust, materials[1].mMaterial, materials[1].mAmount);
-            ItemStack ingot1 = GT_OreDictUnificator
-                .get(OrePrefixes.ingot, materials[0].mMaterial, materials[0].mAmount);
-            ItemStack ingot2 = GT_OreDictUnificator
-                .get(OrePrefixes.ingot, materials[1].mMaterial, materials[1].mAmount);
-            ItemStack outputIngot = GT_OreDictUnificator
+            ItemStack dust1 = GTOreDictUnificator.get(OrePrefixes.dust, materials[0].mMaterial, materials[0].mAmount);
+            ItemStack dust2 = GTOreDictUnificator.get(OrePrefixes.dust, materials[1].mMaterial, materials[1].mAmount);
+            ItemStack ingot1 = GTOreDictUnificator.get(OrePrefixes.ingot, materials[0].mMaterial, materials[0].mAmount);
+            ItemStack ingot2 = GTOreDictUnificator.get(OrePrefixes.ingot, materials[1].mMaterial, materials[1].mAmount);
+            ItemStack outputIngot = GTOreDictUnificator
                 .get(OrePrefixes.ingot, materials[2].mMaterial, materials[2].mAmount);
-            if (outputIngot != GT_Values.NI) {
+            if (outputIngot != GTValues.NI) {
                 if (ingot1 != null) {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(ingot1, dust2)
                         .itemOutputs(outputIngot)
                         .duration((int) materials[2].mAmount * 50)
                         .eut(16)
                         .addTo(alloySmelterRecipes);
                     if (ingot2 != null) {
-                        GT_Values.RA.stdBuilder()
+                        GTValues.RA.stdBuilder()
                             .itemInputs(ingot1, ingot2)
                             .itemOutputs(outputIngot)
                             .duration((int) materials[2].mAmount * 50)
@@ -85,7 +83,7 @@ public class AlloySmelterRecipes implements Runnable {
                 }
 
                 if (ingot2 != null) {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(dust1, ingot2)
                         .itemOutputs(outputIngot)
                         .duration((int) materials[2].mAmount * 50)
@@ -93,7 +91,7 @@ public class AlloySmelterRecipes implements Runnable {
                         .addTo(alloySmelterRecipes);
                 }
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(dust1, dust2)
                     .itemOutputs(outputIngot)
                     .duration((int) materials[2].mAmount * 50)
@@ -104,11 +102,11 @@ public class AlloySmelterRecipes implements Runnable {
         }
 
         // We use rubber
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 3L),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 1L))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 3L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Rubber, 1L))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(alloySmelterRecipes);
diff --git a/src/main/java/gregtech/loaders/postload/recipes/ArcFurnaceRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ArcFurnaceRecipes.java
index 755e5ab885..38eb8bc7c7 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/ArcFurnaceRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/ArcFurnaceRecipes.java
@@ -2,472 +2,472 @@ package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.enums.Mods.Railcraft;
 import static gregtech.api.recipe.RecipeMaps.arcFurnaceRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeConstants.RECYCLE;
-import static gregtech.api.util.GT_RecipeConstants.UniversalArcFurnace;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeConstants.RECYCLE;
+import static gregtech.api.util.GTRecipeConstants.UniversalArcFurnace;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class ArcFurnaceRecipes implements Runnable {
 
     @Override
     public void run() {
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Block_TungstenSteelReinforced.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Concrete, 1))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Concrete, 1))
             .duration(8 * SECONDS)
             .eut(96)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Long_Distance_Pipeline_Fluid.get(1L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 19L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 19L))
             .duration(9 * SECONDS)
             .eut((int) TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Long_Distance_Pipeline_Item.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 12L),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 7L))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 12L),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 7L))
             .duration(9 * SECONDS)
             .eut((int) TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Long_Distance_Pipeline_Fluid_Pipe.get(1L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 2L))
             .duration(10 * TICKS)
             .eut((int) TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Long_Distance_Pipeline_Item_Pipe.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Tin, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 1L))
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Tin, 1L),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 1L))
             .duration(10 * TICKS)
             .eut((int) TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_Cupronickel.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Cupronickel, 8),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 2))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Cupronickel, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 2))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_Kanthal.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Kanthal, 8),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Cupronickel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Kanthal, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Cupronickel, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_Nichrome.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Nichrome, 8),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Kanthal, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 4))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Nichrome, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Kanthal, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 4))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_TungstenSteel.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TPV, 8),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Nichrome, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 5))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.TPV, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Nichrome, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 5))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_HSSG.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.HSSG, 8),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TPV, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 6))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.HSSG, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.TPV, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 6))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_HSSS.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.HSSS, 8),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.HSSG, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 7))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.HSSS, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.HSSG, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 7))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_Naquadah.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 8),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.HSSS, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 8))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.HSSS, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 8))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_NaquadahAlloy.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.NaquadahAlloy, 8),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 9))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.NaquadahAlloy, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 9))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_Trinium.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Trinium, 8),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.NaquadahAlloy, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 10))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Trinium, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.NaquadahAlloy, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 10))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_ElectrumFlux.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.ElectrumFlux, 8),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Trinium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 11))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.ElectrumFlux, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Trinium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 11))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_AwakenedDraconium.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.DraconiumAwakened, 8),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.ElectrumFlux, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 12))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.DraconiumAwakened, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.ElectrumFlux, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 12))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 0))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 2L))
             .duration(7 * SECONDS + 10 * TICKS)
             .eut(90)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
             .duration(7 * SECONDS + 10 * TICKS)
             .eut(90)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 2))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 12L),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 6))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 12L),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 6))
             .duration(7 * SECONDS + 10 * TICKS)
             .eut(90)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 13))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 2L))
             .duration(9 * SECONDS)
             .eut((int) TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 14))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
             .duration(9 * SECONDS)
             .eut((int) TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 15))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 12L),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 6L))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 12L),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 6L))
             .duration(9 * SECONDS)
             .eut((int) TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 0))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Aluminium, 2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Aluminium, 2L))
             .duration(10 * SECONDS + 10 * TICKS)
             .eut(150)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 3))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 3))
             .duration(10 * SECONDS + 10 * TICKS)
             .eut(150)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 2))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 12L),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 6L))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 12L),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 6L))
             .duration(10 * SECONDS + 10 * TICKS)
             .eut(150)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 3))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.StainlessSteel, 2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.StainlessSteel, 2L))
             .duration(12 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 4))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.StainlessSteel, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.StainlessSteel, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
             .duration(12 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 5))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.StainlessSteel, 12L),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.StainlessSteel, 6L))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.StainlessSteel, 12L),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.StainlessSteel, 6L))
             .duration(12 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 6))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Titanium, 2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Titanium, 2L))
             .duration(13 * SECONDS + 10 * TICKS)
             .eut(210)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 7))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Titanium, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Titanium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
             .duration(13 * SECONDS + 10 * TICKS)
             .eut(210)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 8))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Titanium, 12L),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Titanium, 6L))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Titanium, 12L),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Titanium, 6L))
             .duration(13 * SECONDS + 10 * TICKS)
             .eut(210)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 2L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 10))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 11))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 12L),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.TungstenSteel, 6L))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 12L),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.TungstenSteel, 6L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 12))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Palladium, 2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Palladium, 2L))
             .duration(16 * SECONDS + 10 * TICKS)
             .eut(270)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 13))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Palladium, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Palladium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
             .duration(16 * SECONDS + 10 * TICKS)
             .eut(270)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 14))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.NiobiumTitanium, 12L),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Chrome, 6L))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.NiobiumTitanium, 12L),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Chrome, 6L))
             .duration(16 * SECONDS + 10 * TICKS)
             .eut(270)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 0))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iridium, 2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Iridium, 2L))
             .duration(18 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iridium, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Iridium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
             .duration(18 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 2))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Enderium, 12L),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Iridium, 6L))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Enderium, 12L),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Iridium, 6L))
             .duration(18 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 3))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Osmium, 2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Osmium, 2L))
             .duration(18 * SECONDS)
             .eut(330)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 4))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Osmium, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Osmium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
             .duration(18 * SECONDS)
             .eut(330)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 5))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 12L),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Osmium, 6L))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 12L),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Osmium, 6L))
             .duration(18 * SECONDS)
             .eut(330)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 6))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Neutronium, 2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Neutronium, 2L))
             .duration(18 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 7))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Neutronium, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Neutronium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
             .duration(18 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 8))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Neutronium, 12L),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Neutronium, 6L))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Neutronium, 12L),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Neutronium, 6L))
             .duration(18 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .metadata(RECYCLE, true)
             .addTo(UniversalArcFurnace);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3))
             .fluidInputs(Materials.Oxygen.getGas(2000L))
             .duration(60 * SECONDS)
             .eut((int) TierEU.RECIPE_LV)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java
index 217be9082a..b0eb83a49a 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/AssemblerRecipes.java
@@ -17,16 +17,16 @@ import static gregtech.api.enums.Mods.Railcraft;
 import static gregtech.api.enums.Mods.TinkerConstruct;
 import static gregtech.api.enums.Mods.TwilightForest;
 import static gregtech.api.recipe.RecipeMaps.assemblerRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.EIGHTH_INGOT;
-import static gregtech.api.util.GT_RecipeBuilder.HALF_INGOT;
-import static gregtech.api.util.GT_RecipeBuilder.INGOTS;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.QUARTER_INGOT;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.loaders.postload.GT_MachineRecipeLoader.solderingMats;
-import static gtPlusPlus.core.material.ALLOY.INCONEL_690;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.EIGHTH_INGOT;
+import static gregtech.api.util.GTRecipeBuilder.HALF_INGOT;
+import static gregtech.api.util.GTRecipeBuilder.INGOTS;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.QUARTER_INGOT;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.loaders.postload.MachineRecipeLoader.solderingMats;
+import static gtPlusPlus.core.material.MaterialsAlloy.INCONEL_690;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
@@ -35,9 +35,9 @@ import net.minecraft.nbt.NBTTagCompound;
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import gregtech.GT_Mod;
+import gregtech.GTMod;
 import gregtech.api.enums.Dyes;
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsUEVplus;
@@ -45,10 +45,10 @@ import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
 import gregtech.api.util.ExternalMaterials;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
-import gtPlusPlus.core.material.ALLOY;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
+import gtPlusPlus.core.material.MaterialsAlloy;
 
 public class AssemblerRecipes implements Runnable {
 
@@ -67,517 +67,517 @@ public class AssemblerRecipes implements Runnable {
         this.withIC2NuclearControl();
 
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Spray_Empty.get(1L))
                 .duration(40 * SECONDS)
                 .eut(1)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Aluminium, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Aluminium, 2L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Aluminium, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.Aluminium, 2L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.ThermosCan_Empty.get(1L))
                 .duration(40 * SECONDS)
                 .eut(1)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Steel, 4L),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.AnyBronze, 4L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Steel, 4L),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.AnyBronze, 4L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Large_Fluid_Cell_Steel.get(1L))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.TungstenSteel, 4L),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Platinum, 4L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.TungstenSteel, 4L),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.Platinum, 4L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Large_Fluid_Cell_TungstenSteel.get(1L))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Aluminium, 4L),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Silver, 4L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Aluminium, 4L),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.Silver, 4L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Large_Fluid_Cell_Aluminium.get(1L))
                 .duration(10 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.StainlessSteel, 4L),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Electrum, 4L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.StainlessSteel, 4L),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.Electrum, 4L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Large_Fluid_Cell_StainlessSteel.get(1L))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Titanium, 4L),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.RoseGold, 4L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Titanium, 4L),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.RoseGold, 4L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Large_Fluid_Cell_Titanium.get(1L))
                 .duration(10 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Chrome, 4L),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Palladium, 4L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Chrome, 4L),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.Palladium, 4L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Large_Fluid_Cell_Chrome.get(1L))
                 .duration(10 * SECONDS)
                 .eut(1024)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Iridium, 4L),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Naquadah, 4L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Iridium, 4L),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.Naquadah, 4L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Large_Fluid_Cell_Iridium.get(1L))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_EV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Osmium, 4L),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.ElectrumFlux, 4L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Osmium, 4L),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.ElectrumFlux, 4L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Large_Fluid_Cell_Osmium.get(1L))
                 .duration(10 * SECONDS)
                 .eut(4096)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 4L),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Draconium, 4L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 4L),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.Draconium, 4L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Large_Fluid_Cell_Neutronium.get(1L))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_IV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L),
                     ItemList.Large_Fluid_Cell_Aluminium.get(1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Spray_Color_Remover_Empty.get(1L))
                 .duration(40 * SECONDS)
                 .eut(1)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Phosphorus, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Phosphorus, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Tool_Matches.get(1L))
                 .duration(16 * TICKS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.TricalciumPhosphate, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.TricalciumPhosphate, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Tool_Matches.get(1L))
                 .duration(16 * TICKS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 4L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 4L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Tool_Matches.get(4L))
                 .duration(3 * SECONDS + 4 * TICKS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 4L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Wood, 4L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Tool_Matches.get(4L))
                 .duration(3 * SECONDS + 4 * TICKS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Invar, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Invar, 2L),
                     new ItemStack(Items.flint, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Tool_Lighter_Invar_Empty.get(1L))
                 .duration(12 * SECONDS + 16 * TICKS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Platinum, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Platinum, 2L),
                     new ItemStack(Items.flint, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Tool_Lighter_Platinum_Empty.get(1L))
                 .duration(12 * SECONDS + 16 * TICKS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 2L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 2L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Upgrade_Muffler.get(1L))
                 .duration(1 * MINUTES + 20 * SECONDS)
                 .eut(2)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Upgrade_Muffler.get(1L))
                 .duration(1 * MINUTES + 20 * SECONDS)
                 .eut(2)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 2L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 2L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Upgrade_Muffler.get(1L))
                 .duration(1 * MINUTES + 20 * SECONDS)
                 .eut(2)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Upgrade_Muffler.get(1L))
                 .duration(1 * MINUTES + 20 * SECONDS)
                 .eut(2)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 2L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 2L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Upgrade_Muffler.get(1L))
                 .duration(1 * MINUTES + 20 * SECONDS)
                 .eut(2)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Upgrade_Muffler.get(1L))
                 .duration(1 * MINUTES + 20 * SECONDS)
                 .eut(2)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Upgrade_Lock.get(1L))
                 .duration(5 * MINUTES + 20 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Upgrade_Lock.get(1L))
                 .duration(5 * MINUTES + 20 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Upgrade_Lock.get(1L))
                 .duration(5 * MINUTES + 20 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Sensor_EV.get(1L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_PlayerDetector.get(1L))
                 .duration(2 * MINUTES + 40 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
                     ItemList.Cover_Drain.get(1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_Shutter.get(1L))
                 .duration(40 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
                     ItemList.Cover_Drain.get(1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_Shutter.get(1L))
                 .duration(40 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
                     ItemList.Cover_Drain.get(1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_Shutter.get(1L))
                 .duration(40 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2L),
                     new ItemStack(Blocks.iron_bars, 2),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_Drain.get(1L))
                 .duration(40 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 2L),
                     new ItemStack(Blocks.iron_bars, 2),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_Drain.get(1L))
                 .duration(40 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 2L),
                     new ItemStack(Blocks.iron_bars, 2),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_Drain.get(1L))
                 .duration(40 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
                     new ItemStack(Blocks.crafting_table, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_Crafting.get(1L))
                 .duration(40 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
                     new ItemStack(Blocks.crafting_table, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_Crafting.get(1L))
                 .duration(40 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
                     new ItemStack(Blocks.crafting_table, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_Crafting.get(1L))
                 .duration(40 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Cover_Screen.get(1L),
                     ItemList.Cover_FluidDetector.get(1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_FluidStorageMonitor.get(1L))
                 .duration(40 * SECONDS)
                 .eut(4)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Sensor_LV.get(1L), ItemList.Emitter_LV.get(1L), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Sensor_LV.get(1L), ItemList.Emitter_LV.get(1L), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.NC_SensorKit.get(1L))
                 .duration(1 * MINUTES + 20 * SECONDS)
                 .eut(2)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Emitter_EV.get(1L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_RedstoneTransmitterExternal.get(1L))
                 .duration(2 * MINUTES + 40 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Sensor_EV.get(1L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_RedstoneReceiverExternal.get(1L))
                 .duration(2 * MINUTES + 40 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Emitter_MV.get(1L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Cover_NeedsMaintainance.get(1L))
                 .duration(30 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tin, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Tin, 2L),
                     ItemList.Component_Filter.get(1L),
                     ItemList.Conveyor_Module_LV.get(1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.ItemFilter_Export.get(1L))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tin, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Tin, 2L),
                     ItemList.Component_Filter.get(1L),
                     ItemList.Conveyor_Module_LV.get(1L),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.ItemFilter_Import.get(1L))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 2L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlueSteel, 2L))
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.BlueSteel, 2L))
                 .itemOutputs(ItemList.BatteryHull_EV.get(1L))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(144L))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Platinum, 2L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RoseGold, 6L))
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Platinum, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.RoseGold, 6L))
                 .itemOutputs(ItemList.BatteryHull_IV.get(1L))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(288L))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_EV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 2L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedSteel, 18L))
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.RedSteel, 18L))
                 .itemOutputs(ItemList.BatteryHull_LuV.get(1L))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(144L))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_IV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.NaquadahAlloy, 2L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Europium, 6L))
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.NaquadahAlloy, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Europium, 6L))
                 .itemOutputs(ItemList.BatteryHull_ZPM.get(1L))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(288L))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LuV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.ElectrumFlux, 2L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Americium, 18L))
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.ElectrumFlux, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Americium, 18L))
                 .itemOutputs(ItemList.BatteryHull_UV.get(1L))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(576L))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_ZPM)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt02, Materials.ElectrumFlux, 2L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Naquadah, 24L))
+                    GTOreDictUnificator.get(OrePrefixes.cableGt02, Materials.ElectrumFlux, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Naquadah, 24L))
                 .itemOutputs(ItemList.BatteryHull_UHV.get(1L))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1152L))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_UV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.ElectrumFlux, 2L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahEnriched, 36L))
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.ElectrumFlux, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahEnriched, 36L))
                 .itemOutputs(ItemList.BatteryHull_UEV.get(1L))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(2304L))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_UHV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt08, Materials.ElectrumFlux, 2L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 48L))
+                    GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.ElectrumFlux, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 48L))
                 .itemOutputs(ItemList.BatteryHull_UIV.get(1L))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(4608L))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_UHV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 2L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 56L))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 56L))
                 .itemOutputs(ItemList.BatteryHull_UMV.get(1L))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(9216L))
                 .duration(30 * SECONDS)
                 .eut(TierEU.RECIPE_UHV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 2L),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 64L))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 2L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 64L))
                 .itemOutputs(ItemList.BatteryHull_UxV.get(1L))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(18432L))
                 .duration(60 * SECONDS)
@@ -586,15 +586,15 @@ public class AssemblerRecipes implements Runnable {
         }
 
         // If Cleanroom is enabled, add an assembler recipe
-        if (GT_Mod.gregtechproxy.mEnableCleanroom) {
-            GT_Values.RA.stdBuilder()
+        if (GTMod.gregtechproxy.mEnableCleanroom) {
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1L),
                     ItemList.Component_Filter.get(3L),
-                    GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 1L),
                     ItemList.Electric_Motor_HV.get(2L),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Machine_Multi_Cleanroom.get(1L))
                 .fluidInputs(Materials.StainlessSteel.getMolten(144L))
                 .duration(60 * SECONDS)
@@ -602,55 +602,55 @@ public class AssemblerRecipes implements Runnable {
                 .addTo(assemblerRecipes);
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Cover_Shutter.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.FluidFilter.get(1L))
             .duration(40 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.FR_Stick.get(1L))
             .fluidInputs(Materials.SeedOil.getFluid(50L))
             .duration(16 * TICKS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 1))
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 1))
             .itemOutputs(ItemList.Block_Plascrete.get(1))
             .fluidInputs(Materials.Concrete.getMolten(144))
             .duration(10 * SECONDS)
             .eut(48)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 1))
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 1))
             .itemOutputs(ItemList.Block_Plascrete.get(1))
             .fluidInputs(Materials.Concrete.getMolten(144))
             .duration(10 * SECONDS)
             .eut(48)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.TungstenSteel, 16),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.EV), 4),
+                GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.TungstenSteel, 16),
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.EV), 4),
                 ItemList.Electric_Motor_IV.get(16),
                 ItemList.Emitter_EV.get(4),
                 ItemList.Duct_Tape.get(64),
                 ItemList.Energy_LapotronicOrb.get(1),
-                GT_Utility.getIntegratedCircuit(4))
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.TierdDrone0.get(4))
             .fluidInputs(Materials.AdvancedGlue.getFluid(144))
             .duration(10 * SECONDS)
@@ -660,8 +660,8 @@ public class AssemblerRecipes implements Runnable {
         for (byte i = 0; i < 16; i = (byte) (i + 1)) {
             for (int j = 0; j < Dyes.VALUES[i].getSizeOfFluidList(); j++) {
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(new ItemStack(Items.string, 3), GT_Utility.getIntegratedCircuit(3))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(new ItemStack(Items.string, 3), GTUtility.getIntegratedCircuit(3))
                     .itemOutputs(new ItemStack(Blocks.carpet, 2, 15 - i))
                     .fluidInputs(Dyes.VALUES[i].getFluidDye(j, 24))
                     .duration(6 * SECONDS + 8 * TICKS)
@@ -670,9 +670,9 @@ public class AssemblerRecipes implements Runnable {
             }
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.foil, Materials.PolyvinylChloride, 1),
+                GTOreDictUnificator.get(OrePrefixes.foil, Materials.PolyvinylChloride, 1),
                 ItemList.Paper_Printed_Pages.get(1))
             .itemOutputs(new ItemStack(Items.written_book, 1, 0))
             .fluidInputs(Materials.Glue.getFluid(20))
@@ -680,278 +680,278 @@ public class AssemblerRecipes implements Runnable {
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.foil, Materials.PolyvinylChloride, 1),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3))
+                GTOreDictUnificator.get(OrePrefixes.foil, Materials.PolyvinylChloride, 1),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3))
             .itemOutputs(new ItemStack(Items.book, 1, 0))
             .fluidInputs(Materials.Glue.getFluid(20))
             .duration(20 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_ModHandler.getIC2Item("carbonMesh", 4),
-                GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Zinc, 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTModHandler.getIC2Item("carbonMesh", 4),
+                GTOreDictUnificator.get(OrePrefixes.foil, Materials.Zinc, 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Component_Filter.get(1))
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Steel, 64),
-                GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Zinc, 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Steel, 64),
+                GTOreDictUnificator.get(OrePrefixes.foil, Materials.Zinc, 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Component_Filter.get(1))
             .fluidInputs(Materials.Plastic.getMolten(144))
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 64),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 64),
                 ItemList.Circuit_Silicon_Wafer2.get(32),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphene, 64))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Graphene, 64))
             .fluidInputs(Materials.AdvancedGlue.getFluid(500))
             .duration(2 * MINUTES + 40 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 64),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 64),
                 ItemList.Circuit_Silicon_Wafer3.get(8),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphene, 64))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Graphene, 64))
             .fluidInputs(Materials.AdvancedGlue.getFluid(250))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_LV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.LV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.LV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.FluidRegulator_LV.get(1))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_MV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.MV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.MV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.FluidRegulator_MV.get(1))
             .duration(17 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_HV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.HV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.HV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.FluidRegulator_HV.get(1))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_EV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.EV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.EV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.FluidRegulator_EV.get(1))
             .duration(12 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_IV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.IV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.IV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.FluidRegulator_IV.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_LuV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.LuV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.LuV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.FluidRegulator_LuV.get(1))
             .duration(7 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_ZPM.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.ZPM), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.ZPM), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.FluidRegulator_ZPM.get(1))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_ZPM)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_UV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.UV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.UV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.FluidRegulator_UV.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_UV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Steam_Valve_LV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.LV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.LV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Steam_Regulator_LV.get(1))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Steam_Valve_MV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.MV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.MV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Steam_Regulator_MV.get(1))
             .duration(17 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Steam_Valve_HV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.HV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.HV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Steam_Regulator_HV.get(1))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Steam_Valve_EV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.EV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.EV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Steam_Regulator_EV.get(1))
             .duration(12 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Steam_Valve_IV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.IV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.IV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Steam_Regulator_IV.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_LV.get(1),
                 ItemList.Electric_Motor_LV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.gear.get(Materials.Steel), 2),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.gear.get(Materials.Steel), 2),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.Steam_Valve_LV.get(1))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_MV.get(1),
                 ItemList.Electric_Motor_MV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.gear.get(Materials.Aluminium), 2),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.gear.get(Materials.Aluminium), 2),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.Steam_Valve_MV.get(1))
             .duration(17 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_HV.get(1),
                 ItemList.Electric_Motor_HV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.gear.get(Materials.StainlessSteel), 2),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.gear.get(Materials.StainlessSteel), 2),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.Steam_Valve_HV.get(1))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_EV.get(1),
                 ItemList.Electric_Motor_EV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.gear.get(Materials.Titanium), 2),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.gear.get(Materials.Titanium), 2),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.Steam_Valve_EV.get(1))
             .duration(12 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_IV.get(1),
                 ItemList.Electric_Motor_IV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.gear.get(Materials.TungstenSteel), 2),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.gear.get(Materials.TungstenSteel), 2),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.Steam_Valve_IV.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate.get(Materials.Steel), 4),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.LV), 4),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.plate.get(Materials.Steel), 4),
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.LV), 4),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Schematic.get(1L))
             .duration(30 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate.get(Materials.Aluminium), 3),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.MV), 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.plate.get(Materials.Aluminium), 3),
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.MV), 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Schematic.get(1L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate.get(Materials.StainlessSteel), 2),
-                GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.HV), 1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.plate.get(Materials.StainlessSteel), 2),
+                GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.HV), 1),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Schematic.get(1L))
             .duration(7 * SECONDS + 10 * TICKS)
             .eut(48)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_HV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 1L),
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 1L),
                 ItemList.Circuit_Chip_LPIC.get(2L),
                 ItemList.HV_Coil.get(2L),
                 ItemList.Reactor_Coolant_He_1.get(1L),
@@ -961,10 +961,10 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_EV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 1L),
                 ItemList.Circuit_Chip_PIC.get(2L),
                 ItemList.EV_Coil.get(2L),
                 ItemList.Reactor_Coolant_He_1.get(1L),
@@ -974,10 +974,10 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_IV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 1L),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 1L),
                 ItemList.Circuit_Chip_HPIC.get(2L),
                 ItemList.IV_Coil.get(2L),
                 ItemList.Reactor_Coolant_He_3.get(1L),
@@ -987,10 +987,10 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_HV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 1L),
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 1L),
                 ItemList.Circuit_Chip_LPIC.get(2L),
                 ItemList.HV_Coil.get(2L),
                 ItemList.Reactor_Coolant_NaK_1.get(1L),
@@ -1000,10 +1000,10 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_EV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 1L),
                 ItemList.Circuit_Chip_PIC.get(2L),
                 ItemList.EV_Coil.get(2L),
                 ItemList.Reactor_Coolant_NaK_1.get(1L),
@@ -1013,10 +1013,10 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_IV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 1L),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 1L),
                 ItemList.Circuit_Chip_HPIC.get(2L),
                 ItemList.IV_Coil.get(2L),
                 ItemList.Reactor_Coolant_NaK_3.get(1L),
@@ -1026,10 +1026,10 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_HV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Gold, 1L),
+                GTOreDictUnificator.get(OrePrefixes.spring, Materials.Gold, 1L),
                 ItemList.Circuit_Chip_LPIC.get(2L),
                 ItemList.HV_Coil.get(2L),
                 ItemList.Reactor_Coolant_He_1.get(1L),
@@ -1039,10 +1039,10 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_EV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Aluminium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.spring, Materials.Aluminium, 1L),
                 ItemList.Circuit_Chip_PIC.get(2L),
                 ItemList.EV_Coil.get(2L),
                 ItemList.Reactor_Coolant_He_1.get(1L),
@@ -1052,10 +1052,10 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_IV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Vanadiumtriindinid, 1L),
+                GTOreDictUnificator.get(OrePrefixes.spring, Materials.Vanadiumtriindinid, 1L),
                 ItemList.Circuit_Chip_HPIC.get(2L),
                 ItemList.IV_Coil.get(2L),
                 ItemList.Reactor_Coolant_He_3.get(1L),
@@ -1065,10 +1065,10 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_HV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Gold, 1L),
+                GTOreDictUnificator.get(OrePrefixes.spring, Materials.Gold, 1L),
                 ItemList.Circuit_Chip_LPIC.get(2L),
                 ItemList.HV_Coil.get(2L),
                 ItemList.Reactor_Coolant_NaK_1.get(1L),
@@ -1078,10 +1078,10 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_EV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Aluminium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.spring, Materials.Aluminium, 1L),
                 ItemList.Circuit_Chip_PIC.get(2L),
                 ItemList.EV_Coil.get(2L),
                 ItemList.Reactor_Coolant_NaK_1.get(1L),
@@ -1091,10 +1091,10 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_IV.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Vanadiumtriindinid, 1L),
+                GTOreDictUnificator.get(OrePrefixes.spring, Materials.Vanadiumtriindinid, 1L),
                 ItemList.Circuit_Chip_HPIC.get(2L),
                 ItemList.IV_Coil.get(2L),
                 ItemList.Reactor_Coolant_NaK_3.get(1L),
@@ -1104,124 +1104,124 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Steel, 2L),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 6L),
-                GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Steel, 2L),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Steel, 2L),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 6L),
+                GTOreDictUnificator.get(OrePrefixes.gear, Materials.Steel, 2L),
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Long_Distance_Pipeline_Fluid.get(2L))
             .fluidInputs(Materials.Tin.getMolten(144L))
             .duration(15 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Tin, 2L),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 6L),
-                GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Steel, 2L),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.pipeHuge, Materials.Tin, 2L),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 6L),
+                GTOreDictUnificator.get(OrePrefixes.gear, Materials.Steel, 2L),
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Long_Distance_Pipeline_Item.get(2L))
             .fluidInputs(Materials.Tin.getMolten(144L))
             .duration(15 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Steel, 2L),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 9L),
-                GT_Utility.getIntegratedCircuit(24))
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Steel, 2L),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 9L),
+                GTUtility.getIntegratedCircuit(24))
             .itemOutputs(ItemList.Long_Distance_Pipeline_Fluid_Pipe.get(64L))
             .fluidInputs(Materials.Tin.getMolten(144L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Tin, 2L),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 9L),
-                GT_Utility.getIntegratedCircuit(24))
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Tin, 2L),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 9L),
+                GTUtility.getIntegratedCircuit(24))
             .itemOutputs(ItemList.Long_Distance_Pipeline_Item_Pipe.get(64L))
             .fluidInputs(Materials.Tin.getMolten(144L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.StainlessSteel, 1L),
+                GTOreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.StainlessSteel, 1L),
                 ItemList.Hull_EV.get(1L),
-                GT_Utility.getIntegratedCircuit(4))
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.Hatch_Input_Multi_2x2_EV.get(1L))
             .fluidInputs(Materials.Glass.getMolten(2304L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.Titanium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.Titanium, 1L),
                 ItemList.Hull_IV.get(1L),
-                GT_Utility.getIntegratedCircuit(4))
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.Hatch_Input_Multi_2x2_IV.get(1L))
             .fluidInputs(Materials.Glass.getMolten(2304L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.TungstenSteel, 1L),
+                GTOreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.TungstenSteel, 1L),
                 ItemList.Hull_LuV.get(1L),
-                GT_Utility.getIntegratedCircuit(4))
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.Hatch_Input_Multi_2x2_LuV.get(1L))
             .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.NiobiumTitanium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.NiobiumTitanium, 1L),
                 ItemList.Hull_ZPM.get(1L),
-                GT_Utility.getIntegratedCircuit(4))
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.Hatch_Input_Multi_2x2_ZPM.get(1L))
             .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2304L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_ZPM)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.MysteriousCrystal, 1L),
+                GTOreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.MysteriousCrystal, 1L),
                 ItemList.Hull_UV.get(1L),
-                GT_Utility.getIntegratedCircuit(4))
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.Hatch_Input_Multi_2x2_UV.get(1L))
             .fluidInputs(Materials.Polybenzimidazole.getMolten(2304L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_UV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.Neutronium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.Neutronium, 1L),
                 ItemList.Hull_MAX.get(1L),
-                GT_Utility.getIntegratedCircuit(4))
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.Hatch_Input_Multi_2x2_UHV.get(1L))
             .fluidInputs(Materials.Polybenzimidazole.getMolten(2304L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_UHV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 4L),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1L),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 4L),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1L),
                 ItemList.Robot_Arm_IV.get(2L),
-                GT_Utility.getIntegratedCircuit(3))
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Casing_Gearbox_TungstenSteel.get(1L))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
@@ -1236,10 +1236,10 @@ public class AssemblerRecipes implements Runnable {
                 nbtFlask.setInteger("Capacity", capacities[i]);
                 flask.setTagCompound(nbtFlask);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         ItemList.VOLUMETRIC_FLASK.get(1),
-                        GT_Utility.getIntegratedCircuit(circuitConfigurations[i]))
+                        GTUtility.getIntegratedCircuit(circuitConfigurations[i]))
                     .itemOutputs(flask)
                     .duration(10 * TICKS)
                     .eut(TierEU.RECIPE_LV)
@@ -1247,125 +1247,125 @@ public class AssemblerRecipes implements Runnable {
             }
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_LV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Bronze, 1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Bronze, 1),
+                GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Bronze, 1),
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Bronze, 1),
                 ItemList.Electric_Motor_LV.get(1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Hatch_Muffler_LV.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_MV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Steel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Steel, 1),
+                GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Steel, 1),
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Steel, 1),
                 ItemList.Electric_Motor_MV.get(1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Hatch_Muffler_MV.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_HV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.StainlessSteel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 1),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.StainlessSteel, 1),
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 1),
                 ItemList.Electric_Motor_HV.get(1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Hatch_Muffler_HV.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_EV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Titanium, 1),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Titanium, 1),
                 ItemList.Electric_Motor_EV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Titanium, 1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Titanium, 1),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Hatch_Muffler_EV.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_IV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.TungstenSteel, 1),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.TungstenSteel, 1),
                 ItemList.Electric_Motor_IV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.TungstenSteel, 1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.TungstenSteel, 1),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Hatch_Muffler_IV.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_LuV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Enderium, 1),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Enderium, 1),
                 ItemList.Electric_Motor_LuV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Enderium, 1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Enderium, 1),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Hatch_Muffler_LuV.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_ZPM.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Naquadah, 1),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Naquadah, 1),
                 ItemList.Electric_Motor_ZPM.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.NaquadahAlloy, 1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.NaquadahAlloy, 1),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Hatch_Muffler_ZPM.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_ZPM)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_UV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 1),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 1),
                 ItemList.Electric_Motor_UV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Neutronium, 1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Neutronium, 1),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Hatch_Muffler_UV.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_UV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Hull_MAX.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.MysteriousCrystal, 1),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.MysteriousCrystal, 1),
                 ItemList.Electric_Motor_UHV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.CosmicNeutronium, 1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.CosmicNeutronium, 1),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Hatch_Muffler_MAX.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_UHV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.redstone_torch, 2, 32767),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1))
             .itemOutputs(new ItemStack(Items.repeater, 1, 0))
             .fluidInputs(Materials.Concrete.getMolten(144))
             .duration(4 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.leather, 1, 32767), new ItemStack(Items.lead, 1, 32767))
             .itemOutputs(new ItemStack(Items.name_tag, 1, 0))
             .fluidInputs(Materials.Glue.getFluid(72))
@@ -1373,7 +1373,7 @@ public class AssemblerRecipes implements Runnable {
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(NewHorizonsCoreMod.ID, "item.ArtificialLeather", 1L, 0),
                 new ItemStack(Items.lead, 1, 32767))
@@ -1383,76 +1383,68 @@ public class AssemblerRecipes implements Runnable {
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 8),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 8),
                 new ItemStack(Items.compass, 1, 32767))
             .itemOutputs(new ItemStack(Items.map, 1, 0))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tantalum, 1),
-                GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Manganese, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tantalum, 1),
+                GTOreDictUnificator.get(OrePrefixes.foil, Materials.Manganese, 1))
             .itemOutputs(ItemList.Battery_RE_ULV_Tantalum.get(8))
             .fluidInputs(Materials.Plastic.getMolten(144))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(getModItem(TwilightForest.ID, "item.charmOfLife1", 4L, 0), GT_Utility.getIntegratedCircuit(4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(TwilightForest.ID, "item.charmOfLife1", 4L, 0), GTUtility.getIntegratedCircuit(4))
             .itemOutputs(getModItem(TwilightForest.ID, "item.charmOfLife2", 1L, 0))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                getModItem(TwilightForest.ID, "item.charmOfKeeping1", 4L, 0),
-                GT_Utility.getIntegratedCircuit(4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(TwilightForest.ID, "item.charmOfKeeping1", 4L, 0), GTUtility.getIntegratedCircuit(4))
             .itemOutputs(getModItem(TwilightForest.ID, "item.charmOfKeeping2", 1L, 0))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                getModItem(TwilightForest.ID, "item.charmOfKeeping2", 4L, 0),
-                GT_Utility.getIntegratedCircuit(4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(TwilightForest.ID, "item.charmOfKeeping2", 4L, 0), GTUtility.getIntegratedCircuit(4))
             .itemOutputs(getModItem(TwilightForest.ID, "item.charmOfKeeping3", 1L, 0))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(getModItem(TwilightForest.ID, "item.charmOfLife2", 1L, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(TwilightForest.ID, "item.charmOfLife2", 1L, 0), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(TwilightForest.ID, "item.charmOfLife1", 4L, 0))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                getModItem(TwilightForest.ID, "item.charmOfKeeping2", 1L, 0),
-                GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(TwilightForest.ID, "item.charmOfKeeping2", 1L, 0), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(TwilightForest.ID, "item.charmOfKeeping1", 4L, 0))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                getModItem(TwilightForest.ID, "item.charmOfKeeping3", 1L, 0),
-                GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(TwilightForest.ID, "item.charmOfKeeping3", 1L, 0), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(TwilightForest.ID, "item.charmOfKeeping2", 4L, 0))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 16),
                 getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 20))
@@ -1462,7 +1454,7 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 17),
                 getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 20))
@@ -1472,7 +1464,7 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 18),
                 getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 20))
@@ -1482,34 +1474,34 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 1),
                 new ItemStack(Blocks.sand, 1, 32767))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 0))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 1),
                 new ItemStack(Blocks.sand, 1, 32767))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 600))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Fluix, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Fluix, 1),
                 new ItemStack(Blocks.sand, 1, 32767))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 2L, 1200))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.FR_Wax.get(6), new ItemStack(Items.string, 1, 32767))
             .itemOutputs(getModItem(Forestry.ID, "candle", 24L, 0))
             .fluidInputs(Materials.Water.getFluid(600))
@@ -1517,7 +1509,7 @@ public class AssemblerRecipes implements Runnable {
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.FR_Wax.get(2), ItemList.FR_Silk.get(1))
             .itemOutputs(getModItem(Forestry.ID, "candle", 8L, 0))
             .fluidInputs(Materials.Water.getFluid(200))
@@ -1525,24 +1517,24 @@ public class AssemblerRecipes implements Runnable {
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.FR_Silk.get(9), GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.FR_Silk.get(9), GTUtility.getIntegratedCircuit(9))
             .itemOutputs(getModItem(Forestry.ID, "craftingMaterial", 1L, 3))
             .fluidInputs(Materials.Water.getFluid(500))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(getModItem(Forestry.ID, "propolis", 5L, 2), GT_Utility.getIntegratedCircuit(5))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(Forestry.ID, "propolis", 5L, 2), GTUtility.getIntegratedCircuit(5))
             .itemOutputs(getModItem(Forestry.ID, "craftingMaterial", 1L, 1))
             .duration(16 * TICKS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
                 new ItemStack(Blocks.wool, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.torch, 6, 0))
             .fluidInputs(Materials.Creosote.getFluid(1000))
@@ -1550,62 +1542,62 @@ public class AssemblerRecipes implements Runnable {
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(getModItem(Forestry.ID, "craftingMaterial", 5L, 1), GT_Utility.getIntegratedCircuit(5))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(Forestry.ID, "craftingMaterial", 5L, 1), GTUtility.getIntegratedCircuit(5))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.piston, 1, 32767), new ItemStack(Items.slime_ball, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.sticky_piston, 1, 0))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.piston, 1, 32767), ItemList.IC2_Resin.get(1))
             .itemOutputs(new ItemStack(Blocks.sticky_piston, 1, 0))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.piston, 1, 32767), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Blocks.piston, 1, 32767), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Blocks.sticky_piston, 1, 0))
             .fluidInputs(Materials.Glue.getFluid(100))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 3),
-                GT_ModHandler.getIC2Item("carbonMesh", 3),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 3),
+                GTModHandler.getIC2Item("carbonMesh", 3),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Duct_Tape.get(1))
             .fluidInputs(Materials.Glue.getFluid(300))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StyreneButadieneRubber, 2),
-                GT_ModHandler.getIC2Item("carbonMesh", 2),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.StyreneButadieneRubber, 2),
+                GTModHandler.getIC2Item("carbonMesh", 2),
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Duct_Tape.get(1))
             .fluidInputs(Materials.Glue.getFluid(200))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Silicone, 1),
-                GT_ModHandler.getIC2Item("carbonMesh", 1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Silicone, 1),
+                GTModHandler.getIC2Item("carbonMesh", 1),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Duct_Tape.get(1))
             .fluidInputs(Materials.Glue.getFluid(100))
             .duration(5 * SECONDS)
@@ -1615,17 +1607,17 @@ public class AssemblerRecipes implements Runnable {
         // Maintenance Hatch Recipes Using BrainTech + Refined Glue. Info: One BrainTech Recipe Is In GT+ü Originally.
         // The Maintenance Hatch Recipe using SuperGlue is there.
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Hull_LV.get(1), ItemList.Duct_Tape.get(2), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Hull_LV.get(1), ItemList.Duct_Tape.get(2), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Hatch_Maintenance.get(1))
             .fluidInputs(Materials.Glue.getFluid(1000))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3),
                 new ItemStack(Items.leather, 1, 32767))
             .itemOutputs(new ItemStack(Items.book, 1, 0))
             .fluidInputs(Materials.Glue.getFluid(20))
@@ -1633,9 +1625,9 @@ public class AssemblerRecipes implements Runnable {
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3),
                 getModItem(NewHorizonsCoreMod.ID, "item.ArtificialLeather", 1L, 0))
             .itemOutputs(new ItemStack(Items.book, 1, 0))
             .fluidInputs(Materials.Glue.getFluid(20))
@@ -1643,17 +1635,17 @@ public class AssemblerRecipes implements Runnable {
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3),
-                GT_OreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Paper, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3),
+                GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Paper, 1))
             .itemOutputs(new ItemStack(Items.book, 1, 0))
             .fluidInputs(Materials.Glue.getFluid(20))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Paper_Printed_Pages.get(1), new ItemStack(Items.leather, 1, 32767))
             .itemOutputs(new ItemStack(Items.written_book, 1, 0))
             .fluidInputs(Materials.Glue.getFluid(20))
@@ -1661,7 +1653,7 @@ public class AssemblerRecipes implements Runnable {
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Paper_Printed_Pages.get(1),
                 getModItem(NewHorizonsCoreMod.ID, "item.ArtificialLeather", 1L, 0))
@@ -1671,14 +1663,14 @@ public class AssemblerRecipes implements Runnable {
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Tin, 4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.Tin, 4))
             .itemOutputs(ItemList.Cell_Universal_Fluid.get(1))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Baked_Cake.get(1), new ItemStack(Items.egg, 1, 0))
             .itemOutputs(new ItemStack(Items.cake, 1, 0))
             .fluidInputs(Materials.Milk.getFluid(3000))
@@ -1686,104 +1678,104 @@ public class AssemblerRecipes implements Runnable {
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Food_Sliced_Bun.get(2), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Food_Sliced_Bun.get(2), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Food_Sliced_Buns.get(1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Food_Sliced_Bread.get(2), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Food_Sliced_Bread.get(2), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Food_Sliced_Breads.get(1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Food_Sliced_Baguette.get(2), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Food_Sliced_Baguette.get(2), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Food_Sliced_Baguettes.get(1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Food_Sliced_Buns.get(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Food_Sliced_Buns.get(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Food_Sliced_Bun.get(2))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Food_Sliced_Breads.get(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Food_Sliced_Breads.get(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Food_Sliced_Bread.get(2))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Food_Sliced_Baguettes.get(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Food_Sliced_Baguettes.get(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Food_Sliced_Baguette.get(2))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Food_Sliced_Bun.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1))
             .itemOutputs(ItemList.Food_Burger_Meat.get(1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Food_Sliced_Buns.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1))
             .itemOutputs(ItemList.Food_Burger_Meat.get(1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Sliced_Bun.get(2), ItemList.Food_Chum.get(1))
             .itemOutputs(ItemList.Food_Burger_Chum.get(1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Sliced_Buns.get(1), ItemList.Food_Chum.get(1))
             .itemOutputs(ItemList.Food_Burger_Chum.get(1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Sliced_Bun.get(2), ItemList.Food_Sliced_Cheese.get(3))
             .itemOutputs(ItemList.Food_Burger_Cheese.get(1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Sliced_Buns.get(1), ItemList.Food_Sliced_Cheese.get(3))
             .itemOutputs(ItemList.Food_Burger_Cheese.get(1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Food_Flat_Dough.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.MeatCooked, 1))
             .itemOutputs(ItemList.Food_Raw_Pizza_Meat.get(1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Flat_Dough.get(1), ItemList.Food_Sliced_Cheese.get(3))
             .itemOutputs(ItemList.Food_Raw_Pizza_Cheese.get(1))
             .duration(5 * SECONDS)
@@ -1792,838 +1784,838 @@ public class AssemblerRecipes implements Runnable {
 
         // SC craft
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Pentacadmiummagnesiumhexaoxid, 3),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.StainlessSteel, 2),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Pentacadmiummagnesiumhexaoxid, 3),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.StainlessSteel, 2),
                 ItemList.Electric_Pump_MV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorMV, 3))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorMV, 3))
             .fluidInputs(Materials.Helium.getGas(2000))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titaniumonabariumdecacoppereikosaoxid, 6),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Titanium, 4),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titaniumonabariumdecacoppereikosaoxid, 6),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Titanium, 4),
                 ItemList.Electric_Pump_HV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 6))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 6))
             .fluidInputs(Materials.Helium.getGas(4000))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Uraniumtriplatinid, 9),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.TungstenSteel, 6),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Uraniumtriplatinid, 9),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.TungstenSteel, 6),
                 ItemList.Electric_Pump_EV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorEV, 9))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorEV, 9))
             .fluidInputs(Materials.Helium.getGas(6000))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Vanadiumtriindinid, 12),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.NiobiumTitanium, 8),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Vanadiumtriindinid, 12),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.NiobiumTitanium, 8),
                 ItemList.Electric_Pump_IV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 12))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 12))
             .fluidInputs(Materials.Helium.getGas(8000))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     OrePrefixes.wireGt01,
                     Materials.Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid,
                     15),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Enderium, 10),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Enderium, 10),
                 ItemList.Electric_Pump_LuV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 15))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 15))
             .fluidInputs(Materials.Helium.getGas(12000))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tetranaquadahdiindiumhexaplatiumosminid, 18),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Naquadah, 12),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tetranaquadahdiindiumhexaplatiumosminid, 18),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Naquadah, 12),
                 ItemList.Electric_Pump_ZPM.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 18))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 18))
             .fluidInputs(Materials.Helium.getGas(16000))
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(TierEU.RECIPE_ZPM)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuvwire, 21),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Neutronium, 14),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuvwire, 21),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Neutronium, 14),
                 ItemList.Electric_Pump_UV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUV, 21))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUV, 21))
             .fluidInputs(Materials.Helium.getGas(20000))
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(TierEU.RECIPE_UV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuhvwire, 24),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Bedrockium, 16),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuhvwire, 24),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Bedrockium, 16),
                 ItemList.Electric_Pump_UHV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 24))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 24))
             .fluidInputs(Materials.Helium.getGas(24000))
             .duration(2 * MINUTES + 40 * SECONDS)
             .eut(TierEU.RECIPE_UHV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Pentacadmiummagnesiumhexaoxid, 3),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.StainlessSteel, 2),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Pentacadmiummagnesiumhexaoxid, 3),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.StainlessSteel, 2),
                 ItemList.Electric_Pump_MV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorMV, 3))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorMV, 3))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(4))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titaniumonabariumdecacoppereikosaoxid, 6),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Titanium, 4),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titaniumonabariumdecacoppereikosaoxid, 6),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Titanium, 4),
                 ItemList.Electric_Pump_HV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 6))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 6))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(8))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Uraniumtriplatinid, 9),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.TungstenSteel, 6),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Uraniumtriplatinid, 9),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.TungstenSteel, 6),
                 ItemList.Electric_Pump_EV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorEV, 9))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorEV, 9))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(12))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Vanadiumtriindinid, 12),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.NiobiumTitanium, 8),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Vanadiumtriindinid, 12),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.NiobiumTitanium, 8),
                 ItemList.Electric_Pump_IV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 12))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 12))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(16))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     OrePrefixes.wireGt01,
                     Materials.Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid,
                     15),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Enderium, 10),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Enderium, 10),
                 ItemList.Electric_Pump_LuV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 15))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 15))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(24))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tetranaquadahdiindiumhexaplatiumosminid, 18),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Naquadah, 12),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tetranaquadahdiindiumhexaplatiumosminid, 18),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Naquadah, 12),
                 ItemList.Electric_Pump_ZPM.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 18))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 18))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(32))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_ZPM)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuvwire, 21),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Neutronium, 14),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuvwire, 21),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Neutronium, 14),
                 ItemList.Electric_Pump_UV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUV, 21))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUV, 21))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(40))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_UV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuhvwire, 24),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Bedrockium, 16),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuhvwire, 24),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Bedrockium, 16),
                 ItemList.Electric_Pump_UHV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 24))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 24))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(48))
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(TierEU.RECIPE_UHV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEVBase, 27),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Infinity, 18),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEVBase, 27),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Infinity, 18),
                 ItemList.Electric_Pump_UEV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEV, 27))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEV, 27))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(56))
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(TierEU.RECIPE_UEV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUIVBase, 30L),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, MaterialsUEVplus.TranscendentMetal, 20L),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUIVBase, 30L),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, MaterialsUEVplus.TranscendentMetal, 20L),
                 ItemList.Electric_Pump_UIV.get(1L),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUIV, 30L))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUIV, 30L))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(68))
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(TierEU.RECIPE_UIV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMVBase, 33),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, MaterialsUEVplus.SpaceTime, 22),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMVBase, 33),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, MaterialsUEVplus.SpaceTime, 22),
                 ItemList.Electric_Pump_UMV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, 33))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, 33))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(72))
             .duration(2 * MINUTES + 40 * SECONDS)
             .eut(TierEU.RECIPE_UMV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Lead, 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Lead, 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.ULV_Coil.get(1))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Steel, 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Steel, 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.LV_Coil.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.SteelMagnetic, 1),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Aluminium, 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.SteelMagnetic, 1),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Aluminium, 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.MV_Coil.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.SteelMagnetic, 1),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.EnergeticAlloy, 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.SteelMagnetic, 1),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.EnergeticAlloy, 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.HV_Coil.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.NeodymiumMagnetic, 1),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.TungstenSteel, 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.NeodymiumMagnetic, 1),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.TungstenSteel, 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.EV_Coil.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.NeodymiumMagnetic, 1),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Iridium, 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.NeodymiumMagnetic, 1),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Iridium, 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.IV_Coil.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 1),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, ExternalMaterials.getRuridit(), 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 1),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, ExternalMaterials.getRuridit(), 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.LuV_Coil.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 1),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 1),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.ZPM_Coil.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_ZPM)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 1),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.ElectrumFlux, 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 1),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.ElectrumFlux, 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.UV_Coil.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_UV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 1),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 16),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 1),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 16),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.UHV_Coil.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_UHV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Wood, 6),
-                GT_Utility.getIntegratedCircuit(2))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Wood, 2))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Wood, 6),
+                GTUtility.getIntegratedCircuit(2))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Wood, 2))
             .fluidInputs(Materials.Glue.getFluid(10))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Wood, 3),
-                GT_Utility.getIntegratedCircuit(4))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Wood, 4))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Wood, 3),
+                GTUtility.getIntegratedCircuit(4))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Wood, 4))
             .fluidInputs(Materials.Glue.getFluid(20))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Wood, 1),
-                GT_Utility.getIntegratedCircuit(12))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.Wood, 6))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Wood, 1),
+                GTUtility.getIntegratedCircuit(12))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.pipeSmall, Materials.Wood, 6))
             .fluidInputs(Materials.Glue.getFluid(60))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4),
-                GT_OreDictUnificator.get(OrePrefixes.plateAlloy, Materials.Advanced, 4),
-                GT_OreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Diamond, 1),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4),
+                GTOreDictUnificator.get(OrePrefixes.plateAlloy, Materials.Advanced, 4),
+                GTOreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Diamond, 1),
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Ingot_IridiumAlloy.get(1))
             .duration(60 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1),
                 ItemList.Electric_Motor_MV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Steel, 1),
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Steel, 1),
                 new ItemStack(Blocks.iron_bars, 6),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Casing_Grate.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1),
                 ItemList.Electric_Motor_UV.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Iridium, 1),
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Iridium, 1),
                 ItemList.Component_Filter.get(8),
-                GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Iridium, 8))
+                GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Iridium, 8))
             .itemOutputs(ItemList.Casing_Vent_T2.get(1))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
                 new ItemStack(Items.coal, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.torch, 4))
             .duration(2 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 2),
-                GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Steel, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 2),
+                GTOreDictUnificator.get(OrePrefixes.spring, Materials.Steel, 1))
             .itemOutputs(new ItemStack(Blocks.light_weighted_pressure_plate, 1))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 2),
-                GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Steel, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 2),
+                GTOreDictUnificator.get(OrePrefixes.spring, Materials.Steel, 1))
             .itemOutputs(new ItemStack(Blocks.heavy_weighted_pressure_plate, 1))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 7),
-                GT_Utility.getIntegratedCircuit(7))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 7),
+                GTUtility.getIntegratedCircuit(7))
             .itemOutputs(new ItemStack(Items.cauldron, 1))
             .duration(35 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("ironFence", 1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("ironFence", 1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 3),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 3),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(new ItemStack(Blocks.iron_bars, 4))
             .duration(15 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 7),
-                GT_Utility.getIntegratedCircuit(7))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 7),
+                GTUtility.getIntegratedCircuit(7))
             .itemOutputs(new ItemStack(Items.cauldron, 1))
             .duration(35 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("ironFence", 1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("ironFence", 1))
             .duration(5 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 3),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 3),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(new ItemStack(Blocks.iron_bars, 4))
             .duration(15 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 3),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 3),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(new ItemStack(Blocks.fence, 1))
             .duration(15 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Iron, 2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTOreDictUnificator.get(OrePrefixes.ring, Materials.Iron, 2))
             .itemOutputs(new ItemStack(Blocks.tripwire_hook, 1))
             .duration(20 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_OreDictUnificator.get(OrePrefixes.ring, Materials.WroughtIron, 2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTOreDictUnificator.get(OrePrefixes.ring, Materials.WroughtIron, 2))
             .itemOutputs(new ItemStack(Blocks.tripwire_hook, 1))
             .duration(20 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 3),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 3),
                 new ItemStack(Items.string, 3, 32767))
             .itemOutputs(new ItemStack(Items.bow, 1))
             .duration(20 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 3),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 3),
                 ItemList.Component_Minecart_Wheels_Iron.get(2))
             .itemOutputs(new ItemStack(Items.minecart, 1))
             .duration(5 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 3),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 3),
                 ItemList.Component_Minecart_Wheels_Iron.get(2))
             .itemOutputs(new ItemStack(Items.minecart, 1))
             .duration(4 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 3),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 3),
                 ItemList.Component_Minecart_Wheels_Steel.get(2))
             .itemOutputs(new ItemStack(Items.minecart, 1))
             .duration(5 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Iron, 2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 1),
+                GTOreDictUnificator.get(OrePrefixes.ring, Materials.Iron, 2))
             .itemOutputs(ItemList.Component_Minecart_Wheels_Iron.get(1))
             .duration(5 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.ring, Materials.WroughtIron, 2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 1),
+                GTOreDictUnificator.get(OrePrefixes.ring, Materials.WroughtIron, 2))
             .itemOutputs(ItemList.Component_Minecart_Wheels_Iron.get(1))
             .duration(4 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Steel, 2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 1),
+                GTOreDictUnificator.get(OrePrefixes.ring, Materials.Steel, 2))
             .itemOutputs(ItemList.Component_Minecart_Wheels_Steel.get(1))
             .duration(3 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.minecart, 1), new ItemStack(Blocks.hopper, 1, 32767))
             .itemOutputs(new ItemStack(Items.hopper_minecart, 1))
             .duration(20 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.minecart, 1), new ItemStack(Blocks.tnt, 1, 32767))
             .itemOutputs(new ItemStack(Items.tnt_minecart, 1))
             .duration(20 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.minecart, 1), new ItemStack(Blocks.chest, 1, 32767))
             .itemOutputs(new ItemStack(Items.chest_minecart, 1))
             .duration(20 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.minecart, 1), new ItemStack(Blocks.trapped_chest, 1, 32767))
             .itemOutputs(new ItemStack(Items.chest_minecart, 1))
             .duration(20 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.minecart, 1), new ItemStack(Blocks.furnace, 1, 32767))
             .itemOutputs(new ItemStack(Items.furnace_minecart, 1))
             .duration(20 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.tripwire_hook, 1), new ItemStack(Blocks.chest, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.trapped_chest, 1))
             .duration(10 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.stone, 1, 0), GT_Utility.getIntegratedCircuit(4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Blocks.stone, 1, 0), GTUtility.getIntegratedCircuit(4))
             .itemOutputs(new ItemStack(Blocks.stonebrick, 1, 0))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.sandstone, 1, 0), GT_Utility.getIntegratedCircuit(23))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Blocks.sandstone, 1, 0), GTUtility.getIntegratedCircuit(23))
             .itemOutputs(new ItemStack(Blocks.sandstone, 1, 2))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.sandstone, 1, 1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Blocks.sandstone, 1, 1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Blocks.sandstone, 1, 0))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.sandstone, 1, 2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Blocks.sandstone, 1, 2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Blocks.sandstone, 1, 0))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 8),
-                GT_Utility.getIntegratedCircuit(8))
-            .itemOutputs(GT_ModHandler.getIC2Item("machine", 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 8),
+                GTUtility.getIntegratedCircuit(8))
+            .itemOutputs(GTModHandler.getIC2Item("machine", 1))
             .duration(1 * SECONDS + 5 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 8),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 8),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.Casing_ULV.get(1))
             .duration(1 * SECONDS + 5 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 8),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 8),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.Casing_LV.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 8),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 8),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.Casing_MV.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 8),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 8),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.Casing_HV.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 8),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 8),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.Casing_EV.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 8),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 8),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.Casing_IV.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, ExternalMaterials.getRhodiumPlatedPalladium(), 8),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.plate, ExternalMaterials.getRhodiumPlatedPalladium(), 8),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.Casing_LuV.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 8),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 8),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.Casing_ZPM.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 8),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 8),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.Casing_UV.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 8),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 8),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.Casing_MAX.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Invar, 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Invar, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Invar, 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Invar, 1))
             .itemOutputs(ItemList.Casing_HeatProof.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Casing_SolidSteel.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1))
             .itemOutputs(ItemList.Casing_FrostProof.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1))
             .itemOutputs(ItemList.Casing_RobustTungstenSteel.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1))
             .itemOutputs(ItemList.Casing_CleanStainlessSteel.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1))
             .itemOutputs(ItemList.Casing_StableTitanium.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmiridium, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmiridium, 1))
             .itemOutputs(ItemList.Casing_MiningOsmiridium.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1))
             .itemOutputs(ItemList.Casing_MiningNeutronium.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackPlutonium, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackPlutonium, 1))
             .itemOutputs(ItemList.Casing_MiningBlackPlutonium.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 4), ItemList.Casing_LuV.get(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 4), ItemList.Casing_LuV.get(1))
             .itemOutputs(ItemList.Casing_Fusion.get(1))
             .fluidInputs(Materials.HSSG.getMolten(288))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Americium, 4),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Americium, 4),
                 ItemList.Casing_Fusion.get(1))
             .itemOutputs(ItemList.Casing_Fusion2.get(1))
             .fluidInputs(Materials.NaquadahAlloy.getMolten(288))
@@ -2631,93 +2623,93 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Magnalium, 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlueSteel, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Magnalium, 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlueSteel, 1))
             .itemOutputs(ItemList.Casing_Turbine.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 6),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 6),
                 ItemList.Casing_Turbine.get(1))
             .itemOutputs(ItemList.Casing_Turbine1.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6),
                 ItemList.Casing_Turbine.get(1))
             .itemOutputs(ItemList.Casing_Turbine2.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6),
                 ItemList.Casing_Turbine.get(1))
             .itemOutputs(ItemList.Casing_Turbine3.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 6), ItemList.Casing_Turbine.get(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 6), ItemList.Casing_Turbine.get(1))
             .itemOutputs(ItemList.Casing_TurbineGasAdvanced.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Casing_SolidSteel.get(1), GT_Utility.getIntegratedCircuit(6))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Casing_SolidSteel.get(1), GTUtility.getIntegratedCircuit(6))
             .itemOutputs(ItemList.Casing_Chemically_Inert.get(1))
             .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(216))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1))
             .itemOutputs(ItemList.Casing_Advanced_Iridium.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Lead, 2), ItemList.Casing_ULV.get(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Lead, 2), ItemList.Casing_ULV.get(1))
             .itemOutputs(ItemList.Hull_ULV.get(1))
             .fluidInputs(Materials.Plastic.getMolten(288))
             .duration(1 * SECONDS + 5 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 2), ItemList.Casing_LV.get(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 2), ItemList.Casing_LV.get(1))
             .itemOutputs(ItemList.Hull_LV.get(1))
             .fluidInputs(Materials.Plastic.getMolten(288))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Copper, 2), ItemList.Casing_MV.get(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Copper, 2), ItemList.Casing_MV.get(1))
             .itemOutputs(ItemList.Hull_MV.get(1))
             .fluidInputs(Materials.Plastic.getMolten(288))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnnealedCopper, 2),
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnnealedCopper, 2),
                 ItemList.Casing_MV.get(1))
             .itemOutputs(ItemList.Hull_MV.get(1))
             .fluidInputs(Materials.Plastic.getMolten(288))
@@ -2725,17 +2717,17 @@ public class AssemblerRecipes implements Runnable {
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 2), ItemList.Casing_HV.get(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 2), ItemList.Casing_HV.get(1))
             .itemOutputs(ItemList.Hull_HV.get(1))
             .fluidInputs(Materials.Plastic.getMolten(288))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 2),
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 2),
                 ItemList.Casing_EV.get(1))
             .itemOutputs(ItemList.Hull_EV.get(1))
             .fluidInputs(Materials.Plastic.getMolten(288))
@@ -2743,9 +2735,9 @@ public class AssemblerRecipes implements Runnable {
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 2),
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 2),
                 ItemList.Casing_IV.get(1))
             .itemOutputs(ItemList.Hull_IV.get(1))
             .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(288))
@@ -2753,9 +2745,9 @@ public class AssemblerRecipes implements Runnable {
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.VanadiumGallium, 2),
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.VanadiumGallium, 2),
                 ItemList.Casing_LuV.get(1))
             .itemOutputs(ItemList.Hull_LuV.get(1))
             .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(288))
@@ -2763,9 +2755,9 @@ public class AssemblerRecipes implements Runnable {
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 2),
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 2),
                 ItemList.Casing_ZPM.get(1))
             .itemOutputs(ItemList.Hull_ZPM.get(1))
             .fluidInputs(Materials.Polybenzimidazole.getMolten(288))
@@ -2773,9 +2765,9 @@ public class AssemblerRecipes implements Runnable {
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 2),
+                GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 2),
                 ItemList.Casing_UV.get(1))
             .itemOutputs(ItemList.Hull_UV.get(1))
             .fluidInputs(Materials.Polybenzimidazole.getMolten(288))
@@ -2783,9 +2775,9 @@ public class AssemblerRecipes implements Runnable {
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUV, 2),
+                GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUV, 2),
                 ItemList.Casing_MAX.get(1))
             .itemOutputs(ItemList.Hull_MAX.get(1))
             .fluidInputs(Materials.Polybenzimidazole.getMolten(288))
@@ -2793,491 +2785,491 @@ public class AssemblerRecipes implements Runnable {
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 1),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 1))
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 1),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 1))
             .itemOutputs(ItemList.Battery_Hull_LV.get(1))
             .fluidInputs(Materials.Plastic.getMolten(144))
             .duration(4 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Copper, 2),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 3))
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Copper, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 3))
             .itemOutputs(ItemList.Battery_Hull_MV.get(1))
             .fluidInputs(Materials.Plastic.getMolten(432))
             .duration(16 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnnealedCopper, 2),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 3))
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnnealedCopper, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 3))
             .itemOutputs(ItemList.Battery_Hull_MV.get(1))
             .fluidInputs(Materials.Plastic.getMolten(432))
             .duration(16 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 4),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 9))
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 4),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.BatteryAlloy, 9))
             .itemOutputs(ItemList.Battery_Hull_HV.get(1))
             .fluidInputs(Materials.Plastic.getMolten(1296))
             .duration(1 * MINUTES + 4 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.string, 4, 32767), new ItemStack(Items.slime_ball, 1, 32767))
             .itemOutputs(new ItemStack(Items.lead, 2))
             .duration(2 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("batPack", 1L, 32767), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("batPack", 1L, 32767), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.IC2_ReBattery.get(6))
             .duration(40 * SECONDS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("carbonFiber", 2), GT_Utility.getIntegratedCircuit(2))
-            .itemOutputs(GT_ModHandler.getIC2Item("carbonMesh", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("carbonFiber", 2), GTUtility.getIntegratedCircuit(2))
+            .itemOutputs(GTModHandler.getIC2Item("carbonMesh", 1))
             .duration(8 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 5),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 5),
                 new ItemStack(Blocks.chest, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.hopper))
             .duration(8 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 5),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 5),
                 new ItemStack(Blocks.trapped_chest, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.hopper))
             .duration(8 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 5),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 5),
                 new ItemStack(Blocks.chest, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.hopper))
             .duration(8 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 5),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 5),
                 new ItemStack(Blocks.trapped_chest, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.hopper))
             .duration(8 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.gear, Materials.CobaltBrass, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1))
+                GTOreDictUnificator.get(OrePrefixes.gear, Materials.CobaltBrass, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1))
             .itemOutputs(ItemList.Component_Sawblade_Diamond.get(1))
             .duration(16 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1))
             .itemOutputs(new ItemStack(Blocks.redstone_torch, 1))
             .duration(1 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
             .itemOutputs(new ItemStack(Blocks.torch, 2))
             .duration(2 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
             .itemOutputs(new ItemStack(Blocks.torch, 6))
             .duration(2 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1), ItemList.IC2_Resin.get(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1), ItemList.IC2_Resin.get(1))
             .itemOutputs(new ItemStack(Blocks.torch, 6))
             .duration(2 * SECONDS)
             .eut(20)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.wooden_sword, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Stone, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Stone, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.stone_sword, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Iron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Iron, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.iron_sword, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Gold, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Gold, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.golden_sword, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Diamond, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Diamond, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.diamond_sword, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Bronze, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Bronze, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Tool_Sword_Bronze.getUndamaged(1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Steel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadSword, Materials.Steel, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Tool_Sword_Steel.getUndamaged(1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.wooden_pickaxe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Stone, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Stone, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.stone_pickaxe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Iron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Iron, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.iron_pickaxe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Gold, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Gold, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.golden_pickaxe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Diamond, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Diamond, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.diamond_pickaxe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Bronze, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Bronze, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Tool_Pickaxe_Bronze.getUndamaged(1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Steel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadPickaxe, Materials.Steel, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Tool_Pickaxe_Steel.getUndamaged(1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.wooden_shovel, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Stone, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Stone, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.stone_shovel, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Iron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Iron, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.iron_shovel, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Gold, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Gold, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.golden_shovel, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Diamond, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Diamond, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.diamond_shovel, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Bronze, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Bronze, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Tool_Shovel_Bronze.getUndamaged(1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Steel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadShovel, Materials.Steel, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Tool_Shovel_Steel.getUndamaged(1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.wooden_axe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Stone, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Stone, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.stone_axe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Iron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Iron, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.iron_axe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Gold, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Gold, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.golden_axe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Diamond, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Diamond, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.diamond_axe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Bronze, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Bronze, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Tool_Axe_Bronze.getUndamaged(1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Steel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadAxe, Materials.Steel, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Tool_Axe_Steel.getUndamaged(1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Wood, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Wood, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.wooden_hoe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Stone, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Stone, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.stone_hoe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Iron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Iron, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.iron_hoe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Gold, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Gold, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.golden_hoe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Diamond, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Diamond, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.diamond_hoe, 1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Bronze, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Bronze, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Tool_Hoe_Bronze.getUndamaged(1))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Steel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.toolHeadHoe, Materials.Steel, 1),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Wood, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Tool_Hoe_Steel.getUndamaged(1))
             .duration(5 * SECONDS)
             .eut(16)
@@ -3285,246 +3277,246 @@ public class AssemblerRecipes implements Runnable {
 
         // fuel rod assembler recipes
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.ThoriumCell_1.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.ThoriumCell_2.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.ThoriumCell_1.get(4),
-                GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Steel, 6),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Steel, 6),
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.ThoriumCell_4.get(1))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.ThoriumCell_2.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.ThoriumCell_4.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Uraniumcell_1.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Uraniumcell_2.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Uraniumcell_1.get(4),
-                GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Steel, 6),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Steel, 6),
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.Uraniumcell_4.get(1))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Uraniumcell_2.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.Uraniumcell_4.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Moxcell_1.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Moxcell_2.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Moxcell_1.get(4),
-                GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Steel, 6),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Steel, 6),
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.Moxcell_4.get(1))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Moxcell_2.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 4),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.Moxcell_4.get(1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.NaquadahCell_1.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 4),
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.NaquadahCell_2.get(1))
             .duration(5 * SECONDS)
             .eut(400)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.NaquadahCell_1.get(4),
-                GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenSteel, 6),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenSteel, 6),
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.NaquadahCell_4.get(1))
             .duration(7 * SECONDS + 10 * TICKS)
             .eut(400)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.NaquadahCell_2.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 4),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 4),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.NaquadahCell_4.get(1))
             .duration(5 * SECONDS)
             .eut(400)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.MNqCell_1.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 4),
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.MNqCell_2.get(1))
             .duration(5 * SECONDS)
             .eut(400)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.MNqCell_1.get(4),
-                GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenSteel, 6),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenSteel, 6),
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.MNqCell_4.get(1))
             .duration(7 * SECONDS + 10 * TICKS)
             .eut(400)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.MNqCell_2.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 4),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 4),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.MNqCell_4.get(1))
             .duration(5 * SECONDS)
             .eut(400)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Neutronium, 8),
-                GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Iridium, 4))
+                GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Neutronium, 8),
+                GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Iridium, 4))
             .itemOutputs(ItemList.neutroniumHeatCapacitor.get(1))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_ZPM)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 Materials.NaquadahAlloy.getPlates(8),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 1))
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 1))
             .itemOutputs(ItemList.RadiantNaquadahAlloyCasing.get(1))
             .duration(10 * TICKS)
             .eut(400000)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.KevlarFiber.get(8), GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.KevlarFiber.get(8), GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.WovenKevlar.get(1))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1),
                 ItemList.NC_SensorKit.get(1),
                 ItemList.Emitter_EV.get(1),
                 getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1, 28),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Cover_Metrics_Transmitter.get(1))
             .fluidInputs(Materials.SolderingAlloy.getMolten(INGOTS))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        ItemStack[] plates = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L) };
+        ItemStack[] plates = new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
+            GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
+            GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L) };
 
         for (Materials tMat : solderingMats) {
             int tMultiplier = tMat.contains(SubTag.SOLDERING_MATERIAL_GOOD) ? 1
                 : tMat.contains(SubTag.SOLDERING_MATERIAL_BAD) ? 4 : 2;
 
             for (ItemStack tPlate : plates) {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(new ItemStack(Blocks.lever, 1, 32767), tPlate, GT_Utility.getIntegratedCircuit(1))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(new ItemStack(Blocks.lever, 1, 32767), tPlate, GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.Cover_Controller.get(1))
                     .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
                     .duration(40 * SECONDS)
                     .eut(16)
                     .addTo(assemblerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         new ItemStack(Blocks.redstone_torch, 1, 32767),
                         tPlate,
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.Cover_ActivityDetector.get(1))
                     .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
                     .duration(40 * SECONDS)
                     .eut(16)
                     .addTo(assemblerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         new ItemStack(Blocks.heavy_weighted_pressure_plate, 1, 32767),
                         tPlate,
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.Cover_FluidDetector.get(1))
                     .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
                     .duration(40 * SECONDS)
                     .eut(16)
                     .addTo(assemblerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         new ItemStack(Blocks.light_weighted_pressure_plate, 1, 32767),
                         tPlate,
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.Cover_ItemDetector.get(1))
                     .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
                     .duration(40 * SECONDS)
                     .eut(16)
                     .addTo(assemblerRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_ModHandler.getIC2Item("ecMeter", 1), tPlate, GT_Utility.getIntegratedCircuit(1))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTModHandler.getIC2Item("ecMeter", 1), tPlate, GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.Cover_EnergyDetector.get(1))
                     .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
                     .duration(40 * SECONDS)
@@ -3534,11 +3526,11 @@ public class AssemblerRecipes implements Runnable {
 
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeHuge, MaterialsUEVplus.TranscendentMetal, 1),
-                GT_OreDictUnificator.get(OrePrefixes.foil, Materials.SuperconductorUIVBase, 64),
-                ALLOY.QUANTUM.getPlate(8),
+                GTOreDictUnificator.get(OrePrefixes.pipeHuge, MaterialsUEVplus.TranscendentMetal, 1),
+                GTOreDictUnificator.get(OrePrefixes.foil, Materials.SuperconductorUIVBase, 64),
+                MaterialsAlloy.QUANTUM.getPlate(8),
                 ItemList.Electric_Pump_UIV.get(1))
             .fluidInputs(MaterialsUEVplus.PhononMedium.getFluid(100))
             .itemOutputs(ItemList.Thermal_Superconductor.get(1))
@@ -3546,12 +3538,12 @@ public class AssemblerRecipes implements Runnable {
             .eut(TierEU.RECIPE_UIV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Thermal_Superconductor.get(2),
-                ALLOY.QUANTUM.getPlate(12),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.SuperconductorUIVBase, 8),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, MaterialsUEVplus.SixPhasedCopper, 3),
+                MaterialsAlloy.QUANTUM.getPlate(12),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.SuperconductorUIVBase, 8),
+                GTOreDictUnificator.get(OrePrefixes.rotor, MaterialsUEVplus.SixPhasedCopper, 3),
                 ItemList.Field_Generator_UEV.get(1))
             .fluidInputs(MaterialsUEVplus.PhononMedium.getFluid(500))
             .itemOutputs(ItemList.Relativistic_Heat_Capacitor.get(1))
@@ -3566,44 +3558,44 @@ public class AssemblerRecipes implements Runnable {
     public void loadInputBusesRecipes() {
         // ULV input bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
                     getModItem(NewHorizonsCoreMod.ID, "BabyChest", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_ULV.get(1))
                 .fluidInputs(Materials.Glue.getFluid(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
                     getModItem(NewHorizonsCoreMod.ID, "BabyChest", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_ULV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
                     getModItem(NewHorizonsCoreMod.ID, "BabyChest", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_ULV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * EIGHTH_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
                     getModItem(NewHorizonsCoreMod.ID, "BabyChest", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_ULV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(4))
                 .duration(24 * SECONDS)
@@ -3613,32 +3605,32 @@ public class AssemblerRecipes implements Runnable {
 
         // LV input bus
         {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_LV.get(1))
                 .fluidInputs(Materials.Glue.getFluid(5 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_LV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_LV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_LV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(9))
                 .duration(24 * SECONDS)
@@ -3648,33 +3640,33 @@ public class AssemblerRecipes implements Runnable {
 
         // MV input bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 3),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_MV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 3),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_MV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 3),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_MV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * EIGHTH_INGOT))
                 .duration(24 * SECONDS)
@@ -3684,33 +3676,33 @@ public class AssemblerRecipes implements Runnable {
 
         // HV input bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 0),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_HV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(3 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 0),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_HV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 0),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_HV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * QUARTER_INGOT))
                 .duration(24 * SECONDS)
@@ -3720,22 +3712,22 @@ public class AssemblerRecipes implements Runnable {
 
         // EV input bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_EV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_EV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(4 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_EV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_EV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_EV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
@@ -3745,22 +3737,22 @@ public class AssemblerRecipes implements Runnable {
 
         // IV input bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_IV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_IV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(8 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_IV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_IV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_IV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
@@ -3770,22 +3762,22 @@ public class AssemblerRecipes implements Runnable {
 
         // LuV input bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LuV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 2),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_LuV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(16 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LuV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LuV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 2),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_LuV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
@@ -3795,11 +3787,11 @@ public class AssemblerRecipes implements Runnable {
 
         // ZPM input bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ZPM.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 2, 5),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_ZPM.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(4 * INGOTS))
                 .duration(24 * SECONDS)
@@ -3809,11 +3801,11 @@ public class AssemblerRecipes implements Runnable {
 
         // UV input bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_UV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 2, 6),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_UV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(8 * INGOTS))
                 .duration(24 * SECONDS)
@@ -3823,11 +3815,11 @@ public class AssemblerRecipes implements Runnable {
 
         // UHV input bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MAX.get(1),
                     getModItem(AvaritiaAddons.ID, "CompressedChest", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_Bus_MAX.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(16 * INGOTS))
                 .duration(24 * SECONDS)
@@ -3852,44 +3844,44 @@ public class AssemblerRecipes implements Runnable {
 
         // ULV output bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
                     getModItem(NewHorizonsCoreMod.ID, "BabyChest", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_ULV.get(1))
                 .fluidInputs(Materials.Glue.getFluid(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
                     getModItem(NewHorizonsCoreMod.ID, "BabyChest", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_ULV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
                     getModItem(NewHorizonsCoreMod.ID, "BabyChest", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_ULV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * EIGHTH_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
                     getModItem(NewHorizonsCoreMod.ID, "BabyChest", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_ULV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(4))
                 .duration(24 * SECONDS)
@@ -3899,32 +3891,32 @@ public class AssemblerRecipes implements Runnable {
 
         // LV output bus
         {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GT_Utility.getIntegratedCircuit(2))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_LV.get(1))
                 .fluidInputs(Materials.Glue.getFluid(5 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GT_Utility.getIntegratedCircuit(2))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_LV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GT_Utility.getIntegratedCircuit(2))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_LV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GT_Utility.getIntegratedCircuit(2))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_LV.get(1), new ItemStack(Blocks.chest), GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_LV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(9))
                 .duration(24 * SECONDS)
@@ -3938,33 +3930,33 @@ public class AssemblerRecipes implements Runnable {
 
         // MV output bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 3),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_MV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 3),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_MV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 3),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_MV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * EIGHTH_INGOT))
                 .duration(24 * SECONDS)
@@ -3974,33 +3966,33 @@ public class AssemblerRecipes implements Runnable {
 
         // HV output bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 0),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_HV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(3 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 0),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_HV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 0),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_HV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * QUARTER_INGOT))
                 .duration(24 * SECONDS)
@@ -4010,22 +4002,22 @@ public class AssemblerRecipes implements Runnable {
 
         // EV output bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_EV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 4),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_EV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(4 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_EV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_EV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 4),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_EV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
@@ -4035,22 +4027,22 @@ public class AssemblerRecipes implements Runnable {
 
         // IV output bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_IV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_IV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(8 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_IV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_IV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_IV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4060,22 +4052,22 @@ public class AssemblerRecipes implements Runnable {
 
         // LuV output bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LuV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 2),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_LuV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(16 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LuV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LuV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 1, 2),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_LuV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4085,11 +4077,11 @@ public class AssemblerRecipes implements Runnable {
 
         // ZPM output bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ZPM.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 2, 5),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_ZPM.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(4 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4099,11 +4091,11 @@ public class AssemblerRecipes implements Runnable {
 
         // UV output bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_UV.get(1),
                     getModItem(IronChests.ID, "BlockIronChest", 2, 6),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_UV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(8 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4117,11 +4109,11 @@ public class AssemblerRecipes implements Runnable {
 
         // UHV output bus
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MAX.get(1),
                     getModItem(AvaritiaAddons.ID, "CompressedChest", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_Bus_MAX.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(16 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4136,44 +4128,44 @@ public class AssemblerRecipes implements Runnable {
     public void loadInputHatchesRecipes() {
         // ULV input hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_ULV.get(1))
                 .fluidInputs(Materials.Glue.getFluid(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_ULV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_ULV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * EIGHTH_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_ULV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(4))
                 .duration(24 * SECONDS)
@@ -4192,44 +4184,44 @@ public class AssemblerRecipes implements Runnable {
 
         // LV input hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LV.get(1),
                     getModItem(BuildCraftFactory.ID, "tankBlock", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_LV.get(1))
                 .fluidInputs(Materials.Glue.getFluid(5 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LV.get(1),
                     getModItem(BuildCraftFactory.ID, "tankBlock", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_LV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LV.get(1),
                     getModItem(BuildCraftFactory.ID, "tankBlock", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_LV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LV.get(1),
                     getModItem(BuildCraftFactory.ID, "tankBlock", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_LV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(9))
                 .duration(24 * SECONDS)
@@ -4243,33 +4235,33 @@ public class AssemblerRecipes implements Runnable {
 
         // MV input hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronTanks.ID, "copperTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_MV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronTanks.ID, "copperTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_MV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronTanks.ID, "copperTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_MV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * EIGHTH_INGOT))
                 .duration(24 * SECONDS)
@@ -4279,33 +4271,33 @@ public class AssemblerRecipes implements Runnable {
 
         // HV input hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronTanks.ID, "ironTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_HV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(3 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronTanks.ID, "ironTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_HV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronTanks.ID, "ironTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_HV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * QUARTER_INGOT))
                 .duration(24 * SECONDS)
@@ -4315,22 +4307,22 @@ public class AssemblerRecipes implements Runnable {
 
         // EV input hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_EV.get(1),
                     getModItem(IronTanks.ID, "silverTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_EV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(4 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_EV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_EV.get(1),
                     getModItem(IronTanks.ID, "silverTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_EV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
@@ -4340,22 +4332,22 @@ public class AssemblerRecipes implements Runnable {
 
         // IV input hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_IV.get(1),
                     getModItem(IronTanks.ID, "goldTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_IV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(8 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_IV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_IV.get(1),
                     getModItem(IronTanks.ID, "goldTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_IV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4365,22 +4357,22 @@ public class AssemblerRecipes implements Runnable {
 
         // LuV input hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LuV.get(1),
                     getModItem(IronTanks.ID, "diamondTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_LuV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(16 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LuV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LuV.get(1),
                     getModItem(IronTanks.ID, "diamondTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_LuV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4390,11 +4382,11 @@ public class AssemblerRecipes implements Runnable {
 
         // ZPM input hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ZPM.get(1),
                     getModItem(IronTanks.ID, "obsidianTank", 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_ZPM.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(4 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4404,8 +4396,8 @@ public class AssemblerRecipes implements Runnable {
 
         // UV input hatch
         {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_UV.get(1), ItemList.Super_Tank_LV.get(1), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_UV.get(1), ItemList.Super_Tank_LV.get(1), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_UV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(8 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4415,8 +4407,8 @@ public class AssemblerRecipes implements Runnable {
 
         // UHV input hatch
         {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_MAX.get(1), ItemList.Super_Tank_MV.get(1), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_MAX.get(1), ItemList.Super_Tank_MV.get(1), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Hatch_Input_UHV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(16 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4431,44 +4423,44 @@ public class AssemblerRecipes implements Runnable {
     public void loadOutputHatchesRecipes() {
         // ULV output hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_ULV.get(1))
                 .fluidInputs(Materials.Glue.getFluid(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_ULV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_ULV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * EIGHTH_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_ULV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ULV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1),
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_ULV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(4))
                 .duration(24 * SECONDS)
@@ -4487,44 +4479,44 @@ public class AssemblerRecipes implements Runnable {
 
         // LV output hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LV.get(1),
                     getModItem(BuildCraftFactory.ID, "tankBlock", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_LV.get(1))
                 .fluidInputs(Materials.Glue.getFluid(5 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LV.get(1),
                     getModItem(BuildCraftFactory.ID, "tankBlock", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_LV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LV.get(1),
                     getModItem(BuildCraftFactory.ID, "tankBlock", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_LV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LV.get(1),
                     getModItem(BuildCraftFactory.ID, "tankBlock", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_LV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(9))
                 .duration(24 * SECONDS)
@@ -4538,33 +4530,33 @@ public class AssemblerRecipes implements Runnable {
 
         // MV output hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronTanks.ID, "copperTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_MV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronTanks.ID, "copperTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_MV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_MV.get(1),
                     getModItem(IronTanks.ID, "copperTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_MV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * EIGHTH_INGOT))
                 .duration(24 * SECONDS)
@@ -4574,33 +4566,33 @@ public class AssemblerRecipes implements Runnable {
 
         // HV output hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronTanks.ID, "ironTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_HV.get(1))
                 .fluidInputs(Materials.Plastic.getMolten(3 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronTanks.ID, "ironTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_HV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_HV.get(1),
                     getModItem(IronTanks.ID, "ironTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_HV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * QUARTER_INGOT))
                 .duration(24 * SECONDS)
@@ -4610,22 +4602,22 @@ public class AssemblerRecipes implements Runnable {
 
         // EV output hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_EV.get(1),
                     getModItem(IronTanks.ID, "silverTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_EV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(4 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_EV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_EV.get(1),
                     getModItem(IronTanks.ID, "silverTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_EV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * HALF_INGOT))
                 .duration(24 * SECONDS)
@@ -4635,22 +4627,22 @@ public class AssemblerRecipes implements Runnable {
 
         // IV output hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_IV.get(1),
                     getModItem(IronTanks.ID, "goldTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_IV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(8 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_IV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_IV.get(1),
                     getModItem(IronTanks.ID, "goldTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_IV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(1 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4660,22 +4652,22 @@ public class AssemblerRecipes implements Runnable {
 
         // LuV output hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LuV.get(1),
                     getModItem(IronTanks.ID, "diamondTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_LuV.get(1))
                 .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(16 * INGOTS))
                 .duration(24 * SECONDS)
                 .eut(TierEU.RECIPE_LuV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_LuV.get(1),
                     getModItem(IronTanks.ID, "diamondTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_LuV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(2 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4685,11 +4677,11 @@ public class AssemblerRecipes implements Runnable {
 
         // ZPM output hatch
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Hull_ZPM.get(1),
                     getModItem(IronTanks.ID, "obsidianTank", 1),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_ZPM.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(4 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4699,8 +4691,8 @@ public class AssemblerRecipes implements Runnable {
 
         // UV output hatch
         {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_UV.get(1), ItemList.Super_Tank_LV.get(1), GT_Utility.getIntegratedCircuit(2))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_UV.get(1), ItemList.Super_Tank_LV.get(1), GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_UV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(8 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4710,8 +4702,8 @@ public class AssemblerRecipes implements Runnable {
 
         // UHV output hatch
         {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(ItemList.Hull_MAX.get(1), ItemList.Super_Tank_MV.get(1), GT_Utility.getIntegratedCircuit(2))
+            GTValues.RA.stdBuilder()
+                .itemInputs(ItemList.Hull_MAX.get(1), ItemList.Super_Tank_MV.get(1), GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(ItemList.Hatch_Output_UHV.get(1))
                 .fluidInputs(Materials.Polybenzimidazole.getMolten(16 * INGOTS))
                 .duration(24 * SECONDS)
@@ -4726,267 +4718,267 @@ public class AssemblerRecipes implements Runnable {
     private void withRailcraft() {
         if (!Railcraft.isModLoaded()) return;
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.stone_slab, 1, 0),
                 ItemList.RC_Rebar.get(1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.RC_Tie_Stone.get(1))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.stone_slab, 1, 7),
                 ItemList.RC_Rebar.get(1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.RC_Tie_Stone.get(1))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 3),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 3),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.RC_Rail_HS.get(16))
             .fluidInputs(Materials.Blaze.getMolten(216))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 3),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
-                GT_Utility.getIntegratedCircuit(9))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 3),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
+                GTUtility.getIntegratedCircuit(9))
             .itemOutputs(ItemList.RC_Rail_HS.get(8))
             .fluidInputs(Materials.ConductiveIron.getMolten(432))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 3),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
-                GT_Utility.getIntegratedCircuit(9))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 3),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
+                GTUtility.getIntegratedCircuit(9))
             .itemOutputs(ItemList.RC_Rail_HS.get(32))
             .fluidInputs(Materials.VibrantAlloy.getMolten(216))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 3),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
-                GT_Utility.getIntegratedCircuit(9))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 3),
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
+                GTUtility.getIntegratedCircuit(9))
             .itemOutputs(ItemList.RC_Rail_HS.get(64))
             .fluidInputs(Materials.CrystallineAlloy.getMolten(216))
             .duration(5 * SECONDS)
             .eut(48)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(3),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.RC_Rail_Adv.get(8))
             .fluidInputs(Materials.Redstone.getMolten(216))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(3),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.RC_Rail_Adv.get(16))
             .fluidInputs(Materials.RedAlloy.getMolten(216))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(3),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.RC_Rail_Adv.get(32))
             .fluidInputs(Materials.ConductiveIron.getMolten(216))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(3),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
-                GT_Utility.getIntegratedCircuit(8))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Electrum, 3),
+                GTUtility.getIntegratedCircuit(8))
             .itemOutputs(ItemList.RC_Rail_Adv.get(64))
             .fluidInputs(Materials.VibrantAlloy.getMolten(216))
             .duration(5 * SECONDS)
             .eut(48)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Copper, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Copper, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.RC_Rail_Electric.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.AnnealedCopper, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.AnnealedCopper, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.RC_Rail_Electric.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Gold, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Gold, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.RC_Rail_Electric.get(2))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Electrum, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Electrum, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.RC_Rail_Electric.get(4))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titanium, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titanium, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.RC_Rail_Electric.get(8))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.RC_Rail_Electric.get(16))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(48)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.HSSG, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.HSSG, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.RC_Rail_Electric.get(32))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(64)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Rail_Standard.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Naquadah, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Naquadah, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.RC_Rail_Electric.get(64))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(96)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Tie_Wood.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 1),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 1),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Wooden.get(8))
             .duration(6 * SECONDS + 13 * TICKS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Tie_Wood.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 1),
-                GT_Utility.getIntegratedCircuit(11))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 1),
+                GTUtility.getIntegratedCircuit(11))
             .itemOutputs(ItemList.RC_Rail_Wooden.get(8))
             .duration(6 * SECONDS + 13 * TICKS)
             .eut(4)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Tie_Wood.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 1),
-                GT_Utility.getIntegratedCircuit(11))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 1),
+                GTUtility.getIntegratedCircuit(11))
             .itemOutputs(ItemList.RC_Rail_Wooden.get(16))
             .duration(6 * SECONDS + 13 * TICKS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Tie_Wood.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.StainlessSteel, 1),
-                GT_Utility.getIntegratedCircuit(11))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.StainlessSteel, 1),
+                GTUtility.getIntegratedCircuit(11))
             .itemOutputs(ItemList.RC_Rail_Wooden.get(32))
             .duration(6 * SECONDS + 13 * TICKS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Tie_Wood.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 1),
-                GT_Utility.getIntegratedCircuit(11))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 1),
+                GTUtility.getIntegratedCircuit(11))
             .itemOutputs(ItemList.RC_Rail_Wooden.get(64))
             .duration(6 * SECONDS + 13 * TICKS)
             .eut(48)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.RC_Tie_Wood.get(32), GT_Utility.getIntegratedCircuit(20))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.RC_Tie_Wood.get(32), GTUtility.getIntegratedCircuit(20))
             .itemOutputs(ItemList.RC_Bed_Wood.get(24))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.RC_Tie_Wood.get(64), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.RC_Tie_Wood.get(64), GTUtility.getIntegratedCircuit(24))
             .itemOutputs(ItemList.RC_Bed_Wood.get(48))
             .duration(10 * SECONDS)
             .eut(48)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.RC_Tie_Stone.get(32), GT_Utility.getIntegratedCircuit(20))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.RC_Tie_Stone.get(32), GTUtility.getIntegratedCircuit(20))
             .itemOutputs(ItemList.RC_Bed_Stone.get(24))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.RC_Tie_Stone.get(64), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.RC_Tie_Stone.get(64), GTUtility.getIntegratedCircuit(24))
             .itemOutputs(ItemList.RC_Bed_Stone.get(48))
             .duration(10 * SECONDS)
             .eut(48)
@@ -5003,42 +4995,42 @@ public class AssemblerRecipes implements Runnable {
             tTagWoodB.setString("track", "railcraft:track.slow.boost");
             tRailWoodB.stackTagCompound = tTagWoodB;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.RC_Bed_Wood.get(1),
                     ItemList.RC_Rail_Wooden.get(6),
-                    GT_Utility.getIntegratedCircuit(21))
+                    GTUtility.getIntegratedCircuit(21))
                 .itemOutputs(tRailWood)
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
-                    GT_Utility.getIntegratedCircuit(22))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
+                    GTUtility.getIntegratedCircuit(22))
                 .itemOutputs(tRailWoodB)
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
         }
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.rail, 1, 0),
                 ItemList.RC_Rail_Adv.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
-                GT_Utility.getIntegratedCircuit(22))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(new ItemStack(Blocks.golden_rail, 16, 0))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Bed_Wood.get(1),
                 ItemList.RC_Rail_Standard.get(6),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(new ItemStack(Blocks.rail, 64, 0))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
@@ -5049,11 +5041,11 @@ public class AssemblerRecipes implements Runnable {
         tTagRe.setString("track", "railcraft:track.reinforced");
         tRailRe.stackTagCompound = tTagRe;
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Bed_Stone.get(1),
                 ItemList.RC_Rail_Reinforced.get(6),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(tRailRe)
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
@@ -5064,11 +5056,11 @@ public class AssemblerRecipes implements Runnable {
         tTagReB.setString("track", "railcraft:track.reinforced.boost");
         tRailReB.stackTagCompound = tTagReB;
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.copyAmount(2, tRailRe),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.copyAmount(2, tRailRe),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(tRailReB)
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
@@ -5079,11 +5071,11 @@ public class AssemblerRecipes implements Runnable {
         tTagEl.setString("track", "railcraft:track.electric");
         tRailEl.stackTagCompound = tTagEl;
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.RC_Bed_Stone.get(1),
                 ItemList.RC_Rail_Electric.get(6),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(tRailEl)
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
@@ -5095,11 +5087,11 @@ public class AssemblerRecipes implements Runnable {
             tTagHs.setString("track", "railcraft:track.speed");
             tRailHs.stackTagCompound = tTagHs;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.RC_Bed_Stone.get(1),
                     ItemList.RC_Rail_HS.get(6),
-                    GT_Utility.getIntegratedCircuit(21))
+                    GTUtility.getIntegratedCircuit(21))
                 .itemOutputs(tRailHs)
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
@@ -5110,11 +5102,11 @@ public class AssemblerRecipes implements Runnable {
         tTagHsB.setString("track", "railcraft:track.speed.boost");
         tRailHsB.stackTagCompound = tTagHsB;
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.copyAmount(2, tRailHs),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.copyAmount(2, tRailHs),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(tRailHsB)
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
@@ -5127,72 +5119,72 @@ public class AssemblerRecipes implements Runnable {
             tTagSS.setString("track", "railcraft:track.slow.switch");
             tRailSS.stackTagCompound = tTagSS;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.AnyIron, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.AnyIron, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailSS)
                 .duration(5 * SECONDS)
                 .eut(8)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Steel, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailSS))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Steel, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailSS))
                 .duration(5 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.StainlessSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailSS))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.StainlessSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailSS))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailSS))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailSS))
                 .duration(5 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.TungstenSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailSS))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.TungstenSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailSS))
                 .duration(5 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Iridium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailSS))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Iridium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailSS))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Osmium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailSS))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Osmium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailSS))
                 .duration(5 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
@@ -5204,72 +5196,72 @@ public class AssemblerRecipes implements Runnable {
             tTagSW.setString("track", "railcraft:track.slow.wye");
             tRailSW.stackTagCompound = tTagSW;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.AnyIron, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.AnyIron, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailSW)
                 .duration(5 * SECONDS)
                 .eut(8)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Steel, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailSW))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Steel, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailSW))
                 .duration(5 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.StainlessSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailSW))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.StainlessSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailSW))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailSW))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailSW))
                 .duration(5 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.TungstenSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailSW))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.TungstenSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailSW))
                 .duration(5 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Iridium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailSW))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Iridium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailSW))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Osmium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailSW))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Osmium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailSW))
                 .duration(5 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
@@ -5281,72 +5273,72 @@ public class AssemblerRecipes implements Runnable {
             tTagSJ.setString("track", "railcraft:track.slow.junction");
             tRailSJ.stackTagCompound = tTagSJ;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.AnyIron, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.AnyIron, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailSJ)
                 .duration(5 * SECONDS)
                 .eut(8)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailSJ))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailSJ))
                 .duration(5 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.StainlessSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailSJ))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.StainlessSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailSJ))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailSJ))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailSJ))
                 .duration(5 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.TungstenSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailSJ))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.TungstenSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailSJ))
                 .duration(5 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Iridium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailSJ))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Iridium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailSJ))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailWood),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Osmium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailSJ))
+                    GTUtility.copyAmount(2, tRailWood),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Osmium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailSJ))
                 .duration(5 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
@@ -5358,72 +5350,72 @@ public class AssemblerRecipes implements Runnable {
             tTagNS.setString("track", "railcraft:track.switch");
             tRailNS.stackTagCompound = tTagNS;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Steel, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Steel, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailNS)
                 .duration(10 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.StainlessSteel, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailNS))
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.StainlessSteel, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailNS))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailNS))
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailNS))
                 .duration(10 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.TungstenSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailNS))
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.TungstenSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailNS))
                 .duration(10 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Iridium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailNS))
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Iridium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailNS))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Osmium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailNS))
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Osmium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailNS))
                 .duration(10 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Neutronium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailNS))
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Neutronium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailNS))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -5436,72 +5428,72 @@ public class AssemblerRecipes implements Runnable {
             tTagNW.setString("track", "railcraft:track.wye");
             tRailNW.stackTagCompound = tTagNW;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Steel, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Steel, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailNW)
                 .duration(10 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.StainlessSteel, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailNW))
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.StainlessSteel, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailNW))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailNW))
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailNW))
                 .duration(10 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.TungstenSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailNW))
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.TungstenSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailNW))
                 .duration(10 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Iridium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailNW))
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Iridium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailNW))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Osmium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailNW))
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Osmium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailNW))
                 .duration(10 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Neutronium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailNW))
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Neutronium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailNW))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -5513,72 +5505,72 @@ public class AssemblerRecipes implements Runnable {
             tTagNJ.setString("track", "railcraft:track.junction");
             tRailNJ.stackTagCompound = tTagNJ;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailNJ)
                 .duration(10 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.StainlessSteel, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailNJ))
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.StainlessSteel, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailNJ))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailNJ))
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailNJ))
                 .duration(10 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.TungstenSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailNJ))
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.TungstenSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailNJ))
                 .duration(10 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Iridium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailNJ))
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Iridium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailNJ))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Osmium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailNJ))
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Osmium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailNJ))
                 .duration(10 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Blocks.rail, 2, 0),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailNJ))
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailNJ))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -5590,72 +5582,72 @@ public class AssemblerRecipes implements Runnable {
             tTagRS.setString("track", "railcraft:track.reinforced.switch");
             tRailRS.stackTagCompound = tTagRS;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Steel, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Steel, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailRS)
                 .duration(15 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.StainlessSteel, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailRS))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.StainlessSteel, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailRS))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailRS))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailRS))
                 .duration(15 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.TungstenSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailRS))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.TungstenSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailRS))
                 .duration(15 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Iridium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailRS))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Iridium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailRS))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Osmium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailRS))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Osmium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailRS))
                 .duration(15 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Neutronium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailRS))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Neutronium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailRS))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -5667,72 +5659,72 @@ public class AssemblerRecipes implements Runnable {
             tTagRW.setString("track", "railcraft:track.reinforced.wye");
             tRailRW.stackTagCompound = tTagRW;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Steel, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Steel, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailRW)
                 .duration(15 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.StainlessSteel, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailRW))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.StainlessSteel, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailRW))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailRW))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailRW))
                 .duration(15 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.TungstenSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailRW))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.TungstenSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailRW))
                 .duration(15 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Iridium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailRW))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Iridium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailRW))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Osmium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailRW))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Osmium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailRW))
                 .duration(15 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Neutronium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailRW))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Neutronium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailRW))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -5744,72 +5736,72 @@ public class AssemblerRecipes implements Runnable {
             tTagRJ.setString("track", "railcraft:track.reinforced.junction");
             tRailRJ.stackTagCompound = tTagRJ;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailRJ)
                 .duration(15 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.StainlessSteel, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailRJ))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.StainlessSteel, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailRJ))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailRJ))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailRJ))
                 .duration(15 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.TungstenSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailRJ))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.TungstenSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailRJ))
                 .duration(15 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Iridium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailRJ))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Iridium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailRJ))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Osmium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailRJ))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Osmium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailRJ))
                 .duration(15 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailRe),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailRJ))
+                    GTUtility.copyAmount(2, tRailRe),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailRJ))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -5821,72 +5813,72 @@ public class AssemblerRecipes implements Runnable {
             tTagRSSw.setString("track", "railcraft:track.speed.switch");
             tRailSSw.stackTagCompound = tTagRSSw;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Steel, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Steel, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailSSw)
                 .duration(20 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.StainlessSteel, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailSSw))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.StainlessSteel, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailSSw))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailSSw))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailSSw))
                 .duration(20 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.TungstenSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailSSw))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.TungstenSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailSSw))
                 .duration(20 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Iridium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailSSw))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Iridium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailSSw))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Osmium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailSSw))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Osmium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailSSw))
                 .duration(20 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Neutronium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailSSw))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Neutronium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailSSw))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -5898,72 +5890,72 @@ public class AssemblerRecipes implements Runnable {
             tTagRSWy.setString("track", "railcraft:track.speed.wye");
             tRailSWy.stackTagCompound = tTagRSWy;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Steel, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Steel, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailSWy)
                 .duration(20 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.StainlessSteel, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailSWy))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.StainlessSteel, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailSWy))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailSWy))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailSWy))
                 .duration(20 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.TungstenSteel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailSWy))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.TungstenSteel, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailSWy))
                 .duration(20 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Iridium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailSWy))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Iridium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailSWy))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Osmium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailSWy))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Osmium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailSWy))
                 .duration(20 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Neutronium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailSWy))
+                    GTUtility.copyAmount(2, tRailHs),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Neutronium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailSWy))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -5975,57 +5967,57 @@ public class AssemblerRecipes implements Runnable {
             tTagRSTt.setString("track", "railcraft:track.speed.transition");
             tRailSTt.stackTagCompound = tTagRSTt;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
+                    GTUtility.copyAmount(2, tRailHs),
                     ItemList.RC_Bed_Stone.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailSTt))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailSTt))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
+                    GTUtility.copyAmount(2, tRailHs),
                     ItemList.RC_Bed_Stone.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.ConductiveIron, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailSTt))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.ConductiveIron, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailSTt))
                 .duration(20 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
+                    GTUtility.copyAmount(2, tRailHs),
                     ItemList.RC_Bed_Stone.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.VibrantAlloy, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailSTt))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.VibrantAlloy, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailSTt))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
+                    GTUtility.copyAmount(2, tRailHs),
                     ItemList.RC_Bed_Stone.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CrystallineAlloy, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailSTt))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.CrystallineAlloy, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailSTt))
                 .duration(20 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailHs),
+                    GTUtility.copyAmount(2, tRailHs),
                     ItemList.RC_Bed_Stone.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.MelodicAlloy, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailSTt))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.MelodicAlloy, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailSTt))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -6037,72 +6029,72 @@ public class AssemblerRecipes implements Runnable {
             tTagES.setString("track", "railcraft:track.electric.switch");
             tRailES.stackTagCompound = tTagES;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Copper, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Copper, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailES)
                 .duration(20 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Gold, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailES))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Gold, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailES))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Electrum, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailES))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Electrum, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailES))
                 .duration(20 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailES))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailES))
                 .duration(20 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Platinum, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailES))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Platinum, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailES))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.VanadiumGallium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailES))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.VanadiumGallium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailES))
                 .duration(20 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.springSmall, Materials.Naquadah, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailES))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.springSmall, Materials.Naquadah, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailES))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -6114,72 +6106,72 @@ public class AssemblerRecipes implements Runnable {
             tTagEw.setString("track", "railcraft:track.electric.wye");
             tRailEw.stackTagCompound = tTagEw;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Copper, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Copper, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailEw)
                 .duration(20 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Gold, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailEw))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Gold, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailEw))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Electrum, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailEw))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Electrum, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailEw))
                 .duration(20 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailEw))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailEw))
                 .duration(20 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Platinum, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailEw))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Platinum, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailEw))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.VanadiumGallium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailEw))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.VanadiumGallium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailEw))
                 .duration(20 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Naquadah, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailEw))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Naquadah, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailEw))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -6191,72 +6183,72 @@ public class AssemblerRecipes implements Runnable {
             tTagREJ.setString("track", "railcraft:track.electric.junction");
             tRailEJ.stackTagCompound = tTagREJ;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Copper, 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Copper, 4),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(tRailEJ)
                 .duration(20 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Gold, 2),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(2, tRailEJ))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Gold, 2),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(2, tRailEJ))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Electrum, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(4, tRailEJ))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Electrum, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(4, tRailEJ))
                 .duration(20 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(8, tRailEJ))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(8, tRailEJ))
                 .duration(20 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Platinum, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(16, tRailEJ))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Platinum, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(16, tRailEJ))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.VanadiumGallium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(32, tRailEJ))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.VanadiumGallium, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(32, tRailEJ))
                 .duration(20 * SECONDS)
                 .eut(256)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_Utility.copyAmount(2, tRailEl),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Naquadah, 1),
-                    GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_Utility.copyAmount(64, tRailEJ))
+                    GTUtility.copyAmount(2, tRailEl),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Naquadah, 1),
+                    GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTUtility.copyAmount(64, tRailEJ))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(assemblerRecipes);
@@ -6266,77 +6258,77 @@ public class AssemblerRecipes implements Runnable {
             int tMultiplier = tMat.contains(SubTag.SOLDERING_MATERIAL_GOOD) ? 1
                 : tMat.contains(SubTag.SOLDERING_MATERIAL_BAD) ? 4 : 2;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Copper, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Lead, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Copper, 1),
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Lead, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.RC_ShuntingWire.get(1))
                 .fluidInputs(tMat.getMolten(16L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.AnnealedCopper, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Lead, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.AnnealedCopper, 1),
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Lead, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.RC_ShuntingWire.get(1))
                 .fluidInputs(tMat.getMolten(16L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut(16)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Gold, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Lead, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Gold, 1),
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Lead, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.RC_ShuntingWire.get(4))
                 .fluidInputs(tMat.getMolten(16L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut(24)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Electrum, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Gold, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Electrum, 1),
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Gold, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.RC_ShuntingWire.get(8))
                 .fluidInputs(tMat.getMolten(16L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titanium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Electrum, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titanium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Electrum, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.RC_ShuntingWire.get(16))
                 .fluidInputs(tMat.getMolten(16L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut(48)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Platinum, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titanium, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Platinum, 1),
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titanium, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.RC_ShuntingWire.get(32))
                 .fluidInputs(tMat.getMolten(16L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut(64)
                 .addTo(assemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.VanadiumGallium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Platinum, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.VanadiumGallium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Platinum, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.RC_ShuntingWire.get(64))
                 .fluidInputs(tMat.getMolten(16L * tMultiplier / 2))
                 .duration(10 * SECONDS)
@@ -6345,13 +6337,13 @@ public class AssemblerRecipes implements Runnable {
 
             // chunkloader upgrade OC
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Plastic_Advanced.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Aluminium, 2),
+                    GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.Aluminium, 2),
                     getModItem(Railcraft.ID, "machine.alpha", 1L, 0),
                     getModItem(OpenComputers.ID, "item", 1L, 26),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(getModItem(OpenComputers.ID, "item", 1L, 62))
                 .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
                 .duration(12 * SECONDS + 10 * TICKS)
@@ -6360,467 +6352,467 @@ public class AssemblerRecipes implements Runnable {
 
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.piston, 1, 0),
                 ItemList.FR_Casing_Sturdy.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lapis, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Lapis, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(NewHorizonsCoreMod.ID, "item.EngineCore", 1L, 0))
             .fluidInputs(Materials.SeedOil.getFluid(250))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.piston, 1, 0),
                 ItemList.FR_Casing_Sturdy.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lapis, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Lapis, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(NewHorizonsCoreMod.ID, "item.EngineCore", 1L, 0))
             .fluidInputs(Materials.Lubricant.getFluid(125))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(ExtraUtilities.ID, "trashcan", 1L, 0),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Obsidian, 4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Obsidian, 4),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 1L, 11))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(NewHorizonsCoreMod.ID, "item.EngineCore", 1),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.AnyCopper, 10),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.AnyCopper, 10),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 1L, 7))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(NewHorizonsCoreMod.ID, "item.EngineCore", 1),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 10),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 10),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 1L, 8))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(NewHorizonsCoreMod.ID, "item.EngineCore", 1),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 10),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 10),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 1L, 9))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Gold, 2),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 4),
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1),
-                GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Obsidian, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Gold, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 4),
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1),
+                GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Obsidian, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(Railcraft.ID, "machine.alpha", 1, 0))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.AnyIron, 2),
-                GT_Utility.getIntegratedCircuit(20))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.AnyIron, 2),
+                GTUtility.getIntegratedCircuit(20))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 1L, 0))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.AnyIron, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.AnyIron, 2),
                 new ItemStack(Blocks.glass_pane, 2, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 2L, 1))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.AnyIron, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.AnyIron, 2),
                 getModItem(TinkerConstruct.ID, "GlassPane", 2L, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 2L, 1))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Bronze, 2),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Bronze, 2),
                 new ItemStack(Blocks.iron_bars, 2, 0),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 1L, 2))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 2),
-                GT_Utility.getIntegratedCircuit(20))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 2),
+                GTUtility.getIntegratedCircuit(20))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 1L, 13))
             .duration(10 * SECONDS)
             .eut(64)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 2),
                 new ItemStack(Blocks.glass_pane, 2, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 2L, 14))
             .duration(20 * SECONDS)
             .eut(64)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 2),
                 getModItem(TinkerConstruct.ID, "GlassPane", 2L, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 2L, 14))
             .duration(20 * SECONDS)
             .eut(64)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Steel, 2),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Steel, 2),
                 getModItem(NewHorizonsCoreMod.ID, "item.SteelBars", 2),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 1L, 15))
             .duration(20 * SECONDS)
             .eut(64)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2),
-                GT_Utility.getIntegratedCircuit(20))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2),
+                GTUtility.getIntegratedCircuit(20))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 0))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2),
                 new ItemStack(Blocks.glass_pane, 2, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 2L, 1))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2),
                 getModItem(TinkerConstruct.ID, "GlassPane", 2L, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 2L, 1))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Plastic, 2),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Plastic, 2),
                 getModItem(NewHorizonsCoreMod.ID, "item.AluminiumBars", 2),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 2))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 2),
-                GT_Utility.getIntegratedCircuit(20))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 2),
+                GTUtility.getIntegratedCircuit(20))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 3))
             .duration(10 * SECONDS)
             .eut(256)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 2),
                 new ItemStack(Blocks.glass_pane, 2, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 2L, 4))
             .duration(20 * SECONDS)
             .eut(256)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 2),
                 getModItem(TinkerConstruct.ID, "GlassPane", 2L, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 2L, 4))
             .duration(20 * SECONDS)
             .eut(256)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.StainlessSteel, 2),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.StainlessSteel, 2),
                 getModItem(NewHorizonsCoreMod.ID, "item.StainlessSteelBars", 2),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 5))
             .duration(20 * SECONDS)
             .eut(256)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 2),
-                GT_Utility.getIntegratedCircuit(20))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 2),
+                GTUtility.getIntegratedCircuit(20))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 6))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 2),
                 new ItemStack(Blocks.glass_pane, 2, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 2L, 7))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 2),
                 getModItem(TinkerConstruct.ID, "GlassPane", 2L, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 2L, 7))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Titanium, 2),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Titanium, 2),
                 getModItem(NewHorizonsCoreMod.ID, "item.TitaniumBars", 2),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 8))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2),
-                GT_Utility.getIntegratedCircuit(20))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2),
+                GTUtility.getIntegratedCircuit(20))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 9))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2),
                 new ItemStack(Blocks.glass_pane, 2, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 2L, 10))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2),
                 getModItem(TinkerConstruct.ID, "GlassPane", 2L, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 2L, 10))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.TungstenSteel, 2),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.TungstenSteel, 2),
                 getModItem(NewHorizonsCoreMod.ID, "item.TungstenSteelBars", 2),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 11))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Palladium, 2),
-                GT_Utility.getIntegratedCircuit(20))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Palladium, 2),
+                GTUtility.getIntegratedCircuit(20))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 12))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Palladium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Palladium, 2),
                 new ItemStack(Blocks.glass_pane, 2, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 2L, 13))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Palladium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Palladium, 2),
                 getModItem(TinkerConstruct.ID, "GlassPane", 2L, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 2L, 13))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NiobiumTitanium, 2),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NiobiumTitanium, 2),
                 getModItem(NewHorizonsCoreMod.ID, "item.ChromeBars", 2),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 14))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2),
-                GT_Utility.getIntegratedCircuit(20))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2),
+                GTUtility.getIntegratedCircuit(20))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 1L, 0))
             .duration(10 * SECONDS)
             .eut(4096)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2),
                 new ItemStack(Blocks.glass_pane, 2, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 2L, 1))
             .duration(20 * SECONDS)
             .eut(4096)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2),
                 getModItem(TinkerConstruct.ID, "GlassPane", 2L, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 2L, 1))
             .duration(20 * SECONDS)
             .eut(4096)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Enderium, 2),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Enderium, 2),
                 getModItem(NewHorizonsCoreMod.ID, "item.IridiumBars", 2),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 1L, 2))
             .duration(20 * SECONDS)
             .eut(4096)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2),
-                GT_Utility.getIntegratedCircuit(20))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2),
+                GTUtility.getIntegratedCircuit(20))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 1L, 3))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2),
                 new ItemStack(Blocks.glass_pane, 2, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 2L, 4))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2),
                 getModItem(TinkerConstruct.ID, "GlassPane", 2L, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 2L, 4))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Naquadah, 2),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Naquadah, 2),
                 getModItem(NewHorizonsCoreMod.ID, "item.OsmiumBars", 2),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 1L, 5))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2),
-                GT_Utility.getIntegratedCircuit(20))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2),
+                GTUtility.getIntegratedCircuit(20))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 1L, 6))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2),
                 new ItemStack(Blocks.glass_pane, 2, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 2L, 7))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2),
                 getModItem(TinkerConstruct.ID, "GlassPane", 2L, 0),
-                GT_Utility.getIntegratedCircuit(21))
+                GTUtility.getIntegratedCircuit(21))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 2L, 7))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Neutronium, 2),
+                GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Neutronium, 2),
                 getModItem(NewHorizonsCoreMod.ID, "item.NeutroniumBars", 2),
-                GT_Utility.getIntegratedCircuit(22))
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(getModItem(Railcraft.ID, "machine.eta", 1L, 8))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
@@ -6828,60 +6820,60 @@ public class AssemblerRecipes implements Runnable {
 
         // Water Tank
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Wood, 2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 1),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Wood, 2))
             .itemOutputs(getModItem(Railcraft.ID, "machine.alpha", 1L, 14))
             .fluidInputs(Materials.Glue.getFluid(36))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Wood, 2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.IronMagnetic, 1),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Wood, 2))
             .itemOutputs(getModItem(Railcraft.ID, "machine.alpha", 1L, 14))
             .fluidInputs(Materials.Glue.getFluid(36))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Wood, 2))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 1),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Wood, 2))
             .itemOutputs(getModItem(Railcraft.ID, "machine.alpha", 1L, 14))
             .fluidInputs(Materials.Glue.getFluid(36))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Steel, 4),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Wood, 4))
+                GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Steel, 4),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Wood, 4))
             .itemOutputs(getModItem(Railcraft.ID, "machine.alpha", 3L, 14))
             .fluidInputs(Materials.Glue.getFluid(72))
             .duration(20 * SECONDS)
             .eut(30)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Steel, 2),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.WoodSealed, 1))
+                GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Steel, 2),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.WoodSealed, 1))
             .itemOutputs(getModItem(Railcraft.ID, "machine.alpha", 3L, 14))
             .fluidInputs(Materials.Plastic.getMolten(36))
             .duration(20 * SECONDS)
             .eut(30)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.StainlessSteel, 4),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.WoodSealed, 4))
+                GTOreDictUnificator.get(OrePrefixes.bolt, Materials.StainlessSteel, 4),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.WoodSealed, 4))
             .itemOutputs(getModItem(Railcraft.ID, "machine.alpha", 9L, 14))
             .fluidInputs(Materials.Plastic.getMolten(72))
             .duration(20 * SECONDS)
@@ -6890,15 +6882,15 @@ public class AssemblerRecipes implements Runnable {
 
         // Steam Boilers
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.IC2_Item_Casing_Iron.get(6), GT_Utility.getIntegratedCircuit(6))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.IC2_Item_Casing_Iron.get(6), GTUtility.getIntegratedCircuit(6))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 1L, 3))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.IC2_Item_Casing_Steel.get(6), GT_Utility.getIntegratedCircuit(6))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.IC2_Item_Casing_Steel.get(6), GTUtility.getIntegratedCircuit(6))
             .itemOutputs(getModItem(Railcraft.ID, "machine.beta", 1L, 4))
             .duration(20 * SECONDS)
             .eut(64)
@@ -6907,10 +6899,10 @@ public class AssemblerRecipes implements Runnable {
 
     public void withBartWorks() {
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, ExternalMaterials.getRhodiumPlatedPalladium(), 6),
-                GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Chrome, 1))
+                GTOreDictUnificator.get(OrePrefixes.plate, ExternalMaterials.getRhodiumPlatedPalladium(), 6),
+                GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Chrome, 1))
             .itemOutputs(ItemList.Casing_Advanced_Rhodium_Palladium.get(1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(16)
@@ -6923,34 +6915,34 @@ public class AssemblerRecipes implements Runnable {
             return;
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.compressed, Materials.Bronze, 1),
-                GT_OreDictUnificator.get(OrePrefixes.compressed, Materials.Aluminium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.compressed, Materials.Steel, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.compressed, Materials.Bronze, 1),
+                GTOreDictUnificator.get(OrePrefixes.compressed, Materials.Aluminium, 1),
+                GTOreDictUnificator.get(OrePrefixes.compressed, Materials.Steel, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Ingot_Heavy1.get(1))
             .fluidInputs(Materials.StainlessSteel.getMolten(72))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(GalacticraftCore.ID, "item.heavyPlating", 1),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.MeteoricIron, 2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.MeteoricIron, 2),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Ingot_Heavy2.get(1))
             .fluidInputs(Materials.TungstenSteel.getMolten(72))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(GalacticraftMars.ID, "item.null", 1L, 3),
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Desh, 4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Desh, 4),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Ingot_Heavy3.get(1))
             .fluidInputs(Materials.Platinum.getMolten(72))
             .duration(15 * SECONDS)
@@ -6963,124 +6955,124 @@ public class AssemblerRecipes implements Runnable {
             return;
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Pentacadmiummagnesiumhexaoxid, 3),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.StainlessSteel, 2),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Pentacadmiummagnesiumhexaoxid, 3),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.StainlessSteel, 2),
                 ItemList.Electric_Pump_MV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorMV, 3))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorMV, 3))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("liquid helium"), 2000))
             .duration(16 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titaniumonabariumdecacoppereikosaoxid, 6),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Titanium, 4),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Titaniumonabariumdecacoppereikosaoxid, 6),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Titanium, 4),
                 ItemList.Electric_Pump_HV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 6))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 6))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("liquid helium"), 4000))
             .duration(16 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Uraniumtriplatinid, 9),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.TungstenSteel, 6),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Uraniumtriplatinid, 9),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.TungstenSteel, 6),
                 ItemList.Electric_Pump_EV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorEV, 9))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorEV, 9))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("liquid helium"), 6000))
             .duration(16 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Vanadiumtriindinid, 12),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.NiobiumTitanium, 8),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Vanadiumtriindinid, 12),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.NiobiumTitanium, 8),
                 ItemList.Electric_Pump_IV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 12))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 12))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("liquid helium"), 8000))
             .duration(32 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(
+                GTOreDictUnificator.get(
                     OrePrefixes.wireGt01,
                     Materials.Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid,
                     15),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Enderium, 10),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Enderium, 10),
                 ItemList.Electric_Pump_LuV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 15))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 15))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("liquid helium"), 12000))
             .duration(32 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tetranaquadahdiindiumhexaplatiumosminid, 18),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Naquadah, 12),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tetranaquadahdiindiumhexaplatiumosminid, 18),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Naquadah, 12),
                 ItemList.Electric_Pump_ZPM.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 18))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 18))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("liquid helium"), 16000))
             .duration(1 * MINUTES + 4 * SECONDS)
             .eut(TierEU.RECIPE_ZPM)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuvwire, 21),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Neutronium, 14),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuvwire, 21),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Neutronium, 14),
                 ItemList.Electric_Pump_UV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUV, 21))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUV, 21))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("liquid helium"), 20000))
             .duration(1 * MINUTES + 4 * SECONDS)
             .eut(TierEU.RECIPE_UV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuhvwire, 24),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Bedrockium, 16),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Longasssuperconductornameforuhvwire, 24),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Bedrockium, 16),
                 ItemList.Electric_Pump_UHV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 24))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 24))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("liquid helium"), 24000))
             .duration(2 * MINUTES + 8 * SECONDS)
             .eut(TierEU.RECIPE_UHV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEVBase, 27),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Infinity, 18),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEVBase, 27),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Infinity, 18),
                 ItemList.Electric_Pump_UEV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEV, 27))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEV, 27))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("liquid helium"), 28000))
             .duration(2 * MINUTES + 40 * SECONDS)
             .eut(TierEU.RECIPE_UEV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMVBase, 33),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, MaterialsUEVplus.SpaceTime, 22),
+                GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMVBase, 33),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, MaterialsUEVplus.SpaceTime, 22),
                 ItemList.Electric_Pump_UMV.get(1),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, 33))
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, 33))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("liquid helium"), 36000))
             .duration(2 * MINUTES + 40 * SECONDS)
             .eut(TierEU.RECIPE_UMV)
@@ -7089,16 +7081,16 @@ public class AssemblerRecipes implements Runnable {
 
     public void withGTNHLanthAndGTPP() {
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Electric_Pump_EV.get(4),
                 ItemList.Field_Generator_EV.get(4),
                 INCONEL_690.getPlate(4),
-                GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 16),
-                GT_OreDictUnificator.get(OrePrefixes.ring, Materials.BorosilicateGlass, 16),
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 2),
-                GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Polytetrafluoroethylene, 4),
-                GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 4),
+                GTOreDictUnificator.get(OrePrefixes.screw, Materials.Titanium, 16),
+                GTOreDictUnificator.get(OrePrefixes.ring, Materials.BorosilicateGlass, 16),
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 2),
+                GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Polytetrafluoroethylene, 4),
+                GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 4),
                 ItemList.Shape_Extruder_Wire.get(16))
             .itemOutputs(ItemList.Spinneret.get(1))
             .fluidInputs(Materials.SolderingAlloy.getMolten(144))
@@ -7112,125 +7104,123 @@ public class AssemblerRecipes implements Runnable {
             return;
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(IC2NuclearControl.ID, "ItemVanillaMachineCard", 1L, 0),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("electronicCircuit", 2))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("electronicCircuit", 2))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(IC2NuclearControl.ID, "ItemInventoryScannerCard", 1L, 0),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("electronicCircuit", 2))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("electronicCircuit", 2))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(IC2NuclearControl.ID, "ItemEnergySensorLocationCard", 1L, 0),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("electronicCircuit", 2))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("electronicCircuit", 2))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(getModItem(IC2NuclearControl.ID, "RFSensorCard", 1L, 0), GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("electronicCircuit", 2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(IC2NuclearControl.ID, "RFSensorCard", 1L, 0), GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("electronicCircuit", 2))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(IC2NuclearControl.ID, "ItemMultipleSensorLocationCard", 1L, 0),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("electronicCircuit", 1))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("electronicCircuit", 1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
         // counter
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(IC2NuclearControl.ID, "ItemMultipleSensorLocationCard", 1L, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("electronicCircuit", 1))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("electronicCircuit", 1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
         // liquid
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(IC2NuclearControl.ID, "ItemMultipleSensorLocationCard", 1L, 2),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("electronicCircuit", 2))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("electronicCircuit", 2))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
         // generator
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(IC2NuclearControl.ID, "ItemLiquidArrayLocationCard", 1L, 0),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("electronicCircuit", 2))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("electronicCircuit", 2))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
         // 2-6 liquid
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(IC2NuclearControl.ID, "ItemEnergyArrayLocationCard", 1L, 0),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("electronicCircuit", 2))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("electronicCircuit", 2))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
         // 2-6 energy
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(IC2NuclearControl.ID, "ItemSensorLocationCard", 1L, 0),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.MV), 2))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.MV), 2))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
         // non-fluid nuke
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                getModItem(IC2NuclearControl.ID, "Item55ReactorCard", 1L, 0),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.circuit.get(Materials.MV), 2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(IC2NuclearControl.ID, "Item55ReactorCard", 1L, 0), GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.circuit.get(Materials.MV), 2))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(getModItem(IC2NuclearControl.ID, "CardAppeng", 1L, 0), GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("electronicCircuit", 2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(IC2NuclearControl.ID, "CardAppeng", 1L, 0), GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("electronicCircuit", 2))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.NC_SensorCard.get(1), GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("electronicCircuit", 3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.NC_SensorCard.get(1), GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("electronicCircuit", 3))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(assemblerRecipes);
diff --git a/src/main/java/gregtech/loaders/postload/recipes/AssemblyLineRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/AssemblyLineRecipes.java
index 2b4e957d34..28630668c0 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/AssemblyLineRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/AssemblyLineRecipes.java
@@ -1,28 +1,27 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.enums.Mods.NewHorizonsCoreMod;
-import static gregtech.api.util.GT_RecipeBuilder.HOURS;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeConstants.AssemblyLine;
-import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM;
-import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME;
+import static gregtech.api.util.GTRecipeBuilder.HOURS;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeConstants.AssemblyLine;
+import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM;
+import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME;
 
 import net.minecraft.item.ItemStack;
 import net.minecraftforge.fluids.Fluid;
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import com.github.technus.tectech.thing.CustomItemList;
-
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
 import gregtech.api.util.ExternalMaterials;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import tectech.thing.CustomItemList;
 
 public class AssemblyLineRecipes implements Runnable {
 
@@ -52,15 +51,15 @@ public class AssemblyLineRecipes implements Runnable {
         // Motors
         {
             // LuV motor
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Electric_Motor_IV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.HSSS, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 2))
+                    GTOreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 1),
+                    GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.HSSS, 2),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 2))
                 .fluidInputs(new FluidStack(solderIndalloy, 144), Materials.Lubricant.getFluid(250))
                 .itemOutputs(ItemList.Electric_Motor_LuV.get(1))
                 .eut(TierEU.RECIPE_IV)
@@ -68,18 +67,18 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // ZPM motor
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Electric_Motor_LuV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.NaquadahAlloy, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.NaquadahAlloy, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.round, Materials.NaquadahAlloy, 16),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 2))
+                    GTOreDictUnificator.get(OrePrefixes.stick, Materials.SamariumMagnetic, 2),
+                    GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.NaquadahAlloy, 4),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.NaquadahAlloy, 4),
+                    GTOreDictUnificator.get(OrePrefixes.round, Materials.NaquadahAlloy, 16),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 2))
                 .fluidInputs(new FluidStack(solderIndalloy, 288), Materials.Lubricant.getFluid(750))
                 .itemOutputs(ItemList.Electric_Motor_ZPM.get(1))
                 .eut(TierEU.RECIPE_LuV)
@@ -87,21 +86,21 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // UV motor
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Electric_Motor_ZPM.get(1))
                 .metadata(RESEARCH_TIME, 4 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.SamariumMagnetic, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Neutronium, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Neutronium, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.round, Materials.Neutronium, 16),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 2))
+                    GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.SamariumMagnetic, 2),
+                    GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Neutronium, 4),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.Neutronium, 4),
+                    GTOreDictUnificator.get(OrePrefixes.round, Materials.Neutronium, 16),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 2))
                 .fluidInputs(
                     Materials.Naquadria.getMolten(1296),
                     new FluidStack(solderIndalloy, 1296),
@@ -115,17 +114,17 @@ public class AssemblyLineRecipes implements Runnable {
         // Pumps
         {
             // LuV Pump
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Electric_Pump_IV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
                     ItemList.Electric_Motor_LuV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.pipeSmall, Materials.NiobiumTitanium, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.HSSS, 8),
+                    GTOreDictUnificator.get(OrePrefixes.pipeSmall, Materials.NiobiumTitanium, 2),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 2),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.HSSS, 8),
                     new Object[] { OrePrefixes.ring.get(Materials.AnySyntheticRubber), 4 },
-                    GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.HSSS, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 2))
+                    GTOreDictUnificator.get(OrePrefixes.rotor, Materials.HSSS, 2),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 2))
                 .fluidInputs(new FluidStack(solderIndalloy, 144), Materials.Lubricant.getFluid(250))
                 .itemOutputs(ItemList.Electric_Pump_LuV.get(1))
                 .eut(TierEU.RECIPE_IV)
@@ -133,17 +132,17 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // ZPM Pump
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Electric_Pump_LuV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
                     ItemList.Electric_Motor_ZPM.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Enderium, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.NaquadahAlloy, 8),
+                    GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Enderium, 2),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 2),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.NaquadahAlloy, 8),
                     new Object[] { OrePrefixes.ring.get(Materials.AnySyntheticRubber), 8 },
-                    GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.NaquadahAlloy, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 2))
+                    GTOreDictUnificator.get(OrePrefixes.rotor, Materials.NaquadahAlloy, 2),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 2))
                 .fluidInputs(new FluidStack(solderIndalloy, 288), Materials.Lubricant.getFluid(750))
                 .itemOutputs(ItemList.Electric_Pump_ZPM.get(1))
                 .eut(TierEU.RECIPE_LuV)
@@ -151,17 +150,17 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // UV Pump
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Electric_Pump_ZPM.get(1))
                 .metadata(RESEARCH_TIME, 4 * HOURS)
                 .itemInputs(
                     ItemList.Electric_Motor_UV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Naquadah, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 8),
+                    GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Naquadah, 2),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 8),
                     new Object[] { OrePrefixes.ring.get(Materials.AnySyntheticRubber), 16 },
-                    GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Neutronium, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 2))
+                    GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Neutronium, 2),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 2))
                 .itemOutputs(ItemList.Electric_Pump_UV.get(1))
                 .fluidInputs(
                     Materials.Naquadria.getMolten(1296),
@@ -175,15 +174,15 @@ public class AssemblyLineRecipes implements Runnable {
         // Conveyors
         {
             // LuV Conveyor
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Conveyor_Module_IV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
                     ItemList.Electric_Motor_LuV.get(2),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.HSSS, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.round, Materials.HSSS, 32),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 2),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 2),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.HSSS, 4),
+                    GTOreDictUnificator.get(OrePrefixes.round, Materials.HSSS, 32),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 2),
                     new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 10 })
                 .itemOutputs(ItemList.Conveyor_Module_LuV.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 144), Materials.Lubricant.getFluid(250))
@@ -192,15 +191,15 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // ZPM Conveyor
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Conveyor_Module_LuV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
                     ItemList.Electric_Motor_ZPM.get(2),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.NaquadahAlloy, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.round, Materials.NaquadahAlloy, 32),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 2),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 2),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.NaquadahAlloy, 4),
+                    GTOreDictUnificator.get(OrePrefixes.round, Materials.NaquadahAlloy, 32),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 2),
                     new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 20 })
                 .itemOutputs(ItemList.Conveyor_Module_ZPM.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 288), Materials.Lubricant.getFluid(750))
@@ -209,15 +208,15 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // UV Conveyor
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Conveyor_Module_ZPM.get(1))
                 .metadata(RESEARCH_TIME, 4 * HOURS)
                 .itemInputs(
                     ItemList.Electric_Motor_UV.get(2),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Neutronium, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.round, Materials.Neutronium, 32),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 2),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.Neutronium, 4),
+                    GTOreDictUnificator.get(OrePrefixes.round, Materials.Neutronium, 32),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 2),
                     new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 40 })
                 .itemOutputs(ItemList.Conveyor_Module_UV.get(1))
                 .fluidInputs(
@@ -232,18 +231,18 @@ public class AssemblyLineRecipes implements Runnable {
         // Pistons
         {
             // LuV Piston
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Electric_Piston_IV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
                     ItemList.Electric_Motor_LuV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 6),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.HSSS, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.round, Materials.HSSS, 32),
-                    GT_OreDictUnificator.get(OrePrefixes.stick, Materials.HSSS, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.gear, Materials.HSSS, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.HSSS, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 4))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 6),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.HSSS, 4),
+                    GTOreDictUnificator.get(OrePrefixes.round, Materials.HSSS, 32),
+                    GTOreDictUnificator.get(OrePrefixes.stick, Materials.HSSS, 4),
+                    GTOreDictUnificator.get(OrePrefixes.gear, Materials.HSSS, 1),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.HSSS, 2),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 4))
                 .itemOutputs(ItemList.Electric_Piston_LuV.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 144), Materials.Lubricant.getFluid(250))
                 .duration(30 * SECONDS)
@@ -251,18 +250,18 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // ZPM Pistons
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Electric_Piston_LuV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
                     ItemList.Electric_Motor_ZPM.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 6),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.NaquadahAlloy, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.round, Materials.NaquadahAlloy, 32),
-                    GT_OreDictUnificator.get(OrePrefixes.stick, Materials.NaquadahAlloy, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.gear, Materials.NaquadahAlloy, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.NaquadahAlloy, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 4))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 6),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.NaquadahAlloy, 4),
+                    GTOreDictUnificator.get(OrePrefixes.round, Materials.NaquadahAlloy, 32),
+                    GTOreDictUnificator.get(OrePrefixes.stick, Materials.NaquadahAlloy, 4),
+                    GTOreDictUnificator.get(OrePrefixes.gear, Materials.NaquadahAlloy, 1),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.NaquadahAlloy, 2),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 4))
                 .itemOutputs(ItemList.Electric_Piston_ZPM.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 288), Materials.Lubricant.getFluid(750))
                 .duration(30 * SECONDS)
@@ -270,18 +269,18 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // UV Piston
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Electric_Piston_ZPM.get(1))
                 .metadata(RESEARCH_TIME, 4 * HOURS)
                 .itemInputs(
                     ItemList.Electric_Motor_UV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 6),
-                    GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Neutronium, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.round, Materials.Neutronium, 32),
-                    GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Neutronium, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Neutronium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Neutronium, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 4))
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 6),
+                    GTOreDictUnificator.get(OrePrefixes.ring, Materials.Neutronium, 4),
+                    GTOreDictUnificator.get(OrePrefixes.round, Materials.Neutronium, 32),
+                    GTOreDictUnificator.get(OrePrefixes.stick, Materials.Neutronium, 4),
+                    GTOreDictUnificator.get(OrePrefixes.gear, Materials.Neutronium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Neutronium, 2),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 4))
                 .itemOutputs(ItemList.Electric_Piston_UV.get(1))
                 .fluidInputs(
                     Materials.Naquadria.getMolten(1296),
@@ -295,19 +294,19 @@ public class AssemblyLineRecipes implements Runnable {
         // RobotArms
         {
             // LuV Robot Arm
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Robot_Arm_IV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.HSSS, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.gear, Materials.HSSS, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.HSSS, 3),
+                    GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.HSSS, 4),
+                    GTOreDictUnificator.get(OrePrefixes.gear, Materials.HSSS, 1),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.HSSS, 3),
                     ItemList.Electric_Motor_LuV.get(2),
                     ItemList.Electric_Piston_LuV.get(1),
                     new Object[] { OrePrefixes.circuit.get(Materials.LuV), 2 },
                     new Object[] { OrePrefixes.circuit.get(Materials.IV), 4 },
                     new Object[] { OrePrefixes.circuit.get(Materials.EV), 8 },
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 6))
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 6))
                 .itemOutputs(ItemList.Robot_Arm_LuV.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 576), Materials.Lubricant.getFluid(250))
                 .duration(30 * SECONDS)
@@ -315,19 +314,19 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // ZPM Robot Arm
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Robot_Arm_LuV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.NaquadahAlloy, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.gear, Materials.NaquadahAlloy, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.NaquadahAlloy, 3),
+                    GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.NaquadahAlloy, 4),
+                    GTOreDictUnificator.get(OrePrefixes.gear, Materials.NaquadahAlloy, 1),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.NaquadahAlloy, 3),
                     ItemList.Electric_Motor_ZPM.get(2),
                     ItemList.Electric_Piston_ZPM.get(1),
                     new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 2 },
                     new Object[] { OrePrefixes.circuit.get(Materials.LuV), 4 },
                     new Object[] { OrePrefixes.circuit.get(Materials.IV), 8 },
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 6))
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 6))
                 .itemOutputs(ItemList.Robot_Arm_ZPM.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 1152), Materials.Lubricant.getFluid(750))
                 .duration(30 * SECONDS)
@@ -335,19 +334,19 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // UV Robot Arm
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Robot_Arm_ZPM.get(1))
                 .metadata(RESEARCH_TIME, 4 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Neutronium, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.gear, Materials.Neutronium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Neutronium, 3),
+                    GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Neutronium, 4),
+                    GTOreDictUnificator.get(OrePrefixes.gear, Materials.Neutronium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Neutronium, 3),
                     ItemList.Electric_Motor_UV.get(2),
                     ItemList.Electric_Piston_UV.get(1),
                     new Object[] { OrePrefixes.circuit.get(Materials.UV), 2 },
                     new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 4 },
                     new Object[] { OrePrefixes.circuit.get(Materials.LuV), 8 },
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 6))
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 6))
                 .itemOutputs(ItemList.Robot_Arm_UV.get(1))
                 .fluidInputs(
                     Materials.Naquadria.getMolten(1296),
@@ -361,19 +360,19 @@ public class AssemblyLineRecipes implements Runnable {
         // Emitters
         {
             // LuV Emitter
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Emitter_IV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.HSSS, 1),
+                    GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.HSSS, 1),
                     ItemList.Electric_Motor_LuV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.stick, LuVMat, 8),
+                    GTOreDictUnificator.get(OrePrefixes.stick, LuVMat, 8),
                     ItemList.QuantumStar.get(1),
                     new Object[] { OrePrefixes.circuit.get(Materials.LuV), 4 },
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 7))
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 7))
                 .itemOutputs(ItemList.Emitter_LuV.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 576))
                 .duration(30 * SECONDS)
@@ -381,19 +380,19 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // ZPM Emitter
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Emitter_LuV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 1),
+                    GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 1),
                     ItemList.Electric_Motor_ZPM.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Osmiridium, 8),
+                    GTOreDictUnificator.get(OrePrefixes.stick, Materials.Osmiridium, 8),
                     ItemList.QuantumStar.get(2),
                     new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 4 },
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 7))
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 7))
                 .itemOutputs(ItemList.Emitter_ZPM.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 1152))
                 .duration(30 * SECONDS)
@@ -401,19 +400,19 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // UV Emitter
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Emitter_ZPM.get(1))
                 .metadata(RESEARCH_TIME, 4 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1),
                     ItemList.Electric_Motor_UV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Neutronium, 8),
+                    GTOreDictUnificator.get(OrePrefixes.stick, Materials.Neutronium, 8),
                     ItemList.Gravistar.get(4),
                     new Object[] { OrePrefixes.circuit.get(Materials.UV), 4 },
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 7))
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 7))
                 .itemOutputs(ItemList.Emitter_UV.get(1))
                 .fluidInputs(Materials.Naquadria.getMolten(1296), new FluidStack(solderIndalloy, 2304))
                 .duration(30 * SECONDS)
@@ -424,19 +423,19 @@ public class AssemblyLineRecipes implements Runnable {
         // Sensors
         {
             // LuV Sensor
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Sensor_IV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.HSSS, 1),
+                    GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.HSSS, 1),
                     ItemList.Electric_Motor_LuV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, LuVMat, 8),
+                    GTOreDictUnificator.get(OrePrefixes.plate, LuVMat, 8),
                     ItemList.QuantumStar.get(1),
                     new Object[] { OrePrefixes.circuit.get(Materials.LuV), 4 },
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 7))
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Gallium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 7))
                 .itemOutputs(ItemList.Sensor_LuV.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 576))
                 .duration(30 * SECONDS)
@@ -444,19 +443,19 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // ZPM Sensor
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Sensor_LuV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 1),
+                    GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 1),
                     ItemList.Electric_Motor_ZPM.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 8),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 8),
                     ItemList.QuantumStar.get(2),
                     new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 4 },
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 7))
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Trinium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 7))
                 .itemOutputs(ItemList.Sensor_ZPM.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 1152))
                 .duration(30 * SECONDS)
@@ -464,19 +463,19 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // UV Sensor
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Sensor_ZPM.get(1))
                 .metadata(RESEARCH_TIME, 4 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1),
                     ItemList.Electric_Motor_UV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 8),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 8),
                     ItemList.Gravistar.get(4),
                     new Object[] { OrePrefixes.circuit.get(Materials.UV), 4 },
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 7))
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Naquadria, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 7))
                 .itemOutputs(ItemList.Sensor_UV.get(1))
                 .fluidInputs(Materials.Naquadria.getMolten(1296), new FluidStack(solderIndalloy, 2304))
                 .duration(30 * SECONDS)
@@ -487,20 +486,20 @@ public class AssemblyLineRecipes implements Runnable {
         // Field Generators
         {
             // LuV Field Generator
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Field_Generator_IV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.HSSS, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 6),
+                    GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.HSSS, 1),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.HSSS, 6),
                     ItemList.QuantumStar.get(2),
                     ItemList.Emitter_LuV.get(4),
                     new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 4 },
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 8))
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, LuVMat, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.YttriumBariumCuprate, 8))
                 .itemOutputs(ItemList.Field_Generator_LuV.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 576))
                 .duration(30 * SECONDS)
@@ -508,20 +507,20 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // ZPM Field Generator
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Field_Generator_LuV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 6),
+                    GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 1),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 6),
                     ItemList.QuantumStar.get(2),
                     ItemList.Emitter_ZPM.get(4),
                     new Object[] { OrePrefixes.circuit.get(Materials.UV), 4 },
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 8))
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 8))
                 .itemOutputs(ItemList.Field_Generator_ZPM.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 1152))
                 .duration(30 * SECONDS)
@@ -529,22 +528,22 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // UV Field Generator
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Field_Generator_ZPM.get(1))
                 .metadata(RESEARCH_TIME, 4 * HOURS)
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 6),
+                    GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 6),
                     ItemList.Gravistar.get(2),
                     ItemList.Emitter_UV.get(4),
                     new Object[] { OrePrefixes.circuit.get(Materials.UHV), 4 },
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
-                    GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 8))
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64),
+                    GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NaquadahAlloy, 8))
                 .itemOutputs(ItemList.Field_Generator_UV.get(1))
                 .fluidInputs(Materials.Naquadria.getMolten(1296), new FluidStack(solderIndalloy, 2304))
                 .duration(30 * SECONDS)
@@ -555,12 +554,12 @@ public class AssemblyLineRecipes implements Runnable {
         // Energy Hatches
         {
             // LuV Energy Hatch
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Hatch_Energy_IV.get(1))
                 .metadata(RESEARCH_TIME, 60 * MINUTES)
                 .itemInputs(
                     ItemList.Hull_LuV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 2),
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 2),
                     ItemList.Circuit_Chip_UHPIC.get(2),
                     new Object[] { OrePrefixes.circuit.get(Materials.LuV), 2 },
                     ItemList.LuV_Coil.get(2),
@@ -578,12 +577,12 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // ZPM Energy Hatch
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Hatch_Energy_LuV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
                     ItemList.Hull_ZPM.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorZPM, 2),
+                    GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorZPM, 2),
                     ItemList.Circuit_Chip_NPIC.get(2),
                     new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 2 },
                     ItemList.ZPM_Coil.get(2),
@@ -601,12 +600,12 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // UV Energy Hatch
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Hatch_Energy_ZPM.get(1))
                 .metadata(RESEARCH_TIME, 4 * HOURS)
                 .itemInputs(
                     ItemList.Hull_UV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUV, 2),
+                    GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUV, 2),
                     ItemList.Circuit_Chip_PPIC.get(2),
                     new Object[] { OrePrefixes.circuit.get(Materials.UV), 2 },
                     ItemList.UV_Coil.get(2),
@@ -631,12 +630,12 @@ public class AssemblyLineRecipes implements Runnable {
         // Dynamo Hatches
         {
             // LuV Dynamo Hatch
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Hatch_Dynamo_IV.get(1))
                 .metadata(RESEARCH_TIME, 60 * MINUTES)
                 .itemInputs(
                     ItemList.Hull_LuV.get(1),
-                    GT_OreDictUnificator.get(
+                    GTOreDictUnificator.get(
                         OrePrefixes.spring,
                         Materials.Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid,
                         2),
@@ -657,12 +656,12 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // ZPM Dynamo Hatch
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Hatch_Dynamo_LuV.get(1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
                     ItemList.Hull_ZPM.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Tetranaquadahdiindiumhexaplatiumosminid, 4),
+                    GTOreDictUnificator.get(OrePrefixes.spring, Materials.Tetranaquadahdiindiumhexaplatiumosminid, 4),
                     ItemList.Circuit_Chip_NPIC.get(2),
                     new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 2 },
                     ItemList.ZPM_Coil.get(2),
@@ -680,12 +679,12 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // UV Dynamo Hatch
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .metadata(RESEARCH_ITEM, ItemList.Hatch_Dynamo_ZPM.get(1))
                 .metadata(RESEARCH_TIME, 4 * HOURS)
                 .itemInputs(
                     ItemList.Hull_UV.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.spring, Materials.Longasssuperconductornameforuvwire, 4),
+                    GTOreDictUnificator.get(OrePrefixes.spring, Materials.Longasssuperconductornameforuvwire, 4),
                     ItemList.Circuit_Chip_PPIC.get(2),
                     new Object[] { OrePrefixes.circuit.get(Materials.UV), 2 },
                     ItemList.UV_Coil.get(2),
@@ -710,8 +709,8 @@ public class AssemblyLineRecipes implements Runnable {
         // Fusion Controller
         {
             // mkI
-            GT_Values.RA.stdBuilder()
-                .metadata(RESEARCH_ITEM, GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 1))
+            GTValues.RA.stdBuilder()
+                .metadata(RESEARCH_ITEM, GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 1))
                 .metadata(RESEARCH_TIME, 2 * HOURS)
                 .itemInputs(
                     ItemList.Casing_Fusion_Coil.get(1),
@@ -719,11 +718,11 @@ public class AssemblyLineRecipes implements Runnable {
                     new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 },
                     new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 },
                     new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 },
-                    GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.NaquadahAlloy, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmiridium, 4),
+                    GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.NaquadahAlloy, 4),
+                    GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmiridium, 4),
                     ItemList.Field_Generator_LuV.get(2),
                     ItemList.Circuit_Wafer_UHPIC.get(32),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 32))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 32))
                 .itemOutputs(ItemList.FusionComputer_LuV.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 2880), Materials.VanadiumGallium.getMolten(1152))
                 .duration(50 * SECONDS)
@@ -731,8 +730,8 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // mkII
-            GT_Values.RA.stdBuilder()
-                .metadata(RESEARCH_ITEM, GT_OreDictUnificator.get(OrePrefixes.block, Materials.Europium, 1))
+            GTValues.RA.stdBuilder()
+                .metadata(RESEARCH_ITEM, GTOreDictUnificator.get(OrePrefixes.block, Materials.Europium, 1))
                 .metadata(RESEARCH_TIME, 4 * HOURS)
                 .itemInputs(
                     ItemList.Casing_Fusion_Coil.get(1),
@@ -740,10 +739,10 @@ public class AssemblyLineRecipes implements Runnable {
                     new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 },
                     new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 },
                     new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 },
-                    GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Europium, 4),
+                    GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Europium, 4),
                     ItemList.Field_Generator_ZPM.get(2),
                     ItemList.Circuit_Wafer_PPIC.get(48),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorZPM, 32))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorZPM, 32))
                 .itemOutputs(ItemList.FusionComputer_ZPMV.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 2880), Materials.NiobiumTitanium.getMolten(1152))
                 .duration(50 * SECONDS)
@@ -751,8 +750,8 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
 
             // mkIII
-            GT_Values.RA.stdBuilder()
-                .metadata(RESEARCH_ITEM, GT_OreDictUnificator.get(OrePrefixes.block, Materials.Americium, 1))
+            GTValues.RA.stdBuilder()
+                .metadata(RESEARCH_ITEM, GTOreDictUnificator.get(OrePrefixes.block, Materials.Americium, 1))
                 .metadata(RESEARCH_TIME, 6 * HOURS)
                 .itemInputs(
                     ItemList.Casing_Fusion_Coil.get(1),
@@ -760,10 +759,10 @@ public class AssemblyLineRecipes implements Runnable {
                     new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1 },
                     new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1 },
                     new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1 },
-                    GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Americium, 4),
+                    GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Americium, 4),
                     ItemList.Field_Generator_UV.get(2),
                     ItemList.Circuit_Wafer_QPIC.get(64),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUV, 32))
+                    GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUV, 32))
                 .itemOutputs(ItemList.FusionComputer_UV.get(1))
                 .fluidInputs(new FluidStack(solderIndalloy, 2880), Materials.ElectrumFlux.getMolten(1152))
                 .duration(50 * SECONDS)
@@ -771,11 +770,11 @@ public class AssemblyLineRecipes implements Runnable {
                 .addTo(AssemblyLine);
         }
         // Energy Module
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .metadata(RESEARCH_ITEM, ItemList.Energy_LapotronicOrb2.get(1))
             .metadata(RESEARCH_TIME, 4 * HOURS)
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Europium, 16),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Europium, 16),
                 new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 },
                 new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 },
                 new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 },
@@ -785,7 +784,7 @@ public class AssemblyLineRecipes implements Runnable {
                 ItemList.Circuit_Wafer_SoC2.get(64),
                 ItemList.Circuit_Wafer_SoC2.get(64),
                 ItemList.Circuit_Parts_DiodeASMD.get(8),
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 32))
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 32))
             .itemOutputs(ItemList.Energy_Module.get(1))
             .fluidInputs(
                 new FluidStack(solderIndalloy, 2880),
@@ -795,11 +794,11 @@ public class AssemblyLineRecipes implements Runnable {
             .addTo(AssemblyLine);
 
         // Energy Cluster
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .metadata(RESEARCH_ITEM, ItemList.Energy_Module.get(1))
             .metadata(RESEARCH_TIME, 4 * HOURS)
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Americium, 32),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Americium, 32),
                 new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 },
                 new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 },
                 new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 },
@@ -809,7 +808,7 @@ public class AssemblyLineRecipes implements Runnable {
                 ItemList.Circuit_Wafer_HPIC.get(64),
                 ItemList.Circuit_Wafer_HPIC.get(64),
                 ItemList.Circuit_Parts_DiodeASMD.get(16),
-                GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.NaquadahAlloy, 32))
+                GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.NaquadahAlloy, 32))
             .itemOutputs(ItemList.Energy_Cluster.get(1))
             .fluidInputs(
                 new FluidStack(solderIndalloy, 2880),
@@ -819,7 +818,7 @@ public class AssemblyLineRecipes implements Runnable {
             .addTo(AssemblyLine);
 
         // Integrated Ore Factory
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .metadata(RESEARCH_ITEM, ItemList.Machine_IV_OreWasher.get(1))
             .metadata(RESEARCH_TIME, 6 * HOURS)
             .itemInputs(
@@ -830,13 +829,13 @@ public class AssemblyLineRecipes implements Runnable {
                 ItemList.Conveyor_Module_UHV.get(8),
                 ItemList.Robot_Arm_UHV.get(8),
                 new Object[] { OrePrefixes.circuit.get(Materials.UEV), 4 },
-                new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.Duranium, 32),
-                    GT_OreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 32) },
-                GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Polybenzimidazole, 64),
+                new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Duranium, 32),
+                    GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 32) },
+                GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Polybenzimidazole, 64),
                 new ItemStack[] { ItemList.Component_Grinder_Tungsten.get(64),
                     ItemList.Component_Grinder_Diamond.get(64) },
-                GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.StainlessSteel, 32),
-                GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Chrome, 16))
+                GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.StainlessSteel, 32),
+                GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Chrome, 16))
             .itemOutputs(ItemList.Ore_Processor.get(1))
             .fluidInputs(new FluidStack(solderIndalloy, 2880), Materials.Naquadria.getMolten(1440))
             .duration(60 * SECONDS)
@@ -844,17 +843,17 @@ public class AssemblyLineRecipes implements Runnable {
             .addTo(AssemblyLine);
 
         // Drone T2
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .metadata(RESEARCH_ITEM, ItemList.TierdDrone0.get(1))
             .metadata(RESEARCH_TIME, 2 * HOURS)
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.NaquadahAlloy, 16),
+                GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.NaquadahAlloy, 16),
                 new Object[] { OrePrefixes.circuit.get(Materials.UV), 4 },
                 NewHorizonsCoreMod.isModLoaded()
-                    ? GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.HeavyDutyRocketEngineTier3", 4)
+                    ? GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.HeavyDutyRocketEngineTier3", 4)
                     : ItemList.Casing_Firebox_TungstenSteel.get(16),
                 ItemList.Large_Fluid_Cell_Osmium.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.MysteriousCrystal, 1),
+                GTOreDictUnificator.get(OrePrefixes.pipeQuadruple, Materials.MysteriousCrystal, 1),
                 ItemList.Emitter_ZPM.get(4),
                 ItemList.Energy_Module.get(1),
                 ItemList.Cover_WirelessNeedsMaintainance.get(1))
@@ -865,11 +864,11 @@ public class AssemblyLineRecipes implements Runnable {
             .addTo(AssemblyLine);
 
         // Drone T3
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .metadata(RESEARCH_ITEM, ItemList.TierdDrone1.get(1))
             .metadata(RESEARCH_TIME, 8 * HOURS)
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 16),
+                GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 16),
                 new Object[] { OrePrefixes.circuit.get(Materials.UEV), 4 },
                 ItemList.Field_Generator_UV.get(16),
                 ItemList.Gravistar.get(8),
diff --git a/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java
index 311c5b1941..932b1b71c5 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/AutoclaveRecipes.java
@@ -2,26 +2,26 @@ package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.enums.Mods.AppliedEnergistics2;
 import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsUEVplus;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class AutoclaveRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.IC2_Energium_Dust.get(9L))
             .itemOutputs(ItemList.IC2_EnergyCrystal.get(1L))
             .outputChances(10000)
@@ -30,7 +30,7 @@ public class AutoclaveRecipes implements Runnable {
             .eut(256)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.IC2_Energium_Dust.get(9L))
             .itemOutputs(ItemList.IC2_EnergyCrystal.get(1L))
             .outputChances(10000)
@@ -39,7 +39,7 @@ public class AutoclaveRecipes implements Runnable {
             .eut(256)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 0))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10))
             .outputChances(8000)
@@ -48,7 +48,7 @@ public class AutoclaveRecipes implements Runnable {
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 600))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11))
             .outputChances(8000)
@@ -57,7 +57,7 @@ public class AutoclaveRecipes implements Runnable {
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 1200))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 12))
             .outputChances(8000)
@@ -66,34 +66,34 @@ public class AutoclaveRecipes implements Runnable {
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 0))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10))
             .outputChances(9000)
-            .fluidInputs(GT_ModHandler.getDistilledWater(100L))
+            .fluidInputs(GTModHandler.getDistilledWater(100L))
             .duration(50 * SECONDS)
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 600))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11))
             .outputChances(9000)
-            .fluidInputs(GT_ModHandler.getDistilledWater(100L))
+            .fluidInputs(GTModHandler.getDistilledWater(100L))
             .duration(50 * SECONDS)
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 1200))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 12))
             .outputChances(9000)
-            .fluidInputs(GT_ModHandler.getDistilledWater(100L))
+            .fluidInputs(GTModHandler.getDistilledWater(100L))
             .duration(50 * SECONDS)
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 0))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10))
             .outputChances(10000)
@@ -102,7 +102,7 @@ public class AutoclaveRecipes implements Runnable {
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 600))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11))
             .outputChances(10000)
@@ -111,7 +111,7 @@ public class AutoclaveRecipes implements Runnable {
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemCrystalSeed", 1L, 1200))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 12))
             .outputChances(10000)
@@ -120,53 +120,53 @@ public class AutoclaveRecipes implements Runnable {
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 32))
-            .itemOutputs(GT_ModHandler.getIC2Item("carbonFiber", 64L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 32))
+            .itemOutputs(GTModHandler.getIC2Item("carbonFiber", 64L))
             .outputChances(10000)
             .fluidInputs(Materials.Polybenzimidazole.getMolten(36L))
             .duration(7 * SECONDS + 10 * TICKS)
             .eut((int) TierEU.RECIPE_EV)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 64))
-            .itemOutputs(GT_ModHandler.getIC2Item("carbonFiber", 64L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 64))
+            .itemOutputs(GTModHandler.getIC2Item("carbonFiber", 64L))
             .outputChances(10000)
             .fluidInputs(Materials.Epoxid.getMolten(144L))
             .duration(15 * SECONDS)
             .eut((int) TierEU.RECIPE_HV)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 64))
-            .itemOutputs(GT_ModHandler.getIC2Item("carbonFiber", 32L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 64))
+            .itemOutputs(GTModHandler.getIC2Item("carbonFiber", 32L))
             .outputChances(10000)
             .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(288L))
             .duration(20 * SECONDS)
             .eut((int) TierEU.RECIPE_MV)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 64))
-            .itemOutputs(GT_ModHandler.getIC2Item("carbonFiber", 16L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 64))
+            .itemOutputs(GTModHandler.getIC2Item("carbonFiber", 16L))
             .outputChances(10000)
             .fluidInputs(Materials.Plastic.getMolten(576L))
             .duration(30 * SECONDS)
             .eut((int) TierEU.RECIPE_LV)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherStar, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherStar, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherStar, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.NetherStar, 1))
             .outputChances(3333)
             .fluidInputs(Materials.UUMatter.getFluid(576L))
             .duration(60 * MINUTES)
             .eut((int) TierEU.RECIPE_HV)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(ItemList.QuantumStar.get(1L)))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(ItemList.QuantumStar.get(1L)))
             .itemOutputs(ItemList.Gravistar.get(1L))
             .outputChances(10000)
             .fluidInputs(Materials.Neutronium.getMolten(288))
@@ -174,8 +174,8 @@ public class AutoclaveRecipes implements Runnable {
             .eut((int) TierEU.RECIPE_IV)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(ItemList.Gravistar.get(16L)))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(ItemList.Gravistar.get(16L)))
             .itemOutputs(ItemList.NuclearStar.get(1L))
             .outputChances(10000)
             .fluidInputs(Materials.Infinity.getMolten(288))
@@ -183,7 +183,7 @@ public class AutoclaveRecipes implements Runnable {
             .eut(TierEU.RECIPE_UEV)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SiliconDioxide.getDust(1))
             .itemOutputs(Materials.Quartzite.getGems(1))
             .outputChances(750)
@@ -192,16 +192,16 @@ public class AutoclaveRecipes implements Runnable {
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SiliconDioxide.getDust(1))
             .itemOutputs(Materials.Quartzite.getGems(1))
             .outputChances(1000)
-            .fluidInputs(GT_ModHandler.getDistilledWater(100L))
+            .fluidInputs(GTModHandler.getDistilledWater(100L))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SiliconDioxide.getDust(1))
             .itemOutputs(Materials.Quartzite.getGems(1))
             .outputChances(10000)
@@ -210,40 +210,40 @@ public class AutoclaveRecipes implements Runnable {
             .eut(24)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3))
             .outputChances(7500)
             .fluidInputs(Materials.Water.getFluid(1000L))
             .duration(60 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3))
             .outputChances(9000)
-            .fluidInputs(GT_ModHandler.getDistilledWater(1000L))
+            .fluidInputs(GTModHandler.getDistilledWater(1000L))
             .duration(60 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.TranscendentMetal, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.Mellion, 32L))
+                GTOreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.TranscendentMetal, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsUEVplus.Mellion, 32L))
             .itemOutputs(ItemList.Phononic_Seed_Crystal.get(8L))
             .fluidInputs(Materials.Grade8PurifiedWater.getFluid(32_000L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_UMV)
             .addTo(autoclaveRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.MagMatter, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.MagMatter, 1))
             .itemOutputs(ItemList.Phononic_Seed_Crystal.get(5))
             .fluidInputs(MaterialsUEVplus.PhononCrystalSolution.getFluid(250))
             .duration(2 * SECONDS + 10 * TICKS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/BenderRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/BenderRecipes.java
index 33149b2ff3..8a4b48dc5e 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/BenderRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/BenderRecipes.java
@@ -1,333 +1,333 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.benderRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import goodgenerator.items.MyMaterial;
-import gregtech.api.enums.GT_Values;
+import goodgenerator.items.GGMaterial;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class BenderRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Aluminium, 20L),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Aluminium, 20L),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Standard.get(64L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 48L),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 48L),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Standard.get(64L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 32L),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 32L),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Standard.get(64L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Bronze, 32L),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Bronze, 32L),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Standard.get(64L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 24L),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 24L),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Standard.get(64L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.StainlessSteel, 16L),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.StainlessSteel, 16L),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Standard.get(64L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 12L),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 12L),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Standard.get(64L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 9L),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 9L),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Standard.get(64L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iridium, 6L),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Iridium, 6L),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Standard.get(64L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Osmium, 3L),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Osmium, 3L),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Standard.get(64L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Osmiridium, 2L),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Osmiridium, 2L),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(ItemList.RC_Rail_Standard.get(64L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Obsidian, 24L),
-                GT_Utility.getIntegratedCircuit(11))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Obsidian, 24L),
+                GTUtility.getIntegratedCircuit(11))
             .itemOutputs(ItemList.RC_Rail_Reinforced.get(64L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.StainlessSteel, 12L),
-                GT_Utility.getIntegratedCircuit(11))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.StainlessSteel, 12L),
+                GTUtility.getIntegratedCircuit(11))
             .itemOutputs(ItemList.RC_Rail_Reinforced.get(64L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 6L),
-                GT_Utility.getIntegratedCircuit(11))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 6L),
+                GTUtility.getIntegratedCircuit(11))
             .itemOutputs(ItemList.RC_Rail_Reinforced.get(64L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iridium, 3L),
-                GT_Utility.getIntegratedCircuit(11))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Iridium, 3L),
+                GTUtility.getIntegratedCircuit(11))
             .itemOutputs(ItemList.RC_Rail_Reinforced.get(64L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Osmium, 1L),
-                GT_Utility.getIntegratedCircuit(11))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Osmium, 1L),
+                GTUtility.getIntegratedCircuit(11))
             .itemOutputs(ItemList.RC_Rail_Reinforced.get(64L))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Aluminium, 20L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Aluminium, 20L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.RC_Rebar.get(64L))
             .duration(10 * SECONDS)
             .eut(200)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 48L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Iron, 48L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.RC_Rebar.get(64L))
             .duration(10 * SECONDS)
             .eut(200)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 24L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.WroughtIron, 24L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.RC_Rebar.get(64L))
             .duration(10 * SECONDS)
             .eut(200)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Bronze, 32L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Bronze, 32L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.RC_Rebar.get(64L))
             .duration(10 * SECONDS)
             .eut(200)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 16L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Steel, 16L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.RC_Rebar.get(64L))
             .duration(10 * SECONDS)
             .eut(200)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.StainlessSteel, 12L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.StainlessSteel, 12L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.RC_Rebar.get(64L))
             .duration(10 * SECONDS)
             .eut(200)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 8),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 8),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.RC_Rebar.get(64L))
             .duration(10 * SECONDS)
             .eut(200)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 6L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 6L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.RC_Rebar.get(64L))
             .duration(10 * SECONDS)
             .eut(200)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Iridium, 4L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Iridium, 4L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.RC_Rebar.get(64L))
             .duration(10 * SECONDS)
             .eut(200)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Osmium, 2L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.stick, Materials.Osmium, 2L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.RC_Rebar.get(64L))
             .duration(10 * SECONDS)
             .eut(200)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.IC2_Mixed_Metal_Ingot.get(1L), GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plateAlloy, Materials.Advanced, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.IC2_Mixed_Metal_Ingot.get(1L), GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plateAlloy, Materials.Advanced, 1L))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Tin, 2L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Tin, 2L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.Cell_Empty.get(1L))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 1L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 1L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.Cell_Empty.get(1L))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polytetrafluoroethylene, 1L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(ItemList.Cell_Empty.get(4L))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 3L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 3L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(new ItemStack(Items.bucket, 1, 0))
             .duration(10 * SECONDS)
             .eut(4)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 3L),
-                GT_Utility.getIntegratedCircuit(12))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 3L),
+                GTUtility.getIntegratedCircuit(12))
             .itemOutputs(new ItemStack(Items.bucket, 1, 0))
             .duration(10 * SECONDS)
             .eut(4)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Iron, 2L),
-                GT_Utility.getIntegratedCircuit(2))
-            .itemOutputs(GT_ModHandler.getIC2Item("fuelRod", 1L))
+                GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.Iron, 2L),
+                GTUtility.getIntegratedCircuit(2))
+            .itemOutputs(GTModHandler.getIC2Item("fuelRod", 1L))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(benderRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(MyMaterial.tairitsu.get(OrePrefixes.ingot, 9), GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(MyMaterial.tairitsu.get(OrePrefixes.plateDense, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GGMaterial.tairitsu.get(OrePrefixes.ingot, 9), GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GGMaterial.tairitsu.get(OrePrefixes.plateDense, 1))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_ZPM)
             .addTo(benderRecipes);
 
-        if (GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Tin, 1L) != null) {
-            GT_Values.RA.stdBuilder()
+        if (GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.Tin, 1L) != null) {
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.itemCasing, Materials.Tin, 1L),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.Tin, 1L),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.IC2_Food_Can_Empty.get(1L))
                 .duration(20 * TICKS)
                 .eut((int) TierEU.RECIPE_HV)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/BlastFurnaceRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/BlastFurnaceRecipes.java
index 84833c933d..478b6f1514 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/BlastFurnaceRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/BlastFurnaceRecipes.java
@@ -2,28 +2,27 @@ package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes;
 import static gregtech.api.recipe.RecipeMaps.primitiveBlastRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeConstants.ADDITIVE_AMOUNT;
-import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeConstants.ADDITIVE_AMOUNT;
+import static gregtech.api.util.GTRecipeConstants.COIL_HEAT;
 
 import net.minecraft.item.ItemStack;
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader;
-
-import gregtech.GT_Mod;
-import gregtech.api.enums.GT_Values;
+import bartworks.system.material.WerkstoffLoader;
+import gregtech.GTMod;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsKevlar;
 import gregtech.api.enums.MaterialsUEVplus;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class BlastFurnaceRecipes implements Runnable {
 
@@ -34,7 +33,7 @@ public class BlastFurnaceRecipes implements Runnable {
     }
 
     public void registerBlastFurnaceRecipes() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Gypsum.getDust(8))
             .itemOutputs(Materials.Quicklime.getDust(1))
             .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(1500))
@@ -45,9 +44,9 @@ public class BlastFurnaceRecipes implements Runnable {
 
         // Carbothermic Reduction
         // Depend on real amount except real ores
-        int outputIngotAmount = GT_Mod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre ? 2 : 3;
+        int outputIngotAmount = GTMod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre ? 2 : 3;
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.RoastedCopper.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Copper.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -57,7 +56,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.RoastedAntimony.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Antimony.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -67,7 +66,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.RoastedIron.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -77,7 +76,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.RoastedNickel.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Nickel.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -87,7 +86,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.RoastedZinc.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Zinc.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -97,7 +96,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.RoastedCobalt.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Cobalt.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -107,7 +106,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.RoastedArsenic.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Arsenic.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -117,7 +116,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.RoastedLead.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Lead.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -127,7 +126,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Malachite.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Copper.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -137,7 +136,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.BandedIron.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDustTiny(2))
             .fluidOutputs(Materials.CarbonDioxide.getGas(1000))
@@ -146,7 +145,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Magnetite.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -156,7 +155,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.YellowLimonite.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -166,7 +165,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.BrownLimonite.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -176,7 +175,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.BasalticMineralSand.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -186,7 +185,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.GraniticMineralSand.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -196,7 +195,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Cassiterite.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Tin.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -206,7 +205,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.CassiteriteSand.getDust(2), Materials.Carbon.getDust(1))
             .itemOutputs(Materials.Tin.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
             .outputChances(10000, 2222)
@@ -216,7 +215,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SiliconDioxide.getDust(3), Materials.Carbon.getDust(2))
             .itemOutputs(Materials.Silicon.getIngots(1), Materials.Ash.getDust(1))
             .outputChances(10000, 1111)
@@ -226,8 +225,8 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        if (GT_Mod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre) {
-            GT_Values.RA.stdBuilder()
+        if (GTMod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre) {
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.CupricOxide.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Copper.getIngots(1), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -237,7 +236,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.Malachite.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Copper.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -247,7 +246,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.AntimonyTrioxide.getDust(5), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Antimony.getIngots(2), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -257,7 +256,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.BandedIron.getDust(5), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Iron.getIngots(2), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -267,7 +266,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.Magnetite.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -277,7 +276,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.YellowLimonite.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -287,7 +286,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.BrownLimonite.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -297,7 +296,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.BasalticMineralSand.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -307,7 +306,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.GraniticMineralSand.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Iron.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -317,7 +316,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.Cassiterite.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Tin.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -327,7 +326,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.CassiteriteSand.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Tin.getIngots(outputIngotAmount), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -337,7 +336,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.Garnierite.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Nickel.getIngots(1), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -347,7 +346,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.CobaltOxide.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Cobalt.getIngots(1), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -357,7 +356,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.ArsenicTrioxide.getDust(5), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Arsenic.getIngots(2), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -367,7 +366,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .metadata(COIL_HEAT, 1200)
                 .addTo(blastFurnaceRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.Massicot.getDust(2), Materials.Carbon.getDustSmall(4))
                 .itemOutputs(Materials.Lead.getIngots(1), Materials.Ash.getDust(1))
                 .outputChances(10000, 2222)
@@ -378,23 +377,23 @@ public class BlastFurnaceRecipes implements Runnable {
                 .addTo(blastFurnaceRecipes);
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 32),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 32),
                 ItemList.GalliumArsenideCrystalSmallPart.get(1),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Circuit_Silicon_Ingot.get(1))
             .duration(7 * MINUTES + 30 * SECONDS)
             .eut((int) TierEU.RECIPE_MV)
             .metadata(COIL_HEAT, 1784)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 64),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 64),
                 ItemList.GalliumArsenideCrystalSmallPart.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 8),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 8),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Circuit_Silicon_Ingot2.get(1))
             .fluidInputs(Materials.Nitrogen.getGas(8000))
             .duration(10 * MINUTES)
@@ -402,12 +401,12 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 2484)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.SiliconSG, 16),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.SiliconSG, 16),
                 ItemList.GalliumArsenideCrystal.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 1),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Naquadah, 1),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Circuit_Silicon_Ingot3.get(1))
             .fluidInputs(Materials.Argon.getGas(8000))
             .duration(12 * MINUTES + 30 * SECONDS)
@@ -415,12 +414,12 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 4484)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.SiliconSG, 32),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.SiliconSG, 32),
                 ItemList.GalliumArsenideCrystal.get(2),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Europium, 2),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Europium, 2),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Circuit_Silicon_Ingot4.get(1))
             .fluidInputs(Materials.Radon.getGas(8000))
             .duration(15 * MINUTES)
@@ -428,12 +427,12 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 6484)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.SiliconSG, 64),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.SiliconSG, 64),
                 ItemList.GalliumArsenideCrystal.get(4),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Americium, 4),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Americium, 4),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.Circuit_Silicon_Ingot5.get(1))
             .fluidInputs(Materials.Radon.getGas(16000))
             .duration(17 * MINUTES + 30 * SECONDS)
@@ -443,32 +442,32 @@ public class BlastFurnaceRecipes implements Runnable {
 
         // CaH2 + 2Si = CaSi2 + 2H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calciumhydride, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 2))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CalciumDisilicide, 3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calciumhydride, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 2))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.CalciumDisilicide, 3))
             .fluidOutputs(Materials.Hydrogen.getGas(2000))
             .duration(15 * SECONDS)
             .eut((int) TierEU.RECIPE_MV)
             .metadata(COIL_HEAT, 1273)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUEVBase, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUEVBase, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUEVBase, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUEVBase, 1))
             .duration(16 * MINUTES + 23 * SECONDS)
             .eut((int) TierEU.RECIPE_UV)
             .metadata(COIL_HEAT, 11800)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUEVBase, 1),
-                GT_Utility.getIntegratedCircuit(11))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUEVBase, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUEVBase, 1),
+                GTUtility.getIntegratedCircuit(11))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUEVBase, 1))
             .fluidInputs(Materials.Radon.getGas(1000))
             .duration(7 * MINUTES + 22 * SECONDS + 7 * TICKS)
             .eut((int) TierEU.RECIPE_UV)
@@ -477,21 +476,21 @@ public class BlastFurnaceRecipes implements Runnable {
 
         // 0.45 * 19660 = 8847
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUIVBase, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUIVBase, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUIVBase, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUIVBase, 1))
             .duration(16 * MINUTES + 23 * SECONDS)
             .eut((int) TierEU.RECIPE_UHV)
             .metadata(COIL_HEAT, 12700)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUIVBase, 1),
-                GT_Utility.getIntegratedCircuit(11))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUIVBase, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUIVBase, 1),
+                GTUtility.getIntegratedCircuit(11))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUIVBase, 1))
             .fluidInputs(Materials.Radon.getGas(1000))
             .duration(7 * MINUTES + 22 * SECONDS + 7 * TICKS)
             .eut((int) TierEU.RECIPE_UHV)
@@ -500,21 +499,21 @@ public class BlastFurnaceRecipes implements Runnable {
 
         // 0.45 * 19660 = 8847
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUMVBase, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUMVBase, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUMVBase, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUMVBase, 1))
             .duration(16 * MINUTES + 23 * SECONDS)
             .eut((int) TierEU.RECIPE_UEV)
             .metadata(COIL_HEAT, 13600)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUMVBase, 1),
-                GT_Utility.getIntegratedCircuit(11))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUMVBase, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SuperconductorUMVBase, 1),
+                GTUtility.getIntegratedCircuit(11))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUMVBase, 1))
             .fluidInputs(Materials.Radon.getGas(1000))
             .duration(7 * MINUTES + 22 * SECONDS + 7 * TICKS)
             .eut((int) TierEU.RECIPE_UEV)
@@ -524,7 +523,7 @@ public class BlastFurnaceRecipes implements Runnable {
         // 0.45 * 19660 = 8847
         // CaO + 3C = CaC2 + CO
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Quicklime.getDust(2), Materials.Carbon.getDust(3))
             .itemOutputs(MaterialsKevlar.CalciumCarbide.getDust(3))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(1000))
@@ -535,7 +534,7 @@ public class BlastFurnaceRecipes implements Runnable {
 
         // Ni + 3Al = NiAl3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Nickel.getDust(1), Materials.Aluminium.getDust(3))
             .itemOutputs(MaterialsKevlar.NickelAluminide.getIngots(4))
             .duration(45 * SECONDS)
@@ -549,7 +548,7 @@ public class BlastFurnaceRecipes implements Runnable {
         // Roasting
 
         for (ItemStack silicon : tSiliconDioxide) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(Materials.Chalcopyrite.getDust(1), silicon)
                 .itemOutputs(Materials.RoastedCopper.getDust(1), Materials.Ferrosilite.getDust(5))
                 .fluidInputs(Materials.Oxygen.getGas(3000))
@@ -560,7 +559,7 @@ public class BlastFurnaceRecipes implements Runnable {
                 .addTo(blastFurnaceRecipes);
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Tetrahedrite.getDust(1))
             .itemOutputs(Materials.RoastedCopper.getDust(1), Materials.RoastedAntimony.getDustTiny(3))
             .fluidInputs(Materials.Oxygen.getGas(3000))
@@ -569,7 +568,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Pyrite.getDust(1))
             .itemOutputs(Materials.RoastedIron.getDust(1), Materials.Ash.getDust(1))
             .outputChances(10000, 1111)
@@ -579,7 +578,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Pentlandite.getDust(1))
             .itemOutputs(Materials.RoastedNickel.getDust(1), Materials.Ash.getDust(1))
             .outputChances(10000, 1111)
@@ -589,7 +588,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Sphalerite.getDust(1))
             .itemOutputs(Materials.RoastedZinc.getDust(1), Materials.Ash.getDust(1))
             .outputChances(10000, 1111)
@@ -599,7 +598,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Cobaltite.getDust(1))
             .itemOutputs(Materials.RoastedCobalt.getDust(1), Materials.RoastedArsenic.getDust(1))
             .fluidInputs(Materials.Oxygen.getGas(3000))
@@ -608,7 +607,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Stibnite.getDust(1))
             .itemOutputs(Materials.RoastedAntimony.getDust(1), Materials.Ash.getDust(1))
             .outputChances(10000, 1111)
@@ -618,7 +617,7 @@ public class BlastFurnaceRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Galena.getDust(1))
             .itemOutputs(Materials.RoastedLead.getDust(1), Materials.Ash.getDust(1))
             .outputChances(10000, 1111)
@@ -629,9 +628,9 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 1200)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(MaterialsUEVplus.TranscendentMetal.getDust(1), GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, MaterialsUEVplus.TranscendentMetal, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(MaterialsUEVplus.TranscendentMetal.getDust(1), GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, MaterialsUEVplus.TranscendentMetal, 1))
             .fluidInputs(Materials.Tungsten.getMolten(144))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("molten.celestialtungsten"), 72))
             .duration(3 * MINUTES)
@@ -641,10 +640,10 @@ public class BlastFurnaceRecipes implements Runnable {
 
         // Rh + 3Cl = RhCl3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(WerkstoffLoader.items.get(OrePrefixes.dust), 1, 78),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(MaterialsKevlar.RhodiumChloride.getDust(4))
             .fluidInputs(Materials.Chlorine.getGas(3000))
             .duration(30 * SECONDS)
@@ -652,12 +651,12 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 573)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Phononic_Seed_Crystal.get(1),
                 MaterialsUEVplus.SixPhasedCopper.getNanite(1),
                 Materials.Dilithium.getDust(16),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .fluidInputs(MaterialsUEVplus.Mellion.getMolten(128 * 144L))
             .fluidOutputs(MaterialsUEVplus.PhononCrystalSolution.getFluid(1000))
             .duration(300 * SECONDS)
@@ -665,9 +664,9 @@ public class BlastFurnaceRecipes implements Runnable {
             .metadata(COIL_HEAT, 17000)
             .addTo(blastFurnaceRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(MaterialsUEVplus.Mellion.getDust(1), GT_Utility.getIntegratedCircuit(11))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, MaterialsUEVplus.Mellion, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(MaterialsUEVplus.Mellion.getDust(1), GTUtility.getIntegratedCircuit(11))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, MaterialsUEVplus.Mellion, 1))
             .fluidInputs(Materials.Radon.getGas(1000))
             .duration(50 * SECONDS)
             .eut((int) TierEU.RECIPE_UXV)
@@ -676,28 +675,28 @@ public class BlastFurnaceRecipes implements Runnable {
     }
 
     public void registerPrimitiveBlastFurnaceRecipes() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Iron.getIngots(1))
             .itemOutputs(Materials.Steel.getIngots(1))
             .duration(6 * MINUTES)
             .metadata(ADDITIVE_AMOUNT, 4)
             .addTo(primitiveBlastRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Iron.getDust(1))
             .itemOutputs(Materials.Steel.getIngots(1))
             .duration(6 * MINUTES)
             .metadata(ADDITIVE_AMOUNT, 4)
             .addTo(primitiveBlastRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Iron.getBlocks(1))
             .itemOutputs(Materials.Steel.getIngots(9))
             .duration(54 * MINUTES)
             .metadata(ADDITIVE_AMOUNT, 36)
             .addTo(primitiveBlastRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Steel.getDust(1))
             .itemOutputs(Materials.Steel.getIngots(1))
             .duration(6 * MINUTES)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/BreweryRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/BreweryRecipes.java
index 7538b50c6c..8e4fb0bc58 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/BreweryRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/BreweryRecipes.java
@@ -3,9 +3,9 @@ package gregtech.loaders.postload.recipes;
 import static gregtech.api.enums.Mods.Forestry;
 import static gregtech.api.enums.Mods.IndustrialCraft2;
 import static gregtech.api.recipe.RecipeMaps.brewingRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 import static net.minecraftforge.fluids.FluidRegistry.getFluidStack;
 
 import net.minecraft.init.Blocks;
@@ -15,25 +15,25 @@ import net.minecraftforge.fluids.Fluid;
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class BreweryRecipes implements Runnable {
 
     @Override
     public void run() {
-        ItemStack[] brewingItems = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Talc, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Soapstone, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L) };
+        ItemStack[] brewingItems = new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.dust, Materials.Talc, 1L),
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Soapstone, 1L),
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L) };
 
         for (ItemStack item : brewingItems) {
             // creosote to lubricant recipes
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(item)
                 .fluidInputs(getFluidStack("creosote", 750))
                 .fluidOutputs(getFluidStack("lubricant", 750))
@@ -42,7 +42,7 @@ public class BreweryRecipes implements Runnable {
                 .addTo(brewingRecipes);
 
             // seed oil to lubricant recipes
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(item)
                 .fluidInputs(getFluidStack("seedoil", 750))
                 .fluidOutputs(getFluidStack("lubricant", 750))
@@ -52,7 +52,7 @@ public class BreweryRecipes implements Runnable {
 
             // lubricant recipes
             {
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(item)
                     .fluidInputs(getFluidStack("oil", 750))
                     .fluidOutputs(getFluidStack("lubricant", 750))
@@ -60,7 +60,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(item)
                     .fluidInputs(getFluidStack("liquid_light_oil", 750))
                     .fluidOutputs(getFluidStack("lubricant", 500))
@@ -68,7 +68,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(item)
                     .fluidInputs(getFluidStack("liquid_medium_oil", 750))
                     .fluidOutputs(getFluidStack("lubricant", 500))
@@ -76,7 +76,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(item)
                     .fluidInputs(getFluidStack("liquid_heavy_oil", 500))
                     .fluidOutputs(getFluidStack("lubricant", 750))
@@ -95,93 +95,93 @@ public class BreweryRecipes implements Runnable {
              * loading twice.
              */
             if (IndustrialCraft2.isModLoaded()) {
-                waterArray = new Fluid[] { FluidRegistry.WATER, GT_ModHandler.getDistilledWater(1L)
+                waterArray = new Fluid[] { FluidRegistry.WATER, GTModHandler.getDistilledWater(1L)
                     .getFluid() };
             } else {
                 waterArray = new Fluid[] { FluidRegistry.WATER };
             }
             for (Fluid tFluid : waterArray) {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Milk, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Milk, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("milk", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.wheatyjuice", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mineralwater", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mineralwater", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mineralwater", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mineralwater", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.thick", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mundane", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mundane", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mundane", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Items.magma_cream, 1, 0))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mundane", 750))
@@ -189,7 +189,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Items.fermented_spider_eye, 1, 0))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mundane", 750))
@@ -197,7 +197,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Items.spider_eye, 1, 0))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mundane", 750))
@@ -205,7 +205,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Items.speckled_melon, 1, 0))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mundane", 750))
@@ -213,7 +213,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Items.ghast_tear, 1, 0))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.mundane", 750))
@@ -221,7 +221,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Items.nether_wart, 1, 0))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.awkward", 750))
@@ -229,7 +229,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Blocks.red_mushroom, 1, 0))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.poison", 750))
@@ -237,7 +237,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Items.fish, 1, 3))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.poison.strong", 750))
@@ -245,7 +245,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(ItemList.IC2_Grin_Powder.get(1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.poison.strong", 750))
@@ -253,7 +253,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Items.reeds, 1, 0))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.reedwater", 750))
@@ -261,7 +261,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Items.apple, 1, 0))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.applejuice", 750))
@@ -269,7 +269,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Items.golden_apple, 1, 0))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.goldenapplejuice", 750))
@@ -277,7 +277,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Items.golden_apple, 1, 1))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.idunsapplejuice", 750))
@@ -285,7 +285,7 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(ItemList.IC2_Hops.get(1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.hopsjuice", 750))
@@ -293,16 +293,16 @@ public class BreweryRecipes implements Runnable {
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coffee, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coffee, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.darkcoffee", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
                     .eut(4)
                     .addTo(brewingRecipes);
 
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L))
                     .fluidInputs(new FluidStack(tFluid, 750))
                     .fluidOutputs(getFluidStack("potion.chillysauce", 750))
                     .duration(6 * SECONDS + 8 * TICKS)
@@ -314,47 +314,47 @@ public class BreweryRecipes implements Runnable {
 
         // potion brewing 1
         {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L))
                 .fluidInputs(getFluidStack("potion.chillysauce", 750))
                 .fluidOutputs(getFluidStack("potion.hotsauce", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L))
                 .fluidInputs(getFluidStack("potion.hotsauce", 750))
                 .fluidOutputs(getFluidStack("potion.diabolosauce", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1L))
                 .fluidInputs(getFluidStack("potion.diabolosauce", 750))
                 .fluidOutputs(getFluidStack("potion.diablosauce", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coffee, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coffee, 1L))
                 .fluidInputs(getFluidStack("milk", 750))
                 .fluidOutputs(getFluidStack("potion.coffee", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cocoa, 1L))
                 .fluidInputs(getFluidStack("milk", 750))
                 .fluidOutputs(getFluidStack("potion.darkchocolatemilk", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.IC2_Hops.get(1L))
                 .fluidInputs(getFluidStack("potion.wheatyjuice", 750))
                 .fluidOutputs(getFluidStack("potion.wheatyhopsjuice", 750))
@@ -362,87 +362,87 @@ public class BreweryRecipes implements Runnable {
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1L))
                 .fluidInputs(getFluidStack("potion.hopsjuice", 750))
                 .fluidOutputs(getFluidStack("potion.wheatyhopsjuice", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
                 .fluidInputs(getFluidStack("potion.tea", 750))
                 .fluidOutputs(getFluidStack("potion.sweettea", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
                 .fluidInputs(getFluidStack("potion.coffee", 750))
                 .fluidOutputs(getFluidStack("potion.cafeaulait", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
                 .fluidInputs(getFluidStack("potion.cafeaulait", 750))
                 .fluidOutputs(getFluidStack("potion.laitaucafe", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
                 .fluidInputs(getFluidStack("potion.lemonjuice", 750))
                 .fluidOutputs(getFluidStack("potion.lemonade", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
                 .fluidInputs(getFluidStack("potion.darkcoffee", 750))
                 .fluidOutputs(getFluidStack("potion.darkcafeaulait", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
                 .fluidInputs(getFluidStack("potion.darkchocolatemilk", 750))
                 .fluidOutputs(getFluidStack("potion.chocolatemilk", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1L))
                 .fluidInputs(getFluidStack("potion.tea", 750))
                 .fluidOutputs(getFluidStack("potion.icetea", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1L))
                 .fluidInputs(getFluidStack("potion.lemonade", 750))
                 .fluidOutputs(getFluidStack("potion.cavejohnsonsgrenadejuice", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L))
                 .fluidInputs(getFluidStack("potion.mundane", 750))
                 .fluidOutputs(getFluidStack("potion.purpledrink", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(new ItemStack(Items.fermented_spider_eye, 1, 0))
                 .fluidInputs(getFluidStack("potion.mundane", 750))
                 .fluidOutputs(getFluidStack("potion.weakness", 750))
@@ -450,7 +450,7 @@ public class BreweryRecipes implements Runnable {
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(new ItemStack(Items.fermented_spider_eye, 1, 0))
                 .fluidInputs(getFluidStack("potion.thick", 750))
                 .fluidOutputs(getFluidStack("potion.weakness", 750))
@@ -461,23 +461,23 @@ public class BreweryRecipes implements Runnable {
 
         // biomass recipes
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Forestry.ID, "fertilizerBio", 4L, 0))
-                .fluidInputs(GT_ModHandler.getWater(750L))
+                .fluidInputs(GTModHandler.getWater(750L))
                 .fluidOutputs(getFluidStack("biomass", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Forestry.ID, "mulch", 16L, 0))
-                .fluidInputs(GT_ModHandler.getDistilledWater(750L))
+                .fluidInputs(GTModHandler.getDistilledWater(750L))
                 .fluidOutputs(getFluidStack("biomass", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(4)
                 .addTo(brewingRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Forestry.ID, "mulch", 8L, 0))
                 .fluidInputs(getFluidStack("juice", 500))
                 .fluidOutputs(getFluidStack("biomass", 750))
@@ -488,9 +488,9 @@ public class BreweryRecipes implements Runnable {
 
         // ic2 biomass recipes
         {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_ModHandler.getIC2Item("biochaff", 1))
-                .fluidInputs(GT_ModHandler.getWater(1000L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTModHandler.getIC2Item("biochaff", 1))
+                .fluidInputs(GTModHandler.getWater(1000L))
                 .fluidOutputs(getFluidStack("ic2biomass", 1000))
                 .duration(8 * SECONDS + 10 * TICKS)
                 .eut(4)
@@ -498,9 +498,9 @@ public class BreweryRecipes implements Runnable {
 
             // Would add 2 different amount of water input if IC2 isn't loaded
             if (IndustrialCraft2.isModLoaded()) {
-                GT_Values.RA.stdBuilder()
-                    .itemInputs(GT_ModHandler.getIC2Item("biochaff", 1))
-                    .fluidInputs(GT_ModHandler.getDistilledWater(500L))
+                GTValues.RA.stdBuilder()
+                    .itemInputs(GTModHandler.getIC2Item("biochaff", 1))
+                    .fluidInputs(GTModHandler.getDistilledWater(500L))
                     .fluidOutputs(getFluidStack("ic2biomass", 1000))
                     .duration(10 * TICKS)
                     .eut((int) TierEU.RECIPE_LV)
@@ -517,14 +517,14 @@ public class BreweryRecipes implements Runnable {
             this.addPotionRecipes("poison", new ItemStack(Items.spider_eye, 1, 0));
             this.addPotionRecipes("health", new ItemStack(Items.speckled_melon, 1, 0));
             this.addPotionRecipes("regen", new ItemStack(Items.ghast_tear, 1, 0));
-            this.addPotionRecipes("speed", GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L));
-            this.addPotionRecipes("strength", GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1L));
+            this.addPotionRecipes("speed", GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1L));
+            this.addPotionRecipes("strength", GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1L));
         }
     }
 
     public void addPotionRecipes(String aName, ItemStack aItem) {
         // normal
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(aItem)
             .fluidInputs(getFluidStack("potion.awkward", 750))
             .fluidOutputs(getFluidStack("potion." + aName, 750))
@@ -537,7 +537,7 @@ public class BreweryRecipes implements Runnable {
             || aName.equals("health")
             || aName.equals("strength")
             || aName.equals("poison")) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(aItem)
                 .fluidInputs(getFluidStack("potion.thick", 750))
                 .fluidOutputs(getFluidStack("potion." + aName + ".strong", 750))
@@ -548,8 +548,8 @@ public class BreweryRecipes implements Runnable {
 
         // long
         if (!aName.equals("health")) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L))
                 .fluidInputs(getFluidStack("potion." + aName, 750))
                 .fluidOutputs(getFluidStack("potion." + aName + ".long", 750))
                 .duration(6 * SECONDS + 8 * TICKS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/CannerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/CannerRecipes.java
index c9e8e631bf..7707b985d6 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/CannerRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/CannerRecipes.java
@@ -2,90 +2,90 @@ package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.enums.Mods.IndustrialCraft2;
 import static gregtech.api.recipe.RecipeMaps.cannerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class CannerRecipes implements Runnable {
 
     @Override
     public void run() {
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cadmium, 2L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cadmium, 2L),
                 ItemList.Battery_Hull_LV.get(1L))
             .itemOutputs(ItemList.Battery_RE_LV_Cadmium.get(1L))
             .duration(5 * SECONDS)
             .eut(2)
             .addTo(cannerRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 2L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 2L),
                 ItemList.Battery_Hull_LV.get(1L))
             .itemOutputs(ItemList.Battery_RE_LV_Lithium.get(1L))
             .duration(5 * SECONDS)
             .eut(2)
             .addTo(cannerRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 2L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 2L),
                 ItemList.Battery_Hull_LV.get(1L))
             .itemOutputs(ItemList.Battery_RE_LV_Sodium.get(1L))
             .duration(5 * SECONDS)
             .eut(2)
             .addTo(cannerRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cadmium, 8L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cadmium, 8L),
                 ItemList.Battery_Hull_MV.get(1L))
             .itemOutputs(ItemList.Battery_RE_MV_Cadmium.get(1L))
             .duration(20 * SECONDS)
             .eut(2)
             .addTo(cannerRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 8L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 8L),
                 ItemList.Battery_Hull_MV.get(1L))
             .itemOutputs(ItemList.Battery_RE_MV_Lithium.get(1L))
             .duration(20 * SECONDS)
             .eut(2)
             .addTo(cannerRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 8L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 8L),
                 ItemList.Battery_Hull_MV.get(1L))
             .itemOutputs(ItemList.Battery_RE_MV_Sodium.get(1L))
             .duration(20 * SECONDS)
             .eut(2)
             .addTo(cannerRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cadmium, 32L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cadmium, 32L),
                 ItemList.Battery_Hull_HV.get(1L))
             .itemOutputs(ItemList.Battery_RE_HV_Cadmium.get(1L))
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(2)
             .addTo(cannerRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 32L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 32L),
                 ItemList.Battery_Hull_HV.get(1L))
             .itemOutputs(ItemList.Battery_RE_HV_Lithium.get(1L))
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(2)
             .addTo(cannerRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 32L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 32L),
                 ItemList.Battery_Hull_HV.get(1L))
             .itemOutputs(ItemList.Battery_RE_HV_Sodium.get(1L))
             .duration(1 * MINUTES + 20 * SECONDS)
@@ -94,9 +94,9 @@ public class CannerRecipes implements Runnable {
         // Recipes to actually fill the empty hulls with content
         // IV 2048
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 4L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 4L),
                 ItemList.BatteryHull_EV.get(1L))
             .itemOutputs(ItemList.BatteryHull_EV_Full.get(1L))
             .duration(5 * SECONDS)
@@ -104,9 +104,9 @@ public class CannerRecipes implements Runnable {
             .addTo(cannerRecipes);
         // EV 8192
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 16L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 16L),
                 ItemList.BatteryHull_IV.get(1L))
             .itemOutputs(ItemList.BatteryHull_IV_Full.get(1L))
             .duration(7 * SECONDS + 10 * TICKS)
@@ -114,9 +114,9 @@ public class CannerRecipes implements Runnable {
             .addTo(cannerRecipes);
         // LuV 32768
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 32L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 32L),
                 ItemList.BatteryHull_LuV.get(1L))
             .itemOutputs(ItemList.BatteryHull_LuV_Full.get(1L))
             .duration(10 * SECONDS)
@@ -124,9 +124,9 @@ public class CannerRecipes implements Runnable {
             .addTo(cannerRecipes);
         // ZPM 131072
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 16L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 16L),
                 ItemList.BatteryHull_ZPM.get(1L))
             .itemOutputs(ItemList.BatteryHull_ZPM_Full.get(1L))
             .duration(12 * SECONDS + 10 * TICKS)
@@ -134,9 +134,9 @@ public class CannerRecipes implements Runnable {
             .addTo(cannerRecipes);
         // UV 524288
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 32L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 32L),
                 ItemList.BatteryHull_UV.get(1L))
             .itemOutputs(ItemList.BatteryHull_UV_Full.get(1L))
             .duration(15 * SECONDS)
@@ -144,9 +144,9 @@ public class CannerRecipes implements Runnable {
             .addTo(cannerRecipes);
         // UHV 2097152
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 16L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 16L),
                 ItemList.BatteryHull_UHV.get(1L))
             .itemOutputs(ItemList.BatteryHull_UHV_Full.get(1L))
             .duration(17 * SECONDS + 10 * TICKS)
@@ -154,9 +154,9 @@ public class CannerRecipes implements Runnable {
             .addTo(cannerRecipes);
         // UEV 8388608
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 32L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 32L),
                 ItemList.BatteryHull_UEV.get(1L))
             .itemOutputs(ItemList.BatteryHull_UEV_Full.get(1L))
             .duration(20 * SECONDS)
@@ -164,9 +164,9 @@ public class CannerRecipes implements Runnable {
             .addTo(cannerRecipes);
         // UIV 33554432
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 64L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 64L),
                 ItemList.BatteryHull_UIV.get(1L))
             .itemOutputs(ItemList.BatteryHull_UIV_Full.get(1L))
             .duration(22 * SECONDS + 10 * TICKS)
@@ -174,9 +174,9 @@ public class CannerRecipes implements Runnable {
             .addTo(cannerRecipes);
         // UMV 134217728
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Infinity, 4L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Infinity, 4L),
                 ItemList.BatteryHull_UMV.get(1L))
             .itemOutputs(ItemList.BatteryHull_UMV_Full.get(1L))
             .duration(25 * SECONDS)
@@ -184,9 +184,9 @@ public class CannerRecipes implements Runnable {
             .addTo(cannerRecipes);
         // UxV 536870912
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Infinity, 8L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Infinity, 8L),
                 ItemList.BatteryHull_UxV.get(1L))
             .itemOutputs(ItemList.BatteryHull_UxV_Full.get(1L))
             .duration(30 * SECONDS)
@@ -197,52 +197,52 @@ public class CannerRecipes implements Runnable {
 
         if (IndustrialCraft2.isModLoaded()) {
             // todo: remove tiny dust in this recipe
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_ModHandler.getIC2Item("fuelRod", 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lithium, 1L))
-                .itemOutputs(GT_ModHandler.getIC2Item("reactorLithiumCell", 1, 1))
+                    GTModHandler.getIC2Item("fuelRod", 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lithium, 1L))
+                .itemOutputs(GTModHandler.getIC2Item("reactorLithiumCell", 1, 1))
                 .duration(16 * TICKS)
                 .eut(64)
                 .addTo(cannerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_ModHandler.getIC2Item("fuelRod", 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 3))
+                    GTModHandler.getIC2Item("fuelRod", 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 3))
                 .itemOutputs(ItemList.ThoriumCell_1.get(1L))
                 .duration(1 * SECONDS + 10 * TICKS)
                 .eut(16)
                 .addTo(cannerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_ModHandler.getIC2Item("fuelRod", 1), GT_ModHandler.getIC2Item("UranFuel", 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTModHandler.getIC2Item("fuelRod", 1), GTModHandler.getIC2Item("UranFuel", 1))
                 .itemOutputs(ItemList.Uraniumcell_1.get(1))
                 .duration(1 * SECONDS + 10 * TICKS)
                 .eut(16)
                 .addTo(cannerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_ModHandler.getIC2Item("fuelRod", 1), GT_ModHandler.getIC2Item("MOXFuel", 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTModHandler.getIC2Item("fuelRod", 1), GTModHandler.getIC2Item("MOXFuel", 1))
                 .itemOutputs(ItemList.Moxcell_1.get(1))
                 .duration(1 * SECONDS + 10 * TICKS)
                 .eut(16)
                 .addTo(cannerRecipes);
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Large_Fluid_Cell_TungstenSteel.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 3))
             .itemOutputs(ItemList.NaquadahCell_1.get(1L))
             .duration(1 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(cannerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Large_Fluid_Cell_TungstenSteel.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 3))
             .itemOutputs(ItemList.MNqCell_1.get(1L))
             .duration(1 * SECONDS + 10 * TICKS)
             .eut(16)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/CentrifugeRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/CentrifugeRecipes.java
index c4cfca5aba..e792638307 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/CentrifugeRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/CentrifugeRecipes.java
@@ -6,37 +6,37 @@ import static gregtech.api.enums.Mods.Thaumcraft;
 import static gregtech.api.enums.Mods.ThaumicTinkerer;
 import static gregtech.api.enums.Mods.TwilightForest;
 import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.loaders.misc.GT_Bees.combs;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.loaders.misc.GTBees.combs;
 import static net.minecraftforge.fluids.FluidRegistry.getFluidStack;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsOreAlum;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class CentrifugeRecipes implements Runnable {
 
     @Override
     public void run() {
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedGold, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedGold, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1),
                 getModItem(Thaumcraft.ID, "ItemResource", 2L, 14))
             .outputChances(10000, 10000, 9000)
             .fluidInputs(Materials.Mercury.getFluid(200))
@@ -44,30 +44,30 @@ public class CentrifugeRecipes implements Runnable {
             .eut((int) TierEU.RECIPE_MV)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Cell_Empty.get(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1))
             .fluidInputs(Materials.Air.getGas(10000))
             .fluidOutputs(Materials.Nitrogen.getGas(3900))
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(8)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.PlatinumGroupSludge, 9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.PlatinumGroupSludge, 9))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Osmium, 3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Osmium, 3))
             .outputChances(10000, 10000, 10000, 9500, 9000, 8500)
             .duration(6 * MINUTES + 45 * SECONDS)
             .eut(30)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemOutputs(
                 Materials.Stone.getDust(1),
                 Materials.Iron.getDust(1),
@@ -84,318 +84,314 @@ public class CentrifugeRecipes implements Runnable {
 
         // food ->CH4
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.golden_apple, 1, 1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.golden_apple, 1, 1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.gold_ingot, 64))
             .fluidOutputs(Materials.Methane.getGas(4608))
             .duration(7 * MINUTES + 40 * SECONDS + 16 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.golden_apple, 1, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.golden_apple, 1, 0), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.gold_ingot, 7))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(7 * MINUTES + 40 * SECONDS + 16 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.golden_carrot, 1, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.golden_carrot, 1, 0), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.gold_nugget, 6))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(7 * MINUTES + 40 * SECONDS + 16 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.speckled_melon, 1, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.speckled_melon, 1, 0), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.gold_nugget, 6))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(7 * MINUTES + 40 * SECONDS + 16 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.mushroom_stew, 16, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.mushroom_stew, 16, 0), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Items.bowl, 16, 0))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.apple, 32, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.apple, 32, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.bread, 64, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.bread, 64, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.porkchop, 12, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.porkchop, 12, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.cooked_porkchop, 16, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.cooked_porkchop, 16, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.beef, 12, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.beef, 12, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.cooked_beef, 16, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.cooked_beef, 16, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.fish, 12, 32767), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.fish, 12, 32767), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.cooked_fished, 16, 32767), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.cooked_fished, 16, 32767), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.chicken, 12, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.chicken, 12, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.cooked_chicken, 16, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.cooked_chicken, 16, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.melon, 64, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.melon, 64, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.pumpkin, 16, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Blocks.pumpkin, 16, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.rotten_flesh, 16, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.rotten_flesh, 16, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.spider_eye, 32, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.spider_eye, 32, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.carrot, 16, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.carrot, 16, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Food_Raw_Potato.get(16), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Food_Raw_Potato.get(16), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Food_Poisonous_Potato.get(12), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Food_Poisonous_Potato.get(12), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Food_Baked_Potato.get(24), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Food_Baked_Potato.get(24), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.cookie, 64, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.cookie, 64, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.cake, 8, 0), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.cake, 8, 0), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.brown_mushroom_block, 12, 32767), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Blocks.brown_mushroom_block, 12, 32767), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.red_mushroom_block, 12, 32767), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Blocks.red_mushroom_block, 12, 32767), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.brown_mushroom, 32, 32767), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Blocks.brown_mushroom, 32, 32767), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.red_mushroom, 32, 32767), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Blocks.red_mushroom, 32, 32767), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.nether_wart, 32, 32767), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.nether_wart, 32, 32767), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("terraWart", 16), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("terraWart", 16), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(getModItem(TwilightForest.ID, "item.meefRaw", 12L, 32767), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(TwilightForest.ID, "item.meefRaw", 12L, 32767), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(getModItem(TwilightForest.ID, "item.meefSteak", 16L, 32767), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(TwilightForest.ID, "item.meefSteak", 16L, 32767), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                getModItem(TwilightForest.ID, "item.venisonRaw", 12L, 32767),
-                GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(TwilightForest.ID, "item.venisonRaw", 12L, 32767), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(TwilightForest.ID, "item.venisonCooked", 16L, 32767),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(576))
             .duration(3 * MINUTES + 50 * SECONDS + 8 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.log, Materials.Wood, 1),
-                GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.log, Materials.Wood, 1), GTUtility.getIntegratedCircuit(1))
             .fluidOutputs(Materials.Methane.getGas(60))
             .duration(10 * SECONDS)
             .eut(20)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.sand, 1, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Diamond, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Diamond, 1),
                 new ItemStack(Blocks.sand, 1))
             .outputChances(5000, 100, 5000)
             .duration(30 * SECONDS)
             .eut((int) TierEU.RECIPE_MV)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.dirt, 1, 32767))
             .itemOutputs(
                 ItemList.IC2_Plantball.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Clay, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Clay, 1),
                 new ItemStack(Blocks.sand, 1))
             .outputChances(1250, 5000, 5000)
             .duration(12 * SECONDS + 10 * TICKS)
             .eut(30)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.grass, 1, 32767))
             .itemOutputs(
                 ItemList.IC2_Plantball.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Clay, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Clay, 1),
                 new ItemStack(Blocks.sand, 1))
             .outputChances(2500, 5000, 5000)
             .duration(12 * SECONDS + 10 * TICKS)
             .eut(30)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.mycelium, 1, 32767))
             .itemOutputs(
                 new ItemStack(Blocks.brown_mushroom, 1),
                 new ItemStack(Blocks.red_mushroom, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Clay, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Clay, 1),
                 new ItemStack(Blocks.sand, 1))
             .outputChances(2500, 2500, 5000, 5000)
             .duration(32 * SECONDS + 10 * TICKS)
             .eut(30)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.IC2_Resin.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 3),
                 ItemList.IC2_Plantball.get(1))
             .outputChances(10000, 1000)
             .fluidOutputs(Materials.Glue.getFluid(100))
@@ -403,13 +399,13 @@ public class CentrifugeRecipes implements Runnable {
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1),
-                GT_Utility.getIntegratedCircuit(10))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1),
+                GTUtility.getIntegratedCircuit(10))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium235, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uranium235, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 1))
             .outputChances(1000, 500)
             .duration(1 * MINUTES + 40 * SECONDS)
             .eut((int) TierEU.RECIPE_HV)
@@ -417,80 +413,80 @@ public class CentrifugeRecipes implements Runnable {
 
         // Uranium Enrichment in Centrifuge by adding Fluorine (Uranium Hexafluoride)
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium235, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uranium235, 1))
             .outputChances(10000)
             .fluidInputs(Materials.Fluorine.getGas(4000))
             .duration(3 * MINUTES + 20 * SECONDS)
             .eut((int) TierEU.RECIPE_EV)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium241, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium, 1))
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium241, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium, 1))
             .outputChances(2000, 3000)
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(320)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 9))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1))
             .outputChances(5000, 1000)
             .duration(24 * MINUTES)
             .eut(320)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 4))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1))
             .outputChances(2000, 3000)
             .duration(21 * MINUTES + 20 * SECONDS)
             .eut(640)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Hydrogen.getGas(160))
             .fluidOutputs(Materials.Deuterium.getGas(40))
             .duration(8 * SECONDS)
             .eut(20)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Deuterium.getGas(160))
             .fluidOutputs(Materials.Tritium.getGas(40))
             .duration(8 * SECONDS)
             .eut(80)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Helium.getGas(80))
             .fluidOutputs(Materials.Helium_3.getGas(5))
             .duration(8 * SECONDS)
             .eut(80)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 2))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1))
             .duration(48 * SECONDS + 16 * TICKS)
             .eut(80)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 36))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 36))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tungstate, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tungstate, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1),
                 new ItemStack(Blocks.sand, 36))
             .outputChances(3750, 2500, 9000)
             .fluidOutputs(Materials.Helium.getGas(4320))
@@ -498,20 +494,20 @@ public class CentrifugeRecipes implements Runnable {
             .eut(20)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 36))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 36))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 4),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 4),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 4),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 4),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1))
             .outputChances(5625, 9900, 5625, 2500)
             .duration(4 * MINUTES + 48 * SECONDS)
             .eut(20)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(10))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(10))
             .itemOutputs(
                 Materials.SiliconDioxide.getDust(1),
                 Materials.Magnesia.getDust(1),
@@ -525,8 +521,8 @@ public class CentrifugeRecipes implements Runnable {
             .eut(80)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(20))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(20))
             .itemOutputs(
                 Materials.SiliconDioxide.getDust(5),
                 Materials.Magnesia.getDust(1),
@@ -540,11 +536,11 @@ public class CentrifugeRecipes implements Runnable {
             .eut(80)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.soul_sand, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1),
                 new ItemStack(Blocks.sand, 1))
             .outputChances(1000, 700, 9000)
             .fluidOutputs(Materials.Oil.getFluid(200))
@@ -552,63 +548,63 @@ public class CentrifugeRecipes implements Runnable {
             .eut(12)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(10))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(10))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Copper, 1),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Tin, 1),
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Silver, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Phosphorus, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Scheelite, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Bauxite, 1))
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Copper, 1),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Tin, 1),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Silver, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Phosphorus, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Scheelite, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Bauxite, 1))
             .outputChances(2000, 1000, 250, 50, 250, 500)
             .fluidInputs(getFluidStack("ic2pahoehoelava", 100))
             .duration(2 * SECONDS)
             .eut(1024)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(20))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(20))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1),
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Scheelite, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bauxite, 1))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Scheelite, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bauxite, 1))
             .outputChances(8000, 4000, 1000, 450, 2250, 4500)
             .fluidInputs(getFluidStack("ic2pahoehoelava", 3600))
             .duration(16 * SECONDS + 8 * TICKS)
             .eut(4096)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 45),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.BasalticMineralSand, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Olivine, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Obsidian, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Basalt, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Flint, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.RareEarth, 1))
+                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.BasalticMineralSand, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Olivine, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Obsidian, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Basalt, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Flint, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.RareEarth, 1))
             .outputChances(2000, 2000, 2000, 2000, 2000, 2000)
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(20)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 36L, 45),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BasalticMineralSand, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Olivine, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Obsidian, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Basalt, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Flint, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RareEarth, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.BasalticMineralSand, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Olivine, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Obsidian, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Basalt, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Flint, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.RareEarth, 2))
             .outputChances(9000, 9000, 9000, 9000, 9000, 9000)
             .duration(25 * SECONDS + 18 * TICKS)
             .eut(80)
@@ -616,7 +612,7 @@ public class CentrifugeRecipes implements Runnable {
 
         // Ash centrifuge recipes
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Ash.getDust(36))
             .itemOutputs(
                 Materials.Quicklime.getDust(18),
@@ -632,7 +628,7 @@ public class CentrifugeRecipes implements Runnable {
 
         // Stone Dust and Metal Mixture centrifuge recipes
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Stone.getDust(36))
             .itemOutputs(
                 Materials.Quartzite.getDust(9),
@@ -646,7 +642,7 @@ public class CentrifugeRecipes implements Runnable {
             .eut(30)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.MetalMixture.getDust(36))
             .itemOutputs(
                 Materials.BandedIron.getDust(9),
@@ -660,24 +656,24 @@ public class CentrifugeRecipes implements Runnable {
             .eut((int) TierEU.RECIPE_EV)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Propane.getGas(320))
             .fluidOutputs(Materials.LPG.getFluid(290))
             .duration(20 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Butane.getGas(320))
             .fluidOutputs(Materials.LPG.getFluid(370))
             .duration(20 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.ElectrumFlux, 8))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.ElectrumFlux, 8))
             .outputChances(10000, 10000)
             .fluidInputs(Materials.EnrichedNaquadria.getFluid(9216))
             .fluidOutputs(Materials.FluidNaquadahFuel.getFluid(4806))
@@ -685,16 +681,16 @@ public class CentrifugeRecipes implements Runnable {
             .eut(TierEU.RECIPE_UHV)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1))
             .duration(12 * SECONDS + 10 * TICKS)
             .eut(5)
             .addTo(centrifugeRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.magma_cream, 1))
             .itemOutputs(new ItemStack(Items.blaze_powder, 1), new ItemStack(Items.slime_ball, 1))
             .duration(25 * SECONDS)
@@ -704,62 +700,62 @@ public class CentrifugeRecipes implements Runnable {
         if (Thaumcraft.isModLoaded()) {
             // air
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(combs, 1, 144), GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedAir, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(combs, 1, 144), GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedAir, 1))
                 .duration(51 * SECONDS + 4 * TICKS)
                 .eut(12)
                 .addTo(centrifugeRecipes);
 
             // fire
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(combs, 1, 146), GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedFire, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(combs, 1, 146), GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedFire, 1))
                 .duration(51 * SECONDS + 4 * TICKS)
                 .eut(12)
                 .addTo(centrifugeRecipes);
 
             // aqua
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(combs, 1, 147), GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedWater, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(combs, 1, 147), GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedWater, 1))
                 .duration(51 * SECONDS + 4 * TICKS)
                 .eut(12)
                 .addTo(centrifugeRecipes);
 
             // terra
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(combs, 1, 145), GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEarth, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(combs, 1, 145), GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEarth, 1))
                 .duration(51 * SECONDS + 4 * TICKS)
                 .eut(12)
                 .addTo(centrifugeRecipes);
 
             // ordo
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(combs, 1, 148), GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedOrder, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(combs, 1, 148), GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedOrder, 1))
                 .duration(51 * SECONDS + 4 * TICKS)
                 .eut(12)
                 .addTo(centrifugeRecipes);
 
             // perditio
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(combs, 1, 149), GT_Utility.getIntegratedCircuit(1))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEntropy, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(combs, 1, 149), GTUtility.getIntegratedCircuit(1))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEntropy, 1))
                 .duration(51 * SECONDS + 4 * TICKS)
                 .eut(12)
                 .addTo(centrifugeRecipes);
 
             // Nethershard
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(combs, 1, 152), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(combs, 1, 152), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(getModItem(ThaumicTinkerer.ID, "kamiResource", 1L, 6))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(TierEU.RECIPE_HV)
@@ -767,8 +763,8 @@ public class CentrifugeRecipes implements Runnable {
 
             // Endshard
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(combs, 1, 153), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(combs, 1, 153), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(getModItem(ThaumicTinkerer.ID, "kamiResource", 1L, 7))
                 .duration(6 * SECONDS + 8 * TICKS)
                 .eut(TierEU.RECIPE_HV)
@@ -778,8 +774,8 @@ public class CentrifugeRecipes implements Runnable {
         if (ExtraUtilities.isModLoaded()) {
             // Caelestis red
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(combs, 1, 154), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(combs, 1, 154), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(
                     getModItem(ExtraUtilities.ID, "greenscreen", 1L, 2),
                     getModItem(ExtraUtilities.ID, "greenscreen", 1L, 10),
@@ -793,8 +789,8 @@ public class CentrifugeRecipes implements Runnable {
 
             // Caelestis green
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(combs, 1, 155), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(combs, 1, 155), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(
                     getModItem(ExtraUtilities.ID, "greenscreen", 1L, 13),
                     getModItem(ExtraUtilities.ID, "greenscreen", 1L, 5),
@@ -807,8 +803,8 @@ public class CentrifugeRecipes implements Runnable {
 
             // Caelestis blue
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(combs, 1, 156), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(combs, 1, 156), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(
                     getModItem(ExtraUtilities.ID, "greenscreen", 1L, 3),
                     getModItem(ExtraUtilities.ID, "greenscreen", 1L, 9),
diff --git a/src/main/java/gregtech/loaders/postload/recipes/ChemicalBathRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ChemicalBathRecipes.java
index 7be13ecbe4..e500844b37 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/ChemicalBathRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/ChemicalBathRecipes.java
@@ -2,10 +2,10 @@ package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.enums.Mods.BuildCraftTransport;
 import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
@@ -13,24 +13,23 @@ import net.minecraft.item.ItemStack;
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader;
-
-import gregtech.api.GregTech_API;
+import bartworks.system.material.WerkstoffLoader;
+import gregtech.api.GregTechAPI;
 import gregtech.api.enums.Dyes;
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsKevlar;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class ChemicalBathRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Raw_Fries.get(1))
             .itemOutputs(ItemList.Food_Fries.get(1))
             .fluidInputs(Materials.FryingOilHot.getFluid(10))
@@ -38,35 +37,35 @@ public class ChemicalBathRecipes implements Runnable {
             .eut(4)
             .addTo(chemicalBathRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("dynamite", 1))
-            .itemOutputs(GT_ModHandler.getIC2Item("stickyDynamite", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("dynamite", 1))
+            .itemOutputs(GTModHandler.getIC2Item("stickyDynamite", 1))
             .fluidInputs(Materials.Glue.getFluid(10))
             .duration(16 * TICKS)
             .eut(4)
             .addTo(chemicalBathRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1))
-            .itemOutputs(GT_ModHandler.getIC2Item("reinforcedStone", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1))
+            .itemOutputs(GTModHandler.getIC2Item("reinforcedStone", 1))
             .fluidInputs(Materials.Concrete.getMolten(144))
             .duration(10 * SECONDS)
             .eut(4)
             .addTo(chemicalBathRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HydratedCoal, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.HydratedCoal, 1))
             .fluidInputs(Materials.Water.getFluid(125))
             .duration(12 * TICKS)
             .eut(4)
             .addTo(chemicalBathRecipes);
 
         // paper creation recipes
-        ItemStack[] paperSources = new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Paper, 1L), new ItemStack(Items.reeds, 1, 32767) };
+        ItemStack[] paperSources = new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L),
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Paper, 1L), new ItemStack(Items.reeds, 1, 32767) };
         for (ItemStack paperSource : paperSources) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(paperSource)
                 .itemOutputs(new ItemStack(Items.paper, 1, 0))
                 .fluidInputs(Materials.Water.getFluid(100))
@@ -74,26 +73,26 @@ public class ChemicalBathRecipes implements Runnable {
                 .eut(4)
                 .addTo(chemicalBathRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(paperSource)
                 .itemOutputs(new ItemStack(Items.paper, 1, 0))
-                .fluidInputs(GT_ModHandler.getDistilledWater(100))
+                .fluidInputs(GTModHandler.getDistilledWater(100))
                 .duration(10 * SECONDS)
                 .eut(4)
                 .addTo(chemicalBathRecipes);
         }
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HydratedCoal, 1))
-            .fluidInputs(GT_ModHandler.getDistilledWater(125))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.HydratedCoal, 1))
+            .fluidInputs(GTModHandler.getDistilledWater(125))
             .duration(12 * TICKS)
             .eut(4)
             .addTo(chemicalBathRecipes);
 
         for (int i = 1; i < 16; i++) {
             // wool cleaning recipes
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(new ItemStack(Blocks.wool, 1, i))
                 .itemOutputs(new ItemStack(Blocks.wool, 1, 0))
                 .fluidInputs(Materials.Chlorine.getGas(50))
@@ -102,7 +101,7 @@ public class ChemicalBathRecipes implements Runnable {
                 .addTo(chemicalBathRecipes);
 
             // carpet cleaning recipes
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(new ItemStack(Blocks.carpet, 1, 32767))
                 .itemOutputs(new ItemStack(Blocks.carpet, 1, 0))
                 .fluidInputs(Materials.Chlorine.getGas(25))
@@ -112,7 +111,7 @@ public class ChemicalBathRecipes implements Runnable {
         }
 
         // stained hardened clay cleaning
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.stained_hardened_clay, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.hardened_clay, 1, 0))
             .fluidInputs(Materials.Chlorine.getGas(50))
@@ -121,7 +120,7 @@ public class ChemicalBathRecipes implements Runnable {
             .addTo(chemicalBathRecipes);
 
         // stained glass cleaning
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.stained_glass, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.glass, 1, 0))
             .fluidInputs(Materials.Chlorine.getGas(50))
@@ -130,7 +129,7 @@ public class ChemicalBathRecipes implements Runnable {
             .addTo(chemicalBathRecipes);
 
         // stained glass pane cleaning
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.stained_glass_pane, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.glass_pane, 1, 0))
             .fluidInputs(Materials.Chlorine.getGas(20))
@@ -140,18 +139,18 @@ public class ChemicalBathRecipes implements Runnable {
 
         // light -> dark concrete recipes
         for (int i = 0; i < 8; i++) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(GregTech_API.sBlockConcretes, 1, i + 8))
-                .itemOutputs(new ItemStack(GregTech_API.sBlockConcretes, 1, i))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(GregTechAPI.sBlockConcretes, 1, i + 8))
+                .itemOutputs(new ItemStack(GregTechAPI.sBlockConcretes, 1, i))
                 .fluidInputs(Materials.Water.getFluid(250))
                 .duration(10 * SECONDS)
                 .eut(4)
                 .addTo(chemicalBathRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(new ItemStack(GregTech_API.sBlockConcretes, 1, i + 8))
-                .itemOutputs(new ItemStack(GregTech_API.sBlockConcretes, 1, i))
-                .fluidInputs(GT_ModHandler.getDistilledWater(250))
+            GTValues.RA.stdBuilder()
+                .itemInputs(new ItemStack(GregTechAPI.sBlockConcretes, 1, i + 8))
+                .itemOutputs(new ItemStack(GregTechAPI.sBlockConcretes, 1, i))
+                .fluidInputs(GTModHandler.getDistilledWater(250))
                 .duration(10 * SECONDS)
                 .eut(4)
                 .addTo(chemicalBathRecipes);
@@ -159,64 +158,64 @@ public class ChemicalBathRecipes implements Runnable {
 
         // reinforced blocks
         {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Bronze, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Bronze, 1))
                 .itemOutputs(ItemList.Block_BronzePlate.get(1))
                 .fluidInputs(Materials.Concrete.getMolten(144))
                 .duration(10 * SECONDS)
                 .eut(4)
                 .addTo(chemicalBathRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1))
                 .itemOutputs(ItemList.Block_SteelPlate.get(1))
                 .fluidInputs(Materials.Steel.getMolten(288))
                 .duration(12 * SECONDS + 10 * TICKS)
                 .eut(16)
                 .addTo(chemicalBathRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1))
                 .itemOutputs(ItemList.Block_TitaniumPlate.get(1))
                 .fluidInputs(Materials.Titanium.getMolten(144))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(chemicalBathRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1))
                 .itemOutputs(ItemList.Block_TungstenSteelReinforced.get(1))
                 .fluidInputs(Materials.TungstenSteel.getMolten(144))
                 .duration(17 * SECONDS + 10 * TICKS)
                 .eut(64)
                 .addTo(chemicalBathRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1))
                 .itemOutputs(ItemList.Block_IridiumTungstensteel.get(1))
                 .fluidInputs(Materials.Iridium.getMolten(144))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(chemicalBathRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Naquadah, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Naquadah, 1))
                 .itemOutputs(ItemList.Block_NaquadahPlate.get(1))
                 .fluidInputs(Materials.Osmium.getMolten(144))
                 .duration(22 * SECONDS + 10 * TICKS)
                 .eut(256)
                 .addTo(chemicalBathRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 1))
                 .itemOutputs(ItemList.Block_NeutroniumPlate.get(1))
                 .fluidInputs(Materials.Naquadria.getMolten(144))
                 .duration(25 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(chemicalBathRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 1))
                 .itemOutputs(ItemList.Block_TungstenSteelReinforced.get(1))
                 .fluidInputs(Materials.Concrete.getMolten(144))
                 .duration(10 * SECONDS)
@@ -225,8 +224,8 @@ public class ChemicalBathRecipes implements Runnable {
         }
 
         for (int j = 0; j < Dyes.dyeRed.getSizeOfFluidList(); j++) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1))
                 .itemOutputs(getModItem(BuildCraftTransport.ID, "pipeWire", 4L, 0))
                 .fluidInputs(Dyes.dyeRed.getFluidDye(j, 72))
                 .duration(1 * SECONDS + 12 * TICKS)
@@ -234,8 +233,8 @@ public class ChemicalBathRecipes implements Runnable {
                 .addTo(chemicalBathRecipes);
         }
         for (int j = 0; j < Dyes.dyeBlue.getSizeOfFluidList(); j++) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1))
                 .itemOutputs(getModItem(BuildCraftTransport.ID, "pipeWire", 4L, 1))
                 .fluidInputs(Dyes.dyeBlue.getFluidDye(j, 72))
                 .duration(1 * SECONDS + 12 * TICKS)
@@ -243,8 +242,8 @@ public class ChemicalBathRecipes implements Runnable {
                 .addTo(chemicalBathRecipes);
         }
         for (int j = 0; j < Dyes.dyeGreen.getSizeOfFluidList(); j++) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1))
                 .itemOutputs(getModItem(BuildCraftTransport.ID, "pipeWire", 4L, 2))
                 .fluidInputs(Dyes.dyeGreen.getFluidDye(j, 72))
                 .duration(1 * SECONDS + 12 * TICKS)
@@ -252,8 +251,8 @@ public class ChemicalBathRecipes implements Runnable {
                 .addTo(chemicalBathRecipes);
         }
         for (int j = 0; j < Dyes.dyeYellow.getSizeOfFluidList(); j++) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.RedAlloy, 1))
                 .itemOutputs(getModItem(BuildCraftTransport.ID, "pipeWire", 4L, 3))
                 .fluidInputs(Dyes.dyeYellow.getFluidDye(j, 72))
                 .duration(1 * SECONDS + 12 * TICKS)
@@ -263,7 +262,7 @@ public class ChemicalBathRecipes implements Runnable {
         for (byte i = 0; i < 16; i = (byte) (i + 1)) {
             for (int j = 0; j < Dyes.VALUES[i].getSizeOfFluidList(); j++) {
                 if (i != 15) {
-                    GT_Values.RA.stdBuilder()
+                    GTValues.RA.stdBuilder()
                         .itemInputs(new ItemStack(Blocks.wool, 1, 0))
                         .itemOutputs(new ItemStack(Blocks.wool, 1, 15 - i))
                         .fluidInputs(Dyes.VALUES[i].getFluidDye(j, 72))
@@ -272,7 +271,7 @@ public class ChemicalBathRecipes implements Runnable {
                         .addTo(chemicalBathRecipes);
                 }
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Blocks.glass, 1, 0))
                     .itemOutputs(new ItemStack(Blocks.stained_glass, 1, 15 - i))
                     .fluidInputs(Dyes.VALUES[i].getFluidDye(j, 18))
@@ -280,7 +279,7 @@ public class ChemicalBathRecipes implements Runnable {
                     .eut(2)
                     .addTo(chemicalBathRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(new ItemStack(Blocks.hardened_clay, 1, 0))
                     .itemOutputs(new ItemStack(Blocks.stained_hardened_clay, 1, 15 - i))
                     .fluidInputs(Dyes.VALUES[i].getFluidDye(j, 18))
@@ -291,23 +290,23 @@ public class ChemicalBathRecipes implements Runnable {
         }
 
         // Rn relate quantum recipe
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderEye, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.EnderEye, 1))
             .itemOutputs(ItemList.QuantumEye.get(1))
             .fluidInputs(Materials.Radon.getGas(250))
             .duration(24 * SECONDS)
             .eut(384)
             .addTo(chemicalBathRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherStar, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.NetherStar, 1))
             .itemOutputs(ItemList.QuantumStar.get(1))
             .fluidInputs(Materials.Radon.getGas(1250))
             .duration(1 * MINUTES + 36 * SECONDS)
             .eut(384)
             .addTo(chemicalBathRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.WovenKevlar.get(1))
             .itemOutputs(MaterialsKevlar.Kevlar.getPlates(1))
             .fluidInputs(MaterialsKevlar.PolyurethaneResin.getFluid(1000))
@@ -315,7 +314,7 @@ public class ChemicalBathRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(chemicalBathRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(WerkstoffLoader.CubicZirconia.get(OrePrefixes.gemExquisite, 1))
             .itemOutputs(Materials.Firestone.getGems(1))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("ic2hotcoolant"), 250))
@@ -324,7 +323,7 @@ public class ChemicalBathRecipes implements Runnable {
             .addTo(chemicalBathRecipes);
 
         // Na + H2O = NaOH + H
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Sodium.getDust(1))
             .itemOutputs(Materials.SodiumHydroxide.getDust(3))
             .fluidInputs(Materials.Water.getFluid(1000))
@@ -335,78 +334,78 @@ public class ChemicalBathRecipes implements Runnable {
 
         // Custom Sodium Persulfate Ore Processing Recipes
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Tantalite, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Tantalite, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Tantalite, 1),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Tantalite, 1),
                 Materials.Tantalum.getDust(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
             .outputChances(10000, 3000, 4000)
             .fluidInputs(Materials.SodiumPersulfate.getFluid(100))
             .duration(40 * SECONDS)
             .eut(8)
             .addTo(chemicalBathRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Pyrolusite, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Pyrolusite, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Pyrolusite, 1),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Pyrolusite, 1),
                 Materials.Manganese.getDust(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
             .outputChances(10000, 7000, 4000)
             .fluidInputs(Materials.SodiumPersulfate.getFluid(100))
             .duration(40 * SECONDS)
             .eut(8)
             .addTo(chemicalBathRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Quartzite, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Quartzite, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Quartzite, 1),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Quartzite, 1),
                 Materials.CertusQuartz.getDust(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
             .outputChances(10000, 3000, 4000)
             .fluidInputs(Materials.SodiumPersulfate.getFluid(100))
             .duration(40 * SECONDS)
             .eut(8)
             .addTo(chemicalBathRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.CertusQuartz, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.CertusQuartz, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.CertusQuartz, 1),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.CertusQuartz, 1),
                 Materials.Barium.getDust(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
             .outputChances(10000, 7000, 4000)
             .fluidInputs(Materials.SodiumPersulfate.getFluid(100))
             .duration(40 * SECONDS)
             .eut(8)
             .addTo(chemicalBathRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Bauxite, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Bauxite, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Bauxite, 1),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Bauxite, 1),
                 Materials.Rutile.getDust(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
             .outputChances(10000, 5000, 4000)
             .fluidInputs(Materials.SodiumPersulfate.getFluid(100))
             .duration(40 * SECONDS)
             .eut(8)
             .addTo(chemicalBathRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Thorium, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Thorium, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Thorium, 1),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Thorium, 1),
                 Materials.Uranium.getDust(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
             .outputChances(10000, 3000, 4000)
             .fluidInputs(Materials.SodiumPersulfate.getFluid(100))
             .duration(40 * SECONDS)
             .eut(8)
             .addTo(chemicalBathRecipes);
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.Stibnite, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Stibnite, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Stibnite, 1),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Stibnite, 1),
                 Materials.Antimony.getDust(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
             .outputChances(10000, 5000, 4000)
             .fluidInputs(Materials.SodiumPersulfate.getFluid(100))
             .duration(40 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/ChemicalRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ChemicalRecipes.java
index 3df932edd2..ab3cd43dce 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/ChemicalRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/ChemicalRecipes.java
@@ -6,13 +6,13 @@ import static gregtech.api.enums.Mods.NewHorizonsCoreMod;
 import static gregtech.api.enums.Mods.Railcraft;
 import static gregtech.api.recipe.RecipeMaps.chemicalReactorRecipes;
 import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeConstants.UniversalChemical;
-import static gtPlusPlus.core.material.MISC_MATERIALS.CALCIUM_CHLORIDE;
-import static gtPlusPlus.core.material.MISC_MATERIALS.SODIUM_NITRATE;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeConstants.UniversalChemical;
+import static gtPlusPlus.core.material.MaterialMisc.CALCIUM_CHLORIDE;
+import static gtPlusPlus.core.material.MaterialMisc.SODIUM_NITRATE;
 import static net.minecraftforge.fluids.FluidRegistry.getFluidStack;
 
 import net.minecraft.init.Blocks;
@@ -22,18 +22,17 @@ import net.minecraftforge.fluids.Fluid;
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader;
-
+import bartworks.system.material.WerkstoffLoader;
 import cpw.mods.fml.common.registry.GameRegistry;
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsKevlar;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 import gtPlusPlus.core.item.ModItems;
 
 public class ChemicalRecipes implements Runnable {
@@ -48,30 +47,30 @@ public class ChemicalRecipes implements Runnable {
     }
 
     public void registerBoth() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.paper, 1), new ItemStack(Items.string, 1))
-            .itemOutputs(GT_ModHandler.getIC2Item("dynamite", 1))
+            .itemOutputs(GTModHandler.getIC2Item("dynamite", 1))
             .fluidInputs(Materials.Glyceryl.getFluid(500))
             .duration(8 * SECONDS)
             .eut(4)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Indium, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Indium, 1))
             .fluidInputs(new FluidStack(ItemList.sIndiumConcentrate, 8000))
             .fluidOutputs(new FluidStack(ItemList.sLeadZincSolution, 8000))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 36),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Indium, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 36),
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Indium, 1))
             .fluidInputs(new FluidStack(ItemList.sIndiumConcentrate, 72000))
             .fluidOutputs(new FluidStack(ItemList.sLeadZincSolution, 72000))
             .duration(22 * SECONDS + 10 * TICKS)
@@ -80,22 +79,22 @@ public class ChemicalRecipes implements Runnable {
 
         // Platinum Group Sludge chain
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Pentlandite, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.PlatinumGroupSludge, 1))
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Pentlandite, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.PlatinumGroupSludge, 1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
             .fluidOutputs(new FluidStack(ItemList.sNickelSulfate, 2000))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(30)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Chalcopyrite, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.PlatinumGroupSludge, 1))
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Chalcopyrite, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.PlatinumGroupSludge, 1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
             .fluidOutputs(new FluidStack(ItemList.sBlueVitriol, 2000))
             .duration(2 * SECONDS + 10 * TICKS)
@@ -104,26 +103,26 @@ public class ChemicalRecipes implements Runnable {
 
         // Fe + 3HCl = FeCl3 + 3H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1), ItemList.Cell_Empty.get(3))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1), ItemList.Cell_Empty.get(3))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 3))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(3000))
             .fluidOutputs(Materials.IronIIIChloride.getFluid(1000))
             .duration(20 * SECONDS)
             .eut(30)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedGold, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 8))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Thaumium, 16))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedGold, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 8))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Thaumium, 16))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("ic2coolant"), 1000))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(GalaxySpace.ID, "item.UnknowCrystal", 4), Materials.Osmiridium.getDust(2))
             .itemOutputs(ItemList.Circuit_Chip_Stemcell.get(64))
             .fluidInputs(Materials.GrowthMediumSterilized.getFluid(1000))
@@ -132,10 +131,10 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LuV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Circuit_Chip_Stemcell.get(32),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CosmicNeutronium, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.CosmicNeutronium, 4))
             .itemOutputs(ItemList.Circuit_Chip_Biocell.get(32))
             .fluidInputs(Materials.BioMediumSterilized.getFluid(2000))
             .fluidOutputs(getFluidStack("mutagen", 2000))
@@ -143,47 +142,45 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_UV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                new ItemStack(Items.sugar),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plastic, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.sugar), GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plastic, 1))
             .itemOutputs(ItemList.GelledToluene.get(2))
             .fluidInputs(new FluidStack(ItemList.sToluene, 133))
             .duration(7 * SECONDS)
             .eut(192)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Items.sugar, 9), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Items.sugar, 9), GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 1))
             .itemOutputs(ItemList.GelledToluene.get(18))
             .fluidInputs(new FluidStack(ItemList.sToluene, 1197))
             .duration(1 * MINUTES + 3 * SECONDS)
             .eut(192)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.GelledToluene.get(4), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.GelledToluene.get(4), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(Blocks.tnt, 1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(250))
             .duration(10 * SECONDS)
             .eut(24)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.GelledToluene.get(4), GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_ModHandler.getIC2Item("industrialTnt", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.GelledToluene.get(4), GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTModHandler.getIC2Item("industrialTnt", 1))
             .fluidInputs(new FluidStack(ItemList.sNitrationMixture, 200))
             .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(150))
             .duration(4 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1),
                 Materials.Empty.getCells(1))
             .fluidInputs(Materials.NatruralGas.getGas(16000))
             .fluidOutputs(Materials.Gas.getGas(16000))
@@ -191,23 +188,23 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.NatruralGas, 2),
-                GT_Utility.getIntegratedCircuit(4))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Gas, 2))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.NatruralGas, 2),
+                GTUtility.getIntegratedCircuit(4))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Gas, 2))
             .fluidInputs(Materials.Hydrogen.getGas(250))
             .fluidOutputs(Materials.HydricSulfide.getGas(125))
             .duration(1 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1),
                 Materials.Empty.getCells(1))
             .fluidInputs(Materials.SulfuricGas.getGas(16000))
             .fluidOutputs(Materials.Gas.getGas(16000))
@@ -215,23 +212,23 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricGas, 2),
-                GT_Utility.getIntegratedCircuit(4))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Gas, 2))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricGas, 2),
+                GTUtility.getIntegratedCircuit(4))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Gas, 2))
             .fluidInputs(Materials.Hydrogen.getGas(250))
             .fluidOutputs(Materials.HydricSulfide.getGas(125))
             .duration(1 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1),
                 Materials.Empty.getCells(1))
             .fluidInputs(Materials.SulfuricNaphtha.getFluid(12000))
             .fluidOutputs(Materials.Naphtha.getFluid(12000))
@@ -239,23 +236,23 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricNaphtha, 3),
-                GT_Utility.getIntegratedCircuit(4))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Naphtha, 3))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricNaphtha, 3),
+                GTUtility.getIntegratedCircuit(4))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Naphtha, 3))
             .fluidInputs(Materials.Hydrogen.getGas(500))
             .fluidOutputs(Materials.HydricSulfide.getGas(250))
             .duration(2 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1),
                 Materials.Empty.getCells(1))
             .fluidInputs(Materials.SulfuricLightFuel.getFluid(12000))
             .fluidOutputs(Materials.LightFuel.getFluid(12000))
@@ -263,23 +260,23 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricLightFuel, 3),
-                GT_Utility.getIntegratedCircuit(4))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LightFuel, 3))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricLightFuel, 3),
+                GTUtility.getIntegratedCircuit(4))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.LightFuel, 3))
             .fluidInputs(Materials.Hydrogen.getGas(500))
             .fluidOutputs(Materials.HydricSulfide.getGas(250))
             .duration(2 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1),
                 Materials.Empty.getCells(1))
             .fluidInputs(Materials.SulfuricHeavyFuel.getFluid(8000))
             .fluidOutputs(Materials.HeavyFuel.getFluid(8000))
@@ -287,285 +284,285 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricHeavyFuel, 1),
-                GT_Utility.getIntegratedCircuit(4))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HeavyFuel, 1))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricHeavyFuel, 1),
+                GTUtility.getIntegratedCircuit(4))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.HeavyFuel, 1))
             .fluidInputs(Materials.Hydrogen.getGas(250))
             .fluidOutputs(Materials.HydricSulfide.getGas(125))
             .duration(1 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Potassium, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Potassium, 1))
             .fluidInputs(Materials.Naphtha.getFluid(576))
             .fluidOutputs(Materials.Polycaprolactam.getMolten(1296))
             .duration(32 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 9),
-                GT_Utility.getIntegratedCircuit(9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 9),
+                GTUtility.getIntegratedCircuit(9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 1))
             .fluidInputs(Materials.Naphtha.getFluid(5184))
             .fluidOutputs(Materials.Polycaprolactam.getMolten(11664))
             .duration(4 * MINUTES + 48 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        for (Fluid tFluid : new Fluid[] { FluidRegistry.WATER, GT_ModHandler.getDistilledWater(1L)
+        for (Fluid tFluid : new Fluid[] { FluidRegistry.WATER, GTModHandler.getDistilledWater(1L)
             .getFluid() }) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(2))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(3))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(2))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(1))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(1))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(3))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(4))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(3))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(2))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(2))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(3))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(4))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(3))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(2))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(2))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(3))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(4))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(3))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(2))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glauconite, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(2))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(3))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.TricalciumPhosphate, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(4))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(20 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphate, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(3))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 3))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(2))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(UniversalChemical);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.GlauconiteSand, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1))
                 .itemOutputs(ItemList.IC2_Fertilizer.get(2))
                 .fluidInputs(new FluidStack(tFluid, 1000))
                 .duration(10 * SECONDS)
@@ -575,99 +572,99 @@ public class ChemicalRecipes implements Runnable {
 
         // 3quartz dust + Na + H2O = 3quartz gem (Na loss
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 3))
             .fluidInputs(Materials.Water.getFluid(1000))
             .duration(25 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.CertusQuartz, 3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.CertusQuartz, 3))
             .fluidInputs(Materials.Water.getFluid(1000))
             .duration(25 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Quartzite, 3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Quartzite, 3))
             .fluidInputs(Materials.Water.getFluid(1000))
             .duration(25 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 3))
-            .fluidInputs(GT_ModHandler.getDistilledWater(1000))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 3))
+            .fluidInputs(GTModHandler.getDistilledWater(1000))
             .duration(25 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.CertusQuartz, 3))
-            .fluidInputs(GT_ModHandler.getDistilledWater(1000))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.CertusQuartz, 3))
+            .fluidInputs(GTModHandler.getDistilledWater(1000))
             .duration(25 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Quartzite, 3))
-            .fluidInputs(GT_ModHandler.getDistilledWater(1000))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Quartzite, 3))
+            .fluidInputs(GTModHandler.getDistilledWater(1000))
             .duration(25 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
         // 3UO2 + 4Al = 3U + 2Al2O3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uraninite, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uraninite, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 10))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 10))
             .duration(50 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
         // UO2 + 2Mg = U + 2MgO
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uraninite, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uraninite, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesia, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesia, 4))
             .duration(50 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
         // Ca + C + 3O = CaCO3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 5))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 5))
             .fluidInputs(Materials.Oxygen.getGas(3000))
             .duration(25 * SECONDS)
             .eut(TierEU.RECIPE_LV)
@@ -675,8 +672,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C + 4H = CH4
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Carbon.getDust(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Carbon.getDust(1), GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Hydrogen.getGas(4000))
             .fluidOutputs(Materials.Methane.getGas(1000))
             .duration(10 * SECONDS)
@@ -685,31 +682,31 @@ public class ChemicalRecipes implements Runnable {
 
         // TiO2 + 2C + 4Cl = TiCl4 + 2CO
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Rutile, 3),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Carbon, 2))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.CarbonMonoxide, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Rutile, 3),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Carbon, 2))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.CarbonMonoxide, 2))
             .fluidInputs(Materials.Chlorine.getGas(4000))
             .fluidOutputs(Materials.Titaniumtetrachloride.getFluid(1000))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Rutile, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Rutile, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 2))
             .fluidInputs(Materials.Chlorine.getGas(4000))
             .fluidOutputs(Materials.Titaniumtetrachloride.getFluid(1000))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Rutile, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Rutile, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 2))
             .fluidInputs(Materials.Chlorine.getGas(4000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(2000), Materials.Titaniumtetrachloride.getFluid(1000))
             .duration(20 * SECONDS)
@@ -718,32 +715,32 @@ public class ChemicalRecipes implements Runnable {
 
         // 4Na + 2MgCl2 = 2Mg + 4NaCl
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 4),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesiumchloride, 6))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 4),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesiumchloride, 6))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Salt, 8))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Salt, 8))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(UniversalChemical);
 
         // rubber
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1))
             .fluidOutputs(Materials.Rubber.getMolten(1296))
             .duration(30 * SECONDS)
             .eut(16)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Sulfur, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Sulfur, 1))
             .fluidOutputs(Materials.Rubber.getMolten(144))
             .duration(5 * SECONDS)
             .eut(16)
@@ -751,54 +748,54 @@ public class ChemicalRecipes implements Runnable {
 
         // vanilla recipe
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 8),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 8),
                 new ItemStack(Items.melon, 1, 32767))
             .itemOutputs(new ItemStack(Items.speckled_melon, 1, 0))
             .duration(50)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 8),
+                GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Gold, 8),
                 new ItemStack(Items.carrot, 1, 32767))
             .itemOutputs(new ItemStack(Items.golden_carrot, 1, 0))
             .duration(50)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 8),
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 8),
                 new ItemStack(Items.apple, 1, 32767))
             .itemOutputs(new ItemStack(Items.golden_apple, 1, 0))
             .duration(50)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Gold, 8),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Gold, 8),
                 new ItemStack(Items.apple, 1, 32767))
             .itemOutputs(new ItemStack(Items.golden_apple, 1, 1))
             .duration(50)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1),
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderEye, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1),
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.EnderEye, 1))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1),
                 new ItemStack(Items.slime_ball, 1, 32767))
             .itemOutputs(new ItemStack(Items.magma_cream, 1, 0))
             .duration(50)
@@ -807,11 +804,11 @@ public class ChemicalRecipes implements Runnable {
 
         // 1/9U +Air ==Pu== 0.1Rn
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Plutonium, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 8))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Plutonium, 8),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 8))
             .fluidInputs(Materials.Air.getGas(1000))
             .fluidOutputs(Materials.Radon.getGas(100))
             .duration(10 * MINUTES)
@@ -821,59 +818,59 @@ public class ChemicalRecipes implements Runnable {
         // Silicon Line
         // SiO2 + 2Mg = 2MgO + Si
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesia, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesia, 4))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesia, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesia, 4))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 6),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 6),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesia, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesia, 4))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Magnesia, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesia, 4))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(UniversalChemical);
 
         // 3SiF4 + 4Al = 3Si + 4AlF3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.AluminiumFluoride, 16))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.AluminiumFluoride, 16))
             .fluidInputs(Materials.SiliconTetrafluoride.getGas(3000))
             .duration(30 * SECONDS)
             .eut(30)
@@ -881,40 +878,40 @@ public class ChemicalRecipes implements Runnable {
 
         // SiO2 + 4HF = SiF4 + 2H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3),
+                GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.HydrofluoricAcid.getFluid(4000))
             .fluidOutputs(Materials.SiliconTetrafluoride.getGas(1000))
             .duration(15 * SECONDS)
             .eut(30)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 3),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 3),
+                GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.HydrofluoricAcid.getFluid(4000))
             .fluidOutputs(Materials.SiliconTetrafluoride.getGas(1000))
             .duration(15 * SECONDS)
             .eut(30)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 3),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.CertusQuartz, 3),
+                GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.HydrofluoricAcid.getFluid(4000))
             .fluidOutputs(Materials.SiliconTetrafluoride.getGas(1000))
             .duration(15 * SECONDS)
             .eut(30)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 6),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 6),
+                GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.HydrofluoricAcid.getFluid(4000))
             .fluidOutputs(Materials.SiliconTetrafluoride.getGas(1000))
             .duration(15 * SECONDS)
@@ -923,13 +920,13 @@ public class ChemicalRecipes implements Runnable {
 
         // 4Na + SiCl4 = 4NaCl + Si
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 4),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Salt, 8))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Salt, 8))
             .fluidInputs(Materials.SiliconTetrachloride.getFluid(1000))
             .duration(5 * SECONDS)
             .eut(30)
@@ -937,22 +934,22 @@ public class ChemicalRecipes implements Runnable {
 
         // HSiCl3 + 2H = 3HCl + Si
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1), ItemList.Cell_Empty.get(2))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1), ItemList.Cell_Empty.get(2))
             .fluidInputs(Materials.Trichlorosilane.getFluid(1000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(3000))
             .duration(15 * SECONDS)
             .eut(30)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Trichlorosilane, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1), ItemList.Cell_Empty.get(1))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Trichlorosilane, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1), ItemList.Cell_Empty.get(1))
             .fluidInputs(Materials.Hydrogen.getGas(2000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(3000))
             .duration(15 * SECONDS)
@@ -961,9 +958,9 @@ public class ChemicalRecipes implements Runnable {
 
         // 4HSiCl3 = 3SiCl4 + SiH4
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Cell_Empty.get(1), GT_Utility.getIntegratedCircuit(2))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Silane, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Cell_Empty.get(1), GTUtility.getIntegratedCircuit(2))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Silane, 1))
             .fluidInputs(Materials.Trichlorosilane.getFluid(4000))
             .fluidOutputs(Materials.SiliconTetrachloride.getFluid(3000))
             .duration(12 * SECONDS)
@@ -972,9 +969,9 @@ public class ChemicalRecipes implements Runnable {
 
         // SiH4 = Si + 4H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1))
             .fluidInputs(Materials.Silane.getGas(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(4000))
             .duration(15 * SECONDS)
@@ -983,11 +980,11 @@ public class ChemicalRecipes implements Runnable {
 
         // Ca + 2H = CaH2
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calciumhydride, 3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calciumhydride, 3))
             .fluidInputs(Materials.Hydrogen.getGas(2000))
             .duration(20 * SECONDS)
             .eut(30)
@@ -995,10 +992,10 @@ public class ChemicalRecipes implements Runnable {
 
         // Si + 4Cl = SiCl4
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
+                GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.Chlorine.getGas(4000))
             .fluidOutputs(Materials.SiliconTetrachloride.getFluid(1000))
             .duration(20 * SECONDS)
@@ -1007,7 +1004,7 @@ public class ChemicalRecipes implements Runnable {
 
         // 2Na + S = Na2S
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Sodium.getDust(2), Materials.Sulfur.getDust(1))
             .itemOutputs(Materials.SodiumSulfide.getDust(3))
             .duration(60)
@@ -1016,7 +1013,7 @@ public class ChemicalRecipes implements Runnable {
 
         // H2S + H2O + (O2) = 0.5H2SO4(Diluted) ( S loss
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.HydricSulfide.getCells(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Water.getFluid(1000))
@@ -1025,7 +1022,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Water.getCells(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.HydricSulfide.getGas(1000))
@@ -1036,29 +1033,29 @@ public class ChemicalRecipes implements Runnable {
 
         // Ni + 4CO = Ni(CO)4
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.CarbonMonoxide, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.CarbonMonoxide, 4))
             .itemOutputs(ItemList.Cell_Empty.get(4))
             .fluidOutputs(MaterialsKevlar.NickelTetracarbonyl.getFluid(1000))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
+                GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.CarbonMonoxide.getGas(4000))
             .fluidOutputs(MaterialsKevlar.NickelTetracarbonyl.getFluid(1000))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1), ItemList.Cell_Empty.get(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.NickelTetracarbonyl, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1), ItemList.Cell_Empty.get(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.NickelTetracarbonyl, 1))
             .fluidInputs(Materials.CarbonMonoxide.getGas(4000))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_EV)
@@ -1066,10 +1063,10 @@ public class ChemicalRecipes implements Runnable {
 
         // C2H4O + H2O = C2H6O2
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.EthyleneOxide, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.EthyleneOxide, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Cell_Empty.get(1))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(MaterialsKevlar.Ethyleneglycol.getFluid(1000))
@@ -1079,10 +1076,10 @@ public class ChemicalRecipes implements Runnable {
 
         // C2H4 + O = C2H4O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Ethylene, 2),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Ethylene, 2),
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.Cell_Empty.get(2))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .fluidOutputs(MaterialsKevlar.Acetaldehyde.getGas(1000))
@@ -1090,10 +1087,10 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.Cell_Empty.get(1))
             .fluidInputs(Materials.Ethylene.getGas(2000))
             .fluidOutputs(MaterialsKevlar.Acetaldehyde.getGas(1000))
@@ -1103,12 +1100,12 @@ public class ChemicalRecipes implements Runnable {
 
         // NiAl3 + 2NaOH + 2H2O = NiAl + 2NaAlO2 + 6H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, MaterialsKevlar.NickelAluminide, 4),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 6))
+                GTOreDictUnificator.get(OrePrefixes.ingot, MaterialsKevlar.NickelAluminide, 4),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 6))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.RaneyNickelActivated, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.RaneyNickelActivated, 2),
                 Materials.SodiumAluminate.getDust(8))
             .fluidInputs(Materials.Water.getFluid(2000))
             .fluidOutputs(Materials.Hydrogen.getGas(6000))
@@ -1118,22 +1115,22 @@ public class ChemicalRecipes implements Runnable {
 
         // Cu + O = CuO
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CupricOxide, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.CupricOxide, 2),
                 ItemList.Cell_Empty.get(1))
             .duration(5 * SECONDS)
             .eut(30)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CupricOxide, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.CupricOxide, 2))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .duration(5 * SECONDS)
             .eut(30)
@@ -1141,22 +1138,22 @@ public class ChemicalRecipes implements Runnable {
 
         // 2Bi + 3O = Bi2O3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bismuth, 4),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 6))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bismuth, 4),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 6))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.BismuthIIIOxide, 10),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.BismuthIIIOxide, 10),
                 ItemList.Cell_Empty.get(6))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bismuth, 4),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.BismuthIIIOxide, 10))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bismuth, 4),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.BismuthIIIOxide, 10))
             .fluidInputs(Materials.Oxygen.getGas(6000))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_MV)
@@ -1164,21 +1161,21 @@ public class ChemicalRecipes implements Runnable {
 
         // C4H6O2 + CNH5 = C5H9NO + H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.Methylamine, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.GammaButyrolactone, 1))
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.Methylamine, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.GammaButyrolactone, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.NMethylIIPyrrolidone, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1))
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.NMethylIIPyrrolidone, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 8),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 8),
+                GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.Chlorine.getGas(16000))
             .fluidOutputs(MaterialsKevlar.SulfurDichloride.getFluid(8000))
             .duration(40 * SECONDS)
@@ -1187,12 +1184,12 @@ public class ChemicalRecipes implements Runnable {
 
         // SCl2 + SO3 = SO2 + SOCl2
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfurTrioxide, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.SulfurDichloride, 1))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfurTrioxide, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.SulfurDichloride, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.ThionylChloride, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.ThionylChloride, 1),
                 ItemList.Cell_Empty.get(1))
             .fluidOutputs(Materials.SulfurDioxide.getGas(1000))
             .duration(7 * SECONDS + 10 * TICKS)
@@ -1201,11 +1198,11 @@ public class ChemicalRecipes implements Runnable {
 
         // C8H10 + 6O =CoC22H14O4= C8H6O4 + 2H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.IVDimethylbenzene, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CobaltIINaphthenate, 41))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.TerephthalicAcid, 1))
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.IVDimethylbenzene, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CobaltIINaphthenate, 41))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.TerephthalicAcid, 1))
             .fluidInputs(Materials.Oxygen.getGas(6000))
             .fluidOutputs(Materials.Water.getFluid(2000))
             .duration(7 * SECONDS + 10 * TICKS)
@@ -1214,8 +1211,8 @@ public class ChemicalRecipes implements Runnable {
 
         // 2CH4 + C6H6 = C8H10 + 4H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methane.getCells(2), GT_Utility.getIntegratedCircuit(13))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methane.getCells(2), GTUtility.getIntegratedCircuit(13))
             .itemOutputs(MaterialsKevlar.IIIDimethylbenzene.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Benzene.getFluid(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(4000))
@@ -1223,8 +1220,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Benzene.getCells(1), GT_Utility.getIntegratedCircuit(14))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Benzene.getCells(1), GTUtility.getIntegratedCircuit(14))
             .itemOutputs(MaterialsKevlar.IIIDimethylbenzene.getCells(1))
             .fluidInputs(Materials.Methane.getGas(2000))
             .fluidOutputs(Materials.Hydrogen.getGas(4000))
@@ -1234,8 +1231,8 @@ public class ChemicalRecipes implements Runnable {
 
         // 2CH4 + C6H6 = C8H10 + 4H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methane.getCells(2), GT_Utility.getIntegratedCircuit(15))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methane.getCells(2), GTUtility.getIntegratedCircuit(15))
             .itemOutputs(MaterialsKevlar.IVDimethylbenzene.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Benzene.getFluid(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(4000))
@@ -1243,8 +1240,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Benzene.getCells(1), GT_Utility.getIntegratedCircuit(16))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Benzene.getCells(1), GTUtility.getIntegratedCircuit(16))
             .itemOutputs(MaterialsKevlar.IVDimethylbenzene.getCells(1))
             .fluidInputs(Materials.Methane.getGas(2000))
             .fluidOutputs(Materials.Hydrogen.getGas(4000))
@@ -1252,16 +1249,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(MaterialsKevlar.CobaltIIHydroxide.getDust(5), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(MaterialsKevlar.CobaltIIHydroxide.getDust(5), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(MaterialsKevlar.CobaltIINaphthenate.getDust(41))
             .fluidInputs(MaterialsKevlar.NaphthenicAcid.getFluid(1000))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(MaterialsKevlar.CobaltIIAcetate.getDust(15), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(MaterialsKevlar.CobaltIIAcetate.getDust(15), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(MaterialsKevlar.CobaltIINaphthenate.getDust(41))
             .fluidInputs(MaterialsKevlar.NaphthenicAcid.getFluid(1000))
             .fluidOutputs(Materials.AceticAcid.getFluid(1500))
@@ -1271,18 +1268,18 @@ public class ChemicalRecipes implements Runnable {
 
         // Co + 2HNO3 = Co(NO3)2 + 2H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Cobalt.getDust(1), Materials.NitricAcid.getCells(2))
             .itemOutputs(
                 MaterialsKevlar.CobaltIINitrate.getDust(9),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
         // Co(NO3)2 + 2KOH = CoH2O2 + 2KNO3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 MaterialsKevlar.CobaltIINitrate.getDust(9),
                 getModItem(NewHorizonsCoreMod.ID, "item.PotassiumHydroxideDust", 6L, 0))
@@ -1293,7 +1290,7 @@ public class ChemicalRecipes implements Runnable {
 
         // CoO + 2C2H4O2 = CoC4H6O4 + 2H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.CobaltOxide.getDust(2), Materials.AceticAcid.getCells(2))
             .itemOutputs(MaterialsKevlar.CobaltIIAcetate.getDust(15), ItemList.Cell_Empty.get(2))
             .fluidOutputs(Materials.Water.getFluid(2000))
@@ -1301,16 +1298,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Phosphorus.getDust(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Phosphorus.getDust(1), GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Chlorine.getGas(3000))
             .fluidOutputs(MaterialsKevlar.PhosphorusTrichloride.getFluid(1000))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Phosphorus.getDust(9), GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Phosphorus.getDust(9), GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.Chlorine.getGas(27000))
             .fluidOutputs(MaterialsKevlar.PhosphorusTrichloride.getFluid(9000))
             .duration(1 * MINUTES + 15 * SECONDS)
@@ -1319,8 +1316,8 @@ public class ChemicalRecipes implements Runnable {
 
         // Na + H = NaH
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Sodium.getDust(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Sodium.getDust(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(MaterialsKevlar.SodiumHydride.getDust(2))
             .fluidInputs(Materials.Hydrogen.getGas(1000))
             .duration(10 * SECONDS)
@@ -1329,8 +1326,8 @@ public class ChemicalRecipes implements Runnable {
 
         // CH3ONa + H2O = CH4O + NaOH
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(MaterialsKevlar.SodiumMethoxide.getDust(6), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(MaterialsKevlar.SodiumMethoxide.getDust(6), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.SodiumHydroxide.getDust(3))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.Methanol.getFluid(1000))
@@ -1340,8 +1337,8 @@ public class ChemicalRecipes implements Runnable {
 
         // K + HNO3 = KNO3 + H (not real, but gameplay
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Potassium.getDust(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Potassium.getDust(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Saltpeter.getDust(5))
             .fluidInputs(Materials.NitricAcid.getFluid(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(1000))
@@ -1351,8 +1348,8 @@ public class ChemicalRecipes implements Runnable {
 
         // CH3COOH + CH3OH = CH3COOCH3 + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.AceticAcid.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.AceticAcid.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(1000))
             .fluidOutputs(Materials.MethylAcetate.getFluid(1000))
@@ -1360,8 +1357,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(1000))
             .fluidOutputs(Materials.MethylAcetate.getFluid(1000))
@@ -1369,8 +1366,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.AceticAcid.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.AceticAcid.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(1000))
             .fluidOutputs(Materials.MethylAcetate.getFluid(1000))
@@ -1378,8 +1375,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(1000))
             .fluidOutputs(Materials.MethylAcetate.getFluid(1000))
@@ -1387,8 +1384,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.AceticAcid.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.AceticAcid.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.MethylAcetate.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(1000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -1396,8 +1393,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.MethylAcetate.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(1000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -1405,16 +1402,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.AceticAcid.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.AceticAcid.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.MethylAcetate.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(1000))
             .duration(12 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.MethylAcetate.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(1000))
             .duration(12 * SECONDS)
@@ -1423,16 +1420,16 @@ public class ChemicalRecipes implements Runnable {
 
         // CO and CO2 recipes
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Carbon.getDust(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Carbon.getDust(1), GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(1000))
             .duration(2 * SECONDS)
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Coal.getGems(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Coal.getGems(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Ash.getDustTiny(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(1000))
@@ -1440,8 +1437,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Coal.getDust(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Coal.getDust(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Ash.getDustTiny(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(1000))
@@ -1449,8 +1446,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Charcoal.getGems(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Charcoal.getGems(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Ash.getDustTiny(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(1000))
@@ -1458,8 +1455,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Charcoal.getDust(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Charcoal.getDust(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Ash.getDustTiny(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(1000))
@@ -1467,16 +1464,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Carbon.getDust(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Carbon.getDust(1), GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.Oxygen.getGas(2000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(1000))
             .duration(2 * SECONDS)
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Coal.getGems(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Coal.getGems(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Ash.getDustTiny(1))
             .fluidInputs(Materials.Oxygen.getGas(2000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(1000))
@@ -1484,8 +1481,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Coal.getDust(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Coal.getDust(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Ash.getDustTiny(1))
             .fluidInputs(Materials.Oxygen.getGas(2000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(1000))
@@ -1493,8 +1490,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Charcoal.getGems(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Charcoal.getGems(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Ash.getDustTiny(1))
             .fluidInputs(Materials.Oxygen.getGas(2000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(1000))
@@ -1502,8 +1499,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Charcoal.getDust(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Charcoal.getDust(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Ash.getDustTiny(1))
             .fluidInputs(Materials.Oxygen.getGas(2000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(1000))
@@ -1511,7 +1508,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Carbon.getDust(1))
             .fluidInputs(Materials.CarbonDioxide.getGas(1000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(2000))
@@ -1519,8 +1516,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Coal.getGems(9), GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Coal.getGems(9), GTUtility.getIntegratedCircuit(9))
             .itemOutputs(Materials.Ash.getDust(1))
             .fluidInputs(Materials.Oxygen.getGas(9000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(9000))
@@ -1528,8 +1525,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Coal.getDust(9), GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Coal.getDust(9), GTUtility.getIntegratedCircuit(9))
             .itemOutputs(Materials.Ash.getDust(1))
             .fluidInputs(Materials.Oxygen.getGas(9000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(9000))
@@ -1537,8 +1534,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Charcoal.getGems(9), GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Charcoal.getGems(9), GTUtility.getIntegratedCircuit(9))
             .itemOutputs(Materials.Ash.getDust(1))
             .fluidInputs(Materials.Oxygen.getGas(9000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(9000))
@@ -1546,8 +1543,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Charcoal.getDust(9), GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Charcoal.getDust(9), GTUtility.getIntegratedCircuit(9))
             .itemOutputs(Materials.Ash.getDust(1))
             .fluidInputs(Materials.Oxygen.getGas(9000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(9000))
@@ -1555,8 +1552,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Coal.getGems(9), GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Coal.getGems(9), GTUtility.getIntegratedCircuit(8))
             .itemOutputs(Materials.Ash.getDust(1))
             .fluidInputs(Materials.Oxygen.getGas(18000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(9000))
@@ -1564,8 +1561,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Coal.getDust(9), GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Coal.getDust(9), GTUtility.getIntegratedCircuit(8))
             .itemOutputs(Materials.Ash.getDust(1))
             .fluidInputs(Materials.Oxygen.getGas(18000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(9000))
@@ -1573,8 +1570,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Charcoal.getGems(9), GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Charcoal.getGems(9), GTUtility.getIntegratedCircuit(8))
             .itemOutputs(Materials.Ash.getDust(1))
             .fluidInputs(Materials.Oxygen.getGas(18000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(9000))
@@ -1582,8 +1579,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Charcoal.getDust(9), GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Charcoal.getDust(9), GTUtility.getIntegratedCircuit(8))
             .itemOutputs(Materials.Ash.getDust(1))
             .fluidInputs(Materials.Oxygen.getGas(18000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(9000))
@@ -1593,8 +1590,8 @@ public class ChemicalRecipes implements Runnable {
 
         // CO + 4H = CH3OH
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.CarbonMonoxide.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.CarbonMonoxide.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(4000))
             .fluidOutputs(Materials.Methanol.getFluid(1000))
@@ -1602,8 +1599,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Hydrogen.getCells(4), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Hydrogen.getCells(4), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(4))
             .fluidInputs(Materials.CarbonMonoxide.getGas(1000))
             .fluidOutputs(Materials.Methanol.getFluid(1000))
@@ -1611,16 +1608,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.CarbonMonoxide.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.CarbonMonoxide.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Methanol.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(4000))
             .duration(6 * SECONDS)
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Hydrogen.getCells(4), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Hydrogen.getCells(4), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Methanol.getCells(1), Materials.Empty.getCells(3))
             .fluidInputs(Materials.CarbonMonoxide.getGas(1000))
             .duration(6 * SECONDS)
@@ -1629,8 +1626,8 @@ public class ChemicalRecipes implements Runnable {
 
         // CO2 + 6H = CH3OH + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.CarbonDioxide.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.CarbonDioxide.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(6000))
             .fluidOutputs(Materials.Methanol.getFluid(1000))
@@ -1638,8 +1635,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Hydrogen.getCells(6), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Hydrogen.getCells(6), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1), Materials.Empty.getCells(5))
             .fluidInputs(Materials.CarbonDioxide.getGas(1000))
             .fluidOutputs(Materials.Methanol.getFluid(1000))
@@ -1647,8 +1644,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.CarbonDioxide.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.CarbonDioxide.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(6000))
             .fluidOutputs(Materials.Methanol.getFluid(1000))
@@ -1656,8 +1653,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Hydrogen.getCells(6), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Hydrogen.getCells(6), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(6))
             .fluidInputs(Materials.CarbonDioxide.getGas(1000))
             .fluidOutputs(Materials.Methanol.getFluid(1000))
@@ -1665,16 +1662,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.CarbonDioxide.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.CarbonDioxide.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Methanol.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(6000))
             .duration(6 * SECONDS)
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Hydrogen.getCells(6), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Hydrogen.getCells(6), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Methanol.getCells(1), Materials.Empty.getCells(5))
             .fluidInputs(Materials.CarbonDioxide.getGas(1000))
             .duration(6 * SECONDS)
@@ -1683,8 +1680,8 @@ public class ChemicalRecipes implements Runnable {
 
         // CH3OH + CO = CH3COOH
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.CarbonMonoxide.getGas(1000))
             .fluidOutputs(Materials.AceticAcid.getFluid(1000))
@@ -1692,8 +1689,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.CarbonMonoxide.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.CarbonMonoxide.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(1000))
             .fluidOutputs(Materials.AceticAcid.getFluid(1000))
@@ -1701,16 +1698,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.AceticAcid.getCells(1))
             .fluidInputs(Materials.CarbonMonoxide.getGas(1000))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.CarbonMonoxide.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.CarbonMonoxide.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.AceticAcid.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(1000))
             .duration(15 * SECONDS)
@@ -1719,8 +1716,8 @@ public class ChemicalRecipes implements Runnable {
 
         // CH2CH2 + 2O = CH3COOH
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ethylene.getCells(1), GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ethylene.getCells(1), GTUtility.getIntegratedCircuit(9))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(2000))
             .fluidOutputs(Materials.AceticAcid.getFluid(1000))
@@ -1728,8 +1725,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(2), GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(2), GTUtility.getIntegratedCircuit(9))
             .itemOutputs(Materials.Empty.getCells(2))
             .fluidInputs(Materials.Ethylene.getGas(1000))
             .fluidOutputs(Materials.AceticAcid.getFluid(1000))
@@ -1737,16 +1734,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ethylene.getCells(1), GT_Utility.getIntegratedCircuit(19))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ethylene.getCells(1), GTUtility.getIntegratedCircuit(19))
             .itemOutputs(Materials.AceticAcid.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(2000))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(2), GT_Utility.getIntegratedCircuit(19))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(2), GTUtility.getIntegratedCircuit(19))
             .itemOutputs(Materials.AceticAcid.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Ethylene.getGas(1000))
             .duration(5 * SECONDS)
@@ -1755,7 +1752,7 @@ public class ChemicalRecipes implements Runnable {
 
         // O + C2H4O2 + C2H4 = C4H6O2 + H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Ethylene.getCells(1), Materials.AceticAcid.getCells(1))
             .itemOutputs(Materials.Water.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
@@ -1764,7 +1761,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.AceticAcid.getCells(1), Materials.Oxygen.getCells(1))
             .itemOutputs(Materials.Water.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Ethylene.getGas(1000))
@@ -1773,7 +1770,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Oxygen.getCells(1), Materials.Ethylene.getCells(1))
             .itemOutputs(Materials.Water.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(1000))
@@ -1784,8 +1781,8 @@ public class ChemicalRecipes implements Runnable {
 
         // Ethanol -> Ethylene (Intended loss for Sulfuric Acid)
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ethanol.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ethanol.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Ethylene.getCells(1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
             .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(1000))
@@ -1793,8 +1790,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SulfuricAcid.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SulfuricAcid.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Ethylene.getCells(1))
             .fluidInputs(Materials.Ethanol.getFluid(1000))
             .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(1000))
@@ -1802,8 +1799,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ethanol.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ethanol.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.DilutedSulfuricAcid.getCells(1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
             .fluidOutputs(Materials.Ethylene.getGas(1000))
@@ -1811,8 +1808,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SulfuricAcid.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SulfuricAcid.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.DilutedSulfuricAcid.getCells(1))
             .fluidInputs(Materials.Ethanol.getFluid(1000))
             .fluidOutputs(Materials.Ethylene.getGas(1000))
@@ -1822,8 +1819,8 @@ public class ChemicalRecipes implements Runnable {
 
         // H2O + Na = NaOH + H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Sodium.getDust(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Sodium.getDust(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.SodiumHydroxide.getDust(3))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(1000))
@@ -1833,8 +1830,8 @@ public class ChemicalRecipes implements Runnable {
 
         // H + Cl = HCl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(1000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -1842,8 +1839,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Hydrogen.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Hydrogen.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(1000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -1851,16 +1848,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.HydrochloricAcid.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(1000))
             .duration(3 * SECONDS)
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Hydrogen.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Hydrogen.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.HydrochloricAcid.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(1000))
             .duration(3 * SECONDS)
@@ -1869,8 +1866,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C3H6 + 2Cl = HCl + C3H5Cl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.HydrochloricAcid.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Propene.getGas(1000))
             .fluidOutputs(Materials.AllylChloride.getFluid(1000))
@@ -1878,8 +1875,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Propene.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Propene.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.HydrochloricAcid.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(2000))
             .fluidOutputs(Materials.AllylChloride.getFluid(1000))
@@ -1887,8 +1884,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.AllylChloride.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Propene.getGas(1000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -1896,8 +1893,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Propene.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Propene.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.AllylChloride.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(2000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -1907,8 +1904,8 @@ public class ChemicalRecipes implements Runnable {
 
         // 2Cl + H2O = HCl + HClO (Intended loss)
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.DilutedHydrochloricAcid.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.HypochlorousAcid.getFluid(1000))
@@ -1916,8 +1913,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Water.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Water.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.DilutedHydrochloricAcid.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(2000))
             .fluidOutputs(Materials.HypochlorousAcid.getFluid(1000))
@@ -1925,8 +1922,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.HypochlorousAcid.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.DilutedHydrochloricAcid.getFluid(1000))
@@ -1934,8 +1931,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Water.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Water.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.HypochlorousAcid.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(2000))
             .fluidOutputs(Materials.DilutedHydrochloricAcid.getFluid(1000))
@@ -1945,7 +1942,7 @@ public class ChemicalRecipes implements Runnable {
 
         // HClO + NaOH + C3H5Cl = C3H5ClO + NaCl·H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.HypochlorousAcid.getCells(1), Materials.SodiumHydroxide.getDust(3))
             .itemOutputs(Materials.SaltWater.getCells(1))
             .fluidInputs(Materials.AllylChloride.getFluid(1000))
@@ -1954,7 +1951,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(3), Materials.AllylChloride.getCells(1))
             .itemOutputs(Materials.SaltWater.getCells(1))
             .fluidInputs(Materials.HypochlorousAcid.getFluid(1000))
@@ -1963,7 +1960,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.HydrochloricAcid.getCells(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Water.getCells(2))
             .fluidInputs(Materials.Glycerol.getFluid(1000))
@@ -1972,7 +1969,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Glycerol.getCells(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Water.getCells(2))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -1981,8 +1978,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydrochloricAcid.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydrochloricAcid.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Epichlorohydrin.getCells(1))
             .fluidInputs(Materials.Glycerol.getFluid(1000))
             .fluidOutputs(Materials.Water.getFluid(2000))
@@ -1990,8 +1987,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Glycerol.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Glycerol.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Epichlorohydrin.getCells(1))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
             .fluidOutputs(Materials.Water.getFluid(2000))
@@ -1999,8 +1996,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydrochloricAcid.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydrochloricAcid.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Glycerol.getFluid(1000))
             .fluidOutputs(Materials.Epichlorohydrin.getFluid(1000))
@@ -2008,8 +2005,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Glycerol.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Glycerol.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
             .fluidOutputs(Materials.Epichlorohydrin.getFluid(1000))
@@ -2017,16 +2014,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydrochloricAcid.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydrochloricAcid.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Epichlorohydrin.getCells(1))
             .fluidInputs(Materials.Glycerol.getFluid(1000))
             .duration(24 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Glycerol.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Glycerol.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Epichlorohydrin.getCells(1))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
             .duration(24 * SECONDS)
@@ -2035,7 +2032,7 @@ public class ChemicalRecipes implements Runnable {
 
         // P4O10 + 6H2O = 4H3PO4
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.PhosphorousPentoxide.getDust(14))
             .fluidInputs(Materials.Water.getFluid(6000))
             .fluidOutputs(Materials.PhosphoricAcid.getFluid(4000))
@@ -2045,8 +2042,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C9H12 + 2O = C6H6O + C3H6O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Cumene.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Cumene.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Phenol.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(2000))
             .fluidOutputs(Materials.Acetone.getFluid(1000))
@@ -2054,8 +2051,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Phenol.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Cumene.getFluid(1000))
             .fluidOutputs(Materials.Acetone.getFluid(1000))
@@ -2063,8 +2060,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Cumene.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Cumene.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Acetone.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(2000))
             .fluidOutputs(Materials.Phenol.getFluid(1000))
@@ -2072,8 +2069,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Acetone.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Cumene.getFluid(1000))
             .fluidOutputs(Materials.Phenol.getFluid(1000))
@@ -2083,7 +2080,7 @@ public class ChemicalRecipes implements Runnable {
 
         // C15H16O2 + 2C3H5ClO + 2NaOH = C15H14O2(C3H5O)2 + 2NaCl·H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(6), Materials.Epichlorohydrin.getCells(2))
             .itemOutputs(Materials.SaltWater.getCells(2))
             .fluidInputs(Materials.BisphenolA.getFluid(1000))
@@ -2094,8 +2091,8 @@ public class ChemicalRecipes implements Runnable {
 
         // CH4O + HCl = CH3Cl + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
             .fluidOutputs(Materials.Chloromethane.getGas(1000))
@@ -2103,8 +2100,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydrochloricAcid.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydrochloricAcid.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(1000))
             .fluidOutputs(Materials.Chloromethane.getGas(1000))
@@ -2112,8 +2109,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Chloromethane.getCells(1))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -2121,8 +2118,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydrochloricAcid.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydrochloricAcid.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Chloromethane.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(1000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -2130,8 +2127,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
             .fluidOutputs(Materials.Chloromethane.getGas(1000))
@@ -2139,8 +2136,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydrochloricAcid.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydrochloricAcid.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(1000))
             .fluidOutputs(Materials.Chloromethane.getGas(1000))
@@ -2148,24 +2145,24 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Chloromethane.getCells(1))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
             .duration(8 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydrochloricAcid.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydrochloricAcid.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Chloromethane.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(1000))
             .duration(8 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.HydrochloricAcid.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Methane.getGas(1000))
             .fluidOutputs(Materials.Chloromethane.getGas(1000))
@@ -2173,8 +2170,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methane.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methane.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.HydrochloricAcid.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(2000))
             .fluidOutputs(Materials.Chloromethane.getGas(1000))
@@ -2182,8 +2179,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Chloromethane.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Methane.getGas(1000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -2191,8 +2188,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methane.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methane.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Chloromethane.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(2000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -2202,8 +2199,8 @@ public class ChemicalRecipes implements Runnable {
 
         // Cl6 + CH4 = CHCl3 + 3HCl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(6), GT_Utility.getIntegratedCircuit(3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(6), GTUtility.getIntegratedCircuit(3))
             .itemOutputs(Materials.HydrochloricAcid.getCells(3), Materials.Empty.getCells(3))
             .fluidInputs(Materials.Methane.getGas(1000))
             .fluidOutputs(Materials.Chloroform.getFluid(1000))
@@ -2211,8 +2208,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(6), GT_Utility.getIntegratedCircuit(13))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(6), GTUtility.getIntegratedCircuit(13))
             .itemOutputs(Materials.Chloroform.getCells(1), Materials.Empty.getCells(5))
             .fluidInputs(Materials.Methane.getGas(1000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(3000))
@@ -2220,8 +2217,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methane.getCells(1), GT_Utility.getIntegratedCircuit(13))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methane.getCells(1), GTUtility.getIntegratedCircuit(13))
             .itemOutputs(Materials.Chloroform.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(6000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(3000))
@@ -2231,8 +2228,8 @@ public class ChemicalRecipes implements Runnable {
 
         // H + F = HF
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Fluorine.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Fluorine.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(1000))
             .fluidOutputs(Materials.HydrofluoricAcid.getFluid(1000))
@@ -2240,8 +2237,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Hydrogen.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Hydrogen.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Fluorine.getGas(1000))
             .fluidOutputs(Materials.HydrofluoricAcid.getFluid(1000))
@@ -2249,16 +2246,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Fluorine.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Fluorine.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.HydrofluoricAcid.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(1000))
             .duration(3 * SECONDS)
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Hydrogen.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Hydrogen.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.HydrofluoricAcid.getCells(1))
             .fluidInputs(Materials.Fluorine.getGas(1000))
             .duration(3 * SECONDS)
@@ -2267,7 +2264,7 @@ public class ChemicalRecipes implements Runnable {
 
         // 4HF + 2CHCl3 = C2F4 + 6HCl
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Chloroform.getCells(2), Materials.HydrofluoricAcid.getCells(4))
             .itemOutputs(Materials.HydrochloricAcid.getCells(6))
             .fluidOutputs(Materials.Tetrafluoroethylene.getGas(1000))
@@ -2275,7 +2272,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Chloroform.getCells(2), Materials.Empty.getCells(4))
             .itemOutputs(Materials.HydrochloricAcid.getCells(6))
             .fluidInputs(Materials.HydrofluoricAcid.getFluid(4000))
@@ -2284,7 +2281,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.HydrofluoricAcid.getCells(4), Materials.Empty.getCells(2))
             .itemOutputs(Materials.HydrochloricAcid.getCells(6))
             .fluidInputs(Materials.Chloroform.getFluid(2000))
@@ -2293,8 +2290,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydrofluoricAcid.getCells(4), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydrofluoricAcid.getCells(4), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Tetrafluoroethylene.getCells(1), Materials.Empty.getCells(3))
             .fluidInputs(Materials.Chloroform.getFluid(2000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(6000))
@@ -2302,8 +2299,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chloroform.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chloroform.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Tetrafluoroethylene.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.HydrofluoricAcid.getFluid(4000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(6000))
@@ -2313,16 +2310,16 @@ public class ChemicalRecipes implements Runnable {
 
         // Si + 2CH3Cl = C2H6Cl2Si
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Silicon.getDust(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Silicon.getDust(1), GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Chloromethane.getGas(2000))
             .fluidOutputs(Materials.Dimethyldichlorosilane.getFluid(1000))
             .duration(12 * SECONDS)
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Dimethyldichlorosilane.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Dimethyldichlorosilane.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Polydimethylsiloxane.getDust(3), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.DilutedHydrochloricAcid.getFluid(1000))
@@ -2330,8 +2327,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Water.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Water.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Polydimethylsiloxane.getDust(3), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Dimethyldichlorosilane.getFluid(1000))
             .fluidOutputs(Materials.DilutedHydrochloricAcid.getFluid(1000))
@@ -2339,23 +2336,23 @@ public class ChemicalRecipes implements Runnable {
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Dimethyldichlorosilane.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Dimethyldichlorosilane.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Polydimethylsiloxane.getDust(3), Materials.DilutedHydrochloricAcid.getCells(1))
             .fluidInputs(Materials.Water.getFluid(1000))
             .duration(12 * SECONDS)
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Water.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Water.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Polydimethylsiloxane.getDust(3), Materials.DilutedHydrochloricAcid.getCells(1))
             .fluidInputs(Materials.Dimethyldichlorosilane.getFluid(1000))
             .duration(12 * SECONDS)
             .eut(96)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Polydimethylsiloxane.getDust(9), Materials.Sulfur.getDust(1))
             .fluidOutputs(Materials.Silicone.getMolten(1296))
             .duration(30 * SECONDS)
@@ -2365,8 +2362,8 @@ public class ChemicalRecipes implements Runnable {
         // Potassium Nitride
         // K + HNO3 = KNO3 + H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Potassium.getDust(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Potassium.getDust(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.PotassiumNitrade.getDust(5))
             .fluidInputs(Materials.NitricAcid.getFluid(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(1000))
@@ -2377,8 +2374,8 @@ public class ChemicalRecipes implements Runnable {
         // Chromium Trioxide
         // CrO2 + O = CrO3
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.ChromiumDioxide.getDust(3), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.ChromiumDioxide.getDust(3), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.ChromiumTrioxide.getDust(4))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .duration(5 * SECONDS)
@@ -2388,8 +2385,8 @@ public class ChemicalRecipes implements Runnable {
         // Nitrochlorobenzene
         // C6H5Cl + HNO3 = C6H4ClNO2 + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorobenzene.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorobenzene.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Nitrochlorobenzene.getCells(1))
             .fluidInputs(Materials.NitrationMixture.getFluid(2000))
             .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(1000))
@@ -2397,8 +2394,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorobenzene.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorobenzene.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.DilutedSulfuricAcid.getCells(1))
             .fluidInputs(Materials.NitrationMixture.getFluid(2000))
             .fluidOutputs(Materials.Nitrochlorobenzene.getFluid(1000))
@@ -2406,8 +2403,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitrationMixture.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitrationMixture.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Nitrochlorobenzene.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Chlorobenzene.getFluid(1000))
             .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(1000))
@@ -2415,8 +2412,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitrationMixture.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitrationMixture.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.DilutedSulfuricAcid.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Chlorobenzene.getFluid(1000))
             .fluidOutputs(Materials.Nitrochlorobenzene.getFluid(1000))
@@ -2426,8 +2423,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C6H6 + 2CH4 = C8H10 + 4H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methane.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methane.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Dimethylbenzene.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Benzene.getFluid(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(4000))
@@ -2435,8 +2432,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Benzene.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Benzene.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Dimethylbenzene.getCells(1))
             .fluidInputs(Materials.Methane.getGas(2000))
             .fluidOutputs(Materials.Hydrogen.getGas(4000))
@@ -2447,7 +2444,7 @@ public class ChemicalRecipes implements Runnable {
         // Phthalic Acid
         // C8H10 + 6O =K2Cr2O7= C8H6O4 + 2H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Dimethylbenzene.getCells(1), Materials.Potassiumdichromate.getDustTiny(1))
             .itemOutputs(Materials.PhthalicAcid.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(6000))
@@ -2456,7 +2453,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Oxygen.getCells(6), Materials.Potassiumdichromate.getDustTiny(1))
             .itemOutputs(Materials.PhthalicAcid.getCells(1), ItemList.Cell_Empty.get(5))
             .fluidInputs(Materials.Dimethylbenzene.getFluid(1000))
@@ -2465,7 +2462,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Dimethylbenzene.getCells(9), Materials.Potassiumdichromate.getDust(1))
             .itemOutputs(Materials.PhthalicAcid.getCells(9))
             .fluidInputs(Materials.Oxygen.getGas(54000))
@@ -2474,7 +2471,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Oxygen.getCells(54), Materials.Potassiumdichromate.getDust(1))
             .itemOutputs(Materials.PhthalicAcid.getCells(9), ItemList.Cell_Empty.get(45))
             .fluidInputs(Materials.Dimethylbenzene.getFluid(9000))
@@ -2487,16 +2484,16 @@ public class ChemicalRecipes implements Runnable {
         // But they are kept in gamewise, too much existed setup will be broken.
         // Dichlorobenzidine
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Copper.getDustTiny(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Copper.getDustTiny(1), GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Nitrochlorobenzene.getFluid(2000))
             .fluidOutputs(Materials.Dichlorobenzidine.getFluid(1000))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Copper.getDust(1), GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Copper.getDust(1), GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.Nitrochlorobenzene.getFluid(18000))
             .fluidOutputs(Materials.Dichlorobenzidine.getFluid(9000))
             .duration(1 * MINUTES + 30 * SECONDS)
@@ -2505,7 +2502,7 @@ public class ChemicalRecipes implements Runnable {
 
         // Diphenyl Isophthalate
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.PhthalicAcid.getCells(1), Materials.SulfuricAcid.getCells(1))
             .itemOutputs(Materials.Diphenylisophthalate.getCells(1), ItemList.Cell_Empty.get(1))
             .fluidInputs(Materials.Phenol.getFluid(2000))
@@ -2514,7 +2511,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_IV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.PhthalicAcid.getCells(1), Materials.Phenol.getCells(2))
             .itemOutputs(Materials.Diphenylisophthalate.getCells(1), ItemList.Cell_Empty.get(2))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
@@ -2523,7 +2520,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_IV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SulfuricAcid.getCells(1), Materials.Phenol.getCells(2))
             .itemOutputs(Materials.Diphenylisophthalate.getCells(1), ItemList.Cell_Empty.get(2))
             .fluidInputs(Materials.PhthalicAcid.getFluid(1000))
@@ -2534,7 +2531,7 @@ public class ChemicalRecipes implements Runnable {
 
         // Diaminobenzidin
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Ammonia.getCells(2), Materials.Zinc.getDust(1))
             .itemOutputs(Materials.Diaminobenzidin.getCells(1), ItemList.Cell_Empty.get(1))
             .fluidInputs(Materials.Dichlorobenzidine.getFluid(1000))
@@ -2546,7 +2543,7 @@ public class ChemicalRecipes implements Runnable {
         // Polybenzimidazole
         // C12H14N4 + C20H14O4 = C20H12N4 + 2C6H6O + 2H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Diphenylisophthalate.getCells(1), Materials.Diaminobenzidin.getCells(1))
             .itemOutputs(Materials.Phenol.getCells(2))
             .fluidOutputs(Materials.Polybenzimidazole.getMolten(1000))
@@ -2554,10 +2551,10 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_IV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1))
             .itemOutputs(getModItem(Railcraft.ID, "glass", 6))
             .fluidInputs(Materials.Glass.getMolten(864))
             .duration(2 * SECONDS + 10 * TICKS)
@@ -2566,8 +2563,8 @@ public class ChemicalRecipes implements Runnable {
 
         // NH3 + 2CH4O = C2H7N + 2H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(2))
             .fluidInputs(Materials.Ammonia.getGas(1000))
             .fluidOutputs(Materials.Dimethylamine.getGas(1000))
@@ -2575,8 +2572,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Dimethylamine.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Ammonia.getGas(1000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -2584,8 +2581,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ammonia.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ammonia.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Dimethylamine.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(2000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -2593,8 +2590,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(2), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(2), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(2))
             .fluidInputs(Materials.Ammonia.getGas(1000))
             .fluidOutputs(Materials.Dimethylamine.getGas(1000))
@@ -2602,16 +2599,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Methanol.getCells(2), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Methanol.getCells(2), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Dimethylamine.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Ammonia.getGas(1000))
             .duration(12 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ammonia.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ammonia.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Dimethylamine.getCells(1))
             .fluidInputs(Materials.Methanol.getFluid(2000))
             .duration(12 * SECONDS)
@@ -2620,8 +2617,8 @@ public class ChemicalRecipes implements Runnable {
 
         // NH3 + HClO = NH2Cl + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ammonia.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ammonia.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1))
             .fluidInputs(Materials.HypochlorousAcid.getFluid(1000))
             .fluidOutputs(Materials.Chloramine.getFluid(1000))
@@ -2629,8 +2626,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HypochlorousAcid.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HypochlorousAcid.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1))
             .fluidInputs(Materials.Ammonia.getGas(1000))
             .fluidOutputs(Materials.Chloramine.getFluid(1000))
@@ -2638,8 +2635,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ammonia.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ammonia.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Chloramine.getCells(1))
             .fluidInputs(Materials.HypochlorousAcid.getFluid(1000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -2647,8 +2644,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HypochlorousAcid.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HypochlorousAcid.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Chloramine.getCells(1))
             .fluidInputs(Materials.Ammonia.getGas(1000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -2656,8 +2653,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ammonia.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ammonia.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.HypochlorousAcid.getFluid(1000))
             .fluidOutputs(Materials.Chloramine.getFluid(1000))
@@ -2665,8 +2662,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HypochlorousAcid.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HypochlorousAcid.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Ammonia.getGas(1000))
             .fluidOutputs(Materials.Chloramine.getFluid(1000))
@@ -2674,16 +2671,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ammonia.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ammonia.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Chloramine.getCells(1))
             .fluidInputs(Materials.HypochlorousAcid.getFluid(1000))
             .duration(8 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HypochlorousAcid.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HypochlorousAcid.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Chloramine.getCells(1))
             .fluidInputs(Materials.Ammonia.getGas(1000))
             .duration(8 * SECONDS)
@@ -2692,24 +2689,24 @@ public class ChemicalRecipes implements Runnable {
 
         // 2NO2 = N2O4
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.NitrogenDioxide.getGas(2000))
             .fluidOutputs(Materials.DinitrogenTetroxide.getGas(1000))
             .duration(32 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitrogenDioxide.getCells(2), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitrogenDioxide.getCells(2), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(2))
             .fluidOutputs(Materials.DinitrogenTetroxide.getGas(1000))
             .duration(32 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitrogenDioxide.getCells(2), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitrogenDioxide.getCells(2), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.DinitrogenTetroxide.getCells(1), Materials.Empty.getCells(1))
             .duration(32 * SECONDS)
             .eut(TierEU.RECIPE_LV)
@@ -2717,8 +2714,8 @@ public class ChemicalRecipes implements Runnable {
 
         // 2NH3 + 5O = 2NO + 3H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ammonia.getCells(4), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ammonia.getCells(4), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.NitricOxide.getCells(4))
             .fluidInputs(Materials.Oxygen.getGas(10000))
             .fluidOutputs(Materials.Water.getFluid(6000))
@@ -2726,8 +2723,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(10), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(10), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.NitricOxide.getCells(4), Materials.Empty.getCells(6))
             .fluidInputs(Materials.Ammonia.getGas(4000))
             .fluidOutputs(Materials.Water.getFluid(6000))
@@ -2735,8 +2732,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(10), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(10), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Water.getCells(6), Materials.Empty.getCells(4))
             .fluidInputs(Materials.Ammonia.getGas(4000))
             .fluidOutputs(Materials.NitricOxide.getGas(4000))
@@ -2744,24 +2741,24 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ammonia.getCells(4), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ammonia.getCells(4), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.NitricOxide.getCells(4))
             .fluidInputs(Materials.Oxygen.getGas(10000))
             .duration(16 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(10), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(10), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.NitricOxide.getCells(4), Materials.Empty.getCells(6))
             .fluidInputs(Materials.Ammonia.getGas(4000))
             .duration(16 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(10), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(10), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Empty.getCells(10))
             .fluidInputs(Materials.Ammonia.getGas(4000))
             .fluidOutputs(Materials.NitricOxide.getGas(4000))
@@ -2771,8 +2768,8 @@ public class ChemicalRecipes implements Runnable {
 
         // NO + O = NO2
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitricOxide.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitricOxide.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .fluidOutputs(Materials.NitrogenDioxide.getGas(1000))
@@ -2780,8 +2777,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.NitricOxide.getGas(1000))
             .fluidOutputs(Materials.NitrogenDioxide.getGas(1000))
@@ -2789,16 +2786,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitricOxide.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitricOxide.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.NitrogenDioxide.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .duration(8 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.NitrogenDioxide.getCells(1))
             .fluidInputs(Materials.NitricOxide.getGas(1000))
             .duration(8 * SECONDS)
@@ -2807,8 +2804,8 @@ public class ChemicalRecipes implements Runnable {
 
         // H2O + 3NO2 = 2HNO3 + NO
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Water.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Water.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.NitricOxide.getCells(1))
             .fluidInputs(Materials.NitrogenDioxide.getGas(3000))
             .fluidOutputs(Materials.NitricAcid.getFluid(2000))
@@ -2816,8 +2813,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitrogenDioxide.getCells(3), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitrogenDioxide.getCells(3), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.NitricOxide.getCells(1), Materials.Empty.getCells(2))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.NitricAcid.getFluid(2000))
@@ -2825,8 +2822,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitrogenDioxide.getCells(3), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitrogenDioxide.getCells(3), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.NitricAcid.getCells(2), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.NitricOxide.getGas(1000))
@@ -2836,8 +2833,8 @@ public class ChemicalRecipes implements Runnable {
 
         // S + 2H = H2S
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Sulfur.getDust(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Sulfur.getDust(1), GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Hydrogen.getGas(2000))
             .fluidOutputs(Materials.HydricSulfide.getGas(1000))
             .duration(3 * SECONDS)
@@ -2846,8 +2843,8 @@ public class ChemicalRecipes implements Runnable {
 
         // S + 2O = SO2
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Sulfur.getDust(1), GT_Utility.getIntegratedCircuit(3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Sulfur.getDust(1), GTUtility.getIntegratedCircuit(3))
             .fluidInputs(Materials.Oxygen.getGas(2000))
             .fluidOutputs(Materials.SulfurDioxide.getGas(1000))
             .duration(3 * SECONDS)
@@ -2856,8 +2853,8 @@ public class ChemicalRecipes implements Runnable {
 
         // H2S + 3O = SO2 + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydricSulfide.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydricSulfide.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(3000))
             .fluidOutputs(Materials.SulfurDioxide.getGas(1000))
@@ -2865,8 +2862,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(3), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(3), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1), Materials.Empty.getCells(2))
             .fluidInputs(Materials.HydricSulfide.getGas(1000))
             .fluidOutputs(Materials.SulfurDioxide.getGas(1000))
@@ -2874,8 +2871,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydricSulfide.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydricSulfide.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.SulfurDioxide.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(3000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -2883,8 +2880,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(3), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(3), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.SulfurDioxide.getCells(1), Materials.Empty.getCells(2))
             .fluidInputs(Materials.HydricSulfide.getGas(1000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -2892,8 +2889,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydricSulfide.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydricSulfide.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(3000))
             .fluidOutputs(Materials.SulfurDioxide.getGas(1000))
@@ -2901,8 +2898,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(3), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(3), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Empty.getCells(3))
             .fluidInputs(Materials.HydricSulfide.getGas(1000))
             .fluidOutputs(Materials.SulfurDioxide.getGas(1000))
@@ -2910,16 +2907,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydricSulfide.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydricSulfide.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.SulfurDioxide.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(3000))
             .duration(6 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(3), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(3), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.SulfurDioxide.getCells(1), Materials.Empty.getCells(2))
             .fluidInputs(Materials.HydricSulfide.getGas(1000))
             .duration(6 * SECONDS)
@@ -2928,8 +2925,8 @@ public class ChemicalRecipes implements Runnable {
 
         // 2H2S + SO2 = 3S + 2H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SulfurDioxide.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SulfurDioxide.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Sulfur.getDust(3), Materials.Empty.getCells(1))
             .fluidInputs(Materials.HydricSulfide.getGas(2000))
             .fluidOutputs(Materials.Water.getFluid(2000))
@@ -2937,8 +2934,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydricSulfide.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydricSulfide.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Sulfur.getDust(3), Materials.Empty.getCells(2))
             .fluidInputs(Materials.SulfurDioxide.getGas(1000))
             .fluidOutputs(Materials.Water.getFluid(2000))
@@ -2946,16 +2943,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SulfurDioxide.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SulfurDioxide.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Sulfur.getDust(3), Materials.Empty.getCells(1))
             .fluidInputs(Materials.HydricSulfide.getGas(2000))
             .duration(6 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydricSulfide.getCells(2), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydricSulfide.getCells(2), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Sulfur.getDust(3), Materials.Empty.getCells(2))
             .fluidInputs(Materials.SulfurDioxide.getGas(1000))
             .duration(6 * SECONDS)
@@ -2964,8 +2961,8 @@ public class ChemicalRecipes implements Runnable {
 
         // SO2 + O = SO3
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.SulfurDioxide.getGas(1000))
             .fluidOutputs(Materials.SulfurTrioxide.getGas(1000))
@@ -2973,8 +2970,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SulfurDioxide.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SulfurDioxide.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .fluidOutputs(Materials.SulfurTrioxide.getGas(1000))
@@ -2982,16 +2979,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.SulfurTrioxide.getCells(1))
             .fluidInputs(Materials.SulfurDioxide.getGas(1000))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SulfurDioxide.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SulfurDioxide.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.SulfurTrioxide.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .duration(10 * SECONDS)
@@ -3000,8 +2997,8 @@ public class ChemicalRecipes implements Runnable {
 
         // SO3 + H2O = H2SO4
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Water.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Water.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.SulfurTrioxide.getGas(1000))
             .fluidOutputs(Materials.SulfuricAcid.getFluid(1000))
@@ -3009,8 +3006,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SulfurTrioxide.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SulfurTrioxide.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.SulfuricAcid.getFluid(1000))
@@ -3018,16 +3015,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Water.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Water.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.SulfuricAcid.getCells(1))
             .fluidInputs(Materials.SulfurTrioxide.getGas(1000))
             .duration(16 * SECONDS)
             .eut(8)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SulfurTrioxide.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SulfurTrioxide.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.SulfuricAcid.getCells(1))
             .fluidInputs(Materials.Water.getFluid(1000))
             .duration(16 * SECONDS)
@@ -3036,8 +3033,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C2H4 + 2Cl = C2H3Cl + HCl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.HydrochloricAcid.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Ethylene.getGas(1000))
             .fluidOutputs(Materials.VinylChloride.getGas(1000))
@@ -3045,8 +3042,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ethylene.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ethylene.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.HydrochloricAcid.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(2000))
             .fluidOutputs(Materials.VinylChloride.getGas(1000))
@@ -3054,8 +3051,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.VinylChloride.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Ethylene.getGas(1000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -3063,8 +3060,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ethylene.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ethylene.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.VinylChloride.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(2000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -3074,8 +3071,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C2H4O2 =H2SO4= C2H2O + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.AceticAcid.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.AceticAcid.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Ethenone.getCells(1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
             .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(1000))
@@ -3083,8 +3080,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SulfuricAcid.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SulfuricAcid.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Ethenone.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(1000))
             .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(1000))
@@ -3092,8 +3089,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.AceticAcid.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.AceticAcid.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.DilutedSulfuricAcid.getCells(1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
             .fluidOutputs(Materials.Ethenone.getGas(1000))
@@ -3101,8 +3098,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SulfuricAcid.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SulfuricAcid.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.DilutedSulfuricAcid.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(1000))
             .fluidOutputs(Materials.Ethenone.getGas(1000))
@@ -3113,7 +3110,7 @@ public class ChemicalRecipes implements Runnable {
         // C2H2O + 8HNO3 = 2CN4O8 + 9H2O
         // Chemically this recipe is wrong, but kept for minimizing breaking change.
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Ethenone.getCells(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Tetranitromethane.getCells(2))
             .fluidInputs(Materials.NitricAcid.getFluid(8000))
@@ -3122,8 +3119,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ethenone.getCells(1), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ethenone.getCells(1), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.NitricAcid.getFluid(8000))
             .fluidOutputs(Materials.Tetranitromethane.getFluid(2000))
@@ -3131,8 +3128,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitricAcid.getCells(8), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitricAcid.getCells(8), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Tetranitromethane.getCells(2), Materials.Empty.getCells(6))
             .fluidInputs(Materials.Ethenone.getGas(1000))
             .fluidOutputs(Materials.Water.getFluid(9000))
@@ -3140,16 +3137,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitricAcid.getCells(8), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitricAcid.getCells(8), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Tetranitromethane.getCells(2), Materials.Empty.getCells(6))
             .fluidInputs(Materials.Ethenone.getGas(1000))
             .duration(24 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitricAcid.getCells(8), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitricAcid.getCells(8), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.Empty.getCells(8))
             .fluidInputs(Materials.Ethenone.getGas(1000))
             .fluidOutputs(Materials.Tetranitromethane.getFluid(2000))
@@ -3157,7 +3154,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.NitricAcid.getCells(8), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Water.getCells(9))
             .fluidInputs(Materials.Ethenone.getGas(1000))
@@ -3166,7 +3163,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Ethenone.getCells(1), Materials.NitricAcid.getCells(8))
             .itemOutputs(Materials.Water.getCells(9))
             .fluidOutputs(Materials.Tetranitromethane.getFluid(2000))
@@ -3176,7 +3173,7 @@ public class ChemicalRecipes implements Runnable {
 
         // C3H6 + C2H4 = C5H8 + 2H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Propene.getCells(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Hydrogen.getCells(2))
             .fluidInputs(Materials.Ethylene.getGas(1000))
@@ -3185,7 +3182,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Ethylene.getCells(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Hydrogen.getCells(2))
             .fluidInputs(Materials.Propene.getGas(1000))
@@ -3194,8 +3191,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Propene.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Propene.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Isoprene.getCells(1))
             .fluidInputs(Materials.Ethylene.getGas(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(2000))
@@ -3203,8 +3200,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ethylene.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ethylene.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Isoprene.getCells(1))
             .fluidInputs(Materials.Propene.getGas(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(2000))
@@ -3212,8 +3209,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Empty.getCells(1), GT_Utility.getIntegratedCircuit(5))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Empty.getCells(1), GTUtility.getIntegratedCircuit(5))
             .itemOutputs(Materials.Methane.getCells(1))
             .fluidInputs(Materials.Propene.getGas(2000))
             .fluidOutputs(Materials.Isoprene.getFluid(1000))
@@ -3221,16 +3218,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Propene.getCells(2), GT_Utility.getIntegratedCircuit(5))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Propene.getCells(2), GTUtility.getIntegratedCircuit(5))
             .itemOutputs(Materials.Methane.getCells(1), Materials.Empty.getCells(1))
             .fluidOutputs(Materials.Isoprene.getFluid(1000))
             .duration(6 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Empty.getCells(1), GT_Utility.getIntegratedCircuit(15))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Empty.getCells(1), GTUtility.getIntegratedCircuit(15))
             .itemOutputs(Materials.Isoprene.getCells(1))
             .fluidInputs(Materials.Propene.getGas(2000))
             .fluidOutputs(Materials.Methane.getGas(1000))
@@ -3238,48 +3235,48 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Propene.getCells(2), GT_Utility.getIntegratedCircuit(15))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Propene.getCells(2), GTUtility.getIntegratedCircuit(15))
             .itemOutputs(Materials.Isoprene.getCells(1), Materials.Empty.getCells(1))
             .fluidOutputs(Materials.Methane.getGas(1000))
             .duration(6 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Cell_Air.get(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Cell_Air.get(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.RawRubber.getDust(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Isoprene.getFluid(144))
             .duration(8 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.RawRubber.getDust(3), Materials.Empty.getCells(2))
             .fluidInputs(Materials.Isoprene.getFluid(288))
             .duration(16 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Isoprene.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Isoprene.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.RawRubber.getDust(7), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Air.getGas(14000))
             .duration(56 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Isoprene.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Isoprene.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.RawRubber.getDust(21), Materials.Empty.getCells(2))
             .fluidInputs(Materials.Oxygen.getGas(14000))
             .duration(1 * MINUTES + 52 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Benzene.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Benzene.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Styrene.getCells(1))
             .fluidInputs(Materials.Ethylene.getGas(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(2000))
@@ -3287,8 +3284,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Ethylene.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Ethylene.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Styrene.getCells(1))
             .fluidInputs(Materials.Benzene.getFluid(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(2000))
@@ -3296,7 +3293,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.RawStyreneButadieneRubber.getDust(9), Materials.Sulfur.getDust(1))
             .fluidOutputs(Materials.StyreneButadieneRubber.getMolten(1296))
             .duration(30 * SECONDS)
@@ -3305,8 +3302,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C6H6 + 4Cl = C6H4Cl2 + 2HCl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Benzene.getCells(1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Benzene.getCells(1), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Dichlorobenzene.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(4000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(2000))
@@ -3314,8 +3311,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(4), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(4), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Dichlorobenzene.getCells(1), Materials.Empty.getCells(3))
             .fluidInputs(Materials.Benzene.getFluid(1000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(2000))
@@ -3323,8 +3320,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(4), GT_Utility.getIntegratedCircuit(12))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(4), GTUtility.getIntegratedCircuit(12))
             .itemOutputs(Materials.HydrochloricAcid.getCells(2), Materials.Empty.getCells(2))
             .fluidInputs(Materials.Benzene.getFluid(1000))
             .fluidOutputs(Materials.Dichlorobenzene.getFluid(1000))
@@ -3332,7 +3329,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumSulfide.getDust(3), ItemList.Cell_Air.get(8))
             .itemOutputs(Materials.Salt.getDust(4), Materials.Empty.getCells(8))
             .fluidInputs(Materials.Dichlorobenzene.getFluid(1000))
@@ -3341,7 +3338,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumSulfide.getDust(3), Materials.Oxygen.getCells(8))
             .itemOutputs(Materials.Salt.getDust(4), Materials.Empty.getCells(8))
             .fluidInputs(Materials.Dichlorobenzene.getFluid(1000))
@@ -3352,8 +3349,8 @@ public class ChemicalRecipes implements Runnable {
 
         // NaCl + H2SO4 = NaHSO4 + HCl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Salt.getDust(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Salt.getDust(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.SodiumBisulfate.getDust(7))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -3363,8 +3360,8 @@ public class ChemicalRecipes implements Runnable {
 
         // NaOH + H2SO4 = NaHSO4 + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SodiumHydroxide.getDust(3), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SodiumHydroxide.getDust(3), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.SodiumBisulfate.getDust(7))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -3374,7 +3371,7 @@ public class ChemicalRecipes implements Runnable {
 
         // Biodiesel recipes
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDustTiny(1), Materials.Methanol.getCells(1))
             .itemOutputs(Materials.Glycerol.getCells(1))
             .fluidInputs(Materials.SeedOil.getFluid(6000))
@@ -3383,7 +3380,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDustTiny(1), Materials.SeedOil.getCells(6))
             .itemOutputs(Materials.BioDiesel.getCells(6))
             .fluidInputs(Materials.Methanol.getFluid(1000))
@@ -3392,7 +3389,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDustTiny(1), Materials.Methanol.getCells(1))
             .itemOutputs(Materials.Glycerol.getCells(1))
             .fluidInputs(Materials.FishOil.getFluid(6000))
@@ -3401,7 +3398,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDustTiny(1), Materials.FishOil.getCells(6))
             .itemOutputs(Materials.BioDiesel.getCells(6))
             .fluidInputs(Materials.Methanol.getFluid(1000))
@@ -3410,7 +3407,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDustTiny(1), Materials.Ethanol.getCells(1))
             .itemOutputs(Materials.Glycerol.getCells(1))
             .fluidInputs(Materials.SeedOil.getFluid(6000))
@@ -3419,7 +3416,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDustTiny(1), Materials.SeedOil.getCells(6))
             .itemOutputs(Materials.BioDiesel.getCells(6))
             .fluidInputs(Materials.Ethanol.getFluid(1000))
@@ -3428,7 +3425,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDustTiny(1), Materials.Ethanol.getCells(1))
             .itemOutputs(Materials.Glycerol.getCells(1))
             .fluidInputs(Materials.FishOil.getFluid(6000))
@@ -3437,7 +3434,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDustTiny(1), Materials.FishOil.getCells(6))
             .itemOutputs(Materials.BioDiesel.getCells(6))
             .fluidInputs(Materials.Ethanol.getFluid(1000))
@@ -3446,7 +3443,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(1), Materials.Methanol.getCells(9))
             .itemOutputs(Materials.Glycerol.getCells(9))
             .fluidInputs(Materials.SeedOil.getFluid(54000))
@@ -3455,7 +3452,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(1), Materials.SeedOil.getCells(54))
             .itemOutputs(Materials.BioDiesel.getCells(54))
             .fluidInputs(Materials.Methanol.getFluid(9000))
@@ -3464,7 +3461,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(1), Materials.Methanol.getCells(9))
             .itemOutputs(Materials.Glycerol.getCells(9))
             .fluidInputs(Materials.FishOil.getFluid(54000))
@@ -3473,7 +3470,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(1), Materials.FishOil.getCells(54))
             .itemOutputs(Materials.BioDiesel.getCells(54))
             .fluidInputs(Materials.Methanol.getFluid(9000))
@@ -3482,7 +3479,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(1), Materials.Ethanol.getCells(9))
             .itemOutputs(Materials.Glycerol.getCells(9))
             .fluidInputs(Materials.SeedOil.getFluid(54000))
@@ -3491,7 +3488,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(1), Materials.SeedOil.getCells(54))
             .itemOutputs(Materials.BioDiesel.getCells(54))
             .fluidInputs(Materials.Ethanol.getFluid(9000))
@@ -3500,7 +3497,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(1), Materials.Ethanol.getCells(9))
             .itemOutputs(Materials.Glycerol.getCells(9))
             .fluidInputs(Materials.FishOil.getFluid(54000))
@@ -3509,7 +3506,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(1), Materials.FishOil.getCells(54))
             .itemOutputs(Materials.BioDiesel.getCells(54))
             .fluidInputs(Materials.Ethanol.getFluid(9000))
@@ -3520,8 +3517,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C3H8O3 + 3HNO3 =H2SO4= C3H5N3O9 + 3H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Glycerol.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Glycerol.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Glyceryl.getCells(1))
             .fluidInputs(Materials.NitrationMixture.getFluid(6000))
             .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(3000))
@@ -3529,8 +3526,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitrationMixture.getCells(6), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitrationMixture.getCells(6), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Glyceryl.getCells(1), Materials.Empty.getCells(5))
             .fluidInputs(Materials.Glycerol.getFluid(1000))
             .fluidOutputs(Materials.DilutedSulfuricAcid.getFluid(3000))
@@ -3538,8 +3535,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.NitrationMixture.getCells(6), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.NitrationMixture.getCells(6), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.DilutedSulfuricAcid.getCells(3), Materials.Empty.getCells(3))
             .fluidInputs(Materials.Glycerol.getFluid(1000))
             .fluidOutputs(Materials.Glyceryl.getFluid(1000))
@@ -3549,7 +3546,7 @@ public class ChemicalRecipes implements Runnable {
 
         // CaO + CO2 = CaCO3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Quicklime.getDust(2))
             .itemOutputs(Materials.Calcite.getDust(5))
             .fluidInputs(Materials.CarbonDioxide.getGas(1000))
@@ -3557,8 +3554,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Calcite.getDust(5), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Calcite.getDust(5), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Quicklime.getDust(2))
             .fluidOutputs(Materials.CarbonDioxide.getGas(1000))
             .duration(12 * SECONDS)
@@ -3567,7 +3564,7 @@ public class ChemicalRecipes implements Runnable {
 
         // MgO + CO2 = MgCO3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Magnesia.getDust(2))
             .itemOutputs(Materials.Magnesite.getDust(5))
             .fluidInputs(Materials.CarbonDioxide.getGas(1000))
@@ -3575,8 +3572,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Magnesite.getDust(5), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Magnesite.getDust(5), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Magnesia.getDust(2))
             .fluidOutputs(Materials.CarbonDioxide.getGas(1000))
             .duration(12 * SECONDS)
@@ -3585,8 +3582,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C6H6 + 2Cl = C6H5Cl + HCl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Benzene.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Benzene.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Chlorobenzene.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(2000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -3594,8 +3591,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Chlorobenzene.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Benzene.getFluid(1000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -3603,8 +3600,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorine.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.HydrochloricAcid.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Benzene.getFluid(1000))
             .fluidOutputs(Materials.Chlorobenzene.getFluid(1000))
@@ -3614,8 +3611,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C6H5Cl + H2O = C6H6O + HCl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Water.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Water.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.DilutedHydrochloricAcid.getCells(1))
             .fluidInputs(Materials.Chlorobenzene.getFluid(1000))
             .fluidOutputs(Materials.Phenol.getFluid(1000))
@@ -3623,8 +3620,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorobenzene.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorobenzene.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.DilutedHydrochloricAcid.getCells(1))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.Phenol.getFluid(1000))
@@ -3632,8 +3629,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Water.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Water.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Phenol.getCells(1))
             .fluidInputs(Materials.Chlorobenzene.getFluid(1000))
             .fluidOutputs(Materials.DilutedHydrochloricAcid.getFluid(1000))
@@ -3641,8 +3638,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Chlorobenzene.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Chlorobenzene.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Phenol.getCells(1))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.DilutedHydrochloricAcid.getFluid(1000))
@@ -3652,8 +3649,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C6H5Cl + NaOH = C6H6O + NaCl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SodiumHydroxide.getDust(12), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SodiumHydroxide.getDust(12), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Salt.getDust(8))
             .fluidInputs(Materials.Chlorobenzene.getFluid(4000))
             .fluidOutputs(Materials.Phenol.getFluid(4000))
@@ -3663,40 +3660,40 @@ public class ChemicalRecipes implements Runnable {
 
         // Oxide Recipe
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2), Materials.Antimony.getDust(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2), Materials.Antimony.getDust(2))
             .itemOutputs(Materials.AntimonyTrioxide.getDust(5))
             .fluidInputs(Materials.Oxygen.getGas(3000))
             .duration(20 * TICKS)
             .eut(30)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2), Materials.Lead.getDust(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2), Materials.Lead.getDust(1))
             .itemOutputs(Materials.Massicot.getDust(2))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .duration(20 * TICKS)
             .eut(30)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2), Materials.Arsenic.getDust(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2), Materials.Arsenic.getDust(2))
             .itemOutputs(Materials.ArsenicTrioxide.getDust(5))
             .fluidInputs(Materials.Oxygen.getGas(3000))
             .duration(20 * TICKS)
             .eut(30)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2), Materials.Cobalt.getDust(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2), Materials.Cobalt.getDust(1))
             .itemOutputs(Materials.CobaltOxide.getDust(2))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .duration(20 * TICKS)
             .eut(30)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2), Materials.Zinc.getDust(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2), Materials.Zinc.getDust(1))
             .itemOutputs(Materials.Zincite.getDust(2))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .duration(20 * TICKS)
@@ -3705,12 +3702,12 @@ public class ChemicalRecipes implements Runnable {
 
         // CaSi2 + 2HCl = 2Si + CaCl2 + 2H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CalciumDisilicide, 3),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.CalciumDisilicide, 3),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 2),
                 new ItemStack(WerkstoffLoader.items.get(OrePrefixes.dust), 3, 63))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(2000))
             .fluidOutputs(Materials.Hydrogen.getGas(2000))
@@ -3720,12 +3717,10 @@ public class ChemicalRecipes implements Runnable {
 
         // SiCl4 + 2Zn = 2ZnCl2 + Si
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 2),
-                GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1),
                 new ItemStack(WerkstoffLoader.items.get(OrePrefixes.dust), 6, 10052))
             .fluidInputs(Materials.SiliconTetrachloride.getFluid(1000))
             .duration(20 * SECONDS)
@@ -3734,10 +3729,10 @@ public class ChemicalRecipes implements Runnable {
 
         // C4H8O + 2H =Pd= C4H10O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.Butyraldehyde, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Palladium, 1))
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.Butyraldehyde, 1),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Palladium, 1))
             .itemOutputs(ItemList.Cell_Empty.get(1))
             .fluidInputs(Materials.Hydrogen.getGas(2000))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("butanol"), 1000))
@@ -3747,13 +3742,13 @@ public class ChemicalRecipes implements Runnable {
 
         // 4CH2O + C2H4O =NaOH= C5H12O4 + CO
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs( // very poor way of looking for it, but getModItem on GT++ within GT5U jar is prohibited now,
                 // and i don't feel like reworking GT++ cell registration for now
                 GameRegistry.findItemStack(GTPlusPlus.ID, "Formaldehyde", 4),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.Pentaerythritol, 21),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.Pentaerythritol, 21),
                 Materials.Empty.getCells(4))
             .fluidInputs(MaterialsKevlar.Acetaldehyde.getGas(1000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(1000))
@@ -3763,12 +3758,12 @@ public class ChemicalRecipes implements Runnable {
 
         // 4CH2O + C2H4O =NaOH= C5H12O4 + CO
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.Acetaldehyde, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 1))
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.Acetaldehyde, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.Pentaerythritol, 21),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.Pentaerythritol, 21),
                 Materials.Empty.getCells(1))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("fluid.formaldehyde"), 4000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(1000))
@@ -3778,10 +3773,10 @@ public class ChemicalRecipes implements Runnable {
 
         // CaC2 + 2H2O = Ca(OH)2 + C2H2
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CalciumCarbide, 3),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CalciumCarbide, 3),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(new ItemStack(ModItems.dustCalciumHydroxide, 5))
             .fluidInputs(Materials.Water.getFluid(2000))
             .fluidOutputs(MaterialsKevlar.Acetylene.getGas(1000))
@@ -3791,10 +3786,10 @@ public class ChemicalRecipes implements Runnable {
 
         // Co(NO3)2 + 2NaOH = Co(OH)2 + 2NaNO3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 MaterialsKevlar.CobaltIINitrate.getDust(9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 6))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 6))
             .itemOutputs(MaterialsKevlar.CobaltIIHydroxide.getDust(5), SODIUM_NITRATE.getDust(10))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_MV)
@@ -3803,8 +3798,8 @@ public class ChemicalRecipes implements Runnable {
 
     public void addDefaultPolymerizationRecipes(Fluid aBasicMaterial, ItemStack aBasicMaterialCell, Fluid aPolymer) {
         // Oxygen/Titaniumtetrafluoride -> +50% Output each
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.Cell_Air.get(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.Cell_Air.get(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(new FluidStack(aBasicMaterial, 144))
             .fluidOutputs(new FluidStack(aPolymer, 144))
@@ -3812,8 +3807,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(new FluidStack(aBasicMaterial, 144))
             .fluidOutputs(new FluidStack(aPolymer, 216))
@@ -3821,8 +3816,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(aBasicMaterialCell, GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(aBasicMaterialCell, GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Air.getGas(14000))
             .fluidOutputs(new FluidStack(aPolymer, 1000))
@@ -3830,8 +3825,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(aBasicMaterialCell, GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(aBasicMaterialCell, GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(7000))
             .fluidOutputs(new FluidStack(aPolymer, 1500))
@@ -3839,8 +3834,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(
                 new FluidStack(aBasicMaterial, 2160),
                 Materials.Air.getGas(7500),
@@ -3850,8 +3845,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(
                 new FluidStack(aBasicMaterial, 2160),
                 Materials.Oxygen.getGas(7500),
@@ -3892,14 +3887,14 @@ public class ChemicalRecipes implements Runnable {
 
     public void singleBlockOnly() {
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.GasolineRaw.getCells(10), Materials.Toluene.getCells(1))
             .itemOutputs(Materials.GasolineRegular.getCells(11))
             .duration(10 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Benzene.getCells(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Hydrogen.getCells(2))
             .fluidInputs(Materials.Ethylene.getGas(1000))
@@ -3908,7 +3903,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Ethylene.getCells(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Hydrogen.getCells(2))
             .fluidInputs(Materials.Benzene.getFluid(1000))
@@ -3917,7 +3912,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_LV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Methane.getCells(1), Materials.Empty.getCells(2))
             .itemOutputs(Materials.HydrochloricAcid.getCells(3))
             .fluidInputs(Materials.Chlorine.getGas(6000))
@@ -3926,7 +3921,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Silicon.getDust(1), Materials.Chloromethane.getCells(2))
             .itemOutputs(Materials.Empty.getCells(2))
             .fluidOutputs(Materials.Dimethyldichlorosilane.getFluid(1000))
@@ -3934,7 +3929,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(96)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Dimethyldichlorosilane.getCells(1), Materials.Water.getCells(1))
             .itemOutputs(Materials.Polydimethylsiloxane.getDust(3), Materials.Empty.getCells(2))
             .fluidOutputs(Materials.DilutedHydrochloricAcid.getFluid(1000))
@@ -3944,7 +3939,7 @@ public class ChemicalRecipes implements Runnable {
 
         // Ca5(PO4)3Cl + 5H2SO4 + 10H2O = 5CaSO4(H2O)2 + HCl + 3H3PO4
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Apatite.getDust(9), Materials.SulfuricAcid.getCells(5))
             .itemOutputs(Materials.HydrochloricAcid.getCells(1), Materials.Empty.getCells(4))
             .fluidInputs(Materials.Water.getFluid(10000))
@@ -3955,7 +3950,7 @@ public class ChemicalRecipes implements Runnable {
 
         // 10O + 4P = P4O10
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Phosphorus.getDust(4))
             .itemOutputs(Materials.PhosphorousPentoxide.getDust(14))
             .fluidInputs(Materials.Oxygen.getGas(10000))
@@ -3965,7 +3960,7 @@ public class ChemicalRecipes implements Runnable {
 
         // HCl + C3H8O3 = C3H5ClO + 2H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.HydrochloricAcid.getCells(1), Materials.Glycerol.getCells(1))
             .itemOutputs(Materials.Water.getCells(2))
             .fluidOutputs(Materials.Epichlorohydrin.getFluid(1000))
@@ -3975,7 +3970,7 @@ public class ChemicalRecipes implements Runnable {
 
         // H2O + Cl =Hg= HClO + H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Chlorine.getCells(10), Materials.Mercury.getCells(1))
             .itemOutputs(Materials.Hydrogen.getCells(10), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Water.getFluid(10000))
@@ -3984,7 +3979,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Water.getCells(10), Materials.Mercury.getCells(1))
             .itemOutputs(Materials.Hydrogen.getCells(10), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Chlorine.getGas(10000))
@@ -3993,7 +3988,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(8)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Chlorine.getCells(1), Materials.Water.getCells(1))
             .itemOutputs(Materials.Hydrogen.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Mercury.getFluid(100))
@@ -4004,7 +3999,7 @@ public class ChemicalRecipes implements Runnable {
 
         // P + 3Cl = PCl3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Phosphorus.getDust(1), Materials.Chlorine.getCells(3))
             .itemOutputs(ItemList.Cell_Empty.get(3))
             .fluidOutputs(MaterialsKevlar.PhosphorusTrichloride.getFluid(1000))
@@ -4012,10 +4007,10 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.EthyleneOxide, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 5))
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.EthyleneOxide, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Water, 5))
             .itemOutputs(ItemList.Cell_Empty.get(6))
             .fluidInputs(Materials.Dimethyldichlorosilane.getFluid(4000))
             .fluidOutputs(MaterialsKevlar.SiliconOil.getFluid(5000))
@@ -4023,10 +4018,10 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.EthyleneOxide, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Dimethyldichlorosilane, 4))
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.EthyleneOxide, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Dimethyldichlorosilane, 4))
             .itemOutputs(ItemList.Cell_Empty.get(5))
             .fluidInputs(Materials.Water.getFluid(5000))
             .fluidOutputs(MaterialsKevlar.SiliconOil.getFluid(5000))
@@ -4034,10 +4029,10 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1),
-                GT_Utility.getIntegratedCircuit(2))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1),
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.Cell_Empty.get(1))
             .fluidInputs(MaterialsKevlar.EthyleneOxide.getGas(1000))
             .fluidOutputs(MaterialsKevlar.Ethyleneglycol.getFluid(1000))
@@ -4045,14 +4040,14 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(MaterialsKevlar.CobaltIIHydroxide.getDust(5), MaterialsKevlar.NaphthenicAcid.getCells(1))
             .itemOutputs(MaterialsKevlar.CobaltIINaphthenate.getDust(41), ItemList.Cell_Empty.get(1))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(MaterialsKevlar.CobaltIIAcetate.getDust(15), MaterialsKevlar.NaphthenicAcid.getCells(1))
             .itemOutputs(MaterialsKevlar.CobaltIINaphthenate.getDust(41), ItemList.Cell_Empty.get(1))
             .fluidOutputs(Materials.AceticAcid.getFluid(1500))
@@ -4060,27 +4055,27 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Chlorine, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Chlorine, 4))
             .itemOutputs(ItemList.Cell_Empty.get(4))
             .fluidOutputs(Materials.SiliconTetrachloride.getFluid(1000))
             .duration(20 * SECONDS)
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Galena, 3),
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Sphalerite, 1))
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Galena, 3),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Sphalerite, 1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(4000))
             .fluidOutputs(new FluidStack(ItemList.sIndiumConcentrate, 8000))
             .duration(3 * SECONDS)
             .eut(150)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Carbon.getDust(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Methane.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(4000))
@@ -4090,74 +4085,74 @@ public class ChemicalRecipes implements Runnable {
 
         // O + 2H = H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1),
-                GT_Utility.getIntegratedCircuit(22))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1),
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(ItemList.Cell_Empty.get(1))
             .fluidInputs(Materials.Hydrogen.getGas(2000))
-            .fluidOutputs(GT_ModHandler.getDistilledWater(1000))
+            .fluidOutputs(GTModHandler.getDistilledWater(1000))
             .duration(10 * TICKS)
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1),
-                GT_Utility.getIntegratedCircuit(22))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1),
+                GTUtility.getIntegratedCircuit(22))
             .itemOutputs(ItemList.Cell_Empty.get(1))
             .fluidInputs(Materials.Oxygen.getGas(500))
-            .fluidOutputs(GT_ModHandler.getDistilledWater(500))
+            .fluidOutputs(GTModHandler.getDistilledWater(500))
             .duration(5 * TICKS)
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
         // Si + 4Cl = SiCl4
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1), ItemList.Cell_Empty.get(2))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1), ItemList.Cell_Empty.get(2))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(3000))
             .fluidOutputs(Materials.Trichlorosilane.getFluid(1000))
             .duration(15 * SECONDS)
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Silane, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1), ItemList.Cell_Empty.get(1))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Silane, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1), ItemList.Cell_Empty.get(1))
             .fluidOutputs(Materials.Hydrogen.getGas(4000))
             .duration(15 * SECONDS)
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Silane, 1), ItemList.Cell_Empty.get(3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Silane, 1), ItemList.Cell_Empty.get(3))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 4))
             .duration(15 * SECONDS)
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
         // S + 2Cl = SCl2
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 8),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Chlorine, 16))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 8),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Chlorine, 16))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.SulfurDichloride, 8),
+                GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.SulfurDichloride, 8),
                 ItemList.Cell_Empty.get(8))
             .duration(40 * SECONDS)
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 8), ItemList.Cell_Empty.get(8))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.SulfurDichloride, 8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 8), ItemList.Cell_Empty.get(8))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, MaterialsKevlar.SulfurDichloride, 8))
             .fluidInputs(Materials.Chlorine.getGas(16000))
             .duration(40 * SECONDS)
             .eut(30)
@@ -4165,7 +4160,7 @@ public class ChemicalRecipes implements Runnable {
 
         // C6H6 + C3H6 = C9H12
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Propene.getCells(8), Materials.PhosphoricAcid.getCells(1))
             .itemOutputs(Materials.Empty.getCells(9))
             .fluidInputs(Materials.Benzene.getFluid(8000))
@@ -4174,7 +4169,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.PhosphoricAcid.getCells(1), Materials.Benzene.getCells(8))
             .itemOutputs(Materials.Empty.getCells(9))
             .fluidInputs(Materials.Propene.getGas(8000))
@@ -4183,7 +4178,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Benzene.getCells(1), Materials.Propene.getCells(1))
             .itemOutputs(Materials.Empty.getCells(2))
             .fluidInputs(Materials.PhosphoricAcid.getFluid(125))
@@ -4194,7 +4189,7 @@ public class ChemicalRecipes implements Runnable {
 
         // C3H6O + 2C6H6O =HCl= C15H16O2 + H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Acetone.getCells(1), Materials.Phenol.getCells(2))
             .itemOutputs(Materials.Water.getCells(1), Materials.Empty.getCells(2))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -4203,7 +4198,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.HydrochloricAcid.getCells(1), Materials.Acetone.getCells(1))
             .itemOutputs(Materials.Water.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Phenol.getFluid(2000))
@@ -4212,7 +4207,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Phenol.getCells(2), Materials.HydrochloricAcid.getCells(1))
             .itemOutputs(Materials.Water.getCells(1), Materials.Empty.getCells(2))
             .fluidInputs(Materials.Acetone.getFluid(1000))
@@ -4223,8 +4218,8 @@ public class ChemicalRecipes implements Runnable {
 
         // N + 3H = NH3
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Nitrogen.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Nitrogen.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(3000))
             .fluidOutputs(Materials.Ammonia.getGas(1000))
@@ -4232,8 +4227,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.HV * 3 / 4)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Hydrogen.getCells(3), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Hydrogen.getCells(3), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(3))
             .fluidInputs(Materials.Nitrogen.getGas(1000))
             .fluidOutputs(Materials.Ammonia.getGas(1000))
@@ -4241,23 +4236,23 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.HV * 3 / 4)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Nitrogen.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Nitrogen.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Ammonia.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(3000))
             .duration(16 * SECONDS)
             .eut(TierEU.HV * 3 / 4)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Hydrogen.getCells(3), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Hydrogen.getCells(3), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Ammonia.getCells(1), Materials.Empty.getCells(2))
             .fluidInputs(Materials.Nitrogen.getGas(1000))
             .duration(16 * SECONDS)
             .eut(TierEU.HV * 3 / 4)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Ammonia.getCells(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Water.getCells(2))
             .fluidInputs(Materials.Methanol.getFluid(2000))
@@ -4266,7 +4261,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Ammonia.getCells(4), Materials.Empty.getCells(2))
             .itemOutputs(Materials.Water.getCells(6))
             .fluidInputs(Materials.Oxygen.getGas(10000))
@@ -4275,7 +4270,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Water.getCells(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.NitricAcid.getCells(2))
             .fluidInputs(Materials.NitrogenDioxide.getGas(3000))
@@ -4286,7 +4281,7 @@ public class ChemicalRecipes implements Runnable {
 
         // 2NO2 + O + H2O = 2HNO3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.NitrogenDioxide.getCells(2), Materials.Oxygen.getCells(1))
             .itemOutputs(Materials.Empty.getCells(3))
             .fluidInputs(Materials.Water.getFluid(1000))
@@ -4295,7 +4290,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Oxygen.getCells(1), Materials.Water.getCells(1))
             .itemOutputs(Materials.Empty.getCells(2))
             .fluidInputs(Materials.NitrogenDioxide.getGas(2000))
@@ -4304,7 +4299,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Water.getCells(1), Materials.NitrogenDioxide.getCells(2))
             .itemOutputs(Materials.Empty.getCells(3))
             .fluidInputs(Materials.Oxygen.getGas(1000))
@@ -4313,7 +4308,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Sulfur.getDust(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.HydricSulfide.getCells(1))
             .fluidInputs(Materials.Hydrogen.getGas(2000))
@@ -4323,7 +4318,7 @@ public class ChemicalRecipes implements Runnable {
 
         // C2H4 + HCl + O = C2H3Cl + H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Ethylene.getCells(1), Materials.HydrochloricAcid.getCells(1))
             .itemOutputs(Materials.Water.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
@@ -4332,7 +4327,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.HydrochloricAcid.getCells(1), Materials.Oxygen.getCells(1))
             .itemOutputs(Materials.Water.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Ethylene.getGas(1000))
@@ -4341,7 +4336,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Oxygen.getCells(1), Materials.Ethylene.getCells(1))
             .itemOutputs(Materials.Water.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
@@ -4350,7 +4345,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Butadiene.getCells(1), ItemList.Cell_Air.get(5))
             .itemOutputs(Materials.RawStyreneButadieneRubber.getDust(9), Materials.Empty.getCells(6))
             .fluidInputs(Materials.Styrene.getFluid(350))
@@ -4358,7 +4353,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Butadiene.getCells(1), Materials.Oxygen.getCells(5))
             .itemOutputs(Materials.RawStyreneButadieneRubber.getDust(13), Materials.Empty.getCells(6))
             .fluidInputs(Materials.Styrene.getFluid(350))
@@ -4366,7 +4361,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Styrene.getCells(1), ItemList.Cell_Air.get(15))
             .itemOutputs(Materials.RawStyreneButadieneRubber.getDust(27), Materials.Empty.getCells(16))
             .fluidInputs(Materials.Butadiene.getGas(3000))
@@ -4374,7 +4369,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Styrene.getCells(1), Materials.Oxygen.getCells(15))
             .itemOutputs(Materials.RawStyreneButadieneRubber.getDust(41), Materials.Empty.getCells(16))
             .fluidInputs(Materials.Butadiene.getGas(3000))
@@ -4382,7 +4377,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Styrene.getCells(1), Materials.Butadiene.getCells(3))
             .itemOutputs(Materials.RawStyreneButadieneRubber.getDust(27), Materials.Empty.getCells(4))
             .fluidInputs(Materials.Air.getGas(15000))
@@ -4390,7 +4385,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Styrene.getCells(1), Materials.Butadiene.getCells(3))
             .itemOutputs(Materials.RawStyreneButadieneRubber.getDust(41), Materials.Empty.getCells(4))
             .fluidInputs(Materials.Oxygen.getGas(15000))
@@ -4398,7 +4393,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Benzene.getCells(1), Materials.Empty.getCells(1))
             .itemOutputs(Materials.HydrochloricAcid.getCells(2))
             .fluidInputs(Materials.Chlorine.getGas(4000))
@@ -4407,7 +4402,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Glycerol.getCells(1), Materials.Empty.getCells(2))
             .itemOutputs(Materials.DilutedSulfuricAcid.getCells(3))
             .fluidInputs(Materials.NitrationMixture.getFluid(6000))
@@ -4416,7 +4411,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(12), Materials.Empty.getCells(4))
             .itemOutputs(Materials.Salt.getDust(8), Materials.Phenol.getCells(4))
             .fluidInputs(Materials.Chlorobenzene.getFluid(4000))
@@ -4424,7 +4419,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(12), Materials.Chlorobenzene.getCells(4))
             .itemOutputs(Materials.Salt.getDust(8), Materials.Phenol.getCells(4))
             .duration(48 * SECONDS)
@@ -4434,15 +4429,15 @@ public class ChemicalRecipes implements Runnable {
         // Recipes for gasoline
         // 2N + O = N2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Nitrogen.getCells(2), Materials.Oxygen.getCells(1))
             .itemOutputs(Materials.NitrousOxide.getCells(1), Materials.Empty.getCells(2))
             .duration(10 * SECONDS)
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Nitrogen.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Nitrogen.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(2))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .fluidOutputs(Materials.NitrousOxide.getGas(1000))
@@ -4450,16 +4445,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Nitrogen.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Nitrogen.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.NitrousOxide.getCells(1), Materials.Empty.getCells(1))
             .fluidInputs(Materials.Oxygen.getGas(1000))
             .duration(10 * SECONDS)
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Nitrogen.getGas(2000))
             .fluidOutputs(Materials.NitrousOxide.getGas(1000))
@@ -4467,8 +4462,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Oxygen.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Oxygen.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.NitrousOxide.getCells(1))
             .fluidInputs(Materials.Nitrogen.getGas(2000))
             .duration(10 * SECONDS)
@@ -4477,7 +4472,7 @@ public class ChemicalRecipes implements Runnable {
 
         // C2H6O + C4H8 = C6H14O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Ethanol.getCells(1), Materials.Butene.getCells(1))
             .itemOutputs(Materials.AntiKnock.getCells(1), Materials.Empty.getCells(1))
             .duration(20 * SECONDS)
@@ -4487,7 +4482,7 @@ public class ChemicalRecipes implements Runnable {
         // Potassium Dichromate
         // 2KNO3 + 2CrO3 = K2Cr2O7 + 2NO + 3O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Saltpeter.getDust(10), Materials.ChromiumTrioxide.getDust(8))
             .itemOutputs(Materials.Potassiumdichromate.getDust(11))
             .fluidOutputs(Materials.NitricOxide.getGas(2000))
@@ -4495,7 +4490,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(chemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.PotassiumNitrade.getDust(10), Materials.ChromiumTrioxide.getDust(8))
             .itemOutputs(Materials.Potassiumdichromate.getDust(11))
             .fluidOutputs(Materials.NitricOxide.getGas(2000))
@@ -4506,15 +4501,15 @@ public class ChemicalRecipes implements Runnable {
 
     public void multiblockOnly() {
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(22))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(22))
             .fluidInputs(Materials.Hydrogen.getGas(16000), Materials.Oxygen.getGas(8000))
-            .fluidOutputs(GT_ModHandler.getDistilledWater(8000))
+            .fluidOutputs(GTModHandler.getDistilledWater(8000))
             .duration(4 * SECONDS)
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.PotassiumNitrade.getDust(10), Materials.ChromiumTrioxide.getDust(8))
             .itemOutputs(Materials.Potassiumdichromate.getDust(11))
             .fluidOutputs(Materials.NitricOxide.getGas(2000), Materials.Oxygen.getGas(3000))
@@ -4522,7 +4517,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Saltpeter.getDust(10), Materials.ChromiumTrioxide.getDust(8))
             .itemOutputs(Materials.Potassiumdichromate.getDust(11))
             .fluidOutputs(Materials.NitricOxide.getGas(2000), Materials.Oxygen.getGas(3000))
@@ -4533,13 +4528,13 @@ public class ChemicalRecipes implements Runnable {
         // Potassium Dichromate shortcut
         // 2 Cr + 6O + 10 Saltpeter/Potassium Dichromate = 10 K2Cr2O7 + 2NO + 3O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 Materials.PotassiumNitrade.getDust(64),
                 Materials.PotassiumNitrade.getDust(64),
                 Materials.PotassiumNitrade.getDust(32),
                 Materials.Chrome.getDust(2 * 16),
-                GT_Utility.getIntegratedCircuit(11))
+                GTUtility.getIntegratedCircuit(11))
             .itemOutputs(
                 Materials.Potassiumdichromate.getDust(64),
                 Materials.Potassiumdichromate.getDust(64),
@@ -4547,16 +4542,16 @@ public class ChemicalRecipes implements Runnable {
             .fluidInputs(Materials.Oxygen.getGas(6000 * 16))
             .fluidOutputs(Materials.NitricOxide.getGas(2000 * 16), Materials.Oxygen.getGas(3000 * 16))
             .duration(2 * MINUTES + 8 * SECONDS)
-            .eut((int) GT_Values.VP[7])
+            .eut((int) GTValues.VP[7])
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 Materials.Saltpeter.getDust(64),
                 Materials.Saltpeter.getDust(64),
                 Materials.Saltpeter.getDust(32),
                 Materials.Chrome.getDust(2 * 16),
-                GT_Utility.getIntegratedCircuit(11))
+                GTUtility.getIntegratedCircuit(11))
             .itemOutputs(
                 Materials.Potassiumdichromate.getDust(64),
                 Materials.Potassiumdichromate.getDust(64),
@@ -4564,67 +4559,67 @@ public class ChemicalRecipes implements Runnable {
             .fluidInputs(Materials.Oxygen.getGas(6000 * 16))
             .fluidOutputs(Materials.NitricOxide.getGas(2000 * 16), Materials.Oxygen.getGas(3000 * 16))
             .duration(2 * MINUTES + 8 * SECONDS)
-            .eut((int) GT_Values.VP[7])
+            .eut((int) GTValues.VP[7])
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Benzene.getFluid(1000), Materials.Methane.getGas(2000))
             .fluidOutputs(Materials.Dimethylbenzene.getFluid(1000), Materials.Hydrogen.getGas(4000))
             .duration(3 * MINUTES + 20 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Galena, 3),
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Sphalerite, 1))
+                GTUtility.getIntegratedCircuit(1),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Galena, 3),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Sphalerite, 1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(4000))
             .fluidOutputs(new FluidStack(ItemList.sIndiumConcentrate, 8000))
             .duration(3 * SECONDS)
             .eut(150)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(8),
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Galena, 27),
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Sphalerite, 9))
+                GTUtility.getIntegratedCircuit(8),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Galena, 27),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Sphalerite, 9))
             .fluidInputs(Materials.SulfuricAcid.getFluid(36000))
             .fluidOutputs(new FluidStack(ItemList.sIndiumConcentrate, 72000))
             .duration(8 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Pentlandite, 9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.PlatinumGroupSludge, 1))
+                GTUtility.getIntegratedCircuit(9),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Pentlandite, 9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.PlatinumGroupSludge, 1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(9000))
             .fluidOutputs(new FluidStack(ItemList.sNickelSulfate, 18000))
             .duration(1 * SECONDS + 5 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
-                GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Chalcopyrite, 9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.PlatinumGroupSludge, 1))
+                GTUtility.getIntegratedCircuit(9),
+                GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Chalcopyrite, 9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.PlatinumGroupSludge, 1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(9000))
             .fluidOutputs(new FluidStack(ItemList.sBlueVitriol, 18000))
             .duration(1 * SECONDS + 5 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Plutonium, 64),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1),
-                GT_Utility.getIntegratedCircuit(8))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 64))
+                GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Plutonium, 64),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1),
+                GTUtility.getIntegratedCircuit(8))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 64))
             .fluidInputs(Materials.Air.getGas(8000))
             .fluidOutputs(Materials.Radon.getGas(800))
             .duration(1 * MINUTES + 15 * SECONDS)
@@ -4633,24 +4628,24 @@ public class ChemicalRecipes implements Runnable {
 
         // 3SiO2 + 4Al = 3Si + 2Al2O3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4))
+                GTUtility.getIntegratedCircuit(1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 10))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 10))
             .duration(10 * TICKS)
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
         // 10Si + 30HCl -> 0.3 SiH2Cl2 + 9 HSiCl3 + 0.3 SiCl4 + 0.2 Si2Cl6 + 20.4H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 10))
+                GTUtility.getIntegratedCircuit(9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 10))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(30000))
             .fluidOutputs(
                 Materials.Trichlorosilane.getFluid(9000),
@@ -4664,8 +4659,8 @@ public class ChemicalRecipes implements Runnable {
 
         // 2CO + 2C3H6 + 4H =RhHCO(P(C6H5)3)3= C4H8O + C4H8O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(4), MaterialsKevlar.OrganorhodiumCatalyst.getDustTiny(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(4), MaterialsKevlar.OrganorhodiumCatalyst.getDustTiny(1))
             .fluidInputs(
                 Materials.Hydrogen.getGas(4000),
                 Materials.Propene.getGas(2000),
@@ -4675,8 +4670,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9), MaterialsKevlar.OrganorhodiumCatalyst.getDust(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9), MaterialsKevlar.OrganorhodiumCatalyst.getDust(1))
             .fluidInputs(
                 Materials.Hydrogen.getGas(36000),
                 Materials.Propene.getGas(18000),
@@ -4688,30 +4683,30 @@ public class ChemicalRecipes implements Runnable {
 
         // C2H4 + O =Al2O3,Ag= C2H4O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 1))
+                GTUtility.getIntegratedCircuit(2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 1))
             .fluidInputs(Materials.Ethylene.getGas(1000), Materials.Oxygen.getGas(1000))
             .fluidOutputs(MaterialsKevlar.EthyleneOxide.getGas(1000))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 9))
+                GTUtility.getIntegratedCircuit(8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 9))
             .fluidInputs(Materials.Ethylene.getGas(9000), Materials.Oxygen.getGas(9000))
             .fluidOutputs(MaterialsKevlar.EthyleneOxide.getGas(9000))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(
                 MaterialsKevlar.EthyleneOxide.getGas(1000),
                 Materials.Dimethyldichlorosilane.getFluid(4000),
@@ -4721,8 +4716,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(8))
             .fluidInputs(
                 MaterialsKevlar.EthyleneOxide.getGas(9000),
                 Materials.Dimethyldichlorosilane.getFluid(36000),
@@ -4734,35 +4729,35 @@ public class ChemicalRecipes implements Runnable {
 
         // NH3 + CH4O =SiO2,Al2O3= CH5N + H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(10),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1))
+                GTUtility.getIntegratedCircuit(10),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1))
             .fluidInputs(Materials.Methanol.getFluid(1000), Materials.Ammonia.getGas(1000))
             .fluidOutputs(MaterialsKevlar.Methylamine.getGas(1000), Materials.Water.getFluid(1000))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(TierEU.RECIPE_UV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.KevlarCatalyst, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.Pentaerythritol, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.DiphenylmethaneDiisocyanate, 5))
+                GTUtility.getIntegratedCircuit(1),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.KevlarCatalyst, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.Pentaerythritol, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.DiphenylmethaneDiisocyanate, 5))
             .fluidInputs(MaterialsKevlar.Ethyleneglycol.getFluid(4000), MaterialsKevlar.SiliconOil.getFluid(1000))
             .fluidOutputs(MaterialsKevlar.PolyurethaneResin.getFluid(1000))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_UV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.KevlarCatalyst, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.Pentaerythritol, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.DiphenylmethaneDiisocyanate, 45))
+                GTUtility.getIntegratedCircuit(9),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.KevlarCatalyst, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.Pentaerythritol, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.DiphenylmethaneDiisocyanate, 45))
             .fluidInputs(MaterialsKevlar.Ethyleneglycol.getFluid(36000), MaterialsKevlar.SiliconOil.getFluid(9000))
             .fluidOutputs(MaterialsKevlar.PolyurethaneResin.getFluid(9000))
             .duration(1 * MINUTES + 15 * SECONDS)
@@ -4771,11 +4766,11 @@ public class ChemicalRecipes implements Runnable {
 
         // 3NH3 + 6CH4O =Al2O3,SiO2= CH5N + C2H7N + C3H9N + 6H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1))
+                GTUtility.getIntegratedCircuit(3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1))
             .fluidInputs(Materials.Methanol.getFluid(6000), Materials.Ammonia.getGas(3000))
             .fluidOutputs(
                 MaterialsKevlar.Methylamine.getGas(1000),
@@ -4786,11 +4781,11 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(11),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 9))
+                GTUtility.getIntegratedCircuit(11),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminiumoxide, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 9))
             .fluidInputs(Materials.Methanol.getFluid(54000), Materials.Ammonia.getGas(27000))
             .fluidOutputs(
                 MaterialsKevlar.Methylamine.getGas(9000),
@@ -4803,11 +4798,11 @@ public class ChemicalRecipes implements Runnable {
 
         // 18SOCl2 + 5C10H10O4 + 6CO2 = 7C8H4Cl2O2 + 22HCl + 18SO2
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.TerephthaloylChloride, 64),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.TerephthaloylChloride, 48))
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.TerephthaloylChloride, 64),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.TerephthaloylChloride, 48))
             .fluidInputs(
                 MaterialsKevlar.ThionylChloride.getFluid(18000),
                 MaterialsKevlar.DimethylTerephthalate.getFluid(5000),
@@ -4819,8 +4814,8 @@ public class ChemicalRecipes implements Runnable {
 
         // 2CH4O + C8H6O4 =H2SO4= C10H10O4 + 2H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(
                 MaterialsKevlar.TerephthalicAcid.getFluid(1000),
                 Materials.Methanol.getFluid(2000),
@@ -4832,8 +4827,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(
                 MaterialsKevlar.TerephthalicAcid.getFluid(9000),
                 Materials.Methanol.getFluid(18000),
@@ -4845,26 +4840,26 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.Benzene.getFluid(1000), Materials.Methane.getGas(2000))
             .fluidOutputs(MaterialsKevlar.IIIDimethylbenzene.getFluid(1000), Materials.Hydrogen.getGas(4000))
             .duration(3 * MINUTES + 20 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(3))
             .fluidInputs(Materials.Benzene.getFluid(1000), Materials.Methane.getGas(2000))
             .fluidOutputs(MaterialsKevlar.IVDimethylbenzene.getFluid(1000), Materials.Hydrogen.getGas(4000))
             .duration(3 * MINUTES + 20 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CobaltIIHydroxide, 45))
+                GTUtility.getIntegratedCircuit(9),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CobaltIIHydroxide, 45))
             .itemOutputs(
                 MaterialsKevlar.CobaltIINaphthenate.getDust(64),
                 MaterialsKevlar.CobaltIINaphthenate.getDust(64),
@@ -4877,12 +4872,12 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CobaltIIAcetate, 64),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CobaltIIAcetate, 64),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CobaltIIAcetate, 7))
+                GTUtility.getIntegratedCircuit(9),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CobaltIIAcetate, 64),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CobaltIIAcetate, 64),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.CobaltIIAcetate, 7))
             .itemOutputs(
                 MaterialsKevlar.CobaltIINaphthenate.getDust(64),
                 MaterialsKevlar.CobaltIINaphthenate.getDust(64),
@@ -4898,10 +4893,10 @@ public class ChemicalRecipes implements Runnable {
 
         // PCl3 + 3C6H5Cl + 6Na = 6NaCl + C18H15P
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 6))
+                GTUtility.getIntegratedCircuit(1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 6))
             .itemOutputs(MaterialsKevlar.Triphenylphosphene.getDust(34), Materials.Salt.getDust(12))
             .fluidInputs(MaterialsKevlar.PhosphorusTrichloride.getFluid(1000), Materials.Chlorobenzene.getFluid(3000))
             .duration(20 * SECONDS)
@@ -4910,16 +4905,16 @@ public class ChemicalRecipes implements Runnable {
 
         // 4NaH + C3H9BO3 = NaBH4 + 3CH3ONa
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1), MaterialsKevlar.SodiumHydride.getDust(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1), MaterialsKevlar.SodiumHydride.getDust(8))
             .itemOutputs(MaterialsKevlar.SodiumBorohydride.getDust(6), MaterialsKevlar.SodiumMethoxide.getDust(18))
             .fluidInputs(MaterialsKevlar.TrimethylBorate.getFluid(1000))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9), MaterialsKevlar.SodiumHydride.getDust(64))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9), MaterialsKevlar.SodiumHydride.getDust(64))
             .itemOutputs(
                 MaterialsKevlar.SodiumBorohydride.getDust(48),
                 MaterialsKevlar.SodiumMethoxide.getDust(64),
@@ -4932,8 +4927,8 @@ public class ChemicalRecipes implements Runnable {
 
         // 2CH3COOH = CH3COCH3 + CO2 + H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(0, Materials.Calcite.getDust(5)), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(0, Materials.Calcite.getDust(5)), GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(
                 Materials.Acetone.getFluid(1000),
@@ -4943,8 +4938,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(0, Materials.Calcium.getDust(1)), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(0, Materials.Calcium.getDust(1)), GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(
                 Materials.Acetone.getFluid(1000),
@@ -4954,8 +4949,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(0, Materials.Quicklime.getDust(2)), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(0, Materials.Quicklime.getDust(2)), GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(
                 Materials.Acetone.getFluid(1000),
@@ -4967,8 +4962,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C + 4H + O = CH3OH
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Carbon.getDust(1), GT_Utility.getIntegratedCircuit(23))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Carbon.getDust(1), GTUtility.getIntegratedCircuit(23))
             .fluidInputs(Materials.Hydrogen.getGas(4000), Materials.Oxygen.getGas(1000))
             .fluidOutputs(Materials.Methanol.getFluid(1000))
             .duration(16 * SECONDS)
@@ -4978,8 +4973,8 @@ public class ChemicalRecipes implements Runnable {
         // This recipe collides with one for Vinyl Chloride
         // 2C + 4H + 2O = CH3COOH
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Carbon.getDust(2), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Carbon.getDust(2), GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.Hydrogen.getGas(4000), Materials.Oxygen.getGas(2000))
             .fluidOutputs(Materials.AceticAcid.getFluid(1000))
             .duration(24 * SECONDS)
@@ -4988,24 +4983,24 @@ public class ChemicalRecipes implements Runnable {
 
         // 2CO + 4H = CH3COOH
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.CarbonMonoxide.getGas(2000), Materials.Hydrogen.getGas(4000))
             .fluidOutputs(Materials.AceticAcid.getFluid(1000))
             .duration(16 * SECONDS)
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(8))
             .fluidInputs(Materials.Hydrogen.getGas(9000), Materials.Chlorine.getGas(9000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(9000))
             .duration(7 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(
                 Materials.Chlorine.getGas(10000),
                 Materials.Water.getFluid(10000),
@@ -5017,8 +5012,8 @@ public class ChemicalRecipes implements Runnable {
 
         // H2O + 4Cl + C3H6 + NaOH = C3H5ClO + NaCl·H2O + 2HCl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SodiumHydroxide.getDust(3), GT_Utility.getIntegratedCircuit(23))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SodiumHydroxide.getDust(3), GTUtility.getIntegratedCircuit(23))
             .fluidInputs(
                 Materials.Propene.getGas(1000),
                 Materials.Chlorine.getGas(4000),
@@ -5033,8 +5028,8 @@ public class ChemicalRecipes implements Runnable {
 
         // H2O + 2Cl + C3H6 + NaOH =Hg= C3H5ClO + NaCl·H2O + 2H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SodiumHydroxide.getDust(3), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SodiumHydroxide.getDust(3), GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.Propene.getGas(1000),
                 Materials.Chlorine.getGas(2000),
@@ -5050,8 +5045,8 @@ public class ChemicalRecipes implements Runnable {
 
         // HClO + 2Cl + C3H6 + NaOH = C3H5ClO + NaCl·H2O + HCl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SodiumHydroxide.getDust(3), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SodiumHydroxide.getDust(3), GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.Propene.getGas(1000),
                 Materials.Chlorine.getGas(2000),
@@ -5064,7 +5059,7 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Apatite.getDust(9))
             .itemOutputs(Materials.Gypsum.getDust(40))
             .fluidInputs(Materials.SulfuricAcid.getFluid(5000), Materials.Water.getFluid(10000))
@@ -5073,8 +5068,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Phosphorus.getDust(4), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Phosphorus.getDust(4), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.PhosphorousPentoxide.getDust(14))
             .fluidInputs(Materials.Oxygen.getGas(10000))
             .duration(2 * SECONDS)
@@ -5083,16 +5078,16 @@ public class ChemicalRecipes implements Runnable {
 
         // 2P + 5O + 3H2O = 2H3PO4
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Phosphorus.getDust(1), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Phosphorus.getDust(1), GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.Oxygen.getGas(2500), Materials.Water.getFluid(1500))
             .fluidOutputs(Materials.PhosphoricAcid.getFluid(1000))
             .duration(16 * SECONDS)
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(
                 Materials.Propene.getGas(8000),
                 Materials.Benzene.getFluid(8000),
@@ -5102,8 +5097,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.Propene.getGas(1000),
                 Materials.Benzene.getFluid(1000),
@@ -5114,8 +5109,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(
                 Materials.Acetone.getFluid(1000),
                 Materials.Phenol.getFluid(2000),
@@ -5125,8 +5120,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SodiumHydroxide.getDust(6), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SodiumHydroxide.getDust(6), GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.Acetone.getFluid(1000),
                 Materials.Phenol.getFluid(2000),
@@ -5137,16 +5132,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.Hydrogen.getGas(9000), Materials.Fluorine.getGas(9000))
             .fluidOutputs(Materials.HydrofluoricAcid.getFluid(9000))
             .duration(7 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.HydrofluoricAcid.getFluid(4000),
                 Materials.Methane.getGas(2000),
@@ -5156,8 +5151,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Silicon.getDust(1), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Silicon.getDust(1), GTUtility.getIntegratedCircuit(24))
             .itemOutputs(Materials.Polydimethylsiloxane.getDust(3))
             .fluidInputs(
                 Materials.Methane.getGas(2000),
@@ -5168,8 +5163,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(96)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Silicon.getDust(1), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Silicon.getDust(1), GTUtility.getIntegratedCircuit(24))
             .itemOutputs(Materials.Polydimethylsiloxane.getDust(3))
             .fluidInputs(Materials.Methanol.getFluid(2000), Materials.HydrochloricAcid.getFluid(2000))
             .fluidOutputs(Materials.DilutedHydrochloricAcid.getFluid(2000))
@@ -5177,16 +5172,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(96)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Nitrogen.getGas(1000), Materials.Hydrogen.getGas(3000))
             .fluidOutputs(Materials.Ammonia.getGas(1000))
             .duration(16 * SECONDS)
             .eut(TierEU.HV * 3 / 4)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.Nitrogen.getGas(10000), Materials.Hydrogen.getGas(30000))
             .fluidOutputs(Materials.Ammonia.getGas(10000))
             .duration(2 * MINUTES + 40 * SECONDS)
@@ -5195,8 +5190,8 @@ public class ChemicalRecipes implements Runnable {
 
         // 2NH3 + 7O = N2O4 + 3H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(23))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(23))
             .fluidInputs(Materials.Ammonia.getGas(2000), Materials.Oxygen.getGas(7000))
             .fluidOutputs(Materials.DinitrogenTetroxide.getGas(1000), Materials.Water.getFluid(3000))
             .duration(24 * SECONDS)
@@ -5205,8 +5200,8 @@ public class ChemicalRecipes implements Runnable {
 
         // 7O + 6H + 2N = N2O4 + 3H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(23))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(23))
             .fluidInputs(
                 Materials.Nitrogen.getGas(2000),
                 Materials.Hydrogen.getGas(6000),
@@ -5216,40 +5211,40 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.Oxygen.getGas(100000), Materials.Ammonia.getGas(36000))
             .fluidOutputs(Materials.NitricOxide.getGas(36000), Materials.Water.getFluid(54000))
             .duration(8 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(8))
             .fluidInputs(Materials.Oxygen.getGas(100000), Materials.Ammonia.getGas(36000))
             .fluidOutputs(Materials.NitricOxide.getGas(36000))
             .duration(8 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.NitricOxide.getGas(9000), Materials.Oxygen.getGas(9000))
             .fluidOutputs(Materials.NitrogenDioxide.getGas(9000))
             .duration(4 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.NitrogenDioxide.getGas(27000), Materials.Water.getFluid(9000))
             .fluidOutputs(Materials.NitricAcid.getFluid(18000), Materials.NitricOxide.getGas(9000))
             .duration(6 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.Hydrogen.getGas(3000),
                 Materials.Nitrogen.getGas(1000),
@@ -5259,16 +5254,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.Ammonia.getGas(1000), Materials.Oxygen.getGas(4000))
             .fluidOutputs(Materials.NitricAcid.getFluid(1000), Materials.Water.getFluid(1000))
             .duration(16 * SECONDS)
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.NitrogenDioxide.getGas(2000),
                 Materials.Oxygen.getGas(1000),
@@ -5278,48 +5273,48 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9), Materials.Sulfur.getDust(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9), Materials.Sulfur.getDust(9))
             .fluidInputs(Materials.Hydrogen.getGas(18000))
             .fluidOutputs(Materials.HydricSulfide.getGas(9000))
             .duration(4 * TICKS)
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9), Materials.Sulfur.getDust(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9), Materials.Sulfur.getDust(9))
             .fluidInputs(Materials.Oxygen.getGas(18000))
             .fluidOutputs(Materials.SulfurDioxide.getGas(9000))
             .duration(4 * TICKS)
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.HydricSulfide.getGas(9000), Materials.Oxygen.getGas(27000))
             .fluidOutputs(Materials.SulfurDioxide.getGas(9000), Materials.Water.getFluid(9000))
             .duration(3 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(8))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(8))
             .fluidInputs(Materials.HydricSulfide.getGas(9000), Materials.Oxygen.getGas(27000))
             .fluidOutputs(Materials.SulfurDioxide.getGas(9000))
             .duration(3 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(7))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(7))
             .itemOutputs(Materials.Sulfur.getDust(27))
             .fluidInputs(Materials.SulfurDioxide.getGas(9000), Materials.HydricSulfide.getGas(18000))
             .duration(3 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.SulfurTrioxide.getGas(9000), Materials.Water.getFluid(9000))
             .fluidOutputs(Materials.SulfuricAcid.getFluid(9000))
             .duration(13 * SECONDS)
@@ -5328,16 +5323,16 @@ public class ChemicalRecipes implements Runnable {
 
         // S + O3 + H2O = H2SO4
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24), Materials.Sulfur.getDust(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24), Materials.Sulfur.getDust(1))
             .fluidInputs(Materials.Oxygen.getGas(3000), Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.SulfuricAcid.getFluid(1000))
             .duration(24 * SECONDS)
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(7), Materials.Sulfur.getDust(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(7), Materials.Sulfur.getDust(9))
             .fluidInputs(Materials.Oxygen.getGas(27000), Materials.Water.getFluid(9000))
             .fluidOutputs(Materials.SulfuricAcid.getFluid(9000))
             .duration(13 * SECONDS)
@@ -5346,8 +5341,8 @@ public class ChemicalRecipes implements Runnable {
 
         // H2S + O4 = H2SO4
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.HydricSulfide.getGas(1000), Materials.Oxygen.getGas(4000))
             .fluidOutputs(Materials.SulfuricAcid.getFluid(1000))
             .duration(24 * SECONDS)
@@ -5356,8 +5351,8 @@ public class ChemicalRecipes implements Runnable {
 
         // SO2 + O + H2O = H2SO4
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.SulfurDioxide.getGas(1000),
                 Materials.Oxygen.getGas(1000),
@@ -5367,8 +5362,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(
                 Materials.SulfurDioxide.getGas(9000),
                 Materials.Oxygen.getGas(9000),
@@ -5378,8 +5373,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(
                 Materials.HydrochloricAcid.getFluid(1000),
                 Materials.Ethylene.getGas(1000),
@@ -5389,8 +5384,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.Chlorine.getGas(2000),
                 Materials.Ethylene.getGas(2000),
@@ -5400,8 +5395,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.RawRubber.getDust(18))
             .fluidInputs(
                 Materials.Isoprene.getFluid(1728),
@@ -5411,8 +5406,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.RawRubber.getDust(24))
             .fluidInputs(
                 Materials.Isoprene.getFluid(1728),
@@ -5422,24 +5417,24 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(3))
             .itemOutputs(Materials.RawStyreneButadieneRubber.getDust(1))
             .fluidInputs(Materials.Styrene.getFluid(36), Materials.Butadiene.getGas(108), Materials.Air.getGas(2000))
             .duration(8 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(3))
             .itemOutputs(Materials.RawStyreneButadieneRubber.getDust(3))
             .fluidInputs(Materials.Styrene.getFluid(72), Materials.Butadiene.getGas(216), Materials.Oxygen.getGas(2000))
             .duration(8 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(4))
             .itemOutputs(
                 Materials.RawStyreneButadieneRubber.getDust(22),
                 Materials.RawStyreneButadieneRubber.getDustSmall(2))
@@ -5452,8 +5447,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(4))
             .itemOutputs(Materials.RawStyreneButadieneRubber.getDust(30))
             .fluidInputs(
                 Materials.Styrene.getFluid(540),
@@ -5464,8 +5459,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9), Materials.Salt.getDust(18))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9), Materials.Salt.getDust(18))
             .itemOutputs(Materials.SodiumBisulfate.getDust(63))
             .fluidInputs(Materials.SulfuricAcid.getFluid(9000))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(9000))
@@ -5473,8 +5468,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9), Materials.SodiumHydroxide.getDust(27))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9), Materials.SodiumHydroxide.getDust(27))
             .itemOutputs(Materials.SodiumBisulfate.getDust(63))
             .fluidInputs(Materials.SulfuricAcid.getFluid(9000))
             .fluidOutputs(Materials.Water.getFluid(9000))
@@ -5482,8 +5477,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.Benzene.getFluid(1000),
                 Materials.Chlorine.getGas(2000),
@@ -5498,8 +5493,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C6H6 + 2Cl + NaOH = C6H6O + NaCl + HCl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.SodiumHydroxide.getDust(6), GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.SodiumHydroxide.getDust(6), GTUtility.getIntegratedCircuit(24))
             .itemOutputs(Materials.Salt.getDust(4))
             .fluidInputs(Materials.Benzene.getFluid(2000), Materials.Chlorine.getGas(4000))
             .fluidOutputs(Materials.Phenol.getFluid(2000), Materials.HydrochloricAcid.getFluid(2000))
@@ -5507,24 +5502,24 @@ public class ChemicalRecipes implements Runnable {
             .eut(30)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.LightFuel.getFluid(20000), Materials.HeavyFuel.getFluid(4000))
             .fluidOutputs(Materials.Fuel.getFluid(24000))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.Fuel.getFluid(10000), Materials.Tetranitromethane.getFluid(200))
             .fluidOutputs(Materials.NitroFuel.getFluid(10000))
             .duration(6 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.BioDiesel.getFluid(10000), Materials.Tetranitromethane.getFluid(400))
             .fluidOutputs(Materials.NitroFuel.getFluid(9000))
             .duration(6 * SECONDS)
@@ -5533,9 +5528,9 @@ public class ChemicalRecipes implements Runnable {
 
         // CH4 + 2H2O = CO2 + 8H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(11))
-            .fluidInputs(Materials.Methane.getGas(5000), GT_ModHandler.getDistilledWater(10000))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(11))
+            .fluidInputs(Materials.Methane.getGas(5000), GTModHandler.getDistilledWater(10000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(5000), Materials.Hydrogen.getGas(40000))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_HV)
@@ -5543,24 +5538,24 @@ public class ChemicalRecipes implements Runnable {
 
         // CH4 + H2O = CO + 6H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(12))
-            .fluidInputs(Materials.Methane.getGas(5000), GT_ModHandler.getDistilledWater(5000))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(12))
+            .fluidInputs(Materials.Methane.getGas(5000), GTModHandler.getDistilledWater(5000))
             .fluidOutputs(Materials.CarbonMonoxide.getGas(5000), Materials.Hydrogen.getGas(30000))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.Nitrogen.getGas(20000), Materials.Oxygen.getGas(10000))
             .fluidOutputs(Materials.NitrousOxide.getGas(10000))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.Naphtha.getFluid(16000),
                 Materials.Gas.getGas(2000),
@@ -5571,16 +5566,16 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.GasolineRaw.getFluid(10000), Materials.Toluene.getFluid(1000))
             .fluidOutputs(Materials.GasolineRegular.getFluid(11000))
             .duration(10 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.GasolineRegular.getFluid(20000),
                 Materials.Octane.getFluid(2000),
@@ -5594,8 +5589,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C2H6O + C4H8 = C6H14O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.Ethanol.getFluid(1000), Materials.Butene.getGas(1000))
             .fluidOutputs(Materials.AntiKnock.getFluid(1000))
             .duration(20 * SECONDS)
@@ -5604,24 +5599,24 @@ public class ChemicalRecipes implements Runnable {
 
         // CH4O + C4H8 = C5H12O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.Methanol.getFluid(1000), Materials.Butene.getGas(1000))
             .fluidOutputs(Materials.MTBEMixture.getGas(1000))
             .duration(20 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.Methanol.getFluid(1000), Materials.Butane.getGas(1000))
             .fluidOutputs(Materials.MTBEMixtureAlt.getGas(1000))
             .duration(20 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(
                 Materials.Naquadria.getMolten(4608),
                 Materials.ElectrumFlux.getMolten(4608),
@@ -5633,8 +5628,8 @@ public class ChemicalRecipes implements Runnable {
 
         // CH2O + 2C6H7N + HCl = C13H14N2(HCl) + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(
                 new FluidStack(FluidRegistry.getFluid("fluid.formaldehyde"), 1000),
                 new FluidStack(FluidRegistry.getFluid("aniline"), 2000),
@@ -5646,10 +5641,10 @@ public class ChemicalRecipes implements Runnable {
 
         // C6H5NO2 + 6H =Pd= C6H7N + 2H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 1))
+                GTUtility.getIntegratedCircuit(1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 1))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("nitrobenzene"), 9000), Materials.Hydrogen.getGas(54000))
             .fluidOutputs(Materials.Water.getFluid(18000), new FluidStack(FluidRegistry.getFluid("aniline"), 9000))
             .duration(45 * SECONDS)
@@ -5658,13 +5653,13 @@ public class ChemicalRecipes implements Runnable {
 
         // C6H6 + HNO3 =H2SO4= C6H5NO2 + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(
                 Materials.Benzene.getFluid(5000),
                 Materials.SulfuricAcid.getFluid(3000),
                 Materials.NitricAcid.getFluid(5000),
-                GT_ModHandler.getDistilledWater(10000))
+                GTModHandler.getDistilledWater(10000))
             .fluidOutputs(
                 new FluidStack(FluidRegistry.getFluid("nitrobenzene"), 5000),
                 Materials.DilutedSulfuricAcid.getFluid(3000))
@@ -5674,8 +5669,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C13H14N2(HCl) + 2COCl2 = C15H10N2O2(5HCl)
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(
                 MaterialsKevlar.DiaminodiphenylmethanMixture.getFluid(1000),
                 new FluidStack(FluidRegistry.getFluid("phosgene"), 2000))
@@ -5684,21 +5679,19 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 1))
+                GTUtility.getIntegratedCircuit(9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 1))
             .fluidInputs(MaterialsKevlar.Butyraldehyde.getFluid(9000), Materials.Hydrogen.getGas(18000))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("butanol"), 9000))
             .duration(4 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.KevlarCatalyst, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1), GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.KevlarCatalyst, 1))
             .fluidInputs(
                 new FluidStack(FluidRegistry.getFluid("butanol"), 2000),
                 new FluidStack(FluidRegistry.getFluid("propionicacid"), 1000),
@@ -5707,11 +5700,9 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.KevlarCatalyst, 9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9), GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.KevlarCatalyst, 9))
             .fluidInputs(
                 new FluidStack(FluidRegistry.getFluid("butanol"), 18000),
                 new FluidStack(FluidRegistry.getFluid("propionicacid"), 9000),
@@ -5722,8 +5713,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C2H4 + CO + H2O =C4NiO= C3H6O2
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(
                 Materials.Ethylene.getGas(1000),
                 Materials.CarbonMonoxide.getGas(1000),
@@ -5734,8 +5725,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(
                 Materials.Ethylene.getGas(9000),
                 Materials.CarbonMonoxide.getGas(9000),
@@ -5748,8 +5739,8 @@ public class ChemicalRecipes implements Runnable {
 
         // C6H7N + HNO3 =H2SO4,C4H6O3= C6H6N2O2 + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(
                 new FluidStack(FluidRegistry.getFluid("aniline"), 1000),
                 new FluidStack(FluidRegistry.getFluid("molten.aceticanhydride"), 100),
@@ -5759,8 +5750,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(
                 new FluidStack(FluidRegistry.getFluid("aniline"), 9000),
                 new FluidStack(FluidRegistry.getFluid("molten.aceticanhydride"), 900),
@@ -5772,11 +5763,11 @@ public class ChemicalRecipes implements Runnable {
 
         // C6H6N2O2 + 6H =Pd,NO2= C6H8N2 + 2H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.ParaPhenylenediamine, 16))
+                GTUtility.getIntegratedCircuit(1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.ParaPhenylenediamine, 16))
             .fluidInputs(
                 Materials.NitrogenDioxide.getGas(100),
                 Materials.Hydrogen.getGas(6000),
@@ -5788,20 +5779,20 @@ public class ChemicalRecipes implements Runnable {
 
         // C4H10O2 =Cu= C4H6O2 + 4H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1))
+                GTUtility.getIntegratedCircuit(1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("1,4-butanediol"), 1000))
             .fluidOutputs(MaterialsKevlar.GammaButyrolactone.getFluid(1000), Materials.Hydrogen.getGas(4000))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 9))
+                GTUtility.getIntegratedCircuit(9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 9))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("1,4-butanediol"), 9000))
             .fluidOutputs(MaterialsKevlar.GammaButyrolactone.getFluid(9000), Materials.Hydrogen.getGas(36000))
             .duration(35 * SECONDS)
@@ -5810,13 +5801,13 @@ public class ChemicalRecipes implements Runnable {
 
         // 2CH2O + C2H2 =SiO2,CuO,Bi2O3= C4H6O2
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CupricOxide, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.BismuthIIIOxide, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.IIButinIIVdiol, 12))
+                GTUtility.getIntegratedCircuit(1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.CupricOxide, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.BismuthIIIOxide, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.IIButinIIVdiol, 12))
             .fluidInputs(
                 MaterialsKevlar.Acetylene.getGas(1000),
                 new FluidStack(FluidRegistry.getFluid("fluid.formaldehyde"), 2000))
@@ -5824,15 +5815,15 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.CupricOxide, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.BismuthIIIOxide, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 9))
+                GTUtility.getIntegratedCircuit(9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.CupricOxide, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.BismuthIIIOxide, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 9))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.IIButinIIVdiol, 64),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.IIButinIIVdiol, 44))
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.IIButinIIVdiol, 64),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.IIButinIIVdiol, 44))
             .fluidInputs(
                 MaterialsKevlar.Acetylene.getGas(9000),
                 new FluidStack(FluidRegistry.getFluid("fluid.formaldehyde"), 18000))
@@ -5842,23 +5833,23 @@ public class ChemicalRecipes implements Runnable {
 
         // C4H6O2 + 4H =NiAl= C4H10O2
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.IIButinIIVdiol, 12),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.RaneyNickelActivated, 1))
+                GTUtility.getIntegratedCircuit(1),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.IIButinIIVdiol, 12),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.RaneyNickelActivated, 1))
             .fluidInputs(Materials.Hydrogen.getGas(4000))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("1,4-butanediol"), 1000))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_UV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
+                GTUtility.getIntegratedCircuit(1),
                 CALCIUM_CHLORIDE.getDust(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.ParaPhenylenediamine, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.TerephthaloylChloride, 9))
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.ParaPhenylenediamine, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.TerephthaloylChloride, 9))
             .fluidInputs(MaterialsKevlar.NMethylIIPyrrolidone.getFluid(1000))
             .fluidOutputs(
                 MaterialsKevlar.LiquidCrystalKevlar.getFluid(9000),
@@ -5867,12 +5858,12 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_UV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
+                GTUtility.getIntegratedCircuit(9),
                 CALCIUM_CHLORIDE.getDust(7),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.ParaPhenylenediamine, 63),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.TerephthaloylChloride, 63))
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.ParaPhenylenediamine, 63),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.TerephthaloylChloride, 63))
             .fluidInputs(MaterialsKevlar.NMethylIIPyrrolidone.getFluid(7000))
             .fluidOutputs(
                 MaterialsKevlar.LiquidCrystalKevlar.getFluid(63000),
@@ -5883,10 +5874,10 @@ public class ChemicalRecipes implements Runnable {
 
         // Na2B4O7(H2O)10 + 2HCl = 2NaCl + 4H3BO3 + 5H2O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Borax, 23))
+                GTUtility.getIntegratedCircuit(1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Borax, 23))
             .itemOutputs(Materials.Salt.getDust(4))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(2000))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("boricacid"), 4000), Materials.Water.getFluid(5000))
@@ -5896,8 +5887,8 @@ public class ChemicalRecipes implements Runnable {
 
         // H3BO3 + 3CH4O =H2SO4= C3H9BO3 + 3H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(
                 Materials.Methanol.getFluid(3000),
                 new FluidStack(FluidRegistry.getFluid("boricacid"), 1000),
@@ -5907,8 +5898,8 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(
                 Materials.Methanol.getFluid(27000),
                 new FluidStack(FluidRegistry.getFluid("boricacid"), 9000),
@@ -5920,10 +5911,10 @@ public class ChemicalRecipes implements Runnable {
 
         // RhCl3 + 3C18H15P + 3NaBH4 + CO = RhC55H46P3O + 3NaCl + 3B + 11H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.RhodiumChloride, 4),
+                GTUtility.getIntegratedCircuit(1),
+                GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.RhodiumChloride, 4),
                 MaterialsKevlar.Triphenylphosphene.getDust(64),
                 MaterialsKevlar.Triphenylphosphene.getDust(38),
                 MaterialsKevlar.SodiumBorohydride.getDust(18))
@@ -5940,9 +5931,9 @@ public class ChemicalRecipes implements Runnable {
 
         // 2NaOH + N2H4 =Mn= 2N + 2H2O + 2NaH
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(9),
+                GTUtility.getIntegratedCircuit(9),
                 Materials.SodiumHydroxide.getDust(6),
                 Materials.Manganese.getDustTiny(1))
             .itemOutputs(MaterialsKevlar.SodiumHydride.getDust(4))
@@ -5952,9 +5943,9 @@ public class ChemicalRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(multiblockChemicalReactorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_Utility.getIntegratedCircuit(18),
+                GTUtility.getIntegratedCircuit(18),
                 Materials.SodiumHydroxide.getDust(54),
                 Materials.Manganese.getDust(1))
             .itemOutputs(MaterialsKevlar.SodiumHydride.getDust(36))
diff --git a/src/main/java/gregtech/loaders/postload/recipes/CircuitAssemblerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/CircuitAssemblerRecipes.java
index 072992d07e..b17eecc748 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/CircuitAssemblerRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/CircuitAssemblerRecipes.java
@@ -4,20 +4,20 @@ import static gregtech.api.enums.Mods.Forestry;
 import static gregtech.api.enums.Mods.NewHorizonsCoreMod;
 import static gregtech.api.enums.Mods.Railcraft;
 import static gregtech.api.recipe.RecipeMaps.circuitAssemblerRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.loaders.postload.GT_MachineRecipeLoader.solderingMats;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.loaders.postload.MachineRecipeLoader.solderingMats;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.SubTag;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class CircuitAssemblerRecipes implements Runnable {
 
@@ -39,10 +39,10 @@ public class CircuitAssemblerRecipes implements Runnable {
 
             // Railcraft Circuits
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Coated_Basic.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 1),
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 1),
                     ItemList.Cover_Controller.get(1))
                 .itemOutputs(getModItem(Railcraft.ID, "part.circuit", 4L, 0))
                 .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
@@ -50,10 +50,10 @@ public class CircuitAssemblerRecipes implements Runnable {
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Coated_Basic.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 1),
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 1),
                     ItemList.Sensor_LV.get(1))
                 .itemOutputs(getModItem(Railcraft.ID, "part.circuit", 4L, 1))
                 .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
@@ -61,10 +61,10 @@ public class CircuitAssemblerRecipes implements Runnable {
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Coated_Basic.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 1),
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 1),
                     getModItem(Railcraft.ID, "part.signal.lamp", 1L, 0))
                 .itemOutputs(getModItem(Railcraft.ID, "part.circuit", 4L, 2))
                 .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
@@ -72,10 +72,10 @@ public class CircuitAssemblerRecipes implements Runnable {
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Phenolic_Good.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1),
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1),
                     ItemList.Cover_Controller.get(1))
                 .itemOutputs(getModItem(Railcraft.ID, "part.circuit", 8L, 0))
                 .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
@@ -83,10 +83,10 @@ public class CircuitAssemblerRecipes implements Runnable {
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Phenolic_Good.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1),
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1),
                     ItemList.Sensor_LV.get(1))
                 .itemOutputs(getModItem(Railcraft.ID, "part.circuit", 8L, 1))
                 .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
@@ -94,10 +94,10 @@ public class CircuitAssemblerRecipes implements Runnable {
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Phenolic_Good.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1),
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1),
                     getModItem(Railcraft.ID, "part.signal.lamp", 1L, 0))
                 .itemOutputs(getModItem(Railcraft.ID, "part.circuit", 8L, 2))
                 .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
@@ -105,10 +105,10 @@ public class CircuitAssemblerRecipes implements Runnable {
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Epoxy_Advanced.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1),
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1),
                     ItemList.Cover_Controller.get(1))
                 .itemOutputs(getModItem(Railcraft.ID, "part.circuit", 16L, 0))
                 .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
@@ -116,10 +116,10 @@ public class CircuitAssemblerRecipes implements Runnable {
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Epoxy_Advanced.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1),
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1),
                     ItemList.Sensor_LV.get(1))
                 .itemOutputs(getModItem(Railcraft.ID, "part.circuit", 16L, 1))
                 .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
@@ -127,10 +127,10 @@ public class CircuitAssemblerRecipes implements Runnable {
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Epoxy_Advanced.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1),
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1),
                     getModItem(Railcraft.ID, "part.signal.lamp", 1L, 0))
                 .itemOutputs(getModItem(Railcraft.ID, "part.circuit", 16L, 2))
                 .fluidInputs(tMat.getMolten(144L * tMultiplier / 2))
@@ -138,56 +138,56 @@ public class CircuitAssemblerRecipes implements Runnable {
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Coated_Basic.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.ULV, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Iron, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Iron, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Iron, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.ULV, 2),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Iron, 2),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Iron, 4),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Iron, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(getModItem(Forestry.ID, "chipsets", 1L, 0))
                 .fluidInputs(tMat.getMolten(1152L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Coated_Basic.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Bronze, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Bronze, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Bronze, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 2),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Bronze, 2),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Bronze, 4),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Bronze, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(getModItem(Forestry.ID, "chipsets", 1L, 1))
                 .fluidInputs(tMat.getMolten(1152L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Phenolic_Good.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Steel, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Steel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 2),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Steel, 2),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 4),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Steel, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(getModItem(Forestry.ID, "chipsets", 1L, 2))
                 .fluidInputs(tMat.getMolten(1152L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Phenolic_Good.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Electrum, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Electrum, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, 2),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Electrum, 4),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Electrum, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(getModItem(Forestry.ID, "chipsets", 1L, 3))
                 .fluidInputs(tMat.getMolten(1152L * tMultiplier / 2))
                 .duration(10 * SECONDS)
@@ -204,12 +204,12 @@ public class CircuitAssemblerRecipes implements Runnable {
 
         // alternative version of the copper electron tube
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
-                GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Gold, 2),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 2),
-                GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.AnnealedCopper, 2))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
+                GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Gold, 2),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 2),
+                GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.AnnealedCopper, 2))
             .itemOutputs(getModItem(Forestry.ID, "thermionicTubes", 4L, 0))
             .fluidInputs(Materials.Glass.getMolten(576))
             .duration(10 * SECONDS)
@@ -218,12 +218,12 @@ public class CircuitAssemblerRecipes implements Runnable {
 
         // alternative version of the iron electron tube
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
-                GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Gold, 2),
-                GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 2),
-                GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.WroughtIron, 2))
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
+                GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Gold, 2),
+                GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 2),
+                GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.WroughtIron, 2))
             .itemOutputs(getModItem(Forestry.ID, "thermionicTubes", 4L, 3))
             .fluidInputs(Materials.Glass.getMolten(576))
             .duration(10 * SECONDS)
@@ -231,27 +231,27 @@ public class CircuitAssemblerRecipes implements Runnable {
             .addTo(circuitAssemblerRecipes);
 
         ItemStack[] rodMaterials = new ItemStack[] {
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Copper, 2L),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Tin, 2L),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Bronze, 2L),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Iron, 2L),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Gold, 2L),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Diamond, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Copper, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Tin, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Bronze, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Iron, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Gold, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Diamond, 2L),
             getModItem(NewHorizonsCoreMod.ID, "item.LongObsidianRod", 2L, 0),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Blaze, 2L),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Rubber, 2L),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Emerald, 2L),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Apatite, 2L),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Lapis, 2L),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.EnderEye, 2L),
-            GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Uranium, 2L), };
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Blaze, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Rubber, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Emerald, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Apatite, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Lapis, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.EnderEye, 2L),
+            GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Uranium, 2L), };
 
         for (int metaid = 0; metaid < rodMaterials.length; metaid++) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.bolt, Materials.Gold, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 2),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.RedAlloy, 1),
+                    GTOreDictUnificator.get(OrePrefixes.bolt, Materials.Gold, 2),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 2),
                     rodMaterials[metaid])
                 .itemOutputs(getModItem(Forestry.ID, "thermionicTubes", 4L, metaid))
                 .fluidInputs(Materials.Glass.getMolten(576))
@@ -265,56 +265,56 @@ public class CircuitAssemblerRecipes implements Runnable {
             int tMultiplier = tMat.contains(SubTag.SOLDERING_MATERIAL_GOOD) ? 1
                 : tMat.contains(SubTag.SOLDERING_MATERIAL_BAD) ? 4 : 2;
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Coated_Basic.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.ULV, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Iron, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Iron, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Iron, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.ULV, 2),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Iron, 2),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Iron, 4),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Iron, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(getModItem(Forestry.ID, "chipsets", 1L, 0))
                 .fluidInputs(tMat.getMolten(1152L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Coated_Basic.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Bronze, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Bronze, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Bronze, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 2),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Bronze, 2),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Bronze, 4),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Bronze, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(getModItem(Forestry.ID, "chipsets", 1L, 1))
                 .fluidInputs(tMat.getMolten(1152L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Phenolic_Good.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Steel, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Steel, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 2),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Steel, 2),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Steel, 4),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Steel, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(getModItem(Forestry.ID, "chipsets", 1L, 2))
                 .fluidInputs(tMat.getMolten(1152L * tMultiplier / 2))
                 .duration(10 * SECONDS)
                 .eut((int) TierEU.RECIPE_LV)
                 .addTo(circuitAssemblerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.Circuit_Board_Phenolic_Good.get(1),
-                    GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Electrum, 4),
-                    GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Electrum, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2),
+                    GTOreDictUnificator.get(OrePrefixes.foil, Materials.Electrum, 2),
+                    GTOreDictUnificator.get(OrePrefixes.screw, Materials.Electrum, 4),
+                    GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Electrum, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(getModItem(Forestry.ID, "chipsets", 1L, 3))
                 .fluidInputs(tMat.getMolten(1152L * tMultiplier / 2))
                 .duration(10 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/CompressorRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/CompressorRecipes.java
index a5144260c2..21e6421a62 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/CompressorRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/CompressorRecipes.java
@@ -3,22 +3,21 @@ package gregtech.loaders.postload.recipes;
 import static gregtech.api.enums.Mods.AppliedEnergistics2;
 import static gregtech.api.enums.Mods.Railcraft;
 import static gregtech.api.recipe.RecipeMaps.compressorRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gtPlusPlus.xmod.bop.blocks.BOP_Block_Registrator.sapling_Rainforest;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gtPlusPlus.xmod.bop.blocks.BOPBlockRegistrator.sapling_Rainforest;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader;
-
-import gregtech.api.enums.GT_Values;
+import bartworks.system.material.WerkstoffLoader;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
 import mods.railcraft.common.blocks.aesthetics.cube.EnumCube;
 import mods.railcraft.common.items.RailcraftToolItems;
 
@@ -26,203 +25,203 @@ public class CompressorRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Cell_Empty.get(1))
             .itemOutputs(ItemList.Cell_Air.get(1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.sand, 4))
             .itemOutputs(new ItemStack(Blocks.sandstone, 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("iridiumShard", 9))
-            .itemOutputs(GT_ModHandler.getIC2Item("iridiumOre", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("iridiumShard", 9))
+            .itemOutputs(GTModHandler.getIC2Item("iridiumOre", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.clay_ball, 4))
             .itemOutputs(new ItemStack(Blocks.clay, 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.brick, 4))
             .itemOutputs(new ItemStack(Blocks.brick_block, 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.netherbrick, 4))
             .itemOutputs(new ItemStack(Blocks.nether_brick, 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("smallPlutonium", 9))
-            .itemOutputs(GT_ModHandler.getIC2Item("Plutonium", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("smallPlutonium", 9))
+            .itemOutputs(GTModHandler.getIC2Item("Plutonium", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("smallUran235", 9))
-            .itemOutputs(GT_ModHandler.getIC2Item("Uran235", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("smallUran235", 9))
+            .itemOutputs(GTModHandler.getIC2Item("Uran235", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.water_bucket, 1))
             .itemOutputs(new ItemStack(Blocks.snow, 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.snowball, 4))
             .itemOutputs(new ItemStack(Blocks.snow, 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Cell_Water.get(1))
             .itemOutputs(new ItemStack(Blocks.snow, 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.snow, 1))
             .itemOutputs(new ItemStack(Blocks.ice, 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("carbonMesh", 1))
-            .itemOutputs(GT_ModHandler.getIC2Item("carbonPlate", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("carbonMesh", 1))
+            .itemOutputs(GTModHandler.getIC2Item("carbonPlate", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("coalBall", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("coalBall", 1))
             .itemOutputs(ItemList.IC2_Compressed_Coal_Ball.get(1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 8L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Wood, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 8L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, Materials.Wood, 1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(sapling_Rainforest, 8))
             .itemOutputs(ItemList.IC2_Plantball.get(1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.IC2_Compressed_Coal_Chunk.get(1))
             .itemOutputs(ItemList.IC2_Industrial_Diamond.get(1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1))
-            .itemOutputs(GT_ModHandler.getIC2Item("Uran238", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 1))
+            .itemOutputs(GTModHandler.getIC2Item("Uran238", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium235, 1))
-            .itemOutputs(GT_ModHandler.getIC2Item("Uran235", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uranium235, 1))
+            .itemOutputs(GTModHandler.getIC2Item("Uran235", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 1))
-            .itemOutputs(GT_ModHandler.getIC2Item("Plutonium", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 1))
+            .itemOutputs(GTModHandler.getIC2Item("Plutonium", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium235, 1))
-            .itemOutputs(GT_ModHandler.getIC2Item("smallUran235", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Uranium235, 1))
+            .itemOutputs(GTModHandler.getIC2Item("smallUran235", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1))
-            .itemOutputs(GT_ModHandler.getIC2Item("smallPlutonium", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1))
+            .itemOutputs(GTModHandler.getIC2Item("smallPlutonium", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.ice, 2, 32767))
             .itemOutputs(new ItemStack(Blocks.packed_ice, 1, 0))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1))
             .itemOutputs(new ItemStack(Blocks.ice, 1, 0))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.CertusQuartz, 4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.CertusQuartz, 4))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "tile.BlockQuartz", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 8L, 10))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "tile.BlockQuartz", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 8L, 11))
             .itemOutputs(new ItemStack(Blocks.quartz_block, 1, 0))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 8L, 12))
             .itemOutputs(getModItem(AppliedEnergistics2.ID, "tile.BlockFluix", 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.quartz, 4, 0))
             .itemOutputs(new ItemStack(Blocks.quartz_block, 1, 0))
             .duration(15 * SECONDS)
@@ -235,21 +234,21 @@ public class CompressorRecipes implements Runnable {
          * .addTo(sCompressorRecipes);
          */
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 4))
             .itemOutputs(new ItemStack(Blocks.glowstone, 1))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Fireclay.getDust(1))
             .itemOutputs(ItemList.CompressedFireclay.get(1))
             .duration(4 * SECONDS)
             .eut(4)
             .addTo(compressorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.gem, 9))
             .itemOutputs(WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.block, 1))
             .duration(15 * SECONDS)
@@ -257,7 +256,7 @@ public class CompressorRecipes implements Runnable {
             .addTo(compressorRecipes);
 
         if (Railcraft.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(RailcraftToolItems.getCoalCoke(9))
                 .itemOutputs(EnumCube.COKE_BLOCK.getItem())
                 .duration(15 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/CropProcessingRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/CropProcessingRecipes.java
index 6fc53a5675..7833b6fc5f 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/CropProcessingRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/CropProcessingRecipes.java
@@ -1,20 +1,20 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeConstants.UniversalChemical;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeConstants.UniversalChemical;
 
 import net.minecraft.item.ItemStack;
 import net.minecraftforge.fluids.FluidStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeBuilder;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeBuilder;
+import gregtech.api.util.GTUtility;
 
 public class CropProcessingRecipes implements Runnable {
 
@@ -123,17 +123,17 @@ public class CropProcessingRecipes implements Runnable {
 
     public void addProcess(ItemStack tCrop, Materials aMaterial, Materials aMaterialOut, int chance,
         boolean aMainOutput) {
-        if (tCrop == null || aMaterial == null || GT_OreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1) == null)
+        if (tCrop == null || aMaterial == null || GTOreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1) == null)
             return;
 
         FluidStack fluidOutputChemReactor = aMaterialOut.mOreByProducts.isEmpty() ? null
             : aMaterialOut.mOreByProducts.get(0)
                 .getMolten(144);
 
-        GT_RecipeBuilder recipeBuilder = GT_Values.RA.stdBuilder();
+        GTRecipeBuilder recipeBuilder = GTValues.RA.stdBuilder();
         recipeBuilder
-            .itemInputs(GT_Utility.copyAmount(9, tCrop), GT_OreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.crushedPurified, aMaterial, 4))
+            .itemInputs(GTUtility.copyAmount(9, tCrop), GTOreDictUnificator.get(OrePrefixes.crushed, aMaterial, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.crushedPurified, aMaterial, 4))
             .fluidInputs(Materials.Water.getFluid(1000));
         if (fluidOutputChemReactor != null) {
             recipeBuilder.fluidOutputs(fluidOutputChemReactor);
@@ -142,9 +142,9 @@ public class CropProcessingRecipes implements Runnable {
             .eut(24)
             .addTo(UniversalChemical);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.copyAmount(16, tCrop))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.crushedPurified, aMaterial, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.copyAmount(16, tCrop))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.crushedPurified, aMaterial, 1))
             .fluidInputs(Materials.UUMatter.getFluid(Math.max(1, ((aMaterial.getMass() + 9) / 10))))
             .duration((int) (aMaterial.getMass() * 128))
             .eut(384)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/CuttingRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/CuttingRecipes.java
index 1d0eeecd8b..915c254ba1 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/CuttingRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/CuttingRecipes.java
@@ -4,21 +4,21 @@ import static gregtech.api.enums.Mods.BuildCraftTransport;
 import static gregtech.api.enums.Mods.Forestry;
 import static gregtech.api.enums.Mods.TinkerConstruct;
 import static gregtech.api.recipe.RecipeMaps.cutterRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class CuttingRecipes implements Runnable {
 
@@ -29,7 +29,7 @@ public class CuttingRecipes implements Runnable {
             recipeWithClassicFluids(
                 new ItemStack[] { ItemList.Circuit_Silicon_Ingot.get(1) },
                 new ItemStack[] { ItemList.Circuit_Silicon_Wafer.get(16),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 4) },
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 4) },
                 20 * SECONDS,
                 TierEU.RECIPE_LV,
                 false);
@@ -37,7 +37,7 @@ public class CuttingRecipes implements Runnable {
             recipeWithClassicFluids(
                 new ItemStack[] { ItemList.Circuit_Silicon_Ingot2.get(1) },
                 new ItemStack[] { ItemList.Circuit_Silicon_Wafer2.get(32),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 8) },
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 8) },
                 40 * SECONDS,
                 TierEU.RECIPE_MV,
                 true);
@@ -45,7 +45,7 @@ public class CuttingRecipes implements Runnable {
             recipeWithClassicFluids(
                 new ItemStack[] { ItemList.Circuit_Silicon_Ingot3.get(1) },
                 new ItemStack[] { ItemList.Circuit_Silicon_Wafer3.get(64),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 16) },
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 16) },
                 1 * MINUTES + 20 * SECONDS,
                 TierEU.RECIPE_HV,
                 true);
@@ -53,7 +53,7 @@ public class CuttingRecipes implements Runnable {
             recipeWithPurifiedWater(
                 new ItemStack[] { ItemList.Circuit_Silicon_Ingot3.get(1) },
                 new ItemStack[] { ItemList.Circuit_Silicon_Wafer3.get(128),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 16) },
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 16) },
                 Materials.Grade1PurifiedWater,
                 Materials.Grade2PurifiedWater,
                 (int) ((1 * MINUTES + 20 * SECONDS) * 0.75),
@@ -63,7 +63,7 @@ public class CuttingRecipes implements Runnable {
             recipeWithPurifiedWater(
                 new ItemStack[] { ItemList.Circuit_Silicon_Ingot4.get(1) },
                 new ItemStack[] { ItemList.Circuit_Silicon_Wafer4.get(64), ItemList.Circuit_Silicon_Wafer4.get(32),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 32) },
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 32) },
                 Materials.Grade3PurifiedWater,
                 Materials.Grade4PurifiedWater,
                 2 * MINUTES,
@@ -73,7 +73,7 @@ public class CuttingRecipes implements Runnable {
             recipeWithPurifiedWater(
                 new ItemStack[] { ItemList.Circuit_Silicon_Ingot5.get(1) },
                 new ItemStack[] { ItemList.Circuit_Silicon_Wafer5.get(64), ItemList.Circuit_Silicon_Wafer5.get(64),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 64) },
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconSG, 64) },
                 Materials.Grade5PurifiedWater,
                 Materials.Grade6PurifiedWater,
                 2 * MINUTES + 40 * SECONDS,
@@ -166,7 +166,7 @@ public class CuttingRecipes implements Runnable {
 
         recipeWithClassicFluids(
             new ItemStack[] { new ItemStack(Blocks.glowstone, 1, 0) },
-            new ItemStack[] { GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Glowstone, 4) },
+            new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.plate, Materials.Glowstone, 4) },
             5 * SECONDS,
             16,
             false);
@@ -241,7 +241,7 @@ public class CuttingRecipes implements Runnable {
 
     public void recipeWithPurifiedWater(ItemStack[] inputs, ItemStack[] outputs, Materials lowTierWater,
         Materials highTierWater, int duration, int boostedDuration, long eut) {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(inputs)
             .itemOutputs(outputs)
             .fluidInputs(lowTierWater.getFluid(100L))
@@ -249,7 +249,7 @@ public class CuttingRecipes implements Runnable {
             .eut(eut)
             .addTo(cutterRecipes);
         // Bonus for using higher tier water
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(inputs)
             .itemOutputs(outputs)
             .fluidInputs(highTierWater.getFluid(100L))
@@ -261,7 +261,7 @@ public class CuttingRecipes implements Runnable {
     public void recipeWithClassicFluids(ItemStack[] inputs, ItemStack[] outputs, int duration, long eut,
         boolean cleanroomRequired) {
         if (cleanroomRequired) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(inputs)
                 .itemOutputs(outputs)
                 .fluidInputs(Materials.Water.getFluid(Math.max(4, Math.min(1000, duration * eut / 320))))
@@ -270,16 +270,16 @@ public class CuttingRecipes implements Runnable {
                 .requiresCleanRoom()
                 .addTo(cutterRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(inputs)
                 .itemOutputs(outputs)
-                .fluidInputs(GT_ModHandler.getDistilledWater(Math.max(3, Math.min(750, duration * eut / 426))))
+                .fluidInputs(GTModHandler.getDistilledWater(Math.max(3, Math.min(750, duration * eut / 426))))
                 .duration(2 * duration)
                 .eut(eut)
                 .requiresCleanRoom()
                 .addTo(cutterRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(inputs)
                 .itemOutputs(outputs)
                 .fluidInputs(Materials.Lubricant.getFluid(Math.max(1, Math.min(250, duration * eut / 1280))))
@@ -288,7 +288,7 @@ public class CuttingRecipes implements Runnable {
                 .requiresCleanRoom()
                 .addTo(cutterRecipes);
         } else {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(inputs)
                 .itemOutputs(outputs)
                 .fluidInputs(Materials.Water.getFluid(Math.max(4, Math.min(1000, duration * eut / 320))))
@@ -296,15 +296,15 @@ public class CuttingRecipes implements Runnable {
                 .eut(eut)
                 .addTo(cutterRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(inputs)
                 .itemOutputs(outputs)
-                .fluidInputs(GT_ModHandler.getDistilledWater(Math.max(3, Math.min(750, duration * eut / 426))))
+                .fluidInputs(GTModHandler.getDistilledWater(Math.max(3, Math.min(750, duration * eut / 426))))
                 .duration(2 * duration)
                 .eut(eut)
                 .addTo(cutterRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(inputs)
                 .itemOutputs(outputs)
                 .fluidInputs(Materials.Lubricant.getFluid(Math.max(1, Math.min(250, duration * eut / 1280))))
diff --git a/src/main/java/gregtech/loaders/postload/recipes/DistilleryRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/DistilleryRecipes.java
index dfbb2501f0..5354067da3 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/DistilleryRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/DistilleryRecipes.java
@@ -3,26 +3,26 @@ package gregtech.loaders.postload.recipes;
 import static gregtech.api.enums.Mods.TinkerConstruct;
 import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes;
 import static gregtech.api.recipe.RecipeMaps.distilleryRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 import static net.minecraftforge.fluids.FluidRegistry.getFluidStack;
 
 import net.minecraft.item.ItemStack;
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsKevlar;
 import gregtech.api.enums.MaterialsOreAlum;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeBuilder;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeBuilder;
+import gregtech.api.util.GTUtility;
 
 public class DistilleryRecipes implements Runnable {
 
@@ -32,104 +32,104 @@ public class DistilleryRecipes implements Runnable {
         distillationTowerRecipes();
         universalDistillationTowerRecipes();
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.Creosote.getFluid(100L))
             .fluidOutputs(Materials.Lubricant.getFluid(32L))
             .duration(12 * SECONDS)
             .eut(30)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.SeedOil.getFluid(32L))
             .fluidOutputs(Materials.Lubricant.getFluid(8L))
             .duration(4 * SECONDS)
             .eut(30)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.FishOil.getFluid(32L))
             .fluidOutputs(Materials.Lubricant.getFluid(8L))
             .duration(4 * SECONDS)
             .eut(30)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.Oil.getFluid(120L))
             .fluidOutputs(Materials.Lubricant.getFluid(60L))
             .duration(8 * SECONDS)
             .eut(30)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.OilLight.getFluid(120L))
             .fluidOutputs(Materials.Lubricant.getFluid(30L))
             .duration(8 * SECONDS)
             .eut(30)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.OilMedium.getFluid(120L))
             .fluidOutputs(Materials.Lubricant.getFluid(60L))
             .duration(8 * SECONDS)
             .eut(30)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(24))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(24))
             .fluidInputs(Materials.OilHeavy.getFluid(120L))
             .fluidOutputs(Materials.Lubricant.getFluid(90L))
             .duration(8 * SECONDS)
             .eut(30)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Biomass.getFluid(40L))
             .fluidOutputs(Materials.Ethanol.getFluid(12L))
             .duration(16 * TICKS)
             .eut(24)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(5))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(5))
             .fluidInputs(Materials.Biomass.getFluid(40L))
             .fluidOutputs(Materials.Water.getFluid(12L))
             .duration(16 * TICKS)
             .eut(24)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(5))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(5))
             .fluidInputs(Materials.Water.getFluid(5L))
-            .fluidOutputs(GT_ModHandler.getDistilledWater(5L))
+            .fluidOutputs(GTModHandler.getDistilledWater(5L))
             .duration(16 * TICKS)
             .eut(10)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(getFluidStack("potion.potatojuice", 2))
             .fluidOutputs(getFluidStack("potion.vodka", 1))
             .duration(16 * TICKS)
             .eut(16)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(getFluidStack("potion.lemonade", 2))
             .fluidOutputs(getFluidStack("potion.alcopops", 1))
             .duration(16 * TICKS)
             .eut(16)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .itemOutputs(MaterialsOreAlum.SluiceSand.getDust(1))
             .fluidInputs(MaterialsOreAlum.SluiceJuice.getFluid(1000))
             .fluidOutputs(Materials.Water.getFluid(500))
@@ -137,32 +137,32 @@ public class DistilleryRecipes implements Runnable {
             .eut(16)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(6))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(6))
             .fluidInputs(Materials.WoodTar.getFluid(200))
             .fluidOutputs(MaterialsKevlar.IIIDimethylbenzene.getFluid(30))
             .duration(16 * TICKS)
             .eut(64)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(6))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(6))
             .fluidInputs(Materials.CharcoalByproducts.getGas(200))
             .fluidOutputs(MaterialsKevlar.IIIDimethylbenzene.getFluid(20))
             .duration(5 * SECONDS)
             .eut(64)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(7))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(7))
             .fluidInputs(Materials.WoodTar.getFluid(200))
             .fluidOutputs(MaterialsKevlar.IVDimethylbenzene.getFluid(30))
             .duration(16 * TICKS)
             .eut(64)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(7))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(7))
             .fluidInputs(Materials.CharcoalByproducts.getGas(200))
             .fluidOutputs(MaterialsKevlar.IVDimethylbenzene.getFluid(20))
             .duration(5 * SECONDS)
@@ -170,17 +170,17 @@ public class DistilleryRecipes implements Runnable {
             .addTo(distilleryRecipes);
         // (NaCl·H2O) = NaCl + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Salt.getDust(2))
             .fluidInputs(Materials.SaltWater.getFluid(1000))
-            .fluidOutputs(GT_ModHandler.getDistilledWater(1000))
+            .fluidOutputs(GTModHandler.getDistilledWater(1000))
             .duration(1 * MINUTES + 20 * SECONDS)
             .eut(30)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.IC2_Fertilizer.get(1))
             .fluidInputs(Materials.FermentedBiomass.getFluid(1000))
             .fluidOutputs(Materials.AceticAcid.getFluid(25))
@@ -188,8 +188,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(8)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .itemOutputs(ItemList.IC2_Fertilizer.get(1))
             .fluidInputs(Materials.FermentedBiomass.getFluid(1000))
             .fluidOutputs(Materials.Water.getFluid(375))
@@ -197,8 +197,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(8)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(3))
             .itemOutputs(ItemList.IC2_Fertilizer.get(1))
             .fluidInputs(Materials.FermentedBiomass.getFluid(1000))
             .fluidOutputs(Materials.Ethanol.getFluid(150))
@@ -206,8 +206,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(8)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(4))
             .itemOutputs(ItemList.IC2_Fertilizer.get(1))
             .fluidInputs(Materials.FermentedBiomass.getFluid(1000))
             .fluidOutputs(Materials.Methanol.getFluid(150))
@@ -215,8 +215,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(8)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(5))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(5))
             .itemOutputs(ItemList.IC2_Fertilizer.get(1))
             .fluidInputs(Materials.FermentedBiomass.getFluid(1000))
             .fluidOutputs(Materials.Ammonia.getGas(100))
@@ -224,8 +224,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(8)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(6))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(6))
             .itemOutputs(ItemList.IC2_Fertilizer.get(1))
             .fluidInputs(Materials.FermentedBiomass.getFluid(1000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(400))
@@ -233,8 +233,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(8)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(7))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(7))
             .itemOutputs(ItemList.IC2_Fertilizer.get(1))
             .fluidInputs(Materials.FermentedBiomass.getFluid(1000))
             .fluidOutputs(Materials.Methane.getGas(600))
@@ -242,8 +242,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(8)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(17))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(17))
             .itemOutputs(ItemList.IC2_Fertilizer.get(1))
             .fluidInputs(Materials.FermentedBiomass.getFluid(1000))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("ic2biogas"), 1800))
@@ -251,24 +251,24 @@ public class DistilleryRecipes implements Runnable {
             .eut(8)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Methane.getGas(1000))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("ic2biogas"), 3000))
             .duration(8 * SECONDS)
             .eut(8)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.HeavyFuel.getFluid(100))
             .fluidOutputs(Materials.Benzene.getFluid(40))
             .duration(8 * SECONDS)
             .eut(24)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(3))
             .fluidInputs(Materials.HeavyFuel.getFluid(100))
             .fluidOutputs(Materials.Phenol.getFluid(25))
             .duration(8 * SECONDS)
@@ -276,64 +276,64 @@ public class DistilleryRecipes implements Runnable {
             .addTo(distilleryRecipes);
         // Dimethylbenzene
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(5))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(5))
             .fluidInputs(Materials.WoodTar.getFluid(200))
             .fluidOutputs(Materials.Dimethylbenzene.getFluid(30))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(5))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(5))
             .fluidInputs(Materials.CharcoalByproducts.getGas(200))
             .fluidOutputs(Materials.Dimethylbenzene.getFluid(20))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(new FluidStack(ItemList.sOilExtraHeavy, 10))
             .fluidOutputs(Materials.OilHeavy.getFluid(15))
             .duration(16 * TICKS)
             .eut(24)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.HeavyFuel.getFluid(10L))
             .fluidOutputs(new FluidStack(ItemList.sToluene, 4))
             .duration(16 * TICKS)
             .eut(24)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(new FluidStack(ItemList.sToluene, 30))
             .fluidOutputs(Materials.LightFuel.getFluid(30L))
             .duration(16 * TICKS)
             .eut(24)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("ic2biomass"), 20))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("ic2biogas"), 32))
             .duration(2 * SECONDS)
             .eut(16)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("ic2biomass"), 4))
             .fluidOutputs(Materials.Water.getFluid(2))
             .duration(4 * SECONDS)
             .eut(30)
             .addTo(distilleryRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(getFluidStack("potion.wheatyjuice", 75))
             .fluidOutputs(getFluidStack("potion.scotch", 1))
             .duration(1 * SECONDS)
@@ -342,16 +342,16 @@ public class DistilleryRecipes implements Runnable {
 
         if (TinkerConstruct.isModLoaded()) {
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.getIntegratedCircuit(1))
                 .fluidInputs(Materials.Glue.getFluid(8L))
                 .fluidOutputs(getFluidStack("glue", 8))
                 .duration(1 * TICKS)
                 .eut(24)
                 .addTo(distilleryRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.getIntegratedCircuit(1))
                 .fluidInputs(getFluidStack("glue", 8))
                 .fluidOutputs(Materials.Glue.getFluid(4L))
                 .duration(1 * TICKS)
@@ -362,63 +362,63 @@ public class DistilleryRecipes implements Runnable {
     }
 
     public void distillationTowerRecipes() {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.Creosote.getFluid(1000L))
             .fluidOutputs(Materials.Lubricant.getFluid(500L))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.SeedOil.getFluid(1400L))
             .fluidOutputs(Materials.Lubricant.getFluid(500L))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.FishOil.getFluid(1200L))
             .fluidOutputs(Materials.Lubricant.getFluid(500L))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 2L))
+        GTValues.RA.stdBuilder()
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 2L))
             .fluidInputs(Materials.Biomass.getFluid(1000L))
             .fluidOutputs(Materials.Ethanol.getFluid(600L), Materials.Water.getFluid(300L))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(400)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Water.getFluid(1000L))
-            .fluidOutputs(GT_ModHandler.getDistilledWater(1000L))
+            .fluidOutputs(GTModHandler.getDistilledWater(1000L))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(TierEU.RECIPE_MV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.OilLight.getFluid(1000L))
             .fluidOutputs(Materials.Lubricant.getFluid(250L))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.OilMedium.getFluid(1000L))
             .fluidOutputs(Materials.Lubricant.getFluid(500L))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.OilHeavy.getFluid(1000L))
             .fluidOutputs(Materials.Lubricant.getFluid(750L))
             .duration(20 * SECONDS)
@@ -426,16 +426,16 @@ public class DistilleryRecipes implements Runnable {
             .addTo(distillationTowerRecipes);
         // C15H10N2O2(5HCl) = C15H10N2O2 + 5HCl
 
-        GT_Values.RA.stdBuilder()
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.DiphenylmethaneDiisocyanate, 29L))
+        GTValues.RA.stdBuilder()
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, MaterialsKevlar.DiphenylmethaneDiisocyanate, 29L))
             .fluidInputs(MaterialsKevlar.DiphenylmethaneDiisocyanateMixture.getFluid(1000L))
             .fluidOutputs(Materials.HydrochloricAcid.getFluid(5000L))
             .duration(2 * MINUTES + 5 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Charcoal.getDustSmall(1))
             .fluidInputs(Materials.CharcoalByproducts.getGas(1000))
             .fluidOutputs(
@@ -447,8 +447,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(256)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.WoodTar.getFluid(1000))
             .fluidOutputs(
                 Materials.Creosote.getFluid(250),
@@ -460,8 +460,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(256)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(3))
             .itemOutputs(Materials.Charcoal.getDustSmall(1))
             .fluidInputs(Materials.CharcoalByproducts.getGas(1000))
             .fluidOutputs(
@@ -473,8 +473,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(256)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(4))
             .itemOutputs(Materials.Charcoal.getDustSmall(1))
             .fluidInputs(Materials.CharcoalByproducts.getGas(1000))
             .fluidOutputs(
@@ -488,8 +488,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(256)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(4))
             .fluidInputs(Materials.WoodTar.getFluid(1000))
             .fluidOutputs(
                 Materials.Creosote.getFluid(250),
@@ -503,8 +503,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(256)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.OilLight.getFluid(1000))
             .fluidOutputs(
                 Materials.SulfuricHeavyFuel.getFluid(70),
@@ -516,8 +516,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.OilMedium.getFluid(1000))
             .fluidOutputs(
                 Materials.SulfuricHeavyFuel.getFluid(100),
@@ -529,8 +529,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.Oil.getFluid(1000L))
             .fluidOutputs(
                 Materials.SulfuricHeavyFuel.getFluid(300),
@@ -542,8 +542,8 @@ public class DistilleryRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(9))
             .fluidInputs(Materials.OilHeavy.getFluid(1000))
             .fluidOutputs(
                 Materials.SulfuricHeavyFuel.getFluid(450),
@@ -556,7 +556,7 @@ public class DistilleryRecipes implements Runnable {
             .addTo(distillationTowerRecipes);
         // 9C5H12O = 4C6H14O + 5CH4O + 4C4H8
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.MTBEMixture.getGas(900L))
             .fluidOutputs(
                 Materials.AntiKnock.getFluid(400L),
@@ -566,7 +566,7 @@ public class DistilleryRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.MTBEMixtureAlt.getGas(900L))
             .fluidOutputs(
                 Materials.AntiKnock.getFluid(400L),
@@ -576,7 +576,7 @@ public class DistilleryRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemOutputs(ItemList.IC2_Fertilizer.get(1))
             .fluidInputs(Materials.FermentedBiomass.getFluid(1000))
             .fluidOutputs(
@@ -591,14 +591,14 @@ public class DistilleryRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(distillationTowerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemOutputs(ItemList.IC2_Fertilizer.get(1))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("ic2biomass"), 3000))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("ic2biogas"), 8000), Materials.Water.getFluid(125L))
             .duration(12 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(distillationTowerRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(new FluidStack(ItemList.sOilExtraHeavy, 1000))
             .fluidOutputs(Materials.OilHeavy.getFluid(1500))
             .duration(16 * TICKS)
@@ -609,17 +609,17 @@ public class DistilleryRecipes implements Runnable {
     public void universalDistillationTowerRecipes() {
         addUniversalDistillationRecipewithCircuit(
             Materials.WoodTar.getFluid(1000),
-            new ItemStack[] { GT_Utility.getIntegratedCircuit(3) },
+            new ItemStack[] { GTUtility.getIntegratedCircuit(3) },
             new FluidStack[] { Materials.Creosote.getFluid(250), Materials.Phenol.getFluid(100),
                 Materials.Benzene.getFluid(400), Materials.Toluene.getFluid(100),
                 MaterialsKevlar.IVDimethylbenzene.getFluid(150) },
-            GT_Values.NI,
+            GTValues.NI,
             40,
             256);
 
         addUniversalDistillationRecipewithCircuit(
             Materials.CharcoalByproducts.getGas(1000),
-            new ItemStack[] { GT_Utility.getIntegratedCircuit(1) },
+            new ItemStack[] { GTUtility.getIntegratedCircuit(1) },
             new FluidStack[] { Materials.WoodTar.getFluid(250), Materials.WoodVinegar.getFluid(400),
                 Materials.WoodGas.getGas(250), Materials.Dimethylbenzene.getFluid(100) },
             Materials.Charcoal.getDustSmall(1),
@@ -628,34 +628,34 @@ public class DistilleryRecipes implements Runnable {
 
         addUniversalDistillationRecipewithCircuit(
             Materials.WoodGas.getGas(1000),
-            new ItemStack[] { GT_Utility.getIntegratedCircuit(1) },
+            new ItemStack[] { GTUtility.getIntegratedCircuit(1) },
             new FluidStack[] { Materials.CarbonDioxide.getGas(390), Materials.Ethylene.getGas(120),
                 Materials.Methane.getGas(130), Materials.CarbonMonoxide.getGas(240), Materials.Hydrogen.getGas(120) },
-            GT_Values.NI,
+            GTValues.NI,
             40,
             256);
         addUniversalDistillationRecipewithCircuit(
             Materials.WoodVinegar.getFluid(1000),
-            new ItemStack[] { GT_Utility.getIntegratedCircuit(1) },
+            new ItemStack[] { GTUtility.getIntegratedCircuit(1) },
             new FluidStack[] { Materials.AceticAcid.getFluid(100), Materials.Water.getFluid(500),
                 Materials.Ethanol.getFluid(10), Materials.Methanol.getFluid(300), Materials.Acetone.getFluid(50),
                 Materials.MethylAcetate.getFluid(10) },
-            GT_Values.NI,
+            GTValues.NI,
             40,
             256);
         addUniversalDistillationRecipewithCircuit(
             Materials.WoodTar.getFluid(1000),
-            new ItemStack[] { GT_Utility.getIntegratedCircuit(1) },
+            new ItemStack[] { GTUtility.getIntegratedCircuit(1) },
             new FluidStack[] { Materials.Creosote.getFluid(250), Materials.Phenol.getFluid(100),
                 Materials.Benzene.getFluid(400), Materials.Toluene.getFluid(100),
                 Materials.Dimethylbenzene.getFluid(150) },
-            GT_Values.NI,
+            GTValues.NI,
             40,
             256);
 
         addUniversalDistillationRecipewithCircuit(
             Materials.OilLight.getFluid(100),
-            new ItemStack[] { GT_Utility.getIntegratedCircuit(1) },
+            new ItemStack[] { GTUtility.getIntegratedCircuit(1) },
             new FluidStack[] { Materials.SulfuricHeavyFuel.getFluid(7), Materials.SulfuricLightFuel.getFluid(13),
                 Materials.SulfuricNaphtha.getFluid(20), Materials.SulfuricGas.getGas(160) },
             null,
@@ -663,7 +663,7 @@ public class DistilleryRecipes implements Runnable {
             96);
         addUniversalDistillationRecipewithCircuit(
             Materials.OilMedium.getFluid(100),
-            new ItemStack[] { GT_Utility.getIntegratedCircuit(1) },
+            new ItemStack[] { GTUtility.getIntegratedCircuit(1) },
             new FluidStack[] { Materials.SulfuricHeavyFuel.getFluid(10), Materials.SulfuricLightFuel.getFluid(50),
                 Materials.SulfuricNaphtha.getFluid(150), Materials.SulfuricGas.getGas(60) },
             null,
@@ -671,7 +671,7 @@ public class DistilleryRecipes implements Runnable {
             96);
         addUniversalDistillationRecipewithCircuit(
             Materials.Oil.getFluid(100L),
-            new ItemStack[] { GT_Utility.getIntegratedCircuit(1) },
+            new ItemStack[] { GTUtility.getIntegratedCircuit(1) },
             new FluidStack[] { Materials.SulfuricHeavyFuel.getFluid(30), Materials.SulfuricLightFuel.getFluid(100),
                 Materials.SulfuricNaphtha.getFluid(40), Materials.SulfuricGas.getGas(120) },
             null,
@@ -679,7 +679,7 @@ public class DistilleryRecipes implements Runnable {
             96);
         addUniversalDistillationRecipewithCircuit(
             Materials.OilHeavy.getFluid(100),
-            new ItemStack[] { GT_Utility.getIntegratedCircuit(1) },
+            new ItemStack[] { GTUtility.getIntegratedCircuit(1) },
             new FluidStack[] { Materials.SulfuricHeavyFuel.getFluid(100), Materials.SulfuricLightFuel.getFluid(45),
                 Materials.SulfuricNaphtha.getFluid(15), Materials.SulfuricGas.getGas(60) },
             null,
@@ -690,14 +690,14 @@ public class DistilleryRecipes implements Runnable {
         addUniversalDistillationRecipe(
             Materials.DilutedHydrochloricAcid.getFluid(2000),
             new FluidStack[] { Materials.Water.getFluid(1000), Materials.HydrochloricAcid.getFluid(1000) },
-            GT_Values.NI,
+            GTValues.NI,
             600,
             64);
 
         addUniversalDistillationRecipe(
             getFluidStack("potion.vinegar", 40),
             new FluidStack[] { Materials.AceticAcid.getFluid(5), Materials.Water.getFluid(35) },
-            GT_Values.NI,
+            GTValues.NI,
             20,
             64);
 
@@ -711,7 +711,7 @@ public class DistilleryRecipes implements Runnable {
         addUniversalDistillationRecipe(
             Materials.DilutedSulfuricAcid.getFluid(3000),
             new FluidStack[] { Materials.SulfuricAcid.getFluid(2000), Materials.Water.getFluid(1000) },
-            GT_Values.NI,
+            GTValues.NI,
             600,
             120);
 
@@ -719,7 +719,7 @@ public class DistilleryRecipes implements Runnable {
         addUniversalDistillationRecipe(
             Materials.Acetone.getFluid(1000),
             new FluidStack[] { Materials.Ethenone.getGas(1000), Materials.Methane.getGas(1000) },
-            GT_Values.NI,
+            GTValues.NI,
             80,
             640);
 
@@ -727,14 +727,14 @@ public class DistilleryRecipes implements Runnable {
             Materials.Gas.getGas(1000),
             new FluidStack[] { Materials.Butane.getGas(60), Materials.Propane.getGas(70), Materials.Ethane.getGas(100),
                 Materials.Methane.getGas(750), Materials.Helium.getGas(20) },
-            GT_Values.NI,
+            GTValues.NI,
             240,
             120);
 
         addUniversalDistillationRecipe(
             Materials.Ethylene.getLightlyHydroCracked(1000),
             new FluidStack[] { Materials.Ethane.getGas(1000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -746,7 +746,7 @@ public class DistilleryRecipes implements Runnable {
         addUniversalDistillationRecipe(
             Materials.Ethylene.getSeverelyHydroCracked(1000),
             new FluidStack[] { Materials.Methane.getGas(2000), Materials.Hydrogen.getGas(2000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -771,19 +771,19 @@ public class DistilleryRecipes implements Runnable {
         addUniversalDistillationRecipe(
             Materials.Ethane.getLightlyHydroCracked(1000),
             new FluidStack[] { Materials.Methane.getGas(2000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Ethane.getModeratelyHydroCracked(1000),
             new FluidStack[] { Materials.Methane.getGas(2000), Materials.Hydrogen.getGas(2000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Ethane.getSeverelyHydroCracked(1000),
             new FluidStack[] { Materials.Methane.getGas(2000), Materials.Hydrogen.getGas(4000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -809,19 +809,19 @@ public class DistilleryRecipes implements Runnable {
             Materials.Propene.getLightlyHydroCracked(1000),
             new FluidStack[] { Materials.Propane.getGas(500), Materials.Ethylene.getGas(500),
                 Materials.Methane.getGas(500) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Propene.getModeratelyHydroCracked(1000),
             new FluidStack[] { Materials.Ethane.getGas(1000), Materials.Methane.getGas(1000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Propene.getSeverelyHydroCracked(1000),
             new FluidStack[] { Materials.Methane.getGas(3000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -846,19 +846,19 @@ public class DistilleryRecipes implements Runnable {
         addUniversalDistillationRecipe(
             Materials.Propane.getLightlyHydroCracked(1000),
             new FluidStack[] { Materials.Ethane.getGas(1000), Materials.Methane.getGas(1000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Propane.getModeratelyHydroCracked(1000),
             new FluidStack[] { Materials.Methane.getGas(3000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Propane.getSeverelyHydroCracked(1000),
             new FluidStack[] { Materials.Methane.getGas(3000), Materials.Hydrogen.getGas(2000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -883,21 +883,21 @@ public class DistilleryRecipes implements Runnable {
         addUniversalDistillationRecipe(
             Materials.Butadiene.getLightlyHydroCracked(1000),
             new FluidStack[] { Materials.Butene.getGas(667), Materials.Ethylene.getGas(667) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Butadiene.getModeratelyHydroCracked(1000),
             new FluidStack[] { Materials.Butane.getGas(223), Materials.Propene.getGas(223),
                 Materials.Ethane.getGas(400), Materials.Ethylene.getGas(445), Materials.Methane.getGas(223) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Butadiene.getSeverelyHydroCracked(1000),
             new FluidStack[] { Materials.Propane.getGas(260), Materials.Ethane.getGas(926),
                 Materials.Ethylene.getGas(389), Materials.Methane.getGas(2667) },
-            GT_Values.NI,
+            GTValues.NI,
             112,
             120);
         addUniversalDistillationRecipe(
@@ -926,20 +926,20 @@ public class DistilleryRecipes implements Runnable {
             Materials.Butene.getLightlyHydroCracked(1000),
             new FluidStack[] { Materials.Butane.getGas(334), Materials.Propene.getGas(334),
                 Materials.Ethane.getGas(334), Materials.Ethylene.getGas(334), Materials.Methane.getGas(334) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Butene.getModeratelyHydroCracked(1000),
             new FluidStack[] { Materials.Propane.getGas(389), Materials.Ethane.getGas(556),
                 Materials.Ethylene.getGas(334), Materials.Methane.getGas(1056) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Butene.getSeverelyHydroCracked(1000),
             new FluidStack[] { Materials.Ethane.getGas(1000), Materials.Methane.getGas(2000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -968,19 +968,19 @@ public class DistilleryRecipes implements Runnable {
             Materials.Butane.getLightlyHydroCracked(1000),
             new FluidStack[] { Materials.Propane.getGas(667), Materials.Ethane.getGas(667),
                 Materials.Methane.getGas(667) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Butane.getModeratelyHydroCracked(1000),
             new FluidStack[] { Materials.Ethane.getGas(1000), Materials.Methane.getGas(2000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Butane.getSeverelyHydroCracked(1000),
             new FluidStack[] { Materials.Methane.getGas(1000) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -1009,21 +1009,21 @@ public class DistilleryRecipes implements Runnable {
             Materials.Gas.getLightlyHydroCracked(1000),
             new FluidStack[] { Materials.Methane.getGas(1300), Materials.Hydrogen.getGas(1500),
                 Materials.Helium.getGas(100) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Gas.getModeratelyHydroCracked(1000),
             new FluidStack[] { Materials.Methane.getGas(1400), Materials.Hydrogen.getGas(3000),
                 Materials.Helium.getGas(150) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Gas.getSeverelyHydroCracked(1000),
             new FluidStack[] { Materials.Methane.getGas(1500), Materials.Hydrogen.getGas(4000),
                 Materials.Helium.getGas(200) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -1052,21 +1052,21 @@ public class DistilleryRecipes implements Runnable {
             Materials.Naphtha.getLightlyHydroCracked(1000),
             new FluidStack[] { Materials.Butane.getGas(800), Materials.Propane.getGas(300),
                 Materials.Ethane.getGas(250), Materials.Methane.getGas(250) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Naphtha.getModeratelyHydroCracked(1000),
             new FluidStack[] { Materials.Butane.getGas(200), Materials.Propane.getGas(1100),
                 Materials.Ethane.getGas(400), Materials.Methane.getGas(400) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
             Materials.Naphtha.getSeverelyHydroCracked(1000),
             new FluidStack[] { Materials.Butane.getGas(125), Materials.Propane.getGas(125),
                 Materials.Ethane.getGas(1500), Materials.Methane.getGas(1500) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -1102,7 +1102,7 @@ public class DistilleryRecipes implements Runnable {
             new FluidStack[] { Materials.Naphtha.getFluid(800), Materials.Octane.getFluid(100),
                 Materials.Butane.getGas(150), Materials.Propane.getGas(200), Materials.Ethane.getGas(125),
                 Materials.Methane.getGas(125) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -1110,7 +1110,7 @@ public class DistilleryRecipes implements Runnable {
             new FluidStack[] { Materials.Naphtha.getFluid(500), Materials.Octane.getFluid(50),
                 Materials.Butane.getGas(200), Materials.Propane.getGas(1100), Materials.Ethane.getGas(400),
                 Materials.Methane.getGas(400) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -1118,7 +1118,7 @@ public class DistilleryRecipes implements Runnable {
             new FluidStack[] { Materials.Naphtha.getFluid(200), Materials.Octane.getFluid(20),
                 Materials.Butane.getGas(125), Materials.Propane.getGas(125), Materials.Ethane.getGas(1500),
                 Materials.Methane.getGas(1500) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -1154,7 +1154,7 @@ public class DistilleryRecipes implements Runnable {
             new FluidStack[] { Materials.LightFuel.getFluid(600), Materials.Naphtha.getFluid(100),
                 Materials.Butane.getGas(100), Materials.Propane.getGas(100), Materials.Ethane.getGas(75),
                 Materials.Methane.getGas(75) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -1162,7 +1162,7 @@ public class DistilleryRecipes implements Runnable {
             new FluidStack[] { Materials.LightFuel.getFluid(400), Materials.Naphtha.getFluid(400),
                 Materials.Butane.getGas(150), Materials.Propane.getGas(150), Materials.Ethane.getGas(100),
                 Materials.Methane.getGas(100) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -1170,7 +1170,7 @@ public class DistilleryRecipes implements Runnable {
             new FluidStack[] { Materials.LightFuel.getFluid(200), Materials.Naphtha.getFluid(250),
                 Materials.Butane.getGas(300), Materials.Propane.getGas(300), Materials.Ethane.getGas(175),
                 Materials.Methane.getGas(175) },
-            GT_Values.NI,
+            GTValues.NI,
             120,
             120);
         addUniversalDistillationRecipe(
@@ -1205,9 +1205,9 @@ public class DistilleryRecipes implements Runnable {
     public void addUniversalDistillationRecipewithCircuit(FluidStack aInput, ItemStack[] aCircuit,
         FluidStack[] aOutputs, ItemStack aOutput2, int aDuration, int aEUt) {
         for (int i = 0; i < Math.min(aOutputs.length, 11); i++) {
-            GT_RecipeBuilder buildDistillation = GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.getIntegratedCircuit(i + 1));
-            if (aOutput2 != GT_Values.NI) {
+            GTRecipeBuilder buildDistillation = GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.getIntegratedCircuit(i + 1));
+            if (aOutput2 != GTValues.NI) {
                 buildDistillation.itemOutputs(aOutput2);
             }
             buildDistillation.fluidInputs(aInput)
@@ -1216,9 +1216,9 @@ public class DistilleryRecipes implements Runnable {
                 .eut(aEUt / 4)
                 .addTo(distilleryRecipes);
         }
-        GT_RecipeBuilder buildDT = GT_Values.RA.stdBuilder()
+        GTRecipeBuilder buildDT = GTValues.RA.stdBuilder()
             .itemInputs(aCircuit);
-        if (aOutput2 != GT_Values.NI) {
+        if (aOutput2 != GTValues.NI) {
             buildDT.itemOutputs(aOutput2);
         }
         buildDT.fluidInputs(aInput)
@@ -1231,9 +1231,9 @@ public class DistilleryRecipes implements Runnable {
     public void addUniversalDistillationRecipe(FluidStack aInput, FluidStack[] aOutputs, ItemStack aOutput2,
         int aDuration, int aEUt) {
         for (int i = 0; i < Math.min(aOutputs.length, 11); i++) {
-            GT_RecipeBuilder buildDistillation = GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.getIntegratedCircuit(i + 1));
-            if (aOutput2 != GT_Values.NI) {
+            GTRecipeBuilder buildDistillation = GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.getIntegratedCircuit(i + 1));
+            if (aOutput2 != GTValues.NI) {
                 buildDistillation.itemOutputs(aOutput2);
             }
             buildDistillation.fluidInputs(aInput)
@@ -1242,8 +1242,8 @@ public class DistilleryRecipes implements Runnable {
                 .eut(aEUt / 4)
                 .addTo(distilleryRecipes);
         }
-        GT_RecipeBuilder buildDT = GT_Values.RA.stdBuilder();
-        if (aOutput2 != GT_Values.NI) {
+        GTRecipeBuilder buildDT = GTValues.RA.stdBuilder();
+        if (aOutput2 != GTValues.NI) {
             buildDT.itemOutputs(aOutput2);
         }
         buildDT.fluidInputs(aInput)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/ElectrolyzerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ElectrolyzerRecipes.java
index 363f279de5..6ac7f2051c 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/ElectrolyzerRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/ElectrolyzerRecipes.java
@@ -1,22 +1,22 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.item.ItemStack;
 import net.minecraftforge.fluids.FluidStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class ElectrolyzerRecipes implements Runnable {
 
@@ -24,119 +24,119 @@ public class ElectrolyzerRecipes implements Runnable {
     public void run() {
         // H2O = 2H + O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1), ItemList.Cell_Empty.get(1L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1), ItemList.Cell_Empty.get(1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L))
             .fluidInputs(Materials.Water.getFluid(1000L))
             .fluidOutputs(Materials.Hydrogen.getGas(2000L))
             .duration(1 * MINUTES + 40 * SECONDS)
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2), ItemList.Cell_Empty.get(1L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L))
-            .fluidInputs(GT_ModHandler.getDistilledWater(1000L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2), ItemList.Cell_Empty.get(1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L))
+            .fluidInputs(GTModHandler.getDistilledWater(1000L))
             .fluidOutputs(Materials.Hydrogen.getGas(2000L))
             .duration(1 * MINUTES + 40 * SECONDS)
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(3), ItemList.Cell_Empty.get(2L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(3), ItemList.Cell_Empty.get(2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2L))
             .fluidInputs(Materials.Water.getFluid(1000L))
             .fluidOutputs(Materials.Oxygen.getGas(1000L))
             .duration(1 * MINUTES + 40 * SECONDS)
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(4), ItemList.Cell_Empty.get(2L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2L))
-            .fluidInputs(GT_ModHandler.getDistilledWater(1000L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(4), ItemList.Cell_Empty.get(2L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2L))
+            .fluidInputs(GTModHandler.getDistilledWater(1000L))
             .fluidOutputs(Materials.Oxygen.getGas(1000L))
             .duration(1 * MINUTES + 40 * SECONDS)
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("electrolyzedWaterCell", 1L), ItemList.Cell_Empty.get(2L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("electrolyzedWaterCell", 1L), ItemList.Cell_Empty.get(2L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2L),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 2L),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L))
             .duration(1 * SECONDS + 10 * TICKS)
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("electrolyzedWaterCell", 1L), GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("electrolyzedWaterCell", 1L), GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L))
             .fluidOutputs(Materials.Hydrogen.getGas(2000L))
             .duration(1 * SECONDS + 10 * TICKS)
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L))
-            .itemOutputs(GT_ModHandler.getIC2Item("electrolyzedWaterCell", 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L))
+            .itemOutputs(GTModHandler.getIC2Item("electrolyzedWaterCell", 1L))
             .duration(1 * MINUTES + 13 * SECONDS + 10 * TICKS)
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Dye_Bonemeal.get(3L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcium, 1L))
             .duration(4 * SECONDS + 18 * TICKS)
             .eut(26)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.sand, 8, 0))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3L))
             .duration(25 * SECONDS)
             .eut(25)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.sand, 8, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 3L))
             .duration(25 * SECONDS)
             .eut(25)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 4))
             .duration(5 * SECONDS)
             .eut(64)
             .addTo(electrolyzerRecipes);
         // ZnS = Zn + S + 1 Ga(9.17%)
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sphalerite, 2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sphalerite, 2))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gallium, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gallium, 1))
             .outputChances(10000, 10000, 917)
             .duration(10 * SECONDS)
             .eut(30)
             .addTo(electrolyzerRecipes);
         // IC2 Fertilizer = H2O + CaCO3 + C
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.IC2_Fertilizer.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1L))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1L))
             .fluidOutputs(Materials.Water.getFluid(1000L))
             .duration(5 * SECONDS)
             .eut(30)
             .addTo(electrolyzerRecipes);
         // NaOH = Na + O + H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumHydroxide.getDust(3), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Sodium.getDust(1), Materials.Hydrogen.getCells(1))
             .outputChances(10000, 10000)
@@ -146,8 +146,8 @@ public class ElectrolyzerRecipes implements Runnable {
             .addTo(electrolyzerRecipes);
         // CO2 = C + 2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Carbon.getDust(1))
             .fluidInputs(Materials.CarbonDioxide.getGas(1000))
             .fluidOutputs(Materials.Oxygen.getGas(2000))
@@ -155,8 +155,8 @@ public class ElectrolyzerRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(11), Materials.Empty.getCells(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(11), Materials.Empty.getCells(2))
             .itemOutputs(Materials.Carbon.getDust(1), Materials.Oxygen.getCells(2))
             .fluidInputs(Materials.CarbonDioxide.getGas(1000))
             .duration(45 * SECONDS)
@@ -164,8 +164,8 @@ public class ElectrolyzerRecipes implements Runnable {
             .addTo(electrolyzerRecipes);
         // CO = C + O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Carbon.getDust(1))
             .fluidInputs(Materials.CarbonMonoxide.getGas(1000))
             .fluidOutputs(Materials.Oxygen.getGas(1000))
@@ -173,15 +173,15 @@ public class ElectrolyzerRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(11), Materials.Empty.getCells(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(11), Materials.Empty.getCells(1))
             .itemOutputs(Materials.Carbon.getDust(1), Materials.Oxygen.getCells(1))
             .fluidInputs(Materials.CarbonMonoxide.getGas(1000))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.CarbonMonoxide.getCells(1))
             .itemOutputs(Materials.Carbon.getDust(1), Materials.Oxygen.getCells(1))
             .duration(15 * SECONDS)
@@ -190,7 +190,7 @@ public class ElectrolyzerRecipes implements Runnable {
 
         // H2S = S + 2H
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemOutputs(Materials.Sulfur.getDust(1))
             .fluidInputs(Materials.HydricSulfide.getGas(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(2000))
@@ -198,7 +198,7 @@ public class ElectrolyzerRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemOutputs(Materials.Sulfur.getDust(1), Materials.Hydrogen.getCells(2))
             .itemInputs(Materials.HydricSulfide.getCells(1), Materials.Empty.getCells(1))
             .duration(3 * SECONDS + 12 * TICKS)
@@ -207,8 +207,8 @@ public class ElectrolyzerRecipes implements Runnable {
 
         // SO2 = S + 2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Sulfur.getDust(1))
             .fluidInputs(Materials.SulfurDioxide.getGas(1000))
             .fluidOutputs(Materials.Oxygen.getGas(2000))
@@ -216,8 +216,8 @@ public class ElectrolyzerRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(11), Materials.Empty.getCells(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(11), Materials.Empty.getCells(2))
             .itemOutputs(Materials.Sulfur.getDust(1), Materials.Oxygen.getCells(2))
             .fluidInputs(Materials.SulfurDioxide.getGas(1000))
             .duration(15 * SECONDS)
@@ -225,7 +225,7 @@ public class ElectrolyzerRecipes implements Runnable {
             .addTo(electrolyzerRecipes);
         // NaCl = Na +Cl
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Salt.getDust(2))
             .itemOutputs(Materials.Sodium.getDust(1))
             .fluidOutputs(Materials.Chlorine.getGas(1000))
@@ -234,8 +234,8 @@ public class ElectrolyzerRecipes implements Runnable {
             .addTo(electrolyzerRecipes);
         // (NaCl·H2O)= NaOH + H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Empty.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Empty.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.SodiumHydroxide.getDust(3), Materials.Hydrogen.getCells(1))
             .fluidInputs(Materials.SaltWater.getFluid(1000))
             .fluidOutputs(Materials.Chlorine.getGas(1000))
@@ -243,8 +243,8 @@ public class ElectrolyzerRecipes implements Runnable {
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Empty.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Empty.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.SodiumHydroxide.getDust(3), Materials.Chlorine.getCells(1))
             .fluidInputs(Materials.SaltWater.getFluid(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(1000))
@@ -253,8 +253,8 @@ public class ElectrolyzerRecipes implements Runnable {
             .addTo(electrolyzerRecipes);
         // HCl = H + Cl
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Empty.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Empty.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Hydrogen.getCells(1))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
             .fluidOutputs(Materials.Chlorine.getGas(1000))
@@ -262,8 +262,8 @@ public class ElectrolyzerRecipes implements Runnable {
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Empty.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Empty.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Chlorine.getCells(1))
             .fluidInputs(Materials.HydrochloricAcid.getFluid(1000))
             .fluidOutputs(Materials.Hydrogen.getGas(1000))
@@ -271,16 +271,16 @@ public class ElectrolyzerRecipes implements Runnable {
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydrochloricAcid.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydrochloricAcid.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Hydrogen.getCells(1))
             .fluidOutputs(Materials.Chlorine.getGas(1000))
             .duration(36 * SECONDS)
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.HydrochloricAcid.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.HydrochloricAcid.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.Chlorine.getCells(1))
             .fluidOutputs(Materials.Hydrogen.getGas(1000))
             .duration(36 * SECONDS)
@@ -288,7 +288,7 @@ public class ElectrolyzerRecipes implements Runnable {
             .addTo(electrolyzerRecipes);
         // 2NaHSO4 = 2H + Na2S2O8
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.SodiumBisulfate.getDust(14), Materials.Empty.getCells(2))
             .itemOutputs(Materials.Hydrogen.getCells(2))
             .fluidOutputs(Materials.SodiumPersulfate.getFluid(1000))
@@ -296,59 +296,59 @@ public class ElectrolyzerRecipes implements Runnable {
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lead, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lead, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 4))
             .fluidInputs(new FluidStack(ItemList.sLeadZincSolution, 8000))
             .fluidOutputs(Materials.Water.getFluid(2000))
             .duration(15 * SECONDS)
             .eut(192)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Cell_Empty.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1))
             .fluidInputs(new FluidStack(ItemList.sBlueVitriol, 2000))
             .fluidOutputs(Materials.SulfuricAcid.getFluid(1000))
             .duration(45 * SECONDS)
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Cell_Empty.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1))
             .fluidInputs(new FluidStack(ItemList.sNickelSulfate, 2000))
             .fluidOutputs(Materials.SulfuricAcid.getFluid(1000))
             .duration(45 * SECONDS)
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Cell_Empty.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1))
             .fluidInputs(new FluidStack(ItemList.sGreenVitriol, 2000))
             .fluidOutputs(Materials.SulfuricAcid.getFluid(1000))
             .duration(45 * SECONDS)
             .eut(30)
             .addTo(electrolyzerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.PhosphoricAcid, 1L),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.PhosphoricAcid, 1L),
                 ItemList.Cell_Empty.get(6L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 3L),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 4L))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 3L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 4L))
             .duration(27 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(electrolyzerRecipes);
diff --git a/src/main/java/gregtech/loaders/postload/recipes/ElectromagneticSeparatorRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ElectromagneticSeparatorRecipes.java
index d9031ac64f..fa8097c6fd 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/ElectromagneticSeparatorRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/ElectromagneticSeparatorRecipes.java
@@ -1,9 +1,9 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.electroMagneticSeparatorRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsOreAlum;
 import gregtech.api.enums.TierEU;
@@ -12,7 +12,7 @@ public class ElectromagneticSeparatorRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(MaterialsOreAlum.SluiceSand.getDust(1))
             .itemOutputs(Materials.Iron.getDust(1), Materials.Neodymium.getDust(1), Materials.Chrome.getDust(1))
             .outputChances(4000, 2000, 2000)
@@ -20,7 +20,7 @@ public class ElectromagneticSeparatorRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV / 2)
             .addTo(electroMagneticSeparatorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.TengamRaw.getDust(1))
             .itemOutputs(
                 Materials.TengamPurified.getDust(1),
diff --git a/src/main/java/gregtech/loaders/postload/recipes/ExtractorRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ExtractorRecipes.java
index 06ad1fa994..d51e6761fb 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/ExtractorRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/ExtractorRecipes.java
@@ -1,19 +1,19 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.extractorRecipes;
-import static gregtech.api.util.GT_ModHandler.getIC2Item;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.WILDCARD;
+import static gregtech.api.util.GTModHandler.getIC2Item;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.WILDCARD;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class ExtractorRecipes implements Runnable {
 
@@ -22,16 +22,16 @@ public class ExtractorRecipes implements Runnable {
         addExtractionRecipe(new ItemStack(Blocks.bookshelf, 1, WILDCARD), new ItemStack(Items.book, 3, 0));
         addExtractionRecipe(
             new ItemStack(Items.slime_ball, 1),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 2L));
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 2L));
         addExtractionRecipe(
             ItemList.IC2_Resin.get(1L),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 3L));
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 3L));
         addExtractionRecipe(
             getIC2Item("rubberSapling", 1L),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 1L));
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 1L));
         addExtractionRecipe(
             getIC2Item("rubberLeaves", 16L),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 1L));
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.RawRubber, 1L));
 
         addExtractionRecipe(ItemList.Cell_Air.get(1L), ItemList.Cell_Empty.get(1L));
         addExtractionRecipe(getIC2Item("filledTinCan", 1), getIC2Item("tinCan", 1));
@@ -40,152 +40,152 @@ public class ExtractorRecipes implements Runnable {
         addExtractionRecipe(new ItemStack(Blocks.nether_brick, 1), new ItemStack(Items.netherbrick, 4));
         addExtractionRecipe(new ItemStack(Blocks.snow, 1), new ItemStack(Items.snowball, 4));
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_SU_LV_SulfuricAcid.get(1L))
             .itemOutputs(ItemList.Battery_Hull_LV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_SU_LV_Mercury.get(1L))
             .itemOutputs(ItemList.Battery_Hull_LV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_SU_MV_SulfuricAcid.get(1L))
             .itemOutputs(ItemList.Battery_Hull_MV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_SU_MV_Mercury.get(1L))
             .itemOutputs(ItemList.Battery_Hull_MV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_SU_HV_SulfuricAcid.get(1L))
             .itemOutputs(ItemList.Battery_Hull_HV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_SU_HV_Mercury.get(1L))
             .itemOutputs(ItemList.Battery_Hull_HV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_RE_LV_Cadmium.get(1L))
             .itemOutputs(ItemList.Battery_Hull_LV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_RE_LV_Lithium.get(1L))
             .itemOutputs(ItemList.Battery_Hull_LV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_RE_LV_Sodium.get(1L))
             .itemOutputs(ItemList.Battery_Hull_LV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_RE_MV_Cadmium.get(1L))
             .itemOutputs(ItemList.Battery_Hull_MV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_RE_MV_Lithium.get(1L))
             .itemOutputs(ItemList.Battery_Hull_MV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_RE_MV_Sodium.get(1L))
             .itemOutputs(ItemList.Battery_Hull_MV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_RE_HV_Cadmium.get(1L))
             .itemOutputs(ItemList.Battery_Hull_HV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_RE_HV_Lithium.get(1L))
             .itemOutputs(ItemList.Battery_Hull_HV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_RE_HV_Sodium.get(1L))
             .itemOutputs(ItemList.Battery_Hull_HV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.BatteryHull_EV_Full.get(1L))
             .itemOutputs(ItemList.BatteryHull_EV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.BatteryHull_IV_Full.get(1L))
             .itemOutputs(ItemList.BatteryHull_IV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.BatteryHull_LuV_Full.get(1L))
             .itemOutputs(ItemList.BatteryHull_LuV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.BatteryHull_ZPM_Full.get(1L))
             .itemOutputs(ItemList.BatteryHull_ZPM.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.BatteryHull_UV_Full.get(1L))
             .itemOutputs(ItemList.BatteryHull_UV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.BatteryHull_UHV_Full.get(1L))
             .itemOutputs(ItemList.BatteryHull_UHV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.BatteryHull_UEV_Full.get(1L))
             .itemOutputs(ItemList.BatteryHull_UEV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.BatteryHull_UIV_Full.get(1L))
             .itemOutputs(ItemList.BatteryHull_UIV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.BatteryHull_UMV_Full.get(1L))
             .itemOutputs(ItemList.BatteryHull_UMV.get(1L))
             .duration(15 * SECONDS)
             .eut(2)
             .addTo(extractorRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.BatteryHull_UxV_Full.get(1L))
             .itemOutputs(ItemList.BatteryHull_UxV.get(1L))
             .duration(15 * SECONDS)
@@ -194,8 +194,8 @@ public class ExtractorRecipes implements Runnable {
     }
 
     public void addExtractionRecipe(ItemStack input, ItemStack output) {
-        output = GT_OreDictUnificator.get(true, output);
-        GT_Values.RA.stdBuilder()
+        output = GTOreDictUnificator.get(true, output);
+        GTValues.RA.stdBuilder()
             .itemInputs(input)
             .itemOutputs(output)
             .duration(15 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/ExtruderRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ExtruderRecipes.java
index e52ad3d4fb..59cbefc3c8 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/ExtruderRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/ExtruderRecipes.java
@@ -1,10 +1,10 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.extruderRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 
 public class ExtruderRecipes implements Runnable {
@@ -12,14 +12,14 @@ public class ExtruderRecipes implements Runnable {
     @Override
     public void run() {
         // wax capsule
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.FR_Wax.get(1L), ItemList.Shape_Extruder_Cell.get(0L))
             .itemOutputs(ItemList.FR_WaxCapsule.get(1L))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(16)
             .addTo(extruderRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.FR_RefractoryWax.get(1L), ItemList.Shape_Extruder_Cell.get(0L))
             .itemOutputs(ItemList.FR_RefractoryCapsule.get(1L))
             .duration(6 * SECONDS + 8 * TICKS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/FermenterRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/FermenterRecipes.java
index c0954fda18..74b1e0e78e 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/FermenterRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/FermenterRecipes.java
@@ -1,15 +1,15 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.fermentingRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 import static net.minecraftforge.fluids.FluidRegistry.getFluidStack;
 
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 
 public class FermenterRecipes implements Runnable {
@@ -17,273 +17,273 @@ public class FermenterRecipes implements Runnable {
     @Override
     public void run() {
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Biomass.getFluid(100))
             .fluidOutputs(Materials.FermentedBiomass.getFluid(100))
             .duration(7 * SECONDS + 10 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("ic2biomass"), 100))
             .fluidOutputs(Materials.FermentedBiomass.getFluid(100))
             .duration(7 * SECONDS + 10 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("milk", 50))
             .fluidOutputs(getFluidStack("potion.mundane", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.lemonjuice", 50))
             .fluidOutputs(getFluidStack("potion.limoncello", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.applejuice", 50))
             .fluidOutputs(getFluidStack("potion.cider", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.goldenapplejuice", 50))
             .fluidOutputs(getFluidStack("potion.goldencider", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.idunsapplejuice", 50))
             .fluidOutputs(getFluidStack("potion.notchesbrew", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.reedwater", 50))
             .fluidOutputs(getFluidStack("potion.rum", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.rum", 50))
             .fluidOutputs(getFluidStack("potion.piratebrew", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.grapejuice", 50))
             .fluidOutputs(getFluidStack("potion.wine", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.wine", 50))
             .fluidOutputs(getFluidStack("potion.vinegar", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.scotch", 50))
             .fluidOutputs(getFluidStack("potion.glenmckenner", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.wheatyhopsjuice", 50))
             .fluidOutputs(getFluidStack("potion.beer", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.hopsjuice", 50))
             .fluidOutputs(getFluidStack("potion.darkbeer", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.darkbeer", 50))
             .fluidOutputs(getFluidStack("potion.dragonblood", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.beer", 75))
             .fluidOutputs(getFluidStack("potion.vinegar", 50))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.cider", 75))
             .fluidOutputs(getFluidStack("potion.vinegar", 50))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.goldencider", 75))
             .fluidOutputs(getFluidStack("potion.vinegar", 50))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.rum", 75))
             .fluidOutputs(getFluidStack("potion.vinegar", 50))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.wine", 75))
             .fluidOutputs(getFluidStack("potion.vinegar", 50))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.awkward", 50))
             .fluidOutputs(getFluidStack("potion.weakness", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.mundane", 50))
             .fluidOutputs(getFluidStack("potion.weakness", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.thick", 50))
             .fluidOutputs(getFluidStack("potion.weakness", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.poison", 50))
             .fluidOutputs(getFluidStack("potion.damage", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.health", 50))
             .fluidOutputs(getFluidStack("potion.damage", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.waterbreathing", 50))
             .fluidOutputs(getFluidStack("potion.damage", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.nightvision", 50))
             .fluidOutputs(getFluidStack("potion.invisibility", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.fireresistance", 50))
             .fluidOutputs(getFluidStack("potion.slowness", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.speed", 50))
             .fluidOutputs(getFluidStack("potion.slowness", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.strength", 50))
             .fluidOutputs(getFluidStack("potion.weakness", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.regen", 50))
             .fluidOutputs(getFluidStack("potion.poison", 25))
             .duration(51 * SECONDS + 4 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.poison.strong", 50))
             .fluidOutputs(getFluidStack("potion.damage.strong", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.health.strong", 50))
             .fluidOutputs(getFluidStack("potion.damage.strong", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.nightvision.long", 50))
             .fluidOutputs(getFluidStack("potion.invisibility.long", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.regen.strong", 50))
             .fluidOutputs(getFluidStack("potion.poison.strong", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.fireresistance.long", 50))
             .fluidOutputs(getFluidStack("potion.slowness.long", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.speed.long", 50))
             .fluidOutputs(getFluidStack("potion.slowness.long", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.strength.long", 50))
             .fluidOutputs(getFluidStack("potion.weakness.long", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
             .eut(2)
             .addTo(fermentingRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(getFluidStack("potion.regen.long", 50))
             .fluidOutputs(getFluidStack("potion.poison.long", 10))
             .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/FluidCannerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/FluidCannerRecipes.java
index ea2b87996f..89bda51506 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/FluidCannerRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/FluidCannerRecipes.java
@@ -2,7 +2,7 @@ package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 
@@ -10,7 +10,7 @@ public class FluidCannerRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_Hull_LV.get(1))
             .itemOutputs(ItemList.IC2_ReBattery.get(1))
             .fluidInputs(Materials.Redstone.getMolten(288))
@@ -18,7 +18,7 @@ public class FluidCannerRecipes implements Runnable {
             .eut(1)
             .addTo(fluidCannerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_Hull_LV.get(1))
             .itemOutputs(ItemList.Battery_SU_LV_Mercury.getWithCharge(1, Integer.MAX_VALUE))
             .fluidInputs(Materials.Mercury.getFluid(1000))
@@ -26,7 +26,7 @@ public class FluidCannerRecipes implements Runnable {
             .eut(1)
             .addTo(fluidCannerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_Hull_MV.get(1))
             .itemOutputs(ItemList.Battery_SU_MV_Mercury.getWithCharge(1, Integer.MAX_VALUE))
             .fluidInputs(Materials.Mercury.getFluid(4000))
@@ -34,7 +34,7 @@ public class FluidCannerRecipes implements Runnable {
             .eut(1)
             .addTo(fluidCannerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_Hull_HV.get(1))
             .itemOutputs(ItemList.Battery_SU_HV_Mercury.getWithCharge(1, Integer.MAX_VALUE))
             .fluidInputs(Materials.Mercury.getFluid(16000))
@@ -42,7 +42,7 @@ public class FluidCannerRecipes implements Runnable {
             .eut(1)
             .addTo(fluidCannerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_Hull_LV.get(1))
             .itemOutputs(ItemList.Battery_SU_LV_SulfuricAcid.getWithCharge(1, Integer.MAX_VALUE))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
@@ -50,7 +50,7 @@ public class FluidCannerRecipes implements Runnable {
             .eut(1)
             .addTo(fluidCannerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_Hull_MV.get(1))
             .itemOutputs(ItemList.Battery_SU_MV_SulfuricAcid.getWithCharge(1, Integer.MAX_VALUE))
             .fluidInputs(Materials.SulfuricAcid.getFluid(4000))
@@ -58,7 +58,7 @@ public class FluidCannerRecipes implements Runnable {
             .eut(1)
             .addTo(fluidCannerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Battery_Hull_HV.get(1))
             .itemOutputs(ItemList.Battery_SU_HV_SulfuricAcid.getWithCharge(1, Integer.MAX_VALUE))
             .fluidInputs(Materials.SulfuricAcid.getFluid(16000))
@@ -66,7 +66,7 @@ public class FluidCannerRecipes implements Runnable {
             .eut(1)
             .addTo(fluidCannerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.TF_Vial_FieryTears.get(1))
             .itemOutputs(ItemList.Bottle_Empty.get(1))
             .fluidOutputs(Materials.FierySteel.getFluid(250))
@@ -74,7 +74,7 @@ public class FluidCannerRecipes implements Runnable {
             .eut(1)
             .addTo(fluidCannerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Spray_Color_Remover_Empty.get(1))
             .fluidInputs(Materials.Acetone.getFluid(4000))
             .itemOutputs(ItemList.Spray_Color_Remover.get(1))
@@ -82,7 +82,7 @@ public class FluidCannerRecipes implements Runnable {
             .eut(1)
             .addTo(fluidCannerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Spray_Color_Remover.get(1))
             .itemOutputs(ItemList.Spray_Color_Remover_Empty.get(1))
             .fluidOutputs(Materials.Acetone.getFluid(4000))
diff --git a/src/main/java/gregtech/loaders/postload/recipes/FluidExtractorRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/FluidExtractorRecipes.java
index d27e85ab2d..d4b3d3b668 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/FluidExtractorRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/FluidExtractorRecipes.java
@@ -6,120 +6,120 @@ import static gregtech.api.enums.Mods.NewHorizonsCoreMod;
 import static gregtech.api.enums.Mods.Railcraft;
 import static gregtech.api.enums.Mods.Thaumcraft;
 import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.loaders.misc.GT_Bees.combs;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.loaders.misc.GTBees.combs;
 import static net.minecraftforge.fluids.FluidRegistry.getFluidStack;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
 import gregtech.api.recipe.RecipeCategories;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class FluidExtractorRecipes implements Runnable {
 
     @Override
     public void run() {
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Dye_SquidInk.get(1L))
             .fluidOutputs(getFluidStack("squidink", 144))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Dye_Indigo.get(1L))
             .fluidOutputs(getFluidStack("indigo", 144))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Crop_Drop_Indigo.get(1L))
             .fluidOutputs(getFluidStack("indigo", 144))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Crop_Drop_MilkWart.get(1L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Milk, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Milk, 1L))
             .outputChances(1000)
-            .fluidOutputs(GT_ModHandler.getMilk(150L))
+            .fluidOutputs(GTModHandler.getMilk(150L))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Crop_Drop_OilBerry.get(1L))
             .fluidOutputs(Materials.Oil.getFluid(100L))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Crop_Drop_UUMBerry.get(1L))
             .fluidOutputs(Materials.UUMatter.getFluid(4L))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Crop_Drop_UUABerry.get(1L))
             .fluidOutputs(Materials.UUAmplifier.getFluid(4L))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.fish, 1, 0))
             .fluidOutputs(Materials.FishOil.getFluid(40L))
             .duration(16 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.fish, 1, 1))
             .fluidOutputs(Materials.FishOil.getFluid(60L))
             .duration(16 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.fish, 1, 2))
             .fluidOutputs(Materials.FishOil.getFluid(70L))
             .duration(16 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.fish, 1, 3))
             .fluidOutputs(Materials.FishOil.getFluid(30L))
             .duration(16 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.coal, 1, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1L))
             .outputChances(1000)
             .fluidOutputs(Materials.WoodTar.getFluid(100L))
             .duration(1 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 1L))
             .itemOutputs(ItemList.IC2_Plantball.get(1L))
             .outputChances(100)
             .fluidOutputs(Materials.Creosote.getFluid(5L))
@@ -127,58 +127,58 @@ public class FluidExtractorRecipes implements Runnable {
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HydratedCoal, 1L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.HydratedCoal, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L))
             .outputChances(10000)
             .fluidOutputs(Materials.Water.getFluid(100L))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Thaumcraft.ID, "ItemResource", 1, 3))
             .fluidOutputs(Materials.Mercury.getFluid(1000L))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Mercury, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Mercury, 1L))
             .fluidOutputs(Materials.Mercury.getFluid(1000L))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Monazite, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Monazite, 1L))
             .fluidOutputs(Materials.Helium.getGas(200L))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(64)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(IndustrialCraft2.ID, "blockAlloyGlass", 1L, 0))
             .fluidOutputs(Materials.ReinforceGlass.getMolten(144))
             .duration(5 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(NewHorizonsCoreMod.ID, "item.ReinforcedGlassPlate", 1L, 0))
             .fluidOutputs(Materials.ReinforceGlass.getMolten(72))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_EV)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(NewHorizonsCoreMod.ID, "item.ReinforcedGlassLense", 1L, 0))
             .fluidOutputs(Materials.ReinforceGlass.getMolten(54))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_EV)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Long_Distance_Pipeline_Fluid.get(1L))
             .fluidOutputs(Materials.Steel.getMolten(19 * 144))
             .duration(20 * SECONDS)
@@ -186,9 +186,9 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Long_Distance_Pipeline_Item.get(1L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 7L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Steel, 7L))
             .outputChances(10000)
             .fluidOutputs(Materials.Tin.getMolten(12 * 144))
             .duration(20 * SECONDS)
@@ -196,7 +196,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Long_Distance_Pipeline_Fluid_Pipe.get(4L))
             .fluidOutputs(Materials.Steel.getMolten(189))
             .duration(2 * SECONDS)
@@ -204,9 +204,9 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Long_Distance_Pipeline_Item_Pipe.get(16L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 3L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 3L))
             .outputChances(10000)
             .fluidOutputs(Materials.Steel.getMolten(324))
             .duration(20 * SECONDS)
@@ -214,23 +214,23 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("TritiumCell", 1))
-            .itemOutputs(GT_ModHandler.getIC2Item("fuelRod", 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("TritiumCell", 1))
+            .itemOutputs(GTModHandler.getIC2Item("fuelRod", 1))
             .outputChances(10000)
             .fluidOutputs(Materials.Tritium.getGas(32))
             .duration(16 * TICKS)
             .eut(64)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Quartzite, 1L))
             .fluidOutputs(Materials.Glass.getMolten(72))
             .duration(30 * SECONDS)
             .eut(28)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 0))
             .fluidOutputs(Materials.Iron.getMolten(288))
             .duration(15 * SECONDS)
@@ -238,7 +238,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 1))
             .fluidOutputs(Materials.Iron.getMolten(144))
             .duration(15 * SECONDS)
@@ -246,9 +246,9 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 2))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 6))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 6))
             .outputChances(10000)
             .fluidOutputs(Materials.Bronze.getMolten(1728))
             .duration(15 * SECONDS)
@@ -256,7 +256,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 13))
             .fluidOutputs(Materials.Steel.getMolten(288))
             .duration(20 * SECONDS)
@@ -264,7 +264,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 14))
             .fluidOutputs(Materials.Steel.getMolten(144))
             .duration(20 * SECONDS)
@@ -272,7 +272,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 15))
             .fluidOutputs(Materials.Steel.getMolten(1836))
             .duration(20 * SECONDS)
@@ -280,7 +280,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 0))
             .fluidOutputs(Materials.Aluminium.getMolten(288))
             .duration(25 * SECONDS)
@@ -288,7 +288,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 1))
             .fluidOutputs(Materials.Aluminium.getMolten(144))
             .duration(25 * SECONDS)
@@ -296,9 +296,9 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 2))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 12L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 12L))
             .outputChances(10000)
             .fluidOutputs(Materials.Aluminium.getMolten(108L))
             .duration(25 * SECONDS)
@@ -306,7 +306,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 3))
             .fluidOutputs(Materials.StainlessSteel.getMolten(288))
             .duration(30 * SECONDS)
@@ -314,7 +314,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 4))
             .fluidOutputs(Materials.StainlessSteel.getMolten(144))
             .duration(30 * SECONDS)
@@ -322,7 +322,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 5))
             .fluidOutputs(Materials.StainlessSteel.getMolten(1836))
             .duration(30 * SECONDS)
@@ -330,7 +330,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 6))
             .fluidOutputs(Materials.Titanium.getMolten(288))
             .duration(35 * SECONDS)
@@ -338,7 +338,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 7))
             .fluidOutputs(Materials.Titanium.getMolten(144))
             .duration(35 * SECONDS)
@@ -346,7 +346,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 8))
             .fluidOutputs(Materials.Titanium.getMolten(1836))
             .duration(35 * SECONDS)
@@ -354,7 +354,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 9))
             .fluidOutputs(Materials.TungstenSteel.getMolten(288))
             .duration(40 * SECONDS)
@@ -362,7 +362,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 10))
             .fluidOutputs(Materials.TungstenSteel.getMolten(144))
             .duration(40 * SECONDS)
@@ -370,7 +370,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 11))
             .fluidOutputs(Materials.TungstenSteel.getMolten(1836))
             .duration(40 * SECONDS)
@@ -378,7 +378,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 12))
             .fluidOutputs(Materials.Palladium.getMolten(288))
             .duration(45 * SECONDS)
@@ -386,7 +386,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 13))
             .fluidOutputs(Materials.Palladium.getMolten(144))
             .duration(45 * SECONDS)
@@ -394,9 +394,9 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 14))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Chrome, 6L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Chrome, 6L))
             .outputChances(10000)
             .fluidOutputs(Materials.NiobiumTitanium.getMolten(1728))
             .duration(45 * SECONDS)
@@ -404,7 +404,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 0))
             .fluidOutputs(Materials.Iridium.getMolten(288))
             .duration(50 * SECONDS)
@@ -412,7 +412,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 1))
             .fluidOutputs(Materials.Iridium.getMolten(144))
             .duration(50 * SECONDS)
@@ -420,9 +420,9 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 2))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Iridium, 6L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Iridium, 6L))
             .outputChances(10000)
             .fluidOutputs(Materials.Enderium.getMolten(1728))
             .duration(50 * SECONDS)
@@ -430,7 +430,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 3))
             .fluidOutputs(Materials.Osmium.getMolten(288))
             .duration(55 * SECONDS)
@@ -438,7 +438,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 4))
             .fluidOutputs(Materials.Osmium.getMolten(144))
             .duration(55 * SECONDS)
@@ -446,9 +446,9 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 5))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Osmium, 6L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Osmium, 6L))
             .outputChances(10000)
             .fluidOutputs(Materials.Naquadah.getMolten(1728))
             .duration(55 * SECONDS)
@@ -456,7 +456,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 6))
             .fluidOutputs(Materials.Neutronium.getMolten(288))
             .duration(60 * SECONDS)
@@ -464,7 +464,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 7))
             .fluidOutputs(Materials.Neutronium.getMolten(144))
             .duration(60 * SECONDS)
@@ -472,7 +472,7 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 8))
             .fluidOutputs(Materials.Neutronium.getMolten(1836))
             .duration(60 * SECONDS)
@@ -480,58 +480,58 @@ public class FluidExtractorRecipes implements Runnable {
             .recipeCategory(RecipeCategories.fluidExtractorRecycling)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.wheat_seeds, 1, 32767))
             .fluidOutputs(Materials.SeedOil.getFluid(10))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(2)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.melon_seeds, 1, 32767))
             .fluidOutputs(Materials.SeedOil.getFluid(10))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(2)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.pumpkin_seeds, 1, 32767))
             .fluidOutputs(Materials.SeedOil.getFluid(10))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(2)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Crop_Drop_Rape.get(1))
             .fluidOutputs(Materials.SeedOil.getFluid(125))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(2)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.snowball, 1, 0))
             .fluidOutputs(Materials.Water.getFluid(250L))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.snow, 1, 0))
             .fluidOutputs(Materials.Water.getFluid(1000L))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1L))
             .fluidOutputs(Materials.Ice.getSolid(1000L))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidExtractionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Forestry.ID, "phosphor", 1L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1L))
             .outputChances(1000)
             .fluidOutputs(Materials.Lava.getFluid(800L))
             .duration(12 * SECONDS + 16 * TICKS)
@@ -540,7 +540,7 @@ public class FluidExtractorRecipes implements Runnable {
 
         // Beecombs fluid extractor recipes
         // xenon
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(combs, 1, 134))
             .fluidOutputs(getFluidStack("xenon", 250))
             .duration(2 * SECONDS + 10 * TICKS)
@@ -548,7 +548,7 @@ public class FluidExtractorRecipes implements Runnable {
             .addTo(fluidExtractionRecipes);
 
         // neon
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(combs, 1, 135))
             .fluidOutputs(getFluidStack("neon", 250))
             .duration(15 * TICKS)
@@ -556,7 +556,7 @@ public class FluidExtractorRecipes implements Runnable {
             .addTo(fluidExtractionRecipes);
 
         // krpton
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(combs, 1, 136))
             .fluidOutputs(getFluidStack("krypton", 250))
             .duration(1 * SECONDS + 5 * TICKS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/FluidHeaterRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/FluidHeaterRecipes.java
index b9cdfc4aa3..8168282653 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/FluidHeaterRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/FluidHeaterRecipes.java
@@ -1,62 +1,62 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTUtility;
 
 public class FluidHeaterRecipes implements Runnable {
 
     @Override
     public void run() {
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.GrowthMediumRaw.getFluid(1000))
             .fluidOutputs(Materials.GrowthMediumSterilized.getFluid(1000))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(fluidHeaterRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.BioMediumRaw.getFluid(1000))
             .fluidOutputs(Materials.BioMediumSterilized.getFluid(1000))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_LuV)
             .addTo(fluidHeaterRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Water.getFluid(6))
             .fluidOutputs(Materials.Water.getGas(960))
             .duration(1 * SECONDS + 10 * TICKS)
             .eut(30)
             .addTo(fluidHeaterRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
-            .fluidInputs(GT_ModHandler.getDistilledWater(6))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
+            .fluidInputs(GTModHandler.getDistilledWater(6))
             .fluidOutputs(Materials.Water.getGas(960))
             .duration(1 * SECONDS + 10 * TICKS)
             .eut(30)
             .addTo(fluidHeaterRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.SeedOil.getFluid(16))
             .fluidOutputs(Materials.FryingOilHot.getFluid(16))
             .duration(16 * TICKS)
             .eut(30)
             .addTo(fluidHeaterRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.FishOil.getFluid(16))
             .fluidOutputs(Materials.FryingOilHot.getFluid(16))
             .duration(16 * TICKS)
@@ -64,8 +64,8 @@ public class FluidHeaterRecipes implements Runnable {
             .addTo(fluidHeaterRecipes);
         // Ca(CH3COO)2 = CH3COCH3 + CaO + CO2
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.CalciumAcetateSolution.getFluid(1000))
             .fluidOutputs(Materials.Acetone.getFluid(1000))
             .duration(4 * SECONDS)
@@ -73,7 +73,7 @@ public class FluidHeaterRecipes implements Runnable {
             .addTo(fluidHeaterRecipes);
         // Fluid Sodium
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Sodium.getDust(1))
             .fluidInputs(
 
@@ -83,8 +83,8 @@ public class FluidHeaterRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(fluidHeaterRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Acetone.getFluid(1000))
             .fluidOutputs(Materials.Ethenone.getGas(1000))
             .duration(8 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/FluidSolidifierRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/FluidSolidifierRecipes.java
index 2d52f9eb69..d3197b6f30 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/FluidSolidifierRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/FluidSolidifierRecipes.java
@@ -5,10 +5,10 @@ import static gregtech.api.enums.Mods.NewHorizonsCoreMod;
 import static gregtech.api.enums.Mods.Railcraft;
 import static gregtech.api.enums.Mods.Thaumcraft;
 import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.INGOTS;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.INGOTS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 import static net.minecraftforge.fluids.FluidRegistry.getFluidStack;
 
 import net.minecraft.init.Blocks;
@@ -18,17 +18,17 @@ import net.minecraft.nbt.NBTTagCompound;
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import gregtech.api.GregTech_API;
-import gregtech.api.enums.GT_Values;
+import gregtech.api.GregTechAPI;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsKevlar;
 import gregtech.api.enums.MaterialsUEVplus;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class FluidSolidifierRecipes implements Runnable {
 
@@ -49,7 +49,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 continue;
             }
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Mold_Casing.get(0L))
                 .itemOutputs(materialCasing[i])
                 .fluidInputs(materialArray[i].getMolten(72L))
@@ -63,7 +63,7 @@ public class FluidSolidifierRecipes implements Runnable {
             NBTTagCompound nbtFlask = new NBTTagCompound();
             nbtFlask.setInteger("Capacity", 1000);
             flask.setTagCompound(nbtFlask);
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Mold_Ball.get(0))
                 .itemOutputs(flask)
                 .fluidInputs(new FluidStack(FluidRegistry.getFluid("molten.borosilicateglass"), 144))
@@ -72,7 +72,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .addTo(fluidSolidifierRecipes);
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Ball.get(0L))
             .itemOutputs(getModItem(Thaumcraft.ID, "ItemResource", 1, 3))
             .fluidInputs(Materials.Mercury.getFluid(1000L))
@@ -80,15 +80,15 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Ball.get(0L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Mercury, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Mercury, 1L))
             .fluidInputs(Materials.Mercury.getFluid(1000L))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Ball.get(0L))
             .itemOutputs(new ItemStack(Items.snowball, 1, 0))
             .fluidInputs(Materials.Water.getFluid(250L))
@@ -96,15 +96,15 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Ball.get(0L))
             .itemOutputs(new ItemStack(Items.snowball, 1, 0))
-            .fluidInputs(GT_ModHandler.getDistilledWater(250L))
+            .fluidInputs(GTModHandler.getDistilledWater(250L))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Block.get(0L))
             .itemOutputs(new ItemStack(Blocks.snow, 1, 0))
             .fluidInputs(Materials.Water.getFluid(1000L))
@@ -112,15 +112,15 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Block.get(0L))
             .itemOutputs(new ItemStack(Blocks.snow, 1, 0))
-            .fluidInputs(GT_ModHandler.getDistilledWater(1000L))
+            .fluidInputs(GTModHandler.getDistilledWater(1000L))
             .duration(25 * SECONDS + 12 * TICKS)
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Block.get(0L))
             .itemOutputs(new ItemStack(Blocks.obsidian, 1, 0))
             .fluidInputs(Materials.Lava.getFluid(1000L))
@@ -128,15 +128,15 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(16)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Block.get(0L))
-            .itemOutputs(new ItemStack(GregTech_API.sBlockConcretes, 1, 8))
+            .itemOutputs(new ItemStack(GregTechAPI.sBlockConcretes, 1, 8))
             .fluidInputs(Materials.Concrete.getMolten(144L))
             .duration(12 * TICKS)
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Block.get(0L))
             .itemOutputs(new ItemStack(Blocks.glowstone, 1, 0))
             .fluidInputs(Materials.Glowstone.getMolten(576L))
@@ -144,7 +144,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Block.get(0L))
             .itemOutputs(new ItemStack(Blocks.glass, 1, 0))
             .fluidInputs(Materials.Glass.getMolten(144L))
@@ -152,15 +152,15 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Plate.get(0L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Glass, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, Materials.Glass, 1L))
             .fluidInputs(Materials.Glass.getMolten(144L))
             .duration(12 * TICKS)
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Bottle.get(0L))
             .itemOutputs(ItemList.Bottle_Empty.get(1L))
             .fluidInputs(Materials.Glass.getMolten(144L))
@@ -168,7 +168,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Cylinder.get(0L))
             .itemOutputs(ItemList.Food_Cheese.get(1L))
             .fluidInputs(Materials.Milk.getFluid(250L))
@@ -176,7 +176,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Cylinder.get(0L))
             .itemOutputs(ItemList.Food_Cheese.get(1L))
             .fluidInputs(Materials.Cheese.getMolten(144L))
@@ -184,7 +184,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(8)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Anvil.get(0L))
             .itemOutputs(new ItemStack(Blocks.anvil, 1, 0))
             .fluidInputs(Materials.Iron.getMolten(4464L))
@@ -192,7 +192,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(16)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Anvil.get(0L))
             .itemOutputs(new ItemStack(Blocks.anvil, 1, 0))
             .fluidInputs(Materials.WroughtIron.getMolten(4464L))
@@ -200,15 +200,15 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(16)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Boron.getDust(1))
             .fluidInputs(Materials.Boron.getMolten(144L))
             .duration(1 * SECONDS + 10 * TICKS)
             .eut(30)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Cylinder.get(0))
             .itemOutputs(ItemList.Circuit_Parts_PetriDish.get(1))
             .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(36))
@@ -216,7 +216,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(16)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Cylinder.get(0))
             .itemOutputs(ItemList.Circuit_Parts_PetriDish.get(1))
             .fluidInputs(Materials.Polystyrene.getMolten(36))
@@ -224,7 +224,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(16)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Cylinder.get(0))
             .itemOutputs(ItemList.Circuit_Parts_PetriDish.get(1))
             .fluidInputs(Materials.BorosilicateGlass.getMolten(72))
@@ -232,7 +232,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(16)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Plate.get(0L))
             .itemOutputs(getModItem(NewHorizonsCoreMod.ID, "item.ReinforcedGlassPlate", 1L, 0))
             .fluidInputs(Materials.ReinforceGlass.getMolten(72))
@@ -240,7 +240,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Block.get(0L))
             .itemOutputs(getModItem(IndustrialCraft2.ID, "blockAlloyGlass", 1L))
             .fluidInputs(Materials.ReinforceGlass.getMolten(144))
@@ -248,7 +248,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Ball.get(0L))
             .itemOutputs(ItemList.Circuit_Parts_Glass_Tube.get(1))
             .fluidInputs(Materials.Glass.getMolten(144))
@@ -256,7 +256,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(24)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Ball.get(0L))
             .itemOutputs(ItemList.Circuit_Parts_Reinforced_Glass_Tube.get(1))
             .fluidInputs(Materials.ReinforceGlass.getMolten(288))
@@ -264,7 +264,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Ball.get(0L))
             .itemOutputs(ItemList.Circuit_Parts_Glass_Tube.get(1))
             .fluidInputs(getFluidStack("glass.molten", 1000))
@@ -272,7 +272,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(24)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Ball.get(0L))
             .itemOutputs(ItemList.GelledToluene.get(1))
             .fluidInputs(new FluidStack(ItemList.sToluene, 100))
@@ -280,55 +280,55 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(16)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Nugget.get(0L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Copper, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Copper, 1L))
             .fluidInputs(Materials.AnnealedCopper.getMolten(16))
             .duration(16 * TICKS)
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Ingot.get(0L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1L))
             .fluidInputs(Materials.AnnealedCopper.getMolten(144))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(8)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Block.get(0L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.block, Materials.Copper, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.block, Materials.Copper, 1L))
             .fluidInputs(Materials.AnnealedCopper.getMolten(1296))
             .duration(14 * SECONDS + 8 * TICKS)
             .eut(8)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Nugget.get(0L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 1L))
             .fluidInputs(Materials.WroughtIron.getMolten(16))
             .duration(16 * TICKS)
             .eut(4)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Ingot.get(0L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L))
             .fluidInputs(Materials.WroughtIron.getMolten(144))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(8)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Block.get(0L))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.block, Materials.Iron, 1L))
             .fluidInputs(Materials.WroughtIron.getMolten(1296))
             .duration(14 * SECONDS + 8 * TICKS)
             .eut(8)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Spinneret.get(0L))
             .itemOutputs(ItemList.KevlarFiber.get(8L))
             .fluidInputs(MaterialsKevlar.LiquidCrystalKevlar.getFluid(144L))
@@ -336,7 +336,7 @@ public class FluidSolidifierRecipes implements Runnable {
             .eut(TierEU.RECIPE_EV)
             .addTo(fluidSolidifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Shape_Mold_Anvil.get(0L))
             .itemOutputs(getModItem(Railcraft.ID, "anvil", 1L, 0))
             .fluidInputs(Materials.Steel.getMolten(4464L))
@@ -348,7 +348,7 @@ public class FluidSolidifierRecipes implements Runnable {
         final int fluidPerShapeSolidifierRecipe = 4 * INGOTS;
         {
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Bottle.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Bottle.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -356,7 +356,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Plate.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Plate.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -364,7 +364,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Cell.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Cell.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -372,7 +372,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Ring.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Ring.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -380,7 +380,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Rod.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Rod.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -388,7 +388,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Bolt.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Bolt.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -396,7 +396,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Ingot.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Ingot.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -404,7 +404,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Wire.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Wire.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -412,7 +412,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Casing.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Casing.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -420,7 +420,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Pipe_Tiny.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Pipe_Tiny.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -428,7 +428,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Pipe_Small.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Pipe_Small.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -436,7 +436,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Pipe_Medium.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Pipe_Medium.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -444,7 +444,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Pipe_Large.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Pipe_Large.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -452,7 +452,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Pipe_Huge.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Pipe_Huge.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -460,7 +460,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Block.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Block.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -468,7 +468,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Sword.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Sword.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -476,7 +476,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Pickaxe.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Pickaxe.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -484,7 +484,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Shovel.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Shovel.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -492,7 +492,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Axe.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Axe.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -500,7 +500,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Hoe.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Hoe.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -508,7 +508,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Hammer.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Hammer.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -516,7 +516,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_File.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_File.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -524,7 +524,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Saw.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Saw.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -532,7 +532,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Gear.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Gear.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -540,7 +540,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Rotor.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Rotor.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -548,7 +548,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Turbine_Blade.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Turbine_Blade.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -556,7 +556,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_Small_Gear.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_Small_Gear.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
@@ -564,7 +564,7 @@ public class FluidSolidifierRecipes implements Runnable {
                 .eut(TierEU.RECIPE_UMV)
                 .addTo(fluidSolidifierRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Shape_Extruder_ToolHeadDrill.get(1))
                 .itemOutputs(ItemList.White_Dwarf_Shape_Extruder_ToolHeadDrill.get(1))
                 .fluidInputs(MaterialsUEVplus.WhiteDwarfMatter.getMolten(fluidPerShapeSolidifierRecipe))
diff --git a/src/main/java/gregtech/loaders/postload/recipes/ForgeHammerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ForgeHammerRecipes.java
index 4ebb4b8da6..b8220acb0e 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/ForgeHammerRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/ForgeHammerRecipes.java
@@ -2,21 +2,21 @@ package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.enums.Mods.HardcoreEnderExpansion;
 import static gregtech.api.recipe.RecipeMaps.hammerRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsUEVplus;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTOreDictUnificator;
 import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
 
 public class ForgeHammerRecipes implements Runnable {
@@ -24,119 +24,119 @@ public class ForgeHammerRecipes implements Runnable {
     @Override
     public void run() {
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.stonebrick, 1, 0))
             .itemOutputs(new ItemStack(Blocks.stonebrick, 1, 2))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.stone, 1, 0))
             .itemOutputs(new ItemStack(Blocks.cobblestone, 1, 0))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.cobblestone, 1, 0))
             .itemOutputs(new ItemStack(Blocks.gravel, 1, 0))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.gravel, 1, 0))
             .itemOutputs(new ItemStack(Blocks.sand, 1, 0))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.sandstone, 1, 32767))
             .itemOutputs(new ItemStack(Blocks.sand, 1, 0))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.ice, 1, 0))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 1))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.packed_ice, 1, 0))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 2))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ice, 2))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.brick_block, 1, 0))
             .itemOutputs(new ItemStack(Items.brick, 3, 0))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.nether_brick, 1, 0))
             .itemOutputs(new ItemStack(Items.netherbrick, 3, 0))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.stained_glass, 1, 32767))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 1))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.glass, 1, 32767))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 1))
             .duration(10 * TICKS)
             .eut(10)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.stained_glass_pane, 1, 32767))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.glass_pane, 1, 32767))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Brick.getIngots(1))
             .itemOutputs(Materials.Brick.getDustSmall(1))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Firebrick.get(1))
             .itemOutputs(Materials.Fireclay.getDust(1))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Firebricks.get(1))
             .itemOutputs(ItemList.Firebrick.get(3))
             .duration(10 * TICKS)
             .eut(16)
             .addTo(hammerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Tesseract.get(1L), GregtechItemList.Laser_Lens_Special.get(1))
             .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(2880L))
             .fluidOutputs(MaterialsUEVplus.Space.getMolten(1440L), MaterialsUEVplus.Time.getMolten(1440L))
@@ -145,9 +145,9 @@ public class ForgeHammerRecipes implements Runnable {
             .addTo(hammerRecipes);
 
         if (HardcoreEnderExpansion.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(HardcoreEnderExpansion.ID, "endium_ore", 1))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.HeeEndium, 1))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.HeeEndium, 1))
                 .duration(16)
                 .eut(10)
                 .addTo(hammerRecipes);
diff --git a/src/main/java/gregtech/loaders/postload/recipes/FormingPressRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/FormingPressRecipes.java
index 9780a0a7ba..1b5d29f1df 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/FormingPressRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/FormingPressRecipes.java
@@ -3,80 +3,80 @@ package gregtech.loaders.postload.recipes;
 import static gregtech.api.enums.Mods.AppliedEnergistics2;
 import static gregtech.api.enums.Mods.BuildCraftSilicon;
 import static gregtech.api.recipe.RecipeMaps.formingPressRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class FormingPressRecipes implements Runnable {
 
     @Override
     public void run() {
         if (BuildCraftSilicon.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
                     getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 0))
                 .itemOutputs(getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 1))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(formingPressRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
                     getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 0))
                 .itemOutputs(getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 1))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(formingPressRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 1L),
                     getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 0))
                 .itemOutputs(getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 2))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(formingPressRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1L),
                     getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 0))
                 .itemOutputs(getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 3))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(formingPressRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.gem, Materials.EnderPearl, 1L),
                     getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 0))
                 .itemOutputs(getModItem(BuildCraftSilicon.ID, "redstoneChipset", 2L, 4))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(formingPressRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NetherQuartz, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.NetherQuartz, 1L),
                     getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 0))
                 .itemOutputs(getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 5))
                 .duration(15 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(formingPressRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     new ItemStack(Items.comparator, 1, 32767),
                     getModItem(BuildCraftSilicon.ID, "redstoneChipset", 1L, 0))
@@ -87,7 +87,7 @@ public class FormingPressRecipes implements Runnable {
         }
 
         if (AppliedEnergistics2.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10),
                     getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 0L, 13))
@@ -96,36 +96,36 @@ public class FormingPressRecipes implements Runnable {
                 .eut(16)
                 .addTo(formingPressRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.CertusQuartz, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.CertusQuartz, 1L),
                     getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 0L, 13))
                 .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 16))
                 .duration(10 * SECONDS)
                 .eut(16)
                 .addTo(formingPressRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1L),
                     getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 0L, 14))
                 .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 17))
                 .duration(10 * SECONDS)
                 .eut(16)
                 .addTo(formingPressRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.Gold, 1L),
                     getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 0L, 15))
                 .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 18))
                 .duration(10 * SECONDS)
                 .eut(16)
                 .addTo(formingPressRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.plate, Materials.SiliconSG, 1L),
+                    GTOreDictUnificator.get(OrePrefixes.plate, Materials.SiliconSG, 1L),
                     getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 0L, 19))
                 .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 20))
                 .duration(10 * SECONDS)
@@ -133,52 +133,52 @@ public class FormingPressRecipes implements Runnable {
                 .addTo(formingPressRecipes);
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Dough_Sugar.get(4L), ItemList.Shape_Mold_Cylinder.get(0L))
             .itemOutputs(ItemList.Food_Raw_Cake.get(1L))
             .duration(19 * SECONDS + 4 * TICKS)
             .eut(4)
             .addTo(formingPressRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Cupronickel, 1L),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Cupronickel, 1L),
                 ItemList.Shape_Mold_Credit.get(0L))
             .itemOutputs(ItemList.Credit_Greg_Cupronickel.get(4L))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(formingPressRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Brass, 1L),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Brass, 1L),
                 ItemList.Shape_Mold_Credit.get(0L))
             .itemOutputs(ItemList.Coin_Doge.get(4L))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(formingPressRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iron, 1L),
                 ItemList.Shape_Mold_Credit.get(0L))
             .itemOutputs(ItemList.Credit_Iron.get(4L))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(formingPressRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
+                GTOreDictUnificator.get(OrePrefixes.plate, Materials.WroughtIron, 1L),
                 ItemList.Shape_Mold_Credit.get(0L))
             .itemOutputs(ItemList.Credit_Iron.get(4L))
             .duration(5 * SECONDS)
             .eut(16)
             .addTo(formingPressRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brick, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Brick, 1L),
                 ItemList.Shape_Mold_Ingot.get(0L))
             .itemOutputs(new ItemStack(Items.brick, 1, 0))
             .duration(5 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/FuelRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/FuelRecipes.java
index 2c3c979b11..96a6331867 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/FuelRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/FuelRecipes.java
@@ -4,124 +4,124 @@ import static gregtech.api.enums.Mods.ForbiddenMagic;
 import static gregtech.api.enums.Mods.TaintedMagic;
 import static gregtech.api.enums.Mods.Thaumcraft;
 import static gregtech.api.enums.Mods.ThaumicTinkerer;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE;
-import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE;
+import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE;
 
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_RecipeConstants;
+import gregtech.api.enums.GTValues;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTRecipeConstants;
 
 public class FuelRecipes implements Runnable {
 
     // todo: add an enum for the fuel type, int values are mysterious
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("biogasCell", 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("biogasCell", 1L))
             .metadata(FUEL_VALUE, 40)
             .metadata(FUEL_TYPE, 1)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.golden_apple, 1, 1))
             .itemOutputs(new ItemStack(Items.apple, 1))
             .metadata(FUEL_VALUE, 6400)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Thaumcraft.ID, "ItemShard", 1L, 6))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(ForbiddenMagic.ID, "GluttonyShard", 1L))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(ForbiddenMagic.ID, "FMResource", 1L, 3))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(ForbiddenMagic.ID, "NetherShard", 1L))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(ForbiddenMagic.ID, "NetherShard", 1L, 1))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(ForbiddenMagic.ID, "NetherShard", 1L, 2))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(ForbiddenMagic.ID, "NetherShard", 1L, 3))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(ForbiddenMagic.ID, "NetherShard", 1L, 4))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(ForbiddenMagic.ID, "NetherShard", 1L, 5))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(ForbiddenMagic.ID, "NetherShard", 1L, 6))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(TaintedMagic.ID, "ItemMaterial", 1L, 3))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(TaintedMagic.ID, "ItemMaterial", 1L, 4))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(TaintedMagic.ID, "ItemMaterial", 1L, 5))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(ThaumicTinkerer.ID, "kamiResource", 1L, 6))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(ThaumicTinkerer.ID, "kamiResource", 1L, 7))
             .metadata(FUEL_VALUE, 720)
             .metadata(FUEL_TYPE, 5)
-            .addTo(GT_RecipeConstants.Fuel);
+            .addTo(GTRecipeConstants.Fuel);
 
     }
 }
diff --git a/src/main/java/gregtech/loaders/postload/recipes/FusionReactorRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/FusionReactorRecipes.java
index 3d53de7d2a..74cabd4196 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/FusionReactorRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/FusionReactorRecipes.java
@@ -1,14 +1,14 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.fusionRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
-import static gregtech.api.util.GT_RecipeConstants.FUSION_THRESHOLD;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeConstants.FUSION_THRESHOLD;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.TierEU;
-import gtPlusPlus.core.material.ELEMENT;
+import gtPlusPlus.core.material.MaterialsElements;
 
 public class FusionReactorRecipes implements Runnable {
 
@@ -21,7 +21,7 @@ public class FusionReactorRecipes implements Runnable {
         // F FT2, FT3 - fusion tier required, + - requires different startup recipe (startup cost bigger than
         // available on the tier)
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Lithium.getMolten(16), Materials.Tungsten.getMolten(16))
             .fluidOutputs(Materials.Iridium.getMolten(16))
             .duration(3 * SECONDS + 4 * TICKS)
@@ -29,7 +29,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 300000000)
             .addTo(fusionRecipes); // FT1+ - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Deuterium.getGas(125), Materials.Tritium.getGas(125))
             .fluidOutputs(Materials.Helium.getPlasma(125))
             .duration(16 * TICKS)
@@ -37,7 +37,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 40000000)
             .addTo(fusionRecipes); // FT1 Cheap - farmable
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Deuterium.getGas(125), Materials.Helium_3.getGas(125))
             .fluidOutputs(Materials.Helium.getPlasma(125))
             .duration(16 * TICKS)
@@ -45,7 +45,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 60000000)
             .addTo(fusionRecipes); // FT1 Expensive //
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Aluminium.getMolten(16), Materials.Lithium.getMolten(16))
             .fluidOutputs(Materials.Sulfur.getPlasma(144))
             .duration(1 * SECONDS + 12 * TICKS)
@@ -53,7 +53,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 240000000)
             .addTo(fusionRecipes); // FT1+ Cheap
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Beryllium.getMolten(16), Materials.Deuterium.getGas(375))
             .fluidOutputs(Materials.Nitrogen.getPlasma(125))
             .duration(16 * TICKS)
@@ -61,7 +61,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 180000000)
             .addTo(fusionRecipes); // FT1+ Expensive //
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Silicon.getMolten(16), Materials.Magnesium.getMolten(16))
             .fluidOutputs(Materials.Iron.getPlasma(144))
             .duration(1 * SECONDS + 12 * TICKS)
@@ -69,7 +69,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 360000000)
             .addTo(fusionRecipes); // FT1++ Cheap //
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Potassium.getMolten(16), Materials.Fluorine.getGas(144))
             .fluidOutputs(Materials.Nickel.getPlasma(144))
             .duration(16 * TICKS)
@@ -77,7 +77,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 480000000)
             .addTo(fusionRecipes); // FT1++ Expensive //
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Beryllium.getMolten(16), Materials.Tungsten.getMolten(16))
             .fluidOutputs(Materials.Platinum.getMolten(16))
             .duration(1 * SECONDS + 12 * TICKS)
@@ -85,7 +85,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 150000000)
             .addTo(fusionRecipes); // FT1 - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Neodymium.getMolten(16), Materials.Hydrogen.getGas(48))
             .fluidOutputs(Materials.Europium.getMolten(16))
             .duration(1 * SECONDS + 12 * TICKS)
@@ -93,7 +93,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 150000000)
             .addTo(fusionRecipes); // FT1 - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Lutetium.getMolten(16), Materials.Chrome.getMolten(16))
             .fluidOutputs(Materials.Americium.getMolten(16))
             .duration(4 * SECONDS + 16 * TICKS)
@@ -101,7 +101,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 200000000)
             .addTo(fusionRecipes); // FT2 - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Plutonium.getMolten(16), Materials.Thorium.getMolten(16))
             .fluidOutputs(Materials.Naquadah.getMolten(16))
             .duration(3 * SECONDS + 4 * TICKS)
@@ -109,7 +109,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 300000000)
             .addTo(fusionRecipes); // FT1+ - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Americium.getMolten(144), Materials.Naquadria.getMolten(144))
             .fluidOutputs(Materials.Neutronium.getMolten(144))
             .duration(12 * SECONDS)
@@ -117,7 +117,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 640000000)
             .addTo(fusionRecipes); // FT3 - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Glowstone.getMolten(16), Materials.Helium.getPlasma(4))
             .fluidOutputs(Materials.Sunnarium.getMolten(16))
             .duration(1 * SECONDS + 12 * TICKS)
@@ -126,7 +126,7 @@ public class FusionReactorRecipes implements Runnable {
             .addTo(fusionRecipes); // Mark 1 Expensive
                                    // //
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Tungsten.getMolten(16), Materials.Helium.getGas(16))
             .fluidOutputs(Materials.Osmium.getMolten(16))
             .duration(12 * SECONDS + 16 * TICKS)
@@ -134,7 +134,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 150000000)
             .addTo(fusionRecipes); // FT1 - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Manganese.getMolten(16), Materials.Hydrogen.getGas(16))
             .fluidOutputs(Materials.Iron.getMolten(16))
             .duration(3 * SECONDS + 4 * TICKS)
@@ -142,7 +142,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 120000000)
             .addTo(fusionRecipes); // FT1 - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Magnesium.getMolten(128), Materials.Oxygen.getGas(128))
             .fluidOutputs(Materials.Calcium.getPlasma(16))
             .duration(6 * SECONDS + 8 * TICKS)
@@ -150,7 +150,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 120000000)
             .addTo(fusionRecipes); //
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Mercury.getFluid(16), Materials.Magnesium.getMolten(16))
             .fluidOutputs(Materials.Uranium.getMolten(16))
             .duration(3 * SECONDS + 4 * TICKS)
@@ -158,7 +158,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 240000000)
             .addTo(fusionRecipes); // FT2 - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Gold.getMolten(16), Materials.Aluminium.getMolten(16))
             .fluidOutputs(Materials.Uranium.getMolten(16))
             .duration(3 * SECONDS + 4 * TICKS)
@@ -166,7 +166,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 240000000)
             .addTo(fusionRecipes); // FT2 - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Uranium.getMolten(16), Materials.Helium.getGas(16))
             .fluidOutputs(Materials.Plutonium.getMolten(16))
             .duration(6 * SECONDS + 8 * TICKS)
@@ -174,7 +174,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 480000000)
             .addTo(fusionRecipes); // FT2+ - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Vanadium.getMolten(16), Materials.Hydrogen.getGas(125))
             .fluidOutputs(Materials.Chrome.getMolten(16))
             .duration(3 * SECONDS + 4 * TICKS)
@@ -182,7 +182,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 140000000)
             .addTo(fusionRecipes); // FT1 - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Gallium.getMolten(16), Materials.Radon.getGas(125))
             .fluidOutputs(Materials.Duranium.getMolten(16))
             .duration(3 * SECONDS + 4 * TICKS)
@@ -190,7 +190,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 140000000)
             .addTo(fusionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Titanium.getMolten(48), Materials.Duranium.getMolten(32))
             .fluidOutputs(Materials.Tritanium.getMolten(16))
             .duration(3 * SECONDS + 4 * TICKS)
@@ -198,7 +198,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 200000000)
             .addTo(fusionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Tantalum.getMolten(16), Materials.Tritium.getGas(16))
             .fluidOutputs(Materials.Tungsten.getMolten(16))
             .duration(16 * TICKS)
@@ -206,7 +206,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 200000000)
             .addTo(fusionRecipes); //
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Silver.getMolten(16), Materials.Lithium.getMolten(16))
             .fluidOutputs(Materials.Indium.getMolten(16))
             .duration(1 * SECONDS + 12 * TICKS)
@@ -214,7 +214,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 380000000)
             .addTo(fusionRecipes); //
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Copper.getMolten(72), Materials.Tritium.getGas(250))
             .fluidOutputs(Materials.Zinc.getPlasma(72))
             .duration(16 * TICKS)
@@ -222,7 +222,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 180000000)
             .addTo(fusionRecipes); // FT2 - farmable
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Cobalt.getMolten(144), Materials.Silicon.getMolten(144))
             .fluidOutputs(Materials.Niobium.getPlasma(144))
             .duration(16 * TICKS)
@@ -230,7 +230,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 200000000)
             .addTo(fusionRecipes); // FT2 - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Gold.getMolten(144), Materials.Arsenic.getMolten(144))
             .fluidOutputs(Materials.Silver.getPlasma(144))
             .duration(16 * TICKS)
@@ -238,7 +238,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 350000000)
             .addTo(fusionRecipes); // FT2+
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Silver.getMolten(144), Materials.Helium_3.getGas(375))
             .fluidOutputs(Materials.Tin.getPlasma(288))
             .duration(16 * TICKS)
@@ -246,7 +246,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 280000000)
             .addTo(fusionRecipes); // FT2
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Tantalum.getMolten(144), Materials.Zinc.getPlasma(72))
             .fluidOutputs(Materials.Bismuth.getPlasma(144))
             .duration(16 * TICKS)
@@ -254,7 +254,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 350000000)
             .addTo(fusionRecipes); // FT3 - farmable
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Iridium.getMolten(144), Materials.Fluorine.getGas(500))
             .fluidOutputs(Materials.Radon.getPlasma(144))
             .duration(1 * SECONDS + 12 * TICKS)
@@ -262,7 +262,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 450000000)
             .addTo(fusionRecipes); // FT3 - utility
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Plutonium241.getMolten(144), Materials.Hydrogen.getGas(2000))
             .fluidOutputs(Materials.Americium.getPlasma(144))
             .duration(3 * SECONDS + 4 * TICKS)
@@ -270,15 +270,15 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 500000000)
             .addTo(fusionRecipes); // FT3
 
-        GT_Values.RA.stdBuilder()
-            .fluidInputs(Materials.Cobalt.getMolten(144), ELEMENT.getInstance().NEON.getFluidStack(144))
+        GTValues.RA.stdBuilder()
+            .fluidInputs(Materials.Cobalt.getMolten(144), MaterialsElements.getInstance().NEON.getFluidStack(144))
             .fluidOutputs(Materials.Rubidium.getMolten(144))
             .duration(1 * SECONDS + 4 * TICKS)
             .eut(98304)
             .metadata(FUSION_THRESHOLD, 500000000)
             .addTo(fusionRecipes); // FT3
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Lutetium.getMolten(288), Materials.Vanadium.getMolten(288))
             .fluidOutputs(Materials.Plutonium241.getPlasma(288))
             .duration(4 * TICKS)
@@ -286,7 +286,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 1_000_000_000)
             .addTo(fusionRecipes); // FT5 because of UEV voltage
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Tellurium.getMolten(288), Materials.Zinc.getMolten(288))
             .fluidOutputs(Materials.Lead.getPlasma(288))
             .duration(4 * TICKS)
@@ -294,7 +294,7 @@ public class FusionReactorRecipes implements Runnable {
             .metadata(FUSION_THRESHOLD, 1_000_000_000)
             .addTo(fusionRecipes); // FT5 because of UEV voltage
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(Materials.Osmium.getMolten(288), Materials.Silicon.getMolten(288))
             .fluidOutputs(Materials.Thorium.getPlasma(288))
             .duration(4 * TICKS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/ImplosionCompressorRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ImplosionCompressorRecipes.java
index a671fd6977..80a35f1da0 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/ImplosionCompressorRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/ImplosionCompressorRecipes.java
@@ -3,69 +3,69 @@ package gregtech.loaders.postload.recipes;
 import static gregtech.api.enums.Mods.GalacticraftCore;
 import static gregtech.api.enums.Mods.GalacticraftMars;
 import static gregtech.api.recipe.RecipeMaps.implosionRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_RecipeConstants;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTRecipeConstants;
 
 public class ImplosionCompressorRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.IC2_Compressed_Coal_Chunk.get(1L))
             .itemOutputs(
                 ItemList.IC2_Industrial_Diamond.get(1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 4L))
-            .metadata(GT_RecipeConstants.ADDITIVE_AMOUNT, 8)
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 4L))
+            .metadata(GTRecipeConstants.ADDITIVE_AMOUNT, 8)
             .duration(1 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(implosionRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Ingot_IridiumAlloy.get(1L))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.plateAlloy, Materials.Iridium, 1L),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 4L))
-            .metadata(GT_RecipeConstants.ADDITIVE_AMOUNT, 8)
+                GTOreDictUnificator.get(OrePrefixes.plateAlloy, Materials.Iridium, 1L),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 4L))
+            .metadata(GTRecipeConstants.ADDITIVE_AMOUNT, 8)
             .duration(1 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(implosionRecipes);
 
         if (GalacticraftMars.isModLoaded()) {
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Ingot_Heavy1.get(1L))
                 .itemOutputs(
                     getModItem(GalacticraftCore.ID, "item.heavyPlating", 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.StainlessSteel, 1L))
-                .metadata(GT_RecipeConstants.ADDITIVE_AMOUNT, 8)
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.StainlessSteel, 1L))
+                .metadata(GTRecipeConstants.ADDITIVE_AMOUNT, 8)
                 .duration(1 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(implosionRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Ingot_Heavy2.get(1L))
                 .itemOutputs(
                     getModItem(GalacticraftMars.ID, "item.null", 1L, 3),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.TungstenSteel, 2L))
-                .metadata(GT_RecipeConstants.ADDITIVE_AMOUNT, 16)
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.TungstenSteel, 2L))
+                .metadata(GTRecipeConstants.ADDITIVE_AMOUNT, 16)
                 .duration(1 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(implosionRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Ingot_Heavy3.get(1L))
                 .itemOutputs(
                     getModItem(GalacticraftMars.ID, "item.itemBasicAsteroids", 1L),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Platinum, 3L))
-                .metadata(GT_RecipeConstants.ADDITIVE_AMOUNT, 24)
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Platinum, 3L))
+                .metadata(GTRecipeConstants.ADDITIVE_AMOUNT, 24)
                 .duration(1 * SECONDS)
                 .eut(TierEU.RECIPE_LV)
                 .addTo(implosionRecipes);
diff --git a/src/main/java/gregtech/loaders/postload/recipes/LaserEngraverRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/LaserEngraverRecipes.java
index be21c84d66..58285ee204 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/LaserEngraverRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/LaserEngraverRecipes.java
@@ -1,10 +1,10 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.MaterialsUEVplus;
 import gregtech.api.enums.TierEU;
 
@@ -13,7 +13,7 @@ public class LaserEngraverRecipes implements Runnable {
     @Override
     public void run() {
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(MaterialsUEVplus.DimensionallyTranscendentCrudeCatalyst.getFluid(1000))
             .fluidOutputs(MaterialsUEVplus.ExcitedDTCC.getFluid(1000))
             .requiresCleanRoom()
@@ -22,7 +22,7 @@ public class LaserEngraverRecipes implements Runnable {
             .noOptimize()
             .addTo(laserEngraverRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(MaterialsUEVplus.DimensionallyTranscendentProsaicCatalyst.getFluid(1000))
             .fluidOutputs(MaterialsUEVplus.ExcitedDTPC.getFluid(1000))
             .requiresCleanRoom()
@@ -31,7 +31,7 @@ public class LaserEngraverRecipes implements Runnable {
             .noOptimize()
             .addTo(laserEngraverRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(MaterialsUEVplus.DimensionallyTranscendentResplendentCatalyst.getFluid(1000))
             .fluidOutputs(MaterialsUEVplus.ExcitedDTRC.getFluid(1000))
             .requiresCleanRoom()
@@ -40,7 +40,7 @@ public class LaserEngraverRecipes implements Runnable {
             .noOptimize()
             .addTo(laserEngraverRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(MaterialsUEVplus.DimensionallyTranscendentExoticCatalyst.getFluid(1000))
             .fluidOutputs(MaterialsUEVplus.ExcitedDTEC.getFluid(1000))
             .requiresCleanRoom()
@@ -49,7 +49,7 @@ public class LaserEngraverRecipes implements Runnable {
             .noOptimize()
             .addTo(laserEngraverRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .fluidInputs(MaterialsUEVplus.DimensionallyTranscendentStellarCatalyst.getFluid(1000))
             .fluidOutputs(MaterialsUEVplus.ExcitedDTSC.getFluid(1000))
             .requiresCleanRoom()
diff --git a/src/main/java/gregtech/loaders/postload/recipes/LatheRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/LatheRecipes.java
index 4413f61200..db2c79322f 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/LatheRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/LatheRecipes.java
@@ -2,37 +2,37 @@ package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.enums.Mods.Forestry;
 import static gregtech.api.recipe.RecipeMaps.latheRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class LatheRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(new ItemStack(Blocks.wooden_slab, 1, GT_Values.W))
+        GTValues.RA.stdBuilder()
+            .itemInputs(new ItemStack(Blocks.wooden_slab, 1, GTValues.W))
             .itemOutputs(
                 new ItemStack(Items.bowl, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 1))
+                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(8)
             .addTo(latheRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(getModItem(Forestry.ID, "slabs", 1L, GT_Values.W))
+        GTValues.RA.stdBuilder()
+            .itemInputs(getModItem(Forestry.ID, "slabs", 1L, GTValues.W))
             .itemOutputs(
                 new ItemStack(Items.bowl, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 1))
+                GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Wood, 1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(8)
             .addTo(latheRecipes);
diff --git a/src/main/java/gregtech/loaders/postload/recipes/MatterAmplifierRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/MatterAmplifierRecipes.java
index 863f0ae440..5896b94f1a 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/MatterAmplifierRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/MatterAmplifierRecipes.java
@@ -1,9 +1,9 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.amplifierRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.TierEU;
@@ -12,14 +12,14 @@ public class MatterAmplifierRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.IC2_Scrap.get(9L))
             .fluidOutputs(Materials.UUAmplifier.getFluid(1))
             .duration(9 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(amplifierRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.IC2_Scrapbox.get(1L))
             .fluidOutputs(Materials.UUAmplifier.getFluid(1))
             .duration(9 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java
index 1b8cbb4dcd..4562435816 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/MixerRecipes.java
@@ -8,10 +8,10 @@ import static gregtech.api.enums.Mods.PamsHarvestCraft;
 import static gregtech.api.enums.Mods.Railcraft;
 import static gregtech.api.enums.Mods.Thaumcraft;
 import static gregtech.api.recipe.RecipeMaps.mixerRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 import static net.minecraftforge.fluids.FluidRegistry.getFluidStack;
 
 import net.minecraft.init.Blocks;
@@ -20,8 +20,8 @@ import net.minecraft.item.ItemStack;
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import goodgenerator.items.MyMaterial;
-import gregtech.api.enums.GT_Values;
+import goodgenerator.items.GGMaterial;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsKevlar;
@@ -29,9 +29,9 @@ import gregtech.api.enums.MaterialsOreAlum;
 import gregtech.api.enums.MaterialsUEVplus;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 import mods.railcraft.common.blocks.aesthetics.cube.EnumCube;
 
 public class MixerRecipes implements Runnable {
@@ -41,408 +41,408 @@ public class MixerRecipes implements Runnable {
 
         registerSingleBlockAndMulti();
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.EnderPearl, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.EnderEye, OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.EnderPearl, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.EnderEye, OrePrefixes.dust.mMaterialAmount))
             .duration(5 * SECONDS)
             .eut(48)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Electrum, 2L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Electrum, 2L * OrePrefixes.dust.mMaterialAmount))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Invar, 3L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Invar, 3L * OrePrefixes.dust.mMaterialAmount))
             .duration(15 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 4),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Invar, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Manganese, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.StainlessSteel, 9L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 4),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Invar, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Manganese, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.StainlessSteel, 9L * OrePrefixes.dust.mMaterialAmount))
             .duration(45 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Kanthal, 3L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Kanthal, 3L * OrePrefixes.dust.mMaterialAmount))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Brass, 4L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Brass, 4L * OrePrefixes.dust.mMaterialAmount))
             .duration(2 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Bronze, 4L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Bronze, 4L * OrePrefixes.dust.mMaterialAmount))
             .duration(2 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
-                GT_Utility.getIntegratedCircuit(3))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Cupronickel, 2L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
+                GTUtility.getIntegratedCircuit(3))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Cupronickel, 2L * OrePrefixes.dust.mMaterialAmount))
             .duration(10 * SECONDS)
             .eut(24)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 4),
-                GT_Utility.getIntegratedCircuit(4))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.SterlingSilver, 5L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 4),
+                GTUtility.getIntegratedCircuit(4))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.SterlingSilver, 5L * OrePrefixes.dust.mMaterialAmount))
             .duration(25 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Electrum, 2),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.BlackBronze, 5L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Electrum, 2),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.BlackBronze, 5L * OrePrefixes.dust.mMaterialAmount))
             .duration(25 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bismuth, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 4),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.BismuthBronze, 5L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bismuth, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 4),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.BismuthBronze, 5L * OrePrefixes.dust.mMaterialAmount))
             .duration(25 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BlackBronze, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 3),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.BlackSteel, 5L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.BlackBronze, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 3),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.BlackSteel, 5L * OrePrefixes.dust.mMaterialAmount))
             .duration(25 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SterlingSilver, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BismuthBronze, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BlackSteel, 4),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 2),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.RedSteel, 8L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.SterlingSilver, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.BismuthBronze, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.BlackSteel, 4),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 2),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.RedSteel, 8L * OrePrefixes.dust.mMaterialAmount))
             .duration(40 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RoseGold, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BlackSteel, 4),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 2),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.BlueSteel, 8L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.RoseGold, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.BlackSteel, 4),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 2),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.BlueSteel, 8L * OrePrefixes.dust.mMaterialAmount))
             .duration(40 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 5),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 15),
-                GT_Utility.getIntegratedCircuit(14))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.BlackSteel, 25L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 5),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 15),
+                GTUtility.getIntegratedCircuit(14))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.BlackSteel, 25L * OrePrefixes.dust.mMaterialAmount))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 4),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 4),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bismuth, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BlackSteel, 20),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 10),
-                GT_Utility.getIntegratedCircuit(15))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.RedSteel, 40L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 4),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 4),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bismuth, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.BlackSteel, 20),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 10),
+                GTUtility.getIntegratedCircuit(15))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.RedSteel, 40L * OrePrefixes.dust.mMaterialAmount))
             .duration(60 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 19),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 16),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 5),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BlackSteel, 64),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BlackSteel, 16),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 40),
-                GT_Utility.getIntegratedCircuit(16))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 19),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 16),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 5),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.BlackSteel, 64),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.BlackSteel, 16),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 40),
+                GTUtility.getIntegratedCircuit(16))
             .itemOutputs(
-                GT_OreDictUnificator.getDust(Materials.BlueSteel, 64L * OrePrefixes.dust.mMaterialAmount),
-                GT_OreDictUnificator.getDust(Materials.BlueSteel, 64L * OrePrefixes.dust.mMaterialAmount),
-                GT_OreDictUnificator.getDust(Materials.BlueSteel, 32L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.getDust(Materials.BlueSteel, 64L * OrePrefixes.dust.mMaterialAmount),
+                GTOreDictUnificator.getDust(Materials.BlueSteel, 64L * OrePrefixes.dust.mMaterialAmount),
+                GTOreDictUnificator.getDust(Materials.BlueSteel, 32L * OrePrefixes.dust.mMaterialAmount))
             .duration(3 * MINUTES)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cobalt, 5),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Molybdenum, 1),
-                GT_Utility.getIntegratedCircuit(2))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Ultimet, 9L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cobalt, 5),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Molybdenum, 1),
+                GTUtility.getIntegratedCircuit(2))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Ultimet, 9L * OrePrefixes.dust.mMaterialAmount))
             .duration(45 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 7),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cobalt, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.CobaltBrass, 9L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Brass, 7),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cobalt, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.CobaltBrass, 9L * OrePrefixes.dust.mMaterialAmount))
             .duration(45 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 3),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Gunpowder, 6L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 3),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Gunpowder, 6L * OrePrefixes.dust.mMaterialAmount))
             .duration(30 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Charcoal, 3),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Gunpowder, 6L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Charcoal, 3),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Gunpowder, 6L * OrePrefixes.dust.mMaterialAmount))
             .duration(30 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 3),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Gunpowder, 6L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 3),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Gunpowder, 6L * OrePrefixes.dust.mMaterialAmount))
             .duration(30 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Indium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gallium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Indium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gallium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Phosphorus, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(
-                GT_OreDictUnificator.getDust(Materials.IndiumGalliumPhosphide, 3L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.getDust(Materials.IndiumGalliumPhosphide, 3L * OrePrefixes.dust.mMaterialAmount))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Brick, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Fireclay, 2L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Brick, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Fireclay, 2L * OrePrefixes.dust.mMaterialAmount))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 4),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Nichrome, 5L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 4),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Nichrome, 5L * OrePrefixes.dust.mMaterialAmount))
             .duration(25 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Osmium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 3),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.Osmiridium, 4L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Osmium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 3),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.Osmiridium, 4L * OrePrefixes.dust.mMaterialAmount))
             .duration(2 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Niobium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.NiobiumTitanium, 2L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Niobium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.NiobiumTitanium, 2L * OrePrefixes.dust.mMaterialAmount))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gallium, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.VanadiumGallium, 4L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gallium, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.VanadiumGallium, 4L * OrePrefixes.dust.mMaterialAmount))
             .duration(2 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tungsten, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.TungstenCarbide, 2L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tungsten, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.TungstenCarbide, 2L * OrePrefixes.dust.mMaterialAmount))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tungsten, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.TungstenSteel, 2L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tungsten, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.TungstenSteel, 2L * OrePrefixes.dust.mMaterialAmount))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(TierEU.RECIPE_EV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 3),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.TPV, 7L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 3),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.TPV, 7L * OrePrefixes.dust.mMaterialAmount))
             .duration(8 * SECONDS + 15 * TICKS)
             .eut(TierEU.RECIPE_EV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 5),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Molybdenum, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.HSSG, 9L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 5),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chrome, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Molybdenum, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.HSSG, 9L * OrePrefixes.dust.mMaterialAmount))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_EV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HSSG, 6),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cobalt, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Manganese, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.HSSE, 9L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.HSSG, 6),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cobalt, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Manganese, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silicon, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.HSSE, 9L * OrePrefixes.dust.mMaterialAmount))
             .duration(35 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HSSG, 6),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Osmium, 1),
-                GT_Utility.getIntegratedCircuit(2))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.HSSS, 9L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.HSSG, 6),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 2),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Osmium, 1),
+                GTUtility.getIntegratedCircuit(2))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.HSSS, 9L * OrePrefixes.dust.mMaterialAmount))
             .duration(40 * SECONDS)
             .eut(TierEU.RECIPE_IV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 4),
-                GT_Utility.getIntegratedCircuit(3))
-            .itemOutputs(GT_OreDictUnificator.getDust(Materials.FerriteMixture, 6L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Zinc, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 4),
+                GTUtility.getIntegratedCircuit(3))
+            .itemOutputs(GTOreDictUnificator.getDust(Materials.FerriteMixture, 6L * OrePrefixes.dust.mMaterialAmount))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 7))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Boron, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 7))
             .itemOutputs(
-                GT_OreDictUnificator.getDust(Materials.BorosilicateGlass, 8L * OrePrefixes.dust.mMaterialAmount))
+                GTOreDictUnificator.getDust(Materials.BorosilicateGlass, 8L * OrePrefixes.dust.mMaterialAmount))
             .duration(10 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Items.rotten_flesh, 1, 0),
                 new ItemStack(Items.fermented_spider_eye, 1, 0),
                 ItemList.IC2_Scrap.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatRaw, 1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.MeatRaw, 1))
             .itemOutputs(ItemList.Food_Chum.get(4))
             .fluidInputs(getFluidStack("potion.purpledrink", 750))
             .fluidOutputs(getFluidStack("sludge", 1000))
@@ -450,44 +450,42 @@ public class MixerRecipes implements Runnable {
             .eut(24)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wheat, 1))
             .itemOutputs(ItemList.Food_Dough.get(2))
             .fluidInputs(Materials.Water.getFluid(1000))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1),
-                ItemList.Food_PotatoChips.get(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Chili, 1), ItemList.Food_PotatoChips.get(1))
             .itemOutputs(ItemList.Food_ChiliChips.get(1))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Redstone, 5),
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ruby, 4))
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Redstone, 5),
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ruby, 4))
             .itemOutputs(ItemList.IC2_Energium_Dust.get(1))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 5),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ruby, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 5),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ruby, 4))
             .itemOutputs(ItemList.IC2_Energium_Dust.get(9))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_MV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1),
                 new ItemStack(Blocks.brown_mushroom, 1),
                 new ItemStack(Items.spider_eye, 1))
             .itemOutputs(new ItemStack(Items.fermented_spider_eye, 1))
@@ -495,138 +493,138 @@ public class MixerRecipes implements Runnable {
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Gold, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.LiveRoot, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.IronWood, 2))
+                GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Gold, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.LiveRoot, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.IronWood, 2))
             .duration(5 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 9),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.LiveRoot, 9))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.IronWood, 18))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 9),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.LiveRoot, 9))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.IronWood, 18))
             .duration(45 * SECONDS)
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1),
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Fluix, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1),
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Fluix, 2))
             .fluidInputs(Materials.Water.getFluid(500))
             .duration(20 * TICKS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1),
-                GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Fluix, 2))
-            .fluidInputs(GT_ModHandler.getDistilledWater(500))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1),
+                GTOreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Fluix, 2))
+            .fluidInputs(GTModHandler.getDistilledWater(500))
             .duration(20 * TICKS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.IC2_Fertilizer.get(1),
                 new ItemStack(Blocks.dirt, 8, 32767),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(Forestry.ID, "soil", 8L, 0))
             .fluidInputs(Materials.Water.getFluid(1000))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.FR_Fertilizer.get(1),
                 new ItemStack(Blocks.dirt, 8, 32767),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(Forestry.ID, "soil", 8L, 0))
             .fluidInputs(Materials.Water.getFluid(1000))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.FR_Compost.get(1),
                 new ItemStack(Blocks.dirt, 8, 32767),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(Forestry.ID, "soil", 8L, 0))
             .fluidInputs(Materials.Water.getFluid(1000))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.FR_Mulch.get(8),
                 new ItemStack(Blocks.dirt, 8, 32767),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(Forestry.ID, "soil", 8L, 0))
             .fluidInputs(Materials.Water.getFluid(1000))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.sand, 1, 32767),
                 new ItemStack(Blocks.dirt, 1, 32767),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(getModItem(Forestry.ID, "soil", 2L, 1))
             .fluidInputs(Materials.Water.getFluid(250))
             .duration(16 * TICKS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LightFuel, 5),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HeavyFuel, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Fuel, 6))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.LightFuel, 5),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.HeavyFuel, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Fuel, 6))
             .duration(16 * TICKS)
             .eut(TierEU.RECIPE_MV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LightFuel, 5),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.LightFuel, 5),
                 Materials.Empty.getCells(1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Fuel, 6))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Fuel, 6))
             .fluidInputs(Materials.HeavyFuel.getFluid(1000))
             .duration(16 * TICKS)
             .eut(TierEU.RECIPE_MV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HeavyFuel, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.HeavyFuel, 1),
                 Materials.Empty.getCells(5),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Fuel, 6))
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Fuel, 6))
             .fluidInputs(Materials.LightFuel.getFluid(5000))
             .duration(16 * TICKS)
             .eut(TierEU.RECIPE_MV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LightFuel, 5),
-                GT_Utility.getIntegratedCircuit(5))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.LightFuel, 5),
+                GTUtility.getIntegratedCircuit(5))
             .itemOutputs(Materials.Empty.getCells(5))
             .fluidInputs(Materials.HeavyFuel.getFluid(1000))
             .fluidOutputs(Materials.Fuel.getFluid(6000))
@@ -634,10 +632,10 @@ public class MixerRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HeavyFuel, 1),
-                GT_Utility.getIntegratedCircuit(6))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.HeavyFuel, 1),
+                GTUtility.getIntegratedCircuit(6))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.LightFuel.getFluid(5000))
             .fluidOutputs(Materials.Fuel.getFluid(6000))
@@ -645,10 +643,10 @@ public class MixerRecipes implements Runnable {
             .eut(TierEU.RECIPE_MV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 5),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.Water, 5),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1))
             .itemOutputs(Materials.Empty.getCells(5))
             .fluidInputs(Materials.Lubricant.getFluid(20))
             .fluidOutputs(new FluidStack(ItemList.sDrillingFluid, 5000))
@@ -656,56 +654,56 @@ public class MixerRecipes implements Runnable {
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lapis, 1),
-                GT_Utility.getIntegratedCircuit(4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lapis, 1),
+                GTUtility.getIntegratedCircuit(4))
             .fluidInputs(Materials.Water.getFluid(125))
             .fluidOutputs(getFluidStack("ic2coolant", 125))
             .duration(12 * SECONDS + 16 * TICKS)
             .eut(48)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lapis, 1),
-                GT_Utility.getIntegratedCircuit(4))
-            .fluidInputs(GT_ModHandler.getDistilledWater(1000))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lapis, 1),
+                GTUtility.getIntegratedCircuit(4))
+            .fluidInputs(GTModHandler.getDistilledWater(1000))
             .fluidOutputs(getFluidStack("ic2coolant", 1000))
             .duration(12 * SECONDS + 16 * TICKS)
             .eut(48)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.SFMixture.get(4))
             .fluidInputs(Materials.AdvancedGlue.getFluid(200))
             .duration(40 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.SFMixture.get(8))
             .fluidInputs(Materials.AdvancedGlue.getFluid(200))
             .duration(40 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Caesium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Caesium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.SFMixture.get(12))
             .fluidInputs(Materials.AdvancedGlue.getFluid(200))
             .duration(40 * SECONDS)
@@ -714,124 +712,124 @@ public class MixerRecipes implements Runnable {
 
         // McGuffium239 is non-renewable and only obtainable though world gen.
         // It's a meme, don't think too deep about it.
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sodium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.SFMixture.get(64))
             .fluidInputs(Materials.McGuffium239.getFluid(12))
             .duration(20 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.SFMixture.get(64))
             .fluidInputs(Materials.McGuffium239.getFluid(8))
             .duration(20 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Caesium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Caesium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.SFMixture.get(64))
             .fluidInputs(Materials.McGuffium239.getFluid(4))
             .duration(20 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.SFMixture.get(2), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.EnderEye, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.SFMixture.get(2), GTOreDictUnificator.get(OrePrefixes.dust, Materials.EnderEye, 1))
             .itemOutputs(ItemList.MSFMixture.get(4))
             .fluidInputs(Materials.Mercury.getFluid(1000))
             .duration(15 * SECONDS)
             .eut(64)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(ItemList.SFMixture.get(1), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(ItemList.SFMixture.get(1), GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1))
             .itemOutputs(ItemList.MSFMixture.get(1))
             .fluidInputs(Materials.Mercury.getFluid(500))
             .duration(15 * SECONDS)
             .eut(64)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 4),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 4),
                 ItemList.MSFMixture.get(24),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_MSSFUEL.get(4))
             .fluidInputs(Materials.NitroFuel.getFluid(4000))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 4),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 4),
                 ItemList.MSFMixture.get(16),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_MSSFUEL.get(4))
             .fluidInputs(Materials.NitroFuel.getFluid(3000))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Coal, 4),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Coal, 4),
                 ItemList.MSFMixture.get(8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_MSSFUEL.get(4))
             .fluidInputs(Materials.NitroFuel.getFluid(2000))
             .duration(10 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 4),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 4),
                 ItemList.MSFMixture.get(24),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_MSSFUEL.get(4))
             .fluidInputs(Materials.GasolinePremium.getFluid(1600))
             .duration(20 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 4),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 4),
                 ItemList.MSFMixture.get(16),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_MSSFUEL.get(4))
             .fluidInputs(Materials.GasolinePremium.getFluid(1200))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Coal, 4),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Coal, 4),
                 ItemList.MSFMixture.get(8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_MSSFUEL.get(4))
             .fluidInputs(Materials.GasolinePremium.getFluid(800))
             .duration(10 * SECONDS)
@@ -839,66 +837,66 @@ public class MixerRecipes implements Runnable {
             .addTo(mixerRecipes);
 
         if (Thaumcraft.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.SFMixture.get(20),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedAir, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedAir, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.MSFMixture.get(20))
                 .fluidInputs(Materials.FierySteel.getFluid(50))
                 .duration(10 * SECONDS)
                 .eut(64)
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.SFMixture.get(20),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedEarth, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedEarth, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.MSFMixture.get(20))
                 .fluidInputs(Materials.FierySteel.getFluid(50))
                 .duration(10 * SECONDS)
                 .eut(64)
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.SFMixture.get(20),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedEntropy, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedEntropy, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.MSFMixture.get(20))
                 .fluidInputs(Materials.FierySteel.getFluid(50))
                 .duration(10 * SECONDS)
                 .eut(64)
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.SFMixture.get(20),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedFire, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedFire, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.MSFMixture.get(20))
                 .fluidInputs(Materials.FierySteel.getFluid(50))
                 .duration(10 * SECONDS)
                 .eut(64)
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.SFMixture.get(20),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedOrder, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedOrder, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.MSFMixture.get(20))
                 .fluidInputs(Materials.FierySteel.getFluid(50))
                 .duration(10 * SECONDS)
                 .eut(64)
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     ItemList.SFMixture.get(20),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedWater, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedWater, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.MSFMixture.get(20))
                 .fluidInputs(Materials.FierySteel.getFluid(50))
                 .duration(10 * SECONDS)
@@ -907,138 +905,138 @@ public class MixerRecipes implements Runnable {
 
             FluidStack tFD = getFluidStack("fluiddeath", 30);
             if (tFD != null && tFD.getFluid() != null && tFD.amount > 0) {
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         ItemList.SFMixture.get(30),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedAir, 1),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedAir, 1),
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.MSFMixture.get(30))
                     .fluidInputs(tFD)
                     .duration(10 * SECONDS)
                     .eut(64)
                     .addTo(mixerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         ItemList.SFMixture.get(30),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedEarth, 1),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedEarth, 1),
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.MSFMixture.get(30))
                     .fluidInputs(tFD)
                     .duration(10 * SECONDS)
                     .eut(64)
                     .addTo(mixerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         ItemList.SFMixture.get(30),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedEntropy, 1),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedEntropy, 1),
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.MSFMixture.get(30))
                     .fluidInputs(tFD)
                     .duration(10 * SECONDS)
                     .eut(64)
                     .addTo(mixerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         ItemList.SFMixture.get(30),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedFire, 1),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedFire, 1),
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.MSFMixture.get(30))
                     .fluidInputs(tFD)
                     .duration(10 * SECONDS)
                     .eut(64)
                     .addTo(mixerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         ItemList.SFMixture.get(30),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedOrder, 1),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedOrder, 1),
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.MSFMixture.get(30))
                     .fluidInputs(tFD)
                     .duration(10 * SECONDS)
                     .eut(64)
                     .addTo(mixerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
                         ItemList.SFMixture.get(30),
-                        GT_OreDictUnificator.get(OrePrefixes.dust, Materials.InfusedWater, 1),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTOreDictUnificator.get(OrePrefixes.dust, Materials.InfusedWater, 1),
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.MSFMixture.get(30))
                     .fluidInputs(tFD)
                     .duration(10 * SECONDS)
                     .eut(64)
                     .addTo(mixerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 1),
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 1),
                         ItemList.MSFMixture.get(6),
                         getModItem(Thaumcraft.ID, "ItemResource", 4),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.Block_MSSFUEL.get(1))
                     .fluidInputs(Materials.NitroFuel.getFluid(1000))
                     .duration(7 * SECONDS)
                     .eut(TierEU.RECIPE_HV)
                     .addTo(mixerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 1),
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 1),
                         ItemList.MSFMixture.get(4),
                         getModItem(Thaumcraft.ID, "ItemResource", 4),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.Block_MSSFUEL.get(1))
                     .fluidInputs(Materials.NitroFuel.getFluid(750))
                     .duration(6 * SECONDS)
                     .eut(TierEU.RECIPE_HV)
                     .addTo(mixerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.Coal, 1),
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.Coal, 1),
                         ItemList.MSFMixture.get(2),
                         getModItem(Thaumcraft.ID, "ItemResource", 4),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.Block_MSSFUEL.get(1))
                     .fluidInputs(Materials.NitroFuel.getFluid(500))
                     .duration(5 * SECONDS)
                     .eut(TierEU.RECIPE_HV)
                     .addTo(mixerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 1),
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 1),
                         ItemList.MSFMixture.get(6),
                         getModItem(Thaumcraft.ID, "ItemResource", 4),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.Block_MSSFUEL.get(1))
                     .fluidInputs(Materials.GasolinePremium.getFluid(400))
                     .duration(7 * SECONDS)
                     .eut(TierEU.RECIPE_HV)
                     .addTo(mixerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 1),
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 1),
                         ItemList.MSFMixture.get(4),
                         getModItem(Thaumcraft.ID, "ItemResource", 4),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.Block_MSSFUEL.get(1))
                     .fluidInputs(Materials.GasolinePremium.getFluid(300))
                     .duration(6 * SECONDS)
                     .eut(TierEU.RECIPE_HV)
                     .addTo(mixerRecipes);
 
-                GT_Values.RA.stdBuilder()
+                GTValues.RA.stdBuilder()
                     .itemInputs(
-                        GT_OreDictUnificator.get(OrePrefixes.block, Materials.Coal, 1),
+                        GTOreDictUnificator.get(OrePrefixes.block, Materials.Coal, 1),
                         ItemList.MSFMixture.get(2),
                         getModItem(Thaumcraft.ID, "ItemResource", 4),
-                        GT_Utility.getIntegratedCircuit(1))
+                        GTUtility.getIntegratedCircuit(1))
                     .itemOutputs(ItemList.Block_MSSFUEL.get(1))
                     .fluidInputs(Materials.GasolinePremium.getFluid(200))
                     .duration(5 * SECONDS)
@@ -1047,76 +1045,76 @@ public class MixerRecipes implements Runnable {
             }
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 1),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 1),
                 ItemList.SFMixture.get(6),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_SSFUEL.get(1))
             .fluidInputs(Materials.NitroFuel.getFluid(1000))
             .duration(7 * SECONDS)
             .eut(250)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 1),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 1),
                 ItemList.SFMixture.get(4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_SSFUEL.get(1))
             .fluidInputs(Materials.NitroFuel.getFluid(750))
             .duration(6 * SECONDS)
             .eut(250)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Coal, 1),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Coal, 1),
                 ItemList.SFMixture.get(2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_SSFUEL.get(1))
             .fluidInputs(Materials.NitroFuel.getFluid(500))
             .duration(5 * SECONDS)
             .eut(250)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 1),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Lignite, 1),
                 ItemList.SFMixture.get(6),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_SSFUEL.get(1))
             .fluidInputs(Materials.GasolinePremium.getFluid(400))
             .duration(7 * SECONDS)
             .eut(250)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 1),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Charcoal, 1),
                 ItemList.SFMixture.get(4),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_SSFUEL.get(1))
             .fluidInputs(Materials.GasolinePremium.getFluid(300))
             .duration(6 * SECONDS)
             .eut(250)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.block, Materials.Coal, 1),
+                GTOreDictUnificator.get(OrePrefixes.block, Materials.Coal, 1),
                 ItemList.SFMixture.get(2),
-                GT_Utility.getIntegratedCircuit(1))
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Block_SSFUEL.get(1))
             .fluidInputs(Materials.GasolinePremium.getFluid(200))
             .duration(5 * SECONDS)
             .eut(250)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricAcid, 1),
-                GT_Utility.getIntegratedCircuit(1))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricAcid, 1),
+                GTUtility.getIntegratedCircuit(1))
             .itemOutputs(ItemList.Cell_Empty.get(1))
             .fluidInputs(Materials.NitricAcid.getFluid(1000))
             .fluidOutputs(new FluidStack(ItemList.sNitrationMixture, 2000))
@@ -1124,164 +1122,164 @@ public class MixerRecipes implements Runnable {
             .eut(2)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricAcid, 1),
-                GT_OreDictUnificator.get(OrePrefixes.cell, Materials.NitricAcid, 1),
-                GT_Utility.getIntegratedCircuit(1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.NitrationMixture, 2))
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricAcid, 1),
+                GTOreDictUnificator.get(OrePrefixes.cell, Materials.NitricAcid, 1),
+                GTUtility.getIntegratedCircuit(1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.NitrationMixture, 2))
             .duration(24 * SECONDS)
             .eut(2)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 32767),
                 new ItemStack(Items.wheat, 4, 32767),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 2),
                 new ItemStack(Items.wheat, 4, 32767),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 32767),
                 getModItem(BiomesOPlenty.ID, "plants", 4, 6),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 2),
                 getModItem(BiomesOPlenty.ID, "plants", 4, 6),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 32767),
                 getModItem(PamsHarvestCraft.ID, "oatsItem", 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 2),
                 getModItem(PamsHarvestCraft.ID, "oatsItem", 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 32767),
                 getModItem(PamsHarvestCraft.ID, "ryeItem", 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 2),
                 getModItem(PamsHarvestCraft.ID, "ryeItem", 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 32767),
                 getModItem(PamsHarvestCraft.ID, "barleyItem", 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 2),
                 getModItem(PamsHarvestCraft.ID, "barleyItem", 4, 6),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 32767),
                 getModItem(Natura.ID, "barleyFood", 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 2),
                 getModItem(Natura.ID, "barleyFood", 4),
-                GT_Utility.getIntegratedCircuit(2))
+                GTUtility.getIntegratedCircuit(2))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 32767),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 4),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 4),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(Blocks.dirt, 1, 2),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 4),
-                GT_Utility.getIntegratedCircuit(3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 4),
+                GTUtility.getIntegratedCircuit(3))
             .itemOutputs(getModItem(Forestry.ID, "fertilizerBio", 1L, 0))
             .fluidInputs(Materials.Water.getFluid(100))
             .duration(10 * SECONDS)
@@ -1290,15 +1288,15 @@ public class MixerRecipes implements Runnable {
 
         // radiation manufacturing
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("fuelRod", 1), new ItemStack(Items.glowstone_dust, 9))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("fuelRod", 1), new ItemStack(Items.glowstone_dust, 9))
             .itemOutputs(ItemList.GlowstoneCell.get(1))
             .fluidInputs(Materials.Helium.getGas(250))
             .duration(1 * SECONDS + 10 * TICKS)
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(MaterialsOreAlum.SluiceSand.getDust(1))
             .fluidInputs(Materials.Water.getFluid(500))
             .fluidOutputs(MaterialsOreAlum.SluiceJuice.getFluid(1000))
@@ -1308,8 +1306,8 @@ public class MixerRecipes implements Runnable {
 
         // NaCl + H2O = (NaCl·H2O)
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Salt.getDust(2), GT_Utility.getIntegratedCircuit(3))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Salt.getDust(2), GTUtility.getIntegratedCircuit(3))
             .fluidInputs(Materials.Water.getFluid(1000))
             .fluidOutputs(Materials.SaltWater.getFluid(1000))
             .duration(5 * SECONDS)
@@ -1318,8 +1316,8 @@ public class MixerRecipes implements Runnable {
 
         // CaCO3 + 2 CH3COOH = Ca(CH3COO)2 + H2O + CO2
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1), Materials.CarbonDioxide.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(Materials.CalciumAcetateSolution.getFluid(1000))
@@ -1327,8 +1325,8 @@ public class MixerRecipes implements Runnable {
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(2), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(2), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.CalciumAcetateSolution.getCells(1), Materials.CarbonDioxide.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -1336,8 +1334,8 @@ public class MixerRecipes implements Runnable {
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(2), GT_Utility.getIntegratedCircuit(21))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(2), GTUtility.getIntegratedCircuit(21))
             .itemOutputs(Materials.Water.getCells(1), Materials.CalciumAcetateSolution.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(1000))
@@ -1345,8 +1343,8 @@ public class MixerRecipes implements Runnable {
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(1), GT_Utility.getIntegratedCircuit(4))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(1), GTUtility.getIntegratedCircuit(4))
             .itemOutputs(Materials.CarbonDioxide.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(Materials.CalciumAcetateSolution.getFluid(1000))
@@ -1354,8 +1352,8 @@ public class MixerRecipes implements Runnable {
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(1), GT_Utility.getIntegratedCircuit(14))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(1), GTUtility.getIntegratedCircuit(14))
             .itemOutputs(Materials.CalciumAcetateSolution.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(Materials.CarbonDioxide.getGas(1000))
@@ -1365,8 +1363,8 @@ public class MixerRecipes implements Runnable {
 
         // Ca + 2 CH3COOH = Ca(CH3COO)2 + 2H
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Calcium.getDust(1), Materials.Empty.getCells(2), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Calcium.getDust(1), Materials.Empty.getCells(2), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Hydrogen.getCells(2))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(Materials.CalciumAcetateSolution.getFluid(1000))
@@ -1374,8 +1372,8 @@ public class MixerRecipes implements Runnable {
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Calcium.getDust(1), Materials.Empty.getCells(1), GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Calcium.getDust(1), Materials.Empty.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.CalciumAcetateSolution.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(Materials.Hydrogen.getGas(2000))
@@ -1385,8 +1383,8 @@ public class MixerRecipes implements Runnable {
 
         // CaO + 2 CH3COOH = Ca(CH3COO)2 + H2O
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Quicklime.getDust(2), Materials.Empty.getCells(1), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Quicklime.getDust(2), Materials.Empty.getCells(1), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Water.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(Materials.CalciumAcetateSolution.getFluid(1000))
@@ -1394,11 +1392,8 @@ public class MixerRecipes implements Runnable {
             .eut(16)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(
-                Materials.Quicklime.getDust(2),
-                Materials.Empty.getCells(1),
-                GT_Utility.getIntegratedCircuit(11))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Quicklime.getDust(2), Materials.Empty.getCells(1), GTUtility.getIntegratedCircuit(11))
             .itemOutputs(Materials.CalciumAcetateSolution.getCells(1))
             .fluidInputs(Materials.AceticAcid.getFluid(2000))
             .fluidOutputs(Materials.Water.getFluid(1000))
@@ -1408,7 +1403,7 @@ public class MixerRecipes implements Runnable {
 
         // 2CH3COOCH3 + 3CH3COCH3/(C4H6O2)n = 5Glue
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Acetone.getCells(3))
             .itemOutputs(Materials.Empty.getCells(3))
             .fluidInputs(Materials.PolyvinylAcetate.getFluid(2000))
@@ -1417,7 +1412,7 @@ public class MixerRecipes implements Runnable {
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.PolyvinylAcetate.getCells(2))
             .itemOutputs(Materials.Empty.getCells(2))
             .fluidInputs(Materials.Acetone.getFluid(3000))
@@ -1426,7 +1421,7 @@ public class MixerRecipes implements Runnable {
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.MethylAcetate.getCells(3))
             .itemOutputs(Materials.Empty.getCells(3))
             .fluidInputs(Materials.PolyvinylAcetate.getFluid(2000))
@@ -1435,7 +1430,7 @@ public class MixerRecipes implements Runnable {
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.PolyvinylAcetate.getCells(2))
             .itemOutputs(Materials.Empty.getCells(2))
             .fluidInputs(Materials.MethylAcetate.getFluid(3000))
@@ -1444,7 +1439,7 @@ public class MixerRecipes implements Runnable {
             .eut(8)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Sugar.getDust(4))
             .itemOutputs(Materials.Charcoal.getGems(1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
@@ -1453,7 +1448,7 @@ public class MixerRecipes implements Runnable {
             .eut(2)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Wood.getDust(4))
             .itemOutputs(Materials.Charcoal.getGems(1))
             .fluidInputs(Materials.SulfuricAcid.getFluid(1000))
@@ -1462,7 +1457,7 @@ public class MixerRecipes implements Runnable {
             .eut(2)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Fuel.getCells(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Tetranitromethane.getFluid(20))
@@ -1471,7 +1466,7 @@ public class MixerRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.BioDiesel.getCells(1))
             .itemOutputs(Materials.Empty.getCells(1))
             .fluidInputs(Materials.Tetranitromethane.getFluid(40))
@@ -1482,21 +1477,21 @@ public class MixerRecipes implements Runnable {
 
         // CH4O + C4H8 = C5H12O
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Methanol.getCells(1), Materials.Butene.getCells(1))
             .itemOutputs(Materials.MTBEMixture.getCells(1), Materials.Empty.getCells(1))
             .duration(20 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Methanol.getCells(1), Materials.Butane.getCells(1))
             .itemOutputs(Materials.MTBEMixtureAlt.getCells(1), Materials.Empty.getCells(1))
             .duration(20 * TICKS)
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 Materials.Naphtha.getCells(16),
                 Materials.Gas.getCells(2),
@@ -1507,7 +1502,7 @@ public class MixerRecipes implements Runnable {
             .eut(TierEU.RECIPE_HV)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 Materials.GasolineRegular.getCells(20),
                 Materials.Octane.getCells(2),
@@ -1521,46 +1516,40 @@ public class MixerRecipes implements Runnable {
             .addTo(mixerRecipes);
 
         if (Railcraft.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    EnumCube.COKE_BLOCK.getItem(),
-                    ItemList.SFMixture.get(2),
-                    GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(EnumCube.COKE_BLOCK.getItem(), ItemList.SFMixture.get(2), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Block_SSFUEL.get(1))
                 .fluidInputs(Materials.NitroFuel.getFluid(300))
                 .duration(5 * SECONDS)
                 .eut(250)
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     EnumCube.COKE_BLOCK.getItem(4),
                     ItemList.SFMixture.get(8),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Block_SSFUEL.get(4))
                 .fluidInputs(Materials.GasolinePremium.getFluid(480))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     EnumCube.COKE_BLOCK.getItem(4),
                     ItemList.SFMixture.get(8),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Diamond, 1),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Block_SSFUEL.get(4))
                 .fluidInputs(Materials.NitroFuel.getFluid(1200))
                 .duration(10 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(
-                    EnumCube.COKE_BLOCK.getItem(),
-                    ItemList.SFMixture.get(2),
-                    GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(EnumCube.COKE_BLOCK.getItem(), ItemList.SFMixture.get(2), GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Block_SSFUEL.get(1))
                 .fluidInputs(Materials.GasolinePremium.getFluid(120))
                 .duration(5 * SECONDS)
@@ -1569,24 +1558,24 @@ public class MixerRecipes implements Runnable {
         }
 
         if (Thaumcraft.isModLoaded() && Railcraft.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     EnumCube.COKE_BLOCK.getItem(),
                     ItemList.MSFMixture.get(2),
                     getModItem(Thaumcraft.ID, "ItemResource", 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Block_MSSFUEL.get(1))
                 .fluidInputs(Materials.NitroFuel.getFluid(300))
                 .duration(5 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
                     EnumCube.COKE_BLOCK.getItem(),
                     ItemList.MSFMixture.get(2),
                     getModItem(Thaumcraft.ID, "ItemResource", 4),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(ItemList.Block_MSSFUEL.get(1))
                 .fluidInputs(Materials.GasolinePremium.getFluid(120))
                 .duration(5 * SECONDS)
@@ -1604,24 +1593,24 @@ public class MixerRecipes implements Runnable {
         boolean splashLong = !(FluidRegistry.getFluid("potion." + aName + ".long") == null
             || FluidRegistry.getFluid("potion." + aName + ".long.splash") == null);
 
-        if (splash) GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1))
+        if (splash) GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("potion." + aName), 750))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("potion." + aName + ".splash"), 750))
             .duration(10 * SECONDS)
             .eut(24)
             .addTo(mixerRecipes);
 
-        if (splashStrong) GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1))
+        if (splashStrong) GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("potion." + aName + ".strong"), 750))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("potion." + aName + ".strong.splash"), 750))
             .duration(10 * SECONDS)
             .eut(24)
             .addTo(mixerRecipes);
 
-        if (splashLong) GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1))
+        if (splashLong) GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gunpowder, 1))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("potion." + aName + ".long"), 750))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("potion." + aName + ".long.splash"), 750))
             .duration(10 * SECONDS)
@@ -1630,11 +1619,11 @@ public class MixerRecipes implements Runnable {
     }
 
     public void registerSingleBlockAndMulti() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 Materials.NaquadahEnriched.getDust(8),
                 Materials.Holmium.getDust(2),
-                GT_Utility.getIntegratedCircuit(4))
+                GTUtility.getIntegratedCircuit(4))
             .itemOutputs(Materials.EnrichedHolmium.getDust(10))
             .duration(30 * SECONDS)
             .eut(TierEU.RECIPE_ZPM)
@@ -1642,8 +1631,8 @@ public class MixerRecipes implements Runnable {
 
         // Catalysts for Plasma Forge.
         {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.getIntegratedCircuit(9))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.getIntegratedCircuit(9))
                 .fluidInputs(
                     Materials.Helium.getPlasma(1000L),
                     Materials.Iron.getPlasma(1000L),
@@ -1655,8 +1644,8 @@ public class MixerRecipes implements Runnable {
                 .noOptimize()
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.getIntegratedCircuit(10))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.getIntegratedCircuit(10))
                 .fluidInputs(
                     MaterialsUEVplus.DimensionallyTranscendentCrudeCatalyst.getFluid(1000L),
                     Materials.Radon.getPlasma(1000L),
@@ -1669,8 +1658,8 @@ public class MixerRecipes implements Runnable {
                 .noOptimize()
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.getIntegratedCircuit(11))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.getIntegratedCircuit(11))
                 .fluidInputs(
                     MaterialsUEVplus.DimensionallyTranscendentProsaicCatalyst.getFluid(1000L),
                     Materials.Nitrogen.getPlasma(1000L),
@@ -1683,8 +1672,8 @@ public class MixerRecipes implements Runnable {
                 .noOptimize()
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.getIntegratedCircuit(12))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.getIntegratedCircuit(12))
                 .fluidInputs(
                     MaterialsUEVplus.DimensionallyTranscendentResplendentCatalyst.getFluid(1000L),
                     Materials.Americium.getPlasma(1000L),
@@ -1697,8 +1686,8 @@ public class MixerRecipes implements Runnable {
                 .noOptimize()
                 .addTo(mixerRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(GT_Utility.getIntegratedCircuit(13))
+            GTValues.RA.stdBuilder()
+                .itemInputs(GTUtility.getIntegratedCircuit(13))
                 .fluidInputs(
                     MaterialsUEVplus.DimensionallyTranscendentExoticCatalyst.getFluid(1000L),
                     Materials.Lead.getPlasma(1000),
@@ -1712,7 +1701,7 @@ public class MixerRecipes implements Runnable {
                 .addTo(mixerRecipes);
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.IC2_Spray_WeedEx.get(1))
             .fluidInputs(MaterialsKevlar.NaphthenicAcid.getFluid(10))
             .fluidOutputs(Materials.WeedEX9000.getFluid(750))
@@ -1720,15 +1709,15 @@ public class MixerRecipes implements Runnable {
             .eut(100)
             .addTo(mixerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 Materials.Tritanium.getDust(11),
-                MyMaterial.orundum.get(OrePrefixes.dust, 8),
+                GGMaterial.orundum.get(OrePrefixes.dust, 8),
                 Materials.Rubidium.getDust(11),
                 Materials.FierySteel.getDust(7),
                 Materials.Firestone.getDust(13),
-                MyMaterial.atomicSeparationCatalyst.get(OrePrefixes.dust, 13),
-                GT_Utility.getIntegratedCircuit(6))
+                GGMaterial.atomicSeparationCatalyst.get(OrePrefixes.dust, 13),
+                GTUtility.getIntegratedCircuit(6))
             .itemOutputs(MaterialsUEVplus.Mellion.getDust(63))
             .fluidInputs(MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(5000))
             .duration(15 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/NEIHiding.java b/src/main/java/gregtech/loaders/postload/recipes/NEIHiding.java
index dad2388ae6..27c3004d7b 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/NEIHiding.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/NEIHiding.java
@@ -7,7 +7,7 @@ import net.minecraft.item.ItemStack;
 
 import codechicken.nei.api.API;
 import gregtech.api.enums.ItemList;
-import gregtech.common.items.GT_MetaGenerated_Item_03;
+import gregtech.common.items.MetaGeneratedItem03;
 
 public class NEIHiding implements Runnable {
 
@@ -18,7 +18,7 @@ public class NEIHiding implements Runnable {
         }
 
         for (int i = 0; i < 16; i++) {
-            API.hideItem(new ItemStack(GT_MetaGenerated_Item_03.INSTANCE, 1, i));
+            API.hideItem(new ItemStack(MetaGeneratedItem03.INSTANCE, 1, i));
         }
 
         if (Forestry.isModLoaded()) {
diff --git a/src/main/java/gregtech/loaders/postload/recipes/OreDictUnification.java b/src/main/java/gregtech/loaders/postload/recipes/OreDictUnification.java
index f8c816dc5c..4f6ab13116 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/OreDictUnification.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/OreDictUnification.java
@@ -1,18 +1,18 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.enums.Mods.HardcoreEnderExpansion;
-import static gregtech.api.util.GT_ModHandler.getModItem;
+import static gregtech.api.util.GTModHandler.getModItem;
 
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class OreDictUnification implements Runnable {
 
     @Override
     public void run() {
         if (HardcoreEnderExpansion.isModLoaded()) {
-            GT_OreDictUnificator.set(
+            GTOreDictUnificator.set(
                 OrePrefixes.ingot,
                 Materials.HeeEndium,
                 getModItem(HardcoreEnderExpansion.ID, "endium_ingot", 1),
diff --git a/src/main/java/gregtech/loaders/postload/recipes/PackagerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/PackagerRecipes.java
index 4ff99582c2..a86266029b 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/PackagerRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/PackagerRecipes.java
@@ -1,64 +1,64 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.packagerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class PackagerRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Tool_Matches.get(16L),
-                GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Paper, 1L))
+                GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Paper, 1L))
             .itemOutputs(ItemList.Tool_MatchBox_Full.get(1L))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(16)
             .addTo(packagerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Tool_MatchBox_Full.get(1L))
             .itemOutputs(ItemList.Tool_Matches.get(16L))
             .duration(1 * SECONDS + 12 * TICKS)
             .eut(16)
             .addTo(packagerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.IC2_Scrap.get(9), ItemList.Schematic_3by3.get(0))
             .itemOutputs(ItemList.IC2_Scrapbox.get(1))
             .duration(16 * TICKS)
             .eut(1)
             .addTo(packagerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Food_Fries.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Paper, 1))
+                GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Paper, 1))
             .itemOutputs(ItemList.Food_Packaged_Fries.get(1))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(16)
             .addTo(packagerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Food_PotatoChips.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1))
+                GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1))
             .itemOutputs(ItemList.Food_Packaged_PotatoChips.get(1))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(16)
             .addTo(packagerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Food_ChiliChips.get(1),
-                GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1))
+                GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 1))
             .itemOutputs(ItemList.Food_Packaged_ChiliChips.get(1))
             .duration(3 * SECONDS + 4 * TICKS)
             .eut(16)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java
index e648205b7a..ea3c5ff7d1 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/PlasmaForgeRecipes.java
@@ -4,19 +4,19 @@ import static goodgenerator.loader.Loaders.huiCircuit;
 import static gregtech.api.enums.Mods.Avaritia;
 import static gregtech.api.enums.Mods.NewHorizonsCoreMod;
 import static gregtech.api.recipe.RecipeMaps.plasmaForgeRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeConstants.COIL_HEAT;
 
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.MaterialsUEVplus;
 import gregtech.api.enums.TierEU;
 import gtPlusPlus.core.item.ModItems;
-import gtPlusPlus.core.material.ELEMENT;
+import gtPlusPlus.core.material.MaterialsElements;
 import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList;
 
 public class PlasmaForgeRecipes implements Runnable {
@@ -24,7 +24,7 @@ public class PlasmaForgeRecipes implements Runnable {
     @Override
     public void run() {
         // Giga chad trophy.
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 ItemList.Field_Generator_UEV.get(64),
                 ItemList.Field_Generator_UIV.get(64),
@@ -39,7 +39,7 @@ public class PlasmaForgeRecipes implements Runnable {
             .addTo(plasmaForgeRecipes);
 
         // Quantum anomaly recipe bypass for UEV+. Avoids RNG.
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(
                 new ItemStack(ModItems.itemStandarParticleBase, 1, 24),
                 getModItem(NewHorizonsCoreMod.ID, "item.ChromaticLens", 0),
@@ -54,14 +54,14 @@ public class PlasmaForgeRecipes implements Runnable {
 
         if (Avaritia.isModLoaded()) {
             // Six-Phased Copper
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Avaritia.ID, "Singularity", 8, 5))
                 .fluidInputs(
-                    ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getFluidStack(72 * 144),
-                    ELEMENT.STANDALONE.ASTRAL_TITANIUM.getFluidStack(4 * 72 * 144),
-                    ELEMENT.STANDALONE.HYPOGEN.getFluidStack(36 * 144),
-                    ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getFluidStack(8 * 72 * 144),
-                    ELEMENT.STANDALONE.RHUGNOR.getFluidStack(18 * 144),
+                    MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getFluidStack(72 * 144),
+                    MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getFluidStack(4 * 72 * 144),
+                    MaterialsElements.STANDALONE.HYPOGEN.getFluidStack(36 * 144),
+                    MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getFluidStack(8 * 72 * 144),
+                    MaterialsElements.STANDALONE.RHUGNOR.getFluidStack(18 * 144),
                     MaterialsUEVplus.Mellion.getMolten(72 * 144))
                 .fluidOutputs(MaterialsUEVplus.SixPhasedCopper.getMolten(72 * 144L))
                 .duration(60 * SECONDS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/PrinterRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/PrinterRecipes.java
index e700ee0730..ddf37cd242 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/PrinterRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/PrinterRecipes.java
@@ -1,32 +1,32 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.printerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 import static net.minecraftforge.fluids.FluidRegistry.getFluidStack;
 
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 
 public class PrinterRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Paper, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Paper, 1L))
             .itemOutputs(ItemList.Paper_Punch_Card_Empty.get(1L))
             .fluidInputs(getFluidStack("squidink", 36))
             .duration(5 * SECONDS)
             .eut(2)
             .addTo(printerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Paper_Punch_Card_Empty.get(1L))
             .special(ItemList.Tool_DataStick.getWithName(0L, "With Punch Card Data"))
             .itemOutputs(ItemList.Paper_Punch_Card_Encoded.get(1L))
@@ -35,8 +35,8 @@ public class PrinterRecipes implements Runnable {
             .eut(2)
             .addTo(printerRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 3L))
             .special(ItemList.Tool_DataStick.getWithName(0L, "With Scanned Book Data"))
             .itemOutputs(ItemList.Paper_Printed_Pages.get(1L))
             .fluidInputs(getFluidStack("squidink", 144))
@@ -44,7 +44,7 @@ public class PrinterRecipes implements Runnable {
             .eut(2)
             .addTo(printerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.map, 1, 32767))
             .special(ItemList.Tool_DataStick.getWithName(0L, "With Scanned Map Data"))
             .itemOutputs(new ItemStack(Items.filled_map, 1, 0))
@@ -53,9 +53,9 @@ public class PrinterRecipes implements Runnable {
             .eut(2)
             .addTo(printerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.book, 1, 32767))
-            .itemOutputs(GT_Utility.getWrittenBook("Manual_Printer", ItemList.Book_Written_01.get(1L)))
+            .itemOutputs(GTUtility.getWrittenBook("Manual_Printer", ItemList.Book_Written_01.get(1L)))
             .fluidInputs(getFluidStack("squidink", 144))
             .duration(20 * SECONDS)
             .eut(2)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/Pulverizer.java b/src/main/java/gregtech/loaders/postload/recipes/Pulverizer.java
index 75a81448e0..1a9f82cb67 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/Pulverizer.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/Pulverizer.java
@@ -5,22 +5,22 @@ import static gregtech.api.enums.Mods.HardcoreEnderExpansion;
 import static gregtech.api.enums.Mods.Railcraft;
 import static gregtech.api.enums.Mods.Thaumcraft;
 import static gregtech.api.recipe.RecipeMaps.maceratorRecipes;
-import static gregtech.api.util.GT_ModHandler.getIC2Item;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTModHandler.getIC2Item;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
 import gregtech.api.enums.TierEU;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class Pulverizer implements Runnable {
 
@@ -28,167 +28,167 @@ public class Pulverizer implements Runnable {
     public void run() {
         // recycling Long Distance Pipes
         {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Long_Distance_Pipeline_Fluid.get(1))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 19))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 19))
                 .duration(15 * SECONDS)
                 .eut(4)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Long_Distance_Pipeline_Item.get(1))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 12),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 7))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 12),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 7))
                 .duration(15 * SECONDS)
                 .eut(4)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Long_Distance_Pipeline_Fluid_Pipe.get(1))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Steel, 2))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Steel, 2))
                 .duration(10 * TICKS)
                 .eut(4)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(ItemList.Long_Distance_Pipeline_Item_Pipe.get(1))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tin, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Steel, 1))
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Tin, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Steel, 1))
                 .duration(10 * TICKS)
                 .eut(4)
                 .addTo(maceratorRecipes);
         }
 
         // marbe dust( stone dust
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.block, Materials.Marble, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Marble, 1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.block, Materials.Marble, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Marble, 1))
             .duration(8 * SECONDS)
             .eut(4)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getModItem(Thaumcraft.ID, "ItemResource", 1, 18))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Gold, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Gold, 1))
             .duration(1 * SECONDS + 1 * TICKS)
             .eut(4)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.reeds, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sugar, 1))
             .duration(2 * SECONDS + 10 * TICKS)
             .eut(2)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_Cupronickel.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cupronickel, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 2))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cupronickel, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 2))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(80)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_Kanthal.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Kanthal, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cupronickel, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 3))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Kanthal, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cupronickel, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 3))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(80)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_Nichrome.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nichrome, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Kanthal, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 4))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nichrome, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Kanthal, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 4))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(80)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_TungstenSteel.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TPV, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nichrome, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 5))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.TPV, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nichrome, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 5))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(80)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_HSSG.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HSSG, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TPV, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 6))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.HSSG, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.TPV, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 6))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(80)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_HSSS.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HSSS, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HSSG, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 7))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.HSSS, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.HSSG, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 7))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(80)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_Naquadah.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.HSSS, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 8))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.HSSS, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 8))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(80)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_NaquadahAlloy.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahAlloy, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 9))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahAlloy, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 9))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(80)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_Trinium.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Trinium, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahAlloy, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 10))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Trinium, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahAlloy, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 10))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(80)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_ElectrumFlux.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.ElectrumFlux, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Trinium, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 11))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.ElectrumFlux, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Trinium, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 11))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(80)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Casing_Coil_AwakenedDraconium.get(1))
             .itemOutputs(
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 8),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.ElectrumFlux, 1),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 12))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 8),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.ElectrumFlux, 1),
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.QuartzSand, 12))
             .duration(1 * MINUTES + 15 * SECONDS)
             .eut(80)
             .addTo(maceratorRecipes);
@@ -197,284 +197,284 @@ public class Pulverizer implements Runnable {
             // recycling RC Tanks
             // Iron
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 0))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 2))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 2))
                 .duration(15 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 1))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
                 .duration(15 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 2))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 12),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Iron, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Bronze, 12),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Iron, 3))
                 .duration(15 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
 
             // Steel
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 13))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 2))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 2))
                 .duration(15 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 14))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
                 .duration(15 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.beta", 1L, 15))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 12),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Steel, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Steel, 12),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Steel, 3))
                 .duration(15 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
 
             // Aluminium
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 0))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 2))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 2))
                 .duration(22 * SECONDS + 10 * TICKS)
                 .eut(8)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 1))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
                 .duration(22 * SECONDS + 10 * TICKS)
                 .eut(8)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 2))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 12),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Aluminium, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plastic, 12),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Aluminium, 3))
                 .duration(22 * SECONDS + 10 * TICKS)
                 .eut(8)
                 .addTo(maceratorRecipes);
 
             // Stainless Steel
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 3))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.StainlessSteel, 2))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.StainlessSteel, 2))
                 .duration(30 * SECONDS)
                 .eut(16)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 4))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.StainlessSteel, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.StainlessSteel, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
                 .duration(30 * SECONDS)
                 .eut(16)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 5))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.StainlessSteel, 12),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.StainlessSteel, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.StainlessSteel, 12),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.StainlessSteel, 3))
                 .duration(30 * SECONDS)
                 .eut(16)
                 .addTo(maceratorRecipes);
 
             // Titanium
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 6))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 2))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 2))
                 .duration(30 * SECONDS)
                 .eut(30)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 7))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
                 .duration(30 * SECONDS)
                 .eut(30)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 8))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 12),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Titanium, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 12),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Titanium, 3))
                 .duration(30 * SECONDS)
                 .eut(30)
                 .addTo(maceratorRecipes);
 
             // Tungesten Steel
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 9))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 2))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 2))
                 .duration(30 * SECONDS)
                 .eut(30)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 10))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
                 .duration(30 * SECONDS)
                 .eut(30)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 11))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 12),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.TungstenSteel, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 12),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.TungstenSteel, 3))
                 .duration(30 * SECONDS)
                 .eut(30)
                 .addTo(maceratorRecipes);
 
             // Palladium
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 12))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 2))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 2))
                 .duration(37 * SECONDS + 10 * TICKS)
                 .eut(64)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 13))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
                 .duration(37 * SECONDS + 10 * TICKS)
                 .eut(64)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.zeta", 1L, 14))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NiobiumTitanium, 12),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Chrome, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.NiobiumTitanium, 12),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Chrome, 3))
                 .duration(37 * SECONDS + 10 * TICKS)
                 .eut(64)
                 .addTo(maceratorRecipes);
 
             // Iridium
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 0))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 2))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 2))
                 .duration(45 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 1))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
                 .duration(45 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 2))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Enderium, 12),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Iridium, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Enderium, 12),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Iridium, 3))
                 .duration(45 * SECONDS)
                 .eut(TierEU.RECIPE_MV)
                 .addTo(maceratorRecipes);
 
             // Osmium
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 3))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Osmium, 2))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Osmium, 2))
                 .duration(52 * SECONDS + 10 * TICKS)
                 .eut(256)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 4))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Osmium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Osmium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
                 .duration(52 * SECONDS + 10 * TICKS)
                 .eut(256)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 5))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 12),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Osmium, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 12),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Osmium, 3))
                 .duration(52 * SECONDS + 10 * TICKS)
                 .eut(256)
                 .addTo(maceratorRecipes);
 
             // Neutronium
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 6))
-                .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 2))
+                .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 2))
                 .duration(60 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 7))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 1),
-                    GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 1),
+                    GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Glass, 3))
                 .duration(60 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(Railcraft.ID, "machine.eta", 1L, 8))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 12),
-                    GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Neutronium, 3))
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Neutronium, 12),
+                    GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Neutronium, 3))
                 .duration(60 * SECONDS)
                 .eut(TierEU.RECIPE_HV)
                 .addTo(maceratorRecipes);
         }
 
         if (AppliedEnergistics2.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(AppliedEnergistics2.ID, "tile.BlockSkyStone", 1L, 32767))
                 .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 45))
                 .duration(20 * SECONDS)
                 .eut(2)
                 .addTo(maceratorRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(AppliedEnergistics2.ID, "tile.BlockSkyChest", 1L, 32767))
                 .itemOutputs(getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 8L, 45))
                 .duration(20 * SECONDS)
@@ -482,7 +482,7 @@ public class Pulverizer implements Runnable {
                 .addTo(maceratorRecipes);
         }
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.blaze_rod, 1))
             .itemOutputs(new ItemStack(Items.blaze_powder, 3), new ItemStack(Items.blaze_powder, 1))
             .outputChances(10000, 5000)
@@ -490,7 +490,7 @@ public class Pulverizer implements Runnable {
             .eut(2)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.web, 1, 0))
             .itemOutputs(new ItemStack(Items.string, 1), new ItemStack(Items.string, 1))
             .outputChances(10000, 5000)
@@ -498,90 +498,90 @@ public class Pulverizer implements Runnable {
             .eut(2)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.red_mushroom, 1, 32767))
             .itemOutputs(ItemList.IC2_Grin_Powder.get(1L))
             .duration(20 * SECONDS)
             .eut(2)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.poisonous_potato, 1))
             .itemOutputs(ItemList.IC2_Grin_Powder.get(1L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.spider_eye, 1))
             .itemOutputs(ItemList.IC2_Grin_Powder.get(1L))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.bone, 1))
             .itemOutputs(new ItemStack(Items.dye, 4, 15))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.IC2_EnergyCrystal.get(1))
             .itemOutputs(getIC2Item("energiumDust", 9))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(getIC2Item("biochaff", 1))
             .itemOutputs(new ItemStack(Blocks.dirt, 1))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.quartz_stairs, 1))
-            .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 6))
+            .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.NetherQuartz, 6))
             .duration(15 * SECONDS)
             .eut(TierEU.RECIPE_LV)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.item_frame, 1, 32767))
             .itemOutputs(
                 new ItemStack(Items.leather, 1),
-                GT_OreDictUnificator.getDust(Materials.Wood, OrePrefixes.stick.mMaterialAmount * 4L))
+                GTOreDictUnificator.getDust(Materials.Wood, OrePrefixes.stick.mMaterialAmount * 4L))
             .outputChances(10000, 9500)
             .duration(20 * SECONDS)
             .eut(2)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Items.bow, 1, 0))
             .itemOutputs(
                 new ItemStack(Items.string, 3),
-                GT_OreDictUnificator.getDust(Materials.Wood, OrePrefixes.stick.mMaterialAmount * 3))
+                GTOreDictUnificator.getDust(Materials.Wood, OrePrefixes.stick.mMaterialAmount * 3))
             .outputChances(10000, 9500)
             .duration(20 * SECONDS)
             .eut(2)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(Materials.Brick.getIngots(1))
             .itemOutputs(Materials.Brick.getDustSmall(1))
             .duration(20 * SECONDS)
             .eut(2)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.brick_stairs, 1, 0))
             .itemOutputs(Materials.Brick.getDustSmall(6))
             .duration(20 * SECONDS)
             .eut(2)
             .addTo(maceratorRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Machine_Bricked_BlastFurnace.get(1))
             .itemOutputs(Materials.Brick.getDust(8), Materials.Iron.getDust(1))
             .duration(20 * SECONDS)
@@ -589,11 +589,11 @@ public class Pulverizer implements Runnable {
             .addTo(maceratorRecipes);
 
         if (HardcoreEnderExpansion.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(getModItem(HardcoreEnderExpansion.ID, "endium_ore", 1))
                 .itemOutputs(
-                    GT_OreDictUnificator.get(OrePrefixes.crushed, Materials.HeeEndium, 2),
-                    GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 1))
+                    GTOreDictUnificator.get(OrePrefixes.crushed, Materials.HeeEndium, 2),
+                    GTOreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 1))
                 .outputChances(10000, 5000)
                 .duration(20 * SECONDS)
                 .eut(2)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/PyrolyseRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/PyrolyseRecipes.java
index 51017358b4..6f9f8f234d 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/PyrolyseRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/PyrolyseRecipes.java
@@ -3,19 +3,19 @@ package gregtech.loaders.postload.recipes;
 import static gregtech.api.enums.Mods.Forestry;
 import static gregtech.api.enums.Mods.Railcraft;
 import static gregtech.api.recipe.RecipeMaps.pyrolyseRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.MINUTES;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.MINUTES;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
 import net.minecraftforge.fluids.FluidRegistry;
 import net.minecraftforge.fluids.FluidStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 import mods.railcraft.common.blocks.aesthetics.cube.EnumCube;
 import mods.railcraft.common.items.RailcraftToolItems;
 
@@ -24,20 +24,20 @@ public class PyrolyseRecipes implements Runnable {
     @Override
     public void run() {
         if (Railcraft.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 16),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 16),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(RailcraftToolItems.getCoalCoke(16))
                 .fluidOutputs(Materials.Creosote.getFluid(8000))
                 .duration(32 * SECONDS)
                 .eut(64)
                 .addTo(pyrolyseRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 16),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTOreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 16),
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(RailcraftToolItems.getCoalCoke(16))
                 .fluidInputs(Materials.Nitrogen.getGas(1000))
                 .fluidOutputs(Materials.Creosote.getFluid(8000))
@@ -45,20 +45,20 @@ public class PyrolyseRecipes implements Runnable {
                 .eut(96)
                 .addTo(pyrolyseRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.block, Materials.Coal, 8),
-                    GT_Utility.getIntegratedCircuit(1))
+                    GTOreDictUnificator.get(OrePrefixes.block, Materials.Coal, 8),
+                    GTUtility.getIntegratedCircuit(1))
                 .itemOutputs(EnumCube.COKE_BLOCK.getItem(8))
                 .fluidOutputs(Materials.Creosote.getFluid(32000))
                 .duration(2 * MINUTES + 8 * SECONDS)
                 .eut(64)
                 .addTo(pyrolyseRecipes);
 
-            GT_Values.RA.stdBuilder()
+            GTValues.RA.stdBuilder()
                 .itemInputs(
-                    GT_OreDictUnificator.get(OrePrefixes.block, Materials.Coal, 8),
-                    GT_Utility.getIntegratedCircuit(2))
+                    GTOreDictUnificator.get(OrePrefixes.block, Materials.Coal, 8),
+                    GTUtility.getIntegratedCircuit(2))
                 .itemOutputs(EnumCube.COKE_BLOCK.getItem(8))
                 .fluidInputs(Materials.Nitrogen.getGas(1000))
                 .fluidOutputs(Materials.Creosote.getFluid(32000))
@@ -68,16 +68,16 @@ public class PyrolyseRecipes implements Runnable {
         }
 
         if (Forestry.isModLoaded()) {
-            GT_Values.RA.stdBuilder()
-                .itemInputs(getModItem(Forestry.ID, "fertilizerBio", 4), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(getModItem(Forestry.ID, "fertilizerBio", 4), GTUtility.getIntegratedCircuit(1))
                 .fluidInputs(Materials.Water.getFluid(4000))
                 .fluidOutputs(Materials.Biomass.getFluid(5000))
                 .duration(45 * SECONDS)
                 .eut(10)
                 .addTo(pyrolyseRecipes);
 
-            GT_Values.RA.stdBuilder()
-                .itemInputs(getModItem(Forestry.ID, "mulch", 32), GT_Utility.getIntegratedCircuit(1))
+            GTValues.RA.stdBuilder()
+                .itemInputs(getModItem(Forestry.ID, "mulch", 32), GTUtility.getIntegratedCircuit(1))
                 .fluidInputs(Materials.Water.getFluid(4000))
                 .fluidOutputs(Materials.Biomass.getFluid(5000))
                 .duration(45 * SECONDS)
@@ -85,48 +85,48 @@ public class PyrolyseRecipes implements Runnable {
                 .addTo(pyrolyseRecipes);
         }
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("biochaff", 4), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("biochaff", 4), GTUtility.getIntegratedCircuit(1))
             .fluidInputs(Materials.Water.getFluid(4000))
             .fluidOutputs(new FluidStack(FluidRegistry.getFluid("ic2biomass"), 5000))
             .duration(45 * SECONDS)
             .eut(10)
             .addTo(pyrolyseRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_ModHandler.getIC2Item("biochaff", 1), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTModHandler.getIC2Item("biochaff", 1), GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.Water.getFluid(1500))
             .fluidOutputs(Materials.FermentedBiomass.getFluid(1500))
             .duration(10 * SECONDS)
             .eut(10)
             .addTo(pyrolyseRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(new FluidStack(FluidRegistry.getFluid("ic2biomass"), 1000))
             .fluidOutputs(Materials.FermentedBiomass.getFluid(1000))
             .duration(5 * SECONDS)
             .eut(10)
             .addTo(pyrolyseRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTUtility.getIntegratedCircuit(2))
             .fluidInputs(Materials.Biomass.getFluid(1000))
             .fluidOutputs(Materials.FermentedBiomass.getFluid(1000))
             .duration(5 * SECONDS)
             .eut(10)
             .addTo(pyrolyseRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Sugar.getDust(23), GT_Utility.getIntegratedCircuit(1))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Sugar.getDust(23), GTUtility.getIntegratedCircuit(1))
             .itemOutputs(Materials.Charcoal.getDust(12))
             .fluidOutputs(Materials.Water.getFluid(1500))
             .duration(16 * SECONDS)
             .eut(64)
             .addTo(pyrolyseRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(Materials.Sugar.getDust(23), GT_Utility.getIntegratedCircuit(2))
+        GTValues.RA.stdBuilder()
+            .itemInputs(Materials.Sugar.getDust(23), GTUtility.getIntegratedCircuit(2))
             .itemOutputs(Materials.Charcoal.getDust(12))
             .fluidInputs(Materials.Nitrogen.getGas(500))
             .fluidOutputs(Materials.Water.getFluid(1500))
diff --git a/src/main/java/gregtech/loaders/postload/recipes/RecipeRemover.java b/src/main/java/gregtech/loaders/postload/recipes/RecipeRemover.java
index 10132ece09..96976d2b9a 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/RecipeRemover.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/RecipeRemover.java
@@ -2,7 +2,7 @@ package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.enums.Mods.ExtraTrees;
 import static gregtech.api.enums.Mods.IndustrialCraft2;
-import static gregtech.api.util.GT_ModHandler.getModItem;
+import static gregtech.api.util.GTModHandler.getModItem;
 
 import java.util.Iterator;
 import java.util.Map;
@@ -11,13 +11,13 @@ import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.api.util.GT_Utility;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.api.util.GTUtility;
 import ic2.api.recipe.ILiquidHeatExchangerManager;
 import ic2.api.recipe.Recipes;
 
@@ -25,93 +25,93 @@ public class RecipeRemover implements Runnable {
 
     @Override
     public void run() {
-        GT_ModHandler.removeRecipeByOutput(ItemList.IC2_Fertilizer.get(1L));
+        GTModHandler.removeRecipeByOutput(ItemList.IC2_Fertilizer.get(1L));
         removeCrafting();
         removeSmelting();
         removeIC2Recipes();
     }
 
     public void removeCrafting() {
-        GT_ModHandler.removeRecipe(new ItemStack(Items.lava_bucket), ItemList.Cell_Empty.get(1L));
-        GT_ModHandler.removeRecipe(new ItemStack(Items.water_bucket), ItemList.Cell_Empty.get(1L));
+        GTModHandler.removeRecipe(new ItemStack(Items.lava_bucket), ItemList.Cell_Empty.get(1L));
+        GTModHandler.removeRecipe(new ItemStack(Items.water_bucket), ItemList.Cell_Empty.get(1L));
     }
 
     public void removeIC2Recipes() {
 
         try {
-            GT_Utility.removeSimpleIC2MachineRecipe(
-                GT_Values.NI,
+            GTUtility.removeSimpleIC2MachineRecipe(
+                GTValues.NI,
                 Recipes.metalformerExtruding.getRecipes(),
                 ItemList.Cell_Empty.get(3L));
-            GT_Utility.removeSimpleIC2MachineRecipe(
+            GTUtility.removeSimpleIC2MachineRecipe(
                 ItemList.IC2_Energium_Dust.get(1L),
                 Recipes.compressor.getRecipes(),
-                GT_Values.NI);
-            GT_Utility.removeSimpleIC2MachineRecipe(
+                GTValues.NI);
+            GTUtility.removeSimpleIC2MachineRecipe(
                 new ItemStack(Items.gunpowder),
                 Recipes.extractor.getRecipes(),
-                GT_Values.NI);
-            GT_Utility.removeSimpleIC2MachineRecipe(
+                GTValues.NI);
+            GTUtility.removeSimpleIC2MachineRecipe(
                 new ItemStack(Blocks.wool, 1, 32767),
                 Recipes.extractor.getRecipes(),
-                GT_Values.NI);
-            GT_Utility.removeSimpleIC2MachineRecipe(
+                GTValues.NI);
+            GTUtility.removeSimpleIC2MachineRecipe(
                 new ItemStack(Blocks.gravel),
                 Recipes.oreWashing.getRecipes(),
-                GT_Values.NI);
+                GTValues.NI);
         } catch (Throwable ignored) {}
-        GT_Utility.removeIC2BottleRecipe(
-            GT_ModHandler.getIC2Item("fuelRod", 1),
-            GT_ModHandler.getIC2Item("UranFuel", 1),
+        GTUtility.removeIC2BottleRecipe(
+            GTModHandler.getIC2Item("fuelRod", 1),
+            GTModHandler.getIC2Item("UranFuel", 1),
             Recipes.cannerBottle.getRecipes(),
-            GT_ModHandler.getIC2Item("reactorUraniumSimple", 1, 1));
-        GT_Utility.removeIC2BottleRecipe(
-            GT_ModHandler.getIC2Item("fuelRod", 1),
-            GT_ModHandler.getIC2Item("MOXFuel", 1),
+            GTModHandler.getIC2Item("reactorUraniumSimple", 1, 1));
+        GTUtility.removeIC2BottleRecipe(
+            GTModHandler.getIC2Item("fuelRod", 1),
+            GTModHandler.getIC2Item("MOXFuel", 1),
             Recipes.cannerBottle.getRecipes(),
-            GT_ModHandler.getIC2Item("reactorMOXSimple", 1, 1));
+            GTModHandler.getIC2Item("reactorMOXSimple", 1, 1));
 
-        GT_Utility.removeSimpleIC2MachineRecipe(
+        GTUtility.removeSimpleIC2MachineRecipe(
             new ItemStack(Blocks.cobblestone),
-            GT_ModHandler.getMaceratorRecipeList(),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L));
-        GT_Utility.removeSimpleIC2MachineRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Lapis, 1L),
-            GT_ModHandler.getMaceratorRecipeList(),
+            GTModHandler.getMaceratorRecipeList(),
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L));
+        GTUtility.removeSimpleIC2MachineRecipe(
+            GTOreDictUnificator.get(OrePrefixes.gem, Materials.Lapis, 1L),
+            GTModHandler.getMaceratorRecipeList(),
             ItemList.IC2_Plantball.get(1L));
-        GT_Utility.removeSimpleIC2MachineRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L),
-            GT_ModHandler.getMaceratorRecipeList(),
+        GTUtility.removeSimpleIC2MachineRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L),
+            GTModHandler.getMaceratorRecipeList(),
             ItemList.IC2_Plantball.get(1L));
-        GT_Utility.removeSimpleIC2MachineRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L),
-            GT_ModHandler.getMaceratorRecipeList(),
+        GTUtility.removeSimpleIC2MachineRecipe(
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L),
+            GTModHandler.getMaceratorRecipeList(),
             ItemList.IC2_Plantball.get(1L));
-        GT_Utility.removeSimpleIC2MachineRecipe(
-            GT_Values.NI,
-            GT_ModHandler.getMaceratorRecipeList(),
+        GTUtility.removeSimpleIC2MachineRecipe(
+            GTValues.NI,
+            GTModHandler.getMaceratorRecipeList(),
             getModItem(IndustrialCraft2.ID, "itemBiochaff", 1L));
 
-        GT_Utility.removeSimpleIC2MachineRecipe(
+        GTUtility.removeSimpleIC2MachineRecipe(
             new ItemStack(Blocks.cactus, 8, 0),
-            GT_ModHandler.getCompressorRecipeList(),
+            GTModHandler.getCompressorRecipeList(),
             getModItem(IndustrialCraft2.ID, "itemFuelPlantBall", 1L));
-        GT_Utility.removeSimpleIC2MachineRecipe(
+        GTUtility.removeSimpleIC2MachineRecipe(
             getModItem(ExtraTrees.ID, "food", 8L, 24),
-            GT_ModHandler.getCompressorRecipeList(),
+            GTModHandler.getCompressorRecipeList(),
             getModItem(IndustrialCraft2.ID, "itemFuelPlantBall", 1L));
 
-        GT_Utility.removeSimpleIC2MachineRecipe(
+        GTUtility.removeSimpleIC2MachineRecipe(
             ItemList.Crop_Drop_BobsYerUncleRanks.get(1L),
-            GT_ModHandler.getExtractorRecipeList(),
+            GTModHandler.getExtractorRecipeList(),
             null);
-        GT_Utility.removeSimpleIC2MachineRecipe(
+        GTUtility.removeSimpleIC2MachineRecipe(
             ItemList.Crop_Drop_Ferru.get(1L),
-            GT_ModHandler.getExtractorRecipeList(),
+            GTModHandler.getExtractorRecipeList(),
             null);
-        GT_Utility.removeSimpleIC2MachineRecipe(
+        GTUtility.removeSimpleIC2MachineRecipe(
             ItemList.Crop_Drop_Aurelia.get(1L),
-            GT_ModHandler.getExtractorRecipeList(),
+            GTModHandler.getExtractorRecipeList(),
             null);
 
         try {
@@ -153,14 +153,12 @@ public class RecipeRemover implements Runnable {
     }
 
     public void removeSmelting() {
-        GT_ModHandler.removeFurnaceSmelting(GT_OreDictUnificator.get(OrePrefixes.ore, Materials.Graphite, 1L));
-        GT_ModHandler
-            .removeFurnaceSmelting(GT_OreDictUnificator.get(OrePrefixes.oreBlackgranite, Materials.Graphite, 1L));
-        GT_ModHandler.removeFurnaceSmelting(GT_OreDictUnificator.get(OrePrefixes.oreEndstone, Materials.Graphite, 1L));
-        GT_ModHandler
-            .removeFurnaceSmelting(GT_OreDictUnificator.get(OrePrefixes.oreNetherrack, Materials.Graphite, 1L));
-        GT_ModHandler
-            .removeFurnaceSmelting(GT_OreDictUnificator.get(OrePrefixes.oreRedgranite, Materials.Graphite, 1L));
-        GT_ModHandler.removeFurnaceSmelting(ItemList.IC2_Resin.get(1L));
+        GTModHandler.removeFurnaceSmelting(GTOreDictUnificator.get(OrePrefixes.ore, Materials.Graphite, 1L));
+        GTModHandler
+            .removeFurnaceSmelting(GTOreDictUnificator.get(OrePrefixes.oreBlackgranite, Materials.Graphite, 1L));
+        GTModHandler.removeFurnaceSmelting(GTOreDictUnificator.get(OrePrefixes.oreEndstone, Materials.Graphite, 1L));
+        GTModHandler.removeFurnaceSmelting(GTOreDictUnificator.get(OrePrefixes.oreNetherrack, Materials.Graphite, 1L));
+        GTModHandler.removeFurnaceSmelting(GTOreDictUnificator.get(OrePrefixes.oreRedgranite, Materials.Graphite, 1L));
+        GTModHandler.removeFurnaceSmelting(ItemList.IC2_Resin.get(1L));
     }
 }
diff --git a/src/main/java/gregtech/loaders/postload/recipes/SifterRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/SifterRecipes.java
index 3a34cc3536..876164efb0 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/SifterRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/SifterRecipes.java
@@ -3,24 +3,24 @@ package gregtech.loaders.postload.recipes;
 import static gregtech.api.enums.Mods.EnderIO;
 import static gregtech.api.enums.Mods.Forestry;
 import static gregtech.api.recipe.RecipeMaps.sifterRecipes;
-import static gregtech.api.util.GT_ModHandler.getModItem;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
+import static gregtech.api.util.GTModHandler.getModItem;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
 
 import net.minecraft.init.Blocks;
 import net.minecraft.init.Items;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class SifterRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(new ItemStack(Blocks.gravel, 1, 0))
             .itemOutputs(
                 new ItemStack(Items.flint, 1, 0),
@@ -34,20 +34,20 @@ public class SifterRecipes implements Runnable {
             .eut(16)
             .addTo(sifterRecipes);
 
-        GT_Values.RA.stdBuilder()
-            .itemInputs(GT_OreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Coal, 1L))
+        GTValues.RA.stdBuilder()
+            .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushedPurified, Materials.Coal, 1L))
             .itemOutputs(
                 new ItemStack(Items.coal, 1, 0),
                 new ItemStack(Items.coal, 1, 0),
                 new ItemStack(Items.coal, 1, 0),
                 new ItemStack(Items.coal, 1, 0),
                 new ItemStack(Items.coal, 1, 0),
-                GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L))
+                GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L))
             .outputChances(10000, 9000, 8000, 7000, 6000, 5000)
             .duration(30 * SECONDS)
             .eut(16)
             .addTo(sifterRecipes);
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.ElectronicsLump.get(1))
             .itemOutputs(
                 ItemList.Electric_Motor_LV.get(1),
diff --git a/src/main/java/gregtech/loaders/postload/recipes/SlicerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/SlicerRecipes.java
index 73d251014e..08c81a8ecb 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/SlicerRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/SlicerRecipes.java
@@ -1,38 +1,38 @@
 package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.recipe.RecipeMaps.slicerRecipes;
-import static gregtech.api.util.GT_RecipeBuilder.SECONDS;
-import static gregtech.api.util.GT_RecipeBuilder.TICKS;
+import static gregtech.api.util.GTRecipeBuilder.SECONDS;
+import static gregtech.api.util.GTRecipeBuilder.TICKS;
 
-import gregtech.api.enums.GT_Values;
+import gregtech.api.enums.GTValues;
 import gregtech.api.enums.ItemList;
 
 public class SlicerRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Dough_Chocolate.get(1), ItemList.Shape_Slicer_Flat.get(0))
             .itemOutputs(ItemList.Food_Raw_Cookie.get(4))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(slicerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Baked_Bun.get(1), ItemList.Shape_Slicer_Flat.get(0))
             .itemOutputs(ItemList.Food_Sliced_Bun.get(2))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(slicerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Baked_Bread.get(1), ItemList.Shape_Slicer_Flat.get(0))
             .itemOutputs(ItemList.Food_Sliced_Bread.get(2))
             .duration(6 * SECONDS + 8 * TICKS)
             .eut(4)
             .addTo(slicerRecipes);
 
-        GT_Values.RA.stdBuilder()
+        GTValues.RA.stdBuilder()
             .itemInputs(ItemList.Food_Baked_Baguette.get(1), ItemList.Shape_Slicer_Flat.get(0))
             .itemOutputs(ItemList.Food_Sliced_Baguette.get(2))
             .duration(6 * SECONDS + 8 * TICKS)
diff --git a/src/main/java/gregtech/loaders/postload/recipes/SmelterRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/SmelterRecipes.java
index e56cc613e7..57e932b2cc 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/SmelterRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/SmelterRecipes.java
@@ -7,63 +7,63 @@ import cpw.mods.fml.common.registry.GameRegistry;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
 
 public class SmelterRecipes implements Runnable {
 
     @Override
     public void run() {
-        GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_PotatoChips.get(1L), ItemList.Food_PotatoChips.get(1L));
+        GTModHandler.addSmeltingRecipe(ItemList.Food_Raw_PotatoChips.get(1L), ItemList.Food_PotatoChips.get(1L));
 
-        GT_ModHandler
+        GTModHandler
             .addSmeltingRecipe(ItemList.Food_Potato_On_Stick.get(1L), ItemList.Food_Potato_On_Stick_Roasted.get(1L));
 
-        GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Bun.get(1L), ItemList.Food_Baked_Bun.get(1L));
+        GTModHandler.addSmeltingRecipe(ItemList.Food_Raw_Bun.get(1L), ItemList.Food_Baked_Bun.get(1L));
 
-        GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Bread.get(1L), ItemList.Food_Baked_Bread.get(1L));
+        GTModHandler.addSmeltingRecipe(ItemList.Food_Raw_Bread.get(1L), ItemList.Food_Baked_Bread.get(1L));
 
-        GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Baguette.get(1L), ItemList.Food_Baked_Baguette.get(1L));
+        GTModHandler.addSmeltingRecipe(ItemList.Food_Raw_Baguette.get(1L), ItemList.Food_Baked_Baguette.get(1L));
 
-        GT_ModHandler
+        GTModHandler
             .addSmeltingRecipe(ItemList.Food_Raw_Pizza_Veggie.get(1L), ItemList.Food_Baked_Pizza_Veggie.get(1L));
 
-        GT_ModHandler
+        GTModHandler
             .addSmeltingRecipe(ItemList.Food_Raw_Pizza_Cheese.get(1L), ItemList.Food_Baked_Pizza_Cheese.get(1L));
 
-        GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Pizza_Meat.get(1L), ItemList.Food_Baked_Pizza_Meat.get(1L));
+        GTModHandler.addSmeltingRecipe(ItemList.Food_Raw_Pizza_Meat.get(1L), ItemList.Food_Baked_Pizza_Meat.get(1L));
 
-        GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Baguette.get(1L), ItemList.Food_Baked_Baguette.get(1L));
+        GTModHandler.addSmeltingRecipe(ItemList.Food_Raw_Baguette.get(1L), ItemList.Food_Baked_Baguette.get(1L));
 
-        GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Cake.get(1L), ItemList.Food_Baked_Cake.get(1L));
+        GTModHandler.addSmeltingRecipe(ItemList.Food_Raw_Cake.get(1L), ItemList.Food_Baked_Cake.get(1L));
 
-        GT_ModHandler.addSmeltingRecipe(ItemList.Food_Raw_Cookie.get(1L), new ItemStack(Items.cookie, 1));
+        GTModHandler.addSmeltingRecipe(ItemList.Food_Raw_Cookie.get(1L), new ItemStack(Items.cookie, 1));
 
-        GT_ModHandler.addSmeltingRecipe(new ItemStack(Items.slime_ball, 1), ItemList.IC2_Resin.get(1L));
+        GTModHandler.addSmeltingRecipe(new ItemStack(Items.slime_ball, 1), ItemList.IC2_Resin.get(1L));
 
-        GT_ModHandler.addSmeltingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.ore, Materials.Graphite, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
+        GTModHandler.addSmeltingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.ore, Materials.Graphite, 1L),
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
 
-        GT_ModHandler.addSmeltingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.oreBlackgranite, Materials.Graphite, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
+        GTModHandler.addSmeltingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.oreBlackgranite, Materials.Graphite, 1L),
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
 
-        GT_ModHandler.addSmeltingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.oreEndstone, Materials.Graphite, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
+        GTModHandler.addSmeltingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.oreEndstone, Materials.Graphite, 1L),
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
 
-        GT_ModHandler.addSmeltingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.oreNetherrack, Materials.Graphite, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
+        GTModHandler.addSmeltingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.oreNetherrack, Materials.Graphite, 1L),
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
 
-        GT_ModHandler.addSmeltingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.WroughtIron, 1L));
+        GTModHandler.addSmeltingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Iron, 1L),
+            GTOreDictUnificator.get(OrePrefixes.nugget, Materials.WroughtIron, 1L));
 
-        GT_ModHandler.addSmeltingRecipe(
-            GT_OreDictUnificator.get(OrePrefixes.oreRedgranite, Materials.Graphite, 1L),
-            GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
+        GTModHandler.addSmeltingRecipe(
+            GTOreDictUnificator.get(OrePrefixes.oreRedgranite, Materials.Graphite, 1L),
+            GTOreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 1L));
 
         GameRegistry.addSmelting(ItemList.CompressedFireclay.get(1), ItemList.Firebrick.get(1), 0);
     }
diff --git a/src/main/java/gregtech/loaders/postload/recipes/ThaumcraftRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ThaumcraftRecipes.java
index 441da5a116..b08e6ed56e 100644
--- a/src/main/java/gregtech/loaders/postload/recipes/ThaumcraftRecipes.java
+++ b/src/main/java/gregtech/loaders/postload/recipes/ThaumcraftRecipes.java
@@ -2,7 +2,7 @@ package gregtech.loaders.postload.recipes;
 
 import static gregtech.api.enums.Mods.AppliedEnergistics2;
 import static gregtech.api.enums.Mods.Thaumcraft;
-import static gregtech.api.util.GT_ModHandler.getModItem;
+import static gregtech.api.util.GTModHandler.getModItem;
 
 import java.util.Arrays;
 import java.util.Collections;
@@ -10,551 +10,551 @@ import java.util.Collections;
 import net.minecraft.init.Blocks;
 import net.minecraft.item.ItemStack;
 
-import gregtech.api.GregTech_API;
-import gregtech.api.enchants.Enchantment_Hazmat;
+import gregtech.api.GregTechAPI;
+import gregtech.api.enchants.EnchantmentHazmat;
 import gregtech.api.enums.ItemList;
 import gregtech.api.enums.Materials;
 import gregtech.api.enums.OrePrefixes;
-import gregtech.api.enums.TC_Aspects;
-import gregtech.api.util.GT_LanguageManager;
-import gregtech.api.util.GT_ModHandler;
-import gregtech.api.util.GT_OreDictUnificator;
-import gregtech.loaders.postload.GT_MachineRecipeLoader;
+import gregtech.api.enums.TCAspects;
+import gregtech.api.util.GTLanguageManager;
+import gregtech.api.util.GTModHandler;
+import gregtech.api.util.GTOreDictUnificator;
+import gregtech.loaders.postload.MachineRecipeLoader;
 
 public class ThaumcraftRecipes implements Runnable {
 
     @Override
     public void run() {
-        if ((!Thaumcraft.isModLoaded()) || GregTech_API.sThaumcraftCompat == null) {
+        if ((!Thaumcraft.isModLoaded()) || GregTechAPI.sThaumcraftCompat == null) {
             return;
         }
 
         // Add Recipe for TC Crucible: Salis Mundus to Balanced Shards
         String tKey = "GT_BALANCE_SHARD_RECIPE";
-        GregTech_API.sThaumcraftCompat.addCrucibleRecipe(
+        GregTechAPI.sThaumcraftCompat.addCrucibleRecipe(
             "TB.SM",
             getModItem(Thaumcraft.ID, "ItemResource", 1L, 14),
             getModItem(Thaumcraft.ID, "ItemShard", 1L, 6),
             Arrays.asList(
-                new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 2L),
-                new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L)));
+                new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 2L),
+                new TCAspects.TC_AspectStack(TCAspects.ORDO, 1L)));
 
         tKey = "GT_WOOD_TO_CHARCOAL";
-        GT_LanguageManager.addStringLocalization(
-            GT_MachineRecipeLoader.aTextTCGTPage + tKey,
+        GTLanguageManager.addStringLocalization(
+            MachineRecipeLoader.aTextTCGTPage + tKey,
             "You have discovered a way of making charcoal magically instead of using regular ovens for this purpose.

To create charcoal from wood you first need an air-free environment, some vacuus essentia is needed for that, then you need to incinerate the wood using ignis essentia and wait until all the water inside the wood is burned away.

This method however doesn't create creosote oil as byproduct."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Charcoal Transmutation", "Turning wood into charcoal", new String[] { "ALUMENTUM" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 1L), + GTOreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 1L), 2, 0, 13, 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.ARBOR, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 8L)), + new TCAspects.TC_AspectStack(TCAspects.ARBOR, 10L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 8L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 8L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.log.get(Materials.Wood), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 1L), + GTOreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 1L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))) }); tKey = "GT_FILL_WATER_BUCKET"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way of filling a bucket with aqua essentia in order to simply get water."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Water Transmutation", "Filling buckets with water", null, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Water, 1L), + GTOreDictUnificator.get(OrePrefixes.bucket, Materials.Water, 1L), 2, 0, 16, 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L)), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 4L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 4L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, - GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Empty, 1L), - GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Water, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + GTOreDictUnificator.get(OrePrefixes.bucket, Materials.Empty, 1L), + GTOreDictUnificator.get(OrePrefixes.bucket, Materials.Water, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 4L))), + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, - GT_OreDictUnificator.get(OrePrefixes.bucketClay, Materials.Empty, 1L), - GT_OreDictUnificator.get(OrePrefixes.bucketClay, Materials.Water, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + GTOreDictUnificator.get(OrePrefixes.bucketClay, Materials.Empty, 1L), + GTOreDictUnificator.get(OrePrefixes.bucketClay, Materials.Water, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 4L))), + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, - GT_OreDictUnificator.get(OrePrefixes.capsule, Materials.Empty, 1L), - GT_OreDictUnificator.get(OrePrefixes.capsule, Materials.Water, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + GTOreDictUnificator.get(OrePrefixes.capsule, Materials.Empty, 1L), + GTOreDictUnificator.get(OrePrefixes.capsule, Materials.Water, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 4L))), + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1L), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 4L))) }); + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Empty, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.AQUA, 4L))) }); tKey = "GT_TRANSZINC"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way to multiply zinc by steeping zinc nuggets in metallum harvested from other metals."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Zinc Transmutation", "Transformation of metals into zinc", new String[] { "TRANSTIN" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Zinc, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Zinc, 1L), 2, 1, 9, 13, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Zinc), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Zinc, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Zinc, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.SANO, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.SANO, 1L))) }); tKey = "GT_TRANSANTIMONY"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way to multiply antimony by steeping antimony nuggets in metallum harvested from other metals."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Antimony Transmutation", "Transformation of metals into antimony", new String[] { "GT_TRANSZINC", "TRANSLEAD" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Antimony, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Antimony, 1L), 2, 1, 9, 14, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Antimony), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Antimony, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Antimony, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L))) }); tKey = "GT_TRANSNICKEL"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way to multiply nickel by steeping nickel nuggets in metallum harvested from other metals."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Nickel Transmutation", "Transformation of metals into nickel", new String[] { "TRANSLEAD" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Nickel, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Nickel, 1L), 2, 1, 9, 15, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Nickel), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Nickel, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Nickel, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))) }); tKey = "GT_TRANSCOBALT"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way to multiply cobalt by steeping cobalt nuggets in metallum harvested from other metals."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Cobalt Transmutation", "Transformation of metals into cobalt", new String[] { "GT_TRANSNICKEL" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Cobalt, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Cobalt, 1L), 2, 1, 9, 16, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Cobalt), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Cobalt, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Cobalt, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 1L))) }); tKey = "GT_TRANSBISMUTH"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way to multiply bismuth by steeping bismuth nuggets in metallum harvested from other metals."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Bismuth Transmutation", "Transformation of metals into bismuth", new String[] { "GT_TRANSCOBALT" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Bismuth, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Bismuth, 1L), 2, 1, 11, 17, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Bismuth), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Bismuth, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Bismuth, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 1L))) }); tKey = "GT_IRON_TO_STEEL"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way of making Iron harder by just re-ordering its components.

This Method can be used to create a Material called Steel, which is used in many non-Thaumaturgic applications."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Steel Transmutation", "Transforming iron to steel", new String[] { "TRANSIRON", "GT_WOOD_TO_CHARCOAL" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 1L), 3, 0, 13, 8, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Iron), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L))) }); + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.ORDO, 1L))) }); tKey = "GT_TRANSBRONZE"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way of creating Alloys using the already known transmutations of Copper and Tin.

This Method can be used to create a Bronze directly without having to go through an alloying process."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Bronze Transmutation", "Transformation of metals into bronze", new String[] { "TRANSTIN", "TRANSCOPPER" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Bronze, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Bronze, 1L), 2, 0, 13, 11, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Bronze), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Bronze, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Bronze, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 1L))) }); tKey = "GT_TRANSELECTRUM"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Electrum as well."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Electrum Transmutation", "Transformation of metals into electrum", new String[] { "GT_TRANSBRONZE", "TRANSGOLD", "TRANSSILVER" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Electrum, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Electrum, 1L), 2, 1, 11, 11, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Electrum), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Electrum, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Electrum, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.LUCRUM, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.LUCRUM, 1L))) }); tKey = "GT_TRANSBRASS"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Brass as well."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Brass Transmutation", "Transformation of metals into brass", new String[] { "GT_TRANSBRONZE", "GT_TRANSZINC" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Brass, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Brass, 1L), 2, 1, 11, 12, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Brass), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Brass, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Brass, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 1L))) }); tKey = "GT_TRANSINVAR"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Invar as well."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Invar Transmutation", "Transformation of metals into invar", new String[] { "GT_TRANSBRONZE", "GT_TRANSNICKEL" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Invar, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Invar, 1L), 2, 1, 11, 15, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Invar), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Invar, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Invar, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L))) }); tKey = "GT_TRANSCUPRONICKEL"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Cupronickel as well."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Cupronickel Transmutation", "Transformation of metals into cupronickel", new String[] { "GT_TRANSBRONZE", "GT_TRANSNICKEL" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Cupronickel, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Cupronickel, 1L), 2, 1, 11, 16, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Cupronickel), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Cupronickel, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Cupronickel, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))) }); tKey = "GT_TRANSBATTERYALLOY"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Battery Alloy as well."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Battery Alloy Transmutation", "Transformation of metals into battery alloy", new String[] { "GT_TRANSBRONZE", "GT_TRANSANTIMONY" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.BatteryAlloy, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.BatteryAlloy, 1L), 2, 1, 11, 13, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.BatteryAlloy), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.BatteryAlloy, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.BatteryAlloy, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 1L))) }); tKey = "GT_TRANSSOLDERINGALLOY"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "Your discovery of Bronze Transmutation has lead you to the conclusion it works with other Alloys such as Soldering Alloy as well."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Soldering Alloy Transmutation", "Transformation of metals into soldering alloy", new String[] { "GT_TRANSBRONZE", "GT_TRANSANTIMONY" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.SolderingAlloy, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.SolderingAlloy, 1L), 2, 1, 11, 14, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.SolderingAlloy), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.SolderingAlloy, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.SolderingAlloy, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.AQUA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.AQUA, 1L), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 1L))) }); tKey = "GT_ADVANCEDMETALLURGY"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "Now that you have discovered all the basic metals, you can finally move on to the next Level of magic metallurgy and create more advanced metals"); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Advanced Metallurgic Transmutation", "Mastering the basic metals", new String[] { "GT_TRANSBISMUTH", "GT_IRON_TO_STEEL", "GT_TRANSSOLDERINGALLOY", "GT_TRANSBATTERYALLOY", "GT_TRANSBRASS", "GT_TRANSELECTRUM", "GT_TRANSCUPRONICKEL", "GT_TRANSINVAR" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L), + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Iron, 1L), 3, 0, 16, 14, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 50L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PRAECANTATIO, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.NEBRISUM, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 20L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 50L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 20L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 20L), + new TCAspects.TC_AspectStack(TCAspects.PRAECANTATIO, 20L), + new TCAspects.TC_AspectStack(TCAspects.NEBRISUM, 20L), + new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 20L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey }); + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey }); tKey = "GT_TRANSALUMINIUM"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way to multiply aluminium by steeping aluminium nuggets in metallum harvested from other metals.

This transmutation is slightly harder to achieve, because aluminium has special properties, which require more order to achieve the desired result."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Aluminium Transmutation", "Transformation of metals into aluminium", new String[] { "GT_ADVANCEDMETALLURGY" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 1L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 1L), 4, 0, 19, 14, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VOLATUS, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.VOLATUS, 3L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 3L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.nugget.get(Materials.Aluminium), - GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 3L), + GTOreDictUnificator.get(OrePrefixes.nugget, Materials.Aluminium, 3L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VOLATUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.IGNIS, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.VOLATUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 1L), + new TCAspects.TC_AspectStack(TCAspects.IGNIS, 1L))) }); tKey = "GT_TRANSSKYSTONE"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way to convert obsidian to skystone.

Not sure why you'd want to do this, unless skystone is somehow unavailable in your world."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Skystone Transmutation", "Transformation of obsidian into skystone", @@ -566,128 +566,128 @@ public class ThaumcraftRecipes implements Runnable { 19, 15, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VOLATUS, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.VOLATUS, 3L), + new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 3L), + new TCAspects.TC_AspectStack(TCAspects.TERRA, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, new ItemStack(Blocks.obsidian), getModItem(AppliedEnergistics2.ID, "tile.BlockSkyStone", 1), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VOLATUS, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ALIENIS, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TENEBRAE, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 2L), + new TCAspects.TC_AspectStack(TCAspects.VOLATUS, 1L), + new TCAspects.TC_AspectStack(TCAspects.TERRA, 1L), + new TCAspects.TC_AspectStack(TCAspects.ALIENIS, 2L), + new TCAspects.TC_AspectStack(TCAspects.TENEBRAE, 1L))) }); tKey = "GT_TRANSMINERAL"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way to convert basaltic mineral sand to granitic mineral sand and vice versa.

Handy for people living in the sky who can't access it normally, or if you really want one or the other."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Basaltic Mineral Transmutation", "Transformation of mineral sands", new String[] { "GT_ADVANCEDMETALLURGY" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GraniticMineralSand, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.GraniticMineralSand, 1L), 4, 0, 19, 16, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VOLATUS, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TERRA, 3L)), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.VOLATUS, 3L), + new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 3L), + new TCAspects.TC_AspectStack(TCAspects.TERRA, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BasalticMineralSand, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GraniticMineralSand, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.BasalticMineralSand, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.GraniticMineralSand, 1L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( - tKey, - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.GraniticMineralSand, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.BasalticMineralSand, 1L), + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 1L), + new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1L))), + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( + tKey, + GTOreDictUnificator.get(OrePrefixes.dust, Materials.GraniticMineralSand, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.BasalticMineralSand, 1L), Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MAGNETO, 1L))) }); + new TCAspects.TC_AspectStack(TCAspects.METALLUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 1L), + new TCAspects.TC_AspectStack(TCAspects.MAGNETO, 1L))) }); tKey = "GT_CRYSTALLISATION"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "Sometimes when processing your Crystal Shards they become a pile of Dust instead of the mostly required Shard.

You have finally found a way to reverse this Process by using Vitreus Essentia for recrystallising the Shards."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Shard Recrystallisation", "Fixing your precious crystals", new String[] { "ALCHEMICALMANUFACTURE" }, "ALCHEMY", - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedOrder, 1L), + GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedOrder, 1L), 3, 0, -11, -3, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 5L), - new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3L)), + new TCAspects.TC_AspectStack(TCAspects.VITREUS, 5L), + new TCAspects.TC_AspectStack(TCAspects.PERMUTATIO, 3L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 3L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.dust.get(Materials.Amber), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Amber, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + GTOreDictUnificator.get(OrePrefixes.gem, Materials.Amber, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4L))), + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.dust.get(Materials.InfusedOrder), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedOrder, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedOrder, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4L))), + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.dust.get(Materials.InfusedEntropy), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEntropy, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEntropy, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4L))), + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.dust.get(Materials.InfusedAir), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedAir, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedAir, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4L))), + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.dust.get(Materials.InfusedEarth), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEarth, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEarth, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4L))), + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.dust.get(Materials.InfusedFire), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedFire, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe( + GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedFire, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4L))), + GregTechAPI.sThaumcraftCompat.addCrucibleRecipe( tKey, OrePrefixes.dust.get(Materials.InfusedWater), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedWater, 1L), - Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))) }); + GTOreDictUnificator.get(OrePrefixes.gem, Materials.InfusedWater, 1L), + Collections.singletonList(new TCAspects.TC_AspectStack(TCAspects.VITREUS, 4L))) }); tKey = "GT_MAGICENERGY"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "While trying to find new ways to integrate magic into your industrial factories, you have discovered a way to convert magical energy into electrical power."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Magic Energy Conversion", "Magic to Power", @@ -699,33 +699,31 @@ public class ThaumcraftRecipes implements Runnable { -3, 10, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 10L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 20L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addInfusionRecipe( - tKey, - ItemList.Hull_LV.get(1L), - new ItemStack[] { new ItemStack(Blocks.beacon), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L), - ItemList.Sensor_MV.get(2L), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Thaumium, 1L), - ItemList.Sensor_MV.get(2L) }, - ItemList.MagicEnergyConverter_LV.get(1L), - 5, - Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L))) }); + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, GregTechAPI.sThaumcraftCompat.addInfusionRecipe( + tKey, + ItemList.Hull_LV.get(1L), + new ItemStack[] { new ItemStack(Blocks.beacon), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 1L), ItemList.Sensor_MV.get(2L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Thaumium, 1L), ItemList.Sensor_MV.get(2L) }, + ItemList.MagicEnergyConverter_LV.get(1L), + 5, + Arrays.asList( + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 32L))) }); tKey = "GT_MAGICENERGY2"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "Attempts to increase the output of your Magic Energy generators have resulted in significant improvements."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Adept Magic Energy Conversion", "Magic to Power", @@ -737,33 +735,33 @@ public class ThaumcraftRecipes implements Runnable { -4, 12, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 10L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 20L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( tKey, ItemList.Hull_MV.get(1L), new ItemStack[] { new ItemStack(Blocks.beacon), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.Thaumium, 1L), - ItemList.Sensor_HV.get(2L), GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plateDouble, Materials.StainlessSteel, 1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Thaumium, 1L), + ItemList.Sensor_HV.get(2L), GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.StainlessSteel, 1L), ItemList.Sensor_HV.get(2L) }, ItemList.MagicEnergyConverter_MV.get(1L), 6, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L))) }); + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 64L))) }); tKey = "GT_MAGICENERGY3"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "Attempts to further increase the output of your Magic Energy generators have resulted in great improvements."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Master Magic Energy Conversion", "Magic to Power", @@ -775,34 +773,32 @@ public class ThaumcraftRecipes implements Runnable { -4, 14, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 40L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 20L)), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 20L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 20L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 40L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 20L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addInfusionRecipe( - tKey, - ItemList.Hull_HV.get(1L), - new ItemStack[] { new ItemStack(Blocks.beacon), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1L), - ItemList.Field_Generator_MV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 1L), - ItemList.Field_Generator_MV.get(1L) }, - ItemList.MagicEnergyConverter_HV.get(1L), - 8, - Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L))) }); + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, GregTechAPI.sThaumcraftCompat.addInfusionRecipe( + tKey, + ItemList.Hull_HV.get(1L), + new ItemStack[] { new ItemStack(Blocks.beacon), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1L), + ItemList.Field_Generator_MV.get(1L), GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 1L), + ItemList.Field_Generator_MV.get(1L) }, + ItemList.MagicEnergyConverter_HV.get(1L), + 8, + Arrays.asList( + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 128L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 128L))) }); tKey = "GT_MAGICABSORB"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "Research into magical energy conversion methods has identified a way to convert surrounding energies into electrical power."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Magic Energy Absorption", "Harvesting Magic", @@ -814,33 +810,31 @@ public class ThaumcraftRecipes implements Runnable { -2, 12, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 10L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 20L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addInfusionRecipe( - tKey, - ItemList.Hull_LV.get(1L), - new ItemStack[] { ItemList.MagicEnergyConverter_LV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Thaumium, 1L), - ItemList.Sensor_MV.get(2L) }, - ItemList.MagicEnergyAbsorber_LV.get(1L), - 6, - Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 4L))) }); + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, GregTechAPI.sThaumcraftCompat.addInfusionRecipe( + tKey, + ItemList.Hull_LV.get(1L), + new ItemStack[] { ItemList.MagicEnergyConverter_LV.get(1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Thaumium, 1L), ItemList.Sensor_MV.get(2L) }, + ItemList.MagicEnergyAbsorber_LV.get(1L), + 6, + Arrays.asList( + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 32L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 32L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 16L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 4L))) }); tKey = "GT_MAGICABSORB2"; - GT_LanguageManager - .addStringLocalization(GT_MachineRecipeLoader.aTextTCGTPage + tKey, "Moar output! Drain all the Magic!"); - GregTech_API.sThaumcraftCompat.addResearch( + GTLanguageManager + .addStringLocalization(MachineRecipeLoader.aTextTCGTPage + tKey, "Moar output! Drain all the Magic!"); + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Improved Magic Energy Absorption", "Harvesting Magic", @@ -852,109 +846,109 @@ public class ThaumcraftRecipes implements Runnable { -2, 14, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.COGNITIO, 10L), - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 20L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 10L)), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 10L), + new TCAspects.TC_AspectStack(TCAspects.COGNITIO, 10L), + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 20L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 10L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( tKey, ItemList.Hull_MV.get(1L), new ItemStack[] { ItemList.MagicEnergyConverter_MV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Thaumium, 1L), ItemList.Sensor_HV.get(2L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Thaumium, 1L) }, + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Thaumium, 1L), ItemList.Sensor_HV.get(2L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Thaumium, 1L) }, ItemList.MagicEnergyAbsorber_MV.get(1L), 6, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 8L))), - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 64L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 32L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 64L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 32L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 8L))), + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( tKey, ItemList.Hull_HV.get(1L), new ItemStack[] { ItemList.MagicEnergyConverter_MV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Void, 1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Void, 1), ItemList.Field_Generator_MV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Void, 1), }, + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Void, 1), }, ItemList.MagicEnergyAbsorber_HV.get(1L), 8, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 64L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 16L))), - GregTech_API.sThaumcraftCompat.addInfusionRecipe( + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 128L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 64L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 128L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 64L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 16L))), + GregTechAPI.sThaumcraftCompat.addInfusionRecipe( tKey, ItemList.Hull_EV.get(1L), new ItemStack[] { ItemList.MagicEnergyConverter_HV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Void, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Void, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 1), ItemList.Field_Generator_HV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Void, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 1), }, + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Void, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 1), }, ItemList.MagicEnergyAbsorber_EV.get(1L), 10, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.POTENTIA, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ELECTRUM, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.MACHINA, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VACUOS, 128L), - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 256L), - new TC_Aspects.TC_AspectStack(TC_Aspects.STRONTIO, 64L))) }); + new TCAspects.TC_AspectStack(TCAspects.POTENTIA, 256L), + new TCAspects.TC_AspectStack(TCAspects.ELECTRUM, 128L), + new TCAspects.TC_AspectStack(TCAspects.MACHINA, 256L), + new TCAspects.TC_AspectStack(TCAspects.VACUOS, 128L), + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 256L), + new TCAspects.TC_AspectStack(TCAspects.STRONTIO, 64L))) }); tKey = "GT_HAZMATENCH"; - GT_LanguageManager.addStringLocalization( - GT_MachineRecipeLoader.aTextTCGTPage + tKey, + GTLanguageManager.addStringLocalization( + MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way to magically enchant a mundane piece of armor with the protective properties of a Hazmat suite."); - GregTech_API.sThaumcraftCompat.addResearch( + GregTechAPI.sThaumcraftCompat.addResearch( tKey, "Hazmat Protection", "Magical protection from physical hazards", new String[] { "INFUSIONENCHANTMENT" }, "ARTIFICE", - GT_ModHandler.getIC2Item("hazmatChestplate", 1), + GTModHandler.getIC2Item("hazmatChestplate", 1), 4, 0, -7, 13, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.VITIUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 1L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 1L)), + new TCAspects.TC_AspectStack(TCAspects.VITIUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 1L), + new TCAspects.TC_AspectStack(TCAspects.RADIO, 1L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 1L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 1L)), null, - new Object[] { GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addInfusionEnchantmentRecipe( + new Object[] { MachineRecipeLoader.aTextTCGTPage + tKey, + GregTechAPI.sThaumcraftCompat.addInfusionEnchantmentRecipe( tKey, - Enchantment_Hazmat.INSTANCE, + EnchantmentHazmat.INSTANCE, 5, Arrays.asList( - new TC_Aspects.TC_AspectStack(TC_Aspects.VITIUM, 8L), - new TC_Aspects.TC_AspectStack(TC_Aspects.GELUM, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.RADIO, 16L), - new TC_Aspects.TC_AspectStack(TC_Aspects.TUTAMEN, 32L), - new TC_Aspects.TC_AspectStack(TC_Aspects.VENENUM, 16L)), + new TCAspects.TC_AspectStack(TCAspects.VITIUM, 8L), + new TCAspects.TC_AspectStack(TCAspects.GELUM, 16L), + new TCAspects.TC_AspectStack(TCAspects.RADIO, 16L), + new TCAspects.TC_AspectStack(TCAspects.TUTAMEN, 32L), + new TCAspects.TC_AspectStack(TCAspects.VENENUM, 16L)), new ItemStack[] { getModItem(Thaumcraft.ID, "ItemResource", 1L, 14), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1), getModItem(Thaumcraft.ID, "ItemResource", 1L, 14), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1) }) }); + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Rubber, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 1) }) }); } } diff --git a/src/main/java/gregtech/loaders/postload/recipes/ThermalCentrifugeRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/ThermalCentrifugeRecipes.java index 8e06eec1e0..41aa5341d1 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/ThermalCentrifugeRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/ThermalCentrifugeRecipes.java @@ -1,119 +1,119 @@ package gregtech.loaders.postload.recipes; import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; -import static gregtech.api.util.GT_ModHandler.getIC2Item; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GTModHandler.getIC2Item; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTOreDictUnificator; public class ThermalCentrifugeRecipes implements Runnable { @Override public void run() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.SunnariumCell.get(1)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sunnarium, 1), new ItemStack(Items.glowstone_dust, 2), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(thermalCentrifugeRecipes); // Recipes from the old ic2 recipe maps - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getIC2Item("reactorDepletedMOXSimple", 1)) .itemOutputs( getIC2Item("smallPlutonium", 1), getIC2Item("Plutonium", 3), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(thermalCentrifugeRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getIC2Item("reactorDepletedMOXDual", 1)) .itemOutputs( getIC2Item("smallPlutonium", 2), getIC2Item("Plutonium", 6), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 3)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 3)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(thermalCentrifugeRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getIC2Item("reactorDepletedMOXQuad", 1)) .itemOutputs( getIC2Item("smallPlutonium", 4), getIC2Item("Plutonium", 12), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 6)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 6)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(thermalCentrifugeRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getIC2Item("reactorDepletedUraniumSimple", 1)) .itemOutputs( getIC2Item("smallPlutonium", 1), getIC2Item("Uran238", 4), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(thermalCentrifugeRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getIC2Item("reactorDepletedUraniumDual", 1)) .itemOutputs( getIC2Item("smallPlutonium", 2), getIC2Item("Uran238", 8), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 3)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 3)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(thermalCentrifugeRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getIC2Item("reactorDepletedUraniumQuad", 1)) .itemOutputs( getIC2Item("smallPlutonium", 4), getIC2Item("Uran238", 16), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 6)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 6)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(thermalCentrifugeRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getIC2Item("RTGPellets", 1)) - .itemOutputs(getIC2Item("Plutonium", 3), GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 54)) + .itemOutputs(getIC2Item("Plutonium", 3), GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 54)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(thermalCentrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 2)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lithium, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.NetherQuartz, 2)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lithium, 1)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(thermalCentrifugeRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 4)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 4)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.SiliconDioxide, 1)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(thermalCentrifugeRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(new ItemStack(Blocks.cobblestone, 1)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1)) .duration(25 * SECONDS) .eut(TierEU.RECIPE_LV) .addTo(thermalCentrifugeRecipes); diff --git a/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java index b1cd1b76f3..07e6f0c4b1 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/TranscendentPlasmaMixerRecipes.java @@ -4,12 +4,12 @@ import static gregtech.api.recipe.RecipeMaps.transcendentPlasmaMixerRecipes; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.material.ELEMENT; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.material.MaterialsElements; public class TranscendentPlasmaMixerRecipes implements Runnable { @@ -24,8 +24,8 @@ public class TranscendentPlasmaMixerRecipes implements Runnable { @Override public void run() { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) .fluidInputs( Materials.Helium.getPlasma(1000), Materials.Iron.getPlasma(1000), @@ -37,8 +37,8 @@ public class TranscendentPlasmaMixerRecipes implements Runnable { .noOptimize() .addTo(transcendentPlasmaMixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(2)) .fluidInputs( Materials.Helium.getPlasma(1000), Materials.Iron.getPlasma(1000), @@ -54,8 +54,8 @@ public class TranscendentPlasmaMixerRecipes implements Runnable { .noOptimize() .addTo(transcendentPlasmaMixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(3)) .fluidInputs( Materials.Helium.getPlasma(1000), Materials.Iron.getPlasma(1000), @@ -75,8 +75,8 @@ public class TranscendentPlasmaMixerRecipes implements Runnable { .noOptimize() .addTo(transcendentPlasmaMixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(4)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(4)) .fluidInputs( Materials.Helium.getPlasma(1000), Materials.Iron.getPlasma(1000), @@ -100,8 +100,8 @@ public class TranscendentPlasmaMixerRecipes implements Runnable { .noOptimize() .addTo(transcendentPlasmaMixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(5)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(5)) .fluidInputs( Materials.Helium.getPlasma(1000), Materials.Iron.getPlasma(1000), @@ -129,8 +129,8 @@ public class TranscendentPlasmaMixerRecipes implements Runnable { .noOptimize() .addTo(transcendentPlasmaMixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(24)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(24)) .fluidInputs( MaterialsUEVplus.RawStarMatter.getFluid(1000L), MaterialsUEVplus.SpaceTime.getMolten(1000L), @@ -142,12 +142,12 @@ public class TranscendentPlasmaMixerRecipes implements Runnable { .noOptimize() .addTo(transcendentPlasmaMixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(24)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(24)) .fluidInputs( - new FluidStack(ELEMENT.getInstance().FERMIUM.getPlasma(), 1000), + new FluidStack(MaterialsElements.getInstance().FERMIUM.getPlasma(), 1000), Materials.Thorium.getPlasma(1000L), - new FluidStack(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 1000), + new FluidStack(MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 1000), Materials.Calcium.getPlasma(1000L), MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1000L)) .fluidOutputs(MaterialsUEVplus.Creon.getPlasma(5000L)) diff --git a/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java index a5150948ce..89e213c31b 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/VacuumFreezerRecipes.java @@ -1,22 +1,22 @@ package gregtech.loaders.postload.recipes; import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; public class VacuumFreezerRecipes implements Runnable { @@ -26,30 +26,30 @@ public class VacuumFreezerRecipes implements Runnable { { // reactor heat switch { - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorHeatSwitch", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorHeatSwitch", 1L, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorHeatSwitch", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorHeatSwitch", 1L, 1)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorHeatSwitchCore", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorHeatSwitchCore", 1L, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorHeatSwitchCore", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorHeatSwitchCore", 1L, 1)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorHeatSwitchSpread", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorHeatSwitchSpread", 1L, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorHeatSwitchSpread", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorHeatSwitchSpread", 1L, 1)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorHeatSwitchDiamond", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorHeatSwitchDiamond", 1L, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorHeatSwitchDiamond", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorHeatSwitchDiamond", 1L, 1)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); @@ -57,39 +57,39 @@ public class VacuumFreezerRecipes implements Runnable { // reactor vent { - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorVent", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorVent", 1L, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorVent", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorVent", 1L, 1)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorVentCore", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorVentCore", 1L, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorVentCore", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorVentCore", 1L, 1)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorVentGold", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorVentGold", 1L, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorVentGold", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorVentGold", 1L, 1)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorVentDiamond", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorVentDiamond", 1L, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorVentDiamond", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorVentDiamond", 1L, 1)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); } // reactor vent spread - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorVentSpread", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorVentSpread", 1L, 0)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorVentSpread", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorVentSpread", 1L, 0)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); @@ -97,98 +97,98 @@ public class VacuumFreezerRecipes implements Runnable { // reactor coolant { - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorCoolantSimple", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorCoolantSimple", 1L, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorCoolantSimple", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorCoolantSimple", 1L, 1)) .duration(10 * TICKS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorCoolantTriple", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorCoolantTriple", 1L, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorCoolantTriple", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorCoolantTriple", 1L, 1)) .duration(1 * SECONDS + 10 * TICKS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("reactorCoolantSix", 1L, 32767)) - .itemOutputs(GT_ModHandler.getIC2Item("reactorCoolantSix", 1L, 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("reactorCoolantSix", 1L, 32767)) + .itemOutputs(GTModHandler.getIC2Item("reactorCoolantSix", 1L, 1)) .duration(3 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_He_1.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_He_1.get(1L)) .duration(3 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_He_3.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_He_3.get(1L)) .duration(9 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_He_6.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_He_6.get(1L)) .duration(18 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_NaK_1.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_NaK_1.get(1L)) .duration(3 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_NaK_3.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_NaK_3.get(1L)) .duration(9 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_NaK_6.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_NaK_6.get(1L)) .duration(18 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.neutroniumHeatCapacitor.getWildcard(1L)) .itemOutputs(ItemList.neutroniumHeatCapacitor.get(1L)) .duration(13 * HOURS + 53 * MINUTES + 20 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_Sp_1.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_Sp_1.get(1L)) .duration(9 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_Sp_2.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_Sp_2.get(1L)) .duration(18 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_Sp_3.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_Sp_3.get(1L)) .duration(27 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_Sp_6.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_Sp_6.get(1L)) .duration(54 * SECONDS) @@ -200,56 +200,56 @@ public class VacuumFreezerRecipes implements Runnable { // fluid vacuum { - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Ice, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Water, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Ice, 1L)) .duration(2 * SECONDS + 10 * TICKS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LiquidOxygen, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.LiquidOxygen, 1L)) .duration(1 * MINUTES) .eut(TierEU.RECIPE_HV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Nitrogen, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LiquidNitrogen, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Nitrogen, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.LiquidNitrogen, 1L)) .duration(1 * MINUTES) .eut(TierEU.RECIPE_HV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("airCell", 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LiquidAir, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("airCell", 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.LiquidAir, 1L)) .duration(1 * SECONDS + 8 * TICKS) .eut(TierEU.RECIPE_HV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_Sp_1.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_Sp_1.get(1L)) .duration(1 * MINUTES + 30 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_Sp_2.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_Sp_2.get(1L)) .duration(3 * MINUTES) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_Sp_3.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_Sp_3.get(1L)) .duration(4 * MINUTES + 30 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Reactor_Coolant_Sp_6.getWildcard(1L)) .itemOutputs(ItemList.Reactor_Coolant_Sp_6.get(1L)) .duration(9 * MINUTES) @@ -259,44 +259,44 @@ public class VacuumFreezerRecipes implements Runnable { // Freeze superconductors. { - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Pentacadmiummagnesiumhexaoxid, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Pentacadmiummagnesiumhexaoxid, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.Pentacadmiummagnesiumhexaoxid, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Pentacadmiummagnesiumhexaoxid, 1L)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Titaniumonabariumdecacoppereikosaoxid, 1L)) + GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.Titaniumonabariumdecacoppereikosaoxid, 1L)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Titaniumonabariumdecacoppereikosaoxid, 1L)) + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Titaniumonabariumdecacoppereikosaoxid, 1L)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Uraniumtriplatinid, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Uraniumtriplatinid, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.Uraniumtriplatinid, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Uraniumtriplatinid, 1L)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Vanadiumtriindinid, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Vanadiumtriindinid, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.Vanadiumtriindinid, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Vanadiumtriindinid, 1L)) .duration(10 * SECONDS) .eut(TierEU.RECIPE_IV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get( + GTOreDictUnificator.get( OrePrefixes.ingotHot, Materials.Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid, 1L)) .itemOutputs( - GT_OreDictUnificator.get( + GTOreDictUnificator.get( OrePrefixes.ingot, Materials.Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid, 1L)) @@ -304,51 +304,51 @@ public class VacuumFreezerRecipes implements Runnable { .eut(TierEU.RECIPE_LuV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator + GTOreDictUnificator .get(OrePrefixes.ingotHot, Materials.Tetranaquadahdiindiumhexaplatiumosminid, 1L)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tetranaquadahdiindiumhexaplatiumosminid, 1L)) + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tetranaquadahdiindiumhexaplatiumosminid, 1L)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_ZPM) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Longasssuperconductornameforuvwire, 1L)) + GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.Longasssuperconductornameforuvwire, 1L)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Longasssuperconductornameforuvwire, 1L)) + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Longasssuperconductornameforuvwire, 1L)) .duration(40 * SECONDS) .eut(TierEU.RECIPE_UV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.Longasssuperconductornameforuhvwire, 1L)) + GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.Longasssuperconductornameforuhvwire, 1L)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Longasssuperconductornameforuhvwire, 1L)) + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Longasssuperconductornameforuhvwire, 1L)) .duration(1 * MINUTES + 20 * SECONDS) .eut(TierEU.RECIPE_UHV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUEVBase, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.SuperconductorUEVBase, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUEVBase, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.SuperconductorUEVBase, 1L)) .duration(2 * MINUTES + 40 * SECONDS) .eut(TierEU.RECIPE_UEV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUIVBase, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.SuperconductorUIVBase, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUIVBase, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.SuperconductorUIVBase, 1L)) .duration(2 * MINUTES + 40 * SECONDS) .eut(TierEU.RECIPE_UIV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUMVBase, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.SuperconductorUMVBase, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, Materials.SuperconductorUMVBase, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.SuperconductorUMVBase, 1L)) .duration(2 * MINUTES + 40 * SECONDS) .eut(TierEU.RECIPE_UMV) .addTo(vacuumFreezerRecipes); @@ -356,42 +356,42 @@ public class VacuumFreezerRecipes implements Runnable { // Plasma Freezing { - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Americium, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Americium, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Americium, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Americium, 1L)) .duration(1 * SECONDS) .eut(TierEU.RECIPE_LuV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Helium, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Helium, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Helium, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Helium, 1L)) .duration(5 * TICKS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Nitrogen, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Nitrogen, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Nitrogen, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Nitrogen, 1L)) .duration(1 * SECONDS + 8 * TICKS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Oxygen, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Oxygen, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L)) .duration(1 * SECONDS + 12 * TICKS) .eut(TierEU.RECIPE_MV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Radon, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Radon, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.cellPlasma, Materials.Radon, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.cell, Materials.Radon, 1L)) .duration(5 * SECONDS + 10 * TICKS) .eut(TierEU.RECIPE_HV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs(Materials.Boron.getPlasma(144L)) .fluidOutputs(Materials.Boron.getMolten(144L)) .duration(1 * SECONDS) @@ -400,9 +400,9 @@ public class VacuumFreezerRecipes implements Runnable { } // hot transcendent metal ingot cooling - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, MaterialsUEVplus.TranscendentMetal, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, MaterialsUEVplus.TranscendentMetal, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, MaterialsUEVplus.TranscendentMetal, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, MaterialsUEVplus.TranscendentMetal, 1L)) .fluidInputs( new FluidStack(FluidRegistry.getFluid("molten.titansteel"), 144), Materials.SuperCoolant.getFluid(1000)) @@ -410,10 +410,10 @@ public class VacuumFreezerRecipes implements Runnable { .eut(TierEU.RECIPE_UIV) .addTo(vacuumFreezerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingotHot, MaterialsUEVplus.Mellion, 9L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.ingotHot, MaterialsUEVplus.Mellion, 9L)) .fluidInputs(MaterialsUEVplus.Creon.getPlasma(1296L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.ingot, MaterialsUEVplus.Mellion, 9L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.ingot, MaterialsUEVplus.Mellion, 9L)) .fluidOutputs(MaterialsUEVplus.Creon.getMolten(1296L)) .duration(40 * SECONDS) .eut(TierEU.RECIPE_UMV) diff --git a/src/main/java/gregtech/loaders/postload/recipes/WiremillRecipes.java b/src/main/java/gregtech/loaders/postload/recipes/WiremillRecipes.java index b91163619b..76fea74bdc 100644 --- a/src/main/java/gregtech/loaders/postload/recipes/WiremillRecipes.java +++ b/src/main/java/gregtech/loaders/postload/recipes/WiremillRecipes.java @@ -1,19 +1,19 @@ package gregtech.loaders.postload.recipes; import static gregtech.api.recipe.RecipeMaps.wiremillRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeRegistrator.registerWiremillRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeRegistrator.registerWiremillRecipes; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; public class WiremillRecipes implements Runnable { @@ -24,16 +24,16 @@ public class WiremillRecipes implements Runnable { registerWiremillRecipes(MaterialsUEVplus.SpaceTime, 20 * SECONDS, (int) TierEU.RECIPE_LuV); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Polycaprolactam, 1L)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Polycaprolactam, 1L)) .itemOutputs(new ItemStack(Items.string, 32)) .duration(4 * SECONDS) .eut(48) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Steel, 1)) - .itemOutputs(GT_ModHandler.getIC2Item("miningPipe", 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Steel, 1)) + .itemOutputs(GTModHandler.getIC2Item("miningPipe", 1)) .duration(10 * SECONDS) .eut(16) .addTo(wiremillRecipes); diff --git a/src/main/java/gregtech/loaders/preload/GTPreLoad.java b/src/main/java/gregtech/loaders/preload/GTPreLoad.java new file mode 100644 index 0000000000..f0eb4c6d8c --- /dev/null +++ b/src/main/java/gregtech/loaders/preload/GTPreLoad.java @@ -0,0 +1,654 @@ +package gregtech.loaders.preload; + +import static gregtech.GTMod.GT_FML_LOGGER; +import static gregtech.api.enums.Mods.CraftTweaker; +import static gregtech.api.enums.Mods.GalacticraftCore; +import static gregtech.api.enums.Mods.GregTech; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.PrintStream; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import net.minecraft.client.Minecraft; +import net.minecraft.init.Blocks; +import net.minecraft.launchwrapper.Launch; +import net.minecraftforge.common.config.Configuration; + +import org.apache.commons.lang3.StringUtils; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.LoadController; +import cpw.mods.fml.common.Loader; +import cpw.mods.fml.common.ModContainer; +import cpw.mods.fml.common.discovery.ASMDataTable; +import cpw.mods.fml.common.discovery.ModDiscoverer; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.recipe.RecipeCategory; +import gregtech.api.recipe.RecipeCategoryHolder; +import gregtech.api.recipe.RecipeCategorySetting; +import gregtech.api.util.GTConfig; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTUtility; +import gregtech.common.GTProxy; +import gregtech.common.config.client.ConfigColorModulation; +import gregtech.common.config.client.ConfigInterface; +import gregtech.common.config.client.ConfigRender; +import gregtech.common.config.client.ConfigWaila; +import gregtech.common.config.gregtech.ConfigDebug; +import gregtech.common.config.gregtech.ConfigFeatures; +import gregtech.common.config.gregtech.ConfigGeneral; +import gregtech.common.config.gregtech.ConfigMachines; +import gregtech.common.config.gregtech.ConfigOreDropBehavior; +import gregtech.common.config.gregtech.ConfigPollution; +import gregtech.common.tileentities.machines.long_distance.MTELongDistancePipelineBase; +import gregtech.common.tileentities.machines.multi.MTECleanroom; + +public class GTPreLoad { + + public static void sortToTheEnd() { + try { + GT_FML_LOGGER.info("GTMod: Sorting GregTech to the end of the Mod List for further processing."); + LoadController tLoadController = (LoadController) GTUtility + .getFieldContent(Loader.instance(), "modController", true, true); + assert tLoadController != null; + List tModList = tLoadController.getActiveModList(); + List tNewModsList = new ArrayList<>(); + ModContainer tGregTech = null; + short tModList_sS = (short) tModList.size(); + for (short i = 0; i < tModList_sS; i = (short) (i + 1)) { + ModContainer tMod = tModList.get(i); + if (tMod.getModId() + .equalsIgnoreCase(GregTech.ID)) { + tGregTech = tMod; + } else { + tNewModsList.add(tMod); + } + } + if (tGregTech != null) { + tNewModsList.add(tGregTech); + } + Objects.requireNonNull(GTUtility.getField(tLoadController, "activeModList", true, true)) + .set(tLoadController, tNewModsList); + } catch (Throwable e) { + GTMod.logStackTrace(e); + } + } + + public static void initLocalization(File languageDir) { + GT_FML_LOGGER.info("GTMod: Generating Lang-File"); + + if (FMLCommonHandler.instance() + .getEffectiveSide() + .isClient()) { + String userLang = Minecraft.getMinecraft() + .getLanguageManager() + .getCurrentLanguage() + .getLanguageCode(); + GT_FML_LOGGER.info("User lang is " + userLang); + if (userLang.equals("en_US")) { + GT_FML_LOGGER.info("Loading GregTech.lang"); + GTLanguageManager.isEN_US = true; + GTLanguageManager.sEnglishFile = new Configuration(new File(languageDir, "GregTech.lang")); + } else { + String l10nFileName = "GregTech_" + userLang + ".lang"; + File l10nFile = new File(languageDir, l10nFileName); + if (l10nFile.isFile()) { + GT_FML_LOGGER.info("Loading l10n file: " + l10nFileName); + GTLanguageManager.sEnglishFile = new Configuration(l10nFile); + } else { + GT_FML_LOGGER.info("Cannot find l10n file " + l10nFileName + ", fallback to GregTech.lang"); + GTLanguageManager.isEN_US = true; + GTLanguageManager.sEnglishFile = new Configuration(new File(languageDir, "GregTech.lang")); + } + } + } else { + GTLanguageManager.isEN_US = true; + GTLanguageManager.sEnglishFile = new Configuration(new File(languageDir, "GregTech.lang")); + } + GTLanguageManager.sEnglishFile.load(); + + Materials.getMaterialsMap() + .values() + .parallelStream() + .filter(Objects::nonNull) + .forEach( + aMaterial -> aMaterial.mLocalizedName = GTLanguageManager + .addStringLocalization("Material." + aMaterial.mName.toLowerCase(), aMaterial.mDefaultLocalName)); + } + + public static void getConfiguration(File configDir) { + File tFile = new File(new File(configDir, "GregTech"), "IDs.cfg"); + GTConfig.sConfigFileIDs = new Configuration(tFile); + GTConfig.sConfigFileIDs.load(); + GTConfig.sConfigFileIDs.save(); + + tFile = new File(new File(configDir, "GregTech"), "Cleanroom.cfg"); + GTConfig.cleanroomFile = new Configuration(tFile); + GTConfig.cleanroomFile.load(); + GTConfig.cleanroomFile.save(); + + tFile = new File(new File(configDir, "GregTech"), "UndergroundFluids.cfg"); + GTConfig.undergroundFluidsFile = new Configuration(tFile); + GTConfig.undergroundFluidsFile.load(); + GTConfig.undergroundFluidsFile.save(); + + GregTechAPI.NEIClientFIle = new GTConfig( + new Configuration(new File(new File(configDir, "GregTech"), "NEIClient.cfg"))); + + } + + public static void createLogFiles(File parentFile) { + GTLog.mLogFile = new File(parentFile, "logs/GregTech.log"); + if (!GTLog.mLogFile.exists()) { + try { + GTLog.mLogFile.createNewFile(); + } catch (Throwable ignored) {} + } + try { + GTLog.out = GTLog.err = new PrintStream(GTLog.mLogFile); + } catch (FileNotFoundException ignored) {} + + if (ConfigGeneral.loggingOreDict) { + GTLog.mOreDictLogFile = new File(parentFile, "logs/OreDict.log"); + if (!GTLog.mOreDictLogFile.exists()) { + try { + GTLog.mOreDictLogFile.createNewFile(); + } catch (Throwable ignored) {} + } + List tList = ((GTLog.LogBuffer) GTLog.ore).mBufferedOreDictLog; + try { + GTLog.ore = new PrintStream(GTLog.mOreDictLogFile); + } catch (Throwable ignored) {} + GTLog.ore.println("******************************************************************************"); + GTLog.ore.println("* This is the complete log of the GT5-Unofficial OreDictionary Handler. It *"); + GTLog.ore.println("* processes all OreDictionary entries and can sometimes cause errors. All *"); + GTLog.ore.println("* entries and errors are being logged. If you see an error please raise an *"); + GTLog.ore.println("* issue at https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues. *"); + GTLog.ore.println("******************************************************************************"); + tList.forEach(GTLog.ore::println); + } + if (ConfigGeneral.loggingExplosions) { + GTLog.mExplosionLog = new File(parentFile, "logs/Explosion.log"); + if (!GTLog.mExplosionLog.exists()) { + try { + GTLog.mExplosionLog.createNewFile(); + } catch (Throwable ignored) {} + } + try { + GTLog.exp = new PrintStream(GTLog.mExplosionLog); + } catch (Throwable ignored) {} + } + + if (ConfigGeneral.loggingPlayerActicity) { + GTLog.mPlayerActivityLogFile = new File(parentFile, "logs/PlayerActivity.log"); + if (!GTLog.mPlayerActivityLogFile.exists()) { + try { + GTLog.mPlayerActivityLogFile.createNewFile(); + } catch (Throwable ignored) {} + } + try { + GTLog.pal = new PrintStream(GTLog.mPlayerActivityLogFile); + } catch (Throwable ignored) {} + } + } + + public static void runMineTweakerCompat() { + if (!CraftTweaker.isModLoaded()) return; + + GT_FML_LOGGER.info("preReader"); + final List oreTags = new ArrayList<>(); + final File globalDir = new File("scripts"); + if (globalDir.exists()) { + final List scripts = new ArrayList<>(); + for (File file : Objects.requireNonNull(globalDir.listFiles())) { + if (file.getName() + .endsWith(".zs")) { + try (BufferedReader br = new BufferedReader(new FileReader(file))) { + String line; + while ((line = br.readLine()) != null) { + scripts.add(line); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + String pattern1 = "<"; + String pattern2 = ">"; + + Pattern p = Pattern.compile(Pattern.quote(pattern1) + "(.*?)" + Pattern.quote(pattern2)); + for (String text : scripts) { + Matcher m = p.matcher(text); + while (m.find()) { + String hit = m.group(1); + if (hit.startsWith("ore:")) { + hit = hit.substring(4); + if (!oreTags.contains(hit)) oreTags.add(hit); + } else if (hit.startsWith("gregtech:gt.metaitem.0")) { + hit = hit.substring(22); + int mIt = Integer.parseInt(hit.substring(0, 1)); + if (mIt > 0) { + int meta = 0; + try { + hit = hit.substring(2); + meta = Integer.parseInt(hit); + } catch (Exception e) { + GT_FML_LOGGER.info("parseError: " + hit); + } + if (meta > 0 && meta < 32000) { + int prefix = meta / 1000; + int material = meta % 1000; + String tag = ""; + String[] tags = new String[] {}; + if (mIt == 1) tags = new String[] { "dustTiny", "dustSmall", "dust", "dustImpure", + "dustPure", "crushed", "crushedPurified", "crushedCentrifuged", "gem", "nugget", + null, "ingot", "ingotHot", "ingotDouble", "ingotTriple", "ingotQuadruple", + "ingotQuintuple", "plate", "plateDouble", "plateTriple", "plateQuadruple", + "plateQuintuple", "plateDense", "stick", "lens", "round", "bolt", "screw", "ring", + "foil", "cell", "cellPlasma", "cellMolten", "rawOre" }; + if (mIt == 2) tags = new String[] { "toolHeadSword", "toolHeadPickaxe", + "toolHeadShovel", "toolHeadAxe", "toolHeadHoe", "toolHeadHammer", "toolHeadFile", + "toolHeadSaw", "toolHeadDrill", "toolHeadChainsaw", "toolHeadWrench", + "toolHeadUniversalSpade", "toolHeadSense", "toolHeadPlow", "toolHeadArrow", + "toolHeadBuzzSaw", "turbineBlade", null, null, "wireFine", "gearGtSmall", "rotor", + "stickLong", "springSmall", "spring", "arrowGtWood", "arrowGtPlastic", "gemChipped", + "gemFlawed", "gemFlawless", "gemExquisite", "gearGt" }; + if (mIt == 3) tags = new String[] { "itemCasing", "nanite" }; + if (tags.length > prefix) tag = tags[prefix]; + if (GregTechAPI.sGeneratedMaterials[material] != null) { + tag += GregTechAPI.sGeneratedMaterials[material].mName; + if (!oreTags.contains(tag)) oreTags.add(tag); + } else if (material > 0) { + GT_FML_LOGGER.info("MaterialDisabled: " + material + " " + m.group(1)); + } + } + } + } + } + } + } + + final String[] preS = new String[] { "dustTiny", "dustSmall", "dust", "dustImpure", "dustPure", "crushed", + "crushedPurified", "crushedCentrifuged", "gem", "nugget", "ingot", "ingotHot", "ingotDouble", "ingotTriple", + "ingotQuadruple", "ingotQuintuple", "plate", "plateDouble", "plateTriple", "plateQuadruple", + "plateQuintuple", "plateDense", "stick", "lens", "round", "bolt", "screw", "ring", "foil", "cell", + "cellPlasma", "toolHeadSword", "toolHeadPickaxe", "toolHeadShovel", "toolHeadAxe", "toolHeadHoe", + "toolHeadHammer", "toolHeadFile", "toolHeadSaw", "toolHeadDrill", "toolHeadChainsaw", "toolHeadWrench", + "toolHeadUniversalSpade", "toolHeadSense", "toolHeadPlow", "toolHeadArrow", "toolHeadBuzzSaw", + "turbineBlade", "wireFine", "gearGtSmall", "rotor", "stickLong", "springSmall", "spring", "arrowGtWood", + "arrowGtPlastic", "gemChipped", "gemFlawed", "gemFlawless", "gemExquisite", "gearGt", "nanite", + "cellMolten", "rawOre" }; + + List mMTTags = new ArrayList<>(); + oreTags.stream() + .filter(test -> StringUtils.startsWithAny(test, preS)) + .forEach(test -> { + mMTTags.add(test); + if (GTValues.D1) GT_FML_LOGGER.info("oretag: " + test); + }); + + GT_FML_LOGGER.info("reenableMetaItems"); + + for (String reEnable : mMTTags) { + OrePrefixes tPrefix = OrePrefixes.getOrePrefix(reEnable); + if (tPrefix != null) { + Materials tName = Materials.get(reEnable.replaceFirst(tPrefix.toString(), "")); + if (tName != null) { + tPrefix.mDisabledItems.remove(tName); + tPrefix.mGeneratedItems.add(tName); + if (tPrefix == OrePrefixes.screw) { + OrePrefixes.bolt.mDisabledItems.remove(tName); + OrePrefixes.bolt.mGeneratedItems.add(tName); + OrePrefixes.stick.mDisabledItems.remove(tName); + OrePrefixes.stick.mGeneratedItems.add(tName); + } + if (tPrefix == OrePrefixes.round) { + OrePrefixes.nugget.mDisabledItems.remove(tName); + OrePrefixes.nugget.mGeneratedItems.add(tName); + } + if (tPrefix == OrePrefixes.spring) { + OrePrefixes.stickLong.mDisabledItems.remove(tName); + OrePrefixes.stickLong.mGeneratedItems.add(tName); + OrePrefixes.stick.mDisabledItems.remove(tName); + OrePrefixes.stick.mGeneratedItems.add(tName); + } + if (tPrefix == OrePrefixes.springSmall) { + OrePrefixes.stick.mDisabledItems.remove(tName); + OrePrefixes.stick.mGeneratedItems.add(tName); + } + if (tPrefix == OrePrefixes.stickLong) { + OrePrefixes.stick.mDisabledItems.remove(tName); + OrePrefixes.stick.mGeneratedItems.add(tName); + } + if (tPrefix == OrePrefixes.rotor) { + OrePrefixes.ring.mDisabledItems.remove(tName); + OrePrefixes.ring.mGeneratedItems.add(tName); + } + } else { + GT_FML_LOGGER.info("noMaterial " + reEnable); + } + } else { + GT_FML_LOGGER.info("noPrefix " + reEnable); + } + } + } + + public static void adjustScrap() { + GT_FML_LOGGER.info("GTMod: Removing all original Scrapbox Drops."); + try { + Objects.requireNonNull(GTUtility.getField("ic2.core.item.ItemScrapbox$Drop", "topChance", true, true)) + .set(null, 0); + ((List) Objects.requireNonNull( + GTUtility.getFieldContent( + GTUtility.getFieldContent("ic2.api.recipe.Recipes", "scrapboxDrops", true, true), + "drops", + true, + true))).clear(); + } catch (Throwable e) { + if (GTValues.D1) { + e.printStackTrace(GTLog.err); + } + } + GTLog.out.println("GTMod: Adding Scrap with a Weight of 200.0F to the Scrapbox Drops."); + GTModHandler.addScrapboxDrop(200.0F, GTModHandler.getIC2Item("scrap", 1L)); + } + + public static void loadConfig() { + // general + GTValues.D1 = ConfigDebug.D1; + GTValues.D2 = ConfigDebug.D2; + GTValues.allow_broken_recipemap = ConfigDebug.allowBrokenRecipeMap; + GTValues.debugCleanroom = ConfigDebug.debugCleanroom; + GTValues.debugDriller = ConfigDebug.debugDriller; + GTValues.debugWorldGen = ConfigDebug.debugWorldgen; + GTValues.debugOrevein = ConfigDebug.debugOrevein; + GTValues.debugSmallOres = ConfigDebug.debugSmallOres; + GTValues.debugStones = ConfigDebug.debugStones; + GTValues.debugBlockMiner = ConfigDebug.debugBlockMiner; + GTValues.debugBlockPump = ConfigDebug.debugBlockPump; + GTValues.debugEntityCramming = ConfigDebug.debugEntityCramming; + GTValues.debugWorldData = ConfigDebug.debugWorldData; + GTValues.oreveinPercentage = ConfigGeneral.oreveinPercentage; + GTValues.oreveinAttempts = ConfigGeneral.oreveinAttempts; + GTValues.oreveinMaxPlacementAttempts = ConfigGeneral.oreveinMaxPlacementAttempts; + GTValues.oreveinPlacerOres = ConfigGeneral.oreveinPlacerOres; + GTValues.oreveinPlacerOresMultiplier = ConfigGeneral.oreveinPlacerOresMultiplier; + GregTechAPI.TICKS_FOR_LAG_AVERAGING = ConfigGeneral.ticksForLagAveraging; + GregTechAPI.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING = ConfigGeneral.millisecondThesholdUntilLagWarning; + GregTechAPI.sTimber = ConfigGeneral.timber; + GregTechAPI.sDrinksAlwaysDrinkable = ConfigGeneral.drinksAlwaysDrinkable; + GregTechAPI.sDoShowAllItemsInCreative = ConfigGeneral.doShowAllItemsInCreative; + GregTechAPI.sMultiThreadedSounds = ConfigGeneral.multiThreadedSounds; + GTMod.gregtechproxy.mMaxEqualEntitiesAtOneSpot = ConfigGeneral.maxEqualEntitiesAtOneSpot; + GTMod.gregtechproxy.mFlintChance = ConfigGeneral.flintChance; + GTMod.gregtechproxy.mItemDespawnTime = ConfigGeneral.itemDespawnTime; + GTMod.gregtechproxy.mAllowSmallBoilerAutomation = ConfigGeneral.allowSmallBoilerAutomation; + GTMod.gregtechproxy.mDisableVanillaOres = gregtech.common.config.worldgen.ConfigGeneral.disableVanillaOres; + GTMod.gregtechproxy.mIncreaseDungeonLoot = ConfigGeneral.increaseDungeonLoot; + GTMod.gregtechproxy.mAxeWhenAdventure = ConfigGeneral.axeWhenAdventure; + GTMod.gregtechproxy.mSurvivalIntoAdventure = ConfigGeneral.survivalIntoAdventure; + GTMod.gregtechproxy.mHungerEffect = ConfigGeneral.hungerEffect; + GTMod.gregtechproxy.mInventoryUnification = ConfigGeneral.inventoryUnification; + GTMod.gregtechproxy.mGTBees = ConfigGeneral.GTBees; + GTMod.gregtechproxy.mCraftingUnification = ConfigGeneral.craftingUnification; + GTMod.gregtechproxy.mNerfedWoodPlank = ConfigGeneral.nerfedWoodPlank; + GTMod.gregtechproxy.mNerfedVanillaTools = ConfigGeneral.nerfedVanillaTools; + GTMod.gregtechproxy.mAchievements = ConfigGeneral.achievements; + GTMod.gregtechproxy.mHideUnusedOres = ConfigGeneral.hideUnusedOres; + GTMod.gregtechproxy.mEnableAllMaterials = ConfigGeneral.enableAllMaterials; + GTMod.gregtechproxy.mExplosionItemDrop = ConfigGeneral.explosionItemDrop; + GTMod.gregtechproxy.mEnableCleanroom = ConfigGeneral.enableCleanroom; + GTMod.gregtechproxy.mLowGravProcessing = GalacticraftCore.isModLoaded() && ConfigGeneral.lowGravProcessing; + GTMod.gregtechproxy.mCropNeedBlock = ConfigGeneral.cropNeedBlock; + GTMod.gregtechproxy.mAMHInteraction = ConfigGeneral.autoMaintenaceHatchesInteraction; + GTMod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre = ConfigGeneral.mixedOreOnlyYieldsTwoThirdsOfPureOre; + GTMod.gregtechproxy.mRichOreYieldMultiplier = ConfigGeneral.richOreYieldMultiplier; + GTMod.gregtechproxy.mNetherOreYieldMultiplier = ConfigGeneral.netherOreYieldMultiplier; + GTMod.gregtechproxy.mEndOreYieldMultiplier = ConfigGeneral.endOreYieldMultiplier; + GTMod.gregtechproxy.gt6Pipe = ConfigGeneral.gt6Pipe; + GTMod.gregtechproxy.gt6Cable = ConfigGeneral.gt6Cable; + GTMod.gregtechproxy.ic2EnergySourceCompat = ConfigGeneral.ic2EnergySourceCompat; + GTMod.gregtechproxy.costlyCableConnection = ConfigGeneral.costlyCableConnection; + GTMod.gregtechproxy.crashOnNullRecipeInput = ConfigGeneral.crashOnNullRecipeInput; + if ((boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment")) { + GTMod.gregtechproxy.crashOnNullRecipeInput = false; // Use flags in GTRecipeBuilder instead! + } + GTLanguageManager.i18nPlaceholder = ConfigGeneral.i18nPlaceholder; + MTELongDistancePipelineBase.minimalDistancePoints = ConfigGeneral.minimalDistancePoints; + GTValues.mCTMEnabledBlock.addAll(Arrays.asList(ConfigGeneral.CTMWhitelist)); + GTValues.mCTMDisabledBlock.addAll(Arrays.asList(ConfigGeneral.CTMBlacklist)); + if (ConfigGeneral.harderMobSpawner) { + Blocks.mob_spawner.setHardness(500.0F) + .setResistance(6000000.0F); + } + + // machines + GTValues.ticksBetweenSounds = ConfigMachines.ticksBetweenSounds; + GTValues.blacklistedTileEntiyClassNamesForWA = ConfigMachines.blacklistedTileEntiyClassNamesForWA; + GTValues.cleanroomGlass = ConfigMachines.cleanroomGlass; + GTValues.enableChunkloaders = ConfigMachines.enableChunkloaders; + GTValues.alwaysReloadChunkloaders = ConfigMachines.alwaysReloadChunkloaders; + GTValues.debugChunkloaders = ConfigDebug.debugChunkloaders; + GTValues.disableDigitalChestsExternalAccess = ConfigMachines.disableDigitalChestsExternalAccess; + GTValues.enableMultiTileEntities = ConfigMachines.enableMultiTileEntities + || (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); + GregTechAPI.sMachineExplosions = ConfigMachines.machineExplosions; + GregTechAPI.sMachineFlammable = ConfigMachines.machineFlammable; + GregTechAPI.sMachineNonWrenchExplosions = ConfigMachines.machineNonWrenchExplosions; + GregTechAPI.sMachineWireFire = ConfigMachines.machineWireFire; + GregTechAPI.sMachineFireExplosions = ConfigMachines.machineFireExplosions; + GregTechAPI.sMachineRainExplosions = ConfigMachines.machineRainExplosions; + GregTechAPI.sMachineThunderExplosions = ConfigMachines.machineThunderExplosions; + GregTechAPI.sColoredGUI = ConfigMachines.coloredGUI; + GregTechAPI.sMachineMetalGUI = ConfigMachines.machineMetalGUI; + // Implementation for this is actually handled in NewHorizonsCoreMod in MainRegistry.java! + GregTechAPI.sUseMachineMetal = ConfigMachines.useMachineMetal; + + // client + loadClientConfig(); + + // Pollution + GTMod.gregtechproxy.mPollution = ConfigPollution.pollution; + GTMod.gregtechproxy.mPollutionSmogLimit = ConfigPollution.pollutionSmogLimit; + GTMod.gregtechproxy.mPollutionPoisonLimit = ConfigPollution.pollutionPoisonLimit; + GTMod.gregtechproxy.mPollutionVegetationLimit = ConfigPollution.pollutionVegetationLimit; + GTMod.gregtechproxy.mPollutionSourRainLimit = ConfigPollution.pollutionSourRainLimit; + GTMod.gregtechproxy.mPollutionOnExplosion = ConfigPollution.pollutionOnExplosion; + GTMod.gregtechproxy.mPollutionPrimitveBlastFurnacePerSecond = ConfigPollution.pollutionPrimitveBlastFurnacePerSecond; + GTMod.gregtechproxy.mPollutionCharcoalPitPerSecond = ConfigPollution.pollutionCharcoalPitPerSecond; + GTMod.gregtechproxy.mPollutionEBFPerSecond = ConfigPollution.pollutionEBFPerSecond; + GTMod.gregtechproxy.mPollutionLargeCombustionEnginePerSecond = ConfigPollution.pollutionLargeCombustionEnginePerSecond; + GTMod.gregtechproxy.mPollutionExtremeCombustionEnginePerSecond = ConfigPollution.pollutionExtremeCombustionEnginePerSecond; + GTMod.gregtechproxy.mPollutionImplosionCompressorPerSecond = ConfigPollution.pollutionImplosionCompressorPerSecond; + GTMod.gregtechproxy.mPollutionLargeBronzeBoilerPerSecond = ConfigPollution.pollutionLargeBronzeBoilerPerSecond; + GTMod.gregtechproxy.mPollutionLargeSteelBoilerPerSecond = ConfigPollution.pollutionLargeSteelBoilerPerSecond; + GTMod.gregtechproxy.mPollutionLargeTitaniumBoilerPerSecond = ConfigPollution.pollutionLargeTitaniumBoilerPerSecond; + GTMod.gregtechproxy.mPollutionLargeTungstenSteelBoilerPerSecond = ConfigPollution.pollutionLargeTungstenSteelBoilerPerSecond; + GTMod.gregtechproxy.mPollutionReleasedByThrottle = ConfigPollution.pollutionReleasedByThrottle; + GTMod.gregtechproxy.mPollutionLargeGasTurbinePerSecond = ConfigPollution.pollutionLargeGasTurbinePerSecond; + GTMod.gregtechproxy.mPollutionMultiSmelterPerSecond = ConfigPollution.pollutionMultiSmelterPerSecond; + GTMod.gregtechproxy.mPollutionPyrolyseOvenPerSecond = ConfigPollution.pollutionPyrolyseOvenPerSecond; + GTMod.gregtechproxy.mPollutionSmallCoalBoilerPerSecond = ConfigPollution.pollutionSmallCoalBoilerPerSecond; + GTMod.gregtechproxy.mPollutionHighPressureLavaBoilerPerSecond = ConfigPollution.pollutionHighPressureLavaBoilerPerSecond; + GTMod.gregtechproxy.mPollutionHighPressureCoalBoilerPerSecond = ConfigPollution.pollutionHighPressureCoalBoilerPerSecond; + GTMod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond = ConfigPollution.pollutionBaseDieselGeneratorPerSecond; + double[] mPollutionDieselGeneratorReleasedByTier = ConfigPollution.pollutionDieselGeneratorReleasedByTier; + if (mPollutionDieselGeneratorReleasedByTier.length + == GTMod.gregtechproxy.mPollutionDieselGeneratorReleasedByTier.length) { + GTMod.gregtechproxy.mPollutionDieselGeneratorReleasedByTier = mPollutionDieselGeneratorReleasedByTier; + } else { + GT_FML_LOGGER + .error("The Length of the Diesel Turbine Pollution Array Config must be the same as the Default"); + } + GTMod.gregtechproxy.mPollutionBaseGasTurbinePerSecond = ConfigPollution.pollutionBaseGasTurbinePerSecond; + double[] mPollutionGasTurbineReleasedByTier = ConfigPollution.pollutionGasTurbineReleasedByTier; + if (mPollutionGasTurbineReleasedByTier.length + == GTMod.gregtechproxy.mPollutionGasTurbineReleasedByTier.length) { + GTMod.gregtechproxy.mPollutionGasTurbineReleasedByTier = mPollutionGasTurbineReleasedByTier; + } else { + GT_FML_LOGGER.error("The Length of the Gas Turbine Pollution Array Config must be the same as the Default"); + } + + // cleanroom file + if (GTMod.gregtechproxy.mEnableCleanroom) MTECleanroom.loadConfig(GTConfig.cleanroomFile); + + // underground fluids file + GTMod.gregtechproxy.mUndergroundOil.getConfig(GTConfig.undergroundFluidsFile, "undergroundfluid"); + + // Worldgeneration.cfg + GTMod.gregtechproxy.enableUndergroundGravelGen = gregtech.common.config.worldgen.ConfigGeneral.generateUndergroundGravelGen; + GTMod.gregtechproxy.enableUndergroundDirtGen = gregtech.common.config.worldgen.ConfigGeneral.generateUndergroundDirtGen; + GTMod.gregtechproxy.enableBlackGraniteOres = gregtech.common.config.worldgen.ConfigGeneral.generateBlackGraniteOres; + GTMod.gregtechproxy.enableRedGraniteOres = gregtech.common.config.worldgen.ConfigGeneral.generateBlackGraniteOres; + GTMod.gregtechproxy.enableMarbleOres = gregtech.common.config.worldgen.ConfigGeneral.generateMarbleOres; + GTMod.gregtechproxy.enableBasaltOres = gregtech.common.config.worldgen.ConfigGeneral.generateBasaltOres; + + // OverpoweredStuff.cfg + GregTechAPI.mOutputRF = gregtech.common.config.opstuff.ConfigGeneral.outputRF; + GregTechAPI.mInputRF = gregtech.common.config.opstuff.ConfigGeneral.inputRF; + GregTechAPI.mEUtoRF = gregtech.common.config.opstuff.ConfigGeneral.howMuchRFWith100EUInInput; + GregTechAPI.mRFtoEU = gregtech.common.config.opstuff.ConfigGeneral.howMuchEUWith100RFInInput; + GregTechAPI.mRFExplosions = gregtech.common.config.opstuff.ConfigGeneral.RFExplosions; + + // MachineStats.cfg + GTMod.gregtechproxy.mForceFreeFace = gregtech.common.config.machinestats.ConfigMachines.forceFreeFace; + + // ore_drop_behavior + try { + GTLog.out.println("Trying to set it to: " + ConfigOreDropBehavior.setting); + GTMod.gregtechproxy.oreDropSystem = GTProxy.OreDropSystem.valueOf(ConfigOreDropBehavior.setting);; + } catch (IllegalArgumentException e) { + GTLog.err.println(e); + GTMod.gregtechproxy.oreDropSystem = GTProxy.OreDropSystem.FortuneItem; + } + + // features + GTMod.gregtechproxy.mUpgradeCount = Math.min(64, Math.max(1, ConfigFeatures.upgradeStackSize)); + for (OrePrefixes tPrefix : OrePrefixes.values()) { + if (tPrefix.mIsUsedForOreProcessing) { + tPrefix.mDefaultStackSize = ((byte) Math.min(64, Math.max(1, ConfigFeatures.maxOreStackSize))); + } else if (tPrefix == OrePrefixes.plank) { + tPrefix.mDefaultStackSize = ((byte) Math.min(64, Math.max(16, ConfigFeatures.maxPlankStackSize))); + } else if ((tPrefix == OrePrefixes.wood) || (tPrefix == OrePrefixes.treeLeaves) + || (tPrefix == OrePrefixes.treeSapling) + || (tPrefix == OrePrefixes.log)) { + tPrefix.mDefaultStackSize = ((byte) Math.min(64, Math.max(16, ConfigFeatures.maxLogStackSize))); + } else if (tPrefix.mIsUsedForBlocks) { + tPrefix.mDefaultStackSize = ((byte) Math + .min(64, Math.max(16, ConfigFeatures.maxOtherBlocksStackSize))); + } + } + + GTRecipeBuilder.onConfigLoad(); + } + + public static void parseHex(Dyes dye, String hexString) { + dye.mRGBa[0] = Short.parseShort(hexString.substring(1, 3), 16); + dye.mRGBa[1] = Short.parseShort(hexString.substring(3, 5), 16); + dye.mRGBa[2] = Short.parseShort(hexString.substring(5), 16); + } + + public static void loadClientConfig() { + Arrays.stream(Dyes.values()) + .filter(dye -> (dye != Dyes._NULL) && (dye.mIndex < 0)) + .forEach(dye -> { + switch (dye.toString() + .toLowerCase()) { + case "cable_insulation" -> parseHex(dye, ConfigColorModulation.cableInsulation); + case "construction_foam" -> parseHex(dye, ConfigColorModulation.constructionFoam); + case "machine_metal" -> parseHex(dye, ConfigColorModulation.machineMetal); + default -> { + GT_FML_LOGGER.warn( + "unknown color modulation entry: " + dye + + ". Report this pls, as config is missing this entry being parsed in code."); + } + } + }); + GTMod.gregtechproxy.mRenderTileAmbientOcclusion = ConfigRender.renderTileAmbientOcclusion; + GTMod.gregtechproxy.mRenderGlowTextures = ConfigRender.renderGlowTextures; + GTMod.gregtechproxy.mRenderFlippedMachinesFlipped = ConfigRender.renderFlippedMachinesFlipped; + GTMod.gregtechproxy.mRenderIndicatorsOnHatch = ConfigRender.renderIndicatorsOnHatch; + GTMod.gregtechproxy.mRenderDirtParticles = ConfigRender.renderDirtParticles; + GTMod.gregtechproxy.mRenderPollutionFog = ConfigRender.renderPollutionFog; + GTMod.gregtechproxy.mRenderItemDurabilityBar = ConfigRender.renderItemDurabilityBar; + GTMod.gregtechproxy.mRenderItemChargeBar = ConfigRender.renderItemChargeBar; + GTMod.gregtechproxy.mUseBlockUpdateHandler = ConfigRender.useBlockUpdateHandler; + + GTMod.gregtechproxy.mCoverTabsVisible = ConfigInterface.coverTabsVisible; + GTMod.gregtechproxy.mCoverTabsFlipped = ConfigInterface.coverTabsFlipped; + GTMod.gregtechproxy.mTooltipVerbosity = ConfigInterface.tooltipVerbosity; + GTMod.gregtechproxy.mTooltipShiftVerbosity = ConfigInterface.tooltipShiftVerbosity; + GTMod.gregtechproxy.mTitleTabStyle = ConfigInterface.titleTabStyle; + + GTMod.gregtechproxy.mNEIRecipeSecondMode = GregTechAPI.NEIClientFIle.get("nei", "RecipeSecondMode", true); + GTMod.gregtechproxy.mNEIRecipeOwner = GregTechAPI.NEIClientFIle.get("nei", "RecipeOwner", false); + GTMod.gregtechproxy.mNEIRecipeOwnerStackTrace = GregTechAPI.NEIClientFIle + .get("nei", "RecipeOwnerStackTrace", false); + GTMod.gregtechproxy.mNEIOriginalVoltage = GregTechAPI.NEIClientFIle.get("nei", "OriginalVoltage", false); + + GTMod.gregtechproxy.recipeCategorySettings.clear(); + for (RecipeCategory recipeCategory : findRecipeCategories()) { + RecipeCategorySetting setting = RecipeCategorySetting.find( + GregTechAPI.NEIClientFIle.getWithValidValues( + "nei.recipe_categories", + recipeCategory.unlocalizedName, + RecipeCategorySetting.NAMES, + RecipeCategorySetting.getDefault() + .toName())); + GTMod.gregtechproxy.recipeCategorySettings.put(recipeCategory, setting); + } + + GTMod.gregtechproxy.mWailaTransformerVoltageTier = ConfigWaila.wailaTransformerVoltageTier; + GTMod.gregtechproxy.wailaAverageNS = ConfigWaila.wailaAverageNS; + + GTMod.gregtechproxy.reloadNEICache(); + } + + private static List findRecipeCategories() { + List ret = new ArrayList<>(); + try { + Field discovererField = Loader.class.getDeclaredField("discoverer"); + discovererField.setAccessible(true); + ModDiscoverer discoverer = (ModDiscoverer) discovererField.get(Loader.instance()); + for (ASMDataTable.ASMData asmData : discoverer.getASMTable() + .getAll(RecipeCategoryHolder.class.getName())) { + try { + Object obj = Class.forName(asmData.getClassName()) + .getDeclaredField(asmData.getObjectName()) + .get(null); + if (obj instanceof RecipeCategory recipeCategory) { + ret.add(recipeCategory); + } else { + GT_FML_LOGGER.error( + "{}#{} is not an instance of RecipeCategory", + asmData.getClassName(), + asmData.getObjectName()); + } + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { + GT_FML_LOGGER.error("Failed to find RecipeCategory"); + GT_FML_LOGGER.catching(e); + } + } + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + return ret; + } +} diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_CircuitBehaviors.java b/src/main/java/gregtech/loaders/preload/GT_Loader_CircuitBehaviors.java deleted file mode 100644 index fd66127e36..0000000000 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_CircuitBehaviors.java +++ /dev/null @@ -1,31 +0,0 @@ -package gregtech.loaders.preload; - -import gregtech.api.util.GT_Log; -import gregtech.common.redstonecircuits.GT_Circuit_BasicLogic; -import gregtech.common.redstonecircuits.GT_Circuit_BitAnd; -import gregtech.common.redstonecircuits.GT_Circuit_CombinationLock; -import gregtech.common.redstonecircuits.GT_Circuit_Equals; -import gregtech.common.redstonecircuits.GT_Circuit_Pulser; -import gregtech.common.redstonecircuits.GT_Circuit_Randomizer; -import gregtech.common.redstonecircuits.GT_Circuit_RedstoneMeter; -import gregtech.common.redstonecircuits.GT_Circuit_Repeater; -import gregtech.common.redstonecircuits.GT_Circuit_Timer; - -public class GT_Loader_CircuitBehaviors implements Runnable { - - @Override - public void run() { - GT_Log.out.println("GT_Mod: Register Redstone Circuit behaviours."); - new GT_Circuit_Timer(0); - new GT_Circuit_BasicLogic(1); - new GT_Circuit_Repeater(2); - new GT_Circuit_Pulser(3); - new GT_Circuit_RedstoneMeter(4); - - new GT_Circuit_Randomizer(8); - - new GT_Circuit_CombinationLock(16); - new GT_Circuit_BitAnd(17); - new GT_Circuit_Equals(18); - } -} diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_ItemData.java b/src/main/java/gregtech/loaders/preload/GT_Loader_ItemData.java deleted file mode 100644 index a4d1644b6b..0000000000 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_ItemData.java +++ /dev/null @@ -1,393 +0,0 @@ -package gregtech.loaders.preload; - -import static gregtech.api.enums.Mods.AppliedEnergistics2; -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.enums.Mods.PamsHarvestCraft; -import static gregtech.api.enums.Mods.Railcraft; -import static gregtech.api.enums.Mods.Thaumcraft; -import static gregtech.api.enums.Mods.TwilightForest; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.objects.ItemData; -import gregtech.api.objects.MaterialStack; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class GT_Loader_ItemData implements Runnable { - - @Override - public void run() { - GT_Log.out.println("GT_Mod: Loading Item Data Tags"); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(TwilightForest.ID, "item.giantPick", 1L, 0), - new ItemData(Materials.Stone, 696729600L, new MaterialStack(Materials.Wood, 464486400L))); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(TwilightForest.ID, "item.giantSword", 1L, 0), - new ItemData(Materials.Stone, 464486400L, new MaterialStack(Materials.Wood, 232243200L))); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(TwilightForest.ID, "tile.GiantLog", 1L, 32767), - new ItemData(Materials.Wood, 232243200L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(TwilightForest.ID, "tile.GiantCobble", 1L, 32767), - new ItemData(Materials.Stone, 232243200L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(TwilightForest.ID, "tile.GiantObsidian", 1L, 32767), - new ItemData(Materials.Obsidian, 232243200L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(TwilightForest.ID, "item.minotaurAxe", 1L, 0), - new ItemData( - Materials.Diamond, - 14515200L, - new MaterialStack(Materials.Wood, OrePrefixes.stick.mMaterialAmount * 2L))); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(TwilightForest.ID, "item.armorShards", 1L, 0), - new ItemData(Materials.Knightmetal, 403200L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(TwilightForest.ID, "item.shardCluster", 1L, 0), - new ItemData(Materials.Knightmetal, 3628800L)); - GT_OreDictUnificator.addItemData(ItemList.TF_LiveRoot.get(1L), new ItemData(Materials.LiveRoot, 3628800L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10), - new ItemData(Materials.CertusQuartz, 1814400L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11), - new ItemData(Materials.NetherQuartz, 1814400L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 12), - new ItemData(Materials.Fluix, 1814400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.quartz_block, 1, 32767), new ItemData(Materials.NetherQuartz, 14515200L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "tile.BlockQuartz", 1L, 32767), - new ItemData(Materials.CertusQuartz, 14515200L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "tile.BlockQuartzPillar", 1L, 32767), - new ItemData(Materials.CertusQuartz, 14515200L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "tile.BlockQuartzChiseled", 1L, 32767), - new ItemData(Materials.CertusQuartz, 14515200L)); - GT_OreDictUnificator.addItemData(new ItemStack(Items.wheat, 1, 32767), new ItemData(Materials.Wheat, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.hay_block, 1, 32767), new ItemData(Materials.Wheat, 32659200L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Items.snowball, 1, 32767), new ItemData(Materials.Snow, 907200L)); - GT_OreDictUnificator.addItemData(new ItemStack(Blocks.snow, 1, 32767), new ItemData(Materials.Snow, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.glowstone, 1, 32767), new ItemData(Materials.Glowstone, 14515200L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.redstone_lamp, 1, 32767), - new ItemData( - Materials.Glowstone, - 14515200L, - new MaterialStack(Materials.Redstone, OrePrefixes.dust.mMaterialAmount * 4L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.lit_redstone_lamp, 1, 32767), - new ItemData( - Materials.Glowstone, - 14515200L, - new MaterialStack(Materials.Redstone, OrePrefixes.dust.mMaterialAmount * 4L))); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(Forestry.ID, "craftingMaterial", 1L, 5), - new ItemData(Materials.Ice, 3628800L)); - GT_OreDictUnificator.addItemData(new ItemStack(Blocks.ice, 1, 32767), new ItemData(Materials.Ice, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.packed_ice, 1, 32767), new ItemData(Materials.Ice, 7257600L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Items.clay_ball, 1, 32767), new ItemData(Materials.Clay, 1814400L)); - GT_OreDictUnificator.removeItemData(new ItemStack(Blocks.clay, 1, 0)); - GT_OreDictUnificator.addItemData(new ItemStack(Blocks.clay, 1, 32767), new ItemData(Materials.Clay, 7257600L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.hardened_clay, 1, 32767), new ItemData(Materials.Clay, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stained_hardened_clay, 1, 32767), new ItemData(Materials.Clay, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.brick_block, 1, 32767), new ItemData(Materials.Brick, 3628800L)); - GT_OreDictUnificator - .addItemData(GT_ModHandler.getIC2Item("Uran238", 1L), new ItemData(Materials.Uranium, 3628800L)); - GT_OreDictUnificator - .addItemData(GT_ModHandler.getIC2Item("Uran235", 1L), new ItemData(Materials.Uranium235, 3628800L)); - GT_OreDictUnificator - .addItemData(GT_ModHandler.getIC2Item("Plutonium", 1L), new ItemData(Materials.Plutonium, 3628800L)); - GT_OreDictUnificator - .addItemData(GT_ModHandler.getIC2Item("smallUran235", 1L), new ItemData(Materials.Uranium235, 403200L)); - GT_OreDictUnificator - .addItemData(GT_ModHandler.getIC2Item("smallPlutonium", 1L), new ItemData(Materials.Plutonium, 403200L)); - GT_OreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Iron.get(1L), new ItemData(Materials.Iron, 1814400L)); - GT_OreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Gold.get(1L), new ItemData(Materials.Gold, 1814400L)); - GT_OreDictUnificator - .addItemData(ItemList.IC2_Item_Casing_Bronze.get(1L), new ItemData(Materials.Bronze, 1814400L)); - GT_OreDictUnificator - .addItemData(ItemList.IC2_Item_Casing_Copper.get(1L), new ItemData(Materials.Copper, 1814400L)); - GT_OreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Tin.get(1L), new ItemData(Materials.Tin, 1814400L)); - GT_OreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Lead.get(1L), new ItemData(Materials.Lead, 1814400L)); - GT_OreDictUnificator - .addItemData(ItemList.IC2_Item_Casing_Steel.get(1L), new ItemData(Materials.Steel, 1814400L)); - GT_OreDictUnificator.addItemData(new ItemStack(Items.book, 1, 32767), new ItemData(Materials.Paper, 10886400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Items.written_book, 1, 32767), new ItemData(Materials.Paper, 10886400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Items.writable_book, 1, 32767), new ItemData(Materials.Paper, 10886400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Items.enchanted_book, 1, 32767), new ItemData(Materials.Paper, 10886400L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Items.golden_apple, 1, 1), - new ItemData(Materials.Gold, OrePrefixes.block.mMaterialAmount * 8L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Items.golden_apple, 1, 0), - new ItemData(Materials.Gold, OrePrefixes.ingot.mMaterialAmount * 8L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Items.golden_carrot, 1, 0), - new ItemData(Materials.Gold, OrePrefixes.nugget.mMaterialAmount * 8L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Items.speckled_melon, 1, 0), - new ItemData(Materials.Gold, OrePrefixes.nugget.mMaterialAmount * 8L)); - GT_OreDictUnificator.addItemData(new ItemStack(Items.minecart, 1), new ItemData(Materials.Iron, 18144000L)); - GT_OreDictUnificator.addItemData(new ItemStack(Items.iron_door, 1), new ItemData(Materials.Iron, 21772800L)); - GT_OreDictUnificator.addItemData(new ItemStack(Items.cauldron, 1), new ItemData(Materials.Iron, 25401600L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.iron_bars, 8, 32767), new ItemData(Materials.Iron, 10886400L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.SteelBars", 8L, 0), - new ItemData(Materials.Steel, 10886400L)); - GT_OreDictUnificator - .addItemData(GT_ModHandler.getIC2Item("ironFurnace", 1L), new ItemData(Materials.Iron, 18144000L)); - GT_OreDictUnificator.addItemData(ItemList.IC2_Food_Can_Empty.get(1L), new ItemData(Materials.Tin, 1814400L)); - GT_OreDictUnificator.addItemData(ItemList.IC2_Fuel_Rod_Empty.get(1L), new ItemData(Materials.Iron, 3628800L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.light_weighted_pressure_plate, 1, 32767), - new ItemData(Materials.Gold, 7257600L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.heavy_weighted_pressure_plate, 1, 32767), - new ItemData(Materials.Iron, 7257600L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(Railcraft.ID, "anvil", 1L, 0), - new ItemData(Materials.Steel, 108864000L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(Railcraft.ID, "anvil", 1L, 1), - new ItemData(Materials.Steel, 72576000L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(Railcraft.ID, "anvil", 1L, 2), - new ItemData(Materials.Steel, 36288000L)); - GT_OreDictUnificator.addItemData(new ItemStack(Blocks.anvil, 1, 0), new ItemData(Materials.Iron, 108864000L)); - GT_OreDictUnificator.addItemData(new ItemStack(Blocks.anvil, 1, 1), new ItemData(Materials.Iron, 72576000L)); - GT_OreDictUnificator.addItemData(new ItemStack(Blocks.anvil, 1, 2), new ItemData(Materials.Iron, 36288000L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.hopper, 1, 32767), - new ItemData(Materials.Iron, 18144000L, new MaterialStack(Materials.Wood, 29030400L))); - GT_OreDictUnificator.addItemData(ItemList.Cell_Universal_Fluid.get(1L), new ItemData(Materials.Tin, 7257600L)); - GT_OreDictUnificator.addItemData(ItemList.Cell_Empty.get(1L), new ItemData(Materials.Tin, 7257600L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.tripwire_hook, 1, 32767), - new ItemData( - Materials.Iron, - OrePrefixes.ring.mMaterialAmount * 2L, - new MaterialStack(Materials.Wood, 3628800L))); - GT_OreDictUnificator.addItemData(ItemList.Bottle_Empty.get(1L), new ItemData(Materials.Glass, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Items.potionitem, 1, 32767), new ItemData(Materials.Glass, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stained_glass, 1, 32767), new ItemData(Materials.Glass, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.glass, 1, 32767), new ItemData(Materials.Glass, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stained_glass_pane, 1, 32767), new ItemData(Materials.Glass, 1360800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.glass_pane, 1, 32767), new ItemData(Materials.Glass, 1360800L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Items.clock, 1, 32767), - new ItemData(Materials.Gold, 14515200L, new MaterialStack(Materials.Redstone, 3628800L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Items.compass, 1, 32767), - new ItemData(Materials.Iron, 14515200L, new MaterialStack(Materials.Redstone, 3628800L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Items.iron_horse_armor, 1, 32767), - new ItemData(Materials.Iron, 29030400L, new MaterialStack(Materials.Leather, 21772800L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Items.golden_horse_armor, 1, 32767), - new ItemData(Materials.Gold, 29030400L, new MaterialStack(Materials.Leather, 21772800L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Items.diamond_horse_armor, 1, 32767), - new ItemData(Materials.Diamond, 29030400L, new MaterialStack(Materials.Leather, 21772800L))); - GT_OreDictUnificator - .addItemData(new ItemStack(Items.leather, 1, 32767), new ItemData(Materials.Leather, 3628800L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.beacon, 1, 32767), - new ItemData( - Materials.NetherStar, - 3628800L, - new MaterialStack(Materials.Obsidian, 10886400L), - new MaterialStack(Materials.Glass, 18144000L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.enchanting_table, 1, 32767), - new ItemData( - Materials.Diamond, - 7257600L, - new MaterialStack(Materials.Obsidian, 14515200L), - new MaterialStack(Materials.Paper, 10886400L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.ender_chest, 1, 32767), - new ItemData(Materials.EnderEye, 3628800L, new MaterialStack(Materials.Obsidian, 29030400L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.bookshelf, 1, 32767), - new ItemData(Materials.Paper, 32659200L, new MaterialStack(Materials.Wood, 21772800L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.lever, 1, 32767), - new ItemData(Materials.Stone, 3628800L, new MaterialStack(Materials.Wood, 1814400L))); - GT_OreDictUnificator.addItemData(new ItemStack(Blocks.ice, 1, 32767), new ItemData(Materials.Ice, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.packed_ice, 1, 32767), new ItemData(Materials.Ice, 7257600L)); - GT_OreDictUnificator.addItemData(new ItemStack(Blocks.snow, 1, 32767), new ItemData(Materials.Snow, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Items.snowball, 1, 32767), new ItemData(Materials.Snow, 907200L)); - GT_OreDictUnificator.addItemData(new ItemStack(Blocks.snow_layer, 1, 32767), new ItemData(Materials.Snow, -1L)); - GT_OreDictUnificator.addItemData(new ItemStack(Blocks.sand, 1, 32767), new ItemData(Materials.Sand, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.sandstone, 1, 32767), new ItemData(Materials.Sand, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_slab, 1, 0), new ItemData(Materials.Stone, 1814400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_slab, 1, 8), new ItemData(Materials.Stone, 1814400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 0), new ItemData(Materials.Stone, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 8), new ItemData(Materials.Stone, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_slab, 1, 1), new ItemData(Materials.Sand, 1814400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_slab, 1, 9), new ItemData(Materials.Sand, 1814400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 1), new ItemData(Materials.Sand, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 9), new ItemData(Materials.Sand, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_slab, 1, 2), new ItemData(Materials.Wood, 1814400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_slab, 1, 10), new ItemData(Materials.Wood, 1814400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 2), new ItemData(Materials.Wood, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 10), new ItemData(Materials.Wood, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_slab, 1, 3), new ItemData(Materials.Stone, 1814400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_slab, 1, 11), new ItemData(Materials.Stone, 1814400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 3), new ItemData(Materials.Stone, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 11), new ItemData(Materials.Stone, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_slab, 1, 5), new ItemData(Materials.Stone, 1814400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_slab, 1, 13), new ItemData(Materials.Stone, 1814400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 5), new ItemData(Materials.Stone, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 13), new ItemData(Materials.Stone, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone, 1, 32767), new ItemData(Materials.Stone, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.furnace, 1, 32767), new ItemData(Materials.Stone, 29030400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.lit_furnace, 1, 32767), new ItemData(Materials.Stone, 29030400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stonebrick, 1, 32767), new ItemData(Materials.Stone, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.cobblestone, 1, 32767), new ItemData(Materials.Stone, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.mossy_cobblestone, 1, 32767), new ItemData(Materials.Stone, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_button, 1, 32767), new ItemData(Materials.Stone, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.stone_pressure_plate, 1, 32767), new ItemData(Materials.Stone, 7257600L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.ladder, 1, 32767), new ItemData(Materials.Wood, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.wooden_button, 1, 32767), new ItemData(Materials.Wood, 3628800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.wooden_pressure_plate, 1, 32767), new ItemData(Materials.Wood, 7257600L)); - GT_OreDictUnificator.addItemData(new ItemStack(Blocks.fence, 1, 32767), new ItemData(Materials.Wood, 5443200L)); - GT_OreDictUnificator.addItemData(new ItemStack(Items.bowl, 1, 32767), new ItemData(Materials.Wood, 3628800L)); - GT_OreDictUnificator.addItemData(new ItemStack(Items.sign, 1, 32767), new ItemData(Materials.Wood, 7257600L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Items.wooden_door, 1, 32767), new ItemData(Materials.Wood, 21772800L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.chest, 1, 32767), new ItemData(Materials.Wood, 29030400L)); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.trapped_chest, 1, 32767), new ItemData(Materials.Wood, 29030400L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.unlit_redstone_torch, 1, 32767), - new ItemData(Materials.Wood, 1814400L, new MaterialStack(Materials.Redstone, 3628800L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.redstone_torch, 1, 32767), - new ItemData(Materials.Wood, 1814400L, new MaterialStack(Materials.Redstone, 3628800L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.noteblock, 1, 32767), - new ItemData(Materials.Wood, 29030400L, new MaterialStack(Materials.Redstone, 3628800L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.jukebox, 1, 32767), - new ItemData(Materials.Wood, 29030400L, new MaterialStack(Materials.Diamond, 3628800L))); - GT_OreDictUnificator - .addItemData(new ItemStack(Blocks.crafting_table, 1, 32767), new ItemData(Materials.Wood, 14515200L)); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.piston, 1, 32767), - new ItemData(Materials.Stone, 14515200L, new MaterialStack(Materials.Wood, 10886400L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.sticky_piston, 1, 32767), - new ItemData(Materials.Stone, 14515200L, new MaterialStack(Materials.Wood, 10886400L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.dispenser, 1, 32767), - new ItemData(Materials.Stone, 25401600L, new MaterialStack(Materials.Redstone, 3628800L))); - GT_OreDictUnificator.addItemData( - new ItemStack(Blocks.dropper, 1, 32767), - new ItemData(Materials.Stone, 25401600L, new MaterialStack(Materials.Redstone, 3628800L))); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(Thaumcraft.ID, "ItemNuggetChicken", 1L, 32767), - new ItemData(Materials.MeatCooked, 403200L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(Thaumcraft.ID, "ItemNuggetBeef", 1L, 32767), - new ItemData(Materials.MeatCooked, 403200L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(Thaumcraft.ID, "ItemNuggetPork", 1L, 32767), - new ItemData(Materials.MeatCooked, 403200L)); - GT_OreDictUnificator.addItemData( - GT_ModHandler.getModItem(Thaumcraft.ID, "ItemNuggetFish", 1L, 32767), - new ItemData(Materials.MeatCooked, 403200L)); - - for (ItemStack tItem : new ItemStack[] { GT_ModHandler.getModItem(TwilightForest.ID, "item.meefRaw", 1L, 0), - GT_ModHandler.getModItem(TwilightForest.ID, "item.venisonRaw", 1L, 0), - GT_ModHandler.getModItem(PamsHarvestCraft.ID, "muttonrawItem", 1L, 0), - GT_ModHandler.getModItem(PamsHarvestCraft.ID, "turkeyrawItem", 1L, 0), - GT_ModHandler.getModItem(PamsHarvestCraft.ID, "rabbitrawItem", 1L, 0), - GT_ModHandler.getModItem(PamsHarvestCraft.ID, "venisonrawItem", 1L, 0), new ItemStack(Items.porkchop), - new ItemStack(Items.beef), new ItemStack(Items.chicken), new ItemStack(Items.fish) }) { - if (tItem != null) { - GT_OreDictUnificator.addItemData( - GT_Utility.copyMetaData(32767, tItem), - new ItemData(Materials.MeatRaw, 3628800L, new MaterialStack(Materials.Bone, 403200L))); - } - } - for (ItemStack tItem : new ItemStack[] { GT_ModHandler.getModItem(TwilightForest.ID, "item.meefSteak", 1L, 0), - GT_ModHandler.getModItem(TwilightForest.ID, "item.venisonCooked", 1L, 0), - GT_ModHandler.getModItem(PamsHarvestCraft.ID, "muttoncookedItem", 1L, 0), - GT_ModHandler.getModItem(PamsHarvestCraft.ID, "turkeycookedItem", 1L, 0), - GT_ModHandler.getModItem(PamsHarvestCraft.ID, "rabbitcookedItem", 1L, 0), - GT_ModHandler.getModItem(PamsHarvestCraft.ID, "venisoncookedItem", 1L, 0), - new ItemStack(Items.cooked_porkchop), new ItemStack(Items.cooked_beef), new ItemStack(Items.cooked_chicken), - new ItemStack(Items.cooked_fished) }) { - if (tItem != null) { - GT_OreDictUnificator.addItemData( - GT_Utility.copyMetaData(32767, tItem), - new ItemData(Materials.MeatCooked, 3628800L, new MaterialStack(Materials.Bone, 403200L))); - } - } - } -} diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java b/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java deleted file mode 100644 index f4c682d848..0000000000 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_Item_Block_And_Fluid.java +++ /dev/null @@ -1,2127 +0,0 @@ -package gregtech.loaders.preload; - -import static gregtech.api.enums.FluidState.GAS; -import static gregtech.api.enums.FluidState.LIQUID; -import static gregtech.api.enums.FluidState.MOLTEN; -import static gregtech.api.enums.FluidState.SLURRY; -import static gregtech.api.enums.Mods.AppliedEnergistics2; -import static gregtech.api.enums.Mods.PamsHarvestCraft; -import static gregtech.api.enums.Mods.Railcraft; -import static gregtech.api.enums.Mods.Thaumcraft; -import static gregtech.api.enums.Mods.TwilightForest; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeBuilder.WILDCARD; - -import java.util.Locale; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidRegistry; - -import codechicken.nei.api.API; -import cpw.mods.fml.common.event.FMLInterModComms; -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsKevlar; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TierEU; -import gregtech.api.fluid.GT_FluidFactory; -import gregtech.api.items.GT_Block_LongDistancePipe; -import gregtech.api.items.GT_BreederCell_Item; -import gregtech.api.items.GT_Generic_Item; -import gregtech.api.items.GT_RadioactiveCellIC_Item; -import gregtech.api.metatileentity.BaseMetaPipeEntity; -import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Casings1; -import gregtech.common.blocks.GT_Block_Casings10; -import gregtech.common.blocks.GT_Block_Casings11; -import gregtech.common.blocks.GT_Block_Casings2; -import gregtech.common.blocks.GT_Block_Casings3; -import gregtech.common.blocks.GT_Block_Casings4; -import gregtech.common.blocks.GT_Block_Casings5; -import gregtech.common.blocks.GT_Block_Casings6; -import gregtech.common.blocks.GT_Block_Casings8; -import gregtech.common.blocks.GT_Block_Casings9; -import gregtech.common.blocks.GT_Block_Concretes; -import gregtech.common.blocks.GT_Block_Drone; -import gregtech.common.blocks.GT_Block_FrameBox; -import gregtech.common.blocks.GT_Block_Glass1; -import gregtech.common.blocks.GT_Block_Granites; -import gregtech.common.blocks.GT_Block_Laser; -import gregtech.common.blocks.GT_Block_Machines; -import gregtech.common.blocks.GT_Block_Metal; -import gregtech.common.blocks.GT_Block_Ores; -import gregtech.common.blocks.GT_Block_Reinforced; -import gregtech.common.blocks.GT_Block_Stones; -import gregtech.common.blocks.GT_Block_TintedIndustrialGlass; -import gregtech.common.blocks.GT_Cyclotron_Coils; -import gregtech.common.blocks.GT_TileEntity_Ores; -import gregtech.common.blocks.GT_WormholeRenderBlock; -import gregtech.common.items.GT_DepletetCell_Item; -import gregtech.common.items.GT_FluidDisplayItem; -import gregtech.common.items.GT_IntegratedCircuit_Item; -import gregtech.common.items.GT_MetaGenerated_Item_01; -import gregtech.common.items.GT_MetaGenerated_Item_02; -import gregtech.common.items.GT_MetaGenerated_Item_03; -import gregtech.common.items.GT_MetaGenerated_Item_98; -import gregtech.common.items.GT_MetaGenerated_Item_99; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.items.GT_NeutronReflector_Item; -import gregtech.common.items.GT_TierDrone; -import gregtech.common.items.GT_VolumetricFlask; -import gregtech.common.items.GT_WirelessHeadphones; -import gregtech.common.tileentities.render.TileDrone; -import gregtech.common.tileentities.render.TileLaser; -import gregtech.common.tileentities.render.TileWormhole; - -public class GT_Loader_Item_Block_And_Fluid implements Runnable { - - @Override - public void run() { - Materials.Water.mFluid = (Materials.Ice.mFluid = GT_ModHandler.getWater(1000L) - .getFluid()); - Materials.Lava.mFluid = GT_ModHandler.getLava(1000L) - .getFluid(); - - GT_Log.out.println("GT_Mod: Register Books."); - - GT_Utility.getWrittenBook( - "Manual_Printer", - "Printer Manual V2.0", - "Gregorius Techneticies", - "This Manual explains the different Functionalities the GregTech Printing Factory has built in, which are not in NEI. Most got NEI Support now, but there is still some left without it.", - "1. Coloring Items and Blocks: You know those Crafting Recipes, which have a dye surrounded by 8 Item to dye them? Or the ones which have just one Item and one Dye in the Grid? Those two Recipe Types can be cheaply automated using the Printer.", - "The Colorization Functionality even optimizes the Recipes, which normally require 8 Items + 1 Dye to 1 Item and an 8th of the normally used Dye in Fluid Form, isn't that awesome?", - "2. Copying Books: This Task got slightly harder. The first Step is putting the written and signed Book inside the Scanner with a Data Stick ready to receive the Data.", - "Now insert the Stick into the Data Slot of the Printer and add 3 pieces of Paper together with 144 Liters of actual Ink Fluid. Water mixed and chemical Dyes won't work on Paper without messing things up!", - "You got a stack of Pages for your new Book, just put them into the Assembler with some Glue and a piece of Leather for the Binding, and you receive an identical copy of the Book, which would stack together with the original.", - "3. Renaming Items: This Functionality is no longer Part of the Printer. There is now a Name Mold for the Forming Press to imprint a Name into an Item, just rename the Mold in an Anvil and use it in the Forming Press on any Item.", - "4. Crafting of Books, Maps, Nametags etc etc etc: Those Recipes moved to other Machines, just look them up in NEI."); - - GT_Utility.getWrittenBook( - "Manual_Punch_Cards", - "Punch Card Manual V0.0", - "Gregorius Techneticies", - "This Manual will explain the Functionality of the Punch Cards, once they are fully implemented. And no, they won't be like the IRL Punch Cards. This is just a current Idea Collection.", - "(i1&&i2)?o1=15:o1=0;=10", - "ignore all Whitespace Characters, use Long for saving the Numbers", - "&& || ^^ & | ^ ! ++ -- + - % / // * ** << >> >>> < > <= >= == != ~ ( ) ?: , ; ;= ;=X; = i0 i1 i2 i3 i4 i5 o0 o1 o2 o3 o4 o5 v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 m0 m1 m2 m3 m4 m5 m6 m7 m8 m9 A B C D E F", - "'0' = false, 'everything but 0' = true, '!' turns '0' into '1' and everything else into '0'", - "',' is just a separator for multiple executed Codes in a row.", - "';' means that the Program waits until the next tick before continuing. ';=10' and ';=10;' both mean that it will wait 10 Ticks instead of 1. And ';=0' or anything < 0 will default to 0.", - "If the '=' Operator is used within Brackets, it returns the value the variable has been set to.", - "The Program saves the Char Index of the current Task, the 10 Variables (which reset to 0 as soon as the Program Loop stops), the 10 Member Variables and the remaining waiting Time in its NBT.", - "A = 10, B = 11, C = 12, D = 13, E = 14, F = 15, just for Hexadecimal Space saving, since Redstone has only 4 Bits.", - "For implementing Loops you just need 1 Punch Card per Loop, these Cards can restart once they are finished, depending on how many other Cards there are in the Program Loop you inserted your Card into, since it will process them procedurally.", - "A Punch Card Processor can run up to four Loops, each with the length of seven Punch Cards, parallel.", - "Why does the Punch Card need Ink to be made, you ask? Because the empty one needs to have some lines on, and the for the punched one it prints the Code to execute in a human readable format on the Card."); - - GT_Utility.getWrittenBook( - "Manual_Microwave", - "Microwave Oven Manual", - "Kitchen Industries", - "Congratulations, you inserted a random seemingly empty Book into the Microwave and these Letters appeared out of nowhere.", - "You just got a Microwave Oven and asked yourself 'why do I even need it?'. It's simple, the Microwave can cook for just 128 EU and at an insane speed. Not even a normal E-furnace can do it that fast and cheap!", - "This is the cheapest and fastest way to cook for you. That is why the Microwave Oven can be found in almost every Kitchen (see www.youwannabuyakitchen.ly).", - "Long time exposure to Microwaves can cause Cancer, but we doubt Steve lives long enough to die because of that.", - "Do not insert any Metals. It might result in an Explosion.", - "Do not dry Animals with it. It will result in a Hot Dog, no matter which Animal you put into it.", - "Do not insert inflammable Objects. The Oven will catch on Fire.", - "Do not insert Explosives such as Eggs. Just don't."); - - GT_Log.out.println("GT_Mod: Register Items."); - - new GT_IntegratedCircuit_Item(); - new GT_MetaGenerated_Item_01(); - new GT_MetaGenerated_Item_02(); - new GT_MetaGenerated_Item_03(); - // GT_MetaGenerated_Item_98 is initialized in GT_Proxy.onPostLoad() because we need to wait for fluids to be - // registered. - // Pre-initialization needs to happen before then, though, because the cell icons get deleted at some point - // between load and post-load. - GT_MetaGenerated_Item_98.preInit(); - new GT_MetaGenerated_Item_99(); - new GT_MetaGenerated_Tool_01(); - new GT_FluidDisplayItem(); - new GT_WirelessHeadphones(); - - // Tiered recipe materials actually appear to be set in GT_MetaTileEntity_BasicMachine_GT_Recipe, making these - // unused - ItemList.Rotor_LV.set(GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Tin, 1L)); - ItemList.Rotor_MV.set(GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Bronze, 1L)); - ItemList.Rotor_HV.set(GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.Steel, 1L)); - ItemList.Rotor_EV.set(GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 1L)); - ItemList.Rotor_IV.set(GT_OreDictUnificator.get(OrePrefixes.rotor, Materials.TungstenSteel, 1L)); - - ItemList.VOLUMETRIC_FLASK.set(new GT_VolumetricFlask("Volumetric_Flask", "Volumetric flask", 1000)); - - Item tItem = (Item) GT_Utility.callConstructor( - "gregtech.common.items.GT_SensorCard_Item", - 0, - null, - false, - new Object[] { "sensorcard", "GregTech Sensor Card" }); - ItemList.NC_SensorCard.set( - tItem == null ? new GT_Generic_Item("sensorcard", "GregTech Sensor Card", "Nuclear Control not installed") - : tItem); - - Item advSensorCard = (Item) GT_Utility - .callConstructor("gregtech.common.items.GT_AdvancedSensorCard_Item", 0, null, false); - ItemList.NC_AdvancedSensorCard.set( - advSensorCard == null - ? new GT_Generic_Item( - "advancedsensorcard", - "GregTech Advanced Sensor Card", - "Nuclear Control not installed") - : advSensorCard); - - ItemList.Neutron_Reflector - .set(new GT_NeutronReflector_Item("neutronreflector", "Iridium Neutron Reflector", 0)); - ItemList.Reactor_Coolant_He_1 - .set(GregTech_API.constructCoolantCellItem("60k_Helium_Coolantcell", "60k He Coolant Cell", 60000)); - ItemList.Reactor_Coolant_He_3 - .set(GregTech_API.constructCoolantCellItem("180k_Helium_Coolantcell", "180k He Coolant Cell", 180000)); - ItemList.Reactor_Coolant_He_6 - .set(GregTech_API.constructCoolantCellItem("360k_Helium_Coolantcell", "360k He Coolant Cell", 360000)); - ItemList.Reactor_Coolant_NaK_1 - .set(GregTech_API.constructCoolantCellItem("60k_NaK_Coolantcell", "60k NaK Coolantcell", 60000)); - ItemList.Reactor_Coolant_NaK_3 - .set(GregTech_API.constructCoolantCellItem("180k_NaK_Coolantcell", "180k NaK Coolantcell", 180000)); - ItemList.Reactor_Coolant_NaK_6 - .set(GregTech_API.constructCoolantCellItem("360k_NaK_Coolantcell", "360k NaK Coolantcell", 360000)); - - ItemList.Reactor_Coolant_Sp_1 - .set(GregTech_API.constructCoolantCellItem("180k_Space_Coolantcell", "180k Sp Coolant Cell", 180000)); - - ItemList.Reactor_Coolant_Sp_2 - .set(GregTech_API.constructCoolantCellItem("360k_Space_Coolantcell", "360k Sp Coolant Cell", 360000)); - - ItemList.Reactor_Coolant_Sp_3 - .set(GregTech_API.constructCoolantCellItem("540k_Space_Coolantcell", "540k Sp Coolant Cell", 540000)); - - ItemList.Reactor_Coolant_Sp_6 - .set(GregTech_API.constructCoolantCellItem("1080k_Space_Coolantcell", "1080k Sp Coolant Cell", 1080000)); - - ItemList.GlowstoneCell.set( - new GT_BreederCell_Item( - "glowstoneCell", - "Glowstone Fuel Rod", - "Source of sunnarium", - 3000, - 1, - 10000, - () -> ItemList.SunnariumCell.get(1))); - ItemList.SunnariumCell.set(new GT_DepletetCell_Item("sunnariumCell", "Sunnarium Fuel Rod", 1)); - - ItemList.neutroniumHeatCapacitor.set( - GregTech_API - .constructCoolantCellItem("neutroniumHeatCapacitor", "1G Neutronium Heat Capacitor", 1000000000)); - - ItemList.Depleted_Thorium_1.set(new GT_DepletetCell_Item("ThoriumcellDep", "Fuel Rod (Depleted Thorium)", 1)); - ItemList.Depleted_Thorium_2 - .set(new GT_DepletetCell_Item("Double_ThoriumcellDep", "Dual Fuel Rod (Depleted Thorium)", 1)); // TODO - // CHECK - // num - ItemList.Depleted_Thorium_4 - .set(new GT_DepletetCell_Item("Quad_ThoriumcellDep", "Quad Fuel Rod (Depleted Thorium)", 1)); // TODO - // CHECK - // num - ItemList.ThoriumCell_1.set( - new GT_RadioactiveCellIC_Item( - "Thoriumcell", - "Fuel Rod (Thorium)", - 1, - 50000, - 0.4F, - 0, - 0.25F, - ItemList.Depleted_Thorium_1.get(1), - false)); - ItemList.ThoriumCell_2.set( - new GT_RadioactiveCellIC_Item( - "Double_Thoriumcell", - "Dual Fuel Rod (Thorium)", - 2, - 50000, - 0.4F, - 0, - 0.25F, - ItemList.Depleted_Thorium_2.get(1), - false)); - ItemList.ThoriumCell_4.set( - new GT_RadioactiveCellIC_Item( - "Quad_Thoriumcell", - "Quad Fuel Rod (Thorium)", - 4, - 50000, - 0.4F, - 0, - 0.25F, - ItemList.Depleted_Thorium_4.get(1), - false)); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Thorium_1.get(1)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lutetium, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L)) - .duration(25 * SECONDS) - .eut(48) - .addTo(thermalCentrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Thorium_2.get(1)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lutetium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 3L)) - .duration(25 * SECONDS) - .eut(48) - .addTo(thermalCentrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Thorium_4.get(1)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lutetium, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 6L)) - .duration(25 * SECONDS) - .eut(48) - .addTo(thermalCentrifugeRecipes); - - ItemList.Depleted_Naquadah_1 - .set(new GT_DepletetCell_Item("NaquadahcellDep", "Fuel Rod (Depleted Naquadah)", 1)); - ItemList.Depleted_Naquadah_2 - .set(new GT_DepletetCell_Item("Double_NaquadahcellDep", "Dual Fuel Rod (Depleted Naquadah)", 1)); - ItemList.Depleted_Naquadah_4 - .set(new GT_DepletetCell_Item("Quad_NaquadahcellDep", "Quad Fuel Rod (Depleted Naquadah)", 1)); - ItemList.NaquadahCell_1.set( - new GT_RadioactiveCellIC_Item( - "Naquadahcell", - "Fuel Rod (Naquadah)", - 1, - 100000, - 4F, - 1, - 1F, - ItemList.Depleted_Naquadah_1.get(1), - false)); - ItemList.NaquadahCell_2.set( - new GT_RadioactiveCellIC_Item( - "Double_Naquadahcell", - "Dual Fuel Rod (Naquadah)", - 2, - 100000, - 4F, - 1, - 1F, - ItemList.Depleted_Naquadah_2.get(1), - false)); - ItemList.NaquadahCell_4.set( - new GT_RadioactiveCellIC_Item( - "Quad_Naquadahcell", - "Quad Fuel Rod (Naquadah)", - 4, - 100000, - 4F, - 1, - 1F, - ItemList.Depleted_Naquadah_4.get(1), - false)); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Naquadah_1.get(1)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Naquadria, 2L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.NaquadahEnriched, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 8L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1L)) - .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Naquadah_2.get(1)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.NaquadahEnriched, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 18L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 2L)) - .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_Naquadah_4.get(1)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 2L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.NaquadahEnriched, 8L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 38L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 4L)) - .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) - .duration(100 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - ItemList.Depleted_MNq_1.set(new GT_DepletetCell_Item("MNqCellDep", "Fuel Rod (Depleted Nq*)", 1)); - ItemList.Depleted_MNq_2.set(new GT_DepletetCell_Item("Double_MNqCellDep", "Dual Fuel Rod (Depleted Nq*)", 1)); - ItemList.Depleted_MNq_4.set(new GT_DepletetCell_Item("Quad_MNqCellDep", "Quad Fuel Rod (Depleted Nq*)", 1)); - ItemList.MNqCell_1.set( - new GT_RadioactiveCellIC_Item( - "MNqCell", - "Fuel Rod (Nq* - MOX like behaviour)", - 1, - 100000, - 4F, - 1, - 1F, - ItemList.Depleted_MNq_1.get(1), - true)); - ItemList.MNqCell_2.set( - new GT_RadioactiveCellIC_Item( - "Double_MNqCell", - "Dual Fuel Rod (Nq* - MOX like behaviour)", - 2, - 100000, - 4F, - 1, - 1F, - ItemList.Depleted_MNq_2.get(1), - true)); - ItemList.MNqCell_4.set( - new GT_RadioactiveCellIC_Item( - "Quad_MNqCell", - "Quad Fuel Rod (Nq* - MOX like behaviour)", - 4, - 100000, - 4F, - 1, - 1F, - ItemList.Depleted_MNq_4.get(1), - true)); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_MNq_1.get(1)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.NaquadahEnriched, 2L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadria, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 8L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1L)) - .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_MNq_2.get(1)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadria, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 18L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 2L)) - .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Depleted_MNq_4.get(1)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 2L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadria, 8L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 38L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 4L)) - .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) - .duration(100 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(centrifugeRecipes); - - ItemList.Uraniumcell_1.set( - new GT_RadioactiveCellIC_Item( - "reactorUraniumSimple", - "Fuel Rod (Uranium)", - 1, - 20000, - 2F, - 1, - 1F, - GT_ModHandler.getIC2Item("reactorDepletedUraniumSimple", 1), - false)); - ItemList.Uraniumcell_2.set( - new GT_RadioactiveCellIC_Item( - "reactorUraniumDual", - "Dual Fuel Rod (Uranium)", - 2, - 20000, - 2F, - 1, - 1F, - GT_ModHandler.getIC2Item("reactorDepletedUraniumDual", 1), - false)); - ItemList.Uraniumcell_4.set( - new GT_RadioactiveCellIC_Item( - "reactorUraniumQuad", - "Quad Fuel Rod (Uranium)", - 4, - 20000, - 2F, - 1, - 1F, - GT_ModHandler.getIC2Item("reactorDepletedUraniumQuad", 1), - false)); - ItemList.Moxcell_1.set( - new GT_RadioactiveCellIC_Item( - "reactorMOXSimple", - "Fuel Rod (Mox)", - 1, - 10000, - 2F, - 1, - 1F, - GT_ModHandler.getIC2Item("reactorDepletedMOXSimple", 1), - true)); - ItemList.Moxcell_2.set( - new GT_RadioactiveCellIC_Item( - "reactorMOXDual", - "Dual Fuel Rod (Mox)", - 2, - 10000, - 2F, - 1, - 1F, - GT_ModHandler.getIC2Item("reactorDepletedMOXDual", 1), - true)); - ItemList.Moxcell_4.set( - new GT_RadioactiveCellIC_Item( - "reactorMOXQuad", - "Quad Fuel Rod (Mox)", - 4, - 10000, - 2F, - 1, - 1F, - GT_ModHandler.getIC2Item("reactorDepletedMOXQuad", 1), - true)); - - GT_Log.out.println("GT_Mod: Adding Blocks."); - GregTech_API.sBlockMachines = new GT_Block_Machines(); - GregTech_API.sBlockCasings1 = new GT_Block_Casings1(); - GregTech_API.sBlockCasings2 = new GT_Block_Casings2(); - GregTech_API.sBlockCasings3 = new GT_Block_Casings3(); - GregTech_API.sBlockCasings4 = new GT_Block_Casings4(); - GregTech_API.sBlockCasings5 = new GT_Block_Casings5(); - GregTech_API.sBlockCasings6 = new GT_Block_Casings6(); - GregTech_API.sBlockCasings8 = new GT_Block_Casings8(); - GregTech_API.sBlockCasings9 = new GT_Block_Casings9(); - GregTech_API.sBlockCasings10 = new GT_Block_Casings10(); - GregTech_API.sBlockCasings11 = new GT_Block_Casings11(); - GregTech_API.sBlockGranites = new GT_Block_Granites(); - GregTech_API.sBlockLongDistancePipes = new GT_Block_LongDistancePipe(); - GregTech_API.sBlockConcretes = new GT_Block_Concretes(); - GregTech_API.sBlockStones = new GT_Block_Stones(); - GregTech_API.sBlockOres1 = new GT_Block_Ores(); - GregTech_API.sBlockFrames = new GT_Block_FrameBox(); - GregTech_API.sDroneRender = new GT_Block_Drone(); - GregTech_API.sBlockGlass1 = new GT_Block_Glass1(); - GregTech_API.sBlockTintedGlass = new GT_Block_TintedIndustrialGlass(); - GregTech_API.sLaserRender = new GT_Block_Laser(); - GregTech_API.sWormholeRender = new GT_WormholeRenderBlock(); - - // meta ID order, DO NOT CHANGE ORDER - - GregTech_API.sBlockMetal1 = new GT_Block_Metal( - "gt.blockmetal1", - new Materials[] { Materials.Adamantium, Materials.Aluminium, Materials.Americium, Materials.AnnealedCopper, - Materials.Antimony, Materials.Arsenic, Materials.AstralSilver, Materials.BatteryAlloy, - Materials.Beryllium, Materials.Bismuth, Materials.BismuthBronze, Materials.BlackBronze, - Materials.BlackSteel, Materials.BlueAlloy, Materials.BlueSteel, Materials.Brass }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS1); - - GregTech_API.sBlockMetal2 = new GT_Block_Metal( - "gt.blockmetal2", - new Materials[] { Materials.Bronze, Materials.Caesium, Materials.Cerium, Materials.Chrome, - Materials.ChromiumDioxide, Materials.Cobalt, Materials.CobaltBrass, Materials.Copper, - Materials.Cupronickel, Materials.DamascusSteel, Materials.DarkIron, Materials.DeepIron, Materials.Desh, - Materials.Duranium, Materials.Dysprosium, Materials.Electrum }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS2); - - GregTech_API.sBlockMetal3 = new GT_Block_Metal( - "gt.blockmetal3", - new Materials[] { Materials.ElectrumFlux, Materials.Enderium, Materials.Erbium, Materials.Europium, - Materials.FierySteel, Materials.Gadolinium, Materials.Gallium, Materials.Holmium, Materials.HSLA, - Materials.Indium, Materials.InfusedGold, Materials.Invar, Materials.Iridium, Materials.IronMagnetic, - Materials.IronWood, Materials.Kanthal }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS3); - - GregTech_API.sBlockMetal4 = new GT_Block_Metal( - "gt.blockmetal4", - new Materials[] { Materials.Knightmetal, Materials.Lanthanum, Materials.Lead, Materials.Lutetium, - Materials.Magnalium, Materials.Magnesium, Materials.Manganese, Materials.MeteoricIron, - Materials.MeteoricSteel, Materials.Trinium, Materials.Mithril, Materials.Molybdenum, Materials.Naquadah, - Materials.NaquadahAlloy, Materials.NaquadahEnriched, Materials.Naquadria }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS4); - - GregTech_API.sBlockMetal5 = new GT_Block_Metal( - "gt.blockmetal5", - new Materials[] { Materials.Neodymium, Materials.NeodymiumMagnetic, Materials.Neutronium, - Materials.Nichrome, Materials.Nickel, Materials.Niobium, Materials.NiobiumNitride, - Materials.NiobiumTitanium, Materials.Osmiridium, Materials.Osmium, Materials.Palladium, - Materials.PigIron, Materials.Platinum, Materials.Plutonium, Materials.Plutonium241, - Materials.Praseodymium }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS5); - - GregTech_API.sBlockMetal6 = new GT_Block_Metal( - "gt.blockmetal6", - new Materials[] { Materials.Promethium, Materials.RedAlloy, Materials.RedSteel, Materials.RoseGold, - Materials.Rubidium, Materials.Samarium, Materials.Scandium, Materials.ShadowIron, Materials.ShadowSteel, - Materials.Silicon, Materials.Silver, Materials.SolderingAlloy, Materials.StainlessSteel, - Materials.Steel, Materials.SteelMagnetic, Materials.SterlingSilver }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS6); - - GregTech_API.sBlockMetal7 = new GT_Block_Metal( - "gt.blockmetal7", - new Materials[] { Materials.Sunnarium, Materials.Tantalum, Materials.Tellurium, Materials.Terbium, - Materials.Thaumium, Materials.Thorium, Materials.Thulium, Materials.Tin, Materials.TinAlloy, - Materials.Titanium, Materials.Tritanium, Materials.Tungsten, Materials.TungstenSteel, Materials.Ultimet, - Materials.Uranium, Materials.Uranium235 }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS7); - - GregTech_API.sBlockMetal8 = new GT_Block_Metal( - "gt.blockmetal8", - new Materials[] { Materials.Vanadium, Materials.VanadiumGallium, Materials.WroughtIron, Materials.Ytterbium, - Materials.Yttrium, Materials.YttriumBariumCuprate, Materials.Zinc, Materials.TungstenCarbide, - Materials.VanadiumSteel, Materials.HSSG, Materials.HSSE, Materials.HSSS, Materials.Steeleaf, - Materials.Ichorium, Materials.Firestone, Materials.Shadow }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS8); - - GregTech_API.sBlockGem1 = new GT_Block_Metal( - "gt.blockgem1", - new Materials[] { Materials.InfusedAir, Materials.Amber, Materials.Amethyst, Materials.InfusedWater, - Materials.BlueTopaz, Materials.CertusQuartz, Materials.Dilithium, Materials.EnderEye, - Materials.EnderPearl, Materials.FoolsRuby, Materials.Force, Materials.Forcicium, Materials.Forcillium, - Materials.GreenSapphire, Materials.InfusedFire, Materials.Jasper }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS9); - - GregTech_API.sBlockGem2 = new GT_Block_Metal( - "gt.blockgem2", - new Materials[] { Materials.Lazurite, Materials.Lignite, Materials.Monazite, Materials.Niter, - Materials.Olivine, Materials.Opal, Materials.InfusedOrder, Materials.InfusedEntropy, - Materials.TricalciumPhosphate, Materials.Quartzite, Materials.GarnetRed, Materials.Ruby, - Materials.Sapphire, Materials.Sodalite, Materials.Tanzanite, Materials.InfusedEarth }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS10); - - GregTech_API.sBlockGem3 = new GT_Block_Metal( - "gt.blockgem3", - new Materials[] { Materials.Topaz, Materials.Vinteum, Materials.GarnetYellow, Materials.NetherStar, - Materials.Charcoal, Materials.Blaze }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS11); - - GregTech_API.sBlockMetal9 = new GT_Block_Metal( - "gt.blockmetal9", - new Materials[] { Materials.Cryolite, Materials.SiliconSG, MaterialsKevlar.NickelAluminide, - MaterialsUEVplus.SpaceTime, MaterialsUEVplus.TranscendentMetal, Materials.Oriharukon, - MaterialsUEVplus.WhiteDwarfMatter, MaterialsUEVplus.BlackDwarfMatter, MaterialsUEVplus.Universium, - MaterialsUEVplus.Eternity, MaterialsUEVplus.MagMatter, MaterialsUEVplus.SixPhasedCopper }, - OrePrefixes.block, - gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS12); - - GregTech_API.sBlockReinforced = new GT_Block_Reinforced("gt.blockreinforced"); - - GT_Log.out.println("GT_Mod: Register TileEntities."); - - BaseMetaTileEntity tBaseMetaTileEntity = GregTech_API.constructBaseMetaTileEntity(); - - GT_Log.out.println("GT_Mod: Registering the BaseMetaTileEntity."); - GameRegistry.registerTileEntity(tBaseMetaTileEntity.getClass(), "BaseMetaTileEntity"); - FMLInterModComms.sendMessage( - AppliedEnergistics2.ID, - "whitelist-spatial", - tBaseMetaTileEntity.getClass() - .getName()); - - GT_Log.out.println("GT_Mod: Registering the DroneRender."); - GameRegistry.registerTileEntity(TileDrone.class, "DroneRender"); - - GT_Log.out.println("GT_Mod: Registering the LaserRender."); - GameRegistry.registerTileEntity(TileLaser.class, "LaserRenderer"); - - GT_Log.out.println("GT_Mod: Registering the WormholeRender."); - GameRegistry.registerTileEntity(TileWormhole.class, "WormholeRender"); - - GT_Log.out.println("GT_Mod: Registering the BaseMetaPipeEntity."); - GameRegistry.registerTileEntity(BaseMetaPipeEntity.class, "BaseMetaPipeEntity"); - FMLInterModComms.sendMessage(AppliedEnergistics2.ID, "whitelist-spatial", BaseMetaPipeEntity.class.getName()); - - GT_Log.out.println("GT_Mod: Registering the Ore TileEntity."); - GameRegistry.registerTileEntity(GT_TileEntity_Ores.class, "GT_TileEntity_Ores"); - FMLInterModComms.sendMessage(AppliedEnergistics2.ID, "whitelist-spatial", GT_TileEntity_Ores.class.getName()); - - GT_Log.out.println("GT_Mod: Registering Fluids."); - Materials.ConstructionFoam.mFluid = GT_Utility - .getFluidForFilledItem(GT_ModHandler.getIC2Item("CFCell", 1L), true) - .getFluid(); - Materials.UUMatter.mFluid = GT_Utility.getFluidForFilledItem(GT_ModHandler.getIC2Item("uuMatterCell", 1L), true) - .getFluid(); - - GT_FluidFactory.builder("Air") - .withLocalizedName("Air") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Air) - .registerContainers(ItemList.Cell_Air.get(1L), ItemList.Cell_Empty.get(1L), 2000); - GT_FluidFactory.builder("LiquidOxygen") - .withLocalizedName("Liquid Oxygen") - .withStateAndTemperature(GAS, 60) - .buildAndRegister() - .configureMaterials(Materials.LiquidOxygen) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LiquidOxygen, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("LiquidNitrogen") - .withLocalizedName("Liquid Nitrogen") - .withStateAndTemperature(GAS, 77) - .buildAndRegister() - .configureMaterials(Materials.LiquidNitrogen) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LiquidNitrogen, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("LiquidAir") - .withLocalizedName("Liquid Air") - .withStateAndTemperature(LIQUID, 77) - .buildAndRegister() - .configureMaterials(Materials.LiquidAir) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LiquidAir, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Oxygen") - .withLocalizedName("Oxygen") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Oxygen) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Hydrogen") - .withLocalizedName("Hydrogen") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Hydrogen) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Deuterium") - .withLocalizedName("Deuterium") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Deuterium) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Deuterium, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Tritium") - .withLocalizedName("Tritium") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Tritium) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Tritium, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Helium") - .withLocalizedName("Helium") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Helium) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Helium, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Argon") - .withLocalizedName("Argon") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Argon) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Argon, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Radon") - .withLocalizedName("Radon") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Radon) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Radon, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder("Fluorine") - .withLocalizedName("Fluorine") - .withStateAndTemperature(GAS, 53) - .buildAndRegister() - .configureMaterials(Materials.Fluorine) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Fluorine, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Titaniumtetrachloride") - .withLocalizedName("Titaniumtetrachloride") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Titaniumtetrachloride) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Titaniumtetrachloride, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Helium-3") - .withLocalizedName("Helium-3") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Helium_3) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Helium_3, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Methane") - .withLocalizedName("Methane") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Methane) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Methane, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Nitrogen") - .withLocalizedName("Nitrogen") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Nitrogen) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Nitrogen, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("NitrogenDioxide") - .withLocalizedName("Nitrogen Dioxide") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.NitrogenDioxide) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.NitrogenDioxide, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Steam") - .withLocalizedName("Steam") - .withStateAndTemperature(GAS, 375) - .buildAndRegister() - .configureMaterials(Materials.Water) - .registerBContainers(GT_ModHandler.getIC2Item("steamCell", 1), Materials.Empty.getCells(1)); - - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Empty.getCells(1)) - .itemOutputs(GT_ModHandler.getIC2Item("steamCell", 1)) - .fluidInputs(GT_ModHandler.getSteam(1000)) - .duration(16 * TICKS) - .eut(1) - .addTo(fluidCannerRecipes); - - Materials.Ice.mGas = Materials.Water.mGas; - Materials.Water.mGas.setTemperature(375) - .setGaseous(true); - - ItemList.sOilExtraHeavy = GT_FluidFactory.of("liquid_extra_heavy_oil", "Very Heavy Oil", LIQUID, 295); - ItemList.sEpichlorhydrin = GT_FluidFactory.builder("liquid_epichlorhydrin") - .withLocalizedName("Epichlorohydrin") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Epichlorohydrin) - .registerBContainers(Materials.Epichlorohydrin.getCells(1), Materials.Empty.getCells(1)) - .asFluid(); - ItemList.sDrillingFluid = GT_FluidFactory.of("liquid_drillingfluid", "Drilling Fluid", LIQUID, 295); - ItemList.sToluene = GT_FluidFactory.builder("liquid_toluene") - .withLocalizedName("Toluene") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Toluene) - .registerBContainers(Materials.Toluene.getCells(1), Materials.Empty.getCells(1)) - .asFluid(); - ItemList.sNitrationMixture = GT_FluidFactory.builder("liquid_nitrationmixture") - .withLocalizedName("Nitration Mixture") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.NitrationMixture) - .registerBContainers(Materials.NitrationMixture.getCells(1), Materials.Empty.getCells(1)) - .asFluid(); - - GT_FluidFactory.builder("liquid_heavy_oil") - .withLocalizedName("Heavy Oil") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.OilHeavy) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.OilHeavy, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("liquid_medium_oil") - .withLocalizedName("Raw Oil") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.OilMedium) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.OilMedium, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("liquid_light_oil") - .withLocalizedName("Light Oil") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.OilLight) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.OilLight, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("gas_natural_gas") - .withLocalizedName("Natural Gas") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.NatruralGas) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.NatruralGas, 1L), - ItemList.Cell_Empty.get(1L)); - ItemList.sHydricSulfur = GT_FluidFactory.builder("liquid_hydricsulfur") - .withLocalizedName("Hydrogen Sulfide") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.HydricSulfide) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1L), - ItemList.Cell_Empty.get(1L)) - .asFluid(); - GT_FluidFactory.builder("gas_sulfuricgas") - .withLocalizedName("Sulfuric Gas") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.SulfuricGas) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricGas, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("gas_gas") - .withLocalizedName("Refinery Gas") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Gas) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Gas, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("liquid_sulfuricnaphtha") - .withLocalizedName("Sulfuric Naphtha") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.SulfuricNaphtha) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricNaphtha, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("liquid_sufluriclight_fuel") - .withLocalizedName("Sulfuric Light Fuel") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.SulfuricLightFuel) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricLightFuel, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("liquid_sulfuricheavy_fuel") - .withLocalizedName("Sulfuric Heavy Fuel") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.SulfuricHeavyFuel) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricHeavyFuel, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("liquid_naphtha") - .withLocalizedName("Naphtha") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Naphtha) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Naphtha, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("liquid_light_fuel") - .withLocalizedName("Light Fuel") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.LightFuel) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LightFuel, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("liquid_heavy_fuel") - .withLocalizedName("Heavy Fuel") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.HeavyFuel) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HeavyFuel, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("liquid_lpg") - .withLocalizedName("LPG") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.LPG) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.LPG, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("charcoal_byproducts") - .withTextureName("molten.autogenerated") - .withLocalizedName("Charcoal Byproducts") - .withColorRGBA(Materials.CharcoalByproducts.mRGBa) - .withStateAndTemperature(GAS, 775) - .buildAndRegister() - .configureMaterials(Materials.CharcoalByproducts) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.CharcoalByproducts, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("molten.bisphenol_a") - .withTextureName("molten.autogenerated") - .withLocalizedName("Molten Bisphenol A") - .withColorRGBA(Materials.BisphenolA.mRGBa) - .withStateAndTemperature(LIQUID, 432) - .buildAndRegister() - .configureMaterials(Materials.BisphenolA) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.BisphenolA, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder("UUAmplifier") - .withLocalizedName("UU Amplifier") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.UUAmplifier) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.UUAmplifier, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Chlorine") - .withLocalizedName("Chlorine") - .withStateAndTemperature(GAS, 295) - .buildAndRegister() - .configureMaterials(Materials.Chlorine) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Chlorine, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Mercury") - .withLocalizedName("Mercury") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Mercury) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Mercury, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("NitroFuel") - .withLocalizedName("Cetane-Boosted Diesel") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.NitroFuel) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.NitroFuel, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("SodiumPersulfate") - .withLocalizedName("Sodium Persulfate") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.SodiumPersulfate) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SodiumPersulfate, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("Glyceryl") - .withLocalizedName("Glyceryl Trinitrate") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Glyceryl) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Glyceryl, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder("lubricant") - .withLocalizedName("Lubricant") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Lubricant) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Lubricant, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("creosote") - .withLocalizedName("Creosote Oil") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Creosote) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Creosote, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("seedoil") - .withLocalizedName("Seed Oil") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.SeedOil) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SeedOil, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("fishoil") - .withLocalizedName("Fish Oil") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.FishOil) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.FishOil, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("oil") - .withLocalizedName("Oil") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Oil) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Oil, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("fuel") - .withLocalizedName("Diesel") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Fuel) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Fuel, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("for.honey") - .withLocalizedName("Honey") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Honey) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Honey, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("biomass") - .withLocalizedName("Biomass") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Biomass) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Biomass, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("bioethanol") - .withLocalizedName("Bio Ethanol") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Ethanol) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Ethanol, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("sulfuricacid") - .withLocalizedName("Sulfuric Acid") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.SulfuricAcid) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricAcid, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("milk") - .withLocalizedName("Milk") - .withStateAndTemperature(LIQUID, 290) - .buildAndRegister() - .configureMaterials(Materials.Milk) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Milk, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("mcguffium") - .withLocalizedName("Mc Guffium 239") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.McGuffium239) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.McGuffium239, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("refinedGlue") - .withLocalizedName("Refined Glue") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Glue) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Glue, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("hotfryingoil") - .withLocalizedName("Hot Frying Oil") - .withStateAndTemperature(LIQUID, 400) - .buildAndRegister() - .configureMaterials(Materials.FryingOilHot) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.FryingOilHot, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder("DimensionallyTranscendentResidue") - .withLocalizedName("Dimensionally Transcendent Residue") - .withStateAndTemperature(LIQUID, 2000000000) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.DimensionallyTranscendentResidue) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.DimensionallyTranscendentResidue, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("ExcitedDTCC") - .withLocalizedName("Excited Dimensionally Transcendent Crude Catalyst") - .withStateAndTemperature(LIQUID, 500000000) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.ExcitedDTCC) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.ExcitedDTCC, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("ExcitedDTPC") - .withLocalizedName("Excited Dimensionally Transcendent Prosaic Catalyst") - .withStateAndTemperature(LIQUID, 500000000) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.ExcitedDTPC) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.ExcitedDTPC, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("ExcitedDTRC") - .withLocalizedName("Excited Dimensionally Transcendent Resplendent Catalyst") - .withStateAndTemperature(LIQUID, 500000000) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.ExcitedDTRC) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.ExcitedDTRC, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("ExcitedDTEC") - .withLocalizedName("Excited Dimensionally Transcendent Exotic Catalyst") - .withStateAndTemperature(LIQUID, 500000000) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.ExcitedDTEC) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.ExcitedDTEC, 1L), - ItemList.Cell_Empty.get(1L)); - GT_FluidFactory.builder("ExcitedDTSC") - .withLocalizedName("Excited Dimensionally Transcendent Stellar Catalyst") - .withStateAndTemperature(LIQUID, 500000000) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.ExcitedDTSC) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.ExcitedDTSC, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder(MaterialsUEVplus.RawStarMatter.mName) - .withLocalizedName(MaterialsUEVplus.RawStarMatter.mLocalizedName) - .withStateAndTemperature(LIQUID, 10_000_000) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.RawStarMatter) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.RawStarMatter, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder(MaterialsUEVplus.Space.mName) - .withLocalizedName(MaterialsUEVplus.Space.mLocalizedName) - .withStateAndTemperature(MOLTEN, 0) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.Space) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.Space, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder(MaterialsUEVplus.Time.mName) - .withLocalizedName(MaterialsUEVplus.Time.mLocalizedName) - .withStateAndTemperature(MOLTEN, 0) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.Time) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.Time, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder("PrimordialMatter") - .withLocalizedName(MaterialsUEVplus.PrimordialMatter.mLocalizedName) - .withStateAndTemperature(LIQUID, 2_000_000_000) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.PrimordialMatter) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.PrimordialMatter, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder("QuarkGluonPlasma") - .withLocalizedName(MaterialsUEVplus.QuarkGluonPlasma.mLocalizedName) - .withStateAndTemperature(LIQUID, 2_000_000_000) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.QuarkGluonPlasma) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.QuarkGluonPlasma, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder("PhononMedium") - .withLocalizedName(MaterialsUEVplus.PhononMedium.mLocalizedName) - .withStateAndTemperature(LIQUID, 500) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.PhononMedium) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.PhononMedium, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder("PhononCrystalSolution") - .withLocalizedName(MaterialsUEVplus.PhononCrystalSolution.mLocalizedName) - .withStateAndTemperature(LIQUID, 500) - .buildAndRegister() - .configureMaterials(MaterialsUEVplus.PhononCrystalSolution) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.PhononCrystalSolution, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder("fieryblood") - .withLocalizedName("Fiery Blood") - .withStateAndTemperature(LIQUID, 6400) - .buildAndRegister() - .configureMaterials(Materials.FierySteel) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.FierySteel, 1L), - ItemList.Cell_Empty.get(1L)); - - GT_FluidFactory.builder("holywater") - .withLocalizedName("Holy Water") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.HolyWater) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.HolyWater, 1L), - ItemList.Cell_Empty.get(1L)); - if (ItemList.TF_Vial_FieryBlood.get(1L) != null) { - FluidContainerRegistry.registerFluidContainer( - new FluidContainerRegistry.FluidContainerData( - Materials.FierySteel.getFluid(250L), - ItemList.TF_Vial_FieryBlood.get(1L), - ItemList.Bottle_Empty.get(1L))); - } - - FluidContainerRegistry.registerFluidContainer( - new FluidContainerRegistry.FluidContainerData( - Materials.Milk.getFluid(1000L), - GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Milk, 1L), - GT_OreDictUnificator.get(OrePrefixes.bucket, Materials.Empty, 1L))); - FluidContainerRegistry.registerFluidContainer( - new FluidContainerRegistry.FluidContainerData( - Materials.Milk.getFluid(250L), - ItemList.Bottle_Milk.get(1L), - ItemList.Bottle_Empty.get(1L))); - FluidContainerRegistry.registerFluidContainer( - new FluidContainerRegistry.FluidContainerData( - Materials.HolyWater.getFluid(250L), - ItemList.Bottle_Holy_Water.get(1L), - ItemList.Bottle_Empty.get(1L))); - FluidContainerRegistry.registerFluidContainer( - new FluidContainerRegistry.FluidContainerData( - Materials.McGuffium239.getFluid(250L), - ItemList.McGuffium_239.get(1L), - ItemList.Bottle_Empty.get(1L))); - FluidContainerRegistry.registerFluidContainer( - new FluidContainerRegistry.FluidContainerData( - Materials.Fuel.getFluid(100L), - ItemList.Tool_Lighter_Invar_Full.get(1L), - ItemList.Tool_Lighter_Invar_Empty.get(1L))); - FluidContainerRegistry.registerFluidContainer( - new FluidContainerRegistry.FluidContainerData( - Materials.Fuel.getFluid(1000L), - ItemList.Tool_Lighter_Platinum_Full.get(1L), - ItemList.Tool_Lighter_Platinum_Empty.get(1L))); - - Dyes.dyeBlack.addFluidDye(GT_FluidFactory.of("squidink", "Squid Ink", LIQUID, 295)); - Dyes.dyeBlue.addFluidDye(GT_FluidFactory.of("indigo", "Indigo Dye", LIQUID, 295)); - for (byte i = 0; i < Dyes.VALUES.length; i = (byte) (i + 1)) { - Dyes tDye = Dyes.VALUES[i]; - tDye.addFluidDye( - GT_FluidFactory.builder( - "dye.watermixed." + tDye.name() - .toLowerCase(Locale.ENGLISH)) - .withTextureName("dyes") - .withLocalizedName("Water Mixed " + tDye.mName + " Dye") - .withColorRGBA(tDye.getRGBA()) - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .asFluid()); - tDye.addFluidDye( - GT_FluidFactory.builder( - "dye.chemical." + tDye.name() - .toLowerCase(Locale.ENGLISH)) - .withTextureName("dyes") - .withLocalizedName("Chemical " + tDye.mName + " Dye") - .withColorRGBA(tDye.getRGBA()) - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerContainers(ItemList.SPRAY_CAN_DYES[i].get(1L), ItemList.Spray_Empty.get(1L), 2304) - .asFluid()); - } - GT_FluidFactory.builder("ice") - .withLocalizedName("Crushed Ice") - .withStateAndTemperature(SLURRY, 270) - .buildAndRegister() - .configureMaterials(Materials.Ice) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Ice, 1L), - ItemList.Cell_Empty.get(1L)); - Materials.Water.mSolid = Materials.Ice.mSolid; - - GT_FluidFactory.builder("molten.glass") - .withLocalizedName("Molten Glass") - .withStateAndTemperature(MOLTEN, 1500) - .buildAndRegister() - .configureMaterials(Materials.Glass) - .registerContainers( - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Glass, 1L), - ItemList.Cell_Empty.get(1L), - 144); - GT_FluidFactory.builder("molten.redstone") - .withLocalizedName("Molten Redstone") - .withStateAndTemperature(MOLTEN, 500) - .buildAndRegister() - .configureMaterials(Materials.Redstone) - .registerContainers( - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Redstone, 1L), - ItemList.Cell_Empty.get(1L), - 144); - GT_FluidFactory.builder("molten.blaze") - .withLocalizedName("Molten Blaze") - .withStateAndTemperature(MOLTEN, 6400) - .buildAndRegister() - .configureMaterials(Materials.Blaze) - .registerContainers( - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Blaze, 1L), - ItemList.Cell_Empty.get(1L), - 144); - GT_FluidFactory.builder("wet.concrete") - .withLocalizedName("Wet Concrete") - .withStateAndTemperature(MOLTEN, 300) - .buildAndRegister() - .configureMaterials(Materials.Concrete) - .registerContainers( - GT_OreDictUnificator.get(OrePrefixes.cellMolten, Materials.Concrete, 1L), - ItemList.Cell_Empty.get(1L), - 144); - - for (Materials tMaterial : Materials.values()) { - if ((tMaterial.mStandardMoltenFluid == null) && (tMaterial.contains(SubTag.SMELTING_TO_FLUID)) - && (!tMaterial.contains(SubTag.NO_SMELTING))) { - GT_Mod.gregtechproxy.addAutogeneratedMoltenFluid(tMaterial); - if ((tMaterial.mSmeltInto != tMaterial) && (tMaterial.mSmeltInto.mStandardMoltenFluid == null)) { - GT_Mod.gregtechproxy.addAutogeneratedMoltenFluid(tMaterial.mSmeltInto); - } - } - if (tMaterial.mElement != null) { - GT_Mod.gregtechproxy.addAutogeneratedPlasmaFluid(tMaterial); - } - if (tMaterial.hasCorrespondingFluid()) { - GT_Mod.gregtechproxy.addAutoGeneratedCorrespondingFluid(tMaterial); - } - if (tMaterial.hasCorrespondingGas()) { - GT_Mod.gregtechproxy.addAutoGeneratedCorrespondingGas(tMaterial); - } - if (tMaterial.canBeCracked()) { - GT_Mod.gregtechproxy.addAutoGeneratedHydroCrackedFluids(tMaterial); - GT_Mod.gregtechproxy.addAutoGeneratedSteamCrackedFluids(tMaterial); - } - } - - GT_FluidFactory.builder("potion.awkward") - .withLocalizedName("Awkward Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.thick") - .withLocalizedName("Thick Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 32), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.mundane") - .withLocalizedName("Mundane Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 64), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.damage") - .withLocalizedName("Harming Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8204), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.damage.strong") - .withLocalizedName("Strong Harming Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8236), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.damage.splash") - .withLocalizedName("Splash Harming Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16396), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.damage.strong.splash") - .withLocalizedName("Strong Splash Harming Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16428), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.health") - .withLocalizedName("Healing Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8197), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.health.strong") - .withLocalizedName("Strong Healing Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8229), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.health.splash") - .withLocalizedName("Splash Healing Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16389), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.health.strong.splash") - .withLocalizedName("Strong Splash Healing Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16421), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.speed") - .withLocalizedName("Swiftness Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8194), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.speed.strong") - .withLocalizedName("Strong Swiftness Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8226), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.speed.long") - .withLocalizedName("Stretched Swiftness Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8258), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.speed.splash") - .withLocalizedName("Splash Swiftness Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16386), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.speed.strong.splash") - .withLocalizedName("Strong Splash Swiftness Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16418), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.speed.long.splash") - .withLocalizedName("Stretched Splash Swiftness Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16450), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.strength") - .withLocalizedName("Strength Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8201), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.strength.strong") - .withLocalizedName("Strong Strength Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8233), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.strength.long") - .withLocalizedName("Stretched Strength Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8265), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.strength.splash") - .withLocalizedName("Splash Strength Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16393), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.strength.strong.splash") - .withLocalizedName("Strong Splash Strength Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16425), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.strength.long.splash") - .withLocalizedName("Stretched Splash Strength Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16457), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.regen") - .withLocalizedName("Regenerating Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8193), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.regen.strong") - .withLocalizedName("Strong Regenerating Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8225), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.regen.long") - .withLocalizedName("Stretched Regenerating Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8257), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.regen.splash") - .withLocalizedName("Splash Regenerating Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16385), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.regen.strong.splash") - .withLocalizedName("Strong Splash Regenerating Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16417), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.regen.long.splash") - .withLocalizedName("Stretched Splash Regenerating Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16449), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.poison") - .withLocalizedName("Poisonous Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8196), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.poison.strong") - .withLocalizedName("Strong Poisonous Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8228), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.poison.long") - .withLocalizedName("Stretched Poisonous Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8260), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.poison.splash") - .withLocalizedName("Splash Poisonous Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16388), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.poison.strong.splash") - .withLocalizedName("Strong Splash Poisonous Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16420), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.poison.long.splash") - .withLocalizedName("Stretched Splash Poisonous Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16452), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.fireresistance") - .withLocalizedName("Fire Resistant Brew") - .withStateAndTemperature(LIQUID, 375) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8195), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.fireresistance.long") - .withLocalizedName("Stretched Fire Resistant Brew") - .withStateAndTemperature(LIQUID, 375) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8259), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.fireresistance.splash") - .withLocalizedName("Splash Fire Resistant Brew") - .withStateAndTemperature(LIQUID, 375) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16387), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.fireresistance.long.splash") - .withLocalizedName("Stretched Splash Fire Resistant Brew") - .withStateAndTemperature(LIQUID, 375) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16451), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.nightvision") - .withLocalizedName("Night Vision Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8198), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.nightvision.long") - .withLocalizedName("Stretched Night Vision Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8262), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.nightvision.splash") - .withLocalizedName("Splash Night Vision Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16390), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.nightvision.long.splash") - .withLocalizedName("Stretched Splash Night Vision Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16454), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.weakness") - .withLocalizedName("Weakening Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8200), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.weakness.long") - .withLocalizedName("Stretched Weakening Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8264), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.weakness.splash") - .withLocalizedName("Splash Weakening Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16392), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.weakness.long.splash") - .withLocalizedName("Stretched Splash Weakening Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16456), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.slowness") - .withLocalizedName("Lame Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8202), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.slowness.long") - .withLocalizedName("Stretched Lame Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8266), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.slowness.splash") - .withLocalizedName("Splash Lame Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16394), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.slowness.long.splash") - .withLocalizedName("Stretched Splash Lame Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16458), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.waterbreathing") - .withLocalizedName("Fishy Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8205), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.waterbreathing.long") - .withLocalizedName("Stretched Fishy Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8269), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.waterbreathing.splash") - .withLocalizedName("Splash Fishy Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16397), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.waterbreathing.long.splash") - .withLocalizedName("Stretched Splash Fishy Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16461), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.invisibility") - .withLocalizedName("Invisible Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8206), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.invisibility.long") - .withLocalizedName("Stretched Invisible Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 8270), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.invisibility.splash") - .withLocalizedName("Splash Invisible Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16398), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.invisibility.long.splash") - .withLocalizedName("Stretched Splash Invisible Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(new ItemStack(Items.potionitem, 1, 16462), ItemList.Bottle_Empty.get(1L)); - - GT_FluidFactory.builder("potion.purpledrink") - .withLocalizedName("Purple Drink") - .withStateAndTemperature(LIQUID, 275) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Purple_Drink.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.grapejuice") - .withLocalizedName("Grape Juice") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Grape_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.wine") - .withLocalizedName("Wine") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Wine.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.vinegar") - .withLocalizedName("Vinegar") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .configureMaterials(Materials.Vinegar) - .registerPContainers(ItemList.Bottle_Vinegar.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.potatojuice") - .withLocalizedName("Potato Juice") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Potato_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.vodka") - .withLocalizedName("Vodka") - .withStateAndTemperature(LIQUID, 275) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Vodka.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.leninade") - .withLocalizedName("Leninade") - .withStateAndTemperature(LIQUID, 275) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Leninade.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.mineralwater") - .withLocalizedName("Mineral Water") - .withStateAndTemperature(LIQUID, 275) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Mineral_Water.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.saltywater") - .withLocalizedName("Salty Water") - .withStateAndTemperature(LIQUID, 275) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Salty_Water.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.reedwater") - .withLocalizedName("Reed Water") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Reed_Water.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.rum") - .withLocalizedName("Rum") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Rum.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.piratebrew") - .withLocalizedName("Pirate Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Pirate_Brew.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.hopsjuice") - .withLocalizedName("Hops Juice") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Hops_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.darkbeer") - .withLocalizedName("Dark Beer") - .withStateAndTemperature(LIQUID, 275) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Dark_Beer.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.dragonblood") - .withLocalizedName("Dragon Blood") - .withStateAndTemperature(LIQUID, 375) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Dragon_Blood.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.wheatyjuice") - .withLocalizedName("Wheaty Juice") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Wheaty_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.scotch") - .withLocalizedName("Scotch") - .withStateAndTemperature(LIQUID, 275) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Scotch.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.glenmckenner") - .withLocalizedName("Glen McKenner") - .withStateAndTemperature(LIQUID, 275) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Glen_McKenner.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.wheatyhopsjuice") - .withLocalizedName("Wheaty Hops Juice") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Wheaty_Hops_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.beer") - .withLocalizedName("Beer") - .withStateAndTemperature(LIQUID, 275) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Beer.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.chillysauce") - .withLocalizedName("Chilly Sauce") - .withStateAndTemperature(LIQUID, 375) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Chilly_Sauce.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.hotsauce") - .withLocalizedName("Hot Sauce") - .withStateAndTemperature(LIQUID, 380) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Hot_Sauce.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.diabolosauce") - .withLocalizedName("Diabolo Sauce") - .withStateAndTemperature(LIQUID, 385) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Diabolo_Sauce.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.diablosauce") - .withLocalizedName("Diablo Sauce") - .withStateAndTemperature(LIQUID, 390) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Diablo_Sauce.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.diablosauce.strong") - .withLocalizedName("Old Man Snitches glitched Diablo Sauce") - .withStateAndTemperature(LIQUID, 999) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Snitches_Glitch_Sauce.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.applejuice") - .withLocalizedName("Apple Juice") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Apple_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.cider") - .withLocalizedName("Cider") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Cider.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.goldenapplejuice") - .withLocalizedName("Golden Apple Juice") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Golden_Apple_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.goldencider") - .withLocalizedName("Golden Cider") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Golden_Cider.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.idunsapplejuice") - .withLocalizedName("Idun's Apple Juice") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Iduns_Apple_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.notchesbrew") - .withLocalizedName("Notches Brew") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Notches_Brew.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.lemonjuice") - .withLocalizedName("Lemon Juice") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Lemon_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.limoncello") - .withLocalizedName("Limoncello") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Limoncello.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.lemonade") - .withLocalizedName("Lemonade") - .withStateAndTemperature(LIQUID, 275) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Lemonade.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.alcopops") - .withLocalizedName("Alcopops") - .withStateAndTemperature(LIQUID, 275) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Alcopops.get(1L), ItemList.Bottle_Empty.get(1L)); - GT_FluidFactory.builder("potion.cavejohnsonsgrenadejuice") - .withLocalizedName("Cave Johnsons Grenade Juice") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.Bottle_Cave_Johnsons_Grenade_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); - - GT_FluidFactory.builder("potion.darkcoffee") - .withLocalizedName("Dark Coffee") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.ThermosCan_Dark_Coffee.get(1L), ItemList.ThermosCan_Empty.get(1L)); - GT_FluidFactory.builder("potion.darkcafeaulait") - .withLocalizedName("Dark Cafe au lait") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.ThermosCan_Dark_Cafe_au_lait.get(1L), ItemList.ThermosCan_Empty.get(1L)); - GT_FluidFactory.builder("potion.coffee") - .withLocalizedName("Coffee") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.ThermosCan_Coffee.get(1L), ItemList.ThermosCan_Empty.get(1L)); - GT_FluidFactory.builder("potion.cafeaulait") - .withLocalizedName("Cafe au lait") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.ThermosCan_Cafe_au_lait.get(1L), ItemList.ThermosCan_Empty.get(1L)); - GT_FluidFactory.builder("potion.laitaucafe") - .withLocalizedName("Lait au cafe") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.ThermosCan_Lait_au_cafe.get(1L), ItemList.ThermosCan_Empty.get(1L)); - GT_FluidFactory.builder("potion.darkchocolatemilk") - .withLocalizedName("Bitter Chocolate Milk") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.ThermosCan_Dark_Chocolate_Milk.get(1L), ItemList.ThermosCan_Empty.get(1L)); - GT_FluidFactory.builder("potion.chocolatemilk") - .withLocalizedName("Chocolate Milk") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.ThermosCan_Chocolate_Milk.get(1L), ItemList.ThermosCan_Empty.get(1L)); - GT_FluidFactory.builder("potion.tea") - .withLocalizedName("Tea") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.ThermosCan_Tea.get(1L), ItemList.ThermosCan_Empty.get(1L)); - GT_FluidFactory.builder("potion.sweettea") - .withLocalizedName("Sweet Tea") - .withStateAndTemperature(LIQUID, 295) - .buildAndRegister() - .registerPContainers(ItemList.ThermosCan_Sweet_Tea.get(1L), ItemList.ThermosCan_Empty.get(1L)); - GT_FluidFactory.builder("potion.icetea") - .withLocalizedName("Ice Tea") - .withStateAndTemperature(LIQUID, 255) - .buildAndRegister() - .registerPContainers(ItemList.ThermosCan_Ice_Tea.get(1L), ItemList.ThermosCan_Empty.get(1L)); - GT_FluidFactory.builder("liquid_sodium") - .withLocalizedName("Liquid Sodium") - .withStateAndTemperature(LIQUID, 495) - .buildAndRegister() - .configureMaterials(Materials.Sodium) - .registerBContainers( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Sodium, 1L), - ItemList.Cell_Empty.get(1L)); - - FluidContainerRegistry.registerFluidContainer( - new FluidContainerRegistry.FluidContainerData( - FluidRegistry.getFluidStack("potion.poison.strong", 750), - ItemList.IC2_Spray_WeedEx.get(1L), - ItemList.Spray_Empty.get(1L))); - - if (!GT_Values.D1) { - try { - Class.forName("codechicken.nei.api.API"); - GT_Log.out.println("GT_Mod: Hiding certain Items from NEI."); - API.hideItem(ItemList.Display_Fluid.getWildcard(1L)); - } catch (Throwable e) { - if (GT_Values.D1) { - e.printStackTrace(GT_Log.err); - } - } - } - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.cobblestone, 1, WILDCARD)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.gravel, 1, WILDCARD)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L), new ItemStack(Items.flint, 1)) - .outputChances(10000, 1000) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.furnace, 1, WILDCARD)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 8L)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Blocks.lit_furnace, 1, WILDCARD)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 8L)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - - GT_OreDictUnificator.set( - OrePrefixes.ingot, - Materials.FierySteel, - GT_ModHandler.getModItem(TwilightForest.ID, "item.fieryIngot", 1L, 0)); - GT_OreDictUnificator.set( - OrePrefixes.ingot, - Materials.Knightmetal, - GT_ModHandler.getModItem(TwilightForest.ID, "item.knightMetal", 1L, 0)); - GT_OreDictUnificator.set( - OrePrefixes.ingot, - Materials.Steeleaf, - GT_ModHandler.getModItem(TwilightForest.ID, "item.steeleafIngot", 1L, 0)); - GT_OreDictUnificator.set( - OrePrefixes.ingot, - Materials.IronWood, - GT_ModHandler.getModItem(TwilightForest.ID, "item.ironwoodIngot", 1L, 0)); - GT_OreDictUnificator - .set(OrePrefixes.gem, Materials.InfusedAir, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 0)); - GT_OreDictUnificator - .set(OrePrefixes.gem, Materials.InfusedFire, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 1)); - GT_OreDictUnificator - .set(OrePrefixes.gem, Materials.InfusedWater, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 2)); - GT_OreDictUnificator - .set(OrePrefixes.gem, Materials.InfusedEarth, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 3)); - GT_OreDictUnificator - .set(OrePrefixes.gem, Materials.InfusedOrder, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 4)); - GT_OreDictUnificator.set( - OrePrefixes.gem, - Materials.InfusedEntropy, - GT_ModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 5)); - GT_OreDictUnificator - .set(OrePrefixes.nugget, Materials.Mercury, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemNugget", 1L, 5)); - GT_OreDictUnificator - .set(OrePrefixes.nugget, Materials.Thaumium, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemNugget", 1L, 6)); - GT_OreDictUnificator - .set(OrePrefixes.ingot, Materials.Thaumium, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 2)); - GT_OreDictUnificator - .set(OrePrefixes.gem, Materials.Mercury, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 3)); - GT_OreDictUnificator - .set(OrePrefixes.gem, Materials.Amber, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 6)); - GT_OreDictUnificator - .set(OrePrefixes.gem, Materials.Firestone, GT_ModHandler.getModItem(Railcraft.ID, "firestone.raw", 1L)); - - GT_OreDictUnificator - .set(OrePrefixes.nugget, Materials.Void, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemNugget", 1L, 7)); - GT_OreDictUnificator - .set(OrePrefixes.ingot, Materials.Void, GT_ModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 16)); - - GT_OreDictUnificator.set( - OrePrefixes.plate, - Materials.Iron, - GT_ModHandler.getModItem(Railcraft.ID, "part.plate", 1L, 0), - false, - false); - - GT_OreDictUnificator.set( - OrePrefixes.plate, - Materials.Steel, - GT_ModHandler.getModItem(Railcraft.ID, "part.plate", 1L, 1), - false, - false); - - GT_OreDictUnificator.set( - OrePrefixes.plate, - Materials.TinAlloy, - GT_ModHandler.getModItem(Railcraft.ID, "part.plate", 1L, 2), - false, - false); - - GT_OreDictUnificator.set( - OrePrefixes.plate, - Materials.Copper, - GT_ModHandler.getModItem(Railcraft.ID, "part.plate", 1L, 3), - false, - false); - - GT_OreDictUnificator.set( - OrePrefixes.dust, - Materials.Cocoa, - GT_ModHandler.getModItem(PamsHarvestCraft.ID, "cocoapowderItem", 1L, 0)); - GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Coffee, ItemList.IC2_CoffeePowder.get(1L)); - - GregTech_API - .registerMachineBlock(GT_Utility.getBlockFromStack(GT_ModHandler.getIC2Item("reinforcedGlass", 0)), 0); - - GregTech_API.sSolenoidCoilCasings = new GT_Cyclotron_Coils(); - ItemList.TierdDrone0 - .set(new GT_TierDrone("tierdDrone0", "Drone (Level 1)", "Quadcopter Stable Small Aircraft", 1)); - ItemList.TierdDrone1 - .set(new GT_TierDrone("tierdDrone1", "Drone (Level 2)", "Dual Turbo High-Ejection Medium Aircraft", 2)); - ItemList.TierdDrone2 - .set(new GT_TierDrone("tierdDrone2", "Drone (Level 3)", "Single Engine Anti-Gravity Large Aircraft", 3)); - - } -} diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java deleted file mode 100644 index e7ad9e9337..0000000000 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_MetaTileEntities.java +++ /dev/null @@ -1,13703 +0,0 @@ -package gregtech.loaders.preload; - -import static gregtech.api.enums.MetaTileEntityIDs.*; -import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_DATA_ACCESS_HATCH; -import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_DEBUG_STRUCTURE_WRITTER; -import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_SEISMIC_PROSPECTOR_EV; -import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_SEISMIC_PROSPECTOR_HV; -import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_SEISMIC_PROSPECTOR_LV; -import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_SEISMIC_PROSPECTOR_MV; -import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_LINE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.AUTOMATABLE_DATA_ACCESS_HATCH; -import static gregtech.api.enums.MetaTileEntityIDs.AUTO_MAINTENANCE_HATCH; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_EV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_HV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_IV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_LV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_MV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_EV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_HV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_IV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_LV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_MV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_EV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_HV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_IV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_LV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_MV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_EV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_HV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_IV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_LV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_MV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_4_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_4_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_4_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_4_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_EV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_HV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_IV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_LV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_MV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_UV; -import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.BETTER_JUKEBOX_EV; -import static gregtech.api.enums.MetaTileEntityIDs.BETTER_JUKEBOX_HV; -import static gregtech.api.enums.MetaTileEntityIDs.BETTER_JUKEBOX_IV; -import static gregtech.api.enums.MetaTileEntityIDs.BETTER_JUKEBOX_LV; -import static gregtech.api.enums.MetaTileEntityIDs.BETTER_JUKEBOX_MV; -import static gregtech.api.enums.MetaTileEntityIDs.BLACKHOLE_COMPRESSOR_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_EV; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_HV; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_IV; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_LV; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_MV; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_UV; -import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.BRICKED_BLAST_FURNACE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.CHARCOAL_PILE_IGNITER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_UV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.CLEANROOM_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.COMBUSTION_ENGINE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.COMBUSTION_GENERATOR_HV; -import static gregtech.api.enums.MetaTileEntityIDs.COMBUSTION_GENERATOR_LV; -import static gregtech.api.enums.MetaTileEntityIDs.COMBUSTION_GENERATOR_MV; -import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.CONCRETE_BACKFILLER_II_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.CONCRETE_BACKFILLER_I_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.CRAFTING_INPUT_ME; -import static gregtech.api.enums.MetaTileEntityIDs.CRAFTING_INPUT_ME_BUS; -import static gregtech.api.enums.MetaTileEntityIDs.CRAFTING_INPUT_SLAVE; -import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.DATA_ACCESS_HATCH; -import static gregtech.api.enums.MetaTileEntityIDs.DISTILLATION_TOWER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_UV; -import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.DTPF_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_EV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_HV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_IV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_LV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_MV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.DroneDownLink; -import static gregtech.api.enums.MetaTileEntityIDs.Drone_Centre; -import static gregtech.api.enums.MetaTileEntityIDs.EBF_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_EV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_HV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_IV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_LV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_MV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.EXTREME_COMBUSTION_ENGINE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_UV; -import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.FUSION_CONTROLLER_MKI; -import static gregtech.api.enums.MetaTileEntityIDs.FUSION_CONTROLLER_MKII; -import static gregtech.api.enums.MetaTileEntityIDs.FUSION_CONTROLLER_MKIII; -import static gregtech.api.enums.MetaTileEntityIDs.GAS_TURBINE_EV; -import static gregtech.api.enums.MetaTileEntityIDs.GAS_TURBINE_HV; -import static gregtech.api.enums.MetaTileEntityIDs.GAS_TURBINE_IV; -import static gregtech.api.enums.MetaTileEntityIDs.GAS_TURBINE_LV; -import static gregtech.api.enums.MetaTileEntityIDs.GAS_TURBINE_MV; -import static gregtech.api.enums.MetaTileEntityIDs.HATCH_DEGASIFIER_CONTROL; -import static gregtech.api.enums.MetaTileEntityIDs.HATCH_LENS_HOUSING; -import static gregtech.api.enums.MetaTileEntityIDs.HATCH_LENS_INDICATOR; -import static gregtech.api.enums.MetaTileEntityIDs.HATCH_PH_SENSOR; -import static gregtech.api.enums.MetaTileEntityIDs.HEAT_DETECTOR_HATCH; -import static gregtech.api.enums.MetaTileEntityIDs.HIGH_AMP_TRANSFORMER_MAX_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.HIGH_AMP_TRANSFORMER_UEV_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.HIGH_AMP_TRANSFORMER_UIV_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.HIGH_AMP_TRANSFORMER_UMV_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.HIGH_AMP_TRANSFORMER_UXV_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.HIGH_PRESSURE_COAL_BOILER; -import static gregtech.api.enums.MetaTileEntityIDs.HIGH_PRESSURE_LAVA_BOILER; -import static gregtech.api.enums.MetaTileEntityIDs.HIGH_PRESSURE_SOLAR_BOILER; -import static gregtech.api.enums.MetaTileEntityIDs.HIP_COMPRESSOR_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_ALLOY_SMELTER; -import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_COMPRESSOR; -import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_EXTRACTOR; -import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_FORGE_HAMMER; -import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_FURNACE; -import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_MACERATOR; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_BRICKED_BRONZE; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_BRONZE; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_EV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_HV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_IV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_LV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_MV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_STEEL; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_UV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_WROUGHT_IRON; -import static gregtech.api.enums.MetaTileEntityIDs.HULL_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.IMPLOSION_COMPRESSOR_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.INDUSTRIAL_APIARY; -import static gregtech.api.enums.MetaTileEntityIDs.INDUSTRIAL_COMPRESSOR_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.INDUSTRIAL_ELECTROMAGNETIC_SEPARATOR_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.INDUSTRIAL_LASER_ENGRAVER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_EV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_HV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_IV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_LV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_ME; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_ME_ADVANCED; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_MV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_UV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_EV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_HV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_IV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_LV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_ME; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_ME_ADVANCED; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_MV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.INTEGRATED_ORE_FACTORY_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_EV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_HV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_IV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_LV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_MV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LARGE_ADVANCED_GAS_TURBINE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.LARGE_BRONZE_BOILER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.LARGE_GAS_TURBINE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.LARGE_HEAT_EXCHANGER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.LARGE_HP_STEAM_TURBINE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.LARGE_PLASMA_TURBINE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.LARGE_STEAM_TURBINE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.LARGE_STEEL_BOILER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.LARGE_TITANIUM_BOILER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.LARGE_TUNGSTENSTEEL_BOILER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.LASER_ENGRAVER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LATHE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LATHE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.LATHE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.LATHE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.LATHE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.LATHE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.LATHE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LCR_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.LIGHTNING_ROD_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LIGHTNING_ROD_HV; -import static gregtech.api.enums.MetaTileEntityIDs.LIGHTNING_ROD_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.LONG_DISTANCE_PIPELINE_FLUID; -import static gregtech.api.enums.MetaTileEntityIDs.LONG_DISTANCE_PIPELINE_ITEM; -import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_ABSORBER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_ABSORBER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_ABSORBER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_ABSORBER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_CONVERTER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_CONVERTER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_CONVERTER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.MAG_HATCH; -import static gregtech.api.enums.MetaTileEntityIDs.MAINTENANCE_HATCH; -import static gregtech.api.enums.MetaTileEntityIDs.MASS_FABRICATOR_EV; -import static gregtech.api.enums.MetaTileEntityIDs.MASS_FABRICATOR_HV; -import static gregtech.api.enums.MetaTileEntityIDs.MASS_FABRICATOR_IV; -import static gregtech.api.enums.MetaTileEntityIDs.MASS_FABRICATOR_LV; -import static gregtech.api.enums.MetaTileEntityIDs.MASS_FABRICATOR_MV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.MINER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.MINER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.MINER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.MIXER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.MIXER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.MIXER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.MIXER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.MIXER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.MIXER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.MIXER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_EV; -import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_HV; -import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_IV; -import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_LV; -import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_MV; -import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_EV; -import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_HV; -import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_IV; -import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_LV; -import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_MV; -import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_UV; -import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.MULTIBLOCK_PUMP_INFINITE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.MULTIBLOCK_PUMP_MKI_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.MULTILOCK_PUMP_MKIII_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.MULTILOCK_PUMP_MKII_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.MULTILOCK_PUMP_MKIV_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.MULTI_CANNER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.MULTI_LATHE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.MULTI_SMELTER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.NANO_FORGE_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.NAQUADAH_REACTOR_EV; -import static gregtech.api.enums.MetaTileEntityIDs.NAQUADAH_REACTOR_IV; -import static gregtech.api.enums.MetaTileEntityIDs.NAQUADAH_REACTOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.NAQUADAH_REACTOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.NAQUADAH_REACTOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.NEUTRONIUM_COMPRESSOR_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.OIL_CRACKER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.ORE_DRILL_MKIII_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.ORE_DRILL_MKII_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.ORE_DRILL_MKIV_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.ORE_DRILL_MKI_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_UV; -import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_EV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_HV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_IV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_LV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_ME; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_MV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_UV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_EV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_HV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_IV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_LV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_ME; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_MV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.PCB_FACTORY_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_GENERATOR_EV; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_GENERATOR_IV; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_GENERATOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_GENERATOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_GENERATOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.PROCESSING_ARRAY_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.PUMP_EV; -import static gregtech.api.enums.MetaTileEntityIDs.PUMP_HV; -import static gregtech.api.enums.MetaTileEntityIDs.PUMP_IV; -import static gregtech.api.enums.MetaTileEntityIDs.PUMP_LV; -import static gregtech.api.enums.MetaTileEntityIDs.PUMP_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.PUMP_MV; -import static gregtech.api.enums.MetaTileEntityIDs.PUMP_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_PLANT_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_CLARIFIER; -import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_DEGASIFIER; -import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_FLOCCULATOR; -import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_OZONATION; -import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_PARTICLE_EXTRACTOR; -import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_PH_ADJUSTMENT; -import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_PLASMA_HEATER; -import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_UV_TREATMENT; -import static gregtech.api.enums.MetaTileEntityIDs.PYROLYSE_OVEN_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_EV; -import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_IV; -import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UV; -import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_CHEST_EV; -import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_CHEST_HV; -import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_CHEST_IV; -import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_CHEST_LV; -import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_CHEST_MV; -import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_TANK_EV; -import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_TANK_HV; -import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_TANK_IV; -import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_TANK_LV; -import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_TANK_MV; -import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.REPLICATOR_EV; -import static gregtech.api.enums.MetaTileEntityIDs.REPLICATOR_HV; -import static gregtech.api.enums.MetaTileEntityIDs.REPLICATOR_IV; -import static gregtech.api.enums.MetaTileEntityIDs.REPLICATOR_LV; -import static gregtech.api.enums.MetaTileEntityIDs.REPLICATOR_MV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.SIMPLE_SOLAR_BOILER; -import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.SMALL_COAL_BOILER; -import static gregtech.api.enums.MetaTileEntityIDs.STEAM_ALLOY_SMELTER; -import static gregtech.api.enums.MetaTileEntityIDs.STEAM_COMPRESSOR; -import static gregtech.api.enums.MetaTileEntityIDs.STEAM_EXTRACTOR; -import static gregtech.api.enums.MetaTileEntityIDs.STEAM_FORGE_HAMMER; -import static gregtech.api.enums.MetaTileEntityIDs.STEAM_FURNACE; -import static gregtech.api.enums.MetaTileEntityIDs.STEAM_MACERATOR; -import static gregtech.api.enums.MetaTileEntityIDs.STEAM_TURBINE_HV; -import static gregtech.api.enums.MetaTileEntityIDs.STEAM_TURBINE_LV; -import static gregtech.api.enums.MetaTileEntityIDs.STEAM_TURBINE_MV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_CHEST_EV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_CHEST_HV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_CHEST_IV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_CHEST_LV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_CHEST_MV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_TANK_EV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_TANK_HV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_TANK_IV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_TANK_LV; -import static gregtech.api.enums.MetaTileEntityIDs.SUPER_TANK_MV; -import static gregtech.api.enums.MetaTileEntityIDs.TELEPORTER; -import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_UV; -import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.TRANSCENDENT_PLASMA_MIXER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.TRANSFORMER_MAX_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.TRANSFORMER_UEV_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.TRANSFORMER_UIV_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.TRANSFORMER_UMV_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.TRANSFORMER_UXV_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_EV; -import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_HV; -import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_IV; -import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_LV; -import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_MV; -import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_UV; -import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.VACUUM_FREEZER_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_EV; -import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_HV; -import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_IV; -import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_LV; -import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_MV; -import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_EV_HV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_HV_MV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_IV_EV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_LV_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_LuV_IV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_MAX_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_MV_LV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UEV_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UHV_UV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UIV_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UMV_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UV_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UXV_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_ZPM_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_EV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_HV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_IV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_LV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_MV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_EV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_HV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_IV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_LV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_MAX; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_MV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UXV; -import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_UEV; -import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_UHV; -import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_UIV; -import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_UMV; -import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_UV; -import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_EV; -import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_HV; -import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_IV; -import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_LV; -import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_LuV; -import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_MV; -import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_UV; -import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.WORMHOLE_GENERATOR_CONTROLLER; -import static gregtech.api.enums.MetaTileEntityIDs.transformer_EV_HV; -import static gregtech.api.enums.MetaTileEntityIDs.transformer_HV_MV; -import static gregtech.api.enums.MetaTileEntityIDs.transformer_IV_EV; -import static gregtech.api.enums.MetaTileEntityIDs.transformer_LV_ULV; -import static gregtech.api.enums.MetaTileEntityIDs.transformer_LuV_IV; -import static gregtech.api.enums.MetaTileEntityIDs.transformer_MV_LV; -import static gregtech.api.enums.MetaTileEntityIDs.transformer_UHV_UV; -import static gregtech.api.enums.MetaTileEntityIDs.transformer_UV_ZPM; -import static gregtech.api.enums.MetaTileEntityIDs.transformer_ZPM_LuV; -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; -import static gregtech.api.recipe.RecipeMaps.amplifierRecipes; -import static gregtech.api.recipe.RecipeMaps.arcFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; -import static gregtech.api.recipe.RecipeMaps.benderRecipes; -import static gregtech.api.recipe.RecipeMaps.cannerRecipes; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; -import static gregtech.api.recipe.RecipeMaps.chemicalReactorRecipes; -import static gregtech.api.recipe.RecipeMaps.circuitAssemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.compressorRecipes; -import static gregtech.api.recipe.RecipeMaps.cutterRecipes; -import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; -import static gregtech.api.recipe.RecipeMaps.electroMagneticSeparatorRecipes; -import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; -import static gregtech.api.recipe.RecipeMaps.extractorRecipes; -import static gregtech.api.recipe.RecipeMaps.extruderRecipes; -import static gregtech.api.recipe.RecipeMaps.fermentingRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; -import static gregtech.api.recipe.RecipeMaps.formingPressRecipes; -import static gregtech.api.recipe.RecipeMaps.furnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; -import static gregtech.api.recipe.RecipeMaps.latheRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.microwaveRecipes; -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.recipe.RecipeMaps.oreWasherRecipes; -import static gregtech.api.recipe.RecipeMaps.plasmaArcFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.polarizerRecipes; -import static gregtech.api.recipe.RecipeMaps.recyclerRecipes; -import static gregtech.api.recipe.RecipeMaps.sifterRecipes; -import static gregtech.api.recipe.RecipeMaps.slicerRecipes; -import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.wiremillRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_Utility.calculateRecipeEU; - -import net.minecraft.util.EnumChatFormatting; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.MachineType; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TierEU; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Frame; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Item; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicBatteryBuffer; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicHull; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_DataAccess; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_QuadrupleHumongous; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MagHatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Transformer; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_WetTransformer; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Wireless_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Wireless_Hatch; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_FrameBox; -import gregtech.common.tileentities.automation.GT_MetaTileEntity_ChestBuffer; -import gregtech.common.tileentities.automation.GT_MetaTileEntity_Filter; -import gregtech.common.tileentities.automation.GT_MetaTileEntity_ItemDistributor; -import gregtech.common.tileentities.automation.GT_MetaTileEntity_RecipeFilter; -import gregtech.common.tileentities.automation.GT_MetaTileEntity_Regulator; -import gregtech.common.tileentities.automation.GT_MetaTileEntity_SuperBuffer; -import gregtech.common.tileentities.automation.GT_MetaTileEntity_TypeFilter; -import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler_Bronze; -import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler_Lava; -import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler_Solar; -import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler_Solar_Steel; -import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler_Steel; -import gregtech.common.tileentities.debug.GT_MetaTileEntity_AdvDebugStructureWriter; -import gregtech.common.tileentities.generators.GT_MetaTileEntity_DieselGenerator; -import gregtech.common.tileentities.generators.GT_MetaTileEntity_GasTurbine; -import gregtech.common.tileentities.generators.GT_MetaTileEntity_LightningRod; -import gregtech.common.tileentities.generators.GT_MetaTileEntity_MagicEnergyConverter; -import gregtech.common.tileentities.generators.GT_MetaTileEntity_MagicalEnergyAbsorber; -import gregtech.common.tileentities.generators.GT_MetaTileEntity_NaquadahReactor; -import gregtech.common.tileentities.generators.GT_MetaTileEntity_PlasmaGenerator; -import gregtech.common.tileentities.generators.GT_MetaTileEntity_SteamTurbine; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_BasicHull_Bronze; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_BasicHull_BronzeBricks; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_BasicHull_Steel; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_BasicHull_SteelBricks; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_CraftingInput_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_CraftingInput_Slave; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Input_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Output_ME; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_AdvSeismicProspector; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_BetterJukebox; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Boxinator; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Charger; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_IndustrialApiary; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Massfabricator; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_MicrowaveEnergyTransmitter; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Miner; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_MonsterRepellent; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_PotionBrewer; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Pump; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Replicator; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_RockBreaker; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Scanner; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_Teleporter; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_TurboCharger; -import gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_WorldAccelerator; -import gregtech.common.tileentities.machines.long_distance.GT_MetaTileEntity_LongDistancePipelineFluid; -import gregtech.common.tileentities.machines.long_distance.GT_MetaTileEntity_LongDistancePipelineItem; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_AssemblyLine; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_BrickedBlastFurnace; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_Charcoal_Pit; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_Cleanroom; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ConcreteBackfiller1; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ConcreteBackfiller2; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_DieselEngine; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_DistillationTower; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ElectricBlastFurnace; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ExtremeDieselEngine; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_FusionComputer1; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_FusionComputer2; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_FusionComputer3; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_HeatExchanger; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ImplosionCompressor; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_IndustrialElectromagneticSeparator; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_IndustrialExtractor; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_IndustrialLaserEngraver; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_IntegratedOreFactory; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeBoiler_Bronze; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeBoiler_Steel; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeBoiler_Titanium; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeBoiler_TungstenSteel; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeChemicalReactor; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeFluidExtractor; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine_Gas; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine_GasAdvanced; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine_HPSteam; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine_Plasma; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine_Steam; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_MultiAutoclave; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_MultiCanner; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_MultiFurnace; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_MultiLathe; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_NanoForge; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_OilCracker; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_OilDrill1; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_OilDrill2; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_OilDrill3; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_OilDrill4; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_OilDrillInfinite; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_OreDrillingPlant1; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_OreDrillingPlant2; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_OreDrillingPlant3; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_OreDrillingPlant4; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_PCBFactory; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_PlasmaForge; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_ProcessingArray; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_PyrolyseOven; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_TranscendentPlasmaMixer; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_VacuumFreezer; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_WormholeGenerator; -import gregtech.common.tileentities.machines.multi.compressor.GT_MetaTileEntity_BlackHoleCompressor; -import gregtech.common.tileentities.machines.multi.compressor.GT_MetaTileEntity_HIPCompressor; -import gregtech.common.tileentities.machines.multi.compressor.GT_MetaTileEntity_HeatSensor; -import gregtech.common.tileentities.machines.multi.compressor.GT_MetaTileEntity_IndustrialCompressor; -import gregtech.common.tileentities.machines.multi.compressor.GT_MetaTileEntity_NeutroniumCompressor; -import gregtech.common.tileentities.machines.multi.drone.GT_MetaTileEntity_DroneCentre; -import gregtech.common.tileentities.machines.multi.drone.GT_MetaTileEntity_Hatch_DroneDownLink; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_Hatch_DegasifierControlHatch; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_LensHousing; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_LensIndicator; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationPlant; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitClarifier; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitDegasifier; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitFlocculation; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitOzonation; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitParticleExtractor; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitPhAdjustment; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitPlasmaHeater; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_PurificationUnitUVTreatment; -import gregtech.common.tileentities.machines.multi.purification.GT_MetaTileEntity_pHSensor; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_AlloySmelter_Bronze; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_AlloySmelter_Steel; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Compressor_Bronze; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Compressor_Steel; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Extractor_Bronze; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Extractor_Steel; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_ForgeHammer_Bronze; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_ForgeHammer_Steel; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Furnace_Bronze; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Furnace_Steel; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Macerator_Bronze; -import gregtech.common.tileentities.machines.steam.GT_MetaTileEntity_Macerator_Steel; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_Locker; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumChest; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumTank; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_SuperChest; -import gregtech.common.tileentities.storage.GT_MetaTileEntity_SuperTank; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMetaTransformerHiAmp; - -// Free IDs left for machines in GT as of 29th of July 2022 - Colen. Please try use them up in order. -// 366 -// 367 -// 368 -// 369 -// 370 -// 376 -// 377 -// 378 -// 379 -// 386 -// 387 -// 388 -// 389 -// 390 -// 396 -// 397 -// 398 -// 399 -// 410 -// 419 -// 426 -// 427 -// 428 -// 429 -// 430 -// 436 -// 437 -// 438 -// 439 -// 446 -// 447 -// 448 -// 449 -// 450 -// 456 -// 457 -// 458 -// 459 -// 466 -// 467 -// 468 -// 469 -// 470 -// 476 -// 477 -// 478 -// 479 -// 486 -// 487 -// 488 -// 489 -// 496 -// 497 -// 498 -// 499 -// 506 -// 507 -// 508 -// 509 -// 518 -// 519 -// 526 -// 530 -// 537 -// 538 -// 539 -// 546 -// 547 -// 548 -// 549 -// 550 -// 556 -// 557 -// 558 -// 559 -// 566 -// 567 -// 576 -// 577 -// 578 -// 579 -// 586 -// 587 -// 588 -// 589 -// 590 -// 596 -// 597 -// 598 -// 599 -// 607 -// 608 -// 609 -// 610 -// 616 -// 617 -// 618 -// 619 -// 626 -// 627 -// 628 -// 629 -// 630 -// 636 -// 637 -// 639 -// 646 -// 647 -// 648 -// 649 -// 650 -// 656 -// 657 -// 658 -// 659 -// 666 -// 667 -// 668 -// 669 -// 670 -// 676 -// 677 -// 678 -// 682 -// 683 -// 684 -// 686 -// 687 -// 688 -// 689 -// 702 -// 703 -// 704 -// 705 -// 706 -// 707 -// 708 -// 709 -// 714 -// 715 -// 716 -// 717 -// 718 -// 719 -// 721 -// 722 -// 723 -// 724 -// 725 -// 726 -// 727 -// 728 -// 729 -// 730 -// 731 -// 732 -// 733 -// 734 -// 735 -// 736 -// 737 -// 738 -// 739 -// 741 -// 742 -// 743 -// 744 -// 745 -// 746 -// 747 -// 748 -// 749 - -// TODO Some GT MetaTileEntity registrations are done in load/GT_Loader_MetaTileEntities_Recipes.java due to joint -// registration+recipe methods, they should be split and brought here to register all in preload. - -public class GT_Loader_MetaTileEntities implements Runnable { // TODO CHECK CIRCUIT RECIPES AND USAGES - - private static final String aTextWire1 = "wire."; - private static final String aTextCable1 = "cable."; - private static final String aTextWire2 = " Wire"; - private static final String aTextCable2 = " Cable"; - public static final String imagination = EnumChatFormatting.RESET + "You just need " - + EnumChatFormatting.DARK_PURPLE - + "I" - + EnumChatFormatting.LIGHT_PURPLE - + "m" - + EnumChatFormatting.DARK_RED - + "a" - + EnumChatFormatting.RED - + "g" - + EnumChatFormatting.YELLOW - + "i" - + EnumChatFormatting.GREEN - + "n" - + EnumChatFormatting.AQUA - + "a" - + EnumChatFormatting.DARK_AQUA - + "t" - + EnumChatFormatting.BLUE - + "i" - + EnumChatFormatting.DARK_BLUE - + "o" - + EnumChatFormatting.DARK_PURPLE - + "n" - + EnumChatFormatting.RESET - + " to use this."; - - private static void registerMultiblockControllers() { - ItemList.Machine_Bricked_BlastFurnace.set( - new GT_MetaTileEntity_BrickedBlastFurnace( - BRICKED_BLAST_FURNACE_CONTROLLER.ID, - "multimachine.brickedblastfurnace", - "Bricked Blast Furnace").getStackForm(1L)); - - ItemList.Machine_Multi_BlastFurnace.set( - new GT_MetaTileEntity_ElectricBlastFurnace( - EBF_CONTROLLER.ID, - "multimachine.blastfurnace", - "Electric Blast Furnace").getStackForm(1L)); - ItemList.Machine_Multi_ImplosionCompressor.set( - new GT_MetaTileEntity_ImplosionCompressor( - IMPLOSION_COMPRESSOR_CONTROLLER.ID, - "multimachine.implosioncompressor", - "Implosion Compressor").getStackForm(1L)); - ItemList.Machine_Multi_VacuumFreezer.set( - new GT_MetaTileEntity_VacuumFreezer( - VACUUM_FREEZER_CONTROLLER.ID, - "multimachine.vacuumfreezer", - "Vacuum Freezer").getStackForm(1L)); - ItemList.Machine_Multi_Furnace.set( - new GT_MetaTileEntity_MultiFurnace( - MULTI_SMELTER_CONTROLLER.ID, - "multimachine.multifurnace", - "Multi Smelter").getStackForm(1L)); - ItemList.Machine_Multi_PlasmaForge.set( - new GT_MetaTileEntity_PlasmaForge( - DTPF_CONTROLLER.ID, - "multimachine.plasmaforge", - "Dimensionally Transcendent Plasma Forge").getStackForm(1L)); - ItemList.Machine_Multi_PurificationPlant.set( - new GT_MetaTileEntity_PurificationPlant( - PURIFICATION_PLANT_CONTROLLER.ID, - "multimachine.purificationplant", - "Water Purification Plant").getStackForm(1L)); - ItemList.Machine_Multi_PurificationUnitClarifier.set( - new GT_MetaTileEntity_PurificationUnitClarifier( - PURIFICATION_UNIT_CLARIFIER.ID, - "multimachine.purificationunitclarifier", - "Clarifier Purification Unit").getStackForm(1L)); - ItemList.Machine_Multi_PurificationUnitFlocculator.set( - new GT_MetaTileEntity_PurificationUnitFlocculation( - PURIFICATION_UNIT_FLOCCULATOR.ID, - "multimachine.purificationunitflocculator", - "Flocculation Purification Unit").getStackForm(1L)); - ItemList.Machine_Multi_PurificationUnitPhAdjustment.set( - new GT_MetaTileEntity_PurificationUnitPhAdjustment( - PURIFICATION_UNIT_PH_ADJUSTMENT.ID, - "multimachine.purificationunitphadjustment", - "pH Neutralization Purification Unit").getStackForm(1L)); - ItemList.Machine_Multi_PurificationUnitOzonation.set( - new GT_MetaTileEntity_PurificationUnitOzonation( - PURIFICATION_UNIT_OZONATION.ID, - "multimachine.purificationunitozonation", - "Ozonation Purification Unit").getStackForm(1L)); - ItemList.Machine_Multi_PurificationUnitPlasmaHeater.set( - new GT_MetaTileEntity_PurificationUnitPlasmaHeater( - PURIFICATION_UNIT_PLASMA_HEATER.ID, - "multimachine.purificationunitplasmaheater", - "Extreme Temperature Fluctuation Purification Unit").getStackForm(1L)); - ItemList.Machine_Multi_PurificationUnitUVTreatment.set( - new GT_MetaTileEntity_PurificationUnitUVTreatment( - PURIFICATION_UNIT_UV_TREATMENT.ID, - "multimachine.purificationunituvtreatment", - "High Energy Laser Purification Unit").getStackForm(1L)); - ItemList.Machine_Multi_PurificationUnitDegasifier.set( - new GT_MetaTileEntity_PurificationUnitDegasifier( - PURIFICATION_UNIT_DEGASIFIER.ID, - "multimachine.purificationunitdegasifier", - "Residual Decontaminant Degasser Purification Unit").getStackForm(1L)); - ItemList.Machine_Multi_PurificationUnitParticleExtractor.set( - new GT_MetaTileEntity_PurificationUnitParticleExtractor( - PURIFICATION_UNIT_PARTICLE_EXTRACTOR.ID, - "multimachine.purificationunitextractor", - "Absolute Baryonic Perfection Purification Unit").getStackForm(1L)); - ItemList.Hatch_DegasifierControl.set( - new GT_MetaTileEntity_Hatch_DegasifierControlHatch( - HATCH_DEGASIFIER_CONTROL.ID, - "hatch.degasifiercontrol", - "Degasser Control Hatch", - 8).getStackForm(1L)); - ItemList.Machine_Multi_LargeBoiler_Bronze.set( - new GT_MetaTileEntity_LargeBoiler_Bronze( - LARGE_BRONZE_BOILER_CONTROLLER.ID, - "multimachine.boiler.bronze", - "Large Bronze Boiler").getStackForm(1L)); - ItemList.Machine_Multi_LargeBoiler_Steel.set( - new GT_MetaTileEntity_LargeBoiler_Steel( - LARGE_STEEL_BOILER_CONTROLLER.ID, - "multimachine.boiler.steel", - "Large Steel Boiler").getStackForm(1L)); - ItemList.Machine_Multi_LargeBoiler_Titanium.set( - new GT_MetaTileEntity_LargeBoiler_Titanium( - LARGE_TITANIUM_BOILER_CONTROLLER.ID, - "multimachine.boiler.titanium", - "Large Titanium Boiler").getStackForm(1L)); - ItemList.Machine_Multi_LargeBoiler_TungstenSteel.set( - new GT_MetaTileEntity_LargeBoiler_TungstenSteel( - LARGE_TUNGSTENSTEEL_BOILER_CONTROLLER.ID, - "multimachine.boiler.tungstensteel", - "Large Tungstensteel Boiler").getStackForm(1L)); - ItemList.FusionComputer_LuV.set( - new GT_MetaTileEntity_FusionComputer1( - FUSION_CONTROLLER_MKI.ID, - "fusioncomputer.tier.06", - "Fusion Control Computer Mark I").getStackForm(1L)); - ItemList.FusionComputer_ZPMV.set( - new GT_MetaTileEntity_FusionComputer2( - FUSION_CONTROLLER_MKII.ID, - "fusioncomputer.tier.07", - "Fusion Control Computer Mark II").getStackForm(1L)); - ItemList.FusionComputer_UV.set( - new GT_MetaTileEntity_FusionComputer3( - FUSION_CONTROLLER_MKIII.ID, - "fusioncomputer.tier.08", - "Fusion Control Computer Mark III").getStackForm(1L)); - - ItemList.Processing_Array.set( - new GT_MetaTileEntity_ProcessingArray( - PROCESSING_ARRAY_CONTROLLER.ID, - "multimachine.processingarray", - "Processing Array").getStackForm(1L)); - ItemList.Distillation_Tower.set( - new GT_MetaTileEntity_DistillationTower( - DISTILLATION_TOWER_CONTROLLER.ID, - "multimachine.distillationtower", - "Distillation Tower").getStackForm(1L)); - ItemList.Ore_Processor.set( - new GT_MetaTileEntity_IntegratedOreFactory( - INTEGRATED_ORE_FACTORY_CONTROLLER.ID, - "multimachine.oreprocessor", - "Integrated Ore Factory").getStackForm(1L)); - - ItemList.LargeSteamTurbine.set( - new GT_MetaTileEntity_LargeTurbine_Steam( - LARGE_STEAM_TURBINE_CONTROLLER.ID, - "multimachine.largeturbine", - "Large Steam Turbine").getStackForm(1L)); - ItemList.LargeGasTurbine.set( - new GT_MetaTileEntity_LargeTurbine_Gas( - LARGE_GAS_TURBINE_CONTROLLER.ID, - "multimachine.largegasturbine", - "Large Gas Turbine").getStackForm(1L)); - ItemList.LargeHPSteamTurbine.set( - new GT_MetaTileEntity_LargeTurbine_HPSteam( - LARGE_HP_STEAM_TURBINE_CONTROLLER.ID, - "multimachine.largehpturbine", - "Large HP Steam Turbine").getStackForm(1L)); - ItemList.LargeAdvancedGasTurbine.set( - new GT_MetaTileEntity_LargeTurbine_GasAdvanced( - LARGE_ADVANCED_GAS_TURBINE_CONTROLLER.ID, - "multimachine.largeadvancedgasturbine", - "Large Advanced Gas Turbine").getStackForm(1L)); - ItemList.Machine_Multi_TranscendentPlasmaMixer.set( - new GT_MetaTileEntity_TranscendentPlasmaMixer( - TRANSCENDENT_PLASMA_MIXER_CONTROLLER.ID, - "multimachine.transcendentplasmamixer", - "Transcendent Plasma Mixer").getStackForm(1)); - - ItemList.LargePlasmaTurbine.set( - new GT_MetaTileEntity_LargeTurbine_Plasma( - LARGE_PLASMA_TURBINE_CONTROLLER.ID, - "multimachine.largeplasmaturbine", - "Large Plasma Generator").getStackForm(1L)); - ItemList.Machine_Multi_HeatExchanger.set( - new GT_MetaTileEntity_HeatExchanger( - LARGE_HEAT_EXCHANGER_CONTROLLER.ID, - "multimachine.heatexchanger", - "Large Heat Exchanger").getStackForm(1L)); - ItemList.Charcoal_Pile.set( - new GT_MetaTileEntity_Charcoal_Pit( - CHARCOAL_PILE_IGNITER_CONTROLLER.ID, - "multimachine.charcoalpile", - "Charcoal Pile Igniter").getStackForm(1)); - - // Converter recipes in case you had old one lying around - ItemList.OilDrill1.set( - new GT_MetaTileEntity_OilDrill1( - MULTIBLOCK_PUMP_MKI_CONTROLLER.ID, - "multimachine.oildrill1", - "Oil/Gas/Fluid Drilling Rig").getStackForm(1)); - ItemList.OilDrill2.set( - new GT_MetaTileEntity_OilDrill2( - MULTILOCK_PUMP_MKII_CONTROLLER.ID, - "multimachine.oildrill2", - "Oil/Gas/Fluid Drilling Rig II").getStackForm(1)); - ItemList.OilDrill3.set( - new GT_MetaTileEntity_OilDrill3( - MULTILOCK_PUMP_MKIII_CONTROLLER.ID, - "multimachine.oildrill3", - "Oil/Gas/Fluid Drilling Rig III").getStackForm(1)); - ItemList.OilDrill4.set( - new GT_MetaTileEntity_OilDrill4( - MULTILOCK_PUMP_MKIV_CONTROLLER.ID, - "multimachine.oildrill4", - "Oil/Gas/Fluid Drilling Rig IV").getStackForm(1)); - ItemList.OilDrillInfinite.set( - new GT_MetaTileEntity_OilDrillInfinite( - MULTIBLOCK_PUMP_INFINITE_CONTROLLER.ID, - "multimachine.oildrillinfinite", - "Infinite Oil/Gas/Fluid Drilling Rig").getStackForm(1)); - - ItemList.ConcreteBackfiller1.set( - new GT_MetaTileEntity_ConcreteBackfiller1( - CONCRETE_BACKFILLER_I_CONTROLLER.ID, - "multimachine.concretebackfiller1", - "Concrete Backfiller").getStackForm(1)); - ItemList.ConcreteBackfiller2.set( - new GT_MetaTileEntity_ConcreteBackfiller2( - CONCRETE_BACKFILLER_II_CONTROLLER.ID, - "multimachine.concretebackfiller3", - "Advanced Concrete Backfiller").getStackForm(1)); - ItemList.OreDrill1.set( - new GT_MetaTileEntity_OreDrillingPlant1( - ORE_DRILL_MKI_CONTROLLER.ID, - "multimachine.oredrill1", - "Ore Drilling Plant").getStackForm(1)); - ItemList.OreDrill2.set( - new GT_MetaTileEntity_OreDrillingPlant2( - ORE_DRILL_MKII_CONTROLLER.ID, - "multimachine.oredrill2", - "Ore Drilling Plant II").getStackForm(1)); - ItemList.OreDrill3.set( - new GT_MetaTileEntity_OreDrillingPlant3( - ORE_DRILL_MKIII_CONTROLLER.ID, - "multimachine.oredrill3", - "Ore Drilling Plant III").getStackForm(1)); - ItemList.OreDrill4.set( - new GT_MetaTileEntity_OreDrillingPlant4( - ORE_DRILL_MKIV_CONTROLLER.ID, - "multimachine.oredrill4", - "Ore Drilling Plant IV").getStackForm(1)); - - ItemList.PyrolyseOven.set( - new GT_MetaTileEntity_PyrolyseOven(PYROLYSE_OVEN_CONTROLLER.ID, "multimachine.pyro", "Pyrolyse Oven") - .getStackForm(1)); - ItemList.OilCracker.set( - new GT_MetaTileEntity_OilCracker(OIL_CRACKER_CONTROLLER.ID, "multimachine.cracker", "Oil Cracking Unit") - .getStackForm(1)); - - ItemList.Machine_Multi_Assemblyline.set( - new GT_MetaTileEntity_AssemblyLine( - ASSEMBLING_LINE_CONTROLLER.ID, - "multimachine.assemblyline", - "Assembling Line").getStackForm(1L)); - ItemList.Machine_Multi_DieselEngine.set( - new GT_MetaTileEntity_DieselEngine( - COMBUSTION_ENGINE_CONTROLLER.ID, - "multimachine.dieselengine", - "Combustion Engine").getStackForm(1L)); - ItemList.Machine_Multi_ExtremeDieselEngine.set( - new GT_MetaTileEntity_ExtremeDieselEngine( - EXTREME_COMBUSTION_ENGINE_CONTROLLER.ID, - "multimachine.extremedieselengine", - "Extreme Combustion Engine").getStackForm(1L)); - ItemList.Machine_Multi_Cleanroom.set( - new GT_MetaTileEntity_Cleanroom(CLEANROOM_CONTROLLER.ID, "multimachine.cleanroom", "Cleanroom Controller") - .getStackForm(1)); - - ItemList.Machine_Multi_LargeChemicalReactor.set( - new GT_MetaTileEntity_LargeChemicalReactor( - LCR_CONTROLLER.ID, - "multimachine.chemicalreactor", - "Large Chemical Reactor").getStackForm(1)); - ItemList.PCBFactory.set( - new GT_MetaTileEntity_PCBFactory(PCB_FACTORY_CONTROLLER.ID, "multimachine.pcbfactory", "PCB Factory") - .getStackForm(1)); - ItemList.NanoForge.set( - new GT_MetaTileEntity_NanoForge(NANO_FORGE_CONTROLLER.ID, "multimachine.nanoforge", "Nano Forge") - .getStackForm(1)); - ItemList.Machine_Multi_DroneCentre.set( - new GT_MetaTileEntity_DroneCentre(Drone_Centre.ID, "multimachine_DroneCentre", "Drone Centre") - .getStackForm(1)); - - ItemList.Machine_Multi_IndustrialElectromagneticSeparator.set( - new GT_MetaTileEntity_IndustrialElectromagneticSeparator( - INDUSTRIAL_ELECTROMAGNETIC_SEPARATOR_CONTROLLER.ID, - "multimachine.electromagneticseparator", - "Magnetic Flux Exhibitor").getStackForm(1)); - ItemList.Machine_Multi_Canner.set( - new GT_MetaTileEntity_MultiCanner(MULTI_CANNER_CONTROLLER.ID, "multimachine.canner", "TurboCan Pro") - .getStackForm(1)); - - ItemList.WormholeGenerator.set( - new GT_MetaTileEntity_WormholeGenerator( - WORMHOLE_GENERATOR_CONTROLLER.ID, - "multimachine.wormhole", - "Miniature Wormhole Generator").getStackForm(1)); - - ItemList.Machine_Multi_IndustrialLaserEngraver.set( - new GT_MetaTileEntity_IndustrialLaserEngraver( - INDUSTRIAL_LASER_ENGRAVER_CONTROLLER.ID, - "multimachine.engraver", - "Hyper-Intensity Laser Engraver").getStackForm(1)); - - ItemList.Machine_Multi_IndustrialExtractor.set( - new GT_MetaTileEntity_IndustrialExtractor( - INDUSTRIAL_EXTRACTOR_CONTROLLER.ID, - "multimachine.extractor", - "Dissection Apparatus").getStackForm(1)); - - ItemList.Machine_Multi_Lathe.set( - new GT_MetaTileEntity_MultiLathe( - MULTI_LATHE_CONTROLLER.ID, - "multimachine.lathe", - "Industrial Precision Lathe").getStackForm(1)); - - ItemList.Machine_Multi_IndustrialCompressor.set( - new GT_MetaTileEntity_IndustrialCompressor( - INDUSTRIAL_COMPRESSOR_CONTROLLER.ID, - "multimachine.basiccompressor", - "Large Electric Compressor").getStackForm(1)); - ItemList.Machine_Multi_HIPCompressor.set( - new GT_MetaTileEntity_HIPCompressor( - HIP_COMPRESSOR_CONTROLLER.ID, - "multimachine.hipcompressor", - "Hot Isostatic Pressurization Unit").getStackForm(1)); - ItemList.Machine_Multi_NeutroniumCompressor.set( - new GT_MetaTileEntity_NeutroniumCompressor( - NEUTRONIUM_COMPRESSOR_CONTROLLER.ID, - "multimachine.neutroniumcompressor", - "Neutronium Compressor").getStackForm(1)); - ItemList.Machine_Multi_BlackHoleCompressor.set( - new GT_MetaTileEntity_BlackHoleCompressor( - BLACKHOLE_COMPRESSOR_CONTROLLER.ID, - "multimachine.blackholecompressor", - "Semi-Stable Black Hole Containment Field").getStackForm(1)); - - ItemList.Machine_Multi_Autoclave.set( - new GT_MetaTileEntity_MultiAutoclave( - MULTI_AUTOCLAVE_CONTROLLER.ID, - "multimachine.autoclave", - "Industrial Autoclave").getStackForm(1)); - - ItemList.LargeFluidExtractor.set( - new GT_MetaTileEntity_LargeFluidExtractor( - LARGE_FLUID_EXTRACTOR.ID, - "multimachine.fluidextractor", - "Large Fluid Extractor").getStackForm(1)); - } - - private static void registerSteamMachines() { - ItemList.Machine_Bronze_Furnace.set( - new GT_MetaTileEntity_Furnace_Bronze(STEAM_FURNACE.ID, "bronzemachine.furnace", "Steam Furnace") - .getStackForm(1L)); - ItemList.Machine_Bronze_Macerator.set( - new GT_MetaTileEntity_Macerator_Bronze(STEAM_MACERATOR.ID, "bronzemachine.macerator", "Steam Macerator") - .getStackForm(1L)); - ItemList.Machine_Bronze_Extractor.set( - new GT_MetaTileEntity_Extractor_Bronze(STEAM_EXTRACTOR.ID, "bronzemachine.extractor", "Steam Extractor") - .getStackForm(1L)); - ItemList.Machine_Bronze_Hammer.set( - new GT_MetaTileEntity_ForgeHammer_Bronze( - STEAM_FORGE_HAMMER.ID, - "bronzemachine.hammer", - "Steam Forge Hammer").getStackForm(1L)); - ItemList.Machine_Bronze_Compressor.set( - new GT_MetaTileEntity_Compressor_Bronze(STEAM_COMPRESSOR.ID, "bronzemachine.compressor", "Steam Compressor") - .getStackForm(1L)); - ItemList.Machine_Bronze_AlloySmelter.set( - new GT_MetaTileEntity_AlloySmelter_Bronze( - STEAM_ALLOY_SMELTER.ID, - "bronzemachine.alloysmelter", - "Steam Alloy Smelter").getStackForm(1L)); - - } - - private static void registerUnpackager() { - ItemList.Machine_LV_Unboxinator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - UNPACKAGER_LV.ID, - "basicmachine.unboxinator.tier.01", - "Basic Unpackager", - 1, - MachineType.UNPACKAGER.tooltipDescription(), - RecipeMaps.unpackagerRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "UNBOXINATOR", - null).getStackForm(1L)); - - ItemList.Machine_MV_Unboxinator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - UNPACKAGER_MV.ID, - "basicmachine.unboxinator.tier.02", - "Advanced Unpackager", - 2, - MachineType.UNPACKAGER.tooltipDescription(), - RecipeMaps.unpackagerRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "UNBOXINATOR", - null).getStackForm(1L)); - - ItemList.Machine_HV_Unboxinator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - UNPACKAGER_HV.ID, - "basicmachine.unboxinator.tier.03", - "Advanced Unpackager II", - 3, - MachineType.UNPACKAGER.tooltipDescription(), - RecipeMaps.unpackagerRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "UNBOXINATOR", - null).getStackForm(1L)); - - ItemList.Machine_EV_Unboxinator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - UNPACKAGER_EV.ID, - "basicmachine.unboxinator.tier.04", - "Advanced Unpackager III", - 4, - MachineType.UNPACKAGER.tooltipDescription(), - RecipeMaps.unpackagerRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "UNBOXINATOR", - null).getStackForm(1L)); - - ItemList.Machine_IV_Unboxinator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - UNPACKAGER_IV.ID, - "basicmachine.unboxinator.tier.05", - "Unboxinator", - 5, - MachineType.UNPACKAGER.tooltipDescription(), - RecipeMaps.unpackagerRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "UNBOXINATOR", - null).getStackForm(1L)); - - ItemList.Machine_LuV_Unboxinator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - UNPACKAGER_LuV.ID, - "basicmachine.unboxinator.tier.06", - "Unboxinator", - 6, - MachineType.UNPACKAGER.tooltipDescription(), - RecipeMaps.unpackagerRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "UNBOXINATOR", - null).getStackForm(1L)); - - ItemList.Machine_ZPM_Unboxinator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - UNPACKAGER_ZPM.ID, - "basicmachine.unboxinator.tier.07", - "Unboxinator", - 7, - MachineType.UNPACKAGER.tooltipDescription(), - RecipeMaps.unpackagerRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "UNBOXINATOR", - null).getStackForm(1L)); - - ItemList.Machine_UV_Unboxinator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - UNPACKAGER_UV.ID, - "basicmachine.unboxinator.tier.08", - "Unboxinator", - 8, - MachineType.UNPACKAGER.tooltipDescription(), - RecipeMaps.unpackagerRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "UNBOXINATOR", - null).getStackForm(1L)); - } - - private static void registerAssemblingMachine() { - - ItemList.Machine_LV_Assembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLER_LV.ID, - "basicmachine.assembler.tier.01", - "Basic Assembling Machine", - 1, - MachineType.ASSEMBLER.tooltipDescription(), - RecipeMaps.assemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Assembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLER_MV.ID, - "basicmachine.assembler.tier.02", - "Advanced Assembling Machine", - 2, - MachineType.ASSEMBLER.tooltipDescription(), - RecipeMaps.assemblerRecipes, - 9, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Assembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLER_HV.ID, - "basicmachine.assembler.tier.03", - "Advanced Assembling Machine II", - 3, - MachineType.ASSEMBLER.tooltipDescription(), - RecipeMaps.assemblerRecipes, - 9, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Assembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLER_EV.ID, - "basicmachine.assembler.tier.04", - "Advanced Assembling Machine III", - 4, - MachineType.ASSEMBLER.tooltipDescription(), - RecipeMaps.assemblerRecipes, - 9, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Assembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLER_IV.ID, - "basicmachine.assembler.tier.05", - "Advanced Assembling Machine IV", - 5, - MachineType.ASSEMBLER.tooltipDescription(), - RecipeMaps.assemblerRecipes, - 9, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - - ItemList.AssemblingMachineLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLING_MACHINE_LuV.ID, - "basicmachine.assembler.tier.06", - "Elite Assembling Machine", - 6, - MachineType.ASSEMBLER.tooltipDescription(), - assemblerRecipes, - 9, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - - ItemList.AssemblingMachineZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLING_MACHINE_ZPM.ID, - "basicmachine.assembler.tier.07", - "Elite Assembling Machine II", - 7, - MachineType.ASSEMBLER.tooltipDescription(), - assemblerRecipes, - 9, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - - ItemList.AssemblingMachineUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLING_MACHINE_UV.ID, - "basicmachine.assembler.tier.08", - "Ultimate Assembly Constructor", - 8, - MachineType.ASSEMBLER.tooltipDescription(), - assemblerRecipes, - 9, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - - ItemList.AssemblingMachineUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLING_MACHINE_UHV.ID, - "basicmachine.assembler.tier.09", - "Epic Assembly Constructor", - 9, - MachineType.ASSEMBLER.tooltipDescription(), - assemblerRecipes, - 9, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - - ItemList.AssemblingMachineUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLING_MACHINE_UEV.ID, - "basicmachine.assembler.tier.10", - "Epic Assembly Constructor II", - 10, - MachineType.ASSEMBLER.tooltipDescription(), - assemblerRecipes, - 9, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - - ItemList.AssemblingMachineUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLING_MACHINE_UIV.ID, - "basicmachine.assembler.tier.11", - "Epic Assembly Constructor III", - 11, - MachineType.ASSEMBLER.tooltipDescription(), - assemblerRecipes, - 9, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - - ItemList.AssemblingMachineUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ASSEMBLING_MACHINE_UMV.ID, - "basicmachine.assembler.tier.12", - "Epic Assembly Constructor IV", - 12, - MachineType.ASSEMBLER.tooltipDescription(), - assemblerRecipes, - 9, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ASSEMBLER", - null).getStackForm(1L)); - } - - private static void registerMatterAmplifier() { - ItemList.Machine_LV_Amplifab.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_LV.ID, - "basicmachine.amplifab.tier.01", - "Basic Amplifabricator", - 1, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - RecipeMaps.amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - - ItemList.Machine_MV_Amplifab.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_MV.ID, - "basicmachine.amplifab.tier.02", - "Advanced Amplifabricator", - 2, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - RecipeMaps.amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - - ItemList.Machine_HV_Amplifab.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_HV.ID, - "basicmachine.amplifab.tier.03", - "Advanced Amplifabricator II", - 3, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - RecipeMaps.amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - - ItemList.Machine_EV_Amplifab.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_EV.ID, - "basicmachine.amplifab.tier.04", - "Advanced Amplifabricator III", - 4, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - RecipeMaps.amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - - ItemList.Machine_IV_Amplifab.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_IV.ID, - "basicmachine.amplifab.tier.05", - "Advanced Amplifabricator IV", - 5, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - RecipeMaps.amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - - ItemList.AmplifabricatorLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_LuV.ID, - "basicmachine.amplifab.tier.06", - "Elite Amplifabricator", - 6, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - - ItemList.AmplifabricatorZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_ZPM.ID, - "basicmachine.amplifab.tier.07", - "Elite Amplifabricator II", - 7, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - - ItemList.AmplifabricatorUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_UV.ID, - "basicmachine.amplifab.tier.08", - "Ultimate Amplicreator", - 8, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - - ItemList.AmplifabricatorUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_UHV.ID, - "basicmachine.amplifab.tier.09", - "Epic Amplicreator", - 9, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - - ItemList.AmplifabricatorUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_UEV.ID, - "basicmachine.amplifab.tier.10", - "Epic Amplicreator II", - 10, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - - ItemList.AmplifabricatorUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_UIV.ID, - "basicmachine.amplifab.tier.11", - "Epic Amplicreator III", - 11, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - - ItemList.AmplifabricatorUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MATTER_AMPLIFIER_UMV.ID, - "basicmachine.amplifab.tier.12", - "Epic Amplicreator IV", - 12, - MachineType.MATTER_AMPLIFIER.tooltipDescription(), - amplifierRecipes, - 1, - 1, - 1000, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AMPLIFAB", - null).getStackForm(1L)); - } - - private static void registerAlloySmelter() { - ItemList.Machine_LV_AlloySmelter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_LV.ID, - "basicmachine.alloysmelter.tier.01", - "Basic Alloy Smelter", - 1, - MachineType.ALLOY_SMELTER.tooltipDescription(), - RecipeMaps.alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - - ItemList.Machine_MV_AlloySmelter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_MV.ID, - "basicmachine.alloysmelter.tier.02", - "Advanced Alloy Smelter", - 2, - MachineType.ALLOY_SMELTER.tooltipDescription(), - RecipeMaps.alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - - ItemList.Machine_HV_AlloySmelter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_HV.ID, - "basicmachine.alloysmelter.tier.03", - "Advanced Alloy Smelter II", - 3, - MachineType.ALLOY_SMELTER.tooltipDescription(), - RecipeMaps.alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - - ItemList.Machine_EV_AlloySmelter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_EV.ID, - "basicmachine.alloysmelter.tier.04", - "Advanced Alloy Smelter III", - 4, - MachineType.ALLOY_SMELTER.tooltipDescription(), - RecipeMaps.alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - - ItemList.Machine_IV_AlloySmelter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_IV.ID, - "basicmachine.alloysmelter.tier.05", - "Advanced Alloy Smelter IV", - 5, - MachineType.ALLOY_SMELTER.tooltipDescription(), - RecipeMaps.alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - - ItemList.AlloySmelterLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_LuV.ID, - "basicmachine.alloysmelter.tier.06", - "Elite Alloy Smelter", - 6, - MachineType.ALLOY_SMELTER.tooltipDescription(), - alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - - ItemList.AlloySmelterZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_ZPM.ID, - "basicmachine.alloysmelter.tier.07", - "Elite Alloy Smelter II", - 7, - MachineType.ALLOY_SMELTER.tooltipDescription(), - alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - - ItemList.AlloySmelterUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_UV.ID, - "basicmachine.alloysmelter.tier.08", - "Ultimate Alloy Integrator", - 8, - MachineType.ALLOY_SMELTER.tooltipDescription(), - alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - - ItemList.AlloySmelterUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_UHV.ID, - "basicmachine.alloysmelter.tier.09", - "Epic Alloy Integrator", - 9, - MachineType.ALLOY_SMELTER.tooltipDescription(), - alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - - ItemList.AlloySmelterUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_UEV.ID, - "basicmachine.alloysmelter.tier.10", - "Epic Alloy Integrator II", - 10, - MachineType.ALLOY_SMELTER.tooltipDescription(), - alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - - ItemList.AlloySmelterUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_UIV.ID, - "basicmachine.alloysmelter.tier.11", - "Epic Alloy Integrator III", - 11, - MachineType.ALLOY_SMELTER.tooltipDescription(), - alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - - ItemList.AlloySmelterUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ALLOY_SMELTER_UMV.ID, - "basicmachine.alloysmelter.tier.12", - "Epic Alloy Integrator IV", - 12, - MachineType.ALLOY_SMELTER.tooltipDescription(), - alloySmelterRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ALLOY_SMELTER", - null).getStackForm(1L)); - } - - private static void registerHPSteamMachines() { - ItemList.Machine_HP_Extractor.set( - new GT_MetaTileEntity_Extractor_Steel( - HP_STEAM_EXTRACTOR.ID, - "hpmachine.extractor", - "High Pressure Extractor").getStackForm(1L)); - ItemList.Machine_HP_Furnace.set( - new GT_MetaTileEntity_Furnace_Steel(HP_STEAM_FURNACE.ID, "hpmachine.furnace", "High Pressure Furnace") - .getStackForm(1L)); - ItemList.Machine_HP_Macerator.set( - new GT_MetaTileEntity_Macerator_Steel( - HP_STEAM_MACERATOR.ID, - "hpmachine.macerator", - "High Pressure Macerator").getStackForm(1L)); - ItemList.Machine_HP_Hammer.set( - new GT_MetaTileEntity_ForgeHammer_Steel( - HP_STEAM_FORGE_HAMMER.ID, - "hpmachine.hammer", - "High Pressure Forge Hammer").getStackForm(1L)); - ItemList.Machine_HP_Compressor.set( - new GT_MetaTileEntity_Compressor_Steel( - HP_STEAM_COMPRESSOR.ID, - "hpmachine.compressor", - "High Pressure Compressor").getStackForm(1L)); - ItemList.Machine_HP_AlloySmelter.set( - new GT_MetaTileEntity_AlloySmelter_Steel( - HP_STEAM_ALLOY_SMELTER.ID, - "hpmachine.alloysmelter", - "High Pressure Alloy Smelter").getStackForm(1L)); - } - - private static void registerLocker() { - ItemList.Locker_ULV.set( - new GT_MetaTileEntity_Locker(LOCKER_ULV.ID, "locker.tier.00", "Ultra Low Voltage Locker", 0) - .getStackForm(1L)); - ItemList.Locker_LV.set( - new GT_MetaTileEntity_Locker(LOCKER_LV.ID, "locker.tier.01", "Low Voltage Locker", 1).getStackForm(1L)); - ItemList.Locker_MV.set( - new GT_MetaTileEntity_Locker(LOCKER_MV.ID, "locker.tier.02", "Medium Voltage Locker", 2).getStackForm(1L)); - ItemList.Locker_HV.set( - new GT_MetaTileEntity_Locker(LOCKER_HV.ID, "locker.tier.03", "High Voltage Locker", 3).getStackForm(1L)); - ItemList.Locker_EV.set( - new GT_MetaTileEntity_Locker(LOCKER_EV.ID, "locker.tier.04", "Extreme Voltage Locker", 4).getStackForm(1L)); - ItemList.Locker_IV.set( - new GT_MetaTileEntity_Locker(LOCKER_IV.ID, "locker.tier.05", "Insane Voltage Locker", 5).getStackForm(1L)); - ItemList.Locker_LuV.set( - new GT_MetaTileEntity_Locker(LOCKER_LuV.ID, "locker.tier.06", "Ludicrous Voltage Locker", 6) - .getStackForm(1L)); - ItemList.Locker_ZPM.set( - new GT_MetaTileEntity_Locker(LOCKER_ZPM.ID, "locker.tier.07", "ZPM Voltage Locker", 7).getStackForm(1L)); - ItemList.Locker_UV.set( - new GT_MetaTileEntity_Locker(LOCKER_UV.ID, "locker.tier.08", "Ultimate Voltage Locker", 8) - .getStackForm(1L)); - ItemList.Locker_MAX.set( - new GT_MetaTileEntity_Locker(LOCKER_UHV.ID, "locker.tier.09", "Highly Ultimate Voltage Locker", 9) - .getStackForm(1L)); - } - - private static void registerScanner() { - ItemList.Machine_LV_Scanner.set( - new GT_MetaTileEntity_Scanner(SCANNER_LV.ID, "basicmachine.scanner.tier.01", "Basic Scanner", 1) - .getStackForm(1L)); - ItemList.Machine_MV_Scanner.set( - new GT_MetaTileEntity_Scanner(SCANNER_MV.ID, "basicmachine.scanner.tier.02", "Advanced Scanner", 2) - .getStackForm(1L)); - ItemList.Machine_HV_Scanner.set( - new GT_MetaTileEntity_Scanner(SCANNER_HV.ID, "basicmachine.scanner.tier.03", "Advanced Scanner II", 3) - .getStackForm(1L)); - ItemList.Machine_EV_Scanner.set( - new GT_MetaTileEntity_Scanner(SCANNER_EV.ID, "basicmachine.scanner.tier.04", "Advanced Scanner III", 4) - .getStackForm(1L)); - ItemList.Machine_IV_Scanner.set( - new GT_MetaTileEntity_Scanner(SCANNER_IV.ID, "basicmachine.scanner.tier.05", "Advanced Scanner IV", 5) - .getStackForm(1L)); - ItemList.ScannerLuV.set( - new GT_MetaTileEntity_Scanner(SCANNER_LuV.ID, "basicmachine.scanner.tier.06", "Elite Scanner", 6) - .getStackForm(1L)); - ItemList.ScannerZPM.set( - new GT_MetaTileEntity_Scanner(SCANNER_ZPM.ID, "basicmachine.scanner.tier.07", "Elite Scanner II", 7) - .getStackForm(1L)); - ItemList.ScannerUV.set( - new GT_MetaTileEntity_Scanner( - SCANNER_UV.ID, - "basicmachine.scanner.tier.08", - "Ultimate Electron Microscope", - 8).getStackForm(1L)); - ItemList.ScannerUHV.set( - new GT_MetaTileEntity_Scanner(SCANNER_UHV.ID, "basicmachine.scanner.tier.09", "Epic Electron Microscope", 9) - .getStackForm(1L)); - ItemList.ScannerUEV.set( - new GT_MetaTileEntity_Scanner( - SCANNER_UEV.ID, - "basicmachine.scanner.tier.10", - "Epic Electron Microscope II", - 10).getStackForm(1L)); - ItemList.ScannerUIV.set( - new GT_MetaTileEntity_Scanner( - SCANNER_UIV.ID, - "basicmachine.scanner.tier.11", - "Epic Electron Microscope III", - 11).getStackForm(1L)); - ItemList.ScannerUMV.set( - new GT_MetaTileEntity_Scanner( - SCANNER_UMV.ID, - "basicmachine.scanner.tier.12", - "Epic Electron Microscope IV", - 12).getStackForm(1L)); - } - - private static void registerPackager() { - ItemList.Machine_LV_Boxinator.set( - new GT_MetaTileEntity_Boxinator(PACKAGER_LV.ID, "basicmachine.boxinator.tier.01", "Basic Packager", 1) - .getStackForm(1L)); - ItemList.Machine_MV_Boxinator.set( - new GT_MetaTileEntity_Boxinator(PACKAGER_MV.ID, "basicmachine.boxinator.tier.02", "Advanced Packager", 2) - .getStackForm(1L)); - ItemList.Machine_HV_Boxinator.set( - new GT_MetaTileEntity_Boxinator(PACKAGER_HV.ID, "basicmachine.boxinator.tier.03", "Advanced Packager II", 3) - .getStackForm(1L)); - ItemList.Machine_EV_Boxinator.set( - new GT_MetaTileEntity_Boxinator( - PACKAGER_EV.ID, - "basicmachine.boxinator.tier.04", - "Advanced Packager III", - 4).getStackForm(1L)); - ItemList.Machine_IV_Boxinator.set( - new GT_MetaTileEntity_Boxinator(PACKAGER_IV.ID, "basicmachine.boxinator.tier.05", "Boxinator", 5) - .getStackForm(1L)); - ItemList.Machine_LuV_Boxinator.set( - new GT_MetaTileEntity_Boxinator(PACKAGER_LuV.ID, "basicmachine.boxinator.tier.06", "Boxinator", 6) - .getStackForm(1L)); - ItemList.Machine_ZPM_Boxinator.set( - new GT_MetaTileEntity_Boxinator(PACKAGER_ZPM.ID, "basicmachine.boxinator.tier.07", "Boxinator", 7) - .getStackForm(1L)); - ItemList.Machine_UV_Boxinator.set( - new GT_MetaTileEntity_Boxinator(PACKAGER_UV.ID, "basicmachine.boxinator.tier.08", "Boxinator", 8) - .getStackForm(1L)); - } - - private static void registerRockBreaker() { - ItemList.Machine_LV_RockBreaker.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_LV.ID, - "basicmachine.rockbreaker.tier.01", - "Basic Rock Breaker", - 1).getStackForm(1L)); - ItemList.Machine_MV_RockBreaker.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_MV.ID, - "basicmachine.rockbreaker.tier.02", - "Advanced Rock Breaker", - 2).getStackForm(1L)); - ItemList.Machine_HV_RockBreaker.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_HV.ID, - "basicmachine.rockbreaker.tier.03", - "Advanced Rock Breaker II", - 3).getStackForm(1L)); - ItemList.Machine_EV_RockBreaker.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_EV.ID, - "basicmachine.rockbreaker.tier.04", - "Advanced Rock Breaker III", - 4).getStackForm(1L)); - ItemList.Machine_IV_RockBreaker.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_IV.ID, - "basicmachine.rockbreaker.tier.05", - "Cryogenic Magma Solidifier R-8200", - 5).getStackForm(1L)); - ItemList.RockBreakerLuV.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_LuV.ID, - "rockbreaker.tier.06", - "Cryogenic Magma Solidifier R-9200", - 6).getStackForm(1L)); - - ItemList.RockBreakerZPM.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_ZPM.ID, - "rockbreaker.tier.07", - "Cryogenic Magma Solidifier R-10200", - 7).getStackForm(1L)); - - ItemList.RockBreakerUV.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_UV.ID, - "rockbreaker.tier.08", - "Cryogenic Magma Solidifier R-11200", - 8).getStackForm(1L)); - - ItemList.RockBreakerUHV.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_UHV.ID, - "rockbreaker.tier.09", - "Cryogenic Magma Solidifier R-12200", - 9).getStackForm(1L)); - - ItemList.RockBreakerUEV.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_UEV.ID, - "rockbreaker.tier.10", - "Cryogenic Magma Solidifier R-13200", - 10).getStackForm(1L)); - - ItemList.RockBreakerUIV.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_UIV.ID, - "rockbreaker.tier.11", - "Cryogenic Magma Solidifier R-14200", - 11).getStackForm(1L)); - - ItemList.RockBreakerUMV.set( - new GT_MetaTileEntity_RockBreaker( - ROCK_BREAKER_UMV.ID, - "rockbreaker.tier.12", - "Cryogenic Magma Solidifier R-15200", - 12).getStackForm(1L)); - } - - private static void registerIndustrialApiary() { - if (Forestry.isModLoaded()) { - ItemList.Machine_IndustrialApiary.set( - new GT_MetaTileEntity_IndustrialApiary( - INDUSTRIAL_APIARY.ID, - "basicmachine.industrialapiary", - "Industrial Apiary", - 8).getStackForm(1L)); - } - } - - private static void registerMassFab() { - ItemList.Machine_LV_Massfab.set( - new GT_MetaTileEntity_Massfabricator( - MASS_FABRICATOR_LV.ID, - "basicmachine.massfab.tier.01", - "Basic Mass Fabricator", - 1).getStackForm(1L)); - ItemList.Machine_MV_Massfab.set( - new GT_MetaTileEntity_Massfabricator( - MASS_FABRICATOR_MV.ID, - "basicmachine.massfab.tier.02", - "Advanced Mass Fabricator", - 2).getStackForm(1L)); - ItemList.Machine_HV_Massfab.set( - new GT_MetaTileEntity_Massfabricator( - MASS_FABRICATOR_HV.ID, - "basicmachine.massfab.tier.03", - "Advanced Mass Fabricator II", - 3).getStackForm(1L)); - ItemList.Machine_EV_Massfab.set( - new GT_MetaTileEntity_Massfabricator( - MASS_FABRICATOR_EV.ID, - "basicmachine.massfab.tier.04", - "Advanced Mass Fabricator III", - 4).getStackForm(1L)); - ItemList.Machine_IV_Massfab.set( - new GT_MetaTileEntity_Massfabricator( - MASS_FABRICATOR_IV.ID, - "basicmachine.massfab.tier.05", - "Advanced Mass Fabricator IV", - 5).getStackForm(1L)); - } - - private static void registerReplicator() { - ItemList.Machine_LV_Replicator.set( - new GT_MetaTileEntity_Replicator(REPLICATOR_LV.ID, "basicmachine.replicator.tier.01", "Basic Replicator", 1) - .getStackForm(1L)); - ItemList.Machine_MV_Replicator.set( - new GT_MetaTileEntity_Replicator( - REPLICATOR_MV.ID, - "basicmachine.replicator.tier.02", - "Advanced Replicator", - 2).getStackForm(1L)); - ItemList.Machine_HV_Replicator.set( - new GT_MetaTileEntity_Replicator( - REPLICATOR_HV.ID, - "basicmachine.replicator.tier.03", - "Advanced Replicator II", - 3).getStackForm(1L)); - ItemList.Machine_EV_Replicator.set( - new GT_MetaTileEntity_Replicator( - REPLICATOR_EV.ID, - "basicmachine.replicator.tier.04", - "Advanced Replicator III", - 4).getStackForm(1L)); - ItemList.Machine_IV_Replicator.set( - new GT_MetaTileEntity_Replicator( - REPLICATOR_IV.ID, - "basicmachine.replicator.tier.05", - "Advanced Replicator IV", - 5).getStackForm(1L)); - - ItemList.ReplicatorLuV.set( - new GT_MetaTileEntity_Replicator( - MATTER_REPLICATOR_LuV.ID, - "basicmachine.replicator.tier.06", - "Elite Replicator", - 6).getStackForm(1L)); - ItemList.ReplicatorZPM.set( - new GT_MetaTileEntity_Replicator( - MATTER_REPLICATOR_ZPM.ID, - "basicmachine.replicator.tier.07", - "Elite Replicator II", - 7).getStackForm(1L)); - ItemList.ReplicatorUV.set( - new GT_MetaTileEntity_Replicator( - MATTER_REPLICATOR_UV.ID, - "basicmachine.replicator.tier.08", - "Ultimate Elemental Composer", - 8).getStackForm(1L)); - ItemList.ReplicatorUHV.set( - new GT_MetaTileEntity_Replicator( - MATTER_REPLICATOR_UHV.ID, - "basicmachine.replicator.tier.09", - "Epic Elemental Composer", - 9).getStackForm(1L)); - ItemList.ReplicatorUEV.set( - new GT_MetaTileEntity_Replicator( - MATTER_REPLICATOR_UEV.ID, - "basicmachine.replicator.tier.10", - "Epic Elemental Composer II", - 10).getStackForm(1L)); - ItemList.ReplicatorUIV.set( - new GT_MetaTileEntity_Replicator( - MATTER_REPLICATOR_UIV.ID, - "basicmachine.replicator.tier.11", - "Epic Elemental Composer III", - 11).getStackForm(1L)); - ItemList.ReplicatorUMV.set( - new GT_MetaTileEntity_Replicator( - MATTER_REPLICATOR_UMV.ID, - "basicmachine.replicator.tier.12", - "Epic Elemental Composer IV", - 12).getStackForm(1L)); - } - - private static void registerBrewery() { - ItemList.Machine_LV_Brewery.set( - new GT_MetaTileEntity_PotionBrewer(BREWERY_LV.ID, "basicmachine.brewery.tier.01", "Basic Brewery", 1) - .getStackForm(1L)); - ItemList.Machine_MV_Brewery.set( - new GT_MetaTileEntity_PotionBrewer(BREWERY_MV.ID, "basicmachine.brewery.tier.02", "Advanced Brewery", 2) - .getStackForm(1L)); - ItemList.Machine_HV_Brewery.set( - new GT_MetaTileEntity_PotionBrewer(BREWERY_HV.ID, "basicmachine.brewery.tier.03", "Advanced Brewery II", 3) - .getStackForm(1L)); - ItemList.Machine_EV_Brewery.set( - new GT_MetaTileEntity_PotionBrewer(BREWERY_EV.ID, "basicmachine.brewery.tier.04", "Advanced Brewery III", 4) - .getStackForm(1L)); - ItemList.Machine_IV_Brewery.set( - new GT_MetaTileEntity_PotionBrewer(BREWERY_IV.ID, "basicmachine.brewery.tier.05", "Advanced Brewery IV", 5) - .getStackForm(1L)); - - ItemList.BreweryLuV.set( - new GT_MetaTileEntity_PotionBrewer(BREWERY_LuV.ID, "basicmachine.brewery.tier.06", "Elite Brewery", 6) - .getStackForm(1L)); - ItemList.BreweryZPM.set( - new GT_MetaTileEntity_PotionBrewer(BREWERY_ZPM.ID, "basicmachine.brewery.tier.07", "Elite Brewery II", 7) - .getStackForm(1L)); - ItemList.BreweryUV.set( - new GT_MetaTileEntity_PotionBrewer(BREWERY_UV.ID, "basicmachine.brewery.tier.08", "Ultimate Brew Rusher", 8) - .getStackForm(1L)); - ItemList.BreweryUHV.set( - new GT_MetaTileEntity_PotionBrewer(BREWERY_UHV.ID, "basicmachine.brewery.tier.09", "Epic Brew Rusher", 9) - .getStackForm(1L)); - ItemList.BreweryUEV.set( - new GT_MetaTileEntity_PotionBrewer( - BREWERY_UEV.ID, - "basicmachine.brewery.tier.10", - "Epic Brew Rusher II", - 10).getStackForm(1L)); - ItemList.BreweryUIV.set( - new GT_MetaTileEntity_PotionBrewer( - BREWERY_UIV.ID, - "basicmachine.brewery.tier.11", - "Epic Brew Rusher III", - 11).getStackForm(1L)); - ItemList.BreweryUMV.set( - new GT_MetaTileEntity_PotionBrewer( - BREWERY_UMV.ID, - "basicmachine.brewery.tier.12", - "Epic Brew Rusher IV", - 12).getStackForm(1L)); - } - - private static void registerMiner() { - ItemList.Machine_LV_Miner.set( - new GT_MetaTileEntity_Miner(MINER_LV.ID, "basicmachine.miner.tier.01", "Basic Miner", 1).getStackForm(1L)); - ItemList.Machine_MV_Miner.set( - new GT_MetaTileEntity_Miner(MINER_MV.ID, "basicmachine.miner.tier.02", "Good Miner", 2).getStackForm(1L)); - ItemList.Machine_HV_Miner.set( - new GT_MetaTileEntity_Miner(MINER_HV.ID, "basicmachine.miner.tier.03", "Advanced Miner", 3) - .getStackForm(1L)); - } - - private static void registerPump() { - ItemList.Pump_LV - .set(new GT_MetaTileEntity_Pump(PUMP_LV.ID, "basicmachine.pump.tier.01", "Basic Pump", 1).getStackForm(1L)); - ItemList.Pump_MV.set( - new GT_MetaTileEntity_Pump(PUMP_MV.ID, "basicmachine.pump.tier.02", "Advanced Pump", 2).getStackForm(1L)); - ItemList.Pump_HV.set( - new GT_MetaTileEntity_Pump(PUMP_HV.ID, "basicmachine.pump.tier.03", "Advanced Pump II", 3) - .getStackForm(1L)); - ItemList.Pump_EV.set( - new GT_MetaTileEntity_Pump(PUMP_EV.ID, "basicmachine.pump.tier.04", "Advanced Pump III", 4) - .getStackForm(1L)); - ItemList.Pump_IV.set( - new GT_MetaTileEntity_Pump(PUMP_IV.ID, "basicmachine.pump.tier.05", "Advanced Pump IV", 5) - .getStackForm(1L)); - ItemList.PumpLuV.set( - new GT_MetaTileEntity_Pump(PUMP_LuV.ID, "basicmachine.pump.tier.06", "Lake Dislocator", 6) - .getStackForm(1L)); - ItemList.PumpZPM.set( - new GT_MetaTileEntity_Pump(PUMP_ZPM.ID, "basicmachine.pump.tier.07", "Ocean Transposer", 7) - .getStackForm(1L)); - } - - private static void registerTeleporter() { - ItemList.Teleporter.set( - new GT_MetaTileEntity_Teleporter(TELEPORTER.ID, "basicmachine.teleporter", "Teleporter", 9) - .getStackForm(1L)); - } - - private static void registerMonsterRepellator() { - ItemList.MobRep_LV.set( - new GT_MetaTileEntity_MonsterRepellent( - MONSTER_REPELLATOR_LV.ID, - "basicmachine.mobrep.tier.01", - "Basic Monster Repellator", - 1).getStackForm(1L)); - ItemList.MobRep_MV.set( - new GT_MetaTileEntity_MonsterRepellent( - MONSTER_REPELLATOR_MV.ID, - "basicmachine.mobrep.tier.02", - "Advanced Monster Repellator", - 2).getStackForm(1L)); - ItemList.MobRep_HV.set( - new GT_MetaTileEntity_MonsterRepellent( - MONSTER_REPELLATOR_HV.ID, - "basicmachine.mobrep.tier.03", - "Advanced Monster Repellator II", - 3).getStackForm(1L)); - ItemList.MobRep_EV.set( - new GT_MetaTileEntity_MonsterRepellent( - MONSTER_REPELLATOR_EV.ID, - "basicmachine.mobrep.tier.04", - "Advanced Monster Repellator III", - 4).getStackForm(1L)); - ItemList.MobRep_IV.set( - new GT_MetaTileEntity_MonsterRepellent( - MONSTER_REPELLATOR_IV.ID, - "basicmachine.mobrep.tier.05", - "Advanced Monster Repellator IV", - 5).getStackForm(1L)); - ItemList.MobRep_LuV.set( - new GT_MetaTileEntity_MonsterRepellent( - MONSTER_REPELLATOR_LuV.ID, - "basicmachine.mobrep.tier.06", - "Advanced Monster Repellator V", - 6).getStackForm(1L)); - ItemList.MobRep_ZPM.set( - new GT_MetaTileEntity_MonsterRepellent( - MONSTER_REPELLATOR_ZPM.ID, - "basicmachine.mobrep.tier.07", - "Advanced Monster Repellator VI", - 7).getStackForm(1L)); - ItemList.MobRep_UV.set( - new GT_MetaTileEntity_MonsterRepellent( - MONSTER_REPELLATOR_UV.ID, - "basicmachine.mobrep.tier.08", - "Advanced Monster Repellator VII", - 8).getStackForm(1L)); - } - - private void registerWorldAccelerator() { - ItemList.AcceleratorLV.set( - new GT_MetaTileEntity_WorldAccelerator( - WORLD_ACCELERATOR_LV.ID, - "basicmachine.accelerator.tier.01", - "Basic World Accelerator", - 1).getStackForm(1L)); - ItemList.AcceleratorMV.set( - new GT_MetaTileEntity_WorldAccelerator( - WORLD_ACCELERATOR_MV.ID, - "basicmachine.accelerator.tier.02", - "Advanced World Accelerator", - 2).getStackForm(1L)); - ItemList.AcceleratorHV.set( - new GT_MetaTileEntity_WorldAccelerator( - WORLD_ACCELERATOR_HV.ID, - "basicmachine.accelerator.tier.03", - "Advanced World Accelerator II", - 3).getStackForm(1L)); - ItemList.AcceleratorEV.set( - new GT_MetaTileEntity_WorldAccelerator( - WORLD_ACCELERATOR_EV.ID, - "basicmachine.accelerator.tier.04", - "Advanced World Accelerator III", - 4).getStackForm(1L)); - ItemList.AcceleratorIV.set( - new GT_MetaTileEntity_WorldAccelerator( - WORLD_ACCELERATOR_IV.ID, - "basicmachine.accelerator.tier.05", - "Advanced World Accelerator IV", - 5).getStackForm(1L)); - ItemList.AcceleratorLuV.set( - new GT_MetaTileEntity_WorldAccelerator( - WORLD_ACCELERATOR_LuV.ID, - "basicmachine.accelerator.tier.06", - "Elite World Accelerator", - 6).getStackForm(1L)); - ItemList.AcceleratorZPM.set( - new GT_MetaTileEntity_WorldAccelerator( - WORLD_ACCELERATOR_ZPM.ID, - "basicmachine.accelerator.tier.07", - "Elite World Accelerator II", - 7).getStackForm(1L)); - ItemList.AcceleratorUV.set( - new GT_MetaTileEntity_WorldAccelerator( - WORLD_ACCELERATOR_UV.ID, - "basicmachine.accelerator.tier.08", - "Ultimate Time Anomaly", - 8).getStackForm(1L)); - - } - - private static void registerAdvancedSeismicProspector() { - ItemList.Seismic_Prospector_Adv_LV.set( - new GT_MetaTileEntity_AdvSeismicProspector( - ADVANCED_SEISMIC_PROSPECTOR_LV.ID, - "basicmachine.seismicprospector.07", - "Advanced Seismic Prospector LV", - 1, - 5 * 16 / 2, - 2).getStackForm(1)); - ItemList.Seismic_Prospector_Adv_MV.set( - new GT_MetaTileEntity_AdvSeismicProspector( - ADVANCED_SEISMIC_PROSPECTOR_MV.ID, - "basicmachine.seismicprospector.06", - "Advanced Seismic Prospector MV", - 2, - 7 * 16 / 2, - 2).getStackForm(1)); - ItemList.Seismic_Prospector_Adv_HV.set( - new GT_MetaTileEntity_AdvSeismicProspector( - ADVANCED_SEISMIC_PROSPECTOR_HV.ID, - "basicmachine.seismicprospector.05", - "Advanced Seismic Prospector HV", - 3, - 9 * 16 / 2, - 2).getStackForm(1)); - ItemList.Seismic_Prospector_Adv_EV.set( - new GT_MetaTileEntity_AdvSeismicProspector( - ADVANCED_SEISMIC_PROSPECTOR_EV.ID, - "basicmachine.seismicprospector.04", - "Advanced Seismic Prospector EV", - 4, - 11 * 16 / 2, - 2).getStackForm(1)); - } - - private static void registerMicrowaveEnergyTransmitter() { - ItemList.MicroTransmitter_HV.set( - new GT_MetaTileEntity_MicrowaveEnergyTransmitter( - MICROWAVE_ENERGY_TRANSMITTER_HV.ID, - "basicmachine.microtransmitter.03", - "HV Microwave Energy Transmitter", - 3).getStackForm(1L)); - ItemList.MicroTransmitter_EV.set( - new GT_MetaTileEntity_MicrowaveEnergyTransmitter( - MICROWAVE_ENERGY_TRANSMITTER_EV.ID, - "basicmachine.microtransmitter.04", - "EV Microwave Energy Transmitter", - 4).getStackForm(1L)); - ItemList.MicroTransmitter_IV.set( - new GT_MetaTileEntity_MicrowaveEnergyTransmitter( - MICROWAVE_ENERGY_TRANSMITTER_IV.ID, - "basicmachine.microtransmitter.05", - "IV Microwave Energy Transmitter", - 5).getStackForm(1L)); - ItemList.MicroTransmitter_LUV.set( - new GT_MetaTileEntity_MicrowaveEnergyTransmitter( - MICROWAVE_ENERGY_TRANSMITTER_LuV.ID, - "basicmachine.microtransmitter.06", - "LuV Microwave Energy Transmitter", - 6).getStackForm(1L)); - ItemList.MicroTransmitter_ZPM.set( - new GT_MetaTileEntity_MicrowaveEnergyTransmitter( - MICROWAVE_ENERGY_TRANSMITTER_ZPM.ID, - "basicmachine.microtransmitter.07", - "ZPM Microwave Energy Transmitter", - 7).getStackForm(1L)); - ItemList.MicroTransmitter_UV.set( - new GT_MetaTileEntity_MicrowaveEnergyTransmitter( - MICROWAVE_ENERGY_TRANSMITTER_UV.ID, - "basicmachine.microtransmitter.08", - "UV Microwave Energy Transmitter", - 8).getStackForm(1L)); - } - - private static void registerBetterJukebox() { - ItemList.BetterJukebox_LV.set( - new GT_MetaTileEntity_BetterJukebox( - BETTER_JUKEBOX_LV.ID, - "basicmachine.betterjukebox.tier.01", - "Basic Electric Jukebox", - 1).getStackForm(1L)); - ItemList.BetterJukebox_MV.set( - new GT_MetaTileEntity_BetterJukebox( - BETTER_JUKEBOX_MV.ID, - "basicmachine.betterjukebox.tier.02", - "Advanced Electric Jukebox", - 2).getStackForm(1L)); - ItemList.BetterJukebox_HV.set( - new GT_MetaTileEntity_BetterJukebox( - BETTER_JUKEBOX_HV.ID, - "basicmachine.betterjukebox.tier.03", - "Advanced Electric Jukebox II", - 3).getStackForm(1L)); - ItemList.BetterJukebox_EV.set( - new GT_MetaTileEntity_BetterJukebox( - BETTER_JUKEBOX_EV.ID, - "basicmachine.betterjukebox.tier.04", - "Extreme Music Mixer", - 4).getStackForm(1L)); - ItemList.BetterJukebox_IV.set( - new GT_MetaTileEntity_BetterJukebox( - BETTER_JUKEBOX_IV.ID, - "basicmachine.betterjukebox.tier.05", - "Duke Mix'em 3D", - 5).getStackForm(1L)); - } - - private static void registerChestBuffer() { - ItemList.Automation_ChestBuffer_ULV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_ULV.ID, - "automation.chestbuffer.tier.00", - "Ultra Low Voltage Chest Buffer", - 0).getStackForm(1L)); - ItemList.Automation_ChestBuffer_LV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_LV.ID, - "automation.chestbuffer.tier.01", - "Low Voltage Chest Buffer", - 1).getStackForm(1L)); - ItemList.Automation_ChestBuffer_MV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_MV.ID, - "automation.chestbuffer.tier.02", - "Medium Voltage Chest Buffer", - 2).getStackForm(1L)); - ItemList.Automation_ChestBuffer_HV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_HV.ID, - "automation.chestbuffer.tier.03", - "High Voltage Chest Buffer", - 3).getStackForm(1L)); - ItemList.Automation_ChestBuffer_EV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_EV.ID, - "automation.chestbuffer.tier.04", - "Extreme Voltage Chest Buffer", - 4).getStackForm(1L)); - ItemList.Automation_ChestBuffer_IV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_IV.ID, - "automation.chestbuffer.tier.05", - "Insane Voltage Chest Buffer", - 5).getStackForm(1L)); - ItemList.Automation_ChestBuffer_LuV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_LuV.ID, - "automation.chestbuffer.tier.06", - "Ludicrous Voltage Chest Buffer", - 6).getStackForm(1L)); - ItemList.Automation_ChestBuffer_ZPM.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_ZPM.ID, - "automation.chestbuffer.tier.07", - "ZPM Voltage Chest Buffer", - 7).getStackForm(1L)); - ItemList.Automation_ChestBuffer_UV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_UV.ID, - "automation.chestbuffer.tier.08", - "Ultimate Voltage Chest Buffer", - 8).getStackForm(1L)); - ItemList.Automation_ChestBuffer_UHV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_UHV.ID, - "automation.chestbuffer.tier.09", - "Highly Ultimate Voltage Chest Buffer", - 9).getStackForm(1L)); - - ItemList.Automation_ChestBuffer_UEV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_UEV.ID, - "automation.chestbuffer.tier.10", - "Ultra High Voltage Chest Buffer", - 10).getStackForm(1L)); - - ItemList.Automation_ChestBuffer_UIV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_UIV.ID, - "automation.chestbuffer.tier.11", - "UIV Voltage Chest Buffer", - 11).getStackForm(1L)); - - ItemList.Automation_ChestBuffer_UMV.set( - new GT_MetaTileEntity_ChestBuffer( - CHEST_BUFFER_UMV.ID, - "automation.chestbuffer.tier.12", - "UMV Voltage Chest Buffer", - 12).getStackForm(1L)); - } - - private static void registerItemFilter() { - ItemList.Automation_Filter_ULV.set( - new GT_MetaTileEntity_Filter( - ITEM_FILTER_ULV.ID, - "automation.filter.tier.00", - "Ultra Low Voltage Item Filter", - 0).getStackForm(1L)); - ItemList.Automation_Filter_LV.set( - new GT_MetaTileEntity_Filter(ITEM_FILTER_LV.ID, "automation.filter.tier.01", "Low Voltage Item Filter", 1) - .getStackForm(1L)); - ItemList.Automation_Filter_MV.set( - new GT_MetaTileEntity_Filter( - ITEM_FILTER_MV.ID, - "automation.filter.tier.02", - "Medium Voltage Item Filter", - 2).getStackForm(1L)); - ItemList.Automation_Filter_HV.set( - new GT_MetaTileEntity_Filter(ITEM_FILTER_HV.ID, "automation.filter.tier.03", "High Voltage Item Filter", 3) - .getStackForm(1L)); - ItemList.Automation_Filter_EV.set( - new GT_MetaTileEntity_Filter( - ITEM_FILTER_EV.ID, - "automation.filter.tier.04", - "Extreme Voltage Item Filter", - 4).getStackForm(1L)); - ItemList.Automation_Filter_IV.set( - new GT_MetaTileEntity_Filter( - ITEM_FILTER_IV.ID, - "automation.filter.tier.05", - "Insane Voltage Item Filter", - 5).getStackForm(1L)); - ItemList.Automation_Filter_LuV.set( - new GT_MetaTileEntity_Filter( - ITEM_FILTER_LuV.ID, - "automation.filter.tier.06", - "Ludicrous Voltage Item Filter", - 6).getStackForm(1L)); - ItemList.Automation_Filter_ZPM.set( - new GT_MetaTileEntity_Filter(ITEM_FILTER_ZPM.ID, "automation.filter.tier.07", "ZPM Voltage Item Filter", 7) - .getStackForm(1L)); - ItemList.Automation_Filter_UV.set( - new GT_MetaTileEntity_Filter( - ITEM_FILTER_UV.ID, - "automation.filter.tier.08", - "Ultimate Voltage Item Filter", - 8).getStackForm(1L)); - ItemList.Automation_Filter_MAX.set( - new GT_MetaTileEntity_Filter( - ITEM_FILTER_UHV.ID, - "automation.filter.tier.09", - "Highly Ultimate Voltage Item Filter", - 9).getStackForm(1L)); - } - - private static void registerTypeFilter() { - ItemList.Automation_TypeFilter_ULV.set( - new GT_MetaTileEntity_TypeFilter( - TYPE_FILTER_ULV.ID, - "automation.typefilter.tier.00", - "Ultra Low Voltage Type Filter", - 0).getStackForm(1L)); - ItemList.Automation_TypeFilter_LV.set( - new GT_MetaTileEntity_TypeFilter( - TYPE_FILTER_LV.ID, - "automation.typefilter.tier.01", - "Low Voltage Type Filter", - 1).getStackForm(1L)); - ItemList.Automation_TypeFilter_MV.set( - new GT_MetaTileEntity_TypeFilter( - TYPE_FILTER_MV.ID, - "automation.typefilter.tier.02", - "Medium Voltage Type Filter", - 2).getStackForm(1L)); - ItemList.Automation_TypeFilter_HV.set( - new GT_MetaTileEntity_TypeFilter( - TYPE_FILTER_HV.ID, - "automation.typefilter.tier.03", - "High Voltage Type Filter", - 3).getStackForm(1L)); - ItemList.Automation_TypeFilter_EV.set( - new GT_MetaTileEntity_TypeFilter( - TYPE_FILTER_EV.ID, - "automation.typefilter.tier.04", - "Extreme Voltage Type Filter", - 4).getStackForm(1L)); - ItemList.Automation_TypeFilter_IV.set( - new GT_MetaTileEntity_TypeFilter( - TYPE_FILTER_IV.ID, - "automation.typefilter.tier.05", - "Insane Voltage Type Filter", - 5).getStackForm(1L)); - ItemList.Automation_TypeFilter_LuV.set( - new GT_MetaTileEntity_TypeFilter( - TYPE_FILTER_LuV.ID, - "automation.typefilter.tier.06", - "Ludicrous Voltage Type Filter", - 6).getStackForm(1L)); - ItemList.Automation_TypeFilter_ZPM.set( - new GT_MetaTileEntity_TypeFilter( - TYPE_FILTER_ZPM.ID, - "automation.typefilter.tier.07", - "ZPM Voltage Type Filter", - 7).getStackForm(1L)); - ItemList.Automation_TypeFilter_UV.set( - new GT_MetaTileEntity_TypeFilter( - TYPE_FILTER_UV.ID, - "automation.typefilter.tier.08", - "Ultimate Voltage Type Filter", - 8).getStackForm(1L)); - ItemList.Automation_TypeFilter_MAX.set( - new GT_MetaTileEntity_TypeFilter( - TYPE_FILTER_UHV.ID, - "automation.typefilter.tier.09", - "Highly Ultimate Voltage Type Filter", - 9).getStackForm(1L)); - } - - private static void registerRegulator() { - ItemList.Automation_Regulator_ULV.set( - new GT_MetaTileEntity_Regulator( - VOLTAGE_REGULATOR_ULV.ID, - "automation.regulator.tier.00", - "Ultra Low Voltage Regulator", - 0).getStackForm(1L)); - ItemList.Automation_Regulator_LV.set( - new GT_MetaTileEntity_Regulator( - VOLTAGE_REGULATOR_LV.ID, - "automation.regulator.tier.01", - "Low Voltage Regulator", - 1).getStackForm(1L)); - ItemList.Automation_Regulator_MV.set( - new GT_MetaTileEntity_Regulator( - VOLTAGE_REGULATOR_MV.ID, - "automation.regulator.tier.02", - "Medium Voltage Regulator", - 2).getStackForm(1L)); - ItemList.Automation_Regulator_HV.set( - new GT_MetaTileEntity_Regulator( - VOLTAGE_REGULATOR_HV.ID, - "automation.regulator.tier.03", - "High Voltage Regulator", - 3).getStackForm(1L)); - ItemList.Automation_Regulator_EV.set( - new GT_MetaTileEntity_Regulator( - VOLTAGE_REGULATOR_EV.ID, - "automation.regulator.tier.04", - "Extreme Voltage Regulator", - 4).getStackForm(1L)); - ItemList.Automation_Regulator_IV.set( - new GT_MetaTileEntity_Regulator( - VOLTAGE_REGULATOR_IV.ID, - "automation.regulator.tier.05", - "Insane Voltage Regulator", - 5).getStackForm(1L)); - ItemList.Automation_Regulator_LuV.set( - new GT_MetaTileEntity_Regulator( - VOLTAGE_REGULATOR_LuV.ID, - "automation.regulator.tier.06", - "Ludicrous Voltage Regulator", - 6).getStackForm(1L)); - ItemList.Automation_Regulator_ZPM.set( - new GT_MetaTileEntity_Regulator( - VOLTAGE_REGULATOR_ZPM.ID, - "automation.regulator.tier.07", - "ZPM Voltage Regulator", - 7).getStackForm(1L)); - ItemList.Automation_Regulator_UV.set( - new GT_MetaTileEntity_Regulator( - VOLTAGE_REGULATOR_UV.ID, - "automation.regulator.tier.08", - "Ultimate Voltage Regulator", - 8).getStackForm(1L)); - ItemList.Automation_Regulator_MAX.set( - new GT_MetaTileEntity_Regulator( - VOLTAGE_REGULATOR_UHV.ID, - "automation.regulator.tier.09", - "Highly Ultimate Voltage Regulator", - 9).getStackForm(1L)); - } - - private static void registerSuperBuffer() { - ItemList.Automation_SuperBuffer_ULV.set( - new GT_MetaTileEntity_SuperBuffer( - SUPER_BUFFER_ULV.ID, - "automation.superbuffer.tier.00", - "Ultra Low Voltage Super Buffer", - 0).getStackForm(1L)); - ItemList.Automation_SuperBuffer_LV.set( - new GT_MetaTileEntity_SuperBuffer( - SUPER_BUFFER_LV.ID, - "automation.superbuffer.tier.01", - "Low Voltage Super Buffer", - 1).getStackForm(1L)); - ItemList.Automation_SuperBuffer_MV.set( - new GT_MetaTileEntity_SuperBuffer( - SUPER_BUFFER_MV.ID, - "automation.superbuffer.tier.02", - "Medium Voltage Super Buffer", - 2).getStackForm(1L)); - ItemList.Automation_SuperBuffer_HV.set( - new GT_MetaTileEntity_SuperBuffer( - SUPER_BUFFER_HV.ID, - "automation.superbuffer.tier.03", - "High Voltage Super Buffer", - 3).getStackForm(1L)); - ItemList.Automation_SuperBuffer_EV.set( - new GT_MetaTileEntity_SuperBuffer( - SUPER_BUFFER_EV.ID, - "automation.superbuffer.tier.04", - "Extreme Voltage Super Buffer", - 4).getStackForm(1L)); - ItemList.Automation_SuperBuffer_IV.set( - new GT_MetaTileEntity_SuperBuffer( - SUPER_BUFFER_IV.ID, - "automation.superbuffer.tier.05", - "Insane Voltage Super Buffer", - 5).getStackForm(1L)); - ItemList.Automation_SuperBuffer_LuV.set( - new GT_MetaTileEntity_SuperBuffer( - SUPER_BUFFER_LuV.ID, - "automation.superbuffer.tier.06", - "Ludicrous Voltage Super Buffer", - 6).getStackForm(1L)); - ItemList.Automation_SuperBuffer_ZPM.set( - new GT_MetaTileEntity_SuperBuffer( - SUPER_BUFFER_ZPM.ID, - "automation.superbuffer.tier.07", - "ZPM Voltage Super Buffer", - 7).getStackForm(1L)); - ItemList.Automation_SuperBuffer_UV.set( - new GT_MetaTileEntity_SuperBuffer( - SUPER_BUFFER_UV.ID, - "automation.superbuffer.tier.08", - "Ultimate Voltage Super Buffer", - 8).getStackForm(1L)); - ItemList.Automation_SuperBuffer_MAX.set( - new GT_MetaTileEntity_SuperBuffer( - SUPER_BUFFER_UHV.ID, - "automation.superbuffer.tier.09", - "Highly Ultimate Voltage Super Buffer", - 9).getStackForm(1L)); - } - - private static void registerItemDistributor() { - ItemList.Automation_ItemDistributor_ULV.set( - new GT_MetaTileEntity_ItemDistributor( - ITEM_DISTRIBUTOR_ULV.ID, - "automation.itemdistributor.tier.00", - "Ultra Low Voltage Item Distributor", - 0).getStackForm(1L)); - ItemList.Automation_ItemDistributor_LV.set( - new GT_MetaTileEntity_ItemDistributor( - ITEM_DISTRIBUTOR_LV.ID, - "automation.itemdistributor.tier.01", - "Low Voltage Item Distributor", - 1).getStackForm(1L)); - ItemList.Automation_ItemDistributor_MV.set( - new GT_MetaTileEntity_ItemDistributor( - ITEM_DISTRIBUTOR_MV.ID, - "automation.itemdistributor.tier.02", - "Medium Voltage Item Distributor", - 2).getStackForm(1L)); - ItemList.Automation_ItemDistributor_HV.set( - new GT_MetaTileEntity_ItemDistributor( - ITEM_DISTRIBUTOR_HV.ID, - "automation.itemdistributor.tier.03", - "High Voltage Item Distributor", - 3).getStackForm(1L)); - ItemList.Automation_ItemDistributor_EV.set( - new GT_MetaTileEntity_ItemDistributor( - ITEM_DISTRIBUTOR_EV.ID, - "automation.itemdistributor.tier.04", - "Extreme Voltage Item Distributor", - 4).getStackForm(1L)); - ItemList.Automation_ItemDistributor_IV.set( - new GT_MetaTileEntity_ItemDistributor( - ITEM_DISTRIBUTOR_IV.ID, - "automation.itemdistributor.tier.05", - "Insane Voltage Item Distributor", - 5).getStackForm(1L)); - ItemList.Automation_ItemDistributor_LuV.set( - new GT_MetaTileEntity_ItemDistributor( - ITEM_DISTRIBUTOR_LuV.ID, - "automation.itemdistributor.tier.06", - "Ludicrous Voltage Item Distributor", - 6).getStackForm(1L)); - ItemList.Automation_ItemDistributor_ZPM.set( - new GT_MetaTileEntity_ItemDistributor( - ITEM_DISTRIBUTOR_ZPM.ID, - "automation.itemdistributor.tier.07", - "ZPM Voltage Item Distributor", - 7).getStackForm(1L)); - ItemList.Automation_ItemDistributor_UV.set( - new GT_MetaTileEntity_ItemDistributor( - ITEM_DISTRIBUTOR_UV.ID, - "automation.itemdistributor.tier.08", - "Ultimate Voltage Item Distributor", - 8).getStackForm(1L)); - ItemList.Automation_ItemDistributor_MAX.set( - new GT_MetaTileEntity_ItemDistributor( - ITEM_DISTRIBUTOR_UHV.ID, - "automation.itemdistributor.tier.09", - "MAX Voltage Item Distributor", - 9).getStackForm(1L)); - } - - private static void registerRecipeFilter() { - ItemList.Automation_RecipeFilter_ULV.set( - new GT_MetaTileEntity_RecipeFilter( - RECIPE_FILTER_ULV.ID, - "automation.recipefilter.tier.00", - "Ultra Low Voltage Recipe Filter", - 0).getStackForm(1L)); - ItemList.Automation_RecipeFilter_LV.set( - new GT_MetaTileEntity_RecipeFilter( - RECIPE_FILTER_LV.ID, - "automation.recipefilter.tier.01", - "Low Voltage Recipe Filter", - 1).getStackForm(1L)); - ItemList.Automation_RecipeFilter_MV.set( - new GT_MetaTileEntity_RecipeFilter( - RECIPE_FILTER_MV.ID, - "automation.recipefilter.tier.02", - "Medium Voltage Recipe Filter", - 2).getStackForm(1L)); - ItemList.Automation_RecipeFilter_HV.set( - new GT_MetaTileEntity_RecipeFilter( - RECIPE_FILTER_HV.ID, - "automation.recipefilter.tier.03", - "High Voltage Recipe Filter", - 3).getStackForm(1L)); - ItemList.Automation_RecipeFilter_EV.set( - new GT_MetaTileEntity_RecipeFilter( - RECIPE_FILTER_EV.ID, - "automation.recipefilter.tier.04", - "Extreme Voltage Recipe Filter", - 4).getStackForm(1L)); - ItemList.Automation_RecipeFilter_IV.set( - new GT_MetaTileEntity_RecipeFilter( - RECIPE_FILTER_IV.ID, - "automation.recipefilter.tier.05", - "Insane Voltage Recipe Filter", - 5).getStackForm(1L)); - ItemList.Automation_RecipeFilter_LuV.set( - new GT_MetaTileEntity_RecipeFilter( - RECIPE_FILTER_LuV.ID, - "automation.recipefilter.tier.06", - "Ludicrous Voltage Recipe Filter", - 6).getStackForm(1L)); - ItemList.Automation_RecipeFilter_ZPM.set( - new GT_MetaTileEntity_RecipeFilter( - RECIPE_FILTER_ZPM.ID, - "automation.recipefilter.tier.07", - "ZPM Voltage Recipe Filter", - 7).getStackForm(1L)); - ItemList.Automation_RecipeFilter_UV.set( - new GT_MetaTileEntity_RecipeFilter( - RECIPE_FILTER_UV.ID, - "automation.recipefilter.tier.08", - "Ultimate Voltage Recipe Filter", - 8).getStackForm(1L)); - ItemList.Automation_RecipeFilter_MAX.set( - new GT_MetaTileEntity_RecipeFilter( - RECIPE_FILTER_UHV.ID, - "automation.recipefilter.tier.09", - "Highly Ultimate Voltage Recipe Filter", - 9).getStackForm(1L)); - } - - private static void registerMachineHull() { - ItemList.Hull_Bronze.set( - new GT_MetaTileEntity_BasicHull_Bronze( - HULL_BRONZE.ID, - "hull.bronze", - "Bronze Hull", - 0, - "For your first Steam Machines").getStackForm(1L)); - ItemList.Hull_Bronze_Bricks.set( - new GT_MetaTileEntity_BasicHull_BronzeBricks( - HULL_BRICKED_BRONZE.ID, - "hull.bronze_bricked", - "Bricked Bronze Hull", - 0, - "For your first Steam Machines").getStackForm(1L)); - ItemList.Hull_HP.set( - new GT_MetaTileEntity_BasicHull_Steel( - HULL_STEEL.ID, - "hull.steel", - "Steel Hull", - 0, - "For improved Steam Machines").getStackForm(1L)); - ItemList.Hull_HP_Bricks.set( - new GT_MetaTileEntity_BasicHull_SteelBricks( - HULL_WROUGHT_IRON.ID, - "hull.steel_bricked", - "Bricked Wrought Iron Hull", - 0, - "For improved Steam Machines").getStackForm(1L)); - - ItemList.Hull_ULV.set( - new GT_MetaTileEntity_BasicHull(HULL_ULV.ID, "hull.tier.00", "ULV Machine Hull", 0, imagination) - .getStackForm(1L)); - ItemList.Hull_LV.set( - new GT_MetaTileEntity_BasicHull(HULL_LV.ID, "hull.tier.01", "LV Machine Hull", 1, imagination) - .getStackForm(1L)); - ItemList.Hull_MV.set( - new GT_MetaTileEntity_BasicHull(HULL_MV.ID, "hull.tier.02", "MV Machine Hull", 2, imagination) - .getStackForm(1L)); - ItemList.Hull_HV.set( - new GT_MetaTileEntity_BasicHull(HULL_HV.ID, "hull.tier.03", "HV Machine Hull", 3, imagination) - .getStackForm(1L)); - ItemList.Hull_EV.set( - new GT_MetaTileEntity_BasicHull(HULL_EV.ID, "hull.tier.04", "EV Machine Hull", 4, imagination) - .getStackForm(1L)); - ItemList.Hull_IV.set( - new GT_MetaTileEntity_BasicHull(HULL_IV.ID, "hull.tier.05", "IV Machine Hull", 5, imagination) - .getStackForm(1L)); - ItemList.Hull_LuV.set( - new GT_MetaTileEntity_BasicHull(HULL_LuV.ID, "hull.tier.06", "LuV Machine Hull", 6, imagination) - .getStackForm(1L)); - ItemList.Hull_ZPM.set( - new GT_MetaTileEntity_BasicHull(HULL_ZPM.ID, "hull.tier.07", "ZPM Machine Hull", 7, imagination) - .getStackForm(1L)); - ItemList.Hull_UV.set( - new GT_MetaTileEntity_BasicHull(HULL_UV.ID, "hull.tier.08", "UV Machine Hull", 8, imagination) - .getStackForm(1L)); - ItemList.Hull_MAX.set( - new GT_MetaTileEntity_BasicHull(HULL_UHV.ID, "hull.tier.09", "UHV Machine Hull", 9, imagination) - .getStackForm(1L)); - - ItemList.Hull_UEV.set( - new GT_MetaTileEntity_BasicHull( - HULL_UEV.ID, - "hull.tier.10", - "UEV Machine Hull", - 10, - GT_Loader_MetaTileEntities.imagination).getStackForm(1L)); - - ItemList.Hull_UIV.set( - new GT_MetaTileEntity_BasicHull( - HULL_UIV.ID, - "hull.tier.11", - "UIV Machine Hull", - 11, - GT_Loader_MetaTileEntities.imagination).getStackForm(1L)); - - ItemList.Hull_UMV.set( - new GT_MetaTileEntity_BasicHull( - HULL_UMV.ID, - "hull.tier.12", - "UMV Machine Hull", - 12, - GT_Loader_MetaTileEntities.imagination).getStackForm(1L)); - - ItemList.Hull_UXV.set( - new GT_MetaTileEntity_BasicHull( - HULL_UXV.ID, - "hull.tier.13", - "UXV Machine Hull", - 13, - GT_Loader_MetaTileEntities.imagination).getStackForm(1L)); - - ItemList.Hull_MAXV.set( - new GT_MetaTileEntity_BasicHull( - HULL_MAX.ID, - "hull.tier.14", - "MAX Machine Hull", - 14, - GT_Loader_MetaTileEntities.imagination).getStackForm(1L)); - } - - private static void registerTransformer() { - ItemList.Transformer_LV_ULV.set( - new GT_MetaTileEntity_Transformer( - transformer_LV_ULV.ID, - "transformer.tier.00", - "Ultra Low Voltage Transformer", - 0, - "LV -> ULV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_MV_LV.set( - new GT_MetaTileEntity_Transformer( - transformer_MV_LV.ID, - "transformer.tier.01", - "Low Voltage Transformer", - 1, - "MV -> LV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_HV_MV.set( - new GT_MetaTileEntity_Transformer( - transformer_HV_MV.ID, - "transformer.tier.02", - "Medium Voltage Transformer", - 2, - "HV -> MV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_EV_HV.set( - new GT_MetaTileEntity_Transformer( - transformer_EV_HV.ID, - "transformer.tier.03", - "High Voltage Transformer", - 3, - "EV -> HV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_IV_EV.set( - new GT_MetaTileEntity_Transformer( - transformer_IV_EV.ID, - "transformer.tier.04", - "Extreme Transformer", - 4, - "IV -> EV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_LuV_IV.set( - new GT_MetaTileEntity_Transformer( - transformer_LuV_IV.ID, - "transformer.tier.05", - "Insane Transformer", - 5, - "LuV -> IV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_ZPM_LuV.set( - new GT_MetaTileEntity_Transformer( - transformer_ZPM_LuV.ID, - "transformer.tier.06", - "Ludicrous Transformer", - 6, - "ZPM -> LuV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_UV_ZPM.set( - new GT_MetaTileEntity_Transformer( - transformer_UV_ZPM.ID, - "transformer.tier.07", - "ZPM Voltage Transformer", - 7, - "UV -> ZPM (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_MAX_UV.set( - new GT_MetaTileEntity_Transformer( - transformer_UHV_UV.ID, - "transformer.tier.08", - "Ultimate Transformer", - 8, - "UHV -> UV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_UEV_UHV.set( - new GT_MetaTileEntity_Transformer( - TRANSFORMER_UEV_UHV.ID, - "transformer.tier.09", - "Highly Ultimate Transformer", - 9, - "UEV -> UHV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.Transformer_UIV_UEV.set( - new GT_MetaTileEntity_Transformer( - TRANSFORMER_UIV_UEV.ID, - "transformer.tier.10", - "Extremely Ultimate Transformer", - 10, - "UIV -> UEV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.Transformer_UMV_UIV.set( - new GT_MetaTileEntity_Transformer( - TRANSFORMER_UMV_UIV.ID, - "transformer.tier.11", - "Insanely Ultimate Transformer", - 11, - "UMV -> UIV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.Transformer_UXV_UMV.set( - new GT_MetaTileEntity_Transformer( - TRANSFORMER_UXV_UMV.ID, - "transformer.tier.12", - "Mega Ultimate Transformer", - 12, - "UXV -> UMV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.Transformer_MAX_UXV.set( - new GT_MetaTileEntity_Transformer( - TRANSFORMER_MAX_UXV.ID, - "transformer.tier.13", - "Extended Mega Ultimate Transformer", - 13, - "MAX -> UXV (Use Soft Mallet to invert)").getStackForm(1L)); - } - - private void registerChemicalBath() { - ItemList.Machine_LV_ChemicalBath.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_LV.ID, - "basicmachine.chemicalbath.tier.01", - "Basic Chemical Bath", - 1, - MachineType.CHEMICAL_BATH.tooltipDescription(), - RecipeMaps.chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - - ItemList.Machine_MV_ChemicalBath.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_MV.ID, - "basicmachine.chemicalbath.tier.02", - "Advanced Chemical Bath", - 2, - MachineType.CHEMICAL_BATH.tooltipDescription(), - RecipeMaps.chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - - ItemList.Machine_HV_ChemicalBath.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_HV.ID, - "basicmachine.chemicalbath.tier.03", - "Advanced Chemical Bath II", - 3, - MachineType.CHEMICAL_BATH.tooltipDescription(), - RecipeMaps.chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - - ItemList.Machine_EV_ChemicalBath.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_EV.ID, - "basicmachine.chemicalbath.tier.04", - "Advanced Chemical Bath III", - 4, - MachineType.CHEMICAL_BATH.tooltipDescription(), - RecipeMaps.chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - - ItemList.Machine_IV_ChemicalBath.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_IV.ID, - "basicmachine.chemicalbath.tier.05", - "Advanced Chemical Bath IV", - 5, - MachineType.CHEMICAL_BATH.tooltipDescription(), - RecipeMaps.chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - - ItemList.ChemicalBathLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_LuV.ID, - "basicmachine.chemicalbath.tier.06", - "Elite Chemical Bath", - 6, - MachineType.CHEMICAL_BATH.tooltipDescription(), - chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - - ItemList.ChemicalBathZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_ZPM.ID, - "basicmachine.chemicalbath.tier.07", - "Elite Chemical Bath II", - 7, - MachineType.CHEMICAL_BATH.tooltipDescription(), - chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - - ItemList.ChemicalBathUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_UV.ID, - "basicmachine.chemicalbath.tier.08", - "Ultimate Chemical Dunktron", - 8, - MachineType.CHEMICAL_BATH.tooltipDescription(), - chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - - ItemList.ChemicalBathUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_UHV.ID, - "basicmachine.chemicalbath.tier.09", - "Epic Chemical Dunktron", - 9, - MachineType.CHEMICAL_BATH.tooltipDescription(), - chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - - ItemList.ChemicalBathUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_UEV.ID, - "basicmachine.chemicalbath.tier.10", - "Epic Chemical Dunktron II", - 10, - MachineType.CHEMICAL_BATH.tooltipDescription(), - chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - - ItemList.ChemicalBathUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_UIV.ID, - "basicmachine.chemicalbath.tier.11", - "Epic Chemical Dunktron III", - 11, - MachineType.CHEMICAL_BATH.tooltipDescription(), - chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - - ItemList.ChemicalBathUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_BATH_UMV.ID, - "basicmachine.chemicalbath.tier.12", - "Epic Chemical Dunktron IV", - 12, - MachineType.CHEMICAL_BATH.tooltipDescription(), - chemicalBathRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_BATH", - null).getStackForm(1L)); - } - - private void registerChemicalReactor() { - ItemList.Machine_LV_ChemicalReactor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_LV.ID, - "basicmachine.chemicalreactor.tier.01", - "Basic Chemical Reactor", - 1, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - RecipeMaps.chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - ItemList.Machine_MV_ChemicalReactor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_MV.ID, - "basicmachine.chemicalreactor.tier.02", - "Advanced Chemical Reactor", - 2, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - RecipeMaps.chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - ItemList.Machine_HV_ChemicalReactor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_HV.ID, - "basicmachine.chemicalreactor.tier.03", - "Advanced Chemical Reactor II", - 3, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - RecipeMaps.chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - ItemList.Machine_EV_ChemicalReactor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_EV.ID, - "basicmachine.chemicalreactor.tier.04", - "Advanced Chemical Reactor III", - 4, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - RecipeMaps.chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - ItemList.Machine_IV_ChemicalReactor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_IV.ID, - "basicmachine.chemicalreactor.tier.05", - "Advanced Chemical Reactor IV", - 5, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - RecipeMaps.chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - ItemList.ChemicalReactorLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_LuV.ID, - "basicmachine.chemicalreactor.tier.06", - "Elite Chemical Reactor", - 6, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - ItemList.ChemicalReactorZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_ZPM.ID, - "basicmachine.chemicalreactor.tier.07", - "Elite Chemical Reactor II", - 7, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - ItemList.ChemicalReactorUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_UV.ID, - "basicmachine.chemicalreactor.tier.08", - "Ultimate Chemical Perforer", - 8, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - ItemList.ChemicalReactorUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_UHV.ID, - "basicmachine.chemicalreactor.tier.09", - "Epic Chemical Performer", - 9, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - ItemList.ChemicalReactorUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_UEV.ID, - "basicmachine.chemicalreactor.tier.10", - "Epic Chemical Performer II", - 10, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - ItemList.ChemicalReactorUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_UIV.ID, - "basicmachine.chemicalreactor.tier.11", - "Epic Chemical Performer III", - 11, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - ItemList.ChemicalReactorUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CHEMICAL_REACTOR_UMV.ID, - "basicmachine.chemicalreactor.tier.12", - "Epic Chemical Performer IV", - 12, - MachineType.CHEMICAL_REACTOR.tooltipDescription(), - chemicalReactorRecipes, - 2, - 2, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CHEMICAL_REACTOR", - null).getStackForm(1L)); - - } - - private void registerFermenter() { - ItemList.Machine_LV_Fermenter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_LV.ID, - "basicmachine.fermenter.tier.01", - "Basic Fermenter", - 1, - MachineType.FERMENTER.tooltipDescription(), - RecipeMaps.fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Fermenter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_MV.ID, - "basicmachine.fermenter.tier.02", - "Advanced Fermenter", - 2, - MachineType.FERMENTER.tooltipDescription(), - RecipeMaps.fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Fermenter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_HV.ID, - "basicmachine.fermenter.tier.03", - "Advanced Fermenter II", - 3, - MachineType.FERMENTER.tooltipDescription(), - RecipeMaps.fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Fermenter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_EV.ID, - "basicmachine.fermenter.tier.04", - "Advanced Fermenter III", - 4, - MachineType.FERMENTER.tooltipDescription(), - RecipeMaps.fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Fermenter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_IV.ID, - "basicmachine.fermenter.tier.05", - "Advanced Fermenter IV", - 5, - MachineType.FERMENTER.tooltipDescription(), - RecipeMaps.fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - - ItemList.FermenterLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_LuV.ID, - "basicmachine.fermenter.tier.06", - "Elite Fermenter", - 6, - MachineType.FERMENTER.tooltipDescription(), - fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - - ItemList.FermenterZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_ZPM.ID, - "basicmachine.fermenter.tier.07", - "Elite Fermenter II", - 7, - MachineType.FERMENTER.tooltipDescription(), - fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - - ItemList.FermenterUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_UV.ID, - "basicmachine.fermenter.tier.08", - "Ultimate Fermentation Hastener", - 8, - MachineType.FERMENTER.tooltipDescription(), - fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - - ItemList.FermenterUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_UHV.ID, - "basicmachine.fermenter.tier.09", - "Epic Fermentation Hastener", - 9, - MachineType.FERMENTER.tooltipDescription(), - fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - - ItemList.FermenterUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_UEV.ID, - "basicmachine.fermenter.tier.10", - "Epic Fermentation Hastener II", - 10, - MachineType.FERMENTER.tooltipDescription(), - fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - - ItemList.FermenterUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_UIV.ID, - "basicmachine.fermenter.tier.11", - "Epic Fermentation Hastener III", - 11, - MachineType.FERMENTER.tooltipDescription(), - fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - - ItemList.FermenterUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FERMENTER_UMV.ID, - "basicmachine.fermenter.tier.12", - "Epic Fermentation Hastener IV", - 12, - MachineType.FERMENTER.tooltipDescription(), - fermentingRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FERMENTER", - null).getStackForm(1L)); - } - - private void registerFluidCanner() { - ItemList.Machine_LV_FluidCanner.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_LV.ID, - "basicmachine.fluidcanner.tier.01", - "Basic Fluid Canner", - 1, - MachineType.FLUID_CANNER.tooltipDescription(), - RecipeMaps.fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - - ItemList.Machine_MV_FluidCanner.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_MV.ID, - "basicmachine.fluidcanner.tier.02", - "Advanced Fluid Canner", - 2, - MachineType.FLUID_CANNER.tooltipDescription(), - RecipeMaps.fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - - ItemList.Machine_HV_FluidCanner.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_HV.ID, - "basicmachine.fluidcanner.tier.03", - "Quick Fluid Canner", - 3, - MachineType.FLUID_CANNER.tooltipDescription(), - RecipeMaps.fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - - ItemList.Machine_EV_FluidCanner.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_EV.ID, - "basicmachine.fluidcanner.tier.04", - "Turbo Fluid Canner", - 4, - MachineType.FLUID_CANNER.tooltipDescription(), - RecipeMaps.fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - - ItemList.Machine_IV_FluidCanner.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_IV.ID, - "basicmachine.fluidcanner.tier.05", - "Instant Fluid Canner", - 5, - MachineType.FLUID_CANNER.tooltipDescription(), - RecipeMaps.fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - - ItemList.FluidCannerLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_LuV.ID, - "basicmachine.fluidcanner.tier.06", - "Elite Fluid Canner", - 6, - MachineType.FLUID_CANNER.tooltipDescription(), - fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - - ItemList.FluidCannerZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_ZPM.ID, - "basicmachine.fluidcanner.tier.07", - "Elite Fluid Canner II", - 7, - MachineType.FLUID_CANNER.tooltipDescription(), - fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - - ItemList.FluidCannerUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_UV.ID, - "basicmachine.fluidcanner.tier.08", - "Ultimate Liquid Can Actuator", - 8, - MachineType.FLUID_CANNER.tooltipDescription(), - fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - - ItemList.FluidCannerUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_UHV.ID, - "basicmachine.fluidcanner.tier.09", - "Epic Liquid Can Actuator", - 9, - MachineType.FLUID_CANNER.tooltipDescription(), - fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - - ItemList.FluidCannerUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_UEV.ID, - "basicmachine.fluidcanner.tier.10", - "Epic Liquid Can Actuator II", - 10, - MachineType.FLUID_CANNER.tooltipDescription(), - fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - - ItemList.FluidCannerUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_UIV.ID, - "basicmachine.fluidcanner.tier.11", - "Epic Liquid Can Actuator III", - 11, - MachineType.FLUID_CANNER.tooltipDescription(), - fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - - ItemList.FluidCannerUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_CANNER_UMV.ID, - "basicmachine.fluidcanner.tier.12", - "Epic Liquid Can Actuator IV", - 12, - MachineType.FLUID_CANNER.tooltipDescription(), - fluidCannerRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_CANNER", - null).getStackForm(1L)); - } - - private void registerFluidExtractor() { - ItemList.Machine_LV_FluidExtractor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_LV.ID, - "basicmachine.fluidextractor.tier.01", - "Basic Fluid Extractor", - 1, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - RecipeMaps.fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - - ItemList.Machine_MV_FluidExtractor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_MV.ID, - "basicmachine.fluidextractor.tier.02", - "Advanced Fluid Extractor", - 2, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - RecipeMaps.fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - - ItemList.Machine_HV_FluidExtractor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_HV.ID, - "basicmachine.fluidextractor.tier.03", - "Advanced Fluid Extractor II", - 3, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - RecipeMaps.fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - - ItemList.Machine_EV_FluidExtractor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_EV.ID, - "basicmachine.fluidextractor.tier.04", - "Advanced Fluid Extractor III", - 4, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - RecipeMaps.fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - - ItemList.Machine_IV_FluidExtractor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_IV.ID, - "basicmachine.fluidextractor.tier.05", - "Advanced Fluid Extractor IV", - 5, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - RecipeMaps.fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - - ItemList.FluidExtractorLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_LuV.ID, - "basicmachine.fluidextractor.tier.06", - "Elite Fluid Extractor", - 6, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - - ItemList.FluidExtractorZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_ZPM.ID, - "basicmachine.fluidextractor.tier.07", - "Elite Fluid Extractor II", - 7, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - - ItemList.FluidExtractorUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_UV.ID, - "basicmachine.fluidextractor.tier.08", - "Ultimate Liquefying Sucker", - 8, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - - ItemList.FluidExtractorUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_UHV.ID, - "basicmachine.fluidextractor.tier.09", - "Epic Liquefying Sucker", - 9, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - - ItemList.FluidExtractorUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_UEV.ID, - "basicmachine.fluidextractor.tier.10", - "Epic Liquefying Sucker II", - 10, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - - ItemList.FluidExtractorUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_UIV.ID, - "basicmachine.fluidextractor.tier.11", - "Epic Liquefying Sucker III", - 11, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - - ItemList.FluidExtractorUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_EXTRACTOR_UMV.ID, - "basicmachine.fluidextractor.tier.12", - "Epic Liquefying Sucker IV", - 12, - MachineType.FLUID_EXTRACTOR.tooltipDescription(), - fluidExtractionRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_EXTRACTOR", - null).getStackForm(1L)); - } - - private void registerFluidHeater() { - ItemList.Machine_LV_FluidHeater.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_LV.ID, - "basicmachine.fluidheater.tier.01", - "Basic Fluid Heater", - 1, - MachineType.FLUID_HEATER.tooltipDescription(), - RecipeMaps.fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - - ItemList.Machine_MV_FluidHeater.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_MV.ID, - "basicmachine.fluidheater.tier.02", - "Advanced Fluid Heater", - 2, - MachineType.FLUID_HEATER.tooltipDescription(), - RecipeMaps.fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - - ItemList.Machine_HV_FluidHeater.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_HV.ID, - "basicmachine.fluidheater.tier.03", - "Advanced Fluid Heater II", - 3, - MachineType.FLUID_HEATER.tooltipDescription(), - RecipeMaps.fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - - ItemList.Machine_EV_FluidHeater.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_EV.ID, - "basicmachine.fluidheater.tier.04", - "Advanced Fluid Heater III", - 4, - MachineType.FLUID_HEATER.tooltipDescription(), - RecipeMaps.fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - - ItemList.Machine_IV_FluidHeater.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_IV.ID, - "basicmachine.fluidheater.tier.05", - "Advanced Fluid Heater IV", - 5, - MachineType.FLUID_HEATER.tooltipDescription(), - RecipeMaps.fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - - ItemList.FluidHeaterLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_LuV.ID, - "basicmachine.fluidheater.tier.06", - "Elite Fluid Heater", - 6, - MachineType.FLUID_HEATER.tooltipDescription(), - fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - - ItemList.FluidHeaterZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_ZPM.ID, - "basicmachine.fluidheater.tier.07", - "Elite Fluid Heater II", - 7, - MachineType.FLUID_HEATER.tooltipDescription(), - fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - - ItemList.FluidHeaterUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_UV.ID, - "basicmachine.fluidheater.tier.08", - "Ultimate Heat Infuser", - 8, - MachineType.FLUID_HEATER.tooltipDescription(), - fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - - ItemList.FluidHeaterUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_UHV.ID, - "basicmachine.fluidheater.tier.09", - "Epic Heat Infuser", - 9, - MachineType.FLUID_HEATER.tooltipDescription(), - fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - - ItemList.FluidHeaterUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_UEV.ID, - "basicmachine.fluidheater.tier.10", - "Epic Heat Infuser II", - 10, - MachineType.FLUID_HEATER.tooltipDescription(), - fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - - ItemList.FluidHeaterUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_UIV.ID, - "basicmachine.fluidheater.tier.11", - "Epic Heat Infuser III", - 11, - MachineType.FLUID_HEATER.tooltipDescription(), - fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - - ItemList.FluidHeaterUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_HEATER_UMV.ID, - "basicmachine.fluidheater.tier.12", - "Epic Heat Infuser IV", - 12, - MachineType.FLUID_HEATER.tooltipDescription(), - fluidHeaterRecipes, - 1, - 0, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_HEATER", - null).getStackForm(1L)); - } - - private void registerMixer() { - ItemList.Machine_LV_Mixer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_LV.ID, - "basicmachine.mixer.tier.01", - "Basic Mixer", - 1, - MachineType.MIXER.tooltipDescription(), - RecipeMaps.mixerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Mixer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_MV.ID, - "basicmachine.mixer.tier.02", - "Advanced Mixer", - 2, - MachineType.MIXER.tooltipDescription(), - RecipeMaps.mixerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Mixer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_HV.ID, - "basicmachine.mixer.tier.03", - "Advanced Mixer II", - 3, - MachineType.MIXER.tooltipDescription(), - RecipeMaps.mixerRecipes, - 6, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Mixer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_EV.ID, - "basicmachine.mixer.tier.04", - "Advanced Mixer III", - 4, - MachineType.MIXER.tooltipDescription(), - RecipeMaps.mixerRecipes, - 9, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Mixer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_IV.ID, - "basicmachine.mixer.tier.05", - "Advanced Mixer IV", - 5, - MachineType.MIXER.tooltipDescription(), - RecipeMaps.mixerRecipes, - 9, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - - ItemList.MixerLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_LuV.ID, - "basicmachine.mixer.tier.06", - "Elite Mixer", - 6, - MachineType.MIXER.tooltipDescription(), - mixerRecipes, - 9, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - - ItemList.MixerZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_ZPM.ID, - "basicmachine.mixer.tier.07", - "Elite Mixer II", - 7, - MachineType.MIXER.tooltipDescription(), - mixerRecipes, - 9, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - - ItemList.MixerUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_UV.ID, - "basicmachine.mixer.tier.08", - "Ultimate Matter Organizer", - 8, - MachineType.MIXER.tooltipDescription(), - mixerRecipes, - 9, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - - ItemList.MixerUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_UHV.ID, - "basicmachine.mixer.tier.09", - "Epic Matter Organizer", - 9, - MachineType.MIXER.tooltipDescription(), - mixerRecipes, - 9, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - - ItemList.MixerUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_UEV.ID, - "basicmachine.mixer.tier.10", - "Epic Matter Organizer II", - 10, - MachineType.MIXER.tooltipDescription(), - mixerRecipes, - 9, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - - ItemList.MixerUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_UIV.ID, - "basicmachine.mixer.tier.11", - "Epic Matter Organizer III", - 11, - MachineType.MIXER.tooltipDescription(), - mixerRecipes, - 9, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - - ItemList.MixerUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MIXER_UMV.ID, - "basicmachine.mixer.tier.12", - "Epic Matter Organizer IV", - 12, - MachineType.MIXER.tooltipDescription(), - mixerRecipes, - 9, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MIXER", - null).getStackForm(1L)); - } - - private void registerAutoclave() { - ItemList.Machine_LV_Autoclave.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_LV.ID, - "basicmachine.autoclave.tier.01", - "Basic Autoclave", - 1, - MachineType.AUTOCLAVE.tooltipDescription(), - RecipeMaps.autoclaveRecipes, - 2, - 2, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - ItemList.Machine_MV_Autoclave.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_MV.ID, - "basicmachine.autoclave.tier.02", - "Advanced Autoclave", - 2, - MachineType.AUTOCLAVE.tooltipDescription(), - RecipeMaps.autoclaveRecipes, - 2, - 2, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - ItemList.Machine_HV_Autoclave.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_HV.ID, - "basicmachine.autoclave.tier.03", - "Advanced Autoclave II", - 3, - MachineType.AUTOCLAVE.tooltipDescription(), - RecipeMaps.autoclaveRecipes, - 2, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - ItemList.Machine_EV_Autoclave.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_EV.ID, - "basicmachine.autoclave.tier.04", - "Advanced Autoclave III", - 4, - MachineType.AUTOCLAVE.tooltipDescription(), - RecipeMaps.autoclaveRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - ItemList.Machine_IV_Autoclave.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_IV.ID, - "basicmachine.autoclave.tier.05", - "Advanced Autoclave IV", - 5, - MachineType.AUTOCLAVE.tooltipDescription(), - RecipeMaps.autoclaveRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - ItemList.AutoclaveLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_LuV.ID, - "basicmachine.autoclave.tier.06", - "Elite Autoclave", - 6, - MachineType.AUTOCLAVE.tooltipDescription(), - autoclaveRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - ItemList.AutoclaveZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_ZPM.ID, - "basicmachine.autoclave.tier.07", - "Elite Autoclave II", - 7, - MachineType.AUTOCLAVE.tooltipDescription(), - autoclaveRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - ItemList.AutoclaveUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_UV.ID, - "basicmachine.autoclave.tier.08", - "Ultimate Pressure Cooker", - 8, - MachineType.AUTOCLAVE.tooltipDescription(), - autoclaveRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - ItemList.AutoclaveUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_UHV.ID, - "basicmachine.autoclave.tier.09", - "Epic Pressure Cooker", - 9, - MachineType.AUTOCLAVE.tooltipDescription(), - autoclaveRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - ItemList.AutoclaveUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_UEV.ID, - "basicmachine.autoclave.tier.10", - "Epic Pressure Cooker II", - 10, - MachineType.AUTOCLAVE.tooltipDescription(), - autoclaveRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - ItemList.AutoclaveUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_UIV.ID, - "basicmachine.autoclave.tier.11", - "Epic Pressure Cooker III", - 11, - MachineType.AUTOCLAVE.tooltipDescription(), - autoclaveRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - ItemList.AutoclaveUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - AUTOCLAVE_UMV.ID, - "basicmachine.autoclave.tier.12", - "Epic Pressure Cooker IV", - 12, - MachineType.AUTOCLAVE.tooltipDescription(), - autoclaveRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "AUTOCLAVE", - null).getStackForm(1L)); - - } - - private void registerBendingMachine() { - ItemList.Machine_LV_Bender.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_LV.ID, - "basicmachine.bender.tier.01", - "Basic Bending Machine", - 1, - MachineType.BENDING_MACHINE.tooltipDescription(), - RecipeMaps.benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Bender.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_MV.ID, - "basicmachine.bender.tier.02", - "Advanced Bending Machine", - 2, - MachineType.BENDING_MACHINE.tooltipDescription(), - RecipeMaps.benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Bender.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_HV.ID, - "basicmachine.bender.tier.03", - "Advanced Bending Machine II", - 3, - MachineType.BENDING_MACHINE.tooltipDescription(), - RecipeMaps.benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Bender.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_EV.ID, - "basicmachine.bender.tier.04", - "Advanced Bending Machine III", - 4, - MachineType.BENDING_MACHINE.tooltipDescription(), - RecipeMaps.benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Bender.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_IV.ID, - "basicmachine.bender.tier.05", - "Advanced Bending Machine IV", - 5, - MachineType.BENDING_MACHINE.tooltipDescription(), - RecipeMaps.benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - - ItemList.BendingMachineLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_LuV.ID, - "basicmachine.bender.tier.06", - "Elite Bending Machine", - 6, - MachineType.BENDING_MACHINE.tooltipDescription(), - benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - - ItemList.BendingMachineZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_ZPM.ID, - "basicmachine.bender.tier.07", - "Elite Bending Machine II", - 7, - MachineType.BENDING_MACHINE.tooltipDescription(), - benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - - ItemList.BendingMachineUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_UV.ID, - "basicmachine.bender.tier.08", - "Ultimate Bending Unit", - 8, - MachineType.BENDING_MACHINE.tooltipDescription(), - benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - - ItemList.BendingMachineUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_UHV.ID, - "basicmachine.bender.tier.09", - "Epic Bending Unit", - 9, - MachineType.BENDING_MACHINE.tooltipDescription(), - benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - - ItemList.BendingMachineUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_UEV.ID, - "basicmachine.bender.tier.10", - "Epic Bending Unit II", - 10, - MachineType.BENDING_MACHINE.tooltipDescription(), - benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - - ItemList.BendingMachineUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_UIV.ID, - "basicmachine.bender.tier.11", - "Epic Bending Unit III", - 11, - MachineType.BENDING_MACHINE.tooltipDescription(), - benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - - ItemList.BendingMachineUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - BENDING_MACHINE_UMV.ID, - "basicmachine.bender.tier.12", - "Epic Bending Unit IV", - 12, - MachineType.BENDING_MACHINE.tooltipDescription(), - benderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "BENDER", - null).getStackForm(1L)); - } - - private void registerCompressor() { - ItemList.Machine_LV_Compressor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_LV.ID, - "basicmachine.compressor.tier.01", - "Basic Compressor", - 1, - MachineType.COMPRESSOR.tooltipDescription(), - RecipeMaps.compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - ItemList.Machine_MV_Compressor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_MV.ID, - "basicmachine.compressor.tier.02", - "Advanced Compressor", - 2, - MachineType.COMPRESSOR.tooltipDescription(), - RecipeMaps.compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - ItemList.Machine_HV_Compressor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_HV.ID, - "basicmachine.compressor.tier.03", - "Advanced Compressor II", - 3, - MachineType.COMPRESSOR.tooltipDescription(), - RecipeMaps.compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - ItemList.Machine_EV_Compressor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_EV.ID, - "basicmachine.compressor.tier.04", - "Advanced Compressor III", - 4, - MachineType.COMPRESSOR.tooltipDescription(), - RecipeMaps.compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - ItemList.Machine_IV_Compressor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_IV.ID, - "basicmachine.compressor.tier.05", - "Singularity Compressor", - 5, - MachineType.COMPRESSOR.tooltipDescription(), - RecipeMaps.compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - ItemList.CompressorLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_LuV.ID, - "basicmachine.compressor.tier.06", - "Elite Compressor", - 6, - MachineType.COMPRESSOR.tooltipDescription(), - compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - ItemList.CompressorZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_ZPM.ID, - "basicmachine.compressor.tier.07", - "Elite Compressor II", - 7, - MachineType.COMPRESSOR.tooltipDescription(), - compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - ItemList.CompressorUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_UV.ID, - "basicmachine.compressor.tier.08", - "Ultimate Matter Constrictor", - 8, - MachineType.COMPRESSOR.tooltipDescription(), - compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - ItemList.CompressorUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_UHV.ID, - "basicmachine.compressor.tier.09", - "Epic Matter Constrictor", - 9, - MachineType.COMPRESSOR.tooltipDescription(), - compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - ItemList.CompressorUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_UEV.ID, - "basicmachine.compressor.tier.10", - "Epic Matter Constrictor II", - 10, - MachineType.COMPRESSOR.tooltipDescription(), - compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - ItemList.CompressorUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_UIV.ID, - "basicmachine.compressor.tier.11", - "Epic Matter Constrictor III", - 11, - MachineType.COMPRESSOR.tooltipDescription(), - compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - ItemList.CompressorUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - COMPRESSOR_UMV.ID, - "basicmachine.compressor.tier.12", - "Epic Matter Constrictor IV", - 12, - MachineType.COMPRESSOR.tooltipDescription(), - compressorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "COMPRESSOR", - null).getStackForm(1L)); - - } - - private void registerCuttingMachine() { - ItemList.Machine_LV_Cutter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_LV.ID, - "basicmachine.cutter.tier.01", - "Basic Cutting Machine", - 1, - MachineType.CUTTING_MACHINE.tooltipDescription(), - RecipeMaps.cutterRecipes, - 1, - 2, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Cutter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_MV.ID, - "basicmachine.cutter.tier.02", - "Advanced Cutting Machine", - 2, - MachineType.CUTTING_MACHINE.tooltipDescription(), - RecipeMaps.cutterRecipes, - 2, - 2, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Cutter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_HV.ID, - "basicmachine.cutter.tier.03", - "Advanced Cutting Machine II", - 3, - MachineType.CUTTING_MACHINE.tooltipDescription(), - RecipeMaps.cutterRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Cutter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_EV.ID, - "basicmachine.cutter.tier.04", - "Advanced Cutting Machine III", - 4, - MachineType.CUTTING_MACHINE.tooltipDescription(), - RecipeMaps.cutterRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Cutter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_IV.ID, - "basicmachine.cutter.tier.05", - "Advanced Cutting Machine IV", - 5, - MachineType.CUTTING_MACHINE.tooltipDescription(), - RecipeMaps.cutterRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - ItemList.CuttingMachineLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_LuV.ID, - "basicmachine.cutter.tier.06", - "Elite Cutting Machine", - 6, - MachineType.CUTTING_MACHINE.tooltipDescription(), - cutterRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - ItemList.CuttingMachineZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_ZPM.ID, - "basicmachine.cutter.tier.07", - "Elite Cutting Machine II", - 7, - MachineType.CUTTING_MACHINE.tooltipDescription(), - cutterRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - ItemList.CuttingMachineUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_UV.ID, - "basicmachine.cutter.tier.08", - "Ultimate Object Divider", - 8, - MachineType.CUTTING_MACHINE.tooltipDescription(), - cutterRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - ItemList.CuttingMachineUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_UHV.ID, - "basicmachine.cutter.tier.09", - "Epic Object Divider", - 9, - MachineType.CUTTING_MACHINE.tooltipDescription(), - cutterRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - ItemList.CuttingMachineUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_UEV.ID, - "basicmachine.cutter.tier.10", - "Epic Object Divider II", - 10, - MachineType.CUTTING_MACHINE.tooltipDescription(), - cutterRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - ItemList.CuttingMachineUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_UIV.ID, - "basicmachine.cutter.tier.11", - "Epic Object Divider III", - 11, - MachineType.CUTTING_MACHINE.tooltipDescription(), - cutterRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - ItemList.CuttingMachineUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CUTTING_MACHINE_UMV.ID, - "basicmachine.cutter.tier.12", - "Epic Object Divider IV", - 12, - MachineType.CUTTING_MACHINE.tooltipDescription(), - cutterRecipes, - 2, - 4, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CUTTER", - null).getStackForm(1L)); - - } - - private void registerDistillery() { - ItemList.Machine_LV_Distillery.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_LV.ID, - "basicmachine.distillery.tier.01", - "Basic Distillery", - 1, - MachineType.DISTILLERY.tooltipDescription(), - RecipeMaps.distilleryRecipes, - 1, - 1, - true, - SoundResource.GT_MACHINES_DISTILLERY_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - ItemList.Machine_MV_Distillery.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_MV.ID, - "basicmachine.distillery.tier.02", - "Advanced Distillery", - 2, - MachineType.DISTILLERY.tooltipDescription(), - RecipeMaps.distilleryRecipes, - 1, - 1, - true, - SoundResource.GT_MACHINES_DISTILLERY_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - ItemList.Machine_HV_Distillery.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_HV.ID, - "basicmachine.distillery.tier.03", - "Advanced Distillery II", - 3, - MachineType.DISTILLERY.tooltipDescription(), - RecipeMaps.distilleryRecipes, - 1, - 1, - true, - SoundResource.GT_MACHINES_DISTILLERY_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - ItemList.Machine_EV_Distillery.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_EV.ID, - "basicmachine.distillery.tier.04", - "Advanced Distillery III", - 4, - MachineType.DISTILLERY.tooltipDescription(), - RecipeMaps.distilleryRecipes, - 1, - 1, - true, - SoundResource.GT_MACHINES_DISTILLERY_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - ItemList.Machine_IV_Distillery.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_IV.ID, - "basicmachine.distillery.tier.05", - "Advanced Distillery IV", - 5, - MachineType.DISTILLERY.tooltipDescription(), - RecipeMaps.distilleryRecipes, - 1, - 1, - true, - SoundResource.GT_MACHINES_DISTILLERY_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - ItemList.DistilleryLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_LuV.ID, - "basicmachine.distillery.tier.06", - "Elite Distillery", - 6, - MachineType.DISTILLERY.tooltipDescription(), - distilleryRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - ItemList.DistilleryZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_ZPM.ID, - "basicmachine.distillery.tier.07", - "Elite Distillery II", - 7, - MachineType.DISTILLERY.tooltipDescription(), - distilleryRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - ItemList.DistilleryUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_UV.ID, - "basicmachine.distillery.tier.08", - "Ultimate Fraction Splitter", - 8, - MachineType.DISTILLERY.tooltipDescription(), - distilleryRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - ItemList.DistilleryUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_UHV.ID, - "basicmachine.distillery.tier.09", - "Epic Fraction Splitter", - 9, - MachineType.DISTILLERY.tooltipDescription(), - distilleryRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - ItemList.DistilleryUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_UEV.ID, - "basicmachine.distillery.tier.10", - "Epic Fraction Splitter II", - 10, - MachineType.DISTILLERY.tooltipDescription(), - distilleryRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - ItemList.DistilleryUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_UIV.ID, - "basicmachine.distillery.tier.11", - "Epic Fraction Splitter III", - 11, - MachineType.DISTILLERY.tooltipDescription(), - distilleryRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - ItemList.DistilleryUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - DISTILLERY_UMV.ID, - "basicmachine.distillery.tier.12", - "Epic Fraction Splitter IV", - 12, - MachineType.DISTILLERY.tooltipDescription(), - distilleryRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "DISTILLERY", - null).getStackForm(1L)); - - } - - private void registerElectricFurnace() { - ItemList.Machine_LV_E_Furnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_LV.ID, - "basicmachine.e_furnace.tier.01", - "Basic Electric Furnace", - 1, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - RecipeMaps.furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).setProgressBarTextureName("E_Furnace") - .getStackForm(1L)); - - ItemList.Machine_MV_E_Furnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_MV.ID, - "basicmachine.e_furnace.tier.02", - "Advanced Electric Furnace", - 2, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - RecipeMaps.furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).setProgressBarTextureName("E_Furnace") - .getStackForm(1L)); - - ItemList.Machine_HV_E_Furnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_HV.ID, - "basicmachine.e_furnace.tier.03", - "Advanced Electric Furnace II", - 3, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - RecipeMaps.furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).setProgressBarTextureName("E_Furnace") - .getStackForm(1L)); - - ItemList.Machine_EV_E_Furnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_EV.ID, - "basicmachine.e_furnace.tier.04", - "Advanced Electric Furnace III", - 4, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - RecipeMaps.furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).setProgressBarTextureName("E_Furnace") - .getStackForm(1L)); - - ItemList.Machine_IV_E_Furnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_IV.ID, - "basicmachine.e_furnace.tier.05", - "Electron Exitement Processor", - 5, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - RecipeMaps.furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).setProgressBarTextureName("E_Furnace") - .getStackForm(1L)); - - ItemList.ElectricFurnaceLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_LuV.ID, - "basicmachine.e_furnace.tier.06", - "Elite Electric Furnace", - 6, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).getStackForm(1L)); - - ItemList.ElectricFurnaceZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_ZPM.ID, - "basicmachine.e_furnace.tier.07", - "Elite Electric Furnace II", - 7, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).getStackForm(1L)); - - ItemList.ElectricFurnaceUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_UV.ID, - "basicmachine.e_furnace.tier.08", - "Ultimate Atom Stimulator", - 8, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).getStackForm(1L)); - - ItemList.ElectricFurnaceUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_UHV.ID, - "basicmachine.e_furnace.tier.09", - "Epic Atom Stimulator", - 9, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).getStackForm(1L)); - - ItemList.ElectricFurnaceUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_UEV.ID, - "basicmachine.e_furnace.tier.10", - "Epic Atom Stimulator II", - 10, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).getStackForm(1L)); - - ItemList.ElectricFurnaceUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_UIV.ID, - "basicmachine.e_furnace.tier.11", - "Epic Atom Stimulator III", - 11, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).getStackForm(1L)); - - ItemList.ElectricFurnaceUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTRIC_FURNACE_UMV.ID, - "basicmachine.e_furnace.tier.12", - "Epic Atom Stimulator IV", - 12, - MachineType.ELECTRIC_FURNACE.tooltipDescription(), - furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_FURNACE", - null).getStackForm(1L)); - } - - private void registerElectrolyzer() { - ItemList.Machine_LV_Electrolyzer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYSER_LV.ID, - "basicmachine.electrolyzer.tier.01", - "Basic Electrolyzer", - 1, - MachineType.ELECTROLYZER.tooltipDescription(), - RecipeMaps.electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Electrolyzer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYSER_MV.ID, - "basicmachine.electrolyzer.tier.02", - "Advanced Electrolyzer", - 2, - MachineType.ELECTROLYZER.tooltipDescription(), - RecipeMaps.electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Electrolyzer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYSER_HV.ID, - "basicmachine.electrolyzer.tier.03", - "Advanced Electrolyzer II", - 3, - MachineType.ELECTROLYZER.tooltipDescription(), - RecipeMaps.electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Electrolyzer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYSER_EV.ID, - "basicmachine.electrolyzer.tier.04", - "Advanced Electrolyzer III", - 4, - MachineType.ELECTROLYZER.tooltipDescription(), - RecipeMaps.electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Electrolyzer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYSER_IV.ID, - "basicmachine.electrolyzer.tier.05", - "Molecular Disintegrator E-4908", - 5, - MachineType.ELECTROLYZER.tooltipDescription(), - RecipeMaps.electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - ItemList.ElectrolyzerLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYZER_LuV.ID, - "basicmachine.electrolyzer.tier.06", - "Elite Electrolyzer", - 6, - MachineType.ELECTROLYZER.tooltipDescription(), - electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - ItemList.ElectrolyzerZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYZER_ZPM.ID, - "basicmachine.electrolyzer.tier.07", - "Elite Electrolyzer II", - 7, - MachineType.ELECTROLYZER.tooltipDescription(), - electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - ItemList.ElectrolyzerUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYZER_UV.ID, - "basicmachine.electrolyzer.tier.08", - "Ultimate Ionizer", - 8, - MachineType.ELECTROLYZER.tooltipDescription(), - electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - ItemList.ElectrolyzerUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYZER_UHV.ID, - "basicmachine.electrolyzer.tier.09", - "Epic Ionizer", - 9, - MachineType.ELECTROLYZER.tooltipDescription(), - electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - ItemList.ElectrolyzerUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYZER_UEV.ID, - "basicmachine.electrolyzer.tier.10", - "Epic Ionizer II", - 10, - MachineType.ELECTROLYZER.tooltipDescription(), - electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - ItemList.ElectrolyzerUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYZER_UIV.ID, - "basicmachine.electrolyzer.tier.11", - "Epic Ionizer III", - 11, - MachineType.ELECTROLYZER.tooltipDescription(), - electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - ItemList.ElectrolyzerUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROLYZER_UMV.ID, - "basicmachine.electrolyzer.tier.12", - "Epic Ionizer IV", - 12, - MachineType.ELECTROLYZER.tooltipDescription(), - electrolyzerRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROLYZER", - null).getStackForm(1L)); - - } - - private void registerElectromagneticSeparator() { - ItemList.Machine_LV_ElectromagneticSeparator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_LV.ID, - "basicmachine.electromagneticseparator.tier.01", - "Basic Electromagnetic Separator", - 1, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - RecipeMaps.electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - ItemList.Machine_MV_ElectromagneticSeparator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_MV.ID, - "basicmachine.electromagneticseparator.tier.02", - "Advanced Electromagnetic Separator", - 2, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - RecipeMaps.electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - ItemList.Machine_HV_ElectromagneticSeparator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_HV.ID, - "basicmachine.electromagneticseparator.tier.03", - "Advanced Electromagnetic Separator II", - 3, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - RecipeMaps.electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - ItemList.Machine_EV_ElectromagneticSeparator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_EV.ID, - "basicmachine.electromagneticseparator.tier.04", - "Advanced Electromagnetic Separator III", - 4, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - RecipeMaps.electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - ItemList.Machine_IV_ElectromagneticSeparator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_IV.ID, - "basicmachine.electromagneticseparator.tier.05", - "Advanced Electromagnetic Separator IV", - 5, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - RecipeMaps.electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - ItemList.ElectromagneticSeparatorLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_LuV.ID, - "basicmachine.electromagneticseparator.tier.06", - "Elite Electromagnetic Separator", - 6, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - ItemList.ElectromagneticSeparatorZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_ZPM.ID, - "basicmachine.electromagneticseparator.tier.07", - "Elite Electromagnetic Separator II", - 7, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - ItemList.ElectromagneticSeparatorUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_UV.ID, - "basicmachine.electromagneticseparator.tier.08", - "Ultimate Magnetar Separator", - 8, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - ItemList.ElectromagneticSeparatorUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_UHV.ID, - "basicmachine.electromagneticseparator.tier.09", - "Epic Magnetar Separator", - 9, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - ItemList.ElectromagneticSeparatorUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_UEV.ID, - "basicmachine.electromagneticseparator.tier.10", - "Epic Magnetar Separator II", - 10, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - ItemList.ElectromagneticSeparatorUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_UIV.ID, - "basicmachine.electromagneticseparator.tier.11", - "Epic Magnetar Separator III", - 11, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - ItemList.ElectromagneticSeparatorUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ELECTROMAGNETIC_SEPARATOR_UMV.ID, - "basicmachine.electromagneticseparator.tier.12", - "Epic Magnetar Separator IV", - 12, - MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), - electroMagneticSeparatorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTROMAGNETIC_SEPARATOR", - null).getStackForm(1L)); - - } - - private void registerExtractor() { - ItemList.Machine_LV_Extractor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_LV.ID, - "basicmachine.extractor.tier.01", - "Basic Extractor", - 1, - MachineType.EXTRACTOR.tooltipDescription(), - RecipeMaps.extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - ItemList.Machine_MV_Extractor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_MV.ID, - "basicmachine.extractor.tier.02", - "Advanced Extractor", - 2, - MachineType.EXTRACTOR.tooltipDescription(), - RecipeMaps.extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - ItemList.Machine_HV_Extractor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_HV.ID, - "basicmachine.extractor.tier.03", - "Advanced Extractor II", - 3, - MachineType.EXTRACTOR.tooltipDescription(), - RecipeMaps.extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - ItemList.Machine_EV_Extractor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_EV.ID, - "basicmachine.extractor.tier.04", - "Advanced Extractor III", - 4, - MachineType.EXTRACTOR.tooltipDescription(), - RecipeMaps.extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - ItemList.Machine_IV_Extractor.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_IV.ID, - "basicmachine.extractor.tier.05", - "Vacuum Extractor", - 5, - MachineType.EXTRACTOR.tooltipDescription(), - RecipeMaps.extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - ItemList.ExtractorLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_LuV.ID, - "basicmachine.extractor.tier.06", - "Elite Extractor", - 6, - MachineType.EXTRACTOR.tooltipDescription(), - extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - ItemList.ExtractorZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_ZPM.ID, - "basicmachine.extractor.tier.07", - "Elite Extractor II", - 7, - MachineType.EXTRACTOR.tooltipDescription(), - extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - ItemList.ExtractorUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_UV.ID, - "basicmachine.extractor.tier.08", - "Ultimate Extractinator", - 8, - MachineType.EXTRACTOR.tooltipDescription(), - extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - ItemList.ExtractorUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_UHV.ID, - "basicmachine.extractor.tier.09", - "Epic Extractinator", - 9, - MachineType.EXTRACTOR.tooltipDescription(), - extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - ItemList.ExtractorUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_UEV.ID, - "basicmachine.extractor.tier.10", - "Epic Extractinator II", - 10, - MachineType.EXTRACTOR.tooltipDescription(), - extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - ItemList.ExtractorUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_UIV.ID, - "basicmachine.extractor.tier.11", - "Epic Extractinator III", - 11, - MachineType.EXTRACTOR.tooltipDescription(), - extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - ItemList.ExtractorUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRACTOR_UMV.ID, - "basicmachine.extractor.tier.12", - "Epic Extractinator IV", - 12, - MachineType.EXTRACTOR.tooltipDescription(), - extractorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRACTOR", - null).getStackForm(1L)); - - } - - private void registerExtruder() { - ItemList.Machine_LV_Extruder.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_LV.ID, - "basicmachine.extruder.tier.01", - "Basic Extruder", - 1, - MachineType.EXTRUDER.tooltipDescription(), - RecipeMaps.extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Extruder.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_MV.ID, - "basicmachine.extruder.tier.02", - "Advanced Extruder", - 2, - MachineType.EXTRUDER.tooltipDescription(), - RecipeMaps.extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Extruder.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_HV.ID, - "basicmachine.extruder.tier.03", - "Advanced Extruder II", - 3, - MachineType.EXTRUDER.tooltipDescription(), - RecipeMaps.extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Extruder.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_EV.ID, - "basicmachine.extruder.tier.04", - "Advanced Extruder III", - 4, - MachineType.EXTRUDER.tooltipDescription(), - RecipeMaps.extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Extruder.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_IV.ID, - "basicmachine.extruder.tier.05", - "Advanced Extruder IV", - 5, - MachineType.EXTRUDER.tooltipDescription(), - RecipeMaps.extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - ItemList.ExtruderLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_LuV.ID, - "basicmachine.extruder.tier.06", - "Elite Extruder", - 6, - MachineType.EXTRUDER.tooltipDescription(), - extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - ItemList.ExtruderZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_ZPM.ID, - "basicmachine.extruder.tier.07", - "Elite Extruder II", - 7, - MachineType.EXTRUDER.tooltipDescription(), - extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - ItemList.ExtruderUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_UV.ID, - "basicmachine.extruder.tier.08", - "Ultimate Shape Driver", - 8, - MachineType.EXTRUDER.tooltipDescription(), - extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - ItemList.ExtruderUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_UHV.ID, - "basicmachine.extruder.tier.09", - "Epic Shape Driver", - 9, - MachineType.EXTRUDER.tooltipDescription(), - extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - ItemList.ExtruderUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_UEV.ID, - "basicmachine.extruder.tier.10", - "Epic Shape Driver II", - 10, - MachineType.EXTRUDER.tooltipDescription(), - extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - ItemList.ExtruderUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_UIV.ID, - "basicmachine.extruder.tier.11", - "Epic Shape Driver III", - 11, - MachineType.EXTRUDER.tooltipDescription(), - extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - ItemList.ExtruderUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - EXTRUDER_UMV.ID, - "basicmachine.extruder.tier.12", - "Epic Shape Driver IV", - 12, - MachineType.EXTRUDER.tooltipDescription(), - extruderRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "EXTRUDER", - null).getStackForm(1L)); - - } - - private void registerFluidSolidifier() { - ItemList.Machine_LV_FluidSolidifier.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_LV.ID, - "basicmachine.fluidsolidifier.tier.01", - "Basic Fluid Solidifier", - 1, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - RecipeMaps.fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - ItemList.Machine_MV_FluidSolidifier.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_MV.ID, - "basicmachine.fluidsolidifier.tier.02", - "Advanced Fluid Solidifier", - 2, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - RecipeMaps.fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - ItemList.Machine_HV_FluidSolidifier.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_HV.ID, - "basicmachine.fluidsolidifier.tier.03", - "Advanced Fluid Solidifier II", - 3, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - RecipeMaps.fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - ItemList.Machine_EV_FluidSolidifier.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_EV.ID, - "basicmachine.fluidsolidifier.tier.04", - "Advanced Fluid Solidifier III", - 4, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - RecipeMaps.fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - ItemList.Machine_IV_FluidSolidifier.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_IV.ID, - "basicmachine.fluidsolidifier.tier.05", - "Advanced Fluid Solidifier IV", - 5, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - RecipeMaps.fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - ItemList.FluidSolidifierLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_LuV.ID, - "basicmachine.fluidsolidifier.tier.06", - "Elite Fluid Solidifier", - 6, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - ItemList.FluidSolidifierZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_ZPM.ID, - "basicmachine.fluidsolidifier.tier.07", - "Elite Fluid Solidifier II", - 7, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - ItemList.FluidSolidifierUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_UV.ID, - "basicmachine.fluidsolidifier.tier.08", - "Ultimate Fluid Petrificator", - 8, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - ItemList.FluidSolidifierUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_UHV.ID, - "basicmachine.fluidsolidifier.tier.09", - "Epic Fluid Petrificator", - 9, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - ItemList.FluidSolidifierUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_UEV.ID, - "basicmachine.fluidsolidifier.tier.10", - "Epic Fluid Petrificator II", - 10, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - ItemList.FluidSolidifierUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_UIV.ID, - "basicmachine.fluidsolidifier.tier.11", - "Epic Fluid Petrificator III", - 11, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - ItemList.FluidSolidifierUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FLUID_SOLIDIFIER_UMV.ID, - "basicmachine.fluidsolidifier.tier.12", - "Epic Fluid Petrificator IV", - 12, - MachineType.FLUID_SOLIDIFIER.tooltipDescription(), - fluidSolidifierRecipes, - 1, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "FLUID_SOLIDIFIER", - null).getStackForm(1L)); - - } - - private void registerFormingPress() { - ItemList.Machine_LV_Press.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_LV.ID, - "basicmachine.press.tier.01", - "Basic Forming Press", - 1, - MachineType.FORMING_PRESS.tooltipDescription(), - RecipeMaps.formingPressRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - ItemList.Machine_MV_Press.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_MV.ID, - "basicmachine.press.tier.02", - "Advanced Forming Press", - 2, - MachineType.FORMING_PRESS.tooltipDescription(), - RecipeMaps.formingPressRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - ItemList.Machine_HV_Press.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_HV.ID, - "basicmachine.press.tier.03", - "Advanced Forming Press II", - 3, - MachineType.FORMING_PRESS.tooltipDescription(), - RecipeMaps.formingPressRecipes, - 4, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - ItemList.Machine_EV_Press.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_EV.ID, - "basicmachine.press.tier.04", - "Advanced Forming Press III", - 4, - MachineType.FORMING_PRESS.tooltipDescription(), - RecipeMaps.formingPressRecipes, - 4, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - ItemList.Machine_IV_Press.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_IV.ID, - "basicmachine.press.tier.05", - "Advanced Forming Press IV", - 5, - MachineType.FORMING_PRESS.tooltipDescription(), - RecipeMaps.formingPressRecipes, - 6, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - ItemList.FormingPressLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_LuV.ID, - "basicmachine.press.tier.06", - "Elite Forming Press", - 6, - MachineType.FORMING_PRESS.tooltipDescription(), - formingPressRecipes, - 6, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - ItemList.FormingPressZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_ZPM.ID, - "basicmachine.press.tier.07", - "Elite Forming Press II", - 7, - MachineType.FORMING_PRESS.tooltipDescription(), - formingPressRecipes, - 6, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - ItemList.FormingPressUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_UV.ID, - "basicmachine.press.tier.08", - "Ultimate Surface Shifter", - 8, - MachineType.FORMING_PRESS.tooltipDescription(), - formingPressRecipes, - 6, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - ItemList.FormingPressUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_UHV.ID, - "basicmachine.press.tier.09", - "Epic Surface Shifter", - 9, - MachineType.FORMING_PRESS.tooltipDescription(), - formingPressRecipes, - 6, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - ItemList.FormingPressUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_UEV.ID, - "basicmachine.press.tier.10", - "Epic Surface Shifter II", - 10, - MachineType.FORMING_PRESS.tooltipDescription(), - formingPressRecipes, - 6, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - ItemList.FormingPressUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_UIV.ID, - "basicmachine.press.tier.11", - "Epic Surface Shifter III", - 11, - MachineType.FORMING_PRESS.tooltipDescription(), - formingPressRecipes, - 6, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - ItemList.FormingPressUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORMING_PRESS_UMV.ID, - "basicmachine.press.tier.12", - "Epic Surface Shifter IV", - 12, - MachineType.FORMING_PRESS.tooltipDescription(), - formingPressRecipes, - 6, - 1, - false, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PRESS", - null).getStackForm(1L)); - - } - - private void registerForgeHammer() { - ItemList.Machine_LV_Hammer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_LV.ID, - "basicmachine.hammer.tier.01", - "Basic Forge Hammer", - 1, - MachineType.FORGE_HAMMER.tooltipDescription(), - RecipeMaps.hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.MAIN_RANDOM_SPARKS, - "HAMMER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Hammer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_MV.ID, - "basicmachine.hammer.tier.02", - "Advanced Forge Hammer", - 2, - MachineType.FORGE_HAMMER.tooltipDescription(), - RecipeMaps.hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.MAIN_RANDOM_SPARKS, - "HAMMER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Hammer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_HV.ID, - "basicmachine.hammer.tier.03", - "Advanced Forge Hammer II", - 3, - MachineType.FORGE_HAMMER.tooltipDescription(), - RecipeMaps.hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.MAIN_RANDOM_SPARKS, - "HAMMER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Hammer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_EV.ID, - "basicmachine.hammer.tier.04", - "Advanced Forge Hammer III", - 4, - MachineType.FORGE_HAMMER.tooltipDescription(), - RecipeMaps.hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.MAIN_RANDOM_SPARKS, - "HAMMER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Hammer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_IV.ID, - "basicmachine.hammer.tier.05", - "Advanced Forge Hammer IV", - 5, - MachineType.FORGE_HAMMER.tooltipDescription(), - RecipeMaps.hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.MAIN_RANDOM_SPARKS, - "HAMMER", - null).getStackForm(1L)); - - ItemList.ForgeHammerLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_LuV.ID, - "basicmachine.hammer.tier.06", - "Elite Forge Hammer", - 6, - MachineType.FORGE_HAMMER.tooltipDescription(), - hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "HAMMER", - null).getStackForm(1L)); - - ItemList.ForgeHammerZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_ZPM.ID, - "basicmachine.hammer.tier.07", - "Elite Forge Hammer II", - 7, - MachineType.FORGE_HAMMER.tooltipDescription(), - hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "HAMMER", - null).getStackForm(1L)); - - ItemList.ForgeHammerUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_UV.ID, - "basicmachine.hammer.tier.08", - "Ultimate Impact Modulator", - 8, - MachineType.FORGE_HAMMER.tooltipDescription(), - hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "HAMMER", - null).getStackForm(1L)); - - ItemList.ForgeHammerUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_UHV.ID, - "basicmachine.hammer.tier.09", - "Epic Impact Modulator", - 9, - MachineType.FORGE_HAMMER.tooltipDescription(), - hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "HAMMER", - null).getStackForm(1L)); - - ItemList.ForgeHammerUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_UEV.ID, - "basicmachine.hammer.tier.10", - "Epic Impact Modulator II", - 10, - MachineType.FORGE_HAMMER.tooltipDescription(), - hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "HAMMER", - null).getStackForm(1L)); - - ItemList.ForgeHammerUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_UIV.ID, - "basicmachine.hammer.tier.11", - "Epic Impact Modulator III", - 11, - MachineType.FORGE_HAMMER.tooltipDescription(), - hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "HAMMER", - null).getStackForm(1L)); - - ItemList.ForgeHammerUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - FORGE_HAMMER_UMV.ID, - "basicmachine.hammer.tier.12", - "Epic Impact Modulator IV", - 12, - MachineType.FORGE_HAMMER.tooltipDescription(), - hammerRecipes, - 1, - 1, - true, - SoundResource.RANDOM_ANVIL_USE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "HAMMER", - null).getStackForm(1L)); - - } - - private void registerLathe() { - ItemList.Machine_LV_Lathe.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_LV.ID, - "basicmachine.lathe.tier.01", - "Basic Lathe", - 1, - MachineType.LATHE.tooltipDescription(), - RecipeMaps.latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - ItemList.Machine_MV_Lathe.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_MV.ID, - "basicmachine.lathe.tier.02", - "Advanced Lathe", - 2, - MachineType.LATHE.tooltipDescription(), - RecipeMaps.latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - ItemList.Machine_HV_Lathe.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_HV.ID, - "basicmachine.lathe.tier.03", - "Advanced Lathe II", - 3, - MachineType.LATHE.tooltipDescription(), - RecipeMaps.latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - ItemList.Machine_EV_Lathe.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_EV.ID, - "basicmachine.lathe.tier.04", - "Advanced Lathe III", - 4, - MachineType.LATHE.tooltipDescription(), - RecipeMaps.latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - ItemList.Machine_IV_Lathe.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_IV.ID, - "basicmachine.lathe.tier.05", - "Advanced Lathe IV", - 5, - MachineType.LATHE.tooltipDescription(), - RecipeMaps.latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - ItemList.LatheLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_LuV.ID, - "basicmachine.lathe.tier.06", - "Elite Lathe", - 6, - MachineType.LATHE.tooltipDescription(), - latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - ItemList.LatheZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_ZPM.ID, - "basicmachine.lathe.tier.07", - "Elite Lathe II", - 7, - MachineType.LATHE.tooltipDescription(), - latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - ItemList.LatheUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_UV.ID, - "basicmachine.lathe.tier.08", - "Ultimate Turn-O-Matic", - 8, - MachineType.LATHE.tooltipDescription(), - latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - ItemList.LatheUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_UHV.ID, - "basicmachine.lathe.tier.09", - "Epic Turn-O-Matic", - 9, - MachineType.LATHE.tooltipDescription(), - latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - ItemList.LatheUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_UEV.ID, - "basicmachine.lathe.tier.10", - "Epic Turn-O-Matic II", - 10, - MachineType.LATHE.tooltipDescription(), - latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - ItemList.LatheUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_UIV.ID, - "basicmachine.lathe.tier.11", - "Epic Turn-O-Matic III", - 11, - MachineType.LATHE.tooltipDescription(), - latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - ItemList.LatheUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LATHE_UMV.ID, - "basicmachine.lathe.tier.12", - "Epic Turn-O-Matic IV", - 12, - MachineType.LATHE.tooltipDescription(), - latheRecipes, - 1, - 2, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LATHE", - null).getStackForm(1L)); - - } - - private void registerPrecisionLaserEngraver() { - ItemList.Machine_LV_LaserEngraver.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LASER_ENGRAVER_LV.ID, - "basicmachine.laserengraver.tier.01", - "Basic Precision Laser Engraver", - 1, - MachineType.LASER_ENGRAVER.tooltipDescription(), - RecipeMaps.laserEngraverRecipes, - 2, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - ItemList.Machine_MV_LaserEngraver.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LASER_ENGRAVER_MV.ID, - "basicmachine.laserengraver.tier.02", - "Advanced Precision Laser Engraver", - 2, - MachineType.LASER_ENGRAVER.tooltipDescription(), - RecipeMaps.laserEngraverRecipes, - 2, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - ItemList.Machine_HV_LaserEngraver.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LASER_ENGRAVER_HV.ID, - "basicmachine.laserengraver.tier.03", - "Advanced Precision Laser Engraver II", - 3, - MachineType.LASER_ENGRAVER.tooltipDescription(), - RecipeMaps.laserEngraverRecipes, - 2, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - ItemList.Machine_EV_LaserEngraver.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LASER_ENGRAVER_EV.ID, - "basicmachine.laserengraver.tier.04", - "Advanced Precision Laser Engraver III", - 4, - MachineType.LASER_ENGRAVER.tooltipDescription(), - RecipeMaps.laserEngraverRecipes, - 4, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - ItemList.Machine_IV_LaserEngraver.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - LASER_ENGRAVER_IV.ID, - "basicmachine.laserengraver.tier.05", - "Advanced Precision Laser Engraver IV", - 5, - MachineType.LASER_ENGRAVER.tooltipDescription(), - RecipeMaps.laserEngraverRecipes, - 4, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - ItemList.PrecisionLaserEngraverLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRECISION_LASER_ENGRAVER_LuV.ID, - "basicmachine.laserengraver.tier.06", - "Elite Precision Laser Engraver", - 6, - MachineType.LASER_ENGRAVER.tooltipDescription(), - laserEngraverRecipes, - 4, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - ItemList.PrecisionLaserEngraverZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRECISION_LASER_ENGRAVER_ZPM.ID, - "basicmachine.laserengraver.tier.07", - "Elite Precision Laser Engraver II", - 7, - MachineType.LASER_ENGRAVER.tooltipDescription(), - laserEngraverRecipes, - 4, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - ItemList.PrecisionLaserEngraverUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRECISION_LASER_ENGRAVER_UV.ID, - "basicmachine.laserengraver.tier.08", - "Ultimate Exact Photon Cannon", - 8, - MachineType.LASER_ENGRAVER.tooltipDescription(), - laserEngraverRecipes, - 4, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - ItemList.PrecisionLaserEngraverUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRECISION_LASER_ENGRAVER_UHV.ID, - "basicmachine.laserengraver.tier.09", - "Epic Exact Photon Cannon", - 9, - MachineType.LASER_ENGRAVER.tooltipDescription(), - laserEngraverRecipes, - 4, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - ItemList.PrecisionLaserEngraverUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRECISION_LASER_ENGRAVER_UEV.ID, - "basicmachine.laserengraver.tier.10", - "Epic Exact Photon Cannon II", - 10, - MachineType.LASER_ENGRAVER.tooltipDescription(), - laserEngraverRecipes, - 4, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - ItemList.PrecisionLaserEngraverUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRECISION_LASER_ENGRAVER_UIV.ID, - "basicmachine.laserengraver.tier.11", - "Epic Exact Photon Cannon III", - 11, - MachineType.LASER_ENGRAVER.tooltipDescription(), - laserEngraverRecipes, - 4, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - ItemList.PrecisionLaserEngraverUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRECISION_LASER_ENGRAVER_UMV.ID, - "basicmachine.laserengraver.tier.12", - "Epic Exact Photon Cannon IV", - 12, - MachineType.LASER_ENGRAVER.tooltipDescription(), - laserEngraverRecipes, - 4, - 1, - true, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "LASER_ENGRAVER", - null).getStackForm(1L)); - - } - - private void registerMacerator() { - ItemList.Machine_LV_Macerator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_LV.ID, - "basicmachine.macerator.tier.01", - "Basic Macerator", - 1, - MachineType.MACERATOR.tooltipDescription(), - RecipeMaps.maceratorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "MACERATOR", - null).getStackForm(1L)); - - ItemList.Machine_MV_Macerator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_MV.ID, - "basicmachine.macerator.tier.02", - "Advanced Macerator", - 2, - MachineType.MACERATOR.tooltipDescription(), - RecipeMaps.maceratorRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "MACERATOR", - null).getStackForm(1L)); - - ItemList.Machine_HV_Macerator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_HV.ID, - "basicmachine.macerator.tier.03", - "Universal Macerator", - 3, - MachineType.MACERATOR_PULVERIZER.tooltipDescription(), - RecipeMaps.maceratorRecipes, - 1, - 2, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PULVERIZER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Macerator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_EV.ID, - "basicmachine.macerator.tier.04", - "Universal Pulverizer", - 4, - MachineType.MACERATOR_PULVERIZER.tooltipDescription(), - RecipeMaps.maceratorRecipes, - 1, - 3, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PULVERIZER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Macerator.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_IV.ID, - "basicmachine.macerator.tier.05", - "Blend-O-Matic 9001", - 5, - MachineType.MACERATOR_PULVERIZER.tooltipDescription(), - RecipeMaps.maceratorRecipes, - 1, - 4, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PULVERIZER", - null).getStackForm(1L)); - - ItemList.MaceratorLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_LuV.ID, - "basicmachine.macerator.tier.06", - "Elite Pulverizer", - 6, - MachineType.MACERATOR.tooltipDescription(), - maceratorRecipes, - 1, - 4, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PULVERIZER", - null).getStackForm(1L)); - - ItemList.MaceratorZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_ZPM.ID, - "basicmachine.macerator.tier.07", - "Elite Pulverizer II", - 7, - MachineType.MACERATOR.tooltipDescription(), - maceratorRecipes, - 1, - 4, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PULVERIZER", - null).getStackForm(1L)); - - ItemList.MaceratorUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_UV.ID, - "basicmachine.macerator.tier.08", - "Ultimate Shape Eliminator", - 8, - MachineType.MACERATOR.tooltipDescription(), - maceratorRecipes, - 1, - 4, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PULVERIZER", - null).getStackForm(1L)); - - ItemList.MaceratorUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_UHV.ID, - "basicmachine.macerator.tier.09", - "Epic Shape Eliminator", - 9, - MachineType.MACERATOR.tooltipDescription(), - maceratorRecipes, - 1, - 4, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PULVERIZER", - null).getStackForm(1L)); - - ItemList.MaceratorUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_UEV.ID, - "basicmachine.macerator.tier.10", - "Epic Shape Eliminator II", - 10, - MachineType.MACERATOR.tooltipDescription(), - maceratorRecipes, - 1, - 4, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PULVERIZER", - null).getStackForm(1L)); - - ItemList.MaceratorUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_UIV.ID, - "basicmachine.macerator.tier.11", - "Epic Shape Eliminator III", - 11, - MachineType.MACERATOR.tooltipDescription(), - maceratorRecipes, - 1, - 4, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PULVERIZER", - null).getStackForm(1L)); - - ItemList.MaceratorUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MACERATOR_UMV.ID, - "basicmachine.macerator.tier.12", - "Epic Shape Eliminator IV", - 12, - MachineType.MACERATOR.tooltipDescription(), - maceratorRecipes, - 1, - 4, - false, - SoundResource.IC2_MACHINES_MACERATOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PULVERIZER", - null).getStackForm(1L)); - - } - - private void registerMatterFabricator() { - - ItemList.MassFabricatorLuV.set( - new GT_MetaTileEntity_Massfabricator( - MATTER_FABRICATOR_LuV.ID, - "basicmachine.massfab.tier.06", - "Elite Mass Fabricator", - 6).getStackForm(1L)); - ItemList.MassFabricatorZPM.set( - new GT_MetaTileEntity_Massfabricator( - MATTER_FABRICATOR_ZPM.ID, - "basicmachine.massfab.tier.07", - "Elite Mass Fabricator II", - 7).getStackForm(1L)); - ItemList.MassFabricatorUV.set( - new GT_MetaTileEntity_Massfabricator( - MATTER_FABRICATOR_UV.ID, - "basicmachine.massfab.tier.08", - "Ultimate Existence Initiator", - 8).getStackForm(1L)); - ItemList.MassFabricatorUHV.set( - new GT_MetaTileEntity_Massfabricator( - MATTER_FABRICATOR_UHV.ID, - "basicmachine.massfab.tier.09", - "Epic Existence Initiator", - 9).getStackForm(1L)); - ItemList.MassFabricatorUEV.set( - new GT_MetaTileEntity_Massfabricator( - MATTER_FABRICATOR_UEV.ID, - "basicmachine.massfab.tier.10", - "Epic Existence Initiator II", - 10).getStackForm(1L)); - ItemList.MassFabricatorUIV.set( - new GT_MetaTileEntity_Massfabricator( - MATTER_FABRICATOR_UIV.ID, - "basicmachine.massfab.tier.11", - "Epic Existence Initiator III", - 11).getStackForm(1L)); - ItemList.MassFabricatorUMV.set( - new GT_MetaTileEntity_Massfabricator( - MATTER_FABRICATOR_UMV.ID, - "basicmachine.massfab.tier.12", - "Epic Existence Initiator IV", - 12).getStackForm(1L)); - } - - private void registerMicrowave() { - ItemList.Machine_LV_Microwave.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_OVEN_LV.ID, - "basicmachine.microwave.tier.01", - "Basic Microwave", - 1, - MachineType.MICROWAVE.tooltipDescription(), - RecipeMaps.microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - ItemList.Machine_MV_Microwave.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_OVEN_MV.ID, - "basicmachine.microwave.tier.02", - "Advanced Microwave", - 2, - MachineType.MICROWAVE.tooltipDescription(), - RecipeMaps.microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - ItemList.Machine_HV_Microwave.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_OVEN_HV.ID, - "basicmachine.microwave.tier.03", - "Advanced Microwave II", - 3, - MachineType.MICROWAVE.tooltipDescription(), - RecipeMaps.microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - ItemList.Machine_EV_Microwave.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_OVEN_EV.ID, - "basicmachine.microwave.tier.04", - "Advanced Microwave III", - 4, - MachineType.MICROWAVE.tooltipDescription(), - RecipeMaps.microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - ItemList.Machine_IV_Microwave.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_OVEN_IV.ID, - "basicmachine.microwave.tier.05", - "Advanced Microwave IV", - 5, - MachineType.MICROWAVE.tooltipDescription(), - RecipeMaps.microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - ItemList.MicrowaveLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_LuV.ID, - "basicmachine.microwave.tier.06", - "Elite Microwave", - 6, - MachineType.MICROWAVE.tooltipDescription(), - microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - ItemList.MicrowaveZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_ZPM.ID, - "basicmachine.microwave.tier.07", - "Elite Microwave II", - 7, - MachineType.MICROWAVE.tooltipDescription(), - microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - ItemList.MicrowaveUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_UV.ID, - "basicmachine.microwave.tier.08", - "Ultimate UFO Engine", - 8, - MachineType.MICROWAVE.tooltipDescription(), - microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - ItemList.MicrowaveUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_UHV.ID, - "basicmachine.microwave.tier.09", - "Epic UFO Engine", - 9, - MachineType.MICROWAVE.tooltipDescription(), - microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - ItemList.MicrowaveUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_UEV.ID, - "basicmachine.microwave.tier.10", - "Epic UFO Engine II", - 10, - MachineType.MICROWAVE.tooltipDescription(), - microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - ItemList.MicrowaveUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_UIV.ID, - "basicmachine.microwave.tier.11", - "Epic UFO Engine III", - 11, - MachineType.MICROWAVE.tooltipDescription(), - microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - ItemList.MicrowaveUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - MICROWAVE_UMV.ID, - "basicmachine.microwave.tier.12", - "Epic UFO Engine IV", - 12, - MachineType.MICROWAVE.tooltipDescription(), - microwaveRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "MICROWAVE", - null).getStackForm(1L)); - - } - - private static void registerOven() { - ItemList.Machine_LV_Oven.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - OVEN_LV.ID, - "basicmachine.e_oven.tier.01", - "Basic Electric Oven", - 1, - MachineType.OVEN.tooltipDescription(), - RecipeMaps.furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_OVEN", - null).setProgressBarTextureName("E_Oven") - .getStackForm(1L)); - - ItemList.Machine_MV_Oven.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - OVEN_MV.ID, - "basicmachine.e_oven.tier.02", - "Advanced Electric Oven", - 2, - MachineType.OVEN.tooltipDescription(), - RecipeMaps.furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_OVEN", - null).setProgressBarTextureName("E_Oven") - .getStackForm(1L)); - - ItemList.Machine_HV_Oven.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - OVEN_HV.ID, - "basicmachine.e_oven.tier.03", - "Advanced Electric Oven II", - 3, - MachineType.OVEN.tooltipDescription(), - RecipeMaps.furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_OVEN", - null).setProgressBarTextureName("E_Oven") - .getStackForm(1L)); - - ItemList.Machine_EV_Oven.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - OVEN_EV.ID, - "basicmachine.e_oven.tier.04", - "Advanced Electric Oven III", - 4, - MachineType.OVEN.tooltipDescription(), - RecipeMaps.furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_OVEN", - null).setProgressBarTextureName("E_Oven") - .getStackForm(1L)); - - ItemList.Machine_IV_Oven.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - OVEN_IV.ID, - "basicmachine.e_oven.tier.05", - "Advanced Electric Oven IV", - 5, - MachineType.OVEN.tooltipDescription(), - RecipeMaps.furnaceRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ELECTRIC_OVEN", - null).setProgressBarTextureName("E_Oven") - .getStackForm(1L)); - } - - private void registerOreWashingPlant() { - ItemList.Machine_LV_OreWasher.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHER_LV.ID, - "basicmachine.orewasher.tier.01", - "Basic Ore Washing Plant", - 1, - MachineType.ORE_WASHER.tooltipDescription(), - RecipeMaps.oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - ItemList.Machine_MV_OreWasher.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHER_MV.ID, - "basicmachine.orewasher.tier.02", - "Advanced Ore Washing Plant", - 2, - MachineType.ORE_WASHER.tooltipDescription(), - RecipeMaps.oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - ItemList.Machine_HV_OreWasher.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHER_HV.ID, - "basicmachine.orewasher.tier.03", - "Advanced Ore Washing Plant II", - 3, - MachineType.ORE_WASHER.tooltipDescription(), - RecipeMaps.oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - ItemList.Machine_EV_OreWasher.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHER_EV.ID, - "basicmachine.orewasher.tier.04", - "Advanced Ore Washing Plant III", - 4, - MachineType.ORE_WASHER.tooltipDescription(), - RecipeMaps.oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - ItemList.Machine_IV_OreWasher.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHER_IV.ID, - "basicmachine.orewasher.tier.05", - "Repurposed Laundry-Washer I-360", - 5, - MachineType.ORE_WASHER.tooltipDescription(), - RecipeMaps.oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - ItemList.OreWashingPlantLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHING_PLANT_LuV.ID, - "basicmachine.orewasher.tier.06", - "Elite Ore Washing Plant", - 6, - MachineType.ORE_WASHER.tooltipDescription(), - oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - ItemList.OreWashingPlantZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHING_PLANT_ZPM.ID, - "basicmachine.orewasher.tier.07", - "Elite Ore Washing Plant II", - 7, - MachineType.ORE_WASHER.tooltipDescription(), - oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - ItemList.OreWashingPlantUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHING_PLANT_UV.ID, - "basicmachine.orewasher.tier.08", - "Ultimate Ore Washing Machine", - 8, - MachineType.ORE_WASHER.tooltipDescription(), - oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - ItemList.OreWashingPlantUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHING_PLANT_UHV.ID, - "basicmachine.orewasher.tier.09", - "Epic Ore Washing Machine", - 9, - MachineType.ORE_WASHER.tooltipDescription(), - oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - ItemList.OreWashingPlantUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHING_PLANT_UEV.ID, - "basicmachine.orewasher.tier.10", - "Epic Ore Washing Machine II", - 10, - MachineType.ORE_WASHER.tooltipDescription(), - oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - ItemList.OreWashingPlantUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHING_PLANT_UIV.ID, - "basicmachine.orewasher.tier.11", - "Epic Ore Washing Machine III", - 11, - MachineType.ORE_WASHER.tooltipDescription(), - oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - ItemList.OreWashingPlantUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ORE_WASHING_PLANT_UMV.ID, - "basicmachine.orewasher.tier.12", - "Epic Ore Washing Machine IV", - 12, - MachineType.ORE_WASHER.tooltipDescription(), - oreWasherRecipes, - 1, - 3, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ORE_WASHER", - null).getStackForm(1L)); - - } - - private void registerPolarizer() { - ItemList.Machine_LV_Polarizer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_LV.ID, - "basicmachine.polarizer.tier.01", - "Basic Polarizer", - 1, - MachineType.POLARIZER.tooltipDescription(), - RecipeMaps.polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Polarizer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_MV.ID, - "basicmachine.polarizer.tier.02", - "Advanced Polarizer", - 2, - MachineType.POLARIZER.tooltipDescription(), - RecipeMaps.polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Polarizer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_HV.ID, - "basicmachine.polarizer.tier.03", - "Advanced Polarizer II", - 3, - MachineType.POLARIZER.tooltipDescription(), - RecipeMaps.polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Polarizer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_EV.ID, - "basicmachine.polarizer.tier.04", - "Advanced Polarizer III", - 4, - MachineType.POLARIZER.tooltipDescription(), - RecipeMaps.polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Polarizer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_IV.ID, - "basicmachine.polarizer.tier.05", - "Advanced Polarizer IV", - 5, - MachineType.POLARIZER.tooltipDescription(), - RecipeMaps.polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - ItemList.PolarizerLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_LuV.ID, - "basicmachine.polarizer.tier.06", - "Elite Polarizer", - 6, - MachineType.POLARIZER.tooltipDescription(), - polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - ItemList.PolarizerZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_ZPM.ID, - "basicmachine.polarizer.tier.07", - "Elite Polarizer II", - 7, - MachineType.POLARIZER.tooltipDescription(), - polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - ItemList.PolarizerUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_UV.ID, - "basicmachine.polarizer.tier.08", - "Ultimate Magnetism Inducer", - 8, - MachineType.POLARIZER.tooltipDescription(), - polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - ItemList.PolarizerUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_UHV.ID, - "basicmachine.polarizer.tier.09", - "Epic Magnetism Inducer", - 9, - MachineType.POLARIZER.tooltipDescription(), - polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - ItemList.PolarizerUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_UEV.ID, - "basicmachine.polarizer.tier.10", - "Epic Magnetism Inducer II", - 10, - MachineType.POLARIZER.tooltipDescription(), - polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - ItemList.PolarizerUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_UIV.ID, - "basicmachine.polarizer.tier.11", - "Epic Magnetism Inducer III", - 11, - MachineType.POLARIZER.tooltipDescription(), - polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - ItemList.PolarizerUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - POLARIZER_UMV.ID, - "basicmachine.polarizer.tier.12", - "Epic Magnetism Inducer IV", - 12, - MachineType.POLARIZER.tooltipDescription(), - polarizerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "POLARIZER", - null).getStackForm(1L)); - - } - - private static void registerPrinter() { - ItemList.Machine_LV_Printer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRINTER_LV.ID, - "basicmachine.printer.tier.01", - "Basic Printer", - 1, - MachineType.PRINTER.tooltipDescription(), - RecipeMaps.printerRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PRINTER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Printer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRINTER_MV.ID, - "basicmachine.printer.tier.02", - "Advanced Printer", - 2, - MachineType.PRINTER.tooltipDescription(), - RecipeMaps.printerRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PRINTER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Printer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRINTER_HV.ID, - "basicmachine.printer.tier.03", - "Advanced Printer II", - 3, - MachineType.PRINTER.tooltipDescription(), - RecipeMaps.printerRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PRINTER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Printer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRINTER_EV.ID, - "basicmachine.printer.tier.04", - "Advanced Printer III", - 4, - MachineType.PRINTER.tooltipDescription(), - RecipeMaps.printerRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PRINTER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Printer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRINTER_IV.ID, - "basicmachine.printer.tier.05", - "Advanced Printer IV", - 5, - MachineType.PRINTER.tooltipDescription(), - RecipeMaps.printerRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PRINTER", - null).getStackForm(1L)); - - ItemList.Machine_LuV_Printer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRINTER_LuV.ID, - "basicmachine.printer.tier.06", - "Advanced Printer V", - 6, - MachineType.PRINTER.tooltipDescription(), - RecipeMaps.printerRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PRINTER", - null).getStackForm(1L)); - - ItemList.Machine_ZPM_Printer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRINTER_ZPM.ID, - "basicmachine.printer.tier.07", - "Advanced Printer VI", - 7, - MachineType.PRINTER.tooltipDescription(), - RecipeMaps.printerRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PRINTER", - null).getStackForm(1L)); - - ItemList.Machine_UV_Printer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PRINTER_UV.ID, - "basicmachine.printer.tier.08", - "Advanced Printer VII", - 8, - MachineType.PRINTER.tooltipDescription(), - RecipeMaps.printerRecipes, - 1, - 1, - true, - SoundResource.IC2_MACHINES_COMPRESSOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.TOP_SMOKE, - "PRINTER", - null).getStackForm(1L)); - } - - private void registerRecycler() { - ItemList.Machine_LV_Recycler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_LV.ID, - "basicmachine.recycler.tier.01", - "Basic Recycler", - 1, - MachineType.RECYCLER.tooltipDescription(), - RecipeMaps.recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Recycler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_MV.ID, - "basicmachine.recycler.tier.02", - "Advanced Recycler", - 2, - MachineType.RECYCLER.tooltipDescription(), - RecipeMaps.recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Recycler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_HV.ID, - "basicmachine.recycler.tier.03", - "Advanced Recycler II", - 3, - MachineType.RECYCLER.tooltipDescription(), - RecipeMaps.recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Recycler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_EV.ID, - "basicmachine.recycler.tier.04", - "Advanced Recycler III", - 4, - MachineType.RECYCLER.tooltipDescription(), - RecipeMaps.recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Recycler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_IV.ID, - "basicmachine.recycler.tier.05", - "The Oblitterator", - 5, - MachineType.RECYCLER.tooltipDescription(), - RecipeMaps.recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - ItemList.RecyclerLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_LuV.ID, - "basicmachine.recycler.tier.06", - "Elite Recycler", - 6, - MachineType.RECYCLER.tooltipDescription(), - recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - ItemList.RecyclerZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_ZPM.ID, - "basicmachine.recycler.tier.07", - "Elite Recycler II", - 7, - MachineType.RECYCLER.tooltipDescription(), - recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - ItemList.RecyclerUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_UV.ID, - "basicmachine.recycler.tier.08", - "Ultimate Scrap-O-Matic", - 8, - MachineType.RECYCLER.tooltipDescription(), - recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - ItemList.RecyclerUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_UHV.ID, - "basicmachine.recycler.tier.09", - "Epic Scrap-O-Matic", - 9, - MachineType.RECYCLER.tooltipDescription(), - recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - ItemList.RecyclerUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_UEV.ID, - "basicmachine.recycler.tier.10", - "Epic Scrap-O-Matic II", - 10, - MachineType.RECYCLER.tooltipDescription(), - recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - ItemList.RecyclerUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_UIV.ID, - "basicmachine.recycler.tier.11", - "Epic Scrap-O-Matic III", - 11, - MachineType.RECYCLER.tooltipDescription(), - recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - ItemList.RecyclerUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - RECYCLER_UMV.ID, - "basicmachine.recycler.tier.12", - "Epic Scrap-O-Matic IV", - 12, - MachineType.RECYCLER.tooltipDescription(), - recyclerRecipes, - 1, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "RECYCLER", - null).getStackForm(1L)); - - } - - private void registerSiftingMachine() { - ItemList.Machine_LV_Sifter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTER_LV.ID, - "basicmachine.sifter.tier.01", - "Basic Sifting Machine", - 1, - MachineType.SIFTER.tooltipDescription(), - RecipeMaps.sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Sifter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTER_MV.ID, - "basicmachine.sifter.tier.02", - "Advanced Sifting Machine", - 2, - MachineType.SIFTER.tooltipDescription(), - RecipeMaps.sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Sifter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTER_HV.ID, - "basicmachine.sifter.tier.03", - "Advanced Sifting Machine II", - 3, - MachineType.SIFTER.tooltipDescription(), - RecipeMaps.sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Sifter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTER_EV.ID, - "basicmachine.sifter.tier.04", - "Advanced Sifting Machine III", - 4, - MachineType.SIFTER.tooltipDescription(), - RecipeMaps.sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Sifter.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTER_IV.ID, - "basicmachine.sifter.tier.05", - "Advanced Sifting Machine IV", - 5, - MachineType.SIFTER.tooltipDescription(), - RecipeMaps.sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - ItemList.SiftingMachineLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTING_MACHINE_LuV.ID, - "basicmachine.sifter.tier.06", - "Elite Sifting Machine", - 6, - MachineType.SIFTER.tooltipDescription(), - sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - ItemList.SiftingMachineZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTING_MACHINE_ZPM.ID, - "basicmachine.sifter.tier.07", - "Elite Sifting Machine II", - 7, - MachineType.SIFTER.tooltipDescription(), - sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - ItemList.SiftingMachineUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTING_MACHINE_UV.ID, - "basicmachine.sifter.tier.08", - "Ultimate Pulsation Filter", - 8, - MachineType.SIFTER.tooltipDescription(), - sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - ItemList.SiftingMachineUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTING_MACHINE_UHV.ID, - "basicmachine.sifter.tier.09", - "Epic Pulsation Filter", - 9, - MachineType.SIFTER.tooltipDescription(), - sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - ItemList.SiftingMachineUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTING_MACHINE_UEV.ID, - "basicmachine.sifter.tier.10", - "Epic Pulsation Filter II", - 10, - MachineType.SIFTER.tooltipDescription(), - sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - ItemList.SiftingMachineUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTING_MACHINE_UIV.ID, - "basicmachine.sifter.tier.11", - "Epic Pulsation Filter III", - 11, - MachineType.SIFTER.tooltipDescription(), - sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - ItemList.SiftingMachineUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SIFTING_MACHINE_UMV.ID, - "basicmachine.sifter.tier.12", - "Epic Pulsation Filter IV", - 12, - MachineType.SIFTER.tooltipDescription(), - sifterRecipes, - 1, - 9, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SIFTER", - null).getStackForm(1L)); - - } - - private void registerSlicingMachine() { - ItemList.Machine_LV_Slicer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICER_LV.ID, - "basicmachine.slicer.tier.01", - "Basic Slicing Machine", - 1, - MachineType.SLICER.tooltipDescription(), - RecipeMaps.slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Slicer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICER_MV.ID, - "basicmachine.slicer.tier.02", - "Advanced Slicing Machine", - 2, - MachineType.SLICER.tooltipDescription(), - RecipeMaps.slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Slicer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICER_HV.ID, - "basicmachine.slicer.tier.03", - "Advanced Slicing Machine II", - 3, - MachineType.SLICER.tooltipDescription(), - RecipeMaps.slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Slicer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICER_EV.ID, - "basicmachine.slicer.tier.04", - "Advanced Slicing Machine III", - 4, - MachineType.SLICER.tooltipDescription(), - RecipeMaps.slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Slicer.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICER_IV.ID, - "basicmachine.slicer.tier.05", - "Advanced Slicing Machine IV", - 5, - MachineType.SLICER.tooltipDescription(), - RecipeMaps.slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - ItemList.SlicingMachineLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICING_MACHINE_LuV.ID, - "basicmachine.slicer.tier.06", - "Elite Slicing Machine", - 6, - MachineType.SLICER.tooltipDescription(), - slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - ItemList.SlicingMachineZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICING_MACHINE_ZPM.ID, - "basicmachine.slicer.tier.07", - "Elite Slicing Machine II", - 7, - MachineType.SLICER.tooltipDescription(), - slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - ItemList.SlicingMachineUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICING_MACHINE_UV.ID, - "basicmachine.slicer.tier.08", - "Ultimate Quantum Slicer", - 8, - MachineType.SLICER.tooltipDescription(), - slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - ItemList.SlicingMachineUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICING_MACHINE_UHV.ID, - "basicmachine.slicer.tier.09", - "Epic Quantum Slicer", - 9, - MachineType.SLICER.tooltipDescription(), - slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - ItemList.SlicingMachineUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICING_MACHINE_UEV.ID, - "basicmachine.slicer.tier.10", - "Epic Quantum Slicer II", - 10, - MachineType.SLICER.tooltipDescription(), - slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - ItemList.SlicingMachineUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICING_MACHINE_UIV.ID, - "basicmachine.slicer.tier.11", - "Epic Quantum Slicer III", - 11, - MachineType.SLICER.tooltipDescription(), - slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - ItemList.SlicingMachineUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - SLICING_MACHINE_UMV.ID, - "basicmachine.slicer.tier.12", - "Epic Quantum Slicer IV", - 12, - MachineType.SLICER.tooltipDescription(), - slicerRecipes, - 2, - 1, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "SLICER", - null).getStackForm(1L)); - - } - - private void registerThermalCentrifuge() { - ItemList.Machine_LV_ThermalCentrifuge.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_LV.ID, - "basicmachine.thermalcentrifuge.tier.01", - "Basic Thermal Centrifuge", - 1, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - RecipeMaps.thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.Machine_MV_ThermalCentrifuge.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_MV.ID, - "basicmachine.thermalcentrifuge.tier.02", - "Advanced Thermal Centrifuge", - 2, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - RecipeMaps.thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.Machine_HV_ThermalCentrifuge.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_HV.ID, - "basicmachine.thermalcentrifuge.tier.03", - "Advanced Thermal Centrifuge II", - 3, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - RecipeMaps.thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.Machine_EV_ThermalCentrifuge.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_EV.ID, - "basicmachine.thermalcentrifuge.tier.04", - "Advanced Thermal Centrifuge III", - 4, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - RecipeMaps.thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.Machine_IV_ThermalCentrifuge.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_IV.ID, - "basicmachine.thermalcentrifuge.tier.05", - "Blaze Sweatshop T-6350", - 5, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - RecipeMaps.thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.ThermalCentrifugeLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_LuV.ID, - "basicmachine.thermalcentrifuge.tier.06", - "Elite Thermal Centrifuge", - 6, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.ThermalCentrifugeZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_ZPM.ID, - "basicmachine.thermalcentrifuge.tier.07", - "Elite Thermal Centrifuge II", - 7, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.ThermalCentrifugeUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_UV.ID, - "basicmachine.thermalcentrifuge.tier.08", - "Ultimate Fire Cyclone", - 8, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.ThermalCentrifugeUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_UHV.ID, - "basicmachine.thermalcentrifuge.tier.09", - "Epic Fire Cyclone", - 9, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.ThermalCentrifugeUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_UEV.ID, - "basicmachine.thermalcentrifuge.tier.10", - "Epic Fire Cyclone II", - 10, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.ThermalCentrifugeUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_UIV.ID, - "basicmachine.thermalcentrifuge.tier.11", - "Epic Fire Cyclone III", - 11, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.ThermalCentrifugeUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - THERMAL_CENTRIFUGE_UMV.ID, - "basicmachine.thermalcentrifuge.tier.12", - "Epic Fire Cyclone IV", - 12, - MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), - thermalCentrifugeRecipes, - 1, - 3, - false, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "THERMAL_CENTRIFUGE", - null).getStackForm(1L)); - } - - private void registerWiremill() { - ItemList.Machine_LV_Wiremill.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_LV.ID, - "basicmachine.wiremill.tier.01", - "Basic Wiremill", - 1, - MachineType.WIREMILL.tooltipDescription(), - RecipeMaps.wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - ItemList.Machine_MV_Wiremill.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_MV.ID, - "basicmachine.wiremill.tier.02", - "Advanced Wiremill", - 2, - MachineType.WIREMILL.tooltipDescription(), - RecipeMaps.wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - ItemList.Machine_HV_Wiremill.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_HV.ID, - "basicmachine.wiremill.tier.03", - "Advanced Wiremill II", - 3, - MachineType.WIREMILL.tooltipDescription(), - RecipeMaps.wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - ItemList.Machine_EV_Wiremill.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_EV.ID, - "basicmachine.wiremill.tier.04", - "Advanced Wiremill III", - 4, - MachineType.WIREMILL.tooltipDescription(), - RecipeMaps.wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - ItemList.Machine_IV_Wiremill.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_IV.ID, - "basicmachine.wiremill.tier.05", - "Advanced Wiremill IV", - 5, - MachineType.WIREMILL.tooltipDescription(), - RecipeMaps.wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - ItemList.WiremillLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_LuV.ID, - "basicmachine.wiremill.tier.06", - "Elite Wiremill", - 6, - MachineType.WIREMILL.tooltipDescription(), - wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - ItemList.WiremillZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_ZPM.ID, - "basicmachine.wiremill.tier.07", - "Elite Wiremill II", - 7, - MachineType.WIREMILL.tooltipDescription(), - wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - ItemList.WiremillUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_UV.ID, - "basicmachine.wiremill.tier.08", - "Ultimate Wire Transfigurator", - 8, - MachineType.WIREMILL.tooltipDescription(), - wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - ItemList.WiremillUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_UHV.ID, - "basicmachine.wiremill.tier.09", - "Epic Wire Transfigurator", - 9, - MachineType.WIREMILL.tooltipDescription(), - wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - ItemList.WiremillUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_UEV.ID, - "basicmachine.wiremill.tier.10", - "Epic Wire Transfigurator II", - 10, - MachineType.WIREMILL.tooltipDescription(), - wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - ItemList.WiremillUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_UIV.ID, - "basicmachine.wiremill.tier.11", - "Epic Wire Transfigurator III", - 11, - MachineType.WIREMILL.tooltipDescription(), - wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - ItemList.WiremillUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - WIREMILL_UMV.ID, - "basicmachine.wiremill.tier.12", - "Epic Wire Transfigurator IV", - 12, - MachineType.WIREMILL.tooltipDescription(), - wiremillRecipes, - 2, - 1, - false, - SoundResource.IC2_MACHINES_RECYCLER_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "WIREMILL", - null).getStackForm(1L)); - - } - - private void registerArcFurnace() { - ItemList.Machine_LV_ArcFurnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_LV.ID, - "basicmachine.arcfurnace.tier.01", - "Basic Arc Furnace", - 1, - MachineType.ARC_FURNACE.tooltipDescription(), - RecipeMaps.arcFurnaceRecipes, - 1, - 4, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.Machine_MV_ArcFurnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_MV.ID, - "basicmachine.arcfurnace.tier.02", - "Advanced Arc Furnace", - 2, - MachineType.ARC_FURNACE.tooltipDescription(), - RecipeMaps.arcFurnaceRecipes, - 1, - 4, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.Machine_HV_ArcFurnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_HV.ID, - "basicmachine.arcfurnace.tier.03", - "Advanced Arc Furnace II", - 3, - MachineType.ARC_FURNACE.tooltipDescription(), - RecipeMaps.arcFurnaceRecipes, - 1, - 4, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.Machine_EV_ArcFurnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_EV.ID, - "basicmachine.arcfurnace.tier.04", - "Advanced Arc Furnace III", - 4, - MachineType.ARC_FURNACE.tooltipDescription(), - RecipeMaps.arcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.Machine_IV_ArcFurnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_IV.ID, - "basicmachine.arcfurnace.tier.05", - "Advanced Arc Furnace IV", - 5, - MachineType.ARC_FURNACE.tooltipDescription(), - RecipeMaps.arcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.ArcFurnaceLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_LuV.ID, - "basicmachine.arcfurnace.tier.06", - "Elite Arc Furnace", - 6, - MachineType.ARC_FURNACE.tooltipDescription(), - arcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.ArcFurnaceZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_ZPM.ID, - "basicmachine.arcfurnace.tier.07", - "Elite Arc Furnace II", - 7, - MachineType.ARC_FURNACE.tooltipDescription(), - arcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.ArcFurnaceUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_UV.ID, - "basicmachine.arcfurnace.tier.08", - "Ultimate Short Circuit Heater", - 8, - MachineType.ARC_FURNACE.tooltipDescription(), - arcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.ArcFurnaceUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_UHV.ID, - "basicmachine.arcfurnace.tier.09", - "Epic Short Circuit Heater", - 9, - MachineType.ARC_FURNACE.tooltipDescription(), - arcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.ArcFurnaceUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_UEV.ID, - "basicmachine.arcfurnace.tier.10", - "Epic Short Circuit Heater II", - 10, - MachineType.ARC_FURNACE.tooltipDescription(), - arcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.ArcFurnaceUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_UIV.ID, - "basicmachine.arcfurnace.tier.11", - "Epic Short Circuit Heater III", - 11, - MachineType.ARC_FURNACE.tooltipDescription(), - arcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.ArcFurnaceUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - ARC_FURNACE_UMV.ID, - "basicmachine.arcfurnace.tier.12", - "Epic Short Circuit Heater IV", - 12, - MachineType.ARC_FURNACE.tooltipDescription(), - arcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "ARC_FURNACE", - null).getStackForm(1L)); - - } - - private void registerCentrifuge() { - ItemList.Machine_LV_Centrifuge.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_LV.ID, - "basicmachine.centrifuge.tier.01", - "Basic Centrifuge", - 1, - MachineType.CENTRIFUGE.tooltipDescription(), - RecipeMaps.centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.Machine_MV_Centrifuge.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_MV.ID, - "basicmachine.centrifuge.tier.02", - "Advanced Centrifuge", - 2, - MachineType.CENTRIFUGE.tooltipDescription(), - RecipeMaps.centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.Machine_HV_Centrifuge.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_HV.ID, - "basicmachine.centrifuge.tier.03", - "Turbo Centrifuge", - 3, - MachineType.CENTRIFUGE.tooltipDescription(), - RecipeMaps.centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.Machine_EV_Centrifuge.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_EV.ID, - "basicmachine.centrifuge.tier.04", - "Molecular Separator", - 4, - MachineType.CENTRIFUGE.tooltipDescription(), - RecipeMaps.centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.Machine_IV_Centrifuge.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_IV.ID, - "basicmachine.centrifuge.tier.05", - "Molecular Cyclone", - 5, - MachineType.CENTRIFUGE.tooltipDescription(), - RecipeMaps.centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.CentrifugeLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_LuV.ID, - "basicmachine.centrifuge.tier.06", - "Elite Centrifuge", - 6, - MachineType.CENTRIFUGE.tooltipDescription(), - centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.CentrifugeZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_ZPM.ID, - "basicmachine.centrifuge.tier.07", - "Elite Centrifuge II", - 7, - MachineType.CENTRIFUGE.tooltipDescription(), - centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.CentrifugeUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_UV.ID, - "basicmachine.centrifuge.tier.08", - "Ultimate Molecular Tornado", - 8, - MachineType.CENTRIFUGE.tooltipDescription(), - centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.CentrifugeUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_UHV.ID, - "basicmachine.centrifuge.tier.09", - "Epic Molecular Tornado", - 9, - MachineType.CENTRIFUGE.tooltipDescription(), - centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.CentrifugeUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_UEV.ID, - "basicmachine.centrifuge.tier.10", - "Epic Molecular Tornado II", - 10, - MachineType.CENTRIFUGE.tooltipDescription(), - centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.CentrifugeUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_UIV.ID, - "basicmachine.centrifuge.tier.11", - "Epic Molecular Tornado III", - 11, - MachineType.CENTRIFUGE.tooltipDescription(), - centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - ItemList.CentrifugeUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CENTRIFUGE_UMV.ID, - "basicmachine.centrifuge.tier.12", - "Epic Molecular Tornado IV", - 12, - MachineType.CENTRIFUGE.tooltipDescription(), - centrifugeRecipes, - 2, - 6, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CENTRIFUGE", - null).getStackForm(1L)); - - } - - private void registerPlasmaArcFurnace() { - ItemList.Machine_LV_PlasmaArcFurnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_LV.ID, - "basicmachine.plasmaarcfurnace.tier.01", - "Basic Plasma Arc Furnace", - 1, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - RecipeMaps.plasmaArcFurnaceRecipes, - 1, - 4, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.Machine_MV_PlasmaArcFurnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_MV.ID, - "basicmachine.plasmaarcfurnace.tier.02", - "Advanced Plasma Arc Furnace", - 2, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - RecipeMaps.plasmaArcFurnaceRecipes, - 1, - 4, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.Machine_HV_PlasmaArcFurnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_HV.ID, - "basicmachine.plasmaarcfurnace.tier.03", - "Advanced Plasma Arc Furnace II", - 3, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - RecipeMaps.plasmaArcFurnaceRecipes, - 1, - 4, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.Machine_EV_PlasmaArcFurnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_EV.ID, - "basicmachine.plasmaarcfurnace.tier.04", - "Advanced Plasma Arc Furnace III", - 4, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - RecipeMaps.plasmaArcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.Machine_IV_PlasmaArcFurnace.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_IV.ID, - "basicmachine.plasmaarcfurnace.tier.05", - "Advanced Plasma Arc Furnace IV", - 5, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - RecipeMaps.plasmaArcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.PlasmaArcFurnaceLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_LuV.ID, - "basicmachine.plasmaarcfurnace.tier.06", - "Elite Plasma Arc Furnace", - 6, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - plasmaArcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.PlasmaArcFurnaceZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_ZPM.ID, - "basicmachine.plasmaarcfurnace.tier.07", - "Elite Plasma Arc Furnace II", - 7, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - plasmaArcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.PlasmaArcFurnaceUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_UV.ID, - "basicmachine.plasmaarcfurnace.tier.08", - "Ultimate Plasma Discharge Heater", - 8, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - plasmaArcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.PlasmaArcFurnaceUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_UHV.ID, - "basicmachine.plasmaarcfurnace.tier.09", - "Epic Plasma Discharge Heater", - 9, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - plasmaArcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.PlasmaArcFurnaceUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_UEV.ID, - "basicmachine.plasmaarcfurnace.tier.10", - "Epic Plasma Discharge Heater II", - 10, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - plasmaArcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.PlasmaArcFurnaceUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_UIV.ID, - "basicmachine.plasmaarcfurnace.tier.11", - "Epic Plasma Discharge Heater III", - 11, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - plasmaArcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - - ItemList.PlasmaArcFurnaceUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - PLASMA_ARC_FURNACE_UMV.ID, - "basicmachine.plasmaarcfurnace.tier.12", - "Epic Plasma Discharge Heater IV", - 12, - MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), - plasmaArcFurnaceRecipes, - 1, - 9, - true, - SoundResource.IC2_MACHINES_INDUCTION_LOOP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "PLASMA_ARC_FURNACE", - null).getStackForm(1L)); - } - - private void registerCanningMachine() { - ItemList.Machine_LV_Canner.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNER_LV.ID, - "basicmachine.canner.tier.01", - "Basic Canning Machine", - 1, - MachineType.CANNER.tooltipDescription(), - RecipeMaps.cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - - ItemList.Machine_MV_Canner.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNER_MV.ID, - "basicmachine.canner.tier.02", - "Advanced Canning Machine", - 2, - MachineType.CANNER.tooltipDescription(), - RecipeMaps.cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - - ItemList.Machine_HV_Canner.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNER_HV.ID, - "basicmachine.canner.tier.03", - "Advanced Canning Machine II", - 3, - MachineType.CANNER.tooltipDescription(), - RecipeMaps.cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - - ItemList.Machine_EV_Canner.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNER_EV.ID, - "basicmachine.canner.tier.04", - "Advanced Canning Machine III", - 4, - MachineType.CANNER.tooltipDescription(), - RecipeMaps.cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - - ItemList.Machine_IV_Canner.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNER_IV.ID, - "basicmachine.canner.tier.05", - "Advanced Canning Machine IV", - 5, - MachineType.CANNER.tooltipDescription(), - RecipeMaps.cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - - ItemList.CanningMachineLuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNING_MACHINE_LuV.ID, - "basicmachine.canner.tier.06", - "Elite Canning Machine", - 6, - MachineType.CANNER.tooltipDescription(), - cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - - ItemList.CanningMachineZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNING_MACHINE_ZPM.ID, - "basicmachine.canner.tier.07", - "Elite Canning Machine II", - 7, - MachineType.CANNER.tooltipDescription(), - cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - - ItemList.CanningMachineUV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNING_MACHINE_UV.ID, - "basicmachine.canner.tier.08", - "Ultimate Can Operator", - 8, - MachineType.CANNER.tooltipDescription(), - cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - - ItemList.CanningMachineUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNING_MACHINE_UHV.ID, - "basicmachine.canner.tier.09", - "Epic Can Operator", - 9, - MachineType.CANNER.tooltipDescription(), - cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - - ItemList.CanningMachineUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNING_MACHINE_UEV.ID, - "basicmachine.canner.tier.10", - "Epic Can Operator II", - 10, - MachineType.CANNER.tooltipDescription(), - cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - - ItemList.CanningMachineUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNING_MACHINE_UIV.ID, - "basicmachine.canner.tier.11", - "Epic Can Operator III", - 11, - MachineType.CANNER.tooltipDescription(), - cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - - ItemList.CanningMachineUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CANNING_MACHINE_UMV.ID, - "basicmachine.canner.tier.12", - "Epic Can Operator IV", - 12, - MachineType.CANNER.tooltipDescription(), - cannerRecipes, - 2, - 2, - false, - SoundResource.IC2_MACHINES_EXTRACTOR_OP, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CANNER", - null).getStackForm(1L)); - } - - private static void registerDynamoHatch() { - ItemList.Hatch_Dynamo_ULV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_ULV.ID, "hatch.dynamo.tier.00", "ULV Dynamo Hatch", 0) - .getStackForm(1L)); - ItemList.Hatch_Dynamo_LV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_LV.ID, "hatch.dynamo.tier.01", "LV Dynamo Hatch", 1) - .getStackForm(1L)); - ItemList.Hatch_Dynamo_MV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_MV.ID, "hatch.dynamo.tier.02", "MV Dynamo Hatch", 2) - .getStackForm(1L)); - ItemList.Hatch_Dynamo_HV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_HV.ID, "hatch.dynamo.tier.03", "HV Dynamo Hatch", 3) - .getStackForm(1L)); - ItemList.Hatch_Dynamo_EV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_EV.ID, "hatch.dynamo.tier.04", "EV Dynamo Hatch", 4) - .getStackForm(1L)); - ItemList.Hatch_Dynamo_IV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_IV.ID, "hatch.dynamo.tier.05", "IV Dynamo Hatch", 5) - .getStackForm(1L)); - ItemList.Hatch_Dynamo_LuV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_LuV.ID, "hatch.dynamo.tier.06", "LuV Dynamo Hatch", 6) - .getStackForm(1L)); - ItemList.Hatch_Dynamo_ZPM.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_ZPM.ID, "hatch.dynamo.tier.07", "ZPM Dynamo Hatch", 7) - .getStackForm(1L)); - ItemList.Hatch_Dynamo_UV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_UV.ID, "hatch.dynamo.tier.08", "UV Dynamo Hatch", 8) - .getStackForm(1L)); - ItemList.Hatch_Dynamo_UHV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_UHV.ID, "hatch.dynamo.tier.09", "UHV Dynamo Hatch", 9) - .getStackForm(1L)); - ItemList.Hatch_Dynamo_UEV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_UEV.ID, "hatch.dynamo.tier.10", "UEV Dynamo Hatch", 10) - .getStackForm(1L)); - - ItemList.Hatch_Dynamo_UIV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_UIV.ID, "hatch.dynamo.tier.11", "UIV Dynamo Hatch", 11) - .getStackForm(1L)); - - ItemList.Hatch_Dynamo_UMV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_UMV.ID, "hatch.dynamo.tier.12", "UMV Dynamo Hatch", 12) - .getStackForm(1L)); - - ItemList.Hatch_Dynamo_UXV.set( - new GT_MetaTileEntity_Hatch_Dynamo(DYNAMO_HATCH_UXV.ID, "hatch.dynamo.tier.13", "UXV Dynamo Hatch", 13) - .getStackForm(1L)); - } - - private static void registerEnergyHatch() { - ItemList.Hatch_Energy_ULV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_ULV.ID, "hatch.energy.tier.00", "ULV Energy Hatch", 0) - .getStackForm(1L)); - ItemList.Hatch_Energy_LV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_LV.ID, "hatch.energy.tier.01", "LV Energy Hatch", 1) - .getStackForm(1L)); - ItemList.Hatch_Energy_MV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_MV.ID, "hatch.energy.tier.02", "MV Energy Hatch", 2) - .getStackForm(1L)); - ItemList.Hatch_Energy_HV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_HV.ID, "hatch.energy.tier.03", "HV Energy Hatch", 3) - .getStackForm(1L)); - ItemList.Hatch_Energy_EV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_EV.ID, "hatch.energy.tier.04", "EV Energy Hatch", 4) - .getStackForm(1L)); - ItemList.Hatch_Energy_IV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_IV.ID, "hatch.energy.tier.05", "IV Energy Hatch", 5) - .getStackForm(1L)); - ItemList.Hatch_Energy_LuV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_LuV.ID, "hatch.energy.tier.06", "LuV Energy Hatch", 6) - .getStackForm(1L)); - ItemList.Hatch_Energy_ZPM.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_ZPM.ID, "hatch.energy.tier.07", "ZPM Energy Hatch", 7) - .getStackForm(1L)); - ItemList.Hatch_Energy_UV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_UV.ID, "hatch.energy.tier.08", "UV Energy Hatch", 8) - .getStackForm(1L)); - ItemList.Hatch_Energy_UHV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_UHV.ID, "hatch.energy.tier.09", "UHV Energy Hatch", 9) - .getStackForm(1L)); - ItemList.Hatch_Energy_UEV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_UEV.ID, "hatch.energy.tier.10", "UEV Energy Hatch", 10) - .getStackForm(1L)); - - ItemList.Hatch_Energy_UIV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_UIV.ID, "hatch.energy.tier.11", "UIV Energy Hatch", 11) - .getStackForm(1L)); - - ItemList.Hatch_Energy_UMV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_UMV.ID, "hatch.energy.tier.12", "UMV Energy Hatch", 12) - .getStackForm(1L)); - - ItemList.Hatch_Energy_UXV.set( - new GT_MetaTileEntity_Hatch_Energy(ENERGY_HATCH_UXV.ID, "hatch.energy.tier.13", "UXV Energy Hatch", 13) - .getStackForm(1L)); - } - - private static void registerInputHatch() { - ItemList.Hatch_Input_ULV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_ULV.ID, "hatch.input.tier.00", "Input Hatch (ULV)", 0) - .getStackForm(1L)); - ItemList.Hatch_Input_LV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_LV.ID, "hatch.input.tier.01", "Input Hatch (LV)", 1) - .getStackForm(1L)); - ItemList.Hatch_Input_MV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_MV.ID, "hatch.input.tier.02", "Input Hatch (MV)", 2) - .getStackForm(1L)); - ItemList.Hatch_Input_HV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_HV.ID, "hatch.input.tier.03", "Input Hatch (HV)", 3) - .getStackForm(1L)); - ItemList.Hatch_Input_EV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_EV.ID, "hatch.input.tier.04", "Input Hatch (EV)", 4) - .getStackForm(1L)); - ItemList.Hatch_Input_IV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_IV.ID, "hatch.input.tier.05", "Input Hatch (IV)", 5) - .getStackForm(1L)); - ItemList.Hatch_Input_LuV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_LuV.ID, "hatch.input.tier.06", "Input Hatch (LuV)", 6) - .getStackForm(1L)); - ItemList.Hatch_Input_ZPM.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_ZPM.ID, "hatch.input.tier.07", "Input Hatch (ZPM)", 7) - .getStackForm(1L)); - ItemList.Hatch_Input_UV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_UV.ID, "hatch.input.tier.08", "Input Hatch (UV)", 8) - .getStackForm(1L)); - ItemList.Hatch_Input_UHV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_UHV.ID, "hatch.input.tier.09", "Input Hatch (UHV)", 9) - .getStackForm(1L)); - ItemList.Hatch_Input_UEV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_UEV.ID, "hatch.input.tier.10", "Input Hatch (UEV)", 10) - .getStackForm(1L)); - ItemList.Hatch_Input_UIV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_UIV.ID, "hatch.input.tier.11", "Input Hatch (UIV)", 11) - .getStackForm(1L)); - ItemList.Hatch_Input_UMV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_UMV.ID, "hatch.input.tier.12", "Input Hatch (UMV)", 12) - .getStackForm(1L)); - ItemList.Hatch_Input_UXV.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_UXV.ID, "hatch.input.tier.13", "Input Hatch (UXV)", 13) - .getStackForm(1L)); - ItemList.Hatch_Input_MAX.set( - new GT_MetaTileEntity_Hatch_Input(INPUT_HATCH_MAX.ID, "hatch.input.tier.14", "Input Hatch (MAX)", 14) - .getStackForm(1L)); - } - - private static void registerQuadrupleInputHatch() { - ItemList.Hatch_Input_Multi_2x2_EV.set( - new GT_MetaTileEntity_Hatch_MultiInput( - QUADRUPLE_INPUT_HATCHES_EV.ID, - 4, - "hatch.multi.input.tier.01", - "Quadruple Input Hatch (EV)", - 4).getStackForm(1L)); - ItemList.Hatch_Input_Multi_2x2_IV.set( - new GT_MetaTileEntity_Hatch_MultiInput( - QUADRUPLE_INPUT_HATCHES_IV.ID, - 4, - "hatch.multi.input.tier.02", - "Quadruple Input Hatch (IV)", - 5).getStackForm(1L)); - ItemList.Hatch_Input_Multi_2x2_LuV.set( - new GT_MetaTileEntity_Hatch_MultiInput( - QUADRUPLE_INPUT_HATCHES_LuV.ID, - 4, - "hatch.multi.input.tier.03", - "Quadruple Input Hatch (LuV)", - 6).getStackForm(1L)); - ItemList.Hatch_Input_Multi_2x2_ZPM.set( - new GT_MetaTileEntity_Hatch_MultiInput( - QUADRUPLE_INPUT_HATCHES_ZPM.ID, - 4, - "hatch.multi.input.tier.04", - "Quadruple Input Hatch (ZPM)", - 7).getStackForm(1L)); - ItemList.Hatch_Input_Multi_2x2_UV.set( - new GT_MetaTileEntity_Hatch_MultiInput( - QUADRUPLE_INPUT_HATCHES_UV.ID, - 4, - "hatch.multi.input.tier.05", - "Quadruple Input Hatch (UV)", - 8).getStackForm(1L)); - ItemList.Hatch_Input_Multi_2x2_UHV.set( - new GT_MetaTileEntity_Hatch_MultiInput( - QUADRUPLE_INPUT_HATCHES_UHV.ID, - 4, - "hatch.multi.input.tier.06", - "Quadruple Input Hatch (UHV)", - 9).getStackForm(1L)); - ItemList.Hatch_Input_Multi_2x2_UEV.set( - new GT_MetaTileEntity_Hatch_MultiInput( - QUADRUPLE_INPUT_HATCHES_UEV.ID, - 4, - "hatch.multi.input.tier.07", - "Quadruple Input Hatch (UEV)", - 10).getStackForm(1L)); - ItemList.Hatch_Input_Multi_2x2_UIV.set( - new GT_MetaTileEntity_Hatch_MultiInput( - QUADRUPLE_INPUT_HATCHES_UIV.ID, - 4, - "hatch.multi.input.tier.08", - "Quadruple Input Hatch (UIV)", - 11).getStackForm(1L)); - ItemList.Hatch_Input_Multi_2x2_UMV.set( - new GT_MetaTileEntity_Hatch_MultiInput( - QUADRUPLE_INPUT_HATCHES_UMV.ID, - 4, - "hatch.multi.input.tier.09", - "Quadruple Input Hatch (UMV)", - 12).getStackForm(1L)); - ItemList.Hatch_Input_Multi_2x2_UXV.set( - new GT_MetaTileEntity_Hatch_MultiInput( - QUADRUPLE_INPUT_HATCHES_UXV.ID, - 4, - "hatch.multi.input.tier.10", - "Quadruple Input Hatch (UXV)", - 13).getStackForm(1L)); - - ItemList.Hatch_Input_Multi_2x2_Humongous.set( - new GT_MetaTileEntity_Hatch_QuadrupleHumongous( - QUADRUPLE_INPUT_HATCHES_MAX.ID, - 4, - "hatch.multi.input.tier.11", - "Humongous Quadruple Input Hatch").getStackForm(1L)); - } - - private static void registerOutputHatch() { - ItemList.Hatch_Output_ULV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_ULV.ID, "hatch.output.tier.00", "Output Hatch (ULV)", 0) - .getStackForm(1L)); - ItemList.Hatch_Output_LV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_LV.ID, "hatch.output.tier.01", "Output Hatch (LV)", 1) - .getStackForm(1L)); - ItemList.Hatch_Output_MV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_MV.ID, "hatch.output.tier.02", "Output Hatch (MV)", 2) - .getStackForm(1L)); - ItemList.Hatch_Output_HV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_HV.ID, "hatch.output.tier.03", "Output Hatch (HV)", 3) - .getStackForm(1L)); - ItemList.Hatch_Output_EV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_EV.ID, "hatch.output.tier.04", "Output Hatch (EV)", 4) - .getStackForm(1L)); - ItemList.Hatch_Output_IV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_IV.ID, "hatch.output.tier.05", "Output Hatch (IV)", 5) - .getStackForm(1L)); - ItemList.Hatch_Output_LuV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_LuV.ID, "hatch.output.tier.06", "Output Hatch (LuV)", 6) - .getStackForm(1L)); - ItemList.Hatch_Output_ZPM.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_ZPM.ID, "hatch.output.tier.07", "Output Hatch (ZPM)", 7) - .getStackForm(1L)); - ItemList.Hatch_Output_UV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_UV.ID, "hatch.output.tier.08", "Output Hatch (UV)", 8) - .getStackForm(1L)); - ItemList.Hatch_Output_UHV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_UHV.ID, "hatch.output.tier.09", "Output Hatch (UHV)", 9) - .getStackForm(1L)); - ItemList.Hatch_Output_UEV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_UEV.ID, "hatch.output.tier.10", "Output Hatch (UEV)", 10) - .getStackForm(1L)); - ItemList.Hatch_Output_UIV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_UIV.ID, "hatch.output.tier.11", "Output Hatch (UIV)", 11) - .getStackForm(1L)); - ItemList.Hatch_Output_UMV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_UMV.ID, "hatch.output.tier.12", "Output Hatch (UMV)", 12) - .getStackForm(1L)); - ItemList.Hatch_Output_UXV.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_UXV.ID, "hatch.output.tier.13", "Output Hatch (UXV)", 13) - .getStackForm(1L)); - ItemList.Hatch_Output_MAX.set( - new GT_MetaTileEntity_Hatch_Output(OUTPUT_HATCH_MAX.ID, "hatch.output.tier.14", "Output Hatch (MAX)", 14) - .getStackForm(1L)); - } - - private static void registerQuantumTank() { - ItemList.Quantum_Tank_LV.set( - new GT_MetaTileEntity_QuantumTank(QUANTUM_TANK_LV.ID, "quantum.tank.tier.06", "Quantum Tank I", 6) - .getStackForm(1L)); - ItemList.Quantum_Tank_MV.set( - new GT_MetaTileEntity_QuantumTank(QUANTUM_TANK_MV.ID, "quantum.tank.tier.07", "Quantum Tank II", 7) - .getStackForm(1L)); - ItemList.Quantum_Tank_HV.set( - new GT_MetaTileEntity_QuantumTank(QUANTUM_TANK_HV.ID, "quantum.tank.tier.08", "Quantum Tank III", 8) - .getStackForm(1L)); - ItemList.Quantum_Tank_EV.set( - new GT_MetaTileEntity_QuantumTank(QUANTUM_TANK_EV.ID, "quantum.tank.tier.09", "Quantum Tank IV", 9) - .getStackForm(1L)); - ItemList.Quantum_Tank_IV.set( - new GT_MetaTileEntity_QuantumTank(QUANTUM_TANK_IV.ID, "quantum.tank.tier.10", "Quantum Tank V", 10) - .getStackForm(1L)); - } - - private static void registerQuantumChest() { - ItemList.Quantum_Chest_LV.set( - new GT_MetaTileEntity_QuantumChest(QUANTUM_CHEST_LV.ID, "quantum.chest.tier.06", "Quantum Chest I", 6) - .getStackForm(1L)); - ItemList.Quantum_Chest_MV.set( - new GT_MetaTileEntity_QuantumChest(QUANTUM_CHEST_MV.ID, "quantum.chest.tier.07", "Quantum Chest II", 7) - .getStackForm(1L)); - ItemList.Quantum_Chest_HV.set( - new GT_MetaTileEntity_QuantumChest(QUANTUM_CHEST_HV.ID, "quantum.chest.tier.08", "Quantum Chest III", 8) - .getStackForm(1L)); - ItemList.Quantum_Chest_EV.set( - new GT_MetaTileEntity_QuantumChest(QUANTUM_CHEST_EV.ID, "quantum.chest.tier.09", "Quantum Chest IV", 9) - .getStackForm(1L)); - ItemList.Quantum_Chest_IV.set( - new GT_MetaTileEntity_QuantumChest(QUANTUM_CHEST_IV.ID, "quantum.chest.tier.10", "Quantum Chest V", 10) - .getStackForm(1L)); - } - - private static void registerSuperTank() { - ItemList.Super_Tank_LV.set( - new GT_MetaTileEntity_SuperTank(SUPER_TANK_LV.ID, "super.tank.tier.01", "Super Tank I", 1) - .getStackForm(1L)); - ItemList.Super_Tank_MV.set( - new GT_MetaTileEntity_SuperTank(SUPER_TANK_MV.ID, "super.tank.tier.02", "Super Tank II", 2) - .getStackForm(1L)); - ItemList.Super_Tank_HV.set( - new GT_MetaTileEntity_SuperTank(SUPER_TANK_HV.ID, "super.tank.tier.03", "Super Tank III", 3) - .getStackForm(1L)); - ItemList.Super_Tank_EV.set( - new GT_MetaTileEntity_SuperTank(SUPER_TANK_EV.ID, "super.tank.tier.04", "Super Tank IV", 4) - .getStackForm(1L)); - ItemList.Super_Tank_IV.set( - new GT_MetaTileEntity_SuperTank(SUPER_TANK_IV.ID, "super.tank.tier.05", "Super Tank V", 5) - .getStackForm(1L)); - } - - private static void registerSuperChest() { - ItemList.Super_Chest_LV.set( - new GT_MetaTileEntity_SuperChest(SUPER_CHEST_LV.ID, "super.chest.tier.01", "Super Chest I", 1) - .getStackForm(1L)); - ItemList.Super_Chest_MV.set( - new GT_MetaTileEntity_SuperChest(SUPER_CHEST_MV.ID, "super.chest.tier.02", "Super Chest II", 2) - .getStackForm(1L)); - ItemList.Super_Chest_HV.set( - new GT_MetaTileEntity_SuperChest(SUPER_CHEST_HV.ID, "super.chest.tier.03", "Super Chest III", 3) - .getStackForm(1L)); - ItemList.Super_Chest_EV.set( - new GT_MetaTileEntity_SuperChest(SUPER_CHEST_EV.ID, "super.chest.tier.04", "Super Chest IV", 4) - .getStackForm(1L)); - ItemList.Super_Chest_IV.set( - new GT_MetaTileEntity_SuperChest(SUPER_CHEST_IV.ID, "super.chest.tier.05", "Super Chest V", 5) - .getStackForm(1L)); - } - - private static void registerLongDistancePipe() { - ItemList.Long_Distance_Pipeline_Fluid.set( - new GT_MetaTileEntity_LongDistancePipelineFluid( - LONG_DISTANCE_PIPELINE_FLUID.ID, - "long.distance.pipeline.fluid", - "Long Distance Fluid Pipeline", - 1).getStackForm(1L)); - ItemList.Long_Distance_Pipeline_Item.set( - new GT_MetaTileEntity_LongDistancePipelineItem( - LONG_DISTANCE_PIPELINE_ITEM.ID, - "long.distance.pipeline.item", - "Long Distance Item Pipeline", - 1).getStackForm(1L)); - } - - private static void registerAE2Hatches() { - ItemList.Hatch_Output_Bus_ME.set( - new GT_MetaTileEntity_Hatch_OutputBus_ME(OUTPUT_BUS_ME.ID, "hatch.output_bus.me", "Output Bus (ME)") - .getStackForm(1L)); - ItemList.Hatch_Input_Bus_ME.set( - new GT_MetaTileEntity_Hatch_InputBus_ME( - INPUT_BUS_ME.ID, - false, - "hatch.input_bus.me.basic", - "Stocking Input Bus (ME)").getStackForm(1L)); - ItemList.Hatch_Input_Bus_ME_Advanced.set( - new GT_MetaTileEntity_Hatch_InputBus_ME( - INPUT_BUS_ME_ADVANCED.ID, - true, - "hatch.input_bus.me", - "Advanced Stocking Input Bus (ME)").getStackForm(1L)); - ItemList.Hatch_Input_ME.set( - new GT_MetaTileEntity_Hatch_Input_ME( - INPUT_HATCH_ME.ID, - false, - "hatch.input.me.basic", - "Stocking Input Hatch (ME)").getStackForm(1L)); - ItemList.Hatch_Input_ME_Advanced.set( - new GT_MetaTileEntity_Hatch_Input_ME( - INPUT_HATCH_ME_ADVANCED.ID, - true, - "hatch.input.me", - "Advanced Stocking Input Hatch (ME)").getStackForm(1L)); - ItemList.Hatch_Output_ME.set( - new GT_MetaTileEntity_Hatch_Output_ME(OUTPUT_HATCH_ME.ID, "hatch.output.me", "Output Hatch (ME)") - .getStackForm(1L)); - ItemList.Hatch_CraftingInput_Bus_ME.set( - new GT_MetaTileEntity_Hatch_CraftingInput_ME( - CRAFTING_INPUT_ME.ID, - "hatch.crafting_input.me", - "Crafting Input Buffer (ME)", - true).getStackForm(1L)); - ItemList.Hatch_CraftingInput_Bus_ME_ItemOnly.set( - new GT_MetaTileEntity_Hatch_CraftingInput_ME( - CRAFTING_INPUT_ME_BUS.ID, - "hatch.crafting_input.me.item_only", - "Crafting Input Bus (ME)", - false).getStackForm(1L)); - ItemList.Hatch_CraftingInput_Bus_Slave.set( - new GT_MetaTileEntity_Hatch_CraftingInput_Slave( - CRAFTING_INPUT_SLAVE.ID, - "hatch.crafting_input.proxy", - "Crafting Input Proxy").getStackForm(1L)); - } - - private static void registerMagHatch() { - ItemList.Hatch_Electromagnet.set( - new GT_MetaTileEntity_MagHatch(MAG_HATCH.ID, "hatch.mag_hatch", "Electromagnet Housing").getStackForm(1L)); - } - - private static void registerInputBus() { - ItemList.Hatch_Input_Bus_ULV.set( - new GT_MetaTileEntity_Hatch_InputBus(INPUT_BUS_ULV.ID, "hatch.input_bus.tier.00", "Input Bus (ULV)", 0) - .getStackForm(1L)); - ItemList.Hatch_Input_Bus_LV.set( - new GT_MetaTileEntity_Hatch_InputBus(INPUT_BUS_LV.ID, "hatch.input_bus.tier.01", "Input Bus (LV)", 1) - .getStackForm(1L)); - ItemList.Hatch_Input_Bus_MV.set( - new GT_MetaTileEntity_Hatch_InputBus(INPUT_BUS_MV.ID, "hatch.input_bus.tier.02", "Input Bus (MV)", 2) - .getStackForm(1L)); - ItemList.Hatch_Input_Bus_HV.set( - new GT_MetaTileEntity_Hatch_InputBus(INPUT_BUS_HV.ID, "hatch.input_bus.tier.03", "Input Bus (HV)", 3) - .getStackForm(1L)); - ItemList.Hatch_Input_Bus_EV.set( - new GT_MetaTileEntity_Hatch_InputBus(INPUT_BUS_EV.ID, "hatch.input_bus.tier.04", "Input Bus (EV)", 4) - .getStackForm(1L)); - ItemList.Hatch_Input_Bus_IV.set( - new GT_MetaTileEntity_Hatch_InputBus(INPUT_BUS_IV.ID, "hatch.input_bus.tier.05", "Input Bus (IV)", 5) - .getStackForm(1L)); - ItemList.Hatch_Input_Bus_LuV.set( - new GT_MetaTileEntity_Hatch_InputBus(INPUT_BUS_LuV.ID, "hatch.input_bus.tier.06", "Input Bus (LuV)", 6) - .getStackForm(1L)); - ItemList.Hatch_Input_Bus_ZPM.set( - new GT_MetaTileEntity_Hatch_InputBus(INPUT_BUS_ZPM.ID, "hatch.input_bus.tier.07", "Input Bus (ZPM)", 7) - .getStackForm(1L)); - ItemList.Hatch_Input_Bus_UV.set( - new GT_MetaTileEntity_Hatch_InputBus(INPUT_BUS_UV.ID, "hatch.input_bus.tier.08", "Input Bus (UV)", 8) - .getStackForm(1L)); - ItemList.Hatch_Input_Bus_MAX.set( - new GT_MetaTileEntity_Hatch_InputBus(INPUT_BUS_UHV.ID, "hatch.input_bus.tier.09", "Input Bus (UHV)", 9) - .getStackForm(1L)); - } - - private static void registerOutputBus() { - ItemList.Hatch_Output_Bus_ULV.set( - new GT_MetaTileEntity_Hatch_OutputBus(OUTPUT_BUS_ULV.ID, "hatch.output_bus.tier.00", "Output Bus (ULV)", 0) - .getStackForm(1L)); - ItemList.Hatch_Output_Bus_LV.set( - new GT_MetaTileEntity_Hatch_OutputBus(OUTPUT_BUS_LV.ID, "hatch.output_bus.tier.01", "Output Bus (LV)", 1) - .getStackForm(1L)); - ItemList.Hatch_Output_Bus_MV.set( - new GT_MetaTileEntity_Hatch_OutputBus(OUTPUT_BUS_MV.ID, "hatch.output_bus.tier.02", "Output Bus (MV)", 2) - .getStackForm(1L)); - ItemList.Hatch_Output_Bus_HV.set( - new GT_MetaTileEntity_Hatch_OutputBus(OUTPUT_BUS_HV.ID, "hatch.output_bus.tier.03", "Output Bus (HV)", 3) - .getStackForm(1L)); - ItemList.Hatch_Output_Bus_EV.set( - new GT_MetaTileEntity_Hatch_OutputBus(OUTPUT_BUS_EV.ID, "hatch.output_bus.tier.04", "Output Bus (EV)", 4) - .getStackForm(1L)); - ItemList.Hatch_Output_Bus_IV.set( - new GT_MetaTileEntity_Hatch_OutputBus(OUTPUT_BUS_IV.ID, "hatch.output_bus.tier.05", "Output Bus (IV)", 5) - .getStackForm(1L)); - ItemList.Hatch_Output_Bus_LuV.set( - new GT_MetaTileEntity_Hatch_OutputBus(OUTPUT_BUS_LuV.ID, "hatch.output_bus.tier.06", "Output Bus (LuV)", 6) - .getStackForm(1L)); - ItemList.Hatch_Output_Bus_ZPM.set( - new GT_MetaTileEntity_Hatch_OutputBus(OUTPUT_BUS_ZPM.ID, "hatch.output_bus.tier.07", "Output Bus (ZPM)", 7) - .getStackForm(1L)); - ItemList.Hatch_Output_Bus_UV.set( - new GT_MetaTileEntity_Hatch_OutputBus(OUTPUT_BUS_UV.ID, "hatch.output_bus.tier.08", "Output Bus (UV)", 8) - .getStackForm(1L)); - ItemList.Hatch_Output_Bus_MAX.set( - new GT_MetaTileEntity_Hatch_OutputBus(OUTPUT_BUS_UHV.ID, "hatch.output_bus.tier.09", "Output Bus (UHV)", 9) - .getStackForm(1L)); - } - - private static void registerMufflerHatch() { - ItemList.Hatch_Muffler_LV.set( - new GT_MetaTileEntity_Hatch_Muffler(MUFFLER_HATCH_LV.ID, "hatch.muffler.tier.01", "Muffler Hatch (LV)", 1) - .getStackForm(1L)); - ItemList.Hatch_Muffler_MV.set( - new GT_MetaTileEntity_Hatch_Muffler(MUFFLER_HATCH_MV.ID, "hatch.muffler.tier.02", "Muffler Hatch (MV)", 2) - .getStackForm(1L)); - ItemList.Hatch_Muffler_HV.set( - new GT_MetaTileEntity_Hatch_Muffler(MUFFLER_HATCH_HV.ID, "hatch.muffler.tier.03", "Muffler Hatch (HV)", 3) - .getStackForm(1L)); - ItemList.Hatch_Muffler_EV.set( - new GT_MetaTileEntity_Hatch_Muffler(MUFFLER_HATCH_EV.ID, "hatch.muffler.tier.04", "Muffler Hatch (EV)", 4) - .getStackForm(1L)); - ItemList.Hatch_Muffler_IV.set( - new GT_MetaTileEntity_Hatch_Muffler(MUFFLER_HATCH_IV.ID, "hatch.muffler.tier.05", "Muffler Hatch (IV)", 5) - .getStackForm(1L)); - ItemList.Hatch_Muffler_LuV.set( - new GT_MetaTileEntity_Hatch_Muffler(MUFFLER_HATCH_LuV.ID, "hatch.muffler.tier.06", "Muffler Hatch (LuV)", 6) - .getStackForm(1L)); - ItemList.Hatch_Muffler_ZPM.set( - new GT_MetaTileEntity_Hatch_Muffler(MUFFLER_HATCH_ZPM.ID, "hatch.muffler.tier.07", "Muffler Hatch (ZPM)", 7) - .getStackForm(1L)); - ItemList.Hatch_Muffler_UV.set( - new GT_MetaTileEntity_Hatch_Muffler(MUFFLER_HATCH_UV.ID, "hatch.muffler.tier.08", "Muffler Hatch (UV)", 8) - .getStackForm(1L)); - ItemList.Hatch_Muffler_MAX.set( - new GT_MetaTileEntity_Hatch_Muffler(MUFFLER_HATCH_UHV.ID, "hatch.muffler.tier.09", "Muffler Hatch (UHV)", 9) - .getStackForm(1L)); - } - - private static void registerBoiler() { - ItemList.Machine_Bronze_Boiler.set( - new GT_MetaTileEntity_Boiler_Bronze(SMALL_COAL_BOILER.ID, "boiler.bronze", "Small Coal Boiler") - .getStackForm(1L)); - ItemList.Machine_Steel_Boiler.set( - new GT_MetaTileEntity_Boiler_Steel( - HIGH_PRESSURE_COAL_BOILER.ID, - "boiler.steel", - "High Pressure Coal Boiler").getStackForm(1L)); - ItemList.Machine_Steel_Boiler_Lava.set( - new GT_MetaTileEntity_Boiler_Lava(HIGH_PRESSURE_LAVA_BOILER.ID, "boiler.lava", "High Pressure Lava Boiler") - .getStackForm(1L)); - ItemList.Machine_Bronze_Boiler_Solar.set( - new GT_MetaTileEntity_Boiler_Solar(SIMPLE_SOLAR_BOILER.ID, "boiler.solar", "Simple Solar Boiler") - .getStackForm(1L)); - ItemList.Machine_HP_Solar.set( - new GT_MetaTileEntity_Boiler_Solar_Steel( - HIGH_PRESSURE_SOLAR_BOILER.ID, - "boiler.steel.solar", - "High Pressure Solar Boiler").getStackForm(1L)); - } - - private static void registerBatteryBuffer1x1() { - ItemList.Battery_Buffer_1by1_ULV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_ULV.ID, - "batterybuffer.01.tier.00", - "Ultra Low Voltage Battery Buffer", - 0, - "", - 1).getStackForm(1L)); - ItemList.Battery_Buffer_1by1_LV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_LV.ID, - "batterybuffer.01.tier.01", - "Low Voltage Battery Buffer", - 1, - "", - 1).getStackForm(1L)); - ItemList.Battery_Buffer_1by1_MV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_MV.ID, - "batterybuffer.01.tier.02", - "Medium Voltage Battery Buffer", - 2, - "", - 1).getStackForm(1L)); - ItemList.Battery_Buffer_1by1_HV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_HV.ID, - "batterybuffer.01.tier.03", - "High Voltage Battery Buffer", - 3, - "", - 1).getStackForm(1L)); - ItemList.Battery_Buffer_1by1_EV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_EV.ID, - "batterybuffer.01.tier.04", - "Extreme Voltage Battery Buffer", - 4, - "", - 1).getStackForm(1L)); - ItemList.Battery_Buffer_1by1_IV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_IV.ID, - "batterybuffer.01.tier.05", - "Insane Voltage Battery Buffer", - 5, - "", - 1).getStackForm(1L)); - ItemList.Battery_Buffer_1by1_LuV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_LuV.ID, - "batterybuffer.01.tier.06", - "Ludicrous Voltage Battery Buffer", - 6, - "", - 1).getStackForm(1L)); - ItemList.Battery_Buffer_1by1_ZPM.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_ZPM.ID, - "batterybuffer.01.tier.07", - "ZPM Voltage Battery Buffer", - 7, - "", - 1).getStackForm(1L)); - ItemList.Battery_Buffer_1by1_UV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_UV.ID, - "batterybuffer.01.tier.08", - "Ultimate Voltage Battery Buffer", - 8, - "", - 1).getStackForm(1L)); - ItemList.Battery_Buffer_1by1_UHV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_UHV.ID, - "batterybuffer.01.tier.09", - "Highly Ultimate Voltage Battery Buffer", - 9, - "", - 1).getStackForm(1L)); - - ItemList.Battery_Buffer_1by1_UEV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_UEV.ID, - "batterybuffer.01.tier.10", - "Extremely Ultimate Battery Buffer", - 10, - "", - 1).getStackForm(1L)); - - ItemList.Battery_Buffer_1by1_UIV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_UIV.ID, - "batterybuffer.01.tier.11", - "Insanely Ultimate Battery Buffer", - 11, - "", - 1).getStackForm(1L)); - - ItemList.Battery_Buffer_1by1_UMV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_UMV.ID, - "batterybuffer.01.tier.12", - "Mega Ultimate Battery Buffer", - 12, - "", - 1).getStackForm(1L)); - - ItemList.Battery_Buffer_1by1_UXV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_UXV.ID, - "batterybuffer.01.tier.13", - "Extended Mega Ultimate Battery Buffer", - 13, - "", - 1).getStackForm(1L)); - - ItemList.Battery_Buffer_1by1_MAXV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_1_BY_1_MAX.ID, - "batterybuffer.01.tier.14", - "Maximum Battery Buffer", - 14, - "", - 1).getStackForm(1L)); - } - - private static void registerBatteryBuffer2x2() { - ItemList.Battery_Buffer_2by2_ULV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_ULV.ID, - "batterybuffer.04.tier.00", - "Ultra Low Voltage Battery Buffer", - 0, - "", - 4).getStackForm(1L)); - ItemList.Battery_Buffer_2by2_LV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_LV.ID, - "batterybuffer.04.tier.01", - "Low Voltage Battery Buffer", - 1, - "", - 4).getStackForm(1L)); - ItemList.Battery_Buffer_2by2_MV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_MV.ID, - "batterybuffer.04.tier.02", - "Medium Voltage Battery Buffer", - 2, - "", - 4).getStackForm(1L)); - ItemList.Battery_Buffer_2by2_HV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_HV.ID, - "batterybuffer.04.tier.03", - "High Voltage Battery Buffer", - 3, - "", - 4).getStackForm(1L)); - ItemList.Battery_Buffer_2by2_EV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_EV.ID, - "batterybuffer.04.tier.04", - "Extreme Voltage Battery Buffer", - 4, - "", - 4).getStackForm(1L)); - ItemList.Battery_Buffer_2by2_IV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_IV.ID, - "batterybuffer.04.tier.05", - "Insane Voltage Battery Buffer", - 5, - "", - 4).getStackForm(1L)); - ItemList.Battery_Buffer_2by2_LuV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_LuV.ID, - "batterybuffer.04.tier.06", - "Ludicrous Voltage Battery Buffer", - 6, - "", - 4).getStackForm(1L)); - ItemList.Battery_Buffer_2by2_ZPM.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_ZPM.ID, - "batterybuffer.04.tier.07", - "ZPM Voltage Battery Buffer", - 7, - "", - 4).getStackForm(1L)); - ItemList.Battery_Buffer_2by2_UV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_UV.ID, - "batterybuffer.04.tier.08", - "Ultimate Voltage Battery Buffer", - 8, - "", - 4).getStackForm(1L)); - ItemList.Battery_Buffer_2by2_UHV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_UHV.ID, - "batterybuffer.04.tier.09", - "Highly Ultimate Voltage Battery Buffer", - 9, - "", - 4).getStackForm(1L)); - - ItemList.Battery_Buffer_2by2_UEV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_UEV.ID, - "batterybuffer.04.tier.10", - "Extremely Ultimate Battery Buffer", - 10, - "", - 4).getStackForm(1L)); - - ItemList.Battery_Buffer_2by2_UIV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_UIV.ID, - "batterybuffer.04.tier.11", - "Insanely Ultimate Battery Buffer", - 11, - "", - 4).getStackForm(1L)); - - ItemList.Battery_Buffer_2by2_UMV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_UMV.ID, - "batterybuffer.04.tier.12", - "Mega Ultimate Battery Buffer", - 12, - "", - 4).getStackForm(1L)); - - ItemList.Battery_Buffer_2by2_UXV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_UXV.ID, - "batterybuffer.04.tier.13", - "Extended Mega Ultimate Battery Buffer", - 13, - "", - 4).getStackForm(1L)); - - ItemList.Battery_Buffer_2by2_MAXV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_2_BY_2_MAX.ID, - "batterybuffer.04.tier.14", - "Maximum Battery Buffer", - 14, - "", - 4).getStackForm(1L)); - } - - private static void registerBatteryBuffer3x3() { - ItemList.Battery_Buffer_3by3_ULV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_ULV.ID, - "batterybuffer.09.tier.00", - "Ultra Low Voltage Battery Buffer", - 0, - "", - 9).getStackForm(1L)); - ItemList.Battery_Buffer_3by3_LV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_LV.ID, - "batterybuffer.09.tier.01", - "Low Voltage Battery Buffer", - 1, - "", - 9).getStackForm(1L)); - ItemList.Battery_Buffer_3by3_MV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_MV.ID, - "batterybuffer.09.tier.02", - "Medium Voltage Battery Buffer", - 2, - "", - 9).getStackForm(1L)); - ItemList.Battery_Buffer_3by3_HV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_HV.ID, - "batterybuffer.09.tier.03", - "High Voltage Battery Buffer", - 3, - "", - 9).getStackForm(1L)); - ItemList.Battery_Buffer_3by3_EV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_EV.ID, - "batterybuffer.09.tier.04", - "Extreme Voltage Battery Buffer", - 4, - "", - 9).getStackForm(1L)); - ItemList.Battery_Buffer_3by3_IV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_IV.ID, - "batterybuffer.09.tier.05", - "Insane Voltage Battery Buffer", - 5, - "", - 9).getStackForm(1L)); - ItemList.Battery_Buffer_3by3_LuV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_LuV.ID, - "batterybuffer.09.tier.06", - "Ludicrous Voltage Battery Buffer", - 6, - "", - 9).getStackForm(1L)); - ItemList.Battery_Buffer_3by3_ZPM.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_ZPM.ID, - "batterybuffer.09.tier.07", - "ZPM Voltage Battery Buffer", - 7, - "", - 9).getStackForm(1L)); - ItemList.Battery_Buffer_3by3_UV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_UV.ID, - "batterybuffer.09.tier.08", - "Ultimate Voltage Battery Buffer", - 8, - "", - 9).getStackForm(1L)); - ItemList.Battery_Buffer_3by3_UHV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_UHV.ID, - "batterybuffer.09.tier.09", - "Highly Ultimate Voltage Battery Buffer", - 9, - "", - 9).getStackForm(1L)); - - ItemList.Battery_Buffer_3by3_UEV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_UEV.ID, - "batterybuffer.09.tier.10", - "Extremely Ultimate Battery Buffer", - 10, - "", - 9).getStackForm(1L)); - - ItemList.Battery_Buffer_3by3_UIV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_UIV.ID, - "batterybuffer.09.tier.11", - "Insanely Ultimate Battery Buffer", - 11, - "", - 9).getStackForm(1L)); - - ItemList.Battery_Buffer_3by3_UMV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_UMV.ID, - "batterybuffer.09.tier.12", - "Mega Ultimate Battery Buffer", - 12, - "", - 9).getStackForm(1L)); - - ItemList.Battery_Buffer_3by3_UXV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_UXV.ID, - "batterybuffer.09.tier.13", - "Extended Mega Ultimate Battery Buffer", - 13, - "", - 9).getStackForm(1L)); - - ItemList.Battery_Buffer_3by3_MAXV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_3_BY_3_MAX.ID, - "batterybuffer.09.tier.14", - "Maximum Battery Buffer", - 14, - "", - 9).getStackForm(1L)); - } - - private static void registerBatteryBuffer4x4() { - ItemList.Battery_Buffer_4by4_ULV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_ULV.ID, - "batterybuffer.16.tier.00", - "Ultra Low Voltage Battery Buffer", - 0, - "", - 16).getStackForm(1L)); - ItemList.Battery_Buffer_4by4_LV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_LV.ID, - "batterybuffer.16.tier.01", - "Low Voltage Battery Buffer", - 1, - "", - 16).getStackForm(1L)); - ItemList.Battery_Buffer_4by4_MV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_MV.ID, - "batterybuffer.16.tier.02", - "Medium Voltage Battery Buffer", - 2, - "", - 16).getStackForm(1L)); - ItemList.Battery_Buffer_4by4_HV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_HV.ID, - "batterybuffer.16.tier.03", - "High Voltage Battery Buffer", - 3, - "", - 16).getStackForm(1L)); - ItemList.Battery_Buffer_4by4_EV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_EV.ID, - "batterybuffer.16.tier.04", - "Extreme Voltage Battery Buffer", - 4, - "", - 16).getStackForm(1L)); - ItemList.Battery_Buffer_4by4_IV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_IV.ID, - "batterybuffer.16.tier.05", - "Insane Voltage Battery Buffer", - 5, - "", - 16).getStackForm(1L)); - ItemList.Battery_Buffer_4by4_LuV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_LuV.ID, - "batterybuffer.16.tier.06", - "Ludicrous Voltage Battery Buffer", - 6, - "", - 16).getStackForm(1L)); - ItemList.Battery_Buffer_4by4_ZPM.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_ZPM.ID, - "batterybuffer.16.tier.07", - "ZPM Voltage Battery Buffer", - 7, - "", - 16).getStackForm(1L)); - ItemList.Battery_Buffer_4by4_UV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_UV.ID, - "batterybuffer.16.tier.08", - "Ultimate Voltage Battery Buffer", - 8, - "", - 16).getStackForm(1L)); - ItemList.Battery_Buffer_4by4_UHV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_UHV.ID, - "batterybuffer.16.tier.09", - "Highly Ultimate Voltage Battery Buffer", - 9, - "", - 16).getStackForm(1L)); - ItemList.Battery_Buffer_4by4_UEV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_UEV.ID, - "batterybuffer.16.tier.10", - "Extremely Ultimate Battery Buffer", - 10, - "", - 16).getStackForm(1L)); - - ItemList.Battery_Buffer_4by4_UIV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_UIV.ID, - "batterybuffer.16.tier.11", - "Insanely Ultimate Battery Buffer", - 11, - "", - 16).getStackForm(1L)); - - ItemList.Battery_Buffer_4by4_UMV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_UMV.ID, - "batterybuffer.16.tier.12", - "Mega Ultimate Battery Buffer", - 12, - "", - 16).getStackForm(1L)); - - ItemList.Battery_Buffer_4by4_UXV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_UXV.ID, - "batterybuffer.16.tier.13", - "Extended Mega Ultimate Battery Buffer", - 13, - "", - 16).getStackForm(1L)); - - ItemList.Battery_Buffer_4by4_MAXV.set( - new GT_MetaTileEntity_BasicBatteryBuffer( - BATTERY_BUFFER_4_BY_4_MAX.ID, - "batterybuffer.16.tier.14", - "Maximum Battery Buffer", - 14, - "", - 16).getStackForm(1L)); - } - - private static void registerCharger4x4() { - ItemList.Battery_Charger_4by4_ULV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_BY_4_ULV.ID, - "batterycharger.16.tier.00", - "Ultra Low Voltage Battery Charger", - 0, - "Each battery gives 8A in/4A out (min 4A/2A)", - 4).getStackForm(1L)); - ItemList.Battery_Charger_4by4_LV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_BY_4_LV.ID, - "batterycharger.16.tier.01", - "Low Voltage Battery Charger", - 1, - "Each battery gives 8A in/4A out (min 4A/2A)", - 4).getStackForm(1L)); - ItemList.Battery_Charger_4by4_MV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_BY_4_MV.ID, - "batterycharger.16.tier.02", - "Medium Voltage Battery Charger", - 2, - "Each battery gives 8A in/4A out (min 4A/2A)", - 4).getStackForm(1L)); - ItemList.Battery_Charger_4by4_HV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_BY_4_HV.ID, - "batterycharger.16.tier.03", - "High Voltage Battery Charger", - 3, - "Each battery gives 8A in/4A out (min 4A/2A)", - 4).getStackForm(1L)); - ItemList.Battery_Charger_4by4_EV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_BY_4_EV.ID, - "batterycharger.16.tier.04", - "Extreme Voltage Battery Charger", - 4, - "Each battery gives 8A in/4A out (min 4A/2A)", - 4).getStackForm(1L)); - ItemList.Battery_Charger_4by4_IV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_BY_4_IV.ID, - "batterycharger.16.tier.05", - "Insane Voltage Battery Charger", - 5, - "Each battery gives 8A in/4A out (min 4A/2A)", - 4).getStackForm(1L)); - ItemList.Battery_Charger_4by4_LuV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_BY_4_LuV.ID, - "batterycharger.16.tier.06", - "Ludicrous Voltage Battery Charger", - 6, - "Each battery gives 8A in/4A out (min 4A/2A)", - 4).getStackForm(1L)); - ItemList.Battery_Charger_4by4_ZPM.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_BY_4_ZPM.ID, - "batterycharger.16.tier.07", - "ZPM Voltage Battery Charger", - 7, - "Each battery gives 8A in/4A out (min 4A/2A)", - 4).getStackForm(1L)); - ItemList.Battery_Charger_4by4_UV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_BY_4_UV.ID, - "batterycharger.16.tier.08", - "Ultimate Voltage Battery Charger", - 8, - "Each battery gives 8A in/4A out (min 4A/2A)", - 4).getStackForm(1L)); - ItemList.Battery_Charger_4by4_UHV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_BY_4_UHV.ID, - "batterycharger.16.tier.09", - "Highly Ultimate Voltage Battery Charger", - 9, - "Each battery gives 8A in/4A out (min 4A/2A)", - 4).getStackForm(1L)); - - ItemList.Battery_Charger_4by4_UEV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_4_UEV.ID, - "batterycharger.16.tier.10", - "Extremely Ultimate Battery Charger", - 10, - "", - 4).getStackForm(1L)); - - ItemList.Battery_Charger_4by4_UIV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_4_UIV.ID, - "batterycharger.16.tier.11", - "Insanely Ultimate Battery Charger", - 11, - "", - 4).getStackForm(1L)); - - ItemList.Battery_Charger_4by4_UMV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_4_UMV.ID, - "batterycharger.16.tier.12", - "Mega Ultimate Battery Charger", - 12, - "", - 4).getStackForm(1L)); - - ItemList.Battery_Charger_4by4_UXV.set( - new GT_MetaTileEntity_Charger( - BATTERY_CHARGER_4_4_UXV.ID, - "batterycharger.16.tier.13", - "Extended Mega Ultimate Battery Charger", - 13, - "", - 4).getStackForm(1L)); - } - - private void registerCircuitAssembler() { - ItemList.Machine_LV_CircuitAssembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_LV.ID, - "basicmachine.circuitassembler.tier.01", - "Basic Circuit Assembler", - 1, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - RecipeMaps.circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.Machine_MV_CircuitAssembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_MV.ID, - "basicmachine.circuitassembler.tier.02", - "Advanced Circuit Assembler", - 2, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - RecipeMaps.circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.Machine_HV_CircuitAssembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_HV.ID, - "basicmachine.circuitassembler.tier.03", - "Advanced Circuit Assembler II", - 3, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - RecipeMaps.circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.Machine_EV_CircuitAssembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_EV.ID, - "basicmachine.circuitassembler.tier.04", - "Advanced Circuit Assembler III", - 4, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - RecipeMaps.circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.Machine_IV_CircuitAssembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_IV.ID, - "basicmachine.circuitassembler.tier.05", - "Advanced Circuit Assembler IV", - 5, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - RecipeMaps.circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.Machine_LuV_CircuitAssembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_LuV.ID, - "basicmachine.circuitassembler.tier.06", - "Advanced Circuit Assembler V", - 6, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - RecipeMaps.circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.Machine_ZPM_CircuitAssembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_ZPM.ID, - "basicmachine.circuitassembler.tier.07", - "Advanced Circuit Assembler VI", - 7, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - RecipeMaps.circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.Machine_UV_CircuitAssembler.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_UV.ID, - "basicmachine.circuitassembler.tier.08", - "Advanced Circuit Assembler VII", - 8, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - RecipeMaps.circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.CircuitAssemblerUHV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_UHV.ID, - "basicmachine.circuitassembler.tier.09", - "Ultimate Circuit Assembling Machine", - 9, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.CircuitAssemblerUEV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_UEV.ID, - "basicmachine.circuitassembler.tier.10", - "Ultimate Circuit Assembling Machine II", - 10, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.CircuitAssemblerUIV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_UIV.ID, - "basicmachine.circuitassembler.tier.11", - "Ultimate Circuit Assembling Machine III", - 11, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.CircuitAssemblerUMV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_UMV.ID, - "basicmachine.circuitassembler.tier.12", - "Ultimate Circuit Assembling Machine IV", - 12, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.CircuitAssemblerUXV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_UXV.ID, - "basicmachine.circuitassembler.tier.13", - "Ultimate Circuit Assembling Machine V", - 13, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - - ItemList.CircuitAssemblerMAX.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - CIRCUIT_ASSEMBLER_MAX.ID, - "basicmachine.circuitassembler.tier.14", - "MAX Circuit Assembling Machine", - 14, - MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), - circuitAssemblerRecipes, - 6, - 1, - true, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.NONE, - "CIRCUITASSEMBLER", - null).getStackForm(1L)); - } - - private void registerWetTransformer() { - ItemList.WetTransformer_LV_ULV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_LV_ULV.ID, - "wettransformer.tier.00", - "Ultra Low Voltage Power Transformer", - 0, - "LV -> ULV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_MV_LV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_MV_LV.ID, - "wetransformer.tier.01", - "Low Voltage Power Transformer", - 1, - "MV -> LV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_HV_MV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_HV_MV.ID, - "wettransformer.tier.02", - "Medium Voltage Power Transformer", - 2, - "HV -> MV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_EV_HV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_EV_HV.ID, - "wettransformer.tier.03", - "High Voltage Power Transformer", - 3, - "EV -> HV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_IV_EV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_IV_EV.ID, - "wettransformer.tier.04", - "Extreme Power Transformer", - 4, - "IV -> EV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_LuV_IV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_LuV_IV.ID, - "wettransformer.tier.05", - "Insane Power Transformer", - 5, - "LuV -> IV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_ZPM_LuV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_ZPM_LuV.ID, - "wettransformer.tier.06", - "Ludicrous Power Transformer", - 6, - "ZPM -> LuV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_UV_ZPM.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_UV_ZPM.ID, - "wettransformer.tier.07", - "ZPM Voltage Power Transformer", - 7, - "UV -> ZPM (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_UHV_UV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_UHV_UV.ID, - "wettransformer.tier.08", - "Ultimate Power Transformer", - 8, - "UHV -> UV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_UEV_UHV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_UEV_UHV.ID, - "wettransformer.tier.09", - "Highly Ultimate Power Transformer", - 9, - "UEV -> UHV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_UIV_UEV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_UIV_UEV.ID, - "wettransformer.tier.10", - "Extremely Ultimate Power Transformer", - 10, - "UIV -> UEV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_UMV_UIV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_UMV_UIV.ID, - "wettransformer.tier.11", - "Insanely Ultimate Power Transformer", - 11, - "UMV -> UIV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_UXV_UMV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_UXV_UMV.ID, - "wettransformer.tier.12", - "Mega Ultimate Power Transformer", - 12, - "UXV -> UMV (Use Soft Mallet to invert)").getStackForm(1L)); - - ItemList.WetTransformer_MAX_UXV.set( - new GT_MetaTileEntity_WetTransformer( - WET_TRANSFORMER_MAX_UXV.ID, - "wettransformer.tier.13", - "Extended Mega Ultimate Power Transformer", - 13, - "MAX -> UXV (Use Soft Mallet to invert)").getStackForm(1L)); - } - - private void registerHighAmpTransformer() { - ItemList.Transformer_HA_UEV_UHV.set( - new GregtechMetaTransformerHiAmp( - HIGH_AMP_TRANSFORMER_UEV_UHV.ID, - "transformer.ha.tier.09", - "Highly Ultimate Hi-Amp Transformer", - 9, - "UEV -> UHV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_HA_UIV_UEV.set( - new GregtechMetaTransformerHiAmp( - HIGH_AMP_TRANSFORMER_UIV_UEV.ID, - "transformer.ha.tier.10", - "Extremely Ultimate Hi-Amp Transformer", - 10, - "UIV -> UEV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_HA_UMV_UIV.set( - new GregtechMetaTransformerHiAmp( - HIGH_AMP_TRANSFORMER_UMV_UIV.ID, - "transformer.ha.tier.11", - "Insanely Ultimate Hi-Amp Transformer", - 11, - "UMV -> UIV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_HA_UXV_UMV.set( - new GregtechMetaTransformerHiAmp( - HIGH_AMP_TRANSFORMER_UXV_UMV.ID, - "transformer.ha.tier.12", - "Mega Ultimate Hi-Amp Transformer", - 12, - "UXV -> UMV (Use Soft Mallet to invert)").getStackForm(1L)); - ItemList.Transformer_HA_MAX_UXV.set( - new GregtechMetaTransformerHiAmp( - HIGH_AMP_TRANSFORMER_MAX_UXV.ID, - "transformer.ha.tier.13", - "Extended Mega Ultimate Hi-Amp Transformer", - 13, - "MAX -> UXV (Use Soft Mallet to invert)").getStackForm(1L)); - - } - - private void registerTurboCharger4By4() { - ItemList.Battery_TurboCharger_4by4_ULV.set( - new GT_MetaTileEntity_TurboCharger( - TURBO_CHARGER_ULV.ID, - "batteryturbocharger.16.tier.00", - "Ultra Low Voltage Turbo Charger", - 0, - "64A in /16A out, 120A/item, Disable to force Charge", - 4).getStackForm(1L)); - - ItemList.Battery_TurboCharger_4by4_LV.set( - new GT_MetaTileEntity_TurboCharger( - TURBO_CHARGER_LV.ID, - "batteryturbocharger.16.tier.01", - "Low Voltage Turbo Charger", - 1, - "64A in /16A out, 120A/item, Disable to force Charge", - 4).getStackForm(1L)); - - ItemList.Battery_TurboCharger_4by4_MV.set( - new GT_MetaTileEntity_TurboCharger( - TURBO_CHARGER_MV.ID, - "batteryturbocharger.16.tier.02", - "Medium Voltage Turbo Charger", - 2, - "64A in /16A out, 120A/item, Disable to force Charge", - 4).getStackForm(1L)); - - ItemList.Battery_TurboCharger_4by4_HV.set( - new GT_MetaTileEntity_TurboCharger( - TURBO_CHARGER_HV.ID, - "batteryturbocharger.16.tier.03", - "High Voltage Turbo Charger", - 3, - "64A in /16A out, 120A/item, Disable to force Charge", - 4).getStackForm(1L)); - - ItemList.Battery_TurboCharger_4by4_EV.set( - new GT_MetaTileEntity_TurboCharger( - TURBO_CHARGER_EV.ID, - "batteryturbocharger.16.tier.04", - "Extreme Voltage Turbo Charger", - 4, - "64A in /16A out, 120A/item, Disable to force Charge", - 4).getStackForm(1L)); - - ItemList.Battery_TurboCharger_4by4_IV.set( - new GT_MetaTileEntity_TurboCharger( - TURBO_CHARGER_IV.ID, - "batteryturbocharger.16.tier.05", - "Insane Voltage Turbo Charger", - 5, - "64A in /16A out, 120A/item, Disable to force Charge", - 4).getStackForm(1L)); - - ItemList.Battery_TurboCharger_4by4_LuV.set( - new GT_MetaTileEntity_TurboCharger( - TURBO_CHARGER_LuV.ID, - "batteryturbocharger.16.tier.06", - "Ludicrous Voltage Turbo Charger", - 6, - "64A in /16A out, 120A/item, Disable to force Charge", - 4).getStackForm(1L)); - - ItemList.Battery_TurboCharger_4by4_ZPM.set( - new GT_MetaTileEntity_TurboCharger( - TURBO_CHARGER_ZPM.ID, - "batteryturbocharger.16.tier.07", - "ZPM Voltage Turbo Charger", - 7, - "64A in /16A out, 120A/item, Disable to force Charge", - 4).getStackForm(1L)); - - ItemList.Battery_TurboCharger_4by4_UV.set( - new GT_MetaTileEntity_TurboCharger( - TURBO_CHARGER_UV.ID, - "batteryturbocharger.16.tier.08", - "Ultimate Voltage Turbo Charger", - 8, - "64A in /16A out, 120A/item, Disable to force Charge", - 4).getStackForm(1L)); - - ItemList.Battery_TurboCharger_4by4_UHV.set( - new GT_MetaTileEntity_TurboCharger( - TURBO_CHARGER_UHV.ID, - "batteryturbocharger.16.tier.09", - "Highly Ultimate Voltage Turbo Charger", - 9, - "64A in /16A out, 120A/item, Disable to force Charge", - 4).getStackForm(1L)); - - } - - private static void registerWirelessEnergyHatch() { - ItemList.Wireless_Hatch_Energy_ULV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_ULV.ID, - "hatch.wireless.receiver.tier.00", - "ULV Wireless Energy Hatch", - 0).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_LV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_LV.ID, - "hatch.wireless.receiver.tier.01", - "LV Wireless Energy Hatch", - 1).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_MV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_MV.ID, - "hatch.wireless.receiver.tier.02", - "MV Wireless Energy Hatch", - 2).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_HV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_HV.ID, - "hatch.wireless.receiver.tier.03", - "HV Wireless Energy Hatch", - 3).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_EV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_EV.ID, - "hatch.wireless.receiver.tier.04", - "EV Wireless Energy Hatch", - 4).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_IV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_IV.ID, - "hatch.wireless.receiver.tier.05", - "IV Wireless Energy Hatch", - 5).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_LuV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_LuV.ID, - "hatch.wireless.receiver.tier.06", - "LuV Wireless Energy Hatch", - 6).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_ZPM.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_ZPM.ID, - "hatch.wireless.receiver.tier.07", - "ZPM Wireless Energy Hatch", - 7).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_UV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_UV.ID, - "hatch.wireless.receiver.tier.08", - "UV Wireless Energy Hatch", - 8).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_UHV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_UHV.ID, - "hatch.wireless.receiver.tier.09", - "UHV Wireless Energy Hatch", - 9).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_UEV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_UEV.ID, - "hatch.wireless.receiver.tier.10", - "UEV Wireless Energy Hatch", - 10).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_UIV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_UIV.ID, - "hatch.wireless.receiver.tier.11", - "UIV Wireless Energy Hatch", - 11).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_UMV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_UMV.ID, - "hatch.wireless.receiver.tier.12", - "UMV Wireless Energy Hatch", - 12).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_UXV.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_UXV.ID, - "hatch.wireless.receiver.tier.13", - "UXV Wireless Energy Hatch", - 13).getStackForm(1L)); - ItemList.Wireless_Hatch_Energy_MAX.set( - new GT_MetaTileEntity_Wireless_Hatch( - WIRELESS_HATCH_ENERGY_MAX.ID, - "hatch.wireless.receiver.tier.14", - "MAX Wireless Energy Hatch", - 14).getStackForm(1L)); - } - - private static void registerWirelessDynamoHatch() { - ItemList.Wireless_Dynamo_Energy_ULV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_ULV.ID, - "hatch.wireless.transmitter.tier.00", - "ULV Wireless Energy Dynamo", - 0).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_LV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_LV.ID, - "hatch.wireless.transmitter.tier.01", - "LV Wireless Energy Dynamo", - 1).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_MV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_MV.ID, - "hatch.wireless.transmitter.tier.02", - "MV Wireless Energy Dynamo", - 2).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_HV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_HV.ID, - "hatch.wireless.transmitter.tier.03", - "HV Wireless Energy Dynamo", - 3).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_EV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_EV.ID, - "hatch.wireless.transmitter.tier.04", - "EV Wireless Energy Dynamo", - 4).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_IV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_IV.ID, - "hatch.wireless.transmitter.tier.05", - "IV Wireless Energy Dynamo", - 5).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_LuV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_LuV.ID, - "hatch.wireless.transmitter.tier.06", - "LuV Wireless Energy Dynamo", - 6).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_ZPM.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_ZPM.ID, - "hatch.wireless.transmitter.tier.07", - "ZPM Wireless Energy Dynamo", - 7).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_UV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_UV.ID, - "hatch.wireless.transmitter.tier.08", - "UV Wireless Energy Dynamo", - 8).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_UHV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_UHV.ID, - "hatch.wireless.transmitter.tier.09", - "UHV Wireless Energy Dynamo", - 9).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_UEV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_UEV.ID, - "hatch.wireless.transmitter.tier.10", - "UEV Wireless Energy Dynamo", - 10).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_UIV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_UIV.ID, - "hatch.wireless.transmitter.tier.11", - "UIV Wireless Energy Dynamo", - 11).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_UMV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_UMV.ID, - "hatch.wireless.transmitter.tier.12", - "UMV Wireless Energy Dynamo", - 12).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_UXV.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_UXV.ID, - "hatch.wireless.transmitter.tier.13", - "UXV Wireless Energy Dynamo", - 13).getStackForm(1L)); - ItemList.Wireless_Dynamo_Energy_MAX.set( - new GT_MetaTileEntity_Wireless_Dynamo( - WIRELESS_DYNAMO_ENERGY_HATCH_MAX.ID, - "hatch.wireless.transmitter.tier.14", - "MAX Wireless Energy Dynamo", - 14).getStackForm(1L)); - } - - private static void registerLightningRods() { - ItemList.Machine_HV_LightningRod.set( - new GT_MetaTileEntity_LightningRod( - LIGHTNING_ROD_HV.ID, - "basicgenerator.lightningrod.03", - "Lightning Rod", - 3).getStackForm(1)); - ItemList.Machine_EV_LightningRod.set( - new GT_MetaTileEntity_LightningRod( - LIGHTNING_ROD_EV.ID, - "basicgenerator.lightningrod.04", - "Lightning Rod II", - 4).getStackForm(1)); - ItemList.Machine_IV_LightningRod.set( - new GT_MetaTileEntity_LightningRod( - LIGHTNING_ROD_IV.ID, - "basicgenerator.lightningrod.05", - "Lightning Rod III", - 5).getStackForm(1)); - } - - private static void registerCombustionGenerators() { - ItemList.Generator_Diesel_LV.set( - new GT_MetaTileEntity_DieselGenerator( - COMBUSTION_GENERATOR_LV.ID, - "basicgenerator.diesel.tier.01", - "Basic Combustion Generator", - 1).getStackForm(1L)); - ItemList.Generator_Diesel_MV.set( - new GT_MetaTileEntity_DieselGenerator( - COMBUSTION_GENERATOR_MV.ID, - "basicgenerator.diesel.tier.02", - "Advanced Combustion Generator", - 2).getStackForm(1L)); - ItemList.Generator_Diesel_HV.set( - new GT_MetaTileEntity_DieselGenerator( - COMBUSTION_GENERATOR_HV.ID, - "basicgenerator.diesel.tier.03", - "Turbo Combustion Generator", - 3).getStackForm(1L)); - } - - private static void registerGasTurbines() { - ItemList.Generator_Gas_Turbine_LV.set( - new GT_MetaTileEntity_GasTurbine( - GAS_TURBINE_LV.ID, - "basicgenerator.gasturbine.tier.01", - "Basic Gas Turbine", - 1, - 95).getStackForm(1L)); - ItemList.Generator_Gas_Turbine_MV.set( - new GT_MetaTileEntity_GasTurbine( - GAS_TURBINE_MV.ID, - "basicgenerator.gasturbine.tier.02", - "Advanced Gas Turbine", - 2, - 90).getStackForm(1L)); - ItemList.Generator_Gas_Turbine_HV.set( - new GT_MetaTileEntity_GasTurbine( - GAS_TURBINE_HV.ID, - "basicgenerator.gasturbine.tier.03", - "Turbo Gas Turbine", - 3, - 85).getStackForm(1L)); - ItemList.Generator_Gas_Turbine_EV.set( - new GT_MetaTileEntity_GasTurbine( - GAS_TURBINE_EV.ID, - "basicgenerator.gasturbine.tier.04", - "Turbo Gas Turbine II", - 4, - 60).getStackForm(1L)); - ItemList.Generator_Gas_Turbine_IV.set( - new GT_MetaTileEntity_GasTurbine( - GAS_TURBINE_IV.ID, - "basicgenerator.gasturbine.tier.05", - "Turbo Gas Turbine III", - 5, - 50).getStackForm(1L)); - } - - private static void registerSteamTurbines() { - ItemList.Generator_Steam_Turbine_LV.set( - new GT_MetaTileEntity_SteamTurbine( - STEAM_TURBINE_LV.ID, - "basicgenerator.steamturbine.tier.01", - "Basic Steam Turbine", - 1).getStackForm(1L)); - ItemList.Generator_Steam_Turbine_MV.set( - new GT_MetaTileEntity_SteamTurbine( - STEAM_TURBINE_MV.ID, - "basicgenerator.steamturbine.tier.02", - "Advanced Steam Turbine", - 2).getStackForm(1L)); - ItemList.Generator_Steam_Turbine_HV.set( - new GT_MetaTileEntity_SteamTurbine( - STEAM_TURBINE_HV.ID, - "basicgenerator.steamturbine.tier.03", - "Turbo Steam Turbine", - 3).getStackForm(1L)); - } - - private static void registerNaquadahReactors() { - ItemList.Generator_Naquadah_Mark_I.set( - new GT_MetaTileEntity_NaquadahReactor( - NAQUADAH_REACTOR_EV.ID, - "basicgenerator.naquadah.tier.04", - new String[] { "Requires Enriched Naquadah Bolts" }, - "Naquadah Reactor Mark I", - 4).getStackForm(1L)); - ItemList.Generator_Naquadah_Mark_II.set( - new GT_MetaTileEntity_NaquadahReactor( - NAQUADAH_REACTOR_IV.ID, - "basicgenerator.naquadah.tier.05", - new String[] { "Requires Enriched Naquadah Rods" }, - "Naquadah Reactor Mark II", - 5).getStackForm(1L)); - ItemList.Generator_Naquadah_Mark_III.set( - new GT_MetaTileEntity_NaquadahReactor( - NAQUADAH_REACTOR_LuV.ID, - "basicgenerator.naquadah.tier.06", - new String[] { "Requires Enriched Naquadah Long Rods" }, - "Naquadah Reactor Mark III", - 6).getStackForm(1L)); - ItemList.Generator_Naquadah_Mark_IV.set( - new GT_MetaTileEntity_NaquadahReactor( - NAQUADAH_REACTOR_ZPM.ID, - "basicgenerator.naquadah.tier.07", - new String[] { "Requires Naquadria Bolts" }, - "Naquadah Reactor Mark IV", - 7).getStackForm(1L)); - ItemList.Generator_Naquadah_Mark_V.set( - new GT_MetaTileEntity_NaquadahReactor( - NAQUADAH_REACTOR_UV.ID, - "basicgenerator.naquadah.tier.08", - new String[] { "Requires Naquadria Rods" }, - "Naquadah Reactor Mark V", - 8).getStackForm(1L)); - } - - private static void registerMagicEnergyConverters() { - ItemList.MagicEnergyConverter_LV.set( - new GT_MetaTileEntity_MagicEnergyConverter( - MAGIC_ENERGY_CONVERTER_LV.ID, - "basicgenerator.magicenergyconverter.tier.01", - "Novice Magic Energy Converter", - 1).getStackForm(1L)); - ItemList.MagicEnergyConverter_MV.set( - new GT_MetaTileEntity_MagicEnergyConverter( - MAGIC_ENERGY_CONVERTER_MV.ID, - "basicgenerator.magicenergyconverter.tier.02", - "Adept Magic Energy Converter", - 2).getStackForm(1L)); - ItemList.MagicEnergyConverter_HV.set( - new GT_MetaTileEntity_MagicEnergyConverter( - MAGIC_ENERGY_CONVERTER_HV.ID, - "basicgenerator.magicenergyconverter.tier.03", - "Master Magic Energy Converter", - 3).getStackForm(1L)); - } - - private static void registerMagicEnergyAbsorbers() { - ItemList.MagicEnergyAbsorber_LV.set( - new GT_MetaTileEntity_MagicalEnergyAbsorber( - MAGIC_ENERGY_ABSORBER_LV.ID, - "basicgenerator.magicenergyabsorber.tier.01", - "Novice Magic Energy Absorber", - 1).getStackForm(1L)); - ItemList.MagicEnergyAbsorber_MV.set( - new GT_MetaTileEntity_MagicalEnergyAbsorber( - MAGIC_ENERGY_ABSORBER_MV.ID, - "basicgenerator.magicenergyabsorber.tier.02", - "Adept Magic Energy Absorber", - 2).getStackForm(1L)); - ItemList.MagicEnergyAbsorber_HV.set( - new GT_MetaTileEntity_MagicalEnergyAbsorber( - MAGIC_ENERGY_ABSORBER_HV.ID, - "basicgenerator.magicenergyabsorber.tier.03", - "Master Magic Energy Absorber", - 3).getStackForm(1L)); - ItemList.MagicEnergyAbsorber_EV.set( - new GT_MetaTileEntity_MagicalEnergyAbsorber( - MAGIC_ENERGY_ABSORBER_EV.ID, - "basicgenerator.magicenergyabsorber.tier.04", - "Grandmaster Magic Energy Absorber", - 4).getStackForm(1L)); - } - - private static void registerPlasmaGenerators() { - ItemList.Generator_Plasma_EV.set( - new GT_MetaTileEntity_PlasmaGenerator( - PLASMA_GENERATOR_EV.ID, - "basicgenerator.plasmagenerator.tier.05", - "Plasma Generator Mark I", - 4).getStackForm(1L)); - ItemList.Generator_Plasma_IV.set( - new GT_MetaTileEntity_PlasmaGenerator( - PLASMA_GENERATOR_IV.ID, - "basicgenerator.plasmagenerator.tier.06", - "Plasma Generator Mark II", - 5).getStackForm(1L)); - ItemList.Generator_Plasma_LuV.set( - new GT_MetaTileEntity_PlasmaGenerator( - PLASMA_GENERATOR_LuV.ID, - "basicgenerator.plasmagenerator.tier.07", - "Plasma Generator Mark III", - 6).getStackForm(1L)); - - ItemList.Generator_Plasma_ZPMV.set( - new GT_MetaTileEntity_PlasmaGenerator( - PLASMA_GENERATOR_ZPM.ID, - "basicgenerator.plasmagenerator.tier.08", - "Plasma Generator Mark IV", - 7).getStackForm(1L)); - - ItemList.Generator_Plasma_UV.set( - new GT_MetaTileEntity_PlasmaGenerator( - PLASMA_GENERATOR_UV.ID, - "basicgenerator.plasmagenerator.tier.09", - "Ultimate Pocket Sun", - 8).getStackForm(1L)); - } - - private static void generateWiresAndPipes() { - for (int meta = 0; meta < GregTech_API.sGeneratedMaterials.length; meta++) { - Materials material = GregTech_API.sGeneratedMaterials[meta]; - // This check is separated out because IntelliJ thinks Materials.Wood can be null. - if (material == null) continue; - if ((material.mTypes & 0x2) != 0 || material == Materials.Wood) { - new GT_MetaPipeEntity_Frame( - 4096 + meta, - "GT_Frame_" + material, - (GT_LanguageManager.i18nPlaceholder ? "%material" : material.mDefaultLocalName) - + " Frame Box (TileEntity)", - material); - - // Generate recipes for frame box - GT_Block_FrameBox block = (GT_Block_FrameBox) GregTech_API.sBlockFrames; - GT_OreDictUnificator.registerOre(OrePrefixes.frameGt, material, block.getStackForm(1, meta)); - if (material.getProcessingMaterialTierEU() < TierEU.IV) { - GT_ModHandler.addCraftingRecipe( - block.getStackForm(2, meta), - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "SSS", "SwS", "SSS", 'S', OrePrefixes.stick.get(material) }); - } - - if (!material.contains(SubTag.NO_RECIPES) - && GT_OreDictUnificator.get(OrePrefixes.stick, material, 1) != null) { - // Auto generate frame box recipe in an assembler. - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.stick, material, 4), - GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(block.getStackForm(1, meta)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(calculateRecipeEU(material, 7)) - .addTo(assemblerRecipes); - } - } - } - - makeWires(Materials.RedAlloy, 2000, 0L, 1L, 1L, gregtech.api.enums.GT_Values.V[0], true, false); - - makeWires(Materials.Cobalt, 1200, 2L, 4L, 2L, gregtech.api.enums.GT_Values.V[1], true, false); - makeWires(Materials.Lead, 1220, 2L, 4L, 2L, gregtech.api.enums.GT_Values.V[1], true, false); - makeWires(Materials.Tin, 1240, 1L, 2L, 1L, gregtech.api.enums.GT_Values.V[1], true, false); - - makeWires(Materials.Zinc, 1260, 1L, 2L, 1L, gregtech.api.enums.GT_Values.V[1], true, false); - makeWires(Materials.SolderingAlloy, 1280, 1L, 2L, 1L, gregtech.api.enums.GT_Values.V[1], true, false); - - makeWires(Materials.Iron, 1300, 3L, 6L, 2L, gregtech.api.enums.GT_Values.V[2], true, false); - makeWires(Materials.Nickel, 1320, 3L, 6L, 3L, gregtech.api.enums.GT_Values.V[2], true, false); - makeWires(Materials.Cupronickel, 1340, 3L, 6L, 2L, gregtech.api.enums.GT_Values.V[2], true, false); - makeWires(Materials.Copper, 1360, 2L, 4L, 1L, gregtech.api.enums.GT_Values.V[2], true, false); - makeWires(Materials.AnnealedCopper, 1380, 2L, 4L, 1L, gregtech.api.enums.GT_Values.V[2], true, false); - - makeWires(Materials.Kanthal, 1400, 3L, 6L, 4L, gregtech.api.enums.GT_Values.V[3], true, false); - makeWires(Materials.Gold, 1420, 2L, 4L, 3L, gregtech.api.enums.GT_Values.V[3], true, false); - makeWires(Materials.Electrum, 1440, 2L, 4L, 2L, gregtech.api.enums.GT_Values.V[3], true, false); - makeWires(Materials.Silver, 1460, 1L, 2L, 1L, gregtech.api.enums.GT_Values.V[3], true, false); - makeWires(Materials.BlueAlloy, 1480, 1L, 2L, 2L, gregtech.api.enums.GT_Values.V[3], true, false); - - makeWires(Materials.Nichrome, 1500, 4L, 8L, 3L, gregtech.api.enums.GT_Values.V[4], true, false); - makeWires(Materials.Steel, 1520, 2L, 4L, 2L, gregtech.api.enums.GT_Values.V[4], true, false); - makeWires(Materials.BlackSteel, 1540, 2L, 4L, 3L, gregtech.api.enums.GT_Values.V[4], true, false); - makeWires(Materials.Titanium, 1560, 2L, 4L, 4L, gregtech.api.enums.GT_Values.V[4], true, false); - makeWires(Materials.Aluminium, 1580, 1L, 2L, 1L, gregtech.api.enums.GT_Values.V[4], true, false); - - makeWires(Materials.Graphene, 1600, 1L, 2L, 1L, gregtech.api.enums.GT_Values.V[5], false, true); - makeWires(Materials.Osmium, 1620, 2L, 4L, 4L, gregtech.api.enums.GT_Values.V[5], true, false); - makeWires(Materials.Platinum, 1640, 1L, 2L, 2L, gregtech.api.enums.GT_Values.V[5], true, false); - makeWires(Materials.TungstenSteel, 1660, 2L, 4L, 3L, gregtech.api.enums.GT_Values.V[5], true, false); - makeWires(Materials.Tungsten, 1680, 2L, 4L, 2L, gregtech.api.enums.GT_Values.V[5], true, false); - - makeWires(Materials.HSSG, 1700, 2L, 4L, 4L, gregtech.api.enums.GT_Values.V[6], true, false); - makeWires(Materials.NiobiumTitanium, 1720, 2L, 4L, 4L, gregtech.api.enums.GT_Values.V[6], true, false); - makeWires(Materials.VanadiumGallium, 1740, 2L, 4L, 4L, gregtech.api.enums.GT_Values.V[6], true, false); - makeWires(Materials.YttriumBariumCuprate, 1760, 4L, 8L, 4L, gregtech.api.enums.GT_Values.V[6], true, false); - - makeWires(Materials.Naquadah, 1780, 2L, 4L, 2L, gregtech.api.enums.GT_Values.V[7], true, false); - - makeWires(Materials.NaquadahAlloy, 1800, 4L, 8L, 2L, gregtech.api.enums.GT_Values.V[8], true, false); - makeWires(Materials.Duranium, 1820, 8L, 16L, 1L, gregtech.api.enums.GT_Values.V[8], true, false); - makeWires(Materials.TPV, 1840, 1L, 2L, 6L, gregtech.api.enums.GT_Values.V[4], true, false); - - // Superconductor base. - makeWires( - Materials.Pentacadmiummagnesiumhexaoxid, - 2200, - 1L, - 2L, - 1L, - gregtech.api.enums.GT_Values.V[2], - false, - false); - makeWires( - Materials.Titaniumonabariumdecacoppereikosaoxid, - 2220, - 1L, - 8L, - 2L, - gregtech.api.enums.GT_Values.V[3], - false, - false); - makeWires(Materials.Uraniumtriplatinid, 2240, 1L, 16L, 3L, gregtech.api.enums.GT_Values.V[4], false, false); - makeWires(Materials.Vanadiumtriindinid, 2260, 1L, 64L, 4L, gregtech.api.enums.GT_Values.V[5], false, false); - makeWires( - Materials.Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid, - 2280, - 2L, - 256L, - 6L, - gregtech.api.enums.GT_Values.V[6], - false, - false); - makeWires( - Materials.Tetranaquadahdiindiumhexaplatiumosminid, - 2300, - 2L, - 1024L, - 8L, - gregtech.api.enums.GT_Values.V[7], - false, - false); - makeWires( - Materials.Longasssuperconductornameforuvwire, - 2500, - 2L, - 4096L, - 12L, - gregtech.api.enums.GT_Values.V[8], - false, - false); - makeWires( - Materials.Longasssuperconductornameforuhvwire, - 2520, - 2L, - 16384L, - 16L, - gregtech.api.enums.GT_Values.V[9], - false, - false); - makeWires( - Materials.SuperconductorUEVBase, - 2032, - 2L, - 65536L, - 24L, - gregtech.api.enums.GT_Values.V[10], - false, - false); - makeWires( - Materials.SuperconductorUIVBase, - 2052, - 2L, - 262144L, - 32L, - gregtech.api.enums.GT_Values.V[11], - false, - false); - makeWires(Materials.SuperconductorUMVBase, 2072, 2L, 1048576L, 32L, GT_Values.V[12], false, false); - - // Actual superconductors. - makeWires(Materials.SuperconductorMV, 2320, 0L, 0L, 4L, gregtech.api.enums.GT_Values.V[2], false, true); - makeWires(Materials.SuperconductorHV, 2340, 0L, 0L, 6L, gregtech.api.enums.GT_Values.V[3], false, true); - makeWires(Materials.SuperconductorEV, 2360, 0L, 0L, 8L, gregtech.api.enums.GT_Values.V[4], false, true); - makeWires(Materials.SuperconductorIV, 2380, 0L, 0L, 12L, gregtech.api.enums.GT_Values.V[5], false, true); - makeWires(Materials.SuperconductorLuV, 2400, 0L, 0L, 16L, gregtech.api.enums.GT_Values.V[6], false, true); - makeWires(Materials.SuperconductorZPM, 2420, 0L, 0L, 24L, gregtech.api.enums.GT_Values.V[7], false, true); - makeWires(Materials.SuperconductorUV, 2440, 0L, 0L, 32L, gregtech.api.enums.GT_Values.V[8], false, true); - makeWires(Materials.SuperconductorUHV, 2020, 0L, 0L, 48L, gregtech.api.enums.GT_Values.V[9], false, true); - makeWires(Materials.SuperconductorUEV, 2026, 0L, 0L, 64L, gregtech.api.enums.GT_Values.V[10], false, true); - makeWires(Materials.SuperconductorUIV, 2081, 0L, 0L, 64L, gregtech.api.enums.GT_Values.V[11], false, true); - makeWires(Materials.SuperconductorUMV, 2089, 0L, 0L, 64L, gregtech.api.enums.GT_Values.V[12], false, true); - - makeWires(Materials.Ichorium, 2600, 2L, 2L, 12L, GT_Values.V[9], false, true); - makeWires(MaterialsUEVplus.SpaceTime, 2606, 0L, 0L, 1_000_000L, GT_Values.V[14], false, true); - - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeSmall.get(Materials.Wood), - new GT_MetaPipeEntity_Fluid( - 5101, - "GT_Pipe_Wood_Small", - "Small Wooden Fluid Pipe", - 0.375F, - Materials.Wood, - 10, - 350, - false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeMedium.get(Materials.Wood), - new GT_MetaPipeEntity_Fluid(5102, "GT_Pipe_Wood", "Wooden Fluid Pipe", 0.5F, Materials.Wood, 30, 350, false) - .getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeLarge.get(Materials.Wood), - new GT_MetaPipeEntity_Fluid( - 5103, - "GT_Pipe_Wood_Large", - "Large Wooden Fluid Pipe", - 0.75F, - Materials.Wood, - 60, - 350, - false).getStackForm(1L)); - - generateFluidPipes(Materials.Copper, Materials.Copper.mName, 5110, 20, 1000, true); - generateFluidMultiPipes(Materials.Copper, Materials.Copper.mName, 5115, 20, 1000, true); - generateFluidPipes(Materials.Bronze, Materials.Bronze.mName, 5120, 120, 2000, true); - generateFluidMultiPipes(Materials.Bronze, Materials.Bronze.mName, 5125, 120, 2000, true); - generateFluidPipes(Materials.Steel, Materials.Steel.mName, 5130, 240, 2500, true); - generateFluidMultiPipes(Materials.Steel, Materials.Steel.mName, 5135, 240, 2500, true); - generateFluidPipes(Materials.StainlessSteel, Materials.StainlessSteel.mName, 5140, 360, 3000, true); - generateFluidMultiPipes(Materials.StainlessSteel, Materials.StainlessSteel.mName, 5145, 360, 3000, true); - generateFluidPipes(Materials.Titanium, Materials.Titanium.mName, 5150, 480, 5000, true); - generateFluidMultiPipes(Materials.Titanium, Materials.Titanium.mName, 5155, 480, 5000, true); - generateFluidPipes(Materials.TungstenSteel, Materials.TungstenSteel.mName, 5160, 600, 7500, true); - generateFluidMultiPipes(Materials.TungstenSteel, Materials.TungstenSteel.mName, 5270, 600, 7500, true); - generateFluidPipes( - Materials.Polybenzimidazole, - Materials.Polybenzimidazole.mName, - "PBI", - 5280, - 600, - 1000, - true); - generateFluidMultiPipes( - Materials.Polybenzimidazole, - Materials.Polybenzimidazole.mName, - "PBI", - 5290, - 600, - 1000, - true); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeSmall.get(Materials.Ultimate), - new GT_MetaPipeEntity_Fluid( - 5165, - "GT_Pipe_HighPressure_Small", - "Small High Pressure Fluid Pipe", - 0.375F, - Materials.Redstone, - 4800, - 1500, - true).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeMedium.get(Materials.Ultimate), - new GT_MetaPipeEntity_Fluid( - 5166, - "GT_Pipe_HighPressure", - "High Pressure Fluid Pipe", - 0.5F, - Materials.Redstone, - 7200, - 1500, - true).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeLarge.get(Materials.Ultimate), - new GT_MetaPipeEntity_Fluid( - 5167, - "GT_Pipe_HighPressure_Large", - "Large High Pressure Fluid Pipe", - 0.75F, - Materials.Redstone, - 9600, - 1500, - true).getStackForm(1L)); - generateFluidPipes(Materials.Plastic, Materials.Plastic.mName, "Plastic", 5170, 360, 350, true); - generateFluidMultiPipes(Materials.Plastic, Materials.Plastic.mName, "Plastic", 5175, 360, 350, true); - generateFluidPipes(Materials.NiobiumTitanium, Materials.NiobiumTitanium.mName, 5180, 900, 2900, true); - generateFluidMultiPipes(Materials.NiobiumTitanium, Materials.NiobiumTitanium.mName, 5185, 900, 2900, true); - generateFluidPipes(Materials.Enderium, Materials.Enderium.mName, 5190, 1800, 15000, true); - generateFluidMultiPipes(Materials.Enderium, Materials.Enderium.mName, 5195, 1800, 15000, true); - generateFluidPipes(Materials.Naquadah, Materials.Naquadah.mName, 5200, 9000, 19000, true); - generateFluidMultiPipes(Materials.Naquadah, Materials.Naquadah.mName, 5205, 9000, 19000, true); - generateFluidPipes(Materials.Neutronium, Materials.Neutronium.mName, 5210, 16800, 1000000, true); - generateFluidMultiPipes(Materials.Neutronium, Materials.Neutronium.mName, 5215, 16800, 1000000, true); - generateFluidPipes(Materials.NetherStar, Materials.NetherStar.mName, 5220, 19200, 1000000, true); - generateFluidMultiPipes(Materials.NetherStar, Materials.NetherStar.mName, 5225, 19200, 1000000, true); - generateFluidPipes(Materials.MysteriousCrystal, Materials.MysteriousCrystal.mName, 5230, 24000, 1000000, true); - generateFluidMultiPipes( - Materials.MysteriousCrystal, - Materials.MysteriousCrystal.mName, - 5235, - 24000, - 1000000, - true); - generateFluidPipes(Materials.DraconiumAwakened, Materials.DraconiumAwakened.mName, 5240, 45000, 10000000, true); - generateFluidMultiPipes( - Materials.DraconiumAwakened, - Materials.DraconiumAwakened.mName, - 5245, - 45000, - 10000000, - true); - generateFluidPipes(Materials.Infinity, Materials.Infinity.mName, 5250, 60000, 10000000, true); - generateFluidMultiPipes(Materials.Infinity, Materials.Infinity.mName, 5255, 60000, 10000000, true); - generateFluidPipes(Materials.WroughtIron, Materials.WroughtIron.mName, 5260, 180, 2250, true); - generateFluidMultiPipes(Materials.WroughtIron, Materials.WroughtIron.mName, 5265, 180, 2250, true); - generateFluidPipes( - Materials.Polytetrafluoroethylene, - Materials.Polytetrafluoroethylene.mName, - "PTFE", - 5680, - 480, - 600, - true); - generateFluidMultiPipes( - Materials.Polytetrafluoroethylene, - Materials.Polytetrafluoroethylene.mName, - "PTFE", - 5685, - 480, - 600, - true); - generateFluidPipes( - MaterialsUEVplus.SpaceTime, - MaterialsUEVplus.SpaceTime.mName, - 5300, - 250000, - 2147483647, - true); - generateFluidMultiPipes( - MaterialsUEVplus.SpaceTime, - MaterialsUEVplus.SpaceTime.mName, - 5305, - 250000, - 2147483647, - true); - generateFluidPipes( - MaterialsUEVplus.TranscendentMetal, - MaterialsUEVplus.TranscendentMetal.mName, - 5310, - 220000, - 2147483647, - true); - generateFluidMultiPipes( - MaterialsUEVplus.TranscendentMetal, - MaterialsUEVplus.TranscendentMetal.mName, - 5315, - 220000, - 2147483647, - true); - - generateItemPipes(Materials.Brass, Materials.Brass.mName, 5602, 1); - generateItemPipes(Materials.Electrum, Materials.Electrum.mName, 5612, 2); - generateItemPipes(Materials.Platinum, Materials.Platinum.mName, 5622, 4); - generateItemPipes(Materials.Osmium, Materials.Osmium.mName, 5632, 8); - generateItemPipes(Materials.PolyvinylChloride, Materials.PolyvinylChloride.mName, "PVC", 5690, 4); - generateItemPipes(Materials.Nickel, Materials.Nickel.mName, 5700, 1); - generateItemPipes(Materials.Cobalt, Materials.Cobalt.mName, 5710, 2); - generateItemPipes(Materials.Aluminium, Materials.Aluminium.mName, 5720, 2); - if (NewHorizonsCoreMod.isModLoaded()) { - generateFluidPipes(Materials.get("RadoxPoly"), "RadoxPoly", 5760, 5000, 1500, true); - } - } - - @SuppressWarnings("PointlessArithmeticExpression") - private static void makeWires(Materials aMaterial, int aStartID, long aLossInsulated, long aLoss, long aAmperage, - long aVoltage, boolean aInsulatable, boolean aAutoInsulated) { - String name = GT_LanguageManager.i18nPlaceholder ? "%material" : aMaterial.mDefaultLocalName; - GT_OreDictUnificator.registerOre( - OrePrefixes.wireGt01, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 0, - aTextWire1 + aMaterial.mName.toLowerCase() + ".01", - "1x " + name + aTextWire2, - 0.125F, - aMaterial, - aLoss, - 1L * aAmperage, - aVoltage, - false, - !aAutoInsulated).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.wireGt02, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 1, - aTextWire1 + aMaterial.mName.toLowerCase() + ".02", - "2x " + name + aTextWire2, - 0.25F, - aMaterial, - aLoss, - 2L * aAmperage, - aVoltage, - false, - !aAutoInsulated).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.wireGt04, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 2, - aTextWire1 + aMaterial.mName.toLowerCase() + ".04", - "4x " + name + aTextWire2, - 0.375F, - aMaterial, - aLoss, - 4L * aAmperage, - aVoltage, - false, - !aAutoInsulated).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.wireGt08, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 3, - aTextWire1 + aMaterial.mName.toLowerCase() + ".08", - "8x " + name + aTextWire2, - 0.5F, - aMaterial, - aLoss, - 8L * aAmperage, - aVoltage, - false, - !aAutoInsulated).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.wireGt12, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 4, - aTextWire1 + aMaterial.mName.toLowerCase() + ".12", - "12x " + name + aTextWire2, - 0.625F, - aMaterial, - aLoss, - 12L * aAmperage, - aVoltage, - false, - !aAutoInsulated).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.wireGt16, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 5, - aTextWire1 + aMaterial.mName.toLowerCase() + ".16", - "16x " + name + aTextWire2, - 0.75F, - aMaterial, - aLoss, - 16L * aAmperage, - aVoltage, - false, - !aAutoInsulated).getStackForm(1L)); - if (aInsulatable) { - GT_OreDictUnificator.registerOre( - OrePrefixes.cableGt01, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 6, - aTextCable1 + aMaterial.mName.toLowerCase() + ".01", - "1x " + name + aTextCable2, - 0.25F, - aMaterial, - aLossInsulated, - 1L * aAmperage, - aVoltage, - true, - false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.cableGt02, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 7, - aTextCable1 + aMaterial.mName.toLowerCase() + ".02", - "2x " + name + aTextCable2, - 0.375F, - aMaterial, - aLossInsulated, - 2L * aAmperage, - aVoltage, - true, - false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.cableGt04, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 8, - aTextCable1 + aMaterial.mName.toLowerCase() + ".04", - "4x " + name + aTextCable2, - 0.5F, - aMaterial, - aLossInsulated, - 4L * aAmperage, - aVoltage, - true, - false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.cableGt08, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 9, - aTextCable1 + aMaterial.mName.toLowerCase() + ".08", - "8x " + name + aTextCable2, - 0.625F, - aMaterial, - aLossInsulated, - 8L * aAmperage, - aVoltage, - true, - false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.cableGt12, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 10, - aTextCable1 + aMaterial.mName.toLowerCase() + ".12", - "12x " + name + aTextCable2, - 0.75F, - aMaterial, - aLossInsulated, - 12L * aAmperage, - aVoltage, - true, - false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.cableGt16, - aMaterial, - new GT_MetaPipeEntity_Cable( - aStartID + 11, - aTextCable1 + aMaterial.mName.toLowerCase() + ".16", - "16x " + name + aTextCable2, - 0.875F, - aMaterial, - aLossInsulated, - 16L * aAmperage, - aVoltage, - true, - false).getStackForm(1L)); - } - } - - @Override - public void run() { - GT_Log.out.println("GT_Mod: Registering MetaTileEntities."); - registerMachineHull(); - registerTransformer(); - registerDynamoHatch(); - registerEnergyHatch(); - registerInputHatch(); - registerQuadrupleInputHatch(); - registerOutputHatch(); - registerQuantumTank(); - registerQuantumChest(); - registerSuperTank(); - registerSuperChest(); - registerLongDistancePipe(); - registerAE2Hatches(); - registerMagHatch(); - registerInputBus(); - registerOutputBus(); - registerMufflerHatch(); - registerBoiler(); - registerBatteryBuffer1x1(); - registerBatteryBuffer2x2(); - registerBatteryBuffer3x3(); - registerBatteryBuffer4x4(); - registerCharger4x4(); - registerWirelessEnergyHatch(); - registerWirelessDynamoHatch(); - registerSteamMachines(); - registerHPSteamMachines(); - registerLocker(); - registerScanner(); - registerPackager(); - registerRockBreaker(); - registerIndustrialApiary(); - registerMassFab(); - registerReplicator(); - registerBrewery(); - registerMiner(); - registerPump(); - registerTeleporter(); - registerMonsterRepellator(); - registerAdvancedSeismicProspector(); - registerMicrowaveEnergyTransmitter(); - registerChestBuffer(); - registerItemFilter(); - registerTypeFilter(); - registerRegulator(); - registerSuperBuffer(); - registerItemDistributor(); - registerRecipeFilter(); - registerLightningRods(); - registerCombustionGenerators(); - registerGasTurbines(); - registerSteamTurbines(); - registerNaquadahReactors(); - registerMagicEnergyAbsorbers(); - registerMagicEnergyConverters(); - registerPlasmaGenerators(); - registerMultiblockControllers(); - registerWorldAccelerator(); - registerAlloySmelter(); - registerMatterAmplifier(); - registerAssemblingMachine(); - registerWetTransformer(); - registerHighAmpTransformer(); - registerChemicalBath(); - registerChemicalReactor(); - registerFermenter(); - registerFluidCanner(); - registerFluidExtractor(); - registerFluidHeater(); - registerMixer(); - registerAutoclave(); - registerBendingMachine(); - registerCompressor(); - registerCuttingMachine(); - registerDistillery(); - registerElectricFurnace(); - registerElectromagneticSeparator(); - registerExtractor(); - registerExtruder(); - registerFluidSolidifier(); - registerFormingPress(); - registerForgeHammer(); - registerLathe(); - registerPrecisionLaserEngraver(); - registerMacerator(); - registerMatterFabricator(); - registerMicrowave(); - registerOreWashingPlant(); - registerPolarizer(); - registerRecycler(); - registerSiftingMachine(); - registerSlicingMachine(); - registerThermalCentrifuge(); - registerWiremill(); - registerArcFurnace(); - registerCentrifuge(); - registerPlasmaArcFurnace(); - registerCanningMachine(); - registerElectrolyzer(); - registerCircuitAssembler(); - registerTurboCharger4By4(); - registerBetterJukebox(); - registerUnpackager(); - registerPrinter(); - registerOven(); - - ItemList.AdvDebugStructureWriter.set( - new GT_MetaTileEntity_AdvDebugStructureWriter( - ADVANCED_DEBUG_STRUCTURE_WRITTER.ID, - "advdebugstructurewriter", - "Advanced Debug Structure Writer", - 5).getStackForm(1L)); - ItemList.Hatch_Maintenance.set( - new GT_MetaTileEntity_Hatch_Maintenance(MAINTENANCE_HATCH.ID, "hatch.maintenance", "Maintenance Hatch", 1) - .getStackForm(1L)); - ItemList.Hatch_AutoMaintenance.set( - new GT_MetaTileEntity_Hatch_Maintenance( - AUTO_MAINTENANCE_HATCH.ID, - "hatch.maintenance.auto", - "Auto Maintenance Hatch", - 6, - true).getStackForm(1L)); - ItemList.Hatch_DroneDownLink.set( - new GT_MetaTileEntity_Hatch_DroneDownLink( - DroneDownLink.ID, - "hatch.dronedownlink", - "Drone DownLink Module", - 5).getStackForm(1)); - ItemList.Hatch_DataAccess_EV.set( - new GT_MetaTileEntity_Hatch_DataAccess(DATA_ACCESS_HATCH.ID, "hatch.dataaccess", "Data Access Hatch", 4) - .getStackForm(1L)); - ItemList.Hatch_DataAccess_LuV.set( - new GT_MetaTileEntity_Hatch_DataAccess( - ADVANCED_DATA_ACCESS_HATCH.ID, - "hatch.dataaccess.adv", - "Advanced Data Access Hatch", - 6).getStackForm(1L)); - ItemList.Hatch_DataAccess_UV.set( - new GT_MetaTileEntity_Hatch_DataAccess( - AUTOMATABLE_DATA_ACCESS_HATCH.ID, - "hatch.dataaccess.auto", - "Automatable Data Access Hatch", - 8).getStackForm(1L)); - ItemList.Hatch_HeatSensor.set( - new GT_MetaTileEntity_HeatSensor(HEAT_DETECTOR_HATCH.ID, "hatch.heatsensor", "Heat Sensor Hatch", 7) - .getStackForm(1)); - ItemList.Hatch_pHSensor.set( - new GT_MetaTileEntity_pHSensor(HATCH_PH_SENSOR.ID, "hatch.phsensor", "pH Sensor Hatch", 7).getStackForm(1)); - ItemList.Hatch_LensHousing.set( - new GT_MetaTileEntity_LensHousing(HATCH_LENS_HOUSING.ID, "hatch.lenshousing", "Lens Housing") - .getStackForm(1L)); - ItemList.Hatch_LensIndicator.set( - new GT_MetaTileEntity_LensIndicator( - HATCH_LENS_INDICATOR.ID, - "hatch.lensindicator", - "Lens Indicator Hatch", - 8).getStackForm(1L)); - generateWiresAndPipes(); - } - - private static void generateItemPipes(Materials aMaterial, String name, int startID, int baseInvSlots) { - generateItemPipes( - aMaterial, - name, - GT_LanguageManager.i18nPlaceholder ? "%material" : aMaterial.mDefaultLocalName, - startID, - baseInvSlots); - } - - private static void generateItemPipes(Materials aMaterial, String name, String displayName, int startID, - int baseInvSlots) { - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeMedium.get(aMaterial), - new GT_MetaPipeEntity_Item( - startID, - "GT_Pipe_" + name, - displayName + " Item Pipe", - 0.50F, - aMaterial, - baseInvSlots, - 32768 / baseInvSlots, - false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeLarge.get(aMaterial), - new GT_MetaPipeEntity_Item( - startID + 1, - "GT_Pipe_" + name + "_Large", - "Large " + displayName + " Item Pipe", - 0.75F, - aMaterial, - baseInvSlots * 2, - 16384 / baseInvSlots, - false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeHuge.get(aMaterial), - new GT_MetaPipeEntity_Item( - startID + 2, - "GT_Pipe_" + name + "_Huge", - "Huge " + displayName + " Item Pipe", - 1.00F, - aMaterial, - baseInvSlots * 4, - 8192 / baseInvSlots, - false).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeRestrictiveMedium.get(aMaterial), - new GT_MetaPipeEntity_Item( - startID + 3, - "GT_Pipe_Restrictive_" + name, - "Restrictive " + displayName + " Item Pipe", - 0.50F, - aMaterial, - baseInvSlots, - 3276800 / baseInvSlots, - true).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeRestrictiveLarge.get(aMaterial), - new GT_MetaPipeEntity_Item( - startID + 4, - "GT_Pipe_Restrictive_" + name + "_Large", - "Large Restrictive " + displayName + " Item Pipe", - 0.75F, - aMaterial, - baseInvSlots * 2, - 1638400 / baseInvSlots, - true).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeRestrictiveHuge.get(aMaterial), - new GT_MetaPipeEntity_Item( - startID + 5, - "GT_Pipe_Restrictive_" + name + "_Huge", - "Huge Restrictive " + displayName + " Item Pipe", - 0.875F, - aMaterial, - baseInvSlots * 4, - 819200 / baseInvSlots, - true).getStackForm(1L)); - } - - @SuppressWarnings("SameParameterValue") - private static void generateFluidPipes(Materials aMaterial, String name, int startID, int baseCapacity, - int heatCapacity, boolean gasProof) { - generateFluidPipes( - aMaterial, - name, - GT_LanguageManager.i18nPlaceholder ? "%material" : aMaterial.mDefaultLocalName, - startID, - baseCapacity, - heatCapacity, - gasProof); - } - - private static void generateFluidPipes(Materials aMaterial, String name, String displayName, int startID, - int baseCapacity, int heatCapacity, boolean gasProof) { - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeTiny.get(aMaterial), - new GT_MetaPipeEntity_Fluid( - startID, - "GT_Pipe_" + name + "_Tiny", - "Tiny " + displayName + " Fluid Pipe", - 0.25F, - aMaterial, - baseCapacity / 6, - heatCapacity, - gasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeSmall.get(aMaterial), - new GT_MetaPipeEntity_Fluid( - startID + 1, - "GT_Pipe_" + name + "_Small", - "Small " + displayName + " Fluid Pipe", - 0.375F, - aMaterial, - baseCapacity / 3, - heatCapacity, - gasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeMedium.get(aMaterial), - new GT_MetaPipeEntity_Fluid( - startID + 2, - "GT_Pipe_" + name, - displayName + " Fluid Pipe", - 0.5F, - aMaterial, - baseCapacity, - heatCapacity, - gasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeLarge.get(aMaterial), - new GT_MetaPipeEntity_Fluid( - startID + 3, - "GT_Pipe_" + name + "_Large", - "Large " + displayName + " Fluid Pipe", - 0.75F, - aMaterial, - baseCapacity * 2, - heatCapacity, - gasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeHuge.get(aMaterial), - new GT_MetaPipeEntity_Fluid( - startID + 4, - "GT_Pipe_" + name + "_Huge", - "Huge " + displayName + " Fluid Pipe", - 0.875F, - aMaterial, - baseCapacity * 4, - heatCapacity, - gasProof).getStackForm(1L)); - } - - @SuppressWarnings("SameParameterValue") - private static void generateFluidMultiPipes(Materials aMaterial, String name, int startID, int baseCapacity, - int heatCapacity, boolean gasProof) { - generateFluidMultiPipes(aMaterial, name, "%material", startID, baseCapacity, heatCapacity, gasProof); - } - - private static void generateFluidMultiPipes(Materials aMaterial, String name, String displayName, int startID, - int baseCapacity, int heatCapacity, boolean gasProof) { - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeQuadruple.get(aMaterial), - new GT_MetaPipeEntity_Fluid( - startID, - "GT_Pipe_" + name + "_Quadruple", - "Quadruple " + displayName + " Fluid Pipe", - 1.0F, - aMaterial, - baseCapacity, - heatCapacity, - gasProof, - 4).getStackForm(1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.pipeNonuple.get(aMaterial), - new GT_MetaPipeEntity_Fluid( - startID + 1, - "GT_Pipe_" + name + "_Nonuple", - "Nonuple " + displayName + " Fluid Pipe", - 1.0F, - aMaterial, - baseCapacity / 3, - heatCapacity, - gasProof, - 9).getStackForm(1L)); - } -} diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java index c0946a7334..9b89ce9176 100644 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java +++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java @@ -1,6 +1,6 @@ package gregtech.loaders.preload; -import static gregtech.GT_Mod.GT_FML_LOGGER; +import static gregtech.GTMod.GT_FML_LOGGER; import static gregtech.api.multitileentity.enums.GT_MultiTileCasing.*; import static gregtech.api.multitileentity.enums.GT_MultiTileComponentCasing.*; import static gregtech.api.multitileentity.enums.GT_MultiTileUpgradeCasing.*; @@ -85,7 +85,7 @@ public class GT_Loader_MultiTileEntities implements Runnable { @Override public void run() { - GT_FML_LOGGER.info("GT_Mod: Registering MultiTileEntities"); + GT_FML_LOGGER.info("GTMod: Registering MultiTileEntities"); registerMachines(); registerCasings(); registerComponentCasings(); diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_OreDictionary.java b/src/main/java/gregtech/loaders/preload/GT_Loader_OreDictionary.java deleted file mode 100644 index 1b4d2bdf91..0000000000 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_OreDictionary.java +++ /dev/null @@ -1,458 +0,0 @@ -package gregtech.loaders.preload; - -import static gregtech.api.enums.Mods.AppliedEnergistics2; -import static gregtech.api.enums.Mods.Botania; -import static gregtech.api.enums.Mods.IndustrialCraft2; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.enums.Mods.Railcraft; -import static gregtech.api.enums.Mods.Thaumcraft; -import static gregtech.api.enums.Mods.TwilightForest; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsBotania; -import gregtech.api.enums.OreDictNames; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; - -public class GT_Loader_OreDictionary implements Runnable { - - @Override - public void run() { - GT_Log.out.println("GT_Mod: Register OreDict Entries of Non-GT-Items."); - GT_OreDictUnificator.set(OrePrefixes.cell, Materials.Empty, ItemList.Cell_Empty.get(1L)); - GT_OreDictUnificator.set(OrePrefixes.cell, Materials.Lava, ItemList.Cell_Lava.get(1L)); - GT_OreDictUnificator.set(OrePrefixes.cell, Materials.Lava, GT_ModHandler.getIC2Item("lavaCell", 1L)); - GT_OreDictUnificator.set(OrePrefixes.cell, Materials.Water, ItemList.Cell_Water.get(1L)); - GT_OreDictUnificator.set(OrePrefixes.cell, Materials.Water, GT_ModHandler.getIC2Item("waterCell", 1L)); - GT_OreDictUnificator.set( - OrePrefixes.cell, - Materials.Creosote, - GT_ModHandler.getModItem(Railcraft.ID, "fluid.creosote.cell", 1L)); - - GT_OreDictUnificator.set(OrePrefixes.cell, Materials.UUMatter, GT_ModHandler.getIC2Item("uuMatterCell", 1L)); - GT_OreDictUnificator.set(OrePrefixes.cell, Materials.ConstructionFoam, GT_ModHandler.getIC2Item("CFCell", 1L)); - - GT_OreDictUnificator.set(OrePrefixes.bucket, Materials.Empty, new ItemStack(Items.bucket, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.bucket, Materials.Water, new ItemStack(Items.water_bucket, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.bucket, Materials.Lava, new ItemStack(Items.lava_bucket, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.bucket, Materials.Milk, new ItemStack(Items.milk_bucket, 1, 0)); - // Clay buckets handled in gregtech.common.GT_Proxy.onLoad() as they aren't registered until Iguana Tweaks - // pre-init. - - GT_OreDictUnificator.set(OrePrefixes.bottle, Materials.Empty, new ItemStack(Items.glass_bottle, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.bottle, Materials.Water, new ItemStack(Items.potionitem, 1, 0)); - - GT_OreDictUnificator - .set(OrePrefixes.plateAlloy, Materials.Iridium, GT_ModHandler.getIC2Item("iridiumPlate", 1L)); - GT_OreDictUnificator - .set(OrePrefixes.plateAlloy, Materials.Advanced, GT_ModHandler.getIC2Item("advancedAlloy", 1L)); - GT_OreDictUnificator.set(OrePrefixes.plateAlloy, Materials.Carbon, GT_ModHandler.getIC2Item("carbonPlate", 1L)); - - GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Coal, new ItemStack(Blocks.coal_ore, 1)); - GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Iron, new ItemStack(Blocks.iron_ore, 1)); - GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Lapis, new ItemStack(Blocks.lapis_ore, 1)); - GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Redstone, new ItemStack(Blocks.redstone_ore, 1)); - GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Redstone, new ItemStack(Blocks.lit_redstone_ore, 1)); - GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Gold, new ItemStack(Blocks.gold_ore, 1)); - GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Diamond, new ItemStack(Blocks.diamond_ore, 1)); - GT_OreDictUnificator.set(OrePrefixes.ore, Materials.Emerald, new ItemStack(Blocks.emerald_ore, 1)); - GT_OreDictUnificator.set(OrePrefixes.ore, Materials.NetherQuartz, new ItemStack(Blocks.quartz_ore, 1)); - GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Copper, GT_ModHandler.getIC2Item("copperIngot", 1L)); - GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Tin, GT_ModHandler.getIC2Item("tinIngot", 1L)); - GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Lead, GT_ModHandler.getIC2Item("leadIngot", 1L)); - GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Bronze, GT_ModHandler.getIC2Item("bronzeIngot", 1L)); - GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Silver, GT_ModHandler.getIC2Item("silverIngot", 1L)); - GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Iridium, GT_ModHandler.getIC2Item("iridiumOre", 1L)); - GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Lapis, new ItemStack(Items.dye, 1, 4)); - GT_OreDictUnificator.set(OrePrefixes.gem, Materials.EnderEye, new ItemStack(Items.ender_eye, 1)); - GT_OreDictUnificator.set(OrePrefixes.gem, Materials.EnderPearl, new ItemStack(Items.ender_pearl, 1)); - GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Diamond, new ItemStack(Items.diamond, 1)); - GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Emerald, new ItemStack(Items.emerald, 1)); - GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Coal, new ItemStack(Items.coal, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.gem, Materials.Charcoal, new ItemStack(Items.coal, 1, 1)); - GT_OreDictUnificator.set(OrePrefixes.gem, Materials.NetherQuartz, new ItemStack(Items.quartz, 1)); - GT_OreDictUnificator.set(OrePrefixes.gem, Materials.NetherStar, new ItemStack(Items.nether_star, 1)); - GT_OreDictUnificator.set(OrePrefixes.nugget, Materials.Gold, new ItemStack(Items.gold_nugget, 1)); - GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Gold, new ItemStack(Items.gold_ingot, 1)); - GT_OreDictUnificator.set(OrePrefixes.ingot, Materials.Iron, new ItemStack(Items.iron_ingot, 1)); - GT_OreDictUnificator.set(OrePrefixes.plate, Materials.Paper, new ItemStack(Items.paper, 1)); - GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Sugar, new ItemStack(Items.sugar, 1)); - GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Bone, ItemList.Dye_Bonemeal.get(1L)); - GT_OreDictUnificator.set(OrePrefixes.stick, Materials.Wood, new ItemStack(Items.stick, 1)); - GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Redstone, new ItemStack(Items.redstone, 1)); - GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Gunpowder, new ItemStack(Items.gunpowder, 1)); - GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Glowstone, new ItemStack(Items.glowstone_dust, 1)); - GT_OreDictUnificator.set(OrePrefixes.dust, Materials.Blaze, new ItemStack(Items.blaze_powder, 1)); - GT_OreDictUnificator.set(OrePrefixes.stick, Materials.Blaze, new ItemStack(Items.blaze_rod, 1)); - GT_OreDictUnificator.set(OrePrefixes.block, Materials.Iron, new ItemStack(Blocks.iron_block, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.block, Materials.Gold, new ItemStack(Blocks.gold_block, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.block, Materials.Diamond, new ItemStack(Blocks.diamond_block, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.block, Materials.Emerald, new ItemStack(Blocks.emerald_block, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.block, Materials.Lapis, new ItemStack(Blocks.lapis_block, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.block, Materials.Coal, new ItemStack(Blocks.coal_block, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.block, Materials.Redstone, new ItemStack(Blocks.redstone_block, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.block, Materials.NetherQuartz, new ItemStack(Blocks.quartz_block, 1, 0)); - GT_OreDictUnificator.set(OrePrefixes.block, Materials.Clay, new ItemStack(Blocks.clay, 1, 0)); - if (Blocks.ender_chest != null) { - GT_OreDictUnificator.registerOre(OreDictNames.enderChest, new ItemStack(Blocks.ender_chest, 1)); - } - GT_OreDictUnificator.registerOre(OreDictNames.craftingAnvil, new ItemStack(Blocks.anvil, 1)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingAnvil, GT_ModHandler.getModItem(Railcraft.ID, "anvil", 1L, 0)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingIndustrialDiamond, ItemList.IC2_Industrial_Diamond.get(1L)); - GT_OreDictUnificator - .registerOre(OrePrefixes.glass, Materials.Reinforced, GT_ModHandler.getIC2Item("reinforcedGlass", 1L)); - - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.Basalt, GT_ModHandler.getModItem(Railcraft.ID, "cube", 1L, 6)); - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.Marble, GT_ModHandler.getModItem(Railcraft.ID, "cube", 1L, 7)); - GT_OreDictUnificator.registerOre( - OrePrefixes.stone, - Materials.Basalt, - GT_ModHandler.getModItem(Railcraft.ID, "brick.abyssal", 1L, 32767)); - GT_OreDictUnificator.registerOre( - OrePrefixes.stone, - Materials.Marble, - GT_ModHandler.getModItem(Railcraft.ID, "brick.quarried", 1L, 32767)); - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.Obsidian, new ItemStack(Blocks.obsidian, 1, 32767)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Stone, new ItemStack(Blocks.stone, 1, 32767)); - GT_OreDictUnificator.registerOre(OrePrefixes.stoneMossy, new ItemStack(Blocks.mossy_cobblestone, 1, 32767)); - GT_OreDictUnificator.registerOre(OrePrefixes.stoneCobble, new ItemStack(Blocks.mossy_cobblestone, 1, 32767)); - GT_OreDictUnificator.registerOre(OrePrefixes.stoneCobble, new ItemStack(Blocks.cobblestone, 1, 32767)); - GT_OreDictUnificator.registerOre(OrePrefixes.stoneSmooth, new ItemStack(Blocks.stone, 1, 32767)); - GT_OreDictUnificator.registerOre(OrePrefixes.stoneBricks, new ItemStack(Blocks.stonebrick, 1, 32767)); - GT_OreDictUnificator.registerOre(OrePrefixes.stoneMossy, new ItemStack(Blocks.stonebrick, 1, 1)); - GT_OreDictUnificator.registerOre(OrePrefixes.stoneCracked, new ItemStack(Blocks.stonebrick, 1, 2)); - GT_OreDictUnificator.registerOre(OrePrefixes.stoneChiseled, new ItemStack(Blocks.stonebrick, 1, 3)); - GT_OreDictUnificator.registerOre(OrePrefixes.stone, Materials.Sand, new ItemStack(Blocks.sandstone, 1, 32767)); - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.Netherrack, new ItemStack(Blocks.netherrack, 1, 32767)); - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.NetherBrick, new ItemStack(Blocks.nether_brick, 1, 32767)); - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.Endstone, new ItemStack(Blocks.end_stone, 1, 32767)); - GT_OreDictUnificator - .registerOre(OrePrefixes.stone, Materials.Glowstone, new ItemStack(Blocks.glowstone, 1, 32767)); - - GT_OreDictUnificator - .registerOre("paperResearchFragment", GT_ModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 9)); - GT_OreDictUnificator.registerOre( - "itemCertusQuartz", - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 1)); - GT_OreDictUnificator.registerOre( - "itemCertusQuartz", - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10)); - GT_OreDictUnificator.registerOre( - "itemNetherQuartz", - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11)); - GT_OreDictUnificator.registerOre( - OreDictNames.craftingQuartz, - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 1)); - GT_OreDictUnificator.registerOre( - OreDictNames.craftingQuartz, - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10)); - GT_OreDictUnificator.registerOre( - OreDictNames.craftingQuartz, - GT_ModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11)); - GT_OreDictUnificator.registerOre("cropLemon", ItemList.FR_Lemon.get(1L)); - GT_OreDictUnificator.registerOre("cropCoffee", ItemList.IC2_CoffeeBeans.get(1L)); - GT_OreDictUnificator.registerOre("cropPotato", ItemList.Food_Raw_Potato.get(1L)); - GT_OreDictUnificator.registerOre(OrePrefixes.battery, Materials.LV, GT_ModHandler.getIC2Item("reBattery", 1L)); - GT_OreDictUnificator - .registerOre(OrePrefixes.battery, Materials.LV, GT_ModHandler.getIC2Item("chargedReBattery", 1L, 32767)); - GT_OreDictUnificator - .registerOre(OrePrefixes.battery, Materials.MV, GT_ModHandler.getIC2Item("advBattery", 1L, 32767)); - GT_OreDictUnificator - .registerOre(OrePrefixes.battery, Materials.HV, GT_ModHandler.getIC2Item("energyCrystal", 1L, 32767)); - GT_OreDictUnificator - .registerOre(OrePrefixes.battery, Materials.EV, GT_ModHandler.getIC2Item("lapotronCrystal", 1L, 32767)); - - GT_OreDictUnificator - .registerOre(OreDictNames.craftingWireCopper, GT_ModHandler.getIC2Item("insulatedCopperCableItem", 1L)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingWireGold, GT_ModHandler.getIC2Item("insulatedGoldCableItem", 1L)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingWireIron, GT_ModHandler.getIC2Item("insulatedIronCableItem", 1L)); - GT_OreDictUnificator.registerOre( - OreDictNames.craftingWireTin, - GT_ModHandler - .getIC2Item("insulatedTinCableItem", 1L, GT_ModHandler.getIC2Item("insulatedCopperCableItem", 1L))); - - GT_OreDictUnificator - .registerOre(OreDictNames.craftingRedstoneTorch, new ItemStack(Blocks.redstone_torch, 1, 32767)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingRedstoneTorch, new ItemStack(Blocks.unlit_redstone_torch, 1, 32767)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingWorkBench, new ItemStack(Blocks.crafting_table, 1)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingWorkBench, new ItemStack(GregTech_API.sBlockMachines, 1, 16)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingPiston, new ItemStack(Blocks.piston, 1, 32767)); - GT_OreDictUnificator.registerOre(OreDictNames.craftingPiston, new ItemStack(Blocks.sticky_piston, 1, 32767)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingSafe, new ItemStack(GregTech_API.sBlockMachines, 1, 45)); - GT_OreDictUnificator.registerOre(OreDictNames.craftingSafe, GT_ModHandler.getIC2Item("personalSafe", 1L)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingChest, new ItemStack(Blocks.chest, 1, 32767)); - GT_OreDictUnificator.registerOre(OreDictNames.craftingChest, new ItemStack(Blocks.trapped_chest, 1, 32767)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingFurnace, new ItemStack(Blocks.furnace, 1, 32767)); - GT_OreDictUnificator.registerOre(OreDictNames.craftingFurnace, new ItemStack(Blocks.lit_furnace, 1, 32767)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingPump, GT_ModHandler.getIC2Item("pump", 1L)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingElectromagnet, GT_ModHandler.getIC2Item("magnetizer", 1L)); - GT_OreDictUnificator.registerOre(OreDictNames.craftingTeleporter, GT_ModHandler.getIC2Item("teleporter", 1L)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingMacerator, GT_ModHandler.getIC2Item("macerator", 1L)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingMacerator, new ItemStack(GregTech_API.sBlockMachines, 1, 50)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingExtractor, GT_ModHandler.getIC2Item("extractor", 1L)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingExtractor, new ItemStack(GregTech_API.sBlockMachines, 1, 51)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingCompressor, GT_ModHandler.getIC2Item("compressor", 1L)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingCompressor, new ItemStack(GregTech_API.sBlockMachines, 1, 52)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingRecycler, GT_ModHandler.getIC2Item("recycler", 1L)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingRecycler, new ItemStack(GregTech_API.sBlockMachines, 1, 53)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingIronFurnace, GT_ModHandler.getIC2Item("ironFurnace", 1L)); - - GT_OreDictUnificator - .registerOre(OreDictNames.craftingCentrifuge, new ItemStack(GregTech_API.sBlockMachines, 1, 62)); - - GT_OreDictUnificator - .registerOre(OreDictNames.craftingInductionFurnace, GT_ModHandler.getIC2Item("inductionFurnace", 1L)); - - GT_OreDictUnificator - .registerOre(OreDictNames.craftingElectricFurnace, GT_ModHandler.getIC2Item("electroFurnace", 1L)); - GT_OreDictUnificator - .registerOre(OreDictNames.craftingElectricFurnace, new ItemStack(GregTech_API.sBlockMachines, 1, 54)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingGenerator, GT_ModHandler.getIC2Item("generator", 1L)); - - GT_OreDictUnificator - .registerOre(OreDictNames.craftingGeothermalGenerator, GT_ModHandler.getIC2Item("geothermalGenerator", 1L)); - - GT_OreDictUnificator.registerOre(OreDictNames.craftingFeather, new ItemStack(Items.feather, 1, 32767)); - GT_OreDictUnificator.registerOre( - OreDictNames.craftingFeather, - GT_ModHandler.getModItem(TwilightForest.ID, "item.tfFeather", 1L, 32767)); - - GT_OreDictUnificator.registerOre("itemWheat", new ItemStack(Items.wheat, 1, 32767)); - GT_OreDictUnificator.registerOre("paperEmpty", new ItemStack(Items.paper, 1, 32767)); - GT_OreDictUnificator.registerOre("paperMap", new ItemStack(Items.map, 1, 32767)); - GT_OreDictUnificator.registerOre("paperMap", new ItemStack(Items.filled_map, 1, 32767)); - GT_OreDictUnificator.registerOre("bookEmpty", new ItemStack(Items.book, 1, 32767)); - GT_OreDictUnificator.registerOre("bookWritable", new ItemStack(Items.writable_book, 1, 32767)); - GT_OreDictUnificator.registerOre("bookWritten", new ItemStack(Items.written_book, 1, 32767)); - GT_OreDictUnificator.registerOre("bookEnchanted", new ItemStack(Items.enchanted_book, 1, 32767)); - GT_OreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.book, 1, 32767)); - GT_OreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.writable_book, 1, 32767)); - GT_OreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.written_book, 1, 32767)); - GT_OreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.enchanted_book, 1, 32767)); - - GT_OreDictUnificator.addToBlacklist(GT_ModHandler.getIC2Item("electronicCircuit", 1L)); - GT_OreDictUnificator.addToBlacklist(GT_ModHandler.getIC2Item("advancedCircuit", 1L)); - GT_OreDictUnificator - .registerOre(OrePrefixes.circuit, Materials.LV, GT_ModHandler.getIC2Item("electronicCircuit", 1L)); - GT_OreDictUnificator - .registerOre(OrePrefixes.circuit, Materials.HV, GT_ModHandler.getIC2Item("advancedCircuit", 1L)); - - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Copper, - GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 0)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Tin, - GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 1)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Bronze, - GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 2)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Gold, - GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 3)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Iron, - GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 4)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Steel, - GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 5)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Lead, - GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 6)); - - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Osmium, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.OsmiumItemCasing", 1L, 0)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Aluminium, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.AluminiumItemCasing", 1L, 0)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.StainlessSteel, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.StainlessSteelItemCasing", 1L, 0)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Tungsten, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TungstenItemCasing", 1L, 0)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Neutronium, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.NeutroniumItemCasing", 1L, 0)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.TungstenSteel, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TungstenSteelItemCasing", 1L, 0)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Iridium, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.IridiumItemCasing", 1L, 0)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Titanium, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TitaniumItemCasing", 1L, 0)); - GT_OreDictUnificator.registerOre( - OrePrefixes.itemCasing, - Materials.Chrome, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ChromeItemCasing", 1L, 0)); - - // Fake Circuits - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.ULV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitULV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.LV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitLV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.MV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitMV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.HV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitHV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.EV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitEV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.IV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitIV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.LuV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitLuV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.ZPM, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitZPM", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.UV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.UHV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUHV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.UEV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUEV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.UIV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUIV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.UMV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUMV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.UXV, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUXV", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.circuit, - Materials.MAX, - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitMAX", 1L)); - - GT_OreDictUnificator.registerOre( - OrePrefixes.block, - MaterialsBotania.Manasteel, - GT_ModHandler.getModItem(Botania.ID, "storage", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.block, - MaterialsBotania.Terrasteel, - GT_ModHandler.getModItem(Botania.ID, "storage", 1L, 1)); - GT_OreDictUnificator.registerOre( - OrePrefixes.ingot, - MaterialsBotania.ElvenElementium, - GT_ModHandler.getModItem(Botania.ID, "manaResource", 1L, 7)); - GT_OreDictUnificator.registerOre( - OrePrefixes.nugget, - MaterialsBotania.ElvenElementium, - GT_ModHandler.getModItem(Botania.ID, "manaResource", 1L, 19)); - GT_OreDictUnificator.registerOre( - OrePrefixes.block, - MaterialsBotania.ElvenElementium, - GT_ModHandler.getModItem(Botania.ID, "storage", 1L, 2)); - GT_OreDictUnificator.registerOre( - OrePrefixes.block, - MaterialsBotania.Livingrock, - GT_ModHandler.getModItem(Botania.ID, "livingrock", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.ingot, - MaterialsBotania.GaiaSpirit, - GT_ModHandler.getModItem(Botania.ID, "manaResource", 1L, 14)); - GT_OreDictUnificator.registerOre( - OrePrefixes.block, - MaterialsBotania.Livingwood, - GT_ModHandler.getModItem(Botania.ID, "livingwood", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.block, - MaterialsBotania.Dreamwood, - GT_ModHandler.getModItem(Botania.ID, "dreamwood", 1L)); - GT_OreDictUnificator.registerOre( - OrePrefixes.gem, - MaterialsBotania.ManaDiamond, - GT_ModHandler.getModItem(Botania.ID, "manaResource", 1L, 2)); - GT_OreDictUnificator.registerOre( - OrePrefixes.block, - MaterialsBotania.ManaDiamond, - GT_ModHandler.getModItem(Botania.ID, "storage", 1L, 3)); - GT_OreDictUnificator.registerOre( - OrePrefixes.gem, - MaterialsBotania.BotaniaDragonstone, - GT_ModHandler.getModItem(Botania.ID, "manaResource", 1L, 9)); - GT_OreDictUnificator.registerOre( - OrePrefixes.block, - MaterialsBotania.BotaniaDragonstone, - GT_ModHandler.getModItem(Botania.ID, "storage", 1L, 4)); - } -} diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_OreProcessing.java b/src/main/java/gregtech/loaders/preload/GT_Loader_OreProcessing.java deleted file mode 100644 index 598d9e882a..0000000000 --- a/src/main/java/gregtech/loaders/preload/GT_Loader_OreProcessing.java +++ /dev/null @@ -1,111 +0,0 @@ -package gregtech.loaders.preload; - -import gregtech.api.util.GT_Log; -import gregtech.loaders.oreprocessing.ProcessingAll; -import gregtech.loaders.oreprocessing.ProcessingBeans; -import gregtech.loaders.oreprocessing.ProcessingBlock; -import gregtech.loaders.oreprocessing.ProcessingBolt; -import gregtech.loaders.oreprocessing.ProcessingCell; -import gregtech.loaders.oreprocessing.ProcessingCircuit; -import gregtech.loaders.oreprocessing.ProcessingCompressed; -import gregtech.loaders.oreprocessing.ProcessingCrafting; -import gregtech.loaders.oreprocessing.ProcessingCrop; -import gregtech.loaders.oreprocessing.ProcessingCrushedOre; -import gregtech.loaders.oreprocessing.ProcessingCrystallized; -import gregtech.loaders.oreprocessing.ProcessingDirty; -import gregtech.loaders.oreprocessing.ProcessingDust; -import gregtech.loaders.oreprocessing.ProcessingDye; -import gregtech.loaders.oreprocessing.ProcessingFineWire; -import gregtech.loaders.oreprocessing.ProcessingFoil; -import gregtech.loaders.oreprocessing.ProcessingFood; -import gregtech.loaders.oreprocessing.ProcessingGear; -import gregtech.loaders.oreprocessing.ProcessingGem; -import gregtech.loaders.oreprocessing.ProcessingIngot; -import gregtech.loaders.oreprocessing.ProcessingItem; -import gregtech.loaders.oreprocessing.ProcessingLens; -import gregtech.loaders.oreprocessing.ProcessingLog; -import gregtech.loaders.oreprocessing.ProcessingNugget; -import gregtech.loaders.oreprocessing.ProcessingOre; -import gregtech.loaders.oreprocessing.ProcessingOrePoor; -import gregtech.loaders.oreprocessing.ProcessingOreSmelting; -import gregtech.loaders.oreprocessing.ProcessingPipe; -import gregtech.loaders.oreprocessing.ProcessingPlank; -import gregtech.loaders.oreprocessing.ProcessingPlate; -import gregtech.loaders.oreprocessing.ProcessingPure; -import gregtech.loaders.oreprocessing.ProcessingRawOre; -import gregtech.loaders.oreprocessing.ProcessingRecycling; -import gregtech.loaders.oreprocessing.ProcessingRotor; -import gregtech.loaders.oreprocessing.ProcessingRound; -import gregtech.loaders.oreprocessing.ProcessingSand; -import gregtech.loaders.oreprocessing.ProcessingSaplings; -import gregtech.loaders.oreprocessing.ProcessingScrew; -import gregtech.loaders.oreprocessing.ProcessingShaping; -import gregtech.loaders.oreprocessing.ProcessingSlab; -import gregtech.loaders.oreprocessing.ProcessingStick; -import gregtech.loaders.oreprocessing.ProcessingStickLong; -import gregtech.loaders.oreprocessing.ProcessingStone; -import gregtech.loaders.oreprocessing.ProcessingStoneCobble; -import gregtech.loaders.oreprocessing.ProcessingStoneVarious; -import gregtech.loaders.oreprocessing.ProcessingToolHead; -import gregtech.loaders.oreprocessing.ProcessingToolOther; -import gregtech.loaders.oreprocessing.ProcessingTransforming; -import gregtech.loaders.oreprocessing.ProcessingWax; -import gregtech.loaders.oreprocessing.ProcessingWire; - -public class GT_Loader_OreProcessing implements Runnable { - - @Override - public void run() { - GT_Log.out.println("GT_Mod: Register Ore processing."); - new ProcessingAll(); - new ProcessingBeans(); - new ProcessingBlock(); - new ProcessingBolt(); - new ProcessingCell(); - new ProcessingCircuit(); - new ProcessingCompressed(); - new ProcessingCrafting(); - new ProcessingCrop(); - new ProcessingCrushedOre(); - new ProcessingCrystallized(); - new ProcessingDirty(); - new ProcessingDust(); - new ProcessingDye(); - new ProcessingFoil(); - new ProcessingFineWire(); - new ProcessingFood(); - new ProcessingLens(); - new ProcessingShaping(); - new ProcessingGem(); - new ProcessingGear(); - new ProcessingIngot(); - new ProcessingItem(); - new ProcessingLog(); - new ProcessingTransforming(); - new ProcessingNugget(); - new ProcessingOre(); - new ProcessingOrePoor(); - new ProcessingOreSmelting(); - new ProcessingRawOre(); - new ProcessingPipe(); - new ProcessingPlank(); - new ProcessingPlate(); - new ProcessingPure(); - new ProcessingRecycling(); - new ProcessingRound(); - new ProcessingRotor(); - new ProcessingSand(); - new ProcessingSaplings(); - new ProcessingScrew(); - new ProcessingSlab(); - new ProcessingStick(); - new ProcessingStickLong(); - new ProcessingStone(); - new ProcessingStoneCobble(); - new ProcessingStoneVarious(); - new ProcessingToolHead(); - new ProcessingToolOther(); - new ProcessingWax(); - new ProcessingWire(); - } -} diff --git a/src/main/java/gregtech/loaders/preload/GT_PreLoad.java b/src/main/java/gregtech/loaders/preload/GT_PreLoad.java deleted file mode 100644 index a2e6137cff..0000000000 --- a/src/main/java/gregtech/loaders/preload/GT_PreLoad.java +++ /dev/null @@ -1,654 +0,0 @@ -package gregtech.loaders.preload; - -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.Mods.CraftTweaker; -import static gregtech.api.enums.Mods.GalacticraftCore; -import static gregtech.api.enums.Mods.GregTech; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.PrintStream; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import net.minecraft.client.Minecraft; -import net.minecraft.init.Blocks; -import net.minecraft.launchwrapper.Launch; -import net.minecraftforge.common.config.Configuration; - -import org.apache.commons.lang3.StringUtils; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.common.LoadController; -import cpw.mods.fml.common.Loader; -import cpw.mods.fml.common.ModContainer; -import cpw.mods.fml.common.discovery.ASMDataTable; -import cpw.mods.fml.common.discovery.ModDiscoverer; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.recipe.RecipeCategory; -import gregtech.api.recipe.RecipeCategoryHolder; -import gregtech.api.recipe.RecipeCategorySetting; -import gregtech.api.util.GT_Config; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_Utility; -import gregtech.common.GT_Proxy; -import gregtech.common.config.client.ConfigColorModulation; -import gregtech.common.config.client.ConfigInterface; -import gregtech.common.config.client.ConfigRender; -import gregtech.common.config.client.ConfigWaila; -import gregtech.common.config.gregtech.ConfigDebug; -import gregtech.common.config.gregtech.ConfigFeatures; -import gregtech.common.config.gregtech.ConfigGeneral; -import gregtech.common.config.gregtech.ConfigMachines; -import gregtech.common.config.gregtech.ConfigOreDropBehavior; -import gregtech.common.config.gregtech.ConfigPollution; -import gregtech.common.tileentities.machines.long_distance.GT_MetaTileEntity_LongDistancePipelineBase; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_Cleanroom; - -public class GT_PreLoad { - - public static void sortToTheEnd() { - try { - GT_FML_LOGGER.info("GT_Mod: Sorting GregTech to the end of the Mod List for further processing."); - LoadController tLoadController = (LoadController) GT_Utility - .getFieldContent(Loader.instance(), "modController", true, true); - assert tLoadController != null; - List tModList = tLoadController.getActiveModList(); - List tNewModsList = new ArrayList<>(); - ModContainer tGregTech = null; - short tModList_sS = (short) tModList.size(); - for (short i = 0; i < tModList_sS; i = (short) (i + 1)) { - ModContainer tMod = tModList.get(i); - if (tMod.getModId() - .equalsIgnoreCase(GregTech.ID)) { - tGregTech = tMod; - } else { - tNewModsList.add(tMod); - } - } - if (tGregTech != null) { - tNewModsList.add(tGregTech); - } - Objects.requireNonNull(GT_Utility.getField(tLoadController, "activeModList", true, true)) - .set(tLoadController, tNewModsList); - } catch (Throwable e) { - GT_Mod.logStackTrace(e); - } - } - - public static void initLocalization(File languageDir) { - GT_FML_LOGGER.info("GT_Mod: Generating Lang-File"); - - if (FMLCommonHandler.instance() - .getEffectiveSide() - .isClient()) { - String userLang = Minecraft.getMinecraft() - .getLanguageManager() - .getCurrentLanguage() - .getLanguageCode(); - GT_FML_LOGGER.info("User lang is " + userLang); - if (userLang.equals("en_US")) { - GT_FML_LOGGER.info("Loading GregTech.lang"); - GT_LanguageManager.isEN_US = true; - GT_LanguageManager.sEnglishFile = new Configuration(new File(languageDir, "GregTech.lang")); - } else { - String l10nFileName = "GregTech_" + userLang + ".lang"; - File l10nFile = new File(languageDir, l10nFileName); - if (l10nFile.isFile()) { - GT_FML_LOGGER.info("Loading l10n file: " + l10nFileName); - GT_LanguageManager.sEnglishFile = new Configuration(l10nFile); - } else { - GT_FML_LOGGER.info("Cannot find l10n file " + l10nFileName + ", fallback to GregTech.lang"); - GT_LanguageManager.isEN_US = true; - GT_LanguageManager.sEnglishFile = new Configuration(new File(languageDir, "GregTech.lang")); - } - } - } else { - GT_LanguageManager.isEN_US = true; - GT_LanguageManager.sEnglishFile = new Configuration(new File(languageDir, "GregTech.lang")); - } - GT_LanguageManager.sEnglishFile.load(); - - Materials.getMaterialsMap() - .values() - .parallelStream() - .filter(Objects::nonNull) - .forEach( - aMaterial -> aMaterial.mLocalizedName = GT_LanguageManager - .addStringLocalization("Material." + aMaterial.mName.toLowerCase(), aMaterial.mDefaultLocalName)); - } - - public static void getConfiguration(File configDir) { - File tFile = new File(new File(configDir, "GregTech"), "IDs.cfg"); - GT_Config.sConfigFileIDs = new Configuration(tFile); - GT_Config.sConfigFileIDs.load(); - GT_Config.sConfigFileIDs.save(); - - tFile = new File(new File(configDir, "GregTech"), "Cleanroom.cfg"); - GT_Config.cleanroomFile = new Configuration(tFile); - GT_Config.cleanroomFile.load(); - GT_Config.cleanroomFile.save(); - - tFile = new File(new File(configDir, "GregTech"), "UndergroundFluids.cfg"); - GT_Config.undergroundFluidsFile = new Configuration(tFile); - GT_Config.undergroundFluidsFile.load(); - GT_Config.undergroundFluidsFile.save(); - - GregTech_API.NEIClientFIle = new GT_Config( - new Configuration(new File(new File(configDir, "GregTech"), "NEIClient.cfg"))); - - } - - public static void createLogFiles(File parentFile) { - GT_Log.mLogFile = new File(parentFile, "logs/GregTech.log"); - if (!GT_Log.mLogFile.exists()) { - try { - GT_Log.mLogFile.createNewFile(); - } catch (Throwable ignored) {} - } - try { - GT_Log.out = GT_Log.err = new PrintStream(GT_Log.mLogFile); - } catch (FileNotFoundException ignored) {} - - if (ConfigGeneral.loggingOreDict) { - GT_Log.mOreDictLogFile = new File(parentFile, "logs/OreDict.log"); - if (!GT_Log.mOreDictLogFile.exists()) { - try { - GT_Log.mOreDictLogFile.createNewFile(); - } catch (Throwable ignored) {} - } - List tList = ((GT_Log.LogBuffer) GT_Log.ore).mBufferedOreDictLog; - try { - GT_Log.ore = new PrintStream(GT_Log.mOreDictLogFile); - } catch (Throwable ignored) {} - GT_Log.ore.println("******************************************************************************"); - GT_Log.ore.println("* This is the complete log of the GT5-Unofficial OreDictionary Handler. It *"); - GT_Log.ore.println("* processes all OreDictionary entries and can sometimes cause errors. All *"); - GT_Log.ore.println("* entries and errors are being logged. If you see an error please raise an *"); - GT_Log.ore.println("* issue at https://github.com/GTNewHorizons/GT-New-Horizons-Modpack/issues. *"); - GT_Log.ore.println("******************************************************************************"); - tList.forEach(GT_Log.ore::println); - } - if (ConfigGeneral.loggingExplosions) { - GT_Log.mExplosionLog = new File(parentFile, "logs/Explosion.log"); - if (!GT_Log.mExplosionLog.exists()) { - try { - GT_Log.mExplosionLog.createNewFile(); - } catch (Throwable ignored) {} - } - try { - GT_Log.exp = new PrintStream(GT_Log.mExplosionLog); - } catch (Throwable ignored) {} - } - - if (ConfigGeneral.loggingPlayerActicity) { - GT_Log.mPlayerActivityLogFile = new File(parentFile, "logs/PlayerActivity.log"); - if (!GT_Log.mPlayerActivityLogFile.exists()) { - try { - GT_Log.mPlayerActivityLogFile.createNewFile(); - } catch (Throwable ignored) {} - } - try { - GT_Log.pal = new PrintStream(GT_Log.mPlayerActivityLogFile); - } catch (Throwable ignored) {} - } - } - - public static void runMineTweakerCompat() { - if (!CraftTweaker.isModLoaded()) return; - - GT_FML_LOGGER.info("preReader"); - final List oreTags = new ArrayList<>(); - final File globalDir = new File("scripts"); - if (globalDir.exists()) { - final List scripts = new ArrayList<>(); - for (File file : Objects.requireNonNull(globalDir.listFiles())) { - if (file.getName() - .endsWith(".zs")) { - try (BufferedReader br = new BufferedReader(new FileReader(file))) { - String line; - while ((line = br.readLine()) != null) { - scripts.add(line); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - } - String pattern1 = "<"; - String pattern2 = ">"; - - Pattern p = Pattern.compile(Pattern.quote(pattern1) + "(.*?)" + Pattern.quote(pattern2)); - for (String text : scripts) { - Matcher m = p.matcher(text); - while (m.find()) { - String hit = m.group(1); - if (hit.startsWith("ore:")) { - hit = hit.substring(4); - if (!oreTags.contains(hit)) oreTags.add(hit); - } else if (hit.startsWith("gregtech:gt.metaitem.0")) { - hit = hit.substring(22); - int mIt = Integer.parseInt(hit.substring(0, 1)); - if (mIt > 0) { - int meta = 0; - try { - hit = hit.substring(2); - meta = Integer.parseInt(hit); - } catch (Exception e) { - GT_FML_LOGGER.info("parseError: " + hit); - } - if (meta > 0 && meta < 32000) { - int prefix = meta / 1000; - int material = meta % 1000; - String tag = ""; - String[] tags = new String[] {}; - if (mIt == 1) tags = new String[] { "dustTiny", "dustSmall", "dust", "dustImpure", - "dustPure", "crushed", "crushedPurified", "crushedCentrifuged", "gem", "nugget", - null, "ingot", "ingotHot", "ingotDouble", "ingotTriple", "ingotQuadruple", - "ingotQuintuple", "plate", "plateDouble", "plateTriple", "plateQuadruple", - "plateQuintuple", "plateDense", "stick", "lens", "round", "bolt", "screw", "ring", - "foil", "cell", "cellPlasma", "cellMolten", "rawOre" }; - if (mIt == 2) tags = new String[] { "toolHeadSword", "toolHeadPickaxe", - "toolHeadShovel", "toolHeadAxe", "toolHeadHoe", "toolHeadHammer", "toolHeadFile", - "toolHeadSaw", "toolHeadDrill", "toolHeadChainsaw", "toolHeadWrench", - "toolHeadUniversalSpade", "toolHeadSense", "toolHeadPlow", "toolHeadArrow", - "toolHeadBuzzSaw", "turbineBlade", null, null, "wireFine", "gearGtSmall", "rotor", - "stickLong", "springSmall", "spring", "arrowGtWood", "arrowGtPlastic", "gemChipped", - "gemFlawed", "gemFlawless", "gemExquisite", "gearGt" }; - if (mIt == 3) tags = new String[] { "itemCasing", "nanite" }; - if (tags.length > prefix) tag = tags[prefix]; - if (GregTech_API.sGeneratedMaterials[material] != null) { - tag += GregTech_API.sGeneratedMaterials[material].mName; - if (!oreTags.contains(tag)) oreTags.add(tag); - } else if (material > 0) { - GT_FML_LOGGER.info("MaterialDisabled: " + material + " " + m.group(1)); - } - } - } - } - } - } - } - - final String[] preS = new String[] { "dustTiny", "dustSmall", "dust", "dustImpure", "dustPure", "crushed", - "crushedPurified", "crushedCentrifuged", "gem", "nugget", "ingot", "ingotHot", "ingotDouble", "ingotTriple", - "ingotQuadruple", "ingotQuintuple", "plate", "plateDouble", "plateTriple", "plateQuadruple", - "plateQuintuple", "plateDense", "stick", "lens", "round", "bolt", "screw", "ring", "foil", "cell", - "cellPlasma", "toolHeadSword", "toolHeadPickaxe", "toolHeadShovel", "toolHeadAxe", "toolHeadHoe", - "toolHeadHammer", "toolHeadFile", "toolHeadSaw", "toolHeadDrill", "toolHeadChainsaw", "toolHeadWrench", - "toolHeadUniversalSpade", "toolHeadSense", "toolHeadPlow", "toolHeadArrow", "toolHeadBuzzSaw", - "turbineBlade", "wireFine", "gearGtSmall", "rotor", "stickLong", "springSmall", "spring", "arrowGtWood", - "arrowGtPlastic", "gemChipped", "gemFlawed", "gemFlawless", "gemExquisite", "gearGt", "nanite", - "cellMolten", "rawOre" }; - - List mMTTags = new ArrayList<>(); - oreTags.stream() - .filter(test -> StringUtils.startsWithAny(test, preS)) - .forEach(test -> { - mMTTags.add(test); - if (GT_Values.D1) GT_FML_LOGGER.info("oretag: " + test); - }); - - GT_FML_LOGGER.info("reenableMetaItems"); - - for (String reEnable : mMTTags) { - OrePrefixes tPrefix = OrePrefixes.getOrePrefix(reEnable); - if (tPrefix != null) { - Materials tName = Materials.get(reEnable.replaceFirst(tPrefix.toString(), "")); - if (tName != null) { - tPrefix.mDisabledItems.remove(tName); - tPrefix.mGeneratedItems.add(tName); - if (tPrefix == OrePrefixes.screw) { - OrePrefixes.bolt.mDisabledItems.remove(tName); - OrePrefixes.bolt.mGeneratedItems.add(tName); - OrePrefixes.stick.mDisabledItems.remove(tName); - OrePrefixes.stick.mGeneratedItems.add(tName); - } - if (tPrefix == OrePrefixes.round) { - OrePrefixes.nugget.mDisabledItems.remove(tName); - OrePrefixes.nugget.mGeneratedItems.add(tName); - } - if (tPrefix == OrePrefixes.spring) { - OrePrefixes.stickLong.mDisabledItems.remove(tName); - OrePrefixes.stickLong.mGeneratedItems.add(tName); - OrePrefixes.stick.mDisabledItems.remove(tName); - OrePrefixes.stick.mGeneratedItems.add(tName); - } - if (tPrefix == OrePrefixes.springSmall) { - OrePrefixes.stick.mDisabledItems.remove(tName); - OrePrefixes.stick.mGeneratedItems.add(tName); - } - if (tPrefix == OrePrefixes.stickLong) { - OrePrefixes.stick.mDisabledItems.remove(tName); - OrePrefixes.stick.mGeneratedItems.add(tName); - } - if (tPrefix == OrePrefixes.rotor) { - OrePrefixes.ring.mDisabledItems.remove(tName); - OrePrefixes.ring.mGeneratedItems.add(tName); - } - } else { - GT_FML_LOGGER.info("noMaterial " + reEnable); - } - } else { - GT_FML_LOGGER.info("noPrefix " + reEnable); - } - } - } - - public static void adjustScrap() { - GT_FML_LOGGER.info("GT_Mod: Removing all original Scrapbox Drops."); - try { - Objects.requireNonNull(GT_Utility.getField("ic2.core.item.ItemScrapbox$Drop", "topChance", true, true)) - .set(null, 0); - ((List) Objects.requireNonNull( - GT_Utility.getFieldContent( - GT_Utility.getFieldContent("ic2.api.recipe.Recipes", "scrapboxDrops", true, true), - "drops", - true, - true))).clear(); - } catch (Throwable e) { - if (GT_Values.D1) { - e.printStackTrace(GT_Log.err); - } - } - GT_Log.out.println("GT_Mod: Adding Scrap with a Weight of 200.0F to the Scrapbox Drops."); - GT_ModHandler.addScrapboxDrop(200.0F, GT_ModHandler.getIC2Item("scrap", 1L)); - } - - public static void loadConfig() { - // general - GT_Values.D1 = ConfigDebug.D1; - GT_Values.D2 = ConfigDebug.D2; - GT_Values.allow_broken_recipemap = ConfigDebug.allowBrokenRecipeMap; - GT_Values.debugCleanroom = ConfigDebug.debugCleanroom; - GT_Values.debugDriller = ConfigDebug.debugDriller; - GT_Values.debugWorldGen = ConfigDebug.debugWorldgen; - GT_Values.debugOrevein = ConfigDebug.debugOrevein; - GT_Values.debugSmallOres = ConfigDebug.debugSmallOres; - GT_Values.debugStones = ConfigDebug.debugStones; - GT_Values.debugBlockMiner = ConfigDebug.debugBlockMiner; - GT_Values.debugBlockPump = ConfigDebug.debugBlockPump; - GT_Values.debugEntityCramming = ConfigDebug.debugEntityCramming; - GT_Values.debugWorldData = ConfigDebug.debugWorldData; - GT_Values.oreveinPercentage = ConfigGeneral.oreveinPercentage; - GT_Values.oreveinAttempts = ConfigGeneral.oreveinAttempts; - GT_Values.oreveinMaxPlacementAttempts = ConfigGeneral.oreveinMaxPlacementAttempts; - GT_Values.oreveinPlacerOres = ConfigGeneral.oreveinPlacerOres; - GT_Values.oreveinPlacerOresMultiplier = ConfigGeneral.oreveinPlacerOresMultiplier; - GregTech_API.TICKS_FOR_LAG_AVERAGING = ConfigGeneral.ticksForLagAveraging; - GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING = ConfigGeneral.millisecondThesholdUntilLagWarning; - GregTech_API.sTimber = ConfigGeneral.timber; - GregTech_API.sDrinksAlwaysDrinkable = ConfigGeneral.drinksAlwaysDrinkable; - GregTech_API.sDoShowAllItemsInCreative = ConfigGeneral.doShowAllItemsInCreative; - GregTech_API.sMultiThreadedSounds = ConfigGeneral.multiThreadedSounds; - GT_Mod.gregtechproxy.mMaxEqualEntitiesAtOneSpot = ConfigGeneral.maxEqualEntitiesAtOneSpot; - GT_Mod.gregtechproxy.mFlintChance = ConfigGeneral.flintChance; - GT_Mod.gregtechproxy.mItemDespawnTime = ConfigGeneral.itemDespawnTime; - GT_Mod.gregtechproxy.mAllowSmallBoilerAutomation = ConfigGeneral.allowSmallBoilerAutomation; - GT_Mod.gregtechproxy.mDisableVanillaOres = gregtech.common.config.worldgen.ConfigGeneral.disableVanillaOres; - GT_Mod.gregtechproxy.mIncreaseDungeonLoot = ConfigGeneral.increaseDungeonLoot; - GT_Mod.gregtechproxy.mAxeWhenAdventure = ConfigGeneral.axeWhenAdventure; - GT_Mod.gregtechproxy.mSurvivalIntoAdventure = ConfigGeneral.survivalIntoAdventure; - GT_Mod.gregtechproxy.mHungerEffect = ConfigGeneral.hungerEffect; - GT_Mod.gregtechproxy.mInventoryUnification = ConfigGeneral.inventoryUnification; - GT_Mod.gregtechproxy.mGTBees = ConfigGeneral.GTBees; - GT_Mod.gregtechproxy.mCraftingUnification = ConfigGeneral.craftingUnification; - GT_Mod.gregtechproxy.mNerfedWoodPlank = ConfigGeneral.nerfedWoodPlank; - GT_Mod.gregtechproxy.mNerfedVanillaTools = ConfigGeneral.nerfedVanillaTools; - GT_Mod.gregtechproxy.mAchievements = ConfigGeneral.achievements; - GT_Mod.gregtechproxy.mHideUnusedOres = ConfigGeneral.hideUnusedOres; - GT_Mod.gregtechproxy.mEnableAllMaterials = ConfigGeneral.enableAllMaterials; - GT_Mod.gregtechproxy.mExplosionItemDrop = ConfigGeneral.explosionItemDrop; - GT_Mod.gregtechproxy.mEnableCleanroom = ConfigGeneral.enableCleanroom; - GT_Mod.gregtechproxy.mLowGravProcessing = GalacticraftCore.isModLoaded() && ConfigGeneral.lowGravProcessing; - GT_Mod.gregtechproxy.mCropNeedBlock = ConfigGeneral.cropNeedBlock; - GT_Mod.gregtechproxy.mAMHInteraction = ConfigGeneral.autoMaintenaceHatchesInteraction; - GT_Mod.gregtechproxy.mMixedOreOnlyYieldsTwoThirdsOfPureOre = ConfigGeneral.mixedOreOnlyYieldsTwoThirdsOfPureOre; - GT_Mod.gregtechproxy.mRichOreYieldMultiplier = ConfigGeneral.richOreYieldMultiplier; - GT_Mod.gregtechproxy.mNetherOreYieldMultiplier = ConfigGeneral.netherOreYieldMultiplier; - GT_Mod.gregtechproxy.mEndOreYieldMultiplier = ConfigGeneral.endOreYieldMultiplier; - GT_Mod.gregtechproxy.gt6Pipe = ConfigGeneral.gt6Pipe; - GT_Mod.gregtechproxy.gt6Cable = ConfigGeneral.gt6Cable; - GT_Mod.gregtechproxy.ic2EnergySourceCompat = ConfigGeneral.ic2EnergySourceCompat; - GT_Mod.gregtechproxy.costlyCableConnection = ConfigGeneral.costlyCableConnection; - GT_Mod.gregtechproxy.crashOnNullRecipeInput = ConfigGeneral.crashOnNullRecipeInput; - if ((boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment")) { - GT_Mod.gregtechproxy.crashOnNullRecipeInput = false; // Use flags in GT_RecipeBuilder instead! - } - GT_LanguageManager.i18nPlaceholder = ConfigGeneral.i18nPlaceholder; - GT_MetaTileEntity_LongDistancePipelineBase.minimalDistancePoints = ConfigGeneral.minimalDistancePoints; - GT_Values.mCTMEnabledBlock.addAll(Arrays.asList(ConfigGeneral.CTMWhitelist)); - GT_Values.mCTMDisabledBlock.addAll(Arrays.asList(ConfigGeneral.CTMBlacklist)); - if (ConfigGeneral.harderMobSpawner) { - Blocks.mob_spawner.setHardness(500.0F) - .setResistance(6000000.0F); - } - - // machines - GT_Values.ticksBetweenSounds = ConfigMachines.ticksBetweenSounds; - GT_Values.blacklistedTileEntiyClassNamesForWA = ConfigMachines.blacklistedTileEntiyClassNamesForWA; - GT_Values.cleanroomGlass = ConfigMachines.cleanroomGlass; - GT_Values.enableChunkloaders = ConfigMachines.enableChunkloaders; - GT_Values.alwaysReloadChunkloaders = ConfigMachines.alwaysReloadChunkloaders; - GT_Values.debugChunkloaders = ConfigDebug.debugChunkloaders; - GT_Values.disableDigitalChestsExternalAccess = ConfigMachines.disableDigitalChestsExternalAccess; - GT_Values.enableMultiTileEntities = ConfigMachines.enableMultiTileEntities - || (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); - GregTech_API.sMachineExplosions = ConfigMachines.machineExplosions; - GregTech_API.sMachineFlammable = ConfigMachines.machineFlammable; - GregTech_API.sMachineNonWrenchExplosions = ConfigMachines.machineNonWrenchExplosions; - GregTech_API.sMachineWireFire = ConfigMachines.machineWireFire; - GregTech_API.sMachineFireExplosions = ConfigMachines.machineFireExplosions; - GregTech_API.sMachineRainExplosions = ConfigMachines.machineRainExplosions; - GregTech_API.sMachineThunderExplosions = ConfigMachines.machineThunderExplosions; - GregTech_API.sColoredGUI = ConfigMachines.coloredGUI; - GregTech_API.sMachineMetalGUI = ConfigMachines.machineMetalGUI; - // Implementation for this is actually handled in NewHorizonsCoreMod in MainRegistry.java! - GregTech_API.sUseMachineMetal = ConfigMachines.useMachineMetal; - - // client - loadClientConfig(); - - // Pollution - GT_Mod.gregtechproxy.mPollution = ConfigPollution.pollution; - GT_Mod.gregtechproxy.mPollutionSmogLimit = ConfigPollution.pollutionSmogLimit; - GT_Mod.gregtechproxy.mPollutionPoisonLimit = ConfigPollution.pollutionPoisonLimit; - GT_Mod.gregtechproxy.mPollutionVegetationLimit = ConfigPollution.pollutionVegetationLimit; - GT_Mod.gregtechproxy.mPollutionSourRainLimit = ConfigPollution.pollutionSourRainLimit; - GT_Mod.gregtechproxy.mPollutionOnExplosion = ConfigPollution.pollutionOnExplosion; - GT_Mod.gregtechproxy.mPollutionPrimitveBlastFurnacePerSecond = ConfigPollution.pollutionPrimitveBlastFurnacePerSecond; - GT_Mod.gregtechproxy.mPollutionCharcoalPitPerSecond = ConfigPollution.pollutionCharcoalPitPerSecond; - GT_Mod.gregtechproxy.mPollutionEBFPerSecond = ConfigPollution.pollutionEBFPerSecond; - GT_Mod.gregtechproxy.mPollutionLargeCombustionEnginePerSecond = ConfigPollution.pollutionLargeCombustionEnginePerSecond; - GT_Mod.gregtechproxy.mPollutionExtremeCombustionEnginePerSecond = ConfigPollution.pollutionExtremeCombustionEnginePerSecond; - GT_Mod.gregtechproxy.mPollutionImplosionCompressorPerSecond = ConfigPollution.pollutionImplosionCompressorPerSecond; - GT_Mod.gregtechproxy.mPollutionLargeBronzeBoilerPerSecond = ConfigPollution.pollutionLargeBronzeBoilerPerSecond; - GT_Mod.gregtechproxy.mPollutionLargeSteelBoilerPerSecond = ConfigPollution.pollutionLargeSteelBoilerPerSecond; - GT_Mod.gregtechproxy.mPollutionLargeTitaniumBoilerPerSecond = ConfigPollution.pollutionLargeTitaniumBoilerPerSecond; - GT_Mod.gregtechproxy.mPollutionLargeTungstenSteelBoilerPerSecond = ConfigPollution.pollutionLargeTungstenSteelBoilerPerSecond; - GT_Mod.gregtechproxy.mPollutionReleasedByThrottle = ConfigPollution.pollutionReleasedByThrottle; - GT_Mod.gregtechproxy.mPollutionLargeGasTurbinePerSecond = ConfigPollution.pollutionLargeGasTurbinePerSecond; - GT_Mod.gregtechproxy.mPollutionMultiSmelterPerSecond = ConfigPollution.pollutionMultiSmelterPerSecond; - GT_Mod.gregtechproxy.mPollutionPyrolyseOvenPerSecond = ConfigPollution.pollutionPyrolyseOvenPerSecond; - GT_Mod.gregtechproxy.mPollutionSmallCoalBoilerPerSecond = ConfigPollution.pollutionSmallCoalBoilerPerSecond; - GT_Mod.gregtechproxy.mPollutionHighPressureLavaBoilerPerSecond = ConfigPollution.pollutionHighPressureLavaBoilerPerSecond; - GT_Mod.gregtechproxy.mPollutionHighPressureCoalBoilerPerSecond = ConfigPollution.pollutionHighPressureCoalBoilerPerSecond; - GT_Mod.gregtechproxy.mPollutionBaseDieselGeneratorPerSecond = ConfigPollution.pollutionBaseDieselGeneratorPerSecond; - double[] mPollutionDieselGeneratorReleasedByTier = ConfigPollution.pollutionDieselGeneratorReleasedByTier; - if (mPollutionDieselGeneratorReleasedByTier.length - == GT_Mod.gregtechproxy.mPollutionDieselGeneratorReleasedByTier.length) { - GT_Mod.gregtechproxy.mPollutionDieselGeneratorReleasedByTier = mPollutionDieselGeneratorReleasedByTier; - } else { - GT_FML_LOGGER - .error("The Length of the Diesel Turbine Pollution Array Config must be the same as the Default"); - } - GT_Mod.gregtechproxy.mPollutionBaseGasTurbinePerSecond = ConfigPollution.pollutionBaseGasTurbinePerSecond; - double[] mPollutionGasTurbineReleasedByTier = ConfigPollution.pollutionGasTurbineReleasedByTier; - if (mPollutionGasTurbineReleasedByTier.length - == GT_Mod.gregtechproxy.mPollutionGasTurbineReleasedByTier.length) { - GT_Mod.gregtechproxy.mPollutionGasTurbineReleasedByTier = mPollutionGasTurbineReleasedByTier; - } else { - GT_FML_LOGGER.error("The Length of the Gas Turbine Pollution Array Config must be the same as the Default"); - } - - // cleanroom file - if (GT_Mod.gregtechproxy.mEnableCleanroom) GT_MetaTileEntity_Cleanroom.loadConfig(GT_Config.cleanroomFile); - - // underground fluids file - GT_Mod.gregtechproxy.mUndergroundOil.getConfig(GT_Config.undergroundFluidsFile, "undergroundfluid"); - - // Worldgeneration.cfg - GT_Mod.gregtechproxy.enableUndergroundGravelGen = gregtech.common.config.worldgen.ConfigGeneral.generateUndergroundGravelGen; - GT_Mod.gregtechproxy.enableUndergroundDirtGen = gregtech.common.config.worldgen.ConfigGeneral.generateUndergroundDirtGen; - GT_Mod.gregtechproxy.enableBlackGraniteOres = gregtech.common.config.worldgen.ConfigGeneral.generateBlackGraniteOres; - GT_Mod.gregtechproxy.enableRedGraniteOres = gregtech.common.config.worldgen.ConfigGeneral.generateBlackGraniteOres; - GT_Mod.gregtechproxy.enableMarbleOres = gregtech.common.config.worldgen.ConfigGeneral.generateMarbleOres; - GT_Mod.gregtechproxy.enableBasaltOres = gregtech.common.config.worldgen.ConfigGeneral.generateBasaltOres; - - // OverpoweredStuff.cfg - GregTech_API.mOutputRF = gregtech.common.config.opstuff.ConfigGeneral.outputRF; - GregTech_API.mInputRF = gregtech.common.config.opstuff.ConfigGeneral.inputRF; - GregTech_API.mEUtoRF = gregtech.common.config.opstuff.ConfigGeneral.howMuchRFWith100EUInInput; - GregTech_API.mRFtoEU = gregtech.common.config.opstuff.ConfigGeneral.howMuchEUWith100RFInInput; - GregTech_API.mRFExplosions = gregtech.common.config.opstuff.ConfigGeneral.RFExplosions; - - // MachineStats.cfg - GT_Mod.gregtechproxy.mForceFreeFace = gregtech.common.config.machinestats.ConfigMachines.forceFreeFace; - - // ore_drop_behavior - try { - GT_Log.out.println("Trying to set it to: " + ConfigOreDropBehavior.setting); - GT_Mod.gregtechproxy.oreDropSystem = GT_Proxy.OreDropSystem.valueOf(ConfigOreDropBehavior.setting);; - } catch (IllegalArgumentException e) { - GT_Log.err.println(e); - GT_Mod.gregtechproxy.oreDropSystem = GT_Proxy.OreDropSystem.FortuneItem; - } - - // features - GT_Mod.gregtechproxy.mUpgradeCount = Math.min(64, Math.max(1, ConfigFeatures.upgradeStackSize)); - for (OrePrefixes tPrefix : OrePrefixes.values()) { - if (tPrefix.mIsUsedForOreProcessing) { - tPrefix.mDefaultStackSize = ((byte) Math.min(64, Math.max(1, ConfigFeatures.maxOreStackSize))); - } else if (tPrefix == OrePrefixes.plank) { - tPrefix.mDefaultStackSize = ((byte) Math.min(64, Math.max(16, ConfigFeatures.maxPlankStackSize))); - } else if ((tPrefix == OrePrefixes.wood) || (tPrefix == OrePrefixes.treeLeaves) - || (tPrefix == OrePrefixes.treeSapling) - || (tPrefix == OrePrefixes.log)) { - tPrefix.mDefaultStackSize = ((byte) Math.min(64, Math.max(16, ConfigFeatures.maxLogStackSize))); - } else if (tPrefix.mIsUsedForBlocks) { - tPrefix.mDefaultStackSize = ((byte) Math - .min(64, Math.max(16, ConfigFeatures.maxOtherBlocksStackSize))); - } - } - - GT_RecipeBuilder.onConfigLoad(); - } - - public static void parseHex(Dyes dye, String hexString) { - dye.mRGBa[0] = Short.parseShort(hexString.substring(1, 3), 16); - dye.mRGBa[1] = Short.parseShort(hexString.substring(3, 5), 16); - dye.mRGBa[2] = Short.parseShort(hexString.substring(5), 16); - } - - public static void loadClientConfig() { - Arrays.stream(Dyes.values()) - .filter(dye -> (dye != Dyes._NULL) && (dye.mIndex < 0)) - .forEach(dye -> { - switch (dye.toString() - .toLowerCase()) { - case "cable_insulation" -> parseHex(dye, ConfigColorModulation.cableInsulation); - case "construction_foam" -> parseHex(dye, ConfigColorModulation.constructionFoam); - case "machine_metal" -> parseHex(dye, ConfigColorModulation.machineMetal); - default -> { - GT_FML_LOGGER.warn( - "unknown color modulation entry: " + dye - + ". Report this pls, as config is missing this entry being parsed in code."); - } - } - }); - GT_Mod.gregtechproxy.mRenderTileAmbientOcclusion = ConfigRender.renderTileAmbientOcclusion; - GT_Mod.gregtechproxy.mRenderGlowTextures = ConfigRender.renderGlowTextures; - GT_Mod.gregtechproxy.mRenderFlippedMachinesFlipped = ConfigRender.renderFlippedMachinesFlipped; - GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch = ConfigRender.renderIndicatorsOnHatch; - GT_Mod.gregtechproxy.mRenderDirtParticles = ConfigRender.renderDirtParticles; - GT_Mod.gregtechproxy.mRenderPollutionFog = ConfigRender.renderPollutionFog; - GT_Mod.gregtechproxy.mRenderItemDurabilityBar = ConfigRender.renderItemDurabilityBar; - GT_Mod.gregtechproxy.mRenderItemChargeBar = ConfigRender.renderItemChargeBar; - GT_Mod.gregtechproxy.mUseBlockUpdateHandler = ConfigRender.useBlockUpdateHandler; - - GT_Mod.gregtechproxy.mCoverTabsVisible = ConfigInterface.coverTabsVisible; - GT_Mod.gregtechproxy.mCoverTabsFlipped = ConfigInterface.coverTabsFlipped; - GT_Mod.gregtechproxy.mTooltipVerbosity = ConfigInterface.tooltipVerbosity; - GT_Mod.gregtechproxy.mTooltipShiftVerbosity = ConfigInterface.tooltipShiftVerbosity; - GT_Mod.gregtechproxy.mTitleTabStyle = ConfigInterface.titleTabStyle; - - GT_Mod.gregtechproxy.mNEIRecipeSecondMode = GregTech_API.NEIClientFIle.get("nei", "RecipeSecondMode", true); - GT_Mod.gregtechproxy.mNEIRecipeOwner = GregTech_API.NEIClientFIle.get("nei", "RecipeOwner", false); - GT_Mod.gregtechproxy.mNEIRecipeOwnerStackTrace = GregTech_API.NEIClientFIle - .get("nei", "RecipeOwnerStackTrace", false); - GT_Mod.gregtechproxy.mNEIOriginalVoltage = GregTech_API.NEIClientFIle.get("nei", "OriginalVoltage", false); - - GT_Mod.gregtechproxy.recipeCategorySettings.clear(); - for (RecipeCategory recipeCategory : findRecipeCategories()) { - RecipeCategorySetting setting = RecipeCategorySetting.find( - GregTech_API.NEIClientFIle.getWithValidValues( - "nei.recipe_categories", - recipeCategory.unlocalizedName, - RecipeCategorySetting.NAMES, - RecipeCategorySetting.getDefault() - .toName())); - GT_Mod.gregtechproxy.recipeCategorySettings.put(recipeCategory, setting); - } - - GT_Mod.gregtechproxy.mWailaTransformerVoltageTier = ConfigWaila.wailaTransformerVoltageTier; - GT_Mod.gregtechproxy.wailaAverageNS = ConfigWaila.wailaAverageNS; - - GT_Mod.gregtechproxy.reloadNEICache(); - } - - private static List findRecipeCategories() { - List ret = new ArrayList<>(); - try { - Field discovererField = Loader.class.getDeclaredField("discoverer"); - discovererField.setAccessible(true); - ModDiscoverer discoverer = (ModDiscoverer) discovererField.get(Loader.instance()); - for (ASMDataTable.ASMData asmData : discoverer.getASMTable() - .getAll(RecipeCategoryHolder.class.getName())) { - try { - Object obj = Class.forName(asmData.getClassName()) - .getDeclaredField(asmData.getObjectName()) - .get(null); - if (obj instanceof RecipeCategory recipeCategory) { - ret.add(recipeCategory); - } else { - GT_FML_LOGGER.error( - "{}#{} is not an instance of RecipeCategory", - asmData.getClassName(), - asmData.getObjectName()); - } - } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { - GT_FML_LOGGER.error("Failed to find RecipeCategory"); - GT_FML_LOGGER.catching(e); - } - } - } catch (NoSuchFieldException | IllegalAccessException e) { - throw new RuntimeException(e); - } - return ret; - } -} diff --git a/src/main/java/gregtech/loaders/preload/LoaderCircuitBehaviors.java b/src/main/java/gregtech/loaders/preload/LoaderCircuitBehaviors.java new file mode 100644 index 0000000000..8bb2300000 --- /dev/null +++ b/src/main/java/gregtech/loaders/preload/LoaderCircuitBehaviors.java @@ -0,0 +1,31 @@ +package gregtech.loaders.preload; + +import gregtech.api.util.GTLog; +import gregtech.common.redstonecircuits.CircuitBasicLogic; +import gregtech.common.redstonecircuits.CircuitBitAnd; +import gregtech.common.redstonecircuits.CircuitCombinationLock; +import gregtech.common.redstonecircuits.CircuitEquals; +import gregtech.common.redstonecircuits.CircuitPulser; +import gregtech.common.redstonecircuits.CircuitRandomizer; +import gregtech.common.redstonecircuits.CircuitRedstoneMeter; +import gregtech.common.redstonecircuits.CircuitRepeater; +import gregtech.common.redstonecircuits.CircuitTimer; + +public class LoaderCircuitBehaviors implements Runnable { + + @Override + public void run() { + GTLog.out.println("GTMod: Register Redstone Circuit behaviours."); + new CircuitTimer(0); + new CircuitBasicLogic(1); + new CircuitRepeater(2); + new CircuitPulser(3); + new CircuitRedstoneMeter(4); + + new CircuitRandomizer(8); + + new CircuitCombinationLock(16); + new CircuitBitAnd(17); + new CircuitEquals(18); + } +} diff --git a/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java new file mode 100644 index 0000000000..7bf36c1e33 --- /dev/null +++ b/src/main/java/gregtech/loaders/preload/LoaderGTBlockFluid.java @@ -0,0 +1,2121 @@ +package gregtech.loaders.preload; + +import static gregtech.api.enums.FluidState.GAS; +import static gregtech.api.enums.FluidState.LIQUID; +import static gregtech.api.enums.FluidState.MOLTEN; +import static gregtech.api.enums.FluidState.SLURRY; +import static gregtech.api.enums.Mods.AppliedEnergistics2; +import static gregtech.api.enums.Mods.PamsHarvestCraft; +import static gregtech.api.enums.Mods.Railcraft; +import static gregtech.api.enums.Mods.Thaumcraft; +import static gregtech.api.enums.Mods.TwilightForest; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.WILDCARD; + +import java.util.Locale; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidRegistry; + +import codechicken.nei.api.API; +import cpw.mods.fml.common.event.FMLInterModComms; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsKevlar; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TierEU; +import gregtech.api.fluid.GTFluidFactory; +import gregtech.api.items.BlockLongDistancePipe; +import gregtech.api.items.GTGenericItem; +import gregtech.api.items.ItemBreederCell; +import gregtech.api.items.ItemRadioactiveCellIC; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.BlockCasings1; +import gregtech.common.blocks.BlockCasings10; +import gregtech.common.blocks.BlockCasings11; +import gregtech.common.blocks.BlockCasings2; +import gregtech.common.blocks.BlockCasings3; +import gregtech.common.blocks.BlockCasings4; +import gregtech.common.blocks.BlockCasings5; +import gregtech.common.blocks.BlockCasings6; +import gregtech.common.blocks.BlockCasings8; +import gregtech.common.blocks.BlockCasings9; +import gregtech.common.blocks.BlockConcretes; +import gregtech.common.blocks.BlockCyclotronCoils; +import gregtech.common.blocks.BlockDrone; +import gregtech.common.blocks.BlockFrameBox; +import gregtech.common.blocks.BlockGlass1; +import gregtech.common.blocks.BlockGranites; +import gregtech.common.blocks.BlockLaser; +import gregtech.common.blocks.BlockMachines; +import gregtech.common.blocks.BlockMetal; +import gregtech.common.blocks.BlockOres; +import gregtech.common.blocks.BlockReinforced; +import gregtech.common.blocks.BlockStones; +import gregtech.common.blocks.BlockTintedIndustrialGlass; +import gregtech.common.blocks.BlockWormholeRender; +import gregtech.common.blocks.TileEntityOres; +import gregtech.common.items.ItemDepletedCell; +import gregtech.common.items.ItemFluidDisplay; +import gregtech.common.items.ItemIntegratedCircuit; +import gregtech.common.items.ItemNeutronReflector; +import gregtech.common.items.ItemTierDrone; +import gregtech.common.items.ItemVolumetricFlask; +import gregtech.common.items.ItemWirelessHeadphones; +import gregtech.common.items.MetaGeneratedItem01; +import gregtech.common.items.MetaGeneratedItem02; +import gregtech.common.items.MetaGeneratedItem03; +import gregtech.common.items.MetaGeneratedItem98; +import gregtech.common.items.MetaGeneratedItem99; +import gregtech.common.items.MetaGeneratedTool01; +import gregtech.common.tileentities.render.TileEntityDrone; +import gregtech.common.tileentities.render.TileEntityLaser; +import gregtech.common.tileentities.render.TileEntityWormhole; + +public class LoaderGTBlockFluid implements Runnable { + + @Override + public void run() { + Materials.Water.mFluid = (Materials.Ice.mFluid = GTModHandler.getWater(1000L) + .getFluid()); + Materials.Lava.mFluid = GTModHandler.getLava(1000L) + .getFluid(); + + GTLog.out.println("GTMod: Register Books."); + + GTUtility.getWrittenBook( + "Manual_Printer", + "Printer Manual V2.0", + "Gregorius Techneticies", + "This Manual explains the different Functionalities the GregTech Printing Factory has built in, which are not in NEI. Most got NEI Support now, but there is still some left without it.", + "1. Coloring Items and Blocks: You know those Crafting Recipes, which have a dye surrounded by 8 Item to dye them? Or the ones which have just one Item and one Dye in the Grid? Those two Recipe Types can be cheaply automated using the Printer.", + "The Colorization Functionality even optimizes the Recipes, which normally require 8 Items + 1 Dye to 1 Item and an 8th of the normally used Dye in Fluid Form, isn't that awesome?", + "2. Copying Books: This Task got slightly harder. The first Step is putting the written and signed Book inside the Scanner with a Data Stick ready to receive the Data.", + "Now insert the Stick into the Data Slot of the Printer and add 3 pieces of Paper together with 144 Liters of actual Ink Fluid. Water mixed and chemical Dyes won't work on Paper without messing things up!", + "You got a stack of Pages for your new Book, just put them into the Assembler with some Glue and a piece of Leather for the Binding, and you receive an identical copy of the Book, which would stack together with the original.", + "3. Renaming Items: This Functionality is no longer Part of the Printer. There is now a Name Mold for the Forming Press to imprint a Name into an Item, just rename the Mold in an Anvil and use it in the Forming Press on any Item.", + "4. Crafting of Books, Maps, Nametags etc etc etc: Those Recipes moved to other Machines, just look them up in NEI."); + + GTUtility.getWrittenBook( + "Manual_Punch_Cards", + "Punch Card Manual V0.0", + "Gregorius Techneticies", + "This Manual will explain the Functionality of the Punch Cards, once they are fully implemented. And no, they won't be like the IRL Punch Cards. This is just a current Idea Collection.", + "(i1&&i2)?o1=15:o1=0;=10", + "ignore all Whitespace Characters, use Long for saving the Numbers", + "&& || ^^ & | ^ ! ++ -- + - % / // * ** << >> >>> < > <= >= == != ~ ( ) ?: , ; ;= ;=X; = i0 i1 i2 i3 i4 i5 o0 o1 o2 o3 o4 o5 v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 m0 m1 m2 m3 m4 m5 m6 m7 m8 m9 A B C D E F", + "'0' = false, 'everything but 0' = true, '!' turns '0' into '1' and everything else into '0'", + "',' is just a separator for multiple executed Codes in a row.", + "';' means that the Program waits until the next tick before continuing. ';=10' and ';=10;' both mean that it will wait 10 Ticks instead of 1. And ';=0' or anything < 0 will default to 0.", + "If the '=' Operator is used within Brackets, it returns the value the variable has been set to.", + "The Program saves the Char Index of the current Task, the 10 Variables (which reset to 0 as soon as the Program Loop stops), the 10 Member Variables and the remaining waiting Time in its NBT.", + "A = 10, B = 11, C = 12, D = 13, E = 14, F = 15, just for Hexadecimal Space saving, since Redstone has only 4 Bits.", + "For implementing Loops you just need 1 Punch Card per Loop, these Cards can restart once they are finished, depending on how many other Cards there are in the Program Loop you inserted your Card into, since it will process them procedurally.", + "A Punch Card Processor can run up to four Loops, each with the length of seven Punch Cards, parallel.", + "Why does the Punch Card need Ink to be made, you ask? Because the empty one needs to have some lines on, and the for the punched one it prints the Code to execute in a human readable format on the Card."); + + GTUtility.getWrittenBook( + "Manual_Microwave", + "Microwave Oven Manual", + "Kitchen Industries", + "Congratulations, you inserted a random seemingly empty Book into the Microwave and these Letters appeared out of nowhere.", + "You just got a Microwave Oven and asked yourself 'why do I even need it?'. It's simple, the Microwave can cook for just 128 EU and at an insane speed. Not even a normal E-furnace can do it that fast and cheap!", + "This is the cheapest and fastest way to cook for you. That is why the Microwave Oven can be found in almost every Kitchen (see www.youwannabuyakitchen.ly).", + "Long time exposure to Microwaves can cause Cancer, but we doubt Steve lives long enough to die because of that.", + "Do not insert any Metals. It might result in an Explosion.", + "Do not dry Animals with it. It will result in a Hot Dog, no matter which Animal you put into it.", + "Do not insert inflammable Objects. The Oven will catch on Fire.", + "Do not insert Explosives such as Eggs. Just don't."); + + GTLog.out.println("GTMod: Register Items."); + + new ItemIntegratedCircuit(); + new MetaGeneratedItem01(); + new MetaGeneratedItem02(); + new MetaGeneratedItem03(); + // GT_MetaGenerated_Item_98 is initialized in GTProxy.onPostLoad() because we need to wait for fluids to be + // registered. + // Pre-initialization needs to happen before then, though, because the cell icons get deleted at some point + // between load and post-load. + MetaGeneratedItem98.preInit(); + new MetaGeneratedItem99(); + new MetaGeneratedTool01(); + new ItemFluidDisplay(); + new ItemWirelessHeadphones(); + + // Tiered recipe materials actually appear to be set in MTEBasicMachineWithRecipe, making these + // unused + ItemList.Rotor_LV.set(GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Tin, 1L)); + ItemList.Rotor_MV.set(GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Bronze, 1L)); + ItemList.Rotor_HV.set(GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Steel, 1L)); + ItemList.Rotor_EV.set(GTOreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 1L)); + ItemList.Rotor_IV.set(GTOreDictUnificator.get(OrePrefixes.rotor, Materials.TungstenSteel, 1L)); + + ItemList.VOLUMETRIC_FLASK.set(new ItemVolumetricFlask("Volumetric_Flask", "Volumetric flask", 1000)); + + Item tItem = (Item) GTUtility.callConstructor( + "gregtech.common.items.GT_SensorCard_Item", + 0, + null, + false, + new Object[] { "sensorcard", "GregTech Sensor Card" }); + ItemList.NC_SensorCard.set( + tItem == null ? new GTGenericItem("sensorcard", "GregTech Sensor Card", "Nuclear Control not installed") + : tItem); + + Item advSensorCard = (Item) GTUtility + .callConstructor("gregtech.common.items.GT_AdvancedSensorCard_Item", 0, null, false); + ItemList.NC_AdvancedSensorCard.set( + advSensorCard == null + ? new GTGenericItem( + "advancedsensorcard", + "GregTech Advanced Sensor Card", + "Nuclear Control not installed") + : advSensorCard); + + ItemList.Neutron_Reflector.set(new ItemNeutronReflector("neutronreflector", "Iridium Neutron Reflector", 0)); + ItemList.Reactor_Coolant_He_1 + .set(GregTechAPI.constructCoolantCellItem("60k_Helium_Coolantcell", "60k He Coolant Cell", 60000)); + ItemList.Reactor_Coolant_He_3 + .set(GregTechAPI.constructCoolantCellItem("180k_Helium_Coolantcell", "180k He Coolant Cell", 180000)); + ItemList.Reactor_Coolant_He_6 + .set(GregTechAPI.constructCoolantCellItem("360k_Helium_Coolantcell", "360k He Coolant Cell", 360000)); + ItemList.Reactor_Coolant_NaK_1 + .set(GregTechAPI.constructCoolantCellItem("60k_NaK_Coolantcell", "60k NaK Coolantcell", 60000)); + ItemList.Reactor_Coolant_NaK_3 + .set(GregTechAPI.constructCoolantCellItem("180k_NaK_Coolantcell", "180k NaK Coolantcell", 180000)); + ItemList.Reactor_Coolant_NaK_6 + .set(GregTechAPI.constructCoolantCellItem("360k_NaK_Coolantcell", "360k NaK Coolantcell", 360000)); + + ItemList.Reactor_Coolant_Sp_1 + .set(GregTechAPI.constructCoolantCellItem("180k_Space_Coolantcell", "180k Sp Coolant Cell", 180000)); + + ItemList.Reactor_Coolant_Sp_2 + .set(GregTechAPI.constructCoolantCellItem("360k_Space_Coolantcell", "360k Sp Coolant Cell", 360000)); + + ItemList.Reactor_Coolant_Sp_3 + .set(GregTechAPI.constructCoolantCellItem("540k_Space_Coolantcell", "540k Sp Coolant Cell", 540000)); + + ItemList.Reactor_Coolant_Sp_6 + .set(GregTechAPI.constructCoolantCellItem("1080k_Space_Coolantcell", "1080k Sp Coolant Cell", 1080000)); + + ItemList.GlowstoneCell.set( + new ItemBreederCell( + "glowstoneCell", + "Glowstone Fuel Rod", + "Source of sunnarium", + 3000, + 1, + 10000, + () -> ItemList.SunnariumCell.get(1))); + ItemList.SunnariumCell.set(new ItemDepletedCell("sunnariumCell", "Sunnarium Fuel Rod", 1)); + + ItemList.neutroniumHeatCapacitor.set( + GregTechAPI + .constructCoolantCellItem("neutroniumHeatCapacitor", "1G Neutronium Heat Capacitor", 1000000000)); + + ItemList.Depleted_Thorium_1.set(new ItemDepletedCell("ThoriumcellDep", "Fuel Rod (Depleted Thorium)", 1)); + ItemList.Depleted_Thorium_2 + .set(new ItemDepletedCell("Double_ThoriumcellDep", "Dual Fuel Rod (Depleted Thorium)", 1)); // TODO + // CHECK + // num + ItemList.Depleted_Thorium_4 + .set(new ItemDepletedCell("Quad_ThoriumcellDep", "Quad Fuel Rod (Depleted Thorium)", 1)); // TODO + // CHECK + // num + ItemList.ThoriumCell_1.set( + new ItemRadioactiveCellIC( + "Thoriumcell", + "Fuel Rod (Thorium)", + 1, + 50000, + 0.4F, + 0, + 0.25F, + ItemList.Depleted_Thorium_1.get(1), + false)); + ItemList.ThoriumCell_2.set( + new ItemRadioactiveCellIC( + "Double_Thoriumcell", + "Dual Fuel Rod (Thorium)", + 2, + 50000, + 0.4F, + 0, + 0.25F, + ItemList.Depleted_Thorium_2.get(1), + false)); + ItemList.ThoriumCell_4.set( + new ItemRadioactiveCellIC( + "Quad_Thoriumcell", + "Quad Fuel Rod (Thorium)", + 4, + 50000, + 0.4F, + 0, + 0.25F, + ItemList.Depleted_Thorium_4.get(1), + false)); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Thorium_1.get(1)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lutetium, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L)) + .duration(25 * SECONDS) + .eut(48) + .addTo(thermalCentrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Thorium_2.get(1)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lutetium, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 3L)) + .duration(25 * SECONDS) + .eut(48) + .addTo(thermalCentrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Thorium_4.get(1)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lutetium, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 6L)) + .duration(25 * SECONDS) + .eut(48) + .addTo(thermalCentrifugeRecipes); + + ItemList.Depleted_Naquadah_1.set(new ItemDepletedCell("NaquadahcellDep", "Fuel Rod (Depleted Naquadah)", 1)); + ItemList.Depleted_Naquadah_2 + .set(new ItemDepletedCell("Double_NaquadahcellDep", "Dual Fuel Rod (Depleted Naquadah)", 1)); + ItemList.Depleted_Naquadah_4 + .set(new ItemDepletedCell("Quad_NaquadahcellDep", "Quad Fuel Rod (Depleted Naquadah)", 1)); + ItemList.NaquadahCell_1.set( + new ItemRadioactiveCellIC( + "Naquadahcell", + "Fuel Rod (Naquadah)", + 1, + 100000, + 4F, + 1, + 1F, + ItemList.Depleted_Naquadah_1.get(1), + false)); + ItemList.NaquadahCell_2.set( + new ItemRadioactiveCellIC( + "Double_Naquadahcell", + "Dual Fuel Rod (Naquadah)", + 2, + 100000, + 4F, + 1, + 1F, + ItemList.Depleted_Naquadah_2.get(1), + false)); + ItemList.NaquadahCell_4.set( + new ItemRadioactiveCellIC( + "Quad_Naquadahcell", + "Quad Fuel Rod (Naquadah)", + 4, + 100000, + 4F, + 1, + 1F, + ItemList.Depleted_Naquadah_4.get(1), + false)); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Naquadah_1.get(1)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1L), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Naquadria, 2L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.NaquadahEnriched, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 8L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1L)) + .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Naquadah_2.get(1)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 1L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.NaquadahEnriched, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 18L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 2L)) + .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_Naquadah_4.get(1)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 2L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.NaquadahEnriched, 8L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 38L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 4L)) + .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) + .duration(100 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + ItemList.Depleted_MNq_1.set(new ItemDepletedCell("MNqCellDep", "Fuel Rod (Depleted Nq*)", 1)); + ItemList.Depleted_MNq_2.set(new ItemDepletedCell("Double_MNqCellDep", "Dual Fuel Rod (Depleted Nq*)", 1)); + ItemList.Depleted_MNq_4.set(new ItemDepletedCell("Quad_MNqCellDep", "Quad Fuel Rod (Depleted Nq*)", 1)); + ItemList.MNqCell_1.set( + new ItemRadioactiveCellIC( + "MNqCell", + "Fuel Rod (Nq* - MOX like behaviour)", + 1, + 100000, + 4F, + 1, + 1F, + ItemList.Depleted_MNq_1.get(1), + true)); + ItemList.MNqCell_2.set( + new ItemRadioactiveCellIC( + "Double_MNqCell", + "Dual Fuel Rod (Nq* - MOX like behaviour)", + 2, + 100000, + 4F, + 1, + 1F, + ItemList.Depleted_MNq_2.get(1), + true)); + ItemList.MNqCell_4.set( + new ItemRadioactiveCellIC( + "Quad_MNqCell", + "Quad Fuel Rod (Nq* - MOX like behaviour)", + 4, + 100000, + 4F, + 1, + 1F, + ItemList.Depleted_MNq_4.get(1), + true)); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_MNq_1.get(1)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 1L), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.NaquadahEnriched, 2L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadria, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 8L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 1L)) + .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_MNq_2.get(1)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 1L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadria, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 18L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 2L)) + .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Depleted_MNq_4.get(1)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadah, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.NaquadahEnriched, 2L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Naquadria, 8L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.TungstenSteel, 38L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 4L)) + .outputChances(10_000, 5_000, 5_000, 2_500, 10_000, 10_000) + .duration(100 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(centrifugeRecipes); + + ItemList.Uraniumcell_1.set( + new ItemRadioactiveCellIC( + "reactorUraniumSimple", + "Fuel Rod (Uranium)", + 1, + 20000, + 2F, + 1, + 1F, + GTModHandler.getIC2Item("reactorDepletedUraniumSimple", 1), + false)); + ItemList.Uraniumcell_2.set( + new ItemRadioactiveCellIC( + "reactorUraniumDual", + "Dual Fuel Rod (Uranium)", + 2, + 20000, + 2F, + 1, + 1F, + GTModHandler.getIC2Item("reactorDepletedUraniumDual", 1), + false)); + ItemList.Uraniumcell_4.set( + new ItemRadioactiveCellIC( + "reactorUraniumQuad", + "Quad Fuel Rod (Uranium)", + 4, + 20000, + 2F, + 1, + 1F, + GTModHandler.getIC2Item("reactorDepletedUraniumQuad", 1), + false)); + ItemList.Moxcell_1.set( + new ItemRadioactiveCellIC( + "reactorMOXSimple", + "Fuel Rod (Mox)", + 1, + 10000, + 2F, + 1, + 1F, + GTModHandler.getIC2Item("reactorDepletedMOXSimple", 1), + true)); + ItemList.Moxcell_2.set( + new ItemRadioactiveCellIC( + "reactorMOXDual", + "Dual Fuel Rod (Mox)", + 2, + 10000, + 2F, + 1, + 1F, + GTModHandler.getIC2Item("reactorDepletedMOXDual", 1), + true)); + ItemList.Moxcell_4.set( + new ItemRadioactiveCellIC( + "reactorMOXQuad", + "Quad Fuel Rod (Mox)", + 4, + 10000, + 2F, + 1, + 1F, + GTModHandler.getIC2Item("reactorDepletedMOXQuad", 1), + true)); + + GTLog.out.println("GTMod: Adding Blocks."); + GregTechAPI.sBlockMachines = new BlockMachines(); + GregTechAPI.sBlockCasings1 = new BlockCasings1(); + GregTechAPI.sBlockCasings2 = new BlockCasings2(); + GregTechAPI.sBlockCasings3 = new BlockCasings3(); + GregTechAPI.sBlockCasings4 = new BlockCasings4(); + GregTechAPI.sBlockCasings5 = new BlockCasings5(); + GregTechAPI.sBlockCasings6 = new BlockCasings6(); + GregTechAPI.sBlockCasings8 = new BlockCasings8(); + GregTechAPI.sBlockCasings9 = new BlockCasings9(); + GregTechAPI.sBlockCasings10 = new BlockCasings10(); + GregTechAPI.sBlockCasings11 = new BlockCasings11(); + GregTechAPI.sBlockGranites = new BlockGranites(); + GregTechAPI.sBlockLongDistancePipes = new BlockLongDistancePipe(); + GregTechAPI.sBlockConcretes = new BlockConcretes(); + GregTechAPI.sBlockStones = new BlockStones(); + GregTechAPI.sBlockOres1 = new BlockOres(); + GregTechAPI.sBlockFrames = new BlockFrameBox(); + GregTechAPI.sDroneRender = new BlockDrone(); + GregTechAPI.sBlockGlass1 = new BlockGlass1(); + GregTechAPI.sBlockTintedGlass = new BlockTintedIndustrialGlass(); + GregTechAPI.sLaserRender = new BlockLaser(); + GregTechAPI.sWormholeRender = new BlockWormholeRender(); + + // meta ID order, DO NOT CHANGE ORDER + + GregTechAPI.sBlockMetal1 = new BlockMetal( + "gt.blockmetal1", + new Materials[] { Materials.Adamantium, Materials.Aluminium, Materials.Americium, Materials.AnnealedCopper, + Materials.Antimony, Materials.Arsenic, Materials.AstralSilver, Materials.BatteryAlloy, + Materials.Beryllium, Materials.Bismuth, Materials.BismuthBronze, Materials.BlackBronze, + Materials.BlackSteel, Materials.BlueAlloy, Materials.BlueSteel, Materials.Brass }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS1); + + GregTechAPI.sBlockMetal2 = new BlockMetal( + "gt.blockmetal2", + new Materials[] { Materials.Bronze, Materials.Caesium, Materials.Cerium, Materials.Chrome, + Materials.ChromiumDioxide, Materials.Cobalt, Materials.CobaltBrass, Materials.Copper, + Materials.Cupronickel, Materials.DamascusSteel, Materials.DarkIron, Materials.DeepIron, Materials.Desh, + Materials.Duranium, Materials.Dysprosium, Materials.Electrum }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS2); + + GregTechAPI.sBlockMetal3 = new BlockMetal( + "gt.blockmetal3", + new Materials[] { Materials.ElectrumFlux, Materials.Enderium, Materials.Erbium, Materials.Europium, + Materials.FierySteel, Materials.Gadolinium, Materials.Gallium, Materials.Holmium, Materials.HSLA, + Materials.Indium, Materials.InfusedGold, Materials.Invar, Materials.Iridium, Materials.IronMagnetic, + Materials.IronWood, Materials.Kanthal }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS3); + + GregTechAPI.sBlockMetal4 = new BlockMetal( + "gt.blockmetal4", + new Materials[] { Materials.Knightmetal, Materials.Lanthanum, Materials.Lead, Materials.Lutetium, + Materials.Magnalium, Materials.Magnesium, Materials.Manganese, Materials.MeteoricIron, + Materials.MeteoricSteel, Materials.Trinium, Materials.Mithril, Materials.Molybdenum, Materials.Naquadah, + Materials.NaquadahAlloy, Materials.NaquadahEnriched, Materials.Naquadria }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS4); + + GregTechAPI.sBlockMetal5 = new BlockMetal( + "gt.blockmetal5", + new Materials[] { Materials.Neodymium, Materials.NeodymiumMagnetic, Materials.Neutronium, + Materials.Nichrome, Materials.Nickel, Materials.Niobium, Materials.NiobiumNitride, + Materials.NiobiumTitanium, Materials.Osmiridium, Materials.Osmium, Materials.Palladium, + Materials.PigIron, Materials.Platinum, Materials.Plutonium, Materials.Plutonium241, + Materials.Praseodymium }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS5); + + GregTechAPI.sBlockMetal6 = new BlockMetal( + "gt.blockmetal6", + new Materials[] { Materials.Promethium, Materials.RedAlloy, Materials.RedSteel, Materials.RoseGold, + Materials.Rubidium, Materials.Samarium, Materials.Scandium, Materials.ShadowIron, Materials.ShadowSteel, + Materials.Silicon, Materials.Silver, Materials.SolderingAlloy, Materials.StainlessSteel, + Materials.Steel, Materials.SteelMagnetic, Materials.SterlingSilver }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS6); + + GregTechAPI.sBlockMetal7 = new BlockMetal( + "gt.blockmetal7", + new Materials[] { Materials.Sunnarium, Materials.Tantalum, Materials.Tellurium, Materials.Terbium, + Materials.Thaumium, Materials.Thorium, Materials.Thulium, Materials.Tin, Materials.TinAlloy, + Materials.Titanium, Materials.Tritanium, Materials.Tungsten, Materials.TungstenSteel, Materials.Ultimet, + Materials.Uranium, Materials.Uranium235 }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS7); + + GregTechAPI.sBlockMetal8 = new BlockMetal( + "gt.blockmetal8", + new Materials[] { Materials.Vanadium, Materials.VanadiumGallium, Materials.WroughtIron, Materials.Ytterbium, + Materials.Yttrium, Materials.YttriumBariumCuprate, Materials.Zinc, Materials.TungstenCarbide, + Materials.VanadiumSteel, Materials.HSSG, Materials.HSSE, Materials.HSSS, Materials.Steeleaf, + Materials.Ichorium, Materials.Firestone, Materials.Shadow }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS8); + + GregTechAPI.sBlockGem1 = new BlockMetal( + "gt.blockgem1", + new Materials[] { Materials.InfusedAir, Materials.Amber, Materials.Amethyst, Materials.InfusedWater, + Materials.BlueTopaz, Materials.CertusQuartz, Materials.Dilithium, Materials.EnderEye, + Materials.EnderPearl, Materials.FoolsRuby, Materials.Force, Materials.Forcicium, Materials.Forcillium, + Materials.GreenSapphire, Materials.InfusedFire, Materials.Jasper }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS9); + + GregTechAPI.sBlockGem2 = new BlockMetal( + "gt.blockgem2", + new Materials[] { Materials.Lazurite, Materials.Lignite, Materials.Monazite, Materials.Niter, + Materials.Olivine, Materials.Opal, Materials.InfusedOrder, Materials.InfusedEntropy, + Materials.TricalciumPhosphate, Materials.Quartzite, Materials.GarnetRed, Materials.Ruby, + Materials.Sapphire, Materials.Sodalite, Materials.Tanzanite, Materials.InfusedEarth }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS10); + + GregTechAPI.sBlockGem3 = new BlockMetal( + "gt.blockgem3", + new Materials[] { Materials.Topaz, Materials.Vinteum, Materials.GarnetYellow, Materials.NetherStar, + Materials.Charcoal, Materials.Blaze }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS11); + + GregTechAPI.sBlockMetal9 = new BlockMetal( + "gt.blockmetal9", + new Materials[] { Materials.Cryolite, Materials.SiliconSG, MaterialsKevlar.NickelAluminide, + MaterialsUEVplus.SpaceTime, MaterialsUEVplus.TranscendentMetal, Materials.Oriharukon, + MaterialsUEVplus.WhiteDwarfMatter, MaterialsUEVplus.BlackDwarfMatter, MaterialsUEVplus.Universium, + MaterialsUEVplus.Eternity, MaterialsUEVplus.MagMatter, MaterialsUEVplus.SixPhasedCopper }, + OrePrefixes.block, + gregtech.api.enums.Textures.BlockIcons.STORAGE_BLOCKS12); + + GregTechAPI.sBlockReinforced = new BlockReinforced("gt.blockreinforced"); + + GTLog.out.println("GTMod: Register TileEntities."); + + BaseMetaTileEntity tBaseMetaTileEntity = GregTechAPI.constructBaseMetaTileEntity(); + + GTLog.out.println("GTMod: Registering the BaseMetaTileEntity."); + GameRegistry.registerTileEntity(tBaseMetaTileEntity.getClass(), "BaseMetaTileEntity"); + FMLInterModComms.sendMessage( + AppliedEnergistics2.ID, + "whitelist-spatial", + tBaseMetaTileEntity.getClass() + .getName()); + + GTLog.out.println("GTMod: Registering the DroneRender."); + GameRegistry.registerTileEntity(TileEntityDrone.class, "DroneRender"); + + GTLog.out.println("GTMod: Registering the LaserRender."); + GameRegistry.registerTileEntity(TileEntityLaser.class, "LaserRenderer"); + + GTLog.out.println("GTMod: Registering the WormholeRender."); + GameRegistry.registerTileEntity(TileEntityWormhole.class, "WormholeRender"); + + GTLog.out.println("GTMod: Registering the BaseMetaPipeEntity."); + GameRegistry.registerTileEntity(BaseMetaPipeEntity.class, "BaseMetaPipeEntity"); + FMLInterModComms.sendMessage(AppliedEnergistics2.ID, "whitelist-spatial", BaseMetaPipeEntity.class.getName()); + + GTLog.out.println("GTMod: Registering the Ore TileEntity."); + GameRegistry.registerTileEntity(TileEntityOres.class, "GT_TileEntity_Ores"); + FMLInterModComms.sendMessage(AppliedEnergistics2.ID, "whitelist-spatial", TileEntityOres.class.getName()); + + GTLog.out.println("GTMod: Registering Fluids."); + Materials.ConstructionFoam.mFluid = GTUtility.getFluidForFilledItem(GTModHandler.getIC2Item("CFCell", 1L), true) + .getFluid(); + Materials.UUMatter.mFluid = GTUtility.getFluidForFilledItem(GTModHandler.getIC2Item("uuMatterCell", 1L), true) + .getFluid(); + + GTFluidFactory.builder("Air") + .withLocalizedName("Air") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Air) + .registerContainers(ItemList.Cell_Air.get(1L), ItemList.Cell_Empty.get(1L), 2000); + GTFluidFactory.builder("LiquidOxygen") + .withLocalizedName("Liquid Oxygen") + .withStateAndTemperature(GAS, 60) + .buildAndRegister() + .configureMaterials(Materials.LiquidOxygen) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.LiquidOxygen, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("LiquidNitrogen") + .withLocalizedName("Liquid Nitrogen") + .withStateAndTemperature(GAS, 77) + .buildAndRegister() + .configureMaterials(Materials.LiquidNitrogen) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.LiquidNitrogen, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("LiquidAir") + .withLocalizedName("Liquid Air") + .withStateAndTemperature(LIQUID, 77) + .buildAndRegister() + .configureMaterials(Materials.LiquidAir) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.LiquidAir, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Oxygen") + .withLocalizedName("Oxygen") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Oxygen) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oxygen, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Hydrogen") + .withLocalizedName("Hydrogen") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Hydrogen) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Deuterium") + .withLocalizedName("Deuterium") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Deuterium) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Deuterium, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Tritium") + .withLocalizedName("Tritium") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Tritium) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Tritium, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Helium") + .withLocalizedName("Helium") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Helium) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Helium, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Argon") + .withLocalizedName("Argon") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Argon) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Argon, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Radon") + .withLocalizedName("Radon") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Radon) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Radon, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder("Fluorine") + .withLocalizedName("Fluorine") + .withStateAndTemperature(GAS, 53) + .buildAndRegister() + .configureMaterials(Materials.Fluorine) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Fluorine, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Titaniumtetrachloride") + .withLocalizedName("Titaniumtetrachloride") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Titaniumtetrachloride) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Titaniumtetrachloride, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Helium-3") + .withLocalizedName("Helium-3") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Helium_3) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Helium_3, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Methane") + .withLocalizedName("Methane") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Methane) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Methane, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Nitrogen") + .withLocalizedName("Nitrogen") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Nitrogen) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Nitrogen, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("NitrogenDioxide") + .withLocalizedName("Nitrogen Dioxide") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.NitrogenDioxide) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.NitrogenDioxide, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Steam") + .withLocalizedName("Steam") + .withStateAndTemperature(GAS, 375) + .buildAndRegister() + .configureMaterials(Materials.Water) + .registerBContainers(GTModHandler.getIC2Item("steamCell", 1), Materials.Empty.getCells(1)); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(1)) + .itemOutputs(GTModHandler.getIC2Item("steamCell", 1)) + .fluidInputs(GTModHandler.getSteam(1000)) + .duration(16 * TICKS) + .eut(1) + .addTo(fluidCannerRecipes); + + Materials.Ice.mGas = Materials.Water.mGas; + Materials.Water.mGas.setTemperature(375) + .setGaseous(true); + + ItemList.sOilExtraHeavy = GTFluidFactory.of("liquid_extra_heavy_oil", "Very Heavy Oil", LIQUID, 295); + ItemList.sEpichlorhydrin = GTFluidFactory.builder("liquid_epichlorhydrin") + .withLocalizedName("Epichlorohydrin") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Epichlorohydrin) + .registerBContainers(Materials.Epichlorohydrin.getCells(1), Materials.Empty.getCells(1)) + .asFluid(); + ItemList.sDrillingFluid = GTFluidFactory.of("liquid_drillingfluid", "Drilling Fluid", LIQUID, 295); + ItemList.sToluene = GTFluidFactory.builder("liquid_toluene") + .withLocalizedName("Toluene") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Toluene) + .registerBContainers(Materials.Toluene.getCells(1), Materials.Empty.getCells(1)) + .asFluid(); + ItemList.sNitrationMixture = GTFluidFactory.builder("liquid_nitrationmixture") + .withLocalizedName("Nitration Mixture") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.NitrationMixture) + .registerBContainers(Materials.NitrationMixture.getCells(1), Materials.Empty.getCells(1)) + .asFluid(); + + GTFluidFactory.builder("liquid_heavy_oil") + .withLocalizedName("Heavy Oil") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.OilHeavy) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.OilHeavy, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("liquid_medium_oil") + .withLocalizedName("Raw Oil") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.OilMedium) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.OilMedium, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("liquid_light_oil") + .withLocalizedName("Light Oil") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.OilLight) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.OilLight, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("gas_natural_gas") + .withLocalizedName("Natural Gas") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.NatruralGas) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.NatruralGas, 1L), + ItemList.Cell_Empty.get(1L)); + ItemList.sHydricSulfur = GTFluidFactory.builder("liquid_hydricsulfur") + .withLocalizedName("Hydrogen Sulfide") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.HydricSulfide) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.HydricSulfide, 1L), + ItemList.Cell_Empty.get(1L)) + .asFluid(); + GTFluidFactory.builder("gas_sulfuricgas") + .withLocalizedName("Sulfuric Gas") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.SulfuricGas) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricGas, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("gas_gas") + .withLocalizedName("Refinery Gas") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Gas) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Gas, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("liquid_sulfuricnaphtha") + .withLocalizedName("Sulfuric Naphtha") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.SulfuricNaphtha) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricNaphtha, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("liquid_sufluriclight_fuel") + .withLocalizedName("Sulfuric Light Fuel") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.SulfuricLightFuel) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricLightFuel, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("liquid_sulfuricheavy_fuel") + .withLocalizedName("Sulfuric Heavy Fuel") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.SulfuricHeavyFuel) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricHeavyFuel, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("liquid_naphtha") + .withLocalizedName("Naphtha") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Naphtha) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Naphtha, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("liquid_light_fuel") + .withLocalizedName("Light Fuel") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.LightFuel) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.LightFuel, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("liquid_heavy_fuel") + .withLocalizedName("Heavy Fuel") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.HeavyFuel) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.HeavyFuel, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("liquid_lpg") + .withLocalizedName("LPG") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.LPG) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.LPG, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("charcoal_byproducts") + .withTextureName("molten.autogenerated") + .withLocalizedName("Charcoal Byproducts") + .withColorRGBA(Materials.CharcoalByproducts.mRGBa) + .withStateAndTemperature(GAS, 775) + .buildAndRegister() + .configureMaterials(Materials.CharcoalByproducts) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.CharcoalByproducts, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("molten.bisphenol_a") + .withTextureName("molten.autogenerated") + .withLocalizedName("Molten Bisphenol A") + .withColorRGBA(Materials.BisphenolA.mRGBa) + .withStateAndTemperature(LIQUID, 432) + .buildAndRegister() + .configureMaterials(Materials.BisphenolA) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.BisphenolA, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder("UUAmplifier") + .withLocalizedName("UU Amplifier") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.UUAmplifier) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.UUAmplifier, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Chlorine") + .withLocalizedName("Chlorine") + .withStateAndTemperature(GAS, 295) + .buildAndRegister() + .configureMaterials(Materials.Chlorine) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Chlorine, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Mercury") + .withLocalizedName("Mercury") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Mercury) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Mercury, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("NitroFuel") + .withLocalizedName("Cetane-Boosted Diesel") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.NitroFuel) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.NitroFuel, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("SodiumPersulfate") + .withLocalizedName("Sodium Persulfate") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.SodiumPersulfate) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.SodiumPersulfate, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("Glyceryl") + .withLocalizedName("Glyceryl Trinitrate") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Glyceryl) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Glyceryl, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder("lubricant") + .withLocalizedName("Lubricant") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Lubricant) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Lubricant, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("creosote") + .withLocalizedName("Creosote Oil") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Creosote) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Creosote, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("seedoil") + .withLocalizedName("Seed Oil") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.SeedOil) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.SeedOil, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("fishoil") + .withLocalizedName("Fish Oil") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.FishOil) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.FishOil, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("oil") + .withLocalizedName("Oil") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Oil) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Oil, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("fuel") + .withLocalizedName("Diesel") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Fuel) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Fuel, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("for.honey") + .withLocalizedName("Honey") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Honey) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Honey, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("biomass") + .withLocalizedName("Biomass") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Biomass) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Biomass, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("bioethanol") + .withLocalizedName("Bio Ethanol") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Ethanol) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Ethanol, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("sulfuricacid") + .withLocalizedName("Sulfuric Acid") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.SulfuricAcid) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.SulfuricAcid, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("milk") + .withLocalizedName("Milk") + .withStateAndTemperature(LIQUID, 290) + .buildAndRegister() + .configureMaterials(Materials.Milk) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Milk, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("mcguffium") + .withLocalizedName("Mc Guffium 239") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.McGuffium239) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.McGuffium239, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("refinedGlue") + .withLocalizedName("Refined Glue") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Glue) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Glue, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("hotfryingoil") + .withLocalizedName("Hot Frying Oil") + .withStateAndTemperature(LIQUID, 400) + .buildAndRegister() + .configureMaterials(Materials.FryingOilHot) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.FryingOilHot, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder("DimensionallyTranscendentResidue") + .withLocalizedName("Dimensionally Transcendent Residue") + .withStateAndTemperature(LIQUID, 2000000000) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.DimensionallyTranscendentResidue) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.DimensionallyTranscendentResidue, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("ExcitedDTCC") + .withLocalizedName("Excited Dimensionally Transcendent Crude Catalyst") + .withStateAndTemperature(LIQUID, 500000000) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.ExcitedDTCC) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.ExcitedDTCC, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("ExcitedDTPC") + .withLocalizedName("Excited Dimensionally Transcendent Prosaic Catalyst") + .withStateAndTemperature(LIQUID, 500000000) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.ExcitedDTPC) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.ExcitedDTPC, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("ExcitedDTRC") + .withLocalizedName("Excited Dimensionally Transcendent Resplendent Catalyst") + .withStateAndTemperature(LIQUID, 500000000) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.ExcitedDTRC) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.ExcitedDTRC, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("ExcitedDTEC") + .withLocalizedName("Excited Dimensionally Transcendent Exotic Catalyst") + .withStateAndTemperature(LIQUID, 500000000) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.ExcitedDTEC) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.ExcitedDTEC, 1L), + ItemList.Cell_Empty.get(1L)); + GTFluidFactory.builder("ExcitedDTSC") + .withLocalizedName("Excited Dimensionally Transcendent Stellar Catalyst") + .withStateAndTemperature(LIQUID, 500000000) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.ExcitedDTSC) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.ExcitedDTSC, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder(MaterialsUEVplus.RawStarMatter.mName) + .withLocalizedName(MaterialsUEVplus.RawStarMatter.mLocalizedName) + .withStateAndTemperature(LIQUID, 10_000_000) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.RawStarMatter) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.RawStarMatter, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder(MaterialsUEVplus.Space.mName) + .withLocalizedName(MaterialsUEVplus.Space.mLocalizedName) + .withStateAndTemperature(MOLTEN, 0) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.Space) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.Space, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder(MaterialsUEVplus.Time.mName) + .withLocalizedName(MaterialsUEVplus.Time.mLocalizedName) + .withStateAndTemperature(MOLTEN, 0) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.Time) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.Time, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder("PrimordialMatter") + .withLocalizedName(MaterialsUEVplus.PrimordialMatter.mLocalizedName) + .withStateAndTemperature(LIQUID, 2_000_000_000) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.PrimordialMatter) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.PrimordialMatter, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder("QuarkGluonPlasma") + .withLocalizedName(MaterialsUEVplus.QuarkGluonPlasma.mLocalizedName) + .withStateAndTemperature(LIQUID, 2_000_000_000) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.QuarkGluonPlasma) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.QuarkGluonPlasma, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder("PhononMedium") + .withLocalizedName(MaterialsUEVplus.PhononMedium.mLocalizedName) + .withStateAndTemperature(LIQUID, 500) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.PhononMedium) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.PhononMedium, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder("PhononCrystalSolution") + .withLocalizedName(MaterialsUEVplus.PhononCrystalSolution.mLocalizedName) + .withStateAndTemperature(LIQUID, 500) + .buildAndRegister() + .configureMaterials(MaterialsUEVplus.PhononCrystalSolution) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, MaterialsUEVplus.PhononCrystalSolution, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder("fieryblood") + .withLocalizedName("Fiery Blood") + .withStateAndTemperature(LIQUID, 6400) + .buildAndRegister() + .configureMaterials(Materials.FierySteel) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.FierySteel, 1L), + ItemList.Cell_Empty.get(1L)); + + GTFluidFactory.builder("holywater") + .withLocalizedName("Holy Water") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.HolyWater) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.HolyWater, 1L), + ItemList.Cell_Empty.get(1L)); + if (ItemList.TF_Vial_FieryBlood.get(1L) != null) { + FluidContainerRegistry.registerFluidContainer( + new FluidContainerRegistry.FluidContainerData( + Materials.FierySteel.getFluid(250L), + ItemList.TF_Vial_FieryBlood.get(1L), + ItemList.Bottle_Empty.get(1L))); + } + + FluidContainerRegistry.registerFluidContainer( + new FluidContainerRegistry.FluidContainerData( + Materials.Milk.getFluid(1000L), + GTOreDictUnificator.get(OrePrefixes.bucket, Materials.Milk, 1L), + GTOreDictUnificator.get(OrePrefixes.bucket, Materials.Empty, 1L))); + FluidContainerRegistry.registerFluidContainer( + new FluidContainerRegistry.FluidContainerData( + Materials.Milk.getFluid(250L), + ItemList.Bottle_Milk.get(1L), + ItemList.Bottle_Empty.get(1L))); + FluidContainerRegistry.registerFluidContainer( + new FluidContainerRegistry.FluidContainerData( + Materials.HolyWater.getFluid(250L), + ItemList.Bottle_Holy_Water.get(1L), + ItemList.Bottle_Empty.get(1L))); + FluidContainerRegistry.registerFluidContainer( + new FluidContainerRegistry.FluidContainerData( + Materials.McGuffium239.getFluid(250L), + ItemList.McGuffium_239.get(1L), + ItemList.Bottle_Empty.get(1L))); + FluidContainerRegistry.registerFluidContainer( + new FluidContainerRegistry.FluidContainerData( + Materials.Fuel.getFluid(100L), + ItemList.Tool_Lighter_Invar_Full.get(1L), + ItemList.Tool_Lighter_Invar_Empty.get(1L))); + FluidContainerRegistry.registerFluidContainer( + new FluidContainerRegistry.FluidContainerData( + Materials.Fuel.getFluid(1000L), + ItemList.Tool_Lighter_Platinum_Full.get(1L), + ItemList.Tool_Lighter_Platinum_Empty.get(1L))); + + Dyes.dyeBlack.addFluidDye(GTFluidFactory.of("squidink", "Squid Ink", LIQUID, 295)); + Dyes.dyeBlue.addFluidDye(GTFluidFactory.of("indigo", "Indigo Dye", LIQUID, 295)); + for (byte i = 0; i < Dyes.VALUES.length; i = (byte) (i + 1)) { + Dyes tDye = Dyes.VALUES[i]; + tDye.addFluidDye( + GTFluidFactory.builder( + "dye.watermixed." + tDye.name() + .toLowerCase(Locale.ENGLISH)) + .withTextureName("dyes") + .withLocalizedName("Water Mixed " + tDye.mName + " Dye") + .withColorRGBA(tDye.getRGBA()) + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .asFluid()); + tDye.addFluidDye( + GTFluidFactory.builder( + "dye.chemical." + tDye.name() + .toLowerCase(Locale.ENGLISH)) + .withTextureName("dyes") + .withLocalizedName("Chemical " + tDye.mName + " Dye") + .withColorRGBA(tDye.getRGBA()) + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerContainers(ItemList.SPRAY_CAN_DYES[i].get(1L), ItemList.Spray_Empty.get(1L), 2304) + .asFluid()); + } + GTFluidFactory.builder("ice") + .withLocalizedName("Crushed Ice") + .withStateAndTemperature(SLURRY, 270) + .buildAndRegister() + .configureMaterials(Materials.Ice) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Ice, 1L), + ItemList.Cell_Empty.get(1L)); + Materials.Water.mSolid = Materials.Ice.mSolid; + + GTFluidFactory.builder("molten.glass") + .withLocalizedName("Molten Glass") + .withStateAndTemperature(MOLTEN, 1500) + .buildAndRegister() + .configureMaterials(Materials.Glass) + .registerContainers( + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Glass, 1L), + ItemList.Cell_Empty.get(1L), + 144); + GTFluidFactory.builder("molten.redstone") + .withLocalizedName("Molten Redstone") + .withStateAndTemperature(MOLTEN, 500) + .buildAndRegister() + .configureMaterials(Materials.Redstone) + .registerContainers( + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Redstone, 1L), + ItemList.Cell_Empty.get(1L), + 144); + GTFluidFactory.builder("molten.blaze") + .withLocalizedName("Molten Blaze") + .withStateAndTemperature(MOLTEN, 6400) + .buildAndRegister() + .configureMaterials(Materials.Blaze) + .registerContainers( + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Blaze, 1L), + ItemList.Cell_Empty.get(1L), + 144); + GTFluidFactory.builder("wet.concrete") + .withLocalizedName("Wet Concrete") + .withStateAndTemperature(MOLTEN, 300) + .buildAndRegister() + .configureMaterials(Materials.Concrete) + .registerContainers( + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Concrete, 1L), + ItemList.Cell_Empty.get(1L), + 144); + + for (Materials tMaterial : Materials.values()) { + if ((tMaterial.mStandardMoltenFluid == null) && (tMaterial.contains(SubTag.SMELTING_TO_FLUID)) + && (!tMaterial.contains(SubTag.NO_SMELTING))) { + GTMod.gregtechproxy.addAutogeneratedMoltenFluid(tMaterial); + if ((tMaterial.mSmeltInto != tMaterial) && (tMaterial.mSmeltInto.mStandardMoltenFluid == null)) { + GTMod.gregtechproxy.addAutogeneratedMoltenFluid(tMaterial.mSmeltInto); + } + } + if (tMaterial.mElement != null) { + GTMod.gregtechproxy.addAutogeneratedPlasmaFluid(tMaterial); + } + if (tMaterial.hasCorrespondingFluid()) { + GTMod.gregtechproxy.addAutoGeneratedCorrespondingFluid(tMaterial); + } + if (tMaterial.hasCorrespondingGas()) { + GTMod.gregtechproxy.addAutoGeneratedCorrespondingGas(tMaterial); + } + if (tMaterial.canBeCracked()) { + GTMod.gregtechproxy.addAutoGeneratedHydroCrackedFluids(tMaterial); + GTMod.gregtechproxy.addAutoGeneratedSteamCrackedFluids(tMaterial); + } + } + + GTFluidFactory.builder("potion.awkward") + .withLocalizedName("Awkward Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.thick") + .withLocalizedName("Thick Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 32), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.mundane") + .withLocalizedName("Mundane Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 64), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.damage") + .withLocalizedName("Harming Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8204), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.damage.strong") + .withLocalizedName("Strong Harming Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8236), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.damage.splash") + .withLocalizedName("Splash Harming Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16396), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.damage.strong.splash") + .withLocalizedName("Strong Splash Harming Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16428), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.health") + .withLocalizedName("Healing Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8197), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.health.strong") + .withLocalizedName("Strong Healing Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8229), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.health.splash") + .withLocalizedName("Splash Healing Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16389), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.health.strong.splash") + .withLocalizedName("Strong Splash Healing Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16421), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.speed") + .withLocalizedName("Swiftness Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8194), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.speed.strong") + .withLocalizedName("Strong Swiftness Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8226), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.speed.long") + .withLocalizedName("Stretched Swiftness Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8258), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.speed.splash") + .withLocalizedName("Splash Swiftness Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16386), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.speed.strong.splash") + .withLocalizedName("Strong Splash Swiftness Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16418), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.speed.long.splash") + .withLocalizedName("Stretched Splash Swiftness Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16450), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.strength") + .withLocalizedName("Strength Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8201), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.strength.strong") + .withLocalizedName("Strong Strength Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8233), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.strength.long") + .withLocalizedName("Stretched Strength Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8265), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.strength.splash") + .withLocalizedName("Splash Strength Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16393), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.strength.strong.splash") + .withLocalizedName("Strong Splash Strength Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16425), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.strength.long.splash") + .withLocalizedName("Stretched Splash Strength Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16457), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.regen") + .withLocalizedName("Regenerating Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8193), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.regen.strong") + .withLocalizedName("Strong Regenerating Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8225), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.regen.long") + .withLocalizedName("Stretched Regenerating Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8257), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.regen.splash") + .withLocalizedName("Splash Regenerating Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16385), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.regen.strong.splash") + .withLocalizedName("Strong Splash Regenerating Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16417), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.regen.long.splash") + .withLocalizedName("Stretched Splash Regenerating Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16449), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.poison") + .withLocalizedName("Poisonous Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8196), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.poison.strong") + .withLocalizedName("Strong Poisonous Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8228), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.poison.long") + .withLocalizedName("Stretched Poisonous Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8260), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.poison.splash") + .withLocalizedName("Splash Poisonous Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16388), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.poison.strong.splash") + .withLocalizedName("Strong Splash Poisonous Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16420), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.poison.long.splash") + .withLocalizedName("Stretched Splash Poisonous Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16452), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.fireresistance") + .withLocalizedName("Fire Resistant Brew") + .withStateAndTemperature(LIQUID, 375) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8195), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.fireresistance.long") + .withLocalizedName("Stretched Fire Resistant Brew") + .withStateAndTemperature(LIQUID, 375) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8259), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.fireresistance.splash") + .withLocalizedName("Splash Fire Resistant Brew") + .withStateAndTemperature(LIQUID, 375) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16387), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.fireresistance.long.splash") + .withLocalizedName("Stretched Splash Fire Resistant Brew") + .withStateAndTemperature(LIQUID, 375) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16451), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.nightvision") + .withLocalizedName("Night Vision Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8198), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.nightvision.long") + .withLocalizedName("Stretched Night Vision Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8262), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.nightvision.splash") + .withLocalizedName("Splash Night Vision Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16390), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.nightvision.long.splash") + .withLocalizedName("Stretched Splash Night Vision Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16454), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.weakness") + .withLocalizedName("Weakening Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8200), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.weakness.long") + .withLocalizedName("Stretched Weakening Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8264), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.weakness.splash") + .withLocalizedName("Splash Weakening Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16392), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.weakness.long.splash") + .withLocalizedName("Stretched Splash Weakening Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16456), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.slowness") + .withLocalizedName("Lame Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8202), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.slowness.long") + .withLocalizedName("Stretched Lame Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8266), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.slowness.splash") + .withLocalizedName("Splash Lame Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16394), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.slowness.long.splash") + .withLocalizedName("Stretched Splash Lame Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16458), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.waterbreathing") + .withLocalizedName("Fishy Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8205), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.waterbreathing.long") + .withLocalizedName("Stretched Fishy Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8269), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.waterbreathing.splash") + .withLocalizedName("Splash Fishy Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16397), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.waterbreathing.long.splash") + .withLocalizedName("Stretched Splash Fishy Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16461), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.invisibility") + .withLocalizedName("Invisible Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8206), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.invisibility.long") + .withLocalizedName("Stretched Invisible Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 8270), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.invisibility.splash") + .withLocalizedName("Splash Invisible Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16398), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.invisibility.long.splash") + .withLocalizedName("Stretched Splash Invisible Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(new ItemStack(Items.potionitem, 1, 16462), ItemList.Bottle_Empty.get(1L)); + + GTFluidFactory.builder("potion.purpledrink") + .withLocalizedName("Purple Drink") + .withStateAndTemperature(LIQUID, 275) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Purple_Drink.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.grapejuice") + .withLocalizedName("Grape Juice") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Grape_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.wine") + .withLocalizedName("Wine") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Wine.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.vinegar") + .withLocalizedName("Vinegar") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .configureMaterials(Materials.Vinegar) + .registerPContainers(ItemList.Bottle_Vinegar.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.potatojuice") + .withLocalizedName("Potato Juice") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Potato_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.vodka") + .withLocalizedName("Vodka") + .withStateAndTemperature(LIQUID, 275) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Vodka.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.leninade") + .withLocalizedName("Leninade") + .withStateAndTemperature(LIQUID, 275) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Leninade.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.mineralwater") + .withLocalizedName("Mineral Water") + .withStateAndTemperature(LIQUID, 275) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Mineral_Water.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.saltywater") + .withLocalizedName("Salty Water") + .withStateAndTemperature(LIQUID, 275) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Salty_Water.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.reedwater") + .withLocalizedName("Reed Water") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Reed_Water.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.rum") + .withLocalizedName("Rum") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Rum.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.piratebrew") + .withLocalizedName("Pirate Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Pirate_Brew.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.hopsjuice") + .withLocalizedName("Hops Juice") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Hops_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.darkbeer") + .withLocalizedName("Dark Beer") + .withStateAndTemperature(LIQUID, 275) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Dark_Beer.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.dragonblood") + .withLocalizedName("Dragon Blood") + .withStateAndTemperature(LIQUID, 375) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Dragon_Blood.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.wheatyjuice") + .withLocalizedName("Wheaty Juice") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Wheaty_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.scotch") + .withLocalizedName("Scotch") + .withStateAndTemperature(LIQUID, 275) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Scotch.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.glenmckenner") + .withLocalizedName("Glen McKenner") + .withStateAndTemperature(LIQUID, 275) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Glen_McKenner.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.wheatyhopsjuice") + .withLocalizedName("Wheaty Hops Juice") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Wheaty_Hops_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.beer") + .withLocalizedName("Beer") + .withStateAndTemperature(LIQUID, 275) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Beer.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.chillysauce") + .withLocalizedName("Chilly Sauce") + .withStateAndTemperature(LIQUID, 375) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Chilly_Sauce.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.hotsauce") + .withLocalizedName("Hot Sauce") + .withStateAndTemperature(LIQUID, 380) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Hot_Sauce.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.diabolosauce") + .withLocalizedName("Diabolo Sauce") + .withStateAndTemperature(LIQUID, 385) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Diabolo_Sauce.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.diablosauce") + .withLocalizedName("Diablo Sauce") + .withStateAndTemperature(LIQUID, 390) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Diablo_Sauce.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.diablosauce.strong") + .withLocalizedName("Old Man Snitches glitched Diablo Sauce") + .withStateAndTemperature(LIQUID, 999) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Snitches_Glitch_Sauce.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.applejuice") + .withLocalizedName("Apple Juice") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Apple_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.cider") + .withLocalizedName("Cider") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Cider.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.goldenapplejuice") + .withLocalizedName("Golden Apple Juice") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Golden_Apple_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.goldencider") + .withLocalizedName("Golden Cider") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Golden_Cider.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.idunsapplejuice") + .withLocalizedName("Idun's Apple Juice") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Iduns_Apple_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.notchesbrew") + .withLocalizedName("Notches Brew") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Notches_Brew.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.lemonjuice") + .withLocalizedName("Lemon Juice") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Lemon_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.limoncello") + .withLocalizedName("Limoncello") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Limoncello.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.lemonade") + .withLocalizedName("Lemonade") + .withStateAndTemperature(LIQUID, 275) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Lemonade.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.alcopops") + .withLocalizedName("Alcopops") + .withStateAndTemperature(LIQUID, 275) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Alcopops.get(1L), ItemList.Bottle_Empty.get(1L)); + GTFluidFactory.builder("potion.cavejohnsonsgrenadejuice") + .withLocalizedName("Cave Johnsons Grenade Juice") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.Bottle_Cave_Johnsons_Grenade_Juice.get(1L), ItemList.Bottle_Empty.get(1L)); + + GTFluidFactory.builder("potion.darkcoffee") + .withLocalizedName("Dark Coffee") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.ThermosCan_Dark_Coffee.get(1L), ItemList.ThermosCan_Empty.get(1L)); + GTFluidFactory.builder("potion.darkcafeaulait") + .withLocalizedName("Dark Cafe au lait") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.ThermosCan_Dark_Cafe_au_lait.get(1L), ItemList.ThermosCan_Empty.get(1L)); + GTFluidFactory.builder("potion.coffee") + .withLocalizedName("Coffee") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.ThermosCan_Coffee.get(1L), ItemList.ThermosCan_Empty.get(1L)); + GTFluidFactory.builder("potion.cafeaulait") + .withLocalizedName("Cafe au lait") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.ThermosCan_Cafe_au_lait.get(1L), ItemList.ThermosCan_Empty.get(1L)); + GTFluidFactory.builder("potion.laitaucafe") + .withLocalizedName("Lait au cafe") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.ThermosCan_Lait_au_cafe.get(1L), ItemList.ThermosCan_Empty.get(1L)); + GTFluidFactory.builder("potion.darkchocolatemilk") + .withLocalizedName("Bitter Chocolate Milk") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.ThermosCan_Dark_Chocolate_Milk.get(1L), ItemList.ThermosCan_Empty.get(1L)); + GTFluidFactory.builder("potion.chocolatemilk") + .withLocalizedName("Chocolate Milk") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.ThermosCan_Chocolate_Milk.get(1L), ItemList.ThermosCan_Empty.get(1L)); + GTFluidFactory.builder("potion.tea") + .withLocalizedName("Tea") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.ThermosCan_Tea.get(1L), ItemList.ThermosCan_Empty.get(1L)); + GTFluidFactory.builder("potion.sweettea") + .withLocalizedName("Sweet Tea") + .withStateAndTemperature(LIQUID, 295) + .buildAndRegister() + .registerPContainers(ItemList.ThermosCan_Sweet_Tea.get(1L), ItemList.ThermosCan_Empty.get(1L)); + GTFluidFactory.builder("potion.icetea") + .withLocalizedName("Ice Tea") + .withStateAndTemperature(LIQUID, 255) + .buildAndRegister() + .registerPContainers(ItemList.ThermosCan_Ice_Tea.get(1L), ItemList.ThermosCan_Empty.get(1L)); + GTFluidFactory.builder("liquid_sodium") + .withLocalizedName("Liquid Sodium") + .withStateAndTemperature(LIQUID, 495) + .buildAndRegister() + .configureMaterials(Materials.Sodium) + .registerBContainers( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Sodium, 1L), + ItemList.Cell_Empty.get(1L)); + + FluidContainerRegistry.registerFluidContainer( + new FluidContainerRegistry.FluidContainerData( + FluidRegistry.getFluidStack("potion.poison.strong", 750), + ItemList.IC2_Spray_WeedEx.get(1L), + ItemList.Spray_Empty.get(1L))); + + if (!GTValues.D1) { + try { + Class.forName("codechicken.nei.api.API"); + GTLog.out.println("GTMod: Hiding certain Items from NEI."); + API.hideItem(ItemList.Display_Fluid.getWildcard(1L)); + } catch (Throwable e) { + if (GTValues.D1) { + e.printStackTrace(GTLog.err); + } + } + } + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.cobblestone, 1, WILDCARD)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.gravel, 1, WILDCARD)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1L), new ItemStack(Items.flint, 1)) + .outputChances(10000, 1000) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.furnace, 1, WILDCARD)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 8L)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.lit_furnace, 1, WILDCARD)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 8L)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + + GTOreDictUnificator.set( + OrePrefixes.ingot, + Materials.FierySteel, + GTModHandler.getModItem(TwilightForest.ID, "item.fieryIngot", 1L, 0)); + GTOreDictUnificator.set( + OrePrefixes.ingot, + Materials.Knightmetal, + GTModHandler.getModItem(TwilightForest.ID, "item.knightMetal", 1L, 0)); + GTOreDictUnificator.set( + OrePrefixes.ingot, + Materials.Steeleaf, + GTModHandler.getModItem(TwilightForest.ID, "item.steeleafIngot", 1L, 0)); + GTOreDictUnificator.set( + OrePrefixes.ingot, + Materials.IronWood, + GTModHandler.getModItem(TwilightForest.ID, "item.ironwoodIngot", 1L, 0)); + GTOreDictUnificator + .set(OrePrefixes.gem, Materials.InfusedAir, GTModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 0)); + GTOreDictUnificator + .set(OrePrefixes.gem, Materials.InfusedFire, GTModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 1)); + GTOreDictUnificator + .set(OrePrefixes.gem, Materials.InfusedWater, GTModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 2)); + GTOreDictUnificator + .set(OrePrefixes.gem, Materials.InfusedEarth, GTModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 3)); + GTOreDictUnificator + .set(OrePrefixes.gem, Materials.InfusedOrder, GTModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 4)); + GTOreDictUnificator + .set(OrePrefixes.gem, Materials.InfusedEntropy, GTModHandler.getModItem(Thaumcraft.ID, "ItemShard", 1L, 5)); + GTOreDictUnificator + .set(OrePrefixes.nugget, Materials.Mercury, GTModHandler.getModItem(Thaumcraft.ID, "ItemNugget", 1L, 5)); + GTOreDictUnificator + .set(OrePrefixes.nugget, Materials.Thaumium, GTModHandler.getModItem(Thaumcraft.ID, "ItemNugget", 1L, 6)); + GTOreDictUnificator + .set(OrePrefixes.ingot, Materials.Thaumium, GTModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 2)); + GTOreDictUnificator + .set(OrePrefixes.gem, Materials.Mercury, GTModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 3)); + GTOreDictUnificator + .set(OrePrefixes.gem, Materials.Amber, GTModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 6)); + GTOreDictUnificator + .set(OrePrefixes.gem, Materials.Firestone, GTModHandler.getModItem(Railcraft.ID, "firestone.raw", 1L)); + + GTOreDictUnificator + .set(OrePrefixes.nugget, Materials.Void, GTModHandler.getModItem(Thaumcraft.ID, "ItemNugget", 1L, 7)); + GTOreDictUnificator + .set(OrePrefixes.ingot, Materials.Void, GTModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 16)); + + GTOreDictUnificator.set( + OrePrefixes.plate, + Materials.Iron, + GTModHandler.getModItem(Railcraft.ID, "part.plate", 1L, 0), + false, + false); + + GTOreDictUnificator.set( + OrePrefixes.plate, + Materials.Steel, + GTModHandler.getModItem(Railcraft.ID, "part.plate", 1L, 1), + false, + false); + + GTOreDictUnificator.set( + OrePrefixes.plate, + Materials.TinAlloy, + GTModHandler.getModItem(Railcraft.ID, "part.plate", 1L, 2), + false, + false); + + GTOreDictUnificator.set( + OrePrefixes.plate, + Materials.Copper, + GTModHandler.getModItem(Railcraft.ID, "part.plate", 1L, 3), + false, + false); + + GTOreDictUnificator.set( + OrePrefixes.dust, + Materials.Cocoa, + GTModHandler.getModItem(PamsHarvestCraft.ID, "cocoapowderItem", 1L, 0)); + GTOreDictUnificator.set(OrePrefixes.dust, Materials.Coffee, ItemList.IC2_CoffeePowder.get(1L)); + + GregTechAPI.registerMachineBlock(GTUtility.getBlockFromStack(GTModHandler.getIC2Item("reinforcedGlass", 0)), 0); + + GregTechAPI.sSolenoidCoilCasings = new BlockCyclotronCoils(); + ItemList.TierdDrone0 + .set(new ItemTierDrone("tierdDrone0", "Drone (Level 1)", "Quadcopter Stable Small Aircraft", 1)); + ItemList.TierdDrone1 + .set(new ItemTierDrone("tierdDrone1", "Drone (Level 2)", "Dual Turbo High-Ejection Medium Aircraft", 2)); + ItemList.TierdDrone2 + .set(new ItemTierDrone("tierdDrone2", "Drone (Level 3)", "Single Engine Anti-Gravity Large Aircraft", 3)); + + } +} diff --git a/src/main/java/gregtech/loaders/preload/LoaderGTItemData.java b/src/main/java/gregtech/loaders/preload/LoaderGTItemData.java new file mode 100644 index 0000000000..778916fe38 --- /dev/null +++ b/src/main/java/gregtech/loaders/preload/LoaderGTItemData.java @@ -0,0 +1,384 @@ +package gregtech.loaders.preload; + +import static gregtech.api.enums.Mods.AppliedEnergistics2; +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.enums.Mods.PamsHarvestCraft; +import static gregtech.api.enums.Mods.Railcraft; +import static gregtech.api.enums.Mods.Thaumcraft; +import static gregtech.api.enums.Mods.TwilightForest; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.objects.ItemData; +import gregtech.api.objects.MaterialStack; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class LoaderGTItemData implements Runnable { + + @Override + public void run() { + GTLog.out.println("GTMod: Loading Item Data Tags"); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(TwilightForest.ID, "item.giantPick", 1L, 0), + new ItemData(Materials.Stone, 696729600L, new MaterialStack(Materials.Wood, 464486400L))); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(TwilightForest.ID, "item.giantSword", 1L, 0), + new ItemData(Materials.Stone, 464486400L, new MaterialStack(Materials.Wood, 232243200L))); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(TwilightForest.ID, "tile.GiantLog", 1L, 32767), + new ItemData(Materials.Wood, 232243200L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(TwilightForest.ID, "tile.GiantCobble", 1L, 32767), + new ItemData(Materials.Stone, 232243200L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(TwilightForest.ID, "tile.GiantObsidian", 1L, 32767), + new ItemData(Materials.Obsidian, 232243200L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(TwilightForest.ID, "item.minotaurAxe", 1L, 0), + new ItemData( + Materials.Diamond, + 14515200L, + new MaterialStack(Materials.Wood, OrePrefixes.stick.mMaterialAmount * 2L))); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(TwilightForest.ID, "item.armorShards", 1L, 0), + new ItemData(Materials.Knightmetal, 403200L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(TwilightForest.ID, "item.shardCluster", 1L, 0), + new ItemData(Materials.Knightmetal, 3628800L)); + GTOreDictUnificator.addItemData(ItemList.TF_LiveRoot.get(1L), new ItemData(Materials.LiveRoot, 3628800L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10), + new ItemData(Materials.CertusQuartz, 1814400L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11), + new ItemData(Materials.NetherQuartz, 1814400L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 12), + new ItemData(Materials.Fluix, 1814400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.quartz_block, 1, 32767), new ItemData(Materials.NetherQuartz, 14515200L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(AppliedEnergistics2.ID, "tile.BlockQuartz", 1L, 32767), + new ItemData(Materials.CertusQuartz, 14515200L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(AppliedEnergistics2.ID, "tile.BlockQuartzPillar", 1L, 32767), + new ItemData(Materials.CertusQuartz, 14515200L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(AppliedEnergistics2.ID, "tile.BlockQuartzChiseled", 1L, 32767), + new ItemData(Materials.CertusQuartz, 14515200L)); + GTOreDictUnificator.addItemData(new ItemStack(Items.wheat, 1, 32767), new ItemData(Materials.Wheat, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.hay_block, 1, 32767), new ItemData(Materials.Wheat, 32659200L)); + GTOreDictUnificator.addItemData(new ItemStack(Items.snowball, 1, 32767), new ItemData(Materials.Snow, 907200L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.snow, 1, 32767), new ItemData(Materials.Snow, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.glowstone, 1, 32767), new ItemData(Materials.Glowstone, 14515200L)); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.redstone_lamp, 1, 32767), + new ItemData( + Materials.Glowstone, + 14515200L, + new MaterialStack(Materials.Redstone, OrePrefixes.dust.mMaterialAmount * 4L))); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.lit_redstone_lamp, 1, 32767), + new ItemData( + Materials.Glowstone, + 14515200L, + new MaterialStack(Materials.Redstone, OrePrefixes.dust.mMaterialAmount * 4L))); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(Forestry.ID, "craftingMaterial", 1L, 5), + new ItemData(Materials.Ice, 3628800L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.ice, 1, 32767), new ItemData(Materials.Ice, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.packed_ice, 1, 32767), new ItemData(Materials.Ice, 7257600L)); + GTOreDictUnificator + .addItemData(new ItemStack(Items.clay_ball, 1, 32767), new ItemData(Materials.Clay, 1814400L)); + GTOreDictUnificator.removeItemData(new ItemStack(Blocks.clay, 1, 0)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.clay, 1, 32767), new ItemData(Materials.Clay, 7257600L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.hardened_clay, 1, 32767), new ItemData(Materials.Clay, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stained_hardened_clay, 1, 32767), new ItemData(Materials.Clay, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.brick_block, 1, 32767), new ItemData(Materials.Brick, 3628800L)); + GTOreDictUnificator + .addItemData(GTModHandler.getIC2Item("Uran238", 1L), new ItemData(Materials.Uranium, 3628800L)); + GTOreDictUnificator + .addItemData(GTModHandler.getIC2Item("Uran235", 1L), new ItemData(Materials.Uranium235, 3628800L)); + GTOreDictUnificator + .addItemData(GTModHandler.getIC2Item("Plutonium", 1L), new ItemData(Materials.Plutonium, 3628800L)); + GTOreDictUnificator + .addItemData(GTModHandler.getIC2Item("smallUran235", 1L), new ItemData(Materials.Uranium235, 403200L)); + GTOreDictUnificator + .addItemData(GTModHandler.getIC2Item("smallPlutonium", 1L), new ItemData(Materials.Plutonium, 403200L)); + GTOreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Iron.get(1L), new ItemData(Materials.Iron, 1814400L)); + GTOreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Gold.get(1L), new ItemData(Materials.Gold, 1814400L)); + GTOreDictUnificator + .addItemData(ItemList.IC2_Item_Casing_Bronze.get(1L), new ItemData(Materials.Bronze, 1814400L)); + GTOreDictUnificator + .addItemData(ItemList.IC2_Item_Casing_Copper.get(1L), new ItemData(Materials.Copper, 1814400L)); + GTOreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Tin.get(1L), new ItemData(Materials.Tin, 1814400L)); + GTOreDictUnificator.addItemData(ItemList.IC2_Item_Casing_Lead.get(1L), new ItemData(Materials.Lead, 1814400L)); + GTOreDictUnificator + .addItemData(ItemList.IC2_Item_Casing_Steel.get(1L), new ItemData(Materials.Steel, 1814400L)); + GTOreDictUnificator.addItemData(new ItemStack(Items.book, 1, 32767), new ItemData(Materials.Paper, 10886400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Items.written_book, 1, 32767), new ItemData(Materials.Paper, 10886400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Items.writable_book, 1, 32767), new ItemData(Materials.Paper, 10886400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Items.enchanted_book, 1, 32767), new ItemData(Materials.Paper, 10886400L)); + GTOreDictUnificator.addItemData( + new ItemStack(Items.golden_apple, 1, 1), + new ItemData(Materials.Gold, OrePrefixes.block.mMaterialAmount * 8L)); + GTOreDictUnificator.addItemData( + new ItemStack(Items.golden_apple, 1, 0), + new ItemData(Materials.Gold, OrePrefixes.ingot.mMaterialAmount * 8L)); + GTOreDictUnificator.addItemData( + new ItemStack(Items.golden_carrot, 1, 0), + new ItemData(Materials.Gold, OrePrefixes.nugget.mMaterialAmount * 8L)); + GTOreDictUnificator.addItemData( + new ItemStack(Items.speckled_melon, 1, 0), + new ItemData(Materials.Gold, OrePrefixes.nugget.mMaterialAmount * 8L)); + GTOreDictUnificator.addItemData(new ItemStack(Items.minecart, 1), new ItemData(Materials.Iron, 18144000L)); + GTOreDictUnificator.addItemData(new ItemStack(Items.iron_door, 1), new ItemData(Materials.Iron, 21772800L)); + GTOreDictUnificator.addItemData(new ItemStack(Items.cauldron, 1), new ItemData(Materials.Iron, 25401600L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.iron_bars, 8, 32767), new ItemData(Materials.Iron, 10886400L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.SteelBars", 8L, 0), + new ItemData(Materials.Steel, 10886400L)); + GTOreDictUnificator + .addItemData(GTModHandler.getIC2Item("ironFurnace", 1L), new ItemData(Materials.Iron, 18144000L)); + GTOreDictUnificator.addItemData(ItemList.IC2_Food_Can_Empty.get(1L), new ItemData(Materials.Tin, 1814400L)); + GTOreDictUnificator.addItemData(ItemList.IC2_Fuel_Rod_Empty.get(1L), new ItemData(Materials.Iron, 3628800L)); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.light_weighted_pressure_plate, 1, 32767), + new ItemData(Materials.Gold, 7257600L)); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.heavy_weighted_pressure_plate, 1, 32767), + new ItemData(Materials.Iron, 7257600L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(Railcraft.ID, "anvil", 1L, 0), + new ItemData(Materials.Steel, 108864000L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(Railcraft.ID, "anvil", 1L, 1), + new ItemData(Materials.Steel, 72576000L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(Railcraft.ID, "anvil", 1L, 2), + new ItemData(Materials.Steel, 36288000L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.anvil, 1, 0), new ItemData(Materials.Iron, 108864000L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.anvil, 1, 1), new ItemData(Materials.Iron, 72576000L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.anvil, 1, 2), new ItemData(Materials.Iron, 36288000L)); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.hopper, 1, 32767), + new ItemData(Materials.Iron, 18144000L, new MaterialStack(Materials.Wood, 29030400L))); + GTOreDictUnificator.addItemData(ItemList.Cell_Universal_Fluid.get(1L), new ItemData(Materials.Tin, 7257600L)); + GTOreDictUnificator.addItemData(ItemList.Cell_Empty.get(1L), new ItemData(Materials.Tin, 7257600L)); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.tripwire_hook, 1, 32767), + new ItemData( + Materials.Iron, + OrePrefixes.ring.mMaterialAmount * 2L, + new MaterialStack(Materials.Wood, 3628800L))); + GTOreDictUnificator.addItemData(ItemList.Bottle_Empty.get(1L), new ItemData(Materials.Glass, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Items.potionitem, 1, 32767), new ItemData(Materials.Glass, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stained_glass, 1, 32767), new ItemData(Materials.Glass, 3628800L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.glass, 1, 32767), new ItemData(Materials.Glass, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stained_glass_pane, 1, 32767), new ItemData(Materials.Glass, 1360800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.glass_pane, 1, 32767), new ItemData(Materials.Glass, 1360800L)); + GTOreDictUnificator.addItemData( + new ItemStack(Items.clock, 1, 32767), + new ItemData(Materials.Gold, 14515200L, new MaterialStack(Materials.Redstone, 3628800L))); + GTOreDictUnificator.addItemData( + new ItemStack(Items.compass, 1, 32767), + new ItemData(Materials.Iron, 14515200L, new MaterialStack(Materials.Redstone, 3628800L))); + GTOreDictUnificator.addItemData( + new ItemStack(Items.iron_horse_armor, 1, 32767), + new ItemData(Materials.Iron, 29030400L, new MaterialStack(Materials.Leather, 21772800L))); + GTOreDictUnificator.addItemData( + new ItemStack(Items.golden_horse_armor, 1, 32767), + new ItemData(Materials.Gold, 29030400L, new MaterialStack(Materials.Leather, 21772800L))); + GTOreDictUnificator.addItemData( + new ItemStack(Items.diamond_horse_armor, 1, 32767), + new ItemData(Materials.Diamond, 29030400L, new MaterialStack(Materials.Leather, 21772800L))); + GTOreDictUnificator + .addItemData(new ItemStack(Items.leather, 1, 32767), new ItemData(Materials.Leather, 3628800L)); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.beacon, 1, 32767), + new ItemData( + Materials.NetherStar, + 3628800L, + new MaterialStack(Materials.Obsidian, 10886400L), + new MaterialStack(Materials.Glass, 18144000L))); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.enchanting_table, 1, 32767), + new ItemData( + Materials.Diamond, + 7257600L, + new MaterialStack(Materials.Obsidian, 14515200L), + new MaterialStack(Materials.Paper, 10886400L))); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.ender_chest, 1, 32767), + new ItemData(Materials.EnderEye, 3628800L, new MaterialStack(Materials.Obsidian, 29030400L))); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.bookshelf, 1, 32767), + new ItemData(Materials.Paper, 32659200L, new MaterialStack(Materials.Wood, 21772800L))); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.lever, 1, 32767), + new ItemData(Materials.Stone, 3628800L, new MaterialStack(Materials.Wood, 1814400L))); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.ice, 1, 32767), new ItemData(Materials.Ice, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.packed_ice, 1, 32767), new ItemData(Materials.Ice, 7257600L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.snow, 1, 32767), new ItemData(Materials.Snow, 3628800L)); + GTOreDictUnificator.addItemData(new ItemStack(Items.snowball, 1, 32767), new ItemData(Materials.Snow, 907200L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.snow_layer, 1, 32767), new ItemData(Materials.Snow, -1L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.sand, 1, 32767), new ItemData(Materials.Sand, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.sandstone, 1, 32767), new ItemData(Materials.Sand, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stone_slab, 1, 0), new ItemData(Materials.Stone, 1814400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stone_slab, 1, 8), new ItemData(Materials.Stone, 1814400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 0), new ItemData(Materials.Stone, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 8), new ItemData(Materials.Stone, 3628800L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 1), new ItemData(Materials.Sand, 1814400L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 9), new ItemData(Materials.Sand, 1814400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 1), new ItemData(Materials.Sand, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 9), new ItemData(Materials.Sand, 3628800L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.stone_slab, 1, 2), new ItemData(Materials.Wood, 1814400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stone_slab, 1, 10), new ItemData(Materials.Wood, 1814400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 2), new ItemData(Materials.Wood, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 10), new ItemData(Materials.Wood, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stone_slab, 1, 3), new ItemData(Materials.Stone, 1814400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stone_slab, 1, 11), new ItemData(Materials.Stone, 1814400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 3), new ItemData(Materials.Stone, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 11), new ItemData(Materials.Stone, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stone_slab, 1, 5), new ItemData(Materials.Stone, 1814400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stone_slab, 1, 13), new ItemData(Materials.Stone, 1814400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 5), new ItemData(Materials.Stone, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.double_stone_slab, 1, 13), new ItemData(Materials.Stone, 3628800L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.stone, 1, 32767), new ItemData(Materials.Stone, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.furnace, 1, 32767), new ItemData(Materials.Stone, 29030400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.lit_furnace, 1, 32767), new ItemData(Materials.Stone, 29030400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stonebrick, 1, 32767), new ItemData(Materials.Stone, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.cobblestone, 1, 32767), new ItemData(Materials.Stone, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.mossy_cobblestone, 1, 32767), new ItemData(Materials.Stone, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stone_button, 1, 32767), new ItemData(Materials.Stone, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.stone_pressure_plate, 1, 32767), new ItemData(Materials.Stone, 7257600L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.ladder, 1, 32767), new ItemData(Materials.Wood, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.wooden_button, 1, 32767), new ItemData(Materials.Wood, 3628800L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.wooden_pressure_plate, 1, 32767), new ItemData(Materials.Wood, 7257600L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.fence, 1, 32767), new ItemData(Materials.Wood, 5443200L)); + GTOreDictUnificator.addItemData(new ItemStack(Items.bowl, 1, 32767), new ItemData(Materials.Wood, 3628800L)); + GTOreDictUnificator.addItemData(new ItemStack(Items.sign, 1, 32767), new ItemData(Materials.Wood, 7257600L)); + GTOreDictUnificator + .addItemData(new ItemStack(Items.wooden_door, 1, 32767), new ItemData(Materials.Wood, 21772800L)); + GTOreDictUnificator.addItemData(new ItemStack(Blocks.chest, 1, 32767), new ItemData(Materials.Wood, 29030400L)); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.trapped_chest, 1, 32767), new ItemData(Materials.Wood, 29030400L)); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.unlit_redstone_torch, 1, 32767), + new ItemData(Materials.Wood, 1814400L, new MaterialStack(Materials.Redstone, 3628800L))); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.redstone_torch, 1, 32767), + new ItemData(Materials.Wood, 1814400L, new MaterialStack(Materials.Redstone, 3628800L))); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.noteblock, 1, 32767), + new ItemData(Materials.Wood, 29030400L, new MaterialStack(Materials.Redstone, 3628800L))); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.jukebox, 1, 32767), + new ItemData(Materials.Wood, 29030400L, new MaterialStack(Materials.Diamond, 3628800L))); + GTOreDictUnificator + .addItemData(new ItemStack(Blocks.crafting_table, 1, 32767), new ItemData(Materials.Wood, 14515200L)); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.piston, 1, 32767), + new ItemData(Materials.Stone, 14515200L, new MaterialStack(Materials.Wood, 10886400L))); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.sticky_piston, 1, 32767), + new ItemData(Materials.Stone, 14515200L, new MaterialStack(Materials.Wood, 10886400L))); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.dispenser, 1, 32767), + new ItemData(Materials.Stone, 25401600L, new MaterialStack(Materials.Redstone, 3628800L))); + GTOreDictUnificator.addItemData( + new ItemStack(Blocks.dropper, 1, 32767), + new ItemData(Materials.Stone, 25401600L, new MaterialStack(Materials.Redstone, 3628800L))); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(Thaumcraft.ID, "ItemNuggetChicken", 1L, 32767), + new ItemData(Materials.MeatCooked, 403200L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(Thaumcraft.ID, "ItemNuggetBeef", 1L, 32767), + new ItemData(Materials.MeatCooked, 403200L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(Thaumcraft.ID, "ItemNuggetPork", 1L, 32767), + new ItemData(Materials.MeatCooked, 403200L)); + GTOreDictUnificator.addItemData( + GTModHandler.getModItem(Thaumcraft.ID, "ItemNuggetFish", 1L, 32767), + new ItemData(Materials.MeatCooked, 403200L)); + + for (ItemStack tItem : new ItemStack[] { GTModHandler.getModItem(TwilightForest.ID, "item.meefRaw", 1L, 0), + GTModHandler.getModItem(TwilightForest.ID, "item.venisonRaw", 1L, 0), + GTModHandler.getModItem(PamsHarvestCraft.ID, "muttonrawItem", 1L, 0), + GTModHandler.getModItem(PamsHarvestCraft.ID, "turkeyrawItem", 1L, 0), + GTModHandler.getModItem(PamsHarvestCraft.ID, "rabbitrawItem", 1L, 0), + GTModHandler.getModItem(PamsHarvestCraft.ID, "venisonrawItem", 1L, 0), new ItemStack(Items.porkchop), + new ItemStack(Items.beef), new ItemStack(Items.chicken), new ItemStack(Items.fish) }) { + if (tItem != null) { + GTOreDictUnificator.addItemData( + GTUtility.copyMetaData(32767, tItem), + new ItemData(Materials.MeatRaw, 3628800L, new MaterialStack(Materials.Bone, 403200L))); + } + } + for (ItemStack tItem : new ItemStack[] { GTModHandler.getModItem(TwilightForest.ID, "item.meefSteak", 1L, 0), + GTModHandler.getModItem(TwilightForest.ID, "item.venisonCooked", 1L, 0), + GTModHandler.getModItem(PamsHarvestCraft.ID, "muttoncookedItem", 1L, 0), + GTModHandler.getModItem(PamsHarvestCraft.ID, "turkeycookedItem", 1L, 0), + GTModHandler.getModItem(PamsHarvestCraft.ID, "rabbitcookedItem", 1L, 0), + GTModHandler.getModItem(PamsHarvestCraft.ID, "venisoncookedItem", 1L, 0), + new ItemStack(Items.cooked_porkchop), new ItemStack(Items.cooked_beef), new ItemStack(Items.cooked_chicken), + new ItemStack(Items.cooked_fished) }) { + if (tItem != null) { + GTOreDictUnificator.addItemData( + GTUtility.copyMetaData(32767, tItem), + new ItemData(Materials.MeatCooked, 3628800L, new MaterialStack(Materials.Bone, 403200L))); + } + } + } +} diff --git a/src/main/java/gregtech/loaders/preload/LoaderGTOreDictionary.java b/src/main/java/gregtech/loaders/preload/LoaderGTOreDictionary.java new file mode 100644 index 0000000000..0d2bd3ad55 --- /dev/null +++ b/src/main/java/gregtech/loaders/preload/LoaderGTOreDictionary.java @@ -0,0 +1,456 @@ +package gregtech.loaders.preload; + +import static gregtech.api.enums.Mods.AppliedEnergistics2; +import static gregtech.api.enums.Mods.Botania; +import static gregtech.api.enums.Mods.IndustrialCraft2; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.enums.Mods.Railcraft; +import static gregtech.api.enums.Mods.Thaumcraft; +import static gregtech.api.enums.Mods.TwilightForest; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsBotania; +import gregtech.api.enums.OreDictNames; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; + +public class LoaderGTOreDictionary implements Runnable { + + @Override + public void run() { + GTLog.out.println("GTMod: Register OreDict Entries of Non-GT-Items."); + GTOreDictUnificator.set(OrePrefixes.cell, Materials.Empty, ItemList.Cell_Empty.get(1L)); + GTOreDictUnificator.set(OrePrefixes.cell, Materials.Lava, ItemList.Cell_Lava.get(1L)); + GTOreDictUnificator.set(OrePrefixes.cell, Materials.Lava, GTModHandler.getIC2Item("lavaCell", 1L)); + GTOreDictUnificator.set(OrePrefixes.cell, Materials.Water, ItemList.Cell_Water.get(1L)); + GTOreDictUnificator.set(OrePrefixes.cell, Materials.Water, GTModHandler.getIC2Item("waterCell", 1L)); + GTOreDictUnificator.set( + OrePrefixes.cell, + Materials.Creosote, + GTModHandler.getModItem(Railcraft.ID, "fluid.creosote.cell", 1L)); + + GTOreDictUnificator.set(OrePrefixes.cell, Materials.UUMatter, GTModHandler.getIC2Item("uuMatterCell", 1L)); + GTOreDictUnificator.set(OrePrefixes.cell, Materials.ConstructionFoam, GTModHandler.getIC2Item("CFCell", 1L)); + + GTOreDictUnificator.set(OrePrefixes.bucket, Materials.Empty, new ItemStack(Items.bucket, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.bucket, Materials.Water, new ItemStack(Items.water_bucket, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.bucket, Materials.Lava, new ItemStack(Items.lava_bucket, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.bucket, Materials.Milk, new ItemStack(Items.milk_bucket, 1, 0)); + // Clay buckets handled in gregtech.common.GTProxy.onLoad() as they aren't registered until Iguana Tweaks + // pre-init. + + GTOreDictUnificator.set(OrePrefixes.bottle, Materials.Empty, new ItemStack(Items.glass_bottle, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.bottle, Materials.Water, new ItemStack(Items.potionitem, 1, 0)); + + GTOreDictUnificator.set(OrePrefixes.plateAlloy, Materials.Iridium, GTModHandler.getIC2Item("iridiumPlate", 1L)); + GTOreDictUnificator + .set(OrePrefixes.plateAlloy, Materials.Advanced, GTModHandler.getIC2Item("advancedAlloy", 1L)); + GTOreDictUnificator.set(OrePrefixes.plateAlloy, Materials.Carbon, GTModHandler.getIC2Item("carbonPlate", 1L)); + + GTOreDictUnificator.set(OrePrefixes.ore, Materials.Coal, new ItemStack(Blocks.coal_ore, 1)); + GTOreDictUnificator.set(OrePrefixes.ore, Materials.Iron, new ItemStack(Blocks.iron_ore, 1)); + GTOreDictUnificator.set(OrePrefixes.ore, Materials.Lapis, new ItemStack(Blocks.lapis_ore, 1)); + GTOreDictUnificator.set(OrePrefixes.ore, Materials.Redstone, new ItemStack(Blocks.redstone_ore, 1)); + GTOreDictUnificator.set(OrePrefixes.ore, Materials.Redstone, new ItemStack(Blocks.lit_redstone_ore, 1)); + GTOreDictUnificator.set(OrePrefixes.ore, Materials.Gold, new ItemStack(Blocks.gold_ore, 1)); + GTOreDictUnificator.set(OrePrefixes.ore, Materials.Diamond, new ItemStack(Blocks.diamond_ore, 1)); + GTOreDictUnificator.set(OrePrefixes.ore, Materials.Emerald, new ItemStack(Blocks.emerald_ore, 1)); + GTOreDictUnificator.set(OrePrefixes.ore, Materials.NetherQuartz, new ItemStack(Blocks.quartz_ore, 1)); + GTOreDictUnificator.set(OrePrefixes.ingot, Materials.Copper, GTModHandler.getIC2Item("copperIngot", 1L)); + GTOreDictUnificator.set(OrePrefixes.ingot, Materials.Tin, GTModHandler.getIC2Item("tinIngot", 1L)); + GTOreDictUnificator.set(OrePrefixes.ingot, Materials.Lead, GTModHandler.getIC2Item("leadIngot", 1L)); + GTOreDictUnificator.set(OrePrefixes.ingot, Materials.Bronze, GTModHandler.getIC2Item("bronzeIngot", 1L)); + GTOreDictUnificator.set(OrePrefixes.ingot, Materials.Silver, GTModHandler.getIC2Item("silverIngot", 1L)); + GTOreDictUnificator.set(OrePrefixes.gem, Materials.Iridium, GTModHandler.getIC2Item("iridiumOre", 1L)); + GTOreDictUnificator.set(OrePrefixes.gem, Materials.Lapis, new ItemStack(Items.dye, 1, 4)); + GTOreDictUnificator.set(OrePrefixes.gem, Materials.EnderEye, new ItemStack(Items.ender_eye, 1)); + GTOreDictUnificator.set(OrePrefixes.gem, Materials.EnderPearl, new ItemStack(Items.ender_pearl, 1)); + GTOreDictUnificator.set(OrePrefixes.gem, Materials.Diamond, new ItemStack(Items.diamond, 1)); + GTOreDictUnificator.set(OrePrefixes.gem, Materials.Emerald, new ItemStack(Items.emerald, 1)); + GTOreDictUnificator.set(OrePrefixes.gem, Materials.Coal, new ItemStack(Items.coal, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.gem, Materials.Charcoal, new ItemStack(Items.coal, 1, 1)); + GTOreDictUnificator.set(OrePrefixes.gem, Materials.NetherQuartz, new ItemStack(Items.quartz, 1)); + GTOreDictUnificator.set(OrePrefixes.gem, Materials.NetherStar, new ItemStack(Items.nether_star, 1)); + GTOreDictUnificator.set(OrePrefixes.nugget, Materials.Gold, new ItemStack(Items.gold_nugget, 1)); + GTOreDictUnificator.set(OrePrefixes.ingot, Materials.Gold, new ItemStack(Items.gold_ingot, 1)); + GTOreDictUnificator.set(OrePrefixes.ingot, Materials.Iron, new ItemStack(Items.iron_ingot, 1)); + GTOreDictUnificator.set(OrePrefixes.plate, Materials.Paper, new ItemStack(Items.paper, 1)); + GTOreDictUnificator.set(OrePrefixes.dust, Materials.Sugar, new ItemStack(Items.sugar, 1)); + GTOreDictUnificator.set(OrePrefixes.dust, Materials.Bone, ItemList.Dye_Bonemeal.get(1L)); + GTOreDictUnificator.set(OrePrefixes.stick, Materials.Wood, new ItemStack(Items.stick, 1)); + GTOreDictUnificator.set(OrePrefixes.dust, Materials.Redstone, new ItemStack(Items.redstone, 1)); + GTOreDictUnificator.set(OrePrefixes.dust, Materials.Gunpowder, new ItemStack(Items.gunpowder, 1)); + GTOreDictUnificator.set(OrePrefixes.dust, Materials.Glowstone, new ItemStack(Items.glowstone_dust, 1)); + GTOreDictUnificator.set(OrePrefixes.dust, Materials.Blaze, new ItemStack(Items.blaze_powder, 1)); + GTOreDictUnificator.set(OrePrefixes.stick, Materials.Blaze, new ItemStack(Items.blaze_rod, 1)); + GTOreDictUnificator.set(OrePrefixes.block, Materials.Iron, new ItemStack(Blocks.iron_block, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.block, Materials.Gold, new ItemStack(Blocks.gold_block, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.block, Materials.Diamond, new ItemStack(Blocks.diamond_block, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.block, Materials.Emerald, new ItemStack(Blocks.emerald_block, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.block, Materials.Lapis, new ItemStack(Blocks.lapis_block, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.block, Materials.Coal, new ItemStack(Blocks.coal_block, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.block, Materials.Redstone, new ItemStack(Blocks.redstone_block, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.block, Materials.NetherQuartz, new ItemStack(Blocks.quartz_block, 1, 0)); + GTOreDictUnificator.set(OrePrefixes.block, Materials.Clay, new ItemStack(Blocks.clay, 1, 0)); + if (Blocks.ender_chest != null) { + GTOreDictUnificator.registerOre(OreDictNames.enderChest, new ItemStack(Blocks.ender_chest, 1)); + } + GTOreDictUnificator.registerOre(OreDictNames.craftingAnvil, new ItemStack(Blocks.anvil, 1)); + GTOreDictUnificator + .registerOre(OreDictNames.craftingAnvil, GTModHandler.getModItem(Railcraft.ID, "anvil", 1L, 0)); + GTOreDictUnificator + .registerOre(OreDictNames.craftingIndustrialDiamond, ItemList.IC2_Industrial_Diamond.get(1L)); + GTOreDictUnificator + .registerOre(OrePrefixes.glass, Materials.Reinforced, GTModHandler.getIC2Item("reinforcedGlass", 1L)); + + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.Basalt, GTModHandler.getModItem(Railcraft.ID, "cube", 1L, 6)); + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.Marble, GTModHandler.getModItem(Railcraft.ID, "cube", 1L, 7)); + GTOreDictUnificator.registerOre( + OrePrefixes.stone, + Materials.Basalt, + GTModHandler.getModItem(Railcraft.ID, "brick.abyssal", 1L, 32767)); + GTOreDictUnificator.registerOre( + OrePrefixes.stone, + Materials.Marble, + GTModHandler.getModItem(Railcraft.ID, "brick.quarried", 1L, 32767)); + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.Obsidian, new ItemStack(Blocks.obsidian, 1, 32767)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Stone, new ItemStack(Blocks.stone, 1, 32767)); + GTOreDictUnificator.registerOre(OrePrefixes.stoneMossy, new ItemStack(Blocks.mossy_cobblestone, 1, 32767)); + GTOreDictUnificator.registerOre(OrePrefixes.stoneCobble, new ItemStack(Blocks.mossy_cobblestone, 1, 32767)); + GTOreDictUnificator.registerOre(OrePrefixes.stoneCobble, new ItemStack(Blocks.cobblestone, 1, 32767)); + GTOreDictUnificator.registerOre(OrePrefixes.stoneSmooth, new ItemStack(Blocks.stone, 1, 32767)); + GTOreDictUnificator.registerOre(OrePrefixes.stoneBricks, new ItemStack(Blocks.stonebrick, 1, 32767)); + GTOreDictUnificator.registerOre(OrePrefixes.stoneMossy, new ItemStack(Blocks.stonebrick, 1, 1)); + GTOreDictUnificator.registerOre(OrePrefixes.stoneCracked, new ItemStack(Blocks.stonebrick, 1, 2)); + GTOreDictUnificator.registerOre(OrePrefixes.stoneChiseled, new ItemStack(Blocks.stonebrick, 1, 3)); + GTOreDictUnificator.registerOre(OrePrefixes.stone, Materials.Sand, new ItemStack(Blocks.sandstone, 1, 32767)); + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.Netherrack, new ItemStack(Blocks.netherrack, 1, 32767)); + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.NetherBrick, new ItemStack(Blocks.nether_brick, 1, 32767)); + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.Endstone, new ItemStack(Blocks.end_stone, 1, 32767)); + GTOreDictUnificator + .registerOre(OrePrefixes.stone, Materials.Glowstone, new ItemStack(Blocks.glowstone, 1, 32767)); + + GTOreDictUnificator + .registerOre("paperResearchFragment", GTModHandler.getModItem(Thaumcraft.ID, "ItemResource", 1L, 9)); + GTOreDictUnificator.registerOre( + "itemCertusQuartz", + GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 1)); + GTOreDictUnificator.registerOre( + "itemCertusQuartz", + GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10)); + GTOreDictUnificator.registerOre( + "itemNetherQuartz", + GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11)); + GTOreDictUnificator.registerOre( + OreDictNames.craftingQuartz, + GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 1)); + GTOreDictUnificator.registerOre( + OreDictNames.craftingQuartz, + GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 10)); + GTOreDictUnificator.registerOre( + OreDictNames.craftingQuartz, + GTModHandler.getModItem(AppliedEnergistics2.ID, "item.ItemMultiMaterial", 1L, 11)); + GTOreDictUnificator.registerOre("cropLemon", ItemList.FR_Lemon.get(1L)); + GTOreDictUnificator.registerOre("cropCoffee", ItemList.IC2_CoffeeBeans.get(1L)); + GTOreDictUnificator.registerOre("cropPotato", ItemList.Food_Raw_Potato.get(1L)); + GTOreDictUnificator.registerOre(OrePrefixes.battery, Materials.LV, GTModHandler.getIC2Item("reBattery", 1L)); + GTOreDictUnificator + .registerOre(OrePrefixes.battery, Materials.LV, GTModHandler.getIC2Item("chargedReBattery", 1L, 32767)); + GTOreDictUnificator + .registerOre(OrePrefixes.battery, Materials.MV, GTModHandler.getIC2Item("advBattery", 1L, 32767)); + GTOreDictUnificator + .registerOre(OrePrefixes.battery, Materials.HV, GTModHandler.getIC2Item("energyCrystal", 1L, 32767)); + GTOreDictUnificator + .registerOre(OrePrefixes.battery, Materials.EV, GTModHandler.getIC2Item("lapotronCrystal", 1L, 32767)); + + GTOreDictUnificator + .registerOre(OreDictNames.craftingWireCopper, GTModHandler.getIC2Item("insulatedCopperCableItem", 1L)); + GTOreDictUnificator + .registerOre(OreDictNames.craftingWireGold, GTModHandler.getIC2Item("insulatedGoldCableItem", 1L)); + GTOreDictUnificator + .registerOre(OreDictNames.craftingWireIron, GTModHandler.getIC2Item("insulatedIronCableItem", 1L)); + GTOreDictUnificator.registerOre( + OreDictNames.craftingWireTin, + GTModHandler + .getIC2Item("insulatedTinCableItem", 1L, GTModHandler.getIC2Item("insulatedCopperCableItem", 1L))); + + GTOreDictUnificator + .registerOre(OreDictNames.craftingRedstoneTorch, new ItemStack(Blocks.redstone_torch, 1, 32767)); + GTOreDictUnificator + .registerOre(OreDictNames.craftingRedstoneTorch, new ItemStack(Blocks.unlit_redstone_torch, 1, 32767)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingWorkBench, new ItemStack(Blocks.crafting_table, 1)); + GTOreDictUnificator + .registerOre(OreDictNames.craftingWorkBench, new ItemStack(GregTechAPI.sBlockMachines, 1, 16)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingPiston, new ItemStack(Blocks.piston, 1, 32767)); + GTOreDictUnificator.registerOre(OreDictNames.craftingPiston, new ItemStack(Blocks.sticky_piston, 1, 32767)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingSafe, new ItemStack(GregTechAPI.sBlockMachines, 1, 45)); + GTOreDictUnificator.registerOre(OreDictNames.craftingSafe, GTModHandler.getIC2Item("personalSafe", 1L)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingChest, new ItemStack(Blocks.chest, 1, 32767)); + GTOreDictUnificator.registerOre(OreDictNames.craftingChest, new ItemStack(Blocks.trapped_chest, 1, 32767)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingFurnace, new ItemStack(Blocks.furnace, 1, 32767)); + GTOreDictUnificator.registerOre(OreDictNames.craftingFurnace, new ItemStack(Blocks.lit_furnace, 1, 32767)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingPump, GTModHandler.getIC2Item("pump", 1L)); + GTOreDictUnificator.registerOre(OreDictNames.craftingElectromagnet, GTModHandler.getIC2Item("magnetizer", 1L)); + GTOreDictUnificator.registerOre(OreDictNames.craftingTeleporter, GTModHandler.getIC2Item("teleporter", 1L)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingMacerator, GTModHandler.getIC2Item("macerator", 1L)); + GTOreDictUnificator + .registerOre(OreDictNames.craftingMacerator, new ItemStack(GregTechAPI.sBlockMachines, 1, 50)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingExtractor, GTModHandler.getIC2Item("extractor", 1L)); + GTOreDictUnificator + .registerOre(OreDictNames.craftingExtractor, new ItemStack(GregTechAPI.sBlockMachines, 1, 51)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingCompressor, GTModHandler.getIC2Item("compressor", 1L)); + GTOreDictUnificator + .registerOre(OreDictNames.craftingCompressor, new ItemStack(GregTechAPI.sBlockMachines, 1, 52)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingRecycler, GTModHandler.getIC2Item("recycler", 1L)); + GTOreDictUnificator + .registerOre(OreDictNames.craftingRecycler, new ItemStack(GregTechAPI.sBlockMachines, 1, 53)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingIronFurnace, GTModHandler.getIC2Item("ironFurnace", 1L)); + + GTOreDictUnificator + .registerOre(OreDictNames.craftingCentrifuge, new ItemStack(GregTechAPI.sBlockMachines, 1, 62)); + + GTOreDictUnificator + .registerOre(OreDictNames.craftingInductionFurnace, GTModHandler.getIC2Item("inductionFurnace", 1L)); + + GTOreDictUnificator + .registerOre(OreDictNames.craftingElectricFurnace, GTModHandler.getIC2Item("electroFurnace", 1L)); + GTOreDictUnificator + .registerOre(OreDictNames.craftingElectricFurnace, new ItemStack(GregTechAPI.sBlockMachines, 1, 54)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingGenerator, GTModHandler.getIC2Item("generator", 1L)); + + GTOreDictUnificator + .registerOre(OreDictNames.craftingGeothermalGenerator, GTModHandler.getIC2Item("geothermalGenerator", 1L)); + + GTOreDictUnificator.registerOre(OreDictNames.craftingFeather, new ItemStack(Items.feather, 1, 32767)); + GTOreDictUnificator.registerOre( + OreDictNames.craftingFeather, + GTModHandler.getModItem(TwilightForest.ID, "item.tfFeather", 1L, 32767)); + + GTOreDictUnificator.registerOre("itemWheat", new ItemStack(Items.wheat, 1, 32767)); + GTOreDictUnificator.registerOre("paperEmpty", new ItemStack(Items.paper, 1, 32767)); + GTOreDictUnificator.registerOre("paperMap", new ItemStack(Items.map, 1, 32767)); + GTOreDictUnificator.registerOre("paperMap", new ItemStack(Items.filled_map, 1, 32767)); + GTOreDictUnificator.registerOre("bookEmpty", new ItemStack(Items.book, 1, 32767)); + GTOreDictUnificator.registerOre("bookWritable", new ItemStack(Items.writable_book, 1, 32767)); + GTOreDictUnificator.registerOre("bookWritten", new ItemStack(Items.written_book, 1, 32767)); + GTOreDictUnificator.registerOre("bookEnchanted", new ItemStack(Items.enchanted_book, 1, 32767)); + GTOreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.book, 1, 32767)); + GTOreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.writable_book, 1, 32767)); + GTOreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.written_book, 1, 32767)); + GTOreDictUnificator.registerOre(OreDictNames.craftingBook, new ItemStack(Items.enchanted_book, 1, 32767)); + + GTOreDictUnificator.addToBlacklist(GTModHandler.getIC2Item("electronicCircuit", 1L)); + GTOreDictUnificator.addToBlacklist(GTModHandler.getIC2Item("advancedCircuit", 1L)); + GTOreDictUnificator + .registerOre(OrePrefixes.circuit, Materials.LV, GTModHandler.getIC2Item("electronicCircuit", 1L)); + GTOreDictUnificator + .registerOre(OrePrefixes.circuit, Materials.HV, GTModHandler.getIC2Item("advancedCircuit", 1L)); + + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Copper, + GTModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 0)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Tin, + GTModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 1)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Bronze, + GTModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 2)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Gold, + GTModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 3)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Iron, + GTModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 4)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Steel, + GTModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 5)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Lead, + GTModHandler.getModItem(IndustrialCraft2.ID, "itemCasing", 1L, 6)); + + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Osmium, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.OsmiumItemCasing", 1L, 0)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Aluminium, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.AluminiumItemCasing", 1L, 0)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.StainlessSteel, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.StainlessSteelItemCasing", 1L, 0)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Tungsten, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TungstenItemCasing", 1L, 0)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Neutronium, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.NeutroniumItemCasing", 1L, 0)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.TungstenSteel, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TungstenSteelItemCasing", 1L, 0)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Iridium, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.IridiumItemCasing", 1L, 0)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Titanium, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.TitaniumItemCasing", 1L, 0)); + GTOreDictUnificator.registerOre( + OrePrefixes.itemCasing, + Materials.Chrome, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ChromeItemCasing", 1L, 0)); + + // Fake Circuits + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.ULV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitULV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.LV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitLV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.MV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitMV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.HV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitHV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.EV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitEV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.IV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitIV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.LuV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitLuV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.ZPM, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitZPM", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.UV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.UHV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUHV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.UEV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUEV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.UIV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUIV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.UMV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUMV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.UXV, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitUXV", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.circuit, + Materials.MAX, + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.CircuitMAX", 1L)); + + GTOreDictUnificator.registerOre( + OrePrefixes.block, + MaterialsBotania.Manasteel, + GTModHandler.getModItem(Botania.ID, "storage", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.block, + MaterialsBotania.Terrasteel, + GTModHandler.getModItem(Botania.ID, "storage", 1L, 1)); + GTOreDictUnificator.registerOre( + OrePrefixes.ingot, + MaterialsBotania.ElvenElementium, + GTModHandler.getModItem(Botania.ID, "manaResource", 1L, 7)); + GTOreDictUnificator.registerOre( + OrePrefixes.nugget, + MaterialsBotania.ElvenElementium, + GTModHandler.getModItem(Botania.ID, "manaResource", 1L, 19)); + GTOreDictUnificator.registerOre( + OrePrefixes.block, + MaterialsBotania.ElvenElementium, + GTModHandler.getModItem(Botania.ID, "storage", 1L, 2)); + GTOreDictUnificator.registerOre( + OrePrefixes.block, + MaterialsBotania.Livingrock, + GTModHandler.getModItem(Botania.ID, "livingrock", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.ingot, + MaterialsBotania.GaiaSpirit, + GTModHandler.getModItem(Botania.ID, "manaResource", 1L, 14)); + GTOreDictUnificator.registerOre( + OrePrefixes.block, + MaterialsBotania.Livingwood, + GTModHandler.getModItem(Botania.ID, "livingwood", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.block, + MaterialsBotania.Dreamwood, + GTModHandler.getModItem(Botania.ID, "dreamwood", 1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.gem, + MaterialsBotania.ManaDiamond, + GTModHandler.getModItem(Botania.ID, "manaResource", 1L, 2)); + GTOreDictUnificator.registerOre( + OrePrefixes.block, + MaterialsBotania.ManaDiamond, + GTModHandler.getModItem(Botania.ID, "storage", 1L, 3)); + GTOreDictUnificator.registerOre( + OrePrefixes.gem, + MaterialsBotania.BotaniaDragonstone, + GTModHandler.getModItem(Botania.ID, "manaResource", 1L, 9)); + GTOreDictUnificator.registerOre( + OrePrefixes.block, + MaterialsBotania.BotaniaDragonstone, + GTModHandler.getModItem(Botania.ID, "storage", 1L, 4)); + } +} diff --git a/src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java b/src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java new file mode 100644 index 0000000000..b462e065cd --- /dev/null +++ b/src/main/java/gregtech/loaders/preload/LoaderMetaTileEntities.java @@ -0,0 +1,13128 @@ +package gregtech.loaders.preload; + +import static gregtech.api.enums.MetaTileEntityIDs.*; +import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_DATA_ACCESS_HATCH; +import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_DEBUG_STRUCTURE_WRITTER; +import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_SEISMIC_PROSPECTOR_EV; +import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_SEISMIC_PROSPECTOR_HV; +import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_SEISMIC_PROSPECTOR_LV; +import static gregtech.api.enums.MetaTileEntityIDs.ADVANCED_SEISMIC_PROSPECTOR_MV; +import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.ALLOY_SMELTER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.ARC_FURNACE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_LINE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.ASSEMBLING_MACHINE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.AUTOCLAVE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.AUTOMATABLE_DATA_ACCESS_HATCH; +import static gregtech.api.enums.MetaTileEntityIDs.AUTO_MAINTENANCE_HATCH; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_EV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_HV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_IV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_LV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_MV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_1_BY_1_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_EV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_HV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_IV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_LV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_MV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_2_BY_2_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_EV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_HV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_IV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_LV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_MV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_3_BY_3_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_EV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_HV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_IV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_LV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_MV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_BUFFER_4_BY_4_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_4_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_4_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_4_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_4_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_EV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_HV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_IV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_LV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_MV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_UV; +import static gregtech.api.enums.MetaTileEntityIDs.BATTERY_CHARGER_4_BY_4_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.BENDING_MACHINE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.BETTER_JUKEBOX_EV; +import static gregtech.api.enums.MetaTileEntityIDs.BETTER_JUKEBOX_HV; +import static gregtech.api.enums.MetaTileEntityIDs.BETTER_JUKEBOX_IV; +import static gregtech.api.enums.MetaTileEntityIDs.BETTER_JUKEBOX_LV; +import static gregtech.api.enums.MetaTileEntityIDs.BETTER_JUKEBOX_MV; +import static gregtech.api.enums.MetaTileEntityIDs.BLACKHOLE_COMPRESSOR_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_EV; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_HV; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_IV; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_LV; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_MV; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_UV; +import static gregtech.api.enums.MetaTileEntityIDs.BREWERY_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.BRICKED_BLAST_FURNACE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.CANNING_MACHINE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.CENTRIFUGE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.CHARCOAL_PILE_IGNITER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_UV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_BATH_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEMICAL_REACTOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.CHEST_BUFFER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.CIRCUIT_ASSEMBLER_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.CLEANROOM_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.COMBUSTION_ENGINE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.COMBUSTION_GENERATOR_HV; +import static gregtech.api.enums.MetaTileEntityIDs.COMBUSTION_GENERATOR_LV; +import static gregtech.api.enums.MetaTileEntityIDs.COMBUSTION_GENERATOR_MV; +import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.COMPRESSOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.CONCRETE_BACKFILLER_II_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.CONCRETE_BACKFILLER_I_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.CRAFTING_INPUT_ME; +import static gregtech.api.enums.MetaTileEntityIDs.CRAFTING_INPUT_ME_BUS; +import static gregtech.api.enums.MetaTileEntityIDs.CRAFTING_INPUT_SLAVE; +import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.CUTTING_MACHINE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.DATA_ACCESS_HATCH; +import static gregtech.api.enums.MetaTileEntityIDs.DISTILLATION_TOWER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_UV; +import static gregtech.api.enums.MetaTileEntityIDs.DISTILLERY_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.DTPF_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_EV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_HV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_IV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_LV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_MV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.DYNAMO_HATCH_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.DroneDownLink; +import static gregtech.api.enums.MetaTileEntityIDs.Drone_Centre; +import static gregtech.api.enums.MetaTileEntityIDs.EBF_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTRIC_FURNACE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROLYZER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.ELECTROMAGNETIC_SEPARATOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_EV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_HV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_IV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_LV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_MV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.ENERGY_HATCH_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRACTOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.EXTREME_COMBUSTION_ENGINE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.EXTRUDER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.FERMENTER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_CANNER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_EXTRACTOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_HEATER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.FLUID_SOLIDIFIER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.FORGE_HAMMER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_UV; +import static gregtech.api.enums.MetaTileEntityIDs.FORMING_PRESS_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.FUSION_CONTROLLER_MKI; +import static gregtech.api.enums.MetaTileEntityIDs.FUSION_CONTROLLER_MKII; +import static gregtech.api.enums.MetaTileEntityIDs.FUSION_CONTROLLER_MKIII; +import static gregtech.api.enums.MetaTileEntityIDs.GAS_TURBINE_EV; +import static gregtech.api.enums.MetaTileEntityIDs.GAS_TURBINE_HV; +import static gregtech.api.enums.MetaTileEntityIDs.GAS_TURBINE_IV; +import static gregtech.api.enums.MetaTileEntityIDs.GAS_TURBINE_LV; +import static gregtech.api.enums.MetaTileEntityIDs.GAS_TURBINE_MV; +import static gregtech.api.enums.MetaTileEntityIDs.HATCH_DEGASIFIER_CONTROL; +import static gregtech.api.enums.MetaTileEntityIDs.HATCH_LENS_HOUSING; +import static gregtech.api.enums.MetaTileEntityIDs.HATCH_LENS_INDICATOR; +import static gregtech.api.enums.MetaTileEntityIDs.HATCH_PH_SENSOR; +import static gregtech.api.enums.MetaTileEntityIDs.HEAT_DETECTOR_HATCH; +import static gregtech.api.enums.MetaTileEntityIDs.HIGH_AMP_TRANSFORMER_MAX_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.HIGH_AMP_TRANSFORMER_UEV_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.HIGH_AMP_TRANSFORMER_UIV_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.HIGH_AMP_TRANSFORMER_UMV_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.HIGH_AMP_TRANSFORMER_UXV_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.HIGH_PRESSURE_COAL_BOILER; +import static gregtech.api.enums.MetaTileEntityIDs.HIGH_PRESSURE_LAVA_BOILER; +import static gregtech.api.enums.MetaTileEntityIDs.HIGH_PRESSURE_SOLAR_BOILER; +import static gregtech.api.enums.MetaTileEntityIDs.HIP_COMPRESSOR_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_ALLOY_SMELTER; +import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_COMPRESSOR; +import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_EXTRACTOR; +import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_FORGE_HAMMER; +import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_FURNACE; +import static gregtech.api.enums.MetaTileEntityIDs.HP_STEAM_MACERATOR; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_BRICKED_BRONZE; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_BRONZE; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_EV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_HV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_IV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_LV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_MV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_STEEL; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_UV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_WROUGHT_IRON; +import static gregtech.api.enums.MetaTileEntityIDs.HULL_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.IMPLOSION_COMPRESSOR_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.INDUSTRIAL_APIARY; +import static gregtech.api.enums.MetaTileEntityIDs.INDUSTRIAL_COMPRESSOR_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.INDUSTRIAL_ELECTROMAGNETIC_SEPARATOR_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.INDUSTRIAL_LASER_ENGRAVER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_EV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_HV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_IV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_LV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_ME; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_ME_ADVANCED; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_MV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_UV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_BUS_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_EV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_HV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_IV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_LV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_ME; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_ME_ADVANCED; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_MV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.INPUT_HATCH_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.INTEGRATED_ORE_FACTORY_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_EV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_HV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_IV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_LV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_MV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_DISTRIBUTOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.ITEM_FILTER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LARGE_ADVANCED_GAS_TURBINE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.LARGE_BRONZE_BOILER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.LARGE_GAS_TURBINE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.LARGE_HEAT_EXCHANGER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.LARGE_HP_STEAM_TURBINE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.LARGE_PLASMA_TURBINE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.LARGE_STEAM_TURBINE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.LARGE_STEEL_BOILER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.LARGE_TITANIUM_BOILER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.LARGE_TUNGSTENSTEEL_BOILER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.LASER_ENGRAVER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LATHE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LATHE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.LATHE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.LATHE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.LATHE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.LATHE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.LATHE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LCR_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.LIGHTNING_ROD_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LIGHTNING_ROD_HV; +import static gregtech.api.enums.MetaTileEntityIDs.LIGHTNING_ROD_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.LOCKER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.LONG_DISTANCE_PIPELINE_FLUID; +import static gregtech.api.enums.MetaTileEntityIDs.LONG_DISTANCE_PIPELINE_ITEM; +import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.MACERATOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_ABSORBER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_ABSORBER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_ABSORBER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_ABSORBER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_CONVERTER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_CONVERTER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.MAGIC_ENERGY_CONVERTER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.MAG_HATCH; +import static gregtech.api.enums.MetaTileEntityIDs.MAINTENANCE_HATCH; +import static gregtech.api.enums.MetaTileEntityIDs.MASS_FABRICATOR_EV; +import static gregtech.api.enums.MetaTileEntityIDs.MASS_FABRICATOR_HV; +import static gregtech.api.enums.MetaTileEntityIDs.MASS_FABRICATOR_IV; +import static gregtech.api.enums.MetaTileEntityIDs.MASS_FABRICATOR_LV; +import static gregtech.api.enums.MetaTileEntityIDs.MASS_FABRICATOR_MV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_AMPLIFIER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_FABRICATOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.MATTER_REPLICATOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ENERGY_TRANSMITTER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.MICROWAVE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.MINER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.MINER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.MINER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.MIXER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.MIXER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.MIXER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.MIXER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.MIXER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.MIXER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.MIXER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_EV; +import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_HV; +import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_IV; +import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_LV; +import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_MV; +import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.MONSTER_REPELLATOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_EV; +import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_HV; +import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_IV; +import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_LV; +import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_MV; +import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_UV; +import static gregtech.api.enums.MetaTileEntityIDs.MUFFLER_HATCH_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.MULTIBLOCK_PUMP_INFINITE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.MULTIBLOCK_PUMP_MKI_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.MULTILOCK_PUMP_MKIII_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.MULTILOCK_PUMP_MKII_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.MULTILOCK_PUMP_MKIV_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.MULTI_CANNER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.MULTI_LATHE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.MULTI_SMELTER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.NANO_FORGE_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.NAQUADAH_REACTOR_EV; +import static gregtech.api.enums.MetaTileEntityIDs.NAQUADAH_REACTOR_IV; +import static gregtech.api.enums.MetaTileEntityIDs.NAQUADAH_REACTOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.NAQUADAH_REACTOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.NAQUADAH_REACTOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.NEUTRONIUM_COMPRESSOR_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.OIL_CRACKER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.ORE_DRILL_MKIII_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.ORE_DRILL_MKII_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.ORE_DRILL_MKIV_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.ORE_DRILL_MKI_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_UV; +import static gregtech.api.enums.MetaTileEntityIDs.ORE_WASHING_PLANT_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_EV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_HV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_IV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_LV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_ME; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_MV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_UV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_BUS_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_EV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_HV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_IV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_LV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_ME; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_MV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.OUTPUT_HATCH_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.PACKAGER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.PCB_FACTORY_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_ARC_FURNACE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_GENERATOR_EV; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_GENERATOR_IV; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_GENERATOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_GENERATOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.PLASMA_GENERATOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.POLARIZER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.PRECISION_LASER_ENGRAVER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.PROCESSING_ARRAY_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.PUMP_EV; +import static gregtech.api.enums.MetaTileEntityIDs.PUMP_HV; +import static gregtech.api.enums.MetaTileEntityIDs.PUMP_IV; +import static gregtech.api.enums.MetaTileEntityIDs.PUMP_LV; +import static gregtech.api.enums.MetaTileEntityIDs.PUMP_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.PUMP_MV; +import static gregtech.api.enums.MetaTileEntityIDs.PUMP_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_PLANT_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_CLARIFIER; +import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_DEGASIFIER; +import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_FLOCCULATOR; +import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_OZONATION; +import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_PARTICLE_EXTRACTOR; +import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_PH_ADJUSTMENT; +import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_PLASMA_HEATER; +import static gregtech.api.enums.MetaTileEntityIDs.PURIFICATION_UNIT_UV_TREATMENT; +import static gregtech.api.enums.MetaTileEntityIDs.PYROLYSE_OVEN_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_EV; +import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_IV; +import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UV; +import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.QUADRUPLE_INPUT_HATCHES_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_CHEST_EV; +import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_CHEST_HV; +import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_CHEST_IV; +import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_CHEST_LV; +import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_CHEST_MV; +import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_TANK_EV; +import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_TANK_HV; +import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_TANK_IV; +import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_TANK_LV; +import static gregtech.api.enums.MetaTileEntityIDs.QUANTUM_TANK_MV; +import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.RECIPE_FILTER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.RECYCLER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.REPLICATOR_EV; +import static gregtech.api.enums.MetaTileEntityIDs.REPLICATOR_HV; +import static gregtech.api.enums.MetaTileEntityIDs.REPLICATOR_IV; +import static gregtech.api.enums.MetaTileEntityIDs.REPLICATOR_LV; +import static gregtech.api.enums.MetaTileEntityIDs.REPLICATOR_MV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.ROCK_BREAKER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.SCANNER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.SIFTING_MACHINE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.SIMPLE_SOLAR_BOILER; +import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.SLICING_MACHINE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.SMALL_COAL_BOILER; +import static gregtech.api.enums.MetaTileEntityIDs.STEAM_ALLOY_SMELTER; +import static gregtech.api.enums.MetaTileEntityIDs.STEAM_COMPRESSOR; +import static gregtech.api.enums.MetaTileEntityIDs.STEAM_EXTRACTOR; +import static gregtech.api.enums.MetaTileEntityIDs.STEAM_FORGE_HAMMER; +import static gregtech.api.enums.MetaTileEntityIDs.STEAM_FURNACE; +import static gregtech.api.enums.MetaTileEntityIDs.STEAM_MACERATOR; +import static gregtech.api.enums.MetaTileEntityIDs.STEAM_TURBINE_HV; +import static gregtech.api.enums.MetaTileEntityIDs.STEAM_TURBINE_LV; +import static gregtech.api.enums.MetaTileEntityIDs.STEAM_TURBINE_MV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_BUFFER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_CHEST_EV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_CHEST_HV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_CHEST_IV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_CHEST_LV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_CHEST_MV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_TANK_EV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_TANK_HV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_TANK_IV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_TANK_LV; +import static gregtech.api.enums.MetaTileEntityIDs.SUPER_TANK_MV; +import static gregtech.api.enums.MetaTileEntityIDs.TELEPORTER; +import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_UV; +import static gregtech.api.enums.MetaTileEntityIDs.THERMAL_CENTRIFUGE_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.TRANSCENDENT_PLASMA_MIXER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.TRANSFORMER_MAX_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.TRANSFORMER_UEV_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.TRANSFORMER_UIV_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.TRANSFORMER_UMV_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.TRANSFORMER_UXV_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.TURBO_CHARGER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_EV; +import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_HV; +import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_IV; +import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_LV; +import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_MV; +import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_UV; +import static gregtech.api.enums.MetaTileEntityIDs.TYPE_FILTER_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.VACUUM_FREEZER_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_EV; +import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_HV; +import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_IV; +import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_LV; +import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_MV; +import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.VOLTAGE_REGULATOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_EV_HV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_HV_MV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_IV_EV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_LV_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_LuV_IV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_MAX_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_MV_LV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UEV_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UHV_UV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UIV_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UMV_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UV_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_UXV_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.WET_TRANSFORMER_ZPM_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_EV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_HV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_IV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_LV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_MV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_DYNAMO_ENERGY_HATCH_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_EV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_HV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_IV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_LV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_MAX; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_MV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_UXV; +import static gregtech.api.enums.MetaTileEntityIDs.WIRELESS_HATCH_ENERGY_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_UEV; +import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_UHV; +import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_UIV; +import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_UMV; +import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_UV; +import static gregtech.api.enums.MetaTileEntityIDs.WIREMILL_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_EV; +import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_HV; +import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_IV; +import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_LV; +import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_LuV; +import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_MV; +import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_UV; +import static gregtech.api.enums.MetaTileEntityIDs.WORLD_ACCELERATOR_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.WORMHOLE_GENERATOR_CONTROLLER; +import static gregtech.api.enums.MetaTileEntityIDs.transformer_EV_HV; +import static gregtech.api.enums.MetaTileEntityIDs.transformer_HV_MV; +import static gregtech.api.enums.MetaTileEntityIDs.transformer_IV_EV; +import static gregtech.api.enums.MetaTileEntityIDs.transformer_LV_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.transformer_LuV_IV; +import static gregtech.api.enums.MetaTileEntityIDs.transformer_MV_LV; +import static gregtech.api.enums.MetaTileEntityIDs.transformer_UHV_UV; +import static gregtech.api.enums.MetaTileEntityIDs.transformer_UV_ZPM; +import static gregtech.api.enums.MetaTileEntityIDs.transformer_ZPM_LuV; +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; +import static gregtech.api.recipe.RecipeMaps.amplifierRecipes; +import static gregtech.api.recipe.RecipeMaps.arcFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; +import static gregtech.api.recipe.RecipeMaps.benderRecipes; +import static gregtech.api.recipe.RecipeMaps.cannerRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalReactorRecipes; +import static gregtech.api.recipe.RecipeMaps.circuitAssemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.compressorRecipes; +import static gregtech.api.recipe.RecipeMaps.cutterRecipes; +import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; +import static gregtech.api.recipe.RecipeMaps.electroMagneticSeparatorRecipes; +import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; +import static gregtech.api.recipe.RecipeMaps.extractorRecipes; +import static gregtech.api.recipe.RecipeMaps.extruderRecipes; +import static gregtech.api.recipe.RecipeMaps.fermentingRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.recipe.RecipeMaps.formingPressRecipes; +import static gregtech.api.recipe.RecipeMaps.furnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; +import static gregtech.api.recipe.RecipeMaps.latheRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.microwaveRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.oreWasherRecipes; +import static gregtech.api.recipe.RecipeMaps.plasmaArcFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.polarizerRecipes; +import static gregtech.api.recipe.RecipeMaps.recyclerRecipes; +import static gregtech.api.recipe.RecipeMaps.sifterRecipes; +import static gregtech.api.recipe.RecipeMaps.slicerRecipes; +import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.wiremillRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTUtility.calculateRecipeEU; + +import net.minecraft.util.EnumChatFormatting; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.MachineType; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TierEU; +import gregtech.api.metatileentity.implementations.MTEBasicBatteryBuffer; +import gregtech.api.metatileentity.implementations.MTEBasicHull; +import gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe; +import gregtech.api.metatileentity.implementations.MTECable; +import gregtech.api.metatileentity.implementations.MTEFluid; +import gregtech.api.metatileentity.implementations.MTEFrame; +import gregtech.api.metatileentity.implementations.MTEHatchDataAccess; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEHatchMagnet; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.metatileentity.implementations.MTEHatchMultiInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.api.metatileentity.implementations.MTEHatchQuadrupleHumongous; +import gregtech.api.metatileentity.implementations.MTEItem; +import gregtech.api.metatileentity.implementations.MTETransformer; +import gregtech.api.metatileentity.implementations.MTEWetTransformer; +import gregtech.api.metatileentity.implementations.MTEWirelessDynamo; +import gregtech.api.metatileentity.implementations.MTEWirelessEnergy; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.BlockFrameBox; +import gregtech.common.tileentities.automation.MTEChestBuffer; +import gregtech.common.tileentities.automation.MTEFilter; +import gregtech.common.tileentities.automation.MTEItemDistributor; +import gregtech.common.tileentities.automation.MTERecipeFilter; +import gregtech.common.tileentities.automation.MTERegulator; +import gregtech.common.tileentities.automation.MTESuperBuffer; +import gregtech.common.tileentities.automation.MTETypeFilter; +import gregtech.common.tileentities.boilers.MTEBoilerBronze; +import gregtech.common.tileentities.boilers.MTEBoilerLava; +import gregtech.common.tileentities.boilers.MTEBoilerSolar; +import gregtech.common.tileentities.boilers.MTEBoilerSolarSteel; +import gregtech.common.tileentities.boilers.MTEBoilerSteel; +import gregtech.common.tileentities.debug.MTEAdvDebugStructureWriter; +import gregtech.common.tileentities.generators.MTEDieselGenerator; +import gregtech.common.tileentities.generators.MTEGasTurbine; +import gregtech.common.tileentities.generators.MTELightningRod; +import gregtech.common.tileentities.generators.MTEMagicEnergyConverter; +import gregtech.common.tileentities.generators.MTEMagicalEnergyAbsorber; +import gregtech.common.tileentities.generators.MTENaquadahReactor; +import gregtech.common.tileentities.generators.MTEPlasmaGenerator; +import gregtech.common.tileentities.generators.MTESteamTurbine; +import gregtech.common.tileentities.machines.MTEBasicHullBronze; +import gregtech.common.tileentities.machines.MTEBasicHullBronzeBricks; +import gregtech.common.tileentities.machines.MTEBasicHullSteel; +import gregtech.common.tileentities.machines.MTEBasicHullSteelBricks; +import gregtech.common.tileentities.machines.MTEHatchCraftingInputME; +import gregtech.common.tileentities.machines.MTEHatchCraftingInputSlave; +import gregtech.common.tileentities.machines.MTEHatchInputBusME; +import gregtech.common.tileentities.machines.MTEHatchInputME; +import gregtech.common.tileentities.machines.MTEHatchOutputBusME; +import gregtech.common.tileentities.machines.MTEHatchOutputME; +import gregtech.common.tileentities.machines.basic.MTEAdvSeismicProspector; +import gregtech.common.tileentities.machines.basic.MTEBetterJukebox; +import gregtech.common.tileentities.machines.basic.MTEBoxinator; +import gregtech.common.tileentities.machines.basic.MTECharger; +import gregtech.common.tileentities.machines.basic.MTEIndustrialApiary; +import gregtech.common.tileentities.machines.basic.MTEMassfabricator; +import gregtech.common.tileentities.machines.basic.MTEMicrowaveEnergyTransmitter; +import gregtech.common.tileentities.machines.basic.MTEMiner; +import gregtech.common.tileentities.machines.basic.MTEMonsterRepellent; +import gregtech.common.tileentities.machines.basic.MTEPotionBrewer; +import gregtech.common.tileentities.machines.basic.MTEPump; +import gregtech.common.tileentities.machines.basic.MTEReplicator; +import gregtech.common.tileentities.machines.basic.MTERockBreaker; +import gregtech.common.tileentities.machines.basic.MTEScanner; +import gregtech.common.tileentities.machines.basic.MTETeleporter; +import gregtech.common.tileentities.machines.basic.MTETurboCharger; +import gregtech.common.tileentities.machines.basic.MTEWorldAccelerator; +import gregtech.common.tileentities.machines.long_distance.MTELongDistancePipelineFluid; +import gregtech.common.tileentities.machines.long_distance.MTELongDistancePipelineItem; +import gregtech.common.tileentities.machines.multi.MTEAssemblyLine; +import gregtech.common.tileentities.machines.multi.MTEBrickedBlastFurnace; +import gregtech.common.tileentities.machines.multi.MTECharcoalPit; +import gregtech.common.tileentities.machines.multi.MTECleanroom; +import gregtech.common.tileentities.machines.multi.MTEConcreteBackfiller1; +import gregtech.common.tileentities.machines.multi.MTEConcreteBackfiller2; +import gregtech.common.tileentities.machines.multi.MTEDieselEngine; +import gregtech.common.tileentities.machines.multi.MTEDistillationTower; +import gregtech.common.tileentities.machines.multi.MTEElectricBlastFurnace; +import gregtech.common.tileentities.machines.multi.MTEExtremeDieselEngine; +import gregtech.common.tileentities.machines.multi.MTEFusionComputer1; +import gregtech.common.tileentities.machines.multi.MTEFusionComputer2; +import gregtech.common.tileentities.machines.multi.MTEFusionComputer3; +import gregtech.common.tileentities.machines.multi.MTEHeatExchanger; +import gregtech.common.tileentities.machines.multi.MTEImplosionCompressor; +import gregtech.common.tileentities.machines.multi.MTEIndustrialElectromagneticSeparator; +import gregtech.common.tileentities.machines.multi.MTEIndustrialExtractor; +import gregtech.common.tileentities.machines.multi.MTEIndustrialLaserEngraver; +import gregtech.common.tileentities.machines.multi.MTEIntegratedOreFactory; +import gregtech.common.tileentities.machines.multi.MTELargeBoilerBronze; +import gregtech.common.tileentities.machines.multi.MTELargeBoilerSteel; +import gregtech.common.tileentities.machines.multi.MTELargeBoilerTitanium; +import gregtech.common.tileentities.machines.multi.MTELargeBoilerTungstenSteel; +import gregtech.common.tileentities.machines.multi.MTELargeChemicalReactor; +import gregtech.common.tileentities.machines.multi.MTELargeFluidExtractor; +import gregtech.common.tileentities.machines.multi.MTELargeTurbineGas; +import gregtech.common.tileentities.machines.multi.MTELargeTurbineGasAdvanced; +import gregtech.common.tileentities.machines.multi.MTELargeTurbineHPSteam; +import gregtech.common.tileentities.machines.multi.MTELargeTurbinePlasma; +import gregtech.common.tileentities.machines.multi.MTELargeTurbineSteam; +import gregtech.common.tileentities.machines.multi.MTEMultiAutoclave; +import gregtech.common.tileentities.machines.multi.MTEMultiCanner; +import gregtech.common.tileentities.machines.multi.MTEMultiFurnace; +import gregtech.common.tileentities.machines.multi.MTEMultiLathe; +import gregtech.common.tileentities.machines.multi.MTENanoForge; +import gregtech.common.tileentities.machines.multi.MTEOilCracker; +import gregtech.common.tileentities.machines.multi.MTEOilDrill1; +import gregtech.common.tileentities.machines.multi.MTEOilDrill2; +import gregtech.common.tileentities.machines.multi.MTEOilDrill3; +import gregtech.common.tileentities.machines.multi.MTEOilDrill4; +import gregtech.common.tileentities.machines.multi.MTEOilDrillInfinite; +import gregtech.common.tileentities.machines.multi.MTEOreDrillingPlant1; +import gregtech.common.tileentities.machines.multi.MTEOreDrillingPlant2; +import gregtech.common.tileentities.machines.multi.MTEOreDrillingPlant3; +import gregtech.common.tileentities.machines.multi.MTEOreDrillingPlant4; +import gregtech.common.tileentities.machines.multi.MTEPCBFactory; +import gregtech.common.tileentities.machines.multi.MTEPlasmaForge; +import gregtech.common.tileentities.machines.multi.MTEProcessingArray; +import gregtech.common.tileentities.machines.multi.MTEPyrolyseOven; +import gregtech.common.tileentities.machines.multi.MTETranscendentPlasmaMixer; +import gregtech.common.tileentities.machines.multi.MTEVacuumFreezer; +import gregtech.common.tileentities.machines.multi.MTEWormholeGenerator; +import gregtech.common.tileentities.machines.multi.compressor.MTEBlackHoleCompressor; +import gregtech.common.tileentities.machines.multi.compressor.MTEHIPCompressor; +import gregtech.common.tileentities.machines.multi.compressor.MTEHeatSensor; +import gregtech.common.tileentities.machines.multi.compressor.MTEIndustrialCompressor; +import gregtech.common.tileentities.machines.multi.compressor.MTENeutroniumCompressor; +import gregtech.common.tileentities.machines.multi.drone.MTEDroneCentre; +import gregtech.common.tileentities.machines.multi.drone.MTEHatchDroneDownLink; +import gregtech.common.tileentities.machines.multi.purification.MTEHatchDegasifierControl; +import gregtech.common.tileentities.machines.multi.purification.MTEHatchLensHousing; +import gregtech.common.tileentities.machines.multi.purification.MTEHatchLensIndicator; +import gregtech.common.tileentities.machines.multi.purification.MTEHatchPHSensor; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationPlant; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitBaryonicPerfection; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitClarifier; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitDegasser; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitFlocculation; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitOzonation; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitPhAdjustment; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitPlasmaHeater; +import gregtech.common.tileentities.machines.multi.purification.MTEPurificationUnitUVTreatment; +import gregtech.common.tileentities.machines.steam.MTESteamAlloySmelterBronze; +import gregtech.common.tileentities.machines.steam.MTESteamAlloySmelterSteel; +import gregtech.common.tileentities.machines.steam.MTESteamCompressorBronze; +import gregtech.common.tileentities.machines.steam.MTESteamCompressorSteel; +import gregtech.common.tileentities.machines.steam.MTESteamExtractorBronze; +import gregtech.common.tileentities.machines.steam.MTESteamExtractorSteel; +import gregtech.common.tileentities.machines.steam.MTESteamForgeHammerBronze; +import gregtech.common.tileentities.machines.steam.MTESteamForgeHammerSteel; +import gregtech.common.tileentities.machines.steam.MTESteamFurnaceBronze; +import gregtech.common.tileentities.machines.steam.MTESteamFurnaceSteel; +import gregtech.common.tileentities.machines.steam.MTESteamMaceratorBronze; +import gregtech.common.tileentities.machines.steam.MTESteamMaceratorSteel; +import gregtech.common.tileentities.storage.MTELocker; +import gregtech.common.tileentities.storage.MTEQuantumChest; +import gregtech.common.tileentities.storage.MTEQuantumTank; +import gregtech.common.tileentities.storage.MTESuperChest; +import gregtech.common.tileentities.storage.MTESuperTank; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTETransformerHiAmp; + +// Free IDs left for machines in GT as of 29th of July 2022 - Colen. Please try use them up in order. +// 366 +// 367 +// 368 +// 369 +// 370 +// 376 +// 377 +// 378 +// 379 +// 386 +// 387 +// 388 +// 389 +// 390 +// 396 +// 397 +// 398 +// 399 +// 410 +// 419 +// 426 +// 427 +// 428 +// 429 +// 430 +// 436 +// 437 +// 438 +// 439 +// 446 +// 447 +// 448 +// 449 +// 450 +// 456 +// 457 +// 458 +// 459 +// 466 +// 467 +// 468 +// 469 +// 470 +// 476 +// 477 +// 478 +// 479 +// 486 +// 487 +// 488 +// 489 +// 496 +// 497 +// 498 +// 499 +// 506 +// 507 +// 508 +// 509 +// 518 +// 519 +// 526 +// 530 +// 537 +// 538 +// 539 +// 546 +// 547 +// 548 +// 549 +// 550 +// 556 +// 557 +// 558 +// 559 +// 566 +// 567 +// 576 +// 577 +// 578 +// 579 +// 586 +// 587 +// 588 +// 589 +// 590 +// 596 +// 597 +// 598 +// 599 +// 607 +// 608 +// 609 +// 610 +// 616 +// 617 +// 618 +// 619 +// 626 +// 627 +// 628 +// 629 +// 630 +// 636 +// 637 +// 639 +// 646 +// 647 +// 648 +// 649 +// 650 +// 656 +// 657 +// 658 +// 659 +// 666 +// 667 +// 668 +// 669 +// 670 +// 676 +// 677 +// 678 +// 682 +// 683 +// 684 +// 686 +// 687 +// 688 +// 689 +// 702 +// 703 +// 704 +// 705 +// 706 +// 707 +// 708 +// 709 +// 714 +// 715 +// 716 +// 717 +// 718 +// 719 +// 721 +// 722 +// 723 +// 724 +// 725 +// 726 +// 727 +// 728 +// 729 +// 730 +// 731 +// 732 +// 733 +// 734 +// 735 +// 736 +// 737 +// 738 +// 739 +// 741 +// 742 +// 743 +// 744 +// 745 +// 746 +// 747 +// 748 +// 749 + +// TODO Some GT MetaTileEntity registrations are done in load/GT_Loader_MetaTileEntities_Recipes.java due to joint +// registration+recipe methods, they should be split and brought here to register all in preload. + +public class LoaderMetaTileEntities implements Runnable { // TODO CHECK CIRCUIT RECIPES AND USAGES + + private static final String aTextWire1 = "wire."; + private static final String aTextCable1 = "cable."; + private static final String aTextWire2 = " Wire"; + private static final String aTextCable2 = " Cable"; + public static final String imagination = EnumChatFormatting.RESET + "You just need " + + EnumChatFormatting.DARK_PURPLE + + "I" + + EnumChatFormatting.LIGHT_PURPLE + + "m" + + EnumChatFormatting.DARK_RED + + "a" + + EnumChatFormatting.RED + + "g" + + EnumChatFormatting.YELLOW + + "i" + + EnumChatFormatting.GREEN + + "n" + + EnumChatFormatting.AQUA + + "a" + + EnumChatFormatting.DARK_AQUA + + "t" + + EnumChatFormatting.BLUE + + "i" + + EnumChatFormatting.DARK_BLUE + + "o" + + EnumChatFormatting.DARK_PURPLE + + "n" + + EnumChatFormatting.RESET + + " to use this."; + + private static void registerMultiblockControllers() { + ItemList.Machine_Bricked_BlastFurnace.set( + new MTEBrickedBlastFurnace( + BRICKED_BLAST_FURNACE_CONTROLLER.ID, + "multimachine.brickedblastfurnace", + "Bricked Blast Furnace").getStackForm(1L)); + + ItemList.Machine_Multi_BlastFurnace.set( + new MTEElectricBlastFurnace(EBF_CONTROLLER.ID, "multimachine.blastfurnace", "Electric Blast Furnace") + .getStackForm(1L)); + ItemList.Machine_Multi_ImplosionCompressor.set( + new MTEImplosionCompressor( + IMPLOSION_COMPRESSOR_CONTROLLER.ID, + "multimachine.implosioncompressor", + "Implosion Compressor").getStackForm(1L)); + ItemList.Machine_Multi_VacuumFreezer.set( + new MTEVacuumFreezer(VACUUM_FREEZER_CONTROLLER.ID, "multimachine.vacuumfreezer", "Vacuum Freezer") + .getStackForm(1L)); + ItemList.Machine_Multi_Furnace.set( + new MTEMultiFurnace(MULTI_SMELTER_CONTROLLER.ID, "multimachine.multifurnace", "Multi Smelter") + .getStackForm(1L)); + ItemList.Machine_Multi_PlasmaForge.set( + new MTEPlasmaForge( + DTPF_CONTROLLER.ID, + "multimachine.plasmaforge", + "Dimensionally Transcendent Plasma Forge").getStackForm(1L)); + ItemList.Machine_Multi_PurificationPlant.set( + new MTEPurificationPlant( + PURIFICATION_PLANT_CONTROLLER.ID, + "multimachine.purificationplant", + "Water Purification Plant").getStackForm(1L)); + ItemList.Machine_Multi_PurificationUnitClarifier.set( + new MTEPurificationUnitClarifier( + PURIFICATION_UNIT_CLARIFIER.ID, + "multimachine.purificationunitclarifier", + "Clarifier Purification Unit").getStackForm(1L)); + ItemList.Machine_Multi_PurificationUnitFlocculator.set( + new MTEPurificationUnitFlocculation( + PURIFICATION_UNIT_FLOCCULATOR.ID, + "multimachine.purificationunitflocculator", + "Flocculation Purification Unit").getStackForm(1L)); + ItemList.Machine_Multi_PurificationUnitPhAdjustment.set( + new MTEPurificationUnitPhAdjustment( + PURIFICATION_UNIT_PH_ADJUSTMENT.ID, + "multimachine.purificationunitphadjustment", + "pH Neutralization Purification Unit").getStackForm(1L)); + ItemList.Machine_Multi_PurificationUnitOzonation.set( + new MTEPurificationUnitOzonation( + PURIFICATION_UNIT_OZONATION.ID, + "multimachine.purificationunitozonation", + "Ozonation Purification Unit").getStackForm(1L)); + ItemList.Machine_Multi_PurificationUnitPlasmaHeater.set( + new MTEPurificationUnitPlasmaHeater( + PURIFICATION_UNIT_PLASMA_HEATER.ID, + "multimachine.purificationunitplasmaheater", + "Extreme Temperature Fluctuation Purification Unit").getStackForm(1L)); + ItemList.Machine_Multi_PurificationUnitUVTreatment.set( + new MTEPurificationUnitUVTreatment( + PURIFICATION_UNIT_UV_TREATMENT.ID, + "multimachine.purificationunituvtreatment", + "High Energy Laser Purification Unit").getStackForm(1L)); + ItemList.Machine_Multi_PurificationUnitDegasifier.set( + new MTEPurificationUnitDegasser( + PURIFICATION_UNIT_DEGASIFIER.ID, + "multimachine.purificationunitdegasifier", + "Residual Decontaminant Degasser Purification Unit").getStackForm(1L)); + ItemList.Machine_Multi_PurificationUnitParticleExtractor.set( + new MTEPurificationUnitBaryonicPerfection( + PURIFICATION_UNIT_PARTICLE_EXTRACTOR.ID, + "multimachine.purificationunitextractor", + "Absolute Baryonic Perfection Purification Unit").getStackForm(1L)); + ItemList.Hatch_DegasifierControl.set( + new MTEHatchDegasifierControl( + HATCH_DEGASIFIER_CONTROL.ID, + "hatch.degasifiercontrol", + "Degasser Control Hatch", + 8).getStackForm(1L)); + ItemList.Machine_Multi_LargeBoiler_Bronze.set( + new MTELargeBoilerBronze( + LARGE_BRONZE_BOILER_CONTROLLER.ID, + "multimachine.boiler.bronze", + "Large Bronze Boiler").getStackForm(1L)); + ItemList.Machine_Multi_LargeBoiler_Steel.set( + new MTELargeBoilerSteel(LARGE_STEEL_BOILER_CONTROLLER.ID, "multimachine.boiler.steel", "Large Steel Boiler") + .getStackForm(1L)); + ItemList.Machine_Multi_LargeBoiler_Titanium.set( + new MTELargeBoilerTitanium( + LARGE_TITANIUM_BOILER_CONTROLLER.ID, + "multimachine.boiler.titanium", + "Large Titanium Boiler").getStackForm(1L)); + ItemList.Machine_Multi_LargeBoiler_TungstenSteel.set( + new MTELargeBoilerTungstenSteel( + LARGE_TUNGSTENSTEEL_BOILER_CONTROLLER.ID, + "multimachine.boiler.tungstensteel", + "Large Tungstensteel Boiler").getStackForm(1L)); + ItemList.FusionComputer_LuV.set( + new MTEFusionComputer1(FUSION_CONTROLLER_MKI.ID, "fusioncomputer.tier.06", "Fusion Control Computer Mark I") + .getStackForm(1L)); + ItemList.FusionComputer_ZPMV.set( + new MTEFusionComputer2( + FUSION_CONTROLLER_MKII.ID, + "fusioncomputer.tier.07", + "Fusion Control Computer Mark II").getStackForm(1L)); + ItemList.FusionComputer_UV.set( + new MTEFusionComputer3( + FUSION_CONTROLLER_MKIII.ID, + "fusioncomputer.tier.08", + "Fusion Control Computer Mark III").getStackForm(1L)); + + ItemList.Processing_Array.set( + new MTEProcessingArray(PROCESSING_ARRAY_CONTROLLER.ID, "multimachine.processingarray", "Processing Array") + .getStackForm(1L)); + ItemList.Distillation_Tower.set( + new MTEDistillationTower( + DISTILLATION_TOWER_CONTROLLER.ID, + "multimachine.distillationtower", + "Distillation Tower").getStackForm(1L)); + ItemList.Ore_Processor.set( + new MTEIntegratedOreFactory( + INTEGRATED_ORE_FACTORY_CONTROLLER.ID, + "multimachine.oreprocessor", + "Integrated Ore Factory").getStackForm(1L)); + + ItemList.LargeSteamTurbine.set( + new MTELargeTurbineSteam( + LARGE_STEAM_TURBINE_CONTROLLER.ID, + "multimachine.largeturbine", + "Large Steam Turbine").getStackForm(1L)); + ItemList.LargeGasTurbine.set( + new MTELargeTurbineGas(LARGE_GAS_TURBINE_CONTROLLER.ID, "multimachine.largegasturbine", "Large Gas Turbine") + .getStackForm(1L)); + ItemList.LargeHPSteamTurbine.set( + new MTELargeTurbineHPSteam( + LARGE_HP_STEAM_TURBINE_CONTROLLER.ID, + "multimachine.largehpturbine", + "Large HP Steam Turbine").getStackForm(1L)); + ItemList.LargeAdvancedGasTurbine.set( + new MTELargeTurbineGasAdvanced( + LARGE_ADVANCED_GAS_TURBINE_CONTROLLER.ID, + "multimachine.largeadvancedgasturbine", + "Large Advanced Gas Turbine").getStackForm(1L)); + ItemList.Machine_Multi_TranscendentPlasmaMixer.set( + new MTETranscendentPlasmaMixer( + TRANSCENDENT_PLASMA_MIXER_CONTROLLER.ID, + "multimachine.transcendentplasmamixer", + "Transcendent Plasma Mixer").getStackForm(1)); + + ItemList.LargePlasmaTurbine.set( + new MTELargeTurbinePlasma( + LARGE_PLASMA_TURBINE_CONTROLLER.ID, + "multimachine.largeplasmaturbine", + "Large Plasma Generator").getStackForm(1L)); + ItemList.Machine_Multi_HeatExchanger.set( + new MTEHeatExchanger( + LARGE_HEAT_EXCHANGER_CONTROLLER.ID, + "multimachine.heatexchanger", + "Large Heat Exchanger").getStackForm(1L)); + ItemList.Charcoal_Pile.set( + new MTECharcoalPit( + CHARCOAL_PILE_IGNITER_CONTROLLER.ID, + "multimachine.charcoalpile", + "Charcoal Pile Igniter").getStackForm(1)); + + // Converter recipes in case you had old one lying around + ItemList.OilDrill1.set( + new MTEOilDrill1(MULTIBLOCK_PUMP_MKI_CONTROLLER.ID, "multimachine.oildrill1", "Oil/Gas/Fluid Drilling Rig") + .getStackForm(1)); + ItemList.OilDrill2.set( + new MTEOilDrill2( + MULTILOCK_PUMP_MKII_CONTROLLER.ID, + "multimachine.oildrill2", + "Oil/Gas/Fluid Drilling Rig II").getStackForm(1)); + ItemList.OilDrill3.set( + new MTEOilDrill3( + MULTILOCK_PUMP_MKIII_CONTROLLER.ID, + "multimachine.oildrill3", + "Oil/Gas/Fluid Drilling Rig III").getStackForm(1)); + ItemList.OilDrill4.set( + new MTEOilDrill4( + MULTILOCK_PUMP_MKIV_CONTROLLER.ID, + "multimachine.oildrill4", + "Oil/Gas/Fluid Drilling Rig IV").getStackForm(1)); + ItemList.OilDrillInfinite.set( + new MTEOilDrillInfinite( + MULTIBLOCK_PUMP_INFINITE_CONTROLLER.ID, + "multimachine.oildrillinfinite", + "Infinite Oil/Gas/Fluid Drilling Rig").getStackForm(1)); + + ItemList.ConcreteBackfiller1.set( + new MTEConcreteBackfiller1( + CONCRETE_BACKFILLER_I_CONTROLLER.ID, + "multimachine.concretebackfiller1", + "Concrete Backfiller").getStackForm(1)); + ItemList.ConcreteBackfiller2.set( + new MTEConcreteBackfiller2( + CONCRETE_BACKFILLER_II_CONTROLLER.ID, + "multimachine.concretebackfiller3", + "Advanced Concrete Backfiller").getStackForm(1)); + ItemList.OreDrill1.set( + new MTEOreDrillingPlant1(ORE_DRILL_MKI_CONTROLLER.ID, "multimachine.oredrill1", "Ore Drilling Plant") + .getStackForm(1)); + ItemList.OreDrill2.set( + new MTEOreDrillingPlant2(ORE_DRILL_MKII_CONTROLLER.ID, "multimachine.oredrill2", "Ore Drilling Plant II") + .getStackForm(1)); + ItemList.OreDrill3.set( + new MTEOreDrillingPlant3(ORE_DRILL_MKIII_CONTROLLER.ID, "multimachine.oredrill3", "Ore Drilling Plant III") + .getStackForm(1)); + ItemList.OreDrill4.set( + new MTEOreDrillingPlant4(ORE_DRILL_MKIV_CONTROLLER.ID, "multimachine.oredrill4", "Ore Drilling Plant IV") + .getStackForm(1)); + + ItemList.PyrolyseOven.set( + new MTEPyrolyseOven(PYROLYSE_OVEN_CONTROLLER.ID, "multimachine.pyro", "Pyrolyse Oven").getStackForm(1)); + ItemList.OilCracker.set( + new MTEOilCracker(OIL_CRACKER_CONTROLLER.ID, "multimachine.cracker", "Oil Cracking Unit").getStackForm(1)); + + ItemList.Machine_Multi_Assemblyline.set( + new MTEAssemblyLine(ASSEMBLING_LINE_CONTROLLER.ID, "multimachine.assemblyline", "Assembling Line") + .getStackForm(1L)); + ItemList.Machine_Multi_DieselEngine.set( + new MTEDieselEngine(COMBUSTION_ENGINE_CONTROLLER.ID, "multimachine.dieselengine", "Combustion Engine") + .getStackForm(1L)); + ItemList.Machine_Multi_ExtremeDieselEngine.set( + new MTEExtremeDieselEngine( + EXTREME_COMBUSTION_ENGINE_CONTROLLER.ID, + "multimachine.extremedieselengine", + "Extreme Combustion Engine").getStackForm(1L)); + ItemList.Machine_Multi_Cleanroom.set( + new MTECleanroom(CLEANROOM_CONTROLLER.ID, "multimachine.cleanroom", "Cleanroom Controller") + .getStackForm(1)); + + ItemList.Machine_Multi_LargeChemicalReactor.set( + new MTELargeChemicalReactor(LCR_CONTROLLER.ID, "multimachine.chemicalreactor", "Large Chemical Reactor") + .getStackForm(1)); + ItemList.PCBFactory.set( + new MTEPCBFactory(PCB_FACTORY_CONTROLLER.ID, "multimachine.pcbfactory", "PCB Factory").getStackForm(1)); + ItemList.NanoForge + .set(new MTENanoForge(NANO_FORGE_CONTROLLER.ID, "multimachine.nanoforge", "Nano Forge").getStackForm(1)); + ItemList.Machine_Multi_DroneCentre + .set(new MTEDroneCentre(Drone_Centre.ID, "multimachine_DroneCentre", "Drone Centre").getStackForm(1)); + + ItemList.Machine_Multi_IndustrialElectromagneticSeparator.set( + new MTEIndustrialElectromagneticSeparator( + INDUSTRIAL_ELECTROMAGNETIC_SEPARATOR_CONTROLLER.ID, + "multimachine.electromagneticseparator", + "Magnetic Flux Exhibitor").getStackForm(1)); + ItemList.Machine_Multi_Canner + .set(new MTEMultiCanner(MULTI_CANNER_CONTROLLER.ID, "multimachine.canner", "TurboCan Pro").getStackForm(1)); + + ItemList.WormholeGenerator.set( + new MTEWormholeGenerator( + WORMHOLE_GENERATOR_CONTROLLER.ID, + "multimachine.wormhole", + "Miniature Wormhole Generator").getStackForm(1)); + + ItemList.Machine_Multi_IndustrialLaserEngraver.set( + new MTEIndustrialLaserEngraver( + INDUSTRIAL_LASER_ENGRAVER_CONTROLLER.ID, + "multimachine.engraver", + "Hyper-Intensity Laser Engraver").getStackForm(1)); + + ItemList.Machine_Multi_IndustrialExtractor.set( + new MTEIndustrialExtractor( + INDUSTRIAL_EXTRACTOR_CONTROLLER.ID, + "multimachine.extractor", + "Dissection Apparatus").getStackForm(1)); + + ItemList.Machine_Multi_Lathe.set( + new MTEMultiLathe(MULTI_LATHE_CONTROLLER.ID, "multimachine.lathe", "Industrial Precision Lathe") + .getStackForm(1)); + + ItemList.Machine_Multi_IndustrialCompressor.set( + new MTEIndustrialCompressor( + INDUSTRIAL_COMPRESSOR_CONTROLLER.ID, + "multimachine.basiccompressor", + "Large Electric Compressor").getStackForm(1)); + ItemList.Machine_Multi_HIPCompressor.set( + new MTEHIPCompressor( + HIP_COMPRESSOR_CONTROLLER.ID, + "multimachine.hipcompressor", + "Hot Isostatic Pressurization Unit").getStackForm(1)); + ItemList.Machine_Multi_NeutroniumCompressor.set( + new MTENeutroniumCompressor( + NEUTRONIUM_COMPRESSOR_CONTROLLER.ID, + "multimachine.neutroniumcompressor", + "Neutronium Compressor").getStackForm(1)); + ItemList.Machine_Multi_BlackHoleCompressor.set( + new MTEBlackHoleCompressor( + BLACKHOLE_COMPRESSOR_CONTROLLER.ID, + "multimachine.blackholecompressor", + "Semi-Stable Black Hole Containment Field").getStackForm(1)); + + ItemList.Machine_Multi_Autoclave.set( + new MTEMultiAutoclave(MULTI_AUTOCLAVE_CONTROLLER.ID, "multimachine.autoclave", "Industrial Autoclave") + .getStackForm(1)); + + ItemList.LargeFluidExtractor.set( + new MTELargeFluidExtractor(LARGE_FLUID_EXTRACTOR.ID, "multimachine.fluidextractor", "Large Fluid Extractor") + .getStackForm(1)); + } + + private static void registerSteamMachines() { + ItemList.Machine_Bronze_Furnace.set( + new MTESteamFurnaceBronze(STEAM_FURNACE.ID, "bronzemachine.furnace", "Steam Furnace").getStackForm(1L)); + ItemList.Machine_Bronze_Macerator.set( + new MTESteamMaceratorBronze(STEAM_MACERATOR.ID, "bronzemachine.macerator", "Steam Macerator") + .getStackForm(1L)); + ItemList.Machine_Bronze_Extractor.set( + new MTESteamExtractorBronze(STEAM_EXTRACTOR.ID, "bronzemachine.extractor", "Steam Extractor") + .getStackForm(1L)); + ItemList.Machine_Bronze_Hammer.set( + new MTESteamForgeHammerBronze(STEAM_FORGE_HAMMER.ID, "bronzemachine.hammer", "Steam Forge Hammer") + .getStackForm(1L)); + ItemList.Machine_Bronze_Compressor.set( + new MTESteamCompressorBronze(STEAM_COMPRESSOR.ID, "bronzemachine.compressor", "Steam Compressor") + .getStackForm(1L)); + ItemList.Machine_Bronze_AlloySmelter.set( + new MTESteamAlloySmelterBronze(STEAM_ALLOY_SMELTER.ID, "bronzemachine.alloysmelter", "Steam Alloy Smelter") + .getStackForm(1L)); + + } + + private static void registerUnpackager() { + ItemList.Machine_LV_Unboxinator.set( + new MTEBasicMachineWithRecipe( + UNPACKAGER_LV.ID, + "basicmachine.unboxinator.tier.01", + "Basic Unpackager", + 1, + MachineType.UNPACKAGER.tooltipDescription(), + RecipeMaps.unpackagerRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "UNBOXINATOR", + null).getStackForm(1L)); + + ItemList.Machine_MV_Unboxinator.set( + new MTEBasicMachineWithRecipe( + UNPACKAGER_MV.ID, + "basicmachine.unboxinator.tier.02", + "Advanced Unpackager", + 2, + MachineType.UNPACKAGER.tooltipDescription(), + RecipeMaps.unpackagerRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "UNBOXINATOR", + null).getStackForm(1L)); + + ItemList.Machine_HV_Unboxinator.set( + new MTEBasicMachineWithRecipe( + UNPACKAGER_HV.ID, + "basicmachine.unboxinator.tier.03", + "Advanced Unpackager II", + 3, + MachineType.UNPACKAGER.tooltipDescription(), + RecipeMaps.unpackagerRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "UNBOXINATOR", + null).getStackForm(1L)); + + ItemList.Machine_EV_Unboxinator.set( + new MTEBasicMachineWithRecipe( + UNPACKAGER_EV.ID, + "basicmachine.unboxinator.tier.04", + "Advanced Unpackager III", + 4, + MachineType.UNPACKAGER.tooltipDescription(), + RecipeMaps.unpackagerRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "UNBOXINATOR", + null).getStackForm(1L)); + + ItemList.Machine_IV_Unboxinator.set( + new MTEBasicMachineWithRecipe( + UNPACKAGER_IV.ID, + "basicmachine.unboxinator.tier.05", + "Unboxinator", + 5, + MachineType.UNPACKAGER.tooltipDescription(), + RecipeMaps.unpackagerRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "UNBOXINATOR", + null).getStackForm(1L)); + + ItemList.Machine_LuV_Unboxinator.set( + new MTEBasicMachineWithRecipe( + UNPACKAGER_LuV.ID, + "basicmachine.unboxinator.tier.06", + "Unboxinator", + 6, + MachineType.UNPACKAGER.tooltipDescription(), + RecipeMaps.unpackagerRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "UNBOXINATOR", + null).getStackForm(1L)); + + ItemList.Machine_ZPM_Unboxinator.set( + new MTEBasicMachineWithRecipe( + UNPACKAGER_ZPM.ID, + "basicmachine.unboxinator.tier.07", + "Unboxinator", + 7, + MachineType.UNPACKAGER.tooltipDescription(), + RecipeMaps.unpackagerRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "UNBOXINATOR", + null).getStackForm(1L)); + + ItemList.Machine_UV_Unboxinator.set( + new MTEBasicMachineWithRecipe( + UNPACKAGER_UV.ID, + "basicmachine.unboxinator.tier.08", + "Unboxinator", + 8, + MachineType.UNPACKAGER.tooltipDescription(), + RecipeMaps.unpackagerRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "UNBOXINATOR", + null).getStackForm(1L)); + } + + private static void registerAssemblingMachine() { + + ItemList.Machine_LV_Assembler.set( + new MTEBasicMachineWithRecipe( + ASSEMBLER_LV.ID, + "basicmachine.assembler.tier.01", + "Basic Assembling Machine", + 1, + MachineType.ASSEMBLER.tooltipDescription(), + RecipeMaps.assemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Assembler.set( + new MTEBasicMachineWithRecipe( + ASSEMBLER_MV.ID, + "basicmachine.assembler.tier.02", + "Advanced Assembling Machine", + 2, + MachineType.ASSEMBLER.tooltipDescription(), + RecipeMaps.assemblerRecipes, + 9, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Assembler.set( + new MTEBasicMachineWithRecipe( + ASSEMBLER_HV.ID, + "basicmachine.assembler.tier.03", + "Advanced Assembling Machine II", + 3, + MachineType.ASSEMBLER.tooltipDescription(), + RecipeMaps.assemblerRecipes, + 9, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Assembler.set( + new MTEBasicMachineWithRecipe( + ASSEMBLER_EV.ID, + "basicmachine.assembler.tier.04", + "Advanced Assembling Machine III", + 4, + MachineType.ASSEMBLER.tooltipDescription(), + RecipeMaps.assemblerRecipes, + 9, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Assembler.set( + new MTEBasicMachineWithRecipe( + ASSEMBLER_IV.ID, + "basicmachine.assembler.tier.05", + "Advanced Assembling Machine IV", + 5, + MachineType.ASSEMBLER.tooltipDescription(), + RecipeMaps.assemblerRecipes, + 9, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + + ItemList.AssemblingMachineLuV.set( + new MTEBasicMachineWithRecipe( + ASSEMBLING_MACHINE_LuV.ID, + "basicmachine.assembler.tier.06", + "Elite Assembling Machine", + 6, + MachineType.ASSEMBLER.tooltipDescription(), + assemblerRecipes, + 9, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + + ItemList.AssemblingMachineZPM.set( + new MTEBasicMachineWithRecipe( + ASSEMBLING_MACHINE_ZPM.ID, + "basicmachine.assembler.tier.07", + "Elite Assembling Machine II", + 7, + MachineType.ASSEMBLER.tooltipDescription(), + assemblerRecipes, + 9, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + + ItemList.AssemblingMachineUV.set( + new MTEBasicMachineWithRecipe( + ASSEMBLING_MACHINE_UV.ID, + "basicmachine.assembler.tier.08", + "Ultimate Assembly Constructor", + 8, + MachineType.ASSEMBLER.tooltipDescription(), + assemblerRecipes, + 9, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + + ItemList.AssemblingMachineUHV.set( + new MTEBasicMachineWithRecipe( + ASSEMBLING_MACHINE_UHV.ID, + "basicmachine.assembler.tier.09", + "Epic Assembly Constructor", + 9, + MachineType.ASSEMBLER.tooltipDescription(), + assemblerRecipes, + 9, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + + ItemList.AssemblingMachineUEV.set( + new MTEBasicMachineWithRecipe( + ASSEMBLING_MACHINE_UEV.ID, + "basicmachine.assembler.tier.10", + "Epic Assembly Constructor II", + 10, + MachineType.ASSEMBLER.tooltipDescription(), + assemblerRecipes, + 9, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + + ItemList.AssemblingMachineUIV.set( + new MTEBasicMachineWithRecipe( + ASSEMBLING_MACHINE_UIV.ID, + "basicmachine.assembler.tier.11", + "Epic Assembly Constructor III", + 11, + MachineType.ASSEMBLER.tooltipDescription(), + assemblerRecipes, + 9, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + + ItemList.AssemblingMachineUMV.set( + new MTEBasicMachineWithRecipe( + ASSEMBLING_MACHINE_UMV.ID, + "basicmachine.assembler.tier.12", + "Epic Assembly Constructor IV", + 12, + MachineType.ASSEMBLER.tooltipDescription(), + assemblerRecipes, + 9, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ASSEMBLER", + null).getStackForm(1L)); + } + + private static void registerMatterAmplifier() { + ItemList.Machine_LV_Amplifab.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_LV.ID, + "basicmachine.amplifab.tier.01", + "Basic Amplifabricator", + 1, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + RecipeMaps.amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + + ItemList.Machine_MV_Amplifab.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_MV.ID, + "basicmachine.amplifab.tier.02", + "Advanced Amplifabricator", + 2, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + RecipeMaps.amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + + ItemList.Machine_HV_Amplifab.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_HV.ID, + "basicmachine.amplifab.tier.03", + "Advanced Amplifabricator II", + 3, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + RecipeMaps.amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + + ItemList.Machine_EV_Amplifab.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_EV.ID, + "basicmachine.amplifab.tier.04", + "Advanced Amplifabricator III", + 4, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + RecipeMaps.amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + + ItemList.Machine_IV_Amplifab.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_IV.ID, + "basicmachine.amplifab.tier.05", + "Advanced Amplifabricator IV", + 5, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + RecipeMaps.amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + + ItemList.AmplifabricatorLuV.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_LuV.ID, + "basicmachine.amplifab.tier.06", + "Elite Amplifabricator", + 6, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + + ItemList.AmplifabricatorZPM.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_ZPM.ID, + "basicmachine.amplifab.tier.07", + "Elite Amplifabricator II", + 7, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + + ItemList.AmplifabricatorUV.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_UV.ID, + "basicmachine.amplifab.tier.08", + "Ultimate Amplicreator", + 8, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + + ItemList.AmplifabricatorUHV.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_UHV.ID, + "basicmachine.amplifab.tier.09", + "Epic Amplicreator", + 9, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + + ItemList.AmplifabricatorUEV.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_UEV.ID, + "basicmachine.amplifab.tier.10", + "Epic Amplicreator II", + 10, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + + ItemList.AmplifabricatorUIV.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_UIV.ID, + "basicmachine.amplifab.tier.11", + "Epic Amplicreator III", + 11, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + + ItemList.AmplifabricatorUMV.set( + new MTEBasicMachineWithRecipe( + MATTER_AMPLIFIER_UMV.ID, + "basicmachine.amplifab.tier.12", + "Epic Amplicreator IV", + 12, + MachineType.MATTER_AMPLIFIER.tooltipDescription(), + amplifierRecipes, + 1, + 1, + 1000, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AMPLIFAB", + null).getStackForm(1L)); + } + + private static void registerAlloySmelter() { + ItemList.Machine_LV_AlloySmelter.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_LV.ID, + "basicmachine.alloysmelter.tier.01", + "Basic Alloy Smelter", + 1, + MachineType.ALLOY_SMELTER.tooltipDescription(), + RecipeMaps.alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + + ItemList.Machine_MV_AlloySmelter.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_MV.ID, + "basicmachine.alloysmelter.tier.02", + "Advanced Alloy Smelter", + 2, + MachineType.ALLOY_SMELTER.tooltipDescription(), + RecipeMaps.alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + + ItemList.Machine_HV_AlloySmelter.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_HV.ID, + "basicmachine.alloysmelter.tier.03", + "Advanced Alloy Smelter II", + 3, + MachineType.ALLOY_SMELTER.tooltipDescription(), + RecipeMaps.alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + + ItemList.Machine_EV_AlloySmelter.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_EV.ID, + "basicmachine.alloysmelter.tier.04", + "Advanced Alloy Smelter III", + 4, + MachineType.ALLOY_SMELTER.tooltipDescription(), + RecipeMaps.alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + + ItemList.Machine_IV_AlloySmelter.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_IV.ID, + "basicmachine.alloysmelter.tier.05", + "Advanced Alloy Smelter IV", + 5, + MachineType.ALLOY_SMELTER.tooltipDescription(), + RecipeMaps.alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + + ItemList.AlloySmelterLuV.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_LuV.ID, + "basicmachine.alloysmelter.tier.06", + "Elite Alloy Smelter", + 6, + MachineType.ALLOY_SMELTER.tooltipDescription(), + alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + + ItemList.AlloySmelterZPM.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_ZPM.ID, + "basicmachine.alloysmelter.tier.07", + "Elite Alloy Smelter II", + 7, + MachineType.ALLOY_SMELTER.tooltipDescription(), + alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + + ItemList.AlloySmelterUV.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_UV.ID, + "basicmachine.alloysmelter.tier.08", + "Ultimate Alloy Integrator", + 8, + MachineType.ALLOY_SMELTER.tooltipDescription(), + alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + + ItemList.AlloySmelterUHV.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_UHV.ID, + "basicmachine.alloysmelter.tier.09", + "Epic Alloy Integrator", + 9, + MachineType.ALLOY_SMELTER.tooltipDescription(), + alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + + ItemList.AlloySmelterUEV.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_UEV.ID, + "basicmachine.alloysmelter.tier.10", + "Epic Alloy Integrator II", + 10, + MachineType.ALLOY_SMELTER.tooltipDescription(), + alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + + ItemList.AlloySmelterUIV.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_UIV.ID, + "basicmachine.alloysmelter.tier.11", + "Epic Alloy Integrator III", + 11, + MachineType.ALLOY_SMELTER.tooltipDescription(), + alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + + ItemList.AlloySmelterUMV.set( + new MTEBasicMachineWithRecipe( + ALLOY_SMELTER_UMV.ID, + "basicmachine.alloysmelter.tier.12", + "Epic Alloy Integrator IV", + 12, + MachineType.ALLOY_SMELTER.tooltipDescription(), + alloySmelterRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ALLOY_SMELTER", + null).getStackForm(1L)); + } + + private static void registerHPSteamMachines() { + ItemList.Machine_HP_Extractor.set( + new MTESteamExtractorSteel(HP_STEAM_EXTRACTOR.ID, "hpmachine.extractor", "High Pressure Extractor") + .getStackForm(1L)); + ItemList.Machine_HP_Furnace.set( + new MTESteamFurnaceSteel(HP_STEAM_FURNACE.ID, "hpmachine.furnace", "High Pressure Furnace") + .getStackForm(1L)); + ItemList.Machine_HP_Macerator.set( + new MTESteamMaceratorSteel(HP_STEAM_MACERATOR.ID, "hpmachine.macerator", "High Pressure Macerator") + .getStackForm(1L)); + ItemList.Machine_HP_Hammer.set( + new MTESteamForgeHammerSteel(HP_STEAM_FORGE_HAMMER.ID, "hpmachine.hammer", "High Pressure Forge Hammer") + .getStackForm(1L)); + ItemList.Machine_HP_Compressor.set( + new MTESteamCompressorSteel(HP_STEAM_COMPRESSOR.ID, "hpmachine.compressor", "High Pressure Compressor") + .getStackForm(1L)); + ItemList.Machine_HP_AlloySmelter.set( + new MTESteamAlloySmelterSteel( + HP_STEAM_ALLOY_SMELTER.ID, + "hpmachine.alloysmelter", + "High Pressure Alloy Smelter").getStackForm(1L)); + } + + private static void registerLocker() { + ItemList.Locker_ULV + .set(new MTELocker(LOCKER_ULV.ID, "locker.tier.00", "Ultra Low Voltage Locker", 0).getStackForm(1L)); + ItemList.Locker_LV.set(new MTELocker(LOCKER_LV.ID, "locker.tier.01", "Low Voltage Locker", 1).getStackForm(1L)); + ItemList.Locker_MV + .set(new MTELocker(LOCKER_MV.ID, "locker.tier.02", "Medium Voltage Locker", 2).getStackForm(1L)); + ItemList.Locker_HV + .set(new MTELocker(LOCKER_HV.ID, "locker.tier.03", "High Voltage Locker", 3).getStackForm(1L)); + ItemList.Locker_EV + .set(new MTELocker(LOCKER_EV.ID, "locker.tier.04", "Extreme Voltage Locker", 4).getStackForm(1L)); + ItemList.Locker_IV + .set(new MTELocker(LOCKER_IV.ID, "locker.tier.05", "Insane Voltage Locker", 5).getStackForm(1L)); + ItemList.Locker_LuV + .set(new MTELocker(LOCKER_LuV.ID, "locker.tier.06", "Ludicrous Voltage Locker", 6).getStackForm(1L)); + ItemList.Locker_ZPM + .set(new MTELocker(LOCKER_ZPM.ID, "locker.tier.07", "ZPM Voltage Locker", 7).getStackForm(1L)); + ItemList.Locker_UV + .set(new MTELocker(LOCKER_UV.ID, "locker.tier.08", "Ultimate Voltage Locker", 8).getStackForm(1L)); + ItemList.Locker_MAX + .set(new MTELocker(LOCKER_UHV.ID, "locker.tier.09", "Highly Ultimate Voltage Locker", 9).getStackForm(1L)); + } + + private static void registerScanner() { + ItemList.Machine_LV_Scanner + .set(new MTEScanner(SCANNER_LV.ID, "basicmachine.scanner.tier.01", "Basic Scanner", 1).getStackForm(1L)); + ItemList.Machine_MV_Scanner + .set(new MTEScanner(SCANNER_MV.ID, "basicmachine.scanner.tier.02", "Advanced Scanner", 2).getStackForm(1L)); + ItemList.Machine_HV_Scanner.set( + new MTEScanner(SCANNER_HV.ID, "basicmachine.scanner.tier.03", "Advanced Scanner II", 3).getStackForm(1L)); + ItemList.Machine_EV_Scanner.set( + new MTEScanner(SCANNER_EV.ID, "basicmachine.scanner.tier.04", "Advanced Scanner III", 4).getStackForm(1L)); + ItemList.Machine_IV_Scanner.set( + new MTEScanner(SCANNER_IV.ID, "basicmachine.scanner.tier.05", "Advanced Scanner IV", 5).getStackForm(1L)); + ItemList.ScannerLuV + .set(new MTEScanner(SCANNER_LuV.ID, "basicmachine.scanner.tier.06", "Elite Scanner", 6).getStackForm(1L)); + ItemList.ScannerZPM.set( + new MTEScanner(SCANNER_ZPM.ID, "basicmachine.scanner.tier.07", "Elite Scanner II", 7).getStackForm(1L)); + ItemList.ScannerUV.set( + new MTEScanner(SCANNER_UV.ID, "basicmachine.scanner.tier.08", "Ultimate Electron Microscope", 8) + .getStackForm(1L)); + ItemList.ScannerUHV.set( + new MTEScanner(SCANNER_UHV.ID, "basicmachine.scanner.tier.09", "Epic Electron Microscope", 9) + .getStackForm(1L)); + ItemList.ScannerUEV.set( + new MTEScanner(SCANNER_UEV.ID, "basicmachine.scanner.tier.10", "Epic Electron Microscope II", 10) + .getStackForm(1L)); + ItemList.ScannerUIV.set( + new MTEScanner(SCANNER_UIV.ID, "basicmachine.scanner.tier.11", "Epic Electron Microscope III", 11) + .getStackForm(1L)); + ItemList.ScannerUMV.set( + new MTEScanner(SCANNER_UMV.ID, "basicmachine.scanner.tier.12", "Epic Electron Microscope IV", 12) + .getStackForm(1L)); + } + + private static void registerPackager() { + ItemList.Machine_LV_Boxinator.set( + new MTEBoxinator(PACKAGER_LV.ID, "basicmachine.boxinator.tier.01", "Basic Packager", 1).getStackForm(1L)); + ItemList.Machine_MV_Boxinator.set( + new MTEBoxinator(PACKAGER_MV.ID, "basicmachine.boxinator.tier.02", "Advanced Packager", 2) + .getStackForm(1L)); + ItemList.Machine_HV_Boxinator.set( + new MTEBoxinator(PACKAGER_HV.ID, "basicmachine.boxinator.tier.03", "Advanced Packager II", 3) + .getStackForm(1L)); + ItemList.Machine_EV_Boxinator.set( + new MTEBoxinator(PACKAGER_EV.ID, "basicmachine.boxinator.tier.04", "Advanced Packager III", 4) + .getStackForm(1L)); + ItemList.Machine_IV_Boxinator + .set(new MTEBoxinator(PACKAGER_IV.ID, "basicmachine.boxinator.tier.05", "Boxinator", 5).getStackForm(1L)); + ItemList.Machine_LuV_Boxinator + .set(new MTEBoxinator(PACKAGER_LuV.ID, "basicmachine.boxinator.tier.06", "Boxinator", 6).getStackForm(1L)); + ItemList.Machine_ZPM_Boxinator + .set(new MTEBoxinator(PACKAGER_ZPM.ID, "basicmachine.boxinator.tier.07", "Boxinator", 7).getStackForm(1L)); + ItemList.Machine_UV_Boxinator + .set(new MTEBoxinator(PACKAGER_UV.ID, "basicmachine.boxinator.tier.08", "Boxinator", 8).getStackForm(1L)); + } + + private static void registerRockBreaker() { + ItemList.Machine_LV_RockBreaker.set( + new MTERockBreaker(ROCK_BREAKER_LV.ID, "basicmachine.rockbreaker.tier.01", "Basic Rock Breaker", 1) + .getStackForm(1L)); + ItemList.Machine_MV_RockBreaker.set( + new MTERockBreaker(ROCK_BREAKER_MV.ID, "basicmachine.rockbreaker.tier.02", "Advanced Rock Breaker", 2) + .getStackForm(1L)); + ItemList.Machine_HV_RockBreaker.set( + new MTERockBreaker(ROCK_BREAKER_HV.ID, "basicmachine.rockbreaker.tier.03", "Advanced Rock Breaker II", 3) + .getStackForm(1L)); + ItemList.Machine_EV_RockBreaker.set( + new MTERockBreaker(ROCK_BREAKER_EV.ID, "basicmachine.rockbreaker.tier.04", "Advanced Rock Breaker III", 4) + .getStackForm(1L)); + ItemList.Machine_IV_RockBreaker.set( + new MTERockBreaker( + ROCK_BREAKER_IV.ID, + "basicmachine.rockbreaker.tier.05", + "Cryogenic Magma Solidifier R-8200", + 5).getStackForm(1L)); + ItemList.RockBreakerLuV.set( + new MTERockBreaker(ROCK_BREAKER_LuV.ID, "rockbreaker.tier.06", "Cryogenic Magma Solidifier R-9200", 6) + .getStackForm(1L)); + + ItemList.RockBreakerZPM.set( + new MTERockBreaker(ROCK_BREAKER_ZPM.ID, "rockbreaker.tier.07", "Cryogenic Magma Solidifier R-10200", 7) + .getStackForm(1L)); + + ItemList.RockBreakerUV.set( + new MTERockBreaker(ROCK_BREAKER_UV.ID, "rockbreaker.tier.08", "Cryogenic Magma Solidifier R-11200", 8) + .getStackForm(1L)); + + ItemList.RockBreakerUHV.set( + new MTERockBreaker(ROCK_BREAKER_UHV.ID, "rockbreaker.tier.09", "Cryogenic Magma Solidifier R-12200", 9) + .getStackForm(1L)); + + ItemList.RockBreakerUEV.set( + new MTERockBreaker(ROCK_BREAKER_UEV.ID, "rockbreaker.tier.10", "Cryogenic Magma Solidifier R-13200", 10) + .getStackForm(1L)); + + ItemList.RockBreakerUIV.set( + new MTERockBreaker(ROCK_BREAKER_UIV.ID, "rockbreaker.tier.11", "Cryogenic Magma Solidifier R-14200", 11) + .getStackForm(1L)); + + ItemList.RockBreakerUMV.set( + new MTERockBreaker(ROCK_BREAKER_UMV.ID, "rockbreaker.tier.12", "Cryogenic Magma Solidifier R-15200", 12) + .getStackForm(1L)); + } + + private static void registerIndustrialApiary() { + if (Forestry.isModLoaded()) { + ItemList.Machine_IndustrialApiary.set( + new MTEIndustrialApiary(INDUSTRIAL_APIARY.ID, "basicmachine.industrialapiary", "Industrial Apiary", 8) + .getStackForm(1L)); + } + } + + private static void registerMassFab() { + ItemList.Machine_LV_Massfab.set( + new MTEMassfabricator(MASS_FABRICATOR_LV.ID, "basicmachine.massfab.tier.01", "Basic Mass Fabricator", 1) + .getStackForm(1L)); + ItemList.Machine_MV_Massfab.set( + new MTEMassfabricator(MASS_FABRICATOR_MV.ID, "basicmachine.massfab.tier.02", "Advanced Mass Fabricator", 2) + .getStackForm(1L)); + ItemList.Machine_HV_Massfab.set( + new MTEMassfabricator( + MASS_FABRICATOR_HV.ID, + "basicmachine.massfab.tier.03", + "Advanced Mass Fabricator II", + 3).getStackForm(1L)); + ItemList.Machine_EV_Massfab.set( + new MTEMassfabricator( + MASS_FABRICATOR_EV.ID, + "basicmachine.massfab.tier.04", + "Advanced Mass Fabricator III", + 4).getStackForm(1L)); + ItemList.Machine_IV_Massfab.set( + new MTEMassfabricator( + MASS_FABRICATOR_IV.ID, + "basicmachine.massfab.tier.05", + "Advanced Mass Fabricator IV", + 5).getStackForm(1L)); + } + + private static void registerReplicator() { + ItemList.Machine_LV_Replicator.set( + new MTEReplicator(REPLICATOR_LV.ID, "basicmachine.replicator.tier.01", "Basic Replicator", 1) + .getStackForm(1L)); + ItemList.Machine_MV_Replicator.set( + new MTEReplicator(REPLICATOR_MV.ID, "basicmachine.replicator.tier.02", "Advanced Replicator", 2) + .getStackForm(1L)); + ItemList.Machine_HV_Replicator.set( + new MTEReplicator(REPLICATOR_HV.ID, "basicmachine.replicator.tier.03", "Advanced Replicator II", 3) + .getStackForm(1L)); + ItemList.Machine_EV_Replicator.set( + new MTEReplicator(REPLICATOR_EV.ID, "basicmachine.replicator.tier.04", "Advanced Replicator III", 4) + .getStackForm(1L)); + ItemList.Machine_IV_Replicator.set( + new MTEReplicator(REPLICATOR_IV.ID, "basicmachine.replicator.tier.05", "Advanced Replicator IV", 5) + .getStackForm(1L)); + + ItemList.ReplicatorLuV.set( + new MTEReplicator(MATTER_REPLICATOR_LuV.ID, "basicmachine.replicator.tier.06", "Elite Replicator", 6) + .getStackForm(1L)); + ItemList.ReplicatorZPM.set( + new MTEReplicator(MATTER_REPLICATOR_ZPM.ID, "basicmachine.replicator.tier.07", "Elite Replicator II", 7) + .getStackForm(1L)); + ItemList.ReplicatorUV.set( + new MTEReplicator( + MATTER_REPLICATOR_UV.ID, + "basicmachine.replicator.tier.08", + "Ultimate Elemental Composer", + 8).getStackForm(1L)); + ItemList.ReplicatorUHV.set( + new MTEReplicator(MATTER_REPLICATOR_UHV.ID, "basicmachine.replicator.tier.09", "Epic Elemental Composer", 9) + .getStackForm(1L)); + ItemList.ReplicatorUEV.set( + new MTEReplicator( + MATTER_REPLICATOR_UEV.ID, + "basicmachine.replicator.tier.10", + "Epic Elemental Composer II", + 10).getStackForm(1L)); + ItemList.ReplicatorUIV.set( + new MTEReplicator( + MATTER_REPLICATOR_UIV.ID, + "basicmachine.replicator.tier.11", + "Epic Elemental Composer III", + 11).getStackForm(1L)); + ItemList.ReplicatorUMV.set( + new MTEReplicator( + MATTER_REPLICATOR_UMV.ID, + "basicmachine.replicator.tier.12", + "Epic Elemental Composer IV", + 12).getStackForm(1L)); + } + + private static void registerBrewery() { + ItemList.Machine_LV_Brewery.set( + new MTEPotionBrewer(BREWERY_LV.ID, "basicmachine.brewery.tier.01", "Basic Brewery", 1).getStackForm(1L)); + ItemList.Machine_MV_Brewery.set( + new MTEPotionBrewer(BREWERY_MV.ID, "basicmachine.brewery.tier.02", "Advanced Brewery", 2).getStackForm(1L)); + ItemList.Machine_HV_Brewery.set( + new MTEPotionBrewer(BREWERY_HV.ID, "basicmachine.brewery.tier.03", "Advanced Brewery II", 3) + .getStackForm(1L)); + ItemList.Machine_EV_Brewery.set( + new MTEPotionBrewer(BREWERY_EV.ID, "basicmachine.brewery.tier.04", "Advanced Brewery III", 4) + .getStackForm(1L)); + ItemList.Machine_IV_Brewery.set( + new MTEPotionBrewer(BREWERY_IV.ID, "basicmachine.brewery.tier.05", "Advanced Brewery IV", 5) + .getStackForm(1L)); + + ItemList.BreweryLuV.set( + new MTEPotionBrewer(BREWERY_LuV.ID, "basicmachine.brewery.tier.06", "Elite Brewery", 6).getStackForm(1L)); + ItemList.BreweryZPM.set( + new MTEPotionBrewer(BREWERY_ZPM.ID, "basicmachine.brewery.tier.07", "Elite Brewery II", 7) + .getStackForm(1L)); + ItemList.BreweryUV.set( + new MTEPotionBrewer(BREWERY_UV.ID, "basicmachine.brewery.tier.08", "Ultimate Brew Rusher", 8) + .getStackForm(1L)); + ItemList.BreweryUHV.set( + new MTEPotionBrewer(BREWERY_UHV.ID, "basicmachine.brewery.tier.09", "Epic Brew Rusher", 9) + .getStackForm(1L)); + ItemList.BreweryUEV.set( + new MTEPotionBrewer(BREWERY_UEV.ID, "basicmachine.brewery.tier.10", "Epic Brew Rusher II", 10) + .getStackForm(1L)); + ItemList.BreweryUIV.set( + new MTEPotionBrewer(BREWERY_UIV.ID, "basicmachine.brewery.tier.11", "Epic Brew Rusher III", 11) + .getStackForm(1L)); + ItemList.BreweryUMV.set( + new MTEPotionBrewer(BREWERY_UMV.ID, "basicmachine.brewery.tier.12", "Epic Brew Rusher IV", 12) + .getStackForm(1L)); + } + + private static void registerMiner() { + ItemList.Machine_LV_Miner + .set(new MTEMiner(MINER_LV.ID, "basicmachine.miner.tier.01", "Basic Miner", 1).getStackForm(1L)); + ItemList.Machine_MV_Miner + .set(new MTEMiner(MINER_MV.ID, "basicmachine.miner.tier.02", "Good Miner", 2).getStackForm(1L)); + ItemList.Machine_HV_Miner + .set(new MTEMiner(MINER_HV.ID, "basicmachine.miner.tier.03", "Advanced Miner", 3).getStackForm(1L)); + } + + private static void registerPump() { + ItemList.Pump_LV.set(new MTEPump(PUMP_LV.ID, "basicmachine.pump.tier.01", "Basic Pump", 1).getStackForm(1L)); + ItemList.Pump_MV.set(new MTEPump(PUMP_MV.ID, "basicmachine.pump.tier.02", "Advanced Pump", 2).getStackForm(1L)); + ItemList.Pump_HV + .set(new MTEPump(PUMP_HV.ID, "basicmachine.pump.tier.03", "Advanced Pump II", 3).getStackForm(1L)); + ItemList.Pump_EV + .set(new MTEPump(PUMP_EV.ID, "basicmachine.pump.tier.04", "Advanced Pump III", 4).getStackForm(1L)); + ItemList.Pump_IV + .set(new MTEPump(PUMP_IV.ID, "basicmachine.pump.tier.05", "Advanced Pump IV", 5).getStackForm(1L)); + ItemList.PumpLuV + .set(new MTEPump(PUMP_LuV.ID, "basicmachine.pump.tier.06", "Lake Dislocator", 6).getStackForm(1L)); + ItemList.PumpZPM + .set(new MTEPump(PUMP_ZPM.ID, "basicmachine.pump.tier.07", "Ocean Transposer", 7).getStackForm(1L)); + } + + private static void registerTeleporter() { + ItemList.Teleporter + .set(new MTETeleporter(TELEPORTER.ID, "basicmachine.teleporter", "Teleporter", 9).getStackForm(1L)); + } + + private static void registerMonsterRepellator() { + ItemList.MobRep_LV.set( + new MTEMonsterRepellent( + MONSTER_REPELLATOR_LV.ID, + "basicmachine.mobrep.tier.01", + "Basic Monster Repellator", + 1).getStackForm(1L)); + ItemList.MobRep_MV.set( + new MTEMonsterRepellent( + MONSTER_REPELLATOR_MV.ID, + "basicmachine.mobrep.tier.02", + "Advanced Monster Repellator", + 2).getStackForm(1L)); + ItemList.MobRep_HV.set( + new MTEMonsterRepellent( + MONSTER_REPELLATOR_HV.ID, + "basicmachine.mobrep.tier.03", + "Advanced Monster Repellator II", + 3).getStackForm(1L)); + ItemList.MobRep_EV.set( + new MTEMonsterRepellent( + MONSTER_REPELLATOR_EV.ID, + "basicmachine.mobrep.tier.04", + "Advanced Monster Repellator III", + 4).getStackForm(1L)); + ItemList.MobRep_IV.set( + new MTEMonsterRepellent( + MONSTER_REPELLATOR_IV.ID, + "basicmachine.mobrep.tier.05", + "Advanced Monster Repellator IV", + 5).getStackForm(1L)); + ItemList.MobRep_LuV.set( + new MTEMonsterRepellent( + MONSTER_REPELLATOR_LuV.ID, + "basicmachine.mobrep.tier.06", + "Advanced Monster Repellator V", + 6).getStackForm(1L)); + ItemList.MobRep_ZPM.set( + new MTEMonsterRepellent( + MONSTER_REPELLATOR_ZPM.ID, + "basicmachine.mobrep.tier.07", + "Advanced Monster Repellator VI", + 7).getStackForm(1L)); + ItemList.MobRep_UV.set( + new MTEMonsterRepellent( + MONSTER_REPELLATOR_UV.ID, + "basicmachine.mobrep.tier.08", + "Advanced Monster Repellator VII", + 8).getStackForm(1L)); + } + + private void registerWorldAccelerator() { + ItemList.AcceleratorLV.set( + new MTEWorldAccelerator( + WORLD_ACCELERATOR_LV.ID, + "basicmachine.accelerator.tier.01", + "Basic World Accelerator", + 1).getStackForm(1L)); + ItemList.AcceleratorMV.set( + new MTEWorldAccelerator( + WORLD_ACCELERATOR_MV.ID, + "basicmachine.accelerator.tier.02", + "Advanced World Accelerator", + 2).getStackForm(1L)); + ItemList.AcceleratorHV.set( + new MTEWorldAccelerator( + WORLD_ACCELERATOR_HV.ID, + "basicmachine.accelerator.tier.03", + "Advanced World Accelerator II", + 3).getStackForm(1L)); + ItemList.AcceleratorEV.set( + new MTEWorldAccelerator( + WORLD_ACCELERATOR_EV.ID, + "basicmachine.accelerator.tier.04", + "Advanced World Accelerator III", + 4).getStackForm(1L)); + ItemList.AcceleratorIV.set( + new MTEWorldAccelerator( + WORLD_ACCELERATOR_IV.ID, + "basicmachine.accelerator.tier.05", + "Advanced World Accelerator IV", + 5).getStackForm(1L)); + ItemList.AcceleratorLuV.set( + new MTEWorldAccelerator( + WORLD_ACCELERATOR_LuV.ID, + "basicmachine.accelerator.tier.06", + "Elite World Accelerator", + 6).getStackForm(1L)); + ItemList.AcceleratorZPM.set( + new MTEWorldAccelerator( + WORLD_ACCELERATOR_ZPM.ID, + "basicmachine.accelerator.tier.07", + "Elite World Accelerator II", + 7).getStackForm(1L)); + ItemList.AcceleratorUV.set( + new MTEWorldAccelerator( + WORLD_ACCELERATOR_UV.ID, + "basicmachine.accelerator.tier.08", + "Ultimate Time Anomaly", + 8).getStackForm(1L)); + + } + + private static void registerAdvancedSeismicProspector() { + ItemList.Seismic_Prospector_Adv_LV.set( + new MTEAdvSeismicProspector( + ADVANCED_SEISMIC_PROSPECTOR_LV.ID, + "basicmachine.seismicprospector.07", + "Advanced Seismic Prospector LV", + 1, + 5 * 16 / 2, + 2).getStackForm(1)); + ItemList.Seismic_Prospector_Adv_MV.set( + new MTEAdvSeismicProspector( + ADVANCED_SEISMIC_PROSPECTOR_MV.ID, + "basicmachine.seismicprospector.06", + "Advanced Seismic Prospector MV", + 2, + 7 * 16 / 2, + 2).getStackForm(1)); + ItemList.Seismic_Prospector_Adv_HV.set( + new MTEAdvSeismicProspector( + ADVANCED_SEISMIC_PROSPECTOR_HV.ID, + "basicmachine.seismicprospector.05", + "Advanced Seismic Prospector HV", + 3, + 9 * 16 / 2, + 2).getStackForm(1)); + ItemList.Seismic_Prospector_Adv_EV.set( + new MTEAdvSeismicProspector( + ADVANCED_SEISMIC_PROSPECTOR_EV.ID, + "basicmachine.seismicprospector.04", + "Advanced Seismic Prospector EV", + 4, + 11 * 16 / 2, + 2).getStackForm(1)); + } + + private static void registerMicrowaveEnergyTransmitter() { + ItemList.MicroTransmitter_HV.set( + new MTEMicrowaveEnergyTransmitter( + MICROWAVE_ENERGY_TRANSMITTER_HV.ID, + "basicmachine.microtransmitter.03", + "HV Microwave Energy Transmitter", + 3).getStackForm(1L)); + ItemList.MicroTransmitter_EV.set( + new MTEMicrowaveEnergyTransmitter( + MICROWAVE_ENERGY_TRANSMITTER_EV.ID, + "basicmachine.microtransmitter.04", + "EV Microwave Energy Transmitter", + 4).getStackForm(1L)); + ItemList.MicroTransmitter_IV.set( + new MTEMicrowaveEnergyTransmitter( + MICROWAVE_ENERGY_TRANSMITTER_IV.ID, + "basicmachine.microtransmitter.05", + "IV Microwave Energy Transmitter", + 5).getStackForm(1L)); + ItemList.MicroTransmitter_LUV.set( + new MTEMicrowaveEnergyTransmitter( + MICROWAVE_ENERGY_TRANSMITTER_LuV.ID, + "basicmachine.microtransmitter.06", + "LuV Microwave Energy Transmitter", + 6).getStackForm(1L)); + ItemList.MicroTransmitter_ZPM.set( + new MTEMicrowaveEnergyTransmitter( + MICROWAVE_ENERGY_TRANSMITTER_ZPM.ID, + "basicmachine.microtransmitter.07", + "ZPM Microwave Energy Transmitter", + 7).getStackForm(1L)); + ItemList.MicroTransmitter_UV.set( + new MTEMicrowaveEnergyTransmitter( + MICROWAVE_ENERGY_TRANSMITTER_UV.ID, + "basicmachine.microtransmitter.08", + "UV Microwave Energy Transmitter", + 8).getStackForm(1L)); + } + + private static void registerBetterJukebox() { + ItemList.BetterJukebox_LV.set( + new MTEBetterJukebox( + BETTER_JUKEBOX_LV.ID, + "basicmachine.betterjukebox.tier.01", + "Basic Electric Jukebox", + 1).getStackForm(1L)); + ItemList.BetterJukebox_MV.set( + new MTEBetterJukebox( + BETTER_JUKEBOX_MV.ID, + "basicmachine.betterjukebox.tier.02", + "Advanced Electric Jukebox", + 2).getStackForm(1L)); + ItemList.BetterJukebox_HV.set( + new MTEBetterJukebox( + BETTER_JUKEBOX_HV.ID, + "basicmachine.betterjukebox.tier.03", + "Advanced Electric Jukebox II", + 3).getStackForm(1L)); + ItemList.BetterJukebox_EV.set( + new MTEBetterJukebox(BETTER_JUKEBOX_EV.ID, "basicmachine.betterjukebox.tier.04", "Extreme Music Mixer", 4) + .getStackForm(1L)); + ItemList.BetterJukebox_IV.set( + new MTEBetterJukebox(BETTER_JUKEBOX_IV.ID, "basicmachine.betterjukebox.tier.05", "Duke Mix'em 3D", 5) + .getStackForm(1L)); + } + + private static void registerChestBuffer() { + ItemList.Automation_ChestBuffer_ULV.set( + new MTEChestBuffer( + CHEST_BUFFER_ULV.ID, + "automation.chestbuffer.tier.00", + "Ultra Low Voltage Chest Buffer", + 0).getStackForm(1L)); + ItemList.Automation_ChestBuffer_LV.set( + new MTEChestBuffer(CHEST_BUFFER_LV.ID, "automation.chestbuffer.tier.01", "Low Voltage Chest Buffer", 1) + .getStackForm(1L)); + ItemList.Automation_ChestBuffer_MV.set( + new MTEChestBuffer(CHEST_BUFFER_MV.ID, "automation.chestbuffer.tier.02", "Medium Voltage Chest Buffer", 2) + .getStackForm(1L)); + ItemList.Automation_ChestBuffer_HV.set( + new MTEChestBuffer(CHEST_BUFFER_HV.ID, "automation.chestbuffer.tier.03", "High Voltage Chest Buffer", 3) + .getStackForm(1L)); + ItemList.Automation_ChestBuffer_EV.set( + new MTEChestBuffer(CHEST_BUFFER_EV.ID, "automation.chestbuffer.tier.04", "Extreme Voltage Chest Buffer", 4) + .getStackForm(1L)); + ItemList.Automation_ChestBuffer_IV.set( + new MTEChestBuffer(CHEST_BUFFER_IV.ID, "automation.chestbuffer.tier.05", "Insane Voltage Chest Buffer", 5) + .getStackForm(1L)); + ItemList.Automation_ChestBuffer_LuV.set( + new MTEChestBuffer( + CHEST_BUFFER_LuV.ID, + "automation.chestbuffer.tier.06", + "Ludicrous Voltage Chest Buffer", + 6).getStackForm(1L)); + ItemList.Automation_ChestBuffer_ZPM.set( + new MTEChestBuffer(CHEST_BUFFER_ZPM.ID, "automation.chestbuffer.tier.07", "ZPM Voltage Chest Buffer", 7) + .getStackForm(1L)); + ItemList.Automation_ChestBuffer_UV.set( + new MTEChestBuffer(CHEST_BUFFER_UV.ID, "automation.chestbuffer.tier.08", "Ultimate Voltage Chest Buffer", 8) + .getStackForm(1L)); + ItemList.Automation_ChestBuffer_UHV.set( + new MTEChestBuffer( + CHEST_BUFFER_UHV.ID, + "automation.chestbuffer.tier.09", + "Highly Ultimate Voltage Chest Buffer", + 9).getStackForm(1L)); + + ItemList.Automation_ChestBuffer_UEV.set( + new MTEChestBuffer( + CHEST_BUFFER_UEV.ID, + "automation.chestbuffer.tier.10", + "Ultra High Voltage Chest Buffer", + 10).getStackForm(1L)); + + ItemList.Automation_ChestBuffer_UIV.set( + new MTEChestBuffer(CHEST_BUFFER_UIV.ID, "automation.chestbuffer.tier.11", "UIV Voltage Chest Buffer", 11) + .getStackForm(1L)); + + ItemList.Automation_ChestBuffer_UMV.set( + new MTEChestBuffer(CHEST_BUFFER_UMV.ID, "automation.chestbuffer.tier.12", "UMV Voltage Chest Buffer", 12) + .getStackForm(1L)); + } + + private static void registerItemFilter() { + ItemList.Automation_Filter_ULV.set( + new MTEFilter(ITEM_FILTER_ULV.ID, "automation.filter.tier.00", "Ultra Low Voltage Item Filter", 0) + .getStackForm(1L)); + ItemList.Automation_Filter_LV.set( + new MTEFilter(ITEM_FILTER_LV.ID, "automation.filter.tier.01", "Low Voltage Item Filter", 1) + .getStackForm(1L)); + ItemList.Automation_Filter_MV.set( + new MTEFilter(ITEM_FILTER_MV.ID, "automation.filter.tier.02", "Medium Voltage Item Filter", 2) + .getStackForm(1L)); + ItemList.Automation_Filter_HV.set( + new MTEFilter(ITEM_FILTER_HV.ID, "automation.filter.tier.03", "High Voltage Item Filter", 3) + .getStackForm(1L)); + ItemList.Automation_Filter_EV.set( + new MTEFilter(ITEM_FILTER_EV.ID, "automation.filter.tier.04", "Extreme Voltage Item Filter", 4) + .getStackForm(1L)); + ItemList.Automation_Filter_IV.set( + new MTEFilter(ITEM_FILTER_IV.ID, "automation.filter.tier.05", "Insane Voltage Item Filter", 5) + .getStackForm(1L)); + ItemList.Automation_Filter_LuV.set( + new MTEFilter(ITEM_FILTER_LuV.ID, "automation.filter.tier.06", "Ludicrous Voltage Item Filter", 6) + .getStackForm(1L)); + ItemList.Automation_Filter_ZPM.set( + new MTEFilter(ITEM_FILTER_ZPM.ID, "automation.filter.tier.07", "ZPM Voltage Item Filter", 7) + .getStackForm(1L)); + ItemList.Automation_Filter_UV.set( + new MTEFilter(ITEM_FILTER_UV.ID, "automation.filter.tier.08", "Ultimate Voltage Item Filter", 8) + .getStackForm(1L)); + ItemList.Automation_Filter_MAX.set( + new MTEFilter(ITEM_FILTER_UHV.ID, "automation.filter.tier.09", "Highly Ultimate Voltage Item Filter", 9) + .getStackForm(1L)); + } + + private static void registerTypeFilter() { + ItemList.Automation_TypeFilter_ULV.set( + new MTETypeFilter(TYPE_FILTER_ULV.ID, "automation.typefilter.tier.00", "Ultra Low Voltage Type Filter", 0) + .getStackForm(1L)); + ItemList.Automation_TypeFilter_LV.set( + new MTETypeFilter(TYPE_FILTER_LV.ID, "automation.typefilter.tier.01", "Low Voltage Type Filter", 1) + .getStackForm(1L)); + ItemList.Automation_TypeFilter_MV.set( + new MTETypeFilter(TYPE_FILTER_MV.ID, "automation.typefilter.tier.02", "Medium Voltage Type Filter", 2) + .getStackForm(1L)); + ItemList.Automation_TypeFilter_HV.set( + new MTETypeFilter(TYPE_FILTER_HV.ID, "automation.typefilter.tier.03", "High Voltage Type Filter", 3) + .getStackForm(1L)); + ItemList.Automation_TypeFilter_EV.set( + new MTETypeFilter(TYPE_FILTER_EV.ID, "automation.typefilter.tier.04", "Extreme Voltage Type Filter", 4) + .getStackForm(1L)); + ItemList.Automation_TypeFilter_IV.set( + new MTETypeFilter(TYPE_FILTER_IV.ID, "automation.typefilter.tier.05", "Insane Voltage Type Filter", 5) + .getStackForm(1L)); + ItemList.Automation_TypeFilter_LuV.set( + new MTETypeFilter(TYPE_FILTER_LuV.ID, "automation.typefilter.tier.06", "Ludicrous Voltage Type Filter", 6) + .getStackForm(1L)); + ItemList.Automation_TypeFilter_ZPM.set( + new MTETypeFilter(TYPE_FILTER_ZPM.ID, "automation.typefilter.tier.07", "ZPM Voltage Type Filter", 7) + .getStackForm(1L)); + ItemList.Automation_TypeFilter_UV.set( + new MTETypeFilter(TYPE_FILTER_UV.ID, "automation.typefilter.tier.08", "Ultimate Voltage Type Filter", 8) + .getStackForm(1L)); + ItemList.Automation_TypeFilter_MAX.set( + new MTETypeFilter( + TYPE_FILTER_UHV.ID, + "automation.typefilter.tier.09", + "Highly Ultimate Voltage Type Filter", + 9).getStackForm(1L)); + } + + private static void registerRegulator() { + ItemList.Automation_Regulator_ULV.set( + new MTERegulator(VOLTAGE_REGULATOR_ULV.ID, "automation.regulator.tier.00", "Ultra Low Voltage Regulator", 0) + .getStackForm(1L)); + ItemList.Automation_Regulator_LV.set( + new MTERegulator(VOLTAGE_REGULATOR_LV.ID, "automation.regulator.tier.01", "Low Voltage Regulator", 1) + .getStackForm(1L)); + ItemList.Automation_Regulator_MV.set( + new MTERegulator(VOLTAGE_REGULATOR_MV.ID, "automation.regulator.tier.02", "Medium Voltage Regulator", 2) + .getStackForm(1L)); + ItemList.Automation_Regulator_HV.set( + new MTERegulator(VOLTAGE_REGULATOR_HV.ID, "automation.regulator.tier.03", "High Voltage Regulator", 3) + .getStackForm(1L)); + ItemList.Automation_Regulator_EV.set( + new MTERegulator(VOLTAGE_REGULATOR_EV.ID, "automation.regulator.tier.04", "Extreme Voltage Regulator", 4) + .getStackForm(1L)); + ItemList.Automation_Regulator_IV.set( + new MTERegulator(VOLTAGE_REGULATOR_IV.ID, "automation.regulator.tier.05", "Insane Voltage Regulator", 5) + .getStackForm(1L)); + ItemList.Automation_Regulator_LuV.set( + new MTERegulator(VOLTAGE_REGULATOR_LuV.ID, "automation.regulator.tier.06", "Ludicrous Voltage Regulator", 6) + .getStackForm(1L)); + ItemList.Automation_Regulator_ZPM.set( + new MTERegulator(VOLTAGE_REGULATOR_ZPM.ID, "automation.regulator.tier.07", "ZPM Voltage Regulator", 7) + .getStackForm(1L)); + ItemList.Automation_Regulator_UV.set( + new MTERegulator(VOLTAGE_REGULATOR_UV.ID, "automation.regulator.tier.08", "Ultimate Voltage Regulator", 8) + .getStackForm(1L)); + ItemList.Automation_Regulator_MAX.set( + new MTERegulator( + VOLTAGE_REGULATOR_UHV.ID, + "automation.regulator.tier.09", + "Highly Ultimate Voltage Regulator", + 9).getStackForm(1L)); + } + + private static void registerSuperBuffer() { + ItemList.Automation_SuperBuffer_ULV.set( + new MTESuperBuffer( + SUPER_BUFFER_ULV.ID, + "automation.superbuffer.tier.00", + "Ultra Low Voltage Super Buffer", + 0).getStackForm(1L)); + ItemList.Automation_SuperBuffer_LV.set( + new MTESuperBuffer(SUPER_BUFFER_LV.ID, "automation.superbuffer.tier.01", "Low Voltage Super Buffer", 1) + .getStackForm(1L)); + ItemList.Automation_SuperBuffer_MV.set( + new MTESuperBuffer(SUPER_BUFFER_MV.ID, "automation.superbuffer.tier.02", "Medium Voltage Super Buffer", 2) + .getStackForm(1L)); + ItemList.Automation_SuperBuffer_HV.set( + new MTESuperBuffer(SUPER_BUFFER_HV.ID, "automation.superbuffer.tier.03", "High Voltage Super Buffer", 3) + .getStackForm(1L)); + ItemList.Automation_SuperBuffer_EV.set( + new MTESuperBuffer(SUPER_BUFFER_EV.ID, "automation.superbuffer.tier.04", "Extreme Voltage Super Buffer", 4) + .getStackForm(1L)); + ItemList.Automation_SuperBuffer_IV.set( + new MTESuperBuffer(SUPER_BUFFER_IV.ID, "automation.superbuffer.tier.05", "Insane Voltage Super Buffer", 5) + .getStackForm(1L)); + ItemList.Automation_SuperBuffer_LuV.set( + new MTESuperBuffer( + SUPER_BUFFER_LuV.ID, + "automation.superbuffer.tier.06", + "Ludicrous Voltage Super Buffer", + 6).getStackForm(1L)); + ItemList.Automation_SuperBuffer_ZPM.set( + new MTESuperBuffer(SUPER_BUFFER_ZPM.ID, "automation.superbuffer.tier.07", "ZPM Voltage Super Buffer", 7) + .getStackForm(1L)); + ItemList.Automation_SuperBuffer_UV.set( + new MTESuperBuffer(SUPER_BUFFER_UV.ID, "automation.superbuffer.tier.08", "Ultimate Voltage Super Buffer", 8) + .getStackForm(1L)); + ItemList.Automation_SuperBuffer_MAX.set( + new MTESuperBuffer( + SUPER_BUFFER_UHV.ID, + "automation.superbuffer.tier.09", + "Highly Ultimate Voltage Super Buffer", + 9).getStackForm(1L)); + } + + private static void registerItemDistributor() { + ItemList.Automation_ItemDistributor_ULV.set( + new MTEItemDistributor( + ITEM_DISTRIBUTOR_ULV.ID, + "automation.itemdistributor.tier.00", + "Ultra Low Voltage Item Distributor", + 0).getStackForm(1L)); + ItemList.Automation_ItemDistributor_LV.set( + new MTEItemDistributor( + ITEM_DISTRIBUTOR_LV.ID, + "automation.itemdistributor.tier.01", + "Low Voltage Item Distributor", + 1).getStackForm(1L)); + ItemList.Automation_ItemDistributor_MV.set( + new MTEItemDistributor( + ITEM_DISTRIBUTOR_MV.ID, + "automation.itemdistributor.tier.02", + "Medium Voltage Item Distributor", + 2).getStackForm(1L)); + ItemList.Automation_ItemDistributor_HV.set( + new MTEItemDistributor( + ITEM_DISTRIBUTOR_HV.ID, + "automation.itemdistributor.tier.03", + "High Voltage Item Distributor", + 3).getStackForm(1L)); + ItemList.Automation_ItemDistributor_EV.set( + new MTEItemDistributor( + ITEM_DISTRIBUTOR_EV.ID, + "automation.itemdistributor.tier.04", + "Extreme Voltage Item Distributor", + 4).getStackForm(1L)); + ItemList.Automation_ItemDistributor_IV.set( + new MTEItemDistributor( + ITEM_DISTRIBUTOR_IV.ID, + "automation.itemdistributor.tier.05", + "Insane Voltage Item Distributor", + 5).getStackForm(1L)); + ItemList.Automation_ItemDistributor_LuV.set( + new MTEItemDistributor( + ITEM_DISTRIBUTOR_LuV.ID, + "automation.itemdistributor.tier.06", + "Ludicrous Voltage Item Distributor", + 6).getStackForm(1L)); + ItemList.Automation_ItemDistributor_ZPM.set( + new MTEItemDistributor( + ITEM_DISTRIBUTOR_ZPM.ID, + "automation.itemdistributor.tier.07", + "ZPM Voltage Item Distributor", + 7).getStackForm(1L)); + ItemList.Automation_ItemDistributor_UV.set( + new MTEItemDistributor( + ITEM_DISTRIBUTOR_UV.ID, + "automation.itemdistributor.tier.08", + "Ultimate Voltage Item Distributor", + 8).getStackForm(1L)); + ItemList.Automation_ItemDistributor_MAX.set( + new MTEItemDistributor( + ITEM_DISTRIBUTOR_UHV.ID, + "automation.itemdistributor.tier.09", + "MAX Voltage Item Distributor", + 9).getStackForm(1L)); + } + + private static void registerRecipeFilter() { + ItemList.Automation_RecipeFilter_ULV.set( + new MTERecipeFilter( + RECIPE_FILTER_ULV.ID, + "automation.recipefilter.tier.00", + "Ultra Low Voltage Recipe Filter", + 0).getStackForm(1L)); + ItemList.Automation_RecipeFilter_LV.set( + new MTERecipeFilter(RECIPE_FILTER_LV.ID, "automation.recipefilter.tier.01", "Low Voltage Recipe Filter", 1) + .getStackForm(1L)); + ItemList.Automation_RecipeFilter_MV.set( + new MTERecipeFilter( + RECIPE_FILTER_MV.ID, + "automation.recipefilter.tier.02", + "Medium Voltage Recipe Filter", + 2).getStackForm(1L)); + ItemList.Automation_RecipeFilter_HV.set( + new MTERecipeFilter(RECIPE_FILTER_HV.ID, "automation.recipefilter.tier.03", "High Voltage Recipe Filter", 3) + .getStackForm(1L)); + ItemList.Automation_RecipeFilter_EV.set( + new MTERecipeFilter( + RECIPE_FILTER_EV.ID, + "automation.recipefilter.tier.04", + "Extreme Voltage Recipe Filter", + 4).getStackForm(1L)); + ItemList.Automation_RecipeFilter_IV.set( + new MTERecipeFilter( + RECIPE_FILTER_IV.ID, + "automation.recipefilter.tier.05", + "Insane Voltage Recipe Filter", + 5).getStackForm(1L)); + ItemList.Automation_RecipeFilter_LuV.set( + new MTERecipeFilter( + RECIPE_FILTER_LuV.ID, + "automation.recipefilter.tier.06", + "Ludicrous Voltage Recipe Filter", + 6).getStackForm(1L)); + ItemList.Automation_RecipeFilter_ZPM.set( + new MTERecipeFilter(RECIPE_FILTER_ZPM.ID, "automation.recipefilter.tier.07", "ZPM Voltage Recipe Filter", 7) + .getStackForm(1L)); + ItemList.Automation_RecipeFilter_UV.set( + new MTERecipeFilter( + RECIPE_FILTER_UV.ID, + "automation.recipefilter.tier.08", + "Ultimate Voltage Recipe Filter", + 8).getStackForm(1L)); + ItemList.Automation_RecipeFilter_MAX.set( + new MTERecipeFilter( + RECIPE_FILTER_UHV.ID, + "automation.recipefilter.tier.09", + "Highly Ultimate Voltage Recipe Filter", + 9).getStackForm(1L)); + } + + private static void registerMachineHull() { + ItemList.Hull_Bronze.set( + new MTEBasicHullBronze(HULL_BRONZE.ID, "hull.bronze", "Bronze Hull", 0, "For your first Steam Machines") + .getStackForm(1L)); + ItemList.Hull_Bronze_Bricks.set( + new MTEBasicHullBronzeBricks( + HULL_BRICKED_BRONZE.ID, + "hull.bronze_bricked", + "Bricked Bronze Hull", + 0, + "For your first Steam Machines").getStackForm(1L)); + ItemList.Hull_HP.set( + new MTEBasicHullSteel(HULL_STEEL.ID, "hull.steel", "Steel Hull", 0, "For improved Steam Machines") + .getStackForm(1L)); + ItemList.Hull_HP_Bricks.set( + new MTEBasicHullSteelBricks( + HULL_WROUGHT_IRON.ID, + "hull.steel_bricked", + "Bricked Wrought Iron Hull", + 0, + "For improved Steam Machines").getStackForm(1L)); + + ItemList.Hull_ULV + .set(new MTEBasicHull(HULL_ULV.ID, "hull.tier.00", "ULV Machine Hull", 0, imagination).getStackForm(1L)); + ItemList.Hull_LV + .set(new MTEBasicHull(HULL_LV.ID, "hull.tier.01", "LV Machine Hull", 1, imagination).getStackForm(1L)); + ItemList.Hull_MV + .set(new MTEBasicHull(HULL_MV.ID, "hull.tier.02", "MV Machine Hull", 2, imagination).getStackForm(1L)); + ItemList.Hull_HV + .set(new MTEBasicHull(HULL_HV.ID, "hull.tier.03", "HV Machine Hull", 3, imagination).getStackForm(1L)); + ItemList.Hull_EV + .set(new MTEBasicHull(HULL_EV.ID, "hull.tier.04", "EV Machine Hull", 4, imagination).getStackForm(1L)); + ItemList.Hull_IV + .set(new MTEBasicHull(HULL_IV.ID, "hull.tier.05", "IV Machine Hull", 5, imagination).getStackForm(1L)); + ItemList.Hull_LuV + .set(new MTEBasicHull(HULL_LuV.ID, "hull.tier.06", "LuV Machine Hull", 6, imagination).getStackForm(1L)); + ItemList.Hull_ZPM + .set(new MTEBasicHull(HULL_ZPM.ID, "hull.tier.07", "ZPM Machine Hull", 7, imagination).getStackForm(1L)); + ItemList.Hull_UV + .set(new MTEBasicHull(HULL_UV.ID, "hull.tier.08", "UV Machine Hull", 8, imagination).getStackForm(1L)); + ItemList.Hull_MAX + .set(new MTEBasicHull(HULL_UHV.ID, "hull.tier.09", "UHV Machine Hull", 9, imagination).getStackForm(1L)); + + ItemList.Hull_UEV.set( + new MTEBasicHull(HULL_UEV.ID, "hull.tier.10", "UEV Machine Hull", 10, LoaderMetaTileEntities.imagination) + .getStackForm(1L)); + + ItemList.Hull_UIV.set( + new MTEBasicHull(HULL_UIV.ID, "hull.tier.11", "UIV Machine Hull", 11, LoaderMetaTileEntities.imagination) + .getStackForm(1L)); + + ItemList.Hull_UMV.set( + new MTEBasicHull(HULL_UMV.ID, "hull.tier.12", "UMV Machine Hull", 12, LoaderMetaTileEntities.imagination) + .getStackForm(1L)); + + ItemList.Hull_UXV.set( + new MTEBasicHull(HULL_UXV.ID, "hull.tier.13", "UXV Machine Hull", 13, LoaderMetaTileEntities.imagination) + .getStackForm(1L)); + + ItemList.Hull_MAXV.set( + new MTEBasicHull(HULL_MAX.ID, "hull.tier.14", "MAX Machine Hull", 14, LoaderMetaTileEntities.imagination) + .getStackForm(1L)); + } + + private static void registerTransformer() { + ItemList.Transformer_LV_ULV.set( + new MTETransformer( + transformer_LV_ULV.ID, + "transformer.tier.00", + "Ultra Low Voltage Transformer", + 0, + "LV -> ULV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_MV_LV.set( + new MTETransformer( + transformer_MV_LV.ID, + "transformer.tier.01", + "Low Voltage Transformer", + 1, + "MV -> LV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_HV_MV.set( + new MTETransformer( + transformer_HV_MV.ID, + "transformer.tier.02", + "Medium Voltage Transformer", + 2, + "HV -> MV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_EV_HV.set( + new MTETransformer( + transformer_EV_HV.ID, + "transformer.tier.03", + "High Voltage Transformer", + 3, + "EV -> HV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_IV_EV.set( + new MTETransformer( + transformer_IV_EV.ID, + "transformer.tier.04", + "Extreme Transformer", + 4, + "IV -> EV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_LuV_IV.set( + new MTETransformer( + transformer_LuV_IV.ID, + "transformer.tier.05", + "Insane Transformer", + 5, + "LuV -> IV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_ZPM_LuV.set( + new MTETransformer( + transformer_ZPM_LuV.ID, + "transformer.tier.06", + "Ludicrous Transformer", + 6, + "ZPM -> LuV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_UV_ZPM.set( + new MTETransformer( + transformer_UV_ZPM.ID, + "transformer.tier.07", + "ZPM Voltage Transformer", + 7, + "UV -> ZPM (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_MAX_UV.set( + new MTETransformer( + transformer_UHV_UV.ID, + "transformer.tier.08", + "Ultimate Transformer", + 8, + "UHV -> UV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_UEV_UHV.set( + new MTETransformer( + TRANSFORMER_UEV_UHV.ID, + "transformer.tier.09", + "Highly Ultimate Transformer", + 9, + "UEV -> UHV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.Transformer_UIV_UEV.set( + new MTETransformer( + TRANSFORMER_UIV_UEV.ID, + "transformer.tier.10", + "Extremely Ultimate Transformer", + 10, + "UIV -> UEV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.Transformer_UMV_UIV.set( + new MTETransformer( + TRANSFORMER_UMV_UIV.ID, + "transformer.tier.11", + "Insanely Ultimate Transformer", + 11, + "UMV -> UIV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.Transformer_UXV_UMV.set( + new MTETransformer( + TRANSFORMER_UXV_UMV.ID, + "transformer.tier.12", + "Mega Ultimate Transformer", + 12, + "UXV -> UMV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.Transformer_MAX_UXV.set( + new MTETransformer( + TRANSFORMER_MAX_UXV.ID, + "transformer.tier.13", + "Extended Mega Ultimate Transformer", + 13, + "MAX -> UXV (Use Soft Mallet to invert)").getStackForm(1L)); + } + + private void registerChemicalBath() { + ItemList.Machine_LV_ChemicalBath.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_LV.ID, + "basicmachine.chemicalbath.tier.01", + "Basic Chemical Bath", + 1, + MachineType.CHEMICAL_BATH.tooltipDescription(), + RecipeMaps.chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + + ItemList.Machine_MV_ChemicalBath.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_MV.ID, + "basicmachine.chemicalbath.tier.02", + "Advanced Chemical Bath", + 2, + MachineType.CHEMICAL_BATH.tooltipDescription(), + RecipeMaps.chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + + ItemList.Machine_HV_ChemicalBath.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_HV.ID, + "basicmachine.chemicalbath.tier.03", + "Advanced Chemical Bath II", + 3, + MachineType.CHEMICAL_BATH.tooltipDescription(), + RecipeMaps.chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + + ItemList.Machine_EV_ChemicalBath.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_EV.ID, + "basicmachine.chemicalbath.tier.04", + "Advanced Chemical Bath III", + 4, + MachineType.CHEMICAL_BATH.tooltipDescription(), + RecipeMaps.chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + + ItemList.Machine_IV_ChemicalBath.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_IV.ID, + "basicmachine.chemicalbath.tier.05", + "Advanced Chemical Bath IV", + 5, + MachineType.CHEMICAL_BATH.tooltipDescription(), + RecipeMaps.chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + + ItemList.ChemicalBathLuV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_LuV.ID, + "basicmachine.chemicalbath.tier.06", + "Elite Chemical Bath", + 6, + MachineType.CHEMICAL_BATH.tooltipDescription(), + chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + + ItemList.ChemicalBathZPM.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_ZPM.ID, + "basicmachine.chemicalbath.tier.07", + "Elite Chemical Bath II", + 7, + MachineType.CHEMICAL_BATH.tooltipDescription(), + chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + + ItemList.ChemicalBathUV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_UV.ID, + "basicmachine.chemicalbath.tier.08", + "Ultimate Chemical Dunktron", + 8, + MachineType.CHEMICAL_BATH.tooltipDescription(), + chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + + ItemList.ChemicalBathUHV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_UHV.ID, + "basicmachine.chemicalbath.tier.09", + "Epic Chemical Dunktron", + 9, + MachineType.CHEMICAL_BATH.tooltipDescription(), + chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + + ItemList.ChemicalBathUEV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_UEV.ID, + "basicmachine.chemicalbath.tier.10", + "Epic Chemical Dunktron II", + 10, + MachineType.CHEMICAL_BATH.tooltipDescription(), + chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + + ItemList.ChemicalBathUIV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_UIV.ID, + "basicmachine.chemicalbath.tier.11", + "Epic Chemical Dunktron III", + 11, + MachineType.CHEMICAL_BATH.tooltipDescription(), + chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + + ItemList.ChemicalBathUMV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_BATH_UMV.ID, + "basicmachine.chemicalbath.tier.12", + "Epic Chemical Dunktron IV", + 12, + MachineType.CHEMICAL_BATH.tooltipDescription(), + chemicalBathRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_BATH", + null).getStackForm(1L)); + } + + private void registerChemicalReactor() { + ItemList.Machine_LV_ChemicalReactor.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_LV.ID, + "basicmachine.chemicalreactor.tier.01", + "Basic Chemical Reactor", + 1, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + RecipeMaps.chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + ItemList.Machine_MV_ChemicalReactor.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_MV.ID, + "basicmachine.chemicalreactor.tier.02", + "Advanced Chemical Reactor", + 2, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + RecipeMaps.chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + ItemList.Machine_HV_ChemicalReactor.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_HV.ID, + "basicmachine.chemicalreactor.tier.03", + "Advanced Chemical Reactor II", + 3, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + RecipeMaps.chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + ItemList.Machine_EV_ChemicalReactor.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_EV.ID, + "basicmachine.chemicalreactor.tier.04", + "Advanced Chemical Reactor III", + 4, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + RecipeMaps.chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + ItemList.Machine_IV_ChemicalReactor.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_IV.ID, + "basicmachine.chemicalreactor.tier.05", + "Advanced Chemical Reactor IV", + 5, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + RecipeMaps.chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + ItemList.ChemicalReactorLuV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_LuV.ID, + "basicmachine.chemicalreactor.tier.06", + "Elite Chemical Reactor", + 6, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + ItemList.ChemicalReactorZPM.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_ZPM.ID, + "basicmachine.chemicalreactor.tier.07", + "Elite Chemical Reactor II", + 7, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + ItemList.ChemicalReactorUV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_UV.ID, + "basicmachine.chemicalreactor.tier.08", + "Ultimate Chemical Perforer", + 8, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + ItemList.ChemicalReactorUHV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_UHV.ID, + "basicmachine.chemicalreactor.tier.09", + "Epic Chemical Performer", + 9, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + ItemList.ChemicalReactorUEV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_UEV.ID, + "basicmachine.chemicalreactor.tier.10", + "Epic Chemical Performer II", + 10, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + ItemList.ChemicalReactorUIV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_UIV.ID, + "basicmachine.chemicalreactor.tier.11", + "Epic Chemical Performer III", + 11, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + ItemList.ChemicalReactorUMV.set( + new MTEBasicMachineWithRecipe( + CHEMICAL_REACTOR_UMV.ID, + "basicmachine.chemicalreactor.tier.12", + "Epic Chemical Performer IV", + 12, + MachineType.CHEMICAL_REACTOR.tooltipDescription(), + chemicalReactorRecipes, + 2, + 2, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CHEMICAL_REACTOR", + null).getStackForm(1L)); + + } + + private void registerFermenter() { + ItemList.Machine_LV_Fermenter.set( + new MTEBasicMachineWithRecipe( + FERMENTER_LV.ID, + "basicmachine.fermenter.tier.01", + "Basic Fermenter", + 1, + MachineType.FERMENTER.tooltipDescription(), + RecipeMaps.fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Fermenter.set( + new MTEBasicMachineWithRecipe( + FERMENTER_MV.ID, + "basicmachine.fermenter.tier.02", + "Advanced Fermenter", + 2, + MachineType.FERMENTER.tooltipDescription(), + RecipeMaps.fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Fermenter.set( + new MTEBasicMachineWithRecipe( + FERMENTER_HV.ID, + "basicmachine.fermenter.tier.03", + "Advanced Fermenter II", + 3, + MachineType.FERMENTER.tooltipDescription(), + RecipeMaps.fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Fermenter.set( + new MTEBasicMachineWithRecipe( + FERMENTER_EV.ID, + "basicmachine.fermenter.tier.04", + "Advanced Fermenter III", + 4, + MachineType.FERMENTER.tooltipDescription(), + RecipeMaps.fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Fermenter.set( + new MTEBasicMachineWithRecipe( + FERMENTER_IV.ID, + "basicmachine.fermenter.tier.05", + "Advanced Fermenter IV", + 5, + MachineType.FERMENTER.tooltipDescription(), + RecipeMaps.fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + + ItemList.FermenterLuV.set( + new MTEBasicMachineWithRecipe( + FERMENTER_LuV.ID, + "basicmachine.fermenter.tier.06", + "Elite Fermenter", + 6, + MachineType.FERMENTER.tooltipDescription(), + fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + + ItemList.FermenterZPM.set( + new MTEBasicMachineWithRecipe( + FERMENTER_ZPM.ID, + "basicmachine.fermenter.tier.07", + "Elite Fermenter II", + 7, + MachineType.FERMENTER.tooltipDescription(), + fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + + ItemList.FermenterUV.set( + new MTEBasicMachineWithRecipe( + FERMENTER_UV.ID, + "basicmachine.fermenter.tier.08", + "Ultimate Fermentation Hastener", + 8, + MachineType.FERMENTER.tooltipDescription(), + fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + + ItemList.FermenterUHV.set( + new MTEBasicMachineWithRecipe( + FERMENTER_UHV.ID, + "basicmachine.fermenter.tier.09", + "Epic Fermentation Hastener", + 9, + MachineType.FERMENTER.tooltipDescription(), + fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + + ItemList.FermenterUEV.set( + new MTEBasicMachineWithRecipe( + FERMENTER_UEV.ID, + "basicmachine.fermenter.tier.10", + "Epic Fermentation Hastener II", + 10, + MachineType.FERMENTER.tooltipDescription(), + fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + + ItemList.FermenterUIV.set( + new MTEBasicMachineWithRecipe( + FERMENTER_UIV.ID, + "basicmachine.fermenter.tier.11", + "Epic Fermentation Hastener III", + 11, + MachineType.FERMENTER.tooltipDescription(), + fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + + ItemList.FermenterUMV.set( + new MTEBasicMachineWithRecipe( + FERMENTER_UMV.ID, + "basicmachine.fermenter.tier.12", + "Epic Fermentation Hastener IV", + 12, + MachineType.FERMENTER.tooltipDescription(), + fermentingRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FERMENTER", + null).getStackForm(1L)); + } + + private void registerFluidCanner() { + ItemList.Machine_LV_FluidCanner.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_LV.ID, + "basicmachine.fluidcanner.tier.01", + "Basic Fluid Canner", + 1, + MachineType.FLUID_CANNER.tooltipDescription(), + RecipeMaps.fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + + ItemList.Machine_MV_FluidCanner.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_MV.ID, + "basicmachine.fluidcanner.tier.02", + "Advanced Fluid Canner", + 2, + MachineType.FLUID_CANNER.tooltipDescription(), + RecipeMaps.fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + + ItemList.Machine_HV_FluidCanner.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_HV.ID, + "basicmachine.fluidcanner.tier.03", + "Quick Fluid Canner", + 3, + MachineType.FLUID_CANNER.tooltipDescription(), + RecipeMaps.fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + + ItemList.Machine_EV_FluidCanner.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_EV.ID, + "basicmachine.fluidcanner.tier.04", + "Turbo Fluid Canner", + 4, + MachineType.FLUID_CANNER.tooltipDescription(), + RecipeMaps.fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + + ItemList.Machine_IV_FluidCanner.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_IV.ID, + "basicmachine.fluidcanner.tier.05", + "Instant Fluid Canner", + 5, + MachineType.FLUID_CANNER.tooltipDescription(), + RecipeMaps.fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + + ItemList.FluidCannerLuV.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_LuV.ID, + "basicmachine.fluidcanner.tier.06", + "Elite Fluid Canner", + 6, + MachineType.FLUID_CANNER.tooltipDescription(), + fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + + ItemList.FluidCannerZPM.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_ZPM.ID, + "basicmachine.fluidcanner.tier.07", + "Elite Fluid Canner II", + 7, + MachineType.FLUID_CANNER.tooltipDescription(), + fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + + ItemList.FluidCannerUV.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_UV.ID, + "basicmachine.fluidcanner.tier.08", + "Ultimate Liquid Can Actuator", + 8, + MachineType.FLUID_CANNER.tooltipDescription(), + fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + + ItemList.FluidCannerUHV.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_UHV.ID, + "basicmachine.fluidcanner.tier.09", + "Epic Liquid Can Actuator", + 9, + MachineType.FLUID_CANNER.tooltipDescription(), + fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + + ItemList.FluidCannerUEV.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_UEV.ID, + "basicmachine.fluidcanner.tier.10", + "Epic Liquid Can Actuator II", + 10, + MachineType.FLUID_CANNER.tooltipDescription(), + fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + + ItemList.FluidCannerUIV.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_UIV.ID, + "basicmachine.fluidcanner.tier.11", + "Epic Liquid Can Actuator III", + 11, + MachineType.FLUID_CANNER.tooltipDescription(), + fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + + ItemList.FluidCannerUMV.set( + new MTEBasicMachineWithRecipe( + FLUID_CANNER_UMV.ID, + "basicmachine.fluidcanner.tier.12", + "Epic Liquid Can Actuator IV", + 12, + MachineType.FLUID_CANNER.tooltipDescription(), + fluidCannerRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_CANNER", + null).getStackForm(1L)); + } + + private void registerFluidExtractor() { + ItemList.Machine_LV_FluidExtractor.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_LV.ID, + "basicmachine.fluidextractor.tier.01", + "Basic Fluid Extractor", + 1, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + RecipeMaps.fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + + ItemList.Machine_MV_FluidExtractor.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_MV.ID, + "basicmachine.fluidextractor.tier.02", + "Advanced Fluid Extractor", + 2, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + RecipeMaps.fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + + ItemList.Machine_HV_FluidExtractor.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_HV.ID, + "basicmachine.fluidextractor.tier.03", + "Advanced Fluid Extractor II", + 3, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + RecipeMaps.fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + + ItemList.Machine_EV_FluidExtractor.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_EV.ID, + "basicmachine.fluidextractor.tier.04", + "Advanced Fluid Extractor III", + 4, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + RecipeMaps.fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + + ItemList.Machine_IV_FluidExtractor.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_IV.ID, + "basicmachine.fluidextractor.tier.05", + "Advanced Fluid Extractor IV", + 5, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + RecipeMaps.fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + + ItemList.FluidExtractorLuV.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_LuV.ID, + "basicmachine.fluidextractor.tier.06", + "Elite Fluid Extractor", + 6, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + + ItemList.FluidExtractorZPM.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_ZPM.ID, + "basicmachine.fluidextractor.tier.07", + "Elite Fluid Extractor II", + 7, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + + ItemList.FluidExtractorUV.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_UV.ID, + "basicmachine.fluidextractor.tier.08", + "Ultimate Liquefying Sucker", + 8, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + + ItemList.FluidExtractorUHV.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_UHV.ID, + "basicmachine.fluidextractor.tier.09", + "Epic Liquefying Sucker", + 9, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + + ItemList.FluidExtractorUEV.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_UEV.ID, + "basicmachine.fluidextractor.tier.10", + "Epic Liquefying Sucker II", + 10, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + + ItemList.FluidExtractorUIV.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_UIV.ID, + "basicmachine.fluidextractor.tier.11", + "Epic Liquefying Sucker III", + 11, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + + ItemList.FluidExtractorUMV.set( + new MTEBasicMachineWithRecipe( + FLUID_EXTRACTOR_UMV.ID, + "basicmachine.fluidextractor.tier.12", + "Epic Liquefying Sucker IV", + 12, + MachineType.FLUID_EXTRACTOR.tooltipDescription(), + fluidExtractionRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_EXTRACTOR", + null).getStackForm(1L)); + } + + private void registerFluidHeater() { + ItemList.Machine_LV_FluidHeater.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_LV.ID, + "basicmachine.fluidheater.tier.01", + "Basic Fluid Heater", + 1, + MachineType.FLUID_HEATER.tooltipDescription(), + RecipeMaps.fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + + ItemList.Machine_MV_FluidHeater.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_MV.ID, + "basicmachine.fluidheater.tier.02", + "Advanced Fluid Heater", + 2, + MachineType.FLUID_HEATER.tooltipDescription(), + RecipeMaps.fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + + ItemList.Machine_HV_FluidHeater.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_HV.ID, + "basicmachine.fluidheater.tier.03", + "Advanced Fluid Heater II", + 3, + MachineType.FLUID_HEATER.tooltipDescription(), + RecipeMaps.fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + + ItemList.Machine_EV_FluidHeater.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_EV.ID, + "basicmachine.fluidheater.tier.04", + "Advanced Fluid Heater III", + 4, + MachineType.FLUID_HEATER.tooltipDescription(), + RecipeMaps.fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + + ItemList.Machine_IV_FluidHeater.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_IV.ID, + "basicmachine.fluidheater.tier.05", + "Advanced Fluid Heater IV", + 5, + MachineType.FLUID_HEATER.tooltipDescription(), + RecipeMaps.fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + + ItemList.FluidHeaterLuV.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_LuV.ID, + "basicmachine.fluidheater.tier.06", + "Elite Fluid Heater", + 6, + MachineType.FLUID_HEATER.tooltipDescription(), + fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + + ItemList.FluidHeaterZPM.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_ZPM.ID, + "basicmachine.fluidheater.tier.07", + "Elite Fluid Heater II", + 7, + MachineType.FLUID_HEATER.tooltipDescription(), + fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + + ItemList.FluidHeaterUV.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_UV.ID, + "basicmachine.fluidheater.tier.08", + "Ultimate Heat Infuser", + 8, + MachineType.FLUID_HEATER.tooltipDescription(), + fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + + ItemList.FluidHeaterUHV.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_UHV.ID, + "basicmachine.fluidheater.tier.09", + "Epic Heat Infuser", + 9, + MachineType.FLUID_HEATER.tooltipDescription(), + fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + + ItemList.FluidHeaterUEV.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_UEV.ID, + "basicmachine.fluidheater.tier.10", + "Epic Heat Infuser II", + 10, + MachineType.FLUID_HEATER.tooltipDescription(), + fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + + ItemList.FluidHeaterUIV.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_UIV.ID, + "basicmachine.fluidheater.tier.11", + "Epic Heat Infuser III", + 11, + MachineType.FLUID_HEATER.tooltipDescription(), + fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + + ItemList.FluidHeaterUMV.set( + new MTEBasicMachineWithRecipe( + FLUID_HEATER_UMV.ID, + "basicmachine.fluidheater.tier.12", + "Epic Heat Infuser IV", + 12, + MachineType.FLUID_HEATER.tooltipDescription(), + fluidHeaterRecipes, + 1, + 0, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_HEATER", + null).getStackForm(1L)); + } + + private void registerMixer() { + ItemList.Machine_LV_Mixer.set( + new MTEBasicMachineWithRecipe( + MIXER_LV.ID, + "basicmachine.mixer.tier.01", + "Basic Mixer", + 1, + MachineType.MIXER.tooltipDescription(), + RecipeMaps.mixerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Mixer.set( + new MTEBasicMachineWithRecipe( + MIXER_MV.ID, + "basicmachine.mixer.tier.02", + "Advanced Mixer", + 2, + MachineType.MIXER.tooltipDescription(), + RecipeMaps.mixerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Mixer.set( + new MTEBasicMachineWithRecipe( + MIXER_HV.ID, + "basicmachine.mixer.tier.03", + "Advanced Mixer II", + 3, + MachineType.MIXER.tooltipDescription(), + RecipeMaps.mixerRecipes, + 6, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Mixer.set( + new MTEBasicMachineWithRecipe( + MIXER_EV.ID, + "basicmachine.mixer.tier.04", + "Advanced Mixer III", + 4, + MachineType.MIXER.tooltipDescription(), + RecipeMaps.mixerRecipes, + 9, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Mixer.set( + new MTEBasicMachineWithRecipe( + MIXER_IV.ID, + "basicmachine.mixer.tier.05", + "Advanced Mixer IV", + 5, + MachineType.MIXER.tooltipDescription(), + RecipeMaps.mixerRecipes, + 9, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + + ItemList.MixerLuV.set( + new MTEBasicMachineWithRecipe( + MIXER_LuV.ID, + "basicmachine.mixer.tier.06", + "Elite Mixer", + 6, + MachineType.MIXER.tooltipDescription(), + mixerRecipes, + 9, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + + ItemList.MixerZPM.set( + new MTEBasicMachineWithRecipe( + MIXER_ZPM.ID, + "basicmachine.mixer.tier.07", + "Elite Mixer II", + 7, + MachineType.MIXER.tooltipDescription(), + mixerRecipes, + 9, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + + ItemList.MixerUV.set( + new MTEBasicMachineWithRecipe( + MIXER_UV.ID, + "basicmachine.mixer.tier.08", + "Ultimate Matter Organizer", + 8, + MachineType.MIXER.tooltipDescription(), + mixerRecipes, + 9, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + + ItemList.MixerUHV.set( + new MTEBasicMachineWithRecipe( + MIXER_UHV.ID, + "basicmachine.mixer.tier.09", + "Epic Matter Organizer", + 9, + MachineType.MIXER.tooltipDescription(), + mixerRecipes, + 9, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + + ItemList.MixerUEV.set( + new MTEBasicMachineWithRecipe( + MIXER_UEV.ID, + "basicmachine.mixer.tier.10", + "Epic Matter Organizer II", + 10, + MachineType.MIXER.tooltipDescription(), + mixerRecipes, + 9, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + + ItemList.MixerUIV.set( + new MTEBasicMachineWithRecipe( + MIXER_UIV.ID, + "basicmachine.mixer.tier.11", + "Epic Matter Organizer III", + 11, + MachineType.MIXER.tooltipDescription(), + mixerRecipes, + 9, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + + ItemList.MixerUMV.set( + new MTEBasicMachineWithRecipe( + MIXER_UMV.ID, + "basicmachine.mixer.tier.12", + "Epic Matter Organizer IV", + 12, + MachineType.MIXER.tooltipDescription(), + mixerRecipes, + 9, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MIXER", + null).getStackForm(1L)); + } + + private void registerAutoclave() { + ItemList.Machine_LV_Autoclave.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_LV.ID, + "basicmachine.autoclave.tier.01", + "Basic Autoclave", + 1, + MachineType.AUTOCLAVE.tooltipDescription(), + RecipeMaps.autoclaveRecipes, + 2, + 2, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + ItemList.Machine_MV_Autoclave.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_MV.ID, + "basicmachine.autoclave.tier.02", + "Advanced Autoclave", + 2, + MachineType.AUTOCLAVE.tooltipDescription(), + RecipeMaps.autoclaveRecipes, + 2, + 2, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + ItemList.Machine_HV_Autoclave.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_HV.ID, + "basicmachine.autoclave.tier.03", + "Advanced Autoclave II", + 3, + MachineType.AUTOCLAVE.tooltipDescription(), + RecipeMaps.autoclaveRecipes, + 2, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + ItemList.Machine_EV_Autoclave.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_EV.ID, + "basicmachine.autoclave.tier.04", + "Advanced Autoclave III", + 4, + MachineType.AUTOCLAVE.tooltipDescription(), + RecipeMaps.autoclaveRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + ItemList.Machine_IV_Autoclave.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_IV.ID, + "basicmachine.autoclave.tier.05", + "Advanced Autoclave IV", + 5, + MachineType.AUTOCLAVE.tooltipDescription(), + RecipeMaps.autoclaveRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + ItemList.AutoclaveLuV.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_LuV.ID, + "basicmachine.autoclave.tier.06", + "Elite Autoclave", + 6, + MachineType.AUTOCLAVE.tooltipDescription(), + autoclaveRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + ItemList.AutoclaveZPM.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_ZPM.ID, + "basicmachine.autoclave.tier.07", + "Elite Autoclave II", + 7, + MachineType.AUTOCLAVE.tooltipDescription(), + autoclaveRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + ItemList.AutoclaveUV.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_UV.ID, + "basicmachine.autoclave.tier.08", + "Ultimate Pressure Cooker", + 8, + MachineType.AUTOCLAVE.tooltipDescription(), + autoclaveRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + ItemList.AutoclaveUHV.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_UHV.ID, + "basicmachine.autoclave.tier.09", + "Epic Pressure Cooker", + 9, + MachineType.AUTOCLAVE.tooltipDescription(), + autoclaveRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + ItemList.AutoclaveUEV.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_UEV.ID, + "basicmachine.autoclave.tier.10", + "Epic Pressure Cooker II", + 10, + MachineType.AUTOCLAVE.tooltipDescription(), + autoclaveRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + ItemList.AutoclaveUIV.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_UIV.ID, + "basicmachine.autoclave.tier.11", + "Epic Pressure Cooker III", + 11, + MachineType.AUTOCLAVE.tooltipDescription(), + autoclaveRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + ItemList.AutoclaveUMV.set( + new MTEBasicMachineWithRecipe( + AUTOCLAVE_UMV.ID, + "basicmachine.autoclave.tier.12", + "Epic Pressure Cooker IV", + 12, + MachineType.AUTOCLAVE.tooltipDescription(), + autoclaveRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "AUTOCLAVE", + null).getStackForm(1L)); + + } + + private void registerBendingMachine() { + ItemList.Machine_LV_Bender.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_LV.ID, + "basicmachine.bender.tier.01", + "Basic Bending Machine", + 1, + MachineType.BENDING_MACHINE.tooltipDescription(), + RecipeMaps.benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Bender.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_MV.ID, + "basicmachine.bender.tier.02", + "Advanced Bending Machine", + 2, + MachineType.BENDING_MACHINE.tooltipDescription(), + RecipeMaps.benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Bender.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_HV.ID, + "basicmachine.bender.tier.03", + "Advanced Bending Machine II", + 3, + MachineType.BENDING_MACHINE.tooltipDescription(), + RecipeMaps.benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Bender.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_EV.ID, + "basicmachine.bender.tier.04", + "Advanced Bending Machine III", + 4, + MachineType.BENDING_MACHINE.tooltipDescription(), + RecipeMaps.benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Bender.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_IV.ID, + "basicmachine.bender.tier.05", + "Advanced Bending Machine IV", + 5, + MachineType.BENDING_MACHINE.tooltipDescription(), + RecipeMaps.benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + + ItemList.BendingMachineLuV.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_LuV.ID, + "basicmachine.bender.tier.06", + "Elite Bending Machine", + 6, + MachineType.BENDING_MACHINE.tooltipDescription(), + benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + + ItemList.BendingMachineZPM.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_ZPM.ID, + "basicmachine.bender.tier.07", + "Elite Bending Machine II", + 7, + MachineType.BENDING_MACHINE.tooltipDescription(), + benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + + ItemList.BendingMachineUV.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_UV.ID, + "basicmachine.bender.tier.08", + "Ultimate Bending Unit", + 8, + MachineType.BENDING_MACHINE.tooltipDescription(), + benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + + ItemList.BendingMachineUHV.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_UHV.ID, + "basicmachine.bender.tier.09", + "Epic Bending Unit", + 9, + MachineType.BENDING_MACHINE.tooltipDescription(), + benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + + ItemList.BendingMachineUEV.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_UEV.ID, + "basicmachine.bender.tier.10", + "Epic Bending Unit II", + 10, + MachineType.BENDING_MACHINE.tooltipDescription(), + benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + + ItemList.BendingMachineUIV.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_UIV.ID, + "basicmachine.bender.tier.11", + "Epic Bending Unit III", + 11, + MachineType.BENDING_MACHINE.tooltipDescription(), + benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + + ItemList.BendingMachineUMV.set( + new MTEBasicMachineWithRecipe( + BENDING_MACHINE_UMV.ID, + "basicmachine.bender.tier.12", + "Epic Bending Unit IV", + 12, + MachineType.BENDING_MACHINE.tooltipDescription(), + benderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "BENDER", + null).getStackForm(1L)); + } + + private void registerCompressor() { + ItemList.Machine_LV_Compressor.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_LV.ID, + "basicmachine.compressor.tier.01", + "Basic Compressor", + 1, + MachineType.COMPRESSOR.tooltipDescription(), + RecipeMaps.compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + ItemList.Machine_MV_Compressor.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_MV.ID, + "basicmachine.compressor.tier.02", + "Advanced Compressor", + 2, + MachineType.COMPRESSOR.tooltipDescription(), + RecipeMaps.compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + ItemList.Machine_HV_Compressor.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_HV.ID, + "basicmachine.compressor.tier.03", + "Advanced Compressor II", + 3, + MachineType.COMPRESSOR.tooltipDescription(), + RecipeMaps.compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + ItemList.Machine_EV_Compressor.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_EV.ID, + "basicmachine.compressor.tier.04", + "Advanced Compressor III", + 4, + MachineType.COMPRESSOR.tooltipDescription(), + RecipeMaps.compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + ItemList.Machine_IV_Compressor.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_IV.ID, + "basicmachine.compressor.tier.05", + "Singularity Compressor", + 5, + MachineType.COMPRESSOR.tooltipDescription(), + RecipeMaps.compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + ItemList.CompressorLuV.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_LuV.ID, + "basicmachine.compressor.tier.06", + "Elite Compressor", + 6, + MachineType.COMPRESSOR.tooltipDescription(), + compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + ItemList.CompressorZPM.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_ZPM.ID, + "basicmachine.compressor.tier.07", + "Elite Compressor II", + 7, + MachineType.COMPRESSOR.tooltipDescription(), + compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + ItemList.CompressorUV.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_UV.ID, + "basicmachine.compressor.tier.08", + "Ultimate Matter Constrictor", + 8, + MachineType.COMPRESSOR.tooltipDescription(), + compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + ItemList.CompressorUHV.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_UHV.ID, + "basicmachine.compressor.tier.09", + "Epic Matter Constrictor", + 9, + MachineType.COMPRESSOR.tooltipDescription(), + compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + ItemList.CompressorUEV.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_UEV.ID, + "basicmachine.compressor.tier.10", + "Epic Matter Constrictor II", + 10, + MachineType.COMPRESSOR.tooltipDescription(), + compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + ItemList.CompressorUIV.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_UIV.ID, + "basicmachine.compressor.tier.11", + "Epic Matter Constrictor III", + 11, + MachineType.COMPRESSOR.tooltipDescription(), + compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + ItemList.CompressorUMV.set( + new MTEBasicMachineWithRecipe( + COMPRESSOR_UMV.ID, + "basicmachine.compressor.tier.12", + "Epic Matter Constrictor IV", + 12, + MachineType.COMPRESSOR.tooltipDescription(), + compressorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "COMPRESSOR", + null).getStackForm(1L)); + + } + + private void registerCuttingMachine() { + ItemList.Machine_LV_Cutter.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_LV.ID, + "basicmachine.cutter.tier.01", + "Basic Cutting Machine", + 1, + MachineType.CUTTING_MACHINE.tooltipDescription(), + RecipeMaps.cutterRecipes, + 1, + 2, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Cutter.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_MV.ID, + "basicmachine.cutter.tier.02", + "Advanced Cutting Machine", + 2, + MachineType.CUTTING_MACHINE.tooltipDescription(), + RecipeMaps.cutterRecipes, + 2, + 2, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Cutter.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_HV.ID, + "basicmachine.cutter.tier.03", + "Advanced Cutting Machine II", + 3, + MachineType.CUTTING_MACHINE.tooltipDescription(), + RecipeMaps.cutterRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Cutter.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_EV.ID, + "basicmachine.cutter.tier.04", + "Advanced Cutting Machine III", + 4, + MachineType.CUTTING_MACHINE.tooltipDescription(), + RecipeMaps.cutterRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Cutter.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_IV.ID, + "basicmachine.cutter.tier.05", + "Advanced Cutting Machine IV", + 5, + MachineType.CUTTING_MACHINE.tooltipDescription(), + RecipeMaps.cutterRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + ItemList.CuttingMachineLuV.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_LuV.ID, + "basicmachine.cutter.tier.06", + "Elite Cutting Machine", + 6, + MachineType.CUTTING_MACHINE.tooltipDescription(), + cutterRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + ItemList.CuttingMachineZPM.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_ZPM.ID, + "basicmachine.cutter.tier.07", + "Elite Cutting Machine II", + 7, + MachineType.CUTTING_MACHINE.tooltipDescription(), + cutterRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + ItemList.CuttingMachineUV.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_UV.ID, + "basicmachine.cutter.tier.08", + "Ultimate Object Divider", + 8, + MachineType.CUTTING_MACHINE.tooltipDescription(), + cutterRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + ItemList.CuttingMachineUHV.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_UHV.ID, + "basicmachine.cutter.tier.09", + "Epic Object Divider", + 9, + MachineType.CUTTING_MACHINE.tooltipDescription(), + cutterRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + ItemList.CuttingMachineUEV.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_UEV.ID, + "basicmachine.cutter.tier.10", + "Epic Object Divider II", + 10, + MachineType.CUTTING_MACHINE.tooltipDescription(), + cutterRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + ItemList.CuttingMachineUIV.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_UIV.ID, + "basicmachine.cutter.tier.11", + "Epic Object Divider III", + 11, + MachineType.CUTTING_MACHINE.tooltipDescription(), + cutterRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + ItemList.CuttingMachineUMV.set( + new MTEBasicMachineWithRecipe( + CUTTING_MACHINE_UMV.ID, + "basicmachine.cutter.tier.12", + "Epic Object Divider IV", + 12, + MachineType.CUTTING_MACHINE.tooltipDescription(), + cutterRecipes, + 2, + 4, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CUTTER", + null).getStackForm(1L)); + + } + + private void registerDistillery() { + ItemList.Machine_LV_Distillery.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_LV.ID, + "basicmachine.distillery.tier.01", + "Basic Distillery", + 1, + MachineType.DISTILLERY.tooltipDescription(), + RecipeMaps.distilleryRecipes, + 1, + 1, + true, + SoundResource.GT_MACHINES_DISTILLERY_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + ItemList.Machine_MV_Distillery.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_MV.ID, + "basicmachine.distillery.tier.02", + "Advanced Distillery", + 2, + MachineType.DISTILLERY.tooltipDescription(), + RecipeMaps.distilleryRecipes, + 1, + 1, + true, + SoundResource.GT_MACHINES_DISTILLERY_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + ItemList.Machine_HV_Distillery.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_HV.ID, + "basicmachine.distillery.tier.03", + "Advanced Distillery II", + 3, + MachineType.DISTILLERY.tooltipDescription(), + RecipeMaps.distilleryRecipes, + 1, + 1, + true, + SoundResource.GT_MACHINES_DISTILLERY_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + ItemList.Machine_EV_Distillery.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_EV.ID, + "basicmachine.distillery.tier.04", + "Advanced Distillery III", + 4, + MachineType.DISTILLERY.tooltipDescription(), + RecipeMaps.distilleryRecipes, + 1, + 1, + true, + SoundResource.GT_MACHINES_DISTILLERY_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + ItemList.Machine_IV_Distillery.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_IV.ID, + "basicmachine.distillery.tier.05", + "Advanced Distillery IV", + 5, + MachineType.DISTILLERY.tooltipDescription(), + RecipeMaps.distilleryRecipes, + 1, + 1, + true, + SoundResource.GT_MACHINES_DISTILLERY_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + ItemList.DistilleryLuV.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_LuV.ID, + "basicmachine.distillery.tier.06", + "Elite Distillery", + 6, + MachineType.DISTILLERY.tooltipDescription(), + distilleryRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + ItemList.DistilleryZPM.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_ZPM.ID, + "basicmachine.distillery.tier.07", + "Elite Distillery II", + 7, + MachineType.DISTILLERY.tooltipDescription(), + distilleryRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + ItemList.DistilleryUV.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_UV.ID, + "basicmachine.distillery.tier.08", + "Ultimate Fraction Splitter", + 8, + MachineType.DISTILLERY.tooltipDescription(), + distilleryRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + ItemList.DistilleryUHV.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_UHV.ID, + "basicmachine.distillery.tier.09", + "Epic Fraction Splitter", + 9, + MachineType.DISTILLERY.tooltipDescription(), + distilleryRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + ItemList.DistilleryUEV.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_UEV.ID, + "basicmachine.distillery.tier.10", + "Epic Fraction Splitter II", + 10, + MachineType.DISTILLERY.tooltipDescription(), + distilleryRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + ItemList.DistilleryUIV.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_UIV.ID, + "basicmachine.distillery.tier.11", + "Epic Fraction Splitter III", + 11, + MachineType.DISTILLERY.tooltipDescription(), + distilleryRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + ItemList.DistilleryUMV.set( + new MTEBasicMachineWithRecipe( + DISTILLERY_UMV.ID, + "basicmachine.distillery.tier.12", + "Epic Fraction Splitter IV", + 12, + MachineType.DISTILLERY.tooltipDescription(), + distilleryRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "DISTILLERY", + null).getStackForm(1L)); + + } + + private void registerElectricFurnace() { + ItemList.Machine_LV_E_Furnace.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_LV.ID, + "basicmachine.e_furnace.tier.01", + "Basic Electric Furnace", + 1, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + RecipeMaps.furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).setProgressBarTextureName("E_Furnace") + .getStackForm(1L)); + + ItemList.Machine_MV_E_Furnace.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_MV.ID, + "basicmachine.e_furnace.tier.02", + "Advanced Electric Furnace", + 2, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + RecipeMaps.furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).setProgressBarTextureName("E_Furnace") + .getStackForm(1L)); + + ItemList.Machine_HV_E_Furnace.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_HV.ID, + "basicmachine.e_furnace.tier.03", + "Advanced Electric Furnace II", + 3, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + RecipeMaps.furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).setProgressBarTextureName("E_Furnace") + .getStackForm(1L)); + + ItemList.Machine_EV_E_Furnace.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_EV.ID, + "basicmachine.e_furnace.tier.04", + "Advanced Electric Furnace III", + 4, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + RecipeMaps.furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).setProgressBarTextureName("E_Furnace") + .getStackForm(1L)); + + ItemList.Machine_IV_E_Furnace.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_IV.ID, + "basicmachine.e_furnace.tier.05", + "Electron Exitement Processor", + 5, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + RecipeMaps.furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).setProgressBarTextureName("E_Furnace") + .getStackForm(1L)); + + ItemList.ElectricFurnaceLuV.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_LuV.ID, + "basicmachine.e_furnace.tier.06", + "Elite Electric Furnace", + 6, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).getStackForm(1L)); + + ItemList.ElectricFurnaceZPM.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_ZPM.ID, + "basicmachine.e_furnace.tier.07", + "Elite Electric Furnace II", + 7, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).getStackForm(1L)); + + ItemList.ElectricFurnaceUV.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_UV.ID, + "basicmachine.e_furnace.tier.08", + "Ultimate Atom Stimulator", + 8, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).getStackForm(1L)); + + ItemList.ElectricFurnaceUHV.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_UHV.ID, + "basicmachine.e_furnace.tier.09", + "Epic Atom Stimulator", + 9, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).getStackForm(1L)); + + ItemList.ElectricFurnaceUEV.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_UEV.ID, + "basicmachine.e_furnace.tier.10", + "Epic Atom Stimulator II", + 10, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).getStackForm(1L)); + + ItemList.ElectricFurnaceUIV.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_UIV.ID, + "basicmachine.e_furnace.tier.11", + "Epic Atom Stimulator III", + 11, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).getStackForm(1L)); + + ItemList.ElectricFurnaceUMV.set( + new MTEBasicMachineWithRecipe( + ELECTRIC_FURNACE_UMV.ID, + "basicmachine.e_furnace.tier.12", + "Epic Atom Stimulator IV", + 12, + MachineType.ELECTRIC_FURNACE.tooltipDescription(), + furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_FURNACE", + null).getStackForm(1L)); + } + + private void registerElectrolyzer() { + ItemList.Machine_LV_Electrolyzer.set( + new MTEBasicMachineWithRecipe( + ELECTROLYSER_LV.ID, + "basicmachine.electrolyzer.tier.01", + "Basic Electrolyzer", + 1, + MachineType.ELECTROLYZER.tooltipDescription(), + RecipeMaps.electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Electrolyzer.set( + new MTEBasicMachineWithRecipe( + ELECTROLYSER_MV.ID, + "basicmachine.electrolyzer.tier.02", + "Advanced Electrolyzer", + 2, + MachineType.ELECTROLYZER.tooltipDescription(), + RecipeMaps.electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Electrolyzer.set( + new MTEBasicMachineWithRecipe( + ELECTROLYSER_HV.ID, + "basicmachine.electrolyzer.tier.03", + "Advanced Electrolyzer II", + 3, + MachineType.ELECTROLYZER.tooltipDescription(), + RecipeMaps.electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Electrolyzer.set( + new MTEBasicMachineWithRecipe( + ELECTROLYSER_EV.ID, + "basicmachine.electrolyzer.tier.04", + "Advanced Electrolyzer III", + 4, + MachineType.ELECTROLYZER.tooltipDescription(), + RecipeMaps.electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Electrolyzer.set( + new MTEBasicMachineWithRecipe( + ELECTROLYSER_IV.ID, + "basicmachine.electrolyzer.tier.05", + "Molecular Disintegrator E-4908", + 5, + MachineType.ELECTROLYZER.tooltipDescription(), + RecipeMaps.electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + ItemList.ElectrolyzerLuV.set( + new MTEBasicMachineWithRecipe( + ELECTROLYZER_LuV.ID, + "basicmachine.electrolyzer.tier.06", + "Elite Electrolyzer", + 6, + MachineType.ELECTROLYZER.tooltipDescription(), + electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + ItemList.ElectrolyzerZPM.set( + new MTEBasicMachineWithRecipe( + ELECTROLYZER_ZPM.ID, + "basicmachine.electrolyzer.tier.07", + "Elite Electrolyzer II", + 7, + MachineType.ELECTROLYZER.tooltipDescription(), + electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + ItemList.ElectrolyzerUV.set( + new MTEBasicMachineWithRecipe( + ELECTROLYZER_UV.ID, + "basicmachine.electrolyzer.tier.08", + "Ultimate Ionizer", + 8, + MachineType.ELECTROLYZER.tooltipDescription(), + electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + ItemList.ElectrolyzerUHV.set( + new MTEBasicMachineWithRecipe( + ELECTROLYZER_UHV.ID, + "basicmachine.electrolyzer.tier.09", + "Epic Ionizer", + 9, + MachineType.ELECTROLYZER.tooltipDescription(), + electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + ItemList.ElectrolyzerUEV.set( + new MTEBasicMachineWithRecipe( + ELECTROLYZER_UEV.ID, + "basicmachine.electrolyzer.tier.10", + "Epic Ionizer II", + 10, + MachineType.ELECTROLYZER.tooltipDescription(), + electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + ItemList.ElectrolyzerUIV.set( + new MTEBasicMachineWithRecipe( + ELECTROLYZER_UIV.ID, + "basicmachine.electrolyzer.tier.11", + "Epic Ionizer III", + 11, + MachineType.ELECTROLYZER.tooltipDescription(), + electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + ItemList.ElectrolyzerUMV.set( + new MTEBasicMachineWithRecipe( + ELECTROLYZER_UMV.ID, + "basicmachine.electrolyzer.tier.12", + "Epic Ionizer IV", + 12, + MachineType.ELECTROLYZER.tooltipDescription(), + electrolyzerRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROLYZER", + null).getStackForm(1L)); + + } + + private void registerElectromagneticSeparator() { + ItemList.Machine_LV_ElectromagneticSeparator.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_LV.ID, + "basicmachine.electromagneticseparator.tier.01", + "Basic Electromagnetic Separator", + 1, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + RecipeMaps.electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + ItemList.Machine_MV_ElectromagneticSeparator.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_MV.ID, + "basicmachine.electromagneticseparator.tier.02", + "Advanced Electromagnetic Separator", + 2, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + RecipeMaps.electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + ItemList.Machine_HV_ElectromagneticSeparator.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_HV.ID, + "basicmachine.electromagneticseparator.tier.03", + "Advanced Electromagnetic Separator II", + 3, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + RecipeMaps.electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + ItemList.Machine_EV_ElectromagneticSeparator.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_EV.ID, + "basicmachine.electromagneticseparator.tier.04", + "Advanced Electromagnetic Separator III", + 4, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + RecipeMaps.electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + ItemList.Machine_IV_ElectromagneticSeparator.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_IV.ID, + "basicmachine.electromagneticseparator.tier.05", + "Advanced Electromagnetic Separator IV", + 5, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + RecipeMaps.electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + ItemList.ElectromagneticSeparatorLuV.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_LuV.ID, + "basicmachine.electromagneticseparator.tier.06", + "Elite Electromagnetic Separator", + 6, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + ItemList.ElectromagneticSeparatorZPM.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_ZPM.ID, + "basicmachine.electromagneticseparator.tier.07", + "Elite Electromagnetic Separator II", + 7, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + ItemList.ElectromagneticSeparatorUV.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_UV.ID, + "basicmachine.electromagneticseparator.tier.08", + "Ultimate Magnetar Separator", + 8, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + ItemList.ElectromagneticSeparatorUHV.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_UHV.ID, + "basicmachine.electromagneticseparator.tier.09", + "Epic Magnetar Separator", + 9, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + ItemList.ElectromagneticSeparatorUEV.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_UEV.ID, + "basicmachine.electromagneticseparator.tier.10", + "Epic Magnetar Separator II", + 10, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + ItemList.ElectromagneticSeparatorUIV.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_UIV.ID, + "basicmachine.electromagneticseparator.tier.11", + "Epic Magnetar Separator III", + 11, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + ItemList.ElectromagneticSeparatorUMV.set( + new MTEBasicMachineWithRecipe( + ELECTROMAGNETIC_SEPARATOR_UMV.ID, + "basicmachine.electromagneticseparator.tier.12", + "Epic Magnetar Separator IV", + 12, + MachineType.ELECTROMAGNETIC_SEPARATOR.tooltipDescription(), + electroMagneticSeparatorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTROMAGNETIC_SEPARATOR", + null).getStackForm(1L)); + + } + + private void registerExtractor() { + ItemList.Machine_LV_Extractor.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_LV.ID, + "basicmachine.extractor.tier.01", + "Basic Extractor", + 1, + MachineType.EXTRACTOR.tooltipDescription(), + RecipeMaps.extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + ItemList.Machine_MV_Extractor.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_MV.ID, + "basicmachine.extractor.tier.02", + "Advanced Extractor", + 2, + MachineType.EXTRACTOR.tooltipDescription(), + RecipeMaps.extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + ItemList.Machine_HV_Extractor.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_HV.ID, + "basicmachine.extractor.tier.03", + "Advanced Extractor II", + 3, + MachineType.EXTRACTOR.tooltipDescription(), + RecipeMaps.extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + ItemList.Machine_EV_Extractor.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_EV.ID, + "basicmachine.extractor.tier.04", + "Advanced Extractor III", + 4, + MachineType.EXTRACTOR.tooltipDescription(), + RecipeMaps.extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + ItemList.Machine_IV_Extractor.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_IV.ID, + "basicmachine.extractor.tier.05", + "Vacuum Extractor", + 5, + MachineType.EXTRACTOR.tooltipDescription(), + RecipeMaps.extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + ItemList.ExtractorLuV.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_LuV.ID, + "basicmachine.extractor.tier.06", + "Elite Extractor", + 6, + MachineType.EXTRACTOR.tooltipDescription(), + extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + ItemList.ExtractorZPM.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_ZPM.ID, + "basicmachine.extractor.tier.07", + "Elite Extractor II", + 7, + MachineType.EXTRACTOR.tooltipDescription(), + extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + ItemList.ExtractorUV.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_UV.ID, + "basicmachine.extractor.tier.08", + "Ultimate Extractinator", + 8, + MachineType.EXTRACTOR.tooltipDescription(), + extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + ItemList.ExtractorUHV.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_UHV.ID, + "basicmachine.extractor.tier.09", + "Epic Extractinator", + 9, + MachineType.EXTRACTOR.tooltipDescription(), + extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + ItemList.ExtractorUEV.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_UEV.ID, + "basicmachine.extractor.tier.10", + "Epic Extractinator II", + 10, + MachineType.EXTRACTOR.tooltipDescription(), + extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + ItemList.ExtractorUIV.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_UIV.ID, + "basicmachine.extractor.tier.11", + "Epic Extractinator III", + 11, + MachineType.EXTRACTOR.tooltipDescription(), + extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + ItemList.ExtractorUMV.set( + new MTEBasicMachineWithRecipe( + EXTRACTOR_UMV.ID, + "basicmachine.extractor.tier.12", + "Epic Extractinator IV", + 12, + MachineType.EXTRACTOR.tooltipDescription(), + extractorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRACTOR", + null).getStackForm(1L)); + + } + + private void registerExtruder() { + ItemList.Machine_LV_Extruder.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_LV.ID, + "basicmachine.extruder.tier.01", + "Basic Extruder", + 1, + MachineType.EXTRUDER.tooltipDescription(), + RecipeMaps.extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Extruder.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_MV.ID, + "basicmachine.extruder.tier.02", + "Advanced Extruder", + 2, + MachineType.EXTRUDER.tooltipDescription(), + RecipeMaps.extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Extruder.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_HV.ID, + "basicmachine.extruder.tier.03", + "Advanced Extruder II", + 3, + MachineType.EXTRUDER.tooltipDescription(), + RecipeMaps.extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Extruder.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_EV.ID, + "basicmachine.extruder.tier.04", + "Advanced Extruder III", + 4, + MachineType.EXTRUDER.tooltipDescription(), + RecipeMaps.extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Extruder.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_IV.ID, + "basicmachine.extruder.tier.05", + "Advanced Extruder IV", + 5, + MachineType.EXTRUDER.tooltipDescription(), + RecipeMaps.extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + ItemList.ExtruderLuV.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_LuV.ID, + "basicmachine.extruder.tier.06", + "Elite Extruder", + 6, + MachineType.EXTRUDER.tooltipDescription(), + extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + ItemList.ExtruderZPM.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_ZPM.ID, + "basicmachine.extruder.tier.07", + "Elite Extruder II", + 7, + MachineType.EXTRUDER.tooltipDescription(), + extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + ItemList.ExtruderUV.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_UV.ID, + "basicmachine.extruder.tier.08", + "Ultimate Shape Driver", + 8, + MachineType.EXTRUDER.tooltipDescription(), + extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + ItemList.ExtruderUHV.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_UHV.ID, + "basicmachine.extruder.tier.09", + "Epic Shape Driver", + 9, + MachineType.EXTRUDER.tooltipDescription(), + extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + ItemList.ExtruderUEV.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_UEV.ID, + "basicmachine.extruder.tier.10", + "Epic Shape Driver II", + 10, + MachineType.EXTRUDER.tooltipDescription(), + extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + ItemList.ExtruderUIV.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_UIV.ID, + "basicmachine.extruder.tier.11", + "Epic Shape Driver III", + 11, + MachineType.EXTRUDER.tooltipDescription(), + extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + ItemList.ExtruderUMV.set( + new MTEBasicMachineWithRecipe( + EXTRUDER_UMV.ID, + "basicmachine.extruder.tier.12", + "Epic Shape Driver IV", + 12, + MachineType.EXTRUDER.tooltipDescription(), + extruderRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "EXTRUDER", + null).getStackForm(1L)); + + } + + private void registerFluidSolidifier() { + ItemList.Machine_LV_FluidSolidifier.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_LV.ID, + "basicmachine.fluidsolidifier.tier.01", + "Basic Fluid Solidifier", + 1, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + RecipeMaps.fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + ItemList.Machine_MV_FluidSolidifier.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_MV.ID, + "basicmachine.fluidsolidifier.tier.02", + "Advanced Fluid Solidifier", + 2, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + RecipeMaps.fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + ItemList.Machine_HV_FluidSolidifier.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_HV.ID, + "basicmachine.fluidsolidifier.tier.03", + "Advanced Fluid Solidifier II", + 3, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + RecipeMaps.fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + ItemList.Machine_EV_FluidSolidifier.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_EV.ID, + "basicmachine.fluidsolidifier.tier.04", + "Advanced Fluid Solidifier III", + 4, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + RecipeMaps.fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + ItemList.Machine_IV_FluidSolidifier.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_IV.ID, + "basicmachine.fluidsolidifier.tier.05", + "Advanced Fluid Solidifier IV", + 5, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + RecipeMaps.fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + ItemList.FluidSolidifierLuV.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_LuV.ID, + "basicmachine.fluidsolidifier.tier.06", + "Elite Fluid Solidifier", + 6, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + ItemList.FluidSolidifierZPM.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_ZPM.ID, + "basicmachine.fluidsolidifier.tier.07", + "Elite Fluid Solidifier II", + 7, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + ItemList.FluidSolidifierUV.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_UV.ID, + "basicmachine.fluidsolidifier.tier.08", + "Ultimate Fluid Petrificator", + 8, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + ItemList.FluidSolidifierUHV.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_UHV.ID, + "basicmachine.fluidsolidifier.tier.09", + "Epic Fluid Petrificator", + 9, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + ItemList.FluidSolidifierUEV.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_UEV.ID, + "basicmachine.fluidsolidifier.tier.10", + "Epic Fluid Petrificator II", + 10, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + ItemList.FluidSolidifierUIV.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_UIV.ID, + "basicmachine.fluidsolidifier.tier.11", + "Epic Fluid Petrificator III", + 11, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + ItemList.FluidSolidifierUMV.set( + new MTEBasicMachineWithRecipe( + FLUID_SOLIDIFIER_UMV.ID, + "basicmachine.fluidsolidifier.tier.12", + "Epic Fluid Petrificator IV", + 12, + MachineType.FLUID_SOLIDIFIER.tooltipDescription(), + fluidSolidifierRecipes, + 1, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "FLUID_SOLIDIFIER", + null).getStackForm(1L)); + + } + + private void registerFormingPress() { + ItemList.Machine_LV_Press.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_LV.ID, + "basicmachine.press.tier.01", + "Basic Forming Press", + 1, + MachineType.FORMING_PRESS.tooltipDescription(), + RecipeMaps.formingPressRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + ItemList.Machine_MV_Press.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_MV.ID, + "basicmachine.press.tier.02", + "Advanced Forming Press", + 2, + MachineType.FORMING_PRESS.tooltipDescription(), + RecipeMaps.formingPressRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + ItemList.Machine_HV_Press.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_HV.ID, + "basicmachine.press.tier.03", + "Advanced Forming Press II", + 3, + MachineType.FORMING_PRESS.tooltipDescription(), + RecipeMaps.formingPressRecipes, + 4, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + ItemList.Machine_EV_Press.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_EV.ID, + "basicmachine.press.tier.04", + "Advanced Forming Press III", + 4, + MachineType.FORMING_PRESS.tooltipDescription(), + RecipeMaps.formingPressRecipes, + 4, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + ItemList.Machine_IV_Press.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_IV.ID, + "basicmachine.press.tier.05", + "Advanced Forming Press IV", + 5, + MachineType.FORMING_PRESS.tooltipDescription(), + RecipeMaps.formingPressRecipes, + 6, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + ItemList.FormingPressLuV.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_LuV.ID, + "basicmachine.press.tier.06", + "Elite Forming Press", + 6, + MachineType.FORMING_PRESS.tooltipDescription(), + formingPressRecipes, + 6, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + ItemList.FormingPressZPM.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_ZPM.ID, + "basicmachine.press.tier.07", + "Elite Forming Press II", + 7, + MachineType.FORMING_PRESS.tooltipDescription(), + formingPressRecipes, + 6, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + ItemList.FormingPressUV.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_UV.ID, + "basicmachine.press.tier.08", + "Ultimate Surface Shifter", + 8, + MachineType.FORMING_PRESS.tooltipDescription(), + formingPressRecipes, + 6, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + ItemList.FormingPressUHV.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_UHV.ID, + "basicmachine.press.tier.09", + "Epic Surface Shifter", + 9, + MachineType.FORMING_PRESS.tooltipDescription(), + formingPressRecipes, + 6, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + ItemList.FormingPressUEV.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_UEV.ID, + "basicmachine.press.tier.10", + "Epic Surface Shifter II", + 10, + MachineType.FORMING_PRESS.tooltipDescription(), + formingPressRecipes, + 6, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + ItemList.FormingPressUIV.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_UIV.ID, + "basicmachine.press.tier.11", + "Epic Surface Shifter III", + 11, + MachineType.FORMING_PRESS.tooltipDescription(), + formingPressRecipes, + 6, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + ItemList.FormingPressUMV.set( + new MTEBasicMachineWithRecipe( + FORMING_PRESS_UMV.ID, + "basicmachine.press.tier.12", + "Epic Surface Shifter IV", + 12, + MachineType.FORMING_PRESS.tooltipDescription(), + formingPressRecipes, + 6, + 1, + false, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PRESS", + null).getStackForm(1L)); + + } + + private void registerForgeHammer() { + ItemList.Machine_LV_Hammer.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_LV.ID, + "basicmachine.hammer.tier.01", + "Basic Forge Hammer", + 1, + MachineType.FORGE_HAMMER.tooltipDescription(), + RecipeMaps.hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.MAIN_RANDOM_SPARKS, + "HAMMER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Hammer.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_MV.ID, + "basicmachine.hammer.tier.02", + "Advanced Forge Hammer", + 2, + MachineType.FORGE_HAMMER.tooltipDescription(), + RecipeMaps.hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.MAIN_RANDOM_SPARKS, + "HAMMER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Hammer.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_HV.ID, + "basicmachine.hammer.tier.03", + "Advanced Forge Hammer II", + 3, + MachineType.FORGE_HAMMER.tooltipDescription(), + RecipeMaps.hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.MAIN_RANDOM_SPARKS, + "HAMMER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Hammer.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_EV.ID, + "basicmachine.hammer.tier.04", + "Advanced Forge Hammer III", + 4, + MachineType.FORGE_HAMMER.tooltipDescription(), + RecipeMaps.hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.MAIN_RANDOM_SPARKS, + "HAMMER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Hammer.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_IV.ID, + "basicmachine.hammer.tier.05", + "Advanced Forge Hammer IV", + 5, + MachineType.FORGE_HAMMER.tooltipDescription(), + RecipeMaps.hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.MAIN_RANDOM_SPARKS, + "HAMMER", + null).getStackForm(1L)); + + ItemList.ForgeHammerLuV.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_LuV.ID, + "basicmachine.hammer.tier.06", + "Elite Forge Hammer", + 6, + MachineType.FORGE_HAMMER.tooltipDescription(), + hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "HAMMER", + null).getStackForm(1L)); + + ItemList.ForgeHammerZPM.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_ZPM.ID, + "basicmachine.hammer.tier.07", + "Elite Forge Hammer II", + 7, + MachineType.FORGE_HAMMER.tooltipDescription(), + hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "HAMMER", + null).getStackForm(1L)); + + ItemList.ForgeHammerUV.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_UV.ID, + "basicmachine.hammer.tier.08", + "Ultimate Impact Modulator", + 8, + MachineType.FORGE_HAMMER.tooltipDescription(), + hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "HAMMER", + null).getStackForm(1L)); + + ItemList.ForgeHammerUHV.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_UHV.ID, + "basicmachine.hammer.tier.09", + "Epic Impact Modulator", + 9, + MachineType.FORGE_HAMMER.tooltipDescription(), + hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "HAMMER", + null).getStackForm(1L)); + + ItemList.ForgeHammerUEV.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_UEV.ID, + "basicmachine.hammer.tier.10", + "Epic Impact Modulator II", + 10, + MachineType.FORGE_HAMMER.tooltipDescription(), + hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "HAMMER", + null).getStackForm(1L)); + + ItemList.ForgeHammerUIV.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_UIV.ID, + "basicmachine.hammer.tier.11", + "Epic Impact Modulator III", + 11, + MachineType.FORGE_HAMMER.tooltipDescription(), + hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "HAMMER", + null).getStackForm(1L)); + + ItemList.ForgeHammerUMV.set( + new MTEBasicMachineWithRecipe( + FORGE_HAMMER_UMV.ID, + "basicmachine.hammer.tier.12", + "Epic Impact Modulator IV", + 12, + MachineType.FORGE_HAMMER.tooltipDescription(), + hammerRecipes, + 1, + 1, + true, + SoundResource.RANDOM_ANVIL_USE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "HAMMER", + null).getStackForm(1L)); + + } + + private void registerLathe() { + ItemList.Machine_LV_Lathe.set( + new MTEBasicMachineWithRecipe( + LATHE_LV.ID, + "basicmachine.lathe.tier.01", + "Basic Lathe", + 1, + MachineType.LATHE.tooltipDescription(), + RecipeMaps.latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + ItemList.Machine_MV_Lathe.set( + new MTEBasicMachineWithRecipe( + LATHE_MV.ID, + "basicmachine.lathe.tier.02", + "Advanced Lathe", + 2, + MachineType.LATHE.tooltipDescription(), + RecipeMaps.latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + ItemList.Machine_HV_Lathe.set( + new MTEBasicMachineWithRecipe( + LATHE_HV.ID, + "basicmachine.lathe.tier.03", + "Advanced Lathe II", + 3, + MachineType.LATHE.tooltipDescription(), + RecipeMaps.latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + ItemList.Machine_EV_Lathe.set( + new MTEBasicMachineWithRecipe( + LATHE_EV.ID, + "basicmachine.lathe.tier.04", + "Advanced Lathe III", + 4, + MachineType.LATHE.tooltipDescription(), + RecipeMaps.latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + ItemList.Machine_IV_Lathe.set( + new MTEBasicMachineWithRecipe( + LATHE_IV.ID, + "basicmachine.lathe.tier.05", + "Advanced Lathe IV", + 5, + MachineType.LATHE.tooltipDescription(), + RecipeMaps.latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + ItemList.LatheLuV.set( + new MTEBasicMachineWithRecipe( + LATHE_LuV.ID, + "basicmachine.lathe.tier.06", + "Elite Lathe", + 6, + MachineType.LATHE.tooltipDescription(), + latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + ItemList.LatheZPM.set( + new MTEBasicMachineWithRecipe( + LATHE_ZPM.ID, + "basicmachine.lathe.tier.07", + "Elite Lathe II", + 7, + MachineType.LATHE.tooltipDescription(), + latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + ItemList.LatheUV.set( + new MTEBasicMachineWithRecipe( + LATHE_UV.ID, + "basicmachine.lathe.tier.08", + "Ultimate Turn-O-Matic", + 8, + MachineType.LATHE.tooltipDescription(), + latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + ItemList.LatheUHV.set( + new MTEBasicMachineWithRecipe( + LATHE_UHV.ID, + "basicmachine.lathe.tier.09", + "Epic Turn-O-Matic", + 9, + MachineType.LATHE.tooltipDescription(), + latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + ItemList.LatheUEV.set( + new MTEBasicMachineWithRecipe( + LATHE_UEV.ID, + "basicmachine.lathe.tier.10", + "Epic Turn-O-Matic II", + 10, + MachineType.LATHE.tooltipDescription(), + latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + ItemList.LatheUIV.set( + new MTEBasicMachineWithRecipe( + LATHE_UIV.ID, + "basicmachine.lathe.tier.11", + "Epic Turn-O-Matic III", + 11, + MachineType.LATHE.tooltipDescription(), + latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + ItemList.LatheUMV.set( + new MTEBasicMachineWithRecipe( + LATHE_UMV.ID, + "basicmachine.lathe.tier.12", + "Epic Turn-O-Matic IV", + 12, + MachineType.LATHE.tooltipDescription(), + latheRecipes, + 1, + 2, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LATHE", + null).getStackForm(1L)); + + } + + private void registerPrecisionLaserEngraver() { + ItemList.Machine_LV_LaserEngraver.set( + new MTEBasicMachineWithRecipe( + LASER_ENGRAVER_LV.ID, + "basicmachine.laserengraver.tier.01", + "Basic Precision Laser Engraver", + 1, + MachineType.LASER_ENGRAVER.tooltipDescription(), + RecipeMaps.laserEngraverRecipes, + 2, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + ItemList.Machine_MV_LaserEngraver.set( + new MTEBasicMachineWithRecipe( + LASER_ENGRAVER_MV.ID, + "basicmachine.laserengraver.tier.02", + "Advanced Precision Laser Engraver", + 2, + MachineType.LASER_ENGRAVER.tooltipDescription(), + RecipeMaps.laserEngraverRecipes, + 2, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + ItemList.Machine_HV_LaserEngraver.set( + new MTEBasicMachineWithRecipe( + LASER_ENGRAVER_HV.ID, + "basicmachine.laserengraver.tier.03", + "Advanced Precision Laser Engraver II", + 3, + MachineType.LASER_ENGRAVER.tooltipDescription(), + RecipeMaps.laserEngraverRecipes, + 2, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + ItemList.Machine_EV_LaserEngraver.set( + new MTEBasicMachineWithRecipe( + LASER_ENGRAVER_EV.ID, + "basicmachine.laserengraver.tier.04", + "Advanced Precision Laser Engraver III", + 4, + MachineType.LASER_ENGRAVER.tooltipDescription(), + RecipeMaps.laserEngraverRecipes, + 4, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + ItemList.Machine_IV_LaserEngraver.set( + new MTEBasicMachineWithRecipe( + LASER_ENGRAVER_IV.ID, + "basicmachine.laserengraver.tier.05", + "Advanced Precision Laser Engraver IV", + 5, + MachineType.LASER_ENGRAVER.tooltipDescription(), + RecipeMaps.laserEngraverRecipes, + 4, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + ItemList.PrecisionLaserEngraverLuV.set( + new MTEBasicMachineWithRecipe( + PRECISION_LASER_ENGRAVER_LuV.ID, + "basicmachine.laserengraver.tier.06", + "Elite Precision Laser Engraver", + 6, + MachineType.LASER_ENGRAVER.tooltipDescription(), + laserEngraverRecipes, + 4, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + ItemList.PrecisionLaserEngraverZPM.set( + new MTEBasicMachineWithRecipe( + PRECISION_LASER_ENGRAVER_ZPM.ID, + "basicmachine.laserengraver.tier.07", + "Elite Precision Laser Engraver II", + 7, + MachineType.LASER_ENGRAVER.tooltipDescription(), + laserEngraverRecipes, + 4, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + ItemList.PrecisionLaserEngraverUV.set( + new MTEBasicMachineWithRecipe( + PRECISION_LASER_ENGRAVER_UV.ID, + "basicmachine.laserengraver.tier.08", + "Ultimate Exact Photon Cannon", + 8, + MachineType.LASER_ENGRAVER.tooltipDescription(), + laserEngraverRecipes, + 4, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + ItemList.PrecisionLaserEngraverUHV.set( + new MTEBasicMachineWithRecipe( + PRECISION_LASER_ENGRAVER_UHV.ID, + "basicmachine.laserengraver.tier.09", + "Epic Exact Photon Cannon", + 9, + MachineType.LASER_ENGRAVER.tooltipDescription(), + laserEngraverRecipes, + 4, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + ItemList.PrecisionLaserEngraverUEV.set( + new MTEBasicMachineWithRecipe( + PRECISION_LASER_ENGRAVER_UEV.ID, + "basicmachine.laserengraver.tier.10", + "Epic Exact Photon Cannon II", + 10, + MachineType.LASER_ENGRAVER.tooltipDescription(), + laserEngraverRecipes, + 4, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + ItemList.PrecisionLaserEngraverUIV.set( + new MTEBasicMachineWithRecipe( + PRECISION_LASER_ENGRAVER_UIV.ID, + "basicmachine.laserengraver.tier.11", + "Epic Exact Photon Cannon III", + 11, + MachineType.LASER_ENGRAVER.tooltipDescription(), + laserEngraverRecipes, + 4, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + ItemList.PrecisionLaserEngraverUMV.set( + new MTEBasicMachineWithRecipe( + PRECISION_LASER_ENGRAVER_UMV.ID, + "basicmachine.laserengraver.tier.12", + "Epic Exact Photon Cannon IV", + 12, + MachineType.LASER_ENGRAVER.tooltipDescription(), + laserEngraverRecipes, + 4, + 1, + true, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "LASER_ENGRAVER", + null).getStackForm(1L)); + + } + + private void registerMacerator() { + ItemList.Machine_LV_Macerator.set( + new MTEBasicMachineWithRecipe( + MACERATOR_LV.ID, + "basicmachine.macerator.tier.01", + "Basic Macerator", + 1, + MachineType.MACERATOR.tooltipDescription(), + RecipeMaps.maceratorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "MACERATOR", + null).getStackForm(1L)); + + ItemList.Machine_MV_Macerator.set( + new MTEBasicMachineWithRecipe( + MACERATOR_MV.ID, + "basicmachine.macerator.tier.02", + "Advanced Macerator", + 2, + MachineType.MACERATOR.tooltipDescription(), + RecipeMaps.maceratorRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "MACERATOR", + null).getStackForm(1L)); + + ItemList.Machine_HV_Macerator.set( + new MTEBasicMachineWithRecipe( + MACERATOR_HV.ID, + "basicmachine.macerator.tier.03", + "Universal Macerator", + 3, + MachineType.MACERATOR_PULVERIZER.tooltipDescription(), + RecipeMaps.maceratorRecipes, + 1, + 2, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PULVERIZER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Macerator.set( + new MTEBasicMachineWithRecipe( + MACERATOR_EV.ID, + "basicmachine.macerator.tier.04", + "Universal Pulverizer", + 4, + MachineType.MACERATOR_PULVERIZER.tooltipDescription(), + RecipeMaps.maceratorRecipes, + 1, + 3, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PULVERIZER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Macerator.set( + new MTEBasicMachineWithRecipe( + MACERATOR_IV.ID, + "basicmachine.macerator.tier.05", + "Blend-O-Matic 9001", + 5, + MachineType.MACERATOR_PULVERIZER.tooltipDescription(), + RecipeMaps.maceratorRecipes, + 1, + 4, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PULVERIZER", + null).getStackForm(1L)); + + ItemList.MaceratorLuV.set( + new MTEBasicMachineWithRecipe( + MACERATOR_LuV.ID, + "basicmachine.macerator.tier.06", + "Elite Pulverizer", + 6, + MachineType.MACERATOR.tooltipDescription(), + maceratorRecipes, + 1, + 4, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PULVERIZER", + null).getStackForm(1L)); + + ItemList.MaceratorZPM.set( + new MTEBasicMachineWithRecipe( + MACERATOR_ZPM.ID, + "basicmachine.macerator.tier.07", + "Elite Pulverizer II", + 7, + MachineType.MACERATOR.tooltipDescription(), + maceratorRecipes, + 1, + 4, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PULVERIZER", + null).getStackForm(1L)); + + ItemList.MaceratorUV.set( + new MTEBasicMachineWithRecipe( + MACERATOR_UV.ID, + "basicmachine.macerator.tier.08", + "Ultimate Shape Eliminator", + 8, + MachineType.MACERATOR.tooltipDescription(), + maceratorRecipes, + 1, + 4, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PULVERIZER", + null).getStackForm(1L)); + + ItemList.MaceratorUHV.set( + new MTEBasicMachineWithRecipe( + MACERATOR_UHV.ID, + "basicmachine.macerator.tier.09", + "Epic Shape Eliminator", + 9, + MachineType.MACERATOR.tooltipDescription(), + maceratorRecipes, + 1, + 4, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PULVERIZER", + null).getStackForm(1L)); + + ItemList.MaceratorUEV.set( + new MTEBasicMachineWithRecipe( + MACERATOR_UEV.ID, + "basicmachine.macerator.tier.10", + "Epic Shape Eliminator II", + 10, + MachineType.MACERATOR.tooltipDescription(), + maceratorRecipes, + 1, + 4, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PULVERIZER", + null).getStackForm(1L)); + + ItemList.MaceratorUIV.set( + new MTEBasicMachineWithRecipe( + MACERATOR_UIV.ID, + "basicmachine.macerator.tier.11", + "Epic Shape Eliminator III", + 11, + MachineType.MACERATOR.tooltipDescription(), + maceratorRecipes, + 1, + 4, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PULVERIZER", + null).getStackForm(1L)); + + ItemList.MaceratorUMV.set( + new MTEBasicMachineWithRecipe( + MACERATOR_UMV.ID, + "basicmachine.macerator.tier.12", + "Epic Shape Eliminator IV", + 12, + MachineType.MACERATOR.tooltipDescription(), + maceratorRecipes, + 1, + 4, + false, + SoundResource.IC2_MACHINES_MACERATOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PULVERIZER", + null).getStackForm(1L)); + + } + + private void registerMatterFabricator() { + + ItemList.MassFabricatorLuV.set( + new MTEMassfabricator(MATTER_FABRICATOR_LuV.ID, "basicmachine.massfab.tier.06", "Elite Mass Fabricator", 6) + .getStackForm(1L)); + ItemList.MassFabricatorZPM.set( + new MTEMassfabricator( + MATTER_FABRICATOR_ZPM.ID, + "basicmachine.massfab.tier.07", + "Elite Mass Fabricator II", + 7).getStackForm(1L)); + ItemList.MassFabricatorUV.set( + new MTEMassfabricator( + MATTER_FABRICATOR_UV.ID, + "basicmachine.massfab.tier.08", + "Ultimate Existence Initiator", + 8).getStackForm(1L)); + ItemList.MassFabricatorUHV.set( + new MTEMassfabricator( + MATTER_FABRICATOR_UHV.ID, + "basicmachine.massfab.tier.09", + "Epic Existence Initiator", + 9).getStackForm(1L)); + ItemList.MassFabricatorUEV.set( + new MTEMassfabricator( + MATTER_FABRICATOR_UEV.ID, + "basicmachine.massfab.tier.10", + "Epic Existence Initiator II", + 10).getStackForm(1L)); + ItemList.MassFabricatorUIV.set( + new MTEMassfabricator( + MATTER_FABRICATOR_UIV.ID, + "basicmachine.massfab.tier.11", + "Epic Existence Initiator III", + 11).getStackForm(1L)); + ItemList.MassFabricatorUMV.set( + new MTEMassfabricator( + MATTER_FABRICATOR_UMV.ID, + "basicmachine.massfab.tier.12", + "Epic Existence Initiator IV", + 12).getStackForm(1L)); + } + + private void registerMicrowave() { + ItemList.Machine_LV_Microwave.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_OVEN_LV.ID, + "basicmachine.microwave.tier.01", + "Basic Microwave", + 1, + MachineType.MICROWAVE.tooltipDescription(), + RecipeMaps.microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + ItemList.Machine_MV_Microwave.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_OVEN_MV.ID, + "basicmachine.microwave.tier.02", + "Advanced Microwave", + 2, + MachineType.MICROWAVE.tooltipDescription(), + RecipeMaps.microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + ItemList.Machine_HV_Microwave.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_OVEN_HV.ID, + "basicmachine.microwave.tier.03", + "Advanced Microwave II", + 3, + MachineType.MICROWAVE.tooltipDescription(), + RecipeMaps.microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + ItemList.Machine_EV_Microwave.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_OVEN_EV.ID, + "basicmachine.microwave.tier.04", + "Advanced Microwave III", + 4, + MachineType.MICROWAVE.tooltipDescription(), + RecipeMaps.microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + ItemList.Machine_IV_Microwave.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_OVEN_IV.ID, + "basicmachine.microwave.tier.05", + "Advanced Microwave IV", + 5, + MachineType.MICROWAVE.tooltipDescription(), + RecipeMaps.microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + ItemList.MicrowaveLuV.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_LuV.ID, + "basicmachine.microwave.tier.06", + "Elite Microwave", + 6, + MachineType.MICROWAVE.tooltipDescription(), + microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + ItemList.MicrowaveZPM.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_ZPM.ID, + "basicmachine.microwave.tier.07", + "Elite Microwave II", + 7, + MachineType.MICROWAVE.tooltipDescription(), + microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + ItemList.MicrowaveUV.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_UV.ID, + "basicmachine.microwave.tier.08", + "Ultimate UFO Engine", + 8, + MachineType.MICROWAVE.tooltipDescription(), + microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + ItemList.MicrowaveUHV.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_UHV.ID, + "basicmachine.microwave.tier.09", + "Epic UFO Engine", + 9, + MachineType.MICROWAVE.tooltipDescription(), + microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + ItemList.MicrowaveUEV.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_UEV.ID, + "basicmachine.microwave.tier.10", + "Epic UFO Engine II", + 10, + MachineType.MICROWAVE.tooltipDescription(), + microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + ItemList.MicrowaveUIV.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_UIV.ID, + "basicmachine.microwave.tier.11", + "Epic UFO Engine III", + 11, + MachineType.MICROWAVE.tooltipDescription(), + microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + ItemList.MicrowaveUMV.set( + new MTEBasicMachineWithRecipe( + MICROWAVE_UMV.ID, + "basicmachine.microwave.tier.12", + "Epic UFO Engine IV", + 12, + MachineType.MICROWAVE.tooltipDescription(), + microwaveRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "MICROWAVE", + null).getStackForm(1L)); + + } + + private static void registerOven() { + ItemList.Machine_LV_Oven.set( + new MTEBasicMachineWithRecipe( + OVEN_LV.ID, + "basicmachine.e_oven.tier.01", + "Basic Electric Oven", + 1, + MachineType.OVEN.tooltipDescription(), + RecipeMaps.furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_OVEN", + null).setProgressBarTextureName("E_Oven") + .getStackForm(1L)); + + ItemList.Machine_MV_Oven.set( + new MTEBasicMachineWithRecipe( + OVEN_MV.ID, + "basicmachine.e_oven.tier.02", + "Advanced Electric Oven", + 2, + MachineType.OVEN.tooltipDescription(), + RecipeMaps.furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_OVEN", + null).setProgressBarTextureName("E_Oven") + .getStackForm(1L)); + + ItemList.Machine_HV_Oven.set( + new MTEBasicMachineWithRecipe( + OVEN_HV.ID, + "basicmachine.e_oven.tier.03", + "Advanced Electric Oven II", + 3, + MachineType.OVEN.tooltipDescription(), + RecipeMaps.furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_OVEN", + null).setProgressBarTextureName("E_Oven") + .getStackForm(1L)); + + ItemList.Machine_EV_Oven.set( + new MTEBasicMachineWithRecipe( + OVEN_EV.ID, + "basicmachine.e_oven.tier.04", + "Advanced Electric Oven III", + 4, + MachineType.OVEN.tooltipDescription(), + RecipeMaps.furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_OVEN", + null).setProgressBarTextureName("E_Oven") + .getStackForm(1L)); + + ItemList.Machine_IV_Oven.set( + new MTEBasicMachineWithRecipe( + OVEN_IV.ID, + "basicmachine.e_oven.tier.05", + "Advanced Electric Oven IV", + 5, + MachineType.OVEN.tooltipDescription(), + RecipeMaps.furnaceRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ELECTRIC_OVEN", + null).setProgressBarTextureName("E_Oven") + .getStackForm(1L)); + } + + private void registerOreWashingPlant() { + ItemList.Machine_LV_OreWasher.set( + new MTEBasicMachineWithRecipe( + ORE_WASHER_LV.ID, + "basicmachine.orewasher.tier.01", + "Basic Ore Washing Plant", + 1, + MachineType.ORE_WASHER.tooltipDescription(), + RecipeMaps.oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + ItemList.Machine_MV_OreWasher.set( + new MTEBasicMachineWithRecipe( + ORE_WASHER_MV.ID, + "basicmachine.orewasher.tier.02", + "Advanced Ore Washing Plant", + 2, + MachineType.ORE_WASHER.tooltipDescription(), + RecipeMaps.oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + ItemList.Machine_HV_OreWasher.set( + new MTEBasicMachineWithRecipe( + ORE_WASHER_HV.ID, + "basicmachine.orewasher.tier.03", + "Advanced Ore Washing Plant II", + 3, + MachineType.ORE_WASHER.tooltipDescription(), + RecipeMaps.oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + ItemList.Machine_EV_OreWasher.set( + new MTEBasicMachineWithRecipe( + ORE_WASHER_EV.ID, + "basicmachine.orewasher.tier.04", + "Advanced Ore Washing Plant III", + 4, + MachineType.ORE_WASHER.tooltipDescription(), + RecipeMaps.oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + ItemList.Machine_IV_OreWasher.set( + new MTEBasicMachineWithRecipe( + ORE_WASHER_IV.ID, + "basicmachine.orewasher.tier.05", + "Repurposed Laundry-Washer I-360", + 5, + MachineType.ORE_WASHER.tooltipDescription(), + RecipeMaps.oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + ItemList.OreWashingPlantLuV.set( + new MTEBasicMachineWithRecipe( + ORE_WASHING_PLANT_LuV.ID, + "basicmachine.orewasher.tier.06", + "Elite Ore Washing Plant", + 6, + MachineType.ORE_WASHER.tooltipDescription(), + oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + ItemList.OreWashingPlantZPM.set( + new MTEBasicMachineWithRecipe( + ORE_WASHING_PLANT_ZPM.ID, + "basicmachine.orewasher.tier.07", + "Elite Ore Washing Plant II", + 7, + MachineType.ORE_WASHER.tooltipDescription(), + oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + ItemList.OreWashingPlantUV.set( + new MTEBasicMachineWithRecipe( + ORE_WASHING_PLANT_UV.ID, + "basicmachine.orewasher.tier.08", + "Ultimate Ore Washing Machine", + 8, + MachineType.ORE_WASHER.tooltipDescription(), + oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + ItemList.OreWashingPlantUHV.set( + new MTEBasicMachineWithRecipe( + ORE_WASHING_PLANT_UHV.ID, + "basicmachine.orewasher.tier.09", + "Epic Ore Washing Machine", + 9, + MachineType.ORE_WASHER.tooltipDescription(), + oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + ItemList.OreWashingPlantUEV.set( + new MTEBasicMachineWithRecipe( + ORE_WASHING_PLANT_UEV.ID, + "basicmachine.orewasher.tier.10", + "Epic Ore Washing Machine II", + 10, + MachineType.ORE_WASHER.tooltipDescription(), + oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + ItemList.OreWashingPlantUIV.set( + new MTEBasicMachineWithRecipe( + ORE_WASHING_PLANT_UIV.ID, + "basicmachine.orewasher.tier.11", + "Epic Ore Washing Machine III", + 11, + MachineType.ORE_WASHER.tooltipDescription(), + oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + ItemList.OreWashingPlantUMV.set( + new MTEBasicMachineWithRecipe( + ORE_WASHING_PLANT_UMV.ID, + "basicmachine.orewasher.tier.12", + "Epic Ore Washing Machine IV", + 12, + MachineType.ORE_WASHER.tooltipDescription(), + oreWasherRecipes, + 1, + 3, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ORE_WASHER", + null).getStackForm(1L)); + + } + + private void registerPolarizer() { + ItemList.Machine_LV_Polarizer.set( + new MTEBasicMachineWithRecipe( + POLARIZER_LV.ID, + "basicmachine.polarizer.tier.01", + "Basic Polarizer", + 1, + MachineType.POLARIZER.tooltipDescription(), + RecipeMaps.polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Polarizer.set( + new MTEBasicMachineWithRecipe( + POLARIZER_MV.ID, + "basicmachine.polarizer.tier.02", + "Advanced Polarizer", + 2, + MachineType.POLARIZER.tooltipDescription(), + RecipeMaps.polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Polarizer.set( + new MTEBasicMachineWithRecipe( + POLARIZER_HV.ID, + "basicmachine.polarizer.tier.03", + "Advanced Polarizer II", + 3, + MachineType.POLARIZER.tooltipDescription(), + RecipeMaps.polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Polarizer.set( + new MTEBasicMachineWithRecipe( + POLARIZER_EV.ID, + "basicmachine.polarizer.tier.04", + "Advanced Polarizer III", + 4, + MachineType.POLARIZER.tooltipDescription(), + RecipeMaps.polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Polarizer.set( + new MTEBasicMachineWithRecipe( + POLARIZER_IV.ID, + "basicmachine.polarizer.tier.05", + "Advanced Polarizer IV", + 5, + MachineType.POLARIZER.tooltipDescription(), + RecipeMaps.polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + ItemList.PolarizerLuV.set( + new MTEBasicMachineWithRecipe( + POLARIZER_LuV.ID, + "basicmachine.polarizer.tier.06", + "Elite Polarizer", + 6, + MachineType.POLARIZER.tooltipDescription(), + polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + ItemList.PolarizerZPM.set( + new MTEBasicMachineWithRecipe( + POLARIZER_ZPM.ID, + "basicmachine.polarizer.tier.07", + "Elite Polarizer II", + 7, + MachineType.POLARIZER.tooltipDescription(), + polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + ItemList.PolarizerUV.set( + new MTEBasicMachineWithRecipe( + POLARIZER_UV.ID, + "basicmachine.polarizer.tier.08", + "Ultimate Magnetism Inducer", + 8, + MachineType.POLARIZER.tooltipDescription(), + polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + ItemList.PolarizerUHV.set( + new MTEBasicMachineWithRecipe( + POLARIZER_UHV.ID, + "basicmachine.polarizer.tier.09", + "Epic Magnetism Inducer", + 9, + MachineType.POLARIZER.tooltipDescription(), + polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + ItemList.PolarizerUEV.set( + new MTEBasicMachineWithRecipe( + POLARIZER_UEV.ID, + "basicmachine.polarizer.tier.10", + "Epic Magnetism Inducer II", + 10, + MachineType.POLARIZER.tooltipDescription(), + polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + ItemList.PolarizerUIV.set( + new MTEBasicMachineWithRecipe( + POLARIZER_UIV.ID, + "basicmachine.polarizer.tier.11", + "Epic Magnetism Inducer III", + 11, + MachineType.POLARIZER.tooltipDescription(), + polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + ItemList.PolarizerUMV.set( + new MTEBasicMachineWithRecipe( + POLARIZER_UMV.ID, + "basicmachine.polarizer.tier.12", + "Epic Magnetism Inducer IV", + 12, + MachineType.POLARIZER.tooltipDescription(), + polarizerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_MAGNETIZER_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "POLARIZER", + null).getStackForm(1L)); + + } + + private static void registerPrinter() { + ItemList.Machine_LV_Printer.set( + new MTEBasicMachineWithRecipe( + PRINTER_LV.ID, + "basicmachine.printer.tier.01", + "Basic Printer", + 1, + MachineType.PRINTER.tooltipDescription(), + RecipeMaps.printerRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PRINTER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Printer.set( + new MTEBasicMachineWithRecipe( + PRINTER_MV.ID, + "basicmachine.printer.tier.02", + "Advanced Printer", + 2, + MachineType.PRINTER.tooltipDescription(), + RecipeMaps.printerRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PRINTER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Printer.set( + new MTEBasicMachineWithRecipe( + PRINTER_HV.ID, + "basicmachine.printer.tier.03", + "Advanced Printer II", + 3, + MachineType.PRINTER.tooltipDescription(), + RecipeMaps.printerRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PRINTER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Printer.set( + new MTEBasicMachineWithRecipe( + PRINTER_EV.ID, + "basicmachine.printer.tier.04", + "Advanced Printer III", + 4, + MachineType.PRINTER.tooltipDescription(), + RecipeMaps.printerRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PRINTER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Printer.set( + new MTEBasicMachineWithRecipe( + PRINTER_IV.ID, + "basicmachine.printer.tier.05", + "Advanced Printer IV", + 5, + MachineType.PRINTER.tooltipDescription(), + RecipeMaps.printerRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PRINTER", + null).getStackForm(1L)); + + ItemList.Machine_LuV_Printer.set( + new MTEBasicMachineWithRecipe( + PRINTER_LuV.ID, + "basicmachine.printer.tier.06", + "Advanced Printer V", + 6, + MachineType.PRINTER.tooltipDescription(), + RecipeMaps.printerRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PRINTER", + null).getStackForm(1L)); + + ItemList.Machine_ZPM_Printer.set( + new MTEBasicMachineWithRecipe( + PRINTER_ZPM.ID, + "basicmachine.printer.tier.07", + "Advanced Printer VI", + 7, + MachineType.PRINTER.tooltipDescription(), + RecipeMaps.printerRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PRINTER", + null).getStackForm(1L)); + + ItemList.Machine_UV_Printer.set( + new MTEBasicMachineWithRecipe( + PRINTER_UV.ID, + "basicmachine.printer.tier.08", + "Advanced Printer VII", + 8, + MachineType.PRINTER.tooltipDescription(), + RecipeMaps.printerRecipes, + 1, + 1, + true, + SoundResource.IC2_MACHINES_COMPRESSOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.TOP_SMOKE, + "PRINTER", + null).getStackForm(1L)); + } + + private void registerRecycler() { + ItemList.Machine_LV_Recycler.set( + new MTEBasicMachineWithRecipe( + RECYCLER_LV.ID, + "basicmachine.recycler.tier.01", + "Basic Recycler", + 1, + MachineType.RECYCLER.tooltipDescription(), + RecipeMaps.recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Recycler.set( + new MTEBasicMachineWithRecipe( + RECYCLER_MV.ID, + "basicmachine.recycler.tier.02", + "Advanced Recycler", + 2, + MachineType.RECYCLER.tooltipDescription(), + RecipeMaps.recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Recycler.set( + new MTEBasicMachineWithRecipe( + RECYCLER_HV.ID, + "basicmachine.recycler.tier.03", + "Advanced Recycler II", + 3, + MachineType.RECYCLER.tooltipDescription(), + RecipeMaps.recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Recycler.set( + new MTEBasicMachineWithRecipe( + RECYCLER_EV.ID, + "basicmachine.recycler.tier.04", + "Advanced Recycler III", + 4, + MachineType.RECYCLER.tooltipDescription(), + RecipeMaps.recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Recycler.set( + new MTEBasicMachineWithRecipe( + RECYCLER_IV.ID, + "basicmachine.recycler.tier.05", + "The Oblitterator", + 5, + MachineType.RECYCLER.tooltipDescription(), + RecipeMaps.recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + ItemList.RecyclerLuV.set( + new MTEBasicMachineWithRecipe( + RECYCLER_LuV.ID, + "basicmachine.recycler.tier.06", + "Elite Recycler", + 6, + MachineType.RECYCLER.tooltipDescription(), + recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + ItemList.RecyclerZPM.set( + new MTEBasicMachineWithRecipe( + RECYCLER_ZPM.ID, + "basicmachine.recycler.tier.07", + "Elite Recycler II", + 7, + MachineType.RECYCLER.tooltipDescription(), + recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + ItemList.RecyclerUV.set( + new MTEBasicMachineWithRecipe( + RECYCLER_UV.ID, + "basicmachine.recycler.tier.08", + "Ultimate Scrap-O-Matic", + 8, + MachineType.RECYCLER.tooltipDescription(), + recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + ItemList.RecyclerUHV.set( + new MTEBasicMachineWithRecipe( + RECYCLER_UHV.ID, + "basicmachine.recycler.tier.09", + "Epic Scrap-O-Matic", + 9, + MachineType.RECYCLER.tooltipDescription(), + recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + ItemList.RecyclerUEV.set( + new MTEBasicMachineWithRecipe( + RECYCLER_UEV.ID, + "basicmachine.recycler.tier.10", + "Epic Scrap-O-Matic II", + 10, + MachineType.RECYCLER.tooltipDescription(), + recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + ItemList.RecyclerUIV.set( + new MTEBasicMachineWithRecipe( + RECYCLER_UIV.ID, + "basicmachine.recycler.tier.11", + "Epic Scrap-O-Matic III", + 11, + MachineType.RECYCLER.tooltipDescription(), + recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + ItemList.RecyclerUMV.set( + new MTEBasicMachineWithRecipe( + RECYCLER_UMV.ID, + "basicmachine.recycler.tier.12", + "Epic Scrap-O-Matic IV", + 12, + MachineType.RECYCLER.tooltipDescription(), + recyclerRecipes, + 1, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "RECYCLER", + null).getStackForm(1L)); + + } + + private void registerSiftingMachine() { + ItemList.Machine_LV_Sifter.set( + new MTEBasicMachineWithRecipe( + SIFTER_LV.ID, + "basicmachine.sifter.tier.01", + "Basic Sifting Machine", + 1, + MachineType.SIFTER.tooltipDescription(), + RecipeMaps.sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Sifter.set( + new MTEBasicMachineWithRecipe( + SIFTER_MV.ID, + "basicmachine.sifter.tier.02", + "Advanced Sifting Machine", + 2, + MachineType.SIFTER.tooltipDescription(), + RecipeMaps.sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Sifter.set( + new MTEBasicMachineWithRecipe( + SIFTER_HV.ID, + "basicmachine.sifter.tier.03", + "Advanced Sifting Machine II", + 3, + MachineType.SIFTER.tooltipDescription(), + RecipeMaps.sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Sifter.set( + new MTEBasicMachineWithRecipe( + SIFTER_EV.ID, + "basicmachine.sifter.tier.04", + "Advanced Sifting Machine III", + 4, + MachineType.SIFTER.tooltipDescription(), + RecipeMaps.sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Sifter.set( + new MTEBasicMachineWithRecipe( + SIFTER_IV.ID, + "basicmachine.sifter.tier.05", + "Advanced Sifting Machine IV", + 5, + MachineType.SIFTER.tooltipDescription(), + RecipeMaps.sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + ItemList.SiftingMachineLuV.set( + new MTEBasicMachineWithRecipe( + SIFTING_MACHINE_LuV.ID, + "basicmachine.sifter.tier.06", + "Elite Sifting Machine", + 6, + MachineType.SIFTER.tooltipDescription(), + sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + ItemList.SiftingMachineZPM.set( + new MTEBasicMachineWithRecipe( + SIFTING_MACHINE_ZPM.ID, + "basicmachine.sifter.tier.07", + "Elite Sifting Machine II", + 7, + MachineType.SIFTER.tooltipDescription(), + sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + ItemList.SiftingMachineUV.set( + new MTEBasicMachineWithRecipe( + SIFTING_MACHINE_UV.ID, + "basicmachine.sifter.tier.08", + "Ultimate Pulsation Filter", + 8, + MachineType.SIFTER.tooltipDescription(), + sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + ItemList.SiftingMachineUHV.set( + new MTEBasicMachineWithRecipe( + SIFTING_MACHINE_UHV.ID, + "basicmachine.sifter.tier.09", + "Epic Pulsation Filter", + 9, + MachineType.SIFTER.tooltipDescription(), + sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + ItemList.SiftingMachineUEV.set( + new MTEBasicMachineWithRecipe( + SIFTING_MACHINE_UEV.ID, + "basicmachine.sifter.tier.10", + "Epic Pulsation Filter II", + 10, + MachineType.SIFTER.tooltipDescription(), + sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + ItemList.SiftingMachineUIV.set( + new MTEBasicMachineWithRecipe( + SIFTING_MACHINE_UIV.ID, + "basicmachine.sifter.tier.11", + "Epic Pulsation Filter III", + 11, + MachineType.SIFTER.tooltipDescription(), + sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + ItemList.SiftingMachineUMV.set( + new MTEBasicMachineWithRecipe( + SIFTING_MACHINE_UMV.ID, + "basicmachine.sifter.tier.12", + "Epic Pulsation Filter IV", + 12, + MachineType.SIFTER.tooltipDescription(), + sifterRecipes, + 1, + 9, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SIFTER", + null).getStackForm(1L)); + + } + + private void registerSlicingMachine() { + ItemList.Machine_LV_Slicer.set( + new MTEBasicMachineWithRecipe( + SLICER_LV.ID, + "basicmachine.slicer.tier.01", + "Basic Slicing Machine", + 1, + MachineType.SLICER.tooltipDescription(), + RecipeMaps.slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Slicer.set( + new MTEBasicMachineWithRecipe( + SLICER_MV.ID, + "basicmachine.slicer.tier.02", + "Advanced Slicing Machine", + 2, + MachineType.SLICER.tooltipDescription(), + RecipeMaps.slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Slicer.set( + new MTEBasicMachineWithRecipe( + SLICER_HV.ID, + "basicmachine.slicer.tier.03", + "Advanced Slicing Machine II", + 3, + MachineType.SLICER.tooltipDescription(), + RecipeMaps.slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Slicer.set( + new MTEBasicMachineWithRecipe( + SLICER_EV.ID, + "basicmachine.slicer.tier.04", + "Advanced Slicing Machine III", + 4, + MachineType.SLICER.tooltipDescription(), + RecipeMaps.slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Slicer.set( + new MTEBasicMachineWithRecipe( + SLICER_IV.ID, + "basicmachine.slicer.tier.05", + "Advanced Slicing Machine IV", + 5, + MachineType.SLICER.tooltipDescription(), + RecipeMaps.slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + ItemList.SlicingMachineLuV.set( + new MTEBasicMachineWithRecipe( + SLICING_MACHINE_LuV.ID, + "basicmachine.slicer.tier.06", + "Elite Slicing Machine", + 6, + MachineType.SLICER.tooltipDescription(), + slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + ItemList.SlicingMachineZPM.set( + new MTEBasicMachineWithRecipe( + SLICING_MACHINE_ZPM.ID, + "basicmachine.slicer.tier.07", + "Elite Slicing Machine II", + 7, + MachineType.SLICER.tooltipDescription(), + slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + ItemList.SlicingMachineUV.set( + new MTEBasicMachineWithRecipe( + SLICING_MACHINE_UV.ID, + "basicmachine.slicer.tier.08", + "Ultimate Quantum Slicer", + 8, + MachineType.SLICER.tooltipDescription(), + slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + ItemList.SlicingMachineUHV.set( + new MTEBasicMachineWithRecipe( + SLICING_MACHINE_UHV.ID, + "basicmachine.slicer.tier.09", + "Epic Quantum Slicer", + 9, + MachineType.SLICER.tooltipDescription(), + slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + ItemList.SlicingMachineUEV.set( + new MTEBasicMachineWithRecipe( + SLICING_MACHINE_UEV.ID, + "basicmachine.slicer.tier.10", + "Epic Quantum Slicer II", + 10, + MachineType.SLICER.tooltipDescription(), + slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + ItemList.SlicingMachineUIV.set( + new MTEBasicMachineWithRecipe( + SLICING_MACHINE_UIV.ID, + "basicmachine.slicer.tier.11", + "Epic Quantum Slicer III", + 11, + MachineType.SLICER.tooltipDescription(), + slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + ItemList.SlicingMachineUMV.set( + new MTEBasicMachineWithRecipe( + SLICING_MACHINE_UMV.ID, + "basicmachine.slicer.tier.12", + "Epic Quantum Slicer IV", + 12, + MachineType.SLICER.tooltipDescription(), + slicerRecipes, + 2, + 1, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "SLICER", + null).getStackForm(1L)); + + } + + private void registerThermalCentrifuge() { + ItemList.Machine_LV_ThermalCentrifuge.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_LV.ID, + "basicmachine.thermalcentrifuge.tier.01", + "Basic Thermal Centrifuge", + 1, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + RecipeMaps.thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.Machine_MV_ThermalCentrifuge.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_MV.ID, + "basicmachine.thermalcentrifuge.tier.02", + "Advanced Thermal Centrifuge", + 2, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + RecipeMaps.thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.Machine_HV_ThermalCentrifuge.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_HV.ID, + "basicmachine.thermalcentrifuge.tier.03", + "Advanced Thermal Centrifuge II", + 3, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + RecipeMaps.thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.Machine_EV_ThermalCentrifuge.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_EV.ID, + "basicmachine.thermalcentrifuge.tier.04", + "Advanced Thermal Centrifuge III", + 4, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + RecipeMaps.thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.Machine_IV_ThermalCentrifuge.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_IV.ID, + "basicmachine.thermalcentrifuge.tier.05", + "Blaze Sweatshop T-6350", + 5, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + RecipeMaps.thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.ThermalCentrifugeLuV.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_LuV.ID, + "basicmachine.thermalcentrifuge.tier.06", + "Elite Thermal Centrifuge", + 6, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.ThermalCentrifugeZPM.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_ZPM.ID, + "basicmachine.thermalcentrifuge.tier.07", + "Elite Thermal Centrifuge II", + 7, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.ThermalCentrifugeUV.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_UV.ID, + "basicmachine.thermalcentrifuge.tier.08", + "Ultimate Fire Cyclone", + 8, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.ThermalCentrifugeUHV.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_UHV.ID, + "basicmachine.thermalcentrifuge.tier.09", + "Epic Fire Cyclone", + 9, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.ThermalCentrifugeUEV.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_UEV.ID, + "basicmachine.thermalcentrifuge.tier.10", + "Epic Fire Cyclone II", + 10, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.ThermalCentrifugeUIV.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_UIV.ID, + "basicmachine.thermalcentrifuge.tier.11", + "Epic Fire Cyclone III", + 11, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.ThermalCentrifugeUMV.set( + new MTEBasicMachineWithRecipe( + THERMAL_CENTRIFUGE_UMV.ID, + "basicmachine.thermalcentrifuge.tier.12", + "Epic Fire Cyclone IV", + 12, + MachineType.THERMAL_CENTRIFUGE.tooltipDescription(), + thermalCentrifugeRecipes, + 1, + 3, + false, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "THERMAL_CENTRIFUGE", + null).getStackForm(1L)); + } + + private void registerWiremill() { + ItemList.Machine_LV_Wiremill.set( + new MTEBasicMachineWithRecipe( + WIREMILL_LV.ID, + "basicmachine.wiremill.tier.01", + "Basic Wiremill", + 1, + MachineType.WIREMILL.tooltipDescription(), + RecipeMaps.wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + ItemList.Machine_MV_Wiremill.set( + new MTEBasicMachineWithRecipe( + WIREMILL_MV.ID, + "basicmachine.wiremill.tier.02", + "Advanced Wiremill", + 2, + MachineType.WIREMILL.tooltipDescription(), + RecipeMaps.wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + ItemList.Machine_HV_Wiremill.set( + new MTEBasicMachineWithRecipe( + WIREMILL_HV.ID, + "basicmachine.wiremill.tier.03", + "Advanced Wiremill II", + 3, + MachineType.WIREMILL.tooltipDescription(), + RecipeMaps.wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + ItemList.Machine_EV_Wiremill.set( + new MTEBasicMachineWithRecipe( + WIREMILL_EV.ID, + "basicmachine.wiremill.tier.04", + "Advanced Wiremill III", + 4, + MachineType.WIREMILL.tooltipDescription(), + RecipeMaps.wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + ItemList.Machine_IV_Wiremill.set( + new MTEBasicMachineWithRecipe( + WIREMILL_IV.ID, + "basicmachine.wiremill.tier.05", + "Advanced Wiremill IV", + 5, + MachineType.WIREMILL.tooltipDescription(), + RecipeMaps.wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + ItemList.WiremillLuV.set( + new MTEBasicMachineWithRecipe( + WIREMILL_LuV.ID, + "basicmachine.wiremill.tier.06", + "Elite Wiremill", + 6, + MachineType.WIREMILL.tooltipDescription(), + wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + ItemList.WiremillZPM.set( + new MTEBasicMachineWithRecipe( + WIREMILL_ZPM.ID, + "basicmachine.wiremill.tier.07", + "Elite Wiremill II", + 7, + MachineType.WIREMILL.tooltipDescription(), + wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + ItemList.WiremillUV.set( + new MTEBasicMachineWithRecipe( + WIREMILL_UV.ID, + "basicmachine.wiremill.tier.08", + "Ultimate Wire Transfigurator", + 8, + MachineType.WIREMILL.tooltipDescription(), + wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + ItemList.WiremillUHV.set( + new MTEBasicMachineWithRecipe( + WIREMILL_UHV.ID, + "basicmachine.wiremill.tier.09", + "Epic Wire Transfigurator", + 9, + MachineType.WIREMILL.tooltipDescription(), + wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + ItemList.WiremillUEV.set( + new MTEBasicMachineWithRecipe( + WIREMILL_UEV.ID, + "basicmachine.wiremill.tier.10", + "Epic Wire Transfigurator II", + 10, + MachineType.WIREMILL.tooltipDescription(), + wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + ItemList.WiremillUIV.set( + new MTEBasicMachineWithRecipe( + WIREMILL_UIV.ID, + "basicmachine.wiremill.tier.11", + "Epic Wire Transfigurator III", + 11, + MachineType.WIREMILL.tooltipDescription(), + wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + ItemList.WiremillUMV.set( + new MTEBasicMachineWithRecipe( + WIREMILL_UMV.ID, + "basicmachine.wiremill.tier.12", + "Epic Wire Transfigurator IV", + 12, + MachineType.WIREMILL.tooltipDescription(), + wiremillRecipes, + 2, + 1, + false, + SoundResource.IC2_MACHINES_RECYCLER_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "WIREMILL", + null).getStackForm(1L)); + + } + + private void registerArcFurnace() { + ItemList.Machine_LV_ArcFurnace.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_LV.ID, + "basicmachine.arcfurnace.tier.01", + "Basic Arc Furnace", + 1, + MachineType.ARC_FURNACE.tooltipDescription(), + RecipeMaps.arcFurnaceRecipes, + 1, + 4, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.Machine_MV_ArcFurnace.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_MV.ID, + "basicmachine.arcfurnace.tier.02", + "Advanced Arc Furnace", + 2, + MachineType.ARC_FURNACE.tooltipDescription(), + RecipeMaps.arcFurnaceRecipes, + 1, + 4, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.Machine_HV_ArcFurnace.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_HV.ID, + "basicmachine.arcfurnace.tier.03", + "Advanced Arc Furnace II", + 3, + MachineType.ARC_FURNACE.tooltipDescription(), + RecipeMaps.arcFurnaceRecipes, + 1, + 4, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.Machine_EV_ArcFurnace.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_EV.ID, + "basicmachine.arcfurnace.tier.04", + "Advanced Arc Furnace III", + 4, + MachineType.ARC_FURNACE.tooltipDescription(), + RecipeMaps.arcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.Machine_IV_ArcFurnace.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_IV.ID, + "basicmachine.arcfurnace.tier.05", + "Advanced Arc Furnace IV", + 5, + MachineType.ARC_FURNACE.tooltipDescription(), + RecipeMaps.arcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.ArcFurnaceLuV.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_LuV.ID, + "basicmachine.arcfurnace.tier.06", + "Elite Arc Furnace", + 6, + MachineType.ARC_FURNACE.tooltipDescription(), + arcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.ArcFurnaceZPM.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_ZPM.ID, + "basicmachine.arcfurnace.tier.07", + "Elite Arc Furnace II", + 7, + MachineType.ARC_FURNACE.tooltipDescription(), + arcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.ArcFurnaceUV.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_UV.ID, + "basicmachine.arcfurnace.tier.08", + "Ultimate Short Circuit Heater", + 8, + MachineType.ARC_FURNACE.tooltipDescription(), + arcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.ArcFurnaceUHV.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_UHV.ID, + "basicmachine.arcfurnace.tier.09", + "Epic Short Circuit Heater", + 9, + MachineType.ARC_FURNACE.tooltipDescription(), + arcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.ArcFurnaceUEV.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_UEV.ID, + "basicmachine.arcfurnace.tier.10", + "Epic Short Circuit Heater II", + 10, + MachineType.ARC_FURNACE.tooltipDescription(), + arcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.ArcFurnaceUIV.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_UIV.ID, + "basicmachine.arcfurnace.tier.11", + "Epic Short Circuit Heater III", + 11, + MachineType.ARC_FURNACE.tooltipDescription(), + arcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.ArcFurnaceUMV.set( + new MTEBasicMachineWithRecipe( + ARC_FURNACE_UMV.ID, + "basicmachine.arcfurnace.tier.12", + "Epic Short Circuit Heater IV", + 12, + MachineType.ARC_FURNACE.tooltipDescription(), + arcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "ARC_FURNACE", + null).getStackForm(1L)); + + } + + private void registerCentrifuge() { + ItemList.Machine_LV_Centrifuge.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_LV.ID, + "basicmachine.centrifuge.tier.01", + "Basic Centrifuge", + 1, + MachineType.CENTRIFUGE.tooltipDescription(), + RecipeMaps.centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.Machine_MV_Centrifuge.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_MV.ID, + "basicmachine.centrifuge.tier.02", + "Advanced Centrifuge", + 2, + MachineType.CENTRIFUGE.tooltipDescription(), + RecipeMaps.centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.Machine_HV_Centrifuge.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_HV.ID, + "basicmachine.centrifuge.tier.03", + "Turbo Centrifuge", + 3, + MachineType.CENTRIFUGE.tooltipDescription(), + RecipeMaps.centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.Machine_EV_Centrifuge.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_EV.ID, + "basicmachine.centrifuge.tier.04", + "Molecular Separator", + 4, + MachineType.CENTRIFUGE.tooltipDescription(), + RecipeMaps.centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.Machine_IV_Centrifuge.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_IV.ID, + "basicmachine.centrifuge.tier.05", + "Molecular Cyclone", + 5, + MachineType.CENTRIFUGE.tooltipDescription(), + RecipeMaps.centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.CentrifugeLuV.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_LuV.ID, + "basicmachine.centrifuge.tier.06", + "Elite Centrifuge", + 6, + MachineType.CENTRIFUGE.tooltipDescription(), + centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.CentrifugeZPM.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_ZPM.ID, + "basicmachine.centrifuge.tier.07", + "Elite Centrifuge II", + 7, + MachineType.CENTRIFUGE.tooltipDescription(), + centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.CentrifugeUV.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_UV.ID, + "basicmachine.centrifuge.tier.08", + "Ultimate Molecular Tornado", + 8, + MachineType.CENTRIFUGE.tooltipDescription(), + centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.CentrifugeUHV.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_UHV.ID, + "basicmachine.centrifuge.tier.09", + "Epic Molecular Tornado", + 9, + MachineType.CENTRIFUGE.tooltipDescription(), + centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.CentrifugeUEV.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_UEV.ID, + "basicmachine.centrifuge.tier.10", + "Epic Molecular Tornado II", + 10, + MachineType.CENTRIFUGE.tooltipDescription(), + centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.CentrifugeUIV.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_UIV.ID, + "basicmachine.centrifuge.tier.11", + "Epic Molecular Tornado III", + 11, + MachineType.CENTRIFUGE.tooltipDescription(), + centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + ItemList.CentrifugeUMV.set( + new MTEBasicMachineWithRecipe( + CENTRIFUGE_UMV.ID, + "basicmachine.centrifuge.tier.12", + "Epic Molecular Tornado IV", + 12, + MachineType.CENTRIFUGE.tooltipDescription(), + centrifugeRecipes, + 2, + 6, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CENTRIFUGE", + null).getStackForm(1L)); + + } + + private void registerPlasmaArcFurnace() { + ItemList.Machine_LV_PlasmaArcFurnace.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_LV.ID, + "basicmachine.plasmaarcfurnace.tier.01", + "Basic Plasma Arc Furnace", + 1, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + RecipeMaps.plasmaArcFurnaceRecipes, + 1, + 4, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.Machine_MV_PlasmaArcFurnace.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_MV.ID, + "basicmachine.plasmaarcfurnace.tier.02", + "Advanced Plasma Arc Furnace", + 2, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + RecipeMaps.plasmaArcFurnaceRecipes, + 1, + 4, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.Machine_HV_PlasmaArcFurnace.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_HV.ID, + "basicmachine.plasmaarcfurnace.tier.03", + "Advanced Plasma Arc Furnace II", + 3, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + RecipeMaps.plasmaArcFurnaceRecipes, + 1, + 4, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.Machine_EV_PlasmaArcFurnace.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_EV.ID, + "basicmachine.plasmaarcfurnace.tier.04", + "Advanced Plasma Arc Furnace III", + 4, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + RecipeMaps.plasmaArcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.Machine_IV_PlasmaArcFurnace.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_IV.ID, + "basicmachine.plasmaarcfurnace.tier.05", + "Advanced Plasma Arc Furnace IV", + 5, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + RecipeMaps.plasmaArcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.PlasmaArcFurnaceLuV.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_LuV.ID, + "basicmachine.plasmaarcfurnace.tier.06", + "Elite Plasma Arc Furnace", + 6, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + plasmaArcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.PlasmaArcFurnaceZPM.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_ZPM.ID, + "basicmachine.plasmaarcfurnace.tier.07", + "Elite Plasma Arc Furnace II", + 7, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + plasmaArcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.PlasmaArcFurnaceUV.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_UV.ID, + "basicmachine.plasmaarcfurnace.tier.08", + "Ultimate Plasma Discharge Heater", + 8, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + plasmaArcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.PlasmaArcFurnaceUHV.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_UHV.ID, + "basicmachine.plasmaarcfurnace.tier.09", + "Epic Plasma Discharge Heater", + 9, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + plasmaArcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.PlasmaArcFurnaceUEV.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_UEV.ID, + "basicmachine.plasmaarcfurnace.tier.10", + "Epic Plasma Discharge Heater II", + 10, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + plasmaArcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.PlasmaArcFurnaceUIV.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_UIV.ID, + "basicmachine.plasmaarcfurnace.tier.11", + "Epic Plasma Discharge Heater III", + 11, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + plasmaArcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + + ItemList.PlasmaArcFurnaceUMV.set( + new MTEBasicMachineWithRecipe( + PLASMA_ARC_FURNACE_UMV.ID, + "basicmachine.plasmaarcfurnace.tier.12", + "Epic Plasma Discharge Heater IV", + 12, + MachineType.PLASMA_ARC_FURNACE.tooltipDescription(), + plasmaArcFurnaceRecipes, + 1, + 9, + true, + SoundResource.IC2_MACHINES_INDUCTION_LOOP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "PLASMA_ARC_FURNACE", + null).getStackForm(1L)); + } + + private void registerCanningMachine() { + ItemList.Machine_LV_Canner.set( + new MTEBasicMachineWithRecipe( + CANNER_LV.ID, + "basicmachine.canner.tier.01", + "Basic Canning Machine", + 1, + MachineType.CANNER.tooltipDescription(), + RecipeMaps.cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + + ItemList.Machine_MV_Canner.set( + new MTEBasicMachineWithRecipe( + CANNER_MV.ID, + "basicmachine.canner.tier.02", + "Advanced Canning Machine", + 2, + MachineType.CANNER.tooltipDescription(), + RecipeMaps.cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + + ItemList.Machine_HV_Canner.set( + new MTEBasicMachineWithRecipe( + CANNER_HV.ID, + "basicmachine.canner.tier.03", + "Advanced Canning Machine II", + 3, + MachineType.CANNER.tooltipDescription(), + RecipeMaps.cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + + ItemList.Machine_EV_Canner.set( + new MTEBasicMachineWithRecipe( + CANNER_EV.ID, + "basicmachine.canner.tier.04", + "Advanced Canning Machine III", + 4, + MachineType.CANNER.tooltipDescription(), + RecipeMaps.cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + + ItemList.Machine_IV_Canner.set( + new MTEBasicMachineWithRecipe( + CANNER_IV.ID, + "basicmachine.canner.tier.05", + "Advanced Canning Machine IV", + 5, + MachineType.CANNER.tooltipDescription(), + RecipeMaps.cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + + ItemList.CanningMachineLuV.set( + new MTEBasicMachineWithRecipe( + CANNING_MACHINE_LuV.ID, + "basicmachine.canner.tier.06", + "Elite Canning Machine", + 6, + MachineType.CANNER.tooltipDescription(), + cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + + ItemList.CanningMachineZPM.set( + new MTEBasicMachineWithRecipe( + CANNING_MACHINE_ZPM.ID, + "basicmachine.canner.tier.07", + "Elite Canning Machine II", + 7, + MachineType.CANNER.tooltipDescription(), + cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + + ItemList.CanningMachineUV.set( + new MTEBasicMachineWithRecipe( + CANNING_MACHINE_UV.ID, + "basicmachine.canner.tier.08", + "Ultimate Can Operator", + 8, + MachineType.CANNER.tooltipDescription(), + cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + + ItemList.CanningMachineUHV.set( + new MTEBasicMachineWithRecipe( + CANNING_MACHINE_UHV.ID, + "basicmachine.canner.tier.09", + "Epic Can Operator", + 9, + MachineType.CANNER.tooltipDescription(), + cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + + ItemList.CanningMachineUEV.set( + new MTEBasicMachineWithRecipe( + CANNING_MACHINE_UEV.ID, + "basicmachine.canner.tier.10", + "Epic Can Operator II", + 10, + MachineType.CANNER.tooltipDescription(), + cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + + ItemList.CanningMachineUIV.set( + new MTEBasicMachineWithRecipe( + CANNING_MACHINE_UIV.ID, + "basicmachine.canner.tier.11", + "Epic Can Operator III", + 11, + MachineType.CANNER.tooltipDescription(), + cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + + ItemList.CanningMachineUMV.set( + new MTEBasicMachineWithRecipe( + CANNING_MACHINE_UMV.ID, + "basicmachine.canner.tier.12", + "Epic Can Operator IV", + 12, + MachineType.CANNER.tooltipDescription(), + cannerRecipes, + 2, + 2, + false, + SoundResource.IC2_MACHINES_EXTRACTOR_OP, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CANNER", + null).getStackForm(1L)); + } + + private static void registerDynamoHatch() { + ItemList.Hatch_Dynamo_ULV.set( + new MTEHatchDynamo(DYNAMO_HATCH_ULV.ID, "hatch.dynamo.tier.00", "ULV Dynamo Hatch", 0).getStackForm(1L)); + ItemList.Hatch_Dynamo_LV + .set(new MTEHatchDynamo(DYNAMO_HATCH_LV.ID, "hatch.dynamo.tier.01", "LV Dynamo Hatch", 1).getStackForm(1L)); + ItemList.Hatch_Dynamo_MV + .set(new MTEHatchDynamo(DYNAMO_HATCH_MV.ID, "hatch.dynamo.tier.02", "MV Dynamo Hatch", 2).getStackForm(1L)); + ItemList.Hatch_Dynamo_HV + .set(new MTEHatchDynamo(DYNAMO_HATCH_HV.ID, "hatch.dynamo.tier.03", "HV Dynamo Hatch", 3).getStackForm(1L)); + ItemList.Hatch_Dynamo_EV + .set(new MTEHatchDynamo(DYNAMO_HATCH_EV.ID, "hatch.dynamo.tier.04", "EV Dynamo Hatch", 4).getStackForm(1L)); + ItemList.Hatch_Dynamo_IV + .set(new MTEHatchDynamo(DYNAMO_HATCH_IV.ID, "hatch.dynamo.tier.05", "IV Dynamo Hatch", 5).getStackForm(1L)); + ItemList.Hatch_Dynamo_LuV.set( + new MTEHatchDynamo(DYNAMO_HATCH_LuV.ID, "hatch.dynamo.tier.06", "LuV Dynamo Hatch", 6).getStackForm(1L)); + ItemList.Hatch_Dynamo_ZPM.set( + new MTEHatchDynamo(DYNAMO_HATCH_ZPM.ID, "hatch.dynamo.tier.07", "ZPM Dynamo Hatch", 7).getStackForm(1L)); + ItemList.Hatch_Dynamo_UV + .set(new MTEHatchDynamo(DYNAMO_HATCH_UV.ID, "hatch.dynamo.tier.08", "UV Dynamo Hatch", 8).getStackForm(1L)); + ItemList.Hatch_Dynamo_UHV.set( + new MTEHatchDynamo(DYNAMO_HATCH_UHV.ID, "hatch.dynamo.tier.09", "UHV Dynamo Hatch", 9).getStackForm(1L)); + ItemList.Hatch_Dynamo_UEV.set( + new MTEHatchDynamo(DYNAMO_HATCH_UEV.ID, "hatch.dynamo.tier.10", "UEV Dynamo Hatch", 10).getStackForm(1L)); + + ItemList.Hatch_Dynamo_UIV.set( + new MTEHatchDynamo(DYNAMO_HATCH_UIV.ID, "hatch.dynamo.tier.11", "UIV Dynamo Hatch", 11).getStackForm(1L)); + + ItemList.Hatch_Dynamo_UMV.set( + new MTEHatchDynamo(DYNAMO_HATCH_UMV.ID, "hatch.dynamo.tier.12", "UMV Dynamo Hatch", 12).getStackForm(1L)); + + ItemList.Hatch_Dynamo_UXV.set( + new MTEHatchDynamo(DYNAMO_HATCH_UXV.ID, "hatch.dynamo.tier.13", "UXV Dynamo Hatch", 13).getStackForm(1L)); + } + + private static void registerEnergyHatch() { + ItemList.Hatch_Energy_ULV.set( + new MTEHatchEnergy(ENERGY_HATCH_ULV.ID, "hatch.energy.tier.00", "ULV Energy Hatch", 0).getStackForm(1L)); + ItemList.Hatch_Energy_LV + .set(new MTEHatchEnergy(ENERGY_HATCH_LV.ID, "hatch.energy.tier.01", "LV Energy Hatch", 1).getStackForm(1L)); + ItemList.Hatch_Energy_MV + .set(new MTEHatchEnergy(ENERGY_HATCH_MV.ID, "hatch.energy.tier.02", "MV Energy Hatch", 2).getStackForm(1L)); + ItemList.Hatch_Energy_HV + .set(new MTEHatchEnergy(ENERGY_HATCH_HV.ID, "hatch.energy.tier.03", "HV Energy Hatch", 3).getStackForm(1L)); + ItemList.Hatch_Energy_EV + .set(new MTEHatchEnergy(ENERGY_HATCH_EV.ID, "hatch.energy.tier.04", "EV Energy Hatch", 4).getStackForm(1L)); + ItemList.Hatch_Energy_IV + .set(new MTEHatchEnergy(ENERGY_HATCH_IV.ID, "hatch.energy.tier.05", "IV Energy Hatch", 5).getStackForm(1L)); + ItemList.Hatch_Energy_LuV.set( + new MTEHatchEnergy(ENERGY_HATCH_LuV.ID, "hatch.energy.tier.06", "LuV Energy Hatch", 6).getStackForm(1L)); + ItemList.Hatch_Energy_ZPM.set( + new MTEHatchEnergy(ENERGY_HATCH_ZPM.ID, "hatch.energy.tier.07", "ZPM Energy Hatch", 7).getStackForm(1L)); + ItemList.Hatch_Energy_UV + .set(new MTEHatchEnergy(ENERGY_HATCH_UV.ID, "hatch.energy.tier.08", "UV Energy Hatch", 8).getStackForm(1L)); + ItemList.Hatch_Energy_UHV.set( + new MTEHatchEnergy(ENERGY_HATCH_UHV.ID, "hatch.energy.tier.09", "UHV Energy Hatch", 9).getStackForm(1L)); + ItemList.Hatch_Energy_UEV.set( + new MTEHatchEnergy(ENERGY_HATCH_UEV.ID, "hatch.energy.tier.10", "UEV Energy Hatch", 10).getStackForm(1L)); + + ItemList.Hatch_Energy_UIV.set( + new MTEHatchEnergy(ENERGY_HATCH_UIV.ID, "hatch.energy.tier.11", "UIV Energy Hatch", 11).getStackForm(1L)); + + ItemList.Hatch_Energy_UMV.set( + new MTEHatchEnergy(ENERGY_HATCH_UMV.ID, "hatch.energy.tier.12", "UMV Energy Hatch", 12).getStackForm(1L)); + + ItemList.Hatch_Energy_UXV.set( + new MTEHatchEnergy(ENERGY_HATCH_UXV.ID, "hatch.energy.tier.13", "UXV Energy Hatch", 13).getStackForm(1L)); + } + + private static void registerInputHatch() { + ItemList.Hatch_Input_ULV + .set(new MTEHatchInput(INPUT_HATCH_ULV.ID, "hatch.input.tier.00", "Input Hatch (ULV)", 0).getStackForm(1L)); + ItemList.Hatch_Input_LV + .set(new MTEHatchInput(INPUT_HATCH_LV.ID, "hatch.input.tier.01", "Input Hatch (LV)", 1).getStackForm(1L)); + ItemList.Hatch_Input_MV + .set(new MTEHatchInput(INPUT_HATCH_MV.ID, "hatch.input.tier.02", "Input Hatch (MV)", 2).getStackForm(1L)); + ItemList.Hatch_Input_HV + .set(new MTEHatchInput(INPUT_HATCH_HV.ID, "hatch.input.tier.03", "Input Hatch (HV)", 3).getStackForm(1L)); + ItemList.Hatch_Input_EV + .set(new MTEHatchInput(INPUT_HATCH_EV.ID, "hatch.input.tier.04", "Input Hatch (EV)", 4).getStackForm(1L)); + ItemList.Hatch_Input_IV + .set(new MTEHatchInput(INPUT_HATCH_IV.ID, "hatch.input.tier.05", "Input Hatch (IV)", 5).getStackForm(1L)); + ItemList.Hatch_Input_LuV + .set(new MTEHatchInput(INPUT_HATCH_LuV.ID, "hatch.input.tier.06", "Input Hatch (LuV)", 6).getStackForm(1L)); + ItemList.Hatch_Input_ZPM + .set(new MTEHatchInput(INPUT_HATCH_ZPM.ID, "hatch.input.tier.07", "Input Hatch (ZPM)", 7).getStackForm(1L)); + ItemList.Hatch_Input_UV + .set(new MTEHatchInput(INPUT_HATCH_UV.ID, "hatch.input.tier.08", "Input Hatch (UV)", 8).getStackForm(1L)); + ItemList.Hatch_Input_UHV + .set(new MTEHatchInput(INPUT_HATCH_UHV.ID, "hatch.input.tier.09", "Input Hatch (UHV)", 9).getStackForm(1L)); + ItemList.Hatch_Input_UEV.set( + new MTEHatchInput(INPUT_HATCH_UEV.ID, "hatch.input.tier.10", "Input Hatch (UEV)", 10).getStackForm(1L)); + ItemList.Hatch_Input_UIV.set( + new MTEHatchInput(INPUT_HATCH_UIV.ID, "hatch.input.tier.11", "Input Hatch (UIV)", 11).getStackForm(1L)); + ItemList.Hatch_Input_UMV.set( + new MTEHatchInput(INPUT_HATCH_UMV.ID, "hatch.input.tier.12", "Input Hatch (UMV)", 12).getStackForm(1L)); + ItemList.Hatch_Input_UXV.set( + new MTEHatchInput(INPUT_HATCH_UXV.ID, "hatch.input.tier.13", "Input Hatch (UXV)", 13).getStackForm(1L)); + ItemList.Hatch_Input_MAX.set( + new MTEHatchInput(INPUT_HATCH_MAX.ID, "hatch.input.tier.14", "Input Hatch (MAX)", 14).getStackForm(1L)); + } + + private static void registerQuadrupleInputHatch() { + ItemList.Hatch_Input_Multi_2x2_EV.set( + new MTEHatchMultiInput( + QUADRUPLE_INPUT_HATCHES_EV.ID, + 4, + "hatch.multi.input.tier.01", + "Quadruple Input Hatch (EV)", + 4).getStackForm(1L)); + ItemList.Hatch_Input_Multi_2x2_IV.set( + new MTEHatchMultiInput( + QUADRUPLE_INPUT_HATCHES_IV.ID, + 4, + "hatch.multi.input.tier.02", + "Quadruple Input Hatch (IV)", + 5).getStackForm(1L)); + ItemList.Hatch_Input_Multi_2x2_LuV.set( + new MTEHatchMultiInput( + QUADRUPLE_INPUT_HATCHES_LuV.ID, + 4, + "hatch.multi.input.tier.03", + "Quadruple Input Hatch (LuV)", + 6).getStackForm(1L)); + ItemList.Hatch_Input_Multi_2x2_ZPM.set( + new MTEHatchMultiInput( + QUADRUPLE_INPUT_HATCHES_ZPM.ID, + 4, + "hatch.multi.input.tier.04", + "Quadruple Input Hatch (ZPM)", + 7).getStackForm(1L)); + ItemList.Hatch_Input_Multi_2x2_UV.set( + new MTEHatchMultiInput( + QUADRUPLE_INPUT_HATCHES_UV.ID, + 4, + "hatch.multi.input.tier.05", + "Quadruple Input Hatch (UV)", + 8).getStackForm(1L)); + ItemList.Hatch_Input_Multi_2x2_UHV.set( + new MTEHatchMultiInput( + QUADRUPLE_INPUT_HATCHES_UHV.ID, + 4, + "hatch.multi.input.tier.06", + "Quadruple Input Hatch (UHV)", + 9).getStackForm(1L)); + ItemList.Hatch_Input_Multi_2x2_UEV.set( + new MTEHatchMultiInput( + QUADRUPLE_INPUT_HATCHES_UEV.ID, + 4, + "hatch.multi.input.tier.07", + "Quadruple Input Hatch (UEV)", + 10).getStackForm(1L)); + ItemList.Hatch_Input_Multi_2x2_UIV.set( + new MTEHatchMultiInput( + QUADRUPLE_INPUT_HATCHES_UIV.ID, + 4, + "hatch.multi.input.tier.08", + "Quadruple Input Hatch (UIV)", + 11).getStackForm(1L)); + ItemList.Hatch_Input_Multi_2x2_UMV.set( + new MTEHatchMultiInput( + QUADRUPLE_INPUT_HATCHES_UMV.ID, + 4, + "hatch.multi.input.tier.09", + "Quadruple Input Hatch (UMV)", + 12).getStackForm(1L)); + ItemList.Hatch_Input_Multi_2x2_UXV.set( + new MTEHatchMultiInput( + QUADRUPLE_INPUT_HATCHES_UXV.ID, + 4, + "hatch.multi.input.tier.10", + "Quadruple Input Hatch (UXV)", + 13).getStackForm(1L)); + + ItemList.Hatch_Input_Multi_2x2_Humongous.set( + new MTEHatchQuadrupleHumongous( + QUADRUPLE_INPUT_HATCHES_MAX.ID, + 4, + "hatch.multi.input.tier.11", + "Humongous Quadruple Input Hatch").getStackForm(1L)); + } + + private static void registerOutputHatch() { + ItemList.Hatch_Output_ULV.set( + new MTEHatchOutput(OUTPUT_HATCH_ULV.ID, "hatch.output.tier.00", "Output Hatch (ULV)", 0).getStackForm(1L)); + ItemList.Hatch_Output_LV.set( + new MTEHatchOutput(OUTPUT_HATCH_LV.ID, "hatch.output.tier.01", "Output Hatch (LV)", 1).getStackForm(1L)); + ItemList.Hatch_Output_MV.set( + new MTEHatchOutput(OUTPUT_HATCH_MV.ID, "hatch.output.tier.02", "Output Hatch (MV)", 2).getStackForm(1L)); + ItemList.Hatch_Output_HV.set( + new MTEHatchOutput(OUTPUT_HATCH_HV.ID, "hatch.output.tier.03", "Output Hatch (HV)", 3).getStackForm(1L)); + ItemList.Hatch_Output_EV.set( + new MTEHatchOutput(OUTPUT_HATCH_EV.ID, "hatch.output.tier.04", "Output Hatch (EV)", 4).getStackForm(1L)); + ItemList.Hatch_Output_IV.set( + new MTEHatchOutput(OUTPUT_HATCH_IV.ID, "hatch.output.tier.05", "Output Hatch (IV)", 5).getStackForm(1L)); + ItemList.Hatch_Output_LuV.set( + new MTEHatchOutput(OUTPUT_HATCH_LuV.ID, "hatch.output.tier.06", "Output Hatch (LuV)", 6).getStackForm(1L)); + ItemList.Hatch_Output_ZPM.set( + new MTEHatchOutput(OUTPUT_HATCH_ZPM.ID, "hatch.output.tier.07", "Output Hatch (ZPM)", 7).getStackForm(1L)); + ItemList.Hatch_Output_UV.set( + new MTEHatchOutput(OUTPUT_HATCH_UV.ID, "hatch.output.tier.08", "Output Hatch (UV)", 8).getStackForm(1L)); + ItemList.Hatch_Output_UHV.set( + new MTEHatchOutput(OUTPUT_HATCH_UHV.ID, "hatch.output.tier.09", "Output Hatch (UHV)", 9).getStackForm(1L)); + ItemList.Hatch_Output_UEV.set( + new MTEHatchOutput(OUTPUT_HATCH_UEV.ID, "hatch.output.tier.10", "Output Hatch (UEV)", 10).getStackForm(1L)); + ItemList.Hatch_Output_UIV.set( + new MTEHatchOutput(OUTPUT_HATCH_UIV.ID, "hatch.output.tier.11", "Output Hatch (UIV)", 11).getStackForm(1L)); + ItemList.Hatch_Output_UMV.set( + new MTEHatchOutput(OUTPUT_HATCH_UMV.ID, "hatch.output.tier.12", "Output Hatch (UMV)", 12).getStackForm(1L)); + ItemList.Hatch_Output_UXV.set( + new MTEHatchOutput(OUTPUT_HATCH_UXV.ID, "hatch.output.tier.13", "Output Hatch (UXV)", 13).getStackForm(1L)); + ItemList.Hatch_Output_MAX.set( + new MTEHatchOutput(OUTPUT_HATCH_MAX.ID, "hatch.output.tier.14", "Output Hatch (MAX)", 14).getStackForm(1L)); + } + + private static void registerQuantumTank() { + ItemList.Quantum_Tank_LV + .set(new MTEQuantumTank(QUANTUM_TANK_LV.ID, "quantum.tank.tier.06", "Quantum Tank I", 6).getStackForm(1L)); + ItemList.Quantum_Tank_MV + .set(new MTEQuantumTank(QUANTUM_TANK_MV.ID, "quantum.tank.tier.07", "Quantum Tank II", 7).getStackForm(1L)); + ItemList.Quantum_Tank_HV.set( + new MTEQuantumTank(QUANTUM_TANK_HV.ID, "quantum.tank.tier.08", "Quantum Tank III", 8).getStackForm(1L)); + ItemList.Quantum_Tank_EV + .set(new MTEQuantumTank(QUANTUM_TANK_EV.ID, "quantum.tank.tier.09", "Quantum Tank IV", 9).getStackForm(1L)); + ItemList.Quantum_Tank_IV + .set(new MTEQuantumTank(QUANTUM_TANK_IV.ID, "quantum.tank.tier.10", "Quantum Tank V", 10).getStackForm(1L)); + } + + private static void registerQuantumChest() { + ItemList.Quantum_Chest_LV.set( + new MTEQuantumChest(QUANTUM_CHEST_LV.ID, "quantum.chest.tier.06", "Quantum Chest I", 6).getStackForm(1L)); + ItemList.Quantum_Chest_MV.set( + new MTEQuantumChest(QUANTUM_CHEST_MV.ID, "quantum.chest.tier.07", "Quantum Chest II", 7).getStackForm(1L)); + ItemList.Quantum_Chest_HV.set( + new MTEQuantumChest(QUANTUM_CHEST_HV.ID, "quantum.chest.tier.08", "Quantum Chest III", 8).getStackForm(1L)); + ItemList.Quantum_Chest_EV.set( + new MTEQuantumChest(QUANTUM_CHEST_EV.ID, "quantum.chest.tier.09", "Quantum Chest IV", 9).getStackForm(1L)); + ItemList.Quantum_Chest_IV.set( + new MTEQuantumChest(QUANTUM_CHEST_IV.ID, "quantum.chest.tier.10", "Quantum Chest V", 10).getStackForm(1L)); + } + + private static void registerSuperTank() { + ItemList.Super_Tank_LV + .set(new MTESuperTank(SUPER_TANK_LV.ID, "super.tank.tier.01", "Super Tank I", 1).getStackForm(1L)); + ItemList.Super_Tank_MV + .set(new MTESuperTank(SUPER_TANK_MV.ID, "super.tank.tier.02", "Super Tank II", 2).getStackForm(1L)); + ItemList.Super_Tank_HV + .set(new MTESuperTank(SUPER_TANK_HV.ID, "super.tank.tier.03", "Super Tank III", 3).getStackForm(1L)); + ItemList.Super_Tank_EV + .set(new MTESuperTank(SUPER_TANK_EV.ID, "super.tank.tier.04", "Super Tank IV", 4).getStackForm(1L)); + ItemList.Super_Tank_IV + .set(new MTESuperTank(SUPER_TANK_IV.ID, "super.tank.tier.05", "Super Tank V", 5).getStackForm(1L)); + } + + private static void registerSuperChest() { + ItemList.Super_Chest_LV + .set(new MTESuperChest(SUPER_CHEST_LV.ID, "super.chest.tier.01", "Super Chest I", 1).getStackForm(1L)); + ItemList.Super_Chest_MV + .set(new MTESuperChest(SUPER_CHEST_MV.ID, "super.chest.tier.02", "Super Chest II", 2).getStackForm(1L)); + ItemList.Super_Chest_HV + .set(new MTESuperChest(SUPER_CHEST_HV.ID, "super.chest.tier.03", "Super Chest III", 3).getStackForm(1L)); + ItemList.Super_Chest_EV + .set(new MTESuperChest(SUPER_CHEST_EV.ID, "super.chest.tier.04", "Super Chest IV", 4).getStackForm(1L)); + ItemList.Super_Chest_IV + .set(new MTESuperChest(SUPER_CHEST_IV.ID, "super.chest.tier.05", "Super Chest V", 5).getStackForm(1L)); + } + + private static void registerLongDistancePipe() { + ItemList.Long_Distance_Pipeline_Fluid.set( + new MTELongDistancePipelineFluid( + LONG_DISTANCE_PIPELINE_FLUID.ID, + "long.distance.pipeline.fluid", + "Long Distance Fluid Pipeline", + 1).getStackForm(1L)); + ItemList.Long_Distance_Pipeline_Item.set( + new MTELongDistancePipelineItem( + LONG_DISTANCE_PIPELINE_ITEM.ID, + "long.distance.pipeline.item", + "Long Distance Item Pipeline", + 1).getStackForm(1L)); + } + + private static void registerAE2Hatches() { + ItemList.Hatch_Output_Bus_ME + .set(new MTEHatchOutputBusME(OUTPUT_BUS_ME.ID, "hatch.output_bus.me", "Output Bus (ME)").getStackForm(1L)); + ItemList.Hatch_Input_Bus_ME.set( + new MTEHatchInputBusME(INPUT_BUS_ME.ID, false, "hatch.input_bus.me.basic", "Stocking Input Bus (ME)") + .getStackForm(1L)); + ItemList.Hatch_Input_Bus_ME_Advanced.set( + new MTEHatchInputBusME( + INPUT_BUS_ME_ADVANCED.ID, + true, + "hatch.input_bus.me", + "Advanced Stocking Input Bus (ME)").getStackForm(1L)); + ItemList.Hatch_Input_ME.set( + new MTEHatchInputME(INPUT_HATCH_ME.ID, false, "hatch.input.me.basic", "Stocking Input Hatch (ME)") + .getStackForm(1L)); + ItemList.Hatch_Input_ME_Advanced.set( + new MTEHatchInputME( + INPUT_HATCH_ME_ADVANCED.ID, + true, + "hatch.input.me", + "Advanced Stocking Input Hatch (ME)").getStackForm(1L)); + ItemList.Hatch_Output_ME + .set(new MTEHatchOutputME(OUTPUT_HATCH_ME.ID, "hatch.output.me", "Output Hatch (ME)").getStackForm(1L)); + ItemList.Hatch_CraftingInput_Bus_ME.set( + new MTEHatchCraftingInputME( + CRAFTING_INPUT_ME.ID, + "hatch.crafting_input.me", + "Crafting Input Buffer (ME)", + true).getStackForm(1L)); + ItemList.Hatch_CraftingInput_Bus_ME_ItemOnly.set( + new MTEHatchCraftingInputME( + CRAFTING_INPUT_ME_BUS.ID, + "hatch.crafting_input.me.item_only", + "Crafting Input Bus (ME)", + false).getStackForm(1L)); + ItemList.Hatch_CraftingInput_Bus_Slave.set( + new MTEHatchCraftingInputSlave( + CRAFTING_INPUT_SLAVE.ID, + "hatch.crafting_input.proxy", + "Crafting Input Proxy").getStackForm(1L)); + } + + private static void registerMagHatch() { + ItemList.Hatch_Electromagnet + .set(new MTEHatchMagnet(MAG_HATCH.ID, "hatch.mag_hatch", "Electromagnet Housing").getStackForm(1L)); + } + + private static void registerInputBus() { + ItemList.Hatch_Input_Bus_ULV.set( + new MTEHatchInputBus(INPUT_BUS_ULV.ID, "hatch.input_bus.tier.00", "Input Bus (ULV)", 0).getStackForm(1L)); + ItemList.Hatch_Input_Bus_LV.set( + new MTEHatchInputBus(INPUT_BUS_LV.ID, "hatch.input_bus.tier.01", "Input Bus (LV)", 1).getStackForm(1L)); + ItemList.Hatch_Input_Bus_MV.set( + new MTEHatchInputBus(INPUT_BUS_MV.ID, "hatch.input_bus.tier.02", "Input Bus (MV)", 2).getStackForm(1L)); + ItemList.Hatch_Input_Bus_HV.set( + new MTEHatchInputBus(INPUT_BUS_HV.ID, "hatch.input_bus.tier.03", "Input Bus (HV)", 3).getStackForm(1L)); + ItemList.Hatch_Input_Bus_EV.set( + new MTEHatchInputBus(INPUT_BUS_EV.ID, "hatch.input_bus.tier.04", "Input Bus (EV)", 4).getStackForm(1L)); + ItemList.Hatch_Input_Bus_IV.set( + new MTEHatchInputBus(INPUT_BUS_IV.ID, "hatch.input_bus.tier.05", "Input Bus (IV)", 5).getStackForm(1L)); + ItemList.Hatch_Input_Bus_LuV.set( + new MTEHatchInputBus(INPUT_BUS_LuV.ID, "hatch.input_bus.tier.06", "Input Bus (LuV)", 6).getStackForm(1L)); + ItemList.Hatch_Input_Bus_ZPM.set( + new MTEHatchInputBus(INPUT_BUS_ZPM.ID, "hatch.input_bus.tier.07", "Input Bus (ZPM)", 7).getStackForm(1L)); + ItemList.Hatch_Input_Bus_UV.set( + new MTEHatchInputBus(INPUT_BUS_UV.ID, "hatch.input_bus.tier.08", "Input Bus (UV)", 8).getStackForm(1L)); + ItemList.Hatch_Input_Bus_MAX.set( + new MTEHatchInputBus(INPUT_BUS_UHV.ID, "hatch.input_bus.tier.09", "Input Bus (UHV)", 9).getStackForm(1L)); + } + + private static void registerOutputBus() { + ItemList.Hatch_Output_Bus_ULV.set( + new MTEHatchOutputBus(OUTPUT_BUS_ULV.ID, "hatch.output_bus.tier.00", "Output Bus (ULV)", 0) + .getStackForm(1L)); + ItemList.Hatch_Output_Bus_LV.set( + new MTEHatchOutputBus(OUTPUT_BUS_LV.ID, "hatch.output_bus.tier.01", "Output Bus (LV)", 1).getStackForm(1L)); + ItemList.Hatch_Output_Bus_MV.set( + new MTEHatchOutputBus(OUTPUT_BUS_MV.ID, "hatch.output_bus.tier.02", "Output Bus (MV)", 2).getStackForm(1L)); + ItemList.Hatch_Output_Bus_HV.set( + new MTEHatchOutputBus(OUTPUT_BUS_HV.ID, "hatch.output_bus.tier.03", "Output Bus (HV)", 3).getStackForm(1L)); + ItemList.Hatch_Output_Bus_EV.set( + new MTEHatchOutputBus(OUTPUT_BUS_EV.ID, "hatch.output_bus.tier.04", "Output Bus (EV)", 4).getStackForm(1L)); + ItemList.Hatch_Output_Bus_IV.set( + new MTEHatchOutputBus(OUTPUT_BUS_IV.ID, "hatch.output_bus.tier.05", "Output Bus (IV)", 5).getStackForm(1L)); + ItemList.Hatch_Output_Bus_LuV.set( + new MTEHatchOutputBus(OUTPUT_BUS_LuV.ID, "hatch.output_bus.tier.06", "Output Bus (LuV)", 6) + .getStackForm(1L)); + ItemList.Hatch_Output_Bus_ZPM.set( + new MTEHatchOutputBus(OUTPUT_BUS_ZPM.ID, "hatch.output_bus.tier.07", "Output Bus (ZPM)", 7) + .getStackForm(1L)); + ItemList.Hatch_Output_Bus_UV.set( + new MTEHatchOutputBus(OUTPUT_BUS_UV.ID, "hatch.output_bus.tier.08", "Output Bus (UV)", 8).getStackForm(1L)); + ItemList.Hatch_Output_Bus_MAX.set( + new MTEHatchOutputBus(OUTPUT_BUS_UHV.ID, "hatch.output_bus.tier.09", "Output Bus (UHV)", 9) + .getStackForm(1L)); + } + + private static void registerMufflerHatch() { + ItemList.Hatch_Muffler_LV.set( + new MTEHatchMuffler(MUFFLER_HATCH_LV.ID, "hatch.muffler.tier.01", "Muffler Hatch (LV)", 1) + .getStackForm(1L)); + ItemList.Hatch_Muffler_MV.set( + new MTEHatchMuffler(MUFFLER_HATCH_MV.ID, "hatch.muffler.tier.02", "Muffler Hatch (MV)", 2) + .getStackForm(1L)); + ItemList.Hatch_Muffler_HV.set( + new MTEHatchMuffler(MUFFLER_HATCH_HV.ID, "hatch.muffler.tier.03", "Muffler Hatch (HV)", 3) + .getStackForm(1L)); + ItemList.Hatch_Muffler_EV.set( + new MTEHatchMuffler(MUFFLER_HATCH_EV.ID, "hatch.muffler.tier.04", "Muffler Hatch (EV)", 4) + .getStackForm(1L)); + ItemList.Hatch_Muffler_IV.set( + new MTEHatchMuffler(MUFFLER_HATCH_IV.ID, "hatch.muffler.tier.05", "Muffler Hatch (IV)", 5) + .getStackForm(1L)); + ItemList.Hatch_Muffler_LuV.set( + new MTEHatchMuffler(MUFFLER_HATCH_LuV.ID, "hatch.muffler.tier.06", "Muffler Hatch (LuV)", 6) + .getStackForm(1L)); + ItemList.Hatch_Muffler_ZPM.set( + new MTEHatchMuffler(MUFFLER_HATCH_ZPM.ID, "hatch.muffler.tier.07", "Muffler Hatch (ZPM)", 7) + .getStackForm(1L)); + ItemList.Hatch_Muffler_UV.set( + new MTEHatchMuffler(MUFFLER_HATCH_UV.ID, "hatch.muffler.tier.08", "Muffler Hatch (UV)", 8) + .getStackForm(1L)); + ItemList.Hatch_Muffler_MAX.set( + new MTEHatchMuffler(MUFFLER_HATCH_UHV.ID, "hatch.muffler.tier.09", "Muffler Hatch (UHV)", 9) + .getStackForm(1L)); + } + + private static void registerBoiler() { + ItemList.Machine_Bronze_Boiler + .set(new MTEBoilerBronze(SMALL_COAL_BOILER.ID, "boiler.bronze", "Small Coal Boiler").getStackForm(1L)); + ItemList.Machine_Steel_Boiler.set( + new MTEBoilerSteel(HIGH_PRESSURE_COAL_BOILER.ID, "boiler.steel", "High Pressure Coal Boiler") + .getStackForm(1L)); + ItemList.Machine_Steel_Boiler_Lava.set( + new MTEBoilerLava(HIGH_PRESSURE_LAVA_BOILER.ID, "boiler.lava", "High Pressure Lava Boiler") + .getStackForm(1L)); + ItemList.Machine_Bronze_Boiler_Solar + .set(new MTEBoilerSolar(SIMPLE_SOLAR_BOILER.ID, "boiler.solar", "Simple Solar Boiler").getStackForm(1L)); + ItemList.Machine_HP_Solar.set( + new MTEBoilerSolarSteel(HIGH_PRESSURE_SOLAR_BOILER.ID, "boiler.steel.solar", "High Pressure Solar Boiler") + .getStackForm(1L)); + } + + private static void registerBatteryBuffer1x1() { + ItemList.Battery_Buffer_1by1_ULV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_ULV.ID, + "batterybuffer.01.tier.00", + "Ultra Low Voltage Battery Buffer", + 0, + "", + 1).getStackForm(1L)); + ItemList.Battery_Buffer_1by1_LV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_LV.ID, + "batterybuffer.01.tier.01", + "Low Voltage Battery Buffer", + 1, + "", + 1).getStackForm(1L)); + ItemList.Battery_Buffer_1by1_MV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_MV.ID, + "batterybuffer.01.tier.02", + "Medium Voltage Battery Buffer", + 2, + "", + 1).getStackForm(1L)); + ItemList.Battery_Buffer_1by1_HV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_HV.ID, + "batterybuffer.01.tier.03", + "High Voltage Battery Buffer", + 3, + "", + 1).getStackForm(1L)); + ItemList.Battery_Buffer_1by1_EV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_EV.ID, + "batterybuffer.01.tier.04", + "Extreme Voltage Battery Buffer", + 4, + "", + 1).getStackForm(1L)); + ItemList.Battery_Buffer_1by1_IV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_IV.ID, + "batterybuffer.01.tier.05", + "Insane Voltage Battery Buffer", + 5, + "", + 1).getStackForm(1L)); + ItemList.Battery_Buffer_1by1_LuV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_LuV.ID, + "batterybuffer.01.tier.06", + "Ludicrous Voltage Battery Buffer", + 6, + "", + 1).getStackForm(1L)); + ItemList.Battery_Buffer_1by1_ZPM.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_ZPM.ID, + "batterybuffer.01.tier.07", + "ZPM Voltage Battery Buffer", + 7, + "", + 1).getStackForm(1L)); + ItemList.Battery_Buffer_1by1_UV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_UV.ID, + "batterybuffer.01.tier.08", + "Ultimate Voltage Battery Buffer", + 8, + "", + 1).getStackForm(1L)); + ItemList.Battery_Buffer_1by1_UHV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_UHV.ID, + "batterybuffer.01.tier.09", + "Highly Ultimate Voltage Battery Buffer", + 9, + "", + 1).getStackForm(1L)); + + ItemList.Battery_Buffer_1by1_UEV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_UEV.ID, + "batterybuffer.01.tier.10", + "Extremely Ultimate Battery Buffer", + 10, + "", + 1).getStackForm(1L)); + + ItemList.Battery_Buffer_1by1_UIV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_UIV.ID, + "batterybuffer.01.tier.11", + "Insanely Ultimate Battery Buffer", + 11, + "", + 1).getStackForm(1L)); + + ItemList.Battery_Buffer_1by1_UMV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_UMV.ID, + "batterybuffer.01.tier.12", + "Mega Ultimate Battery Buffer", + 12, + "", + 1).getStackForm(1L)); + + ItemList.Battery_Buffer_1by1_UXV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_UXV.ID, + "batterybuffer.01.tier.13", + "Extended Mega Ultimate Battery Buffer", + 13, + "", + 1).getStackForm(1L)); + + ItemList.Battery_Buffer_1by1_MAXV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_1_BY_1_MAX.ID, + "batterybuffer.01.tier.14", + "Maximum Battery Buffer", + 14, + "", + 1).getStackForm(1L)); + } + + private static void registerBatteryBuffer2x2() { + ItemList.Battery_Buffer_2by2_ULV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_ULV.ID, + "batterybuffer.04.tier.00", + "Ultra Low Voltage Battery Buffer", + 0, + "", + 4).getStackForm(1L)); + ItemList.Battery_Buffer_2by2_LV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_LV.ID, + "batterybuffer.04.tier.01", + "Low Voltage Battery Buffer", + 1, + "", + 4).getStackForm(1L)); + ItemList.Battery_Buffer_2by2_MV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_MV.ID, + "batterybuffer.04.tier.02", + "Medium Voltage Battery Buffer", + 2, + "", + 4).getStackForm(1L)); + ItemList.Battery_Buffer_2by2_HV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_HV.ID, + "batterybuffer.04.tier.03", + "High Voltage Battery Buffer", + 3, + "", + 4).getStackForm(1L)); + ItemList.Battery_Buffer_2by2_EV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_EV.ID, + "batterybuffer.04.tier.04", + "Extreme Voltage Battery Buffer", + 4, + "", + 4).getStackForm(1L)); + ItemList.Battery_Buffer_2by2_IV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_IV.ID, + "batterybuffer.04.tier.05", + "Insane Voltage Battery Buffer", + 5, + "", + 4).getStackForm(1L)); + ItemList.Battery_Buffer_2by2_LuV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_LuV.ID, + "batterybuffer.04.tier.06", + "Ludicrous Voltage Battery Buffer", + 6, + "", + 4).getStackForm(1L)); + ItemList.Battery_Buffer_2by2_ZPM.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_ZPM.ID, + "batterybuffer.04.tier.07", + "ZPM Voltage Battery Buffer", + 7, + "", + 4).getStackForm(1L)); + ItemList.Battery_Buffer_2by2_UV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_UV.ID, + "batterybuffer.04.tier.08", + "Ultimate Voltage Battery Buffer", + 8, + "", + 4).getStackForm(1L)); + ItemList.Battery_Buffer_2by2_UHV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_UHV.ID, + "batterybuffer.04.tier.09", + "Highly Ultimate Voltage Battery Buffer", + 9, + "", + 4).getStackForm(1L)); + + ItemList.Battery_Buffer_2by2_UEV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_UEV.ID, + "batterybuffer.04.tier.10", + "Extremely Ultimate Battery Buffer", + 10, + "", + 4).getStackForm(1L)); + + ItemList.Battery_Buffer_2by2_UIV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_UIV.ID, + "batterybuffer.04.tier.11", + "Insanely Ultimate Battery Buffer", + 11, + "", + 4).getStackForm(1L)); + + ItemList.Battery_Buffer_2by2_UMV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_UMV.ID, + "batterybuffer.04.tier.12", + "Mega Ultimate Battery Buffer", + 12, + "", + 4).getStackForm(1L)); + + ItemList.Battery_Buffer_2by2_UXV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_UXV.ID, + "batterybuffer.04.tier.13", + "Extended Mega Ultimate Battery Buffer", + 13, + "", + 4).getStackForm(1L)); + + ItemList.Battery_Buffer_2by2_MAXV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_2_BY_2_MAX.ID, + "batterybuffer.04.tier.14", + "Maximum Battery Buffer", + 14, + "", + 4).getStackForm(1L)); + } + + private static void registerBatteryBuffer3x3() { + ItemList.Battery_Buffer_3by3_ULV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_ULV.ID, + "batterybuffer.09.tier.00", + "Ultra Low Voltage Battery Buffer", + 0, + "", + 9).getStackForm(1L)); + ItemList.Battery_Buffer_3by3_LV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_LV.ID, + "batterybuffer.09.tier.01", + "Low Voltage Battery Buffer", + 1, + "", + 9).getStackForm(1L)); + ItemList.Battery_Buffer_3by3_MV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_MV.ID, + "batterybuffer.09.tier.02", + "Medium Voltage Battery Buffer", + 2, + "", + 9).getStackForm(1L)); + ItemList.Battery_Buffer_3by3_HV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_HV.ID, + "batterybuffer.09.tier.03", + "High Voltage Battery Buffer", + 3, + "", + 9).getStackForm(1L)); + ItemList.Battery_Buffer_3by3_EV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_EV.ID, + "batterybuffer.09.tier.04", + "Extreme Voltage Battery Buffer", + 4, + "", + 9).getStackForm(1L)); + ItemList.Battery_Buffer_3by3_IV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_IV.ID, + "batterybuffer.09.tier.05", + "Insane Voltage Battery Buffer", + 5, + "", + 9).getStackForm(1L)); + ItemList.Battery_Buffer_3by3_LuV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_LuV.ID, + "batterybuffer.09.tier.06", + "Ludicrous Voltage Battery Buffer", + 6, + "", + 9).getStackForm(1L)); + ItemList.Battery_Buffer_3by3_ZPM.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_ZPM.ID, + "batterybuffer.09.tier.07", + "ZPM Voltage Battery Buffer", + 7, + "", + 9).getStackForm(1L)); + ItemList.Battery_Buffer_3by3_UV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_UV.ID, + "batterybuffer.09.tier.08", + "Ultimate Voltage Battery Buffer", + 8, + "", + 9).getStackForm(1L)); + ItemList.Battery_Buffer_3by3_UHV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_UHV.ID, + "batterybuffer.09.tier.09", + "Highly Ultimate Voltage Battery Buffer", + 9, + "", + 9).getStackForm(1L)); + + ItemList.Battery_Buffer_3by3_UEV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_UEV.ID, + "batterybuffer.09.tier.10", + "Extremely Ultimate Battery Buffer", + 10, + "", + 9).getStackForm(1L)); + + ItemList.Battery_Buffer_3by3_UIV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_UIV.ID, + "batterybuffer.09.tier.11", + "Insanely Ultimate Battery Buffer", + 11, + "", + 9).getStackForm(1L)); + + ItemList.Battery_Buffer_3by3_UMV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_UMV.ID, + "batterybuffer.09.tier.12", + "Mega Ultimate Battery Buffer", + 12, + "", + 9).getStackForm(1L)); + + ItemList.Battery_Buffer_3by3_UXV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_UXV.ID, + "batterybuffer.09.tier.13", + "Extended Mega Ultimate Battery Buffer", + 13, + "", + 9).getStackForm(1L)); + + ItemList.Battery_Buffer_3by3_MAXV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_3_BY_3_MAX.ID, + "batterybuffer.09.tier.14", + "Maximum Battery Buffer", + 14, + "", + 9).getStackForm(1L)); + } + + private static void registerBatteryBuffer4x4() { + ItemList.Battery_Buffer_4by4_ULV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_ULV.ID, + "batterybuffer.16.tier.00", + "Ultra Low Voltage Battery Buffer", + 0, + "", + 16).getStackForm(1L)); + ItemList.Battery_Buffer_4by4_LV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_LV.ID, + "batterybuffer.16.tier.01", + "Low Voltage Battery Buffer", + 1, + "", + 16).getStackForm(1L)); + ItemList.Battery_Buffer_4by4_MV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_MV.ID, + "batterybuffer.16.tier.02", + "Medium Voltage Battery Buffer", + 2, + "", + 16).getStackForm(1L)); + ItemList.Battery_Buffer_4by4_HV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_HV.ID, + "batterybuffer.16.tier.03", + "High Voltage Battery Buffer", + 3, + "", + 16).getStackForm(1L)); + ItemList.Battery_Buffer_4by4_EV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_EV.ID, + "batterybuffer.16.tier.04", + "Extreme Voltage Battery Buffer", + 4, + "", + 16).getStackForm(1L)); + ItemList.Battery_Buffer_4by4_IV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_IV.ID, + "batterybuffer.16.tier.05", + "Insane Voltage Battery Buffer", + 5, + "", + 16).getStackForm(1L)); + ItemList.Battery_Buffer_4by4_LuV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_LuV.ID, + "batterybuffer.16.tier.06", + "Ludicrous Voltage Battery Buffer", + 6, + "", + 16).getStackForm(1L)); + ItemList.Battery_Buffer_4by4_ZPM.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_ZPM.ID, + "batterybuffer.16.tier.07", + "ZPM Voltage Battery Buffer", + 7, + "", + 16).getStackForm(1L)); + ItemList.Battery_Buffer_4by4_UV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_UV.ID, + "batterybuffer.16.tier.08", + "Ultimate Voltage Battery Buffer", + 8, + "", + 16).getStackForm(1L)); + ItemList.Battery_Buffer_4by4_UHV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_UHV.ID, + "batterybuffer.16.tier.09", + "Highly Ultimate Voltage Battery Buffer", + 9, + "", + 16).getStackForm(1L)); + ItemList.Battery_Buffer_4by4_UEV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_UEV.ID, + "batterybuffer.16.tier.10", + "Extremely Ultimate Battery Buffer", + 10, + "", + 16).getStackForm(1L)); + + ItemList.Battery_Buffer_4by4_UIV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_UIV.ID, + "batterybuffer.16.tier.11", + "Insanely Ultimate Battery Buffer", + 11, + "", + 16).getStackForm(1L)); + + ItemList.Battery_Buffer_4by4_UMV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_UMV.ID, + "batterybuffer.16.tier.12", + "Mega Ultimate Battery Buffer", + 12, + "", + 16).getStackForm(1L)); + + ItemList.Battery_Buffer_4by4_UXV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_UXV.ID, + "batterybuffer.16.tier.13", + "Extended Mega Ultimate Battery Buffer", + 13, + "", + 16).getStackForm(1L)); + + ItemList.Battery_Buffer_4by4_MAXV.set( + new MTEBasicBatteryBuffer( + BATTERY_BUFFER_4_BY_4_MAX.ID, + "batterybuffer.16.tier.14", + "Maximum Battery Buffer", + 14, + "", + 16).getStackForm(1L)); + } + + private static void registerCharger4x4() { + ItemList.Battery_Charger_4by4_ULV.set( + new MTECharger( + BATTERY_CHARGER_4_BY_4_ULV.ID, + "batterycharger.16.tier.00", + "Ultra Low Voltage Battery Charger", + 0, + "Each battery gives 8A in/4A out (min 4A/2A)", + 4).getStackForm(1L)); + ItemList.Battery_Charger_4by4_LV.set( + new MTECharger( + BATTERY_CHARGER_4_BY_4_LV.ID, + "batterycharger.16.tier.01", + "Low Voltage Battery Charger", + 1, + "Each battery gives 8A in/4A out (min 4A/2A)", + 4).getStackForm(1L)); + ItemList.Battery_Charger_4by4_MV.set( + new MTECharger( + BATTERY_CHARGER_4_BY_4_MV.ID, + "batterycharger.16.tier.02", + "Medium Voltage Battery Charger", + 2, + "Each battery gives 8A in/4A out (min 4A/2A)", + 4).getStackForm(1L)); + ItemList.Battery_Charger_4by4_HV.set( + new MTECharger( + BATTERY_CHARGER_4_BY_4_HV.ID, + "batterycharger.16.tier.03", + "High Voltage Battery Charger", + 3, + "Each battery gives 8A in/4A out (min 4A/2A)", + 4).getStackForm(1L)); + ItemList.Battery_Charger_4by4_EV.set( + new MTECharger( + BATTERY_CHARGER_4_BY_4_EV.ID, + "batterycharger.16.tier.04", + "Extreme Voltage Battery Charger", + 4, + "Each battery gives 8A in/4A out (min 4A/2A)", + 4).getStackForm(1L)); + ItemList.Battery_Charger_4by4_IV.set( + new MTECharger( + BATTERY_CHARGER_4_BY_4_IV.ID, + "batterycharger.16.tier.05", + "Insane Voltage Battery Charger", + 5, + "Each battery gives 8A in/4A out (min 4A/2A)", + 4).getStackForm(1L)); + ItemList.Battery_Charger_4by4_LuV.set( + new MTECharger( + BATTERY_CHARGER_4_BY_4_LuV.ID, + "batterycharger.16.tier.06", + "Ludicrous Voltage Battery Charger", + 6, + "Each battery gives 8A in/4A out (min 4A/2A)", + 4).getStackForm(1L)); + ItemList.Battery_Charger_4by4_ZPM.set( + new MTECharger( + BATTERY_CHARGER_4_BY_4_ZPM.ID, + "batterycharger.16.tier.07", + "ZPM Voltage Battery Charger", + 7, + "Each battery gives 8A in/4A out (min 4A/2A)", + 4).getStackForm(1L)); + ItemList.Battery_Charger_4by4_UV.set( + new MTECharger( + BATTERY_CHARGER_4_BY_4_UV.ID, + "batterycharger.16.tier.08", + "Ultimate Voltage Battery Charger", + 8, + "Each battery gives 8A in/4A out (min 4A/2A)", + 4).getStackForm(1L)); + ItemList.Battery_Charger_4by4_UHV.set( + new MTECharger( + BATTERY_CHARGER_4_BY_4_UHV.ID, + "batterycharger.16.tier.09", + "Highly Ultimate Voltage Battery Charger", + 9, + "Each battery gives 8A in/4A out (min 4A/2A)", + 4).getStackForm(1L)); + + ItemList.Battery_Charger_4by4_UEV.set( + new MTECharger( + BATTERY_CHARGER_4_4_UEV.ID, + "batterycharger.16.tier.10", + "Extremely Ultimate Battery Charger", + 10, + "", + 4).getStackForm(1L)); + + ItemList.Battery_Charger_4by4_UIV.set( + new MTECharger( + BATTERY_CHARGER_4_4_UIV.ID, + "batterycharger.16.tier.11", + "Insanely Ultimate Battery Charger", + 11, + "", + 4).getStackForm(1L)); + + ItemList.Battery_Charger_4by4_UMV.set( + new MTECharger( + BATTERY_CHARGER_4_4_UMV.ID, + "batterycharger.16.tier.12", + "Mega Ultimate Battery Charger", + 12, + "", + 4).getStackForm(1L)); + + ItemList.Battery_Charger_4by4_UXV.set( + new MTECharger( + BATTERY_CHARGER_4_4_UXV.ID, + "batterycharger.16.tier.13", + "Extended Mega Ultimate Battery Charger", + 13, + "", + 4).getStackForm(1L)); + } + + private void registerCircuitAssembler() { + ItemList.Machine_LV_CircuitAssembler.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_LV.ID, + "basicmachine.circuitassembler.tier.01", + "Basic Circuit Assembler", + 1, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + RecipeMaps.circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.Machine_MV_CircuitAssembler.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_MV.ID, + "basicmachine.circuitassembler.tier.02", + "Advanced Circuit Assembler", + 2, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + RecipeMaps.circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.Machine_HV_CircuitAssembler.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_HV.ID, + "basicmachine.circuitassembler.tier.03", + "Advanced Circuit Assembler II", + 3, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + RecipeMaps.circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.Machine_EV_CircuitAssembler.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_EV.ID, + "basicmachine.circuitassembler.tier.04", + "Advanced Circuit Assembler III", + 4, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + RecipeMaps.circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.Machine_IV_CircuitAssembler.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_IV.ID, + "basicmachine.circuitassembler.tier.05", + "Advanced Circuit Assembler IV", + 5, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + RecipeMaps.circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.Machine_LuV_CircuitAssembler.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_LuV.ID, + "basicmachine.circuitassembler.tier.06", + "Advanced Circuit Assembler V", + 6, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + RecipeMaps.circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.Machine_ZPM_CircuitAssembler.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_ZPM.ID, + "basicmachine.circuitassembler.tier.07", + "Advanced Circuit Assembler VI", + 7, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + RecipeMaps.circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.Machine_UV_CircuitAssembler.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_UV.ID, + "basicmachine.circuitassembler.tier.08", + "Advanced Circuit Assembler VII", + 8, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + RecipeMaps.circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.CircuitAssemblerUHV.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_UHV.ID, + "basicmachine.circuitassembler.tier.09", + "Ultimate Circuit Assembling Machine", + 9, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.CircuitAssemblerUEV.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_UEV.ID, + "basicmachine.circuitassembler.tier.10", + "Ultimate Circuit Assembling Machine II", + 10, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.CircuitAssemblerUIV.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_UIV.ID, + "basicmachine.circuitassembler.tier.11", + "Ultimate Circuit Assembling Machine III", + 11, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.CircuitAssemblerUMV.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_UMV.ID, + "basicmachine.circuitassembler.tier.12", + "Ultimate Circuit Assembling Machine IV", + 12, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.CircuitAssemblerUXV.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_UXV.ID, + "basicmachine.circuitassembler.tier.13", + "Ultimate Circuit Assembling Machine V", + 13, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + + ItemList.CircuitAssemblerMAX.set( + new MTEBasicMachineWithRecipe( + CIRCUIT_ASSEMBLER_MAX.ID, + "basicmachine.circuitassembler.tier.14", + "MAX Circuit Assembling Machine", + 14, + MachineType.CIRCUIT_ASSEMBLER.tooltipDescription(), + circuitAssemblerRecipes, + 6, + 1, + true, + SoundResource.NONE, + MTEBasicMachineWithRecipe.SpecialEffects.NONE, + "CIRCUITASSEMBLER", + null).getStackForm(1L)); + } + + private void registerWetTransformer() { + ItemList.WetTransformer_LV_ULV.set( + new MTEWetTransformer( + WET_TRANSFORMER_LV_ULV.ID, + "wettransformer.tier.00", + "Ultra Low Voltage Power Transformer", + 0, + "LV -> ULV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_MV_LV.set( + new MTEWetTransformer( + WET_TRANSFORMER_MV_LV.ID, + "wetransformer.tier.01", + "Low Voltage Power Transformer", + 1, + "MV -> LV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_HV_MV.set( + new MTEWetTransformer( + WET_TRANSFORMER_HV_MV.ID, + "wettransformer.tier.02", + "Medium Voltage Power Transformer", + 2, + "HV -> MV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_EV_HV.set( + new MTEWetTransformer( + WET_TRANSFORMER_EV_HV.ID, + "wettransformer.tier.03", + "High Voltage Power Transformer", + 3, + "EV -> HV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_IV_EV.set( + new MTEWetTransformer( + WET_TRANSFORMER_IV_EV.ID, + "wettransformer.tier.04", + "Extreme Power Transformer", + 4, + "IV -> EV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_LuV_IV.set( + new MTEWetTransformer( + WET_TRANSFORMER_LuV_IV.ID, + "wettransformer.tier.05", + "Insane Power Transformer", + 5, + "LuV -> IV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_ZPM_LuV.set( + new MTEWetTransformer( + WET_TRANSFORMER_ZPM_LuV.ID, + "wettransformer.tier.06", + "Ludicrous Power Transformer", + 6, + "ZPM -> LuV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_UV_ZPM.set( + new MTEWetTransformer( + WET_TRANSFORMER_UV_ZPM.ID, + "wettransformer.tier.07", + "ZPM Voltage Power Transformer", + 7, + "UV -> ZPM (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_UHV_UV.set( + new MTEWetTransformer( + WET_TRANSFORMER_UHV_UV.ID, + "wettransformer.tier.08", + "Ultimate Power Transformer", + 8, + "UHV -> UV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_UEV_UHV.set( + new MTEWetTransformer( + WET_TRANSFORMER_UEV_UHV.ID, + "wettransformer.tier.09", + "Highly Ultimate Power Transformer", + 9, + "UEV -> UHV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_UIV_UEV.set( + new MTEWetTransformer( + WET_TRANSFORMER_UIV_UEV.ID, + "wettransformer.tier.10", + "Extremely Ultimate Power Transformer", + 10, + "UIV -> UEV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_UMV_UIV.set( + new MTEWetTransformer( + WET_TRANSFORMER_UMV_UIV.ID, + "wettransformer.tier.11", + "Insanely Ultimate Power Transformer", + 11, + "UMV -> UIV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_UXV_UMV.set( + new MTEWetTransformer( + WET_TRANSFORMER_UXV_UMV.ID, + "wettransformer.tier.12", + "Mega Ultimate Power Transformer", + 12, + "UXV -> UMV (Use Soft Mallet to invert)").getStackForm(1L)); + + ItemList.WetTransformer_MAX_UXV.set( + new MTEWetTransformer( + WET_TRANSFORMER_MAX_UXV.ID, + "wettransformer.tier.13", + "Extended Mega Ultimate Power Transformer", + 13, + "MAX -> UXV (Use Soft Mallet to invert)").getStackForm(1L)); + } + + private void registerHighAmpTransformer() { + ItemList.Transformer_HA_UEV_UHV.set( + new MTETransformerHiAmp( + HIGH_AMP_TRANSFORMER_UEV_UHV.ID, + "transformer.ha.tier.09", + "Highly Ultimate Hi-Amp Transformer", + 9, + "UEV -> UHV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_HA_UIV_UEV.set( + new MTETransformerHiAmp( + HIGH_AMP_TRANSFORMER_UIV_UEV.ID, + "transformer.ha.tier.10", + "Extremely Ultimate Hi-Amp Transformer", + 10, + "UIV -> UEV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_HA_UMV_UIV.set( + new MTETransformerHiAmp( + HIGH_AMP_TRANSFORMER_UMV_UIV.ID, + "transformer.ha.tier.11", + "Insanely Ultimate Hi-Amp Transformer", + 11, + "UMV -> UIV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_HA_UXV_UMV.set( + new MTETransformerHiAmp( + HIGH_AMP_TRANSFORMER_UXV_UMV.ID, + "transformer.ha.tier.12", + "Mega Ultimate Hi-Amp Transformer", + 12, + "UXV -> UMV (Use Soft Mallet to invert)").getStackForm(1L)); + ItemList.Transformer_HA_MAX_UXV.set( + new MTETransformerHiAmp( + HIGH_AMP_TRANSFORMER_MAX_UXV.ID, + "transformer.ha.tier.13", + "Extended Mega Ultimate Hi-Amp Transformer", + 13, + "MAX -> UXV (Use Soft Mallet to invert)").getStackForm(1L)); + + } + + private void registerTurboCharger4By4() { + ItemList.Battery_TurboCharger_4by4_ULV.set( + new MTETurboCharger( + TURBO_CHARGER_ULV.ID, + "batteryturbocharger.16.tier.00", + "Ultra Low Voltage Turbo Charger", + 0, + "64A in /16A out, 120A/item, Disable to force Charge", + 4).getStackForm(1L)); + + ItemList.Battery_TurboCharger_4by4_LV.set( + new MTETurboCharger( + TURBO_CHARGER_LV.ID, + "batteryturbocharger.16.tier.01", + "Low Voltage Turbo Charger", + 1, + "64A in /16A out, 120A/item, Disable to force Charge", + 4).getStackForm(1L)); + + ItemList.Battery_TurboCharger_4by4_MV.set( + new MTETurboCharger( + TURBO_CHARGER_MV.ID, + "batteryturbocharger.16.tier.02", + "Medium Voltage Turbo Charger", + 2, + "64A in /16A out, 120A/item, Disable to force Charge", + 4).getStackForm(1L)); + + ItemList.Battery_TurboCharger_4by4_HV.set( + new MTETurboCharger( + TURBO_CHARGER_HV.ID, + "batteryturbocharger.16.tier.03", + "High Voltage Turbo Charger", + 3, + "64A in /16A out, 120A/item, Disable to force Charge", + 4).getStackForm(1L)); + + ItemList.Battery_TurboCharger_4by4_EV.set( + new MTETurboCharger( + TURBO_CHARGER_EV.ID, + "batteryturbocharger.16.tier.04", + "Extreme Voltage Turbo Charger", + 4, + "64A in /16A out, 120A/item, Disable to force Charge", + 4).getStackForm(1L)); + + ItemList.Battery_TurboCharger_4by4_IV.set( + new MTETurboCharger( + TURBO_CHARGER_IV.ID, + "batteryturbocharger.16.tier.05", + "Insane Voltage Turbo Charger", + 5, + "64A in /16A out, 120A/item, Disable to force Charge", + 4).getStackForm(1L)); + + ItemList.Battery_TurboCharger_4by4_LuV.set( + new MTETurboCharger( + TURBO_CHARGER_LuV.ID, + "batteryturbocharger.16.tier.06", + "Ludicrous Voltage Turbo Charger", + 6, + "64A in /16A out, 120A/item, Disable to force Charge", + 4).getStackForm(1L)); + + ItemList.Battery_TurboCharger_4by4_ZPM.set( + new MTETurboCharger( + TURBO_CHARGER_ZPM.ID, + "batteryturbocharger.16.tier.07", + "ZPM Voltage Turbo Charger", + 7, + "64A in /16A out, 120A/item, Disable to force Charge", + 4).getStackForm(1L)); + + ItemList.Battery_TurboCharger_4by4_UV.set( + new MTETurboCharger( + TURBO_CHARGER_UV.ID, + "batteryturbocharger.16.tier.08", + "Ultimate Voltage Turbo Charger", + 8, + "64A in /16A out, 120A/item, Disable to force Charge", + 4).getStackForm(1L)); + + ItemList.Battery_TurboCharger_4by4_UHV.set( + new MTETurboCharger( + TURBO_CHARGER_UHV.ID, + "batteryturbocharger.16.tier.09", + "Highly Ultimate Voltage Turbo Charger", + 9, + "64A in /16A out, 120A/item, Disable to force Charge", + 4).getStackForm(1L)); + + } + + private static void registerWirelessEnergyHatch() { + ItemList.Wireless_Hatch_Energy_ULV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_ULV.ID, + "hatch.wireless.receiver.tier.00", + "ULV Wireless Energy Hatch", + 0).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_LV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_LV.ID, + "hatch.wireless.receiver.tier.01", + "LV Wireless Energy Hatch", + 1).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_MV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_MV.ID, + "hatch.wireless.receiver.tier.02", + "MV Wireless Energy Hatch", + 2).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_HV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_HV.ID, + "hatch.wireless.receiver.tier.03", + "HV Wireless Energy Hatch", + 3).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_EV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_EV.ID, + "hatch.wireless.receiver.tier.04", + "EV Wireless Energy Hatch", + 4).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_IV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_IV.ID, + "hatch.wireless.receiver.tier.05", + "IV Wireless Energy Hatch", + 5).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_LuV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_LuV.ID, + "hatch.wireless.receiver.tier.06", + "LuV Wireless Energy Hatch", + 6).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_ZPM.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_ZPM.ID, + "hatch.wireless.receiver.tier.07", + "ZPM Wireless Energy Hatch", + 7).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_UV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_UV.ID, + "hatch.wireless.receiver.tier.08", + "UV Wireless Energy Hatch", + 8).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_UHV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_UHV.ID, + "hatch.wireless.receiver.tier.09", + "UHV Wireless Energy Hatch", + 9).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_UEV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_UEV.ID, + "hatch.wireless.receiver.tier.10", + "UEV Wireless Energy Hatch", + 10).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_UIV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_UIV.ID, + "hatch.wireless.receiver.tier.11", + "UIV Wireless Energy Hatch", + 11).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_UMV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_UMV.ID, + "hatch.wireless.receiver.tier.12", + "UMV Wireless Energy Hatch", + 12).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_UXV.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_UXV.ID, + "hatch.wireless.receiver.tier.13", + "UXV Wireless Energy Hatch", + 13).getStackForm(1L)); + ItemList.Wireless_Hatch_Energy_MAX.set( + new MTEWirelessEnergy( + WIRELESS_HATCH_ENERGY_MAX.ID, + "hatch.wireless.receiver.tier.14", + "MAX Wireless Energy Hatch", + 14).getStackForm(1L)); + } + + private static void registerWirelessDynamoHatch() { + ItemList.Wireless_Dynamo_Energy_ULV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_ULV.ID, + "hatch.wireless.transmitter.tier.00", + "ULV Wireless Energy Dynamo", + 0).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_LV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_LV.ID, + "hatch.wireless.transmitter.tier.01", + "LV Wireless Energy Dynamo", + 1).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_MV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_MV.ID, + "hatch.wireless.transmitter.tier.02", + "MV Wireless Energy Dynamo", + 2).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_HV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_HV.ID, + "hatch.wireless.transmitter.tier.03", + "HV Wireless Energy Dynamo", + 3).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_EV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_EV.ID, + "hatch.wireless.transmitter.tier.04", + "EV Wireless Energy Dynamo", + 4).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_IV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_IV.ID, + "hatch.wireless.transmitter.tier.05", + "IV Wireless Energy Dynamo", + 5).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_LuV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_LuV.ID, + "hatch.wireless.transmitter.tier.06", + "LuV Wireless Energy Dynamo", + 6).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_ZPM.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_ZPM.ID, + "hatch.wireless.transmitter.tier.07", + "ZPM Wireless Energy Dynamo", + 7).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_UV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_UV.ID, + "hatch.wireless.transmitter.tier.08", + "UV Wireless Energy Dynamo", + 8).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_UHV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_UHV.ID, + "hatch.wireless.transmitter.tier.09", + "UHV Wireless Energy Dynamo", + 9).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_UEV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_UEV.ID, + "hatch.wireless.transmitter.tier.10", + "UEV Wireless Energy Dynamo", + 10).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_UIV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_UIV.ID, + "hatch.wireless.transmitter.tier.11", + "UIV Wireless Energy Dynamo", + 11).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_UMV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_UMV.ID, + "hatch.wireless.transmitter.tier.12", + "UMV Wireless Energy Dynamo", + 12).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_UXV.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_UXV.ID, + "hatch.wireless.transmitter.tier.13", + "UXV Wireless Energy Dynamo", + 13).getStackForm(1L)); + ItemList.Wireless_Dynamo_Energy_MAX.set( + new MTEWirelessDynamo( + WIRELESS_DYNAMO_ENERGY_HATCH_MAX.ID, + "hatch.wireless.transmitter.tier.14", + "MAX Wireless Energy Dynamo", + 14).getStackForm(1L)); + } + + private static void registerLightningRods() { + ItemList.Machine_HV_LightningRod.set( + new MTELightningRod(LIGHTNING_ROD_HV.ID, "basicgenerator.lightningrod.03", "Lightning Rod", 3) + .getStackForm(1)); + ItemList.Machine_EV_LightningRod.set( + new MTELightningRod(LIGHTNING_ROD_EV.ID, "basicgenerator.lightningrod.04", "Lightning Rod II", 4) + .getStackForm(1)); + ItemList.Machine_IV_LightningRod.set( + new MTELightningRod(LIGHTNING_ROD_IV.ID, "basicgenerator.lightningrod.05", "Lightning Rod III", 5) + .getStackForm(1)); + } + + private static void registerCombustionGenerators() { + ItemList.Generator_Diesel_LV.set( + new MTEDieselGenerator( + COMBUSTION_GENERATOR_LV.ID, + "basicgenerator.diesel.tier.01", + "Basic Combustion Generator", + 1).getStackForm(1L)); + ItemList.Generator_Diesel_MV.set( + new MTEDieselGenerator( + COMBUSTION_GENERATOR_MV.ID, + "basicgenerator.diesel.tier.02", + "Advanced Combustion Generator", + 2).getStackForm(1L)); + ItemList.Generator_Diesel_HV.set( + new MTEDieselGenerator( + COMBUSTION_GENERATOR_HV.ID, + "basicgenerator.diesel.tier.03", + "Turbo Combustion Generator", + 3).getStackForm(1L)); + } + + private static void registerGasTurbines() { + ItemList.Generator_Gas_Turbine_LV.set( + new MTEGasTurbine(GAS_TURBINE_LV.ID, "basicgenerator.gasturbine.tier.01", "Basic Gas Turbine", 1, 95) + .getStackForm(1L)); + ItemList.Generator_Gas_Turbine_MV.set( + new MTEGasTurbine(GAS_TURBINE_MV.ID, "basicgenerator.gasturbine.tier.02", "Advanced Gas Turbine", 2, 90) + .getStackForm(1L)); + ItemList.Generator_Gas_Turbine_HV.set( + new MTEGasTurbine(GAS_TURBINE_HV.ID, "basicgenerator.gasturbine.tier.03", "Turbo Gas Turbine", 3, 85) + .getStackForm(1L)); + ItemList.Generator_Gas_Turbine_EV.set( + new MTEGasTurbine(GAS_TURBINE_EV.ID, "basicgenerator.gasturbine.tier.04", "Turbo Gas Turbine II", 4, 60) + .getStackForm(1L)); + ItemList.Generator_Gas_Turbine_IV.set( + new MTEGasTurbine(GAS_TURBINE_IV.ID, "basicgenerator.gasturbine.tier.05", "Turbo Gas Turbine III", 5, 50) + .getStackForm(1L)); + } + + private static void registerSteamTurbines() { + ItemList.Generator_Steam_Turbine_LV.set( + new MTESteamTurbine(STEAM_TURBINE_LV.ID, "basicgenerator.steamturbine.tier.01", "Basic Steam Turbine", 1) + .getStackForm(1L)); + ItemList.Generator_Steam_Turbine_MV.set( + new MTESteamTurbine(STEAM_TURBINE_MV.ID, "basicgenerator.steamturbine.tier.02", "Advanced Steam Turbine", 2) + .getStackForm(1L)); + ItemList.Generator_Steam_Turbine_HV.set( + new MTESteamTurbine(STEAM_TURBINE_HV.ID, "basicgenerator.steamturbine.tier.03", "Turbo Steam Turbine", 3) + .getStackForm(1L)); + } + + private static void registerNaquadahReactors() { + ItemList.Generator_Naquadah_Mark_I.set( + new MTENaquadahReactor( + NAQUADAH_REACTOR_EV.ID, + "basicgenerator.naquadah.tier.04", + new String[] { "Requires Enriched Naquadah Bolts" }, + "Naquadah Reactor Mark I", + 4).getStackForm(1L)); + ItemList.Generator_Naquadah_Mark_II.set( + new MTENaquadahReactor( + NAQUADAH_REACTOR_IV.ID, + "basicgenerator.naquadah.tier.05", + new String[] { "Requires Enriched Naquadah Rods" }, + "Naquadah Reactor Mark II", + 5).getStackForm(1L)); + ItemList.Generator_Naquadah_Mark_III.set( + new MTENaquadahReactor( + NAQUADAH_REACTOR_LuV.ID, + "basicgenerator.naquadah.tier.06", + new String[] { "Requires Enriched Naquadah Long Rods" }, + "Naquadah Reactor Mark III", + 6).getStackForm(1L)); + ItemList.Generator_Naquadah_Mark_IV.set( + new MTENaquadahReactor( + NAQUADAH_REACTOR_ZPM.ID, + "basicgenerator.naquadah.tier.07", + new String[] { "Requires Naquadria Bolts" }, + "Naquadah Reactor Mark IV", + 7).getStackForm(1L)); + ItemList.Generator_Naquadah_Mark_V.set( + new MTENaquadahReactor( + NAQUADAH_REACTOR_UV.ID, + "basicgenerator.naquadah.tier.08", + new String[] { "Requires Naquadria Rods" }, + "Naquadah Reactor Mark V", + 8).getStackForm(1L)); + } + + private static void registerMagicEnergyConverters() { + ItemList.MagicEnergyConverter_LV.set( + new MTEMagicEnergyConverter( + MAGIC_ENERGY_CONVERTER_LV.ID, + "basicgenerator.magicenergyconverter.tier.01", + "Novice Magic Energy Converter", + 1).getStackForm(1L)); + ItemList.MagicEnergyConverter_MV.set( + new MTEMagicEnergyConverter( + MAGIC_ENERGY_CONVERTER_MV.ID, + "basicgenerator.magicenergyconverter.tier.02", + "Adept Magic Energy Converter", + 2).getStackForm(1L)); + ItemList.MagicEnergyConverter_HV.set( + new MTEMagicEnergyConverter( + MAGIC_ENERGY_CONVERTER_HV.ID, + "basicgenerator.magicenergyconverter.tier.03", + "Master Magic Energy Converter", + 3).getStackForm(1L)); + } + + private static void registerMagicEnergyAbsorbers() { + ItemList.MagicEnergyAbsorber_LV.set( + new MTEMagicalEnergyAbsorber( + MAGIC_ENERGY_ABSORBER_LV.ID, + "basicgenerator.magicenergyabsorber.tier.01", + "Novice Magic Energy Absorber", + 1).getStackForm(1L)); + ItemList.MagicEnergyAbsorber_MV.set( + new MTEMagicalEnergyAbsorber( + MAGIC_ENERGY_ABSORBER_MV.ID, + "basicgenerator.magicenergyabsorber.tier.02", + "Adept Magic Energy Absorber", + 2).getStackForm(1L)); + ItemList.MagicEnergyAbsorber_HV.set( + new MTEMagicalEnergyAbsorber( + MAGIC_ENERGY_ABSORBER_HV.ID, + "basicgenerator.magicenergyabsorber.tier.03", + "Master Magic Energy Absorber", + 3).getStackForm(1L)); + ItemList.MagicEnergyAbsorber_EV.set( + new MTEMagicalEnergyAbsorber( + MAGIC_ENERGY_ABSORBER_EV.ID, + "basicgenerator.magicenergyabsorber.tier.04", + "Grandmaster Magic Energy Absorber", + 4).getStackForm(1L)); + } + + private static void registerPlasmaGenerators() { + ItemList.Generator_Plasma_EV.set( + new MTEPlasmaGenerator( + PLASMA_GENERATOR_EV.ID, + "basicgenerator.plasmagenerator.tier.05", + "Plasma Generator Mark I", + 4).getStackForm(1L)); + ItemList.Generator_Plasma_IV.set( + new MTEPlasmaGenerator( + PLASMA_GENERATOR_IV.ID, + "basicgenerator.plasmagenerator.tier.06", + "Plasma Generator Mark II", + 5).getStackForm(1L)); + ItemList.Generator_Plasma_LuV.set( + new MTEPlasmaGenerator( + PLASMA_GENERATOR_LuV.ID, + "basicgenerator.plasmagenerator.tier.07", + "Plasma Generator Mark III", + 6).getStackForm(1L)); + + ItemList.Generator_Plasma_ZPMV.set( + new MTEPlasmaGenerator( + PLASMA_GENERATOR_ZPM.ID, + "basicgenerator.plasmagenerator.tier.08", + "Plasma Generator Mark IV", + 7).getStackForm(1L)); + + ItemList.Generator_Plasma_UV.set( + new MTEPlasmaGenerator( + PLASMA_GENERATOR_UV.ID, + "basicgenerator.plasmagenerator.tier.09", + "Ultimate Pocket Sun", + 8).getStackForm(1L)); + } + + private static void generateWiresAndPipes() { + for (int meta = 0; meta < GregTechAPI.sGeneratedMaterials.length; meta++) { + Materials material = GregTechAPI.sGeneratedMaterials[meta]; + // This check is separated out because IntelliJ thinks Materials.Wood can be null. + if (material == null) continue; + if ((material.mTypes & 0x2) != 0 || material == Materials.Wood) { + new MTEFrame( + 4096 + meta, + "GT_Frame_" + material, + (GTLanguageManager.i18nPlaceholder ? "%material" : material.mDefaultLocalName) + + " Frame Box (TileEntity)", + material); + + // Generate recipes for frame box + BlockFrameBox block = (BlockFrameBox) GregTechAPI.sBlockFrames; + GTOreDictUnificator.registerOre(OrePrefixes.frameGt, material, block.getStackForm(1, meta)); + if (material.getProcessingMaterialTierEU() < TierEU.IV) { + GTModHandler.addCraftingRecipe( + block.getStackForm(2, meta), + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "SSS", "SwS", "SSS", 'S', OrePrefixes.stick.get(material) }); + } + + if (!material.contains(SubTag.NO_RECIPES) + && GTOreDictUnificator.get(OrePrefixes.stick, material, 1) != null) { + // Auto generate frame box recipe in an assembler. + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.stick, material, 4), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(block.getStackForm(1, meta)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(calculateRecipeEU(material, 7)) + .addTo(assemblerRecipes); + } + } + } + + makeWires(Materials.RedAlloy, 2000, 0L, 1L, 1L, GTValues.V[0], true, false); + + makeWires(Materials.Cobalt, 1200, 2L, 4L, 2L, GTValues.V[1], true, false); + makeWires(Materials.Lead, 1220, 2L, 4L, 2L, GTValues.V[1], true, false); + makeWires(Materials.Tin, 1240, 1L, 2L, 1L, GTValues.V[1], true, false); + + makeWires(Materials.Zinc, 1260, 1L, 2L, 1L, GTValues.V[1], true, false); + makeWires(Materials.SolderingAlloy, 1280, 1L, 2L, 1L, GTValues.V[1], true, false); + + makeWires(Materials.Iron, 1300, 3L, 6L, 2L, GTValues.V[2], true, false); + makeWires(Materials.Nickel, 1320, 3L, 6L, 3L, GTValues.V[2], true, false); + makeWires(Materials.Cupronickel, 1340, 3L, 6L, 2L, GTValues.V[2], true, false); + makeWires(Materials.Copper, 1360, 2L, 4L, 1L, GTValues.V[2], true, false); + makeWires(Materials.AnnealedCopper, 1380, 2L, 4L, 1L, GTValues.V[2], true, false); + + makeWires(Materials.Kanthal, 1400, 3L, 6L, 4L, GTValues.V[3], true, false); + makeWires(Materials.Gold, 1420, 2L, 4L, 3L, GTValues.V[3], true, false); + makeWires(Materials.Electrum, 1440, 2L, 4L, 2L, GTValues.V[3], true, false); + makeWires(Materials.Silver, 1460, 1L, 2L, 1L, GTValues.V[3], true, false); + makeWires(Materials.BlueAlloy, 1480, 1L, 2L, 2L, GTValues.V[3], true, false); + + makeWires(Materials.Nichrome, 1500, 4L, 8L, 3L, GTValues.V[4], true, false); + makeWires(Materials.Steel, 1520, 2L, 4L, 2L, GTValues.V[4], true, false); + makeWires(Materials.BlackSteel, 1540, 2L, 4L, 3L, GTValues.V[4], true, false); + makeWires(Materials.Titanium, 1560, 2L, 4L, 4L, GTValues.V[4], true, false); + makeWires(Materials.Aluminium, 1580, 1L, 2L, 1L, GTValues.V[4], true, false); + + makeWires(Materials.Graphene, 1600, 1L, 2L, 1L, GTValues.V[5], false, true); + makeWires(Materials.Osmium, 1620, 2L, 4L, 4L, GTValues.V[5], true, false); + makeWires(Materials.Platinum, 1640, 1L, 2L, 2L, GTValues.V[5], true, false); + makeWires(Materials.TungstenSteel, 1660, 2L, 4L, 3L, GTValues.V[5], true, false); + makeWires(Materials.Tungsten, 1680, 2L, 4L, 2L, GTValues.V[5], true, false); + + makeWires(Materials.HSSG, 1700, 2L, 4L, 4L, GTValues.V[6], true, false); + makeWires(Materials.NiobiumTitanium, 1720, 2L, 4L, 4L, GTValues.V[6], true, false); + makeWires(Materials.VanadiumGallium, 1740, 2L, 4L, 4L, GTValues.V[6], true, false); + makeWires(Materials.YttriumBariumCuprate, 1760, 4L, 8L, 4L, GTValues.V[6], true, false); + + makeWires(Materials.Naquadah, 1780, 2L, 4L, 2L, GTValues.V[7], true, false); + + makeWires(Materials.NaquadahAlloy, 1800, 4L, 8L, 2L, GTValues.V[8], true, false); + makeWires(Materials.Duranium, 1820, 8L, 16L, 1L, GTValues.V[8], true, false); + makeWires(Materials.TPV, 1840, 1L, 2L, 6L, GTValues.V[4], true, false); + + // Superconductor base. + makeWires(Materials.Pentacadmiummagnesiumhexaoxid, 2200, 1L, 2L, 1L, GTValues.V[2], false, false); + makeWires(Materials.Titaniumonabariumdecacoppereikosaoxid, 2220, 1L, 8L, 2L, GTValues.V[3], false, false); + makeWires(Materials.Uraniumtriplatinid, 2240, 1L, 16L, 3L, GTValues.V[4], false, false); + makeWires(Materials.Vanadiumtriindinid, 2260, 1L, 64L, 4L, GTValues.V[5], false, false); + makeWires( + Materials.Tetraindiumditindibariumtitaniumheptacoppertetrakaidekaoxid, + 2280, + 2L, + 256L, + 6L, + GTValues.V[6], + false, + false); + makeWires(Materials.Tetranaquadahdiindiumhexaplatiumosminid, 2300, 2L, 1024L, 8L, GTValues.V[7], false, false); + makeWires(Materials.Longasssuperconductornameforuvwire, 2500, 2L, 4096L, 12L, GTValues.V[8], false, false); + makeWires(Materials.Longasssuperconductornameforuhvwire, 2520, 2L, 16384L, 16L, GTValues.V[9], false, false); + makeWires(Materials.SuperconductorUEVBase, 2032, 2L, 65536L, 24L, GTValues.V[10], false, false); + makeWires(Materials.SuperconductorUIVBase, 2052, 2L, 262144L, 32L, GTValues.V[11], false, false); + makeWires(Materials.SuperconductorUMVBase, 2072, 2L, 1048576L, 32L, GTValues.V[12], false, false); + + // Actual superconductors. + makeWires(Materials.SuperconductorMV, 2320, 0L, 0L, 4L, GTValues.V[2], false, true); + makeWires(Materials.SuperconductorHV, 2340, 0L, 0L, 6L, GTValues.V[3], false, true); + makeWires(Materials.SuperconductorEV, 2360, 0L, 0L, 8L, GTValues.V[4], false, true); + makeWires(Materials.SuperconductorIV, 2380, 0L, 0L, 12L, GTValues.V[5], false, true); + makeWires(Materials.SuperconductorLuV, 2400, 0L, 0L, 16L, GTValues.V[6], false, true); + makeWires(Materials.SuperconductorZPM, 2420, 0L, 0L, 24L, GTValues.V[7], false, true); + makeWires(Materials.SuperconductorUV, 2440, 0L, 0L, 32L, GTValues.V[8], false, true); + makeWires(Materials.SuperconductorUHV, 2020, 0L, 0L, 48L, GTValues.V[9], false, true); + makeWires(Materials.SuperconductorUEV, 2026, 0L, 0L, 64L, GTValues.V[10], false, true); + makeWires(Materials.SuperconductorUIV, 2081, 0L, 0L, 64L, GTValues.V[11], false, true); + makeWires(Materials.SuperconductorUMV, 2089, 0L, 0L, 64L, GTValues.V[12], false, true); + + makeWires(Materials.Ichorium, 2600, 2L, 2L, 12L, GTValues.V[9], false, true); + makeWires(MaterialsUEVplus.SpaceTime, 2606, 0L, 0L, 1_000_000L, GTValues.V[14], false, true); + + GTOreDictUnificator.registerOre( + OrePrefixes.pipeSmall.get(Materials.Wood), + new MTEFluid(5101, "GT_Pipe_Wood_Small", "Small Wooden Fluid Pipe", 0.375F, Materials.Wood, 10, 350, false) + .getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeMedium.get(Materials.Wood), + new MTEFluid(5102, "GT_Pipe_Wood", "Wooden Fluid Pipe", 0.5F, Materials.Wood, 30, 350, false) + .getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeLarge.get(Materials.Wood), + new MTEFluid(5103, "GT_Pipe_Wood_Large", "Large Wooden Fluid Pipe", 0.75F, Materials.Wood, 60, 350, false) + .getStackForm(1L)); + + generateFluidPipes(Materials.Copper, Materials.Copper.mName, 5110, 20, 1000, true); + generateFluidMultiPipes(Materials.Copper, Materials.Copper.mName, 5115, 20, 1000, true); + generateFluidPipes(Materials.Bronze, Materials.Bronze.mName, 5120, 120, 2000, true); + generateFluidMultiPipes(Materials.Bronze, Materials.Bronze.mName, 5125, 120, 2000, true); + generateFluidPipes(Materials.Steel, Materials.Steel.mName, 5130, 240, 2500, true); + generateFluidMultiPipes(Materials.Steel, Materials.Steel.mName, 5135, 240, 2500, true); + generateFluidPipes(Materials.StainlessSteel, Materials.StainlessSteel.mName, 5140, 360, 3000, true); + generateFluidMultiPipes(Materials.StainlessSteel, Materials.StainlessSteel.mName, 5145, 360, 3000, true); + generateFluidPipes(Materials.Titanium, Materials.Titanium.mName, 5150, 480, 5000, true); + generateFluidMultiPipes(Materials.Titanium, Materials.Titanium.mName, 5155, 480, 5000, true); + generateFluidPipes(Materials.TungstenSteel, Materials.TungstenSteel.mName, 5160, 600, 7500, true); + generateFluidMultiPipes(Materials.TungstenSteel, Materials.TungstenSteel.mName, 5270, 600, 7500, true); + generateFluidPipes( + Materials.Polybenzimidazole, + Materials.Polybenzimidazole.mName, + "PBI", + 5280, + 600, + 1000, + true); + generateFluidMultiPipes( + Materials.Polybenzimidazole, + Materials.Polybenzimidazole.mName, + "PBI", + 5290, + 600, + 1000, + true); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeSmall.get(Materials.Ultimate), + new MTEFluid( + 5165, + "GT_Pipe_HighPressure_Small", + "Small High Pressure Fluid Pipe", + 0.375F, + Materials.Redstone, + 4800, + 1500, + true).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeMedium.get(Materials.Ultimate), + new MTEFluid( + 5166, + "GT_Pipe_HighPressure", + "High Pressure Fluid Pipe", + 0.5F, + Materials.Redstone, + 7200, + 1500, + true).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeLarge.get(Materials.Ultimate), + new MTEFluid( + 5167, + "GT_Pipe_HighPressure_Large", + "Large High Pressure Fluid Pipe", + 0.75F, + Materials.Redstone, + 9600, + 1500, + true).getStackForm(1L)); + generateFluidPipes(Materials.Plastic, Materials.Plastic.mName, "Plastic", 5170, 360, 350, true); + generateFluidMultiPipes(Materials.Plastic, Materials.Plastic.mName, "Plastic", 5175, 360, 350, true); + generateFluidPipes(Materials.NiobiumTitanium, Materials.NiobiumTitanium.mName, 5180, 900, 2900, true); + generateFluidMultiPipes(Materials.NiobiumTitanium, Materials.NiobiumTitanium.mName, 5185, 900, 2900, true); + generateFluidPipes(Materials.Enderium, Materials.Enderium.mName, 5190, 1800, 15000, true); + generateFluidMultiPipes(Materials.Enderium, Materials.Enderium.mName, 5195, 1800, 15000, true); + generateFluidPipes(Materials.Naquadah, Materials.Naquadah.mName, 5200, 9000, 19000, true); + generateFluidMultiPipes(Materials.Naquadah, Materials.Naquadah.mName, 5205, 9000, 19000, true); + generateFluidPipes(Materials.Neutronium, Materials.Neutronium.mName, 5210, 16800, 1000000, true); + generateFluidMultiPipes(Materials.Neutronium, Materials.Neutronium.mName, 5215, 16800, 1000000, true); + generateFluidPipes(Materials.NetherStar, Materials.NetherStar.mName, 5220, 19200, 1000000, true); + generateFluidMultiPipes(Materials.NetherStar, Materials.NetherStar.mName, 5225, 19200, 1000000, true); + generateFluidPipes(Materials.MysteriousCrystal, Materials.MysteriousCrystal.mName, 5230, 24000, 1000000, true); + generateFluidMultiPipes( + Materials.MysteriousCrystal, + Materials.MysteriousCrystal.mName, + 5235, + 24000, + 1000000, + true); + generateFluidPipes(Materials.DraconiumAwakened, Materials.DraconiumAwakened.mName, 5240, 45000, 10000000, true); + generateFluidMultiPipes( + Materials.DraconiumAwakened, + Materials.DraconiumAwakened.mName, + 5245, + 45000, + 10000000, + true); + generateFluidPipes(Materials.Infinity, Materials.Infinity.mName, 5250, 60000, 10000000, true); + generateFluidMultiPipes(Materials.Infinity, Materials.Infinity.mName, 5255, 60000, 10000000, true); + generateFluidPipes(Materials.WroughtIron, Materials.WroughtIron.mName, 5260, 180, 2250, true); + generateFluidMultiPipes(Materials.WroughtIron, Materials.WroughtIron.mName, 5265, 180, 2250, true); + generateFluidPipes( + Materials.Polytetrafluoroethylene, + Materials.Polytetrafluoroethylene.mName, + "PTFE", + 5680, + 480, + 600, + true); + generateFluidMultiPipes( + Materials.Polytetrafluoroethylene, + Materials.Polytetrafluoroethylene.mName, + "PTFE", + 5685, + 480, + 600, + true); + generateFluidPipes( + MaterialsUEVplus.SpaceTime, + MaterialsUEVplus.SpaceTime.mName, + 5300, + 250000, + 2147483647, + true); + generateFluidMultiPipes( + MaterialsUEVplus.SpaceTime, + MaterialsUEVplus.SpaceTime.mName, + 5305, + 250000, + 2147483647, + true); + generateFluidPipes( + MaterialsUEVplus.TranscendentMetal, + MaterialsUEVplus.TranscendentMetal.mName, + 5310, + 220000, + 2147483647, + true); + generateFluidMultiPipes( + MaterialsUEVplus.TranscendentMetal, + MaterialsUEVplus.TranscendentMetal.mName, + 5315, + 220000, + 2147483647, + true); + + generateItemPipes(Materials.Brass, Materials.Brass.mName, 5602, 1); + generateItemPipes(Materials.Electrum, Materials.Electrum.mName, 5612, 2); + generateItemPipes(Materials.Platinum, Materials.Platinum.mName, 5622, 4); + generateItemPipes(Materials.Osmium, Materials.Osmium.mName, 5632, 8); + generateItemPipes(Materials.PolyvinylChloride, Materials.PolyvinylChloride.mName, "PVC", 5690, 4); + generateItemPipes(Materials.Nickel, Materials.Nickel.mName, 5700, 1); + generateItemPipes(Materials.Cobalt, Materials.Cobalt.mName, 5710, 2); + generateItemPipes(Materials.Aluminium, Materials.Aluminium.mName, 5720, 2); + if (NewHorizonsCoreMod.isModLoaded()) { + generateFluidPipes(Materials.get("RadoxPoly"), "RadoxPoly", 5760, 5000, 1500, true); + } + } + + @SuppressWarnings("PointlessArithmeticExpression") + private static void makeWires(Materials aMaterial, int aStartID, long aLossInsulated, long aLoss, long aAmperage, + long aVoltage, boolean aInsulatable, boolean aAutoInsulated) { + String name = GTLanguageManager.i18nPlaceholder ? "%material" : aMaterial.mDefaultLocalName; + GTOreDictUnificator.registerOre( + OrePrefixes.wireGt01, + aMaterial, + new MTECable( + aStartID + 0, + aTextWire1 + aMaterial.mName.toLowerCase() + ".01", + "1x " + name + aTextWire2, + 0.125F, + aMaterial, + aLoss, + 1L * aAmperage, + aVoltage, + false, + !aAutoInsulated).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.wireGt02, + aMaterial, + new MTECable( + aStartID + 1, + aTextWire1 + aMaterial.mName.toLowerCase() + ".02", + "2x " + name + aTextWire2, + 0.25F, + aMaterial, + aLoss, + 2L * aAmperage, + aVoltage, + false, + !aAutoInsulated).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.wireGt04, + aMaterial, + new MTECable( + aStartID + 2, + aTextWire1 + aMaterial.mName.toLowerCase() + ".04", + "4x " + name + aTextWire2, + 0.375F, + aMaterial, + aLoss, + 4L * aAmperage, + aVoltage, + false, + !aAutoInsulated).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.wireGt08, + aMaterial, + new MTECable( + aStartID + 3, + aTextWire1 + aMaterial.mName.toLowerCase() + ".08", + "8x " + name + aTextWire2, + 0.5F, + aMaterial, + aLoss, + 8L * aAmperage, + aVoltage, + false, + !aAutoInsulated).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.wireGt12, + aMaterial, + new MTECable( + aStartID + 4, + aTextWire1 + aMaterial.mName.toLowerCase() + ".12", + "12x " + name + aTextWire2, + 0.625F, + aMaterial, + aLoss, + 12L * aAmperage, + aVoltage, + false, + !aAutoInsulated).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.wireGt16, + aMaterial, + new MTECable( + aStartID + 5, + aTextWire1 + aMaterial.mName.toLowerCase() + ".16", + "16x " + name + aTextWire2, + 0.75F, + aMaterial, + aLoss, + 16L * aAmperage, + aVoltage, + false, + !aAutoInsulated).getStackForm(1L)); + if (aInsulatable) { + GTOreDictUnificator.registerOre( + OrePrefixes.cableGt01, + aMaterial, + new MTECable( + aStartID + 6, + aTextCable1 + aMaterial.mName.toLowerCase() + ".01", + "1x " + name + aTextCable2, + 0.25F, + aMaterial, + aLossInsulated, + 1L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.cableGt02, + aMaterial, + new MTECable( + aStartID + 7, + aTextCable1 + aMaterial.mName.toLowerCase() + ".02", + "2x " + name + aTextCable2, + 0.375F, + aMaterial, + aLossInsulated, + 2L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.cableGt04, + aMaterial, + new MTECable( + aStartID + 8, + aTextCable1 + aMaterial.mName.toLowerCase() + ".04", + "4x " + name + aTextCable2, + 0.5F, + aMaterial, + aLossInsulated, + 4L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.cableGt08, + aMaterial, + new MTECable( + aStartID + 9, + aTextCable1 + aMaterial.mName.toLowerCase() + ".08", + "8x " + name + aTextCable2, + 0.625F, + aMaterial, + aLossInsulated, + 8L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.cableGt12, + aMaterial, + new MTECable( + aStartID + 10, + aTextCable1 + aMaterial.mName.toLowerCase() + ".12", + "12x " + name + aTextCable2, + 0.75F, + aMaterial, + aLossInsulated, + 12L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.cableGt16, + aMaterial, + new MTECable( + aStartID + 11, + aTextCable1 + aMaterial.mName.toLowerCase() + ".16", + "16x " + name + aTextCable2, + 0.875F, + aMaterial, + aLossInsulated, + 16L * aAmperage, + aVoltage, + true, + false).getStackForm(1L)); + } + } + + @Override + public void run() { + GTLog.out.println("GTMod: Registering MetaTileEntities."); + registerMachineHull(); + registerTransformer(); + registerDynamoHatch(); + registerEnergyHatch(); + registerInputHatch(); + registerQuadrupleInputHatch(); + registerOutputHatch(); + registerQuantumTank(); + registerQuantumChest(); + registerSuperTank(); + registerSuperChest(); + registerLongDistancePipe(); + registerAE2Hatches(); + registerMagHatch(); + registerInputBus(); + registerOutputBus(); + registerMufflerHatch(); + registerBoiler(); + registerBatteryBuffer1x1(); + registerBatteryBuffer2x2(); + registerBatteryBuffer3x3(); + registerBatteryBuffer4x4(); + registerCharger4x4(); + registerWirelessEnergyHatch(); + registerWirelessDynamoHatch(); + registerSteamMachines(); + registerHPSteamMachines(); + registerLocker(); + registerScanner(); + registerPackager(); + registerRockBreaker(); + registerIndustrialApiary(); + registerMassFab(); + registerReplicator(); + registerBrewery(); + registerMiner(); + registerPump(); + registerTeleporter(); + registerMonsterRepellator(); + registerAdvancedSeismicProspector(); + registerMicrowaveEnergyTransmitter(); + registerChestBuffer(); + registerItemFilter(); + registerTypeFilter(); + registerRegulator(); + registerSuperBuffer(); + registerItemDistributor(); + registerRecipeFilter(); + registerLightningRods(); + registerCombustionGenerators(); + registerGasTurbines(); + registerSteamTurbines(); + registerNaquadahReactors(); + registerMagicEnergyAbsorbers(); + registerMagicEnergyConverters(); + registerPlasmaGenerators(); + registerMultiblockControllers(); + registerWorldAccelerator(); + registerAlloySmelter(); + registerMatterAmplifier(); + registerAssemblingMachine(); + registerWetTransformer(); + registerHighAmpTransformer(); + registerChemicalBath(); + registerChemicalReactor(); + registerFermenter(); + registerFluidCanner(); + registerFluidExtractor(); + registerFluidHeater(); + registerMixer(); + registerAutoclave(); + registerBendingMachine(); + registerCompressor(); + registerCuttingMachine(); + registerDistillery(); + registerElectricFurnace(); + registerElectromagneticSeparator(); + registerExtractor(); + registerExtruder(); + registerFluidSolidifier(); + registerFormingPress(); + registerForgeHammer(); + registerLathe(); + registerPrecisionLaserEngraver(); + registerMacerator(); + registerMatterFabricator(); + registerMicrowave(); + registerOreWashingPlant(); + registerPolarizer(); + registerRecycler(); + registerSiftingMachine(); + registerSlicingMachine(); + registerThermalCentrifuge(); + registerWiremill(); + registerArcFurnace(); + registerCentrifuge(); + registerPlasmaArcFurnace(); + registerCanningMachine(); + registerElectrolyzer(); + registerCircuitAssembler(); + registerTurboCharger4By4(); + registerBetterJukebox(); + registerUnpackager(); + registerPrinter(); + registerOven(); + + ItemList.AdvDebugStructureWriter.set( + new MTEAdvDebugStructureWriter( + ADVANCED_DEBUG_STRUCTURE_WRITTER.ID, + "advdebugstructurewriter", + "Advanced Debug Structure Writer", + 5).getStackForm(1L)); + ItemList.Hatch_Maintenance.set( + new MTEHatchMaintenance(MAINTENANCE_HATCH.ID, "hatch.maintenance", "Maintenance Hatch", 1) + .getStackForm(1L)); + ItemList.Hatch_AutoMaintenance.set( + new MTEHatchMaintenance( + AUTO_MAINTENANCE_HATCH.ID, + "hatch.maintenance.auto", + "Auto Maintenance Hatch", + 6, + true).getStackForm(1L)); + ItemList.Hatch_DroneDownLink.set( + new MTEHatchDroneDownLink(DroneDownLink.ID, "hatch.dronedownlink", "Drone DownLink Module", 5) + .getStackForm(1)); + ItemList.Hatch_DataAccess_EV.set( + new MTEHatchDataAccess(DATA_ACCESS_HATCH.ID, "hatch.dataaccess", "Data Access Hatch", 4).getStackForm(1L)); + ItemList.Hatch_DataAccess_LuV.set( + new MTEHatchDataAccess( + ADVANCED_DATA_ACCESS_HATCH.ID, + "hatch.dataaccess.adv", + "Advanced Data Access Hatch", + 6).getStackForm(1L)); + ItemList.Hatch_DataAccess_UV.set( + new MTEHatchDataAccess( + AUTOMATABLE_DATA_ACCESS_HATCH.ID, + "hatch.dataaccess.auto", + "Automatable Data Access Hatch", + 8).getStackForm(1L)); + ItemList.Hatch_HeatSensor + .set(new MTEHeatSensor(HEAT_DETECTOR_HATCH.ID, "hatch.heatsensor", "Heat Sensor Hatch", 7).getStackForm(1)); + ItemList.Hatch_pHSensor + .set(new MTEHatchPHSensor(HATCH_PH_SENSOR.ID, "hatch.phsensor", "pH Sensor Hatch", 7).getStackForm(1)); + ItemList.Hatch_LensHousing + .set(new MTEHatchLensHousing(HATCH_LENS_HOUSING.ID, "hatch.lenshousing", "Lens Housing").getStackForm(1L)); + ItemList.Hatch_LensIndicator.set( + new MTEHatchLensIndicator(HATCH_LENS_INDICATOR.ID, "hatch.lensindicator", "Lens Indicator Hatch", 8) + .getStackForm(1L)); + generateWiresAndPipes(); + } + + private static void generateItemPipes(Materials aMaterial, String name, int startID, int baseInvSlots) { + generateItemPipes( + aMaterial, + name, + GTLanguageManager.i18nPlaceholder ? "%material" : aMaterial.mDefaultLocalName, + startID, + baseInvSlots); + } + + private static void generateItemPipes(Materials aMaterial, String name, String displayName, int startID, + int baseInvSlots) { + GTOreDictUnificator.registerOre( + OrePrefixes.pipeMedium.get(aMaterial), + new MTEItem( + startID, + "GT_Pipe_" + name, + displayName + " Item Pipe", + 0.50F, + aMaterial, + baseInvSlots, + 32768 / baseInvSlots, + false).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeLarge.get(aMaterial), + new MTEItem( + startID + 1, + "GT_Pipe_" + name + "_Large", + "Large " + displayName + " Item Pipe", + 0.75F, + aMaterial, + baseInvSlots * 2, + 16384 / baseInvSlots, + false).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeHuge.get(aMaterial), + new MTEItem( + startID + 2, + "GT_Pipe_" + name + "_Huge", + "Huge " + displayName + " Item Pipe", + 1.00F, + aMaterial, + baseInvSlots * 4, + 8192 / baseInvSlots, + false).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeRestrictiveMedium.get(aMaterial), + new MTEItem( + startID + 3, + "GT_Pipe_Restrictive_" + name, + "Restrictive " + displayName + " Item Pipe", + 0.50F, + aMaterial, + baseInvSlots, + 3276800 / baseInvSlots, + true).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeRestrictiveLarge.get(aMaterial), + new MTEItem( + startID + 4, + "GT_Pipe_Restrictive_" + name + "_Large", + "Large Restrictive " + displayName + " Item Pipe", + 0.75F, + aMaterial, + baseInvSlots * 2, + 1638400 / baseInvSlots, + true).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeRestrictiveHuge.get(aMaterial), + new MTEItem( + startID + 5, + "GT_Pipe_Restrictive_" + name + "_Huge", + "Huge Restrictive " + displayName + " Item Pipe", + 0.875F, + aMaterial, + baseInvSlots * 4, + 819200 / baseInvSlots, + true).getStackForm(1L)); + } + + @SuppressWarnings("SameParameterValue") + private static void generateFluidPipes(Materials aMaterial, String name, int startID, int baseCapacity, + int heatCapacity, boolean gasProof) { + generateFluidPipes( + aMaterial, + name, + GTLanguageManager.i18nPlaceholder ? "%material" : aMaterial.mDefaultLocalName, + startID, + baseCapacity, + heatCapacity, + gasProof); + } + + private static void generateFluidPipes(Materials aMaterial, String name, String displayName, int startID, + int baseCapacity, int heatCapacity, boolean gasProof) { + GTOreDictUnificator.registerOre( + OrePrefixes.pipeTiny.get(aMaterial), + new MTEFluid( + startID, + "GT_Pipe_" + name + "_Tiny", + "Tiny " + displayName + " Fluid Pipe", + 0.25F, + aMaterial, + baseCapacity / 6, + heatCapacity, + gasProof).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeSmall.get(aMaterial), + new MTEFluid( + startID + 1, + "GT_Pipe_" + name + "_Small", + "Small " + displayName + " Fluid Pipe", + 0.375F, + aMaterial, + baseCapacity / 3, + heatCapacity, + gasProof).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeMedium.get(aMaterial), + new MTEFluid( + startID + 2, + "GT_Pipe_" + name, + displayName + " Fluid Pipe", + 0.5F, + aMaterial, + baseCapacity, + heatCapacity, + gasProof).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeLarge.get(aMaterial), + new MTEFluid( + startID + 3, + "GT_Pipe_" + name + "_Large", + "Large " + displayName + " Fluid Pipe", + 0.75F, + aMaterial, + baseCapacity * 2, + heatCapacity, + gasProof).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeHuge.get(aMaterial), + new MTEFluid( + startID + 4, + "GT_Pipe_" + name + "_Huge", + "Huge " + displayName + " Fluid Pipe", + 0.875F, + aMaterial, + baseCapacity * 4, + heatCapacity, + gasProof).getStackForm(1L)); + } + + @SuppressWarnings("SameParameterValue") + private static void generateFluidMultiPipes(Materials aMaterial, String name, int startID, int baseCapacity, + int heatCapacity, boolean gasProof) { + generateFluidMultiPipes(aMaterial, name, "%material", startID, baseCapacity, heatCapacity, gasProof); + } + + private static void generateFluidMultiPipes(Materials aMaterial, String name, String displayName, int startID, + int baseCapacity, int heatCapacity, boolean gasProof) { + GTOreDictUnificator.registerOre( + OrePrefixes.pipeQuadruple.get(aMaterial), + new MTEFluid( + startID, + "GT_Pipe_" + name + "_Quadruple", + "Quadruple " + displayName + " Fluid Pipe", + 1.0F, + aMaterial, + baseCapacity, + heatCapacity, + gasProof, + 4).getStackForm(1L)); + GTOreDictUnificator.registerOre( + OrePrefixes.pipeNonuple.get(aMaterial), + new MTEFluid( + startID + 1, + "GT_Pipe_" + name + "_Nonuple", + "Nonuple " + displayName + " Fluid Pipe", + 1.0F, + aMaterial, + baseCapacity / 3, + heatCapacity, + gasProof, + 9).getStackForm(1L)); + } +} diff --git a/src/main/java/gregtech/loaders/preload/LoaderOreProcessing.java b/src/main/java/gregtech/loaders/preload/LoaderOreProcessing.java new file mode 100644 index 0000000000..f38bbd6b76 --- /dev/null +++ b/src/main/java/gregtech/loaders/preload/LoaderOreProcessing.java @@ -0,0 +1,111 @@ +package gregtech.loaders.preload; + +import gregtech.api.util.GTLog; +import gregtech.loaders.oreprocessing.ProcessingAll; +import gregtech.loaders.oreprocessing.ProcessingBeans; +import gregtech.loaders.oreprocessing.ProcessingBlock; +import gregtech.loaders.oreprocessing.ProcessingBolt; +import gregtech.loaders.oreprocessing.ProcessingCell; +import gregtech.loaders.oreprocessing.ProcessingCircuit; +import gregtech.loaders.oreprocessing.ProcessingCompressed; +import gregtech.loaders.oreprocessing.ProcessingCrafting; +import gregtech.loaders.oreprocessing.ProcessingCrop; +import gregtech.loaders.oreprocessing.ProcessingCrushedOre; +import gregtech.loaders.oreprocessing.ProcessingCrystallized; +import gregtech.loaders.oreprocessing.ProcessingDirty; +import gregtech.loaders.oreprocessing.ProcessingDust; +import gregtech.loaders.oreprocessing.ProcessingDye; +import gregtech.loaders.oreprocessing.ProcessingFineWire; +import gregtech.loaders.oreprocessing.ProcessingFoil; +import gregtech.loaders.oreprocessing.ProcessingFood; +import gregtech.loaders.oreprocessing.ProcessingGear; +import gregtech.loaders.oreprocessing.ProcessingGem; +import gregtech.loaders.oreprocessing.ProcessingIngot; +import gregtech.loaders.oreprocessing.ProcessingItem; +import gregtech.loaders.oreprocessing.ProcessingLens; +import gregtech.loaders.oreprocessing.ProcessingLog; +import gregtech.loaders.oreprocessing.ProcessingNugget; +import gregtech.loaders.oreprocessing.ProcessingOre; +import gregtech.loaders.oreprocessing.ProcessingOrePoor; +import gregtech.loaders.oreprocessing.ProcessingOreSmelting; +import gregtech.loaders.oreprocessing.ProcessingPipe; +import gregtech.loaders.oreprocessing.ProcessingPlank; +import gregtech.loaders.oreprocessing.ProcessingPlate; +import gregtech.loaders.oreprocessing.ProcessingPure; +import gregtech.loaders.oreprocessing.ProcessingRawOre; +import gregtech.loaders.oreprocessing.ProcessingRecycling; +import gregtech.loaders.oreprocessing.ProcessingRotor; +import gregtech.loaders.oreprocessing.ProcessingRound; +import gregtech.loaders.oreprocessing.ProcessingSand; +import gregtech.loaders.oreprocessing.ProcessingSaplings; +import gregtech.loaders.oreprocessing.ProcessingScrew; +import gregtech.loaders.oreprocessing.ProcessingShaping; +import gregtech.loaders.oreprocessing.ProcessingSlab; +import gregtech.loaders.oreprocessing.ProcessingStick; +import gregtech.loaders.oreprocessing.ProcessingStickLong; +import gregtech.loaders.oreprocessing.ProcessingStone; +import gregtech.loaders.oreprocessing.ProcessingStoneCobble; +import gregtech.loaders.oreprocessing.ProcessingStoneVarious; +import gregtech.loaders.oreprocessing.ProcessingToolHead; +import gregtech.loaders.oreprocessing.ProcessingToolOther; +import gregtech.loaders.oreprocessing.ProcessingTransforming; +import gregtech.loaders.oreprocessing.ProcessingWax; +import gregtech.loaders.oreprocessing.ProcessingWire; + +public class LoaderOreProcessing implements Runnable { + + @Override + public void run() { + GTLog.out.println("GTMod: Register Ore processing."); + new ProcessingAll(); + new ProcessingBeans(); + new ProcessingBlock(); + new ProcessingBolt(); + new ProcessingCell(); + new ProcessingCircuit(); + new ProcessingCompressed(); + new ProcessingCrafting(); + new ProcessingCrop(); + new ProcessingCrushedOre(); + new ProcessingCrystallized(); + new ProcessingDirty(); + new ProcessingDust(); + new ProcessingDye(); + new ProcessingFoil(); + new ProcessingFineWire(); + new ProcessingFood(); + new ProcessingLens(); + new ProcessingShaping(); + new ProcessingGem(); + new ProcessingGear(); + new ProcessingIngot(); + new ProcessingItem(); + new ProcessingLog(); + new ProcessingTransforming(); + new ProcessingNugget(); + new ProcessingOre(); + new ProcessingOrePoor(); + new ProcessingOreSmelting(); + new ProcessingRawOre(); + new ProcessingPipe(); + new ProcessingPlank(); + new ProcessingPlate(); + new ProcessingPure(); + new ProcessingRecycling(); + new ProcessingRound(); + new ProcessingRotor(); + new ProcessingSand(); + new ProcessingSaplings(); + new ProcessingScrew(); + new ProcessingSlab(); + new ProcessingStick(); + new ProcessingStickLong(); + new ProcessingStone(); + new ProcessingStoneCobble(); + new ProcessingStoneVarious(); + new ProcessingToolHead(); + new ProcessingToolOther(); + new ProcessingWax(); + new ProcessingWire(); + } +} diff --git a/src/main/java/gregtech/mixin/Mixin.java b/src/main/java/gregtech/mixin/Mixin.java index 3e0ad23f0a..459b69865d 100644 --- a/src/main/java/gregtech/mixin/Mixin.java +++ b/src/main/java/gregtech/mixin/Mixin.java @@ -12,8 +12,7 @@ import java.util.function.Supplier; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import com.github.bartimaeusnek.bartworks.common.configs.ConfigHandler; - +import bartworks.common.configs.ConfigHandler; import cpw.mods.fml.relauncher.FMLLaunchHandler; public enum Mixin { diff --git a/src/main/java/gregtech/nei/GTNEIConfig.java b/src/main/java/gregtech/nei/GTNEIConfig.java new file mode 100644 index 0000000000..211f8251dc --- /dev/null +++ b/src/main/java/gregtech/nei/GTNEIConfig.java @@ -0,0 +1,183 @@ +package gregtech.nei; + +import java.util.Collection; +import java.util.Comparator; +import java.util.Map; + +import com.google.common.collect.ImmutableListMultimap; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ListMultimap; + +import codechicken.nei.api.API; +import codechicken.nei.api.IConfigureNEI; +import codechicken.nei.event.NEIRegisterHandlerInfosEvent; +import codechicken.nei.recipe.GuiCraftingRecipe; +import codechicken.nei.recipe.GuiUsageRecipe; +import codechicken.nei.recipe.HandlerInfo; +import codechicken.nei.recipe.TemplateRecipeHandler; +import cpw.mods.fml.common.event.FMLInterModComms; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.RecipeMapWorkable; +import gregtech.api.recipe.RecipeCategory; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTModHandler; +import gregtech.common.items.MetaGeneratedItem01; +import gregtech.common.items.MetaGeneratedItem02; +import gregtech.common.items.MetaGeneratedItem03; +import gregtech.nei.dumper.BatchModeSupportDumper; +import gregtech.nei.dumper.InputSeparationSupportDumper; +import gregtech.nei.dumper.MaterialDumper; +import gregtech.nei.dumper.MetaItemDumper; +import gregtech.nei.dumper.MetaTileEntityDumper; +import gregtech.nei.dumper.RecipeLockingSupportDumper; +import gregtech.nei.dumper.VoidProtectionSupportDumper; + +public class GTNEIConfig implements IConfigureNEI { + + /** + * This map determines the order in which NEI handlers will be registered and displayed in tabs. + * + *

+ * Handlers will be displayed in ascending order of integer value. Any recipe map that is not present in this map + * will be assigned a value of 0. Negative values are fine. + */ + private static final ImmutableMap, Integer> RECIPE_MAP_ORDERING = ImmutableMap + ., Integer>builder() + .put(RecipeMaps.assemblylineVisualRecipes, 1) + .put(RecipeMaps.scannerFakeRecipes, 2) + .build(); + + private static final Comparator RECIPE_MAP_HANDLER_COMPARATOR = Comparator + .comparingInt(handler -> RECIPE_MAP_ORDERING.getOrDefault(handler.getRecipeMap(), 0)); + + private static ListMultimap RECIPE_CATALYST_INDEX; + + public static boolean sIsAdded = true; + + private static void addHandler(TemplateRecipeHandler handler) { + FMLInterModComms.sendRuntimeMessage( + GTValues.GT, + "NEIPlugins", + "register-crafting-handler", + "gregtech@" + handler.getRecipeName() + "@" + handler.getOverlayIdentifier()); + GuiCraftingRecipe.craftinghandlers.add(handler); + GuiUsageRecipe.usagehandlers.add(handler); + } + + @Override + public void loadConfig() { + sIsAdded = false; + registerHandlers(); + registerCatalysts(); + registerItemEntries(); + registerDumpers(); + sIsAdded = true; + } + + private void registerHandlers() { + RecipeCategory.ALL_RECIPE_CATEGORIES.values() + .stream() + .filter( + recipeCategory -> recipeCategory.recipeMap.getFrontend() + .getNEIProperties().registerNEI) + .map(GTNEIDefaultHandler::new) + .sorted(RECIPE_MAP_HANDLER_COMPARATOR) + .forEach(GTNEIConfig::addHandler); + } + + private void registerCatalysts() { + for (Map.Entry> entry : RECIPE_CATALYST_INDEX.asMap() + .entrySet()) { + entry.getValue() + .forEach( + recipeMapWorkable -> API.addRecipeCatalyst( + recipeMapWorkable.getStackForm(1), + entry.getKey().unlocalizedName, + recipeMapWorkable.getRecipeCatalystPriority())); + } + API.addRecipeCatalyst( + GTModHandler.getIC2Item("nuclearReactor", 1, null), + RecipeMaps.ic2NuclearFakeRecipes.unlocalizedName); + } + + private void registerItemEntries() { + API.addItemListEntry(ItemList.VOLUMETRIC_FLASK.get(1)); + } + + private void registerDumpers() { + API.addOption(new MetaTileEntityDumper()); + API.addOption(new MaterialDumper()); + API.addOption(new MetaItemDumper(MetaGeneratedItem01.INSTANCE, "metaitem01")); + API.addOption(new MetaItemDumper(MetaGeneratedItem02.INSTANCE, "metaitem02")); + API.addOption(new MetaItemDumper(MetaGeneratedItem03.INSTANCE, "metaitem03")); + API.addOption(new VoidProtectionSupportDumper()); + API.addOption(new InputSeparationSupportDumper()); + API.addOption(new BatchModeSupportDumper()); + API.addOption(new RecipeLockingSupportDumper()); + } + + @SubscribeEvent + public void registerHandlerInfo(NEIRegisterHandlerInfosEvent event) { + if (RECIPE_CATALYST_INDEX == null) { + // This method will be called earlier than #loadConfig + generateRecipeCatalystIndex(); + } + RecipeCategory.ALL_RECIPE_CATEGORIES.values() + .forEach(recipeCategory -> { + HandlerInfo.Builder builder = createHandlerInfoBuilderTemplate(recipeCategory); + HandlerInfo handlerInfo; + if (recipeCategory.handlerInfoCreator != null) { + handlerInfo = recipeCategory.handlerInfoCreator.apply(builder) + .build(); + } else { + // Infer icon from recipe catalysts + RECIPE_CATALYST_INDEX.get(recipeCategory) + .stream() + .findFirst() + .ifPresent(catalyst -> builder.setDisplayStack(catalyst.getStackForm(1))); + handlerInfo = builder.build(); + } + event.registerHandlerInfo(handlerInfo); + }); + } + + private HandlerInfo.Builder createHandlerInfoBuilderTemplate(RecipeCategory recipeCategory) { + return new HandlerInfo.Builder( + recipeCategory.unlocalizedName, + recipeCategory.ownerMod.getName(), + recipeCategory.ownerMod.getModId()).setShiftY(6) + .setHeight(135) + .setMaxRecipesPerPage(2); + } + + private static void generateRecipeCatalystIndex() { + ImmutableListMultimap.Builder builder = new ImmutableListMultimap.Builder<>(); + builder + .orderValuesBy(Comparator.comparing(recipeMapWorkable -> -recipeMapWorkable.getRecipeCatalystPriority())); + for (int i = 1; i < GregTechAPI.METATILEENTITIES.length; i++) { + IMetaTileEntity mte = GregTechAPI.METATILEENTITIES[i]; + if (!(mte instanceof RecipeMapWorkable recipeMapWorkable)) continue; + for (RecipeMap recipeMap : recipeMapWorkable.getAvailableRecipeMaps()) { + for (RecipeCategory recipeCategory : recipeMap.getAssociatedCategories()) { + builder.put(recipeCategory, recipeMapWorkable); + } + } + } + RECIPE_CATALYST_INDEX = builder.build(); + } + + @Override + public String getName() { + return "GregTech NEI Plugin"; + } + + @Override + public String getVersion() { + return "(5.03a)"; + } +} diff --git a/src/main/java/gregtech/nei/GTNEIDefaultHandler.java b/src/main/java/gregtech/nei/GTNEIDefaultHandler.java new file mode 100644 index 0000000000..3887ad321b --- /dev/null +++ b/src/main/java/gregtech/nei/GTNEIDefaultHandler.java @@ -0,0 +1,801 @@ +package gregtech.nei; + +import static gregtech.api.enums.GTValues.V; + +import java.awt.Rectangle; +import java.lang.ref.SoftReference; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.Range; +import org.lwjgl.opengl.GL11; + +import com.gtnewhorizons.modularui.api.GlStateManager; +import com.gtnewhorizons.modularui.api.UIInfos; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import codechicken.nei.NEIClientUtils; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.GuiRecipe; +import codechicken.nei.recipe.ICraftingHandler; +import codechicken.nei.recipe.IUsageHandler; +import codechicken.nei.recipe.RecipeCatalysts; +import codechicken.nei.recipe.TemplateRecipeHandler; +import gregtech.GTMod; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SteamVariant; +import gregtech.api.gui.GUIColorOverride; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IOverclockDescriptionProvider; +import gregtech.api.objects.ItemData; +import gregtech.api.objects.overclockdescriber.EUNoOverclockDescriber; +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.recipe.BasicUIProperties; +import gregtech.api.recipe.NEIRecipeProperties; +import gregtech.api.recipe.RecipeCategory; +import gregtech.api.recipe.RecipeCategorySetting; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.blocks.ItemMachines; +import gregtech.common.gui.modularui.UIHelper; + +public class GTNEIDefaultHandler extends TemplateRecipeHandler { + + private static final int offsetX = 5; + private static final int offsetY = 11; + protected static final Pos2d WINDOW_OFFSET = new Pos2d(-offsetX, -offsetY); + + private static final ConcurrentMap CACHE = new ConcurrentHashMap<>(); + + private static final int RECIPE_NAME_WIDTH = 140; + + /** + * Static version of {@link TemplateRecipeHandler#cycleticks}. Can be referenced from cached recipes. + */ + private static int cycleTicksStatic = Math.abs((int) System.currentTimeMillis()); + /** + * Basically {@link #cycleTicksStatic} but always updated even while holding shift + */ + private static int drawTicks; + private static final int PROGRESSBAR_CYCLE_TICKS = 200; + + protected final RecipeCategory recipeCategory; + protected final RecipeMap recipeMap; + protected final RecipeMapFrontend frontend; + protected final BasicUIProperties uiProperties; + protected final NEIRecipeProperties neiProperties; + + protected final ModularWindow modularWindow; + protected final ItemStackHandler itemInputsInventory; + protected final ItemStackHandler itemOutputsInventory; + protected final ItemStackHandler specialSlotInventory; + protected final ItemStackHandler fluidInputsInventory; + protected final ItemStackHandler fluidOutputsInventory; + + protected OverclockDescriber overclockDescriber; + /** + * Localized name of this handler displayed on the top. + */ + private String recipeNameDisplay; + /** + * Tooltip shown while hovering over header of this handler. Can be null if the full name fits in the screen. + */ + private NEIHandlerAbsoluteTooltip recipeNameTooltip; + + protected final GUIColorOverride colorOverride = GUIColorOverride + .get(GTUITextures.BACKGROUND_NEI_SINGLE_RECIPE.location); + private int neiTextColorOverride = -1; + + public GTNEIDefaultHandler(RecipeCategory recipeCategory) { + this.recipeCategory = recipeCategory; + this.recipeMap = recipeCategory.recipeMap; + this.frontend = recipeMap.getFrontend(); + this.uiProperties = frontend.getUIProperties(); + this.neiProperties = frontend.getNEIProperties(); + uiProperties.neiTransferRect.forEach(transferRect -> { + transferRect = new Rectangle(transferRect); + transferRect.translate(WINDOW_OFFSET.x, WINDOW_OFFSET.y); + this.transferRects.add(new RecipeTransferRect(transferRect, recipeMap.unlocalizedName)); + }); + + ModularWindow.Builder builder = frontend.createNEITemplate( + itemInputsInventory = new ItemStackHandler(uiProperties.maxItemInputs), + itemOutputsInventory = new ItemStackHandler(uiProperties.maxItemOutputs), + specialSlotInventory = new ItemStackHandler(1), + fluidInputsInventory = new ItemStackHandler(uiProperties.maxFluidInputs), + fluidOutputsInventory = new ItemStackHandler(uiProperties.maxFluidOutputs), + () -> ((float) getDrawTicks() % PROGRESSBAR_CYCLE_TICKS) / PROGRESSBAR_CYCLE_TICKS, + WINDOW_OFFSET); + modularWindow = builder.build(); + UIInfos.initializeWindow(Minecraft.getMinecraft().thePlayer, modularWindow); + } + + public RecipeMap getRecipeMap() { + return recipeMap; + } + + private SortedRecipeListCache getCacheHolder() { + return CACHE.computeIfAbsent(recipeCategory, m -> new SortedRecipeListCache()); + } + + public List getCache() { + SortedRecipeListCache cacheHolder = getCacheHolder(); + List cache; + if (cacheHolder.getCachedRecipesVersion() != GTMod.gregtechproxy.getNEIReloadCount() + || (cache = cacheHolder.getCachedRecipes()) == null) { + try { + RecipeCategory defaultCategory = recipeMap.getDefaultRecipeCategory(); + Collection recipes; + if (this.recipeCategory == defaultCategory) { + // This is main category, so merge categories that are configured as such + Stream recipesToMerge = recipeMap.getBackend() + .getRecipeCategoryMap() + .entrySet() + .stream() + .flatMap(entry -> { + boolean merge = entry.getKey() != defaultCategory + && GTMod.gregtechproxy.recipeCategorySettings + .getOrDefault(entry.getKey(), RecipeCategorySetting.getDefault()) + == RecipeCategorySetting.MERGE; + return merge ? entry.getValue() + .stream() : Stream.empty(); + }); + recipes = Stream.concat( + recipesToMerge, + recipeMap.getBackend() + .getRecipesByCategory(defaultCategory) + .stream()) + .collect(Collectors.toList()); + } else { + // This is "sub" category + if (GTMod.gregtechproxy.recipeCategorySettings + .getOrDefault(recipeCategory, RecipeCategorySetting.getDefault()) + == RecipeCategorySetting.ENABLE) { + recipes = recipeMap.getBackend() + .getRecipesByCategory(recipeCategory); + } else { + recipes = Collections.emptyList(); + } + } + cache = recipes.stream() // do not use parallel stream. This is already parallelized by NEI + .filter(r -> !r.mHidden) + .sorted(neiProperties.comparator) + .map(CachedDefaultRecipe::new) + .collect(Collectors.toList()); + // while the NEI parallelize handlers, for each individual handler it still uses sequential execution + // model, + // so we do not need any synchronization here + // even if it does break, at worst case it's just recreating the cache multiple times, which should be + // fine + cacheHolder.setCachedRecipes(cache); + cacheHolder.setCachedRecipesVersion(GTMod.gregtechproxy.getNEIReloadCount()); + } catch (Exception e) { + throw new RuntimeException( + "Could not construct GT NEI Handler cache for category " + recipeCategory + + ", display name " + + recipeNameDisplay, + e); + } + } + return cache; + } + + @Override + public TemplateRecipeHandler newInstance() { + return new GTNEIDefaultHandler(recipeCategory); + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(recipeMap.unlocalizedName)) { + if (results.length > 0 && results[0] instanceof OverclockDescriber) { + overclockDescriber = (OverclockDescriber) results[0]; + if (neiProperties.useCustomFilter) { + loadTieredRecipesWithCustomFilter(overclockDescriber); + } else { + loadTieredRecipesUpTo(overclockDescriber.getTier()); + } + } else { + arecipes.addAll(getCache()); + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadCraftingRecipes(ItemStack aResult) { + ItemData tPrefixMaterial = GTOreDictUnificator.getAssociation(aResult); + + ArrayList tResults = new ArrayList<>(); + tResults.add(aResult); + tResults.add(GTOreDictUnificator.get(true, aResult)); + if ((tPrefixMaterial != null) && (!tPrefixMaterial.mBlackListed) + && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) { + for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) { + tResults.add(GTOreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L)); + } + } + if (aResult.getUnlocalizedName() + .startsWith("gt.blockores")) { + for (int i = 0; i < 8; i++) { + tResults.add(new ItemStack(aResult.getItem(), 1, aResult.getItemDamage() % 1000 + i * 1000)); + } + } + addFluidStacks(aResult, tResults); + for (CachedDefaultRecipe recipe : getCache()) { + if (tResults.stream() + .anyMatch(stack -> recipe.contains(recipe.mOutputs, stack))) arecipes.add(recipe); + } + } + + private void addFluidStacks(ItemStack aStack, ArrayList tResults) { + FluidStack tFluid = GTUtility.getFluidForFilledItem(aStack, true); + FluidStack tFluidStack; + if (tFluid != null) { + tFluidStack = tFluid; + tResults.add(GTUtility.getFluidDisplayStack(tFluid, false)); + } else tFluidStack = GTUtility.getFluidFromDisplayStack(aStack); + if (tFluidStack != null) { + tResults.addAll(GTUtility.getContainersFromFluid(tFluidStack)); + } + } + + private void loadTieredRecipesWithCustomFilter(OverclockDescriber overclockDescriber) { + arecipes.addAll(getTieredRecipesWithCustomFilter(overclockDescriber)); + } + + private List getTieredRecipesWithCustomFilter(OverclockDescriber overclockDescriber) { + List recipes = getCache(); + if (!recipes.isEmpty()) { + recipes = recipes.stream() + .filter(recipe -> overclockDescriber.canHandle(recipe.mRecipe)) + .collect(Collectors.toList()); + } + return recipes; + } + + private void loadTieredRecipesUpTo(byte upperTier) { + arecipes.addAll(getTieredRecipes(upperTier)); + } + + private List getTieredRecipes(byte upperTier) { + List recipes = getCache(); + if (!recipes.isEmpty()) { + Range indexRange = getCacheHolder().getIndexRangeForTiers((byte) 0, upperTier); + recipes = recipes.subList(indexRange.getMinimum(), indexRange.getMaximum() + 1); + } + return recipes; + } + + @Override + public void loadUsageRecipes(ItemStack aInput) { + ItemData tPrefixMaterial = GTOreDictUnificator.getAssociation(aInput); + ArrayList tInputs = new ArrayList<>(); + tInputs.add(aInput); + tInputs.add(GTOreDictUnificator.get(false, aInput)); + if ((tPrefixMaterial != null) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) { + for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) { + tInputs.add(GTOreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L)); + } + } + addFluidStacks(aInput, tInputs); + for (CachedDefaultRecipe recipe : getCache()) { + if (tInputs.stream() + .anyMatch(stack -> recipe.contains(recipe.mInputs, stack))) arecipes.add(recipe); + } + } + + @Override + public IUsageHandler getUsageAndCatalystHandler(String inputId, Object... ingredients) { + if (inputId.equals("item")) { + ItemStack candidate = (ItemStack) ingredients[0]; + GTNEIDefaultHandler handler = (GTNEIDefaultHandler) newInstance(); + if (RecipeCatalysts.containsCatalyst(handler, candidate)) { + IMetaTileEntity metaTile = ItemMachines.getMetaTileEntity(candidate); + OverclockDescriber overclockDescriber; + if (metaTile instanceof IOverclockDescriptionProvider provider) { + overclockDescriber = provider.getOverclockDescriber(); + } else { + overclockDescriber = null; + } + handler.loadCraftingRecipes(recipeMap.unlocalizedName, overclockDescriber); + return handler; + } + } + return this.getUsageHandler(inputId, ingredients); + } + + @Override + public ICraftingHandler getRecipeHandler(String outputId, Object... results) { + GTNEIDefaultHandler handler = (GTNEIDefaultHandler) super.getRecipeHandler(outputId, results); + if (results.length > 0 && results[0] instanceof OverclockDescriber) { + handler.overclockDescriber = (OverclockDescriber) results[0]; + } + return handler; + } + + @Override + public String getOverlayIdentifier() { + return recipeCategory.unlocalizedName; + } + + @Override + public void drawBackground(int recipe) { + drawUI(modularWindow); + } + + @Override + public void drawForeground(int recipe) { + GL11.glColor4f(1, 1, 1, 1); + GL11.glDisable(GL11.GL_LIGHTING); + drawExtras(recipe); + } + + @Override + public void onUpdate() { + super.onUpdate(); + if (!NEIClientUtils.shiftKey()) cycleTicksStatic++; + drawTicks++; + } + + @Override + public int recipiesPerPage() { + return 1; + } + + @Override + public String getRecipeName() { + if (recipeNameDisplay == null) { + recipeNameDisplay = computeRecipeName(); + neiTextColorOverride = colorOverride.getTextColorOrDefault("nei", -1); + } + return recipeNameDisplay; + } + + private String computeRecipeName() { + String recipeName = StatCollector.translateToLocal(recipeCategory.unlocalizedName); + if (overclockDescriber != null) { + String suffix = "(" + overclockDescriber.getTierString() + ")"; + // Space will be cropped if title exceeds + return shrinkRecipeName(recipeName + " ", suffix); + } else { + return shrinkRecipeName(recipeName, ""); + } + } + + private String shrinkRecipeName(final String originalRecipeName, final String suffix) { + FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; + int suffixWidth = fontRenderer.getStringWidth(suffix); + if (fontRenderer.getStringWidth(originalRecipeName) + suffixWidth <= RECIPE_NAME_WIDTH) { + return originalRecipeName + suffix; + } + + final String ellipsis = "..."; + final int ellipsisWidth = fontRenderer.getStringWidth(ellipsis); + String recipeName = originalRecipeName; + do { + recipeName = recipeName.substring(0, recipeName.length() - 1); + } while (fontRenderer.getStringWidth(recipeName) + ellipsisWidth + suffixWidth > RECIPE_NAME_WIDTH); + setupRecipeNameTooltip(originalRecipeName + suffix); + return recipeName + ellipsis + suffix; + } + + private void setupRecipeNameTooltip(String tooltip) { + recipeNameTooltip = new NEIHandlerAbsoluteTooltip(tooltip, new Rectangle(13, -34, RECIPE_NAME_WIDTH - 1, 11)); + } + + @Override + public String getRecipeTabName() { + return StatCollector.translateToLocal(recipeCategory.unlocalizedName); + } + + @Override + public String getGuiTexture() { + // not called + return ""; + } + + @Override + public List handleItemTooltip(GuiRecipe gui, ItemStack aStack, List currentTip, + int aRecipeIndex) { + if (recipeNameTooltip != null) { + recipeNameTooltip.handleTooltip(currentTip, aRecipeIndex); + } + if (aStack == null) { + return currentTip; + } + + CachedRecipe tObject = this.arecipes.get(aRecipeIndex); + if (tObject instanceof CachedDefaultRecipe) { + currentTip = frontend.handleNEIItemTooltip(aStack, currentTip, (CachedDefaultRecipe) tObject); + } + return currentTip; + } + + @Override + public void drawExtras(int aRecipeIndex) { + CachedDefaultRecipe cachedRecipe = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)); + + drawDescription(cachedRecipe); + frontend.drawNEIOverlays(cachedRecipe); + } + + private void drawDescription(CachedDefaultRecipe cachedRecipe) { + GTRecipe recipe = cachedRecipe.mRecipe; + if (overclockDescriber == null) { + // By default, assume generic LV EU with no overclocks + overclockDescriber = new EUNoOverclockDescriber((byte) 1, uiProperties.amperage); + } + + OverclockCalculator calculator = overclockDescriber.createCalculator( + new OverclockCalculator().setRecipeEUt(recipe.mEUt) + .setDuration(recipe.mDuration), + recipe); + calculator.calculate(); + + frontend.drawDescription( + new RecipeDisplayInfo( + recipe, + recipeMap, + overclockDescriber, + calculator, + getDescriptionYOffset(), + neiTextColorOverride)); + } + + protected int getDescriptionYOffset() { + return neiProperties.recipeBackgroundSize.height + neiProperties.recipeBackgroundOffset.y + WINDOW_OFFSET.y + 3; + } + + protected void drawUI(ModularWindow window) { + for (IDrawable background : window.getBackground()) { + GlStateManager.pushMatrix(); + GlStateManager.translate( + WINDOW_OFFSET.x + neiProperties.recipeBackgroundOffset.x, + WINDOW_OFFSET.y + neiProperties.recipeBackgroundOffset.y, + 0); + GlStateManager.color(1f, 1f, 1f, 1f); + background.draw(Pos2d.ZERO, window.getSize(), 0); + GlStateManager.popMatrix(); + } + + for (Widget widget : window.getChildren()) { + // NEI already did translation, so we can't use Widget#drawInternal here + GlStateManager.pushMatrix(); + GlStateManager.translate(widget.getPos().x, widget.getPos().y, 0); + GlStateManager.color(1, 1, 1, window.getAlpha()); + GlStateManager.enableBlend(); + + // maybe we can use Minecraft#timer but none of the IDrawables use partialTicks + widget.drawBackground(0); + + // noinspection OverrideOnly // It's either suppressing this warning or changing ModularUI + widget.draw(0); + GlStateManager.popMatrix(); + } + } + + public static int getDrawTicks() { + return drawTicks; + } + + public static class FixedPositionedStack extends PositionedStack { + + public static final DecimalFormat chanceFormat = new DecimalFormat("##0.##%"); + public final int mChance; + public final int realStackSize; + public final boolean renderRealStackSize; + + public FixedPositionedStack(Object object, boolean renderRealStackSizes, int x, int y) { + this(object, renderRealStackSizes, x, y, 0, true); + } + + public FixedPositionedStack(Object object, boolean renderRealStackSizes, int x, int y, boolean aUnificate) { + this(object, renderRealStackSizes, x, y, 0, aUnificate); + } + + public FixedPositionedStack(Object object, boolean renderRealStackSize, int x, int y, int aChance, + boolean aUnificate) { + super(aUnificate ? GTOreDictUnificator.getNonUnifiedStacks(object) : object, x, y, true); + this.mChance = aChance; + realStackSize = item != null ? item.stackSize : 0; + this.renderRealStackSize = renderRealStackSize; + if (!renderRealStackSize) { + for (ItemStack stack : items) { + stack.stackSize = 1; + } + } + } + + public boolean isChanceBased() { + return mChance > 0 && mChance < 10000; + } + + public String getChanceText() { + return chanceFormat.format((float) mChance / 10000); + } + + public boolean isNotConsumed() { + return !isFluid() && item.stackSize == 0; + } + + public boolean isFluid() { + return ItemList.Display_Fluid.isStackEqual(item, true, true); + } + } + + public class CachedDefaultRecipe extends TemplateRecipeHandler.CachedRecipe { + + public final GTRecipe mRecipe; + public final List mOutputs; + public final List mInputs; + + public CachedDefaultRecipe(GTRecipe aRecipe) { + super(); + this.mRecipe = aRecipe; + mOutputs = new ArrayList<>(); + mInputs = new ArrayList<>(); + + for (Widget child : modularWindow.getChildren()) { + if (child instanceof SlotWidget widget) { + if (widget.getMcSlot() + .getItemHandler() == itemInputsInventory) { + int i = widget.getMcSlot() + .getSlotIndex(); + Object input = aRecipe instanceof GTRecipe.GTRecipe_WithAlt + ? ((GTRecipe.GTRecipe_WithAlt) aRecipe).getAltRepresentativeInput(i) + : aRecipe.getRepresentativeInput(i); + if (input != null) { + mInputs.add( + new FixedPositionedStack( + input, + GTNEIDefaultHandler.this.neiProperties.renderRealStackSizes, + widget.getPos().x + 1, + widget.getPos().y + 1, + true)); + } + } else if (widget.getMcSlot() + .getItemHandler() == itemOutputsInventory) { + int i = widget.getMcSlot() + .getSlotIndex(); + ItemStack output = aRecipe.getRepresentativeOutput(i); + if (output != null) { + mOutputs.add( + new FixedPositionedStack( + output, + GTNEIDefaultHandler.this.neiProperties.renderRealStackSizes, + widget.getPos().x + 1, + widget.getPos().y + 1, + aRecipe.getOutputChance(i), + GTNEIDefaultHandler.this.neiProperties.unificateOutput)); + } + } else if (widget.getMcSlot() + .getItemHandler() == specialSlotInventory) { + if (aRecipe.mSpecialItems != null) { + mInputs.add( + new FixedPositionedStack( + aRecipe.mSpecialItems, + GTNEIDefaultHandler.this.neiProperties.renderRealStackSizes, + widget.getPos().x + 1, + widget.getPos().y + 1)); + } + + } else if (widget.getMcSlot() + .getItemHandler() == fluidInputsInventory) { + int i = widget.getMcSlot() + .getSlotIndex(); + if (aRecipe.mFluidInputs.length > i && aRecipe.mFluidInputs[i] != null + && aRecipe.mFluidInputs[i].getFluid() != null) { + mInputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(aRecipe.mFluidInputs[i], true), + GTNEIDefaultHandler.this.neiProperties.renderRealStackSizes, + widget.getPos().x + 1, + widget.getPos().y + 1)); + } + } else if (widget.getMcSlot() + .getItemHandler() == fluidOutputsInventory) { + int i = widget.getMcSlot() + .getSlotIndex(); + if (aRecipe.mFluidOutputs.length > i && aRecipe.mFluidOutputs[i] != null + && aRecipe.mFluidOutputs[i].getFluid() != null) { + mOutputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(aRecipe.mFluidOutputs[i], true), + GTNEIDefaultHandler.this.neiProperties.renderRealStackSizes, + widget.getPos().x + 1, + widget.getPos().y + 1)); + } + } + } + } + + // items and fluids that exceed usual count + UIHelper.forEachSlots((i, backgrounds, pos) -> { + if (i >= GTNEIDefaultHandler.this.uiProperties.maxItemInputs && aRecipe.mInputs[i] != null) { + mInputs.add( + new FixedPositionedStack( + aRecipe.mInputs[i], + GTNEIDefaultHandler.this.neiProperties.renderRealStackSizes, + pos.x + 1, + pos.y + 1, + true)); + } + }, (i, backgrounds, pos) -> { + if (i >= GTNEIDefaultHandler.this.uiProperties.maxItemOutputs && aRecipe.mOutputs[i] != null) { + mOutputs.add( + new FixedPositionedStack( + aRecipe.mOutputs[i], + GTNEIDefaultHandler.this.neiProperties.renderRealStackSizes, + pos.x + 1, + pos.y + 1, + aRecipe.getOutputChance(i), + GTNEIDefaultHandler.this.neiProperties.unificateOutput)); + } + }, (i, backgrounds, pos) -> {}, (i, backgrounds, pos) -> { + if (i >= GTNEIDefaultHandler.this.uiProperties.maxFluidInputs && aRecipe.mFluidInputs[i] != null + && aRecipe.mFluidInputs[i].getFluid() != null) { + mInputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(aRecipe.mFluidInputs[i], true), + GTNEIDefaultHandler.this.neiProperties.renderRealStackSizes, + pos.x + 1, + pos.y + 1)); + } + }, (i, backgrounds, pos) -> { + if (i >= GTNEIDefaultHandler.this.uiProperties.maxFluidOutputs && aRecipe.mFluidOutputs[i] != null + && aRecipe.mFluidOutputs[i].getFluid() != null) { + mOutputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(aRecipe.mFluidOutputs[i], true), + GTNEIDefaultHandler.this.neiProperties.renderRealStackSizes, + pos.x + 1, + pos.y + 1)); + } + }, + IDrawable.EMPTY, + IDrawable.EMPTY, + GTNEIDefaultHandler.this.frontend.getUIProperties(), + aRecipe.mInputs.length, + aRecipe.mOutputs.length, + aRecipe.mFluidInputs.length, + aRecipe.mFluidOutputs.length, + SteamVariant.NONE, + WINDOW_OFFSET); + } + + @Override + public List getIngredients() { + return getCycledIngredients(cycleTicksStatic / 10, this.mInputs); + } + + @Override + public PositionedStack getResult() { + return null; + } + + @Override + public List getOtherStacks() { + return this.mOutputs; + } + } + + private class SortedRecipeListCache { + + private int mCachedRecipesVersion = -1; + + @Nullable + private SoftReference> mCachedRecipes; + + private Map> mTierIndexes; + private Range mTierRange; + + public int getCachedRecipesVersion() { + return mCachedRecipesVersion; + } + + public void setCachedRecipesVersion(int aCachedRecipesVersion) { + this.mCachedRecipesVersion = aCachedRecipesVersion; + } + + @Nullable + public List getCachedRecipes() { + return mCachedRecipes == null ? null : mCachedRecipes.get(); + } + + public void setCachedRecipes(@Nonnull List aCachedRecipes) { + this.mCachedRecipes = new SoftReference<>(aCachedRecipes); + } + + public Range getIndexRangeForTiers(byte lowerTier, byte upperTier) { + if (mTierIndexes == null) { + computeTierIndexes(); + } + return Range.between(getLowIndexForTier(lowerTier), getHighIndexForTier(upperTier)); + } + + private void computeTierIndexes() { + // Holds 16 elements without rehashing + mTierIndexes = new HashMap<>(V.length + 1, 1f); + assert mCachedRecipes != null; + Iterator iterator = Objects.requireNonNull(mCachedRecipes.get()) + .iterator(); + + int index = 0; + int minIndex = 0; + int maxIndex = -1; + byte previousTier = -1; + byte lowestTier = 0; + while (iterator.hasNext()) { + CachedDefaultRecipe recipe = iterator.next(); + byte recipeTier = GTUtility + .getTier(recipe.mRecipe.mEUt / GTNEIDefaultHandler.this.recipeMap.getAmperage()); + if (recipeTier != previousTier) { + if (maxIndex != -1) { + mTierIndexes.put(previousTier, Range.between(minIndex, maxIndex)); + } else { + lowestTier = recipeTier; + } + minIndex = index; + previousTier = recipeTier; + } + maxIndex = index; + index++; + if (!iterator.hasNext()) { + mTierIndexes.put(recipeTier, Range.between(minIndex, maxIndex)); + mTierRange = Range.between(lowestTier, recipeTier); + } + } + } + + private int getLowIndexForTier(byte lowerTier) { + byte lowTier = (byte) Math.max(mTierRange.getMinimum(), lowerTier); + while (mTierIndexes.get(lowTier) == null) { + lowTier++; + } + return mTierIndexes.get(lowTier) + .getMinimum(); + } + + private int getHighIndexForTier(byte upperTier) { + byte highTier = (byte) Math.min(mTierRange.getMaximum(), upperTier); + while (mTierIndexes.get(highTier) == null) { + highTier--; + } + return mTierIndexes.get(highTier) + .getMaximum(); + } + } +} diff --git a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java b/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java deleted file mode 100644 index 99e7dc5459..0000000000 --- a/src/main/java/gregtech/nei/GT_NEI_DefaultHandler.java +++ /dev/null @@ -1,801 +0,0 @@ -package gregtech.nei; - -import static gregtech.api.enums.GT_Values.V; - -import java.awt.Rectangle; -import java.lang.ref.SoftReference; -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.Range; -import org.lwjgl.opengl.GL11; - -import com.gtnewhorizons.modularui.api.GlStateManager; -import com.gtnewhorizons.modularui.api.UIInfos; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import codechicken.nei.NEIClientUtils; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.GuiRecipe; -import codechicken.nei.recipe.ICraftingHandler; -import codechicken.nei.recipe.IUsageHandler; -import codechicken.nei.recipe.RecipeCatalysts; -import codechicken.nei.recipe.TemplateRecipeHandler; -import gregtech.GT_Mod; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SteamVariant; -import gregtech.api.gui.GT_GUIColorOverride; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IOverclockDescriptionProvider; -import gregtech.api.objects.ItemData; -import gregtech.api.objects.overclockdescriber.EUNoOverclockDescriber; -import gregtech.api.objects.overclockdescriber.OverclockDescriber; -import gregtech.api.recipe.BasicUIProperties; -import gregtech.api.recipe.NEIRecipeProperties; -import gregtech.api.recipe.RecipeCategory; -import gregtech.api.recipe.RecipeCategorySetting; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Item_Machines; -import gregtech.common.gui.modularui.UIHelper; - -public class GT_NEI_DefaultHandler extends TemplateRecipeHandler { - - private static final int offsetX = 5; - private static final int offsetY = 11; - protected static final Pos2d WINDOW_OFFSET = new Pos2d(-offsetX, -offsetY); - - private static final ConcurrentMap CACHE = new ConcurrentHashMap<>(); - - private static final int RECIPE_NAME_WIDTH = 140; - - /** - * Static version of {@link TemplateRecipeHandler#cycleticks}. Can be referenced from cached recipes. - */ - private static int cycleTicksStatic = Math.abs((int) System.currentTimeMillis()); - /** - * Basically {@link #cycleTicksStatic} but always updated even while holding shift - */ - private static int drawTicks; - private static final int PROGRESSBAR_CYCLE_TICKS = 200; - - protected final RecipeCategory recipeCategory; - protected final RecipeMap recipeMap; - protected final RecipeMapFrontend frontend; - protected final BasicUIProperties uiProperties; - protected final NEIRecipeProperties neiProperties; - - protected final ModularWindow modularWindow; - protected final ItemStackHandler itemInputsInventory; - protected final ItemStackHandler itemOutputsInventory; - protected final ItemStackHandler specialSlotInventory; - protected final ItemStackHandler fluidInputsInventory; - protected final ItemStackHandler fluidOutputsInventory; - - protected OverclockDescriber overclockDescriber; - /** - * Localized name of this handler displayed on the top. - */ - private String recipeNameDisplay; - /** - * Tooltip shown while hovering over header of this handler. Can be null if the full name fits in the screen. - */ - private NEIHandlerAbsoluteTooltip recipeNameTooltip; - - protected final GT_GUIColorOverride colorOverride = GT_GUIColorOverride - .get(GT_UITextures.BACKGROUND_NEI_SINGLE_RECIPE.location); - private int neiTextColorOverride = -1; - - public GT_NEI_DefaultHandler(RecipeCategory recipeCategory) { - this.recipeCategory = recipeCategory; - this.recipeMap = recipeCategory.recipeMap; - this.frontend = recipeMap.getFrontend(); - this.uiProperties = frontend.getUIProperties(); - this.neiProperties = frontend.getNEIProperties(); - uiProperties.neiTransferRect.forEach(transferRect -> { - transferRect = new Rectangle(transferRect); - transferRect.translate(WINDOW_OFFSET.x, WINDOW_OFFSET.y); - this.transferRects.add(new RecipeTransferRect(transferRect, recipeMap.unlocalizedName)); - }); - - ModularWindow.Builder builder = frontend.createNEITemplate( - itemInputsInventory = new ItemStackHandler(uiProperties.maxItemInputs), - itemOutputsInventory = new ItemStackHandler(uiProperties.maxItemOutputs), - specialSlotInventory = new ItemStackHandler(1), - fluidInputsInventory = new ItemStackHandler(uiProperties.maxFluidInputs), - fluidOutputsInventory = new ItemStackHandler(uiProperties.maxFluidOutputs), - () -> ((float) getDrawTicks() % PROGRESSBAR_CYCLE_TICKS) / PROGRESSBAR_CYCLE_TICKS, - WINDOW_OFFSET); - modularWindow = builder.build(); - UIInfos.initializeWindow(Minecraft.getMinecraft().thePlayer, modularWindow); - } - - public RecipeMap getRecipeMap() { - return recipeMap; - } - - private SortedRecipeListCache getCacheHolder() { - return CACHE.computeIfAbsent(recipeCategory, m -> new SortedRecipeListCache()); - } - - public List getCache() { - SortedRecipeListCache cacheHolder = getCacheHolder(); - List cache; - if (cacheHolder.getCachedRecipesVersion() != GT_Mod.gregtechproxy.getNEIReloadCount() - || (cache = cacheHolder.getCachedRecipes()) == null) { - try { - RecipeCategory defaultCategory = recipeMap.getDefaultRecipeCategory(); - Collection recipes; - if (this.recipeCategory == defaultCategory) { - // This is main category, so merge categories that are configured as such - Stream recipesToMerge = recipeMap.getBackend() - .getRecipeCategoryMap() - .entrySet() - .stream() - .flatMap(entry -> { - boolean merge = entry.getKey() != defaultCategory - && GT_Mod.gregtechproxy.recipeCategorySettings - .getOrDefault(entry.getKey(), RecipeCategorySetting.getDefault()) - == RecipeCategorySetting.MERGE; - return merge ? entry.getValue() - .stream() : Stream.empty(); - }); - recipes = Stream.concat( - recipesToMerge, - recipeMap.getBackend() - .getRecipesByCategory(defaultCategory) - .stream()) - .collect(Collectors.toList()); - } else { - // This is "sub" category - if (GT_Mod.gregtechproxy.recipeCategorySettings - .getOrDefault(recipeCategory, RecipeCategorySetting.getDefault()) - == RecipeCategorySetting.ENABLE) { - recipes = recipeMap.getBackend() - .getRecipesByCategory(recipeCategory); - } else { - recipes = Collections.emptyList(); - } - } - cache = recipes.stream() // do not use parallel stream. This is already parallelized by NEI - .filter(r -> !r.mHidden) - .sorted(neiProperties.comparator) - .map(CachedDefaultRecipe::new) - .collect(Collectors.toList()); - // while the NEI parallelize handlers, for each individual handler it still uses sequential execution - // model, - // so we do not need any synchronization here - // even if it does break, at worst case it's just recreating the cache multiple times, which should be - // fine - cacheHolder.setCachedRecipes(cache); - cacheHolder.setCachedRecipesVersion(GT_Mod.gregtechproxy.getNEIReloadCount()); - } catch (Exception e) { - throw new RuntimeException( - "Could not construct GT NEI Handler cache for category " + recipeCategory - + ", display name " - + recipeNameDisplay, - e); - } - } - return cache; - } - - @Override - public TemplateRecipeHandler newInstance() { - return new GT_NEI_DefaultHandler(recipeCategory); - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals(recipeMap.unlocalizedName)) { - if (results.length > 0 && results[0] instanceof OverclockDescriber) { - overclockDescriber = (OverclockDescriber) results[0]; - if (neiProperties.useCustomFilter) { - loadTieredRecipesWithCustomFilter(overclockDescriber); - } else { - loadTieredRecipesUpTo(overclockDescriber.getTier()); - } - } else { - arecipes.addAll(getCache()); - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack aResult) { - ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult); - - ArrayList tResults = new ArrayList<>(); - 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)); - } - } - if (aResult.getUnlocalizedName() - .startsWith("gt.blockores")) { - for (int i = 0; i < 8; i++) { - tResults.add(new ItemStack(aResult.getItem(), 1, aResult.getItemDamage() % 1000 + i * 1000)); - } - } - addFluidStacks(aResult, tResults); - for (CachedDefaultRecipe recipe : getCache()) { - if (tResults.stream() - .anyMatch(stack -> recipe.contains(recipe.mOutputs, stack))) arecipes.add(recipe); - } - } - - private void addFluidStacks(ItemStack aStack, ArrayList tResults) { - FluidStack tFluid = GT_Utility.getFluidForFilledItem(aStack, true); - FluidStack tFluidStack; - if (tFluid != null) { - tFluidStack = tFluid; - tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false)); - } else tFluidStack = GT_Utility.getFluidFromDisplayStack(aStack); - if (tFluidStack != null) { - tResults.addAll(GT_Utility.getContainersFromFluid(tFluidStack)); - } - } - - private void loadTieredRecipesWithCustomFilter(OverclockDescriber overclockDescriber) { - arecipes.addAll(getTieredRecipesWithCustomFilter(overclockDescriber)); - } - - private List getTieredRecipesWithCustomFilter(OverclockDescriber overclockDescriber) { - List recipes = getCache(); - if (!recipes.isEmpty()) { - recipes = recipes.stream() - .filter(recipe -> overclockDescriber.canHandle(recipe.mRecipe)) - .collect(Collectors.toList()); - } - return recipes; - } - - private void loadTieredRecipesUpTo(byte upperTier) { - arecipes.addAll(getTieredRecipes(upperTier)); - } - - private List getTieredRecipes(byte upperTier) { - List recipes = getCache(); - if (!recipes.isEmpty()) { - Range indexRange = getCacheHolder().getIndexRangeForTiers((byte) 0, upperTier); - recipes = recipes.subList(indexRange.getMinimum(), indexRange.getMaximum() + 1); - } - return recipes; - } - - @Override - public void loadUsageRecipes(ItemStack aInput) { - ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput); - ArrayList tInputs = new ArrayList<>(); - 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)); - } - } - addFluidStacks(aInput, tInputs); - for (CachedDefaultRecipe recipe : getCache()) { - if (tInputs.stream() - .anyMatch(stack -> recipe.contains(recipe.mInputs, stack))) arecipes.add(recipe); - } - } - - @Override - public IUsageHandler getUsageAndCatalystHandler(String inputId, Object... ingredients) { - if (inputId.equals("item")) { - ItemStack candidate = (ItemStack) ingredients[0]; - GT_NEI_DefaultHandler handler = (GT_NEI_DefaultHandler) newInstance(); - if (RecipeCatalysts.containsCatalyst(handler, candidate)) { - IMetaTileEntity metaTile = GT_Item_Machines.getMetaTileEntity(candidate); - OverclockDescriber overclockDescriber; - if (metaTile instanceof IOverclockDescriptionProvider provider) { - overclockDescriber = provider.getOverclockDescriber(); - } else { - overclockDescriber = null; - } - handler.loadCraftingRecipes(recipeMap.unlocalizedName, overclockDescriber); - return handler; - } - } - return this.getUsageHandler(inputId, ingredients); - } - - @Override - public ICraftingHandler getRecipeHandler(String outputId, Object... results) { - GT_NEI_DefaultHandler handler = (GT_NEI_DefaultHandler) super.getRecipeHandler(outputId, results); - if (results.length > 0 && results[0] instanceof OverclockDescriber) { - handler.overclockDescriber = (OverclockDescriber) results[0]; - } - return handler; - } - - @Override - public String getOverlayIdentifier() { - return recipeCategory.unlocalizedName; - } - - @Override - public void drawBackground(int recipe) { - drawUI(modularWindow); - } - - @Override - public void drawForeground(int recipe) { - GL11.glColor4f(1, 1, 1, 1); - GL11.glDisable(GL11.GL_LIGHTING); - drawExtras(recipe); - } - - @Override - public void onUpdate() { - super.onUpdate(); - if (!NEIClientUtils.shiftKey()) cycleTicksStatic++; - drawTicks++; - } - - @Override - public int recipiesPerPage() { - return 1; - } - - @Override - public String getRecipeName() { - if (recipeNameDisplay == null) { - recipeNameDisplay = computeRecipeName(); - neiTextColorOverride = colorOverride.getTextColorOrDefault("nei", -1); - } - return recipeNameDisplay; - } - - private String computeRecipeName() { - String recipeName = StatCollector.translateToLocal(recipeCategory.unlocalizedName); - if (overclockDescriber != null) { - String suffix = "(" + overclockDescriber.getTierString() + ")"; - // Space will be cropped if title exceeds - return shrinkRecipeName(recipeName + " ", suffix); - } else { - return shrinkRecipeName(recipeName, ""); - } - } - - private String shrinkRecipeName(final String originalRecipeName, final String suffix) { - FontRenderer fontRenderer = Minecraft.getMinecraft().fontRenderer; - int suffixWidth = fontRenderer.getStringWidth(suffix); - if (fontRenderer.getStringWidth(originalRecipeName) + suffixWidth <= RECIPE_NAME_WIDTH) { - return originalRecipeName + suffix; - } - - final String ellipsis = "..."; - final int ellipsisWidth = fontRenderer.getStringWidth(ellipsis); - String recipeName = originalRecipeName; - do { - recipeName = recipeName.substring(0, recipeName.length() - 1); - } while (fontRenderer.getStringWidth(recipeName) + ellipsisWidth + suffixWidth > RECIPE_NAME_WIDTH); - setupRecipeNameTooltip(originalRecipeName + suffix); - return recipeName + ellipsis + suffix; - } - - private void setupRecipeNameTooltip(String tooltip) { - recipeNameTooltip = new NEIHandlerAbsoluteTooltip(tooltip, new Rectangle(13, -34, RECIPE_NAME_WIDTH - 1, 11)); - } - - @Override - public String getRecipeTabName() { - return StatCollector.translateToLocal(recipeCategory.unlocalizedName); - } - - @Override - public String getGuiTexture() { - // not called - return ""; - } - - @Override - public List handleItemTooltip(GuiRecipe gui, ItemStack aStack, List currentTip, - int aRecipeIndex) { - if (recipeNameTooltip != null) { - recipeNameTooltip.handleTooltip(currentTip, aRecipeIndex); - } - if (aStack == null) { - return currentTip; - } - - CachedRecipe tObject = this.arecipes.get(aRecipeIndex); - if (tObject instanceof CachedDefaultRecipe) { - currentTip = frontend.handleNEIItemTooltip(aStack, currentTip, (CachedDefaultRecipe) tObject); - } - return currentTip; - } - - @Override - public void drawExtras(int aRecipeIndex) { - CachedDefaultRecipe cachedRecipe = ((CachedDefaultRecipe) this.arecipes.get(aRecipeIndex)); - - drawDescription(cachedRecipe); - frontend.drawNEIOverlays(cachedRecipe); - } - - private void drawDescription(CachedDefaultRecipe cachedRecipe) { - GT_Recipe recipe = cachedRecipe.mRecipe; - if (overclockDescriber == null) { - // By default, assume generic LV EU with no overclocks - overclockDescriber = new EUNoOverclockDescriber((byte) 1, uiProperties.amperage); - } - - GT_OverclockCalculator calculator = overclockDescriber.createCalculator( - new GT_OverclockCalculator().setRecipeEUt(recipe.mEUt) - .setDuration(recipe.mDuration), - recipe); - calculator.calculate(); - - frontend.drawDescription( - new RecipeDisplayInfo( - recipe, - recipeMap, - overclockDescriber, - calculator, - getDescriptionYOffset(), - neiTextColorOverride)); - } - - protected int getDescriptionYOffset() { - return neiProperties.recipeBackgroundSize.height + neiProperties.recipeBackgroundOffset.y + WINDOW_OFFSET.y + 3; - } - - protected void drawUI(ModularWindow window) { - for (IDrawable background : window.getBackground()) { - GlStateManager.pushMatrix(); - GlStateManager.translate( - WINDOW_OFFSET.x + neiProperties.recipeBackgroundOffset.x, - WINDOW_OFFSET.y + neiProperties.recipeBackgroundOffset.y, - 0); - GlStateManager.color(1f, 1f, 1f, 1f); - background.draw(Pos2d.ZERO, window.getSize(), 0); - GlStateManager.popMatrix(); - } - - for (Widget widget : window.getChildren()) { - // NEI already did translation, so we can't use Widget#drawInternal here - GlStateManager.pushMatrix(); - GlStateManager.translate(widget.getPos().x, widget.getPos().y, 0); - GlStateManager.color(1, 1, 1, window.getAlpha()); - GlStateManager.enableBlend(); - - // maybe we can use Minecraft#timer but none of the IDrawables use partialTicks - widget.drawBackground(0); - - // noinspection OverrideOnly // It's either suppressing this warning or changing ModularUI - widget.draw(0); - GlStateManager.popMatrix(); - } - } - - public static int getDrawTicks() { - return drawTicks; - } - - public static class FixedPositionedStack extends PositionedStack { - - public static final DecimalFormat chanceFormat = new DecimalFormat("##0.##%"); - public final int mChance; - public final int realStackSize; - public final boolean renderRealStackSize; - - public FixedPositionedStack(Object object, boolean renderRealStackSizes, int x, int y) { - this(object, renderRealStackSizes, x, y, 0, true); - } - - public FixedPositionedStack(Object object, boolean renderRealStackSizes, int x, int y, boolean aUnificate) { - this(object, renderRealStackSizes, x, y, 0, aUnificate); - } - - public FixedPositionedStack(Object object, boolean renderRealStackSize, int x, int y, int aChance, - boolean aUnificate) { - super(aUnificate ? GT_OreDictUnificator.getNonUnifiedStacks(object) : object, x, y, true); - this.mChance = aChance; - realStackSize = item != null ? item.stackSize : 0; - this.renderRealStackSize = renderRealStackSize; - if (!renderRealStackSize) { - for (ItemStack stack : items) { - stack.stackSize = 1; - } - } - } - - public boolean isChanceBased() { - return mChance > 0 && mChance < 10000; - } - - public String getChanceText() { - return chanceFormat.format((float) mChance / 10000); - } - - public boolean isNotConsumed() { - return !isFluid() && item.stackSize == 0; - } - - public boolean isFluid() { - return ItemList.Display_Fluid.isStackEqual(item, true, true); - } - } - - public class CachedDefaultRecipe extends TemplateRecipeHandler.CachedRecipe { - - public final GT_Recipe mRecipe; - public final List mOutputs; - public final List mInputs; - - public CachedDefaultRecipe(GT_Recipe aRecipe) { - super(); - this.mRecipe = aRecipe; - mOutputs = new ArrayList<>(); - mInputs = new ArrayList<>(); - - for (Widget child : modularWindow.getChildren()) { - if (child instanceof SlotWidget widget) { - if (widget.getMcSlot() - .getItemHandler() == itemInputsInventory) { - int i = widget.getMcSlot() - .getSlotIndex(); - Object input = aRecipe instanceof GT_Recipe.GT_Recipe_WithAlt - ? ((GT_Recipe.GT_Recipe_WithAlt) aRecipe).getAltRepresentativeInput(i) - : aRecipe.getRepresentativeInput(i); - if (input != null) { - mInputs.add( - new FixedPositionedStack( - input, - GT_NEI_DefaultHandler.this.neiProperties.renderRealStackSizes, - widget.getPos().x + 1, - widget.getPos().y + 1, - true)); - } - } else if (widget.getMcSlot() - .getItemHandler() == itemOutputsInventory) { - int i = widget.getMcSlot() - .getSlotIndex(); - ItemStack output = aRecipe.getRepresentativeOutput(i); - if (output != null) { - mOutputs.add( - new FixedPositionedStack( - output, - GT_NEI_DefaultHandler.this.neiProperties.renderRealStackSizes, - widget.getPos().x + 1, - widget.getPos().y + 1, - aRecipe.getOutputChance(i), - GT_NEI_DefaultHandler.this.neiProperties.unificateOutput)); - } - } else if (widget.getMcSlot() - .getItemHandler() == specialSlotInventory) { - if (aRecipe.mSpecialItems != null) { - mInputs.add( - new FixedPositionedStack( - aRecipe.mSpecialItems, - GT_NEI_DefaultHandler.this.neiProperties.renderRealStackSizes, - widget.getPos().x + 1, - widget.getPos().y + 1)); - } - - } else if (widget.getMcSlot() - .getItemHandler() == fluidInputsInventory) { - int i = widget.getMcSlot() - .getSlotIndex(); - if (aRecipe.mFluidInputs.length > i && aRecipe.mFluidInputs[i] != null - && aRecipe.mFluidInputs[i].getFluid() != null) { - mInputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[i], true), - GT_NEI_DefaultHandler.this.neiProperties.renderRealStackSizes, - widget.getPos().x + 1, - widget.getPos().y + 1)); - } - } else if (widget.getMcSlot() - .getItemHandler() == fluidOutputsInventory) { - int i = widget.getMcSlot() - .getSlotIndex(); - if (aRecipe.mFluidOutputs.length > i && aRecipe.mFluidOutputs[i] != null - && aRecipe.mFluidOutputs[i].getFluid() != null) { - mOutputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[i], true), - GT_NEI_DefaultHandler.this.neiProperties.renderRealStackSizes, - widget.getPos().x + 1, - widget.getPos().y + 1)); - } - } - } - } - - // items and fluids that exceed usual count - UIHelper.forEachSlots((i, backgrounds, pos) -> { - if (i >= GT_NEI_DefaultHandler.this.uiProperties.maxItemInputs && aRecipe.mInputs[i] != null) { - mInputs.add( - new FixedPositionedStack( - aRecipe.mInputs[i], - GT_NEI_DefaultHandler.this.neiProperties.renderRealStackSizes, - pos.x + 1, - pos.y + 1, - true)); - } - }, (i, backgrounds, pos) -> { - if (i >= GT_NEI_DefaultHandler.this.uiProperties.maxItemOutputs && aRecipe.mOutputs[i] != null) { - mOutputs.add( - new FixedPositionedStack( - aRecipe.mOutputs[i], - GT_NEI_DefaultHandler.this.neiProperties.renderRealStackSizes, - pos.x + 1, - pos.y + 1, - aRecipe.getOutputChance(i), - GT_NEI_DefaultHandler.this.neiProperties.unificateOutput)); - } - }, (i, backgrounds, pos) -> {}, (i, backgrounds, pos) -> { - if (i >= GT_NEI_DefaultHandler.this.uiProperties.maxFluidInputs && aRecipe.mFluidInputs[i] != null - && aRecipe.mFluidInputs[i].getFluid() != null) { - mInputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(aRecipe.mFluidInputs[i], true), - GT_NEI_DefaultHandler.this.neiProperties.renderRealStackSizes, - pos.x + 1, - pos.y + 1)); - } - }, (i, backgrounds, pos) -> { - if (i >= GT_NEI_DefaultHandler.this.uiProperties.maxFluidOutputs && aRecipe.mFluidOutputs[i] != null - && aRecipe.mFluidOutputs[i].getFluid() != null) { - mOutputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(aRecipe.mFluidOutputs[i], true), - GT_NEI_DefaultHandler.this.neiProperties.renderRealStackSizes, - pos.x + 1, - pos.y + 1)); - } - }, - IDrawable.EMPTY, - IDrawable.EMPTY, - GT_NEI_DefaultHandler.this.frontend.getUIProperties(), - aRecipe.mInputs.length, - aRecipe.mOutputs.length, - aRecipe.mFluidInputs.length, - aRecipe.mFluidOutputs.length, - SteamVariant.NONE, - WINDOW_OFFSET); - } - - @Override - public List getIngredients() { - return getCycledIngredients(cycleTicksStatic / 10, this.mInputs); - } - - @Override - public PositionedStack getResult() { - return null; - } - - @Override - public List getOtherStacks() { - return this.mOutputs; - } - } - - private class SortedRecipeListCache { - - private int mCachedRecipesVersion = -1; - - @Nullable - private SoftReference> mCachedRecipes; - - private Map> mTierIndexes; - private Range mTierRange; - - public int getCachedRecipesVersion() { - return mCachedRecipesVersion; - } - - public void setCachedRecipesVersion(int aCachedRecipesVersion) { - this.mCachedRecipesVersion = aCachedRecipesVersion; - } - - @Nullable - public List getCachedRecipes() { - return mCachedRecipes == null ? null : mCachedRecipes.get(); - } - - public void setCachedRecipes(@Nonnull List aCachedRecipes) { - this.mCachedRecipes = new SoftReference<>(aCachedRecipes); - } - - public Range getIndexRangeForTiers(byte lowerTier, byte upperTier) { - if (mTierIndexes == null) { - computeTierIndexes(); - } - return Range.between(getLowIndexForTier(lowerTier), getHighIndexForTier(upperTier)); - } - - private void computeTierIndexes() { - // Holds 16 elements without rehashing - mTierIndexes = new HashMap<>(V.length + 1, 1f); - assert mCachedRecipes != null; - Iterator iterator = Objects.requireNonNull(mCachedRecipes.get()) - .iterator(); - - int index = 0; - int minIndex = 0; - int maxIndex = -1; - byte previousTier = -1; - byte lowestTier = 0; - while (iterator.hasNext()) { - CachedDefaultRecipe recipe = iterator.next(); - byte recipeTier = GT_Utility - .getTier(recipe.mRecipe.mEUt / GT_NEI_DefaultHandler.this.recipeMap.getAmperage()); - if (recipeTier != previousTier) { - if (maxIndex != -1) { - mTierIndexes.put(previousTier, Range.between(minIndex, maxIndex)); - } else { - lowestTier = recipeTier; - } - minIndex = index; - previousTier = recipeTier; - } - maxIndex = index; - index++; - if (!iterator.hasNext()) { - mTierIndexes.put(recipeTier, Range.between(minIndex, maxIndex)); - mTierRange = Range.between(lowestTier, recipeTier); - } - } - } - - private int getLowIndexForTier(byte lowerTier) { - byte lowTier = (byte) Math.max(mTierRange.getMinimum(), lowerTier); - while (mTierIndexes.get(lowTier) == null) { - lowTier++; - } - return mTierIndexes.get(lowTier) - .getMinimum(); - } - - private int getHighIndexForTier(byte upperTier) { - byte highTier = (byte) Math.min(mTierRange.getMaximum(), upperTier); - while (mTierIndexes.get(highTier) == null) { - highTier--; - } - return mTierIndexes.get(highTier) - .getMaximum(); - } - } -} diff --git a/src/main/java/gregtech/nei/NEI_GT_Config.java b/src/main/java/gregtech/nei/NEI_GT_Config.java deleted file mode 100644 index 198f71fdb0..0000000000 --- a/src/main/java/gregtech/nei/NEI_GT_Config.java +++ /dev/null @@ -1,183 +0,0 @@ -package gregtech.nei; - -import java.util.Collection; -import java.util.Comparator; -import java.util.Map; - -import com.google.common.collect.ImmutableListMultimap; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ListMultimap; - -import codechicken.nei.api.API; -import codechicken.nei.api.IConfigureNEI; -import codechicken.nei.event.NEIRegisterHandlerInfosEvent; -import codechicken.nei.recipe.GuiCraftingRecipe; -import codechicken.nei.recipe.GuiUsageRecipe; -import codechicken.nei.recipe.HandlerInfo; -import codechicken.nei.recipe.TemplateRecipeHandler; -import cpw.mods.fml.common.event.FMLInterModComms; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.RecipeMapWorkable; -import gregtech.api.recipe.RecipeCategory; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_ModHandler; -import gregtech.common.items.GT_MetaGenerated_Item_01; -import gregtech.common.items.GT_MetaGenerated_Item_02; -import gregtech.common.items.GT_MetaGenerated_Item_03; -import gregtech.nei.dumper.BatchModeSupportDumper; -import gregtech.nei.dumper.InputSeparationSupportDumper; -import gregtech.nei.dumper.MaterialDumper; -import gregtech.nei.dumper.MetaItemDumper; -import gregtech.nei.dumper.MetaTileEntityDumper; -import gregtech.nei.dumper.RecipeLockingSupportDumper; -import gregtech.nei.dumper.VoidProtectionSupportDumper; - -public class NEI_GT_Config implements IConfigureNEI { - - /** - * This map determines the order in which NEI handlers will be registered and displayed in tabs. - * - *

- * Handlers will be displayed in ascending order of integer value. Any recipe map that is not present in this map - * will be assigned a value of 0. Negative values are fine. - */ - private static final ImmutableMap, Integer> RECIPE_MAP_ORDERING = ImmutableMap - ., Integer>builder() - .put(RecipeMaps.assemblylineVisualRecipes, 1) - .put(RecipeMaps.scannerFakeRecipes, 2) - .build(); - - private static final Comparator RECIPE_MAP_HANDLER_COMPARATOR = Comparator - .comparingInt(handler -> RECIPE_MAP_ORDERING.getOrDefault(handler.getRecipeMap(), 0)); - - private static ListMultimap RECIPE_CATALYST_INDEX; - - public static boolean sIsAdded = true; - - private static void addHandler(TemplateRecipeHandler handler) { - FMLInterModComms.sendRuntimeMessage( - GT_Values.GT, - "NEIPlugins", - "register-crafting-handler", - "gregtech@" + handler.getRecipeName() + "@" + handler.getOverlayIdentifier()); - GuiCraftingRecipe.craftinghandlers.add(handler); - GuiUsageRecipe.usagehandlers.add(handler); - } - - @Override - public void loadConfig() { - sIsAdded = false; - registerHandlers(); - registerCatalysts(); - registerItemEntries(); - registerDumpers(); - sIsAdded = true; - } - - private void registerHandlers() { - RecipeCategory.ALL_RECIPE_CATEGORIES.values() - .stream() - .filter( - recipeCategory -> recipeCategory.recipeMap.getFrontend() - .getNEIProperties().registerNEI) - .map(GT_NEI_DefaultHandler::new) - .sorted(RECIPE_MAP_HANDLER_COMPARATOR) - .forEach(NEI_GT_Config::addHandler); - } - - private void registerCatalysts() { - for (Map.Entry> entry : RECIPE_CATALYST_INDEX.asMap() - .entrySet()) { - entry.getValue() - .forEach( - recipeMapWorkable -> API.addRecipeCatalyst( - recipeMapWorkable.getStackForm(1), - entry.getKey().unlocalizedName, - recipeMapWorkable.getRecipeCatalystPriority())); - } - API.addRecipeCatalyst( - GT_ModHandler.getIC2Item("nuclearReactor", 1, null), - RecipeMaps.ic2NuclearFakeRecipes.unlocalizedName); - } - - private void registerItemEntries() { - API.addItemListEntry(ItemList.VOLUMETRIC_FLASK.get(1)); - } - - private void registerDumpers() { - API.addOption(new MetaTileEntityDumper()); - API.addOption(new MaterialDumper()); - API.addOption(new MetaItemDumper(GT_MetaGenerated_Item_01.INSTANCE, "metaitem01")); - API.addOption(new MetaItemDumper(GT_MetaGenerated_Item_02.INSTANCE, "metaitem02")); - API.addOption(new MetaItemDumper(GT_MetaGenerated_Item_03.INSTANCE, "metaitem03")); - API.addOption(new VoidProtectionSupportDumper()); - API.addOption(new InputSeparationSupportDumper()); - API.addOption(new BatchModeSupportDumper()); - API.addOption(new RecipeLockingSupportDumper()); - } - - @SubscribeEvent - public void registerHandlerInfo(NEIRegisterHandlerInfosEvent event) { - if (RECIPE_CATALYST_INDEX == null) { - // This method will be called earlier than #loadConfig - generateRecipeCatalystIndex(); - } - RecipeCategory.ALL_RECIPE_CATEGORIES.values() - .forEach(recipeCategory -> { - HandlerInfo.Builder builder = createHandlerInfoBuilderTemplate(recipeCategory); - HandlerInfo handlerInfo; - if (recipeCategory.handlerInfoCreator != null) { - handlerInfo = recipeCategory.handlerInfoCreator.apply(builder) - .build(); - } else { - // Infer icon from recipe catalysts - RECIPE_CATALYST_INDEX.get(recipeCategory) - .stream() - .findFirst() - .ifPresent(catalyst -> builder.setDisplayStack(catalyst.getStackForm(1))); - handlerInfo = builder.build(); - } - event.registerHandlerInfo(handlerInfo); - }); - } - - private HandlerInfo.Builder createHandlerInfoBuilderTemplate(RecipeCategory recipeCategory) { - return new HandlerInfo.Builder( - recipeCategory.unlocalizedName, - recipeCategory.ownerMod.getName(), - recipeCategory.ownerMod.getModId()).setShiftY(6) - .setHeight(135) - .setMaxRecipesPerPage(2); - } - - private static void generateRecipeCatalystIndex() { - ImmutableListMultimap.Builder builder = new ImmutableListMultimap.Builder<>(); - builder - .orderValuesBy(Comparator.comparing(recipeMapWorkable -> -recipeMapWorkable.getRecipeCatalystPriority())); - for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) { - IMetaTileEntity mte = GregTech_API.METATILEENTITIES[i]; - if (!(mte instanceof RecipeMapWorkable recipeMapWorkable)) continue; - for (RecipeMap recipeMap : recipeMapWorkable.getAvailableRecipeMaps()) { - for (RecipeCategory recipeCategory : recipeMap.getAssociatedCategories()) { - builder.put(recipeCategory, recipeMapWorkable); - } - } - } - RECIPE_CATALYST_INDEX = builder.build(); - } - - @Override - public String getName() { - return "GregTech NEI Plugin"; - } - - @Override - public String getVersion() { - return "(5.03a)"; - } -} diff --git a/src/main/java/gregtech/nei/RecipeDisplayInfo.java b/src/main/java/gregtech/nei/RecipeDisplayInfo.java index f9cc1a9a8c..d9e6b1d65b 100644 --- a/src/main/java/gregtech/nei/RecipeDisplayInfo.java +++ b/src/main/java/gregtech/nei/RecipeDisplayInfo.java @@ -1,6 +1,6 @@ package gregtech.nei; -import static gregtech.api.util.GT_Utility.isStringInvalid; +import static gregtech.api.util.GTUtility.isStringInvalid; import java.util.List; @@ -12,9 +12,9 @@ import net.minecraft.client.Minecraft; import gregtech.api.objects.overclockdescriber.OverclockDescriber; import gregtech.api.recipe.RecipeMap; import gregtech.api.util.FieldsAreNonnullByDefault; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.api.util.OverclockCalculator; /** * Holds info used for drawing descriptions on NEI. @@ -27,7 +27,7 @@ public class RecipeDisplayInfo { /** * Recipe to show description. */ - public final GT_Recipe recipe; + public final GTRecipe recipe; /** * RecipeMap the recipe belongs to. @@ -43,7 +43,7 @@ public class RecipeDisplayInfo { /** * Pre-built overclock calculator, used for drawing OC information. Do not calculate it again. */ - public final GT_OverclockCalculator calculator; + public final OverclockCalculator calculator; /** * Current Y position for drawing description. @@ -52,8 +52,8 @@ public class RecipeDisplayInfo { private final int neiTextColorOverride; - RecipeDisplayInfo(GT_Recipe recipe, RecipeMap recipeMap, OverclockDescriber overclockDescriber, - GT_OverclockCalculator calculator, int descriptionYOffset, int neiTextColorOverride) { + RecipeDisplayInfo(GTRecipe recipe, RecipeMap recipeMap, OverclockDescriber overclockDescriber, + OverclockCalculator calculator, int descriptionYOffset, int neiTextColorOverride) { this.recipe = recipe; this.recipeMap = recipeMap; this.overclockDescriber = overclockDescriber; diff --git a/src/main/java/gregtech/nei/dumper/BatchModeSupportDumper.java b/src/main/java/gregtech/nei/dumper/BatchModeSupportDumper.java index ea0168073a..a69a0aa0d6 100644 --- a/src/main/java/gregtech/nei/dumper/BatchModeSupportDumper.java +++ b/src/main/java/gregtech/nei/dumper/BatchModeSupportDumper.java @@ -1,10 +1,10 @@ package gregtech.nei.dumper; -import gregtech.api.interfaces.modularui.ControllerWithOptionalFeatures; +import gregtech.api.interfaces.modularui.IControllerWithOptionalFeatures; public class BatchModeSupportDumper extends MultiBlockFeatureSupportDumper { public BatchModeSupportDumper() { - super("batch_mode", ControllerWithOptionalFeatures::supportsBatchMode); + super("batch_mode", IControllerWithOptionalFeatures::supportsBatchMode); } } diff --git a/src/main/java/gregtech/nei/dumper/InputSeparationSupportDumper.java b/src/main/java/gregtech/nei/dumper/InputSeparationSupportDumper.java index 5b0d293827..d0a68d1131 100644 --- a/src/main/java/gregtech/nei/dumper/InputSeparationSupportDumper.java +++ b/src/main/java/gregtech/nei/dumper/InputSeparationSupportDumper.java @@ -1,10 +1,10 @@ package gregtech.nei.dumper; -import gregtech.api.interfaces.modularui.ControllerWithOptionalFeatures; +import gregtech.api.interfaces.modularui.IControllerWithOptionalFeatures; public class InputSeparationSupportDumper extends MultiBlockFeatureSupportDumper { public InputSeparationSupportDumper() { - super("input_separation", ControllerWithOptionalFeatures::supportsInputSeparation); + super("input_separation", IControllerWithOptionalFeatures::supportsInputSeparation); } } diff --git a/src/main/java/gregtech/nei/dumper/MaterialDumper.java b/src/main/java/gregtech/nei/dumper/MaterialDumper.java index 3234779de8..197fbba6b3 100644 --- a/src/main/java/gregtech/nei/dumper/MaterialDumper.java +++ b/src/main/java/gregtech/nei/dumper/MaterialDumper.java @@ -7,7 +7,7 @@ import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.enums.Materials; public class MaterialDumper extends GregTechIDDumper { @@ -24,7 +24,7 @@ public class MaterialDumper extends GregTechIDDumper { @Override protected Iterable dump(Mode mode) { List dump = new ArrayList<>(); - Map idMap = Arrays.stream(GregTech_API.sGeneratedMaterials) + Map idMap = Arrays.stream(GregTechAPI.sGeneratedMaterials) .filter(Objects::nonNull) .collect(Collectors.toMap(m -> m.mMetaItemSubID, m -> m)); for (int i = 0; i < 1000; i++) { diff --git a/src/main/java/gregtech/nei/dumper/MetaItemDumper.java b/src/main/java/gregtech/nei/dumper/MetaItemDumper.java index 519af48e93..44e2ef8637 100644 --- a/src/main/java/gregtech/nei/dumper/MetaItemDumper.java +++ b/src/main/java/gregtech/nei/dumper/MetaItemDumper.java @@ -7,14 +7,14 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.ChatComponentText; import codechicken.nei.NEIClientUtils; -import gregtech.api.items.GT_MetaGenerated_Item; +import gregtech.api.items.MetaGeneratedItem; public class MetaItemDumper extends GregTechIDDumper { - private final GT_MetaGenerated_Item item; + private final MetaGeneratedItem item; private final String nameSuffix; - public MetaItemDumper(GT_MetaGenerated_Item item, String name) { + public MetaItemDumper(MetaGeneratedItem item, String name) { super(name); this.nameSuffix = name; this.item = item; diff --git a/src/main/java/gregtech/nei/dumper/MetaTileEntityDumper.java b/src/main/java/gregtech/nei/dumper/MetaTileEntityDumper.java index ee30cdfb8a..a3fbd199fd 100644 --- a/src/main/java/gregtech/nei/dumper/MetaTileEntityDumper.java +++ b/src/main/java/gregtech/nei/dumper/MetaTileEntityDumper.java @@ -3,7 +3,7 @@ package gregtech.nei.dumper; import java.util.ArrayList; import java.util.List; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; public class MetaTileEntityDumper extends GregTechIDDumper { @@ -20,8 +20,8 @@ public class MetaTileEntityDumper extends GregTechIDDumper { @Override protected Iterable dump(Mode mode) { List list = new ArrayList<>(); - for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) { - IMetaTileEntity mte = GregTech_API.METATILEENTITIES[i]; + for (int i = 1; i < GregTechAPI.METATILEENTITIES.length; i++) { + IMetaTileEntity mte = GregTechAPI.METATILEENTITIES[i]; if (mode == Mode.FREE && mte == null) { list.add(new String[] { String.valueOf(i), "", "", }); } else if (mode == Mode.USED && mte != null) { diff --git a/src/main/java/gregtech/nei/dumper/MultiBlockFeatureSupportDumper.java b/src/main/java/gregtech/nei/dumper/MultiBlockFeatureSupportDumper.java index dc378ff9ad..37045c6b58 100644 --- a/src/main/java/gregtech/nei/dumper/MultiBlockFeatureSupportDumper.java +++ b/src/main/java/gregtech/nei/dumper/MultiBlockFeatureSupportDumper.java @@ -5,16 +5,16 @@ import java.util.List; import java.util.function.Function; import codechicken.nei.config.DataDumper; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.modularui.ControllerWithOptionalFeatures; +import gregtech.api.interfaces.modularui.IControllerWithOptionalFeatures; public abstract class MultiBlockFeatureSupportDumper extends DataDumper { - private final Function isFeatureSupported; + private final Function isFeatureSupported; public MultiBlockFeatureSupportDumper(String name, - Function isFeatureSupported) { + Function isFeatureSupported) { super("tools.dump.gt5u." + name); this.isFeatureSupported = isFeatureSupported; } @@ -27,9 +27,9 @@ public abstract class MultiBlockFeatureSupportDumper extends DataDumper { @Override public Iterable dump(int mode) { List list = new ArrayList<>(); - for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) { - IMetaTileEntity mte = GregTech_API.METATILEENTITIES[i]; - if (!(mte instanceof ControllerWithOptionalFeatures controller)) continue; + for (int i = 1; i < GregTechAPI.METATILEENTITIES.length; i++) { + IMetaTileEntity mte = GregTechAPI.METATILEENTITIES[i]; + if (!(mte instanceof IControllerWithOptionalFeatures controller)) continue; if (!isFeatureSupported.apply(controller)) { list.add( new String[] { controller.getClass() diff --git a/src/main/java/gregtech/nei/dumper/RecipeLockingSupportDumper.java b/src/main/java/gregtech/nei/dumper/RecipeLockingSupportDumper.java index 05deba6c39..0c901e49eb 100644 --- a/src/main/java/gregtech/nei/dumper/RecipeLockingSupportDumper.java +++ b/src/main/java/gregtech/nei/dumper/RecipeLockingSupportDumper.java @@ -1,10 +1,10 @@ package gregtech.nei.dumper; -import gregtech.api.interfaces.modularui.ControllerWithOptionalFeatures; +import gregtech.api.interfaces.modularui.IControllerWithOptionalFeatures; public class RecipeLockingSupportDumper extends MultiBlockFeatureSupportDumper { public RecipeLockingSupportDumper() { - super("recipe_locking", ControllerWithOptionalFeatures::supportsSingleRecipeLocking); + super("recipe_locking", IControllerWithOptionalFeatures::supportsSingleRecipeLocking); } } diff --git a/src/main/java/gregtech/nei/dumper/VoidProtectionSupportDumper.java b/src/main/java/gregtech/nei/dumper/VoidProtectionSupportDumper.java index b48efb2cdc..b870d0c984 100644 --- a/src/main/java/gregtech/nei/dumper/VoidProtectionSupportDumper.java +++ b/src/main/java/gregtech/nei/dumper/VoidProtectionSupportDumper.java @@ -1,10 +1,10 @@ package gregtech.nei.dumper; -import gregtech.api.interfaces.modularui.ControllerWithOptionalFeatures; +import gregtech.api.interfaces.modularui.IControllerWithOptionalFeatures; public class VoidProtectionSupportDumper extends MultiBlockFeatureSupportDumper { public VoidProtectionSupportDumper() { - super("void_protection", ControllerWithOptionalFeatures::supportsVoidProtection); + super("void_protection", IControllerWithOptionalFeatures::supportsVoidProtection); } } diff --git a/src/main/java/gregtech/nei/formatter/DefaultSpecialValueFormatter.java b/src/main/java/gregtech/nei/formatter/DefaultSpecialValueFormatter.java index 1c4d486319..b190710368 100644 --- a/src/main/java/gregtech/nei/formatter/DefaultSpecialValueFormatter.java +++ b/src/main/java/gregtech/nei/formatter/DefaultSpecialValueFormatter.java @@ -1,13 +1,13 @@ package gregtech.nei.formatter; -import static gregtech.api.util.GT_Utility.trans; +import static gregtech.api.util.GTUtility.trans; import java.util.Collections; import java.util.List; import javax.annotation.ParametersAreNonnullByDefault; -import gregtech.GT_Mod; +import gregtech.GTMod; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.nei.RecipeDisplayInfo; @@ -20,13 +20,13 @@ public class DefaultSpecialValueFormatter implements INEISpecialInfoFormatter { @Override public List format(RecipeDisplayInfo recipeInfo) { int specialValue = recipeInfo.recipe.mSpecialValue; - if (specialValue == -100 && GT_Mod.gregtechproxy.mLowGravProcessing) { + if (specialValue == -100 && GTMod.gregtechproxy.mLowGravProcessing) { return Collections.singletonList(trans("159", "Needs Low Gravity")); - } else if (specialValue == -200 && GT_Mod.gregtechproxy.mEnableCleanroom) { + } else if (specialValue == -200 && GTMod.gregtechproxy.mEnableCleanroom) { return Collections.singletonList(trans("160", "Needs Cleanroom")); } else if (specialValue == -201) { return Collections.singletonList(trans("206", "Scan for Assembly Line")); - } else if (specialValue == -300 && GT_Mod.gregtechproxy.mEnableCleanroom) { + } else if (specialValue == -300 && GTMod.gregtechproxy.mEnableCleanroom) { return Collections.singletonList(trans("160.1", "Needs Cleanroom & LowGrav")); } else if (specialValue == -400) { return Collections.singletonList(trans("216", "Deprecated Recipe")); diff --git a/src/main/java/gregtech/nei/formatter/FuelSpecialValueFormatter.java b/src/main/java/gregtech/nei/formatter/FuelSpecialValueFormatter.java index dcfe2617dd..a4d53c46dc 100644 --- a/src/main/java/gregtech/nei/formatter/FuelSpecialValueFormatter.java +++ b/src/main/java/gregtech/nei/formatter/FuelSpecialValueFormatter.java @@ -7,7 +7,7 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.util.StatCollector; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.nei.RecipeDisplayInfo; @@ -22,6 +22,6 @@ public class FuelSpecialValueFormatter implements INEISpecialInfoFormatter { return Collections.singletonList( StatCollector.translateToLocalFormatted( "GT5U.nei.fuel", - GT_Utility.formatNumbers(recipeInfo.recipe.mSpecialValue * 1000L))); + GTUtility.formatNumbers(recipeInfo.recipe.mSpecialValue * 1000L))); } } diff --git a/src/main/java/gregtech/nei/formatter/FusionSpecialValueFormatter.java b/src/main/java/gregtech/nei/formatter/FusionSpecialValueFormatter.java index 77cd41b343..eb77fba072 100644 --- a/src/main/java/gregtech/nei/formatter/FusionSpecialValueFormatter.java +++ b/src/main/java/gregtech/nei/formatter/FusionSpecialValueFormatter.java @@ -7,8 +7,8 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.util.StatCollector; -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_Utility; +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.nei.RecipeDisplayInfo; @@ -26,7 +26,7 @@ public class FusionSpecialValueFormatter implements INEISpecialInfoFormatter { int tier = getFusionTier(euToStart, voltage); return Collections.singletonList( - StatCollector.translateToLocalFormatted("GT5U.nei.start_eu", GT_Utility.formatNumbers(euToStart), tier)); + StatCollector.translateToLocalFormatted("GT5U.nei.start_eu", GTUtility.formatNumbers(euToStart), tier)); } public static int getFusionTier(long startupPower, long voltage) { @@ -43,13 +43,13 @@ public class FusionSpecialValueFormatter implements INEISpecialInfoFormatter { tier = 5; } - if (voltage <= GT_Values.V[6]) { + if (voltage <= GTValues.V[6]) { // no-op - } else if (voltage <= GT_Values.V[7]) { + } else if (voltage <= GTValues.V[7]) { tier = Math.max(tier, 2); - } else if (voltage <= GT_Values.V[8]) { + } else if (voltage <= GTValues.V[8]) { tier = Math.max(tier, 3); - } else if (voltage <= GT_Values.V[9]) { + } else if (voltage <= GTValues.V[9]) { tier = Math.max(tier, 4); } else { tier = 5; diff --git a/src/main/java/gregtech/nei/formatter/HeatingCoilSpecialValueFormatter.java b/src/main/java/gregtech/nei/formatter/HeatingCoilSpecialValueFormatter.java index f5c17a1163..a02efde73c 100644 --- a/src/main/java/gregtech/nei/formatter/HeatingCoilSpecialValueFormatter.java +++ b/src/main/java/gregtech/nei/formatter/HeatingCoilSpecialValueFormatter.java @@ -8,7 +8,7 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.util.StatCollector; import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.nei.RecipeDisplayInfo; @@ -24,7 +24,7 @@ public class HeatingCoilSpecialValueFormatter implements INEISpecialInfoFormatte return Collections.singletonList( StatCollector.translateToLocalFormatted( "GT5U.nei.heat_capacity", - GT_Utility.formatNumbers(heat), + GTUtility.formatNumbers(heat), HeatingCoilLevel.getDisplayNameFromHeat(heat, false))); } } diff --git a/src/main/java/gregtech/nei/formatter/INEISpecialInfoFormatter.java b/src/main/java/gregtech/nei/formatter/INEISpecialInfoFormatter.java index 21228240d4..c8d2db6928 100644 --- a/src/main/java/gregtech/nei/formatter/INEISpecialInfoFormatter.java +++ b/src/main/java/gregtech/nei/formatter/INEISpecialInfoFormatter.java @@ -4,11 +4,12 @@ import java.util.List; import javax.annotation.ParametersAreNonnullByDefault; +import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.nei.RecipeDisplayInfo; /** - * Getter for description for {@link gregtech.api.util.GT_Recipe#mSpecialValue} etc. that will be drawn on NEI. + * Getter for description for {@link GTRecipe#mSpecialValue} etc. that will be drawn on NEI. */ @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault diff --git a/src/main/java/gregtech/nei/formatter/SimpleSpecialValueFormatter.java b/src/main/java/gregtech/nei/formatter/SimpleSpecialValueFormatter.java index 8f2098c0a9..93b060eacb 100644 --- a/src/main/java/gregtech/nei/formatter/SimpleSpecialValueFormatter.java +++ b/src/main/java/gregtech/nei/formatter/SimpleSpecialValueFormatter.java @@ -8,7 +8,7 @@ import javax.annotation.ParametersAreNonnullByDefault; import net.minecraft.util.StatCollector; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.nei.RecipeDisplayInfo; @@ -44,6 +44,6 @@ public class SimpleSpecialValueFormatter implements INEISpecialInfoFormatter { return Collections.singletonList( StatCollector.translateToLocalFormatted( translationKey, - GT_Utility.formatNumbers((long) recipeInfo.recipe.mSpecialValue * multiplier))); + GTUtility.formatNumbers((long) recipeInfo.recipe.mSpecialValue * multiplier))); } } diff --git a/src/main/java/gtPlusPlus/GTplusplus.java b/src/main/java/gtPlusPlus/GTplusplus.java index b024e0e88a..ef6b1759e9 100644 --- a/src/main/java/gtPlusPlus/GTplusplus.java +++ b/src/main/java/gtPlusPlus/GTplusplus.java @@ -3,7 +3,7 @@ package gtPlusPlus; import static gregtech.api.enums.Mods.GTPlusPlus; import static gregtech.api.enums.Mods.Names; import static gregtech.api.enums.Mods.Thaumcraft; -import static gtPlusPlus.core.lib.CORE.ConfigSwitches.enableCustomCapes; +import static gtPlusPlus.core.lib.GTPPCore.ConfigSwitches.enableCustomCapes; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -27,6 +27,7 @@ import cpw.mods.fml.common.event.FMLServerStoppingEvent; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; import gregtech.api.enums.Materials; import gregtech.api.recipe.RecipeMaps; import gregtech.api.util.FishPondFakeRecipe; @@ -40,22 +41,22 @@ import gtPlusPlus.core.config.ConfigHandler; import gtPlusPlus.core.handler.BookHandler; import gtPlusPlus.core.handler.PacketHandler; import gtPlusPlus.core.handler.Recipes.RegistrationHandler; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.data.LocaleUtils; -import gtPlusPlus.plugin.manager.Core_Manager; -import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy; +import gtPlusPlus.plugin.manager.CoreManager; +import gtPlusPlus.xmod.gregtech.common.MetaGTProxy; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtTools; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_BlastSmelterGT_GTNH; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_MultisUsingFluidInsteadOfCells; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenBlastSmelterGTNH; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenMultisUsingFluidInsteadOfCells; import gtPlusPlus.xmod.thaumcraft.commands.CommandDumpAspects; @Mod( modid = Names.G_T_PLUS_PLUS, - name = CORE.name, - version = CORE.VERSION, + name = GTPPCore.name, + version = GTPPCore.VERSION, dependencies = "required-after:Forge;" + " after:TConstruct;" + " after:dreamcraft;" + " after:IC2;" @@ -146,7 +147,7 @@ public class GTplusplus implements ActionListener { public void preInit(final FMLPreInitializationEvent event) { INIT_PHASE.PRE_INIT.setPhaseActive(true); // Load all class objects within the plugin package. - Core_Manager.veryEarlyInit(); + CoreManager.veryEarlyInit(); PacketHandler.init(); if (!Utils.isServer()) { @@ -160,12 +161,12 @@ public class GTplusplus implements ActionListener { ConfigHandler.handleConfigFile(event); // Check for Dev - CORE.DEVENV = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); + GTPPCore.DEVENV = (Boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); proxy.preInit(event); - Logger.INFO("Setting up our own GT_Proxy."); - Meta_GT_Proxy.preInit(); - Core_Manager.preInit(); + Logger.INFO("Setting up our own GTProxy."); + MetaGTProxy.preInit(); + CoreManager.preInit(); } // Init @@ -174,10 +175,10 @@ public class GTplusplus implements ActionListener { INIT_PHASE.INIT.setPhaseActive(true); proxy.init(event); proxy.registerNetworkStuff(); - Meta_GT_Proxy.init(); - Core_Manager.init(); + MetaGTProxy.init(); + CoreManager.init(); // Used by foreign players to generate .lang files for translation. - if (CORE.ConfigSwitches.dumpItemAndBlockData) { + if (GTPPCore.ConfigSwitches.dumpItemAndBlockData) { LocaleUtils.generateFakeLocaleFile(); } } @@ -188,8 +189,8 @@ public class GTplusplus implements ActionListener { INIT_PHASE.POST_INIT.setPhaseActive(true); proxy.postInit(event); BookHandler.runLater(); - Meta_GT_Proxy.postInit(); - Core_Manager.postInit(); + MetaGTProxy.postInit(); + CoreManager.postInit(); Logger.INFO("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); Logger.INFO( @@ -201,16 +202,16 @@ public class GTplusplus implements ActionListener { Logger.INFO("Finally, we are finished. Have some cripsy bacon as a reward."); // Log free GT++ Meta IDs - if (CORE.DEVENV) { + if (GTPPCore.DEVENV) { // 750 - 999 are reserved for Alkalus. for (int i = 750; i < 1000; i++) { - if (gregtech.api.GregTech_API.METATILEENTITIES[i] == null) { + if (GregTechAPI.METATILEENTITIES[i] == null) { Logger.INFO("MetaID " + i + " is free."); } } // 30000 - 31999 are reserved for Alkalus. for (int i = 30000; i < 32000; i++) { - if (gregtech.api.GregTech_API.METATILEENTITIES[i] == null) { + if (GregTechAPI.METATILEENTITIES[i] == null) { Logger.INFO("MetaID " + i + " is free."); } } @@ -225,13 +226,13 @@ public class GTplusplus implements ActionListener { if (Thaumcraft.isModLoaded()) { event.registerServerCommand(new CommandDumpAspects()); } - Core_Manager.serverStart(); + CoreManager.serverStart(); INIT_PHASE.STARTED.setPhaseActive(true); } @Mod.EventHandler public synchronized void serverStopping(final FMLServerStoppingEvent event) { - Core_Manager.serverStop(); + CoreManager.serverStop(); } @Override @@ -255,25 +256,25 @@ public class GTplusplus implements ActionListener { int[] mInvalidCount = new int[] { 0, 0, 0, 0, 0, 0, 0 }; - RecipeGen_BlastSmelterGT_GTNH.generateGTNHBlastSmelterRecipesFromEBFList(); + RecipeGenBlastSmelterGTNH.generateGTNHBlastSmelterRecipesFromEBFList(); FishPondFakeRecipe.generateFishPondRecipes(); SemiFluidFuelHandler.generateFuels(); - mInvalidCount[0] = RecipeGen_MultisUsingFluidInsteadOfCells + mInvalidCount[0] = RecipeGenMultisUsingFluidInsteadOfCells .generateRecipesNotUsingCells(RecipeMaps.centrifugeRecipes, GTPPRecipeMaps.centrifugeNonCellRecipes); - mInvalidCount[1] = RecipeGen_MultisUsingFluidInsteadOfCells + mInvalidCount[1] = RecipeGenMultisUsingFluidInsteadOfCells .generateRecipesNotUsingCells(RecipeMaps.electrolyzerRecipes, GTPPRecipeMaps.electrolyzerNonCellRecipes); - mInvalidCount[2] = RecipeGen_MultisUsingFluidInsteadOfCells + mInvalidCount[2] = RecipeGenMultisUsingFluidInsteadOfCells .generateRecipesNotUsingCells(RecipeMaps.vacuumFreezerRecipes, GTPPRecipeMaps.advancedFreezerRecipes); - mInvalidCount[3] = RecipeGen_MultisUsingFluidInsteadOfCells + mInvalidCount[3] = RecipeGenMultisUsingFluidInsteadOfCells .generateRecipesNotUsingCells(RecipeMaps.mixerRecipes, GTPPRecipeMaps.mixerNonCellRecipes); - mInvalidCount[4] = RecipeGen_MultisUsingFluidInsteadOfCells.generateRecipesNotUsingCells( + mInvalidCount[4] = RecipeGenMultisUsingFluidInsteadOfCells.generateRecipesNotUsingCells( GTPPRecipeMaps.chemicalDehydratorRecipes, GTPPRecipeMaps.chemicalDehydratorNonCellRecipes); - mInvalidCount[5] = RecipeGen_MultisUsingFluidInsteadOfCells.generateRecipesNotUsingCells( + mInvalidCount[5] = RecipeGenMultisUsingFluidInsteadOfCells.generateRecipesNotUsingCells( GTPPRecipeMaps.coldTrapRecipes, GTPPRecipeMaps.nuclearSaltProcessingPlantRecipes); - mInvalidCount[6] = RecipeGen_MultisUsingFluidInsteadOfCells.generateRecipesNotUsingCells( + mInvalidCount[6] = RecipeGenMultisUsingFluidInsteadOfCells.generateRecipesNotUsingCells( GTPPRecipeMaps.reactorProcessingUnitRecipes, GTPPRecipeMaps.nuclearSaltProcessingPlantRecipes); } diff --git a/src/main/java/gtPlusPlus/api/objects/Logger.java b/src/main/java/gtPlusPlus/api/objects/Logger.java index 0178bb141a..8b5efa1536 100644 --- a/src/main/java/gtPlusPlus/api/objects/Logger.java +++ b/src/main/java/gtPlusPlus/api/objects/Logger.java @@ -4,8 +4,8 @@ import org.apache.logging.log4j.LogManager; import cpw.mods.fml.common.FMLLog; import cpw.mods.fml.relauncher.FMLRelaunchLog; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.preloader.PreloaderCore; import gtPlusPlus.preloader.asm.AsmConfig; public class Logger { @@ -37,8 +37,8 @@ public class Logger { // Non-Dev Comments public static void MACHINE_INFO(String s, Object... args) { if (enabled) { - boolean localPlayer = CORE_Preloader.DEV_ENVIRONMENT; - if (CORE.ConfigSwitches.MACHINE_INFO || localPlayer) { + boolean localPlayer = PreloaderCore.DEV_ENVIRONMENT; + if (GTPPCore.ConfigSwitches.MACHINE_INFO || localPlayer) { final String name1 = gtPlusPlus.core.util.reflect.ReflectionUtils.getMethodName(2); modLogger.info("Machine Info: " + s + " | " + name1, args); } @@ -48,7 +48,7 @@ public class Logger { // Developer Comments public static void WARNING(final String s) { if (enabled) { - if (CORE_Preloader.DEBUG_MODE) { + if (PreloaderCore.DEBUG_MODE) { modLogger.warn(s); } } @@ -57,7 +57,7 @@ public class Logger { // Errors public static void ERROR(final String s) { if (enabled) { - if (CORE_Preloader.DEBUG_MODE) { + if (PreloaderCore.DEBUG_MODE) { modLogger.fatal(s); } } @@ -95,7 +95,7 @@ public class Logger { */ public static void DEBUG_BEES(final String s) { if (enabled) { - if (CORE_Preloader.DEV_ENVIRONMENT || CORE_Preloader.DEBUG_MODE) { + if (PreloaderCore.DEV_ENVIRONMENT || PreloaderCore.DEBUG_MODE) { modLogger.info("[Debug][Bees] " + s); } } @@ -106,7 +106,7 @@ public class Logger { */ public static void MATERIALS(final String s) { if (enabled) { - if (CORE_Preloader.DEV_ENVIRONMENT || CORE_Preloader.DEBUG_MODE) { + if (PreloaderCore.DEV_ENVIRONMENT || PreloaderCore.DEBUG_MODE) { modLogger.info("[Materials] " + s); } } @@ -117,7 +117,7 @@ public class Logger { */ public static void DEBUG_MATERIALS(final String s) { if (enabled) { - if (CORE_Preloader.DEV_ENVIRONMENT || CORE_Preloader.DEBUG_MODE) { + if (PreloaderCore.DEV_ENVIRONMENT || PreloaderCore.DEBUG_MODE) { modLogger.info("[Debug][Materials] " + s); } } @@ -128,7 +128,7 @@ public class Logger { */ public static void REFLECTION(final String s) { if (enabled) { - if (CORE_Preloader.DEV_ENVIRONMENT || CORE_Preloader.DEBUG_MODE) { + if (PreloaderCore.DEV_ENVIRONMENT || PreloaderCore.DEBUG_MODE) { modLogger.info("[Reflection] " + s); } } @@ -139,7 +139,7 @@ public class Logger { */ public static void WORLD(final String s) { if (enabled) { - if (CORE_Preloader.DEV_ENVIRONMENT || CORE_Preloader.DEBUG_MODE) { + if (PreloaderCore.DEV_ENVIRONMENT || PreloaderCore.DEBUG_MODE) { modLogger.info("[WorldGen] " + s); } } @@ -148,7 +148,7 @@ public class Logger { public static void RECIPE(String string) { if (enabled) { if ( - /* CORE_Preloader.DEV_ENVIRONMENT || */ CORE_Preloader.DEBUG_MODE) { + /* CORE_Preloader.DEV_ENVIRONMENT || */ PreloaderCore.DEBUG_MODE) { modLogger.info("[Recipe] " + string); } } diff --git a/src/main/java/gtPlusPlus/api/objects/minecraft/BTF_Inventory.java b/src/main/java/gtPlusPlus/api/objects/minecraft/BTF_Inventory.java index fc71869d9e..cdbf2c43e2 100644 --- a/src/main/java/gtPlusPlus/api/objects/minecraft/BTF_Inventory.java +++ b/src/main/java/gtPlusPlus/api/objects/minecraft/BTF_Inventory.java @@ -7,7 +7,7 @@ import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraftforge.common.util.ForgeDirection; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.common.covers.CoverInfo; import gtPlusPlus.core.tileentities.base.TileEntityBase; import gtPlusPlus.core.util.data.ArrayUtils; @@ -69,7 +69,7 @@ public class BTF_Inventory implements ISidedInventory { @Override public ItemStack decrStackSize(int aIndex, int aAmount) { ItemStack tStack = this.getStackInSlot(aIndex); - ItemStack rStack = GT_Utility.copy(new Object[] { tStack }); + ItemStack rStack = GTUtility.copy(new Object[] { tStack }); if (tStack != null) { if (tStack.stackSize <= aAmount) { if (this.setStackToZeroInsteadOfNull(aIndex)) { @@ -115,7 +115,7 @@ public class BTF_Inventory implements ISidedInventory { public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { return this.isValidSlot(aIndex) && aStack != null && aIndex < this.mInventory.length - && (this.mInventory[aIndex] == null || GT_Utility.areStacksEqual(aStack, this.mInventory[aIndex])) + && (this.mInventory[aIndex] == null || GTUtility.areStacksEqual(aStack, this.mInventory[aIndex])) && this.allowPutStack(this.mTile, aIndex, ForgeDirection.getOrientation(ordinalSide), aStack); } @@ -133,7 +133,7 @@ public class BTF_Inventory implements ISidedInventory { public boolean allowPutStack(TileEntityBase aBaseMetaTileEntity, int aIndex, ForgeDirection side, ItemStack aStack) { return (aIndex >= 0 && aIndex < this.getSizeInventory()) - && (this.mInventory[aIndex] == null || GT_Utility.areStacksEqual(this.mInventory[aIndex], aStack)); + && (this.mInventory[aIndex] == null || GTUtility.areStacksEqual(this.mInventory[aIndex], aStack)); } @Override @@ -197,7 +197,7 @@ public class BTF_Inventory implements ISidedInventory { for (int s = 0; s < this.getSizeInventory(); s++) { if (mInventory != null && mInventory[s] != null) { ItemStack slot = mInventory[s]; - if (slot == null || (slot != null && GT_Utility.areStacksEqual(aInput, slot) + if (slot == null || (slot != null && GTUtility.areStacksEqual(aInput, slot) && slot.stackSize != slot.getItem() .getItemStackLimit(slot))) { if (slot == null) { diff --git a/src/main/java/gtPlusPlus/api/objects/minecraft/FluidGT6.java b/src/main/java/gtPlusPlus/api/objects/minecraft/FluidGT6.java index c5c903cd1f..031e40508a 100644 --- a/src/main/java/gtPlusPlus/api/objects/minecraft/FluidGT6.java +++ b/src/main/java/gtPlusPlus/api/objects/minecraft/FluidGT6.java @@ -4,7 +4,7 @@ import static gregtech.api.enums.Mods.GTPlusPlus; import net.minecraftforge.fluids.Fluid; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; public class FluidGT6 extends Fluid implements Runnable { @@ -15,8 +15,8 @@ public class FluidGT6 extends Fluid implements Runnable { super(aName); this.mRGBa = aRGBa; this.mTextureName = aTextureName; - if (GregTech_API.sGTBlockIconload != null) { - GregTech_API.sGTBlockIconload.add(this); + if (GregTechAPI.sGTBlockIconload != null) { + GregTechAPI.sGTBlockIconload.add(this); } } @@ -28,6 +28,6 @@ public class FluidGT6 extends Fluid implements Runnable { @Override public void run() { - this.setIcons(GregTech_API.sBlockIcons.registerIcon(GTPlusPlus.ID + ":" + "fluids/fluid." + this.mTextureName)); + this.setIcons(GregTechAPI.sBlockIcons.registerIcon(GTPlusPlus.ID + ":" + "fluids/fluid." + this.mTextureName)); } } diff --git a/src/main/java/gtPlusPlus/api/objects/minecraft/ItemPackage.java b/src/main/java/gtPlusPlus/api/objects/minecraft/ItemPackage.java index d68ef1a93f..e03fbc3c12 100644 --- a/src/main/java/gtPlusPlus/api/objects/minecraft/ItemPackage.java +++ b/src/main/java/gtPlusPlus/api/objects/minecraft/ItemPackage.java @@ -2,7 +2,7 @@ package gtPlusPlus.api.objects.minecraft; import cpw.mods.fml.common.event.FMLLoadCompleteEvent; import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.core.handler.COMPAT_HANDLER; +import gtPlusPlus.core.handler.CompatHandler; public abstract class ItemPackage implements RunnableWithInfo { @@ -12,9 +12,9 @@ public abstract class ItemPackage implements RunnableWithInfo { public ItemPackage(boolean hasExtraLateRun) { // Register for late run - COMPAT_HANDLER.mObjectsToRunInPostInit.put(this); + CompatHandler.mObjectsToRunInPostInit.put(this); if (hasExtraLateRun) { - COMPAT_HANDLER.mObjectsToRunInOnLoadComplete.put(this); + CompatHandler.mObjectsToRunInOnLoadComplete.put(this); } init(); } @@ -47,7 +47,7 @@ public abstract class ItemPackage implements RunnableWithInfo { /** * Override this to handle GT Recipe map manipulation after they're Baked. - * + * * @param event - the {@link FMLLoadCompleteEvent}. * @return - Did we do anything? */ diff --git a/src/main/java/gtPlusPlus/api/objects/minecraft/SafeTexture.java b/src/main/java/gtPlusPlus/api/objects/minecraft/SafeTexture.java index 58a7affa90..60bf94632c 100644 --- a/src/main/java/gtPlusPlus/api/objects/minecraft/SafeTexture.java +++ b/src/main/java/gtPlusPlus/api/objects/minecraft/SafeTexture.java @@ -6,12 +6,12 @@ import net.minecraft.util.IIcon; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gtPlusPlus.core.util.Utils; /** * A Server Side safe object that can hold {@link IIcon}s. - * + * * @author Alkalus * */ @@ -50,7 +50,7 @@ public class SafeTexture implements Runnable { private SafeTexture(String aTexturePath) { mTextureName = aTexturePath; mHash = getKey(aTexturePath).hashCode(); - GregTech_API.sGTBlockIconload.add(this); + GregTechAPI.sGTBlockIconload.add(this); } @SideOnly(Side.CLIENT) @@ -60,6 +60,6 @@ public class SafeTexture implements Runnable { @Override public void run() { - mHashToIconCache.put(getKey(mTextureName).hashCode(), GregTech_API.sBlockIcons.registerIcon(mTextureName)); + mHashToIconCache.put(getKey(mTextureName).hashCode(), GregTechAPI.sBlockIcons.registerIcon(mTextureName)); } } diff --git a/src/main/java/gtPlusPlus/api/recipe/ChemicalPlantFrontend.java b/src/main/java/gtPlusPlus/api/recipe/ChemicalPlantFrontend.java index beede78173..48f055f4f8 100644 --- a/src/main/java/gtPlusPlus/api/recipe/ChemicalPlantFrontend.java +++ b/src/main/java/gtPlusPlus/api/recipe/ChemicalPlantFrontend.java @@ -13,7 +13,7 @@ import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.recipe.RecipeMapFrontend; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.common.gui.modularui.UIHelper; -import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.nei.GTNEIDefaultHandler; import gtPlusPlus.core.util.minecraft.ItemUtils; @ParametersAreNonnullByDefault @@ -47,7 +47,7 @@ public class ChemicalPlantFrontend extends RecipeMapFrontend { @Override protected List handleNEIItemInputTooltip(List currentTip, - GT_NEI_DefaultHandler.FixedPositionedStack pStack) { + GTNEIDefaultHandler.FixedPositionedStack pStack) { if (ItemUtils.isCatalyst(pStack.item)) { currentTip.add(GRAY + "Does not always get consumed in the process"); currentTip.add(GRAY + "Higher tier pipe casings allow this item to last longer"); @@ -58,7 +58,7 @@ public class ChemicalPlantFrontend extends RecipeMapFrontend { } @Override - protected void drawNEIOverlayForInput(GT_NEI_DefaultHandler.FixedPositionedStack stack) { + protected void drawNEIOverlayForInput(GTNEIDefaultHandler.FixedPositionedStack stack) { if (ItemUtils.isCatalyst(stack.item)) { drawNEIOverlayText("NC*", stack); } else { diff --git a/src/main/java/gtPlusPlus/api/recipe/GTPPRecipeMaps.java b/src/main/java/gtPlusPlus/api/recipe/GTPPRecipeMaps.java index 6958f71080..e6610c40df 100644 --- a/src/main/java/gtPlusPlus/api/recipe/GTPPRecipeMaps.java +++ b/src/main/java/gtPlusPlus/api/recipe/GTPPRecipeMaps.java @@ -1,6 +1,6 @@ package gtPlusPlus.api.recipe; -import static gregtech.api.util.GT_RecipeConstants.LFTR_OUTPUT_POWER; +import static gregtech.api.util.GTRecipeConstants.LFTR_OUTPUT_POWER; import java.util.Arrays; import java.util.Collections; @@ -9,28 +9,28 @@ import net.minecraft.util.StatCollector; import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBuilder; import gregtech.api.recipe.maps.FluidOnlyFrontend; import gregtech.api.recipe.maps.FuelBackend; import gregtech.api.recipe.maps.LargeNEIFrontend; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gregtech.nei.formatter.FuelSpecialValueFormatter; import gregtech.nei.formatter.HeatingCoilSpecialValueFormatter; import gregtech.nei.formatter.SimpleSpecialValueFormatter; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.api.gui.GTPP_UITextures; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntityTreeFarm; +import gtPlusPlus.xmod.gregtech.api.gui.GTPPUITextures; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTETreeFarm; public class GTPPRecipeMaps { public static final RecipeMap cokeOvenRecipes = RecipeMapBuilder.of("gtpp.recipe.cokeoven") .maxIO(2, 9, 1, 1) .minInputs(1, 0) - .progressBar(GT_UITextures.PROGRESSBAR_SIFT, ProgressBar.Direction.DOWN) + .progressBar(GTUITextures.PROGRESSBAR_SIFT, ProgressBar.Direction.DOWN) .build(); public static final RecipeMap multiblockMassFabricatorRecipes = RecipeMapBuilder .of("gtpp.recipe.matterfab2") @@ -43,13 +43,13 @@ public class GTPPRecipeMaps { recipeInfo -> Collections.singletonList( StatCollector.translateToLocalFormatted( "GT5U.nei.fuel", - GT_Utility.formatNumbers(recipeInfo.recipe.mSpecialValue * 3000L)))) + GTUtility.formatNumbers(recipeInfo.recipe.mSpecialValue * 3000L)))) .build(); public static final RecipeMap quantumForceTransformerRecipes = RecipeMapBuilder .of("gtpp.recipe.quantumforcesmelter") .maxIO(6, 6, 6, 6) .minInputs(1, 0) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("GT5U.nei.tier")) .frontend(QuantumForceTransformerFrontend::new) .disableOptimize() @@ -57,7 +57,7 @@ public class GTPPRecipeMaps { public static final RecipeMap chemicalDehydratorRecipes = RecipeMapBuilder .of("gtpp.recipe.chemicaldehydrator") .maxIO(2, 9, 1, 1) - .progressBar(GT_UITextures.PROGRESSBAR_SIFT, ProgressBar.Direction.DOWN) + .progressBar(GTUITextures.PROGRESSBAR_SIFT, ProgressBar.Direction.DOWN) .disableOptimize() .build(); public static final RecipeMap vacuumFurnaceRecipes = RecipeMapBuilder.of("gtpp.recipe.vacfurnace") @@ -82,7 +82,7 @@ public class GTPPRecipeMaps { final long eut = recipeInfo.recipe.getMetadataOrDefault(LFTR_OUTPUT_POWER, 0); final int duration = recipeInfo.recipe.mDuration; return Arrays.asList( - StatCollector.translateToLocalFormatted("gtpp.nei.lftr.power", GT_Utility.formatNumbers(eut)), + StatCollector.translateToLocalFormatted("gtpp.nei.lftr.power", GTUtility.formatNumbers(eut)), StatCollector .translateToLocalFormatted("gtpp.nei.lftr.dynamo", MathUtils.formatNumbers(duration * eut)), StatCollector @@ -109,25 +109,25 @@ public class GTPPRecipeMaps { .build(); public static final RecipeMap coldTrapRecipes = RecipeMapBuilder.of("gtpp.recipe.coldtrap") .maxIO(2, 9, 1, 1) - .progressBar(GT_UITextures.PROGRESSBAR_SIFT, ProgressBar.Direction.DOWN) + .progressBar(GTUITextures.PROGRESSBAR_SIFT, ProgressBar.Direction.DOWN) .build(); public static final RecipeMap reactorProcessingUnitRecipes = RecipeMapBuilder .of("gtpp.recipe.reactorprocessingunit") .maxIO(2, 9, 1, 1) - .progressBar(GT_UITextures.PROGRESSBAR_SIFT, ProgressBar.Direction.DOWN) + .progressBar(GTUITextures.PROGRESSBAR_SIFT, ProgressBar.Direction.DOWN) .build(); public static final RecipeMap simpleWasherRecipes = RecipeMapBuilder .of("gtpp.recipe.simplewasher") .maxIO(1, 1, 1, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_CAULDRON : null) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_CAULDRON : null) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .build(); public static final RecipeMap molecularTransformerRecipes = RecipeMapBuilder .of("gtpp.recipe.moleculartransformer") .maxIO(1, 1, 0, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_MICROSCOPE + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_MICROSCOPE : null) .neiHandlerInfo( builder -> builder @@ -139,16 +139,16 @@ public class GTPPRecipeMaps { .slotOverlays((index, isFluid, isOutput, isSpecial) -> { if (isFluid) { if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_VIAL_2; + return GTUITextures.OVERLAY_SLOT_VIAL_2; } - return GT_UITextures.OVERLAY_SLOT_MOLECULAR_3; + return GTUITextures.OVERLAY_SLOT_MOLECULAR_3; } if (isOutput) { - return GT_UITextures.OVERLAY_SLOT_VIAL_1; + return GTUITextures.OVERLAY_SLOT_VIAL_1; } - return GT_UITextures.OVERLAY_SLOT_MOLECULAR_1; + return GTUITextures.OVERLAY_SLOT_MOLECULAR_1; }) - .progressBar(GTPP_UITextures.PROGRESSBAR_FLUID_REACTOR, ProgressBar.Direction.CIRCULAR_CW) + .progressBar(GTPPUITextures.PROGRESSBAR_FLUID_REACTOR, ProgressBar.Direction.CIRCULAR_CW) .progressBarPos(82, 24) .neiSpecialInfoFormatter(recipeInfo -> { int tier = recipeInfo.recipe.mSpecialValue + 1; @@ -184,8 +184,8 @@ public class GTPPRecipeMaps { public static final RecipeMap fishPondRecipes = RecipeMapBuilder.of("gtpp.recipe.fishpond") .maxIO(1, 1, 0, 0) .slotOverlays( - (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GT_UITextures.OVERLAY_SLOT_CAULDRON : null) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW_MULTIPLE) + (index, isFluid, isOutput, isSpecial) -> !isFluid && !isOutput ? GTUITextures.OVERLAY_SLOT_CAULDRON : null) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) .build(); public static final RecipeMap spargeTowerFakeRecipes = RecipeMapBuilder .of("gtpp.recipe.spargetower") @@ -199,18 +199,18 @@ public class GTPPRecipeMaps { public static final RecipeMap centrifugeNonCellRecipes = RecipeMapBuilder .of("gtpp.recipe.multicentrifuge") .maxIO(6, 6, 6, 6) - .progressBar(GT_UITextures.PROGRESSBAR_EXTRACT) + .progressBar(GTUITextures.PROGRESSBAR_EXTRACT) .frontend(LargeNEIFrontend::new) .build(); public static final RecipeMap electrolyzerNonCellRecipes = RecipeMapBuilder .of("gtpp.recipe.multielectro") .maxIO(6, 6, 6, 6) - .progressBar(GT_UITextures.PROGRESSBAR_EXTRACT) + .progressBar(GTUITextures.PROGRESSBAR_EXTRACT) .frontend(LargeNEIFrontend::new) .build(); public static final RecipeMap mixerNonCellRecipes = RecipeMapBuilder.of("gtpp.recipe.multimixer") .maxIO(9, 9, 6, 6) - .progressBar(GT_UITextures.PROGRESSBAR_MIXER, ProgressBar.Direction.CIRCULAR_CW) + .progressBar(GTUITextures.PROGRESSBAR_MIXER, ProgressBar.Direction.CIRCULAR_CW) .frontend(LargeNEIFrontend::new) .build(); public static final RecipeMap chemicalDehydratorNonCellRecipes = RecipeMapBuilder @@ -230,11 +230,7 @@ public class GTPPRecipeMaps { .build(); public static final RecipeMap treeGrowthSimulatorFakeRecipes = RecipeMapBuilder .of("gtpp.recipe.treefarm") - .maxIO( - GregtechMetaTileEntityTreeFarm.Mode.values().length, - GregtechMetaTileEntityTreeFarm.Mode.values().length, - 0, - 0) + .maxIO(MTETreeFarm.Mode.values().length, MTETreeFarm.Mode.values().length, 0, 0) .minInputs(1, 0) .useSpecialSlot() .frontend(TGSFrontend::new) diff --git a/src/main/java/gtPlusPlus/api/recipe/MillingFrontend.java b/src/main/java/gtPlusPlus/api/recipe/MillingFrontend.java index 26e2ab2ec9..eab57490bc 100644 --- a/src/main/java/gtPlusPlus/api/recipe/MillingFrontend.java +++ b/src/main/java/gtPlusPlus/api/recipe/MillingFrontend.java @@ -12,7 +12,7 @@ import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.recipe.RecipeMapFrontend; import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.nei.GTNEIDefaultHandler; import gtPlusPlus.core.util.minecraft.ItemUtils; @ParametersAreNonnullByDefault @@ -26,7 +26,7 @@ public class MillingFrontend extends RecipeMapFrontend { @Override protected List handleNEIItemInputTooltip(List currentTip, - GT_NEI_DefaultHandler.FixedPositionedStack pStack) { + GTNEIDefaultHandler.FixedPositionedStack pStack) { if (ItemUtils.isMillingBall(pStack.item)) { currentTip.add(GRAY + StatCollector.translateToLocal("gtpp.nei.milling.not_consumed")); } else { @@ -36,7 +36,7 @@ public class MillingFrontend extends RecipeMapFrontend { } @Override - protected void drawNEIOverlayForInput(GT_NEI_DefaultHandler.FixedPositionedStack stack) { + protected void drawNEIOverlayForInput(GTNEIDefaultHandler.FixedPositionedStack stack) { if (ItemUtils.isMillingBall(stack.item)) { drawNEIOverlayText("NC*", stack); } else { diff --git a/src/main/java/gtPlusPlus/api/recipe/QuantumForceTransformerFrontend.java b/src/main/java/gtPlusPlus/api/recipe/QuantumForceTransformerFrontend.java index 93f19af9e8..6146856ecb 100644 --- a/src/main/java/gtPlusPlus/api/recipe/QuantumForceTransformerFrontend.java +++ b/src/main/java/gtPlusPlus/api/recipe/QuantumForceTransformerFrontend.java @@ -7,8 +7,8 @@ import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.recipe.maps.LargeNEIFrontend; import gregtech.api.util.MethodsReturnNonnullByDefault; -import gregtech.nei.GT_NEI_DefaultHandler; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_QuantumForceTransformer; +import gregtech.nei.GTNEIDefaultHandler; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTEQuantumForceTransformer; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -20,17 +20,17 @@ public class QuantumForceTransformerFrontend extends LargeNEIFrontend { } public String getChanceFormat(int chance) { - return GT_NEI_DefaultHandler.FixedPositionedStack.chanceFormat.format((float) chance / 10000); + return GTNEIDefaultHandler.FixedPositionedStack.chanceFormat.format((float) chance / 10000); } @Override - public void drawNEIOverlays(GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + public void drawNEIOverlays(GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { // Replicates the default behaviour, but since we cannot actually modify the mChance variable we need to // essentially re-implement it. - int chance = GregtechMetaTileEntity_QuantumForceTransformer.getBaseOutputChance(neiCachedRecipe.mRecipe); + int chance = MTEQuantumForceTransformer.getBaseOutputChance(neiCachedRecipe.mRecipe); String chanceFormat = getChanceFormat(chance); for (PositionedStack stack : neiCachedRecipe.mOutputs) { - if (stack instanceof GT_NEI_DefaultHandler.FixedPositionedStack) { + if (stack instanceof GTNEIDefaultHandler.FixedPositionedStack) { super.drawNEIOverlayText(chanceFormat, stack); } } diff --git a/src/main/java/gtPlusPlus/api/recipe/TGSFrontend.java b/src/main/java/gtPlusPlus/api/recipe/TGSFrontend.java index e57ebaf5f9..e7253b6ea5 100644 --- a/src/main/java/gtPlusPlus/api/recipe/TGSFrontend.java +++ b/src/main/java/gtPlusPlus/api/recipe/TGSFrontend.java @@ -15,14 +15,14 @@ import com.gtnewhorizons.modularui.api.math.Pos2d; import gregtech.api.recipe.BasicUIPropertiesBuilder; import gregtech.api.recipe.NEIRecipePropertiesBuilder; import gregtech.api.recipe.RecipeMapFrontend; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; import gregtech.api.util.MethodsReturnNonnullByDefault; import gregtech.common.gui.modularui.UIHelper; -import gregtech.nei.GT_NEI_DefaultHandler; +import gregtech.nei.GTNEIDefaultHandler; import gregtech.nei.RecipeDisplayInfo; import gregtech.nei.formatter.INEISpecialInfoFormatter; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntityTreeFarm; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntityTreeFarm.Mode; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTETreeFarm; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTETreeFarm.Mode; @ParametersAreNonnullByDefault @MethodsReturnNonnullByDefault @@ -80,15 +80,15 @@ public class TGSFrontend extends RecipeMapFrontend { @Override public List handleNEIItemTooltip(ItemStack stack, List currentTip, - GT_NEI_DefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { /* * This gets a little complicated, because we want to assign tooltips to inputs/outputs based on which mode * (saw, shears, etc.) they correspond to. But CachedDefaultRecipe does not retain this information for us. This * is because some recipes don't output any items for some modes. For example, if a recipe only yields logs and - * leaves, then the outputs of GT_Recipe will be {log, null, leaves}. However, in CachedDefaultRecipe this gets + * leaves, then the outputs of GTRecipe will be {log, null, leaves}. However, in CachedDefaultRecipe this gets * condensed to just {log, leaves}, with null values omitted. So to figure out which item came from which mode, - * we need to step through both of these arrays simultaneously and match non-null inputs/outputs in GT_Recipe to + * we need to step through both of these arrays simultaneously and match non-null inputs/outputs in GTRecipe to * inputs/outputs in CachedDefaultRecipe. */ @@ -99,7 +99,7 @@ public class TGSFrontend extends RecipeMapFrontend { return currentTip; } - GT_Recipe.GT_Recipe_WithAlt recipe = (GT_Recipe.GT_Recipe_WithAlt) neiCachedRecipe.mRecipe; + GTRecipe.GTRecipe_WithAlt recipe = (GTRecipe.GTRecipe_WithAlt) neiCachedRecipe.mRecipe; // Inputs int slot = 0; @@ -107,7 +107,7 @@ public class TGSFrontend extends RecipeMapFrontend { if (mode < recipe.mOreDictAlt.length && recipe.mOreDictAlt[mode] != null) { // There is a valid input in this mode. if (slot < neiCachedRecipe.mInputs.size() && stack == neiCachedRecipe.mInputs.get(slot).item) { - int toolMultiplier = GregtechMetaTileEntityTreeFarm.getToolMultiplier(stack, Mode.values()[mode]); + int toolMultiplier = MTETreeFarm.getToolMultiplier(stack, Mode.values()[mode]); currentTip.add(EnumChatFormatting.YELLOW + tooltipInputs[mode]); if (toolMultiplier > 0) { currentTip.add(EnumChatFormatting.YELLOW + tooltipMultiplier + " " + toolMultiplier + "x"); diff --git a/src/main/java/gtPlusPlus/core/block/ModBlocks.java b/src/main/java/gtPlusPlus/core/block/ModBlocks.java index 417b342f7e..6169581257 100644 --- a/src/main/java/gtPlusPlus/core/block/ModBlocks.java +++ b/src/main/java/gtPlusPlus/core/block/ModBlocks.java @@ -5,19 +5,19 @@ import net.minecraftforge.fluids.Fluid; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.block.general.BlockCompressedObsidian; -import gtPlusPlus.core.block.general.FluidTankInfinite; -import gtPlusPlus.core.block.general.HellFire; -import gtPlusPlus.core.block.general.LightGlass; -import gtPlusPlus.core.block.general.MiningExplosives; +import gtPlusPlus.core.block.general.BlockFluidTankInfinite; +import gtPlusPlus.core.block.general.BlockHellFire; +import gtPlusPlus.core.block.general.BlockLightGlass; +import gtPlusPlus.core.block.general.BlockMiningExplosives; import gtPlusPlus.core.block.general.antigrief.BlockWitherProof; -import gtPlusPlus.core.block.machine.CircuitProgrammer; -import gtPlusPlus.core.block.machine.DecayablesChest; -import gtPlusPlus.core.block.machine.FishTrap; -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_SuperJukebox; -import gtPlusPlus.core.block.machine.VolumetricFlaskSetter; +import gtPlusPlus.core.block.machine.BlockCircuitProgrammer; +import gtPlusPlus.core.block.machine.BlockDecayablesChest; +import gtPlusPlus.core.block.machine.BlockFishTrap; +import gtPlusPlus.core.block.machine.BlockFlaskSetter; +import gtPlusPlus.core.block.machine.BlockPestKiller; +import gtPlusPlus.core.block.machine.BlockPooCollector; +import gtPlusPlus.core.block.machine.BlockProjectTable; +import gtPlusPlus.core.block.machine.BlockSuperJukebox; import gtPlusPlus.core.fluids.FluidRegistryHandler; public final class ModBlocks { @@ -68,31 +68,31 @@ public final class ModBlocks { public static void registerBlocks() { Logger.INFO("Registering Blocks."); - MatterFabricatorEffectBlock = new LightGlass(false); + MatterFabricatorEffectBlock = new BlockLightGlass(false); // Fluids FluidRegistryHandler.registerFluids(); // Workbench - blockFishTrap = new FishTrap(); - blockInfiniteFLuidTank = new FluidTankInfinite(); - blockMiningExplosive = new MiningExplosives(); - blockHellfire = new HellFire(); - blockProjectTable = new Machine_ProjectTable(); + blockFishTrap = new BlockFishTrap(); + blockInfiniteFLuidTank = new BlockFluidTankInfinite(); + blockMiningExplosive = new BlockMiningExplosives(); + blockHellfire = new BlockHellFire(); + blockProjectTable = new BlockProjectTable(); blockWitherGuard = new BlockWitherProof(); blockCompressedObsidian = new BlockCompressedObsidian(); - blockCircuitProgrammer = new CircuitProgrammer(); + blockCircuitProgrammer = new BlockCircuitProgrammer(); - blockDecayablesChest = new DecayablesChest(); + blockDecayablesChest = new BlockDecayablesChest(); - blockCustomJukebox = new Machine_SuperJukebox(); + blockCustomJukebox = new BlockSuperJukebox(); - blockPooCollector = new Machine_PooCollector(); + blockPooCollector = new BlockPooCollector(); - blockPestKiller = new Machine_PestKiller(); + blockPestKiller = new BlockPestKiller(); - blockVolumetricFlaskSetter = new VolumetricFlaskSetter(); + blockVolumetricFlaskSetter = new BlockFlaskSetter(); } } diff --git a/src/main/java/gtPlusPlus/core/block/base/BasicTileBlockWithTooltip.java b/src/main/java/gtPlusPlus/core/block/base/BasicTileBlockWithTooltip.java index c39565ea41..bace2937fd 100644 --- a/src/main/java/gtPlusPlus/core/block/base/BasicTileBlockWithTooltip.java +++ b/src/main/java/gtPlusPlus/core/block/base/BasicTileBlockWithTooltip.java @@ -30,7 +30,7 @@ import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.api.objects.minecraft.CubicObject; import gtPlusPlus.api.objects.minecraft.SafeTexture; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.InventoryUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -63,7 +63,7 @@ public abstract class BasicTileBlockWithTooltip extends BlockContainer implement /** * Does this {@link Block} require special {@link ItemBlock} handling? - * + * * @return The {@link Class} that will be used for this {@link Block}. */ public Class getItemBlockClass() { @@ -72,28 +72,28 @@ public abstract class BasicTileBlockWithTooltip extends BlockContainer implement /** * A lazy way to declare the unlocal name for the block, makes boilerplating easy. - * + * * @return The internal name for this block. */ public abstract String getUnlocalBlockName(); /** * Lazy Boilerplating. - * + * * @return Block Hardness. */ protected abstract float initBlockHardness(); /** * Lazy Boilerplating. - * + * * @return Block Resistance. */ protected abstract float initBlockResistance(); /** * Lazy Boilerplating. - * + * * @return The {@link CreativeTab} this Block is shown on. */ protected abstract CreativeTabs initCreativeTab(); @@ -128,7 +128,7 @@ public abstract class BasicTileBlockWithTooltip extends BlockContainer implement /** * The String used for texture pathing. - * + * * @return Sanitized {@link String}, containing no spaces or illegal characters. */ private String getTileEntityNameForTexturePathing() { @@ -172,9 +172,9 @@ public abstract class BasicTileBlockWithTooltip extends BlockContainer implement // Default Path Name, this will make us look inside 'miscutils\textures\blocks' final String aPrefixTexPath = GTPlusPlus.ID + ":"; // Default Path Name, this will make us look in the subdirectory for this Tile Entity. - final String aTexPathMid = "TileEntities" + CORE.SEPERATOR + final String aTexPathMid = "TileEntities" + GTPPCore.SEPERATOR + getTileEntityNameForTexturePathing() - + CORE.SEPERATOR; + + GTPPCore.SEPERATOR; // Construct a full path String aTexPathBuilt = aPrefixTexPath + aTexPathMid; // File Name Suffixes, without meta tags diff --git a/src/main/java/gtPlusPlus/core/block/base/BlockBaseModular.java b/src/main/java/gtPlusPlus/core/block/base/BlockBaseModular.java index b07c6d1529..abd83d7171 100644 --- a/src/main/java/gtPlusPlus/core/block/base/BlockBaseModular.java +++ b/src/main/java/gtPlusPlus/core/block/base/BlockBaseModular.java @@ -16,11 +16,11 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TextureSet; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.item.base.itemblock.ItemBlockGtBlock; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.math.MathUtils; @@ -58,7 +58,7 @@ public class BlockBaseModular extends BasicBlock { registerComponent(); sBlockCache.put(material.getUnlocalizedName() + "." + blockType.name(), this); thisBlockMaterialTranslatedName = material.getTranslatedName(); - GT_LanguageManager.addStringLocalization("gtplusplus." + getUnlocalizedName() + ".name", getProperName()); + GTLanguageManager.addStringLocalization("gtplusplus." + getUnlocalizedName() + ".name", getProperName()); } protected BlockBaseModular(final String unlocalizedName, final String blockMaterialString, @@ -79,13 +79,13 @@ public class BlockBaseModular extends BasicBlock { ItemBlockGtBlock.class, Utils.sanitizeString(blockType.getTexture() + unlocalizedName)); if (fx == 0) { - GT_OreDictUnificator + GTOreDictUnificator .registerOre("block" + unifyMaterialName(thisBlockMaterial), ItemUtils.getSimpleStack(this)); } else if (fx == 1) { - GT_OreDictUnificator + GTOreDictUnificator .registerOre("frameGt" + unifyMaterialName(thisBlockMaterial), ItemUtils.getSimpleStack(this)); } else if (fx == 2) { - GT_OreDictUnificator + GTOreDictUnificator .registerOre("frameGt" + unifyMaterialName(thisBlockMaterial), ItemUtils.getSimpleStack(this)); } } @@ -172,7 +172,7 @@ public class BlockBaseModular extends BasicBlock { @Override public String getLocalizedName() { - return GT_LanguageManager.getTranslation("gtplusplus." + getUnlocalizedName() + ".name") + return GTLanguageManager.getTranslation("gtplusplus." + getUnlocalizedName() + ".name") .replace("%s", "%temp") .replace("%material", this.thisBlockMaterialTranslatedName) .replace("%temp", "%s"); @@ -198,7 +198,7 @@ public class BlockBaseModular extends BasicBlock { @Override @SideOnly(Side.CLIENT) public void registerBlockIcons(final IIconRegister iIcon) { - if (!CORE.ConfigSwitches.useGregtechTextures || this.blockMaterial == null + if (!GTPPCore.ConfigSwitches.useGregtechTextures || this.blockMaterial == null || this.thisBlock == BlockTypes.ORE) { this.blockIcon = iIcon.registerIcon(GTPlusPlus.ID + ":" + this.thisBlock.getTexture()); } diff --git a/src/main/java/gtPlusPlus/core/block/base/BlockBaseOre.java b/src/main/java/gtPlusPlus/core/block/base/BlockBaseOre.java index 1813090810..b0ee1c0c77 100644 --- a/src/main/java/gtPlusPlus/core/block/base/BlockBaseOre.java +++ b/src/main/java/gtPlusPlus/core/block/base/BlockBaseOre.java @@ -18,12 +18,12 @@ import net.minecraftforge.common.util.FakePlayer; import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.GT_Mod; +import gregtech.GTMod; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.Textures; import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.interfaces.ITexturedBlock; import gtPlusPlus.core.client.renderer.CustomOreBlockRenderer; import gtPlusPlus.core.item.base.itemblock.ItemBlockOre; @@ -31,8 +31,8 @@ import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.gregtech.api.objects.GTPP_CopiedBlockTexture; -import gtPlusPlus.xmod.gregtech.api.objects.GTPP_RenderedTexture; +import gtPlusPlus.xmod.gregtech.api.objects.GTPPCopiedBlockTexture; +import gtPlusPlus.xmod.gregtech.api.objects.GTPPRenderedTexture; public class BlockBaseOre extends BasicBlock implements ITexturedBlock { @@ -60,7 +60,7 @@ public class BlockBaseOre extends BasicBlock implements ITexturedBlock { this, ItemBlockOre.class, Utils.sanitizeString("ore" + Utils.sanitizeString(this.blockMaterial.getLocalizedName()))); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( "ore" + Utils.sanitizeString(this.blockMaterial.getLocalizedName()), ItemUtils.getSimpleStack(this)); } catch (Throwable t) { @@ -115,10 +115,10 @@ public class BlockBaseOre extends BasicBlock implements ITexturedBlock { @Override public ITexture[] getTexture(Block block, ForgeDirection side) { if (this.blockMaterial != null) { - GTPP_RenderedTexture aIconSet = new GTPP_RenderedTexture( + GTPPRenderedTexture aIconSet = new GTPPRenderedTexture( blockMaterial.getTextureSet().mTextures[OrePrefixes.ore.mTextureIndex], this.blockMaterial.getRGBA()); - return new ITexture[] { new GTPP_CopiedBlockTexture(Blocks.stone, 0, 0), aIconSet }; + return new ITexture[] { new GTPPCopiedBlockTexture(Blocks.stone, 0, 0), aIconSet }; } if (hiddenTextureArray == null) { @@ -134,7 +134,7 @@ public class BlockBaseOre extends BasicBlock implements ITexturedBlock { hiddenTextureArray = new IIconContainer[6]; } } - return new ITexture[] { new GTPP_RenderedTexture(hiddenTextureArray[0], new short[] { 240, 240, 240, 0 }) }; + return new ITexture[] { new GTPPRenderedTexture(hiddenTextureArray[0], new short[] { 240, 240, 240, 0 }) }; } @Override @@ -167,7 +167,7 @@ public class BlockBaseOre extends BasicBlock implements ITexturedBlock { if (shouldSilkTouch) { drops.add(ItemUtils.simpleMetaStack(this, metadata, 1)); } else { - switch (GT_Mod.gregtechproxy.oreDropSystem) { + switch (GTMod.gregtechproxy.oreDropSystem) { case Item -> { drops.add( ItemUtils.getItemStackOfAmountFromOreDictNoBroken( diff --git a/src/main/java/gtPlusPlus/core/block/general/BlockFluidTankInfinite.java b/src/main/java/gtPlusPlus/core/block/general/BlockFluidTankInfinite.java new file mode 100644 index 0000000000..a300b83577 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/general/BlockFluidTankInfinite.java @@ -0,0 +1,141 @@ +package gtPlusPlus.core.block.general; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidContainerRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.ItemFluidContainer; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.tileentities.general.TileEntityInfiniteFluid; +import gtPlusPlus.core.util.minecraft.PlayerUtils; + +public class BlockFluidTankInfinite extends BlockContainer { + + @SideOnly(Side.CLIENT) + private IIcon textureTop; + + @SideOnly(Side.CLIENT) + private IIcon textureBottom; + + @SideOnly(Side.CLIENT) + private IIcon textureFront; + + public BlockFluidTankInfinite() { + super(Material.iron); + this.setBlockName("blockInfiniteFluidTank"); + this.setCreativeTab(AddToCreativeTab.tabMachines); + GameRegistry.registerBlock(this, "blockInfiniteFluidTank"); + } + + /** + * Gets the block's texture. Args: side, meta + */ + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int ordinalSide, final int meta) { + return ordinalSide == 1 ? this.textureTop + : (ordinalSide == 0 ? this.textureBottom + : ((ordinalSide != 2) && (ordinalSide != 4) ? this.blockIcon : this.textureFront)); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister p_149651_1_) { + this.blockIcon = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "Generic_Creative_Texture"); + this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "Generic_Creative_Texture"); + this.textureBottom = p_149651_1_ + .registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "Generic_Creative_Texture"); + this.textureFront = p_149651_1_ + .registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "Generic_Creative_Texture"); + } + + /** + * 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 { + TileEntityInfiniteFluid tank = (TileEntityInfiniteFluid) world.getTileEntity(x, y, z); + if (tank != null) { + Item handItem; + try { + handItem = player.getHeldItem() + .getItem(); + } catch (Throwable t) { + handItem = null; + } + if (handItem != null + && (handItem instanceof IFluidContainerItem || handItem instanceof ItemFluidContainer + || FluidContainerRegistry.isFilledContainer(player.getHeldItem()))) { + if (tank.tank.getFluid() == null) { + try { + if (!FluidContainerRegistry.isFilledContainer(player.getHeldItem())) { + ItemStack handItemStack = player.getHeldItem(); + IFluidContainerItem container = (IFluidContainerItem) handItem; + FluidStack containerFluid = container.getFluid(handItemStack); + container.drain(handItemStack, container.getFluid(handItemStack).amount, true); + tank.tank.setFluid(containerFluid); + } else { + ItemStack handItemStack = player.getHeldItem(); + FluidContainerRegistry.drainFluidContainer(handItemStack); + FluidStack containerFluid = FluidContainerRegistry.getFluidForFilledItem(handItemStack); + ItemStack emptyContainer = FluidContainerRegistry.drainFluidContainer(handItemStack); + player.setItemInUse(emptyContainer, 0); + + tank.tank.setFluid(containerFluid); + } + } catch (Throwable t) { + t.printStackTrace(); + } + } + } + if (tank.tank.getFluid() != null) { + PlayerUtils.messagePlayer( + player, + "This tank contains " + tank.tank.getFluidAmount() + + "L of " + + tank.tank.getFluid() + .getLocalizedName()); + } + } + } + return true; + } + + @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 TileEntityInfiniteFluid(); + } + + @Override + public void onBlockAdded(World world, int x, int y, int z) { + super.onBlockAdded(world, x, y, z); + } +} diff --git a/src/main/java/gtPlusPlus/core/block/general/BlockHellFire.java b/src/main/java/gtPlusPlus/core/block/general/BlockHellFire.java new file mode 100644 index 0000000000..b18a2d4b86 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/general/BlockHellFire.java @@ -0,0 +1,535 @@ +package gtPlusPlus.core.block.general; + +import static gregtech.api.enums.Mods.GTPlusPlus; +import static net.minecraftforge.common.util.ForgeDirection.DOWN; +import static net.minecraftforge.common.util.ForgeDirection.EAST; +import static net.minecraftforge.common.util.ForgeDirection.NORTH; +import static net.minecraftforge.common.util.ForgeDirection.SOUTH; +import static net.minecraftforge.common.util.ForgeDirection.UP; +import static net.minecraftforge.common.util.ForgeDirection.WEST; + +import java.util.IdentityHashMap; +import java.util.Map.Entry; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockFire; +import net.minecraft.block.material.MapColor; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.collect.Maps; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.objects.XSTR; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.util.math.MathUtils; + +public class BlockHellFire extends BlockFire { + + private final int[] field_149849_a = new int[Short.MAX_VALUE]; + + private final int[] field_149848_b = new int[Short.MAX_VALUE]; + + @SideOnly(Side.CLIENT) + private IIcon[] IIconArray; + + public BlockHellFire() { + this.setTickRandomly(true); + this.setLightLevel(1F); + this.setLightOpacity(0); + // this.setBlockTextureName(GTPlusPlus.ID + "hellfire/blockHellFire"); + this.setBlockName("blockHellFire"); + this.setCreativeTab(AddToCreativeTab.tabBlock); + GameRegistry.registerBlock(this, "blockHellFire"); + this.enableBrutalFire(); + } + + private void enableBrutalFire() { + for (final Object o : Block.blockRegistry.getKeys()) { + + try { + + final String name = (String) o; + final Block b = Block.getBlockFromName(name); + if (b != Blocks.air) { + final int spread = Blocks.fire.getEncouragement(b); + final int flamm = Blocks.fire.getFlammability(b); + if (flamm > 0 && spread > 0) { + this.setFireInfo(b, spread * 4, flamm * 4); + } + } + + } catch (Throwable t) { + t.printStackTrace(); + } + } + + // Special Case madness + this.setFireInfo(Blocks.brown_mushroom_block, 20, 100); + this.setFireInfo(Blocks.red_mushroom_block, 20, 100); + this.setFireInfo(Blocks.grass, 20, 100); + this.setFireInfo(Blocks.mycelium, 20, 100); + } + + /** + * How many world ticks before ticking + */ + @Override + public int tickRate(final World world) { + return 5; + } + + /** + * Ticks the block if it's been scheduled + */ + @Override + public void updateTick(final World world, final int x, final int y, final int z, Random random) { + + random = new XSTR(); + + if (world.getGameRules() + .getGameRuleBooleanValue("doFireTick")) { + final boolean flag = world.getBlock(x, y - 1, z) + .isFireSource(world, x, y - 1, z, UP); + + if (!this.canPlaceBlockAt(world, x, y, z)) { + world.setBlockToAir(x, y, z); + } + + if (!flag && world.isRaining() + && (world.canLightningStrikeAt(x, y, z) || world.canLightningStrikeAt(x - 1, y, z) + || world.canLightningStrikeAt(x + 1, y, z) + || world.canLightningStrikeAt(x, y, z - 1) + || world.canLightningStrikeAt(x, y, z + 1))) { + + if (MathUtils.randInt(0, 100) >= 90) { + world.setBlockToAir(x, y, z); + } + } else { + final int blockMeta = world.getBlockMetadata(x, y, z); + + if (blockMeta < 15) { + world.setBlockMetadataWithNotify(x, y, z, blockMeta + (random.nextInt(3) / 2), 4); + } + + world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world) + random.nextInt(10)); + + if (!flag && !this.canNeighborBurn(world, x, y, z)) { + if (!World.doesBlockHaveSolidTopSurface(world, x, y - 1, z) || (blockMeta > 3)) { + world.setBlockToAir(x, y, z); + } + } else if (!flag && !this.canCatchFire(world, x, y - 1, z, UP) + && (blockMeta == 15) + && (random.nextInt(4) == 0)) { + world.setBlockToAir(x, y, z); + } else { + final boolean flag1 = world.isBlockHighHumidity(x, y, z); + byte b0 = 0; + + if (flag1) { + b0 = -50; + } + + this.tryCatchFire(world, x + 1, y, z, 300 + b0, random, blockMeta, WEST); + this.tryCatchFire(world, x - 1, y, z, 300 + b0, random, blockMeta, EAST); + this.tryCatchFire(world, x, y - 1, z, 250 + b0, random, blockMeta, UP); + this.tryCatchFire(world, x, y + 1, z, 250 + b0, random, blockMeta, DOWN); + this.tryCatchFire(world, x, y, z - 1, 300 + b0, random, blockMeta, SOUTH); + this.tryCatchFire(world, x, y, z + 1, 300 + b0, random, blockMeta, NORTH); + + for (int i1 = x - 1; i1 <= (x + 1); ++i1) { + for (int j1 = z - 1; j1 <= (z + 1); ++j1) { + for (int k1 = y - 1; k1 <= (y + 4); ++k1) { + if ((i1 != x) || (k1 != y) || (j1 != z)) { + int l1 = 100; + + if (k1 > (y + 1)) { + l1 += (k1 - (y + 1)) * 100; + } + + final int neighbourFireChance = this + .getChanceOfNeighborsEncouragingFire(world, i1, k1, j1); + + if (neighbourFireChance > 0) { + int j2 = (neighbourFireChance + 40 + + (world.difficultySetting.getDifficultyId() * 14)) / (blockMeta + 30); + + if (flag1) { + j2 /= 2; + } + + if ((j2 > 0) && (random.nextInt(l1) <= j2) + && (!world.isRaining() || !world.canLightningStrikeAt(i1, k1, j1)) + && !world.canLightningStrikeAt(i1 - 1, k1, z) + && !world.canLightningStrikeAt(i1 + 1, k1, j1) + && !world.canLightningStrikeAt(i1, k1, j1 - 1) + && !world.canLightningStrikeAt(i1, k1, j1 + 1)) { + int k2 = blockMeta + (random.nextInt(5) / 4); + + if (k2 > 15) { + k2 = 15; + } + + world.setBlock(i1, k1, j1, this, k2, 3); + } + } + } + } + } + } + } + } + } + } + + private void tryCatchFire(final World world, final int p_149841_2_, final int p_149841_3_, final int p_149841_4_, + final int p_149841_5_, final Random p_149841_6_, final int p_149841_7_, final ForgeDirection face) { + final int j1 = world.getBlock(p_149841_2_, p_149841_3_, p_149841_4_) + .getFlammability(world, p_149841_2_, p_149841_3_, p_149841_4_, face); + + if (p_149841_6_.nextInt(p_149841_5_) < j1) { + final boolean flag = world.getBlock(p_149841_2_, p_149841_3_, p_149841_4_) == Blocks.tnt; + + if ((p_149841_6_.nextInt(p_149841_7_ + 10) < 5) + && !world.canLightningStrikeAt(p_149841_2_, p_149841_3_, p_149841_4_)) { + int k1 = p_149841_7_ + (p_149841_6_.nextInt(5) / 4); + + if (k1 > 15) { + k1 = 15; + } + + world.setBlock(p_149841_2_, p_149841_3_, p_149841_4_, this, k1, 3); + } else { + world.setBlockToAir(p_149841_2_, p_149841_3_, p_149841_4_); + } + + if (flag) { + Blocks.tnt.onBlockDestroyedByPlayer(world, p_149841_2_, p_149841_3_, p_149841_4_, 1); + } + } + } + + /** + * Returns true if at least one block next to this one can burn. + */ + private boolean canNeighborBurn(final World world, final int x, final int y, final int z) { + return this.canCatchFire(world, x + 1, y, z, WEST) || this.canCatchFire(world, x - 1, y, z, EAST) + || this.canCatchFire(world, x, y - 1, z, UP) + || this.canCatchFire(world, x, y + 1, z, DOWN) + || this.canCatchFire(world, x, y, z - 1, SOUTH) + || this.canCatchFire(world, x, y, z + 1, NORTH); + } + + /** + * Gets the highest chance of a neighbor block encouraging this block to catch fire + */ + private int getChanceOfNeighborsEncouragingFire(final World world, final int x, final int y, final int z) { + final byte b0 = 0; + + if (!world.isAirBlock(x, y, z)) { + return 0; + } else { + int l = b0; + l = this.getChanceToEncourageFire(world, x + 1, y, z, l, WEST); + l = this.getChanceToEncourageFire(world, x - 1, y, z, l, EAST); + l = this.getChanceToEncourageFire(world, x, y - 1, z, l, UP); + l = this.getChanceToEncourageFire(world, x, y + 1, z, l, DOWN); + l = this.getChanceToEncourageFire(world, x, y, z - 1, l, SOUTH); + l = this.getChanceToEncourageFire(world, x, y, z + 1, l, NORTH); + return l; + } + } + + /** + * Checks to see if its valid to put this block at the specified coordinates. Args: world, x, y, z + */ + @Override + public boolean canPlaceBlockAt(final World worldObj, final int x, final int y, final int z) { + return World.doesBlockHaveSolidTopSurface(worldObj, x, y - 1, z) || this.canNeighborBurn(worldObj, x, y, z); + } + + /** + * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are + * their own) Args: x, y, z, neighbor Block + */ + @Override + public void onNeighborBlockChange(final World worldObj, final int x, final int y, final int z, + final Block blockObj) { + if (!World.doesBlockHaveSolidTopSurface(worldObj, x, y - 1, z) && !this.canNeighborBurn(worldObj, x, y, z)) { + worldObj.setBlockToAir(x, y, z); + } + } + + /** + * Called whenever the block is added into the world. Args: world, x, y, z + */ + @Override + public void onBlockAdded(final World world, final int x, final int y, final int z) { + if ((world.provider.dimensionId > 0) || !Blocks.portal.func_150000_e(world, x, y, z)) { + if (!World.doesBlockHaveSolidTopSurface(world, x, y - 1, z) && !this.canNeighborBurn(world, x, y, z)) { + world.setBlockToAir(x, y, z); + } else { + world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world) + world.rand.nextInt(10)); + } + } + } + + // Burn + @Override + public void onEntityWalking(final World world, final int i, final int j, final int k, final Entity entity) { + entity.setFire(10); + } + + @Override + public boolean canCreatureSpawn(final EnumCreatureType type, final IBlockAccess world, final int x, final int y, + final int z) { + return false; + } + + // Burn + @Override + public void onEntityCollidedWithBlock(final World world, final int i, final int j, final int k, + final Entity entity) { + entity.setFire(10); + } + + /** + * A randomly called display update to be able to add particles or other items for display + */ + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(final World world, final int x, final int y, final int z, Random randomObj) { + + randomObj = new XSTR(); + + if (randomObj.nextInt(24) == 0) { + world.playSound( + x + 0.5F, + y + 0.5F, + z + 0.5F, + "fire.fire", + 1.0F + randomObj.nextFloat(), + (randomObj.nextFloat() * 0.7F) + 0.3F, + false); + } + + int l; + float f; + float f1; + float f2; + + if (!World.doesBlockHaveSolidTopSurface(world, x, y - 1, z) + && !Blocks.fire.canCatchFire(world, x, y - 1, z, UP)) { + if (Blocks.fire.canCatchFire(world, x - 1, y, z, EAST)) { + for (l = 0; l < 2; ++l) { + f = x + (randomObj.nextFloat() * 0.1F); + f1 = y + randomObj.nextFloat(); + f2 = z + randomObj.nextFloat(); + world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); + } + } + + if (Blocks.fire.canCatchFire(world, x + 1, y, z, WEST)) { + for (l = 0; l < 2; ++l) { + f = (x + 1) - (randomObj.nextFloat() * 0.1F); + f1 = y + randomObj.nextFloat(); + f2 = z + randomObj.nextFloat(); + world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); + } + } + + if (Blocks.fire.canCatchFire(world, x, y, z - 1, SOUTH)) { + for (l = 0; l < 2; ++l) { + f = x + randomObj.nextFloat(); + f1 = y + randomObj.nextFloat(); + f2 = z + (randomObj.nextFloat() * 0.1F); + world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); + } + } + + if (Blocks.fire.canCatchFire(world, x, y, z + 1, NORTH)) { + for (l = 0; l < 2; ++l) { + f = x + randomObj.nextFloat(); + f1 = y + randomObj.nextFloat(); + f2 = (z + 1) - (randomObj.nextFloat() * 0.1F); + world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); + } + } + + if (Blocks.fire.canCatchFire(world, x, y + 1, z, DOWN)) { + for (l = 0; l < 2; ++l) { + f = x + randomObj.nextFloat(); + f1 = (y + 1) - (randomObj.nextFloat() * 0.1F); + f2 = z + randomObj.nextFloat(); + world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); + } + } + } else { + for (l = 0; l < 5; ++l) { + f = x + randomObj.nextFloat(); + f1 = y + (randomObj.nextFloat() * 0.5F) + 0.5F; + f2 = z + randomObj.nextFloat(); + world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); + world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister IIconRegister) { + this.IIconArray = new IIcon[] { + IIconRegister.registerIcon(GTPlusPlus.ID + ":" + "hellfire/" + "blockHellFire" + "_layer_0"), + IIconRegister.registerIcon(GTPlusPlus.ID + ":" + "hellfire/" + "blockHellFire" + "_layer_1") }; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getFireIcon(final int p_149840_1_) { + return this.IIconArray[p_149840_1_]; + } + + /** + * Gets the block's texture. Args: side, meta + */ + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int ordinalSide, final int meta) { + return this.IIconArray[0]; + } + + @Override + public MapColor getMapColor(final int p_149728_1_) { + return MapColor.snowColor; + } + + /* + * ================================= Forge Start ====================================== + */ + private static class FireInfo { + + private int encouragement = 0; + private int flammibility = 0; + } + + private final IdentityHashMap blockInfo = Maps.newIdentityHashMap(); + + @Override + public void setFireInfo(final Block block, final int encouragement, final int flammibility) { + try { + if (block == Blocks.air) { + throw new IllegalArgumentException("Tried to set air on fire... This is bad."); + } + final int id = Block.getIdFromBlock(block); + if (id >= 4096 || id >= field_149849_a.length || id >= field_149848_b.length) { + return; + } + this.field_149849_a[id] = encouragement; + this.field_149848_b[id] = flammibility; + + final FireInfo info = this.getInfo(block, true); + info.encouragement = encouragement; + info.flammibility = flammibility; + } catch (Throwable t) {} + } + + private FireInfo getInfo(final Block block, final boolean garentee) { + FireInfo ret = this.blockInfo.get(block); + if ((ret == null) && garentee) { + ret = new FireInfo(); + this.blockInfo.put(block, ret); + } + return ret; + } + + @Override + public void rebuildFireInfo() { + for (int x = 0; x < 4096; x++) { + // If we care.. we could detect changes in here and make sure we + // keep them, however + // it's my thinking that anyone who hacks into the private variables + // should DIAF and we don't care about them. + this.field_149849_a[x] = 0; + this.field_149848_b[x] = 0; + } + + for (final Entry e : this.blockInfo.entrySet()) { + final int id = Block.getIdFromBlock(e.getKey()); + if ((id >= 0) && (id < 4096)) { + this.field_149849_a[id] = e.getValue().encouragement; + this.field_149848_b[id] = e.getValue().flammibility; + } + } + } + + @Override + public int getFlammability(final Block block) { + final int id = Block.getIdFromBlock(block); + return (id >= 0) && (id < 4096) ? this.field_149848_b[id] : 0; + } + + @Override + public int getEncouragement(final Block block) { + final int id = Block.getIdFromBlock(block); + return (id >= 0) && (id < 4096) ? this.field_149849_a[id] : 0; + } + + /** + * Side sensitive version that calls the block function. + * + * @param world The current world + * @param x X Position + * @param y Y Position + * @param z Z Position + * @param face The side the fire is coming from + * @return True if the face can catch fire. + */ + @Override + public boolean canCatchFire(final IBlockAccess world, final int x, final int y, final int z, + final ForgeDirection face) { + return world.getBlock(x, y, z) + .isFlammable(world, x, y, z, face); + } + + /** + * Side sensitive version that calls the block function. + * + * @param world The current world + * @param x X Position + * @param y Y Position + * @param z Z Position + * @param oldChance The previous maximum chance. + * @param face The side the fire is coming from + * @return The chance of the block catching fire, or oldChance if it is higher + */ + @Override + public int getChanceToEncourageFire(final IBlockAccess world, final int x, final int y, final int z, + final int oldChance, final ForgeDirection face) { + final int newChance = world.getBlock(x, y, z) + .getFireSpreadSpeed(world, x, y, z, face); + return (newChance > oldChance ? newChance : oldChance); + } + /* + * ================================= Forge Start ====================================== + */ +} diff --git a/src/main/java/gtPlusPlus/core/block/general/BlockLightGlass.java b/src/main/java/gtPlusPlus/core/block/general/BlockLightGlass.java new file mode 100644 index 0000000000..1e4df5c399 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/general/BlockLightGlass.java @@ -0,0 +1,137 @@ +package gtPlusPlus.core.block.general; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockAir; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import codechicken.nei.api.API; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.creative.AddToCreativeTab; + +/* + * public class LightGlass extends BlockBreakable { + */ +public class BlockLightGlass extends BlockAir { + + private int state = 0; + private final int a = 255; + private int r = 255; + private int g = 0; + private int b = 0; + private int hex; + + public BlockLightGlass(final boolean bool) { + super(); + this.setCreativeTab(AddToCreativeTab.tabBlock); + this.setBlockName("blockMFEffect"); + this.setLightLevel(12F); + setHardness(0.1F); + setBlockTextureName(GTPlusPlus.ID + ":" + "blockMFEffect"); + setStepSound(Block.soundTypeGlass); + GameRegistry.registerBlock(this, "blockMFEffect"); + + API.hideItem(new ItemStack(this)); + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + @Override + public int quantityDropped(final Random rand) { + return 0; + } + + /** + * Returns which pass should this block be rendered on. 0 for solids and 1 for alpha + */ + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 0; + } + + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + @Override + public boolean renderAsNormalBlock() { + return false; + } + + /** + * Return true if a player with Silk Touch can harvest this block directly, and not its normal drops. + */ + @Override + protected boolean canSilkHarvest() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister iIcon) { + this.blockIcon = iIcon.registerIcon(GTPlusPlus.ID + ":" + "blockMFEffect"); + } + + @Override + // http://stackoverflow.com/questions/31784658/how-can-i-loop-through-all-rgb-combinations-in-rainbow-order-in-java + public int colorMultiplier(final IBlockAccess par1IBlockAccess, final int par2, final int par3, final int par4) { + if (this.state == 0) { + this.g++; + if (this.g == 255) { + this.state = 1; + } + } + if (this.state == 1) { + this.r--; + if (this.r == 0) { + this.state = 2; + } + } + if (this.state == 2) { + this.b++; + if (this.b == 255) { + this.state = 3; + } + } + if (this.state == 3) { + this.g--; + if (this.g == 0) { + this.state = 4; + } + } + if (this.state == 4) { + this.r++; + if (this.r == 255) { + this.state = 5; + } + } + if (this.state == 5) { + this.b--; + if (this.b == 0) { + this.state = 0; + } + } + this.hex = (this.a << 24) + (this.r << 16) + (this.g << 8) + (this.b); + return this.hex; + } + + /** + * A randomly called display update to be able to add particles or other items for display + */ + @Override + @SideOnly(Side.CLIENT) + public void randomDisplayTick(final World world, final int posX, final int posY, final int posZ, + final Random random) { + // Utils.spawnFX(world, posX, posY, posZ, "smoke", "cloud"); + + } +} diff --git a/src/main/java/gtPlusPlus/core/block/general/BlockMiningExplosives.java b/src/main/java/gtPlusPlus/core/block/general/BlockMiningExplosives.java new file mode 100644 index 0000000000..20b6fff9e6 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/general/BlockMiningExplosives.java @@ -0,0 +1,193 @@ +package gtPlusPlus.core.block.general; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockTNT; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Items; +import net.minecraft.util.IIcon; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.entity.EntityPrimedMiningExplosive; + +public class BlockMiningExplosives extends BlockTNT { + + @SideOnly(Side.CLIENT) + private IIcon textureTop; + + @SideOnly(Side.CLIENT) + private IIcon textureBottom; + + public BlockMiningExplosives() { + this.setBlockName("blockMiningExplosives"); + GameRegistry.registerBlock(this, "blockMiningExplosives"); + this.setCreativeTab(AddToCreativeTab.tabMachines); + } + + /** + * Gets the block's texture. Args: side, meta + */ + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int ordinalSide, final int meta) { + return ordinalSide == 0 ? this.textureBottom : (ordinalSide == 1 ? this.textureTop : this.blockIcon); + } + + /** + * Called whenever the block is added into the world. Args: world, x, y, z + */ + @Override + public void onBlockAdded(final World world, final int x, final int y, final int z) { + super.onBlockAdded(world, x, y, z); + + if (world.isBlockIndirectlyGettingPowered(x, y, z)) { + this.onBlockDestroyedByPlayer(world, x, y, z, 1); + world.setBlockToAir(x, y, z); + } + } + + /** + * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are + * their own) Args: x, y, z, neighbor Block + */ + @Override + public void onNeighborBlockChange(final World world, final int x, final int y, final int z, + final Block neighbourblock) { + if (world.isBlockIndirectlyGettingPowered(x, y, z)) { + this.onBlockDestroyedByPlayer(world, x, y, z, 1); + world.setBlockToAir(x, y, z); + } + } + + /** + * Returns the quantity of items to drop on block destruction. + */ + @Override + public int quantityDropped(final Random random) { + return 1; + } + + /** + * Called upon the block being destroyed by an explosion + */ + @Override + public void onBlockDestroyedByExplosion(final World world, final int x, final int y, final int z, + final Explosion bang) { + if (!world.isRemote) { + final EntityPrimedMiningExplosive EntityPrimedMiningExplosive = new EntityPrimedMiningExplosive( + world, + x + 0.5F, + y + 0.5F, + z + 0.5F, + bang.getExplosivePlacedBy()); + EntityPrimedMiningExplosive.fuse = world.rand.nextInt(EntityPrimedMiningExplosive.fuse / 4) + + (EntityPrimedMiningExplosive.fuse / 8); + world.spawnEntityInWorld(EntityPrimedMiningExplosive); + } + } + + /** + * Called right before the block is destroyed by a player. Args: world, x, y, z, metaData + */ + @Override + public void onBlockDestroyedByPlayer(final World world, final int x, final int y, final int z, final int meta) { + this.func_150114_a(world, x, y, z, meta, (EntityLivingBase) null); + } + + // TODO Spawns Primed TNT? + @Override + public void func_150114_a(final World world, final int p_150114_2_, final int p_150114_3_, final int p_150114_4_, + final int p_150114_5_, final EntityLivingBase entityLiving) { + if (!world.isRemote) { + if ((p_150114_5_ & 1) == 1) { + final EntityPrimedMiningExplosive EntityPrimedMiningExplosive = new EntityPrimedMiningExplosive( + world, + p_150114_2_ + 0.5F, + p_150114_3_ + 0.5F, + p_150114_4_ + 0.5F, + entityLiving); + world.spawnEntityInWorld(EntityPrimedMiningExplosive); + world.playSoundAtEntity(EntityPrimedMiningExplosive, "game.tnt.primed", 1.0F, 1.0F); + } + } + } + + /** + * 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 clickingPlayer, final int p_149727_6_, final float p_149727_7_, final float p_149727_8_, + final float p_149727_9_) { + if ((clickingPlayer.getCurrentEquippedItem() != null) && (clickingPlayer.getCurrentEquippedItem() + .getItem() == Items.flint_and_steel)) { + this.func_150114_a(world, x, y, z, 1, clickingPlayer); + world.setBlockToAir(x, y, z); + clickingPlayer.getCurrentEquippedItem() + .damageItem(1, clickingPlayer); + return true; + } else { + return super.onBlockActivated( + world, + x, + y, + z, + clickingPlayer, + p_149727_6_, + p_149727_7_, + p_149727_8_, + p_149727_9_); + } + } + + /** + * Triggered whenever an entity collides with this block (enters into the block). Args: world, x, y, z, entity + */ + @Override + public void onEntityCollidedWithBlock(final World world, final int x, final int y, final int z, + final Entity entityTriggering) { + if ((entityTriggering instanceof final EntityArrow entityarrow) && !world.isRemote) { + + if (entityarrow.isBurning()) { + this.func_150114_a( + world, + x, + y, + z, + 1, + entityarrow.shootingEntity instanceof EntityLivingBase + ? (EntityLivingBase) entityarrow.shootingEntity + : null); + world.setBlockToAir(x, y, z); + } + } + } + + /** + * Return whether this block can drop from an explosion. + */ + @Override + public boolean canDropFromExplosion(final Explosion bang) { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister iconRegister) { + this.blockIcon = iconRegister.registerIcon(GTPlusPlus.ID + ":" + "chrono/" + "MetalSheet2"); + this.textureTop = iconRegister.registerIcon(GTPlusPlus.ID + ":" + "chrono/" + "MetalFunnel"); + this.textureBottom = iconRegister.registerIcon(GTPlusPlus.ID + ":" + "chrono/" + "MetalPanel"); + } +} diff --git a/src/main/java/gtPlusPlus/core/block/general/BlockSuperLight.java b/src/main/java/gtPlusPlus/core/block/general/BlockSuperLight.java index dc6c92f065..4110c02fe3 100644 --- a/src/main/java/gtPlusPlus/core/block/general/BlockSuperLight.java +++ b/src/main/java/gtPlusPlus/core/block/general/BlockSuperLight.java @@ -177,7 +177,7 @@ public class BlockSuperLight extends BlockContainer { // Turning Lights off else if (!enable && aLight > 0) { aBlocksToUpdate.put(new BlockPos(xOff, yOff, zOff, this.worldObj)); - if (aBlockGet instanceof LightGlass) { + if (aBlockGet instanceof BlockLightGlass) { Logger.INFO("Dimmed air."); this.worldObj.setBlock(xOff, yOff, zOff, Blocks.air, 0, 3); } diff --git a/src/main/java/gtPlusPlus/core/block/general/FluidTankInfinite.java b/src/main/java/gtPlusPlus/core/block/general/FluidTankInfinite.java deleted file mode 100644 index 41a581394b..0000000000 --- a/src/main/java/gtPlusPlus/core/block/general/FluidTankInfinite.java +++ /dev/null @@ -1,141 +0,0 @@ -package gtPlusPlus.core.block.general; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidContainerRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidContainerItem; -import net.minecraftforge.fluids.ItemFluidContainer; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.tileentities.general.TileEntityInfiniteFluid; -import gtPlusPlus.core.util.minecraft.PlayerUtils; - -public class FluidTankInfinite extends BlockContainer { - - @SideOnly(Side.CLIENT) - private IIcon textureTop; - - @SideOnly(Side.CLIENT) - private IIcon textureBottom; - - @SideOnly(Side.CLIENT) - private IIcon textureFront; - - public FluidTankInfinite() { - super(Material.iron); - this.setBlockName("blockInfiniteFluidTank"); - this.setCreativeTab(AddToCreativeTab.tabMachines); - GameRegistry.registerBlock(this, "blockInfiniteFluidTank"); - } - - /** - * Gets the block's texture. Args: side, meta - */ - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(final int ordinalSide, final int meta) { - return ordinalSide == 1 ? this.textureTop - : (ordinalSide == 0 ? this.textureBottom - : ((ordinalSide != 2) && (ordinalSide != 4) ? this.blockIcon : this.textureFront)); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(final IIconRegister p_149651_1_) { - this.blockIcon = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "Generic_Creative_Texture"); - this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "Generic_Creative_Texture"); - this.textureBottom = p_149651_1_ - .registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "Generic_Creative_Texture"); - this.textureFront = p_149651_1_ - .registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "Generic_Creative_Texture"); - } - - /** - * 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 { - TileEntityInfiniteFluid tank = (TileEntityInfiniteFluid) world.getTileEntity(x, y, z); - if (tank != null) { - Item handItem; - try { - handItem = player.getHeldItem() - .getItem(); - } catch (Throwable t) { - handItem = null; - } - if (handItem != null - && (handItem instanceof IFluidContainerItem || handItem instanceof ItemFluidContainer - || FluidContainerRegistry.isFilledContainer(player.getHeldItem()))) { - if (tank.tank.getFluid() == null) { - try { - if (!FluidContainerRegistry.isFilledContainer(player.getHeldItem())) { - ItemStack handItemStack = player.getHeldItem(); - IFluidContainerItem container = (IFluidContainerItem) handItem; - FluidStack containerFluid = container.getFluid(handItemStack); - container.drain(handItemStack, container.getFluid(handItemStack).amount, true); - tank.tank.setFluid(containerFluid); - } else { - ItemStack handItemStack = player.getHeldItem(); - FluidContainerRegistry.drainFluidContainer(handItemStack); - FluidStack containerFluid = FluidContainerRegistry.getFluidForFilledItem(handItemStack); - ItemStack emptyContainer = FluidContainerRegistry.drainFluidContainer(handItemStack); - player.setItemInUse(emptyContainer, 0); - - tank.tank.setFluid(containerFluid); - } - } catch (Throwable t) { - t.printStackTrace(); - } - } - } - if (tank.tank.getFluid() != null) { - PlayerUtils.messagePlayer( - player, - "This tank contains " + tank.tank.getFluidAmount() - + "L of " - + tank.tank.getFluid() - .getLocalizedName()); - } - } - } - return true; - } - - @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 TileEntityInfiniteFluid(); - } - - @Override - public void onBlockAdded(World world, int x, int y, int z) { - super.onBlockAdded(world, x, y, z); - } -} diff --git a/src/main/java/gtPlusPlus/core/block/general/HellFire.java b/src/main/java/gtPlusPlus/core/block/general/HellFire.java deleted file mode 100644 index 4e8d94328d..0000000000 --- a/src/main/java/gtPlusPlus/core/block/general/HellFire.java +++ /dev/null @@ -1,535 +0,0 @@ -package gtPlusPlus.core.block.general; - -import static gregtech.api.enums.Mods.GTPlusPlus; -import static net.minecraftforge.common.util.ForgeDirection.DOWN; -import static net.minecraftforge.common.util.ForgeDirection.EAST; -import static net.minecraftforge.common.util.ForgeDirection.NORTH; -import static net.minecraftforge.common.util.ForgeDirection.SOUTH; -import static net.minecraftforge.common.util.ForgeDirection.UP; -import static net.minecraftforge.common.util.ForgeDirection.WEST; - -import java.util.IdentityHashMap; -import java.util.Map.Entry; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockFire; -import net.minecraft.block.material.MapColor; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EnumCreatureType; -import net.minecraft.init.Blocks; -import net.minecraft.util.IIcon; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.google.common.collect.Maps; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.objects.XSTR; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.util.math.MathUtils; - -public class HellFire extends BlockFire { - - private final int[] field_149849_a = new int[Short.MAX_VALUE]; - - private final int[] field_149848_b = new int[Short.MAX_VALUE]; - - @SideOnly(Side.CLIENT) - private IIcon[] IIconArray; - - public HellFire() { - this.setTickRandomly(true); - this.setLightLevel(1F); - this.setLightOpacity(0); - // this.setBlockTextureName(GTPlusPlus.ID + "hellfire/blockHellFire"); - this.setBlockName("blockHellFire"); - this.setCreativeTab(AddToCreativeTab.tabBlock); - GameRegistry.registerBlock(this, "blockHellFire"); - this.enableBrutalFire(); - } - - private void enableBrutalFire() { - for (final Object o : Block.blockRegistry.getKeys()) { - - try { - - final String name = (String) o; - final Block b = Block.getBlockFromName(name); - if (b != Blocks.air) { - final int spread = Blocks.fire.getEncouragement(b); - final int flamm = Blocks.fire.getFlammability(b); - if (flamm > 0 && spread > 0) { - this.setFireInfo(b, spread * 4, flamm * 4); - } - } - - } catch (Throwable t) { - t.printStackTrace(); - } - } - - // Special Case madness - this.setFireInfo(Blocks.brown_mushroom_block, 20, 100); - this.setFireInfo(Blocks.red_mushroom_block, 20, 100); - this.setFireInfo(Blocks.grass, 20, 100); - this.setFireInfo(Blocks.mycelium, 20, 100); - } - - /** - * How many world ticks before ticking - */ - @Override - public int tickRate(final World world) { - return 5; - } - - /** - * Ticks the block if it's been scheduled - */ - @Override - public void updateTick(final World world, final int x, final int y, final int z, Random random) { - - random = new XSTR(); - - if (world.getGameRules() - .getGameRuleBooleanValue("doFireTick")) { - final boolean flag = world.getBlock(x, y - 1, z) - .isFireSource(world, x, y - 1, z, UP); - - if (!this.canPlaceBlockAt(world, x, y, z)) { - world.setBlockToAir(x, y, z); - } - - if (!flag && world.isRaining() - && (world.canLightningStrikeAt(x, y, z) || world.canLightningStrikeAt(x - 1, y, z) - || world.canLightningStrikeAt(x + 1, y, z) - || world.canLightningStrikeAt(x, y, z - 1) - || world.canLightningStrikeAt(x, y, z + 1))) { - - if (MathUtils.randInt(0, 100) >= 90) { - world.setBlockToAir(x, y, z); - } - } else { - final int blockMeta = world.getBlockMetadata(x, y, z); - - if (blockMeta < 15) { - world.setBlockMetadataWithNotify(x, y, z, blockMeta + (random.nextInt(3) / 2), 4); - } - - world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world) + random.nextInt(10)); - - if (!flag && !this.canNeighborBurn(world, x, y, z)) { - if (!World.doesBlockHaveSolidTopSurface(world, x, y - 1, z) || (blockMeta > 3)) { - world.setBlockToAir(x, y, z); - } - } else if (!flag && !this.canCatchFire(world, x, y - 1, z, UP) - && (blockMeta == 15) - && (random.nextInt(4) == 0)) { - world.setBlockToAir(x, y, z); - } else { - final boolean flag1 = world.isBlockHighHumidity(x, y, z); - byte b0 = 0; - - if (flag1) { - b0 = -50; - } - - this.tryCatchFire(world, x + 1, y, z, 300 + b0, random, blockMeta, WEST); - this.tryCatchFire(world, x - 1, y, z, 300 + b0, random, blockMeta, EAST); - this.tryCatchFire(world, x, y - 1, z, 250 + b0, random, blockMeta, UP); - this.tryCatchFire(world, x, y + 1, z, 250 + b0, random, blockMeta, DOWN); - this.tryCatchFire(world, x, y, z - 1, 300 + b0, random, blockMeta, SOUTH); - this.tryCatchFire(world, x, y, z + 1, 300 + b0, random, blockMeta, NORTH); - - for (int i1 = x - 1; i1 <= (x + 1); ++i1) { - for (int j1 = z - 1; j1 <= (z + 1); ++j1) { - for (int k1 = y - 1; k1 <= (y + 4); ++k1) { - if ((i1 != x) || (k1 != y) || (j1 != z)) { - int l1 = 100; - - if (k1 > (y + 1)) { - l1 += (k1 - (y + 1)) * 100; - } - - final int neighbourFireChance = this - .getChanceOfNeighborsEncouragingFire(world, i1, k1, j1); - - if (neighbourFireChance > 0) { - int j2 = (neighbourFireChance + 40 - + (world.difficultySetting.getDifficultyId() * 14)) / (blockMeta + 30); - - if (flag1) { - j2 /= 2; - } - - if ((j2 > 0) && (random.nextInt(l1) <= j2) - && (!world.isRaining() || !world.canLightningStrikeAt(i1, k1, j1)) - && !world.canLightningStrikeAt(i1 - 1, k1, z) - && !world.canLightningStrikeAt(i1 + 1, k1, j1) - && !world.canLightningStrikeAt(i1, k1, j1 - 1) - && !world.canLightningStrikeAt(i1, k1, j1 + 1)) { - int k2 = blockMeta + (random.nextInt(5) / 4); - - if (k2 > 15) { - k2 = 15; - } - - world.setBlock(i1, k1, j1, this, k2, 3); - } - } - } - } - } - } - } - } - } - } - - private void tryCatchFire(final World world, final int p_149841_2_, final int p_149841_3_, final int p_149841_4_, - final int p_149841_5_, final Random p_149841_6_, final int p_149841_7_, final ForgeDirection face) { - final int j1 = world.getBlock(p_149841_2_, p_149841_3_, p_149841_4_) - .getFlammability(world, p_149841_2_, p_149841_3_, p_149841_4_, face); - - if (p_149841_6_.nextInt(p_149841_5_) < j1) { - final boolean flag = world.getBlock(p_149841_2_, p_149841_3_, p_149841_4_) == Blocks.tnt; - - if ((p_149841_6_.nextInt(p_149841_7_ + 10) < 5) - && !world.canLightningStrikeAt(p_149841_2_, p_149841_3_, p_149841_4_)) { - int k1 = p_149841_7_ + (p_149841_6_.nextInt(5) / 4); - - if (k1 > 15) { - k1 = 15; - } - - world.setBlock(p_149841_2_, p_149841_3_, p_149841_4_, this, k1, 3); - } else { - world.setBlockToAir(p_149841_2_, p_149841_3_, p_149841_4_); - } - - if (flag) { - Blocks.tnt.onBlockDestroyedByPlayer(world, p_149841_2_, p_149841_3_, p_149841_4_, 1); - } - } - } - - /** - * Returns true if at least one block next to this one can burn. - */ - private boolean canNeighborBurn(final World world, final int x, final int y, final int z) { - return this.canCatchFire(world, x + 1, y, z, WEST) || this.canCatchFire(world, x - 1, y, z, EAST) - || this.canCatchFire(world, x, y - 1, z, UP) - || this.canCatchFire(world, x, y + 1, z, DOWN) - || this.canCatchFire(world, x, y, z - 1, SOUTH) - || this.canCatchFire(world, x, y, z + 1, NORTH); - } - - /** - * Gets the highest chance of a neighbor block encouraging this block to catch fire - */ - private int getChanceOfNeighborsEncouragingFire(final World world, final int x, final int y, final int z) { - final byte b0 = 0; - - if (!world.isAirBlock(x, y, z)) { - return 0; - } else { - int l = b0; - l = this.getChanceToEncourageFire(world, x + 1, y, z, l, WEST); - l = this.getChanceToEncourageFire(world, x - 1, y, z, l, EAST); - l = this.getChanceToEncourageFire(world, x, y - 1, z, l, UP); - l = this.getChanceToEncourageFire(world, x, y + 1, z, l, DOWN); - l = this.getChanceToEncourageFire(world, x, y, z - 1, l, SOUTH); - l = this.getChanceToEncourageFire(world, x, y, z + 1, l, NORTH); - return l; - } - } - - /** - * Checks to see if its valid to put this block at the specified coordinates. Args: world, x, y, z - */ - @Override - public boolean canPlaceBlockAt(final World worldObj, final int x, final int y, final int z) { - return World.doesBlockHaveSolidTopSurface(worldObj, x, y - 1, z) || this.canNeighborBurn(worldObj, x, y, z); - } - - /** - * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are - * their own) Args: x, y, z, neighbor Block - */ - @Override - public void onNeighborBlockChange(final World worldObj, final int x, final int y, final int z, - final Block blockObj) { - if (!World.doesBlockHaveSolidTopSurface(worldObj, x, y - 1, z) && !this.canNeighborBurn(worldObj, x, y, z)) { - worldObj.setBlockToAir(x, y, z); - } - } - - /** - * Called whenever the block is added into the world. Args: world, x, y, z - */ - @Override - public void onBlockAdded(final World world, final int x, final int y, final int z) { - if ((world.provider.dimensionId > 0) || !Blocks.portal.func_150000_e(world, x, y, z)) { - if (!World.doesBlockHaveSolidTopSurface(world, x, y - 1, z) && !this.canNeighborBurn(world, x, y, z)) { - world.setBlockToAir(x, y, z); - } else { - world.scheduleBlockUpdate(x, y, z, this, this.tickRate(world) + world.rand.nextInt(10)); - } - } - } - - // Burn - @Override - public void onEntityWalking(final World world, final int i, final int j, final int k, final Entity entity) { - entity.setFire(10); - } - - @Override - public boolean canCreatureSpawn(final EnumCreatureType type, final IBlockAccess world, final int x, final int y, - final int z) { - return false; - } - - // Burn - @Override - public void onEntityCollidedWithBlock(final World world, final int i, final int j, final int k, - final Entity entity) { - entity.setFire(10); - } - - /** - * A randomly called display update to be able to add particles or other items for display - */ - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(final World world, final int x, final int y, final int z, Random randomObj) { - - randomObj = new XSTR(); - - if (randomObj.nextInt(24) == 0) { - world.playSound( - x + 0.5F, - y + 0.5F, - z + 0.5F, - "fire.fire", - 1.0F + randomObj.nextFloat(), - (randomObj.nextFloat() * 0.7F) + 0.3F, - false); - } - - int l; - float f; - float f1; - float f2; - - if (!World.doesBlockHaveSolidTopSurface(world, x, y - 1, z) - && !Blocks.fire.canCatchFire(world, x, y - 1, z, UP)) { - if (Blocks.fire.canCatchFire(world, x - 1, y, z, EAST)) { - for (l = 0; l < 2; ++l) { - f = x + (randomObj.nextFloat() * 0.1F); - f1 = y + randomObj.nextFloat(); - f2 = z + randomObj.nextFloat(); - world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); - } - } - - if (Blocks.fire.canCatchFire(world, x + 1, y, z, WEST)) { - for (l = 0; l < 2; ++l) { - f = (x + 1) - (randomObj.nextFloat() * 0.1F); - f1 = y + randomObj.nextFloat(); - f2 = z + randomObj.nextFloat(); - world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); - } - } - - if (Blocks.fire.canCatchFire(world, x, y, z - 1, SOUTH)) { - for (l = 0; l < 2; ++l) { - f = x + randomObj.nextFloat(); - f1 = y + randomObj.nextFloat(); - f2 = z + (randomObj.nextFloat() * 0.1F); - world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); - } - } - - if (Blocks.fire.canCatchFire(world, x, y, z + 1, NORTH)) { - for (l = 0; l < 2; ++l) { - f = x + randomObj.nextFloat(); - f1 = y + randomObj.nextFloat(); - f2 = (z + 1) - (randomObj.nextFloat() * 0.1F); - world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); - } - } - - if (Blocks.fire.canCatchFire(world, x, y + 1, z, DOWN)) { - for (l = 0; l < 2; ++l) { - f = x + randomObj.nextFloat(); - f1 = (y + 1) - (randomObj.nextFloat() * 0.1F); - f2 = z + randomObj.nextFloat(); - world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); - } - } - } else { - for (l = 0; l < 5; ++l) { - f = x + randomObj.nextFloat(); - f1 = y + (randomObj.nextFloat() * 0.5F) + 0.5F; - f2 = z + randomObj.nextFloat(); - world.spawnParticle("witchMagic", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1, f2, 0.0D, 0.0D, 0.0D); - world.spawnParticle("largesmoke", f, f1 + 0.5F, f2, 0.0D, 0.0D, 0.0D); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(final IIconRegister IIconRegister) { - this.IIconArray = new IIcon[] { - IIconRegister.registerIcon(GTPlusPlus.ID + ":" + "hellfire/" + "blockHellFire" + "_layer_0"), - IIconRegister.registerIcon(GTPlusPlus.ID + ":" + "hellfire/" + "blockHellFire" + "_layer_1") }; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getFireIcon(final int p_149840_1_) { - return this.IIconArray[p_149840_1_]; - } - - /** - * Gets the block's texture. Args: side, meta - */ - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(final int ordinalSide, final int meta) { - return this.IIconArray[0]; - } - - @Override - public MapColor getMapColor(final int p_149728_1_) { - return MapColor.snowColor; - } - - /* - * ================================= Forge Start ====================================== - */ - private static class FireInfo { - - private int encouragement = 0; - private int flammibility = 0; - } - - private final IdentityHashMap blockInfo = Maps.newIdentityHashMap(); - - @Override - public void setFireInfo(final Block block, final int encouragement, final int flammibility) { - try { - if (block == Blocks.air) { - throw new IllegalArgumentException("Tried to set air on fire... This is bad."); - } - final int id = Block.getIdFromBlock(block); - if (id >= 4096 || id >= field_149849_a.length || id >= field_149848_b.length) { - return; - } - this.field_149849_a[id] = encouragement; - this.field_149848_b[id] = flammibility; - - final FireInfo info = this.getInfo(block, true); - info.encouragement = encouragement; - info.flammibility = flammibility; - } catch (Throwable t) {} - } - - private FireInfo getInfo(final Block block, final boolean garentee) { - FireInfo ret = this.blockInfo.get(block); - if ((ret == null) && garentee) { - ret = new FireInfo(); - this.blockInfo.put(block, ret); - } - return ret; - } - - @Override - public void rebuildFireInfo() { - for (int x = 0; x < 4096; x++) { - // If we care.. we could detect changes in here and make sure we - // keep them, however - // it's my thinking that anyone who hacks into the private variables - // should DIAF and we don't care about them. - this.field_149849_a[x] = 0; - this.field_149848_b[x] = 0; - } - - for (final Entry e : this.blockInfo.entrySet()) { - final int id = Block.getIdFromBlock(e.getKey()); - if ((id >= 0) && (id < 4096)) { - this.field_149849_a[id] = e.getValue().encouragement; - this.field_149848_b[id] = e.getValue().flammibility; - } - } - } - - @Override - public int getFlammability(final Block block) { - final int id = Block.getIdFromBlock(block); - return (id >= 0) && (id < 4096) ? this.field_149848_b[id] : 0; - } - - @Override - public int getEncouragement(final Block block) { - final int id = Block.getIdFromBlock(block); - return (id >= 0) && (id < 4096) ? this.field_149849_a[id] : 0; - } - - /** - * Side sensitive version that calls the block function. - * - * @param world The current world - * @param x X Position - * @param y Y Position - * @param z Z Position - * @param face The side the fire is coming from - * @return True if the face can catch fire. - */ - @Override - public boolean canCatchFire(final IBlockAccess world, final int x, final int y, final int z, - final ForgeDirection face) { - return world.getBlock(x, y, z) - .isFlammable(world, x, y, z, face); - } - - /** - * Side sensitive version that calls the block function. - * - * @param world The current world - * @param x X Position - * @param y Y Position - * @param z Z Position - * @param oldChance The previous maximum chance. - * @param face The side the fire is coming from - * @return The chance of the block catching fire, or oldChance if it is higher - */ - @Override - public int getChanceToEncourageFire(final IBlockAccess world, final int x, final int y, final int z, - final int oldChance, final ForgeDirection face) { - final int newChance = world.getBlock(x, y, z) - .getFireSpreadSpeed(world, x, y, z, face); - return (newChance > oldChance ? newChance : oldChance); - } - /* - * ================================= Forge Start ====================================== - */ -} diff --git a/src/main/java/gtPlusPlus/core/block/general/LightGlass.java b/src/main/java/gtPlusPlus/core/block/general/LightGlass.java deleted file mode 100644 index b6facce45f..0000000000 --- a/src/main/java/gtPlusPlus/core/block/general/LightGlass.java +++ /dev/null @@ -1,137 +0,0 @@ -package gtPlusPlus.core.block.general; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockAir; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import codechicken.nei.api.API; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.creative.AddToCreativeTab; - -/* - * public class LightGlass extends BlockBreakable { - */ -public class LightGlass extends BlockAir { - - private int state = 0; - private final int a = 255; - private int r = 255; - private int g = 0; - private int b = 0; - private int hex; - - public LightGlass(final boolean bool) { - super(); - this.setCreativeTab(AddToCreativeTab.tabBlock); - this.setBlockName("blockMFEffect"); - this.setLightLevel(12F); - setHardness(0.1F); - setBlockTextureName(GTPlusPlus.ID + ":" + "blockMFEffect"); - setStepSound(Block.soundTypeGlass); - GameRegistry.registerBlock(this, "blockMFEffect"); - - API.hideItem(new ItemStack(this)); - } - - /** - * Returns the quantity of items to drop on block destruction. - */ - @Override - public int quantityDropped(final Random rand) { - return 0; - } - - /** - * Returns which pass should this block be rendered on. 0 for solids and 1 for alpha - */ - @Override - @SideOnly(Side.CLIENT) - public int getRenderBlockPass() { - return 0; - } - - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - @Override - public boolean renderAsNormalBlock() { - return false; - } - - /** - * Return true if a player with Silk Touch can harvest this block directly, and not its normal drops. - */ - @Override - protected boolean canSilkHarvest() { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(final IIconRegister iIcon) { - this.blockIcon = iIcon.registerIcon(GTPlusPlus.ID + ":" + "blockMFEffect"); - } - - @Override - // http://stackoverflow.com/questions/31784658/how-can-i-loop-through-all-rgb-combinations-in-rainbow-order-in-java - public int colorMultiplier(final IBlockAccess par1IBlockAccess, final int par2, final int par3, final int par4) { - if (this.state == 0) { - this.g++; - if (this.g == 255) { - this.state = 1; - } - } - if (this.state == 1) { - this.r--; - if (this.r == 0) { - this.state = 2; - } - } - if (this.state == 2) { - this.b++; - if (this.b == 255) { - this.state = 3; - } - } - if (this.state == 3) { - this.g--; - if (this.g == 0) { - this.state = 4; - } - } - if (this.state == 4) { - this.r++; - if (this.r == 255) { - this.state = 5; - } - } - if (this.state == 5) { - this.b--; - if (this.b == 0) { - this.state = 0; - } - } - this.hex = (this.a << 24) + (this.r << 16) + (this.g << 8) + (this.b); - return this.hex; - } - - /** - * A randomly called display update to be able to add particles or other items for display - */ - @Override - @SideOnly(Side.CLIENT) - public void randomDisplayTick(final World world, final int posX, final int posY, final int posZ, - final Random random) { - // Utils.spawnFX(world, posX, posY, posZ, "smoke", "cloud"); - - } -} diff --git a/src/main/java/gtPlusPlus/core/block/general/MiningExplosives.java b/src/main/java/gtPlusPlus/core/block/general/MiningExplosives.java deleted file mode 100644 index 7579907e9d..0000000000 --- a/src/main/java/gtPlusPlus/core/block/general/MiningExplosives.java +++ /dev/null @@ -1,193 +0,0 @@ -package gtPlusPlus.core.block.general; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockTNT; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.init.Items; -import net.minecraft.util.IIcon; -import net.minecraft.world.Explosion; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.entity.EntityPrimedMiningExplosive; - -public class MiningExplosives extends BlockTNT { - - @SideOnly(Side.CLIENT) - private IIcon textureTop; - - @SideOnly(Side.CLIENT) - private IIcon textureBottom; - - public MiningExplosives() { - this.setBlockName("blockMiningExplosives"); - GameRegistry.registerBlock(this, "blockMiningExplosives"); - this.setCreativeTab(AddToCreativeTab.tabMachines); - } - - /** - * Gets the block's texture. Args: side, meta - */ - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(final int ordinalSide, final int meta) { - return ordinalSide == 0 ? this.textureBottom : (ordinalSide == 1 ? this.textureTop : this.blockIcon); - } - - /** - * Called whenever the block is added into the world. Args: world, x, y, z - */ - @Override - public void onBlockAdded(final World world, final int x, final int y, final int z) { - super.onBlockAdded(world, x, y, z); - - if (world.isBlockIndirectlyGettingPowered(x, y, z)) { - this.onBlockDestroyedByPlayer(world, x, y, z, 1); - world.setBlockToAir(x, y, z); - } - } - - /** - * Lets the block know when one of its neighbor changes. Doesn't know which neighbor changed (coordinates passed are - * their own) Args: x, y, z, neighbor Block - */ - @Override - public void onNeighborBlockChange(final World world, final int x, final int y, final int z, - final Block neighbourblock) { - if (world.isBlockIndirectlyGettingPowered(x, y, z)) { - this.onBlockDestroyedByPlayer(world, x, y, z, 1); - world.setBlockToAir(x, y, z); - } - } - - /** - * Returns the quantity of items to drop on block destruction. - */ - @Override - public int quantityDropped(final Random random) { - return 1; - } - - /** - * Called upon the block being destroyed by an explosion - */ - @Override - public void onBlockDestroyedByExplosion(final World world, final int x, final int y, final int z, - final Explosion bang) { - if (!world.isRemote) { - final EntityPrimedMiningExplosive EntityPrimedMiningExplosive = new EntityPrimedMiningExplosive( - world, - x + 0.5F, - y + 0.5F, - z + 0.5F, - bang.getExplosivePlacedBy()); - EntityPrimedMiningExplosive.fuse = world.rand.nextInt(EntityPrimedMiningExplosive.fuse / 4) - + (EntityPrimedMiningExplosive.fuse / 8); - world.spawnEntityInWorld(EntityPrimedMiningExplosive); - } - } - - /** - * Called right before the block is destroyed by a player. Args: world, x, y, z, metaData - */ - @Override - public void onBlockDestroyedByPlayer(final World world, final int x, final int y, final int z, final int meta) { - this.func_150114_a(world, x, y, z, meta, (EntityLivingBase) null); - } - - // TODO Spawns Primed TNT? - @Override - public void func_150114_a(final World world, final int p_150114_2_, final int p_150114_3_, final int p_150114_4_, - final int p_150114_5_, final EntityLivingBase entityLiving) { - if (!world.isRemote) { - if ((p_150114_5_ & 1) == 1) { - final EntityPrimedMiningExplosive EntityPrimedMiningExplosive = new EntityPrimedMiningExplosive( - world, - p_150114_2_ + 0.5F, - p_150114_3_ + 0.5F, - p_150114_4_ + 0.5F, - entityLiving); - world.spawnEntityInWorld(EntityPrimedMiningExplosive); - world.playSoundAtEntity(EntityPrimedMiningExplosive, "game.tnt.primed", 1.0F, 1.0F); - } - } - } - - /** - * 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 clickingPlayer, final int p_149727_6_, final float p_149727_7_, final float p_149727_8_, - final float p_149727_9_) { - if ((clickingPlayer.getCurrentEquippedItem() != null) && (clickingPlayer.getCurrentEquippedItem() - .getItem() == Items.flint_and_steel)) { - this.func_150114_a(world, x, y, z, 1, clickingPlayer); - world.setBlockToAir(x, y, z); - clickingPlayer.getCurrentEquippedItem() - .damageItem(1, clickingPlayer); - return true; - } else { - return super.onBlockActivated( - world, - x, - y, - z, - clickingPlayer, - p_149727_6_, - p_149727_7_, - p_149727_8_, - p_149727_9_); - } - } - - /** - * Triggered whenever an entity collides with this block (enters into the block). Args: world, x, y, z, entity - */ - @Override - public void onEntityCollidedWithBlock(final World world, final int x, final int y, final int z, - final Entity entityTriggering) { - if ((entityTriggering instanceof final EntityArrow entityarrow) && !world.isRemote) { - - if (entityarrow.isBurning()) { - this.func_150114_a( - world, - x, - y, - z, - 1, - entityarrow.shootingEntity instanceof EntityLivingBase - ? (EntityLivingBase) entityarrow.shootingEntity - : null); - world.setBlockToAir(x, y, z); - } - } - } - - /** - * Return whether this block can drop from an explosion. - */ - @Override - public boolean canDropFromExplosion(final Explosion bang) { - return false; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(final IIconRegister iconRegister) { - this.blockIcon = iconRegister.registerIcon(GTPlusPlus.ID + ":" + "chrono/" + "MetalSheet2"); - this.textureTop = iconRegister.registerIcon(GTPlusPlus.ID + ":" + "chrono/" + "MetalFunnel"); - this.textureBottom = iconRegister.registerIcon(GTPlusPlus.ID + ":" + "chrono/" + "MetalPanel"); - } -} diff --git a/src/main/java/gtPlusPlus/core/block/machine/BlockCircuitProgrammer.java b/src/main/java/gtPlusPlus/core/block/machine/BlockCircuitProgrammer.java new file mode 100644 index 0000000000..191a2a8f92 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/machine/BlockCircuitProgrammer.java @@ -0,0 +1,153 @@ +package gtPlusPlus.core.block.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +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.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import gregtech.common.items.MetaGeneratedTool01; +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.tileentities.general.TileEntityCircuitProgrammer; +import gtPlusPlus.core.util.minecraft.PlayerUtils; + +public class BlockCircuitProgrammer extends BasicTileBlockWithTooltip { + + /** + * Determines which tooltip is displayed within the itemblock. + */ + private final int mTooltipID = 4; + + @Override + public int getTooltipID() { + return this.mTooltipID; + } + + public BlockCircuitProgrammer() { + super(Material.iron); + } + + /** + * 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 MetaGeneratedTool01) + && ((mHandItem.getDamage(mHandStack) == 22) || (mHandItem.getDamage(mHandStack) == 150)))) { + final TileEntityCircuitProgrammer tile = (TileEntityCircuitProgrammer) 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 TileEntityCircuitProgrammer)) { + player.openGui(GTplusplus.instance, GuiHandler.GUI8, world, x, y, z); + 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 TileEntityCircuitProgrammer(); + } + + @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()) { + ((TileEntityCircuitProgrammer) 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 "blockCircuitProgrammer"; + } + + @Override + protected float initBlockHardness() { + return 5f; + } + + @Override + protected float initBlockResistance() { + return 1f; + } + + @Override + protected CreativeTabs initCreativeTab() { + return AddToCreativeTab.tabMachines; + } + + @Override + protected String getTileEntityName() { + return "Circuit Programmer"; + } + + @Override + public CubicObject[] getCustomTextureDirectoryObject() { + String[] aTexData = new String[] { GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_G", + GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_TECH_PANEL_B", + GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_I", + GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_I", + GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_I", + GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_I" }; + CubicObject[] aTextureData = new CubicObject[] { new CubicObject<>(aTexData) }; + return aTextureData; + } +} diff --git a/src/main/java/gtPlusPlus/core/block/machine/BlockDecayablesChest.java b/src/main/java/gtPlusPlus/core/block/machine/BlockDecayablesChest.java new file mode 100644 index 0000000000..2bcd9afb5f --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/machine/BlockDecayablesChest.java @@ -0,0 +1,179 @@ +package gtPlusPlus.core.block.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +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; + +import com.cleanroommc.modularui.factory.TileEntityGuiFactory; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.api.interfaces.ITileTooltip; +import gtPlusPlus.core.client.renderer.RenderDecayChest; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.item.base.itemblock.ItemBlockBasicTile; +import gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest; +import gtPlusPlus.core.util.minecraft.InventoryUtils; + +public class BlockDecayablesChest 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 = 5; + + @Override + public int getTooltipID() { + return this.mTooltipID; + } + + public BlockDecayablesChest() { + super(Material.iron); + this.setBlockName("blockDecayablesChest"); + this.setCreativeTab(AddToCreativeTab.tabMachines); + this.setHardness(5f); + this.setResistance(1f); + GameRegistry.registerBlock(this, ItemBlockBasicTile.class, "blockDecayablesChest"); + this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); + } + + /** + * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two + * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. + */ + @Override + public boolean isOpaqueCube() { + return false; + } + + /** + * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) + */ + @Override + public boolean renderAsNormalBlock() { + return false; + } + + /** + * The type of render function that is called for this block + */ + @Override + @SideOnly(Side.CLIENT) + public int getRenderType() { + try { + if (RenderDecayChest.INSTANCE != null) { + return RenderDecayChest.INSTANCE.mRenderID; + } + return super.getRenderType(); + } catch (NullPointerException n) { + return 0; + } + } + + /** + * Updates the blocks bounds based on its current state. + */ + @Override + public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { + if (world.getBlock(x, y, z - 1) == this) { + this.setBlockBounds(0.0625F, 0.0F, 0.0F, 0.9375F, 0.875F, 0.9375F); + } else if (world.getBlock(x, y, z + 1) == this) { + this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 1.0F); + } else if (world.getBlock(x - 1, y, z) == this) { + this.setBlockBounds(0.0F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); + } else if (world.getBlock(x + 1, y, z) == this) { + this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 1.0F, 0.875F, 0.9375F); + } else { + this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); + } + } + + /** + * Gets the block's texture. Args: side, meta + */ + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int ordinalSide, final int meta) { + return switch (ordinalSide) { + case 0 -> textureBottom; + case 1 -> textureTop; + default -> textureFront; + }; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister p_149651_1_) { + this.blockIcon = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "DecayablesChest_top"); + this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "DecayablesChest_top"); + this.textureBottom = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "DecayablesChest_side"); + this.textureFront = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "DecayablesChest_bottom"); + } + + @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 || player == null || player.worldObj != world) { + return true; + } + + final TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof TileEntityDecayablesChest) { + TileEntityGuiFactory.open(player, x, y, z); + return true; + } + return false; + } + + @Override + public int getRenderBlockPass() { + return 1; + } + + @Override + public TileEntity createNewTileEntity(final World world, final int p_149915_2_) { + return new TileEntityDecayablesChest(); + } + + @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()) { + ((TileEntityDecayablesChest) 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; + } +} diff --git a/src/main/java/gtPlusPlus/core/block/machine/BlockFishTrap.java b/src/main/java/gtPlusPlus/core/block/machine/BlockFishTrap.java new file mode 100644 index 0000000000..0a91c76d60 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/machine/BlockFishTrap.java @@ -0,0 +1,136 @@ +package gtPlusPlus.core.block.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +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; + +import cpw.mods.fml.common.registry.GameRegistry; +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.item.base.itemblock.ItemBlockBasicTile; +import gtPlusPlus.core.tileentities.general.TileEntityFishTrap; +import gtPlusPlus.core.util.minecraft.InventoryUtils; + +public class BlockFishTrap 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 = 0; + + @Override + public int getTooltipID() { + return this.mTooltipID; + } + + public BlockFishTrap() { + super(Material.iron); + this.setBlockName("blockFishTrap"); + this.setHardness(5f); + this.setResistance(1f); + this.setCreativeTab(AddToCreativeTab.tabMachines); + GameRegistry.registerBlock(this, ItemBlockBasicTile.class, "blockFishTrap"); + } + + /** + * Gets the block's texture. Args: side, meta + */ + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int ordinalSide, final int meta) { + return ordinalSide == 1 ? this.textureTop + : (ordinalSide == 0 ? this.textureBottom + : ((ordinalSide != 2) && (ordinalSide != 4) ? this.blockIcon : this.textureFront)); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister p_149651_1_) { + this.blockIcon = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "fishtrap"); + this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "fishtrap"); + this.textureBottom = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "fishtrap"); + this.textureFront = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "fishtrap"); + } + + /** + * 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 TileEntityFishTrap)) { + player.openGui(GTplusplus.instance, 5, world, x, y, z); + 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 TileEntityFishTrap(); + } + + @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()) { + ((TileEntityFishTrap) 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; + } +} diff --git a/src/main/java/gtPlusPlus/core/block/machine/BlockFlaskSetter.java b/src/main/java/gtPlusPlus/core/block/machine/BlockFlaskSetter.java new file mode 100644 index 0000000000..510caf3e14 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/machine/BlockFlaskSetter.java @@ -0,0 +1,157 @@ +package gtPlusPlus.core.block.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +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; + +import gregtech.common.items.MetaGeneratedTool01; +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.tileentities.general.TileEntityVolumetricFlaskSetter; +import gtPlusPlus.core.util.minecraft.PlayerUtils; + +public class BlockFlaskSetter 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 getItemBlockClass() { + return ItemBlockBasicTile.class; + } + + public BlockFlaskSetter() { + super(Material.iron); + } + + /** + * 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 MetaGeneratedTool01) + && ((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 aTile)) { + player.openGui(GTplusplus.instance, GuiHandler.GUI18, world, x, y, z); + // new Packet_VolumetricFlaskGui2(aTile, aTile.getCustomValue()); + return true; + } + } else { + return true; + } + } + return false; + } + + @Override + public int getRenderBlockPass() { + return 0; + } + + @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[] getCustomTextureDirectoryObject() { + String[] aTexData = new String[] { GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_A", + GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_TECH_PANEL_C", + GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H", + GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H", + GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H", + GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H" }; + CubicObject[] aTextureData = new CubicObject[] { new CubicObject<>(aTexData) }; + return aTextureData; + } +} diff --git a/src/main/java/gtPlusPlus/core/block/machine/BlockPestKiller.java b/src/main/java/gtPlusPlus/core/block/machine/BlockPestKiller.java new file mode 100644 index 0000000000..95e7f3bc56 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/machine/BlockPestKiller.java @@ -0,0 +1,137 @@ +package gtPlusPlus.core.block.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +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; + +import cpw.mods.fml.common.registry.GameRegistry; +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.tileentities.machines.TileEntityPestKiller; +import gtPlusPlus.core.util.minecraft.InventoryUtils; + +public class BlockPestKiller 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 = 6; + + @Override + public int getTooltipID() { + return this.mTooltipID; + } + + public BlockPestKiller() { + super(Material.wood); + this.setBlockName("blockPestKiller"); + this.setHardness(5f); + this.setResistance(1f); + this.setCreativeTab(AddToCreativeTab.tabMachines); + GameRegistry.registerBlock(this, ItemBlockBasicTile.class, "blockPestKiller"); + } + + /** + * Gets the block's texture. Args: side, meta + */ + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int ordinalSide, final int meta) { + return ordinalSide == 1 ? this.textureTop : (ordinalSide == 0 ? this.textureBottom : this.textureFront); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister p_149651_1_) { + this.blockIcon = p_149651_1_ + .registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "MACHINE_CASING_FARM_MANAGER_STRUCTURAL"); + this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "MACHINE_PESTKILLER_TOP"); + this.textureBottom = p_149651_1_.registerIcon("planks_acacia"); + this.textureFront = p_149651_1_ + .registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "MACHINE_CASING_FARM_MANAGER_STRUCTURAL"); + } + + /** + * 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 TileEntityPestKiller)) { + player.openGui(GTplusplus.instance, GuiHandler.GUI15, world, x, y, z); + return true; + } + return false; + } + + @Override + public int getRenderBlockPass() { + return 0; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public TileEntity createNewTileEntity(final World world, final int p_149915_2_) { + return new TileEntityPestKiller(); + } + + @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()) { + ((TileEntityPestKiller) 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; + } +} diff --git a/src/main/java/gtPlusPlus/core/block/machine/BlockPooCollector.java b/src/main/java/gtPlusPlus/core/block/machine/BlockPooCollector.java new file mode 100644 index 0000000000..6a371a3284 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/machine/BlockPooCollector.java @@ -0,0 +1,177 @@ +package gtPlusPlus.core.block.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.List; +import java.util.Random; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +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.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.item.base.itemblock.ItemBlockMeta; +import gtPlusPlus.core.tileentities.machines.TileEntityAdvPooCollector; +import gtPlusPlus.core.tileentities.machines.TileEntityBaseFluidCollector; +import gtPlusPlus.core.tileentities.machines.TileEntityPooCollector; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; + +public class BlockPooCollector extends BlockContainer { + + @SideOnly(Side.CLIENT) + private IIcon textureTop; + + @SideOnly(Side.CLIENT) + private IIcon textureTop2; + + @SideOnly(Side.CLIENT) + private IIcon textureSide; + + @SideOnly(Side.CLIENT) + private IIcon textureSide2; + + public BlockPooCollector() { + super(Material.iron); + this.setHardness(5f); + this.setResistance(1f); + this.setBlockName("blockPooCollector"); + this.setCreativeTab(AddToCreativeTab.tabMachines); + GameRegistry.registerBlock(this, ItemBlockMeta.class, "blockPooCollector"); + } + + /** + * Gets the block's texture. Args: side, meta + */ + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int ordinalSide, final int aMeta) { + if (aMeta <= 7) { + blockIcon = textureSide; + return ordinalSide <= 1 ? this.textureTop : this.textureSide; + } else { + blockIcon = textureSide2; + return ordinalSide <= 1 ? this.textureTop2 : this.textureSide2; + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister p_149651_1_) { + this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "sewer_top"); + this.textureTop2 = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "sewer_adv_top"); + this.textureSide = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "sewer_sides"); + this.textureSide2 = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "sewer_adv_sides"); + } + + /** + * 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 { + TileEntityBaseFluidCollector tank = (TileEntityBaseFluidCollector) world.getTileEntity(x, y, z); + if (tank != null) { + Item handItem; + try { + handItem = player.getHeldItem() + .getItem(); + } catch (Throwable t) { + handItem = null; + } + + // Fluid container code + /* + * if (handItem != null && (handItem instanceof IFluidContainerItem || handItem instanceof + * ItemFluidContainer || FluidContainerRegistry.isFilledContainer(player.getHeldItem()))) { if + * (tank.tank.getFluid() == null) { try { if + * (!FluidContainerRegistry.isFilledContainer(player.getHeldItem())) { ItemStack handItemStack = + * player.getHeldItem(); IFluidContainerItem container = (IFluidContainerItem) handItem; FluidStack + * containerFluid = container.getFluid(handItemStack); container.drain(handItemStack, + * container.getFluid(handItemStack).amount, true); tank.tank.setFluid(containerFluid); } else { + * ItemStack handItemStack = player.getHeldItem(); + * FluidContainerRegistry.drainFluidContainer(handItemStack); FluidStack containerFluid = + * FluidContainerRegistry.getFluidForFilledItem(handItemStack); ItemStack emptyContainer = + * FluidContainerRegistry.drainFluidContainer(handItemStack); player.setItemInUse(emptyContainer, 0); + * tank.tank.setFluid(containerFluid); } } catch (Throwable t) { t.printStackTrace(); } } } + */ + + if (!tank.mInventory.isEmpty()) { + PlayerUtils.messagePlayer(player, "Inventory contains:"); + PlayerUtils.messagePlayer(player, ItemUtils.getArrayStackNames(tank.mInventory.getRealInventory())); + } else { + PlayerUtils.messagePlayer(player, "No solids collected yet."); + } + if (tank.tank.getFluid() != null) { + PlayerUtils.messagePlayer( + player, + "Tank contains " + tank.tank.getFluidAmount() + + "L of " + + tank.tank.getFluid() + .getLocalizedName()); + } + } + } + return true; + } + + @Override + public int getRenderBlockPass() { + return 0; + } + + @Override + public boolean isOpaqueCube() { + return super.isOpaqueCube(); + } + + @Override + public TileEntity createNewTileEntity(final World world, final int aMeta) { + return aMeta <= 7 ? new TileEntityPooCollector() : new TileEntityAdvPooCollector(); + } + + @Override + public void onBlockAdded(World world, int x, int y, int z) { + super.onBlockAdded(world, x, y, z); + } + + @Override + public int getBlockColor() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public int damageDropped(final int damage) { + return damage; + } + + @Override + public Item getItemDropped(final int meta, final Random rand, final int fortune) { + return Item.getItemFromBlock(this); + } + + @Override + public int getRenderColor(int aMeta) { + return super.getRenderColor(aMeta); + } + + @Override + public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) { + aList.add(new ItemStack(aItem, 1, 0)); + aList.add(new ItemStack(aItem, 1, 8)); + } +} diff --git a/src/main/java/gtPlusPlus/core/block/machine/BlockProjectTable.java b/src/main/java/gtPlusPlus/core/block/machine/BlockProjectTable.java new file mode 100644 index 0000000000..1537aec736 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/machine/BlockProjectTable.java @@ -0,0 +1,160 @@ +package gtPlusPlus.core.block.machine; + +import static gregtech.api.enums.Mods.BuildCraftCore; +import static gregtech.api.enums.Mods.EnderIO; +import static gregtech.api.enums.Mods.GTPlusPlus; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +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; + +import cpw.mods.fml.common.Optional; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Mods; +import gtPlusPlus.GTplusplus; +import gtPlusPlus.api.interfaces.ITileTooltip; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.item.base.itemblock.ItemBlockBasicTile; +import gtPlusPlus.core.tileentities.machines.TileEntityProjectTable; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import ic2.core.item.tool.ItemToolWrench; + +@Optional.Interface(iface = "crazypants.enderio.api.tool.ITool", modid = Mods.Names.ENDER_I_O) +public class BlockProjectTable 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 = 3; + + @Override + public int getTooltipID() { + return this.mTooltipID; + } + + public BlockProjectTable() { + super(Material.iron); + this.setBlockName("blockProjectBench"); + this.setCreativeTab(AddToCreativeTab.tabMachines); + GameRegistry.registerBlock(this, ItemBlockBasicTile.class, "blockProjectBench"); + } + + /** + * Gets the block's texture. Args: side, meta + */ + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(final int ordinalSide, final int meta) { + return ordinalSide == 1 ? this.textureTop + : (ordinalSide == 0 ? this.textureBottom + : ((ordinalSide != 2) && (ordinalSide != 4) ? this.blockIcon : this.textureFront)); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(final IIconRegister p_149651_1_) { + this.blockIcon = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "machine_top"); + this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "cover_crafting"); + this.textureBottom = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "machine_top"); + this.textureFront = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "machine_top"); + } + + /** + * 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) { + + ItemStack heldItem = null; + if (world.isRemote) { + heldItem = PlayerUtils.getItemStackInPlayersHand(); + } + + boolean holdingWrench = false; + + if (heldItem != null) { + holdingWrench = isWrench(heldItem); + } + + if (world.isRemote) { + return true; + } + + final TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof TileEntityProjectTable) { + if (!holdingWrench) { + player.openGui(GTplusplus.instance, 0, world, x, y, z); + return true; + } + Logger.INFO("Holding a Wrench, doing wrench things instead."); + } + return false; + } + + @Override + public TileEntity createNewTileEntity(final World world, final int p_149915_2_) { + return new TileEntityProjectTable(); + } + + public static boolean isWrench(final ItemStack item) { + if (item.getItem() instanceof ItemToolWrench) { + return true; + } + if (BuildCraftCore.isModLoaded()) { + return checkBuildcraftWrench(item); + } + if (EnderIO.isModLoaded()) { + return checkEnderIOWrench(item); + } + return false; + } + + private static boolean checkEnderIOWrench(final ItemStack item) { + if (ReflectionUtils.doesClassExist("crazypants.enderio.api.tool.ITool")) { + Class wrenchClass; + wrenchClass = ReflectionUtils.getClass("crazypants.enderio.api.tool.ITool"); + if (wrenchClass.isInstance(item.getItem())) { + return true; + } + } + return false; + } + + private static boolean checkBuildcraftWrench(final ItemStack item) { + if (ReflectionUtils.doesClassExist("buildcraft.api.tools.IToolWrench")) { + Class wrenchClass; + wrenchClass = ReflectionUtils.getClass("buildcraft.api.tools.IToolWrench"); + if (wrenchClass.isInstance(item.getItem())) { + return true; + } + } + return false; + } + + @Override + public boolean canCreatureSpawn(final EnumCreatureType type, final IBlockAccess world, final int x, final int y, + final int z) { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/core/block/machine/BlockSuperJukebox.java b/src/main/java/gtPlusPlus/core/block/machine/BlockSuperJukebox.java new file mode 100644 index 0000000000..4440d2920a --- /dev/null +++ b/src/main/java/gtPlusPlus/core/block/machine/BlockSuperJukebox.java @@ -0,0 +1,574 @@ +package gtPlusPlus.core.block.machine; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.BlockJukebox; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemRecord; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.util.GTUtility; +import gtPlusPlus.GTplusplus; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.core.handler.GuiHandler; +import gtPlusPlus.core.inventories.InventorySuperJukebox; +import gtPlusPlus.core.util.math.MathUtils; + +public class BlockSuperJukebox extends BlockJukebox { + + @SideOnly(Side.CLIENT) + private IIcon mIcon; + + public static class SuperJukeboxItemBlock extends ItemBlock { + + public SuperJukeboxItemBlock(Block block) { + super(block); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List tooltips, boolean f3HEnabled) { + tooltips.add(StatCollector.translateToLocal("tile.blockSuperJukebox.deprecated")); + } + } + + public BlockSuperJukebox() { + this.setBlockName("blockSuperJukebox"); + this.setCreativeTab(CreativeTabs.tabRedstone); + setHardness(2.0F); + setResistance(10.0F); + setStepSound(soundTypePiston); + setBlockTextureName("jukebox"); + GameRegistry.registerBlock(this, SuperJukeboxItemBlock.class, "blockSuperJukebox"); + } + + /** + * Gets the block's texture. Args: side, meta + */ + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int ordinalSide, int aMeta) { + return ordinalSide == 1 ? this.mIcon : this.blockIcon; + } + + /** + * 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 TileEntitySuperJukebox)) { + player.openGui(GTplusplus.instance, GuiHandler.GUI14, world, x, y, z); + return true; + } + return false; + + /* + * if (aWorld.getBlockMetadata(aX, aY, aZ) == 0) { return false; } else { this.func_149925_e(aWorld, aX, aY, + * aZ); return true; } + */ + } + + /** + * Set the record in the {@link SuperJukebox} {@link TileEntity}. + */ + @Override + public final void func_149926_b(World aWorld, int aX, int aY, int aZ, ItemStack aStackToSet) { + setRecordInJukeBox(aWorld, aX, aY, aZ, aStackToSet); + } + + public void setRecordInJukeBox(World aWorld, int aX, int aY, int aZ, ItemStack aStackToSet) { + if (!aWorld.isRemote) { + TileEntitySuperJukebox tileentityjukebox = (TileEntitySuperJukebox) aWorld.getTileEntity(aX, aY, aZ); + if (tileentityjukebox != null && aStackToSet.getItem() instanceof ItemRecord) { + tileentityjukebox.setCurrentRecord(aStackToSet.copy()); + // aWorld.setBlockMetadataWithNotify(aX, aY, aZ, 1, 2); + } + } + } + + /** + * Function to handle playing of records. + */ + @Override + public final void func_149925_e(World aWorld, int aX, int aY, int aZ) { + playJukeboxRecord(aWorld, aX, aY, aZ); + } + + public void playJukeboxRecord(World aWorld, int aX, int aY, int aZ) { + if (!aWorld.isRemote) { + TileEntitySuperJukebox tileentityjukebox = (TileEntitySuperJukebox) aWorld.getTileEntity(aX, aY, aZ); + + if (tileentityjukebox != null) { + ItemStack itemstack = tileentityjukebox.func_145856_a(); + + if (itemstack != null) { + + aWorld.playAuxSFX(1005, aX, aY, aZ, Item.getIdFromItem(itemstack.getItem())); + /* + * float f = 0.7F; double d0 = (double) (aWorld.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; + * double d1 = (double) (aWorld.rand.nextFloat() * f) + (double) (1.0F - f) * 0.2D + 0.6D; double d2 + * = (double) (aWorld.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; ItemStack itemstack1 = + * itemstack.copy(); EntityItem entityitem = new EntityItem(aWorld, (double) aX + d0, (double) aY + + * d1, (double) aZ + d2, itemstack1); entityitem.delayBeforeCanPickup = 10; + * aWorld.spawnEntityInWorld(entityitem); + */ + } + } + } + } + + @Override + public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, + int p_149749_6_) { + this.func_149925_e(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_); + super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); + } + + /** + * Drops the block items with a specified chance of dropping the specified items + */ + @Override + public void dropBlockAsItemWithChance(World p_149690_1_, int p_149690_2_, int p_149690_3_, int p_149690_4_, + int p_149690_5_, float p_149690_6_, int p_149690_7_) { + if (!p_149690_1_.isRemote) { + super.dropBlockAsItemWithChance( + p_149690_1_, + p_149690_2_, + p_149690_3_, + p_149690_4_, + p_149690_5_, + p_149690_6_, + 0); + } + } + + /** + * Returns a new instance of a block's tile entity class. Called on placing the block. + */ + @Override + public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { + return new TileEntitySuperJukebox(); + } + + @SideOnly(Side.CLIENT) + @Override + public void registerBlockIcons(IIconRegister p_149651_1_) { + this.blockIcon = p_149651_1_.registerIcon(this.getTextureName() + "_side"); + this.mIcon = p_149651_1_.registerIcon(this.getTextureName() + "_top"); + } + + public static class TileEntitySuperJukebox extends TileEntityJukebox implements ISidedInventory { + + /** The number of players currently using this chest */ + public int numPlayersUsing; + + private ItemStack mCurrentlyPlayingStack; + private final InventorySuperJukebox inventoryContents; + private String customName; + + /* + * Important Data + */ + + public int a_TEST_INT_VAR_1; + public int a_TEST_INT_VAR_2; + public int a_TEST_INT_VAR_3; + public int a_TEST_INT_VAR_4; + + public boolean mIsPlaying = false; + public boolean mIsLooping = false; + public boolean a_TEST_BOOL_VAR_3; + public boolean a_TEST_BOOL_VAR_4; + + public TileEntitySuperJukebox() { + this.inventoryContents = new InventorySuperJukebox(); + } + + @Override + public void readFromNBT(NBTTagCompound aNBT) { + super.readFromNBT(aNBT); + + if (aNBT.hasKey("RecordItem", 10)) { + this.func_145857_a(ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("RecordItem"))); + } else if (aNBT.getInteger("Record") > 0) { + this.func_145857_a(new ItemStack(Item.getItemById(aNBT.getInteger("Record")), 1, 0)); + } + + this.inventoryContents.readFromNBT(aNBT.getCompoundTag("ContentsChest")); + if (aNBT.hasKey("CustomName", 8)) { + this.setCustomName(aNBT.getString("CustomName")); + } + + mIsPlaying = aNBT.getBoolean("mIsPlaying"); + mIsLooping = aNBT.getBoolean("mIsLooping"); + } + + @Override + public void writeToNBT(NBTTagCompound aNBT) { + super.writeToNBT(aNBT); + + if (this.getCurrentRecord() != null) { + aNBT.setTag( + "RecordItem", + this.func_145856_a() + .writeToNBT(new NBTTagCompound())); + aNBT.setInteger( + "Record", + Item.getIdFromItem( + this.func_145856_a() + .getItem())); + } + + final NBTTagCompound chestData = new NBTTagCompound(); + this.inventoryContents.writeToNBT(chestData); + aNBT.setTag("ContentsChest", chestData); + if (this.hasCustomInventoryName()) { + aNBT.setString("CustomName", this.getCustomName()); + } + + aNBT.setBoolean("mIsPlaying", mIsPlaying); + aNBT.setBoolean("mIsLooping", mIsLooping); + } + + /** + * Called to get the internal stack + */ + @Override + public ItemStack func_145856_a() { + return this.mCurrentlyPlayingStack; + } + + /** + * Called to get the internal stack, wraps vanilla function {@link func_145856_a}. + */ + public ItemStack getCurrentRecord() { + return func_145856_a(); + } + + /** + * Called to set the internal stack + */ + @Override + public void func_145857_a(ItemStack p_145857_1_) { + this.mCurrentlyPlayingStack = p_145857_1_; + this.markDirty(); + } + + /** + * Called to set the internal stack, wraps vanilla function {@link func_145857_a}. + */ + public void setCurrentRecord(ItemStack aStack) { + func_145857_a(aStack); + this.markDirty(); + } + + public InventorySuperJukebox getInventory() { + return this.inventoryContents; + } + + public boolean playRecord(ItemStack aRecord) { + + return false; + } + + public boolean stopRecord() { + return openDiscDrive(); + } + + public void setLoopState(boolean isShufflingForever) {} + + // Play button pressed + public boolean jukeboxLogicUpdate() { + + if (this.worldObj.isRemote) { + return true; + } + + Logger.INFO("a"); + if (this.mIsPlaying || this.mIsLooping) { + return selectRecordToPlayFromInventoryAndSetViaVanillaHandler(); + } else { + return stopRecord(); + } + } + + // Determine which record to play + public boolean selectRecordToPlayFromInventoryAndSetViaVanillaHandler() { + AutoMap mValidRecords = new AutoMap<>(); + for (ItemStack g : this.getInventory() + .getInventory()) { + if (g != null) { + if (g.getItem() instanceof ItemRecord) { + mValidRecords.put(g); + } + } + } + + Logger.INFO("b1"); + // Select First Record + ItemStack aRecordToPlay; + if (mValidRecords.size() == 0) { + Logger.INFO("bX"); + return false; + } else { + aRecordToPlay = mValidRecords.get(!mIsLooping ? 0 : MathUtils.randInt(0, (mValidRecords.size() - 1))); + } + Logger.INFO("b2 - " + aRecordToPlay.getDisplayName()); + + int aSlotCounter = 0; + for (ItemStack g : this.getInventory() + .getInventory()) { + if (g != null && aSlotCounter <= 17) { + Logger.INFO("b3 - " + g.getDisplayName()); + if (GTUtility.areStacksEqual(g, aRecordToPlay, true)) { + IInventory aThisInv = this.getInventory(); + if (aThisInv.getStackInSlot(20) != null) { + openDiscDrive(); + } + + GTUtility.moveStackFromSlotAToSlotB( + aThisInv, + aThisInv, + aSlotCounter, + 20, + (byte) 1, + (byte) 1, + (byte) 1, + (byte) 1); + setCurrentRecord(aThisInv.getStackInSlot(20)); + + World aWorld = this.worldObj; + int aX = this.xCoord; + int aY = this.yCoord; + int aZ = this.zCoord; + if (!aWorld.isRemote) { + aRecordToPlay = this.func_145856_a(); + if (aRecordToPlay != null) { + aWorld.playAuxSFX(1005, aX, aY, aZ, Item.getIdFromItem(aRecordToPlay.getItem())); + this.markDirty(); + return true; + } + } + + Logger.INFO("b++"); + this.markDirty(); + return false; + } + } + aSlotCounter++; + } + + Logger.INFO("b4"); + this.markDirty(); + return false; + } + + public boolean genericMethodThree(Object a1, Object a2, Object a3, Object a4) { + return false; + } + + public void vanillaStopJukebox() { + World aWorld = this.worldObj; + int aX = this.xCoord; + int aY = this.yCoord; + int aZ = this.zCoord; + if (!aWorld.isRemote) { + TileEntitySuperJukebox tileentityjukebox = (TileEntitySuperJukebox) aWorld.getTileEntity(aX, aY, aZ); + if (tileentityjukebox != null) { + ItemStack aRecordToPlay = tileentityjukebox.func_145856_a(); + if (aRecordToPlay != null) { + aWorld.playAuxSFX(1005, aX, aY, aZ, 0); + aWorld.playRecord((String) null, aX, aY, aZ); + tileentityjukebox.func_145857_a((ItemStack) null); + this.markDirty(); + } + } + } + } + + public boolean openDiscDrive() { + int aSlotCounter = 17; + + ItemStack g; + + for (int i = 17; i >= 0; i--) { + g = this.getInventory() + .getInventory()[i]; + if (g == null && aSlotCounter >= 0) { + IInventory aThisInv = this.getInventory(); + GTUtility + .moveStackFromSlotAToSlotB(aThisInv, aThisInv, 20, i, (byte) 1, (byte) 1, (byte) 1, (byte) 1); + vanillaStopJukebox(); + Logger.INFO("b++"); + this.markDirty(); + return true; + } + } + + /* + * for (ItemStack g : this.getInventory().getInventory()) { if (g == null && aSlotCounter >= 0) { IInventory + * aThisInv = this.getInventory(); GT_Utility.moveStackFromSlotAToSlotB(aThisInv, aThisInv, 20, + * aSlotCounter, (byte) 1, (byte) 1, (byte) 1, (byte) 1); vanillaStopJukebox(); Logger.INFO("b++"); return + * true; } aSlotCounter--; } + */ + this.markDirty(); + return false; + } + + 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 int getSizeInventory() { + return this.getInventory() + .getSizeInventory() - 3; + } + + @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 1; + } + + @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++; + } + 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--; + } + 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) { + if (slot >= 18) { + return false; + } + return this.getInventory() + .isItemValidForSlot(slot, itemstack); + } + + private static final int[] SIDED_SLOTS = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17 }; + + @Override + public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { + return SIDED_SLOTS; + } + + @Override + public boolean canInsertItem(final int p_102007_1_, final ItemStack p_102007_2_, final int p_102007_3_) { + if (p_102007_1_ >= 18) { + return false; + } + return this.getInventory() + .isItemValidForSlot(p_102007_1_, p_102007_2_); + } + + @Override + public boolean canExtractItem(final int p_102008_1_, final ItemStack p_102008_2_, final int p_102008_3_) { + if (p_102008_1_ >= 18) { + return false; + } + return this.getInventory() + .isItemValidForSlot(p_102008_1_, 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.SuperJukebox"; + } + + @Override + public boolean hasCustomInventoryName() { + return (this.customName != null) && !this.customName.equals(""); + } + } +} diff --git a/src/main/java/gtPlusPlus/core/block/machine/CircuitProgrammer.java b/src/main/java/gtPlusPlus/core/block/machine/CircuitProgrammer.java deleted file mode 100644 index f6cd34aec1..0000000000 --- a/src/main/java/gtPlusPlus/core/block/machine/CircuitProgrammer.java +++ /dev/null @@ -1,153 +0,0 @@ -package gtPlusPlus.core.block.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -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.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -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.tileentities.general.TileEntityCircuitProgrammer; -import gtPlusPlus.core.util.minecraft.PlayerUtils; - -public class CircuitProgrammer extends BasicTileBlockWithTooltip { - - /** - * Determines which tooltip is displayed within the itemblock. - */ - private final int mTooltipID = 4; - - @Override - public int getTooltipID() { - return this.mTooltipID; - } - - public CircuitProgrammer() { - super(Material.iron); - } - - /** - * 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 TileEntityCircuitProgrammer tile = (TileEntityCircuitProgrammer) 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 TileEntityCircuitProgrammer)) { - player.openGui(GTplusplus.instance, GuiHandler.GUI8, world, x, y, z); - 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 TileEntityCircuitProgrammer(); - } - - @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()) { - ((TileEntityCircuitProgrammer) 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 "blockCircuitProgrammer"; - } - - @Override - protected float initBlockHardness() { - return 5f; - } - - @Override - protected float initBlockResistance() { - return 1f; - } - - @Override - protected CreativeTabs initCreativeTab() { - return AddToCreativeTab.tabMachines; - } - - @Override - protected String getTileEntityName() { - return "Circuit Programmer"; - } - - @Override - public CubicObject[] getCustomTextureDirectoryObject() { - String[] aTexData = new String[] { GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_G", - GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_TECH_PANEL_B", - GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_I", - GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_I", - GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_I", - GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_I" }; - CubicObject[] aTextureData = new CubicObject[] { new CubicObject<>(aTexData) }; - return aTextureData; - } -} diff --git a/src/main/java/gtPlusPlus/core/block/machine/DecayablesChest.java b/src/main/java/gtPlusPlus/core/block/machine/DecayablesChest.java deleted file mode 100644 index 16d038bea9..0000000000 --- a/src/main/java/gtPlusPlus/core/block/machine/DecayablesChest.java +++ /dev/null @@ -1,179 +0,0 @@ -package gtPlusPlus.core.block.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -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; - -import com.cleanroommc.modularui.factory.TileEntityGuiFactory; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.api.interfaces.ITileTooltip; -import gtPlusPlus.core.client.renderer.RenderDecayChest; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.item.base.itemblock.ItemBlockBasicTile; -import gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest; -import gtPlusPlus.core.util.minecraft.InventoryUtils; - -public class DecayablesChest 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 = 5; - - @Override - public int getTooltipID() { - return this.mTooltipID; - } - - public DecayablesChest() { - super(Material.iron); - this.setBlockName("blockDecayablesChest"); - this.setCreativeTab(AddToCreativeTab.tabMachines); - this.setHardness(5f); - this.setResistance(1f); - GameRegistry.registerBlock(this, ItemBlockBasicTile.class, "blockDecayablesChest"); - this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); - } - - /** - * Is this block (a) opaque and (b) a full 1m cube? This determines whether or not to render the shared face of two - * adjacent blocks and also whether the player can attach torches, redstone wire, etc to this block. - */ - @Override - public boolean isOpaqueCube() { - return false; - } - - /** - * If this block doesn't render as an ordinary block it will return False (examples: signs, buttons, stairs, etc) - */ - @Override - public boolean renderAsNormalBlock() { - return false; - } - - /** - * The type of render function that is called for this block - */ - @Override - @SideOnly(Side.CLIENT) - public int getRenderType() { - try { - if (RenderDecayChest.INSTANCE != null) { - return RenderDecayChest.INSTANCE.mRenderID; - } - return super.getRenderType(); - } catch (NullPointerException n) { - return 0; - } - } - - /** - * Updates the blocks bounds based on its current state. - */ - @Override - public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { - if (world.getBlock(x, y, z - 1) == this) { - this.setBlockBounds(0.0625F, 0.0F, 0.0F, 0.9375F, 0.875F, 0.9375F); - } else if (world.getBlock(x, y, z + 1) == this) { - this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 1.0F); - } else if (world.getBlock(x - 1, y, z) == this) { - this.setBlockBounds(0.0F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); - } else if (world.getBlock(x + 1, y, z) == this) { - this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 1.0F, 0.875F, 0.9375F); - } else { - this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); - } - } - - /** - * Gets the block's texture. Args: side, meta - */ - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(final int ordinalSide, final int meta) { - return switch (ordinalSide) { - case 0 -> textureBottom; - case 1 -> textureTop; - default -> textureFront; - }; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(final IIconRegister p_149651_1_) { - this.blockIcon = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "DecayablesChest_top"); - this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "DecayablesChest_top"); - this.textureBottom = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "DecayablesChest_side"); - this.textureFront = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "DecayablesChest_bottom"); - } - - @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 || player == null || player.worldObj != world) { - return true; - } - - final TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof TileEntityDecayablesChest) { - TileEntityGuiFactory.open(player, x, y, z); - return true; - } - return false; - } - - @Override - public int getRenderBlockPass() { - return 1; - } - - @Override - public TileEntity createNewTileEntity(final World world, final int p_149915_2_) { - return new TileEntityDecayablesChest(); - } - - @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()) { - ((TileEntityDecayablesChest) 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; - } -} diff --git a/src/main/java/gtPlusPlus/core/block/machine/FishTrap.java b/src/main/java/gtPlusPlus/core/block/machine/FishTrap.java deleted file mode 100644 index 0ec1ac629a..0000000000 --- a/src/main/java/gtPlusPlus/core/block/machine/FishTrap.java +++ /dev/null @@ -1,136 +0,0 @@ -package gtPlusPlus.core.block.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -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; - -import cpw.mods.fml.common.registry.GameRegistry; -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.item.base.itemblock.ItemBlockBasicTile; -import gtPlusPlus.core.tileentities.general.TileEntityFishTrap; -import gtPlusPlus.core.util.minecraft.InventoryUtils; - -public class FishTrap 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 = 0; - - @Override - public int getTooltipID() { - return this.mTooltipID; - } - - public FishTrap() { - super(Material.iron); - this.setBlockName("blockFishTrap"); - this.setHardness(5f); - this.setResistance(1f); - this.setCreativeTab(AddToCreativeTab.tabMachines); - GameRegistry.registerBlock(this, ItemBlockBasicTile.class, "blockFishTrap"); - } - - /** - * Gets the block's texture. Args: side, meta - */ - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(final int ordinalSide, final int meta) { - return ordinalSide == 1 ? this.textureTop - : (ordinalSide == 0 ? this.textureBottom - : ((ordinalSide != 2) && (ordinalSide != 4) ? this.blockIcon : this.textureFront)); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(final IIconRegister p_149651_1_) { - this.blockIcon = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "fishtrap"); - this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "fishtrap"); - this.textureBottom = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "fishtrap"); - this.textureFront = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "fishtrap"); - } - - /** - * 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 TileEntityFishTrap)) { - player.openGui(GTplusplus.instance, 5, world, x, y, z); - 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 TileEntityFishTrap(); - } - - @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()) { - ((TileEntityFishTrap) 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; - } -} diff --git a/src/main/java/gtPlusPlus/core/block/machine/Machine_PestKiller.java b/src/main/java/gtPlusPlus/core/block/machine/Machine_PestKiller.java deleted file mode 100644 index bf98a22500..0000000000 --- a/src/main/java/gtPlusPlus/core/block/machine/Machine_PestKiller.java +++ /dev/null @@ -1,137 +0,0 @@ -package gtPlusPlus.core.block.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -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; - -import cpw.mods.fml.common.registry.GameRegistry; -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.tileentities.machines.TileEntityPestKiller; -import gtPlusPlus.core.util.minecraft.InventoryUtils; - -public class Machine_PestKiller 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 = 6; - - @Override - public int getTooltipID() { - return this.mTooltipID; - } - - public Machine_PestKiller() { - super(Material.wood); - this.setBlockName("blockPestKiller"); - this.setHardness(5f); - this.setResistance(1f); - this.setCreativeTab(AddToCreativeTab.tabMachines); - GameRegistry.registerBlock(this, ItemBlockBasicTile.class, "blockPestKiller"); - } - - /** - * Gets the block's texture. Args: side, meta - */ - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(final int ordinalSide, final int meta) { - return ordinalSide == 1 ? this.textureTop : (ordinalSide == 0 ? this.textureBottom : this.textureFront); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(final IIconRegister p_149651_1_) { - this.blockIcon = p_149651_1_ - .registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "MACHINE_CASING_FARM_MANAGER_STRUCTURAL"); - this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "MACHINE_PESTKILLER_TOP"); - this.textureBottom = p_149651_1_.registerIcon("planks_acacia"); - this.textureFront = p_149651_1_ - .registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "MACHINE_CASING_FARM_MANAGER_STRUCTURAL"); - } - - /** - * 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 TileEntityPestKiller)) { - player.openGui(GTplusplus.instance, GuiHandler.GUI15, world, x, y, z); - return true; - } - return false; - } - - @Override - public int getRenderBlockPass() { - return 0; - } - - @Override - public boolean isOpaqueCube() { - return false; - } - - @Override - public TileEntity createNewTileEntity(final World world, final int p_149915_2_) { - return new TileEntityPestKiller(); - } - - @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()) { - ((TileEntityPestKiller) 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; - } -} diff --git a/src/main/java/gtPlusPlus/core/block/machine/Machine_PooCollector.java b/src/main/java/gtPlusPlus/core/block/machine/Machine_PooCollector.java deleted file mode 100644 index 4f1b679fcf..0000000000 --- a/src/main/java/gtPlusPlus/core/block/machine/Machine_PooCollector.java +++ /dev/null @@ -1,177 +0,0 @@ -package gtPlusPlus.core.block.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.List; -import java.util.Random; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -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.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.item.base.itemblock.ItemBlockMeta; -import gtPlusPlus.core.tileentities.machines.TileEntityAdvPooCollector; -import gtPlusPlus.core.tileentities.machines.TileEntityBaseFluidCollector; -import gtPlusPlus.core.tileentities.machines.TileEntityPooCollector; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; - -public class Machine_PooCollector extends BlockContainer { - - @SideOnly(Side.CLIENT) - private IIcon textureTop; - - @SideOnly(Side.CLIENT) - private IIcon textureTop2; - - @SideOnly(Side.CLIENT) - private IIcon textureSide; - - @SideOnly(Side.CLIENT) - private IIcon textureSide2; - - public Machine_PooCollector() { - super(Material.iron); - this.setHardness(5f); - this.setResistance(1f); - this.setBlockName("blockPooCollector"); - this.setCreativeTab(AddToCreativeTab.tabMachines); - GameRegistry.registerBlock(this, ItemBlockMeta.class, "blockPooCollector"); - } - - /** - * Gets the block's texture. Args: side, meta - */ - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(final int ordinalSide, final int aMeta) { - if (aMeta <= 7) { - blockIcon = textureSide; - return ordinalSide <= 1 ? this.textureTop : this.textureSide; - } else { - blockIcon = textureSide2; - return ordinalSide <= 1 ? this.textureTop2 : this.textureSide2; - } - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(final IIconRegister p_149651_1_) { - this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "sewer_top"); - this.textureTop2 = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "sewer_adv_top"); - this.textureSide = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "sewer_sides"); - this.textureSide2 = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "sewer_adv_sides"); - } - - /** - * 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 { - TileEntityBaseFluidCollector tank = (TileEntityBaseFluidCollector) world.getTileEntity(x, y, z); - if (tank != null) { - Item handItem; - try { - handItem = player.getHeldItem() - .getItem(); - } catch (Throwable t) { - handItem = null; - } - - // Fluid container code - /* - * if (handItem != null && (handItem instanceof IFluidContainerItem || handItem instanceof - * ItemFluidContainer || FluidContainerRegistry.isFilledContainer(player.getHeldItem()))) { if - * (tank.tank.getFluid() == null) { try { if - * (!FluidContainerRegistry.isFilledContainer(player.getHeldItem())) { ItemStack handItemStack = - * player.getHeldItem(); IFluidContainerItem container = (IFluidContainerItem) handItem; FluidStack - * containerFluid = container.getFluid(handItemStack); container.drain(handItemStack, - * container.getFluid(handItemStack).amount, true); tank.tank.setFluid(containerFluid); } else { - * ItemStack handItemStack = player.getHeldItem(); - * FluidContainerRegistry.drainFluidContainer(handItemStack); FluidStack containerFluid = - * FluidContainerRegistry.getFluidForFilledItem(handItemStack); ItemStack emptyContainer = - * FluidContainerRegistry.drainFluidContainer(handItemStack); player.setItemInUse(emptyContainer, 0); - * tank.tank.setFluid(containerFluid); } } catch (Throwable t) { t.printStackTrace(); } } } - */ - - if (!tank.mInventory.isEmpty()) { - PlayerUtils.messagePlayer(player, "Inventory contains:"); - PlayerUtils.messagePlayer(player, ItemUtils.getArrayStackNames(tank.mInventory.getRealInventory())); - } else { - PlayerUtils.messagePlayer(player, "No solids collected yet."); - } - if (tank.tank.getFluid() != null) { - PlayerUtils.messagePlayer( - player, - "Tank contains " + tank.tank.getFluidAmount() - + "L of " - + tank.tank.getFluid() - .getLocalizedName()); - } - } - } - return true; - } - - @Override - public int getRenderBlockPass() { - return 0; - } - - @Override - public boolean isOpaqueCube() { - return super.isOpaqueCube(); - } - - @Override - public TileEntity createNewTileEntity(final World world, final int aMeta) { - return aMeta <= 7 ? new TileEntityPooCollector() : new TileEntityAdvPooCollector(); - } - - @Override - public void onBlockAdded(World world, int x, int y, int z) { - super.onBlockAdded(world, x, y, z); - } - - @Override - public int getBlockColor() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public int damageDropped(final int damage) { - return damage; - } - - @Override - public Item getItemDropped(final int meta, final Random rand, final int fortune) { - return Item.getItemFromBlock(this); - } - - @Override - public int getRenderColor(int aMeta) { - return super.getRenderColor(aMeta); - } - - @Override - public void getSubBlocks(Item aItem, CreativeTabs aTab, List aList) { - aList.add(new ItemStack(aItem, 1, 0)); - aList.add(new ItemStack(aItem, 1, 8)); - } -} diff --git a/src/main/java/gtPlusPlus/core/block/machine/Machine_ProjectTable.java b/src/main/java/gtPlusPlus/core/block/machine/Machine_ProjectTable.java deleted file mode 100644 index 4f0d0d7d60..0000000000 --- a/src/main/java/gtPlusPlus/core/block/machine/Machine_ProjectTable.java +++ /dev/null @@ -1,160 +0,0 @@ -package gtPlusPlus.core.block.machine; - -import static gregtech.api.enums.Mods.BuildCraftCore; -import static gregtech.api.enums.Mods.EnderIO; -import static gregtech.api.enums.Mods.GTPlusPlus; - -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -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; - -import cpw.mods.fml.common.Optional; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Mods; -import gtPlusPlus.GTplusplus; -import gtPlusPlus.api.interfaces.ITileTooltip; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.item.base.itemblock.ItemBlockBasicTile; -import gtPlusPlus.core.tileentities.machines.TileEntityProjectTable; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import ic2.core.item.tool.ItemToolWrench; - -@Optional.Interface(iface = "crazypants.enderio.api.tool.ITool", modid = Mods.Names.ENDER_I_O) -public class Machine_ProjectTable 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 = 3; - - @Override - public int getTooltipID() { - return this.mTooltipID; - } - - public Machine_ProjectTable() { - super(Material.iron); - this.setBlockName("blockProjectBench"); - this.setCreativeTab(AddToCreativeTab.tabMachines); - GameRegistry.registerBlock(this, ItemBlockBasicTile.class, "blockProjectBench"); - } - - /** - * Gets the block's texture. Args: side, meta - */ - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(final int ordinalSide, final int meta) { - return ordinalSide == 1 ? this.textureTop - : (ordinalSide == 0 ? this.textureBottom - : ((ordinalSide != 2) && (ordinalSide != 4) ? this.blockIcon : this.textureFront)); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(final IIconRegister p_149651_1_) { - this.blockIcon = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "machine_top"); - this.textureTop = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "cover_crafting"); - this.textureBottom = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "machine_top"); - this.textureFront = p_149651_1_.registerIcon(GTPlusPlus.ID + ":" + "TileEntities/" + "machine_top"); - } - - /** - * 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) { - - ItemStack heldItem = null; - if (world.isRemote) { - heldItem = PlayerUtils.getItemStackInPlayersHand(); - } - - boolean holdingWrench = false; - - if (heldItem != null) { - holdingWrench = isWrench(heldItem); - } - - if (world.isRemote) { - return true; - } - - final TileEntity te = world.getTileEntity(x, y, z); - if (te instanceof TileEntityProjectTable) { - if (!holdingWrench) { - player.openGui(GTplusplus.instance, 0, world, x, y, z); - return true; - } - Logger.INFO("Holding a Wrench, doing wrench things instead."); - } - return false; - } - - @Override - public TileEntity createNewTileEntity(final World world, final int p_149915_2_) { - return new TileEntityProjectTable(); - } - - public static boolean isWrench(final ItemStack item) { - if (item.getItem() instanceof ItemToolWrench) { - return true; - } - if (BuildCraftCore.isModLoaded()) { - return checkBuildcraftWrench(item); - } - if (EnderIO.isModLoaded()) { - return checkEnderIOWrench(item); - } - return false; - } - - private static boolean checkEnderIOWrench(final ItemStack item) { - if (ReflectionUtils.doesClassExist("crazypants.enderio.api.tool.ITool")) { - Class wrenchClass; - wrenchClass = ReflectionUtils.getClass("crazypants.enderio.api.tool.ITool"); - if (wrenchClass.isInstance(item.getItem())) { - return true; - } - } - return false; - } - - private static boolean checkBuildcraftWrench(final ItemStack item) { - if (ReflectionUtils.doesClassExist("buildcraft.api.tools.IToolWrench")) { - Class wrenchClass; - wrenchClass = ReflectionUtils.getClass("buildcraft.api.tools.IToolWrench"); - if (wrenchClass.isInstance(item.getItem())) { - return true; - } - } - return false; - } - - @Override - public boolean canCreatureSpawn(final EnumCreatureType type, final IBlockAccess world, final int x, final int y, - final int z) { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/core/block/machine/Machine_SuperJukebox.java b/src/main/java/gtPlusPlus/core/block/machine/Machine_SuperJukebox.java deleted file mode 100644 index 6b3c87fac4..0000000000 --- a/src/main/java/gtPlusPlus/core/block/machine/Machine_SuperJukebox.java +++ /dev/null @@ -1,574 +0,0 @@ -package gtPlusPlus.core.block.machine; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.block.BlockJukebox; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemRecord; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.GTplusplus; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.core.handler.GuiHandler; -import gtPlusPlus.core.inventories.Inventory_SuperJukebox; -import gtPlusPlus.core.util.math.MathUtils; - -public class Machine_SuperJukebox extends BlockJukebox { - - @SideOnly(Side.CLIENT) - private IIcon mIcon; - - public static class SuperJukeboxItemBlock extends ItemBlock { - - public SuperJukeboxItemBlock(Block block) { - super(block); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer player, List tooltips, boolean f3HEnabled) { - tooltips.add(StatCollector.translateToLocal("tile.blockSuperJukebox.deprecated")); - } - } - - public Machine_SuperJukebox() { - this.setBlockName("blockSuperJukebox"); - this.setCreativeTab(CreativeTabs.tabRedstone); - setHardness(2.0F); - setResistance(10.0F); - setStepSound(soundTypePiston); - setBlockTextureName("jukebox"); - GameRegistry.registerBlock(this, SuperJukeboxItemBlock.class, "blockSuperJukebox"); - } - - /** - * Gets the block's texture. Args: side, meta - */ - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int ordinalSide, int aMeta) { - return ordinalSide == 1 ? this.mIcon : this.blockIcon; - } - - /** - * 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 TileEntitySuperJukebox)) { - player.openGui(GTplusplus.instance, GuiHandler.GUI14, world, x, y, z); - return true; - } - return false; - - /* - * if (aWorld.getBlockMetadata(aX, aY, aZ) == 0) { return false; } else { this.func_149925_e(aWorld, aX, aY, - * aZ); return true; } - */ - } - - /** - * Set the record in the {@link SuperJukebox} {@link TileEntity}. - */ - @Override - public final void func_149926_b(World aWorld, int aX, int aY, int aZ, ItemStack aStackToSet) { - setRecordInJukeBox(aWorld, aX, aY, aZ, aStackToSet); - } - - public void setRecordInJukeBox(World aWorld, int aX, int aY, int aZ, ItemStack aStackToSet) { - if (!aWorld.isRemote) { - TileEntitySuperJukebox tileentityjukebox = (TileEntitySuperJukebox) aWorld.getTileEntity(aX, aY, aZ); - if (tileentityjukebox != null && aStackToSet.getItem() instanceof ItemRecord) { - tileentityjukebox.setCurrentRecord(aStackToSet.copy()); - // aWorld.setBlockMetadataWithNotify(aX, aY, aZ, 1, 2); - } - } - } - - /** - * Function to handle playing of records. - */ - @Override - public final void func_149925_e(World aWorld, int aX, int aY, int aZ) { - playJukeboxRecord(aWorld, aX, aY, aZ); - } - - public void playJukeboxRecord(World aWorld, int aX, int aY, int aZ) { - if (!aWorld.isRemote) { - TileEntitySuperJukebox tileentityjukebox = (TileEntitySuperJukebox) aWorld.getTileEntity(aX, aY, aZ); - - if (tileentityjukebox != null) { - ItemStack itemstack = tileentityjukebox.func_145856_a(); - - if (itemstack != null) { - - aWorld.playAuxSFX(1005, aX, aY, aZ, Item.getIdFromItem(itemstack.getItem())); - /* - * float f = 0.7F; double d0 = (double) (aWorld.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; - * double d1 = (double) (aWorld.rand.nextFloat() * f) + (double) (1.0F - f) * 0.2D + 0.6D; double d2 - * = (double) (aWorld.rand.nextFloat() * f) + (double) (1.0F - f) * 0.5D; ItemStack itemstack1 = - * itemstack.copy(); EntityItem entityitem = new EntityItem(aWorld, (double) aX + d0, (double) aY + - * d1, (double) aZ + d2, itemstack1); entityitem.delayBeforeCanPickup = 10; - * aWorld.spawnEntityInWorld(entityitem); - */ - } - } - } - } - - @Override - public void breakBlock(World p_149749_1_, int p_149749_2_, int p_149749_3_, int p_149749_4_, Block p_149749_5_, - int p_149749_6_) { - this.func_149925_e(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_); - super.breakBlock(p_149749_1_, p_149749_2_, p_149749_3_, p_149749_4_, p_149749_5_, p_149749_6_); - } - - /** - * Drops the block items with a specified chance of dropping the specified items - */ - @Override - public void dropBlockAsItemWithChance(World p_149690_1_, int p_149690_2_, int p_149690_3_, int p_149690_4_, - int p_149690_5_, float p_149690_6_, int p_149690_7_) { - if (!p_149690_1_.isRemote) { - super.dropBlockAsItemWithChance( - p_149690_1_, - p_149690_2_, - p_149690_3_, - p_149690_4_, - p_149690_5_, - p_149690_6_, - 0); - } - } - - /** - * Returns a new instance of a block's tile entity class. Called on placing the block. - */ - @Override - public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { - return new TileEntitySuperJukebox(); - } - - @SideOnly(Side.CLIENT) - @Override - public void registerBlockIcons(IIconRegister p_149651_1_) { - this.blockIcon = p_149651_1_.registerIcon(this.getTextureName() + "_side"); - this.mIcon = p_149651_1_.registerIcon(this.getTextureName() + "_top"); - } - - public static class TileEntitySuperJukebox extends TileEntityJukebox implements ISidedInventory { - - /** The number of players currently using this chest */ - public int numPlayersUsing; - - private ItemStack mCurrentlyPlayingStack; - private final Inventory_SuperJukebox inventoryContents; - private String customName; - - /* - * Important Data - */ - - public int a_TEST_INT_VAR_1; - public int a_TEST_INT_VAR_2; - public int a_TEST_INT_VAR_3; - public int a_TEST_INT_VAR_4; - - public boolean mIsPlaying = false; - public boolean mIsLooping = false; - public boolean a_TEST_BOOL_VAR_3; - public boolean a_TEST_BOOL_VAR_4; - - public TileEntitySuperJukebox() { - this.inventoryContents = new Inventory_SuperJukebox(); - } - - @Override - public void readFromNBT(NBTTagCompound aNBT) { - super.readFromNBT(aNBT); - - if (aNBT.hasKey("RecordItem", 10)) { - this.func_145857_a(ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("RecordItem"))); - } else if (aNBT.getInteger("Record") > 0) { - this.func_145857_a(new ItemStack(Item.getItemById(aNBT.getInteger("Record")), 1, 0)); - } - - this.inventoryContents.readFromNBT(aNBT.getCompoundTag("ContentsChest")); - if (aNBT.hasKey("CustomName", 8)) { - this.setCustomName(aNBT.getString("CustomName")); - } - - mIsPlaying = aNBT.getBoolean("mIsPlaying"); - mIsLooping = aNBT.getBoolean("mIsLooping"); - } - - @Override - public void writeToNBT(NBTTagCompound aNBT) { - super.writeToNBT(aNBT); - - if (this.getCurrentRecord() != null) { - aNBT.setTag( - "RecordItem", - this.func_145856_a() - .writeToNBT(new NBTTagCompound())); - aNBT.setInteger( - "Record", - Item.getIdFromItem( - this.func_145856_a() - .getItem())); - } - - final NBTTagCompound chestData = new NBTTagCompound(); - this.inventoryContents.writeToNBT(chestData); - aNBT.setTag("ContentsChest", chestData); - if (this.hasCustomInventoryName()) { - aNBT.setString("CustomName", this.getCustomName()); - } - - aNBT.setBoolean("mIsPlaying", mIsPlaying); - aNBT.setBoolean("mIsLooping", mIsLooping); - } - - /** - * Called to get the internal stack - */ - @Override - public ItemStack func_145856_a() { - return this.mCurrentlyPlayingStack; - } - - /** - * Called to get the internal stack, wraps vanilla function {@link func_145856_a}. - */ - public ItemStack getCurrentRecord() { - return func_145856_a(); - } - - /** - * Called to set the internal stack - */ - @Override - public void func_145857_a(ItemStack p_145857_1_) { - this.mCurrentlyPlayingStack = p_145857_1_; - this.markDirty(); - } - - /** - * Called to set the internal stack, wraps vanilla function {@link func_145857_a}. - */ - public void setCurrentRecord(ItemStack aStack) { - func_145857_a(aStack); - this.markDirty(); - } - - public Inventory_SuperJukebox getInventory() { - return this.inventoryContents; - } - - public boolean playRecord(ItemStack aRecord) { - - return false; - } - - public boolean stopRecord() { - return openDiscDrive(); - } - - public void setLoopState(boolean isShufflingForever) {} - - // Play button pressed - public boolean jukeboxLogicUpdate() { - - if (this.worldObj.isRemote) { - return true; - } - - Logger.INFO("a"); - if (this.mIsPlaying || this.mIsLooping) { - return selectRecordToPlayFromInventoryAndSetViaVanillaHandler(); - } else { - return stopRecord(); - } - } - - // Determine which record to play - public boolean selectRecordToPlayFromInventoryAndSetViaVanillaHandler() { - AutoMap mValidRecords = new AutoMap<>(); - for (ItemStack g : this.getInventory() - .getInventory()) { - if (g != null) { - if (g.getItem() instanceof ItemRecord) { - mValidRecords.put(g); - } - } - } - - Logger.INFO("b1"); - // Select First Record - ItemStack aRecordToPlay; - if (mValidRecords.size() == 0) { - Logger.INFO("bX"); - return false; - } else { - aRecordToPlay = mValidRecords.get(!mIsLooping ? 0 : MathUtils.randInt(0, (mValidRecords.size() - 1))); - } - Logger.INFO("b2 - " + aRecordToPlay.getDisplayName()); - - int aSlotCounter = 0; - for (ItemStack g : this.getInventory() - .getInventory()) { - if (g != null && aSlotCounter <= 17) { - Logger.INFO("b3 - " + g.getDisplayName()); - if (GT_Utility.areStacksEqual(g, aRecordToPlay, true)) { - IInventory aThisInv = this.getInventory(); - if (aThisInv.getStackInSlot(20) != null) { - openDiscDrive(); - } - - GT_Utility.moveStackFromSlotAToSlotB( - aThisInv, - aThisInv, - aSlotCounter, - 20, - (byte) 1, - (byte) 1, - (byte) 1, - (byte) 1); - setCurrentRecord(aThisInv.getStackInSlot(20)); - - World aWorld = this.worldObj; - int aX = this.xCoord; - int aY = this.yCoord; - int aZ = this.zCoord; - if (!aWorld.isRemote) { - aRecordToPlay = this.func_145856_a(); - if (aRecordToPlay != null) { - aWorld.playAuxSFX(1005, aX, aY, aZ, Item.getIdFromItem(aRecordToPlay.getItem())); - this.markDirty(); - return true; - } - } - - Logger.INFO("b++"); - this.markDirty(); - return false; - } - } - aSlotCounter++; - } - - Logger.INFO("b4"); - this.markDirty(); - return false; - } - - public boolean genericMethodThree(Object a1, Object a2, Object a3, Object a4) { - return false; - } - - public void vanillaStopJukebox() { - World aWorld = this.worldObj; - int aX = this.xCoord; - int aY = this.yCoord; - int aZ = this.zCoord; - if (!aWorld.isRemote) { - TileEntitySuperJukebox tileentityjukebox = (TileEntitySuperJukebox) aWorld.getTileEntity(aX, aY, aZ); - if (tileentityjukebox != null) { - ItemStack aRecordToPlay = tileentityjukebox.func_145856_a(); - if (aRecordToPlay != null) { - aWorld.playAuxSFX(1005, aX, aY, aZ, 0); - aWorld.playRecord((String) null, aX, aY, aZ); - tileentityjukebox.func_145857_a((ItemStack) null); - this.markDirty(); - } - } - } - } - - public boolean openDiscDrive() { - int aSlotCounter = 17; - - ItemStack g; - - for (int i = 17; i >= 0; i--) { - g = this.getInventory() - .getInventory()[i]; - if (g == null && aSlotCounter >= 0) { - IInventory aThisInv = this.getInventory(); - GT_Utility - .moveStackFromSlotAToSlotB(aThisInv, aThisInv, 20, i, (byte) 1, (byte) 1, (byte) 1, (byte) 1); - vanillaStopJukebox(); - Logger.INFO("b++"); - this.markDirty(); - return true; - } - } - - /* - * for (ItemStack g : this.getInventory().getInventory()) { if (g == null && aSlotCounter >= 0) { IInventory - * aThisInv = this.getInventory(); GT_Utility.moveStackFromSlotAToSlotB(aThisInv, aThisInv, 20, - * aSlotCounter, (byte) 1, (byte) 1, (byte) 1, (byte) 1); vanillaStopJukebox(); Logger.INFO("b++"); return - * true; } aSlotCounter--; } - */ - this.markDirty(); - return false; - } - - 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 int getSizeInventory() { - return this.getInventory() - .getSizeInventory() - 3; - } - - @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 1; - } - - @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++; - } - 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--; - } - 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) { - if (slot >= 18) { - return false; - } - return this.getInventory() - .isItemValidForSlot(slot, itemstack); - } - - private static final int[] SIDED_SLOTS = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17 }; - - @Override - public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { - return SIDED_SLOTS; - } - - @Override - public boolean canInsertItem(final int p_102007_1_, final ItemStack p_102007_2_, final int p_102007_3_) { - if (p_102007_1_ >= 18) { - return false; - } - return this.getInventory() - .isItemValidForSlot(p_102007_1_, p_102007_2_); - } - - @Override - public boolean canExtractItem(final int p_102008_1_, final ItemStack p_102008_2_, final int p_102008_3_) { - if (p_102008_1_ >= 18) { - return false; - } - return this.getInventory() - .isItemValidForSlot(p_102008_1_, 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.SuperJukebox"; - } - - @Override - public boolean hasCustomInventoryName() { - return (this.customName != null) && !this.customName.equals(""); - } - } -} diff --git a/src/main/java/gtPlusPlus/core/block/machine/VolumetricFlaskSetter.java b/src/main/java/gtPlusPlus/core/block/machine/VolumetricFlaskSetter.java deleted file mode 100644 index 1bca4a5c5f..0000000000 --- a/src/main/java/gtPlusPlus/core/block/machine/VolumetricFlaskSetter.java +++ /dev/null @@ -1,157 +0,0 @@ -package gtPlusPlus.core.block.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -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; - -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.tileentities.general.TileEntityVolumetricFlaskSetter; -import gtPlusPlus.core.util.minecraft.PlayerUtils; - -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 getItemBlockClass() { - return ItemBlockBasicTile.class; - } - - public VolumetricFlaskSetter() { - super(Material.iron); - } - - /** - * 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 aTile)) { - player.openGui(GTplusplus.instance, GuiHandler.GUI18, world, x, y, z); - // new Packet_VolumetricFlaskGui2(aTile, aTile.getCustomValue()); - return true; - } - } else { - return true; - } - } - return false; - } - - @Override - public int getRenderBlockPass() { - return 0; - } - - @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[] getCustomTextureDirectoryObject() { - String[] aTexData = new String[] { GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_A", - GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_TECH_PANEL_C", - GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H", - GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H", - GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H", - GTPlusPlus.ID + ":" + "metro/" + "TEXTURE_METAL_PANEL_H" }; - CubicObject[] aTextureData = new CubicObject[] { new CubicObject<>(aTexData) }; - return aTextureData; - } -} diff --git a/src/main/java/gtPlusPlus/core/client/renderer/RenderDecayChest.java b/src/main/java/gtPlusPlus/core/client/renderer/RenderDecayChest.java index c691bac144..aa6bfa9288 100644 --- a/src/main/java/gtPlusPlus/core/client/renderer/RenderDecayChest.java +++ b/src/main/java/gtPlusPlus/core/client/renderer/RenderDecayChest.java @@ -14,7 +14,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.client.model.ModelDecayChest; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest; @SideOnly(Side.CLIENT) @@ -71,7 +71,7 @@ public class RenderDecayChest extends TileEntitySpecialRenderer { f1 = 1.0F - f1; f1 = 1.0F - f1 * f1 * f1; - mChestModel.chestLid.rotateAngleX = -(f1 * CORE.PI / 2.0F); + mChestModel.chestLid.rotateAngleX = -(f1 * GTPPCore.PI / 2.0F); mChestModel.renderAll(); GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); diff --git a/src/main/java/gtPlusPlus/core/commands/CommandEnableDebugWhileRunning.java b/src/main/java/gtPlusPlus/core/commands/CommandEnableDebugWhileRunning.java index bf42a0792d..56ba05f21f 100644 --- a/src/main/java/gtPlusPlus/core/commands/CommandEnableDebugWhileRunning.java +++ b/src/main/java/gtPlusPlus/core/commands/CommandEnableDebugWhileRunning.java @@ -23,7 +23,7 @@ import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.minecraft.NBTUtils; import gtPlusPlus.core.util.minecraft.PlayerUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.preloader.PreloaderCore; import gtPlusPlus.preloader.asm.AsmConfig; public class CommandEnableDebugWhileRunning implements ICommand { @@ -84,8 +84,8 @@ public class CommandEnableDebugWhileRunning implements ICommand { Logger.INFO("Toggling Debug Mode."); final EntityPlayer P = CommandUtils.getPlayer(S); if (PlayerUtils.isPlayerOP(P)) { - CORE_Preloader.DEBUG_MODE = !CORE_Preloader.DEBUG_MODE; - PlayerUtils.messagePlayer(P, "Toggled GT++ Debug Mode - Enabled: " + CORE_Preloader.DEBUG_MODE); + PreloaderCore.DEBUG_MODE = !PreloaderCore.DEBUG_MODE; + PlayerUtils.messagePlayer(P, "Toggled GT++ Debug Mode - Enabled: " + PreloaderCore.DEBUG_MODE); } } else if (argString[0].toLowerCase() .equals("logging")) { diff --git a/src/main/java/gtPlusPlus/core/commands/CommandMath.java b/src/main/java/gtPlusPlus/core/commands/CommandMath.java index f23e45a359..276e7874e7 100644 --- a/src/main/java/gtPlusPlus/core/commands/CommandMath.java +++ b/src/main/java/gtPlusPlus/core/commands/CommandMath.java @@ -10,7 +10,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.world.World; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.minecraft.MiningUtils; public class CommandMath implements ICommand { @@ -72,7 +72,7 @@ public class CommandMath implements ICommand { || P.getCommandSenderName() .toLowerCase() .equals("draknyte1") - || CORE.DEVENV) { + || GTPPCore.DEVENV) { return true; } return false; diff --git a/src/main/java/gtPlusPlus/core/common/CommonProxy.java b/src/main/java/gtPlusPlus/core/common/CommonProxy.java index 90b4c99ed8..b358548e15 100644 --- a/src/main/java/gtPlusPlus/core/common/CommonProxy.java +++ b/src/main/java/gtPlusPlus/core/common/CommonProxy.java @@ -27,8 +27,8 @@ import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.entity.InternalEntityRegistry; import gtPlusPlus.core.handler.BookHandler; import gtPlusPlus.core.handler.BurnableFuelHandler; -import gtPlusPlus.core.handler.COMPAT_HANDLER; -import gtPlusPlus.core.handler.COMPAT_IntermodStaging; +import gtPlusPlus.core.handler.CompatHandler; +import gtPlusPlus.core.handler.CompatIntermodStaging; import gtPlusPlus.core.handler.GuiHandler; import gtPlusPlus.core.handler.events.EnderDragonDeathHandler; import gtPlusPlus.core.handler.events.EntityDeathHandler; @@ -36,14 +36,14 @@ import gtPlusPlus.core.handler.events.GeneralTooltipEventHandler; import gtPlusPlus.core.handler.events.PlayerSleepEventHandler; import gtPlusPlus.core.item.ModItems; import gtPlusPlus.core.item.bauble.BaseBauble; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.tileentities.ModTileEntities; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.EntityUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.preloader.PreloaderCore; import gtPlusPlus.xmod.gregtech.api.util.SpecialBehaviourTooltipHandler; import gtPlusPlus.xmod.ic2.CustomInternalName; @@ -56,9 +56,9 @@ public class CommonProxy { public void preInit(final FMLPreInitializationEvent e) { Logger.INFO("Doing some house cleaning."); - if (!CORE_Preloader.DEBUG_MODE) { + if (!PreloaderCore.DEBUG_MODE) { Logger.WARNING("Development mode not enabled."); - } else if (CORE_Preloader.DEBUG_MODE) { + } else if (PreloaderCore.DEBUG_MODE) { Logger.INFO("Development mode enabled."); } else { Logger.WARNING("Development mode not set."); @@ -70,7 +70,7 @@ public class CommonProxy { ModItems.init(); ModBlocks.init(); CI.preInit(); - COMPAT_IntermodStaging.preInit(e); + CompatIntermodStaging.preInit(e); BookHandler.run(); // Registration of entities and renderers Logger.INFO("[Proxy] Calling Entity registration."); @@ -97,15 +97,15 @@ public class CommonProxy { Utils.registerEvent(new EntityDeathHandler()); // Compat Handling - COMPAT_HANDLER.registerMyModsOreDictEntries(); - COMPAT_HANDLER.intermodOreDictionarySupport(); - COMPAT_IntermodStaging.init(e); + CompatHandler.registerMyModsOreDictEntries(); + CompatHandler.intermodOreDictionarySupport(); + CompatIntermodStaging.init(e); } public void postInit(final FMLPostInitializationEvent e) { // Make Burnables burnable - if (!CORE.burnables.isEmpty()) { + if (!GTPPCore.burnables.isEmpty()) { BurnableFuelHandler fuelHandler = new BurnableFuelHandler(); GameRegistry.registerFuelHandler(fuelHandler); Logger.INFO( @@ -115,28 +115,28 @@ public class CommonProxy { // Compat Handling Logger.INFO("Removing recipes from other mods."); - COMPAT_HANDLER.RemoveRecipesFromOtherMods(); + CompatHandler.RemoveRecipesFromOtherMods(); Logger.INFO("Initialising Handler, Then Adding Recipes"); - COMPAT_HANDLER.InitialiseHandlerThenAddRecipes(); + CompatHandler.InitialiseHandlerThenAddRecipes(); Logger.INFO("Loading Intermod staging."); - COMPAT_IntermodStaging.postInit(e); + CompatIntermodStaging.postInit(e); Logger.INFO("Loading queued recipes."); - COMPAT_HANDLER.runQueuedRecipes(); + CompatHandler.runQueuedRecipes(); Logger.INFO("Registering custom mob drops."); registerCustomMobDrops(); // Moved last, to prevent recipes being generated post initialisation. Logger.INFO("Loading Gregtech API recipes."); - COMPAT_HANDLER.startLoadingGregAPIBasedRecipes(); + CompatHandler.startLoadingGregAPIBasedRecipes(); } public void serverStarting(final FMLServerStartingEvent e) { - COMPAT_HANDLER.InitialiseLateHandlerThenAddRecipes(); + CompatHandler.InitialiseLateHandlerThenAddRecipes(); } public void onLoadComplete(FMLLoadCompleteEvent event) { - COMPAT_IntermodStaging.onLoadComplete(event); - COMPAT_HANDLER.onLoadComplete(event); + CompatIntermodStaging.onLoadComplete(event); + CompatHandler.onLoadComplete(event); } public void registerNetworkStuff() { diff --git a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_Baubles.java b/src/main/java/gtPlusPlus/core/common/compat/COMPAT_Baubles.java deleted file mode 100644 index e90596c876..0000000000 --- a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_Baubles.java +++ /dev/null @@ -1,58 +0,0 @@ -package gtPlusPlus.core.common.compat; - -import static gregtech.api.enums.Mods.Baubles; -import static gregtech.client.GT_TooltipHandler.Tier.EV; -import static gregtech.client.GT_TooltipHandler.Tier.HV; -import static gregtech.client.GT_TooltipHandler.Tier.IV; -import static gregtech.client.GT_TooltipHandler.Tier.LV; -import static gregtech.client.GT_TooltipHandler.Tier.LuV; -import static gregtech.client.GT_TooltipHandler.Tier.MV; -import static gregtech.client.GT_TooltipHandler.Tier.UHV; -import static gregtech.client.GT_TooltipHandler.Tier.UV; -import static gregtech.client.GT_TooltipHandler.Tier.ZPM; -import static gregtech.client.GT_TooltipHandler.registerTieredTooltip; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.oredict.OreDictionary; - -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.item.bauble.BatteryPackBaseBauble; -import gtPlusPlus.core.item.bauble.FireProtectionBauble; -import gtPlusPlus.core.item.general.ItemCloakingDevice; -import gtPlusPlus.core.item.general.ItemHealingDevice; - -public class COMPAT_Baubles { - - public static void run() { - if (Baubles.isModLoaded()) { - baublesLoaded(); - } - } - - public static void baublesLoaded() { - Logger.INFO("Baubles Found - Loading Wearables."); - ModItems.itemPersonalCloakingDevice = new ItemCloakingDevice(0); - ModItems.itemPersonalHealingDevice = new ItemHealingDevice(); - ModItems.itemSupremePizzaGloves = new FireProtectionBauble(); - - ModItems.itemChargePack_Low_1 = new BatteryPackBaseBauble(1); - registerTieredTooltip(new ItemStack(ModItems.itemChargePack_Low_1, 1, OreDictionary.WILDCARD_VALUE), LV); - ModItems.itemChargePack_Low_2 = new BatteryPackBaseBauble(2); - registerTieredTooltip(new ItemStack(ModItems.itemChargePack_Low_2, 1, OreDictionary.WILDCARD_VALUE), MV); - ModItems.itemChargePack_Low_3 = new BatteryPackBaseBauble(3); - registerTieredTooltip(new ItemStack(ModItems.itemChargePack_Low_3, 1, OreDictionary.WILDCARD_VALUE), HV); - ModItems.itemChargePack_Low_4 = new BatteryPackBaseBauble(4); - registerTieredTooltip(new ItemStack(ModItems.itemChargePack_Low_4, 1, OreDictionary.WILDCARD_VALUE), EV); - ModItems.itemChargePack_Low_5 = new BatteryPackBaseBauble(5); - registerTieredTooltip(new ItemStack(ModItems.itemChargePack_Low_5, 1, OreDictionary.WILDCARD_VALUE), IV); - ModItems.itemChargePack_High_1 = new BatteryPackBaseBauble(6); - registerTieredTooltip(new ItemStack(ModItems.itemChargePack_High_1, 1, OreDictionary.WILDCARD_VALUE), LuV); - ModItems.itemChargePack_High_2 = new BatteryPackBaseBauble(7); - registerTieredTooltip(new ItemStack(ModItems.itemChargePack_High_2, 1, OreDictionary.WILDCARD_VALUE), ZPM); - ModItems.itemChargePack_High_3 = new BatteryPackBaseBauble(8); - registerTieredTooltip(new ItemStack(ModItems.itemChargePack_High_3, 1, OreDictionary.WILDCARD_VALUE), UV); - ModItems.itemChargePack_High_4 = new BatteryPackBaseBauble(9); - registerTieredTooltip(new ItemStack(ModItems.itemChargePack_High_4, 1, OreDictionary.WILDCARD_VALUE), UHV); - } -} diff --git a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_ExtraUtils.java b/src/main/java/gtPlusPlus/core/common/compat/COMPAT_ExtraUtils.java deleted file mode 100644 index f61c70ab5b..0000000000 --- a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_ExtraUtils.java +++ /dev/null @@ -1,18 +0,0 @@ -package gtPlusPlus.core.common.compat; - -import net.minecraft.item.ItemStack; - -import gtPlusPlus.core.recipe.RECIPES_Tools; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class COMPAT_ExtraUtils { - - public static void OreDict() { - RECIPES_Tools.RECIPE_DivisionSigil = new ItemStack(ItemUtils.getItemFromFQRN("ExtraUtilities:divisionSigil")); - run(); - } - - private static void run() { - ItemUtils.getItemForOreDict("ExtraUtilities:bedrockiumIngot", "ingotBedrockium", "Bedrockium Ingot", 0); - } -} diff --git a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_HarvestCraft.java b/src/main/java/gtPlusPlus/core/common/compat/COMPAT_HarvestCraft.java deleted file mode 100644 index 9a9557e418..0000000000 --- a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_HarvestCraft.java +++ /dev/null @@ -1,14 +0,0 @@ -package gtPlusPlus.core.common.compat; - -import gtPlusPlus.xmod.pamsharvest.fishtrap.FishTrapHandler; - -public class COMPAT_HarvestCraft { - - public static void OreDict() { - run(); - } - - private static void run() { - FishTrapHandler.pamsHarvestCraftCompat(); - } -} diff --git a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_IC2.java b/src/main/java/gtPlusPlus/core/common/compat/COMPAT_IC2.java deleted file mode 100644 index c442251a0e..0000000000 --- a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_IC2.java +++ /dev/null @@ -1,58 +0,0 @@ -package gtPlusPlus.core.common.compat; - -import static gtPlusPlus.core.handler.COMPAT_HANDLER.RemoveRecipeQueue; - -import net.minecraft.item.ItemStack; - -import gtPlusPlus.core.lib.CORE.ConfigSwitches; -import gtPlusPlus.core.recipe.ShapedRecipeObject; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class COMPAT_IC2 { - - private static ItemStack itemCropnalyzer = ItemUtils.simpleMetaStack("IC2:itemCropnalyzer", 0, 1); - private static ItemStack itemSolarHelmet = ItemUtils.simpleMetaStack("IC2:itemSolarHelmet", 0, 1); - - public static ShapedRecipeObject Cropnalyzer = new ShapedRecipeObject( - "ore:cableGt02Copper", - "ore:cableGt02Copper", - null, - "minecraft:redstone", - "ore:blockGlass", - "minecraft:redstone", - "minecraft:redstone", - "ore:circuitBasic", - "minecraft:redstone", - itemCropnalyzer); - public static ShapedRecipeObject SolarHelmet = new ShapedRecipeObject( - "ore:plateIron", - "ore:plateIron", - "ore:plateIron", - "ore:plateIron", - "gregtech:gt.metaitem.01:32750", - "ore:plateIron", - "ore:craftingWireCopper", - "ore:craftingWireCopper", - "ore:craftingWireCopper", - itemSolarHelmet); - - public static void OreDict() { - run(); - } - - private static void run() { - - if (ConfigSwitches.disableIC2Recipes) { - - // Remove these. - RemoveRecipeQueue.add("IC2:itemCable"); - RemoveRecipeQueue.add("IC2:itemCable:1"); - RemoveRecipeQueue.add("IC2:itemCable:2"); - RemoveRecipeQueue.add("IC2:itemCable:3"); - RemoveRecipeQueue.add("IC2:itemCable:5"); - RemoveRecipeQueue.add("IC2:itemCable:6"); - RemoveRecipeQueue.add("IC2:itemCable:10"); - RemoveRecipeQueue.add("IC2:itemCable:13"); - } - } -} diff --git a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_Thaumcraft.java b/src/main/java/gtPlusPlus/core/common/compat/COMPAT_Thaumcraft.java deleted file mode 100644 index d9c9fec08e..0000000000 --- a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_Thaumcraft.java +++ /dev/null @@ -1,47 +0,0 @@ -package gtPlusPlus.core.common.compat; - -import static gregtech.api.enums.Mods.ForbiddenMagic; - -import gregtech.api.util.GT_OreDictUnificator; -import gtPlusPlus.core.lib.CORE.ConfigSwitches; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class COMPAT_Thaumcraft { - - public static void OreDict() { - - if (ConfigSwitches.enableThaumcraftShardUnification) { - run(); - } - } - - private static void run() { - - for (int i = 0; i <= 6; i++) { - ItemUtils.getItemForOreDict("Thaumcraft:ItemShard", "shardAny", "TC Shard " + i, i); - GT_OreDictUnificator - .registerOre("shardAny", ItemUtils.getItemStackFromFQRN("Thaumcraft:ItemShard:" + i, 1)); - ItemUtils.getItemForOreDict("Thaumcraft:ItemShard", "gemInfusedAnything", "TC Shard " + i, i); - GT_OreDictUnificator - .registerOre("gemInfusedAnything", ItemUtils.getItemStackFromFQRN("Thaumcraft:ItemShard:" + i, 1)); - } - - if (ForbiddenMagic.isModLoaded()) { - for (int i = 0; i <= 6; i++) { - ItemUtils.getItemForOreDict("ForbiddenMagic:NetherShard", "shardAny", "FM Shard " + i, i); - GT_OreDictUnificator - .registerOre("shardAny", ItemUtils.getItemStackFromFQRN("ForbiddenMagic:NetherShard:" + i, 1)); - ItemUtils.getItemForOreDict("ForbiddenMagic:NetherShard", "gemInfusedAnything", "FM Shard " + i, i); - GT_OreDictUnificator.registerOre( - "gemInfusedAnything", - ItemUtils.getItemStackFromFQRN("ForbiddenMagic:NetherShard:" + i, 1)); - } - ItemUtils.getItemForOreDict("ForbiddenMagic:GluttonyShard", "shardAny", "FM Gluttony Shard", 0); - GT_OreDictUnificator - .registerOre("shardAny", ItemUtils.getItemStackFromFQRN("ForbiddenMagic:GluttonyShard", 1)); - ItemUtils.getItemForOreDict("ForbiddenMagic:GluttonyShard", "gemInfusedAnything", "FM Gluttony Shard", 0); - GT_OreDictUnificator - .registerOre("gemInfusedAnything", ItemUtils.getItemStackFromFQRN("ForbiddenMagic:GluttonyShard", 1)); - } - } -} diff --git a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_Witchery.java b/src/main/java/gtPlusPlus/core/common/compat/COMPAT_Witchery.java deleted file mode 100644 index f6fdd87eec..0000000000 --- a/src/main/java/gtPlusPlus/core/common/compat/COMPAT_Witchery.java +++ /dev/null @@ -1,28 +0,0 @@ -package gtPlusPlus.core.common.compat; - -import static gregtech.api.enums.Mods.Witchery; - -import net.minecraft.item.ItemStack; - -import gregtech.api.util.GT_OreDictUnificator; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class COMPAT_Witchery { - - public static void OreDict() { - run(); - } - - private static void run() { - // Koboldite - ItemStack aKobolditeDust = ItemUtils - .getItemStackWithMeta(Witchery.isModLoaded(), "witchery:ingredient", "Koboldite Dust", 148, 1); - ItemStack aKobolditeNugget = ItemUtils - .getItemStackWithMeta(Witchery.isModLoaded(), "witchery:ingredient", "Koboldite Nugget", 149, 1); - ItemStack aKobolditeIngot = ItemUtils - .getItemStackWithMeta(Witchery.isModLoaded(), "witchery:ingredient", "Koboldite Ingot", 150, 1); - if (aKobolditeDust != null) GT_OreDictUnificator.registerOre("dust" + "Koboldite", aKobolditeDust); - if (aKobolditeNugget != null) GT_OreDictUnificator.registerOre("nugget" + "Koboldite", aKobolditeNugget); - if (aKobolditeIngot != null) GT_OreDictUnificator.registerOre("ingot" + "Koboldite", aKobolditeIngot); - } -} diff --git a/src/main/java/gtPlusPlus/core/common/compat/CompatBaubles.java b/src/main/java/gtPlusPlus/core/common/compat/CompatBaubles.java new file mode 100644 index 0000000000..02b6edf453 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/common/compat/CompatBaubles.java @@ -0,0 +1,58 @@ +package gtPlusPlus.core.common.compat; + +import static gregtech.api.enums.Mods.Baubles; +import static gregtech.client.GTTooltipHandler.Tier.EV; +import static gregtech.client.GTTooltipHandler.Tier.HV; +import static gregtech.client.GTTooltipHandler.Tier.IV; +import static gregtech.client.GTTooltipHandler.Tier.LV; +import static gregtech.client.GTTooltipHandler.Tier.LuV; +import static gregtech.client.GTTooltipHandler.Tier.MV; +import static gregtech.client.GTTooltipHandler.Tier.UHV; +import static gregtech.client.GTTooltipHandler.Tier.UV; +import static gregtech.client.GTTooltipHandler.Tier.ZPM; +import static gregtech.client.GTTooltipHandler.registerTieredTooltip; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; + +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.item.bauble.BatteryPackBaseBauble; +import gtPlusPlus.core.item.bauble.FireProtectionBauble; +import gtPlusPlus.core.item.general.ItemCloakingDevice; +import gtPlusPlus.core.item.general.ItemHealingDevice; + +public class CompatBaubles { + + public static void run() { + if (Baubles.isModLoaded()) { + baublesLoaded(); + } + } + + public static void baublesLoaded() { + Logger.INFO("Baubles Found - Loading Wearables."); + ModItems.itemPersonalCloakingDevice = new ItemCloakingDevice(0); + ModItems.itemPersonalHealingDevice = new ItemHealingDevice(); + ModItems.itemSupremePizzaGloves = new FireProtectionBauble(); + + ModItems.itemChargePack_Low_1 = new BatteryPackBaseBauble(1); + registerTieredTooltip(new ItemStack(ModItems.itemChargePack_Low_1, 1, OreDictionary.WILDCARD_VALUE), LV); + ModItems.itemChargePack_Low_2 = new BatteryPackBaseBauble(2); + registerTieredTooltip(new ItemStack(ModItems.itemChargePack_Low_2, 1, OreDictionary.WILDCARD_VALUE), MV); + ModItems.itemChargePack_Low_3 = new BatteryPackBaseBauble(3); + registerTieredTooltip(new ItemStack(ModItems.itemChargePack_Low_3, 1, OreDictionary.WILDCARD_VALUE), HV); + ModItems.itemChargePack_Low_4 = new BatteryPackBaseBauble(4); + registerTieredTooltip(new ItemStack(ModItems.itemChargePack_Low_4, 1, OreDictionary.WILDCARD_VALUE), EV); + ModItems.itemChargePack_Low_5 = new BatteryPackBaseBauble(5); + registerTieredTooltip(new ItemStack(ModItems.itemChargePack_Low_5, 1, OreDictionary.WILDCARD_VALUE), IV); + ModItems.itemChargePack_High_1 = new BatteryPackBaseBauble(6); + registerTieredTooltip(new ItemStack(ModItems.itemChargePack_High_1, 1, OreDictionary.WILDCARD_VALUE), LuV); + ModItems.itemChargePack_High_2 = new BatteryPackBaseBauble(7); + registerTieredTooltip(new ItemStack(ModItems.itemChargePack_High_2, 1, OreDictionary.WILDCARD_VALUE), ZPM); + ModItems.itemChargePack_High_3 = new BatteryPackBaseBauble(8); + registerTieredTooltip(new ItemStack(ModItems.itemChargePack_High_3, 1, OreDictionary.WILDCARD_VALUE), UV); + ModItems.itemChargePack_High_4 = new BatteryPackBaseBauble(9); + registerTieredTooltip(new ItemStack(ModItems.itemChargePack_High_4, 1, OreDictionary.WILDCARD_VALUE), UHV); + } +} diff --git a/src/main/java/gtPlusPlus/core/common/compat/CompatExtraUtils.java b/src/main/java/gtPlusPlus/core/common/compat/CompatExtraUtils.java new file mode 100644 index 0000000000..3d188bd9c0 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/common/compat/CompatExtraUtils.java @@ -0,0 +1,18 @@ +package gtPlusPlus.core.common.compat; + +import net.minecraft.item.ItemStack; + +import gtPlusPlus.core.recipe.RecipesTools; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class CompatExtraUtils { + + public static void OreDict() { + RecipesTools.RECIPE_DivisionSigil = new ItemStack(ItemUtils.getItemFromFQRN("ExtraUtilities:divisionSigil")); + run(); + } + + private static void run() { + ItemUtils.getItemForOreDict("ExtraUtilities:bedrockiumIngot", "ingotBedrockium", "Bedrockium Ingot", 0); + } +} diff --git a/src/main/java/gtPlusPlus/core/common/compat/CompatHarvestCraft.java b/src/main/java/gtPlusPlus/core/common/compat/CompatHarvestCraft.java new file mode 100644 index 0000000000..5e4baf5c88 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/common/compat/CompatHarvestCraft.java @@ -0,0 +1,14 @@ +package gtPlusPlus.core.common.compat; + +import gtPlusPlus.xmod.pamsharvest.fishtrap.FishTrapHandler; + +public class CompatHarvestCraft { + + public static void OreDict() { + run(); + } + + private static void run() { + FishTrapHandler.pamsHarvestCraftCompat(); + } +} diff --git a/src/main/java/gtPlusPlus/core/common/compat/CompatIC2.java b/src/main/java/gtPlusPlus/core/common/compat/CompatIC2.java new file mode 100644 index 0000000000..c6662800b2 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/common/compat/CompatIC2.java @@ -0,0 +1,58 @@ +package gtPlusPlus.core.common.compat; + +import static gtPlusPlus.core.handler.CompatHandler.RemoveRecipeQueue; + +import net.minecraft.item.ItemStack; + +import gtPlusPlus.core.lib.GTPPCore.ConfigSwitches; +import gtPlusPlus.core.recipe.ShapedRecipeObject; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class CompatIC2 { + + private static ItemStack itemCropnalyzer = ItemUtils.simpleMetaStack("IC2:itemCropnalyzer", 0, 1); + private static ItemStack itemSolarHelmet = ItemUtils.simpleMetaStack("IC2:itemSolarHelmet", 0, 1); + + public static ShapedRecipeObject Cropnalyzer = new ShapedRecipeObject( + "ore:cableGt02Copper", + "ore:cableGt02Copper", + null, + "minecraft:redstone", + "ore:blockGlass", + "minecraft:redstone", + "minecraft:redstone", + "ore:circuitBasic", + "minecraft:redstone", + itemCropnalyzer); + public static ShapedRecipeObject SolarHelmet = new ShapedRecipeObject( + "ore:plateIron", + "ore:plateIron", + "ore:plateIron", + "ore:plateIron", + "gregtech:gt.metaitem.01:32750", + "ore:plateIron", + "ore:craftingWireCopper", + "ore:craftingWireCopper", + "ore:craftingWireCopper", + itemSolarHelmet); + + public static void OreDict() { + run(); + } + + private static void run() { + + if (ConfigSwitches.disableIC2Recipes) { + + // Remove these. + RemoveRecipeQueue.add("IC2:itemCable"); + RemoveRecipeQueue.add("IC2:itemCable:1"); + RemoveRecipeQueue.add("IC2:itemCable:2"); + RemoveRecipeQueue.add("IC2:itemCable:3"); + RemoveRecipeQueue.add("IC2:itemCable:5"); + RemoveRecipeQueue.add("IC2:itemCable:6"); + RemoveRecipeQueue.add("IC2:itemCable:10"); + RemoveRecipeQueue.add("IC2:itemCable:13"); + } + } +} diff --git a/src/main/java/gtPlusPlus/core/common/compat/CompatThaumcraft.java b/src/main/java/gtPlusPlus/core/common/compat/CompatThaumcraft.java new file mode 100644 index 0000000000..8e06c95c67 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/common/compat/CompatThaumcraft.java @@ -0,0 +1,46 @@ +package gtPlusPlus.core.common.compat; + +import static gregtech.api.enums.Mods.ForbiddenMagic; + +import gregtech.api.util.GTOreDictUnificator; +import gtPlusPlus.core.lib.GTPPCore.ConfigSwitches; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class CompatThaumcraft { + + public static void OreDict() { + + if (ConfigSwitches.enableThaumcraftShardUnification) { + run(); + } + } + + private static void run() { + + for (int i = 0; i <= 6; i++) { + ItemUtils.getItemForOreDict("Thaumcraft:ItemShard", "shardAny", "TC Shard " + i, i); + GTOreDictUnificator.registerOre("shardAny", ItemUtils.getItemStackFromFQRN("Thaumcraft:ItemShard:" + i, 1)); + ItemUtils.getItemForOreDict("Thaumcraft:ItemShard", "gemInfusedAnything", "TC Shard " + i, i); + GTOreDictUnificator + .registerOre("gemInfusedAnything", ItemUtils.getItemStackFromFQRN("Thaumcraft:ItemShard:" + i, 1)); + } + + if (ForbiddenMagic.isModLoaded()) { + for (int i = 0; i <= 6; i++) { + ItemUtils.getItemForOreDict("ForbiddenMagic:NetherShard", "shardAny", "FM Shard " + i, i); + GTOreDictUnificator + .registerOre("shardAny", ItemUtils.getItemStackFromFQRN("ForbiddenMagic:NetherShard:" + i, 1)); + ItemUtils.getItemForOreDict("ForbiddenMagic:NetherShard", "gemInfusedAnything", "FM Shard " + i, i); + GTOreDictUnificator.registerOre( + "gemInfusedAnything", + ItemUtils.getItemStackFromFQRN("ForbiddenMagic:NetherShard:" + i, 1)); + } + ItemUtils.getItemForOreDict("ForbiddenMagic:GluttonyShard", "shardAny", "FM Gluttony Shard", 0); + GTOreDictUnificator + .registerOre("shardAny", ItemUtils.getItemStackFromFQRN("ForbiddenMagic:GluttonyShard", 1)); + ItemUtils.getItemForOreDict("ForbiddenMagic:GluttonyShard", "gemInfusedAnything", "FM Gluttony Shard", 0); + GTOreDictUnificator + .registerOre("gemInfusedAnything", ItemUtils.getItemStackFromFQRN("ForbiddenMagic:GluttonyShard", 1)); + } + } +} diff --git a/src/main/java/gtPlusPlus/core/common/compat/CompatWitchery.java b/src/main/java/gtPlusPlus/core/common/compat/CompatWitchery.java new file mode 100644 index 0000000000..3003749c79 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/common/compat/CompatWitchery.java @@ -0,0 +1,28 @@ +package gtPlusPlus.core.common.compat; + +import static gregtech.api.enums.Mods.Witchery; + +import net.minecraft.item.ItemStack; + +import gregtech.api.util.GTOreDictUnificator; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class CompatWitchery { + + public static void OreDict() { + run(); + } + + private static void run() { + // Koboldite + ItemStack aKobolditeDust = ItemUtils + .getItemStackWithMeta(Witchery.isModLoaded(), "witchery:ingredient", "Koboldite Dust", 148, 1); + ItemStack aKobolditeNugget = ItemUtils + .getItemStackWithMeta(Witchery.isModLoaded(), "witchery:ingredient", "Koboldite Nugget", 149, 1); + ItemStack aKobolditeIngot = ItemUtils + .getItemStackWithMeta(Witchery.isModLoaded(), "witchery:ingredient", "Koboldite Ingot", 150, 1); + if (aKobolditeDust != null) GTOreDictUnificator.registerOre("dust" + "Koboldite", aKobolditeDust); + if (aKobolditeNugget != null) GTOreDictUnificator.registerOre("nugget" + "Koboldite", aKobolditeNugget); + if (aKobolditeIngot != null) GTOreDictUnificator.registerOre("ingot" + "Koboldite", aKobolditeIngot); + } +} diff --git a/src/main/java/gtPlusPlus/core/config/ConfigHandler.java b/src/main/java/gtPlusPlus/core/config/ConfigHandler.java index 22bd775e6d..d214bd8a52 100644 --- a/src/main/java/gtPlusPlus/core/config/ConfigHandler.java +++ b/src/main/java/gtPlusPlus/core/config/ConfigHandler.java @@ -1,10 +1,10 @@ package gtPlusPlus.core.config; import static gregtech.api.enums.Mods.GregTech; -import static gtPlusPlus.core.lib.CORE.ConfigSwitches.*; -import static gtPlusPlus.core.lib.CORE.EVERGLADESBIOME_ID; -import static gtPlusPlus.core.lib.CORE.EVERGLADES_ID; -import static gtPlusPlus.core.lib.CORE.turbineCutoffBase; +import static gtPlusPlus.core.lib.GTPPCore.ConfigSwitches.*; +import static gtPlusPlus.core.lib.GTPPCore.EVERGLADESBIOME_ID; +import static gtPlusPlus.core.lib.GTPPCore.EVERGLADES_ID; +import static gtPlusPlus.core.lib.GTPPCore.turbineCutoffBase; import java.io.File; diff --git a/src/main/java/gtPlusPlus/core/container/ContainerCircuitProgrammer.java b/src/main/java/gtPlusPlus/core/container/ContainerCircuitProgrammer.java new file mode 100644 index 0000000000..9afccfb0f4 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/container/ContainerCircuitProgrammer.java @@ -0,0 +1,176 @@ +package gtPlusPlus.core.container; + +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; + +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.inventories.InventoryCircuitProgrammer; +import gtPlusPlus.core.slots.SlotIntegratedCircuit; +import gtPlusPlus.core.slots.SlotNoInput; +import gtPlusPlus.core.tileentities.general.TileEntityCircuitProgrammer; + +public class ContainerCircuitProgrammer extends Container { + + protected TileEntityCircuitProgrammer tile_entity; + public final InventoryCircuitProgrammer inventoryChest; + + private final World worldObj; + private final int posX; + private final int posY; + private final int posZ; + + public static final int SLOT_OUTPUT = 25; + + public static int StorageSlotNumber = 26; // 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 ContainerCircuitProgrammer(final InventoryPlayer inventory, final TileEntityCircuitProgrammer te) { + this.tile_entity = 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; + Logger.INFO("1"); + + 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 = 8; + int yStart = 5; + + try { + // 0 + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart, yStart)); + // 1-10 + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 18, yStart)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 36, yStart)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 54, yStart)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 72, yStart)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 90, yStart)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 108, yStart)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 18, yStart + 18)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 36, yStart + 18)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 54, yStart + 18)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 72, yStart + 18)); + // 11-20 + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 90, yStart + 18)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 108, yStart + 18)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 18, yStart + 36)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 36, yStart + 36)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 54, yStart + 36)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 72, yStart + 36)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 90, yStart + 36)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 108, yStart + 36)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 18, yStart + 54)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 36, yStart + 54)); + // 21-24 + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 54, yStart + 54)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 72, yStart + 54)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 90, yStart + 54)); + this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 108, yStart + 54)); + Logger.INFO("2"); + + // Add Output + this.addSlotToContainer(new SlotNoInput(this.inventoryChest, SLOT_OUTPUT, xStart + (8 * 18), yStart + 54)); + o++; + Logger.INFO("3"); + + // 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)); + } + + Logger.INFO("4"); + } catch (Throwable t) {} + } + + @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); + } + + @Override + public boolean canInteractWith(final EntityPlayer par1EntityPlayer) { + if (this.worldObj.getBlock(this.posX, this.posY, this.posZ) != ModBlocks.blockCircuitProgrammer) { + 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_); + } +} diff --git a/src/main/java/gtPlusPlus/core/container/ContainerFishTrap.java b/src/main/java/gtPlusPlus/core/container/ContainerFishTrap.java new file mode 100644 index 0000000000..1a9344c08c --- /dev/null +++ b/src/main/java/gtPlusPlus/core/container/ContainerFishTrap.java @@ -0,0 +1,134 @@ +package gtPlusPlus.core.container; + +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; + +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.inventories.InventoryFishTrap; +import gtPlusPlus.core.slots.SlotNoInput; +import gtPlusPlus.core.tileentities.general.TileEntityFishTrap; + +public class ContainerFishTrap extends Container { + + protected TileEntityFishTrap tile_entity; + public final InventoryFishTrap 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 ContainerFishTrap(final InventoryPlayer inventory, final TileEntityFishTrap 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 SlotNoInput(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.blockFishTrap) { + 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_); + } +} diff --git a/src/main/java/gtPlusPlus/core/container/ContainerPestKiller.java b/src/main/java/gtPlusPlus/core/container/ContainerPestKiller.java new file mode 100644 index 0000000000..6f63a1d04e --- /dev/null +++ b/src/main/java/gtPlusPlus/core/container/ContainerPestKiller.java @@ -0,0 +1,234 @@ +package gtPlusPlus.core.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.inventories.InventoryPestKiller; +import gtPlusPlus.core.slots.SlotGeneric; +import gtPlusPlus.core.slots.SlotNoInput; +import gtPlusPlus.core.tileentities.machines.TileEntityPestKiller; + +public class ContainerPestKiller extends Container { + + public TileEntityPestKiller tile_entity; + public final InventoryPestKiller inventoryChest; + + private final World worldObj; + private final int posX; + private final int posY; + private final int posZ; + + public static int StorageSlotNumber = 3; // 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 ContainerPestKiller(final InventoryPlayer inventory, final TileEntityPestKiller 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; + + int aSlotX = 134; + + this.addSlotToContainer(new SlotGeneric(this.inventoryChest, o++, aSlotX, 10)); + this.addSlotToContainer(new SlotNoInput(this.inventoryChest, o++, aSlotX, 60)); + addSlotToContainer(new GT_Slot_Render(tile_entity, o++, aSlotX, 35)); + + // 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)); + } + } + + public FluidStack getFluidOfStoredTank() { + if (tile_entity != null) { + if (tile_entity.getTank() != null) { + return tile_entity.getTank() + .getFluid(); + } + } + return null; + } + + public int getFluidStoredAmount() { + FluidStack f = getFluidOfStoredTank(); + return f == null ? 0 : f.amount; + } + + @Override + public ItemStack slotClick(final int aSlotIndex, final int aMouseclick, final int aShifthold, + final EntityPlayer aPlayer) { + boolean fluid = false; + if (aSlotIndex == 2) { + fluid = true; + } + if (!fluid) { + return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); + } else { + return null; + } + } + + @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.blockPestKiller) { + 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_); + } + + private class GT_Slot_Render extends Slot { + + public final int mSlotIndex; + public boolean mEnabled = true; + public boolean mCanInsertItem, mCanStackItem; + public int mMaxStacksize = 127; + + public GT_Slot_Render(IInventory inventory, int slotIndex, int xPos, int yPos) { + this(inventory, slotIndex, xPos, yPos, false, false, 0); + } + + public GT_Slot_Render(IInventory inventory, int slotIndex, int xPos, int yPos, boolean aCanInsertItem, + boolean aCanStackItem, int aMaxStacksize) { + super(inventory, slotIndex, xPos, yPos); + mCanInsertItem = aCanInsertItem; + mCanStackItem = aCanStackItem; + mMaxStacksize = aMaxStacksize; + mSlotIndex = slotIndex; + } + + @Override + public boolean isItemValid(ItemStack itemStack) { + return mCanInsertItem; + } + + @Override + public int getSlotStackLimit() { + return mMaxStacksize; + } + + @Override + public boolean getHasStack() { + return false; + } + + @Override + public ItemStack decrStackSize(int amount) { + if (!mCanStackItem) return null; + return super.decrStackSize(amount); + } + + @Override + public boolean canTakeStack(EntityPlayer player) { + return false; + } + + /** + * Sets if this slot should be ignored in event-processing. For example, highlight the slot on mouseOver. + * + * @param enabled if the slot should be enabled + */ + public void setEnabled(boolean enabled) { + mEnabled = enabled; + } + + /** + * Use this value to determine whether to ignore this slot in event processing + */ + public boolean isEnabled() { + return mEnabled; + } + + /** + * This function controls whether to highlight the slot on mouseOver. + */ + @Override + @SideOnly(Side.CLIENT) + public boolean func_111238_b() { + return isEnabled(); + } + + /** + * NEI has a nice and "useful" Delete-All Function, which would delete the Content of this Slot. This is here to + * prevent that. + */ + @Override + public void putStack(ItemStack aStack) { + if (inventory instanceof TileEntity && ((TileEntity) inventory).getWorldObj().isRemote) { + inventory.setInventorySlotContents(getSlotIndex(), aStack); + } + onSlotChanged(); + } + } +} diff --git a/src/main/java/gtPlusPlus/core/container/ContainerProjectTable.java b/src/main/java/gtPlusPlus/core/container/ContainerProjectTable.java new file mode 100644 index 0000000000..306c6f0026 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/container/ContainerProjectTable.java @@ -0,0 +1,196 @@ +package gtPlusPlus.core.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.InventoryCraftResult; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.world.World; + +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.inventories.projecttable.InventoryProjectMain; +import gtPlusPlus.core.inventories.projecttable.InventoryProjectOutput; +import gtPlusPlus.core.slots.SlotCraftingNoCollect; +import gtPlusPlus.core.slots.SlotDataStick; +import gtPlusPlus.core.slots.SlotNoInput; +import gtPlusPlus.core.tileentities.machines.TileEntityProjectTable; + +public class ContainerProjectTable extends Container { + + /** The crafting matrix inventory (3x3). */ + public InventoryCrafting craftMatrix = new InventoryCrafting(this, 3, 3); + + public IInventory craftResult = new InventoryCraftResult(); + + protected TileEntityProjectTable tile_entity; + public final InventoryProjectMain inventoryGrid; + public final InventoryProjectOutput inventoryOutputs; + + private final World worldObj; + private final int posX; + private final int posY; + private final int posZ; + + private final int[] slotOutputs = new int[2]; + private final int[] slotGrid = new int[9]; + + public ContainerProjectTable(final InventoryPlayer inventory, final TileEntityProjectTable tile) { + this.tile_entity = tile; + this.inventoryGrid = tile.inventoryGrid; + this.inventoryOutputs = tile.inventoryOutputs; + this.tile_entity.setContainer(this); + + int var6; + int var7; + this.worldObj = tile.getWorldObj(); + this.posX = tile.xCoord; + this.posY = tile.yCoord; + this.posZ = tile.zCoord; + + int nextFreeSlot = 0; + + // Output slots + this.addSlotToContainer(new SlotDataStick(this.inventoryOutputs, 0, 26 + (18 * 6), 8)); + this.addSlotToContainer(new SlotNoInput(this.inventoryOutputs, 1, 26 + (18 * 6), 44)); + + this.addSlotToContainer( + new SlotCraftingNoCollect(inventory.player, this.craftMatrix, this.craftResult, 0, 26 + (18 * 4), 25)); + + int o = 0; + // Storage Side + for (var6 = 0; var6 < 3; ++var6) { + for (var7 = 0; var7 < 3; ++var7) { + this.addSlotToContainer( + new Slot(this.craftMatrix, nextFreeSlot, 8 + 18 + (var7 * 18), 8 + (var6 * 18))); + this.slotGrid[o] = nextFreeSlot; + nextFreeSlot++; + 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)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + /** + * Callback for when the crafting matrix is changed. + */ + @Override + public void onCraftMatrixChanged(IInventory p_75130_1_) { + this.craftResult.setInventorySlotContents( + 0, + CraftingManager.getInstance() + .findMatchingRecipe(this.craftMatrix, this.worldObj)); + } + + /** + * Called when the container is closed. + */ + @Override + public void onContainerClosed(EntityPlayer p_75134_1_) { + super.onContainerClosed(p_75134_1_); + if (!this.worldObj.isRemote) { + for (int i = 0; i < 9; ++i) { + ItemStack itemstack = this.craftMatrix.getStackInSlotOnClosing(i); + if (itemstack != null) { + p_75134_1_.dropPlayerItemWithRandomChoice(itemstack, false); + } + } + } + } + + @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); + } + + if (aSlotIndex == 0) { + Logger.INFO("Player Clicked on the Data Stick slot"); + // TODO + } + if (aSlotIndex == 1) { + Logger.INFO("Player Clicked on the output slot"); + // TODO + } + + for (final int x : this.slotGrid) { + if (aSlotIndex == x) { + Logger.INFO("Player Clicked slot " + aSlotIndex + " in the crafting Grid"); + } + } + } + // Utils.LOG_WARNING("Player Clicked slot "+aSlotIndex+" in the Grid"); + return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); + } + + @Override + public boolean canInteractWith(final EntityPlayer par1EntityPlayer) { + if (this.worldObj.getBlock(this.posX, this.posY, this.posZ) != ModBlocks.blockProjectTable) { + 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) { + + return null; + + /* + * 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(ItemStack p_94530_1_, Slot p_94530_2_) { + return p_94530_2_.inventory != this.craftResult && super.func_94530_a(p_94530_1_, p_94530_2_); + } + + public ItemStack getOutputContent() { + ItemStack output = this.craftResult.getStackInSlot(0); + if (output != null) { + return output; + } + return null; + } + + public ItemStack[] getInputComponents() { + ItemStack inputs[] = new ItemStack[9]; + for (int r = 0; r < this.craftMatrix.getSizeInventory(); r++) { + ItemStack temp = this.craftMatrix.getStackInSlot(r); + inputs[r] = temp; + } + return inputs; + } +} diff --git a/src/main/java/gtPlusPlus/core/container/ContainerSuperJukebox.java b/src/main/java/gtPlusPlus/core/container/ContainerSuperJukebox.java new file mode 100644 index 0000000000..45782f1384 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/container/ContainerSuperJukebox.java @@ -0,0 +1,232 @@ +package gtPlusPlus.core.container; + +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; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.block.machine.BlockSuperJukebox.TileEntitySuperJukebox; +import gtPlusPlus.core.inventories.InventorySuperJukebox; +import gtPlusPlus.core.slots.SlotJukebox; +import gtPlusPlus.core.slots.SlotNoInput; + +public class ContainerSuperJukebox extends Container { + + protected TileEntitySuperJukebox tile_entity; + public final InventorySuperJukebox inventoryChest; + + private final World worldObj; + private final int posX; + private final int posY; + private final int posZ; + + public static final int SLOT_HOLO_PLAY = 18; + public static final int SLOT_HOLO_LOOP = 19; + public static final int SLOT_OUTPUT = 20; + + public static int StorageSlotNumber = 26; // 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 ContainerSuperJukebox(final InventoryPlayer inventory, final TileEntitySuperJukebox te) { + this.tile_entity = 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; + Logger.INFO("1"); + + 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 = 9; + int yStart = 20; + + try { + + // Row One + for (int c = 0; c < 9; c++) { + if (c >= 3 && c < 6) { + continue; + } + this.addSlotToContainer(new SlotJukebox(this.inventoryChest, o++, xStart + (18 * c), yStart)); + } + + // Row Two + for (int c = 0; c < 9; c++) { + if (c >= 3 && c < 6) { + continue; + } + this.addSlotToContainer(new SlotJukebox(this.inventoryChest, o++, xStart + (18 * c), yStart + 18)); + } + + // Row Two + for (int c = 0; c < 9; c++) { + if (c >= 3 && c < 6) { + continue; + } + this.addSlotToContainer(new SlotJukebox(this.inventoryChest, o++, xStart + (18 * c), yStart + 36)); + } + + // Controls + int c = 4; + + // Two Control Buttons + this.addSlotToContainer(new SlotNoInput(this.inventoryChest, SLOT_HOLO_PLAY, xStart + (18 * c), 12)); + this.addSlotToContainer( + new SlotNoInput(this.inventoryChest, SLOT_HOLO_LOOP, xStart + (18 * c), 12 + (1 * 18))); + + // Active playing slot for visual + this.addSlotToContainer( + new SlotJukebox(this.inventoryChest, SLOT_OUTPUT, xStart + (18 * c), 18 + (2 * 18), true)); + + // 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)); + } + + Logger.INFO("3"); + + } catch (Throwable t) { + t.printStackTrace(); + } + } + + @Override + public void onContainerClosed(final EntityPlayer par1EntityPlayer) { + super.onContainerClosed(par1EntityPlayer); + } + + @Override + public boolean canInteractWith(final EntityPlayer par1EntityPlayer) { + if (this.worldObj.getBlock(this.posX, this.posY, this.posZ) != ModBlocks.blockCustomJukebox) { + 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_); + } + + @Override + public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) { + if (tile_entity == null || tile_entity.getWorldObj().isRemote) return null; + switch (aSlotIndex) { + case SLOT_HOLO_PLAY -> { + if (tile_entity == null) return null; + tile_entity.mIsPlaying = !tile_entity.mIsPlaying; + Logger.INFO("Jukebox | Playing: " + tile_entity.mIsPlaying); + tile_entity.jukeboxLogicUpdate(); + return null; + } + case SLOT_HOLO_LOOP -> { + if (tile_entity == null) return null; + tile_entity.mIsLooping = !tile_entity.mIsLooping; + Logger.INFO("Jukebox | Looping: " + tile_entity.mIsLooping); + return null; + } + case 20 -> { + return null; + } + default -> { + return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); + } + } + } + + public boolean isPlaying; + public boolean isLooping; + + @Override + public void detectAndSendChanges() { + super.detectAndSendChanges(); + if (tile_entity == null || tile_entity.getWorldObj().isRemote) return; + + isPlaying = tile_entity.mIsPlaying; + isLooping = tile_entity.mIsLooping; + + for (Object crafter : this.crafters) { + ICrafting var1 = (ICrafting) crafter; + var1.sendProgressBarUpdate(this, 102, isPlaying ? 1 : 0); + var1.sendProgressBarUpdate(this, 103, isLooping ? 1 : 0); + } + } + + @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 -> isPlaying = (par2 != 0); + case 103 -> isLooping = (par2 != 0); + } + } +} diff --git a/src/main/java/gtPlusPlus/core/container/ContainerVolumetricFlaskSetter.java b/src/main/java/gtPlusPlus/core/container/ContainerVolumetricFlaskSetter.java new file mode 100644 index 0000000000..bf1f8c4133 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/container/ContainerVolumetricFlaskSetter.java @@ -0,0 +1,170 @@ +package gtPlusPlus.core.container; + +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; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.inventories.InventoryVolumetricFlaskSetter; +import gtPlusPlus.core.slots.SlotNoInput; +import gtPlusPlus.core.slots.SlotVolumetricFlask; +import gtPlusPlus.core.tileentities.general.TileEntityVolumetricFlaskSetter; +import gtPlusPlus.core.util.Utils; + +public class ContainerVolumetricFlaskSetter extends Container { + + public TileEntityVolumetricFlaskSetter mTileEntity; + public final InventoryVolumetricFlaskSetter inventoryChest; + + public int mCustomValue; + private int 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 ContainerVolumetricFlaskSetter(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++; + + for (Object crafter : this.crafters) { + ICrafting var1 = (ICrafting) crafter; + 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; + } + } + + public void log(String aString) { + Logger.INFO("[Flask-Container] " + aString); + } +} diff --git a/src/main/java/gtPlusPlus/core/container/Container_CircuitProgrammer.java b/src/main/java/gtPlusPlus/core/container/Container_CircuitProgrammer.java deleted file mode 100644 index f1e84f439f..0000000000 --- a/src/main/java/gtPlusPlus/core/container/Container_CircuitProgrammer.java +++ /dev/null @@ -1,176 +0,0 @@ -package gtPlusPlus.core.container; - -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; - -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.inventories.InventoryCircuitProgrammer; -import gtPlusPlus.core.slots.SlotIntegratedCircuit; -import gtPlusPlus.core.slots.SlotNoInput; -import gtPlusPlus.core.tileentities.general.TileEntityCircuitProgrammer; - -public class Container_CircuitProgrammer extends Container { - - protected TileEntityCircuitProgrammer tile_entity; - public final InventoryCircuitProgrammer inventoryChest; - - private final World worldObj; - private final int posX; - private final int posY; - private final int posZ; - - public static final int SLOT_OUTPUT = 25; - - public static int StorageSlotNumber = 26; // 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_CircuitProgrammer(final InventoryPlayer inventory, final TileEntityCircuitProgrammer te) { - this.tile_entity = 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; - Logger.INFO("1"); - - 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 = 8; - int yStart = 5; - - try { - // 0 - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart, yStart)); - // 1-10 - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 18, yStart)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 36, yStart)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 54, yStart)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 72, yStart)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 90, yStart)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 108, yStart)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 18, yStart + 18)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 36, yStart + 18)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 54, yStart + 18)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 72, yStart + 18)); - // 11-20 - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 90, yStart + 18)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 108, yStart + 18)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 18, yStart + 36)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 36, yStart + 36)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 54, yStart + 36)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 72, yStart + 36)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 90, yStart + 36)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 108, yStart + 36)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 18, yStart + 54)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 36, yStart + 54)); - // 21-24 - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 54, yStart + 54)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 72, yStart + 54)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 90, yStart + 54)); - this.addSlotToContainer(new SlotIntegratedCircuit(this.inventoryChest, o++, xStart + 108, yStart + 54)); - Logger.INFO("2"); - - // Add Output - this.addSlotToContainer(new SlotNoInput(this.inventoryChest, SLOT_OUTPUT, xStart + (8 * 18), yStart + 54)); - o++; - Logger.INFO("3"); - - // 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)); - } - - Logger.INFO("4"); - } catch (Throwable t) {} - } - - @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); - } - - @Override - public boolean canInteractWith(final EntityPlayer par1EntityPlayer) { - if (this.worldObj.getBlock(this.posX, this.posY, this.posZ) != ModBlocks.blockCircuitProgrammer) { - 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_); - } -} diff --git a/src/main/java/gtPlusPlus/core/container/Container_FishTrap.java b/src/main/java/gtPlusPlus/core/container/Container_FishTrap.java deleted file mode 100644 index 881311897f..0000000000 --- a/src/main/java/gtPlusPlus/core/container/Container_FishTrap.java +++ /dev/null @@ -1,134 +0,0 @@ -package gtPlusPlus.core.container; - -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; - -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.inventories.InventoryFishTrap; -import gtPlusPlus.core.slots.SlotNoInput; -import gtPlusPlus.core.tileentities.general.TileEntityFishTrap; - -public class Container_FishTrap extends Container { - - protected TileEntityFishTrap tile_entity; - public final InventoryFishTrap 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_FishTrap(final InventoryPlayer inventory, final TileEntityFishTrap 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 SlotNoInput(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.blockFishTrap) { - 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_); - } -} diff --git a/src/main/java/gtPlusPlus/core/container/Container_PestKiller.java b/src/main/java/gtPlusPlus/core/container/Container_PestKiller.java deleted file mode 100644 index 315f34595e..0000000000 --- a/src/main/java/gtPlusPlus/core/container/Container_PestKiller.java +++ /dev/null @@ -1,234 +0,0 @@ -package gtPlusPlus.core.container; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.inventories.InventoryPestKiller; -import gtPlusPlus.core.slots.SlotGeneric; -import gtPlusPlus.core.slots.SlotNoInput; -import gtPlusPlus.core.tileentities.machines.TileEntityPestKiller; - -public class Container_PestKiller extends Container { - - public TileEntityPestKiller tile_entity; - public final InventoryPestKiller inventoryChest; - - private final World worldObj; - private final int posX; - private final int posY; - private final int posZ; - - public static int StorageSlotNumber = 3; // 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_PestKiller(final InventoryPlayer inventory, final TileEntityPestKiller 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; - - int aSlotX = 134; - - this.addSlotToContainer(new SlotGeneric(this.inventoryChest, o++, aSlotX, 10)); - this.addSlotToContainer(new SlotNoInput(this.inventoryChest, o++, aSlotX, 60)); - addSlotToContainer(new GT_Slot_Render(tile_entity, o++, aSlotX, 35)); - - // 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)); - } - } - - public FluidStack getFluidOfStoredTank() { - if (tile_entity != null) { - if (tile_entity.getTank() != null) { - return tile_entity.getTank() - .getFluid(); - } - } - return null; - } - - public int getFluidStoredAmount() { - FluidStack f = getFluidOfStoredTank(); - return f == null ? 0 : f.amount; - } - - @Override - public ItemStack slotClick(final int aSlotIndex, final int aMouseclick, final int aShifthold, - final EntityPlayer aPlayer) { - boolean fluid = false; - if (aSlotIndex == 2) { - fluid = true; - } - if (!fluid) { - return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); - } else { - return null; - } - } - - @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.blockPestKiller) { - 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_); - } - - private class GT_Slot_Render extends Slot { - - public final int mSlotIndex; - public boolean mEnabled = true; - public boolean mCanInsertItem, mCanStackItem; - public int mMaxStacksize = 127; - - public GT_Slot_Render(IInventory inventory, int slotIndex, int xPos, int yPos) { - this(inventory, slotIndex, xPos, yPos, false, false, 0); - } - - public GT_Slot_Render(IInventory inventory, int slotIndex, int xPos, int yPos, boolean aCanInsertItem, - boolean aCanStackItem, int aMaxStacksize) { - super(inventory, slotIndex, xPos, yPos); - mCanInsertItem = aCanInsertItem; - mCanStackItem = aCanStackItem; - mMaxStacksize = aMaxStacksize; - mSlotIndex = slotIndex; - } - - @Override - public boolean isItemValid(ItemStack itemStack) { - return mCanInsertItem; - } - - @Override - public int getSlotStackLimit() { - return mMaxStacksize; - } - - @Override - public boolean getHasStack() { - return false; - } - - @Override - public ItemStack decrStackSize(int amount) { - if (!mCanStackItem) return null; - return super.decrStackSize(amount); - } - - @Override - public boolean canTakeStack(EntityPlayer player) { - return false; - } - - /** - * Sets if this slot should be ignored in event-processing. For example, highlight the slot on mouseOver. - * - * @param enabled if the slot should be enabled - */ - public void setEnabled(boolean enabled) { - mEnabled = enabled; - } - - /** - * Use this value to determine whether to ignore this slot in event processing - */ - public boolean isEnabled() { - return mEnabled; - } - - /** - * This function controls whether to highlight the slot on mouseOver. - */ - @Override - @SideOnly(Side.CLIENT) - public boolean func_111238_b() { - return isEnabled(); - } - - /** - * NEI has a nice and "useful" Delete-All Function, which would delete the Content of this Slot. This is here to - * prevent that. - */ - @Override - public void putStack(ItemStack aStack) { - if (inventory instanceof TileEntity && ((TileEntity) inventory).getWorldObj().isRemote) { - inventory.setInventorySlotContents(getSlotIndex(), aStack); - } - onSlotChanged(); - } - } -} diff --git a/src/main/java/gtPlusPlus/core/container/Container_ProjectTable.java b/src/main/java/gtPlusPlus/core/container/Container_ProjectTable.java deleted file mode 100644 index 1702be19ab..0000000000 --- a/src/main/java/gtPlusPlus/core/container/Container_ProjectTable.java +++ /dev/null @@ -1,196 +0,0 @@ -package gtPlusPlus.core.container; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.InventoryCraftResult; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.CraftingManager; -import net.minecraft.world.World; - -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.inventories.projecttable.InventoryProjectMain; -import gtPlusPlus.core.inventories.projecttable.InventoryProjectOutput; -import gtPlusPlus.core.slots.SlotCraftingNoCollect; -import gtPlusPlus.core.slots.SlotDataStick; -import gtPlusPlus.core.slots.SlotNoInput; -import gtPlusPlus.core.tileentities.machines.TileEntityProjectTable; - -public class Container_ProjectTable extends Container { - - /** The crafting matrix inventory (3x3). */ - public InventoryCrafting craftMatrix = new InventoryCrafting(this, 3, 3); - - public IInventory craftResult = new InventoryCraftResult(); - - protected TileEntityProjectTable tile_entity; - public final InventoryProjectMain inventoryGrid; - public final InventoryProjectOutput inventoryOutputs; - - private final World worldObj; - private final int posX; - private final int posY; - private final int posZ; - - private final int[] slotOutputs = new int[2]; - private final int[] slotGrid = new int[9]; - - public Container_ProjectTable(final InventoryPlayer inventory, final TileEntityProjectTable tile) { - this.tile_entity = tile; - this.inventoryGrid = tile.inventoryGrid; - this.inventoryOutputs = tile.inventoryOutputs; - this.tile_entity.setContainer(this); - - int var6; - int var7; - this.worldObj = tile.getWorldObj(); - this.posX = tile.xCoord; - this.posY = tile.yCoord; - this.posZ = tile.zCoord; - - int nextFreeSlot = 0; - - // Output slots - this.addSlotToContainer(new SlotDataStick(this.inventoryOutputs, 0, 26 + (18 * 6), 8)); - this.addSlotToContainer(new SlotNoInput(this.inventoryOutputs, 1, 26 + (18 * 6), 44)); - - this.addSlotToContainer( - new SlotCraftingNoCollect(inventory.player, this.craftMatrix, this.craftResult, 0, 26 + (18 * 4), 25)); - - int o = 0; - // Storage Side - for (var6 = 0; var6 < 3; ++var6) { - for (var7 = 0; var7 < 3; ++var7) { - this.addSlotToContainer( - new Slot(this.craftMatrix, nextFreeSlot, 8 + 18 + (var7 * 18), 8 + (var6 * 18))); - this.slotGrid[o] = nextFreeSlot; - nextFreeSlot++; - 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)); - } - - this.onCraftMatrixChanged(this.craftMatrix); - } - - /** - * Callback for when the crafting matrix is changed. - */ - @Override - public void onCraftMatrixChanged(IInventory p_75130_1_) { - this.craftResult.setInventorySlotContents( - 0, - CraftingManager.getInstance() - .findMatchingRecipe(this.craftMatrix, this.worldObj)); - } - - /** - * Called when the container is closed. - */ - @Override - public void onContainerClosed(EntityPlayer p_75134_1_) { - super.onContainerClosed(p_75134_1_); - if (!this.worldObj.isRemote) { - for (int i = 0; i < 9; ++i) { - ItemStack itemstack = this.craftMatrix.getStackInSlotOnClosing(i); - if (itemstack != null) { - p_75134_1_.dropPlayerItemWithRandomChoice(itemstack, false); - } - } - } - } - - @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); - } - - if (aSlotIndex == 0) { - Logger.INFO("Player Clicked on the Data Stick slot"); - // TODO - } - if (aSlotIndex == 1) { - Logger.INFO("Player Clicked on the output slot"); - // TODO - } - - for (final int x : this.slotGrid) { - if (aSlotIndex == x) { - Logger.INFO("Player Clicked slot " + aSlotIndex + " in the crafting Grid"); - } - } - } - // Utils.LOG_WARNING("Player Clicked slot "+aSlotIndex+" in the Grid"); - return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); - } - - @Override - public boolean canInteractWith(final EntityPlayer par1EntityPlayer) { - if (this.worldObj.getBlock(this.posX, this.posY, this.posZ) != ModBlocks.blockProjectTable) { - 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) { - - return null; - - /* - * 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(ItemStack p_94530_1_, Slot p_94530_2_) { - return p_94530_2_.inventory != this.craftResult && super.func_94530_a(p_94530_1_, p_94530_2_); - } - - public ItemStack getOutputContent() { - ItemStack output = this.craftResult.getStackInSlot(0); - if (output != null) { - return output; - } - return null; - } - - public ItemStack[] getInputComponents() { - ItemStack inputs[] = new ItemStack[9]; - for (int r = 0; r < this.craftMatrix.getSizeInventory(); r++) { - ItemStack temp = this.craftMatrix.getStackInSlot(r); - inputs[r] = temp; - } - return inputs; - } -} diff --git a/src/main/java/gtPlusPlus/core/container/Container_SuperJukebox.java b/src/main/java/gtPlusPlus/core/container/Container_SuperJukebox.java deleted file mode 100644 index ab7525c897..0000000000 --- a/src/main/java/gtPlusPlus/core/container/Container_SuperJukebox.java +++ /dev/null @@ -1,232 +0,0 @@ -package gtPlusPlus.core.container; - -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; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.block.machine.Machine_SuperJukebox.TileEntitySuperJukebox; -import gtPlusPlus.core.inventories.Inventory_SuperJukebox; -import gtPlusPlus.core.slots.SlotJukebox; -import gtPlusPlus.core.slots.SlotNoInput; - -public class Container_SuperJukebox extends Container { - - protected TileEntitySuperJukebox tile_entity; - public final Inventory_SuperJukebox inventoryChest; - - private final World worldObj; - private final int posX; - private final int posY; - private final int posZ; - - public static final int SLOT_HOLO_PLAY = 18; - public static final int SLOT_HOLO_LOOP = 19; - public static final int SLOT_OUTPUT = 20; - - public static int StorageSlotNumber = 26; // 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_SuperJukebox(final InventoryPlayer inventory, final TileEntitySuperJukebox te) { - this.tile_entity = 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; - Logger.INFO("1"); - - 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 = 9; - int yStart = 20; - - try { - - // Row One - for (int c = 0; c < 9; c++) { - if (c >= 3 && c < 6) { - continue; - } - this.addSlotToContainer(new SlotJukebox(this.inventoryChest, o++, xStart + (18 * c), yStart)); - } - - // Row Two - for (int c = 0; c < 9; c++) { - if (c >= 3 && c < 6) { - continue; - } - this.addSlotToContainer(new SlotJukebox(this.inventoryChest, o++, xStart + (18 * c), yStart + 18)); - } - - // Row Two - for (int c = 0; c < 9; c++) { - if (c >= 3 && c < 6) { - continue; - } - this.addSlotToContainer(new SlotJukebox(this.inventoryChest, o++, xStart + (18 * c), yStart + 36)); - } - - // Controls - int c = 4; - - // Two Control Buttons - this.addSlotToContainer(new SlotNoInput(this.inventoryChest, SLOT_HOLO_PLAY, xStart + (18 * c), 12)); - this.addSlotToContainer( - new SlotNoInput(this.inventoryChest, SLOT_HOLO_LOOP, xStart + (18 * c), 12 + (1 * 18))); - - // Active playing slot for visual - this.addSlotToContainer( - new SlotJukebox(this.inventoryChest, SLOT_OUTPUT, xStart + (18 * c), 18 + (2 * 18), true)); - - // 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)); - } - - Logger.INFO("3"); - - } catch (Throwable t) { - t.printStackTrace(); - } - } - - @Override - public void onContainerClosed(final EntityPlayer par1EntityPlayer) { - super.onContainerClosed(par1EntityPlayer); - } - - @Override - public boolean canInteractWith(final EntityPlayer par1EntityPlayer) { - if (this.worldObj.getBlock(this.posX, this.posY, this.posZ) != ModBlocks.blockCustomJukebox) { - 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_); - } - - @Override - public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) { - if (tile_entity == null || tile_entity.getWorldObj().isRemote) return null; - switch (aSlotIndex) { - case SLOT_HOLO_PLAY -> { - if (tile_entity == null) return null; - tile_entity.mIsPlaying = !tile_entity.mIsPlaying; - Logger.INFO("Jukebox | Playing: " + tile_entity.mIsPlaying); - tile_entity.jukeboxLogicUpdate(); - return null; - } - case SLOT_HOLO_LOOP -> { - if (tile_entity == null) return null; - tile_entity.mIsLooping = !tile_entity.mIsLooping; - Logger.INFO("Jukebox | Looping: " + tile_entity.mIsLooping); - return null; - } - case 20 -> { - return null; - } - default -> { - return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); - } - } - } - - public boolean isPlaying; - public boolean isLooping; - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - if (tile_entity == null || tile_entity.getWorldObj().isRemote) return; - - isPlaying = tile_entity.mIsPlaying; - isLooping = tile_entity.mIsLooping; - - for (Object crafter : this.crafters) { - ICrafting var1 = (ICrafting) crafter; - var1.sendProgressBarUpdate(this, 102, isPlaying ? 1 : 0); - var1.sendProgressBarUpdate(this, 103, isLooping ? 1 : 0); - } - } - - @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 -> isPlaying = (par2 != 0); - case 103 -> isLooping = (par2 != 0); - } - } -} diff --git a/src/main/java/gtPlusPlus/core/container/Container_VolumetricFlaskSetter.java b/src/main/java/gtPlusPlus/core/container/Container_VolumetricFlaskSetter.java deleted file mode 100644 index 0315967263..0000000000 --- a/src/main/java/gtPlusPlus/core/container/Container_VolumetricFlaskSetter.java +++ /dev/null @@ -1,170 +0,0 @@ -package gtPlusPlus.core.container; - -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; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.api.objects.Logger; -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; - -public class Container_VolumetricFlaskSetter extends Container { - - public TileEntityVolumetricFlaskSetter mTileEntity; - public final Inventory_VolumetricFlaskSetter inventoryChest; - - public int mCustomValue; - private int 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++; - - for (Object crafter : this.crafters) { - ICrafting var1 = (ICrafting) crafter; - 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; - } - } - - public void log(String aString) { - Logger.INFO("[Flask-Container] " + aString); - } -} diff --git a/src/main/java/gtPlusPlus/core/creative/AddToCreativeTab.java b/src/main/java/gtPlusPlus/core/creative/AddToCreativeTab.java index fa0d3844b2..d801bb46ed 100644 --- a/src/main/java/gtPlusPlus/core/creative/AddToCreativeTab.java +++ b/src/main/java/gtPlusPlus/core/creative/AddToCreativeTab.java @@ -2,7 +2,7 @@ package gtPlusPlus.core.creative; import net.minecraft.creativetab.CreativeTabs; -import gregtech.api.util.GT_CreativeTab; +import gregtech.api.util.GTCreativeTab; public class AddToCreativeTab { @@ -15,11 +15,11 @@ public class AddToCreativeTab { public static void initialiseTabs() { // GT_CreativeTab - tabBlock = new GT_CreativeTab("GTPP_BLOCKS", "GT++ Blocks"); - tabMisc = new GT_CreativeTab("GTPP_MISC", "GT++ Misc"); - tabTools = new GT_CreativeTab("GTPP_TOOLS", "GT++ Tools"); - tabMachines = new GT_CreativeTab("GTPP_MACHINES", "GT++ Machines"); - tabOther = new GT_CreativeTab("GTPP_OTHER", "GT++ Other"); - tabBOP = new GT_CreativeTab("GTPP_OTHER_2", "GT++ Other II"); + tabBlock = new GTCreativeTab("GTPP_BLOCKS", "GT++ Blocks"); + tabMisc = new GTCreativeTab("GTPP_MISC", "GT++ Misc"); + tabTools = new GTCreativeTab("GTPP_TOOLS", "GT++ Tools"); + tabMachines = new GTCreativeTab("GTPP_MACHINES", "GT++ Machines"); + tabOther = new GTCreativeTab("GTPP_OTHER", "GT++ Other"); + tabBOP = new GTCreativeTab("GTPP_OTHER_2", "GT++ Other II"); } } diff --git a/src/main/java/gtPlusPlus/core/gui/GUIBaseTileEntity.java b/src/main/java/gtPlusPlus/core/gui/GUIBaseTileEntity.java new file mode 100644 index 0000000000..9e4dc6a6cc --- /dev/null +++ b/src/main/java/gtPlusPlus/core/gui/GUIBaseTileEntity.java @@ -0,0 +1,14 @@ +package gtPlusPlus.core.gui; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.inventory.Container; + +public abstract class GUIBaseTileEntity extends GuiContainer { + + public final Container mContainer; + + public GUIBaseTileEntity(Container aContainer) { + super(aContainer); + mContainer = aContainer; + } +} diff --git a/src/main/java/gtPlusPlus/core/gui/GUI_Base_Tile_Entity.java b/src/main/java/gtPlusPlus/core/gui/GUI_Base_Tile_Entity.java deleted file mode 100644 index 379827a1db..0000000000 --- a/src/main/java/gtPlusPlus/core/gui/GUI_Base_Tile_Entity.java +++ /dev/null @@ -1,14 +0,0 @@ -package gtPlusPlus.core.gui; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.inventory.Container; - -public abstract class GUI_Base_Tile_Entity extends GuiContainer { - - public final Container mContainer; - - public GUI_Base_Tile_Entity(Container aContainer) { - super(aContainer); - mContainer = aContainer; - } -} diff --git a/src/main/java/gtPlusPlus/core/gui/beta/GUIIDRegistry.java b/src/main/java/gtPlusPlus/core/gui/beta/GUIIDRegistry.java new file mode 100644 index 0000000000..f6d899d247 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/gui/beta/GUIIDRegistry.java @@ -0,0 +1,47 @@ +package gtPlusPlus.core.gui.beta; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import gtPlusPlus.core.interfaces.IGuiManagerMiscUtils; + +public class GUIIDRegistry { + + private static final Map, MUGuild> classMap = new HashMap<>(); + private static final Map idMap = new HashMap<>(); + private static int nextId = 0; + + static {} + + private static void registerGuiHandlers(final GUITypes MU_GuiType, + final List> guiHandlerClasses) { + for (final Class tileGuiHandlerClass : guiHandlerClasses) { + final MUGuild guiId = new MUGuild(nextId++, MU_GuiType, tileGuiHandlerClass); + classMap.put(tileGuiHandlerClass, guiId); + idMap.put(Integer.valueOf(guiId.getId()), guiId); + } + } + + public static MUGuild getGuiIdForGuiHandler(final IGuiManagerMiscUtils guiHandler) { + final Class guiHandlerClass = guiHandler.getClass(); + MUGuild guiId = classMap.get(guiHandlerClass); + if (guiId == null) { + for (final Map.Entry, MUGuild> classGuiIdEntry : classMap + .entrySet()) { + if (((Class) classGuiIdEntry.getKey()).isAssignableFrom(guiHandlerClass)) { + guiId = classGuiIdEntry.getValue(); + break; + } + } + } + if (guiId == null) { + throw new IllegalStateException("No gui ID for gui handler: " + guiHandler); + } + return guiId; + } + + public static MUGuild getGuiId(final int id) { + return idMap.get(Integer.valueOf(id)); + } +} diff --git a/src/main/java/gtPlusPlus/core/gui/beta/GUITypes.java b/src/main/java/gtPlusPlus/core/gui/beta/GUITypes.java new file mode 100644 index 0000000000..124e2fc276 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/gui/beta/GUITypes.java @@ -0,0 +1,10 @@ +package gtPlusPlus.core.gui.beta; + +public enum GUITypes { + + Item, + Tile, + Entity; + + private GUITypes() {} +} diff --git a/src/main/java/gtPlusPlus/core/gui/beta/Gui_ID_Registry.java b/src/main/java/gtPlusPlus/core/gui/beta/Gui_ID_Registry.java deleted file mode 100644 index 7da3d1a35c..0000000000 --- a/src/main/java/gtPlusPlus/core/gui/beta/Gui_ID_Registry.java +++ /dev/null @@ -1,47 +0,0 @@ -package gtPlusPlus.core.gui.beta; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import gtPlusPlus.core.interfaces.IGuiManagerMiscUtils; - -public class Gui_ID_Registry { - - private static final Map, MU_GuiId> classMap = new HashMap<>(); - private static final Map idMap = new HashMap<>(); - private static int nextId = 0; - - static {} - - private static void registerGuiHandlers(final Gui_Types MU_GuiType, - final List> guiHandlerClasses) { - for (final Class tileGuiHandlerClass : guiHandlerClasses) { - final MU_GuiId guiId = new MU_GuiId(nextId++, MU_GuiType, tileGuiHandlerClass); - classMap.put(tileGuiHandlerClass, guiId); - idMap.put(Integer.valueOf(guiId.getId()), guiId); - } - } - - public static MU_GuiId getGuiIdForGuiHandler(final IGuiManagerMiscUtils guiHandler) { - final Class guiHandlerClass = guiHandler.getClass(); - MU_GuiId guiId = classMap.get(guiHandlerClass); - if (guiId == null) { - for (final Map.Entry, MU_GuiId> classGuiIdEntry : classMap - .entrySet()) { - if (((Class) classGuiIdEntry.getKey()).isAssignableFrom(guiHandlerClass)) { - guiId = classGuiIdEntry.getValue(); - break; - } - } - } - if (guiId == null) { - throw new IllegalStateException("No gui ID for gui handler: " + guiHandler); - } - return guiId; - } - - public static MU_GuiId getGuiId(final int id) { - return idMap.get(Integer.valueOf(id)); - } -} diff --git a/src/main/java/gtPlusPlus/core/gui/beta/Gui_Types.java b/src/main/java/gtPlusPlus/core/gui/beta/Gui_Types.java deleted file mode 100644 index f0bf946b23..0000000000 --- a/src/main/java/gtPlusPlus/core/gui/beta/Gui_Types.java +++ /dev/null @@ -1,10 +0,0 @@ -package gtPlusPlus.core.gui.beta; - -public enum Gui_Types { - - Item, - Tile, - Entity; - - private Gui_Types() {} -} diff --git a/src/main/java/gtPlusPlus/core/gui/beta/MUGuild.java b/src/main/java/gtPlusPlus/core/gui/beta/MUGuild.java new file mode 100644 index 0000000000..7b599bd716 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/gui/beta/MUGuild.java @@ -0,0 +1,28 @@ +package gtPlusPlus.core.gui.beta; + +import gtPlusPlus.core.interfaces.IGuiManagerMiscUtils; + +public class MUGuild { + + private final int id; + private final GUITypes MU_GuiType; + private final Class guiHandlerClass; + + MUGuild(final int id, final GUITypes MU_GuiType, final Class guiHandlerClass) { + this.id = id; + this.MU_GuiType = MU_GuiType; + this.guiHandlerClass = guiHandlerClass; + } + + public GUITypes getGuiType() { + return this.MU_GuiType; + } + + public Class getGuiHandlerClass() { + return this.guiHandlerClass; + } + + public int getId() { + return this.id; + } +} diff --git a/src/main/java/gtPlusPlus/core/gui/beta/MU_GuiId.java b/src/main/java/gtPlusPlus/core/gui/beta/MU_GuiId.java deleted file mode 100644 index 8b15f5b937..0000000000 --- a/src/main/java/gtPlusPlus/core/gui/beta/MU_GuiId.java +++ /dev/null @@ -1,28 +0,0 @@ -package gtPlusPlus.core.gui.beta; - -import gtPlusPlus.core.interfaces.IGuiManagerMiscUtils; - -public class MU_GuiId { - - private final int id; - private final Gui_Types MU_GuiType; - private final Class guiHandlerClass; - - MU_GuiId(final int id, final Gui_Types MU_GuiType, final Class guiHandlerClass) { - this.id = id; - this.MU_GuiType = MU_GuiType; - this.guiHandlerClass = guiHandlerClass; - } - - public Gui_Types getGuiType() { - return this.MU_GuiType; - } - - public Class getGuiHandlerClass() { - return this.guiHandlerClass; - } - - public int getId() { - return this.id; - } -} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUICircuitProgrammer.java b/src/main/java/gtPlusPlus/core/gui/machine/GUICircuitProgrammer.java new file mode 100644 index 0000000000..f429c22af0 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/gui/machine/GUICircuitProgrammer.java @@ -0,0 +1,46 @@ +package gtPlusPlus.core.gui.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.container.ContainerCircuitProgrammer; +import gtPlusPlus.core.tileentities.general.TileEntityCircuitProgrammer; + +@SideOnly(Side.CLIENT) +public class GUICircuitProgrammer extends GuiContainer { + + private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation( + GTPlusPlus.ID, + "textures/gui/CircuitProgrammer.png"); + + public GUICircuitProgrammer(final InventoryPlayer player_inventory, final TileEntityCircuitProgrammer te) { + super(new ContainerCircuitProgrammer(player_inventory, te)); + } + + @Override + protected void drawGuiContainerForegroundLayer(final int i, final int j) { + super.drawGuiContainerForegroundLayer(i, j); + } + + @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() { + super.initGui(); + } +} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUIFishTrap.java b/src/main/java/gtPlusPlus/core/gui/machine/GUIFishTrap.java new file mode 100644 index 0000000000..36146867dd --- /dev/null +++ b/src/main/java/gtPlusPlus/core/gui/machine/GUIFishTrap.java @@ -0,0 +1,52 @@ +package gtPlusPlus.core.gui.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.container.ContainerFishTrap; +import gtPlusPlus.core.tileentities.general.TileEntityFishTrap; + +@SideOnly(Side.CLIENT) +public class GUIFishTrap extends GuiContainer { + + private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation( + GTPlusPlus.ID, + "textures/gui/FishTrap.png"); + + public GUIFishTrap(final InventoryPlayer player_inventory, final TileEntityFishTrap te) { + super(new ContainerFishTrap(player_inventory, te)); + } + + @Override + protected void drawGuiContainerForegroundLayer(final int i, final int j) {} + + @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! + } +} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUIPestKiller.java b/src/main/java/gtPlusPlus/core/gui/machine/GUIPestKiller.java new file mode 100644 index 0000000000..0f3e1fc832 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/gui/machine/GUIPestKiller.java @@ -0,0 +1,175 @@ +package gtPlusPlus.core.gui.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.awt.Color; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidTank; +import net.minecraftforge.fluids.IFluidTank; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.container.ContainerPestKiller; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.tileentities.machines.TileEntityPestKiller; +import gtPlusPlus.core.util.math.MathUtils; + +@SideOnly(Side.CLIENT) +public class GUIPestKiller extends GuiContainer { + + private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation( + GTPlusPlus.ID, + "textures/gui/PestKiller.png"); + private final TileEntityPestKiller mTileKiller; + + public GUIPestKiller(final InventoryPlayer player_inventory, final TileEntityPestKiller te) { + super(new ContainerPestKiller(player_inventory, te)); + mTileKiller = te; + } + + @Override + protected void drawGuiContainerForegroundLayer(final int i, final int j) { + if (mTileKiller != null) { + this.fontRendererObj.drawString(I18n.format(mTileKiller.getInventoryName(), new Object[0]), 4, 6, 4210752); + drawFluidTank(mTileKiller.getTank(), 134, 35); + } + } + + @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() { + super.initGui(); + } + + private void drawFluidTank(IFluidTank tank, int x, int y) { + Color startGrad = new Color(50, 50, 50); + Color endGrad = new Color(20, 20, 20); + ContainerPestKiller aCont = (ContainerPestKiller) this.inventorySlots; + + double aPercentage = 0; + double aDivisor = (100 / 16); + int aFrameHeight = 16; + + boolean didRender = false; + if (aCont != null) { + TileEntityPestKiller aTile = mTileKiller; + if (aTile != null) { + FluidTank aTank = aTile.getTank(); + int aTier = aTile.getTier(); + drawGradientRect(x, y, x + 16, y + 16, startGrad.getRGB(), endGrad.getRGB()); + if (aTier <= 0 || aTier > 2) { + if (aTank != null && aTank.getFluidAmount() > 0) { + aPercentage = MathUtils.findPercentage(aTank.getFluidAmount(), aTank.getCapacity()); + // Logger.INFO("Percent = "+aPercentage); + aFrameHeight = (int) (aPercentage / aDivisor); + // Logger.INFO("Frame Height = "+aFrameHeight); + } + this.fontRendererObj.drawString("Tier: 0", 4, 18, 4210752); + this.fontRendererObj.drawString("Range: 1x1", 4, 30, 4210752); + this.fontRendererObj.drawString("Poison: None", 4, 42, 4210752); + this.fontRendererObj.drawString("Amount: 0", 4, 64, 4210752); + didRender = true; + } else if (aTier == 1) { + if (aTank != null && aTank.getFluidAmount() > 0) { + aPercentage = MathUtils.findPercentage(aTank.getFluidAmount(), aTank.getCapacity()); + // Logger.INFO("Percent = "+aPercentage); + aFrameHeight = (int) (aPercentage / aDivisor); + // Logger.INFO("Frame Height = "+aFrameHeight); + } + startGrad = new Color(240, 50, 240); + endGrad = new Color(130, 30, 130); + drawGradientRect(x, y + (16 - aFrameHeight), x + 16, y + 16, startGrad.getRGB(), endGrad.getRGB()); + this.fontRendererObj.drawString("Tier: 1", 4, 18, 4210752); + this.fontRendererObj.drawString("Range: 5x5", 4, 30, 4210752); + this.fontRendererObj.drawString("Poison: ", 4, 42, 4210752); + this.fontRendererObj.drawString( + "" + aTile.getTank() + .getFluid() + .getLocalizedName(), + 4, + 54, + 4210752); + this.fontRendererObj.drawString( + "Amount: " + aTile.getTank() + .getFluidAmount(), + 4, + 64, + 4210752); + didRender = true; + } else if (aTier == 2) { + if (aTank != null && aTank.getFluidAmount() > 0) { + aPercentage = MathUtils.findPercentage(aTank.getFluidAmount(), aTank.getCapacity()); + // Logger.INFO("Percent = "+aPercentage); + aFrameHeight = (int) (aPercentage / aDivisor); + // Logger.INFO("Frame Height = "+aFrameHeight); + } + short[] aRGB = MaterialMisc.HYDROGEN_CYANIDE.getRGB(); + startGrad = new Color(aRGB[0], aRGB[1], aRGB[2]); + endGrad = new Color(Math.max(aRGB[0], 0), Math.max(aRGB[1], 0), Math.max(aRGB[2], 0)); + drawGradientRect(x, y + (16 - aFrameHeight), x + 16, y + 16, startGrad.getRGB(), endGrad.getRGB()); + this.fontRendererObj.drawString("Tier: 2", 4, 18, 4210752); + this.fontRendererObj.drawString("Range: 9x9", 4, 30, 4210752); + this.fontRendererObj.drawString("Poison: ", 4, 42, 4210752); + this.fontRendererObj.drawString( + "" + aTile.getTank() + .getFluid() + .getLocalizedName(), + 4, + 54, + 4210752); + this.fontRendererObj.drawString( + "Amount: " + aTile.getTank() + .getFluidAmount(), + 4, + 64, + 4210752); + didRender = true; + } + } + } + if (!didRender) { + startGrad = new Color(255, 30, 120); + endGrad = new Color(255, 0, 50); + drawGradientRect(x, y, x + 16, y + 16, startGrad.getRGB(), endGrad.getRGB()); + this.fontRendererObj.drawString("Tier: 0", 4, 18, 4210752); + } + + /* + * FluidStack fluid = tank.getFluid(); TextureManager manager = mc.getTextureManager(); if (fluid != null) { + * manager.bindTexture(manager.getResourceLocation(0)); float amount = fluid.amount; float capacity = + * tank.getCapacity(); float scale = amount / capacity; int fluidTankHeight = 60; int fluidAmount = (int) (scale + * * fluidTankHeight); drawFluid(x, y + fluidTankHeight - fluidAmount, fluid.getFluid().getIcon(fluid), 16, + * fluidAmount); } + */ + } + + private void drawFluid(int x, int y, IIcon icon, int width, int height) { + int i = 0; + int j = 0; + int drawHeight = 0; + int drawWidth = 0; + for (i = 0; i < width; i += 16) { + for (j = 0; j < height; j += 16) { + drawWidth = Math.min(width - i, 16); + drawHeight = Math.min(height - j, 16); + drawTexturedModelRectFromIcon(x + i, y + j, icon, drawWidth, drawHeight); + } + } + } +} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUIProjectTable.java b/src/main/java/gtPlusPlus/core/gui/machine/GUIProjectTable.java new file mode 100644 index 0000000000..2175c033f5 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/gui/machine/GUIProjectTable.java @@ -0,0 +1,58 @@ +package gtPlusPlus.core.gui.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.container.ContainerProjectTable; +import gtPlusPlus.core.tileentities.machines.TileEntityProjectTable; + +@SideOnly(Side.CLIENT) +public class GUIProjectTable extends GuiContainer { + + private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation( + GTPlusPlus.ID, + "textures/gui/ProjectTable.png"); + + public GUIProjectTable(final InventoryPlayer player_inventory, final TileEntityProjectTable tile) { + super(new ContainerProjectTable(player_inventory, tile)); + } + + @Override + protected void drawGuiContainerForegroundLayer(final int i, final int j) { + + } + + @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! + } + + @Override + protected void actionPerformed(final GuiButton B) {} +} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUISuperJukebox.java b/src/main/java/gtPlusPlus/core/gui/machine/GUISuperJukebox.java new file mode 100644 index 0000000000..9158667aff --- /dev/null +++ b/src/main/java/gtPlusPlus/core/gui/machine/GUISuperJukebox.java @@ -0,0 +1,88 @@ +package gtPlusPlus.core.gui.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.block.machine.BlockSuperJukebox.TileEntitySuperJukebox; +import gtPlusPlus.core.container.ContainerSuperJukebox; +import gtPlusPlus.core.gui.GUIBaseTileEntity; + +@SideOnly(Side.CLIENT) +public class GUISuperJukebox extends GUIBaseTileEntity { + + private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation( + GTPlusPlus.ID, + "textures/gui/SuperJukebox.png"); + private final ContainerSuperJukebox mThisContainer; + + public GUISuperJukebox(final InventoryPlayer player_inventory, final TileEntitySuperJukebox te) { + super(new ContainerSuperJukebox(player_inventory, te)); + mThisContainer = (ContainerSuperJukebox) this.mContainer; + } + + // This method is called when the Gui is first called! + @Override + public void initGui() { + super.initGui(); + } + + @Override + protected void drawGuiContainerForegroundLayer(final int par1, final int par2) { + super.drawGuiContainerForegroundLayer(par1, par2); + + boolean a = mThisContainer.isPlaying; + boolean b = mThisContainer.isLooping; + + if (a && b) { + this.fontRendererObj.drawString("[X] [X]", 72, 74, 4210752); + } else if (a && !b) { + this.fontRendererObj.drawString("[X] [ ]", 72, 74, 4210752); + } else if (!a && b) { + this.fontRendererObj.drawString("[ ] [X]", 72, 74, 4210752); + } else { + this.fontRendererObj.drawString("[ ] [ ]", 72, 74, 4210752); + } + + this.drawTooltip(par1, par2); + } + + private void drawTooltip(final int x2, final int y2) { + final int xStart = (this.width - this.xSize) / 2; + final int yStart = (this.height - this.ySize) / 2; + final int x3 = x2 - xStart; + final int y3 = y2 - yStart + 5; + final List list = new ArrayList<>(); + + if (y3 >= 17 && y3 <= 33) { + if (x3 >= 80 && x3 <= 96) { + list.add("Play"); + } + } + if (y3 >= 35 && y3 <= 53) { + if (x3 >= 80 && x3 <= 96) { + list.add("Loop"); + } + } + if (!list.isEmpty()) { + this.drawHoveringText(list, x3, y3, this.fontRendererObj); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(final float par1, final int par2, final int par3) { + 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); + } +} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUIVolumetricFlaskSetter.java b/src/main/java/gtPlusPlus/core/gui/machine/GUIVolumetricFlaskSetter.java new file mode 100644 index 0000000000..3e1a735f7e --- /dev/null +++ b/src/main/java/gtPlusPlus/core/gui/machine/GUIVolumetricFlaskSetter.java @@ -0,0 +1,228 @@ +package gtPlusPlus.core.gui.machine; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.util.ResourceLocation; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.container.ContainerVolumetricFlaskSetter; +import gtPlusPlus.core.gui.widget.GuiValueField; +import gtPlusPlus.core.handler.PacketHandler; +import gtPlusPlus.core.network.packet.PacketVolumetricFlaskGui; +import gtPlusPlus.core.tileentities.general.TileEntityVolumetricFlaskSetter; + +@SideOnly(Side.CLIENT) +public class GUIVolumetricFlaskSetter extends GuiContainer { + + private static final ResourceLocation mGuiTextures = new ResourceLocation( + GTPlusPlus.ID, + "textures/gui/VolumetricFlaskSetter.png"); + private ContainerVolumetricFlaskSetter mContainer; + private boolean mIsOpen = false; + private GuiValueField mText; + private TileEntityVolumetricFlaskSetter mTile; + + public GUIVolumetricFlaskSetter(ContainerVolumetricFlaskSetter aContainer) { + super(aContainer); + mContainer = aContainer; + mTile = mContainer.mTileEntity; + } + + @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); + } + + @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 + public void drawScreen(int par1, int par2, float par3) { + this.drawDefaultBackground(); + super.drawScreen(par1, par2, par3); + } + + protected String getText() { + return this.mText.getText(); + } + + @Override + 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, + this); + mText.setMaxStringLength(5); + mText.setEnableBackgroundDrawing(true); + mText.setText("0"); + mText.setFocused(true); + } + + public boolean isNumber(char c) { + boolean isNum = ((c >= 48 && c <= 57) || c == 45); + if (isNum) { + log("Found Digit: " + c + " | char value"); + } else { + switch (c) { + case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> { + log("Found Digit: " + c + " | char switch"); + return true; + } + } + } + return isNum; + } + + public boolean isNumber(int c) { + switch (c) { + case Keyboard.KEY_0, Keyboard.KEY_1, Keyboard.KEY_2, Keyboard.KEY_3, Keyboard.KEY_4, Keyboard.KEY_5, Keyboard.KEY_6, Keyboard.KEY_7, Keyboard.KEY_8, Keyboard.KEY_9, Keyboard.KEY_NUMPAD0, Keyboard.KEY_NUMPAD1, Keyboard.KEY_NUMPAD2, Keyboard.KEY_NUMPAD3, Keyboard.KEY_NUMPAD4, Keyboard.KEY_NUMPAD5, Keyboard.KEY_NUMPAD6, Keyboard.KEY_NUMPAD7, Keyboard.KEY_NUMPAD8, Keyboard.KEY_NUMPAD9 -> { + log("Found Digit: " + Keyboard.getKeyName(c) + " | LWJGL Keybinding"); + return true; + } + } + return false; + } + + @Override + protected void keyTyped(char par1, int par2) { + if (mIsOpen) { + log("Pressed " + par1 + " | " + par2); + if (mText.isFocused()) { + log("Text box has focus."); + if (par2 == Keyboard.KEY_RETURN) { + log("Pressed Enter, unfocusing."); + mText.setFocused(false); + } else if (par2 == Keyboard.KEY_BACK) { + log("Pressed Backspace."); + String aCurrentText = getText(); + if (aCurrentText.length() > 0) { + this.mText.setText(aCurrentText.substring(0, aCurrentText.length() - 1)); + if (getText().length() <= 0) { + setText(0); + } + sendUpdateToServer(); + } + } else { + if (isNumber(par2) || isNumber(par1)) { + log("Pressed number."); + if (this.mText.getText() + .equals("0")) { + this.mText.textboxKeyTyped(par1, par2); + sendUpdateToServer(); + } else { + this.mText.textboxKeyTyped(par1, par2); + sendUpdateToServer(); + } + } else { + log("Pressed unused key."); + super.keyTyped(par1, par2); + } + } + } else { + log("Text box not focused."); + super.keyTyped(par1, par2); + } + } else { + log("Gui is not open?"); + } + } + + @Override + protected void mouseClicked(int x, int y, int btn) { + if (mIsOpen) { + log("Clicked."); + this.mText.mouseClicked(x, y, btn); + if (!mText.didClickInTextField(x, y)) { + log("Did not click in text box, passing to super."); + super.mouseClicked(x, y, btn); + } + } else { + log("Gui is not open?"); + } + } + + @Override + public void onGuiClosed() { + mIsOpen = false; + mText.setEnabled(false); + mText.setVisible(false); + super.onGuiClosed(); + // Keyboard.enableRepeatEvents(false); + } + + public int parse(String aValue) { + try { + return Integer.parseInt(getText()); + } catch (NumberFormatException e) { + return 0; + } + } + + public void sendUpdateToServer() { + if (getText().length() > 0) { + PacketHandler.sendToServer(new PacketVolumetricFlaskGui(mTile, parse(getText()))); + } + } + + public void setText(int aValue) { + this.mText.setText("" + aValue); + } + + @Override + 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 + if (getText().length() > 0) { + int aCustomValue = parse(getText()); + int aTileValue = ((ContainerVolumetricFlaskSetter) mContainer).mCustomValue; + if (mContainer != null) { + if (aTileValue != aCustomValue) { + setText(aTileValue); + } + } + } + } + + public void log(String aString) { + Logger.INFO("[Flask-GUI] " + aString); + } +} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUI_CircuitProgrammer.java b/src/main/java/gtPlusPlus/core/gui/machine/GUI_CircuitProgrammer.java deleted file mode 100644 index 71d3b36470..0000000000 --- a/src/main/java/gtPlusPlus/core/gui/machine/GUI_CircuitProgrammer.java +++ /dev/null @@ -1,46 +0,0 @@ -package gtPlusPlus.core.gui.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.container.Container_CircuitProgrammer; -import gtPlusPlus.core.tileentities.general.TileEntityCircuitProgrammer; - -@SideOnly(Side.CLIENT) -public class GUI_CircuitProgrammer extends GuiContainer { - - private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation( - GTPlusPlus.ID, - "textures/gui/CircuitProgrammer.png"); - - public GUI_CircuitProgrammer(final InventoryPlayer player_inventory, final TileEntityCircuitProgrammer te) { - super(new Container_CircuitProgrammer(player_inventory, te)); - } - - @Override - protected void drawGuiContainerForegroundLayer(final int i, final int j) { - super.drawGuiContainerForegroundLayer(i, j); - } - - @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() { - super.initGui(); - } -} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUI_FishTrap.java b/src/main/java/gtPlusPlus/core/gui/machine/GUI_FishTrap.java deleted file mode 100644 index d57ef408d0..0000000000 --- a/src/main/java/gtPlusPlus/core/gui/machine/GUI_FishTrap.java +++ /dev/null @@ -1,52 +0,0 @@ -package gtPlusPlus.core.gui.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.container.Container_FishTrap; -import gtPlusPlus.core.tileentities.general.TileEntityFishTrap; - -@SideOnly(Side.CLIENT) -public class GUI_FishTrap extends GuiContainer { - - private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation( - GTPlusPlus.ID, - "textures/gui/FishTrap.png"); - - public GUI_FishTrap(final InventoryPlayer player_inventory, final TileEntityFishTrap te) { - super(new Container_FishTrap(player_inventory, te)); - } - - @Override - protected void drawGuiContainerForegroundLayer(final int i, final int j) {} - - @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! - } -} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUI_PestKiller.java b/src/main/java/gtPlusPlus/core/gui/machine/GUI_PestKiller.java deleted file mode 100644 index bed8707fc4..0000000000 --- a/src/main/java/gtPlusPlus/core/gui/machine/GUI_PestKiller.java +++ /dev/null @@ -1,175 +0,0 @@ -package gtPlusPlus.core.gui.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.awt.Color; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fluids.FluidTank; -import net.minecraftforge.fluids.IFluidTank; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.container.Container_PestKiller; -import gtPlusPlus.core.material.MISC_MATERIALS; -import gtPlusPlus.core.tileentities.machines.TileEntityPestKiller; -import gtPlusPlus.core.util.math.MathUtils; - -@SideOnly(Side.CLIENT) -public class GUI_PestKiller extends GuiContainer { - - private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation( - GTPlusPlus.ID, - "textures/gui/PestKiller.png"); - private final TileEntityPestKiller mTileKiller; - - public GUI_PestKiller(final InventoryPlayer player_inventory, final TileEntityPestKiller te) { - super(new Container_PestKiller(player_inventory, te)); - mTileKiller = te; - } - - @Override - protected void drawGuiContainerForegroundLayer(final int i, final int j) { - if (mTileKiller != null) { - this.fontRendererObj.drawString(I18n.format(mTileKiller.getInventoryName(), new Object[0]), 4, 6, 4210752); - drawFluidTank(mTileKiller.getTank(), 134, 35); - } - } - - @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() { - super.initGui(); - } - - private void drawFluidTank(IFluidTank tank, int x, int y) { - Color startGrad = new Color(50, 50, 50); - Color endGrad = new Color(20, 20, 20); - Container_PestKiller aCont = (Container_PestKiller) this.inventorySlots; - - double aPercentage = 0; - double aDivisor = (100 / 16); - int aFrameHeight = 16; - - boolean didRender = false; - if (aCont != null) { - TileEntityPestKiller aTile = mTileKiller; - if (aTile != null) { - FluidTank aTank = aTile.getTank(); - int aTier = aTile.getTier(); - drawGradientRect(x, y, x + 16, y + 16, startGrad.getRGB(), endGrad.getRGB()); - if (aTier <= 0 || aTier > 2) { - if (aTank != null && aTank.getFluidAmount() > 0) { - aPercentage = MathUtils.findPercentage(aTank.getFluidAmount(), aTank.getCapacity()); - // Logger.INFO("Percent = "+aPercentage); - aFrameHeight = (int) (aPercentage / aDivisor); - // Logger.INFO("Frame Height = "+aFrameHeight); - } - this.fontRendererObj.drawString("Tier: 0", 4, 18, 4210752); - this.fontRendererObj.drawString("Range: 1x1", 4, 30, 4210752); - this.fontRendererObj.drawString("Poison: None", 4, 42, 4210752); - this.fontRendererObj.drawString("Amount: 0", 4, 64, 4210752); - didRender = true; - } else if (aTier == 1) { - if (aTank != null && aTank.getFluidAmount() > 0) { - aPercentage = MathUtils.findPercentage(aTank.getFluidAmount(), aTank.getCapacity()); - // Logger.INFO("Percent = "+aPercentage); - aFrameHeight = (int) (aPercentage / aDivisor); - // Logger.INFO("Frame Height = "+aFrameHeight); - } - startGrad = new Color(240, 50, 240); - endGrad = new Color(130, 30, 130); - drawGradientRect(x, y + (16 - aFrameHeight), x + 16, y + 16, startGrad.getRGB(), endGrad.getRGB()); - this.fontRendererObj.drawString("Tier: 1", 4, 18, 4210752); - this.fontRendererObj.drawString("Range: 5x5", 4, 30, 4210752); - this.fontRendererObj.drawString("Poison: ", 4, 42, 4210752); - this.fontRendererObj.drawString( - "" + aTile.getTank() - .getFluid() - .getLocalizedName(), - 4, - 54, - 4210752); - this.fontRendererObj.drawString( - "Amount: " + aTile.getTank() - .getFluidAmount(), - 4, - 64, - 4210752); - didRender = true; - } else if (aTier == 2) { - if (aTank != null && aTank.getFluidAmount() > 0) { - aPercentage = MathUtils.findPercentage(aTank.getFluidAmount(), aTank.getCapacity()); - // Logger.INFO("Percent = "+aPercentage); - aFrameHeight = (int) (aPercentage / aDivisor); - // Logger.INFO("Frame Height = "+aFrameHeight); - } - short[] aRGB = MISC_MATERIALS.HYDROGEN_CYANIDE.getRGB(); - startGrad = new Color(aRGB[0], aRGB[1], aRGB[2]); - endGrad = new Color(Math.max(aRGB[0], 0), Math.max(aRGB[1], 0), Math.max(aRGB[2], 0)); - drawGradientRect(x, y + (16 - aFrameHeight), x + 16, y + 16, startGrad.getRGB(), endGrad.getRGB()); - this.fontRendererObj.drawString("Tier: 2", 4, 18, 4210752); - this.fontRendererObj.drawString("Range: 9x9", 4, 30, 4210752); - this.fontRendererObj.drawString("Poison: ", 4, 42, 4210752); - this.fontRendererObj.drawString( - "" + aTile.getTank() - .getFluid() - .getLocalizedName(), - 4, - 54, - 4210752); - this.fontRendererObj.drawString( - "Amount: " + aTile.getTank() - .getFluidAmount(), - 4, - 64, - 4210752); - didRender = true; - } - } - } - if (!didRender) { - startGrad = new Color(255, 30, 120); - endGrad = new Color(255, 0, 50); - drawGradientRect(x, y, x + 16, y + 16, startGrad.getRGB(), endGrad.getRGB()); - this.fontRendererObj.drawString("Tier: 0", 4, 18, 4210752); - } - - /* - * FluidStack fluid = tank.getFluid(); TextureManager manager = mc.getTextureManager(); if (fluid != null) { - * manager.bindTexture(manager.getResourceLocation(0)); float amount = fluid.amount; float capacity = - * tank.getCapacity(); float scale = amount / capacity; int fluidTankHeight = 60; int fluidAmount = (int) (scale - * * fluidTankHeight); drawFluid(x, y + fluidTankHeight - fluidAmount, fluid.getFluid().getIcon(fluid), 16, - * fluidAmount); } - */ - } - - private void drawFluid(int x, int y, IIcon icon, int width, int height) { - int i = 0; - int j = 0; - int drawHeight = 0; - int drawWidth = 0; - for (i = 0; i < width; i += 16) { - for (j = 0; j < height; j += 16) { - drawWidth = Math.min(width - i, 16); - drawHeight = Math.min(height - j, 16); - drawTexturedModelRectFromIcon(x + i, y + j, icon, drawWidth, drawHeight); - } - } - } -} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUI_ProjectTable.java b/src/main/java/gtPlusPlus/core/gui/machine/GUI_ProjectTable.java deleted file mode 100644 index 3707855641..0000000000 --- a/src/main/java/gtPlusPlus/core/gui/machine/GUI_ProjectTable.java +++ /dev/null @@ -1,58 +0,0 @@ -package gtPlusPlus.core.gui.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.container.Container_ProjectTable; -import gtPlusPlus.core.tileentities.machines.TileEntityProjectTable; - -@SideOnly(Side.CLIENT) -public class GUI_ProjectTable extends GuiContainer { - - private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation( - GTPlusPlus.ID, - "textures/gui/ProjectTable.png"); - - public GUI_ProjectTable(final InventoryPlayer player_inventory, final TileEntityProjectTable tile) { - super(new Container_ProjectTable(player_inventory, tile)); - } - - @Override - protected void drawGuiContainerForegroundLayer(final int i, final int j) { - - } - - @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! - } - - @Override - protected void actionPerformed(final GuiButton B) {} -} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUI_SuperJukebox.java b/src/main/java/gtPlusPlus/core/gui/machine/GUI_SuperJukebox.java deleted file mode 100644 index 9afa2b4ce1..0000000000 --- a/src/main/java/gtPlusPlus/core/gui/machine/GUI_SuperJukebox.java +++ /dev/null @@ -1,88 +0,0 @@ -package gtPlusPlus.core.gui.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.block.machine.Machine_SuperJukebox.TileEntitySuperJukebox; -import gtPlusPlus.core.container.Container_SuperJukebox; -import gtPlusPlus.core.gui.GUI_Base_Tile_Entity; - -@SideOnly(Side.CLIENT) -public class GUI_SuperJukebox extends GUI_Base_Tile_Entity { - - private static final ResourceLocation craftingTableGuiTextures = new ResourceLocation( - GTPlusPlus.ID, - "textures/gui/SuperJukebox.png"); - private final Container_SuperJukebox mThisContainer; - - public GUI_SuperJukebox(final InventoryPlayer player_inventory, final TileEntitySuperJukebox te) { - super(new Container_SuperJukebox(player_inventory, te)); - mThisContainer = (Container_SuperJukebox) this.mContainer; - } - - // This method is called when the Gui is first called! - @Override - public void initGui() { - super.initGui(); - } - - @Override - protected void drawGuiContainerForegroundLayer(final int par1, final int par2) { - super.drawGuiContainerForegroundLayer(par1, par2); - - boolean a = mThisContainer.isPlaying; - boolean b = mThisContainer.isLooping; - - if (a && b) { - this.fontRendererObj.drawString("[X] [X]", 72, 74, 4210752); - } else if (a && !b) { - this.fontRendererObj.drawString("[X] [ ]", 72, 74, 4210752); - } else if (!a && b) { - this.fontRendererObj.drawString("[ ] [X]", 72, 74, 4210752); - } else { - this.fontRendererObj.drawString("[ ] [ ]", 72, 74, 4210752); - } - - this.drawTooltip(par1, par2); - } - - private void drawTooltip(final int x2, final int y2) { - final int xStart = (this.width - this.xSize) / 2; - final int yStart = (this.height - this.ySize) / 2; - final int x3 = x2 - xStart; - final int y3 = y2 - yStart + 5; - final List list = new ArrayList<>(); - - if (y3 >= 17 && y3 <= 33) { - if (x3 >= 80 && x3 <= 96) { - list.add("Play"); - } - } - if (y3 >= 35 && y3 <= 53) { - if (x3 >= 80 && x3 <= 96) { - list.add("Loop"); - } - } - if (!list.isEmpty()) { - this.drawHoveringText(list, x3, y3, this.fontRendererObj); - } - } - - @Override - protected void drawGuiContainerBackgroundLayer(final float par1, final int par2, final int par3) { - 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); - } -} diff --git a/src/main/java/gtPlusPlus/core/gui/machine/GUI_VolumetricFlaskSetter.java b/src/main/java/gtPlusPlus/core/gui/machine/GUI_VolumetricFlaskSetter.java deleted file mode 100644 index 6595b510c0..0000000000 --- a/src/main/java/gtPlusPlus/core/gui/machine/GUI_VolumetricFlaskSetter.java +++ /dev/null @@ -1,228 +0,0 @@ -package gtPlusPlus.core.gui.machine; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.client.resources.I18n; -import net.minecraft.util.ResourceLocation; - -import org.lwjgl.input.Keyboard; -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.container.Container_VolumetricFlaskSetter; -import gtPlusPlus.core.gui.widget.GuiValueField; -import gtPlusPlus.core.handler.PacketHandler; -import gtPlusPlus.core.network.packet.Packet_VolumetricFlaskGui; -import gtPlusPlus.core.tileentities.general.TileEntityVolumetricFlaskSetter; - -@SideOnly(Side.CLIENT) -public class GUI_VolumetricFlaskSetter extends GuiContainer { - - private static final ResourceLocation mGuiTextures = new ResourceLocation( - GTPlusPlus.ID, - "textures/gui/VolumetricFlaskSetter.png"); - private Container_VolumetricFlaskSetter mContainer; - private boolean mIsOpen = false; - private GuiValueField mText; - private TileEntityVolumetricFlaskSetter mTile; - - public GUI_VolumetricFlaskSetter(Container_VolumetricFlaskSetter aContainer) { - super(aContainer); - mContainer = aContainer; - mTile = mContainer.mTileEntity; - } - - @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); - } - - @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 - public void drawScreen(int par1, int par2, float par3) { - this.drawDefaultBackground(); - super.drawScreen(par1, par2, par3); - } - - protected String getText() { - return this.mText.getText(); - } - - @Override - 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, - this); - mText.setMaxStringLength(5); - mText.setEnableBackgroundDrawing(true); - mText.setText("0"); - mText.setFocused(true); - } - - public boolean isNumber(char c) { - boolean isNum = ((c >= 48 && c <= 57) || c == 45); - if (isNum) { - log("Found Digit: " + c + " | char value"); - } else { - switch (c) { - case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> { - log("Found Digit: " + c + " | char switch"); - return true; - } - } - } - return isNum; - } - - public boolean isNumber(int c) { - switch (c) { - case Keyboard.KEY_0, Keyboard.KEY_1, Keyboard.KEY_2, Keyboard.KEY_3, Keyboard.KEY_4, Keyboard.KEY_5, Keyboard.KEY_6, Keyboard.KEY_7, Keyboard.KEY_8, Keyboard.KEY_9, Keyboard.KEY_NUMPAD0, Keyboard.KEY_NUMPAD1, Keyboard.KEY_NUMPAD2, Keyboard.KEY_NUMPAD3, Keyboard.KEY_NUMPAD4, Keyboard.KEY_NUMPAD5, Keyboard.KEY_NUMPAD6, Keyboard.KEY_NUMPAD7, Keyboard.KEY_NUMPAD8, Keyboard.KEY_NUMPAD9 -> { - log("Found Digit: " + Keyboard.getKeyName(c) + " | LWJGL Keybinding"); - return true; - } - } - return false; - } - - @Override - protected void keyTyped(char par1, int par2) { - if (mIsOpen) { - log("Pressed " + par1 + " | " + par2); - if (mText.isFocused()) { - log("Text box has focus."); - if (par2 == Keyboard.KEY_RETURN) { - log("Pressed Enter, unfocusing."); - mText.setFocused(false); - } else if (par2 == Keyboard.KEY_BACK) { - log("Pressed Backspace."); - String aCurrentText = getText(); - if (aCurrentText.length() > 0) { - this.mText.setText(aCurrentText.substring(0, aCurrentText.length() - 1)); - if (getText().length() <= 0) { - setText(0); - } - sendUpdateToServer(); - } - } else { - if (isNumber(par2) || isNumber(par1)) { - log("Pressed number."); - if (this.mText.getText() - .equals("0")) { - this.mText.textboxKeyTyped(par1, par2); - sendUpdateToServer(); - } else { - this.mText.textboxKeyTyped(par1, par2); - sendUpdateToServer(); - } - } else { - log("Pressed unused key."); - super.keyTyped(par1, par2); - } - } - } else { - log("Text box not focused."); - super.keyTyped(par1, par2); - } - } else { - log("Gui is not open?"); - } - } - - @Override - protected void mouseClicked(int x, int y, int btn) { - if (mIsOpen) { - log("Clicked."); - this.mText.mouseClicked(x, y, btn); - if (!mText.didClickInTextField(x, y)) { - log("Did not click in text box, passing to super."); - super.mouseClicked(x, y, btn); - } - } else { - log("Gui is not open?"); - } - } - - @Override - public void onGuiClosed() { - mIsOpen = false; - mText.setEnabled(false); - mText.setVisible(false); - super.onGuiClosed(); - // Keyboard.enableRepeatEvents(false); - } - - public int parse(String aValue) { - try { - return Integer.parseInt(getText()); - } catch (NumberFormatException e) { - return 0; - } - } - - public void sendUpdateToServer() { - if (getText().length() > 0) { - PacketHandler.sendToServer(new Packet_VolumetricFlaskGui(mTile, parse(getText()))); - } - } - - public void setText(int aValue) { - this.mText.setText("" + aValue); - } - - @Override - 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 - if (getText().length() > 0) { - int aCustomValue = parse(getText()); - int aTileValue = ((Container_VolumetricFlaskSetter) mContainer).mCustomValue; - if (mContainer != null) { - if (aTileValue != aCustomValue) { - setText(aTileValue); - } - } - } - } - - public void log(String aString) { - Logger.INFO("[Flask-GUI] " + aString); - } -} diff --git a/src/main/java/gtPlusPlus/core/gui/widget/GuiValueField.java b/src/main/java/gtPlusPlus/core/gui/widget/GuiValueField.java index 698aa1951a..26e7d907d3 100644 --- a/src/main/java/gtPlusPlus/core/gui/widget/GuiValueField.java +++ b/src/main/java/gtPlusPlus/core/gui/widget/GuiValueField.java @@ -5,19 +5,19 @@ import java.lang.reflect.Field; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.GuiTextField; -import gtPlusPlus.core.gui.machine.GUI_VolumetricFlaskSetter; +import gtPlusPlus.core.gui.machine.GUIVolumetricFlaskSetter; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.preloader.PreloaderCore; public class GuiValueField extends GuiTextField { private final FontRenderer mFontRenderer; private final int mScreenLocationX; private final int mScreenLocationY; - private final GUI_VolumetricFlaskSetter mGUI; + private final GUIVolumetricFlaskSetter mGUI; public GuiValueField(FontRenderer aFontRenderer, int aX, int aY, int aScreenLocationX, int aScreenLocationY, - int aWidth, int aHeight, GUI_VolumetricFlaskSetter aGUI) { + int aWidth, int aHeight, GUIVolumetricFlaskSetter aGUI) { super(aFontRenderer, aX, aY, aWidth, aHeight); mFontRenderer = aFontRenderer; mScreenLocationX = aScreenLocationX; @@ -33,7 +33,7 @@ public class GuiValueField extends GuiTextField { public boolean isBackgroundDrawingEnabled() { Field enableBackgroundDrawing = ReflectionUtils.getField( GuiTextField.class, - !CORE_Preloader.DEV_ENVIRONMENT ? "field_146215_m" : "enableBackgroundDrawing"); + !PreloaderCore.DEV_ENVIRONMENT ? "field_146215_m" : "enableBackgroundDrawing"); if (enableBackgroundDrawing != null) { return ReflectionUtils.getFieldValue(enableBackgroundDrawing, this); } @@ -42,7 +42,7 @@ public class GuiValueField extends GuiTextField { public int getLineScrollOffset() { Field lineScrollOffset = ReflectionUtils - .getField(GuiTextField.class, !CORE_Preloader.DEV_ENVIRONMENT ? "field_146225_q" : "lineScrollOffset"); + .getField(GuiTextField.class, !PreloaderCore.DEV_ENVIRONMENT ? "field_146225_q" : "lineScrollOffset"); if (lineScrollOffset != null) { return (int) ReflectionUtils.getFieldValue(lineScrollOffset, this); } diff --git a/src/main/java/gtPlusPlus/core/handler/AchievementHandler.java b/src/main/java/gtPlusPlus/core/handler/AchievementHandler.java index 41513163a0..0611be5d19 100644 --- a/src/main/java/gtPlusPlus/core/handler/AchievementHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/AchievementHandler.java @@ -17,13 +17,13 @@ import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent.ItemCraftedEvent; import cpw.mods.fml.common.gameevent.PlayerEvent.ItemSmeltedEvent; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_Log; +import gregtech.api.util.GTLog; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.block.ModBlocks; import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.ELEMENT; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; @@ -41,7 +41,7 @@ public class AchievementHandler { public AchievementHandler() { Logger.INFO("Initializing GT++ achievements"); - GT_Log.out.println("Initializing GT++ achievements"); + GTLog.out.println("Initializing GT++ achievements"); // register first this.registerAchievement( @@ -74,11 +74,17 @@ public class AchievementHandler { true); // Material Advancement - this.registerAchievement("dust.potin", 0, 2, ALLOY.POTIN.getDust(1), aBaseAchievementName, false); - this.registerAchievement("dust.eglin", 0, 4, ALLOY.EGLIN_STEEL.getDust(1), "dust.potin", false); - this.registerAchievement("dust.staballoy", 0, 6, ALLOY.STABALLOY.getDust(1), "dust.eglin", false); - this.registerAchievement("dust.quantum", 0, 8, ALLOY.QUANTUM.getDust(1), "dust.staballoy", true); - this.registerAchievement("dust.hypogen", 0, 10, ELEMENT.STANDALONE.HYPOGEN.getDust(1), "dust.quantum", true); + this.registerAchievement("dust.potin", 0, 2, MaterialsAlloy.POTIN.getDust(1), aBaseAchievementName, false); + this.registerAchievement("dust.eglin", 0, 4, MaterialsAlloy.EGLIN_STEEL.getDust(1), "dust.potin", false); + this.registerAchievement("dust.staballoy", 0, 6, MaterialsAlloy.STABALLOY.getDust(1), "dust.eglin", false); + this.registerAchievement("dust.quantum", 0, 8, MaterialsAlloy.QUANTUM.getDust(1), "dust.staballoy", true); + this.registerAchievement( + "dust.hypogen", + 0, + 10, + MaterialsElements.STANDALONE.HYPOGEN.getDust(1), + "dust.quantum", + true); // Blocks this.registerAchievement( @@ -253,9 +259,9 @@ public class AchievementHandler { } achievement.registerStat(); - if (CORE.DEVENV) { - GT_Log.out.println("achievement." + textId + "="); - GT_Log.out.println("achievement." + textId + ".desc="); + if (GTPPCore.DEVENV) { + GTLog.out.println("achievement." + textId + "="); + GTLog.out.println("achievement." + textId + ".desc="); } this.achievementList.put(textId, achievement); @@ -275,7 +281,7 @@ public class AchievementHandler { /** * A generic handler that will give an achievement for an item. Useful to only write this once, then call it from * all handlers. - * + * * @param aStack - The Itemstack to check for achievements. * @param aPlayer - The player to unlock for. */ diff --git a/src/main/java/gtPlusPlus/core/handler/BookHandler.java b/src/main/java/gtPlusPlus/core/handler/BookHandler.java index 5725c1c710..d030dab591 100644 --- a/src/main/java/gtPlusPlus/core/handler/BookHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/BookHandler.java @@ -9,9 +9,9 @@ import java.util.Map; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.item.ModItems; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -250,34 +250,34 @@ public class BookHandler { "Valid Tiered Machine Casings:" + "\n" + "\n" + "1 - " - + GT_Values.VN[0] + + GTValues.VN[0] + "\n" + "2 - " - + GT_Values.VN[1] + + GTValues.VN[1] + "\n" + "3 - " - + GT_Values.VN[2] + + GTValues.VN[2] + "\n" + "4 - " - + GT_Values.VN[3] + + GTValues.VN[3] + "\n" + "5 - " - + GT_Values.VN[4] + + GTValues.VN[4] + "\n" + "6 - " - + GT_Values.VN[5] + + GTValues.VN[5] + "\n" + "7 - " - + GT_Values.VN[6] + + GTValues.VN[6] + "\n" + "8 - " - + GT_Values.VN[7] + + GTValues.VN[7] + "\n" + "9 - " - + GT_Values.VN[8] + + GTValues.VN[8] + "\n" + "10 - " - + GT_Values.VN[9], + + GTValues.VN[9], // Pipe Casings """ @@ -430,10 +430,10 @@ public class BookHandler { new ItemStack[] { ItemUtils.getSimpleStack(Items.writable_book), ItemUtils.getSimpleStack(Items.lava_bucket) }, ItemBookWritten_ThermalBoiler); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( ItemBookWritten_MultiMachineManual, - GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "Xw", 'X', ItemUtils.getSimpleStack(Items.writable_book) }); RecipeUtils.addShapelessGregtechRecipe( new ItemStack[] { ItemUtils.getSimpleStack(Items.writable_book), @@ -450,8 +450,8 @@ public class BookHandler { 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); + GTOreDictUnificator.registerOre("bookWritten", bookstack); + GTOreDictUnificator.registerOre("craftingBook", bookstack); } } diff --git a/src/main/java/gtPlusPlus/core/handler/BurnableFuelHandler.java b/src/main/java/gtPlusPlus/core/handler/BurnableFuelHandler.java index 8e3377b5f9..9228643bfc 100644 --- a/src/main/java/gtPlusPlus/core/handler/BurnableFuelHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/BurnableFuelHandler.java @@ -5,7 +5,7 @@ import net.minecraft.item.ItemStack; import cpw.mods.fml.common.IFuelHandler; import gtPlusPlus.api.objects.data.Pair; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.minecraft.ItemUtils; public class BurnableFuelHandler implements IFuelHandler { @@ -13,7 +13,7 @@ public class BurnableFuelHandler implements IFuelHandler { @Override public int getBurnTime(ItemStack aStack) { // Iterate over my burnables. - for (Pair temp : CORE.burnables) { + for (Pair temp : GTPPCore.burnables) { int aStackID = Item.getIdFromItem(aStack.getItem()); int burnID = Item.getIdFromItem( temp.getValue() diff --git a/src/main/java/gtPlusPlus/core/handler/COMPAT_HANDLER.java b/src/main/java/gtPlusPlus/core/handler/COMPAT_HANDLER.java deleted file mode 100644 index 8e780c724e..0000000000 --- a/src/main/java/gtPlusPlus/core/handler/COMPAT_HANDLER.java +++ /dev/null @@ -1,311 +0,0 @@ -package gtPlusPlus.core.handler; - -import static gregtech.api.enums.Mods.ExtraUtilities; -import static gregtech.api.enums.Mods.PamsHarvestCraft; -import static gregtech.api.enums.Mods.Thaumcraft; -import static gregtech.api.enums.Mods.Witchery; - -import java.util.LinkedList; -import java.util.Queue; -import java.util.Set; - -import net.minecraft.item.ItemStack; - -import cpw.mods.fml.common.event.FMLLoadCompleteEvent; -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_OreDictUnificator; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.api.objects.minecraft.ItemPackage; -import gtPlusPlus.core.common.compat.COMPAT_ExtraUtils; -import gtPlusPlus.core.common.compat.COMPAT_HarvestCraft; -import gtPlusPlus.core.common.compat.COMPAT_IC2; -import gtPlusPlus.core.common.compat.COMPAT_Thaumcraft; -import gtPlusPlus.core.common.compat.COMPAT_Witchery; -import gtPlusPlus.core.handler.Recipes.LateRegistrationHandler; -import gtPlusPlus.core.handler.Recipes.RegistrationHandler; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.recipe.RECIPES_GREGTECH; -import gtPlusPlus.core.recipe.RECIPES_LaserEngraver; -import gtPlusPlus.core.recipe.ShapedRecipeObject; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.RecipeUtils; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_FluidCanning; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_Recycling; -import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoader_ChemicalSkips; -import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoader_GTNH; -import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoader_GlueLine; -import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoader_Nuclear; -import gtPlusPlus.xmod.gregtech.registration.gregtech.Gregtech4Content; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechAdvancedBoilers; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechAlgaeContent; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechAmazonWarehouse; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechBufferDynamos; -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.GregtechGeothermalThermalGenerator; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechHiAmpTransformer; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialAlloySmelter; -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.GregtechIndustrialChisel; -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.GregtechIndustrialElementDuplicator; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialExtruder; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialFishPond; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialFluidHeater; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialForgeHammer; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialFuelRefinery; -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.GregtechIndustrialPlatePress; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialRockBreaker; -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.GregtechIsaMill; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechLFTR; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechLargeTurbinesAndHeatExchanger; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechMolecularTransformer; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechNuclearSaltProcessingPlant; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechPollutionDevices; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechPowerSubStation; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechQuantumForceTransformer; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRTG; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRedstoneButtonPanel; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRedstoneCircuitBlock; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRedstoneLamp; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRedstoneStrengthDisplay; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRedstoneStrengthScale; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRocketFuelGenerator; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSemiFluidgenerators; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSimpleWasher; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSolarTower; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSteamMultis; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSuperChests; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechThaumcraftDevices; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechThreadedBuffers; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechTieredFluidTanks; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechTreeFarmerTE; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechWaterPump; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechWirelessChargers; - -public class COMPAT_HANDLER { - - public static Queue RemoveRecipeQueue = new LinkedList<>(); - public static Queue AddRecipeQueue = new LinkedList<>(); - public static Boolean areInitItemsLoaded = false; - - public static void registerMyModsOreDictEntries() { - - Logger.INFO("Registering Materials with OreDict."); - // In-house - - for (int i = 1; i <= 10; i++) { - GT_OreDictUnificator.registerOre( - "bufferCore_" + GT_Values.VN[i - 1], - new ItemStack(ItemUtils.getItemFromFQRN("miscutils:item.itemBufferCore" + i))); - } - } - - public static void registerGregtechMachines() { - // Free IDs - /* - * --- 859 to 868 --- 911 to 940 - */ - - new RECIPES_LaserEngraver(); - GregtechEnergyBuffer.run(); - GregtechLFTR.run(); - GregtechNuclearSaltProcessingPlant.run(); - GregtechIndustrialCentrifuge.run(); - GregtechIndustrialCokeOven.run(); - GregtechIndustrialPlatePress.run(); - GregtechRocketFuelGenerator.run(); - GregtechIndustrialElectrolyzer.run(); - GregtechIndustrialMacerator.run(); - GregtechIndustrialWiremill.run(); - GregtechIndustrialMassFabricator.run(); - GregtechWaterPump.run(); - GregtechIndustrialBlastSmelter.run(); - GregtechQuantumForceTransformer.run(); - GregtechPowerSubStation.run(); - GregtechDehydrator.run(); - GregtechAdvancedBoilers.run(); - GregtechPollutionDevices.run(); - GregtechTieredFluidTanks.run(); - GregtechGeothermalThermalGenerator.run(); - Gregtech4Content.run(); - GregtechIndustrialFuelRefinery.run(); - GregtechTreeFarmerTE.run(); - GregtechIndustrialTreeFarm.run(); - GregtechIndustrialSifter.run(); - GregtechSimpleWasher.run(); - GregtechRTG.run(); - GregtechCyclotron.run(); - GregtechHiAmpTransformer.run(); - GregtechIndustrialThermalCentrifuge.run(); - GregtechIndustrialWashPlant.run(); - GregtechSemiFluidgenerators.run(); - GregtechWirelessChargers.run(); - GregtechIndustrialCuttingFactory.run(); - GregtechSuperChests.run(); - GregtechIndustrialFishPond.run(); - GregtechIndustrialExtruder.run(); - GregtechIndustrialMultiMachine.run(); - GregtechBufferDynamos.run(); - GregtechAmazonWarehouse.run(); - GregtechFactoryGradeReplacementMultis.run(); - GregtechThaumcraftDevices.run(); - GregtechThreadedBuffers.run(); - GregtechIndustrialMixer.run(); - GregtechCustomHatches.run(); - GregtechIndustrialArcFurnace.run(); - GregtechSolarTower.run(); - GregtechLargeTurbinesAndHeatExchanger.run(); - GregtechAlgaeContent.run(); - GregtechIndustrialAlloySmelter.run(); - GregtechIsaMill.run(); - GregtechSteamMultis.run(); - GregtechIndustrialForgeHammer.run(); - GregtechMolecularTransformer.run(); - GregtechIndustrialElementDuplicator.run(); - GregtechIndustrialRockBreaker.run(); - GregtechIndustrialChisel.run(); - GregtechIndustrialFluidHeater.run(); - GregtechRedstoneButtonPanel.run(); - GregtechRedstoneCircuitBlock.run(); - GregtechRedstoneLamp.run(); - GregtechRedstoneStrengthDisplay.run(); - GregtechRedstoneStrengthScale.run(); - } - - // InterMod - public static void intermodOreDictionarySupport() { - if (Thaumcraft.isModLoaded()) { - COMPAT_Thaumcraft.OreDict(); - } - if (ExtraUtilities.isModLoaded()) { - COMPAT_ExtraUtils.OreDict(); - } - if (PamsHarvestCraft.isModLoaded()) { - COMPAT_HarvestCraft.OreDict(); - } - COMPAT_IC2.OreDict(); - if (Witchery.isModLoaded()) { - COMPAT_Witchery.OreDict(); - } - } - - public static void RemoveRecipesFromOtherMods() { - // Removal of Recipes - for (final Object item : RemoveRecipeQueue) { - RecipeUtils.removeCraftingRecipe(item); - } - } - - public static void InitialiseHandlerThenAddRecipes() { - RegistrationHandler.run(); - } - - public static void InitialiseLateHandlerThenAddRecipes() { - LateRegistrationHandler.run(); - } - - public static void startLoadingGregAPIBasedRecipes() { - // Add hand-made recipes - RECIPES_GREGTECH.run(); - RecipeLoader_GTNH.generate(); - RecipeLoader_Nuclear.generate(); - RecipeLoader_GlueLine.generate(); - RecipeLoader_ChemicalSkips.generate(); - // Add autogenerated Recipes from Item Components - for (Set> m : MaterialGenerator.mRecipeMapsToGenerate) { - for (RunnableWithInfo r : m) { - try { - r.run(); - Logger.INFO( - "[FIND] " + r.getInfoData() - .getLocalizedName() + " recipes generated."); - } catch (Throwable t) { - t.printStackTrace(); - Logger.INFO( - "[ERROR] " + r.getInfoData() - .getLocalizedName() + " recipes failed to generated."); - } - } - } - RecipeGen_Recycling.executeGenerators(); - runQueuedMisc(); - - // Do Fluid Canning Last, because they're not executed on demand, but rather queued. - RecipeGen_FluidCanning.init(); - } - - public static void onLoadComplete(FMLLoadCompleteEvent event) { - runQueuedOnLoadComplete(event); - } - - public static final AutoMap> mRecipesToGenerate = new AutoMap<>(); - public static final AutoMap> mGtRecipesToGenerate = new AutoMap<>(); - - public static final AutoMap> mObjectsToRunInPostInit = new AutoMap<>(); - public static final AutoMap mObjectsToRunInOnLoadComplete = new AutoMap<>(); - - public static void runQueuedRecipes() { - // Add autogenerated Recipes from Item Components - for (RunnableWithInfo m : mRecipesToGenerate) { - try { - m.run(); - } catch (Throwable t) { - t.printStackTrace(); - Logger.INFO("[ERROR] " + m.getInfoData() + " recipe failed to generated."); - } - } - for (RunnableWithInfo m : mGtRecipesToGenerate) { - try { - m.run(); - } catch (Throwable t) { - t.printStackTrace(); - Logger.INFO("[ERROR] " + m.getInfoData() + " recipe failed to generated."); - } - } - } - - public static void runQueuedMisc() { - for (RunnableWithInfo m : mObjectsToRunInPostInit) { - try { - m.run(); - } catch (Throwable t) { - t.printStackTrace(); - Logger.INFO("[ERROR] " + m.getInfoData()); - } - } - } - - /** - * Generally used to register GT recipe map changes after they've been populated. - */ - public static void runQueuedOnLoadComplete(FMLLoadCompleteEvent event) { - for (ItemPackage m : mObjectsToRunInOnLoadComplete) { - try { - m.onLoadComplete(event); - } catch (Throwable t) { - t.printStackTrace(); - Logger.INFO("[ERROR] " + m.getInfoData()); - } - } - } -} diff --git a/src/main/java/gtPlusPlus/core/handler/COMPAT_IntermodStaging.java b/src/main/java/gtPlusPlus/core/handler/COMPAT_IntermodStaging.java deleted file mode 100644 index af09762c08..0000000000 --- a/src/main/java/gtPlusPlus/core/handler/COMPAT_IntermodStaging.java +++ /dev/null @@ -1,50 +0,0 @@ -package gtPlusPlus.core.handler; - -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 gtPlusPlus.recipes.RecipeRemovals; -import gtPlusPlus.xmod.bartcrops.HANDLER_CropsPlusPlus; -import gtPlusPlus.xmod.bop.HANDLER_BiomesOPlenty; -import gtPlusPlus.xmod.forestry.HANDLER_FR; -import gtPlusPlus.xmod.gregtech.HANDLER_GT; -import gtPlusPlus.xmod.ic2.HANDLER_IC2; -import gtPlusPlus.xmod.railcraft.HANDLER_Railcraft; -import gtPlusPlus.xmod.thermalfoundation.HANDLER_TF; -import gtPlusPlus.xmod.tinkers.HANDLER_Tinkers; - -public class COMPAT_IntermodStaging { - - public static void preInit(FMLPreInitializationEvent preinit) { - HANDLER_GT.preInit(); - HANDLER_TF.preInit(); - HANDLER_FR.preInit(); - HANDLER_IC2.preInit(); - HANDLER_BiomesOPlenty.preInit(); - HANDLER_CropsPlusPlus.preInit(preinit); - HANDLER_Railcraft.preInit(); - } - - public static void init(FMLInitializationEvent init) { - HANDLER_GT.init(); - HANDLER_TF.init(); - } - - public static void postInit(FMLPostInitializationEvent postinit) { - HANDLER_GT.postInit(); - HANDLER_TF.postInit(); - HANDLER_FR.postInit(); - HANDLER_IC2.postInit(); - HANDLER_BiomesOPlenty.postInit(); - HANDLER_Tinkers.postInit(); - HANDLER_CropsPlusPlus.postInit(postinit); - HANDLER_Railcraft.postInit(); - RecipeRemovals.postInit(); - } - - public static void onLoadComplete(FMLLoadCompleteEvent event) { - HANDLER_GT.onLoadComplete(event); - RecipeRemovals.onLoadComplete(); - } -} diff --git a/src/main/java/gtPlusPlus/core/handler/CompatHandler.java b/src/main/java/gtPlusPlus/core/handler/CompatHandler.java new file mode 100644 index 0000000000..83426c18c4 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/handler/CompatHandler.java @@ -0,0 +1,311 @@ +package gtPlusPlus.core.handler; + +import static gregtech.api.enums.Mods.ExtraUtilities; +import static gregtech.api.enums.Mods.PamsHarvestCraft; +import static gregtech.api.enums.Mods.Thaumcraft; +import static gregtech.api.enums.Mods.Witchery; + +import java.util.LinkedList; +import java.util.Queue; +import java.util.Set; + +import net.minecraft.item.ItemStack; + +import cpw.mods.fml.common.event.FMLLoadCompleteEvent; +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTOreDictUnificator; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.api.objects.minecraft.ItemPackage; +import gtPlusPlus.core.common.compat.CompatExtraUtils; +import gtPlusPlus.core.common.compat.CompatHarvestCraft; +import gtPlusPlus.core.common.compat.CompatIC2; +import gtPlusPlus.core.common.compat.CompatThaumcraft; +import gtPlusPlus.core.common.compat.CompatWitchery; +import gtPlusPlus.core.handler.Recipes.LateRegistrationHandler; +import gtPlusPlus.core.handler.Recipes.RegistrationHandler; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.recipe.RecipesGregTech; +import gtPlusPlus.core.recipe.RecipesLaserEngraver; +import gtPlusPlus.core.recipe.ShapedRecipeObject; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.RecipeUtils; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenFluidCanning; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenRecycling; +import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoaderChemicalSkips; +import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoaderGTNH; +import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoaderGlueLine; +import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoaderNuclear; +import gtPlusPlus.xmod.gregtech.registration.gregtech.Gregtech4Content; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechAdvancedBoilers; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechAlgaeContent; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechAmazonWarehouse; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechBufferDynamos; +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.GregtechGeothermalThermalGenerator; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechHiAmpTransformer; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialAlloySmelter; +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.GregtechIndustrialChisel; +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.GregtechIndustrialElementDuplicator; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialExtruder; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialFishPond; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialFluidHeater; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialForgeHammer; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialFuelRefinery; +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.GregtechIndustrialPlatePress; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechIndustrialRockBreaker; +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.GregtechIsaMill; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechLFTR; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechLargeTurbinesAndHeatExchanger; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechMolecularTransformer; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechNuclearSaltProcessingPlant; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechPollutionDevices; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechPowerSubStation; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechQuantumForceTransformer; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRTG; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRedstoneButtonPanel; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRedstoneCircuitBlock; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRedstoneLamp; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRedstoneStrengthDisplay; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRedstoneStrengthScale; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechRocketFuelGenerator; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSemiFluidgenerators; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSimpleWasher; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSolarTower; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSteamMultis; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechSuperChests; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechThaumcraftDevices; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechThreadedBuffers; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechTieredFluidTanks; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechTreeFarmerTE; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechWaterPump; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechWirelessChargers; + +public class CompatHandler { + + public static Queue RemoveRecipeQueue = new LinkedList<>(); + public static Queue AddRecipeQueue = new LinkedList<>(); + public static Boolean areInitItemsLoaded = false; + + public static void registerMyModsOreDictEntries() { + + Logger.INFO("Registering Materials with OreDict."); + // In-house + + for (int i = 1; i <= 10; i++) { + GTOreDictUnificator.registerOre( + "bufferCore_" + GTValues.VN[i - 1], + new ItemStack(ItemUtils.getItemFromFQRN("miscutils:item.itemBufferCore" + i))); + } + } + + public static void registerGregtechMachines() { + // Free IDs + /* + * --- 859 to 868 --- 911 to 940 + */ + + new RecipesLaserEngraver(); + GregtechEnergyBuffer.run(); + GregtechLFTR.run(); + GregtechNuclearSaltProcessingPlant.run(); + GregtechIndustrialCentrifuge.run(); + GregtechIndustrialCokeOven.run(); + GregtechIndustrialPlatePress.run(); + GregtechRocketFuelGenerator.run(); + GregtechIndustrialElectrolyzer.run(); + GregtechIndustrialMacerator.run(); + GregtechIndustrialWiremill.run(); + GregtechIndustrialMassFabricator.run(); + GregtechWaterPump.run(); + GregtechIndustrialBlastSmelter.run(); + GregtechQuantumForceTransformer.run(); + GregtechPowerSubStation.run(); + GregtechDehydrator.run(); + GregtechAdvancedBoilers.run(); + GregtechPollutionDevices.run(); + GregtechTieredFluidTanks.run(); + GregtechGeothermalThermalGenerator.run(); + Gregtech4Content.run(); + GregtechIndustrialFuelRefinery.run(); + GregtechTreeFarmerTE.run(); + GregtechIndustrialTreeFarm.run(); + GregtechIndustrialSifter.run(); + GregtechSimpleWasher.run(); + GregtechRTG.run(); + GregtechCyclotron.run(); + GregtechHiAmpTransformer.run(); + GregtechIndustrialThermalCentrifuge.run(); + GregtechIndustrialWashPlant.run(); + GregtechSemiFluidgenerators.run(); + GregtechWirelessChargers.run(); + GregtechIndustrialCuttingFactory.run(); + GregtechSuperChests.run(); + GregtechIndustrialFishPond.run(); + GregtechIndustrialExtruder.run(); + GregtechIndustrialMultiMachine.run(); + GregtechBufferDynamos.run(); + GregtechAmazonWarehouse.run(); + GregtechFactoryGradeReplacementMultis.run(); + GregtechThaumcraftDevices.run(); + GregtechThreadedBuffers.run(); + GregtechIndustrialMixer.run(); + GregtechCustomHatches.run(); + GregtechIndustrialArcFurnace.run(); + GregtechSolarTower.run(); + GregtechLargeTurbinesAndHeatExchanger.run(); + GregtechAlgaeContent.run(); + GregtechIndustrialAlloySmelter.run(); + GregtechIsaMill.run(); + GregtechSteamMultis.run(); + GregtechIndustrialForgeHammer.run(); + GregtechMolecularTransformer.run(); + GregtechIndustrialElementDuplicator.run(); + GregtechIndustrialRockBreaker.run(); + GregtechIndustrialChisel.run(); + GregtechIndustrialFluidHeater.run(); + GregtechRedstoneButtonPanel.run(); + GregtechRedstoneCircuitBlock.run(); + GregtechRedstoneLamp.run(); + GregtechRedstoneStrengthDisplay.run(); + GregtechRedstoneStrengthScale.run(); + } + + // InterMod + public static void intermodOreDictionarySupport() { + if (Thaumcraft.isModLoaded()) { + CompatThaumcraft.OreDict(); + } + if (ExtraUtilities.isModLoaded()) { + CompatExtraUtils.OreDict(); + } + if (PamsHarvestCraft.isModLoaded()) { + CompatHarvestCraft.OreDict(); + } + CompatIC2.OreDict(); + if (Witchery.isModLoaded()) { + CompatWitchery.OreDict(); + } + } + + public static void RemoveRecipesFromOtherMods() { + // Removal of Recipes + for (final Object item : RemoveRecipeQueue) { + RecipeUtils.removeCraftingRecipe(item); + } + } + + public static void InitialiseHandlerThenAddRecipes() { + RegistrationHandler.run(); + } + + public static void InitialiseLateHandlerThenAddRecipes() { + LateRegistrationHandler.run(); + } + + public static void startLoadingGregAPIBasedRecipes() { + // Add hand-made recipes + RecipesGregTech.run(); + RecipeLoaderGTNH.generate(); + RecipeLoaderNuclear.generate(); + RecipeLoaderGlueLine.generate(); + RecipeLoaderChemicalSkips.generate(); + // Add autogenerated Recipes from Item Components + for (Set> m : MaterialGenerator.mRecipeMapsToGenerate) { + for (RunnableWithInfo r : m) { + try { + r.run(); + Logger.INFO( + "[FIND] " + r.getInfoData() + .getLocalizedName() + " recipes generated."); + } catch (Throwable t) { + t.printStackTrace(); + Logger.INFO( + "[ERROR] " + r.getInfoData() + .getLocalizedName() + " recipes failed to generated."); + } + } + } + RecipeGenRecycling.executeGenerators(); + runQueuedMisc(); + + // Do Fluid Canning Last, because they're not executed on demand, but rather queued. + RecipeGenFluidCanning.init(); + } + + public static void onLoadComplete(FMLLoadCompleteEvent event) { + runQueuedOnLoadComplete(event); + } + + public static final AutoMap> mRecipesToGenerate = new AutoMap<>(); + public static final AutoMap> mGtRecipesToGenerate = new AutoMap<>(); + + public static final AutoMap> mObjectsToRunInPostInit = new AutoMap<>(); + public static final AutoMap mObjectsToRunInOnLoadComplete = new AutoMap<>(); + + public static void runQueuedRecipes() { + // Add autogenerated Recipes from Item Components + for (RunnableWithInfo m : mRecipesToGenerate) { + try { + m.run(); + } catch (Throwable t) { + t.printStackTrace(); + Logger.INFO("[ERROR] " + m.getInfoData() + " recipe failed to generated."); + } + } + for (RunnableWithInfo m : mGtRecipesToGenerate) { + try { + m.run(); + } catch (Throwable t) { + t.printStackTrace(); + Logger.INFO("[ERROR] " + m.getInfoData() + " recipe failed to generated."); + } + } + } + + public static void runQueuedMisc() { + for (RunnableWithInfo m : mObjectsToRunInPostInit) { + try { + m.run(); + } catch (Throwable t) { + t.printStackTrace(); + Logger.INFO("[ERROR] " + m.getInfoData()); + } + } + } + + /** + * Generally used to register GT recipe map changes after they've been populated. + */ + public static void runQueuedOnLoadComplete(FMLLoadCompleteEvent event) { + for (ItemPackage m : mObjectsToRunInOnLoadComplete) { + try { + m.onLoadComplete(event); + } catch (Throwable t) { + t.printStackTrace(); + Logger.INFO("[ERROR] " + m.getInfoData()); + } + } + } +} diff --git a/src/main/java/gtPlusPlus/core/handler/CompatIntermodStaging.java b/src/main/java/gtPlusPlus/core/handler/CompatIntermodStaging.java new file mode 100644 index 0000000000..7d08318c55 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/handler/CompatIntermodStaging.java @@ -0,0 +1,50 @@ +package gtPlusPlus.core.handler; + +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 gtPlusPlus.recipes.RecipeRemovals; +import gtPlusPlus.xmod.bartcrops.CropsPlusPlusHandler; +import gtPlusPlus.xmod.bop.BiomesOPlentyHandler; +import gtPlusPlus.xmod.forestry.ForestryHandler; +import gtPlusPlus.xmod.gregtech.HandlerGT; +import gtPlusPlus.xmod.ic2.HandlerIC2; +import gtPlusPlus.xmod.railcraft.HandlerRailcraft; +import gtPlusPlus.xmod.thermalfoundation.HandlerTF; +import gtPlusPlus.xmod.tinkers.HandlerTinkers; + +public class CompatIntermodStaging { + + public static void preInit(FMLPreInitializationEvent preinit) { + HandlerGT.preInit(); + HandlerTF.preInit(); + ForestryHandler.preInit(); + HandlerIC2.preInit(); + BiomesOPlentyHandler.preInit(); + CropsPlusPlusHandler.preInit(preinit); + HandlerRailcraft.preInit(); + } + + public static void init(FMLInitializationEvent init) { + HandlerGT.init(); + HandlerTF.init(); + } + + public static void postInit(FMLPostInitializationEvent postinit) { + HandlerGT.postInit(); + HandlerTF.postInit(); + ForestryHandler.postInit(); + HandlerIC2.postInit(); + BiomesOPlentyHandler.postInit(); + HandlerTinkers.postInit(); + CropsPlusPlusHandler.postInit(postinit); + HandlerRailcraft.postInit(); + RecipeRemovals.postInit(); + } + + public static void onLoadComplete(FMLLoadCompleteEvent event) { + HandlerGT.onLoadComplete(event); + RecipeRemovals.onLoadComplete(); + } +} diff --git a/src/main/java/gtPlusPlus/core/handler/GuiHandler.java b/src/main/java/gtPlusPlus/core/handler/GuiHandler.java index 4509fbea04..4479fa8add 100644 --- a/src/main/java/gtPlusPlus/core/handler/GuiHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/GuiHandler.java @@ -9,21 +9,21 @@ import cpw.mods.fml.common.network.IGuiHandler; 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_CircuitProgrammer; -import gtPlusPlus.core.container.Container_FishTrap; -import gtPlusPlus.core.container.Container_PestKiller; -import gtPlusPlus.core.container.Container_ProjectTable; -import gtPlusPlus.core.container.Container_SuperJukebox; -import gtPlusPlus.core.container.Container_VolumetricFlaskSetter; -import gtPlusPlus.core.gui.beta.Gui_ID_Registry; -import gtPlusPlus.core.gui.beta.MU_GuiId; -import gtPlusPlus.core.gui.machine.GUI_CircuitProgrammer; -import gtPlusPlus.core.gui.machine.GUI_FishTrap; -import gtPlusPlus.core.gui.machine.GUI_PestKiller; -import gtPlusPlus.core.gui.machine.GUI_ProjectTable; -import gtPlusPlus.core.gui.machine.GUI_SuperJukebox; -import gtPlusPlus.core.gui.machine.GUI_VolumetricFlaskSetter; +import gtPlusPlus.core.block.machine.BlockSuperJukebox.TileEntitySuperJukebox; +import gtPlusPlus.core.container.ContainerCircuitProgrammer; +import gtPlusPlus.core.container.ContainerFishTrap; +import gtPlusPlus.core.container.ContainerPestKiller; +import gtPlusPlus.core.container.ContainerProjectTable; +import gtPlusPlus.core.container.ContainerSuperJukebox; +import gtPlusPlus.core.container.ContainerVolumetricFlaskSetter; +import gtPlusPlus.core.gui.beta.GUIIDRegistry; +import gtPlusPlus.core.gui.beta.MUGuild; +import gtPlusPlus.core.gui.machine.GUICircuitProgrammer; +import gtPlusPlus.core.gui.machine.GUIFishTrap; +import gtPlusPlus.core.gui.machine.GUIPestKiller; +import gtPlusPlus.core.gui.machine.GUIProjectTable; +import gtPlusPlus.core.gui.machine.GUISuperJukebox; +import gtPlusPlus.core.gui.machine.GUIVolumetricFlaskSetter; import gtPlusPlus.core.interfaces.IGuiManager; import gtPlusPlus.core.tileentities.general.TileEntityCircuitProgrammer; import gtPlusPlus.core.tileentities.general.TileEntityFishTrap; @@ -63,7 +63,7 @@ public class GuiHandler implements IGuiHandler { if (te != null) { if (ID == GUI1) { - return new Container_ProjectTable(player.inventory, (TileEntityProjectTable) te); + return new ContainerProjectTable(player.inventory, (TileEntityProjectTable) te); } else if (ID == GUI2) {} } @@ -72,15 +72,15 @@ public class GuiHandler implements IGuiHandler { Logger.INFO("sad"); // return new Container_WorkbenchAdvanced(player.inventory, (TileEntityWorkbenchAdvanced) te); } else if (ID == GUI6) { - return new Container_FishTrap(player.inventory, (TileEntityFishTrap) te); + return new ContainerFishTrap(player.inventory, (TileEntityFishTrap) te); } else if (ID == GUI8) { - return new Container_CircuitProgrammer(player.inventory, (TileEntityCircuitProgrammer) te); + return new ContainerCircuitProgrammer(player.inventory, (TileEntityCircuitProgrammer) te); } else if (ID == GUI14) { - return new Container_SuperJukebox(player.inventory, (TileEntitySuperJukebox) te); + return new ContainerSuperJukebox(player.inventory, (TileEntitySuperJukebox) te); } else if (ID == GUI15) { - return new Container_PestKiller(player.inventory, (TileEntityPestKiller) te); + return new ContainerPestKiller(player.inventory, (TileEntityPestKiller) te); } else if (ID == GUI18) { - return new Container_VolumetricFlaskSetter(player.inventory, (TileEntityVolumetricFlaskSetter) te); + return new ContainerVolumetricFlaskSetter(player.inventory, (TileEntityVolumetricFlaskSetter) te); } } @@ -104,22 +104,22 @@ public class GuiHandler implements IGuiHandler { final TileEntity te = world.getTileEntity(x, y, z); if (te != null) { if (ID == GUI1) { - return new GUI_ProjectTable(player.inventory, (TileEntityProjectTable) te); + return new GUIProjectTable(player.inventory, (TileEntityProjectTable) te); } } if (te != null) { if (ID == GUI6) { - return new GUI_FishTrap(player.inventory, (TileEntityFishTrap) te); + return new GUIFishTrap(player.inventory, (TileEntityFishTrap) te); } else if (ID == GUI8) { - return new GUI_CircuitProgrammer(player.inventory, (TileEntityCircuitProgrammer) te); + return new GUICircuitProgrammer(player.inventory, (TileEntityCircuitProgrammer) te); } else if (ID == GUI14) { - return new GUI_SuperJukebox(player.inventory, (TileEntitySuperJukebox) te); + return new GUISuperJukebox(player.inventory, (TileEntitySuperJukebox) te); } else if (ID == GUI15) { - return new GUI_PestKiller(player.inventory, (TileEntityPestKiller) te); + return new GUIPestKiller(player.inventory, (TileEntityPestKiller) te); } else if (ID == GUI18) { - return new GUI_VolumetricFlaskSetter( - new Container_VolumetricFlaskSetter(player.inventory, (TileEntityVolumetricFlaskSetter) te)); + return new GUIVolumetricFlaskSetter( + new ContainerVolumetricFlaskSetter(player.inventory, (TileEntityVolumetricFlaskSetter) te)); } } @@ -144,7 +144,7 @@ public class GuiHandler implements IGuiHandler { } private static int encodeGuiData(final IGuiManager guiHandler, final short data) { - final MU_GuiId guiId = Gui_ID_Registry.getGuiIdForGuiHandler(guiHandler); + final MUGuild guiId = GUIIDRegistry.getGuiIdForGuiHandler(guiHandler); return (data << 16) | guiId.getId(); } diff --git a/src/main/java/gtPlusPlus/core/handler/PacketHandler.java b/src/main/java/gtPlusPlus/core/handler/PacketHandler.java index af6a376f1a..735d381706 100644 --- a/src/main/java/gtPlusPlus/core/handler/PacketHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/PacketHandler.java @@ -12,8 +12,8 @@ import cpw.mods.fml.relauncher.Side; import gtPlusPlus.api.objects.Logger; 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.network.packet.PacketVolumetricFlaskGui; +import gtPlusPlus.core.network.packet.PacketVolumetricFlaskGui2; import gtPlusPlus.core.util.reflect.ReflectionUtils; public class PacketHandler { @@ -23,8 +23,8 @@ public class PacketHandler { private static final SimpleNetworkWrapper INSTANCE = NetworkRegistry.INSTANCE.newSimpleChannel(GTPlusPlus.ID); public static final void init() { - registerMessage(Packet_VolumetricFlaskGui.class, Packet_VolumetricFlaskGui.class); - registerMessage(Packet_VolumetricFlaskGui2.class, Packet_VolumetricFlaskGui2.class); + registerMessage(PacketVolumetricFlaskGui.class, PacketVolumetricFlaskGui.class); + registerMessage(PacketVolumetricFlaskGui2.class, PacketVolumetricFlaskGui2.class); } /** diff --git a/src/main/java/gtPlusPlus/core/handler/Recipes/DecayableRecipe.java b/src/main/java/gtPlusPlus/core/handler/Recipes/DecayableRecipe.java index e50a76d5d5..769973f617 100644 --- a/src/main/java/gtPlusPlus/core/handler/Recipes/DecayableRecipe.java +++ b/src/main/java/gtPlusPlus/core/handler/Recipes/DecayableRecipe.java @@ -2,7 +2,7 @@ package gtPlusPlus.core.handler.Recipes; import net.minecraft.item.ItemStack; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -24,8 +24,8 @@ public class DecayableRecipe { @Override public boolean equals(Object o) { if (o instanceof DecayableRecipe i) { - if (i.mTime == this.mTime && GT_Utility.areStacksEqual(mInput, i.mInput) - && GT_Utility.areStacksEqual(mOutput, i.mOutput)) { + if (i.mTime == this.mTime && GTUtility.areStacksEqual(mInput, i.mInput) + && GTUtility.areStacksEqual(mOutput, i.mOutput)) { return true; } } diff --git a/src/main/java/gtPlusPlus/core/handler/Recipes/LateRegistrationHandler.java b/src/main/java/gtPlusPlus/core/handler/Recipes/LateRegistrationHandler.java index 9eb3a1826e..aa83b3bcca 100644 --- a/src/main/java/gtPlusPlus/core/handler/Recipes/LateRegistrationHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/Recipes/LateRegistrationHandler.java @@ -1,7 +1,7 @@ package gtPlusPlus.core.handler.Recipes; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.handler.COMPAT_HANDLER; +import gtPlusPlus.core.handler.CompatHandler; import gtPlusPlus.core.recipe.ShapedRecipeObject; public class LateRegistrationHandler { @@ -14,7 +14,7 @@ public class LateRegistrationHandler { } private static void init() { - for (final ShapedRecipeObject item : COMPAT_HANDLER.AddRecipeQueue) { + for (final ShapedRecipeObject item : CompatHandler.AddRecipeQueue) { item.buildRecipe(); } try { diff --git a/src/main/java/gtPlusPlus/core/handler/Recipes/RegistrationHandler.java b/src/main/java/gtPlusPlus/core/handler/Recipes/RegistrationHandler.java index abf7300f7a..437e3ea0c3 100644 --- a/src/main/java/gtPlusPlus/core/handler/Recipes/RegistrationHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/Recipes/RegistrationHandler.java @@ -1,10 +1,10 @@ package gtPlusPlus.core.handler.Recipes; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.handler.COMPAT_HANDLER; -import gtPlusPlus.core.recipe.RECIPES_General; -import gtPlusPlus.core.recipe.RECIPES_Machines; -import gtPlusPlus.core.recipe.RECIPE_Batteries; +import gtPlusPlus.core.handler.CompatHandler; +import gtPlusPlus.core.recipe.RecipesBatteries; +import gtPlusPlus.core.recipe.RecipesGeneral; +import gtPlusPlus.core.recipe.RecipesMachines; public class RegistrationHandler { @@ -16,10 +16,10 @@ public class RegistrationHandler { } private static void init() { - RECIPES_General.loadRecipes(); - RECIPES_Machines.loadRecipes(); - RECIPE_Batteries.loadRecipes(); + RecipesGeneral.loadRecipes(); + RecipesMachines.loadRecipes(); + RecipesBatteries.loadRecipes(); Logger.INFO("Loaded: " + recipesSuccess + " Failed: " + recipesFailed); - COMPAT_HANDLER.areInitItemsLoaded = true; + CompatHandler.areInitItemsLoaded = true; } } diff --git a/src/main/java/gtPlusPlus/core/handler/events/EnderDragonDeathHandler.java b/src/main/java/gtPlusPlus/core/handler/events/EnderDragonDeathHandler.java index 07b027faa1..008f0db0d4 100644 --- a/src/main/java/gtPlusPlus/core/handler/events/EnderDragonDeathHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/events/EnderDragonDeathHandler.java @@ -4,7 +4,7 @@ import net.minecraft.entity.boss.EntityDragon; import net.minecraftforge.event.entity.living.LivingDropsEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import gtPlusPlus.core.material.ELEMENT; +import gtPlusPlus.core.material.MaterialsElements; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.PlayerUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; @@ -34,22 +34,25 @@ public class EnderDragonDeathHandler { if (mHEE && mHardcoreDragonClass != null && mHardcoreDragonClass.isInstance(event.entityLiving)) { for (int y = 0; y < MathUtils.randInt(100, 250); y++) { int aAmount = MathUtils.randInt(5, 25); - event.entityLiving - .entityDropItem(ELEMENT.STANDALONE.DRAGON_METAL.getNugget(aAmount), MathUtils.randFloat(0, 1)); + event.entityLiving.entityDropItem( + MaterialsElements.STANDALONE.DRAGON_METAL.getNugget(aAmount), + MathUtils.randFloat(0, 1)); aCountTotal = +aAmount; } } else if (mDE && mChaoseDragonClass != null && mChaoseDragonClass.isInstance(event.entityLiving)) { for (int y = 0; y < MathUtils.randInt(100, 200); y++) { int aAmount = MathUtils.randInt(1, 5); - event.entityLiving - .entityDropItem(ELEMENT.STANDALONE.DRAGON_METAL.getIngot(aAmount), MathUtils.randFloat(0, 1)); + event.entityLiving.entityDropItem( + MaterialsElements.STANDALONE.DRAGON_METAL.getIngot(aAmount), + MathUtils.randFloat(0, 1)); aCountTotal = +aAmount; } } else if (event.entityLiving instanceof EntityDragon) { for (int y = 0; y < MathUtils.randInt(25, 50); y++) { int aAmount = MathUtils.randInt(1, 10); - event.entityLiving - .entityDropItem(ELEMENT.STANDALONE.DRAGON_METAL.getNugget(aAmount), MathUtils.randFloat(0, 1)); + event.entityLiving.entityDropItem( + MaterialsElements.STANDALONE.DRAGON_METAL.getNugget(aAmount), + MathUtils.randFloat(0, 1)); aCountTotal = +aAmount; } } diff --git a/src/main/java/gtPlusPlus/core/handler/events/PlayerSleepEventHandler.java b/src/main/java/gtPlusPlus/core/handler/events/PlayerSleepEventHandler.java index 0ca315cc72..b01d9d6190 100644 --- a/src/main/java/gtPlusPlus/core/handler/events/PlayerSleepEventHandler.java +++ b/src/main/java/gtPlusPlus/core/handler/events/PlayerSleepEventHandler.java @@ -18,12 +18,12 @@ import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.PlayerUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.preloader.PreloaderCore; public class PlayerSleepEventHandler { private static Field sEffectDuration = ReflectionUtils - .getField(PotionEffect.class, !CORE_Preloader.DEV_ENVIRONMENT ? "field_76460_b" : "duration"); + .getField(PotionEffect.class, !PreloaderCore.DEV_ENVIRONMENT ? "field_76460_b" : "duration"); private static ArrayList sPositiveEffects = new ArrayList<>(); private static ArrayList sNegativeEffects = new ArrayList<>(); diff --git a/src/main/java/gtPlusPlus/core/handler/workbench/WorkbenchCraftingHandler.java b/src/main/java/gtPlusPlus/core/handler/workbench/WorkbenchCraftingHandler.java new file mode 100644 index 0000000000..1d8b2ed68d --- /dev/null +++ b/src/main/java/gtPlusPlus/core/handler/workbench/WorkbenchCraftingHandler.java @@ -0,0 +1,161 @@ +package gtPlusPlus.core.handler.workbench; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.IRecipe; +import net.minecraft.item.crafting.ShapedRecipes; +import net.minecraft.item.crafting.ShapelessRecipes; +import net.minecraft.world.World; + +public class WorkbenchCraftingHandler { + + private static final WorkbenchCraftingHandler instance = new WorkbenchCraftingHandler(); + private final List recipes = new ArrayList<>(); + + public static final WorkbenchCraftingHandler getInstance() { + return instance; + } + + public WorkbenchCraftingHandler() { + + // just a example recipe so you know how to add them + this.addRecipe( + new ItemStack(Blocks.iron_block), + new Object[] { "###", "###", "###", Character.valueOf('#'), Items.iron_ingot }); + + // another example Recipe, but shapeless + this.addShapelessRecipe(new ItemStack(Items.cake), new Object[] { Items.stick }); + } + + void addRecipe(final ItemStack par1ItemStack, final Object par2ArrayOfObj[]) { + String s = ""; + int i = 0; + int j = 0; + int k = 0; + + if (par2ArrayOfObj[i] instanceof String[]) { + final String as[] = (String[]) par2ArrayOfObj[i++]; + + for (final String s2 : as) { + k++; + j = s2.length(); + s = (new StringBuilder()).append(s) + .append(s2) + .toString(); + } + } else { + while (par2ArrayOfObj[i] instanceof String) { + final String s1 = (String) par2ArrayOfObj[i++]; + k++; + j = s1.length(); + s = (new StringBuilder()).append(s) + .append(s1) + .toString(); + } + } + + final HashMap hashmap = new HashMap<>(); + + for (; i < par2ArrayOfObj.length; i += 2) { + final Character character = (Character) par2ArrayOfObj[i]; + ItemStack itemstack = null; + + if (par2ArrayOfObj[i + 1] instanceof Item) { + itemstack = new ItemStack((Item) par2ArrayOfObj[i + 1]); + } else if (par2ArrayOfObj[i + 1] instanceof Block) { + itemstack = new ItemStack((Block) par2ArrayOfObj[i + 1], 1, -1); + } else if (par2ArrayOfObj[i + 1] instanceof ItemStack) { + itemstack = (ItemStack) par2ArrayOfObj[i + 1]; + } + + hashmap.put(character, itemstack); + } + + final ItemStack aitemstack[] = new ItemStack[j * k]; + + for (int i1 = 0; i1 < (j * k); i1++) { + final char c = s.charAt(i1); + + if (hashmap.containsKey(Character.valueOf(c))) { + aitemstack[i1] = hashmap.get(Character.valueOf(c)) + .copy(); + } else { + aitemstack[i1] = null; + } + } + + this.recipes.add(new ShapedRecipes(j, k, aitemstack, par1ItemStack)); + } + + public void addShapelessRecipe(final ItemStack par1ItemStack, final Object par2ArrayOfObj[]) { + final ArrayList arraylist = new ArrayList<>(); + final Object aobj[] = par2ArrayOfObj; + final int i = aobj.length; + + for (final Object obj : aobj) { + if (obj instanceof ItemStack) { + arraylist.add(((ItemStack) obj).copy()); + continue; + } + + if (obj instanceof Item) { + arraylist.add(new ItemStack((Item) obj)); + continue; + } + + if (obj instanceof Block) { + arraylist.add(new ItemStack((Block) obj)); + } else { + throw new RuntimeException("Invalid shapeless recipe!"); + } + } + + this.recipes.add(new ShapelessRecipes(par1ItemStack, arraylist)); + } + + public ItemStack findMatchingRecipe(final InventoryCrafting par1InventoryCrafting, final World par2World) { + int i = 0; + for (int j = 0; j < par1InventoryCrafting.getSizeInventory(); j++) { + final ItemStack itemstack2 = par1InventoryCrafting.getStackInSlot(j); + + if (itemstack2 == null) { + continue; + } + + if (i == 0) {} + + if (i == 1) {} + + i++; + } + + // TODO - Update from itemIDs + /* + * if (i == 2 && itemstack.itemID == itemstack1.itemID && itemstack.stackSize == 1 && itemstack1.stackSize == 1 + * && Item.itemsList[itemstack.itemID].isDamageable()) { Item item = Item.itemsList[itemstack.itemID]; int l = + * item.getMaxDamage() - itemstack.getItemDamageForDisplay(); int i1 = item.getMaxDamage() - + * itemstack1.getItemDamageForDisplay(); int j1 = l + i1 + (item.getMaxDamage() * 10) / 100; int k1 = + * item.getMaxDamage() - j1; if (k1 < 0) { k1 = 0; } return new ItemStack(itemstack.itemID, 1, k1); } + */ + + for (final IRecipe irecipe : this.recipes) { + if (irecipe.matches(par1InventoryCrafting, par2World)) { + return irecipe.getCraftingResult(par1InventoryCrafting); + } + } + + return null; + } + + public List getRecipeList() { + return this.recipes; + } +} diff --git a/src/main/java/gtPlusPlus/core/handler/workbench/Workbench_CraftingHandler.java b/src/main/java/gtPlusPlus/core/handler/workbench/Workbench_CraftingHandler.java deleted file mode 100644 index 6933c0f82d..0000000000 --- a/src/main/java/gtPlusPlus/core/handler/workbench/Workbench_CraftingHandler.java +++ /dev/null @@ -1,161 +0,0 @@ -package gtPlusPlus.core.handler.workbench; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.inventory.InventoryCrafting; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.crafting.IRecipe; -import net.minecraft.item.crafting.ShapedRecipes; -import net.minecraft.item.crafting.ShapelessRecipes; -import net.minecraft.world.World; - -public class Workbench_CraftingHandler { - - private static final Workbench_CraftingHandler instance = new Workbench_CraftingHandler(); - private final List recipes = new ArrayList<>(); - - public static final Workbench_CraftingHandler getInstance() { - return instance; - } - - public Workbench_CraftingHandler() { - - // just a example recipe so you know how to add them - this.addRecipe( - new ItemStack(Blocks.iron_block), - new Object[] { "###", "###", "###", Character.valueOf('#'), Items.iron_ingot }); - - // another example Recipe, but shapeless - this.addShapelessRecipe(new ItemStack(Items.cake), new Object[] { Items.stick }); - } - - void addRecipe(final ItemStack par1ItemStack, final Object par2ArrayOfObj[]) { - String s = ""; - int i = 0; - int j = 0; - int k = 0; - - if (par2ArrayOfObj[i] instanceof String[]) { - final String as[] = (String[]) par2ArrayOfObj[i++]; - - for (final String s2 : as) { - k++; - j = s2.length(); - s = (new StringBuilder()).append(s) - .append(s2) - .toString(); - } - } else { - while (par2ArrayOfObj[i] instanceof String) { - final String s1 = (String) par2ArrayOfObj[i++]; - k++; - j = s1.length(); - s = (new StringBuilder()).append(s) - .append(s1) - .toString(); - } - } - - final HashMap hashmap = new HashMap<>(); - - for (; i < par2ArrayOfObj.length; i += 2) { - final Character character = (Character) par2ArrayOfObj[i]; - ItemStack itemstack = null; - - if (par2ArrayOfObj[i + 1] instanceof Item) { - itemstack = new ItemStack((Item) par2ArrayOfObj[i + 1]); - } else if (par2ArrayOfObj[i + 1] instanceof Block) { - itemstack = new ItemStack((Block) par2ArrayOfObj[i + 1], 1, -1); - } else if (par2ArrayOfObj[i + 1] instanceof ItemStack) { - itemstack = (ItemStack) par2ArrayOfObj[i + 1]; - } - - hashmap.put(character, itemstack); - } - - final ItemStack aitemstack[] = new ItemStack[j * k]; - - for (int i1 = 0; i1 < (j * k); i1++) { - final char c = s.charAt(i1); - - if (hashmap.containsKey(Character.valueOf(c))) { - aitemstack[i1] = hashmap.get(Character.valueOf(c)) - .copy(); - } else { - aitemstack[i1] = null; - } - } - - this.recipes.add(new ShapedRecipes(j, k, aitemstack, par1ItemStack)); - } - - public void addShapelessRecipe(final ItemStack par1ItemStack, final Object par2ArrayOfObj[]) { - final ArrayList arraylist = new ArrayList<>(); - final Object aobj[] = par2ArrayOfObj; - final int i = aobj.length; - - for (final Object obj : aobj) { - if (obj instanceof ItemStack) { - arraylist.add(((ItemStack) obj).copy()); - continue; - } - - if (obj instanceof Item) { - arraylist.add(new ItemStack((Item) obj)); - continue; - } - - if (obj instanceof Block) { - arraylist.add(new ItemStack((Block) obj)); - } else { - throw new RuntimeException("Invalid shapeless recipe!"); - } - } - - this.recipes.add(new ShapelessRecipes(par1ItemStack, arraylist)); - } - - public ItemStack findMatchingRecipe(final InventoryCrafting par1InventoryCrafting, final World par2World) { - int i = 0; - for (int j = 0; j < par1InventoryCrafting.getSizeInventory(); j++) { - final ItemStack itemstack2 = par1InventoryCrafting.getStackInSlot(j); - - if (itemstack2 == null) { - continue; - } - - if (i == 0) {} - - if (i == 1) {} - - i++; - } - - // TODO - Update from itemIDs - /* - * if (i == 2 && itemstack.itemID == itemstack1.itemID && itemstack.stackSize == 1 && itemstack1.stackSize == 1 - * && Item.itemsList[itemstack.itemID].isDamageable()) { Item item = Item.itemsList[itemstack.itemID]; int l = - * item.getMaxDamage() - itemstack.getItemDamageForDisplay(); int i1 = item.getMaxDamage() - - * itemstack1.getItemDamageForDisplay(); int j1 = l + i1 + (item.getMaxDamage() * 10) / 100; int k1 = - * item.getMaxDamage() - j1; if (k1 < 0) { k1 = 0; } return new ItemStack(itemstack.itemID, 1, k1); } - */ - - for (final IRecipe irecipe : this.recipes) { - if (irecipe.matches(par1InventoryCrafting, par2World)) { - return irecipe.getCraftingResult(par1InventoryCrafting); - } - } - - return null; - } - - public List getRecipeList() { - return this.recipes; - } -} diff --git a/src/main/java/gtPlusPlus/core/inventories/InventoryDecayablesChest.java b/src/main/java/gtPlusPlus/core/inventories/InventoryDecayablesChest.java new file mode 100644 index 0000000000..6466996cc9 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/inventories/InventoryDecayablesChest.java @@ -0,0 +1,153 @@ +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 InventoryDecayablesChest implements IInventory { + + private final String name = "DecayablesChest"; + + /** 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) && (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; + } +} diff --git a/src/main/java/gtPlusPlus/core/inventories/InventoryEggBox.java b/src/main/java/gtPlusPlus/core/inventories/InventoryEggBox.java new file mode 100644 index 0000000000..545988347e --- /dev/null +++ b/src/main/java/gtPlusPlus/core/inventories/InventoryEggBox.java @@ -0,0 +1,157 @@ +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 InventoryEggBox 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; + } +} diff --git a/src/main/java/gtPlusPlus/core/inventories/InventorySuperJukebox.java b/src/main/java/gtPlusPlus/core/inventories/InventorySuperJukebox.java new file mode 100644 index 0000000000..89f733f5ac --- /dev/null +++ b/src/main/java/gtPlusPlus/core/inventories/InventorySuperJukebox.java @@ -0,0 +1,154 @@ +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 InventorySuperJukebox implements IInventory { + + private final String name = "Sir Mixalot"; + + /** Defining your inventory size this way is handy */ + public static final int INV_SIZE = 21; + + /** 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 1; + } + + /** + * 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 true; + } +} diff --git a/src/main/java/gtPlusPlus/core/inventories/InventoryVolumetricFlaskSetter.java b/src/main/java/gtPlusPlus/core/inventories/InventoryVolumetricFlaskSetter.java new file mode 100644 index 0000000000..0b16011181 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/inventories/InventoryVolumetricFlaskSetter.java @@ -0,0 +1,156 @@ +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; + +import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper; + +public class InventoryVolumetricFlaskSetter 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); + } +} diff --git a/src/main/java/gtPlusPlus/core/inventories/Inventory_DecayablesChest.java b/src/main/java/gtPlusPlus/core/inventories/Inventory_DecayablesChest.java deleted file mode 100644 index 4817545c27..0000000000 --- a/src/main/java/gtPlusPlus/core/inventories/Inventory_DecayablesChest.java +++ /dev/null @@ -1,153 +0,0 @@ -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_DecayablesChest implements IInventory { - - private final String name = "DecayablesChest"; - - /** 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) && (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; - } -} diff --git a/src/main/java/gtPlusPlus/core/inventories/Inventory_EggBox.java b/src/main/java/gtPlusPlus/core/inventories/Inventory_EggBox.java deleted file mode 100644 index 04a95a4f9a..0000000000 --- a/src/main/java/gtPlusPlus/core/inventories/Inventory_EggBox.java +++ /dev/null @@ -1,157 +0,0 @@ -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; - } -} diff --git a/src/main/java/gtPlusPlus/core/inventories/Inventory_SuperJukebox.java b/src/main/java/gtPlusPlus/core/inventories/Inventory_SuperJukebox.java deleted file mode 100644 index bd44e89776..0000000000 --- a/src/main/java/gtPlusPlus/core/inventories/Inventory_SuperJukebox.java +++ /dev/null @@ -1,154 +0,0 @@ -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_SuperJukebox implements IInventory { - - private final String name = "Sir Mixalot"; - - /** Defining your inventory size this way is handy */ - public static final int INV_SIZE = 21; - - /** 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 1; - } - - /** - * 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 true; - } -} diff --git a/src/main/java/gtPlusPlus/core/inventories/Inventory_VolumetricFlaskSetter.java b/src/main/java/gtPlusPlus/core/inventories/Inventory_VolumetricFlaskSetter.java deleted file mode 100644 index 25a03aa212..0000000000 --- a/src/main/java/gtPlusPlus/core/inventories/Inventory_VolumetricFlaskSetter.java +++ /dev/null @@ -1,156 +0,0 @@ -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; - -import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper; - -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); - } -} diff --git a/src/main/java/gtPlusPlus/core/item/ModItems.java b/src/main/java/gtPlusPlus/core/item/ModItems.java index 2253b024a7..cdb61a5e46 100644 --- a/src/main/java/gtPlusPlus/core/item/ModItems.java +++ b/src/main/java/gtPlusPlus/core/item/ModItems.java @@ -5,7 +5,7 @@ import static gregtech.api.enums.Mods.GTPlusPlus; import static gregtech.api.enums.Mods.GregTech; import static gregtech.api.enums.Mods.Thaumcraft; import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; import static gtPlusPlus.core.creative.AddToCreativeTab.tabMisc; import net.minecraft.item.EnumRarity; @@ -17,14 +17,14 @@ import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.block.base.BasicBlock.BlockTypes; import gtPlusPlus.core.block.base.BlockBaseModular; -import gtPlusPlus.core.common.compat.COMPAT_Baubles; +import gtPlusPlus.core.common.compat.CompatBaubles; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.item.base.BaseItemComponent.ComponentTypes; import gtPlusPlus.core.item.base.BaseItemDamageable; @@ -34,7 +34,7 @@ import gtPlusPlus.core.item.base.dusts.BaseItemDust; import gtPlusPlus.core.item.base.foil.BaseItemFoil; import gtPlusPlus.core.item.base.gears.BaseItemSmallGear; import gtPlusPlus.core.item.base.ingots.BaseItemIngot; -import gtPlusPlus.core.item.base.ingots.BaseItemIngot_OLD; +import gtPlusPlus.core.item.base.ingots.BaseItemIngotOld; import gtPlusPlus.core.item.base.plates.BaseItemPlate; import gtPlusPlus.core.item.base.plates.BaseItemPlateDouble; import gtPlusPlus.core.item.bauble.BatteryPackBaseBauble; @@ -48,10 +48,10 @@ import gtPlusPlus.core.item.chemistry.RocketFuels; import gtPlusPlus.core.item.chemistry.StandardBaseParticles; import gtPlusPlus.core.item.crafting.ItemDummyResearch; import gtPlusPlus.core.item.food.BaseItemMetaFood; -import gtPlusPlus.core.item.general.BufferCore; import gtPlusPlus.core.item.general.ItemAirFilter; import gtPlusPlus.core.item.general.ItemBasicScrubberTurbine; import gtPlusPlus.core.item.general.ItemBlueprint; +import gtPlusPlus.core.item.general.ItemBufferCore; import gtPlusPlus.core.item.general.ItemEmpty; import gtPlusPlus.core.item.general.ItemGenericToken; import gtPlusPlus.core.item.general.ItemHalfCompleteCasings; @@ -64,17 +64,17 @@ import gtPlusPlus.core.item.general.chassis.ItemDehydratorCoilWire; import gtPlusPlus.core.item.general.spawn.ItemCustomSpawnEgg; import gtPlusPlus.core.item.init.ItemsFoods; import gtPlusPlus.core.item.materials.DustDecayable; -import gtPlusPlus.core.item.tool.misc.GregtechPump; +import gtPlusPlus.core.item.tool.misc.ItemGregtechPump; import gtPlusPlus.core.item.wearable.WearableLoader; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.MISC_MATERIALS; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.material.NONMATERIAL; -import gtPlusPlus.core.material.nuclear.FLUORIDES; -import gtPlusPlus.core.material.nuclear.NUCLIDE; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.MaterialsOther; +import gtPlusPlus.core.material.nuclear.MaterialsFluorides; +import gtPlusPlus.core.material.nuclear.MaterialsNuclides; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.data.StringUtils; @@ -82,7 +82,7 @@ import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.minecraft.MaterialUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.everglades.GTplusplus_Everglades; +import gtPlusPlus.everglades.GTPPEverglades; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper; import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechItems; @@ -181,7 +181,7 @@ public final class ModItems { public static Item dustRadium226; public static Item dustProtactinium233; - public static GregtechPump toolGregtechPump; + public static ItemGregtechPump toolGregtechPump; public static ItemGenericToken itemGenericToken; @@ -219,11 +219,7 @@ public final class ModItems { Logger.INFO("Items!"); // Default item used when recipes fail, handy for debugging. Let's make sure they exist when this class is // called upon. - AAA_Broken = new BaseItemIngot_OLD( - "AAA_Broken", - "Errors - Tell Alkalus", - Utils.rgbtoHexValue(128, 128, 128), - 0); + AAA_Broken = new BaseItemIngotOld("AAA_Broken", "Errors - Tell Alkalus", Utils.rgbtoHexValue(128, 128, 128), 0); ZZZ_Empty = new ItemEmpty(); } @@ -277,33 +273,33 @@ public final class ModItems { // Elements generate first so they can be used in compounds. // Missing Elements - MaterialGenerator.generate(ELEMENT.getInstance().SELENIUM); // LFTR byproduct - MaterialGenerator.generate(ELEMENT.getInstance().BROMINE); - MaterialGenerator.generate(ELEMENT.getInstance().KRYPTON); // LFTR byproduct - MaterialGenerator.generate(ELEMENT.getInstance().STRONTIUM); - MaterialGenerator.generate(ELEMENT.getInstance().ZIRCONIUM); - MaterialGenerator.generate(ELEMENT.getInstance().RUTHENIUM); - MaterialGenerator.generate(ELEMENT.getInstance().IODINE); // LFTR byproduct - MaterialGenerator.generate(ELEMENT.getInstance().HAFNIUM); - MaterialGenerator.generate(ELEMENT.getInstance().DYSPROSIUM); - MaterialGenerator.generate(ELEMENT.getInstance().ERBIUM); - MaterialGenerator.generate(ELEMENT.getInstance().PRASEODYMIUM); - MaterialGenerator.generate(ELEMENT.getInstance().TELLURIUM); // LFTR byproduct - MaterialGenerator.generate(ELEMENT.getInstance().RHODIUM); - MaterialGenerator.generate(ELEMENT.getInstance().RHENIUM); - MaterialGenerator.generate(ELEMENT.getInstance().THALLIUM); - MaterialGenerator.generate(ELEMENT.getInstance().GERMANIUM); + MaterialGenerator.generate(MaterialsElements.getInstance().SELENIUM); // LFTR byproduct + MaterialGenerator.generate(MaterialsElements.getInstance().BROMINE); + MaterialGenerator.generate(MaterialsElements.getInstance().KRYPTON); // LFTR byproduct + MaterialGenerator.generate(MaterialsElements.getInstance().STRONTIUM); + MaterialGenerator.generate(MaterialsElements.getInstance().ZIRCONIUM); + MaterialGenerator.generate(MaterialsElements.getInstance().RUTHENIUM); + MaterialGenerator.generate(MaterialsElements.getInstance().IODINE); // LFTR byproduct + MaterialGenerator.generate(MaterialsElements.getInstance().HAFNIUM); + MaterialGenerator.generate(MaterialsElements.getInstance().DYSPROSIUM); + MaterialGenerator.generate(MaterialsElements.getInstance().ERBIUM); + MaterialGenerator.generate(MaterialsElements.getInstance().PRASEODYMIUM); + MaterialGenerator.generate(MaterialsElements.getInstance().TELLURIUM); // LFTR byproduct + MaterialGenerator.generate(MaterialsElements.getInstance().RHODIUM); + MaterialGenerator.generate(MaterialsElements.getInstance().RHENIUM); + MaterialGenerator.generate(MaterialsElements.getInstance().THALLIUM); + MaterialGenerator.generate(MaterialsElements.getInstance().GERMANIUM); // RADIOACTIVE ELEMENTS - MaterialGenerator.generateNuclearMaterial(ELEMENT.getInstance().POLONIUM, false); + MaterialGenerator.generateNuclearMaterial(MaterialsElements.getInstance().POLONIUM, false); // MaterialGenerator.generateNuclearMaterial(ELEMENT.getInstance().RADON, false); - MaterialGenerator.generateNuclearMaterial(ELEMENT.getInstance().RADIUM, false); - MaterialGenerator.generateNuclearMaterial(ELEMENT.getInstance().PROMETHIUM, false); - MaterialGenerator.generateNuclearMaterial(ELEMENT.getInstance().PROTACTINIUM, false); - MaterialGenerator.generateNuclearMaterial(ELEMENT.getInstance().CURIUM, false); - MaterialGenerator.generateNuclearMaterial(ELEMENT.getInstance().CALIFORNIUM, false); - MaterialGenerator.generateNuclearMaterial(ELEMENT.getInstance().NEPTUNIUM, false); - MaterialGenerator.generateNuclearMaterial(ELEMENT.getInstance().FERMIUM, false); + MaterialGenerator.generateNuclearMaterial(MaterialsElements.getInstance().RADIUM, false); + MaterialGenerator.generateNuclearMaterial(MaterialsElements.getInstance().PROMETHIUM, false); + MaterialGenerator.generateNuclearMaterial(MaterialsElements.getInstance().PROTACTINIUM, false); + MaterialGenerator.generateNuclearMaterial(MaterialsElements.getInstance().CURIUM, false); + MaterialGenerator.generateNuclearMaterial(MaterialsElements.getInstance().CALIFORNIUM, false); + MaterialGenerator.generateNuclearMaterial(MaterialsElements.getInstance().NEPTUNIUM, false); + MaterialGenerator.generateNuclearMaterial(MaterialsElements.getInstance().FERMIUM, false); // Nuclear Isotopes @@ -314,168 +310,168 @@ public final class ModItems { // neutron cross-section of lithium-7 (about 45 millibarns) makes high separation of lithium-7 from natural // lithium a // strong requirement for the possible use in lithium fluoride reactors. - MaterialGenerator.generate(ELEMENT.getInstance().LITHIUM7, false); + MaterialGenerator.generate(MaterialsElements.getInstance().LITHIUM7, false); // Thorium-232 is the most stable isotope of Thorium, purified for nuclear fuel use in this case. - MaterialGenerator.generateNuclearMaterial(ELEMENT.getInstance().THORIUM232); + MaterialGenerator.generateNuclearMaterial(MaterialsElements.getInstance().THORIUM232); // Production of 233U (through the neutron irradiation of 232Th) invariably produces small amounts of 232U // as an impurity // because of parasitic (n,2n) reactions on uranium-233 itself, or on protactinium-233, or on thorium-232: - MaterialGenerator.generate(ELEMENT.getInstance().URANIUM232); + MaterialGenerator.generate(MaterialsElements.getInstance().URANIUM232); // Uranium-233 is a fissile isotope of uranium that is bred from thorium-232 as part of the thorium fuel // cycle. - MaterialGenerator.generate(ELEMENT.getInstance().URANIUM233); + MaterialGenerator.generate(MaterialsElements.getInstance().URANIUM233); // Plutonium-238 is a very powerful alpha emitter. This makes the plutonium-238 isotope suitable for usage // in radioisotope thermoelectric generators (RTGs) // and radioisotope heater units - one gram of plutonium-238 generates approximately 0.5 W of thermal power. - MaterialGenerator.generateNuclearMaterial(ELEMENT.getInstance().PLUTONIUM238, false); + MaterialGenerator.generateNuclearMaterial(MaterialsElements.getInstance().PLUTONIUM238, false); // Custom Materials that will have standalone refinery processes - MaterialGenerator.generate(ELEMENT.STANDALONE.ADVANCED_NITINOL, false); - MaterialGenerator.generate(ELEMENT.STANDALONE.ASTRAL_TITANIUM); - MaterialGenerator.generate(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN); - MaterialGenerator.generate(ELEMENT.STANDALONE.HYPOGEN); - MaterialGenerator.generate(ELEMENT.STANDALONE.CHRONOMATIC_GLASS); + MaterialGenerator.generate(MaterialsElements.STANDALONE.ADVANCED_NITINOL, false); + MaterialGenerator.generate(MaterialsElements.STANDALONE.ASTRAL_TITANIUM); + MaterialGenerator.generate(MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN); + MaterialGenerator.generate(MaterialsElements.STANDALONE.HYPOGEN); + MaterialGenerator.generate(MaterialsElements.STANDALONE.CHRONOMATIC_GLASS); // Custom Materials that are from Runescape - MaterialGenerator.generate(ELEMENT.STANDALONE.BLACK_METAL); - MaterialGenerator.generate(ELEMENT.STANDALONE.WHITE_METAL); - MaterialGenerator.generateOreMaterialWithAllExcessComponents(ELEMENT.STANDALONE.GRANITE); - MaterialGenerator.generateOreMaterialWithAllExcessComponents(ELEMENT.STANDALONE.RUNITE); - MaterialGenerator.generate(ELEMENT.STANDALONE.DRAGON_METAL); + MaterialGenerator.generate(MaterialsElements.STANDALONE.BLACK_METAL); + MaterialGenerator.generate(MaterialsElements.STANDALONE.WHITE_METAL); + MaterialGenerator.generateOreMaterialWithAllExcessComponents(MaterialsElements.STANDALONE.GRANITE); + MaterialGenerator.generateOreMaterialWithAllExcessComponents(MaterialsElements.STANDALONE.RUNITE); + MaterialGenerator.generate(MaterialsElements.STANDALONE.DRAGON_METAL); - MISC_MATERIALS.run(); + MaterialMisc.run(); - MaterialGenerator.generate(ALLOY.SILICON_CARBIDE); - MaterialGenerator.generate(ALLOY.ZIRCONIUM_CARBIDE); - MaterialGenerator.generate(ALLOY.TANTALUM_CARBIDE); - MaterialGenerator.generate(ALLOY.NIOBIUM_CARBIDE); - MaterialGenerator.generate(ALLOY.TUNGSTEN_TITANIUM_CARBIDE); + MaterialGenerator.generate(MaterialsAlloy.SILICON_CARBIDE); + MaterialGenerator.generate(MaterialsAlloy.ZIRCONIUM_CARBIDE); + MaterialGenerator.generate(MaterialsAlloy.TANTALUM_CARBIDE); + MaterialGenerator.generate(MaterialsAlloy.NIOBIUM_CARBIDE); + MaterialGenerator.generate(MaterialsAlloy.TUNGSTEN_TITANIUM_CARBIDE); // LFTR Fuel components - MaterialGenerator.generateNuclearDusts(FLUORIDES.AMMONIUM_BIFLUORIDE); // LFTR fuel component - MaterialGenerator.generateNuclearDusts(FLUORIDES.BERYLLIUM_HYDROXIDE); // LFTR fuel component + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.AMMONIUM_BIFLUORIDE); // LFTR fuel component + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.BERYLLIUM_HYDROXIDE); // LFTR fuel component // MaterialGenerator.generateNuclearDusts(FLUORIDES.AMMONIUM_TETRAFLUOROBERYLLATE); // LFTR fuel component // Generate Fluorides - MaterialGenerator.generateNuclearDusts(FLUORIDES.BERYLLIUM_FLUORIDE); - MaterialGenerator.generateNuclearDusts(FLUORIDES.LITHIUM_FLUORIDE); - MaterialGenerator.generateNuclearDusts(FLUORIDES.THORIUM_TETRAFLUORIDE); - MaterialGenerator.generateNuclearDusts(FLUORIDES.THORIUM_HEXAFLUORIDE); - MaterialGenerator.generateNuclearDusts(FLUORIDES.URANIUM_TETRAFLUORIDE, false); - MaterialGenerator.generateNuclearDusts(FLUORIDES.URANIUM_HEXAFLUORIDE, false); - MaterialGenerator.generateNuclearDusts(FLUORIDES.ZIRCONIUM_TETRAFLUORIDE); + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.BERYLLIUM_FLUORIDE); + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.LITHIUM_FLUORIDE); + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.THORIUM_TETRAFLUORIDE); + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.THORIUM_HEXAFLUORIDE); + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.URANIUM_TETRAFLUORIDE, false); + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.URANIUM_HEXAFLUORIDE, false); + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.ZIRCONIUM_TETRAFLUORIDE); // LFTR Fluoride outputs - MaterialGenerator.generateNuclearDusts(FLUORIDES.NEPTUNIUM_HEXAFLUORIDE); - MaterialGenerator.generateNuclearDusts(FLUORIDES.TECHNETIUM_HEXAFLUORIDE); - MaterialGenerator.generateNuclearDusts(FLUORIDES.SELENIUM_HEXAFLUORIDE); + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.NEPTUNIUM_HEXAFLUORIDE); + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.TECHNETIUM_HEXAFLUORIDE); + MaterialGenerator.generateNuclearDusts(MaterialsFluorides.SELENIUM_HEXAFLUORIDE); // Generate Reactor Fuel Salts - MaterialGenerator.generateNuclearDusts(NUCLIDE.LiFBeF2ZrF4U235); - MaterialGenerator.generateNuclearDusts(NUCLIDE.LiFBeF2ZrF4UF4); - MaterialGenerator.generateNuclearDusts(NUCLIDE.LiFBeF2ThF4UF4); + MaterialGenerator.generateNuclearDusts(MaterialsNuclides.LiFBeF2ZrF4U235); + MaterialGenerator.generateNuclearDusts(MaterialsNuclides.LiFBeF2ZrF4UF4); + MaterialGenerator.generateNuclearDusts(MaterialsNuclides.LiFBeF2ThF4UF4); // MaterialGenerator.generateNuclearMaterial(NUCLIDE.Li2BeF4, false); // Generate some Alloys // Misc Alloys - MaterialGenerator.generate(ALLOY.ENERGYCRYSTAL); - MaterialGenerator.generate(ALLOY.BLOODSTEEL); + MaterialGenerator.generate(MaterialsAlloy.ENERGYCRYSTAL); + MaterialGenerator.generate(MaterialsAlloy.BLOODSTEEL); - MaterialGenerator.generate(ALLOY.ZERON_100); + MaterialGenerator.generate(MaterialsAlloy.ZERON_100); // Tumbaga was the name given by Spaniards to a non-specific alloy of gold and copper - MaterialGenerator.generate(ALLOY.TUMBAGA); + MaterialGenerator.generate(MaterialsAlloy.TUMBAGA); // Potin is traditionally an alloy of bronze, tin and lead, with varying quantities of each possible - MaterialGenerator.generate(ALLOY.POTIN); + MaterialGenerator.generate(MaterialsAlloy.POTIN); // Staballoy & Tantalloy - MaterialGenerator.generate(ALLOY.STABALLOY); - MaterialGenerator.generate(ALLOY.TANTALLOY_60); - MaterialGenerator.generate(ALLOY.TANTALLOY_61); + MaterialGenerator.generate(MaterialsAlloy.STABALLOY); + MaterialGenerator.generate(MaterialsAlloy.TANTALLOY_60); + MaterialGenerator.generate(MaterialsAlloy.TANTALLOY_61); // Inconel - MaterialGenerator.generate(ALLOY.INCONEL_625); - MaterialGenerator.generate(ALLOY.INCONEL_690); - MaterialGenerator.generate(ALLOY.INCONEL_792); + MaterialGenerator.generate(MaterialsAlloy.INCONEL_625); + MaterialGenerator.generate(MaterialsAlloy.INCONEL_690); + MaterialGenerator.generate(MaterialsAlloy.INCONEL_792); // Steels - MaterialGenerator.generateDusts(ALLOY.EGLIN_STEEL_BASE); - MaterialGenerator.generate(ALLOY.EGLIN_STEEL); - MaterialGenerator.generate(ALLOY.MARAGING250); - MaterialGenerator.generate(ALLOY.MARAGING300); - MaterialGenerator.generate(ALLOY.MARAGING350); - MaterialGenerator.generate(ALLOY.AQUATIC_STEEL); + MaterialGenerator.generateDusts(MaterialsAlloy.EGLIN_STEEL_BASE); + MaterialGenerator.generate(MaterialsAlloy.EGLIN_STEEL); + MaterialGenerator.generate(MaterialsAlloy.MARAGING250); + MaterialGenerator.generate(MaterialsAlloy.MARAGING300); + MaterialGenerator.generate(MaterialsAlloy.MARAGING350); + MaterialGenerator.generate(MaterialsAlloy.AQUATIC_STEEL); - MaterialGenerator.generate(ALLOY.NITINOL_60, true); + MaterialGenerator.generate(MaterialsAlloy.NITINOL_60, true); // Composite Alloys - MaterialGenerator.generate(ALLOY.STELLITE); - MaterialGenerator.generate(ALLOY.TALONITE); + MaterialGenerator.generate(MaterialsAlloy.STELLITE); + MaterialGenerator.generate(MaterialsAlloy.TALONITE); // Hastelloy - MaterialGenerator.generate(ALLOY.HASTELLOY_W); - MaterialGenerator.generate(ALLOY.HASTELLOY_X); - MaterialGenerator.generate(ALLOY.HASTELLOY_C276); - MaterialGenerator.generate(ALLOY.HASTELLOY_N); + MaterialGenerator.generate(MaterialsAlloy.HASTELLOY_W); + MaterialGenerator.generate(MaterialsAlloy.HASTELLOY_X); + MaterialGenerator.generate(MaterialsAlloy.HASTELLOY_C276); + MaterialGenerator.generate(MaterialsAlloy.HASTELLOY_N); // Incoloy - MaterialGenerator.generate(ALLOY.INCOLOY_020); - MaterialGenerator.generate(ALLOY.INCOLOY_DS); - MaterialGenerator.generate(ALLOY.INCOLOY_MA956); + MaterialGenerator.generate(MaterialsAlloy.INCOLOY_020); + MaterialGenerator.generate(MaterialsAlloy.INCOLOY_DS); + MaterialGenerator.generate(MaterialsAlloy.INCOLOY_MA956); // Leagrisium - MaterialGenerator.generate(ALLOY.LEAGRISIUM); + MaterialGenerator.generate(MaterialsAlloy.LEAGRISIUM); // Super Conductor - MaterialGenerator.generate(ALLOY.HG1223, false, false); + MaterialGenerator.generate(MaterialsAlloy.HG1223, false, false); // Generate Fictional Materials - MaterialGenerator.generate(ALLOY.TRINIUM_TITANIUM); - MaterialGenerator.generate(ALLOY.TRINIUM_NAQUADAH, false); - MaterialGenerator.generate(ALLOY.TRINIUM_NAQUADAH_CARBON); - MaterialGenerator.generate(ALLOY.TRINIUM_REINFORCED_STEEL); + MaterialGenerator.generate(MaterialsAlloy.TRINIUM_TITANIUM); + MaterialGenerator.generate(MaterialsAlloy.TRINIUM_NAQUADAH, false); + MaterialGenerator.generate(MaterialsAlloy.TRINIUM_NAQUADAH_CARBON); + MaterialGenerator.generate(MaterialsAlloy.TRINIUM_REINFORCED_STEEL); // Top Tier Alloys - MaterialGenerator.generate(ALLOY.HELICOPTER); - MaterialGenerator.generate(ALLOY.LAFIUM); - MaterialGenerator.generate(ALLOY.CINOBITE); - MaterialGenerator.generate(ALLOY.PIKYONIUM); - MaterialGenerator.generate(ALLOY.ABYSSAL); - MaterialGenerator.generate(ALLOY.LAURENIUM); + MaterialGenerator.generate(MaterialsAlloy.HELICOPTER); + MaterialGenerator.generate(MaterialsAlloy.LAFIUM); + MaterialGenerator.generate(MaterialsAlloy.CINOBITE); + MaterialGenerator.generate(MaterialsAlloy.PIKYONIUM); + MaterialGenerator.generate(MaterialsAlloy.ABYSSAL); + MaterialGenerator.generate(MaterialsAlloy.LAURENIUM); // abs recipe in RECIPES_GREGTECH.java - MaterialGenerator.generate(ALLOY.BOTMIUM, true, false); + MaterialGenerator.generate(MaterialsAlloy.BOTMIUM, true, false); - MaterialGenerator.generate(ALLOY.HS188A); + MaterialGenerator.generate(MaterialsAlloy.HS188A); - MaterialGenerator.generate(ALLOY.TITANSTEEL); - MaterialGenerator.generate(ALLOY.ARCANITE); - MaterialGenerator.generate(ALLOY.OCTIRON); + MaterialGenerator.generate(MaterialsAlloy.TITANSTEEL); + MaterialGenerator.generate(MaterialsAlloy.ARCANITE); + MaterialGenerator.generate(MaterialsAlloy.OCTIRON); - MaterialGenerator.generate(ALLOY.BABBIT_ALLOY, false); - MaterialGenerator.generate(ALLOY.BLACK_TITANIUM, false); - MaterialGenerator.generate(ALLOY.INDALLOY_140, false, false); + MaterialGenerator.generate(MaterialsAlloy.BABBIT_ALLOY, false); + MaterialGenerator.generate(MaterialsAlloy.BLACK_TITANIUM, false); + MaterialGenerator.generate(MaterialsAlloy.INDALLOY_140, false, false); // High Level Bioplastic - MaterialGenerator.generate(ELEMENT.STANDALONE.RHUGNOR, false, false); + MaterialGenerator.generate(MaterialsElements.STANDALONE.RHUGNOR, false, false); // Must be the final Alloy to Generate - MaterialGenerator.generate(ALLOY.QUANTUM); + MaterialGenerator.generate(MaterialsAlloy.QUANTUM); // Ores - MaterialGenerator.generateOreMaterial(FLUORIDES.FLUORITE); - MaterialGenerator.generateOreMaterial(ALLOY.KOBOLDITE); - GTplusplus_Everglades.GenerateOreMaterials(); + MaterialGenerator.generateOreMaterial(MaterialsFluorides.FLUORITE); + MaterialGenerator.generateOreMaterial(MaterialsAlloy.KOBOLDITE); + GTPPEverglades.GenerateOreMaterials(); // formula override - ALLOY.TUNGSTEN_TITANIUM_CARBIDE.vChemicalFormula = StringUtils.subscript("(CW)7Ti3"); - ALLOY.TITANSTEEL.vChemicalFormula = StringUtils.subscript("((CW)7Ti3)3???"); + MaterialsAlloy.TUNGSTEN_TITANIUM_CARBIDE.vChemicalFormula = StringUtils.subscript("(CW)7Ti3"); + MaterialsAlloy.TITANSTEEL.vChemicalFormula = StringUtils.subscript("((CW)7Ti3)3???"); // Werkstoff bridge - ELEMENT.getInstance().ZIRCONIUM.setWerkstoffID((short) 3); - ELEMENT.getInstance().THORIUM232.setWerkstoffID((short) 30); - ELEMENT.getInstance().RUTHENIUM.setWerkstoffID((short) 64); - ELEMENT.getInstance().HAFNIUM.setWerkstoffID((short) 11000); - ELEMENT.getInstance().IODINE.setWerkstoffID((short) 11012); + MaterialsElements.getInstance().ZIRCONIUM.setWerkstoffID((short) 3); + MaterialsElements.getInstance().THORIUM232.setWerkstoffID((short) 30); + MaterialsElements.getInstance().RUTHENIUM.setWerkstoffID((short) 64); + MaterialsElements.getInstance().HAFNIUM.setWerkstoffID((short) 11000); + MaterialsElements.getInstance().IODINE.setWerkstoffID((short) 11012); } catch (final Throwable r) { Logger.INFO("Failed to Generated a Material. " + r.getMessage()); @@ -503,13 +499,13 @@ public final class ModItems { .getItem(); } // Generates a set of four special dusts to be used in my recipes. - dustAer = ItemUtils.generateSpecialUseDusts(ELEMENT.getInstance().AER, true)[0]; - dustIgnis = ItemUtils.generateSpecialUseDusts(ELEMENT.getInstance().IGNIS, true)[0]; - dustTerra = ItemUtils.generateSpecialUseDusts(ELEMENT.getInstance().TERRA, true)[0]; - dustAqua = ItemUtils.generateSpecialUseDusts(ELEMENT.getInstance().AQUA, true)[0]; + dustAer = ItemUtils.generateSpecialUseDusts(MaterialsElements.getInstance().AER, true)[0]; + dustIgnis = ItemUtils.generateSpecialUseDusts(MaterialsElements.getInstance().IGNIS, true)[0]; + dustTerra = ItemUtils.generateSpecialUseDusts(MaterialsElements.getInstance().TERRA, true)[0]; + dustAqua = ItemUtils.generateSpecialUseDusts(MaterialsElements.getInstance().AQUA, true)[0]; - ItemUtils.generateSpecialUseDusts(MISC_MATERIALS.WOODS_GLASS, false); - cellHydrogenChlorideMix = MISC_MATERIALS.HYDROGEN_CHLORIDE_MIX.getCell(1) + ItemUtils.generateSpecialUseDusts(MaterialMisc.WOODS_GLASS, false); + cellHydrogenChlorideMix = MaterialMisc.HYDROGEN_CHLORIDE_MIX.getCell(1) .getItem(); // Nuclear Fuel Dusts @@ -550,9 +546,9 @@ public final class ModItems { "Calcium Sulfate (Gypsum)", "CaSO4", Utils.rgbtoHexValue(255, 255, 255))[0]; // https://en.wikipedia.org/wiki/Calcium_sulfate - GT_OreDictUnificator.registerOre("dustCalciumSulfate", ItemUtils.getSimpleStack(dustCalciumSulfate)); + GTOreDictUnificator.registerOre("dustCalciumSulfate", ItemUtils.getSimpleStack(dustCalciumSulfate)); } else { - GT_OreDictUnificator + GTOreDictUnificator .registerOre("dustCalciumSulfate", ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dustGypsum", 1)); } dustLi2CO3CaOH2 = ItemUtils.generateSpecialUseDusts( @@ -560,14 +556,17 @@ public final class ModItems { "Li2CO3 + CaO2H2 Compound", "Li2CO3CaO2H2", Utils.rgbtoHexValue(255, 255, 255))[0]; // https://en.wikipedia.org/wiki/Calcium_carbonate - MaterialUtils.generateSpecialDustAndAssignToAMaterial(FLUORIDES.SODIUM_FLUORIDE, false); + MaterialUtils.generateSpecialDustAndAssignToAMaterial(MaterialsFluorides.SODIUM_FLUORIDE, false); // FLiBe Fuel Compounds dustLi2BeF4 = ItemUtils.generateSpecialUseDusts( "Li2BeF4", "Lithium Tetrafluoroberyllate Fuel Compound", "Li2BeF4", Utils.rgbtoHexValue(255, 255, 255))[0]; // https://en.wikipedia.org/wiki/FLiBe - Material.registerComponentForMaterial(NUCLIDE.Li2BeF4, OrePrefixes.dust, ItemUtils.getSimpleStack(dustLi2BeF4)); + Material.registerComponentForMaterial( + MaterialsNuclides.Li2BeF4, + OrePrefixes.dust, + ItemUtils.getSimpleStack(dustLi2BeF4)); // fluidFLiBeSalt = ("Li2BeF4", "Li2BeF4", 7430, new short[]{255, 255, 255, 100}, 0); // fluidFLiBeSalt = FluidUtils.addGTFluidNoPrefix("Li2BeF4", "Lithium Tetrafluoroberyllate", new short[]{255, // 255, 255, 100}, 0, 743, null, CI.emptyCells(1), 1000, true); @@ -608,7 +607,7 @@ public final class ModItems { false, null); - if (CORE.ConfigSwitches.enableMachine_Pollution) { + if (GTPPCore.ConfigSwitches.enableMachine_Pollution) { itemBasicTurbine = new ItemBasicScrubberTurbine(); } @@ -618,7 +617,7 @@ public final class ModItems { "itemZirconiumPellet", "Zirconium Pellet [" + StringUtils.subscript("ZrCl4") + "]", tabMisc).setTextureName(GTPlusPlus.ID + ":itemShard"); - GT_OreDictUnificator.registerOre("pelletZirconium", new ItemStack(itemZirconiumChlorideCinterPellet)); + GTOreDictUnificator.registerOre("pelletZirconium", new ItemStack(itemZirconiumChlorideCinterPellet)); // Zirconium Chloride dustZrCl4 = ItemUtils.generateSpecialUseDusts("ZrCl4", "ZrCl4", "ZrCl4", Utils.rgbtoHexValue(180, 180, 180))[0]; // http://www.iaea.org/inis/collection/NCLCollectionStore/_Public/39/036/39036750.pdf dustCookedZrCl4 = ItemUtils @@ -626,9 +625,9 @@ public final class ModItems { // Zirconium Tetrafluoride /* - * GT_OreDictUnificator.registerOre("cellZrF4", + * GTOreDictUnificator.registerOre("cellZrF4", * ItemUtils.getItemStackOfAmountFromOreDict("cellZirconiumTetrafluoride", 1)); - * GT_OreDictUnificator.registerOre("dustZrF4", + * GTOreDictUnificator.registerOre("dustZrF4", * ItemUtils.getItemStackOfAmountFromOreDict("dustZirconiumTetrafluoride", 1)); */ fluidZrF4 = FluidUtils.generateFluidNoPrefix( @@ -636,7 +635,7 @@ public final class ModItems { "Zirconium Tetrafluoride", 500, new short[] { 170, 170, 140, 100 }); // https://en.wikipedia.org/wiki/Zirconium_tetrafluoride - FLUORIDES.ZIRCONIUM_TETRAFLUORIDE.setFluid(fluidZrF4); + MaterialsFluorides.ZIRCONIUM_TETRAFLUORIDE.setFluid(fluidZrF4); // Coolant Salt // NaBF4 - NaF - 621C @@ -644,7 +643,7 @@ public final class ModItems { // //https://en.wikipedia.org/wiki/Zirconium_tetrafluoride // Load Tree Farmer - if (CORE.ConfigSwitches.enableMultiblock_TreeFarmer) { // https://en.wikipedia.org/wiki/UAN + if (GTPPCore.ConfigSwitches.enableMultiblock_TreeFarmer) { // https://en.wikipedia.org/wiki/UAN dustFertUN18 = ItemUtils .generateSpecialUseDusts("UN18Fertiliser", "UN-18 Fertiliser", Utils.rgbtoHexValue(60, 155, 60))[0]; dustFertUN32 = ItemUtils @@ -665,7 +664,7 @@ public final class ModItems { temp1, null, true); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(temp2) .fluidOutputs(new FluidStack(fluidFertBasic, 36)) .duration(5 * TICKS) @@ -708,7 +707,7 @@ public final class ModItems { true); // Test items - toolGregtechPump = new GregtechPump(); + toolGregtechPump = new ItemGregtechPump(); toolGregtechPump.registerPumpType(0, "Simple Hand Pump", 0, 0); toolGregtechPump.registerPumpType(1, "Advanced Hand Pump", 32000, 1); toolGregtechPump.registerPumpType(2, "Super Hand Pump", 128000, 2); @@ -725,17 +724,17 @@ public final class ModItems { 50640, new String[] { StringUtils.superscript("238Np"), "Result: Plutonium 238 (" + StringUtils.superscript("238Pu") + ")" }, - ELEMENT.getInstance().PLUTONIUM238.getDust(1) + MaterialsElements.getInstance().PLUTONIUM238.getDust(1) .getItem(), 5); dustDecayedRadium226 = ItemUtils.generateSpecialUseDusts( "DecayedRadium226", "Decayed Radium-226", "Contains Radon (" + StringUtils.superscript("222Rn") + ")", - ELEMENT.getInstance().RADIUM.getRgbAsHex())[0]; + MaterialsElements.getInstance().RADIUM.getRgbAsHex())[0]; dustRadium226 = new DustDecayable( "dustRadium226", - ELEMENT.getInstance().RADIUM.getRgbAsHex(), + MaterialsElements.getInstance().RADIUM.getRgbAsHex(), 90000, new String[] { StringUtils.superscript("226Ra"), "Result: Radon (" + StringUtils.superscript("222Rn") + ")" }, @@ -744,16 +743,16 @@ public final class ModItems { 5); dustProtactinium233 = new DustDecayable( "dustProtactinium233", - ELEMENT.getInstance().PROTACTINIUM.getRgbAsHex(), + MaterialsElements.getInstance().PROTACTINIUM.getRgbAsHex(), 32000, new String[] { StringUtils.superscript("233Pa"), "Result: Uranium 233(" + StringUtils.superscript("233U") + ")" }, - ELEMENT.getInstance().URANIUM233.getDust(1) + MaterialsElements.getInstance().URANIUM233.getDust(1) .getItem(), 6); dustMolybdenum99 = new DustDecayable( "dustMolybdenum99", - ELEMENT.getInstance().MOLYBDENUM.getRgbAsHex(), + MaterialsElements.getInstance().MOLYBDENUM.getRgbAsHex(), 16450, new String[] { StringUtils.superscript("99Mo"), "Result: Technicium 99ᵐ (" + StringUtils.superscript("99ᵐTc") + ")" }, @@ -799,7 +798,7 @@ public final class ModItems { try { final Class baublesTest = ReflectionUtils.getClass("baubles.api.IBauble"); if (baublesTest != null) { - COMPAT_Baubles.run(); + CompatBaubles.run(); } else { Logger.INFO("Baubles Not Found - Skipping Resources."); } @@ -810,7 +809,7 @@ public final class ModItems { // Buffer Cores! Item itemBufferCore; for (int i = 1; i <= 10; i++) { - itemBufferCore = new BufferCore("itemBufferCore", i).setCreativeTab(AddToCreativeTab.tabMachines); + itemBufferCore = new ItemBufferCore("itemBufferCore", i).setCreativeTab(AddToCreativeTab.tabMachines); GameRegistry.registerItem(itemBufferCore, itemBufferCore.getUnlocalizedName()); } @@ -866,92 +865,106 @@ public final class ModItems { // Just an unusual plate needed for some black magic. if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("plateClay", 1) == null) { - itemPlateClay = new BaseItemPlate(NONMATERIAL.CLAY); + itemPlateClay = new BaseItemPlate(MaterialsOther.CLAY); } if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("plateDoubleClay", 1) == null) { - itemDoublePlateClay = new BaseItemPlateDouble(NONMATERIAL.CLAY); + itemDoublePlateClay = new BaseItemPlateDouble(MaterialsOther.CLAY); } // Need this for Mutagenic Frames if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("foilUranium235", 1) == null) { - itemFoilUranium235 = new BaseItemFoil(ELEMENT.getInstance().URANIUM235); + itemFoilUranium235 = new BaseItemFoil(MaterialsElements.getInstance().URANIUM235); } // A small gear needed for wizardry. if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("gearGtSmallWroughtIron", 1) == null) { - itemSmallWroughtIronGear = new BaseItemSmallGear(NONMATERIAL.WROUGHT_IRON); + itemSmallWroughtIronGear = new BaseItemSmallGear(MaterialsOther.WROUGHT_IRON); } // Krypton Processing if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("ingotHotTitanium", 1) == null) { itemHotTitaniumIngot = ItemUtils - .getSimpleStack(new BaseItemIngot(ELEMENT.getInstance().TITANIUM, ComponentTypes.HOTINGOT)); + .getSimpleStack(new BaseItemIngot(MaterialsElements.getInstance().TITANIUM, ComponentTypes.HOTINGOT)); } else { itemHotTitaniumIngot = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("ingotHotTitanium", 1); } // Need this for Laurenium if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("dustIndium", 1) == null) { - itemDustIndium = new BaseItemDust(ELEMENT.getInstance().INDIUM); + itemDustIndium = new BaseItemDust(MaterialsElements.getInstance().INDIUM); } // Springs + MaterialUtils.generateComponentAndAssignToAMaterial( + ComponentTypes.SPRING, + MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN); MaterialUtils - .generateComponentAndAssignToAMaterial(ComponentTypes.SPRING, ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SPRING, ELEMENT.STANDALONE.WHITE_METAL); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SPRING, ALLOY.NITINOL_60); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SPRING, ALLOY.AQUATIC_STEEL); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SPRING, ALLOY.EGLIN_STEEL); + .generateComponentAndAssignToAMaterial(ComponentTypes.SPRING, MaterialsElements.STANDALONE.WHITE_METAL); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SPRING, MaterialsAlloy.NITINOL_60); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SPRING, MaterialsAlloy.AQUATIC_STEEL); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SPRING, MaterialsAlloy.EGLIN_STEEL); // Small Springs - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SMALLSPRING, ALLOY.MARAGING250); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SMALLSPRING, ALLOY.NICHROME); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SMALLSPRING, ALLOY.STABALLOY); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SMALLSPRING, ALLOY.STEEL_BLACK); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SMALLSPRING, ALLOY.BLACK_TITANIUM); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SMALLSPRING, MaterialsAlloy.MARAGING250); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SMALLSPRING, MaterialsAlloy.NICHROME); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SMALLSPRING, MaterialsAlloy.STABALLOY); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SMALLSPRING, MaterialsAlloy.STEEL_BLACK); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.SMALLSPRING, MaterialsAlloy.BLACK_TITANIUM); // Fine Wire - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, ELEMENT.STANDALONE.WHITE_METAL); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, ELEMENT.getInstance().PALLADIUM); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, ELEMENT.getInstance().ZIRCONIUM); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, ALLOY.LEAGRISIUM); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, ALLOY.BABBIT_ALLOY); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, ALLOY.KOBOLDITE); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, ALLOY.HG1223); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, ALLOY.QUANTUM); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, ELEMENT.STANDALONE.HYPOGEN); MaterialUtils - .generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, ELEMENT.STANDALONE.CHRONOMATIC_GLASS); + .generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, MaterialsElements.STANDALONE.WHITE_METAL); + MaterialUtils + .generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, MaterialsElements.getInstance().PALLADIUM); + MaterialUtils + .generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, MaterialsElements.getInstance().ZIRCONIUM); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, MaterialsAlloy.LEAGRISIUM); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, MaterialsAlloy.BABBIT_ALLOY); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, MaterialsAlloy.KOBOLDITE); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, MaterialsAlloy.HG1223); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, MaterialsAlloy.QUANTUM); + MaterialUtils + .generateComponentAndAssignToAMaterial(ComponentTypes.FINEWIRE, MaterialsElements.STANDALONE.HYPOGEN); + MaterialUtils.generateComponentAndAssignToAMaterial( + ComponentTypes.FINEWIRE, + MaterialsElements.STANDALONE.CHRONOMATIC_GLASS); // Foil - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ALLOY.BLACK_TITANIUM); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ALLOY.BOTMIUM); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ALLOY.TITANSTEEL); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ALLOY.NITINOL_60); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ALLOY.QUANTUM); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ALLOY.LAURENIUM); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ELEMENT.STANDALONE.HYPOGEN); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ELEMENT.STANDALONE.ASTRAL_TITANIUM); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ELEMENT.STANDALONE.RHUGNOR); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ELEMENT.STANDALONE.WHITE_METAL); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ELEMENT.STANDALONE.ADVANCED_NITINOL); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ALLOY.PIKYONIUM); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ALLOY.CINOBITE); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ALLOY.LAFIUM); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ALLOY.TRINIUM_REINFORCED_STEEL); - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, ELEMENT.STANDALONE.CHRONOMATIC_GLASS); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsAlloy.BLACK_TITANIUM); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsAlloy.BOTMIUM); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsAlloy.TITANSTEEL); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsAlloy.NITINOL_60); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsAlloy.QUANTUM); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsAlloy.LAURENIUM); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsElements.STANDALONE.HYPOGEN); + MaterialUtils.generateComponentAndAssignToAMaterial( + ComponentTypes.FOIL, + MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN); + MaterialUtils + .generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsElements.STANDALONE.ASTRAL_TITANIUM); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsElements.STANDALONE.RHUGNOR); + MaterialUtils + .generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsElements.STANDALONE.WHITE_METAL); + MaterialUtils + .generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsElements.STANDALONE.ADVANCED_NITINOL); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsAlloy.PIKYONIUM); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsAlloy.CINOBITE); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsAlloy.LAFIUM); + MaterialUtils + .generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsAlloy.TRINIUM_REINFORCED_STEEL); + MaterialUtils + .generateComponentAndAssignToAMaterial(ComponentTypes.FOIL, MaterialsElements.STANDALONE.CHRONOMATIC_GLASS); // Gear - MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.GEAR, ELEMENT.STANDALONE.RHUGNOR); + MaterialUtils.generateComponentAndAssignToAMaterial(ComponentTypes.GEAR, MaterialsElements.STANDALONE.RHUGNOR); // Special Sillyness if (true) { if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("plateSodium", 1) == null) { - new BaseItemPlate(ELEMENT.getInstance().SODIUM); + new BaseItemPlate(MaterialsElements.getInstance().SODIUM); } - Material meatRaw = NONMATERIAL.MEAT; + Material meatRaw = MaterialsOther.MEAT; // A plate of Meat. if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("plateMeatRaw", 1) == null) { itemPlateRawMeat = new BaseItemPlate(meatRaw); @@ -966,22 +979,22 @@ public final class ModItems { // A plate of Vanadium. if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("plateVanadium", 1) == null) { - itemPlateVanadium = new BaseItemPlate(ELEMENT.getInstance().VANADIUM); + itemPlateVanadium = new BaseItemPlate(MaterialsElements.getInstance().VANADIUM); } // A plate of Lithium. if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("plateLithium", 1) == null) { - itemPlateLithium = new BaseItemPlate(ELEMENT.getInstance().LITHIUM); + itemPlateLithium = new BaseItemPlate(MaterialsElements.getInstance().LITHIUM); } // A plate of Europium. if ((ItemUtils.getItemStackOfAmountFromOreDictNoBroken("plateEuropium", 1) == null) - && CORE.ConfigSwitches.enableCustom_Pipes) { - itemPlateEuropium = new BaseItemPlate(ELEMENT.getInstance().EUROPIUM); + && GTPPCore.ConfigSwitches.enableCustom_Pipes) { + itemPlateEuropium = new BaseItemPlate(MaterialsElements.getInstance().EUROPIUM); } if ((ItemUtils.getItemStackOfAmountFromOreDictNoBroken("plateDoubleEuropium", 1) == null) - && CORE.ConfigSwitches.enableCustom_Pipes) { - itemDoublePlateEuropium = new BaseItemPlateDouble(ELEMENT.getInstance().EUROPIUM); + && GTPPCore.ConfigSwitches.enableCustom_Pipes) { + itemDoublePlateEuropium = new BaseItemPlateDouble(MaterialsElements.getInstance().EUROPIUM); } // Tumbaga Mix (For Simple Crafting) diff --git a/src/main/java/gtPlusPlus/core/item/base/BaseItemBurnable.java b/src/main/java/gtPlusPlus/core/item/base/BaseItemBurnable.java index 8bbc5a3b08..3ce461ffab 100644 --- a/src/main/java/gtPlusPlus/core/item/base/BaseItemBurnable.java +++ b/src/main/java/gtPlusPlus/core/item/base/BaseItemBurnable.java @@ -4,7 +4,7 @@ import net.minecraft.creativetab.CreativeTabs; import net.minecraft.item.ItemStack; import gtPlusPlus.api.objects.data.Pair; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.minecraft.ItemUtils; public class BaseItemBurnable extends CoreItem { @@ -23,7 +23,7 @@ public class BaseItemBurnable extends CoreItem { } public void registerFuel(int burn) { - CORE.burnables.add(new Pair<>(burn, ItemUtils.getSimpleStack(this, 1))); + GTPPCore.burnables.add(new Pair<>(burn, ItemUtils.getSimpleStack(this, 1))); } public final void registerOrdictionary(String name) { diff --git a/src/main/java/gtPlusPlus/core/item/base/BaseItemColourable.java b/src/main/java/gtPlusPlus/core/item/base/BaseItemColourable.java index d391207a56..6a224ddc87 100644 --- a/src/main/java/gtPlusPlus/core/item/base/BaseItemColourable.java +++ b/src/main/java/gtPlusPlus/core/item/base/BaseItemColourable.java @@ -14,7 +14,7 @@ import net.minecraft.util.EnumChatFormatting; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; public class BaseItemColourable extends Item { @@ -42,7 +42,7 @@ public class BaseItemColourable extends Item { this.setMaxDamage(maxDmg); this.setHasSubtypes(true); this.rarity = regRarity; - GT_LanguageManager.addStringLocalization("gtplusplus." + this.getUnlocalizedName() + ".tooltip", description); + GTLanguageManager.addStringLocalization("gtplusplus." + this.getUnlocalizedName() + ".tooltip", description); this.descColour = colour; this.hasEffect = Effect; this.componentColour = rgb; @@ -57,13 +57,13 @@ public class BaseItemColourable extends Item { final int stackSize, final int maxDmg, final String description, final EnumRarity regRarity, final EnumChatFormatting colour, final boolean Effect, int rgb) { this.setUnlocalizedName(unlocalizedName); - GT_LanguageManager.addStringLocalization("gtplusplus." + this.getUnlocalizedName() + ".name", displayName); + GTLanguageManager.addStringLocalization("gtplusplus." + this.getUnlocalizedName() + ".name", displayName); this.setTextureName(GTPlusPlus.ID + ":" + unlocalizedName); this.setCreativeTab(creativeTab); this.setMaxStackSize(stackSize); this.setMaxDamage(maxDmg); this.rarity = regRarity; - GT_LanguageManager.addStringLocalization("gtplusplus." + this.getUnlocalizedName() + ".tooltip", description); + GTLanguageManager.addStringLocalization("gtplusplus." + this.getUnlocalizedName() + ".tooltip", description); this.descColour = colour; this.hasEffect = Effect; this.componentColour = rgb; @@ -74,8 +74,7 @@ public class BaseItemColourable extends Item { @Override public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { list.add( - this.descColour - + GT_LanguageManager.getTranslation("gtplusplus." + this.getUnlocalizedName() + ".tooltip")); + this.descColour + GTLanguageManager.getTranslation("gtplusplus." + this.getUnlocalizedName() + ".tooltip")); // super.addInformation(stack, aPlayer, list, bool); } @@ -93,8 +92,8 @@ public class BaseItemColourable extends Item { @Override public String getItemStackDisplayName(final ItemStack tItem) { if (!("gtplusplus." + this.getUnlocalizedName() + ".name") - .equals(GT_LanguageManager.getTranslation("gtplusplus." + this.getUnlocalizedName() + ".name"))) { - return GT_LanguageManager.getTranslation("gtplusplus." + this.getUnlocalizedName() + ".name"); + .equals(GTLanguageManager.getTranslation("gtplusplus." + this.getUnlocalizedName() + ".name"))) { + return GTLanguageManager.getTranslation("gtplusplus." + this.getUnlocalizedName() + ".name"); } else return super.getItemStackDisplayName(tItem); } } diff --git a/src/main/java/gtPlusPlus/core/item/base/BaseItemComponent.java b/src/main/java/gtPlusPlus/core/item/base/BaseItemComponent.java index 6846f8febb..5a7bc4fa45 100644 --- a/src/main/java/gtPlusPlus/core/item/base/BaseItemComponent.java +++ b/src/main/java/gtPlusPlus/core/item/base/BaseItemComponent.java @@ -20,15 +20,15 @@ import net.minecraft.world.World; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TextureSet; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.data.StringUtils; @@ -71,15 +71,15 @@ public class BaseItemComponent extends Item { // if (componentType != ComponentTypes.DUST) - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( componentType.getOreDictName() + material.getUnlocalizedName(), ItemUtils.getSimpleStack(this)); if (componentType == ComponentTypes.GEAR) { - GT_OreDictUnificator.registerOre("gear" + material.getUnlocalizedName(), ItemUtils.getSimpleStack(this)); + GTOreDictUnificator.registerOre("gear" + material.getUnlocalizedName(), ItemUtils.getSimpleStack(this)); } registerComponent(); - GT_LanguageManager.addStringLocalization("gtplusplus.item." + unlocalName + ".name", getFormattedLangName()); + GTLanguageManager.addStringLocalization("gtplusplus.item." + unlocalName + ".name", getFormattedLangName()); } // For Cell Generation @@ -109,12 +109,12 @@ public class BaseItemComponent extends Item { this.setTextureName(GTPlusPlus.ID + ":" + "item" + ComponentTypes.CELL.COMPONENT_NAME); GameRegistry.registerItem(this, aFormattedNameForFluids); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( ComponentTypes.CELL.getOreDictName() + Utils.sanitizeStringKeepBrackets(localName), ItemUtils.getSimpleStack(this)); registerComponent(); - GT_LanguageManager + GTLanguageManager .addStringLocalization("gtplusplus.item." + this.unlocalName + ".name", getFormattedLangName()); } @@ -144,17 +144,17 @@ public class BaseItemComponent extends Item { + "]"); Material.mComponentMap.put(componentMaterial.getUnlocalizedName(), aMap); if (componentType == ComponentTypes.PLATE) { - GregTech_API.registerCover( + GregTechAPI.registerCover( componentMaterial.getPlate(1), - new GT_RenderedTexture( + new GTRenderedTexture( componentMaterial.getTextureSet().mTextures[71], componentMaterial.getRGBA(), false), null); } else if (componentType == ComponentTypes.PLATEDOUBLE) { - GregTech_API.registerCover( + GregTechAPI.registerCover( componentMaterial.getPlateDouble(1), - new GT_RenderedTexture( + new GTRenderedTexture( componentMaterial.getTextureSet().mTextures[72], componentMaterial.getRGBA(), false), @@ -169,7 +169,7 @@ public class BaseItemComponent extends Item { } public String getCorrectTextures() { - if (!CORE.ConfigSwitches.useGregtechTextures) { + if (!GTPPCore.ConfigSwitches.useGregtechTextures) { return GTPlusPlus.ID + ":" + "item" + this.componentType.COMPONENT_NAME; } String metType = "9j4852jyo3rjmh3owlhw9oe"; @@ -198,12 +198,12 @@ public class BaseItemComponent extends Item { public String getFluidName(String aKey) { String trans; - trans = GT_LanguageManager.getTranslation(aKey); + trans = GTLanguageManager.getTranslation(aKey); if (!trans.equals(aKey)) return trans; aKey = "fluid." + aKey; - trans = GT_LanguageManager.getTranslation(aKey); + trans = GTLanguageManager.getTranslation(aKey); if (!trans.equals(aKey)) return trans; - return GT_LanguageManager.addStringLocalization( + return GTLanguageManager.addStringLocalization( "gtplusplus.fluid." + this.materialName.toLowerCase() .replace(" ", ""), this.materialName); @@ -211,7 +211,7 @@ public class BaseItemComponent extends Item { @Override public String getItemStackDisplayName(ItemStack stack) { - return GT_LanguageManager.getTranslation("gtplusplus.item." + unlocalName + ".name") + return GTLanguageManager.getTranslation("gtplusplus.item." + unlocalName + ".name") .replace("%s", "%temp") .replace("%material", translatedMaterialName) .replace("%temp", "%s"); @@ -250,7 +250,7 @@ public class BaseItemComponent extends Item { } if (this.componentMaterial.isRadioactive) { - list.add(CORE.GT_Tooltip_Radioactive.get()); + list.add(GTPPCore.GT_Tooltip_Radioactive.get()); } if (this.componentType == ComponentTypes.INGOT || this.componentType == ComponentTypes.HOTINGOT) { @@ -324,7 +324,7 @@ public class BaseItemComponent extends Item { @Override @SideOnly(Side.CLIENT) public boolean requiresMultipleRenderPasses() { - return (CORE.ConfigSwitches.useGregtechTextures ? true : false); + return (GTPPCore.ConfigSwitches.useGregtechTextures ? true : false); } @SuppressWarnings("unchecked") @@ -332,10 +332,10 @@ public class BaseItemComponent extends Item { public int getColorFromItemStack(final ItemStack stack, final int renderPass) { if (this.componentType == ComponentTypes.CELL || this.componentType == ComponentTypes.PLASMACELL) { - if (renderPass == 0 && !CORE.ConfigSwitches.useGregtechTextures) { + if (renderPass == 0 && !GTPPCore.ConfigSwitches.useGregtechTextures) { return Utils.rgbtoHexValue(255, 255, 255); } - if (renderPass == 1 && CORE.ConfigSwitches.useGregtechTextures) { + if (renderPass == 1 && GTPPCore.ConfigSwitches.useGregtechTextures) { return Utils.rgbtoHexValue(255, 255, 255); } } @@ -380,7 +380,7 @@ public class BaseItemComponent extends Item { @Override public IIcon getIconFromDamageForRenderPass(final int damage, final int pass) { - if (CORE.ConfigSwitches.useGregtechTextures) { + if (GTPPCore.ConfigSwitches.useGregtechTextures) { if (pass == 0) { return this.base; } @@ -392,7 +392,7 @@ public class BaseItemComponent extends Item { @Override public void registerIcons(final IIconRegister i) { - if (CORE.ConfigSwitches.useGregtechTextures) { + if (GTPPCore.ConfigSwitches.useGregtechTextures) { this.base = i.registerIcon(getCorrectTextures()); this.overlay = i.registerIcon(getCorrectTextures() + "_OVERLAY"); } else { diff --git a/src/main/java/gtPlusPlus/core/item/base/BaseItemTCShard.java b/src/main/java/gtPlusPlus/core/item/base/BaseItemTCShard.java index 3ecb6960d6..a5792e236a 100644 --- a/src/main/java/gtPlusPlus/core/item/base/BaseItemTCShard.java +++ b/src/main/java/gtPlusPlus/core/item/base/BaseItemTCShard.java @@ -11,8 +11,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.world.World; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -35,22 +35,22 @@ public class BaseItemTCShard extends Item { this.setUnlocalizedName(this.unlocalName); if (Description != null) { for (int i = 0; i < Description.length; i++) { - GT_LanguageManager + GTLanguageManager .addStringLocalization("gtplusplus." + getUnlocalizedName() + ".tooltip." + i, Description[i]); } } this.setMaxStackSize(64); this.setTextureName(GTPlusPlus.ID + ":" + "itemShard"); GameRegistry.registerItem(this, this.unlocalName); - GT_OreDictUnificator.registerOre("shard" + DisplayName, ItemUtils.getSimpleStack(this)); - GT_OreDictUnificator.registerOre("gemInfused" + DisplayName, ItemUtils.getSimpleStack(this)); + GTOreDictUnificator.registerOre("shard" + DisplayName, ItemUtils.getSimpleStack(this)); + GTOreDictUnificator.registerOre("gemInfused" + DisplayName, ItemUtils.getSimpleStack(this)); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { for (int i = 0;; i++) { - String tooltip = GT_LanguageManager + String tooltip = GTLanguageManager .getTranslation("gtplusplus." + this.getUnlocalizedName() + ".tooltip" + "." + i); if (!("gtplusplus." + this.getUnlocalizedName() + ".tooltip" + "." + i).equals(tooltip)) { list.add(tooltip); diff --git a/src/main/java/gtPlusPlus/core/item/base/CoreItem.java b/src/main/java/gtPlusPlus/core/item/base/CoreItem.java index 4745fda281..89e9c4b038 100644 --- a/src/main/java/gtPlusPlus/core/item/base/CoreItem.java +++ b/src/main/java/gtPlusPlus/core/item/base/CoreItem.java @@ -16,7 +16,7 @@ import net.minecraft.world.World; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -215,7 +215,7 @@ public class CoreItem extends Item { @Override public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { for (int i = 0;; i++) { - String tooltip = GT_LanguageManager + String tooltip = GTLanguageManager .getTranslation("gtplusplus." + this.getUnlocalizedName() + ".tooltip" + "." + i); if (!("gtplusplus." + this.getUnlocalizedName() + ".tooltip" + "." + i).equals(tooltip)) { list.add(tooltip); @@ -274,7 +274,7 @@ public class CoreItem extends Item { public void setItemDescription(String[] description) { for (int i = 0; i < description.length; i++) { - GT_LanguageManager.addStringLocalization( + GTLanguageManager.addStringLocalization( "gtplusplus." + this.getUnlocalizedName() + ".tooltip" + "." + i, description[i]); } diff --git a/src/main/java/gtPlusPlus/core/item/base/cell/BaseItemCell.java b/src/main/java/gtPlusPlus/core/item/base/cell/BaseItemCell.java index 1140390375..228c1803eb 100644 --- a/src/main/java/gtPlusPlus/core/item/base/cell/BaseItemCell.java +++ b/src/main/java/gtPlusPlus/core/item/base/cell/BaseItemCell.java @@ -10,7 +10,7 @@ import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; import gtPlusPlus.core.item.base.BaseItemComponent; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.FluidUtils; @@ -47,7 +47,7 @@ public class BaseItemCell extends BaseItemComponent { @Override public void registerIcons(final IIconRegister i) { - if (CORE.ConfigSwitches.useGregtechTextures) { + if (GTPPCore.ConfigSwitches.useGregtechTextures) { this.base = i.registerIcon(GregTech.ID + ":" + "materialicons/METALLIC/" + "cell"); this.overlay = i.registerIcon(GregTech.ID + ":" + "materialicons/METALLIC/" + "cell_OVERLAY"); } else { @@ -62,10 +62,10 @@ public class BaseItemCell extends BaseItemComponent { @Override public int getColorFromItemStack(final ItemStack stack, final int renderPass) { - if (renderPass == 0 && !CORE.ConfigSwitches.useGregtechTextures) { + if (renderPass == 0 && !GTPPCore.ConfigSwitches.useGregtechTextures) { return Utils.rgbtoHexValue(230, 230, 230); } - if (renderPass == 1 && CORE.ConfigSwitches.useGregtechTextures) { + if (renderPass == 1 && GTPPCore.ConfigSwitches.useGregtechTextures) { return Utils.rgbtoHexValue(230, 230, 230); } return this.componentColour; diff --git a/src/main/java/gtPlusPlus/core/item/base/dusts/BaseItemDustUnique.java b/src/main/java/gtPlusPlus/core/item/base/dusts/BaseItemDustUnique.java index 2592fe3cf7..a451bfc77b 100644 --- a/src/main/java/gtPlusPlus/core/item/base/dusts/BaseItemDustUnique.java +++ b/src/main/java/gtPlusPlus/core/item/base/dusts/BaseItemDustUnique.java @@ -14,10 +14,10 @@ import net.minecraft.item.ItemStack; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.data.StringUtils; import gtPlusPlus.core.util.math.MathUtils; @@ -61,7 +61,7 @@ public class BaseItemDustUnique extends Item { } else { type = "%material Dust"; } - GT_LanguageManager.addStringLocalization("gtplusplus." + this.getUnlocalizedName() + ".name", type); + GTLanguageManager.addStringLocalization("gtplusplus." + this.getUnlocalizedName() + ".name", type); String temp = ""; Logger.WARNING("Unlocalized name for OreDict nameGen: " + this.getUnlocalizedName()); @@ -84,7 +84,7 @@ public class BaseItemDustUnique extends Item { Logger.WARNING("Generating OreDict Name: " + temp); } if ((temp != null) && !temp.equals("")) { - GT_OreDictUnificator.registerOre(temp, ItemUtils.getSimpleStack(this)); + GTOreDictUnificator.registerOre(temp, ItemUtils.getSimpleStack(this)); } registerComponent(); } @@ -115,12 +115,12 @@ public class BaseItemDustUnique extends Item { @Override public String getItemStackDisplayName(final ItemStack iStack) { - return GT_LanguageManager.getTranslation("gtplusplus." + getUnlocalizedName() + ".name") - .replace("%material", GT_LanguageManager.getTranslation("gtplusplus.material." + materialName)); + return GTLanguageManager.getTranslation("gtplusplus." + getUnlocalizedName() + ".name") + .replace("%material", GTLanguageManager.getTranslation("gtplusplus.material." + materialName)); } private String getCorrectTexture(final String pileSize) { - if (!CORE.ConfigSwitches.useGregtechTextures) { + if (!GTPPCore.ConfigSwitches.useGregtechTextures) { if ((pileSize.equals("dust")) || (pileSize.equals("Dust"))) { this.setTextureName(GTPlusPlus.ID + ":" + "dust"); } else { @@ -141,7 +141,7 @@ public class BaseItemDustUnique extends Item { @Override public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { if (this.sRadiation > 0) { - list.add(CORE.GT_Tooltip_Radioactive.get()); + list.add(GTPPCore.GT_Tooltip_Radioactive.get()); } if (this.chemicalNotation.length() > 0 && !chemicalNotation.equals("") && !chemicalNotation.equals("NullFormula")) { diff --git a/src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngotHot.java b/src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngotHot.java index 9d22c0faf8..82020229f0 100644 --- a/src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngotHot.java +++ b/src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngotHot.java @@ -3,7 +3,7 @@ package gtPlusPlus.core.item.base.ingots; import static gregtech.api.enums.Mods.GTPlusPlus; import static gregtech.api.enums.Mods.GregTech; import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.Entity; @@ -14,10 +14,10 @@ import net.minecraft.world.World; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.item.base.BaseItemComponent; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.EntityUtils; @@ -54,7 +54,7 @@ public class BaseItemIngotHot extends BaseItemIngot { private void generateRecipe() { Logger.WARNING("Adding Vacuum Freezer recipe for a Hot Ingot of " + this.materialName + "."); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(this)) .itemOutputs(this.outputIngot.copy()) .duration(Math.max(this.componentMaterial.getMass() * 3L, 1L) * TICKS) @@ -78,7 +78,7 @@ public class BaseItemIngotHot extends BaseItemIngot { @Override @SideOnly(Side.CLIENT) public boolean requiresMultipleRenderPasses() { - if (CORE.ConfigSwitches.useGregtechTextures) { + if (GTPPCore.ConfigSwitches.useGregtechTextures) { return true; } else { return false; @@ -88,7 +88,7 @@ public class BaseItemIngotHot extends BaseItemIngot { @Override public void registerIcons(final IIconRegister i) { - if (CORE.ConfigSwitches.useGregtechTextures) { + if (GTPPCore.ConfigSwitches.useGregtechTextures) { this.base = i.registerIcon(GregTech.ID + ":" + "materialicons/METALLIC/" + "ingotHot"); this.overlay = i.registerIcon(GregTech.ID + ":" + "materialicons/METALLIC/" + "ingotHot_OVERLAY"); } else { @@ -100,9 +100,9 @@ public class BaseItemIngotHot extends BaseItemIngot { @Override public IIcon getIconFromDamageForRenderPass(final int damage, final int pass) { - if (pass == 0 && CORE.ConfigSwitches.useGregtechTextures) { + if (pass == 0 && GTPPCore.ConfigSwitches.useGregtechTextures) { return this.base; - } else if (pass == 1 && CORE.ConfigSwitches.useGregtechTextures) { + } else if (pass == 1 && GTPPCore.ConfigSwitches.useGregtechTextures) { return this.overlay; } else { return this.overlay; diff --git a/src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngotOld.java b/src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngotOld.java new file mode 100644 index 0000000000..28407a4557 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngotOld.java @@ -0,0 +1,106 @@ +package gtPlusPlus.core.item.base.ingots; + +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.recipe.RecipeMaps.compressorRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.entity.Entity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTOreDictUnificator; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.EntityUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class BaseItemIngotOld extends Item { + + protected int colour; + protected String materialName; + protected String unlocalName; + + public BaseItemIngotOld(final String unlocalizedName, final String materialName, final int colour, + final int sRadioactivity) { + this.setUnlocalizedName(unlocalizedName); + this.setCreativeTab(AddToCreativeTab.tabMisc); + this.unlocalName = unlocalizedName; + this.setMaxStackSize(64); + this.setTextureName(GTPlusPlus.ID + ":" + "itemIngot"); + this.colour = colour; + this.materialName = materialName; + this.sRadiation = sRadioactivity; + GameRegistry.registerItem(this, unlocalizedName); + String temp = ""; + if (this.unlocalName.contains("itemIngot")) { + temp = this.unlocalName.replace("itemI", "i"); + } else if (this.unlocalName.contains("itemHotIngot")) { + temp = this.unlocalName.replace("itemHotIngot", "ingotHot"); + } + if ((temp != null) && !temp.equals("")) { + GTOreDictUnificator.registerOre(temp, ItemUtils.getSimpleStack(this)); + } + // this.generateCompressorRecipe(); + } + + @Override + public String getItemStackDisplayName(final ItemStack p_77653_1_) { + + return (this.materialName + " Ingot"); + } + + public final String getMaterialName() { + return this.materialName; + } + + @Override + public int getColorFromItemStack(final ItemStack stack, final int HEX_OxFFFFFF) { + if (this.colour == 0) { + return MathUtils.generateSingularRandomHexValue(); + } + return this.colour; + } + + private void generateCompressorRecipe() { + if (this.unlocalName.contains("itemIngot")) { + final ItemStack tempStack = ItemUtils.getSimpleStack(this, 9); + ItemStack tempOutput = null; + String temp = this.getUnlocalizedName() + .replace("item.itemIngot", "block"); + Logger.WARNING("Unlocalized name for OreDict nameGen: " + this.getUnlocalizedName()); + if (this.getUnlocalizedName() + .contains("item.")) { + temp = this.getUnlocalizedName() + .replace("item.", ""); + Logger.WARNING("Generating OreDict Name: " + temp); + } + temp = temp.replace("itemIngot", "block"); + Logger.WARNING("Generating OreDict Name: " + temp); + if ((temp != null) && !temp.equals("")) { + tempOutput = ItemUtils.getItemStackOfAmountFromOreDict(temp, 1); + if (tempOutput != null) { + GTValues.RA.stdBuilder() + .itemInputs(tempStack) + .itemOutputs(tempOutput) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + } + } + } else if (this.unlocalName.contains("itemHotIngot")) { + return; + } + } + + protected final int sRadiation; + + @Override + public void onUpdate(final ItemStack iStack, final World world, final Entity entityHolding, final int p_77663_4_, + final boolean p_77663_5_) { + EntityUtils.applyRadiationDamageToEntity(iStack.stackSize, this.sRadiation, world, entityHolding); + } +} diff --git a/src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngot_OLD.java b/src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngot_OLD.java deleted file mode 100644 index 6335820c9a..0000000000 --- a/src/main/java/gtPlusPlus/core/item/base/ingots/BaseItemIngot_OLD.java +++ /dev/null @@ -1,106 +0,0 @@ -package gtPlusPlus.core.item.base.ingots; - -import static gregtech.api.enums.Mods.GTPlusPlus; -import static gregtech.api.recipe.RecipeMaps.compressorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.entity.Entity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_OreDictUnificator; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.EntityUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class BaseItemIngot_OLD extends Item { - - protected int colour; - protected String materialName; - protected String unlocalName; - - public BaseItemIngot_OLD(final String unlocalizedName, final String materialName, final int colour, - final int sRadioactivity) { - this.setUnlocalizedName(unlocalizedName); - this.setCreativeTab(AddToCreativeTab.tabMisc); - this.unlocalName = unlocalizedName; - this.setMaxStackSize(64); - this.setTextureName(GTPlusPlus.ID + ":" + "itemIngot"); - this.colour = colour; - this.materialName = materialName; - this.sRadiation = sRadioactivity; - GameRegistry.registerItem(this, unlocalizedName); - String temp = ""; - if (this.unlocalName.contains("itemIngot")) { - temp = this.unlocalName.replace("itemI", "i"); - } else if (this.unlocalName.contains("itemHotIngot")) { - temp = this.unlocalName.replace("itemHotIngot", "ingotHot"); - } - if ((temp != null) && !temp.equals("")) { - GT_OreDictUnificator.registerOre(temp, ItemUtils.getSimpleStack(this)); - } - // this.generateCompressorRecipe(); - } - - @Override - public String getItemStackDisplayName(final ItemStack p_77653_1_) { - - return (this.materialName + " Ingot"); - } - - public final String getMaterialName() { - return this.materialName; - } - - @Override - public int getColorFromItemStack(final ItemStack stack, final int HEX_OxFFFFFF) { - if (this.colour == 0) { - return MathUtils.generateSingularRandomHexValue(); - } - return this.colour; - } - - private void generateCompressorRecipe() { - if (this.unlocalName.contains("itemIngot")) { - final ItemStack tempStack = ItemUtils.getSimpleStack(this, 9); - ItemStack tempOutput = null; - String temp = this.getUnlocalizedName() - .replace("item.itemIngot", "block"); - Logger.WARNING("Unlocalized name for OreDict nameGen: " + this.getUnlocalizedName()); - if (this.getUnlocalizedName() - .contains("item.")) { - temp = this.getUnlocalizedName() - .replace("item.", ""); - Logger.WARNING("Generating OreDict Name: " + temp); - } - temp = temp.replace("itemIngot", "block"); - Logger.WARNING("Generating OreDict Name: " + temp); - if ((temp != null) && !temp.equals("")) { - tempOutput = ItemUtils.getItemStackOfAmountFromOreDict(temp, 1); - if (tempOutput != null) { - GT_Values.RA.stdBuilder() - .itemInputs(tempStack) - .itemOutputs(tempOutput) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - } - } - } else if (this.unlocalName.contains("itemHotIngot")) { - return; - } - } - - protected final int sRadiation; - - @Override - public void onUpdate(final ItemStack iStack, final World world, final Entity entityHolding, final int p_77663_4_, - final boolean p_77663_5_) { - EntityUtils.applyRadiationDamageToEntity(iStack.stackSize, this.sRadiation, world, entityHolding); - } -} diff --git a/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockGtBlock.java b/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockGtBlock.java index 98c652a1ba..92876663f0 100644 --- a/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockGtBlock.java +++ b/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockGtBlock.java @@ -14,7 +14,7 @@ import net.minecraft.world.World; import gtPlusPlus.core.block.base.BasicBlock.BlockTypes; import gtPlusPlus.core.block.base.BlockBaseModular; import gtPlusPlus.core.block.base.BlockBaseOre; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.material.MaterialStack; import gtPlusPlus.core.util.minecraft.EntityUtils; @@ -149,7 +149,7 @@ public class ItemBlockGtBlock extends ItemBlock { if (this.mMaterial != null) { if (this.mMaterial.vRadiationLevel > 0) { - list.add(CORE.GT_Tooltip_Radioactive.get()); + list.add(GTPPCore.GT_Tooltip_Radioactive.get()); } } diff --git a/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockOre.java b/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockOre.java index 0cee16b3f6..45d0e4f60e 100644 --- a/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockOre.java +++ b/src/main/java/gtPlusPlus/core/item/base/itemblock/ItemBlockOre.java @@ -14,7 +14,7 @@ import net.minecraft.world.World; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.block.base.BlockBaseOre; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.material.MaterialStack; import gtPlusPlus.core.util.minecraft.EntityUtils; @@ -76,7 +76,7 @@ public class ItemBlockOre extends ItemBlock { // Radioactive? if (this.mThisRadiation > 0) { - list.add(CORE.GT_Tooltip_Radioactive.get()); + list.add(GTPPCore.GT_Tooltip_Radioactive.get()); } if (this.mThisMaterial != null) { diff --git a/src/main/java/gtPlusPlus/core/item/base/misc/BaseItemMisc.java b/src/main/java/gtPlusPlus/core/item/base/misc/BaseItemMisc.java index 020becc687..6c8e0ce81a 100644 --- a/src/main/java/gtPlusPlus/core/item/base/misc/BaseItemMisc.java +++ b/src/main/java/gtPlusPlus/core/item/base/misc/BaseItemMisc.java @@ -16,8 +16,8 @@ import net.minecraft.world.World; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -48,12 +48,12 @@ public class BaseItemMisc extends Item { } if (description != null) { for (int i = 0; i < description.length; i++) { - GT_LanguageManager + GTLanguageManager .addStringLocalization("gtplusplus." + this.getUnlocalizedName() + ".tooltip." + i, description[i]); } } GameRegistry.registerItem(this, this.unlocalName); - GT_OreDictUnificator.registerOre(miscType.getOreDictPrefix() + unlocalName, ItemUtils.getSimpleStack(this)); + GTOreDictUnificator.registerOre(miscType.getOreDictPrefix() + unlocalName, ItemUtils.getSimpleStack(this)); } private String getCorrectTextures() { @@ -95,7 +95,7 @@ public class BaseItemMisc extends Item { public final void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { for (int i = 0;; i++) { - String tooltip = GT_LanguageManager + String tooltip = GTLanguageManager .getTranslation("gtplusplus." + this.getUnlocalizedName() + ".tooltip" + "." + i); if (!("gtplusplus." + this.getUnlocalizedName() + ".tooltip" + "." + i).equals(tooltip)) { list.add(tooltip); diff --git a/src/main/java/gtPlusPlus/core/item/base/ore/BaseItemMilledOre.java b/src/main/java/gtPlusPlus/core/item/base/ore/BaseItemMilledOre.java index b7d07e5ef0..52cada6e01 100644 --- a/src/main/java/gtPlusPlus/core/item/base/ore/BaseItemMilledOre.java +++ b/src/main/java/gtPlusPlus/core/item/base/ore/BaseItemMilledOre.java @@ -1,15 +1,15 @@ package gtPlusPlus.core.item.base.ore; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.millingRecipes; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.minecraft.MaterialUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; @@ -30,26 +30,26 @@ public class BaseItemMilledOre extends BaseOreComponent { ItemStack millingBall_Alumina = GregtechItemList.Milling_Ball_Alumina.get(0); ItemStack millingBall_Soapstone = GregtechItemList.Milling_Ball_Soapstone.get(0); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(10), oreStack, millingBall_Alumina) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(10), oreStack, millingBall_Alumina) .itemOutputs(milledStackOres1) .duration(2 * MINUTES) .eut(materialEU) .addTo(millingRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(11), oreStack, millingBall_Soapstone) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(11), oreStack, millingBall_Soapstone) .itemOutputs(milledStackOres2) .duration(2 * MINUTES + 30 * SECONDS) .eut(materialEU) .addTo(millingRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(10), crushedStack, millingBall_Alumina) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(10), crushedStack, millingBall_Alumina) .itemOutputs(milledStackCrushed1) .duration(1 * MINUTES) .eut(materialEU) .addTo(millingRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(11), crushedStack, millingBall_Soapstone) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(11), crushedStack, millingBall_Soapstone) .itemOutputs(milledStackCrushed2) .duration(1 * MINUTES + 15 * SECONDS) .eut(materialEU) diff --git a/src/main/java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java b/src/main/java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java index 2074bb2ede..dd4ad12df8 100644 --- a/src/main/java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java +++ b/src/main/java/gtPlusPlus/core/item/base/ore/BaseOreComponent.java @@ -19,10 +19,10 @@ import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.EntityUtils; @@ -54,7 +54,7 @@ public class BaseOreComponent extends Item { this.componentColour = material.getRgbAsHex(); GameRegistry.registerItem(this, this.unlocalName); registerComponent(); - GT_OreDictUnificator + GTOreDictUnificator .registerOre(componentType.getComponent() + material.getUnlocalizedName(), ItemUtils.getSimpleStack(this)); } @@ -127,7 +127,8 @@ public class BaseOreComponent extends Item { list.add(temp); } if (this.componentMaterial.isRadioactive) { - list.add(CORE.GT_Tooltip_Radioactive.get() + " | Level: " + this.componentMaterial.vRadiationLevel); + list.add( + GTPPCore.GT_Tooltip_Radioactive.get() + " | Level: " + this.componentMaterial.vRadiationLevel); } } else { String aChemicalFormula = Material.sChemicalFormula.get(materialName.toLowerCase()); @@ -157,7 +158,7 @@ public class BaseOreComponent extends Item { /** * Rendering Related - * + * * @author Alkalus * */ @@ -179,7 +180,7 @@ public class BaseOreComponent extends Item { this.overlay = par1IconRegister .registerIcon(GTPlusPlus.ID + ":" + "processing/MilledOre/milled_OVERLAY"); } - } else if (CORE.ConfigSwitches.useGregtechTextures) { + } else if (GTPPCore.ConfigSwitches.useGregtechTextures) { // Logger.MATERIALS(this.componentType.getPrefix()+this.componentMaterial.getLocalizedName()+this.componentType.DISPLAY_NAME+" // is using `"+GregTech.ID + ":" + "materialicons/METALLIC/" + this.componentType.COMPONENT_NAME+"' as the // layer 0 texture path."); @@ -209,10 +210,10 @@ public class BaseOreComponent extends Item { } return this.componentColour; } else { - if (renderPass == 0 && !CORE.ConfigSwitches.useGregtechTextures) { + if (renderPass == 0 && !GTPPCore.ConfigSwitches.useGregtechTextures) { return this.componentColour; } - if (renderPass == 1 && CORE.ConfigSwitches.useGregtechTextures) { + if (renderPass == 1 && GTPPCore.ConfigSwitches.useGregtechTextures) { return Utils.rgbtoHexValue(230, 230, 230); } return this.componentColour; diff --git a/src/main/java/gtPlusPlus/core/item/base/plates/BaseItemPlate_OLD.java b/src/main/java/gtPlusPlus/core/item/base/plates/BaseItemPlate_OLD.java index 168d5236c6..0279a396de 100644 --- a/src/main/java/gtPlusPlus/core/item/base/plates/BaseItemPlate_OLD.java +++ b/src/main/java/gtPlusPlus/core/item/base/plates/BaseItemPlate_OLD.java @@ -11,9 +11,9 @@ import net.minecraft.item.ItemStack; import net.minecraft.world.World; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.data.StringUtils; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.EntityUtils; @@ -54,7 +54,7 @@ public class BaseItemPlate_OLD extends Item { .contains("itemplate")) { temp = this.unlocalName.replace("itemP", "p"); if ((temp != null) && !temp.equals("")) { - GT_OreDictUnificator.registerOre(temp, ItemUtils.getSimpleStack(this)); + GTOreDictUnificator.registerOre(temp, ItemUtils.getSimpleStack(this)); } } } @@ -81,7 +81,7 @@ public class BaseItemPlate_OLD extends Item { @Override public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { if (this.sRadiation > 0) { - list.add(CORE.GT_Tooltip_Radioactive.get()); + list.add(GTPPCore.GT_Tooltip_Radioactive.get()); } if (StringUtils.containsSuperOrSubScript(this.chemicalNotation)) { list.add(this.chemicalNotation); diff --git a/src/main/java/gtPlusPlus/core/item/bauble/BaseBauble.java b/src/main/java/gtPlusPlus/core/item/bauble/BaseBauble.java index 76121ef266..f1184fb5bb 100644 --- a/src/main/java/gtPlusPlus/core/item/bauble/BaseBauble.java +++ b/src/main/java/gtPlusPlus/core/item/bauble/BaseBauble.java @@ -17,7 +17,7 @@ import baubles.api.BaubleType; import baubles.api.IBauble; import cpw.mods.fml.common.Optional; import gregtech.api.enums.Mods; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.util.minecraft.NBTUtils; @@ -47,10 +47,10 @@ public class BaseBauble extends Item implements IBauble { @Override public String getItemStackDisplayName(final ItemStack tItem) { String key = "gtplusplus." + getUnlocalizedName() + ".name"; - if (key.equals(GT_LanguageManager.getTranslation(key))) { + if (key.equals(GTLanguageManager.getTranslation(key))) { return super.getItemStackDisplayName(tItem).replaceAll(".name", ""); } - return GT_LanguageManager.getTranslation(key); + return GTLanguageManager.getTranslation(key); } @Override diff --git a/src/main/java/gtPlusPlus/core/item/bauble/BatteryPackBaseBauble.java b/src/main/java/gtPlusPlus/core/item/bauble/BatteryPackBaseBauble.java index 881146b15d..01cd0ec0c1 100644 --- a/src/main/java/gtPlusPlus/core/item/bauble/BatteryPackBaseBauble.java +++ b/src/main/java/gtPlusPlus/core/item/bauble/BatteryPackBaseBauble.java @@ -19,7 +19,7 @@ import baubles.api.BaubleType; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.xmod.gregtech.common.helpers.ChargingHelper; @@ -29,7 +29,7 @@ import ic2.api.item.IElectricItem; public class BatteryPackBaseBauble extends ElectricBaseBauble { public BatteryPackBaseBauble(int tier) { - super(BaubleType.BELT, tier, GT_Values.V[tier] * 20 * 300, "GTPP.BattPack.0" + tier + ".name"); + super(BaubleType.BELT, tier, GTValues.V[tier] * 20 * 300, "GTPP.BattPack.0" + tier + ".name"); String aUnlocalName = "GTPP.BattPack.0" + tier + ".name"; this.setCreativeTab(AddToCreativeTab.tabMachines); if (GameRegistry.findItem(GTPlusPlus.ID, aUnlocalName) == null) { diff --git a/src/main/java/gtPlusPlus/core/item/bauble/ElectricBaseBauble.java b/src/main/java/gtPlusPlus/core/item/bauble/ElectricBaseBauble.java index ab17e91232..5717a1e926 100644 --- a/src/main/java/gtPlusPlus/core/item/bauble/ElectricBaseBauble.java +++ b/src/main/java/gtPlusPlus/core/item/bauble/ElectricBaseBauble.java @@ -20,9 +20,9 @@ import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Mods; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.util.math.MathUtils; import ic2.api.item.ElectricItem; @@ -112,7 +112,7 @@ public abstract class ElectricBaseBauble extends BaseBauble implements IElectric @Override public final double getTransferLimit(final ItemStack itemStack) { - return GT_Values.V[mTier]; + return GTValues.V[mTier]; } @Override @@ -141,13 +141,13 @@ public abstract class ElectricBaseBauble extends BaseBauble implements IElectric EnumChatFormatting.GRAY + aTier + ": [" + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.getTier(stack)) + + GTUtility.formatNumbers(this.getTier(stack)) + EnumChatFormatting.GRAY + "] " + aInputLimit + ": [" + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.getTransferLimit(stack)) + + GTUtility.formatNumbers(this.getTransferLimit(stack)) + EnumChatFormatting.GRAY + aEUT + "]"); @@ -155,12 +155,12 @@ public abstract class ElectricBaseBauble extends BaseBauble implements IElectric EnumChatFormatting.GRAY + aCurrentPower + ": [" + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.getCharge(stack)) + + GTUtility.formatNumbers(this.getCharge(stack)) + EnumChatFormatting.GRAY + aEU + "] [" + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(MathUtils.findPercentage(this.getCharge(stack), this.getMaxCharge(stack))) + + GTUtility.formatNumbers(MathUtils.findPercentage(this.getCharge(stack), this.getMaxCharge(stack))) + EnumChatFormatting.GRAY + "%]"); super.addInformation(stack, aPlayer, list, bool); diff --git a/src/main/java/gtPlusPlus/core/item/bauble/FireProtectionBauble.java b/src/main/java/gtPlusPlus/core/item/bauble/FireProtectionBauble.java index c3c371ae35..35adc35e96 100644 --- a/src/main/java/gtPlusPlus/core/item/bauble/FireProtectionBauble.java +++ b/src/main/java/gtPlusPlus/core/item/bauble/FireProtectionBauble.java @@ -18,7 +18,7 @@ import baubles.api.BaubleType; import cpw.mods.fml.common.registry.GameRegistry; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.preloader.PreloaderCore; public class FireProtectionBauble extends BaseBauble { @@ -26,7 +26,7 @@ public class FireProtectionBauble extends BaseBauble { static { isImmuneToFire = ReflectionUtils - .getField(Entity.class, !CORE_Preloader.DEV_ENVIRONMENT ? "func_70045_F" : "isImmuneToFire"); + .getField(Entity.class, !PreloaderCore.DEV_ENVIRONMENT ? "func_70045_F" : "isImmuneToFire"); } public static boolean fireImmune(Entity aEntity) { diff --git a/src/main/java/gtPlusPlus/core/item/chemistry/AgriculturalChem.java b/src/main/java/gtPlusPlus/core/item/chemistry/AgriculturalChem.java index 2459e08bfc..4bbf29c88f 100644 --- a/src/main/java/gtPlusPlus/core/item/chemistry/AgriculturalChem.java +++ b/src/main/java/gtPlusPlus/core/item/chemistry/AgriculturalChem.java @@ -6,9 +6,9 @@ import static gregtech.api.enums.Mods.TinkerConstruct; import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; import static gregtech.api.recipe.RecipeMaps.compressorRecipes; import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.semiFluidFuels; @@ -23,16 +23,16 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.api.objects.minecraft.ItemPackage; -import gtPlusPlus.core.item.circuit.GTPP_IntegratedCircuit_Item; +import gtPlusPlus.core.item.circuit.GTPPIntegratedCircuitItem; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.FluidUtils; @@ -152,7 +152,7 @@ public class AgriculturalChem extends ItemPackage { mAlgae = new ItemAlgaeBase(); mAgrichemItem1 = new ItemAgrichemBase(); - mBioCircuit = new GTPP_IntegratedCircuit_Item("BioRecipeSelector", "bioscience/BioCircuit"); + mBioCircuit = new GTPPIntegratedCircuitItem("BioRecipeSelector", "bioscience/BioCircuit"); GregtechItemList.Circuit_BioRecipeSelector.set(mBioCircuit); mAlgaeBiosmass = ItemUtils.simpleMetaStack(mAgrichemItem1, 0, 1); @@ -422,8 +422,8 @@ public class AgriculturalChem extends ItemPackage { ItemStack aDirtDust = ItemUtils.getSimpleStack(dustDirt, 1); // Poop Juice to Basic Slurry - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(10)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(10)) .itemOutputs(aDirtDust, aDirtDust, aManureByprod1, aManureByprod1, aManureByprod1, aManureByprod1) .outputChances(2000, 2000, 500, 500, 250, 250) .fluidInputs(FluidUtils.getFluidStack(PoopJuice, 1000)) @@ -433,8 +433,8 @@ public class AgriculturalChem extends ItemPackage { .addTo(centrifugeRecipes); // More Efficient way to get byproducts, less Slurry - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(20)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(20)) .itemOutputs(aDirtDust, aDirtDust, aManureByprod1, aManureByprod1, aManureByprod2, aManureByprod2) .outputChances(4000, 3000, 1250, 1250, 675, 675) .fluidInputs(FluidUtils.getFluidStack(PoopJuice, 1000)) @@ -446,7 +446,7 @@ public class AgriculturalChem extends ItemPackage { private static void addAdvancedSlurryRecipes() { - ItemStack aCircuit = GT_Utility.getIntegratedCircuit(10); + ItemStack aCircuit = GTUtility.getIntegratedCircuit(10); ItemStack aBone; ItemStack aMeat; ItemStack aEmptyCells = Materials.Empty.getCells(2); @@ -459,7 +459,7 @@ public class AgriculturalChem extends ItemPackage { for (ItemStack aMeatStack : mList_Master_Meats) { aMeat = ItemUtils.getSimpleStack(aMeatStack, 5); // Poop Juice to Fertile Slurry - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(aCircuit, aBone, aMeat, aInputCells) .itemOutputs(aEmptyCells) .fluidInputs(aBloodStack) @@ -481,7 +481,7 @@ public class AgriculturalChem extends ItemPackage { aPeat = ItemUtils.getSimpleStack(aPeatStack, 3); for (ItemStack aMeatStack : mList_Master_Meats) { aMeat = ItemUtils.getSimpleStack(aMeatStack, 5); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(aPeat, aMeat) .itemOutputs(aOutputDust) .fluidInputs(aInputFluid) @@ -492,7 +492,7 @@ public class AgriculturalChem extends ItemPackage { aPeat = ItemUtils.getSimpleStack(aPeatStack, 2); for (ItemStack aMeatStack : mList_Master_FruitVege) { aMeat = ItemUtils.getSimpleStack(aMeatStack, 9); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(aPeat, aMeat) .itemOutputs(aOutputDust) .fluidInputs(aInputFluid) @@ -512,7 +512,7 @@ public class AgriculturalChem extends ItemPackage { aPeat = ItemUtils.getSimpleStack(aPeatStack, 5); for (ItemStack aMeatStack : mList_Master_Meats) { aMeat = ItemUtils.getSimpleStack(aMeatStack, 7); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(aPeat, aMeat) .itemOutputs(aOutputDust) .fluidInputs(aInputFluid) @@ -523,7 +523,7 @@ public class AgriculturalChem extends ItemPackage { aPeat = ItemUtils.getSimpleStack(aPeatStack, 3); for (ItemStack aMeatStack : mList_Master_FruitVege) { aMeat = ItemUtils.getSimpleStack(aMeatStack, 12); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(aPeat, aMeat) .itemOutputs(aOutputDust) .fluidInputs(aInputFluid) @@ -558,9 +558,9 @@ public class AgriculturalChem extends ItemPackage { if (aItemInstance instanceof Item aForestryFert) { aFertForestry = ItemUtils.getSimpleStack((Item) aItemInstance); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(11), + GTUtility.getIntegratedCircuit(11), ItemUtils.getSimpleStack(aDustOrganicFert, 4)) .itemOutputs(ItemUtils.getSimpleStack(aForestryFert, 3), aManureByprod, aManureByprod) .outputChances(100_00, 20_00, 20_00) @@ -578,8 +578,8 @@ public class AgriculturalChem extends ItemPackage { * IC2 Support */ aFertIC2 = ItemUtils.getItemStackFromFQRN("IC2:itemFertilizer", 1); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(12), ItemUtils.getSimpleStack(aDustOrganicFert, 4)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(12), ItemUtils.getSimpleStack(aDustOrganicFert, 4)) .itemOutputs(ItemUtils.getItemStackFromFQRN("IC2:itemFertilizer", 3), aManureByprod, aManureByprod) .outputChances(100_00, 20_00, 20_00) .eut(240) @@ -587,7 +587,7 @@ public class AgriculturalChem extends ItemPackage { .addTo(chemicalDehydratorRecipes); // Dirt Production - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(dustDirt, 9)) .itemOutputs(ItemUtils.getSimpleStack(Blocks.dirt)) .duration(2 * SECONDS) @@ -597,13 +597,13 @@ public class AgriculturalChem extends ItemPackage { // Centrifuge Byproducts // Ammonium Nitrate, Phosphates, Calcium, Copper, Carbon - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(aManureByprod, 4), GT_Utility.getIntegratedCircuit(20)) + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(aManureByprod, 4), GTUtility.getIntegratedCircuit(20)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Phosphorus, 2L), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Calcium, 2L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Copper, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1L), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Phosphorus, 2L), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Calcium, 2L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Copper, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 1L), ItemUtils.getSimpleStack(dustDirt, 1), ItemUtils.getItemStackOfAmountFromOreDict("dustTinyAmmoniumNitrate", 1)) .outputChances(2500, 2500, 750, 1000, 5000, 250) @@ -614,21 +614,21 @@ public class AgriculturalChem extends ItemPackage { .addTo(centrifugeRecipes); // Add Fuel Usages - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs(FluidUtils.getFluidStack(PoopJuice, 1000)) .duration(0) .eut(0) .metadata(FUEL_VALUE, 12) .addTo(semiFluidFuels); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs(FluidUtils.getFluidStack(ManureSlurry, 1000)) .duration(0) .eut(0) .metadata(FUEL_VALUE, 24) .addTo(semiFluidFuels); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs(FluidUtils.getFluidStack(FertileManureSlurry, 1000)) .duration(0) .eut(0) @@ -636,15 +636,15 @@ public class AgriculturalChem extends ItemPackage { .addTo(semiFluidFuels); // Red Slurry / Tailings Processing - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(CI.getNumberedBioCircuit(10)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Iron, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Copper, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Tin, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Sulfur, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Nickel, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lead, 1L)) + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Iron, 1L), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Copper, 1L), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Tin, 1L), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Sulfur, 1L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Nickel, 1L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lead, 1L)) .outputChances(3000, 3000, 2000, 2000, 1000, 1000) .fluidInputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 1000)) .fluidOutputs(Materials.Water.getFluid(500)) diff --git a/src/main/java/gtPlusPlus/core/item/chemistry/CoalTar.java b/src/main/java/gtPlusPlus/core/item/chemistry/CoalTar.java index b9f5e58eef..87e5a7b22f 100644 --- a/src/main/java/gtPlusPlus/core/item/chemistry/CoalTar.java +++ b/src/main/java/gtPlusPlus/core/item/chemistry/CoalTar.java @@ -3,11 +3,11 @@ package gtPlusPlus.core.item.chemistry; import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; import static gregtech.api.recipe.RecipeMaps.pyrolyseRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.semiFluidFuels; @@ -15,13 +15,13 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_RecipeConstants; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipeConstants; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.minecraft.ItemPackage; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.Utils; @@ -48,7 +48,7 @@ public class CoalTar extends ItemPackage { // C2H6O = C2H4 + H2O if (bioEth1 != null) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(CI.getNumberedBioCircuit(17), ItemUtils.getItemStackOfAmountFromOreDict("cellEmpty", 1)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("cellEthylene", 1)) .fluidInputs(bioEth1) @@ -59,7 +59,7 @@ public class CoalTar extends ItemPackage { } if (bioEth2 != null) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(CI.getNumberedBioCircuit(18), ItemUtils.getItemStackOfAmountFromOreDict("cellEmpty", 1)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("cellEthylene", 1)) .fluidInputs(bioEth2) @@ -72,7 +72,7 @@ public class CoalTar extends ItemPackage { public static void recipeCreateBenzene() { // C7H8 + 2H = CH4 + C6H6 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(Materials.Toluene.getCells(1)) .itemOutputs(Materials.Benzene.getCells(1)) .fluidInputs(Materials.Hydrogen.getGas(2000)) @@ -85,10 +85,8 @@ public class CoalTar extends ItemPackage { public static void recipeCreateEthylbenzene() { // C2H4 + C6H6 = C8H10 - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getItemStackOfAmountFromOreDict("cellEthylene", 2), - GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("cellEthylene", 2), GTUtility.getIntegratedCircuit(1)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("cellEmpty", 2)) .fluidInputs(FluidUtils.getFluidStack("benzene", 2000)) .fluidOutputs(FluidUtils.getFluidStack("fluid.ethylbenzene", 2000)) @@ -96,8 +94,8 @@ public class CoalTar extends ItemPackage { .eut(TierEU.RECIPE_LV) .addTo(UniversalChemical); - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("cellBenzene", 2), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("cellBenzene", 2), GTUtility.getIntegratedCircuit(1)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("cellEmpty", 2)) .fluidInputs(FluidUtils.getFluidStack("ethylene", 2000)) .fluidOutputs(FluidUtils.getFluidStack("fluid.ethylbenzene", 2000)) @@ -108,10 +106,10 @@ public class CoalTar extends ItemPackage { public static void recipeCoalToCoalTar() { // Charcoal - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(8), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 32L)) + GTUtility.getIntegratedCircuit(8), + GTOreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 32L)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustSmallDirt", 2)) .fluidOutputs(FluidUtils.getFluidStack("fluid.coaltar", 800)) .duration(18 * SECONDS) @@ -119,10 +117,10 @@ public class CoalTar extends ItemPackage { .addTo(pyrolyseRecipes); // Lignite - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(8), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Lignite, 16L)) + GTUtility.getIntegratedCircuit(8), + GTOreDictUnificator.get(OrePrefixes.gem, Materials.Lignite, 16L)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustSmallDarkAsh", 2)) .fluidOutputs(FluidUtils.getFluidStack("fluid.coaltar", 800)) .duration(54 * SECONDS) @@ -130,10 +128,10 @@ public class CoalTar extends ItemPackage { .addTo(pyrolyseRecipes); // Coal - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(8), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 12L)) + GTUtility.getIntegratedCircuit(8), + GTOreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 12L)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustSmallDarkAsh", 2)) .fluidOutputs(FluidUtils.getFluidStack("fluid.coaltar", 2200)) .duration(36 * SECONDS) @@ -141,8 +139,8 @@ public class CoalTar extends ItemPackage { .addTo(pyrolyseRecipes); // Coke - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(8), ItemUtils.getItemStackOfAmountFromOreDict("fuelCoke", 8)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(8), ItemUtils.getItemStackOfAmountFromOreDict("fuelCoke", 8)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustSmallAsh", 3)) .fluidOutputs(FluidUtils.getFluidStack("fluid.coaltar", 3400)) .duration(18 * SECONDS) @@ -158,15 +156,15 @@ public class CoalTar extends ItemPackage { FluidUtils.getFluidStack("liquid_naphtha", 150), FluidUtils.getFluidStack("fluid.ethylbenzene", 200), FluidUtils.getFluidStack("fluid.anthracene", 50), FluidUtils.getFluidStack("fluid.kerosene", 600) }; for (int i = 0; i < distOutputs.length; i++) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(i + 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(i + 1)) .fluidInputs(FluidUtils.getFluidStack("fluid.coaltar", 1000)) .fluidOutputs(distOutputs[i]) .duration(30 * SECONDS) .eut(64) .addTo(distilleryRecipes); } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs(FluidUtils.getFluidStack("fluid.coaltar", 1000)) .fluidOutputs(distOutputs) .duration(15 * SECONDS) @@ -176,7 +174,7 @@ public class CoalTar extends ItemPackage { private static void recipeCoalTarOilToSulfuricOilToNaphthalene() { // SulfuricCoalTarOil - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getItemStackOfAmountFromOreDict("cellCoalTarOil", 8), ItemUtils.getItemStackOfAmountFromOreDict("cellSulfuricAcid", 8)) @@ -185,8 +183,8 @@ public class CoalTar extends ItemPackage { .eut(TierEU.RECIPE_LV) .addTo(UniversalChemical); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(6)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(6)) .fluidInputs(FluidUtils.getFluidStack("fluid.sulfuriccoaltaroil", 1000)) .fluidOutputs(FluidUtils.getFluidStack("fluid.naphthalene", 1000)) .eut(TierEU.RECIPE_LV) @@ -196,7 +194,7 @@ public class CoalTar extends ItemPackage { private static void recipeNaphthaleneToPhthalicAcid() { // SulfuricCoalTarOil - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(Materials.Lithium.getDust(5)) .fluidInputs(FluidUtils.getFluidStack(Naphthalene, 2000)) .fluidOutputs(Materials.PhthalicAcid.getFluid(2500)) @@ -207,7 +205,7 @@ public class CoalTar extends ItemPackage { } private static void recipePhthalicAcidToPhthalicAnhydride() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(CI.getNumberedBioCircuit(15)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustPhthalicAnhydride", 15)) .fluidInputs(Materials.PhthalicAcid.getFluid(1000)) @@ -234,15 +232,15 @@ public class CoalTar extends ItemPackage { recipePhthalicAcidToPhthalicAnhydride(); // Burn the coal gas! - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("cellCoalGas", 1)) .metadata(FUEL_VALUE, 96) - .metadata(FUEL_TYPE, GT_RecipeConstants.FuelType.GasTurbine.ordinal()) + .metadata(FUEL_TYPE, GTRecipeConstants.FuelType.GasTurbine.ordinal()) .duration(0) .eut(0) - .addTo(GT_RecipeConstants.Fuel); + .addTo(GTRecipeConstants.Fuel); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs( FluidContainerRegistry .getFluidForFilledItem(ItemUtils.getItemStackOfAmountFromOreDict("cellSulfuricCoalTarOil", 1))) @@ -251,7 +249,7 @@ public class CoalTar extends ItemPackage { .metadata(FUEL_VALUE, 64) .addTo(semiFluidFuels); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs( FluidContainerRegistry .getFluidForFilledItem(ItemUtils.getItemStackOfAmountFromOreDict("cellCoalTarOil", 1))) @@ -260,7 +258,7 @@ public class CoalTar extends ItemPackage { .metadata(FUEL_VALUE, 32) .addTo(semiFluidFuels); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .fluidInputs( FluidContainerRegistry .getFluidForFilledItem(ItemUtils.getItemStackOfAmountFromOreDict("cellCoalTar", 1))) diff --git a/src/main/java/gtPlusPlus/core/item/chemistry/GenericChem.java b/src/main/java/gtPlusPlus/core/item/chemistry/GenericChem.java index 65bc52739d..99885d77e8 100644 --- a/src/main/java/gtPlusPlus/core/item/chemistry/GenericChem.java +++ b/src/main/java/gtPlusPlus/core/item/chemistry/GenericChem.java @@ -2,12 +2,12 @@ package gtPlusPlus.core.item.chemistry; import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.CHEMPLANT_CASING_TIER; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.CHEMPLANT_CASING_TIER; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; @@ -17,25 +17,25 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TextureSet; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_RecipeConstants; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipeConstants; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.minecraft.ItemPackage; import gtPlusPlus.core.item.chemistry.general.ItemGenericChemBase; -import gtPlusPlus.core.item.circuit.GTPP_IntegratedCircuit_Item; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.MISC_MATERIALS; +import gtPlusPlus.core.item.circuit.GTPPIntegratedCircuitItem; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.material.MaterialMisc; import gtPlusPlus.core.material.MaterialStack; -import gtPlusPlus.core.material.NONMATERIAL; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.MaterialsOther; import gtPlusPlus.core.material.state.MaterialState; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.minecraft.FluidUtils; @@ -63,10 +63,10 @@ public class GenericChem extends ItemPackage { false, null, 0, - new MaterialStack(NONMATERIAL.PTFE, 75), - new MaterialStack(NONMATERIAL.PLASTIC, 15), - new MaterialStack(ELEMENT.getInstance().CARBON, 5), - new MaterialStack(ELEMENT.getInstance().SODIUM, 5)); + new MaterialStack(MaterialsOther.PTFE, 75), + new MaterialStack(MaterialsOther.PLASTIC, 15), + new MaterialStack(MaterialsElements.getInstance().CARBON, 5), + new MaterialStack(MaterialsElements.getInstance().SODIUM, 5)); /** * Fluids @@ -146,7 +146,7 @@ public class GenericChem extends ItemPackage { MaterialGenerator.generate(TEFLON, false); mGenericChemItem1 = new ItemGenericChemBase(); - mAdvancedCircuit = new GTPP_IntegratedCircuit_Item("T3RecipeSelector", "science/general/AdvancedCircuit"); + mAdvancedCircuit = new GTPPIntegratedCircuitItem("T3RecipeSelector", "science/general/AdvancedCircuit"); GregtechItemList.Circuit_T3RecipeSelector.set(mAdvancedCircuit); registerItemStacks(); @@ -382,11 +382,11 @@ public class GenericChem extends ItemPackage { private void recipeSodiumEthoxide() { // C2H5OH + Na → C2H5ONa + H - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(16), ELEMENT.getInstance().SODIUM.getDust(1)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(16), MaterialsElements.getInstance().SODIUM.getDust(1)) .itemOutputs(ItemUtils.getSimpleStack(mSodiumEthoxide, 9)) .fluidInputs(Materials.Ethanol.getFluid(1000)) - .fluidOutputs(ELEMENT.getInstance().HYDROGEN.getFluidStack(1000)) + .fluidOutputs(MaterialsElements.getInstance().HYDROGEN.getFluidStack(1000)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_MV) .metadata(CHEMPLANT_CASING_TIER, 2) @@ -395,9 +395,9 @@ public class GenericChem extends ItemPackage { private void recipePotassiumHydroxide() { // Ca(OH)2 + K2O + CO2 → CaCO3 + 2 KOH - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(18), + GTUtility.getIntegratedCircuit(18), Materials.Potash.getDust(3), ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumHydroxide", 5)) .itemOutputs( @@ -414,8 +414,8 @@ public class GenericChem extends ItemPackage { private void recipeEthylXanthates() { // Potassium ethyl xanthate - CH3CH2OH + CS2 + KOH → C3H5KOS2 + H2O - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(17), ItemUtils.getSimpleStack(mPotassiumHydroxide, 3)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(17), ItemUtils.getSimpleStack(mPotassiumHydroxide, 3)) .itemOutputs(ItemUtils.getSimpleStack(mPotassiumEthylXanthate, 12)) .fluidInputs(Materials.Ethanol.getFluid(1000), FluidUtils.getFluidStack(Carbon_Disulfide, 1000)) .fluidOutputs(FluidUtils.getWater(1000)) @@ -425,8 +425,8 @@ public class GenericChem extends ItemPackage { .addTo(chemicalPlantRecipes); // Sodium ethyl xanthate - CH3CH2ONa + CS2 → CH3CH2OCS2Na - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(17), ItemUtils.getSimpleStack(mSodiumEthoxide, 9)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(17), ItemUtils.getSimpleStack(mSodiumEthoxide, 9)) .itemOutputs(ItemUtils.getSimpleStack(mSodiumEthylXanthate, 12)) .fluidInputs(FluidUtils.getFluidStack(Carbon_Disulfide, 1000)) .duration(60 * SECONDS) @@ -437,20 +437,20 @@ public class GenericChem extends ItemPackage { private void recipeCarbonDisulfide() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getItemStackOfAmountFromOreDict("fuelCoke", 8), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 16L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 16L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.DarkAsh, 1L)) .fluidOutputs(FluidUtils.getFluidStack(Carbon_Disulfide, 4000)) .duration(10 * MINUTES) .eut(TierEU.RECIPE_LV) .metadata(COIL_HEAT, 1500) .addTo(blastFurnaceRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(20), + GTUtility.getIntegratedCircuit(20), ItemUtils.getSimpleStack(mBrownCatalyst, 0), ItemUtils.getItemStackOfAmountFromOreDict("dustSulfur", 4)) .fluidInputs(FluidUtils.getFluidStack(CoalTar.Coal_Gas, 1000)) @@ -465,7 +465,7 @@ public class GenericChem extends ItemPackage { private void recipeMutatedLivingSolder() { // Endgame soldering alloy meant for the bioware circuit line and beyond. - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mInfiniteMutationCatalyst, 0), ItemList.Circuit_Chip_Biocell.get(64), @@ -475,7 +475,7 @@ public class GenericChem extends ItemPackage { FluidUtils.getFluidStack("plasma.tin", 18000), FluidUtils.getFluidStack("plasma.bismuth", 18000), FluidUtils.getFluidStack("cryotheum", 4000)) - .fluidOutputs(MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(144 * 280)) + .fluidOutputs(MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(144 * 280)) .duration(13 * MINUTES + 20 * SECONDS) .eut(3842160) .metadata(CHEMPLANT_CASING_TIER, 7) @@ -488,18 +488,18 @@ public class GenericChem extends ItemPackage { // Burnables // Gas Fuels - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("cellNitrobenzene", 1)) .metadata(FUEL_VALUE, 1600) .metadata(FUEL_TYPE, 1) .duration(0) .eut(0) - .addTo(GT_RecipeConstants.Fuel); + .addTo(GTRecipeConstants.Fuel); } private void recipeGrindingBallAlumina() { - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mAlumina, 64), GT_Utility.getIntegratedCircuit(10)) + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mAlumina, 64), GTUtility.getIntegratedCircuit(10)) .itemOutputs(ItemUtils.getSimpleStack(mMillingBallAlumina, 8)) .fluidInputs(FluidUtils.getFluidStack(GenericChem.Aniline, 4000)) .duration(3 * MINUTES) @@ -508,10 +508,10 @@ public class GenericChem extends ItemPackage { } private void recipeGrindingBallSoapstone() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Soapstone, 32L), - GT_Utility.getIntegratedCircuit(10)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Soapstone, 32L), + GTUtility.getIntegratedCircuit(10)) .itemOutputs(ItemUtils.getSimpleStack(mMillingBallSoapstone, 8)) .fluidInputs(FluidUtils.getFluidStack(AgrichemFluids.mLiquidResin, 2500)) .duration(2 * MINUTES) @@ -522,7 +522,7 @@ public class GenericChem extends ItemPackage { private void recipeCyclohexane() { // C6H6 + 6H = C6H12 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getTierTwoChip(), ItemUtils.getSimpleStack(mBrownCatalyst, 0)) .fluidInputs(FluidUtils.getFluidStack(Benzene, 1000), FluidUtils.getFluidStack("hydrogen", 6000)) .fluidOutputs(FluidUtils.getFluidStack(Cyclohexane, 1000)) @@ -536,7 +536,7 @@ public class GenericChem extends ItemPackage { private void recipeCyclohexanone() { // C6H12 + 2O(Air) = C6H10O + H2O - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getTierTwoChip(), ItemUtils.getSimpleStack(mBlueCatalyst, 0)) .fluidInputs(FluidUtils.getFluidStack(Cyclohexane, 1000), FluidUtils.getFluidStack("air", 4000)) .fluidOutputs(FluidUtils.getFluidStack(Cyclohexanone, 1000)) @@ -544,7 +544,7 @@ public class GenericChem extends ItemPackage { .eut(TierEU.RECIPE_MV) .metadata(CHEMPLANT_CASING_TIER, 2) .addTo(chemicalPlantRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getTierTwoChip()) .fluidInputs(FluidUtils.getFluidStack(Cyclohexane, 1000), FluidUtils.getFluidStack("oxygen", 2000)) .fluidOutputs(FluidUtils.getFluidStack(Cyclohexanone, 1000)) @@ -557,12 +557,12 @@ public class GenericChem extends ItemPackage { private void recipeCatalystRed() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getTierOneChip(), CI.getEmptyCatalyst(10), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 2L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 2L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 2L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 2L)) .itemOutputs(ItemUtils.getSimpleStack(mRedCatalyst, 10)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_LV) @@ -571,12 +571,12 @@ public class GenericChem extends ItemPackage { private void recipeCatalystYellow() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getTierThreeChip(), CI.getEmptyCatalyst(10), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tungsten, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 4L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tungsten, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 4L)) .itemOutputs(ItemUtils.getSimpleStack(mYellowCatalyst, 10)) .duration(1 * MINUTES) .eut(TierEU.RECIPE_EV) @@ -585,12 +585,12 @@ public class GenericChem extends ItemPackage { private void recipeCatalystBlue() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getTierTwoChip(), CI.getEmptyCatalyst(10), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cobalt, 3L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 3L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cobalt, 3L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 3L)) .itemOutputs(ItemUtils.getSimpleStack(mBlueCatalyst, 10)) .duration(40 * SECONDS) .eut(TierEU.RECIPE_HV) @@ -599,12 +599,12 @@ public class GenericChem extends ItemPackage { private void recipeCatalystOrange() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getTierTwoChip(), CI.getEmptyCatalyst(10), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 5L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 5L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 5L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Palladium, 5L)) .itemOutputs(ItemUtils.getSimpleStack(mOrangeCatalyst, 10)) .duration(40 * SECONDS) .eut(TierEU.RECIPE_HV) @@ -613,12 +613,12 @@ public class GenericChem extends ItemPackage { private void recipeCatalystPurple() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getTierFourChip(), CI.getEmptyCatalyst(10), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 6L), - ELEMENT.getInstance().RUTHENIUM.getDust(6)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iridium, 6L), + MaterialsElements.getInstance().RUTHENIUM.getDust(6)) .itemOutputs(ItemUtils.getSimpleStack(mPurpleCatalyst, 10)) .duration(2 * MINUTES) .eut(TierEU.RECIPE_IV) @@ -627,12 +627,12 @@ public class GenericChem extends ItemPackage { private void recipeCatalystBrown() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getTierOneChip(), CI.getEmptyCatalyst(10), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4L)) .itemOutputs(ItemUtils.getSimpleStack(mBrownCatalyst, 10)) .duration(15 * SECONDS) .eut(TierEU.RECIPE_LV) @@ -641,12 +641,12 @@ public class GenericChem extends ItemPackage { private void recipeCatalystPink() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getTierThreeChip(), CI.getEmptyCatalyst(10), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 4L), - ELEMENT.getInstance().RHODIUM.getDust(4)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Platinum, 4L), + MaterialsElements.getInstance().RHODIUM.getDust(4)) .itemOutputs(ItemUtils.getSimpleStack(mPinkCatalyst, 10)) .duration(30 * SECONDS) .eut(TierEU.RECIPE_EV) @@ -655,7 +655,7 @@ public class GenericChem extends ItemPackage { private void recipeCatalystFormaldehyde() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getTierThreeChip(), CI.getEmptyCatalyst(4), @@ -668,13 +668,13 @@ public class GenericChem extends ItemPackage { private void recipeCatalystSolidAcid() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getTierThreeChip(), CI.getEmptyCatalyst(5), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lapis, 2L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lapis, 2L)) .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mSolidAcidCatalyst, 5)) - .fluidInputs(MISC_MATERIALS.SOLID_ACID_MIXTURE.getFluidStack(1000)) + .fluidInputs(MaterialMisc.SOLID_ACID_MIXTURE.getFluidStack(1000)) .duration(30 * SECONDS) .eut(TierEU.RECIPE_EV) .addTo(assemblerRecipes); @@ -682,12 +682,12 @@ public class GenericChem extends ItemPackage { private void recipeCatalystInfiniteMutation() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getTierThreeChip(), CI.getEmptyCatalyst(5), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Infinity, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 10L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Infinity, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Naquadria, 10L)) .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mInfiniteMutationCatalyst, 5)) .duration(5 * SECONDS) .eut(TierEU.RECIPE_UHV) @@ -697,7 +697,7 @@ public class GenericChem extends ItemPackage { private void recipeCadaverineAndPutrescine() { // Basic Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getTierOneChip(), ItemUtils.getSimpleStack(Items.rotten_flesh, 64)) .fluidInputs(FluidUtils.getHotWater(2000)) .fluidOutputs(FluidUtils.getFluidStack(Cadaverine, 250), FluidUtils.getFluidStack(Putrescine, 250)) @@ -706,7 +706,7 @@ public class GenericChem extends ItemPackage { .metadata(CHEMPLANT_CASING_TIER, 1) .addTo(chemicalPlantRecipes); // Advanced Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getTierTwoChip(), ItemUtils.getSimpleStack(Items.rotten_flesh, 128), @@ -723,7 +723,7 @@ public class GenericChem extends ItemPackage { private void recipeAniline() { // C6H5NO2 + 6H = C6H7N + 2H2O - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getTierThreeChip(), ItemUtils.getSimpleStack(mBlueCatalyst, 0)) .fluidInputs(FluidUtils.getFluidStack(NitroBenzene, 1000), FluidUtils.getFluidStack("hydrogen", 6000)) .fluidOutputs(FluidUtils.getFluidStack(Aniline, 1000)) @@ -737,7 +737,7 @@ public class GenericChem extends ItemPackage { private void recipeNitroBenzene() { // C6H6 + HNO3 =H2SO4= C6H5NO2 +H2O - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getTierThreeChip()) .fluidInputs( FluidUtils.getFluidStack(Benzene, 5000), @@ -755,9 +755,9 @@ public class GenericChem extends ItemPackage { private void recipe2Ethylanthraquinone() { // C6H4(CO)2O + C6H5CH2CH3 = C6H4(CO)2C6H3CH2CH3 + H2O - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(4), + GTUtility.getIntegratedCircuit(4), ItemUtils.getItemStackOfAmountFromOreDict("dustPhthalicAnhydride", 15)) .fluidInputs(FluidUtils.getFluidStack(CoalTar.Ethylbenzene, 1000)) .fluidOutputs(FluidUtils.getFluidStack(Ethylanthraquinone2, 1000)) @@ -771,8 +771,8 @@ public class GenericChem extends ItemPackage { private void recipe2Ethylanthrahydroquinone() { // C6H4(CO)2C6H3CH2CH3 + 2H = C6H4(COH)2C6H3CH2CH3 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(4), ItemUtils.getSimpleStack(mOrangeCatalyst, 0)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(4), ItemUtils.getSimpleStack(mOrangeCatalyst, 0)) .fluidInputs( FluidUtils.getFluidStack(Ethylanthraquinone2, 1000), FluidUtils.getFluidStack("hydrogen", 2000)) @@ -786,7 +786,7 @@ public class GenericChem extends ItemPackage { private void recipeLithiumPeroxide() { // 2HLiO2 = Li2O2 + H2O2 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroperoxide", 8)) .fluidOutputs(FluidUtils.getFluidStack("fluid.hydrogenperoxide", 1000)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumPeroxide", 4)) @@ -799,9 +799,9 @@ public class GenericChem extends ItemPackage { private void recipeLithiumHydroperoxide() { // LiOH + H2O2 = HLiO2 + H2O - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(4), + GTUtility.getIntegratedCircuit(4), ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroxide", 3)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroperoxide", 4)) .fluidInputs(FluidUtils.getFluidStack("fluid.hydrogenperoxide", 1000)) @@ -815,8 +815,8 @@ public class GenericChem extends ItemPackage { private void recipeHydrogenPeroxide() { // C6H4(COH)2C6H3CH2CH3 + 2O =(C6H4CH)2= H2O2 + C6H4(CO)2C6H3CH2CH3 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(4)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(4)) .fluidInputs( FluidUtils.getFluidStack("air", 20000), FluidUtils.getFluidStack(Ethylanthrahydroquinone2, 5000), @@ -828,8 +828,8 @@ public class GenericChem extends ItemPackage { .eut(240) .metadata(CHEMPLANT_CASING_TIER, 1) .addTo(chemicalPlantRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(4)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(4)) .fluidInputs( Materials.Oxygen.getGas(10000), FluidUtils.getFluidStack(Ethylanthrahydroquinone2, 5000), @@ -861,7 +861,7 @@ public class GenericChem extends ItemPackage { } private static void recipeAdvancedChip() { - GT_ModHandler.addShapelessCraftingRecipe( + GTModHandler.addShapelessCraftingRecipe( GregtechItemList.Circuit_T3RecipeSelector.getWithDamage(1L, 0L), 0, new Object[] { OrePrefixes.circuit.get(Materials.HV) }); diff --git a/src/main/java/gtPlusPlus/core/item/chemistry/IonParticles.java b/src/main/java/gtPlusPlus/core/item/chemistry/IonParticles.java index d4f5e832f6..c7738751c2 100644 --- a/src/main/java/gtPlusPlus/core/item/chemistry/IonParticles.java +++ b/src/main/java/gtPlusPlus/core/item/chemistry/IonParticles.java @@ -15,7 +15,7 @@ import net.minecraft.util.IIcon; import gregtech.api.enums.Materials; import gtPlusPlus.core.item.base.misc.BaseItemParticle; -import gtPlusPlus.core.material.ELEMENT; +import gtPlusPlus.core.material.MaterialsElements; import gtPlusPlus.core.util.Utils; public class IonParticles extends BaseItemParticle { @@ -24,16 +24,16 @@ public class IonParticles extends BaseItemParticle { public static HashMap MetaToNameMap = new HashMap<>(); public IonParticles() { - super("Ion", ELEMENT.NAMES.length, EnumRarity.rare); + super("Ion", MaterialsElements.NAMES.length, EnumRarity.rare); } - public static IIcon[] overlays = new IIcon[ELEMENT.NAMES.length]; + public static IIcon[] overlays = new IIcon[MaterialsElements.NAMES.length]; public static IIcon baseTexture; static { // Generate Ions int key = 0; - for (String s : ELEMENT.NAMES) { + for (String s : MaterialsElements.NAMES) { // Map names to Meta NameToMetaMap.put(Utils.sanitizeString(s.toLowerCase()), key); MetaToNameMap.put(key, Utils.sanitizeString(s.toLowerCase())); @@ -60,7 +60,7 @@ public class IonParticles extends BaseItemParticle { @Override public String getUnlocalizedName(final ItemStack itemStack) { - return "item.particle.ion" + "." + ELEMENT.NAMES[itemStack.getItemDamage()]; + return "item.particle.ion" + "." + MaterialsElements.NAMES[itemStack.getItemDamage()]; } private static boolean createNBT(ItemStack rStack) { diff --git a/src/main/java/gtPlusPlus/core/item/chemistry/MilledOreProcessing.java b/src/main/java/gtPlusPlus/core/item/chemistry/MilledOreProcessing.java index 5979fc76ef..078dcdee88 100644 --- a/src/main/java/gtPlusPlus/core/item/chemistry/MilledOreProcessing.java +++ b/src/main/java/gtPlusPlus/core/item/chemistry/MilledOreProcessing.java @@ -2,10 +2,10 @@ package gtPlusPlus.core.item.chemistry; import static gregtech.api.enums.Mods.BiomesOPlenty; import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.CHEMPLANT_CASING_TIER; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.CHEMPLANT_CASING_TIER; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.*; import java.util.HashMap; @@ -14,27 +14,27 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.Fluid; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.api.objects.data.Pair; import gtPlusPlus.api.objects.data.Quad; import gtPlusPlus.api.objects.minecraft.ItemPackage; import gtPlusPlus.core.item.base.ore.BaseItemMilledOre; -import gtPlusPlus.core.material.ELEMENT; import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.NONMATERIAL; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.MaterialsOther; 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.NBTUtils; -import gtPlusPlus.xmod.bop.HANDLER_BiomesOPlenty; -import gtPlusPlus.xmod.bop.blocks.BOP_Block_Registrator; +import gtPlusPlus.xmod.bop.BiomesOPlentyHandler; +import gtPlusPlus.xmod.bop.blocks.BOPBlockRegistrator; import gtPlusPlus.xmod.gregtech.common.helpers.FlotationRecipeHandler; public class MilledOreProcessing extends ItemPackage { @@ -217,57 +217,57 @@ public class MilledOreProcessing extends ItemPackage { // milledSphalerite registerOreDataForMilledType( SphaleriteFlotationFroth, - ELEMENT.getInstance().ZINC, + MaterialsElements.getInstance().ZINC, 180, - ELEMENT.getInstance().IRON, + MaterialsElements.getInstance().IRON, 120, - ELEMENT.getInstance().INDIUM, + MaterialsElements.getInstance().INDIUM, 64, - ELEMENT.getInstance().GERMANIUM, + MaterialsElements.getInstance().GERMANIUM, 15); // milledChalcopyrite registerOreDataForMilledType( ChalcopyriteFlotationFroth, - ELEMENT.getInstance().COPPER, + MaterialsElements.getInstance().COPPER, 180, - ELEMENT.getInstance().IRON, + MaterialsElements.getInstance().IRON, 120, - ELEMENT.getInstance().CADMIUM, + MaterialsElements.getInstance().CADMIUM, 50, - ELEMENT.getInstance().INDIUM, + MaterialsElements.getInstance().INDIUM, 10); // milledNickel registerOreDataForMilledType( NickelFlotationFroth, - ELEMENT.getInstance().NICKEL, + MaterialsElements.getInstance().NICKEL, 150, - ELEMENT.getInstance().COBALT, + MaterialsElements.getInstance().COBALT, 120, - ELEMENT.getInstance().RHODIUM, + MaterialsElements.getInstance().RHODIUM, 32, - ELEMENT.getInstance().RUTHENIUM, + MaterialsElements.getInstance().RUTHENIUM, 16); // milledPlatinum registerOreDataForMilledType( PlatinumFlotationFroth, - ELEMENT.getInstance().PLATINUM, + MaterialsElements.getInstance().PLATINUM, 120, - ELEMENT.getInstance().RHODIUM, + MaterialsElements.getInstance().RHODIUM, 60, - ELEMENT.getInstance().SELENIUM, + MaterialsElements.getInstance().SELENIUM, 40, - ELEMENT.getInstance().TELLURIUM, + MaterialsElements.getInstance().TELLURIUM, 10); // milledPentlandite registerOreDataForMilledType( PentlanditeFlotationFroth, - ELEMENT.getInstance().IRON, + MaterialsElements.getInstance().IRON, 150, - ELEMENT.getInstance().NICKEL, + MaterialsElements.getInstance().NICKEL, 100, - ELEMENT.getInstance().PROMETHIUM, + MaterialsElements.getInstance().PROMETHIUM, 20, - ELEMENT.getInstance().HAFNIUM, + MaterialsElements.getInstance().HAFNIUM, 10); /* @@ -276,68 +276,68 @@ public class MilledOreProcessing extends ItemPackage { // milledRedstone registerOreDataForMilledType( RedstoneFlotationFroth, - NONMATERIAL.REDSTONE, + MaterialsOther.REDSTONE, 300, - ELEMENT.getInstance().CHROMIUM, + MaterialsElements.getInstance().CHROMIUM, 60, MaterialUtils.generateMaterialFromGtENUM(Materials.Firestone), 45, - ELEMENT.getInstance().DYSPROSIUM, + MaterialsElements.getInstance().DYSPROSIUM, 16); // milledSpessartine registerOreDataForMilledType( SpessartineFlotationFroth, - ELEMENT.getInstance().MANGANESE, + MaterialsElements.getInstance().MANGANESE, 150, - ELEMENT.getInstance().ALUMINIUM, + MaterialsElements.getInstance().ALUMINIUM, 90, - ELEMENT.getInstance().OSMIUM, + MaterialsElements.getInstance().OSMIUM, 30, - ELEMENT.getInstance().STRONTIUM, + MaterialsElements.getInstance().STRONTIUM, 20); // milledGrossular registerOreDataForMilledType( GrossularFlotationFroth, - ELEMENT.getInstance().CALCIUM, + MaterialsElements.getInstance().CALCIUM, 180, - ELEMENT.getInstance().ALUMINIUM, + MaterialsElements.getInstance().ALUMINIUM, 110, - ELEMENT.getInstance().TUNGSTEN, + MaterialsElements.getInstance().TUNGSTEN, 60, - ELEMENT.getInstance().THALLIUM, + MaterialsElements.getInstance().THALLIUM, 15); // milledAlmandine registerOreDataForMilledType( AlmandineFlotationFroth, - ELEMENT.getInstance().ALUMINIUM, + MaterialsElements.getInstance().ALUMINIUM, 150, - ELEMENT.getInstance().MAGNESIUM, + MaterialsElements.getInstance().MAGNESIUM, 75, - ELEMENT.getInstance().YTTRIUM, + MaterialsElements.getInstance().YTTRIUM, 25, - ELEMENT.getInstance().YTTERBIUM, + MaterialsElements.getInstance().YTTERBIUM, 15); // milledPyrope registerOreDataForMilledType( PyropeFlotationFroth, - ELEMENT.getInstance().MAGNESIUM, + MaterialsElements.getInstance().MAGNESIUM, 110, - ELEMENT.getInstance().MANGANESE, + MaterialsElements.getInstance().MANGANESE, 70, MaterialUtils.generateMaterialFromGtENUM(Materials.Borax), 60, - ELEMENT.getInstance().RHENIUM, + MaterialsElements.getInstance().RHENIUM, 20); // milledMonazite TODO registerOreDataForMilledType( MonaziteFlotationFroth, - ELEMENT.getInstance().ERBIUM, + MaterialsElements.getInstance().ERBIUM, 64, - ELEMENT.getInstance().LANTHANUM, + MaterialsElements.getInstance().LANTHANUM, 32, - ELEMENT.getInstance().LUTETIUM, + MaterialsElements.getInstance().LUTETIUM, 16, - ELEMENT.getInstance().EUROPIUM, + MaterialsElements.getInstance().EUROPIUM, 8); } @@ -358,8 +358,8 @@ public class MilledOreProcessing extends ItemPackage { private void addVacuumFurnaceRecipes() { int aCircuitID = 1; - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(aCircuitID++)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(aCircuitID++)) .itemOutputs(getOutputsFromMap(SphaleriteFlotationFroth)) .fluidInputs(FluidUtils.getFluidStack(SphaleriteFlotationFroth, 4000)) .fluidOutputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 2000), FluidUtils.getWater(2000)) @@ -367,8 +367,8 @@ public class MilledOreProcessing extends ItemPackage { .metadata(COIL_HEAT, 5500) .duration(2 * MINUTES) .addTo(vacuumFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(aCircuitID++)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(aCircuitID++)) .itemOutputs(getOutputsFromMap(ChalcopyriteFlotationFroth)) .fluidInputs(FluidUtils.getFluidStack(ChalcopyriteFlotationFroth, 4000)) .fluidOutputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 2000), FluidUtils.getWater(2000)) @@ -376,8 +376,8 @@ public class MilledOreProcessing extends ItemPackage { .metadata(COIL_HEAT, 4500) .duration(2 * MINUTES) .addTo(vacuumFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(aCircuitID++)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(aCircuitID++)) .itemOutputs(getOutputsFromMap(NickelFlotationFroth)) .fluidInputs(FluidUtils.getFluidStack(NickelFlotationFroth, 4000)) .fluidOutputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 2000), FluidUtils.getWater(2000)) @@ -385,8 +385,8 @@ public class MilledOreProcessing extends ItemPackage { .metadata(COIL_HEAT, 4500) .duration(2 * MINUTES) .addTo(vacuumFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(aCircuitID++)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(aCircuitID++)) .itemOutputs(getOutputsFromMap(PlatinumFlotationFroth)) .fluidInputs(FluidUtils.getFluidStack(PlatinumFlotationFroth, 4000)) .fluidOutputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 2000), FluidUtils.getWater(2000)) @@ -394,8 +394,8 @@ public class MilledOreProcessing extends ItemPackage { .metadata(COIL_HEAT, 5500) .duration(2 * MINUTES) .addTo(vacuumFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(aCircuitID++)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(aCircuitID++)) .itemOutputs(getOutputsFromMap(PentlanditeFlotationFroth)) .fluidInputs(FluidUtils.getFluidStack(PentlanditeFlotationFroth, 4000)) .fluidOutputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 2000), FluidUtils.getWater(2000)) @@ -403,8 +403,8 @@ public class MilledOreProcessing extends ItemPackage { .metadata(COIL_HEAT, 5500) .duration(2 * MINUTES) .addTo(vacuumFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(aCircuitID++)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(aCircuitID++)) .itemOutputs(getOutputsFromMap(RedstoneFlotationFroth)) .fluidInputs(FluidUtils.getFluidStack(RedstoneFlotationFroth, 4000)) .fluidOutputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 2000), FluidUtils.getWater(2000)) @@ -412,8 +412,8 @@ public class MilledOreProcessing extends ItemPackage { .metadata(COIL_HEAT, 4500) .duration(2 * MINUTES) .addTo(vacuumFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(aCircuitID++)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(aCircuitID++)) .itemOutputs(getOutputsFromMap(SpessartineFlotationFroth)) .fluidInputs(FluidUtils.getFluidStack(SpessartineFlotationFroth, 4000)) .fluidOutputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 2000), FluidUtils.getWater(2000)) @@ -421,8 +421,8 @@ public class MilledOreProcessing extends ItemPackage { .metadata(COIL_HEAT, 5500) .duration(2 * MINUTES) .addTo(vacuumFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(aCircuitID++)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(aCircuitID++)) .itemOutputs(getOutputsFromMap(GrossularFlotationFroth)) .fluidInputs(FluidUtils.getFluidStack(GrossularFlotationFroth, 4000)) .fluidOutputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 2000), FluidUtils.getWater(2000)) @@ -430,8 +430,8 @@ public class MilledOreProcessing extends ItemPackage { .metadata(COIL_HEAT, 5500) .duration(2 * MINUTES) .addTo(vacuumFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(aCircuitID++)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(aCircuitID++)) .itemOutputs(getOutputsFromMap(AlmandineFlotationFroth)) .fluidInputs(FluidUtils.getFluidStack(AlmandineFlotationFroth, 4000)) .fluidOutputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 2000), FluidUtils.getWater(2000)) @@ -439,8 +439,8 @@ public class MilledOreProcessing extends ItemPackage { .metadata(COIL_HEAT, 5500) .duration(2 * MINUTES) .addTo(vacuumFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(aCircuitID++)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(aCircuitID++)) .itemOutputs(getOutputsFromMap(PyropeFlotationFroth)) .fluidInputs(FluidUtils.getFluidStack(PyropeFlotationFroth, 4000)) .fluidOutputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 2000), FluidUtils.getWater(2000)) @@ -448,8 +448,8 @@ public class MilledOreProcessing extends ItemPackage { .metadata(COIL_HEAT, 3500) .duration(2 * MINUTES) .addTo(vacuumFurnaceRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(aCircuitID++)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(aCircuitID++)) .itemOutputs(getOutputsFromMap(MonaziteFlotationFroth)) .fluidInputs(FluidUtils.getFluidStack(MonaziteFlotationFroth, 4000)) .fluidOutputs(FluidUtils.getFluidStack(AgriculturalChem.RedMud, 2000), FluidUtils.getWater(2000)) @@ -466,7 +466,7 @@ public class MilledOreProcessing extends ItemPackage { // Sphalerite Material aMat = MaterialUtils.generateMaterialFromGtENUM(Materials.Sphalerite); FlotationRecipeHandler.registerOreType(aMat); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mSodiumEthylXanthate, 32), aMat.getMilled(64), @@ -482,7 +482,7 @@ public class MilledOreProcessing extends ItemPackage { // Chalcopyrite aMat = MaterialUtils.generateMaterialFromGtENUM(Materials.Chalcopyrite); FlotationRecipeHandler.registerOreType(aMat); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mSodiumEthylXanthate, 32), aMat.getMilled(64), @@ -498,7 +498,7 @@ public class MilledOreProcessing extends ItemPackage { // Nickel aMat = MaterialUtils.generateMaterialFromGtENUM(Materials.Nickel); FlotationRecipeHandler.registerOreType(aMat); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mPotassiumEthylXanthate, 32), aMat.getMilled(64), @@ -514,7 +514,7 @@ public class MilledOreProcessing extends ItemPackage { // Platinum aMat = MaterialUtils.generateMaterialFromGtENUM(Materials.Platinum); FlotationRecipeHandler.registerOreType(aMat); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mPotassiumEthylXanthate, 32), aMat.getMilled(64), @@ -530,7 +530,7 @@ public class MilledOreProcessing extends ItemPackage { // Pentlandite aMat = MaterialUtils.generateMaterialFromGtENUM(Materials.Pentlandite); FlotationRecipeHandler.registerOreType(aMat); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mSodiumEthylXanthate, 32), aMat.getMilled(64), @@ -546,7 +546,7 @@ public class MilledOreProcessing extends ItemPackage { // Redstone aMat = MaterialUtils.generateMaterialFromGtENUM(Materials.Redstone); FlotationRecipeHandler.registerOreType(aMat); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mSodiumEthylXanthate, 32), aMat.getMilled(64), @@ -562,7 +562,7 @@ public class MilledOreProcessing extends ItemPackage { // Spessartine aMat = MaterialUtils.generateMaterialFromGtENUM(Materials.Spessartine); FlotationRecipeHandler.registerOreType(aMat); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mPotassiumEthylXanthate, 32), aMat.getMilled(64), @@ -578,7 +578,7 @@ public class MilledOreProcessing extends ItemPackage { // Grossular aMat = MaterialUtils.generateMaterialFromGtENUM(Materials.Grossular); FlotationRecipeHandler.registerOreType(aMat); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mPotassiumEthylXanthate, 32), aMat.getMilled(64), @@ -594,7 +594,7 @@ public class MilledOreProcessing extends ItemPackage { // Almandine aMat = MaterialUtils.generateMaterialFromGtENUM(Materials.Almandine); FlotationRecipeHandler.registerOreType(aMat); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mSodiumEthylXanthate, 32), aMat.getMilled(64), @@ -610,7 +610,7 @@ public class MilledOreProcessing extends ItemPackage { // Pyrope aMat = MaterialUtils.generateMaterialFromGtENUM(Materials.Pyrope); FlotationRecipeHandler.registerOreType(aMat); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mSodiumEthylXanthate, 32), aMat.getMilled(64), @@ -626,7 +626,7 @@ public class MilledOreProcessing extends ItemPackage { // Monazite aMat = MaterialUtils.generateMaterialFromGtENUM(Materials.Monazite); FlotationRecipeHandler.registerOreType(aMat); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(GenericChem.mPotassiumEthylXanthate, 32), aMat.getMilled(64), @@ -648,16 +648,16 @@ public class MilledOreProcessing extends ItemPackage { ItemStack aCrushedPine = ItemUtils.getSimpleStack(AgriculturalChem.mCrushedPine, 1); - aLogs.add(ItemUtils.getSimpleStack(BOP_Block_Registrator.log_Pine)); - aLeaves.add(ItemUtils.getSimpleStack(BOP_Block_Registrator.leaves_Pine)); - aSaplings.add(ItemUtils.getSimpleStack(BOP_Block_Registrator.sapling_Pine)); + aLogs.add(ItemUtils.getSimpleStack(BOPBlockRegistrator.log_Pine)); + aLeaves.add(ItemUtils.getSimpleStack(BOPBlockRegistrator.leaves_Pine)); + aSaplings.add(ItemUtils.getSimpleStack(BOPBlockRegistrator.sapling_Pine)); aPinecones.add(ItemUtils.getSimpleStack(AgriculturalChem.mPinecone, 1)); if (BiomesOPlenty.isModLoaded()) { - aLogs.add(HANDLER_BiomesOPlenty.getStack(HANDLER_BiomesOPlenty.logs4, 0, 1)); - aLeaves.add(HANDLER_BiomesOPlenty.getStack(HANDLER_BiomesOPlenty.colorizedLeaves2, 1, 1)); - aSaplings.add(HANDLER_BiomesOPlenty.getStack(HANDLER_BiomesOPlenty.colorizedSaplings, 5, 1)); - aPinecones.add(ItemUtils.simpleMetaStack(HANDLER_BiomesOPlenty.mPineCone, 13, 1)); + aLogs.add(BiomesOPlentyHandler.getStack(BiomesOPlentyHandler.logs4, 0, 1)); + aLeaves.add(BiomesOPlentyHandler.getStack(BiomesOPlentyHandler.colorizedLeaves2, 1, 1)); + aSaplings.add(BiomesOPlentyHandler.getStack(BiomesOPlentyHandler.colorizedSaplings, 5, 1)); + aPinecones.add(ItemUtils.simpleMetaStack(BiomesOPlentyHandler.mPineCone, 13, 1)); } if (Forestry.isModLoaded()) { ItemStack aForestryLog = ItemUtils.getItemStackFromFQRN("Forestry:logs", 1); @@ -690,7 +690,7 @@ public class MilledOreProcessing extends ItemPackage { addRecipe(aCone, ItemUtils.getSimpleStack(aCrushedPine, 1), new int[] { 7500, 7500, 5000, 2500 }, 10, 60); } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(CI.getNumberedAdvancedCircuit(16), ItemUtils.getSimpleStack(aCrushedPine, 64)) .itemOutputs( ItemUtils.getItemStackOfAmountFromOreDict("dustTinyAsh", 5), @@ -703,7 +703,7 @@ public class MilledOreProcessing extends ItemPackage { .eut(TierEU.RECIPE_MV) .metadata(CHEMPLANT_CASING_TIER, 3) .addTo(chemicalPlantRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(CI.getNumberedAdvancedCircuit(18), ItemUtils.getSimpleStack(aCrushedPine, 64)) .itemOutputs( ItemUtils.getItemStackOfAmountFromOreDict("dustTinyAsh", 5), @@ -720,18 +720,18 @@ public class MilledOreProcessing extends ItemPackage { } public boolean addRecipe(ItemStack aInput, ItemStack aOutput1, int[] aChances, int aTime, int aEU) { - aOutput1 = GT_OreDictUnificator.get(true, aOutput1); + aOutput1 = GTOreDictUnificator.get(true, aOutput1); ItemStack aOutputs[] = new ItemStack[4]; for (int i = 0; i < aChances.length; i++) { aOutputs[i] = aOutput1; } aOutputs = cleanArray(aOutputs); - if ((GT_Utility.isStackInvalid(aInput)) - || (GT_Utility.isStackInvalid(aOutput1) || (GT_Utility.getContainerItem(aInput, false) != null))) { + if ((GTUtility.isStackInvalid(aInput)) + || (GTUtility.isStackInvalid(aOutput1) || (GTUtility.getContainerItem(aInput, false) != null))) { return false; } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(CI.getNumberedAdvancedCircuit(14), aInput) .itemOutputs(aOutputs) .duration(aTime * 20) diff --git a/src/main/java/gtPlusPlus/core/item/chemistry/NuclearChem.java b/src/main/java/gtPlusPlus/core/item/chemistry/NuclearChem.java index d83b5a7cea..db408721fc 100644 --- a/src/main/java/gtPlusPlus/core/item/chemistry/NuclearChem.java +++ b/src/main/java/gtPlusPlus/core/item/chemistry/NuclearChem.java @@ -1,17 +1,17 @@ package gtPlusPlus.core.item.chemistry; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.minecraft.ItemPackage; import gtPlusPlus.core.util.minecraft.FluidUtils; @@ -92,10 +92,10 @@ public class NuclearChem extends ItemPackage { } private static void chemReactor_CreateMutagen() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherStar, 2), - GT_Utility.getIntegratedCircuit(20)) + GTOreDictUnificator.get(OrePrefixes.gem, Materials.NetherStar, 2), + GTUtility.getIntegratedCircuit(20)) .fluidInputs(FluidRegistry.getFluidStack("mobessence", 5000)) .fluidOutputs(FluidUtils.getFluidStack(GeneticMutagen, 8000)) .duration(30 * SECONDS) diff --git a/src/main/java/gtPlusPlus/core/item/chemistry/RocketFuels.java b/src/main/java/gtPlusPlus/core/item/chemistry/RocketFuels.java index 6cf0dcd09b..4a7291bb21 100644 --- a/src/main/java/gtPlusPlus/core/item/chemistry/RocketFuels.java +++ b/src/main/java/gtPlusPlus/core/item/chemistry/RocketFuels.java @@ -3,9 +3,9 @@ package gtPlusPlus.core.item.chemistry; import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; import static gregtech.api.recipe.RecipeMaps.mixerRecipes; import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.CHEMPLANT_CASING_TIER; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.CHEMPLANT_CASING_TIER; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; @@ -19,13 +19,13 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidRegistry; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.minecraft.ItemPackage; import gtPlusPlus.api.recipe.GTPPRecipeMaps; import gtPlusPlus.core.item.base.BaseItemComponent; @@ -74,8 +74,8 @@ public class RocketFuels extends ItemPackage { FluidStack fuelB = FluidUtils.getFluidStack("fuel", 3000); if (fuelA != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(23)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(23)) .fluidInputs(fuelA) .fluidOutputs(FluidUtils.getFluidStack(Kerosene, 1800)) .duration(10 * SECONDS) @@ -83,8 +83,8 @@ public class RocketFuels extends ItemPackage { .addTo(distilleryRecipes); } if (fuelA == null && fuelB != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(23)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(23)) .fluidInputs(fuelB) .fluidOutputs(FluidUtils.getFluidStack(Kerosene, 1800)) .duration(10 * SECONDS) @@ -96,8 +96,8 @@ public class RocketFuels extends ItemPackage { public static void createRP1() { FluidStack fuelA = FluidUtils.getFluidStack(Kerosene, 1000); if (fuelA != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(23)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(23)) .fluidInputs(fuelA) .fluidOutputs(FluidUtils.getFluidStack(RP1, 750)) .duration(40 * SECONDS) @@ -108,7 +108,7 @@ public class RocketFuels extends ItemPackage { public static void createNitrogenTetroxide() { // 2HNO3 + Cu = N2O4 + H2O + CuO - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 1), ItemUtils.getSimpleStack(GenericChem.mOrangeCatalyst, 0)) @@ -125,8 +125,8 @@ public class RocketFuels extends ItemPackage { public static void createHydrazine() { // H2O2 + 2NH3 = N2H4 + 2H2O - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(21)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(21)) .fluidInputs( FluidUtils.getFluidStack("fluid.hydrogenperoxide", 1000), FluidUtils.getFluidStack("ammonia", 2000)) @@ -141,8 +141,8 @@ public class RocketFuels extends ItemPackage { public static void createMonomethylhydrazine() { // C + 2H + N2H4 = CH6N2 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(21), ItemUtils.getItemStackOfAmountFromOreDict("dustCarbon", 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(21), ItemUtils.getItemStackOfAmountFromOreDict("dustCarbon", 1)) .fluidInputs(FluidUtils.getFluidStack("hydrogen", 2000), FluidUtils.getFluidStack(Hydrazine, 1000)) .fluidOutputs(FluidUtils.getFluidStack(Monomethylhydrazine, 1000)) .duration(48 * SECONDS) @@ -153,7 +153,7 @@ public class RocketFuels extends ItemPackage { } private static void createLOH() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("cellHydrogen", 1)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("cellLiquidHydrogen", 1)) .duration(16 * SECONDS) @@ -164,7 +164,7 @@ public class RocketFuels extends ItemPackage { private static void createHydratedAmmoniumNitrateSlurry() { // NH3 + HNO3 = NH4NO3 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(CI.getNumberedAdvancedCircuit(21)) .fluidInputs(FluidUtils.getFluidStack("ammonia", 4000), FluidUtils.getFluidStack("nitricacid", 4000)) .fluidOutputs(FluidUtils.getFluidStack(Hydrated_Ammonium_Nitrate_Slurry, 5184)) @@ -176,8 +176,8 @@ public class RocketFuels extends ItemPackage { } private static void createAmmoniumNitrateDust() { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(8)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(8)) .itemOutputs(ItemUtils.getSimpleStack(Ammonium_Nitrate_Dust, 8)) .fluidInputs(FluidUtils.getFluidStack(Hydrated_Ammonium_Nitrate_Slurry, 8 * 144)) .fluidOutputs(FluidUtils.getWater(2000)) @@ -189,7 +189,7 @@ public class RocketFuels extends ItemPackage { private static void createFormaldehyde() { // O + CH4O = CH2O + H2O - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( CI.getNumberedAdvancedCircuit(21), ItemUtils.getSimpleStack(GenericChem.mFormaldehydeCatalyst, 0)) @@ -203,11 +203,11 @@ public class RocketFuels extends ItemPackage { } private static void createFormaldehydeCatalyst() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 16L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 1L), - GT_Utility.getIntegratedCircuit(18)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 16L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Vanadium, 1L), + GTUtility.getIntegratedCircuit(18)) .itemOutputs(ItemUtils.getSimpleStack(Formaldehyde_Catalyst_Dust, 4)) .duration(8 * SECONDS) .eut(TierEU.RECIPE_LV) @@ -216,7 +216,7 @@ public class RocketFuels extends ItemPackage { private static void createUnsymmetricalDimethylhydrazine() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( CI.getNumberedAdvancedCircuit(21), ItemUtils.getSimpleStack(GenericChem.mFormaldehydeCatalyst, 0)) @@ -233,10 +233,10 @@ public class RocketFuels extends ItemPackage { } private static void addRocketFuelsToMap() { - HashMap mRocketFuels = new LinkedHashMap<>(); + HashMap mRocketFuels = new LinkedHashMap<>(); mRocketFuels.put( 0, - new GT_Recipe( + new GTRecipe( true, new ItemStack[] {}, new ItemStack[] {}, @@ -250,7 +250,7 @@ public class RocketFuels extends ItemPackage { mRocketFuels.put( 1, - new GT_Recipe( + new GTRecipe( true, new ItemStack[] {}, new ItemStack[] {}, @@ -264,7 +264,7 @@ public class RocketFuels extends ItemPackage { mRocketFuels.put( 2, - new GT_Recipe( + new GTRecipe( true, new ItemStack[] {}, new ItemStack[] {}, @@ -278,7 +278,7 @@ public class RocketFuels extends ItemPackage { mRocketFuels.put( 3, - new GT_Recipe( + new GTRecipe( true, new ItemStack[] {}, new ItemStack[] {}, @@ -296,7 +296,7 @@ public class RocketFuels extends ItemPackage { mValidRocketFuelNames.add(FluidRegistry.getFluidName(Diesel)); for (int mID : mRocketFuels.keySet()) { - GT_Recipe aFuelRecipe = mRocketFuels.get(mID); + GTRecipe aFuelRecipe = mRocketFuels.get(mID); if (aFuelRecipe != null) { mValidRocketFuelNames.add(FluidRegistry.getFluidName(aFuelRecipe.mFluidInputs[0].getFluid())); mValidRocketFuels.put(mID, aFuelRecipe.mFluidInputs[0].getFluid()); @@ -308,8 +308,8 @@ public class RocketFuels extends ItemPackage { private static void createRocketFuels() { // RP1_Plus_Liquid_Oxygen - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) .fluidInputs(FluidUtils.getFluidStack(Liquid_Oxygen, 2000), FluidUtils.getFluidStack(RP1, 500)) .fluidOutputs(FluidUtils.getFluidStack(RP1_Plus_Liquid_Oxygen, 1500)) .duration(15 * SECONDS) @@ -317,8 +317,8 @@ public class RocketFuels extends ItemPackage { .metadata(CHEMPLANT_CASING_TIER, 3) .addTo(chemicalPlantRecipes); // Dense_Hydrazine_Mix - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(2)) .fluidInputs(FluidUtils.getFluidStack(Hydrazine, 4000), FluidUtils.getFluidStack("methanol", 6000)) .fluidOutputs(FluidUtils.getFluidStack(Dense_Hydrazine_Mix, 10000)) .duration(30 * SECONDS) @@ -326,8 +326,8 @@ public class RocketFuels extends ItemPackage { .metadata(CHEMPLANT_CASING_TIER, 4) .addTo(chemicalPlantRecipes); // Monomethylhydrazine_Plus_Nitric_Acid - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(3)) .fluidInputs( FluidUtils.getFluidStack(Monomethylhydrazine, 2000), FluidUtils.getFluidStack("nitricacid", 1000)) @@ -337,8 +337,8 @@ public class RocketFuels extends ItemPackage { .metadata(CHEMPLANT_CASING_TIER, 5) .addTo(chemicalPlantRecipes); // Unsymmetrical_Dimethylhydrazine_Plus_Nitrogen_Tetroxide - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(4)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(4)) .fluidInputs( FluidUtils.getFluidStack(Unsymmetrical_Dimethylhydrazine, 2000), FluidUtils.getFluidStack(Nitrogen_Tetroxide, 2000)) diff --git a/src/main/java/gtPlusPlus/core/item/chemistry/general/ItemGenericChemBase.java b/src/main/java/gtPlusPlus/core/item/chemistry/general/ItemGenericChemBase.java index 8ef674ac19..038a1ea8ce 100644 --- a/src/main/java/gtPlusPlus/core/item/chemistry/general/ItemGenericChemBase.java +++ b/src/main/java/gtPlusPlus/core/item/chemistry/general/ItemGenericChemBase.java @@ -17,7 +17,7 @@ import net.minecraft.util.IIcon; import net.minecraft.world.World; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.core.item.chemistry.GenericChem; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -270,10 +270,10 @@ public class ItemGenericChemBase extends Item { } public static int getMaxBallDurability(ItemStack aStack) { - if (GT_Utility.areStacksEqual(aStack, GenericChem.mMillingBallAlumina, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mMillingBallAlumina, true)) { return 100; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mMillingBallSoapstone, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mMillingBallSoapstone, true)) { return 50; } return 0; diff --git a/src/main/java/gtPlusPlus/core/item/circuit/GTPPIntegratedCircuitItem.java b/src/main/java/gtPlusPlus/core/item/circuit/GTPPIntegratedCircuitItem.java new file mode 100644 index 0000000000..e616004ec1 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/item/circuit/GTPPIntegratedCircuitItem.java @@ -0,0 +1,213 @@ +package gtPlusPlus.core.item.circuit; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; +import java.util.function.Predicate; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.FakePlayer; + +import org.apache.commons.lang3.tuple.Pair; + +import com.gtnewhorizons.modularui.api.UIInfos; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.INetworkUpdatableItem; +import gregtech.api.net.GTPacketUpdateItem; +import gregtech.api.objects.XSTR; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.common.gui.modularui.uifactory.SelectItemUIFactory; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class GTPPIntegratedCircuitItem extends Item implements INetworkUpdatableItem { + + private final List ALL_VARIANTS = new ArrayList<>(); + + private final String iconLocation; + protected final IIcon[] iconDamage = new IIcon[25]; + + public GTPPIntegratedCircuitItem(String unlocalizedName, String iconLocation) { + this.setHasSubtypes(true); + this.setNoRepair(); + this.setMaxStackSize(64); + this.setMaxDamage(0); + this.setUnlocalizedName(unlocalizedName); + this.iconLocation = iconLocation; + GameRegistry.registerItem(this, this.getUnlocalizedName()); + ALL_VARIANTS.add(new ItemStack(this, 0, 0)); + for (int i = 1; i <= 24; i++) { + ItemStack aStack = new ItemStack(this, 0, i); + ALL_VARIANTS.add(aStack); + } + } + + @Override + public boolean isDamageable() { + return false; + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer p_77624_2_, List aList, boolean p_77624_4_) { + try { + aList.add("Configuration == " + aStack.getItemDamage()); + aList.add( + GTLanguageManager.addStringLocalization( + new StringBuilder().append(getUnlocalizedName()) + .append(".tooltip.0") + .toString(), + "Right click to reconfigure")); + aList.add( + GTLanguageManager.addStringLocalization( + new StringBuilder().append(getUnlocalizedName()) + .append(".tooltip.1") + .toString(), + "Needs a screwdriver or circuit programming tool")); + } catch (Throwable t) { + t.printStackTrace(); + } + super.addInformation(aStack, p_77624_2_, aList, p_77624_4_); + } + + @Override + public EnumRarity getRarity(ItemStack p_77613_1_) { + return EnumRarity.common; + } + + @Override + public void getSubItems(Item aItem, CreativeTabs p_150895_2_, List aList) { + aList.add(ItemUtils.simpleMetaStack(aItem, 0, 1)); + } + + @Override + public boolean isRepairable() { + return false; + } + + @Override + public boolean isBookEnchantable(ItemStack stack, ItemStack book) { + return false; + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return false; + } + + @Override + public void registerIcons(final IIconRegister u) { + for (int i = 0; i < iconDamage.length; i++) { + this.iconDamage[i] = u.registerIcon(GTPlusPlus.ID + ":" + iconLocation + "/" + i); + } + } + + @Override + public IIcon getIconFromDamage(int meta) { + return this.iconDamage[MathUtils.balance(meta, 0, 24)]; + } + + @Override + public boolean receive(ItemStack stack, EntityPlayerMP player, NBTTagCompound tag) { + int meta = tag.hasKey("meta", Constants.NBT.TAG_BYTE) ? tag.getByte("meta") : -1; + if (meta < 0 || meta > 24) return true; + + if (!player.capabilities.isCreativeMode) { + Pair> toolIndex = findConfiguratorInInv(player); + if (toolIndex == null) return true; + + ItemStack[] mainInventory = player.inventory.mainInventory; + mainInventory[toolIndex.getKey()] = toolIndex.getValue() + .apply(mainInventory[toolIndex.getKey()], player); + } + stack.setItemDamage(meta); + + return true; + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + // nothing on server side or fake player + if (player instanceof FakePlayer || !world.isRemote) return stack; + // check if any screwdriver + ItemStack configuratorStack; + if (player.capabilities.isCreativeMode) { + configuratorStack = null; + } else { + Pair configurator = findConfiguratorInInv(player); + if (configurator == null) { + int count; + try { + count = Integer + .parseInt(StatCollector.translateToLocal("GT5U.item.programmed_circuit.no_screwdriver.count")); + } catch (NumberFormatException e) { + player.addChatComponentMessage( + new ChatComponentText( + "Error in translation GT5U.item.programmed_circuit.no_screwdriver.count: " + + e.getMessage())); + count = 1; + } + player.addChatComponentMessage( + new ChatComponentTranslation( + "GT5U.item.programmed_circuit.no_screwdriver." + XSTR.XSTR_INSTANCE.nextInt(count))); + return stack; + } + configuratorStack = player.inventory.mainInventory[configurator.getKey()]; + } + openSelectorGui(configuratorStack, stack.getItemDamage(), player); + return stack; + } + + private void openSelectorGui(ItemStack configurator, int meta, EntityPlayer player) { + UIInfos.openClientUI( + player, + buildContext -> new SelectItemUIFactory( + StatCollector.translateToLocal("GT5U.item.programmed_circuit.select.header"), + configurator, + GTPPIntegratedCircuitItem::onConfigured, + ALL_VARIANTS, + meta, + true).createWindow(buildContext)); + } + + private static void onConfigured(ItemStack stack) { + NBTTagCompound tag = new NBTTagCompound(); + tag.setByte("meta", (byte) stack.getItemDamage()); + GTValues.NW.sendToServer(new GTPacketUpdateItem(tag)); + } + + private static Pair> findConfiguratorInInv( + EntityPlayer player) { + ItemStack[] mainInventory = player.inventory.mainInventory; + for (int j = 0, mainInventoryLength = mainInventory.length; j < mainInventoryLength; j++) { + ItemStack toolStack = mainInventory[j]; + + if (!GTUtility.isStackValid(toolStack)) continue; + + for (Map.Entry, BiFunction> p : GregTechAPI.sCircuitProgrammerList + .entrySet()) + if (p.getKey() + .test(toolStack)) return Pair.of(j, p.getValue()); + } + return null; + } +} diff --git a/src/main/java/gtPlusPlus/core/item/circuit/GTPP_IntegratedCircuit_Item.java b/src/main/java/gtPlusPlus/core/item/circuit/GTPP_IntegratedCircuit_Item.java deleted file mode 100644 index 11bbac53a3..0000000000 --- a/src/main/java/gtPlusPlus/core/item/circuit/GTPP_IntegratedCircuit_Item.java +++ /dev/null @@ -1,213 +0,0 @@ -package gtPlusPlus.core.item.circuit; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.function.BiFunction; -import java.util.function.Predicate; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.FakePlayer; - -import org.apache.commons.lang3.tuple.Pair; - -import com.gtnewhorizons.modularui.api.UIInfos; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.INetworkUpdatableItem; -import gregtech.api.net.GT_Packet_UpdateItem; -import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import gregtech.common.gui.modularui.uifactory.SelectItemUIFactory; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class GTPP_IntegratedCircuit_Item extends Item implements INetworkUpdatableItem { - - private final List ALL_VARIANTS = new ArrayList<>(); - - private final String iconLocation; - protected final IIcon[] iconDamage = new IIcon[25]; - - public GTPP_IntegratedCircuit_Item(String unlocalizedName, String iconLocation) { - this.setHasSubtypes(true); - this.setNoRepair(); - this.setMaxStackSize(64); - this.setMaxDamage(0); - this.setUnlocalizedName(unlocalizedName); - this.iconLocation = iconLocation; - GameRegistry.registerItem(this, this.getUnlocalizedName()); - ALL_VARIANTS.add(new ItemStack(this, 0, 0)); - for (int i = 1; i <= 24; i++) { - ItemStack aStack = new ItemStack(this, 0, i); - ALL_VARIANTS.add(aStack); - } - } - - @Override - public boolean isDamageable() { - return false; - } - - @Override - public void addInformation(ItemStack aStack, EntityPlayer p_77624_2_, List aList, boolean p_77624_4_) { - try { - aList.add("Configuration == " + aStack.getItemDamage()); - aList.add( - GT_LanguageManager.addStringLocalization( - new StringBuilder().append(getUnlocalizedName()) - .append(".tooltip.0") - .toString(), - "Right click to reconfigure")); - aList.add( - GT_LanguageManager.addStringLocalization( - new StringBuilder().append(getUnlocalizedName()) - .append(".tooltip.1") - .toString(), - "Needs a screwdriver or circuit programming tool")); - } catch (Throwable t) { - t.printStackTrace(); - } - super.addInformation(aStack, p_77624_2_, aList, p_77624_4_); - } - - @Override - public EnumRarity getRarity(ItemStack p_77613_1_) { - return EnumRarity.common; - } - - @Override - public void getSubItems(Item aItem, CreativeTabs p_150895_2_, List aList) { - aList.add(ItemUtils.simpleMetaStack(aItem, 0, 1)); - } - - @Override - public boolean isRepairable() { - return false; - } - - @Override - public boolean isBookEnchantable(ItemStack stack, ItemStack book) { - return false; - } - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return false; - } - - @Override - public void registerIcons(final IIconRegister u) { - for (int i = 0; i < iconDamage.length; i++) { - this.iconDamage[i] = u.registerIcon(GTPlusPlus.ID + ":" + iconLocation + "/" + i); - } - } - - @Override - public IIcon getIconFromDamage(int meta) { - return this.iconDamage[MathUtils.balance(meta, 0, 24)]; - } - - @Override - public boolean receive(ItemStack stack, EntityPlayerMP player, NBTTagCompound tag) { - int meta = tag.hasKey("meta", Constants.NBT.TAG_BYTE) ? tag.getByte("meta") : -1; - if (meta < 0 || meta > 24) return true; - - if (!player.capabilities.isCreativeMode) { - Pair> toolIndex = findConfiguratorInInv(player); - if (toolIndex == null) return true; - - ItemStack[] mainInventory = player.inventory.mainInventory; - mainInventory[toolIndex.getKey()] = toolIndex.getValue() - .apply(mainInventory[toolIndex.getKey()], player); - } - stack.setItemDamage(meta); - - return true; - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { - // nothing on server side or fake player - if (player instanceof FakePlayer || !world.isRemote) return stack; - // check if any screwdriver - ItemStack configuratorStack; - if (player.capabilities.isCreativeMode) { - configuratorStack = null; - } else { - Pair configurator = findConfiguratorInInv(player); - if (configurator == null) { - int count; - try { - count = Integer - .parseInt(StatCollector.translateToLocal("GT5U.item.programmed_circuit.no_screwdriver.count")); - } catch (NumberFormatException e) { - player.addChatComponentMessage( - new ChatComponentText( - "Error in translation GT5U.item.programmed_circuit.no_screwdriver.count: " - + e.getMessage())); - count = 1; - } - player.addChatComponentMessage( - new ChatComponentTranslation( - "GT5U.item.programmed_circuit.no_screwdriver." + XSTR.XSTR_INSTANCE.nextInt(count))); - return stack; - } - configuratorStack = player.inventory.mainInventory[configurator.getKey()]; - } - openSelectorGui(configuratorStack, stack.getItemDamage(), player); - return stack; - } - - private void openSelectorGui(ItemStack configurator, int meta, EntityPlayer player) { - UIInfos.openClientUI( - player, - buildContext -> new SelectItemUIFactory( - StatCollector.translateToLocal("GT5U.item.programmed_circuit.select.header"), - configurator, - GTPP_IntegratedCircuit_Item::onConfigured, - ALL_VARIANTS, - meta, - true).createWindow(buildContext)); - } - - private static void onConfigured(ItemStack stack) { - NBTTagCompound tag = new NBTTagCompound(); - tag.setByte("meta", (byte) stack.getItemDamage()); - GT_Values.NW.sendToServer(new GT_Packet_UpdateItem(tag)); - } - - private static Pair> findConfiguratorInInv( - EntityPlayer player) { - ItemStack[] mainInventory = player.inventory.mainInventory; - for (int j = 0, mainInventoryLength = mainInventory.length; j < mainInventoryLength; j++) { - ItemStack toolStack = mainInventory[j]; - - if (!GT_Utility.isStackValid(toolStack)) continue; - - for (Map.Entry, BiFunction> p : GregTech_API.sCircuitProgrammerList - .entrySet()) - if (p.getKey() - .test(toolStack)) return Pair.of(j, p.getValue()); - } - return null; - } -} diff --git a/src/main/java/gtPlusPlus/core/item/food/BaseItemMetaFood.java b/src/main/java/gtPlusPlus/core/item/food/BaseItemMetaFood.java index 07bf082903..01f2b1b263 100644 --- a/src/main/java/gtPlusPlus/core/item/food/BaseItemMetaFood.java +++ b/src/main/java/gtPlusPlus/core/item/food/BaseItemMetaFood.java @@ -23,7 +23,7 @@ import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.enums.Materials; import gregtech.api.objects.ItemData; import gregtech.api.objects.MaterialStack; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.item.ModItems; @@ -199,11 +199,11 @@ public class BaseItemMetaFood extends ItemFood { } mOreDictNames.put(aMetaID, aOreDictNames); if (aOreDictNames.contains("listAllmeatraw")) { - GT_OreDictUnificator.addItemData( + GTOreDictUnificator.addItemData( new ItemStack(ModItems.itemMetaFood, 1, aMetaID), new ItemData(Materials.MeatRaw, 3628800L, new MaterialStack(Materials.Bone, 403200L))); } else if (aOreDictNames.contains("listAllmeatcooked")) { - GT_OreDictUnificator.addItemData( + GTOreDictUnificator.addItemData( new ItemStack(ModItems.itemMetaFood, 1, aMetaID), new ItemData(Materials.MeatCooked, 3628800L, new MaterialStack(Materials.Bone, 403200L))); } diff --git a/src/main/java/gtPlusPlus/core/item/general/BufferCore.java b/src/main/java/gtPlusPlus/core/item/general/BufferCore.java deleted file mode 100644 index 69257afb0e..0000000000 --- a/src/main/java/gtPlusPlus/core/item/general/BufferCore.java +++ /dev/null @@ -1,68 +0,0 @@ -package gtPlusPlus.core.item.general; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.GT_Values; -import gtPlusPlus.core.item.base.BaseItemWithDamageValue; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.core.util.math.MathUtils; - -public class BufferCore extends BaseItemWithDamageValue { - - public int coreTier = 0; - - public BufferCore(final String unlocalizedName, final int i) { - super(unlocalizedName + i); - this.setTextureName(GTPlusPlus.ID + ":" + unlocalizedName); - this.setMaxStackSize(32); - this.coreTier = i; - } - - @Override - public String getItemStackDisplayName(final ItemStack stack) { - return super.getItemStackDisplayName(stack) /* +" ["+GT_Values.VN[this.coreTier-1]+"]." */; - } - - @Override - @SideOnly(Side.CLIENT) - public boolean requiresMultipleRenderPasses() { - return true; - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { - list.add( - EnumChatFormatting.GRAY + "A key crafting component for " - + GT_Values.VN[this.coreTier - 1] - + " Applicances"); - } - - public final int getCoreTier() { - return this.coreTier; - } - - @Override - public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) { - - int[] mTierTypes = new int[] { Utils.rgbtoHexValue(200, 180, 180), Utils.rgbtoHexValue(142, 153, 161), - Utils.rgbtoHexValue(230, 121, 75), Utils.rgbtoHexValue(215, 156, 70), Utils.rgbtoHexValue(97, 97, 96), // EV - Utils.rgbtoHexValue(202, 202, 201), Utils.rgbtoHexValue(247, 159, 157), Utils.rgbtoHexValue(181, 223, 223), - Utils.rgbtoHexValue(187, 219, 185), }; - - if (this.coreTier == 10) { - return Utils - .rgbtoHexValue(MathUtils.randInt(220, 250), MathUtils.randInt(221, 251), MathUtils.randInt(220, 250)); - } - - return mTierTypes[this.coreTier - 1]; - } -} diff --git a/src/main/java/gtPlusPlus/core/item/general/ItemBufferCore.java b/src/main/java/gtPlusPlus/core/item/general/ItemBufferCore.java new file mode 100644 index 0000000000..e99b4ca7a0 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/item/general/ItemBufferCore.java @@ -0,0 +1,68 @@ +package gtPlusPlus.core.item.general; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.GTValues; +import gtPlusPlus.core.item.base.BaseItemWithDamageValue; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.math.MathUtils; + +public class ItemBufferCore extends BaseItemWithDamageValue { + + public int coreTier = 0; + + public ItemBufferCore(final String unlocalizedName, final int i) { + super(unlocalizedName + i); + this.setTextureName(GTPlusPlus.ID + ":" + unlocalizedName); + this.setMaxStackSize(32); + this.coreTier = i; + } + + @Override + public String getItemStackDisplayName(final ItemStack stack) { + return super.getItemStackDisplayName(stack) /* +" ["+GT_Values.VN[this.coreTier-1]+"]." */; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + return true; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { + list.add( + EnumChatFormatting.GRAY + "A key crafting component for " + + GTValues.VN[this.coreTier - 1] + + " Applicances"); + } + + public final int getCoreTier() { + return this.coreTier; + } + + @Override + public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) { + + int[] mTierTypes = new int[] { Utils.rgbtoHexValue(200, 180, 180), Utils.rgbtoHexValue(142, 153, 161), + Utils.rgbtoHexValue(230, 121, 75), Utils.rgbtoHexValue(215, 156, 70), Utils.rgbtoHexValue(97, 97, 96), // EV + Utils.rgbtoHexValue(202, 202, 201), Utils.rgbtoHexValue(247, 159, 157), Utils.rgbtoHexValue(181, 223, 223), + Utils.rgbtoHexValue(187, 219, 185), }; + + if (this.coreTier == 10) { + return Utils + .rgbtoHexValue(MathUtils.randInt(220, 250), MathUtils.randInt(221, 251), MathUtils.randInt(220, 250)); + } + + return mTierTypes[this.coreTier - 1]; + } +} diff --git a/src/main/java/gtPlusPlus/core/item/general/ItemCloakingDevice.java b/src/main/java/gtPlusPlus/core/item/general/ItemCloakingDevice.java index 9e5cf0a69d..f1f70b6cbd 100644 --- a/src/main/java/gtPlusPlus/core/item/general/ItemCloakingDevice.java +++ b/src/main/java/gtPlusPlus/core/item/general/ItemCloakingDevice.java @@ -19,7 +19,7 @@ import baubles.api.BaubleType; import baubles.api.IBauble; import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -135,17 +135,17 @@ public class ItemCloakingDevice extends Item implements IElectricItem, IElectric list.add( StatCollector.translateToLocalFormatted( "item.personalCloakingDevice.tooltip.3", - GT_Utility.formatNumbers(this.getTier(this.thisStack)), - GT_Utility.formatNumbers(this.getTransferLimit(this.thisStack)))); + GTUtility.formatNumbers(this.getTier(this.thisStack)), + GTUtility.formatNumbers(this.getTransferLimit(this.thisStack)))); list.add( StatCollector.translateToLocalFormatted( "item.personalCloakingDevice.tooltip.4", - GT_Utility.formatNumbers(this.getCharge(stack)), + GTUtility.formatNumbers(this.getCharge(stack)), MathUtils.findPercentage(this.getCharge(stack), this.getMaxCharge(stack)))); list.add( StatCollector.translateToLocalFormatted( "item.personalCloakingDevice.tooltip.5", - GT_Utility.formatNumbers(this.secondsLeft(stack)))); + GTUtility.formatNumbers(this.secondsLeft(stack)))); super.addInformation(stack, aPlayer, list, bool); } diff --git a/src/main/java/gtPlusPlus/core/item/general/ItemGenericToken.java b/src/main/java/gtPlusPlus/core/item/general/ItemGenericToken.java index c1bea0b81d..7a0cbe3312 100644 --- a/src/main/java/gtPlusPlus/core/item/general/ItemGenericToken.java +++ b/src/main/java/gtPlusPlus/core/item/general/ItemGenericToken.java @@ -16,7 +16,7 @@ import net.minecraft.util.IIcon; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.item.base.CoreItem; @@ -74,12 +74,12 @@ public class ItemGenericToken extends CoreItem { sizes[0][4] = mCustomNameColours.size(); // sizes[0][5] = mIcons.size(); mLocalNames.put(id, aLocalName); - GT_LanguageManager + GTLanguageManager .addStringLocalization("gtplusplus." + this.getUnlocalizedName() + "." + id + ".name", aLocalName); mMaxStackSizes.put(id, aMaxStack); mDescriptionArrays.put(id, aDescript); for (int i = 0; i < aDescript.length; i++) { - GT_LanguageManager.addStringLocalization( + GTLanguageManager.addStringLocalization( "gtplusplus." + this.getUnlocalizedName() + "." + id + ".tooltip." + i, aDescript[i]); } @@ -113,7 +113,7 @@ public class ItemGenericToken extends CoreItem { public void addInformation(ItemStack stack, EntityPlayer aPlayer, List list, boolean bool) { super.addInformation(stack, aPlayer, list, bool); for (int i = 0;; i++) { - String tooltip = GT_LanguageManager.getTranslation( + String tooltip = GTLanguageManager.getTranslation( "gtplusplus." + this .getUnlocalizedNameInefficiently(stack) + "." + stack.getItemDamage() + ".tooltip." + i); if (!("gtplusplus." + this @@ -126,7 +126,7 @@ public class ItemGenericToken extends CoreItem { @Override public String getItemStackDisplayName(final ItemStack tItem) { - String ret = GT_LanguageManager.getTranslation( + String ret = GTLanguageManager.getTranslation( "gtplusplus." + this.getUnlocalizedNameInefficiently(tItem) + "." + tItem.getItemDamage() + ".name"); EnumChatFormatting format = mCustomNameColours.get(tItem.getItemDamage()); if (format != null) { diff --git a/src/main/java/gtPlusPlus/core/item/general/ItemHealingDevice.java b/src/main/java/gtPlusPlus/core/item/general/ItemHealingDevice.java index d80238b99a..ed9bddfd18 100644 --- a/src/main/java/gtPlusPlus/core/item/general/ItemHealingDevice.java +++ b/src/main/java/gtPlusPlus/core/item/general/ItemHealingDevice.java @@ -19,9 +19,9 @@ import baubles.api.BaubleType; import baubles.api.IBauble; import cpw.mods.fml.common.Optional; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Mods; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.util.math.MathUtils; @@ -89,7 +89,7 @@ public class ItemHealingDevice extends Item implements IElectricItem, IElectricI @Override public double getTransferLimit(final ItemStack itemStack) { - return GT_Values.V[7]; + return GTValues.V[7]; } @Override @@ -138,7 +138,7 @@ public class ItemHealingDevice extends Item implements IElectricItem, IElectricI list.add(EnumChatFormatting.GREEN + aString1 + EnumChatFormatting.GRAY); list.add( EnumChatFormatting.GREEN + aString2 - + GT_Utility.formatNumbers(EUPerOperation) + + GTUtility.formatNumbers(EUPerOperation) + aString3 + EnumChatFormatting.GRAY); list.add(EnumChatFormatting.GREEN + aString4 + EnumChatFormatting.GRAY); @@ -151,13 +151,13 @@ public class ItemHealingDevice extends Item implements IElectricItem, IElectricI EnumChatFormatting.GRAY + aTier + ": [" + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.getTier(stack)) + + GTUtility.formatNumbers(this.getTier(stack)) + EnumChatFormatting.GRAY + "] " + aInputLimit + ": [" + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.getTransferLimit(stack)) + + GTUtility.formatNumbers(this.getTransferLimit(stack)) + EnumChatFormatting.GRAY + aEUT + "]"); @@ -165,12 +165,12 @@ public class ItemHealingDevice extends Item implements IElectricItem, IElectricI EnumChatFormatting.GRAY + aCurrentPower + ": [" + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.getCharge(stack)) + + GTUtility.formatNumbers(this.getCharge(stack)) + EnumChatFormatting.GRAY + aEU + "] [" + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(MathUtils.findPercentage(this.getCharge(stack), this.getMaxCharge(stack))) + + GTUtility.formatNumbers(MathUtils.findPercentage(this.getCharge(stack), this.getMaxCharge(stack))) + EnumChatFormatting.GRAY + "%]"); list.add(EnumChatFormatting.GOLD + aString6 + EnumChatFormatting.GRAY); @@ -332,18 +332,18 @@ public class ItemHealingDevice extends Item implements IElectricItem, IElectricI .messagePlayer((EntityPlayer) arg1, "Your NanoBooster Whirs! Leaving you feeling stronger."); if (hp > 0) PlayerUtils - .messagePlayer((EntityPlayer) arg1, "Healed " + GT_Utility.formatNumbers(hp) + " hp."); + .messagePlayer((EntityPlayer) arg1, "Healed " + GTUtility.formatNumbers(hp) + " hp."); if (hunger > 0) PlayerUtils - .messagePlayer((EntityPlayer) arg1, "Healed " + GT_Utility.formatNumbers(hunger) + " hunger."); + .messagePlayer((EntityPlayer) arg1, "Healed " + GTUtility.formatNumbers(hunger) + " hunger."); if (saturation > 0) PlayerUtils.messagePlayer( (EntityPlayer) arg1, - "Satured Hunger by " + GT_Utility.formatNumbers(saturation) + "."); + "Satured Hunger by " + GTUtility.formatNumbers(saturation) + "."); if (hp > 0 || hunger > 0 || saturation > 0) PlayerUtils.messagePlayer( (EntityPlayer) arg1, - "You check it's remaining uses, it has " + GT_Utility.formatNumbers(secondsLeft(baubleStack)) + "You check it's remaining uses, it has " + GTUtility.formatNumbers(secondsLeft(baubleStack)) + " seconds left."); } } diff --git a/src/main/java/gtPlusPlus/core/item/general/chassis/ItemDehydratorCoil.java b/src/main/java/gtPlusPlus/core/item/general/chassis/ItemDehydratorCoil.java index 24759808ab..f23f4c8dce 100644 --- a/src/main/java/gtPlusPlus/core/item/general/chassis/ItemDehydratorCoil.java +++ b/src/main/java/gtPlusPlus/core/item/general/chassis/ItemDehydratorCoil.java @@ -12,7 +12,7 @@ import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gtPlusPlus.core.creative.AddToCreativeTab; public class ItemDehydratorCoil extends Item { @@ -56,7 +56,7 @@ public class ItemDehydratorCoil extends Item { @Override public String getItemStackDisplayName(final ItemStack tItem) { return StatCollector - .translateToLocalFormatted("item.itemDehydratorCoil.name", GT_Values.VN[tItem.getItemDamage() + 4]); + .translateToLocalFormatted("item.itemDehydratorCoil.name", GTValues.VN[tItem.getItemDamage() + 4]); } /* diff --git a/src/main/java/gtPlusPlus/core/item/general/chassis/ItemDehydratorCoilWire.java b/src/main/java/gtPlusPlus/core/item/general/chassis/ItemDehydratorCoilWire.java index b050e4c65c..820486b742 100644 --- a/src/main/java/gtPlusPlus/core/item/general/chassis/ItemDehydratorCoilWire.java +++ b/src/main/java/gtPlusPlus/core/item/general/chassis/ItemDehydratorCoilWire.java @@ -12,7 +12,7 @@ import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gtPlusPlus.core.creative.AddToCreativeTab; public class ItemDehydratorCoilWire extends Item { @@ -56,7 +56,7 @@ public class ItemDehydratorCoilWire extends Item { @Override public String getItemStackDisplayName(final ItemStack tItem) { return StatCollector - .translateToLocalFormatted("item.itemDehydratorCoilWire.name", GT_Values.VN[tItem.getItemDamage() + 4]); + .translateToLocalFormatted("item.itemDehydratorCoilWire.name", GTValues.VN[tItem.getItemDamage() + 4]); } /* diff --git a/src/main/java/gtPlusPlus/core/item/materials/DustDecayable.java b/src/main/java/gtPlusPlus/core/item/materials/DustDecayable.java index eaf8c2c9da..1524418038 100644 --- a/src/main/java/gtPlusPlus/core/item/materials/DustDecayable.java +++ b/src/main/java/gtPlusPlus/core/item/materials/DustDecayable.java @@ -12,10 +12,10 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.core.handler.Recipes.DecayableRecipe; import gtPlusPlus.core.item.base.BaseItemTickable; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.minecraft.EntityUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -28,7 +28,7 @@ public class DustDecayable extends BaseItemTickable { super(true, true, unlocal, colour, (maxTicks / 1), desc1); this.turnsIntoItem = turnsInto; this.radLevel = radLevel; - GT_OreDictUnificator.registerOre(unlocal, ItemUtils.getSimpleStack(this)); + GTOreDictUnificator.registerOre(unlocal, ItemUtils.getSimpleStack(this)); new DecayableRecipe(maxTicks, getSimpleStack(this), getSimpleStack(turnsInto)); } @@ -45,7 +45,7 @@ public class DustDecayable extends BaseItemTickable { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { super.addInformation(stack, player, list, bool); if (this.radLevel > 0) { - list.add(CORE.GT_Tooltip_Radioactive.get()); + list.add(GTPPCore.GT_Tooltip_Radioactive.get()); } } diff --git a/src/main/java/gtPlusPlus/core/item/tool/misc/GregtechPump.java b/src/main/java/gtPlusPlus/core/item/tool/misc/GregtechPump.java deleted file mode 100644 index 5ba3aa1531..0000000000 --- a/src/main/java/gtPlusPlus/core/item/tool/misc/GregtechPump.java +++ /dev/null @@ -1,1320 +0,0 @@ -package gtPlusPlus.core.item.tool.misc; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Mods.GTPlusPlus; -import static gregtech.api.util.GT_Utility.formatNumbers; - -import java.util.ArrayList; -import java.util.BitSet; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidContainerItem; -import net.minecraftforge.fluids.IFluidHandler; -import net.minecraftforge.fluids.IFluidTank; - -import cpw.mods.fml.common.registry.GameRegistry; -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.SubTag; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; -import gregtech.api.interfaces.IItemBehaviour; -import gregtech.api.interfaces.IItemContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.NBTUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import ic2.api.item.ElectricItem; -import ic2.api.item.IElectricItem; -import ic2.api.item.IElectricItemManager; -import ic2.api.item.ISpecialElectricItem; - -public class GregtechPump extends Item implements ISpecialElectricItem, IElectricItemManager, IFluidContainerItem { - - /** - * Right Click Functions - */ - @Override - public boolean onItemUse(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int a4, - float p_77648_8_, float p_77648_9_, float p_77648_10_) { - if (aStack == null || aPlayer == null || aWorld == null || aWorld.isRemote) { - return false; - } - if (!aWorld.isRemote && tryDrainTile(aStack, aWorld, aPlayer, aX, aY, aZ)) { - return true; - } else { - // return super.onItemUse(aStack, aPlayer, aWorld, aX, aY, aZ, a4, p_77648_8_, p_77648_9_, p_77648_10_); - return false; - } - } - - @Override - public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_) { - return p_77659_1_; - } - - /** - * GT Code - */ - - /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ - private final HashMap>> mItemBehaviors = new HashMap<>(); - - public final short mOffset, mItemAmount; - public final BitSet mEnabledItems; - public final BitSet mVisibleItems; - /** The unlocalized name of this item. */ - private String unlocalizedName; - - private final HashMap mIconMap = new LinkedHashMap<>(); - private final HashMap rarity = new LinkedHashMap<>(); - private final HashMap itemName = new LinkedHashMap<>(); - private final HashMap hasEffect = new LinkedHashMap<>(); - - public final HashMap mElectricStats = new LinkedHashMap<>(); - public final HashMap mBurnValues = new LinkedHashMap<>(); - - public void registerPumpType(final int aID, final String aPumpName, final int aEuMax, final int aTier) { - ModItems.toolGregtechPump.registerItem( - aID, // ID - aPumpName, // Name - aEuMax, // Eu Storage - (short) aTier, // Tier/ Tooltip - aTier <= 0 ? EnumRarity.common - : aTier == 1 ? EnumRarity.uncommon - : aTier == 2 ? EnumRarity.rare : aTier == 3 ? EnumRarity.epic : EnumRarity.common, // Rarity - false // Effect? - ); - } - - public GregtechPump() { - this("MU-metatool.01", AddToCreativeTab.tabTools, (short) 1000, (short) 31766); - } - - public GregtechPump(final String unlocalizedName, final CreativeTabs creativeTab, final short aOffset, - final short aItemAmount) { - this.mEnabledItems = new BitSet(aItemAmount); - this.mVisibleItems = new BitSet(aItemAmount); - this.mOffset = (short) Math.min(32766, aOffset); - this.mItemAmount = (short) Math.min(aItemAmount, 32766 - this.mOffset); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.setUnlocalizedName(unlocalizedName); - this.setCreativeTab(creativeTab); - this.setMaxStackSize(1); - if (GameRegistry.findItem(GTPlusPlus.ID, unlocalizedName) == null) { - GameRegistry.registerItem(this, unlocalizedName); - } - } - - public void registerItem(final int id, final String localizedName, final long euStorage, final int tier) { - this.registerItem(id, localizedName, euStorage, (short) tier, EnumRarity.common, false); - } - - public void registerItem(final int id, final String localizedName, final long euStorage, final int tier, - final int burnTime) { - this.registerItem(id, localizedName, euStorage, (short) tier, EnumRarity.common, false); - this.setBurnValue(id, burnTime); - } - - public void registerItem(final int id, final String localizedName, final long euStorage, final short tier, - final EnumRarity regRarity, final boolean Effect) { - this.addItem( - id, - localizedName, - EnumChatFormatting.GRAY + "Can be used to remove fluids from GT machine input & output slots"); - if (euStorage > 0 && tier > 0) - this.setElectricStats(this.mOffset + id, euStorage, GT_Values.V[tier], tier, -3L, true); - this.rarity.put(id, regRarity); - this.itemName.put(id, localizedName); - this.hasEffect.put(id, Effect); - } - - @Override - @SideOnly(Side.CLIENT) - public EnumRarity getRarity(final ItemStack par1ItemStack) { - int h = getCorrectMetaForItemstack(par1ItemStack); - if (this.rarity.get(h) != null) { - return this.rarity.get(h); - } - return EnumRarity.common; - } - - @Override - public boolean hasEffect(final ItemStack par1ItemStack, final int pass) { - int h = getCorrectMetaForItemstack(par1ItemStack); - if (this.hasEffect.get(h) != null) { - return this.hasEffect.get(h); - } - return false; - } - - @SuppressWarnings({ "unchecked" }) - @Override - public void addInformation(final ItemStack aStack, final EntityPlayer aPlayer, List aList, final boolean aF3_H) { - // aList.add("Meta: "+(aStack.getItemDamage()-mOffset)); - int aOffsetMeta = getCorrectMetaForItemstack(aStack); - aList.add( - GT_LanguageManager - .getTranslation("gtplusplus." + this.getUnlocalizedName(aStack) + "." + aOffsetMeta + ".tooltip")); - - if (aOffsetMeta <= 3) { - FluidStack f = getFluid(aStack); - aList.add(StatCollector.translateToLocal("item.itemGregtechPump.tooltip.0")); - aList.add(StatCollector.translateToLocal("item.itemGregtechPump.tooltip.1")); - aList.add(EnumChatFormatting.DARK_GRAY + StatCollector.translateToLocal("item.itemGregtechPump.tooltip.2")); - aList.add( - EnumChatFormatting.BLUE + (f != null ? f.getLocalizedName() - : StatCollector.translateToLocal("item.itemGregtechPump.tooltip.3"))); - aList.add( - EnumChatFormatting.BLUE + (f != null ? "" + f.amount : "" + 0) - + "L" - + " / " - + formatNumbers(getCapacity(aStack)) - + "L"); - } - - final Long[] tStats = this.getElectricStats(aStack); - if (tStats != null) { - if (tStats[3] > 0) { - aList.add( - EnumChatFormatting.AQUA + StatCollector.translateToLocalFormatted( - "item.itemBaseEuItem.tooltip.1", - formatNumbers(tStats[3]), - (tStats[2] >= 0 ? tStats[2] : 0)) + EnumChatFormatting.GRAY); - } else { - final long tCharge = this.getRealCharge(aStack); - if ((tStats[3] == -2) && (tCharge <= 0)) { - aList.add( - EnumChatFormatting.AQUA + StatCollector.translateToLocal("item.itemBaseEuItem.tooltip.2") - + EnumChatFormatting.GRAY); - } else { - aList.add( - EnumChatFormatting.AQUA - + StatCollector.translateToLocalFormatted( - "item.itemBaseEuItem.tooltip.3", - formatNumbers(tCharge), - formatNumbers(Math.abs(tStats[0])) + " EU - Voltage: ", - V[(int) (tStats[2] >= 0 ? tStats[2] < V.length ? tStats[2] : V.length - 1 : 1)]) - + EnumChatFormatting.GRAY); - } - } - } - - final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); - if (tList != null) { - for (final IItemBehaviour tBehavior : tList) { - aList = tBehavior.getAdditionalToolTips(this, aList, aStack); - } - } - } - - @Override - public final Item getChargedItem(final ItemStack itemStack) { - return this; - } - - @Override - public final Item getEmptyItem(final ItemStack itemStack) { - return this; - } - - @Override - public final double getMaxCharge(final ItemStack aStack) { - final Long[] tStats = this.getElectricStats(aStack); - if (tStats == null) { - return 0; - } - return Math.abs(tStats[0]); - } - - @Override - public final double getTransferLimit(final ItemStack aStack) { - final Long[] tStats = this.getElectricStats(aStack); - if (tStats == null) { - return 0; - } - return Math.max(tStats[1], tStats[3]); - } - - @Override - public final int getTier(final ItemStack aStack) { - final Long[] tStats = this.getElectricStats(aStack); - return (int) (tStats == null ? Integer.MAX_VALUE : tStats[2]); - } - - @Override - public final double charge(final ItemStack aStack, final double aCharge, final int aTier, - final boolean aIgnoreTransferLimit, final boolean aSimulate) { - final Long[] tStats = this.getElectricStats(aStack); - if ((tStats == null) || (tStats[2] > aTier) - || !((tStats[3] == -1) || (tStats[3] == -3) || ((tStats[3] < 0) && (aCharge == Integer.MAX_VALUE))) - || (aStack.stackSize != 1)) { - return 0; - } - final long tChargeBefore = this.getRealCharge(aStack), - tNewCharge = aCharge == Integer.MAX_VALUE ? Long.MAX_VALUE - : Math.min( - Math.abs(tStats[0]), - tChargeBefore + (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge))); - if (!aSimulate) { - this.setCharge(aStack, tNewCharge); - } - return tNewCharge - tChargeBefore; - } - - @Override - public final double discharge(final ItemStack aStack, final double aCharge, final int aTier, - final boolean aIgnoreTransferLimit, final boolean aBatteryAlike, final boolean aSimulate) { - final Long[] tStats = this.getElectricStats(aStack); - if ((tStats == null) || (tStats[2] > aTier)) { - return 0; - } - if (aBatteryAlike && !this.canProvideEnergy(aStack)) { - return 0; - } - if (tStats[3] > 0) { - if ((aCharge < tStats[3]) || (aStack.stackSize < 1)) { - return 0; - } - if (!aSimulate) { - aStack.stackSize--; - } - return tStats[3]; - } - final long tChargeBefore = this.getRealCharge(aStack), tNewCharge = Math - .max(0, tChargeBefore - (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge))); - if (!aSimulate) { - this.setCharge(aStack, tNewCharge); - } - return tChargeBefore - tNewCharge; - } - - @Override - public final double getCharge(final ItemStack aStack) { - return this.getRealCharge(aStack); - } - - @Override - public final boolean canUse(final ItemStack aStack, final double aAmount) { - return this.getRealCharge(aStack) >= aAmount; - } - - @Override - public final boolean use(final ItemStack aStack, final double aAmount, final EntityLivingBase aPlayer) { - this.chargeFromArmor(aStack, aPlayer); - if ((aPlayer instanceof EntityPlayer) && ((EntityPlayer) aPlayer).capabilities.isCreativeMode) { - return true; - } - final double tTransfer = this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, true); - if (tTransfer == aAmount) { - this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); - this.chargeFromArmor(aStack, aPlayer); - return true; - } - this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); - this.chargeFromArmor(aStack, aPlayer); - return false; - } - - @Override - public final boolean canProvideEnergy(final ItemStack aStack) { - final Long[] tStats = this.getElectricStats(aStack); - if (tStats == null) { - return false; - } - return (tStats[3] > 0) || ((aStack.stackSize == 1) && ((tStats[3] == -2) || (tStats[3] == -3))); - } - - @Override - public final void chargeFromArmor(final ItemStack aStack, final EntityLivingBase aPlayer) { - if ((aPlayer == null) || aPlayer.worldObj.isRemote) { - return; - } - for (int i = 1; i < 5; i++) { - final ItemStack tArmor = aPlayer.getEquipmentInSlot(i); - if (GT_ModHandler.isElectricItem(tArmor)) { - final IElectricItem tArmorItem = (IElectricItem) tArmor.getItem(); - if (tArmorItem.canProvideEnergy(tArmor) && (tArmorItem.getTier(tArmor) >= this.getTier(aStack))) { - final double tCharge = ElectricItem.manager.discharge( - tArmor, - this.charge(aStack, Integer.MAX_VALUE - 1, Integer.MAX_VALUE, true, true), - Integer.MAX_VALUE, - true, - true, - false); - if (tCharge > 0) { - this.charge(aStack, tCharge, Integer.MAX_VALUE, true, false); - if (aPlayer instanceof EntityPlayer) { - final Container tContainer = ((EntityPlayer) aPlayer).openContainer; - if (tContainer != null) { - tContainer.detectAndSendChanges(); - } - } - } - } - } - } - } - - public final long getRealCharge(final ItemStack aStack) { - final Long[] tStats = this.getElectricStats(aStack); - if (tStats == null) { - return 0; - } - if (tStats[3] > 0) { - return (int) (long) tStats[3]; - } - final NBTTagCompound tNBT = aStack.getTagCompound(); - return tNBT == null ? 0 : tNBT.getLong("GT.ItemCharge"); - } - - public final boolean setCharge(final ItemStack aStack, long aCharge) { - final Long[] tStats = this.getElectricStats(aStack); - if ((tStats == null) || (tStats[3] > 0)) { - return false; - } - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - } - tNBT.removeTag("GT.ItemCharge"); - aCharge = Math.min(tStats[0] < 0 ? Math.abs(tStats[0] / 2) : aCharge, Math.abs(tStats[0])); - if (aCharge > 0) { - aStack.setItemDamage(this.getChargedMetaData(aStack)); - tNBT.setLong("GT.ItemCharge", aCharge); - } else { - aStack.setItemDamage(this.getEmptyMetaData(aStack)); - } - if (tNBT.hasNoTags()) { - aStack.setTagCompound(null); - } else { - aStack.setTagCompound(tNBT); - } - this.isItemStackUsable(aStack); - return true; - } - - public short getChargedMetaData(final ItemStack aStack) { - return (short) aStack.getItemDamage(); - } - - public short getEmptyMetaData(final ItemStack aStack) { - return (short) aStack.getItemDamage(); - } - - public boolean isItemStackUsable(final ItemStack aStack) { - final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); - if (tList != null) { - for (final IItemBehaviour tBehavior : tList) { - if (!tBehavior.isItemStackUsable(this, aStack)) { - return false; - } - } - } - return true; - } - - @Override - public final String getToolTip(final ItemStack aStack) { - return null; - } // This has its own ToolTip Handler, no need to let the IC2 Handler screw us up - // at this Point - - @Override - public final IElectricItemManager getManager(final ItemStack aStack) { - return this; - } // We are our own Manager - - /** - * Sets the Furnace Burn Value for the Item. - * - * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] - * @param aValue 200 = 1 Burn Process = 500 EU, max = 32767 (that is 81917.5 EU) - * @return the Item itself for convenience in constructing. - */ - public final GregtechPump setBurnValue(final int aMetaValue, final int aValue) { - if ((aMetaValue < 0) || (aValue < 0)) { - return this; - } - if (aValue == 0) { - this.mBurnValues.remove((short) aMetaValue); - } else { - this.mBurnValues.put((short) aMetaValue, aValue > Short.MAX_VALUE ? Short.MAX_VALUE : (short) aValue); - } - return this; - } - - /** - * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] - * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior) - * @param aTransferLimit Transfer Limit. - * @param aTier The electric Tier. - * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0). Use -1 if you want to - * make this Battery chargeable (the use and canUse Functions will still discharge if you just - * use this) Use -2 if you want to make this Battery dischargeable. Use -3 if you want to make - * this Battery charge/discharge-able. - * @return the Item itself for convenience in constructing. - */ - public final GregtechPump setElectricStats(final int aMetaValue, final long aMaxCharge, final long aTransferLimit, - final long aTier, final long aSpecialData, final boolean aUseAnimations) { - if (aMetaValue < 0) { - return this; - } - if (aMaxCharge == 0) { - this.mElectricStats.remove((short) aMetaValue); - } else { - this.mElectricStats.put( - (short) aMetaValue, - new Long[] { aMaxCharge, Math.max(0, aTransferLimit), Math.max(-1, aTier), aSpecialData }); - } - return this; - } - - @SuppressWarnings({ "unchecked" }) - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(final Item var1, final CreativeTabs aCreativeTab, final List aList) { - for (int i = 0, j = this.mEnabledItems.length(); i < j; i++) { - if (this.mVisibleItems.get(i) || (GT_Values.D1 && this.mEnabledItems.get(i))) { - final Long[] tStats = this.mElectricStats.get((short) (this.mOffset + i)); - if ((tStats != null) && (tStats[3] < 0)) { - final ItemStack tStack = new ItemStack(this, 1, this.mOffset + i); - this.setCharge(tStack, Math.abs(tStats[0])); - this.isItemStackUsable(tStack); - aList.add(tStack); - } - if ((tStats == null) || (tStats[3] != -2)) { - final ItemStack tStack = new ItemStack(this, 1, this.mOffset + i); - this.isItemStackUsable(tStack); - aList.add(tStack); - } - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public final void registerIcons(final IIconRegister aIconRegister) { - for (short i = 0, j = (short) this.mEnabledItems.length(); i < j; i++) { - if (this.mEnabledItems.get(i)) { - mIconMap.put( - (int) i, - aIconRegister.registerIcon(GTPlusPlus.ID + ":" + (this.getUnlocalizedName() + "/" + i))); - } - } - } - - @Override - public final IIcon getIconFromDamage(final int aMetaData) { - if (aMetaData < 0) { - return null; - } - if (aMetaData < this.mOffset) { - return mIconMap.get(0); - } else { - int newMeta = aMetaData - this.mOffset; - newMeta = (Math.max(0, Math.min(3, newMeta))); - return mIconMap.get(newMeta); - } - } - - /** - * Sets the unlocalized name of this item to the string passed as the parameter" - */ - @Override - public Item setUnlocalizedName(final String p_77655_1_) { - this.unlocalizedName = p_77655_1_; - super.setUnlocalizedName(p_77655_1_); - return this; - } - - /** - * Returns the unlocalized name of this item. - */ - @Override - public String getUnlocalizedName() { - return this.unlocalizedName; - } - - public final Long[] getElectricStats(final ItemStack aStack) { - return this.mElectricStats.get((short) aStack.getItemDamage()); - } - - @Override - public int getItemEnchantability() { - return 0; - } - - @Override - public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) { - return false; - } - - @Override - public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) { - return false; - } - - /** - * Adds a special Item Behaviour to the Item. - *

- * Note: the boolean Behaviours sometimes won't be executed if another boolean Behaviour returned true before. - * - * @param aMetaValue the Meta Value of the Item you want to add it to. [0 - 32765] - * @param aBehavior the Click Behavior you want to add. - * @return the Item itself for convenience in constructing. - */ - public final GregtechPump addItemBehavior(final int aMetaValue, final IItemBehaviour aBehavior) { - if ((aMetaValue < 0) || (aMetaValue >= 32766) || (aBehavior == null)) { - return this; - } - ArrayList> tList = this.mItemBehaviors.get((short) aMetaValue); - if (tList == null) { - tList = new ArrayList<>(1); - this.mItemBehaviors.put((short) aMetaValue, tList); - } - tList.add(aBehavior); - return this; - } - - /** - * This adds a Custom Item to the ending Range. - * - * @param aID The Id of the assigned Item [0 - mItemAmount] (The MetaData gets auto-shifted by +mOffset) - * @param aEnglish The Default Localized Name of the created Item - * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip - * @param aFoodBehavior The Food Value of this Item. Can be null aswell. Just a convenience thing. - * @param aRandomData The OreDict Names you want to give the Item. Also used for TC Aspects and some other things. - * @return An ItemStack containing the newly created Item. - */ - @SuppressWarnings("unchecked") - public final ItemStack addItem(final int aID, final String aEnglish, String aToolTip, final Object... aRandomData) { - if (aToolTip == null) { - aToolTip = ""; - } - if ((aID >= 0) && (aID < this.mItemAmount)) { - final ItemStack rStack = new ItemStack(this, 1, this.mOffset + aID); - GT_ModHandler.registerBoxableItemToToolBox(rStack); - this.mEnabledItems.set(aID); - this.mVisibleItems.set(aID); - GT_LanguageManager - .addStringLocalization("gtplusplus." + this.getUnlocalizedName(rStack) + "." + aID + ".name", aEnglish); - GT_LanguageManager.addStringLocalization( - "gtplusplus." + this.getUnlocalizedName(rStack) + "." + aID + ".tooltip", - aToolTip); - final List tAspects = new ArrayList<>(); - // Important Stuff to do first - for (final Object tRandomData : aRandomData) { - if (tRandomData instanceof SubTag) { - if (tRandomData == SubTag.INVISIBLE) { - this.mVisibleItems.set(aID, false); - continue; - } - if (tRandomData == SubTag.NO_UNIFICATION) { - GT_OreDictUnificator.addToBlacklist(rStack); - continue; - } - } - } - // now check for the rest - for (final Object tRandomData : aRandomData) { - if (tRandomData != null) { - boolean tUseOreDict = true; - if (tRandomData instanceof IItemBehaviour) { - this.addItemBehavior(this.mOffset + aID, (IItemBehaviour) tRandomData); - tUseOreDict = false; - } - if (tRandomData instanceof IItemContainer) { - ((IItemContainer) tRandomData).set(rStack); - tUseOreDict = false; - } - if (tRandomData instanceof SubTag) { - continue; - } - if (tRandomData instanceof TC_AspectStack) { - ((TC_AspectStack) tRandomData).addToAspectList(tAspects); - continue; - } - if (tRandomData instanceof ItemData) { - if (GT_Utility.isStringValid(tRandomData)) { - GT_OreDictUnificator.registerOre(tRandomData, rStack); - } else { - GT_OreDictUnificator.addItemData(rStack, (ItemData) tRandomData); - } - continue; - } - if (tUseOreDict) { - GT_OreDictUnificator.registerOre(tRandomData, rStack); - continue; - } - } - } - if (GregTech_API.sThaumcraftCompat != null) { - GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); - } - return rStack; - } - return null; - } - - @Override - public String getItemStackDisplayName(final ItemStack aStack) { - int keyValue = (getCorrectMetaForItemstack(aStack)); - if (keyValue < 0 || keyValue > 3) { - keyValue = 0; - } - return GT_LanguageManager - .getTranslation("gtplusplus." + this.getUnlocalizedName(aStack) + "." + keyValue + ".name"); - } - - /** - * Fluid Handling - */ - - /* - * IFluidContainer Functions - */ - - public void emptyStoredFluid(ItemStack aStack) { - if (aStack.hasTagCompound()) { - NBTTagCompound t = aStack.getTagCompound(); - if (t.hasKey("mInit")) { - t.removeTag("mInit"); - } - if (t.hasKey("mFluid")) { - t.removeTag("mFluid"); - } - if (t.hasKey("mFluidAmount")) { - t.removeTag("mFluidAmount"); - } - } - } - - public void storeFluid(ItemStack aStack, FluidStack aFluid) { - if (aFluid == null) { - return; - } else { - String fluidname = aFluid.getFluid() - .getName(); - int amount = aFluid.amount; - if (fluidname != null && fluidname.length() > 0 && amount > 0) { - NBTUtils.setString(aStack, "mFluid", fluidname); - NBTUtils.setInteger(aStack, "mFluidAmount", amount); - } - } - } - - @Override - public FluidStack getFluid(ItemStack container) { - if (!container.hasTagCompound() || !container.getTagCompound() - .hasKey("mInit")) { - initNBT(container); - } - if (container.getTagCompound() - .hasKey("mInit") - && container.getTagCompound() - .getBoolean("mInit")) { - String fluidname; - Integer amount = 0; - fluidname = NBTUtils.getString(container, "mFluid"); - amount = NBTUtils.getInteger(container, "mFluidAmount"); - if (fluidname != null && amount != null && amount > 0) { - return FluidUtils.getFluidStack(fluidname, amount); - } else { - return null; - } - } - return null; - } - - @Override - public int getCapacity(ItemStack container) { - if (!container.hasTagCompound() || !container.getTagCompound() - .hasKey("mInit")) { - initNBT(container); - } - if (container.getTagCompound() - .hasKey("mInit") - && container.getTagCompound() - .getBoolean("mInit")) { - return container.getTagCompound() - .getInteger("mCapacity"); - } - int aMeta = this.getCorrectMetaForItemstack(container); - int aCapacity = (aMeta == 0 ? 2000 : (aMeta == 1 ? 8000 : (aMeta == 2 ? 32000 : 128000))); - return aCapacity; - } - - public int fill(ItemStack container, FluidStack resource) { - return fill(container, resource, true); - } - - @Override - public int fill(ItemStack container, FluidStack resource, boolean doFill) { - if (!doFill || resource == null) { - return 0; - } - - if (!container.hasTagCompound() || !container.getTagCompound() - .hasKey("mInit")) { - initNBT(container); - } - if (container.getTagCompound() - .hasKey("mInit") - && container.getTagCompound() - .getBoolean("mInit")) { - String aStored; - int aStoredAmount = 0; - int aCapacity = getCapacity(container); - FluidStack aStoredFluid = getFluid(container); - if (aStoredFluid != null) { - aStored = aStoredFluid.getFluid() - .getName(); - aStoredAmount = aStoredFluid.amount; - if (aStoredAmount == aCapacity) { - return 0; - } - } - // Handle no stored fluid first - if (aStoredFluid == null) { - Logger.INFO("Pump is empty, filling with tank fluids."); - FluidStack toConsume; - int amountToConsume = 0; - if (resource.amount >= aCapacity) { - amountToConsume = aCapacity; - } else { - amountToConsume = resource.amount; - } - toConsume = FluidUtils.getFluidStack(resource, amountToConsume); - if (toConsume != null && amountToConsume > 0) { - storeFluid(container, toConsume); - return amountToConsume; - } - } else { - Logger.INFO("Pump is Partially full, filling with tank fluids."); - if (aStoredFluid.isFluidEqual(resource)) { - Logger.INFO("Found matching fluids."); - int aSpaceLeft = (aCapacity - aStoredAmount); - Logger.INFO( - "Capacity: " + aCapacity + " | Stored: " + aStoredAmount + " | Space left: " + aSpaceLeft); - FluidStack toConsume; - int amountToConsume = 0; - if (resource.amount >= aSpaceLeft) { - amountToConsume = aSpaceLeft; - Logger.INFO("More or equal fluid amount to pump container space."); - } else { - amountToConsume = resource.amount; - Logger.INFO("Less fluid than container space"); - } - Logger.INFO("Amount to consume: " + amountToConsume); - toConsume = FluidUtils.getFluidStack(resource, (aStoredAmount + amountToConsume)); - if (toConsume != null && amountToConsume > 0) { - Logger.INFO("Storing Fluid"); - storeFluid(container, toConsume); - return amountToConsume; - } else { - Logger.INFO("Not storing fluid"); - } - } else { - Logger.INFO("Fluids did not match."); - } - } - } - return 0; - } - - public FluidStack drain(ItemStack container, int drainAmt) { - return drain(container, drainAmt, true); - } - - @Override - public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) { - if (!doDrain || maxDrain == 0) { - return null; - } - if (!container.hasTagCompound() || !container.getTagCompound() - .hasKey("mInit")) { - initNBT(container); - } - if (container.getTagCompound() - .hasKey("mInit") - && container.getTagCompound() - .getBoolean("mInit")) { - - String aStored; - int aStoredAmount = 0; - FluidStack aStoredFluid = getFluid(container); - - if (aStoredFluid != null) { - aStored = aStoredFluid.getFluid() - .getName(); - aStoredAmount = aStoredFluid.amount; - } - // We cannot drain this if it's empty. - else if (aStoredFluid == null) { - return null; - } - - if (maxDrain >= aStoredAmount) { - emptyStoredFluid(container); - return aStoredFluid; - } else { - // Handle Partial removal - int amountRemaining = (aStoredAmount - maxDrain); - if (amountRemaining == 0) { - emptyStoredFluid(container); - } else { - FluidStack newAmount = FluidUtils.getFluidStack(aStoredFluid, amountRemaining); - FluidStack drained = FluidUtils.getFluidStack(aStoredFluid, maxDrain); - if (newAmount != null && drained != null) { - storeFluid(container, newAmount); - return drained; - } - } - } - } - return null; - } - - /* - * Handle ItemStack NBT - */ - - public void initNBT(ItemStack aStack) { - NBTTagCompound aNewNBT; - if (!aStack.hasTagCompound()) { - aNewNBT = new NBTTagCompound(); - } else { - aNewNBT = aStack.getTagCompound(); - } - - if (!aNewNBT.hasKey("mInit")) { - int aMeta = this.getCorrectMetaForItemstack(aStack); - aNewNBT.setInteger("mMeta", aMeta); - aNewNBT.setBoolean("mInit", true); - aNewNBT.setString("mFluid", "@@@@@"); - aNewNBT.setInteger("mFluidAmount", 0); - int aCapacity = (aMeta == 0 ? 2000 : (aMeta == 1 ? 8000 : (aMeta == 2 ? 32000 : 128000))); - aNewNBT.setInteger("mCapacity", aCapacity); - aStack.setTagCompound(aNewNBT); - } - } - - /** - * Tile Handling - */ - - /* - * Custom Fluid Handling for Tiles and GT Tiles. - */ - - public boolean tryDrainTile(ItemStack aStack, World aWorld, EntityPlayer aPlayer, int aX, int aY, int aZ) { - try { - if (aWorld.isRemote || aStack == null) { - return false; - } else { - int aTier = (aStack.getItemDamage() - 1000); - int removal; - if (aTier == 0) { - removal = 0; - } else if (aTier == 1) { - removal = 32; - } else if (aTier == 2) { - removal = 128; - } else if (aTier == 3) { - removal = 512; - } else { - removal = 8; - } - if (!canUse(aStack, removal) && aTier > 0) { - PlayerUtils.messagePlayer(aPlayer, "Not enough power."); - Logger.INFO("No Power"); - return false; - } - - final Block aBlock = aWorld.getBlock(aX, aY, aZ); - if (aBlock == null) { - return false; - } - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity == null) { - return false; - } else { - double aCharge = this.getCharge(aStack); - boolean didDrain = false; - if (aTier > 0 && aCharge > 0) { - if (discharge(aStack, removal, aTier, true, true, false) > 0) { - didDrain = true; - } - } else if (aTier == 0) { - didDrain = true; - } else { - didDrain = false; - } - - if (didDrain) { - if ((tTileEntity instanceof IGregTechTileEntity)) { - return this.drainTankGT(tTileEntity, aStack, aWorld, aPlayer, aX, aY, aZ); - } - // Try support Standard Fluid Tanks too (May disable if dupes appear again) - else if ((tTileEntity instanceof IFluidTank || tTileEntity instanceof IFluidHandler)) { - // return this.drainIFluidTank(tTileEntity, aStack, aWorld, aPlayer, aX, aY, aZ); - return false; - } - } - } - } - } catch (Throwable t) {} - return false; - } - - /* - * Vanilla IFluidTank - */ - - public boolean drainIFluidTank(TileEntity tTileEntity, ItemStack aStack, World aWorld, EntityPlayer aPlayer, int aX, - int aY, int aZ) { - if (tTileEntity == null) { - Logger.INFO("Invalid Tile, somehow."); - return false; - } - if ((tTileEntity instanceof IFluidTank || tTileEntity instanceof IFluidHandler)) { - if (this.getFluid(aStack) == null - || (this.getFluid(aStack) != null && this.getFluid(aStack).amount < this.getCapacity(aStack))) { - Logger.INFO("Trying to find Stored Fluid - Behaviour Class."); - FluidStack aStored = getStoredFluidOfVanillaTank(tTileEntity); - if (aStored != null) { - int mAmountInserted = fill(aStack, aStored); - FluidStack newStackRemainingInTank; - if (mAmountInserted > 0) { - if (mAmountInserted == aStored.amount) { - newStackRemainingInTank = null; - } else { - newStackRemainingInTank = FluidUtils - .getFluidStack(aStored, (aStored.amount - mAmountInserted)); - } - boolean b = setStoredFluidOfVanillaTank(tTileEntity, newStackRemainingInTank); - Logger.INFO("Cleared Tank? " + b + " | mAmountInserted: " + mAmountInserted); - Logger.INFO("Returning " + b + " - drainTankVanilla."); - if (b) { - PlayerUtils.messagePlayer( - aPlayer, - "Drained " + mAmountInserted + "L of " + aStored.getLocalizedName() + "."); - } - return b; - } - } else { - Logger.INFO("Found no valid Fluidstack - drainTankVanilla."); - } - } else { - Logger.INFO("Pump is full."); - } - } - Logger.INFO("Could not drain vanilla tank."); - return false; - } - - /* - * GT Tanks - */ - - public boolean drainTankGT(TileEntity tTileEntity, ItemStack aStack, World aWorld, EntityPlayer aPlayer, int aX, - int aY, int aZ) { - if (tTileEntity == null) { - return false; - } - if ((tTileEntity instanceof IGregTechTileEntity)) { - Logger.INFO("Right Clicking on GT Tile - drainTankGT."); - if (((IGregTechTileEntity) tTileEntity).getTimer() < 50L) { - Logger.INFO("Returning False - Behaviour Class. Timer < 50"); - return false; - } else if ((!aWorld.isRemote) && (!((IGregTechTileEntity) tTileEntity).isUseableByPlayer(aPlayer))) { - Logger.INFO("Returning True - drainTankGT. NotUsable()"); - return true; - } else { - if (this.getFluid(aStack) == null - || (this.getFluid(aStack) != null && this.getFluid(aStack).amount < this.getCapacity(aStack))) { - Logger.INFO("Trying to find Stored Fluid - drainTankGT."); - FluidStack aStored = getStoredFluidOfGTMachine((IGregTechTileEntity) tTileEntity); - if (aStored != null) { - int mAmountInserted = fill(aStack, aStored); - FluidStack newStackRemainingInTank; - if (mAmountInserted > 0) { - if (mAmountInserted == aStored.amount) { - newStackRemainingInTank = null; - } else { - newStackRemainingInTank = FluidUtils - .getFluidStack(aStored, (aStored.amount - mAmountInserted)); - } - boolean b = setStoredFluidOfGTMachine( - (IGregTechTileEntity) tTileEntity, - newStackRemainingInTank); - Logger.INFO("Cleared Tank? " + b + " | mAmountInserted: " + mAmountInserted); - Logger.INFO("Returning " + b + " - drainTankGT."); - if (b) { - PlayerUtils.messagePlayer( - aPlayer, - "Drained " + mAmountInserted + "L of " + aStored.getLocalizedName() + "."); - } else { - drain(aStack, mAmountInserted); - } - return b; - } - } else { - Logger.INFO("Found no valid Fluidstack - drainTankGT."); - } - } else { - Logger.INFO("Pump is full."); - } - } - } - Logger.INFO("Could not drain GT tank."); - return false; - } - - /* - * Vanilla Tanks - */ - - public FluidStack getStoredFluidOfVanillaTank(TileEntity aTileEntity) { - if (aTileEntity == null) { - return null; - } else if ((aTileEntity instanceof IFluidTank || aTileEntity instanceof IFluidHandler)) { - if (aTileEntity instanceof IFluidTank) { - return getStoredFluidOfVanillaTank((IFluidTank) aTileEntity); - } else { - return getStoredFluidOfVanillaTank((IFluidHandler) aTileEntity); - } - } else { - return null; - } - } - - public FluidStack getStoredFluidOfVanillaTank(IFluidTank aTileEntity) { - FluidStack f = aTileEntity.getFluid(); - Logger.INFO( - "Returning Fluid stack from tile. Found: " - + (f != null ? f.getLocalizedName() + " - " + f.amount + "L" : "Nothing")); - return f; - } - - public FluidStack getStoredFluidOfVanillaTank(IFluidHandler aTileEntity) { - if (aTileEntity instanceof IFluidTank) { - return getStoredFluidOfVanillaTank((IFluidTank) aTileEntity); - } - FluidStack f; - AutoMap m = new AutoMap<>(); - for (int i = 0; i < 6; i++) { - m.put(aTileEntity.getTankInfo(ForgeDirection.getOrientation(i))); - } - if (m.get(0) != null && m.get(0)[0] != null && m.get(0)[0].fluid != null) { - return m.get(0)[0].fluid; - } else { - return null; - } - } - - public boolean setStoredFluidOfVanillaTank(TileEntity aTileEntity, FluidStack aSetFluid) { - Logger.INFO("Trying to clear Tile's tank. - Behaviour Class. [1]"); - - if (aTileEntity == null) { - return false; - } else if ((aTileEntity instanceof IFluidTank || aTileEntity instanceof IFluidHandler)) { - if (aTileEntity instanceof IFluidTank) { - Logger.INFO("Tile Was instanceof IFluidTank."); - FluidStack f = ((IFluidTank) aTileEntity).getFluid(); - if (aSetFluid == null) { - aSetFluid = f; - aSetFluid.amount = f.amount; - } - int toDrain = (f.amount - aSetFluid.amount); - FluidStack newStack; - if (toDrain <= 0) { - newStack = f; - } else { - newStack = ((IFluidTank) aTileEntity).drain(toDrain, true); - } - - if (newStack.isFluidEqual(aSetFluid) && newStack.amount == aSetFluid.amount) { - Logger.INFO("Removed fluid from vanilla IFluidTank successfully."); - return true; - } else { - Logger.INFO("Failed trying to remove fluid from vanilla IFluidTank."); - return false; - } - } else { - - // Rewrite Fluid handling for Vanilla type tanks - if (!IFluidHandler.class.isInstance(aTileEntity)) { - Logger.INFO("Tile Was not an instance of IFluidHandler."); - return false; - } - - IFluidHandler aTank = (IFluidHandler) aTileEntity; - FluidStack aTankContents = null; - FluidTankInfo[] a1 = aTank.getTankInfo(ForgeDirection.UNKNOWN); - if (a1 != null) { - if (a1[0] != null) { - aTankContents = a1[0].fluid; - Logger.INFO( - "Found Fluid in Tank. " + aTankContents.getLocalizedName() + " - " + aTankContents.amount); - } - } - if (aSetFluid == null) { - Logger.INFO("Setting fluid to tank contents, as we're going to empty it totally."); - aSetFluid = aTankContents.copy(); - } else { - Logger.INFO("Setting fluid to tank contents, as we're going to empty it totally."); - } - Logger.INFO( - "Tile Was instance of IFluidHandler. Trying to Drain " + aSetFluid.getLocalizedName() - + " - " - + aSetFluid.amount); - - if (a1 == null || aTankContents == null) { - Logger.INFO("Tank is empty."); - return false; - } - // Found some Fluid in the tank - else { - FluidStack aDrainedStack = aTank.drain(ForgeDirection.UNKNOWN, aSetFluid, true); - if (aDrainedStack.isFluidStackIdentical(aSetFluid)) { - Logger.INFO("Drained!"); - return true; - } else { - Logger.INFO("Partially Drained! This is probably an error."); - return true; - } - } - } - } else { - Logger.INFO("Bad Tank Tile to drain."); - return false; - } - } - - /* - * GT Tanks - */ - - public FluidStack getStoredFluidOfGTMachine(IGregTechTileEntity aTileEntity) { - if (aTileEntity == null) { - return null; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();; - if (aMetaTileEntity == null || aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_MultiInput) { - // blacklist multiinput hatch as it's too complex - return null; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_BasicTank) { - Logger.INFO("Tile Was Instanceof BasicTank."); - return getStoredFluidOfGTMachine((GT_MetaTileEntity_BasicTank) aMetaTileEntity); - } else { - return null; - } - } - - public FluidStack getStoredFluidOfGTMachine(GT_MetaTileEntity_BasicTank aTileEntity) { - FluidStack f = aTileEntity.mFluid; - - // Let's see if this machine has output fluid too - /* - * if (f == null) { Logger.INFO("Could not find any input fluid, checking output if possible."); if (aTileEntity - * instanceof GT_MetaTileEntity_BasicMachine) { GT_MetaTileEntity_BasicMachine g = - * (GT_MetaTileEntity_BasicMachine) aTileEntity; - * Logger.INFO("Tile is a Basic Machine of some sort - "+g.mNEIName); if (g != null) { f = g.mOutputFluid; if (f - * != null) { Logger.INFO("Found output fluid! "+f.getLocalizedName()); } else { - * Logger.INFO("Did not find anything!"); f = g.getFluid(); if (f != null) { - * Logger.INFO("Found fluid! "+f.getLocalizedName()); } else { Logger.INFO("Did not find anything!"); f = - * g.getFluid(); } } } } } - */ - - Logger.INFO( - "Returning Fluid stack from tile. Found: " - + (f != null ? f.getLocalizedName() + " - " + f.amount + "L" : "Nothing")); - return f; - } - - public boolean setStoredFluidOfGTMachine(IGregTechTileEntity aTileEntity, FluidStack aSetFluid) { - Logger.INFO("Trying to clear Tile's tank. - Behaviour Class. [1]"); - if (aTileEntity == null) { - return false; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_BasicTank) { - Logger.INFO("Trying to clear Tile's tank. - Behaviour Class. [2]"); - return setStoredFluidOfGTMachine((GT_MetaTileEntity_BasicTank) aMetaTileEntity, aSetFluid); - } else { - return false; - } - } - - public boolean setStoredFluidOfGTMachine(GT_MetaTileEntity_BasicTank aTileEntity, FluidStack aSetFluid) { - try { - - // Try Handle Outputs First - /* - * if (aTileEntity.setDrainableStack(aSetFluid) != null) { return true; } - */ - - aTileEntity.mFluid = aSetFluid; - boolean b = aTileEntity.mFluid == aSetFluid; - Logger.INFO("Trying to set Tile's tank. - Behaviour Class. [3] " + b); - return b; - } catch (Throwable t) { - Logger.INFO("Trying to clear Tile's tank. FAILED - Behaviour Class. [x]"); - return false; - } - } - - public int getCorrectMetaForItemstack(ItemStack aStack) { - if (aStack == null) { - return 0; - } else { - if (aStack.getItemDamage() < this.mOffset) { - return 0; - } else { - int newMeta = aStack.getItemDamage() - this.mOffset; - newMeta = (Math.max(0, Math.min(3, newMeta))); - return newMeta; - } - } - } -} diff --git a/src/main/java/gtPlusPlus/core/item/tool/misc/ItemGregtechPump.java b/src/main/java/gtPlusPlus/core/item/tool/misc/ItemGregtechPump.java new file mode 100644 index 0000000000..082f74ad2b --- /dev/null +++ b/src/main/java/gtPlusPlus/core/item/tool/misc/ItemGregtechPump.java @@ -0,0 +1,1323 @@ +package gtPlusPlus.core.item.tool.misc; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.util.GTUtility.formatNumbers; + +import java.util.ArrayList; +import java.util.BitSet; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidContainerItem; +import net.minecraftforge.fluids.IFluidHandler; +import net.minecraftforge.fluids.IFluidTank; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TCAspects.TC_AspectStack; +import gregtech.api.interfaces.IItemBehaviour; +import gregtech.api.interfaces.IItemContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.metatileentity.implementations.MTEHatchMultiInput; +import gregtech.api.objects.ItemData; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.NBTUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; +import ic2.api.item.IElectricItemManager; +import ic2.api.item.ISpecialElectricItem; + +public class ItemGregtechPump extends Item implements ISpecialElectricItem, IElectricItemManager, IFluidContainerItem { + + /** + * Right Click Functions + */ + @Override + public boolean onItemUse(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int a4, + float p_77648_8_, float p_77648_9_, float p_77648_10_) { + if (aStack == null || aPlayer == null || aWorld == null || aWorld.isRemote) { + return false; + } + if (!aWorld.isRemote && tryDrainTile(aStack, aWorld, aPlayer, aX, aY, aZ)) { + return true; + } else { + // return super.onItemUse(aStack, aPlayer, aWorld, aX, aY, aZ, a4, p_77648_8_, p_77648_9_, p_77648_10_); + return false; + } + } + + @Override + public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_) { + return p_77659_1_; + } + + /** + * GT Code + */ + + /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ + private final HashMap>> mItemBehaviors = new HashMap<>(); + + public final short mOffset, mItemAmount; + public final BitSet mEnabledItems; + public final BitSet mVisibleItems; + /** The unlocalized name of this item. */ + private String unlocalizedName; + + private final HashMap mIconMap = new LinkedHashMap<>(); + private final HashMap rarity = new LinkedHashMap<>(); + private final HashMap itemName = new LinkedHashMap<>(); + private final HashMap hasEffect = new LinkedHashMap<>(); + + public final HashMap mElectricStats = new LinkedHashMap<>(); + public final HashMap mBurnValues = new LinkedHashMap<>(); + + public void registerPumpType(final int aID, final String aPumpName, final int aEuMax, final int aTier) { + ModItems.toolGregtechPump.registerItem( + aID, // ID + aPumpName, // Name + aEuMax, // Eu Storage + (short) aTier, // Tier/ Tooltip + aTier <= 0 ? EnumRarity.common + : aTier == 1 ? EnumRarity.uncommon + : aTier == 2 ? EnumRarity.rare : aTier == 3 ? EnumRarity.epic : EnumRarity.common, // Rarity + false // Effect? + ); + } + + public ItemGregtechPump() { + this("MU-metatool.01", AddToCreativeTab.tabTools, (short) 1000, (short) 31766); + } + + public ItemGregtechPump(final String unlocalizedName, final CreativeTabs creativeTab, final short aOffset, + final short aItemAmount) { + this.mEnabledItems = new BitSet(aItemAmount); + this.mVisibleItems = new BitSet(aItemAmount); + this.mOffset = (short) Math.min(32766, aOffset); + this.mItemAmount = (short) Math.min(aItemAmount, 32766 - this.mOffset); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setUnlocalizedName(unlocalizedName); + this.setCreativeTab(creativeTab); + this.setMaxStackSize(1); + if (GameRegistry.findItem(GTPlusPlus.ID, unlocalizedName) == null) { + GameRegistry.registerItem(this, unlocalizedName); + } + } + + public void registerItem(final int id, final String localizedName, final long euStorage, final int tier) { + this.registerItem(id, localizedName, euStorage, (short) tier, EnumRarity.common, false); + } + + public void registerItem(final int id, final String localizedName, final long euStorage, final int tier, + final int burnTime) { + this.registerItem(id, localizedName, euStorage, (short) tier, EnumRarity.common, false); + this.setBurnValue(id, burnTime); + } + + public void registerItem(final int id, final String localizedName, final long euStorage, final short tier, + final EnumRarity regRarity, final boolean Effect) { + this.addItem( + id, + localizedName, + EnumChatFormatting.GRAY + "Can be used to remove fluids from GT machine input & output slots"); + if (euStorage > 0 && tier > 0) + this.setElectricStats(this.mOffset + id, euStorage, GTValues.V[tier], tier, -3L, true); + this.rarity.put(id, regRarity); + this.itemName.put(id, localizedName); + this.hasEffect.put(id, Effect); + } + + @Override + @SideOnly(Side.CLIENT) + public EnumRarity getRarity(final ItemStack par1ItemStack) { + int h = getCorrectMetaForItemstack(par1ItemStack); + if (this.rarity.get(h) != null) { + return this.rarity.get(h); + } + return EnumRarity.common; + } + + @Override + public boolean hasEffect(final ItemStack par1ItemStack, final int pass) { + int h = getCorrectMetaForItemstack(par1ItemStack); + if (this.hasEffect.get(h) != null) { + return this.hasEffect.get(h); + } + return false; + } + + @SuppressWarnings({ "unchecked" }) + @Override + public void addInformation(final ItemStack aStack, final EntityPlayer aPlayer, List aList, final boolean aF3_H) { + // aList.add("Meta: "+(aStack.getItemDamage()-mOffset)); + int aOffsetMeta = getCorrectMetaForItemstack(aStack); + aList.add( + GTLanguageManager + .getTranslation("gtplusplus." + this.getUnlocalizedName(aStack) + "." + aOffsetMeta + ".tooltip")); + + if (aOffsetMeta <= 3) { + FluidStack f = getFluid(aStack); + aList.add(StatCollector.translateToLocal("item.itemGregtechPump.tooltip.0")); + aList.add(StatCollector.translateToLocal("item.itemGregtechPump.tooltip.1")); + aList.add(EnumChatFormatting.DARK_GRAY + StatCollector.translateToLocal("item.itemGregtechPump.tooltip.2")); + aList.add( + EnumChatFormatting.BLUE + (f != null ? f.getLocalizedName() + : StatCollector.translateToLocal("item.itemGregtechPump.tooltip.3"))); + aList.add( + EnumChatFormatting.BLUE + (f != null ? "" + f.amount : "" + 0) + + "L" + + " / " + + formatNumbers(getCapacity(aStack)) + + "L"); + } + + final Long[] tStats = this.getElectricStats(aStack); + if (tStats != null) { + if (tStats[3] > 0) { + aList.add( + EnumChatFormatting.AQUA + StatCollector.translateToLocalFormatted( + "item.itemBaseEuItem.tooltip.1", + formatNumbers(tStats[3]), + (tStats[2] >= 0 ? tStats[2] : 0)) + EnumChatFormatting.GRAY); + } else { + final long tCharge = this.getRealCharge(aStack); + if ((tStats[3] == -2) && (tCharge <= 0)) { + aList.add( + EnumChatFormatting.AQUA + StatCollector.translateToLocal("item.itemBaseEuItem.tooltip.2") + + EnumChatFormatting.GRAY); + } else { + aList.add( + EnumChatFormatting.AQUA + + StatCollector.translateToLocalFormatted( + "item.itemBaseEuItem.tooltip.3", + formatNumbers(tCharge), + formatNumbers(Math.abs(tStats[0])) + " EU - Voltage: ", + V[(int) (tStats[2] >= 0 ? tStats[2] < V.length ? tStats[2] : V.length - 1 : 1)]) + + EnumChatFormatting.GRAY); + } + } + } + + final ArrayList> tList = this.mItemBehaviors + .get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + aList = tBehavior.getAdditionalToolTips(this, aList, aStack); + } + } + } + + @Override + public final Item getChargedItem(final ItemStack itemStack) { + return this; + } + + @Override + public final Item getEmptyItem(final ItemStack itemStack) { + return this; + } + + @Override + public final double getMaxCharge(final ItemStack aStack) { + final Long[] tStats = this.getElectricStats(aStack); + if (tStats == null) { + return 0; + } + return Math.abs(tStats[0]); + } + + @Override + public final double getTransferLimit(final ItemStack aStack) { + final Long[] tStats = this.getElectricStats(aStack); + if (tStats == null) { + return 0; + } + return Math.max(tStats[1], tStats[3]); + } + + @Override + public final int getTier(final ItemStack aStack) { + final Long[] tStats = this.getElectricStats(aStack); + return (int) (tStats == null ? Integer.MAX_VALUE : tStats[2]); + } + + @Override + public final double charge(final ItemStack aStack, final double aCharge, final int aTier, + final boolean aIgnoreTransferLimit, final boolean aSimulate) { + final Long[] tStats = this.getElectricStats(aStack); + if ((tStats == null) || (tStats[2] > aTier) + || !((tStats[3] == -1) || (tStats[3] == -3) || ((tStats[3] < 0) && (aCharge == Integer.MAX_VALUE))) + || (aStack.stackSize != 1)) { + return 0; + } + final long tChargeBefore = this.getRealCharge(aStack), + tNewCharge = aCharge == Integer.MAX_VALUE ? Long.MAX_VALUE + : Math.min( + Math.abs(tStats[0]), + tChargeBefore + (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge))); + if (!aSimulate) { + this.setCharge(aStack, tNewCharge); + } + return tNewCharge - tChargeBefore; + } + + @Override + public final double discharge(final ItemStack aStack, final double aCharge, final int aTier, + final boolean aIgnoreTransferLimit, final boolean aBatteryAlike, final boolean aSimulate) { + final Long[] tStats = this.getElectricStats(aStack); + if ((tStats == null) || (tStats[2] > aTier)) { + return 0; + } + if (aBatteryAlike && !this.canProvideEnergy(aStack)) { + return 0; + } + if (tStats[3] > 0) { + if ((aCharge < tStats[3]) || (aStack.stackSize < 1)) { + return 0; + } + if (!aSimulate) { + aStack.stackSize--; + } + return tStats[3]; + } + final long tChargeBefore = this.getRealCharge(aStack), tNewCharge = Math + .max(0, tChargeBefore - (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge))); + if (!aSimulate) { + this.setCharge(aStack, tNewCharge); + } + return tChargeBefore - tNewCharge; + } + + @Override + public final double getCharge(final ItemStack aStack) { + return this.getRealCharge(aStack); + } + + @Override + public final boolean canUse(final ItemStack aStack, final double aAmount) { + return this.getRealCharge(aStack) >= aAmount; + } + + @Override + public final boolean use(final ItemStack aStack, final double aAmount, final EntityLivingBase aPlayer) { + this.chargeFromArmor(aStack, aPlayer); + if ((aPlayer instanceof EntityPlayer) && ((EntityPlayer) aPlayer).capabilities.isCreativeMode) { + return true; + } + final double tTransfer = this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, true); + if (tTransfer == aAmount) { + this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); + this.chargeFromArmor(aStack, aPlayer); + return true; + } + this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); + this.chargeFromArmor(aStack, aPlayer); + return false; + } + + @Override + public final boolean canProvideEnergy(final ItemStack aStack) { + final Long[] tStats = this.getElectricStats(aStack); + if (tStats == null) { + return false; + } + return (tStats[3] > 0) || ((aStack.stackSize == 1) && ((tStats[3] == -2) || (tStats[3] == -3))); + } + + @Override + public final void chargeFromArmor(final ItemStack aStack, final EntityLivingBase aPlayer) { + if ((aPlayer == null) || aPlayer.worldObj.isRemote) { + return; + } + for (int i = 1; i < 5; i++) { + final ItemStack tArmor = aPlayer.getEquipmentInSlot(i); + if (GTModHandler.isElectricItem(tArmor)) { + final IElectricItem tArmorItem = (IElectricItem) tArmor.getItem(); + if (tArmorItem.canProvideEnergy(tArmor) && (tArmorItem.getTier(tArmor) >= this.getTier(aStack))) { + final double tCharge = ElectricItem.manager.discharge( + tArmor, + this.charge(aStack, Integer.MAX_VALUE - 1, Integer.MAX_VALUE, true, true), + Integer.MAX_VALUE, + true, + true, + false); + if (tCharge > 0) { + this.charge(aStack, tCharge, Integer.MAX_VALUE, true, false); + if (aPlayer instanceof EntityPlayer) { + final Container tContainer = ((EntityPlayer) aPlayer).openContainer; + if (tContainer != null) { + tContainer.detectAndSendChanges(); + } + } + } + } + } + } + } + + public final long getRealCharge(final ItemStack aStack) { + final Long[] tStats = this.getElectricStats(aStack); + if (tStats == null) { + return 0; + } + if (tStats[3] > 0) { + return (int) (long) tStats[3]; + } + final NBTTagCompound tNBT = aStack.getTagCompound(); + return tNBT == null ? 0 : tNBT.getLong("GT.ItemCharge"); + } + + public final boolean setCharge(final ItemStack aStack, long aCharge) { + final Long[] tStats = this.getElectricStats(aStack); + if ((tStats == null) || (tStats[3] > 0)) { + return false; + } + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } + tNBT.removeTag("GT.ItemCharge"); + aCharge = Math.min(tStats[0] < 0 ? Math.abs(tStats[0] / 2) : aCharge, Math.abs(tStats[0])); + if (aCharge > 0) { + aStack.setItemDamage(this.getChargedMetaData(aStack)); + tNBT.setLong("GT.ItemCharge", aCharge); + } else { + aStack.setItemDamage(this.getEmptyMetaData(aStack)); + } + if (tNBT.hasNoTags()) { + aStack.setTagCompound(null); + } else { + aStack.setTagCompound(tNBT); + } + this.isItemStackUsable(aStack); + return true; + } + + public short getChargedMetaData(final ItemStack aStack) { + return (short) aStack.getItemDamage(); + } + + public short getEmptyMetaData(final ItemStack aStack) { + return (short) aStack.getItemDamage(); + } + + public boolean isItemStackUsable(final ItemStack aStack) { + final ArrayList> tList = this.mItemBehaviors + .get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + if (!tBehavior.isItemStackUsable(this, aStack)) { + return false; + } + } + } + return true; + } + + @Override + public final String getToolTip(final ItemStack aStack) { + return null; + } // This has its own ToolTip Handler, no need to let the IC2 Handler screw us up + // at this Point + + @Override + public final IElectricItemManager getManager(final ItemStack aStack) { + return this; + } // We are our own Manager + + /** + * Sets the Furnace Burn Value for the Item. + * + * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] + * @param aValue 200 = 1 Burn Process = 500 EU, max = 32767 (that is 81917.5 EU) + * @return the Item itself for convenience in constructing. + */ + public final ItemGregtechPump setBurnValue(final int aMetaValue, final int aValue) { + if ((aMetaValue < 0) || (aValue < 0)) { + return this; + } + if (aValue == 0) { + this.mBurnValues.remove((short) aMetaValue); + } else { + this.mBurnValues.put((short) aMetaValue, aValue > Short.MAX_VALUE ? Short.MAX_VALUE : (short) aValue); + } + return this; + } + + /** + * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] + * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior) + * @param aTransferLimit Transfer Limit. + * @param aTier The electric Tier. + * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0). Use -1 if you want to + * make this Battery chargeable (the use and canUse Functions will still discharge if you just + * use this) Use -2 if you want to make this Battery dischargeable. Use -3 if you want to make + * this Battery charge/discharge-able. + * @return the Item itself for convenience in constructing. + */ + public final ItemGregtechPump setElectricStats(final int aMetaValue, final long aMaxCharge, + final long aTransferLimit, final long aTier, final long aSpecialData, final boolean aUseAnimations) { + if (aMetaValue < 0) { + return this; + } + if (aMaxCharge == 0) { + this.mElectricStats.remove((short) aMetaValue); + } else { + this.mElectricStats.put( + (short) aMetaValue, + new Long[] { aMaxCharge, Math.max(0, aTransferLimit), Math.max(-1, aTier), aSpecialData }); + } + return this; + } + + @SuppressWarnings({ "unchecked" }) + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item var1, final CreativeTabs aCreativeTab, final List aList) { + for (int i = 0, j = this.mEnabledItems.length(); i < j; i++) { + if (this.mVisibleItems.get(i) || (GTValues.D1 && this.mEnabledItems.get(i))) { + final Long[] tStats = this.mElectricStats.get((short) (this.mOffset + i)); + if ((tStats != null) && (tStats[3] < 0)) { + final ItemStack tStack = new ItemStack(this, 1, this.mOffset + i); + this.setCharge(tStack, Math.abs(tStats[0])); + this.isItemStackUsable(tStack); + aList.add(tStack); + } + if ((tStats == null) || (tStats[3] != -2)) { + final ItemStack tStack = new ItemStack(this, 1, this.mOffset + i); + this.isItemStackUsable(tStack); + aList.add(tStack); + } + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public final void registerIcons(final IIconRegister aIconRegister) { + for (short i = 0, j = (short) this.mEnabledItems.length(); i < j; i++) { + if (this.mEnabledItems.get(i)) { + mIconMap.put( + (int) i, + aIconRegister.registerIcon(GTPlusPlus.ID + ":" + (this.getUnlocalizedName() + "/" + i))); + } + } + } + + @Override + public final IIcon getIconFromDamage(final int aMetaData) { + if (aMetaData < 0) { + return null; + } + if (aMetaData < this.mOffset) { + return mIconMap.get(0); + } else { + int newMeta = aMetaData - this.mOffset; + newMeta = (Math.max(0, Math.min(3, newMeta))); + return mIconMap.get(newMeta); + } + } + + /** + * Sets the unlocalized name of this item to the string passed as the parameter" + */ + @Override + public Item setUnlocalizedName(final String p_77655_1_) { + this.unlocalizedName = p_77655_1_; + super.setUnlocalizedName(p_77655_1_); + return this; + } + + /** + * Returns the unlocalized name of this item. + */ + @Override + public String getUnlocalizedName() { + return this.unlocalizedName; + } + + public final Long[] getElectricStats(final ItemStack aStack) { + return this.mElectricStats.get((short) aStack.getItemDamage()); + } + + @Override + public int getItemEnchantability() { + return 0; + } + + @Override + public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) { + return false; + } + + @Override + public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) { + return false; + } + + /** + * Adds a special Item Behaviour to the Item. + *

+ * Note: the boolean Behaviours sometimes won't be executed if another boolean Behaviour returned true before. + * + * @param aMetaValue the Meta Value of the Item you want to add it to. [0 - 32765] + * @param aBehavior the Click Behavior you want to add. + * @return the Item itself for convenience in constructing. + */ + public final ItemGregtechPump addItemBehavior(final int aMetaValue, + final IItemBehaviour aBehavior) { + if ((aMetaValue < 0) || (aMetaValue >= 32766) || (aBehavior == null)) { + return this; + } + ArrayList> tList = this.mItemBehaviors.get((short) aMetaValue); + if (tList == null) { + tList = new ArrayList<>(1); + this.mItemBehaviors.put((short) aMetaValue, tList); + } + tList.add(aBehavior); + return this; + } + + /** + * This adds a Custom Item to the ending Range. + * + * @param aID The Id of the assigned Item [0 - mItemAmount] (The MetaData gets auto-shifted by +mOffset) + * @param aEnglish The Default Localized Name of the created Item + * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip + * @param aFoodBehavior The Food Value of this Item. Can be null aswell. Just a convenience thing. + * @param aRandomData The OreDict Names you want to give the Item. Also used for TC Aspects and some other things. + * @return An ItemStack containing the newly created Item. + */ + @SuppressWarnings("unchecked") + public final ItemStack addItem(final int aID, final String aEnglish, String aToolTip, final Object... aRandomData) { + if (aToolTip == null) { + aToolTip = ""; + } + if ((aID >= 0) && (aID < this.mItemAmount)) { + final ItemStack rStack = new ItemStack(this, 1, this.mOffset + aID); + GTModHandler.registerBoxableItemToToolBox(rStack); + this.mEnabledItems.set(aID); + this.mVisibleItems.set(aID); + GTLanguageManager + .addStringLocalization("gtplusplus." + this.getUnlocalizedName(rStack) + "." + aID + ".name", aEnglish); + GTLanguageManager.addStringLocalization( + "gtplusplus." + this.getUnlocalizedName(rStack) + "." + aID + ".tooltip", + aToolTip); + final List tAspects = new ArrayList<>(); + // Important Stuff to do first + for (final Object tRandomData : aRandomData) { + if (tRandomData instanceof SubTag) { + if (tRandomData == SubTag.INVISIBLE) { + this.mVisibleItems.set(aID, false); + continue; + } + if (tRandomData == SubTag.NO_UNIFICATION) { + GTOreDictUnificator.addToBlacklist(rStack); + continue; + } + } + } + // now check for the rest + for (final Object tRandomData : aRandomData) { + if (tRandomData != null) { + boolean tUseOreDict = true; + if (tRandomData instanceof IItemBehaviour) { + this.addItemBehavior(this.mOffset + aID, (IItemBehaviour) tRandomData); + tUseOreDict = false; + } + if (tRandomData instanceof IItemContainer) { + ((IItemContainer) tRandomData).set(rStack); + tUseOreDict = false; + } + if (tRandomData instanceof SubTag) { + continue; + } + if (tRandomData instanceof TC_AspectStack) { + ((TC_AspectStack) tRandomData).addToAspectList(tAspects); + continue; + } + if (tRandomData instanceof ItemData) { + if (GTUtility.isStringValid(tRandomData)) { + GTOreDictUnificator.registerOre(tRandomData, rStack); + } else { + GTOreDictUnificator.addItemData(rStack, (ItemData) tRandomData); + } + continue; + } + if (tUseOreDict) { + GTOreDictUnificator.registerOre(tRandomData, rStack); + continue; + } + } + } + if (GregTechAPI.sThaumcraftCompat != null) { + GregTechAPI.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); + } + return rStack; + } + return null; + } + + @Override + public String getItemStackDisplayName(final ItemStack aStack) { + int keyValue = (getCorrectMetaForItemstack(aStack)); + if (keyValue < 0 || keyValue > 3) { + keyValue = 0; + } + return GTLanguageManager + .getTranslation("gtplusplus." + this.getUnlocalizedName(aStack) + "." + keyValue + ".name"); + } + + /** + * Fluid Handling + */ + + /* + * IFluidContainer Functions + */ + + public void emptyStoredFluid(ItemStack aStack) { + if (aStack.hasTagCompound()) { + NBTTagCompound t = aStack.getTagCompound(); + if (t.hasKey("mInit")) { + t.removeTag("mInit"); + } + if (t.hasKey("mFluid")) { + t.removeTag("mFluid"); + } + if (t.hasKey("mFluidAmount")) { + t.removeTag("mFluidAmount"); + } + } + } + + public void storeFluid(ItemStack aStack, FluidStack aFluid) { + if (aFluid == null) { + return; + } else { + String fluidname = aFluid.getFluid() + .getName(); + int amount = aFluid.amount; + if (fluidname != null && fluidname.length() > 0 && amount > 0) { + NBTUtils.setString(aStack, "mFluid", fluidname); + NBTUtils.setInteger(aStack, "mFluidAmount", amount); + } + } + } + + @Override + public FluidStack getFluid(ItemStack container) { + if (!container.hasTagCompound() || !container.getTagCompound() + .hasKey("mInit")) { + initNBT(container); + } + if (container.getTagCompound() + .hasKey("mInit") + && container.getTagCompound() + .getBoolean("mInit")) { + String fluidname; + Integer amount = 0; + fluidname = NBTUtils.getString(container, "mFluid"); + amount = NBTUtils.getInteger(container, "mFluidAmount"); + if (fluidname != null && amount != null && amount > 0) { + return FluidUtils.getFluidStack(fluidname, amount); + } else { + return null; + } + } + return null; + } + + @Override + public int getCapacity(ItemStack container) { + if (!container.hasTagCompound() || !container.getTagCompound() + .hasKey("mInit")) { + initNBT(container); + } + if (container.getTagCompound() + .hasKey("mInit") + && container.getTagCompound() + .getBoolean("mInit")) { + return container.getTagCompound() + .getInteger("mCapacity"); + } + int aMeta = this.getCorrectMetaForItemstack(container); + int aCapacity = (aMeta == 0 ? 2000 : (aMeta == 1 ? 8000 : (aMeta == 2 ? 32000 : 128000))); + return aCapacity; + } + + public int fill(ItemStack container, FluidStack resource) { + return fill(container, resource, true); + } + + @Override + public int fill(ItemStack container, FluidStack resource, boolean doFill) { + if (!doFill || resource == null) { + return 0; + } + + if (!container.hasTagCompound() || !container.getTagCompound() + .hasKey("mInit")) { + initNBT(container); + } + if (container.getTagCompound() + .hasKey("mInit") + && container.getTagCompound() + .getBoolean("mInit")) { + String aStored; + int aStoredAmount = 0; + int aCapacity = getCapacity(container); + FluidStack aStoredFluid = getFluid(container); + if (aStoredFluid != null) { + aStored = aStoredFluid.getFluid() + .getName(); + aStoredAmount = aStoredFluid.amount; + if (aStoredAmount == aCapacity) { + return 0; + } + } + // Handle no stored fluid first + if (aStoredFluid == null) { + Logger.INFO("Pump is empty, filling with tank fluids."); + FluidStack toConsume; + int amountToConsume = 0; + if (resource.amount >= aCapacity) { + amountToConsume = aCapacity; + } else { + amountToConsume = resource.amount; + } + toConsume = FluidUtils.getFluidStack(resource, amountToConsume); + if (toConsume != null && amountToConsume > 0) { + storeFluid(container, toConsume); + return amountToConsume; + } + } else { + Logger.INFO("Pump is Partially full, filling with tank fluids."); + if (aStoredFluid.isFluidEqual(resource)) { + Logger.INFO("Found matching fluids."); + int aSpaceLeft = (aCapacity - aStoredAmount); + Logger.INFO( + "Capacity: " + aCapacity + " | Stored: " + aStoredAmount + " | Space left: " + aSpaceLeft); + FluidStack toConsume; + int amountToConsume = 0; + if (resource.amount >= aSpaceLeft) { + amountToConsume = aSpaceLeft; + Logger.INFO("More or equal fluid amount to pump container space."); + } else { + amountToConsume = resource.amount; + Logger.INFO("Less fluid than container space"); + } + Logger.INFO("Amount to consume: " + amountToConsume); + toConsume = FluidUtils.getFluidStack(resource, (aStoredAmount + amountToConsume)); + if (toConsume != null && amountToConsume > 0) { + Logger.INFO("Storing Fluid"); + storeFluid(container, toConsume); + return amountToConsume; + } else { + Logger.INFO("Not storing fluid"); + } + } else { + Logger.INFO("Fluids did not match."); + } + } + } + return 0; + } + + public FluidStack drain(ItemStack container, int drainAmt) { + return drain(container, drainAmt, true); + } + + @Override + public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) { + if (!doDrain || maxDrain == 0) { + return null; + } + if (!container.hasTagCompound() || !container.getTagCompound() + .hasKey("mInit")) { + initNBT(container); + } + if (container.getTagCompound() + .hasKey("mInit") + && container.getTagCompound() + .getBoolean("mInit")) { + + String aStored; + int aStoredAmount = 0; + FluidStack aStoredFluid = getFluid(container); + + if (aStoredFluid != null) { + aStored = aStoredFluid.getFluid() + .getName(); + aStoredAmount = aStoredFluid.amount; + } + // We cannot drain this if it's empty. + else if (aStoredFluid == null) { + return null; + } + + if (maxDrain >= aStoredAmount) { + emptyStoredFluid(container); + return aStoredFluid; + } else { + // Handle Partial removal + int amountRemaining = (aStoredAmount - maxDrain); + if (amountRemaining == 0) { + emptyStoredFluid(container); + } else { + FluidStack newAmount = FluidUtils.getFluidStack(aStoredFluid, amountRemaining); + FluidStack drained = FluidUtils.getFluidStack(aStoredFluid, maxDrain); + if (newAmount != null && drained != null) { + storeFluid(container, newAmount); + return drained; + } + } + } + } + return null; + } + + /* + * Handle ItemStack NBT + */ + + public void initNBT(ItemStack aStack) { + NBTTagCompound aNewNBT; + if (!aStack.hasTagCompound()) { + aNewNBT = new NBTTagCompound(); + } else { + aNewNBT = aStack.getTagCompound(); + } + + if (!aNewNBT.hasKey("mInit")) { + int aMeta = this.getCorrectMetaForItemstack(aStack); + aNewNBT.setInteger("mMeta", aMeta); + aNewNBT.setBoolean("mInit", true); + aNewNBT.setString("mFluid", "@@@@@"); + aNewNBT.setInteger("mFluidAmount", 0); + int aCapacity = (aMeta == 0 ? 2000 : (aMeta == 1 ? 8000 : (aMeta == 2 ? 32000 : 128000))); + aNewNBT.setInteger("mCapacity", aCapacity); + aStack.setTagCompound(aNewNBT); + } + } + + /** + * Tile Handling + */ + + /* + * Custom Fluid Handling for Tiles and GT Tiles. + */ + + public boolean tryDrainTile(ItemStack aStack, World aWorld, EntityPlayer aPlayer, int aX, int aY, int aZ) { + try { + if (aWorld.isRemote || aStack == null) { + return false; + } else { + int aTier = (aStack.getItemDamage() - 1000); + int removal; + if (aTier == 0) { + removal = 0; + } else if (aTier == 1) { + removal = 32; + } else if (aTier == 2) { + removal = 128; + } else if (aTier == 3) { + removal = 512; + } else { + removal = 8; + } + if (!canUse(aStack, removal) && aTier > 0) { + PlayerUtils.messagePlayer(aPlayer, "Not enough power."); + Logger.INFO("No Power"); + return false; + } + + final Block aBlock = aWorld.getBlock(aX, aY, aZ); + if (aBlock == null) { + return false; + } + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity == null) { + return false; + } else { + double aCharge = this.getCharge(aStack); + boolean didDrain = false; + if (aTier > 0 && aCharge > 0) { + if (discharge(aStack, removal, aTier, true, true, false) > 0) { + didDrain = true; + } + } else if (aTier == 0) { + didDrain = true; + } else { + didDrain = false; + } + + if (didDrain) { + if ((tTileEntity instanceof IGregTechTileEntity)) { + return this.drainTankGT(tTileEntity, aStack, aWorld, aPlayer, aX, aY, aZ); + } + // Try support Standard Fluid Tanks too (May disable if dupes appear again) + else if ((tTileEntity instanceof IFluidTank || tTileEntity instanceof IFluidHandler)) { + // return this.drainIFluidTank(tTileEntity, aStack, aWorld, aPlayer, aX, aY, aZ); + return false; + } + } + } + } + } catch (Throwable t) {} + return false; + } + + /* + * Vanilla IFluidTank + */ + + public boolean drainIFluidTank(TileEntity tTileEntity, ItemStack aStack, World aWorld, EntityPlayer aPlayer, int aX, + int aY, int aZ) { + if (tTileEntity == null) { + Logger.INFO("Invalid Tile, somehow."); + return false; + } + if ((tTileEntity instanceof IFluidTank || tTileEntity instanceof IFluidHandler)) { + if (this.getFluid(aStack) == null + || (this.getFluid(aStack) != null && this.getFluid(aStack).amount < this.getCapacity(aStack))) { + Logger.INFO("Trying to find Stored Fluid - Behaviour Class."); + FluidStack aStored = getStoredFluidOfVanillaTank(tTileEntity); + if (aStored != null) { + int mAmountInserted = fill(aStack, aStored); + FluidStack newStackRemainingInTank; + if (mAmountInserted > 0) { + if (mAmountInserted == aStored.amount) { + newStackRemainingInTank = null; + } else { + newStackRemainingInTank = FluidUtils + .getFluidStack(aStored, (aStored.amount - mAmountInserted)); + } + boolean b = setStoredFluidOfVanillaTank(tTileEntity, newStackRemainingInTank); + Logger.INFO("Cleared Tank? " + b + " | mAmountInserted: " + mAmountInserted); + Logger.INFO("Returning " + b + " - drainTankVanilla."); + if (b) { + PlayerUtils.messagePlayer( + aPlayer, + "Drained " + mAmountInserted + "L of " + aStored.getLocalizedName() + "."); + } + return b; + } + } else { + Logger.INFO("Found no valid Fluidstack - drainTankVanilla."); + } + } else { + Logger.INFO("Pump is full."); + } + } + Logger.INFO("Could not drain vanilla tank."); + return false; + } + + /* + * GT Tanks + */ + + public boolean drainTankGT(TileEntity tTileEntity, ItemStack aStack, World aWorld, EntityPlayer aPlayer, int aX, + int aY, int aZ) { + if (tTileEntity == null) { + return false; + } + if ((tTileEntity instanceof IGregTechTileEntity)) { + Logger.INFO("Right Clicking on GT Tile - drainTankGT."); + if (((IGregTechTileEntity) tTileEntity).getTimer() < 50L) { + Logger.INFO("Returning False - Behaviour Class. Timer < 50"); + return false; + } else if ((!aWorld.isRemote) && (!((IGregTechTileEntity) tTileEntity).isUseableByPlayer(aPlayer))) { + Logger.INFO("Returning True - drainTankGT. NotUsable()"); + return true; + } else { + if (this.getFluid(aStack) == null + || (this.getFluid(aStack) != null && this.getFluid(aStack).amount < this.getCapacity(aStack))) { + Logger.INFO("Trying to find Stored Fluid - drainTankGT."); + FluidStack aStored = getStoredFluidOfGTMachine((IGregTechTileEntity) tTileEntity); + if (aStored != null) { + int mAmountInserted = fill(aStack, aStored); + FluidStack newStackRemainingInTank; + if (mAmountInserted > 0) { + if (mAmountInserted == aStored.amount) { + newStackRemainingInTank = null; + } else { + newStackRemainingInTank = FluidUtils + .getFluidStack(aStored, (aStored.amount - mAmountInserted)); + } + boolean b = setStoredFluidOfGTMachine( + (IGregTechTileEntity) tTileEntity, + newStackRemainingInTank); + Logger.INFO("Cleared Tank? " + b + " | mAmountInserted: " + mAmountInserted); + Logger.INFO("Returning " + b + " - drainTankGT."); + if (b) { + PlayerUtils.messagePlayer( + aPlayer, + "Drained " + mAmountInserted + "L of " + aStored.getLocalizedName() + "."); + } else { + drain(aStack, mAmountInserted); + } + return b; + } + } else { + Logger.INFO("Found no valid Fluidstack - drainTankGT."); + } + } else { + Logger.INFO("Pump is full."); + } + } + } + Logger.INFO("Could not drain GT tank."); + return false; + } + + /* + * Vanilla Tanks + */ + + public FluidStack getStoredFluidOfVanillaTank(TileEntity aTileEntity) { + if (aTileEntity == null) { + return null; + } else if ((aTileEntity instanceof IFluidTank || aTileEntity instanceof IFluidHandler)) { + if (aTileEntity instanceof IFluidTank) { + return getStoredFluidOfVanillaTank((IFluidTank) aTileEntity); + } else { + return getStoredFluidOfVanillaTank((IFluidHandler) aTileEntity); + } + } else { + return null; + } + } + + public FluidStack getStoredFluidOfVanillaTank(IFluidTank aTileEntity) { + FluidStack f = aTileEntity.getFluid(); + Logger.INFO( + "Returning Fluid stack from tile. Found: " + + (f != null ? f.getLocalizedName() + " - " + f.amount + "L" : "Nothing")); + return f; + } + + public FluidStack getStoredFluidOfVanillaTank(IFluidHandler aTileEntity) { + if (aTileEntity instanceof IFluidTank) { + return getStoredFluidOfVanillaTank((IFluidTank) aTileEntity); + } + FluidStack f; + AutoMap m = new AutoMap<>(); + for (int i = 0; i < 6; i++) { + m.put(aTileEntity.getTankInfo(ForgeDirection.getOrientation(i))); + } + if (m.get(0) != null && m.get(0)[0] != null && m.get(0)[0].fluid != null) { + return m.get(0)[0].fluid; + } else { + return null; + } + } + + public boolean setStoredFluidOfVanillaTank(TileEntity aTileEntity, FluidStack aSetFluid) { + Logger.INFO("Trying to clear Tile's tank. - Behaviour Class. [1]"); + + if (aTileEntity == null) { + return false; + } else if ((aTileEntity instanceof IFluidTank || aTileEntity instanceof IFluidHandler)) { + if (aTileEntity instanceof IFluidTank) { + Logger.INFO("Tile Was instanceof IFluidTank."); + FluidStack f = ((IFluidTank) aTileEntity).getFluid(); + if (aSetFluid == null) { + aSetFluid = f; + aSetFluid.amount = f.amount; + } + int toDrain = (f.amount - aSetFluid.amount); + FluidStack newStack; + if (toDrain <= 0) { + newStack = f; + } else { + newStack = ((IFluidTank) aTileEntity).drain(toDrain, true); + } + + if (newStack.isFluidEqual(aSetFluid) && newStack.amount == aSetFluid.amount) { + Logger.INFO("Removed fluid from vanilla IFluidTank successfully."); + return true; + } else { + Logger.INFO("Failed trying to remove fluid from vanilla IFluidTank."); + return false; + } + } else { + + // Rewrite Fluid handling for Vanilla type tanks + if (!IFluidHandler.class.isInstance(aTileEntity)) { + Logger.INFO("Tile Was not an instance of IFluidHandler."); + return false; + } + + IFluidHandler aTank = (IFluidHandler) aTileEntity; + FluidStack aTankContents = null; + FluidTankInfo[] a1 = aTank.getTankInfo(ForgeDirection.UNKNOWN); + if (a1 != null) { + if (a1[0] != null) { + aTankContents = a1[0].fluid; + Logger.INFO( + "Found Fluid in Tank. " + aTankContents.getLocalizedName() + " - " + aTankContents.amount); + } + } + if (aSetFluid == null) { + Logger.INFO("Setting fluid to tank contents, as we're going to empty it totally."); + aSetFluid = aTankContents.copy(); + } else { + Logger.INFO("Setting fluid to tank contents, as we're going to empty it totally."); + } + Logger.INFO( + "Tile Was instance of IFluidHandler. Trying to Drain " + aSetFluid.getLocalizedName() + + " - " + + aSetFluid.amount); + + if (a1 == null || aTankContents == null) { + Logger.INFO("Tank is empty."); + return false; + } + // Found some Fluid in the tank + else { + FluidStack aDrainedStack = aTank.drain(ForgeDirection.UNKNOWN, aSetFluid, true); + if (aDrainedStack.isFluidStackIdentical(aSetFluid)) { + Logger.INFO("Drained!"); + return true; + } else { + Logger.INFO("Partially Drained! This is probably an error."); + return true; + } + } + } + } else { + Logger.INFO("Bad Tank Tile to drain."); + return false; + } + } + + /* + * GT Tanks + */ + + public FluidStack getStoredFluidOfGTMachine(IGregTechTileEntity aTileEntity) { + if (aTileEntity == null) { + return null; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity();; + if (aMetaTileEntity == null || aMetaTileEntity instanceof MTEHatchMultiInput) { + // blacklist multiinput hatch as it's too complex + return null; + } + if (aMetaTileEntity instanceof MTEBasicTank) { + Logger.INFO("Tile Was Instanceof BasicTank."); + return getStoredFluidOfGTMachine((MTEBasicTank) aMetaTileEntity); + } else { + return null; + } + } + + public FluidStack getStoredFluidOfGTMachine(MTEBasicTank aTileEntity) { + FluidStack f = aTileEntity.mFluid; + + // Let's see if this machine has output fluid too + /* + * if (f == null) { Logger.INFO("Could not find any input fluid, checking output if possible."); if (aTileEntity + * instanceof GT_MetaTileEntity_BasicMachine) { GT_MetaTileEntity_BasicMachine g = + * (GT_MetaTileEntity_BasicMachine) aTileEntity; + * Logger.INFO("Tile is a Basic Machine of some sort - "+g.mNEIName); if (g != null) { f = g.mOutputFluid; if (f + * != null) { Logger.INFO("Found output fluid! "+f.getLocalizedName()); } else { + * Logger.INFO("Did not find anything!"); f = g.getFluid(); if (f != null) { + * Logger.INFO("Found fluid! "+f.getLocalizedName()); } else { Logger.INFO("Did not find anything!"); f = + * g.getFluid(); } } } } } + */ + + Logger.INFO( + "Returning Fluid stack from tile. Found: " + + (f != null ? f.getLocalizedName() + " - " + f.amount + "L" : "Nothing")); + return f; + } + + public boolean setStoredFluidOfGTMachine(IGregTechTileEntity aTileEntity, FluidStack aSetFluid) { + Logger.INFO("Trying to clear Tile's tank. - Behaviour Class. [1]"); + if (aTileEntity == null) { + return false; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEBasicTank) { + Logger.INFO("Trying to clear Tile's tank. - Behaviour Class. [2]"); + return setStoredFluidOfGTMachine((MTEBasicTank) aMetaTileEntity, aSetFluid); + } else { + return false; + } + } + + public boolean setStoredFluidOfGTMachine(MTEBasicTank aTileEntity, FluidStack aSetFluid) { + try { + + // Try Handle Outputs First + /* + * if (aTileEntity.setDrainableStack(aSetFluid) != null) { return true; } + */ + + aTileEntity.mFluid = aSetFluid; + boolean b = aTileEntity.mFluid == aSetFluid; + Logger.INFO("Trying to set Tile's tank. - Behaviour Class. [3] " + b); + return b; + } catch (Throwable t) { + Logger.INFO("Trying to clear Tile's tank. FAILED - Behaviour Class. [x]"); + return false; + } + } + + public int getCorrectMetaForItemstack(ItemStack aStack) { + if (aStack == null) { + return 0; + } else { + if (aStack.getItemDamage() < this.mOffset) { + return 0; + } else { + int newMeta = aStack.getItemDamage() - this.mOffset; + newMeta = (Math.max(0, Math.min(3, newMeta))); + return newMeta; + } + } + } +} diff --git a/src/main/java/gtPlusPlus/core/item/wearable/armour/ArmourLoader.java b/src/main/java/gtPlusPlus/core/item/wearable/armour/ArmourLoader.java index e929d6cb7f..4c4330af75 100644 --- a/src/main/java/gtPlusPlus/core/item/wearable/armour/ArmourLoader.java +++ b/src/main/java/gtPlusPlus/core/item/wearable/armour/ArmourLoader.java @@ -7,7 +7,7 @@ import net.minecraft.item.ItemArmor.ArmorMaterial; import net.minecraftforge.common.util.EnumHelper; import cpw.mods.fml.common.registry.GameRegistry; -import gtPlusPlus.core.item.wearable.armour.tinfoil.ArmourTinFoilHat; +import gtPlusPlus.core.item.wearable.armour.tinfoil.ItemArmourTinFoilHat; public class ArmourLoader { @@ -32,7 +32,7 @@ public class ArmourLoader { private static void glassArmour() {} private static void tinfoilArmour() { - TinFoilHat = new ArmourTinFoilHat().setUnlocalizedName("itemHatTinFoil"); + TinFoilHat = new ItemArmourTinFoilHat().setUnlocalizedName("itemHatTinFoil"); GameRegistry.registerItem(TinFoilHat, "itemHatTinFoil", GTPlusPlus.ID); } } diff --git a/src/main/java/gtPlusPlus/core/item/wearable/armour/tinfoil/ArmourTinFoilHat.java b/src/main/java/gtPlusPlus/core/item/wearable/armour/tinfoil/ArmourTinFoilHat.java deleted file mode 100644 index 0703ac3b93..0000000000 --- a/src/main/java/gtPlusPlus/core/item/wearable/armour/tinfoil/ArmourTinFoilHat.java +++ /dev/null @@ -1,179 +0,0 @@ -package gtPlusPlus.core.item.wearable.armour.tinfoil; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.item.EntityBoat; -import net.minecraft.entity.item.EntityEnderEye; -import net.minecraft.entity.item.EntityEnderPearl; -import net.minecraft.entity.item.EntityExpBottle; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.item.EntityXPOrb; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityEgg; -import net.minecraft.entity.projectile.EntityFireball; -import net.minecraft.entity.projectile.EntitySnowball; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.ItemStack; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.DamageSource; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.item.wearable.armour.ArmourLoader; -import gtPlusPlus.core.item.wearable.armour.base.BaseArmourHelm; - -public class ArmourTinFoilHat extends BaseArmourHelm { - - public IIcon iconHelm; - - public ArmourTinFoilHat() { - super(ArmourLoader.TinFoilArmour, 0); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister ir) { - this.iconHelm = ir.registerIcon(GTPlusPlus.ID + ":itemHatTinFoil"); - } - - @Override - public int getRenderIndex() { - return 0; - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIconFromDamage(int par1) { - return this.iconHelm; - } - - @Override - public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { - return GTPlusPlus.ID + ":textures/models/TinFoil.png"; - } - - @Override - public EnumRarity getRarity(ItemStack itemstack) { - return EnumRarity.uncommon; - } - - @Override - public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) { - return false; - } - - @Override - public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { - return super.getArmorDisplay(player, armor, slot); - } - - @Override - public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {} - - @SuppressWarnings({ "unchecked", "rawtypes" }) - @Override - public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List aList, boolean p_77624_4_) { - aList.add("DoomSquirter's protection against cosmic radiation!"); - aList.add("General paranoia makes the wearer unable to collect xp"); - aList.add("Movement speed is also reduced, to keep you safe"); - aList.add("This hat may also have other strange powers"); - } - - @Override - public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, - int slot) { - return new ArmorProperties(0, 0, 0); - } - - @Override - public boolean isDamageable() { - return false; - } - - @Override - public boolean itemInteractionForEntity(ItemStack p_111207_1_, EntityPlayer p_111207_2_, - EntityLivingBase p_111207_3_) { - return super.itemInteractionForEntity(p_111207_1_, p_111207_2_, p_111207_3_); - } - - @Override - public void onUpdate(ItemStack aStack, World aWorld, Entity aEntity, int p_77663_4_, boolean p_77663_5_) { - super.onUpdate(aStack, aWorld, aEntity, p_77663_4_, p_77663_5_); - } - - @Override - public boolean onEntityItemUpdate(EntityItem entityItem) { - return super.onEntityItemUpdate(entityItem); - } - - @Override - public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { - if (itemStack != null && player != null && world != null && !world.isRemote) { - if (player instanceof EntityPlayer) { - - // Apply Slow - if (!GT_Utility.getPotion(player, Potion.moveSlowdown.id)) { - player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 2, 1, true)); - } - - // Move Xp orbs away - try { - AxisAlignedBB box = player.boundingBox; - box.maxX = player.posX + 5; - box.maxY = player.posY + 5; - box.maxZ = player.posZ + 5; - box.minX = player.posX - 5; - box.minY = player.posY - 5; - box.minZ = player.posZ - 5; - @SuppressWarnings("unchecked") - List g = world.getEntitiesWithinAABBExcludingEntity(player, box); - if (g.size() > 0) { - for (Entity e : g) { - if (e != null) { - if (!EntityXPOrb.class.isInstance(e) && !EntityBoat.class.isInstance(e) - && !EntitySnowball.class.isInstance(e) - && !EntityFireball.class.isInstance(e) - && !EntityEgg.class.isInstance(e) - && !EntityExpBottle.class.isInstance(e) - && !EntityEnderEye.class.isInstance(e) - && !EntityEnderPearl.class.isInstance(e)) { - continue; - } else { - // Logger.INFO("Found "+e.getClass().getName()); - double distX = player.posX - e.posX; - double distZ = player.posZ - e.posZ; - double distY = e.posY + 1.5D - player.posY; - double dir = Math.atan2(distZ, distX); - double speed = 1F / e.getDistanceToEntity(player) * 0.5; - speed = -speed; - if (distY < 0) { - e.motionY += speed; - } - e.motionX = Math.cos(dir) * speed; - e.motionZ = Math.sin(dir) * speed; - } - } - } - } - } catch (Throwable t) {} - } - } - - super.onArmorTick(world, player, itemStack); - } - - @Override - public boolean showDurabilityBar(ItemStack stack) { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/core/item/wearable/armour/tinfoil/ItemArmourTinFoilHat.java b/src/main/java/gtPlusPlus/core/item/wearable/armour/tinfoil/ItemArmourTinFoilHat.java new file mode 100644 index 0000000000..7df52a176a --- /dev/null +++ b/src/main/java/gtPlusPlus/core/item/wearable/armour/tinfoil/ItemArmourTinFoilHat.java @@ -0,0 +1,179 @@ +package gtPlusPlus.core.item.wearable.armour.tinfoil; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityBoat; +import net.minecraft.entity.item.EntityEnderEye; +import net.minecraft.entity.item.EntityEnderPearl; +import net.minecraft.entity.item.EntityExpBottle; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.item.EntityXPOrb; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityEgg; +import net.minecraft.entity.projectile.EntityFireball; +import net.minecraft.entity.projectile.EntitySnowball; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.ItemStack; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.DamageSource; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.item.wearable.armour.ArmourLoader; +import gtPlusPlus.core.item.wearable.armour.base.BaseArmourHelm; + +public class ItemArmourTinFoilHat extends BaseArmourHelm { + + public IIcon iconHelm; + + public ItemArmourTinFoilHat() { + super(ArmourLoader.TinFoilArmour, 0); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister ir) { + this.iconHelm = ir.registerIcon(GTPlusPlus.ID + ":itemHatTinFoil"); + } + + @Override + public int getRenderIndex() { + return 0; + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIconFromDamage(int par1) { + return this.iconHelm; + } + + @Override + public String getArmorTexture(ItemStack stack, Entity entity, int slot, String type) { + return GTPlusPlus.ID + ":textures/models/TinFoil.png"; + } + + @Override + public EnumRarity getRarity(ItemStack itemstack) { + return EnumRarity.uncommon; + } + + @Override + public boolean getIsRepairable(ItemStack par1ItemStack, ItemStack par2ItemStack) { + return false; + } + + @Override + public int getArmorDisplay(EntityPlayer player, ItemStack armor, int slot) { + return super.getArmorDisplay(player, armor, slot); + } + + @Override + public void damageArmor(EntityLivingBase entity, ItemStack stack, DamageSource source, int damage, int slot) {} + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public void addInformation(ItemStack p_77624_1_, EntityPlayer p_77624_2_, List aList, boolean p_77624_4_) { + aList.add("DoomSquirter's protection against cosmic radiation!"); + aList.add("General paranoia makes the wearer unable to collect xp"); + aList.add("Movement speed is also reduced, to keep you safe"); + aList.add("This hat may also have other strange powers"); + } + + @Override + public ArmorProperties getProperties(EntityLivingBase player, ItemStack armor, DamageSource source, double damage, + int slot) { + return new ArmorProperties(0, 0, 0); + } + + @Override + public boolean isDamageable() { + return false; + } + + @Override + public boolean itemInteractionForEntity(ItemStack p_111207_1_, EntityPlayer p_111207_2_, + EntityLivingBase p_111207_3_) { + return super.itemInteractionForEntity(p_111207_1_, p_111207_2_, p_111207_3_); + } + + @Override + public void onUpdate(ItemStack aStack, World aWorld, Entity aEntity, int p_77663_4_, boolean p_77663_5_) { + super.onUpdate(aStack, aWorld, aEntity, p_77663_4_, p_77663_5_); + } + + @Override + public boolean onEntityItemUpdate(EntityItem entityItem) { + return super.onEntityItemUpdate(entityItem); + } + + @Override + public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack) { + if (itemStack != null && player != null && world != null && !world.isRemote) { + if (player instanceof EntityPlayer) { + + // Apply Slow + if (!GTUtility.getPotion(player, Potion.moveSlowdown.id)) { + player.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 2, 1, true)); + } + + // Move Xp orbs away + try { + AxisAlignedBB box = player.boundingBox; + box.maxX = player.posX + 5; + box.maxY = player.posY + 5; + box.maxZ = player.posZ + 5; + box.minX = player.posX - 5; + box.minY = player.posY - 5; + box.minZ = player.posZ - 5; + @SuppressWarnings("unchecked") + List g = world.getEntitiesWithinAABBExcludingEntity(player, box); + if (g.size() > 0) { + for (Entity e : g) { + if (e != null) { + if (!EntityXPOrb.class.isInstance(e) && !EntityBoat.class.isInstance(e) + && !EntitySnowball.class.isInstance(e) + && !EntityFireball.class.isInstance(e) + && !EntityEgg.class.isInstance(e) + && !EntityExpBottle.class.isInstance(e) + && !EntityEnderEye.class.isInstance(e) + && !EntityEnderPearl.class.isInstance(e)) { + continue; + } else { + // Logger.INFO("Found "+e.getClass().getName()); + double distX = player.posX - e.posX; + double distZ = player.posZ - e.posZ; + double distY = e.posY + 1.5D - player.posY; + double dir = Math.atan2(distZ, distX); + double speed = 1F / e.getDistanceToEntity(player) * 0.5; + speed = -speed; + if (distY < 0) { + e.motionY += speed; + } + e.motionX = Math.cos(dir) * speed; + e.motionZ = Math.sin(dir) * speed; + } + } + } + } + } catch (Throwable t) {} + } + } + + super.onArmorTick(world, player, itemStack); + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/core/lib/CORE.java b/src/main/java/gtPlusPlus/core/lib/CORE.java deleted file mode 100644 index 535a3f0821..0000000000 --- a/src/main/java/gtPlusPlus/core/lib/CORE.java +++ /dev/null @@ -1,239 +0,0 @@ -package gtPlusPlus.core.lib; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Random; -import java.util.UUID; -import java.util.WeakHashMap; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Supplier; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; - -import com.mojang.authlib.GameProfile; - -import cpw.mods.fml.common.FMLCommonHandler; -import gregtech.GT_Version; -import gregtech.api.objects.XSTR; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.Pair; -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.CORE_Preloader; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; -import gtPlusPlus.xmod.gregtech.common.tileentities.automation.GT_MetaTileEntity_TesseractGenerator; -import gtPlusPlus.xmod.gregtech.common.tileentities.automation.GT_MetaTileEntity_TesseractTerminal; - -public class CORE { - - public static Map PlayerCache; - - // Math Related - public static final float PI = (float) Math.PI; - public static volatile Random RANDOM = new XSTR(); - - public static boolean DEVENV = false;; - - // Mod Variables - public static final String name = "GT++"; - public static final String VERSION = GT_Version.VERSION; - - // Tweakables - public static int EVERGLADES_ID = 227; - public static int EVERGLADESBIOME_ID = 238; - - public static int turbineCutoffBase = 75000; - - // GT++ Fake Player Profile - public static final GameProfile gameProfile = new GameProfile( - UUID.nameUUIDFromBytes("gtplusplus.core".getBytes()), - "[GT++]"); - public static final WeakHashMap fakePlayerCache = new WeakHashMap<>(); - // Tooltips; - public static final Supplier GT_Tooltip = () -> StatCollector.translateToLocal("GTPP.core.GT_Tooltip"); - public static final Supplier GT_Tooltip_Builder = () -> StatCollector - .translateToLocal("GTPP.core.GT_Tooltip_Builder"); - public static final Supplier GT_Tooltip_Radioactive = () -> StatCollector - .translateToLocal("GTPP.core.GT_Tooltip_Radioactive"); - - public static final String SEPERATOR = "/"; - - /** - * Lists/Maps - */ - - // Burnables List - public static List> burnables = new ArrayList<>(); - - // TesseractMaps - public static final Map> sTesseractGeneratorOwnershipMap = new HashMap<>(); - public static final Map> sTesseractTerminalOwnershipMap = new HashMap<>(); - - // BookMap - public static final Map sBookList = new ConcurrentHashMap<>(); - - public static final GT_Materials[] sMU_GeneratedMaterials = new GT_Materials[1000]; - - public static class ConfigSwitches { - - // Debug - public static boolean MACHINE_INFO = true; - public static boolean showHiddenNEIItems = false; - public static boolean dumpItemAndBlockData = false; - - // Machine Related - public static boolean enableThaumcraftShardUnification = false; - public static boolean disableIC2Recipes = false; - public static int boilerSteamPerSecond = 750; - - // Feature Related - public static boolean enableCustomCapes = false; - public static int enableWatchdogBGM = CORE_Preloader.enableWatchdogBGM; - public static boolean hideUniversalCells = true; - - // Single Block Machines - public static boolean enableMachine_Dehydrators = true; - public static boolean enableMachine_SteamConverter = true; - public static boolean enableMachine_FluidTanks = true; - public static boolean enableMachine_RocketEngines = true; - public static boolean enableMachine_GeothermalEngines = true; - public static boolean enableMachine_Tesseracts = true; - public static boolean enableMachine_SimpleWasher = true; - public static boolean enableMachine_Pollution = true; - public static boolean enableCustom_Pipes = true; - public static boolean enableCustom_Cables = true; - public static boolean enableMachine_RedstoneBlocks = true; - - // Multiblocks - public static boolean enableMultiblock_AlloyBlastSmelter = true; - public static boolean enableMultiblock_QuantumForceTransformer = true; - public static boolean enableMultiblock_IndustrialCentrifuge = true; - public static boolean enableMultiblock_IndustrialCokeOven = true; - public static boolean enableMultiblock_IndustrialElectrolyzer = true; - public static boolean enableMultiblock_WaterPump = true; - public static boolean enableMultiblock_IndustrialMacerationStack = true; - public static boolean enableMultiblock_IndustrialPlatePress = true; - public static boolean enableMultiblock_IndustrialWireMill = true; - public static boolean enableMultiblock_MatterFabricator = true; - public static boolean enableMultiblock_MultiTank = true; - public static boolean enableMultiblock_PowerSubstation = true; - public static boolean enableMultiblock_LiquidFluorideThoriumReactor = true; - public static boolean enableMultiblock_NuclearSaltProcessingPlant = true; - public static boolean enableMultiblock_NuclearFuelRefinery = true; - public static boolean enableMultiblock_TreeFarmer = true; - public static boolean enableMultiblock_IndustrialSifter = true; - public static boolean enableMultiblock_IndustrialThermalCentrifuge = true; - public static boolean enableMultiblock_IndustrialWashPlant = true; - public static boolean enableMultiblock_LargeAutoCrafter = true; - public static boolean enableMultiblock_ThermalBoiler = true; - public static boolean enableMultiblock_IndustrialCuttingMachine = true; - public static boolean enableMultiblock_IndustrialFishingPort = true; - public static boolean enableMultiblock_IndustrialExtrudingMachine = true; - public static boolean enableMultiblock_IndustrialMultiMachine = true; - public static boolean enableMultiblock_Cyclotron = true; - - // Visuals - public static boolean useGregtechTextures = true; - public static boolean enableAnimatedTextures = false; - - // Pollution - public static int pollutionPerSecondMultiPackager = 40; - public static int pollutionPerSecondMultiIndustrialAlloySmelter = 300; - public static int pollutionPerSecondMultiIndustrialArcFurnace = 2400; - public static int pollutionPerSecondMultiIndustrialCentrifuge = 300; - public static int pollutionPerSecondMultiIndustrialCokeOven = 80; - public static int pollutionPerSecondMultiIndustrialCuttingMachine = 160; - public static int pollutionPerSecondMultiIndustrialDehydrator = 500; - public static int pollutionPerSecondMultiIndustrialElectrolyzer = 300; - public static int pollutionPerSecondMultiIndustrialExtruder = 1000; - public static int pollutionPerSecondMultiIndustrialMacerator = 400; - public static int pollutionPerSecondMultiIndustrialMixer = 800; - public static int pollutionPerSecondMultiIndustrialMultiMachine_ModeMetal = 400; - public static int pollutionPerSecondMultiIndustrialMultiMachine_ModeFluid = 400; - public static int pollutionPerSecondMultiIndustrialMultiMachine_ModeMisc = 600; - public static int pollutionPerSecondMultiIndustrialPlatePress_ModeForming = 240; - public static int pollutionPerSecondMultiIndustrialPlatePress_ModeBending = 480; - public static int pollutionPerSecondMultiIndustrialForgeHammer = 250; - public static int pollutionPerSecondMultiIndustrialSifter = 40; - public static int pollutionPerSecondMultiIndustrialThermalCentrifuge = 1000; - public static int pollutionPerSecondMultiIndustrialVacuumFreezer = 500; - public static int pollutionPerSecondMultiIndustrialWashPlant_ModeChemBath = 400; - public static int pollutionPerSecondMultiIndustrialWashPlant_ModeWasher = 100; - public static int pollutionPerSecondMultiIndustrialWireMill = 100; - public static int pollutionPerSecondMultiIsaMill = 1280; - public static int pollutionPerSecondMultiAdvDistillationTower_ModeDistillery = 240; - public static int pollutionPerSecondMultiAdvDistillationTower_ModeDT = 480; - public static int pollutionPerSecondMultiAdvEBF = 500; - public static int pollutionPerSecondMultiAdvImplosion = 5000; - public static int pollutionPerSecondMultiABS = 200; - public static int pollutionPerSecondMultiCyclotron = 200; - public static int pollutionPerSecondMultiIndustrialFishingPond = 20; - public static int pollutionPerSecondMultiLargeSemiFluidGenerator = 1280; - public static int pollutionPerSecondMultiMassFabricator = 40; - public static int pollutionPerSecondMultiRefinery = 4000; - public static int pollutionPerSecondMultiTreeFarm = 100; - public static int pollutionPerSecondMultiFrothFlotationCell = 0; - public static int pollutionPerSecondMultiAutoCrafter = 500; - public static int pollutionPerSecondMultiThermalBoiler = 700; - public static int pollutionPerSecondMultiMolecularTransformer = 1000; - public static int pollutionPerSecondMultiAlgaePond = 0; - public static int pollutionPerSecondMultiIndustrialRockBreaker = 100; - public static int pollutionPerSecondMultiIndustrialChisel = 50; - // pollution single blocks - public static int basePollutionPerSecondSemiFluidGenerator = 40; - public static double[] pollutionReleasedByTierSemiFluidGenerator = new double[] { 0, 2.0, 4.0, 8.0, 12.0, 16, - 0 }; - public static int basePollutionPerSecondBoiler = 35; - public static double[] pollutionReleasedByTierBoiler = new double[] { 0, 1.0, 1.43, 1.86 }; - public static int baseMinPollutionPerSecondRocketFuelGenerator = 250; - public static int baseMaxPollutionPerSecondRocketFuelGenerator = 2000; - public static double[] pollutionReleasedByTierRocketFuelGenerator = new double[] { 0, 0, 0, 0, 1, 2, 3 }; - public static int basePollutionPerSecondGeothermalGenerator = 100; - public static double[] pollutionReleasedByTierGeothermalGenerator = new double[] { 0, 0, 0, 0, 1, 1, 1 }; - } - - public static class Everglades { - - public static final String NAME = "GT++ Toxic Everglades"; - public static final String VERSION = GT_Version.VERSION; - } - - public static final void crash() { - crash("Generic Crash"); - } - - public static final void crash(String aReason) { - try { - Logger.INFO("=========================================================="); - Logger.INFO("[GT++ CRASH]"); - Logger.INFO("=========================================================="); - Logger.INFO("Oooops..."); - Logger.INFO("This should only happy in a development environment or when something really bad happens."); - Logger.INFO("Reason: " + aReason); - Logger.INFO("=========================================================="); - Logger.INFO("Called from: " + 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.INFO(ReflectionUtils.getMethodName(10)); - Logger.INFO(ReflectionUtils.getMethodName(11)); - Logger.INFO(ReflectionUtils.getMethodName(12)); - Logger.INFO(ReflectionUtils.getMethodName(13)); - Logger.INFO(ReflectionUtils.getMethodName(14)); - Logger.INFO(ReflectionUtils.getMethodName(15)); - } catch (Throwable t) { - t.printStackTrace(); - } - FMLCommonHandler.instance() - .exitJava(0, true); - } -} diff --git a/src/main/java/gtPlusPlus/core/lib/GTPPCore.java b/src/main/java/gtPlusPlus/core/lib/GTPPCore.java new file mode 100644 index 0000000000..985e942f52 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/lib/GTPPCore.java @@ -0,0 +1,239 @@ +package gtPlusPlus.core.lib; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.UUID; +import java.util.WeakHashMap; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Supplier; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; + +import com.mojang.authlib.GameProfile; + +import cpw.mods.fml.common.FMLCommonHandler; +import gregtech.GT_Version; +import gregtech.api.objects.XSTR; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.Pair; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import gtPlusPlus.preloader.PreloaderCore; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; +import gtPlusPlus.xmod.gregtech.common.tileentities.automation.MTETesseractGenerator; +import gtPlusPlus.xmod.gregtech.common.tileentities.automation.MTETesseractTerminal; + +public class GTPPCore { + + public static Map PlayerCache; + + // Math Related + public static final float PI = (float) Math.PI; + public static volatile Random RANDOM = new XSTR(); + + public static boolean DEVENV = false;; + + // Mod Variables + public static final String name = "GT++"; + public static final String VERSION = GT_Version.VERSION; + + // Tweakables + public static int EVERGLADES_ID = 227; + public static int EVERGLADESBIOME_ID = 238; + + public static int turbineCutoffBase = 75000; + + // GT++ Fake Player Profile + public static final GameProfile gameProfile = new GameProfile( + UUID.nameUUIDFromBytes("gtplusplus.core".getBytes()), + "[GT++]"); + public static final WeakHashMap fakePlayerCache = new WeakHashMap<>(); + // Tooltips; + public static final Supplier GT_Tooltip = () -> StatCollector.translateToLocal("GTPP.core.GT_Tooltip"); + public static final Supplier GT_Tooltip_Builder = () -> StatCollector + .translateToLocal("GTPP.core.GT_Tooltip_Builder"); + public static final Supplier GT_Tooltip_Radioactive = () -> StatCollector + .translateToLocal("GTPP.core.GT_Tooltip_Radioactive"); + + public static final String SEPERATOR = "/"; + + /** + * Lists/Maps + */ + + // Burnables List + public static List> burnables = new ArrayList<>(); + + // TesseractMaps + public static final Map> sTesseractGeneratorOwnershipMap = new HashMap<>(); + public static final Map> sTesseractTerminalOwnershipMap = new HashMap<>(); + + // BookMap + public static final Map sBookList = new ConcurrentHashMap<>(); + + public static final GT_Materials[] sMU_GeneratedMaterials = new GT_Materials[1000]; + + public static class ConfigSwitches { + + // Debug + public static boolean MACHINE_INFO = true; + public static boolean showHiddenNEIItems = false; + public static boolean dumpItemAndBlockData = false; + + // Machine Related + public static boolean enableThaumcraftShardUnification = false; + public static boolean disableIC2Recipes = false; + public static int boilerSteamPerSecond = 750; + + // Feature Related + public static boolean enableCustomCapes = false; + public static int enableWatchdogBGM = PreloaderCore.enableWatchdogBGM; + public static boolean hideUniversalCells = true; + + // Single Block Machines + public static boolean enableMachine_Dehydrators = true; + public static boolean enableMachine_SteamConverter = true; + public static boolean enableMachine_FluidTanks = true; + public static boolean enableMachine_RocketEngines = true; + public static boolean enableMachine_GeothermalEngines = true; + public static boolean enableMachine_Tesseracts = true; + public static boolean enableMachine_SimpleWasher = true; + public static boolean enableMachine_Pollution = true; + public static boolean enableCustom_Pipes = true; + public static boolean enableCustom_Cables = true; + public static boolean enableMachine_RedstoneBlocks = true; + + // Multiblocks + public static boolean enableMultiblock_AlloyBlastSmelter = true; + public static boolean enableMultiblock_QuantumForceTransformer = true; + public static boolean enableMultiblock_IndustrialCentrifuge = true; + public static boolean enableMultiblock_IndustrialCokeOven = true; + public static boolean enableMultiblock_IndustrialElectrolyzer = true; + public static boolean enableMultiblock_WaterPump = true; + public static boolean enableMultiblock_IndustrialMacerationStack = true; + public static boolean enableMultiblock_IndustrialPlatePress = true; + public static boolean enableMultiblock_IndustrialWireMill = true; + public static boolean enableMultiblock_MatterFabricator = true; + public static boolean enableMultiblock_MultiTank = true; + public static boolean enableMultiblock_PowerSubstation = true; + public static boolean enableMultiblock_LiquidFluorideThoriumReactor = true; + public static boolean enableMultiblock_NuclearSaltProcessingPlant = true; + public static boolean enableMultiblock_NuclearFuelRefinery = true; + public static boolean enableMultiblock_TreeFarmer = true; + public static boolean enableMultiblock_IndustrialSifter = true; + public static boolean enableMultiblock_IndustrialThermalCentrifuge = true; + public static boolean enableMultiblock_IndustrialWashPlant = true; + public static boolean enableMultiblock_LargeAutoCrafter = true; + public static boolean enableMultiblock_ThermalBoiler = true; + public static boolean enableMultiblock_IndustrialCuttingMachine = true; + public static boolean enableMultiblock_IndustrialFishingPort = true; + public static boolean enableMultiblock_IndustrialExtrudingMachine = true; + public static boolean enableMultiblock_IndustrialMultiMachine = true; + public static boolean enableMultiblock_Cyclotron = true; + + // Visuals + public static boolean useGregtechTextures = true; + public static boolean enableAnimatedTextures = false; + + // Pollution + public static int pollutionPerSecondMultiPackager = 40; + public static int pollutionPerSecondMultiIndustrialAlloySmelter = 300; + public static int pollutionPerSecondMultiIndustrialArcFurnace = 2400; + public static int pollutionPerSecondMultiIndustrialCentrifuge = 300; + public static int pollutionPerSecondMultiIndustrialCokeOven = 80; + public static int pollutionPerSecondMultiIndustrialCuttingMachine = 160; + public static int pollutionPerSecondMultiIndustrialDehydrator = 500; + public static int pollutionPerSecondMultiIndustrialElectrolyzer = 300; + public static int pollutionPerSecondMultiIndustrialExtruder = 1000; + public static int pollutionPerSecondMultiIndustrialMacerator = 400; + public static int pollutionPerSecondMultiIndustrialMixer = 800; + public static int pollutionPerSecondMultiIndustrialMultiMachine_ModeMetal = 400; + public static int pollutionPerSecondMultiIndustrialMultiMachine_ModeFluid = 400; + public static int pollutionPerSecondMultiIndustrialMultiMachine_ModeMisc = 600; + public static int pollutionPerSecondMultiIndustrialPlatePress_ModeForming = 240; + public static int pollutionPerSecondMultiIndustrialPlatePress_ModeBending = 480; + public static int pollutionPerSecondMultiIndustrialForgeHammer = 250; + public static int pollutionPerSecondMultiIndustrialSifter = 40; + public static int pollutionPerSecondMultiIndustrialThermalCentrifuge = 1000; + public static int pollutionPerSecondMultiIndustrialVacuumFreezer = 500; + public static int pollutionPerSecondMultiIndustrialWashPlant_ModeChemBath = 400; + public static int pollutionPerSecondMultiIndustrialWashPlant_ModeWasher = 100; + public static int pollutionPerSecondMultiIndustrialWireMill = 100; + public static int pollutionPerSecondMultiIsaMill = 1280; + public static int pollutionPerSecondMultiAdvDistillationTower_ModeDistillery = 240; + public static int pollutionPerSecondMultiAdvDistillationTower_ModeDT = 480; + public static int pollutionPerSecondMultiAdvEBF = 500; + public static int pollutionPerSecondMultiAdvImplosion = 5000; + public static int pollutionPerSecondMultiABS = 200; + public static int pollutionPerSecondMultiCyclotron = 200; + public static int pollutionPerSecondMultiIndustrialFishingPond = 20; + public static int pollutionPerSecondMultiLargeSemiFluidGenerator = 1280; + public static int pollutionPerSecondMultiMassFabricator = 40; + public static int pollutionPerSecondMultiRefinery = 4000; + public static int pollutionPerSecondMultiTreeFarm = 100; + public static int pollutionPerSecondMultiFrothFlotationCell = 0; + public static int pollutionPerSecondMultiAutoCrafter = 500; + public static int pollutionPerSecondMultiThermalBoiler = 700; + public static int pollutionPerSecondMultiMolecularTransformer = 1000; + public static int pollutionPerSecondMultiAlgaePond = 0; + public static int pollutionPerSecondMultiIndustrialRockBreaker = 100; + public static int pollutionPerSecondMultiIndustrialChisel = 50; + // pollution single blocks + public static int basePollutionPerSecondSemiFluidGenerator = 40; + public static double[] pollutionReleasedByTierSemiFluidGenerator = new double[] { 0, 2.0, 4.0, 8.0, 12.0, 16, + 0 }; + public static int basePollutionPerSecondBoiler = 35; + public static double[] pollutionReleasedByTierBoiler = new double[] { 0, 1.0, 1.43, 1.86 }; + public static int baseMinPollutionPerSecondRocketFuelGenerator = 250; + public static int baseMaxPollutionPerSecondRocketFuelGenerator = 2000; + public static double[] pollutionReleasedByTierRocketFuelGenerator = new double[] { 0, 0, 0, 0, 1, 2, 3 }; + public static int basePollutionPerSecondGeothermalGenerator = 100; + public static double[] pollutionReleasedByTierGeothermalGenerator = new double[] { 0, 0, 0, 0, 1, 1, 1 }; + } + + public static class Everglades { + + public static final String NAME = "GT++ Toxic Everglades"; + public static final String VERSION = GT_Version.VERSION; + } + + public static final void crash() { + crash("Generic Crash"); + } + + public static final void crash(String aReason) { + try { + Logger.INFO("=========================================================="); + Logger.INFO("[GT++ CRASH]"); + Logger.INFO("=========================================================="); + Logger.INFO("Oooops..."); + Logger.INFO("This should only happy in a development environment or when something really bad happens."); + Logger.INFO("Reason: " + aReason); + Logger.INFO("=========================================================="); + Logger.INFO("Called from: " + 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.INFO(ReflectionUtils.getMethodName(10)); + Logger.INFO(ReflectionUtils.getMethodName(11)); + Logger.INFO(ReflectionUtils.getMethodName(12)); + Logger.INFO(ReflectionUtils.getMethodName(13)); + Logger.INFO(ReflectionUtils.getMethodName(14)); + Logger.INFO(ReflectionUtils.getMethodName(15)); + } catch (Throwable t) { + t.printStackTrace(); + } + FMLCommonHandler.instance() + .exitJava(0, true); + } +} diff --git a/src/main/java/gtPlusPlus/core/material/ALLOY.java b/src/main/java/gtPlusPlus/core/material/ALLOY.java deleted file mode 100644 index 8df8d54f12..0000000000 --- a/src/main/java/gtPlusPlus/core/material/ALLOY.java +++ /dev/null @@ -1,888 +0,0 @@ -package gtPlusPlus.core.material; - -import gregtech.api.enums.Materials; -import gtPlusPlus.core.material.state.MaterialState; -import gtPlusPlus.core.util.minecraft.MaterialUtils; - -public final class ALLOY { - - // Just some GT Alloys that I need within mine. - public static final Material BRONZE = MaterialUtils.generateMaterialFromGtENUM(Materials.Bronze); - public static final Material STEEL = MaterialUtils.generateMaterialFromGtENUM(Materials.Steel); - public static final Material STEEL_BLACK = MaterialUtils.generateMaterialFromGtENUM(Materials.BlackSteel); - public static final Material INVAR = MaterialUtils.generateMaterialFromGtENUM(Materials.Invar); - public static final Material KANTHAL = MaterialUtils.generateMaterialFromGtENUM(Materials.Kanthal); - public static final Material NICHROME = MaterialUtils.generateMaterialFromGtENUM(Materials.Nichrome); - public static final Material TUNGSTENSTEEL = MaterialUtils.generateMaterialFromGtENUM(Materials.TungstenSteel); - public static final Material STAINLESS_STEEL = MaterialUtils.generateMaterialFromGtENUM(Materials.StainlessSteel); - public static final Material OSMIRIDIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Osmiridium); - public static final Material POLYETHYLENE = MaterialUtils.generateMaterialFromGtENUM(Materials.Plastic); - public static final Material POLYTETRAFLUOROETHYLENE = MaterialUtils - .generateMaterialFromGtENUM(Materials.Polytetrafluoroethylene); - public static final Material ENERGYCRYSTAL = new Material( - "Energy Crystal", // Material Name - MaterialState.SOLID, // State - new short[] { 228, 255, 0, 0 }, // Material Colour - 4660, // Melting Point in C - 5735, // Boiling Point in C - 90, // Protons - 40, // Neutrons - true, // Uses Blast furnace? - "⬟ ⯂ ⬢ ⬣ ⯃ ⯄", - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().AER, 5), - new MaterialStack(ELEMENT.getInstance().IGNIS, 5), - new MaterialStack(ELEMENT.getInstance().TERRA, 5), - new MaterialStack(ELEMENT.getInstance().AQUA, 5)); - - public static final Material BLOODSTEEL = new Material( - "Blood Steel", // Material Name - MaterialState.SOLID, // State - new short[] { 142, 28, 0, 0 }, // Material Colour - 2500, // Melting Point in C - 0, // Boiling Point in C - 100, // Protons - 100, // Neutrons - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.STEEL, 5), - new MaterialStack(ELEMENT.getInstance().IGNIS, 5)); - - public static final Material STABALLOY = new Material( - "Staballoy", // Material Name - MaterialState.SOLID, // State - new short[] { 68, 75, 66, 0 }, // Material Colour - 3450, // Melting Point in C - -1, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().URANIUM238, 9), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 1)); - - public static final Material TANTALLOY_60 = new Material( - "Tantalloy-60", // Material Name - MaterialState.SOLID, // State - new short[] { 213, 231, 237, 0 }, // Material Colour - 3025, // Melting Point in C - -1, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().TUNGSTEN, 4), - new MaterialStack(ELEMENT.getInstance().TANTALUM, 46)); - - public static final Material TANTALLOY_61 = new Material( - "Tantalloy-61", // Material Name - MaterialState.SOLID, // State - new short[] { 193, 211, 217, 0 }, // Material Colour - 3030, // Melting Point in C - -1, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.TANTALLOY_60, 2), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 12), - new MaterialStack(ELEMENT.getInstance().YTTRIUM, 8)); - - public static final Material TUMBAGA = new Material( - "Tumbaga", // Material Name - MaterialState.SOLID, // State - new short[] { 255, 178, 15, 0 }, // Material Colour - 1300, - -1, - -1, - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().GOLD, 70), - new MaterialStack(ELEMENT.getInstance().COPPER, 30)); - - public static final Material POTIN = new Material( - "Potin", // Material Name - MaterialState.SOLID, // State - new short[] { 201, 151, 129, 0 }, // Material Colour - 1300, - -1, - -1, - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().LEAD, 40), - new MaterialStack(ALLOY.BRONZE, 40), - new MaterialStack(ELEMENT.getInstance().TIN, 20)); - - /* - * public static final Material BEDROCKIUM = new Material( "Bedrockium", //Material Name new short[]{32, 32, 32, 0}, - * //Material Colour 7735, //Melting Point in C 0, //Boiling Point in C 100, //Protons 100, //Neutrons false, //Uses - * Blast furnace? //Material Stacks with Percentage of required elements. null); - */ - - public static final Material INCONEL_625 = new Material( - "Inconel-625", // Material Name - MaterialState.SOLID, // State - new short[] { 128, 200, 128, 0 }, // Material Colour - 2425, // Melting Point in C - 3758, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().NICKEL, 3), - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 7), - new MaterialStack(ELEMENT.getInstance().MOLYBDENUM, 10), - new MaterialStack(INVAR, 10), - new MaterialStack(NICHROME, 13)); - - public static final Material INCONEL_690 = new Material( - "Inconel-690", // Material Name - MaterialState.SOLID, // State - new short[] { 118, 220, 138, 0 }, // Material Colour - 3425, // Melting Point in C - 4895, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 5), - new MaterialStack(ELEMENT.getInstance().NIOBIUM, 10), - new MaterialStack(ELEMENT.getInstance().MOLYBDENUM, 10), - new MaterialStack(NICHROME, 15)); - - public static final Material INCONEL_792 = new Material( - "Inconel-792", // Material Name - MaterialState.SOLID, // State - new short[] { 108, 240, 118, 0 }, // Material Colour - 3425, // Melting Point in C - 6200, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().NICKEL, 20), - new MaterialStack(ELEMENT.getInstance().NIOBIUM, 10), - new MaterialStack(ELEMENT.getInstance().ALUMINIUM, 20), - new MaterialStack(NICHROME, 10)); - - public static final Material NITINOL_60 = new Material( - "Nitinol 60", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 5651, // Melting Point in C - 8975, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().NICKEL, 40), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 60)); - - public static final Material ZERON_100 = new Material( - "Zeron-100", // Material Name - MaterialState.SOLID, // State - new short[] { 180, 180, 20, 0 }, // Material Colour - 6100, - 9785, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 26), - new MaterialStack(ELEMENT.getInstance().NICKEL, 6), - new MaterialStack(ELEMENT.getInstance().MOLYBDENUM, 4), - new MaterialStack(ELEMENT.getInstance().COPPER, 20), - new MaterialStack(ELEMENT.getInstance().TUNGSTEN, 4), - new MaterialStack(ALLOY.STEEL, 40)); - - public static final Material MARAGING250 = new Material( - "Maraging Steel 250", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 2413, // Melting Point in C - 4555, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.STEEL, 64), - new MaterialStack(ELEMENT.getInstance().MOLYBDENUM, 4), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 4), - new MaterialStack(ELEMENT.getInstance().NICKEL, 16), - new MaterialStack(ELEMENT.getInstance().COBALT, 8)); - - public static final Material MARAGING300 = new Material( - "Maraging Steel 300", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 2413, // Melting Point in C - 4555, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.STEEL, 64), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 4), - new MaterialStack(ELEMENT.getInstance().ALUMINIUM, 4), - new MaterialStack(ELEMENT.getInstance().NICKEL, 16), - new MaterialStack(ELEMENT.getInstance().COBALT, 8)); - - public static final Material MARAGING350 = new Material( - "Maraging Steel 350", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 2413, // Melting Point in C - 4555, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.STEEL, 64), - new MaterialStack(ELEMENT.getInstance().ALUMINIUM, 4), - new MaterialStack(ELEMENT.getInstance().MOLYBDENUM, 4), - new MaterialStack(ELEMENT.getInstance().NICKEL, 16), - new MaterialStack(ELEMENT.getInstance().COBALT, 8)); - - public static final Material AQUATIC_STEEL = new Material( - "Watertight Steel", // Material Name - MaterialState.SOLID, // State - new short[] { 120, 120, 180 }, // Material Colour - 2673, // Melting Point in C - 4835, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.STEEL, 60), - new MaterialStack(ELEMENT.getInstance().CARBON, 10), - new MaterialStack(ELEMENT.getInstance().MANGANESE, 5), - new MaterialStack(ELEMENT.getInstance().SILICON, 10), - new MaterialStack(ELEMENT.getInstance().PHOSPHORUS, 5), - new MaterialStack(ELEMENT.getInstance().SULFUR, 5), - new MaterialStack(ELEMENT.getInstance().ALUMINIUM, 5)); - - public static final Material STELLITE = new Material( - "Stellite", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 4310, // Melting Point in C - 6250, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().COBALT, 35), - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 35), - new MaterialStack(ELEMENT.getInstance().MANGANESE, 20), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 10)); - - public static final Material TALONITE = new Material( - "Talonite", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 3454, // Melting Point in C - 5500, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().COBALT, 40), - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 30), - new MaterialStack(ELEMENT.getInstance().PHOSPHORUS, 20), - new MaterialStack(ELEMENT.getInstance().MOLYBDENUM, 10)); - - public static final Material HASTELLOY_W = new Material( - "Hastelloy-W", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 3350, // Melting Point in C - 5755, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().IRON, 06), - new MaterialStack(ELEMENT.getInstance().COBALT, 2), - new MaterialStack(ELEMENT.getInstance().MOLYBDENUM, 24), - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 6), - new MaterialStack(ELEMENT.getInstance().NICKEL, 62)); - - public static final Material HASTELLOY_X = new Material( - "Hastelloy-X", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 3350, // Melting Point in C - 5755, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().IRON, 18), - new MaterialStack(ELEMENT.getInstance().MANGANESE, 2), - new MaterialStack(ELEMENT.getInstance().SILICON, 2), - new MaterialStack(ELEMENT.getInstance().MOLYBDENUM, 8), - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 22), - new MaterialStack(ELEMENT.getInstance().NICKEL, 48)); - - public static final Material HASTELLOY_N = new Material( - "Hastelloy-N", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 4350, // Melting Point in C - 6875, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().YTTRIUM, 8), - new MaterialStack(ELEMENT.getInstance().MOLYBDENUM, 16), - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 8), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 8), - new MaterialStack(ELEMENT.getInstance().NICKEL, 60)); - - public static final Material HASTELLOY_C276 = new Material( - "Hastelloy-C276", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 4350, // Melting Point in C - 6520, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().COBALT, 2), - new MaterialStack(ELEMENT.getInstance().MOLYBDENUM, 16), - new MaterialStack(ELEMENT.getInstance().TUNGSTEN, 2), - new MaterialStack(ELEMENT.getInstance().COPPER, 2), - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 14), - new MaterialStack(ELEMENT.getInstance().NICKEL, 64)); - - public static final Material INCOLOY_020 = new Material( - "Incoloy-020", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 3425, // Melting Point in C - 5420, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().IRON, 40), - new MaterialStack(ELEMENT.getInstance().COPPER, 4), - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 20), - new MaterialStack(ELEMENT.getInstance().NICKEL, 36)); - - public static final Material INCOLOY_DS = new Material( - "Incoloy-DS", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 3425, // Melting Point in C - 5420, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().IRON, 46), - new MaterialStack(ELEMENT.getInstance().COBALT, 18), - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 18), - new MaterialStack(ELEMENT.getInstance().NICKEL, 18)); - - public static final Material INCOLOY_MA956 = new Material( - "Incoloy-MA956", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 4425, // Melting Point in C - 6875, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().IRON, 64), - new MaterialStack(ELEMENT.getInstance().ALUMINIUM, 12), - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 20), - new MaterialStack(ELEMENT.getInstance().YTTRIUM, 4)); - - public static final Material TUNGSTEN_CARBIDE = new Material( - "Tungsten Carbide", // Material Name - MaterialState.SOLID, // State - new short[] { 44, 44, 44, 0 }, // Material Colour - 3422, // Melting Point in C - -1, - -1, - -1, - true, // Uses Blast furnace? - false, // Generate cells - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().CARBON, 50), - new MaterialStack(ELEMENT.getInstance().TUNGSTEN, 50)); - - public static final Material TUNGSTEN_TITANIUM_CARBIDE = new Material( - "Tungsten Titanium Carbide", // Material Name - MaterialState.SOLID, // State - null, - 4422, // Melting Point in C - -1, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(TUNGSTEN_CARBIDE, 70), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 30)); - - public static final Material SILICON_CARBIDE = new Material( - "Silicon Carbide", // Material Name - MaterialState.SOLID, // State - new short[] { 40, 48, 36, 0 }, // Material Colour - 1414, // Melting Point in C - -1, - -1, - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().SILICON, 50), - new MaterialStack(ELEMENT.getInstance().CARBON, 50)); - - public static final Material TANTALUM_CARBIDE = new Material( - "Tantalum Carbide", // Material Name - MaterialState.SOLID, // State - new short[] { 139, 136, 120, 0 }, // Material Colour - 2980, // Melting Point in C - -1, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().TANTALUM, 50), - new MaterialStack(ELEMENT.getInstance().CARBON, 50)); - - public static final Material ZIRCONIUM_CARBIDE = new Material( - "Zirconium Carbide", // Material Name - MaterialState.SOLID, // State - new short[] { 222, 202, 180, 0 }, // Material Colour - 1555, // Melting Point in C - -1, - -1, - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().ZIRCONIUM, 50), - new MaterialStack(ELEMENT.getInstance().CARBON, 50)); - - public static final Material NIOBIUM_CARBIDE = new Material( - "Niobium Carbide", // Material Name - MaterialState.SOLID, // State - new short[] { 205, 197, 191, 0 }, // Material Colour - 2477, // Melting Point in C - -1, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().NIOBIUM, 50), - new MaterialStack(ELEMENT.getInstance().CARBON, 50)); - - public static final Material ARCANITE = new Material( - "Arcanite", // Material Name - MaterialState.SOLID, // State - null, - 5666, // Melting Point in C - 9875, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().THORIUM232, 40), - new MaterialStack(ENERGYCRYSTAL, 40), - new MaterialStack(ELEMENT.getInstance().ORDO, 10), - new MaterialStack(ELEMENT.getInstance().PERDITIO, 10)); - - public static final Material LEAGRISIUM = new Material( - "Grisium", // Material Name - MaterialState.SOLID, // State - new short[] { 53, 93, 106, 0 }, // Material Colour - 3850, // Melting Point in C - 5550, // Boiling Point in C - 96, // Protons - 128, // Neutrons - true, // Uses Blast furnace? - new MaterialStack(ELEMENT.getInstance().TITANIUM, 18), - new MaterialStack(ELEMENT.getInstance().CARBON, 18), - new MaterialStack(ELEMENT.getInstance().POTASSIUM, 18), - new MaterialStack(ELEMENT.getInstance().LITHIUM, 18), - new MaterialStack(ELEMENT.getInstance().SULFUR, 18), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 10)); // Material Stacks with Percentage of - // required elements. - - public static final Material EGLIN_STEEL_BASE = new Material( - "Eglin Steel Base Compound", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().IRON, 12), - new MaterialStack(KANTHAL, 3), - new MaterialStack(INVAR, 15)); - - public static final Material EGLIN_STEEL = new Material( - "Eglin Steel", // Material Name - MaterialState.SOLID, // State - new short[] { 139, 69, 19, 0 }, // Material Colour - 1048, // Melting Point in C - 1973, // Boiling Point in C - -1, - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.EGLIN_STEEL_BASE, 10), - new MaterialStack(ELEMENT.getInstance().SULFUR, 1), - new MaterialStack(ELEMENT.getInstance().SILICON, 4), - new MaterialStack(ELEMENT.getInstance().CARBON, 1)); - - public static final Material HG1223 = new Material( - "HG-1223", // Material Name - MaterialState.LIQUID, // State - new short[] { 39, 85, 159, 0 }, // Material Colour - 6357, // Melting Point in C - 8563, // Boiling Point in C - -1, - -1, - false, // Uses Blast furnace? - new MaterialStack(ELEMENT.getInstance().MERCURY, 1), - new MaterialStack(ELEMENT.getInstance().BARIUM, 2), - new MaterialStack(ELEMENT.getInstance().CALCIUM, 2), - new MaterialStack(ELEMENT.getInstance().COPPER, 3), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 8)); - - public static final Material HS188A = new Material( - "HS188-A", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 4870, // Melting Point in C - 7550, // Boiling Point in C - -1, // Protons - -1, // Neutrons - true, // Uses Blast furnace? - new MaterialStack(ELEMENT.getInstance().COBALT, 20), - new MaterialStack(ELEMENT.getInstance().HAFNIUM, 20), - new MaterialStack(TALONITE, 16), - new MaterialStack(ELEMENT.getInstance().RHENIUM, 10), - new MaterialStack(NIOBIUM_CARBIDE, 10), - new MaterialStack(HASTELLOY_X, 8), - new MaterialStack(TUNGSTENSTEEL, 8), - new MaterialStack(ZIRCONIUM_CARBIDE, 8)); // Material Stacks with Percentage of required - // elements. - - /** - * Stargate Materials - #D2FFA9 210, 255, 170 - */ - public static final Material TRINIUM_TITANIUM = new Material( - "Trinium Titanium Alloy", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 3750, // Melting Point in C - 7210, // Boiling Point in C - -1, - -1, - true, // Uses Blast furnace? - new MaterialStack(ELEMENT.getInstance().TRINIUM_REFINED, 3), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 7)); - - public static final Material TRINIUM_NAQUADAH = new Material( - "Trinium Naquadah Alloy", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 4200, // Melting Point in C - 7400, // Boiling Point in C - -1, - -1, - false, // Uses Blast furnace? - new MaterialStack(ELEMENT.getInstance().TRINIUM_REFINED, 5), - new MaterialStack(ELEMENT.getInstance().NAQUADAH, 9)); - public static final Material TRINIUM_NAQUADAH_CARBON = new Material( - "Trinium Naquadah Carbonite", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 6500, // Melting Point in C - 9000, // Boiling Point in C - -1, - -1, - true, // Uses Blast furnace? - new MaterialStack(TRINIUM_NAQUADAH, 9), - new MaterialStack(ELEMENT.getInstance().CARBON, 1)); - - public static final Material TRINIUM_REINFORCED_STEEL = new Material( - "Arceus Alloy 2B", // Material Name - MaterialState.SOLID, // State - new short[] { 205, 197, 23, 0 }, // Material Colour - 7555, // Melting Point in C - 12350, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().TRINIUM_REFINED, 30), - new MaterialStack(ALLOY.MARAGING350, 40), - new MaterialStack(ALLOY.TUNGSTENSTEEL, 20), - new MaterialStack(ALLOY.OSMIRIDIUM, 10), - new MaterialStack(ELEMENT.getInstance().STRONTIUM, 10)); - - /* - * Witchery Material - */ - - public static final Material KOBOLDITE = new Material( - "Koboldite", // Material Name - MaterialState.SOLID, // State - new short[] { 80, 210, 255, 0 }, // Material Colour - -1, // Melting Point in C - -1, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().NICKEL, 35), - new MaterialStack(ELEMENT.getInstance().THAUMIUM, 30), - new MaterialStack(ELEMENT.getInstance().IRON, 35)); - - /* - * Top Tier Alloys - */ - - public static final Material HELICOPTER = new Material( - "HeLiCoPtEr", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 5763, - 8192, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().HELIUM, 20), - new MaterialStack(ELEMENT.getInstance().LITHIUM, 20), - new MaterialStack(ELEMENT.getInstance().COBALT, 20), - new MaterialStack(ELEMENT.getInstance().PLATINUM, 20), - new MaterialStack(ELEMENT.getInstance().ERBIUM, 20)); - - // 0lafe Compound - public static final Material LAFIUM = new Material( - "Lafium Compound", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 6350, // Melting Point in C - 9865, // Boiling Point in C - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.HASTELLOY_N, 8), - new MaterialStack(ELEMENT.getInstance().NAQUADAH, 4), - new MaterialStack(ELEMENT.getInstance().SAMARIUM, 2), - new MaterialStack(ELEMENT.getInstance().TUNGSTEN, 4), - new MaterialStack(ELEMENT.getInstance().ARGON, 2), - new MaterialStack(ELEMENT.getInstance().ALUMINIUM, 6), - new MaterialStack(ELEMENT.getInstance().NICKEL, 8), - new MaterialStack(ELEMENT.getInstance().CARBON, 2)); - - // Cinobi Alloy - public static final Material CINOBITE = new Material( - "Cinobite A243", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 7350, // Melting Point in C - 12565, // Boiling Point in C - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.ZERON_100, 16), - new MaterialStack(ELEMENT.getInstance().NAQUADRIA, 7), - new MaterialStack(ELEMENT.getInstance().GADOLINIUM, 5), - new MaterialStack(ELEMENT.getInstance().ALUMINIUM, 3), - new MaterialStack(ELEMENT.getInstance().MERCURY, 2), - new MaterialStack(ELEMENT.getInstance().TIN, 2), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 12), - new MaterialStack(ALLOY.OSMIRIDIUM, 6)); - - // Piky Alloy - public static final Material PIKYONIUM = new Material( - "Pikyonium 64B", // Material Name - MaterialState.SOLID, // State - new short[] { 52, 103, 186, 0 }, // Material Colour - 6850, // Melting Point in C - 11765, // Boiling Point in C - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.INCONEL_792, 16), - new MaterialStack(ALLOY.EGLIN_STEEL, 10), - new MaterialStack(ELEMENT.getInstance().NAQUADAH_ENRICHED, 8), - new MaterialStack(ELEMENT.getInstance().CERIUM, 6), - new MaterialStack(ELEMENT.getInstance().ANTIMONY, 4), - new MaterialStack(ELEMENT.getInstance().PLATINUM, 4), - new MaterialStack(ELEMENT.getInstance().YTTERBIUM, 2), - new MaterialStack(ALLOY.TUNGSTENSTEEL, 8)); - - // Piky Alloy - public static final Material ABYSSAL = new Material( - "Abyssal Alloy", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 9650, // Melting Point in C - 13765, // Boiling Point in C - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.STAINLESS_STEEL, 10), - new MaterialStack(ALLOY.TUNGSTEN_CARBIDE, 10), - new MaterialStack(ALLOY.NICHROME, 10), - new MaterialStack(ALLOY.BRONZE, 10), - new MaterialStack(ALLOY.INCOLOY_MA956, 10), - new MaterialStack(ELEMENT.getInstance().IODINE, 2), - 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(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(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( - "Titansteel", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 8250, // Melting Point in C - 11765, // Boiling Point in C - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.TUNGSTEN_TITANIUM_CARBIDE, 3), - new MaterialStack(ELEMENT.getInstance().IGNIS, 1), - new MaterialStack(ELEMENT.getInstance().TERRA, 1), - new MaterialStack(ELEMENT.getInstance().PERDITIO, 1)); - - public static final Material OCTIRON = new Material( - "Octiron", // Material Name - MaterialState.SOLID, // State - null, - 9120, // Melting Point in C - 14200, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ARCANITE, 30), - new MaterialStack(TITANSTEEL, 30), - new MaterialStack(ENERGYCRYSTAL, 5), - new MaterialStack(STEEL_BLACK, 10), - new MaterialStack(ELEMENT.getInstance().THAUMIUM, 25)); - - public static final Material BLACK_TITANIUM = new Material( - "Black Titanium", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - Materials.Titanium.mMeltingPoint * 4, // Melting Point in C - Materials.Titanium.mMeltingPoint * 16, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().TITANIUM, 55), - new MaterialStack(ELEMENT.getInstance().LANTHANUM, 12), - new MaterialStack(ELEMENT.getInstance().TUNGSTEN, 8), - new MaterialStack(ELEMENT.getInstance().COBALT, 6), - new MaterialStack(ELEMENT.getInstance().MANGANESE, 4), - new MaterialStack(ELEMENT.getInstance().PHOSPHORUS, 4), - new MaterialStack(ELEMENT.getInstance().PALLADIUM, 4), - new MaterialStack(ELEMENT.getInstance().NIOBIUM, 2), - new MaterialStack(ELEMENT.getInstance().ARGON, 5)); - - public static final Material BABBIT_ALLOY = new Material( - "Babbit Alloy", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 268, // Melting Point in C - 589, - -1, - -1, - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().TIN, 10), - new MaterialStack(ELEMENT.getInstance().LEAD, 72), - new MaterialStack(ELEMENT.getInstance().ANTIMONY, 16), - new MaterialStack(ELEMENT.getInstance().ARSENIC, 2)); - - public static final Material INDALLOY_140 = new Material( - "Indalloy 140", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 5200, // Melting Point in C - 6500, - -1, - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().BISMUTH, 47), - new MaterialStack(ELEMENT.getInstance().LEAD, 25), - new MaterialStack(ELEMENT.getInstance().TIN, 13), - new MaterialStack(ELEMENT.getInstance().CADMIUM, 10), - new MaterialStack(ELEMENT.getInstance().INDIUM, 5)); - - // Quantum - public static final Material QUANTUM = new Material( - "Quantum", // Material Name - MaterialState.SOLID, // State - null, // Material Colour - 10500, // Melting Point in C - 25000, // Boiling Point in C - 150, // Protons - 200, // Neutrons - true, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ALLOY.STELLITE, 15), - new MaterialStack(ALLOY.ENERGYCRYSTAL, 5), - new MaterialStack(ALLOY.SILICON_CARBIDE, 5), - new MaterialStack(ELEMENT.getInstance().GALLIUM, 5), - new MaterialStack(ELEMENT.getInstance().AMERICIUM, 5), - new MaterialStack(ELEMENT.getInstance().PALLADIUM, 5), - new MaterialStack(ELEMENT.getInstance().BISMUTH, 5), - new MaterialStack(ELEMENT.getInstance().GERMANIUM, 5)); -} diff --git a/src/main/java/gtPlusPlus/core/material/ELEMENT.java b/src/main/java/gtPlusPlus/core/material/ELEMENT.java deleted file mode 100644 index 9bcea2a47b..0000000000 --- a/src/main/java/gtPlusPlus/core/material/ELEMENT.java +++ /dev/null @@ -1,651 +0,0 @@ -package gtPlusPlus.core.material; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.TextureSet; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.client.CustomTextureSet.TextureSets; -import gtPlusPlus.core.material.state.MaterialState; -import gtPlusPlus.core.util.data.StringUtils; -import gtPlusPlus.core.util.minecraft.MaterialUtils; - -public final class ELEMENT { - - public static final String[] NAMES = new String[] { "Hydrogen", "Helium" }; - - // First 50 Elements - public final Material HYDROGEN = MaterialUtils.generateMaterialFromGtENUM(Materials.Hydrogen); - public final Material HELIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Helium); - public final Material LITHIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Lithium); - public final Material BERYLLIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Beryllium); - public final Material BORON = MaterialUtils.generateMaterialFromGtENUM(Materials.Boron); - public final Material CARBON = MaterialUtils.generateMaterialFromGtENUM(Materials.Carbon); - public final Material NITROGEN = MaterialUtils.generateMaterialFromGtENUM(Materials.Nitrogen); - public final Material OXYGEN = MaterialUtils.generateMaterialFromGtENUM(Materials.Oxygen); - public final Material FLUORINE = MaterialUtils.generateMaterialFromGtENUM(Materials.Fluorine); - public final Material NEON = new Material( - "Neon", - MaterialState.PURE_GAS, - new short[] { 240, 180, 30 }, - -248, - -246, - 10, - 10, - false, - "Ne", - 0); // Not a GT Inherited Material - public final Material SODIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Sodium); - public final Material MAGNESIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Magnesium); - public final Material ALUMINIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Aluminium); - public final Material ALUMINIUMOXIDE = MaterialUtils.generateMaterialFromGtENUM(Materials.Aluminiumoxide); - public final Material SILICON = MaterialUtils.generateMaterialFromGtENUM(Materials.Silicon); - public final Material SILICONDIOXIDE = MaterialUtils.generateMaterialFromGtENUM(Materials.SiliconDioxide); - public final Material PHOSPHORUS = MaterialUtils.generateMaterialFromGtENUM(Materials.Phosphorus); - public final Material SULFUR = MaterialUtils.generateMaterialFromGtENUM(Materials.Sulfur); - public final Material CHLORINE = MaterialUtils.generateMaterialFromGtENUM(Materials.Chlorine); - public final Material ARGON = MaterialUtils.generateMaterialFromGtENUM(Materials.Argon); - public final Material POTASSIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Potassium); - public final Material CALCIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Calcium); - public final Material SCANDIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Scandium); - public final Material TITANIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Titanium); - public final Material VANADIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Vanadium); - public final Material CHROMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Chrome); - public final Material MANGANESE = MaterialUtils.generateMaterialFromGtENUM(Materials.Manganese); - public final Material IRON = MaterialUtils.generateMaterialFromGtENUM(Materials.Iron); - public final Material COBALT = MaterialUtils.generateMaterialFromGtENUM(Materials.Cobalt); - public final Material NICKEL = MaterialUtils.generateMaterialFromGtENUM(Materials.Nickel); - public final Material COPPER = MaterialUtils.generateMaterialFromGtENUM(Materials.Copper); - public final Material ZINC = MaterialUtils.generateMaterialFromGtENUM(Materials.Zinc); - public final Material GALLIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Gallium); - public final Material GERMANIUM = new Material( - "Germanium", - MaterialState.SOLID, - new short[] { 200, 200, 200 }, - 937, - 2830, - 32, - 41, - false, - "Ge", - 0); // Not a GT Inherited Material - public final Material ARSENIC = MaterialUtils.generateMaterialFromGtENUM(Materials.Arsenic); - public final Material SELENIUM = new Material( - "Selenium", - MaterialState.SOLID, - new short[] { 190, 190, 190 }, - 217, - 685, - 34, - 45, - false, - "Se", - 0); // Not a GT Inherited Material - public final Material BROMINE = new Material( - "Bromine", - MaterialState.PURE_LIQUID, - new short[] { 200, 25, 25 }, - -7, - 58, - 35, - 45, - false, - "Br", - 0); // Not a GT Inherited Material - public final Material KRYPTON = new Material( - "Krypton", - MaterialState.PURE_GAS, - new short[] { 5, 200, 220 }, - -157, - -153, - 36, - 48, - false, - "Kr", - 0); // Not a GT Inherited Material - public final Material RUBIDIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Rubidium); - public final Material STRONTIUM = MaterialUtils - .generateMaterialFromGtENUM(Materials.Strontium, new short[] { 230, 210, 110 }, TextureSet.SET_FLINT); - public final Material YTTRIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Yttrium); - public final Material ZIRCONIUM = new Material( - "Zirconium", - MaterialState.SOLID, - new short[] { 255, 250, 205 }, - 1855, - 4377, - 40, - 51, - false, - "Zr", - 0); // Not a GT Inherited Material - public final Material NIOBIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Niobium); - public final Material MOLYBDENUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Molybdenum); - - public final Material RUTHENIUM = new Material( - "Ruthenium", - MaterialState.SOLID, - new short[] { 220, 220, 220 }, - 2250, - 3900, - 44, - 57, - false, - "Ru", - 0); // Not a GT Inherited Material - public final Material RHODIUM = new Material( - "Rhodium", - MaterialState.SOLID, - new short[] { 220, 220, 220 }, - 1966, - 3727, - 45, - 58, - false, - "Rh", - 0); // Not a GT Inherited Material - public final Material AMERICIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Americium); - public final Material TECHNETIUM = new Material( - "Technetium", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - new short[] { 220, 220, 220 }, - 2200, - 4877, - 43, - 55, - false, - "Tc", - 2); // Not a GT Inherited Material - public final Material NEPTUNIUM = new Material( - "Neptunium", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - new short[] { 200, 220, 205 }, - 640, - 3902, - 93, - 144, - false, - "Np", - 2); // Not a GT Inherited Material - - public final Material PALLADIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Palladium); - public final Material SILVER = MaterialUtils.generateMaterialFromGtENUM(Materials.Silver); - public final Material CADMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Cadmium); - public final Material INDIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Indium); - public final Material TIN = MaterialUtils.generateMaterialFromGtENUM(Materials.Tin); - public final Material ANTIMONY = MaterialUtils.generateMaterialFromGtENUM(Materials.Antimony); - public final Material TELLURIUM = new Material( - "Tellurium", - MaterialState.SOLID, - new short[] { 210, 210, 210 }, - 449, - 989, - 52, - 76, - false, - "Te", - 0); // Not a GT Inherited Material - public final Material IODINE = new Material( - "Iodine", - MaterialState.SOLID, - TextureSet.SET_SHINY, - new short[] { 96, 96, 96 }, - 114, - 184, - 53, - 74, - false, - "I", - 0); // Not a GT Inherited Material - public final Material XENON = new Material( - "Xenon", - MaterialState.PURE_GAS, - new short[] { 5, 105, 210 }, - -111, - -108, - 54, - 77, - false, - "Xe", - 0); // Not a GT Inherited Material - public final Material CAESIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Caesium); - public final Material BARIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Barium); - public final Material LANTHANUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Lanthanum); - public final Material CERIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Cerium); - public final Material PRASEODYMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Praseodymium); - public final Material NEODYMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Neodymium); - public final Material PROMETHIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Promethium); - public final Material SAMARIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Samarium); - public final Material EUROPIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Europium); - public final Material GADOLINIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Gadolinium); - public final Material TERBIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Terbium); - public final Material DYSPROSIUM = new Material( - "Dysprosium", - MaterialState.SOLID, - new short[] { 180, 180, 180 }, - 1412, - 2562, - 66, - 97, - false, - "Dy", - 0); // Not a GT Inherited Material - public final Material HOLMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Holmium); - public final Material ERBIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Erbium); - public final Material THULIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Thulium); - public final Material YTTERBIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Ytterbium); - public final Material LUTETIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Lutetium); - public final Material HAFNIUM = new Material( - "Hafnium", - MaterialState.SOLID, - new short[] { 128, 128, 128 }, - 2150, - 5400, - 72, - 106, - false, - "Hf", - 0); // Not a GT Inherited Material - - // Second 50 elements - public final Material TANTALUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Tantalum); - public final Material TUNGSTEN = MaterialUtils.generateMaterialFromGtENUM(Materials.Tungsten); - public final Material RHENIUM = new Material( - "Rhenium", - MaterialState.SOLID, - new short[] { 150, 150, 150 }, - 3180, - 3627, - 75, - 111, - false, - "Re", - 0); // Not a GT Inherited Material - public final Material OSMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Osmium); - public final Material IRIDIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Iridium); - public final Material PLATINUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Platinum); - public final Material GOLD = MaterialUtils.generateMaterialFromGtENUM(Materials.Gold); - public final Material MERCURY = MaterialUtils.generateMaterialFromGtENUM(Materials.Mercury); // Mercury - public final Material THALLIUM = new Material( - "Thallium", - MaterialState.SOLID, - new short[] { 175, 175, 175 }, - 304, - 1457, - 81, - 123, - false, - "Tl", - 0); // Not a GT Inherited Material - public final Material LEAD = MaterialUtils.generateMaterialFromGtENUM(Materials.Lead); - public final Material BISMUTH = MaterialUtils.generateMaterialFromGtENUM(Materials.Bismuth); - public final Material POLONIUM = new Material( - "Polonium", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - new short[] { 180, 170, 180 }, - 254, - 962, - 84, - 125, - false, - "Po", - 1); // Not a GT Inherited Material - - public final Material RADON = MaterialUtils.generateMaterialFromGtENUM(Materials.Radon); - - public final Material RADIUM = new Material( - "Radium", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - new short[] { 165, 165, 165 }, - 700, - 1737, - 88, - 138, - false, - "Ra", - 1); // Not a GT Inherited Material - - public final Material THORIUM = new Material( - "Thorium", - MaterialState.SOLID, - Materials.Thorium.mRGBa, - Materials.Thorium.mMeltingPoint, - Materials.Thorium.mBlastFurnaceTemp, - 90, - 142, - false, - StringUtils.superscript("Th"), - 1); - public final Material PROTACTINIUM = new Material( - "Protactinium", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - new short[] { 190, 150, 170 }, - 1568, - 4027, - 91, - 140, - false, - "Pa", - 1); // Not a GT Inherited Material - public final Material URANIUM238 = MaterialUtils.generateMaterialFromGtENUM(Materials.Uranium); - public final Material URANIUM235 = MaterialUtils.generateMaterialFromGtENUM(Materials.Uranium235); - public final Material PLUTONIUM241 = MaterialUtils.generateMaterialFromGtENUM(Materials.Plutonium241); - public final Material CURIUM = new Material( - "Curium", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - new short[] { 175, 85, 110 }, - 1340, - 3110, - 96, - 151, - false, - "Cm", - 3); // Not a GT Inherited Material - - public final Material CALIFORNIUM = new Material( - "Californium", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - new short[] { 85, 110, 205 }, - 899, - 1472, - 98, - 153, - false, - "Cf", - 4); // Not a GT Inherited Material - - public final Material FERMIUM = new Material( - "Fermium", - MaterialState.LIQUID, - TextureSets.NUCLEAR.get(), - new short[] { 75, 90, 25 }, - 1527, - 3850, - 100, - 157, - false, - "Fm", - 5); // Not a GT Inherited Material //Boiling Point is made up - - // Misc - public final Material AER = MaterialUtils.generateMaterialFromGtENUM(Materials.InfusedAir, TextureSets.GEM_A.get()); - public final Material IGNIS = MaterialUtils - .generateMaterialFromGtENUM(Materials.InfusedFire, TextureSets.GEM_A.get()); - public final Material TERRA = MaterialUtils - .generateMaterialFromGtENUM(Materials.InfusedEarth, TextureSets.GEM_A.get()); - public final Material AQUA = MaterialUtils - .generateMaterialFromGtENUM(Materials.InfusedWater, TextureSets.GEM_A.get()); - public final Material PERDITIO = MaterialUtils - .generateMaterialFromGtENUM(Materials.InfusedEntropy, TextureSets.GEM_A.get()); - public final Material ORDO = MaterialUtils - .generateMaterialFromGtENUM(Materials.InfusedOrder, TextureSets.GEM_A.get()); - - public final Material NAQUADAH = MaterialUtils.generateMaterialFromGtENUM(Materials.Naquadah); - public final Material NAQUADAH_ENRICHED = MaterialUtils.generateMaterialFromGtENUM(Materials.NaquadahEnriched); - public final Material NAQUADRIA = MaterialUtils.generateMaterialFromGtENUM(Materials.Naquadria); - public final Material TRINIUM; - public final Material TRINIUM_REFINED; - // https://github.com/Blood-Asp/GT5-Unofficial/issues/609 - - // Custom Isotopes - public final Material LITHIUM7 = new Material( - "Lithium 7", - MaterialState.SOLID, - TextureSet.SET_SHINY, - Materials.Lithium.mRGBa, - Materials.Lithium.mMeltingPoint, - Materials.Lithium.mBlastFurnaceTemp, - Materials.Lithium.getProtons(), - Materials.Lithium.getNeutrons(), - Materials.Lithium.mBlastFurnaceRequired, - StringUtils.superscript("7Li"), - 0, - false); // Not a GT Inherited Material - public final Material URANIUM232 = new Material( - "Uranium 232", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - new short[] { 88, 220, 103, 0 }, - 1132, - 4131, - 92, - 140, - false, - StringUtils.superscript("232U"), - 4); // Not a GT Inherited Material - public final Material URANIUM233 = new Material( - "Uranium 233", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - new short[] { 73, 220, 83, 0 }, - 1132, - 4131, - 92, - 141, - false, - StringUtils.superscript("233U"), - 2); // Not a GT Inherited Material - public final Material THORIUM232 = new Material( - "Thorium 232", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - new short[] { 15, 60, 15, 0 }, - Materials.Thorium.mMeltingPoint, - Materials.Thorium.mBlastFurnaceTemp, - 90, - 142, - false, - StringUtils.superscript("232Th"), - 1, - true); // Not a GT Inherited Material - - // RTG Fuels - public final Material PLUTONIUM238 = new Material( - "Plutonium-238", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - Materials.Plutonium241.mDurability, - Materials.Plutonium241.mRGBa, - Materials.Plutonium241.mMeltingPoint, - Materials.Plutonium241.mBlastFurnaceTemp, - 94, - 144, - false, - StringUtils.superscript("238Pu"), - 2, - false); // Not a GT Inherited Material - - public final Material MAGIC = MaterialUtils - .generateMaterialFromGtENUM(Materials.Magic, new short[] { 10, 185, 140 }); - public final Material THAUMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Thaumium); - - static { - Logger.MATERIALS("Initialising Base Elements."); - } - - private static final ELEMENT INSTANCE = new ELEMENT(); - - public ELEMENT() { - // GTNH Trinium Handling - TRINIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Trinium); - TRINIUM_REFINED = TRINIUM; - } - - public static ELEMENT getInstance() { - return INSTANCE; - } - - public static class STANDALONE { - - public static final Material CELESTIAL_TUNGSTEN = new Material( - "Celestial Tungsten", - MaterialState.SOLID, - TextureSets.REFINED.get(), - new short[] { 50, 50, 50, 2 }, - INSTANCE.TUNGSTEN.getMeltingPointC() + 6500, - INSTANCE.TUNGSTEN.getBoilingPointC() + 7500, - 160, - 101, - true, - "✦◆✦", - 0); // Not a GT Inherited Material - public static final Material ASTRAL_TITANIUM = new Material( - "Astral Titanium", - MaterialState.SOLID, - TextureSets.REFINED.get(), - new short[] { 220, 160, 240, 2 }, - INSTANCE.TITANIUM.getMeltingPointC() + 7500, - INSTANCE.TITANIUM.getBoilingPointC() + 7500, - 145, - 133, - true, - "✧◇✧", - 0); // Not a GT Inherited Material - public static final Material CHRONOMATIC_GLASS = new Material( - "Chromatic Glass", - MaterialState.SOLID, - new short[] { 255, 255, 255, 3 }, - 9200, - 17550, - 40, - 51, - false, - "⌘☯𓍰 𓍱 𓍲 𓍳 𓍴 𓍵 𓍶 𓍷 𓍸 ☯⌘ ", - 0); // Not a GT Inherited Material - public static final Material ADVANCED_NITINOL = new Material( - "Advanced Nitinol", - MaterialState.SOLID, - TextureSets.ENRICHED.get(), - ALLOY.NITINOL_60.getRGB(), - 8400, - 14377, - 40, - 51, - true, - StringUtils.subscript("⚷⚙⚷ Ni4Ti6"), - 0); // Not a GT Inherited Material - public static final Material HYPOGEN = new Material( - "Hypogen", - MaterialState.SOLID, - TextureSets.NUCLEAR.get(), - new short[] { 220, 120, 75, 2 }, - 11255, - 19377, - 240, - 251, - true, - "Hy⚶", - 0); // Not a GT Inherited Material - public static final Material RHUGNOR = new Material( - "Rhugnor", - MaterialState.SOLID, - TextureSets.ENRICHED.get(), - new short[] { 190, 0, 255, 0 }, - 8750, - 14757, - 184, - 142, - true, - "Fs⚶", - 0); // Not a GT Inherited Material //funeris - public static final Material FORCE = new Material( - "Force", - MaterialState.SOLID, - TextureSets.ENRICHED.get(), - new short[] { 250, 250, 20, 0 }, - 4550, - 6830, - 63, - 81, - true, - "Fc⚙", - 0); // Not a GT Inherited Material - - // Runescape materials - public static final Material BLACK_METAL = new Material( - "Black Metal", - MaterialState.SOLID, - TextureSet.SET_METALLIC, - new short[] { 5, 5, 5 }, - 2350, - 4650, - 24, - 17, - false, - "҈", - 0, - new MaterialStack[] { new MaterialStack(getInstance().LEAD, 15), - new MaterialStack(getInstance().MANGANESE, 25), new MaterialStack(getInstance().CARBON, 60) }); // Not - // a - // GT - // Inherited - // Material - public static final Material WHITE_METAL = new Material( - "White Metal", - MaterialState.SOLID, - TextureSet.SET_METALLIC, - new short[] { 255, 255, 255 }, - 4560, - 7580, - 35, - 41, - false, - "҉", - 0, - new MaterialStack[] { new MaterialStack(getInstance().COPPER, 5), - new MaterialStack(getInstance().ANTIMONY, 10), new MaterialStack(getInstance().PLATINUM, 10), - new MaterialStack(getInstance().TIN, 75) }); // Not a GT Inherited Material - - public static final Material GRANITE = new Material( - "Ancient Granite", - MaterialState.SOLID, - TextureSet.SET_SAND, - new short[] { 107, 107, 107 }, - 500, - 2000, - 16, - 12, - false, - "«»", - 0, - false, - new MaterialStack[] { new MaterialStack(getInstance().OXYGEN, 16), - new MaterialStack(getInstance().IRON, 10), new MaterialStack(getInstance().SILICONDIOXIDE, 10), - new MaterialStack(getInstance().ALUMINIUMOXIDE, 6), new MaterialStack(getInstance().POTASSIUM, 6), - new MaterialStack(getInstance().CALCIUM, 4), new MaterialStack(getInstance().SODIUM, 4), - new MaterialStack(getInstance().YTTERBIUM, 2) }); // Not - // a - // GT - // Inherited - // Material - - public static final Material RUNITE = new Material( - "Runite", - MaterialState.SOLID, - TextureSet.SET_FINE, - new short[] { 60, 200, 190 }, - 6750, - 11550, - 73, - 87, - true, - "Rt*", - 0); // Not a GT Inherited Material - public static final Material DRAGON_METAL = new Material( - "Dragonblood", - MaterialState.SOLID, - TextureSet.SET_SHINY, - new short[] { 220, 40, 20, 2 }, - 10160, - 17850, - 96, - 105, - true, - "۞", - 0); // Not a GT Inherited Material - } -} diff --git a/src/main/java/gtPlusPlus/core/material/MISC_MATERIALS.java b/src/main/java/gtPlusPlus/core/material/MISC_MATERIALS.java deleted file mode 100644 index c46b05fbb8..0000000000 --- a/src/main/java/gtPlusPlus/core/material/MISC_MATERIALS.java +++ /dev/null @@ -1,592 +0,0 @@ -package gtPlusPlus.core.material; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.TextureSet; -import gtPlusPlus.core.client.CustomTextureSet.TextureSets; -import gtPlusPlus.core.material.state.MaterialState; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.MaterialUtils; - -public final class MISC_MATERIALS { - - /* - * Some of these materials purely exist as data objects, items will most likely be assigned separately. Most are - * just compositions which will have dusts assigned to them. - */ - - public static void run() { - MaterialUtils.generateSpecialDustAndAssignToAMaterial(POTASSIUM_NITRATE, false); - MaterialUtils.generateSpecialDustAndAssignToAMaterial(SODIUM_NITRATE, false); - MaterialUtils.generateSpecialDustAndAssignToAMaterial(STRONTIUM_OXIDE, false); - MaterialUtils.generateSpecialDustAndAssignToAMaterial(STRONTIUM_HYDROXIDE, false); - MaterialUtils.generateSpecialDustAndAssignToAMaterial(CYANOACETIC_ACID, false); - MaterialUtils.generateSpecialDustAndAssignToAMaterial(SODIUM_CYANIDE, false); - MaterialUtils.generateSpecialDustAndAssignToAMaterial(CALCIUM_CHLORIDE, false); - MaterialUtils.generateSpecialDustAndAssignToAMaterial(COPPER_SULFATE, false); - MaterialUtils.generateSpecialDustAndAssignToAMaterial(COPPER_SULFATE_HYDRATED, false); - WATER.registerComponentForMaterial(FluidUtils.getWater(1000)); - } - - public static final Material POTASSIUM_NITRATE = new Material( - "Potassium Nitrate", - MaterialState.SOLID, // State - null, - null, - -1, - -1, - -1, - -1, - false, - "KNO3", - 0, - false, - new MaterialStack(ELEMENT.getInstance().POTASSIUM, 1), - new MaterialStack(ELEMENT.getInstance().NITROGEN, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 3)); - public static final Material SODIUM_NITRATE = new Material( - "Sodium Nitrate", - MaterialState.SOLID, // State - null, - null, - -1, - -1, - -1, - -1, - false, - "NaNO3", - 0, - false, - new MaterialStack(ELEMENT.getInstance().SODIUM, 1), - new MaterialStack(ELEMENT.getInstance().NITROGEN, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 3)); - - public static final Material SOLAR_SALT_COLD = new Material( - "Solar Salt (Cold)", - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(POTASSIUM_NITRATE, 4), - new MaterialStack(SODIUM_NITRATE, 6)); - - public static final Material SOLAR_SALT_HOT = new Material( - "Solar Salt (Hot)", - MaterialState.PURE_LIQUID, // State - new short[] { 200, 25, 25 }, // Material Colour - 1200, // Melting Point in C - 3300, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(POTASSIUM_NITRATE, 4), - new MaterialStack(SODIUM_NITRATE, 6)); - - public static final Material STRONTIUM_OXIDE = new Material( - "Strontium Oxide", - MaterialState.SOLID, - TextureSet.SET_METALLIC, - null, - -1, - -1, - -1, - -1, - false, - "SrO", - 0, - false, - new MaterialStack(ELEMENT.getInstance().STRONTIUM, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 1)); - - public static final Material SELENIUM_DIOXIDE = new Material( - "Selenium Dioxide", - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().SELENIUM, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 2)); - - public static final Material SELENIOUS_ACID = new Material( - "Selenious Acid", - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(SELENIUM_DIOXIDE, 1), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 8), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 4)); - - public static final Material HYDROGEN_CYANIDE = new Material( - "Hydrogen Cyanide", - MaterialState.PURE_GAS, // State - null, // Material Colour - 4, // Melting Point in C - 26, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 1), - new MaterialStack(ELEMENT.getInstance().CARBON, 1), - new MaterialStack(ELEMENT.getInstance().NITROGEN, 1)); - - public static final Material CARBON_MONOXIDE = new Material( - "Carbon Monoxide", - MaterialState.PURE_GAS, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().CARBON, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 1)); - - public static final Material CARBON_DIOXIDE = new Material( - "Carbon Dioxide", - MaterialState.PURE_GAS, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().CARBON, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 2)); - - public static final Material WOODS_GLASS = new Material( - "Wood's Glass", // Material Name - MaterialState.SOLID, // State - TextureSets.GEM_A.get(), // Texture Set - new short[] { 220, 60, 255 }, // Material Colour - -1, - -1, - -1, - -1, - false, - "Si4Ba3Na2Ni", - 0, - false, - new MaterialStack(ELEMENT.getInstance().SILICON, 40), - new MaterialStack(ELEMENT.getInstance().BARIUM, 30), - new MaterialStack(ELEMENT.getInstance().SODIUM, 20), - new MaterialStack(ELEMENT.getInstance().NICKEL, 10)); - - /* - * Rare Earth Materials - */ - - public static final Material RARE_EARTH_LOW = new Material( - "Rare Earth (I)", // Material Name - MaterialState.ORE, // State - TextureSets.GEM_A.get(), // Texture Set - null, // Material Colour - 1200, - 2500, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ORES.GREENOCKITE, 1), new MaterialStack(ORES.LANTHANITE_CE, 1), - new MaterialStack(ORES.AGARDITE_CD, 1), new MaterialStack(ORES.YTTRIALITE, 1), - new MaterialStack(MaterialUtils.generateMaterialFromGtENUM(Materials.NetherQuartz), 1), - new MaterialStack(MaterialUtils.generateMaterialFromGtENUM(Materials.Galena), 1), - new MaterialStack(MaterialUtils.generateMaterialFromGtENUM(Materials.Chalcopyrite), 1), - new MaterialStack(ORES.CRYOLITE, 1), new MaterialStack(ELEMENT.getInstance().YTTRIUM, 1) }); - - public static final Material RARE_EARTH_MID = new Material( - "Rare Earth (II)", // Material Name - MaterialState.ORE, // State - TextureSets.ENRICHED.get(), // Texture Set - null, // Material Colour - 3500, - 5000, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ORES.LANTHANITE_ND, 1), new MaterialStack(ORES.AGARDITE_ND, 1), - new MaterialStack(ORES.YTTRIAITE, 1), new MaterialStack(ORES.CROCROITE, 1), - new MaterialStack(ORES.NICHROMITE, 1), new MaterialStack(ORES.ZIRCON, 1), - new MaterialStack(ELEMENT.STANDALONE.GRANITE, 1), new MaterialStack(ELEMENT.STANDALONE.BLACK_METAL, 1), - new MaterialStack(ELEMENT.STANDALONE.RUNITE, 1) }); - - public static final Material RARE_EARTH_HIGH = new Material( - "Rare Earth (III)", // Material Name - MaterialState.ORE, // State - TextureSets.REFINED.get(), // Texture Set - null, // Material Colour - 5200, - 7500, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ORES.GADOLINITE_Y, 1), new MaterialStack(ORES.LEPERSONNITE, 1), - new MaterialStack(ORES.FLORENCITE, 1), new MaterialStack(ORES.FLUORCAPHITE, 1), - new MaterialStack(ORES.LAUTARITE, 1), new MaterialStack(ORES.DEMICHELEITE_BR, 1), - new MaterialStack(ORES.ALBURNITE, 1), new MaterialStack(ORES.SAMARSKITE_Y, 1), - new MaterialStack(ORES.AGARDITE_LA, 1), }); - - public static final Material WATER = new Material( - "Water", - MaterialState.PURE_LIQUID, - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 2), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 1)); - - // OH - public static final Material HYDROXIDE = new Material( - "Hydroxide", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().OXYGEN, 1), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 1)); - - // NH3 - public static final Material AMMONIA = new Material( - "Ammonia", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -77, // Melting Point in C - -33, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().NITROGEN, 1), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 3)); - - // NH4 - public static final Material AMMONIUM = new Material( - "Ammonium", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().NITROGEN, 1), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 4)); - - public static final Material HYDROGEN_CHLORIDE = new Material( - "Hydrogen Chloride", - MaterialState.PURE_GAS, - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 1), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 1)); - - public static final Material HYDROGEN_CHLORIDE_MIX = new Material( - "Hydrogen Chloride Mix", - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 1), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 1)); - - public static final Material SODIUM_CHLORIDE = new Material( - "Sodium Chloride", - MaterialState.PURE_GAS, - new MaterialStack(ELEMENT.getInstance().SODIUM, 1), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 1)); - - public static final Material SALT_WATER = new Material( - "Salt Water", - MaterialState.PURE_LIQUID, - new MaterialStack(WATER, 3), - new MaterialStack(SODIUM_CHLORIDE, 1)); - - public static final Material BRINE = new Material( - "Brine", - MaterialState.PURE_LIQUID, - new MaterialStack(SALT_WATER, 1), - new MaterialStack(SODIUM_CHLORIDE, 2)); - - public static final Material STRONTIUM_HYDROXIDE = new Material( - "Strontium Hydroxide", - MaterialState.SOLID, - TextureSet.SET_METALLIC, - null, - -1, - -1, - -1, - -1, - false, - "Sr(OH)2", - 0, - false, - new MaterialStack(ELEMENT.getInstance().STRONTIUM, 1), - new MaterialStack(MISC_MATERIALS.HYDROXIDE, 2)); - - // Glue Chemicals - - public static final Material ACETIC_ANHYDRIDE = new Material( - "Acetic Anhydride", - MaterialState.PURE_LIQUID, // State - new short[] { 250, 240, 110 }, // Material Colour - -73, // Melting Point in C - 139, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "(CH3CO)2O", - 0, - true, - new MaterialStack(ELEMENT.getInstance().CARBON, 4), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 6), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 3)); - - public static final Material CHLOROACETIC_ACID = new Material( - "Chloroacetic Acid", - MaterialState.PURE_LIQUID, // State - new short[] { 230, 200, 90 }, // Material Colour - 63, // Melting Point in C - 189, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "ClCH2-COOH", - 0, - true, - new MaterialStack(ELEMENT.getInstance().CARBON, 2), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 3), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 2), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 1)); - - public static final Material DICHLOROACETIC_ACID = new Material( - "Dichloroacetic Acid", - MaterialState.PURE_LIQUID, // State - new short[] { 190, 160, 60 }, // Material Colour - 13, // Melting Point in C - 194, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "Cl2CH-COOH", - 0, - true, - new MaterialStack(ELEMENT.getInstance().CARBON, 2), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 2), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 2), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 2)); - - public static final Material TRICHLOROACETIC_ACID = new Material( - "Trichloroacetic Acid", - MaterialState.PURE_LIQUID, // State - new short[] { 120, 100, 30 }, // Material Colour - 57, // Melting Point in C - 196, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "Cl3C-COOH", - 0, - true, - new MaterialStack(ELEMENT.getInstance().CARBON, 2), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 2), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 3)); - - public static final Material CHLOROACETIC_MIXTURE = new Material( - "Chloroacetic Mixture", - MaterialState.LIQUID, // State - null, - new short[] { 210, 160, 10 }, - 40, - 192, - -1, - -1, - false, - "Cl?H?C-COOH", - 0, - true, - new MaterialStack(ELEMENT.getInstance().CARBON, 6), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 6), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 6), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 6)); - - public static final Material SODIUM_CYANIDE = new Material( - "Sodium Cyanide", - MaterialState.SOLID, // State - new short[] { 180, 190, 255 }, // Material Colour - 563, // Melting Point in C - 1496, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "NaCN", - 0, - false, - new MaterialStack(ELEMENT.getInstance().SODIUM, 1), - new MaterialStack(ELEMENT.getInstance().CARBON, 1), - new MaterialStack(ELEMENT.getInstance().NITROGEN, 1)); - - public static final Material CALCIUM_CHLORIDE = new Material( - "Calcium Chloride", - MaterialState.SOLID, // State - new short[] { 180, 190, 255 }, // Material Colour - 563, // Melting Point in C - 1496, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "CaCl2", - 0, - false, - new MaterialStack(ELEMENT.getInstance().CALCIUM, 1), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 2)); - - public static final Material CYANOACETIC_ACID = new Material( - "Cyanoacetic Acid", - MaterialState.SOLID, // State - new short[] { 130, 130, 40 }, // Material Colour - 66, // Melting Point in C - 108, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "C3H3NO2", - 0, - false, - new MaterialStack(ELEMENT.getInstance().CARBON, 3), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 3), - new MaterialStack(ELEMENT.getInstance().NITROGEN, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 2)); - - public static final Material SOLID_ACID_MIXTURE = new Material( - "Solid Acid Catalyst Mixture", - MaterialState.LIQUID, // State - new short[] { 80, 40, 0 }, // Material Colour - -10, // Melting Point in C - 337, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "?H2SO4?", - 0, - true, - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 2), - new MaterialStack(ELEMENT.getInstance().SULFUR, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 4)); - - public static final Material COPPER_SULFATE = new Material( - "Copper(II) Sulfate", - MaterialState.SOLID, // State - new short[] { 200, 200, 200 }, // Material Colour - 590, // Melting Point in C - 650, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "CuSO4", - 0, - false, - new MaterialStack(ELEMENT.getInstance().COPPER, 1), - new MaterialStack(ELEMENT.getInstance().SULFUR, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 4)); - - public static final Material COPPER_SULFATE_HYDRATED = new Material( - "Copper(II) Sulfate Pentahydrate", - MaterialState.SOLID, // State - new short[] { 90, 170, 255 }, // Material Colour - 590, // Melting Point in C - 650, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "CuSO4∙(H2O)5", - 0, - false, - new MaterialStack(ELEMENT.getInstance().COPPER, 1), - new MaterialStack(ELEMENT.getInstance().SULFUR, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 4)); - - public static final Material ETHYL_CYANOACETATE = new Material( - "Ethyl Cyanoacetate", - MaterialState.PURE_LIQUID, // State - new short[] { 0, 75, 160 }, // Material Colour - -22, // Melting Point in C - 210, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "C5H7NO2", - 0, - true, - new MaterialStack(ELEMENT.getInstance().CARBON, 2), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 2), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 3)); - - public static final Material CYANOACRYLATE_POLYMER = new Material( - "Cyanoacrylate Polymer", - MaterialState.LIQUID, // State - new short[] { 140, 150, 160 }, // Material Colour - -25, // Melting Point in C - 55, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "(-C6H7NO2-)n", - 0, - true, - new MaterialStack(ELEMENT.getInstance().CARBON, 2), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 2), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 3)); - - public static final Material ETHYL_CYANOACRYLATE = new Material( - "Ethyl Cyanoacrylate (Super Glue)", - MaterialState.PURE_LIQUID, // State - new short[] { 170, 190, 200 }, // Material Colour - -25, // Melting Point in C - 55, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "C6H7NO2", - 0, - true, - new MaterialStack(ELEMENT.getInstance().CARBON, 2), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 2), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 3)); - - public static final Material MUTATED_LIVING_SOLDER = new Material( - "Mutated Living Solder", - MaterialState.PURE_LIQUID, // State - new short[] { 147, 109, 155 }, // Material Colour - -200, // Melting Point in C - 500, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - "?Sn?Bi?", - 0, - true, - new MaterialStack(ELEMENT.getInstance().TIN, 1), - new MaterialStack(ELEMENT.getInstance().BISMUTH, 1)); -} diff --git a/src/main/java/gtPlusPlus/core/material/Material.java b/src/main/java/gtPlusPlus/core/material/Material.java index 95088535ce..836ccfa504 100644 --- a/src/main/java/gtPlusPlus/core/material/Material.java +++ b/src/main/java/gtPlusPlus/core/material/Material.java @@ -1,6 +1,6 @@ package gtPlusPlus.core.material; -import static gregtech.api.enums.GT_Values.M; +import static gregtech.api.enums.GTValues.M; import static gregtech.api.enums.Mods.TinkerConstruct; import static gtPlusPlus.core.util.math.MathUtils.safeCast_LongToInt; @@ -20,7 +20,7 @@ import net.minecraftforge.fluids.FluidStack; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TextureSet; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.item.base.BaseItemComponent.ComponentTypes; @@ -381,7 +381,7 @@ public class Material { try { this.unlocalizedName = Utils.sanitizeString(materialName); this.localizedName = materialName; - this.translatedName = GT_LanguageManager + this.translatedName = GTLanguageManager .addStringLocalization("gtplusplus.material." + unlocalizedName, localizedName); mMaterialCache.put(getLocalizedName().toLowerCase(), this); Logger.INFO("Stored " + getLocalizedName() + " to cache with key: " + getLocalizedName().toLowerCase()); @@ -759,37 +759,37 @@ public class Material { for (MaterialStack m : this.getComposites()) { // Gems - if (m.getStackMaterial() == ELEMENT.getInstance().AER) { + if (m.getStackMaterial() == MaterialsElements.getInstance().AER) { aGem++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().AQUA) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().AQUA) { aGem++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().IGNIS) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().IGNIS) { aGem++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().TERRA) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().TERRA) { aGem++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().MAGIC) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().MAGIC) { aGem++; } // Shiny Materials - if (m.getStackMaterial() == ELEMENT.getInstance().GOLD) { + if (m.getStackMaterial() == MaterialsElements.getInstance().GOLD) { aShiny++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().SILVER) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().SILVER) { aShiny++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().PLATINUM) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().PLATINUM) { aShiny++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().TITANIUM) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().TITANIUM) { aShiny++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().GERMANIUM) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().GERMANIUM) { aShiny++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().GALLIUM) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().GALLIUM) { aShiny++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().MERCURY) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().MERCURY) { aShiny++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().MAGIC) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().MAGIC) { aShiny++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().SAMARIUM) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().SAMARIUM) { aShiny++; - } else if (m.getStackMaterial() == ELEMENT.getInstance().TANTALUM) { + } else if (m.getStackMaterial() == MaterialsElements.getInstance().TANTALUM) { aShiny++; } } @@ -831,7 +831,7 @@ public class Material { if (r.getStackMaterial() .getTextureSet().mSetName.toLowerCase() .contains("fluid")) { - sets.put(ELEMENT.getInstance().GOLD); + sets.put(MaterialsElements.getInstance().GOLD); } else { sets.put(r.getStackMaterial()); } diff --git a/src/main/java/gtPlusPlus/core/material/MaterialGenerator.java b/src/main/java/gtPlusPlus/core/material/MaterialGenerator.java index 8b07e29a52..1dce894309 100644 --- a/src/main/java/gtPlusPlus/core/material/MaterialGenerator.java +++ b/src/main/java/gtPlusPlus/core/material/MaterialGenerator.java @@ -9,8 +9,8 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_Utility; +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.interfaces.RunnableWithInfo; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; @@ -40,26 +40,26 @@ import gtPlusPlus.core.item.base.rods.BaseItemRod; import gtPlusPlus.core.item.base.rods.BaseItemRodLong; import gtPlusPlus.core.item.base.rotors.BaseItemRotor; import gtPlusPlus.core.item.base.screws.BaseItemScrew; -import gtPlusPlus.core.material.nuclear.FLUORIDES; +import gtPlusPlus.core.material.nuclear.MaterialsFluorides; import gtPlusPlus.core.material.state.MaterialState; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_AlloySmelter; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_Assembler; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_BlastSmelter; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_DustGeneration; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_Extruder; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_FluidCanning; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_Fluids; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_Fluorite; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_MaterialProcessing; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_MetalRecipe; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_Ore; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_Plasma; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_Plates; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_Recycling; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_ShapedCrafting; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenAlloySmelter; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenAssembler; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenBlastSmelter; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenDustGeneration; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenExtruder; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenFluidCanning; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenFluids; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenFluorite; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenMaterialProcessing; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenMetalRecipe; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenOre; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenPlasma; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenPlates; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenRecycling; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenShapedCrafting; public class MaterialGenerator { @@ -81,7 +81,7 @@ public class MaterialGenerator { public static boolean addFluidCannerRecipe(ItemStack aEmpty, ItemStack aFullContainer, FluidStack aFluidIn, FluidStack rFluidOut, Integer aTime, Integer aEu) { - RecipeGen_FluidCanning g = new RecipeGen_FluidCanning(false, aEmpty, aFullContainer, aFluidIn, null, null, 0); + RecipeGenFluidCanning g = new RecipeGenFluidCanning(false, aEmpty, aFullContainer, aFluidIn, null, null, 0); if (g != null && g.valid()) { return true; } @@ -178,21 +178,21 @@ public class MaterialGenerator { } // Add A jillion Recipes - old code - new RecipeGen_AlloySmelter(matInfo); - new RecipeGen_Assembler(matInfo); + new RecipeGenAlloySmelter(matInfo); + new RecipeGenAssembler(matInfo); if (generateBlastSmelterRecipes) { - new RecipeGen_BlastSmelter(matInfo); + new RecipeGenBlastSmelter(matInfo); } - new RecipeGen_MetalRecipe(matInfo); - new RecipeGen_Extruder(matInfo); - new RecipeGen_Fluids(matInfo); - new RecipeGen_Plates(matInfo); - new RecipeGen_ShapedCrafting(matInfo); - new RecipeGen_MaterialProcessing(matInfo); + new RecipeGenMetalRecipe(matInfo); + new RecipeGenExtruder(matInfo); + new RecipeGenFluids(matInfo); + new RecipeGenPlates(matInfo); + new RecipeGenShapedCrafting(matInfo); + new RecipeGenMaterialProcessing(matInfo); - new RecipeGen_DustGeneration(matInfo); - new RecipeGen_Recycling(matInfo); - new RecipeGen_Plasma(matInfo); + new RecipeGenDustGeneration(matInfo); + new RecipeGenRecycling(matInfo); + new RecipeGenPlasma(matInfo); return true; @@ -225,9 +225,9 @@ public class MaterialGenerator { // Add A jillion Recipes - old code try { - RecipeGen_DustGeneration.addMixerRecipe_Standalone(matInfo); - new RecipeGen_Fluids(matInfo); - new RecipeGen_MaterialProcessing(matInfo); + RecipeGenDustGeneration.addMixerRecipe_Standalone(matInfo); + new RecipeGenFluids(matInfo); + new RecipeGenMaterialProcessing(matInfo); } catch (Throwable t) { Logger.MATERIALS("Failed to generate some recipes for " + materialName); Logger.ERROR("Failed to generate some recipes for " + materialName); @@ -247,8 +247,8 @@ public class MaterialGenerator { public static void generateNuclearDusts(final Material matInfo, boolean generateDehydratorRecipe) { generateNuclearMaterial(matInfo, false, true, false, false, true); if (generateDehydratorRecipe && matInfo.getFluid() != null && matInfo.getDust(0) != null) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(20)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(20)) .itemOutputs(matInfo.getDust(1)) .fluidInputs(matInfo.getFluidStack(144)) .eut(matInfo.vVoltageMultiplier) @@ -287,21 +287,21 @@ public class MaterialGenerator { if (generatePlates) { temp = new BaseItemPlate(matInfo); temp = new BaseItemPlateDouble(matInfo); - new RecipeGen_Plates(matInfo); - new RecipeGen_Extruder(matInfo); - new RecipeGen_Assembler(matInfo); + new RecipeGenPlates(matInfo); + new RecipeGenExtruder(matInfo); + new RecipeGenAssembler(matInfo); } if (!disableOptionalRecipes) { - new RecipeGen_ShapedCrafting(matInfo); - new RecipeGen_Fluids(matInfo); - new RecipeGen_MaterialProcessing(matInfo); - new RecipeGen_Recycling(matInfo); + new RecipeGenShapedCrafting(matInfo); + new RecipeGenFluids(matInfo); + new RecipeGenMaterialProcessing(matInfo); + new RecipeGenRecycling(matInfo); } - new RecipeGen_MetalRecipe(matInfo); - new RecipeGen_DustGeneration(matInfo, disableOptionalRecipes); - new RecipeGen_Plasma(matInfo); + new RecipeGenMetalRecipe(matInfo); + new RecipeGenDustGeneration(matInfo, disableOptionalRecipes); + new RecipeGenPlasma(matInfo); } catch (final Throwable t) { Logger.MATERIALS("" + matInfo.getLocalizedName() + " failed to generate."); @@ -365,10 +365,10 @@ public class MaterialGenerator { "Generated all ore components for " + matInfo.getLocalizedName() + ", now generating processing recipes."); - if (matInfo == FLUORIDES.FLUORITE) { - new RecipeGen_Fluorite(matInfo); + if (matInfo == MaterialsFluorides.FLUORITE) { + new RecipeGenFluorite(matInfo); } else { - new RecipeGen_Ore(matInfo); + new RecipeGenOre(matInfo); } } catch (final Throwable t) { @@ -406,19 +406,19 @@ public class MaterialGenerator { "Generated all ore & base components for " + matInfo.getLocalizedName() + ", now generating processing recipes."); - new RecipeGen_Ore(matInfo, true); - new RecipeGen_AlloySmelter(matInfo); - new RecipeGen_Assembler(matInfo); - new RecipeGen_BlastSmelter(matInfo); - new RecipeGen_MetalRecipe(matInfo); - new RecipeGen_Extruder(matInfo); - new RecipeGen_Fluids(matInfo); - new RecipeGen_Plates(matInfo); - new RecipeGen_ShapedCrafting(matInfo); - new RecipeGen_MaterialProcessing(matInfo); - new RecipeGen_DustGeneration(matInfo); - new RecipeGen_Recycling(matInfo); - new RecipeGen_Plasma(matInfo); + new RecipeGenOre(matInfo, true); + new RecipeGenAlloySmelter(matInfo); + new RecipeGenAssembler(matInfo); + new RecipeGenBlastSmelter(matInfo); + new RecipeGenMetalRecipe(matInfo); + new RecipeGenExtruder(matInfo); + new RecipeGenFluids(matInfo); + new RecipeGenPlates(matInfo); + new RecipeGenShapedCrafting(matInfo); + new RecipeGenMaterialProcessing(matInfo); + new RecipeGenDustGeneration(matInfo); + new RecipeGenRecycling(matInfo); + new RecipeGenPlasma(matInfo); return true; } catch (final Throwable t) { Logger.MATERIALS("" + matInfo.getLocalizedName() + " failed to generate."); diff --git a/src/main/java/gtPlusPlus/core/material/MaterialMisc.java b/src/main/java/gtPlusPlus/core/material/MaterialMisc.java new file mode 100644 index 0000000000..d00529d044 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/material/MaterialMisc.java @@ -0,0 +1,595 @@ +package gtPlusPlus.core.material; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.TextureSet; +import gtPlusPlus.core.client.CustomTextureSet.TextureSets; +import gtPlusPlus.core.material.state.MaterialState; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.MaterialUtils; + +public final class MaterialMisc { + + /* + * Some of these materials purely exist as data objects, items will most likely be assigned separately. Most are + * just compositions which will have dusts assigned to them. + */ + + public static void run() { + MaterialUtils.generateSpecialDustAndAssignToAMaterial(POTASSIUM_NITRATE, false); + MaterialUtils.generateSpecialDustAndAssignToAMaterial(SODIUM_NITRATE, false); + MaterialUtils.generateSpecialDustAndAssignToAMaterial(STRONTIUM_OXIDE, false); + MaterialUtils.generateSpecialDustAndAssignToAMaterial(STRONTIUM_HYDROXIDE, false); + MaterialUtils.generateSpecialDustAndAssignToAMaterial(CYANOACETIC_ACID, false); + MaterialUtils.generateSpecialDustAndAssignToAMaterial(SODIUM_CYANIDE, false); + MaterialUtils.generateSpecialDustAndAssignToAMaterial(CALCIUM_CHLORIDE, false); + MaterialUtils.generateSpecialDustAndAssignToAMaterial(COPPER_SULFATE, false); + MaterialUtils.generateSpecialDustAndAssignToAMaterial(COPPER_SULFATE_HYDRATED, false); + WATER.registerComponentForMaterial(FluidUtils.getWater(1000)); + } + + public static final Material POTASSIUM_NITRATE = new Material( + "Potassium Nitrate", + MaterialState.SOLID, // State + null, + null, + -1, + -1, + -1, + -1, + false, + "KNO3", + 0, + false, + new MaterialStack(MaterialsElements.getInstance().POTASSIUM, 1), + new MaterialStack(MaterialsElements.getInstance().NITROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 3)); + public static final Material SODIUM_NITRATE = new Material( + "Sodium Nitrate", + MaterialState.SOLID, // State + null, + null, + -1, + -1, + -1, + -1, + false, + "NaNO3", + 0, + false, + new MaterialStack(MaterialsElements.getInstance().SODIUM, 1), + new MaterialStack(MaterialsElements.getInstance().NITROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 3)); + + public static final Material SOLAR_SALT_COLD = new Material( + "Solar Salt (Cold)", + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(POTASSIUM_NITRATE, 4), + new MaterialStack(SODIUM_NITRATE, 6)); + + public static final Material SOLAR_SALT_HOT = new Material( + "Solar Salt (Hot)", + MaterialState.PURE_LIQUID, // State + new short[] { 200, 25, 25 }, // Material Colour + 1200, // Melting Point in C + 3300, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(POTASSIUM_NITRATE, 4), + new MaterialStack(SODIUM_NITRATE, 6)); + + public static final Material STRONTIUM_OXIDE = new Material( + "Strontium Oxide", + MaterialState.SOLID, + TextureSet.SET_METALLIC, + null, + -1, + -1, + -1, + -1, + false, + "SrO", + 0, + false, + new MaterialStack(MaterialsElements.getInstance().STRONTIUM, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 1)); + + public static final Material SELENIUM_DIOXIDE = new Material( + "Selenium Dioxide", + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().SELENIUM, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 2)); + + public static final Material SELENIOUS_ACID = new Material( + "Selenious Acid", + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(SELENIUM_DIOXIDE, 1), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 8), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 4)); + + public static final Material HYDROGEN_CYANIDE = new Material( + "Hydrogen Cyanide", + MaterialState.PURE_GAS, // State + null, // Material Colour + 4, // Melting Point in C + 26, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().CARBON, 1), + new MaterialStack(MaterialsElements.getInstance().NITROGEN, 1)); + + public static final Material CARBON_MONOXIDE = new Material( + "Carbon Monoxide", + MaterialState.PURE_GAS, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().CARBON, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 1)); + + public static final Material CARBON_DIOXIDE = new Material( + "Carbon Dioxide", + MaterialState.PURE_GAS, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().CARBON, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 2)); + + public static final Material WOODS_GLASS = new Material( + "Wood's Glass", // Material Name + MaterialState.SOLID, // State + TextureSets.GEM_A.get(), // Texture Set + new short[] { 220, 60, 255 }, // Material Colour + -1, + -1, + -1, + -1, + false, + "Si4Ba3Na2Ni", + 0, + false, + new MaterialStack(MaterialsElements.getInstance().SILICON, 40), + new MaterialStack(MaterialsElements.getInstance().BARIUM, 30), + new MaterialStack(MaterialsElements.getInstance().SODIUM, 20), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 10)); + + /* + * Rare Earth Materials + */ + + public static final Material RARE_EARTH_LOW = new Material( + "Rare Earth (I)", // Material Name + MaterialState.ORE, // State + TextureSets.GEM_A.get(), // Texture Set + null, // Material Colour + 1200, + 2500, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsOres.GREENOCKITE, 1), + new MaterialStack(MaterialsOres.LANTHANITE_CE, 1), new MaterialStack(MaterialsOres.AGARDITE_CD, 1), + new MaterialStack(MaterialsOres.YTTRIALITE, 1), + new MaterialStack(MaterialUtils.generateMaterialFromGtENUM(Materials.NetherQuartz), 1), + new MaterialStack(MaterialUtils.generateMaterialFromGtENUM(Materials.Galena), 1), + new MaterialStack(MaterialUtils.generateMaterialFromGtENUM(Materials.Chalcopyrite), 1), + new MaterialStack(MaterialsOres.CRYOLITE, 1), + new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 1) }); + + public static final Material RARE_EARTH_MID = new Material( + "Rare Earth (II)", // Material Name + MaterialState.ORE, // State + TextureSets.ENRICHED.get(), // Texture Set + null, // Material Colour + 3500, + 5000, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsOres.LANTHANITE_ND, 1), + new MaterialStack(MaterialsOres.AGARDITE_ND, 1), new MaterialStack(MaterialsOres.YTTRIAITE, 1), + new MaterialStack(MaterialsOres.CROCROITE, 1), new MaterialStack(MaterialsOres.NICHROMITE, 1), + new MaterialStack(MaterialsOres.ZIRCON, 1), new MaterialStack(MaterialsElements.STANDALONE.GRANITE, 1), + new MaterialStack(MaterialsElements.STANDALONE.BLACK_METAL, 1), + new MaterialStack(MaterialsElements.STANDALONE.RUNITE, 1) }); + + public static final Material RARE_EARTH_HIGH = new Material( + "Rare Earth (III)", // Material Name + MaterialState.ORE, // State + TextureSets.REFINED.get(), // Texture Set + null, // Material Colour + 5200, + 7500, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsOres.GADOLINITE_Y, 1), + new MaterialStack(MaterialsOres.LEPERSONNITE, 1), new MaterialStack(MaterialsOres.FLORENCITE, 1), + new MaterialStack(MaterialsOres.FLUORCAPHITE, 1), new MaterialStack(MaterialsOres.LAUTARITE, 1), + new MaterialStack(MaterialsOres.DEMICHELEITE_BR, 1), new MaterialStack(MaterialsOres.ALBURNITE, 1), + new MaterialStack(MaterialsOres.SAMARSKITE_Y, 1), new MaterialStack(MaterialsOres.AGARDITE_LA, 1), }); + + public static final Material WATER = new Material( + "Water", + MaterialState.PURE_LIQUID, + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 1)); + + // OH + public static final Material HYDROXIDE = new Material( + "Hydroxide", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 1), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 1)); + + // NH3 + public static final Material AMMONIA = new Material( + "Ammonia", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -77, // Melting Point in C + -33, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().NITROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 3)); + + // NH4 + public static final Material AMMONIUM = new Material( + "Ammonium", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().NITROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 4)); + + public static final Material HYDROGEN_CHLORIDE = new Material( + "Hydrogen Chloride", + MaterialState.PURE_GAS, + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 1)); + + public static final Material HYDROGEN_CHLORIDE_MIX = new Material( + "Hydrogen Chloride Mix", + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 1)); + + public static final Material SODIUM_CHLORIDE = new Material( + "Sodium Chloride", + MaterialState.PURE_GAS, + new MaterialStack(MaterialsElements.getInstance().SODIUM, 1), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 1)); + + public static final Material SALT_WATER = new Material( + "Salt Water", + MaterialState.PURE_LIQUID, + new MaterialStack(WATER, 3), + new MaterialStack(SODIUM_CHLORIDE, 1)); + + public static final Material BRINE = new Material( + "Brine", + MaterialState.PURE_LIQUID, + new MaterialStack(SALT_WATER, 1), + new MaterialStack(SODIUM_CHLORIDE, 2)); + + public static final Material STRONTIUM_HYDROXIDE = new Material( + "Strontium Hydroxide", + MaterialState.SOLID, + TextureSet.SET_METALLIC, + null, + -1, + -1, + -1, + -1, + false, + "Sr(OH)2", + 0, + false, + new MaterialStack(MaterialsElements.getInstance().STRONTIUM, 1), + new MaterialStack(MaterialMisc.HYDROXIDE, 2)); + + // Glue Chemicals + + public static final Material ACETIC_ANHYDRIDE = new Material( + "Acetic Anhydride", + MaterialState.PURE_LIQUID, // State + new short[] { 250, 240, 110 }, // Material Colour + -73, // Melting Point in C + 139, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "(CH3CO)2O", + 0, + true, + new MaterialStack(MaterialsElements.getInstance().CARBON, 4), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 6), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 3)); + + public static final Material CHLOROACETIC_ACID = new Material( + "Chloroacetic Acid", + MaterialState.PURE_LIQUID, // State + new short[] { 230, 200, 90 }, // Material Colour + 63, // Melting Point in C + 189, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "ClCH2-COOH", + 0, + true, + new MaterialStack(MaterialsElements.getInstance().CARBON, 2), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 3), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 2), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 1)); + + public static final Material DICHLOROACETIC_ACID = new Material( + "Dichloroacetic Acid", + MaterialState.PURE_LIQUID, // State + new short[] { 190, 160, 60 }, // Material Colour + 13, // Melting Point in C + 194, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "Cl2CH-COOH", + 0, + true, + new MaterialStack(MaterialsElements.getInstance().CARBON, 2), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 2), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 2)); + + public static final Material TRICHLOROACETIC_ACID = new Material( + "Trichloroacetic Acid", + MaterialState.PURE_LIQUID, // State + new short[] { 120, 100, 30 }, // Material Colour + 57, // Melting Point in C + 196, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "Cl3C-COOH", + 0, + true, + new MaterialStack(MaterialsElements.getInstance().CARBON, 2), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 2), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 3)); + + public static final Material CHLOROACETIC_MIXTURE = new Material( + "Chloroacetic Mixture", + MaterialState.LIQUID, // State + null, + new short[] { 210, 160, 10 }, + 40, + 192, + -1, + -1, + false, + "Cl?H?C-COOH", + 0, + true, + new MaterialStack(MaterialsElements.getInstance().CARBON, 6), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 6), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 6), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 6)); + + public static final Material SODIUM_CYANIDE = new Material( + "Sodium Cyanide", + MaterialState.SOLID, // State + new short[] { 180, 190, 255 }, // Material Colour + 563, // Melting Point in C + 1496, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "NaCN", + 0, + false, + new MaterialStack(MaterialsElements.getInstance().SODIUM, 1), + new MaterialStack(MaterialsElements.getInstance().CARBON, 1), + new MaterialStack(MaterialsElements.getInstance().NITROGEN, 1)); + + public static final Material CALCIUM_CHLORIDE = new Material( + "Calcium Chloride", + MaterialState.SOLID, // State + new short[] { 180, 190, 255 }, // Material Colour + 563, // Melting Point in C + 1496, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "CaCl2", + 0, + false, + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 1), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 2)); + + public static final Material CYANOACETIC_ACID = new Material( + "Cyanoacetic Acid", + MaterialState.SOLID, // State + new short[] { 130, 130, 40 }, // Material Colour + 66, // Melting Point in C + 108, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "C3H3NO2", + 0, + false, + new MaterialStack(MaterialsElements.getInstance().CARBON, 3), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 3), + new MaterialStack(MaterialsElements.getInstance().NITROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 2)); + + public static final Material SOLID_ACID_MIXTURE = new Material( + "Solid Acid Catalyst Mixture", + MaterialState.LIQUID, // State + new short[] { 80, 40, 0 }, // Material Colour + -10, // Melting Point in C + 337, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "?H2SO4?", + 0, + true, + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 2), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 4)); + + public static final Material COPPER_SULFATE = new Material( + "Copper(II) Sulfate", + MaterialState.SOLID, // State + new short[] { 200, 200, 200 }, // Material Colour + 590, // Melting Point in C + 650, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "CuSO4", + 0, + false, + new MaterialStack(MaterialsElements.getInstance().COPPER, 1), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 4)); + + public static final Material COPPER_SULFATE_HYDRATED = new Material( + "Copper(II) Sulfate Pentahydrate", + MaterialState.SOLID, // State + new short[] { 90, 170, 255 }, // Material Colour + 590, // Melting Point in C + 650, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "CuSO4∙(H2O)5", + 0, + false, + new MaterialStack(MaterialsElements.getInstance().COPPER, 1), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 4)); + + public static final Material ETHYL_CYANOACETATE = new Material( + "Ethyl Cyanoacetate", + MaterialState.PURE_LIQUID, // State + new short[] { 0, 75, 160 }, // Material Colour + -22, // Melting Point in C + 210, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "C5H7NO2", + 0, + true, + new MaterialStack(MaterialsElements.getInstance().CARBON, 2), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 2), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 3)); + + public static final Material CYANOACRYLATE_POLYMER = new Material( + "Cyanoacrylate Polymer", + MaterialState.LIQUID, // State + new short[] { 140, 150, 160 }, // Material Colour + -25, // Melting Point in C + 55, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "(-C6H7NO2-)n", + 0, + true, + new MaterialStack(MaterialsElements.getInstance().CARBON, 2), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 2), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 3)); + + public static final Material ETHYL_CYANOACRYLATE = new Material( + "Ethyl Cyanoacrylate (Super Glue)", + MaterialState.PURE_LIQUID, // State + new short[] { 170, 190, 200 }, // Material Colour + -25, // Melting Point in C + 55, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "C6H7NO2", + 0, + true, + new MaterialStack(MaterialsElements.getInstance().CARBON, 2), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 2), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 3)); + + public static final Material MUTATED_LIVING_SOLDER = new Material( + "Mutated Living Solder", + MaterialState.PURE_LIQUID, // State + new short[] { 147, 109, 155 }, // Material Colour + -200, // Melting Point in C + 500, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + "?Sn?Bi?", + 0, + true, + new MaterialStack(MaterialsElements.getInstance().TIN, 1), + new MaterialStack(MaterialsElements.getInstance().BISMUTH, 1)); +} diff --git a/src/main/java/gtPlusPlus/core/material/MaterialStack.java b/src/main/java/gtPlusPlus/core/material/MaterialStack.java index 37070a35ec..d4d11781c5 100644 --- a/src/main/java/gtPlusPlus/core/material/MaterialStack.java +++ b/src/main/java/gtPlusPlus/core/material/MaterialStack.java @@ -9,7 +9,7 @@ import gregtech.api.enums.OrePrefixes; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.bartworks.BW_Utils; +import gtPlusPlus.xmod.bartworks.BWUtils; public class MaterialStack { @@ -58,7 +58,7 @@ public class MaterialStack { public ItemStack getUnificatedDustStack(final int amount) { if (this.stackMaterial.werkstoffID != 0) { - ItemStack stack = BW_Utils + ItemStack stack = BWUtils .getCorrespondingItemStack(OrePrefixes.dust, this.stackMaterial.werkstoffID, amount); if (stack != null) { return stack; diff --git a/src/main/java/gtPlusPlus/core/material/MaterialsAlloy.java b/src/main/java/gtPlusPlus/core/material/MaterialsAlloy.java new file mode 100644 index 0000000000..53017a4d29 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/material/MaterialsAlloy.java @@ -0,0 +1,888 @@ +package gtPlusPlus.core.material; + +import gregtech.api.enums.Materials; +import gtPlusPlus.core.material.state.MaterialState; +import gtPlusPlus.core.util.minecraft.MaterialUtils; + +public final class MaterialsAlloy { + + // Just some GT Alloys that I need within mine. + public static final Material BRONZE = MaterialUtils.generateMaterialFromGtENUM(Materials.Bronze); + public static final Material STEEL = MaterialUtils.generateMaterialFromGtENUM(Materials.Steel); + public static final Material STEEL_BLACK = MaterialUtils.generateMaterialFromGtENUM(Materials.BlackSteel); + public static final Material INVAR = MaterialUtils.generateMaterialFromGtENUM(Materials.Invar); + public static final Material KANTHAL = MaterialUtils.generateMaterialFromGtENUM(Materials.Kanthal); + public static final Material NICHROME = MaterialUtils.generateMaterialFromGtENUM(Materials.Nichrome); + public static final Material TUNGSTENSTEEL = MaterialUtils.generateMaterialFromGtENUM(Materials.TungstenSteel); + public static final Material STAINLESS_STEEL = MaterialUtils.generateMaterialFromGtENUM(Materials.StainlessSteel); + public static final Material OSMIRIDIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Osmiridium); + public static final Material POLYETHYLENE = MaterialUtils.generateMaterialFromGtENUM(Materials.Plastic); + public static final Material POLYTETRAFLUOROETHYLENE = MaterialUtils + .generateMaterialFromGtENUM(Materials.Polytetrafluoroethylene); + public static final Material ENERGYCRYSTAL = new Material( + "Energy Crystal", // Material Name + MaterialState.SOLID, // State + new short[] { 228, 255, 0, 0 }, // Material Colour + 4660, // Melting Point in C + 5735, // Boiling Point in C + 90, // Protons + 40, // Neutrons + true, // Uses Blast furnace? + "⬟ ⯂ ⬢ ⬣ ⯃ ⯄", + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().AER, 5), + new MaterialStack(MaterialsElements.getInstance().IGNIS, 5), + new MaterialStack(MaterialsElements.getInstance().TERRA, 5), + new MaterialStack(MaterialsElements.getInstance().AQUA, 5)); + + public static final Material BLOODSTEEL = new Material( + "Blood Steel", // Material Name + MaterialState.SOLID, // State + new short[] { 142, 28, 0, 0 }, // Material Colour + 2500, // Melting Point in C + 0, // Boiling Point in C + 100, // Protons + 100, // Neutrons + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.STEEL, 5), + new MaterialStack(MaterialsElements.getInstance().IGNIS, 5)); + + public static final Material STABALLOY = new Material( + "Staballoy", // Material Name + MaterialState.SOLID, // State + new short[] { 68, 75, 66, 0 }, // Material Colour + 3450, // Melting Point in C + -1, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().URANIUM238, 9), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 1)); + + public static final Material TANTALLOY_60 = new Material( + "Tantalloy-60", // Material Name + MaterialState.SOLID, // State + new short[] { 213, 231, 237, 0 }, // Material Colour + 3025, // Melting Point in C + -1, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().TUNGSTEN, 4), + new MaterialStack(MaterialsElements.getInstance().TANTALUM, 46)); + + public static final Material TANTALLOY_61 = new Material( + "Tantalloy-61", // Material Name + MaterialState.SOLID, // State + new short[] { 193, 211, 217, 0 }, // Material Colour + 3030, // Melting Point in C + -1, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.TANTALLOY_60, 2), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 12), + new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 8)); + + public static final Material TUMBAGA = new Material( + "Tumbaga", // Material Name + MaterialState.SOLID, // State + new short[] { 255, 178, 15, 0 }, // Material Colour + 1300, + -1, + -1, + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().GOLD, 70), + new MaterialStack(MaterialsElements.getInstance().COPPER, 30)); + + public static final Material POTIN = new Material( + "Potin", // Material Name + MaterialState.SOLID, // State + new short[] { 201, 151, 129, 0 }, // Material Colour + 1300, + -1, + -1, + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().LEAD, 40), + new MaterialStack(MaterialsAlloy.BRONZE, 40), + new MaterialStack(MaterialsElements.getInstance().TIN, 20)); + + /* + * public static final Material BEDROCKIUM = new Material( "Bedrockium", //Material Name new short[]{32, 32, 32, 0}, + * //Material Colour 7735, //Melting Point in C 0, //Boiling Point in C 100, //Protons 100, //Neutrons false, //Uses + * Blast furnace? //Material Stacks with Percentage of required elements. null); + */ + + public static final Material INCONEL_625 = new Material( + "Inconel-625", // Material Name + MaterialState.SOLID, // State + new short[] { 128, 200, 128, 0 }, // Material Colour + 2425, // Melting Point in C + 3758, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().NICKEL, 3), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 7), + new MaterialStack(MaterialsElements.getInstance().MOLYBDENUM, 10), + new MaterialStack(INVAR, 10), + new MaterialStack(NICHROME, 13)); + + public static final Material INCONEL_690 = new Material( + "Inconel-690", // Material Name + MaterialState.SOLID, // State + new short[] { 118, 220, 138, 0 }, // Material Colour + 3425, // Melting Point in C + 4895, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 5), + new MaterialStack(MaterialsElements.getInstance().NIOBIUM, 10), + new MaterialStack(MaterialsElements.getInstance().MOLYBDENUM, 10), + new MaterialStack(NICHROME, 15)); + + public static final Material INCONEL_792 = new Material( + "Inconel-792", // Material Name + MaterialState.SOLID, // State + new short[] { 108, 240, 118, 0 }, // Material Colour + 3425, // Melting Point in C + 6200, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().NICKEL, 20), + new MaterialStack(MaterialsElements.getInstance().NIOBIUM, 10), + new MaterialStack(MaterialsElements.getInstance().ALUMINIUM, 20), + new MaterialStack(NICHROME, 10)); + + public static final Material NITINOL_60 = new Material( + "Nitinol 60", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 5651, // Melting Point in C + 8975, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().NICKEL, 40), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 60)); + + public static final Material ZERON_100 = new Material( + "Zeron-100", // Material Name + MaterialState.SOLID, // State + new short[] { 180, 180, 20, 0 }, // Material Colour + 6100, + 9785, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 26), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 6), + new MaterialStack(MaterialsElements.getInstance().MOLYBDENUM, 4), + new MaterialStack(MaterialsElements.getInstance().COPPER, 20), + new MaterialStack(MaterialsElements.getInstance().TUNGSTEN, 4), + new MaterialStack(MaterialsAlloy.STEEL, 40)); + + public static final Material MARAGING250 = new Material( + "Maraging Steel 250", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 2413, // Melting Point in C + 4555, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.STEEL, 64), + new MaterialStack(MaterialsElements.getInstance().MOLYBDENUM, 4), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 4), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 16), + new MaterialStack(MaterialsElements.getInstance().COBALT, 8)); + + public static final Material MARAGING300 = new Material( + "Maraging Steel 300", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 2413, // Melting Point in C + 4555, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.STEEL, 64), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 4), + new MaterialStack(MaterialsElements.getInstance().ALUMINIUM, 4), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 16), + new MaterialStack(MaterialsElements.getInstance().COBALT, 8)); + + public static final Material MARAGING350 = new Material( + "Maraging Steel 350", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 2413, // Melting Point in C + 4555, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.STEEL, 64), + new MaterialStack(MaterialsElements.getInstance().ALUMINIUM, 4), + new MaterialStack(MaterialsElements.getInstance().MOLYBDENUM, 4), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 16), + new MaterialStack(MaterialsElements.getInstance().COBALT, 8)); + + public static final Material AQUATIC_STEEL = new Material( + "Watertight Steel", // Material Name + MaterialState.SOLID, // State + new short[] { 120, 120, 180 }, // Material Colour + 2673, // Melting Point in C + 4835, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.STEEL, 60), + new MaterialStack(MaterialsElements.getInstance().CARBON, 10), + new MaterialStack(MaterialsElements.getInstance().MANGANESE, 5), + new MaterialStack(MaterialsElements.getInstance().SILICON, 10), + new MaterialStack(MaterialsElements.getInstance().PHOSPHORUS, 5), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 5), + new MaterialStack(MaterialsElements.getInstance().ALUMINIUM, 5)); + + public static final Material STELLITE = new Material( + "Stellite", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 4310, // Melting Point in C + 6250, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().COBALT, 35), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 35), + new MaterialStack(MaterialsElements.getInstance().MANGANESE, 20), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 10)); + + public static final Material TALONITE = new Material( + "Talonite", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 3454, // Melting Point in C + 5500, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().COBALT, 40), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 30), + new MaterialStack(MaterialsElements.getInstance().PHOSPHORUS, 20), + new MaterialStack(MaterialsElements.getInstance().MOLYBDENUM, 10)); + + public static final Material HASTELLOY_W = new Material( + "Hastelloy-W", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 3350, // Melting Point in C + 5755, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().IRON, 06), + new MaterialStack(MaterialsElements.getInstance().COBALT, 2), + new MaterialStack(MaterialsElements.getInstance().MOLYBDENUM, 24), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 6), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 62)); + + public static final Material HASTELLOY_X = new Material( + "Hastelloy-X", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 3350, // Melting Point in C + 5755, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().IRON, 18), + new MaterialStack(MaterialsElements.getInstance().MANGANESE, 2), + new MaterialStack(MaterialsElements.getInstance().SILICON, 2), + new MaterialStack(MaterialsElements.getInstance().MOLYBDENUM, 8), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 22), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 48)); + + public static final Material HASTELLOY_N = new Material( + "Hastelloy-N", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 4350, // Melting Point in C + 6875, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 8), + new MaterialStack(MaterialsElements.getInstance().MOLYBDENUM, 16), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 8), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 8), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 60)); + + public static final Material HASTELLOY_C276 = new Material( + "Hastelloy-C276", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 4350, // Melting Point in C + 6520, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().COBALT, 2), + new MaterialStack(MaterialsElements.getInstance().MOLYBDENUM, 16), + new MaterialStack(MaterialsElements.getInstance().TUNGSTEN, 2), + new MaterialStack(MaterialsElements.getInstance().COPPER, 2), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 14), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 64)); + + public static final Material INCOLOY_020 = new Material( + "Incoloy-020", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 3425, // Melting Point in C + 5420, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().IRON, 40), + new MaterialStack(MaterialsElements.getInstance().COPPER, 4), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 20), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 36)); + + public static final Material INCOLOY_DS = new Material( + "Incoloy-DS", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 3425, // Melting Point in C + 5420, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().IRON, 46), + new MaterialStack(MaterialsElements.getInstance().COBALT, 18), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 18), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 18)); + + public static final Material INCOLOY_MA956 = new Material( + "Incoloy-MA956", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 4425, // Melting Point in C + 6875, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().IRON, 64), + new MaterialStack(MaterialsElements.getInstance().ALUMINIUM, 12), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 20), + new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 4)); + + public static final Material TUNGSTEN_CARBIDE = new Material( + "Tungsten Carbide", // Material Name + MaterialState.SOLID, // State + new short[] { 44, 44, 44, 0 }, // Material Colour + 3422, // Melting Point in C + -1, + -1, + -1, + true, // Uses Blast furnace? + false, // Generate cells + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().CARBON, 50), + new MaterialStack(MaterialsElements.getInstance().TUNGSTEN, 50)); + + public static final Material TUNGSTEN_TITANIUM_CARBIDE = new Material( + "Tungsten Titanium Carbide", // Material Name + MaterialState.SOLID, // State + null, + 4422, // Melting Point in C + -1, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(TUNGSTEN_CARBIDE, 70), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 30)); + + public static final Material SILICON_CARBIDE = new Material( + "Silicon Carbide", // Material Name + MaterialState.SOLID, // State + new short[] { 40, 48, 36, 0 }, // Material Colour + 1414, // Melting Point in C + -1, + -1, + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().SILICON, 50), + new MaterialStack(MaterialsElements.getInstance().CARBON, 50)); + + public static final Material TANTALUM_CARBIDE = new Material( + "Tantalum Carbide", // Material Name + MaterialState.SOLID, // State + new short[] { 139, 136, 120, 0 }, // Material Colour + 2980, // Melting Point in C + -1, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().TANTALUM, 50), + new MaterialStack(MaterialsElements.getInstance().CARBON, 50)); + + public static final Material ZIRCONIUM_CARBIDE = new Material( + "Zirconium Carbide", // Material Name + MaterialState.SOLID, // State + new short[] { 222, 202, 180, 0 }, // Material Colour + 1555, // Melting Point in C + -1, + -1, + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().ZIRCONIUM, 50), + new MaterialStack(MaterialsElements.getInstance().CARBON, 50)); + + public static final Material NIOBIUM_CARBIDE = new Material( + "Niobium Carbide", // Material Name + MaterialState.SOLID, // State + new short[] { 205, 197, 191, 0 }, // Material Colour + 2477, // Melting Point in C + -1, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().NIOBIUM, 50), + new MaterialStack(MaterialsElements.getInstance().CARBON, 50)); + + public static final Material ARCANITE = new Material( + "Arcanite", // Material Name + MaterialState.SOLID, // State + null, + 5666, // Melting Point in C + 9875, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().THORIUM232, 40), + new MaterialStack(ENERGYCRYSTAL, 40), + new MaterialStack(MaterialsElements.getInstance().ORDO, 10), + new MaterialStack(MaterialsElements.getInstance().PERDITIO, 10)); + + public static final Material LEAGRISIUM = new Material( + "Grisium", // Material Name + MaterialState.SOLID, // State + new short[] { 53, 93, 106, 0 }, // Material Colour + 3850, // Melting Point in C + 5550, // Boiling Point in C + 96, // Protons + 128, // Neutrons + true, // Uses Blast furnace? + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 18), + new MaterialStack(MaterialsElements.getInstance().CARBON, 18), + new MaterialStack(MaterialsElements.getInstance().POTASSIUM, 18), + new MaterialStack(MaterialsElements.getInstance().LITHIUM, 18), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 18), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 10)); // Material Stacks with Percentage of + // required elements. + + public static final Material EGLIN_STEEL_BASE = new Material( + "Eglin Steel Base Compound", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().IRON, 12), + new MaterialStack(KANTHAL, 3), + new MaterialStack(INVAR, 15)); + + public static final Material EGLIN_STEEL = new Material( + "Eglin Steel", // Material Name + MaterialState.SOLID, // State + new short[] { 139, 69, 19, 0 }, // Material Colour + 1048, // Melting Point in C + 1973, // Boiling Point in C + -1, + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.EGLIN_STEEL_BASE, 10), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 1), + new MaterialStack(MaterialsElements.getInstance().SILICON, 4), + new MaterialStack(MaterialsElements.getInstance().CARBON, 1)); + + public static final Material HG1223 = new Material( + "HG-1223", // Material Name + MaterialState.LIQUID, // State + new short[] { 39, 85, 159, 0 }, // Material Colour + 6357, // Melting Point in C + 8563, // Boiling Point in C + -1, + -1, + false, // Uses Blast furnace? + new MaterialStack(MaterialsElements.getInstance().MERCURY, 1), + new MaterialStack(MaterialsElements.getInstance().BARIUM, 2), + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 2), + new MaterialStack(MaterialsElements.getInstance().COPPER, 3), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 8)); + + public static final Material HS188A = new Material( + "HS188-A", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 4870, // Melting Point in C + 7550, // Boiling Point in C + -1, // Protons + -1, // Neutrons + true, // Uses Blast furnace? + new MaterialStack(MaterialsElements.getInstance().COBALT, 20), + new MaterialStack(MaterialsElements.getInstance().HAFNIUM, 20), + new MaterialStack(TALONITE, 16), + new MaterialStack(MaterialsElements.getInstance().RHENIUM, 10), + new MaterialStack(NIOBIUM_CARBIDE, 10), + new MaterialStack(HASTELLOY_X, 8), + new MaterialStack(TUNGSTENSTEEL, 8), + new MaterialStack(ZIRCONIUM_CARBIDE, 8)); // Material Stacks with Percentage of required + // elements. + + /** + * Stargate Materials - #D2FFA9 210, 255, 170 + */ + public static final Material TRINIUM_TITANIUM = new Material( + "Trinium Titanium Alloy", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 3750, // Melting Point in C + 7210, // Boiling Point in C + -1, + -1, + true, // Uses Blast furnace? + new MaterialStack(MaterialsElements.getInstance().TRINIUM_REFINED, 3), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 7)); + + public static final Material TRINIUM_NAQUADAH = new Material( + "Trinium Naquadah Alloy", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 4200, // Melting Point in C + 7400, // Boiling Point in C + -1, + -1, + false, // Uses Blast furnace? + new MaterialStack(MaterialsElements.getInstance().TRINIUM_REFINED, 5), + new MaterialStack(MaterialsElements.getInstance().NAQUADAH, 9)); + public static final Material TRINIUM_NAQUADAH_CARBON = new Material( + "Trinium Naquadah Carbonite", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 6500, // Melting Point in C + 9000, // Boiling Point in C + -1, + -1, + true, // Uses Blast furnace? + new MaterialStack(TRINIUM_NAQUADAH, 9), + new MaterialStack(MaterialsElements.getInstance().CARBON, 1)); + + public static final Material TRINIUM_REINFORCED_STEEL = new Material( + "Arceus Alloy 2B", // Material Name + MaterialState.SOLID, // State + new short[] { 205, 197, 23, 0 }, // Material Colour + 7555, // Melting Point in C + 12350, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().TRINIUM_REFINED, 30), + new MaterialStack(MaterialsAlloy.MARAGING350, 40), + new MaterialStack(MaterialsAlloy.TUNGSTENSTEEL, 20), + new MaterialStack(MaterialsAlloy.OSMIRIDIUM, 10), + new MaterialStack(MaterialsElements.getInstance().STRONTIUM, 10)); + + /* + * Witchery Material + */ + + public static final Material KOBOLDITE = new Material( + "Koboldite", // Material Name + MaterialState.SOLID, // State + new short[] { 80, 210, 255, 0 }, // Material Colour + -1, // Melting Point in C + -1, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().NICKEL, 35), + new MaterialStack(MaterialsElements.getInstance().THAUMIUM, 30), + new MaterialStack(MaterialsElements.getInstance().IRON, 35)); + + /* + * Top Tier Alloys + */ + + public static final Material HELICOPTER = new Material( + "HeLiCoPtEr", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 5763, + 8192, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().HELIUM, 20), + new MaterialStack(MaterialsElements.getInstance().LITHIUM, 20), + new MaterialStack(MaterialsElements.getInstance().COBALT, 20), + new MaterialStack(MaterialsElements.getInstance().PLATINUM, 20), + new MaterialStack(MaterialsElements.getInstance().ERBIUM, 20)); + + // 0lafe Compound + public static final Material LAFIUM = new Material( + "Lafium Compound", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 6350, // Melting Point in C + 9865, // Boiling Point in C + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.HASTELLOY_N, 8), + new MaterialStack(MaterialsElements.getInstance().NAQUADAH, 4), + new MaterialStack(MaterialsElements.getInstance().SAMARIUM, 2), + new MaterialStack(MaterialsElements.getInstance().TUNGSTEN, 4), + new MaterialStack(MaterialsElements.getInstance().ARGON, 2), + new MaterialStack(MaterialsElements.getInstance().ALUMINIUM, 6), + new MaterialStack(MaterialsElements.getInstance().NICKEL, 8), + new MaterialStack(MaterialsElements.getInstance().CARBON, 2)); + + // Cinobi Alloy + public static final Material CINOBITE = new Material( + "Cinobite A243", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 7350, // Melting Point in C + 12565, // Boiling Point in C + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.ZERON_100, 16), + new MaterialStack(MaterialsElements.getInstance().NAQUADRIA, 7), + new MaterialStack(MaterialsElements.getInstance().GADOLINIUM, 5), + new MaterialStack(MaterialsElements.getInstance().ALUMINIUM, 3), + new MaterialStack(MaterialsElements.getInstance().MERCURY, 2), + new MaterialStack(MaterialsElements.getInstance().TIN, 2), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 12), + new MaterialStack(MaterialsAlloy.OSMIRIDIUM, 6)); + + // Piky Alloy + public static final Material PIKYONIUM = new Material( + "Pikyonium 64B", // Material Name + MaterialState.SOLID, // State + new short[] { 52, 103, 186, 0 }, // Material Colour + 6850, // Melting Point in C + 11765, // Boiling Point in C + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.INCONEL_792, 16), + new MaterialStack(MaterialsAlloy.EGLIN_STEEL, 10), + new MaterialStack(MaterialsElements.getInstance().NAQUADAH_ENRICHED, 8), + new MaterialStack(MaterialsElements.getInstance().CERIUM, 6), + new MaterialStack(MaterialsElements.getInstance().ANTIMONY, 4), + new MaterialStack(MaterialsElements.getInstance().PLATINUM, 4), + new MaterialStack(MaterialsElements.getInstance().YTTERBIUM, 2), + new MaterialStack(MaterialsAlloy.TUNGSTENSTEEL, 8)); + + // Piky Alloy + public static final Material ABYSSAL = new Material( + "Abyssal Alloy", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 9650, // Melting Point in C + 13765, // Boiling Point in C + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.STAINLESS_STEEL, 10), + new MaterialStack(MaterialsAlloy.TUNGSTEN_CARBIDE, 10), + new MaterialStack(MaterialsAlloy.NICHROME, 10), + new MaterialStack(MaterialsAlloy.BRONZE, 10), + new MaterialStack(MaterialsAlloy.INCOLOY_MA956, 10), + new MaterialStack(MaterialsElements.getInstance().IODINE, 2), + new MaterialStack(MaterialsElements.getInstance().RADON, 2), + new MaterialStack(MaterialsElements.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(MaterialsAlloy.EGLIN_STEEL, 40), + new MaterialStack(MaterialsElements.getInstance().INDIUM, 10), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 20), + new MaterialStack(MaterialsElements.getInstance().DYSPROSIUM, 5), + new MaterialStack(MaterialsElements.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(MaterialsAlloy.NITINOL_60, 2), + new MaterialStack(MaterialsElements.getInstance().OSMIUM, 12), + new MaterialStack(MaterialsElements.getInstance().RUTHENIUM, 12), + new MaterialStack(MaterialsElements.getInstance().THALLIUM, 6)); + + // Titansteel + public static final Material TITANSTEEL = new Material( + "Titansteel", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 8250, // Melting Point in C + 11765, // Boiling Point in C + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.TUNGSTEN_TITANIUM_CARBIDE, 3), + new MaterialStack(MaterialsElements.getInstance().IGNIS, 1), + new MaterialStack(MaterialsElements.getInstance().TERRA, 1), + new MaterialStack(MaterialsElements.getInstance().PERDITIO, 1)); + + public static final Material OCTIRON = new Material( + "Octiron", // Material Name + MaterialState.SOLID, // State + null, + 9120, // Melting Point in C + 14200, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(ARCANITE, 30), + new MaterialStack(TITANSTEEL, 30), + new MaterialStack(ENERGYCRYSTAL, 5), + new MaterialStack(STEEL_BLACK, 10), + new MaterialStack(MaterialsElements.getInstance().THAUMIUM, 25)); + + public static final Material BLACK_TITANIUM = new Material( + "Black Titanium", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + Materials.Titanium.mMeltingPoint * 4, // Melting Point in C + Materials.Titanium.mMeltingPoint * 16, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 55), + new MaterialStack(MaterialsElements.getInstance().LANTHANUM, 12), + new MaterialStack(MaterialsElements.getInstance().TUNGSTEN, 8), + new MaterialStack(MaterialsElements.getInstance().COBALT, 6), + new MaterialStack(MaterialsElements.getInstance().MANGANESE, 4), + new MaterialStack(MaterialsElements.getInstance().PHOSPHORUS, 4), + new MaterialStack(MaterialsElements.getInstance().PALLADIUM, 4), + new MaterialStack(MaterialsElements.getInstance().NIOBIUM, 2), + new MaterialStack(MaterialsElements.getInstance().ARGON, 5)); + + public static final Material BABBIT_ALLOY = new Material( + "Babbit Alloy", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 268, // Melting Point in C + 589, + -1, + -1, + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().TIN, 10), + new MaterialStack(MaterialsElements.getInstance().LEAD, 72), + new MaterialStack(MaterialsElements.getInstance().ANTIMONY, 16), + new MaterialStack(MaterialsElements.getInstance().ARSENIC, 2)); + + public static final Material INDALLOY_140 = new Material( + "Indalloy 140", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 5200, // Melting Point in C + 6500, + -1, + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsElements.getInstance().BISMUTH, 47), + new MaterialStack(MaterialsElements.getInstance().LEAD, 25), + new MaterialStack(MaterialsElements.getInstance().TIN, 13), + new MaterialStack(MaterialsElements.getInstance().CADMIUM, 10), + new MaterialStack(MaterialsElements.getInstance().INDIUM, 5)); + + // Quantum + public static final Material QUANTUM = new Material( + "Quantum", // Material Name + MaterialState.SOLID, // State + null, // Material Colour + 10500, // Melting Point in C + 25000, // Boiling Point in C + 150, // Protons + 200, // Neutrons + true, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack(MaterialsAlloy.STELLITE, 15), + new MaterialStack(MaterialsAlloy.ENERGYCRYSTAL, 5), + new MaterialStack(MaterialsAlloy.SILICON_CARBIDE, 5), + new MaterialStack(MaterialsElements.getInstance().GALLIUM, 5), + new MaterialStack(MaterialsElements.getInstance().AMERICIUM, 5), + new MaterialStack(MaterialsElements.getInstance().PALLADIUM, 5), + new MaterialStack(MaterialsElements.getInstance().BISMUTH, 5), + new MaterialStack(MaterialsElements.getInstance().GERMANIUM, 5)); +} diff --git a/src/main/java/gtPlusPlus/core/material/MaterialsElements.java b/src/main/java/gtPlusPlus/core/material/MaterialsElements.java new file mode 100644 index 0000000000..d1fcf3f5c5 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/material/MaterialsElements.java @@ -0,0 +1,651 @@ +package gtPlusPlus.core.material; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.TextureSet; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.client.CustomTextureSet.TextureSets; +import gtPlusPlus.core.material.state.MaterialState; +import gtPlusPlus.core.util.data.StringUtils; +import gtPlusPlus.core.util.minecraft.MaterialUtils; + +public final class MaterialsElements { + + public static final String[] NAMES = new String[] { "Hydrogen", "Helium" }; + + // First 50 Elements + public final Material HYDROGEN = MaterialUtils.generateMaterialFromGtENUM(Materials.Hydrogen); + public final Material HELIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Helium); + public final Material LITHIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Lithium); + public final Material BERYLLIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Beryllium); + public final Material BORON = MaterialUtils.generateMaterialFromGtENUM(Materials.Boron); + public final Material CARBON = MaterialUtils.generateMaterialFromGtENUM(Materials.Carbon); + public final Material NITROGEN = MaterialUtils.generateMaterialFromGtENUM(Materials.Nitrogen); + public final Material OXYGEN = MaterialUtils.generateMaterialFromGtENUM(Materials.Oxygen); + public final Material FLUORINE = MaterialUtils.generateMaterialFromGtENUM(Materials.Fluorine); + public final Material NEON = new Material( + "Neon", + MaterialState.PURE_GAS, + new short[] { 240, 180, 30 }, + -248, + -246, + 10, + 10, + false, + "Ne", + 0); // Not a GT Inherited Material + public final Material SODIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Sodium); + public final Material MAGNESIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Magnesium); + public final Material ALUMINIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Aluminium); + public final Material ALUMINIUMOXIDE = MaterialUtils.generateMaterialFromGtENUM(Materials.Aluminiumoxide); + public final Material SILICON = MaterialUtils.generateMaterialFromGtENUM(Materials.Silicon); + public final Material SILICONDIOXIDE = MaterialUtils.generateMaterialFromGtENUM(Materials.SiliconDioxide); + public final Material PHOSPHORUS = MaterialUtils.generateMaterialFromGtENUM(Materials.Phosphorus); + public final Material SULFUR = MaterialUtils.generateMaterialFromGtENUM(Materials.Sulfur); + public final Material CHLORINE = MaterialUtils.generateMaterialFromGtENUM(Materials.Chlorine); + public final Material ARGON = MaterialUtils.generateMaterialFromGtENUM(Materials.Argon); + public final Material POTASSIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Potassium); + public final Material CALCIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Calcium); + public final Material SCANDIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Scandium); + public final Material TITANIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Titanium); + public final Material VANADIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Vanadium); + public final Material CHROMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Chrome); + public final Material MANGANESE = MaterialUtils.generateMaterialFromGtENUM(Materials.Manganese); + public final Material IRON = MaterialUtils.generateMaterialFromGtENUM(Materials.Iron); + public final Material COBALT = MaterialUtils.generateMaterialFromGtENUM(Materials.Cobalt); + public final Material NICKEL = MaterialUtils.generateMaterialFromGtENUM(Materials.Nickel); + public final Material COPPER = MaterialUtils.generateMaterialFromGtENUM(Materials.Copper); + public final Material ZINC = MaterialUtils.generateMaterialFromGtENUM(Materials.Zinc); + public final Material GALLIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Gallium); + public final Material GERMANIUM = new Material( + "Germanium", + MaterialState.SOLID, + new short[] { 200, 200, 200 }, + 937, + 2830, + 32, + 41, + false, + "Ge", + 0); // Not a GT Inherited Material + public final Material ARSENIC = MaterialUtils.generateMaterialFromGtENUM(Materials.Arsenic); + public final Material SELENIUM = new Material( + "Selenium", + MaterialState.SOLID, + new short[] { 190, 190, 190 }, + 217, + 685, + 34, + 45, + false, + "Se", + 0); // Not a GT Inherited Material + public final Material BROMINE = new Material( + "Bromine", + MaterialState.PURE_LIQUID, + new short[] { 200, 25, 25 }, + -7, + 58, + 35, + 45, + false, + "Br", + 0); // Not a GT Inherited Material + public final Material KRYPTON = new Material( + "Krypton", + MaterialState.PURE_GAS, + new short[] { 5, 200, 220 }, + -157, + -153, + 36, + 48, + false, + "Kr", + 0); // Not a GT Inherited Material + public final Material RUBIDIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Rubidium); + public final Material STRONTIUM = MaterialUtils + .generateMaterialFromGtENUM(Materials.Strontium, new short[] { 230, 210, 110 }, TextureSet.SET_FLINT); + public final Material YTTRIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Yttrium); + public final Material ZIRCONIUM = new Material( + "Zirconium", + MaterialState.SOLID, + new short[] { 255, 250, 205 }, + 1855, + 4377, + 40, + 51, + false, + "Zr", + 0); // Not a GT Inherited Material + public final Material NIOBIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Niobium); + public final Material MOLYBDENUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Molybdenum); + + public final Material RUTHENIUM = new Material( + "Ruthenium", + MaterialState.SOLID, + new short[] { 220, 220, 220 }, + 2250, + 3900, + 44, + 57, + false, + "Ru", + 0); // Not a GT Inherited Material + public final Material RHODIUM = new Material( + "Rhodium", + MaterialState.SOLID, + new short[] { 220, 220, 220 }, + 1966, + 3727, + 45, + 58, + false, + "Rh", + 0); // Not a GT Inherited Material + public final Material AMERICIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Americium); + public final Material TECHNETIUM = new Material( + "Technetium", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + new short[] { 220, 220, 220 }, + 2200, + 4877, + 43, + 55, + false, + "Tc", + 2); // Not a GT Inherited Material + public final Material NEPTUNIUM = new Material( + "Neptunium", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + new short[] { 200, 220, 205 }, + 640, + 3902, + 93, + 144, + false, + "Np", + 2); // Not a GT Inherited Material + + public final Material PALLADIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Palladium); + public final Material SILVER = MaterialUtils.generateMaterialFromGtENUM(Materials.Silver); + public final Material CADMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Cadmium); + public final Material INDIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Indium); + public final Material TIN = MaterialUtils.generateMaterialFromGtENUM(Materials.Tin); + public final Material ANTIMONY = MaterialUtils.generateMaterialFromGtENUM(Materials.Antimony); + public final Material TELLURIUM = new Material( + "Tellurium", + MaterialState.SOLID, + new short[] { 210, 210, 210 }, + 449, + 989, + 52, + 76, + false, + "Te", + 0); // Not a GT Inherited Material + public final Material IODINE = new Material( + "Iodine", + MaterialState.SOLID, + TextureSet.SET_SHINY, + new short[] { 96, 96, 96 }, + 114, + 184, + 53, + 74, + false, + "I", + 0); // Not a GT Inherited Material + public final Material XENON = new Material( + "Xenon", + MaterialState.PURE_GAS, + new short[] { 5, 105, 210 }, + -111, + -108, + 54, + 77, + false, + "Xe", + 0); // Not a GT Inherited Material + public final Material CAESIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Caesium); + public final Material BARIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Barium); + public final Material LANTHANUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Lanthanum); + public final Material CERIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Cerium); + public final Material PRASEODYMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Praseodymium); + public final Material NEODYMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Neodymium); + public final Material PROMETHIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Promethium); + public final Material SAMARIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Samarium); + public final Material EUROPIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Europium); + public final Material GADOLINIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Gadolinium); + public final Material TERBIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Terbium); + public final Material DYSPROSIUM = new Material( + "Dysprosium", + MaterialState.SOLID, + new short[] { 180, 180, 180 }, + 1412, + 2562, + 66, + 97, + false, + "Dy", + 0); // Not a GT Inherited Material + public final Material HOLMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Holmium); + public final Material ERBIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Erbium); + public final Material THULIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Thulium); + public final Material YTTERBIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Ytterbium); + public final Material LUTETIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Lutetium); + public final Material HAFNIUM = new Material( + "Hafnium", + MaterialState.SOLID, + new short[] { 128, 128, 128 }, + 2150, + 5400, + 72, + 106, + false, + "Hf", + 0); // Not a GT Inherited Material + + // Second 50 elements + public final Material TANTALUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Tantalum); + public final Material TUNGSTEN = MaterialUtils.generateMaterialFromGtENUM(Materials.Tungsten); + public final Material RHENIUM = new Material( + "Rhenium", + MaterialState.SOLID, + new short[] { 150, 150, 150 }, + 3180, + 3627, + 75, + 111, + false, + "Re", + 0); // Not a GT Inherited Material + public final Material OSMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Osmium); + public final Material IRIDIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Iridium); + public final Material PLATINUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Platinum); + public final Material GOLD = MaterialUtils.generateMaterialFromGtENUM(Materials.Gold); + public final Material MERCURY = MaterialUtils.generateMaterialFromGtENUM(Materials.Mercury); // Mercury + public final Material THALLIUM = new Material( + "Thallium", + MaterialState.SOLID, + new short[] { 175, 175, 175 }, + 304, + 1457, + 81, + 123, + false, + "Tl", + 0); // Not a GT Inherited Material + public final Material LEAD = MaterialUtils.generateMaterialFromGtENUM(Materials.Lead); + public final Material BISMUTH = MaterialUtils.generateMaterialFromGtENUM(Materials.Bismuth); + public final Material POLONIUM = new Material( + "Polonium", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + new short[] { 180, 170, 180 }, + 254, + 962, + 84, + 125, + false, + "Po", + 1); // Not a GT Inherited Material + + public final Material RADON = MaterialUtils.generateMaterialFromGtENUM(Materials.Radon); + + public final Material RADIUM = new Material( + "Radium", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + new short[] { 165, 165, 165 }, + 700, + 1737, + 88, + 138, + false, + "Ra", + 1); // Not a GT Inherited Material + + public final Material THORIUM = new Material( + "Thorium", + MaterialState.SOLID, + Materials.Thorium.mRGBa, + Materials.Thorium.mMeltingPoint, + Materials.Thorium.mBlastFurnaceTemp, + 90, + 142, + false, + StringUtils.superscript("Th"), + 1); + public final Material PROTACTINIUM = new Material( + "Protactinium", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + new short[] { 190, 150, 170 }, + 1568, + 4027, + 91, + 140, + false, + "Pa", + 1); // Not a GT Inherited Material + public final Material URANIUM238 = MaterialUtils.generateMaterialFromGtENUM(Materials.Uranium); + public final Material URANIUM235 = MaterialUtils.generateMaterialFromGtENUM(Materials.Uranium235); + public final Material PLUTONIUM241 = MaterialUtils.generateMaterialFromGtENUM(Materials.Plutonium241); + public final Material CURIUM = new Material( + "Curium", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + new short[] { 175, 85, 110 }, + 1340, + 3110, + 96, + 151, + false, + "Cm", + 3); // Not a GT Inherited Material + + public final Material CALIFORNIUM = new Material( + "Californium", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + new short[] { 85, 110, 205 }, + 899, + 1472, + 98, + 153, + false, + "Cf", + 4); // Not a GT Inherited Material + + public final Material FERMIUM = new Material( + "Fermium", + MaterialState.LIQUID, + TextureSets.NUCLEAR.get(), + new short[] { 75, 90, 25 }, + 1527, + 3850, + 100, + 157, + false, + "Fm", + 5); // Not a GT Inherited Material //Boiling Point is made up + + // Misc + public final Material AER = MaterialUtils.generateMaterialFromGtENUM(Materials.InfusedAir, TextureSets.GEM_A.get()); + public final Material IGNIS = MaterialUtils + .generateMaterialFromGtENUM(Materials.InfusedFire, TextureSets.GEM_A.get()); + public final Material TERRA = MaterialUtils + .generateMaterialFromGtENUM(Materials.InfusedEarth, TextureSets.GEM_A.get()); + public final Material AQUA = MaterialUtils + .generateMaterialFromGtENUM(Materials.InfusedWater, TextureSets.GEM_A.get()); + public final Material PERDITIO = MaterialUtils + .generateMaterialFromGtENUM(Materials.InfusedEntropy, TextureSets.GEM_A.get()); + public final Material ORDO = MaterialUtils + .generateMaterialFromGtENUM(Materials.InfusedOrder, TextureSets.GEM_A.get()); + + public final Material NAQUADAH = MaterialUtils.generateMaterialFromGtENUM(Materials.Naquadah); + public final Material NAQUADAH_ENRICHED = MaterialUtils.generateMaterialFromGtENUM(Materials.NaquadahEnriched); + public final Material NAQUADRIA = MaterialUtils.generateMaterialFromGtENUM(Materials.Naquadria); + public final Material TRINIUM; + public final Material TRINIUM_REFINED; + // https://github.com/Blood-Asp/GT5-Unofficial/issues/609 + + // Custom Isotopes + public final Material LITHIUM7 = new Material( + "Lithium 7", + MaterialState.SOLID, + TextureSet.SET_SHINY, + Materials.Lithium.mRGBa, + Materials.Lithium.mMeltingPoint, + Materials.Lithium.mBlastFurnaceTemp, + Materials.Lithium.getProtons(), + Materials.Lithium.getNeutrons(), + Materials.Lithium.mBlastFurnaceRequired, + StringUtils.superscript("7Li"), + 0, + false); // Not a GT Inherited Material + public final Material URANIUM232 = new Material( + "Uranium 232", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + new short[] { 88, 220, 103, 0 }, + 1132, + 4131, + 92, + 140, + false, + StringUtils.superscript("232U"), + 4); // Not a GT Inherited Material + public final Material URANIUM233 = new Material( + "Uranium 233", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + new short[] { 73, 220, 83, 0 }, + 1132, + 4131, + 92, + 141, + false, + StringUtils.superscript("233U"), + 2); // Not a GT Inherited Material + public final Material THORIUM232 = new Material( + "Thorium 232", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + new short[] { 15, 60, 15, 0 }, + Materials.Thorium.mMeltingPoint, + Materials.Thorium.mBlastFurnaceTemp, + 90, + 142, + false, + StringUtils.superscript("232Th"), + 1, + true); // Not a GT Inherited Material + + // RTG Fuels + public final Material PLUTONIUM238 = new Material( + "Plutonium-238", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + Materials.Plutonium241.mDurability, + Materials.Plutonium241.mRGBa, + Materials.Plutonium241.mMeltingPoint, + Materials.Plutonium241.mBlastFurnaceTemp, + 94, + 144, + false, + StringUtils.superscript("238Pu"), + 2, + false); // Not a GT Inherited Material + + public final Material MAGIC = MaterialUtils + .generateMaterialFromGtENUM(Materials.Magic, new short[] { 10, 185, 140 }); + public final Material THAUMIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Thaumium); + + static { + Logger.MATERIALS("Initialising Base Elements."); + } + + private static final MaterialsElements INSTANCE = new MaterialsElements(); + + public MaterialsElements() { + // GTNH Trinium Handling + TRINIUM = MaterialUtils.generateMaterialFromGtENUM(Materials.Trinium); + TRINIUM_REFINED = TRINIUM; + } + + public static MaterialsElements getInstance() { + return INSTANCE; + } + + public static class STANDALONE { + + public static final Material CELESTIAL_TUNGSTEN = new Material( + "Celestial Tungsten", + MaterialState.SOLID, + TextureSets.REFINED.get(), + new short[] { 50, 50, 50, 2 }, + INSTANCE.TUNGSTEN.getMeltingPointC() + 6500, + INSTANCE.TUNGSTEN.getBoilingPointC() + 7500, + 160, + 101, + true, + "✦◆✦", + 0); // Not a GT Inherited Material + public static final Material ASTRAL_TITANIUM = new Material( + "Astral Titanium", + MaterialState.SOLID, + TextureSets.REFINED.get(), + new short[] { 220, 160, 240, 2 }, + INSTANCE.TITANIUM.getMeltingPointC() + 7500, + INSTANCE.TITANIUM.getBoilingPointC() + 7500, + 145, + 133, + true, + "✧◇✧", + 0); // Not a GT Inherited Material + public static final Material CHRONOMATIC_GLASS = new Material( + "Chromatic Glass", + MaterialState.SOLID, + new short[] { 255, 255, 255, 3 }, + 9200, + 17550, + 40, + 51, + false, + "⌘☯𓍰 𓍱 𓍲 𓍳 𓍴 𓍵 𓍶 𓍷 𓍸 ☯⌘ ", + 0); // Not a GT Inherited Material + public static final Material ADVANCED_NITINOL = new Material( + "Advanced Nitinol", + MaterialState.SOLID, + TextureSets.ENRICHED.get(), + MaterialsAlloy.NITINOL_60.getRGB(), + 8400, + 14377, + 40, + 51, + true, + StringUtils.subscript("⚷⚙⚷ Ni4Ti6"), + 0); // Not a GT Inherited Material + public static final Material HYPOGEN = new Material( + "Hypogen", + MaterialState.SOLID, + TextureSets.NUCLEAR.get(), + new short[] { 220, 120, 75, 2 }, + 11255, + 19377, + 240, + 251, + true, + "Hy⚶", + 0); // Not a GT Inherited Material + public static final Material RHUGNOR = new Material( + "Rhugnor", + MaterialState.SOLID, + TextureSets.ENRICHED.get(), + new short[] { 190, 0, 255, 0 }, + 8750, + 14757, + 184, + 142, + true, + "Fs⚶", + 0); // Not a GT Inherited Material //funeris + public static final Material FORCE = new Material( + "Force", + MaterialState.SOLID, + TextureSets.ENRICHED.get(), + new short[] { 250, 250, 20, 0 }, + 4550, + 6830, + 63, + 81, + true, + "Fc⚙", + 0); // Not a GT Inherited Material + + // Runescape materials + public static final Material BLACK_METAL = new Material( + "Black Metal", + MaterialState.SOLID, + TextureSet.SET_METALLIC, + new short[] { 5, 5, 5 }, + 2350, + 4650, + 24, + 17, + false, + "҈", + 0, + new MaterialStack[] { new MaterialStack(getInstance().LEAD, 15), + new MaterialStack(getInstance().MANGANESE, 25), new MaterialStack(getInstance().CARBON, 60) }); // Not + // a + // GT + // Inherited + // Material + public static final Material WHITE_METAL = new Material( + "White Metal", + MaterialState.SOLID, + TextureSet.SET_METALLIC, + new short[] { 255, 255, 255 }, + 4560, + 7580, + 35, + 41, + false, + "҉", + 0, + new MaterialStack[] { new MaterialStack(getInstance().COPPER, 5), + new MaterialStack(getInstance().ANTIMONY, 10), new MaterialStack(getInstance().PLATINUM, 10), + new MaterialStack(getInstance().TIN, 75) }); // Not a GT Inherited Material + + public static final Material GRANITE = new Material( + "Ancient Granite", + MaterialState.SOLID, + TextureSet.SET_SAND, + new short[] { 107, 107, 107 }, + 500, + 2000, + 16, + 12, + false, + "«»", + 0, + false, + new MaterialStack[] { new MaterialStack(getInstance().OXYGEN, 16), + new MaterialStack(getInstance().IRON, 10), new MaterialStack(getInstance().SILICONDIOXIDE, 10), + new MaterialStack(getInstance().ALUMINIUMOXIDE, 6), new MaterialStack(getInstance().POTASSIUM, 6), + new MaterialStack(getInstance().CALCIUM, 4), new MaterialStack(getInstance().SODIUM, 4), + new MaterialStack(getInstance().YTTERBIUM, 2) }); // Not + // a + // GT + // Inherited + // Material + + public static final Material RUNITE = new Material( + "Runite", + MaterialState.SOLID, + TextureSet.SET_FINE, + new short[] { 60, 200, 190 }, + 6750, + 11550, + 73, + 87, + true, + "Rt*", + 0); // Not a GT Inherited Material + public static final Material DRAGON_METAL = new Material( + "Dragonblood", + MaterialState.SOLID, + TextureSet.SET_SHINY, + new short[] { 220, 40, 20, 2 }, + 10160, + 17850, + 96, + 105, + true, + "۞", + 0); // Not a GT Inherited Material + } +} diff --git a/src/main/java/gtPlusPlus/core/material/MaterialsOres.java b/src/main/java/gtPlusPlus/core/material/MaterialsOres.java new file mode 100644 index 0000000000..d78b88d1c7 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/material/MaterialsOres.java @@ -0,0 +1,778 @@ +package gtPlusPlus.core.material; + +import gregtech.api.enums.TextureSet; +import gtPlusPlus.core.client.CustomTextureSet.TextureSets; +import gtPlusPlus.core.material.state.MaterialState; + +public final class MaterialsOres { + + public static final Material AGARDITE_CD = new Material( + "Agardite (Cd)", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 170, 188, 33, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // (CdCa)Cu7(AsO2)4(O2H)5·3H2O + new MaterialStack(MaterialsElements.getInstance().CADMIUM, 1), + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 1), + new MaterialStack(MaterialsElements.getInstance().COPPER, 7), + new MaterialStack(MaterialsElements.getInstance().ARSENIC, 4), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 21), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 11) }); + + public static final Material AGARDITE_LA = new Material( + "Agardite (La)", // Material Name + MaterialState.ORE, // State + TextureSet.SET_FINE, // Texture Set + new short[] { 206, 232, 9, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // (LaCa)Cu5(AsO6)2(OH)4·3H2O + new MaterialStack(MaterialsElements.getInstance().LANTHANUM, 1), + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 1), + new MaterialStack(MaterialsElements.getInstance().COPPER, 5), + new MaterialStack(MaterialsElements.getInstance().ARSENIC, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 19), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 10) }); + + public static final Material AGARDITE_ND = new Material( + "Agardite (Nd)", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 225, 244, 78, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // (NdCa)Cu6(As3O3)2(O2H)6·3H2O + new MaterialStack(MaterialsElements.getInstance().NEODYMIUM, 1), + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 1), + new MaterialStack(MaterialsElements.getInstance().COPPER, 6), + new MaterialStack(MaterialsElements.getInstance().ARSENIC, 6), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 21), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 12) }); + + public static final Material AGARDITE_Y = new Material( + "Agardite (Y)", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 210, 232, 44, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // (YCa)Cu5(As2O4)3(OH)6·3H2O + new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 1), + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 1), + new MaterialStack(MaterialsElements.getInstance().COPPER, 5), + new MaterialStack(MaterialsElements.getInstance().ARSENIC, 6), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 21), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 12) }); + + // Alburnite + // Ag8GeTe2S4 + public static final Material ALBURNITE = new Material( + "Alburnite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 16, 5, 105, 0 }, // Material Colour + -1, + -1, + -1, + -1, + 0, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().GOLD, 8), + new MaterialStack(MaterialsElements.getInstance().GERMANIUM, 1), + new MaterialStack(MaterialsElements.getInstance().TELLURIUM, 2), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 4) }); + + public static final Material CERITE = new Material( + "Cerite", // Material Name + MaterialState.ORE, // State + TextureSets.REFINED.get(), // Texture Set + new short[] { 68, 13, 0, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // (Ce,La,Ca)9(Mg,Fe+3)(SiO4)6(SiO3OH)(OH)3 + new MaterialStack(MaterialsElements.getInstance().CERIUM, 9), + new MaterialStack(MaterialsElements.getInstance().LANTHANUM, 9), + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 9), + new MaterialStack(MaterialsElements.getInstance().MAGNESIUM, 3), + new MaterialStack(MaterialsElements.getInstance().IRON, 3), + new MaterialStack(MaterialsElements.getInstance().SILICON, 7), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 20), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 4) }); + + // Comancheite + // Hg55N24(NH2,OH)4(Cl,Br)34 + public static final Material COMANCHEITE = new Material( + "Comancheite", // Material Name + MaterialState.ORE, // State + TextureSets.REFINED.get(), // Texture Set + new short[] { 65, 205, 105, 0 }, // Material Colour + -1, + -1, + -1, + -1, + 0, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().MERCURY, 54 / 4), + new MaterialStack(MaterialsElements.getInstance().NITROGEN, 28 / 4), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 12 / 4), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 8 / 4), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 34 / 4), + new MaterialStack(MaterialsElements.getInstance().BROMINE, 34 / 4) }); + + public static final Material CROCROITE = new Material( + "Crocoite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_GEM_VERTICAL, // Texture Set + new short[] { 255, 143, 84, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().LEAD, 2), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 3), + new MaterialStack(MaterialsElements.getInstance().CAESIUM, 1), }); + + public static final Material CRYOLITE = new Material( + "Cryolite (F)", // Material Name + MaterialState.ORE, // State + TextureSet.SET_SHINY, // Texture Set + new short[] { 205, 205, 255, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().SODIUM, 3), + new MaterialStack(MaterialsElements.getInstance().ALUMINIUM, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 6) }); + + // Demicheleite-(Br) + // BiSBr + public static final Material DEMICHELEITE_BR = new Material( + "Demicheleite (Br)", // Material Name + MaterialState.ORE, // State + TextureSet.SET_SHINY, // Texture Set + new short[] { 165, 75, 75, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().BISMUTH, 13), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 11), + new MaterialStack(MaterialsElements.getInstance().BROMINE, 1) }); + + public static final Material FLORENCITE = new Material( + "Florencite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 249, 249, 124, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // SmAl3(PO4)2(OH)6 + new MaterialStack(MaterialsElements.getInstance().SAMARIUM, 1), + new MaterialStack(MaterialsElements.getInstance().ALUMINIUM, 3), + new MaterialStack(MaterialsElements.getInstance().PHOSPHORUS, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 10), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 6) }); + + public static final Material FLUORCAPHITE = new Material( + "Fluorcaphite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_FINE, // Texture Set + new short[] { 255, 255, 30, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // (Ca,Sr,Ce,Na)5(PO4)3F + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 5), + new MaterialStack(MaterialMisc.STRONTIUM_OXIDE, 5), + new MaterialStack(MaterialsElements.getInstance().CERIUM, 5), + new MaterialStack(MaterialsElements.getInstance().SODIUM, 5), + new MaterialStack(MaterialsElements.getInstance().PHOSPHORUS, 3), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 12), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 6), }); + + // Gadolinite_Ce + public static final Material GADOLINITE_CE = new Material( + "Gadolinite (Ce)", // Material Name + MaterialState.ORE, // State + TextureSets.REFINED.get(), // Texture Set + new short[] { 15, 159, 59, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().CERIUM, 4), + new MaterialStack(MaterialsElements.getInstance().ERBIUM, 2), + new MaterialStack(MaterialsElements.getInstance().LANTHANUM, 2), + new MaterialStack(MaterialsElements.getInstance().NEODYMIUM, 2), + new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 2), + new MaterialStack(MaterialsElements.getInstance().GADOLINIUM, 1), + new MaterialStack(MaterialsElements.getInstance().BERYLLIUM, 2), + new MaterialStack(MaterialsElements.getInstance().SILICON, 7), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 14), }); + + // Gadolinite_Y + public static final Material GADOLINITE_Y = new Material( + "Gadolinite (Y)", // Material Name + MaterialState.ORE, // State + TextureSets.REFINED.get(), // Texture Set + new short[] { 35, 189, 99, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().CERIUM, 2), + new MaterialStack(MaterialsElements.getInstance().ERBIUM, 2), + new MaterialStack(MaterialsElements.getInstance().LANTHANUM, 2), + new MaterialStack(MaterialsElements.getInstance().NEODYMIUM, 2), + new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 4), + new MaterialStack(MaterialsElements.getInstance().GADOLINIUM, 2), + new MaterialStack(MaterialsElements.getInstance().BERYLLIUM, 3), + new MaterialStack(MaterialsElements.getInstance().SILICON, 4), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 9), }); + + public static final Material GEIKIELITE = new Material( + "Geikielite", // Material Name + MaterialState.ORE, // State + TextureSets.GEM_A.get(), // Texture Set + new short[] { 187, 193, 204, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().MAGNESIUM, 1), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 3) }); + + public static final Material GREENOCKITE = new Material( + "Greenockite", // Material Name + MaterialState.ORE, // State + TextureSets.GEM_A.get(), // Texture Set + new short[] { 110, 193, 25, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().CADMIUM, 1), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 1), }); + + public static final Material HIBONITE = new Material( + "Hibonite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 58, 31, 0, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // ((Ca,Ce)(Al,Ti,Mg)12O19) + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 1), + new MaterialStack(MaterialsElements.getInstance().CERIUM, 1), + new MaterialStack(MaterialsElements.getInstance().ALUMINIUM, 12), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 12), + new MaterialStack(MaterialsElements.getInstance().MAGNESIUM, 12), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 19), }); + + // Honeaite + // Au3TlTe2 + public static final Material HONEAITE = new Material( + "Honeaite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_FINE, // Texture Set + new short[] { 165, 165, 5, 0 }, // Material Colour + -1, + -1, + -1, + -1, + 0, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().GOLD, 3), + new MaterialStack(MaterialsElements.getInstance().THALLIUM, 1), + new MaterialStack(MaterialsElements.getInstance().TELLURIUM, 2) }); + + // Irarsite + // (Ir,Ru,Rh,Pt)AsS + public static final Material IRARSITE = new Material( + "Irarsite", // Material Name + MaterialState.ORE, // State + TextureSets.ENRICHED.get(), // Texture Set + new short[] { 125, 105, 105, 0 }, // Material Colour + -1, + -1, + -1, + -1, + 0, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().IRIDIUM, 1), + new MaterialStack(MaterialsElements.getInstance().RUTHENIUM, 1), + new MaterialStack(MaterialsElements.getInstance().RHODIUM, 1), + new MaterialStack(MaterialsElements.getInstance().PLATINUM, 1), + new MaterialStack(MaterialsElements.getInstance().ARSENIC, 1), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 1) }); + + // Kashinite + // (Ir,Rh)2S3 + public static final Material KASHINITE = new Material( + "Kashinite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_SHINY, // Texture Set + new short[] { 75, 105, 75, 0 }, // Material Colour + -1, + -1, + -1, + -1, + 0, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().IRIDIUM, 2), + new MaterialStack(MaterialsElements.getInstance().RHODIUM, 2), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 3) }); + + // Tl(Cl,Br) + public static final Material LAFOSSAITE = new Material( + "Lafossaite", // Material Name + MaterialState.ORE, // State + TextureSets.REFINED.get(), // Texture Set + new short[] { 165, 105, 205, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 1), + new MaterialStack(MaterialsElements.getInstance().BROMINE, 1), + new MaterialStack(MaterialsElements.getInstance().THALLIUM, 1) }); + + public static final Material LANTHANITE_CE = new Material( + "Lanthanite (Ce)", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 186, 113, 179, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // (Ce)2(CO3)3·8(H2O) + new MaterialStack(MaterialsElements.getInstance().CERIUM, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 3), + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 3), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 1), }); + + public static final Material LANTHANITE_LA = new Material( + "Lanthanite (La)", // Material Name + MaterialState.ORE, // State + TextureSets.REFINED.get(), // Texture Set + new short[] { 219, 160, 214, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // (La)2(CO3)3·8(H2O) + new MaterialStack(MaterialsElements.getInstance().LANTHANUM, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 3), + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 3), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 1), }); + + public static final Material LANTHANITE_ND = new Material( + "Lanthanite (Nd)", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 153, 76, 145, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // (Nd)2(CO3)3·8(H2O) + new MaterialStack(MaterialsElements.getInstance().NEODYMIUM, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 3), + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 3), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 1), }); + + // Iodine Source + public static final Material LAUTARITE = new Material( + "Lautarite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_FINE, // Texture Set + new short[] { 165, 105, 205, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 1), + new MaterialStack(MaterialsElements.getInstance().IODINE, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 6) }); + + public static final Material LEPERSONNITE = new Material( + "Lepersonnite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_EMERALD, // Texture Set + new short[] { 175, 175, 20, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().CALCIUM, 1), + new MaterialStack(MaterialsElements.getInstance().YTTERBIUM, 3), + new MaterialStack(MaterialsElements.getInstance().GADOLINIUM, 2), + new MaterialStack(MaterialsElements.getInstance().DYSPROSIUM, 2), + new MaterialStack(MaterialsElements.getInstance().URANIUM235, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 29), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 24) }); + + // Miessiite + // Pd11Te2Se2 + public static final Material MIESSIITE = new Material( + "Miessiite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_FINE, // Texture Set + new short[] { 75, 75, 75, 0 }, // Material Colour + -1, + -1, + -1, + -1, + 0, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().PALLADIUM, 11), + new MaterialStack(MaterialsElements.getInstance().TELLURIUM, 2), + new MaterialStack(MaterialsElements.getInstance().SELENIUM, 2) }); + + public static final Material NICHROMITE = new Material( + "Nichromite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 22, 19, 19, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().NICKEL, 1), + new MaterialStack(MaterialsElements.getInstance().COBALT, 1), + new MaterialStack(MaterialsElements.getInstance().IRON, 3), + new MaterialStack(MaterialsElements.getInstance().ALUMINIUM, 2), + new MaterialStack(MaterialsElements.getInstance().CHROMIUM, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 8) }); + + // Perroudite + // Hg5Ag4S5(I,Br)2Cl2 + public static final Material PERROUDITE = new Material( + "Perroudite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 77, 165, 174, 0 }, // Material Colour + -1, + -1, + -1, + -1, + 0, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().SULFUR, 5), + new MaterialStack(MaterialsElements.getInstance().SILVER, 4), + new MaterialStack(MaterialsElements.getInstance().IODINE, 2), + new MaterialStack(MaterialsElements.getInstance().MERCURY, 5), + new MaterialStack(MaterialsElements.getInstance().BROMINE, 2), + new MaterialStack(MaterialsElements.getInstance().CHLORINE, 2) }); + + public static final Material POLYCRASE = new Material( + "Polycrase", // Material Name + MaterialState.ORE, // State + TextureSet.SET_ROUGH, // Texture Set + new short[] { 51, 0, 11, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 1), + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 1), + new MaterialStack(MaterialsElements.getInstance().CERIUM, 1), + new MaterialStack(MaterialsElements.getInstance().URANIUM235, 1), + new MaterialStack(MaterialsElements.getInstance().THORIUM, 1), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 2), + new MaterialStack(MaterialsElements.getInstance().NIOBIUM, 2), + new MaterialStack(MaterialsElements.getInstance().TANTALUM, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 6) }); + + // Radiobarite + // Radium, Barium, Barite? + public static final Material RADIOBARITE = new Material( + "Barite (Ra)", // Material Name + MaterialState.ORE, // State + TextureSet.SET_FLINT, // Texture Set + new short[] { 205, 205, 205, 0 }, // Material Colour + -1, + -1, + -1, + -1, + 0, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().BARIUM, 32), + new MaterialStack(MaterialsElements.getInstance().RADIUM, 1), + new MaterialStack(MaterialsElements.getInstance().SULFUR, 16), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 15) }); + + // Samarskite_Y + public static final Material SAMARSKITE_Y = new Material( + "Samarskite (Y)", // Material Name + MaterialState.ORE, // State + TextureSets.ENRICHED.get(), // Texture Set + new short[] { 65, 163, 164, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 2), // Y not YT/YB + new MaterialStack(MaterialsElements.getInstance().IRON, 10), + new MaterialStack(MaterialsElements.getInstance().URANIUM235, 2), + new MaterialStack(MaterialsElements.getInstance().THORIUM, 3), + new MaterialStack(MaterialsElements.getInstance().NIOBIUM, 2), + new MaterialStack(MaterialsElements.getInstance().TANTALUM, 3) }); + + // Samarskite_YB + public static final Material SAMARSKITE_YB = new Material( + "Samarskite (Yb)", // Material Name + MaterialState.ORE, // State + TextureSets.ENRICHED.get(), // Texture Set + new short[] { 95, 193, 194, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().YTTERBIUM, 2), // Y not YT/YB + new MaterialStack(MaterialsElements.getInstance().IRON, 9), + new MaterialStack(MaterialsElements.getInstance().URANIUM235, 3), + new MaterialStack(MaterialsElements.getInstance().THORIUM, 2), + new MaterialStack(MaterialsElements.getInstance().NIOBIUM, 3), + new MaterialStack(MaterialsElements.getInstance().TANTALUM, 2) }); + + public static final Material TITANITE = new Material( + "Titanite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 184, 198, 105, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().CALCIUM, 2), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 2), + new MaterialStack(MaterialsElements.getInstance().SILICON, 2), + new MaterialStack(MaterialsElements.getInstance().THORIUM, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 10) }); + + public static final Material XENOTIME = new Material( + "Xenotime", // Material Name + MaterialState.ORE, // State + TextureSet.SET_OPAL, // Texture Set + new short[] { 235, 89, 199, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 2), + new MaterialStack(MaterialsElements.getInstance().YTTERBIUM, 2), + new MaterialStack(MaterialsElements.getInstance().ERBIUM, 2), + new MaterialStack(MaterialsElements.getInstance().EUROPIUM, 1), + new MaterialStack(MaterialsElements.getInstance().PHOSPHORUS, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 8) }); + + public static final Material YTTRIAITE = new Material( // TODO + "Yttriaite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_METALLIC, // Texture Set + new short[] { 255, 143, 84, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 1), // Y not YT/YB + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 3), + new MaterialStack(MaterialsElements.getInstance().IRON, 4), + new MaterialStack(MaterialsElements.getInstance().TIN, 1), + new MaterialStack(MaterialsElements.getInstance().NITROGEN, 2) }); + + public static final Material YTTRIALITE = new Material( + "Yttrialite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_RUBY, // Texture Set + new short[] { 35, 189, 99, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 2), + new MaterialStack(MaterialsElements.getInstance().THORIUM, 2), + new MaterialStack(MaterialsElements.getInstance().SILICON, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 7), }); + + public static final Material YTTROCERITE = new Material( + "Yttrocerite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_DIAMOND, // Texture Set + new short[] { 35, 19, 199, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().CERIUM, 1), + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 5), + new MaterialStack(MaterialsElements.getInstance().YTTRIUM, 1), }); + + public static final Material ZIMBABWEITE = new Material( + "Zimbabweite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_FINE, // Texture Set + new short[] { 193, 187, 131, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().CALCIUM, 2), + new MaterialStack(MaterialsElements.getInstance().POTASSIUM, 2), + new MaterialStack(MaterialsElements.getInstance().LEAD, 1), + new MaterialStack(MaterialsElements.getInstance().ARSENIC, 4), + new MaterialStack(MaterialsElements.getInstance().NIOBIUM, 4), + new MaterialStack(MaterialsElements.getInstance().TANTALUM, 4), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 4), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 18) }); + + public static final Material ZIRCON = new Material( + "Zircon", // Material Name + MaterialState.ORE, // State + TextureSets.GEM_A.get(), // Texture Set + new short[] { 195, 19, 19, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().ZIRCONIUM, 1), + new MaterialStack(MaterialsElements.getInstance().SILICON, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 4), }); + + public static final Material ZIRCONILITE = new Material( + "Zirconolite", // Material Name + MaterialState.ORE, // State + TextureSet.SET_FINE, // Texture Set + new short[] { 45, 26, 0, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().CALCIUM, 2), + new MaterialStack(MaterialsElements.getInstance().ZIRCONIUM, 2), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 4), + new MaterialStack(MaterialsElements.getInstance().CERIUM, 1), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 14) }); + + public static final Material ZIRCOPHYLLITE = new Material( + "Zircophyllite", // Material Name + MaterialState.ORE, // State + TextureSets.REFINED.get(), // Texture Set + new short[] { 30, 0, 6, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().POTASSIUM, 3), + new MaterialStack(MaterialsElements.getInstance().SODIUM, 3), + new MaterialStack(MaterialsElements.getInstance().MANGANESE, 7), + new MaterialStack(MaterialsElements.getInstance().IRON, 7), + new MaterialStack(MaterialsElements.getInstance().ZIRCONIUM, 2), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 2), + new MaterialStack(MaterialsElements.getInstance().NIOBIUM, 2), + new MaterialStack(MaterialsElements.getInstance().SILICON, 8), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 13), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 7), }); + + public static final Material ZIRKELITE = new Material( + "Zirkelite", // Material Name + MaterialState.ORE, // State + TextureSets.GEM_A.get(), // Texture Set + new short[] { 229, 208, 48, 0 }, // Material Colour + -1, + -1, + -1, + -1, + -1, // Radiation + new MaterialStack[] { // (Ca,Th,Ce)Zr(Ti,Nb)2O7 + new MaterialStack(MaterialsElements.getInstance().CALCIUM, 1), + new MaterialStack(MaterialsElements.getInstance().THORIUM, 1), + new MaterialStack(MaterialsElements.getInstance().CERIUM, 1), + new MaterialStack(MaterialsElements.getInstance().ZIRCONIUM, 1), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 2), + new MaterialStack(MaterialsElements.getInstance().NIOBIUM, 2), + new MaterialStack(MaterialsElements.getInstance().OXYGEN, 7) }); + + public static final Material DEEP_EARTH_REACTOR_FUEL_DEPOSIT = new Material( + "Radioactive Mineral Mix", // Material Name + MaterialState.ORE, // State + TextureSets.NUCLEAR.get(), // Texture Set + null, // Material Colour + -1, + -1, + -1, + -1, + 4, // Radiation + new MaterialStack[] { // Na3AlF6 + new MaterialStack(MaterialsElements.getInstance().RADON, 2), + new MaterialStack(MaterialsElements.getInstance().RADIUM, 1), + new MaterialStack(MaterialsElements.getInstance().URANIUM235, 1), + new MaterialStack(MaterialsElements.getInstance().URANIUM238, 10), + new MaterialStack(MaterialsElements.getInstance().THORIUM, 25), + new MaterialStack(MaterialsElements.getInstance().THORIUM232, 4), new MaterialStack(FLUORCAPHITE, 6), + new MaterialStack(SAMARSKITE_Y, 8), new MaterialStack(TITANITE, 4) }); +} diff --git a/src/main/java/gtPlusPlus/core/material/MaterialsOther.java b/src/main/java/gtPlusPlus/core/material/MaterialsOther.java new file mode 100644 index 0000000000..38a2ce73c1 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/material/MaterialsOther.java @@ -0,0 +1,42 @@ +package gtPlusPlus.core.material; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.TextureSet; +import gtPlusPlus.core.util.minecraft.MaterialUtils; + +public class MaterialsOther { + + // Soul Sand + public static final Material SOULSAND = MaterialUtils.generateMaterialFromGtENUM(Materials.SoulSand); + + // Redstone + public static final Material REDSTONE = MaterialUtils.generateMaterialFromGtENUM(Materials.Redstone); + + // Glowstone Dust + public static final Material GLOWSTONE = MaterialUtils.generateMaterialFromGtENUM(Materials.Glowstone); + + // Enderpearl + public static final Material ENDERPEARL = MaterialUtils.generateMaterialFromGtENUM(Materials.EnderPearl); + + // Raw Flesh + public static final Material MEAT = MaterialUtils.generateMaterialFromGtENUM(Materials.MeatRaw); + + // Clay + public static final Material CLAY = MaterialUtils.generateMaterialFromGtENUM(Materials.Clay); + + // Wrought Iron + public static final Material WROUGHT_IRON = MaterialUtils.generateMaterialFromGtENUM(Materials.WroughtIron); + + // PTFE + public static final Material PTFE = MaterialUtils + .generateMaterialFromGtENUM(MaterialUtils.getMaterial("Polytetrafluoroethylene", "Plastic")); + + // Plastic + public static final Material PLASTIC = MaterialUtils + .generateMaterialFromGtENUM(MaterialUtils.getMaterial("Plastic", "Rubber")); + + static { + MEAT.setTextureSet(TextureSet.SET_ROUGH); + CLAY.setTextureSet(TextureSet.SET_ROUGH); + } +} diff --git a/src/main/java/gtPlusPlus/core/material/NONMATERIAL.java b/src/main/java/gtPlusPlus/core/material/NONMATERIAL.java deleted file mode 100644 index 5e084b84bf..0000000000 --- a/src/main/java/gtPlusPlus/core/material/NONMATERIAL.java +++ /dev/null @@ -1,42 +0,0 @@ -package gtPlusPlus.core.material; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.TextureSet; -import gtPlusPlus.core.util.minecraft.MaterialUtils; - -public class NONMATERIAL { - - // Soul Sand - public static final Material SOULSAND = MaterialUtils.generateMaterialFromGtENUM(Materials.SoulSand); - - // Redstone - public static final Material REDSTONE = MaterialUtils.generateMaterialFromGtENUM(Materials.Redstone); - - // Glowstone Dust - public static final Material GLOWSTONE = MaterialUtils.generateMaterialFromGtENUM(Materials.Glowstone); - - // Enderpearl - public static final Material ENDERPEARL = MaterialUtils.generateMaterialFromGtENUM(Materials.EnderPearl); - - // Raw Flesh - public static final Material MEAT = MaterialUtils.generateMaterialFromGtENUM(Materials.MeatRaw); - - // Clay - public static final Material CLAY = MaterialUtils.generateMaterialFromGtENUM(Materials.Clay); - - // Wrought Iron - public static final Material WROUGHT_IRON = MaterialUtils.generateMaterialFromGtENUM(Materials.WroughtIron); - - // PTFE - public static final Material PTFE = MaterialUtils - .generateMaterialFromGtENUM(MaterialUtils.getMaterial("Polytetrafluoroethylene", "Plastic")); - - // Plastic - public static final Material PLASTIC = MaterialUtils - .generateMaterialFromGtENUM(MaterialUtils.getMaterial("Plastic", "Rubber")); - - static { - MEAT.setTextureSet(TextureSet.SET_ROUGH); - CLAY.setTextureSet(TextureSet.SET_ROUGH); - } -} diff --git a/src/main/java/gtPlusPlus/core/material/ORES.java b/src/main/java/gtPlusPlus/core/material/ORES.java deleted file mode 100644 index 420c553d49..0000000000 --- a/src/main/java/gtPlusPlus/core/material/ORES.java +++ /dev/null @@ -1,701 +0,0 @@ -package gtPlusPlus.core.material; - -import gregtech.api.enums.TextureSet; -import gtPlusPlus.core.client.CustomTextureSet.TextureSets; -import gtPlusPlus.core.material.state.MaterialState; - -public final class ORES { - - public static final Material AGARDITE_CD = new Material( - "Agardite (Cd)", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 170, 188, 33, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // (CdCa)Cu7(AsO2)4(O2H)5·3H2O - new MaterialStack(ELEMENT.getInstance().CADMIUM, 1), new MaterialStack(ELEMENT.getInstance().CALCIUM, 1), - new MaterialStack(ELEMENT.getInstance().COPPER, 7), new MaterialStack(ELEMENT.getInstance().ARSENIC, 4), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 21), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 11) }); - - public static final Material AGARDITE_LA = new Material( - "Agardite (La)", // Material Name - MaterialState.ORE, // State - TextureSet.SET_FINE, // Texture Set - new short[] { 206, 232, 9, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // (LaCa)Cu5(AsO6)2(OH)4·3H2O - new MaterialStack(ELEMENT.getInstance().LANTHANUM, 1), new MaterialStack(ELEMENT.getInstance().CALCIUM, 1), - new MaterialStack(ELEMENT.getInstance().COPPER, 5), new MaterialStack(ELEMENT.getInstance().ARSENIC, 2), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 19), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 10) }); - - public static final Material AGARDITE_ND = new Material( - "Agardite (Nd)", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 225, 244, 78, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // (NdCa)Cu6(As3O3)2(O2H)6·3H2O - new MaterialStack(ELEMENT.getInstance().NEODYMIUM, 1), new MaterialStack(ELEMENT.getInstance().CALCIUM, 1), - new MaterialStack(ELEMENT.getInstance().COPPER, 6), new MaterialStack(ELEMENT.getInstance().ARSENIC, 6), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 21), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 12) }); - - public static final Material AGARDITE_Y = new Material( - "Agardite (Y)", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 210, 232, 44, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // (YCa)Cu5(As2O4)3(OH)6·3H2O - new MaterialStack(ELEMENT.getInstance().YTTRIUM, 1), new MaterialStack(ELEMENT.getInstance().CALCIUM, 1), - new MaterialStack(ELEMENT.getInstance().COPPER, 5), new MaterialStack(ELEMENT.getInstance().ARSENIC, 6), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 21), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 12) }); - - // Alburnite - // Ag8GeTe2S4 - public static final Material ALBURNITE = new Material( - "Alburnite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 16, 5, 105, 0 }, // Material Colour - -1, - -1, - -1, - -1, - 0, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().GOLD, 8), new MaterialStack(ELEMENT.getInstance().GERMANIUM, 1), - new MaterialStack(ELEMENT.getInstance().TELLURIUM, 2), - new MaterialStack(ELEMENT.getInstance().SULFUR, 4) }); - - public static final Material CERITE = new Material( - "Cerite", // Material Name - MaterialState.ORE, // State - TextureSets.REFINED.get(), // Texture Set - new short[] { 68, 13, 0, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // (Ce,La,Ca)9(Mg,Fe+3)(SiO4)6(SiO3OH)(OH)3 - new MaterialStack(ELEMENT.getInstance().CERIUM, 9), new MaterialStack(ELEMENT.getInstance().LANTHANUM, 9), - new MaterialStack(ELEMENT.getInstance().CALCIUM, 9), new MaterialStack(ELEMENT.getInstance().MAGNESIUM, 3), - new MaterialStack(ELEMENT.getInstance().IRON, 3), new MaterialStack(ELEMENT.getInstance().SILICON, 7), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 20), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 4) }); - - // Comancheite - // Hg55N24(NH2,OH)4(Cl,Br)34 - public static final Material COMANCHEITE = new Material( - "Comancheite", // Material Name - MaterialState.ORE, // State - TextureSets.REFINED.get(), // Texture Set - new short[] { 65, 205, 105, 0 }, // Material Colour - -1, - -1, - -1, - -1, - 0, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().MERCURY, 54 / 4), - new MaterialStack(ELEMENT.getInstance().NITROGEN, 28 / 4), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 12 / 4), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 8 / 4), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 34 / 4), - new MaterialStack(ELEMENT.getInstance().BROMINE, 34 / 4) }); - - public static final Material CROCROITE = new Material( - "Crocoite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_GEM_VERTICAL, // Texture Set - new short[] { 255, 143, 84, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().LEAD, 2), - new MaterialStack(ELEMENT.getInstance().CHROMIUM, 2), new MaterialStack(ELEMENT.getInstance().OXYGEN, 3), - new MaterialStack(ELEMENT.getInstance().CAESIUM, 1), }); - - public static final Material CRYOLITE = new Material( - "Cryolite (F)", // Material Name - MaterialState.ORE, // State - TextureSet.SET_SHINY, // Texture Set - new short[] { 205, 205, 255, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().SODIUM, 3), new MaterialStack(ELEMENT.getInstance().ALUMINIUM, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 6) }); - - // Demicheleite-(Br) - // BiSBr - public static final Material DEMICHELEITE_BR = new Material( - "Demicheleite (Br)", // Material Name - MaterialState.ORE, // State - TextureSet.SET_SHINY, // Texture Set - new short[] { 165, 75, 75, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().BISMUTH, 13), new MaterialStack(ELEMENT.getInstance().SULFUR, 11), - new MaterialStack(ELEMENT.getInstance().BROMINE, 1) }); - - public static final Material FLORENCITE = new Material( - "Florencite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 249, 249, 124, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // SmAl3(PO4)2(OH)6 - new MaterialStack(ELEMENT.getInstance().SAMARIUM, 1), new MaterialStack(ELEMENT.getInstance().ALUMINIUM, 3), - new MaterialStack(ELEMENT.getInstance().PHOSPHORUS, 1), new MaterialStack(ELEMENT.getInstance().OXYGEN, 10), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 6) }); - - public static final Material FLUORCAPHITE = new Material( - "Fluorcaphite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_FINE, // Texture Set - new short[] { 255, 255, 30, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // (Ca,Sr,Ce,Na)5(PO4)3F - new MaterialStack(ELEMENT.getInstance().CALCIUM, 5), new MaterialStack(MISC_MATERIALS.STRONTIUM_OXIDE, 5), - new MaterialStack(ELEMENT.getInstance().CERIUM, 5), new MaterialStack(ELEMENT.getInstance().SODIUM, 5), - new MaterialStack(ELEMENT.getInstance().PHOSPHORUS, 3), new MaterialStack(ELEMENT.getInstance().OXYGEN, 12), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 6), }); - - // Gadolinite_Ce - public static final Material GADOLINITE_CE = new Material( - "Gadolinite (Ce)", // Material Name - MaterialState.ORE, // State - TextureSets.REFINED.get(), // Texture Set - new short[] { 15, 159, 59, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().CERIUM, 4), - new MaterialStack(ELEMENT.getInstance().ERBIUM, 2), new MaterialStack(ELEMENT.getInstance().LANTHANUM, 2), - new MaterialStack(ELEMENT.getInstance().NEODYMIUM, 2), new MaterialStack(ELEMENT.getInstance().YTTRIUM, 2), - new MaterialStack(ELEMENT.getInstance().GADOLINIUM, 1), - new MaterialStack(ELEMENT.getInstance().BERYLLIUM, 2), new MaterialStack(ELEMENT.getInstance().SILICON, 7), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 14), }); - - // Gadolinite_Y - public static final Material GADOLINITE_Y = new Material( - "Gadolinite (Y)", // Material Name - MaterialState.ORE, // State - TextureSets.REFINED.get(), // Texture Set - new short[] { 35, 189, 99, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().CERIUM, 2), - new MaterialStack(ELEMENT.getInstance().ERBIUM, 2), new MaterialStack(ELEMENT.getInstance().LANTHANUM, 2), - new MaterialStack(ELEMENT.getInstance().NEODYMIUM, 2), new MaterialStack(ELEMENT.getInstance().YTTRIUM, 4), - new MaterialStack(ELEMENT.getInstance().GADOLINIUM, 2), - new MaterialStack(ELEMENT.getInstance().BERYLLIUM, 3), new MaterialStack(ELEMENT.getInstance().SILICON, 4), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 9), }); - - public static final Material GEIKIELITE = new Material( - "Geikielite", // Material Name - MaterialState.ORE, // State - TextureSets.GEM_A.get(), // Texture Set - new short[] { 187, 193, 204, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().MAGNESIUM, 1), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 1), new MaterialStack(ELEMENT.getInstance().OXYGEN, 3) }); - - public static final Material GREENOCKITE = new Material( - "Greenockite", // Material Name - MaterialState.ORE, // State - TextureSets.GEM_A.get(), // Texture Set - new short[] { 110, 193, 25, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().CADMIUM, 1), - new MaterialStack(ELEMENT.getInstance().SULFUR, 1), }); - - public static final Material HIBONITE = new Material( - "Hibonite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 58, 31, 0, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // ((Ca,Ce)(Al,Ti,Mg)12O19) - new MaterialStack(ELEMENT.getInstance().CALCIUM, 1), new MaterialStack(ELEMENT.getInstance().CERIUM, 1), - new MaterialStack(ELEMENT.getInstance().ALUMINIUM, 12), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 12), - new MaterialStack(ELEMENT.getInstance().MAGNESIUM, 12), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 19), }); - - // Honeaite - // Au3TlTe2 - public static final Material HONEAITE = new Material( - "Honeaite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_FINE, // Texture Set - new short[] { 165, 165, 5, 0 }, // Material Colour - -1, - -1, - -1, - -1, - 0, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().GOLD, 3), new MaterialStack(ELEMENT.getInstance().THALLIUM, 1), - new MaterialStack(ELEMENT.getInstance().TELLURIUM, 2) }); - - // Irarsite - // (Ir,Ru,Rh,Pt)AsS - public static final Material IRARSITE = new Material( - "Irarsite", // Material Name - MaterialState.ORE, // State - TextureSets.ENRICHED.get(), // Texture Set - new short[] { 125, 105, 105, 0 }, // Material Colour - -1, - -1, - -1, - -1, - 0, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().IRIDIUM, 1), new MaterialStack(ELEMENT.getInstance().RUTHENIUM, 1), - new MaterialStack(ELEMENT.getInstance().RHODIUM, 1), new MaterialStack(ELEMENT.getInstance().PLATINUM, 1), - new MaterialStack(ELEMENT.getInstance().ARSENIC, 1), new MaterialStack(ELEMENT.getInstance().SULFUR, 1), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 1) }); - - // Kashinite - // (Ir,Rh)2S3 - public static final Material KASHINITE = new Material( - "Kashinite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_SHINY, // Texture Set - new short[] { 75, 105, 75, 0 }, // Material Colour - -1, - -1, - -1, - -1, - 0, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().IRIDIUM, 2), new MaterialStack(ELEMENT.getInstance().RHODIUM, 2), - new MaterialStack(ELEMENT.getInstance().SULFUR, 3) }); - - // Tl(Cl,Br) - public static final Material LAFOSSAITE = new Material( - "Lafossaite", // Material Name - MaterialState.ORE, // State - TextureSets.REFINED.get(), // Texture Set - new short[] { 165, 105, 205, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().CHLORINE, 1), new MaterialStack(ELEMENT.getInstance().BROMINE, 1), - new MaterialStack(ELEMENT.getInstance().THALLIUM, 1) }); - - public static final Material LANTHANITE_CE = new Material( - "Lanthanite (Ce)", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 186, 113, 179, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // (Ce)2(CO3)3·8(H2O) - new MaterialStack(ELEMENT.getInstance().CERIUM, 2), new MaterialStack(ELEMENT.getInstance().OXYGEN, 3), - new MaterialStack(ELEMENT.getInstance().CALCIUM, 3), new MaterialStack(ELEMENT.getInstance().HYDROGEN, 2), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 1), }); - - public static final Material LANTHANITE_LA = new Material( - "Lanthanite (La)", // Material Name - MaterialState.ORE, // State - TextureSets.REFINED.get(), // Texture Set - new short[] { 219, 160, 214, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // (La)2(CO3)3·8(H2O) - new MaterialStack(ELEMENT.getInstance().LANTHANUM, 2), new MaterialStack(ELEMENT.getInstance().OXYGEN, 3), - new MaterialStack(ELEMENT.getInstance().CALCIUM, 3), new MaterialStack(ELEMENT.getInstance().HYDROGEN, 2), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 1), }); - - public static final Material LANTHANITE_ND = new Material( - "Lanthanite (Nd)", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 153, 76, 145, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // (Nd)2(CO3)3·8(H2O) - new MaterialStack(ELEMENT.getInstance().NEODYMIUM, 2), new MaterialStack(ELEMENT.getInstance().OXYGEN, 3), - new MaterialStack(ELEMENT.getInstance().CALCIUM, 3), new MaterialStack(ELEMENT.getInstance().HYDROGEN, 2), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 1), }); - - // Iodine Source - public static final Material LAUTARITE = new Material( - "Lautarite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_FINE, // Texture Set - new short[] { 165, 105, 205, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().CALCIUM, 1), new MaterialStack(ELEMENT.getInstance().IODINE, 2), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 6) }); - - public static final Material LEPERSONNITE = new Material( - "Lepersonnite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_EMERALD, // Texture Set - new short[] { 175, 175, 20, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().CALCIUM, 1), - new MaterialStack(ELEMENT.getInstance().YTTERBIUM, 3), - new MaterialStack(ELEMENT.getInstance().GADOLINIUM, 2), - new MaterialStack(ELEMENT.getInstance().DYSPROSIUM, 2), - new MaterialStack(ELEMENT.getInstance().URANIUM235, 2), new MaterialStack(ELEMENT.getInstance().OXYGEN, 29), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 24) }); - - // Miessiite - // Pd11Te2Se2 - public static final Material MIESSIITE = new Material( - "Miessiite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_FINE, // Texture Set - new short[] { 75, 75, 75, 0 }, // Material Colour - -1, - -1, - -1, - -1, - 0, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().PALLADIUM, 11), - new MaterialStack(ELEMENT.getInstance().TELLURIUM, 2), - new MaterialStack(ELEMENT.getInstance().SELENIUM, 2) }); - - public static final Material NICHROMITE = new Material( - "Nichromite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 22, 19, 19, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().NICKEL, 1), - new MaterialStack(ELEMENT.getInstance().COBALT, 1), new MaterialStack(ELEMENT.getInstance().IRON, 3), - new MaterialStack(ELEMENT.getInstance().ALUMINIUM, 2), new MaterialStack(ELEMENT.getInstance().CHROMIUM, 2), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 8) }); - - // Perroudite - // Hg5Ag4S5(I,Br)2Cl2 - public static final Material PERROUDITE = new Material( - "Perroudite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 77, 165, 174, 0 }, // Material Colour - -1, - -1, - -1, - -1, - 0, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().SULFUR, 5), - new MaterialStack(ELEMENT.getInstance().SILVER, 4), new MaterialStack(ELEMENT.getInstance().IODINE, 2), - new MaterialStack(ELEMENT.getInstance().MERCURY, 5), new MaterialStack(ELEMENT.getInstance().BROMINE, 2), - new MaterialStack(ELEMENT.getInstance().CHLORINE, 2) }); - - public static final Material POLYCRASE = new Material( - "Polycrase", // Material Name - MaterialState.ORE, // State - TextureSet.SET_ROUGH, // Texture Set - new short[] { 51, 0, 11, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().YTTRIUM, 1), - new MaterialStack(ELEMENT.getInstance().CALCIUM, 1), new MaterialStack(ELEMENT.getInstance().CERIUM, 1), - new MaterialStack(ELEMENT.getInstance().URANIUM235, 1), new MaterialStack(ELEMENT.getInstance().THORIUM, 1), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 2), new MaterialStack(ELEMENT.getInstance().NIOBIUM, 2), - new MaterialStack(ELEMENT.getInstance().TANTALUM, 2), new MaterialStack(ELEMENT.getInstance().OXYGEN, 6) }); - - // Radiobarite - // Radium, Barium, Barite? - public static final Material RADIOBARITE = new Material( - "Barite (Ra)", // Material Name - MaterialState.ORE, // State - TextureSet.SET_FLINT, // Texture Set - new short[] { 205, 205, 205, 0 }, // Material Colour - -1, - -1, - -1, - -1, - 0, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().BARIUM, 32), new MaterialStack(ELEMENT.getInstance().RADIUM, 1), - new MaterialStack(ELEMENT.getInstance().SULFUR, 16), new MaterialStack(ELEMENT.getInstance().OXYGEN, 15) }); - - // Samarskite_Y - public static final Material SAMARSKITE_Y = new Material( - "Samarskite (Y)", // Material Name - MaterialState.ORE, // State - TextureSets.ENRICHED.get(), // Texture Set - new short[] { 65, 163, 164, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().YTTRIUM, 2), // Y not YT/YB - new MaterialStack(ELEMENT.getInstance().IRON, 10), new MaterialStack(ELEMENT.getInstance().URANIUM235, 2), - new MaterialStack(ELEMENT.getInstance().THORIUM, 3), new MaterialStack(ELEMENT.getInstance().NIOBIUM, 2), - new MaterialStack(ELEMENT.getInstance().TANTALUM, 3) }); - - // Samarskite_YB - public static final Material SAMARSKITE_YB = new Material( - "Samarskite (Yb)", // Material Name - MaterialState.ORE, // State - TextureSets.ENRICHED.get(), // Texture Set - new short[] { 95, 193, 194, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().YTTERBIUM, 2), // Y not YT/YB - new MaterialStack(ELEMENT.getInstance().IRON, 9), new MaterialStack(ELEMENT.getInstance().URANIUM235, 3), - new MaterialStack(ELEMENT.getInstance().THORIUM, 2), new MaterialStack(ELEMENT.getInstance().NIOBIUM, 3), - new MaterialStack(ELEMENT.getInstance().TANTALUM, 2) }); - - public static final Material TITANITE = new Material( - "Titanite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 184, 198, 105, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().CALCIUM, 2), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 2), new MaterialStack(ELEMENT.getInstance().SILICON, 2), - new MaterialStack(ELEMENT.getInstance().THORIUM, 1), new MaterialStack(ELEMENT.getInstance().OXYGEN, 10) }); - - public static final Material XENOTIME = new Material( - "Xenotime", // Material Name - MaterialState.ORE, // State - TextureSet.SET_OPAL, // Texture Set - new short[] { 235, 89, 199, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().YTTRIUM, 2), - new MaterialStack(ELEMENT.getInstance().YTTERBIUM, 2), new MaterialStack(ELEMENT.getInstance().ERBIUM, 2), - new MaterialStack(ELEMENT.getInstance().EUROPIUM, 1), - new MaterialStack(ELEMENT.getInstance().PHOSPHORUS, 2), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 8) }); - - public static final Material YTTRIAITE = new Material( // TODO - "Yttriaite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_METALLIC, // Texture Set - new short[] { 255, 143, 84, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().YTTRIUM, 1), // Y not YT/YB - new MaterialStack(ELEMENT.getInstance().OXYGEN, 3), new MaterialStack(ELEMENT.getInstance().IRON, 4), - new MaterialStack(ELEMENT.getInstance().TIN, 1), new MaterialStack(ELEMENT.getInstance().NITROGEN, 2) }); - - public static final Material YTTRIALITE = new Material( - "Yttrialite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_RUBY, // Texture Set - new short[] { 35, 189, 99, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().YTTRIUM, 2), - new MaterialStack(ELEMENT.getInstance().THORIUM, 2), new MaterialStack(ELEMENT.getInstance().SILICON, 2), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 7), }); - - public static final Material YTTROCERITE = new Material( - "Yttrocerite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_DIAMOND, // Texture Set - new short[] { 35, 19, 199, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().CERIUM, 1), - new MaterialStack(ELEMENT.getInstance().CALCIUM, 1), new MaterialStack(ELEMENT.getInstance().FLUORINE, 5), - new MaterialStack(ELEMENT.getInstance().YTTRIUM, 1), }); - - public static final Material ZIMBABWEITE = new Material( - "Zimbabweite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_FINE, // Texture Set - new short[] { 193, 187, 131, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().CALCIUM, 2), - new MaterialStack(ELEMENT.getInstance().POTASSIUM, 2), new MaterialStack(ELEMENT.getInstance().LEAD, 1), - new MaterialStack(ELEMENT.getInstance().ARSENIC, 4), new MaterialStack(ELEMENT.getInstance().NIOBIUM, 4), - new MaterialStack(ELEMENT.getInstance().TANTALUM, 4), new MaterialStack(ELEMENT.getInstance().TITANIUM, 4), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 18) }); - - public static final Material ZIRCON = new Material( - "Zircon", // Material Name - MaterialState.ORE, // State - TextureSets.GEM_A.get(), // Texture Set - new short[] { 195, 19, 19, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().ZIRCONIUM, 1), - new MaterialStack(ELEMENT.getInstance().SILICON, 1), new MaterialStack(ELEMENT.getInstance().OXYGEN, 4), }); - - public static final Material ZIRCONILITE = new Material( - "Zirconolite", // Material Name - MaterialState.ORE, // State - TextureSet.SET_FINE, // Texture Set - new short[] { 45, 26, 0, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().CALCIUM, 2), - new MaterialStack(ELEMENT.getInstance().ZIRCONIUM, 2), new MaterialStack(ELEMENT.getInstance().TITANIUM, 4), - new MaterialStack(ELEMENT.getInstance().CERIUM, 1), new MaterialStack(ELEMENT.getInstance().OXYGEN, 14) }); - - public static final Material ZIRCOPHYLLITE = new Material( - "Zircophyllite", // Material Name - MaterialState.ORE, // State - TextureSets.REFINED.get(), // Texture Set - new short[] { 30, 0, 6, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().POTASSIUM, 3), - new MaterialStack(ELEMENT.getInstance().SODIUM, 3), new MaterialStack(ELEMENT.getInstance().MANGANESE, 7), - new MaterialStack(ELEMENT.getInstance().IRON, 7), new MaterialStack(ELEMENT.getInstance().ZIRCONIUM, 2), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 2), new MaterialStack(ELEMENT.getInstance().NIOBIUM, 2), - new MaterialStack(ELEMENT.getInstance().SILICON, 8), new MaterialStack(ELEMENT.getInstance().OXYGEN, 13), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 7), }); - - public static final Material ZIRKELITE = new Material( - "Zirkelite", // Material Name - MaterialState.ORE, // State - TextureSets.GEM_A.get(), // Texture Set - new short[] { 229, 208, 48, 0 }, // Material Colour - -1, - -1, - -1, - -1, - -1, // Radiation - new MaterialStack[] { // (Ca,Th,Ce)Zr(Ti,Nb)2O7 - new MaterialStack(ELEMENT.getInstance().CALCIUM, 1), new MaterialStack(ELEMENT.getInstance().THORIUM, 1), - new MaterialStack(ELEMENT.getInstance().CERIUM, 1), new MaterialStack(ELEMENT.getInstance().ZIRCONIUM, 1), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 2), new MaterialStack(ELEMENT.getInstance().NIOBIUM, 2), - new MaterialStack(ELEMENT.getInstance().OXYGEN, 7) }); - - public static final Material DEEP_EARTH_REACTOR_FUEL_DEPOSIT = new Material( - "Radioactive Mineral Mix", // Material Name - MaterialState.ORE, // State - TextureSets.NUCLEAR.get(), // Texture Set - null, // Material Colour - -1, - -1, - -1, - -1, - 4, // Radiation - new MaterialStack[] { // Na3AlF6 - new MaterialStack(ELEMENT.getInstance().RADON, 2), new MaterialStack(ELEMENT.getInstance().RADIUM, 1), - new MaterialStack(ELEMENT.getInstance().URANIUM235, 1), - new MaterialStack(ELEMENT.getInstance().URANIUM238, 10), - new MaterialStack(ELEMENT.getInstance().THORIUM, 25), - new MaterialStack(ELEMENT.getInstance().THORIUM232, 4), new MaterialStack(FLUORCAPHITE, 6), - new MaterialStack(SAMARSKITE_Y, 8), new MaterialStack(TITANITE, 4) }); -} diff --git a/src/main/java/gtPlusPlus/core/material/nuclear/FLUORIDES.java b/src/main/java/gtPlusPlus/core/material/nuclear/FLUORIDES.java deleted file mode 100644 index 5a50a604da..0000000000 --- a/src/main/java/gtPlusPlus/core/material/nuclear/FLUORIDES.java +++ /dev/null @@ -1,244 +0,0 @@ -package gtPlusPlus.core.material.nuclear; - -import gregtech.api.enums.Materials; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.MISC_MATERIALS; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialStack; -import gtPlusPlus.core.material.state.MaterialState; - -public class FLUORIDES { - - public static final Material FLUORITE = new Material( - "Fluorite (F)", // Material Name - MaterialState.ORE, // State - null, // Material Colour - Materials.Fluorine.mMeltingPoint, // Melting Point in C - Materials.Fluorine.mBlastFurnaceTemp, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - false, // Generate cells - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().CALCIUM, 16), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 32), new MaterialStack(ELEMENT.getInstance().IRON, 4), - new MaterialStack(ELEMENT.getInstance().CARBON, 2) }); - - // ThF4 - public static final Material THORIUM_TETRAFLUORIDE = new Material( - "Thorium Tetrafluoride", // Material Name - MaterialState.LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().THORIUM232, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 4) }); - - // ThF6 - public static final Material THORIUM_HEXAFLUORIDE = new Material( - "Thorium Hexafluoride", // Material Name - MaterialState.LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().THORIUM232, 1), - new MaterialStack(ELEMENT.getInstance().THORIUM, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 12) }); - - // UF4 - public static final Material URANIUM_TETRAFLUORIDE = new Material( - "Uranium Tetrafluoride", // Material Name - MaterialState.LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().URANIUM233, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 4) }); - - // UF6 - public static final Material URANIUM_HEXAFLUORIDE = new Material( - "Uranium Hexafluoride", // Material Name - MaterialState.LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.URANIUM_TETRAFLUORIDE, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 2) }); - - // ZrF4 - - public static final Material ZIRCONIUM_TETRAFLUORIDE = new Material( - "Zirconium Tetrafluoride", // Material Name - MaterialState.LIQUID, // State - null, // Texture Set (Autogenerated) - 0, - null, // Material Colour - -1, - -1, - -1, - -1, - false, - "ZrF\u2084", - -1, - true, - false, - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().ZIRCONIUM, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 4) }); - - /* - * public static final Material ZIRCONIUM_TETRAFLUORIDE = new Material( "Zirconium Tetrafluoride", //Material Name - * MaterialState.LIQUID, //State null, //Material Colour -1, //Melting Point in C -1, //Boiling Point in C -1, - * //Protons -1, //Neutrons false, //Uses Blast furnace? //Material Stacks with Percentage of required elements. new - * MaterialStack[]{ new MaterialStack(ELEMENT.getInstance().ZIRCONIUM, 1), new - * MaterialStack(ELEMENT.getInstance().FLUORINE, 4) }); - */ - - // BeF2 - public static final Material BERYLLIUM_FLUORIDE = new Material( - "Beryllium Fluoride", // Material Name - MaterialState.LIQUID, // State - null, // Material Colour - -1, - -1, - -1, - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().BERYLLIUM, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 2) }); - - // LiF - public static final Material LITHIUM_FLUORIDE = new Material( - "Lithium Fluoride", // Material Name - MaterialState.LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().LITHIUM7, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 1) }); - - // LFTR sub components - - // (NH4)HF2 - public static final Material AMMONIUM_BIFLUORIDE = new Material( - "Ammonium Bifluoride", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - 126, // Melting Point in C - 240, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(MISC_MATERIALS.AMMONIUM, 1), - new MaterialStack(ELEMENT.getInstance().HYDROGEN, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 2) }); - - // Be(OH)2 - public static final Material BERYLLIUM_HYDROXIDE = new Material( - "Beryllium Hydroxide", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().BERYLLIUM, 1), - new MaterialStack(MISC_MATERIALS.HYDROXIDE, 2) }); - - // (NH4)2BeF4 - public static final Material AMMONIUM_TETRAFLUOROBERYLLATE = new Material( - "Ammonium Tetrafluoroberyllate", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - 280, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(MISC_MATERIALS.AMMONIUM, 2), - new MaterialStack(ELEMENT.getInstance().BERYLLIUM, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 4) }); - - // LFTR Output - public static final Material NEPTUNIUM_HEXAFLUORIDE = new Material( - "Neptunium Hexafluoride", // Material Name - MaterialState.GAS, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().NEPTUNIUM, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 6) }); - - public static final Material TECHNETIUM_HEXAFLUORIDE = new Material( - "Technetium Hexafluoride", // Material Name - MaterialState.GAS, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().TECHNETIUM, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 6) }); - - public static final Material SELENIUM_HEXAFLUORIDE = new Material( - "Selenium Hexafluoride", // Material Name - MaterialState.GAS, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().SELENIUM, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 6) }); - - public static final Material SODIUM_FLUORIDE = new Material( - "Sodium Fluoride", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().SODIUM, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 1) }); - - private static final FLUORIDES INSTANCE = new FLUORIDES(); - - public static FLUORIDES getInstance() { - return INSTANCE; - } -} diff --git a/src/main/java/gtPlusPlus/core/material/nuclear/MaterialsFluorides.java b/src/main/java/gtPlusPlus/core/material/nuclear/MaterialsFluorides.java new file mode 100644 index 0000000000..f3ae16c644 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/material/nuclear/MaterialsFluorides.java @@ -0,0 +1,245 @@ +package gtPlusPlus.core.material.nuclear; + +import gregtech.api.enums.Materials; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.material.MaterialStack; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.state.MaterialState; + +public class MaterialsFluorides { + + public static final Material FLUORITE = new Material( + "Fluorite (F)", // Material Name + MaterialState.ORE, // State + null, // Material Colour + Materials.Fluorine.mMeltingPoint, // Melting Point in C + Materials.Fluorine.mBlastFurnaceTemp, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + false, // Generate cells + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().CALCIUM, 16), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 32), + new MaterialStack(MaterialsElements.getInstance().IRON, 4), + new MaterialStack(MaterialsElements.getInstance().CARBON, 2) }); + + // ThF4 + public static final Material THORIUM_TETRAFLUORIDE = new Material( + "Thorium Tetrafluoride", // Material Name + MaterialState.LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().THORIUM232, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 4) }); + + // ThF6 + public static final Material THORIUM_HEXAFLUORIDE = new Material( + "Thorium Hexafluoride", // Material Name + MaterialState.LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().THORIUM232, 1), + new MaterialStack(MaterialsElements.getInstance().THORIUM, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 12) }); + + // UF4 + public static final Material URANIUM_TETRAFLUORIDE = new Material( + "Uranium Tetrafluoride", // Material Name + MaterialState.LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().URANIUM233, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 4) }); + + // UF6 + public static final Material URANIUM_HEXAFLUORIDE = new Material( + "Uranium Hexafluoride", // Material Name + MaterialState.LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.URANIUM_TETRAFLUORIDE, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 2) }); + + // ZrF4 + + public static final Material ZIRCONIUM_TETRAFLUORIDE = new Material( + "Zirconium Tetrafluoride", // Material Name + MaterialState.LIQUID, // State + null, // Texture Set (Autogenerated) + 0, + null, // Material Colour + -1, + -1, + -1, + -1, + false, + "ZrF\u2084", + -1, + true, + false, + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().ZIRCONIUM, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 4) }); + + /* + * public static final Material ZIRCONIUM_TETRAFLUORIDE = new Material( "Zirconium Tetrafluoride", //Material Name + * MaterialState.LIQUID, //State null, //Material Colour -1, //Melting Point in C -1, //Boiling Point in C -1, + * //Protons -1, //Neutrons false, //Uses Blast furnace? //Material Stacks with Percentage of required elements. new + * MaterialStack[]{ new MaterialStack(ELEMENT.getInstance().ZIRCONIUM, 1), new + * MaterialStack(MaterialsElements.getInstance().FLUORINE, 4) }); + */ + + // BeF2 + public static final Material BERYLLIUM_FLUORIDE = new Material( + "Beryllium Fluoride", // Material Name + MaterialState.LIQUID, // State + null, // Material Colour + -1, + -1, + -1, + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().BERYLLIUM, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 2) }); + + // LiF + public static final Material LITHIUM_FLUORIDE = new Material( + "Lithium Fluoride", // Material Name + MaterialState.LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().LITHIUM7, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 1) }); + + // LFTR sub components + + // (NH4)HF2 + public static final Material AMMONIUM_BIFLUORIDE = new Material( + "Ammonium Bifluoride", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + 126, // Melting Point in C + 240, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialMisc.AMMONIUM, 1), + new MaterialStack(MaterialsElements.getInstance().HYDROGEN, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 2) }); + + // Be(OH)2 + public static final Material BERYLLIUM_HYDROXIDE = new Material( + "Beryllium Hydroxide", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().BERYLLIUM, 1), + new MaterialStack(MaterialMisc.HYDROXIDE, 2) }); + + // (NH4)2BeF4 + public static final Material AMMONIUM_TETRAFLUOROBERYLLATE = new Material( + "Ammonium Tetrafluoroberyllate", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + 280, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialMisc.AMMONIUM, 2), + new MaterialStack(MaterialsElements.getInstance().BERYLLIUM, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 4) }); + + // LFTR Output + public static final Material NEPTUNIUM_HEXAFLUORIDE = new Material( + "Neptunium Hexafluoride", // Material Name + MaterialState.GAS, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().NEPTUNIUM, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 6) }); + + public static final Material TECHNETIUM_HEXAFLUORIDE = new Material( + "Technetium Hexafluoride", // Material Name + MaterialState.GAS, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().TECHNETIUM, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 6) }); + + public static final Material SELENIUM_HEXAFLUORIDE = new Material( + "Selenium Hexafluoride", // Material Name + MaterialState.GAS, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().SELENIUM, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 6) }); + + public static final Material SODIUM_FLUORIDE = new Material( + "Sodium Fluoride", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().SODIUM, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 1) }); + + private static final MaterialsFluorides INSTANCE = new MaterialsFluorides(); + + public static MaterialsFluorides getInstance() { + return INSTANCE; + } +} diff --git a/src/main/java/gtPlusPlus/core/material/nuclear/MaterialsNuclides.java b/src/main/java/gtPlusPlus/core/material/nuclear/MaterialsNuclides.java new file mode 100644 index 0000000000..8d74ef9ab8 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/material/nuclear/MaterialsNuclides.java @@ -0,0 +1,317 @@ +package gtPlusPlus.core.material.nuclear; + +import gtPlusPlus.core.client.CustomTextureSet.TextureSets; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialStack; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.state.MaterialState; +import gtPlusPlus.core.util.data.StringUtils; + +public final class MaterialsNuclides { + + public static final Material Li2BeF4 = new Material( + "Lithium Tetrafluoroberyllate (LFTB)", // Material Name + MaterialState.LIQUID, // State + TextureSets.NUCLEAR.get(), + null, // Material Colour + 566, // Melting Point in C + 870, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "Li2BeF4"), // Chemical Formula + 4, // Radioactivity Level + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.LITHIUM_FLUORIDE, 2), + new MaterialStack(MaterialsFluorides.BERYLLIUM_FLUORIDE, 1) }); + + public static final Material LiFBeF2ThF4UF4 = new Material( + "LFTR Fuel 3", // Material Name + MaterialState.LIQUID, // State + TextureSets.NUCLEAR.get(), + null, // Material Colour + 566, // Melting Point in C + 870, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2ThF4UF4"), // Chemical Formula + 5, // Radioactivity Level + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.LITHIUM_FLUORIDE, 65), + new MaterialStack(MaterialsFluorides.BERYLLIUM_FLUORIDE, 28), + new MaterialStack(MaterialsFluorides.THORIUM_TETRAFLUORIDE, 1), + new MaterialStack(MaterialsFluorides.URANIUM_TETRAFLUORIDE, 1) }); + + public static final Material LiFBeF2ZrF4UF4 = new Material( + "LFTR Fuel 2", // Material Name + MaterialState.LIQUID, // State + TextureSets.NUCLEAR.get(), + null, // Material Colour + 650, // Melting Point in C + 940, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2ZrF4UF4"), // Chemical Formula + 5, // Radioactivity Level + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.LITHIUM_FLUORIDE, 65), + new MaterialStack(MaterialsFluorides.BERYLLIUM_FLUORIDE, 28), + new MaterialStack(MaterialsFluorides.ZIRCONIUM_TETRAFLUORIDE, 5), + new MaterialStack(MaterialsFluorides.URANIUM_TETRAFLUORIDE, 2) }); + + public static final Material LiFBeF2ZrF4U235 = new Material( + "LFTR Fuel 1", // Material Name + MaterialState.LIQUID, // State + TextureSets.NUCLEAR.get(), + null, // Material Colour + 590, // Melting Point in C + 890, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2ZrF4") + StringUtils.superscript("235U"), // Chemical + // Formula + 5, // Radioactivity Level + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.LITHIUM_FLUORIDE, 55), + new MaterialStack(MaterialsFluorides.BERYLLIUM_FLUORIDE, 25), + new MaterialStack(MaterialsFluorides.ZIRCONIUM_TETRAFLUORIDE, 6), + new MaterialStack(MaterialsElements.getInstance().URANIUM235, 14) }); + + // Misc + public static final Material BurntLftrFuel_MK1 = new Material( + "Burnt Reactor Fuel I", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiBeF2UF4FP"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().LITHIUM, 1), + new MaterialStack(MaterialsFluorides.BERYLLIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.URANIUM_TETRAFLUORIDE, 1), + new MaterialStack(MaterialsElements.getInstance().PROTACTINIUM, 1) }); + + public static final Material BurntLftrFuel_MK2 = new Material( + "Burnt Reactor Fuel II", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiBeF2UF4FP"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().LITHIUM, 1), + new MaterialStack(MaterialsFluorides.BERYLLIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.URANIUM_TETRAFLUORIDE, 1), + new MaterialStack(MaterialsElements.getInstance().PROTACTINIUM, 1) }); + + // LFTR Core Fluids + public static final Material LiFBeF2UF4FP = new Material( + "Uranium Depleted Molten Salt (U Salt)", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2UF4FP"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.LITHIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.BERYLLIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.URANIUM_TETRAFLUORIDE, 1), + new MaterialStack(MaterialsElements.getInstance().PROTACTINIUM, 1) }); + + public static final Material Sparged_LiFBeF2UF4FP = new Material( + "Helium Sparged U Salt", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2UF4FP"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.LITHIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.BERYLLIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.URANIUM_TETRAFLUORIDE, 1), + new MaterialStack(MaterialsElements.getInstance().PROTACTINIUM, 1) }); + + public static final Material UF6F2FP = new Material( + "Phosphorous Uranium Hexafluoride (P-UF6)", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript("UF6F2FP"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.URANIUM_HEXAFLUORIDE, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 3), + new MaterialStack(MaterialsElements.getInstance().PHOSPHORUS, 1) }); + + public static final Material LiFBeF2 = new Material( + "Stable Molten Salt Base", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.LITHIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.BERYLLIUM_FLUORIDE, 1) }); + + public static final Material LiFBeF2UF4 = new Material( + "LFTR Fuel Base", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2UF4"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(LiFBeF2, 1), + new MaterialStack(MaterialsFluorides.URANIUM_TETRAFLUORIDE, 1) }); + + // LFTR Blanket Fluids + + // Tier 1 Fuel blanket output + public static final Material LiFThF4 = new Material( + "Thorium Depleted Molten Salt (T Salt)", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiFThF4"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.LITHIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.THORIUM_TETRAFLUORIDE, 1) }); + + // Tier 2 Fuel blanket output + public static final Material LiFBeF2ThF4 = new Material( + "Thorium-Beryllium Depleted Molten Salt (TB Salt)", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2ThF4"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.LITHIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.BERYLLIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.THORIUM_TETRAFLUORIDE, 1) }); + + // Tier 1 Fuel blanket output + public static final Material Sparged_LiFThF4 = new Material( + "Fluorine Sparged T Salt", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiFThF4"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.LITHIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.THORIUM_TETRAFLUORIDE, 1) }); + + // Tier 2 Fuel blanket output + public static final Material Sparged_LiFBeF2ThF4 = new Material( + "Fluorine Sparged TB Salt", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2ThF4"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.LITHIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.BERYLLIUM_FLUORIDE, 1), + new MaterialStack(MaterialsFluorides.THORIUM_TETRAFLUORIDE, 1) }); + + public static final Material UF6F2 = new Material( + "Fluorinated Uranium Hexafluoride (F-UF6)", // Material Name + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, // Neutrons + false, // Uses Blast furnace? + StringUtils.subscript("UF6F2"), // Chemical Formula + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsFluorides.URANIUM_HEXAFLUORIDE, 1), + new MaterialStack(MaterialsElements.getInstance().FLUORINE, 2) }); + + // Secondary material is molten metal + public static final Material NAQ_FUEL_T1 = new Material( + "Naquadah Fuel", + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().NAQUADAH, 2), + new MaterialStack(MaterialsElements.getInstance().TANTALUM, 3) }); + + // Secondary material is a plasma + public static final Material NAQ_FUEL_T2 = new Material( + "Enriched Naquadah Fuel", + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().NAQUADAH_ENRICHED, 2), + new MaterialStack(MaterialsElements.getInstance().TITANIUM, 3) }); + + // Secondary material is a plasma + public static final Material NAQ_FUEL_T3 = new Material( + "Naquadria Fuel", + MaterialState.PURE_LIQUID, // State + null, // Material Colour + -1, // Melting Point in C + -1, // Boiling Point in C + -1, // Protons + -1, + false, // Uses Blast furnace? + // Material Stacks with Percentage of required elements. + new MaterialStack[] { new MaterialStack(MaterialsElements.getInstance().NAQUADRIA, 2), + new MaterialStack(MaterialsElements.getInstance().AMERICIUM, 3) }); + + private static final MaterialsNuclides INSTANCE = new MaterialsNuclides(); + + public static MaterialsNuclides getInstance() { + return INSTANCE; + } +} diff --git a/src/main/java/gtPlusPlus/core/material/nuclear/NUCLIDE.java b/src/main/java/gtPlusPlus/core/material/nuclear/NUCLIDE.java deleted file mode 100644 index ebd24bad07..0000000000 --- a/src/main/java/gtPlusPlus/core/material/nuclear/NUCLIDE.java +++ /dev/null @@ -1,311 +0,0 @@ -package gtPlusPlus.core.material.nuclear; - -import gtPlusPlus.core.client.CustomTextureSet.TextureSets; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialStack; -import gtPlusPlus.core.material.state.MaterialState; -import gtPlusPlus.core.util.data.StringUtils; - -public final class NUCLIDE { - - public static final Material Li2BeF4 = new Material( - "Lithium Tetrafluoroberyllate (LFTB)", // Material Name - MaterialState.LIQUID, // State - TextureSets.NUCLEAR.get(), - null, // Material Colour - 566, // Melting Point in C - 870, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "Li2BeF4"), // Chemical Formula - 4, // Radioactivity Level - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.LITHIUM_FLUORIDE, 2), - new MaterialStack(FLUORIDES.BERYLLIUM_FLUORIDE, 1) }); - - public static final Material LiFBeF2ThF4UF4 = new Material( - "LFTR Fuel 3", // Material Name - MaterialState.LIQUID, // State - TextureSets.NUCLEAR.get(), - null, // Material Colour - 566, // Melting Point in C - 870, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2ThF4UF4"), // Chemical Formula - 5, // Radioactivity Level - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.LITHIUM_FLUORIDE, 65), - new MaterialStack(FLUORIDES.BERYLLIUM_FLUORIDE, 28), new MaterialStack(FLUORIDES.THORIUM_TETRAFLUORIDE, 1), - new MaterialStack(FLUORIDES.URANIUM_TETRAFLUORIDE, 1) }); - - public static final Material LiFBeF2ZrF4UF4 = new Material( - "LFTR Fuel 2", // Material Name - MaterialState.LIQUID, // State - TextureSets.NUCLEAR.get(), - null, // Material Colour - 650, // Melting Point in C - 940, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2ZrF4UF4"), // Chemical Formula - 5, // Radioactivity Level - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.LITHIUM_FLUORIDE, 65), - new MaterialStack(FLUORIDES.BERYLLIUM_FLUORIDE, 28), - new MaterialStack(FLUORIDES.ZIRCONIUM_TETRAFLUORIDE, 5), - new MaterialStack(FLUORIDES.URANIUM_TETRAFLUORIDE, 2) }); - - public static final Material LiFBeF2ZrF4U235 = new Material( - "LFTR Fuel 1", // Material Name - MaterialState.LIQUID, // State - TextureSets.NUCLEAR.get(), - null, // Material Colour - 590, // Melting Point in C - 890, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2ZrF4") + StringUtils.superscript("235U"), // Chemical - // Formula - 5, // Radioactivity Level - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.LITHIUM_FLUORIDE, 55), - new MaterialStack(FLUORIDES.BERYLLIUM_FLUORIDE, 25), - new MaterialStack(FLUORIDES.ZIRCONIUM_TETRAFLUORIDE, 6), - new MaterialStack(ELEMENT.getInstance().URANIUM235, 14) }); - - // Misc - public static final Material BurntLftrFuel_MK1 = new Material( - "Burnt Reactor Fuel I", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiBeF2UF4FP"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().LITHIUM, 1), - new MaterialStack(FLUORIDES.BERYLLIUM_FLUORIDE, 1), new MaterialStack(FLUORIDES.URANIUM_TETRAFLUORIDE, 1), - new MaterialStack(ELEMENT.getInstance().PROTACTINIUM, 1) }); - - public static final Material BurntLftrFuel_MK2 = new Material( - "Burnt Reactor Fuel II", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiBeF2UF4FP"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().LITHIUM, 1), - new MaterialStack(FLUORIDES.BERYLLIUM_FLUORIDE, 1), new MaterialStack(FLUORIDES.URANIUM_TETRAFLUORIDE, 1), - new MaterialStack(ELEMENT.getInstance().PROTACTINIUM, 1) }); - - // LFTR Core Fluids - public static final Material LiFBeF2UF4FP = new Material( - "Uranium Depleted Molten Salt (U Salt)", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2UF4FP"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.LITHIUM_FLUORIDE, 1), - new MaterialStack(FLUORIDES.BERYLLIUM_FLUORIDE, 1), new MaterialStack(FLUORIDES.URANIUM_TETRAFLUORIDE, 1), - new MaterialStack(ELEMENT.getInstance().PROTACTINIUM, 1) }); - - public static final Material Sparged_LiFBeF2UF4FP = new Material( - "Helium Sparged U Salt", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2UF4FP"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.LITHIUM_FLUORIDE, 1), - new MaterialStack(FLUORIDES.BERYLLIUM_FLUORIDE, 1), new MaterialStack(FLUORIDES.URANIUM_TETRAFLUORIDE, 1), - new MaterialStack(ELEMENT.getInstance().PROTACTINIUM, 1) }); - - public static final Material UF6F2FP = new Material( - "Phosphorous Uranium Hexafluoride (P-UF6)", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript("UF6F2FP"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.URANIUM_HEXAFLUORIDE, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 3), - new MaterialStack(ELEMENT.getInstance().PHOSPHORUS, 1) }); - - public static final Material LiFBeF2 = new Material( - "Stable Molten Salt Base", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.LITHIUM_FLUORIDE, 1), - new MaterialStack(FLUORIDES.BERYLLIUM_FLUORIDE, 1) }); - - public static final Material LiFBeF2UF4 = new Material( - "LFTR Fuel Base", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2UF4"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(LiFBeF2, 1), new MaterialStack(FLUORIDES.URANIUM_TETRAFLUORIDE, 1) }); - - // LFTR Blanket Fluids - - // Tier 1 Fuel blanket output - public static final Material LiFThF4 = new Material( - "Thorium Depleted Molten Salt (T Salt)", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiFThF4"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.LITHIUM_FLUORIDE, 1), - new MaterialStack(FLUORIDES.THORIUM_TETRAFLUORIDE, 1) }); - - // Tier 2 Fuel blanket output - public static final Material LiFBeF2ThF4 = new Material( - "Thorium-Beryllium Depleted Molten Salt (TB Salt)", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2ThF4"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.LITHIUM_FLUORIDE, 1), - new MaterialStack(FLUORIDES.BERYLLIUM_FLUORIDE, 1), - new MaterialStack(FLUORIDES.THORIUM_TETRAFLUORIDE, 1) }); - - // Tier 1 Fuel blanket output - public static final Material Sparged_LiFThF4 = new Material( - "Fluorine Sparged T Salt", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiFThF4"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.LITHIUM_FLUORIDE, 1), - new MaterialStack(FLUORIDES.THORIUM_TETRAFLUORIDE, 1) }); - - // Tier 2 Fuel blanket output - public static final Material Sparged_LiFBeF2ThF4 = new Material( - "Fluorine Sparged TB Salt", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript(StringUtils.superscript("7") + "LiFBeF2ThF4"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.LITHIUM_FLUORIDE, 1), - new MaterialStack(FLUORIDES.BERYLLIUM_FLUORIDE, 1), - new MaterialStack(FLUORIDES.THORIUM_TETRAFLUORIDE, 1) }); - - public static final Material UF6F2 = new Material( - "Fluorinated Uranium Hexafluoride (F-UF6)", // Material Name - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, // Neutrons - false, // Uses Blast furnace? - StringUtils.subscript("UF6F2"), // Chemical Formula - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(FLUORIDES.URANIUM_HEXAFLUORIDE, 1), - new MaterialStack(ELEMENT.getInstance().FLUORINE, 2) }); - - // Secondary material is molten metal - public static final Material NAQ_FUEL_T1 = new Material( - "Naquadah Fuel", - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().NAQUADAH, 2), - new MaterialStack(ELEMENT.getInstance().TANTALUM, 3) }); - - // Secondary material is a plasma - public static final Material NAQ_FUEL_T2 = new Material( - "Enriched Naquadah Fuel", - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().NAQUADAH_ENRICHED, 2), - new MaterialStack(ELEMENT.getInstance().TITANIUM, 3) }); - - // Secondary material is a plasma - public static final Material NAQ_FUEL_T3 = new Material( - "Naquadria Fuel", - MaterialState.PURE_LIQUID, // State - null, // Material Colour - -1, // Melting Point in C - -1, // Boiling Point in C - -1, // Protons - -1, - false, // Uses Blast furnace? - // Material Stacks with Percentage of required elements. - new MaterialStack[] { new MaterialStack(ELEMENT.getInstance().NAQUADRIA, 2), - new MaterialStack(ELEMENT.getInstance().AMERICIUM, 3) }); - - private static final NUCLIDE INSTANCE = new NUCLIDE(); - - public static NUCLIDE getInstance() { - return INSTANCE; - } -} diff --git a/src/main/java/gtPlusPlus/core/network/packet/PacketVolumetricFlaskGui.java b/src/main/java/gtPlusPlus/core/network/packet/PacketVolumetricFlaskGui.java new file mode 100644 index 0000000000..449819335f --- /dev/null +++ b/src/main/java/gtPlusPlus/core/network/packet/PacketVolumetricFlaskGui.java @@ -0,0 +1,127 @@ +package gtPlusPlus.core.network.packet; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +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; + +public class PacketVolumetricFlaskGui extends AbstractServerMessageHandler + implements AbstractPacket { + + private int x; + private int y; + private int z; + private int flaskValue; + + public PacketVolumetricFlaskGui() {} + + public PacketVolumetricFlaskGui(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(PacketVolumetricFlaskGui 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, PacketVolumetricFlaskGui 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/main/java/gtPlusPlus/core/network/packet/PacketVolumetricFlaskGui2.java b/src/main/java/gtPlusPlus/core/network/packet/PacketVolumetricFlaskGui2.java new file mode 100644 index 0000000000..35ed2c17dc --- /dev/null +++ b/src/main/java/gtPlusPlus/core/network/packet/PacketVolumetricFlaskGui2.java @@ -0,0 +1,126 @@ +package gtPlusPlus.core.network.packet; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +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; + +public class PacketVolumetricFlaskGui2 extends AbstractClientMessageHandler + implements AbstractPacket { + + private int x; + private int y; + private int z; + private int flaskValue; + + public PacketVolumetricFlaskGui2() {} + + public PacketVolumetricFlaskGui2(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(PacketVolumetricFlaskGui2 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, PacketVolumetricFlaskGui2 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/main/java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui.java b/src/main/java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui.java deleted file mode 100644 index 9dfa1dbad5..0000000000 --- a/src/main/java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui.java +++ /dev/null @@ -1,127 +0,0 @@ -package gtPlusPlus.core.network.packet; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -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; - -public class Packet_VolumetricFlaskGui extends AbstractServerMessageHandler - 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/main/java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui2.java b/src/main/java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui2.java deleted file mode 100644 index 599469191b..0000000000 --- a/src/main/java/gtPlusPlus/core/network/packet/Packet_VolumetricFlaskGui2.java +++ /dev/null @@ -1,126 +0,0 @@ -package gtPlusPlus.core.network.packet; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -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; - -public class Packet_VolumetricFlaskGui2 extends AbstractClientMessageHandler - 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/main/java/gtPlusPlus/core/proxy/ClientProxy.java b/src/main/java/gtPlusPlus/core/proxy/ClientProxy.java index 5f6f93542e..43b1d90648 100644 --- a/src/main/java/gtPlusPlus/core/proxy/ClientProxy.java +++ b/src/main/java/gtPlusPlus/core/proxy/ClientProxy.java @@ -43,24 +43,24 @@ import gtPlusPlus.core.entity.monster.EntitySickBlaze; import gtPlusPlus.core.entity.monster.EntityStaballoyConstruct; import gtPlusPlus.core.entity.projectile.EntityLightningAttack; import gtPlusPlus.core.entity.projectile.EntityToxinballSmall; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.lib.CORE.ConfigSwitches; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.lib.GTPPCore.ConfigSwitches; import gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest; -import gtPlusPlus.nei.NEI_GTPP_Config; -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 gtPlusPlus.nei.GTPPNEIConfig; +import gtPlusPlus.xmod.gregtech.common.render.CapeRenderer; +import gtPlusPlus.xmod.gregtech.common.render.FlaskRenderer; +import gtPlusPlus.xmod.gregtech.common.render.MachineBlockRenderer; import ic2.core.item.ItemFluidCell; public class ClientProxy extends CommonProxy implements Runnable { - private final GTPP_CapeRenderer mCapeRenderer; + private final CapeRenderer mCapeRenderer; @SideOnly(Side.CLIENT) public static boolean mFancyGraphics = false; public ClientProxy() { - mCapeRenderer = new GTPP_CapeRenderer(); + mCapeRenderer = new CapeRenderer(); // Get Graphics Mode. mFancyGraphics = Minecraft.isFancyGraphicsEnabled(); } @@ -93,11 +93,11 @@ public class ClientProxy extends CommonProxy implements Runnable { */ new CustomOreBlockRenderer(); new CustomItemBlockRenderer(); - new GTPP_Render_MachineBlock(); + new MachineBlockRenderer(); - new GTPP_FlaskRenderer(); + new FlaskRenderer(); - MinecraftForge.EVENT_BUS.register(new NEI_GTPP_Config()); + MinecraftForge.EVENT_BUS.register(new GTPPNEIConfig()); super.init(e); } @@ -157,7 +157,7 @@ public class ClientProxy extends CommonProxy implements Runnable { @Override public void onLoadComplete(FMLLoadCompleteEvent event) { - if (CORE.ConfigSwitches.hideUniversalCells) { + if (GTPPCore.ConfigSwitches.hideUniversalCells) { hideUniversalCells(); } super.onLoadComplete(event); diff --git a/src/main/java/gtPlusPlus/core/recipe/LOADER_Machine_Components.java b/src/main/java/gtPlusPlus/core/recipe/LOADER_Machine_Components.java deleted file mode 100644 index a10d2cd05b..0000000000 --- a/src/main/java/gtPlusPlus/core/recipe/LOADER_Machine_Components.java +++ /dev/null @@ -1,114 +0,0 @@ -package gtPlusPlus.core.recipe; - -import gregtech.api.enums.ItemList; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class LOADER_Machine_Components { - - public static void initialise() { - registerDefaultComponents(); - - registerGTNHComponents(); - } - - private static void registerDefaultComponents() { - // Machine Components - CI.electricMotor_LV = ItemList.Electric_Motor_LV.get(1); - CI.electricMotor_MV = ItemList.Electric_Motor_MV.get(1); - CI.electricMotor_HV = ItemList.Electric_Motor_HV.get(1); - CI.electricMotor_EV = ItemList.Electric_Motor_EV.get(1); - CI.electricMotor_IV = ItemList.Electric_Motor_IV.get(1); - CI.electricPump_LV = ItemList.Electric_Pump_LV.get(1); - CI.electricPump_MV = ItemList.Electric_Pump_MV.get(1); - CI.electricPump_HV = ItemList.Electric_Pump_HV.get(1); - CI.electricPump_EV = ItemList.Electric_Pump_EV.get(1); - CI.electricPump_IV = ItemList.Electric_Pump_IV.get(1); - CI.electricPiston_LV = ItemList.Electric_Piston_LV.get(1); - CI.electricPiston_MV = ItemList.Electric_Piston_MV.get(1); - CI.electricPiston_HV = ItemList.Electric_Piston_HV.get(1); - CI.electricPiston_EV = ItemList.Electric_Piston_EV.get(1); - CI.electricPiston_IV = ItemList.Electric_Piston_IV.get(1); - CI.robotArm_LV = ItemList.Robot_Arm_LV.get(1); - CI.robotArm_MV = ItemList.Robot_Arm_MV.get(1); - CI.robotArm_HV = ItemList.Robot_Arm_HV.get(1); - CI.robotArm_EV = ItemList.Robot_Arm_EV.get(1); - CI.robotArm_IV = ItemList.Robot_Arm_IV.get(1); - CI.conveyorModule_LV = ItemList.Conveyor_Module_LV.get(1); - CI.conveyorModule_MV = ItemList.Conveyor_Module_MV.get(1); - CI.conveyorModule_HV = ItemList.Conveyor_Module_HV.get(1); - CI.conveyorModule_EV = ItemList.Conveyor_Module_EV.get(1); - CI.conveyorModule_IV = ItemList.Conveyor_Module_IV.get(1); - CI.emitter_LV = ItemList.Emitter_LV.get(1); - CI.emitter_MV = ItemList.Emitter_MV.get(1); - CI.emitter_HV = ItemList.Emitter_HV.get(1); - CI.emitter_EV = ItemList.Emitter_EV.get(1); - CI.emitter_IV = ItemList.Emitter_IV.get(1); - CI.fieldGenerator_LV = ItemList.Field_Generator_LV.get(1); - CI.fieldGenerator_MV = ItemList.Field_Generator_MV.get(1); - CI.fieldGenerator_HV = ItemList.Field_Generator_HV.get(1); - CI.fieldGenerator_EV = ItemList.Field_Generator_EV.get(1); - CI.fieldGenerator_IV = ItemList.Field_Generator_IV.get(1); - CI.sensor_LV = ItemList.Sensor_LV.get(1); - CI.sensor_MV = ItemList.Sensor_MV.get(1); - CI.sensor_HV = ItemList.Sensor_HV.get(1); - CI.sensor_EV = ItemList.Sensor_EV.get(1); - CI.sensor_IV = ItemList.Sensor_IV.get(1); - CI.fluidRegulator_LV = ItemList.FluidRegulator_LV.get(1); - CI.fluidRegulator_MV = ItemList.FluidRegulator_MV.get(1); - CI.fluidRegulator_HV = ItemList.FluidRegulator_HV.get(1); - CI.fluidRegulator_EV = ItemList.FluidRegulator_EV.get(1); - CI.fluidRegulator_IV = ItemList.FluidRegulator_IV.get(1); - } - - private static void registerGTNHComponents() { - // Machine Components - CI.electricMotor_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32606, 1); - CI.electricMotor_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32607, 1); - CI.electricMotor_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32608, 1); - - CI.electricPump_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32615, 1); - CI.electricPump_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32616, 1); - CI.electricPump_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32617, 1); - - CI.electricPiston_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32645, 1); - CI.electricPiston_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32646, 1); - CI.electricPiston_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32647, 1); - - CI.robotArm_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32655, 1); - CI.robotArm_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32656, 1); - CI.robotArm_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32657, 1); - - CI.conveyorModule_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32635, 1); - CI.conveyorModule_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32636, 1); - CI.conveyorModule_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32637, 1); - - CI.emitter_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32685, 1); - CI.emitter_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32686, 1); - CI.emitter_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32687, 1); - - CI.fieldGenerator_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32675, 1); - CI.fieldGenerator_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32676, 1); - CI.fieldGenerator_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32677, 1); - - CI.sensor_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32695, 1); - CI.sensor_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32696, 1); - CI.sensor_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32697, 1); - - CI.fluidRegulator_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32665, 1); - CI.fluidRegulator_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32666, 1); - CI.fluidRegulator_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32667, 1); - - // Thanks 0lafe - CI.electricMotor_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32596, 1); - CI.electricPump_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32618, 1); - CI.electricPiston_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32648, 1); - CI.robotArm_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32658, 1); - CI.conveyorModule_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32638, 1); - CI.emitter_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32688, 1); - CI.fieldGenerator_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32678, 1); - CI.sensor_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32698, 1); - - } - -} diff --git a/src/main/java/gtPlusPlus/core/recipe/LoaderMachineComponents.java b/src/main/java/gtPlusPlus/core/recipe/LoaderMachineComponents.java new file mode 100644 index 0000000000..b66c508359 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/recipe/LoaderMachineComponents.java @@ -0,0 +1,114 @@ +package gtPlusPlus.core.recipe; + +import gregtech.api.enums.ItemList; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class LoaderMachineComponents { + + public static void initialise() { + registerDefaultComponents(); + + registerGTNHComponents(); + } + + private static void registerDefaultComponents() { + // Machine Components + CI.electricMotor_LV = ItemList.Electric_Motor_LV.get(1); + CI.electricMotor_MV = ItemList.Electric_Motor_MV.get(1); + CI.electricMotor_HV = ItemList.Electric_Motor_HV.get(1); + CI.electricMotor_EV = ItemList.Electric_Motor_EV.get(1); + CI.electricMotor_IV = ItemList.Electric_Motor_IV.get(1); + CI.electricPump_LV = ItemList.Electric_Pump_LV.get(1); + CI.electricPump_MV = ItemList.Electric_Pump_MV.get(1); + CI.electricPump_HV = ItemList.Electric_Pump_HV.get(1); + CI.electricPump_EV = ItemList.Electric_Pump_EV.get(1); + CI.electricPump_IV = ItemList.Electric_Pump_IV.get(1); + CI.electricPiston_LV = ItemList.Electric_Piston_LV.get(1); + CI.electricPiston_MV = ItemList.Electric_Piston_MV.get(1); + CI.electricPiston_HV = ItemList.Electric_Piston_HV.get(1); + CI.electricPiston_EV = ItemList.Electric_Piston_EV.get(1); + CI.electricPiston_IV = ItemList.Electric_Piston_IV.get(1); + CI.robotArm_LV = ItemList.Robot_Arm_LV.get(1); + CI.robotArm_MV = ItemList.Robot_Arm_MV.get(1); + CI.robotArm_HV = ItemList.Robot_Arm_HV.get(1); + CI.robotArm_EV = ItemList.Robot_Arm_EV.get(1); + CI.robotArm_IV = ItemList.Robot_Arm_IV.get(1); + CI.conveyorModule_LV = ItemList.Conveyor_Module_LV.get(1); + CI.conveyorModule_MV = ItemList.Conveyor_Module_MV.get(1); + CI.conveyorModule_HV = ItemList.Conveyor_Module_HV.get(1); + CI.conveyorModule_EV = ItemList.Conveyor_Module_EV.get(1); + CI.conveyorModule_IV = ItemList.Conveyor_Module_IV.get(1); + CI.emitter_LV = ItemList.Emitter_LV.get(1); + CI.emitter_MV = ItemList.Emitter_MV.get(1); + CI.emitter_HV = ItemList.Emitter_HV.get(1); + CI.emitter_EV = ItemList.Emitter_EV.get(1); + CI.emitter_IV = ItemList.Emitter_IV.get(1); + CI.fieldGenerator_LV = ItemList.Field_Generator_LV.get(1); + CI.fieldGenerator_MV = ItemList.Field_Generator_MV.get(1); + CI.fieldGenerator_HV = ItemList.Field_Generator_HV.get(1); + CI.fieldGenerator_EV = ItemList.Field_Generator_EV.get(1); + CI.fieldGenerator_IV = ItemList.Field_Generator_IV.get(1); + CI.sensor_LV = ItemList.Sensor_LV.get(1); + CI.sensor_MV = ItemList.Sensor_MV.get(1); + CI.sensor_HV = ItemList.Sensor_HV.get(1); + CI.sensor_EV = ItemList.Sensor_EV.get(1); + CI.sensor_IV = ItemList.Sensor_IV.get(1); + CI.fluidRegulator_LV = ItemList.FluidRegulator_LV.get(1); + CI.fluidRegulator_MV = ItemList.FluidRegulator_MV.get(1); + CI.fluidRegulator_HV = ItemList.FluidRegulator_HV.get(1); + CI.fluidRegulator_EV = ItemList.FluidRegulator_EV.get(1); + CI.fluidRegulator_IV = ItemList.FluidRegulator_IV.get(1); + } + + private static void registerGTNHComponents() { + // Machine Components + CI.electricMotor_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32606, 1); + CI.electricMotor_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32607, 1); + CI.electricMotor_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32608, 1); + + CI.electricPump_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32615, 1); + CI.electricPump_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32616, 1); + CI.electricPump_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32617, 1); + + CI.electricPiston_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32645, 1); + CI.electricPiston_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32646, 1); + CI.electricPiston_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32647, 1); + + CI.robotArm_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32655, 1); + CI.robotArm_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32656, 1); + CI.robotArm_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32657, 1); + + CI.conveyorModule_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32635, 1); + CI.conveyorModule_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32636, 1); + CI.conveyorModule_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32637, 1); + + CI.emitter_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32685, 1); + CI.emitter_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32686, 1); + CI.emitter_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32687, 1); + + CI.fieldGenerator_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32675, 1); + CI.fieldGenerator_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32676, 1); + CI.fieldGenerator_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32677, 1); + + CI.sensor_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32695, 1); + CI.sensor_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32696, 1); + CI.sensor_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32697, 1); + + CI.fluidRegulator_LuV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32665, 1); + CI.fluidRegulator_ZPM = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32666, 1); + CI.fluidRegulator_UV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32667, 1); + + // Thanks 0lafe + CI.electricMotor_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32596, 1); + CI.electricPump_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32618, 1); + CI.electricPiston_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32648, 1); + CI.robotArm_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32658, 1); + CI.conveyorModule_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32638, 1); + CI.emitter_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32688, 1); + CI.fieldGenerator_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32678, 1); + CI.sensor_UHV = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32698, 1); + + } + +} diff --git a/src/main/java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java b/src/main/java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java deleted file mode 100644 index 5da803b392..0000000000 --- a/src/main/java/gtPlusPlus/core/recipe/RECIPES_GREGTECH.java +++ /dev/null @@ -1,1897 +0,0 @@ -package gtPlusPlus.core.recipe; - -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.enums.Mods.Backpack; -import static gregtech.api.enums.Mods.Baubles; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.brewingRecipes; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.compressorRecipes; -import static gregtech.api.recipe.RecipeMaps.cutterRecipes; -import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; -import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; -import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; -import static gregtech.api.recipe.RecipeMaps.extractorRecipes; -import static gregtech.api.recipe.RecipeMaps.extruderRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes; -import static gregtech.api.recipe.RecipeMaps.fusionRecipes; -import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.BUCKETS; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.INGOTS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; -import static gregtech.api.util.GT_RecipeConstants.CHEMPLANT_CASING_TIER; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; -import static gregtech.api.util.GT_RecipeConstants.FUSION_THRESHOLD; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.alloyBlastSmelterRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.cyclotronRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.thermalBoilerRecipes; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import cpw.mods.fml.common.Loader; -import goodgenerator.items.MyMaterial; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_RecipeConstants; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.item.chemistry.AgriculturalChem; -import gtPlusPlus.core.item.chemistry.GenericChem; -import gtPlusPlus.core.item.chemistry.IonParticles; -import gtPlusPlus.core.item.crafting.ItemDummyResearch; -import gtPlusPlus.core.item.crafting.ItemDummyResearch.ASSEMBLY_LINE_RESEARCH; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.MISC_MATERIALS; -import gtPlusPlus.core.material.ORES; -import gtPlusPlus.core.material.Particle; -import gtPlusPlus.core.material.nuclear.FLUORIDES; -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.xmod.bop.blocks.BOP_Block_Registrator; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; - -public class RECIPES_GREGTECH { - - public static void run() { - Logger.INFO("Loading Recipes through GregAPI for Industrial Multiblocks."); - execute(); - } - - private static void execute() { - electrolyzerRecipes(); - assemblerRecipes(); - distilleryRecipes(); - extractorRecipes(); - fluidExtractorRecipes(); - chemicalReactorRecipes(); - dehydratorRecipes(); - blastFurnaceRecipes(); - largeChemReactorRecipes(); - fusionRecipes(); - compressorRecipes(); - mixerRecipes(); - macerationRecipes(); - centrifugeRecipes(); - cyclotronRecipes(); - blastSmelterRecipes(); - extruderRecipes(); - cuttingSawRecipes(); - breweryRecipes(); - laserEngraverRecipes(); - assemblyLineRecipes(); - fluidHeaterRecipes(); - chemplantRecipes(); - alloySmelterRecipes(); - thermalBoilerRecipes(); - - /* - * Special Recipe handlers - */ - RECIPES_SeleniumProcessing.init(); - RECIPES_RareEarthProcessing.init(); - - addFuels(); - } - - private static void alloySmelterRecipes() { - - // Wood's Glass Laser Lens - RA.stdBuilder() - .itemInputs(MISC_MATERIALS.WOODS_GLASS.getDust(5), ItemList.Shape_Mold_Ball.get(0)) - .itemOutputs(GregtechItemList.Laser_Lens_WoodsGlass.get(1)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_HV) - .addTo(alloySmelterRecipes); - } - - 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) - - // Advanced method for Nitric Acid Production - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(17), CI.getPinkCatalyst(0)) - .fluidInputs(Materials.NitrogenDioxide.getGas(4000L), FluidUtils.getAir(4000), FluidUtils.getWater(2000)) - .fluidOutputs(FluidUtils.getFluidStack("nitricacid", 4000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(CHEMPLANT_CASING_TIER, 3) - .addTo(chemicalPlantRecipes); - - // Advanced recipe for Fluorine Production - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(17), - CI.getPurpleCatalyst(0), - ItemUtils.getSimpleStack(Blocks.sandstone, 64), - ItemUtils.getSimpleStack(Blocks.sandstone, 64)) - .itemOutputs( - FLUORIDES.FLUORITE.getOre(8), - FLUORIDES.FLUORITE.getOre(4), - FLUORIDES.FLUORITE.getOre(4), - FLUORIDES.FLUORITE.getOre(4)) - .fluidInputs(FluidUtils.getFluidStack("nitricacid", 4000), FluidUtils.getAir(8000)) - .duration(10 * SECONDS) - .eut(1024) - .metadata(CHEMPLANT_CASING_TIER, 5) - .addTo(chemicalPlantRecipes); - // Advanced recipe for Fluorine Production - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(17), - CI.getPurpleCatalyst(0), - ItemUtils.getSimpleStack(Blocks.sand, 64), - ItemUtils.getSimpleStack(Blocks.sand, 64)) - .itemOutputs( - FLUORIDES.FLUORITE.getOre(4), - FLUORIDES.FLUORITE.getOre(2), - FLUORIDES.FLUORITE.getOre(2), - FLUORIDES.FLUORITE.getOre(2)) - .fluidInputs(FluidUtils.getFluidStack("nitricacid", 5000), FluidUtils.getAir(12000)) - .duration(10 * SECONDS) - .eut(1024) - .metadata(CHEMPLANT_CASING_TIER, 5) - .addTo(chemicalPlantRecipes); - - // 3NO2 + H2O = 2HNO3 + NO - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(16), CI.getPinkCatalyst(0)) - .fluidInputs(Materials.NitrogenDioxide.getGas(3000L), FluidUtils.getDistilledWater(1000)) - .fluidOutputs(FluidUtils.getFluidStack("nitricacid", 2000), Materials.NitricOxide.getGas(1000L)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(CHEMPLANT_CASING_TIER, 2) - .addTo(chemicalPlantRecipes); - // Produce Boric Acid - // Na2B4O7·10H2O + 2HCl = 4B(OH)3 + 2NaCl + 5H2O - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(21), ItemUtils.getItemStackOfAmountFromOreDict("dustBorax", 23)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustSalt", 4)) - .fluidInputs(FluidUtils.getFluidStack(GenericChem.HydrochloricAcid, 2000)) - .fluidOutputs(FluidUtils.getFluidStack("boricacid", 4000), FluidUtils.getWater(5000)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(CHEMPLANT_CASING_TIER, 3) - .addTo(chemicalPlantRecipes); - - // Produce Th232 - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(22), ELEMENT.getInstance().THORIUM.getDust(16)) - .itemOutputs( - ELEMENT.getInstance().THORIUM.getSmallDust(32), - ELEMENT.getInstance().THORIUM232.getDust(2), - ELEMENT.getInstance().THORIUM232.getSmallDust(2), - ELEMENT.getInstance().URANIUM232.getDust(1)) - .fluidInputs(FluidUtils.getDistilledWater(2000), FluidUtils.getFluidStack("boricacid", 1500)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_EV) - .metadata(CHEMPLANT_CASING_TIER, 4) - .addTo(chemicalPlantRecipes); - - // Modify Sapling into Pine Sapling - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedBioCircuit(6), ItemUtils.getSimpleStack(Blocks.sapling, 32)) - .itemOutputs(ItemUtils.getSimpleStack(BOP_Block_Registrator.sapling_Pine, 16)) - .fluidInputs(FluidUtils.getFluidStack("fluid.geneticmutagen", 2000), FluidUtils.getDistilledWater(8000)) - .duration(120 * SECONDS) - .eut(64) - .metadata(CHEMPLANT_CASING_TIER, 2) - .addTo(chemicalPlantRecipes); - - int aLaureniumTier = ALLOY.LAURENIUM.vTier; - // Adding Recipes for Casings - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(12), - CI.getTieredMachineCasing(aLaureniumTier - 1), - ALLOY.LAURENIUM.getPlate(8), - CI.getGear(aLaureniumTier, 2)) - .itemOutputs(GregtechItemList.Casing_Machine_Custom_3.get(1)) - .fluidInputs( - CI.getTieredFluid(aLaureniumTier, 2 * 144), - CI.getAlternativeTieredFluid(aLaureniumTier - 1, 4 * 144), - CI.getTertiaryTieredFluid(aLaureniumTier - 2, 6 * 144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .metadata(CHEMPLANT_CASING_TIER, 5) - .addTo(chemicalPlantRecipes); - - int aBotmiumTier = ALLOY.BOTMIUM.vTier; - // Adding Recipes for Casings - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(12), - CI.getTieredMachineCasing(aBotmiumTier - 1), - ALLOY.BOTMIUM.getPlate(8), - CI.getGear(aBotmiumTier, 2)) - .itemOutputs(GregtechItemList.Casing_Machine_Custom_4.get(1)) - .fluidInputs( - CI.getTieredFluid(aBotmiumTier, 2 * 144), - CI.getAlternativeTieredFluid(aBotmiumTier - 1, 4 * 144), - CI.getTertiaryTieredFluid(aBotmiumTier - 2, 6 * 144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .metadata(CHEMPLANT_CASING_TIER, 6) - .addTo(chemicalPlantRecipes); - - // Refine GT HF into GT++ HF - if (FluidUtils.doesHydrofluoricAcidGtExist()) { - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(22)) - .fluidInputs(FluidUtils.getHydrofluoricAcid(2000), FluidUtils.getHydrofluoricAcidGT(5000)) - .fluidOutputs(FluidUtils.getHydrofluoricAcid(4500)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(CHEMPLANT_CASING_TIER, 3) - .addTo(chemicalPlantRecipes); - - } - } - - private static void fluidHeaterRecipes() { - RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(20)) - .fluidInputs(Materials.Water.getFluid(1000)) - .fluidOutputs(FluidUtils.getHotWater(1000)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(fluidHeaterRecipes); - } - - private static void fusionRecipes() { - // Hypogen - RA.stdBuilder() - .fluidInputs( - ELEMENT.STANDALONE.DRAGON_METAL.getFluidStack(144), - ELEMENT.STANDALONE.RHUGNOR.getFluidStack(288)) - .fluidOutputs(ELEMENT.STANDALONE.HYPOGEN.getFluidStack(36)) - .duration(6 * MINUTES + 49 * SECONDS + 12 * TICKS) - .eut(TierEU.RECIPE_UHV) - .metadata(FUSION_THRESHOLD, 1_200_000_000) - .addTo(fusionRecipes); - - // Rhugnor - RA.stdBuilder() - .fluidInputs( - MaterialUtils.getMaterial("Infinity", "Neutronium") - .getMolten(144), - ALLOY.QUANTUM.getFluidStack(288)) - .fluidOutputs(ELEMENT.STANDALONE.RHUGNOR.getFluidStack(144)) - .duration(25 * SECONDS + 12 * TICKS) - .eut(TierEU.RECIPE_UV) - .metadata(FUSION_THRESHOLD, 2_000_000_000) - .addTo(fusionRecipes); - } - - private static void assemblyLineRecipes() { - - // Containment Casings - RA.stdBuilder() - .metadata( - RESEARCH_ITEM, - ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_1_CONTAINMENT, 1)) - .metadata(RESEARCH_TIME, 30 * MINUTES) - .itemInputs( - ItemList.Field_Generator_IV.get(32), - ItemList.Electric_Motor_EV.get(64), - ItemList.Energy_LapotronicOrb.get(32), - CI.getTieredComponent(OrePrefixes.cableGt12, 7, 32), - CI.getTieredComponent(OrePrefixes.wireGt16, 6, 64), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Naquadria, 64L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gadolinium, 32L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Samarium, 16L), - ALLOY.ARCANITE.getGear(8), - new Object[] { CI.getTieredCircuitOreDictName(5), 64 }, - new Object[] { CI.getTieredCircuitOreDictName(6), 32 }, - new Object[] { CI.getTieredCircuitOreDictName(7), 16 }, - GregtechItemList.Laser_Lens_Special.get(1), - ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 3, 64)) - .fluidInputs( - ALLOY.NITINOL_60.getFluidStack(144 * 9 * 4), - ALLOY.ENERGYCRYSTAL.getFluidStack(144 * 9 * 8), - ALLOY.TUMBAGA.getFluidStack(144 * 9 * 32), - Materials.Nichrome.getMolten(16 * INGOTS)) - .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockCasings3Misc, 15, 32)) - .eut(TierEU.RECIPE_LuV) - .duration(20 * MINUTES) - .addTo(AssemblyLine); - - // Turbine Automation Port - RA.stdBuilder() - .metadata( - RESEARCH_ITEM, - ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_8_TURBINE_AUTOMATION, 1)) - .metadata(RESEARCH_TIME, 24 * HOURS) - .itemInputs( - CI.getTieredMachineHull(8, 4), - CI.getConveyor(8, 24), - CI.getElectricMotor(7, 32), - CI.getElectricPiston(7, 16), - CI.getEnergyCore(6, 8), - CI.getPlate(8, 24), - CI.getTieredComponent(OrePrefixes.screw, 8, 48), - CI.getTieredComponent(OrePrefixes.bolt, 7, 32), - CI.getTieredComponent(OrePrefixes.rod, 6, 12), - new Object[] { CI.getTieredCircuitOreDictName(7), 20 }, - CI.getTieredComponent(OrePrefixes.rotor, 6, 16)) - .fluidInputs( - CI.getTieredFluid(8, 144 * 32), - CI.getAlternativeTieredFluid(7, 144 * 16), - CI.getTertiaryTieredFluid(7, 144 * 16), - ALLOY.BABBIT_ALLOY.getFluidStack(128 * 144)) - .itemOutputs(GregtechItemList.Hatch_Input_TurbineHousing.get(4)) - .eut(TierEU.RECIPE_UV) - .duration(2 * HOURS) - .addTo(AssemblyLine); - - /* - * Containment casings - */ - ItemStack[] aCoilWire = new ItemStack[] { ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 0, 64), - ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 1, 64), - ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 2, 64), - ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 3, 64), }; - ItemStack[] aGemCasings = new ItemStack[] { GregtechItemList.Battery_Casing_Gem_1.get(1), - GregtechItemList.Battery_Casing_Gem_2.get(1), GregtechItemList.Battery_Casing_Gem_3.get(1), - GregtechItemList.Battery_Casing_Gem_4.get(1), }; - ItemStack[] aResearch = new ItemStack[] { Particle.getBaseParticle(Particle.UNKNOWN), - GregtechItemList.Battery_Casing_Gem_1.get(1), GregtechItemList.Battery_Casing_Gem_2.get(1), - GregtechItemList.Battery_Casing_Gem_3.get(1), }; - - int aCasingSlot = 0; - for (int j = 6; j < 10; j++) { - RA.stdBuilder() - .metadata(RESEARCH_ITEM, aResearch[aCasingSlot]) - .metadata(RESEARCH_TIME, 1 * HOURS) - .itemInputs( - CI.getTieredComponent(OrePrefixes.plate, j - 1, 16), - CI.getTieredComponent(OrePrefixes.cableGt08, j + 1, 32), - CI.getTieredComponent(OrePrefixes.gearGt, j - 1, 4), - aCoilWire[aCasingSlot]) - .fluidInputs( - CI.getTieredFluid(j, 144 * 8), - CI.getTertiaryTieredFluid(j - 2, 144 * 16), - CI.getAlternativeTieredFluid(j, 144 * 16)) - .itemOutputs(aGemCasings[aCasingSlot++]) - .eut(GT_Values.VP[j]) - .duration(2 * MINUTES) - .addTo(AssemblyLine); - } - - /* - * Gem Battery Recipes - */ - - ItemStack[] aGemBatteries = new ItemStack[] { GregtechItemList.Battery_Gem_1.get(1), - GregtechItemList.Battery_Gem_2.get(1), GregtechItemList.Battery_Gem_3.get(1), - GregtechItemList.Battery_Gem_4.get(1), }; - - ItemStack[] aExoticInputs = new ItemStack[] { Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.ELECTRON), Particle.getBaseParticle(Particle.CHARM), - Particle.getBaseParticle(Particle.GRAVITON) }; - aCasingSlot = 0; - for (int j = 6; j < 10; j++) { - RA.stdBuilder() - .metadata(RESEARCH_ITEM, aExoticInputs[aCasingSlot]) - .metadata(RESEARCH_TIME, 5 * HOURS) - .itemInputs( - aGemCasings[aCasingSlot], - ItemUtils.getSimpleStack(aExoticInputs[aCasingSlot], 16), - CI.getTieredComponent(OrePrefixes.plate, j, 16), - new Object[] { CI.getTieredCircuitOreDictName(j), 8 }, - CI.getTieredComponent(OrePrefixes.wireGt16, j + 1, 32), - CI.getTieredComponent(OrePrefixes.bolt, j, 8), - CI.getTieredComponent(OrePrefixes.screw, j - 1, 8)) - .fluidInputs( - CI.getTieredFluid(j, 144 * 1 * 16), - CI.getTertiaryTieredFluid(j - 2, 144 * 2 * 16), - CI.getAlternativeTieredFluid(j, 144 * 16), - CI.getTertiaryTieredFluid(j - 1, 144 * 16)) - .itemOutputs(aGemBatteries[aCasingSlot++]) - .eut(GT_Values.VP[j]) - .duration(2 * MINUTES) - .addTo(AssemblyLine); - } - - if (Baubles.isModLoaded()) { - // Nano Healer - RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemUtils.simpleMetaStack(Items.golden_apple, 1, 1)) - .metadata(RESEARCH_TIME, 10 * MINUTES) - .itemInputs( - ItemUtils.getSimpleStack(aGemCasings[2], 4), - CI.getTieredComponent(OrePrefixes.plate, 8, 32), - new Object[] { CI.getTieredCircuitOreDictName(7), 16 }, - CI.getTieredComponent(OrePrefixes.cableGt02, 7, 16), - CI.getTieredComponent(OrePrefixes.gearGt, 6, 6), - CI.getTieredComponent(OrePrefixes.screw, 7, 16), - CI.getTieredComponent(OrePrefixes.bolt, 5, 24), - CI.getTieredComponent(OrePrefixes.frameGt, 4, 12), - ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 3, 64)) - .fluidInputs( - CI.getTieredFluid(7, 144 * 18 * 16), - CI.getTertiaryTieredFluid(7, 144 * 18 * 16), - CI.getAlternativeTieredFluid(6, 144 * 18 * 16), - CI.getAlternativeTieredFluid(7, 144 * 18 * 16)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("miscutils:personalHealingDevice", 1)) - .eut(TierEU.RECIPE_ZPM) - .duration(1 * HOURS) - .addTo(AssemblyLine); - - // Charge Pack LuV-UV - - ItemStack[] aChargeResearch = new ItemStack[] { - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore7", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore8", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore9", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore10", 1), }; - - ItemStack[] aChargeOutputs = new ItemStack[] { ItemUtils.getSimpleStack(ModItems.itemChargePack_High_1, 1), - ItemUtils.getSimpleStack(ModItems.itemChargePack_High_2, 1), - ItemUtils.getSimpleStack(ModItems.itemChargePack_High_3, 1), - ItemUtils.getSimpleStack(ModItems.itemChargePack_High_4, 1), }; - - int aCurrSlot = 0; - for (int h = 6; h < 10; h++) { - RA.stdBuilder() - .metadata(RESEARCH_ITEM, aChargeResearch[aCurrSlot]) - .metadata(RESEARCH_TIME, 10 * (aCurrSlot + 1) * MINUTES) - .itemInputs( - ItemUtils.getSimpleStack(aGemBatteries[aCurrSlot], 2), - aCoilWire[aCurrSlot], - CI.getTieredComponent(OrePrefixes.plate, h, 8), - new Object[] { CI.getTieredCircuitOreDictName(h), 4 }, - new Object[] { CI.getTieredCircuitOreDictName(h - 1), 8 }, - CI.getTieredComponent(OrePrefixes.cableGt12, h - 1, 16), - CI.getTieredComponent(OrePrefixes.screw, h, 16), - CI.getTieredComponent(OrePrefixes.bolt, h - 2, 32), - CI.getFieldGenerator(h - 1, 1)) - .fluidInputs( - CI.getTieredFluid(h, 144 * 4 * 8), - CI.getTertiaryTieredFluid(h - 1, 144 * 4 * 8), - CI.getAlternativeTieredFluid(h - 1, 144 * 4 * 8), - CI.getAlternativeTieredFluid(h - 2, 144 * 4 * 8)) - .itemOutputs(aChargeOutputs[aCurrSlot]) - .eut(GT_Values.VP[h]) - .duration((aCurrSlot + 1) * HOURS) - .addTo(AssemblyLine); - aCurrSlot++; - } - - // Cloaking device - RA.stdBuilder() - .metadata( - RESEARCH_ITEM, - ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_9_CLOAKING, 1)) - .metadata(RESEARCH_TIME, 10 * MINUTES) - .itemInputs( - ItemUtils.getSimpleStack(aGemCasings[3], 4), - CI.getTieredComponent(OrePrefixes.plate, 8, 32), - new Object[] { CI.getTieredCircuitOreDictName(7), 16 }, - CI.getTieredComponent(OrePrefixes.cableGt04, 8, 16), - CI.getTieredComponent(OrePrefixes.gearGt, 7, 6), - CI.getTieredComponent(OrePrefixes.screw, 8, 16), - CI.getTieredComponent(OrePrefixes.bolt, 7, 24), - CI.getTieredComponent(OrePrefixes.frameGt, 5, 12), - ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 3, 64)) - .fluidInputs( - CI.getTieredFluid(8, 144 * 18 * 16), - CI.getTertiaryTieredFluid(8, 144 * 18 * 16), - CI.getAlternativeTieredFluid(7, 144 * 18 * 16), - CI.getAlternativeTieredFluid(8, 144 * 18 * 16)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("miscutils:personalCloakingDevice-0.0", 1)) - .eut(TierEU.RECIPE_UV) - .duration(1 * HOURS) - .addTo(AssemblyLine); - } - - RA.stdBuilder() - .metadata(RESEARCH_ITEM, GregtechItemList.Industrial_AlloyBlastSmelter.get(1, new Object() {})) - .metadata(RESEARCH_TIME, 30 * MINUTES) - .itemInputs( - GregtechItemList.Industrial_AlloyBlastSmelter.get(64L, new Object() {}), - GregtechItemList.Industrial_AlloyBlastSmelter.get(64L, new Object() {}), - GregtechItemList.Industrial_AlloyBlastSmelter.get(64L, new Object() {}), - GregtechItemList.Industrial_AlloyBlastSmelter.get(64L, new Object() {}), - ItemList.UV_Coil.get(16L, new Object() {}), - ItemList.Conveyor_Module_UV.get(4L, new Object() {}), - new Object[] { OrePrefixes.circuit.get(Materials.UV), 8 }, - new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 16 }, - ItemList.Circuit_Chip_PPIC.get(16, new Object() {}), - ALLOY.PIKYONIUM.getPlate(16), - ALLOY.CINOBITE.getScrew(32)) - .fluidInputs( - ALLOY.PIKYONIUM.getFluidStack(144 * 8), - ALLOY.INDALLOY_140.getFluidStack(144 * 9), - Materials.SolderingAlloy.getMolten(144 * 10)) - .itemOutputs(GregtechItemList.Mega_AlloyBlastSmelter.get(1L)) - .eut(TierEU.RECIPE_UHV / 2) - .duration(1 * MINUTES) - .addTo(AssemblyLine); - } - - private static void laserEngraverRecipes() { - - // Laser Sensors and Emitters together - GregtechItemList[] aTransParts = new GregtechItemList[] { GregtechItemList.TransmissionComponent_LV, - GregtechItemList.TransmissionComponent_MV, GregtechItemList.TransmissionComponent_HV, - GregtechItemList.TransmissionComponent_EV, GregtechItemList.TransmissionComponent_IV, - GregtechItemList.TransmissionComponent_LuV, GregtechItemList.TransmissionComponent_ZPM, - GregtechItemList.TransmissionComponent_UV, GregtechItemList.TransmissionComponent_UHV, }; - for (int i = 1; i < aTransParts.length; i++) { - RA.stdBuilder() - .itemInputs(CI.getEmitter(i, 2), CI.getSensor(i, 2)) - .itemOutputs(aTransParts[i - 1].get(1)) - .duration(5 * SECONDS) - .eut(GT_Values.VP[i]) - .addTo(laserEngraverRecipes); - } - - RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tungsten, 6L), - GregtechItemList.Laser_Lens_Special.get(0)) - .itemOutputs(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getDust(1)) - .duration(3 * MINUTES) - .eut(TierEU.RECIPE_UEV) - .addTo(laserEngraverRecipes); - - RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 8L), - GregtechItemList.Laser_Lens_Special.get(0)) - .itemOutputs(ELEMENT.STANDALONE.ASTRAL_TITANIUM.getDust(1)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_UHV) - .addTo(laserEngraverRecipes); - - RA.stdBuilder() - .itemInputs(ALLOY.NITINOL_60.getBlock(2), GregtechItemList.Laser_Lens_Special.get(0)) - .itemOutputs(ELEMENT.STANDALONE.ADVANCED_NITINOL.getBlock(1)) - .duration(1 * MINUTES) - .eut(TierEU.RECIPE_UV) - .addTo(laserEngraverRecipes); - - RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 64L), - GregtechItemList.Laser_Lens_Special.get(0)) - .itemOutputs(ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getDust(1)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_UHV) - .addTo(laserEngraverRecipes); - - RA.stdBuilder() - .itemInputs(CI.getFieldGenerator(6, 1), CI.getEmitter(7, 2)) - .itemOutputs(ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_1_CONTAINMENT, 1)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(laserEngraverRecipes); - - // Distillus Upgrade Chip - RA.stdBuilder() - .itemInputs( - GregtechItemList.Laser_Lens_WoodsGlass.get(0), - ItemUtils.simpleMetaStack(AgriculturalChem.mBioCircuit, 20, 1)) - .itemOutputs(GregtechItemList.Distillus_Upgrade_Chip.get(1)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(laserEngraverRecipes); - } - - private static void breweryRecipes() { - - if (Loader.isModLoaded("OpenBlocks")) { - RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(14)) - .fluidInputs(FluidRegistry.getFluidStack("mobessence", 100)) - .fluidOutputs(FluidRegistry.getFluidStack("xpjuice", 1332)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(brewingRecipes); - RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(14)) - .fluidInputs(FluidRegistry.getFluidStack("xpjuice", 1332)) - .fluidOutputs(FluidRegistry.getFluidStack("mobessence", 100)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(brewingRecipes); - } - - RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(BOP_Block_Registrator.sapling_Rainforest)) - .fluidInputs(Materials.Water.getFluid(100L)) - .fluidOutputs(Materials.Biomass.getFluid(100L)) - .duration(1 * MINUTES) - .eut(3) - .addTo(brewingRecipes); - RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(BOP_Block_Registrator.sapling_Rainforest)) - .fluidInputs(Materials.Honey.getFluid(100L)) - .fluidOutputs(Materials.Biomass.getFluid(100L)) - .duration(1 * MINUTES) - .eut(3) - .addTo(brewingRecipes); - RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(BOP_Block_Registrator.sapling_Rainforest)) - .fluidInputs(FluidUtils.getFluidStack("juice", 100)) - .fluidOutputs(Materials.Biomass.getFluid(100L)) - .duration(1 * MINUTES) - .eut(3) - .addTo(brewingRecipes); - } - - private static void cuttingSawRecipes() { - RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("blockMeatRaw", 1)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("plateMeatRaw", 9)) - .duration(16 * TICKS) - .eut(TierEU.RECIPE_ULV) - .addTo(cutterRecipes); - } - - private static void electrolyzerRecipes() { - RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(ModItems.dustDecayedRadium226, 1)) - .fluidOutputs(FluidUtils.getFluidStack("radon", 144)) - .duration(1 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_HV / 2) - .addTo(electrolyzerRecipes); - } - - private static void extruderRecipes() { - // Osmium Credits - RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("blockOsmium", 1), ItemList.Shape_Mold_Credit.get(0)) - .itemOutputs(ItemList.Credit_Greg_Osmium.get(1)) - .duration(6 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_EV / 2) - .addTo(extruderRecipes); - } - - private static void blastSmelterRecipes() { - - // Eglin Steel - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - ELEMENT.getInstance().IRON.getDust(4), - ALLOY.KANTHAL.getDust(1), - ALLOY.INVAR.getDust(5), - ELEMENT.getInstance().SULFUR.getDust(1), - ELEMENT.getInstance().CARBON.getDust(1), - ELEMENT.getInstance().SILICON.getDust(4)) - .fluidOutputs(ALLOY.EGLIN_STEEL.getFluidStack(16 * 144)) - .eut(TierEU.RECIPE_MV) - .duration(45 * SECONDS) - .addTo(alloyBlastSmelterRecipes); - - // HG1223 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(5), - ELEMENT.getInstance().BARIUM.getDust(2), - ELEMENT.getInstance().CALCIUM.getDust(2), - ELEMENT.getInstance().COPPER.getDust(3)) - .fluidOutputs(ALLOY.HG1223.getFluidStack(16 * 144)) - .eut(TierEU.RECIPE_LuV) - .duration(2 * MINUTES) - .addTo(alloyBlastSmelterRecipes); - - // NITINOL_60 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(2), - ELEMENT.getInstance().TITANIUM.getDust(3), - ELEMENT.getInstance().NICKEL.getDust(2)) - .fluidOutputs(ALLOY.NITINOL_60.getFluidStack(5 * 144)) - .eut(TierEU.RECIPE_IV) - .duration(1 * MINUTES + 15 * SECONDS) - .addTo(alloyBlastSmelterRecipes); - - // INDALLOY_140 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(5), - ELEMENT.getInstance().BISMUTH.getDust(47), - ELEMENT.getInstance().LEAD.getDust(25), - ELEMENT.getInstance().TIN.getDust(13), - ELEMENT.getInstance().CADMIUM.getDust(10), - ELEMENT.getInstance().INDIUM.getDust(5)) - .fluidOutputs(ALLOY.INDALLOY_140.getFluidStack(100 * 144)) - .eut(TierEU.RECIPE_IV) - .duration(40 * SECONDS) - .addTo(alloyBlastSmelterRecipes); - - // Germanium Roasting - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(15), - ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedSphalerite", 8), - ELEMENT.getInstance().CARBON.getDust(32)) - .fluidInputs(Materials.SulfuricAcid.getFluid(2000)) - .fluidOutputs(ELEMENT.getInstance().GERMANIUM.getFluidStack(288)) - .eut(4_000) - .duration(5 * MINUTES) - .addTo(alloyBlastSmelterRecipes); - - // Rhenium Roasting - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(20), - ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedScheelite", 8), - ELEMENT.getInstance().CARBON.getDust(32)) - .fluidInputs(Materials.SulfuricAcid.getFluid(10000)) - .fluidOutputs(ELEMENT.getInstance().RHENIUM.getFluidStack(144)) - .eut(4_000) - .duration(5 * MINUTES) - .addTo(alloyBlastSmelterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(20), - ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedMolybdenite", 8), - ELEMENT.getInstance().CARBON.getDust(32)) - .fluidInputs(Materials.SulfuricAcid.getFluid(7500)) - .fluidOutputs(ELEMENT.getInstance().RHENIUM.getFluidStack(144)) - .eut(4_000) - .duration(5 * MINUTES) - .addTo(alloyBlastSmelterRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(20), - ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedMolybdenum", 8), - ELEMENT.getInstance().CARBON.getDust(32)) - .fluidInputs(Materials.SulfuricAcid.getFluid(5000)) - .fluidOutputs(ELEMENT.getInstance().RHENIUM.getFluidStack(288)) - .eut(4_000) - .duration(5 * MINUTES) - .addTo(alloyBlastSmelterRecipes); - - // Thallium Roasting - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(21), - ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedZinc", 3), - ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedPyrite", 4), - ELEMENT.getInstance().CARBON.getDust(16)) - .fluidInputs(Materials.SulfuricAcid.getFluid(1250)) - .fluidOutputs(ELEMENT.getInstance().THALLIUM.getFluidStack(288)) - .eut(TierEU.RECIPE_IV) - .duration(1 * MINUTES + 15 * SECONDS) - .noOptimize() - .addTo(alloyBlastSmelterRecipes); - - // Strontium processing - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(21), - MISC_MATERIALS.STRONTIUM_OXIDE.getDust(8), - ELEMENT.getInstance().ALUMINIUM.getDust(8)) - .itemOutputs(ELEMENT.getInstance().ALUMINIUM.getIngot(8), ELEMENT.getInstance().STRONTIUM.getIngot(8)) - .fluidOutputs(ELEMENT.getInstance().OXYGEN.getFluidStack(8000)) - .eut(TierEU.RECIPE_EV) - .duration(2 * MINUTES) - .addTo(alloyBlastSmelterRecipes); - - // molten botmium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(4), - ItemUtils.getItemStackOfAmountFromOreDict("dustNitinol60", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustOsmium", 6), - ItemUtils.getItemStackOfAmountFromOreDict("dustRuthenium", 6), - ItemUtils.getItemStackOfAmountFromOreDict("dustThallium", 3)) - .fluidOutputs(ALLOY.BOTMIUM.getFluidStack(2304)) - .eut(TierEU.RECIPE_UV) - .duration(2 * MINUTES) - .addTo(alloyBlastSmelterRecipes); - - // molten precious metals alloy - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(6), - ItemUtils.getItemStackOfAmountFromOreDict("dustRuthenium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRhodium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustPalladium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustPlatinum", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustOsmium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustIridium", 1)) - .fluidOutputs(FluidUtils.getFluidStack("molten.precious metals alloy", 864)) - .eut(TierEU.RECIPE_UEV) - .duration(9 * MINUTES) - .addTo(alloyBlastSmelterRecipes); - - // lossless phonon transfer medium - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(5), - WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.dust, 5), - MyMaterial.metastableOganesson.get(OrePrefixes.dust, 1), - Materials.Praseodymium.getDust(15), - Materials.SuperconductorUIVBase.getDust(6)) - .fluidInputs(MaterialsUEVplus.PhononCrystalSolution.getFluid(4000L)) - .fluidOutputs(MaterialsUEVplus.PhononMedium.getFluid(1000L)) - .eut(TierEU.RECIPE_UIV) - .duration(2 * MINUTES) - .addTo(alloyBlastSmelterRecipes); - } - - private static void dehydratorRecipes() { - Logger.INFO("Loading Recipes for Chemical Dehydrator."); - - ItemStack cropGrape = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cropGrape", 1); - ItemStack foodRaisins = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("foodRaisins", 1); - - if (cropGrape != null && foodRaisins != null) { - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedBioCircuit(20), cropGrape) - .itemOutputs(foodRaisins) - .eut(2) - .duration(10 * TICKS) - .addTo(chemicalDehydratorRecipes); - } - - // Process Waste Water - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedBioCircuit(21)) - .itemOutputs( - ItemUtils.getSimpleStack(Blocks.dirt), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L)) - .outputChances(20_00, 5_00, 10, 7, 6, 5, 4, 3, 2) - .fluidInputs(FluidUtils.getFluidStack("sludge", 1000)) - .fluidOutputs(Materials.Methane.getGas(100)) - .eut(TierEU.RECIPE_HV) - .duration(2 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - // C8H10 = C8H8 + 2H - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(18), CI.emptyCells(3)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("cellStyrene", 1), - ItemUtils.getItemStackOfAmountFromOreDict("cellHydrogen", 2)) - .fluidInputs(FluidUtils.getFluidStack("fluid.ethylbenzene", 1000)) - .eut(TierEU.RECIPE_LV) - .duration(3 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - /* - * Add custom recipes for drying leather - */ - if (Backpack.isModLoaded()) { - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(18), new ItemStack(Items.leather, 2)) - .itemOutputs(ItemUtils.getCorrectStacktype("Backpack:tannedLeather", 1)) - .fluidInputs(FluidUtils.getFluidStack("fluid.ethylbenzene", 1000)) - .eut(180) - .duration(5 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - if (NewHorizonsCoreMod.isModLoaded()) { - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ArtificialLeather", 2L, 0)) - .itemOutputs(ItemUtils.getCorrectStacktype("Backpack:tannedLeather", 1)) - .fluidInputs(FluidUtils.getFluidStack("fluid.ethylbenzene", 1000)) - .eut(180) - .duration(5 * SECONDS) - .addTo(chemicalDehydratorRecipes); - } - } - // Alternative ACETIC ANHYDRIDE recipe for Kevlar Line - // 2C2H4O2 = C4H6O3 + H2O - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(18), CI.emptyCells(1)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("cellWater", 1)) - .fluidInputs(FluidUtils.getFluidStack("aceticacid", 2000)) - .fluidOutputs(MISC_MATERIALS.ACETIC_ANHYDRIDE.getFluidStack(1000)) - .eut(TierEU.RECIPE_HV) - .duration(30 * SECONDS) - .addTo(chemicalDehydratorRecipes); - } - - private static void largeChemReactorRecipes() { - // Styrene - // C8H10 = C8H8 + 2H - RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(24)) - .itemOutputs() - .fluidInputs(FluidUtils.getFluidStack("fluid.ethylbenzene", 1000)) - .fluidOutputs(Materials.Styrene.getFluid(1000L), Materials.Hydrogen.getGas(2000)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(multiblockChemicalReactorRecipes); - - // Short-cut Styrene - // C6H6 + C2H4 = C8H8 + 2H - RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(24)) - .itemOutputs() - .fluidInputs(Materials.Ethylene.getGas(500L), Materials.Benzene.getFluid(500L)) - .fluidOutputs(Materials.Styrene.getFluid(500L), Materials.Hydrogen.getGas(1000)) - .duration(12 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(multiblockChemicalReactorRecipes); - } - - private static void assemblerRecipes() { - - RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Vanadium, 32L), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.VanadiumSteel, 8L)) - .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemHalfCompleteCasings, 0, 4)) - .fluidInputs(Materials.Oxygen.getGas(8000L)) - .duration(16 * SECONDS) - .eut(TierEU.RECIPE_MV / 2) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - ItemUtils.simpleMetaStack(ModItems.itemHalfCompleteCasings, 0, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.VanadiumGallium, 8L)) - .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemHalfCompleteCasings, 1, 8)) - .fluidInputs(Materials.Tantalum.getMolten(4 * INGOTS)) - .duration(32 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - ItemUtils.simpleMetaStack(ModItems.itemHalfCompleteCasings, 1, 1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 4L), - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(3), 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 2L)) - .itemOutputs(ItemUtils.getSimpleStack(GregtechItemList.Casing_Vanadium_Redox.get(1), 1)) - .fluidInputs(Materials.Oxygen.getGas(16 * BUCKETS)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(TierEU.RECIPE_HV / 2) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Vanadium_Redox.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 4L), - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(4), 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorEV, 2L)) - .itemOutputs(GregtechItemList.Casing_Vanadium_Redox_IV.get(1)) - .fluidInputs(Materials.Nitrogen.getGas(16 * BUCKETS)) - .duration(6 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Vanadium_Redox_IV.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.TungstenSteel, 4L), - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(5), 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 2L)) - .itemOutputs(GregtechItemList.Casing_Vanadium_Redox_LuV.get(1)) - .fluidInputs(Materials.Helium.getGas(8 * BUCKETS)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Vanadium_Redox_LuV.get(1), - ItemUtils.getItemStackOfAmountFromOreDict("plateAlloyIridium", 16), - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(6), 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 2L)) - .itemOutputs(GregtechItemList.Casing_Vanadium_Redox_ZPM.get(1)) - .fluidInputs(Materials.Argon.getGas(4 * BUCKETS)) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Vanadium_Redox_ZPM.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Naquadah, 4L), - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(7), 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 2L)) - .itemOutputs(GregtechItemList.Casing_Vanadium_Redox_UV.get(1)) - .fluidInputs(Materials.Radon.getGas(4 * BUCKETS)) - .duration(50 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Vanadium_Redox_UV.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Americium, 4L), - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(8), 4), - GT_OreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUV, 2L)) - .itemOutputs(GregtechItemList.Casing_Vanadium_Redox_MAX.get(1)) - .fluidInputs(FluidUtils.getFluidStack("krypton", 500)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(CI.explosiveITNT, 2), - ItemUtils.getSimpleStack(CI.explosiveTNT, 4), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 2L), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.Iron, 1L)) - .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockMiningExplosive, 3)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_MV / 2) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.NetherStar, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 8L), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.BlackSteel, 8L)) - .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockWitherGuard, 64)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - CI.fluidRegulator_LV, - CI.electricMotor_LV, - CI.getTieredComponent(OrePrefixes.bolt, 1, 8), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Brass, 1L), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Brass, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 2L)) - .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 1, 1)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - CI.fluidRegulator_MV, - CI.electricMotor_MV, - CI.getTieredComponent(OrePrefixes.bolt, 2, 8), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Invar, 1L), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Invar, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2L)) - .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 2, 1)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - CI.fluidRegulator_HV, - CI.electricMotor_HV, - CI.getTieredComponent(OrePrefixes.bolt, 3, 8), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Chrome, 1L), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Chrome, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 2L)) - .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 3, 1)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs( - CI.fluidRegulator_EV, - CI.electricMotor_EV, - CI.getTieredComponent(OrePrefixes.bolt, 4, 8), - GT_OreDictUnificator.get(OrePrefixes.ring, Materials.Titanium, 1L), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 1L), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2L)) - .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 4, 1)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 1, 1), GT_Utility.getIntegratedCircuit(20)) - .itemOutputs(ItemUtils.simpleMetaStack(ModItems.toolGregtechPump, 1000, 1)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 2, 1), GT_Utility.getIntegratedCircuit(20)) - .itemOutputs(ItemUtils.simpleMetaStack(ModItems.toolGregtechPump, 1001, 1)) - .duration(6 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 3, 1), GT_Utility.getIntegratedCircuit(20)) - .itemOutputs(ItemUtils.simpleMetaStack(ModItems.toolGregtechPump, 1002, 1)) - .duration(24 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - RA.stdBuilder() - .itemInputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 4, 1), GT_Utility.getIntegratedCircuit(20)) - .itemOutputs(ItemUtils.simpleMetaStack(ModItems.toolGregtechPump, 1003, 1)) - .duration(1 * MINUTES + 36 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - // Low tier Charge Packs - - final ItemStack[] aPackBatteries = new ItemStack[] { ItemList.Battery_RE_LV_Lithium.get(4), - ItemList.Battery_RE_MV_Lithium.get(4), ItemList.Battery_RE_HV_Lithium.get(4), - GregtechItemList.Battery_RE_EV_Lithium.get(4), ItemList.Energy_LapotronicOrb.get(4), }; - final ItemStack[] aPackPlates = new ItemStack[] { CI.getPlate(1, 8), CI.getPlate(2, 8), CI.getPlate(3, 8), - CI.getPlate(4, 8), CI.getPlate(5, 8), }; - final ItemStack[] aPackWire = new ItemStack[] { CI.getTieredComponent(OrePrefixes.wireGt02, 1, 6), - CI.getTieredComponent(OrePrefixes.wireGt04, 2, 6), CI.getTieredComponent(OrePrefixes.wireGt08, 3, 6), - CI.getTieredComponent(OrePrefixes.wireGt12, 4, 6), CI.getTieredComponent(OrePrefixes.wireGt16, 5, 6), }; - final ItemStack[] aPackCircuit = new ItemStack[] { CI.getTieredComponent(OrePrefixes.circuit, 1, 4), - CI.getTieredComponent(OrePrefixes.circuit, 2, 4), CI.getTieredComponent(OrePrefixes.circuit, 3, 4), - CI.getTieredComponent(OrePrefixes.circuit, 4, 4), CI.getTieredComponent(OrePrefixes.circuit, 5, 4), }; - final ItemStack[] aPackRing = new ItemStack[] { CI.getTieredComponent(OrePrefixes.ring, 1, 12), - CI.getTieredComponent(OrePrefixes.ring, 2, 12), CI.getTieredComponent(OrePrefixes.ring, 3, 12), - CI.getTieredComponent(OrePrefixes.ring, 4, 12), CI.getTieredComponent(OrePrefixes.ring, 5, 12), }; - final ItemStack[] aPackOutput = new ItemStack[] { ItemUtils.getSimpleStack(ModItems.itemChargePack_Low_1), - ItemUtils.getSimpleStack(ModItems.itemChargePack_Low_2), - ItemUtils.getSimpleStack(ModItems.itemChargePack_Low_3), - ItemUtils.getSimpleStack(ModItems.itemChargePack_Low_4), - ItemUtils.getSimpleStack(ModItems.itemChargePack_Low_5) }; - - for (int i = 1; i < 6; i++) { - - int aAS = i - 1; - - RA.stdBuilder() - .itemInputs( - aPackPlates[aAS], - aPackRing[aAS], - aPackWire[aAS], - aPackCircuit[aAS], - aPackBatteries[aAS], - CI.getSensor(i, 4)) - .itemOutputs(aPackOutput[aAS]) - .fluidInputs(CI.getTieredFluid(i, (144 * 4))) - .duration(30 * i * SECONDS) - .eut(GT_Values.VP[i]) - .addTo(assemblerRecipes); - } - - if (Baubles.isModLoaded()) { - - // Turbine Housing Research Page - RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(17), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Trinium, 64L), - CI.getSensor(6, 6), - CI.getBolt(7, 64), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Platinum, 64L), - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(7), 12)) - .itemOutputs( - ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_8_TURBINE_AUTOMATION, 1)) - .fluidInputs(CI.getAlternativeTieredFluid(7, 144 * 32)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - - // Cloaking Device Research Page - RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(17), - ItemUtils.getSimpleStack(ModItems.itemCircuitLFTR, 4), - CI.getFieldGenerator(6, 16), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Palladium, 32L), - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(6), 12)) - .itemOutputs(ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_9_CLOAKING, 1)) - .fluidInputs(CI.getAlternativeTieredFluid(7, 144 * 32)) - .duration(10 * MINUTES) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - } - } - - private static void distilleryRecipes() { - Logger.INFO("Registering Distillery/Distillation Tower Recipes."); - RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(4)) - .fluidInputs(Materials.Air.getGas(1000L)) - .fluidOutputs(Materials.Helium.getGas(1L)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(distilleryRecipes); - - RA.stdBuilder() - .fluidInputs(Materials.Air.getGas(20000L)) - .fluidOutputs(Materials.Helium.getGas(25L)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV / 2) - .addTo(distillationTowerRecipes); - - // Apatite Distillation - /* - * so if you dissolve aparite in sulphuric acid you'll get a mixture of SO2, H2O, HF and HCl - */ - - RA.stdBuilder() - .fluidInputs(FluidUtils.getFluidStack("sulfuricapatite", 5200)) - .fluidOutputs( - FluidUtils.getFluidStack("sulfurousacid", 3800), - FluidUtils.getFluidStack("hydrogenchloride", 1000), - FluidUtils.getFluidStack("hydrofluoricacid", 400)) - .duration(45 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(distillationTowerRecipes); - - RA.stdBuilder() - .fluidInputs(FluidUtils.getFluidStack("sulfurousacid", 1000)) - .fluidOutputs(Materials.SulfurDioxide.getGas(500), Materials.Water.getFluid(500)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_MV / 2) - .addTo(distillationTowerRecipes); - } - - private static void thermalBoilerRecipes() { - Logger.INFO("Registering Thermal Boiler Recipes."); - - // Recipes with special value -1 display additional tooltip in NEI about lava filters. - - // Lava - - RA.stdBuilder() - .fluidInputs(FluidUtils.getLava(1000), FluidUtils.getWater(16_000 / GT_Values.STEAM_PER_WATER)) - .fluidOutputs(FluidUtils.getPahoehoeLava(1000), FluidUtils.getSteam(16_000)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1), - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1), - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 1), - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1), - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tantalum, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tungstate, 1), - new ItemStack(Blocks.obsidian, 1, 0)) - .outputChances(444, 222, 56, 56, 56, 125, 1000) - .duration(1 * SECONDS) - .eut(0) - .addTo(thermalBoilerRecipes); - - // Pahoehoe Lava - - RA.stdBuilder() - .fluidInputs(FluidUtils.getPahoehoeLava(1000), FluidUtils.getWater(16_000 / GT_Values.STEAM_PER_WATER)) - .fluidOutputs(FluidUtils.getSteam(16_000)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1), - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Electrum, 1), - GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Tantalum, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Tungstate, 1), - new ItemStack(Blocks.obsidian, 1, 0)) - .outputChances(167, 56, 56, 125, 3700) - .duration(1 * SECONDS) - .eut(0) - .addTo(thermalBoilerRecipes); - - // Hot Coolant - - RA.stdBuilder() - .fluidInputs( - FluidUtils.getFluidStack("ic2hotcoolant", 500), - FluidUtils.getWater(100_000 / GT_Values.STEAM_PER_WATER)) - .fluidOutputs(FluidUtils.getFluidStack("ic2coolant", 500), FluidUtils.getSuperHeatedSteam(100_000)) - .duration(1 * SECONDS) - .eut(0) - .addTo(thermalBoilerRecipes); - - // Solar Salt (Hot) - - RA.stdBuilder() - .fluidInputs( - MISC_MATERIALS.SOLAR_SALT_HOT.getFluidStack(100), - FluidUtils.getWater(100_000 / GT_Values.STEAM_PER_WATER)) - .fluidOutputs(MISC_MATERIALS.SOLAR_SALT_COLD.getFluidStack(100), FluidUtils.getSuperHeatedSteam(100_000)) - .duration(1 * SECONDS) - .eut(0) - .addTo(thermalBoilerRecipes); - } - - private static void addFuels() { - Logger.INFO("Registering New Fuels."); - - RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(Items.lava_bucket)) - .metadata(FUEL_VALUE, 32) - .metadata(FUEL_TYPE, 2) - .duration(0) - .eut(0) - .addTo(GT_RecipeConstants.Fuel); - RA.stdBuilder() - .itemInputs(ItemUtils.getIC2Cell(2)) - .metadata(FUEL_VALUE, 32) - .metadata(FUEL_TYPE, 2) - .duration(0) - .eut(0) - .addTo(GT_RecipeConstants.Fuel); - RA.stdBuilder() - .itemInputs(ItemUtils.getIC2Cell(11)) - .metadata(FUEL_VALUE, 24) - .metadata(FUEL_TYPE, 2) - .duration(0) - .eut(0) - .addTo(GT_RecipeConstants.Fuel); - } - - private static void extractorRecipes() { - Logger.INFO("Registering Extractor Recipes."); - RA.stdBuilder() - .itemInputs(GregtechItemList.Battery_RE_EV_Sodium.get(1L)) - .itemOutputs(ItemList.Battery_Hull_HV.get(4L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(GregtechItemList.Battery_RE_EV_Cadmium.get(1L)) - .itemOutputs(ItemList.Battery_Hull_HV.get(4L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - RA.stdBuilder() - .itemInputs(GregtechItemList.Battery_RE_EV_Lithium.get(1L)) - .itemOutputs(ItemList.Battery_Hull_HV.get(4L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(extractorRecipes); - } - - private static void fluidExtractorRecipes() { - // Gelid Cryotheum - RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cryotheum, 1L)) - .fluidOutputs(FluidUtils.getFluidStack("cryotheum", 250)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV / 2) - .addTo(fluidExtractionRecipes); - - // Ender Fluid - RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(Items.ender_pearl)) - .fluidOutputs(FluidUtils.getFluidStack("ender", 250)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(fluidExtractionRecipes); - - // Blazing Pyrotheum - RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Pyrotheum, 1L)) - .fluidOutputs(FluidUtils.getFluidStack("pyrotheum", 250)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV / 2) - .addTo(fluidExtractionRecipes); - } - - private static void centrifugeRecipes() { - - RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(2), MISC_MATERIALS.SOLAR_SALT_COLD.getCell(1)) - .itemOutputs( - MISC_MATERIALS.SODIUM_NITRATE.getDust(3), - MISC_MATERIALS.POTASSIUM_NITRATE.getDust(2), - CI.emptyCells(1)) - .duration(6 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(centrifugeRecipes); - } - - private static void mixerRecipes() { - - RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(2), - CI.emptyCells(1), - MISC_MATERIALS.SODIUM_NITRATE.getDust(3), - MISC_MATERIALS.POTASSIUM_NITRATE.getDust(2)) - .itemOutputs(MISC_MATERIALS.SOLAR_SALT_COLD.getCell(1)) - .duration(2 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(2), - Materials.Titanium.getDust(9), - Materials.Carbon.getDust(9), - Materials.Potassium.getDust(9), - Materials.Lithium.getDust(9), - Materials.Sulfur.getDust(9)) - .itemOutputs(ALLOY.LEAGRISIUM.getDust(50)) - .fluidInputs(Materials.Hydrogen.getGas(5000)) - .duration(1 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(mixerRecipes); - - RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(2), - Materials.Steel.getDust(16), - Materials.Molybdenum.getDust(1), - Materials.Titanium.getDust(1), - Materials.Nickel.getDust(4), - Materials.Cobalt.getDust(2)) - .itemOutputs(ALLOY.MARAGING250.getDust(24)) - .duration(1 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(mixerRecipes); - } - - private static void chemicalReactorRecipes() { - - RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(21), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 32L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Sulfur, 8L)) - .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 4000)) - .fluidOutputs(FluidUtils.getFluidStack("sulfuricapatite", 8000)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // KOH + HNO3 = KNO3 + H2O - RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(GenericChem.mPotassiumHydroxide, 3), CI.getNumberedAdvancedCircuit(1)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.PotassiumNitrade, 5L)) - .fluidInputs(Materials.NitricAcid.getFluid(1000)) - .fluidOutputs(Materials.Water.getFluid(1000)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Na2CO3 + 2HNO3 = 2NaNO3 + CO2 + H2O - RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(AgriculturalChem.mSodiumCarbonate, 6), - CI.getNumberedAdvancedCircuit(1)) - .itemOutputs(MISC_MATERIALS.SODIUM_NITRATE.getDust(10)) - .fluidInputs(Materials.NitricAcid.getFluid(2000)) - .fluidOutputs(Materials.CarbonDioxide.getGas(1000)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - } - - private static void blastFurnaceRecipes() { - - // Synthetic Graphite - RA.stdBuilder() - .itemInputs(ALLOY.SILICON_CARBIDE.getDust(16), GT_Utility.getIntegratedCircuit(22)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 8L), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Silicon, 8L)) - .fluidInputs(Materials.Nitrogen.getGas(4000)) - .fluidOutputs() - .duration(1 * MINUTES) - .eut(TierEU.RECIPE_IV) - .metadata(COIL_HEAT, 4500) - .addTo(blastFurnaceRecipes); - - } - - private static void compressorRecipes() { - RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Clay, 1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatRaw, 9L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.block, Materials.MeatRaw, 1L)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - - RA.stdBuilder() - .itemInputs(ItemList.FusionComputer_UV.get(9)) - .itemOutputs(GregtechItemList.Compressed_Fusion_Reactor.get(1)) - .duration(1 * HOURS + 50 * MINUTES) - .eut(TierEU.RECIPE_UV) - .addTo(compressorRecipes); - } - - private static void macerationRecipes() { - - RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.block, Materials.MeatRaw, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.MeatRaw, 9L)) - .duration(44 * SECONDS) - .eut(4) - .addTo(maceratorRecipes); - - if (ItemUtils.simpleMetaStack("chisel:limestone", 0, 1) != null) { - RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("limestone", 1)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 4L)) - .duration(20 * SECONDS) - .eut(2) - .addTo(maceratorRecipes); - } - } - - private static void cyclotronRecipes() { - - // Polonium - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Pellet_RTG_PO210.get(1)) - .outputChances(100) - .fluidInputs(FluidUtils.getFluidStack("molten.bismuth", 1)) - .duration(8 * HOURS + 20 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(cyclotronRecipes); - - // Americium - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Pellet_RTG_AM241.get(4)) - .outputChances(2500) - .fluidInputs(FluidUtils.getFluidStack("molten.americium", 1)) - .duration(8 * HOURS + 20 * MINUTES) - .eut(4080) - .addTo(cyclotronRecipes); - - // Strontium u235 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Pellet_RTG_SR90.get(1)) - .outputChances(570) - .fluidInputs(FluidUtils.getFluidStack("molten.uranium235", 10)) - .duration(8 * HOURS + 20 * MINUTES) - .eut(4080) - .addTo(cyclotronRecipes); - - // Strontium u233 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Pellet_RTG_SR90.get(1)) - .outputChances(660) - .fluidInputs(FluidUtils.getFluidStack("molten.uranium233", 10)) - .duration(8 * HOURS + 20 * MINUTES) - .eut(4080) - .addTo(cyclotronRecipes); - - // Strontium pu239 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Pellet_RTG_SR90.get(1)) - .outputChances(220) - .fluidInputs(FluidUtils.getFluidStack("molten.plutonium", 10)) - .duration(8 * HOURS + 20 * MINUTES) - .eut(4080) - .addTo(cyclotronRecipes); - - // Plutonium - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Pellet_RTG_PU238.get(2)) - .outputChances(780) - .fluidInputs(FluidUtils.getFluidStack("molten.plutonium238", 1)) - .duration(8 * HOURS + 20 * MINUTES) - .eut(4080) - .addTo(cyclotronRecipes); - - // Neptunium - GT_Values.RA.stdBuilder() - .itemInputs(ELEMENT.getInstance().URANIUM238.getDust(1)) - .itemOutputs(ItemUtils.getSimpleStack(ModItems.dustNeptunium238)) - .outputChances(500) - .fluidInputs(FluidUtils.getFluidStack("deuterium", 400)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(cyclotronRecipes); - - /* - * Particle Science - */ - - // Quark Smash - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(3)) - .itemOutputs( - Particle.getBaseParticle(Particle.UP), - Particle.getBaseParticle(Particle.DOWN), - Particle.getBaseParticle(Particle.CHARM), - Particle.getBaseParticle(Particle.STRANGE), - Particle.getBaseParticle(Particle.TOP), - Particle.getBaseParticle(Particle.BOTTOM)) - .outputChances(100, 100, 100, 100, 100, 100) - .fluidInputs(FluidUtils.getFluidStack("plasma.hydrogen", 100)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_ZPM) - .addTo(cyclotronRecipes); - // Lepton Smash - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(6)) - .itemOutputs( - Particle.getBaseParticle(Particle.ELECTRON), - Particle.getBaseParticle(Particle.MUON), - Particle.getBaseParticle(Particle.TAU), - Particle.getBaseParticle(Particle.ELECTRON_NEUTRINO), - Particle.getBaseParticle(Particle.MUON_NEUTRINO), - Particle.getBaseParticle(Particle.TAU_NEUTRINO)) - .outputChances(600, 40, 20, 15, 10, 5) - .fluidInputs(FluidUtils.getFluidStack("plasma.helium", 1500)) - .duration(40 * MINUTES) - .eut(TierEU.RECIPE_ZPM) - .addTo(cyclotronRecipes); - // Boson Smash - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(9)) - .itemOutputs( - Particle.getBaseParticle(Particle.GLUON), - Particle.getBaseParticle(Particle.PHOTON), - Particle.getBaseParticle(Particle.Z_BOSON), - Particle.getBaseParticle(Particle.W_BOSON), - Particle.getBaseParticle(Particle.HIGGS_BOSON)) - .outputChances(160, 260, 150, 150, 1) - .fluidInputs(FluidUtils.getFluidStack("plasma.helium", 1500)) - .duration(30 * MINUTES) - .eut(TierEU.RECIPE_ZPM) - .addTo(cyclotronRecipes); - // Mixed Smash 1 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(12)) - .itemOutputs( - Particle.getBaseParticle(Particle.GRAVITON), - Particle.getBaseParticle(Particle.ETA_MESON), - Particle.getBaseParticle(Particle.PION), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.NEUTRON), - Particle.getBaseParticle(Particle.LAMBDA), - Particle.getBaseParticle(Particle.OMEGA), - Particle.getBaseParticle(Particle.HIGGS_BOSON)) - .outputChances(50, 50, 50, 40, 30, 20, 20, 10) - .fluidInputs(Materials.Americium.getPlasma(2500)) - .duration(16 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(cyclotronRecipes); - // Mixed Smash 1 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(12)) - .itemOutputs( - Particle.getBaseParticle(Particle.GRAVITON), - Particle.getBaseParticle(Particle.ETA_MESON), - Particle.getBaseParticle(Particle.PION), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.NEUTRON), - Particle.getBaseParticle(Particle.LAMBDA), - Particle.getBaseParticle(Particle.OMEGA), - Particle.getBaseParticle(Particle.HIGGS_BOSON)) - .outputChances(5000, 200, 200, 100, 80, 60, 40, 30) - .fluidInputs(new FluidStack(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 2500)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(cyclotronRecipes); - // Graviton Smash - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(15)) - .itemOutputs(Particle.getBaseParticle(Particle.GRAVITON), Particle.getBaseParticle(Particle.UNKNOWN)) - .outputChances(1000, 100) - .fluidInputs(FluidUtils.getFluidStack("plasma.hydrogen", 100)) - .duration(1 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(cyclotronRecipes); - - FluidStack aPlasma = Materials.Duranium.getMolten(40); - FluidStack aPlasma_NULL = Materials._NULL.getPlasma(1); - - if (aPlasma == null || aPlasma.isFluidEqual(aPlasma_NULL)) { - aPlasma = Materials.Americium.getMolten(20); - } - - // Quantum Anomaly - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(24), Particle.getBaseParticle(Particle.UNKNOWN)) - .itemOutputs(GregtechItemList.Laser_Lens_Special.get(1)) - .outputChances(100) - .fluidInputs(aPlasma) - .duration(25 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(cyclotronRecipes); - - /* - * Ions - */ - - int IonCount = 2; - int tenCountA = 2; - int tenCountB = 0; - for (String y : IonParticles.MetaToNameMap.values()) { - if (y.toLowerCase() - .contains("hydrogen")) { - continue; - } - FluidStack aPlasma2 = FluidUtils.getFluidStack("plasma." + y.toLowerCase(), 2); - Materials aTestMat = MaterialUtils.getMaterial(y); - FluidStack aPlasma3 = aTestMat != null ? aTestMat.getPlasma(2) : aPlasma2; - - // Ionize Plasma - if ((aPlasma2 != null && !aPlasma2.isFluidEqual(aPlasma_NULL)) - || (aPlasma3 != null && !aPlasma3.isFluidEqual(aPlasma_NULL))) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1 + (tenCountA - 1))) - .itemOutputs( - Particle.getIon(y, 1), - Particle.getIon(y, 2), - Particle.getIon(y, 3), - Particle.getIon(y, -1), - Particle.getIon(y, -2), - Particle.getIon(y, -3), - Particle.getIon(y, 1), - Particle.getIon(y, 2), - Particle.getIon(y, -1)) - .outputChances(275, 250, 225, 275, 250, 225, 275, 250, 275) - .duration(20 * SECONDS * (IonCount++) * tenCountA) - .eut(TierEU.RECIPE_ZPM) - .addTo(cyclotronRecipes); - - } else { - Logger.INFO("Plasma for " + y + " does not exist, please report this to Alkalus."); - } - - if (tenCountB == 12) { - tenCountB = 0; - tenCountA++; - } else { - tenCountB++; - } - } - - // Generate Hydrogen Ion Recipe - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(24)) - .itemOutputs( - Particle.getIon("Hydrogen", 1), - Particle.getIon("Hydrogen", 2), - Particle.getIon("Hydrogen", 3), - Particle.getIon("Hydrogen", 1), - Particle.getIon("Hydrogen", 2), - Particle.getIon("Hydrogen", 3), - Particle.getIon("Hydrogen", -1), - Particle.getIon("Hydrogen", -2), - Particle.getIon("Hydrogen", -3)) - .outputChances(500, 500, 500, 500, 500, 500, 500, 500, 500) - .fluidInputs(FluidUtils.getWildcardFluidStack("hydrogen", 1000)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(cyclotronRecipes); - // Generate Hydrogen Plasma Recipe - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(21), Particle.getIon("Hydrogen", 0)) - .itemOutputs( - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.NEUTRON), - Particle.getBaseParticle(Particle.ELECTRON), - Particle.getBaseParticle(Particle.UNKNOWN), - Particle.getBaseParticle(Particle.UNKNOWN), - Particle.getBaseParticle(Particle.UNKNOWN)) - .outputChances(1250, 1250, 1250, 750, 750, 750) - .fluidInputs(FluidUtils.getFluidStack("hydrogen", 1000)) - .fluidOutputs(FluidUtils.getFluidStack("plasma.hydrogen", 100)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_LuV) - .addTo(cyclotronRecipes); - // Generate Protons Easily - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(20), Particle.getIon("Hydrogen", 0)) - .itemOutputs( - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON)) - .outputChances(750, 750, 750, 750, 750, 750, 750, 750, 750) - .fluidInputs(FluidUtils.getWildcardFluidStack("hydrogen", 100)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(cyclotronRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(22), Particle.getBaseParticle(Particle.UNKNOWN)) - .itemOutputs( - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.PROTON)) - .outputChances(375, 375, 375, 375, 375, 375, 375, 375, 375) - .fluidInputs(FluidUtils.getWildcardFluidStack("hydrogen", 100)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(cyclotronRecipes); - // Create Strange Dust - GT_Values.RA.stdBuilder() - .itemInputs( - ELEMENT.getInstance().PLUTONIUM238.getDust(1), - Particle.getBaseParticle(Particle.UNKNOWN), - Particle.getBaseParticle(Particle.UNKNOWN), - Particle.getBaseParticle(Particle.UNKNOWN), - Particle.getBaseParticle(Particle.UNKNOWN), - Particle.getBaseParticle(Particle.UNKNOWN), - Particle.getBaseParticle(Particle.UNKNOWN), - Particle.getBaseParticle(Particle.UNKNOWN), - Particle.getBaseParticle(Particle.UNKNOWN)) - .itemOutputs(ORES.DEEP_EARTH_REACTOR_FUEL_DEPOSIT.getDust(1)) - .outputChances(2500) - .fluidInputs(FluidUtils.getFluidStack(FluidUtils.getWildcardFluidStack("ender", 1000), 1000)) - .duration(15 * MINUTES) - .eut(TierEU.RECIPE_ZPM) - .addTo(cyclotronRecipes); - - } -} diff --git a/src/main/java/gtPlusPlus/core/recipe/RECIPES_General.java b/src/main/java/gtPlusPlus/core/recipe/RECIPES_General.java deleted file mode 100644 index 454810ae47..0000000000 --- a/src/main/java/gtPlusPlus/core/recipe/RECIPES_General.java +++ /dev/null @@ -1,476 +0,0 @@ -package gtPlusPlus.core.recipe; - -import static gregtech.api.enums.Mods.EnderIO; -import static gregtech.api.enums.Mods.Thaumcraft; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gtPlusPlus.core.recipe.common.CI.bitsd; -import static gtPlusPlus.core.util.minecraft.ItemUtils.getSimpleStack; -import static gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechConduits.generatePipeRecipes; -import static gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechConduits.generateWireRecipes; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.lib.CORE; -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.RecipeUtils; -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.helpers.VolumetricFlaskHelper; - -public class RECIPES_General { - - static final ItemStack NULL = null; - static ItemStack RECIPE_Paper; - static ItemStack RECIPE_Dirt; - static ItemStack RECIPE_Snow; - static ItemStack RECIPE_Obsidian; - static String RECIPE_LapisDust = "dustLazurite"; - static ItemStack OUTPUT_Blueprint; - static ItemStack RECIPE_CraftingTable; - static ItemStack RECIPE_BasicCasingIC2; - - public static void loadRecipes() { - RECIPE_Paper = ItemUtils.getSimpleStack(Items.paper); - RECIPE_Dirt = ItemUtils.getSimpleStack(Blocks.dirt); - RECIPE_Snow = ItemUtils.getSimpleStack(Blocks.snow); - RECIPE_Obsidian = ItemUtils.getSimpleStack(Blocks.obsidian); - RECIPE_CraftingTable = ItemUtils.getSimpleStack(Blocks.crafting_table); - RECIPE_BasicCasingIC2 = ItemUtils.getItemStackFromFQRN("IC2:blockMachine", 1); - OUTPUT_Blueprint = ItemUtils.getSimpleStack(ModItems.itemBlueprintBase, 2); - run(); - addCompressedObsidian(); - migratedRecipes(); - } - - private static void run() { - // Workbench Blueprint - RecipeUtils.addShapedRecipe( - RECIPE_Paper, - RECIPE_LapisDust, - NULL, - RECIPE_Paper, - RECIPE_LapisDust, - NULL, - RECIPE_LapisDust, - RECIPE_LapisDust, - NULL, - OUTPUT_Blueprint); - - // Rainforest oak Sapling - if (RecipeUtils.addShapedRecipe( - "stickWood", - "stickWood", - "stickWood", - "stickWood", - "treeSapling", - "stickWood", - "stickWood", - "dustBone", - "stickWood", - ItemUtils.getSimpleStack(BOP_Block_Registrator.sapling_Rainforest))) { - Logger.INFO("Added a recipe for Rainforest oak Saplings."); - } - - // Iron bars - final ItemStack ironBars = ItemUtils.getItemStackFromFQRN("dreamcraft:item.SteelBars", 1); - - // Fish Trap - if (RecipeUtils.addShapedRecipe( - ironBars, - ironBars, - ironBars, - ironBars, - "frameGtWroughtIron", - ironBars, - ironBars, - ironBars, - ironBars, - ItemUtils.getSimpleStack(ModBlocks.blockFishTrap))) { - Logger.INFO("Added a recipe for the Fish Trap."); - } - - // Potin - if (RecipeUtils.addShapelessGregtechRecipe( - new Object[] { "dustLead", "dustBronze", "dustTin", "dustLead", "dustBronze" }, - ALLOY.POTIN.getDust(5))) { - Logger.INFO("Added shapeless recipe for Potin Dust."); - } - - // Tumbaga - if (RecipeUtils.addShapelessGregtechRecipe( - new Object[] { "dustGold", "dustGold", "dustCopper" }, - ItemUtils.getSimpleStack(ModItems.dustTumbagaMix))) { - Logger.INFO("Added shapeless recipe for Tumbaga Mix."); - } - if (RecipeUtils.addShapelessGregtechRecipe( - new Object[] { ItemUtils.getSimpleStack(ModItems.dustTumbagaMix), - ItemUtils.getSimpleStack(ModItems.dustTumbagaMix), ItemUtils.getSimpleStack(ModItems.dustTumbagaMix), - "dustGold" }, - ALLOY.TUMBAGA.getDust(10))) { - Logger.INFO("Added shapeless recipe for Tumbaga Dust."); - } - - 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)); - RecipeUtils.addShapedRecipe( - CI.craftingToolFile, - "plateSteel", - "stickSteel", - "plateSteel", - "ringSteel", - "plateSteel", - "stickSteel", - "plateSteel", - CI.craftingToolHammer_Hard, - ItemUtils.simpleMetaStack(ModItems.itemBasicTurbine, 2, 1)); - } - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(Blocks.glass, 16), - ItemUtils.getSimpleStack(Blocks.glowstone, 16), - ItemList.Large_Fluid_Cell_Steel.get(1), - CI.getNumberedAdvancedCircuit(4)) - .itemOutputs(VolumetricFlaskHelper.getLargeVolumetricFlask(2)) - .fluidInputs(FluidUtils.getFluidStack("molten.borosilicateglass", 2000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(Blocks.glass, 64), - ItemUtils.getSimpleStack(Blocks.glowstone, 64), - ItemList.Large_Fluid_Cell_TungstenSteel.get(1), - CI.getNumberedAdvancedCircuit(5)) - .itemOutputs(VolumetricFlaskHelper.getGiganticVolumetricFlask(2)) - .fluidInputs(FluidUtils.getFluidStack("molten.borosilicateglass", 8000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - // Mining Explosive - Logger.RECIPE("[Inspection] Explosives"); - if (RecipeUtils.addShapedRecipe( - CI.explosiveITNT, - CI.explosiveTNT, - CI.explosiveITNT, - CI.explosiveTNT, - "frameGtIron", - CI.explosiveTNT, - "dustSulfur", - CI.explosiveTNT, - "dustSulfur", - ItemUtils.getSimpleStack(ModBlocks.blockMiningExplosive, 3))) { - Logger.INFO("Added a recipe for Mining Explosives."); - } - - // Alkalus Coin - if (RecipeUtils.addShapedRecipe( - "gemExquisiteRuby", - "gemFlawlessDiamond", - "gemExquisiteDiamond", - "gemFlawlessRuby", - ItemList.Credit_Greg_Osmium.get(1), - "gemFlawlessSapphire", - "gemExquisiteEmerald", - "gemFlawlessEmerald", - "gemExquisiteSapphire", - ItemUtils.getSimpleStack(ModItems.itemAlkalusDisk))) { - Logger.INFO("Added a recipe for The Alkalus Disk."); - } - - /* - * final String fancyGems[] = new String[]{"gemExquisiteDiamond", "gemExquisiteEmerald", "gemExquisiteRuby", - * "gemExquisiteSapphire"}; final ItemStack gemShards[] = new - * ItemStack[]{ItemUtils.simpleMetaStack(ModItems.itemGemShards, 0, 1), - * ItemUtils.simpleMetaStack(ModItems.itemGemShards, 1, 1), ItemUtils.simpleMetaStack(ModItems.itemGemShards, 2, - * 1), ItemUtils.simpleMetaStack(ModItems.itemGemShards, 3, 1)}; int l=0; for (final String gem : fancyGems){ - * GameRegistry.addShapelessRecipe( gemShards[l], ItemUtils.getItemStackOfAmountFromOreDict(gem, 1), new - * ItemStack(ModItems.itemAlkalusDisk, 1, OreDictionary.WILDCARD_VALUE)); l++; } - */ - - Logger.RECIPE("[Inspection] Wither Cage"); - if (RecipeUtils.addShapedRecipe( - "stickBlackSteel", - "plateTungstenSteel", - "stickBlackSteel", - "plateTungstenSteel", - getSimpleStack(Items.nether_star), - "plateTungstenSteel", - "stickBlackSteel", - "plateTungstenSteel", - "stickBlackSteel", - ItemUtils.getSimpleStack(ModBlocks.blockWitherGuard, 32))) { - Logger.INFO("Added a recipe for Wither Cages."); - } - - // Magic Feather - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(Items.feather, 64), - ItemUtils.getSimpleStack(Blocks.emerald_block, 32), - ItemUtils.getSimpleStack(Blocks.diamond_block, 32), - Materials.Ruby.getBlocks(32), - Materials.Sapphire.getBlocks(32), - ItemUtils.getSimpleStack(Blocks.gold_block, 32)) - .itemOutputs(ItemUtils.getSimpleStack(ModItems.itemMagicFeather, 1)) - .fluidInputs(Materials.Silver.getMolten(32 * 144)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - // Pest Killer - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getTieredMachineCasing(1), - CI.getElectricPump(2, 1), - CI.getPlate(2, 4), - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(0), 2), - GT_Utility.getIntegratedCircuit(16)) - .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockPestKiller)) - .fluidInputs(FluidUtils.getHotWater(500)) - .duration(1 * MINUTES) - .eut(TierEU.RECIPE_LV / 2) - .addTo(assemblerRecipes); - } - - private static boolean addCompressedObsidian() { - // Invert Obsidian - ItemStack aInvertedObsidian = ItemUtils.simpleMetaStack(ModBlocks.blockCompressedObsidian, 5, 1); - 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), - aInvertedObsidian)) { - Logger.INFO("Added a recipe for Inverted Obsidian."); - } - - final ItemStack[] mItems = new ItemStack[6]; - mItems[0] = ItemUtils.getSimpleStack(Blocks.obsidian); - for (int r = 0; r < 5; r++) { - mItems[r + 1] = ItemUtils.simpleMetaStack(ModBlocks.blockCompressedObsidian, r, 1); - } - - final ItemStack[] mItems2 = new ItemStack[6]; - mItems2[0] = ItemUtils.getSimpleStack(Blocks.glowstone); - for (int r = 0; r < 5; r++) { - mItems2[r + 1] = ItemUtils.simpleMetaStack(ModBlocks.blockCompressedObsidian, 6 + r, 1); - } - - // Compressed Obsidian 1-5 - for (int r = 0; r < 5; r++) { - - final ItemStack input = mItems[r]; - final ItemStack output = mItems[r + 1]; - - if (RecipeUtils.addShapedRecipe(input, input, input, input, input, input, input, input, input, output)) { - Logger.INFO("Added a recipe for Compressed Obsidian [" + r + "]"); - } - - if (RecipeUtils - .addShapelessGregtechRecipe(new ItemStack[] { output }, ItemUtils.getSimpleStack(input, 9))) { - Logger.INFO("Added a shapeless recipe for Compressed Obsidian [" + r + "]"); - } - } - - // Compressed Glowstone 1-5 - for (int r = 0; r < 5; r++) { - - final ItemStack input = mItems2[r]; - final ItemStack output = mItems2[r + 1]; - - if (RecipeUtils.addShapedRecipe( - input, - input, - input, - input, - r == 2 ? aInvertedObsidian : input, - input, - input, - input, - input, - output)) { - Logger.INFO("Added a recipe for Compressed Glowstone [" + r + "]"); - } - - if (RecipeUtils - .addShapelessGregtechRecipe(new ItemStack[] { output }, ItemUtils.getSimpleStack(input, 9))) { - Logger.INFO("Added a shapeless recipe for Compressed Glowstone [" + r + "]"); - } - } - return true; - } - - private static void migratedRecipes() { - - RecipeUtils.generateMortarRecipe( - ItemUtils.getSimpleStack(ModItems.itemPlateRawMeat), - ItemUtils.getItemStackOfAmountFromOreDict("dustMeatRaw", 1)); - - generateWireRecipes(ELEMENT.getInstance().ZIRCONIUM); - generateWireRecipes(ALLOY.HG1223); - generateWireRecipes(ALLOY.LEAGRISIUM); - generateWireRecipes(ALLOY.TRINIUM_TITANIUM); - generateWireRecipes(ELEMENT.STANDALONE.HYPOGEN); - generateWireRecipes(ELEMENT.STANDALONE.CHRONOMATIC_GLASS); - - // No Material for void, natch. - if (Thaumcraft.isModLoaded()) { - generatePipeRecipes(GT_Materials.Void.mDefaultLocalName, GT_Materials.Void.getMass(), 15); - } - - Material[] gtpp = new Material[] { ALLOY.STABALLOY, ALLOY.TANTALLOY_60, ALLOY.TANTALLOY_61, ALLOY.POTIN, - ALLOY.MARAGING300, ALLOY.MARAGING350, ALLOY.INCONEL_690, ALLOY.INCONEL_792, ALLOY.HASTELLOY_X, - ALLOY.TRINIUM_NAQUADAH_CARBON }; - - for (Material mat : gtpp) { - // generatePipeRecipes multiplies the voltage multiplier by 8 because ??! reasons. - generatePipeRecipes(mat.getLocalizedName(), mat.getMass(), mat.vVoltageMultiplier / 8); - } - - Materials[] h = new Materials[] { Materials.Europium, Materials.Tungsten, Materials.DarkSteel, Materials.Clay, - Materials.Lead, }; - - for (Materials e : h) { - if (e == Materials.DarkSteel) { - if (!EnderIO.isModLoaded()) { - continue; - } - } - int tVoltageMultiplier = (e.mBlastFurnaceTemp >= 2800) ? 60 : 15; - generatePipeRecipes(e.mDefaultLocalName, e.getMass(), tVoltageMultiplier); - } - - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[6], - ALLOY.MARAGING250.getGear(1), - CI.component_Plate[6], - CI.getTieredCircuitOreDictName(4), - GregtechItemList.Casing_AdvancedVacuum.get(1), - CI.getTieredCircuitOreDictName(4), - CI.component_Plate[5], - ItemList.Hatch_Input_IV.get(1), - CI.component_Plate[5], - GregtechItemList.Hatch_Input_Cryotheum.get(1L)); - - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[6], - ALLOY.MARAGING300.getGear(1), - CI.component_Plate[6], - CI.getTieredCircuitOreDictName(5), - GregtechItemList.Casing_Adv_BlastFurnace.get(1), - CI.getTieredCircuitOreDictName(5), - CI.component_Plate[6], - ItemList.Hatch_Input_IV.get(1), - CI.component_Plate[6], - GregtechItemList.Hatch_Input_Pyrotheum.get(1L)); - - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[8], - ALLOY.PIKYONIUM.getGear(1), - CI.component_Plate[9], - CI.getTieredCircuitOreDictName(7), - GregtechItemList.Casing_Naq_Reactor_A.get(1), - CI.getTieredCircuitOreDictName(7), - CI.component_Plate[9], - ItemList.Hatch_Input_ZPM.get(1), - CI.component_Plate[8], - GregtechItemList.Hatch_Input_Naquadah.get(1L, new Object[0])); - - if (PollutionUtils.isPollutionEnabled()) { - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Hatch_Muffler_Adv_LV.get(1L, new Object[0]), - bitsd, - new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_LV.get(1), - Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_LV.get(1) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Hatch_Muffler_Adv_MV.get(1L, new Object[0]), - bitsd, - new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_MV.get(1), - Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_MV.get(1) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Hatch_Muffler_Adv_HV.get(1L, new Object[0]), - bitsd, - new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_HV.get(1), - Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_HV.get(1) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Hatch_Muffler_Adv_EV.get(1L, new Object[0]), - bitsd, - new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_EV.get(1), - Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_EV.get(1) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Hatch_Muffler_Adv_IV.get(1L, new Object[0]), - bitsd, - new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_IV.get(1), - Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_IV.get(1) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Hatch_Muffler_Adv_LuV.get(1L, new Object[0]), - bitsd, - new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_LuV.get(1), - Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_LuV.get(1) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Hatch_Muffler_Adv_ZPM.get(1L, new Object[0]), - bitsd, - new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_ZPM.get(1), - Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_ZPM.get(1) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Hatch_Muffler_Adv_UV.get(1L, new Object[0]), - bitsd, - new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_UV.get(1), - Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_UV.get(1) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Hatch_Muffler_Adv_MAX.get(1L, new Object[0]), - bitsd, - new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_MAX.get(1), - Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_MAX.get(1) }); - } - } -} diff --git a/src/main/java/gtPlusPlus/core/recipe/RECIPES_LaserEngraver.java b/src/main/java/gtPlusPlus/core/recipe/RECIPES_LaserEngraver.java deleted file mode 100644 index 1f8d5d9a8e..0000000000 --- a/src/main/java/gtPlusPlus/core/recipe/RECIPES_LaserEngraver.java +++ /dev/null @@ -1,135 +0,0 @@ -package gtPlusPlus.core.recipe; - -import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OreDictNames; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IOreRecipeRegistrator; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.everglades.dimension.Dimension_Everglades; - -public class RECIPES_LaserEngraver implements IOreRecipeRegistrator { - - public RECIPES_LaserEngraver() { - OrePrefixes.crafting.add(this); - } - - @Override - public void registerOre(final OrePrefixes aPrefix, final Materials aMaterial, final String aOreDictName, - final String aModName, final ItemStack aStack) { - if (aOreDictName.equals(OreDictNames.craftingLensWhite.toString())) { - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Lithium, 2L), - GT_Utility.copyAmount(0L, aStack)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("plateDoubleLithium7", 1)) - .duration(4 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(laserEngraverRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 3L), - GT_Utility.copyAmount(0L, aStack)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithium7", 1)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(laserEngraverRecipes); - - } else if (aOreDictName.equals(OreDictNames.craftingLensLime.toString())) { - // Coil Wires - ItemStack coilWire1 = ItemUtils - .getItemStackWithMeta(true, "miscutils:itemDehydratorCoilWire", "coilWire1", 0, 1); - ItemStack coilWire2 = ItemUtils - .getItemStackWithMeta(true, "miscutils:itemDehydratorCoilWire:1", "coilWire2", 1, 1); - ItemStack coilWire3 = ItemUtils - .getItemStackWithMeta(true, "miscutils:itemDehydratorCoilWire:2", "coilWire3", 2, 1); - ItemStack coilWire4 = ItemUtils - .getItemStackWithMeta(true, "miscutils:itemDehydratorCoilWire:3", "coilWire4", 3, 1); - - // Simple Life - String wire = "wireGt02"; - - // Wires to Laser - ItemStack wireT1a = ItemUtils.getItemStackOfAmountFromOreDict(wire + "Aluminium", 1); - ItemStack wireT1b = ItemUtils.getItemStackOfAmountFromOreDict(wire + "Nichrome", 1); - ItemStack wireT2a = ItemUtils.getItemStackOfAmountFromOreDict(wire + "Osmium", 1); - ItemStack wireT2b = ItemUtils.getItemStackOfAmountFromOreDict(wire + "Platinum", 1); - ItemStack wireT3a = ItemUtils.getItemStackOfAmountFromOreDict(wire + "VanadiumGallium", 1); - ItemStack wireT3b = ItemUtils.getItemStackOfAmountFromOreDict(wire + "YttriumBariumCuprate", 1); - ItemStack wireT3c = ItemUtils.getItemStackOfAmountFromOreDict(wire + "NiobiumTitanium", 1); - ItemStack wireT4a = ItemUtils.getItemStackOfAmountFromOreDict(wire + "Naquadah", 1); - - // T1 - GT_Values.RA.stdBuilder() - .itemInputs(wireT1a, GT_Utility.copyAmount(0L, aStack)) - .itemOutputs(coilWire1) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(laserEngraverRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(wireT1b, GT_Utility.copyAmount(0L, aStack)) - .itemOutputs(coilWire1) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(laserEngraverRecipes); - // T2 - GT_Values.RA.stdBuilder() - .itemInputs(wireT2a, GT_Utility.copyAmount(0L, aStack)) - .itemOutputs(coilWire2) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(laserEngraverRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(wireT2b, GT_Utility.copyAmount(0L, aStack)) - .itemOutputs(coilWire2) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(laserEngraverRecipes); - // T3 - GT_Values.RA.stdBuilder() - .itemInputs(wireT3a, GT_Utility.copyAmount(0L, aStack)) - .itemOutputs(coilWire3) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(laserEngraverRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(wireT3b, GT_Utility.copyAmount(0L, aStack)) - .itemOutputs(coilWire3) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(laserEngraverRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(wireT3c, GT_Utility.copyAmount(0L, aStack)) - .itemOutputs(coilWire3) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(laserEngraverRecipes); - // T4 - GT_Values.RA.stdBuilder() - .itemInputs(wireT4a, GT_Utility.copyAmount(0L, aStack)) - .itemOutputs(coilWire4) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(laserEngraverRecipes); - - } else if (aOreDictName.equals(OreDictNames.craftingLensOrange.toString())) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(ModItems.itemAlkalusDisk), GT_Utility.copyAmount(0L, aStack)) - .itemOutputs(ItemUtils.getSimpleStack(Dimension_Everglades.portalItem)) - .duration(3 * HOURS) - .eut(TierEU.RECIPE_IV) - .addTo(laserEngraverRecipes); - } - } -} diff --git a/src/main/java/gtPlusPlus/core/recipe/RECIPES_MachineComponents.java b/src/main/java/gtPlusPlus/core/recipe/RECIPES_MachineComponents.java deleted file mode 100644 index 4929872caa..0000000000 --- a/src/main/java/gtPlusPlus/core/recipe/RECIPES_MachineComponents.java +++ /dev/null @@ -1,10 +0,0 @@ -package gtPlusPlus.core.recipe; - -public class RECIPES_MachineComponents { - - // Fluid Pipe - public static String pipeTier7 = "pipeHugeSteel"; - public static String pipeTier8 = "pipeHugeStainlessSteel"; - public static String pipeTier9 = "pipeHugeTitanium"; - -} diff --git a/src/main/java/gtPlusPlus/core/recipe/RECIPES_Machines.java b/src/main/java/gtPlusPlus/core/recipe/RECIPES_Machines.java deleted file mode 100644 index 0c89e94b7e..0000000000 --- a/src/main/java/gtPlusPlus/core/recipe/RECIPES_Machines.java +++ /dev/null @@ -1,3505 +0,0 @@ -package gtPlusPlus.core.recipe; - -import static goodgenerator.loader.Loaders.supercriticalFluidTurbineCasing; -import static gregtech.api.enums.Mods.EternalSingularity; -import static gregtech.api.enums.Mods.Railcraft; -import static gregtech.api.enums.Mods.RemoteIO; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.cutterRecipes; -import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; -import static gregtech.api.util.GT_RecipeConstants.CHEMPLANT_CASING_TIER; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; - -import java.util.List; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.technus.tectech.recipe.TT_recipeAdder; -import com.github.technus.tectech.thing.CustomItemList; -import com.google.common.collect.ImmutableList; - -import goodgenerator.loader.Loaders; -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.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.item.chemistry.AgriculturalChem; -import gtPlusPlus.core.item.crafting.ItemDummyResearch; -import gtPlusPlus.core.item.crafting.ItemDummyResearch.ASSEMBLY_LINE_RESEARCH; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.MISC_MATERIALS; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.RecipeUtils; -import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; -import gtPlusPlus.everglades.dimension.Dimension_Everglades; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.covers.CoverManager; -import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper; - -public class RECIPES_Machines { - - // Outputs - public static ItemStack RECIPE_Buffer_ULV = GregtechItemList.Energy_Buffer_1by1_ULV.get(1); - public static ItemStack RECIPE_Buffer_LV = GregtechItemList.Energy_Buffer_1by1_LV.get(1); - public static ItemStack RECIPE_Buffer_MV = GregtechItemList.Energy_Buffer_1by1_MV.get(1); - public static ItemStack RECIPE_Buffer_HV = GregtechItemList.Energy_Buffer_1by1_HV.get(1); - public static ItemStack RECIPE_Buffer_EV = GregtechItemList.Energy_Buffer_1by1_EV.get(1); - public static ItemStack RECIPE_Buffer_IV = GregtechItemList.Energy_Buffer_1by1_IV.get(1); - public static ItemStack RECIPE_Buffer_LuV = GregtechItemList.Energy_Buffer_1by1_LuV.get(1); - public static ItemStack RECIPE_Buffer_ZPM = GregtechItemList.Energy_Buffer_1by1_ZPM.get(1); - public static ItemStack RECIPE_Buffer_UV = GregtechItemList.Energy_Buffer_1by1_UV.get(1); - public static ItemStack RECIPE_Buffer_MAX = GregtechItemList.Energy_Buffer_1by1_MAX.get(1); - // Industrial Centrifuge - public static ItemStack RECIPE_IndustrialCentrifugeController; - public static ItemStack RECIPE_IndustrialCentrifugeCasing; - // Industrial Coke Oven - public static ItemStack RECIPE_IndustrialCokeOvenController; - public static ItemStack RECIPE_IndustrialCokeOvenFrame; - public static ItemStack RECIPE_IndustrialCokeOvenCasingA; - public static ItemStack RECIPE_IndustrialCokeOvenCasingB; - // Industrial Electrolyzer - public static ItemStack RECIPE_IndustrialElectrolyzerController; - public static ItemStack RECIPE_IndustrialElectrolyzerFrame; - // Industrial Material Press - public static ItemStack RECIPE_IndustrialMaterialPressController; - public static ItemStack RECIPE_IndustrialMaterialPressFrame; - // Industrial Maceration Stack - public static ItemStack RECIPE_IndustrialMacerationStackController; - public static ItemStack RECIPE_IndustrialMacerationStackFrame; - // Industrial Wire Factory - public static ItemStack RECIPE_IndustrialWireFactoryController; - public static ItemStack RECIPE_IndustrialWireFactoryFrame; - // Industrial Multi Tank - public static ItemStack RECIPE_IndustrialMultiTankController; - public static ItemStack RECIPE_IndustrialMultiTankFrame; - // Industrial Matter Fabricator - public static ItemStack RECIPE_IndustrialMatterFabController; - public static ItemStack RECIPE_IndustrialMatterFabFrame; - public static ItemStack RECIPE_IndustrialMatterFabCoil; - // Industrial Blast Smelter - public static ItemStack RECIPE_IndustrialBlastSmelterController; - public static ItemStack RECIPE_IndustrialBlastSmelterFrame; - public static ItemStack RECIPE_IndustrialBlastSmelterCoil; - // Industrial Sieve - public static ItemStack RECIPE_IndustrialSieveController; - public static ItemStack RECIPE_IndustrialSieveFrame; - public static ItemStack RECIPE_IndustrialSieveGrate; - // Industrial Tree Farmer - public static ItemStack RECIPE_TreeFarmController; - public static ItemStack RECIPE_TreeFarmFrame; - // Tesseracts - public static ItemStack RECIPE_TesseractGenerator; - public static ItemStack RECIPE_TesseractTerminal; - // Thermal Boiler - public static ItemStack RECIPE_ThermalBoilerController; - public static ItemStack RECIPE_ThermalBoilerCasing; - - // Thorium Reactor - public static ItemStack RECIPE_LFTRController; - public static ItemStack RECIPE_LFTROuterCasing; - public static ItemStack RECIPE_LFTRInnerCasing; - - // Nuclear Salt Processing Plant - public static ItemStack RECIPE_SaltPlantController; - - // Cyclotron - public static ItemStack RECIPE_CyclotronController; - public static ItemStack RECIPE_CyclotronOuterCasing; - public static ItemStack RECIPE_CyclotronInnerCoil; - - // Wire - public static String cableTier4 = "cableGt04Gold"; - public static String cableTier6 = "cableGt04Tungsten"; - - public static String pipeTier1 = "pipeHuge" + "Clay"; - public static String pipeTier2 = "pipeHuge" + "Potin"; - public static String pipeTier3 = "pipeHuge" + "Steel"; - public static String pipeTier4 = "pipeHuge" + "StainlessSteel"; - public static String pipeTier7 = "pipeHuge" + "Tantalloy60"; - - // EV/IV MACHINES - public static ItemStack IV_MACHINE_Electrolyzer; - public static ItemStack EV_MACHINE_Centrifuge; - public static ItemStack EV_MACHINE_BendingMachine; - public static ItemStack IV_MACHINE_Wiremill; - public static ItemStack EV_MACHINE_Macerator; - public static ItemStack IV_MACHINE_Macerator; - public static ItemStack IV_MACHINE_Cutter; - public static ItemStack IV_MACHINE_Extruder; - public static ItemStack HV_MACHINE_Sifter; - public static ItemStack EV_MACHINE_ThermalCentrifuge; - public static ItemStack EV_MACHINE_OreWasher; - public static ItemStack IV_MACHINE_AlloySmelter; - public static ItemStack IV_MACHINE_Mixer; - public static ItemStack EV_MACHINE_ChemicalBath; - - // Plates - public static String plateBronze = "plateBronze"; - public static String plateSteel = "plateSteel"; - - // Pipes - public static String pipeHugeStainlessSteel = "pipeHugeStainlessSteel"; - - // Lava Boiler - public static ItemStack boiler_Coal; - public static ItemStack IC2MFE; - public static ItemStack IC2MFSU; - - // Misc - public static ItemStack INPUT_RCCokeOvenBlock; - - public static final void loadRecipes() { - run(); - Logger.INFO("Loading Recipes for the Various machine blocks."); - } - - private static void run() { - - initModItems(); - tieredMachineHulls(); - energyCores(); - wirelessChargers(); - largeArcFurnace(); - industrialVacuumFurnace(); - fakeMachineCasingCovers(); - overflowValveCovers(); - superBuses(); - distillus(); - algaeFarm(); - chemPlant(); - zyngen(); - milling(); - sparging(); - chisels(); - rockBreaker(); - thermicFluidHeater(); - advHeatExchanger(); - chiselBuses(); - solidifierHatches(); - - gt4FarmManager(); - gt4Inventory(); - - multiForgeHammer(); - multiMolecularTransformer(); - multiXlTurbines(); - multiSolarTower(); - multiElementalDuplicator(); - - resonanceChambers(); - modulators(); - } - - private static void thermicFluidHeater() { - - RecipeUtils.addShapedGregtechRecipe( - CI.getPlate(5, 1), - CI.circuitTier5, - CI.getPlate(5, 1), - pipeTier7, - ItemList.Machine_IV_FluidHeater.get(1), - pipeTier7, - CI.getPlate(5, 1), - CI.circuitTier4, - CI.getPlate(5, 1), - GregtechItemList.Controller_IndustrialFluidHeater.get(1)); - } - - private static void advHeatExchanger() { - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - ItemList.Machine_Multi_HeatExchanger.get(1), - CI.getDoublePlate(6, 8), - CI.getScrew(6, 16), - CI.getCircuit(5, 8)) - .itemOutputs(GregtechItemList.XL_HeatExchanger.get(1)) - .fluidInputs(CI.tieredMaterials[5].getMolten(144 * 8)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - ItemList.Casing_StableTitanium.get(1), - CI.getPlate(5, 4), - CI.getScrew(5, 8)) - .itemOutputs(GregtechItemList.Casing_XL_HeatExchanger.get(1)) - .fluidInputs(CI.tieredMaterials[5].getMolten(144 * 2)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - - } - - private static void gt4FarmManager() { - - ItemList[] aInputHatches = new ItemList[] { ItemList.Hatch_Input_LV, ItemList.Hatch_Input_MV, - ItemList.Hatch_Input_HV, ItemList.Hatch_Input_EV, ItemList.Hatch_Input_IV, ItemList.Hatch_Input_LuV, - ItemList.Hatch_Input_ZPM, ItemList.Hatch_Input_UV }; - GregtechItemList[] aOutputMachines = new GregtechItemList[] { GregtechItemList.GT4_Crop_Harvester_LV, - GregtechItemList.GT4_Crop_Harvester_MV, GregtechItemList.GT4_Crop_Harvester_HV, - GregtechItemList.GT4_Crop_Harvester_EV, GregtechItemList.GT4_Crop_Harvester_IV, - GregtechItemList.GT4_Crop_Harvester_LuV, GregtechItemList.GT4_Crop_Harvester_ZPM, - GregtechItemList.GT4_Crop_Harvester_UV }; - - int aTier = 1; - for (int i = 0; i < 8; i++) { - RecipeUtils.addShapedRecipe( - CI.getRobotArm(aTier, 1), - CI.getSensor(aTier, 1), - CI.getRobotArm(aTier, 1), - ItemUtils.getOrePrefixStack(OrePrefixes.toolHeadSense, CI.tieredMaterials[aTier], 1), - CI.getTieredMachineHull(aTier, 1), - ItemUtils.getOrePrefixStack(OrePrefixes.toolHeadSense, CI.tieredMaterials[aTier], 1), - CI.getTieredCircuitOreDictName(aTier), - aInputHatches[i].get(1), - CI.getTieredCircuitOreDictName(aTier), - aOutputMachines[i].get(1)); - aTier++; - } - } - - private static void gt4Inventory() { - - GregtechItemList[] aOutputElectricCraftingTable = new GregtechItemList[] { - GregtechItemList.GT4_Electric_Auto_Workbench_LV, GregtechItemList.GT4_Electric_Auto_Workbench_MV, - GregtechItemList.GT4_Electric_Auto_Workbench_HV, GregtechItemList.GT4_Electric_Auto_Workbench_EV, - GregtechItemList.GT4_Electric_Auto_Workbench_IV, GregtechItemList.GT4_Electric_Auto_Workbench_LuV, - GregtechItemList.GT4_Electric_Auto_Workbench_ZPM, GregtechItemList.GT4_Electric_Auto_Workbench_UV }; - - int aTier = 1; - for (int i = 0; i < 8; i++) { - RecipeUtils.addShapedRecipe( - ItemUtils.getOrePrefixStack(OrePrefixes.plate, CI.tieredMaterials[aTier], 1), - ItemUtils.getSimpleStack(Blocks.crafting_table), - ItemUtils.getOrePrefixStack(OrePrefixes.plate, CI.tieredMaterials[aTier], 1), - CI.getTieredCircuitOreDictName(aTier), - CI.getTieredMachineHull(aTier), - CI.getTieredCircuitOreDictName(aTier), - ItemUtils.getOrePrefixStack(OrePrefixes.plate, CI.tieredMaterials[aTier], 1), - CI.getRobotArm(aTier, 1), - ItemUtils.getOrePrefixStack(OrePrefixes.plate, CI.tieredMaterials[aTier], 1), - aOutputElectricCraftingTable[i].get(1)); - aTier++; - } - } - - private static void multiForgeHammer() { - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(CI.machineHull_IV, 2), - ItemList.Machine_IV_Hammer.get(1), - CI.getPlate(4, 8), - CI.getBolt(5, 32), - ELEMENT.getInstance().ZIRCONIUM.getFineWire(32), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 4L)) - .itemOutputs(GregtechItemList.Controller_IndustrialForgeHammer.get(1)) - .fluidInputs(CI.getTieredFluid(4, 144 * 12)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Casing_IndustrialForgeHammer.get(1), - CI.bitsd, - new Object[] { "IBI", "HCH", "IHI", 'I', CI.getPlate(4, 1), 'B', ALLOY.BABBIT_ALLOY.getPlate(1), 'C', - ItemList.Casing_HeatProof.get(1), 'H', ALLOY.HASTELLOY_X.getRod(1) }); - } - - private static void multiMolecularTransformer() { - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getTieredGTPPMachineCasing(6, 1), - CI.getPlate(5, 16), - CI.getBolt(5, 32), - ALLOY.HG1223.getFineWire(64), - CI.getEmitter(4, 8), - ItemUtils.getItemStackOfAmountFromOreDict("circuitMaster", 10)) - .itemOutputs( - ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_11_MOLECULAR_TRANSFORMER, 1)) - .fluidInputs(CI.getTieredFluid(5, 144 * 16)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .metadata( - RESEARCH_ITEM, - ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_11_MOLECULAR_TRANSFORMER, 1)) - .metadata(RESEARCH_TIME, 30 * MINUTES) - .itemInputs( - ALLOY.HG1223.getFineWire(64), - ALLOY.HG1223.getFineWire(64), - ItemList.Electric_Motor_IV.get(16), - ItemList.Energy_LapotronicOrb.get(16), - CI.getTieredComponent(OrePrefixes.cableGt12, 6, 16), - CI.getTieredComponent(OrePrefixes.wireGt16, 5, 32), - ALLOY.ZERON_100.getFrameBox(4), - ALLOY.ZIRCONIUM_CARBIDE.getPlateDouble(32), - ALLOY.BABBIT_ALLOY.getPlate(64), - ALLOY.LEAGRISIUM.getGear(8), - new Object[] { CI.getTieredCircuitOreDictName(4), 64 }, - new Object[] { CI.getTieredCircuitOreDictName(5), 32 }, - new Object[] { CI.getTieredCircuitOreDictName(6), 16 }, - GregtechItemList.Laser_Lens_WoodsGlass.get(1)) - .fluidInputs( - ALLOY.NITINOL_60.getFluidStack(144 * 9 * (2)), - ALLOY.INCOLOY_MA956.getFluidStack(144 * 9 * (8)), - ALLOY.KANTHAL.getFluidStack(144 * 1 * (4))) - .itemOutputs(GregtechItemList.Controller_MolecularTransformer.get(1)) - .eut(TierEU.RECIPE_LuV) - .duration(10 * MINUTES) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(16), - CI.getPlate(6, 4), - CI.getScrew(6, 8), - ELEMENT.getInstance().PALLADIUM.getFineWire(16), - CI.getSensor(5, 2), - ItemUtils.getItemStackOfAmountFromOreDict("circuitElite", 4)) - .itemOutputs(GregtechItemList.Casing_Molecular_Transformer_1.get(1)) - .fluidInputs(CI.getTieredFluid(5, 144 * 4)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(16), - CI.getPlate(5, 4), - CI.getScrew(5, 8), - ItemList.Casing_Coil_Nichrome.get(2), - CI.getFieldGenerator(3, 2), - ItemUtils.getItemStackOfAmountFromOreDict("circuitData", 8)) - .itemOutputs(GregtechItemList.Casing_Molecular_Transformer_2.get(1)) - .fluidInputs(CI.getTieredFluid(5, 144 * 4)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(16), - ItemUtils.getSimpleStack(Blocks.glowstone, 16), - CI.getGear(5, 8), - ELEMENT.getInstance().TITANIUM.getWire04(4), - CI.getFieldGenerator(4, 2), - ItemUtils.getItemStackOfAmountFromOreDict("circuitData", 8)) - .itemOutputs(GregtechItemList.Casing_Molecular_Transformer_3.get(1)) - .fluidInputs(CI.getTieredFluid(5, 144 * 4)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - } - - private static void multiXlTurbines() { - - RecipeUtils.addShapedRecipe( - CI.getDoublePlate(4, 1), - CI.getElectricMotor(3, 1), - CI.getDoublePlate(4, 1), - ItemUtils.getItemStackOfAmountFromOreDict("cellLubricant", 1), - ItemList.Casing_Gearbox_Titanium.get(1), - ItemUtils.getItemStackOfAmountFromOreDict("cellLubricant", 1), - CI.getDoublePlate(4, 1), - CI.getElectricMotor(3, 1), - CI.getDoublePlate(4, 1), - GregtechItemList.Casing_Turbine_Shaft.get(1)); - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - ItemList.Casing_Turbine.get(1), - CI.getPlate(4, 4), - CI.getScrew(4, 8), - CI.getCircuit(4, 4), - CI.getGear(3, 8)) - .itemOutputs(GregtechItemList.Hatch_Turbine_Rotor.get(1)) - .fluidInputs(CI.tieredMaterials[3].getMolten(144 * 8)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Steam - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - ItemList.Casing_Turbine.get(1), - CI.getPlate(3, 4), - CI.getScrew(3, 8)) - .itemOutputs(GregtechItemList.Casing_Turbine_LP.get(1)) - .fluidInputs(CI.tieredMaterials[2].getMolten(144 * 2)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - ItemList.LargeSteamTurbine.get(1), - CI.getPlate(4, 8), - CI.getScrew(4, 16), - CI.getGear(4, 4), - CI.getCircuit(4, 8)) - .itemOutputs(GregtechItemList.Large_Steam_Turbine.get(1)) - .fluidInputs(CI.tieredMaterials[4].getMolten(144 * 8)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Gas - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - ItemList.Casing_Turbine1.get(1), - CI.getPlate(5, 4), - CI.getScrew(5, 8)) - .itemOutputs(GregtechItemList.Casing_Turbine_Gas.get(1)) - .fluidInputs(CI.tieredMaterials[4].getMolten(144 * 2)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - ItemList.LargeGasTurbine.get(1), - CI.getPlate(6, 8), - CI.getScrew(6, 16), - CI.getGear(6, 4), - CI.getCircuit(6, 8)) - .itemOutputs(GregtechItemList.Large_Gas_Turbine.get(1)) - .fluidInputs(CI.tieredMaterials[6].getMolten(144 * 8)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // HP Steam - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - ItemList.Casing_Turbine2.get(1), - CI.getPlate(4, 4), - CI.getScrew(4, 8)) - .itemOutputs(GregtechItemList.Casing_Turbine_HP.get(1)) - .fluidInputs(CI.tieredMaterials[3].getMolten(144 * 2)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - ItemList.LargeHPSteamTurbine.get(1), - CI.getPlate(5, 8), - CI.getScrew(5, 16), - CI.getGear(5, 4), - CI.getCircuit(5, 8)) - .itemOutputs(GregtechItemList.Large_HPSteam_Turbine.get(1)) - .fluidInputs(CI.tieredMaterials[5].getMolten(144 * 8)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Plasma - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - ItemList.Casing_Turbine3.get(1), - CI.getPlate(6, 4), - CI.getScrew(6, 8)) - .itemOutputs(GregtechItemList.Casing_Turbine_Plasma.get(1)) - .fluidInputs(CI.tieredMaterials[5].getMolten(144 * 2)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - ItemList.LargePlasmaTurbine.get(1), - CI.getPlate(7, 8), - CI.getScrew(7, 16), - CI.getGear(7, 4), - CI.getCircuit(7, 8)) - .itemOutputs(GregtechItemList.Large_Plasma_Turbine.get(1)) - .fluidInputs(CI.tieredMaterials[7].getMolten(144 * 8)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - new ItemStack(supercriticalFluidTurbineCasing, 1), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.plate), 4, 10101), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.screw), 8, 10101)) - .itemOutputs(GregtechItemList.Casing_Turbine_SC.get(1)) - .fluidInputs(FluidRegistry.getFluidStack("molten.adamantium alloy", 144 * 2)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(18), - GT_Utility.copyAmount(1, Loaders.SCTurbine), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.plate), 8, 10104), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.screw), 16, 10104), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.gearGt), 4, 10104), - CI.getCircuit(7, 8)) - .itemOutputs(GregtechItemList.Large_SCSteam_Turbine.get(1)) - .fluidInputs(FluidRegistry.getFluidStack("molten.hikarium", 144 * 8)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - - } - - private static void multiSolarTower() { - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(17), - CI.getTieredGTPPMachineCasing(3, 4), - ALLOY.MARAGING250.getPlate(8), - ALLOY.MARAGING250.getBolt(8), - ALLOY.MARAGING250.getScrew(8), - CI.getCircuit(5, 8)) - .itemOutputs(GregtechItemList.Industrial_Solar_Tower.get(1)) - .fluidInputs(CI.getTieredFluid(3, 144 * 16)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(17), - ALLOY.MARAGING350.getFrameBox(1), - ALLOY.STAINLESS_STEEL.getPlate(4), - ALLOY.MARAGING350.getScrew(8)) - .itemOutputs(GregtechItemList.Casing_SolarTower_Structural.get(1)) - .fluidInputs(CI.getTieredFluid(3, 144 * 4)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(17), - ALLOY.MARAGING250.getFrameBox(1), - ALLOY.STAINLESS_STEEL.getPlate(4), - ALLOY.MARAGING250.getBolt(16), - ELEMENT.getInstance().ALUMINIUM.getScrew(8)) - .itemOutputs(GregtechItemList.Casing_SolarTower_SaltContainment.get(1)) - .fluidInputs(CI.getTieredFluid(3, 144 * 4)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(17), - ALLOY.MARAGING250.getFrameBox(1), - ALLOY.STEEL_BLACK.getPlate(4), - ALLOY.MARAGING250.getScrew(8)) - .itemOutputs(GregtechItemList.Casing_SolarTower_HeatContainment.get(1)) - .fluidInputs(CI.getAlternativeTieredFluid(3, 144 * 4)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(17), - CI.getTieredGTPPMachineCasing(2, 1), - CI.getPlate(3, 2), - CI.getGear(3, 4), - CI.getElectricMotor(3, 2), - CI.getCircuit(3, 4)) - .itemOutputs(GregtechItemList.Solar_Tower_Reflector.get(1)) - .fluidInputs(CI.getTertiaryTieredFluid(3, 144 * 4)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - } - - private static void multiElementalDuplicator() { - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemList.Machine_IV_Replicator.get(1)) - .metadata(RESEARCH_TIME, 12 * HOURS) - .itemInputs( - CI.getTieredMachineHull(7, 4), - CI.getFieldGenerator(5, 16), - CI.getElectricMotor(7, 16), - CI.getElectricPiston(7, 4), - CI.getEnergyCore(6, 2), - CI.getPlate(7, 16), - CI.getScrew(7, 32), - CI.getBolt(6, 32), - CI.getTieredComponent(OrePrefixes.rod, 6, 10), - new Object[] { CI.getTieredCircuitOreDictName(7), 20 }, - ItemList.Tool_DataOrb.get(32), - GregtechItemList.Laser_Lens_Special.get(1)) - .fluidInputs( - CI.getTieredFluid(7, 144 * 32), - CI.getAlternativeTieredFluid(6, 144 * 16), - CI.getTertiaryTieredFluid(6, 144 * 16), - ALLOY.BABBIT_ALLOY.getFluidStack(128 * 144)) - .itemOutputs(GregtechItemList.Controller_ElementalDuplicator.get(1)) - .eut(TierEU.RECIPE_ZPM) - .duration(10 * MINUTES) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, GregtechItemList.Modulator_III.get(1)) - .metadata(RESEARCH_TIME, 4 * HOURS) - .itemInputs( - CI.getTieredGTPPMachineCasing(7, 2), - CI.getFieldGenerator(4, 4), - CI.getEnergyCore(4, 2), - CI.getPlate(7, 8), - CI.getScrew(6, 16), - CI.getBolt(6, 16), - CI.getTieredComponent(OrePrefixes.rod, 5, 16), - new Object[] { CI.getTieredCircuitOreDictName(6), 32 }, - ItemList.Tool_DataOrb.get(32)) - .fluidInputs( - CI.getTieredFluid(6, 144 * 16), - CI.getAlternativeTieredFluid(5, 144 * 8), - CI.getTertiaryTieredFluid(5, 144 * 8), - ALLOY.BABBIT_ALLOY.getFluidStack(64 * 144)) - .itemOutputs(GregtechItemList.Hatch_Input_Elemental_Duplicator.get(1)) - .eut(TierEU.RECIPE_LuV) - .duration(2 * HOURS) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, GregtechItemList.ResonanceChamber_III.get(1)) - .metadata(RESEARCH_TIME, 2 * HOURS) - .itemInputs( - CI.getTieredMachineHull(6, 5), - CI.getFieldGenerator(3, 16), - CI.getEnergyCore(2, 2), - CI.getPlate(7, 4), - CI.getScrew(7, 4), - CI.getBolt(6, 8), - CI.getTieredComponent(OrePrefixes.rod, 5, 4), - new Object[] { CI.getTieredCircuitOreDictName(5), 4 }, - ItemList.Tool_DataStick.get(4)) - .fluidInputs( - CI.getTieredFluid(5, 144 * 16), - CI.getAlternativeTieredFluid(4, 144 * 8), - CI.getTertiaryTieredFluid(4, 144 * 8), - ALLOY.BABBIT_ALLOY.getFluidStack(16 * 144)) - .itemOutputs(GregtechItemList.Casing_ElementalDuplicator.get(1)) - .eut(TierEU.RECIPE_LuV) - .duration(10 * MINUTES) - .addTo(AssemblyLine); - } - - private static void resonanceChambers() { - int aFieldTier = 1; - int aCasingTier = 4; - for (int i = 0; i < 4; i++) { - RecipeUtils.addShapedRecipe( - CI.getDoublePlate(aCasingTier, 1), - CI.getFieldGenerator(aFieldTier, 1), - CI.getDoublePlate(aCasingTier, 1), - CI.getFieldGenerator(aFieldTier, 1), - CI.getTieredMachineCasing(aCasingTier), - CI.getFieldGenerator(aFieldTier, 1), - CI.getDoublePlate(aCasingTier, 1), - CI.getFieldGenerator(aFieldTier, 1), - CI.getDoublePlate(aCasingTier, 1), - ItemUtils.simpleMetaStack(ModBlocks.blockSpecialMultiCasings2, i, 1)); - aCasingTier++; - aFieldTier++; - } - } - - private static void modulators() { - int aCasingTier = 4; - for (int i = 4; i < 8; i++) { - RecipeUtils.addShapedRecipe( - CI.getTieredCircuitOreDictName(aCasingTier), - CI.getPlate(aCasingTier, 1), - CI.getTieredCircuitOreDictName(aCasingTier), - CI.getPlate(aCasingTier, 1), - CI.getTieredMachineCasing(aCasingTier), - CI.getPlate(aCasingTier, 1), - CI.getTieredCircuitOreDictName(aCasingTier), - CI.getPlate(aCasingTier, 1), - CI.getTieredCircuitOreDictName(aCasingTier), - ItemUtils.simpleMetaStack(ModBlocks.blockSpecialMultiCasings2, i, 1)); - aCasingTier++; - } - } - - private static void zyngen() { - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(6), - CI.getTieredMachineHull(4), - ItemList.Machine_IV_AlloySmelter.get(1), - CI.getGear(3, 16), - CI.getBolt(3, 64), - CI.getPlate(4, 16)) - .itemOutputs(GregtechItemList.Industrial_AlloySmelter.get(1)) - .fluidInputs(CI.getAlternativeTieredFluid(4, 144 * 8)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - } - - private static void chemPlant() { - - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Casing_Machine_Custom_1.get(2L), - CI.bits, - new Object[] { "PhP", "PFP", "PwP", 'P', OrePrefixes.plate.get(Materials.Bronze), 'F', - OrePrefixes.frameGt.get(Materials.Bronze) }); - - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Casing_Machine_Custom_2.get(2L), - CI.bits, - new Object[] { "PPP", "hFw", "PPP", 'P', OrePrefixes.plate.get(Materials.Aluminium), 'F', - OrePrefixes.frameGt.get(Materials.Aluminium) }); - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(19), - CI.getTieredGTPPMachineCasing(2, 4), - CI.getTieredComponentOfMaterial(Materials.Aluminium, OrePrefixes.gearGt, 4), - CI.getTieredComponentOfMaterial(Materials.AnnealedCopper, OrePrefixes.plate, 16), - CI.getTieredComponentOfMaterial(Materials.Plastic, OrePrefixes.pipeLarge, 4), - CI.getTieredComponent(OrePrefixes.frameGt, 2, 4)) - .itemOutputs(GregtechItemList.ChemicalPlant_Controller.get(1)) - .fluidInputs(ALLOY.STEEL_BLACK.getFluidStack(2 * (144 * 4))) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(15), - CI.getTieredGTPPMachineCasing(1, 2), - ItemList.Hatch_Input_Bus_MV.get(1), - CI.getTieredComponentOfMaterial(Materials.Bronze, OrePrefixes.gearGt, 8), - CI.getTieredComponentOfMaterial(Materials.Lead, OrePrefixes.plate, 48), - CI.getTieredComponentOfMaterial(Materials.SolderingAlloy, OrePrefixes.wireFine, 16)) - .itemOutputs(GregtechItemList.Bus_Catalysts.get(1)) - .fluidInputs(ALLOY.BRONZE.getFluidStack(2 * (144 * 4))) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - - } - - private static void algaeFarm() { - - // Give the bad algae a use. - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 32)) - .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 4)) - .duration(15 * SECONDS) - .eut(16) - .addTo(distilleryRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(21), - CI.getTieredGTPPMachineCasing(0, 4), - CI.getTieredComponentOfMaterial(Materials.Aluminium, OrePrefixes.rod, 12), - CI.getTieredComponentOfMaterial(Materials.Wood, OrePrefixes.plate, 32), - CI.getTieredComponentOfMaterial(Materials.Steel, OrePrefixes.bolt, 16), - CI.getTieredComponentOfMaterial(Materials.Redstone, OrePrefixes.dust, 32)) - .itemOutputs(GregtechItemList.AlgaeFarm_Controller.get(1)) - .fluidInputs(ALLOY.POTIN.getFluidStack(2 * (144 * 4))) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - - } - - private static void distillus() { - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(19), - ItemList.Distillation_Tower.get(2), - GregtechItemList.GTPP_Casing_IV.get(16), - CI.getTieredComponent(OrePrefixes.circuit, 6, 8)) - .itemOutputs(GregtechItemList.Machine_Adv_DistillationTower.get(1)) - .fluidInputs( - ALLOY.AQUATIC_STEEL.getFluidStack(144 * 32), - ALLOY.BABBIT_ALLOY.getFluidStack(144 * 16), - ALLOY.BRONZE.getFluidStack(144 * 64), - ALLOY.KANTHAL.getFluidStack(144 * 16)) - .duration(10 * MINUTES) - .eut(TierEU.RECIPE_LuV) - .metadata(CHEMPLANT_CASING_TIER, 5) - .addTo(chemicalPlantRecipes); - } - - private static void overflowValveCovers() { - ItemStack aOutputs[] = new ItemStack[] { GregtechItemList.Cover_Overflow_LV.get(1L), - GregtechItemList.Cover_Overflow_MV.get(1L), GregtechItemList.Cover_Overflow_HV.get(1L), - GregtechItemList.Cover_Overflow_EV.get(1L), GregtechItemList.Cover_Overflow_IV.get(1L), }; - long[] voltageTiers = new long[] { TierEU.RECIPE_LV, TierEU.RECIPE_MV, TierEU.RECIPE_HV, TierEU.RECIPE_EV, - TierEU.RECIPE_IV }; - - for (int tier = 1; tier < aOutputs.length + 1; tier++) { - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(19), - CI.getElectricPump(tier, 2), - CI.getElectricMotor(tier, 2), - CI.getPlate(tier, 4)) - .itemOutputs(aOutputs[tier - 1].copy()) - .fluidInputs(Materials.SolderingAlloy.getMolten(tier * (144))) - .duration(20 * SECONDS) - .eut(voltageTiers[tier - 1]) - .addTo(assemblerRecipes); - - } - } - - private static void tieredMachineHulls() { - - GregtechItemList[] aHulls = new GregtechItemList[] { GregtechItemList.GTPP_Casing_ULV, - GregtechItemList.GTPP_Casing_LV, GregtechItemList.GTPP_Casing_MV, GregtechItemList.GTPP_Casing_HV, - GregtechItemList.GTPP_Casing_EV, GregtechItemList.GTPP_Casing_IV, GregtechItemList.GTPP_Casing_LuV, - GregtechItemList.GTPP_Casing_ZPM, GregtechItemList.GTPP_Casing_UV, GregtechItemList.GTPP_Casing_UHV }; - - long[] voltageTiers = new long[] { 16, TierEU.RECIPE_LV, TierEU.RECIPE_MV, TierEU.RECIPE_HV, TierEU.RECIPE_EV, - TierEU.RECIPE_IV, TierEU.RECIPE_LuV, TierEU.RECIPE_ZPM, TierEU.RECIPE_UV, TierEU.RECIPE_UHV }; - for (int i = 0; i < 10; i++) { - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(20), - CI.getTieredMachineCasing(i), - CI.getPlate(i, 8), - CI.getGear(i, 2), - CI.getTieredComponent(OrePrefixes.cableGt02, i, 4), - CI.getTieredComponent(OrePrefixes.circuit, i, 2)) - .itemOutputs(aHulls[i].get(1)) - .fluidInputs(CI.getAlternativeTieredFluid(i, 144 * (i + 1) * 2)) - .duration(20 * SECONDS) - .eut(voltageTiers[i]) - .addTo(assemblerRecipes); - - } - } - - private static void initModItems() { - IC2MFE = ItemUtils.getItemStackWithMeta(true, "IC2:blockElectric", "IC2_MFE", 1, 1); - IC2MFSU = ItemUtils.getItemStackWithMeta(true, "IC2:blockElectric", "IC2_MFSU", 2, 1); - - // Lava Boiler - boiler_Coal = ItemList.Machine_Bronze_Boiler.get(1); - - // IV/EV/HV MACHINES - IV_MACHINE_Electrolyzer = ItemList.Machine_IV_Electrolyzer.get(1); - EV_MACHINE_Centrifuge = ItemList.Machine_EV_Centrifuge.get(1); - EV_MACHINE_BendingMachine = ItemList.Machine_EV_Bender.get(1); - IV_MACHINE_Wiremill = ItemList.Machine_IV_Wiremill.get(1); - EV_MACHINE_Macerator = ItemList.Machine_EV_Macerator.get(1); - IV_MACHINE_Macerator = ItemList.Machine_IV_Macerator.get(1); - IV_MACHINE_Cutter = ItemList.Machine_IV_Cutter.get(1); - IV_MACHINE_Extruder = ItemList.Machine_IV_Extruder.get(1); - HV_MACHINE_Sifter = ItemList.Machine_HV_Sifter.get(1); - EV_MACHINE_ThermalCentrifuge = ItemList.Machine_EV_ThermalCentrifuge.get(1); - EV_MACHINE_OreWasher = ItemList.Machine_EV_OreWasher.get(1); - IV_MACHINE_AlloySmelter = ItemList.Machine_IV_AlloySmelter.get(1); - IV_MACHINE_Mixer = ItemList.Machine_IV_Mixer.get(1); - EV_MACHINE_ChemicalBath = ItemList.Machine_EV_ChemicalBath.get(1); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialCokeOven) { - if (Railcraft.isModLoaded()) { - // Misc - INPUT_RCCokeOvenBlock = ItemUtils - .getItemStackWithMeta(Railcraft.isModLoaded(), "Railcraft:machine.alpha", "Coke_Oven_RC", 7, 1); - } - } - runModRecipes(); - } - - private static void runModRecipes() { - // Computer Cube - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(CI.getDataOrb(), 4 * (1)), - ItemList.Cover_Screen.get(4), - CI.machineHull_IV, - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(7), 2)) - .itemOutputs(GregtechItemList.Gregtech_Computer_Cube.get(1)) - .fluidInputs(ELEMENT.getInstance().TANTALUM.getFluidStack(144 * 16)) - .duration(3 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Circuit programmer - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(CI.robotArm_LV, 4 * (1)), - ItemList.Cover_Controller.get(1, CI.electricMotor_MV), - CI.machineHull_MV, - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 2), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 2)) - .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockCircuitProgrammer)) - .fluidInputs(ELEMENT.getInstance().IRON.getFluidStack(144 * 4)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - - // Lead Lined Chest - for (ItemStack plateRubber : OreDictionary.getOres("plateAnyRubber")) { - GT_Values.RA.stdBuilder() - .itemInputs( - CI.machineHull_LV, - GT_Utility.copyAmount(32, plateRubber), - ItemUtils.getItemStackOfAmountFromOreDict("plateDenseLead", 9), - ItemUtils.getSimpleStack(Blocks.chest)) - .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockDecayablesChest)) - .fluidInputs(ELEMENT.getInstance().LEAD.getFluidStack(144 * 16)) - .duration(1 * MINUTES + 30 * SECONDS) - .eut(60) - .addTo(assemblerRecipes); - - } - - // RTG - GT_Values.RA.stdBuilder() - .itemOutputs(GregtechItemList.RTG.get(1)) - .fluidInputs(ALLOY.NIOBIUM_CARBIDE.getFluidStack(144 * 16)) - .duration(10 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Super Jukebox - GT_Values.RA.stdBuilder() - .itemInputs( - CI.machineHull_LV, - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 4), - ItemUtils.getItemStackOfAmountFromOreDict("plateTumbaga", 8), - ItemUtils.getSimpleStack(Blocks.jukebox)) - .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockCustomJukebox)) - .fluidInputs(ELEMENT.getInstance().COPPER.getFluidStack(144 * 2)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - // Poo Collector - GT_Values.RA.stdBuilder() - .itemInputs( - CI.machineHull_MV, - ItemList.FluidRegulator_MV.get(2), - CI.getTieredComponent(OrePrefixes.pipeMedium, 2, 2), - ALLOY.EGLIN_STEEL.getPlate(4), - ALLOY.POTIN.getScrew(6)) - .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockPooCollector)) - .fluidInputs(ALLOY.TUMBAGA.getFluidStack(144 * 4)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - // Adv. Poo Collector - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getTieredMachineHull(-1), - ItemUtils.getSimpleStack(ModBlocks.blockPooCollector), - ItemList.FluidRegulator_IV.get(2), - CI.getTieredComponent(OrePrefixes.pipeHuge, 6, 4), - CI.getTieredComponent(OrePrefixes.screw, 6, 16)) - .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockPooCollector, 8, 1)) - .fluidInputs(CI.getAlternativeTieredFluid(5, 144 * 9)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - ItemStack aBronzeBricks = ItemUtils.simpleMetaStack(GregTech_API.sBlockCasings1, 10, 1); - // Steam Macerator Multi - RecipeUtils.addShapedGregtechRecipe( - aBronzeBricks, - "gemDiamond", - aBronzeBricks, - "craftingPiston", - ALLOY.TUMBAGA.getFrameBox(1), - "craftingPiston", - aBronzeBricks, - "gemDiamond", - aBronzeBricks, - GregtechItemList.Controller_SteamMaceratorMulti.get(1)); - - // Steam Washer Multi - RecipeUtils.addShapedGregtechRecipe( - aBronzeBricks, - "plateWroughtIron", - aBronzeBricks, - "rotorTin", - ALLOY.TUMBAGA.getFrameBox(1), - "rotorTin", - aBronzeBricks, - "plateWroughtIron", - aBronzeBricks, - GregtechItemList.Controller_SteamWasherMulti.get(1)); - - // Steam Mixer Multi - RecipeUtils.addShapedGregtechRecipe( - aBronzeBricks, - ALLOY.TUMBAGA.getRing(1), - aBronzeBricks, - ALLOY.TUMBAGA.getRotor(1), - ALLOY.TUMBAGA.getFrameBox(1), - ALLOY.TUMBAGA.getRotor(1), - aBronzeBricks, - ALLOY.TUMBAGA.getRing(1), - aBronzeBricks, - GregtechItemList.Controller_SteamMixerMulti.get(1)); - - ItemStack aWoodenCasing = ItemUtils.simpleMetaStack(GregTech_API.sBlockCasings9, 2, 1); - // WaterPump - RecipeUtils.addShapedGregtechRecipe( - "frameGtBronze", - "frameGtBronze", - "frameGtBronze", - "frameGtBronze", - "gearBronze", - "frameGtBronze", - aWoodenCasing, - aWoodenCasing, - aWoodenCasing, - GregtechItemList.WaterPump.get(1)); - - // Steam Centrifuge Multi - RecipeUtils.addShapedGregtechRecipe( - aBronzeBricks, - "plateWroughtIron", - aBronzeBricks, - "gearBronze", - ALLOY.TUMBAGA.getFrameBox(1), - "gearBronze", - aBronzeBricks, - "plateWroughtIron", - aBronzeBricks, - GregtechItemList.Controller_SteamCentrifugeMulti.get(1)); - - // Steam Forge Hammer Multi - RecipeUtils.addShapedGregtechRecipe( - aBronzeBricks, - "plateWroughtIron", - aBronzeBricks, - "plateWroughtIron", - Blocks.anvil, - "plateWroughtIron", - aBronzeBricks, - ALLOY.TUMBAGA.getFrameBox(1), - aBronzeBricks, - GregtechItemList.Controller_SteamForgeHammerMulti.get(1)); - - // Steam Compressor Multi - RecipeUtils.addShapedGregtechRecipe( - aBronzeBricks, - "craftingPiston", - aBronzeBricks, - ALLOY.TUMBAGA.getGear(1), - ALLOY.TUMBAGA.getFrameBox(1), - ALLOY.TUMBAGA.getGear(1), - aBronzeBricks, - "craftingPiston", - aBronzeBricks, - GregtechItemList.Controller_SteamCompressorMulti.get(1)); - - // 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)); - - // Flask Configurator - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(8), - CI.getTieredMachineHull(2), - ItemUtils.getSimpleStack(ModBlocks.blockCircuitProgrammer), - VolumetricFlaskHelper.getVolumetricFlask(8), - CI.getTieredComponent(OrePrefixes.pipeSmall, 2, 2), - CI.getPlate(2, 4)) - .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockVolumetricFlaskSetter, 1)) - .fluidInputs(CI.getAlternativeTieredFluid(1, 144 * 8)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialCentrifuge) { - // Industrial Centrifuge - RECIPE_IndustrialCentrifugeController = GregtechItemList.Industrial_Centrifuge.get(1); - RECIPE_IndustrialCentrifugeCasing = GregtechItemList.Casing_Centrifuge1.get(1); - - // Industrial Centrifuge - RecipeUtils.addShapedGregtechRecipe( - CI.circuitTier4, - pipeHugeStainlessSteel, - CI.circuitTier4, - CI.component_Plate[6], - EV_MACHINE_Centrifuge, - CI.component_Plate[6], - CI.component_Plate[8], - CI.machineCasing_EV, - CI.component_Plate[8], - RECIPE_IndustrialCentrifugeController); - // Centrifuge Casing - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[6], - "stickTumbaga", - CI.component_Plate[6], - CI.component_Plate[8], - "stickTumbaga", - CI.component_Plate[8], - CI.component_Plate[6], - "stickTumbaga", - CI.component_Plate[6], - RECIPE_IndustrialCentrifugeCasing); - - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.MARAGING250.getPlate(4), - ALLOY.INCONEL_792.getPlate(2), - ALLOY.TUMBAGA.getRod(3), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RECIPE_IndustrialCentrifugeCasing) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - } - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialCokeOven) { - // Industrial Coke Oven - RECIPE_IndustrialCokeOvenController = GregtechItemList.Industrial_CokeOven.get(1); - RECIPE_IndustrialCokeOvenFrame = GregtechItemList.Casing_CokeOven.get(1); - RECIPE_IndustrialCokeOvenCasingA = GregtechItemList.Casing_CokeOven_Coil1.get(1); - RECIPE_IndustrialCokeOvenCasingB = GregtechItemList.Casing_CokeOven_Coil2.get(1); - - if (Railcraft.isModLoaded()) { - // Industrial Coke Oven - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[7], - CI.circuitTier4, - CI.component_Plate[7], - CI.machineCasing_EV, - INPUT_RCCokeOvenBlock, - CI.machineCasing_EV, - CI.component_Plate[7], - CI.circuitTier4, - CI.component_Plate[7], - RECIPE_IndustrialCokeOvenController); - } - // Coke Oven Frame Casing - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[7], - CI.component_Rod[7], - CI.component_Plate[7], - CI.component_Rod[7], - "frameGtTantalloy61", - CI.component_Rod[7], - CI.component_Plate[7], - CI.component_Rod[7], - CI.component_Plate[7], - RECIPE_IndustrialCokeOvenFrame); - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.TANTALLOY_61.getPlate(4), - ALLOY.TANTALLOY_61.getRod(4), - ALLOY.TANTALLOY_61.getFrameBox(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RECIPE_IndustrialCokeOvenFrame) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - // Coke Oven Coil 1 - RecipeUtils.addShapedGregtechRecipe( - plateBronze, - plateBronze, - plateBronze, - "frameGtBronze", - CI.gearboxCasing_Tier_1, - "frameGtBronze", - plateBronze, - plateBronze, - plateBronze, - RECIPE_IndustrialCokeOvenCasingA); - // Coke Oven Coil 2 - RecipeUtils.addShapedGregtechRecipe( - plateSteel, - plateSteel, - plateSteel, - "frameGtSteel", - CI.gearboxCasing_Tier_2, - "frameGtSteel", - plateSteel, - plateSteel, - plateSteel, - RECIPE_IndustrialCokeOvenCasingB); - } - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialElectrolyzer) { - // Industrial Electrolyzer - RECIPE_IndustrialElectrolyzerController = GregtechItemList.Industrial_Electrolyzer.get(1); - RECIPE_IndustrialElectrolyzerFrame = GregtechItemList.Casing_Electrolyzer.get(1); - - // Electrolyzer Frame Casing - RecipeUtils.addShapedGregtechRecipe( - "platePotin", - "stickLongChrome", - "platePotin", - "stickLongPotin", - "frameGtPotin", - "stickLongPotin", - "platePotin", - "stickLongPotin", - "platePotin", - RECIPE_IndustrialElectrolyzerFrame); - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.POTIN.getPlate(4), - ALLOY.POTIN.getLongRod(3), - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Chrome, 1), - ALLOY.POTIN.getFrameBox(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RECIPE_IndustrialElectrolyzerFrame) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - // Industrial Electrolyzer - RecipeUtils.addShapedGregtechRecipe( - "plateStellite", - CI.circuitTier5, - "plateStellite", - CI.machineCasing_IV, - IV_MACHINE_Electrolyzer, - CI.machineCasing_IV, - "plateStellite", - "rotorStellite", - "plateStellite", - RECIPE_IndustrialElectrolyzerController); - } - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialPlatePress) { - // Industrial Material Press - RECIPE_IndustrialMaterialPressController = GregtechItemList.Industrial_PlatePress.get(1); - RECIPE_IndustrialMaterialPressFrame = GregtechItemList.Casing_MaterialPress.get(1); - - // Material Press Frame Casing - RecipeUtils.addShapedGregtechRecipe( - "plateTitanium", - "stickLongTumbaga", - "plateTitanium", - "stickTantalloy60", - "frameGtTumbaga", - "stickTantalloy60", - "plateTitanium", - "stickLongTumbaga", - "plateTitanium", - RECIPE_IndustrialMaterialPressFrame); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 4), - ALLOY.TANTALLOY_60.getRod(2), - ALLOY.TUMBAGA.getLongRod(2), - ALLOY.TUMBAGA.getFrameBox(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RECIPE_IndustrialMaterialPressFrame) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - // Industrial Material Press - RecipeUtils.addShapedGregtechRecipe( - "plateTitanium", - CI.circuitTier4, - "plateTitanium", - CI.machineCasing_EV, - EV_MACHINE_BendingMachine, - CI.machineCasing_EV, - "plateTitanium", - CI.circuitTier4, - "plateTitanium", - RECIPE_IndustrialMaterialPressController); - } - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialMacerationStack) { - // Industrial Maceration Stack - RECIPE_IndustrialMacerationStackController = GregtechItemList.Industrial_MacerationStack.get(1); - RECIPE_IndustrialMacerationStackFrame = GregtechItemList.Casing_MacerationStack.get(1); - - // Maceration Frame Casing - RecipeUtils.addShapedGregtechRecipe( - "platePalladium", - "platePalladium", - "platePalladium", - "stickPlatinum", - "frameGtInconel625", - "stickPlatinum", - "platePalladium", - "stickLongPalladium", - "platePalladium", - RECIPE_IndustrialMacerationStackFrame); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Palladium, 5), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Platinum, 2), - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Palladium, 1), - ALLOY.INCONEL_625.getFrameBox(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RECIPE_IndustrialMacerationStackFrame) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - // Industrial Maceration stack - RecipeUtils.addShapedGregtechRecipe( - "plateTitanium", - EV_MACHINE_Macerator, - "plateTitanium", - EV_MACHINE_Macerator, - CI.circuitTier4, - EV_MACHINE_Macerator, - "plateTitanium", - EV_MACHINE_Macerator, - "plateTitanium", - RECIPE_IndustrialMacerationStackController); - // T2-Upgrade Card - RecipeUtils.addShapedGregtechRecipe( - "plateTungstenCarbide", - IV_MACHINE_Macerator, - "plateTungstenCarbide", - IV_MACHINE_Macerator, - CI.circuitTier7, - IV_MACHINE_Macerator, - "plateTungstenCarbide", - IV_MACHINE_Macerator, - "plateTungstenCarbide", - GregtechItemList.Maceration_Upgrade_Chip.get(1)); - } - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialWireMill) { - // Industrial Wire Factory - RECIPE_IndustrialWireFactoryController = GregtechItemList.Industrial_WireFactory.get(1); - RECIPE_IndustrialWireFactoryFrame = GregtechItemList.Casing_WireFactory.get(1); - - // Wire Factory Frame Casing - RecipeUtils.addShapedGregtechRecipe( - "plateBlueSteel", - "stickBlueSteel", - "plateBlueSteel", - "stickBlueSteel", - "frameGtBlueSteel", - "stickBlueSteel", - "plateBlueSteel", - "stickBlueSteel", - "plateBlueSteel", - RECIPE_IndustrialWireFactoryFrame); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlueSteel, 4), - GT_OreDictUnificator.get(OrePrefixes.stick, Materials.BlueSteel, 4), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlueSteel, 1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RECIPE_IndustrialWireFactoryFrame) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - // Industrial Wire Factory - RecipeUtils.addShapedGregtechRecipe( - "plateZeron100", - CI.machineCasing_IV, - "plateZeron100", - CI.circuitTier5, - IV_MACHINE_Wiremill, - CI.circuitTier5, - "plateZeron100", - CI.machineCasing_IV, - "plateZeron100", - RECIPE_IndustrialWireFactoryController); - } - - // Tiered Tanks - if (CORE.ConfigSwitches.enableMachine_FluidTanks) { - CI.component_Plate[1] = "plateTin"; - pipeTier1 = "pipeLargeClay"; - CI.circuitTier1 = ItemList.Circuit_Primitive.get(1); - CI.component_Plate[2] = "plateCopper"; - pipeTier2 = "pipeHugeClay"; - CI.component_Plate[3] = "plateBronze"; - pipeTier3 = "pipeMediumBronze"; - CI.component_Plate[4] = "plateIron"; - pipeTier4 = "pipeMediumSteel"; - CI.component_Plate[5] = "plateSteel"; - CI.component_Plate[6] = "plateRedstone"; - CI.component_Plate[7] = "plateAluminium"; - CI.component_Plate[8] = "plateDarkSteel"; - ItemStack waterBucket = ItemUtils.getSimpleStack(Items.water_bucket); - - // Allows clearing stored fluids. - GregtechItemList[] aTanks = new GregtechItemList[] { GregtechItemList.GT_FluidTank_ULV, - GregtechItemList.GT_FluidTank_LV, GregtechItemList.GT_FluidTank_MV, GregtechItemList.GT_FluidTank_HV }; - for (GregtechItemList aTank : aTanks) { - RecipeUtils.addShapelessGregtechRecipe(new Object[] { aTank.get(1) }, aTank.get(1)); - } - - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[1], - CI.component_Plate[5], - CI.component_Plate[1], - CI.component_Plate[4], - pipeTier1, - CI.component_Plate[4], - CI.component_Plate[4], - waterBucket, - CI.component_Plate[4], - GregtechItemList.GT_FluidTank_ULV.get(1)); - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[5], - CI.component_Plate[4], - CI.component_Plate[5], - CI.component_Plate[3], - pipeTier2, - CI.component_Plate[3], - CI.component_Plate[3], - CI.electricPump_LV, - CI.component_Plate[3], - GregtechItemList.GT_FluidTank_LV.get(1)); - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[8], - CI.component_Plate[3], - CI.component_Plate[8], - CI.component_Plate[5], - pipeTier3, - CI.component_Plate[5], - CI.component_Plate[5], - CI.electricPump_LV, - CI.component_Plate[5], - GregtechItemList.GT_FluidTank_MV.get(1)); - RecipeUtils.addShapedGregtechRecipe( - CI.circuitTier1, - CI.component_Plate[7], - CI.circuitTier1, - CI.component_Plate[8], - pipeTier4, - CI.component_Plate[8], - CI.circuitTier1, - CI.electricPump_MV, - CI.circuitTier1, - GregtechItemList.GT_FluidTank_HV.get(1)); - } - - if (CORE.ConfigSwitches.enableMultiblock_MultiTank) { - // Industrial Multi Tank - // RECIPE_IndustrialMultiTankController = GregtechItemList.Industrial_MultiTank.get(1); - RECIPE_IndustrialMultiTankFrame = GregtechItemList.Casing_MultitankExterior.get(1); - - // Industrial Multi Tank Casing - RecipeUtils.addShapedGregtechRecipe( - "stickGrisium", - "plateGrisium", - "stickGrisium", - "plateGrisium", - "frameGtGrisium", - "plateGrisium", - "plateGrisium", - "plateGrisium", - "plateGrisium", - RECIPE_IndustrialMultiTankFrame); - // Industrial Multi Tank - RecipeUtils.addShapedGregtechRecipe( - "pipeHugeTantalloy60", - "gearGrisium", - "pipeHugeTantalloy60", - CI.circuitTier4, - RECIPE_IndustrialMultiTankFrame, - CI.circuitTier4, - "plateDoubleGrisium", - "rotorGrisium", - "plateDoubleGrisium", - RECIPE_IndustrialMultiTankController); - } - // TODO - - // Semi-Fluid Generators - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(14), - CI.getTieredMachineHull(1, 1), - CI.getElectricMotor(1, 2), - CI.getElectricPiston(1, 2), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Cobalt, 1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 1L), - CI.getGear(1, 2)) - .itemOutputs(GregtechItemList.Generator_SemiFluid_LV.get(1)) - .fluidInputs(Materials.Plastic.getMolten(144)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(14), - CI.getTieredMachineHull(2, 1), - CI.getElectricMotor(2, 2), - CI.getElectricPiston(2, 2), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnnealedCopper, 1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1L), - CI.getGear(2, 2)) - .itemOutputs(GregtechItemList.Generator_SemiFluid_MV.get(1)) - .fluidInputs(Materials.Plastic.getMolten(144)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(14), - CI.getTieredMachineHull(3, 1), - CI.getElectricMotor(3, 2), - CI.getElectricPiston(3, 2), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L), - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Chrome, 2)) - .itemOutputs(GregtechItemList.Generator_SemiFluid_HV.get(1)) - .fluidInputs(Materials.Plastic.getMolten(144)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(14), - CI.getTieredMachineHull(4, 1), - CI.getElectricMotor(4, 2), - CI.getElectricPiston(4, 2), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Titanium, 1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), - CI.getGear(4, 2)) - .itemOutputs(GregtechItemList.Generator_SemiFluid_EV.get(1)) - .fluidInputs(Materials.Plastic.getMolten(144)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(14), - CI.getTieredMachineHull(5, 1), - CI.getElectricMotor(5, 2), - CI.getElectricPiston(5, 2), - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 1L), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), - CI.getGear(5, 2)) - .itemOutputs(GregtechItemList.Generator_SemiFluid_IV.get(1)) - .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(144)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Generator_SemiFluid_LV.get(1L), - CI.bits, - new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_LV, 'P', ItemList.Electric_Piston_LV, 'E', - ItemList.Electric_Motor_LV, 'C', OrePrefixes.circuit.get(Materials.LV), 'W', - OrePrefixes.cableGt01.get(Materials.Cobalt), 'G', ALLOY.TUMBAGA.getGear(2) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Generator_SemiFluid_MV.get(1L), - CI.bits, - new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_MV, 'P', ItemList.Electric_Piston_MV, 'E', - ItemList.Electric_Motor_MV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', - OrePrefixes.cableGt01.get(Materials.AnnealedCopper), 'G', ALLOY.EGLIN_STEEL.getGear(2) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Generator_SemiFluid_HV.get(1L), - CI.bits, - new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_HV, 'P', ItemList.Electric_Piston_HV, 'E', - ItemList.Electric_Motor_HV, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', - OrePrefixes.cableGt01.get(Materials.Gold), 'G', - GT_OreDictUnificator.get(OrePrefixes.gearGt, Materials.Chrome, 1) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Generator_SemiFluid_EV.get(1L), - CI.bits, - new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_EV, 'P', ItemList.Electric_Piston_EV, 'E', - ItemList.Electric_Motor_EV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', - OrePrefixes.cableGt01.get(Materials.Titanium), 'G', ALLOY.INCOLOY_DS.getGear(1) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Generator_SemiFluid_IV.get(1L), - CI.bits, - new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_IV, 'P', ItemList.Electric_Piston_IV, 'E', - ItemList.Electric_Motor_IV, 'C', OrePrefixes.circuit.get(Materials.IV), 'W', - OrePrefixes.cableGt01.get(Materials.Tungsten), 'G', ALLOY.NITINOL_60.getGear(1) }); - - if (CORE.ConfigSwitches.enableMultiblock_AlloyBlastSmelter) { - // Industrial Blast Smelter - RECIPE_IndustrialBlastSmelterController = GregtechItemList.Industrial_AlloyBlastSmelter.get(1); - RECIPE_IndustrialBlastSmelterFrame = GregtechItemList.Casing_BlastSmelter.get(1); - RECIPE_IndustrialBlastSmelterCoil = GregtechItemList.Casing_Coil_BlastSmelter.get(1); - - // Blast Smelter - RecipeUtils.addShapedGregtechRecipe( - "plateZirconiumCarbide", - CI.circuitTier5, - "plateZirconiumCarbide", - cableTier6, - IV_MACHINE_AlloySmelter, - cableTier6, - "plateZirconiumCarbide", - CI.circuitTier5, - "plateZirconiumCarbide", - RECIPE_IndustrialBlastSmelterController); - // Blast Smelter Frame Casing - RecipeUtils.addShapedGregtechRecipe( - "plateZirconiumCarbide", - CI.craftingToolHammer_Hard, - "plateZirconiumCarbide", - "plateZirconiumCarbide", - "frameGtZirconiumCarbide", - "plateZirconiumCarbide", - "plateZirconiumCarbide", - CI.craftingToolWrench, - "plateZirconiumCarbide", - RECIPE_IndustrialBlastSmelterFrame); - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.ZIRCONIUM_CARBIDE.getPlate(6), - ALLOY.ZIRCONIUM_CARBIDE.getFrameBox(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RECIPE_IndustrialBlastSmelterFrame) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - // Blast Smelter Coil - RecipeUtils.addShapedGregtechRecipe( - "plateStaballoy", - "plateStaballoy", - "plateStaballoy", - "frameGtStaballoy", - CI.gearboxCasing_Tier_3, - "frameGtStaballoy", - "plateStaballoy", - "plateStaballoy", - "plateStaballoy", - RECIPE_IndustrialBlastSmelterCoil); - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.STABALLOY.getPlate(6), - ALLOY.STABALLOY.getFrameBox(2), - CI.gearboxCasing_Tier_3, - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RECIPE_IndustrialBlastSmelterCoil) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - } - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_Coil_Infinity.get(1), - ItemList.Reactor_Coolant_Sp_6.get(4), - ALLOY.LAURENIUM.getPlateDouble(2), - CustomItemList.eM_Coil.get(1)) - .itemOutputs(GregtechItemList.Casing_Coil_QuantumForceTransformer.get(1)) - .fluidInputs(ALLOY.QUANTUM.getFluidStack(144 * 4)) - .duration(1 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.Casing_Coil_QuantumForceTransformer.get(1), - 2048 * 120 * 20, - 2048, - (int) GT_Values.VP[11], - 16, - new Object[] { GregtechItemList.Controller_MolecularTransformer.get(1), - GT_ModHandler.getModItem(EternalSingularity.ID, "eternal_singularity", 1), - new Object[] { OrePrefixes.circuit.get(Materials.UEV), 8 }, ItemList.Electric_Pump_UEV.get(4), - ItemList.Field_Generator_UEV.get(4), GregtechItemList.Laser_Lens_Special.get(1) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(144 * 10), - ALLOY.PIKYONIUM.getFluidStack(144 * 32) }, - GregtechItemList.QuantumForceTransformer.get(1), - 1200 * 20, - (int) GT_Values.VP[11]); - - if (CORE.ConfigSwitches.enableMultiblock_MatterFabricator) { - // Industrial Matter Fabricator - RECIPE_IndustrialMatterFabController = GregtechItemList.Industrial_MassFab.get(1); - RECIPE_IndustrialMatterFabFrame = GregtechItemList.Casing_MatterFab.get(1); - RECIPE_IndustrialMatterFabCoil = GregtechItemList.Casing_MatterGen.get(1); - - // Matter Fabricator CPU - RecipeUtils.addShapedGregtechRecipe( - CI.getPlate(8, 1), - CI.circuitTier8, - CI.getPlate(8, 1), - GT_OreDictUnificator.get(OrePrefixes.cableGt04.get(Materials.NaquadahAlloy), 1L), - CI.machineCasing_UV, - GT_OreDictUnificator.get(OrePrefixes.cableGt04.get(Materials.NaquadahAlloy), 1L), - CI.getPlate(8, 1), - CI.circuitTier8, - CI.getPlate(8, 1), - RECIPE_IndustrialMatterFabController); - // Matter Fabricator Frame Casing - RecipeUtils.addShapedGregtechRecipe( - "plateNiobiumCarbide", - CI.component_Rod[8], - "plateNiobiumCarbide", - CI.component_Rod[8], - "frameGtInconel690", - CI.component_Rod[8], - "plateNiobiumCarbide", - CI.component_Rod[8], - "plateNiobiumCarbide", - RECIPE_IndustrialMatterFabFrame); - GT_Values.RA.stdBuilder() - .itemOutputs(RECIPE_IndustrialMatterFabFrame) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - // Matter Fabricator Coil - RecipeUtils.addShapedGregtechRecipe( - CI.getPlate(6, 1), - CI.getPlate(7, 1), - CI.getPlate(6, 1), - "frameGtStellite", - CI.machineCasing_UV, - "frameGtStellite", - CI.getPlate(6, 1), - CI.getPlate(7, 1), - CI.getPlate(6, 1), - RECIPE_IndustrialMatterFabCoil); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.machineCasing_UV, - ALLOY.ZERON_100.getPlate(4), - ALLOY.PIKYONIUM.getPlate(2), - ALLOY.STELLITE.getFrameBox(2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RECIPE_IndustrialMatterFabCoil) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - } - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialSifter) { - // Industrial Sieve - RECIPE_IndustrialSieveController = GregtechItemList.Industrial_Sifter.get(1); - RECIPE_IndustrialSieveFrame = GregtechItemList.Casing_Sifter.get(1); - RECIPE_IndustrialSieveGrate = GregtechItemList.Casing_SifterGrate.get(1); - - // Industrial Sieve - RecipeUtils.addShapedGregtechRecipe( - "plateEglinSteel", - CI.circuitTier3, - "plateEglinSteel", - cableTier4, - HV_MACHINE_Sifter, - cableTier4, - "plateEglinSteel", - CI.circuitTier3, - "plateEglinSteel", - RECIPE_IndustrialSieveController); - // Industrial Sieve Casing - RecipeUtils.addShapedGregtechRecipe( - "plateEglinSteel", - "plateEglinSteel", - "plateEglinSteel", - "plateEglinSteel", - "frameGtTumbaga", - "plateEglinSteel", - "plateEglinSteel", - "plateEglinSteel", - "plateEglinSteel", - RECIPE_IndustrialSieveFrame); - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.EGLIN_STEEL.getPlate(8), - ALLOY.TUMBAGA.getFrameBox(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RECIPE_IndustrialSieveFrame) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - // Industrial Sieve Grate - RecipeUtils.addShapedGregtechRecipe( - "frameGtEglinSteel", - "wireFineSteel", - "frameGtEglinSteel", - "wireFineSteel", - "wireFineSteel", - "wireFineSteel", - "frameGtEglinSteel", - "wireFineSteel", - "frameGtEglinSteel", - RECIPE_IndustrialSieveGrate); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Steel, 5), - ALLOY.EGLIN_STEEL.getFrameBox(4), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(RECIPE_IndustrialSieveGrate) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - } - - if (CORE.ConfigSwitches.enableMultiblock_TreeFarmer) { - // Industrial Tree Farmer - RECIPE_TreeFarmController = GregtechItemList.Industrial_TreeFarm.get(1); - RECIPE_TreeFarmFrame = GregtechItemList.Casing_PLACEHOLDER_TreeFarmer.get(1); - // Industrial Tree Farm Controller - RecipeUtils.addShapedGregtechRecipe( - ItemList.Field_Generator_IV.get(1), - ALLOY.INCOLOY_MA956.getRotor(1), - ItemList.Field_Generator_IV.get(1), - ALLOY.NITINOL_60.getPlate(1), - GregtechItemList.GTPP_Casing_IV.get(1), - ALLOY.NITINOL_60.getPlate(1), - ItemList.Field_Generator_IV.get(1), - ALLOY.INCONEL_792.getComponentByPrefix(OrePrefixes.pipeMedium, 1), - ItemList.Field_Generator_IV.get(1), - RECIPE_TreeFarmController); - // Industrial Tree Farm Frame - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(2), - ALLOY.TUMBAGA.getFrameBox(1), - ItemUtils.getItemStackOfAmountFromOreDict("pipeTinySteel", 1), - ItemList.MV_Coil.get(1), - ItemList.IC2_Plantball.get(4), - GT_OreDictUnificator.get(OrePrefixes.plank, Materials.Wood, 8)) - .itemOutputs(RECIPE_TreeFarmFrame) - .fluidInputs(GT_ModHandler.getDistilledWater(2000)) - .duration(10 * SECONDS) - .eut(64) - .addTo(assemblerRecipes); - - } - - if (CORE.ConfigSwitches.enableMachine_Tesseracts) { - // Tesseracts - RECIPE_TesseractGenerator = GregtechItemList.GT4_Tesseract_Generator.get(1); - RECIPE_TesseractTerminal = GregtechItemList.GT4_Tesseract_Terminal.get(1); - // Tesseract Generator - RecipeUtils.addShapedGregtechRecipe( - "plateTitanium", - "circuitMaster", - "plateTitanium", - "circuitMaster", - ItemUtils.getSimpleStack(Blocks.ender_chest), - "circuitMaster", - "plateTitanium", - GregtechItemList.Gregtech_Computer_Cube.get(1), - "plateTitanium", - RECIPE_TesseractGenerator); - // Tesseract Terminal - RecipeUtils.addShapedGregtechRecipe( - "plateTitanium", - "circuitElite", - "plateTitanium", - "circuitElite", - ItemUtils.getSimpleStack(Blocks.ender_chest), - "circuitElite", - "plateTitanium", - CI.machineHull_EV, - "plateTitanium", - RECIPE_TesseractTerminal); - } - - if (CORE.ConfigSwitches.enableMachine_SimpleWasher) { - final List washers = ImmutableList.of( - GregtechItemList.SimpleDustWasher_LV.get(1), - GregtechItemList.SimpleDustWasher_MV.get(1), - GregtechItemList.SimpleDustWasher_HV.get(1), - GregtechItemList.SimpleDustWasher_EV.get(1), - GregtechItemList.SimpleDustWasher_IV.get(1), - GregtechItemList.SimpleDustWasher_LuV.get(1), - GregtechItemList.SimpleDustWasher_ZPM.get(1), - GregtechItemList.SimpleDustWasher_UV.get(1)); - - for (int i = 0; i < washers.size(); i++) { - final int tier = i + 1; - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getTieredMachineHull(tier), - CI.getTieredComponent(OrePrefixes.screw, tier, tier * 4), - CI.getTieredComponent(OrePrefixes.plate, tier - 1, tier * 2), - CI.getTieredComponent(OrePrefixes.rod, tier, tier), - CI.getTieredComponent(OrePrefixes.circuit, tier, 1)) - .itemOutputs(washers.get(i)) - .fluidInputs(CI.getTieredFluid(tier, 144 * tier)) - .duration(20 * 5 * tier) - .eut(GT_Values.VP[tier]) - .addTo(assemblerRecipes); - - } - } - - if (CORE.ConfigSwitches.enableMachine_Pollution && PollutionUtils.isPollutionEnabled()) { - - RecipeUtils.addShapedGregtechRecipe( - "plateCarbon", - "plateCarbon", - "plateCarbon", - "dustCarbon", - "dustCarbon", - "dustCarbon", - "plateCarbon", - "plateCarbon", - "plateCarbon", - ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 0, 1)); - - RecipeUtils.addShapedGregtechRecipe( - "plateCarbon", - "plateCarbon", - "plateCarbon", - "cellLithiumPeroxide", - "dustCarbon", - "cellLithiumPeroxide", - "plateCarbon", - "plateCarbon", - "plateCarbon", - ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1)); - - // Pollution Detector - RecipeUtils.addShapedGregtechRecipe( - "plateSteel", - CI.sensor_LV, - "plateSteel", - "plateSteel", - CI.electricMotor_LV, - "plateSteel", - CI.getTieredCircuit(1), - CI.machineHull_LV, - CI.getTieredCircuit(1), - GregtechItemList.Pollution_Detector.get(1)); - - // LV - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[1], - ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 0, 1), - CI.component_Plate[1], - CI.component_Plate[1], - CI.electricMotor_LV, - CI.component_Plate[1], - CI.getTieredCircuit(1), - CI.machineHull_LV, - CI.getTieredCircuit(1), - GregtechItemList.Pollution_Cleaner_LV.get(1)); - // MV - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[2], - ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 0, 1), - CI.component_Plate[2], - CI.component_Plate[2], - CI.electricMotor_MV, - CI.component_Plate[2], - CI.getTieredCircuit(2), - CI.machineHull_MV, - CI.getTieredCircuit(2), - GregtechItemList.Pollution_Cleaner_MV.get(1)); - // HV - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[3], - ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 0, 1), - CI.component_Plate[3], - CI.component_Plate[3], - CI.electricMotor_HV, - CI.component_Plate[3], - CI.getTieredCircuit(3), - CI.machineHull_HV, - CI.getTieredCircuit(3), - GregtechItemList.Pollution_Cleaner_HV.get(1)); - // EV - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[4], - ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 0, 1), - CI.component_Plate[4], - CI.component_Plate[4], - CI.electricMotor_EV, - CI.component_Plate[4], - CI.getTieredCircuit(4), - CI.machineHull_EV, - CI.getTieredCircuit(4), - GregtechItemList.Pollution_Cleaner_EV.get(1)); - // IV - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[5], - ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1), - CI.component_Plate[5], - CI.component_Plate[5], - CI.electricMotor_IV, - CI.component_Plate[5], - CI.getTieredCircuit(5), - CI.machineHull_IV, - CI.getTieredCircuit(5), - GregtechItemList.Pollution_Cleaner_IV.get(1)); - // LuV - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[6], - ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1), - CI.component_Plate[6], - CI.component_Plate[6], - CI.electricMotor_LuV, - CI.component_Plate[6], - CI.getTieredCircuit(6), - CI.machineHull_LuV, - CI.getTieredCircuit(6), - GregtechItemList.Pollution_Cleaner_LuV.get(1)); - // ZPM - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[7], - ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1), - CI.component_Plate[7], - CI.component_Plate[7], - CI.electricMotor_ZPM, - CI.component_Plate[7], - CI.getTieredCircuit(7), - CI.machineHull_ZPM, - CI.getTieredCircuit(7), - GregtechItemList.Pollution_Cleaner_ZPM.get(1)); - // UV - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[8], - ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1), - CI.component_Plate[8], - CI.component_Plate[8], - CI.electricMotor_UV, - CI.component_Plate[8], - CI.getTieredCircuit(8), - CI.machineHull_UV, - CI.getTieredCircuit(8), - GregtechItemList.Pollution_Cleaner_UV.get(1)); - // MAX - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[9], - ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1), - CI.component_Plate[9], - CI.component_Plate[9], - CI.electricMotor_UHV, - CI.component_Plate[9], - CI.getTieredCircuit(9), - CI.machineHull_UHV, - CI.getTieredCircuit(9), - GregtechItemList.Pollution_Cleaner_MAX.get(1)); - } - - if (CORE.ConfigSwitches.enableMultiblock_ThermalBoiler) { - RECIPE_ThermalBoilerController = GregtechItemList.GT4_Thermal_Boiler.get(1); - RECIPE_ThermalBoilerCasing = GregtechItemList.Casing_ThermalContainment.get(2); - ItemStack centrifugeEV = ItemList.Machine_EV_Centrifuge.get(1); - - RecipeUtils.addShapedGregtechRecipe( - "craftingGeothermalGenerator", - centrifugeEV, - "craftingGeothermalGenerator", - "gearGtTitanium", - CI.getTieredCircuitOreDictName(6), - "gearGtTitanium", - "craftingGeothermalGenerator", - centrifugeEV, - "craftingGeothermalGenerator", - RECIPE_ThermalBoilerController); - - RecipeUtils.addShapedGregtechRecipe( - "craftingGeothermalGenerator", - centrifugeEV, - "craftingGeothermalGenerator", - "gearGtTungstenSteel", - CI.getTieredCircuitOreDictName(5), - "gearGtTungstenSteel", - "craftingGeothermalGenerator", - centrifugeEV, - "craftingGeothermalGenerator", - RECIPE_ThermalBoilerController); - - RecipeUtils.addShapedGregtechRecipe( - ALLOY.MARAGING350.getPlate(1), - "plateStainlessSteel", - ALLOY.MARAGING350.getPlate(1), - "circuitAdvanced", - CI.machineCasing_HV, - "circuitAdvanced", - ALLOY.MARAGING350.getPlate(1), - ALLOY.MARAGING350.getPlate(1), - ALLOY.MARAGING350.getPlate(1), - RECIPE_ThermalBoilerCasing); - - // Lava Filter Recipe - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(18), - ItemUtils.getItemStackOfAmountFromOreDict("dustCarbon", 32), - ItemUtils.getItemStackOfAmountFromOreDict("wireFineSteel", 32), - ItemUtils.getItemStackOfAmountFromOreDict("ringTumbaga", 16), - ItemUtils.getItemStackOfAmountFromOreDict("foilCopper", 4), - ItemUtils.getItemStackWithMeta(true, "IC2:itemPartCarbonMesh", "RawCarbonMesh", 0, 64)) - .itemOutputs(ItemUtils.getSimpleStack(ModItems.itemLavaFilter, 16)) - .fluidInputs(CI.getTieredFluid(3, 144)) - .duration(1 * MINUTES + 20 * SECONDS) - .eut(240) - .addTo(assemblerRecipes); - - } - - // Air Intake Hatch - RecipeUtils.addShapedGregtechRecipe( - CI.component_Plate[6], - ItemList.Casing_Grate.get(1), - CI.component_Plate[6], - CI.component_Plate[6], - CI.getFluidRegulator(5, 1), - CI.component_Plate[6], - CI.getTieredCircuit(5), - ItemList.Hatch_Input_IV.get(1), - CI.getTieredCircuit(5), - GregtechItemList.Hatch_Air_Intake.get(1)); - - RecipeUtils.addShapedGregtechRecipe( - CI.getPlate(7, 1), - GregtechItemList.Hatch_Air_Intake.get(1), - CI.getPlate(7, 1), - CI.getPlate(7, 1), - CI.getFluidRegulator(7, 1), - CI.getPlate(7, 1), - CI.getTieredCircuit(7), - ItemList.Hatch_Input_ZPM.get(1), - CI.getTieredCircuit(7), - GregtechItemList.Hatch_Air_Intake_Extreme.get(1)); - - if (CORE.ConfigSwitches.enableMultiblock_LiquidFluorideThoriumReactor) { - - // Thorium Reactor - RECIPE_LFTRController = GregtechItemList.ThoriumReactor.get(1); - RECIPE_LFTRInnerCasing = GregtechItemList.Casing_Reactor_II.get(1); // Zeron - RECIPE_LFTROuterCasing = GregtechItemList.Casing_Reactor_I.get(1); // Hastelloy - - ItemStack controlCircuit = ItemUtils.getSimpleStack(ModItems.itemCircuitLFTR); - RecipeUtils.addShapedGregtechRecipe( - controlCircuit, - "cableGt12Naquadah", - controlCircuit, - "plateDoubleHastelloyN", - GregtechItemList.Gregtech_Computer_Cube.get(1), - "plateDoubleHastelloyN", - "plateThorium232", - CI.machineHull_IV, - "plateThorium232", - RECIPE_LFTRController); - RecipeUtils.addShapedGregtechRecipe( - "plateDoubleHastelloyC276", - CI.craftingToolScrewdriver, - "plateDoubleHastelloyC276", - "gearGtTalonite", - CI.fieldGenerator_LV, - "gearGtTalonite", - "plateDoubleHastelloyC276", - CI.craftingToolHammer_Hard, - "plateDoubleHastelloyC276", - RECIPE_LFTRInnerCasing); - - ItemStack IC2HeatPlate = ItemUtils.getItemStackFromFQRN("IC2:reactorPlatingHeat", 1); - RecipeUtils.addShapedGregtechRecipe( - "plateDoubleHastelloyN", - IC2HeatPlate, - "plateDoubleHastelloyN", - IC2HeatPlate, - "frameGtHastelloyC276", - IC2HeatPlate, - "plateDoubleHastelloyN", - IC2HeatPlate, - "plateDoubleHastelloyN", - RECIPE_LFTROuterCasing); - - // LFTR Control Circuit - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(6), 1), - CI.fieldGenerator_HV) - .itemOutputs(controlCircuit) - .duration(4 * MINUTES) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - // Fission Fuel Plant - RecipeUtils.addShapedGregtechRecipe( - CI.getTieredCircuitOreDictName(5), - CI.craftingToolSolderingIron, - CI.getTieredCircuitOreDictName(5), - "plateDenseTungstenSteel", - GregtechItemList.Gregtech_Computer_Cube.get(1), - "plateDenseTungstenSteel", - "gearGtStellite", - CI.machineHull_IV, - "gearGtStellite", - GregtechItemList.Industrial_FuelRefinery.get(1)); - - ItemStack mInnerTank = ItemList.Super_Tank_IV.get(1); - - // Incoloy Casing - RecipeUtils.addShapedGregtechRecipe( - "plateIncoloyDS", - "pipeHugeStaballoy", - "plateIncoloyDS", - "gearGtIncoloyDS", - mInnerTank, - "gearGtIncoloyDS", - "plateIncoloyDS", - "pipeHugeStaballoy", - "plateIncoloyDS", - GregtechItemList.Casing_Refinery_Internal.get(1)); - - // Hastelloy-N Sealant Casing - RecipeUtils.addShapedGregtechRecipe( - "plateIncoloyMA956", - "plateHastelloyN", - "plateIncoloyMA956", - "plateHastelloyN", - "frameGtHastelloyC276", - "plateHastelloyN", - "plateIncoloyMA956", - "plateHastelloyN", - "plateIncoloyMA956", - GregtechItemList.Casing_Refinery_External.get(1)); - - // Hastelloy-X Structural Casing - RecipeUtils.addShapedGregtechRecipe( - "ringInconel792", - "gearGtHastelloyX", - CI.component_Plate[5], - CI.craftingToolHammer_Hard, - "frameGtHastelloyC276", - CI.craftingToolWrench, - CI.component_Plate[5], - CI.getTieredMachineCasing(4), - "ringInconel792", - GregtechItemList.Casing_Refinery_Structural.get(1)); - - RecipeUtils.addShapedGregtechRecipe( - CI.getPlate(5, 1), - ALLOY.HASTELLOY_X.getPlateDouble(1), - CI.getPlate(5, 1), - CI.getPlate(5, 1), - CI.getTieredMachineCasing(5), - CI.getPlate(5, 1), - CI.getRobotArm(5, 1), - ItemList.Casing_FrostProof.get(1), - CI.getRobotArm(5, 1), - GregtechItemList.ColdTrap_IV.get(1)); - RecipeUtils.addShapedGregtechRecipe( - CI.getPlate(7, 1), - ALLOY.HS188A.getPlateDouble(1), - CI.getPlate(7, 1), - CI.getPlate(7, 1), - GregtechItemList.ColdTrap_IV.get(1), - CI.getPlate(7, 1), - CI.getRobotArm(7, 1), - ItemList.Casing_FrostProof.get(1), - CI.getRobotArm(7, 1), - GregtechItemList.ColdTrap_ZPM.get(1)); - - RecipeUtils.addShapedGregtechRecipe( - CI.getFieldGenerator(3, 1), - CI.getRobotArm(5, 1), - CI.getPlate(5, 1), - ALLOY.HASTELLOY_N.getPlateDouble(1), - ItemList.Machine_IV_ChemicalReactor.get(1), - ALLOY.HASTELLOY_N.getPlateDouble(1), - CI.getPlate(5, 1), - ALLOY.HASTELLOY_N.getPlateDouble(1), - CI.getFieldGenerator(3, 1), - GregtechItemList.ReactorProcessingUnit_IV.get(1)); - RecipeUtils.addShapedGregtechRecipe( - CI.getFieldGenerator(5, 1), - CI.getRobotArm(7, 1), - CI.getPlate(7, 1), - ALLOY.HS188A.getPlateDouble(1), - GregtechItemList.ReactorProcessingUnit_IV.get(1), - ALLOY.HS188A.getPlateDouble(1), - CI.getPlate(7, 1), - ALLOY.HS188A.getPlateDouble(1), - CI.getFieldGenerator(5, 1), - GregtechItemList.ReactorProcessingUnit_ZPM.get(1)); - - // Nuclear Salt Processing Plant Controller - RECIPE_SaltPlantController = GregtechItemList.Nuclear_Salt_Processing_Plant.get(1); - - RecipeUtils.addShapedGregtechRecipe( - "plateOsmiridium", - GregtechItemList.ReactorProcessingUnit_IV.get(1), - "plateOsmiridium", - "plateRuridit", - CI.getTieredCircuitOreDictName(7), - "plateRuridit", - "plateOsmiridium", - GregtechItemList.ColdTrap_IV.get(1), - "plateOsmiridium", - RECIPE_SaltPlantController); - } - - // Cyclotron - if (CORE.ConfigSwitches.enableMultiblock_Cyclotron) { - RECIPE_CyclotronController = GregtechItemList.COMET_Cyclotron.get(1); - RECIPE_CyclotronOuterCasing = GregtechItemList.Casing_Cyclotron_External.get(1); - RECIPE_CyclotronInnerCoil = GregtechItemList.Casing_Cyclotron_Coil.get(1); - - // Outer Casing - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_FrostProof.get(1), - ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 0, 4), - ALLOY.INCOLOY_DS.getPlate(8), - ALLOY.INCONEL_690.getScrew(16), - ALLOY.EGLIN_STEEL.getLongRod(4), - CI.getElectricPiston(3, 2)) - .itemOutputs(RECIPE_CyclotronOuterCasing) - .fluidInputs(ALLOY.ZIRCONIUM_CARBIDE.getFluidStack(144 * 8) // Input Flui - ) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Inner Coil - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Casing_Coil_Nichrome.get(1), - ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 1, 8), - ALLOY.INCOLOY_MA956.getPlate(8), - ALLOY.TANTALLOY_61.getBolt(16), - ALLOY.INCOLOY_020.getScrew(32), - CI.getFieldGenerator(4, 1)) - .itemOutputs(RECIPE_CyclotronInnerCoil) - .fluidInputs(ALLOY.HG1223.getFluidStack(144 * 5) // Input Flui - ) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - // Controller - GT_Values.RA.stdBuilder() - .itemInputs( - CI.machineHull_IV, - ItemUtils.getSimpleStack(RECIPE_CyclotronInnerCoil, 2), - ALLOY.INCOLOY_020.getPlate(8), - ALLOY.TANTALLOY_61.getGear(2), - ALLOY.INCOLOY_MA956.getScrew(16), - ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(5), 16)) - .itemOutputs(RECIPE_CyclotronController) - .fluidInputs(ALLOY.INCOLOY_020.getFluidStack(144 * 9) // Input Flui - ) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - } - - // Mazut - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Controller_LargeSemifluidGenerator.get(1L), - CI.bitsd, - new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_EV, 'P', ItemList.Electric_Piston_EV, 'E', - ItemList.Electric_Pump_EV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', - OrePrefixes.cableGt08.get(Materials.Electrum), 'G', ALLOY.INCONEL_792.getGear(1) }); - - if (CORE.ConfigSwitches.enableMultiblock_PowerSubstation) { - RecipeUtils.addShapedRecipe( - "screwTitanium", - "plateIncoloy020", - "screwTitanium", - "plateIncoloy020", - "frameGtIncoloyMA956", - "plateIncoloy020", - "screwTitanium", - "plateIncoloy020", - "screwTitanium", - GregtechItemList.Casing_Power_SubStation.get(1)); - - ItemStack mBattery = ItemUtils.getSimpleStack(ModItems.itemCircuitLFTR); - - 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", - GregtechItemList.PowerSubStation.get(1)); - } - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialThermalCentrifuge) { - RecipeUtils.addShapedRecipe( - "plateRedSteel", - CI.craftingToolHammer_Hard, - "plateRedSteel", - "plateRedSteel", - "frameGtBlackSteel", - "plateRedSteel", - "plateRedSteel", - CI.craftingToolWrench, - "plateRedSteel", - GregtechItemList.Casing_ThermalCentrifuge.get(1)); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedSteel, 6), - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Casing_ThermalCentrifuge.get(1L)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - RecipeUtils.addShapedRecipe( - "plateRedSteel", - "circuitData", - "plateRedSteel", - "stickTalonite", - EV_MACHINE_ThermalCentrifuge, - "stickTalonite", - "plateRedSteel", - "gearGtTalonite", - "plateRedSteel", - GregtechItemList.Industrial_ThermalCentrifuge.get(1)); - } - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialWashPlant) { - RecipeUtils.addShapedRecipe( - "plateGrisium", - CI.craftingToolHammer_Hard, - "plateGrisium", - "plateTalonite", - "frameGtGrisium", - "plateTalonite", - "plateGrisium", - CI.craftingToolWrench, - "plateGrisium", - GregtechItemList.Casing_WashPlant.get(1)); - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.LEAGRISIUM.getPlate(4), - ALLOY.TALONITE.getPlate(2), - ALLOY.LEAGRISIUM.getFrameBox(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Casing_WashPlant.get(1L)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - RecipeUtils.addShapedRecipe( - "plateGrisium", - EV_MACHINE_OreWasher, - "plateGrisium", - "plateTalonite", - "circuitData", - "plateTalonite", - "plateGrisium", - EV_MACHINE_ChemicalBath, - "plateGrisium", - GregtechItemList.Industrial_WashPlant.get(1)); - } - - if (CORE.ConfigSwitches.enableMultiblock_LargeAutoCrafter) { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(GregtechItemList.Casing_Multi_Use.get(1), 1), - ItemList.Block_IridiumTungstensteel.get(1), - CI.getTieredComponent(OrePrefixes.circuit, 2, 16), - CI.getTieredComponent(OrePrefixes.screw, 5, 32), - CI.getTieredComponent(OrePrefixes.bolt, 5, 12), - CI.getTieredComponent(OrePrefixes.plate, 6, 8)) - .itemOutputs(GregtechItemList.Casing_Autocrafter.get(1)) - .fluidInputs(CI.getTertiaryTieredFluid(6, 144 * (4))) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Refinery_Structural.get(4), - ItemUtils.getSimpleStack(ModItems.itemCircuitLFTR, 1), - CI.getTieredComponent(OrePrefixes.cableGt08, 6, 16), - CI.getTransmissionComponent(5, 2), - GregtechItemList.Gregtech_Computer_Cube.get(1)) - .itemOutputs(GregtechItemList.GT4_Multi_Crafter.get(1)) - .fluidInputs(CI.getTieredFluid(7, 144 * 8)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(GregtechItemList.Casing_Multi_Use.get(1), 1), - CI.getEmitter(4, 2), - CI.getRobotArm(4, 2), - CI.getTieredComponent(OrePrefixes.circuit, 2, 8), - CI.getTieredComponent(OrePrefixes.screw, 3, 8), - CI.getTieredComponent(OrePrefixes.plate, 5, 4)) - .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockProjectTable)) - .fluidInputs(CI.getAlternativeTieredFluid(5, 144 * 4)) - .duration(1 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - } - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialCuttingMachine) { - ItemStack plate = ALLOY.MARAGING300.getPlate(1); - RecipeUtils.addShapedRecipe( - plate, - CI.craftingToolHammer_Hard, - plate, - "plateStellite", - "frameGtTalonite", - "plateStellite", - plate, - CI.craftingToolWrench, - plate, - GregtechItemList.Casing_CuttingFactoryFrame.get(1)); - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.MARAGING300.getPlate(4), - ALLOY.STELLITE.getPlate(2), - ALLOY.TALONITE.getFrameBox(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Casing_CuttingFactoryFrame.get(1L)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - RecipeUtils.addShapedRecipe( - plate, - CI.getTieredCircuit(4), - plate, - "wireFinePlatinum", - IV_MACHINE_Cutter, - "wireFinePlatinum", - plate, - CI.getTieredCircuit(4), - plate, - GregtechItemList.Industrial_CuttingFactoryController.get(1)); - } - - // IV_MACHINE_Extruder - if (CORE.ConfigSwitches.enableMultiblock_IndustrialExtrudingMachine) { - ItemStack plate = ALLOY.INCONEL_690.getPlate(1); - RecipeUtils.addShapedRecipe( - plate, - CI.craftingToolHammer_Hard, - plate, - "plateTalonite", - "frameGtStaballoy", - "plateTalonite", - plate, - CI.craftingToolWrench, - plate, - GregtechItemList.Casing_Extruder.get(1)); - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.INCONEL_690.getPlate(4), - ALLOY.TALONITE.getPlate(2), - ALLOY.STABALLOY.getFrameBox(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Casing_Extruder.get(1L)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - RecipeUtils.addShapedRecipe( - plate, - CI.getTieredCircuit(5), - plate, - CI.electricPiston_IV, - IV_MACHINE_Extruder, - CI.electricPiston_IV, - plate, - CI.getTieredCircuit(5), - plate, - GregtechItemList.Industrial_Extruder.get(1)); - } - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialFishingPort) { - ItemStack plate = ALLOY.AQUATIC_STEEL.getPlate(1); - RecipeUtils.addShapedRecipe( - plate, - CI.craftingToolHammer_Hard, - plate, - "plateEglinSteel", - "frameGtEglinSteel", - "plateEglinSteel", - plate, - CI.craftingToolWrench, - plate, - GregtechItemList.Casing_FishPond.get(1)); - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.AQUATIC_STEEL.getPlate(4), - ALLOY.EGLIN_STEEL.getPlate(2), - ALLOY.EGLIN_STEEL.getFrameBox(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Casing_FishPond.get(1L)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - RecipeUtils.addShapedRecipe( - plate, - CI.getTieredCircuit(5), - plate, - "wireFineElectrum", - ItemUtils.getSimpleStack(ModBlocks.blockFishTrap), - "wireFineElectrum", - plate, - CI.getTieredCircuit(5), - plate, - GregtechItemList.Industrial_FishingPond.get(1)); - } - - if (true) { - // Advanced Vacuum Freezer - ItemStack plate = ALLOY.LEAGRISIUM.getPlateDouble(1); - ItemStack gear = ALLOY.INCOLOY_MA956.getGear(1); - ItemStack frame = ALLOY.NITINOL_60.getFrameBox(1); - ItemStack cell1 = ItemList.Reactor_Coolant_He_6.get(1); - ItemStack cell2 = ItemList.Reactor_Coolant_NaK_6.get(1); - - RecipeUtils.addShapedRecipe( - plate, - gear, - plate, - cell1, - frame, - cell2, - plate, - gear, - plate, - GregtechItemList.Casing_AdvancedVacuum.get(1)); - 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, - GregtechItemList.Industrial_Cryogenic_Freezer.get(1)); - - // Advanced Blast Furnace - plate = ALLOY.HASTELLOY_N.getPlateDouble(1); - gear = ALLOY.HASTELLOY_W.getGear(1); - frame = ALLOY.HASTELLOY_X.getFrameBox(1); - cell1 = ItemUtils.simpleMetaStack("IC2:reactorHeatSwitchDiamond:1", 1, 1); - cell2 = ItemUtils.simpleMetaStack("IC2:reactorVentGold:1", 1, 1); - ItemStack cell3 = ItemUtils.simpleMetaStack("IC2:reactorVentDiamond:1:1", 1, 1); - - RecipeUtils.addShapedRecipe( - plate, - cell1, - plate, - cell3, - frame, - cell2, - plate, - gear, - plate, - GregtechItemList.Casing_Adv_BlastFurnace.get(1)); - 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, - GregtechItemList.Machine_Adv_BlastFurnace.get(1)); - // Hatch_Input_Pyrotheum - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Input_IV.get(1), - GregtechItemList.Casing_Adv_BlastFurnace.get(1), - ALLOY.MARAGING250.getPlate(4), - ALLOY.MARAGING300.getGear(1), - GT_OreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 2), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Hatch_Input_Pyrotheum.get(1L)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - // Casing_Adv_BlastFurnace - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.HASTELLOY_X.getFrameBox(1), - ALLOY.HASTELLOY_N.getPlateDouble(4), - ALLOY.HASTELLOY_W.getGear(1), - ItemUtils.simpleMetaStack("IC2:reactorHeatSwitchDiamond:1", 1, 1), - ItemUtils.simpleMetaStack("IC2:reactorVentGold:1", 1, 1), - ItemUtils.simpleMetaStack("IC2:reactorVentDiamond:1:1", 1, 1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Casing_Adv_BlastFurnace.get(1L)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - // Advanced Implosion Compressor - plate = ItemUtils.getItemStackOfAmountFromOreDict("plateAlloyIridium", 1); - gear = ALLOY.LEAGRISIUM.getGear(1); - frame = ALLOY.CINOBITE.getFrameBox(1); - cell1 = ItemUtils.simpleMetaStack("IC2:reactorHeatSwitchDiamond:1", 1, 1); - cell2 = ItemUtils.simpleMetaStack("IC2:reactorVentGold:1", 1, 1); - - RecipeUtils.addShapedRecipe( - gear, - CI.getTieredCircuit(6), - gear, - CI.fieldGenerator_IV, - CI.machineHull_ZPM, - CI.robotArm_IV, - plate, - GregtechItemList.Gregtech_Computer_Cube.get(1), - plate, - GregtechItemList.Machine_Adv_ImplosionCompressor.get(1)); - - // Supply Depot - plate = ALLOY.TUNGSTEN_CARBIDE.getPlateDouble(1); - gear = ALLOY.TRINIUM_TITANIUM.getRing(1); - frame = ALLOY.TUNGSTEN_CARBIDE.getFrameBox(1); - cell1 = CI.conveyorModule_LuV; - cell2 = CI.electricMotor_LuV; - ItemStack casingAmazon = GregtechItemList.Casing_AmazonWarehouse.get(1); - - RecipeUtils.addShapedRecipe( - plate, - ItemUtils.getItemStackOfAmountFromOreDict("cableGt12VanadiumGallium", 1), - plate, - cell1, - frame, - cell2, - plate, - gear, - plate, - GregtechItemList.Casing_AmazonWarehouse.get(1)); - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.TUNGSTEN_CARBIDE.getFrameBox(1), - ALLOY.TUNGSTEN_CARBIDE.getPlateDouble(4), - ALLOY.TRINIUM_TITANIUM.getRing(1), - ItemList.Electric_Motor_LuV.get(1), - ItemList.Conveyor_Module_LuV.get(1), - ItemUtils.getItemStackOfAmountFromOreDict("cableGt12VanadiumGallium", 1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Casing_AmazonWarehouse.get(1L)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - RecipeUtils.addShapedRecipe( - casingAmazon, - CI.getTieredCircuit(7), - casingAmazon, - CI.robotArm_LuV, - ItemList.Machine_LuV_Unboxinator.get(1), - CI.robotArm_LuV, - CI.conveyorModule_LuV, - GregtechItemList.Gregtech_Computer_Cube.get(1), - CI.conveyorModule_LuV, - GregtechItemList.Amazon_Warehouse_Controller.get(1)); - - // Industrial Mixing Machine - RecipeUtils.addShapedRecipe( - "plateStaballoy", - CI.getTieredCircuit(5), - "plateStaballoy", - "plateZirconiumCarbide", - IV_MACHINE_Mixer, - "plateZirconiumCarbide", - "plateStaballoy", - CI.getTieredCircuit(5), - "plateStaballoy", - GregtechItemList.Industrial_Mixer.get(1)); - } - - if (CORE.ConfigSwitches.enableMultiblock_IndustrialMultiMachine) { - ItemStack plate = ALLOY.STABALLOY.getPlate(1); - - ItemStack o_Compressor = ItemList.Machine_IV_Compressor.get(1); - ItemStack o_Lathe = ItemList.Machine_IV_Lathe.get(1); - ItemStack o_Electromagnet = ItemList.Machine_IV_Polarizer.get(1); - ItemStack o_Fermenter = ItemList.Machine_IV_Fermenter.get(1); - ItemStack o_Distillery = ItemList.Machine_IV_FluidExtractor.get(1); - ItemStack o_Extractor = ItemList.Machine_IV_Extractor.get(1); - - RecipeUtils.addShapedRecipe( - plate, - CI.craftingToolHammer_Hard, - plate, - "plateStainlessSteel", - "frameGtZirconiumCarbide", - "plateStainlessSteel", - plate, - CI.craftingToolWrench, - plate, - GregtechItemList.Casing_Multi_Use.get(1)); - GT_Values.RA.stdBuilder() - .itemInputs( - ALLOY.STABALLOY.getPlate(4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 2), - ALLOY.ZIRCONIUM_CARBIDE.getFrameBox(1), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(GregtechItemList.Casing_Multi_Use.get(1L)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(assemblerRecipes); - - RecipeUtils.addShapedRecipe( - o_Compressor, - o_Lathe, - o_Electromagnet, - plate, - ItemUtils.getSimpleStack(ModBlocks.blockProjectTable), - plate, - o_Fermenter, - o_Distillery, - o_Extractor, - GregtechItemList.Industrial_MultiMachine.get(1)); - } - - // Drilling Platform Casings - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getItemStackOfAmountFromOreDict("frameGtTriniumNaquadahCarbonite", 4), - ItemUtils.getItemStackOfAmountFromOreDict("plateDoubleTriniumTitaniumAlloy", 1 * (1)), - ItemUtils.getItemStackOfAmountFromOreDict("gearGtPikyonium64B", 2 * (1)), - ALLOY.TRINIUM_REINFORCED_STEEL.getPlateDouble(4 * 1), - ItemUtils.getSimpleStack((CI.machineHull_LuV), 1 * 1)) - .itemOutputs(GregtechItemList.Casing_BedrockMiner.get(1)) - .fluidInputs(ALLOY.MARAGING350.getFluidStack(144 * 16 * 1)) - .duration((int) GT_Values.V[4]) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - - int aCostMultiplier = 1; - - // Reservoir Hatch - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Input_EV.get(1), - GT_ModHandler.getModItem(RemoteIO.ID, "tile.machine", 1), - ItemList.Electric_Pump_EV.get(1)) - .itemOutputs(GregtechItemList.Hatch_Reservoir.get(1)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - // Mystic Frame - GT_Values.RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Multi_Use.get(1), - ItemList.Field_Generator_MV.get(1, CI.circuitTier7), - ItemList.Field_Generator_HV.get(1, CI.circuitTier7), - ItemList.Emitter_HV.get(1, CI.circuitTier7), - ItemList.Sensor_HV.get(1, CI.circuitTier7), - CI.getTieredComponent(OrePrefixes.plate, 7, 8 * aCostMultiplier), - CI.getTieredComponent(OrePrefixes.wireGt08, 8, 4 * aCostMultiplier)) - .itemOutputs(ItemUtils.getSimpleStack(Dimension_Everglades.blockPortalFrame, 2)) - .fluidInputs(CI.getTieredFluid(6, (144 * 8))) - .duration(4 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - - Logger.INFO("Done loading recipes for the Various machine blocks."); - } - - private static void energyCores() { - - ItemStack[] aBufferOutput = new ItemStack[] { RECIPE_Buffer_ULV, RECIPE_Buffer_LV, RECIPE_Buffer_MV, - RECIPE_Buffer_HV, RECIPE_Buffer_EV, RECIPE_Buffer_IV, RECIPE_Buffer_LuV, RECIPE_Buffer_ZPM, - RECIPE_Buffer_UV, RECIPE_Buffer_MAX }; - - long[] voltageTiers = new long[] { 16, TierEU.RECIPE_LV, TierEU.RECIPE_MV, TierEU.RECIPE_HV, TierEU.RECIPE_EV, - TierEU.RECIPE_IV, TierEU.RECIPE_LuV, TierEU.RECIPE_ZPM, TierEU.RECIPE_UV, TierEU.RECIPE_UHV }; - - ItemStack[] aOutput = new ItemStack[] { - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "1", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "2", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "3", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "4", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "5", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "6", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "7", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "8", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "9", 1), - ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "10", 1) }; - - for (int i = 0; i < 10; i++) { - - ItemStack aPrevTier = (i == 0 ? CI.getTieredMachineHull(1) : aOutput[i - 1]); - aPrevTier.stackSize = 1; - int aTier = (i + 1); - GT_Values.RA.stdBuilder() - .itemInputs( - aPrevTier, - CI.getTieredComponent(OrePrefixes.plate, aTier, 4), - CI.getTieredComponent(OrePrefixes.cableGt04, i, 2), - CI.getTieredComponent(OrePrefixes.circuit, aTier, 2), - CI.getTieredComponent(OrePrefixes.screw, aTier, 6), - CI.getTieredComponent(OrePrefixes.bolt, i, 12)) - .itemOutputs(aOutput[i]) - .fluidInputs(CI.getTieredFluid(i, (144 * 4 * aTier))) - .duration(45 * 10 * 1 * (aTier)) - .eut(voltageTiers[i]) - .addTo(assemblerRecipes); - // Energy Buffer - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(aOutput[i], 4), - CI.getTieredComponent(OrePrefixes.plate, aTier, 8), - CI.getTieredComponent(OrePrefixes.wireGt08, i, 4), - CI.getTieredComponent(OrePrefixes.circuit, i, 4), - CI.getTieredComponent(OrePrefixes.stickLong, aTier, 4), - CI.getTieredComponent(OrePrefixes.gearGt, i, 5)) - .itemOutputs(aBufferOutput[i]) - .fluidInputs(CI.getTieredFluid(aTier, (144 * 16 * aTier))) - .duration(45 * 20 * 1 * (aTier)) - .eut(voltageTiers[i]) - .addTo(assemblerRecipes); - - } - } - - private static void wirelessChargers() { - - ItemStack[] aChargers = new ItemStack[] { GregtechItemList.Charger_LV.get(1), - GregtechItemList.Charger_MV.get(1), GregtechItemList.Charger_HV.get(1), GregtechItemList.Charger_EV.get(1), - GregtechItemList.Charger_IV.get(1), GregtechItemList.Charger_LuV.get(1), - GregtechItemList.Charger_ZPM.get(1), GregtechItemList.Charger_UV.get(1), - GregtechItemList.Charger_UHV.get(1) }; - - long[] voltageTiers = new long[] { 16, TierEU.RECIPE_LV, TierEU.RECIPE_MV, TierEU.RECIPE_HV, TierEU.RECIPE_EV, - TierEU.RECIPE_IV, TierEU.RECIPE_LuV, TierEU.RECIPE_ZPM, TierEU.RECIPE_UV, TierEU.RECIPE_UHV }; - - for (int tier = 1; tier < aChargers.length + 1; tier++) { - - ItemStack[] aInputs = new ItemStack[] { CI.getTieredMachineHull(tier, 1), - CI.getTransmissionComponent(tier, 2), CI.getFieldGenerator(tier, 1), - CI.getTieredComponent(OrePrefixes.plate, tier + 1, 4), - CI.getTieredComponent(OrePrefixes.circuit, tier + 1, 2), }; - GT_Values.RA.stdBuilder() - .itemInputs(aInputs) - .itemOutputs(aChargers[tier - 1]) - .fluidInputs(CI.getAlternativeTieredFluid(tier, (144 * 2 * (tier + 1)))) - .duration(45 * 10 * (tier + 1)) - .eut(voltageTiers[tier]) - .addTo(assemblerRecipes); - - } - } - - private static void largeArcFurnace() { - int aCostMultiplier = 1; - GT_Values.RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Multi_Use.get(aCostMultiplier), - CI.getTransmissionComponent(2, 2 * aCostMultiplier), - CI.getElectricPiston(4, 2 * aCostMultiplier), - CI.getTieredComponent(OrePrefixes.plate, 5, 4 * aCostMultiplier), - CI.getTieredComponent(OrePrefixes.pipeSmall, 4, 1 * aCostMultiplier)) - .itemOutputs(GregtechItemList.Casing_Industrial_Arc_Furnace.get(1)) - .fluidInputs(CI.getAlternativeTieredFluid(5, (144 * 2 * 4))) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Industrial_Arc_Furnace.get(1), - CI.getFieldGenerator(4, 2 * aCostMultiplier), - CI.getRobotArm(5, 4 * aCostMultiplier), - CI.getEnergyCore(4, 2 * aCostMultiplier), - CI.getTieredComponent(OrePrefixes.plate, 6, 8 * aCostMultiplier), - CI.getTieredComponent(OrePrefixes.circuit, 5, 8 * aCostMultiplier)) - .itemOutputs(GregtechItemList.Industrial_Arc_Furnace.get(1)) - .fluidInputs(CI.getAlternativeTieredFluid(6, (144 * 4 * 5))) - .duration(8 * MINUTES) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - - } - - private static void industrialVacuumFurnace() { - - GT_Values.RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Multi_Use.get(1), - CI.getHeatCoil(2), - CI.getElectricPiston(3, 2), - CI.getTieredComponent(OrePrefixes.plate, 6, 4), - CI.getTieredComponent(OrePrefixes.gearGt, 6, 2)) - .itemOutputs(GregtechItemList.Casing_Vacuum_Furnace.get(1)) - .fluidInputs(CI.getTertiaryTieredFluid(5, (144 * 2 * 4))) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GregtechItemList.Casing_Vacuum_Furnace.get(1), - CI.getTieredComponent(OrePrefixes.wireGt16, 7, 4), - CI.getEnergyCore(5, 1), - CI.getRobotArm(4, 4), - CI.getTieredComponent(OrePrefixes.plate, 6, 8), - CI.getTieredComponent(OrePrefixes.circuit, 6, 8)) - .itemOutputs(GregtechItemList.Controller_Vacuum_Furnace.get(1)) - .fluidInputs(CI.getTieredFluid(6, (144 * 4 * 5))) - .duration(12 * MINUTES) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - - } - - private static void milling() { - - // Isa Mill Controller - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemList.Machine_IV_Macerator.get(1)) - .metadata(RESEARCH_TIME, 20 * MINUTES) - .itemInputs( - GregtechItemList.Casing_IsaMill_Gearbox.get(4), - CI.getTieredGTPPMachineCasing(6, 4), - ItemList.Component_Grinder_Tungsten.get(16), - new Object[] { CI.getTieredCircuitOreDictName(6), 8 }, - ALLOY.INCONEL_625.getGear(8), - ALLOY.INCONEL_625.getPlate(32), - ALLOY.ZERON_100.getPlateDouble(8), - ALLOY.ZERON_100.getPlateDouble(8), - ALLOY.ZERON_100.getScrew(64), - CI.getTieredComponentOfMaterial(Materials.NiobiumTitanium, OrePrefixes.wireFine, 32), - CI.getTieredComponentOfMaterial(Materials.NiobiumTitanium, OrePrefixes.wireFine, 32), - CI.getTieredComponentOfMaterial(Materials.Titanium, OrePrefixes.foil, 16), - CI.getTieredComponentOfMaterial(Materials.Titanium, OrePrefixes.foil, 16)) - .fluidInputs( - CI.getTieredFluid(6, 16 * 144), - CI.getAlternativeTieredFluid(6, 32 * 144), - CI.getTertiaryTieredFluid(6, 32 * 144)) - .itemOutputs(GregtechItemList.Controller_IsaMill.get(1)) - .eut(TierEU.RECIPE_LuV) - .duration(10 * MINUTES) - .addTo(AssemblyLine); - - // Isa Mill Gearbox - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(7), - ItemList.Casing_Gearbox_Titanium.get(2), - ALLOY.INCONEL_625.getGear(4), - CI.getTieredComponentOfMaterial(Materials.HSSE, OrePrefixes.gearGtSmall, 8), - ALLOY.INCONEL_625.getPlate(16), - ALLOY.ZERON_100.getBolt(16)) - .itemOutputs(GregtechItemList.Casing_IsaMill_Gearbox.get(1)) - .fluidInputs(ALLOY.TUNGSTENSTEEL.getFluidStack(8 * 144)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Isa Mill Casing - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(7), - CI.getTieredGTPPMachineCasing(5, 1), - ALLOY.INCONEL_625.getPlate(8), - ALLOY.ZERON_100.getRod(4), - CI.getTieredComponentOfMaterial(Materials.HSSG, OrePrefixes.gearGtSmall, 4), - ALLOY.ZERON_100.getScrew(8)) - .itemOutputs(GregtechItemList.Casing_IsaMill_Casing.get(1)) - .fluidInputs(ELEMENT.getInstance().TITANIUM.getFluidStack(4 * 144)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Isa Mill Pipe - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(7), - CI.getTieredGTPPMachineCasing(4, 2), - ALLOY.INCONEL_625.getPlateDouble(4), - ALLOY.INCOLOY_MA956.getRing(8), - CI.getTieredComponentOfMaterial(Materials.HSSE, OrePrefixes.plate, 8), - ALLOY.INCOLOY_MA956.getBolt(16)) - .itemOutputs(GregtechItemList.Casing_IsaMill_Pipe.get(1)) - .fluidInputs(ELEMENT.getInstance().ALUMINIUM.getFluidStack(8 * 144)) - .duration(8 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - // Flotation Cell Controller - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemList.Distillation_Tower.get(1)) - .metadata(RESEARCH_TIME, 20 * MINUTES) - .itemInputs( - GregtechItemList.Casing_Flotation_Cell.get(4), - CI.getTieredGTPPMachineCasing(5, 4), - ItemList.Machine_IV_Distillery.get(1), - new Object[] { CI.getTieredCircuitOreDictName(6), 8 }, - ALLOY.STELLITE.getGear(8), - ALLOY.STELLITE.getPlate(32), - ALLOY.HASTELLOY_N.getPlateDouble(8), - ALLOY.HASTELLOY_N.getPlateDouble(8), - ALLOY.HASTELLOY_N.getScrew(64), - CI.getTieredComponentOfMaterial(Materials.YttriumBariumCuprate, OrePrefixes.wireFine, 64), - CI.getTieredComponentOfMaterial(Materials.YttriumBariumCuprate, OrePrefixes.wireFine, 64), - CI.getTieredComponentOfMaterial(Materials.Platinum, OrePrefixes.foil, 32), - CI.getTieredComponentOfMaterial(Materials.Platinum, OrePrefixes.foil, 32)) - .fluidInputs( - CI.getTieredFluid(5, 16 * 144), - CI.getAlternativeTieredFluid(4, 32 * 144), - CI.getTertiaryTieredFluid(4, 32 * 144)) - .itemOutputs(GregtechItemList.Controller_Flotation_Cell.get(1)) - .eut(TierEU.RECIPE_LuV) - .duration(10 * MINUTES) - .addTo(AssemblyLine); - - // Flotation Cell Casing - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(7), - CI.getTieredGTPPMachineCasing(4, 1), - ALLOY.AQUATIC_STEEL.getPlate(8), - ALLOY.STELLITE.getRing(8), - CI.getTieredComponentOfMaterial(Materials.HSSG, OrePrefixes.plateDouble, 4), - ALLOY.HASTELLOY_N.getScrew(8)) - .itemOutputs(GregtechItemList.Casing_Flotation_Cell.get(1)) - .fluidInputs(ALLOY.STAINLESS_STEEL.getFluidStack(8 * 144)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - // Milling Bus - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(7), - CI.getTieredGTPPMachineCasing(5, 1), - ItemList.Hatch_Input_Bus_EV.get(1), - CI.getTieredComponentOfMaterial(Materials.Titanium, OrePrefixes.gearGt, 8), - CI.getTieredComponentOfMaterial(Materials.TungstenSteel, OrePrefixes.plate, 32), - CI.getTieredComponentOfMaterial(Materials.SolderingAlloy, OrePrefixes.wireFine, 16)) - .itemOutputs(GregtechItemList.Bus_Milling_Balls.get(1)) - .fluidInputs(ELEMENT.getInstance().TUNGSTEN.getFluidStack(8 * 144)) - .duration(4 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - } - - private static void sparging() { - - // Sparge Tower Research - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(8), - ELEMENT.getInstance().HELIUM.getCell(8), - ELEMENT.getInstance().FLUORINE.getCell(8), - ALLOY.HS188A.getIngot(8), - ItemList.Distillation_Tower.get(1)) - .itemOutputs(ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_10_SPARGING, 1)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - // Sparge Tower Controller - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_10_SPARGING, 1)) - .metadata(RESEARCH_TIME, 20 * MINUTES) - .itemInputs( - GregtechItemList.Casing_Sparge_Tower_Exterior.get(4), - CI.getTieredGTPPMachineCasing(4, 4), - ItemList.Machine_IV_Distillery.get(1), - new Object[] { CI.getTieredCircuitOreDictName(5), 8 }, - ALLOY.HS188A.getGear(8), - ALLOY.HS188A.getPlate(32), - ALLOY.HASTELLOY_N.getPlateDouble(8), - ALLOY.HASTELLOY_N.getPlateDouble(8), - ALLOY.HASTELLOY_N.getScrew(64), - CI.getTieredComponentOfMaterial(Materials.YttriumBariumCuprate, OrePrefixes.wireFine, 64), - CI.getTieredComponentOfMaterial(Materials.YttriumBariumCuprate, OrePrefixes.wireFine, 64), - CI.getTieredComponentOfMaterial(Materials.Platinum, OrePrefixes.foil, 32), - CI.getTieredComponentOfMaterial(Materials.Platinum, OrePrefixes.foil, 32)) - .fluidInputs( - CI.getTieredFluid(4, 16 * 144), - CI.getAlternativeTieredFluid(3, 32 * 144), - CI.getTertiaryTieredFluid(3, 32 * 144)) - .itemOutputs(GregtechItemList.Controller_Sparge_Tower.get(1)) - .eut(TierEU.RECIPE_LuV) - .duration(10 * MINUTES) - .addTo(AssemblyLine); - - // Sparge Tower Casing - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(8), - CI.getTieredGTPPMachineCasing(3, 1), - ALLOY.HS188A.getPlate(2), - ALLOY.HASTELLOY_N.getRing(4), - CI.getTieredComponentOfMaterial(Materials.TungstenSteel, OrePrefixes.plateDouble, 4), - ALLOY.HASTELLOY_N.getScrew(4)) - .itemOutputs(GregtechItemList.Casing_Sparge_Tower_Exterior.get(1)) - .fluidInputs(ALLOY.STAINLESS_STEEL.getFluidStack(8 * 144)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - - } - - private static void chisels() { - ItemStack[] aChisels = new ItemStack[] { GregtechItemList.GT_Chisel_LV.get(1), - GregtechItemList.GT_Chisel_MV.get(1), GregtechItemList.GT_Chisel_HV.get(1), }; - - long[] voltageTiers = new long[] { TierEU.RECIPE_LV, TierEU.RECIPE_MV, TierEU.RECIPE_HV }; - for (int i = 1; i < 4; i++) { - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(10 + i), - CI.getTieredMachineCasing(i), - CI.getPlate(i, 4), - CI.getElectricMotor(i, 2), - CI.getConveyor(i, 2), - CI.getRobotArm(i, 1)) - .itemOutputs(aChisels[i - 1]) - .fluidInputs(CI.getTieredFluid(i, 144 * 4)) - .duration(20 * SECONDS) - .eut(voltageTiers[i - 1]) - .addTo(assemblerRecipes); - - } - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(14), - aChisels[2], - CI.getPlate(4, 8), - CI.getElectricMotor(4, 8), - CI.getConveyor(4, 8), - CI.getRobotArm(4, 4)) - .itemOutputs(GregtechItemList.Controller_IndustrialAutoChisel.get(1)) - .fluidInputs(CI.getTieredFluid(4, 144 * 8)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(14), - ItemList.Casing_SolidSteel.get(2), - CI.getPlate(4, 2), - CI.getTieredComponent(OrePrefixes.plate, 3, 4), - CI.getTieredComponent(OrePrefixes.ring, 3, 8), - CI.getTieredComponent(OrePrefixes.rod, 2, 4)) - .itemOutputs(GregtechItemList.Casing_IndustrialAutoChisel.get(1)) - .fluidInputs(CI.getTieredFluid(2, 144 * 2)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(assemblerRecipes); - - } - - private static void rockBreaker() { - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(12), - ItemList.Machine_EV_RockBreaker.get(1), - ALLOY.STAINLESS_STEEL.getPlate(8), - ALLOY.STAINLESS_STEEL.getRing(4), - CI.getTieredComponentOfMaterial(Materials.Aluminium, OrePrefixes.plateDouble, 8), - ALLOY.EGLIN_STEEL.getScrew(8)) - .itemOutputs(GregtechItemList.Controller_IndustrialRockBreaker.get(1)) - .fluidInputs(ELEMENT.getInstance().ALUMINIUM.getFluidStack(144 * 8)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(assemblerRecipes); - - } - - private static void fakeMachineCasingCovers() { - int aMaxTier = GT_Values.VOLTAGE_NAMES.length; - ItemStack aTier[] = new ItemStack[aMaxTier]; - for (int i = 0; i < aMaxTier; i++) { - aTier[i] = ItemUtils.simpleMetaStack(CoverManager.Cover_Gt_Machine_Casing, i, 7); - } - // Add recipes for new ones - for (int i = 0; i < aMaxTier; i++) { - GT_Values.RA.stdBuilder() - .itemInputs(CI.getTieredMachineCasing(i)) - .itemOutputs(aTier[i]) - .duration(i * 5 * SECONDS) - .eut(GT_Values.VP[i]) - .addTo(cutterRecipes); - } - } - - private static void superBuses() { - GregtechItemList[] mSuperBusesInput = new GregtechItemList[] { GregtechItemList.Hatch_SuperBus_Input_LV, - GregtechItemList.Hatch_SuperBus_Input_MV, GregtechItemList.Hatch_SuperBus_Input_HV, - GregtechItemList.Hatch_SuperBus_Input_EV, GregtechItemList.Hatch_SuperBus_Input_IV, - GregtechItemList.Hatch_SuperBus_Input_LuV, GregtechItemList.Hatch_SuperBus_Input_ZPM, - GregtechItemList.Hatch_SuperBus_Input_UV, GregtechItemList.Hatch_SuperBus_Input_MAX, }; - - GregtechItemList[] mSuperBusesOutput = new GregtechItemList[] { GregtechItemList.Hatch_SuperBus_Output_LV, - GregtechItemList.Hatch_SuperBus_Output_MV, GregtechItemList.Hatch_SuperBus_Output_HV, - GregtechItemList.Hatch_SuperBus_Output_EV, GregtechItemList.Hatch_SuperBus_Output_IV, - GregtechItemList.Hatch_SuperBus_Output_LuV, GregtechItemList.Hatch_SuperBus_Output_ZPM, - GregtechItemList.Hatch_SuperBus_Output_UV, GregtechItemList.Hatch_SuperBus_Output_MAX, }; - - ItemStack[] mInputHatch = new ItemStack[] { ItemList.Hatch_Input_Bus_EV.get(1), - ItemList.Hatch_Input_Bus_IV.get(1), ItemList.Hatch_Input_Bus_LuV.get(1), - ItemList.Hatch_Input_Bus_ZPM.get(1), ItemList.Hatch_Input_Bus_UV.get(1), - ItemList.Hatch_Input_Bus_MAX.get(1), GregtechItemList.Hatch_SuperBus_Input_LV.get(1), - GregtechItemList.Hatch_SuperBus_Input_MV.get(1), GregtechItemList.Hatch_SuperBus_Input_HV.get(1), - GregtechItemList.Hatch_SuperBus_Input_EV.get(1), }; - - ItemStack[] mOutputHatch = new ItemStack[] { ItemList.Hatch_Output_Bus_EV.get(1), - ItemList.Hatch_Output_Bus_IV.get(1), ItemList.Hatch_Output_Bus_LuV.get(1), - ItemList.Hatch_Output_Bus_ZPM.get(1), ItemList.Hatch_Output_Bus_UV.get(1), - ItemList.Hatch_Output_Bus_MAX.get(1), GregtechItemList.Hatch_SuperBus_Output_LV.get(1), - GregtechItemList.Hatch_SuperBus_Output_MV.get(1), GregtechItemList.Hatch_SuperBus_Output_HV.get(1), - GregtechItemList.Hatch_SuperBus_Output_EV.get(1), }; - - // Input Buses - for (int tier = 1; tier < mSuperBusesInput.length + 1; tier++) { - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(17), - mInputHatch[tier - 1], - CI.getElectricMotor(tier, 2), - CI.getConveyor(tier, 5), - CI.getBolt(tier, 16), - CI.getTieredComponent(OrePrefixes.circuit, tier, 2)) - .itemOutputs(mSuperBusesInput[tier - 1].get(1)) - .fluidInputs(CI.getAlternativeTieredFluid(tier, 144 * 8)) - .duration(60 * SECONDS) - .eut(GT_Values.VP[tier]) - .addTo(assemblerRecipes); - - } - // Output Buses - for (int tier = 1; tier < mSuperBusesOutput.length + 1; tier++) { - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(18), - mOutputHatch[tier - 1], - CI.getElectricPiston(tier, 2), - CI.getConveyor(tier, 5), - CI.getGear(tier, 3), - CI.getTieredComponent(OrePrefixes.circuit, tier, 2)) - .itemOutputs(mSuperBusesOutput[tier - 1].get(1)) - .fluidInputs(CI.getTertiaryTieredFluid(tier, 144 * 8)) - .duration(60 * SECONDS) - .eut(GT_Values.VP[tier]) - .addTo(assemblerRecipes); - - } - } - - private static void chiselBuses() { - ItemStack[] mSuperBusesInput = new ItemStack[] { GregtechItemList.Hatch_SuperBus_Input_LV.get(1), - GregtechItemList.Hatch_SuperBus_Input_MV.get(1), GregtechItemList.Hatch_SuperBus_Input_HV.get(1), }; - - ItemStack[] mChiselBuses = new ItemStack[] { GregtechItemList.GT_MetaTileEntity_ChiselBus_LV.get(1), - GregtechItemList.GT_MetaTileEntity_ChiselBus_MV.get(1), - GregtechItemList.GT_MetaTileEntity_ChiselBus_HV.get(1), }; - - for (int tier = 1; tier < mChiselBuses.length + 1; tier++) { - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(17), - mSuperBusesInput[tier - 1], - CI.getSensor(tier, 1), - CI.getRobotArm(tier, 2), - CI.getBolt(tier, 16), - ItemUtils.getSimpleStack(Blocks.chest)) - .itemOutputs(mChiselBuses[tier - 1]) - .fluidInputs(CI.getAlternativeTieredFluid(tier, 144 * 2)) - .duration(60 * SECONDS) - .eut(GT_Values.VP[tier + 1]) - .addTo(assemblerRecipes); - - } - } - - private static void solidifierHatches() { - ItemStack[] mSuperBusesInput = new ItemStack[] { ItemList.Hatch_Input_IV.get(1), - ItemList.Hatch_Input_LuV.get(1), ItemList.Hatch_Input_ZPM.get(1), ItemList.Hatch_Input_UV.get(1), }; - - ItemStack[] mSolidifierHatches = new ItemStack[] { GregtechItemList.GT_MetaTileEntity_Solidifier_I.get(1), - GregtechItemList.GT_MetaTileEntity_Solidifier_II.get(1), - GregtechItemList.GT_MetaTileEntity_Solidifier_III.get(1), - GregtechItemList.GT_MetaTileEntity_Solidifier_IV.get(1), }; - - for (int i = 0; i < 4; i++) { - int componentTier = i + 5; - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(17), - mSuperBusesInput[i], - CI.getSensor(componentTier, 1), - CI.getFluidRegulator(componentTier, 1), - CI.getTieredComponent(OrePrefixes.circuit, componentTier + 1, 4), - ItemUtils.getSimpleStack(Blocks.chest)) - .itemOutputs(mSolidifierHatches[i]) - .fluidInputs(CI.getTieredFluid(componentTier, 144 * 2)) - .duration(30 * SECONDS) - .eut(GT_Values.VP[componentTier]) - .addTo(assemblerRecipes); - - } - } -} diff --git a/src/main/java/gtPlusPlus/core/recipe/RECIPES_RareEarthProcessing.java b/src/main/java/gtPlusPlus/core/recipe/RECIPES_RareEarthProcessing.java deleted file mode 100644 index 0cf0152c53..0000000000 --- a/src/main/java/gtPlusPlus/core/recipe/RECIPES_RareEarthProcessing.java +++ /dev/null @@ -1,168 +0,0 @@ -package gtPlusPlus.core.recipe; - -import static gregtech.api.recipe.RecipeMaps.brewingRecipes; -import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; -import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; -import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gtPlusPlus.core.material.MISC_MATERIALS.BRINE; -import static gtPlusPlus.core.material.MISC_MATERIALS.HYDROGEN_CHLORIDE; -import static gtPlusPlus.core.material.MISC_MATERIALS.HYDROGEN_CHLORIDE_MIX; -import static gtPlusPlus.core.material.MISC_MATERIALS.RARE_EARTH_HIGH; -import static gtPlusPlus.core.material.MISC_MATERIALS.RARE_EARTH_LOW; -import static gtPlusPlus.core.material.MISC_MATERIALS.RARE_EARTH_MID; - -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.material.ORES; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; - -public class RECIPES_RareEarthProcessing { - - public static void init() { - - // Brine Check and assignment - FluidStack mBrine = FluidUtils.getFluidStack("brine", 1000); - if (mBrine == null) { - Fluid f = BRINE.generateFluid(); - BRINE.registerComponentForMaterial(FluidUtils.getFluidStack(f, 1000)); - mBrine = BRINE.getFluidStack(1000); - } else { - BRINE.registerComponentForMaterial(FluidUtils.getFluidStack(mBrine, 1000)); - } - - // Hydrogen Chloride Check and assignment - FluidStack mHydrogenChloride = FluidUtils.getFluidStack("hydrogenchloride", 1000); - if (mHydrogenChloride == null) { - HYDROGEN_CHLORIDE.generateFluid(); - mHydrogenChloride = BRINE.getFluidStack(1000); - } else { - HYDROGEN_CHLORIDE.registerComponentForMaterial(FluidUtils.getFluidStack(mHydrogenChloride, 1000)); - } - - // Add Process for creating Brine - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Salt, 16L)) - .fluidInputs(Materials.SaltWater.getFluid(2000L)) - .fluidOutputs(FluidUtils.getFluidStack(mBrine, 4000)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(brewingRecipes); - - // Chloralkali process - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1), ItemList.Cell_Empty.get(2L)) - .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Chlorine, 1L), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 1L)) - .fluidInputs(FluidUtils.getFluidStack(mBrine, 2000)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(electrolyzerRecipes); - - // Generate Special Laser Recipe - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Chlorine, 1L), - GT_OreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1L), - CI.getNumberedBioCircuit(2)) - .itemOutputs(ItemUtils.getSimpleStack(ModItems.cellHydrogenChlorideMix, 2)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(GregtechItemList.Laser_Lens_WoodsGlass.get(0)) - .fluidInputs(HYDROGEN_CHLORIDE_MIX.getFluidStack(4000)) - .fluidOutputs(HYDROGEN_CHLORIDE.getFluidStack(4000)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .noOptimize() - .addTo(laserEngraverRecipes); - - // Set Material Tiers correctly - ORES.GREENOCKITE.vTier = 1; - RARE_EARTH_LOW.vTier = 1; - RARE_EARTH_MID.vTier = 3; - RARE_EARTH_HIGH.vTier = 5; - - // Set Material Voltages correctly - ORES.GREENOCKITE.vVoltageMultiplier = 30; - RARE_EARTH_LOW.vVoltageMultiplier = 30; - RARE_EARTH_MID.vVoltageMultiplier = 480; - RARE_EARTH_HIGH.vVoltageMultiplier = 7680; - - // Set Material Tooltips to be shorter - RARE_EARTH_LOW.vChemicalFormula = "??????"; - RARE_EARTH_MID.vChemicalFormula = "??????"; - RARE_EARTH_HIGH.vChemicalFormula = "??????"; - - // Set Material Tooltips to be shorter - RARE_EARTH_LOW.vChemicalSymbol = "??"; - RARE_EARTH_MID.vChemicalSymbol = "??"; - RARE_EARTH_HIGH.vChemicalSymbol = "??"; - - // Generate Ore Materials - MaterialGenerator.generateOreMaterial(RARE_EARTH_LOW); - MaterialGenerator.generateOreMaterial(RARE_EARTH_MID); - MaterialGenerator.generateOreMaterial(RARE_EARTH_HIGH); - - // industrial strength HCl - Fluid aHydrochloric = FluidUtils.getFluidStack("hydrogenchloride", 1) - .getFluid(); - - // LV Rare Earth - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RareEarth, 3L)) - .itemOutputs(RARE_EARTH_LOW.getCrushed(2), RARE_EARTH_LOW.getCrushed(2), RARE_EARTH_LOW.getCrushed(2)) - .fluidInputs(Materials.SulfuricAcid.getFluid(1000L)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(chemicalBathRecipes); - - // HV Rare Earth - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RareEarth, 3L)) - .itemOutputs(RARE_EARTH_MID.getCrushed(2), RARE_EARTH_MID.getCrushed(2), RARE_EARTH_MID.getCrushed(2)) - .outputChances(10000, 9000, 8000) - .fluidInputs(FluidUtils.getFluidStack(aHydrochloric, 1000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(chemicalBathRecipes); - - // IV Rare Earth - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RareEarth, 3L)) - .itemOutputs(RARE_EARTH_HIGH.getCrushed(2), RARE_EARTH_HIGH.getCrushed(2), RARE_EARTH_HIGH.getCrushed(2)) - .outputChances(10000, 9000, 8000) - .fluidInputs(FluidUtils.getHydrofluoricAcid(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(chemicalBathRecipes); - - // IV Rare Earth - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RareEarth, 3L)) - .itemOutputs(RARE_EARTH_HIGH.getCrushed(2), RARE_EARTH_HIGH.getCrushed(2), RARE_EARTH_HIGH.getCrushed(2)) - .outputChances(9000, 8000, 7000) - .fluidInputs(Materials.HydrofluoricAcid.getFluid(2000L)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(chemicalBathRecipes); - } -} diff --git a/src/main/java/gtPlusPlus/core/recipe/RECIPES_SeleniumProcessing.java b/src/main/java/gtPlusPlus/core/recipe/RECIPES_SeleniumProcessing.java deleted file mode 100644 index 454e24f0d1..0000000000 --- a/src/main/java/gtPlusPlus/core/recipe/RECIPES_SeleniumProcessing.java +++ /dev/null @@ -1,152 +0,0 @@ -package gtPlusPlus.core.recipe; - -import static gregtech.api.recipe.RecipeMaps.pyrolyseRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.alloyBlastSmelterRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.MISC_MATERIALS; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.MaterialUtils; - -public class RECIPES_SeleniumProcessing { - - public static void init() { - - // We need this - MaterialUtils.generateSpecialDustAndAssignToAMaterial(MISC_MATERIALS.SELENIUM_DIOXIDE, false); - - // Makes Selenium Dioxide - processCopperRecipes(); - - // Liquify the Dried Dioxide - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(13), MISC_MATERIALS.SELENIUM_DIOXIDE.getDust(1)) - .fluidInputs(FluidUtils.getSteam(500)) - .fluidOutputs(MISC_MATERIALS.SELENIUM_DIOXIDE.getFluidStack(1000)) - .duration(24 * SECONDS) - .eut(1024) - .addTo(pyrolyseRecipes); - - // Produce Selenious Acid - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(14), MISC_MATERIALS.SELENIUM_DIOXIDE.getCell(1)) - .itemOutputs(CI.emptyCells(1)) - .fluidInputs(FluidUtils.getHotWater(4000)) - .fluidOutputs(MISC_MATERIALS.SELENIOUS_ACID.getFluidStack(1000)) - .duration(24 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(pyrolyseRecipes); - - // Make Selenium - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(14), ELEMENT.getInstance().CARBON.getDust(16)) - .itemOutputs(ELEMENT.getInstance().SELENIUM.getIngot(1), ELEMENT.getInstance().SELENIUM.getIngot(1)) - .outputChances(100_00, 20_00) - .fluidInputs(MISC_MATERIALS.SELENIOUS_ACID.getFluidStack(750), Materials.SulfuricAcid.getFluid(8000)) - .fluidOutputs(ELEMENT.getInstance().SELENIUM.getFluidStack(144 * 1)) - .eut(TierEU.RECIPE_IV) - .duration(5 * MINUTES) - .addTo(alloyBlastSmelterRecipes); - } - - public static void processCopperRecipes() { - - // Copper - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(23), - ItemUtils.getOrePrefixStack(OrePrefixes.crushedPurified, Materials.Copper, 1)) - .itemOutputs( - ItemUtils.getOrePrefixStack(OrePrefixes.crushedCentrifuged, Materials.Copper, 1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1)) - .outputChances(100_00, 1_00, 1_00, 5_00, 5_00, 5_00, 10_00, 10_00, 10_00) - .fluidInputs(FluidUtils.getHotWater(1000)) - .fluidOutputs(MISC_MATERIALS.SELENIUM_DIOXIDE.getFluidStack(20)) - .eut(1024) - .duration(40 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - // Tetra - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(23), - ItemUtils.getOrePrefixStack(OrePrefixes.crushedPurified, Materials.Tetrahedrite, 1)) - .itemOutputs( - ItemUtils.getOrePrefixStack(OrePrefixes.crushedCentrifuged, Materials.Tetrahedrite, 1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1)) - .outputChances(100_00, 1_00, 1_00, 3_00, 3_00, 3_00, 8_00, 8_00, 8_00) - .fluidInputs(FluidUtils.getHotWater(1000)) - .fluidOutputs(MISC_MATERIALS.SELENIUM_DIOXIDE.getFluidStack(10)) - .eut(1024) - .duration(40 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - // Chalco - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(23), - ItemUtils.getOrePrefixStack(OrePrefixes.crushedPurified, Materials.Chalcopyrite, 1)) - .itemOutputs( - ItemUtils.getOrePrefixStack(OrePrefixes.crushedCentrifuged, Materials.Chalcopyrite, 1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1)) - .outputChances(100_00, 1_00, 1_00, 3_00, 3_00, 3_00, 8_00, 8_00, 8_00) - .fluidInputs(FluidUtils.getHotWater(1000)) - .fluidOutputs(MISC_MATERIALS.SELENIUM_DIOXIDE.getFluidStack(10)) - .eut(1024) - .duration(40 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - // Malachite - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(23), - ItemUtils.getOrePrefixStack(OrePrefixes.crushedPurified, Materials.Malachite, 1)) - .itemOutputs( - ItemUtils.getOrePrefixStack(OrePrefixes.crushedCentrifuged, Materials.Malachite, 1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getSmallDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1), - MISC_MATERIALS.SELENIUM_DIOXIDE.getTinyDust(1)) - .outputChances(100_00, 1_00, 1_00, 3_00, 3_00, 3_00, 8_00, 8_00, 8_00) - .fluidInputs(FluidUtils.getHotWater(1000)) - .fluidOutputs(MISC_MATERIALS.SELENIUM_DIOXIDE.getFluidStack(10)) - .eut(1024) - .duration(40 * SECONDS) - .addTo(chemicalDehydratorRecipes); - } -} diff --git a/src/main/java/gtPlusPlus/core/recipe/RECIPES_Tools.java b/src/main/java/gtPlusPlus/core/recipe/RECIPES_Tools.java deleted file mode 100644 index 229b7cc045..0000000000 --- a/src/main/java/gtPlusPlus/core/recipe/RECIPES_Tools.java +++ /dev/null @@ -1,118 +0,0 @@ -package gtPlusPlus.core.recipe; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RECIPES_Tools { - - // Outputs - public static ItemStack RECIPE_SandStone = new ItemStack(Blocks.sandstone, 2); - public static ItemStack RECIPE_Sand = new ItemStack(Blocks.sand, 4); - - public static ItemStack RECIPE_DivisionSigil; - - // MC Items - public static Item Apple = Items.apple; - - // MC Blocks - public static Block CobbleStone = Blocks.cobblestone; - public static Block Dirt = Blocks.dirt; - public static Block Sand = Blocks.sand; - public static Block Gravel = Blocks.gravel; - public static Block Sandstone = Blocks.sandstone; - - // null - public static String empty = " "; - - // Batteries - public static String batteryBasic = "batteryBasic"; - public static String batteryAdvanced = "batteryAdvanced"; - public static String batteryElite = "batteryElite"; - public static String batteryMaster = "batteryMaster"; - public static String batteryUltimate = "batteryUltimate"; - - // Circuits - public static String circuitPrimitive = "circuitPrimitive"; - public static String circuitBasic = "circuitBasic"; - public static String circuitGood = "circuitGood"; - public static String circuitAdvanced = "circuitAdvanced"; - public static String circuitElite = "circuitElite"; - public static String circuitMaster = "circuitMaster"; - public static String circuitUltimate = "circuitUltimate"; - - // Cables - public static String cableGt01Electrum = "cableGt01Electrum"; - public static String cableGt02Electrum = "cableGt02Electrum"; - public static String cableGt01RedstoneAlloy = "cableGt01RedstoneAlloy"; - public static String cableGt02RedstoneAlloy = "cableGt02RedstoneAlloy"; - public static String cableGt01Copper = "cableGt01Copper"; - public static String cableGt02Copper = "cableGt02Copper"; - public static String cableGt01AnnealedCopper = "cableGt01AnnealedCopper"; - public static String cableGt02AnnealedCopper = "cableGt02AnnealedCopper"; - - // Rods - public static String stickWood = "stickWood"; - public static String stickStaballoy = "stickStaballoy"; - public static String stickTitanium = "stickTitanium"; - public static String stickIron = "stickIron"; - public static String stickGold = "stickGold"; - public static String stickSilver = "stickSilver"; - public static String stickSteel = "stickSteel"; - public static String stickBronze = "stickBronze"; - public static String stickTungsten = "stickTungsten"; - public static String stickRedAlloy = "stickRedAlloy"; - public static String stickInvar = "stickInvar"; - public static String stickElectrum = "stickElectrum"; - public static String stickElectricalSteel = "stickElectricalSteel"; - - // Plates - public static String plateStaballoy = "plateStaballoy"; - public static String plateTitanium = "plateTitanium"; - public static String plateIron = "plateIron"; - public static String plateGold = "plateGold"; - public static String plateSilver = "plateSilver"; - public static String plateSteel = "plateSteel"; - public static String plateBronze = "plateBronze"; - public static String plateTungsten = "plateTungsten"; - public static String plateRedAlloy = "plateRedAlloy"; - public static String plateInvar = "plateInvar"; - public static String plateElectrum = "plateElectrum"; - public static String plateElectricalSteel = "plateElectricalSteel"; - - // Ingots - public static String ingotStaballoy = "ingotStaballoy"; - public static String ingotTitanium = "ingotTitanium"; - public static String ingotIron = "ingotIron"; - public static String ingotGold = "ingotGold"; - public static String ingotSilver = "ingotSilver"; - public static String ingotSteel = "ingotSteel"; - public static String ingotBronze = "ingotBronze"; - public static String ingotTungsten = "ingotTungsten"; - public static String ingotRedAlloy = "ingotRedAlloy"; - public static String ingotInvar = "ingotInvar"; - public static String ingotElectrum = "ingotElectrum"; - public static String ingotUranium = "ingotUranium"; - public static String ingotElectricalSteel = "ingotElectricalSteel"; - - // Crafting Tools - public static String craftingToolHardHammer = "craftingToolHardHammer"; - public static String craftingToolSoftHammer = "craftingToolSoftHammer"; - public static String craftingToolFile = "craftingToolFile"; - public static String craftingToolSaw = "craftingToolSaw"; - public static String craftingToolPickaxe = "craftingToolPickaxe"; - public static String craftingToolWrench = "craftingToolWrench"; - public static String craftingToolCrowbar = "craftingToolCrowbar"; - public static String craftingToolKnife = "craftingToolKnife"; - public static String craftingToolScrewdriver = "craftingToolScrewdriver"; - - public static ItemStack personalCloakingDevice = ItemUtils.getSimpleStack(ModItems.itemPersonalCloakingDevice); - public static String plateDoubleNiChrome = "plateDoubleNichrome"; - public static String plateIridiumAlloy = "plateAlloyIridium"; - -} diff --git a/src/main/java/gtPlusPlus/core/recipe/RECIPE_Batteries.java b/src/main/java/gtPlusPlus/core/recipe/RECIPE_Batteries.java deleted file mode 100644 index 4369fdbfa3..0000000000 --- a/src/main/java/gtPlusPlus/core/recipe/RECIPE_Batteries.java +++ /dev/null @@ -1,62 +0,0 @@ -package gtPlusPlus.core.recipe; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.ItemList; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.RecipeUtils; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; - -public class RECIPE_Batteries { - - static ItemStack RECIPE_Battery_Sodium = GregtechItemList.Battery_RE_EV_Sodium.get(1); - static ItemStack RECIPE_Battery_Cadmium = GregtechItemList.Battery_RE_EV_Cadmium.get(1); - static ItemStack RECIPE_Battery_Lithium = GregtechItemList.Battery_RE_EV_Lithium.get(1); - static ItemStack GT_Battery_Sodium = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32539, 1); - static ItemStack GT_Battery_Cadmium = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32537, 1); - static ItemStack GT_Battery_Lithium = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32538, 1); - static ItemStack machineTransformer_EV; - - public static void loadRecipes() { - machineTransformer_EV = ItemList.Transformer_EV_HV.get(1); - run(); - } - - private static void run() { - - RecipeUtils.addShapedGregtechRecipe( - GT_Battery_Sodium, - RECIPES_Machines.cableTier4, - GT_Battery_Sodium, - CI.circuitTier3, - machineTransformer_EV, - CI.circuitTier3, - GT_Battery_Sodium, - RECIPES_Machines.cableTier4, - GT_Battery_Sodium, - RECIPE_Battery_Sodium); - RecipeUtils.addShapedGregtechRecipe( - GT_Battery_Cadmium, - RECIPES_Machines.cableTier4, - GT_Battery_Cadmium, - CI.circuitTier3, - machineTransformer_EV, - CI.circuitTier3, - GT_Battery_Cadmium, - RECIPES_Machines.cableTier4, - GT_Battery_Cadmium, - RECIPE_Battery_Cadmium); - RecipeUtils.addShapedGregtechRecipe( - GT_Battery_Lithium, - RECIPES_Machines.cableTier4, - GT_Battery_Lithium, - CI.circuitTier3, - machineTransformer_EV, - CI.circuitTier3, - GT_Battery_Lithium, - RECIPES_Machines.cableTier4, - GT_Battery_Lithium, - RECIPE_Battery_Lithium); - } -} diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesBatteries.java b/src/main/java/gtPlusPlus/core/recipe/RecipesBatteries.java new file mode 100644 index 0000000000..2d8e417f1b --- /dev/null +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesBatteries.java @@ -0,0 +1,62 @@ +package gtPlusPlus.core.recipe; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.ItemList; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.RecipeUtils; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; + +public class RecipesBatteries { + + static ItemStack RECIPE_Battery_Sodium = GregtechItemList.Battery_RE_EV_Sodium.get(1); + static ItemStack RECIPE_Battery_Cadmium = GregtechItemList.Battery_RE_EV_Cadmium.get(1); + static ItemStack RECIPE_Battery_Lithium = GregtechItemList.Battery_RE_EV_Lithium.get(1); + static ItemStack GT_Battery_Sodium = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32539, 1); + static ItemStack GT_Battery_Cadmium = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32537, 1); + static ItemStack GT_Battery_Lithium = ItemUtils.simpleMetaStack("gregtech:gt.metaitem.01", 32538, 1); + static ItemStack machineTransformer_EV; + + public static void loadRecipes() { + machineTransformer_EV = ItemList.Transformer_EV_HV.get(1); + run(); + } + + private static void run() { + + RecipeUtils.addShapedGregtechRecipe( + GT_Battery_Sodium, + RecipesMachines.cableTier4, + GT_Battery_Sodium, + CI.circuitTier3, + machineTransformer_EV, + CI.circuitTier3, + GT_Battery_Sodium, + RecipesMachines.cableTier4, + GT_Battery_Sodium, + RECIPE_Battery_Sodium); + RecipeUtils.addShapedGregtechRecipe( + GT_Battery_Cadmium, + RecipesMachines.cableTier4, + GT_Battery_Cadmium, + CI.circuitTier3, + machineTransformer_EV, + CI.circuitTier3, + GT_Battery_Cadmium, + RecipesMachines.cableTier4, + GT_Battery_Cadmium, + RECIPE_Battery_Cadmium); + RecipeUtils.addShapedGregtechRecipe( + GT_Battery_Lithium, + RecipesMachines.cableTier4, + GT_Battery_Lithium, + CI.circuitTier3, + machineTransformer_EV, + CI.circuitTier3, + GT_Battery_Lithium, + RecipesMachines.cableTier4, + GT_Battery_Lithium, + RECIPE_Battery_Lithium); + } +} diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesGeneral.java b/src/main/java/gtPlusPlus/core/recipe/RecipesGeneral.java new file mode 100644 index 0000000000..5ada7c5a03 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesGeneral.java @@ -0,0 +1,477 @@ +package gtPlusPlus.core.recipe; + +import static gregtech.api.enums.Mods.EnderIO; +import static gregtech.api.enums.Mods.Thaumcraft; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gtPlusPlus.core.recipe.common.CI.bitsd; +import static gtPlusPlus.core.util.minecraft.ItemUtils.getSimpleStack; +import static gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechConduits.generatePipeRecipes; +import static gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechConduits.generateWireRecipes; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; +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.gregtech.PollutionUtils; +import gtPlusPlus.xmod.bop.blocks.BOPBlockRegistrator; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; +import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper; + +public class RecipesGeneral { + + static final ItemStack NULL = null; + static ItemStack RECIPE_Paper; + static ItemStack RECIPE_Dirt; + static ItemStack RECIPE_Snow; + static ItemStack RECIPE_Obsidian; + static String RECIPE_LapisDust = "dustLazurite"; + static ItemStack OUTPUT_Blueprint; + static ItemStack RECIPE_CraftingTable; + static ItemStack RECIPE_BasicCasingIC2; + + public static void loadRecipes() { + RECIPE_Paper = ItemUtils.getSimpleStack(Items.paper); + RECIPE_Dirt = ItemUtils.getSimpleStack(Blocks.dirt); + RECIPE_Snow = ItemUtils.getSimpleStack(Blocks.snow); + RECIPE_Obsidian = ItemUtils.getSimpleStack(Blocks.obsidian); + RECIPE_CraftingTable = ItemUtils.getSimpleStack(Blocks.crafting_table); + RECIPE_BasicCasingIC2 = ItemUtils.getItemStackFromFQRN("IC2:blockMachine", 1); + OUTPUT_Blueprint = ItemUtils.getSimpleStack(ModItems.itemBlueprintBase, 2); + run(); + addCompressedObsidian(); + migratedRecipes(); + } + + private static void run() { + // Workbench Blueprint + RecipeUtils.addShapedRecipe( + RECIPE_Paper, + RECIPE_LapisDust, + NULL, + RECIPE_Paper, + RECIPE_LapisDust, + NULL, + RECIPE_LapisDust, + RECIPE_LapisDust, + NULL, + OUTPUT_Blueprint); + + // Rainforest oak Sapling + if (RecipeUtils.addShapedRecipe( + "stickWood", + "stickWood", + "stickWood", + "stickWood", + "treeSapling", + "stickWood", + "stickWood", + "dustBone", + "stickWood", + ItemUtils.getSimpleStack(BOPBlockRegistrator.sapling_Rainforest))) { + Logger.INFO("Added a recipe for Rainforest oak Saplings."); + } + + // Iron bars + final ItemStack ironBars = ItemUtils.getItemStackFromFQRN("dreamcraft:item.SteelBars", 1); + + // Fish Trap + if (RecipeUtils.addShapedRecipe( + ironBars, + ironBars, + ironBars, + ironBars, + "frameGtWroughtIron", + ironBars, + ironBars, + ironBars, + ironBars, + ItemUtils.getSimpleStack(ModBlocks.blockFishTrap))) { + Logger.INFO("Added a recipe for the Fish Trap."); + } + + // Potin + if (RecipeUtils.addShapelessGregtechRecipe( + new Object[] { "dustLead", "dustBronze", "dustTin", "dustLead", "dustBronze" }, + MaterialsAlloy.POTIN.getDust(5))) { + Logger.INFO("Added shapeless recipe for Potin Dust."); + } + + // Tumbaga + if (RecipeUtils.addShapelessGregtechRecipe( + new Object[] { "dustGold", "dustGold", "dustCopper" }, + ItemUtils.getSimpleStack(ModItems.dustTumbagaMix))) { + Logger.INFO("Added shapeless recipe for Tumbaga Mix."); + } + if (RecipeUtils.addShapelessGregtechRecipe( + new Object[] { ItemUtils.getSimpleStack(ModItems.dustTumbagaMix), + ItemUtils.getSimpleStack(ModItems.dustTumbagaMix), ItemUtils.getSimpleStack(ModItems.dustTumbagaMix), + "dustGold" }, + MaterialsAlloy.TUMBAGA.getDust(10))) { + Logger.INFO("Added shapeless recipe for Tumbaga Dust."); + } + + if (GTPPCore.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)); + RecipeUtils.addShapedRecipe( + CI.craftingToolFile, + "plateSteel", + "stickSteel", + "plateSteel", + "ringSteel", + "plateSteel", + "stickSteel", + "plateSteel", + CI.craftingToolHammer_Hard, + ItemUtils.simpleMetaStack(ModItems.itemBasicTurbine, 2, 1)); + } + + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(Blocks.glass, 16), + ItemUtils.getSimpleStack(Blocks.glowstone, 16), + ItemList.Large_Fluid_Cell_Steel.get(1), + CI.getNumberedAdvancedCircuit(4)) + .itemOutputs(VolumetricFlaskHelper.getLargeVolumetricFlask(2)) + .fluidInputs(FluidUtils.getFluidStack("molten.borosilicateglass", 2000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(Blocks.glass, 64), + ItemUtils.getSimpleStack(Blocks.glowstone, 64), + ItemList.Large_Fluid_Cell_TungstenSteel.get(1), + CI.getNumberedAdvancedCircuit(5)) + .itemOutputs(VolumetricFlaskHelper.getGiganticVolumetricFlask(2)) + .fluidInputs(FluidUtils.getFluidStack("molten.borosilicateglass", 8000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + // Mining Explosive + Logger.RECIPE("[Inspection] Explosives"); + if (RecipeUtils.addShapedRecipe( + CI.explosiveITNT, + CI.explosiveTNT, + CI.explosiveITNT, + CI.explosiveTNT, + "frameGtIron", + CI.explosiveTNT, + "dustSulfur", + CI.explosiveTNT, + "dustSulfur", + ItemUtils.getSimpleStack(ModBlocks.blockMiningExplosive, 3))) { + Logger.INFO("Added a recipe for Mining Explosives."); + } + + // Alkalus Coin + if (RecipeUtils.addShapedRecipe( + "gemExquisiteRuby", + "gemFlawlessDiamond", + "gemExquisiteDiamond", + "gemFlawlessRuby", + ItemList.Credit_Greg_Osmium.get(1), + "gemFlawlessSapphire", + "gemExquisiteEmerald", + "gemFlawlessEmerald", + "gemExquisiteSapphire", + ItemUtils.getSimpleStack(ModItems.itemAlkalusDisk))) { + Logger.INFO("Added a recipe for The Alkalus Disk."); + } + + /* + * final String fancyGems[] = new String[]{"gemExquisiteDiamond", "gemExquisiteEmerald", "gemExquisiteRuby", + * "gemExquisiteSapphire"}; final ItemStack gemShards[] = new + * ItemStack[]{ItemUtils.simpleMetaStack(ModItems.itemGemShards, 0, 1), + * ItemUtils.simpleMetaStack(ModItems.itemGemShards, 1, 1), ItemUtils.simpleMetaStack(ModItems.itemGemShards, 2, + * 1), ItemUtils.simpleMetaStack(ModItems.itemGemShards, 3, 1)}; int l=0; for (final String gem : fancyGems){ + * GameRegistry.addShapelessRecipe( gemShards[l], ItemUtils.getItemStackOfAmountFromOreDict(gem, 1), new + * ItemStack(ModItems.itemAlkalusDisk, 1, OreDictionary.WILDCARD_VALUE)); l++; } + */ + + Logger.RECIPE("[Inspection] Wither Cage"); + if (RecipeUtils.addShapedRecipe( + "stickBlackSteel", + "plateTungstenSteel", + "stickBlackSteel", + "plateTungstenSteel", + getSimpleStack(Items.nether_star), + "plateTungstenSteel", + "stickBlackSteel", + "plateTungstenSteel", + "stickBlackSteel", + ItemUtils.getSimpleStack(ModBlocks.blockWitherGuard, 32))) { + Logger.INFO("Added a recipe for Wither Cages."); + } + + // Magic Feather + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(Items.feather, 64), + ItemUtils.getSimpleStack(Blocks.emerald_block, 32), + ItemUtils.getSimpleStack(Blocks.diamond_block, 32), + Materials.Ruby.getBlocks(32), + Materials.Sapphire.getBlocks(32), + ItemUtils.getSimpleStack(Blocks.gold_block, 32)) + .itemOutputs(ItemUtils.getSimpleStack(ModItems.itemMagicFeather, 1)) + .fluidInputs(Materials.Silver.getMolten(32 * 144)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + // Pest Killer + GTValues.RA.stdBuilder() + .itemInputs( + CI.getTieredMachineCasing(1), + CI.getElectricPump(2, 1), + CI.getPlate(2, 4), + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(0), 2), + GTUtility.getIntegratedCircuit(16)) + .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockPestKiller)) + .fluidInputs(FluidUtils.getHotWater(500)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_LV / 2) + .addTo(assemblerRecipes); + } + + private static boolean addCompressedObsidian() { + // Invert Obsidian + ItemStack aInvertedObsidian = ItemUtils.simpleMetaStack(ModBlocks.blockCompressedObsidian, 5, 1); + 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), + aInvertedObsidian)) { + Logger.INFO("Added a recipe for Inverted Obsidian."); + } + + final ItemStack[] mItems = new ItemStack[6]; + mItems[0] = ItemUtils.getSimpleStack(Blocks.obsidian); + for (int r = 0; r < 5; r++) { + mItems[r + 1] = ItemUtils.simpleMetaStack(ModBlocks.blockCompressedObsidian, r, 1); + } + + final ItemStack[] mItems2 = new ItemStack[6]; + mItems2[0] = ItemUtils.getSimpleStack(Blocks.glowstone); + for (int r = 0; r < 5; r++) { + mItems2[r + 1] = ItemUtils.simpleMetaStack(ModBlocks.blockCompressedObsidian, 6 + r, 1); + } + + // Compressed Obsidian 1-5 + for (int r = 0; r < 5; r++) { + + final ItemStack input = mItems[r]; + final ItemStack output = mItems[r + 1]; + + if (RecipeUtils.addShapedRecipe(input, input, input, input, input, input, input, input, input, output)) { + Logger.INFO("Added a recipe for Compressed Obsidian [" + r + "]"); + } + + if (RecipeUtils + .addShapelessGregtechRecipe(new ItemStack[] { output }, ItemUtils.getSimpleStack(input, 9))) { + Logger.INFO("Added a shapeless recipe for Compressed Obsidian [" + r + "]"); + } + } + + // Compressed Glowstone 1-5 + for (int r = 0; r < 5; r++) { + + final ItemStack input = mItems2[r]; + final ItemStack output = mItems2[r + 1]; + + if (RecipeUtils.addShapedRecipe( + input, + input, + input, + input, + r == 2 ? aInvertedObsidian : input, + input, + input, + input, + input, + output)) { + Logger.INFO("Added a recipe for Compressed Glowstone [" + r + "]"); + } + + if (RecipeUtils + .addShapelessGregtechRecipe(new ItemStack[] { output }, ItemUtils.getSimpleStack(input, 9))) { + Logger.INFO("Added a shapeless recipe for Compressed Glowstone [" + r + "]"); + } + } + return true; + } + + private static void migratedRecipes() { + + RecipeUtils.generateMortarRecipe( + ItemUtils.getSimpleStack(ModItems.itemPlateRawMeat), + ItemUtils.getItemStackOfAmountFromOreDict("dustMeatRaw", 1)); + + generateWireRecipes(MaterialsElements.getInstance().ZIRCONIUM); + generateWireRecipes(MaterialsAlloy.HG1223); + generateWireRecipes(MaterialsAlloy.LEAGRISIUM); + generateWireRecipes(MaterialsAlloy.TRINIUM_TITANIUM); + generateWireRecipes(MaterialsElements.STANDALONE.HYPOGEN); + generateWireRecipes(MaterialsElements.STANDALONE.CHRONOMATIC_GLASS); + + // No Material for void, natch. + if (Thaumcraft.isModLoaded()) { + generatePipeRecipes(GT_Materials.Void.mDefaultLocalName, GT_Materials.Void.getMass(), 15); + } + + Material[] gtpp = new Material[] { MaterialsAlloy.STABALLOY, MaterialsAlloy.TANTALLOY_60, + MaterialsAlloy.TANTALLOY_61, MaterialsAlloy.POTIN, MaterialsAlloy.MARAGING300, MaterialsAlloy.MARAGING350, + MaterialsAlloy.INCONEL_690, MaterialsAlloy.INCONEL_792, MaterialsAlloy.HASTELLOY_X, + MaterialsAlloy.TRINIUM_NAQUADAH_CARBON }; + + for (Material mat : gtpp) { + // generatePipeRecipes multiplies the voltage multiplier by 8 because ??! reasons. + generatePipeRecipes(mat.getLocalizedName(), mat.getMass(), mat.vVoltageMultiplier / 8); + } + + Materials[] h = new Materials[] { Materials.Europium, Materials.Tungsten, Materials.DarkSteel, Materials.Clay, + Materials.Lead, }; + + for (Materials e : h) { + if (e == Materials.DarkSteel) { + if (!EnderIO.isModLoaded()) { + continue; + } + } + int tVoltageMultiplier = (e.mBlastFurnaceTemp >= 2800) ? 60 : 15; + generatePipeRecipes(e.mDefaultLocalName, e.getMass(), tVoltageMultiplier); + } + + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[6], + MaterialsAlloy.MARAGING250.getGear(1), + CI.component_Plate[6], + CI.getTieredCircuitOreDictName(4), + GregtechItemList.Casing_AdvancedVacuum.get(1), + CI.getTieredCircuitOreDictName(4), + CI.component_Plate[5], + ItemList.Hatch_Input_IV.get(1), + CI.component_Plate[5], + GregtechItemList.Hatch_Input_Cryotheum.get(1L)); + + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[6], + MaterialsAlloy.MARAGING300.getGear(1), + CI.component_Plate[6], + CI.getTieredCircuitOreDictName(5), + GregtechItemList.Casing_Adv_BlastFurnace.get(1), + CI.getTieredCircuitOreDictName(5), + CI.component_Plate[6], + ItemList.Hatch_Input_IV.get(1), + CI.component_Plate[6], + GregtechItemList.Hatch_Input_Pyrotheum.get(1L)); + + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[8], + MaterialsAlloy.PIKYONIUM.getGear(1), + CI.component_Plate[9], + CI.getTieredCircuitOreDictName(7), + GregtechItemList.Casing_Naq_Reactor_A.get(1), + CI.getTieredCircuitOreDictName(7), + CI.component_Plate[9], + ItemList.Hatch_Input_ZPM.get(1), + CI.component_Plate[8], + GregtechItemList.Hatch_Input_Naquadah.get(1L, new Object[0])); + + if (PollutionUtils.isPollutionEnabled()) { + GTModHandler.addCraftingRecipe( + GregtechItemList.Hatch_Muffler_Adv_LV.get(1L, new Object[0]), + bitsd, + new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_LV.get(1), + Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_LV.get(1) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Hatch_Muffler_Adv_MV.get(1L, new Object[0]), + bitsd, + new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_MV.get(1), + Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_MV.get(1) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Hatch_Muffler_Adv_HV.get(1L, new Object[0]), + bitsd, + new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_HV.get(1), + Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_HV.get(1) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Hatch_Muffler_Adv_EV.get(1L, new Object[0]), + bitsd, + new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_EV.get(1), + Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_EV.get(1) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Hatch_Muffler_Adv_IV.get(1L, new Object[0]), + bitsd, + new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_IV.get(1), + Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_IV.get(1) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Hatch_Muffler_Adv_LuV.get(1L, new Object[0]), + bitsd, + new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_LuV.get(1), + Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_LuV.get(1) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Hatch_Muffler_Adv_ZPM.get(1L, new Object[0]), + bitsd, + new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_ZPM.get(1), + Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_ZPM.get(1) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Hatch_Muffler_Adv_UV.get(1L, new Object[0]), + bitsd, + new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_UV.get(1), + Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_UV.get(1) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Hatch_Muffler_Adv_MAX.get(1L, new Object[0]), + bitsd, + new Object[] { "M", "P", Character.valueOf('M'), ItemList.Hatch_Muffler_MAX.get(1), + Character.valueOf('P'), GregtechItemList.Pollution_Cleaner_MAX.get(1) }); + } + } +} diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java b/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java new file mode 100644 index 0000000000..22008ac647 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesGregTech.java @@ -0,0 +1,1898 @@ +package gtPlusPlus.core.recipe; + +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.enums.Mods.Backpack; +import static gregtech.api.enums.Mods.Baubles; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.brewingRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.compressorRecipes; +import static gregtech.api.recipe.RecipeMaps.cutterRecipes; +import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; +import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; +import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; +import static gregtech.api.recipe.RecipeMaps.extractorRecipes; +import static gregtech.api.recipe.RecipeMaps.extruderRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes; +import static gregtech.api.recipe.RecipeMaps.fusionRecipes; +import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; +import static gregtech.api.util.GTRecipeBuilder.BUCKETS; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.INGOTS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.AssemblyLine; +import static gregtech.api.util.GTRecipeConstants.CHEMPLANT_CASING_TIER; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; +import static gregtech.api.util.GTRecipeConstants.FUSION_THRESHOLD; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.alloyBlastSmelterRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.cyclotronRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.thermalBoilerRecipes; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.system.material.WerkstoffLoader; +import cpw.mods.fml.common.Loader; +import goodgenerator.items.GGMaterial; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipeConstants; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.item.chemistry.AgriculturalChem; +import gtPlusPlus.core.item.chemistry.GenericChem; +import gtPlusPlus.core.item.chemistry.IonParticles; +import gtPlusPlus.core.item.crafting.ItemDummyResearch; +import gtPlusPlus.core.item.crafting.ItemDummyResearch.ASSEMBLY_LINE_RESEARCH; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.MaterialsOres; +import gtPlusPlus.core.material.Particle; +import gtPlusPlus.core.material.nuclear.MaterialsFluorides; +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.xmod.bop.blocks.BOPBlockRegistrator; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; + +public class RecipesGregTech { + + public static void run() { + Logger.INFO("Loading Recipes through GregAPI for Industrial Multiblocks."); + execute(); + } + + private static void execute() { + electrolyzerRecipes(); + assemblerRecipes(); + distilleryRecipes(); + extractorRecipes(); + fluidExtractorRecipes(); + chemicalReactorRecipes(); + dehydratorRecipes(); + blastFurnaceRecipes(); + largeChemReactorRecipes(); + fusionRecipes(); + compressorRecipes(); + mixerRecipes(); + macerationRecipes(); + centrifugeRecipes(); + cyclotronRecipes(); + blastSmelterRecipes(); + extruderRecipes(); + cuttingSawRecipes(); + breweryRecipes(); + laserEngraverRecipes(); + assemblyLineRecipes(); + fluidHeaterRecipes(); + chemplantRecipes(); + alloySmelterRecipes(); + thermalBoilerRecipes(); + + /* + * Special Recipe handlers + */ + RecipesSeleniumProcessing.init(); + RecipesRareEarthProcessing.init(); + + addFuels(); + } + + private static void alloySmelterRecipes() { + + // Wood's Glass Laser Lens + RA.stdBuilder() + .itemInputs(MaterialMisc.WOODS_GLASS.getDust(5), ItemList.Shape_Mold_Ball.get(0)) + .itemOutputs(GregtechItemList.Laser_Lens_WoodsGlass.get(1)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_HV) + .addTo(alloySmelterRecipes); + } + + 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) + + // Advanced method for Nitric Acid Production + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(17), CI.getPinkCatalyst(0)) + .fluidInputs(Materials.NitrogenDioxide.getGas(4000L), FluidUtils.getAir(4000), FluidUtils.getWater(2000)) + .fluidOutputs(FluidUtils.getFluidStack("nitricacid", 4000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(CHEMPLANT_CASING_TIER, 3) + .addTo(chemicalPlantRecipes); + + // Advanced recipe for Fluorine Production + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(17), + CI.getPurpleCatalyst(0), + ItemUtils.getSimpleStack(Blocks.sandstone, 64), + ItemUtils.getSimpleStack(Blocks.sandstone, 64)) + .itemOutputs( + MaterialsFluorides.FLUORITE.getOre(8), + MaterialsFluorides.FLUORITE.getOre(4), + MaterialsFluorides.FLUORITE.getOre(4), + MaterialsFluorides.FLUORITE.getOre(4)) + .fluidInputs(FluidUtils.getFluidStack("nitricacid", 4000), FluidUtils.getAir(8000)) + .duration(10 * SECONDS) + .eut(1024) + .metadata(CHEMPLANT_CASING_TIER, 5) + .addTo(chemicalPlantRecipes); + // Advanced recipe for Fluorine Production + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(17), + CI.getPurpleCatalyst(0), + ItemUtils.getSimpleStack(Blocks.sand, 64), + ItemUtils.getSimpleStack(Blocks.sand, 64)) + .itemOutputs( + MaterialsFluorides.FLUORITE.getOre(4), + MaterialsFluorides.FLUORITE.getOre(2), + MaterialsFluorides.FLUORITE.getOre(2), + MaterialsFluorides.FLUORITE.getOre(2)) + .fluidInputs(FluidUtils.getFluidStack("nitricacid", 5000), FluidUtils.getAir(12000)) + .duration(10 * SECONDS) + .eut(1024) + .metadata(CHEMPLANT_CASING_TIER, 5) + .addTo(chemicalPlantRecipes); + + // 3NO2 + H2O = 2HNO3 + NO + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(16), CI.getPinkCatalyst(0)) + .fluidInputs(Materials.NitrogenDioxide.getGas(3000L), FluidUtils.getDistilledWater(1000)) + .fluidOutputs(FluidUtils.getFluidStack("nitricacid", 2000), Materials.NitricOxide.getGas(1000L)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(CHEMPLANT_CASING_TIER, 2) + .addTo(chemicalPlantRecipes); + // Produce Boric Acid + // Na2B4O7·10H2O + 2HCl = 4B(OH)3 + 2NaCl + 5H2O + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(21), ItemUtils.getItemStackOfAmountFromOreDict("dustBorax", 23)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustSalt", 4)) + .fluidInputs(FluidUtils.getFluidStack(GenericChem.HydrochloricAcid, 2000)) + .fluidOutputs(FluidUtils.getFluidStack("boricacid", 4000), FluidUtils.getWater(5000)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(CHEMPLANT_CASING_TIER, 3) + .addTo(chemicalPlantRecipes); + + // Produce Th232 + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(22), MaterialsElements.getInstance().THORIUM.getDust(16)) + .itemOutputs( + MaterialsElements.getInstance().THORIUM.getSmallDust(32), + MaterialsElements.getInstance().THORIUM232.getDust(2), + MaterialsElements.getInstance().THORIUM232.getSmallDust(2), + MaterialsElements.getInstance().URANIUM232.getDust(1)) + .fluidInputs(FluidUtils.getDistilledWater(2000), FluidUtils.getFluidStack("boricacid", 1500)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_EV) + .metadata(CHEMPLANT_CASING_TIER, 4) + .addTo(chemicalPlantRecipes); + + // Modify Sapling into Pine Sapling + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedBioCircuit(6), ItemUtils.getSimpleStack(Blocks.sapling, 32)) + .itemOutputs(ItemUtils.getSimpleStack(BOPBlockRegistrator.sapling_Pine, 16)) + .fluidInputs(FluidUtils.getFluidStack("fluid.geneticmutagen", 2000), FluidUtils.getDistilledWater(8000)) + .duration(120 * SECONDS) + .eut(64) + .metadata(CHEMPLANT_CASING_TIER, 2) + .addTo(chemicalPlantRecipes); + + int aLaureniumTier = MaterialsAlloy.LAURENIUM.vTier; + // Adding Recipes for Casings + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(12), + CI.getTieredMachineCasing(aLaureniumTier - 1), + MaterialsAlloy.LAURENIUM.getPlate(8), + CI.getGear(aLaureniumTier, 2)) + .itemOutputs(GregtechItemList.Casing_Machine_Custom_3.get(1)) + .fluidInputs( + CI.getTieredFluid(aLaureniumTier, 2 * 144), + CI.getAlternativeTieredFluid(aLaureniumTier - 1, 4 * 144), + CI.getTertiaryTieredFluid(aLaureniumTier - 2, 6 * 144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .metadata(CHEMPLANT_CASING_TIER, 5) + .addTo(chemicalPlantRecipes); + + int aBotmiumTier = MaterialsAlloy.BOTMIUM.vTier; + // Adding Recipes for Casings + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(12), + CI.getTieredMachineCasing(aBotmiumTier - 1), + MaterialsAlloy.BOTMIUM.getPlate(8), + CI.getGear(aBotmiumTier, 2)) + .itemOutputs(GregtechItemList.Casing_Machine_Custom_4.get(1)) + .fluidInputs( + CI.getTieredFluid(aBotmiumTier, 2 * 144), + CI.getAlternativeTieredFluid(aBotmiumTier - 1, 4 * 144), + CI.getTertiaryTieredFluid(aBotmiumTier - 2, 6 * 144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .metadata(CHEMPLANT_CASING_TIER, 6) + .addTo(chemicalPlantRecipes); + + // Refine GT HF into GT++ HF + if (FluidUtils.doesHydrofluoricAcidGtExist()) { + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(22)) + .fluidInputs(FluidUtils.getHydrofluoricAcid(2000), FluidUtils.getHydrofluoricAcidGT(5000)) + .fluidOutputs(FluidUtils.getHydrofluoricAcid(4500)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(CHEMPLANT_CASING_TIER, 3) + .addTo(chemicalPlantRecipes); + + } + } + + private static void fluidHeaterRecipes() { + RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(20)) + .fluidInputs(Materials.Water.getFluid(1000)) + .fluidOutputs(FluidUtils.getHotWater(1000)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(fluidHeaterRecipes); + } + + private static void fusionRecipes() { + // Hypogen + RA.stdBuilder() + .fluidInputs( + MaterialsElements.STANDALONE.DRAGON_METAL.getFluidStack(144), + MaterialsElements.STANDALONE.RHUGNOR.getFluidStack(288)) + .fluidOutputs(MaterialsElements.STANDALONE.HYPOGEN.getFluidStack(36)) + .duration(6 * MINUTES + 49 * SECONDS + 12 * TICKS) + .eut(TierEU.RECIPE_UHV) + .metadata(FUSION_THRESHOLD, 1_200_000_000) + .addTo(fusionRecipes); + + // Rhugnor + RA.stdBuilder() + .fluidInputs( + MaterialUtils.getMaterial("Infinity", "Neutronium") + .getMolten(144), + MaterialsAlloy.QUANTUM.getFluidStack(288)) + .fluidOutputs(MaterialsElements.STANDALONE.RHUGNOR.getFluidStack(144)) + .duration(25 * SECONDS + 12 * TICKS) + .eut(TierEU.RECIPE_UV) + .metadata(FUSION_THRESHOLD, 2_000_000_000) + .addTo(fusionRecipes); + } + + private static void assemblyLineRecipes() { + + // Containment Casings + RA.stdBuilder() + .metadata( + RESEARCH_ITEM, + ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_1_CONTAINMENT, 1)) + .metadata(RESEARCH_TIME, 30 * MINUTES) + .itemInputs( + ItemList.Field_Generator_IV.get(32), + ItemList.Electric_Motor_EV.get(64), + ItemList.Energy_LapotronicOrb.get(32), + CI.getTieredComponent(OrePrefixes.cableGt12, 7, 32), + CI.getTieredComponent(OrePrefixes.wireGt16, 6, 64), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Naquadria, 64L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gadolinium, 32L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Samarium, 16L), + MaterialsAlloy.ARCANITE.getGear(8), + new Object[] { CI.getTieredCircuitOreDictName(5), 64 }, + new Object[] { CI.getTieredCircuitOreDictName(6), 32 }, + new Object[] { CI.getTieredCircuitOreDictName(7), 16 }, + GregtechItemList.Laser_Lens_Special.get(1), + ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 3, 64)) + .fluidInputs( + MaterialsAlloy.NITINOL_60.getFluidStack(144 * 9 * 4), + MaterialsAlloy.ENERGYCRYSTAL.getFluidStack(144 * 9 * 8), + MaterialsAlloy.TUMBAGA.getFluidStack(144 * 9 * 32), + Materials.Nichrome.getMolten(16 * INGOTS)) + .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockCasings3Misc, 15, 32)) + .eut(TierEU.RECIPE_LuV) + .duration(20 * MINUTES) + .addTo(AssemblyLine); + + // Turbine Automation Port + RA.stdBuilder() + .metadata( + RESEARCH_ITEM, + ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_8_TURBINE_AUTOMATION, 1)) + .metadata(RESEARCH_TIME, 24 * HOURS) + .itemInputs( + CI.getTieredMachineHull(8, 4), + CI.getConveyor(8, 24), + CI.getElectricMotor(7, 32), + CI.getElectricPiston(7, 16), + CI.getEnergyCore(6, 8), + CI.getPlate(8, 24), + CI.getTieredComponent(OrePrefixes.screw, 8, 48), + CI.getTieredComponent(OrePrefixes.bolt, 7, 32), + CI.getTieredComponent(OrePrefixes.rod, 6, 12), + new Object[] { CI.getTieredCircuitOreDictName(7), 20 }, + CI.getTieredComponent(OrePrefixes.rotor, 6, 16)) + .fluidInputs( + CI.getTieredFluid(8, 144 * 32), + CI.getAlternativeTieredFluid(7, 144 * 16), + CI.getTertiaryTieredFluid(7, 144 * 16), + MaterialsAlloy.BABBIT_ALLOY.getFluidStack(128 * 144)) + .itemOutputs(GregtechItemList.Hatch_Input_TurbineHousing.get(4)) + .eut(TierEU.RECIPE_UV) + .duration(2 * HOURS) + .addTo(AssemblyLine); + + /* + * Containment casings + */ + ItemStack[] aCoilWire = new ItemStack[] { ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 0, 64), + ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 1, 64), + ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 2, 64), + ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 3, 64), }; + ItemStack[] aGemCasings = new ItemStack[] { GregtechItemList.Battery_Casing_Gem_1.get(1), + GregtechItemList.Battery_Casing_Gem_2.get(1), GregtechItemList.Battery_Casing_Gem_3.get(1), + GregtechItemList.Battery_Casing_Gem_4.get(1), }; + ItemStack[] aResearch = new ItemStack[] { Particle.getBaseParticle(Particle.UNKNOWN), + GregtechItemList.Battery_Casing_Gem_1.get(1), GregtechItemList.Battery_Casing_Gem_2.get(1), + GregtechItemList.Battery_Casing_Gem_3.get(1), }; + + int aCasingSlot = 0; + for (int j = 6; j < 10; j++) { + RA.stdBuilder() + .metadata(RESEARCH_ITEM, aResearch[aCasingSlot]) + .metadata(RESEARCH_TIME, 1 * HOURS) + .itemInputs( + CI.getTieredComponent(OrePrefixes.plate, j - 1, 16), + CI.getTieredComponent(OrePrefixes.cableGt08, j + 1, 32), + CI.getTieredComponent(OrePrefixes.gearGt, j - 1, 4), + aCoilWire[aCasingSlot]) + .fluidInputs( + CI.getTieredFluid(j, 144 * 8), + CI.getTertiaryTieredFluid(j - 2, 144 * 16), + CI.getAlternativeTieredFluid(j, 144 * 16)) + .itemOutputs(aGemCasings[aCasingSlot++]) + .eut(GTValues.VP[j]) + .duration(2 * MINUTES) + .addTo(AssemblyLine); + } + + /* + * Gem Battery Recipes + */ + + ItemStack[] aGemBatteries = new ItemStack[] { GregtechItemList.Battery_Gem_1.get(1), + GregtechItemList.Battery_Gem_2.get(1), GregtechItemList.Battery_Gem_3.get(1), + GregtechItemList.Battery_Gem_4.get(1), }; + + ItemStack[] aExoticInputs = new ItemStack[] { Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.ELECTRON), Particle.getBaseParticle(Particle.CHARM), + Particle.getBaseParticle(Particle.GRAVITON) }; + aCasingSlot = 0; + for (int j = 6; j < 10; j++) { + RA.stdBuilder() + .metadata(RESEARCH_ITEM, aExoticInputs[aCasingSlot]) + .metadata(RESEARCH_TIME, 5 * HOURS) + .itemInputs( + aGemCasings[aCasingSlot], + ItemUtils.getSimpleStack(aExoticInputs[aCasingSlot], 16), + CI.getTieredComponent(OrePrefixes.plate, j, 16), + new Object[] { CI.getTieredCircuitOreDictName(j), 8 }, + CI.getTieredComponent(OrePrefixes.wireGt16, j + 1, 32), + CI.getTieredComponent(OrePrefixes.bolt, j, 8), + CI.getTieredComponent(OrePrefixes.screw, j - 1, 8)) + .fluidInputs( + CI.getTieredFluid(j, 144 * 1 * 16), + CI.getTertiaryTieredFluid(j - 2, 144 * 2 * 16), + CI.getAlternativeTieredFluid(j, 144 * 16), + CI.getTertiaryTieredFluid(j - 1, 144 * 16)) + .itemOutputs(aGemBatteries[aCasingSlot++]) + .eut(GTValues.VP[j]) + .duration(2 * MINUTES) + .addTo(AssemblyLine); + } + + if (Baubles.isModLoaded()) { + // Nano Healer + RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemUtils.simpleMetaStack(Items.golden_apple, 1, 1)) + .metadata(RESEARCH_TIME, 10 * MINUTES) + .itemInputs( + ItemUtils.getSimpleStack(aGemCasings[2], 4), + CI.getTieredComponent(OrePrefixes.plate, 8, 32), + new Object[] { CI.getTieredCircuitOreDictName(7), 16 }, + CI.getTieredComponent(OrePrefixes.cableGt02, 7, 16), + CI.getTieredComponent(OrePrefixes.gearGt, 6, 6), + CI.getTieredComponent(OrePrefixes.screw, 7, 16), + CI.getTieredComponent(OrePrefixes.bolt, 5, 24), + CI.getTieredComponent(OrePrefixes.frameGt, 4, 12), + ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 3, 64)) + .fluidInputs( + CI.getTieredFluid(7, 144 * 18 * 16), + CI.getTertiaryTieredFluid(7, 144 * 18 * 16), + CI.getAlternativeTieredFluid(6, 144 * 18 * 16), + CI.getAlternativeTieredFluid(7, 144 * 18 * 16)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("miscutils:personalHealingDevice", 1)) + .eut(TierEU.RECIPE_ZPM) + .duration(1 * HOURS) + .addTo(AssemblyLine); + + // Charge Pack LuV-UV + + ItemStack[] aChargeResearch = new ItemStack[] { + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore7", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore8", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore9", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore10", 1), }; + + ItemStack[] aChargeOutputs = new ItemStack[] { ItemUtils.getSimpleStack(ModItems.itemChargePack_High_1, 1), + ItemUtils.getSimpleStack(ModItems.itemChargePack_High_2, 1), + ItemUtils.getSimpleStack(ModItems.itemChargePack_High_3, 1), + ItemUtils.getSimpleStack(ModItems.itemChargePack_High_4, 1), }; + + int aCurrSlot = 0; + for (int h = 6; h < 10; h++) { + RA.stdBuilder() + .metadata(RESEARCH_ITEM, aChargeResearch[aCurrSlot]) + .metadata(RESEARCH_TIME, 10 * (aCurrSlot + 1) * MINUTES) + .itemInputs( + ItemUtils.getSimpleStack(aGemBatteries[aCurrSlot], 2), + aCoilWire[aCurrSlot], + CI.getTieredComponent(OrePrefixes.plate, h, 8), + new Object[] { CI.getTieredCircuitOreDictName(h), 4 }, + new Object[] { CI.getTieredCircuitOreDictName(h - 1), 8 }, + CI.getTieredComponent(OrePrefixes.cableGt12, h - 1, 16), + CI.getTieredComponent(OrePrefixes.screw, h, 16), + CI.getTieredComponent(OrePrefixes.bolt, h - 2, 32), + CI.getFieldGenerator(h - 1, 1)) + .fluidInputs( + CI.getTieredFluid(h, 144 * 4 * 8), + CI.getTertiaryTieredFluid(h - 1, 144 * 4 * 8), + CI.getAlternativeTieredFluid(h - 1, 144 * 4 * 8), + CI.getAlternativeTieredFluid(h - 2, 144 * 4 * 8)) + .itemOutputs(aChargeOutputs[aCurrSlot]) + .eut(GTValues.VP[h]) + .duration((aCurrSlot + 1) * HOURS) + .addTo(AssemblyLine); + aCurrSlot++; + } + + // Cloaking device + RA.stdBuilder() + .metadata( + RESEARCH_ITEM, + ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_9_CLOAKING, 1)) + .metadata(RESEARCH_TIME, 10 * MINUTES) + .itemInputs( + ItemUtils.getSimpleStack(aGemCasings[3], 4), + CI.getTieredComponent(OrePrefixes.plate, 8, 32), + new Object[] { CI.getTieredCircuitOreDictName(7), 16 }, + CI.getTieredComponent(OrePrefixes.cableGt04, 8, 16), + CI.getTieredComponent(OrePrefixes.gearGt, 7, 6), + CI.getTieredComponent(OrePrefixes.screw, 8, 16), + CI.getTieredComponent(OrePrefixes.bolt, 7, 24), + CI.getTieredComponent(OrePrefixes.frameGt, 5, 12), + ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 3, 64)) + .fluidInputs( + CI.getTieredFluid(8, 144 * 18 * 16), + CI.getTertiaryTieredFluid(8, 144 * 18 * 16), + CI.getAlternativeTieredFluid(7, 144 * 18 * 16), + CI.getAlternativeTieredFluid(8, 144 * 18 * 16)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("miscutils:personalCloakingDevice-0.0", 1)) + .eut(TierEU.RECIPE_UV) + .duration(1 * HOURS) + .addTo(AssemblyLine); + } + + RA.stdBuilder() + .metadata(RESEARCH_ITEM, GregtechItemList.Industrial_AlloyBlastSmelter.get(1, new Object() {})) + .metadata(RESEARCH_TIME, 30 * MINUTES) + .itemInputs( + GregtechItemList.Industrial_AlloyBlastSmelter.get(64L, new Object() {}), + GregtechItemList.Industrial_AlloyBlastSmelter.get(64L, new Object() {}), + GregtechItemList.Industrial_AlloyBlastSmelter.get(64L, new Object() {}), + GregtechItemList.Industrial_AlloyBlastSmelter.get(64L, new Object() {}), + ItemList.UV_Coil.get(16L, new Object() {}), + ItemList.Conveyor_Module_UV.get(4L, new Object() {}), + new Object[] { OrePrefixes.circuit.get(Materials.UV), 8 }, + new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 16 }, + ItemList.Circuit_Chip_PPIC.get(16, new Object() {}), + MaterialsAlloy.PIKYONIUM.getPlate(16), + MaterialsAlloy.CINOBITE.getScrew(32)) + .fluidInputs( + MaterialsAlloy.PIKYONIUM.getFluidStack(144 * 8), + MaterialsAlloy.INDALLOY_140.getFluidStack(144 * 9), + Materials.SolderingAlloy.getMolten(144 * 10)) + .itemOutputs(GregtechItemList.Mega_AlloyBlastSmelter.get(1L)) + .eut(TierEU.RECIPE_UHV / 2) + .duration(1 * MINUTES) + .addTo(AssemblyLine); + } + + private static void laserEngraverRecipes() { + + // Laser Sensors and Emitters together + GregtechItemList[] aTransParts = new GregtechItemList[] { GregtechItemList.TransmissionComponent_LV, + GregtechItemList.TransmissionComponent_MV, GregtechItemList.TransmissionComponent_HV, + GregtechItemList.TransmissionComponent_EV, GregtechItemList.TransmissionComponent_IV, + GregtechItemList.TransmissionComponent_LuV, GregtechItemList.TransmissionComponent_ZPM, + GregtechItemList.TransmissionComponent_UV, GregtechItemList.TransmissionComponent_UHV, }; + for (int i = 1; i < aTransParts.length; i++) { + RA.stdBuilder() + .itemInputs(CI.getEmitter(i, 2), CI.getSensor(i, 2)) + .itemOutputs(aTransParts[i - 1].get(1)) + .duration(5 * SECONDS) + .eut(GTValues.VP[i]) + .addTo(laserEngraverRecipes); + } + + RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tungsten, 6L), + GregtechItemList.Laser_Lens_Special.get(0)) + .itemOutputs(MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getDust(1)) + .duration(3 * MINUTES) + .eut(TierEU.RECIPE_UEV) + .addTo(laserEngraverRecipes); + + RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Titanium, 8L), + GregtechItemList.Laser_Lens_Special.get(0)) + .itemOutputs(MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getDust(1)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_UHV) + .addTo(laserEngraverRecipes); + + RA.stdBuilder() + .itemInputs(MaterialsAlloy.NITINOL_60.getBlock(2), GregtechItemList.Laser_Lens_Special.get(0)) + .itemOutputs(MaterialsElements.STANDALONE.ADVANCED_NITINOL.getBlock(1)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_UV) + .addTo(laserEngraverRecipes); + + RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glass, 64L), + GregtechItemList.Laser_Lens_Special.get(0)) + .itemOutputs(MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getDust(1)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_UHV) + .addTo(laserEngraverRecipes); + + RA.stdBuilder() + .itemInputs(CI.getFieldGenerator(6, 1), CI.getEmitter(7, 2)) + .itemOutputs(ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_1_CONTAINMENT, 1)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(laserEngraverRecipes); + + // Distillus Upgrade Chip + RA.stdBuilder() + .itemInputs( + GregtechItemList.Laser_Lens_WoodsGlass.get(0), + ItemUtils.simpleMetaStack(AgriculturalChem.mBioCircuit, 20, 1)) + .itemOutputs(GregtechItemList.Distillus_Upgrade_Chip.get(1)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(laserEngraverRecipes); + } + + private static void breweryRecipes() { + + if (Loader.isModLoaded("OpenBlocks")) { + RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(14)) + .fluidInputs(FluidRegistry.getFluidStack("mobessence", 100)) + .fluidOutputs(FluidRegistry.getFluidStack("xpjuice", 1332)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(brewingRecipes); + RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(14)) + .fluidInputs(FluidRegistry.getFluidStack("xpjuice", 1332)) + .fluidOutputs(FluidRegistry.getFluidStack("mobessence", 100)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(brewingRecipes); + } + + RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(BOPBlockRegistrator.sapling_Rainforest)) + .fluidInputs(Materials.Water.getFluid(100L)) + .fluidOutputs(Materials.Biomass.getFluid(100L)) + .duration(1 * MINUTES) + .eut(3) + .addTo(brewingRecipes); + RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(BOPBlockRegistrator.sapling_Rainforest)) + .fluidInputs(Materials.Honey.getFluid(100L)) + .fluidOutputs(Materials.Biomass.getFluid(100L)) + .duration(1 * MINUTES) + .eut(3) + .addTo(brewingRecipes); + RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(BOPBlockRegistrator.sapling_Rainforest)) + .fluidInputs(FluidUtils.getFluidStack("juice", 100)) + .fluidOutputs(Materials.Biomass.getFluid(100L)) + .duration(1 * MINUTES) + .eut(3) + .addTo(brewingRecipes); + } + + private static void cuttingSawRecipes() { + RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("blockMeatRaw", 1)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("plateMeatRaw", 9)) + .duration(16 * TICKS) + .eut(TierEU.RECIPE_ULV) + .addTo(cutterRecipes); + } + + private static void electrolyzerRecipes() { + RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(ModItems.dustDecayedRadium226, 1)) + .fluidOutputs(FluidUtils.getFluidStack("radon", 144)) + .duration(1 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_HV / 2) + .addTo(electrolyzerRecipes); + } + + private static void extruderRecipes() { + // Osmium Credits + RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("blockOsmium", 1), ItemList.Shape_Mold_Credit.get(0)) + .itemOutputs(ItemList.Credit_Greg_Osmium.get(1)) + .duration(6 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_EV / 2) + .addTo(extruderRecipes); + } + + private static void blastSmelterRecipes() { + + // Eglin Steel + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + MaterialsElements.getInstance().IRON.getDust(4), + MaterialsAlloy.KANTHAL.getDust(1), + MaterialsAlloy.INVAR.getDust(5), + MaterialsElements.getInstance().SULFUR.getDust(1), + MaterialsElements.getInstance().CARBON.getDust(1), + MaterialsElements.getInstance().SILICON.getDust(4)) + .fluidOutputs(MaterialsAlloy.EGLIN_STEEL.getFluidStack(16 * 144)) + .eut(TierEU.RECIPE_MV) + .duration(45 * SECONDS) + .addTo(alloyBlastSmelterRecipes); + + // HG1223 + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(5), + MaterialsElements.getInstance().BARIUM.getDust(2), + MaterialsElements.getInstance().CALCIUM.getDust(2), + MaterialsElements.getInstance().COPPER.getDust(3)) + .fluidOutputs(MaterialsAlloy.HG1223.getFluidStack(16 * 144)) + .eut(TierEU.RECIPE_LuV) + .duration(2 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + + // NITINOL_60 + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(2), + MaterialsElements.getInstance().TITANIUM.getDust(3), + MaterialsElements.getInstance().NICKEL.getDust(2)) + .fluidOutputs(MaterialsAlloy.NITINOL_60.getFluidStack(5 * 144)) + .eut(TierEU.RECIPE_IV) + .duration(1 * MINUTES + 15 * SECONDS) + .addTo(alloyBlastSmelterRecipes); + + // INDALLOY_140 + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(5), + MaterialsElements.getInstance().BISMUTH.getDust(47), + MaterialsElements.getInstance().LEAD.getDust(25), + MaterialsElements.getInstance().TIN.getDust(13), + MaterialsElements.getInstance().CADMIUM.getDust(10), + MaterialsElements.getInstance().INDIUM.getDust(5)) + .fluidOutputs(MaterialsAlloy.INDALLOY_140.getFluidStack(100 * 144)) + .eut(TierEU.RECIPE_IV) + .duration(40 * SECONDS) + .addTo(alloyBlastSmelterRecipes); + + // Germanium Roasting + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(15), + ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedSphalerite", 8), + MaterialsElements.getInstance().CARBON.getDust(32)) + .fluidInputs(Materials.SulfuricAcid.getFluid(2000)) + .fluidOutputs(MaterialsElements.getInstance().GERMANIUM.getFluidStack(288)) + .eut(4_000) + .duration(5 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + + // Rhenium Roasting + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(20), + ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedScheelite", 8), + MaterialsElements.getInstance().CARBON.getDust(32)) + .fluidInputs(Materials.SulfuricAcid.getFluid(10000)) + .fluidOutputs(MaterialsElements.getInstance().RHENIUM.getFluidStack(144)) + .eut(4_000) + .duration(5 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(20), + ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedMolybdenite", 8), + MaterialsElements.getInstance().CARBON.getDust(32)) + .fluidInputs(Materials.SulfuricAcid.getFluid(7500)) + .fluidOutputs(MaterialsElements.getInstance().RHENIUM.getFluidStack(144)) + .eut(4_000) + .duration(5 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(20), + ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedMolybdenum", 8), + MaterialsElements.getInstance().CARBON.getDust(32)) + .fluidInputs(Materials.SulfuricAcid.getFluid(5000)) + .fluidOutputs(MaterialsElements.getInstance().RHENIUM.getFluidStack(288)) + .eut(4_000) + .duration(5 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + + // Thallium Roasting + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(21), + ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedZinc", 3), + ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedPyrite", 4), + MaterialsElements.getInstance().CARBON.getDust(16)) + .fluidInputs(Materials.SulfuricAcid.getFluid(1250)) + .fluidOutputs(MaterialsElements.getInstance().THALLIUM.getFluidStack(288)) + .eut(TierEU.RECIPE_IV) + .duration(1 * MINUTES + 15 * SECONDS) + .noOptimize() + .addTo(alloyBlastSmelterRecipes); + + // Strontium processing + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(21), + MaterialMisc.STRONTIUM_OXIDE.getDust(8), + MaterialsElements.getInstance().ALUMINIUM.getDust(8)) + .itemOutputs( + MaterialsElements.getInstance().ALUMINIUM.getIngot(8), + MaterialsElements.getInstance().STRONTIUM.getIngot(8)) + .fluidOutputs(MaterialsElements.getInstance().OXYGEN.getFluidStack(8000)) + .eut(TierEU.RECIPE_EV) + .duration(2 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + + // molten botmium + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(4), + ItemUtils.getItemStackOfAmountFromOreDict("dustNitinol60", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustOsmium", 6), + ItemUtils.getItemStackOfAmountFromOreDict("dustRuthenium", 6), + ItemUtils.getItemStackOfAmountFromOreDict("dustThallium", 3)) + .fluidOutputs(MaterialsAlloy.BOTMIUM.getFluidStack(2304)) + .eut(TierEU.RECIPE_UV) + .duration(2 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + + // molten precious metals alloy + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + ItemUtils.getItemStackOfAmountFromOreDict("dustRuthenium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRhodium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustPalladium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustPlatinum", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustOsmium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustIridium", 1)) + .fluidOutputs(FluidUtils.getFluidStack("molten.precious metals alloy", 864)) + .eut(TierEU.RECIPE_UEV) + .duration(9 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + + // lossless phonon transfer medium + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(5), + WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.dust, 5), + GGMaterial.metastableOganesson.get(OrePrefixes.dust, 1), + Materials.Praseodymium.getDust(15), + Materials.SuperconductorUIVBase.getDust(6)) + .fluidInputs(MaterialsUEVplus.PhononCrystalSolution.getFluid(4000L)) + .fluidOutputs(MaterialsUEVplus.PhononMedium.getFluid(1000L)) + .eut(TierEU.RECIPE_UIV) + .duration(2 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + } + + private static void dehydratorRecipes() { + Logger.INFO("Loading Recipes for Chemical Dehydrator."); + + ItemStack cropGrape = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("cropGrape", 1); + ItemStack foodRaisins = ItemUtils.getItemStackOfAmountFromOreDictNoBroken("foodRaisins", 1); + + if (cropGrape != null && foodRaisins != null) { + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedBioCircuit(20), cropGrape) + .itemOutputs(foodRaisins) + .eut(2) + .duration(10 * TICKS) + .addTo(chemicalDehydratorRecipes); + } + + // Process Waste Water + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedBioCircuit(21)) + .itemOutputs( + ItemUtils.getSimpleStack(Blocks.dirt), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Iron, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Copper, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tin, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Nickel, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Gold, 1L)) + .outputChances(20_00, 5_00, 10, 7, 6, 5, 4, 3, 2) + .fluidInputs(FluidUtils.getFluidStack("sludge", 1000)) + .fluidOutputs(Materials.Methane.getGas(100)) + .eut(TierEU.RECIPE_HV) + .duration(2 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + // C8H10 = C8H8 + 2H + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(18), CI.emptyCells(3)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("cellStyrene", 1), + ItemUtils.getItemStackOfAmountFromOreDict("cellHydrogen", 2)) + .fluidInputs(FluidUtils.getFluidStack("fluid.ethylbenzene", 1000)) + .eut(TierEU.RECIPE_LV) + .duration(3 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + /* + * Add custom recipes for drying leather + */ + if (Backpack.isModLoaded()) { + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(18), new ItemStack(Items.leather, 2)) + .itemOutputs(ItemUtils.getCorrectStacktype("Backpack:tannedLeather", 1)) + .fluidInputs(FluidUtils.getFluidStack("fluid.ethylbenzene", 1000)) + .eut(180) + .duration(5 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + if (NewHorizonsCoreMod.isModLoaded()) { + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ArtificialLeather", 2L, 0)) + .itemOutputs(ItemUtils.getCorrectStacktype("Backpack:tannedLeather", 1)) + .fluidInputs(FluidUtils.getFluidStack("fluid.ethylbenzene", 1000)) + .eut(180) + .duration(5 * SECONDS) + .addTo(chemicalDehydratorRecipes); + } + } + // Alternative ACETIC ANHYDRIDE recipe for Kevlar Line + // 2C2H4O2 = C4H6O3 + H2O + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(18), CI.emptyCells(1)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("cellWater", 1)) + .fluidInputs(FluidUtils.getFluidStack("aceticacid", 2000)) + .fluidOutputs(MaterialMisc.ACETIC_ANHYDRIDE.getFluidStack(1000)) + .eut(TierEU.RECIPE_HV) + .duration(30 * SECONDS) + .addTo(chemicalDehydratorRecipes); + } + + private static void largeChemReactorRecipes() { + // Styrene + // C8H10 = C8H8 + 2H + RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(24)) + .itemOutputs() + .fluidInputs(FluidUtils.getFluidStack("fluid.ethylbenzene", 1000)) + .fluidOutputs(Materials.Styrene.getFluid(1000L), Materials.Hydrogen.getGas(2000)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(multiblockChemicalReactorRecipes); + + // Short-cut Styrene + // C6H6 + C2H4 = C8H8 + 2H + RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(24)) + .itemOutputs() + .fluidInputs(Materials.Ethylene.getGas(500L), Materials.Benzene.getFluid(500L)) + .fluidOutputs(Materials.Styrene.getFluid(500L), Materials.Hydrogen.getGas(1000)) + .duration(12 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(multiblockChemicalReactorRecipes); + } + + private static void assemblerRecipes() { + + RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Vanadium, 32L), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.VanadiumSteel, 8L)) + .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemHalfCompleteCasings, 0, 4)) + .fluidInputs(Materials.Oxygen.getGas(8000L)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + ItemUtils.simpleMetaStack(ModItems.itemHalfCompleteCasings, 0, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.VanadiumGallium, 8L)) + .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemHalfCompleteCasings, 1, 8)) + .fluidInputs(Materials.Tantalum.getMolten(4 * INGOTS)) + .duration(32 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + ItemUtils.simpleMetaStack(ModItems.itemHalfCompleteCasings, 1, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 4L), + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(3), 4), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorHV, 2L)) + .itemOutputs(ItemUtils.getSimpleStack(GregtechItemList.Casing_Vanadium_Redox.get(1), 1)) + .fluidInputs(Materials.Oxygen.getGas(16 * BUCKETS)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(TierEU.RECIPE_HV / 2) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Vanadium_Redox.get(1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Titanium, 4L), + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(4), 4), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorEV, 2L)) + .itemOutputs(GregtechItemList.Casing_Vanadium_Redox_IV.get(1)) + .fluidInputs(Materials.Nitrogen.getGas(16 * BUCKETS)) + .duration(6 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Vanadium_Redox_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.TungstenSteel, 4L), + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(5), 4), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorIV, 2L)) + .itemOutputs(GregtechItemList.Casing_Vanadium_Redox_LuV.get(1)) + .fluidInputs(Materials.Helium.getGas(8 * BUCKETS)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Vanadium_Redox_LuV.get(1), + ItemUtils.getItemStackOfAmountFromOreDict("plateAlloyIridium", 16), + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(6), 4), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 2L)) + .itemOutputs(GregtechItemList.Casing_Vanadium_Redox_ZPM.get(1)) + .fluidInputs(Materials.Argon.getGas(4 * BUCKETS)) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Vanadium_Redox_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Naquadah, 4L), + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(7), 4), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 2L)) + .itemOutputs(GregtechItemList.Casing_Vanadium_Redox_UV.get(1)) + .fluidInputs(Materials.Radon.getGas(4 * BUCKETS)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Vanadium_Redox_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Americium, 4L), + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(8), 4), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUV, 2L)) + .itemOutputs(GregtechItemList.Casing_Vanadium_Redox_MAX.get(1)) + .fluidInputs(FluidUtils.getFluidStack("krypton", 500)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(CI.explosiveITNT, 2), + ItemUtils.getSimpleStack(CI.explosiveTNT, 4), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 2L), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Iron, 1L)) + .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockMiningExplosive, 3)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.gem, Materials.NetherStar, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 8L), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.BlackSteel, 8L)) + .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockWitherGuard, 64)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + CI.fluidRegulator_LV, + CI.electricMotor_LV, + CI.getTieredComponent(OrePrefixes.bolt, 1, 8), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.Brass, 1L), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.Brass, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 2L)) + .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 1, 1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + CI.fluidRegulator_MV, + CI.electricMotor_MV, + CI.getTieredComponent(OrePrefixes.bolt, 2, 8), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.Invar, 1L), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.Invar, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Aluminium, 2L)) + .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 2, 1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + CI.fluidRegulator_HV, + CI.electricMotor_HV, + CI.getTieredComponent(OrePrefixes.bolt, 3, 8), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.Chrome, 1L), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.Chrome, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 2L)) + .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 3, 1)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs( + CI.fluidRegulator_EV, + CI.electricMotor_EV, + CI.getTieredComponent(OrePrefixes.bolt, 4, 8), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.Titanium, 1L), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.Titanium, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2L)) + .itemOutputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 4, 1)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 1, 1), GTUtility.getIntegratedCircuit(20)) + .itemOutputs(ItemUtils.simpleMetaStack(ModItems.toolGregtechPump, 1000, 1)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 2, 1), GTUtility.getIntegratedCircuit(20)) + .itemOutputs(ItemUtils.simpleMetaStack(ModItems.toolGregtechPump, 1001, 1)) + .duration(6 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 3, 1), GTUtility.getIntegratedCircuit(20)) + .itemOutputs(ItemUtils.simpleMetaStack(ModItems.toolGregtechPump, 1002, 1)) + .duration(24 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + RA.stdBuilder() + .itemInputs(ItemUtils.simpleMetaStack(ModItems.itemGenericToken, 4, 1), GTUtility.getIntegratedCircuit(20)) + .itemOutputs(ItemUtils.simpleMetaStack(ModItems.toolGregtechPump, 1003, 1)) + .duration(1 * MINUTES + 36 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + // Low tier Charge Packs + + final ItemStack[] aPackBatteries = new ItemStack[] { ItemList.Battery_RE_LV_Lithium.get(4), + ItemList.Battery_RE_MV_Lithium.get(4), ItemList.Battery_RE_HV_Lithium.get(4), + GregtechItemList.Battery_RE_EV_Lithium.get(4), ItemList.Energy_LapotronicOrb.get(4), }; + final ItemStack[] aPackPlates = new ItemStack[] { CI.getPlate(1, 8), CI.getPlate(2, 8), CI.getPlate(3, 8), + CI.getPlate(4, 8), CI.getPlate(5, 8), }; + final ItemStack[] aPackWire = new ItemStack[] { CI.getTieredComponent(OrePrefixes.wireGt02, 1, 6), + CI.getTieredComponent(OrePrefixes.wireGt04, 2, 6), CI.getTieredComponent(OrePrefixes.wireGt08, 3, 6), + CI.getTieredComponent(OrePrefixes.wireGt12, 4, 6), CI.getTieredComponent(OrePrefixes.wireGt16, 5, 6), }; + final ItemStack[] aPackCircuit = new ItemStack[] { CI.getTieredComponent(OrePrefixes.circuit, 1, 4), + CI.getTieredComponent(OrePrefixes.circuit, 2, 4), CI.getTieredComponent(OrePrefixes.circuit, 3, 4), + CI.getTieredComponent(OrePrefixes.circuit, 4, 4), CI.getTieredComponent(OrePrefixes.circuit, 5, 4), }; + final ItemStack[] aPackRing = new ItemStack[] { CI.getTieredComponent(OrePrefixes.ring, 1, 12), + CI.getTieredComponent(OrePrefixes.ring, 2, 12), CI.getTieredComponent(OrePrefixes.ring, 3, 12), + CI.getTieredComponent(OrePrefixes.ring, 4, 12), CI.getTieredComponent(OrePrefixes.ring, 5, 12), }; + final ItemStack[] aPackOutput = new ItemStack[] { ItemUtils.getSimpleStack(ModItems.itemChargePack_Low_1), + ItemUtils.getSimpleStack(ModItems.itemChargePack_Low_2), + ItemUtils.getSimpleStack(ModItems.itemChargePack_Low_3), + ItemUtils.getSimpleStack(ModItems.itemChargePack_Low_4), + ItemUtils.getSimpleStack(ModItems.itemChargePack_Low_5) }; + + for (int i = 1; i < 6; i++) { + + int aAS = i - 1; + + RA.stdBuilder() + .itemInputs( + aPackPlates[aAS], + aPackRing[aAS], + aPackWire[aAS], + aPackCircuit[aAS], + aPackBatteries[aAS], + CI.getSensor(i, 4)) + .itemOutputs(aPackOutput[aAS]) + .fluidInputs(CI.getTieredFluid(i, (144 * 4))) + .duration(30 * i * SECONDS) + .eut(GTValues.VP[i]) + .addTo(assemblerRecipes); + } + + if (Baubles.isModLoaded()) { + + // Turbine Housing Research Page + RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(17), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Trinium, 64L), + CI.getSensor(6, 6), + CI.getBolt(7, 64), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Platinum, 64L), + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(7), 12)) + .itemOutputs( + ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_8_TURBINE_AUTOMATION, 1)) + .fluidInputs(CI.getAlternativeTieredFluid(7, 144 * 32)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + // Cloaking Device Research Page + RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(17), + ItemUtils.getSimpleStack(ModItems.itemCircuitLFTR, 4), + CI.getFieldGenerator(6, 16), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Palladium, 32L), + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(6), 12)) + .itemOutputs(ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_9_CLOAKING, 1)) + .fluidInputs(CI.getAlternativeTieredFluid(7, 144 * 32)) + .duration(10 * MINUTES) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + } + } + + private static void distilleryRecipes() { + Logger.INFO("Registering Distillery/Distillation Tower Recipes."); + RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(4)) + .fluidInputs(Materials.Air.getGas(1000L)) + .fluidOutputs(Materials.Helium.getGas(1L)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(distilleryRecipes); + + RA.stdBuilder() + .fluidInputs(Materials.Air.getGas(20000L)) + .fluidOutputs(Materials.Helium.getGas(25L)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(distillationTowerRecipes); + + // Apatite Distillation + /* + * so if you dissolve aparite in sulphuric acid you'll get a mixture of SO2, H2O, HF and HCl + */ + + RA.stdBuilder() + .fluidInputs(FluidUtils.getFluidStack("sulfuricapatite", 5200)) + .fluidOutputs( + FluidUtils.getFluidStack("sulfurousacid", 3800), + FluidUtils.getFluidStack("hydrogenchloride", 1000), + FluidUtils.getFluidStack("hydrofluoricacid", 400)) + .duration(45 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(distillationTowerRecipes); + + RA.stdBuilder() + .fluidInputs(FluidUtils.getFluidStack("sulfurousacid", 1000)) + .fluidOutputs(Materials.SulfurDioxide.getGas(500), Materials.Water.getFluid(500)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV / 2) + .addTo(distillationTowerRecipes); + } + + private static void thermalBoilerRecipes() { + Logger.INFO("Registering Thermal Boiler Recipes."); + + // Recipes with special value -1 display additional tooltip in NEI about lava filters. + + // Lava + + RA.stdBuilder() + .fluidInputs(FluidUtils.getLava(1000), FluidUtils.getWater(16_000 / GTValues.STEAM_PER_WATER)) + .fluidOutputs(FluidUtils.getPahoehoeLava(1000), FluidUtils.getSteam(16_000)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Copper, 1), + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tin, 1), + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Gold, 1), + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Silver, 1), + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tantalum, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tungstate, 1), + new ItemStack(Blocks.obsidian, 1, 0)) + .outputChances(444, 222, 56, 56, 56, 125, 1000) + .duration(1 * SECONDS) + .eut(0) + .addTo(thermalBoilerRecipes); + + // Pahoehoe Lava + + RA.stdBuilder() + .fluidInputs(FluidUtils.getPahoehoeLava(1000), FluidUtils.getWater(16_000 / GTValues.STEAM_PER_WATER)) + .fluidOutputs(FluidUtils.getSteam(16_000)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Bronze, 1), + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Electrum, 1), + GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Tantalum, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Tungstate, 1), + new ItemStack(Blocks.obsidian, 1, 0)) + .outputChances(167, 56, 56, 125, 3700) + .duration(1 * SECONDS) + .eut(0) + .addTo(thermalBoilerRecipes); + + // Hot Coolant + + RA.stdBuilder() + .fluidInputs( + FluidUtils.getFluidStack("ic2hotcoolant", 500), + FluidUtils.getWater(100_000 / GTValues.STEAM_PER_WATER)) + .fluidOutputs(FluidUtils.getFluidStack("ic2coolant", 500), FluidUtils.getSuperHeatedSteam(100_000)) + .duration(1 * SECONDS) + .eut(0) + .addTo(thermalBoilerRecipes); + + // Solar Salt (Hot) + + RA.stdBuilder() + .fluidInputs( + MaterialMisc.SOLAR_SALT_HOT.getFluidStack(100), + FluidUtils.getWater(100_000 / GTValues.STEAM_PER_WATER)) + .fluidOutputs(MaterialMisc.SOLAR_SALT_COLD.getFluidStack(100), FluidUtils.getSuperHeatedSteam(100_000)) + .duration(1 * SECONDS) + .eut(0) + .addTo(thermalBoilerRecipes); + } + + private static void addFuels() { + Logger.INFO("Registering New Fuels."); + + RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(Items.lava_bucket)) + .metadata(FUEL_VALUE, 32) + .metadata(FUEL_TYPE, 2) + .duration(0) + .eut(0) + .addTo(GTRecipeConstants.Fuel); + RA.stdBuilder() + .itemInputs(ItemUtils.getIC2Cell(2)) + .metadata(FUEL_VALUE, 32) + .metadata(FUEL_TYPE, 2) + .duration(0) + .eut(0) + .addTo(GTRecipeConstants.Fuel); + RA.stdBuilder() + .itemInputs(ItemUtils.getIC2Cell(11)) + .metadata(FUEL_VALUE, 24) + .metadata(FUEL_TYPE, 2) + .duration(0) + .eut(0) + .addTo(GTRecipeConstants.Fuel); + } + + private static void extractorRecipes() { + Logger.INFO("Registering Extractor Recipes."); + RA.stdBuilder() + .itemInputs(GregtechItemList.Battery_RE_EV_Sodium.get(1L)) + .itemOutputs(ItemList.Battery_Hull_HV.get(4L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(GregtechItemList.Battery_RE_EV_Cadmium.get(1L)) + .itemOutputs(ItemList.Battery_Hull_HV.get(4L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + RA.stdBuilder() + .itemInputs(GregtechItemList.Battery_RE_EV_Lithium.get(1L)) + .itemOutputs(ItemList.Battery_Hull_HV.get(4L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + } + + private static void fluidExtractorRecipes() { + // Gelid Cryotheum + RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cryotheum, 1L)) + .fluidOutputs(FluidUtils.getFluidStack("cryotheum", 250)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV / 2) + .addTo(fluidExtractionRecipes); + + // Ender Fluid + RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(Items.ender_pearl)) + .fluidOutputs(FluidUtils.getFluidStack("ender", 250)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(fluidExtractionRecipes); + + // Blazing Pyrotheum + RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Pyrotheum, 1L)) + .fluidOutputs(FluidUtils.getFluidStack("pyrotheum", 250)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV / 2) + .addTo(fluidExtractionRecipes); + } + + private static void centrifugeRecipes() { + + RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(2), MaterialMisc.SOLAR_SALT_COLD.getCell(1)) + .itemOutputs( + MaterialMisc.SODIUM_NITRATE.getDust(3), + MaterialMisc.POTASSIUM_NITRATE.getDust(2), + CI.emptyCells(1)) + .duration(6 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(centrifugeRecipes); + } + + private static void mixerRecipes() { + + RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(2), + CI.emptyCells(1), + MaterialMisc.SODIUM_NITRATE.getDust(3), + MaterialMisc.POTASSIUM_NITRATE.getDust(2)) + .itemOutputs(MaterialMisc.SOLAR_SALT_COLD.getCell(1)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(2), + Materials.Titanium.getDust(9), + Materials.Carbon.getDust(9), + Materials.Potassium.getDust(9), + Materials.Lithium.getDust(9), + Materials.Sulfur.getDust(9)) + .itemOutputs(MaterialsAlloy.LEAGRISIUM.getDust(50)) + .fluidInputs(Materials.Hydrogen.getGas(5000)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(mixerRecipes); + + RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(2), + Materials.Steel.getDust(16), + Materials.Molybdenum.getDust(1), + Materials.Titanium.getDust(1), + Materials.Nickel.getDust(4), + Materials.Cobalt.getDust(2)) + .itemOutputs(MaterialsAlloy.MARAGING250.getDust(24)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(mixerRecipes); + } + + private static void chemicalReactorRecipes() { + + RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(21), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Apatite, 32L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Sulfur, 8L)) + .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 4000)) + .fluidOutputs(FluidUtils.getFluidStack("sulfuricapatite", 8000)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // KOH + HNO3 = KNO3 + H2O + RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(GenericChem.mPotassiumHydroxide, 3), CI.getNumberedAdvancedCircuit(1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.PotassiumNitrade, 5L)) + .fluidInputs(Materials.NitricAcid.getFluid(1000)) + .fluidOutputs(Materials.Water.getFluid(1000)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Na2CO3 + 2HNO3 = 2NaNO3 + CO2 + H2O + RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(AgriculturalChem.mSodiumCarbonate, 6), + CI.getNumberedAdvancedCircuit(1)) + .itemOutputs(MaterialMisc.SODIUM_NITRATE.getDust(10)) + .fluidInputs(Materials.NitricAcid.getFluid(2000)) + .fluidOutputs(Materials.CarbonDioxide.getGas(1000)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + } + + private static void blastFurnaceRecipes() { + + // Synthetic Graphite + RA.stdBuilder() + .itemInputs(MaterialsAlloy.SILICON_CARBIDE.getDust(16), GTUtility.getIntegratedCircuit(22)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Graphite, 8L), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Silicon, 8L)) + .fluidInputs(Materials.Nitrogen.getGas(4000)) + .fluidOutputs() + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_IV) + .metadata(COIL_HEAT, 4500) + .addTo(blastFurnaceRecipes); + + } + + private static void compressorRecipes() { + RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Clay, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.plate, Materials.Clay, 1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.MeatRaw, 9L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.block, Materials.MeatRaw, 1L)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + + RA.stdBuilder() + .itemInputs(ItemList.FusionComputer_UV.get(9)) + .itemOutputs(GregtechItemList.Compressed_Fusion_Reactor.get(1)) + .duration(1 * HOURS + 50 * MINUTES) + .eut(TierEU.RECIPE_UV) + .addTo(compressorRecipes); + } + + private static void macerationRecipes() { + + RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.block, Materials.MeatRaw, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.MeatRaw, 9L)) + .duration(44 * SECONDS) + .eut(4) + .addTo(maceratorRecipes); + + if (ItemUtils.simpleMetaStack("chisel:limestone", 0, 1) != null) { + RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("limestone", 1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Calcite, 4L)) + .duration(20 * SECONDS) + .eut(2) + .addTo(maceratorRecipes); + } + } + + private static void cyclotronRecipes() { + + // Polonium + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Pellet_RTG_PO210.get(1)) + .outputChances(100) + .fluidInputs(FluidUtils.getFluidStack("molten.bismuth", 1)) + .duration(8 * HOURS + 20 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(cyclotronRecipes); + + // Americium + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Pellet_RTG_AM241.get(4)) + .outputChances(2500) + .fluidInputs(FluidUtils.getFluidStack("molten.americium", 1)) + .duration(8 * HOURS + 20 * MINUTES) + .eut(4080) + .addTo(cyclotronRecipes); + + // Strontium u235 + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Pellet_RTG_SR90.get(1)) + .outputChances(570) + .fluidInputs(FluidUtils.getFluidStack("molten.uranium235", 10)) + .duration(8 * HOURS + 20 * MINUTES) + .eut(4080) + .addTo(cyclotronRecipes); + + // Strontium u233 + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Pellet_RTG_SR90.get(1)) + .outputChances(660) + .fluidInputs(FluidUtils.getFluidStack("molten.uranium233", 10)) + .duration(8 * HOURS + 20 * MINUTES) + .eut(4080) + .addTo(cyclotronRecipes); + + // Strontium pu239 + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Pellet_RTG_SR90.get(1)) + .outputChances(220) + .fluidInputs(FluidUtils.getFluidStack("molten.plutonium", 10)) + .duration(8 * HOURS + 20 * MINUTES) + .eut(4080) + .addTo(cyclotronRecipes); + + // Plutonium + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Pellet_RTG_PU238.get(2)) + .outputChances(780) + .fluidInputs(FluidUtils.getFluidStack("molten.plutonium238", 1)) + .duration(8 * HOURS + 20 * MINUTES) + .eut(4080) + .addTo(cyclotronRecipes); + + // Neptunium + GTValues.RA.stdBuilder() + .itemInputs(MaterialsElements.getInstance().URANIUM238.getDust(1)) + .itemOutputs(ItemUtils.getSimpleStack(ModItems.dustNeptunium238)) + .outputChances(500) + .fluidInputs(FluidUtils.getFluidStack("deuterium", 400)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(cyclotronRecipes); + + /* + * Particle Science + */ + + // Quark Smash + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(3)) + .itemOutputs( + Particle.getBaseParticle(Particle.UP), + Particle.getBaseParticle(Particle.DOWN), + Particle.getBaseParticle(Particle.CHARM), + Particle.getBaseParticle(Particle.STRANGE), + Particle.getBaseParticle(Particle.TOP), + Particle.getBaseParticle(Particle.BOTTOM)) + .outputChances(100, 100, 100, 100, 100, 100) + .fluidInputs(FluidUtils.getFluidStack("plasma.hydrogen", 100)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_ZPM) + .addTo(cyclotronRecipes); + // Lepton Smash + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(6)) + .itemOutputs( + Particle.getBaseParticle(Particle.ELECTRON), + Particle.getBaseParticle(Particle.MUON), + Particle.getBaseParticle(Particle.TAU), + Particle.getBaseParticle(Particle.ELECTRON_NEUTRINO), + Particle.getBaseParticle(Particle.MUON_NEUTRINO), + Particle.getBaseParticle(Particle.TAU_NEUTRINO)) + .outputChances(600, 40, 20, 15, 10, 5) + .fluidInputs(FluidUtils.getFluidStack("plasma.helium", 1500)) + .duration(40 * MINUTES) + .eut(TierEU.RECIPE_ZPM) + .addTo(cyclotronRecipes); + // Boson Smash + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(9)) + .itemOutputs( + Particle.getBaseParticle(Particle.GLUON), + Particle.getBaseParticle(Particle.PHOTON), + Particle.getBaseParticle(Particle.Z_BOSON), + Particle.getBaseParticle(Particle.W_BOSON), + Particle.getBaseParticle(Particle.HIGGS_BOSON)) + .outputChances(160, 260, 150, 150, 1) + .fluidInputs(FluidUtils.getFluidStack("plasma.helium", 1500)) + .duration(30 * MINUTES) + .eut(TierEU.RECIPE_ZPM) + .addTo(cyclotronRecipes); + // Mixed Smash 1 + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(12)) + .itemOutputs( + Particle.getBaseParticle(Particle.GRAVITON), + Particle.getBaseParticle(Particle.ETA_MESON), + Particle.getBaseParticle(Particle.PION), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.NEUTRON), + Particle.getBaseParticle(Particle.LAMBDA), + Particle.getBaseParticle(Particle.OMEGA), + Particle.getBaseParticle(Particle.HIGGS_BOSON)) + .outputChances(50, 50, 50, 40, 30, 20, 20, 10) + .fluidInputs(Materials.Americium.getPlasma(2500)) + .duration(16 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(cyclotronRecipes); + // Mixed Smash 1 + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(12)) + .itemOutputs( + Particle.getBaseParticle(Particle.GRAVITON), + Particle.getBaseParticle(Particle.ETA_MESON), + Particle.getBaseParticle(Particle.PION), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.NEUTRON), + Particle.getBaseParticle(Particle.LAMBDA), + Particle.getBaseParticle(Particle.OMEGA), + Particle.getBaseParticle(Particle.HIGGS_BOSON)) + .outputChances(5000, 200, 200, 100, 80, 60, 40, 30) + .fluidInputs(new FluidStack(MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 2500)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(cyclotronRecipes); + // Graviton Smash + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(15)) + .itemOutputs(Particle.getBaseParticle(Particle.GRAVITON), Particle.getBaseParticle(Particle.UNKNOWN)) + .outputChances(1000, 100) + .fluidInputs(FluidUtils.getFluidStack("plasma.hydrogen", 100)) + .duration(1 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(cyclotronRecipes); + + FluidStack aPlasma = Materials.Duranium.getMolten(40); + FluidStack aPlasma_NULL = Materials._NULL.getPlasma(1); + + if (aPlasma == null || aPlasma.isFluidEqual(aPlasma_NULL)) { + aPlasma = Materials.Americium.getMolten(20); + } + + // Quantum Anomaly + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(24), Particle.getBaseParticle(Particle.UNKNOWN)) + .itemOutputs(GregtechItemList.Laser_Lens_Special.get(1)) + .outputChances(100) + .fluidInputs(aPlasma) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(cyclotronRecipes); + + /* + * Ions + */ + + int IonCount = 2; + int tenCountA = 2; + int tenCountB = 0; + for (String y : IonParticles.MetaToNameMap.values()) { + if (y.toLowerCase() + .contains("hydrogen")) { + continue; + } + FluidStack aPlasma2 = FluidUtils.getFluidStack("plasma." + y.toLowerCase(), 2); + Materials aTestMat = MaterialUtils.getMaterial(y); + FluidStack aPlasma3 = aTestMat != null ? aTestMat.getPlasma(2) : aPlasma2; + + // Ionize Plasma + if ((aPlasma2 != null && !aPlasma2.isFluidEqual(aPlasma_NULL)) + || (aPlasma3 != null && !aPlasma3.isFluidEqual(aPlasma_NULL))) { + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1 + (tenCountA - 1))) + .itemOutputs( + Particle.getIon(y, 1), + Particle.getIon(y, 2), + Particle.getIon(y, 3), + Particle.getIon(y, -1), + Particle.getIon(y, -2), + Particle.getIon(y, -3), + Particle.getIon(y, 1), + Particle.getIon(y, 2), + Particle.getIon(y, -1)) + .outputChances(275, 250, 225, 275, 250, 225, 275, 250, 275) + .duration(20 * SECONDS * (IonCount++) * tenCountA) + .eut(TierEU.RECIPE_ZPM) + .addTo(cyclotronRecipes); + + } else { + Logger.INFO("Plasma for " + y + " does not exist, please report this to Alkalus."); + } + + if (tenCountB == 12) { + tenCountB = 0; + tenCountA++; + } else { + tenCountB++; + } + } + + // Generate Hydrogen Ion Recipe + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(24)) + .itemOutputs( + Particle.getIon("Hydrogen", 1), + Particle.getIon("Hydrogen", 2), + Particle.getIon("Hydrogen", 3), + Particle.getIon("Hydrogen", 1), + Particle.getIon("Hydrogen", 2), + Particle.getIon("Hydrogen", 3), + Particle.getIon("Hydrogen", -1), + Particle.getIon("Hydrogen", -2), + Particle.getIon("Hydrogen", -3)) + .outputChances(500, 500, 500, 500, 500, 500, 500, 500, 500) + .fluidInputs(FluidUtils.getWildcardFluidStack("hydrogen", 1000)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(cyclotronRecipes); + // Generate Hydrogen Plasma Recipe + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(21), Particle.getIon("Hydrogen", 0)) + .itemOutputs( + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.NEUTRON), + Particle.getBaseParticle(Particle.ELECTRON), + Particle.getBaseParticle(Particle.UNKNOWN), + Particle.getBaseParticle(Particle.UNKNOWN), + Particle.getBaseParticle(Particle.UNKNOWN)) + .outputChances(1250, 1250, 1250, 750, 750, 750) + .fluidInputs(FluidUtils.getFluidStack("hydrogen", 1000)) + .fluidOutputs(FluidUtils.getFluidStack("plasma.hydrogen", 100)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_LuV) + .addTo(cyclotronRecipes); + // Generate Protons Easily + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(20), Particle.getIon("Hydrogen", 0)) + .itemOutputs( + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON)) + .outputChances(750, 750, 750, 750, 750, 750, 750, 750, 750) + .fluidInputs(FluidUtils.getWildcardFluidStack("hydrogen", 100)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(cyclotronRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(22), Particle.getBaseParticle(Particle.UNKNOWN)) + .itemOutputs( + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.PROTON)) + .outputChances(375, 375, 375, 375, 375, 375, 375, 375, 375) + .fluidInputs(FluidUtils.getWildcardFluidStack("hydrogen", 100)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(cyclotronRecipes); + // Create Strange Dust + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsElements.getInstance().PLUTONIUM238.getDust(1), + Particle.getBaseParticle(Particle.UNKNOWN), + Particle.getBaseParticle(Particle.UNKNOWN), + Particle.getBaseParticle(Particle.UNKNOWN), + Particle.getBaseParticle(Particle.UNKNOWN), + Particle.getBaseParticle(Particle.UNKNOWN), + Particle.getBaseParticle(Particle.UNKNOWN), + Particle.getBaseParticle(Particle.UNKNOWN), + Particle.getBaseParticle(Particle.UNKNOWN)) + .itemOutputs(MaterialsOres.DEEP_EARTH_REACTOR_FUEL_DEPOSIT.getDust(1)) + .outputChances(2500) + .fluidInputs(FluidUtils.getFluidStack(FluidUtils.getWildcardFluidStack("ender", 1000), 1000)) + .duration(15 * MINUTES) + .eut(TierEU.RECIPE_ZPM) + .addTo(cyclotronRecipes); + + } +} diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesLaserEngraver.java b/src/main/java/gtPlusPlus/core/recipe/RecipesLaserEngraver.java new file mode 100644 index 0000000000..63c136c8f9 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesLaserEngraver.java @@ -0,0 +1,135 @@ +package gtPlusPlus.core.recipe; + +import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OreDictNames; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IOreRecipeRegistrator; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.everglades.dimension.DimensionEverglades; + +public class RecipesLaserEngraver implements IOreRecipeRegistrator { + + public RecipesLaserEngraver() { + OrePrefixes.crafting.add(this); + } + + @Override + public void registerOre(final OrePrefixes aPrefix, final Materials aMaterial, final String aOreDictName, + final String aModName, final ItemStack aStack) { + if (aOreDictName.equals(OreDictNames.craftingLensWhite.toString())) { + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Lithium, 2L), + GTUtility.copyAmount(0L, aStack)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("plateDoubleLithium7", 1)) + .duration(4 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(laserEngraverRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 3L), + GTUtility.copyAmount(0L, aStack)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithium7", 1)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(laserEngraverRecipes); + + } else if (aOreDictName.equals(OreDictNames.craftingLensLime.toString())) { + // Coil Wires + ItemStack coilWire1 = ItemUtils + .getItemStackWithMeta(true, "miscutils:itemDehydratorCoilWire", "coilWire1", 0, 1); + ItemStack coilWire2 = ItemUtils + .getItemStackWithMeta(true, "miscutils:itemDehydratorCoilWire:1", "coilWire2", 1, 1); + ItemStack coilWire3 = ItemUtils + .getItemStackWithMeta(true, "miscutils:itemDehydratorCoilWire:2", "coilWire3", 2, 1); + ItemStack coilWire4 = ItemUtils + .getItemStackWithMeta(true, "miscutils:itemDehydratorCoilWire:3", "coilWire4", 3, 1); + + // Simple Life + String wire = "wireGt02"; + + // Wires to Laser + ItemStack wireT1a = ItemUtils.getItemStackOfAmountFromOreDict(wire + "Aluminium", 1); + ItemStack wireT1b = ItemUtils.getItemStackOfAmountFromOreDict(wire + "Nichrome", 1); + ItemStack wireT2a = ItemUtils.getItemStackOfAmountFromOreDict(wire + "Osmium", 1); + ItemStack wireT2b = ItemUtils.getItemStackOfAmountFromOreDict(wire + "Platinum", 1); + ItemStack wireT3a = ItemUtils.getItemStackOfAmountFromOreDict(wire + "VanadiumGallium", 1); + ItemStack wireT3b = ItemUtils.getItemStackOfAmountFromOreDict(wire + "YttriumBariumCuprate", 1); + ItemStack wireT3c = ItemUtils.getItemStackOfAmountFromOreDict(wire + "NiobiumTitanium", 1); + ItemStack wireT4a = ItemUtils.getItemStackOfAmountFromOreDict(wire + "Naquadah", 1); + + // T1 + GTValues.RA.stdBuilder() + .itemInputs(wireT1a, GTUtility.copyAmount(0L, aStack)) + .itemOutputs(coilWire1) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(laserEngraverRecipes); + GTValues.RA.stdBuilder() + .itemInputs(wireT1b, GTUtility.copyAmount(0L, aStack)) + .itemOutputs(coilWire1) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(laserEngraverRecipes); + // T2 + GTValues.RA.stdBuilder() + .itemInputs(wireT2a, GTUtility.copyAmount(0L, aStack)) + .itemOutputs(coilWire2) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(laserEngraverRecipes); + GTValues.RA.stdBuilder() + .itemInputs(wireT2b, GTUtility.copyAmount(0L, aStack)) + .itemOutputs(coilWire2) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(laserEngraverRecipes); + // T3 + GTValues.RA.stdBuilder() + .itemInputs(wireT3a, GTUtility.copyAmount(0L, aStack)) + .itemOutputs(coilWire3) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(laserEngraverRecipes); + GTValues.RA.stdBuilder() + .itemInputs(wireT3b, GTUtility.copyAmount(0L, aStack)) + .itemOutputs(coilWire3) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(laserEngraverRecipes); + GTValues.RA.stdBuilder() + .itemInputs(wireT3c, GTUtility.copyAmount(0L, aStack)) + .itemOutputs(coilWire3) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(laserEngraverRecipes); + // T4 + GTValues.RA.stdBuilder() + .itemInputs(wireT4a, GTUtility.copyAmount(0L, aStack)) + .itemOutputs(coilWire4) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(laserEngraverRecipes); + + } else if (aOreDictName.equals(OreDictNames.craftingLensOrange.toString())) { + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(ModItems.itemAlkalusDisk), GTUtility.copyAmount(0L, aStack)) + .itemOutputs(ItemUtils.getSimpleStack(DimensionEverglades.portalItem)) + .duration(3 * HOURS) + .eut(TierEU.RECIPE_IV) + .addTo(laserEngraverRecipes); + } + } +} diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesMachineComponents.java b/src/main/java/gtPlusPlus/core/recipe/RecipesMachineComponents.java new file mode 100644 index 0000000000..516aecf93a --- /dev/null +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesMachineComponents.java @@ -0,0 +1,10 @@ +package gtPlusPlus.core.recipe; + +public class RecipesMachineComponents { + + // Fluid Pipe + public static String pipeTier7 = "pipeHugeSteel"; + public static String pipeTier8 = "pipeHugeStainlessSteel"; + public static String pipeTier9 = "pipeHugeTitanium"; + +} diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java b/src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java new file mode 100644 index 0000000000..2287d6cf4f --- /dev/null +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesMachines.java @@ -0,0 +1,3505 @@ +package gtPlusPlus.core.recipe; + +import static goodgenerator.loader.Loaders.supercriticalFluidTurbineCasing; +import static gregtech.api.enums.Mods.EternalSingularity; +import static gregtech.api.enums.Mods.Railcraft; +import static gregtech.api.enums.Mods.RemoteIO; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.cutterRecipes; +import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.AssemblyLine; +import static gregtech.api.util.GTRecipeConstants.CHEMPLANT_CASING_TIER; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; + +import java.util.List; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import com.google.common.collect.ImmutableList; + +import bartworks.system.material.WerkstoffLoader; +import goodgenerator.loader.Loaders; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.item.chemistry.AgriculturalChem; +import gtPlusPlus.core.item.crafting.ItemDummyResearch; +import gtPlusPlus.core.item.crafting.ItemDummyResearch.ASSEMBLY_LINE_RESEARCH; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.RecipeUtils; +import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; +import gtPlusPlus.everglades.dimension.DimensionEverglades; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import gtPlusPlus.xmod.gregtech.common.covers.CoverManager; +import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper; +import tectech.recipe.TTRecipeAdder; +import tectech.thing.CustomItemList; + +public class RecipesMachines { + + // Outputs + public static ItemStack RECIPE_Buffer_ULV = GregtechItemList.Energy_Buffer_1by1_ULV.get(1); + public static ItemStack RECIPE_Buffer_LV = GregtechItemList.Energy_Buffer_1by1_LV.get(1); + public static ItemStack RECIPE_Buffer_MV = GregtechItemList.Energy_Buffer_1by1_MV.get(1); + public static ItemStack RECIPE_Buffer_HV = GregtechItemList.Energy_Buffer_1by1_HV.get(1); + public static ItemStack RECIPE_Buffer_EV = GregtechItemList.Energy_Buffer_1by1_EV.get(1); + public static ItemStack RECIPE_Buffer_IV = GregtechItemList.Energy_Buffer_1by1_IV.get(1); + public static ItemStack RECIPE_Buffer_LuV = GregtechItemList.Energy_Buffer_1by1_LuV.get(1); + public static ItemStack RECIPE_Buffer_ZPM = GregtechItemList.Energy_Buffer_1by1_ZPM.get(1); + public static ItemStack RECIPE_Buffer_UV = GregtechItemList.Energy_Buffer_1by1_UV.get(1); + public static ItemStack RECIPE_Buffer_MAX = GregtechItemList.Energy_Buffer_1by1_MAX.get(1); + // Industrial Centrifuge + public static ItemStack RECIPE_IndustrialCentrifugeController; + public static ItemStack RECIPE_IndustrialCentrifugeCasing; + // Industrial Coke Oven + public static ItemStack RECIPE_IndustrialCokeOvenController; + public static ItemStack RECIPE_IndustrialCokeOvenFrame; + public static ItemStack RECIPE_IndustrialCokeOvenCasingA; + public static ItemStack RECIPE_IndustrialCokeOvenCasingB; + // Industrial Electrolyzer + public static ItemStack RECIPE_IndustrialElectrolyzerController; + public static ItemStack RECIPE_IndustrialElectrolyzerFrame; + // Industrial Material Press + public static ItemStack RECIPE_IndustrialMaterialPressController; + public static ItemStack RECIPE_IndustrialMaterialPressFrame; + // Industrial Maceration Stack + public static ItemStack RECIPE_IndustrialMacerationStackController; + public static ItemStack RECIPE_IndustrialMacerationStackFrame; + // Industrial Wire Factory + public static ItemStack RECIPE_IndustrialWireFactoryController; + public static ItemStack RECIPE_IndustrialWireFactoryFrame; + // Industrial Multi Tank + public static ItemStack RECIPE_IndustrialMultiTankController; + public static ItemStack RECIPE_IndustrialMultiTankFrame; + // Industrial Matter Fabricator + public static ItemStack RECIPE_IndustrialMatterFabController; + public static ItemStack RECIPE_IndustrialMatterFabFrame; + public static ItemStack RECIPE_IndustrialMatterFabCoil; + // Industrial Blast Smelter + public static ItemStack RECIPE_IndustrialBlastSmelterController; + public static ItemStack RECIPE_IndustrialBlastSmelterFrame; + public static ItemStack RECIPE_IndustrialBlastSmelterCoil; + // Industrial Sieve + public static ItemStack RECIPE_IndustrialSieveController; + public static ItemStack RECIPE_IndustrialSieveFrame; + public static ItemStack RECIPE_IndustrialSieveGrate; + // Industrial Tree Farmer + public static ItemStack RECIPE_TreeFarmController; + public static ItemStack RECIPE_TreeFarmFrame; + // Tesseracts + public static ItemStack RECIPE_TesseractGenerator; + public static ItemStack RECIPE_TesseractTerminal; + // Thermal Boiler + public static ItemStack RECIPE_ThermalBoilerController; + public static ItemStack RECIPE_ThermalBoilerCasing; + + // Thorium Reactor + public static ItemStack RECIPE_LFTRController; + public static ItemStack RECIPE_LFTROuterCasing; + public static ItemStack RECIPE_LFTRInnerCasing; + + // Nuclear Salt Processing Plant + public static ItemStack RECIPE_SaltPlantController; + + // Cyclotron + public static ItemStack RECIPE_CyclotronController; + public static ItemStack RECIPE_CyclotronOuterCasing; + public static ItemStack RECIPE_CyclotronInnerCoil; + + // Wire + public static String cableTier4 = "cableGt04Gold"; + public static String cableTier6 = "cableGt04Tungsten"; + + public static String pipeTier1 = "pipeHuge" + "Clay"; + public static String pipeTier2 = "pipeHuge" + "Potin"; + public static String pipeTier3 = "pipeHuge" + "Steel"; + public static String pipeTier4 = "pipeHuge" + "StainlessSteel"; + public static String pipeTier7 = "pipeHuge" + "Tantalloy60"; + + // EV/IV MACHINES + public static ItemStack IV_MACHINE_Electrolyzer; + public static ItemStack EV_MACHINE_Centrifuge; + public static ItemStack EV_MACHINE_BendingMachine; + public static ItemStack IV_MACHINE_Wiremill; + public static ItemStack EV_MACHINE_Macerator; + public static ItemStack IV_MACHINE_Macerator; + public static ItemStack IV_MACHINE_Cutter; + public static ItemStack IV_MACHINE_Extruder; + public static ItemStack HV_MACHINE_Sifter; + public static ItemStack EV_MACHINE_ThermalCentrifuge; + public static ItemStack EV_MACHINE_OreWasher; + public static ItemStack IV_MACHINE_AlloySmelter; + public static ItemStack IV_MACHINE_Mixer; + public static ItemStack EV_MACHINE_ChemicalBath; + + // Plates + public static String plateBronze = "plateBronze"; + public static String plateSteel = "plateSteel"; + + // Pipes + public static String pipeHugeStainlessSteel = "pipeHugeStainlessSteel"; + + // Lava Boiler + public static ItemStack boiler_Coal; + public static ItemStack IC2MFE; + public static ItemStack IC2MFSU; + + // Misc + public static ItemStack INPUT_RCCokeOvenBlock; + + public static final void loadRecipes() { + run(); + Logger.INFO("Loading Recipes for the Various machine blocks."); + } + + private static void run() { + + initModItems(); + tieredMachineHulls(); + energyCores(); + wirelessChargers(); + largeArcFurnace(); + industrialVacuumFurnace(); + fakeMachineCasingCovers(); + overflowValveCovers(); + superBuses(); + distillus(); + algaeFarm(); + chemPlant(); + zyngen(); + milling(); + sparging(); + chisels(); + rockBreaker(); + thermicFluidHeater(); + advHeatExchanger(); + chiselBuses(); + solidifierHatches(); + + gt4FarmManager(); + gt4Inventory(); + + multiForgeHammer(); + multiMolecularTransformer(); + multiXlTurbines(); + multiSolarTower(); + multiElementalDuplicator(); + + resonanceChambers(); + modulators(); + } + + private static void thermicFluidHeater() { + + RecipeUtils.addShapedGregtechRecipe( + CI.getPlate(5, 1), + CI.circuitTier5, + CI.getPlate(5, 1), + pipeTier7, + ItemList.Machine_IV_FluidHeater.get(1), + pipeTier7, + CI.getPlate(5, 1), + CI.circuitTier4, + CI.getPlate(5, 1), + GregtechItemList.Controller_IndustrialFluidHeater.get(1)); + } + + private static void advHeatExchanger() { + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + ItemList.Machine_Multi_HeatExchanger.get(1), + CI.getDoublePlate(6, 8), + CI.getScrew(6, 16), + CI.getCircuit(5, 8)) + .itemOutputs(GregtechItemList.XL_HeatExchanger.get(1)) + .fluidInputs(CI.tieredMaterials[5].getMolten(144 * 8)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + ItemList.Casing_StableTitanium.get(1), + CI.getPlate(5, 4), + CI.getScrew(5, 8)) + .itemOutputs(GregtechItemList.Casing_XL_HeatExchanger.get(1)) + .fluidInputs(CI.tieredMaterials[5].getMolten(144 * 2)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + } + + private static void gt4FarmManager() { + + ItemList[] aInputHatches = new ItemList[] { ItemList.Hatch_Input_LV, ItemList.Hatch_Input_MV, + ItemList.Hatch_Input_HV, ItemList.Hatch_Input_EV, ItemList.Hatch_Input_IV, ItemList.Hatch_Input_LuV, + ItemList.Hatch_Input_ZPM, ItemList.Hatch_Input_UV }; + GregtechItemList[] aOutputMachines = new GregtechItemList[] { GregtechItemList.GT4_Crop_Harvester_LV, + GregtechItemList.GT4_Crop_Harvester_MV, GregtechItemList.GT4_Crop_Harvester_HV, + GregtechItemList.GT4_Crop_Harvester_EV, GregtechItemList.GT4_Crop_Harvester_IV, + GregtechItemList.GT4_Crop_Harvester_LuV, GregtechItemList.GT4_Crop_Harvester_ZPM, + GregtechItemList.GT4_Crop_Harvester_UV }; + + int aTier = 1; + for (int i = 0; i < 8; i++) { + RecipeUtils.addShapedRecipe( + CI.getRobotArm(aTier, 1), + CI.getSensor(aTier, 1), + CI.getRobotArm(aTier, 1), + ItemUtils.getOrePrefixStack(OrePrefixes.toolHeadSense, CI.tieredMaterials[aTier], 1), + CI.getTieredMachineHull(aTier, 1), + ItemUtils.getOrePrefixStack(OrePrefixes.toolHeadSense, CI.tieredMaterials[aTier], 1), + CI.getTieredCircuitOreDictName(aTier), + aInputHatches[i].get(1), + CI.getTieredCircuitOreDictName(aTier), + aOutputMachines[i].get(1)); + aTier++; + } + } + + private static void gt4Inventory() { + + GregtechItemList[] aOutputElectricCraftingTable = new GregtechItemList[] { + GregtechItemList.GT4_Electric_Auto_Workbench_LV, GregtechItemList.GT4_Electric_Auto_Workbench_MV, + GregtechItemList.GT4_Electric_Auto_Workbench_HV, GregtechItemList.GT4_Electric_Auto_Workbench_EV, + GregtechItemList.GT4_Electric_Auto_Workbench_IV, GregtechItemList.GT4_Electric_Auto_Workbench_LuV, + GregtechItemList.GT4_Electric_Auto_Workbench_ZPM, GregtechItemList.GT4_Electric_Auto_Workbench_UV }; + + int aTier = 1; + for (int i = 0; i < 8; i++) { + RecipeUtils.addShapedRecipe( + ItemUtils.getOrePrefixStack(OrePrefixes.plate, CI.tieredMaterials[aTier], 1), + ItemUtils.getSimpleStack(Blocks.crafting_table), + ItemUtils.getOrePrefixStack(OrePrefixes.plate, CI.tieredMaterials[aTier], 1), + CI.getTieredCircuitOreDictName(aTier), + CI.getTieredMachineHull(aTier), + CI.getTieredCircuitOreDictName(aTier), + ItemUtils.getOrePrefixStack(OrePrefixes.plate, CI.tieredMaterials[aTier], 1), + CI.getRobotArm(aTier, 1), + ItemUtils.getOrePrefixStack(OrePrefixes.plate, CI.tieredMaterials[aTier], 1), + aOutputElectricCraftingTable[i].get(1)); + aTier++; + } + } + + private static void multiForgeHammer() { + + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(CI.machineHull_IV, 2), + ItemList.Machine_IV_Hammer.get(1), + CI.getPlate(4, 8), + CI.getBolt(5, 32), + MaterialsElements.getInstance().ZIRCONIUM.getFineWire(32), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 4L)) + .itemOutputs(GregtechItemList.Controller_IndustrialForgeHammer.get(1)) + .fluidInputs(CI.getTieredFluid(4, 144 * 12)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTModHandler.addCraftingRecipe( + GregtechItemList.Casing_IndustrialForgeHammer.get(1), + CI.bitsd, + new Object[] { "IBI", "HCH", "IHI", 'I', CI.getPlate(4, 1), 'B', MaterialsAlloy.BABBIT_ALLOY.getPlate(1), + 'C', ItemList.Casing_HeatProof.get(1), 'H', MaterialsAlloy.HASTELLOY_X.getRod(1) }); + } + + private static void multiMolecularTransformer() { + GTValues.RA.stdBuilder() + .itemInputs( + CI.getTieredGTPPMachineCasing(6, 1), + CI.getPlate(5, 16), + CI.getBolt(5, 32), + MaterialsAlloy.HG1223.getFineWire(64), + CI.getEmitter(4, 8), + ItemUtils.getItemStackOfAmountFromOreDict("circuitMaster", 10)) + .itemOutputs( + ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_11_MOLECULAR_TRANSFORMER, 1)) + .fluidInputs(CI.getTieredFluid(5, 144 * 16)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .metadata( + RESEARCH_ITEM, + ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_11_MOLECULAR_TRANSFORMER, 1)) + .metadata(RESEARCH_TIME, 30 * MINUTES) + .itemInputs( + MaterialsAlloy.HG1223.getFineWire(64), + MaterialsAlloy.HG1223.getFineWire(64), + ItemList.Electric_Motor_IV.get(16), + ItemList.Energy_LapotronicOrb.get(16), + CI.getTieredComponent(OrePrefixes.cableGt12, 6, 16), + CI.getTieredComponent(OrePrefixes.wireGt16, 5, 32), + MaterialsAlloy.ZERON_100.getFrameBox(4), + MaterialsAlloy.ZIRCONIUM_CARBIDE.getPlateDouble(32), + MaterialsAlloy.BABBIT_ALLOY.getPlate(64), + MaterialsAlloy.LEAGRISIUM.getGear(8), + new Object[] { CI.getTieredCircuitOreDictName(4), 64 }, + new Object[] { CI.getTieredCircuitOreDictName(5), 32 }, + new Object[] { CI.getTieredCircuitOreDictName(6), 16 }, + GregtechItemList.Laser_Lens_WoodsGlass.get(1)) + .fluidInputs( + MaterialsAlloy.NITINOL_60.getFluidStack(144 * 9 * (2)), + MaterialsAlloy.INCOLOY_MA956.getFluidStack(144 * 9 * (8)), + MaterialsAlloy.KANTHAL.getFluidStack(144 * 1 * (4))) + .itemOutputs(GregtechItemList.Controller_MolecularTransformer.get(1)) + .eut(TierEU.RECIPE_LuV) + .duration(10 * MINUTES) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(16), + CI.getPlate(6, 4), + CI.getScrew(6, 8), + MaterialsElements.getInstance().PALLADIUM.getFineWire(16), + CI.getSensor(5, 2), + ItemUtils.getItemStackOfAmountFromOreDict("circuitElite", 4)) + .itemOutputs(GregtechItemList.Casing_Molecular_Transformer_1.get(1)) + .fluidInputs(CI.getTieredFluid(5, 144 * 4)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(16), + CI.getPlate(5, 4), + CI.getScrew(5, 8), + ItemList.Casing_Coil_Nichrome.get(2), + CI.getFieldGenerator(3, 2), + ItemUtils.getItemStackOfAmountFromOreDict("circuitData", 8)) + .itemOutputs(GregtechItemList.Casing_Molecular_Transformer_2.get(1)) + .fluidInputs(CI.getTieredFluid(5, 144 * 4)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(16), + ItemUtils.getSimpleStack(Blocks.glowstone, 16), + CI.getGear(5, 8), + MaterialsElements.getInstance().TITANIUM.getWire04(4), + CI.getFieldGenerator(4, 2), + ItemUtils.getItemStackOfAmountFromOreDict("circuitData", 8)) + .itemOutputs(GregtechItemList.Casing_Molecular_Transformer_3.get(1)) + .fluidInputs(CI.getTieredFluid(5, 144 * 4)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + } + + private static void multiXlTurbines() { + + RecipeUtils.addShapedRecipe( + CI.getDoublePlate(4, 1), + CI.getElectricMotor(3, 1), + CI.getDoublePlate(4, 1), + ItemUtils.getItemStackOfAmountFromOreDict("cellLubricant", 1), + ItemList.Casing_Gearbox_Titanium.get(1), + ItemUtils.getItemStackOfAmountFromOreDict("cellLubricant", 1), + CI.getDoublePlate(4, 1), + CI.getElectricMotor(3, 1), + CI.getDoublePlate(4, 1), + GregtechItemList.Casing_Turbine_Shaft.get(1)); + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + ItemList.Casing_Turbine.get(1), + CI.getPlate(4, 4), + CI.getScrew(4, 8), + CI.getCircuit(4, 4), + CI.getGear(3, 8)) + .itemOutputs(GregtechItemList.Hatch_Turbine_Rotor.get(1)) + .fluidInputs(CI.tieredMaterials[3].getMolten(144 * 8)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Steam + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + ItemList.Casing_Turbine.get(1), + CI.getPlate(3, 4), + CI.getScrew(3, 8)) + .itemOutputs(GregtechItemList.Casing_Turbine_LP.get(1)) + .fluidInputs(CI.tieredMaterials[2].getMolten(144 * 2)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + ItemList.LargeSteamTurbine.get(1), + CI.getPlate(4, 8), + CI.getScrew(4, 16), + CI.getGear(4, 4), + CI.getCircuit(4, 8)) + .itemOutputs(GregtechItemList.Large_Steam_Turbine.get(1)) + .fluidInputs(CI.tieredMaterials[4].getMolten(144 * 8)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Gas + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + ItemList.Casing_Turbine1.get(1), + CI.getPlate(5, 4), + CI.getScrew(5, 8)) + .itemOutputs(GregtechItemList.Casing_Turbine_Gas.get(1)) + .fluidInputs(CI.tieredMaterials[4].getMolten(144 * 2)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + ItemList.LargeGasTurbine.get(1), + CI.getPlate(6, 8), + CI.getScrew(6, 16), + CI.getGear(6, 4), + CI.getCircuit(6, 8)) + .itemOutputs(GregtechItemList.Large_Gas_Turbine.get(1)) + .fluidInputs(CI.tieredMaterials[6].getMolten(144 * 8)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // HP Steam + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + ItemList.Casing_Turbine2.get(1), + CI.getPlate(4, 4), + CI.getScrew(4, 8)) + .itemOutputs(GregtechItemList.Casing_Turbine_HP.get(1)) + .fluidInputs(CI.tieredMaterials[3].getMolten(144 * 2)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + ItemList.LargeHPSteamTurbine.get(1), + CI.getPlate(5, 8), + CI.getScrew(5, 16), + CI.getGear(5, 4), + CI.getCircuit(5, 8)) + .itemOutputs(GregtechItemList.Large_HPSteam_Turbine.get(1)) + .fluidInputs(CI.tieredMaterials[5].getMolten(144 * 8)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Plasma + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + ItemList.Casing_Turbine3.get(1), + CI.getPlate(6, 4), + CI.getScrew(6, 8)) + .itemOutputs(GregtechItemList.Casing_Turbine_Plasma.get(1)) + .fluidInputs(CI.tieredMaterials[5].getMolten(144 * 2)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + ItemList.LargePlasmaTurbine.get(1), + CI.getPlate(7, 8), + CI.getScrew(7, 16), + CI.getGear(7, 4), + CI.getCircuit(7, 8)) + .itemOutputs(GregtechItemList.Large_Plasma_Turbine.get(1)) + .fluidInputs(CI.tieredMaterials[7].getMolten(144 * 8)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + new ItemStack(supercriticalFluidTurbineCasing, 1), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.plate), 4, 10101), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.screw), 8, 10101)) + .itemOutputs(GregtechItemList.Casing_Turbine_SC.get(1)) + .fluidInputs(FluidRegistry.getFluidStack("molten.adamantium alloy", 144 * 2)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(18), + GTUtility.copyAmount(1, Loaders.SCTurbine), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.plate), 8, 10104), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.screw), 16, 10104), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.gearGt), 4, 10104), + CI.getCircuit(7, 8)) + .itemOutputs(GregtechItemList.Large_SCSteam_Turbine.get(1)) + .fluidInputs(FluidRegistry.getFluidStack("molten.hikarium", 144 * 8)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + + } + + private static void multiSolarTower() { + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(17), + CI.getTieredGTPPMachineCasing(3, 4), + MaterialsAlloy.MARAGING250.getPlate(8), + MaterialsAlloy.MARAGING250.getBolt(8), + MaterialsAlloy.MARAGING250.getScrew(8), + CI.getCircuit(5, 8)) + .itemOutputs(GregtechItemList.Industrial_Solar_Tower.get(1)) + .fluidInputs(CI.getTieredFluid(3, 144 * 16)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(17), + MaterialsAlloy.MARAGING350.getFrameBox(1), + MaterialsAlloy.STAINLESS_STEEL.getPlate(4), + MaterialsAlloy.MARAGING350.getScrew(8)) + .itemOutputs(GregtechItemList.Casing_SolarTower_Structural.get(1)) + .fluidInputs(CI.getTieredFluid(3, 144 * 4)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(17), + MaterialsAlloy.MARAGING250.getFrameBox(1), + MaterialsAlloy.STAINLESS_STEEL.getPlate(4), + MaterialsAlloy.MARAGING250.getBolt(16), + MaterialsElements.getInstance().ALUMINIUM.getScrew(8)) + .itemOutputs(GregtechItemList.Casing_SolarTower_SaltContainment.get(1)) + .fluidInputs(CI.getTieredFluid(3, 144 * 4)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(17), + MaterialsAlloy.MARAGING250.getFrameBox(1), + MaterialsAlloy.STEEL_BLACK.getPlate(4), + MaterialsAlloy.MARAGING250.getScrew(8)) + .itemOutputs(GregtechItemList.Casing_SolarTower_HeatContainment.get(1)) + .fluidInputs(CI.getAlternativeTieredFluid(3, 144 * 4)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(17), + CI.getTieredGTPPMachineCasing(2, 1), + CI.getPlate(3, 2), + CI.getGear(3, 4), + CI.getElectricMotor(3, 2), + CI.getCircuit(3, 4)) + .itemOutputs(GregtechItemList.Solar_Tower_Reflector.get(1)) + .fluidInputs(CI.getTertiaryTieredFluid(3, 144 * 4)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + } + + private static void multiElementalDuplicator() { + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemList.Machine_IV_Replicator.get(1)) + .metadata(RESEARCH_TIME, 12 * HOURS) + .itemInputs( + CI.getTieredMachineHull(7, 4), + CI.getFieldGenerator(5, 16), + CI.getElectricMotor(7, 16), + CI.getElectricPiston(7, 4), + CI.getEnergyCore(6, 2), + CI.getPlate(7, 16), + CI.getScrew(7, 32), + CI.getBolt(6, 32), + CI.getTieredComponent(OrePrefixes.rod, 6, 10), + new Object[] { CI.getTieredCircuitOreDictName(7), 20 }, + ItemList.Tool_DataOrb.get(32), + GregtechItemList.Laser_Lens_Special.get(1)) + .fluidInputs( + CI.getTieredFluid(7, 144 * 32), + CI.getAlternativeTieredFluid(6, 144 * 16), + CI.getTertiaryTieredFluid(6, 144 * 16), + MaterialsAlloy.BABBIT_ALLOY.getFluidStack(128 * 144)) + .itemOutputs(GregtechItemList.Controller_ElementalDuplicator.get(1)) + .eut(TierEU.RECIPE_ZPM) + .duration(10 * MINUTES) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, GregtechItemList.Modulator_III.get(1)) + .metadata(RESEARCH_TIME, 4 * HOURS) + .itemInputs( + CI.getTieredGTPPMachineCasing(7, 2), + CI.getFieldGenerator(4, 4), + CI.getEnergyCore(4, 2), + CI.getPlate(7, 8), + CI.getScrew(6, 16), + CI.getBolt(6, 16), + CI.getTieredComponent(OrePrefixes.rod, 5, 16), + new Object[] { CI.getTieredCircuitOreDictName(6), 32 }, + ItemList.Tool_DataOrb.get(32)) + .fluidInputs( + CI.getTieredFluid(6, 144 * 16), + CI.getAlternativeTieredFluid(5, 144 * 8), + CI.getTertiaryTieredFluid(5, 144 * 8), + MaterialsAlloy.BABBIT_ALLOY.getFluidStack(64 * 144)) + .itemOutputs(GregtechItemList.Hatch_Input_Elemental_Duplicator.get(1)) + .eut(TierEU.RECIPE_LuV) + .duration(2 * HOURS) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, GregtechItemList.ResonanceChamber_III.get(1)) + .metadata(RESEARCH_TIME, 2 * HOURS) + .itemInputs( + CI.getTieredMachineHull(6, 5), + CI.getFieldGenerator(3, 16), + CI.getEnergyCore(2, 2), + CI.getPlate(7, 4), + CI.getScrew(7, 4), + CI.getBolt(6, 8), + CI.getTieredComponent(OrePrefixes.rod, 5, 4), + new Object[] { CI.getTieredCircuitOreDictName(5), 4 }, + ItemList.Tool_DataStick.get(4)) + .fluidInputs( + CI.getTieredFluid(5, 144 * 16), + CI.getAlternativeTieredFluid(4, 144 * 8), + CI.getTertiaryTieredFluid(4, 144 * 8), + MaterialsAlloy.BABBIT_ALLOY.getFluidStack(16 * 144)) + .itemOutputs(GregtechItemList.Casing_ElementalDuplicator.get(1)) + .eut(TierEU.RECIPE_LuV) + .duration(10 * MINUTES) + .addTo(AssemblyLine); + } + + private static void resonanceChambers() { + int aFieldTier = 1; + int aCasingTier = 4; + for (int i = 0; i < 4; i++) { + RecipeUtils.addShapedRecipe( + CI.getDoublePlate(aCasingTier, 1), + CI.getFieldGenerator(aFieldTier, 1), + CI.getDoublePlate(aCasingTier, 1), + CI.getFieldGenerator(aFieldTier, 1), + CI.getTieredMachineCasing(aCasingTier), + CI.getFieldGenerator(aFieldTier, 1), + CI.getDoublePlate(aCasingTier, 1), + CI.getFieldGenerator(aFieldTier, 1), + CI.getDoublePlate(aCasingTier, 1), + ItemUtils.simpleMetaStack(ModBlocks.blockSpecialMultiCasings2, i, 1)); + aCasingTier++; + aFieldTier++; + } + } + + private static void modulators() { + int aCasingTier = 4; + for (int i = 4; i < 8; i++) { + RecipeUtils.addShapedRecipe( + CI.getTieredCircuitOreDictName(aCasingTier), + CI.getPlate(aCasingTier, 1), + CI.getTieredCircuitOreDictName(aCasingTier), + CI.getPlate(aCasingTier, 1), + CI.getTieredMachineCasing(aCasingTier), + CI.getPlate(aCasingTier, 1), + CI.getTieredCircuitOreDictName(aCasingTier), + CI.getPlate(aCasingTier, 1), + CI.getTieredCircuitOreDictName(aCasingTier), + ItemUtils.simpleMetaStack(ModBlocks.blockSpecialMultiCasings2, i, 1)); + aCasingTier++; + } + } + + private static void zyngen() { + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(6), + CI.getTieredMachineHull(4), + ItemList.Machine_IV_AlloySmelter.get(1), + CI.getGear(3, 16), + CI.getBolt(3, 64), + CI.getPlate(4, 16)) + .itemOutputs(GregtechItemList.Industrial_AlloySmelter.get(1)) + .fluidInputs(CI.getAlternativeTieredFluid(4, 144 * 8)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + } + + private static void chemPlant() { + + GTModHandler.addCraftingRecipe( + GregtechItemList.Casing_Machine_Custom_1.get(2L), + CI.bits, + new Object[] { "PhP", "PFP", "PwP", 'P', OrePrefixes.plate.get(Materials.Bronze), 'F', + OrePrefixes.frameGt.get(Materials.Bronze) }); + + GTModHandler.addCraftingRecipe( + GregtechItemList.Casing_Machine_Custom_2.get(2L), + CI.bits, + new Object[] { "PPP", "hFw", "PPP", 'P', OrePrefixes.plate.get(Materials.Aluminium), 'F', + OrePrefixes.frameGt.get(Materials.Aluminium) }); + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(19), + CI.getTieredGTPPMachineCasing(2, 4), + CI.getTieredComponentOfMaterial(Materials.Aluminium, OrePrefixes.gearGt, 4), + CI.getTieredComponentOfMaterial(Materials.AnnealedCopper, OrePrefixes.plate, 16), + CI.getTieredComponentOfMaterial(Materials.Plastic, OrePrefixes.pipeLarge, 4), + CI.getTieredComponent(OrePrefixes.frameGt, 2, 4)) + .itemOutputs(GregtechItemList.ChemicalPlant_Controller.get(1)) + .fluidInputs(MaterialsAlloy.STEEL_BLACK.getFluidStack(2 * (144 * 4))) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(15), + CI.getTieredGTPPMachineCasing(1, 2), + ItemList.Hatch_Input_Bus_MV.get(1), + CI.getTieredComponentOfMaterial(Materials.Bronze, OrePrefixes.gearGt, 8), + CI.getTieredComponentOfMaterial(Materials.Lead, OrePrefixes.plate, 48), + CI.getTieredComponentOfMaterial(Materials.SolderingAlloy, OrePrefixes.wireFine, 16)) + .itemOutputs(GregtechItemList.Bus_Catalysts.get(1)) + .fluidInputs(MaterialsAlloy.BRONZE.getFluidStack(2 * (144 * 4))) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + } + + private static void algaeFarm() { + + // Give the bad algae a use. + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 32)) + .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 4)) + .duration(15 * SECONDS) + .eut(16) + .addTo(distilleryRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(21), + CI.getTieredGTPPMachineCasing(0, 4), + CI.getTieredComponentOfMaterial(Materials.Aluminium, OrePrefixes.rod, 12), + CI.getTieredComponentOfMaterial(Materials.Wood, OrePrefixes.plate, 32), + CI.getTieredComponentOfMaterial(Materials.Steel, OrePrefixes.bolt, 16), + CI.getTieredComponentOfMaterial(Materials.Redstone, OrePrefixes.dust, 32)) + .itemOutputs(GregtechItemList.AlgaeFarm_Controller.get(1)) + .fluidInputs(MaterialsAlloy.POTIN.getFluidStack(2 * (144 * 4))) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + } + + private static void distillus() { + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(19), + ItemList.Distillation_Tower.get(2), + GregtechItemList.GTPP_Casing_IV.get(16), + CI.getTieredComponent(OrePrefixes.circuit, 6, 8)) + .itemOutputs(GregtechItemList.Machine_Adv_DistillationTower.get(1)) + .fluidInputs( + MaterialsAlloy.AQUATIC_STEEL.getFluidStack(144 * 32), + MaterialsAlloy.BABBIT_ALLOY.getFluidStack(144 * 16), + MaterialsAlloy.BRONZE.getFluidStack(144 * 64), + MaterialsAlloy.KANTHAL.getFluidStack(144 * 16)) + .duration(10 * MINUTES) + .eut(TierEU.RECIPE_LuV) + .metadata(CHEMPLANT_CASING_TIER, 5) + .addTo(chemicalPlantRecipes); + } + + private static void overflowValveCovers() { + ItemStack aOutputs[] = new ItemStack[] { GregtechItemList.Cover_Overflow_LV.get(1L), + GregtechItemList.Cover_Overflow_MV.get(1L), GregtechItemList.Cover_Overflow_HV.get(1L), + GregtechItemList.Cover_Overflow_EV.get(1L), GregtechItemList.Cover_Overflow_IV.get(1L), }; + long[] voltageTiers = new long[] { TierEU.RECIPE_LV, TierEU.RECIPE_MV, TierEU.RECIPE_HV, TierEU.RECIPE_EV, + TierEU.RECIPE_IV }; + + for (int tier = 1; tier < aOutputs.length + 1; tier++) { + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(19), + CI.getElectricPump(tier, 2), + CI.getElectricMotor(tier, 2), + CI.getPlate(tier, 4)) + .itemOutputs(aOutputs[tier - 1].copy()) + .fluidInputs(Materials.SolderingAlloy.getMolten(tier * (144))) + .duration(20 * SECONDS) + .eut(voltageTiers[tier - 1]) + .addTo(assemblerRecipes); + + } + } + + private static void tieredMachineHulls() { + + GregtechItemList[] aHulls = new GregtechItemList[] { GregtechItemList.GTPP_Casing_ULV, + GregtechItemList.GTPP_Casing_LV, GregtechItemList.GTPP_Casing_MV, GregtechItemList.GTPP_Casing_HV, + GregtechItemList.GTPP_Casing_EV, GregtechItemList.GTPP_Casing_IV, GregtechItemList.GTPP_Casing_LuV, + GregtechItemList.GTPP_Casing_ZPM, GregtechItemList.GTPP_Casing_UV, GregtechItemList.GTPP_Casing_UHV }; + + long[] voltageTiers = new long[] { 16, TierEU.RECIPE_LV, TierEU.RECIPE_MV, TierEU.RECIPE_HV, TierEU.RECIPE_EV, + TierEU.RECIPE_IV, TierEU.RECIPE_LuV, TierEU.RECIPE_ZPM, TierEU.RECIPE_UV, TierEU.RECIPE_UHV }; + for (int i = 0; i < 10; i++) { + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(20), + CI.getTieredMachineCasing(i), + CI.getPlate(i, 8), + CI.getGear(i, 2), + CI.getTieredComponent(OrePrefixes.cableGt02, i, 4), + CI.getTieredComponent(OrePrefixes.circuit, i, 2)) + .itemOutputs(aHulls[i].get(1)) + .fluidInputs(CI.getAlternativeTieredFluid(i, 144 * (i + 1) * 2)) + .duration(20 * SECONDS) + .eut(voltageTiers[i]) + .addTo(assemblerRecipes); + + } + } + + private static void initModItems() { + IC2MFE = ItemUtils.getItemStackWithMeta(true, "IC2:blockElectric", "IC2_MFE", 1, 1); + IC2MFSU = ItemUtils.getItemStackWithMeta(true, "IC2:blockElectric", "IC2_MFSU", 2, 1); + + // Lava Boiler + boiler_Coal = ItemList.Machine_Bronze_Boiler.get(1); + + // IV/EV/HV MACHINES + IV_MACHINE_Electrolyzer = ItemList.Machine_IV_Electrolyzer.get(1); + EV_MACHINE_Centrifuge = ItemList.Machine_EV_Centrifuge.get(1); + EV_MACHINE_BendingMachine = ItemList.Machine_EV_Bender.get(1); + IV_MACHINE_Wiremill = ItemList.Machine_IV_Wiremill.get(1); + EV_MACHINE_Macerator = ItemList.Machine_EV_Macerator.get(1); + IV_MACHINE_Macerator = ItemList.Machine_IV_Macerator.get(1); + IV_MACHINE_Cutter = ItemList.Machine_IV_Cutter.get(1); + IV_MACHINE_Extruder = ItemList.Machine_IV_Extruder.get(1); + HV_MACHINE_Sifter = ItemList.Machine_HV_Sifter.get(1); + EV_MACHINE_ThermalCentrifuge = ItemList.Machine_EV_ThermalCentrifuge.get(1); + EV_MACHINE_OreWasher = ItemList.Machine_EV_OreWasher.get(1); + IV_MACHINE_AlloySmelter = ItemList.Machine_IV_AlloySmelter.get(1); + IV_MACHINE_Mixer = ItemList.Machine_IV_Mixer.get(1); + EV_MACHINE_ChemicalBath = ItemList.Machine_EV_ChemicalBath.get(1); + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialCokeOven) { + if (Railcraft.isModLoaded()) { + // Misc + INPUT_RCCokeOvenBlock = ItemUtils + .getItemStackWithMeta(Railcraft.isModLoaded(), "Railcraft:machine.alpha", "Coke_Oven_RC", 7, 1); + } + } + runModRecipes(); + } + + private static void runModRecipes() { + // Computer Cube + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(CI.getDataOrb(), 4 * (1)), + ItemList.Cover_Screen.get(4), + CI.machineHull_IV, + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(7), 2)) + .itemOutputs(GregtechItemList.Gregtech_Computer_Cube.get(1)) + .fluidInputs(MaterialsElements.getInstance().TANTALUM.getFluidStack(144 * 16)) + .duration(3 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Circuit programmer + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(CI.robotArm_LV, 4 * (1)), + ItemList.Cover_Controller.get(1, CI.electricMotor_MV), + CI.machineHull_MV, + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 2), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 2)) + .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockCircuitProgrammer)) + .fluidInputs(MaterialsElements.getInstance().IRON.getFluidStack(144 * 4)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + + // Lead Lined Chest + for (ItemStack plateRubber : OreDictionary.getOres("plateAnyRubber")) { + GTValues.RA.stdBuilder() + .itemInputs( + CI.machineHull_LV, + GTUtility.copyAmount(32, plateRubber), + ItemUtils.getItemStackOfAmountFromOreDict("plateDenseLead", 9), + ItemUtils.getSimpleStack(Blocks.chest)) + .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockDecayablesChest)) + .fluidInputs(MaterialsElements.getInstance().LEAD.getFluidStack(144 * 16)) + .duration(1 * MINUTES + 30 * SECONDS) + .eut(60) + .addTo(assemblerRecipes); + + } + + // RTG + GTValues.RA.stdBuilder() + .itemOutputs(GregtechItemList.RTG.get(1)) + .fluidInputs(MaterialsAlloy.NIOBIUM_CARBIDE.getFluidStack(144 * 16)) + .duration(10 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Super Jukebox + GTValues.RA.stdBuilder() + .itemInputs( + CI.machineHull_LV, + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 4), + ItemUtils.getItemStackOfAmountFromOreDict("plateTumbaga", 8), + ItemUtils.getSimpleStack(Blocks.jukebox)) + .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockCustomJukebox)) + .fluidInputs(MaterialsElements.getInstance().COPPER.getFluidStack(144 * 2)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + // Poo Collector + GTValues.RA.stdBuilder() + .itemInputs( + CI.machineHull_MV, + ItemList.FluidRegulator_MV.get(2), + CI.getTieredComponent(OrePrefixes.pipeMedium, 2, 2), + MaterialsAlloy.EGLIN_STEEL.getPlate(4), + MaterialsAlloy.POTIN.getScrew(6)) + .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockPooCollector)) + .fluidInputs(MaterialsAlloy.TUMBAGA.getFluidStack(144 * 4)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + // Adv. Poo Collector + GTValues.RA.stdBuilder() + .itemInputs( + CI.getTieredMachineHull(-1), + ItemUtils.getSimpleStack(ModBlocks.blockPooCollector), + ItemList.FluidRegulator_IV.get(2), + CI.getTieredComponent(OrePrefixes.pipeHuge, 6, 4), + CI.getTieredComponent(OrePrefixes.screw, 6, 16)) + .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockPooCollector, 8, 1)) + .fluidInputs(CI.getAlternativeTieredFluid(5, 144 * 9)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + ItemStack aBronzeBricks = ItemUtils.simpleMetaStack(GregTechAPI.sBlockCasings1, 10, 1); + // Steam Macerator Multi + RecipeUtils.addShapedGregtechRecipe( + aBronzeBricks, + "gemDiamond", + aBronzeBricks, + "craftingPiston", + MaterialsAlloy.TUMBAGA.getFrameBox(1), + "craftingPiston", + aBronzeBricks, + "gemDiamond", + aBronzeBricks, + GregtechItemList.Controller_SteamMaceratorMulti.get(1)); + + // Steam Washer Multi + RecipeUtils.addShapedGregtechRecipe( + aBronzeBricks, + "plateWroughtIron", + aBronzeBricks, + "rotorTin", + MaterialsAlloy.TUMBAGA.getFrameBox(1), + "rotorTin", + aBronzeBricks, + "plateWroughtIron", + aBronzeBricks, + GregtechItemList.Controller_SteamWasherMulti.get(1)); + + // Steam Mixer Multi + RecipeUtils.addShapedGregtechRecipe( + aBronzeBricks, + MaterialsAlloy.TUMBAGA.getRing(1), + aBronzeBricks, + MaterialsAlloy.TUMBAGA.getRotor(1), + MaterialsAlloy.TUMBAGA.getFrameBox(1), + MaterialsAlloy.TUMBAGA.getRotor(1), + aBronzeBricks, + MaterialsAlloy.TUMBAGA.getRing(1), + aBronzeBricks, + GregtechItemList.Controller_SteamMixerMulti.get(1)); + + ItemStack aWoodenCasing = ItemUtils.simpleMetaStack(GregTechAPI.sBlockCasings9, 2, 1); + // WaterPump + RecipeUtils.addShapedGregtechRecipe( + "frameGtBronze", + "frameGtBronze", + "frameGtBronze", + "frameGtBronze", + "gearBronze", + "frameGtBronze", + aWoodenCasing, + aWoodenCasing, + aWoodenCasing, + GregtechItemList.WaterPump.get(1)); + + // Steam Centrifuge Multi + RecipeUtils.addShapedGregtechRecipe( + aBronzeBricks, + "plateWroughtIron", + aBronzeBricks, + "gearBronze", + MaterialsAlloy.TUMBAGA.getFrameBox(1), + "gearBronze", + aBronzeBricks, + "plateWroughtIron", + aBronzeBricks, + GregtechItemList.Controller_SteamCentrifugeMulti.get(1)); + + // Steam Forge Hammer Multi + RecipeUtils.addShapedGregtechRecipe( + aBronzeBricks, + "plateWroughtIron", + aBronzeBricks, + "plateWroughtIron", + Blocks.anvil, + "plateWroughtIron", + aBronzeBricks, + MaterialsAlloy.TUMBAGA.getFrameBox(1), + aBronzeBricks, + GregtechItemList.Controller_SteamForgeHammerMulti.get(1)); + + // Steam Compressor Multi + RecipeUtils.addShapedGregtechRecipe( + aBronzeBricks, + "craftingPiston", + aBronzeBricks, + MaterialsAlloy.TUMBAGA.getGear(1), + MaterialsAlloy.TUMBAGA.getFrameBox(1), + MaterialsAlloy.TUMBAGA.getGear(1), + aBronzeBricks, + "craftingPiston", + aBronzeBricks, + GregtechItemList.Controller_SteamCompressorMulti.get(1)); + + // Steam Hatch + RecipeUtils.addShapedGregtechRecipe( + "plateBronze", + "pipeMediumBronze", + "plateBronze", + "plateBronze", + GregtechItemList.GTFluidTank_ULV.get(1), + "plateBronze", + "plateBronze", + "pipeMediumBronze", + "plateBronze", + GregtechItemList.Hatch_Input_Steam.get(1)); + + // Steam Input Bus + RecipeUtils.addShapedGregtechRecipe( + "plateBronze", + MaterialsAlloy.TUMBAGA.getPlate(1), + "plateBronze", + "plateTin", + ItemUtils.getSimpleStack(Blocks.hopper), + "plateTin", + "plateBronze", + MaterialsAlloy.TUMBAGA.getPlate(1), + "plateBronze", + GregtechItemList.Hatch_Input_Bus_Steam.get(1)); + + // Steam Output Bus + RecipeUtils.addShapedGregtechRecipe( + "plateBronze", + "plateTin", + "plateBronze", + MaterialsAlloy.TUMBAGA.getPlate(1), + ItemUtils.getSimpleStack(Blocks.hopper), + MaterialsAlloy.TUMBAGA.getPlate(1), + "plateBronze", + "plateTin", + "plateBronze", + GregtechItemList.Hatch_Output_Bus_Steam.get(1)); + + // Flask Configurator + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(8), + CI.getTieredMachineHull(2), + ItemUtils.getSimpleStack(ModBlocks.blockCircuitProgrammer), + VolumetricFlaskHelper.getVolumetricFlask(8), + CI.getTieredComponent(OrePrefixes.pipeSmall, 2, 2), + CI.getPlate(2, 4)) + .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockVolumetricFlaskSetter, 1)) + .fluidInputs(CI.getAlternativeTieredFluid(1, 144 * 8)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialCentrifuge) { + // Industrial Centrifuge + RECIPE_IndustrialCentrifugeController = GregtechItemList.Industrial_Centrifuge.get(1); + RECIPE_IndustrialCentrifugeCasing = GregtechItemList.Casing_Centrifuge1.get(1); + + // Industrial Centrifuge + RecipeUtils.addShapedGregtechRecipe( + CI.circuitTier4, + pipeHugeStainlessSteel, + CI.circuitTier4, + CI.component_Plate[6], + EV_MACHINE_Centrifuge, + CI.component_Plate[6], + CI.component_Plate[8], + CI.machineCasing_EV, + CI.component_Plate[8], + RECIPE_IndustrialCentrifugeController); + // Centrifuge Casing + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[6], + "stickTumbaga", + CI.component_Plate[6], + CI.component_Plate[8], + "stickTumbaga", + CI.component_Plate[8], + CI.component_Plate[6], + "stickTumbaga", + CI.component_Plate[6], + RECIPE_IndustrialCentrifugeCasing); + + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.MARAGING250.getPlate(4), + MaterialsAlloy.INCONEL_792.getPlate(2), + MaterialsAlloy.TUMBAGA.getRod(3), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RECIPE_IndustrialCentrifugeCasing) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialCokeOven) { + // Industrial Coke Oven + RECIPE_IndustrialCokeOvenController = GregtechItemList.Industrial_CokeOven.get(1); + RECIPE_IndustrialCokeOvenFrame = GregtechItemList.Casing_CokeOven.get(1); + RECIPE_IndustrialCokeOvenCasingA = GregtechItemList.Casing_CokeOven_Coil1.get(1); + RECIPE_IndustrialCokeOvenCasingB = GregtechItemList.Casing_CokeOven_Coil2.get(1); + + if (Railcraft.isModLoaded()) { + // Industrial Coke Oven + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[7], + CI.circuitTier4, + CI.component_Plate[7], + CI.machineCasing_EV, + INPUT_RCCokeOvenBlock, + CI.machineCasing_EV, + CI.component_Plate[7], + CI.circuitTier4, + CI.component_Plate[7], + RECIPE_IndustrialCokeOvenController); + } + // Coke Oven Frame Casing + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[7], + CI.component_Rod[7], + CI.component_Plate[7], + CI.component_Rod[7], + "frameGtTantalloy61", + CI.component_Rod[7], + CI.component_Plate[7], + CI.component_Rod[7], + CI.component_Plate[7], + RECIPE_IndustrialCokeOvenFrame); + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.TANTALLOY_61.getPlate(4), + MaterialsAlloy.TANTALLOY_61.getRod(4), + MaterialsAlloy.TANTALLOY_61.getFrameBox(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RECIPE_IndustrialCokeOvenFrame) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + // Coke Oven Coil 1 + RecipeUtils.addShapedGregtechRecipe( + plateBronze, + plateBronze, + plateBronze, + "frameGtBronze", + CI.gearboxCasing_Tier_1, + "frameGtBronze", + plateBronze, + plateBronze, + plateBronze, + RECIPE_IndustrialCokeOvenCasingA); + // Coke Oven Coil 2 + RecipeUtils.addShapedGregtechRecipe( + plateSteel, + plateSteel, + plateSteel, + "frameGtSteel", + CI.gearboxCasing_Tier_2, + "frameGtSteel", + plateSteel, + plateSteel, + plateSteel, + RECIPE_IndustrialCokeOvenCasingB); + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialElectrolyzer) { + // Industrial Electrolyzer + RECIPE_IndustrialElectrolyzerController = GregtechItemList.Industrial_Electrolyzer.get(1); + RECIPE_IndustrialElectrolyzerFrame = GregtechItemList.Casing_Electrolyzer.get(1); + + // Electrolyzer Frame Casing + RecipeUtils.addShapedGregtechRecipe( + "platePotin", + "stickLongChrome", + "platePotin", + "stickLongPotin", + "frameGtPotin", + "stickLongPotin", + "platePotin", + "stickLongPotin", + "platePotin", + RECIPE_IndustrialElectrolyzerFrame); + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.POTIN.getPlate(4), + MaterialsAlloy.POTIN.getLongRod(3), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Chrome, 1), + MaterialsAlloy.POTIN.getFrameBox(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RECIPE_IndustrialElectrolyzerFrame) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + // Industrial Electrolyzer + RecipeUtils.addShapedGregtechRecipe( + "plateStellite", + CI.circuitTier5, + "plateStellite", + CI.machineCasing_IV, + IV_MACHINE_Electrolyzer, + CI.machineCasing_IV, + "plateStellite", + "rotorStellite", + "plateStellite", + RECIPE_IndustrialElectrolyzerController); + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialPlatePress) { + // Industrial Material Press + RECIPE_IndustrialMaterialPressController = GregtechItemList.Industrial_PlatePress.get(1); + RECIPE_IndustrialMaterialPressFrame = GregtechItemList.Casing_MaterialPress.get(1); + + // Material Press Frame Casing + RecipeUtils.addShapedGregtechRecipe( + "plateTitanium", + "stickLongTumbaga", + "plateTitanium", + "stickTantalloy60", + "frameGtTumbaga", + "stickTantalloy60", + "plateTitanium", + "stickLongTumbaga", + "plateTitanium", + RECIPE_IndustrialMaterialPressFrame); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 4), + MaterialsAlloy.TANTALLOY_60.getRod(2), + MaterialsAlloy.TUMBAGA.getLongRod(2), + MaterialsAlloy.TUMBAGA.getFrameBox(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RECIPE_IndustrialMaterialPressFrame) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + // Industrial Material Press + RecipeUtils.addShapedGregtechRecipe( + "plateTitanium", + CI.circuitTier4, + "plateTitanium", + CI.machineCasing_EV, + EV_MACHINE_BendingMachine, + CI.machineCasing_EV, + "plateTitanium", + CI.circuitTier4, + "plateTitanium", + RECIPE_IndustrialMaterialPressController); + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialMacerationStack) { + // Industrial Maceration Stack + RECIPE_IndustrialMacerationStackController = GregtechItemList.Industrial_MacerationStack.get(1); + RECIPE_IndustrialMacerationStackFrame = GregtechItemList.Casing_MacerationStack.get(1); + + // Maceration Frame Casing + RecipeUtils.addShapedGregtechRecipe( + "platePalladium", + "platePalladium", + "platePalladium", + "stickPlatinum", + "frameGtInconel625", + "stickPlatinum", + "platePalladium", + "stickLongPalladium", + "platePalladium", + RECIPE_IndustrialMacerationStackFrame); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Palladium, 5), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.Platinum, 2), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Palladium, 1), + MaterialsAlloy.INCONEL_625.getFrameBox(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RECIPE_IndustrialMacerationStackFrame) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + // Industrial Maceration stack + RecipeUtils.addShapedGregtechRecipe( + "plateTitanium", + EV_MACHINE_Macerator, + "plateTitanium", + EV_MACHINE_Macerator, + CI.circuitTier4, + EV_MACHINE_Macerator, + "plateTitanium", + EV_MACHINE_Macerator, + "plateTitanium", + RECIPE_IndustrialMacerationStackController); + // T2-Upgrade Card + RecipeUtils.addShapedGregtechRecipe( + "plateTungstenCarbide", + IV_MACHINE_Macerator, + "plateTungstenCarbide", + IV_MACHINE_Macerator, + CI.circuitTier7, + IV_MACHINE_Macerator, + "plateTungstenCarbide", + IV_MACHINE_Macerator, + "plateTungstenCarbide", + GregtechItemList.Maceration_Upgrade_Chip.get(1)); + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialWireMill) { + // Industrial Wire Factory + RECIPE_IndustrialWireFactoryController = GregtechItemList.Industrial_WireFactory.get(1); + RECIPE_IndustrialWireFactoryFrame = GregtechItemList.Casing_WireFactory.get(1); + + // Wire Factory Frame Casing + RecipeUtils.addShapedGregtechRecipe( + "plateBlueSteel", + "stickBlueSteel", + "plateBlueSteel", + "stickBlueSteel", + "frameGtBlueSteel", + "stickBlueSteel", + "plateBlueSteel", + "stickBlueSteel", + "plateBlueSteel", + RECIPE_IndustrialWireFactoryFrame); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.plate, Materials.BlueSteel, 4), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.BlueSteel, 4), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlueSteel, 1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RECIPE_IndustrialWireFactoryFrame) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + // Industrial Wire Factory + RecipeUtils.addShapedGregtechRecipe( + "plateZeron100", + CI.machineCasing_IV, + "plateZeron100", + CI.circuitTier5, + IV_MACHINE_Wiremill, + CI.circuitTier5, + "plateZeron100", + CI.machineCasing_IV, + "plateZeron100", + RECIPE_IndustrialWireFactoryController); + } + + // Tiered Tanks + if (GTPPCore.ConfigSwitches.enableMachine_FluidTanks) { + CI.component_Plate[1] = "plateTin"; + pipeTier1 = "pipeLargeClay"; + CI.circuitTier1 = ItemList.Circuit_Primitive.get(1); + CI.component_Plate[2] = "plateCopper"; + pipeTier2 = "pipeHugeClay"; + CI.component_Plate[3] = "plateBronze"; + pipeTier3 = "pipeMediumBronze"; + CI.component_Plate[4] = "plateIron"; + pipeTier4 = "pipeMediumSteel"; + CI.component_Plate[5] = "plateSteel"; + CI.component_Plate[6] = "plateRedstone"; + CI.component_Plate[7] = "plateAluminium"; + CI.component_Plate[8] = "plateDarkSteel"; + ItemStack waterBucket = ItemUtils.getSimpleStack(Items.water_bucket); + + // Allows clearing stored fluids. + GregtechItemList[] aTanks = new GregtechItemList[] { GregtechItemList.GTFluidTank_ULV, + GregtechItemList.GTFluidTank_LV, GregtechItemList.GTFluidTank_MV, GregtechItemList.GTFluidTank_HV }; + for (GregtechItemList aTank : aTanks) { + RecipeUtils.addShapelessGregtechRecipe(new Object[] { aTank.get(1) }, aTank.get(1)); + } + + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[1], + CI.component_Plate[5], + CI.component_Plate[1], + CI.component_Plate[4], + pipeTier1, + CI.component_Plate[4], + CI.component_Plate[4], + waterBucket, + CI.component_Plate[4], + GregtechItemList.GTFluidTank_ULV.get(1)); + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[5], + CI.component_Plate[4], + CI.component_Plate[5], + CI.component_Plate[3], + pipeTier2, + CI.component_Plate[3], + CI.component_Plate[3], + CI.electricPump_LV, + CI.component_Plate[3], + GregtechItemList.GTFluidTank_LV.get(1)); + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[8], + CI.component_Plate[3], + CI.component_Plate[8], + CI.component_Plate[5], + pipeTier3, + CI.component_Plate[5], + CI.component_Plate[5], + CI.electricPump_LV, + CI.component_Plate[5], + GregtechItemList.GTFluidTank_MV.get(1)); + RecipeUtils.addShapedGregtechRecipe( + CI.circuitTier1, + CI.component_Plate[7], + CI.circuitTier1, + CI.component_Plate[8], + pipeTier4, + CI.component_Plate[8], + CI.circuitTier1, + CI.electricPump_MV, + CI.circuitTier1, + GregtechItemList.GTFluidTank_HV.get(1)); + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_MultiTank) { + // Industrial Multi Tank + // RECIPE_IndustrialMultiTankController = GregtechItemList.Industrial_MultiTank.get(1); + RECIPE_IndustrialMultiTankFrame = GregtechItemList.Casing_MultitankExterior.get(1); + + // Industrial Multi Tank Casing + RecipeUtils.addShapedGregtechRecipe( + "stickGrisium", + "plateGrisium", + "stickGrisium", + "plateGrisium", + "frameGtGrisium", + "plateGrisium", + "plateGrisium", + "plateGrisium", + "plateGrisium", + RECIPE_IndustrialMultiTankFrame); + // Industrial Multi Tank + RecipeUtils.addShapedGregtechRecipe( + "pipeHugeTantalloy60", + "gearGrisium", + "pipeHugeTantalloy60", + CI.circuitTier4, + RECIPE_IndustrialMultiTankFrame, + CI.circuitTier4, + "plateDoubleGrisium", + "rotorGrisium", + "plateDoubleGrisium", + RECIPE_IndustrialMultiTankController); + } + // TODO + + // Semi-Fluid Generators + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(14), + CI.getTieredMachineHull(1, 1), + CI.getElectricMotor(1, 2), + CI.getElectricPiston(1, 2), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Cobalt, 1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 1L), + CI.getGear(1, 2)) + .itemOutputs(GregtechItemList.Generator_SemiFluid_LV.get(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(14), + CI.getTieredMachineHull(2, 1), + CI.getElectricMotor(2, 2), + CI.getElectricPiston(2, 2), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.AnnealedCopper, 1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.MV, 1L), + CI.getGear(2, 2)) + .itemOutputs(GregtechItemList.Generator_SemiFluid_MV.get(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(14), + CI.getTieredMachineHull(3, 1), + CI.getElectricMotor(3, 2), + CI.getElectricPiston(3, 2), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 1L), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Chrome, 2)) + .itemOutputs(GregtechItemList.Generator_SemiFluid_HV.get(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(14), + CI.getTieredMachineHull(4, 1), + CI.getElectricMotor(4, 2), + CI.getElectricPiston(4, 2), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Titanium, 1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 1L), + CI.getGear(4, 2)) + .itemOutputs(GregtechItemList.Generator_SemiFluid_EV.get(1)) + .fluidInputs(Materials.Plastic.getMolten(144)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(14), + CI.getTieredMachineHull(5, 1), + CI.getElectricMotor(5, 2), + CI.getElectricPiston(5, 2), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 1L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 1L), + CI.getGear(5, 2)) + .itemOutputs(GregtechItemList.Generator_SemiFluid_IV.get(1)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(144)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + GTModHandler.addCraftingRecipe( + GregtechItemList.Generator_SemiFluid_LV.get(1L), + CI.bits, + new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_LV, 'P', ItemList.Electric_Piston_LV, 'E', + ItemList.Electric_Motor_LV, 'C', OrePrefixes.circuit.get(Materials.LV), 'W', + OrePrefixes.cableGt01.get(Materials.Cobalt), 'G', MaterialsAlloy.TUMBAGA.getGear(2) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Generator_SemiFluid_MV.get(1L), + CI.bits, + new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_MV, 'P', ItemList.Electric_Piston_MV, 'E', + ItemList.Electric_Motor_MV, 'C', OrePrefixes.circuit.get(Materials.MV), 'W', + OrePrefixes.cableGt01.get(Materials.AnnealedCopper), 'G', MaterialsAlloy.EGLIN_STEEL.getGear(2) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Generator_SemiFluid_HV.get(1L), + CI.bits, + new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_HV, 'P', ItemList.Electric_Piston_HV, 'E', + ItemList.Electric_Motor_HV, 'C', OrePrefixes.circuit.get(Materials.HV), 'W', + OrePrefixes.cableGt01.get(Materials.Gold), 'G', + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Chrome, 1) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Generator_SemiFluid_EV.get(1L), + CI.bits, + new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_EV, 'P', ItemList.Electric_Piston_EV, 'E', + ItemList.Electric_Motor_EV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', + OrePrefixes.cableGt01.get(Materials.Titanium), 'G', MaterialsAlloy.INCOLOY_DS.getGear(1) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Generator_SemiFluid_IV.get(1L), + CI.bits, + new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_IV, 'P', ItemList.Electric_Piston_IV, 'E', + ItemList.Electric_Motor_IV, 'C', OrePrefixes.circuit.get(Materials.IV), 'W', + OrePrefixes.cableGt01.get(Materials.Tungsten), 'G', MaterialsAlloy.NITINOL_60.getGear(1) }); + + if (GTPPCore.ConfigSwitches.enableMultiblock_AlloyBlastSmelter) { + // Industrial Blast Smelter + RECIPE_IndustrialBlastSmelterController = GregtechItemList.Industrial_AlloyBlastSmelter.get(1); + RECIPE_IndustrialBlastSmelterFrame = GregtechItemList.Casing_BlastSmelter.get(1); + RECIPE_IndustrialBlastSmelterCoil = GregtechItemList.Casing_Coil_BlastSmelter.get(1); + + // Blast Smelter + RecipeUtils.addShapedGregtechRecipe( + "plateZirconiumCarbide", + CI.circuitTier5, + "plateZirconiumCarbide", + cableTier6, + IV_MACHINE_AlloySmelter, + cableTier6, + "plateZirconiumCarbide", + CI.circuitTier5, + "plateZirconiumCarbide", + RECIPE_IndustrialBlastSmelterController); + // Blast Smelter Frame Casing + RecipeUtils.addShapedGregtechRecipe( + "plateZirconiumCarbide", + CI.craftingToolHammer_Hard, + "plateZirconiumCarbide", + "plateZirconiumCarbide", + "frameGtZirconiumCarbide", + "plateZirconiumCarbide", + "plateZirconiumCarbide", + CI.craftingToolWrench, + "plateZirconiumCarbide", + RECIPE_IndustrialBlastSmelterFrame); + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.ZIRCONIUM_CARBIDE.getPlate(6), + MaterialsAlloy.ZIRCONIUM_CARBIDE.getFrameBox(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RECIPE_IndustrialBlastSmelterFrame) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + // Blast Smelter Coil + RecipeUtils.addShapedGregtechRecipe( + "plateStaballoy", + "plateStaballoy", + "plateStaballoy", + "frameGtStaballoy", + CI.gearboxCasing_Tier_3, + "frameGtStaballoy", + "plateStaballoy", + "plateStaballoy", + "plateStaballoy", + RECIPE_IndustrialBlastSmelterCoil); + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.STABALLOY.getPlate(6), + MaterialsAlloy.STABALLOY.getFrameBox(2), + CI.gearboxCasing_Tier_3, + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RECIPE_IndustrialBlastSmelterCoil) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + } + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_Coil_Infinity.get(1), + ItemList.Reactor_Coolant_Sp_6.get(4), + MaterialsAlloy.LAURENIUM.getPlateDouble(2), + CustomItemList.eM_Coil.get(1)) + .itemOutputs(GregtechItemList.Casing_Coil_QuantumForceTransformer.get(1)) + .fluidInputs(MaterialsAlloy.QUANTUM.getFluidStack(144 * 4)) + .duration(1 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.Casing_Coil_QuantumForceTransformer.get(1), + 2048 * 120 * 20, + 2048, + (int) GTValues.VP[11], + 16, + new Object[] { GregtechItemList.Controller_MolecularTransformer.get(1), + GTModHandler.getModItem(EternalSingularity.ID, "eternal_singularity", 1), + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 8 }, ItemList.Electric_Pump_UEV.get(4), + ItemList.Field_Generator_UEV.get(4), GregtechItemList.Laser_Lens_Special.get(1) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(144 * 10), + MaterialsAlloy.PIKYONIUM.getFluidStack(144 * 32) }, + GregtechItemList.QuantumForceTransformer.get(1), + 1200 * 20, + (int) GTValues.VP[11]); + + if (GTPPCore.ConfigSwitches.enableMultiblock_MatterFabricator) { + // Industrial Matter Fabricator + RECIPE_IndustrialMatterFabController = GregtechItemList.Industrial_MassFab.get(1); + RECIPE_IndustrialMatterFabFrame = GregtechItemList.Casing_MatterFab.get(1); + RECIPE_IndustrialMatterFabCoil = GregtechItemList.Casing_MatterGen.get(1); + + // Matter Fabricator CPU + RecipeUtils.addShapedGregtechRecipe( + CI.getPlate(8, 1), + CI.circuitTier8, + CI.getPlate(8, 1), + GTOreDictUnificator.get(OrePrefixes.cableGt04.get(Materials.NaquadahAlloy), 1L), + CI.machineCasing_UV, + GTOreDictUnificator.get(OrePrefixes.cableGt04.get(Materials.NaquadahAlloy), 1L), + CI.getPlate(8, 1), + CI.circuitTier8, + CI.getPlate(8, 1), + RECIPE_IndustrialMatterFabController); + // Matter Fabricator Frame Casing + RecipeUtils.addShapedGregtechRecipe( + "plateNiobiumCarbide", + CI.component_Rod[8], + "plateNiobiumCarbide", + CI.component_Rod[8], + "frameGtInconel690", + CI.component_Rod[8], + "plateNiobiumCarbide", + CI.component_Rod[8], + "plateNiobiumCarbide", + RECIPE_IndustrialMatterFabFrame); + GTValues.RA.stdBuilder() + .itemOutputs(RECIPE_IndustrialMatterFabFrame) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + // Matter Fabricator Coil + RecipeUtils.addShapedGregtechRecipe( + CI.getPlate(6, 1), + CI.getPlate(7, 1), + CI.getPlate(6, 1), + "frameGtStellite", + CI.machineCasing_UV, + "frameGtStellite", + CI.getPlate(6, 1), + CI.getPlate(7, 1), + CI.getPlate(6, 1), + RECIPE_IndustrialMatterFabCoil); + GTValues.RA.stdBuilder() + .itemInputs( + CI.machineCasing_UV, + MaterialsAlloy.ZERON_100.getPlate(4), + MaterialsAlloy.PIKYONIUM.getPlate(2), + MaterialsAlloy.STELLITE.getFrameBox(2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RECIPE_IndustrialMatterFabCoil) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialSifter) { + // Industrial Sieve + RECIPE_IndustrialSieveController = GregtechItemList.Industrial_Sifter.get(1); + RECIPE_IndustrialSieveFrame = GregtechItemList.Casing_Sifter.get(1); + RECIPE_IndustrialSieveGrate = GregtechItemList.Casing_SifterGrate.get(1); + + // Industrial Sieve + RecipeUtils.addShapedGregtechRecipe( + "plateEglinSteel", + CI.circuitTier3, + "plateEglinSteel", + cableTier4, + HV_MACHINE_Sifter, + cableTier4, + "plateEglinSteel", + CI.circuitTier3, + "plateEglinSteel", + RECIPE_IndustrialSieveController); + // Industrial Sieve Casing + RecipeUtils.addShapedGregtechRecipe( + "plateEglinSteel", + "plateEglinSteel", + "plateEglinSteel", + "plateEglinSteel", + "frameGtTumbaga", + "plateEglinSteel", + "plateEglinSteel", + "plateEglinSteel", + "plateEglinSteel", + RECIPE_IndustrialSieveFrame); + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.EGLIN_STEEL.getPlate(8), + MaterialsAlloy.TUMBAGA.getFrameBox(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RECIPE_IndustrialSieveFrame) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + // Industrial Sieve Grate + RecipeUtils.addShapedGregtechRecipe( + "frameGtEglinSteel", + "wireFineSteel", + "frameGtEglinSteel", + "wireFineSteel", + "wireFineSteel", + "wireFineSteel", + "frameGtEglinSteel", + "wireFineSteel", + "frameGtEglinSteel", + RECIPE_IndustrialSieveGrate); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Steel, 5), + MaterialsAlloy.EGLIN_STEEL.getFrameBox(4), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(RECIPE_IndustrialSieveGrate) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_TreeFarmer) { + // Industrial Tree Farmer + RECIPE_TreeFarmController = GregtechItemList.Industrial_TreeFarm.get(1); + RECIPE_TreeFarmFrame = GregtechItemList.Casing_PLACEHOLDER_TreeFarmer.get(1); + // Industrial Tree Farm Controller + RecipeUtils.addShapedGregtechRecipe( + ItemList.Field_Generator_IV.get(1), + MaterialsAlloy.INCOLOY_MA956.getRotor(1), + ItemList.Field_Generator_IV.get(1), + MaterialsAlloy.NITINOL_60.getPlate(1), + GregtechItemList.GTPP_Casing_IV.get(1), + MaterialsAlloy.NITINOL_60.getPlate(1), + ItemList.Field_Generator_IV.get(1), + MaterialsAlloy.INCONEL_792.getComponentByPrefix(OrePrefixes.pipeMedium, 1), + ItemList.Field_Generator_IV.get(1), + RECIPE_TreeFarmController); + // Industrial Tree Farm Frame + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(2), + MaterialsAlloy.TUMBAGA.getFrameBox(1), + ItemUtils.getItemStackOfAmountFromOreDict("pipeTinySteel", 1), + ItemList.MV_Coil.get(1), + ItemList.IC2_Plantball.get(4), + GTOreDictUnificator.get(OrePrefixes.plank, Materials.Wood, 8)) + .itemOutputs(RECIPE_TreeFarmFrame) + .fluidInputs(GTModHandler.getDistilledWater(2000)) + .duration(10 * SECONDS) + .eut(64) + .addTo(assemblerRecipes); + + } + + if (GTPPCore.ConfigSwitches.enableMachine_Tesseracts) { + // Tesseracts + RECIPE_TesseractGenerator = GregtechItemList.GT4_Tesseract_Generator.get(1); + RECIPE_TesseractTerminal = GregtechItemList.GT4_Tesseract_Terminal.get(1); + // Tesseract Generator + RecipeUtils.addShapedGregtechRecipe( + "plateTitanium", + "circuitMaster", + "plateTitanium", + "circuitMaster", + ItemUtils.getSimpleStack(Blocks.ender_chest), + "circuitMaster", + "plateTitanium", + GregtechItemList.Gregtech_Computer_Cube.get(1), + "plateTitanium", + RECIPE_TesseractGenerator); + // Tesseract Terminal + RecipeUtils.addShapedGregtechRecipe( + "plateTitanium", + "circuitElite", + "plateTitanium", + "circuitElite", + ItemUtils.getSimpleStack(Blocks.ender_chest), + "circuitElite", + "plateTitanium", + CI.machineHull_EV, + "plateTitanium", + RECIPE_TesseractTerminal); + } + + if (GTPPCore.ConfigSwitches.enableMachine_SimpleWasher) { + final List washers = ImmutableList.of( + GregtechItemList.SimpleDustWasher_LV.get(1), + GregtechItemList.SimpleDustWasher_MV.get(1), + GregtechItemList.SimpleDustWasher_HV.get(1), + GregtechItemList.SimpleDustWasher_EV.get(1), + GregtechItemList.SimpleDustWasher_IV.get(1), + GregtechItemList.SimpleDustWasher_LuV.get(1), + GregtechItemList.SimpleDustWasher_ZPM.get(1), + GregtechItemList.SimpleDustWasher_UV.get(1)); + + for (int i = 0; i < washers.size(); i++) { + final int tier = i + 1; + GTValues.RA.stdBuilder() + .itemInputs( + CI.getTieredMachineHull(tier), + CI.getTieredComponent(OrePrefixes.screw, tier, tier * 4), + CI.getTieredComponent(OrePrefixes.plate, tier - 1, tier * 2), + CI.getTieredComponent(OrePrefixes.rod, tier, tier), + CI.getTieredComponent(OrePrefixes.circuit, tier, 1)) + .itemOutputs(washers.get(i)) + .fluidInputs(CI.getTieredFluid(tier, 144 * tier)) + .duration(20 * 5 * tier) + .eut(GTValues.VP[tier]) + .addTo(assemblerRecipes); + + } + } + + if (GTPPCore.ConfigSwitches.enableMachine_Pollution && PollutionUtils.isPollutionEnabled()) { + + RecipeUtils.addShapedGregtechRecipe( + "plateCarbon", + "plateCarbon", + "plateCarbon", + "dustCarbon", + "dustCarbon", + "dustCarbon", + "plateCarbon", + "plateCarbon", + "plateCarbon", + ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 0, 1)); + + RecipeUtils.addShapedGregtechRecipe( + "plateCarbon", + "plateCarbon", + "plateCarbon", + "cellLithiumPeroxide", + "dustCarbon", + "cellLithiumPeroxide", + "plateCarbon", + "plateCarbon", + "plateCarbon", + ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1)); + + // Pollution Detector + RecipeUtils.addShapedGregtechRecipe( + "plateSteel", + CI.sensor_LV, + "plateSteel", + "plateSteel", + CI.electricMotor_LV, + "plateSteel", + CI.getTieredCircuit(1), + CI.machineHull_LV, + CI.getTieredCircuit(1), + GregtechItemList.Pollution_Detector.get(1)); + + // LV + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[1], + ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 0, 1), + CI.component_Plate[1], + CI.component_Plate[1], + CI.electricMotor_LV, + CI.component_Plate[1], + CI.getTieredCircuit(1), + CI.machineHull_LV, + CI.getTieredCircuit(1), + GregtechItemList.Pollution_Cleaner_LV.get(1)); + // MV + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[2], + ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 0, 1), + CI.component_Plate[2], + CI.component_Plate[2], + CI.electricMotor_MV, + CI.component_Plate[2], + CI.getTieredCircuit(2), + CI.machineHull_MV, + CI.getTieredCircuit(2), + GregtechItemList.Pollution_Cleaner_MV.get(1)); + // HV + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[3], + ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 0, 1), + CI.component_Plate[3], + CI.component_Plate[3], + CI.electricMotor_HV, + CI.component_Plate[3], + CI.getTieredCircuit(3), + CI.machineHull_HV, + CI.getTieredCircuit(3), + GregtechItemList.Pollution_Cleaner_HV.get(1)); + // EV + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[4], + ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 0, 1), + CI.component_Plate[4], + CI.component_Plate[4], + CI.electricMotor_EV, + CI.component_Plate[4], + CI.getTieredCircuit(4), + CI.machineHull_EV, + CI.getTieredCircuit(4), + GregtechItemList.Pollution_Cleaner_EV.get(1)); + // IV + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[5], + ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1), + CI.component_Plate[5], + CI.component_Plate[5], + CI.electricMotor_IV, + CI.component_Plate[5], + CI.getTieredCircuit(5), + CI.machineHull_IV, + CI.getTieredCircuit(5), + GregtechItemList.Pollution_Cleaner_IV.get(1)); + // LuV + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[6], + ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1), + CI.component_Plate[6], + CI.component_Plate[6], + CI.electricMotor_LuV, + CI.component_Plate[6], + CI.getTieredCircuit(6), + CI.machineHull_LuV, + CI.getTieredCircuit(6), + GregtechItemList.Pollution_Cleaner_LuV.get(1)); + // ZPM + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[7], + ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1), + CI.component_Plate[7], + CI.component_Plate[7], + CI.electricMotor_ZPM, + CI.component_Plate[7], + CI.getTieredCircuit(7), + CI.machineHull_ZPM, + CI.getTieredCircuit(7), + GregtechItemList.Pollution_Cleaner_ZPM.get(1)); + // UV + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[8], + ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1), + CI.component_Plate[8], + CI.component_Plate[8], + CI.electricMotor_UV, + CI.component_Plate[8], + CI.getTieredCircuit(8), + CI.machineHull_UV, + CI.getTieredCircuit(8), + GregtechItemList.Pollution_Cleaner_UV.get(1)); + // MAX + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[9], + ItemUtils.simpleMetaStack(ModItems.itemAirFilter, 1, 1), + CI.component_Plate[9], + CI.component_Plate[9], + CI.electricMotor_UHV, + CI.component_Plate[9], + CI.getTieredCircuit(9), + CI.machineHull_UHV, + CI.getTieredCircuit(9), + GregtechItemList.Pollution_Cleaner_MAX.get(1)); + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_ThermalBoiler) { + RECIPE_ThermalBoilerController = GregtechItemList.GT4_Thermal_Boiler.get(1); + RECIPE_ThermalBoilerCasing = GregtechItemList.Casing_ThermalContainment.get(2); + ItemStack centrifugeEV = ItemList.Machine_EV_Centrifuge.get(1); + + RecipeUtils.addShapedGregtechRecipe( + "craftingGeothermalGenerator", + centrifugeEV, + "craftingGeothermalGenerator", + "gearGtTitanium", + CI.getTieredCircuitOreDictName(6), + "gearGtTitanium", + "craftingGeothermalGenerator", + centrifugeEV, + "craftingGeothermalGenerator", + RECIPE_ThermalBoilerController); + + RecipeUtils.addShapedGregtechRecipe( + "craftingGeothermalGenerator", + centrifugeEV, + "craftingGeothermalGenerator", + "gearGtTungstenSteel", + CI.getTieredCircuitOreDictName(5), + "gearGtTungstenSteel", + "craftingGeothermalGenerator", + centrifugeEV, + "craftingGeothermalGenerator", + RECIPE_ThermalBoilerController); + + RecipeUtils.addShapedGregtechRecipe( + MaterialsAlloy.MARAGING350.getPlate(1), + "plateStainlessSteel", + MaterialsAlloy.MARAGING350.getPlate(1), + "circuitAdvanced", + CI.machineCasing_HV, + "circuitAdvanced", + MaterialsAlloy.MARAGING350.getPlate(1), + MaterialsAlloy.MARAGING350.getPlate(1), + MaterialsAlloy.MARAGING350.getPlate(1), + RECIPE_ThermalBoilerCasing); + + // Lava Filter Recipe + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(18), + ItemUtils.getItemStackOfAmountFromOreDict("dustCarbon", 32), + ItemUtils.getItemStackOfAmountFromOreDict("wireFineSteel", 32), + ItemUtils.getItemStackOfAmountFromOreDict("ringTumbaga", 16), + ItemUtils.getItemStackOfAmountFromOreDict("foilCopper", 4), + ItemUtils.getItemStackWithMeta(true, "IC2:itemPartCarbonMesh", "RawCarbonMesh", 0, 64)) + .itemOutputs(ItemUtils.getSimpleStack(ModItems.itemLavaFilter, 16)) + .fluidInputs(CI.getTieredFluid(3, 144)) + .duration(1 * MINUTES + 20 * SECONDS) + .eut(240) + .addTo(assemblerRecipes); + + } + + // Air Intake Hatch + RecipeUtils.addShapedGregtechRecipe( + CI.component_Plate[6], + ItemList.Casing_Grate.get(1), + CI.component_Plate[6], + CI.component_Plate[6], + CI.getFluidRegulator(5, 1), + CI.component_Plate[6], + CI.getTieredCircuit(5), + ItemList.Hatch_Input_IV.get(1), + CI.getTieredCircuit(5), + GregtechItemList.Hatch_Air_Intake.get(1)); + + RecipeUtils.addShapedGregtechRecipe( + CI.getPlate(7, 1), + GregtechItemList.Hatch_Air_Intake.get(1), + CI.getPlate(7, 1), + CI.getPlate(7, 1), + CI.getFluidRegulator(7, 1), + CI.getPlate(7, 1), + CI.getTieredCircuit(7), + ItemList.Hatch_Input_ZPM.get(1), + CI.getTieredCircuit(7), + GregtechItemList.Hatch_Air_Intake_Extreme.get(1)); + + if (GTPPCore.ConfigSwitches.enableMultiblock_LiquidFluorideThoriumReactor) { + + // Thorium Reactor + RECIPE_LFTRController = GregtechItemList.ThoriumReactor.get(1); + RECIPE_LFTRInnerCasing = GregtechItemList.Casing_Reactor_II.get(1); // Zeron + RECIPE_LFTROuterCasing = GregtechItemList.Casing_Reactor_I.get(1); // Hastelloy + + ItemStack controlCircuit = ItemUtils.getSimpleStack(ModItems.itemCircuitLFTR); + RecipeUtils.addShapedGregtechRecipe( + controlCircuit, + "cableGt12Naquadah", + controlCircuit, + "plateDoubleHastelloyN", + GregtechItemList.Gregtech_Computer_Cube.get(1), + "plateDoubleHastelloyN", + "plateThorium232", + CI.machineHull_IV, + "plateThorium232", + RECIPE_LFTRController); + RecipeUtils.addShapedGregtechRecipe( + "plateDoubleHastelloyC276", + CI.craftingToolScrewdriver, + "plateDoubleHastelloyC276", + "gearGtTalonite", + CI.fieldGenerator_LV, + "gearGtTalonite", + "plateDoubleHastelloyC276", + CI.craftingToolHammer_Hard, + "plateDoubleHastelloyC276", + RECIPE_LFTRInnerCasing); + + ItemStack IC2HeatPlate = ItemUtils.getItemStackFromFQRN("IC2:reactorPlatingHeat", 1); + RecipeUtils.addShapedGregtechRecipe( + "plateDoubleHastelloyN", + IC2HeatPlate, + "plateDoubleHastelloyN", + IC2HeatPlate, + "frameGtHastelloyC276", + IC2HeatPlate, + "plateDoubleHastelloyN", + IC2HeatPlate, + "plateDoubleHastelloyN", + RECIPE_LFTROuterCasing); + + // LFTR Control Circuit + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(6), 1), + CI.fieldGenerator_HV) + .itemOutputs(controlCircuit) + .duration(4 * MINUTES) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + // Fission Fuel Plant + RecipeUtils.addShapedGregtechRecipe( + CI.getTieredCircuitOreDictName(5), + CI.craftingToolSolderingIron, + CI.getTieredCircuitOreDictName(5), + "plateDenseTungstenSteel", + GregtechItemList.Gregtech_Computer_Cube.get(1), + "plateDenseTungstenSteel", + "gearGtStellite", + CI.machineHull_IV, + "gearGtStellite", + GregtechItemList.Industrial_FuelRefinery.get(1)); + + ItemStack mInnerTank = ItemList.Super_Tank_IV.get(1); + + // Incoloy Casing + RecipeUtils.addShapedGregtechRecipe( + "plateIncoloyDS", + "pipeHugeStaballoy", + "plateIncoloyDS", + "gearGtIncoloyDS", + mInnerTank, + "gearGtIncoloyDS", + "plateIncoloyDS", + "pipeHugeStaballoy", + "plateIncoloyDS", + GregtechItemList.Casing_Refinery_Internal.get(1)); + + // Hastelloy-N Sealant Casing + RecipeUtils.addShapedGregtechRecipe( + "plateIncoloyMA956", + "plateHastelloyN", + "plateIncoloyMA956", + "plateHastelloyN", + "frameGtHastelloyC276", + "plateHastelloyN", + "plateIncoloyMA956", + "plateHastelloyN", + "plateIncoloyMA956", + GregtechItemList.Casing_Refinery_External.get(1)); + + // Hastelloy-X Structural Casing + RecipeUtils.addShapedGregtechRecipe( + "ringInconel792", + "gearGtHastelloyX", + CI.component_Plate[5], + CI.craftingToolHammer_Hard, + "frameGtHastelloyC276", + CI.craftingToolWrench, + CI.component_Plate[5], + CI.getTieredMachineCasing(4), + "ringInconel792", + GregtechItemList.Casing_Refinery_Structural.get(1)); + + RecipeUtils.addShapedGregtechRecipe( + CI.getPlate(5, 1), + MaterialsAlloy.HASTELLOY_X.getPlateDouble(1), + CI.getPlate(5, 1), + CI.getPlate(5, 1), + CI.getTieredMachineCasing(5), + CI.getPlate(5, 1), + CI.getRobotArm(5, 1), + ItemList.Casing_FrostProof.get(1), + CI.getRobotArm(5, 1), + GregtechItemList.ColdTrap_IV.get(1)); + RecipeUtils.addShapedGregtechRecipe( + CI.getPlate(7, 1), + MaterialsAlloy.HS188A.getPlateDouble(1), + CI.getPlate(7, 1), + CI.getPlate(7, 1), + GregtechItemList.ColdTrap_IV.get(1), + CI.getPlate(7, 1), + CI.getRobotArm(7, 1), + ItemList.Casing_FrostProof.get(1), + CI.getRobotArm(7, 1), + GregtechItemList.ColdTrap_ZPM.get(1)); + + RecipeUtils.addShapedGregtechRecipe( + CI.getFieldGenerator(3, 1), + CI.getRobotArm(5, 1), + CI.getPlate(5, 1), + MaterialsAlloy.HASTELLOY_N.getPlateDouble(1), + ItemList.Machine_IV_ChemicalReactor.get(1), + MaterialsAlloy.HASTELLOY_N.getPlateDouble(1), + CI.getPlate(5, 1), + MaterialsAlloy.HASTELLOY_N.getPlateDouble(1), + CI.getFieldGenerator(3, 1), + GregtechItemList.ReactorProcessingUnit_IV.get(1)); + RecipeUtils.addShapedGregtechRecipe( + CI.getFieldGenerator(5, 1), + CI.getRobotArm(7, 1), + CI.getPlate(7, 1), + MaterialsAlloy.HS188A.getPlateDouble(1), + GregtechItemList.ReactorProcessingUnit_IV.get(1), + MaterialsAlloy.HS188A.getPlateDouble(1), + CI.getPlate(7, 1), + MaterialsAlloy.HS188A.getPlateDouble(1), + CI.getFieldGenerator(5, 1), + GregtechItemList.ReactorProcessingUnit_ZPM.get(1)); + + // Nuclear Salt Processing Plant Controller + RECIPE_SaltPlantController = GregtechItemList.Nuclear_Salt_Processing_Plant.get(1); + + RecipeUtils.addShapedGregtechRecipe( + "plateOsmiridium", + GregtechItemList.ReactorProcessingUnit_IV.get(1), + "plateOsmiridium", + "plateRuridit", + CI.getTieredCircuitOreDictName(7), + "plateRuridit", + "plateOsmiridium", + GregtechItemList.ColdTrap_IV.get(1), + "plateOsmiridium", + RECIPE_SaltPlantController); + } + + // Cyclotron + if (GTPPCore.ConfigSwitches.enableMultiblock_Cyclotron) { + RECIPE_CyclotronController = GregtechItemList.COMET_Cyclotron.get(1); + RECIPE_CyclotronOuterCasing = GregtechItemList.Casing_Cyclotron_External.get(1); + RECIPE_CyclotronInnerCoil = GregtechItemList.Casing_Cyclotron_Coil.get(1); + + // Outer Casing + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_FrostProof.get(1), + ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 0, 4), + MaterialsAlloy.INCOLOY_DS.getPlate(8), + MaterialsAlloy.INCONEL_690.getScrew(16), + MaterialsAlloy.EGLIN_STEEL.getLongRod(4), + CI.getElectricPiston(3, 2)) + .itemOutputs(RECIPE_CyclotronOuterCasing) + .fluidInputs(MaterialsAlloy.ZIRCONIUM_CARBIDE.getFluidStack(144 * 8) // Input Flui + ) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Inner Coil + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_Coil_Nichrome.get(1), + ItemUtils.simpleMetaStack("miscutils:itemDehydratorCoilWire", 1, 8), + MaterialsAlloy.INCOLOY_MA956.getPlate(8), + MaterialsAlloy.TANTALLOY_61.getBolt(16), + MaterialsAlloy.INCOLOY_020.getScrew(32), + CI.getFieldGenerator(4, 1)) + .itemOutputs(RECIPE_CyclotronInnerCoil) + .fluidInputs(MaterialsAlloy.HG1223.getFluidStack(144 * 5) // Input Flui + ) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Controller + GTValues.RA.stdBuilder() + .itemInputs( + CI.machineHull_IV, + ItemUtils.getSimpleStack(RECIPE_CyclotronInnerCoil, 2), + MaterialsAlloy.INCOLOY_020.getPlate(8), + MaterialsAlloy.TANTALLOY_61.getGear(2), + MaterialsAlloy.INCOLOY_MA956.getScrew(16), + ItemUtils.getItemStackOfAmountFromOreDict(CI.getTieredCircuitOreDictName(5), 16)) + .itemOutputs(RECIPE_CyclotronController) + .fluidInputs(MaterialsAlloy.INCOLOY_020.getFluidStack(144 * 9) // Input Flui + ) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + } + + // Mazut + GTModHandler.addCraftingRecipe( + GregtechItemList.Controller_LargeSemifluidGenerator.get(1L), + CI.bitsd, + new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_EV, 'P', ItemList.Electric_Piston_EV, 'E', + ItemList.Electric_Pump_EV, 'C', OrePrefixes.circuit.get(Materials.EV), 'W', + OrePrefixes.cableGt08.get(Materials.Electrum), 'G', MaterialsAlloy.INCONEL_792.getGear(1) }); + + if (GTPPCore.ConfigSwitches.enableMultiblock_PowerSubstation) { + RecipeUtils.addShapedRecipe( + "screwTitanium", + "plateIncoloy020", + "screwTitanium", + "plateIncoloy020", + "frameGtIncoloyMA956", + "plateIncoloy020", + "screwTitanium", + "plateIncoloy020", + "screwTitanium", + GregtechItemList.Casing_Power_SubStation.get(1)); + + ItemStack mBattery = ItemUtils.getSimpleStack(ModItems.itemCircuitLFTR); + + 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", + GregtechItemList.PowerSubStation.get(1)); + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialThermalCentrifuge) { + RecipeUtils.addShapedRecipe( + "plateRedSteel", + CI.craftingToolHammer_Hard, + "plateRedSteel", + "plateRedSteel", + "frameGtBlackSteel", + "plateRedSteel", + "plateRedSteel", + CI.craftingToolWrench, + "plateRedSteel", + GregtechItemList.Casing_ThermalCentrifuge.get(1)); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.plate, Materials.RedSteel, 6), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.BlackSteel, 1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Casing_ThermalCentrifuge.get(1L)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + RecipeUtils.addShapedRecipe( + "plateRedSteel", + "circuitData", + "plateRedSteel", + "stickTalonite", + EV_MACHINE_ThermalCentrifuge, + "stickTalonite", + "plateRedSteel", + "gearGtTalonite", + "plateRedSteel", + GregtechItemList.Industrial_ThermalCentrifuge.get(1)); + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialWashPlant) { + RecipeUtils.addShapedRecipe( + "plateGrisium", + CI.craftingToolHammer_Hard, + "plateGrisium", + "plateTalonite", + "frameGtGrisium", + "plateTalonite", + "plateGrisium", + CI.craftingToolWrench, + "plateGrisium", + GregtechItemList.Casing_WashPlant.get(1)); + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.LEAGRISIUM.getPlate(4), + MaterialsAlloy.TALONITE.getPlate(2), + MaterialsAlloy.LEAGRISIUM.getFrameBox(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Casing_WashPlant.get(1L)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + RecipeUtils.addShapedRecipe( + "plateGrisium", + EV_MACHINE_OreWasher, + "plateGrisium", + "plateTalonite", + "circuitData", + "plateTalonite", + "plateGrisium", + EV_MACHINE_ChemicalBath, + "plateGrisium", + GregtechItemList.Industrial_WashPlant.get(1)); + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_LargeAutoCrafter) { + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(GregtechItemList.Casing_Multi_Use.get(1), 1), + ItemList.Block_IridiumTungstensteel.get(1), + CI.getTieredComponent(OrePrefixes.circuit, 2, 16), + CI.getTieredComponent(OrePrefixes.screw, 5, 32), + CI.getTieredComponent(OrePrefixes.bolt, 5, 12), + CI.getTieredComponent(OrePrefixes.plate, 6, 8)) + .itemOutputs(GregtechItemList.Casing_Autocrafter.get(1)) + .fluidInputs(CI.getTertiaryTieredFluid(6, 144 * (4))) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Refinery_Structural.get(4), + ItemUtils.getSimpleStack(ModItems.itemCircuitLFTR, 1), + CI.getTieredComponent(OrePrefixes.cableGt08, 6, 16), + CI.getTransmissionComponent(5, 2), + GregtechItemList.Gregtech_Computer_Cube.get(1)) + .itemOutputs(GregtechItemList.GT4_Multi_Crafter.get(1)) + .fluidInputs(CI.getTieredFluid(7, 144 * 8)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(GregtechItemList.Casing_Multi_Use.get(1), 1), + CI.getEmitter(4, 2), + CI.getRobotArm(4, 2), + CI.getTieredComponent(OrePrefixes.circuit, 2, 8), + CI.getTieredComponent(OrePrefixes.screw, 3, 8), + CI.getTieredComponent(OrePrefixes.plate, 5, 4)) + .itemOutputs(ItemUtils.getSimpleStack(ModBlocks.blockProjectTable)) + .fluidInputs(CI.getAlternativeTieredFluid(5, 144 * 4)) + .duration(1 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialCuttingMachine) { + ItemStack plate = MaterialsAlloy.MARAGING300.getPlate(1); + RecipeUtils.addShapedRecipe( + plate, + CI.craftingToolHammer_Hard, + plate, + "plateStellite", + "frameGtTalonite", + "plateStellite", + plate, + CI.craftingToolWrench, + plate, + GregtechItemList.Casing_CuttingFactoryFrame.get(1)); + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.MARAGING300.getPlate(4), + MaterialsAlloy.STELLITE.getPlate(2), + MaterialsAlloy.TALONITE.getFrameBox(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Casing_CuttingFactoryFrame.get(1L)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + RecipeUtils.addShapedRecipe( + plate, + CI.getTieredCircuit(4), + plate, + "wireFinePlatinum", + IV_MACHINE_Cutter, + "wireFinePlatinum", + plate, + CI.getTieredCircuit(4), + plate, + GregtechItemList.Industrial_CuttingFactoryController.get(1)); + } + + // IV_MACHINE_Extruder + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialExtrudingMachine) { + ItemStack plate = MaterialsAlloy.INCONEL_690.getPlate(1); + RecipeUtils.addShapedRecipe( + plate, + CI.craftingToolHammer_Hard, + plate, + "plateTalonite", + "frameGtStaballoy", + "plateTalonite", + plate, + CI.craftingToolWrench, + plate, + GregtechItemList.Casing_Extruder.get(1)); + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.INCONEL_690.getPlate(4), + MaterialsAlloy.TALONITE.getPlate(2), + MaterialsAlloy.STABALLOY.getFrameBox(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Casing_Extruder.get(1L)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + RecipeUtils.addShapedRecipe( + plate, + CI.getTieredCircuit(5), + plate, + CI.electricPiston_IV, + IV_MACHINE_Extruder, + CI.electricPiston_IV, + plate, + CI.getTieredCircuit(5), + plate, + GregtechItemList.Industrial_Extruder.get(1)); + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialFishingPort) { + ItemStack plate = MaterialsAlloy.AQUATIC_STEEL.getPlate(1); + RecipeUtils.addShapedRecipe( + plate, + CI.craftingToolHammer_Hard, + plate, + "plateEglinSteel", + "frameGtEglinSteel", + "plateEglinSteel", + plate, + CI.craftingToolWrench, + plate, + GregtechItemList.Casing_FishPond.get(1)); + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.AQUATIC_STEEL.getPlate(4), + MaterialsAlloy.EGLIN_STEEL.getPlate(2), + MaterialsAlloy.EGLIN_STEEL.getFrameBox(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Casing_FishPond.get(1L)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + RecipeUtils.addShapedRecipe( + plate, + CI.getTieredCircuit(5), + plate, + "wireFineElectrum", + ItemUtils.getSimpleStack(ModBlocks.blockFishTrap), + "wireFineElectrum", + plate, + CI.getTieredCircuit(5), + plate, + GregtechItemList.Industrial_FishingPond.get(1)); + } + + if (true) { + // Advanced Vacuum Freezer + ItemStack plate = MaterialsAlloy.LEAGRISIUM.getPlateDouble(1); + ItemStack gear = MaterialsAlloy.INCOLOY_MA956.getGear(1); + ItemStack frame = MaterialsAlloy.NITINOL_60.getFrameBox(1); + ItemStack cell1 = ItemList.Reactor_Coolant_He_6.get(1); + ItemStack cell2 = ItemList.Reactor_Coolant_NaK_6.get(1); + + RecipeUtils.addShapedRecipe( + plate, + gear, + plate, + cell1, + frame, + cell2, + plate, + gear, + plate, + GregtechItemList.Casing_AdvancedVacuum.get(1)); + 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, + GregtechItemList.Industrial_Cryogenic_Freezer.get(1)); + + // Advanced Blast Furnace + plate = MaterialsAlloy.HASTELLOY_N.getPlateDouble(1); + gear = MaterialsAlloy.HASTELLOY_W.getGear(1); + frame = MaterialsAlloy.HASTELLOY_X.getFrameBox(1); + cell1 = ItemUtils.simpleMetaStack("IC2:reactorHeatSwitchDiamond:1", 1, 1); + cell2 = ItemUtils.simpleMetaStack("IC2:reactorVentGold:1", 1, 1); + ItemStack cell3 = ItemUtils.simpleMetaStack("IC2:reactorVentDiamond:1:1", 1, 1); + + RecipeUtils.addShapedRecipe( + plate, + cell1, + plate, + cell3, + frame, + cell2, + plate, + gear, + plate, + GregtechItemList.Casing_Adv_BlastFurnace.get(1)); + 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, + GregtechItemList.Machine_Adv_BlastFurnace.get(1)); + // Hatch_Input_Pyrotheum + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Input_IV.get(1), + GregtechItemList.Casing_Adv_BlastFurnace.get(1), + MaterialsAlloy.MARAGING250.getPlate(4), + MaterialsAlloy.MARAGING300.getGear(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Hatch_Input_Pyrotheum.get(1L)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + // Casing_Adv_BlastFurnace + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.HASTELLOY_X.getFrameBox(1), + MaterialsAlloy.HASTELLOY_N.getPlateDouble(4), + MaterialsAlloy.HASTELLOY_W.getGear(1), + ItemUtils.simpleMetaStack("IC2:reactorHeatSwitchDiamond:1", 1, 1), + ItemUtils.simpleMetaStack("IC2:reactorVentGold:1", 1, 1), + ItemUtils.simpleMetaStack("IC2:reactorVentDiamond:1:1", 1, 1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Casing_Adv_BlastFurnace.get(1L)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + // Advanced Implosion Compressor + plate = ItemUtils.getItemStackOfAmountFromOreDict("plateAlloyIridium", 1); + gear = MaterialsAlloy.LEAGRISIUM.getGear(1); + frame = MaterialsAlloy.CINOBITE.getFrameBox(1); + cell1 = ItemUtils.simpleMetaStack("IC2:reactorHeatSwitchDiamond:1", 1, 1); + cell2 = ItemUtils.simpleMetaStack("IC2:reactorVentGold:1", 1, 1); + + RecipeUtils.addShapedRecipe( + gear, + CI.getTieredCircuit(6), + gear, + CI.fieldGenerator_IV, + CI.machineHull_ZPM, + CI.robotArm_IV, + plate, + GregtechItemList.Gregtech_Computer_Cube.get(1), + plate, + GregtechItemList.Machine_Adv_ImplosionCompressor.get(1)); + + // Supply Depot + plate = MaterialsAlloy.TUNGSTEN_CARBIDE.getPlateDouble(1); + gear = MaterialsAlloy.TRINIUM_TITANIUM.getRing(1); + frame = MaterialsAlloy.TUNGSTEN_CARBIDE.getFrameBox(1); + cell1 = CI.conveyorModule_LuV; + cell2 = CI.electricMotor_LuV; + ItemStack casingAmazon = GregtechItemList.Casing_AmazonWarehouse.get(1); + + RecipeUtils.addShapedRecipe( + plate, + ItemUtils.getItemStackOfAmountFromOreDict("cableGt12VanadiumGallium", 1), + plate, + cell1, + frame, + cell2, + plate, + gear, + plate, + GregtechItemList.Casing_AmazonWarehouse.get(1)); + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.TUNGSTEN_CARBIDE.getFrameBox(1), + MaterialsAlloy.TUNGSTEN_CARBIDE.getPlateDouble(4), + MaterialsAlloy.TRINIUM_TITANIUM.getRing(1), + ItemList.Electric_Motor_LuV.get(1), + ItemList.Conveyor_Module_LuV.get(1), + ItemUtils.getItemStackOfAmountFromOreDict("cableGt12VanadiumGallium", 1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Casing_AmazonWarehouse.get(1L)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + RecipeUtils.addShapedRecipe( + casingAmazon, + CI.getTieredCircuit(7), + casingAmazon, + CI.robotArm_LuV, + ItemList.Machine_LuV_Unboxinator.get(1), + CI.robotArm_LuV, + CI.conveyorModule_LuV, + GregtechItemList.Gregtech_Computer_Cube.get(1), + CI.conveyorModule_LuV, + GregtechItemList.Amazon_Warehouse_Controller.get(1)); + + // Industrial Mixing Machine + RecipeUtils.addShapedRecipe( + "plateStaballoy", + CI.getTieredCircuit(5), + "plateStaballoy", + "plateZirconiumCarbide", + IV_MACHINE_Mixer, + "plateZirconiumCarbide", + "plateStaballoy", + CI.getTieredCircuit(5), + "plateStaballoy", + GregtechItemList.Industrial_Mixer.get(1)); + } + + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialMultiMachine) { + ItemStack plate = MaterialsAlloy.STABALLOY.getPlate(1); + + ItemStack o_Compressor = ItemList.Machine_IV_Compressor.get(1); + ItemStack o_Lathe = ItemList.Machine_IV_Lathe.get(1); + ItemStack o_Electromagnet = ItemList.Machine_IV_Polarizer.get(1); + ItemStack o_Fermenter = ItemList.Machine_IV_Fermenter.get(1); + ItemStack o_Distillery = ItemList.Machine_IV_FluidExtractor.get(1); + ItemStack o_Extractor = ItemList.Machine_IV_Extractor.get(1); + + RecipeUtils.addShapedRecipe( + plate, + CI.craftingToolHammer_Hard, + plate, + "plateStainlessSteel", + "frameGtZirconiumCarbide", + "plateStainlessSteel", + plate, + CI.craftingToolWrench, + plate, + GregtechItemList.Casing_Multi_Use.get(1)); + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsAlloy.STABALLOY.getPlate(4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 2), + MaterialsAlloy.ZIRCONIUM_CARBIDE.getFrameBox(1), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(GregtechItemList.Casing_Multi_Use.get(1L)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + + RecipeUtils.addShapedRecipe( + o_Compressor, + o_Lathe, + o_Electromagnet, + plate, + ItemUtils.getSimpleStack(ModBlocks.blockProjectTable), + plate, + o_Fermenter, + o_Distillery, + o_Extractor, + GregtechItemList.Industrial_MultiMachine.get(1)); + } + + // Drilling Platform Casings + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getItemStackOfAmountFromOreDict("frameGtTriniumNaquadahCarbonite", 4), + ItemUtils.getItemStackOfAmountFromOreDict("plateDoubleTriniumTitaniumAlloy", 1 * (1)), + ItemUtils.getItemStackOfAmountFromOreDict("gearGtPikyonium64B", 2 * (1)), + MaterialsAlloy.TRINIUM_REINFORCED_STEEL.getPlateDouble(4 * 1), + ItemUtils.getSimpleStack((CI.machineHull_LuV), 1 * 1)) + .itemOutputs(GregtechItemList.Casing_BedrockMiner.get(1)) + .fluidInputs(MaterialsAlloy.MARAGING350.getFluidStack(144 * 16 * 1)) + .duration((int) GTValues.V[4]) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + int aCostMultiplier = 1; + + // Reservoir Hatch + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Input_EV.get(1), + GTModHandler.getModItem(RemoteIO.ID, "tile.machine", 1), + ItemList.Electric_Pump_EV.get(1)) + .itemOutputs(GregtechItemList.Hatch_Reservoir.get(1)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Mystic Frame + GTValues.RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Multi_Use.get(1), + ItemList.Field_Generator_MV.get(1, CI.circuitTier7), + ItemList.Field_Generator_HV.get(1, CI.circuitTier7), + ItemList.Emitter_HV.get(1, CI.circuitTier7), + ItemList.Sensor_HV.get(1, CI.circuitTier7), + CI.getTieredComponent(OrePrefixes.plate, 7, 8 * aCostMultiplier), + CI.getTieredComponent(OrePrefixes.wireGt08, 8, 4 * aCostMultiplier)) + .itemOutputs(ItemUtils.getSimpleStack(DimensionEverglades.blockPortalFrame, 2)) + .fluidInputs(CI.getTieredFluid(6, (144 * 8))) + .duration(4 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + Logger.INFO("Done loading recipes for the Various machine blocks."); + } + + private static void energyCores() { + + ItemStack[] aBufferOutput = new ItemStack[] { RECIPE_Buffer_ULV, RECIPE_Buffer_LV, RECIPE_Buffer_MV, + RECIPE_Buffer_HV, RECIPE_Buffer_EV, RECIPE_Buffer_IV, RECIPE_Buffer_LuV, RECIPE_Buffer_ZPM, + RECIPE_Buffer_UV, RECIPE_Buffer_MAX }; + + long[] voltageTiers = new long[] { 16, TierEU.RECIPE_LV, TierEU.RECIPE_MV, TierEU.RECIPE_HV, TierEU.RECIPE_EV, + TierEU.RECIPE_IV, TierEU.RECIPE_LuV, TierEU.RECIPE_ZPM, TierEU.RECIPE_UV, TierEU.RECIPE_UHV }; + + ItemStack[] aOutput = new ItemStack[] { + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "1", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "2", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "3", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "4", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "5", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "6", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "7", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "8", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "9", 1), + ItemUtils.getItemStackFromFQRN("miscutils:item.itemBufferCore" + "10", 1) }; + + for (int i = 0; i < 10; i++) { + + ItemStack aPrevTier = (i == 0 ? CI.getTieredMachineHull(1) : aOutput[i - 1]); + aPrevTier.stackSize = 1; + int aTier = (i + 1); + GTValues.RA.stdBuilder() + .itemInputs( + aPrevTier, + CI.getTieredComponent(OrePrefixes.plate, aTier, 4), + CI.getTieredComponent(OrePrefixes.cableGt04, i, 2), + CI.getTieredComponent(OrePrefixes.circuit, aTier, 2), + CI.getTieredComponent(OrePrefixes.screw, aTier, 6), + CI.getTieredComponent(OrePrefixes.bolt, i, 12)) + .itemOutputs(aOutput[i]) + .fluidInputs(CI.getTieredFluid(i, (144 * 4 * aTier))) + .duration(45 * 10 * 1 * (aTier)) + .eut(voltageTiers[i]) + .addTo(assemblerRecipes); + // Energy Buffer + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(aOutput[i], 4), + CI.getTieredComponent(OrePrefixes.plate, aTier, 8), + CI.getTieredComponent(OrePrefixes.wireGt08, i, 4), + CI.getTieredComponent(OrePrefixes.circuit, i, 4), + CI.getTieredComponent(OrePrefixes.stickLong, aTier, 4), + CI.getTieredComponent(OrePrefixes.gearGt, i, 5)) + .itemOutputs(aBufferOutput[i]) + .fluidInputs(CI.getTieredFluid(aTier, (144 * 16 * aTier))) + .duration(45 * 20 * 1 * (aTier)) + .eut(voltageTiers[i]) + .addTo(assemblerRecipes); + + } + } + + private static void wirelessChargers() { + + ItemStack[] aChargers = new ItemStack[] { GregtechItemList.Charger_LV.get(1), + GregtechItemList.Charger_MV.get(1), GregtechItemList.Charger_HV.get(1), GregtechItemList.Charger_EV.get(1), + GregtechItemList.Charger_IV.get(1), GregtechItemList.Charger_LuV.get(1), + GregtechItemList.Charger_ZPM.get(1), GregtechItemList.Charger_UV.get(1), + GregtechItemList.Charger_UHV.get(1) }; + + long[] voltageTiers = new long[] { 16, TierEU.RECIPE_LV, TierEU.RECIPE_MV, TierEU.RECIPE_HV, TierEU.RECIPE_EV, + TierEU.RECIPE_IV, TierEU.RECIPE_LuV, TierEU.RECIPE_ZPM, TierEU.RECIPE_UV, TierEU.RECIPE_UHV }; + + for (int tier = 1; tier < aChargers.length + 1; tier++) { + + ItemStack[] aInputs = new ItemStack[] { CI.getTieredMachineHull(tier, 1), + CI.getTransmissionComponent(tier, 2), CI.getFieldGenerator(tier, 1), + CI.getTieredComponent(OrePrefixes.plate, tier + 1, 4), + CI.getTieredComponent(OrePrefixes.circuit, tier + 1, 2), }; + GTValues.RA.stdBuilder() + .itemInputs(aInputs) + .itemOutputs(aChargers[tier - 1]) + .fluidInputs(CI.getAlternativeTieredFluid(tier, (144 * 2 * (tier + 1)))) + .duration(45 * 10 * (tier + 1)) + .eut(voltageTiers[tier]) + .addTo(assemblerRecipes); + + } + } + + private static void largeArcFurnace() { + int aCostMultiplier = 1; + GTValues.RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Multi_Use.get(aCostMultiplier), + CI.getTransmissionComponent(2, 2 * aCostMultiplier), + CI.getElectricPiston(4, 2 * aCostMultiplier), + CI.getTieredComponent(OrePrefixes.plate, 5, 4 * aCostMultiplier), + CI.getTieredComponent(OrePrefixes.pipeSmall, 4, 1 * aCostMultiplier)) + .itemOutputs(GregtechItemList.Casing_Industrial_Arc_Furnace.get(1)) + .fluidInputs(CI.getAlternativeTieredFluid(5, (144 * 2 * 4))) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Industrial_Arc_Furnace.get(1), + CI.getFieldGenerator(4, 2 * aCostMultiplier), + CI.getRobotArm(5, 4 * aCostMultiplier), + CI.getEnergyCore(4, 2 * aCostMultiplier), + CI.getTieredComponent(OrePrefixes.plate, 6, 8 * aCostMultiplier), + CI.getTieredComponent(OrePrefixes.circuit, 5, 8 * aCostMultiplier)) + .itemOutputs(GregtechItemList.Industrial_Arc_Furnace.get(1)) + .fluidInputs(CI.getAlternativeTieredFluid(6, (144 * 4 * 5))) + .duration(8 * MINUTES) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + } + + private static void industrialVacuumFurnace() { + + GTValues.RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Multi_Use.get(1), + CI.getHeatCoil(2), + CI.getElectricPiston(3, 2), + CI.getTieredComponent(OrePrefixes.plate, 6, 4), + CI.getTieredComponent(OrePrefixes.gearGt, 6, 2)) + .itemOutputs(GregtechItemList.Casing_Vacuum_Furnace.get(1)) + .fluidInputs(CI.getTertiaryTieredFluid(5, (144 * 2 * 4))) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GregtechItemList.Casing_Vacuum_Furnace.get(1), + CI.getTieredComponent(OrePrefixes.wireGt16, 7, 4), + CI.getEnergyCore(5, 1), + CI.getRobotArm(4, 4), + CI.getTieredComponent(OrePrefixes.plate, 6, 8), + CI.getTieredComponent(OrePrefixes.circuit, 6, 8)) + .itemOutputs(GregtechItemList.Controller_Vacuum_Furnace.get(1)) + .fluidInputs(CI.getTieredFluid(6, (144 * 4 * 5))) + .duration(12 * MINUTES) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + + } + + private static void milling() { + + // Isa Mill Controller + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemList.Machine_IV_Macerator.get(1)) + .metadata(RESEARCH_TIME, 20 * MINUTES) + .itemInputs( + GregtechItemList.Casing_IsaMill_Gearbox.get(4), + CI.getTieredGTPPMachineCasing(6, 4), + ItemList.Component_Grinder_Tungsten.get(16), + new Object[] { CI.getTieredCircuitOreDictName(6), 8 }, + MaterialsAlloy.INCONEL_625.getGear(8), + MaterialsAlloy.INCONEL_625.getPlate(32), + MaterialsAlloy.ZERON_100.getPlateDouble(8), + MaterialsAlloy.ZERON_100.getPlateDouble(8), + MaterialsAlloy.ZERON_100.getScrew(64), + CI.getTieredComponentOfMaterial(Materials.NiobiumTitanium, OrePrefixes.wireFine, 32), + CI.getTieredComponentOfMaterial(Materials.NiobiumTitanium, OrePrefixes.wireFine, 32), + CI.getTieredComponentOfMaterial(Materials.Titanium, OrePrefixes.foil, 16), + CI.getTieredComponentOfMaterial(Materials.Titanium, OrePrefixes.foil, 16)) + .fluidInputs( + CI.getTieredFluid(6, 16 * 144), + CI.getAlternativeTieredFluid(6, 32 * 144), + CI.getTertiaryTieredFluid(6, 32 * 144)) + .itemOutputs(GregtechItemList.Controller_IsaMill.get(1)) + .eut(TierEU.RECIPE_LuV) + .duration(10 * MINUTES) + .addTo(AssemblyLine); + + // Isa Mill Gearbox + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(7), + ItemList.Casing_Gearbox_Titanium.get(2), + MaterialsAlloy.INCONEL_625.getGear(4), + CI.getTieredComponentOfMaterial(Materials.HSSE, OrePrefixes.gearGtSmall, 8), + MaterialsAlloy.INCONEL_625.getPlate(16), + MaterialsAlloy.ZERON_100.getBolt(16)) + .itemOutputs(GregtechItemList.Casing_IsaMill_Gearbox.get(1)) + .fluidInputs(MaterialsAlloy.TUNGSTENSTEEL.getFluidStack(8 * 144)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Isa Mill Casing + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(7), + CI.getTieredGTPPMachineCasing(5, 1), + MaterialsAlloy.INCONEL_625.getPlate(8), + MaterialsAlloy.ZERON_100.getRod(4), + CI.getTieredComponentOfMaterial(Materials.HSSG, OrePrefixes.gearGtSmall, 4), + MaterialsAlloy.ZERON_100.getScrew(8)) + .itemOutputs(GregtechItemList.Casing_IsaMill_Casing.get(1)) + .fluidInputs(MaterialsElements.getInstance().TITANIUM.getFluidStack(4 * 144)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Isa Mill Pipe + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(7), + CI.getTieredGTPPMachineCasing(4, 2), + MaterialsAlloy.INCONEL_625.getPlateDouble(4), + MaterialsAlloy.INCOLOY_MA956.getRing(8), + CI.getTieredComponentOfMaterial(Materials.HSSE, OrePrefixes.plate, 8), + MaterialsAlloy.INCOLOY_MA956.getBolt(16)) + .itemOutputs(GregtechItemList.Casing_IsaMill_Pipe.get(1)) + .fluidInputs(MaterialsElements.getInstance().ALUMINIUM.getFluidStack(8 * 144)) + .duration(8 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + // Flotation Cell Controller + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemList.Distillation_Tower.get(1)) + .metadata(RESEARCH_TIME, 20 * MINUTES) + .itemInputs( + GregtechItemList.Casing_Flotation_Cell.get(4), + CI.getTieredGTPPMachineCasing(5, 4), + ItemList.Machine_IV_Distillery.get(1), + new Object[] { CI.getTieredCircuitOreDictName(6), 8 }, + MaterialsAlloy.STELLITE.getGear(8), + MaterialsAlloy.STELLITE.getPlate(32), + MaterialsAlloy.HASTELLOY_N.getPlateDouble(8), + MaterialsAlloy.HASTELLOY_N.getPlateDouble(8), + MaterialsAlloy.HASTELLOY_N.getScrew(64), + CI.getTieredComponentOfMaterial(Materials.YttriumBariumCuprate, OrePrefixes.wireFine, 64), + CI.getTieredComponentOfMaterial(Materials.YttriumBariumCuprate, OrePrefixes.wireFine, 64), + CI.getTieredComponentOfMaterial(Materials.Platinum, OrePrefixes.foil, 32), + CI.getTieredComponentOfMaterial(Materials.Platinum, OrePrefixes.foil, 32)) + .fluidInputs( + CI.getTieredFluid(5, 16 * 144), + CI.getAlternativeTieredFluid(4, 32 * 144), + CI.getTertiaryTieredFluid(4, 32 * 144)) + .itemOutputs(GregtechItemList.Controller_Flotation_Cell.get(1)) + .eut(TierEU.RECIPE_LuV) + .duration(10 * MINUTES) + .addTo(AssemblyLine); + + // Flotation Cell Casing + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(7), + CI.getTieredGTPPMachineCasing(4, 1), + MaterialsAlloy.AQUATIC_STEEL.getPlate(8), + MaterialsAlloy.STELLITE.getRing(8), + CI.getTieredComponentOfMaterial(Materials.HSSG, OrePrefixes.plateDouble, 4), + MaterialsAlloy.HASTELLOY_N.getScrew(8)) + .itemOutputs(GregtechItemList.Casing_Flotation_Cell.get(1)) + .fluidInputs(MaterialsAlloy.STAINLESS_STEEL.getFluidStack(8 * 144)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Milling Bus + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(7), + CI.getTieredGTPPMachineCasing(5, 1), + ItemList.Hatch_Input_Bus_EV.get(1), + CI.getTieredComponentOfMaterial(Materials.Titanium, OrePrefixes.gearGt, 8), + CI.getTieredComponentOfMaterial(Materials.TungstenSteel, OrePrefixes.plate, 32), + CI.getTieredComponentOfMaterial(Materials.SolderingAlloy, OrePrefixes.wireFine, 16)) + .itemOutputs(GregtechItemList.Bus_Milling_Balls.get(1)) + .fluidInputs(MaterialsElements.getInstance().TUNGSTEN.getFluidStack(8 * 144)) + .duration(4 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + } + + private static void sparging() { + + // Sparge Tower Research + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(8), + MaterialsElements.getInstance().HELIUM.getCell(8), + MaterialsElements.getInstance().FLUORINE.getCell(8), + MaterialsAlloy.HS188A.getIngot(8), + ItemList.Distillation_Tower.get(1)) + .itemOutputs(ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_10_SPARGING, 1)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + // Sparge Tower Controller + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemDummyResearch.getResearchStack(ASSEMBLY_LINE_RESEARCH.RESEARCH_10_SPARGING, 1)) + .metadata(RESEARCH_TIME, 20 * MINUTES) + .itemInputs( + GregtechItemList.Casing_Sparge_Tower_Exterior.get(4), + CI.getTieredGTPPMachineCasing(4, 4), + ItemList.Machine_IV_Distillery.get(1), + new Object[] { CI.getTieredCircuitOreDictName(5), 8 }, + MaterialsAlloy.HS188A.getGear(8), + MaterialsAlloy.HS188A.getPlate(32), + MaterialsAlloy.HASTELLOY_N.getPlateDouble(8), + MaterialsAlloy.HASTELLOY_N.getPlateDouble(8), + MaterialsAlloy.HASTELLOY_N.getScrew(64), + CI.getTieredComponentOfMaterial(Materials.YttriumBariumCuprate, OrePrefixes.wireFine, 64), + CI.getTieredComponentOfMaterial(Materials.YttriumBariumCuprate, OrePrefixes.wireFine, 64), + CI.getTieredComponentOfMaterial(Materials.Platinum, OrePrefixes.foil, 32), + CI.getTieredComponentOfMaterial(Materials.Platinum, OrePrefixes.foil, 32)) + .fluidInputs( + CI.getTieredFluid(4, 16 * 144), + CI.getAlternativeTieredFluid(3, 32 * 144), + CI.getTertiaryTieredFluid(3, 32 * 144)) + .itemOutputs(GregtechItemList.Controller_Sparge_Tower.get(1)) + .eut(TierEU.RECIPE_LuV) + .duration(10 * MINUTES) + .addTo(AssemblyLine); + + // Sparge Tower Casing + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(8), + CI.getTieredGTPPMachineCasing(3, 1), + MaterialsAlloy.HS188A.getPlate(2), + MaterialsAlloy.HASTELLOY_N.getRing(4), + CI.getTieredComponentOfMaterial(Materials.TungstenSteel, OrePrefixes.plateDouble, 4), + MaterialsAlloy.HASTELLOY_N.getScrew(4)) + .itemOutputs(GregtechItemList.Casing_Sparge_Tower_Exterior.get(1)) + .fluidInputs(MaterialsAlloy.STAINLESS_STEEL.getFluidStack(8 * 144)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + } + + private static void chisels() { + ItemStack[] aChisels = new ItemStack[] { GregtechItemList.GT_Chisel_LV.get(1), + GregtechItemList.GT_Chisel_MV.get(1), GregtechItemList.GT_Chisel_HV.get(1), }; + + long[] voltageTiers = new long[] { TierEU.RECIPE_LV, TierEU.RECIPE_MV, TierEU.RECIPE_HV }; + for (int i = 1; i < 4; i++) { + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(10 + i), + CI.getTieredMachineCasing(i), + CI.getPlate(i, 4), + CI.getElectricMotor(i, 2), + CI.getConveyor(i, 2), + CI.getRobotArm(i, 1)) + .itemOutputs(aChisels[i - 1]) + .fluidInputs(CI.getTieredFluid(i, 144 * 4)) + .duration(20 * SECONDS) + .eut(voltageTiers[i - 1]) + .addTo(assemblerRecipes); + + } + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(14), + aChisels[2], + CI.getPlate(4, 8), + CI.getElectricMotor(4, 8), + CI.getConveyor(4, 8), + CI.getRobotArm(4, 4)) + .itemOutputs(GregtechItemList.Controller_IndustrialAutoChisel.get(1)) + .fluidInputs(CI.getTieredFluid(4, 144 * 8)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(14), + ItemList.Casing_SolidSteel.get(2), + CI.getPlate(4, 2), + CI.getTieredComponent(OrePrefixes.plate, 3, 4), + CI.getTieredComponent(OrePrefixes.ring, 3, 8), + CI.getTieredComponent(OrePrefixes.rod, 2, 4)) + .itemOutputs(GregtechItemList.Casing_IndustrialAutoChisel.get(1)) + .fluidInputs(CI.getTieredFluid(2, 144 * 2)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + } + + private static void rockBreaker() { + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(12), + ItemList.Machine_EV_RockBreaker.get(1), + MaterialsAlloy.STAINLESS_STEEL.getPlate(8), + MaterialsAlloy.STAINLESS_STEEL.getRing(4), + CI.getTieredComponentOfMaterial(Materials.Aluminium, OrePrefixes.plateDouble, 8), + MaterialsAlloy.EGLIN_STEEL.getScrew(8)) + .itemOutputs(GregtechItemList.Controller_IndustrialRockBreaker.get(1)) + .fluidInputs(MaterialsElements.getInstance().ALUMINIUM.getFluidStack(144 * 8)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + } + + private static void fakeMachineCasingCovers() { + int aMaxTier = GTValues.VOLTAGE_NAMES.length; + ItemStack aTier[] = new ItemStack[aMaxTier]; + for (int i = 0; i < aMaxTier; i++) { + aTier[i] = ItemUtils.simpleMetaStack(CoverManager.Cover_Gt_Machine_Casing, i, 7); + } + // Add recipes for new ones + for (int i = 0; i < aMaxTier; i++) { + GTValues.RA.stdBuilder() + .itemInputs(CI.getTieredMachineCasing(i)) + .itemOutputs(aTier[i]) + .duration(i * 5 * SECONDS) + .eut(GTValues.VP[i]) + .addTo(cutterRecipes); + } + } + + private static void superBuses() { + GregtechItemList[] mSuperBusesInput = new GregtechItemList[] { GregtechItemList.Hatch_SuperBus_Input_LV, + GregtechItemList.Hatch_SuperBus_Input_MV, GregtechItemList.Hatch_SuperBus_Input_HV, + GregtechItemList.Hatch_SuperBus_Input_EV, GregtechItemList.Hatch_SuperBus_Input_IV, + GregtechItemList.Hatch_SuperBus_Input_LuV, GregtechItemList.Hatch_SuperBus_Input_ZPM, + GregtechItemList.Hatch_SuperBus_Input_UV, GregtechItemList.Hatch_SuperBus_Input_MAX, }; + + GregtechItemList[] mSuperBusesOutput = new GregtechItemList[] { GregtechItemList.Hatch_SuperBus_Output_LV, + GregtechItemList.Hatch_SuperBus_Output_MV, GregtechItemList.Hatch_SuperBus_Output_HV, + GregtechItemList.Hatch_SuperBus_Output_EV, GregtechItemList.Hatch_SuperBus_Output_IV, + GregtechItemList.Hatch_SuperBus_Output_LuV, GregtechItemList.Hatch_SuperBus_Output_ZPM, + GregtechItemList.Hatch_SuperBus_Output_UV, GregtechItemList.Hatch_SuperBus_Output_MAX, }; + + ItemStack[] mInputHatch = new ItemStack[] { ItemList.Hatch_Input_Bus_EV.get(1), + ItemList.Hatch_Input_Bus_IV.get(1), ItemList.Hatch_Input_Bus_LuV.get(1), + ItemList.Hatch_Input_Bus_ZPM.get(1), ItemList.Hatch_Input_Bus_UV.get(1), + ItemList.Hatch_Input_Bus_MAX.get(1), GregtechItemList.Hatch_SuperBus_Input_LV.get(1), + GregtechItemList.Hatch_SuperBus_Input_MV.get(1), GregtechItemList.Hatch_SuperBus_Input_HV.get(1), + GregtechItemList.Hatch_SuperBus_Input_EV.get(1), }; + + ItemStack[] mOutputHatch = new ItemStack[] { ItemList.Hatch_Output_Bus_EV.get(1), + ItemList.Hatch_Output_Bus_IV.get(1), ItemList.Hatch_Output_Bus_LuV.get(1), + ItemList.Hatch_Output_Bus_ZPM.get(1), ItemList.Hatch_Output_Bus_UV.get(1), + ItemList.Hatch_Output_Bus_MAX.get(1), GregtechItemList.Hatch_SuperBus_Output_LV.get(1), + GregtechItemList.Hatch_SuperBus_Output_MV.get(1), GregtechItemList.Hatch_SuperBus_Output_HV.get(1), + GregtechItemList.Hatch_SuperBus_Output_EV.get(1), }; + + // Input Buses + for (int tier = 1; tier < mSuperBusesInput.length + 1; tier++) { + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(17), + mInputHatch[tier - 1], + CI.getElectricMotor(tier, 2), + CI.getConveyor(tier, 5), + CI.getBolt(tier, 16), + CI.getTieredComponent(OrePrefixes.circuit, tier, 2)) + .itemOutputs(mSuperBusesInput[tier - 1].get(1)) + .fluidInputs(CI.getAlternativeTieredFluid(tier, 144 * 8)) + .duration(60 * SECONDS) + .eut(GTValues.VP[tier]) + .addTo(assemblerRecipes); + + } + // Output Buses + for (int tier = 1; tier < mSuperBusesOutput.length + 1; tier++) { + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(18), + mOutputHatch[tier - 1], + CI.getElectricPiston(tier, 2), + CI.getConveyor(tier, 5), + CI.getGear(tier, 3), + CI.getTieredComponent(OrePrefixes.circuit, tier, 2)) + .itemOutputs(mSuperBusesOutput[tier - 1].get(1)) + .fluidInputs(CI.getTertiaryTieredFluid(tier, 144 * 8)) + .duration(60 * SECONDS) + .eut(GTValues.VP[tier]) + .addTo(assemblerRecipes); + + } + } + + private static void chiselBuses() { + ItemStack[] mSuperBusesInput = new ItemStack[] { GregtechItemList.Hatch_SuperBus_Input_LV.get(1), + GregtechItemList.Hatch_SuperBus_Input_MV.get(1), GregtechItemList.Hatch_SuperBus_Input_HV.get(1), }; + + ItemStack[] mChiselBuses = new ItemStack[] { GregtechItemList.GT_MetaTileEntity_ChiselBus_LV.get(1), + GregtechItemList.GT_MetaTileEntity_ChiselBus_MV.get(1), + GregtechItemList.GT_MetaTileEntity_ChiselBus_HV.get(1), }; + + for (int tier = 1; tier < mChiselBuses.length + 1; tier++) { + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(17), + mSuperBusesInput[tier - 1], + CI.getSensor(tier, 1), + CI.getRobotArm(tier, 2), + CI.getBolt(tier, 16), + ItemUtils.getSimpleStack(Blocks.chest)) + .itemOutputs(mChiselBuses[tier - 1]) + .fluidInputs(CI.getAlternativeTieredFluid(tier, 144 * 2)) + .duration(60 * SECONDS) + .eut(GTValues.VP[tier + 1]) + .addTo(assemblerRecipes); + + } + } + + private static void solidifierHatches() { + ItemStack[] mSuperBusesInput = new ItemStack[] { ItemList.Hatch_Input_IV.get(1), + ItemList.Hatch_Input_LuV.get(1), ItemList.Hatch_Input_ZPM.get(1), ItemList.Hatch_Input_UV.get(1), }; + + ItemStack[] mSolidifierHatches = new ItemStack[] { GregtechItemList.GT_MetaTileEntity_Solidifier_I.get(1), + GregtechItemList.GT_MetaTileEntity_Solidifier_II.get(1), + GregtechItemList.GT_MetaTileEntity_Solidifier_III.get(1), + GregtechItemList.GT_MetaTileEntity_Solidifier_IV.get(1), }; + + for (int i = 0; i < 4; i++) { + int componentTier = i + 5; + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(17), + mSuperBusesInput[i], + CI.getSensor(componentTier, 1), + CI.getFluidRegulator(componentTier, 1), + CI.getTieredComponent(OrePrefixes.circuit, componentTier + 1, 4), + ItemUtils.getSimpleStack(Blocks.chest)) + .itemOutputs(mSolidifierHatches[i]) + .fluidInputs(CI.getTieredFluid(componentTier, 144 * 2)) + .duration(30 * SECONDS) + .eut(GTValues.VP[componentTier]) + .addTo(assemblerRecipes); + + } + } +} diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesRareEarthProcessing.java b/src/main/java/gtPlusPlus/core/recipe/RecipesRareEarthProcessing.java new file mode 100644 index 0000000000..e8597a9f48 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesRareEarthProcessing.java @@ -0,0 +1,168 @@ +package gtPlusPlus.core.recipe; + +import static gregtech.api.recipe.RecipeMaps.brewingRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; +import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; +import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gtPlusPlus.core.material.MaterialMisc.BRINE; +import static gtPlusPlus.core.material.MaterialMisc.HYDROGEN_CHLORIDE; +import static gtPlusPlus.core.material.MaterialMisc.HYDROGEN_CHLORIDE_MIX; +import static gtPlusPlus.core.material.MaterialMisc.RARE_EARTH_HIGH; +import static gtPlusPlus.core.material.MaterialMisc.RARE_EARTH_LOW; +import static gtPlusPlus.core.material.MaterialMisc.RARE_EARTH_MID; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.material.MaterialsOres; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; + +public class RecipesRareEarthProcessing { + + public static void init() { + + // Brine Check and assignment + FluidStack mBrine = FluidUtils.getFluidStack("brine", 1000); + if (mBrine == null) { + Fluid f = BRINE.generateFluid(); + BRINE.registerComponentForMaterial(FluidUtils.getFluidStack(f, 1000)); + mBrine = BRINE.getFluidStack(1000); + } else { + BRINE.registerComponentForMaterial(FluidUtils.getFluidStack(mBrine, 1000)); + } + + // Hydrogen Chloride Check and assignment + FluidStack mHydrogenChloride = FluidUtils.getFluidStack("hydrogenchloride", 1000); + if (mHydrogenChloride == null) { + HYDROGEN_CHLORIDE.generateFluid(); + mHydrogenChloride = BRINE.getFluidStack(1000); + } else { + HYDROGEN_CHLORIDE.registerComponentForMaterial(FluidUtils.getFluidStack(mHydrogenChloride, 1000)); + } + + // Add Process for creating Brine + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Salt, 16L)) + .fluidInputs(Materials.SaltWater.getFluid(2000L)) + .fluidOutputs(FluidUtils.getFluidStack(mBrine, 4000)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(brewingRecipes); + + // Chloralkali process + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1), ItemList.Cell_Empty.get(2L)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Chlorine, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.SodiumHydroxide, 1L)) + .fluidInputs(FluidUtils.getFluidStack(mBrine, 2000)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(electrolyzerRecipes); + + // Generate Special Laser Recipe + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Chlorine, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, Materials.Hydrogen, 1L), + CI.getNumberedBioCircuit(2)) + .itemOutputs(ItemUtils.getSimpleStack(ModItems.cellHydrogenChlorideMix, 2)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GregtechItemList.Laser_Lens_WoodsGlass.get(0)) + .fluidInputs(HYDROGEN_CHLORIDE_MIX.getFluidStack(4000)) + .fluidOutputs(HYDROGEN_CHLORIDE.getFluidStack(4000)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .noOptimize() + .addTo(laserEngraverRecipes); + + // Set Material Tiers correctly + MaterialsOres.GREENOCKITE.vTier = 1; + RARE_EARTH_LOW.vTier = 1; + RARE_EARTH_MID.vTier = 3; + RARE_EARTH_HIGH.vTier = 5; + + // Set Material Voltages correctly + MaterialsOres.GREENOCKITE.vVoltageMultiplier = 30; + RARE_EARTH_LOW.vVoltageMultiplier = 30; + RARE_EARTH_MID.vVoltageMultiplier = 480; + RARE_EARTH_HIGH.vVoltageMultiplier = 7680; + + // Set Material Tooltips to be shorter + RARE_EARTH_LOW.vChemicalFormula = "??????"; + RARE_EARTH_MID.vChemicalFormula = "??????"; + RARE_EARTH_HIGH.vChemicalFormula = "??????"; + + // Set Material Tooltips to be shorter + RARE_EARTH_LOW.vChemicalSymbol = "??"; + RARE_EARTH_MID.vChemicalSymbol = "??"; + RARE_EARTH_HIGH.vChemicalSymbol = "??"; + + // Generate Ore Materials + MaterialGenerator.generateOreMaterial(RARE_EARTH_LOW); + MaterialGenerator.generateOreMaterial(RARE_EARTH_MID); + MaterialGenerator.generateOreMaterial(RARE_EARTH_HIGH); + + // industrial strength HCl + Fluid aHydrochloric = FluidUtils.getFluidStack("hydrogenchloride", 1) + .getFluid(); + + // LV Rare Earth + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.RareEarth, 3L)) + .itemOutputs(RARE_EARTH_LOW.getCrushed(2), RARE_EARTH_LOW.getCrushed(2), RARE_EARTH_LOW.getCrushed(2)) + .fluidInputs(Materials.SulfuricAcid.getFluid(1000L)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(chemicalBathRecipes); + + // HV Rare Earth + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.RareEarth, 3L)) + .itemOutputs(RARE_EARTH_MID.getCrushed(2), RARE_EARTH_MID.getCrushed(2), RARE_EARTH_MID.getCrushed(2)) + .outputChances(10000, 9000, 8000) + .fluidInputs(FluidUtils.getFluidStack(aHydrochloric, 1000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(chemicalBathRecipes); + + // IV Rare Earth + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.RareEarth, 3L)) + .itemOutputs(RARE_EARTH_HIGH.getCrushed(2), RARE_EARTH_HIGH.getCrushed(2), RARE_EARTH_HIGH.getCrushed(2)) + .outputChances(10000, 9000, 8000) + .fluidInputs(FluidUtils.getHydrofluoricAcid(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(chemicalBathRecipes); + + // IV Rare Earth + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.RareEarth, 3L)) + .itemOutputs(RARE_EARTH_HIGH.getCrushed(2), RARE_EARTH_HIGH.getCrushed(2), RARE_EARTH_HIGH.getCrushed(2)) + .outputChances(9000, 8000, 7000) + .fluidInputs(Materials.HydrofluoricAcid.getFluid(2000L)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(chemicalBathRecipes); + } +} diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesSeleniumProcessing.java b/src/main/java/gtPlusPlus/core/recipe/RecipesSeleniumProcessing.java new file mode 100644 index 0000000000..68f38dc5c2 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesSeleniumProcessing.java @@ -0,0 +1,154 @@ +package gtPlusPlus.core.recipe; + +import static gregtech.api.recipe.RecipeMaps.pyrolyseRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.alloyBlastSmelterRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.MaterialUtils; + +public class RecipesSeleniumProcessing { + + public static void init() { + + // We need this + MaterialUtils.generateSpecialDustAndAssignToAMaterial(MaterialMisc.SELENIUM_DIOXIDE, false); + + // Makes Selenium Dioxide + processCopperRecipes(); + + // Liquify the Dried Dioxide + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(13), MaterialMisc.SELENIUM_DIOXIDE.getDust(1)) + .fluidInputs(FluidUtils.getSteam(500)) + .fluidOutputs(MaterialMisc.SELENIUM_DIOXIDE.getFluidStack(1000)) + .duration(24 * SECONDS) + .eut(1024) + .addTo(pyrolyseRecipes); + + // Produce Selenious Acid + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(14), MaterialMisc.SELENIUM_DIOXIDE.getCell(1)) + .itemOutputs(CI.emptyCells(1)) + .fluidInputs(FluidUtils.getHotWater(4000)) + .fluidOutputs(MaterialMisc.SELENIOUS_ACID.getFluidStack(1000)) + .duration(24 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(pyrolyseRecipes); + + // Make Selenium + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(14), MaterialsElements.getInstance().CARBON.getDust(16)) + .itemOutputs( + MaterialsElements.getInstance().SELENIUM.getIngot(1), + MaterialsElements.getInstance().SELENIUM.getIngot(1)) + .outputChances(100_00, 20_00) + .fluidInputs(MaterialMisc.SELENIOUS_ACID.getFluidStack(750), Materials.SulfuricAcid.getFluid(8000)) + .fluidOutputs(MaterialsElements.getInstance().SELENIUM.getFluidStack(144 * 1)) + .eut(TierEU.RECIPE_IV) + .duration(5 * MINUTES) + .addTo(alloyBlastSmelterRecipes); + } + + public static void processCopperRecipes() { + + // Copper + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(23), + ItemUtils.getOrePrefixStack(OrePrefixes.crushedPurified, Materials.Copper, 1)) + .itemOutputs( + ItemUtils.getOrePrefixStack(OrePrefixes.crushedCentrifuged, Materials.Copper, 1), + MaterialMisc.SELENIUM_DIOXIDE.getDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1)) + .outputChances(100_00, 1_00, 1_00, 5_00, 5_00, 5_00, 10_00, 10_00, 10_00) + .fluidInputs(FluidUtils.getHotWater(1000)) + .fluidOutputs(MaterialMisc.SELENIUM_DIOXIDE.getFluidStack(20)) + .eut(1024) + .duration(40 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + // Tetra + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(23), + ItemUtils.getOrePrefixStack(OrePrefixes.crushedPurified, Materials.Tetrahedrite, 1)) + .itemOutputs( + ItemUtils.getOrePrefixStack(OrePrefixes.crushedCentrifuged, Materials.Tetrahedrite, 1), + MaterialMisc.SELENIUM_DIOXIDE.getDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1)) + .outputChances(100_00, 1_00, 1_00, 3_00, 3_00, 3_00, 8_00, 8_00, 8_00) + .fluidInputs(FluidUtils.getHotWater(1000)) + .fluidOutputs(MaterialMisc.SELENIUM_DIOXIDE.getFluidStack(10)) + .eut(1024) + .duration(40 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + // Chalco + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(23), + ItemUtils.getOrePrefixStack(OrePrefixes.crushedPurified, Materials.Chalcopyrite, 1)) + .itemOutputs( + ItemUtils.getOrePrefixStack(OrePrefixes.crushedCentrifuged, Materials.Chalcopyrite, 1), + MaterialMisc.SELENIUM_DIOXIDE.getDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1)) + .outputChances(100_00, 1_00, 1_00, 3_00, 3_00, 3_00, 8_00, 8_00, 8_00) + .fluidInputs(FluidUtils.getHotWater(1000)) + .fluidOutputs(MaterialMisc.SELENIUM_DIOXIDE.getFluidStack(10)) + .eut(1024) + .duration(40 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + // Malachite + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(23), + ItemUtils.getOrePrefixStack(OrePrefixes.crushedPurified, Materials.Malachite, 1)) + .itemOutputs( + ItemUtils.getOrePrefixStack(OrePrefixes.crushedCentrifuged, Materials.Malachite, 1), + MaterialMisc.SELENIUM_DIOXIDE.getDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getSmallDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1), + MaterialMisc.SELENIUM_DIOXIDE.getTinyDust(1)) + .outputChances(100_00, 1_00, 1_00, 3_00, 3_00, 3_00, 8_00, 8_00, 8_00) + .fluidInputs(FluidUtils.getHotWater(1000)) + .fluidOutputs(MaterialMisc.SELENIUM_DIOXIDE.getFluidStack(10)) + .eut(1024) + .duration(40 * SECONDS) + .addTo(chemicalDehydratorRecipes); + } +} diff --git a/src/main/java/gtPlusPlus/core/recipe/RecipesTools.java b/src/main/java/gtPlusPlus/core/recipe/RecipesTools.java new file mode 100644 index 0000000000..f8fa439021 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/recipe/RecipesTools.java @@ -0,0 +1,118 @@ +package gtPlusPlus.core.recipe; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipesTools { + + // Outputs + public static ItemStack RECIPE_SandStone = new ItemStack(Blocks.sandstone, 2); + public static ItemStack RECIPE_Sand = new ItemStack(Blocks.sand, 4); + + public static ItemStack RECIPE_DivisionSigil; + + // MC Items + public static Item Apple = Items.apple; + + // MC Blocks + public static Block CobbleStone = Blocks.cobblestone; + public static Block Dirt = Blocks.dirt; + public static Block Sand = Blocks.sand; + public static Block Gravel = Blocks.gravel; + public static Block Sandstone = Blocks.sandstone; + + // null + public static String empty = " "; + + // Batteries + public static String batteryBasic = "batteryBasic"; + public static String batteryAdvanced = "batteryAdvanced"; + public static String batteryElite = "batteryElite"; + public static String batteryMaster = "batteryMaster"; + public static String batteryUltimate = "batteryUltimate"; + + // Circuits + public static String circuitPrimitive = "circuitPrimitive"; + public static String circuitBasic = "circuitBasic"; + public static String circuitGood = "circuitGood"; + public static String circuitAdvanced = "circuitAdvanced"; + public static String circuitElite = "circuitElite"; + public static String circuitMaster = "circuitMaster"; + public static String circuitUltimate = "circuitUltimate"; + + // Cables + public static String cableGt01Electrum = "cableGt01Electrum"; + public static String cableGt02Electrum = "cableGt02Electrum"; + public static String cableGt01RedstoneAlloy = "cableGt01RedstoneAlloy"; + public static String cableGt02RedstoneAlloy = "cableGt02RedstoneAlloy"; + public static String cableGt01Copper = "cableGt01Copper"; + public static String cableGt02Copper = "cableGt02Copper"; + public static String cableGt01AnnealedCopper = "cableGt01AnnealedCopper"; + public static String cableGt02AnnealedCopper = "cableGt02AnnealedCopper"; + + // Rods + public static String stickWood = "stickWood"; + public static String stickStaballoy = "stickStaballoy"; + public static String stickTitanium = "stickTitanium"; + public static String stickIron = "stickIron"; + public static String stickGold = "stickGold"; + public static String stickSilver = "stickSilver"; + public static String stickSteel = "stickSteel"; + public static String stickBronze = "stickBronze"; + public static String stickTungsten = "stickTungsten"; + public static String stickRedAlloy = "stickRedAlloy"; + public static String stickInvar = "stickInvar"; + public static String stickElectrum = "stickElectrum"; + public static String stickElectricalSteel = "stickElectricalSteel"; + + // Plates + public static String plateStaballoy = "plateStaballoy"; + public static String plateTitanium = "plateTitanium"; + public static String plateIron = "plateIron"; + public static String plateGold = "plateGold"; + public static String plateSilver = "plateSilver"; + public static String plateSteel = "plateSteel"; + public static String plateBronze = "plateBronze"; + public static String plateTungsten = "plateTungsten"; + public static String plateRedAlloy = "plateRedAlloy"; + public static String plateInvar = "plateInvar"; + public static String plateElectrum = "plateElectrum"; + public static String plateElectricalSteel = "plateElectricalSteel"; + + // Ingots + public static String ingotStaballoy = "ingotStaballoy"; + public static String ingotTitanium = "ingotTitanium"; + public static String ingotIron = "ingotIron"; + public static String ingotGold = "ingotGold"; + public static String ingotSilver = "ingotSilver"; + public static String ingotSteel = "ingotSteel"; + public static String ingotBronze = "ingotBronze"; + public static String ingotTungsten = "ingotTungsten"; + public static String ingotRedAlloy = "ingotRedAlloy"; + public static String ingotInvar = "ingotInvar"; + public static String ingotElectrum = "ingotElectrum"; + public static String ingotUranium = "ingotUranium"; + public static String ingotElectricalSteel = "ingotElectricalSteel"; + + // Crafting Tools + public static String craftingToolHardHammer = "craftingToolHardHammer"; + public static String craftingToolSoftHammer = "craftingToolSoftHammer"; + public static String craftingToolFile = "craftingToolFile"; + public static String craftingToolSaw = "craftingToolSaw"; + public static String craftingToolPickaxe = "craftingToolPickaxe"; + public static String craftingToolWrench = "craftingToolWrench"; + public static String craftingToolCrowbar = "craftingToolCrowbar"; + public static String craftingToolKnife = "craftingToolKnife"; + public static String craftingToolScrewdriver = "craftingToolScrewdriver"; + + public static ItemStack personalCloakingDevice = ItemUtils.getSimpleStack(ModItems.itemPersonalCloakingDevice); + public static String plateDoubleNiChrome = "plateDoubleNichrome"; + public static String plateIridiumAlloy = "plateAlloyIridium"; + +} diff --git a/src/main/java/gtPlusPlus/core/recipe/common/CI.java b/src/main/java/gtPlusPlus/core/recipe/common/CI.java index a26887ad1f..addc3df7e4 100644 --- a/src/main/java/gtPlusPlus/core/recipe/common/CI.java +++ b/src/main/java/gtPlusPlus/core/recipe/common/CI.java @@ -4,21 +4,21 @@ import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.util.ExternalMaterials; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.item.chemistry.AgriculturalChem; import gtPlusPlus.core.item.chemistry.GenericChem; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.ELEMENT; import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.recipe.LOADER_Machine_Components; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.recipe.LoaderMachineComponents; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -31,11 +31,11 @@ public class CI { public static ItemStack _NULL = ItemUtils.getErrorStack(1); // bits - public static long bits = GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED; - public static long bitsd = GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED; + public static long bits = GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED; + public static long bitsd = GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED; // Circuits public static Object circuitPrimitive; @@ -265,17 +265,17 @@ public class CI { } else if (tier == 3) { return Materials.Steel; } else if (tier == 4) { - return ALLOY.EGLIN_STEEL; + return MaterialsAlloy.EGLIN_STEEL; } else if (tier == 5) { return Materials.Aluminium; } else if (tier == 6) { - return ALLOY.MARAGING250; + return MaterialsAlloy.MARAGING250; } else if (tier == 7) { - return ALLOY.TANTALLOY_61; + return MaterialsAlloy.TANTALLOY_61; } else if (tier == 8) { - return ALLOY.INCONEL_792; + return MaterialsAlloy.INCONEL_792; } else if (tier == 9) { - return ALLOY.ZERON_100; + return MaterialsAlloy.ZERON_100; } else if (tier == 10) { return Materials.NaquadahEnriched; } else if (tier == 11) { @@ -405,26 +405,31 @@ public class CI { gearboxCasing_Tier_4 = ItemList.Casing_Gearbox_TungstenSteel.get(1); // Machine Components - LOADER_Machine_Components.initialise(); + LoaderMachineComponents.initialise(); } public static ItemStack emptyCells(int i) { return ItemUtils.getEmptyCell(i); } - private static final Material[] aMaterial_Main = new Material[] { ALLOY.POTIN, ALLOY.TUMBAGA, ALLOY.EGLIN_STEEL, - ALLOY.TANTALUM_CARBIDE, ALLOY.INCOLOY_DS, ALLOY.INCONEL_625, ALLOY.ZERON_100, ALLOY.PIKYONIUM, - ELEMENT.STANDALONE.ADVANCED_NITINOL, ALLOY.ABYSSAL, ALLOY.QUANTUM, ELEMENT.STANDALONE.HYPOGEN }; + private static final Material[] aMaterial_Main = new Material[] { MaterialsAlloy.POTIN, MaterialsAlloy.TUMBAGA, + MaterialsAlloy.EGLIN_STEEL, MaterialsAlloy.TANTALUM_CARBIDE, MaterialsAlloy.INCOLOY_DS, + MaterialsAlloy.INCONEL_625, MaterialsAlloy.ZERON_100, MaterialsAlloy.PIKYONIUM, + MaterialsElements.STANDALONE.ADVANCED_NITINOL, MaterialsAlloy.ABYSSAL, MaterialsAlloy.QUANTUM, + MaterialsElements.STANDALONE.HYPOGEN }; - private static final Material[] aMaterial_Secondary = new Material[] { ALLOY.STEEL, ALLOY.SILICON_CARBIDE, - ALLOY.BLOODSTEEL, ALLOY.TANTALUM_CARBIDE, ALLOY.INCONEL_792, ALLOY.ARCANITE, ALLOY.LAFIUM, ALLOY.CINOBITE, - ALLOY.TITANSTEEL, ALLOY.OCTIRON, ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN, ELEMENT.STANDALONE.HYPOGEN }; + private static final Material[] aMaterial_Secondary = new Material[] { MaterialsAlloy.STEEL, + MaterialsAlloy.SILICON_CARBIDE, MaterialsAlloy.BLOODSTEEL, MaterialsAlloy.TANTALUM_CARBIDE, + MaterialsAlloy.INCONEL_792, MaterialsAlloy.ARCANITE, MaterialsAlloy.LAFIUM, MaterialsAlloy.CINOBITE, + MaterialsAlloy.TITANSTEEL, MaterialsAlloy.OCTIRON, MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN, + MaterialsElements.STANDALONE.HYPOGEN }; - private static final Material[] aMaterial_Tertiary = new Material[] { ELEMENT.getInstance().LEAD, - ELEMENT.getInstance().ALUMINIUM, ELEMENT.STANDALONE.BLACK_METAL, ELEMENT.getInstance().TITANIUM, - ALLOY.HASTELLOY_N, ALLOY.ENERGYCRYSTAL, ALLOY.TRINIUM_NAQUADAH_CARBON, ALLOY.TRINIUM_REINFORCED_STEEL, // Arceus - ALLOY.TITANSTEEL, ELEMENT.STANDALONE.ASTRAL_TITANIUM, ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN, - ELEMENT.STANDALONE.HYPOGEN }; + private static final Material[] aMaterial_Tertiary = new Material[] { MaterialsElements.getInstance().LEAD, + MaterialsElements.getInstance().ALUMINIUM, MaterialsElements.STANDALONE.BLACK_METAL, + MaterialsElements.getInstance().TITANIUM, MaterialsAlloy.HASTELLOY_N, MaterialsAlloy.ENERGYCRYSTAL, + MaterialsAlloy.TRINIUM_NAQUADAH_CARBON, MaterialsAlloy.TRINIUM_REINFORCED_STEEL, // Arceus + MaterialsAlloy.TITANSTEEL, MaterialsElements.STANDALONE.ASTRAL_TITANIUM, + MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN, MaterialsElements.STANDALONE.HYPOGEN }; private static final Materials[] aMaterial_Cables = new Materials[] { Materials.Tin, Materials.Cobalt, Materials.AnnealedCopper, Materials.Gold, Materials.Titanium, Materials.Nichrome, Materials.Platinum, @@ -454,7 +459,7 @@ public class CI { if (a == null) { ItemStack aCell = getTieredComponent(OrePrefixes.liquid, aTier, 1); if (aCell != null) { - a = GT_Utility.getFluidForFilledItem(aCell, true); + a = GTUtility.getFluidForFilledItem(aCell, true); a.amount = aAmount; } } @@ -517,7 +522,7 @@ public class CI { } if (aPrefix == OrePrefixes.circuit) { - return GT_OreDictUnificator.get(OrePrefixes.circuit, aMaterial_Circuits[aTier], aAmount); + return GTOreDictUnificator.get(OrePrefixes.circuit, aMaterial_Circuits[aTier], aAmount); } // Check for Cables first, catch SuperConductor case and swap to wire. @@ -571,11 +576,11 @@ public class CI { } else if (aTier == 4) { return ItemUtils.getOrePrefixStack(aPrefix, Materials.TungstenSteel, aAmount); } else if (aTier == 5) { - return ItemUtils.getOrePrefixStack(aPrefix, ALLOY.MARAGING350, aAmount); + return ItemUtils.getOrePrefixStack(aPrefix, MaterialsAlloy.MARAGING350, aAmount); } else if (aTier == 6) { - return ItemUtils.getOrePrefixStack(aPrefix, ALLOY.STABALLOY, aAmount); + return ItemUtils.getOrePrefixStack(aPrefix, MaterialsAlloy.STABALLOY, aAmount); } else if (aTier == 7) { - return ItemUtils.getOrePrefixStack(aPrefix, ALLOY.HASTELLOY_X, aAmount); + return ItemUtils.getOrePrefixStack(aPrefix, MaterialsAlloy.HASTELLOY_X, aAmount); } else if (aTier == 8) { return ItemUtils.getOrePrefixStack(aPrefix, Materials.Ultimate, aAmount); } else if (aTier == 9) { @@ -926,7 +931,7 @@ public class CI { if (i > 8) { i = 8; } - return ItemUtils.simpleMetaStack(GregTech_API.sBlockCasings5, i, 1); + return ItemUtils.simpleMetaStack(GregTechAPI.sBlockCasings5, i, 1); } public static ItemStack getNumberedBioCircuit(int i) { diff --git a/src/main/java/gtPlusPlus/core/slots/SlotDataStick.java b/src/main/java/gtPlusPlus/core/slots/SlotDataStick.java index 3b39da877a..066213aed2 100644 --- a/src/main/java/gtPlusPlus/core/slots/SlotDataStick.java +++ b/src/main/java/gtPlusPlus/core/slots/SlotDataStick.java @@ -4,7 +4,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.core.recipe.common.CI; public class SlotDataStick extends Slot { @@ -26,8 +26,8 @@ public class SlotDataStick extends Slot { mDataItems[1] = CI.getDataOrb(); } if (mDataItems[0] != null && mDataItems[1] != null) { - if (GT_Utility.areStacksEqual(itemstack, mDataItems[0], true) - || GT_Utility.areStacksEqual(itemstack, mDataItems[1], true)) { + if (GTUtility.areStacksEqual(itemstack, mDataItems[0], true) + || GTUtility.areStacksEqual(itemstack, mDataItems[1], true)) { isValid = true; } } diff --git a/src/main/java/gtPlusPlus/core/slots/SlotIntegratedCircuit.java b/src/main/java/gtPlusPlus/core/slots/SlotIntegratedCircuit.java index 5e4072df6a..6eac7a78ee 100644 --- a/src/main/java/gtPlusPlus/core/slots/SlotIntegratedCircuit.java +++ b/src/main/java/gtPlusPlus/core/slots/SlotIntegratedCircuit.java @@ -5,7 +5,7 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.core.recipe.common.CI; public class SlotIntegratedCircuit extends Slot { @@ -40,7 +40,7 @@ public class SlotIntegratedCircuit extends Slot { public static synchronized boolean isItemValidForSlot(int aLockedCircuitNumber, final ItemStack itemstack) { boolean isValid = false; if (mCircuitItem == null) { - mCircuitItem = GT_Utility.getIntegratedCircuit(0) + mCircuitItem = GTUtility.getIntegratedCircuit(0) .getItem(); } if (mCircuitItem2 == null) { @@ -76,7 +76,7 @@ public class SlotIntegratedCircuit extends Slot { */ public static synchronized int isRegularProgrammableCircuit(final ItemStack itemstack) { if (mCircuitItem == null) { - mCircuitItem = GT_Utility.getIntegratedCircuit(0) + mCircuitItem = GTUtility.getIntegratedCircuit(0) .getItem(); } if (mCircuitItem2 == null) { diff --git a/src/main/java/gtPlusPlus/core/tileentities/ModTileEntities.java b/src/main/java/gtPlusPlus/core/tileentities/ModTileEntities.java index 56cf2fdbab..cfc152d832 100644 --- a/src/main/java/gtPlusPlus/core/tileentities/ModTileEntities.java +++ b/src/main/java/gtPlusPlus/core/tileentities/ModTileEntities.java @@ -3,7 +3,7 @@ package gtPlusPlus.core.tileentities; import cpw.mods.fml.common.registry.GameRegistry; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.block.general.BlockSuperLight.TileEntitySuperLight; -import gtPlusPlus.core.block.machine.Machine_SuperJukebox.TileEntitySuperJukebox; +import gtPlusPlus.core.block.machine.BlockSuperJukebox.TileEntitySuperJukebox; import gtPlusPlus.core.tileentities.general.TileEntityCircuitProgrammer; import gtPlusPlus.core.tileentities.general.TileEntityDecayablesChest; import gtPlusPlus.core.tileentities.general.TileEntityFishTrap; diff --git a/src/main/java/gtPlusPlus/core/tileentities/base/TileEntityBase.java b/src/main/java/gtPlusPlus/core/tileentities/base/TileEntityBase.java index 98f1d67439..d5d348e0d8 100644 --- a/src/main/java/gtPlusPlus/core/tileentities/base/TileEntityBase.java +++ b/src/main/java/gtPlusPlus/core/tileentities/base/TileEntityBase.java @@ -15,16 +15,16 @@ import net.minecraft.world.biome.BiomeGenBase; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.IFluidHandler; -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; +import gregtech.GTMod; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.interfaces.IDescribable; import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.net.GT_Packet_Block_Event; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.net.GTPacketBlockEvent; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; import gregtech.api.util.ISerializableObject; import gregtech.common.covers.CoverInfo; import gtPlusPlus.api.interfaces.ILazyCoverable; @@ -297,9 +297,9 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT return this.canAccessData() ? this.mInventory.isValidSlot(aIndex) : false; } - private final GT_CoverBehavior[] mCoverBehaviors = new GT_CoverBehavior[] { GregTech_API.sNoBehavior, - GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, - GregTech_API.sNoBehavior }; + private final CoverBehavior[] mCoverBehaviors = new CoverBehavior[] { GregTechAPI.sNoBehavior, + GregTechAPI.sNoBehavior, GregTechAPI.sNoBehavior, GregTechAPI.sNoBehavior, GregTechAPI.sNoBehavior, + GregTechAPI.sNoBehavior }; protected TileEntityBase mMetaTileEntity; protected long mStoredEnergy = 0; protected int mAverageEUInputIndex = 0, mAverageEUOutputIndex = 0; @@ -309,7 +309,7 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT mActiveEUOutputs = new boolean[] { false, false, false, false, false, false }; private byte[] mSidedRedstone = new byte[] { 15, 15, 15, 15, 15, 15 }; private int[] mCoverSides = new int[] { 0, 0, 0, 0, 0, 0 }, mCoverData = new int[] { 0, 0, 0, 0, 0, 0 }, - mTimeStatistics = new int[GregTech_API.TICKS_FOR_LAG_AVERAGING]; + mTimeStatistics = new int[GregTechAPI.TICKS_FOR_LAG_AVERAGING]; private boolean mHasEnoughEnergy = true; protected boolean mRunningThroughTick = false; protected boolean mInputDisabled = false; @@ -763,14 +763,14 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT public final boolean getOpacity(int aX, int aY, int aZ) { return this.ignoreUnloadedChunks && this.crossedChunkBorder(aX, aZ) && !this.worldObj.blockExists(aX, aY, aZ) ? false - : GT_Utility.isOpaqueBlock(this.worldObj, aX, aY, aZ); + : GTUtility.isOpaqueBlock(this.worldObj, aX, aY, aZ); } @Override public final boolean getAir(int aX, int aY, int aZ) { return this.ignoreUnloadedChunks && this.crossedChunkBorder(aX, aZ) && !this.worldObj.blockExists(aX, aY, aZ) ? true - : GT_Utility.isBlockAir(this.worldObj, aX, aY, aZ); + : GTUtility.isBlockAir(this.worldObj, aX, aY, aZ); } @Override @@ -846,9 +846,9 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT @Override public final void sendBlockEvent(byte aID, byte aValue) { - GT_Values.NW.sendPacketToAllPlayersInRange( + GTValues.NW.sendPacketToAllPlayersInRange( this.worldObj, - new GT_Packet_Block_Event(this.xCoord, (short) this.yCoord, this.zCoord, aID, aValue), + new GTPacketBlockEvent(this.xCoord, (short) this.yCoord, this.zCoord, aID, aValue), this.xCoord, this.zCoord); } @@ -858,7 +858,7 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT } public final void setOnFire() { - GT_Utility.setCoordsOnFire(this.worldObj, this.xCoord, this.yCoord, this.zCoord, false); + GTUtility.setCoordsOnFire(this.worldObj, this.xCoord, this.yCoord, this.zCoord, false); } public final void setToFire() { @@ -926,8 +926,8 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT } @Override - public GT_CoverBehavior getCoverBehaviorAtSide(ForgeDirection side) { - return side != ForgeDirection.UNKNOWN ? mCoverBehaviors[side.ordinal()] : GregTech_API.sNoBehavior; + public CoverBehavior getCoverBehaviorAtSide(ForgeDirection side) { + return side != ForgeDirection.UNKNOWN ? mCoverBehaviors[side.ordinal()] : GregTechAPI.sNoBehavior; } @Override @@ -944,7 +944,7 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT final int ordinalSide = side.ordinal(); mCoverSides[ordinalSide] = aID; mCoverData[ordinalSide] = 0; - mCoverBehaviors[ordinalSide] = (GT_CoverBehavior) GregTech_API.getCoverBehaviorNew(aID); + mCoverBehaviors[ordinalSide] = (CoverBehavior) GregTechAPI.getCoverBehaviorNew(aID); return true; } return false; @@ -958,7 +958,7 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT @Override public void setCoverItemAtSide(ForgeDirection side, ItemStack aCover) { - GregTech_API.getCoverBehaviorNew(aCover) + GregTechAPI.getCoverBehaviorNew(aCover) .placeCover(side, aCover, this); } @@ -970,7 +970,7 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT @Override public ItemStack getCoverItemAtSide(ForgeDirection side) { - return GT_Utility.intToStack(getCoverIDAtSide(side)); + return GTUtility.intToStack(getCoverIDAtSide(side)); } @Override @@ -1056,12 +1056,12 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT } public String getOwnerName() { - if (GT_Utility.isStringInvalid(mOwnerName)) return "Player"; + if (GTUtility.isStringInvalid(mOwnerName)) return "Player"; return mOwnerName; } public String setOwnerName(String aName) { - if (GT_Utility.isStringInvalid(aName)) return mOwnerName = "Player"; + if (GTUtility.isStringInvalid(aName)) return mOwnerName = "Player"; return mOwnerName = aName; } @@ -1222,15 +1222,15 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT @Override public boolean addStackToSlot(int aIndex, ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return true; + if (GTUtility.isStackInvalid(aStack)) return true; if (aIndex < 0 || aIndex >= getSizeInventory()) return false; ItemStack tStack = getStackInSlot(aIndex); - if (GT_Utility.isStackInvalid(tStack)) { + if (GTUtility.isStackInvalid(tStack)) { setInventorySlotContents(aIndex, aStack); return true; } - aStack = GT_OreDictUnificator.get(aStack); - if (GT_Utility.areStacksEqual(tStack, aStack) + aStack = GTOreDictUnificator.get(aStack); + if (GTUtility.areStacksEqual(tStack, aStack) && tStack.stackSize + aStack.stackSize <= Math.min(aStack.getMaxStackSize(), getInventoryStackLimit())) { tStack.stackSize += aStack.stackSize; return true; @@ -1240,7 +1240,7 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT @Override public boolean addStackToSlot(int aIndex, ItemStack aStack, int aAmount) { - return addStackToSlot(aIndex, GT_Utility.copyAmount(aAmount, aStack)); + return addStackToSlot(aIndex, GTUtility.copyAmount(aAmount, aStack)); } @Override @@ -1290,8 +1290,8 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT this.doExplosion( this.oOutput * (long) (this.getUniversalEnergyStored() >= this.getUniversalEnergyCapacity() ? 4 : (this.getUniversalEnergyStored() >= this.getUniversalEnergyCapacity() / 2L ? 2 : 1))); - GT_Mod arg9999 = GT_Mod.instance; - GT_Mod.achievements.issueAchievement( + GTMod arg9999 = GTMod.instance; + GTMod.achievements.issueAchievement( this.getWorldObj() .getPlayerEntityByName(this.mOwnerName), "electricproblems"); @@ -1300,10 +1300,10 @@ public class TileEntityBase extends TileEntity implements ILazyCoverable, IGregT public void doExplosion(long aAmount) { if (this.canAccessData()) { - if (GregTech_API.sMachineWireFire && this.mMetaTileEntity.isElectric()) { + if (GregTechAPI.sMachineWireFire && this.mMetaTileEntity.isElectric()) { try { this.mReleaseEnergy = true; - Util.emitEnergyToNetwork(GT_Values.V[5], Math.max(1L, this.getStoredEU() / GT_Values.V[5]), this); + Util.emitEnergyToNetwork(GTValues.V[5], Math.max(1L, this.getStoredEU() / GTValues.V[5]), this); } catch (Exception arg4) {} } this.mReleaseEnergy = false; diff --git a/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityCircuitProgrammer.java b/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityCircuitProgrammer.java index ce28dd0b3e..113440e8b5 100644 --- a/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityCircuitProgrammer.java +++ b/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityCircuitProgrammer.java @@ -9,7 +9,7 @@ import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.inventories.InventoryCircuitProgrammer; import gtPlusPlus.core.recipe.common.CI; @@ -109,7 +109,7 @@ public class TileEntityCircuitProgrammer extends TileEntity implements ISidedInv // Check Circuit Type ItemStack aOutput; if (aTypeInSlot == 0) { - aOutput = GT_Utility.getIntegratedCircuit(e); + aOutput = GTUtility.getIntegratedCircuit(e); } else if (aTypeInSlot == 1) { aOutput = CI.getNumberedBioCircuit(e); } else if (aTypeInSlot == 2) { diff --git a/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityDecayablesChest.java b/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityDecayablesChest.java index 4b3fd3f087..a6754b00b0 100644 --- a/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityDecayablesChest.java +++ b/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityDecayablesChest.java @@ -25,13 +25,13 @@ import com.cleanroommc.modularui.widgets.TextWidget; import com.cleanroommc.modularui.widgets.slot.SlotGroup; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.inventories.Inventory_DecayablesChest; +import gtPlusPlus.core.inventories.InventoryDecayablesChest; import gtPlusPlus.core.item.materials.DustDecayable; import gtPlusPlus.core.util.minecraft.ItemUtils; public class TileEntityDecayablesChest extends TileEntity implements ISidedInventory, IGuiHolder { - private final Inventory_DecayablesChest inventoryContents; + private final InventoryDecayablesChest inventoryContents; /** Determines if the check for adjacent chests has taken place. */ public boolean adjacentChestChecked; @@ -57,10 +57,10 @@ public class TileEntityDecayablesChest extends TileEntity implements ISidedInven private int tickCount = 0; public TileEntityDecayablesChest() { - this.inventoryContents = new Inventory_DecayablesChest(); + this.inventoryContents = new InventoryDecayablesChest(); } - public Inventory_DecayablesChest getInventory() { + public InventoryDecayablesChest getInventory() { return this.inventoryContents; } diff --git a/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityFishTrap.java b/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityFishTrap.java index 1a09b6b423..49d466d70d 100644 --- a/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityFishTrap.java +++ b/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityFishTrap.java @@ -17,7 +17,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.FishingHooks; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.core.block.ModBlocks; import gtPlusPlus.core.inventories.InventoryFishTrap; import gtPlusPlus.core.util.math.MathUtils; @@ -76,7 +76,7 @@ public class TileEntityFishTrap extends TileEntity implements ISidedInventory { } for (final ItemStack contents : this.getInventory() .getInventory()) { - if (GT_Utility.areStacksEqual(loot, contents)) { + if (GTUtility.areStacksEqual(loot, contents)) { if (contents.stackSize < contents.getMaxStackSize()) { contents.stackSize++; this.markDirty(); diff --git a/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityVolumetricFlaskSetter.java b/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityVolumetricFlaskSetter.java index a9bc2b0049..7f1cde2476 100644 --- a/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityVolumetricFlaskSetter.java +++ b/src/main/java/gtPlusPlus/core/tileentities/general/TileEntityVolumetricFlaskSetter.java @@ -12,8 +12,8 @@ import net.minecraftforge.fluids.FluidStack; 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.container.ContainerVolumetricFlaskSetter; +import gtPlusPlus.core.inventories.InventoryVolumetricFlaskSetter; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.PlayerUtils; import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper; @@ -21,7 +21,7 @@ import gtPlusPlus.xmod.gregtech.common.helpers.VolumetricFlaskHelper; public class TileEntityVolumetricFlaskSetter extends TileEntity implements ISidedInventory { private int tickCount = 0; - private final Inventory_VolumetricFlaskSetter inventoryContents; + private final InventoryVolumetricFlaskSetter inventoryContents; private String customName; public int locationX; public int locationY; @@ -30,7 +30,7 @@ public class TileEntityVolumetricFlaskSetter extends TileEntity implements ISide private int aCustomValue = 1000; public TileEntityVolumetricFlaskSetter() { - this.inventoryContents = new Inventory_VolumetricFlaskSetter(); + this.inventoryContents = new InventoryVolumetricFlaskSetter(); this.setTileLocation(); } @@ -62,7 +62,7 @@ public class TileEntityVolumetricFlaskSetter extends TileEntity implements ISide public final boolean hasFlask() { for (int i = 0; i < this.getInventory() .getInventory().length - 1; i++) { - if (i == Container_VolumetricFlaskSetter.SLOT_OUTPUT) { + if (i == ContainerVolumetricFlaskSetter.SLOT_OUTPUT) { continue; } if (this.getInventory() @@ -73,7 +73,7 @@ public class TileEntityVolumetricFlaskSetter extends TileEntity implements ISide return false; } - public Inventory_VolumetricFlaskSetter getInventory() { + public InventoryVolumetricFlaskSetter getInventory() { return this.inventoryContents; } @@ -124,9 +124,9 @@ public class TileEntityVolumetricFlaskSetter extends TileEntity implements ISide // Check if there is output in slot. Boolean hasOutput = false; - if (aInputs[Container_VolumetricFlaskSetter.SLOT_OUTPUT] != null) { + if (aInputs[ContainerVolumetricFlaskSetter.SLOT_OUTPUT] != null) { hasOutput = true; - if (aInputs[Container_VolumetricFlaskSetter.SLOT_OUTPUT].stackSize >= 16) { + if (aInputs[ContainerVolumetricFlaskSetter.SLOT_OUTPUT].stackSize >= 16) { return false; } } @@ -145,7 +145,7 @@ public class TileEntityVolumetricFlaskSetter extends TileEntity implements ISide log("Skipping Custom slot as value <= 0"); continue; } - if (e == Container_VolumetricFlaskSetter.SLOT_OUTPUT) { + if (e == ContainerVolumetricFlaskSetter.SLOT_OUTPUT) { continue; } @@ -163,7 +163,7 @@ public class TileEntityVolumetricFlaskSetter extends TileEntity implements ISide } // Existing Output else { - ItemStack f = aInputs[Container_VolumetricFlaskSetter.SLOT_OUTPUT]; + ItemStack f = aInputs[ContainerVolumetricFlaskSetter.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. @@ -214,7 +214,7 @@ public class TileEntityVolumetricFlaskSetter extends TileEntity implements ISide VolumetricFlaskHelper.setFluid(aOutput, aOutputFluid); } this.setInventorySlotContents(e, aInputStack); - this.setInventorySlotContents(Container_VolumetricFlaskSetter.SLOT_OUTPUT, aOutput); + this.setInventorySlotContents(ContainerVolumetricFlaskSetter.SLOT_OUTPUT, aOutput); return true; } } @@ -359,7 +359,7 @@ public class TileEntityVolumetricFlaskSetter extends TileEntity implements ISide @Override public boolean canExtractItem(final int aSlot, final ItemStack p_102008_2_, final int p_102008_3_) { - return aSlot == Container_VolumetricFlaskSetter.SLOT_OUTPUT; + return aSlot == ContainerVolumetricFlaskSetter.SLOT_OUTPUT; } public String getCustomName() { diff --git a/src/main/java/gtPlusPlus/core/tileentities/machines/TileEntityPestKiller.java b/src/main/java/gtPlusPlus/core/tileentities/machines/TileEntityPestKiller.java index dfdb7104b0..66378f0f7a 100644 --- a/src/main/java/gtPlusPlus/core/tileentities/machines/TileEntityPestKiller.java +++ b/src/main/java/gtPlusPlus/core/tileentities/machines/TileEntityPestKiller.java @@ -27,11 +27,11 @@ import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.oredict.OreDictionary; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.api.objects.minecraft.BTF_FluidTank; import gtPlusPlus.core.inventories.InventoryPestKiller; -import gtPlusPlus.core.material.MISC_MATERIALS; +import gtPlusPlus.core.material.MaterialMisc; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.EntityUtils; @@ -186,7 +186,7 @@ public class TileEntityPestKiller extends TileEntity implements ISidedInventory, if (f != null) { if (f.isFluidEqual(FluidUtils.getWildcardFluidStack("formaldehyde", 1))) { return 1; - } else if (f.isFluidEqual(MISC_MATERIALS.HYDROGEN_CYANIDE.getFluidStack(1))) { + } else if (f.isFluidEqual(MaterialMisc.HYDROGEN_CYANIDE.getFluidStack(1))) { return 2; } } @@ -330,7 +330,7 @@ public class TileEntityPestKiller extends TileEntity implements ISidedInventory, if (this.getInventory() .getInventory()[0] == null) { return true; - } else if (GT_Utility.areStacksEqual( + } else if (GTUtility.areStacksEqual( aStack, this.getInventory() .getInventory()[0])) { @@ -471,7 +471,7 @@ public class TileEntityPestKiller extends TileEntity implements ISidedInventory, ArrayList t2Cells = OreDictionary.getOres("cellHydrogenCyanide"); didFill = addFluid(t1Cells, aInput, FluidUtils.getWildcardFluidStack("formaldehyde", 1000)); if (!didFill) { - didFill = addFluid(t2Cells, aInput, MISC_MATERIALS.HYDROGEN_CYANIDE.getFluidStack(1000)); + didFill = addFluid(t2Cells, aInput, MaterialMisc.HYDROGEN_CYANIDE.getFluidStack(1000)); } } @@ -495,7 +495,7 @@ public class TileEntityPestKiller extends TileEntity implements ISidedInventory, public boolean addFluid(ArrayList inputs, ItemStack aInput, FluidStack aFluidForInput) { for (ItemStack a : inputs) { - if (GT_Utility.areStacksEqual(a, aInput)) { + if (GTUtility.areStacksEqual(a, aInput)) { if (mTank.getFluid() == null || mTank.getFluid() .isFluidEqual(aFluidForInput)) { boolean didFill = fill(ForgeDirection.UNKNOWN, aFluidForInput, true) > 0; diff --git a/src/main/java/gtPlusPlus/core/tileentities/machines/TileEntityProjectTable.java b/src/main/java/gtPlusPlus/core/tileentities/machines/TileEntityProjectTable.java index 7c90ddc1c2..02641f1e08 100644 --- a/src/main/java/gtPlusPlus/core/tileentities/machines/TileEntityProjectTable.java +++ b/src/main/java/gtPlusPlus/core/tileentities/machines/TileEntityProjectTable.java @@ -9,9 +9,9 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import gregtech.api.enums.ItemList; -import gregtech.common.items.GT_MetaGenerated_Item_01; +import gregtech.common.items.MetaGeneratedItem01; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.container.Container_ProjectTable; +import gtPlusPlus.core.container.ContainerProjectTable; import gtPlusPlus.core.inventories.projecttable.InventoryProjectMain; import gtPlusPlus.core.inventories.projecttable.InventoryProjectOutput; import gtPlusPlus.core.util.minecraft.NBTUtils; @@ -28,7 +28,7 @@ public class TileEntityProjectTable extends TileEntity public InventoryProjectMain inventoryGrid; public InventoryProjectOutput inventoryOutputs; - private Container_ProjectTable container; + private ContainerProjectTable container; public TileEntityProjectTable() { this.inventoryGrid = new InventoryProjectMain(); // number of slots - without product slot @@ -36,7 +36,7 @@ public class TileEntityProjectTable extends TileEntity this.canUpdate(); } - public void setContainer(Container_ProjectTable container) { + public void setContainer(ContainerProjectTable container) { this.container = container; } @@ -122,7 +122,7 @@ public class TileEntityProjectTable extends TileEntity // Data stick ItemStack dataStick = this.inventoryOutputs.getStackInSlot(0); if (dataStick != null && this.container != null && container.getOutputContent() != null) { - if ((dataStick.getItem() instanceof GT_MetaGenerated_Item_01 && dataStick.getItemDamage() == 32708) + if ((dataStick.getItem() instanceof MetaGeneratedItem01 && dataStick.getItemDamage() == 32708) || (dataStick == ItemList.Tool_DataStick.get(1)) || (dataStick == GregtechItemList.Old_Tool_DataStick.get(1)) || (dataStick.getItem() instanceof MetaGeneratedGregtechItems diff --git a/src/main/java/gtPlusPlus/core/util/Utils.java b/src/main/java/gtPlusPlus/core/util/Utils.java index 610cc4f8fa..c3c877388b 100644 --- a/src/main/java/gtPlusPlus/core/util/Utils.java +++ b/src/main/java/gtPlusPlus/core/util/Utils.java @@ -26,15 +26,15 @@ import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.EnumUtils; import cpw.mods.fml.common.FMLCommonHandler; -import gregtech.api.GregTech_API; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.TCAspects; +import gregtech.api.enums.TCAspects.TC_AspectStack; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.minecraft.NBTUtils; @@ -56,7 +56,7 @@ public class Utils { .isClient(); } - public static TC_AspectStack getTcAspectStack(final TC_Aspects aspect, final long size) { + public static TC_AspectStack getTcAspectStack(final TCAspects aspect, final long size) { return getTcAspectStack(aspect.name(), (int) size); } @@ -64,7 +64,7 @@ public class Utils { return getTcAspectStack(aspect, (int) size); } - public static TC_AspectStack getTcAspectStack(final TC_Aspects aspect, final int size) { + public static TC_AspectStack getTcAspectStack(final TCAspects aspect, final int size) { return getTcAspectStack(aspect.name(), size); } @@ -75,14 +75,14 @@ public class Utils { if (aspect.equalsIgnoreCase("COGNITIO")) { // Adds in Compat for older GT Versions which Misspell aspects. try { - if (EnumUtils.isValidEnum(TC_Aspects.class, "COGNITIO")) { + if (EnumUtils.isValidEnum(TCAspects.class, "COGNITIO")) { Logger.WARNING("TC Aspect found - " + aspect); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("COGNITIO"), size); + returnValue = new TC_AspectStack(TCAspects.valueOf("COGNITIO"), size); } else { Logger.INFO( "Fallback TC Aspect found - " + aspect + " - PLEASE UPDATE GREGTECH TO A NEWER VERSION TO REMOVE THIS MESSAGE - THIS IS NOT AN ERROR"); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("COGNITO"), size); + returnValue = new TC_AspectStack(TCAspects.valueOf("COGNITO"), size); } } catch (final NoSuchFieldError r) { Logger.INFO("Invalid Thaumcraft Aspects - Report this issue to Alkalus"); @@ -90,14 +90,14 @@ public class Utils { } else if (aspect.equalsIgnoreCase("EXANIMUS")) { // Adds in Compat for older GT Versions which Misspell aspects. try { - if (EnumUtils.isValidEnum(TC_Aspects.class, "EXANIMUS")) { + if (EnumUtils.isValidEnum(TCAspects.class, "EXANIMUS")) { Logger.WARNING("TC Aspect found - " + aspect); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("EXANIMUS"), size); + returnValue = new TC_AspectStack(TCAspects.valueOf("EXANIMUS"), size); } else { Logger.INFO( "Fallback TC Aspect found - " + aspect + " - PLEASE UPDATE GREGTECH TO A NEWER VERSION TO REMOVE THIS MESSAGE - THIS IS NOT AN ERROR"); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("EXAMINIS"), size); + returnValue = new TC_AspectStack(TCAspects.valueOf("EXAMINIS"), size); } } catch (final NoSuchFieldError r) { Logger.INFO("Invalid Thaumcraft Aspects - Report this issue to Alkalus"); @@ -106,21 +106,21 @@ public class Utils { } else if (aspect.equalsIgnoreCase("PRAECANTATIO")) { // Adds in Compat for older GT Versions which Misspell aspects. try { - if (EnumUtils.isValidEnum(TC_Aspects.class, "PRAECANTATIO")) { + if (EnumUtils.isValidEnum(TCAspects.class, "PRAECANTATIO")) { Logger.WARNING("TC Aspect found - " + aspect); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("PRAECANTATIO"), size); + returnValue = new TC_AspectStack(TCAspects.valueOf("PRAECANTATIO"), size); } else { Logger.INFO( "Fallback TC Aspect found - " + aspect + " - PLEASE UPDATE GREGTECH TO A NEWER VERSION TO REMOVE THIS MESSAGE - THIS IS NOT AN ERROR"); - returnValue = new TC_AspectStack(TC_Aspects.valueOf("PRAECANTIO"), size); + returnValue = new TC_AspectStack(TCAspects.valueOf("PRAECANTIO"), size); } } catch (final NoSuchFieldError r) { Logger.INFO("Invalid Thaumcraft Aspects - Report this issue to Alkalus"); } } else { Logger.WARNING("TC Aspect found - " + aspect); - returnValue = new TC_AspectStack(TC_Aspects.valueOf(aspect), size); + returnValue = new TC_AspectStack(TCAspects.valueOf(aspect), size); } return returnValue; @@ -352,17 +352,17 @@ public class Utils { } public static String addBookTitleLocalization(final String aTitle) { - return GT_LanguageManager - .addStringLocalization("Book." + aTitle + ".Name", aTitle, !GregTech_API.sPostloadFinished); + return GTLanguageManager + .addStringLocalization("Book." + aTitle + ".Name", aTitle, !GregTechAPI.sPostloadFinished); } public static String[] addBookPagesLocalization(final String aTitle, final String[] aPages) { String[] aLocalizationPages = new String[aPages.length]; for (byte i = 0; i < aPages.length; i = (byte) (i + 1)) { - aLocalizationPages[i] = GT_LanguageManager.addStringLocalization( + aLocalizationPages[i] = GTLanguageManager.addStringLocalization( "Book." + aTitle + ".Page" + ((i < 10) ? "0" + i : Byte.valueOf(i)), aPages[i], - !GregTech_API.sPostloadFinished); + !GregTechAPI.sPostloadFinished); } return aLocalizationPages; } @@ -370,16 +370,16 @@ public class Utils { public static ItemStack getWrittenBook(ItemStack book, int ID, String mapping, String title, String author, String[] pages) { - if (GT_Utility.isStringInvalid(mapping)) { + if (GTUtility.isStringInvalid(mapping)) { return null; } - ItemStack stack = CORE.sBookList.get(mapping); + ItemStack stack = GTPPCore.sBookList.get(mapping); if (stack != null) { - return GT_Utility.copyAmount(1L, stack); + return GTUtility.copyAmount(1L, stack); } - if (GT_Utility.isStringInvalid(title) || GT_Utility.isStringInvalid(author) || pages.length <= 0) { + if (GTUtility.isStringInvalid(title) || GTUtility.isStringInvalid(author) || pages.length <= 0) { return null; } @@ -400,11 +400,11 @@ public class Utils { NBTList.appendTag(new NBTTagString(pages[i])); } else { Logger.INFO("WARNING: String for written Book too long! -> " + pages[i]); - GT_Log.err.println("WARNING: String for written Book too long! -> " + pages[i]); + GTLog.err.println("WARNING: String for written Book too long! -> " + pages[i]); } } else { Logger.INFO("WARNING: Too much Pages for written Book! -> " + title); - GT_Log.err.println("WARNING: Too much Pages for written Book! -> " + title); + GTLog.err.println("WARNING: Too much Pages for written Book! -> " + title); break; } } @@ -423,14 +423,14 @@ public class Utils { mapping, title, author); - GT_Log.out.println(logMessage); + GTLog.out.println(logMessage); NBTUtils.createIntegerTagCompound(stack, "stats", "mMeta", ID); - CORE.sBookList.put(mapping, stack); + GTPPCore.sBookList.put(mapping, stack); Logger.INFO(String.format("Creating book: %s by %s. Using Meta %d.", title, author, ID)); - return GT_Utility.copy(stack); + return GTUtility.copy(stack); } } diff --git a/src/main/java/gtPlusPlus/core/util/math/MathUtils.java b/src/main/java/gtPlusPlus/core/util/math/MathUtils.java index ac3ef2e947..4fb34bd158 100644 --- a/src/main/java/gtPlusPlus/core/util/math/MathUtils.java +++ b/src/main/java/gtPlusPlus/core/util/math/MathUtils.java @@ -4,15 +4,15 @@ import java.text.NumberFormat; import java.util.Map; import java.util.Random; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.Utils; public class MathUtils { - static final Random rand = CORE.RANDOM; + static final Random rand = GTPPCore.RANDOM; /** Formats a number with group separator and at most 2 fraction digits. */ private static final NumberFormat sNumberFormat = NumberFormat.getInstance(); @@ -273,7 +273,7 @@ public class MathUtils { } public static int safeInt(long number) { - return number > GT_Values.V[GT_Values.V.length - 1] ? safeInt(GT_Values.V[GT_Values.V.length - 1], 1) + return number > GTValues.V[GTValues.V.length - 1] ? safeInt(GTValues.V[GTValues.V.length - 1], 1) : number < Integer.MIN_VALUE ? Integer.MIN_VALUE : (int) number; } @@ -391,7 +391,7 @@ public class MathUtils { /** * Inverts the value, making Positives into Negatives and vice versa. - * + * * @param aPositive - An int value, either positive or negative. * @return - Inverted int Value. */ @@ -484,7 +484,7 @@ public class MathUtils { /** * Balances a number within a range. - * + * * @param aInput - The number to balance * @param aMin - The minimum bounds * @param aMax - The maximum bounds diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/EntityUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/EntityUtils.java index 87bd0e60c6..f0fbd2f253 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/EntityUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/EntityUtils.java @@ -11,7 +11,7 @@ import net.minecraft.util.DamageSource; import net.minecraft.util.MathHelper; import net.minecraft.world.World; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.minecraft.BlockPos; import gtPlusPlus.core.handler.events.EntityDeathHandler; import ic2.core.IC2Potion; @@ -49,7 +49,7 @@ public class EntityUtils { if ((radiationLevel > 0) && (entityHolding instanceof final EntityLivingBase entityLiving)) { if (!((EntityPlayer) entityHolding).capabilities.isCreativeMode) { if (!ItemArmorHazmat.hasCompleteHazmat(entityLiving) - && !GT_Utility.isWearingFullRadioHazmat(entityLiving)) { + && !GTUtility.isWearingFullRadioHazmat(entityLiving)) { if (entityLiving.getActivePotionEffect(IC2Potion.radiation) != null) { entityLiving.getActivePotionEffect(IC2Potion.radiation); } @@ -120,8 +120,8 @@ public class EntityUtils { if (!world.isRemote) { if ((heatLevel > 0) && (entityHolding instanceof final EntityLivingBase entityLiving)) { if (!((EntityPlayer) entityHolding).capabilities.isCreativeMode) { - if (!GT_Utility.isWearingFullHeatHazmat(entityLiving)) { - GT_Utility.applyHeatDamage(entityLiving, heatLevel); + if (!GTUtility.isWearingFullHeatHazmat(entityLiving)) { + GTUtility.applyHeatDamage(entityLiving, heatLevel); } } } @@ -134,7 +134,7 @@ public class EntityUtils { /** * Provides the ability to provide custom drops upon the death of EntityLivingBase objects. - * + * * @param aMobClass - The Base Class you want to drop this item. * @param aStack - The ItemStack, stack size is not respected. * @param aMaxAmount - The maximum size of the ItemStack which drops. diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/FluidUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/FluidUtils.java index 2b6e96541d..95ba020887 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/FluidUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/FluidUtils.java @@ -2,7 +2,7 @@ package gtPlusPlus.core.util.minecraft; import static gregtech.api.recipe.RecipeMaps.fluidCannerRecipes; import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; import java.util.HashMap; @@ -16,10 +16,10 @@ import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.IFluidContainerItem; import gregtech.api.enums.Dyes; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.minecraft.FluidGT6; import gtPlusPlus.core.item.base.BaseItemComponent; @@ -302,7 +302,7 @@ public class FluidUtils { } if (register) { - GT_LanguageManager.addStringLocalization(rFluid.getUnlocalizedName(), aLocalName); + GTLanguageManager.addStringLocalization(rFluid.getUnlocalizedName(), aLocalName); if (FluidRegistry.registerFluid(rFluid)) { switch (aState) { case 0 -> { @@ -375,7 +375,7 @@ public class FluidUtils { if ((aFullContainer != null) && (aEmptyContainer != null) && !FluidContainerRegistry .registerFluidContainer(new FluidStack(rFluid, aFluidAmount), aFullContainer, aEmptyContainer)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemList.Cell_Empty.get(1L)) .itemOutputs(aFullContainer) .fluidInputs(new FluidStack(rFluid, aFluidAmount)) @@ -529,7 +529,7 @@ public class FluidUtils { aGenerateCell); if (dustStack != null) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(dustStack) .fluidOutputs(FluidUtils.getFluidStack(gtFluid, amountPerItem)) .duration(1 * SECONDS) @@ -537,7 +537,7 @@ public class FluidUtils { .addTo(fluidExtractionRecipes); } if (dustStack2 != null) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(dustStack2) .fluidOutputs(FluidUtils.getFluidStack(gtFluid, amountPerItem)) .duration(1 * SECONDS) diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/ItemUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/ItemUtils.java index bedc0d2439..1e211290cd 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/ItemUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/ItemUtils.java @@ -5,7 +5,7 @@ import static gregtech.api.enums.Mods.GregTech; import static gregtech.api.enums.Mods.IndustrialCraft2; import static gregtech.api.enums.Mods.Minecraft; import static gregtech.api.recipe.RecipeMaps.packagerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; import java.util.ArrayList; import java.util.HashMap; @@ -25,15 +25,15 @@ import net.minecraftforge.oredict.OreDictionary; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.GT_MetaGenerated_Tool_01; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.items.MetaGeneratedTool01; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.api.objects.data.Pair; @@ -41,16 +41,16 @@ import gtPlusPlus.core.item.ModItems; import gtPlusPlus.core.item.base.dusts.BaseItemDustUnique; import gtPlusPlus.core.item.chemistry.AgriculturalChem; import gtPlusPlus.core.item.chemistry.GenericChem; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.CORE_Preloader; -import gtPlusPlus.xmod.gregtech.api.items.Gregtech_MetaTool; +import gtPlusPlus.preloader.PreloaderCore; +import gtPlusPlus.xmod.gregtech.api.items.GTMetaTool; import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechTools; -import gtPlusPlus.xmod.gregtech.loaders.RecipeGen_DustGeneration; +import gtPlusPlus.xmod.gregtech.loaders.RecipeGenDustGeneration; public class ItemUtils { @@ -94,7 +94,7 @@ public class ItemUtils { } public static ItemStack getIC2Cell(final int meta) { - return GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemCellEmpty", 1L, meta); + return GTModHandler.getModItem(IndustrialCraft2.ID, "itemCellEmpty", 1L, meta); } public static ItemStack getEmptyCell() { @@ -105,7 +105,7 @@ public class ItemUtils { if (ItemList.Cell_Empty.hasBeenSet()) { return ItemList.Cell_Empty.get(i); } - final ItemStack temp = GT_ModHandler.getModItem(IndustrialCraft2.ID, "itemCellEmpty", i, 0); + final ItemStack temp = GTModHandler.getModItem(IndustrialCraft2.ID, "itemCellEmpty", i, 0); return temp != null ? temp : null; } @@ -122,7 +122,7 @@ public class ItemUtils { if (em != null) { final ItemStack metaStack = new ItemStack(em, 1, meta); - GT_OreDictUnificator.registerOre(oreDictName, metaStack); + GTOreDictUnificator.registerOre(oreDictName, metaStack); } } catch (final NullPointerException e) { @@ -308,7 +308,7 @@ public class ItemUtils { } public static ItemStack getItemStackOfAmountFromOreDictNoBroken(String oredictName, final int amount) { - if (CORE_Preloader.DEBUG_MODE) { + if (PreloaderCore.DEBUG_MODE) { Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(1)); Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(2)); Logger.WARNING("Looking up: " + oredictName + " - from method: " + ReflectionUtils.getMethodName(3)); @@ -353,7 +353,7 @@ public class ItemUtils { } public static ItemStack getGregtechDust(final Materials material, final int amount) { - final ItemStack returnValue = GT_OreDictUnificator.get(OrePrefixes.dust, material, 1L); + final ItemStack returnValue = GTOreDictUnificator.get(OrePrefixes.dust, material, 1L); if (returnValue != null) { if (ItemUtils.checkForInvalidItems(returnValue)) { return returnValue.copy(); @@ -371,7 +371,7 @@ public class ItemUtils { public static Item[] generateSpecialUseDusts(final String unlocalizedName, final String materialName, String mChemForm, final int Colour) { - GT_LanguageManager.addStringLocalization("gtplusplus.material." + materialName, materialName); + GTLanguageManager.addStringLocalization("gtplusplus.material." + materialName, materialName); final Item[] output = { new BaseItemDustUnique("itemDust" + unlocalizedName, materialName, mChemForm, Colour, "Dust"), new BaseItemDustUnique("itemDustSmall" + unlocalizedName, materialName, mChemForm, Colour, "Small"), @@ -383,15 +383,15 @@ public class ItemUtils { final ItemStack smallDust = ItemUtils.getSimpleStack(output[1]); final ItemStack tinyDust = ItemUtils.getSimpleStack(output[2]); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(4, smallDust), ItemList.Schematic_Dust.get(0)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(4, smallDust), ItemList.Schematic_Dust.get(0)) .itemOutputs(normalDust) .duration(5 * SECONDS) .eut(4) .addTo(packagerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(9, tinyDust), ItemList.Schematic_Dust.get(0)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(9, tinyDust), ItemList.Schematic_Dust.get(0)) .itemOutputs(normalDust) .duration(5 * SECONDS) .eut(4) @@ -503,7 +503,7 @@ public class ItemUtils { output = new Item[] { new BaseItemDustUnique("itemDust" + unlocalizedName, materialName, Colour, "Dust") }; } - new RecipeGen_DustGeneration(material, disableExtraRecipes); + new RecipeGenDustGeneration(material, disableExtraRecipes); return output; } @@ -657,7 +657,7 @@ public class ItemUtils { if (mPrefix == OrePrefixes.rod) { mPrefix = OrePrefixes.stick; } - ItemStack aGtStack = GT_OreDictUnificator.get(mPrefix, mMat, mAmount); + ItemStack aGtStack = GTOreDictUnificator.get(mPrefix, mMat, mAmount); if (aGtStack == null) { Logger .INFO("Failed to find `" + mPrefix + MaterialUtils.getMaterialName(mMat) + "` in OD. [Prefix Search]"); @@ -695,7 +695,7 @@ public class ItemUtils { } public static boolean registerFuel(ItemStack aBurnable, int burn) { - return CORE.burnables.add(new Pair<>(burn, aBurnable)); + return GTPPCore.burnables.add(new Pair<>(burn, aBurnable)); } public static boolean checkForInvalidItems(ItemStack mInput) { @@ -772,8 +772,8 @@ public class ItemUtils { IInventory aTemp = aInputInventory; for (int i = 0; i < p.length; ++i) { for (int j = i + 1; j < p.length; ++j) { - if (p[j] != null && (p[i] == null || GT_Utility.areStacksEqual(p[i], p[j]))) { - GT_Utility.moveStackFromSlotAToSlotB(aTemp, aTemp, j, i, (byte) 64, (byte) 1, (byte) 64, (byte) 1); + if (p[j] != null && (p[i] == null || GTUtility.areStacksEqual(p[i], p[j]))) { + GTUtility.moveStackFromSlotAToSlotB(aTemp, aTemp, j, i, (byte) 64, (byte) 1, (byte) 64, (byte) 1); } } } @@ -840,9 +840,9 @@ public class ItemUtils { final Item mItem = aStack.getItem(); final Item aSkookum = ItemUtils.getItemFromFQRN("miscutils:gt.plusplus.metatool.01"); final Class aSkookClass = aSkookum.getClass(); - if (aSkookClass.isInstance(mItem) || mItem instanceof GT_MetaGenerated_Tool_01 + if (aSkookClass.isInstance(mItem) || mItem instanceof MetaGeneratedTool01 || mItem instanceof MetaGeneratedGregtechTools - || mItem instanceof Gregtech_MetaTool + || mItem instanceof GTMetaTool || mItem == aSkookum) { return true; } @@ -884,7 +884,7 @@ public class ItemUtils { } public static ItemStack getNullStack() { - return GT_Values.NI; + return GTValues.NI; } public static ItemStack depleteStack(ItemStack aStack) { @@ -908,7 +908,7 @@ public class ItemUtils { Item aItem = aStack.getItem(); if (aItem == CI.getNumberedBioCircuit(0) .getItem() || aItem - == GT_Utility.getIntegratedCircuit(0) + == GTUtility.getIntegratedCircuit(0) .getItem() || aItem == CI.getNumberedAdvancedCircuit(0) .getItem()) { @@ -919,91 +919,91 @@ public class ItemUtils { } public static boolean isCatalyst(ItemStack aStack) { - if (GT_Utility.areStacksEqual(aStack, GenericChem.mBlueCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mBlueCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mBrownCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mBrownCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mOrangeCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mOrangeCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mPurpleCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mPurpleCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mRedCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mRedCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mYellowCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mYellowCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mPinkCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mPinkCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mFormaldehydeCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mFormaldehydeCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mSolidAcidCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mSolidAcidCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mInfiniteMutationCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mInfiniteMutationCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, AgriculturalChem.mGreenCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, AgriculturalChem.mGreenCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mPlatinumGroupCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mPlatinumGroupCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mPlasticPolymerCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mPlasticPolymerCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mRubberPolymerCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mRubberPolymerCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mAdhesionPromoterCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mAdhesionPromoterCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mTitaTungstenIndiumCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mTitaTungstenIndiumCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mRadioactivityCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mRadioactivityCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mRareEarthGroupCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mRareEarthGroupCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mSimpleNaquadahCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mSimpleNaquadahCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mAdvancedNaquadahCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mAdvancedNaquadahCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mRawIntelligenceCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mRawIntelligenceCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mUltimatePlasticCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mUltimatePlasticCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mBiologicalIntelligenceCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mBiologicalIntelligenceCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.TemporalHarmonyCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.TemporalHarmonyCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mLimpidWaterCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mLimpidWaterCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mFlawlessWaterCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mFlawlessWaterCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mParticleAccelerationCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mParticleAccelerationCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mSynchrotronCapableCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mSynchrotronCapableCatalyst, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mAlgagenicGrowthPromoterCatalyst, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mAlgagenicGrowthPromoterCatalyst, true)) { return true; } @@ -1011,10 +1011,10 @@ public class ItemUtils { } public static boolean isMillingBall(ItemStack aStack) { - if (GT_Utility.areStacksEqual(aStack, GenericChem.mMillingBallAlumina, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mMillingBallAlumina, true)) { return true; } - if (GT_Utility.areStacksEqual(aStack, GenericChem.mMillingBallSoapstone, true)) { + if (GTUtility.areStacksEqual(aStack, GenericChem.mMillingBallSoapstone, true)) { return true; } return false; diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/MaterialUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/MaterialUtils.java index 9aa8b3c0fa..6675e19891 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/MaterialUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/MaterialUtils.java @@ -13,7 +13,7 @@ import gregtech.api.enums.Element; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TextureSet; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.api.objects.data.TypeCounter; @@ -22,7 +22,7 @@ import gtPlusPlus.core.item.base.BaseItemComponent; import gtPlusPlus.core.item.base.BaseItemComponent.ComponentTypes; import gtPlusPlus.core.item.base.foil.BaseItemFoil; import gtPlusPlus.core.item.base.wire.BaseItemFineWire; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.material.MaterialStack; import gtPlusPlus.core.material.state.MaterialState; @@ -73,7 +73,7 @@ public class MaterialUtils { int radioactivity = 0; if (material.isRadioactive()) { ItemStack aDustStack = ItemUtils.getOrePrefixStack(OrePrefixes.dust, material, 1); - radioactivity = aDustStack != null ? GT_Utility.getRadioactivityLevel(aDustStack) : 0; + radioactivity = aDustStack != null ? GTUtility.getRadioactivityLevel(aDustStack) : 0; if (radioactivity == 0) { long aProtons = material.getProtons(); radioactivity = (int) Math.min(Math.max((aProtons / 30), 1), 9); @@ -275,7 +275,7 @@ public class MaterialUtils { + "' & fallback '" + aFallbackMaterialName + "', returning _NULL."); - CORE.crash(); + GTPPCore.crash(); } return g; } diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/MiningUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/MiningUtils.java index 3abc92b69e..16e5652e82 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/MiningUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/MiningUtils.java @@ -2,7 +2,7 @@ package gtPlusPlus.core.util.minecraft; import java.util.HashMap; -import gregtech.common.GT_Worldgen_GT_Ore_Layer; +import gregtech.common.WorldgenGTOreLayer; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.util.reflect.ReflectionUtils; @@ -18,12 +18,11 @@ public class MiningUtils { String aTextWorldGen; if (MiningUtils.findAndMapOreTypesFromGT()) { int mapKey = 0; - for (AutoMap g : MiningUtils.mOreMaps) { - for (GT_Worldgen_GT_Ore_Layer h : g) { + for (AutoMap g : MiningUtils.mOreMaps) { + for (WorldgenGTOreLayer h : g) { try { - aTextWorldGen = (String) ReflectionUtils - .getField(GT_Worldgen_GT_Ore_Layer.class, "aTextWorldgen") + aTextWorldGen = (String) ReflectionUtils.getField(WorldgenGTOreLayer.class, "aTextWorldgen") .get(h); } catch (IllegalArgumentException | IllegalAccessException e) { aTextWorldGen = h.mWorldGenName; @@ -37,14 +36,14 @@ public class MiningUtils { } } - public static AutoMap[] mOreMaps = new AutoMap[7]; - private static final AutoMap Ores_Overworld = new AutoMap<>(); - private static final AutoMap Ores_Nether = new AutoMap<>(); - private static final AutoMap Ores_End = new AutoMap<>(); - private static final AutoMap Ores_Moon = new AutoMap<>(); - private static final AutoMap Ores_Mars = new AutoMap<>(); - private static final AutoMap Ores_Comets = new AutoMap<>(); - private static final AutoMap Ores_Misc = new AutoMap<>(); + public static AutoMap[] mOreMaps = new AutoMap[7]; + private static final AutoMap Ores_Overworld = new AutoMap<>(); + private static final AutoMap Ores_Nether = new AutoMap<>(); + private static final AutoMap Ores_End = new AutoMap<>(); + private static final AutoMap Ores_Moon = new AutoMap<>(); + private static final AutoMap Ores_Mars = new AutoMap<>(); + private static final AutoMap Ores_Comets = new AutoMap<>(); + private static final AutoMap Ores_Misc = new AutoMap<>(); public static boolean findAndMapOreTypesFromGT() { // Gets Moon ID @@ -92,11 +91,11 @@ public class MiningUtils { Ores_End.clear(); Ores_Misc.clear(); - for (GT_Worldgen_GT_Ore_Layer x : GT_Worldgen_GT_Ore_Layer.sList) { + for (WorldgenGTOreLayer x : WorldgenGTOreLayer.sList) { if (x.mEnabled) { try { - aEndAsteroids = ReflectionUtils.getField(GT_Worldgen_GT_Ore_Layer.class, "mEndAsteroid") + aEndAsteroids = ReflectionUtils.getField(WorldgenGTOreLayer.class, "mEndAsteroid") .getBoolean(x); } catch (IllegalArgumentException | IllegalAccessException e) { aEndAsteroids = false; diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/NBTUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/NBTUtils.java index 4b0f15b81e..bff2a25386 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/NBTUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/NBTUtils.java @@ -6,7 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class NBTUtils { @@ -18,7 +18,7 @@ public class NBTUtils { public static void setBookTitle(ItemStack aStack, String aTitle) { NBTTagCompound tNBT = getNBT(aStack); tNBT.setString("title", aTitle); - GT_Utility.ItemNBT.setNBT(aStack, tNBT); + GTUtility.ItemNBT.setNBT(aStack, tNBT); } public static ItemStack[] readItemsFromNBT(ItemStack itemstack) { @@ -82,7 +82,7 @@ public class NBTUtils { public static void setBoolean(ItemStack aStack, String aTag, boolean aBoolean) { NBTTagCompound tNBT = getNBT(aStack); tNBT.setBoolean(aTag, aBoolean); - GT_Utility.ItemNBT.setNBT(aStack, tNBT); + GTUtility.ItemNBT.setNBT(aStack, tNBT); } public static boolean getBoolean(ItemStack aStack, String aTag) { @@ -93,7 +93,7 @@ public class NBTUtils { public static void setInteger(ItemStack aStack, String aTag, int aInt) { NBTTagCompound tNBT = getNBT(aStack); tNBT.setInteger(aTag, aInt); - GT_Utility.ItemNBT.setNBT(aStack, tNBT); + GTUtility.ItemNBT.setNBT(aStack, tNBT); } public static int getInteger(ItemStack aStack, String aTag) { @@ -104,7 +104,7 @@ public class NBTUtils { public static void setLong(ItemStack aStack, String aTag, long aInt) { NBTTagCompound tNBT = getNBT(aStack); tNBT.setLong(aTag, aInt); - GT_Utility.ItemNBT.setNBT(aStack, tNBT); + GTUtility.ItemNBT.setNBT(aStack, tNBT); } public static long getLong(ItemStack aStack, String aTag) { @@ -115,7 +115,7 @@ public class NBTUtils { public static void setString(ItemStack aStack, String aTag, String aString) { NBTTagCompound tNBT = getNBT(aStack); tNBT.setString(aTag, aString); - GT_Utility.ItemNBT.setNBT(aStack, tNBT); + GTUtility.ItemNBT.setNBT(aStack, tNBT); } public static String getString(ItemStack aStack, String aTag) { diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java index ba7353cba6..5e29ddb53e 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/PlayerUtils.java @@ -18,6 +18,7 @@ import net.minecraftforge.common.util.FakePlayer; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.util.GTUtility; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.reflect.ReflectionUtils; @@ -41,7 +42,7 @@ public class PlayerUtils { } public static void messagePlayer(final EntityPlayer P, final String S) { - gregtech.api.util.GT_Utility.sendChatToPlayer(P, S); + GTUtility.sendChatToPlayer(P, S); } public static void messagePlayer(final EntityPlayer P, final IChatComponent S) { diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/RecipeUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/RecipeUtils.java index ed2da4d7f7..6df6974030 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/RecipeUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/RecipeUtils.java @@ -16,17 +16,17 @@ import net.minecraftforge.oredict.ShapelessOreRecipe; import cpw.mods.fml.common.registry.GameRegistry; import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; import gtPlusPlus.GTplusplus; import gtPlusPlus.api.interfaces.RunnableWithInfo; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.minecraft.ShapedRecipe; -import gtPlusPlus.core.handler.COMPAT_HANDLER; +import gtPlusPlus.core.handler.CompatHandler; import gtPlusPlus.core.handler.Recipes.LateRegistrationHandler; import gtPlusPlus.core.handler.Recipes.RegistrationHandler; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.data.ArrayUtils; @@ -64,11 +64,11 @@ public class RecipeUtils { Object[] o = new Object[] { slot_1, slot_2, slot_3, slot_4, slot_5, slot_6, slot_7, slot_8, slot_9 }; try { - int size = COMPAT_HANDLER.mRecipesToGenerate.size(); - COMPAT_HANDLER.mRecipesToGenerate.put(new InternalRecipeObject(o, resultItem, false)); + int size = CompatHandler.mRecipesToGenerate.size(); + CompatHandler.mRecipesToGenerate.put(new InternalRecipeObject(o, resultItem, false)); // Utils.LOG_WARNING("Success! Added a recipe for "+resultItem.getDisplayName()); - if (COMPAT_HANDLER.mRecipesToGenerate.size() > size) { - if (!COMPAT_HANDLER.areInitItemsLoaded) { + if (CompatHandler.mRecipesToGenerate.size() > size) { + if (!CompatHandler.areInitItemsLoaded) { RegistrationHandler.recipesSuccess++; } else { LateRegistrationHandler.recipesSuccess++; @@ -78,7 +78,7 @@ public class RecipeUtils { Logger.RECIPE( "[Fix] Invalid Recipe detected for: " + resultItem != null ? resultItem.getUnlocalizedName() : "INVALID OUTPUT ITEM"); - if (!COMPAT_HANDLER.areInitItemsLoaded) { + if (!CompatHandler.areInitItemsLoaded) { RegistrationHandler.recipesFailed++; } else { LateRegistrationHandler.recipesFailed++; @@ -163,18 +163,18 @@ public class RecipeUtils { InputItem9 }; if (gtPlusPlus.GTplusplus.CURRENT_LOAD_PHASE != GTplusplus.INIT_PHASE.POST_INIT) { - CORE.crash( + GTPPCore.crash( "Load Phase " + gtPlusPlus.GTplusplus.CURRENT_LOAD_PHASE + " should be " + GTplusplus.INIT_PHASE.POST_INIT + ". Unable to register recipe."); } - int size = COMPAT_HANDLER.mGtRecipesToGenerate.size(); - COMPAT_HANDLER.mGtRecipesToGenerate.put(new InternalRecipeObject(o, OutputItem, true)); + int size = CompatHandler.mGtRecipesToGenerate.size(); + CompatHandler.mGtRecipesToGenerate.put(new InternalRecipeObject(o, OutputItem, true)); - if (COMPAT_HANDLER.mGtRecipesToGenerate.size() > size) { - if (!COMPAT_HANDLER.areInitItemsLoaded) { + if (CompatHandler.mGtRecipesToGenerate.size() > size) { + if (!CompatHandler.areInitItemsLoaded) { RegistrationHandler.recipesSuccess++; } else { LateRegistrationHandler.recipesSuccess++; @@ -195,7 +195,7 @@ public class RecipeUtils { return false; } // let gregtech handle shapeless recipes. - if (GT_ModHandler.addShapelessCraftingRecipe(OutputItem, inputItems)) { + if (GTModHandler.addShapelessCraftingRecipe(OutputItem, inputItems)) { return true; } return false; @@ -294,7 +294,7 @@ public class RecipeUtils { boolean rReturn = false; ArrayList tList = (ArrayList) CraftingManager.getInstance() .getRecipeList(); - aOutput = GT_OreDictUnificator.get(aOutput); + aOutput = GTOreDictUnificator.get(aOutput); int tList_sS = tList.size(); for (int i = 0; i < tList_sS; ++i) { @@ -302,19 +302,19 @@ public class RecipeUtils { if (!aNotRemoveShapelessRecipes || !(tRecipe instanceof ShapelessRecipes) && !(tRecipe instanceof ShapelessOreRecipe)) { if (aOnlyRemoveNativeHandlers) { - if (!gregtech.api.util.GT_ModHandler.sNativeRecipeClasses.contains( + if (!GTModHandler.sNativeRecipeClasses.contains( tRecipe.getClass() .getName())) { continue; } - } else if (gregtech.api.util.GT_ModHandler.sSpecialRecipeClasses.contains( + } else if (GTModHandler.sSpecialRecipeClasses.contains( tRecipe.getClass() .getName())) { continue; } ItemStack tStack = tRecipe.getRecipeOutput(); - if (GT_Utility.areStacksEqual(GT_OreDictUnificator.get(tStack), aOutput, aIgnoreNBT)) { + if (GTUtility.areStacksEqual(GTOreDictUnificator.get(tStack), aOutput, aIgnoreNBT)) { tList.remove(i--); tList_sS = tList.size(); rReturn = true; @@ -372,7 +372,7 @@ public class RecipeUtils { "Cleaned a " + o.getClass() .getSimpleName() + " from recipe input."); Logger.INFO("ERROR"); - CORE.crash("Bad Shaped Recipe."); + GTPPCore.crash("Bad Shaped Recipe."); } } Logger.RECIPE("Using String: " + aFullString); @@ -414,10 +414,10 @@ public class RecipeUtils { ShapedOreRecipe aRecipe = new ShapedOreRecipe(aOutputStack, aDataObject); - int size = COMPAT_HANDLER.mRecipesToGenerate.size(); - COMPAT_HANDLER.mRecipesToGenerate.put(new InternalRecipeObject2(aRecipe)); - if (COMPAT_HANDLER.mRecipesToGenerate.size() > size) { - if (!COMPAT_HANDLER.areInitItemsLoaded) { + int size = CompatHandler.mRecipesToGenerate.size(); + CompatHandler.mRecipesToGenerate.put(new InternalRecipeObject2(aRecipe)); + if (CompatHandler.mRecipesToGenerate.size() > size) { + if (!CompatHandler.areInitItemsLoaded) { RegistrationHandler.recipesSuccess++; } else { LateRegistrationHandler.recipesSuccess++; diff --git a/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/PollutionUtils.java b/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/PollutionUtils.java index 4e6e508c15..d9cf2e3769 100644 --- a/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/PollutionUtils.java +++ b/src/main/java/gtPlusPlus/core/util/minecraft/gregtech/PollutionUtils.java @@ -6,16 +6,16 @@ import net.minecraftforge.fluids.FluidStack; import org.apache.commons.lang3.ArrayUtils; -import gregtech.GT_Mod; +import gregtech.GTMod; import gregtech.api.enums.OrePrefixes; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords; -import gregtech.common.GT_Pollution; +import gregtech.common.Pollution; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.item.base.cell.BaseItemCell; -import gtPlusPlus.core.material.MISC_MATERIALS; import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.material.MaterialMisc; import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -24,19 +24,19 @@ public class PollutionUtils { public static AutoMap mPollutionFluidStacks = new AutoMap<>(); public static boolean isPollutionEnabled() { - return GT_Mod.gregtechproxy.mPollution; + return GTMod.gregtechproxy.mPollution; } public static boolean addPollution(IGregTechTileEntity te, int pollutionValue) { - if (GT_Mod.gregtechproxy.mPollution) { - GT_Pollution.addPollution(te, pollutionValue); + if (GTMod.gregtechproxy.mPollution) { + Pollution.addPollution(te, pollutionValue); return true; } return false; } public static void addPollution(IHasWorldObjectAndCoords aTileOfSomeSort, int pollutionValue) { - if (GT_Mod.gregtechproxy.mPollution) { + if (GTMod.gregtechproxy.mPollution) { Chunk c = aTileOfSomeSort.getWorld() .getChunkFromBlockCoords(aTileOfSomeSort.getXCoord(), aTileOfSomeSort.getZCoord()); addPollution(c, pollutionValue); @@ -44,8 +44,8 @@ public class PollutionUtils { } public static void addPollution(Chunk aChunk, int pollutionValue) { - if (GT_Mod.gregtechproxy.mPollution) { - GT_Pollution.addPollution(aChunk, pollutionValue); + if (GTMod.gregtechproxy.mPollution) { + Pollution.addPollution(aChunk, pollutionValue); } } @@ -74,7 +74,7 @@ public class PollutionUtils { } public static void nullifyPollution(Chunk aChunk) { - if (GT_Mod.gregtechproxy.mPollution) { + if (GTMod.gregtechproxy.mPollution) { if (aChunk == null) { return; } @@ -86,11 +86,11 @@ public class PollutionUtils { } public static int getPollution(IGregTechTileEntity te) { - return GT_Pollution.getPollution(te); + return Pollution.getPollution(te); } public static int getPollution(Chunk te) { - return GT_Pollution.getPollution(te); + return Pollution.getPollution(te); } public static void setPollutionFluids() { @@ -103,33 +103,33 @@ public class PollutionUtils { if (CD != null) { Logger.INFO("[PollutionCompat] Found carbon dioxide fluid, registering it."); PollutionUtils.mPollutionFluidStacks.put(CD); - MISC_MATERIALS.CARBON_DIOXIDE.registerComponentForMaterial(CD); + MaterialMisc.CARBON_DIOXIDE.registerComponentForMaterial(CD); ItemStack cellCD = ItemUtils.getItemStackOfAmountFromOreDict("cellCarbonDioxide", 1); if (ItemUtils.checkForInvalidItems(cellCD)) { Logger.INFO("[PollutionCompat] Found carbon dioxide cell, registering component."); - MISC_MATERIALS.CARBON_DIOXIDE.registerComponentForMaterial(OrePrefixes.cell, cellCD); + MaterialMisc.CARBON_DIOXIDE.registerComponentForMaterial(OrePrefixes.cell, cellCD); } else { Logger.INFO("[PollutionCompat] Did not find carbon dioxide cell, registering new component."); - new BaseItemCell(MISC_MATERIALS.CARBON_DIOXIDE); + new BaseItemCell(MaterialMisc.CARBON_DIOXIDE); } } else { - MaterialGenerator.generate(MISC_MATERIALS.CARBON_DIOXIDE, false, false); + MaterialGenerator.generate(MaterialMisc.CARBON_DIOXIDE, false, false); } if (CM != null) { Logger.INFO("[PollutionCompat] Found carbon monoxide fluid, registering it."); PollutionUtils.mPollutionFluidStacks.put(CM); - MISC_MATERIALS.CARBON_MONOXIDE.registerComponentForMaterial(CM); + MaterialMisc.CARBON_MONOXIDE.registerComponentForMaterial(CM); ItemStack cellCD = ItemUtils.getItemStackOfAmountFromOreDict("cellCarbonMonoxide", 1); if (ItemUtils.checkForInvalidItems(cellCD)) { Logger.INFO("[PollutionCompat] Found carbon monoxide cell, registering component."); - MISC_MATERIALS.CARBON_MONOXIDE.registerComponentForMaterial(OrePrefixes.cell, cellCD); + MaterialMisc.CARBON_MONOXIDE.registerComponentForMaterial(OrePrefixes.cell, cellCD); } else { Logger.INFO("[PollutionCompat] Did not find carbon monoxide cell, registering new component."); - new BaseItemCell(MISC_MATERIALS.CARBON_MONOXIDE); + new BaseItemCell(MaterialMisc.CARBON_MONOXIDE); } } else { - MaterialGenerator.generate(MISC_MATERIALS.CARBON_MONOXIDE, false, false); + MaterialGenerator.generate(MaterialMisc.CARBON_MONOXIDE, false, false); } if (SD != null) { diff --git a/src/main/java/gtPlusPlus/core/util/recipe/GTRecipeUtils.java b/src/main/java/gtPlusPlus/core/util/recipe/GTRecipeUtils.java new file mode 100644 index 0000000000..980068ed97 --- /dev/null +++ b/src/main/java/gtPlusPlus/core/util/recipe/GTRecipeUtils.java @@ -0,0 +1,95 @@ +package gtPlusPlus.core.util.recipe; + +import static gtPlusPlus.core.slots.SlotIntegratedCircuit.isRegularProgrammableCircuit; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; + +import org.apache.commons.lang3.ArrayUtils; + +import gnu.trove.map.hash.TCustomHashMap; +import gnu.trove.set.hash.TCustomHashSet; +import gregtech.api.util.GTRecipe; +import gtPlusPlus.api.objects.Logger; + +public class GTRecipeUtils { + + public static List removeDuplicates(List inputRecipes, String recipeMapName) { + TCustomHashSet recipesHashSet = new TCustomHashSet<>(RecipeHashStrat.RecipeHashingStrategy); + ArrayList recipeOutput = new ArrayList<>(); + TCustomHashMap circuitMap = new TCustomHashMap<>(RecipeHashStrat.RecipeHashingStrategy); + int removedRecipeCount = 0; + + for (GTRecipe recipeInput : inputRecipes) { + ItemStack savedCircuit = null; + // create a new input ItemStack array that does not contain programmable circuits if they were in the recipe + ArrayList itemInputsWithoutProgrammableCircuit = new ArrayList<>(); + // iterate over the recipe input items and add them all to a new array without any programmable circuits + for (ItemStack itemStack : recipeInput.mInputs) { + if (itemStack == null) { + continue; + } + if (isRegularProgrammableCircuit(itemStack) == -1) { + itemInputsWithoutProgrammableCircuit.add(itemStack); + } else { + savedCircuit = itemStack; + } + } + GTRecipe newRecipe = new GTRecipe( + false, + itemInputsWithoutProgrammableCircuit.toArray(new ItemStack[0]), + recipeInput.mOutputs, + recipeInput.mSpecialItems, + recipeInput.mChances, + recipeInput.mFluidInputs, + recipeInput.mFluidOutputs, + recipeInput.mDuration, + recipeInput.mEUt, + recipeInput.mSpecialValue); + if (!recipesHashSet.contains(newRecipe)) { + // if the recipes customHashSet does not contain the new recipe then add it + recipesHashSet.add(newRecipe); + } else { + removedRecipeCount++; + } + if (savedCircuit != null) { + // if the current recipe has a circuit and the recipe (without circuits) is already in the + // circuit map then check make sure the circuit map saves the recipe with the smallest circuit + // damage value. This is to prevent a case where recipe load order would affect which duplicate + // recipes with multiple circuit values gets removed. + if (circuitMap.containsKey(newRecipe)) { + if (circuitMap.get(newRecipe) + .getItemDamage() > savedCircuit.getItemDamage()) { + circuitMap.put(newRecipe, savedCircuit); + } + } else { + // If the circuit map does not have the recipe in it yet then add it + circuitMap.put(newRecipe, savedCircuit); + } + } + } + // iterate over all recipes without duplicates and add them to the output. If the recipe had a programmable + // circuit in it then add it back with its damage value coming from the circuit map. + for (GTRecipe filteredRecipe : recipesHashSet) { + // check to see if the recipe is in the circuit map + if (circuitMap.contains(filteredRecipe)) { + // add the circuit back + // update the item input array with the new input from + // ItemInputsWithoutProgrammableCircuit + circuit map circuit + filteredRecipe.mInputs = ArrayUtils.add(filteredRecipe.mInputs, circuitMap.get(filteredRecipe)); + } + // if the recipe was not in the circuit map then just add it the output as no updates to the item input + // needs to be made + recipeOutput.add(filteredRecipe); + } + // print results to log + Logger.INFO( + "Recipe Array duplication removal process completed for '" + recipeMapName + + "': '" + + removedRecipeCount + + "' removed."); + return recipeOutput; + } +} diff --git a/src/main/java/gtPlusPlus/core/util/recipe/GT_RecipeUtils.java b/src/main/java/gtPlusPlus/core/util/recipe/GT_RecipeUtils.java deleted file mode 100644 index c5498e4f59..0000000000 --- a/src/main/java/gtPlusPlus/core/util/recipe/GT_RecipeUtils.java +++ /dev/null @@ -1,95 +0,0 @@ -package gtPlusPlus.core.util.recipe; - -import static gtPlusPlus.core.slots.SlotIntegratedCircuit.isRegularProgrammableCircuit; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.item.ItemStack; - -import org.apache.commons.lang3.ArrayUtils; - -import gnu.trove.map.hash.TCustomHashMap; -import gnu.trove.set.hash.TCustomHashSet; -import gregtech.api.util.GT_Recipe; -import gtPlusPlus.api.objects.Logger; - -public class GT_RecipeUtils { - - public static List removeDuplicates(List inputRecipes, String recipeMapName) { - TCustomHashSet recipesHashSet = new TCustomHashSet<>(RecipeHashStrat.RecipeHashingStrategy); - ArrayList recipeOutput = new ArrayList<>(); - TCustomHashMap circuitMap = new TCustomHashMap<>(RecipeHashStrat.RecipeHashingStrategy); - int removedRecipeCount = 0; - - for (GT_Recipe recipeInput : inputRecipes) { - ItemStack savedCircuit = null; - // create a new input ItemStack array that does not contain programmable circuits if they were in the recipe - ArrayList itemInputsWithoutProgrammableCircuit = new ArrayList<>(); - // iterate over the recipe input items and add them all to a new array without any programmable circuits - for (ItemStack itemStack : recipeInput.mInputs) { - if (itemStack == null) { - continue; - } - if (isRegularProgrammableCircuit(itemStack) == -1) { - itemInputsWithoutProgrammableCircuit.add(itemStack); - } else { - savedCircuit = itemStack; - } - } - GT_Recipe newRecipe = new GT_Recipe( - false, - itemInputsWithoutProgrammableCircuit.toArray(new ItemStack[0]), - recipeInput.mOutputs, - recipeInput.mSpecialItems, - recipeInput.mChances, - recipeInput.mFluidInputs, - recipeInput.mFluidOutputs, - recipeInput.mDuration, - recipeInput.mEUt, - recipeInput.mSpecialValue); - if (!recipesHashSet.contains(newRecipe)) { - // if the recipes customHashSet does not contain the new recipe then add it - recipesHashSet.add(newRecipe); - } else { - removedRecipeCount++; - } - if (savedCircuit != null) { - // if the current recipe has a circuit and the recipe (without circuits) is already in the - // circuit map then check make sure the circuit map saves the recipe with the smallest circuit - // damage value. This is to prevent a case where recipe load order would affect which duplicate - // recipes with multiple circuit values gets removed. - if (circuitMap.containsKey(newRecipe)) { - if (circuitMap.get(newRecipe) - .getItemDamage() > savedCircuit.getItemDamage()) { - circuitMap.put(newRecipe, savedCircuit); - } - } else { - // If the circuit map does not have the recipe in it yet then add it - circuitMap.put(newRecipe, savedCircuit); - } - } - } - // iterate over all recipes without duplicates and add them to the output. If the recipe had a programmable - // circuit in it then add it back with its damage value coming from the circuit map. - for (GT_Recipe filteredRecipe : recipesHashSet) { - // check to see if the recipe is in the circuit map - if (circuitMap.contains(filteredRecipe)) { - // add the circuit back - // update the item input array with the new input from - // ItemInputsWithoutProgrammableCircuit + circuit map circuit - filteredRecipe.mInputs = ArrayUtils.add(filteredRecipe.mInputs, circuitMap.get(filteredRecipe)); - } - // if the recipe was not in the circuit map then just add it the output as no updates to the item input - // needs to be made - recipeOutput.add(filteredRecipe); - } - // print results to log - Logger.INFO( - "Recipe Array duplication removal process completed for '" + recipeMapName - + "': '" - + removedRecipeCount - + "' removed."); - return recipeOutput; - } -} diff --git a/src/main/java/gtPlusPlus/core/util/recipe/RecipeHashStrat.java b/src/main/java/gtPlusPlus/core/util/recipe/RecipeHashStrat.java index 18323a4c8b..1a730c9cbf 100644 --- a/src/main/java/gtPlusPlus/core/util/recipe/RecipeHashStrat.java +++ b/src/main/java/gtPlusPlus/core/util/recipe/RecipeHashStrat.java @@ -9,24 +9,24 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidStack; import gnu.trove.strategy.HashingStrategy; -import gregtech.api.util.GT_Recipe; +import gregtech.api.util.GTRecipe; public class RecipeHashStrat { - public static final HashingStrategy RecipeHashingStrategy = new HashingStrategy<>() { + public static final HashingStrategy RecipeHashingStrategy = new HashingStrategy<>() { @Override - public int computeHashCode(GT_Recipe recipe) { + public int computeHashCode(GTRecipe recipe) { return com.google.common.base.Objects.hashCode(recipe.mDuration, recipe.mEUt); } @Override - public boolean equals(GT_Recipe recipe1, GT_Recipe recipe2) { + public boolean equals(GTRecipe recipe1, GTRecipe recipe2) { return areRecipesEqual(recipe1, recipe2); } }; - public static boolean areRecipesEqual(GT_Recipe recipe1, GT_Recipe recipe2) { + public static boolean areRecipesEqual(GTRecipe recipe1, GTRecipe recipe2) { // both item outputs use a copy to prevent interfering with chance based output orders // sort all the arrays for recipe1 RecipeHashStrat.sortItemStackArray(recipe1.mInputs); diff --git a/src/main/java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java b/src/main/java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java index fc02cd8b74..f33d3d90d7 100644 --- a/src/main/java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java +++ b/src/main/java/gtPlusPlus/core/util/reflect/AddGregtechRecipe.java @@ -5,13 +5,13 @@ import static gtPlusPlus.api.recipe.GTPPRecipeMaps.cokeOvenRecipes; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; public final class AddGregtechRecipe { - public static boolean importPyroRecipe(GT_Recipe aRecipe) { + public static boolean importPyroRecipe(GTRecipe aRecipe) { int aModifiedTime = (int) (aRecipe.mDuration * 0.8); @@ -29,7 +29,7 @@ public final class AddGregtechRecipe { } int aCircuitNumber = -1; - Item aCircuit = GT_Utility.getIntegratedCircuit(1) + Item aCircuit = GTUtility.getIntegratedCircuit(1) .getItem(); boolean hasCircuit = false; @@ -54,12 +54,12 @@ public final class AddGregtechRecipe { } ItemStack[] inputs; if (aInputItem == null) { - inputs = new ItemStack[] { GT_Utility.getIntegratedCircuit(aCircuitNumber) }; + inputs = new ItemStack[] { GTUtility.getIntegratedCircuit(aCircuitNumber) }; } else { - inputs = new ItemStack[] { GT_Utility.getIntegratedCircuit(aCircuitNumber), aInputItem }; + inputs = new ItemStack[] { GTUtility.getIntegratedCircuit(aCircuitNumber), aInputItem }; } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(inputs) .itemOutputs(aRecipe.mOutputs) .fluidInputs(aRecipe.mFluidInputs) diff --git a/src/main/java/gtPlusPlus/everglades/GTPPEverglades.java b/src/main/java/gtPlusPlus/everglades/GTPPEverglades.java new file mode 100644 index 0000000000..403198d6df --- /dev/null +++ b/src/main/java/gtPlusPlus/everglades/GTPPEverglades.java @@ -0,0 +1,193 @@ +package gtPlusPlus.everglades; + +import static gregtech.api.enums.Mods.GTPlusPlusEverglades; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + +import net.minecraft.block.Block; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.common.config.Configuration; + +import bwcrossmod.galacticgreg.MTEVoidMinerBase; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.EventHandler; +import cpw.mods.fml.common.event.FMLInitializationEvent; +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.registry.GameRegistry; +import gregtech.api.enums.Mods; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.lib.GTPPCore.Everglades; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.material.MaterialsOres; +import gtPlusPlus.everglades.biome.BiomeEverglades; +import gtPlusPlus.everglades.block.DarkWorldContentLoader; +import gtPlusPlus.everglades.dimension.DimensionEverglades; +import gtPlusPlus.everglades.gen.gt.WorldGen_GT_Base; +import gtPlusPlus.everglades.gen.gt.WorldGen_GT_Ore_Layer; +import gtPlusPlus.everglades.gen.gt.WorldGen_Ores; +import gtPlusPlus.preloader.PreloaderCore; +import gtPlusPlus.xmod.gregtech.HandlerGT; +import gtPlusPlus.xmod.gregtech.api.util.GTPPConfig; + +@Mod( + modid = Mods.Names.G_T_PLUS_PLUS_EVERGLADES, + name = Everglades.NAME, + version = Everglades.VERSION, + dependencies = "required-after:Forge; after:dreamcraft; after:IC2; required-after:gregtech; required-after:miscutils;") +public class GTPPEverglades implements ActionListener { + + // Mod Instance + @Mod.Instance(Mods.Names.G_T_PLUS_PLUS_EVERGLADES) + public static GTPPEverglades instance; + + // Dark World Handler + protected static volatile BiomeEverglades Everglades_Biome; + protected static volatile DimensionEverglades Everglades_Dimension; + + // Pre-Init + @Mod.EventHandler + public void preInit(final FMLPreInitializationEvent event) { + Logger.INFO("Loading " + GTPlusPlusEverglades.ID + " V" + Everglades.VERSION); + + // Setup + setVars(event); + + setEvergladesBiome(new BiomeEverglades()); + Everglades_Dimension = new DimensionEverglades(); + + // Load Dark World + getEvergladesBiome().instance = instance; + Everglades_Dimension.instance = instance; + getEvergladesBiome().preInit(event); + + // Load/Set Custom Ore Gen + HandlerGT.sCustomWorldgenFile = new GTPPConfig( + new Configuration( + new File(new File(event.getModConfigurationDirectory(), "GTplusplus"), "WorldGeneration.cfg"))); + } + + @EventHandler + public void load(final FMLInitializationEvent e) { + Logger.INFO("Begin resource allocation for " + GTPlusPlusEverglades.ID + " V" + Everglades.VERSION); + + // Load World and Biome + GameRegistry.registerWorldGenerator(new WorldGen_GT_Base(), Short.MAX_VALUE); + getEvergladesBiome().load(); + Everglades_Dimension.load(); + addToVoidMinerDrops(); + } + + public static synchronized void GenerateOreMaterials() { + MaterialGenerator.generateOreMaterial(MaterialsOres.CROCROITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.GEIKIELITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.NICHROMITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.TITANITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.ZIMBABWEITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.ZIRCONILITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.GADOLINITE_CE); + MaterialGenerator.generateOreMaterial(MaterialsOres.GADOLINITE_Y); + MaterialGenerator.generateOreMaterial(MaterialsOres.LEPERSONNITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.SAMARSKITE_Y); + MaterialGenerator.generateOreMaterial(MaterialsOres.SAMARSKITE_YB); + MaterialGenerator.generateOreMaterial(MaterialsOres.XENOTIME); + MaterialGenerator.generateOreMaterial(MaterialsOres.YTTRIAITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.YTTRIALITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.YTTROCERITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.ZIRCON); + MaterialGenerator.generateOreMaterial(MaterialsOres.POLYCRASE); + MaterialGenerator.generateOreMaterial(MaterialsOres.ZIRCOPHYLLITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.ZIRKELITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.LANTHANITE_LA); + MaterialGenerator.generateOreMaterial(MaterialsOres.LANTHANITE_CE); + MaterialGenerator.generateOreMaterial(MaterialsOres.LANTHANITE_ND); + MaterialGenerator.generateOreMaterial(MaterialsOres.AGARDITE_Y); + MaterialGenerator.generateOreMaterial(MaterialsOres.AGARDITE_CD); + MaterialGenerator.generateOreMaterial(MaterialsOres.AGARDITE_LA); + MaterialGenerator.generateOreMaterial(MaterialsOres.AGARDITE_ND); + MaterialGenerator.generateOreMaterial(MaterialsOres.HIBONITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.CERITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.FLUORCAPHITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.FLORENCITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.CRYOLITE); + + MaterialGenerator.generateOreMaterial(MaterialsOres.LAUTARITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.LAFOSSAITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.DEMICHELEITE_BR); + MaterialGenerator.generateOreMaterial(MaterialsOres.COMANCHEITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.PERROUDITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.HONEAITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.ALBURNITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.MIESSIITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.KASHINITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.IRARSITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.GREENOCKITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.RADIOBARITE); + MaterialGenerator.generateOreMaterial(MaterialsOres.DEEP_EARTH_REACTOR_FUEL_DEPOSIT); + + } + + protected synchronized void setVars(FMLPreInitializationEvent event) { + // Init WorldGen config. + HandlerGT.sCustomWorldgenFile = new GTPPConfig( + new Configuration( + new File(new File(event.getModConfigurationDirectory(), "GTplusplus"), "WorldGeneration.cfg"))); + + if (DimensionManager.isDimensionRegistered(DimensionEverglades.DIMID)) { + DimensionEverglades.DIMID = DimensionManager.getNextFreeDimId(); + } + + /* + * Set World Generation Values + */ + WorldGen_Ores.generateValidOreVeins(); + WorldGen_GT_Base.oreveinPercentage = 64; + WorldGen_GT_Base.oreveinAttempts = 16; + WorldGen_GT_Base.oreveinMaxPlacementAttempts = 4; + if (PreloaderCore.DEBUG_MODE || GTPPCore.DEVENV) { + WorldGen_GT_Base.debugWorldGen = true; + } + DarkWorldContentLoader.run(); + } + + public void addToVoidMinerDrops() { + for (WorldGen_GT_Ore_Layer t : WorldGen_Ores.validOreveins.values()) { + addVMDrop(t.mPrimaryMeta, 0, t.mWeight); + addVMDrop(t.mSecondaryMeta, 0, t.mWeight); + addVMDrop(t.mBetweenMeta, 0, t.mWeight / 8f); + addVMDrop(t.mSporadicMeta, 0, t.mWeight / 8f); + } + } + + public void addVMDrop(Block block, int meta, float weight) { + MTEVoidMinerBase.addBlockToDimensionList(GTPPCore.EVERGLADES_ID, block, meta, weight); + } + + @EventHandler + public void serverLoad(FMLServerStartingEvent event) { + getEvergladesBiome().serverLoad(event); + } + + @EventHandler + public static void postInit(final FMLPostInitializationEvent e) { + Logger.INFO("Finished loading Everglades plugin for GT++."); + } + + public static synchronized BiomeEverglades getEvergladesBiome() { + return Everglades_Biome; + } + + public static synchronized void setEvergladesBiome(BiomeEverglades darkWorld_Biome) { + Everglades_Biome = darkWorld_Biome; + } + + @Override + public void actionPerformed(ActionEvent arg0) { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/gtPlusPlus/everglades/GTplusplus_Everglades.java b/src/main/java/gtPlusPlus/everglades/GTplusplus_Everglades.java deleted file mode 100644 index 3cb8893b16..0000000000 --- a/src/main/java/gtPlusPlus/everglades/GTplusplus_Everglades.java +++ /dev/null @@ -1,194 +0,0 @@ -package gtPlusPlus.everglades; - -import static gregtech.api.enums.Mods.GTPlusPlusEverglades; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.File; - -import net.minecraft.block.Block; -import net.minecraftforge.common.DimensionManager; -import net.minecraftforge.common.config.Configuration; - -import com.github.bartimaeusnek.crossmod.galacticgreg.GT_TileEntity_VoidMiner_Base; - -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.Mod.EventHandler; -import cpw.mods.fml.common.event.FMLInitializationEvent; -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.registry.GameRegistry; -import gregtech.api.enums.Mods; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.lib.CORE.Everglades; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.material.ORES; -import gtPlusPlus.everglades.biome.Biome_Everglades; -import gtPlusPlus.everglades.block.DarkWorldContentLoader; -import gtPlusPlus.everglades.dimension.Dimension_Everglades; -import gtPlusPlus.everglades.gen.gt.WorldGen_GT_Base; -import gtPlusPlus.everglades.gen.gt.WorldGen_GT_Ore_Layer; -import gtPlusPlus.everglades.gen.gt.WorldGen_Ores; -import gtPlusPlus.preloader.CORE_Preloader; -import gtPlusPlus.xmod.gregtech.HANDLER_GT; -import gtPlusPlus.xmod.gregtech.api.util.GTPP_Config; - -@Mod( - modid = Mods.Names.G_T_PLUS_PLUS_EVERGLADES, - name = Everglades.NAME, - version = Everglades.VERSION, - dependencies = "required-after:Forge; after:dreamcraft; after:IC2; required-after:gregtech; required-after:miscutils;") -public class GTplusplus_Everglades implements ActionListener { - - // Mod Instance - @Mod.Instance(Mods.Names.G_T_PLUS_PLUS_EVERGLADES) - public static GTplusplus_Everglades instance; - - // Dark World Handler - protected static volatile Biome_Everglades Everglades_Biome; - protected static volatile Dimension_Everglades Everglades_Dimension; - - // Pre-Init - @Mod.EventHandler - public void preInit(final FMLPreInitializationEvent event) { - Logger.INFO("Loading " + GTPlusPlusEverglades.ID + " V" + Everglades.VERSION); - - // Setup - setVars(event); - - setEvergladesBiome(new Biome_Everglades()); - Everglades_Dimension = new Dimension_Everglades(); - - // Load Dark World - getEvergladesBiome().instance = instance; - Everglades_Dimension.instance = instance; - getEvergladesBiome().preInit(event); - - // Load/Set Custom Ore Gen - HANDLER_GT.sCustomWorldgenFile = new GTPP_Config( - new Configuration( - new File(new File(event.getModConfigurationDirectory(), "GTplusplus"), "WorldGeneration.cfg"))); - } - - @EventHandler - public void load(final FMLInitializationEvent e) { - Logger.INFO("Begin resource allocation for " + GTPlusPlusEverglades.ID + " V" + Everglades.VERSION); - - // Load World and Biome - GameRegistry.registerWorldGenerator(new WorldGen_GT_Base(), Short.MAX_VALUE); - getEvergladesBiome().load(); - Everglades_Dimension.load(); - addToVoidMinerDrops(); - } - - public static synchronized void GenerateOreMaterials() { - MaterialGenerator.generateOreMaterial(ORES.CROCROITE); - MaterialGenerator.generateOreMaterial(ORES.GEIKIELITE); - MaterialGenerator.generateOreMaterial(ORES.NICHROMITE); - MaterialGenerator.generateOreMaterial(ORES.TITANITE); - MaterialGenerator.generateOreMaterial(ORES.ZIMBABWEITE); - MaterialGenerator.generateOreMaterial(ORES.ZIRCONILITE); - MaterialGenerator.generateOreMaterial(ORES.GADOLINITE_CE); - MaterialGenerator.generateOreMaterial(ORES.GADOLINITE_Y); - MaterialGenerator.generateOreMaterial(ORES.LEPERSONNITE); - MaterialGenerator.generateOreMaterial(ORES.SAMARSKITE_Y); - MaterialGenerator.generateOreMaterial(ORES.SAMARSKITE_YB); - MaterialGenerator.generateOreMaterial(ORES.XENOTIME); - MaterialGenerator.generateOreMaterial(ORES.YTTRIAITE); - MaterialGenerator.generateOreMaterial(ORES.YTTRIALITE); - MaterialGenerator.generateOreMaterial(ORES.YTTROCERITE); - MaterialGenerator.generateOreMaterial(ORES.ZIRCON); - MaterialGenerator.generateOreMaterial(ORES.POLYCRASE); - MaterialGenerator.generateOreMaterial(ORES.ZIRCOPHYLLITE); - MaterialGenerator.generateOreMaterial(ORES.ZIRKELITE); - MaterialGenerator.generateOreMaterial(ORES.LANTHANITE_LA); - MaterialGenerator.generateOreMaterial(ORES.LANTHANITE_CE); - MaterialGenerator.generateOreMaterial(ORES.LANTHANITE_ND); - MaterialGenerator.generateOreMaterial(ORES.AGARDITE_Y); - MaterialGenerator.generateOreMaterial(ORES.AGARDITE_CD); - MaterialGenerator.generateOreMaterial(ORES.AGARDITE_LA); - MaterialGenerator.generateOreMaterial(ORES.AGARDITE_ND); - MaterialGenerator.generateOreMaterial(ORES.HIBONITE); - MaterialGenerator.generateOreMaterial(ORES.CERITE); - MaterialGenerator.generateOreMaterial(ORES.FLUORCAPHITE); - MaterialGenerator.generateOreMaterial(ORES.FLORENCITE); - MaterialGenerator.generateOreMaterial(ORES.CRYOLITE); - - MaterialGenerator.generateOreMaterial(ORES.LAUTARITE); - MaterialGenerator.generateOreMaterial(ORES.LAFOSSAITE); - MaterialGenerator.generateOreMaterial(ORES.DEMICHELEITE_BR); - MaterialGenerator.generateOreMaterial(ORES.COMANCHEITE); - MaterialGenerator.generateOreMaterial(ORES.PERROUDITE); - MaterialGenerator.generateOreMaterial(ORES.HONEAITE); - MaterialGenerator.generateOreMaterial(ORES.ALBURNITE); - MaterialGenerator.generateOreMaterial(ORES.MIESSIITE); - MaterialGenerator.generateOreMaterial(ORES.KASHINITE); - MaterialGenerator.generateOreMaterial(ORES.IRARSITE); - MaterialGenerator.generateOreMaterial(ORES.GREENOCKITE); - MaterialGenerator.generateOreMaterial(ORES.RADIOBARITE); - MaterialGenerator.generateOreMaterial(ORES.DEEP_EARTH_REACTOR_FUEL_DEPOSIT); - - } - - protected synchronized void setVars(FMLPreInitializationEvent event) { - // Init WorldGen config. - HANDLER_GT.sCustomWorldgenFile = new GTPP_Config( - new Configuration( - new File(new File(event.getModConfigurationDirectory(), "GTplusplus"), "WorldGeneration.cfg"))); - - if (DimensionManager.isDimensionRegistered(Dimension_Everglades.DIMID)) { - Dimension_Everglades.DIMID = DimensionManager.getNextFreeDimId(); - } - - /* - * Set World Generation Values - */ - WorldGen_Ores.generateValidOreVeins(); - WorldGen_GT_Base.oreveinPercentage = 64; - WorldGen_GT_Base.oreveinAttempts = 16; - WorldGen_GT_Base.oreveinMaxPlacementAttempts = 4; - if (CORE_Preloader.DEBUG_MODE || CORE.DEVENV) { - WorldGen_GT_Base.debugWorldGen = true; - } - DarkWorldContentLoader.run(); - } - - public void addToVoidMinerDrops() { - for (WorldGen_GT_Ore_Layer t : WorldGen_Ores.validOreveins.values()) { - addVMDrop(t.mPrimaryMeta, 0, t.mWeight); - addVMDrop(t.mSecondaryMeta, 0, t.mWeight); - addVMDrop(t.mBetweenMeta, 0, t.mWeight / 8f); - addVMDrop(t.mSporadicMeta, 0, t.mWeight / 8f); - } - } - - public void addVMDrop(Block block, int meta, float weight) { - GT_TileEntity_VoidMiner_Base.addBlockToDimensionList(CORE.EVERGLADES_ID, block, meta, weight); - } - - @EventHandler - public void serverLoad(FMLServerStartingEvent event) { - getEvergladesBiome().serverLoad(event); - } - - @EventHandler - public static void postInit(final FMLPostInitializationEvent e) { - Logger.INFO("Finished loading Everglades plugin for GT++."); - } - - public static synchronized Biome_Everglades getEvergladesBiome() { - return Everglades_Biome; - } - - public static synchronized void setEvergladesBiome(Biome_Everglades darkWorld_Biome) { - Everglades_Biome = darkWorld_Biome; - } - - @Override - public void actionPerformed(ActionEvent arg0) { - // TODO Auto-generated method stub - - } -} diff --git a/src/main/java/gtPlusPlus/everglades/biome/BiomeEverglades.java b/src/main/java/gtPlusPlus/everglades/biome/BiomeEverglades.java new file mode 100644 index 0000000000..8394bd8385 --- /dev/null +++ b/src/main/java/gtPlusPlus/everglades/biome/BiomeEverglades.java @@ -0,0 +1,84 @@ +package gtPlusPlus.everglades.biome; + +import net.minecraft.entity.EntityLiving; +import net.minecraft.entity.monster.EntityPigZombie; +import net.minecraft.entity.passive.EntityBat; +import net.minecraft.entity.passive.EntitySquid; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraftforge.common.BiomeDictionary; +import net.minecraftforge.common.BiomeManager; + +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.event.FMLServerStartingEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtPlusPlus.core.entity.monster.EntitySickBlaze; +import gtPlusPlus.core.entity.monster.EntityStaballoyConstruct; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.everglades.dimension.DimensionEverglades; + +public class BiomeEverglades { + + public static BiomeGenEverglades biome = new BiomeGenEverglades(); + + public Object instance; + + public BiomeEverglades() {} + + public void load() { + BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.DEAD); + BiomeManager.addSpawnBiome(biome); + } + + public void serverLoad(FMLServerStartingEvent event) {} + + public void preInit(FMLPreInitializationEvent event) {} + + static class BiomeGenEverglades extends BiomeGenBase { + + @SuppressWarnings("unchecked") + public BiomeGenEverglades() { + super(GTPPCore.EVERGLADESBIOME_ID); + // this.setBiomeID(); + this.theBiomeDecorator = new CustomBiomeGenerator(); + this.theBiomeDecorator.treesPerChunk = 10; + // Logger.INFO("Dark World Temperature Category: "+getTempCategory()); + this.setBiomeName("Toxic Everglades"); + this.topBlock = DimensionEverglades.blockTopLayer; + this.fillerBlock = DimensionEverglades.blockSecondLayer; + this.enableRain = true; + this.enableSnow = false; + this.rainfall = 0.7F; + this.setHeight(new BiomeGenBase.Height(0.3F, 0.5F)); + this.heightVariation = 0.4F; + this.waterColorMultiplier = 0x17290A; + this.rootHeight = -0.25f; // Ground level + + this.spawnableMonsterList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableCaveCreatureList.clear(); + + // Enemies + this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntitySickBlaze.class, 100, 2, 6)); + this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityPigZombie.class, 75, 4, 16)); + this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityStaballoyConstruct.class, 20, 1, 2)); + + // Animals + this.spawnableWaterCreatureList.add(new BiomeGenBase.SpawnListEntry(EntitySquid.class, 1, 1, 6)); + this.spawnableCaveCreatureList.add(new BiomeGenBase.SpawnListEntry(EntityBat.class, 10, 8, 8)); + } + + @Override + @SideOnly(Side.CLIENT) + public int getSkyColorByTemp(float par1) { + return 0xF67A14; + } + + @SuppressWarnings({ "unchecked", "unused" }) + private boolean addToMonsterSpawnLists(Class EntityClass, int a, int b, int c) { + this.spawnableCaveCreatureList.add(new SpawnListEntry(EntityClass, a, b, c)); + return true; + } + } +} diff --git a/src/main/java/gtPlusPlus/everglades/biome/BiomeGenerator_Custom.java b/src/main/java/gtPlusPlus/everglades/biome/BiomeGenerator_Custom.java deleted file mode 100644 index fce5efca36..0000000000 --- a/src/main/java/gtPlusPlus/everglades/biome/BiomeGenerator_Custom.java +++ /dev/null @@ -1,361 +0,0 @@ -package gtPlusPlus.everglades.biome; - -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.BIG_SHROOM; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.CACTUS; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.CLAY; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.DEAD_BUSH; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FLOWERS; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.GRASS; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.LAKE; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.LILYPAD; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.PUMPKIN; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.REED; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SAND; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SAND_PASS2; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SHROOM; -import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.TREE; -import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.COAL; -import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.DIAMOND; -import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.DIRT; -import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.GOLD; -import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.GRAVEL; -import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.IRON; -import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.LAPIS; -import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.REDSTONE; - -import java.util.Random; - -import net.minecraft.block.BlockFlower; -import net.minecraft.block.material.Material; -import net.minecraft.init.Blocks; -import net.minecraft.world.World; -import net.minecraft.world.biome.BiomeDecorator; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraft.world.gen.feature.WorldGenAbstractTree; -import net.minecraft.world.gen.feature.WorldGenBigMushroom; -import net.minecraft.world.gen.feature.WorldGenCactus; -import net.minecraft.world.gen.feature.WorldGenDeadBush; -import net.minecraft.world.gen.feature.WorldGenFlowers; -import net.minecraft.world.gen.feature.WorldGenLiquids; -import net.minecraft.world.gen.feature.WorldGenPumpkin; -import net.minecraft.world.gen.feature.WorldGenReed; -import net.minecraft.world.gen.feature.WorldGenerator; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.terraingen.DecorateBiomeEvent; -import net.minecraftforge.event.terraingen.OreGenEvent; -import net.minecraftforge.event.terraingen.TerrainGen; - -import gtPlusPlus.everglades.gen.WorldGenDeadLilly; -import gtPlusPlus.everglades.gen.WorldGenMinable_Custom; - -public class BiomeGenerator_Custom extends BiomeDecorator { - - public WorldGenerator fluoriteGen; - - public BiomeGenerator_Custom() { - // Basic Blocks - this.sandGen = new WorldGenMinable_Custom(Blocks.sand, 12); - this.gravelAsSandGen = new WorldGenMinable_Custom(Blocks.gravel, 8); - this.dirtGen = new WorldGenMinable_Custom(Blocks.dirt, 32); - this.gravelGen = new WorldGenMinable_Custom(Blocks.gravel, 12); - - // Oregen - this.coalGen = new WorldGenMinable_Custom(Blocks.coal_ore, 16); - this.ironGen = new WorldGenMinable_Custom(Blocks.iron_ore, 12); - this.goldGen = new WorldGenMinable_Custom(Blocks.gold_ore, 12); - this.redstoneGen = new WorldGenMinable_Custom(Blocks.redstone_ore, 10); - this.diamondGen = new WorldGenMinable_Custom(Blocks.diamond_ore, 12); - this.lapisGen = new WorldGenMinable_Custom(Blocks.lapis_ore, 8); - - // Nature - this.yellowFlowerGen = new WorldGenFlowers(Blocks.yellow_flower); - this.mushroomBrownGen = new WorldGenFlowers(Blocks.brown_mushroom); - this.mushroomRedGen = new WorldGenFlowers(Blocks.red_mushroom); - this.bigMushroomGen = new WorldGenBigMushroom(); - this.reedGen = new WorldGenReed(); - this.cactusGen = new WorldGenCactus(); - this.waterlilyGen = new WorldGenDeadLilly(); - - this.flowersPerChunk = 1; - this.grassPerChunk = 5; - this.sandPerChunk = 3; - this.sandPerChunk2 = 5; - this.clayPerChunk = 7; - - this.generateLakes = true; - } - - @Override - public void decorateChunk(World p_150512_1_, Random p_150512_2_, BiomeGenBase p_150512_3_, int p_150512_4_, - int p_150512_5_) { - if (this.currentWorld != null) { - throw new RuntimeException("Already decorating!!"); - } else { - this.currentWorld = p_150512_1_; - this.randomGenerator = p_150512_2_; - this.chunk_X = p_150512_4_; - this.chunk_Z = p_150512_5_; - this.genDecorations(p_150512_3_); - this.currentWorld = null; - this.randomGenerator = null; - } - } - - @Override - protected void genDecorations(BiomeGenBase p_150513_1_) { - MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Pre(currentWorld, randomGenerator, chunk_X, chunk_Z)); - this.generateOres(); - int i; - int j; - int k; - - boolean doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, SAND); - for (i = 0; doGen && i < this.sandPerChunk2; ++i) { - j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - this.sandGen.generate( - this.currentWorld, - this.randomGenerator, - j, - this.currentWorld.getTopSolidOrLiquidBlock(j, k), - k); - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, CLAY); - for (i = 0; doGen && i < this.clayPerChunk; ++i) { - j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - this.clayGen.generate( - this.currentWorld, - this.randomGenerator, - j, - this.currentWorld.getTopSolidOrLiquidBlock(j, k), - k); - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, SAND_PASS2); - for (i = 0; doGen && i < this.sandPerChunk; ++i) { - j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - this.gravelAsSandGen.generate( - this.currentWorld, - this.randomGenerator, - j, - this.currentWorld.getTopSolidOrLiquidBlock(j, k), - k); - } - - i = this.treesPerChunk; - - if (this.randomGenerator.nextInt(10) == 0) { - ++i; - } - - int l; - int i1; - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, TREE); - for (j = 0; doGen && j < i; ++j) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - i1 = this.currentWorld.getHeightValue(k, l); - WorldGenAbstractTree worldgenabstracttree = p_150513_1_.func_150567_a(this.randomGenerator); - worldgenabstracttree.setScale(1.0D, 1.0D, 1.0D); - - if (worldgenabstracttree.generate(this.currentWorld, this.randomGenerator, k, i1, l)) { - worldgenabstracttree.func_150524_b(this.currentWorld, this.randomGenerator, k, i1, l); - } - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, BIG_SHROOM); - for (j = 0; doGen && j < this.bigMushroomsPerChunk; ++j) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - this.bigMushroomGen - .generate(this.currentWorld, this.randomGenerator, k, this.currentWorld.getHeightValue(k, l), l); - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, FLOWERS); - for (j = 0; doGen && j < this.flowersPerChunk; ++j) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - i1 = nextInt(this.currentWorld.getHeightValue(k, l) + 32); - String s = p_150513_1_.func_150572_a(this.randomGenerator, k, i1, l); - BlockFlower blockflower = BlockFlower.func_149857_e(s); - - if (blockflower.getMaterial() != Material.air) { - this.yellowFlowerGen.func_150550_a(blockflower, BlockFlower.func_149856_f(s)); - this.yellowFlowerGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); - } - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, GRASS); - for (j = 0; doGen && j < this.grassPerChunk; ++j) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); - WorldGenerator worldgenerator = p_150513_1_.getRandomWorldGenForGrass(this.randomGenerator); - worldgenerator.generate(this.currentWorld, this.randomGenerator, k, i1, l); - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, DEAD_BUSH); - for (j = 0; doGen && j < this.deadBushPerChunk; ++j) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); - (new WorldGenDeadBush(Blocks.deadbush)).generate(this.currentWorld, this.randomGenerator, k, i1, l); - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, LILYPAD); - for (j = 0; doGen && j < this.waterlilyPerChunk; ++j) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - - for (i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); i1 > 0 - && this.currentWorld.isAirBlock(k, i1 - 1, l); --i1) { - ; - } - - this.waterlilyGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, SHROOM); - for (j = 0; doGen && j < this.mushroomsPerChunk; ++j) { - if (this.randomGenerator.nextInt(4) == 0) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - i1 = this.currentWorld.getHeightValue(k, l); - this.mushroomBrownGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); - } - - if (this.randomGenerator.nextInt(8) == 0) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); - this.mushroomRedGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); - } - } - - if (doGen && this.randomGenerator.nextInt(4) == 0) { - j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - l = nextInt(this.currentWorld.getHeightValue(j, k) * 2); - this.mushroomBrownGen.generate(this.currentWorld, this.randomGenerator, j, l, k); - } - - if (doGen && this.randomGenerator.nextInt(8) == 0) { - j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - l = nextInt(this.currentWorld.getHeightValue(j, k) * 2); - this.mushroomRedGen.generate(this.currentWorld, this.randomGenerator, j, l, k); - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, REED); - for (j = 0; doGen && j < this.reedsPerChunk; ++j) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); - this.reedGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); - } - - for (j = 0; doGen && j < 10; ++j) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); - this.reedGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, PUMPKIN); - if (doGen && this.randomGenerator.nextInt(32) == 0) { - j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - l = nextInt(this.currentWorld.getHeightValue(j, k) * 2); - (new WorldGenPumpkin()).generate(this.currentWorld, this.randomGenerator, j, l, k); - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, CACTUS); - for (j = 0; doGen && j < this.cactiPerChunk; ++j) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); - this.cactusGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); - } - - doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, LAKE); - if (doGen && this.generateLakes) { - for (j = 0; j < 50; ++j) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.randomGenerator.nextInt(this.randomGenerator.nextInt(248) + 8); - i1 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - (new WorldGenLiquids(Blocks.flowing_water)).generate(this.currentWorld, this.randomGenerator, k, l, i1); - } - - for (j = 0; j < 20; ++j) { - k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; - l = this.randomGenerator - .nextInt(this.randomGenerator.nextInt(this.randomGenerator.nextInt(240) + 8) + 8); - i1 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; - (new WorldGenLiquids(Blocks.flowing_lava)).generate(this.currentWorld, this.randomGenerator, k, l, i1); - } - } - - MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Post(currentWorld, randomGenerator, chunk_X, chunk_Z)); - } - - /** - * Standard ore generation helper. Generates most ores. - */ - @Override - protected void genStandardOre1(int p_76795_1_, WorldGenerator p_76795_2_, int p_76795_3_, int p_76795_4_) { - for (int l = 0; l < p_76795_1_; ++l) { - int i1 = this.chunk_X + this.randomGenerator.nextInt(16); - int j1 = this.randomGenerator.nextInt(p_76795_4_ - p_76795_3_) + p_76795_3_; - int k1 = this.chunk_Z + this.randomGenerator.nextInt(16); - p_76795_2_.generate(this.currentWorld, this.randomGenerator, i1, j1, k1); - } - } - - /** - * Standard ore generation helper. Generates Lapis Lazuli. - */ - @Override - protected void genStandardOre2(int p_76793_1_, WorldGenerator p_76793_2_, int p_76793_3_, int p_76793_4_) { - for (int l = 0; l < p_76793_1_; ++l) { - int i1 = this.chunk_X + this.randomGenerator.nextInt(16); - int j1 = this.randomGenerator.nextInt(p_76793_4_) + this.randomGenerator.nextInt(p_76793_4_) - + (p_76793_3_ - p_76793_4_); - int k1 = this.chunk_Z + this.randomGenerator.nextInt(16); - p_76793_2_.generate(this.currentWorld, this.randomGenerator, i1, j1, k1); - } - } - - /** - * Generates ores in the current chunk - */ - @Override - protected void generateOres() { - MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Pre(currentWorld, randomGenerator, chunk_X, chunk_Z)); - if (TerrainGen.generateOre(currentWorld, randomGenerator, dirtGen, chunk_X, chunk_Z, DIRT)) - this.genStandardOre1(20, this.dirtGen, 0, 256); - if (TerrainGen.generateOre(currentWorld, randomGenerator, gravelGen, chunk_X, chunk_Z, GRAVEL)) - this.genStandardOre1(10, this.gravelGen, 0, 256); - if (TerrainGen.generateOre(currentWorld, randomGenerator, coalGen, chunk_X, chunk_Z, COAL)) - this.genStandardOre1(20, this.coalGen, 0, 128); - if (TerrainGen.generateOre(currentWorld, randomGenerator, ironGen, chunk_X, chunk_Z, IRON)) - this.genStandardOre1(20, this.ironGen, 0, 64); - if (TerrainGen.generateOre(currentWorld, randomGenerator, goldGen, chunk_X, chunk_Z, GOLD)) - this.genStandardOre1(2, this.goldGen, 0, 32); - if (TerrainGen.generateOre(currentWorld, randomGenerator, redstoneGen, chunk_X, chunk_Z, REDSTONE)) - this.genStandardOre1(8, this.redstoneGen, 0, 16); - if (TerrainGen.generateOre(currentWorld, randomGenerator, diamondGen, chunk_X, chunk_Z, DIAMOND)) - this.genStandardOre1(1, this.diamondGen, 0, 16); - if (TerrainGen.generateOre(currentWorld, randomGenerator, lapisGen, chunk_X, chunk_Z, LAPIS)) - this.genStandardOre2(1, this.lapisGen, 16, 16); - MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Post(currentWorld, randomGenerator, chunk_X, chunk_Z)); - } - - private int nextInt(int i) { - if (i <= 1) return 0; - return this.randomGenerator.nextInt(i); - } -} diff --git a/src/main/java/gtPlusPlus/everglades/biome/Biome_Everglades.java b/src/main/java/gtPlusPlus/everglades/biome/Biome_Everglades.java deleted file mode 100644 index f9b57b14c8..0000000000 --- a/src/main/java/gtPlusPlus/everglades/biome/Biome_Everglades.java +++ /dev/null @@ -1,84 +0,0 @@ -package gtPlusPlus.everglades.biome; - -import net.minecraft.entity.EntityLiving; -import net.minecraft.entity.monster.EntityPigZombie; -import net.minecraft.entity.passive.EntityBat; -import net.minecraft.entity.passive.EntitySquid; -import net.minecraft.world.biome.BiomeGenBase; -import net.minecraftforge.common.BiomeDictionary; -import net.minecraftforge.common.BiomeManager; - -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.event.FMLServerStartingEvent; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gtPlusPlus.core.entity.monster.EntitySickBlaze; -import gtPlusPlus.core.entity.monster.EntityStaballoyConstruct; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.everglades.dimension.Dimension_Everglades; - -public class Biome_Everglades { - - public static BiomeGenEverglades biome = new BiomeGenEverglades(); - - public Object instance; - - public Biome_Everglades() {} - - public void load() { - BiomeDictionary.registerBiomeType(biome, BiomeDictionary.Type.DEAD); - BiomeManager.addSpawnBiome(biome); - } - - public void serverLoad(FMLServerStartingEvent event) {} - - public void preInit(FMLPreInitializationEvent event) {} - - static class BiomeGenEverglades extends BiomeGenBase { - - @SuppressWarnings("unchecked") - public BiomeGenEverglades() { - super(CORE.EVERGLADESBIOME_ID); - // this.setBiomeID(); - this.theBiomeDecorator = new BiomeGenerator_Custom(); - this.theBiomeDecorator.treesPerChunk = 10; - // Logger.INFO("Dark World Temperature Category: "+getTempCategory()); - this.setBiomeName("Toxic Everglades"); - this.topBlock = Dimension_Everglades.blockTopLayer; - this.fillerBlock = Dimension_Everglades.blockSecondLayer; - this.enableRain = true; - this.enableSnow = false; - this.rainfall = 0.7F; - this.setHeight(new BiomeGenBase.Height(0.3F, 0.5F)); - this.heightVariation = 0.4F; - this.waterColorMultiplier = 0x17290A; - this.rootHeight = -0.25f; // Ground level - - this.spawnableMonsterList.clear(); - this.spawnableCreatureList.clear(); - this.spawnableWaterCreatureList.clear(); - this.spawnableCaveCreatureList.clear(); - - // Enemies - this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntitySickBlaze.class, 100, 2, 6)); - this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityPigZombie.class, 75, 4, 16)); - this.spawnableMonsterList.add(new BiomeGenBase.SpawnListEntry(EntityStaballoyConstruct.class, 20, 1, 2)); - - // Animals - this.spawnableWaterCreatureList.add(new BiomeGenBase.SpawnListEntry(EntitySquid.class, 1, 1, 6)); - this.spawnableCaveCreatureList.add(new BiomeGenBase.SpawnListEntry(EntityBat.class, 10, 8, 8)); - } - - @Override - @SideOnly(Side.CLIENT) - public int getSkyColorByTemp(float par1) { - return 0xF67A14; - } - - @SuppressWarnings({ "unchecked", "unused" }) - private boolean addToMonsterSpawnLists(Class EntityClass, int a, int b, int c) { - this.spawnableCaveCreatureList.add(new SpawnListEntry(EntityClass, a, b, c)); - return true; - } - } -} diff --git a/src/main/java/gtPlusPlus/everglades/biome/CustomBiomeGenerator.java b/src/main/java/gtPlusPlus/everglades/biome/CustomBiomeGenerator.java new file mode 100644 index 0000000000..4df290b560 --- /dev/null +++ b/src/main/java/gtPlusPlus/everglades/biome/CustomBiomeGenerator.java @@ -0,0 +1,361 @@ +package gtPlusPlus.everglades.biome; + +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.BIG_SHROOM; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.CACTUS; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.CLAY; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.DEAD_BUSH; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.FLOWERS; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.GRASS; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.LAKE; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.LILYPAD; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.PUMPKIN; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.REED; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SAND; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SAND_PASS2; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.SHROOM; +import static net.minecraftforge.event.terraingen.DecorateBiomeEvent.Decorate.EventType.TREE; +import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.COAL; +import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.DIAMOND; +import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.DIRT; +import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.GOLD; +import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.GRAVEL; +import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.IRON; +import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.LAPIS; +import static net.minecraftforge.event.terraingen.OreGenEvent.GenerateMinable.EventType.REDSTONE; + +import java.util.Random; + +import net.minecraft.block.BlockFlower; +import net.minecraft.block.material.Material; +import net.minecraft.init.Blocks; +import net.minecraft.world.World; +import net.minecraft.world.biome.BiomeDecorator; +import net.minecraft.world.biome.BiomeGenBase; +import net.minecraft.world.gen.feature.WorldGenAbstractTree; +import net.minecraft.world.gen.feature.WorldGenBigMushroom; +import net.minecraft.world.gen.feature.WorldGenCactus; +import net.minecraft.world.gen.feature.WorldGenDeadBush; +import net.minecraft.world.gen.feature.WorldGenFlowers; +import net.minecraft.world.gen.feature.WorldGenLiquids; +import net.minecraft.world.gen.feature.WorldGenPumpkin; +import net.minecraft.world.gen.feature.WorldGenReed; +import net.minecraft.world.gen.feature.WorldGenerator; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.event.terraingen.DecorateBiomeEvent; +import net.minecraftforge.event.terraingen.OreGenEvent; +import net.minecraftforge.event.terraingen.TerrainGen; + +import gtPlusPlus.everglades.gen.WorldGenDeadLilly; +import gtPlusPlus.everglades.gen.WorldGenMinableCustom; + +public class CustomBiomeGenerator extends BiomeDecorator { + + public WorldGenerator fluoriteGen; + + public CustomBiomeGenerator() { + // Basic Blocks + this.sandGen = new WorldGenMinableCustom(Blocks.sand, 12); + this.gravelAsSandGen = new WorldGenMinableCustom(Blocks.gravel, 8); + this.dirtGen = new WorldGenMinableCustom(Blocks.dirt, 32); + this.gravelGen = new WorldGenMinableCustom(Blocks.gravel, 12); + + // Oregen + this.coalGen = new WorldGenMinableCustom(Blocks.coal_ore, 16); + this.ironGen = new WorldGenMinableCustom(Blocks.iron_ore, 12); + this.goldGen = new WorldGenMinableCustom(Blocks.gold_ore, 12); + this.redstoneGen = new WorldGenMinableCustom(Blocks.redstone_ore, 10); + this.diamondGen = new WorldGenMinableCustom(Blocks.diamond_ore, 12); + this.lapisGen = new WorldGenMinableCustom(Blocks.lapis_ore, 8); + + // Nature + this.yellowFlowerGen = new WorldGenFlowers(Blocks.yellow_flower); + this.mushroomBrownGen = new WorldGenFlowers(Blocks.brown_mushroom); + this.mushroomRedGen = new WorldGenFlowers(Blocks.red_mushroom); + this.bigMushroomGen = new WorldGenBigMushroom(); + this.reedGen = new WorldGenReed(); + this.cactusGen = new WorldGenCactus(); + this.waterlilyGen = new WorldGenDeadLilly(); + + this.flowersPerChunk = 1; + this.grassPerChunk = 5; + this.sandPerChunk = 3; + this.sandPerChunk2 = 5; + this.clayPerChunk = 7; + + this.generateLakes = true; + } + + @Override + public void decorateChunk(World p_150512_1_, Random p_150512_2_, BiomeGenBase p_150512_3_, int p_150512_4_, + int p_150512_5_) { + if (this.currentWorld != null) { + throw new RuntimeException("Already decorating!!"); + } else { + this.currentWorld = p_150512_1_; + this.randomGenerator = p_150512_2_; + this.chunk_X = p_150512_4_; + this.chunk_Z = p_150512_5_; + this.genDecorations(p_150512_3_); + this.currentWorld = null; + this.randomGenerator = null; + } + } + + @Override + protected void genDecorations(BiomeGenBase p_150513_1_) { + MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Pre(currentWorld, randomGenerator, chunk_X, chunk_Z)); + this.generateOres(); + int i; + int j; + int k; + + boolean doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, SAND); + for (i = 0; doGen && i < this.sandPerChunk2; ++i) { + j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.sandGen.generate( + this.currentWorld, + this.randomGenerator, + j, + this.currentWorld.getTopSolidOrLiquidBlock(j, k), + k); + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, CLAY); + for (i = 0; doGen && i < this.clayPerChunk; ++i) { + j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.clayGen.generate( + this.currentWorld, + this.randomGenerator, + j, + this.currentWorld.getTopSolidOrLiquidBlock(j, k), + k); + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, SAND_PASS2); + for (i = 0; doGen && i < this.sandPerChunk; ++i) { + j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.gravelAsSandGen.generate( + this.currentWorld, + this.randomGenerator, + j, + this.currentWorld.getTopSolidOrLiquidBlock(j, k), + k); + } + + i = this.treesPerChunk; + + if (this.randomGenerator.nextInt(10) == 0) { + ++i; + } + + int l; + int i1; + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, TREE); + for (j = 0; doGen && j < i; ++j) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + i1 = this.currentWorld.getHeightValue(k, l); + WorldGenAbstractTree worldgenabstracttree = p_150513_1_.func_150567_a(this.randomGenerator); + worldgenabstracttree.setScale(1.0D, 1.0D, 1.0D); + + if (worldgenabstracttree.generate(this.currentWorld, this.randomGenerator, k, i1, l)) { + worldgenabstracttree.func_150524_b(this.currentWorld, this.randomGenerator, k, i1, l); + } + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, BIG_SHROOM); + for (j = 0; doGen && j < this.bigMushroomsPerChunk; ++j) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.bigMushroomGen + .generate(this.currentWorld, this.randomGenerator, k, this.currentWorld.getHeightValue(k, l), l); + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, FLOWERS); + for (j = 0; doGen && j < this.flowersPerChunk; ++j) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + i1 = nextInt(this.currentWorld.getHeightValue(k, l) + 32); + String s = p_150513_1_.func_150572_a(this.randomGenerator, k, i1, l); + BlockFlower blockflower = BlockFlower.func_149857_e(s); + + if (blockflower.getMaterial() != Material.air) { + this.yellowFlowerGen.func_150550_a(blockflower, BlockFlower.func_149856_f(s)); + this.yellowFlowerGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); + } + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, GRASS); + for (j = 0; doGen && j < this.grassPerChunk; ++j) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); + WorldGenerator worldgenerator = p_150513_1_.getRandomWorldGenForGrass(this.randomGenerator); + worldgenerator.generate(this.currentWorld, this.randomGenerator, k, i1, l); + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, DEAD_BUSH); + for (j = 0; doGen && j < this.deadBushPerChunk; ++j) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); + (new WorldGenDeadBush(Blocks.deadbush)).generate(this.currentWorld, this.randomGenerator, k, i1, l); + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, LILYPAD); + for (j = 0; doGen && j < this.waterlilyPerChunk; ++j) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + + for (i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); i1 > 0 + && this.currentWorld.isAirBlock(k, i1 - 1, l); --i1) { + ; + } + + this.waterlilyGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, SHROOM); + for (j = 0; doGen && j < this.mushroomsPerChunk; ++j) { + if (this.randomGenerator.nextInt(4) == 0) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + i1 = this.currentWorld.getHeightValue(k, l); + this.mushroomBrownGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); + } + + if (this.randomGenerator.nextInt(8) == 0) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); + this.mushroomRedGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); + } + } + + if (doGen && this.randomGenerator.nextInt(4) == 0) { + j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + l = nextInt(this.currentWorld.getHeightValue(j, k) * 2); + this.mushroomBrownGen.generate(this.currentWorld, this.randomGenerator, j, l, k); + } + + if (doGen && this.randomGenerator.nextInt(8) == 0) { + j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + l = nextInt(this.currentWorld.getHeightValue(j, k) * 2); + this.mushroomRedGen.generate(this.currentWorld, this.randomGenerator, j, l, k); + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, REED); + for (j = 0; doGen && j < this.reedsPerChunk; ++j) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); + this.reedGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); + } + + for (j = 0; doGen && j < 10; ++j) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); + this.reedGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, PUMPKIN); + if (doGen && this.randomGenerator.nextInt(32) == 0) { + j = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + k = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + l = nextInt(this.currentWorld.getHeightValue(j, k) * 2); + (new WorldGenPumpkin()).generate(this.currentWorld, this.randomGenerator, j, l, k); + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, CACTUS); + for (j = 0; doGen && j < this.cactiPerChunk; ++j) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + i1 = nextInt(this.currentWorld.getHeightValue(k, l) * 2); + this.cactusGen.generate(this.currentWorld, this.randomGenerator, k, i1, l); + } + + doGen = TerrainGen.decorate(currentWorld, randomGenerator, chunk_X, chunk_Z, LAKE); + if (doGen && this.generateLakes) { + for (j = 0; j < 50; ++j) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator.nextInt(this.randomGenerator.nextInt(248) + 8); + i1 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + (new WorldGenLiquids(Blocks.flowing_water)).generate(this.currentWorld, this.randomGenerator, k, l, i1); + } + + for (j = 0; j < 20; ++j) { + k = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + l = this.randomGenerator + .nextInt(this.randomGenerator.nextInt(this.randomGenerator.nextInt(240) + 8) + 8); + i1 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + (new WorldGenLiquids(Blocks.flowing_lava)).generate(this.currentWorld, this.randomGenerator, k, l, i1); + } + } + + MinecraftForge.EVENT_BUS.post(new DecorateBiomeEvent.Post(currentWorld, randomGenerator, chunk_X, chunk_Z)); + } + + /** + * Standard ore generation helper. Generates most ores. + */ + @Override + protected void genStandardOre1(int p_76795_1_, WorldGenerator p_76795_2_, int p_76795_3_, int p_76795_4_) { + for (int l = 0; l < p_76795_1_; ++l) { + int i1 = this.chunk_X + this.randomGenerator.nextInt(16); + int j1 = this.randomGenerator.nextInt(p_76795_4_ - p_76795_3_) + p_76795_3_; + int k1 = this.chunk_Z + this.randomGenerator.nextInt(16); + p_76795_2_.generate(this.currentWorld, this.randomGenerator, i1, j1, k1); + } + } + + /** + * Standard ore generation helper. Generates Lapis Lazuli. + */ + @Override + protected void genStandardOre2(int p_76793_1_, WorldGenerator p_76793_2_, int p_76793_3_, int p_76793_4_) { + for (int l = 0; l < p_76793_1_; ++l) { + int i1 = this.chunk_X + this.randomGenerator.nextInt(16); + int j1 = this.randomGenerator.nextInt(p_76793_4_) + this.randomGenerator.nextInt(p_76793_4_) + + (p_76793_3_ - p_76793_4_); + int k1 = this.chunk_Z + this.randomGenerator.nextInt(16); + p_76793_2_.generate(this.currentWorld, this.randomGenerator, i1, j1, k1); + } + } + + /** + * Generates ores in the current chunk + */ + @Override + protected void generateOres() { + MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Pre(currentWorld, randomGenerator, chunk_X, chunk_Z)); + if (TerrainGen.generateOre(currentWorld, randomGenerator, dirtGen, chunk_X, chunk_Z, DIRT)) + this.genStandardOre1(20, this.dirtGen, 0, 256); + if (TerrainGen.generateOre(currentWorld, randomGenerator, gravelGen, chunk_X, chunk_Z, GRAVEL)) + this.genStandardOre1(10, this.gravelGen, 0, 256); + if (TerrainGen.generateOre(currentWorld, randomGenerator, coalGen, chunk_X, chunk_Z, COAL)) + this.genStandardOre1(20, this.coalGen, 0, 128); + if (TerrainGen.generateOre(currentWorld, randomGenerator, ironGen, chunk_X, chunk_Z, IRON)) + this.genStandardOre1(20, this.ironGen, 0, 64); + if (TerrainGen.generateOre(currentWorld, randomGenerator, goldGen, chunk_X, chunk_Z, GOLD)) + this.genStandardOre1(2, this.goldGen, 0, 32); + if (TerrainGen.generateOre(currentWorld, randomGenerator, redstoneGen, chunk_X, chunk_Z, REDSTONE)) + this.genStandardOre1(8, this.redstoneGen, 0, 16); + if (TerrainGen.generateOre(currentWorld, randomGenerator, diamondGen, chunk_X, chunk_Z, DIAMOND)) + this.genStandardOre1(1, this.diamondGen, 0, 16); + if (TerrainGen.generateOre(currentWorld, randomGenerator, lapisGen, chunk_X, chunk_Z, LAPIS)) + this.genStandardOre2(1, this.lapisGen, 16, 16); + MinecraftForge.ORE_GEN_BUS.post(new OreGenEvent.Post(currentWorld, randomGenerator, chunk_X, chunk_Z)); + } + + private int nextInt(int i) { + if (i <= 1) return 0; + return this.randomGenerator.nextInt(i); + } +} diff --git a/src/main/java/gtPlusPlus/everglades/biome/GenLayerBiomes.java b/src/main/java/gtPlusPlus/everglades/biome/GenLayerBiomes.java index fe799fbe42..e0c96d88b4 100644 --- a/src/main/java/gtPlusPlus/everglades/biome/GenLayerBiomes.java +++ b/src/main/java/gtPlusPlus/everglades/biome/GenLayerBiomes.java @@ -6,7 +6,7 @@ import net.minecraft.world.gen.layer.IntCache; public class GenLayerBiomes extends GenLayer { - protected BiomeGenBase[] allowedBiomes = { Biome_Everglades.biome, }; + protected BiomeGenBase[] allowedBiomes = { BiomeEverglades.biome, }; public GenLayerBiomes(long seed) { super(seed); diff --git a/src/main/java/gtPlusPlus/everglades/block/BlockEvergladesPortal.java b/src/main/java/gtPlusPlus/everglades/block/BlockEvergladesPortal.java index eafa67980d..16ad852e75 100644 --- a/src/main/java/gtPlusPlus/everglades/block/BlockEvergladesPortal.java +++ b/src/main/java/gtPlusPlus/everglades/block/BlockEvergladesPortal.java @@ -21,9 +21,9 @@ import cpw.mods.fml.relauncher.SideOnly; import gtPlusPlus.api.interfaces.ITileTooltip; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.minecraft.BlockPos; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.Utils; -import gtPlusPlus.everglades.dimension.Dimension_Everglades; +import gtPlusPlus.everglades.dimension.DimensionEverglades; import gtPlusPlus.everglades.world.TeleporterDimensionMod; public class BlockEvergladesPortal extends BlockBreakable implements ITileTooltip { @@ -75,7 +75,7 @@ public class BlockEvergladesPortal extends BlockBreakable implements ITileToolti for (BlockPos side : portal.getSurroundingBlocks()) { Block b = side.getBlockAtPos(); - if (b == Dimension_Everglades.blockPortalFrame || b == Dimension_Everglades.portalBlock) { + if (b == DimensionEverglades.blockPortalFrame || b == DimensionEverglades.portalBlock) { blockCount++; } } @@ -135,12 +135,12 @@ public class BlockEvergladesPortal extends BlockBreakable implements ITileToolti public boolean tryToCreatePortal(World par1World, int par2, int par3, int par4) { byte b0 = 0; byte b1 = 0; - if (par1World.getBlock(par2 - 1, par3, par4) == Dimension_Everglades.blockPortalFrame - || par1World.getBlock(par2 + 1, par3, par4) == Dimension_Everglades.blockPortalFrame) { + if (par1World.getBlock(par2 - 1, par3, par4) == DimensionEverglades.blockPortalFrame + || par1World.getBlock(par2 + 1, par3, par4) == DimensionEverglades.blockPortalFrame) { b0 = 1; } - if (par1World.getBlock(par2, par3, par4 - 1) == Dimension_Everglades.blockPortalFrame - || par1World.getBlock(par2, par3, par4 + 1) == Dimension_Everglades.blockPortalFrame) { + if (par1World.getBlock(par2, par3, par4 - 1) == DimensionEverglades.blockPortalFrame + || par1World.getBlock(par2, par3, par4 + 1) == DimensionEverglades.blockPortalFrame) { b1 = 1; } if (b0 == b1) { @@ -158,7 +158,7 @@ public class BlockEvergladesPortal extends BlockBreakable implements ITileToolti if (l != -1 && l != 2 || i1 != -1 && i1 != 3) { Block j1 = par1World.getBlock(par2 + b0 * l, par3 + i1, par4 + b1 * l); if (flag) { - if (j1 != Dimension_Everglades.blockPortalFrame) { + if (j1 != DimensionEverglades.blockPortalFrame) { return false; } } @@ -189,7 +189,7 @@ public class BlockEvergladesPortal extends BlockBreakable implements ITileToolti World par1World = portal.world; for (BlockPos side : portal.getSurroundingBlocks()) { Block b = side.getBlockAtPos(); - if (b == Dimension_Everglades.blockPortalFrame || b == Dimension_Everglades.portalBlock) { + if (b == DimensionEverglades.blockPortalFrame || b == DimensionEverglades.portalBlock) { blockCount++; } } @@ -208,22 +208,22 @@ public class BlockEvergladesPortal extends BlockBreakable implements ITileToolti for (i1 = y; par1World.getBlock(x, i1 - 1, z) == this; --i1) { ; } - if (par1World.getBlock(x, i1 - 1, z) != Dimension_Everglades.blockPortalFrame) { + if (par1World.getBlock(x, i1 - 1, z) != DimensionEverglades.blockPortalFrame) { par1World.setBlockToAir(x, y, z); } else { int j1; for (j1 = 1; j1 < 4 && par1World.getBlock(x, i1 + j1, z) == this; ++j1) { ; } - if (j1 == 3 && par1World.getBlock(x, i1 + j1, z) == Dimension_Everglades.blockPortalFrame) { + if (j1 == 3 && par1World.getBlock(x, i1 + j1, z) == DimensionEverglades.blockPortalFrame) { boolean flag = par1World.getBlock(x - 1, y, z) == this || par1World.getBlock(x + 1, y, z) == this; boolean flag1 = par1World.getBlock(x, y, z - 1) == this || par1World.getBlock(x, y, z + 1) == this; if (flag && flag1) { par1World.setBlockToAir(x, y, z); } else { - if ((par1World.getBlock(x + b0, y, z + b1) != Dimension_Everglades.blockPortalFrame + if ((par1World.getBlock(x + b0, y, z + b1) != DimensionEverglades.blockPortalFrame || par1World.getBlock(x - b0, y, z - b1) != this) - && (par1World.getBlock(x - b0, y, z - b1) != Dimension_Everglades.blockPortalFrame + && (par1World.getBlock(x - b0, y, z - b1) != DimensionEverglades.blockPortalFrame || par1World.getBlock(x + b0, y, z + b1) != this)) { par1World.setBlockToAir(x, y, z); } @@ -288,14 +288,14 @@ public class BlockEvergladesPortal extends BlockBreakable implements ITileToolti && ((par5Entity instanceof EntityPlayerMP thePlayer))) { if (thePlayer.timeUntilPortal > 0) { thePlayer.timeUntilPortal = 100; - } else if (thePlayer.dimension != Dimension_Everglades.DIMID) { + } else if (thePlayer.dimension != DimensionEverglades.DIMID) { thePlayer.timeUntilPortal = 100; thePlayer.mcServer.getConfigurationManager() .transferPlayerToDimension( thePlayer, - Dimension_Everglades.DIMID, + DimensionEverglades.DIMID, new TeleporterDimensionMod( - thePlayer.mcServer.worldServerForDimension(Dimension_Everglades.DIMID))); + thePlayer.mcServer.worldServerForDimension(DimensionEverglades.DIMID))); } else { thePlayer.timeUntilPortal = 100; thePlayer.mcServer.getConfigurationManager() @@ -322,33 +322,33 @@ public class BlockEvergladesPortal extends BlockBreakable implements ITileToolti * A randomly called display update to be able to add particles or other items for display */ public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random) { - if (CORE.RANDOM.nextInt(100) == 0) { + if (GTPPCore.RANDOM.nextInt(100) == 0) { par1World.playSound( par2 + 0.5D, par3 + 0.5D, par4 + 0.5D, "portal.portal", 0.5F, - CORE.RANDOM.nextFloat() * 0.4F + 0.8F, + GTPPCore.RANDOM.nextFloat() * 0.4F + 0.8F, false); } for (int l = 0; l < 4; ++l) { - double d0 = par2 + CORE.RANDOM.nextFloat(); - double d1 = par3 + CORE.RANDOM.nextFloat(); - double d2 = par4 + CORE.RANDOM.nextFloat(); + double d0 = par2 + GTPPCore.RANDOM.nextFloat(); + double d1 = par3 + GTPPCore.RANDOM.nextFloat(); + double d2 = par4 + GTPPCore.RANDOM.nextFloat(); double d3 = 0.0D; double d4 = 0.0D; double d5 = 0.0D; - int i1 = CORE.RANDOM.nextInt(2) * 2 - 1; - d3 = (CORE.RANDOM.nextFloat() - 0.5D) * 0.5D; - d4 = (CORE.RANDOM.nextFloat() - 0.5D) * 0.5D; - d5 = (CORE.RANDOM.nextFloat() - 0.5D) * 0.5D; + int i1 = GTPPCore.RANDOM.nextInt(2) * 2 - 1; + d3 = (GTPPCore.RANDOM.nextFloat() - 0.5D) * 0.5D; + d4 = (GTPPCore.RANDOM.nextFloat() - 0.5D) * 0.5D; + d5 = (GTPPCore.RANDOM.nextFloat() - 0.5D) * 0.5D; if (par1World.getBlock(par2 - 1, par3, par4) != this && par1World.getBlock(par2 + 1, par3, par4) != this) { d0 = par2 + 0.5D + 0.25D * i1; - d3 = CORE.RANDOM.nextFloat() * 2.0F * i1; + d3 = GTPPCore.RANDOM.nextFloat() * 2.0F * i1; } else { d2 = par4 + 0.5D + 0.25D * i1; - d5 = CORE.RANDOM.nextFloat() * 2.0F * i1; + d5 = GTPPCore.RANDOM.nextFloat() * 2.0F * i1; } par1World.spawnParticle("reddust", d0 + 0.1D, d1, d2, d3, d4, d5); par1World.spawnParticle("smoke", d0, d1 + 0.1D, d2, 0, 0, 0); diff --git a/src/main/java/gtPlusPlus/everglades/block/DarkWorldContentLoader.java b/src/main/java/gtPlusPlus/everglades/block/DarkWorldContentLoader.java index 7cbc1cb5e0..dd6a35d008 100644 --- a/src/main/java/gtPlusPlus/everglades/block/DarkWorldContentLoader.java +++ b/src/main/java/gtPlusPlus/everglades/block/DarkWorldContentLoader.java @@ -1,11 +1,11 @@ package gtPlusPlus.everglades.block; -import static gtPlusPlus.everglades.dimension.Dimension_Everglades.blockFluidLakes; -import static gtPlusPlus.everglades.dimension.Dimension_Everglades.blockPortalFrame; -import static gtPlusPlus.everglades.dimension.Dimension_Everglades.blockSecondLayer; -import static gtPlusPlus.everglades.dimension.Dimension_Everglades.blockTopLayer; -import static gtPlusPlus.everglades.dimension.Dimension_Everglades.portalBlock; -import static gtPlusPlus.everglades.dimension.Dimension_Everglades.portalItem; +import static gtPlusPlus.everglades.dimension.DimensionEverglades.blockFluidLakes; +import static gtPlusPlus.everglades.dimension.DimensionEverglades.blockPortalFrame; +import static gtPlusPlus.everglades.dimension.DimensionEverglades.blockSecondLayer; +import static gtPlusPlus.everglades.dimension.DimensionEverglades.blockTopLayer; +import static gtPlusPlus.everglades.dimension.DimensionEverglades.portalBlock; +import static gtPlusPlus.everglades.dimension.DimensionEverglades.portalItem; import net.minecraft.init.Blocks; import net.minecraftforge.fluids.FluidRegistry; diff --git a/src/main/java/gtPlusPlus/everglades/chunk/ChunkProviderModded.java b/src/main/java/gtPlusPlus/everglades/chunk/ChunkProviderModded.java index ad0c601092..f49046cd2b 100644 --- a/src/main/java/gtPlusPlus/everglades/chunk/ChunkProviderModded.java +++ b/src/main/java/gtPlusPlus/everglades/chunk/ChunkProviderModded.java @@ -32,7 +32,7 @@ import net.minecraftforge.event.terraingen.PopulateChunkEvent; import net.minecraftforge.event.terraingen.TerrainGen; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.everglades.dimension.Dimension_Everglades; +import gtPlusPlus.everglades.dimension.DimensionEverglades; public class ChunkProviderModded implements IChunkProvider { @@ -181,11 +181,11 @@ public class ChunkProviderModded implements IChunkProvider { for (int k3 = 0; k3 < 4; ++k3) { if ((d15 += d16) > 0.0D) { - p_147424_3_[j3 += short1] = Dimension_Everglades.blockMainFiller; + p_147424_3_[j3 += short1] = DimensionEverglades.blockMainFiller; } else if (k2 * 8 + l2 < b0) { try { - p_147424_3_[j3 += short1] = Dimension_Everglades.blockFluidLakes; // River Fluid - // . + p_147424_3_[j3 += short1] = DimensionEverglades.blockFluidLakes; // River Fluid + // . } catch (Throwable t) { p_147424_3_[j3 += short1] = Blocks.water; // River Fluid Fallback } @@ -446,8 +446,7 @@ public class ChunkProviderModded implements IChunkProvider { l1 = this.rand.nextInt(256); i2 = l + this.rand.nextInt(16) + 8; try { - (new WorldGenLakes(Dimension_Everglades.blockFluidLakes)) - .generate(this.worldObj, this.rand, k1, l1, i2); + (new WorldGenLakes(DimensionEverglades.blockFluidLakes)).generate(this.worldObj, this.rand, k1, l1, i2); } catch (NullPointerException n) { n.getStackTrace(); (new WorldGenLakes(Blocks.lava)).generate(this.worldObj, this.rand, k1, l1, i2); diff --git a/src/main/java/gtPlusPlus/everglades/dimension/DimensionEverglades.java b/src/main/java/gtPlusPlus/everglades/dimension/DimensionEverglades.java new file mode 100644 index 0000000000..702a3210a2 --- /dev/null +++ b/src/main/java/gtPlusPlus/everglades/dimension/DimensionEverglades.java @@ -0,0 +1,29 @@ +package gtPlusPlus.everglades.dimension; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraftforge.common.DimensionManager; + +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.everglades.block.BlockEvergladesPortal; +import gtPlusPlus.everglades.item.ItemEvergladesPortalTrigger; +import gtPlusPlus.everglades.world.WorldProviderMod; + +public class DimensionEverglades { + + public Object instance; + public static int DIMID = GTPPCore.EVERGLADES_ID; + public static BlockEvergladesPortal portalBlock; + public static ItemEvergladesPortalTrigger portalItem; + public static Block blockTopLayer; + public static Block blockSecondLayer; + public static Block blockMainFiller = Blocks.stone; + public static Block blockSecondaryFiller; + public static Block blockFluidLakes; + public static Block blockPortalFrame; + + public void load() { + DimensionManager.registerProviderType(DIMID, WorldProviderMod.class, false); + DimensionManager.registerDimension(DIMID, DIMID); + } +} diff --git a/src/main/java/gtPlusPlus/everglades/dimension/Dimension_Everglades.java b/src/main/java/gtPlusPlus/everglades/dimension/Dimension_Everglades.java deleted file mode 100644 index 0520c5850b..0000000000 --- a/src/main/java/gtPlusPlus/everglades/dimension/Dimension_Everglades.java +++ /dev/null @@ -1,29 +0,0 @@ -package gtPlusPlus.everglades.dimension; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraftforge.common.DimensionManager; - -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.everglades.block.BlockEvergladesPortal; -import gtPlusPlus.everglades.item.ItemEvergladesPortalTrigger; -import gtPlusPlus.everglades.world.WorldProviderMod; - -public class Dimension_Everglades { - - public Object instance; - public static int DIMID = CORE.EVERGLADES_ID; - public static BlockEvergladesPortal portalBlock; - public static ItemEvergladesPortalTrigger portalItem; - public static Block blockTopLayer; - public static Block blockSecondLayer; - public static Block blockMainFiller = Blocks.stone; - public static Block blockSecondaryFiller; - public static Block blockFluidLakes; - public static Block blockPortalFrame; - - public void load() { - DimensionManager.registerProviderType(DIMID, WorldProviderMod.class, false); - DimensionManager.registerDimension(DIMID, DIMID); - } -} diff --git a/src/main/java/gtPlusPlus/everglades/gen/WorldGenMinableCustom.java b/src/main/java/gtPlusPlus/everglades/gen/WorldGenMinableCustom.java new file mode 100644 index 0000000000..0b2062ca88 --- /dev/null +++ b/src/main/java/gtPlusPlus/everglades/gen/WorldGenMinableCustom.java @@ -0,0 +1,90 @@ +package gtPlusPlus.everglades.gen; + +import static gtPlusPlus.core.lib.GTPPCore.PI; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraft.world.gen.feature.WorldGenMinable; + +import gtPlusPlus.api.objects.Logger; + +public class WorldGenMinableCustom extends WorldGenMinable { + + /** The block to generate. */ + private Block oreToGenerate; + /** The number of blocks to generate. */ + private int numberOfBlocks; + /** The block to replace. */ + private Block blockToReplace; + /** The meta of the block. */ + private int mineableBlockMeta; + + public WorldGenMinableCustom(final Block block, final int count) { + super(block, count, Blocks.stone); + } + + public WorldGenMinableCustom(final Block block, final int count, final Block target) { + super(block, count, target); + this.oreToGenerate = block; + this.numberOfBlocks = count; + this.blockToReplace = target; + } + + public WorldGenMinableCustom(final Block block, final int meta, final int number, final Block target) { + this(block, number, target); + this.mineableBlockMeta = meta; + } + + @Override + public boolean generate(final World world, final Random rand, final int x, final int y, final int z) { + final float f = rand.nextFloat() * PI; + final double d0 = x + 16 + ((MathHelper.sin(f) * this.numberOfBlocks) / 4.0F); + final double d1 = (x + 16) - ((MathHelper.sin(f) * this.numberOfBlocks) / 4.0F); + final double d2 = z + 16 + ((MathHelper.cos(f) * this.numberOfBlocks) / 4.0F); + final double d3 = (z + 16) - ((MathHelper.cos(f) * this.numberOfBlocks) / 4.0F); + final double d4 = (y + rand.nextInt(8)) - 1; + final double d5 = (y + rand.nextInt(8)) - 1; + + for (int l = 0; l <= this.numberOfBlocks; ++l) { + final double d6 = d0 + (((d1 - d0) * l) / this.numberOfBlocks); + final double d7 = d4 + (((d5 - d4) * l) / this.numberOfBlocks); + final double d8 = d2 + (((d3 - d2) * l) / this.numberOfBlocks); + final double d9 = (rand.nextDouble() * this.numberOfBlocks) / 8.0D; + final double d10 = ((MathHelper.sin((l * PI) / this.numberOfBlocks) + 1.0F) * d9) + 1.0D; + final double d11 = ((MathHelper.sin((l * PI) / this.numberOfBlocks) + 1.0F) * d9) + 1.0D; + final int i1 = MathHelper.floor_double(d6 - (d10 / 2.0D)); + final int j1 = MathHelper.floor_double(d7 - (d11 / 2.0D)); + final int k1 = MathHelper.floor_double(d8 - (d10 / 2.0D)); + final int l1 = MathHelper.floor_double(d6 + (d10 / 2.0D)); + final int i2 = MathHelper.floor_double(d7 + (d11 / 2.0D)); + final int j2 = MathHelper.floor_double(d8 + (d10 / 2.0D)); + + for (int k2 = i1; k2 <= l1; ++k2) { + final double d12 = ((k2 + 0.5D) - d6) / (d10 / 2.0D); + if ((d12 * d12) < 1.0D) { + for (int l2 = j1; l2 <= i2; ++l2) { + final double d13 = ((l2 + 0.5D) - d7) / (d11 / 2.0D); + if (((d12 * d12) + (d13 * d13)) < 1.0D) { + for (int i3 = k1; i3 <= j2; ++i3) { + final double d14 = ((i3 + 0.5D) - d8) / (d10 / 2.0D); + if ((((d12 * d12) + (d13 * d13) + (d14 * d14)) < 1.0D) && world.getBlock(k2, l2, i3) + .isReplaceableOreGen(world, k2, l2, i3, this.blockToReplace)) { + world.setBlock(k2, l2, i3, this.oreToGenerate, this.mineableBlockMeta, 3); + Logger.INFO( + "Generated a " + this.oreToGenerate + .getLocalizedName() + " at x: " + k2 + " | y: " + l2 + " | z: " + i3); + } + } + } + } + } + } + } + + return true; + } +} diff --git a/src/main/java/gtPlusPlus/everglades/gen/WorldGenMinable_Custom.java b/src/main/java/gtPlusPlus/everglades/gen/WorldGenMinable_Custom.java deleted file mode 100644 index e3ce830f27..0000000000 --- a/src/main/java/gtPlusPlus/everglades/gen/WorldGenMinable_Custom.java +++ /dev/null @@ -1,90 +0,0 @@ -package gtPlusPlus.everglades.gen; - -import static gtPlusPlus.core.lib.CORE.PI; - -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraft.world.gen.feature.WorldGenMinable; - -import gtPlusPlus.api.objects.Logger; - -public class WorldGenMinable_Custom extends WorldGenMinable { - - /** The block to generate. */ - private Block oreToGenerate; - /** The number of blocks to generate. */ - private int numberOfBlocks; - /** The block to replace. */ - private Block blockToReplace; - /** The meta of the block. */ - private int mineableBlockMeta; - - public WorldGenMinable_Custom(final Block block, final int count) { - super(block, count, Blocks.stone); - } - - public WorldGenMinable_Custom(final Block block, final int count, final Block target) { - super(block, count, target); - this.oreToGenerate = block; - this.numberOfBlocks = count; - this.blockToReplace = target; - } - - public WorldGenMinable_Custom(final Block block, final int meta, final int number, final Block target) { - this(block, number, target); - this.mineableBlockMeta = meta; - } - - @Override - public boolean generate(final World world, final Random rand, final int x, final int y, final int z) { - final float f = rand.nextFloat() * PI; - final double d0 = x + 16 + ((MathHelper.sin(f) * this.numberOfBlocks) / 4.0F); - final double d1 = (x + 16) - ((MathHelper.sin(f) * this.numberOfBlocks) / 4.0F); - final double d2 = z + 16 + ((MathHelper.cos(f) * this.numberOfBlocks) / 4.0F); - final double d3 = (z + 16) - ((MathHelper.cos(f) * this.numberOfBlocks) / 4.0F); - final double d4 = (y + rand.nextInt(8)) - 1; - final double d5 = (y + rand.nextInt(8)) - 1; - - for (int l = 0; l <= this.numberOfBlocks; ++l) { - final double d6 = d0 + (((d1 - d0) * l) / this.numberOfBlocks); - final double d7 = d4 + (((d5 - d4) * l) / this.numberOfBlocks); - final double d8 = d2 + (((d3 - d2) * l) / this.numberOfBlocks); - final double d9 = (rand.nextDouble() * this.numberOfBlocks) / 8.0D; - final double d10 = ((MathHelper.sin((l * PI) / this.numberOfBlocks) + 1.0F) * d9) + 1.0D; - final double d11 = ((MathHelper.sin((l * PI) / this.numberOfBlocks) + 1.0F) * d9) + 1.0D; - final int i1 = MathHelper.floor_double(d6 - (d10 / 2.0D)); - final int j1 = MathHelper.floor_double(d7 - (d11 / 2.0D)); - final int k1 = MathHelper.floor_double(d8 - (d10 / 2.0D)); - final int l1 = MathHelper.floor_double(d6 + (d10 / 2.0D)); - final int i2 = MathHelper.floor_double(d7 + (d11 / 2.0D)); - final int j2 = MathHelper.floor_double(d8 + (d10 / 2.0D)); - - for (int k2 = i1; k2 <= l1; ++k2) { - final double d12 = ((k2 + 0.5D) - d6) / (d10 / 2.0D); - if ((d12 * d12) < 1.0D) { - for (int l2 = j1; l2 <= i2; ++l2) { - final double d13 = ((l2 + 0.5D) - d7) / (d11 / 2.0D); - if (((d12 * d12) + (d13 * d13)) < 1.0D) { - for (int i3 = k1; i3 <= j2; ++i3) { - final double d14 = ((i3 + 0.5D) - d8) / (d10 / 2.0D); - if ((((d12 * d12) + (d13 * d13) + (d14 * d14)) < 1.0D) && world.getBlock(k2, l2, i3) - .isReplaceableOreGen(world, k2, l2, i3, this.blockToReplace)) { - world.setBlock(k2, l2, i3, this.oreToGenerate, this.mineableBlockMeta, 3); - Logger.INFO( - "Generated a " + this.oreToGenerate - .getLocalizedName() + " at x: " + k2 + " | y: " + l2 + " | z: " + i3); - } - } - } - } - } - } - } - - return true; - } -} diff --git a/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT.java b/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT.java index a35b528726..9ce91e3e4d 100644 --- a/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT.java +++ b/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT.java @@ -8,7 +8,7 @@ import java.util.concurrent.ConcurrentHashMap; import net.minecraft.world.World; import net.minecraft.world.chunk.IChunkProvider; -import gtPlusPlus.xmod.gregtech.HANDLER_GT; +import gtPlusPlus.xmod.gregtech.HandlerGT; public abstract class WorldGen_GT { @@ -18,7 +18,7 @@ public abstract class WorldGen_GT { public WorldGen_GT(String aName, List aList, boolean aDefault) { this.mWorldGenName = aName; - this.mEnabled = HANDLER_GT.sCustomWorldgenFile.get("worldgen", this.mWorldGenName, aDefault); + this.mEnabled = HandlerGT.sCustomWorldgenFile.get("worldgen", this.mWorldGenName, aDefault); if (this.mEnabled) { aList.add(this); } @@ -38,7 +38,7 @@ public abstract class WorldGen_GT { String aDimName = aWorld.provider.getDimensionName(); Boolean tAllowed = (Boolean) this.mDimensionMap.get(aDimName); if (tAllowed == null) { - boolean tValue = HANDLER_GT.sCustomWorldgenFile + boolean tValue = HandlerGT.sCustomWorldgenFile .get("worldgen.dimensions." + this.mWorldGenName, aDimName, aDimensionType == aAllowedDimensionType); this.mDimensionMap.put(aDimName, Boolean.valueOf(tValue)); return tValue; diff --git a/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT_Base.java b/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT_Base.java index ac93a847fa..d7f0815368 100644 --- a/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT_Base.java +++ b/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT_Base.java @@ -14,12 +14,12 @@ import net.minecraft.world.gen.feature.WorldGenMinable; import cpw.mods.fml.common.IWorldGenerator; import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_Log; -import gregtech.common.GT_Worldgenerator; +import gregtech.api.util.GTLog; +import gregtech.common.GTWorldgenerator; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.everglades.dimension.Dimension_Everglades; -import gtPlusPlus.xmod.gregtech.HANDLER_GT; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.everglades.dimension.DimensionEverglades; +import gtPlusPlus.xmod.gregtech.HandlerGT; public class WorldGen_GT_Base implements IWorldGenerator { @@ -60,10 +60,10 @@ public class WorldGen_GT_Base implements IWorldGenerator { 0, 0, 0, - ELEMENT.getInstance().IRON, - ELEMENT.getInstance().IRON, - ELEMENT.getInstance().IRON, - ELEMENT.getInstance().IRON); + MaterialsElements.getInstance().IRON, + MaterialsElements.getInstance().IRON, + MaterialsElements.getInstance().IRON, + MaterialsElements.getInstance().IRON); public static Hashtable validOreveins = new Hashtable<>(1024); @@ -73,21 +73,21 @@ public class WorldGen_GT_Base implements IWorldGenerator { public WorldGen_GT_Base() { if (debugWorldGen) { - GT_Log.out.println("GTPP_Worldgenerator created"); + GTLog.out.println("GTPP_Worldgenerator created"); } } @Override public void generate(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { - if (world.provider.dimensionId == Dimension_Everglades.DIMID) { + if (world.provider.dimensionId == DimensionEverglades.DIMID) { generateSafely(random, chunkX, chunkZ, world, chunkGenerator, chunkProvider); } } public synchronized void generateSafely(Random random, int chunkX, int chunkZ, World world, IChunkProvider chunkGenerator, IChunkProvider chunkProvider) { - int xDim = Dimension_Everglades.DIMID; + int xDim = DimensionEverglades.DIMID; switch (world.provider.dimensionId) { case -1: // Nether // generateNether(world, random, chunkX * 16, chunkZ * 16); @@ -118,7 +118,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { new XSTR(Math.abs(aRandom.nextInt()) + 1), aX, aZ, - Dimension_Everglades.DIMID, + DimensionEverglades.DIMID, aWorld, aChunkGenerator, aChunkProvider, @@ -127,7 +127,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { } else { Logger.WORLD("Locked List addition. Fail."); } - if (debugWorldGen) GT_Log.out.println( + if (debugWorldGen) GTLog.out.println( "ADD WorldSeed:" + aWorld.getSeed() + " DimId" + aWorld.provider.dimensionId @@ -149,7 +149,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { // chunks get done later. for (int i = 0; i < mList_sS; i++) { WorldGenContainer toRun = (WorldGenContainer) WorldGen_GT_Base.mList.get(0); - if (debugWorldGen) GT_Log.out.println( + if (debugWorldGen) GTLog.out.println( "RUN WorldSeed:" + aWorld.getSeed() + " DimId" + aWorld.provider.dimensionId @@ -269,7 +269,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { } if (debugWorldGen) { - GT_Log.out.println( + GTLog.out.println( " Finding oreveins for oreveinSeed=" + oreveinSeed + " mX=" + this.mX @@ -341,7 +341,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { this.mChunkProvider); switch (placementResult) { case WorldGen_GT_Ore_Layer.ORE_PLACED -> { - if (debugWorldGen) GT_Log.out.println( + if (debugWorldGen) GTLog.out.println( " Added oreveinSeed=" + oreveinSeed + " tries at oremix=" + i @@ -365,7 +365,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { // Orevein didn't reach this chunk, // can't add it yet to the hash Logger.INFO("[World Generation Debug] NO_OVERLAP"); - if (debugWorldGen) GT_Log.out.println( + if (debugWorldGen) GTLog.out.println( " Added far oreveinSeed=" + oreveinSeed + " " + (tWorldGen).mWorldGenName @@ -379,7 +379,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { oreveinFound = true; } case WorldGen_GT_Ore_Layer.NO_OVERLAP_AIR_BLOCK -> { - if (debugWorldGen) GT_Log.out.println( + if (debugWorldGen) GTLog.out.println( " No overlap and air block in test spot=" + oreveinSeed + " " + (tWorldGen).mWorldGenName @@ -396,7 +396,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { } break; // Try the next orevein } catch (Throwable e) { - if (debugWorldGen) GT_Log.out.println( + if (debugWorldGen) GTLog.out.println( "Exception occurred on oreVein" + tWorldGen + " oreveinSeed=" + oreveinSeed @@ -408,7 +408,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { + oreseedX + " oreseedZ=" + oreseedZ); - e.printStackTrace(GT_Log.err); + e.printStackTrace(GTLog.err); } } } @@ -416,7 +416,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { // Only add an empty orevein if are unable to place a vein // at the oreseed chunk. if ((!oreveinFound) && (this.mX == oreseedX) && (this.mZ == oreseedZ)) { - if (debugWorldGen) GT_Log.out.println( + if (debugWorldGen) GTLog.out.println( " Empty oreveinSeed=" + oreveinSeed + " mX=" + this.mX @@ -435,7 +435,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { validOreveins.put(oreveinSeed, noOresInVein); } } else if (oreveinPercentageRoll >= oreveinPercentage) { - if (debugWorldGen) GT_Log.out.println( + if (debugWorldGen) GTLog.out.println( " Skipped oreveinSeed=" + oreveinSeed + " mX=" + this.mX @@ -455,7 +455,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { } } else { // oreseed is located in the previously processed table - if (debugWorldGen) GT_Log.out + if (debugWorldGen) GTLog.out .print(" Valid oreveinSeed=" + oreveinSeed + " validOreveins.size()=" + validOreveins.size() + " "); WorldGen_GT_Ore_Layer tWorldGen = validOreveins.get(oreveinSeed); oreveinRNG.setSeed(oreveinSeed ^ (Block.getIdFromBlock(tWorldGen.mPrimaryMeta))); // Reset @@ -484,10 +484,10 @@ public class WorldGen_GT_Base implements IWorldGenerator { this.mChunkProvider); switch (placementResult) { case WorldGen_GT_Ore_Layer.NO_ORE_IN_BOTTOM_LAYER -> { - if (debugWorldGen) GT_Log.out.println(" No ore in bottom layer"); + if (debugWorldGen) GTLog.out.println(" No ore in bottom layer"); } case WorldGen_GT_Ore_Layer.NO_OVERLAP -> { - if (debugWorldGen) GT_Log.out.println(" No overlap"); + if (debugWorldGen) GTLog.out.println(" No overlap"); } } } @@ -522,8 +522,8 @@ public class WorldGen_GT_Base implements IWorldGenerator { for (int x = wXbox; x < eXbox; x++) { for (int z = nZbox; z < sZbox; z++) { // Determine if this X/Z is an orevein seed - if (GT_Worldgenerator.isOreChunk(x, z)) { - if (debugWorldGen) GT_Log.out.println("Adding seed x=" + x + " z=" + z); + if (GTWorldgenerator.isOreChunk(x, z)) { + if (debugWorldGen) GTLog.out.println("Adding seed x=" + x + " z=" + z); seedList.add(new NearbySeeds(x, z)); } } @@ -532,7 +532,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { // Now process each oreseed vs this requested chunk for (; seedList.size() != 0; seedList.remove(0)) { if (debugWorldGen) - GT_Log.out.println("Processing seed x=" + seedList.get(0).mX + " z=" + seedList.get(0).mZ); + GTLog.out.println("Processing seed x=" + seedList.get(0).mX + " z=" + seedList.get(0).mZ); worldGenFindVein(seedList.get(0).mX, seedList.get(0).mZ); } @@ -540,9 +540,9 @@ public class WorldGen_GT_Base implements IWorldGenerator { // Do leftover worldgen for this chunk (GT_Stones and GT_small_ores) try { - for (WorldGen_GT tWorldGen : HANDLER_GT.sWorldgenListEverglades) { + for (WorldGen_GT tWorldGen : HandlerGT.sWorldgenListEverglades) { /* - * if (debugWorldGen) GT_Log.out.println( "tWorldGen.mWorldGenName="+tWorldGen.mWorldGenName ); + * if (debugWorldGen) GTLog.out.println( "tWorldGen.mWorldGenName="+tWorldGen.mWorldGenName ); */ tWorldGen.executeWorldgen( this.mWorld, @@ -555,7 +555,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { this.mChunkProvider); } } catch (Throwable e) { - e.printStackTrace(GT_Log.err); + e.printStackTrace(GTLog.err); } long leftOverTime = System.nanoTime(); @@ -567,7 +567,7 @@ public class WorldGen_GT_Base implements IWorldGenerator { long endTime = System.nanoTime(); long duration = (endTime - startTime); if (debugWorldGen) { - GT_Log.out.println( + GTLog.out.println( " Oregen took " + (oregenTime - startTime) + " Leftover gen took " + (leftOverTime - oregenTime) diff --git a/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT_Ore_Layer.java b/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT_Ore_Layer.java index 90aea7b71a..bfeeff8910 100644 --- a/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT_Ore_Layer.java +++ b/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_GT_Ore_Layer.java @@ -15,16 +15,16 @@ import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraft.world.chunk.IChunkProvider; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_Log; -import gregtech.common.blocks.GT_Block_Ores; -import gregtech.common.blocks.GT_TileEntity_Ores; +import gregtech.api.util.GTLog; +import gregtech.common.blocks.BlockOres; +import gregtech.common.blocks.TileEntityOres; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.Utils; -import gtPlusPlus.everglades.dimension.Dimension_Everglades; -import gtPlusPlus.xmod.gregtech.HANDLER_GT; +import gtPlusPlus.everglades.dimension.DimensionEverglades; +import gtPlusPlus.xmod.gregtech.HandlerGT; public class WorldGen_GT_Ore_Layer extends WorldGen_GT { @@ -85,23 +85,23 @@ public class WorldGen_GT_Ore_Layer extends WorldGen_GT { boolean GC_UNUSED3, Material aPrimary, Material aSecondary, Material aBetween, Material aSporadic) { super(aName, sList, aDefault); Logger.WORLD("Creating Ore Layer Object"); - this.mOverworld = HANDLER_GT.sCustomWorldgenFile + this.mOverworld = HandlerGT.sCustomWorldgenFile .get(aTextWorldgen + this.mWorldGenName, "Overworld", aOverworld); - this.mNether = HANDLER_GT.sCustomWorldgenFile.get(aTextWorldgen + this.mWorldGenName, "Nether", aNether); - this.mEnd = HANDLER_GT.sCustomWorldgenFile.get(aTextWorldgen + this.mWorldGenName, "TheEnd", aEnd); + this.mNether = HandlerGT.sCustomWorldgenFile.get(aTextWorldgen + this.mWorldGenName, "Nether", aNether); + this.mEnd = HandlerGT.sCustomWorldgenFile.get(aTextWorldgen + this.mWorldGenName, "TheEnd", aEnd); this.mMinY = 5; short mMaxY = 14; if (mMaxY < (this.mMinY + 7)) { - GT_Log.out.println("Oremix " + this.mWorldGenName + " has invalid Min/Max heights!"); + GTLog.out.println("Oremix " + this.mWorldGenName + " has invalid Min/Max heights!"); mMaxY = (short) (this.mMinY + 7); } this.mMaxY = mMaxY; - this.mWeight = ((short) HANDLER_GT.sCustomWorldgenFile + this.mWeight = ((short) HandlerGT.sCustomWorldgenFile .get(aTextWorldgen + this.mWorldGenName, "RandomWeight", aWeight)); - this.mDensity = ((short) HANDLER_GT.sCustomWorldgenFile + this.mDensity = ((short) HandlerGT.sCustomWorldgenFile .get(aTextWorldgen + this.mWorldGenName, "Density", aDensity)); this.mSize = ((short) Math - .max(1, HANDLER_GT.sCustomWorldgenFile.get(aTextWorldgen + this.mWorldGenName, "Size", aSize))); + .max(1, HandlerGT.sCustomWorldgenFile.get(aTextWorldgen + this.mWorldGenName, "Size", aSize))); this.mPrimary = aPrimary; this.mSecondary = aSecondary; this.mBetween = aBetween; @@ -136,14 +136,14 @@ public class WorldGen_GT_Ore_Layer extends WorldGen_GT { } if (mWorldGenName.equals("vein0")) { - if (debugWorldGen) GT_Log.out.println(" NoOresInVein-vein0"); + if (debugWorldGen) GTLog.out.println(" NoOresInVein-vein0"); // This is a special empty orevein Logger.WORLD("[World Generation Debug] Special Empty Vein placed."); return ORE_PLACED; } - if (aDimensionType != Dimension_Everglades.DIMID) { + if (aDimensionType != DimensionEverglades.DIMID) { /* - * // Debug code, but spams log if (debugWorldGen) { GT_Log.out.println( "Wrong dimension" ); } + * // Debug code, but spams log if (debugWorldGen) { GTLog.out.println( "Wrong dimension" ); } */ Logger.WORLD("[World Generation Debug] Wrong dimension."); return WRONG_DIMENSION; @@ -164,19 +164,19 @@ public class WorldGen_GT_Ore_Layer extends WorldGen_GT { Block tBlock = aWorld.getBlock(aChunkX + 8, tMinY, aChunkZ + 8); if (tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, Blocks.stone) || tBlock - .isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, Dimension_Everglades.blockSecondLayer) + .isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, DimensionEverglades.blockSecondLayer) || tBlock - .isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, Dimension_Everglades.blockMainFiller) + .isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, DimensionEverglades.blockMainFiller) || tBlock.isReplaceableOreGen( aWorld, aChunkX + 8, tMinY, aChunkZ + 8, - Dimension_Everglades.blockSecondaryFiller) + DimensionEverglades.blockSecondaryFiller) || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, Blocks.netherrack) || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, Blocks.end_stone) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, GregTech_API.sBlockGranites) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, GregTech_API.sBlockStones)) { + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, GregTechAPI.sBlockGranites) + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, GregTechAPI.sBlockStones)) { // Didn't reach, but could have placed. Save orevein for future use. return NO_OVERLAP; } else { @@ -195,8 +195,8 @@ public class WorldGen_GT_Ore_Layer extends WorldGen_GT { if (tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, Blocks.stone) || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, Blocks.netherrack) || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, Blocks.end_stone) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, GregTech_API.sBlockGranites) - || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, GregTech_API.sBlockStones)) { + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, GregTechAPI.sBlockGranites) + || tBlock.isReplaceableOreGen(aWorld, aChunkX + 8, tMinY, aChunkZ + 8, GregTechAPI.sBlockStones)) { // Didn't reach, but could have placed. Save orevein for future use. return NO_OVERLAP; } else { @@ -207,7 +207,7 @@ public class WorldGen_GT_Ore_Layer extends WorldGen_GT { if (debugWorldGen) { String tDimensionName = aWorld.provider.getDimensionName(); - GT_Log.out.print( + GTLog.out.print( "Trying Orevein:" + this.mWorldGenName + " Dimension=" + tDimensionName @@ -254,7 +254,7 @@ public class WorldGen_GT_Ore_Layer extends WorldGen_GT { } } /* - * if ((placeCount[1]+placeCount[3])==0) { if (debugWorldGen) GT_Log.out.println( " No ore in bottom layer" ); + * if ((placeCount[1]+placeCount[3])==0) { if (debugWorldGen) GTLog.out.println( " No ore in bottom layer" ); * return NO_ORE_IN_BOTTOM_LAYER; // Exit early, didn't place anything in the bottom layer } */ Logger.WORLD("[World Generation Debug] Trying to set Ores?"); @@ -359,7 +359,7 @@ public class WorldGen_GT_Ore_Layer extends WorldGen_GT { } if (debugWorldGen) { String tDimensionName = aWorld.provider.getDimensionName(); - GT_Log.out.println( + GTLog.out.println( "Generated Orevein:" + this.mWorldGenName + " Dimension=" + tDimensionName @@ -408,7 +408,7 @@ public class WorldGen_GT_Ore_Layer extends WorldGen_GT { } // Set GT ORE - if (aMetaData instanceof GT_Block_Ores) { + if (aMetaData instanceof BlockOres) { if (ore1String.equals("unset")) { ore1String = Utils.sanitizeString( this.mPrimary.getLocalizedName() @@ -527,11 +527,11 @@ public class WorldGen_GT_Ore_Layer extends WorldGen_GT { if (tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.stone) || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.sand) || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.dirt) - || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTech_API.sBlockGranites) - || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTech_API.sBlockStones) - || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Dimension_Everglades.blockSecondLayer) - || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Dimension_Everglades.blockMainFiller) - || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Dimension_Everglades.blockSecondaryFiller) + || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTechAPI.sBlockGranites) + || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTechAPI.sBlockStones) + || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, DimensionEverglades.blockSecondLayer) + || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, DimensionEverglades.blockMainFiller) + || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, DimensionEverglades.blockSecondaryFiller) || tBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.sandstone)) { if (aWorld.setBlock(aX, aY, aZ, tOreBlock, 0, 3)) { @@ -550,7 +550,7 @@ public class WorldGen_GT_Ore_Layer extends WorldGen_GT { Method setOres = null; try { - setOres = GT_TileEntity_Ores.class.getDeclaredMethod( + setOres = TileEntityOres.class.getDeclaredMethod( "setOreBlock", World.class, int.class, diff --git a/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_Ores.java b/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_Ores.java index e45b4bcd20..6ccdcaf115 100644 --- a/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_Ores.java +++ b/src/main/java/gtPlusPlus/everglades/gen/gt/WorldGen_Ores.java @@ -2,9 +2,9 @@ package gtPlusPlus.everglades.gen.gt; import java.util.Hashtable; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.ORES; -import gtPlusPlus.core.material.nuclear.FLUORIDES; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.MaterialsOres; +import gtPlusPlus.core.material.nuclear.MaterialsFluorides; public class WorldGen_Ores { @@ -15,10 +15,10 @@ public class WorldGen_Ores { 1, 1, 128, - ELEMENT.getInstance().IRON, - ELEMENT.getInstance().IRON, - ELEMENT.getInstance().IRON, - ELEMENT.getInstance().IRON); + MaterialsElements.getInstance().IRON, + MaterialsElements.getInstance().IRON, + MaterialsElements.getInstance().IRON, + MaterialsElements.getInstance().IRON); /** * Custom ore Veins @@ -30,10 +30,10 @@ public class WorldGen_Ores { 30, 2, 16, - ORES.AGARDITE_CD, - ORES.AGARDITE_LA, - ORES.DEMICHELEITE_BR, - ORES.IRARSITE); + MaterialsOres.AGARDITE_CD, + MaterialsOres.AGARDITE_LA, + MaterialsOres.DEMICHELEITE_BR, + MaterialsOres.IRARSITE); public static WorldGen_GT_Ore_Layer Vein2 = new WorldGen_GT_Ore_Layer( "vein2", @@ -42,10 +42,10 @@ public class WorldGen_Ores { 30, 2, 16, - ORES.AGARDITE_ND, - ORES.AGARDITE_Y, - ORES.KASHINITE, - ORES.CERITE); + MaterialsOres.AGARDITE_ND, + MaterialsOres.AGARDITE_Y, + MaterialsOres.KASHINITE, + MaterialsOres.CERITE); public static WorldGen_GT_Ore_Layer Vein3 = new WorldGen_GT_Ore_Layer( "vein3", @@ -54,10 +54,10 @@ public class WorldGen_Ores { 30, 3, 32, - ORES.CERITE, - ORES.NICHROMITE, - ORES.XENOTIME, - ORES.HIBONITE); + MaterialsOres.CERITE, + MaterialsOres.NICHROMITE, + MaterialsOres.XENOTIME, + MaterialsOres.HIBONITE); public static WorldGen_GT_Ore_Layer Vein4 = new WorldGen_GT_Ore_Layer( "vein4", @@ -66,10 +66,10 @@ public class WorldGen_Ores { 40, 3, 32, - ORES.GEIKIELITE, - ORES.CRYOLITE, - ORES.GADOLINITE_CE, - ORES.AGARDITE_ND); + MaterialsOres.GEIKIELITE, + MaterialsOres.CRYOLITE, + MaterialsOres.GADOLINITE_CE, + MaterialsOres.AGARDITE_ND); public static WorldGen_GT_Ore_Layer Vein5 = new WorldGen_GT_Ore_Layer( "vein5", @@ -78,10 +78,10 @@ public class WorldGen_Ores { 20, 2, 48, - ORES.HIBONITE, - ORES.YTTRIALITE, - ORES.ZIRCONILITE, - ORES.CERITE); + MaterialsOres.HIBONITE, + MaterialsOres.YTTRIALITE, + MaterialsOres.ZIRCONILITE, + MaterialsOres.CERITE); public static WorldGen_GT_Ore_Layer Vein6 = new WorldGen_GT_Ore_Layer( "vein6", 0, @@ -89,10 +89,10 @@ public class WorldGen_Ores { 20, 2, 48, - ORES.XENOTIME, - ORES.ZIRKELITE, - ORES.CROCROITE, - ORES.IRARSITE); + MaterialsOres.XENOTIME, + MaterialsOres.ZIRKELITE, + MaterialsOres.CROCROITE, + MaterialsOres.IRARSITE); public static WorldGen_GT_Ore_Layer Vein7 = new WorldGen_GT_Ore_Layer( "vein7", 40, @@ -100,10 +100,10 @@ public class WorldGen_Ores { 20, 2, 48, - ORES.HONEAITE, - ORES.MIESSIITE, - ORES.SAMARSKITE_Y, - ORES.SAMARSKITE_YB); + MaterialsOres.HONEAITE, + MaterialsOres.MIESSIITE, + MaterialsOres.SAMARSKITE_Y, + MaterialsOres.SAMARSKITE_YB); public static WorldGen_GT_Ore_Layer Vein8 = new WorldGen_GT_Ore_Layer( "vein8", 0, @@ -111,10 +111,10 @@ public class WorldGen_Ores { 20, 2, 48, - ORES.TITANITE, - ORES.ZIMBABWEITE, - ORES.ZIRCON, - ORES.FLORENCITE); + MaterialsOres.TITANITE, + MaterialsOres.ZIMBABWEITE, + MaterialsOres.ZIRCON, + MaterialsOres.FLORENCITE); public static WorldGen_GT_Ore_Layer Vein9 = new WorldGen_GT_Ore_Layer( "vein9", @@ -123,10 +123,10 @@ public class WorldGen_Ores { 20, 1, 48, - ORES.LANTHANITE_CE, - FLUORIDES.FLUORITE, - ORES.LAFOSSAITE, - ORES.FLORENCITE); + MaterialsOres.LANTHANITE_CE, + MaterialsFluorides.FLUORITE, + MaterialsOres.LAFOSSAITE, + MaterialsOres.FLORENCITE); public static WorldGen_GT_Ore_Layer Vein10 = new WorldGen_GT_Ore_Layer( "vein10", 20, @@ -134,10 +134,10 @@ public class WorldGen_Ores { 20, 2, 32, - ORES.GEIKIELITE, - ORES.YTTROCERITE, - ORES.LANTHANITE_LA, - ORES.RADIOBARITE); + MaterialsOres.GEIKIELITE, + MaterialsOres.YTTROCERITE, + MaterialsOres.LANTHANITE_LA, + MaterialsOres.RADIOBARITE); public static WorldGen_GT_Ore_Layer Vein11 = new WorldGen_GT_Ore_Layer( "vein11", 30, @@ -145,10 +145,10 @@ public class WorldGen_Ores { 20, 1, 48, - FLUORIDES.FLUORITE, - ORES.KASHINITE, - ORES.ZIRCON, - ORES.CRYOLITE); + MaterialsFluorides.FLUORITE, + MaterialsOres.KASHINITE, + MaterialsOres.ZIRCON, + MaterialsOres.CRYOLITE); public static WorldGen_GT_Ore_Layer Vein12 = new WorldGen_GT_Ore_Layer( "vein12", 40, @@ -156,10 +156,10 @@ public class WorldGen_Ores { 20, 3, 32, - ORES.CERITE, - ORES.ALBURNITE, - ORES.MIESSIITE, - ORES.HIBONITE); + MaterialsOres.CERITE, + MaterialsOres.ALBURNITE, + MaterialsOres.MIESSIITE, + MaterialsOres.HIBONITE); /** * Best Rarest Veins 2017 @@ -171,10 +171,10 @@ public class WorldGen_Ores { 5, 1, 16, - ORES.CRYOLITE, - ORES.RADIOBARITE, - ORES.HONEAITE, - ORES.FLORENCITE); + MaterialsOres.CRYOLITE, + MaterialsOres.RADIOBARITE, + MaterialsOres.HONEAITE, + MaterialsOres.FLORENCITE); public static WorldGen_GT_Ore_Layer Vein14 = new WorldGen_GT_Ore_Layer( "vein14", @@ -183,10 +183,10 @@ public class WorldGen_Ores { 8, 2, 16, - ORES.DEMICHELEITE_BR, - ORES.PERROUDITE, - ORES.IRARSITE, - ORES.RADIOBARITE); + MaterialsOres.DEMICHELEITE_BR, + MaterialsOres.PERROUDITE, + MaterialsOres.IRARSITE, + MaterialsOres.RADIOBARITE); public static WorldGen_GT_Ore_Layer Vein15 = new WorldGen_GT_Ore_Layer( "vein15", @@ -195,10 +195,10 @@ public class WorldGen_Ores { 5, 3, 24, - ORES.FLUORCAPHITE, - ORES.LAFOSSAITE, - ORES.GADOLINITE_CE, - ORES.GADOLINITE_Y); + MaterialsOres.FLUORCAPHITE, + MaterialsOres.LAFOSSAITE, + MaterialsOres.GADOLINITE_CE, + MaterialsOres.GADOLINITE_Y); public static WorldGen_GT_Ore_Layer Vein16 = new WorldGen_GT_Ore_Layer( "vein16", @@ -207,10 +207,10 @@ public class WorldGen_Ores { 4, 2, 32, - ORES.YTTROCERITE, - ORES.LEPERSONNITE, - ORES.LAUTARITE, - FLUORIDES.FLUORITE); + MaterialsOres.YTTROCERITE, + MaterialsOres.LEPERSONNITE, + MaterialsOres.LAUTARITE, + MaterialsFluorides.FLUORITE); public static WorldGen_GT_Ore_Layer Vein17 = new WorldGen_GT_Ore_Layer( "vein17", @@ -219,10 +219,10 @@ public class WorldGen_Ores { 4, 1, 32, - ORES.FLORENCITE, - ORES.LAUTARITE, - ORES.SAMARSKITE_YB, - ORES.POLYCRASE); + MaterialsOres.FLORENCITE, + MaterialsOres.LAUTARITE, + MaterialsOres.SAMARSKITE_YB, + MaterialsOres.POLYCRASE); public static WorldGen_GT_Ore_Layer Vein18 = new WorldGen_GT_Ore_Layer( "vein18", 15, @@ -230,10 +230,10 @@ public class WorldGen_Ores { 4, 1, 48, - ORES.GADOLINITE_CE, - ORES.GADOLINITE_Y, - ORES.AGARDITE_LA, - ORES.AGARDITE_CD); + MaterialsOres.GADOLINITE_CE, + MaterialsOres.GADOLINITE_Y, + MaterialsOres.AGARDITE_LA, + MaterialsOres.AGARDITE_CD); public static Hashtable validOreveins = new Hashtable<>(1024); diff --git a/src/main/java/gtPlusPlus/everglades/item/ItemEvergladesPortalTrigger.java b/src/main/java/gtPlusPlus/everglades/item/ItemEvergladesPortalTrigger.java index be15c2a0d2..a39a863cfc 100644 --- a/src/main/java/gtPlusPlus/everglades/item/ItemEvergladesPortalTrigger.java +++ b/src/main/java/gtPlusPlus/everglades/item/ItemEvergladesPortalTrigger.java @@ -16,7 +16,7 @@ import net.minecraft.world.World; import gtPlusPlus.core.block.ModBlocks; import gtPlusPlus.core.util.Utils; -import gtPlusPlus.everglades.dimension.Dimension_Everglades; +import gtPlusPlus.everglades.dimension.DimensionEverglades; public class ItemEvergladesPortalTrigger extends Item { @@ -99,7 +99,7 @@ public class ItemEvergladesPortalTrigger extends Item { "fire.ignite", 1.0F, itemRand.nextFloat() * 0.4F + 0.8F); - if (Dimension_Everglades.portalBlock.tryToCreatePortal(par3World, par4, par5, par6)) { + if (DimensionEverglades.portalBlock.tryToCreatePortal(par3World, par4, par5, par6)) { // Make a Portal } else { if (!par3World.isRemote) { diff --git a/src/main/java/gtPlusPlus/everglades/world/TeleporterDimensionMod.java b/src/main/java/gtPlusPlus/everglades/world/TeleporterDimensionMod.java index 51f549ad9c..7e463e194c 100644 --- a/src/main/java/gtPlusPlus/everglades/world/TeleporterDimensionMod.java +++ b/src/main/java/gtPlusPlus/everglades/world/TeleporterDimensionMod.java @@ -15,7 +15,7 @@ import net.minecraft.world.ChunkCoordIntPair; import net.minecraft.world.Teleporter; import net.minecraft.world.WorldServer; -import gtPlusPlus.everglades.dimension.Dimension_Everglades; +import gtPlusPlus.everglades.dimension.DimensionEverglades; public class TeleporterDimensionMod extends Teleporter { @@ -66,7 +66,7 @@ public class TeleporterDimensionMod extends Teleporter { int i2 = k + i1 * b1 - l * b0; boolean flag = j1 < 0; this.worldServerInstance - .setBlock(k1, l1, i2, flag ? Dimension_Everglades.blockPortalFrame : Blocks.air); + .setBlock(k1, l1, i2, flag ? DimensionEverglades.blockPortalFrame : Blocks.air); } } } @@ -110,9 +110,9 @@ public class TeleporterDimensionMod extends Teleporter { double d5 = l1 + 0.5D - par1Entity.posZ; for (int i2 = this.worldServerInstance.getActualHeight() - 1; i2 >= 0; --i2) { - if (this.worldServerInstance.getBlock(l3, i2, l1) == Dimension_Everglades.portalBlock) { + if (this.worldServerInstance.getBlock(l3, i2, l1) == DimensionEverglades.portalBlock) { while (this.worldServerInstance.getBlock(l3, i2 - 1, l1) - == Dimension_Everglades.portalBlock) { + == DimensionEverglades.portalBlock) { --i2; } @@ -143,19 +143,19 @@ public class TeleporterDimensionMod extends Teleporter { d7 = k + 0.5D; int i4 = -1; - if (this.worldServerInstance.getBlock(i - 1, j, k) == Dimension_Everglades.portalBlock) { + if (this.worldServerInstance.getBlock(i - 1, j, k) == DimensionEverglades.portalBlock) { i4 = 2; } - if (this.worldServerInstance.getBlock(i + 1, j, k) == Dimension_Everglades.portalBlock) { + if (this.worldServerInstance.getBlock(i + 1, j, k) == DimensionEverglades.portalBlock) { i4 = 0; } - if (this.worldServerInstance.getBlock(i, j, k - 1) == Dimension_Everglades.portalBlock) { + if (this.worldServerInstance.getBlock(i, j, k - 1) == DimensionEverglades.portalBlock) { i4 = 3; } - if (this.worldServerInstance.getBlock(i, j, k + 1) == Dimension_Everglades.portalBlock) { + if (this.worldServerInstance.getBlock(i, j, k + 1) == DimensionEverglades.portalBlock) { i4 = 1; } @@ -396,7 +396,7 @@ public class TeleporterDimensionMod extends Teleporter { j4 = k2 + (j3 - 1) * l2 - i3 * l5; flag = k3 < 0; this.worldServerInstance - .setBlock(l3, i4, j4, flag ? Dimension_Everglades.blockPortalFrame : Blocks.air); + .setBlock(l3, i4, j4, flag ? DimensionEverglades.blockPortalFrame : Blocks.air); } } } @@ -413,7 +413,7 @@ public class TeleporterDimensionMod extends Teleporter { l3, i4, j4, - flag ? Dimension_Everglades.blockPortalFrame : Dimension_Everglades.portalBlock, + flag ? DimensionEverglades.blockPortalFrame : DimensionEverglades.portalBlock, 0, 2); } diff --git a/src/main/java/gtPlusPlus/everglades/world/WorldProviderMod.java b/src/main/java/gtPlusPlus/everglades/world/WorldProviderMod.java index c8a69a3b0e..2b36246e49 100644 --- a/src/main/java/gtPlusPlus/everglades/world/WorldProviderMod.java +++ b/src/main/java/gtPlusPlus/everglades/world/WorldProviderMod.java @@ -8,7 +8,7 @@ import net.minecraft.world.chunk.IChunkProvider; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gtPlusPlus.everglades.chunk.ChunkProviderModded; -import gtPlusPlus.everglades.dimension.Dimension_Everglades; +import gtPlusPlus.everglades.dimension.DimensionEverglades; public class WorldProviderMod extends WorldProvider { @@ -17,7 +17,7 @@ public class WorldProviderMod extends WorldProvider { this.worldChunkMgr = new WorldChunkManagerCustom(this.worldObj.getSeed(), WorldType.AMPLIFIED); this.isHellWorld = false; this.hasNoSky = false; - this.dimensionId = Dimension_Everglades.DIMID; + this.dimensionId = DimensionEverglades.DIMID; } @Override diff --git a/src/main/java/gtPlusPlus/nei/DecayableRecipeHandler.java b/src/main/java/gtPlusPlus/nei/DecayableRecipeHandler.java index fc54fd76d5..3563c7a040 100644 --- a/src/main/java/gtPlusPlus/nei/DecayableRecipeHandler.java +++ b/src/main/java/gtPlusPlus/nei/DecayableRecipeHandler.java @@ -14,7 +14,7 @@ import net.minecraft.util.StatCollector; import codechicken.lib.gui.GuiDraw; import codechicken.nei.PositionedStack; import codechicken.nei.recipe.TemplateRecipeHandler; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.core.handler.Recipes.DecayableRecipe; import gtPlusPlus.core.item.base.dusts.BaseItemDustUnique; import gtPlusPlus.core.item.materials.DustDecayable; @@ -65,7 +65,7 @@ public class DecayableRecipeHandler extends TemplateRecipeHandler { if (recipe.isValid()) { final ItemStack input = recipe.mInput.copy(); final ItemStack output = recipe.mOutput.copy(); - if (!GT_Utility.areStacksEqual(result, output, true)) { + if (!GTUtility.areStacksEqual(result, output, true)) { continue; } // Logger.INFO("Showing Usage result for "+ItemUtils.getItemName(result)); @@ -104,7 +104,7 @@ public class DecayableRecipeHandler extends TemplateRecipeHandler { if (recipe.isValid()) { final ItemStack input = recipe.mInput.copy(); final ItemStack output = recipe.mOutput.copy(); - if (!GT_Utility.areStacksEqual(ingredient, input, true)) { + if (!GTUtility.areStacksEqual(ingredient, input, true)) { continue; } // Logger.INFO("Showing up Usage results for "+ItemUtils.getItemName(ingredient)); @@ -251,8 +251,8 @@ public class DecayableRecipeHandler extends TemplateRecipeHandler { if (p.time == this.time) { ItemStack aInput = p.input.item; ItemStack aOutput = p.output.item; - if (GT_Utility.areStacksEqual(aInput, this.input.item, true)) { - if (GT_Utility.areStacksEqual(aOutput, this.output.item, true)) { + if (GTUtility.areStacksEqual(aInput, this.input.item, true)) { + if (GTUtility.areStacksEqual(aOutput, this.output.item, true)) { return true; } } diff --git a/src/main/java/gtPlusPlus/nei/GTPPNEIConfig.java b/src/main/java/gtPlusPlus/nei/GTPPNEIConfig.java new file mode 100644 index 0000000000..1cd6a2acb6 --- /dev/null +++ b/src/main/java/gtPlusPlus/nei/GTPPNEIConfig.java @@ -0,0 +1,102 @@ +package gtPlusPlus.nei; + +import java.util.Arrays; + +import net.minecraft.item.ItemStack; + +import codechicken.nei.api.API; +import codechicken.nei.api.IConfigureNEI; +import codechicken.nei.event.NEIRegisterHandlerInfosEvent; +import codechicken.nei.recipe.HandlerInfo; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import gregtech.api.enums.Mods; +import gregtech.api.recipe.RecipeMaps; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; + +public class GTPPNEIConfig implements IConfigureNEI { + + public static boolean sIsAdded = true; + + @Override + public synchronized void loadConfig() { + sIsAdded = false; + + Logger.INFO("NEI Registration: Registering NEI handler for " + DecayableRecipeHandler.mNEIName); + API.registerRecipeHandler(new DecayableRecipeHandler()); + API.registerUsageHandler(new DecayableRecipeHandler()); + API.addRecipeCatalyst(new ItemStack(ModBlocks.blockDecayablesChest, 1), "GTPP_Decayables"); + + Logger.INFO("NEI Registration: Registering NEI handler for " + LFTRSpargingNEIHandler.mNEIName); + new LFTRSpargingNEIHandler(); + API.addRecipeCatalyst(GregtechItemList.Controller_Sparge_Tower.get(1), "gtpp.recipe.lftr.sparging"); + + for (GregtechItemList item : Arrays.asList( + GregtechItemList.GT4_Electric_Auto_Workbench_LV, + GregtechItemList.GT4_Electric_Auto_Workbench_MV, + GregtechItemList.GT4_Electric_Auto_Workbench_HV, + GregtechItemList.GT4_Electric_Auto_Workbench_EV, + GregtechItemList.GT4_Electric_Auto_Workbench_IV, + GregtechItemList.GT4_Electric_Auto_Workbench_LuV, + GregtechItemList.GT4_Electric_Auto_Workbench_ZPM, + GregtechItemList.GT4_Electric_Auto_Workbench_UV)) { + API.addRecipeCatalyst(item.get(1), "crafting", -10); + } + // Bronze workbench + API.removeRecipeCatalyst(ItemUtils.getItemStackFromFQRN("gregtech:gt.blockmachines:31081", 1), "crafting"); + API.removeRecipeCatalyst(ItemUtils.getItemStackFromFQRN("gregtech:gt.blockmachines:31082", 1), "crafting"); + + // Moved to its own handler + API.removeRecipeCatalyst( + GregtechItemList.Controller_Vacuum_Furnace.get(1), + GTPPRecipeMaps.chemicalDehydratorRecipes.unlocalizedName); + + // ULV simple washer + API.removeRecipeCatalyst( + ItemUtils.getItemStackFromFQRN("gregtech:gt.blockmachines:767", 1), + GTPPRecipeMaps.simpleWasherRecipes.unlocalizedName); + + // ULV combustion generator + API.removeRecipeCatalyst( + ItemUtils.getItemStackFromFQRN("gregtech:gt.blockmachines:960", 1), + RecipeMaps.dieselFuels.unlocalizedName); + + // ULV gas turbine + API.removeRecipeCatalyst( + ItemUtils.getItemStackFromFQRN("gregtech:gt.blockmachines:961", 1), + RecipeMaps.gasTurbineFuels.unlocalizedName); + + // Hide Flasks + if (Utils.isClient()) { + API.addItemListEntry(GregtechItemList.VOLUMETRIC_FLASK_8k.get(1)); + API.addItemListEntry(GregtechItemList.VOLUMETRIC_FLASK_32k.get(1)); + } + sIsAdded = true; + } + + @SubscribeEvent + public void registerHandlerInfo(NEIRegisterHandlerInfosEvent event) { + event.registerHandlerInfo( + new HandlerInfo.Builder("gtpp.recipe.lftr.sparging", GTPPCore.name, Mods.GTPlusPlus.ID) + .setDisplayStack(GregtechItemList.Controller_Sparge_Tower.get(1)) + .setShiftY(6) + .setHeight(135) + .setMaxRecipesPerPage(1) + .build()); + } + + @Override + public String getName() { + return "GT++ NEI Plugin"; + } + + @Override + public String getVersion() { + return "(1.12)"; + } +} diff --git a/src/main/java/gtPlusPlus/nei/GT_NEI_LFTR_Sparging.java b/src/main/java/gtPlusPlus/nei/GT_NEI_LFTR_Sparging.java deleted file mode 100644 index c7c657f04a..0000000000 --- a/src/main/java/gtPlusPlus/nei/GT_NEI_LFTR_Sparging.java +++ /dev/null @@ -1,502 +0,0 @@ -package gtPlusPlus.nei; - -import java.awt.Rectangle; -import java.lang.ref.SoftReference; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.stream.Collectors; - -import net.minecraft.client.Minecraft; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import org.lwjgl.opengl.GL11; - -import codechicken.lib.gui.GuiDraw; -import codechicken.nei.PositionedStack; -import codechicken.nei.recipe.GuiCraftingRecipe; -import codechicken.nei.recipe.GuiRecipe; -import codechicken.nei.recipe.GuiUsageRecipe; -import codechicken.nei.recipe.TemplateRecipeHandler; -import cpw.mods.fml.common.event.FMLInterModComms; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.GasSpargingRecipe; -import gregtech.api.util.GasSpargingRecipeMap; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class GT_NEI_LFTR_Sparging extends TemplateRecipeHandler { - - public static final String mNEIName = GasSpargingRecipeMap.mNEIDisplayName; - private SoftReference> mCachedRecipes = null; - - public GT_NEI_LFTR_Sparging() { - this.transferRects.add( - new TemplateRecipeHandler.RecipeTransferRect( - new Rectangle(65, 13, 36, 18), - this.getOverlayIdentifier(), - new Object[0])); - if (!NEI_GTPP_Config.sIsAdded) { - FMLInterModComms.sendRuntimeMessage( - GT_Values.GT, - "NEIPlugins", - "register-crafting-handler", - "gregtechplusplus@" + this.getRecipeName() + "@" + this.getOverlayIdentifier()); - GuiCraftingRecipe.craftinghandlers.add(this); - GuiUsageRecipe.usagehandlers.add(this); - } - } - - @Override - public String getRecipeName() { - return mNEIName; - } - - @Override - public String getGuiTexture() { - return GasSpargingRecipeMap.mNEIGUIPath; - } - - @Override - public String getOverlayIdentifier() { - return gregtech.api.util.GasSpargingRecipeMap.mUnlocalizedName; - } - - @Override - 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, 68); - } - - @Override - public void loadTransferRects() { - this.transferRects - .add(new RecipeTransferRect(new Rectangle(72, 14, 22, 16), getOverlayIdentifier(), new Object[0])); - } - - public List getCache() { - List cache; - if (mCachedRecipes == null || (cache = mCachedRecipes.get()) == null) { - cache = GasSpargingRecipeMap.mRecipes.stream() // do not use parallel stream. This is already parallelized - // by NEI - .sorted() - .map(temp -> createCachedRecipe(temp)) - .collect(Collectors.toList()); - // while the NEI parallelize handlers, for each individual handler it still uses sequential execution model - // so we do not need any synchronization here - mCachedRecipes = new SoftReference<>(cache); - } - return cache; - } - - public GasSpargingRecipeNEI createCachedRecipe(GasSpargingRecipe aRecipe) { - return new GasSpargingRecipeNEI(aRecipe); - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals(getOverlayIdentifier())) { - arecipes.addAll(getCache()); - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack aResult) { - ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aResult); - - ArrayList tResults = new ArrayList<>(); - 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); - FluidStack tFluidStack; - if (tFluid != null) { - tFluidStack = tFluid; - tResults.add(GT_Utility.getFluidDisplayStack(tFluid, false)); - } else tFluidStack = GT_Utility.getFluidFromDisplayStack(aResult); - if (tFluidStack != null) { - tResults.addAll(GT_Utility.getContainersFromFluid(tFluidStack)); - } - for (GasSpargingRecipeNEI recipe : getCache()) { - if (tResults.stream() - .anyMatch(stack -> recipe.contains(recipe.mOutputs, stack))) arecipes.add(recipe); - } - } - - @Override - public void loadUsageRecipes(ItemStack aInput) { - ItemData tPrefixMaterial = GT_OreDictUnificator.getAssociation(aInput); - - ArrayList tInputs = new ArrayList<>(); - 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); - FluidStack tFluidStack; - if (tFluid != null) { - tFluidStack = tFluid; - tInputs.add(GT_Utility.getFluidDisplayStack(tFluid, false)); - } else tFluidStack = GT_Utility.getFluidFromDisplayStack(aInput); - if (tFluidStack != null) { - tInputs.addAll(GT_Utility.getContainersFromFluid(tFluidStack)); - } - for (GasSpargingRecipeNEI recipe : getCache()) { - if (tInputs.stream() - .anyMatch(stack -> recipe.contains(recipe.mInputs, stack))) arecipes.add(recipe); - } - } - - protected static void drawText(int aX, int aY, String aString, int aColor) { - Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor); - } - - @Override - public void drawExtras(int aRecipeIndex) { - final long tEUt = ((GasSpargingRecipeNEI) this.arecipes.get(aRecipeIndex)).mRecipe.mEUt; - final long tDuration = ((GasSpargingRecipeNEI) this.arecipes.get(aRecipeIndex)).mRecipe.mDuration; - drawText(10, 73, "Total: " + MathUtils.formatNumbers((long) (tDuration * tEUt)) + " EU", -16777216); - drawText(10, 83, "Usage: " + MathUtils.formatNumbers(tEUt) + " EU/t", -16777216); - drawText( - 10, - 93, - "Time: " + (tDuration < 20 ? "< 1" : MathUtils.formatNumbers(0.05d * tDuration)) + " secs", - -16777216); - drawText(10, 103, "Gas not used to sparge is", -16777216); - drawText(10, 113, "returned alongside outputs.", -16777216); - } - - @Override - public List handleItemTooltip(final GuiRecipe gui, final ItemStack aStack, final List currenttip, - final int aRecipeIndex) { - final TemplateRecipeHandler.CachedRecipe tObject = this.arecipes.get(aRecipeIndex); - if ((tObject instanceof final GasSpargingRecipeNEI tRecipe)) { - ItemStack aSpargeInput = tRecipe.mOutputs.get(0).item; - ItemStack aSpentFuel = tRecipe.mOutputs.get(1).item; - for (final PositionedStack tStack : tRecipe.mOutputs) { - if (aStack == tStack.item) { - if (ItemList.Display_Fluid.isStackEqual(tStack.item, true, true)) { - if (GT_Utility.areStacksEqual(aStack, aSpentFuel, true)) { - break; - } - if (GT_Utility.areStacksEqual(aStack, aSpargeInput, true)) { - currenttip.add("The amount returned is the remainder after all other outputs."); - } - currenttip.add( - "Maximum Output: " + (((FixedPositionedStack) tStack).mChance / 100) - + "." - + ((((FixedPositionedStack) tStack).mChance % 100) < 10 - ? "0" + (((FixedPositionedStack) tStack).mChance % 100) - : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) - + "L"); - break; - } - 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; - } - - 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 tDisplayStacks = new ArrayList<>(); - for (final ItemStack tStack : this.items) { - if (GT_Utility.isStackValid(tStack)) { - if (tStack.getItemDamage() == 32767) { - final List permutations = codechicken.nei.ItemList.itemMap.get(tStack.getItem()); - if (!permutations.isEmpty()) { - ItemStack stack; - for (final Iterator 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 GasSpargingRecipeNEI extends CachedRecipe implements Comparable { - - public final GasSpargingRecipe mRecipe; - public final List mOutputs = new ArrayList<>(); - public final List mInputs = new ArrayList<>(); - - public GasSpargingRecipeNEI(GasSpargingRecipe tRecipe) { - super(); - this.mRecipe = tRecipe; - int tStartIndex = 0; - if (tRecipe.mFluidInputs.length > 0) { - if ((tRecipe.mFluidInputs[0] != null) && (tRecipe.mFluidInputs[0].getFluid() != null)) { - this.mInputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidInputs[0], true), - 30, - 5)); - } - if ((tRecipe.mFluidInputs.length > 1) && (tRecipe.mFluidInputs[1] != null) - && (tRecipe.mFluidInputs[1].getFluid() != null)) { - this.mInputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidInputs[1], true), - 12, - 5)); - } - if ((tRecipe.mFluidInputs.length > 2) && (tRecipe.mFluidInputs[2] != null) - && (tRecipe.mFluidInputs[2].getFluid() != null)) { - this.mInputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidInputs[2], true), - 48, - 5)); - } - if ((tRecipe.mFluidInputs.length > 3) && (tRecipe.mFluidInputs[3] != null) - && (tRecipe.mFluidInputs[3].getFluid() != null)) { - this.mInputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidInputs[3], true), - 12, - 23)); - } - if ((tRecipe.mFluidInputs.length > 4) && (tRecipe.mFluidInputs[4] != null) - && (tRecipe.mFluidInputs[4].getFluid() != null)) { - this.mInputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidInputs[4], true), - 30, - 23)); - } - if ((tRecipe.mFluidInputs.length > 5) && (tRecipe.mFluidInputs[5] != null) - && (tRecipe.mFluidInputs[5].getFluid() != null)) { - this.mInputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidInputs[5], true), - 48, - 23)); - } - if ((tRecipe.mFluidInputs.length > 6) && (tRecipe.mFluidInputs[6] != null) - && (tRecipe.mFluidInputs[6].getFluid() != null)) { - this.mInputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidInputs[6], true), - 12, - 41)); - } - if ((tRecipe.mFluidInputs.length > 7) && (tRecipe.mFluidInputs[7] != null) - && (tRecipe.mFluidInputs[7].getFluid() != null)) { - this.mInputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidInputs[7], true), - 30, - 41)); - } - if ((tRecipe.mFluidInputs.length > 8) && (tRecipe.mFluidInputs[8] != null) - && (tRecipe.mFluidInputs[8].getFluid() != null)) { - this.mInputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidInputs[8], true), - 48, - 41)); - } - } - - tStartIndex = 0; - if (tRecipe.mFluidOutputs.length > 0) { - if ((tRecipe.mFluidOutputs[0] != null) && (tRecipe.mFluidOutputs[0].getFluid() != null)) { - this.mOutputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidOutputs[0], false), - 120, - 5, - tRecipe.getMaxOutput(tStartIndex++))); - } - if ((tRecipe.mFluidOutputs.length > 1) && (tRecipe.mFluidOutputs[1] != null) - && (tRecipe.mFluidOutputs[1].getFluid() != null)) { - this.mOutputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidOutputs[1], true), - 102, - 5, - tRecipe.getMaxOutput(tStartIndex++))); - } - if ((tRecipe.mFluidOutputs.length > 2) && (tRecipe.mFluidOutputs[2] != null) - && (tRecipe.mFluidOutputs[2].getFluid() != null)) { - this.mOutputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidOutputs[2], false), - 138, - 5, - tRecipe.getMaxOutput(tStartIndex++))); - } - if ((tRecipe.mFluidOutputs.length > 3) && (tRecipe.mFluidOutputs[3] != null) - && (tRecipe.mFluidOutputs[3].getFluid() != null)) { - this.mOutputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidOutputs[3], false), - 102, - 23, - tRecipe.getMaxOutput(tStartIndex++))); - } - if ((tRecipe.mFluidOutputs.length > 4) && (tRecipe.mFluidOutputs[4] != null) - && (tRecipe.mFluidOutputs[4].getFluid() != null)) { - this.mOutputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidOutputs[4], false), - 120, - 23, - tRecipe.getMaxOutput(tStartIndex++))); - } - if ((tRecipe.mFluidOutputs.length > 5) && (tRecipe.mFluidOutputs[5] != null) - && (tRecipe.mFluidOutputs[5].getFluid() != null)) { - this.mOutputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidOutputs[5], false), - 138, - 23, - tRecipe.getMaxOutput(tStartIndex++))); - } - if ((tRecipe.mFluidOutputs.length > 6) && (tRecipe.mFluidOutputs[6] != null) - && (tRecipe.mFluidOutputs[6].getFluid() != null)) { - this.mOutputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidOutputs[6], false), - 102, - 41, - tRecipe.getMaxOutput(tStartIndex++))); - } - if ((tRecipe.mFluidOutputs.length > 7) && (tRecipe.mFluidOutputs[7] != null) - && (tRecipe.mFluidOutputs[7].getFluid() != null)) { - this.mOutputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidOutputs[7], false), - 120, - 41, - tRecipe.getMaxOutput(tStartIndex++))); - } - if ((tRecipe.mFluidOutputs.length > 8) && (tRecipe.mFluidOutputs[8] != null) - && (tRecipe.mFluidOutputs[8].getFluid() != null)) { - this.mOutputs.add( - new FixedPositionedStack( - GT_Utility.getFluidDisplayStack(tRecipe.mFluidOutputs[8], false), - 138, - 41, - tRecipe.getMaxOutput(tStartIndex++))); - } - } - } - - @Override - public int compareTo(CachedRecipe o) { - boolean b = GasSpargingRecipeNEI.class.isInstance(o); - if (b) { - GasSpargingRecipeNEI p = (GasSpargingRecipeNEI) o; - if (p.mOutputs.size() > this.mOutputs.size()) { - return 1; - } else if (p.mOutputs.size() == this.mOutputs.size()) { - return 0; - } else { - return -1; - } - } - return 0; - } - - @Override - public boolean equals(Object obj) { - if (obj != null) { - if (GasSpargingRecipeNEI.class.isInstance(obj)) { - GasSpargingRecipeNEI p = (GasSpargingRecipeNEI) obj; - if (p != null) { - if (GT_Utility.areStacksEqual(p.mInputs.get(0).item, this.mInputs.get(0).item, true)) { - if (p.mOutputs.size() == this.mOutputs.size()) { - return true; - } - } - } - } - } - return false; - } - - @Override - public List getIngredients() { - return this.getCycledIngredients(GT_NEI_LFTR_Sparging.this.cycleticks / 10, this.mInputs); - } - - @Override - public PositionedStack getResult() { - return null; - } - - @Override - public List getOtherStacks() { - return this.mOutputs; - } - } -} diff --git a/src/main/java/gtPlusPlus/nei/LFTRSpargingNEIHandler.java b/src/main/java/gtPlusPlus/nei/LFTRSpargingNEIHandler.java new file mode 100644 index 0000000000..37a578f718 --- /dev/null +++ b/src/main/java/gtPlusPlus/nei/LFTRSpargingNEIHandler.java @@ -0,0 +1,493 @@ +package gtPlusPlus.nei; + +import java.awt.Rectangle; +import java.lang.ref.SoftReference; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; + +import net.minecraft.client.Minecraft; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import org.lwjgl.opengl.GL11; + +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.GuiCraftingRecipe; +import codechicken.nei.recipe.GuiRecipe; +import codechicken.nei.recipe.GuiUsageRecipe; +import codechicken.nei.recipe.TemplateRecipeHandler; +import cpw.mods.fml.common.event.FMLInterModComms; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.objects.ItemData; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.api.util.GasSpargingRecipe; +import gregtech.api.util.GasSpargingRecipeMap; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class LFTRSpargingNEIHandler extends TemplateRecipeHandler { + + public static final String mNEIName = GasSpargingRecipeMap.mNEIDisplayName; + private SoftReference> mCachedRecipes = null; + + public LFTRSpargingNEIHandler() { + this.transferRects.add( + new TemplateRecipeHandler.RecipeTransferRect( + new Rectangle(65, 13, 36, 18), + this.getOverlayIdentifier(), + new Object[0])); + if (!GTPPNEIConfig.sIsAdded) { + FMLInterModComms.sendRuntimeMessage( + GTValues.GT, + "NEIPlugins", + "register-crafting-handler", + "gregtechplusplus@" + this.getRecipeName() + "@" + this.getOverlayIdentifier()); + GuiCraftingRecipe.craftinghandlers.add(this); + GuiUsageRecipe.usagehandlers.add(this); + } + } + + @Override + public String getRecipeName() { + return mNEIName; + } + + @Override + public String getGuiTexture() { + return GasSpargingRecipeMap.mNEIGUIPath; + } + + @Override + public String getOverlayIdentifier() { + return gregtech.api.util.GasSpargingRecipeMap.mUnlocalizedName; + } + + @Override + 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, 68); + } + + @Override + public void loadTransferRects() { + this.transferRects + .add(new RecipeTransferRect(new Rectangle(72, 14, 22, 16), getOverlayIdentifier(), new Object[0])); + } + + public List getCache() { + List cache; + if (mCachedRecipes == null || (cache = mCachedRecipes.get()) == null) { + cache = GasSpargingRecipeMap.mRecipes.stream() // do not use parallel stream. This is already parallelized + // by NEI + .sorted() + .map(temp -> createCachedRecipe(temp)) + .collect(Collectors.toList()); + // while the NEI parallelize handlers, for each individual handler it still uses sequential execution model + // so we do not need any synchronization here + mCachedRecipes = new SoftReference<>(cache); + } + return cache; + } + + public GasSpargingRecipeNEI createCachedRecipe(GasSpargingRecipe aRecipe) { + return new GasSpargingRecipeNEI(aRecipe); + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getOverlayIdentifier())) { + arecipes.addAll(getCache()); + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadCraftingRecipes(ItemStack aResult) { + ItemData tPrefixMaterial = GTOreDictUnificator.getAssociation(aResult); + + ArrayList tResults = new ArrayList<>(); + tResults.add(aResult); + tResults.add(GTOreDictUnificator.get(true, aResult)); + if ((tPrefixMaterial != null) && (!tPrefixMaterial.mBlackListed) + && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) { + for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) { + tResults.add(GTOreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L)); + } + } + FluidStack tFluid = GTUtility.getFluidForFilledItem(aResult, true); + FluidStack tFluidStack; + if (tFluid != null) { + tFluidStack = tFluid; + tResults.add(GTUtility.getFluidDisplayStack(tFluid, false)); + } else tFluidStack = GTUtility.getFluidFromDisplayStack(aResult); + if (tFluidStack != null) { + tResults.addAll(GTUtility.getContainersFromFluid(tFluidStack)); + } + for (GasSpargingRecipeNEI recipe : getCache()) { + if (tResults.stream() + .anyMatch(stack -> recipe.contains(recipe.mOutputs, stack))) arecipes.add(recipe); + } + } + + @Override + public void loadUsageRecipes(ItemStack aInput) { + ItemData tPrefixMaterial = GTOreDictUnificator.getAssociation(aInput); + + ArrayList tInputs = new ArrayList<>(); + tInputs.add(aInput); + tInputs.add(GTOreDictUnificator.get(false, aInput)); + if ((tPrefixMaterial != null) && (!tPrefixMaterial.mPrefix.mFamiliarPrefixes.isEmpty())) { + for (OrePrefixes tPrefix : tPrefixMaterial.mPrefix.mFamiliarPrefixes) { + tInputs.add(GTOreDictUnificator.get(tPrefix, tPrefixMaterial.mMaterial.mMaterial, 1L)); + } + } + FluidStack tFluid = GTUtility.getFluidForFilledItem(aInput, true); + FluidStack tFluidStack; + if (tFluid != null) { + tFluidStack = tFluid; + tInputs.add(GTUtility.getFluidDisplayStack(tFluid, false)); + } else tFluidStack = GTUtility.getFluidFromDisplayStack(aInput); + if (tFluidStack != null) { + tInputs.addAll(GTUtility.getContainersFromFluid(tFluidStack)); + } + for (GasSpargingRecipeNEI recipe : getCache()) { + if (tInputs.stream() + .anyMatch(stack -> recipe.contains(recipe.mInputs, stack))) arecipes.add(recipe); + } + } + + protected static void drawText(int aX, int aY, String aString, int aColor) { + Minecraft.getMinecraft().fontRenderer.drawString(aString, aX, aY, aColor); + } + + @Override + public void drawExtras(int aRecipeIndex) { + final long tEUt = ((GasSpargingRecipeNEI) this.arecipes.get(aRecipeIndex)).mRecipe.mEUt; + final long tDuration = ((GasSpargingRecipeNEI) this.arecipes.get(aRecipeIndex)).mRecipe.mDuration; + drawText(10, 73, "Total: " + MathUtils.formatNumbers((long) (tDuration * tEUt)) + " EU", -16777216); + drawText(10, 83, "Usage: " + MathUtils.formatNumbers(tEUt) + " EU/t", -16777216); + drawText( + 10, + 93, + "Time: " + (tDuration < 20 ? "< 1" : MathUtils.formatNumbers(0.05d * tDuration)) + " secs", + -16777216); + drawText(10, 103, "Gas not used to sparge is", -16777216); + drawText(10, 113, "returned alongside outputs.", -16777216); + } + + @Override + public List handleItemTooltip(final GuiRecipe gui, final ItemStack aStack, final List currenttip, + final int aRecipeIndex) { + final TemplateRecipeHandler.CachedRecipe tObject = this.arecipes.get(aRecipeIndex); + if ((tObject instanceof final GasSpargingRecipeNEI tRecipe)) { + ItemStack aSpargeInput = tRecipe.mOutputs.get(0).item; + ItemStack aSpentFuel = tRecipe.mOutputs.get(1).item; + for (final PositionedStack tStack : tRecipe.mOutputs) { + if (aStack == tStack.item) { + if (ItemList.Display_Fluid.isStackEqual(tStack.item, true, true)) { + if (GTUtility.areStacksEqual(aStack, aSpentFuel, true)) { + break; + } + if (GTUtility.areStacksEqual(aStack, aSpargeInput, true)) { + currenttip.add("The amount returned is the remainder after all other outputs."); + } + currenttip.add( + "Maximum Output: " + (((FixedPositionedStack) tStack).mChance / 100) + + "." + + ((((FixedPositionedStack) tStack).mChance % 100) < 10 + ? "0" + (((FixedPositionedStack) tStack).mChance % 100) + : Integer.valueOf(((FixedPositionedStack) tStack).mChance % 100)) + + "L"); + break; + } + break; + } + } + for (final PositionedStack tStack : tRecipe.mInputs) { + if (GTUtility.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; + } + + 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 tDisplayStacks = new ArrayList<>(); + for (final ItemStack tStack : this.items) { + if (GTUtility.isStackValid(tStack)) { + if (tStack.getItemDamage() == 32767) { + final List permutations = codechicken.nei.ItemList.itemMap.get(tStack.getItem()); + if (!permutations.isEmpty()) { + ItemStack stack; + for (final Iterator i$ = permutations.iterator(); i$.hasNext(); tDisplayStacks + .add(GTUtility.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(GTUtility.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 GasSpargingRecipeNEI extends CachedRecipe implements Comparable { + + public final GasSpargingRecipe mRecipe; + public final List mOutputs = new ArrayList<>(); + public final List mInputs = new ArrayList<>(); + + public GasSpargingRecipeNEI(GasSpargingRecipe tRecipe) { + super(); + this.mRecipe = tRecipe; + int tStartIndex = 0; + if (tRecipe.mFluidInputs.length > 0) { + if ((tRecipe.mFluidInputs[0] != null) && (tRecipe.mFluidInputs[0].getFluid() != null)) { + this.mInputs.add( + new FixedPositionedStack(GTUtility.getFluidDisplayStack(tRecipe.mFluidInputs[0], true), 30, 5)); + } + if ((tRecipe.mFluidInputs.length > 1) && (tRecipe.mFluidInputs[1] != null) + && (tRecipe.mFluidInputs[1].getFluid() != null)) { + this.mInputs.add( + new FixedPositionedStack(GTUtility.getFluidDisplayStack(tRecipe.mFluidInputs[1], true), 12, 5)); + } + if ((tRecipe.mFluidInputs.length > 2) && (tRecipe.mFluidInputs[2] != null) + && (tRecipe.mFluidInputs[2].getFluid() != null)) { + this.mInputs.add( + new FixedPositionedStack(GTUtility.getFluidDisplayStack(tRecipe.mFluidInputs[2], true), 48, 5)); + } + if ((tRecipe.mFluidInputs.length > 3) && (tRecipe.mFluidInputs[3] != null) + && (tRecipe.mFluidInputs[3].getFluid() != null)) { + this.mInputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidInputs[3], true), + 12, + 23)); + } + if ((tRecipe.mFluidInputs.length > 4) && (tRecipe.mFluidInputs[4] != null) + && (tRecipe.mFluidInputs[4].getFluid() != null)) { + this.mInputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidInputs[4], true), + 30, + 23)); + } + if ((tRecipe.mFluidInputs.length > 5) && (tRecipe.mFluidInputs[5] != null) + && (tRecipe.mFluidInputs[5].getFluid() != null)) { + this.mInputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidInputs[5], true), + 48, + 23)); + } + if ((tRecipe.mFluidInputs.length > 6) && (tRecipe.mFluidInputs[6] != null) + && (tRecipe.mFluidInputs[6].getFluid() != null)) { + this.mInputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidInputs[6], true), + 12, + 41)); + } + if ((tRecipe.mFluidInputs.length > 7) && (tRecipe.mFluidInputs[7] != null) + && (tRecipe.mFluidInputs[7].getFluid() != null)) { + this.mInputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidInputs[7], true), + 30, + 41)); + } + if ((tRecipe.mFluidInputs.length > 8) && (tRecipe.mFluidInputs[8] != null) + && (tRecipe.mFluidInputs[8].getFluid() != null)) { + this.mInputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidInputs[8], true), + 48, + 41)); + } + } + + tStartIndex = 0; + if (tRecipe.mFluidOutputs.length > 0) { + if ((tRecipe.mFluidOutputs[0] != null) && (tRecipe.mFluidOutputs[0].getFluid() != null)) { + this.mOutputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidOutputs[0], false), + 120, + 5, + tRecipe.getMaxOutput(tStartIndex++))); + } + if ((tRecipe.mFluidOutputs.length > 1) && (tRecipe.mFluidOutputs[1] != null) + && (tRecipe.mFluidOutputs[1].getFluid() != null)) { + this.mOutputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidOutputs[1], true), + 102, + 5, + tRecipe.getMaxOutput(tStartIndex++))); + } + if ((tRecipe.mFluidOutputs.length > 2) && (tRecipe.mFluidOutputs[2] != null) + && (tRecipe.mFluidOutputs[2].getFluid() != null)) { + this.mOutputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidOutputs[2], false), + 138, + 5, + tRecipe.getMaxOutput(tStartIndex++))); + } + if ((tRecipe.mFluidOutputs.length > 3) && (tRecipe.mFluidOutputs[3] != null) + && (tRecipe.mFluidOutputs[3].getFluid() != null)) { + this.mOutputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidOutputs[3], false), + 102, + 23, + tRecipe.getMaxOutput(tStartIndex++))); + } + if ((tRecipe.mFluidOutputs.length > 4) && (tRecipe.mFluidOutputs[4] != null) + && (tRecipe.mFluidOutputs[4].getFluid() != null)) { + this.mOutputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidOutputs[4], false), + 120, + 23, + tRecipe.getMaxOutput(tStartIndex++))); + } + if ((tRecipe.mFluidOutputs.length > 5) && (tRecipe.mFluidOutputs[5] != null) + && (tRecipe.mFluidOutputs[5].getFluid() != null)) { + this.mOutputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidOutputs[5], false), + 138, + 23, + tRecipe.getMaxOutput(tStartIndex++))); + } + if ((tRecipe.mFluidOutputs.length > 6) && (tRecipe.mFluidOutputs[6] != null) + && (tRecipe.mFluidOutputs[6].getFluid() != null)) { + this.mOutputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidOutputs[6], false), + 102, + 41, + tRecipe.getMaxOutput(tStartIndex++))); + } + if ((tRecipe.mFluidOutputs.length > 7) && (tRecipe.mFluidOutputs[7] != null) + && (tRecipe.mFluidOutputs[7].getFluid() != null)) { + this.mOutputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidOutputs[7], false), + 120, + 41, + tRecipe.getMaxOutput(tStartIndex++))); + } + if ((tRecipe.mFluidOutputs.length > 8) && (tRecipe.mFluidOutputs[8] != null) + && (tRecipe.mFluidOutputs[8].getFluid() != null)) { + this.mOutputs.add( + new FixedPositionedStack( + GTUtility.getFluidDisplayStack(tRecipe.mFluidOutputs[8], false), + 138, + 41, + tRecipe.getMaxOutput(tStartIndex++))); + } + } + } + + @Override + public int compareTo(CachedRecipe o) { + boolean b = GasSpargingRecipeNEI.class.isInstance(o); + if (b) { + GasSpargingRecipeNEI p = (GasSpargingRecipeNEI) o; + if (p.mOutputs.size() > this.mOutputs.size()) { + return 1; + } else if (p.mOutputs.size() == this.mOutputs.size()) { + return 0; + } else { + return -1; + } + } + return 0; + } + + @Override + public boolean equals(Object obj) { + if (obj != null) { + if (GasSpargingRecipeNEI.class.isInstance(obj)) { + GasSpargingRecipeNEI p = (GasSpargingRecipeNEI) obj; + if (p != null) { + if (GTUtility.areStacksEqual(p.mInputs.get(0).item, this.mInputs.get(0).item, true)) { + if (p.mOutputs.size() == this.mOutputs.size()) { + return true; + } + } + } + } + } + return false; + } + + @Override + public List getIngredients() { + return this.getCycledIngredients(LFTRSpargingNEIHandler.this.cycleticks / 10, this.mInputs); + } + + @Override + public PositionedStack getResult() { + return null; + } + + @Override + public List getOtherStacks() { + return this.mOutputs; + } + } +} diff --git a/src/main/java/gtPlusPlus/nei/NEI_GTPP_Config.java b/src/main/java/gtPlusPlus/nei/NEI_GTPP_Config.java deleted file mode 100644 index 16cc1e8cbf..0000000000 --- a/src/main/java/gtPlusPlus/nei/NEI_GTPP_Config.java +++ /dev/null @@ -1,102 +0,0 @@ -package gtPlusPlus.nei; - -import java.util.Arrays; - -import net.minecraft.item.ItemStack; - -import codechicken.nei.api.API; -import codechicken.nei.api.IConfigureNEI; -import codechicken.nei.event.NEIRegisterHandlerInfosEvent; -import codechicken.nei.recipe.HandlerInfo; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import gregtech.api.enums.Mods; -import gregtech.api.recipe.RecipeMaps; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; - -public class NEI_GTPP_Config implements IConfigureNEI { - - public static boolean sIsAdded = true; - - @Override - public synchronized void loadConfig() { - sIsAdded = false; - - Logger.INFO("NEI Registration: Registering NEI handler for " + DecayableRecipeHandler.mNEIName); - API.registerRecipeHandler(new DecayableRecipeHandler()); - API.registerUsageHandler(new DecayableRecipeHandler()); - API.addRecipeCatalyst(new ItemStack(ModBlocks.blockDecayablesChest, 1), "GTPP_Decayables"); - - Logger.INFO("NEI Registration: Registering NEI handler for " + GT_NEI_LFTR_Sparging.mNEIName); - new GT_NEI_LFTR_Sparging(); - API.addRecipeCatalyst(GregtechItemList.Controller_Sparge_Tower.get(1), "gtpp.recipe.lftr.sparging"); - - for (GregtechItemList item : Arrays.asList( - GregtechItemList.GT4_Electric_Auto_Workbench_LV, - GregtechItemList.GT4_Electric_Auto_Workbench_MV, - GregtechItemList.GT4_Electric_Auto_Workbench_HV, - GregtechItemList.GT4_Electric_Auto_Workbench_EV, - GregtechItemList.GT4_Electric_Auto_Workbench_IV, - GregtechItemList.GT4_Electric_Auto_Workbench_LuV, - GregtechItemList.GT4_Electric_Auto_Workbench_ZPM, - GregtechItemList.GT4_Electric_Auto_Workbench_UV)) { - API.addRecipeCatalyst(item.get(1), "crafting", -10); - } - // Bronze workbench - API.removeRecipeCatalyst(ItemUtils.getItemStackFromFQRN("gregtech:gt.blockmachines:31081", 1), "crafting"); - API.removeRecipeCatalyst(ItemUtils.getItemStackFromFQRN("gregtech:gt.blockmachines:31082", 1), "crafting"); - - // Moved to its own handler - API.removeRecipeCatalyst( - GregtechItemList.Controller_Vacuum_Furnace.get(1), - GTPPRecipeMaps.chemicalDehydratorRecipes.unlocalizedName); - - // ULV simple washer - API.removeRecipeCatalyst( - ItemUtils.getItemStackFromFQRN("gregtech:gt.blockmachines:767", 1), - GTPPRecipeMaps.simpleWasherRecipes.unlocalizedName); - - // ULV combustion generator - API.removeRecipeCatalyst( - ItemUtils.getItemStackFromFQRN("gregtech:gt.blockmachines:960", 1), - RecipeMaps.dieselFuels.unlocalizedName); - - // ULV gas turbine - API.removeRecipeCatalyst( - ItemUtils.getItemStackFromFQRN("gregtech:gt.blockmachines:961", 1), - RecipeMaps.gasTurbineFuels.unlocalizedName); - - // Hide Flasks - if (Utils.isClient()) { - API.addItemListEntry(GregtechItemList.VOLUMETRIC_FLASK_8k.get(1)); - API.addItemListEntry(GregtechItemList.VOLUMETRIC_FLASK_32k.get(1)); - } - sIsAdded = true; - } - - @SubscribeEvent - public void registerHandlerInfo(NEIRegisterHandlerInfosEvent event) { - event.registerHandlerInfo( - new HandlerInfo.Builder("gtpp.recipe.lftr.sparging", CORE.name, Mods.GTPlusPlus.ID) - .setDisplayStack(GregtechItemList.Controller_Sparge_Tower.get(1)) - .setShiftY(6) - .setHeight(135) - .setMaxRecipesPerPage(1) - .build()); - } - - @Override - public String getName() { - return "GT++ NEI Plugin"; - } - - @Override - public String getVersion() { - return "(1.12)"; - } -} diff --git a/src/main/java/gtPlusPlus/plugin/agrichem/AgrichemCore.java b/src/main/java/gtPlusPlus/plugin/agrichem/AgrichemCore.java new file mode 100644 index 0000000000..6e5cc47e3a --- /dev/null +++ b/src/main/java/gtPlusPlus/plugin/agrichem/AgrichemCore.java @@ -0,0 +1,56 @@ +package gtPlusPlus.plugin.agrichem; + +import gtPlusPlus.api.interfaces.IPlugin; +import gtPlusPlus.plugin.agrichem.block.AgrichemFluids; +import gtPlusPlus.plugin.manager.CoreManager; + +// Called by Core_Manager#veryEarlyInit +@SuppressWarnings("unused") +public class AgrichemCore implements IPlugin { + + static final AgrichemCore mInstance; + + static { + mInstance = new AgrichemCore(); + CoreManager.registerPlugin(mInstance); + mInstance.log("Preparing " + mInstance.getPluginName() + " for use."); + } + + @Override + public boolean preInit() { + AgrichemFluids.init(); + return true; + } + + @Override + public boolean init() { + mInstance.log("Setting Items"); + return true; + } + + @Override + public boolean postInit() { + mInstance.log("Generating Recipes"); + return true; + } + + @Override + public boolean serverStart() { + return true; + } + + @Override + public boolean serverStop() { + return true; + } + + @Override + public String getPluginName() { + return "GT++ Agrichemistry Module"; + } + + @Override + public String getPluginAbbreviation() { + return "FARM"; + } +} diff --git a/src/main/java/gtPlusPlus/plugin/agrichem/BioRecipes.java b/src/main/java/gtPlusPlus/plugin/agrichem/BioRecipes.java index de5e010350..f6d95952c6 100644 --- a/src/main/java/gtPlusPlus/plugin/agrichem/BioRecipes.java +++ b/src/main/java/gtPlusPlus/plugin/agrichem/BioRecipes.java @@ -11,14 +11,14 @@ import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; import static gregtech.api.recipe.RecipeMaps.latheRecipes; import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.CHEMPLANT_CASING_TIER; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.CHEMPLANT_CASING_TIER; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.cokeOvenRecipes; @@ -38,21 +38,21 @@ import net.minecraftforge.fluids.Fluid; import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.oredict.OreDictionary; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_RecipeConstants; +import gregtech.api.objects.GTItemStack; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipeConstants; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.item.ModItems; import gtPlusPlus.core.item.base.BaseItemComponent; import gtPlusPlus.core.item.chemistry.AgriculturalChem; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.MISC_MATERIALS; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.material.MaterialsAlloy; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -163,7 +163,7 @@ public class BioRecipes { .getFluid(); mSulfuricWasteWater = FluidUtils.getFluidStack("sulfuricapatite", 1) .getFluid(); - mAmmonia = MISC_MATERIALS.AMMONIA.getFluidStack(1) + mAmmonia = MaterialMisc.AMMONIA.getFluidStack(1) .getFluid(); mEthylene = FluidUtils.getFluidStack("ethylene", 1) .getFluid(); @@ -187,9 +187,9 @@ public class BioRecipes { .getFluid(); mLiquidPlastic = FluidUtils.getWildcardFluidStack("plastic", 1) .getFluid(); - mCarbonDioxide = MISC_MATERIALS.CARBON_DIOXIDE.getFluidStack(1) + mCarbonDioxide = MaterialMisc.CARBON_DIOXIDE.getFluidStack(1) .getFluid(); - mCarbonMonoxide = MISC_MATERIALS.CARBON_MONOXIDE.getFluidStack(1) + mCarbonMonoxide = MaterialMisc.CARBON_MONOXIDE.getFluidStack(1) .getFluid(); mChlorine = FluidUtils.getFluidStack("chlorine", 1) .getFluid(); @@ -250,18 +250,18 @@ public class BioRecipes { ItemUtils.registerFuel(ItemUtils.getSimpleStack(AgriculturalChem.mWoodBrick, 1), 4800); // Combustion Fuels - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("cellButanol", 1)) .metadata(FUEL_VALUE, 400) .metadata(FUEL_TYPE, 0) .duration(0) .eut(0) - .addTo(GT_RecipeConstants.Fuel); + .addTo(GTRecipeConstants.Fuel); } private static void recipeGreenAlgae() { // Compost - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 4)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mCompost, 1)) .duration(20 * SECONDS) @@ -269,7 +269,7 @@ public class BioRecipes { .addTo(maceratorRecipes); // Turn into Cellulose - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getGreenAlgaeRecipeChip(), ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 10)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mCelluloseFiber, 5)) .duration(7 * SECONDS + 10 * TICKS) @@ -279,7 +279,7 @@ public class BioRecipes { private static void recipeBrownAlgae() { // Compost - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 2)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mCompost, 1)) .duration(20 * SECONDS) @@ -287,7 +287,7 @@ public class BioRecipes { .addTo(maceratorRecipes); // Alginic acid - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 10)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mAlginicAcid, 2)) .duration(2 * SECONDS) @@ -295,7 +295,7 @@ public class BioRecipes { .addTo(extractorRecipes); // Lithium Chloride - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBrownAlgaeRecipeChip(), ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 20)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mLithiumChloride, 5)) .duration(6 * SECONDS) @@ -304,7 +304,7 @@ public class BioRecipes { .addTo(blastFurnaceRecipes); // Sodium Carbonate - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBrownAlgaeRecipeChip(), ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 40)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mSodiumCarbonate, 20)) .fluidInputs(FluidUtils.getDistilledWater(2000)) @@ -315,7 +315,7 @@ public class BioRecipes { private static void recipeGoldenBrownAlgae() { // Compost - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, 1)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mCompost, 1)) .duration(20 * SECONDS) @@ -323,7 +323,7 @@ public class BioRecipes { .addTo(maceratorRecipes); // Turn into Cellulose - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getGoldenBrownAlgaeRecipeChip(), ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, 10)) @@ -335,7 +335,7 @@ public class BioRecipes { private static void recipeRedAlgae() { // Compost - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, 1)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mCompost, 2)) .duration(20 * SECONDS) @@ -343,7 +343,7 @@ public class BioRecipes { .addTo(maceratorRecipes); // Turn into Cellulose - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getRedAlgaeRecipeChip(), ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, 10)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mRedCelluloseFiber, 5)) .duration(7 * SECONDS + 10 * TICKS) @@ -353,7 +353,7 @@ public class BioRecipes { private static void recipeCelluloseFibre() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(AgriculturalChem.mCelluloseFiber, 8), ItemUtils.getSimpleStack(AgriculturalChem.mAlginicAcid, 2)) @@ -363,7 +363,7 @@ public class BioRecipes { .addTo(UniversalChemical); // Craft into Wood Pellets - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(2), ItemUtils.getSimpleStack(AgriculturalChem.mCelluloseFiber, 12)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mWoodPellet, 24)) .duration(2 * SECONDS + 8 * TICKS) @@ -371,7 +371,7 @@ public class BioRecipes { .addTo(assemblerRecipes); // Methanol Extraction - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mCelluloseFiber, 12)) .fluidOutputs(Materials.Methanol.getFluid(1000L)) .duration(7 * SECONDS + 10 * TICKS) @@ -379,7 +379,7 @@ public class BioRecipes { .addTo(fluidExtractionRecipes); // Compost - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mCelluloseFiber, 3)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mCompost, 1)) .duration(20 * SECONDS) @@ -387,7 +387,7 @@ public class BioRecipes { .addTo(maceratorRecipes); // Plastic - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(16), ItemUtils.getSimpleStack(AgriculturalChem.mCellulosePulp, 4)) .fluidInputs( FluidUtils.getFluidStack(BioRecipes.mAceticAcid, 500), @@ -414,7 +414,7 @@ public class BioRecipes { ItemUtils.getSimpleStack(AgriculturalChem.mWoodBrick, 2)); // Extruder Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(AgriculturalChem.mCelluloseFiber, 12), ItemUtils.getSimpleStack(AgriculturalChem.mPelletMold, 0)) @@ -424,7 +424,7 @@ public class BioRecipes { .addTo(extruderRecipes); // Assembly Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(2), ItemUtils.getSimpleStack(AgriculturalChem.mWoodPellet, 8)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mWoodBrick, 2)) .duration(5 * SECONDS) @@ -432,7 +432,7 @@ public class BioRecipes { .addTo(assemblerRecipes); // CO2 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mWoodPellet, 1)) .fluidOutputs(FluidUtils.getFluidStack(mCarbonDioxide, 70)) .duration(10 * SECONDS) @@ -446,10 +446,10 @@ public class BioRecipes { true, true, ItemUtils.getItemStackOfAmountFromOreDict("gemCharcoal", 3), - GT_Values.NF, + GTValues.NF, 1200); } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mWoodPellet, 2), getBioChip(3)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("gemCharcoal", 3)) .eut(16) @@ -460,7 +460,7 @@ public class BioRecipes { private static void recipeWoodBricks() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(3), ItemUtils.getOrePrefixStack(OrePrefixes.dust, Materials.Wood, 50)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mWoodBrick, 1)) .duration(1 * MINUTES + 40 * SECONDS) @@ -471,7 +471,7 @@ public class BioRecipes { private static void recipeCellulosePulp() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(2), ItemUtils.getSimpleStack(AgriculturalChem.mCellulosePulp, 4)) .itemOutputs(ItemUtils.getSimpleStack(Items.paper, 4)) .duration(2 * SECONDS) @@ -481,12 +481,12 @@ public class BioRecipes { private static void recipeCatalystCarrier() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(20), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 8L), - GT_OreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 4L), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Tin, 6L)) + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Steel, 8L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 4L), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Tin, 6L)) .itemOutputs(CI.getEmptyCatalyst(1)) .duration(5 * MINUTES) .eut(16) @@ -495,12 +495,12 @@ public class BioRecipes { private static void recipeAluminiumSilverCatalyst() { // Assembler Recipe - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(4), CI.getEmptyCatalyst(10), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 4L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Silver, 4L)) .itemOutputs(CI.getGreenCatalyst(10)) .duration(20 * SECONDS) .eut(TierEU.RECIPE_LV) @@ -510,7 +510,7 @@ public class BioRecipes { private static void recipeAceticAcid() { // CH4O + CO = C2H4O2 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(CI.getGreenCatalyst(0)) .fluidInputs( FluidUtils.getFluidStack(BioRecipes.mMethanol, 700), @@ -521,7 +521,7 @@ public class BioRecipes { .metadata(CHEMPLANT_CASING_TIER, 1) .addTo(chemicalPlantRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(CI.getNumberedBioCircuit(14)) .fluidInputs(FluidUtils.getFluidStack(mFermentationBase, 1000)) .fluidOutputs(FluidUtils.getFluidStack(mAceticAcid, 1000)) @@ -532,10 +532,10 @@ public class BioRecipes { .addTo(chemicalDehydratorRecipes); } - public static final HashSet mFruits = new HashSet<>(); - public static final HashSet mVege = new HashSet<>(); - public static final HashSet mNuts = new HashSet<>(); - public static final HashSet mSeeds = new HashSet<>(); + public static final HashSet mFruits = new HashSet<>(); + public static final HashSet mVege = new HashSet<>(); + public static final HashSet mNuts = new HashSet<>(); + public static final HashSet mSeeds = new HashSet<>(); public static final AutoMap mList_Master_FruitVege = new AutoMap<>(); public static final AutoMap mList_Master_Seeds = new AutoMap<>(); @@ -551,33 +551,33 @@ public class BioRecipes { processOreDictEntry("listAllSeed", mSeeds); if (!mFruits.isEmpty()) { - for (GT_ItemStack g : mFruits) { + for (GTItemStack g : mFruits) { mList_Master_FruitVege.put(g.toStack()); } } if (!mVege.isEmpty()) { - for (GT_ItemStack g : mVege) { + for (GTItemStack g : mVege) { mList_Master_FruitVege.put(g.toStack()); } } if (!mNuts.isEmpty()) { - for (GT_ItemStack g : mNuts) { + for (GTItemStack g : mNuts) { mList_Master_FruitVege.put(g.toStack()); } } if (!mSeeds.isEmpty()) { - for (GT_ItemStack g : mSeeds) { + for (GTItemStack g : mSeeds) { mList_Master_Seeds.put(g.toStack()); } } } // Make Fermentation - private static void processOreDictEntry(String aOreName, HashSet mfruits2) { + private static void processOreDictEntry(String aOreName, HashSet mfruits2) { ArrayList aTemp = OreDictionary.getOres(aOreName); if (!aTemp.isEmpty()) { for (ItemStack stack : aTemp) { - mfruits2.add(new GT_ItemStack(stack)); + mfruits2.add(new GTItemStack(stack)); } } } @@ -592,7 +592,7 @@ public class BioRecipes { continue; } if (ItemUtils.checkForInvalidItems(a)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(2), ItemUtils.getSimpleStack(a, 10)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mDistilledWater, 1000)) .fluidOutputs(FluidUtils.getFluidStack(BioRecipes.mFermentationBase, 1000)) @@ -605,7 +605,7 @@ public class BioRecipes { } for (ItemStack a : aSeeds) { if (ItemUtils.checkForInvalidItems(a)) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(3), ItemUtils.getSimpleStack(a, 20)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mDistilledWater, 1000)) .fluidOutputs(FluidUtils.getFluidStack(BioRecipes.mFermentationBase, 1000)) @@ -618,7 +618,7 @@ public class BioRecipes { } // Sugar Cane - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(4), ItemUtils.getSimpleStack(Items.reeds, 32)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mDistilledWater, 1000)) .fluidOutputs(FluidUtils.getFluidStack(BioRecipes.mFermentationBase, 1000)) @@ -626,7 +626,7 @@ public class BioRecipes { .eut(TierEU.RECIPE_LV) .metadata(CHEMPLANT_CASING_TIER, 0) .addTo(chemicalPlantRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(5), ItemUtils.getSimpleStack(Items.reeds, 32), @@ -641,7 +641,7 @@ public class BioRecipes { // Sugar Beet if (OreDictUtils.containsValidEntries("cropSugarbeet")) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(4), ItemUtils.getItemStackOfAmountFromOreDict("cropSugarbeet", 4)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mDistilledWater, 1000)) .fluidOutputs(FluidUtils.getFluidStack(BioRecipes.mFermentationBase, 1000)) @@ -649,7 +649,7 @@ public class BioRecipes { .eut(TierEU.RECIPE_LV) .metadata(CHEMPLANT_CASING_TIER, 0) .addTo(chemicalPlantRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(5), ItemUtils.getItemStackOfAmountFromOreDict("cropSugarbeet", 4), @@ -664,7 +664,7 @@ public class BioRecipes { } // Produce Acetone, Butanol and Ethanol - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(5), ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownCelluloseFiber, 6), @@ -683,7 +683,7 @@ public class BioRecipes { private static void recipePropionicAcid() { // C2H4 + CO + H2O = C3H6O2 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(CI.getGreenCatalyst(0)) .fluidInputs( FluidUtils.getFluidStack(BioRecipes.mEthylene, 1000), @@ -699,7 +699,7 @@ public class BioRecipes { private static void recipeEthanol() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(BioRecipes.getBioChip(2)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mFermentationBase, 1000)) .fluidOutputs(FluidUtils.getFluidStack(BioRecipes.mEthanol, 100)) @@ -709,7 +709,7 @@ public class BioRecipes { } private static void recipeGoldenBrownCelluloseFiber() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownCelluloseFiber, 5)) .fluidOutputs(Materials.Ammonia.getGas(500)) .duration(15 * SECONDS) @@ -718,7 +718,7 @@ public class BioRecipes { } private static void recipeRedCelluloseFiber() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getSimpleStack(AgriculturalChem.mRedCelluloseFiber, 3)) .itemOutputs(ItemUtils.getSimpleStack(ModItems.dustCalciumCarbonate, 5)) .duration(5 * SECONDS) @@ -728,7 +728,7 @@ public class BioRecipes { private static void recipeSodiumHydroxide() { // NaCl·H2O = NaOH + Cl + H - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(4)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mSodiumHydroxide, 3)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mSalineWater, 1000)) @@ -740,7 +740,7 @@ public class BioRecipes { .metadata(CHEMPLANT_CASING_TIER, 1) .addTo(chemicalPlantRecipes); // Na + H2O = NaOH + H - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(5), ItemUtils.getItemStackOfAmountFromOreDict("dustSodium", 5)) .itemOutputs(ItemUtils.getSimpleStack(AgriculturalChem.mSodiumHydroxide, 15)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mDistilledWater, 5000)) @@ -756,7 +756,7 @@ public class BioRecipes { if (OreDictUtils.containsValidEntries("fuelCoke")) { // Na2CO3 + Al2O3 =C= 2NaAlO2 + CO2 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(18), ItemUtils.getItemStackOfAmountFromOreDict("fuelCoke", 1), @@ -771,7 +771,7 @@ public class BioRecipes { } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(18), ItemUtils.getItemStackOfAmountFromOreDict("dustCoal", 2), @@ -788,8 +788,8 @@ public class BioRecipes { private static void recipePelletMold() { GregtechItemList.Pellet_Mold.set(ItemUtils.getSimpleStack(AgriculturalChem.mPelletMold, 1)); - GT_Values.RA.stdBuilder() - .itemInputs(ALLOY.TUMBAGA.getBlock(1)) + GTValues.RA.stdBuilder() + .itemInputs(MaterialsAlloy.TUMBAGA.getBlock(1)) .itemOutputs(GregtechItemList.Pellet_Mold.get(1)) .duration(7 * MINUTES + 30 * SECONDS) .eut(TierEU.RECIPE_MV / 4 * 3) @@ -857,7 +857,7 @@ public class BioRecipes { } for (String aOreName : aOreNames) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( CI.getNumberedBioCircuit(14), ItemUtils.getSimpleStack(aOreCache.get(aOreName), aOreData2.get(aOreName))) @@ -875,7 +875,7 @@ public class BioRecipes { .addTo(chemicalPlantRecipes); } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(AgriculturalChem.mCleanAluminiumMix, 3), ItemUtils.getSimpleStack(AgriculturalChem.mPelletMold, 0)) @@ -887,7 +887,7 @@ public class BioRecipes { private static void recipeAlumina() { // 2NaAlO2 + 2NaOH + 2CO2 = Al2O3 + 2Na2CO3 + H2O - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(AgriculturalChem.mSodiumAluminate, 8), ItemUtils.getSimpleStack(AgriculturalChem.mSodiumHydroxide, 6)) @@ -903,11 +903,11 @@ public class BioRecipes { private static void recipeAluminium() { // 2Al2O3 + 3C = 4Al + 3CO2 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(AgriculturalChem.mAlumina, 10), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 3L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Carbon, 3L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4L)) .fluidOutputs(Materials.CarbonDioxide.getGas(3000L)) .duration(2 * MINUTES) .eut(TierEU.RECIPE_MV) @@ -916,17 +916,17 @@ public class BioRecipes { } private static void recipeLithiumChloride() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.RockSalt, 8), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.RockSalt, 8), ItemUtils.getSimpleStack(AgriculturalChem.mLithiumChloride, 10)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 2), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lithium, 3), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lithium, 3), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lithium, 5), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 2), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Potassium, 5)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 2), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lithium, 3), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lithium, 3), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lithium, 5), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Potassium, 2), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Potassium, 5)) .outputChances(7500, 8000, 8500, 9000, 7500, 8500) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mAir, 4000)) .fluidOutputs(FluidUtils.getFluidStack(BioRecipes.mChlorine, 500)) @@ -934,17 +934,17 @@ public class BioRecipes { .eut(TierEU.RECIPE_MV / 2) .addTo(multiblockChemicalReactorRecipes); if (OreDictUtils.containsValidEntries("dustPotash")) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Potash, 10), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Potash, 10), ItemUtils.getSimpleStack(AgriculturalChem.mLithiumChloride, 16)) .itemOutputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 3), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lithium, 5), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lithium, 5), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lithium, 7), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 2), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 2)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 3), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lithium, 5), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lithium, 5), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Lithium, 7), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 2), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 2)) .outputChances(7500, 8000, 8500, 9000, 9000, 9000) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mThermalWater, 2000)) .fluidOutputs(FluidUtils.getFluidStack(BioRecipes.mChlorine, 250)) @@ -956,7 +956,7 @@ public class BioRecipes { private static void recipeSulfuricAcid() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(7), ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 10), @@ -967,7 +967,7 @@ public class BioRecipes { .eut(60) .metadata(CHEMPLANT_CASING_TIER, 1) .addTo(chemicalPlantRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(7), ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownCelluloseFiber, 2), @@ -984,7 +984,7 @@ public class BioRecipes { private static void recipeUrea() { // 2NH3 + CO2 = CH4N2O + H2O - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(9)) .fluidInputs( FluidUtils.getFluidStack(BioRecipes.mAmmonia, 600), @@ -996,7 +996,7 @@ public class BioRecipes { .eut(TierEU.RECIPE_LV) .metadata(CHEMPLANT_CASING_TIER, 1) .addTo(chemicalPlantRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(9)) .fluidInputs( FluidUtils.getFluidStack(BioRecipes.mUrea, 200), @@ -1011,7 +1011,7 @@ public class BioRecipes { private static void recipeRawBioResin() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(3), ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 5), @@ -1027,7 +1027,7 @@ public class BioRecipes { private static void recipeLiquidResin() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(3), ItemUtils.getSimpleStack(AgriculturalChem.mRawBioResin, 1)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mEthanol, 200)) .fluidOutputs(FluidUtils.getFluidStack(BioRecipes.mLiquidResin, 500)) @@ -1035,7 +1035,7 @@ public class BioRecipes { .eut(TierEU.RECIPE_LV) .metadata(CHEMPLANT_CASING_TIER, 1) .addTo(chemicalPlantRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(3), ItemUtils.getSimpleStack(AgriculturalChem.mCellulosePulp, 8)) .itemOutputs(ItemUtils.getSimpleStack(Ic2Items.resin, 32)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mLiquidResin, 144)) @@ -1050,7 +1050,7 @@ public class BioRecipes { ItemStack aFert; if (Forestry.isModLoaded()) { aFert = ItemUtils.getSimpleStack(AgriculturalChem.aFertForestry, 32); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(11), ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 16), @@ -1065,7 +1065,7 @@ public class BioRecipes { } aFert = ItemUtils.getSimpleStack(AgriculturalChem.aFertIC2, 32); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(12), ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 16), @@ -1081,7 +1081,7 @@ public class BioRecipes { private static void recipeMethane() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(12), ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 10)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mDistilledWater, 500)) .fluidOutputs(FluidUtils.getFluidStack(BioRecipes.mMethane, 500)) @@ -1089,7 +1089,7 @@ public class BioRecipes { .eut(64) .metadata(CHEMPLANT_CASING_TIER, 1) .addTo(chemicalPlantRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( getBioChip(13), ItemUtils.getSimpleStack(AgriculturalChem.mCelluloseFiber, 8), @@ -1107,7 +1107,7 @@ public class BioRecipes { private static void recipeBenzene() { // 6CH4 = C6H6 + 18H - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(19), CI.getGreenCatalyst(0)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mMethane, 6000)) .fluidOutputs(FluidUtils.getFluidStack(BioRecipes.mBenzene, 1000), Materials.Hydrogen.getGas(18000)) @@ -1121,7 +1121,7 @@ public class BioRecipes { private static void recipeStyrene() { // C8H10 = C8H8 + 2H - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(getBioChip(20), CI.getGreenCatalyst(0)) .fluidInputs(FluidUtils.getFluidStack(BioRecipes.mEthylbenzene, 100)) .fluidOutputs(FluidUtils.getFluidStack(BioRecipes.mStyrene, 100), Materials.Hydrogen.getGas(200)) @@ -1133,7 +1133,7 @@ public class BioRecipes { } private static void recipeBioChip() { - GT_ModHandler.addShapelessCraftingRecipe( + GTModHandler.addShapelessCraftingRecipe( GregtechItemList.Circuit_BioRecipeSelector.getWithDamage(1L, 0L), 0, new Object[] { OrePrefixes.circuit.get(Materials.ULV) }); @@ -1239,7 +1239,7 @@ public class BioRecipes { public static boolean addCraftingRecipe(ItemStack aResult, long aBitMask, Object[] aRecipe) { Method mAddRecipe = ReflectionUtils.getMethod( - GT_ModHandler.class, + GTModHandler.class, "addCraftingRecipe", ItemStack.class, Enchantment[].class, diff --git a/src/main/java/gtPlusPlus/plugin/agrichem/Core_Agrichem.java b/src/main/java/gtPlusPlus/plugin/agrichem/Core_Agrichem.java deleted file mode 100644 index 0c3d7d2867..0000000000 --- a/src/main/java/gtPlusPlus/plugin/agrichem/Core_Agrichem.java +++ /dev/null @@ -1,56 +0,0 @@ -package gtPlusPlus.plugin.agrichem; - -import gtPlusPlus.api.interfaces.IPlugin; -import gtPlusPlus.plugin.agrichem.block.AgrichemFluids; -import gtPlusPlus.plugin.manager.Core_Manager; - -// Called by Core_Manager#veryEarlyInit -@SuppressWarnings("unused") -public class Core_Agrichem implements IPlugin { - - static final Core_Agrichem mInstance; - - static { - mInstance = new Core_Agrichem(); - Core_Manager.registerPlugin(mInstance); - mInstance.log("Preparing " + mInstance.getPluginName() + " for use."); - } - - @Override - public boolean preInit() { - AgrichemFluids.init(); - return true; - } - - @Override - public boolean init() { - mInstance.log("Setting Items"); - return true; - } - - @Override - public boolean postInit() { - mInstance.log("Generating Recipes"); - return true; - } - - @Override - public boolean serverStart() { - return true; - } - - @Override - public boolean serverStop() { - return true; - } - - @Override - public String getPluginName() { - return "GT++ Agrichemistry Module"; - } - - @Override - public String getPluginAbbreviation() { - return "FARM"; - } -} diff --git a/src/main/java/gtPlusPlus/plugin/fixes/vanilla/Core_VanillaFixes.java b/src/main/java/gtPlusPlus/plugin/fixes/vanilla/Core_VanillaFixes.java deleted file mode 100644 index cc181756c0..0000000000 --- a/src/main/java/gtPlusPlus/plugin/fixes/vanilla/Core_VanillaFixes.java +++ /dev/null @@ -1,101 +0,0 @@ -package gtPlusPlus.plugin.fixes.vanilla; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import gtPlusPlus.api.interfaces.IPlugin; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.plugin.manager.Core_Manager; - -// Called by Core_Manager#veryEarlyInit -@SuppressWarnings("unused") -public class Core_VanillaFixes implements IPlugin { - - static final Core_VanillaFixes mInstance; - static final VanillaBedHeightFix mBedFixInstance; - static final VanillaBackgroundMusicFix mMusicFixInstance; - - static { - mInstance = new Core_VanillaFixes(); - mBedFixInstance = new VanillaBedHeightFix(mInstance); - mMusicFixInstance = new VanillaBackgroundMusicFix(mInstance); - mInstance.log("Preparing " + mInstance.getPluginName() + " for use."); - } - - Core_VanillaFixes() { - Core_Manager.registerPlugin(this); - } - - @Override - public boolean preInit() { - return fixVanillaOD(); - } - - @Override - public boolean init() { - return true; - } - - @Override - public boolean postInit() { - return true; - } - - @Override - public boolean serverStart() { - mMusicFixInstance.manage(); - return true; - } - - @Override - public boolean serverStop() { - return true; - } - - @Override - public String getPluginName() { - return "GT++ Vanilla Fixes Module"; - } - - @Override - public String getPluginAbbreviation() { - return "VFIX"; - } - - private boolean fixVanillaOD() { - registerToOreDict(ItemUtils.getSimpleStack(Items.blaze_rod), "rodBlaze"); - registerToOreDict(ItemUtils.getSimpleStack(Items.nether_wart), "cropNetherWart"); - registerToOreDict(ItemUtils.getSimpleStack(Items.reeds), "sugarcane"); - registerToOreDict(ItemUtils.getSimpleStack(Items.paper), "paper"); - registerToOreDict(ItemUtils.getSimpleStack(Items.ender_pearl), "enderpearl"); - registerToOreDict(ItemUtils.getSimpleStack(Items.bone), "bone"); - registerToOreDict(ItemUtils.getSimpleStack(Items.gunpowder), "gunpowder"); - registerToOreDict(ItemUtils.getSimpleStack(Items.string), "string"); - registerToOreDict(ItemUtils.getSimpleStack(Items.nether_star), "netherStar"); - registerToOreDict(ItemUtils.getSimpleStack(Items.leather), "leather"); - registerToOreDict(ItemUtils.getSimpleStack(Items.feather), "feather"); - registerToOreDict(ItemUtils.getSimpleStack(Items.egg), "egg"); - registerToOreDict(ItemUtils.getSimpleStack(Blocks.end_stone), "endstone"); - registerToOreDict(ItemUtils.getSimpleStack(Blocks.vine), "vine"); - registerToOreDict(ItemUtils.getSimpleStack(Blocks.cactus), "blockCactus"); - registerToOreDict(ItemUtils.getSimpleStack(Blocks.grass), "grass"); - registerToOreDict(ItemUtils.getSimpleStack(Blocks.obsidian), "obsidian"); - registerToOreDict(ItemUtils.getSimpleStack(Blocks.crafting_table), "workbench"); - return true; - } - - private void registerToOreDict(ItemStack aStack, String aString) { - if (aStack.getItem() == Items.blaze_rod) { - mInstance - .log("Registering " + aStack.getDisplayName() + " to OreDictionary under the tag '" + aString + "'."); - } else { - mInstance.log( - "Registering " + aStack.getDisplayName() - + " to OreDictionary under the tag '" - + aString - + "'. (Added to Forge in 1.8.9)"); - } - ItemUtils.addItemToOreDictionary(aStack, aString); - } -} diff --git a/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBackgroundMusicFix.java b/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBackgroundMusicFix.java index 22ae6f29c6..edd41535e7 100644 --- a/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBackgroundMusicFix.java +++ b/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBackgroundMusicFix.java @@ -7,7 +7,7 @@ import gtPlusPlus.api.interfaces.IPlugin; import gtPlusPlus.core.util.Utils; import gtPlusPlus.plugin.fixes.interfaces.IBugFix; import gtPlusPlus.plugin.fixes.vanilla.music.MusicTocker; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.preloader.PreloaderCore; public class VanillaBackgroundMusicFix implements IBugFix { @@ -17,11 +17,11 @@ public class VanillaBackgroundMusicFix implements IBugFix { public VanillaBackgroundMusicFix(IPlugin minstance) { mParent = minstance; - if (CORE_Preloader.enableWatchdogBGM > 0 && Utils.isClient()) { + if (PreloaderCore.enableWatchdogBGM > 0 && Utils.isClient()) { mParent.log("[BGM] Registering BGM delay Fix."); enabled = true; mFixInstance = new MusicTocker(mParent); - } else if (CORE_Preloader.enableWatchdogBGM > 0 && Utils.isServer()) { + } else if (PreloaderCore.enableWatchdogBGM > 0 && Utils.isServer()) { mParent.log("[BGM] Tried registering BGM delay Fix on Server, disabling."); enabled = false; } else { @@ -36,7 +36,7 @@ public class VanillaBackgroundMusicFix implements IBugFix { } public void manage() { - if (CORE_Preloader.enableWatchdogBGM > 0 && Utils.isClient()) { + if (PreloaderCore.enableWatchdogBGM > 0 && Utils.isClient()) { TimerTask task = new ManageTask(this.mFixInstance); Timer timer = new Timer("BGM-WatchDog"); long delay = 1000 * 60; @@ -54,7 +54,7 @@ public class VanillaBackgroundMusicFix implements IBugFix { @Override public void run() { - if (CORE_Preloader.enableWatchdogBGM > 0 && Utils.isClient()) { + if (PreloaderCore.enableWatchdogBGM > 0 && Utils.isClient()) { if (!A.mVanillaManager) { A.run(); } diff --git a/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java b/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java index 60ab048ca3..bf69ead5e2 100644 --- a/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java +++ b/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaBedHeightFix.java @@ -13,7 +13,7 @@ import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.reflect.ReflectionUtils; import gtPlusPlus.plugin.fixes.interfaces.IBugFix; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.preloader.PreloaderCore; public class VanillaBedHeightFix implements IBugFix { @@ -23,7 +23,7 @@ public class VanillaBedHeightFix implements IBugFix { public VanillaBedHeightFix(IPlugin minstance) { mParent = minstance; Method m; - if (!CORE_Preloader.DEV_ENVIRONMENT) { + if (!PreloaderCore.DEV_ENVIRONMENT) { m = ReflectionUtils.getMethod(EntityPlayer.class, "func_71018_a", int.class, int.class, int.class); } else { m = ReflectionUtils.getMethod( diff --git a/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaFixesCore.java b/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaFixesCore.java new file mode 100644 index 0000000000..b6cfb9d3ba --- /dev/null +++ b/src/main/java/gtPlusPlus/plugin/fixes/vanilla/VanillaFixesCore.java @@ -0,0 +1,101 @@ +package gtPlusPlus.plugin.fixes.vanilla; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gtPlusPlus.api.interfaces.IPlugin; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.plugin.manager.CoreManager; + +// Called by Core_Manager#veryEarlyInit +@SuppressWarnings("unused") +public class VanillaFixesCore implements IPlugin { + + static final VanillaFixesCore mInstance; + static final VanillaBedHeightFix mBedFixInstance; + static final VanillaBackgroundMusicFix mMusicFixInstance; + + static { + mInstance = new VanillaFixesCore(); + mBedFixInstance = new VanillaBedHeightFix(mInstance); + mMusicFixInstance = new VanillaBackgroundMusicFix(mInstance); + mInstance.log("Preparing " + mInstance.getPluginName() + " for use."); + } + + VanillaFixesCore() { + CoreManager.registerPlugin(this); + } + + @Override + public boolean preInit() { + return fixVanillaOD(); + } + + @Override + public boolean init() { + return true; + } + + @Override + public boolean postInit() { + return true; + } + + @Override + public boolean serverStart() { + mMusicFixInstance.manage(); + return true; + } + + @Override + public boolean serverStop() { + return true; + } + + @Override + public String getPluginName() { + return "GT++ Vanilla Fixes Module"; + } + + @Override + public String getPluginAbbreviation() { + return "VFIX"; + } + + private boolean fixVanillaOD() { + registerToOreDict(ItemUtils.getSimpleStack(Items.blaze_rod), "rodBlaze"); + registerToOreDict(ItemUtils.getSimpleStack(Items.nether_wart), "cropNetherWart"); + registerToOreDict(ItemUtils.getSimpleStack(Items.reeds), "sugarcane"); + registerToOreDict(ItemUtils.getSimpleStack(Items.paper), "paper"); + registerToOreDict(ItemUtils.getSimpleStack(Items.ender_pearl), "enderpearl"); + registerToOreDict(ItemUtils.getSimpleStack(Items.bone), "bone"); + registerToOreDict(ItemUtils.getSimpleStack(Items.gunpowder), "gunpowder"); + registerToOreDict(ItemUtils.getSimpleStack(Items.string), "string"); + registerToOreDict(ItemUtils.getSimpleStack(Items.nether_star), "netherStar"); + registerToOreDict(ItemUtils.getSimpleStack(Items.leather), "leather"); + registerToOreDict(ItemUtils.getSimpleStack(Items.feather), "feather"); + registerToOreDict(ItemUtils.getSimpleStack(Items.egg), "egg"); + registerToOreDict(ItemUtils.getSimpleStack(Blocks.end_stone), "endstone"); + registerToOreDict(ItemUtils.getSimpleStack(Blocks.vine), "vine"); + registerToOreDict(ItemUtils.getSimpleStack(Blocks.cactus), "blockCactus"); + registerToOreDict(ItemUtils.getSimpleStack(Blocks.grass), "grass"); + registerToOreDict(ItemUtils.getSimpleStack(Blocks.obsidian), "obsidian"); + registerToOreDict(ItemUtils.getSimpleStack(Blocks.crafting_table), "workbench"); + return true; + } + + private void registerToOreDict(ItemStack aStack, String aString) { + if (aStack.getItem() == Items.blaze_rod) { + mInstance + .log("Registering " + aStack.getDisplayName() + " to OreDictionary under the tag '" + aString + "'."); + } else { + mInstance.log( + "Registering " + aStack.getDisplayName() + + " to OreDictionary under the tag '" + + aString + + "'. (Added to Forge in 1.8.9)"); + } + ItemUtils.addItemToOreDictionary(aStack, aString); + } +} diff --git a/src/main/java/gtPlusPlus/plugin/fixes/vanilla/music/MusicTocker.java b/src/main/java/gtPlusPlus/plugin/fixes/vanilla/music/MusicTocker.java index c669f93f62..b0e0474bdd 100644 --- a/src/main/java/gtPlusPlus/plugin/fixes/vanilla/music/MusicTocker.java +++ b/src/main/java/gtPlusPlus/plugin/fixes/vanilla/music/MusicTocker.java @@ -15,7 +15,7 @@ import gregtech.api.objects.XSTR; import gtPlusPlus.api.interfaces.IPlugin; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.preloader.PreloaderCore; @SideOnly(Side.CLIENT) public class MusicTocker extends MusicTicker implements Runnable { @@ -37,7 +37,7 @@ public class MusicTocker extends MusicTicker implements Runnable { } private static int getDelay() { - return CORE_Preloader.enableWatchdogBGM; + return PreloaderCore.enableWatchdogBGM; } private boolean inject() { diff --git a/src/main/java/gtPlusPlus/plugin/manager/CoreManager.java b/src/main/java/gtPlusPlus/plugin/manager/CoreManager.java new file mode 100644 index 0000000000..d547ace5cb --- /dev/null +++ b/src/main/java/gtPlusPlus/plugin/manager/CoreManager.java @@ -0,0 +1,94 @@ +package gtPlusPlus.plugin.manager; + +import gtPlusPlus.api.interfaces.IPlugin; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.core.util.reflect.ReflectionUtils; + +public class CoreManager { + + public static AutoMap mPlugins = new AutoMap<>(); + + /** + * @param plugin - Dynamically registers the plugin for loading. + */ + public static void registerPlugin(IPlugin plugin) { + Logger.INFO("[Plugin] " + "Registered " + plugin.getPluginName() + "."); + mPlugins.put(plugin); + } + + /** + * Dynamically loads all class objects within the "gtPlusPlus.plugin" package. + */ + public static void veryEarlyInit() { + if (ReflectionUtils.dynamicallyLoadClassesInPackage("gtPlusPlus.plugin")) { + Logger.INFO("[Plugin] Plugin System loaded."); + } + } + + public static boolean preInit() { + try { + for (IPlugin h : mPlugins) { + if (h.preInit()) { + Logger.INFO("[Plugin] Completed Pre-Init Phase for " + h.getPluginName() + "."); + } else { + Logger.INFO("[Plugin] Failed during Pre-Init Phase for " + h.getPluginName() + "."); + } + } + return true; + } catch (Throwable ignored) {} + return false; + } + + public static boolean init() { + try { + for (IPlugin h : mPlugins) { + if (h.init()) { + Logger.INFO("[Plugin] Completed Init Phase for " + h.getPluginName() + "."); + } else { + Logger.INFO("[Plugin] Failed during Init Phase for " + h.getPluginName() + "."); + } + } + return true; + } catch (Throwable ignored) {} + return false; + } + + public static boolean postInit() { + try { + for (IPlugin h : mPlugins) { + if (h.postInit()) { + Logger.INFO("[Plugin] Completed Post-Init Phase for " + h.getPluginName() + "."); + } else { + Logger.INFO("[Plugin] Failed during Post-Init Phase for " + h.getPluginName() + "."); + } + } + return true; + } catch (Throwable ignored) {} + return false; + } + + public static void serverStart() { + try { + for (IPlugin h : mPlugins) { + if (h.serverStart()) { + Logger.INFO("[Plugin] Completed Server Start Phase for " + h.getPluginName() + "."); + } else { + Logger.INFO("[Plugin] Failed during Server Start Phase for " + h.getPluginName() + "."); + } + } + } catch (Throwable ignored) {} + } + + public static void serverStop() { + try { + for (IPlugin h : mPlugins) { + if (h.serverStop()) { + Logger.INFO("[Plugin] Completed Server Stop Phase for " + h.getPluginName() + "."); + } else { + Logger.INFO("[Plugin] Failed during Server Stop Phase for " + h.getPluginName() + "."); + } + } + } catch (Throwable ignored) {} + } +} diff --git a/src/main/java/gtPlusPlus/plugin/manager/Core_Manager.java b/src/main/java/gtPlusPlus/plugin/manager/Core_Manager.java deleted file mode 100644 index be1dafd231..0000000000 --- a/src/main/java/gtPlusPlus/plugin/manager/Core_Manager.java +++ /dev/null @@ -1,94 +0,0 @@ -package gtPlusPlus.plugin.manager; - -import gtPlusPlus.api.interfaces.IPlugin; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.core.util.reflect.ReflectionUtils; - -public class Core_Manager { - - public static AutoMap mPlugins = new AutoMap<>(); - - /** - * @param plugin - Dynamically registers the plugin for loading. - */ - public static void registerPlugin(IPlugin plugin) { - Logger.INFO("[Plugin] " + "Registered " + plugin.getPluginName() + "."); - mPlugins.put(plugin); - } - - /** - * Dynamically loads all class objects within the "gtPlusPlus.plugin" package. - */ - public static void veryEarlyInit() { - if (ReflectionUtils.dynamicallyLoadClassesInPackage("gtPlusPlus.plugin")) { - Logger.INFO("[Plugin] Plugin System loaded."); - } - } - - public static boolean preInit() { - try { - for (IPlugin h : mPlugins) { - if (h.preInit()) { - Logger.INFO("[Plugin] Completed Pre-Init Phase for " + h.getPluginName() + "."); - } else { - Logger.INFO("[Plugin] Failed during Pre-Init Phase for " + h.getPluginName() + "."); - } - } - return true; - } catch (Throwable ignored) {} - return false; - } - - public static boolean init() { - try { - for (IPlugin h : mPlugins) { - if (h.init()) { - Logger.INFO("[Plugin] Completed Init Phase for " + h.getPluginName() + "."); - } else { - Logger.INFO("[Plugin] Failed during Init Phase for " + h.getPluginName() + "."); - } - } - return true; - } catch (Throwable ignored) {} - return false; - } - - public static boolean postInit() { - try { - for (IPlugin h : mPlugins) { - if (h.postInit()) { - Logger.INFO("[Plugin] Completed Post-Init Phase for " + h.getPluginName() + "."); - } else { - Logger.INFO("[Plugin] Failed during Post-Init Phase for " + h.getPluginName() + "."); - } - } - return true; - } catch (Throwable ignored) {} - return false; - } - - public static void serverStart() { - try { - for (IPlugin h : mPlugins) { - if (h.serverStart()) { - Logger.INFO("[Plugin] Completed Server Start Phase for " + h.getPluginName() + "."); - } else { - Logger.INFO("[Plugin] Failed during Server Start Phase for " + h.getPluginName() + "."); - } - } - } catch (Throwable ignored) {} - } - - public static void serverStop() { - try { - for (IPlugin h : mPlugins) { - if (h.serverStop()) { - Logger.INFO("[Plugin] Completed Server Stop Phase for " + h.getPluginName() + "."); - } else { - Logger.INFO("[Plugin] Failed during Server Stop Phase for " + h.getPluginName() + "."); - } - } - } catch (Throwable ignored) {} - } -} diff --git a/src/main/java/gtPlusPlus/preloader/CORE_Preloader.java b/src/main/java/gtPlusPlus/preloader/CORE_Preloader.java deleted file mode 100644 index 146c92764b..0000000000 --- a/src/main/java/gtPlusPlus/preloader/CORE_Preloader.java +++ /dev/null @@ -1,33 +0,0 @@ -package gtPlusPlus.preloader; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import cpw.mods.fml.common.versioning.ArtifactVersion; - -public class CORE_Preloader { - - public static final String NAME = "GT++ Preloader"; - public static final String MODID = "GT++_Preloader"; - public static final String VERSION = "0.5-Beta"; - public static final List DEPENDENCIES; - public static final String JAVA_VERSION = System.getProperty("java.version"); - - public static File MC_DIR; - public static boolean DEV_ENVIRONMENT = false; - public static boolean DEBUG_MODE = false; - public static boolean enableOldGTcircuits = false; - public static int enableWatchdogBGM = 0; - - public static void setMinecraftDirectory(File aDir) { - MC_DIR = aDir; - } - - static { - ArrayList deps = new ArrayList<>(); - // deps.add("required-before:gregtech;"); - DEPENDENCIES = Collections.unmodifiableList(deps); - } -} diff --git a/src/main/java/gtPlusPlus/preloader/PreloaderCore.java b/src/main/java/gtPlusPlus/preloader/PreloaderCore.java new file mode 100644 index 0000000000..cabee48bc9 --- /dev/null +++ b/src/main/java/gtPlusPlus/preloader/PreloaderCore.java @@ -0,0 +1,33 @@ +package gtPlusPlus.preloader; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import cpw.mods.fml.common.versioning.ArtifactVersion; + +public class PreloaderCore { + + public static final String NAME = "GT++ Preloader"; + public static final String MODID = "GT++_Preloader"; + public static final String VERSION = "0.5-Beta"; + public static final List DEPENDENCIES; + public static final String JAVA_VERSION = System.getProperty("java.version"); + + public static File MC_DIR; + public static boolean DEV_ENVIRONMENT = false; + public static boolean DEBUG_MODE = false; + public static boolean enableOldGTcircuits = false; + public static int enableWatchdogBGM = 0; + + public static void setMinecraftDirectory(File aDir) { + MC_DIR = aDir; + } + + static { + ArrayList deps = new ArrayList<>(); + // deps.add("required-before:gregtech;"); + DEPENDENCIES = Collections.unmodifiableList(deps); + } +} diff --git a/src/main/java/gtPlusPlus/preloader/PreloaderGTOreDict.java b/src/main/java/gtPlusPlus/preloader/PreloaderGTOreDict.java new file mode 100644 index 0000000000..be5fc10090 --- /dev/null +++ b/src/main/java/gtPlusPlus/preloader/PreloaderGTOreDict.java @@ -0,0 +1,97 @@ +package gtPlusPlus.preloader; + +import static gregtech.api.enums.Mods.GregTech; + +import net.minecraft.item.ItemStack; + +import org.apache.logging.log4j.Level; + +import cpw.mods.fml.relauncher.FMLRelaunchLog; +import gregtech.common.items.MetaGeneratedItem01; +import gregtech.common.items.MetaGeneratedItem03; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class PreloaderGTOreDict { + + public static boolean shouldPreventRegistration(final String string, final ItemStack bannedItem) { + + if (bannedItem == null) { + return false; + } else if (!PreloaderCore.enableOldGTcircuits) { + return false; + } + + try { + if (PreloaderCore.enableOldGTcircuits) { + if ((bannedItem != null) && ItemUtils.getModId(bannedItem) + .toLowerCase() + .equals(GregTech.ID)) { + final int damageValue = bannedItem.getItemDamage() - 32000; + if (bannedItem.getItem() instanceof MetaGeneratedItem01) { // 700-720 + if ((damageValue >= 700) && (damageValue <= 720)) { + return true; + } + } else if (bannedItem.getItem() instanceof MetaGeneratedItem03) { + if ((damageValue == 6) || (damageValue == 7) + || (damageValue == 11) + || (damageValue == 12) + || (damageValue == 14) + || (damageValue == 16) + || (damageValue == 20) + || (damageValue == 21) + || (damageValue == 22)) { + return true; + } else if ((damageValue >= 30) && (damageValue <= 57)) { + return true; + } else if ((damageValue >= 69) && (damageValue <= 73)) { + return true; + } else if ((damageValue >= 78) && (damageValue <= 96)) { + return true; + } + } + } + } + + } catch (final Throwable e) { + if (GTPPCore.ConfigSwitches.showHiddenNEIItems) { + FMLRelaunchLog.log( + "[GT++ ASM] OreDictTransformer", + Level.INFO, + "A mod tried to register an invalid item with the OreDictionary."); + if (bannedItem != null) { + FMLRelaunchLog.log( + "[GT++ ASM] OreDictTransformer", + Level.INFO, + "Please report this issue to the authors of %s", + ItemUtils.getModId(bannedItem)); + try { + if (bannedItem.getItemDamage() <= Short.MAX_VALUE - 1) { + FMLRelaunchLog.log( + "[GT++ ASM] OreDictTransformer", + Level.INFO, + "Item was not null, but still invalidly registering: %s", + bannedItem.getDisplayName() != null ? bannedItem.getDisplayName() + : "INVALID ITEM FOUND"); + } else { + FMLRelaunchLog.log( + "[GT++ ASM] OreDictTransformer", + Level.INFO, + "Item was not null, but still invalidly registering: %s", + "Found Wildcard item that is being registered too early."); + } + } catch (Exception h) { + h.printStackTrace(); + } + } + } + // FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "%s", e.getMessage()); + } + return false; + } + + // Simplification of Life. + private static boolean isInstanceOf(final Class clazz, final Object obj) { + return clazz.isInstance(obj); + } +} diff --git a/src/main/java/gtPlusPlus/preloader/PreloaderLogger.java b/src/main/java/gtPlusPlus/preloader/PreloaderLogger.java new file mode 100644 index 0000000000..e5f193a3fd --- /dev/null +++ b/src/main/java/gtPlusPlus/preloader/PreloaderLogger.java @@ -0,0 +1,50 @@ +package gtPlusPlus.preloader; + +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class PreloaderLogger { + + private PreloaderLogger() {} + + // Logging Functions + public static final Logger MODLOGGER = LogManager.getLogger("GT++ ASM"); + + public static Logger getLogger() { + return MODLOGGER; + } + + // Non-Dev Comments + + public static void INFO(final String s, final String s2) { + INFO(s); + INFO(s2); + } + + public static void INFO(final String s) { + MODLOGGER.info(s); + } + + // Developer Comments + public static void WARNING(final String s) { + MODLOGGER.warn(s); + } + + // Errors + public static void ERROR(final String s) { + MODLOGGER.fatal(s); + } + + public static void LOG(String string, Level info, String string2) { + if (info.equals(Level.INFO)) { + INFO("[" + string + "] " + string2); + } + if (info.equals(Level.WARN)) { + WARNING("[" + string + "] " + string2); + } + if (info.equals(Level.ERROR)) { + ERROR("[" + string + "] " + string2); + } + } +} diff --git a/src/main/java/gtPlusPlus/preloader/Preloader_GT_OreDict.java b/src/main/java/gtPlusPlus/preloader/Preloader_GT_OreDict.java deleted file mode 100644 index 9a350ab5e4..0000000000 --- a/src/main/java/gtPlusPlus/preloader/Preloader_GT_OreDict.java +++ /dev/null @@ -1,103 +0,0 @@ -package gtPlusPlus.preloader; - -import static gregtech.api.enums.Mods.GregTech; - -import net.minecraft.item.ItemStack; - -import org.apache.logging.log4j.Level; - -import cpw.mods.fml.relauncher.FMLRelaunchLog; -import gregtech.common.items.GT_MetaGenerated_Item_01; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; - -public class Preloader_GT_OreDict { - - public static boolean shouldPreventRegistration(final String string, final ItemStack bannedItem) { - - if (bannedItem == null) { - return false; - } else if (!CORE_Preloader.enableOldGTcircuits) { - return false; - } - - try { - if (CORE_Preloader.enableOldGTcircuits) { - if ((bannedItem != null) && ItemUtils.getModId(bannedItem) - .toLowerCase() - .equals(GregTech.ID)) { - final int damageValue = bannedItem.getItemDamage() - 32000; - if (bannedItem.getItem() instanceof GT_MetaGenerated_Item_01) { // 700-720 - if ((damageValue >= 700) && (damageValue <= 720)) { - return true; - } - } else { - if (ReflectionUtils.doesClassExist("gregtech.common.items.GT_MetaGenerated_Item_03")) { // 6/11/12/14/16/20/30-57/69-73/79-96 - final Class MetaItem03 = ReflectionUtils - .getClass("gregtech.common.items.GT_MetaGenerated_Item_03"); - if (isInstanceOf(MetaItem03, bannedItem.getItem())) { - if ((damageValue == 6) || (damageValue == 7) - || (damageValue == 11) - || (damageValue == 12) - || (damageValue == 14) - || (damageValue == 16) - || (damageValue == 20) - || (damageValue == 21) - || (damageValue == 22)) { - return true; - } else if ((damageValue >= 30) && (damageValue <= 57)) { - return true; - } else if ((damageValue >= 69) && (damageValue <= 73)) { - return true; - } else if ((damageValue >= 78) && (damageValue <= 96)) { - return true; - } - } - } - } - } - } - - } catch (final Throwable e) { - if (CORE.ConfigSwitches.showHiddenNEIItems) { - FMLRelaunchLog.log( - "[GT++ ASM] OreDictTransformer", - Level.INFO, - "A mod tried to register an invalid item with the OreDictionary."); - if (bannedItem != null) { - FMLRelaunchLog.log( - "[GT++ ASM] OreDictTransformer", - Level.INFO, - "Please report this issue to the authors of %s", - ItemUtils.getModId(bannedItem)); - try { - if (bannedItem.getItemDamage() <= Short.MAX_VALUE - 1) { - FMLRelaunchLog.log( - "[GT++ ASM] OreDictTransformer", - Level.INFO, - "Item was not null, but still invalidly registering: %s", - bannedItem.getDisplayName() != null ? bannedItem.getDisplayName() - : "INVALID ITEM FOUND"); - } else { - FMLRelaunchLog.log( - "[GT++ ASM] OreDictTransformer", - Level.INFO, - "Item was not null, but still invalidly registering: %s", - "Found Wildcard item that is being registered too early."); - } - } catch (Exception h) { - h.printStackTrace(); - } - } - } - // FMLRelaunchLog.log("[GT++ ASM] OreDictTransformer", Level.INFO, "%s", e.getMessage()); - } - return false; - } - - // Simplification of Life. - private static boolean isInstanceOf(final Class clazz, final Object obj) { - return clazz.isInstance(obj); - } -} diff --git a/src/main/java/gtPlusPlus/preloader/Preloader_Logger.java b/src/main/java/gtPlusPlus/preloader/Preloader_Logger.java deleted file mode 100644 index 477e1371e3..0000000000 --- a/src/main/java/gtPlusPlus/preloader/Preloader_Logger.java +++ /dev/null @@ -1,50 +0,0 @@ -package gtPlusPlus.preloader; - -import org.apache.logging.log4j.Level; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -public class Preloader_Logger { - - private Preloader_Logger() {} - - // Logging Functions - public static final Logger MODLOGGER = LogManager.getLogger("GT++ ASM"); - - public static Logger getLogger() { - return MODLOGGER; - } - - // Non-Dev Comments - - public static void INFO(final String s, final String s2) { - INFO(s); - INFO(s2); - } - - public static void INFO(final String s) { - MODLOGGER.info(s); - } - - // Developer Comments - public static void WARNING(final String s) { - MODLOGGER.warn(s); - } - - // Errors - public static void ERROR(final String s) { - MODLOGGER.fatal(s); - } - - public static void LOG(String string, Level info, String string2) { - if (info.equals(Level.INFO)) { - INFO("[" + string + "] " + string2); - } - if (info.equals(Level.WARN)) { - WARNING("[" + string + "] " + string2); - } - if (info.equals(Level.ERROR)) { - ERROR("[" + string + "] " + string2); - } - } -} diff --git a/src/main/java/gtPlusPlus/preloader/asm/AsmConfig.java b/src/main/java/gtPlusPlus/preloader/asm/AsmConfig.java index b4a49c275c..5fa903906a 100644 --- a/src/main/java/gtPlusPlus/preloader/asm/AsmConfig.java +++ b/src/main/java/gtPlusPlus/preloader/asm/AsmConfig.java @@ -9,7 +9,7 @@ import net.minecraftforge.common.config.Property; import org.apache.logging.log4j.Level; import cpw.mods.fml.common.FMLLog; -import gtPlusPlus.preloader.Preloader_Logger; +import gtPlusPlus.preloader.PreloaderLogger; public class AsmConfig { @@ -130,11 +130,11 @@ public class AsmConfig { config.save(); } - Preloader_Logger.INFO("Gt Nbt Fix - Enabled: " + enableGtNbtFix); - Preloader_Logger.INFO("Gt Tooltip Fix - Enabled: " + enableGtTooltipFix); - Preloader_Logger.INFO("COFH Patch - Enabled: " + enableCofhPatch); - Preloader_Logger.INFO("Thaumcraft Aspect Safety Patch - Enabled: " + enableTcAspectSafety); - Preloader_Logger + PreloaderLogger.INFO("Gt Nbt Fix - Enabled: " + enableGtNbtFix); + PreloaderLogger.INFO("Gt Tooltip Fix - Enabled: " + enableGtTooltipFix); + PreloaderLogger.INFO("COFH Patch - Enabled: " + enableCofhPatch); + PreloaderLogger.INFO("Thaumcraft Aspect Safety Patch - Enabled: " + enableTcAspectSafety); + PreloaderLogger .INFO("Fix bad usage of EntityLivingBase.setHealth Patch - Enabled: " + enabledFixEntitySetHealth); } catch (Exception var3) { diff --git a/src/main/java/gtPlusPlus/preloader/asm/PreloaderDummyContainer.java b/src/main/java/gtPlusPlus/preloader/asm/PreloaderDummyContainer.java new file mode 100644 index 0000000000..8e0684e53f --- /dev/null +++ b/src/main/java/gtPlusPlus/preloader/asm/PreloaderDummyContainer.java @@ -0,0 +1,70 @@ +package gtPlusPlus.preloader.asm; + +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.enums.Mods.GregTech; + +import java.io.File; +import java.util.Collections; + +import net.minecraftforge.common.config.Configuration; + +import com.google.common.eventbus.EventBus; +import com.google.common.eventbus.Subscribe; + +import cpw.mods.fml.common.DummyModContainer; +import cpw.mods.fml.common.LoadController; +import cpw.mods.fml.common.ModMetadata; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import gtPlusPlus.preloader.PreloaderCore; +import gtPlusPlus.preloader.PreloaderLogger; + +public class PreloaderDummyContainer extends DummyModContainer { + + public PreloaderDummyContainer() { + super(new ModMetadata()); + ModMetadata meta = getMetadata(); + meta.modId = PreloaderCore.MODID; + meta.name = PreloaderCore.NAME; + meta.version = PreloaderCore.VERSION; + meta.credits = "Roll Credits ..."; + meta.authorList = Collections.singletonList("Alkalus"); + meta.screenshots = new String[0]; + meta.parent = GTPlusPlus.ID; + } + + @Override + public boolean registerBus(EventBus bus, LoadController controller) { + bus.register(this); + return true; + } + + @Subscribe + public void preInit(FMLPreInitializationEvent event) { + PreloaderLogger.INFO("Loading " + PreloaderCore.MODID + " V" + PreloaderCore.VERSION); + // Handle GT++ Config + handleConfigFile(event); + } + + public static void handleConfigFile(final FMLPreInitializationEvent event) { + final Configuration config = new Configuration( + new File(event.getModConfigurationDirectory(), "GTplusplus/GTplusplus.cfg")); + config.load(); + + // BGM Watchdog + PreloaderCore.enableWatchdogBGM = config.getInt( + "enableWatchdogBGM", + "features", + 0, + 0, + Short.MAX_VALUE, + "Set to a value greater than 0 to reduce the ticks taken to delay between BGM tracks. Acceptable Values are 1-32767, where 0 is disabled. Vanilla Uses 12,000 & 24,000. 200 is 10s."); + + // Circuits + PreloaderCore.enableOldGTcircuits = config.getBoolean( + "enableOldGTcircuits", + GregTech.ID, + false, + "Restores circuits and their recipes from Pre-5.09.28 times."); + } + +} diff --git a/src/main/java/gtPlusPlus/preloader/asm/Preloader_DummyContainer.java b/src/main/java/gtPlusPlus/preloader/asm/Preloader_DummyContainer.java deleted file mode 100644 index c77f570a8d..0000000000 --- a/src/main/java/gtPlusPlus/preloader/asm/Preloader_DummyContainer.java +++ /dev/null @@ -1,70 +0,0 @@ -package gtPlusPlus.preloader.asm; - -import static gregtech.api.enums.Mods.GTPlusPlus; -import static gregtech.api.enums.Mods.GregTech; - -import java.io.File; -import java.util.Collections; - -import net.minecraftforge.common.config.Configuration; - -import com.google.common.eventbus.EventBus; -import com.google.common.eventbus.Subscribe; - -import cpw.mods.fml.common.DummyModContainer; -import cpw.mods.fml.common.LoadController; -import cpw.mods.fml.common.ModMetadata; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import gtPlusPlus.preloader.CORE_Preloader; -import gtPlusPlus.preloader.Preloader_Logger; - -public class Preloader_DummyContainer extends DummyModContainer { - - public Preloader_DummyContainer() { - super(new ModMetadata()); - ModMetadata meta = getMetadata(); - meta.modId = CORE_Preloader.MODID; - meta.name = CORE_Preloader.NAME; - meta.version = CORE_Preloader.VERSION; - meta.credits = "Roll Credits ..."; - meta.authorList = Collections.singletonList("Alkalus"); - meta.screenshots = new String[0]; - meta.parent = GTPlusPlus.ID; - } - - @Override - public boolean registerBus(EventBus bus, LoadController controller) { - bus.register(this); - return true; - } - - @Subscribe - public void preInit(FMLPreInitializationEvent event) { - Preloader_Logger.INFO("Loading " + CORE_Preloader.MODID + " V" + CORE_Preloader.VERSION); - // Handle GT++ Config - handleConfigFile(event); - } - - public static void handleConfigFile(final FMLPreInitializationEvent event) { - final Configuration config = new Configuration( - new File(event.getModConfigurationDirectory(), "GTplusplus/GTplusplus.cfg")); - config.load(); - - // BGM Watchdog - CORE_Preloader.enableWatchdogBGM = config.getInt( - "enableWatchdogBGM", - "features", - 0, - 0, - Short.MAX_VALUE, - "Set to a value greater than 0 to reduce the ticks taken to delay between BGM tracks. Acceptable Values are 1-32767, where 0 is disabled. Vanilla Uses 12,000 & 24,000. 200 is 10s."); - - // Circuits - CORE_Preloader.enableOldGTcircuits = config.getBoolean( - "enableOldGTcircuits", - GregTech.ID, - false, - "Restores circuits and their recipes from Pre-5.09.28 times."); - } - -} diff --git a/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer.java b/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer.java index 82526b1290..89554db7a1 100644 --- a/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer.java +++ b/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_ClassTransformer.java @@ -56,7 +56,7 @@ public class Preloader_ClassTransformer { .log("[GT++ ASM] OreDictTransformer", Level.INFO, "Injecting target method. [Unobfuscated]"); super.visitMethodInsn( INVOKESTATIC, - "gtPlusPlus/preloader/Preloader_GT_OreDict", + "gtPlusPlus/preloader/PreloaderGTOreDict", "shouldPreventRegistration", "(Ljava/lang/String;Lnet/minecraft/item/ItemStack;)Z", false); @@ -65,7 +65,7 @@ public class Preloader_ClassTransformer { .log("[GT++ ASM] OreDictTransformer", Level.INFO, "Injecting target method. [Obfuscated]"); super.visitMethodInsn( INVOKESTATIC, - "gtPlusPlus/preloader/Preloader_GT_OreDict", + "gtPlusPlus/preloader/PreloaderGTOreDict", "shouldPreventRegistration", "(Ljava/lang/String;Ladd;)Z", false); diff --git a/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java b/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java index 922ce88e27..06372740e4 100644 --- a/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java +++ b/src/main/java/gtPlusPlus/preloader/asm/transformers/Preloader_Transformer_Handler.java @@ -9,8 +9,8 @@ import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassWriter; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.CORE_Preloader; -import gtPlusPlus.preloader.Preloader_Logger; +import gtPlusPlus.preloader.PreloaderCore; +import gtPlusPlus.preloader.PreloaderLogger; import gtPlusPlus.preloader.asm.AsmConfig; import gtPlusPlus.preloader.asm.transformers.Preloader_ClassTransformer.OreDictionaryVisitor; @@ -51,14 +51,14 @@ public class Preloader_Transformer_Handler implements IClassTransformer { // Do not transform if using lwjgl3 && !ReflectionUtils.doesClassExist("org.lwjgl.system.Platform")) { boolean isClientSettingsClass = !transformedName.equals("org.lwjgl.input.Keyboard"); - Preloader_Logger.INFO("LWJGL Keybinding index out of bounds fix", "Transforming " + transformedName); + PreloaderLogger.INFO("LWJGL Keybinding index out of bounds fix", "Transforming " + transformedName); return new ClassTransformer_LWJGL_Keyboard(basicClass, isClientSettingsClass).getWriter() .toByteArray(); } // Fix the OreDictionary - Forge if (transformedName.equals(FORGE_ORE_DICTIONARY) && AsmConfig.enableOreDictPatch) { - Preloader_Logger.INFO("OreDictTransformer", "Transforming " + transformedName); + PreloaderLogger.INFO("OreDictTransformer", "Transforming " + transformedName); ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_FRAMES); new ClassReader(basicClass).accept(new OreDictionaryVisitor(classWriter), 0); return classWriter.toByteArray(); @@ -66,15 +66,15 @@ public class Preloader_Transformer_Handler implements IClassTransformer { // Fix the OreDictionary COFH if (transformedName.equals(COFH_ORE_DICTIONARY_ARBITER) - && (AsmConfig.enableCofhPatch || CORE_Preloader.DEV_ENVIRONMENT)) { - Preloader_Logger.INFO("COFH", "Transforming " + transformedName); + && (AsmConfig.enableCofhPatch || PreloaderCore.DEV_ENVIRONMENT)) { + PreloaderLogger.INFO("COFH", "Transforming " + transformedName); return new ClassTransformer_COFH_OreDictionaryArbiter(basicClass).getWriter() .toByteArray(); } if (IC2_WRENCH_PATCH_CLASS_NAMES.contains(transformedName)) { - Preloader_Logger.INFO("IC2 getHarvestTool Patch", "Transforming " + transformedName); - return new ClassTransformer_IC2_GetHarvestTool(basicClass, !CORE_Preloader.DEV_ENVIRONMENT, transformedName) + PreloaderLogger.INFO("IC2 getHarvestTool Patch", "Transforming " + transformedName); + return new ClassTransformer_IC2_GetHarvestTool(basicClass, !PreloaderCore.DEV_ENVIRONMENT, transformedName) .getWriter() .toByteArray(); } @@ -82,8 +82,8 @@ public class Preloader_Transformer_Handler implements IClassTransformer { // Fix Thaumcraft stuff // Patching ItemWispEssence to allow invalid item handling if (transformedName.equals(THAUMCRAFT_ITEM_WISP_ESSENCE) && AsmConfig.enableTcAspectSafety) { - Preloader_Logger.INFO("Thaumcraft WispEssence_Patch", "Transforming " + transformedName); - return new ClassTransformer_TC_ItemWispEssence(basicClass, !CORE_Preloader.DEV_ENVIRONMENT).getWriter() + PreloaderLogger.INFO("Thaumcraft WispEssence_Patch", "Transforming " + transformedName); + return new ClassTransformer_TC_ItemWispEssence(basicClass, !PreloaderCore.DEV_ENVIRONMENT).getWriter() .toByteArray(); } diff --git a/src/main/java/gtPlusPlus/recipes/CokeAndPyrolyseOven.java b/src/main/java/gtPlusPlus/recipes/CokeAndPyrolyseOven.java index 32d4ab55cf..8dd97eb4be 100644 --- a/src/main/java/gtPlusPlus/recipes/CokeAndPyrolyseOven.java +++ b/src/main/java/gtPlusPlus/recipes/CokeAndPyrolyseOven.java @@ -1,8 +1,8 @@ package gtPlusPlus.recipes; import static gregtech.api.recipe.RecipeMaps.pyrolyseRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.cokeOvenRecipes; import java.util.ArrayList; @@ -10,15 +10,15 @@ import java.util.ArrayList; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; import gregtech.api.recipe.RecipeMaps; -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.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -36,10 +36,10 @@ public class CokeAndPyrolyseOven { // Try use all woods found ArrayList aLogData = OreDictionary.getOres("logWood"); for (ItemStack stack : aLogData) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(20), ItemUtils.getSimpleStack(stack, 20)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 24L)) - .fluidInputs(GT_ModHandler.getSteam(1000)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(20), ItemUtils.getSimpleStack(stack, 20)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.gem, Materials.Charcoal, 24L)) + .fluidInputs(GTModHandler.getSteam(1000)) .fluidOutputs(FluidUtils.getFluidStack("fluid.coalgas", 1440)) .duration(72 * SECONDS) .eut(TierEU.RECIPE_LV) @@ -47,24 +47,24 @@ public class CokeAndPyrolyseOven { } // Coal to Coke - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(22), - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 16L)) + GTUtility.getIntegratedCircuit(22), + GTOreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 16L)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("fuelCoke", 10)) - .fluidInputs(GT_ModHandler.getSteam(1000)) + .fluidInputs(GTModHandler.getSteam(1000)) .fluidOutputs(FluidUtils.getFluidStack("fluid.coalgas", 2880)) .duration(36 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(pyrolyseRecipes); // Coke & Coal - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 12L), + GTOreDictUnificator.get(OrePrefixes.gem, Materials.Coal, 12L), ItemUtils.getItemStackOfAmountFromOreDict("fuelCoke", 6)) .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("fuelCoke", 14)) - .fluidInputs(GT_ModHandler.getSteam(2000)) + .fluidInputs(GTModHandler.getSteam(2000)) .fluidOutputs(FluidUtils.getFluidStack("fluid.coalgas", 5040)) .eut(240) .duration(1 * MINUTES) @@ -73,7 +73,7 @@ public class CokeAndPyrolyseOven { private static void convertPyroToCokeOven() { int aCount = 0; - for (GT_Recipe g : RecipeMaps.pyrolyseRecipes.getAllRecipes()) { + for (GTRecipe g : RecipeMaps.pyrolyseRecipes.getAllRecipes()) { if (AddGregtechRecipe.importPyroRecipe(g.copy())) { aCount++; } diff --git a/src/main/java/gtPlusPlus/recipes/RecipeRemovals.java b/src/main/java/gtPlusPlus/recipes/RecipeRemovals.java index 4462f81fc7..4ccde441b3 100644 --- a/src/main/java/gtPlusPlus/recipes/RecipeRemovals.java +++ b/src/main/java/gtPlusPlus/recipes/RecipeRemovals.java @@ -12,12 +12,12 @@ import org.apache.commons.lang3.ArrayUtils; import advsolar.common.AdvancedSolarPanel; import gregtech.api.enums.Materials; import gregtech.api.enums.Mods; -import gregtech.api.items.GT_MetaGenerated_Tool; +import gregtech.api.items.MetaGeneratedTool; import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Recipe; -import gregtech.common.items.GT_MetaGenerated_Tool_01; +import gregtech.api.util.GTRecipe; +import gregtech.common.items.MetaGeneratedTool01; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.minecraft.RecipeUtils; @@ -36,12 +36,12 @@ public class RecipeRemovals { // Doesn't actually remove recipes, just hide them private static void removeCrudeTurbineRotors() { int aRemoved = 0; - int CUT = CORE.turbineCutoffBase; + int CUT = GTPPCore.turbineCutoffBase; Item aU; - Collection aAssRecipes = RecipeMaps.assemblerRecipes.getAllRecipes(); + Collection aAssRecipes = RecipeMaps.assemblerRecipes.getAllRecipes(); // 170, 172, 174, 176 if (aAssRecipes.size() > 0) { - for (GT_Recipe aG : aAssRecipes) { + for (GTRecipe aG : aAssRecipes) { if (ArrayUtils.isNotEmpty(aG.mOutputs)) { for (ItemStack aI : aG.mOutputs) { if (aI == null) { @@ -51,7 +51,7 @@ public class RecipeRemovals { if (aU == null) { continue; } - if (aU instanceof GT_MetaGenerated_Tool_01) { + if (aU instanceof MetaGeneratedTool01) { int aMeta = aI.getItemDamage(); // Found a Turbine if (aMeta >= 170 && aMeta <= 176) { @@ -75,9 +75,9 @@ public class RecipeRemovals { aType = "Huge "; } } - Materials aMainMaterial = GT_MetaGenerated_Tool.getPrimaryMaterial(aI); - Materials aSecondaryMaterial = GT_MetaGenerated_Tool.getSecondaryMaterial(aI); - long rotorDurabilityMax = GT_MetaGenerated_Tool.getToolMaxDamage(aI); + Materials aMainMaterial = MetaGeneratedTool.getPrimaryMaterial(aI); + Materials aSecondaryMaterial = MetaGeneratedTool.getSecondaryMaterial(aI); + long rotorDurabilityMax = MetaGeneratedTool.getToolMaxDamage(aI); if (rotorDurabilityMax < aCutoff) { Logger.WARNING( "[Turbine Cleanup] " + getMaterialName(aMainMaterial) diff --git a/src/main/java/gtPlusPlus/xmod/bartcrops/CropsPlusPlusHandler.java b/src/main/java/gtPlusPlus/xmod/bartcrops/CropsPlusPlusHandler.java new file mode 100644 index 0000000000..b5d3316388 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/bartcrops/CropsPlusPlusHandler.java @@ -0,0 +1,16 @@ +package gtPlusPlus.xmod.bartcrops; + +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; + +public class CropsPlusPlusHandler { + + public static void preInit(FMLPreInitializationEvent preinit) { + LoaderOfTheCrops.load(preinit); + } + + public static void postInit(FMLPostInitializationEvent postinit) { + LoaderOfTheCrops.register(); + LoaderOfTheCrops.registerBaseSeed(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/bartcrops/HANDLER_CropsPlusPlus.java b/src/main/java/gtPlusPlus/xmod/bartcrops/HANDLER_CropsPlusPlus.java deleted file mode 100644 index 9ca5488280..0000000000 --- a/src/main/java/gtPlusPlus/xmod/bartcrops/HANDLER_CropsPlusPlus.java +++ /dev/null @@ -1,16 +0,0 @@ -package gtPlusPlus.xmod.bartcrops; - -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; - -public class HANDLER_CropsPlusPlus { - - public static void preInit(FMLPreInitializationEvent preinit) { - LoaderOfTheCrops.load(preinit); - } - - public static void postInit(FMLPostInitializationEvent postinit) { - LoaderOfTheCrops.register(); - LoaderOfTheCrops.registerBaseSeed(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/bartcrops/abstracts/BaseAestheticCrop.java b/src/main/java/gtPlusPlus/xmod/bartcrops/abstracts/BaseAestheticCrop.java index c794c40878..f71a84eaff 100644 --- a/src/main/java/gtPlusPlus/xmod/bartcrops/abstracts/BaseAestheticCrop.java +++ b/src/main/java/gtPlusPlus/xmod/bartcrops/abstracts/BaseAestheticCrop.java @@ -1,6 +1,6 @@ package gtPlusPlus.xmod.bartcrops.abstracts; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.preloader.PreloaderCore; import ic2.api.crops.ICropTile; public abstract class BaseAestheticCrop extends BaseHarvestableCrop { @@ -24,7 +24,7 @@ public abstract class BaseAestheticCrop extends BaseHarvestableCrop { @Override public int growthDuration(ICropTile crop) { - return CORE_Preloader.DEBUG_MODE ? 1 : 225; + return PreloaderCore.DEBUG_MODE ? 1 : 225; } @Override diff --git a/src/main/java/gtPlusPlus/xmod/bartcrops/abstracts/BaseHarvestableCrop.java b/src/main/java/gtPlusPlus/xmod/bartcrops/abstracts/BaseHarvestableCrop.java index 80325edff0..db0a0cb4f1 100644 --- a/src/main/java/gtPlusPlus/xmod/bartcrops/abstracts/BaseHarvestableCrop.java +++ b/src/main/java/gtPlusPlus/xmod/bartcrops/abstracts/BaseHarvestableCrop.java @@ -1,6 +1,6 @@ package gtPlusPlus.xmod.bartcrops.abstracts; -import gtPlusPlus.preloader.CORE_Preloader; +import gtPlusPlus.preloader.PreloaderCore; import ic2.api.crops.ICropTile; public abstract class BaseHarvestableCrop extends BaseCrop { @@ -45,7 +45,7 @@ public abstract class BaseHarvestableCrop extends BaseCrop { @Override public int growthDuration(ICropTile crop) { short r; - if (CORE_Preloader.DEBUG_MODE) { + if (PreloaderCore.DEBUG_MODE) { r = 1; } else if (crop.getSize() == 2) { r = 200; diff --git a/src/main/java/gtPlusPlus/xmod/bartworks/BWUtils.java b/src/main/java/gtPlusPlus/xmod/bartworks/BWUtils.java new file mode 100644 index 0000000000..2802e2f2e4 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/bartworks/BWUtils.java @@ -0,0 +1,16 @@ +package gtPlusPlus.xmod.bartworks; + +import net.minecraft.item.ItemStack; + +import bartworks.system.material.Werkstoff; +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.OrePrefixes; + +public class BWUtils { + + public static ItemStack getCorrespondingItemStack(OrePrefixes orePrefixes, short werkstoffID, int amount) { + Werkstoff werkstoff = Werkstoff.werkstoffHashMap.get(werkstoffID); + if (werkstoff == null) return null; + return WerkstoffLoader.getCorrespondingItemStackUnsafe(orePrefixes, werkstoff, amount); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/bartworks/BW_Utils.java b/src/main/java/gtPlusPlus/xmod/bartworks/BW_Utils.java deleted file mode 100644 index e3fdc9ae0a..0000000000 --- a/src/main/java/gtPlusPlus/xmod/bartworks/BW_Utils.java +++ /dev/null @@ -1,17 +0,0 @@ -package gtPlusPlus.xmod.bartworks; - -import net.minecraft.item.ItemStack; - -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; - -import gregtech.api.enums.OrePrefixes; - -public class BW_Utils { - - public static ItemStack getCorrespondingItemStack(OrePrefixes orePrefixes, short werkstoffID, int amount) { - Werkstoff werkstoff = Werkstoff.werkstoffHashMap.get(werkstoffID); - if (werkstoff == null) return null; - return WerkstoffLoader.getCorrespondingItemStackUnsafe(orePrefixes, werkstoff, amount); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/bop/BiomesOPlentyHandler.java b/src/main/java/gtPlusPlus/xmod/bop/BiomesOPlentyHandler.java new file mode 100644 index 0000000000..b1e97782af --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/bop/BiomesOPlentyHandler.java @@ -0,0 +1,178 @@ +package gtPlusPlus.xmod.bop; + +import static gregtech.api.enums.Mods.BiomesOPlenty; + +import java.lang.reflect.Field; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import gtPlusPlus.xmod.bop.blocks.BOPBlockRegistrator; + +public class BiomesOPlentyHandler { + + public static Item mPineCone; + + public static Block logs1; + public static Block logs2; + public static Block logs3; + public static Block logs4; + + public static Block leaves1; + public static Block leaves2; + public static Block leaves3; + public static Block leaves4; + + public static Block colorizedLeaves1; + public static Block colorizedLeaves2; + + public static Block saplings; + public static Block colorizedSaplings; + + public static void preInit() { + BOPBlockRegistrator.run(); + if (BiomesOPlenty.isModLoaded()) { + setFields(); + registerPineconeToOreDict(); + } + } + + public static void postInit() { + BOPBlockRegistrator.recipes(); + } + + private static void registerPineconeToOreDict() { + if (mPineCone != null) { + ItemStack aPinecone = ItemUtils.simpleMetaStack(mPineCone, 13, 1); + if (aPinecone != null) { + ItemUtils.addItemToOreDictionary(aPinecone, "pinecone"); + } + } + } + + public static ItemStack getStack(Block aBlock, int aMeta, int aSize) { + return ItemUtils.simpleMetaStack(aBlock, aMeta, aSize); + } + + // BOPCBlocks.logs4 - 0 + // BOPCBlocks.colorizedLeaves2 - 1 + + private static void setFields() { + Field aBopMiscItem = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCItems"), "misc"); + + Field aBopBlock1 = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "logs1"); + Field aBopBlock2 = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "logs2"); + Field aBopBlock3 = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "logs3"); + Field aBopBlock4 = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "logs4"); + + Field aBopLeaves1 = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "leaves1"); + Field aBopLeaves2 = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "leaves2"); + Field aBopLeaves3 = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "leaves3"); + Field aBopLeaves4 = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "leaves4"); + + Field aBopColouredLeaves1 = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "colorizedLeaves1"); + Field aBopColouredLeaves2 = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "colorizedLeaves2"); + + Field aBopSapling = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "saplings"); + Field aBopColouredSapling = ReflectionUtils + .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "colorizedSaplings"); + + if (aBopMiscItem != null) { + Item aMiscItem = ReflectionUtils.getFieldValue(aBopMiscItem); + if (aMiscItem != null) { + mPineCone = aMiscItem; + } + } + + if (aBopBlock1 != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopBlock1); + if (aBlock != null) { + logs1 = aBlock; + } + } + if (aBopBlock2 != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopBlock2); + if (aBlock != null) { + logs2 = aBlock; + } + } + if (aBopBlock3 != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopBlock3); + if (aBlock != null) { + logs3 = aBlock; + } + } + if (aBopBlock4 != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopBlock4); + if (aBlock != null) { + logs4 = aBlock; + } + } + + if (aBopLeaves1 != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopLeaves1); + if (aBlock != null) { + leaves1 = aBlock; + } + } + if (aBopLeaves2 != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopLeaves2); + if (aBlock != null) { + leaves2 = aBlock; + } + } + if (aBopLeaves3 != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopLeaves3); + if (aBlock != null) { + leaves3 = aBlock; + } + } + if (aBopLeaves4 != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopLeaves4); + if (aBlock != null) { + leaves4 = aBlock; + } + } + + if (aBopColouredLeaves1 != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopColouredLeaves1); + if (aBlock != null) { + colorizedLeaves1 = aBlock; + } + } + if (aBopColouredLeaves2 != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopColouredLeaves2); + if (aBlock != null) { + colorizedLeaves2 = aBlock; + } + } + + if (aBopSapling != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopSapling); + if (aBlock != null) { + saplings = aBlock; + } + } + if (aBopColouredSapling != null) { + Block aBlock = ReflectionUtils.getFieldValue(aBopColouredSapling); + if (aBlock != null) { + colorizedSaplings = aBlock; + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/bop/HANDLER_BiomesOPlenty.java b/src/main/java/gtPlusPlus/xmod/bop/HANDLER_BiomesOPlenty.java deleted file mode 100644 index 7727eaef38..0000000000 --- a/src/main/java/gtPlusPlus/xmod/bop/HANDLER_BiomesOPlenty.java +++ /dev/null @@ -1,178 +0,0 @@ -package gtPlusPlus.xmod.bop; - -import static gregtech.api.enums.Mods.BiomesOPlenty; - -import java.lang.reflect.Field; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.bop.blocks.BOP_Block_Registrator; - -public class HANDLER_BiomesOPlenty { - - public static Item mPineCone; - - public static Block logs1; - public static Block logs2; - public static Block logs3; - public static Block logs4; - - public static Block leaves1; - public static Block leaves2; - public static Block leaves3; - public static Block leaves4; - - public static Block colorizedLeaves1; - public static Block colorizedLeaves2; - - public static Block saplings; - public static Block colorizedSaplings; - - public static void preInit() { - BOP_Block_Registrator.run(); - if (BiomesOPlenty.isModLoaded()) { - setFields(); - registerPineconeToOreDict(); - } - } - - public static void postInit() { - BOP_Block_Registrator.recipes(); - } - - private static void registerPineconeToOreDict() { - if (mPineCone != null) { - ItemStack aPinecone = ItemUtils.simpleMetaStack(mPineCone, 13, 1); - if (aPinecone != null) { - ItemUtils.addItemToOreDictionary(aPinecone, "pinecone"); - } - } - } - - public static ItemStack getStack(Block aBlock, int aMeta, int aSize) { - return ItemUtils.simpleMetaStack(aBlock, aMeta, aSize); - } - - // BOPCBlocks.logs4 - 0 - // BOPCBlocks.colorizedLeaves2 - 1 - - private static void setFields() { - Field aBopMiscItem = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCItems"), "misc"); - - Field aBopBlock1 = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "logs1"); - Field aBopBlock2 = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "logs2"); - Field aBopBlock3 = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "logs3"); - Field aBopBlock4 = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "logs4"); - - Field aBopLeaves1 = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "leaves1"); - Field aBopLeaves2 = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "leaves2"); - Field aBopLeaves3 = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "leaves3"); - Field aBopLeaves4 = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "leaves4"); - - Field aBopColouredLeaves1 = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "colorizedLeaves1"); - Field aBopColouredLeaves2 = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "colorizedLeaves2"); - - Field aBopSapling = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "saplings"); - Field aBopColouredSapling = ReflectionUtils - .getField(ReflectionUtils.getClass("biomesoplenty.api.content.BOPCBlocks"), "colorizedSaplings"); - - if (aBopMiscItem != null) { - Item aMiscItem = ReflectionUtils.getFieldValue(aBopMiscItem); - if (aMiscItem != null) { - mPineCone = aMiscItem; - } - } - - if (aBopBlock1 != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopBlock1); - if (aBlock != null) { - logs1 = aBlock; - } - } - if (aBopBlock2 != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopBlock2); - if (aBlock != null) { - logs2 = aBlock; - } - } - if (aBopBlock3 != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopBlock3); - if (aBlock != null) { - logs3 = aBlock; - } - } - if (aBopBlock4 != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopBlock4); - if (aBlock != null) { - logs4 = aBlock; - } - } - - if (aBopLeaves1 != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopLeaves1); - if (aBlock != null) { - leaves1 = aBlock; - } - } - if (aBopLeaves2 != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopLeaves2); - if (aBlock != null) { - leaves2 = aBlock; - } - } - if (aBopLeaves3 != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopLeaves3); - if (aBlock != null) { - leaves3 = aBlock; - } - } - if (aBopLeaves4 != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopLeaves4); - if (aBlock != null) { - leaves4 = aBlock; - } - } - - if (aBopColouredLeaves1 != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopColouredLeaves1); - if (aBlock != null) { - colorizedLeaves1 = aBlock; - } - } - if (aBopColouredLeaves2 != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopColouredLeaves2); - if (aBlock != null) { - colorizedLeaves2 = aBlock; - } - } - - if (aBopSapling != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopSapling); - if (aBlock != null) { - saplings = aBlock; - } - } - if (aBopColouredSapling != null) { - Block aBlock = ReflectionUtils.getFieldValue(aBopColouredSapling); - if (aBlock != null) { - colorizedSaplings = aBlock; - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/bop/blocks/BOPBlockRegistrator.java b/src/main/java/gtPlusPlus/xmod/bop/blocks/BOPBlockRegistrator.java new file mode 100644 index 0000000000..0cb1852dee --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/bop/blocks/BOPBlockRegistrator.java @@ -0,0 +1,172 @@ +package gtPlusPlus.xmod.bop.blocks; + +import static gregtech.api.recipe.RecipeMaps.cutterRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.loaders.oreprocessing.ProcessingLog.addPyrolyeOvenRecipes; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import gregtech.GTMod; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.RecipeUtils; +import gtPlusPlus.xmod.bop.blocks.pine.LeavesPineTree; +import gtPlusPlus.xmod.bop.blocks.pine.LogPineTree; +import gtPlusPlus.xmod.bop.blocks.pine.SaplingPineTree; +import gtPlusPlus.xmod.bop.blocks.rainforest.LeavesRainforestTree; +import gtPlusPlus.xmod.bop.blocks.rainforest.LogRainforestTree; +import gtPlusPlus.xmod.bop.blocks.rainforest.SaplingRainforestTree; + +public class BOPBlockRegistrator { + + public static Block log_Rainforest; + public static Block leaves_Rainforest; + public static Block sapling_Rainforest; + public static Block log_Pine; + public static Block leaves_Pine; + public static Block sapling_Pine; + + // Runs Each tree Type separately + public static void run() { + registerTree_Rainforest(); + registerTree_Pine(); + } + + private static void registerTree_Rainforest() { + log_Rainforest = new LogRainforestTree(); + leaves_Rainforest = new LeavesRainforestTree(); + sapling_Rainforest = new SaplingRainforestTree(); + ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(log_Rainforest), "logWood", true); + ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(leaves_Rainforest), "treeLeaves", true); + ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(sapling_Rainforest), "treeSapling", true); + } + + private static void registerTree_Pine() { + log_Pine = new LogPineTree(); + leaves_Pine = new LeavesPineTree(); + sapling_Pine = new SaplingPineTree(); + ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(log_Pine), "logWood", true); + ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(leaves_Pine), "treeLeaves", true); + ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(sapling_Pine), "treeSapling", true); + } + + public static void recipes() { + // Rainforest Oak + addLogRecipes(ItemUtils.getSimpleStack(log_Rainforest)); + // Pine + addLogRecipes(ItemUtils.getSimpleStack(log_Pine)); + } + + public static void addLogRecipes(final ItemStack aStack) { + RecipeUtils.addShapelessGregtechRecipe( + new ItemStack[] { aStack }, + ItemUtils + .getSimpleStack(Item.getItemFromBlock(Blocks.planks), GTMod.gregtechproxy.mNerfedWoodPlank ? 2 : 4)); + RecipeUtils.recipeBuilder( + CI.craftingToolSaw, + null, + null, + aStack, + null, + null, + null, + null, + null, + ItemUtils.getSimpleStack(Item.getItemFromBlock(Blocks.planks), 4)); + GTModHandler.addCraftingRecipe( + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Wood, 2L), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "sLf", 'L', GTUtility.copyAmount(1L, aStack) }); + + final short aMeta = (short) aStack.getItemDamage(); + if (GTUtility.areStacksEqual( + GTModHandler.getSmeltingOutput(GTUtility.copyAmount(1L, aStack), false, null), + new ItemStack(Items.coal, 1, 1))) { + addPyrolyeOvenRecipes(aStack); + GTModHandler.removeFurnaceSmelting(GTUtility.copyAmount(1L, aStack)); + } + if (aMeta == 32767) { + for (int i = 0; i < 32767; ++i) { + if (GTUtility.areStacksEqual( + GTModHandler.getSmeltingOutput(new ItemStack(aStack.getItem(), 1, i), false, null), + new ItemStack(Items.coal, 1, 1))) { + addPyrolyeOvenRecipes(aStack); + GTModHandler.removeFurnaceSmelting(new ItemStack(aStack.getItem(), 1, i)); + } + final ItemStack tStack = GTModHandler.getRecipeOutput(new ItemStack(aStack.getItem(), 1, i)); + if (tStack == null) { + if (i >= 16) { + break; + } + } else { + final ItemStack tPlanks = GTUtility.copy(tStack); + tPlanks.stackSize = tPlanks.stackSize * 3 / 2; + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(aStack.getItem(), 1, i)) + .itemOutputs( + GTUtility.copyAmount( + GTMod.gregtechproxy.mNerfedWoodPlank ? ((long) tStack.stackSize) + : (((long) tStack.stackSize) * 5L / 4), + tStack), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L)) + .duration(10 * SECONDS) + .eut(8) + .addTo(cutterRecipes); + GTModHandler.removeRecipe(new ItemStack(aStack.getItem(), 1, i)); + GTModHandler.addCraftingRecipe( + GTUtility.copyAmount( + GTMod.gregtechproxy.mNerfedWoodPlank ? ((long) tStack.stackSize) + : (((long) tStack.stackSize) * 5L / 4), + tStack), + new Object[] { "s", "L", 'L', new ItemStack(aStack.getItem(), 1, i) }); + GTModHandler.addShapelessCraftingRecipe( + GTUtility.copyAmount(tStack.stackSize / (GTMod.gregtechproxy.mNerfedWoodPlank ? 2 : 1), tStack), + new Object[] { new ItemStack(aStack.getItem(), 1, i) }); + } + } + } else { + final ItemStack tStack2 = GTModHandler.getRecipeOutput(GTUtility.copyAmount(1L, aStack)); + if (tStack2 != null) { + final ItemStack tPlanks2 = GTUtility.copy(tStack2); + tPlanks2.stackSize = tPlanks2.stackSize * 3 / 2; + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1L, aStack)) + .itemOutputs( + GTUtility.copyAmount( + GTMod.gregtechproxy.mNerfedWoodPlank ? ((long) tStack2.stackSize) + : (((long) tStack2.stackSize) * 5L / 4), + tStack2), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L)) + .duration(10 * SECONDS) + .eut(8) + .addTo(cutterRecipes); + GTModHandler.removeRecipe(GTUtility.copyAmount(1L, aStack)); + GTModHandler.addCraftingRecipe( + GTUtility.copyAmount( + GTMod.gregtechproxy.mNerfedWoodPlank ? ((long) tStack2.stackSize) + : (((long) tStack2.stackSize) * 5L / 4), + tStack2), + new Object[] { "s", "L", 'L', GTUtility.copyAmount(1L, aStack) }); + GTModHandler.addShapelessCraftingRecipe( + GTUtility.copyAmount(tStack2.stackSize / (GTMod.gregtechproxy.mNerfedWoodPlank ? 2 : 1), tStack2), + new Object[] { GTUtility.copyAmount(1L, aStack) }); + } + } + if (GTUtility.areStacksEqual( + GTModHandler.getSmeltingOutput(GTUtility.copyAmount(1L, aStack), false, null), + new ItemStack(Items.coal, 1, 1))) { + addPyrolyeOvenRecipes(aStack); + GTModHandler.removeFurnaceSmelting(GTUtility.copyAmount(1L, aStack)); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/bop/blocks/BOP_Block_Registrator.java b/src/main/java/gtPlusPlus/xmod/bop/blocks/BOP_Block_Registrator.java deleted file mode 100644 index 4a3c91e9cb..0000000000 --- a/src/main/java/gtPlusPlus/xmod/bop/blocks/BOP_Block_Registrator.java +++ /dev/null @@ -1,173 +0,0 @@ -package gtPlusPlus.xmod.bop.blocks; - -import static gregtech.api.recipe.RecipeMaps.cutterRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.loaders.oreprocessing.ProcessingLog.addPyrolyeOvenRecipes; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import gregtech.GT_Mod; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.RecipeUtils; -import gtPlusPlus.xmod.bop.blocks.pine.LeavesPineTree; -import gtPlusPlus.xmod.bop.blocks.pine.LogPineTree; -import gtPlusPlus.xmod.bop.blocks.pine.SaplingPineTree; -import gtPlusPlus.xmod.bop.blocks.rainforest.LeavesRainforestTree; -import gtPlusPlus.xmod.bop.blocks.rainforest.LogRainforestTree; -import gtPlusPlus.xmod.bop.blocks.rainforest.SaplingRainforestTree; - -public class BOP_Block_Registrator { - - public static Block log_Rainforest; - public static Block leaves_Rainforest; - public static Block sapling_Rainforest; - public static Block log_Pine; - public static Block leaves_Pine; - public static Block sapling_Pine; - - // Runs Each tree Type separately - public static void run() { - registerTree_Rainforest(); - registerTree_Pine(); - } - - private static void registerTree_Rainforest() { - log_Rainforest = new LogRainforestTree(); - leaves_Rainforest = new LeavesRainforestTree(); - sapling_Rainforest = new SaplingRainforestTree(); - ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(log_Rainforest), "logWood", true); - ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(leaves_Rainforest), "treeLeaves", true); - ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(sapling_Rainforest), "treeSapling", true); - } - - private static void registerTree_Pine() { - log_Pine = new LogPineTree(); - leaves_Pine = new LeavesPineTree(); - sapling_Pine = new SaplingPineTree(); - ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(log_Pine), "logWood", true); - ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(leaves_Pine), "treeLeaves", true); - ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(sapling_Pine), "treeSapling", true); - } - - public static void recipes() { - // Rainforest Oak - addLogRecipes(ItemUtils.getSimpleStack(log_Rainforest)); - // Pine - addLogRecipes(ItemUtils.getSimpleStack(log_Pine)); - } - - public static void addLogRecipes(final ItemStack aStack) { - RecipeUtils.addShapelessGregtechRecipe( - new ItemStack[] { aStack }, - ItemUtils - .getSimpleStack(Item.getItemFromBlock(Blocks.planks), GT_Mod.gregtechproxy.mNerfedWoodPlank ? 2 : 4)); - RecipeUtils.recipeBuilder( - CI.craftingToolSaw, - null, - null, - aStack, - null, - null, - null, - null, - null, - ItemUtils.getSimpleStack(Item.getItemFromBlock(Blocks.planks), 4)); - GT_ModHandler.addCraftingRecipe( - GT_OreDictUnificator.get(OrePrefixes.stickLong, Materials.Wood, 2L), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "sLf", 'L', GT_Utility.copyAmount(1L, aStack) }); - - final short aMeta = (short) aStack.getItemDamage(); - if (GT_Utility.areStacksEqual( - GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(1L, aStack), false, null), - new ItemStack(Items.coal, 1, 1))) { - addPyrolyeOvenRecipes(aStack); - GT_ModHandler.removeFurnaceSmelting(GT_Utility.copyAmount(1L, aStack)); - } - if (aMeta == 32767) { - for (int i = 0; i < 32767; ++i) { - if (GT_Utility.areStacksEqual( - GT_ModHandler.getSmeltingOutput(new ItemStack(aStack.getItem(), 1, i), false, null), - new ItemStack(Items.coal, 1, 1))) { - addPyrolyeOvenRecipes(aStack); - GT_ModHandler.removeFurnaceSmelting(new ItemStack(aStack.getItem(), 1, i)); - } - final ItemStack tStack = GT_ModHandler.getRecipeOutput(new ItemStack(aStack.getItem(), 1, i)); - if (tStack == null) { - if (i >= 16) { - break; - } - } else { - final ItemStack tPlanks = GT_Utility.copy(tStack); - tPlanks.stackSize = tPlanks.stackSize * 3 / 2; - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(aStack.getItem(), 1, i)) - .itemOutputs( - GT_Utility.copyAmount( - GT_Mod.gregtechproxy.mNerfedWoodPlank ? ((long) tStack.stackSize) - : (((long) tStack.stackSize) * 5L / 4), - tStack), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L)) - .duration(10 * SECONDS) - .eut(8) - .addTo(cutterRecipes); - GT_ModHandler.removeRecipe(new ItemStack(aStack.getItem(), 1, i)); - GT_ModHandler.addCraftingRecipe( - GT_Utility.copyAmount( - GT_Mod.gregtechproxy.mNerfedWoodPlank ? ((long) tStack.stackSize) - : (((long) tStack.stackSize) * 5L / 4), - tStack), - new Object[] { "s", "L", 'L', new ItemStack(aStack.getItem(), 1, i) }); - GT_ModHandler.addShapelessCraftingRecipe( - GT_Utility - .copyAmount(tStack.stackSize / (GT_Mod.gregtechproxy.mNerfedWoodPlank ? 2 : 1), tStack), - new Object[] { new ItemStack(aStack.getItem(), 1, i) }); - } - } - } else { - final ItemStack tStack2 = GT_ModHandler.getRecipeOutput(GT_Utility.copyAmount(1L, aStack)); - if (tStack2 != null) { - final ItemStack tPlanks2 = GT_Utility.copy(tStack2); - tPlanks2.stackSize = tPlanks2.stackSize * 3 / 2; - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1L, aStack)) - .itemOutputs( - GT_Utility.copyAmount( - GT_Mod.gregtechproxy.mNerfedWoodPlank ? ((long) tStack2.stackSize) - : (((long) tStack2.stackSize) * 5L / 4), - tStack2), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 2L)) - .duration(10 * SECONDS) - .eut(8) - .addTo(cutterRecipes); - GT_ModHandler.removeRecipe(GT_Utility.copyAmount(1L, aStack)); - GT_ModHandler.addCraftingRecipe( - GT_Utility.copyAmount( - GT_Mod.gregtechproxy.mNerfedWoodPlank ? ((long) tStack2.stackSize) - : (((long) tStack2.stackSize) * 5L / 4), - tStack2), - new Object[] { "s", "L", 'L', GT_Utility.copyAmount(1L, aStack) }); - GT_ModHandler.addShapelessCraftingRecipe( - GT_Utility.copyAmount(tStack2.stackSize / (GT_Mod.gregtechproxy.mNerfedWoodPlank ? 2 : 1), tStack2), - new Object[] { GT_Utility.copyAmount(1L, aStack) }); - } - } - if (GT_Utility.areStacksEqual( - GT_ModHandler.getSmeltingOutput(GT_Utility.copyAmount(1L, aStack), false, null), - new ItemStack(Items.coal, 1, 1))) { - addPyrolyeOvenRecipes(aStack); - GT_ModHandler.removeFurnaceSmelting(GT_Utility.copyAmount(1L, aStack)); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/bop/blocks/pine/LeavesPineTree.java b/src/main/java/gtPlusPlus/xmod/bop/blocks/pine/LeavesPineTree.java index 93f7e59a1e..4136e7f8e5 100644 --- a/src/main/java/gtPlusPlus/xmod/bop/blocks/pine/LeavesPineTree.java +++ b/src/main/java/gtPlusPlus/xmod/bop/blocks/pine/LeavesPineTree.java @@ -10,7 +10,7 @@ import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.item.chemistry.AgriculturalChem; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.bop.blocks.BOP_Block_Registrator; +import gtPlusPlus.xmod.bop.blocks.BOPBlockRegistrator; import gtPlusPlus.xmod.bop.blocks.base.LeavesBase; public class LeavesPineTree extends LeavesBase { @@ -23,7 +23,7 @@ public class LeavesPineTree extends LeavesBase { @Override public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { - return Item.getItemFromBlock(BOP_Block_Registrator.sapling_Pine); + return Item.getItemFromBlock(BOPBlockRegistrator.sapling_Pine); } @Override // Drops when Leaf is broken diff --git a/src/main/java/gtPlusPlus/xmod/bop/blocks/pine/SaplingPineTree.java b/src/main/java/gtPlusPlus/xmod/bop/blocks/pine/SaplingPineTree.java index 2c2bb38af6..b37a4dc3d9 100644 --- a/src/main/java/gtPlusPlus/xmod/bop/blocks/pine/SaplingPineTree.java +++ b/src/main/java/gtPlusPlus/xmod/bop/blocks/pine/SaplingPineTree.java @@ -10,7 +10,7 @@ import net.minecraft.world.gen.feature.WorldGenTrees; import net.minecraft.world.gen.feature.WorldGenerator; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.bop.blocks.base.SaplingBase; import gtPlusPlus.xmod.bop.world.features.trees.WorldGenPineTree; @@ -44,7 +44,7 @@ public class SaplingPineTree extends SaplingBase { Object obj = new WorldGenPineTree(); if (obj != null) { world.setBlockToAir(x, y, z); - if (!((WorldGenerator) obj).generate(world, CORE.RANDOM, x, y, z)) { + if (!((WorldGenerator) obj).generate(world, GTPPCore.RANDOM, x, y, z)) { world.setBlock(x, y, z, this, 0, 2); } } diff --git a/src/main/java/gtPlusPlus/xmod/bop/blocks/rainforest/LeavesRainforestTree.java b/src/main/java/gtPlusPlus/xmod/bop/blocks/rainforest/LeavesRainforestTree.java index 816b666a40..30f57e1ce6 100644 --- a/src/main/java/gtPlusPlus/xmod/bop/blocks/rainforest/LeavesRainforestTree.java +++ b/src/main/java/gtPlusPlus/xmod/bop/blocks/rainforest/LeavesRainforestTree.java @@ -7,7 +7,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.bop.blocks.BOP_Block_Registrator; +import gtPlusPlus.xmod.bop.blocks.BOPBlockRegistrator; import gtPlusPlus.xmod.bop.blocks.base.LeavesBase; public class LeavesRainforestTree extends LeavesBase { @@ -20,6 +20,6 @@ public class LeavesRainforestTree extends LeavesBase { @Override public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) { - return Item.getItemFromBlock(BOP_Block_Registrator.sapling_Rainforest); + return Item.getItemFromBlock(BOPBlockRegistrator.sapling_Rainforest); } } diff --git a/src/main/java/gtPlusPlus/xmod/bop/blocks/rainforest/SaplingRainforestTree.java b/src/main/java/gtPlusPlus/xmod/bop/blocks/rainforest/SaplingRainforestTree.java index 362eb2f541..a9cb0e2c98 100644 --- a/src/main/java/gtPlusPlus/xmod/bop/blocks/rainforest/SaplingRainforestTree.java +++ b/src/main/java/gtPlusPlus/xmod/bop/blocks/rainforest/SaplingRainforestTree.java @@ -10,7 +10,7 @@ import net.minecraft.world.gen.feature.WorldGenTrees; import net.minecraft.world.gen.feature.WorldGenerator; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.xmod.bop.blocks.BOP_Block_Registrator; +import gtPlusPlus.xmod.bop.blocks.BOPBlockRegistrator; import gtPlusPlus.xmod.bop.blocks.base.SaplingBase; import gtPlusPlus.xmod.bop.world.features.trees.WorldGenRainForestTree_Ex; @@ -43,8 +43,8 @@ public class SaplingRainforestTree extends SaplingBase { world.setBlock(x, y, z, block, 0, 4); } Object o = new WorldGenRainForestTree_Ex( - BOP_Block_Registrator.log_Rainforest, - BOP_Block_Registrator.leaves_Rainforest, + BOPBlockRegistrator.log_Rainforest, + BOPBlockRegistrator.leaves_Rainforest, 0, 0, true, diff --git a/src/main/java/gtPlusPlus/xmod/bop/world/features/trees/WorldGenPineTree.java b/src/main/java/gtPlusPlus/xmod/bop/world/features/trees/WorldGenPineTree.java index bc97042c82..5d33b482a6 100644 --- a/src/main/java/gtPlusPlus/xmod/bop/world/features/trees/WorldGenPineTree.java +++ b/src/main/java/gtPlusPlus/xmod/bop/world/features/trees/WorldGenPineTree.java @@ -10,7 +10,7 @@ import net.minecraft.world.gen.feature.WorldGenAbstractTree; import net.minecraftforge.common.util.ForgeDirection; import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.xmod.bop.blocks.BOP_Block_Registrator; +import gtPlusPlus.xmod.bop.blocks.BOPBlockRegistrator; public class WorldGenPineTree extends WorldGenAbstractTree { @@ -49,7 +49,7 @@ public class WorldGenPineTree extends WorldGenAbstractTree { int c; int r = MathUtils.randInt(1, 3); for (c = 0; c < height; ++c) { - this.buildBlock(world, x, y + h, z, BOP_Block_Registrator.log_Pine, 0); + this.buildBlock(world, x, y + h, z, BOPBlockRegistrator.log_Pine, 0); h++; if (c >= r && c % 2 == 0) { this.generateBranch(world, random, x, y + h, z, c); @@ -64,16 +64,16 @@ public class WorldGenPineTree extends WorldGenAbstractTree { public void generateTop(World world, int x, int y, int z) { for (int i = -1; i < 2; ++i) { for (int j = -1; j < 2; ++j) { - this.buildBlock(world, x + i, y, z + j, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + i, y, z + j, BOPBlockRegistrator.leaves_Pine, 0); } } - this.buildBlock(world, x, y, z, BOP_Block_Registrator.log_Pine, 0); - this.buildBlock(world, x + 1, y + 1, z, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x, y + 1, z - 1, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x, y + 1, z + 1, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x - 1, y + 1, z, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x, y + 2, z, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x, y, z, BOPBlockRegistrator.log_Pine, 0); + this.buildBlock(world, x + 1, y + 1, z, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x, y + 1, z - 1, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x, y + 1, z + 1, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x - 1, y + 1, z, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x, y + 2, z, BOPBlockRegistrator.leaves_Pine, 0); } public void generateBranch(World world, Random rand, int x, int y, int z, int n) { @@ -81,7 +81,7 @@ public class WorldGenPineTree extends WorldGenAbstractTree { int var99998; for (var99999 = -1; var99999 < 2; ++var99999) { for (var99998 = -1; var99998 < 2; ++var99998) { - this.buildBlock(world, x + var99999, y, z + var99998, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + var99999, y, z + var99998, BOPBlockRegistrator.leaves_Pine, 0); } } @@ -91,72 +91,72 @@ public class WorldGenPineTree extends WorldGenAbstractTree { int var99996 = rand.nextInt(2); if (n % 2 == 0) { if (var99998 == 0) { - this.buildBlock(world, x + 1, y - 1, z - 2, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x + 2, y - 1, z - 1, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + 1, y - 1, z - 2, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x + 2, y - 1, z - 1, BOPBlockRegistrator.leaves_Pine, 0); if (var99999 == 0) { - this.buildBlock(world, x + 2, y - 2, z - 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + 2, y - 2, z - 2, BOPBlockRegistrator.leaves_Pine, 0); } else { - this.buildBlock(world, x + 2, y - 1, z - 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + 2, y - 1, z - 2, BOPBlockRegistrator.leaves_Pine, 0); } } else { - this.buildBlock(world, x + 1, y, z - 2, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x + 2, y, z - 1, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x + 2, y, z - 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + 1, y, z - 2, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x + 2, y, z - 1, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x + 2, y, z - 2, BOPBlockRegistrator.leaves_Pine, 0); } if (var99997 == 0) { - this.buildBlock(world, x - 2, y - 1, z + 1, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x - 1, y - 1, z + 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x - 2, y - 1, z + 1, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x - 1, y - 1, z + 2, BOPBlockRegistrator.leaves_Pine, 0); if (var99996 == 0) { - this.buildBlock(world, x - 2, y - 2, z + 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x - 2, y - 2, z + 2, BOPBlockRegistrator.leaves_Pine, 0); } else { - this.buildBlock(world, x - 2, y - 1, z + 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x - 2, y - 1, z + 2, BOPBlockRegistrator.leaves_Pine, 0); } } else { - this.buildBlock(world, x - 2, y, z + 1, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x - 1, y, z + 2, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x - 2, y, z + 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x - 2, y, z + 1, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x - 1, y, z + 2, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x - 2, y, z + 2, BOPBlockRegistrator.leaves_Pine, 0); } } else { if (var99998 == 0) { - this.buildBlock(world, x + 2, y - 1, z + 1, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x + 1, y - 1, z + 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + 2, y - 1, z + 1, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x + 1, y - 1, z + 2, BOPBlockRegistrator.leaves_Pine, 0); if (var99999 == 0) { - this.buildBlock(world, x + 2, y - 2, z + 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + 2, y - 2, z + 2, BOPBlockRegistrator.leaves_Pine, 0); } else { - this.buildBlock(world, x + 2, y - 1, z + 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + 2, y - 1, z + 2, BOPBlockRegistrator.leaves_Pine, 0); } } else { - this.buildBlock(world, x + 2, y, z + 1, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x + 1, y, z + 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + 2, y, z + 1, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x + 1, y, z + 2, BOPBlockRegistrator.leaves_Pine, 0); if (var99999 == 0) { - this.buildBlock(world, x + 2, y - 1, z + 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + 2, y - 1, z + 2, BOPBlockRegistrator.leaves_Pine, 0); } else { - this.buildBlock(world, x + 2, y, z + 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x + 2, y, z + 2, BOPBlockRegistrator.leaves_Pine, 0); } } if (var99997 == 0) { - this.buildBlock(world, x - 1, y - 1, z - 2, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x - 2, y - 1, z - 1, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x - 1, y - 1, z - 2, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x - 2, y - 1, z - 1, BOPBlockRegistrator.leaves_Pine, 0); if (var99996 == 0) { - this.buildBlock(world, x - 2, y - 2, z - 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x - 2, y - 2, z - 2, BOPBlockRegistrator.leaves_Pine, 0); } else { - this.buildBlock(world, x - 2, y - 1, z - 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x - 2, y - 1, z - 2, BOPBlockRegistrator.leaves_Pine, 0); } } else { - this.buildBlock(world, x - 1, y, z - 2, BOP_Block_Registrator.leaves_Pine, 0); - this.buildBlock(world, x - 2, y, z - 1, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x - 1, y, z - 2, BOPBlockRegistrator.leaves_Pine, 0); + this.buildBlock(world, x - 2, y, z - 1, BOPBlockRegistrator.leaves_Pine, 0); if (var99996 == 0) { - this.buildBlock(world, x - 2, y - 1, z - 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x - 2, y - 1, z - 2, BOPBlockRegistrator.leaves_Pine, 0); } else { - this.buildBlock(world, x - 2, y, z - 2, BOP_Block_Registrator.leaves_Pine, 0); + this.buildBlock(world, x - 2, y, z - 2, BOPBlockRegistrator.leaves_Pine, 0); } } } - this.buildBlock(world, x, y, z, BOP_Block_Registrator.log_Pine, 0); - this.buildBlock(world, x, y + 1, z, BOP_Block_Registrator.log_Pine, 0); + this.buildBlock(world, x, y, z, BOPBlockRegistrator.log_Pine, 0); + this.buildBlock(world, x, y + 1, z, BOPBlockRegistrator.log_Pine, 0); } public void buildBlock(World world, int x, int y, int z, Block block, int meta) { diff --git a/src/main/java/gtPlusPlus/xmod/forestry/ForestryHandler.java b/src/main/java/gtPlusPlus/xmod/forestry/ForestryHandler.java new file mode 100644 index 0000000000..963c793cee --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/ForestryHandler.java @@ -0,0 +1,24 @@ +package gtPlusPlus.xmod.forestry; + +import static gregtech.api.enums.Mods.Forestry; + +import gtPlusPlus.xmod.forestry.bees.items.FRItemRegistry; +import gtPlusPlus.xmod.forestry.bees.recipe.FRGregTechRecipes; +import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; + +public class ForestryHandler { + + public static void preInit() { + if (Forestry.isModLoaded()) { + FRItemRegistry.Register(); + } + } + + public static void postInit() { + if (Forestry.isModLoaded()) { + FRGregTechRecipes.registerItems(); + new GTPP_Bees(); + } + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/ForestryTreeHandler.java b/src/main/java/gtPlusPlus/xmod/forestry/ForestryTreeHandler.java index 1f64eacb5c..49b048977e 100644 --- a/src/main/java/gtPlusPlus/xmod/forestry/ForestryTreeHandler.java +++ b/src/main/java/gtPlusPlus/xmod/forestry/ForestryTreeHandler.java @@ -11,7 +11,7 @@ import forestry.api.arboriculture.TreeManager; import forestry.arboriculture.genetics.TreeDefinition; import forestry.plugins.PluginArboriculture; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntityTreeFarm; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTETreeFarm; public class ForestryTreeHandler { @@ -45,7 +45,7 @@ public class ForestryTreeHandler { } } - GregtechMetaTileEntityTreeFarm.registerForestryTree( + MTETreeFarm.registerForestryTree( speciesUID, sapling == null ? null : sapling.copy(), log == null ? null : log.copy(), @@ -83,7 +83,7 @@ public class ForestryTreeHandler { } } - GregtechMetaTileEntityTreeFarm.registerForestryTree( + MTETreeFarm.registerForestryTree( speciesUID, sapling == null ? null : sapling.copy(), log == null ? null : log.copy(), diff --git a/src/main/java/gtPlusPlus/xmod/forestry/HANDLER_FR.java b/src/main/java/gtPlusPlus/xmod/forestry/HANDLER_FR.java deleted file mode 100644 index dc2d277283..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/HANDLER_FR.java +++ /dev/null @@ -1,24 +0,0 @@ -package gtPlusPlus.xmod.forestry; - -import static gregtech.api.enums.Mods.Forestry; - -import gtPlusPlus.xmod.forestry.bees.items.FR_ItemRegistry; -import gtPlusPlus.xmod.forestry.bees.recipe.FR_Gregtech_Recipes; -import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; - -public class HANDLER_FR { - - public static void preInit() { - if (Forestry.isModLoaded()) { - FR_ItemRegistry.Register(); - } - } - - public static void postInit() { - if (Forestry.isModLoaded()) { - FR_Gregtech_Recipes.registerItems(); - new GTPP_Bees(); - } - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/CustomCombs.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/CustomCombs.java index d908850658..05ab3c8711 100644 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/CustomCombs.java +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/CustomCombs.java @@ -1,7 +1,7 @@ package gtPlusPlus.xmod.forestry.bees.custom; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; import gtPlusPlus.core.util.Utils; public enum CustomCombs { @@ -11,8 +11,8 @@ public enum CustomCombs { SILICON("silicon", true, Materials.Silicon, 100), RUBBER("rubber", true, Materials.Rubber, 100), PLASTIC("polyethylene", true, Materials.Plastic, 75), - PTFE("polytetrafluoroethylene", true, GTPP_Bees.PTFE, 50), - PBS("styrene-butadiene", true, GTPP_Bees.PBS, 25), + PTFE("polytetrafluoroethylene", true, GTPPBees.PTFE, 50), + PBS("styrene-butadiene", true, GTPPBees.PBS, 25), // Fuels BIOMASS("biomass", true, Materials.Biomass, 100), @@ -82,7 +82,7 @@ public enum CustomCombs { public String getName() { // return "gt.comb."+this.name; - return GT_LanguageManager.addStringLocalization( + return GTLanguageManager.addStringLocalization( "comb." + this.name, this.name.substring(0, 1) .toUpperCase() + this.name.substring(1) + " Comb"); diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBeeDefinition.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBeeDefinition.java new file mode 100644 index 0000000000..7f7553bf1d --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBeeDefinition.java @@ -0,0 +1,604 @@ +package gtPlusPlus.xmod.forestry.bees.custom; + +import java.lang.reflect.Field; +import java.util.Arrays; +import java.util.Locale; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.BiomeDictionary.Type; + +import org.apache.commons.lang3.reflect.FieldUtils; +import org.apache.commons.lang3.text.WordUtils; + +import forestry.api.apiculture.BeeManager; +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.apiculture.EnumBeeType; +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.apiculture.IAlleleBeeSpeciesCustom; +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeMutationCustom; +import forestry.api.core.EnumHumidity; +import forestry.api.core.EnumTemperature; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IAllele; +import forestry.apiculture.genetics.Bee; +import forestry.apiculture.genetics.BeeDefinition; +import forestry.apiculture.genetics.BeeVariation; +import forestry.apiculture.genetics.IBeeDefinition; +import forestry.core.genetics.alleles.AlleleHelper; +import gregtech.loaders.misc.GTBeeDefinition; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; + +public enum GTPPBeeDefinition implements IBeeDefinition { + + SILICON(GTPPBranchDefinition.ORGANIC, "Silicon", true, Utils.rgbtoHexValue(75, 75, 75), + Utils.rgbtoHexValue(125, 125, 125)) { + + @Override + protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + beeSpecies.addProduct(getSlagComb(), 0.10f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.SILICON), 0.20f); + beeSpecies.setHumidity(EnumHumidity.NORMAL); + beeSpecies.setTemperature(EnumTemperature.NORMAL); + } + + @Override + protected void setAlleles(IAllele[] template) { + template = BeeDefinition.COMMON.getTemplate(); + } + + @Override + protected void registerMutations() { + IBeeMutationCustom tMutation = registerMutation( + getGregtechBeeType("SLIMEBALL"), + getGregtechBeeType("STICKYRESIN"), + 10); + } + }, + + RUBBER(GTPPBranchDefinition.ORGANIC, "Rubber", true, Utils.rgbtoHexValue(55, 55, 55), + Utils.rgbtoHexValue(75, 75, 75)) { + + @Override + protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + beeSpecies.addProduct(getSlagComb(), 0.10f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.RUBBER), 0.30f); + beeSpecies.setHumidity(EnumHumidity.NORMAL); + beeSpecies.setTemperature(EnumTemperature.NORMAL); + } + + @Override + protected void setAlleles(IAllele[] template) { + template = BeeDefinition.COMMON.getTemplate(); + } + + @Override + protected void registerMutations() { + IBeeMutationCustom tMutation = registerMutation( + getGregtechBeeType("SLIMEBALL"), + getGregtechBeeType("STICKYRESIN"), + 10); + } + }, + + PLASTIC(GTPPBranchDefinition.ORGANIC, "Plastic", true, Utils.rgbtoHexValue(245, 245, 245), + Utils.rgbtoHexValue(175, 175, 175)) { + + @Override + protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + beeSpecies.addProduct(getStoneComb(), 0.30f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.PLASTIC), 0.15f); + beeSpecies.setHumidity(EnumHumidity.NORMAL); + beeSpecies.setTemperature(EnumTemperature.NORMAL); + } + + @Override + protected void setAlleles(IAllele[] template) { + template = BeeDefinition.COMMON.getTemplate(); + } + + @Override + protected void registerMutations() { + IBeeMutationCustom tMutation = registerMutation(RUBBER.species, getGregtechBeeType("OIL"), 10); + } + }, + + PTFE(GTPPBranchDefinition.ORGANIC, "Ptfe", true, Utils.rgbtoHexValue(150, 150, 150), + Utils.rgbtoHexValue(75, 75, 75)) { + + @Override + protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + beeSpecies.addProduct(getStoneComb(), 0.30f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.PTFE), 0.10f); + beeSpecies.setHumidity(EnumHumidity.NORMAL); + beeSpecies.setTemperature(EnumTemperature.NORMAL); + } + + @Override + protected void setAlleles(IAllele[] template) { + template = BeeDefinition.COMMON.getTemplate(); + } + + @Override + protected void registerMutations() { + IBeeMutationCustom tMutation = registerMutation(RUBBER.species, PLASTIC.species, 10); + } + }, + + PBS(GTPPBranchDefinition.ORGANIC, "Pbs", true, Utils.rgbtoHexValue(33, 26, 24), Utils.rgbtoHexValue(23, 16, 14)) { + + @Override + protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + beeSpecies.addProduct(getStoneComb(), 0.30f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.PBS), 0.10f); + beeSpecies.setHumidity(EnumHumidity.NORMAL); + beeSpecies.setTemperature(EnumTemperature.NORMAL); + } + + @Override + protected void setAlleles(IAllele[] template) { + template = BeeDefinition.COMMON.getTemplate(); + } + + @Override + protected void registerMutations() { + IBeeMutationCustom tMutation = registerMutation(PTFE.species, PLASTIC.species, 10); + } + }, + + /** + * Fuels + */ + BIOMASS(GTPPBranchDefinition.ORGANIC, "Biomass", true, Utils.rgbtoHexValue(33, 225, 24), + Utils.rgbtoHexValue(23, 175, 14)) { + + @Override + protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.SAND), 0.40f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.BIOMASS), 0.20f); + beeSpecies.setHumidity(EnumHumidity.NORMAL); + beeSpecies.setTemperature(EnumTemperature.NORMAL); + } + + @Override + protected void setAlleles(IAllele[] template) { + template = BeeDefinition.COMMON.getTemplate(); + } + + @Override + protected void registerMutations() { + IBeeMutationCustom tMutation = registerMutation(getSpecies("Industrious"), getSpecies("Rural"), 10); + tMutation.restrictBiomeType(Type.FOREST); + } + }, + + ETHANOL(GTPPBranchDefinition.ORGANIC, "Ethanol", true, Utils.rgbtoHexValue(255, 128, 0), + Utils.rgbtoHexValue(220, 156, 32)) { + + @Override + protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.SAND), 0.40f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.ETHANOL), 0.20f); + beeSpecies.setHumidity(EnumHumidity.NORMAL); + beeSpecies.setTemperature(EnumTemperature.NORMAL); + } + + @Override + protected void setAlleles(IAllele[] template) { + template = BeeDefinition.COMMON.getTemplate(); + } + + @Override + protected void registerMutations() { + IBeeMutationCustom tMutation = registerMutation(BIOMASS.species, getSpecies("Farmerly"), 5); + tMutation.restrictBiomeType(Type.FOREST); + } + }, + + /** + * Materials + */ + FLUORINE(GTPPBranchDefinition.ORGANIC, "Fluorine", true, Utils.rgbtoHexValue(30, 230, 230), + Utils.rgbtoHexValue(10, 150, 150)) { + + @Override + protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + beeSpecies.addProduct(getStoneComb(), 0.40f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.FLUORINE), 0.05f); + beeSpecies.setHumidity(EnumHumidity.NORMAL); + beeSpecies.setTemperature(EnumTemperature.COLD); + } + + @Override + protected void setAlleles(IAllele[] template) { + template = BeeDefinition.COMMON.getTemplate(); + } + + @Override + protected void registerMutations() { + IBeeMutationCustom tMutation = registerMutation( + getGregtechBeeType("LAPIS"), + getGregtechBeeType("SAPPHIRE"), + 5); + tMutation.restrictBiomeType(Type.COLD); + } + }, + + // Coke + + // Force + FORCE(GTPPBranchDefinition.METAL, "Force", true, Utils.rgbtoHexValue(250, 250, 20), + Utils.rgbtoHexValue(200, 200, 5)) { + + @Override + protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + beeSpecies.addProduct(getStoneComb(), 0.30f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.SAND), 0.25f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.FORCE), 0.25f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.SALT), 0.05f); + beeSpecies.setHumidity(EnumHumidity.NORMAL); + beeSpecies.setTemperature(EnumTemperature.HOT); + } + + @Override + protected void setAlleles(IAllele[] template) { + template = BeeDefinition.COMMON.getTemplate(); + } + + @Override + protected void registerMutations() { + IBeeMutationCustom tMutation = registerMutation( + getGregtechBeeType("STEEL"), + getGregtechBeeType("GOLD"), + 10); + tMutation.restrictBiomeType(Type.HOT); + } + }, + + // Nikolite + NIKOLITE(GTPPBranchDefinition.METAL, "Nikolite", true, Utils.rgbtoHexValue(60, 180, 200), + Utils.rgbtoHexValue(40, 150, 170)) { + + @Override + protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + beeSpecies.addProduct(getStoneComb(), 0.30f); + beeSpecies.addProduct(GTPPBees.combs.getStackForType(CustomCombs.NIKOLITE), 0.05f); + beeSpecies.setHumidity(EnumHumidity.NORMAL); + beeSpecies.setTemperature(EnumTemperature.HOT); + } + + @Override + protected void setAlleles(IAllele[] template) { + template = BeeDefinition.COMMON.getTemplate(); + } + + @Override + protected void registerMutations() { + IBeeMutationCustom tMutation = registerMutation( + getGregtechBeeType("ALUMINIUM"), + getGregtechBeeType("SILVER"), + 8); + tMutation.restrictBiomeType(Type.HOT); + } + }, + + /* + * CLAY(GTPP_Branch_Definition.ORGANIC, "Clay", true, 0x19d0ec, 0xffdc16) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTModHandler.getModItem(GT_Values.MOD_ID_FR, "beeCombs", 1, 0), 0.30f); + * beeSpecies.addProduct(new ItemStack(Items.clay_ball, 1), 0.15f); beeSpecies.setHumidity(EnumHumidity.DAMP); + * beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.MEADOWS.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = + * registerMutation(getSpecies("Industrious"), getSpecies("Diligent"), 20); } }, + * SLIMEBALL(GTPP_Branch_Definition.ORGANIC, "SlimeBall", true, 0x4E9E55, 0x00FF15) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTModHandler.getModItem(GT_Values.MOD_ID_FR, "beeCombs", 1, 15), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STICKY), 0.30f); + * beeSpecies.setHumidity(EnumHumidity.DAMP); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.MARSHY.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = + * registerMutation(getSpecies("Marshy"), CLAY.species, 15); } }, PEAT(GTPP_Branch_Definition.ORGANIC, "Peat", true, + * 0x906237, 0x58300B) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.LIGNIE), 0.30f); + * beeSpecies.addProduct(GTModHandler.getModItem(GT_Values.MOD_ID_FR, "beeCombs", 1, 0), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.RURAL.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = + * registerMutation(getSpecies("Rural"), CLAY.species, 20); } }, STICKYRESIN(GTPP_Branch_Definition.ORGANIC, + * "StickyResin", true, 0x2E8F5B, 0xDCC289) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTModHandler.getModItem(GT_Values.MOD_ID_FR, "beeCombs", 1, 0), 0.30f); + * beeSpecies.addProduct(ItemList.IC2_Resin.get(1, new Object[0]), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.MEADOWS.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(SLIMEBALL.species, + * PEAT.species, 25); } }, COAL(GTPP_Branch_Definition.ORGANIC, "Coal", true, 0x666666, 0x525252) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.LIGNIE), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.COAL), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.AUSTERE.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = + * registerMutation(getSpecies("Industrious"), PEAT.species, 18); } }, OIL(GTPP_Branch_Definition.ORGANIC, "Oil", + * true, 0x4C4C4C, 0x333333) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTModHandler.getModItem(GT_Values.MOD_ID_FR, "beeCombs", 1, 0), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.OIL), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.DAMP); beeSpecies.setTemperature(EnumTemperature.NORMAL); + * beeSpecies.setNocturnal(); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.MEADOWS.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(COAL.species, + * STICKYRESIN.species, 8); } }, REDSTONE(GTPP_Branch_Definition.GEM, "Redstone", true, 0x7D0F0F, 0xD11919) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.REDSTONE), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = + * registerMutation(getSpecies("Industrious"), getSpecies("Demonic"), 20); } }, LAPIS(GTPP_Branch_Definition.GEM, + * "Lapis", true, 0x1947D1, 0x476CDA) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.LAPIS), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = + * registerMutation(getSpecies("Demonic"), getSpecies("Imperial"), 20); } }, CERTUS(GTPP_Branch_Definition.GEM, + * "CertusQuartz", true, 0x57CFFB, 0xBBEEFF) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.CERTUS), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = + * registerMutation(getSpecies("Hermitic"), LAPIS.species, 20); } }, RUBY(GTPP_Branch_Definition.GEM, "Ruby", true, + * 0xE6005C, 0xCC0052) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.RUBY), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(REDSTONE.species, + * DIAMOND.species, 10); } }, SAPPHIRE(GTPP_Branch_Definition.GEM, "Sapphire", true, 0x0033CC, 0x00248F) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SAPPHIRE), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(CERTUS.species, + * LAPIS.species, 10); } }, DIAMOND(GTPP_Branch_Definition.GEM, "Diamond", true, 0xCCFFFF, 0xA3CCCC) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.DIAMOND), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(CERTUS.species, + * COAL.species, 6); } }, OLIVINE(GTPP_Branch_Definition.GEM, "Olivine", true, 0x248F24, 0xCCFFCC) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.OLIVINE), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(CERTUS.species, + * getSpecies("Ended"), 10); } }, EMERALD(GTPP_Branch_Definition.GEM, "Emerald", true, 0x248F24, 0x2EB82E) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.EMERALD), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.COLD); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(OLIVINE.species, + * DIAMOND.species, 8); } }, COPPER(GTPP_Branch_Definition.METAL, "Copper", true, 0xFF6600, 0xE65C00) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.COPPER), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = + * registerMutation(getSpecies("Majestic"), CLAY.species, 25); } }, TIN(GTPP_Branch_Definition.METAL, "Tin", true, + * 0xD4D4D4, 0xDDDDDD) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.TIN), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(CLAY.species, + * getSpecies("Diligent"), 25); } }, LEAD(GTPP_Branch_Definition.METAL, "Lead", true, 0x666699, 0xA3A3CC) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.LEAD), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.DAMP); beeSpecies.setTemperature(EnumTemperature.WARM); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(COAL.species, + * COPPER.species, 25); } }, IRON(GTPP_Branch_Definition.METAL, "Iron", true, 0xDA9147, 0xDE9C59) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.IRON), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(TIN.species, + * COPPER.species, 25); } }, STEEL(GTPP_Branch_Definition.METAL, "Steel", true, 0x808080, 0x999999) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STEEL), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(IRON.species, + * COAL.species, 20); } }, NICKEL(GTPP_Branch_Definition.METAL, "Nickel", true, 0x8585AD, 0x8585AD) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.NICKEL), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(IRON.species, + * COPPER.species, 25); } }, ZINC(GTPP_Branch_Definition.METAL, "Zinc", true, 0xF0DEF0, 0xF2E1F2) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.ZINC), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(IRON.species, + * TIN.species, 20); } }, SILVER(GTPP_Branch_Definition.METAL, "Silver", true, 0xC2C2D6, 0xCECEDE) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SILVER), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(LEAD.species, + * TIN.species, 20); } }, GOLD(GTPP_Branch_Definition.METAL, "Gold", true, 0xEBC633, 0xEDCC47) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.GOLD), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(LEAD.species, + * COPPER.species, 20); } }, ALUMINIUM(GTPP_Branch_Definition.RAREMETAL, "Aluminium", true, 0xB8B8FF, 0xD6D6FF) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.ALUMINIUM), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.ARID); beeSpecies.setTemperature(EnumTemperature.HOT); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(NICKEL.species, + * ZINC.species, 18); } }, TITANIUM(GTPP_Branch_Definition.RAREMETAL, "Titanium", true, 0xCC99FF, 0xDBB8FF) { + * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); + * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.TITANIUM), 0.15f); + * beeSpecies.setHumidity(EnumHumidity.ARID); beeSpecies.setTemperature(EnumTemperature.HOT); } + * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } + * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(REDSTONE.species, + * ALUMINIUM.species, 5); } } + */ + + ; + + private final GTPPBranchDefinition branch; + private final IAlleleBeeSpeciesCustom species; + + private IAllele[] template; + private IBeeGenome genome; + + GTPPBeeDefinition(GTPPBranchDefinition branch, String binomial, boolean dominant, int primary, int secondary) { + String lowercaseName = this.toString() + .toLowerCase(Locale.ENGLISH); + String species = "species" + WordUtils.capitalize(lowercaseName); + + String uid = "forestry." + species; + String description = "for.description." + species; + String name = "for.bees.species." + lowercaseName; + + this.branch = branch; + this.species = BeeManager.beeFactory.createSpecies( + uid, + dominant, + "Sengir", + name, + description, + branch.getBranch(), + binomial, + primary, + secondary); + } + + public static void initBees() { + for (GTPPBeeDefinition bee : values()) { + bee.init(); + } + for (GTPPBeeDefinition bee : values()) { + bee.registerMutations(); + } + } + + private static IAlleleBeeSpecies getSpecies(String name) { + return (IAlleleBeeSpecies) AlleleManager.alleleRegistry.getAllele( + (new StringBuilder()).append("forestry.species") + .append(name) + .toString()); + } + + protected abstract void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies); + + protected abstract void setAlleles(IAllele[] template); + + protected abstract void registerMutations(); + + private void init() { + setSpeciesProperties(species); + + template = branch.getTemplate(); + AlleleHelper.instance.set(template, EnumBeeChromosome.SPECIES, species); + setAlleles(template); + + genome = BeeManager.beeRoot.templateAsGenome(template); + + BeeManager.beeRoot.registerTemplate(template); + } + + protected final IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, IAlleleBeeSpecies parent2, + int chance) { + IAllele[] template = getTemplate(); + Logger.DEBUG_BEES("parent1: " + (parent1 != null)); + Logger.DEBUG_BEES("parent2: " + (parent2 != null)); + Logger.DEBUG_BEES("chance: " + (chance)); + Logger.DEBUG_BEES("template: " + (template != null)); + return BeeManager.beeMutationFactory.createMutation(parent1, parent2, template, chance); + } + + @Override + public final IAllele[] getTemplate() { + return Arrays.copyOf(template, template.length); + } + + @Override + public final IBeeGenome getGenome() { + return genome; + } + + @Override + public final IBee getIndividual() { + return new Bee(genome); + } + + @Override + public final ItemStack getMemberStack(EnumBeeType beeType) { + IBee bee = getIndividual(); + return BeeManager.beeRoot.getMemberStack(bee, beeType.ordinal()); + } + + public final IBeeDefinition getRainResist() { + return new BeeVariation.RainResist(this); + } + + private static ItemStack getSlagComb() { + return issStackValid(ItemUtils.getSimpleStack(GTPPBees.Comb_Slag, 1)); + } + + private static ItemStack getStoneComb() { + return issStackValid(ItemUtils.getSimpleStack(GTPPBees.Comb_Stone, 1)); + } + + private static ItemStack issStackValid(ItemStack result) { + if (result == null) { + return ItemUtils.getErrorStack(1); + } + return result; + } + + public static IAlleleBeeSpecies getGregtechBeeType(String name) { + try { + Enum gtBeeEnumObject = Enum.valueOf(GTBeeDefinition.class, name); + Field gtBeesField = FieldUtils.getDeclaredField(GTBeeDefinition.class, "species", true); + gtBeesField.setAccessible(true); + ReflectionUtils.makeFieldAccessible(gtBeesField); + Object beeType = gtBeesField.get(gtBeeEnumObject); + return (IAlleleBeeSpecies) beeType; + } catch (IllegalArgumentException | IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBees.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBees.java new file mode 100644 index 0000000000..f0cd284bdf --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBees.java @@ -0,0 +1,172 @@ +package gtPlusPlus.xmod.forestry.bees.custom; + +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import gregtech.GTMod; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.item.base.ingots.BaseItemIngotOld; +import gtPlusPlus.core.item.base.misc.BaseItemMisc; +import gtPlusPlus.core.item.base.misc.BaseItemMisc.MiscTypes; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; + +public class GTPPBees { + + // Custom Comb Drop Base Items + public static Item dropForceGem; + public static Item dropBiomassBlob; + public static Item dropEthanolBlob; + public static Item dropNikoliteDust; + public static Item dropFluorineBlob; + + // Base Comb Item + public static ItemCustomComb combs; + + // Combs obtained via reflection + public static ItemStack Comb_Slag; + public static ItemStack Comb_Stone; + + // Materials obtained via reflection + public static Materials PTFE; + public static Materials PBS; + + // public static GTPP_Branch_Definition definition; + + public GTPPBees() { + if (Forestry.isModLoaded()) { + + // Set Materials and Comb stacks from GT via Reflection + setMaterials(); + setCustomItems(); + + try { + combs = new ItemCustomComb(); + combs.initCombsRecipes(); + GTPPBeeDefinition.initBees(); + } catch (Throwable t) { + Logger.BEES("Failed to load bees, probably due to an ancient forestry version"); + t.printStackTrace(); + } + } + } + + private void setCustomItems() { + dropForceGem = new BaseItemMisc("Force", new short[] { 250, 250, 20 }, 64, MiscTypes.GEM, null); + dropBiomassBlob = new BaseItemMisc("Biomass", new short[] { 33, 225, 24 }, 64, MiscTypes.DROP, null); + dropEthanolBlob = new BaseItemMisc("Ethanol", new short[] { 255, 128, 0 }, 64, MiscTypes.DROP, null); + + // Nikolite may not exist, so lets make it. + dropNikoliteDust = ItemUtils + .generateSpecialUseDusts("Nikolite", "Nikolite", Utils.rgbtoHexValue(60, 180, 200))[2]; + + if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("ingotNikolite", 1) == null) { + new BaseItemIngotOld("itemIngotNikolite", "Nikolite", Utils.rgbtoHexValue(60, 180, 200), 0); + } + + dropFluorineBlob = new BaseItemMisc("Fluorine", new short[] { 30, 230, 230 }, 64, MiscTypes.DROP, null); + addRecipes(); + } + + private void addRecipes() { + addExtractorRecipe(ItemUtils.getSimpleStack(dropBiomassBlob), FluidUtils.getFluidStack("biomass", 30)); + addExtractorRecipe(ItemUtils.getSimpleStack(dropEthanolBlob), FluidUtils.getFluidStack("ethanol", 6)); + addExtractorRecipe(ItemUtils.getSimpleStack(dropFluorineBlob), FluidUtils.getFluidStack("fluorine", 4)); + } + + private void addExtractorRecipe(ItemStack input, FluidStack output) { + GTValues.RA.stdBuilder() + .itemInputs(input) + .fluidOutputs(output) + .duration(1 * SECONDS + 10 * TICKS) + .eut(8) + .addTo(fluidExtractionRecipes); + } + + private static boolean tryGetBeesBoolean() { + try { + Class mProxy = Class.forName("gregtech.GTMod.gregtechproxy"); + Field mNerf = FieldUtils.getDeclaredField(mProxy, "mGTBees", true); + boolean returnValue = (boolean) mNerf.get(GTMod.gregtechproxy); + return returnValue; + } catch (ClassNotFoundException | IllegalArgumentException | IllegalAccessException e) { + return false; + } + } + + private void setMaterials() { + try { + + Class gtBees = Class.forName("gregtech.loaders.misc.GTBees"); + Class gtCombItemClass = Class.forName("gregtech.common.items.ItemComb"); + Class gtCombEnumClass = Class.forName("gregtech.common.items.CombType"); + Field gtCombs = FieldUtils.getDeclaredField(gtBees, "combs", true); + gtCombs.setAccessible(true); + ReflectionUtils.makeFieldAccessible(gtCombs); + Enum gtCombTypeSlag = Enum.valueOf(gtCombEnumClass, "SLAG"); + Enum gtCombTypeStone = Enum.valueOf(gtCombEnumClass, "STONE"); + Object oCombObject = gtCombs.get(null); + + Logger.DEBUG_BEES("Field getModifiers: " + gtCombs.getModifiers()); + Logger.DEBUG_BEES("Field toGenericString: " + gtCombs.toGenericString()); + Logger.DEBUG_BEES("Field getClass: " + gtCombs.getClass()); + Logger.DEBUG_BEES("Field isEnumConstant: " + gtCombs.isEnumConstant()); + Logger.DEBUG_BEES("Field isSynthetic: " + gtCombs.isSynthetic()); + Logger.DEBUG_BEES("Field get(gtBees) != null: " + (gtCombs.get(gtBees) != null)); + Logger.DEBUG_BEES("Field isAccessible: " + gtCombs.isAccessible()); + + Logger.BEES("gtBees: " + (gtBees != null)); + Logger.BEES("gtCombItemClass: " + (gtCombItemClass != null)); + Logger.BEES("gtCombEnumClass: " + (gtCombEnumClass != null)); + Logger.BEES("gtCombs: " + (gtCombs != null)); + Logger.BEES("gtCombTypeSlag: " + (gtCombTypeSlag != null)); + Logger.BEES("gtCombTypeStone: " + (gtCombTypeStone != null)); + Logger.BEES("oCombObject: " + (oCombObject != null)); + + // if (gtCombItemClass.isInstance(oCombObject)){ + Method getStackForType; + getStackForType = gtCombItemClass.getDeclaredMethod("getStackForType", gtCombEnumClass); + + if (getStackForType != null) { + Logger.BEES("Found Method: getStackForType"); + } + if (Comb_Slag == null) { + Comb_Slag = (ItemStack) getStackForType.invoke(gtBees, gtCombTypeSlag); + } + if (Comb_Stone == null) { + Comb_Stone = (ItemStack) getStackForType.invoke(gtBees, gtCombTypeStone); + } + + } catch (NullPointerException | ClassNotFoundException | IllegalArgumentException | IllegalAccessException + | NoSuchMethodException | SecurityException | InvocationTargetException e) { + Logger.BEES("Bad Reflection. setMaterials()"); + } + + PTFE = trySetValue("Polytetrafluoroethylene"); + PBS = trySetValue("StyreneButadieneRubber"); + } + + private Materials trySetValue(String material) { + Materials mTemp = Materials.get(material); + if (mTemp != Materials._NULL) { + return mTemp; + } + return Materials._NULL; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBranchDefinition.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBranchDefinition.java new file mode 100644 index 0000000000..ca35849172 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPPBranchDefinition.java @@ -0,0 +1,76 @@ +package gtPlusPlus.xmod.forestry.bees.custom; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; + +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IClassification; +import gtPlusPlus.api.objects.Logger; + +public enum GTPPBranchDefinition { + + ORGANIC("ORGANIC"), + GEM("GEM"), + METAL("METAL"), + RAREMETAL("RAREMETAL"), + RADIOACTIVE("RADIOACTIVE"); + + final String mFieldName; + final Enum mActualValues; + + GTPPBranchDefinition(String mValue) { + this.mFieldName = mValue; + this.mActualValues = setEnumVar(mValue); + } + + public final IAllele[] getTemplate() { + Class gtBranchDefClass; + try { + gtBranchDefClass = Class.forName("gregtech.loaders.misc.GTBranchDefinition"); + Enum enumA = mActualValues; + Method methodMyMethod = gtBranchDefClass.getMethod("getTemplate"); + + Logger.INFO("[Bees] gtBranchDefClass: " + (gtBranchDefClass != null)); + Logger.INFO("[Bees] enumA: " + (enumA != null)); + Logger.INFO("[Bees] methodMyMethod: " + (methodMyMethod != null)); + + return (IAllele[]) methodMyMethod.invoke(enumA); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException + | IllegalArgumentException | InvocationTargetException e) { + Logger.INFO("[Bees] Bad Reflection. getTemplate()"); + e.printStackTrace(); + // gregtech.loaders.misc.GT_BranchDefinition.getTemplate() + return null; + } + } + + public final IClassification getBranch() { + Class gtBranchDefClass; + try { + gtBranchDefClass = Class.forName("gregtech.loaders.misc.GTBranchDefinition"); + Enum enum_MY_SAMPLE_ENUM = mActualValues; + Method methodMyMethod = gtBranchDefClass.getMethod("getBranch"); + + Logger.INFO("[Bees] gtBranchDefClass: " + (gtBranchDefClass != null)); + Logger.INFO("[Bees] enum_MY_SAMPLE_ENUM: " + (enum_MY_SAMPLE_ENUM != null)); + Logger.INFO("[Bees] methodMyMethod: " + (methodMyMethod != null)); + + return (IClassification) methodMyMethod.invoke(enum_MY_SAMPLE_ENUM); + } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException + | IllegalArgumentException | InvocationTargetException e) { + Logger.INFO("[Bees] Bad Reflection. getBranch()"); + e.printStackTrace(); + return null; + } + } + + private Enum setEnumVar(String value) { + try { + Class gtBranchDefClass = Class.forName("gregtech.loaders.misc.GTBranchDefinition"); + Enum branchDef = Enum.valueOf(gtBranchDefClass, value); + return branchDef; + } catch (ClassNotFoundException e) { + return null; + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bee_Definition.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bee_Definition.java deleted file mode 100644 index 0cdb49a9b5..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bee_Definition.java +++ /dev/null @@ -1,604 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.custom; - -import java.lang.reflect.Field; -import java.util.Arrays; -import java.util.Locale; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.BiomeDictionary.Type; - -import org.apache.commons.lang3.reflect.FieldUtils; -import org.apache.commons.lang3.text.WordUtils; - -import forestry.api.apiculture.BeeManager; -import forestry.api.apiculture.EnumBeeChromosome; -import forestry.api.apiculture.EnumBeeType; -import forestry.api.apiculture.IAlleleBeeSpecies; -import forestry.api.apiculture.IAlleleBeeSpeciesCustom; -import forestry.api.apiculture.IBee; -import forestry.api.apiculture.IBeeGenome; -import forestry.api.apiculture.IBeeMutationCustom; -import forestry.api.core.EnumHumidity; -import forestry.api.core.EnumTemperature; -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.IAllele; -import forestry.apiculture.genetics.Bee; -import forestry.apiculture.genetics.BeeDefinition; -import forestry.apiculture.genetics.BeeVariation; -import forestry.apiculture.genetics.IBeeDefinition; -import forestry.core.genetics.alleles.AlleleHelper; -import gregtech.loaders.misc.GT_BeeDefinition; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; - -public enum GTPP_Bee_Definition implements IBeeDefinition { - - SILICON(GTPP_Branch_Definition.ORGANIC, "Silicon", true, Utils.rgbtoHexValue(75, 75, 75), - Utils.rgbtoHexValue(125, 125, 125)) { - - @Override - protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - beeSpecies.addProduct(getSlagComb(), 0.10f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SILICON), 0.20f); - beeSpecies.setHumidity(EnumHumidity.NORMAL); - beeSpecies.setTemperature(EnumTemperature.NORMAL); - } - - @Override - protected void setAlleles(IAllele[] template) { - template = BeeDefinition.COMMON.getTemplate(); - } - - @Override - protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation( - getGregtechBeeType("SLIMEBALL"), - getGregtechBeeType("STICKYRESIN"), - 10); - } - }, - - RUBBER(GTPP_Branch_Definition.ORGANIC, "Rubber", true, Utils.rgbtoHexValue(55, 55, 55), - Utils.rgbtoHexValue(75, 75, 75)) { - - @Override - protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - beeSpecies.addProduct(getSlagComb(), 0.10f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.RUBBER), 0.30f); - beeSpecies.setHumidity(EnumHumidity.NORMAL); - beeSpecies.setTemperature(EnumTemperature.NORMAL); - } - - @Override - protected void setAlleles(IAllele[] template) { - template = BeeDefinition.COMMON.getTemplate(); - } - - @Override - protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation( - getGregtechBeeType("SLIMEBALL"), - getGregtechBeeType("STICKYRESIN"), - 10); - } - }, - - PLASTIC(GTPP_Branch_Definition.ORGANIC, "Plastic", true, Utils.rgbtoHexValue(245, 245, 245), - Utils.rgbtoHexValue(175, 175, 175)) { - - @Override - protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - beeSpecies.addProduct(getStoneComb(), 0.30f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.PLASTIC), 0.15f); - beeSpecies.setHumidity(EnumHumidity.NORMAL); - beeSpecies.setTemperature(EnumTemperature.NORMAL); - } - - @Override - protected void setAlleles(IAllele[] template) { - template = BeeDefinition.COMMON.getTemplate(); - } - - @Override - protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation(RUBBER.species, getGregtechBeeType("OIL"), 10); - } - }, - - PTFE(GTPP_Branch_Definition.ORGANIC, "Ptfe", true, Utils.rgbtoHexValue(150, 150, 150), - Utils.rgbtoHexValue(75, 75, 75)) { - - @Override - protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - beeSpecies.addProduct(getStoneComb(), 0.30f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.PTFE), 0.10f); - beeSpecies.setHumidity(EnumHumidity.NORMAL); - beeSpecies.setTemperature(EnumTemperature.NORMAL); - } - - @Override - protected void setAlleles(IAllele[] template) { - template = BeeDefinition.COMMON.getTemplate(); - } - - @Override - protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation(RUBBER.species, PLASTIC.species, 10); - } - }, - - PBS(GTPP_Branch_Definition.ORGANIC, "Pbs", true, Utils.rgbtoHexValue(33, 26, 24), Utils.rgbtoHexValue(23, 16, 14)) { - - @Override - protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - beeSpecies.addProduct(getStoneComb(), 0.30f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.PBS), 0.10f); - beeSpecies.setHumidity(EnumHumidity.NORMAL); - beeSpecies.setTemperature(EnumTemperature.NORMAL); - } - - @Override - protected void setAlleles(IAllele[] template) { - template = BeeDefinition.COMMON.getTemplate(); - } - - @Override - protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation(PTFE.species, PLASTIC.species, 10); - } - }, - - /** - * Fuels - */ - BIOMASS(GTPP_Branch_Definition.ORGANIC, "Biomass", true, Utils.rgbtoHexValue(33, 225, 24), - Utils.rgbtoHexValue(23, 175, 14)) { - - @Override - protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SAND), 0.40f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.BIOMASS), 0.20f); - beeSpecies.setHumidity(EnumHumidity.NORMAL); - beeSpecies.setTemperature(EnumTemperature.NORMAL); - } - - @Override - protected void setAlleles(IAllele[] template) { - template = BeeDefinition.COMMON.getTemplate(); - } - - @Override - protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation(getSpecies("Industrious"), getSpecies("Rural"), 10); - tMutation.restrictBiomeType(Type.FOREST); - } - }, - - ETHANOL(GTPP_Branch_Definition.ORGANIC, "Ethanol", true, Utils.rgbtoHexValue(255, 128, 0), - Utils.rgbtoHexValue(220, 156, 32)) { - - @Override - protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SAND), 0.40f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.ETHANOL), 0.20f); - beeSpecies.setHumidity(EnumHumidity.NORMAL); - beeSpecies.setTemperature(EnumTemperature.NORMAL); - } - - @Override - protected void setAlleles(IAllele[] template) { - template = BeeDefinition.COMMON.getTemplate(); - } - - @Override - protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation(BIOMASS.species, getSpecies("Farmerly"), 5); - tMutation.restrictBiomeType(Type.FOREST); - } - }, - - /** - * Materials - */ - FLUORINE(GTPP_Branch_Definition.ORGANIC, "Fluorine", true, Utils.rgbtoHexValue(30, 230, 230), - Utils.rgbtoHexValue(10, 150, 150)) { - - @Override - protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - beeSpecies.addProduct(getStoneComb(), 0.40f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.FLUORINE), 0.05f); - beeSpecies.setHumidity(EnumHumidity.NORMAL); - beeSpecies.setTemperature(EnumTemperature.COLD); - } - - @Override - protected void setAlleles(IAllele[] template) { - template = BeeDefinition.COMMON.getTemplate(); - } - - @Override - protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation( - getGregtechBeeType("LAPIS"), - getGregtechBeeType("SAPPHIRE"), - 5); - tMutation.restrictBiomeType(Type.COLD); - } - }, - - // Coke - - // Force - FORCE(GTPP_Branch_Definition.METAL, "Force", true, Utils.rgbtoHexValue(250, 250, 20), - Utils.rgbtoHexValue(200, 200, 5)) { - - @Override - protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - beeSpecies.addProduct(getStoneComb(), 0.30f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SAND), 0.25f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.FORCE), 0.25f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SALT), 0.05f); - beeSpecies.setHumidity(EnumHumidity.NORMAL); - beeSpecies.setTemperature(EnumTemperature.HOT); - } - - @Override - protected void setAlleles(IAllele[] template) { - template = BeeDefinition.COMMON.getTemplate(); - } - - @Override - protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation( - getGregtechBeeType("STEEL"), - getGregtechBeeType("GOLD"), - 10); - tMutation.restrictBiomeType(Type.HOT); - } - }, - - // Nikolite - NIKOLITE(GTPP_Branch_Definition.METAL, "Nikolite", true, Utils.rgbtoHexValue(60, 180, 200), - Utils.rgbtoHexValue(40, 150, 170)) { - - @Override - protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - beeSpecies.addProduct(getStoneComb(), 0.30f); - beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.NIKOLITE), 0.05f); - beeSpecies.setHumidity(EnumHumidity.NORMAL); - beeSpecies.setTemperature(EnumTemperature.HOT); - } - - @Override - protected void setAlleles(IAllele[] template) { - template = BeeDefinition.COMMON.getTemplate(); - } - - @Override - protected void registerMutations() { - IBeeMutationCustom tMutation = registerMutation( - getGregtechBeeType("ALUMINIUM"), - getGregtechBeeType("SILVER"), - 8); - tMutation.restrictBiomeType(Type.HOT); - } - }, - - /* - * CLAY(GTPP_Branch_Definition.ORGANIC, "Clay", true, 0x19d0ec, 0xffdc16) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GT_ModHandler.getModItem(GT_Values.MOD_ID_FR, "beeCombs", 1, 0), 0.30f); - * beeSpecies.addProduct(new ItemStack(Items.clay_ball, 1), 0.15f); beeSpecies.setHumidity(EnumHumidity.DAMP); - * beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.MEADOWS.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = - * registerMutation(getSpecies("Industrious"), getSpecies("Diligent"), 20); } }, - * SLIMEBALL(GTPP_Branch_Definition.ORGANIC, "SlimeBall", true, 0x4E9E55, 0x00FF15) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GT_ModHandler.getModItem(GT_Values.MOD_ID_FR, "beeCombs", 1, 15), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STICKY), 0.30f); - * beeSpecies.setHumidity(EnumHumidity.DAMP); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.MARSHY.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = - * registerMutation(getSpecies("Marshy"), CLAY.species, 15); } }, PEAT(GTPP_Branch_Definition.ORGANIC, "Peat", true, - * 0x906237, 0x58300B) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.LIGNIE), 0.30f); - * beeSpecies.addProduct(GT_ModHandler.getModItem(GT_Values.MOD_ID_FR, "beeCombs", 1, 0), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.RURAL.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = - * registerMutation(getSpecies("Rural"), CLAY.species, 20); } }, STICKYRESIN(GTPP_Branch_Definition.ORGANIC, - * "StickyResin", true, 0x2E8F5B, 0xDCC289) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GT_ModHandler.getModItem(GT_Values.MOD_ID_FR, "beeCombs", 1, 0), 0.30f); - * beeSpecies.addProduct(ItemList.IC2_Resin.get(1, new Object[0]), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.MEADOWS.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(SLIMEBALL.species, - * PEAT.species, 25); } }, COAL(GTPP_Branch_Definition.ORGANIC, "Coal", true, 0x666666, 0x525252) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.LIGNIE), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.COAL), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.AUSTERE.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = - * registerMutation(getSpecies("Industrious"), PEAT.species, 18); } }, OIL(GTPP_Branch_Definition.ORGANIC, "Oil", - * true, 0x4C4C4C, 0x333333) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GT_ModHandler.getModItem(GT_Values.MOD_ID_FR, "beeCombs", 1, 0), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.OIL), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.DAMP); beeSpecies.setTemperature(EnumTemperature.NORMAL); - * beeSpecies.setNocturnal(); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.MEADOWS.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(COAL.species, - * STICKYRESIN.species, 8); } }, REDSTONE(GTPP_Branch_Definition.GEM, "Redstone", true, 0x7D0F0F, 0xD11919) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.REDSTONE), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = - * registerMutation(getSpecies("Industrious"), getSpecies("Demonic"), 20); } }, LAPIS(GTPP_Branch_Definition.GEM, - * "Lapis", true, 0x1947D1, 0x476CDA) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.LAPIS), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = - * registerMutation(getSpecies("Demonic"), getSpecies("Imperial"), 20); } }, CERTUS(GTPP_Branch_Definition.GEM, - * "CertusQuartz", true, 0x57CFFB, 0xBBEEFF) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.CERTUS), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = - * registerMutation(getSpecies("Hermitic"), LAPIS.species, 20); } }, RUBY(GTPP_Branch_Definition.GEM, "Ruby", true, - * 0xE6005C, 0xCC0052) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.RUBY), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(REDSTONE.species, - * DIAMOND.species, 10); } }, SAPPHIRE(GTPP_Branch_Definition.GEM, "Sapphire", true, 0x0033CC, 0x00248F) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SAPPHIRE), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(CERTUS.species, - * LAPIS.species, 10); } }, DIAMOND(GTPP_Branch_Definition.GEM, "Diamond", true, 0xCCFFFF, 0xA3CCCC) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.DIAMOND), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(CERTUS.species, - * COAL.species, 6); } }, OLIVINE(GTPP_Branch_Definition.GEM, "Olivine", true, 0x248F24, 0xCCFFCC) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.OLIVINE), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(CERTUS.species, - * getSpecies("Ended"), 10); } }, EMERALD(GTPP_Branch_Definition.GEM, "Emerald", true, 0x248F24, 0x2EB82E) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STONE), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.EMERALD), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.COLD); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(OLIVINE.species, - * DIAMOND.species, 8); } }, COPPER(GTPP_Branch_Definition.METAL, "Copper", true, 0xFF6600, 0xE65C00) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.COPPER), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = - * registerMutation(getSpecies("Majestic"), CLAY.species, 25); } }, TIN(GTPP_Branch_Definition.METAL, "Tin", true, - * 0xD4D4D4, 0xDDDDDD) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.TIN), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(CLAY.species, - * getSpecies("Diligent"), 25); } }, LEAD(GTPP_Branch_Definition.METAL, "Lead", true, 0x666699, 0xA3A3CC) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.LEAD), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.DAMP); beeSpecies.setTemperature(EnumTemperature.WARM); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(COAL.species, - * COPPER.species, 25); } }, IRON(GTPP_Branch_Definition.METAL, "Iron", true, 0xDA9147, 0xDE9C59) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.IRON), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(TIN.species, - * COPPER.species, 25); } }, STEEL(GTPP_Branch_Definition.METAL, "Steel", true, 0x808080, 0x999999) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.STEEL), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(IRON.species, - * COAL.species, 20); } }, NICKEL(GTPP_Branch_Definition.METAL, "Nickel", true, 0x8585AD, 0x8585AD) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.NICKEL), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(IRON.species, - * COPPER.species, 25); } }, ZINC(GTPP_Branch_Definition.METAL, "Zinc", true, 0xF0DEF0, 0xF2E1F2) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.ZINC), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(IRON.species, - * TIN.species, 20); } }, SILVER(GTPP_Branch_Definition.METAL, "Silver", true, 0xC2C2D6, 0xCECEDE) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SILVER), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(LEAD.species, - * TIN.species, 20); } }, GOLD(GTPP_Branch_Definition.METAL, "Gold", true, 0xEBC633, 0xEDCC47) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.GOLD), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.NORMAL); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(LEAD.species, - * COPPER.species, 20); } }, ALUMINIUM(GTPP_Branch_Definition.RAREMETAL, "Aluminium", true, 0xB8B8FF, 0xD6D6FF) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.ALUMINIUM), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.ARID); beeSpecies.setTemperature(EnumTemperature.HOT); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(NICKEL.species, - * ZINC.species, 18); } }, TITANIUM(GTPP_Branch_Definition.RAREMETAL, "Titanium", true, 0xCC99FF, 0xDBB8FF) { - * @Override protected void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies) { - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.SLAG), 0.30f); - * beeSpecies.addProduct(GTPP_Bees.combs.getStackForType(CustomCombs.TITANIUM), 0.15f); - * beeSpecies.setHumidity(EnumHumidity.ARID); beeSpecies.setTemperature(EnumTemperature.HOT); } - * @Override protected void setAlleles(IAllele[] template) { template = BeeDefinition.COMMON.getTemplate(); } - * @Override protected void registerMutations() { IBeeMutationCustom tMutation = registerMutation(REDSTONE.species, - * ALUMINIUM.species, 5); } } - */ - - ; - - private final GTPP_Branch_Definition branch; - private final IAlleleBeeSpeciesCustom species; - - private IAllele[] template; - private IBeeGenome genome; - - GTPP_Bee_Definition(GTPP_Branch_Definition branch, String binomial, boolean dominant, int primary, int secondary) { - String lowercaseName = this.toString() - .toLowerCase(Locale.ENGLISH); - String species = "species" + WordUtils.capitalize(lowercaseName); - - String uid = "forestry." + species; - String description = "for.description." + species; - String name = "for.bees.species." + lowercaseName; - - this.branch = branch; - this.species = BeeManager.beeFactory.createSpecies( - uid, - dominant, - "Sengir", - name, - description, - branch.getBranch(), - binomial, - primary, - secondary); - } - - public static void initBees() { - for (GTPP_Bee_Definition bee : values()) { - bee.init(); - } - for (GTPP_Bee_Definition bee : values()) { - bee.registerMutations(); - } - } - - private static IAlleleBeeSpecies getSpecies(String name) { - return (IAlleleBeeSpecies) AlleleManager.alleleRegistry.getAllele( - (new StringBuilder()).append("forestry.species") - .append(name) - .toString()); - } - - protected abstract void setSpeciesProperties(IAlleleBeeSpeciesCustom beeSpecies); - - protected abstract void setAlleles(IAllele[] template); - - protected abstract void registerMutations(); - - private void init() { - setSpeciesProperties(species); - - template = branch.getTemplate(); - AlleleHelper.instance.set(template, EnumBeeChromosome.SPECIES, species); - setAlleles(template); - - genome = BeeManager.beeRoot.templateAsGenome(template); - - BeeManager.beeRoot.registerTemplate(template); - } - - protected final IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, IAlleleBeeSpecies parent2, - int chance) { - IAllele[] template = getTemplate(); - Logger.DEBUG_BEES("parent1: " + (parent1 != null)); - Logger.DEBUG_BEES("parent2: " + (parent2 != null)); - Logger.DEBUG_BEES("chance: " + (chance)); - Logger.DEBUG_BEES("template: " + (template != null)); - return BeeManager.beeMutationFactory.createMutation(parent1, parent2, template, chance); - } - - @Override - public final IAllele[] getTemplate() { - return Arrays.copyOf(template, template.length); - } - - @Override - public final IBeeGenome getGenome() { - return genome; - } - - @Override - public final IBee getIndividual() { - return new Bee(genome); - } - - @Override - public final ItemStack getMemberStack(EnumBeeType beeType) { - IBee bee = getIndividual(); - return BeeManager.beeRoot.getMemberStack(bee, beeType.ordinal()); - } - - public final IBeeDefinition getRainResist() { - return new BeeVariation.RainResist(this); - } - - private static ItemStack getSlagComb() { - return issStackValid(ItemUtils.getSimpleStack(GTPP_Bees.Comb_Slag, 1)); - } - - private static ItemStack getStoneComb() { - return issStackValid(ItemUtils.getSimpleStack(GTPP_Bees.Comb_Stone, 1)); - } - - private static ItemStack issStackValid(ItemStack result) { - if (result == null) { - return ItemUtils.getErrorStack(1); - } - return result; - } - - public static IAlleleBeeSpecies getGregtechBeeType(String name) { - try { - Enum gtBeeEnumObject = Enum.valueOf(GT_BeeDefinition.class, name); - Field gtBeesField = FieldUtils.getDeclaredField(GT_BeeDefinition.class, "species", true); - gtBeesField.setAccessible(true); - ReflectionUtils.makeFieldAccessible(gtBeesField); - Object beeType = gtBeesField.get(gtBeeEnumObject); - return (IAlleleBeeSpecies) beeType; - } catch (IllegalArgumentException | IllegalAccessException e) { - e.printStackTrace(); - } - return null; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bees.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bees.java deleted file mode 100644 index 4d04e3ad31..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Bees.java +++ /dev/null @@ -1,172 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.custom; - -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import gregtech.GT_Mod; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.item.base.ingots.BaseItemIngot_OLD; -import gtPlusPlus.core.item.base.misc.BaseItemMisc; -import gtPlusPlus.core.item.base.misc.BaseItemMisc.MiscTypes; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; - -public class GTPP_Bees { - - // Custom Comb Drop Base Items - public static Item dropForceGem; - public static Item dropBiomassBlob; - public static Item dropEthanolBlob; - public static Item dropNikoliteDust; - public static Item dropFluorineBlob; - - // Base Comb Item - public static ItemCustomComb combs; - - // Combs obtained via reflection - public static ItemStack Comb_Slag; - public static ItemStack Comb_Stone; - - // Materials obtained via reflection - public static Materials PTFE; - public static Materials PBS; - - // public static GTPP_Branch_Definition definition; - - public GTPP_Bees() { - if (Forestry.isModLoaded()) { - - // Set Materials and Comb stacks from GT via Reflection - setMaterials(); - setCustomItems(); - - try { - combs = new ItemCustomComb(); - combs.initCombsRecipes(); - GTPP_Bee_Definition.initBees(); - } catch (Throwable t) { - Logger.BEES("Failed to load bees, probably due to an ancient forestry version"); - t.printStackTrace(); - } - } - } - - private void setCustomItems() { - dropForceGem = new BaseItemMisc("Force", new short[] { 250, 250, 20 }, 64, MiscTypes.GEM, null); - dropBiomassBlob = new BaseItemMisc("Biomass", new short[] { 33, 225, 24 }, 64, MiscTypes.DROP, null); - dropEthanolBlob = new BaseItemMisc("Ethanol", new short[] { 255, 128, 0 }, 64, MiscTypes.DROP, null); - - // Nikolite may not exist, so lets make it. - dropNikoliteDust = ItemUtils - .generateSpecialUseDusts("Nikolite", "Nikolite", Utils.rgbtoHexValue(60, 180, 200))[2]; - - if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken("ingotNikolite", 1) == null) { - new BaseItemIngot_OLD("itemIngotNikolite", "Nikolite", Utils.rgbtoHexValue(60, 180, 200), 0); - } - - dropFluorineBlob = new BaseItemMisc("Fluorine", new short[] { 30, 230, 230 }, 64, MiscTypes.DROP, null); - addRecipes(); - } - - private void addRecipes() { - addExtractorRecipe(ItemUtils.getSimpleStack(dropBiomassBlob), FluidUtils.getFluidStack("biomass", 30)); - addExtractorRecipe(ItemUtils.getSimpleStack(dropEthanolBlob), FluidUtils.getFluidStack("ethanol", 6)); - addExtractorRecipe(ItemUtils.getSimpleStack(dropFluorineBlob), FluidUtils.getFluidStack("fluorine", 4)); - } - - private void addExtractorRecipe(ItemStack input, FluidStack output) { - GT_Values.RA.stdBuilder() - .itemInputs(input) - .fluidOutputs(output) - .duration(1 * SECONDS + 10 * TICKS) - .eut(8) - .addTo(fluidExtractionRecipes); - } - - private static boolean tryGetBeesBoolean() { - try { - Class mProxy = Class.forName("gregtech.GT_Mod.gregtechproxy"); - Field mNerf = FieldUtils.getDeclaredField(mProxy, "mGTBees", true); - boolean returnValue = (boolean) mNerf.get(GT_Mod.gregtechproxy); - return returnValue; - } catch (ClassNotFoundException | IllegalArgumentException | IllegalAccessException e) { - return false; - } - } - - private void setMaterials() { - try { - - Class gtBees = Class.forName("gregtech.loaders.misc.GT_Bees"); - Class gtCombItemClass = Class.forName("gregtech.common.items.ItemComb"); - Class gtCombEnumClass = Class.forName("gregtech.common.items.CombType"); - Field gtCombs = FieldUtils.getDeclaredField(gtBees, "combs", true); - gtCombs.setAccessible(true); - ReflectionUtils.makeFieldAccessible(gtCombs); - Enum gtCombTypeSlag = Enum.valueOf(gtCombEnumClass, "SLAG"); - Enum gtCombTypeStone = Enum.valueOf(gtCombEnumClass, "STONE"); - Object oCombObject = gtCombs.get(null); - - Logger.DEBUG_BEES("Field getModifiers: " + gtCombs.getModifiers()); - Logger.DEBUG_BEES("Field toGenericString: " + gtCombs.toGenericString()); - Logger.DEBUG_BEES("Field getClass: " + gtCombs.getClass()); - Logger.DEBUG_BEES("Field isEnumConstant: " + gtCombs.isEnumConstant()); - Logger.DEBUG_BEES("Field isSynthetic: " + gtCombs.isSynthetic()); - Logger.DEBUG_BEES("Field get(gtBees) != null: " + (gtCombs.get(gtBees) != null)); - Logger.DEBUG_BEES("Field isAccessible: " + gtCombs.isAccessible()); - - Logger.BEES("gtBees: " + (gtBees != null)); - Logger.BEES("gtCombItemClass: " + (gtCombItemClass != null)); - Logger.BEES("gtCombEnumClass: " + (gtCombEnumClass != null)); - Logger.BEES("gtCombs: " + (gtCombs != null)); - Logger.BEES("gtCombTypeSlag: " + (gtCombTypeSlag != null)); - Logger.BEES("gtCombTypeStone: " + (gtCombTypeStone != null)); - Logger.BEES("oCombObject: " + (oCombObject != null)); - - // if (gtCombItemClass.isInstance(oCombObject)){ - Method getStackForType; - getStackForType = gtCombItemClass.getDeclaredMethod("getStackForType", gtCombEnumClass); - - if (getStackForType != null) { - Logger.BEES("Found Method: getStackForType"); - } - if (Comb_Slag == null) { - Comb_Slag = (ItemStack) getStackForType.invoke(gtBees, gtCombTypeSlag); - } - if (Comb_Stone == null) { - Comb_Stone = (ItemStack) getStackForType.invoke(gtBees, gtCombTypeStone); - } - - } catch (NullPointerException | ClassNotFoundException | IllegalArgumentException | IllegalAccessException - | NoSuchMethodException | SecurityException | InvocationTargetException e) { - Logger.BEES("Bad Reflection. setMaterials()"); - } - - PTFE = trySetValue("Polytetrafluoroethylene"); - PBS = trySetValue("StyreneButadieneRubber"); - } - - private Materials trySetValue(String material) { - Materials mTemp = Materials.get(material); - if (mTemp != Materials._NULL) { - return mTemp; - } - return Materials._NULL; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Branch_Definition.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Branch_Definition.java deleted file mode 100644 index 94e6078c49..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/GTPP_Branch_Definition.java +++ /dev/null @@ -1,76 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.custom; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; - -import forestry.api.genetics.IAllele; -import forestry.api.genetics.IClassification; -import gtPlusPlus.api.objects.Logger; - -public enum GTPP_Branch_Definition { - - ORGANIC("ORGANIC"), - GEM("GEM"), - METAL("METAL"), - RAREMETAL("RAREMETAL"), - RADIOACTIVE("RADIOACTIVE"); - - final String mFieldName; - final Enum mActualValues; - - GTPP_Branch_Definition(String mValue) { - this.mFieldName = mValue; - this.mActualValues = setEnumVar(mValue); - } - - public final IAllele[] getTemplate() { - Class gtBranchDefClass; - try { - gtBranchDefClass = Class.forName("gregtech.loaders.misc.GT_BranchDefinition"); - Enum enumA = mActualValues; - Method methodMyMethod = gtBranchDefClass.getMethod("getTemplate"); - - Logger.INFO("[Bees] gtBranchDefClass: " + (gtBranchDefClass != null)); - Logger.INFO("[Bees] enumA: " + (enumA != null)); - Logger.INFO("[Bees] methodMyMethod: " + (methodMyMethod != null)); - - return (IAllele[]) methodMyMethod.invoke(enumA); - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException - | IllegalArgumentException | InvocationTargetException e) { - Logger.INFO("[Bees] Bad Reflection. getTemplate()"); - e.printStackTrace(); - // gregtech.loaders.misc.GT_BranchDefinition.getTemplate() - return null; - } - } - - public final IClassification getBranch() { - Class gtBranchDefClass; - try { - gtBranchDefClass = Class.forName("gregtech.loaders.misc.GT_BranchDefinition"); - Enum enum_MY_SAMPLE_ENUM = mActualValues; - Method methodMyMethod = gtBranchDefClass.getMethod("getBranch"); - - Logger.INFO("[Bees] gtBranchDefClass: " + (gtBranchDefClass != null)); - Logger.INFO("[Bees] enum_MY_SAMPLE_ENUM: " + (enum_MY_SAMPLE_ENUM != null)); - Logger.INFO("[Bees] methodMyMethod: " + (methodMyMethod != null)); - - return (IClassification) methodMyMethod.invoke(enum_MY_SAMPLE_ENUM); - } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException - | IllegalArgumentException | InvocationTargetException e) { - Logger.INFO("[Bees] Bad Reflection. getBranch()"); - e.printStackTrace(); - return null; - } - } - - private Enum setEnumVar(String value) { - try { - Class gtBranchDefClass = Class.forName("gregtech.loaders.misc.GT_BranchDefinition"); - Enum branchDef = Enum.valueOf(gtBranchDefClass, value); - return branchDef; - } catch (ClassNotFoundException e) { - return null; - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/ItemCustomComb.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/ItemCustomComb.java index 63c0ae53ec..0ff3625a25 100644 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/ItemCustomComb.java +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/custom/ItemCustomComb.java @@ -2,8 +2,8 @@ package gtPlusPlus.xmod.forestry.bees.custom; import static gregtech.api.enums.Mods.GTPlusPlus; import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; import java.util.List; @@ -17,11 +17,11 @@ import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import forestry.api.core.Tabs; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.core.util.minecraft.ItemUtils; public class ItemCustomComb extends Item { @@ -101,37 +101,37 @@ public class ItemCustomComb extends Item { ItemStack tComb; tComb = getStackForType(CustomCombs.SILICON); - addSpecialCent(tComb, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Silicon, 1), 30); + addSpecialCent(tComb, GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Silicon, 1), 30); // addProcess(tComb, Materials.Silver, 100); // addProcess(tComb, Materials.Galena, 100); // Rubbers tComb = getStackForType(CustomCombs.RUBBER); - addSpecialCent(tComb, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Rubber, 1), 30); + addSpecialCent(tComb, GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Rubber, 1), 30); tComb = getStackForType(CustomCombs.PLASTIC); - addSpecialCent(tComb, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plastic, 1), 20); + addSpecialCent(tComb, GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plastic, 1), 20); tComb = getStackForType(CustomCombs.PTFE); - addSpecialCent(tComb, GT_OreDictUnificator.get(OrePrefixes.dustTiny, GTPP_Bees.PTFE, 1), 10); + addSpecialCent(tComb, GTOreDictUnificator.get(OrePrefixes.dustTiny, GTPPBees.PTFE, 1), 10); tComb = getStackForType(CustomCombs.PBS); - addSpecialCent(tComb, GT_OreDictUnificator.get(OrePrefixes.dustTiny, GTPP_Bees.PBS, 1), 5); + addSpecialCent(tComb, GTOreDictUnificator.get(OrePrefixes.dustTiny, GTPPBees.PBS, 1), 5); // Fuels tComb = getStackForType(CustomCombs.BIOMASS); - addSpecialCent(tComb, ItemUtils.getSimpleStack(GTPP_Bees.dropBiomassBlob), 5); + addSpecialCent(tComb, ItemUtils.getSimpleStack(GTPPBees.dropBiomassBlob), 5); tComb = getStackForType(CustomCombs.PBS); - addSpecialCent(tComb, ItemUtils.getSimpleStack(GTPP_Bees.dropEthanolBlob), 5); + addSpecialCent(tComb, ItemUtils.getSimpleStack(GTPPBees.dropEthanolBlob), 5); // Misc Materials tComb = getStackForType(CustomCombs.FORCE); - addSpecialCent(tComb, ItemUtils.getSimpleStack(GTPP_Bees.dropForceGem), 5); + addSpecialCent(tComb, ItemUtils.getSimpleStack(GTPPBees.dropForceGem), 5); tComb = getStackForType(CustomCombs.FLUORINE); - addSpecialCent(tComb, ItemUtils.getSimpleStack(GTPP_Bees.dropFluorineBlob), 5); + addSpecialCent(tComb, ItemUtils.getSimpleStack(GTPPBees.dropFluorineBlob), 5); tComb = getStackForType(CustomCombs.NIKOLITE); - addSpecialCent(tComb, ItemUtils.getSimpleStack(GTPP_Bees.dropNikoliteDust), 5); + addSpecialCent(tComb, ItemUtils.getSimpleStack(GTPPBees.dropNikoliteDust), 5); } public void addSpecialCent(ItemStack tComb, ItemStack aOutput, int chance) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(tComb) .itemOutputs(aOutput, ItemList.FR_Wax.get(1)) .outputChances(chance * 100, 3000) diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPCombType.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPCombType.java new file mode 100644 index 0000000000..6c594fc83a --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPCombType.java @@ -0,0 +1,62 @@ +package gtPlusPlus.xmod.forestry.bees.handler; + +import net.minecraft.item.ItemStack; + +import gregtech.api.util.GTLanguageManager; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; + +public enum GTPPCombType { + + DRAGONBLOOD(0, "Dragonblood", true, 30, Utils.rgbtoHexValue(220, 20, 20), Utils.rgbtoHexValue(20, 20, 20)), + FORCE(1, "Force", true, 30, Utils.rgbtoHexValue(250, 250, 20), Utils.rgbtoHexValue(200, 200, 5)); + + public boolean mShowInList; + public final Material mMaterial; + public final int mChance; + public final int mID; + + private final String mName; + private final String mNameUnlocal; + private final int[] mColour; + + private static void map(int aId, GTPPCombType aType) { + GTPP_Bees.sCombMappings.put(aId, aType); + } + + public static GTPPCombType get(int aID) { + return GTPP_Bees.sCombMappings.get(aID); + } + + GTPPCombType(int aID, String aName, boolean aShow, int aChance, int... aColour) { + this.mID = aID; + this.mName = aName; + this.mNameUnlocal = aName.toLowerCase() + .replaceAll(" ", ""); + this.mChance = aChance; + this.mShowInList = aShow; + this.mColour = aColour; + map(aID, this); + this.mMaterial = GTPP_Bees.sMaterialMappings.get( + aName.toLowerCase() + .replaceAll(" ", "")); + GTLanguageManager.addStringLocalization("gtplusplus.comb." + this.mNameUnlocal, this.mName + " Comb"); + } + + public void setHidden() { + this.mShowInList = false; + } + + public String getName() { + return GTLanguageManager.getTranslation("gtplusplus.comb." + this.mNameUnlocal); + } + + public int[] getColours() { + return mColour == null || mColour.length != 2 ? new int[] { 0, 0 } : mColour; + } + + public ItemStack getStackForType(int count) { + return new ItemStack(GTPP_Bees.combs, count, mID); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPDropType.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPDropType.java new file mode 100644 index 0000000000..0ae34d599c --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPDropType.java @@ -0,0 +1,61 @@ +package gtPlusPlus.xmod.forestry.bees.handler; + +import net.minecraft.item.ItemStack; + +import gregtech.api.util.GTLanguageManager; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; + +public enum GTPPDropType { + + DRAGONBLOOD(0, "Dragonblood", true, Utils.rgbtoHexValue(220, 20, 20), Utils.rgbtoHexValue(20, 20, 20)), + FORCE(1, "Force", true, Utils.rgbtoHexValue(250, 250, 20), Utils.rgbtoHexValue(200, 200, 5)); + + public boolean mShowInList; + public final Material mMaterial; + public int mChance; + public final int mID; + + private final String mName; + private final String mNameUnlocal; + private final int[] mColour; + + private static void map(int aId, GTPPDropType aType) { + GTPP_Bees.sDropMappings.put(aId, aType); + } + + public static GTPPDropType get(int aID) { + return GTPP_Bees.sDropMappings.get(aID); + } + + private GTPPDropType(int aID, String aName, boolean aShow, int... aColour) { + this.mID = aID; + this.mName = aName; + this.mNameUnlocal = aName.toLowerCase() + .replaceAll(" ", ""); + this.mShowInList = aShow; + this.mColour = aColour; + map(aID, this); + this.mMaterial = GTPP_Bees.sMaterialMappings.get( + aName.toLowerCase() + .replaceAll(" ", "")); + GTLanguageManager.addStringLocalization("gtplusplus.drop." + this.mNameUnlocal, this.mName + " Drop"); + } + + public void setHidden() { + this.mShowInList = false; + } + + public String getName() { + return GTLanguageManager.getTranslation("gtplusplus.drop." + this.mNameUnlocal); + } + + public int[] getColours() { + return mColour; + } + + public ItemStack getStackForType(int count) { + return new ItemStack(GTPP_Bees.drop, count, mID); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPPollenType.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPPollenType.java new file mode 100644 index 0000000000..08b8f84dca --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPPollenType.java @@ -0,0 +1,60 @@ +package gtPlusPlus.xmod.forestry.bees.handler; + +import net.minecraft.item.ItemStack; + +import gregtech.api.util.GTLanguageManager; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; + +public enum GTPPPollenType { + + DRAGONBLOOD(0, "Dragonblood", true, Utils.rgbtoHexValue(220, 20, 20), Utils.rgbtoHexValue(20, 20, 20)); + + public boolean mShowInList; + public final Material mMaterial; + public int mChance; + public final int mID; + + private final String mName; + private final String mNameUnlocal; + private final int[] mColour; + + private static void map(int aId, GTPPPollenType aType) { + GTPP_Bees.sPollenMappings.put(aId, aType); + } + + public static GTPPPollenType get(int aID) { + return GTPP_Bees.sPollenMappings.get(aID); + } + + private GTPPPollenType(int aID, String aName, boolean aShow, int... aColour) { + this.mID = aID; + this.mName = aName; + this.mNameUnlocal = aName.toLowerCase() + .replaceAll(" ", ""); + this.mShowInList = aShow; + this.mColour = aColour; + map(aID, this); + this.mMaterial = GTPP_Bees.sMaterialMappings.get( + aName.toLowerCase() + .replaceAll(" ", "")); + GTLanguageManager.addStringLocalization("gtplusplus.pollen." + this.mNameUnlocal, this.mName + " Pollen"); + } + + public void setHidden() { + this.mShowInList = false; + } + + public String getName() { + return GTLanguageManager.getTranslation("gtplusplus.pollen." + this.mNameUnlocal); + } + + public int[] getColours() { + return mColour; + } + + public ItemStack getStackForType(int count) { + return new ItemStack(GTPP_Bees.pollen, count, mID); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPPropolisType.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPPropolisType.java new file mode 100644 index 0000000000..f97da9f4df --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPPPropolisType.java @@ -0,0 +1,61 @@ +package gtPlusPlus.xmod.forestry.bees.handler; + +import net.minecraft.item.ItemStack; + +import gregtech.api.util.GTLanguageManager; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; + +public enum GTPPPropolisType { + + DRAGONBLOOD(0, "Dragonblood", true, Utils.rgbtoHexValue(220, 20, 20)), + FORCE(1, "Force", true, Utils.rgbtoHexValue(250, 250, 20)); + + public boolean mShowInList; + public final Material mMaterial; + public int mChance; + public final int mID; + + private final String mName; + private final String mNameUnlocal; + private final int mColour; + + private static void map(int aId, GTPPPropolisType aType) { + GTPP_Bees.sPropolisMappings.put(aId, aType); + } + + public static GTPPPropolisType get(int aID) { + return GTPP_Bees.sPropolisMappings.get(aID); + } + + private GTPPPropolisType(int aID, String aName, boolean aShow, int aColour) { + this.mID = aID; + this.mName = aName; + this.mNameUnlocal = aName.toLowerCase() + .replaceAll(" ", ""); + this.mShowInList = aShow; + this.mColour = aColour; + map(aID, this); + this.mMaterial = GTPP_Bees.sMaterialMappings.get( + aName.toLowerCase() + .replaceAll(" ", "")); + GTLanguageManager.addStringLocalization("gtplusplus.propolis." + this.mNameUnlocal, this.mName + " Propolis"); + } + + public void setHidden() { + this.mShowInList = false; + } + + public String getName() { + return GTLanguageManager.getTranslation("gtplusplus.propolis." + this.mNameUnlocal); + } + + public int getColours() { + return mColour; + } + + public ItemStack getStackForType(int count) { + return new ItemStack(GTPP_Bees.propolis, count, mID); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_CombType.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_CombType.java deleted file mode 100644 index be1aa48d3c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_CombType.java +++ /dev/null @@ -1,62 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.handler; - -import net.minecraft.item.ItemStack; - -import gregtech.api.util.GT_LanguageManager; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; - -public enum GTPP_CombType { - - DRAGONBLOOD(0, "Dragonblood", true, 30, Utils.rgbtoHexValue(220, 20, 20), Utils.rgbtoHexValue(20, 20, 20)), - FORCE(1, "Force", true, 30, Utils.rgbtoHexValue(250, 250, 20), Utils.rgbtoHexValue(200, 200, 5)); - - public boolean mShowInList; - public final Material mMaterial; - public final int mChance; - public final int mID; - - private final String mName; - private final String mNameUnlocal; - private final int[] mColour; - - private static void map(int aId, GTPP_CombType aType) { - GTPP_Bees.sCombMappings.put(aId, aType); - } - - public static GTPP_CombType get(int aID) { - return GTPP_Bees.sCombMappings.get(aID); - } - - GTPP_CombType(int aID, String aName, boolean aShow, int aChance, int... aColour) { - this.mID = aID; - this.mName = aName; - this.mNameUnlocal = aName.toLowerCase() - .replaceAll(" ", ""); - this.mChance = aChance; - this.mShowInList = aShow; - this.mColour = aColour; - map(aID, this); - this.mMaterial = GTPP_Bees.sMaterialMappings.get( - aName.toLowerCase() - .replaceAll(" ", "")); - GT_LanguageManager.addStringLocalization("gtplusplus.comb." + this.mNameUnlocal, this.mName + " Comb"); - } - - public void setHidden() { - this.mShowInList = false; - } - - public String getName() { - return GT_LanguageManager.getTranslation("gtplusplus.comb." + this.mNameUnlocal); - } - - public int[] getColours() { - return mColour == null || mColour.length != 2 ? new int[] { 0, 0 } : mColour; - } - - public ItemStack getStackForType(int count) { - return new ItemStack(GTPP_Bees.combs, count, mID); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_DropType.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_DropType.java deleted file mode 100644 index 089b8cebf1..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_DropType.java +++ /dev/null @@ -1,61 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.handler; - -import net.minecraft.item.ItemStack; - -import gregtech.api.util.GT_LanguageManager; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; - -public enum GTPP_DropType { - - DRAGONBLOOD(0, "Dragonblood", true, Utils.rgbtoHexValue(220, 20, 20), Utils.rgbtoHexValue(20, 20, 20)), - FORCE(1, "Force", true, Utils.rgbtoHexValue(250, 250, 20), Utils.rgbtoHexValue(200, 200, 5)); - - public boolean mShowInList; - public final Material mMaterial; - public int mChance; - public final int mID; - - private final String mName; - private final String mNameUnlocal; - private final int[] mColour; - - private static void map(int aId, GTPP_DropType aType) { - GTPP_Bees.sDropMappings.put(aId, aType); - } - - public static GTPP_DropType get(int aID) { - return GTPP_Bees.sDropMappings.get(aID); - } - - private GTPP_DropType(int aID, String aName, boolean aShow, int... aColour) { - this.mID = aID; - this.mName = aName; - this.mNameUnlocal = aName.toLowerCase() - .replaceAll(" ", ""); - this.mShowInList = aShow; - this.mColour = aColour; - map(aID, this); - this.mMaterial = GTPP_Bees.sMaterialMappings.get( - aName.toLowerCase() - .replaceAll(" ", "")); - GT_LanguageManager.addStringLocalization("gtplusplus.drop." + this.mNameUnlocal, this.mName + " Drop"); - } - - public void setHidden() { - this.mShowInList = false; - } - - public String getName() { - return GT_LanguageManager.getTranslation("gtplusplus.drop." + this.mNameUnlocal); - } - - public int[] getColours() { - return mColour; - } - - public ItemStack getStackForType(int count) { - return new ItemStack(GTPP_Bees.drop, count, mID); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_PollenType.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_PollenType.java deleted file mode 100644 index 56a8f37daf..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_PollenType.java +++ /dev/null @@ -1,60 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.handler; - -import net.minecraft.item.ItemStack; - -import gregtech.api.util.GT_LanguageManager; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; - -public enum GTPP_PollenType { - - DRAGONBLOOD(0, "Dragonblood", true, Utils.rgbtoHexValue(220, 20, 20), Utils.rgbtoHexValue(20, 20, 20)); - - public boolean mShowInList; - public final Material mMaterial; - public int mChance; - public final int mID; - - private final String mName; - private final String mNameUnlocal; - private final int[] mColour; - - private static void map(int aId, GTPP_PollenType aType) { - GTPP_Bees.sPollenMappings.put(aId, aType); - } - - public static GTPP_PollenType get(int aID) { - return GTPP_Bees.sPollenMappings.get(aID); - } - - private GTPP_PollenType(int aID, String aName, boolean aShow, int... aColour) { - this.mID = aID; - this.mName = aName; - this.mNameUnlocal = aName.toLowerCase() - .replaceAll(" ", ""); - this.mShowInList = aShow; - this.mColour = aColour; - map(aID, this); - this.mMaterial = GTPP_Bees.sMaterialMappings.get( - aName.toLowerCase() - .replaceAll(" ", "")); - GT_LanguageManager.addStringLocalization("gtplusplus.pollen." + this.mNameUnlocal, this.mName + " Pollen"); - } - - public void setHidden() { - this.mShowInList = false; - } - - public String getName() { - return GT_LanguageManager.getTranslation("gtplusplus.pollen." + this.mNameUnlocal); - } - - public int[] getColours() { - return mColour; - } - - public ItemStack getStackForType(int count) { - return new ItemStack(GTPP_Bees.pollen, count, mID); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_PropolisType.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_PropolisType.java deleted file mode 100644 index fc70d6232e..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/handler/GTPP_PropolisType.java +++ /dev/null @@ -1,61 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.handler; - -import net.minecraft.item.ItemStack; - -import gregtech.api.util.GT_LanguageManager; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; - -public enum GTPP_PropolisType { - - DRAGONBLOOD(0, "Dragonblood", true, Utils.rgbtoHexValue(220, 20, 20)), - FORCE(1, "Force", true, Utils.rgbtoHexValue(250, 250, 20)); - - public boolean mShowInList; - public final Material mMaterial; - public int mChance; - public final int mID; - - private final String mName; - private final String mNameUnlocal; - private final int mColour; - - private static void map(int aId, GTPP_PropolisType aType) { - GTPP_Bees.sPropolisMappings.put(aId, aType); - } - - public static GTPP_PropolisType get(int aID) { - return GTPP_Bees.sPropolisMappings.get(aID); - } - - private GTPP_PropolisType(int aID, String aName, boolean aShow, int aColour) { - this.mID = aID; - this.mName = aName; - this.mNameUnlocal = aName.toLowerCase() - .replaceAll(" ", ""); - this.mShowInList = aShow; - this.mColour = aColour; - map(aID, this); - this.mMaterial = GTPP_Bees.sMaterialMappings.get( - aName.toLowerCase() - .replaceAll(" ", "")); - GT_LanguageManager.addStringLocalization("gtplusplus.propolis." + this.mNameUnlocal, this.mName + " Propolis"); - } - - public void setHidden() { - this.mShowInList = false; - } - - public String getName() { - return GT_LanguageManager.getTranslation("gtplusplus.propolis." + this.mNameUnlocal); - } - - public int getColours() { - return mColour; - } - - public ItemStack getStackForType(int count) { - return new ItemStack(GTPP_Bees.propolis, count, mID); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FRItemRegistry.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FRItemRegistry.java new file mode 100644 index 0000000000..ab2353cc37 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FRItemRegistry.java @@ -0,0 +1,120 @@ +/******************************************************************************* + * Copyright (c) 2011-2014 SirSengir. All rights reserved. This program and the accompanying materials are made + * available under the terms of the GNU Lesser Public License v3 which accompanies this distribution, and is available + * at http://www.gnu.org/licenses/lgpl-3.0.txt + * + * Various Contributors including, but not limited to: SirSengir (original work), CovertJaguar, Player, Binnie, + * MysteriousAges + ******************************************************************************/ +package gtPlusPlus.xmod.forestry.bees.items; + +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.WeightedRandomChestContent; +import net.minecraftforge.common.ChestGenHooks; + +import cpw.mods.fml.common.Optional; +import cpw.mods.fml.common.registry.GameRegistry; +import forestry.core.utils.StringUtil; +import gregtech.api.enums.Mods; + +public class FRItemRegistry { + + // ----- Apiary Frames ---------------------- + + // Magic Bee Frame Items + public static MBItemFrame hiveFrameAccelerated; + public static MBItemFrame hiveFrameVoid; + public static MBItemFrame hiveFrameMutagenic; + public static MBItemFrame hiveFrameBusy; + + // Extra Bee Frame Items + public static MBItemFrame hiveFrameCocoa; + public static MBItemFrame hiveFrameCaged; + public static MBItemFrame hiveFrameSoul; + public static MBItemFrame hiveFrameClay; + public static MBItemFrame hiveFrameNova; + + // Frame Items added by bartimaeusnek + public static MBItemFrame hiveFrameDecay; + public static MBItemFrame hiveFrameSlow; + public static MBItemFrame hiveFrameStalilize; + public static MBItemFrame hiveFrameArborist; + + @Optional.Method(modid = Mods.Names.FORESTRY) + public static void Register() { + + // Forestry Frames + // frameUntreated = registerItem(new FR_ItemHiveFrame(80, 0.9f), "frameUntreated"); + // frameImpregnated = registerItem(new FR_ItemHiveFrame(240, 0.4f), "frameImpregnated"); + // frameProven = registerItem(new FR_ItemHiveFrame(720, 0.3f), "frameProven"); + + // Magic Bee like Frames + + hiveFrameVoid = new MBItemFrame( + MBFrameType.USELESS, + EnumRarity.common, + "No more cheaty frames for GTNH players."); + + hiveFrameAccelerated = new MBItemFrame( + MBFrameType.ACCELERATED, + "Longevity for bees isn't very common, especially if they're working harder."); + hiveFrameMutagenic = new MBItemFrame( + MBFrameType.MUTAGENIC, + EnumRarity.epic, + "Evolution of the fittest, finest and fastest."); + hiveFrameBusy = new MBItemFrame(MBFrameType.BUSY, "Your bee will work harder and longer than you expected."); + ChestGenHooks.addItem( + ChestGenHooks.STRONGHOLD_CORRIDOR, + new WeightedRandomChestContent(new ItemStack(hiveFrameVoid), 1, 1, 14)); + ChestGenHooks.addItem( + ChestGenHooks.STRONGHOLD_LIBRARY, + new WeightedRandomChestContent(new ItemStack(hiveFrameVoid), 1, 3, 18)); + ChestGenHooks.addItem( + ChestGenHooks.DUNGEON_CHEST, + new WeightedRandomChestContent(new ItemStack(hiveFrameVoid), 1, 1, 14)); + ChestGenHooks.addItem( + ChestGenHooks.MINESHAFT_CORRIDOR, + new WeightedRandomChestContent(new ItemStack(hiveFrameVoid), 1, 1, 9)); + ChestGenHooks.addItem( + ChestGenHooks.PYRAMID_DESERT_CHEST, + new WeightedRandomChestContent(new ItemStack(hiveFrameMutagenic), 1, 1, 9)); + ChestGenHooks.addItem( + ChestGenHooks.PYRAMID_JUNGLE_CHEST, + new WeightedRandomChestContent(new ItemStack(hiveFrameMutagenic), 1, 3, 12)); + ChestGenHooks.addItem( + ChestGenHooks.MINESHAFT_CORRIDOR, + new WeightedRandomChestContent(new ItemStack(hiveFrameMutagenic), 1, 3, 8)); + ChestGenHooks.addItem( + ChestGenHooks.DUNGEON_CHEST, + new WeightedRandomChestContent(new ItemStack(hiveFrameMutagenic), 1, 3, 12)); + + // Frame Items added by bartimaeusnek + hiveFrameDecay = new MBItemFrame( + MBFrameType.DECAYING, + EnumRarity.uncommon, + "Who really needs stable genetics?"); + hiveFrameSlow = new MBItemFrame(MBFrameType.SLOWING, EnumRarity.common, "The journey is its own reward."); + hiveFrameStalilize = new MBItemFrame( + MBFrameType.STABILIZING, + EnumRarity.rare, + "If you wish your bees to keep their form."); + hiveFrameArborist = new MBItemFrame( + MBFrameType.ARBORISTS, + EnumRarity.common, + "Who need Bees when you can have Trees?"); + ChestGenHooks.addItem( + ChestGenHooks.PYRAMID_JUNGLE_CHEST, + new WeightedRandomChestContent(new ItemStack(hiveFrameArborist), 1, 4, 24)); + ChestGenHooks.addItem( + ChestGenHooks.STRONGHOLD_LIBRARY, + new WeightedRandomChestContent(new ItemStack(hiveFrameSlow), 1, 4, 24)); + } + + protected static T registerItem(final T item, final String name) { + item.setUnlocalizedName(name); + GameRegistry.registerItem(item, StringUtil.cleanItemName(item)); + return item; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FRStringUtil.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FRStringUtil.java new file mode 100644 index 0000000000..80b44268c5 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FRStringUtil.java @@ -0,0 +1,14 @@ +package gtPlusPlus.xmod.forestry.bees.items; + +import net.minecraft.util.StatCollector; + +public class FRStringUtil { + + public static String getLocalizedString(final String key) { + if (StatCollector.canTranslate(key)) { + return StatCollector.translateToLocal(key); + } + return StatCollector.translateToFallback(key); + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FR_ItemRegistry.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FR_ItemRegistry.java deleted file mode 100644 index b61a91710e..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FR_ItemRegistry.java +++ /dev/null @@ -1,120 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2011-2014 SirSengir. All rights reserved. This program and the accompanying materials are made - * available under the terms of the GNU Lesser Public License v3 which accompanies this distribution, and is available - * at http://www.gnu.org/licenses/lgpl-3.0.txt - * - * Various Contributors including, but not limited to: SirSengir (original work), CovertJaguar, Player, Binnie, - * MysteriousAges - ******************************************************************************/ -package gtPlusPlus.xmod.forestry.bees.items; - -import net.minecraft.item.EnumRarity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.WeightedRandomChestContent; -import net.minecraftforge.common.ChestGenHooks; - -import cpw.mods.fml.common.Optional; -import cpw.mods.fml.common.registry.GameRegistry; -import forestry.core.utils.StringUtil; -import gregtech.api.enums.Mods; - -public class FR_ItemRegistry { - - // ----- Apiary Frames ---------------------- - - // Magic Bee Frame Items - public static MB_ItemFrame hiveFrameAccelerated; - public static MB_ItemFrame hiveFrameVoid; - public static MB_ItemFrame hiveFrameMutagenic; - public static MB_ItemFrame hiveFrameBusy; - - // Extra Bee Frame Items - public static MB_ItemFrame hiveFrameCocoa; - public static MB_ItemFrame hiveFrameCaged; - public static MB_ItemFrame hiveFrameSoul; - public static MB_ItemFrame hiveFrameClay; - public static MB_ItemFrame hiveFrameNova; - - // Frame Items added by bartimaeusnek - public static MB_ItemFrame hiveFrameDecay; - public static MB_ItemFrame hiveFrameSlow; - public static MB_ItemFrame hiveFrameStalilize; - public static MB_ItemFrame hiveFrameArborist; - - @Optional.Method(modid = Mods.Names.FORESTRY) - public static void Register() { - - // Forestry Frames - // frameUntreated = registerItem(new FR_ItemHiveFrame(80, 0.9f), "frameUntreated"); - // frameImpregnated = registerItem(new FR_ItemHiveFrame(240, 0.4f), "frameImpregnated"); - // frameProven = registerItem(new FR_ItemHiveFrame(720, 0.3f), "frameProven"); - - // Magic Bee like Frames - - hiveFrameVoid = new MB_ItemFrame( - MB_FrameType.USELESS, - EnumRarity.common, - "No more cheaty frames for GTNH players."); - - hiveFrameAccelerated = new MB_ItemFrame( - MB_FrameType.ACCELERATED, - "Longevity for bees isn't very common, especially if they're working harder."); - hiveFrameMutagenic = new MB_ItemFrame( - MB_FrameType.MUTAGENIC, - EnumRarity.epic, - "Evolution of the fittest, finest and fastest."); - hiveFrameBusy = new MB_ItemFrame(MB_FrameType.BUSY, "Your bee will work harder and longer than you expected."); - ChestGenHooks.addItem( - ChestGenHooks.STRONGHOLD_CORRIDOR, - new WeightedRandomChestContent(new ItemStack(hiveFrameVoid), 1, 1, 14)); - ChestGenHooks.addItem( - ChestGenHooks.STRONGHOLD_LIBRARY, - new WeightedRandomChestContent(new ItemStack(hiveFrameVoid), 1, 3, 18)); - ChestGenHooks.addItem( - ChestGenHooks.DUNGEON_CHEST, - new WeightedRandomChestContent(new ItemStack(hiveFrameVoid), 1, 1, 14)); - ChestGenHooks.addItem( - ChestGenHooks.MINESHAFT_CORRIDOR, - new WeightedRandomChestContent(new ItemStack(hiveFrameVoid), 1, 1, 9)); - ChestGenHooks.addItem( - ChestGenHooks.PYRAMID_DESERT_CHEST, - new WeightedRandomChestContent(new ItemStack(hiveFrameMutagenic), 1, 1, 9)); - ChestGenHooks.addItem( - ChestGenHooks.PYRAMID_JUNGLE_CHEST, - new WeightedRandomChestContent(new ItemStack(hiveFrameMutagenic), 1, 3, 12)); - ChestGenHooks.addItem( - ChestGenHooks.MINESHAFT_CORRIDOR, - new WeightedRandomChestContent(new ItemStack(hiveFrameMutagenic), 1, 3, 8)); - ChestGenHooks.addItem( - ChestGenHooks.DUNGEON_CHEST, - new WeightedRandomChestContent(new ItemStack(hiveFrameMutagenic), 1, 3, 12)); - - // Frame Items added by bartimaeusnek - hiveFrameDecay = new MB_ItemFrame( - MB_FrameType.DECAYING, - EnumRarity.uncommon, - "Who really needs stable genetics?"); - hiveFrameSlow = new MB_ItemFrame(MB_FrameType.SLOWING, EnumRarity.common, "The journey is its own reward."); - hiveFrameStalilize = new MB_ItemFrame( - MB_FrameType.STABILIZING, - EnumRarity.rare, - "If you wish your bees to keep their form."); - hiveFrameArborist = new MB_ItemFrame( - MB_FrameType.ARBORISTS, - EnumRarity.common, - "Who need Bees when you can have Trees?"); - ChestGenHooks.addItem( - ChestGenHooks.PYRAMID_JUNGLE_CHEST, - new WeightedRandomChestContent(new ItemStack(hiveFrameArborist), 1, 4, 24)); - ChestGenHooks.addItem( - ChestGenHooks.STRONGHOLD_LIBRARY, - new WeightedRandomChestContent(new ItemStack(hiveFrameSlow), 1, 4, 24)); - } - - protected static T registerItem(final T item, final String name) { - item.setUnlocalizedName(name); - GameRegistry.registerItem(item, StringUtil.cleanItemName(item)); - return item; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FR_StringUtil.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FR_StringUtil.java deleted file mode 100644 index c63401aecf..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/FR_StringUtil.java +++ /dev/null @@ -1,14 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.items; - -import net.minecraft.util.StatCollector; - -public class FR_StringUtil { - - public static String getLocalizedString(final String key) { - if (StatCollector.canTranslate(key)) { - return StatCollector.translateToLocal(key); - } - return StatCollector.translateToFallback(key); - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MBFrameType.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MBFrameType.java new file mode 100644 index 0000000000..aaee356868 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MBFrameType.java @@ -0,0 +1,126 @@ +package gtPlusPlus.xmod.forestry.bees.items; + +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeModifier; + +public enum MBFrameType implements IBeeModifier { + + // ExtraBees Clone Frames + // Name, FrameHP, territory (1f), Mutation rate, lifespan rate, production rate, genetic decay (1f) + COCOA("Chocolate", 240, 1.0f, 1.0f, 0.50f, 0.50f, 1f), // production was 1.5x, now +0.5 + CAGE("Restraint", 240, 0.5f, 1.0f, 0.75f, -0.25f, 1f), // production was 0.75x, now -0.25 + SOUL("Soul", 80, 1.0f, 1.5f, 0.75f, -0.75f, 1f), // production was 0.25x, now -0.75 + CLAY("Healing", 240, 1.0f, 0.5f, 1.50f, -0.25f, 1f), // production was 0.75x, now -0.25 + NOVA("Nova", 240, 1.0f, 100.0f, 0.0001f, 0.00f, 1f), // production was 1x, now +0 + + // Name, FrameHP, territory (1f), Mutation rate, lifespan rate, production rate, genetic decay (1f) + ACCELERATED("Accelerated", 175, 1f, 1.2f, 0.9f, 0.8f, 1f), // production was 1.8x, now +0.8 + VOID("Void", 20, 1f, 1f, 0.0001f, 9f, 1f), // production was 10x, now +9 + MUTAGENIC("Mutagenic", 3, 1f, 5f, 0.0001f, 9f, 1f), // production was 10x, now +9 + BUSY("Busy", 2000, 1f, 0f, 3f, 3f, 1f), // production was 4x, now +3 + USELESS("Useless", 100, 1f, 0f, 1f, 0f, 1f), // production was 1x, now +0 + + // Frame Items added by bartimaeusnek + DECAYING("Decaying", 240, 1f, 1f, 1f, 0f, 10f), // enhanches decay to 10x // production was 1x, now +0 + SLOWING("Slowing", 175, 1f, 0.5f, 2f, -0.5f, 1f), // reduces mutation, production rate and enhanches lifespan // + // production was 0.5x, now -0.5 + STABILIZING("Stabilizing", 60, 1f, 0.1f, 1f, -0.9f, 0.5f), // reduces mutation, production and decay // production + // was 0.1x, now -0.9 + ARBORISTS("Arborists", 240, 3f, 0f, 3f, -9001f, 1f); // 3x territory and lifespan, sets mutation and production to + // zero // production was 0x, now -9001 + + private final String frameName; + public final int maxDamage; + + private final float territoryMod; + private final float mutationMod; + private final float lifespanMod; + private final float productionMod; + private final float floweringMod; + private final float geneticDecayMod; + private final boolean isSealed; + private final boolean isLit; + private final boolean isSunlit; + private final boolean isHellish; + + MBFrameType(final String name, final int damage, final float territory, final float mutation, final float lifespan, + final float production, final float geneticDecay) { + this(name, damage, territory, mutation, lifespan, production, 1f, geneticDecay, false, false, false, false); + } + + MBFrameType(final String name, final int damage, final float territory, final float mutation, final float lifespan, + final float production, final float flowering, final float geneticDecay, final boolean sealed, + final boolean lit, final boolean sunlit, final boolean hellish) { + this.frameName = name; + this.maxDamage = damage; + + this.territoryMod = territory; + this.mutationMod = mutation; + this.lifespanMod = lifespan; + this.productionMod = production; + this.floweringMod = flowering; + this.geneticDecayMod = geneticDecay; + this.isSealed = sealed; + this.isLit = lit; + this.isSunlit = sunlit; + this.isHellish = hellish; + } + + public String getName() { + return this.frameName; + } + + public String getLocalizedName() { + return FRStringUtil.getLocalizedString("frame." + this.frameName); + } + + @Override + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + return this.territoryMod; + } + + @Override + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.mutationMod; + } + + @Override + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.lifespanMod; + } + + @Override + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + return this.productionMod; + } + + @Override + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + return this.floweringMod; + } + + @Override + public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { + return this.geneticDecayMod; + } + + @Override + public boolean isSealed() { + return this.isSealed; + } + + @Override + public boolean isSelfLighted() { + return this.isLit; + } + + @Override + public boolean isSunlightSimulated() { + return this.isSunlit; + } + + @Override + public boolean isHellish() { + return this.isHellish; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MBItemFrame.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MBItemFrame.java new file mode 100644 index 0000000000..b196598f43 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MBItemFrame.java @@ -0,0 +1,142 @@ +package gtPlusPlus.xmod.forestry.bees.items; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumRarity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.apiculture.IHiveFrame; +import gtPlusPlus.core.creative.AddToCreativeTab; + +public class MBItemFrame extends Item implements IHiveFrame { + + private final MBFrameType type; + private EnumRarity rarity_value = EnumRarity.uncommon; + private final String toolTip; + + public MBItemFrame(final MBFrameType frameType, final String description) { + this(frameType, EnumRarity.uncommon, description); + } + + public MBItemFrame(final MBFrameType frameType, final EnumRarity rarity, final String description) { + super(); + this.type = frameType; + this.setMaxDamage(this.type.maxDamage); + this.setMaxStackSize(1); + this.setCreativeTab(AddToCreativeTab.tabMisc); + this.setUnlocalizedName("frame" + frameType.getName()); + this.rarity_value = rarity; + this.toolTip = description; + GameRegistry.registerItem(this, "frame" + frameType.getName()); + } + + @Override + public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { + if ((this.toolTip != "") || !this.toolTip.equals("")) { + list.add(EnumChatFormatting.GRAY + this.toolTip); + } + super.addInformation(stack, aPlayer, list, bool); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister par1IconRegister) { + this.itemIcon = par1IconRegister.registerIcon(GTPlusPlus.ID + ":frame" + this.type.getName()); + } + + // --------- IHiveFrame functions ----------------------------------------- + + @Override + public ItemStack frameUsed(final IBeeHousing housing, ItemStack frame, final IBee queen, final int wear) { + frame.setItemDamage(frame.getItemDamage() + wear); + + if (frame.getItemDamage() >= frame.getMaxDamage()) { + // Break the frame. + frame = null; + } + + return frame; + } + + @Override + @SideOnly(Side.CLIENT) + public EnumRarity getRarity(final ItemStack par1ItemStack) { + return this.rarity_value; + } + + @Override + public boolean hasEffect(final ItemStack par1ItemStack, final int pass) { + if ((this.rarity_value == EnumRarity.uncommon) || (this.rarity_value == EnumRarity.common)) { + return false; + } + return true; + } + + @Override + public IBeeModifier getBeeModifier() { + return this.type; + } + + @Override + public boolean isBookEnchantable(final ItemStack itemstack1, final ItemStack itemstack2) { + return false; + } + + @Override + public boolean isRepairable() { + return false; + } + + public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { + return this.type.getTerritoryModifier(genome, currentModifier); + } + + public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.type.getMutationModifier(genome, mate, currentModifier); + } + + public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { + return this.type.getLifespanModifier(genome, mate, currentModifier); + } + + public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { + return this.type.getProductionModifier(genome, currentModifier); + } + + public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { + return this.type.getFloweringModifier(genome, currentModifier); + } + + public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { + return this.type.getGeneticDecay(genome, currentModifier); + } + + public boolean isSealed() { + return this.type.isSealed(); + } + + public boolean isSelfLighted() { + return this.type.isSelfLighted(); + } + + public boolean isSunlightSimulated() { + return this.type.isSunlightSimulated(); + } + + public boolean isHellish() { + return this.type.isHellish(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MB_FrameType.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MB_FrameType.java deleted file mode 100644 index 418c05587f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MB_FrameType.java +++ /dev/null @@ -1,126 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.items; - -import forestry.api.apiculture.IBeeGenome; -import forestry.api.apiculture.IBeeModifier; - -public enum MB_FrameType implements IBeeModifier { - - // ExtraBees Clone Frames - // Name, FrameHP, territory (1f), Mutation rate, lifespan rate, production rate, genetic decay (1f) - COCOA("Chocolate", 240, 1.0f, 1.0f, 0.50f, 0.50f, 1f), // production was 1.5x, now +0.5 - CAGE("Restraint", 240, 0.5f, 1.0f, 0.75f, -0.25f, 1f), // production was 0.75x, now -0.25 - SOUL("Soul", 80, 1.0f, 1.5f, 0.75f, -0.75f, 1f), // production was 0.25x, now -0.75 - CLAY("Healing", 240, 1.0f, 0.5f, 1.50f, -0.25f, 1f), // production was 0.75x, now -0.25 - NOVA("Nova", 240, 1.0f, 100.0f, 0.0001f, 0.00f, 1f), // production was 1x, now +0 - - // Name, FrameHP, territory (1f), Mutation rate, lifespan rate, production rate, genetic decay (1f) - ACCELERATED("Accelerated", 175, 1f, 1.2f, 0.9f, 0.8f, 1f), // production was 1.8x, now +0.8 - VOID("Void", 20, 1f, 1f, 0.0001f, 9f, 1f), // production was 10x, now +9 - MUTAGENIC("Mutagenic", 3, 1f, 5f, 0.0001f, 9f, 1f), // production was 10x, now +9 - BUSY("Busy", 2000, 1f, 0f, 3f, 3f, 1f), // production was 4x, now +3 - USELESS("Useless", 100, 1f, 0f, 1f, 0f, 1f), // production was 1x, now +0 - - // Frame Items added by bartimaeusnek - DECAYING("Decaying", 240, 1f, 1f, 1f, 0f, 10f), // enhanches decay to 10x // production was 1x, now +0 - SLOWING("Slowing", 175, 1f, 0.5f, 2f, -0.5f, 1f), // reduces mutation, production rate and enhanches lifespan // - // production was 0.5x, now -0.5 - STABILIZING("Stabilizing", 60, 1f, 0.1f, 1f, -0.9f, 0.5f), // reduces mutation, production and decay // production - // was 0.1x, now -0.9 - ARBORISTS("Arborists", 240, 3f, 0f, 3f, -9001f, 1f); // 3x territory and lifespan, sets mutation and production to - // zero // production was 0x, now -9001 - - private final String frameName; - public final int maxDamage; - - private final float territoryMod; - private final float mutationMod; - private final float lifespanMod; - private final float productionMod; - private final float floweringMod; - private final float geneticDecayMod; - private final boolean isSealed; - private final boolean isLit; - private final boolean isSunlit; - private final boolean isHellish; - - MB_FrameType(final String name, final int damage, final float territory, final float mutation, final float lifespan, - final float production, final float geneticDecay) { - this(name, damage, territory, mutation, lifespan, production, 1f, geneticDecay, false, false, false, false); - } - - MB_FrameType(final String name, final int damage, final float territory, final float mutation, final float lifespan, - final float production, final float flowering, final float geneticDecay, final boolean sealed, - final boolean lit, final boolean sunlit, final boolean hellish) { - this.frameName = name; - this.maxDamage = damage; - - this.territoryMod = territory; - this.mutationMod = mutation; - this.lifespanMod = lifespan; - this.productionMod = production; - this.floweringMod = flowering; - this.geneticDecayMod = geneticDecay; - this.isSealed = sealed; - this.isLit = lit; - this.isSunlit = sunlit; - this.isHellish = hellish; - } - - public String getName() { - return this.frameName; - } - - public String getLocalizedName() { - return FR_StringUtil.getLocalizedString("frame." + this.frameName); - } - - @Override - public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { - return this.territoryMod; - } - - @Override - public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { - return this.mutationMod; - } - - @Override - public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { - return this.lifespanMod; - } - - @Override - public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { - return this.productionMod; - } - - @Override - public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { - return this.floweringMod; - } - - @Override - public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { - return this.geneticDecayMod; - } - - @Override - public boolean isSealed() { - return this.isSealed; - } - - @Override - public boolean isSelfLighted() { - return this.isLit; - } - - @Override - public boolean isSunlightSimulated() { - return this.isSunlit; - } - - @Override - public boolean isHellish() { - return this.isHellish; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MB_ItemFrame.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MB_ItemFrame.java deleted file mode 100644 index e5d36d15e8..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/MB_ItemFrame.java +++ /dev/null @@ -1,142 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.items; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumRarity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.apiculture.IBee; -import forestry.api.apiculture.IBeeGenome; -import forestry.api.apiculture.IBeeHousing; -import forestry.api.apiculture.IBeeModifier; -import forestry.api.apiculture.IHiveFrame; -import gtPlusPlus.core.creative.AddToCreativeTab; - -public class MB_ItemFrame extends Item implements IHiveFrame { - - private final MB_FrameType type; - private EnumRarity rarity_value = EnumRarity.uncommon; - private final String toolTip; - - public MB_ItemFrame(final MB_FrameType frameType, final String description) { - this(frameType, EnumRarity.uncommon, description); - } - - public MB_ItemFrame(final MB_FrameType frameType, final EnumRarity rarity, final String description) { - super(); - this.type = frameType; - this.setMaxDamage(this.type.maxDamage); - this.setMaxStackSize(1); - this.setCreativeTab(AddToCreativeTab.tabMisc); - this.setUnlocalizedName("frame" + frameType.getName()); - this.rarity_value = rarity; - this.toolTip = description; - GameRegistry.registerItem(this, "frame" + frameType.getName()); - } - - @Override - public void addInformation(final ItemStack stack, final EntityPlayer aPlayer, final List list, final boolean bool) { - if ((this.toolTip != "") || !this.toolTip.equals("")) { - list.add(EnumChatFormatting.GRAY + this.toolTip); - } - super.addInformation(stack, aPlayer, list, bool); - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(final IIconRegister par1IconRegister) { - this.itemIcon = par1IconRegister.registerIcon(GTPlusPlus.ID + ":frame" + this.type.getName()); - } - - // --------- IHiveFrame functions ----------------------------------------- - - @Override - public ItemStack frameUsed(final IBeeHousing housing, ItemStack frame, final IBee queen, final int wear) { - frame.setItemDamage(frame.getItemDamage() + wear); - - if (frame.getItemDamage() >= frame.getMaxDamage()) { - // Break the frame. - frame = null; - } - - return frame; - } - - @Override - @SideOnly(Side.CLIENT) - public EnumRarity getRarity(final ItemStack par1ItemStack) { - return this.rarity_value; - } - - @Override - public boolean hasEffect(final ItemStack par1ItemStack, final int pass) { - if ((this.rarity_value == EnumRarity.uncommon) || (this.rarity_value == EnumRarity.common)) { - return false; - } - return true; - } - - @Override - public IBeeModifier getBeeModifier() { - return this.type; - } - - @Override - public boolean isBookEnchantable(final ItemStack itemstack1, final ItemStack itemstack2) { - return false; - } - - @Override - public boolean isRepairable() { - return false; - } - - public float getTerritoryModifier(final IBeeGenome genome, final float currentModifier) { - return this.type.getTerritoryModifier(genome, currentModifier); - } - - public float getMutationModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { - return this.type.getMutationModifier(genome, mate, currentModifier); - } - - public float getLifespanModifier(final IBeeGenome genome, final IBeeGenome mate, final float currentModifier) { - return this.type.getLifespanModifier(genome, mate, currentModifier); - } - - public float getProductionModifier(final IBeeGenome genome, final float currentModifier) { - return this.type.getProductionModifier(genome, currentModifier); - } - - public float getFloweringModifier(final IBeeGenome genome, final float currentModifier) { - return this.type.getFloweringModifier(genome, currentModifier); - } - - public float getGeneticDecay(final IBeeGenome genome, final float currentModifier) { - return this.type.getGeneticDecay(genome, currentModifier); - } - - public boolean isSealed() { - return this.type.isSealed(); - } - - public boolean isSelfLighted() { - return this.type.isSelfLighted(); - } - - public boolean isSunlightSimulated() { - return this.type.isSunlightSimulated(); - } - - public boolean isHellish() { - return this.type.isHellish(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPComb.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPComb.java new file mode 100644 index 0000000000..c77c7fcb8a --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPComb.java @@ -0,0 +1,131 @@ +package gtPlusPlus.xmod.forestry.bees.items.output; + +import static gregtech.api.enums.Mods.Forestry; +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.util.GTRecipeConstants.CHEMPLANT_CASING_TIER; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.core.Tabs; +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTModHandler; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPCombType; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPDropType; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPPropolisType; +import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; + +public class GTPPComb extends Item { + + @SideOnly(Side.CLIENT) + private IIcon secondIcon; + + public GTPPComb() { + super(); + this.setCreativeTab(Tabs.tabApiculture); + this.setHasSubtypes(true); + this.setUnlocalizedName("gtpp.comb"); + GameRegistry.registerItem(this, "gtpp.comb", GTPlusPlus.ID); + } + + public ItemStack getStackForType(GTPPCombType type) { + return new ItemStack(this, 1, type.mID); + } + + public ItemStack getStackForType(GTPPCombType type, int count) { + return new ItemStack(this, count, type.mID); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tabs, List list) { + for (GTPPCombType type : GTPPCombType.values()) { + if (type.mShowInList) { + list.add(this.getStackForType(type)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + return true; + } + + @Override + public int getRenderPasses(int meta) { + return 2; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister par1IconRegister) { + this.itemIcon = par1IconRegister.registerIcon("forestry:beeCombs.0"); + this.secondIcon = par1IconRegister.registerIcon("forestry:beeCombs.1"); + } + + @Override + public IIcon getIcon(ItemStack stack, int pass) { + return (pass == 0) ? itemIcon : secondIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack stack, int pass) { + int colour = GTPPCombType.get(stack.getItemDamage()) + .getColours()[0]; + + if (pass >= 1) { + colour = GTPPCombType.get(stack.getItemDamage()) + .getColours()[1]; + } + + return colour; + } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + return GTPPCombType.get(stack.getItemDamage()) + .getName(); + } + + public static void initCombsRecipes() { + + addChemicalRecipe( + GTPPCombType.DRAGONBLOOD, + new ItemStack[] { GTModHandler.getModItem(Forestry.ID, "refractoryWax", 1L, 0), + GTPP_Bees.propolis.getStackForType(GTPPPropolisType.DRAGONBLOOD), + GTPP_Bees.drop.getStackForType(GTPPDropType.DRAGONBLOOD) }, + new int[] { 3000, 1500, 500 }); + addChemicalRecipe( + GTPPCombType.FORCE, + new ItemStack[] { GTModHandler.getModItem(Forestry.ID, "beeswax", 1L, 0), + GTPP_Bees.propolis.getStackForType(GTPPPropolisType.FORCE), + GTPP_Bees.drop.getStackForType(GTPPDropType.FORCE) }, + new int[] { 5000, 3000, 1000 }); + } + + public static void addChemicalRecipe(GTPPCombType aInputStack, ItemStack[] aOutputs, int[] aChances) { + Material aMat = aInputStack.mMaterial; + long aEU = aMat.vVoltageMultiplier; + int aTier = Math.max(aMat.vTier / 2, 1); + GTValues.RA.stdBuilder() + .itemInputs(aInputStack.getStackForType(aTier)) + .itemOutputs(aOutputs) + .duration(aTier * 20 * 60) + .eut(aEU) + .metadata(CHEMPLANT_CASING_TIER, aTier) + .addTo(chemicalPlantRecipes); + + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPDrop.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPDrop.java new file mode 100644 index 0000000000..dd85ed6b2d --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPDrop.java @@ -0,0 +1,131 @@ +package gtPlusPlus.xmod.forestry.bees.items.output; + +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraftforge.fluids.FluidStack; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.core.Tabs; +import gregtech.api.enums.GTValues; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPDropType; +import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; + +public class GTPPDrop extends Item { + + @SideOnly(Side.CLIENT) + private IIcon secondIcon; + + public GTPPDrop() { + super(); + this.setCreativeTab(Tabs.tabApiculture); + this.setHasSubtypes(true); + this.setUnlocalizedName("gtpp.drop"); + GameRegistry.registerItem(this, "gtpp.drop", GTPlusPlus.ID); + } + + public ItemStack getStackForType(GTPPDropType type) { + return new ItemStack(this, 1, type.mID); + } + + public ItemStack getStackForType(GTPPDropType type, int count) { + return new ItemStack(this, count, type.mID); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tabs, List list) { + for (GTPPDropType type : GTPPDropType.values()) { + if (type.mShowInList) { + list.add(this.getStackForType(type)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + return true; + } + + @Override + public int getRenderPasses(int meta) { + return 2; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister par1IconRegister) { + this.itemIcon = par1IconRegister.registerIcon("forestry:honeyDrop.0"); + this.secondIcon = par1IconRegister.registerIcon("forestry:honeyDrop.1"); + } + + @Override + public IIcon getIcon(ItemStack stack, int pass) { + return (pass == 0) ? itemIcon : secondIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack stack, int pass) { + int colour = GTPPDropType.get(stack.getItemDamage()) + .getColours()[0]; + + if (pass >= 1) { + colour = GTPPDropType.get(stack.getItemDamage()) + .getColours()[1]; + } + + return colour; + } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + return GTPPDropType.get(stack.getItemDamage()) + .getName(); + } + + private static final int[] sFluidOutputs = new int[] { 144, 136, 128, 120, 112, 104, 96, 88, 80, 72, 64, 48, 32, 16, + 8, 4 }; + + public static void initDropsRecipes() { + ItemStack tDrop; + Logger.BEES("Processing recipes for " + GTPP_Bees.sDropMappings.size() + " Drops."); + for (GTPPDropType aDrop : GTPP_Bees.sDropMappings.values()) { + tDrop = aDrop.getStackForType(1); + if (addProcess( + tDrop, + new FluidStack(aDrop.mMaterial.getFluid(), sFluidOutputs[aDrop.mMaterial.vTier]), + aDrop.mMaterial.vTier * 20 * 30, + aDrop.mMaterial.vVoltageMultiplier)) { + Logger.BEES("Added Drop extraction recipe for: " + aDrop.getName()); + } else { + Logger.BEES("Failed to add Drop extraction recipe for: " + aDrop.getName()); + } + } + } + + public static boolean addProcess(ItemStack tDrop, FluidStack aOutput, int aDuration, int aEUt) { + if (aOutput == null) { + return false; + } + GTValues.RA.stdBuilder() + .itemInputs(tDrop) + .fluidOutputs(aOutput) + .duration(aDuration * TICKS) + .eut(aEUt) + .addTo(fluidExtractionRecipes); + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPPollen.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPPollen.java new file mode 100644 index 0000000000..9c07f294c5 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPPollen.java @@ -0,0 +1,92 @@ +package gtPlusPlus.xmod.forestry.bees.items.output; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.core.Tabs; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPPollenType; + +public class GTPPPollen extends Item { + + @SideOnly(Side.CLIENT) + private IIcon secondIcon; + + public GTPPPollen() { + super(); + this.setCreativeTab(Tabs.tabApiculture); + this.setHasSubtypes(true); + this.setUnlocalizedName("gtpp.pollen"); + GameRegistry.registerItem(this, "gtpp.pollen", GTPlusPlus.ID); + } + + public ItemStack getStackForType(GTPPPollenType type) { + return new ItemStack(this, 1, type.mID); + } + + public ItemStack getStackForType(GTPPPollenType type, int count) { + return new ItemStack(this, count, type.mID); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tabs, List list) { + for (GTPPPollenType type : GTPPPollenType.values()) { + if (type.mShowInList) { + list.add(this.getStackForType(type)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() { + return true; + } + + @Override + public int getRenderPasses(int meta) { + return 2; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister par1IconRegister) { + this.itemIcon = par1IconRegister.registerIcon("forestry:pollen.0"); + this.secondIcon = par1IconRegister.registerIcon("forestry:pollen.1"); + } + + @Override + public IIcon getIcon(ItemStack stack, int pass) { + return (pass == 0) ? itemIcon : secondIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack stack, int pass) { + int colour = GTPPPollenType.get(stack.getItemDamage()) + .getColours()[0]; + + if (pass >= 1) { + colour = GTPPPollenType.get(stack.getItemDamage()) + .getColours()[1]; + } + + return colour; + } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + return GTPPPollenType.get(stack.getItemDamage()) + .getName(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPPropolis.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPPropolis.java new file mode 100644 index 0000000000..22d429a2e6 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPPPropolis.java @@ -0,0 +1,110 @@ +package gtPlusPlus.xmod.forestry.bees.items.output; + +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.recipe.RecipeMaps.extractorRecipes; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.core.Tabs; +import gregtech.api.enums.GTValues; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPPropolisType; +import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; + +public class GTPPPropolis extends Item { + + @SideOnly(Side.CLIENT) + private IIcon secondIcon; + + public GTPPPropolis() { + super(); + this.setCreativeTab(Tabs.tabApiculture); + this.setHasSubtypes(true); + this.setUnlocalizedName("gtpp.propolis"); + GameRegistry.registerItem(this, "gtpp.propolis", GTPlusPlus.ID); + } + + public ItemStack getStackForType(GTPPPropolisType type) { + return new ItemStack(this, 1, type.mID); + } + + public ItemStack getStackForType(GTPPPropolisType type, int count) { + return new ItemStack(this, count, type.mID); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(Item item, CreativeTabs tabs, List list) { + for (GTPPPropolisType type : GTPPPropolisType.values()) { + if (type.mShowInList) { + list.add(this.getStackForType(type)); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister par1IconRegister) { + this.itemIcon = par1IconRegister.registerIcon("forestry:propolis.0"); + } + + @Override + public IIcon getIcon(ItemStack stack, int pass) { + return itemIcon; + } + + @Override + @SideOnly(Side.CLIENT) + public int getColorFromItemStack(ItemStack stack, int pass) { + return GTPPPropolisType.get(stack.getItemDamage()) + .getColours(); + } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + return GTPPPropolisType.get(stack.getItemDamage()) + .getName(); + } + + public static void initPropolisRecipes() { + ItemStack tDrop; + Logger.BEES("Processing recipes for " + GTPP_Bees.sPropolisMappings.size() + " Propolis."); + for (GTPPPropolisType aProp : GTPP_Bees.sPropolisMappings.values()) { + tDrop = aProp.getStackForType(1); + if (addProcess( + tDrop, + aProp.mMaterial.getDust(1), + Math.min(Math.max(10000 - (aProp.mMaterial.vTier * 625), 100), 10000), + aProp.mMaterial.vTier * 20 * 15, + aProp.mMaterial.vVoltageMultiplier)) { + Logger.BEES("Added Propolis extraction recipe for: " + aProp.getName()); + } else { + Logger.BEES("Failed to add Propolis extraction recipe for: " + aProp.getName()); + } + } + } + + public static boolean addProcess(ItemStack tDrop, ItemStack aOutput, int aChance, int aDuration, int aEUt) { + if (aOutput == null) { + return false; + } + GTValues.RA.stdBuilder() + .itemInputs(tDrop) + .itemOutputs(aOutput) + .outputChances(aChance) + .duration(aDuration * TICKS) + .eut(aEUt) + .addTo(extractorRecipes); + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Comb.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Comb.java deleted file mode 100644 index 16f364f595..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Comb.java +++ /dev/null @@ -1,131 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.items.output; - -import static gregtech.api.enums.Mods.Forestry; -import static gregtech.api.enums.Mods.GTPlusPlus; -import static gregtech.api.util.GT_RecipeConstants.CHEMPLANT_CASING_TIER; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.core.Tabs; -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_ModHandler; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_CombType; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_DropType; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_PropolisType; -import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; - -public class GTPP_Comb extends Item { - - @SideOnly(Side.CLIENT) - private IIcon secondIcon; - - public GTPP_Comb() { - super(); - this.setCreativeTab(Tabs.tabApiculture); - this.setHasSubtypes(true); - this.setUnlocalizedName("gtpp.comb"); - GameRegistry.registerItem(this, "gtpp.comb", GTPlusPlus.ID); - } - - public ItemStack getStackForType(GTPP_CombType type) { - return new ItemStack(this, 1, type.mID); - } - - public ItemStack getStackForType(GTPP_CombType type, int count) { - return new ItemStack(this, count, type.mID); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs tabs, List list) { - for (GTPP_CombType type : GTPP_CombType.values()) { - if (type.mShowInList) { - list.add(this.getStackForType(type)); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public boolean requiresMultipleRenderPasses() { - return true; - } - - @Override - public int getRenderPasses(int meta) { - return 2; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister par1IconRegister) { - this.itemIcon = par1IconRegister.registerIcon("forestry:beeCombs.0"); - this.secondIcon = par1IconRegister.registerIcon("forestry:beeCombs.1"); - } - - @Override - public IIcon getIcon(ItemStack stack, int pass) { - return (pass == 0) ? itemIcon : secondIcon; - } - - @Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int pass) { - int colour = GTPP_CombType.get(stack.getItemDamage()) - .getColours()[0]; - - if (pass >= 1) { - colour = GTPP_CombType.get(stack.getItemDamage()) - .getColours()[1]; - } - - return colour; - } - - @Override - public String getItemStackDisplayName(ItemStack stack) { - return GTPP_CombType.get(stack.getItemDamage()) - .getName(); - } - - public static void initCombsRecipes() { - - addChemicalRecipe( - GTPP_CombType.DRAGONBLOOD, - new ItemStack[] { GT_ModHandler.getModItem(Forestry.ID, "refractoryWax", 1L, 0), - GTPP_Bees.propolis.getStackForType(GTPP_PropolisType.DRAGONBLOOD), - GTPP_Bees.drop.getStackForType(GTPP_DropType.DRAGONBLOOD) }, - new int[] { 3000, 1500, 500 }); - addChemicalRecipe( - GTPP_CombType.FORCE, - new ItemStack[] { GT_ModHandler.getModItem(Forestry.ID, "beeswax", 1L, 0), - GTPP_Bees.propolis.getStackForType(GTPP_PropolisType.FORCE), - GTPP_Bees.drop.getStackForType(GTPP_DropType.FORCE) }, - new int[] { 5000, 3000, 1000 }); - } - - public static void addChemicalRecipe(GTPP_CombType aInputStack, ItemStack[] aOutputs, int[] aChances) { - Material aMat = aInputStack.mMaterial; - long aEU = aMat.vVoltageMultiplier; - int aTier = Math.max(aMat.vTier / 2, 1); - GT_Values.RA.stdBuilder() - .itemInputs(aInputStack.getStackForType(aTier)) - .itemOutputs(aOutputs) - .duration(aTier * 20 * 60) - .eut(aEU) - .metadata(CHEMPLANT_CASING_TIER, aTier) - .addTo(chemicalPlantRecipes); - - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Drop.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Drop.java deleted file mode 100644 index a84d11e74c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Drop.java +++ /dev/null @@ -1,131 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.items.output; - -import static gregtech.api.enums.Mods.GTPlusPlus; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraftforge.fluids.FluidStack; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.core.Tabs; -import gregtech.api.enums.GT_Values; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_DropType; -import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; - -public class GTPP_Drop extends Item { - - @SideOnly(Side.CLIENT) - private IIcon secondIcon; - - public GTPP_Drop() { - super(); - this.setCreativeTab(Tabs.tabApiculture); - this.setHasSubtypes(true); - this.setUnlocalizedName("gtpp.drop"); - GameRegistry.registerItem(this, "gtpp.drop", GTPlusPlus.ID); - } - - public ItemStack getStackForType(GTPP_DropType type) { - return new ItemStack(this, 1, type.mID); - } - - public ItemStack getStackForType(GTPP_DropType type, int count) { - return new ItemStack(this, count, type.mID); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs tabs, List list) { - for (GTPP_DropType type : GTPP_DropType.values()) { - if (type.mShowInList) { - list.add(this.getStackForType(type)); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public boolean requiresMultipleRenderPasses() { - return true; - } - - @Override - public int getRenderPasses(int meta) { - return 2; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister par1IconRegister) { - this.itemIcon = par1IconRegister.registerIcon("forestry:honeyDrop.0"); - this.secondIcon = par1IconRegister.registerIcon("forestry:honeyDrop.1"); - } - - @Override - public IIcon getIcon(ItemStack stack, int pass) { - return (pass == 0) ? itemIcon : secondIcon; - } - - @Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int pass) { - int colour = GTPP_DropType.get(stack.getItemDamage()) - .getColours()[0]; - - if (pass >= 1) { - colour = GTPP_DropType.get(stack.getItemDamage()) - .getColours()[1]; - } - - return colour; - } - - @Override - public String getItemStackDisplayName(ItemStack stack) { - return GTPP_DropType.get(stack.getItemDamage()) - .getName(); - } - - private static final int[] sFluidOutputs = new int[] { 144, 136, 128, 120, 112, 104, 96, 88, 80, 72, 64, 48, 32, 16, - 8, 4 }; - - public static void initDropsRecipes() { - ItemStack tDrop; - Logger.BEES("Processing recipes for " + GTPP_Bees.sDropMappings.size() + " Drops."); - for (GTPP_DropType aDrop : GTPP_Bees.sDropMappings.values()) { - tDrop = aDrop.getStackForType(1); - if (addProcess( - tDrop, - new FluidStack(aDrop.mMaterial.getFluid(), sFluidOutputs[aDrop.mMaterial.vTier]), - aDrop.mMaterial.vTier * 20 * 30, - aDrop.mMaterial.vVoltageMultiplier)) { - Logger.BEES("Added Drop extraction recipe for: " + aDrop.getName()); - } else { - Logger.BEES("Failed to add Drop extraction recipe for: " + aDrop.getName()); - } - } - } - - public static boolean addProcess(ItemStack tDrop, FluidStack aOutput, int aDuration, int aEUt) { - if (aOutput == null) { - return false; - } - GT_Values.RA.stdBuilder() - .itemInputs(tDrop) - .fluidOutputs(aOutput) - .duration(aDuration * TICKS) - .eut(aEUt) - .addTo(fluidExtractionRecipes); - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Pollen.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Pollen.java deleted file mode 100644 index 7e959151a0..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Pollen.java +++ /dev/null @@ -1,92 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.items.output; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.core.Tabs; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_PollenType; - -public class GTPP_Pollen extends Item { - - @SideOnly(Side.CLIENT) - private IIcon secondIcon; - - public GTPP_Pollen() { - super(); - this.setCreativeTab(Tabs.tabApiculture); - this.setHasSubtypes(true); - this.setUnlocalizedName("gtpp.pollen"); - GameRegistry.registerItem(this, "gtpp.pollen", GTPlusPlus.ID); - } - - public ItemStack getStackForType(GTPP_PollenType type) { - return new ItemStack(this, 1, type.mID); - } - - public ItemStack getStackForType(GTPP_PollenType type, int count) { - return new ItemStack(this, count, type.mID); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs tabs, List list) { - for (GTPP_PollenType type : GTPP_PollenType.values()) { - if (type.mShowInList) { - list.add(this.getStackForType(type)); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public boolean requiresMultipleRenderPasses() { - return true; - } - - @Override - public int getRenderPasses(int meta) { - return 2; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister par1IconRegister) { - this.itemIcon = par1IconRegister.registerIcon("forestry:pollen.0"); - this.secondIcon = par1IconRegister.registerIcon("forestry:pollen.1"); - } - - @Override - public IIcon getIcon(ItemStack stack, int pass) { - return (pass == 0) ? itemIcon : secondIcon; - } - - @Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int pass) { - int colour = GTPP_PollenType.get(stack.getItemDamage()) - .getColours()[0]; - - if (pass >= 1) { - colour = GTPP_PollenType.get(stack.getItemDamage()) - .getColours()[1]; - } - - return colour; - } - - @Override - public String getItemStackDisplayName(ItemStack stack) { - return GTPP_PollenType.get(stack.getItemDamage()) - .getName(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Propolis.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Propolis.java deleted file mode 100644 index 1c1bd95d09..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/items/output/GTPP_Propolis.java +++ /dev/null @@ -1,110 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.items.output; - -import static gregtech.api.enums.Mods.GTPlusPlus; -import static gregtech.api.recipe.RecipeMaps.extractorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.core.Tabs; -import gregtech.api.enums.GT_Values; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_PropolisType; -import gtPlusPlus.xmod.forestry.bees.registry.GTPP_Bees; - -public class GTPP_Propolis extends Item { - - @SideOnly(Side.CLIENT) - private IIcon secondIcon; - - public GTPP_Propolis() { - super(); - this.setCreativeTab(Tabs.tabApiculture); - this.setHasSubtypes(true); - this.setUnlocalizedName("gtpp.propolis"); - GameRegistry.registerItem(this, "gtpp.propolis", GTPlusPlus.ID); - } - - public ItemStack getStackForType(GTPP_PropolisType type) { - return new ItemStack(this, 1, type.mID); - } - - public ItemStack getStackForType(GTPP_PropolisType type, int count) { - return new ItemStack(this, count, type.mID); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item item, CreativeTabs tabs, List list) { - for (GTPP_PropolisType type : GTPP_PropolisType.values()) { - if (type.mShowInList) { - list.add(this.getStackForType(type)); - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(IIconRegister par1IconRegister) { - this.itemIcon = par1IconRegister.registerIcon("forestry:propolis.0"); - } - - @Override - public IIcon getIcon(ItemStack stack, int pass) { - return itemIcon; - } - - @Override - @SideOnly(Side.CLIENT) - public int getColorFromItemStack(ItemStack stack, int pass) { - return GTPP_PropolisType.get(stack.getItemDamage()) - .getColours(); - } - - @Override - public String getItemStackDisplayName(ItemStack stack) { - return GTPP_PropolisType.get(stack.getItemDamage()) - .getName(); - } - - public static void initPropolisRecipes() { - ItemStack tDrop; - Logger.BEES("Processing recipes for " + GTPP_Bees.sPropolisMappings.size() + " Propolis."); - for (GTPP_PropolisType aProp : GTPP_Bees.sPropolisMappings.values()) { - tDrop = aProp.getStackForType(1); - if (addProcess( - tDrop, - aProp.mMaterial.getDust(1), - Math.min(Math.max(10000 - (aProp.mMaterial.vTier * 625), 100), 10000), - aProp.mMaterial.vTier * 20 * 15, - aProp.mMaterial.vVoltageMultiplier)) { - Logger.BEES("Added Propolis extraction recipe for: " + aProp.getName()); - } else { - Logger.BEES("Failed to add Propolis extraction recipe for: " + aProp.getName()); - } - } - } - - public static boolean addProcess(ItemStack tDrop, ItemStack aOutput, int aChance, int aDuration, int aEUt) { - if (aOutput == null) { - return false; - } - GT_Values.RA.stdBuilder() - .itemInputs(tDrop) - .itemOutputs(aOutput) - .outputChances(aChance) - .duration(aDuration * TICKS) - .eut(aEUt) - .addTo(extractorRecipes); - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/recipe/FRGregTechRecipes.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/recipe/FRGregTechRecipes.java new file mode 100644 index 0000000000..eec1dfa0fc --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/recipe/FRGregTechRecipes.java @@ -0,0 +1,134 @@ +package gtPlusPlus.xmod.forestry.bees.recipe; + +import static gregtech.api.enums.Mods.MagicBees; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.RecipeUtils; +import gtPlusPlus.xmod.forestry.bees.items.FRItemRegistry; + +public class FRGregTechRecipes { + + private static String rod_Electrum = "stickElectrum"; + private static String rod_LongElectrum = "stickLongElectrum"; + private static String foil_Electrum = "foilElectrum"; + private static String rod_Uranium = "stickUranium"; + private static String rod_LongUranium = "stickLongUranium"; + private static String foil_Uranium235 = "foilUranium235"; + private static ItemStack hiveFrameAccelerated = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameAccelerated); + private static ItemStack hiveFrameMutagenic = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameMutagenic); + private static ItemStack hiveFrameVoid = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameVoid); + private static ItemStack hiveFrameBusy = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameBusy); + + private static ItemStack hiveFrameCocoa = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameCocoa); + private static ItemStack hiveFrameCaged = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameCaged); + private static ItemStack hiveFrameSoul = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameSoul); + private static ItemStack hiveFrameClay = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameClay); + private static ItemStack hiveFrameNova = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameNova); + + private static ItemStack hiveFrameImpregnated = ItemUtils.getItemStackFromFQRN("Forestry:frameImpregnated", 1); + private static ItemStack blockSoulSand = new ItemStack(Blocks.soul_sand, 1); + private static ItemStack blockIronBars = new ItemStack(Blocks.iron_bars, 1); + private static ItemStack itemClayDust = new ItemStack(Items.clay_ball, 1); + private static ItemStack itemCocoaBeans = new ItemStack(Items.dye, 1, 3); + + private static ItemStack hiveFrameDecay = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameDecay); + private static ItemStack hiveFrameSlow = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameSlow); + private static ItemStack hiveFrameStalilize = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameStalilize); + private static ItemStack hiveFrameArborist = ItemUtils.getSimpleStack(FRItemRegistry.hiveFrameArborist); + + public static void registerItems() { + // Magic Bee Like Frames + RecipeUtils.addShapedGregtechRecipe( + rod_LongElectrum, + rod_Electrum, + rod_LongElectrum, + rod_LongElectrum, + foil_Electrum, + rod_LongElectrum, + rod_Electrum, + rod_Electrum, + rod_Electrum, + hiveFrameAccelerated); + + RecipeUtils.addShapedGregtechRecipe( + rod_LongUranium, + rod_Uranium, + rod_LongUranium, + rod_LongUranium, + foil_Uranium235, + rod_LongUranium, + rod_Uranium, + rod_Uranium, + rod_Uranium, + hiveFrameMutagenic); + if (MagicBees.isModLoaded()) { + RecipeUtils.addShapelessGregtechRecipe( + new ItemStack[] { hiveFrameVoid }, + ItemUtils.getCorrectStacktype("MagicBees:frameOblivion", 1)); + } + RecipeUtils.addShapedGregtechRecipe( + "stickLongBlueSteel", + "stickBlueSteel", + "stickLongBlueSteel", + "stickLongBlueSteel", + ItemUtils.getSimpleStack(Items.nether_star), + "stickLongBlueSteel", + "stickBlueSteel", + "stickBlueSteel", + "stickBlueSteel", + hiveFrameBusy); + + // Frame Items added by bartimaeusnek + RecipeUtils.addShapedGregtechRecipe( + ItemUtils.getItemStackOfAmountFromOreDict("stickLongTumbaga", 1), + ItemUtils.getItemStackOfAmountFromOreDict("stickTumbaga", 1), + ItemUtils.getItemStackOfAmountFromOreDict("stickLongTumbaga", 1), + ItemUtils.getItemStackOfAmountFromOreDict("stickLongTumbaga", 1), + foil_Electrum, + ItemUtils.getItemStackOfAmountFromOreDict("stickLongTumbaga", 1), + ItemUtils.getItemStackOfAmountFromOreDict("stickTumbaga", 1), + ItemUtils.getItemStackOfAmountFromOreDict("stickTumbaga", 1), + ItemUtils.getItemStackOfAmountFromOreDict("stickTumbaga", 1), + hiveFrameSlow); + + RecipeUtils.addShapedGregtechRecipe( + "stickLongWroughtIron", + "stickWroughtIron", + "stickLongWroughtIron", + "stickLongWroughtIron", + "foilZinc", + "stickLongWroughtIron", + "stickWroughtIron", + "stickWroughtIron", + "stickWroughtIron", + hiveFrameDecay); + + RecipeUtils.addShapedGregtechRecipe( + "stickLongOsmiridium", + "stickOsmiridium", + "stickLongOsmiridium", + "stickLongOsmiridium", + "foilOsmiridium", + "stickLongOsmiridium", + "stickOsmiridium", + "stickOsmiridium", + "stickOsmiridium", + hiveFrameStalilize); + + RecipeUtils.addShapedGregtechRecipe( + "stickLongWoodSealed", + "stickWoodSealed", + "stickLongWoodSealed", + "stickLongWoodSealed", + Items.paper, + "stickLongWoodSealed", + "stickWoodSealed", + "stickWoodSealed", + "stickWoodSealed", + hiveFrameArborist); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/recipe/FR_Gregtech_Recipes.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/recipe/FR_Gregtech_Recipes.java deleted file mode 100644 index ce982cd67e..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/recipe/FR_Gregtech_Recipes.java +++ /dev/null @@ -1,134 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.recipe; - -import static gregtech.api.enums.Mods.MagicBees; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.RecipeUtils; -import gtPlusPlus.xmod.forestry.bees.items.FR_ItemRegistry; - -public class FR_Gregtech_Recipes { - - private static String rod_Electrum = "stickElectrum"; - private static String rod_LongElectrum = "stickLongElectrum"; - private static String foil_Electrum = "foilElectrum"; - private static String rod_Uranium = "stickUranium"; - private static String rod_LongUranium = "stickLongUranium"; - private static String foil_Uranium235 = "foilUranium235"; - private static ItemStack hiveFrameAccelerated = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameAccelerated); - private static ItemStack hiveFrameMutagenic = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameMutagenic); - private static ItemStack hiveFrameVoid = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameVoid); - private static ItemStack hiveFrameBusy = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameBusy); - - private static ItemStack hiveFrameCocoa = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameCocoa); - private static ItemStack hiveFrameCaged = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameCaged); - private static ItemStack hiveFrameSoul = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameSoul); - private static ItemStack hiveFrameClay = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameClay); - private static ItemStack hiveFrameNova = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameNova); - - private static ItemStack hiveFrameImpregnated = ItemUtils.getItemStackFromFQRN("Forestry:frameImpregnated", 1); - private static ItemStack blockSoulSand = new ItemStack(Blocks.soul_sand, 1); - private static ItemStack blockIronBars = new ItemStack(Blocks.iron_bars, 1); - private static ItemStack itemClayDust = new ItemStack(Items.clay_ball, 1); - private static ItemStack itemCocoaBeans = new ItemStack(Items.dye, 1, 3); - - private static ItemStack hiveFrameDecay = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameDecay); - private static ItemStack hiveFrameSlow = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameSlow); - private static ItemStack hiveFrameStalilize = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameStalilize); - private static ItemStack hiveFrameArborist = ItemUtils.getSimpleStack(FR_ItemRegistry.hiveFrameArborist); - - public static void registerItems() { - // Magic Bee Like Frames - RecipeUtils.addShapedGregtechRecipe( - rod_LongElectrum, - rod_Electrum, - rod_LongElectrum, - rod_LongElectrum, - foil_Electrum, - rod_LongElectrum, - rod_Electrum, - rod_Electrum, - rod_Electrum, - hiveFrameAccelerated); - - RecipeUtils.addShapedGregtechRecipe( - rod_LongUranium, - rod_Uranium, - rod_LongUranium, - rod_LongUranium, - foil_Uranium235, - rod_LongUranium, - rod_Uranium, - rod_Uranium, - rod_Uranium, - hiveFrameMutagenic); - if (MagicBees.isModLoaded()) { - RecipeUtils.addShapelessGregtechRecipe( - new ItemStack[] { hiveFrameVoid }, - ItemUtils.getCorrectStacktype("MagicBees:frameOblivion", 1)); - } - RecipeUtils.addShapedGregtechRecipe( - "stickLongBlueSteel", - "stickBlueSteel", - "stickLongBlueSteel", - "stickLongBlueSteel", - ItemUtils.getSimpleStack(Items.nether_star), - "stickLongBlueSteel", - "stickBlueSteel", - "stickBlueSteel", - "stickBlueSteel", - hiveFrameBusy); - - // Frame Items added by bartimaeusnek - RecipeUtils.addShapedGregtechRecipe( - ItemUtils.getItemStackOfAmountFromOreDict("stickLongTumbaga", 1), - ItemUtils.getItemStackOfAmountFromOreDict("stickTumbaga", 1), - ItemUtils.getItemStackOfAmountFromOreDict("stickLongTumbaga", 1), - ItemUtils.getItemStackOfAmountFromOreDict("stickLongTumbaga", 1), - foil_Electrum, - ItemUtils.getItemStackOfAmountFromOreDict("stickLongTumbaga", 1), - ItemUtils.getItemStackOfAmountFromOreDict("stickTumbaga", 1), - ItemUtils.getItemStackOfAmountFromOreDict("stickTumbaga", 1), - ItemUtils.getItemStackOfAmountFromOreDict("stickTumbaga", 1), - hiveFrameSlow); - - RecipeUtils.addShapedGregtechRecipe( - "stickLongWroughtIron", - "stickWroughtIron", - "stickLongWroughtIron", - "stickLongWroughtIron", - "foilZinc", - "stickLongWroughtIron", - "stickWroughtIron", - "stickWroughtIron", - "stickWroughtIron", - hiveFrameDecay); - - RecipeUtils.addShapedGregtechRecipe( - "stickLongOsmiridium", - "stickOsmiridium", - "stickLongOsmiridium", - "stickLongOsmiridium", - "foilOsmiridium", - "stickLongOsmiridium", - "stickOsmiridium", - "stickOsmiridium", - "stickOsmiridium", - hiveFrameStalilize); - - RecipeUtils.addShapedGregtechRecipe( - "stickLongWoodSealed", - "stickWoodSealed", - "stickLongWoodSealed", - "stickLongWoodSealed", - Items.paper, - "stickLongWoodSealed", - "stickWoodSealed", - "stickWoodSealed", - "stickWoodSealed", - hiveFrameArborist); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPPAlleleBeeSpecies.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPPAlleleBeeSpecies.java new file mode 100644 index 0000000000..76524388e5 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPPAlleleBeeSpecies.java @@ -0,0 +1,50 @@ +package gtPlusPlus.xmod.forestry.bees.registry; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import forestry.api.apiculture.EnumBeeChromosome; +import forestry.api.apiculture.IAlleleBeeSpeciesCustom; +import forestry.api.genetics.AlleleManager; +import forestry.api.genetics.IClassification; +import forestry.apiculture.genetics.alleles.AlleleBeeSpecies; + +public class GTPPAlleleBeeSpecies extends AlleleBeeSpecies { + + public GTPPAlleleBeeSpecies(String uid, boolean dominant, String unlocalizedName, String authority, + String unlocalizedDescription, IClassification branch, String binomial, int primaryColor, int secondaryColor) { + super( + uid, + unlocalizedName, + authority, + unlocalizedDescription, + dominant, + branch, + binomial, + primaryColor, + secondaryColor); + AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.SPECIES); + } + + @Override + public IAlleleBeeSpeciesCustom addProduct(ItemStack product, Float chance) { + if (product == null || product.getItem() == null) { + product = new ItemStack(Items.boat); + } + if (chance <= 0.0f || chance > 1.0f) { + chance = 0.1f; + } + return super.addProduct(product, chance); + } + + @Override + public IAlleleBeeSpeciesCustom addSpecialty(ItemStack specialty, Float chance) { + if (specialty == null || specialty.getItem() == null) { + specialty = new ItemStack(Items.boat); + } + if (chance <= 0.0f || chance > 1.0f) { + chance = 0.1f; + } + return super.addSpecialty(specialty, chance); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPPBeeMutation.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPPBeeMutation.java new file mode 100644 index 0000000000..02e9ec0cbe --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPPBeeMutation.java @@ -0,0 +1,85 @@ +package gtPlusPlus.xmod.forestry.bees.registry; + +import java.lang.reflect.Field; +import java.util.List; + +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.world.World; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import forestry.api.apiculture.BeeManager; +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeHousing; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.core.IClimateProvider; +import forestry.api.genetics.IAllele; +import forestry.api.genetics.IGenome; +import forestry.api.genetics.IMutationCondition; +import forestry.apiculture.genetics.BeeMutation; +import forestry.core.genetics.mutations.Mutation; + +public class GTPPBeeMutation extends BeeMutation { + + private final float split; + + public GTPPBeeMutation(IAlleleBeeSpecies bee0, IAlleleBeeSpecies bee1, IAllele[] result, int chance, float split) { + super(bee0, bee1, result, chance); + this.split = split; + BeeManager.beeRoot.registerMutation(this); + } + + @Override + public float getBaseChance() { + return super.getBaseChance() / split; + } + + @Override + public float getChance(IBeeHousing housing, IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, + IBeeGenome genome0, IBeeGenome genome1) { + World world = housing != null ? housing.getWorld() : null; + ChunkCoordinates housingCoordinates = housing != null ? housing.getCoordinates() : null; + int x = housingCoordinates != null ? housingCoordinates.posX : 0; + int y = housingCoordinates != null ? housingCoordinates.posY : 0; + int z = housingCoordinates != null ? housingCoordinates.posZ : 0; + + float processedChance = getBasicChance(world, x, y, z, allele0, allele1, genome0, genome1, housing); + + if (processedChance <= 0f) { + return 0f; + } + + IBeeModifier beeHousingModifier = BeeManager.beeRoot.createBeeHousingModifier(housing); + IBeeModifier beeModeModifier = BeeManager.beeRoot.getBeekeepingMode(world) + .getBeeModifier(); + + processedChance *= beeHousingModifier.getMutationModifier(genome0, genome1, processedChance); + processedChance *= beeModeModifier.getMutationModifier(genome0, genome1, processedChance); + + return processedChance; + } + + @SuppressWarnings("unchecked") + private float getBasicChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0, + IGenome genome1, IClimateProvider climate) { + float mutationChance = this.getBaseChance(); + List mutationConditions = null; + Field f = FieldUtils.getDeclaredField(Mutation.class, "mutationConditions", true); + if (f == null) f = FieldUtils.getField(Mutation.class, "mutationConditions", true); + if (f == null) return mutationChance; + try { + mutationConditions = f.get(this) instanceof List ? (List) f.get(this) : null; + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + + if (mutationConditions != null) for (IMutationCondition mutationCondition : mutationConditions) { + mutationChance *= mutationCondition.getChance(world, x, y, z, allele0, allele1, genome0, genome1, climate); + if (mutationChance == 0) { + return 0; + } + } + return mutationChance; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_AlleleBeeSpecies.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_AlleleBeeSpecies.java deleted file mode 100644 index 05ce6e56e6..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_AlleleBeeSpecies.java +++ /dev/null @@ -1,50 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.registry; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import forestry.api.apiculture.EnumBeeChromosome; -import forestry.api.apiculture.IAlleleBeeSpeciesCustom; -import forestry.api.genetics.AlleleManager; -import forestry.api.genetics.IClassification; -import forestry.apiculture.genetics.alleles.AlleleBeeSpecies; - -public class GTPP_AlleleBeeSpecies extends AlleleBeeSpecies { - - public GTPP_AlleleBeeSpecies(String uid, boolean dominant, String unlocalizedName, String authority, - String unlocalizedDescription, IClassification branch, String binomial, int primaryColor, int secondaryColor) { - super( - uid, - unlocalizedName, - authority, - unlocalizedDescription, - dominant, - branch, - binomial, - primaryColor, - secondaryColor); - AlleleManager.alleleRegistry.registerAllele(this, EnumBeeChromosome.SPECIES); - } - - @Override - public IAlleleBeeSpeciesCustom addProduct(ItemStack product, Float chance) { - if (product == null || product.getItem() == null) { - product = new ItemStack(Items.boat); - } - if (chance <= 0.0f || chance > 1.0f) { - chance = 0.1f; - } - return super.addProduct(product, chance); - } - - @Override - public IAlleleBeeSpeciesCustom addSpecialty(ItemStack specialty, Float chance) { - if (specialty == null || specialty.getItem() == null) { - specialty = new ItemStack(Items.boat); - } - if (chance <= 0.0f || chance > 1.0f) { - chance = 0.1f; - } - return super.addSpecialty(specialty, chance); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_BeeDefinition.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_BeeDefinition.java index 73418bdab8..11397e3ef3 100644 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_BeeDefinition.java +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_BeeDefinition.java @@ -38,23 +38,24 @@ import forestry.core.genetics.alleles.AlleleHelper; import forestry.core.genetics.alleles.EnumAllele.Lifespan; import forestry.core.genetics.alleles.EnumAllele.Tolerance; import gregtech.api.enums.Materials; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; import gregtech.common.items.CombType; -import gregtech.loaders.misc.GT_Bees; -import gtPlusPlus.core.material.ELEMENT.STANDALONE; +import gregtech.loaders.misc.GTBeeDefinition; +import gregtech.loaders.misc.GTBees; import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialsElements.STANDALONE; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.MaterialUtils; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_CombType; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPCombType; public enum GTPP_BeeDefinition implements IBeeDefinition { DRAGONBLOOD(GTPP_BranchDefinition.LEGENDARY, "Dragon Blood", STANDALONE.DRAGON_METAL, true, Utils.rgbtoHexValue(220, 20, 20), Utils.rgbtoHexValue(20, 20, 20), beeSpecies -> { - beeSpecies.addProduct(GT_ModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f); - beeSpecies.addSpecialty(GTPP_Bees.combs.getStackForType(GTPP_CombType.DRAGONBLOOD), 0.10f); + beeSpecies.addProduct(GTModHandler.getModItem(Forestry.ID, "beeCombs", 1, 8), 0.30f); + beeSpecies.addSpecialty(GTPP_Bees.combs.getStackForType(GTPPCombType.DRAGONBLOOD), 0.10f); beeSpecies.setHumidity(ARID); beeSpecies.setTemperature(EnumTemperature.NORMAL); beeSpecies.setHasEffect(); @@ -67,13 +68,13 @@ public enum GTPP_BeeDefinition implements IBeeDefinition { IBeeMutationCustom tMutation = dis.registerMutation("DRAGONESSENCE", "NEUTRONIUM", 2); tMutation.restrictHumidity(ARID); tMutation.requireResource(STANDALONE.DRAGON_METAL.getBlock(), 1); - tMutation.addMutationCondition(new GT_Bees.DimensionMutationCondition(1, "End")); // End Dim + tMutation.addMutationCondition(new GTBees.DimensionMutationCondition(1, "End")); // End Dim }), FORCE(GTPP_BranchDefinition.LEGENDARY, "Force", STANDALONE.FORCE, true, Utils.rgbtoHexValue(250, 250, 20), Utils.rgbtoHexValue(200, 200, 5), beeSpecies -> { - beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.STONE), 0.30f); - beeSpecies.addProduct(GT_Bees.combs.getStackForType(CombType.SALT), 0.15f); - beeSpecies.addSpecialty(GTPP_Bees.combs.getStackForType(GTPP_CombType.FORCE), 0.10f); + beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.STONE), 0.30f); + beeSpecies.addProduct(GTBees.combs.getStackForType(CombType.SALT), 0.15f); + beeSpecies.addSpecialty(GTPP_Bees.combs.getStackForType(GTPPCombType.FORCE), 0.10f); beeSpecies.setHumidity(EnumHumidity.NORMAL); beeSpecies.setTemperature(EnumTemperature.HOT); beeSpecies.setHasEffect(); @@ -89,15 +90,15 @@ public enum GTPP_BeeDefinition implements IBeeDefinition { }),; private final GTPP_BranchDefinition branch; - private final GTPP_AlleleBeeSpecies species; - private final Consumer mSpeciesProperties; + private final GTPPAlleleBeeSpecies species; + private final Consumer mSpeciesProperties; private final Consumer mAlleles; private final Consumer mMutations; private IAllele[] template; private IBeeGenome genome; GTPP_BeeDefinition(GTPP_BranchDefinition branch, String binomial, Materials aMat, boolean dominant, int primary, - int secondary, Consumer aSpeciesProperties, Consumer aAlleles, + int secondary, Consumer aSpeciesProperties, Consumer aAlleles, Consumer aMutations) { this( branch, @@ -112,7 +113,7 @@ public enum GTPP_BeeDefinition implements IBeeDefinition { } GTPP_BeeDefinition(GTPP_BranchDefinition branch, String binomial, Material aMat, boolean dominant, int primary, - int secondary, Consumer aSpeciesProperties, Consumer aAlleles, + int secondary, Consumer aSpeciesProperties, Consumer aAlleles, Consumer aMutations) { this.mAlleles = aAlleles; this.mMutations = aMutations; @@ -123,13 +124,13 @@ public enum GTPP_BeeDefinition implements IBeeDefinition { String uid = "gtpp.bee.species" + species; String description = "for.description." + species; String name = "for.bees.species." + lowercaseName; - GT_LanguageManager.addStringLocalization("for.bees.species." + lowercaseName, species, true); + GTLanguageManager.addStringLocalization("for.bees.species." + lowercaseName, species, true); GTPP_Bees.sMaterialMappings.put( binomial.toLowerCase() .replaceAll(" ", ""), aMat); this.branch = branch; - this.species = new GTPP_AlleleBeeSpecies( + this.species = new GTPPAlleleBeeSpecies( uid, dominant, name, @@ -184,7 +185,7 @@ public enum GTPP_BeeDefinition implements IBeeDefinition { return ret; } - private final void setSpeciesProperties(GTPP_AlleleBeeSpecies species2) { + private final void setSpeciesProperties(GTPPAlleleBeeSpecies species2) { this.mSpeciesProperties.accept(species2); } @@ -239,7 +240,7 @@ public enum GTPP_BeeDefinition implements IBeeDefinition { */ private final IBeeMutationCustom registerMutation(IAlleleBeeSpecies parent1, IAlleleBeeSpecies parent2, int chance, float chancedivider) { - return new GTPP_Bee_Mutation(parent1, parent2, this.getTemplate(), chance, chancedivider); + return new GTPPBeeMutation(parent1, parent2, this.getTemplate(), chance, chancedivider); } private final IBeeMutationCustom registerMutation(GTPP_BeeDefinition parent1, IAlleleBeeSpecies parent2, int chance, @@ -285,14 +286,12 @@ public enum GTPP_BeeDefinition implements IBeeDefinition { return new BeeVariation.RainResist(this); } - private static final Class sGtBees = ReflectionUtils.getClass("gregtech.loaders.misc.GT_BeeDefinition"); - public static IAlleleBeeSpecies getGregtechBeeType(String name) { try { - Enum aBeeObject = ReflectionUtils.getEnum(sGtBees, name); - Field gtBeesField = ReflectionUtils.getField(sGtBees, "species"); - IAlleleBeeSpecies beeType = ReflectionUtils.getFieldValue(gtBeesField, aBeeObject); - return beeType != null ? beeType : null; + // This is still cursed, but the species field is private and I don't want to go modify that right now + GTBeeDefinition aBeeObject = GTBeeDefinition.valueOf(name); + Field gtBeesField = ReflectionUtils.getField(GTBeeDefinition.class, "species"); + return ReflectionUtils.getFieldValue(gtBeesField, aBeeObject); } catch (Throwable t) { t.printStackTrace(); return null; diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_Bee_Mutation.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_Bee_Mutation.java deleted file mode 100644 index d20b7ffb73..0000000000 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_Bee_Mutation.java +++ /dev/null @@ -1,86 +0,0 @@ -package gtPlusPlus.xmod.forestry.bees.registry; - -import java.lang.reflect.Field; -import java.util.List; - -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.world.World; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import forestry.api.apiculture.BeeManager; -import forestry.api.apiculture.IAlleleBeeSpecies; -import forestry.api.apiculture.IBeeGenome; -import forestry.api.apiculture.IBeeHousing; -import forestry.api.apiculture.IBeeModifier; -import forestry.api.core.IClimateProvider; -import forestry.api.genetics.IAllele; -import forestry.api.genetics.IGenome; -import forestry.api.genetics.IMutationCondition; -import forestry.apiculture.genetics.BeeMutation; -import forestry.core.genetics.mutations.Mutation; - -public class GTPP_Bee_Mutation extends BeeMutation { - - private final float split; - - public GTPP_Bee_Mutation(IAlleleBeeSpecies bee0, IAlleleBeeSpecies bee1, IAllele[] result, int chance, - float split) { - super(bee0, bee1, result, chance); - this.split = split; - BeeManager.beeRoot.registerMutation(this); - } - - @Override - public float getBaseChance() { - return super.getBaseChance() / split; - } - - @Override - public float getChance(IBeeHousing housing, IAlleleBeeSpecies allele0, IAlleleBeeSpecies allele1, - IBeeGenome genome0, IBeeGenome genome1) { - World world = housing != null ? housing.getWorld() : null; - ChunkCoordinates housingCoordinates = housing != null ? housing.getCoordinates() : null; - int x = housingCoordinates != null ? housingCoordinates.posX : 0; - int y = housingCoordinates != null ? housingCoordinates.posY : 0; - int z = housingCoordinates != null ? housingCoordinates.posZ : 0; - - float processedChance = getBasicChance(world, x, y, z, allele0, allele1, genome0, genome1, housing); - - if (processedChance <= 0f) { - return 0f; - } - - IBeeModifier beeHousingModifier = BeeManager.beeRoot.createBeeHousingModifier(housing); - IBeeModifier beeModeModifier = BeeManager.beeRoot.getBeekeepingMode(world) - .getBeeModifier(); - - processedChance *= beeHousingModifier.getMutationModifier(genome0, genome1, processedChance); - processedChance *= beeModeModifier.getMutationModifier(genome0, genome1, processedChance); - - return processedChance; - } - - @SuppressWarnings("unchecked") - private float getBasicChance(World world, int x, int y, int z, IAllele allele0, IAllele allele1, IGenome genome0, - IGenome genome1, IClimateProvider climate) { - float mutationChance = this.getBaseChance(); - List mutationConditions = null; - Field f = FieldUtils.getDeclaredField(Mutation.class, "mutationConditions", true); - if (f == null) f = FieldUtils.getField(Mutation.class, "mutationConditions", true); - if (f == null) return mutationChance; - try { - mutationConditions = f.get(this) instanceof List ? (List) f.get(this) : null; - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - - if (mutationConditions != null) for (IMutationCondition mutationCondition : mutationConditions) { - mutationChance *= mutationCondition.getChance(world, x, y, z, allele0, allele1, genome0, genome1, climate); - if (mutationChance == 0) { - return 0; - } - } - return mutationChance; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_Bees.java b/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_Bees.java index 77b7d57954..bfdddcca8b 100644 --- a/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_Bees.java +++ b/src/main/java/gtPlusPlus/xmod/forestry/bees/registry/GTPP_Bees.java @@ -4,18 +4,18 @@ import static gregtech.api.enums.Mods.Forestry; import java.util.HashMap; -import gregtech.GT_Mod; +import gregtech.GTMod; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_CombType; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_DropType; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_PollenType; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_PropolisType; -import gtPlusPlus.xmod.forestry.bees.items.output.GTPP_Comb; -import gtPlusPlus.xmod.forestry.bees.items.output.GTPP_Drop; -import gtPlusPlus.xmod.forestry.bees.items.output.GTPP_Pollen; -import gtPlusPlus.xmod.forestry.bees.items.output.GTPP_Propolis; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPCombType; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPDropType; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPPollenType; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPPropolisType; +import gtPlusPlus.xmod.forestry.bees.items.output.GTPPComb; +import gtPlusPlus.xmod.forestry.bees.items.output.GTPPDrop; +import gtPlusPlus.xmod.forestry.bees.items.output.GTPPPollen; +import gtPlusPlus.xmod.forestry.bees.items.output.GTPPPropolis; public class GTPP_Bees { @@ -25,32 +25,32 @@ public class GTPP_Bees { public static final byte MAGICBEES = 3; public static final byte GREGTECH = 4; - public static GTPP_Propolis propolis; - public static GTPP_Pollen pollen; - public static GTPP_Drop drop; - public static GTPP_Comb combs; + public static GTPPPropolis propolis; + public static GTPPPollen pollen; + public static GTPPDrop drop; + public static GTPPComb combs; public static HashMap sMaterialMappings = new HashMap<>(); - public static HashMap sPropolisMappings = new HashMap<>(); - public static HashMap sPollenMappings = new HashMap<>(); - public static HashMap sDropMappings = new HashMap<>(); - public static HashMap sCombMappings = new HashMap<>(); + public static HashMap sPropolisMappings = new HashMap<>(); + public static HashMap sPollenMappings = new HashMap<>(); + public static HashMap sDropMappings = new HashMap<>(); + public static HashMap sCombMappings = new HashMap<>(); public GTPP_Bees() { - if (Forestry.isModLoaded() && GT_Mod.gregtechproxy.mGTBees) { + if (Forestry.isModLoaded() && GTMod.gregtechproxy.mGTBees) { Logger.BEES("Creating required items."); - propolis = new GTPP_Propolis(); - pollen = new GTPP_Pollen(); - drop = new GTPP_Drop(); - combs = new GTPP_Comb(); + propolis = new GTPPPropolis(); + pollen = new GTPPPollen(); + drop = new GTPPDrop(); + combs = new GTPPComb(); Logger.BEES("Loading types."); initTypes(); Logger.BEES("Adding recipes."); - GTPP_Drop.initDropsRecipes(); - GTPP_Propolis.initPropolisRecipes(); - GTPP_Comb.initCombsRecipes(); + GTPPDrop.initDropsRecipes(); + GTPPPropolis.initPropolisRecipes(); + GTPPComb.initCombsRecipes(); Logger.BEES("Initialising bees."); GTPP_BeeDefinition.initBees(); @@ -60,10 +60,11 @@ public class GTPP_Bees { } private static void initTypes() { - ReflectionUtils.loadClass("gtPlusPlus.xmod.forestry.bees.registry.GTPP_BeeDefinition"); - ReflectionUtils.loadClass("gtPlusPlus.xmod.forestry.bees.handler.GTPP_CombType"); - ReflectionUtils.loadClass("gtPlusPlus.xmod.forestry.bees.handler.GTPP_DropType"); - ReflectionUtils.loadClass("gtPlusPlus.xmod.forestry.bees.handler.GTPP_PollenType"); - ReflectionUtils.loadClass("gtPlusPlus.xmod.forestry.bees.handler.GTPP_PropolisType"); + // This is stupid + ReflectionUtils.loadClass(GTPP_BeeDefinition.class.getName()); + ReflectionUtils.loadClass(GTPPCombType.class.getName()); + ReflectionUtils.loadClass(GTPPDropType.class.getName()); + ReflectionUtils.loadClass(GTPPPollenType.class.getName()); + ReflectionUtils.loadClass(GTPPPropolisType.class.getName()); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java b/src/main/java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java deleted file mode 100644 index e95baf43df..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/HANDLER_GT.java +++ /dev/null @@ -1,98 +0,0 @@ -package gtPlusPlus.xmod.gregtech; - -import static gregtech.api.enums.Mods.AdvancedSolarPanel; - -import java.util.ArrayList; -import java.util.List; - -import cpw.mods.fml.common.event.FMLLoadCompleteEvent; -import gregtech.api.GregTech_API; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_Config; -import gtPlusPlus.core.handler.COMPAT_HANDLER; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.everglades.gen.gt.WorldGen_GT; -import gtPlusPlus.recipes.CokeAndPyrolyseOven; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; -import gtPlusPlus.xmod.gregtech.api.util.GTPP_Config; -import gtPlusPlus.xmod.gregtech.common.Meta_GT_Proxy; -import gtPlusPlus.xmod.gregtech.common.blocks.fluid.GregtechFluidHandler; -import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechTools; -import gtPlusPlus.xmod.gregtech.loaders.Gregtech_Blocks; -import gtPlusPlus.xmod.gregtech.loaders.ProcessingAngleGrinder; -import gtPlusPlus.xmod.gregtech.loaders.ProcessingElectricSnips; -import gtPlusPlus.xmod.gregtech.loaders.misc.AddCustomMachineToPA; -import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoader_AlgaeFarm; -import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoader_MolecularTransformer; -import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoader_TreeFarm; -import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechConduits; - -public class HANDLER_GT { - - public static GT_Config mMaterialProperties = null; - public static GTPP_Config sCustomWorldgenFile = null; - public static final List sWorldgenListEverglades = new ArrayList<>(); - public static GT_MetaGenerated_Tool sMetaGeneratedToolInstance; - - public static void preInit() { - - if (mMaterialProperties != null) { - GT_Materials.init(mMaterialProperties); - } - - GregtechFluidHandler.run(); - } - - public static void init() { - - // Load General Blocks and set up some Basic Meta Tile Entity states - Gregtech_Blocks.run(); - - // Add Custom Pipes, Wires and Cables. - GregtechConduits.run(); - - // Register Tile Entities - COMPAT_HANDLER.registerGregtechMachines(); - - sMetaGeneratedToolInstance = MetaGeneratedGregtechTools.getInstance(); - } - - public static void postInit() { - - // Only loads if the config option is true (default: true) - new ProcessingAngleGrinder().run(); - new ProcessingElectricSnips().run(); - - // Add recipes - CokeAndPyrolyseOven.postInit(); - - // Register custom singles to the PA - AddCustomMachineToPA.register(); - - // Register some custom recipe maps for any enabled multiblocks. - // MultiblockRecipeMapHandler.run(); - - if (GregtechItemList.Circuit_BioRecipeSelector.hasBeenSet()) { - for (int i = 1; i <= 24; i++) { - GregTech_API.registerConfigurationCircuit(CI.getNumberedBioCircuit(i), 0); - } - } - - if (GregtechItemList.Circuit_T3RecipeSelector.hasBeenSet()) { - for (int i = 1; i <= 24; i++) { - GregTech_API.registerConfigurationCircuit(CI.getNumberedAdvancedCircuit(i), 3); - } - } - } - - public static void onLoadComplete(FMLLoadCompleteEvent event) { - CokeAndPyrolyseOven.onLoadComplete(); - Meta_GT_Proxy.fixIC2FluidNames(); - RecipeLoader_AlgaeFarm.generateRecipes(); - RecipeLoader_TreeFarm.generateRecipes(); - if (AdvancedSolarPanel.isModLoaded()) { - RecipeLoader_MolecularTransformer.run(); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/HandlerGT.java b/src/main/java/gtPlusPlus/xmod/gregtech/HandlerGT.java new file mode 100644 index 0000000000..286da597c8 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/HandlerGT.java @@ -0,0 +1,98 @@ +package gtPlusPlus.xmod.gregtech; + +import static gregtech.api.enums.Mods.AdvancedSolarPanel; + +import java.util.ArrayList; +import java.util.List; + +import cpw.mods.fml.common.event.FMLLoadCompleteEvent; +import gregtech.api.GregTechAPI; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTConfig; +import gtPlusPlus.core.handler.CompatHandler; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.everglades.gen.gt.WorldGen_GT; +import gtPlusPlus.recipes.CokeAndPyrolyseOven; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; +import gtPlusPlus.xmod.gregtech.api.util.GTPPConfig; +import gtPlusPlus.xmod.gregtech.common.MetaGTProxy; +import gtPlusPlus.xmod.gregtech.common.blocks.fluid.GregtechFluidHandler; +import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechTools; +import gtPlusPlus.xmod.gregtech.loaders.GTPPBlocks; +import gtPlusPlus.xmod.gregtech.loaders.ProcessingAngleGrinder; +import gtPlusPlus.xmod.gregtech.loaders.ProcessingElectricSnips; +import gtPlusPlus.xmod.gregtech.loaders.misc.AddCustomMachineToPA; +import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoaderAlgaeFarm; +import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoaderMolecularTransformer; +import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoaderTreeFarm; +import gtPlusPlus.xmod.gregtech.registration.gregtech.GregtechConduits; + +public class HandlerGT { + + public static GTConfig mMaterialProperties = null; + public static GTPPConfig sCustomWorldgenFile = null; + public static final List sWorldgenListEverglades = new ArrayList<>(); + public static MetaGeneratedTool sMetaGeneratedToolInstance; + + public static void preInit() { + + if (mMaterialProperties != null) { + GT_Materials.init(mMaterialProperties); + } + + GregtechFluidHandler.run(); + } + + public static void init() { + + // Load General Blocks and set up some Basic Meta Tile Entity states + GTPPBlocks.run(); + + // Add Custom Pipes, Wires and Cables. + GregtechConduits.run(); + + // Register Tile Entities + CompatHandler.registerGregtechMachines(); + + sMetaGeneratedToolInstance = MetaGeneratedGregtechTools.getInstance(); + } + + public static void postInit() { + + // Only loads if the config option is true (default: true) + new ProcessingAngleGrinder().run(); + new ProcessingElectricSnips().run(); + + // Add recipes + CokeAndPyrolyseOven.postInit(); + + // Register custom singles to the PA + AddCustomMachineToPA.register(); + + // Register some custom recipe maps for any enabled multiblocks. + // MultiblockRecipeMapHandler.run(); + + if (GregtechItemList.Circuit_BioRecipeSelector.hasBeenSet()) { + for (int i = 1; i <= 24; i++) { + GregTechAPI.registerConfigurationCircuit(CI.getNumberedBioCircuit(i), 0); + } + } + + if (GregtechItemList.Circuit_T3RecipeSelector.hasBeenSet()) { + for (int i = 1; i <= 24; i++) { + GregTechAPI.registerConfigurationCircuit(CI.getNumberedAdvancedCircuit(i), 3); + } + } + } + + public static void onLoadComplete(FMLLoadCompleteEvent event) { + CokeAndPyrolyseOven.onLoadComplete(); + MetaGTProxy.fixIC2FluidNames(); + RecipeLoaderAlgaeFarm.generateRecipes(); + RecipeLoaderTreeFarm.generateRecipes(); + if (AdvancedSolarPanel.isModLoaded()) { + RecipeLoaderMolecularTransformer.run(); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java index 708650dfe2..e51d60834f 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechItemList.java @@ -1,21 +1,21 @@ package gtPlusPlus.xmod.gregtech.api.enums; -import static gregtech.api.enums.GT_Values.W; +import static gregtech.api.enums.GTValues.W; import net.minecraft.block.Block; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.xmod.gregtech.api.interfaces.GregtechItemContainer; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.xmod.gregtech.api.interfaces.IGregtechItemContainer; /** * Class containing all non-OreDict Items of GregTech. */ -public enum GregtechItemList implements GregtechItemContainer { +public enum GregtechItemList implements IGregtechItemContainer { /** * Items @@ -777,16 +777,16 @@ public enum GregtechItemList implements GregtechItemContainer { GT_Dehydrator_ZPM, // Fluid Storage Tanks - GT_FluidTank_ULV, - GT_FluidTank_LV, - GT_FluidTank_MV, - GT_FluidTank_HV, - GT_FluidTank_EV, - GT_FluidTank_IV, - GT_FluidTank_LuV, - GT_FluidTank_ZPM, - GT_FluidTank_UV, - GT_FluidTank_MAX, + GTFluidTank_ULV, + GTFluidTank_LV, + GTFluidTank_MV, + GTFluidTank_HV, + GTFluidTank_EV, + GTFluidTank_IV, + GTFluidTank_LuV, + GTFluidTank_ZPM, + GTFluidTank_UV, + GTFluidTank_MAX, // GT RTG RTG, @@ -845,14 +845,14 @@ public enum GregtechItemList implements GregtechItemContainer { return this; } final ItemStack aStack = new ItemStack(aItem, 1, 0); - this.mStack = GT_Utility.copyAmount(1, aStack); + this.mStack = GTUtility.copyAmount(1, aStack); return this; } @Override public GregtechItemList set(final ItemStack aStack) { this.mHasNotBeenSet = false; - this.mStack = GT_Utility.copyAmount(1, aStack); + this.mStack = GTUtility.copyAmount(1, aStack); return this; } @@ -861,7 +861,7 @@ public enum GregtechItemList implements GregtechItemContainer { if (this.mHasNotBeenSet) { throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); } - if (GT_Utility.isStackInvalid(this.mStack)) { + if (GTUtility.isStackInvalid(this.mStack)) { return null; } return this.mStack.getItem(); @@ -887,15 +887,15 @@ public enum GregtechItemList implements GregtechItemContainer { @Override public boolean isStackEqual(final Object aStack, final boolean aWildcard, final boolean aIgnoreNBT) { - if (GT_Utility.isStackInvalid(aStack)) { + if (GTUtility.isStackInvalid(aStack)) { return false; } - return GT_Utility + return GTUtility .areUnificationsEqual((ItemStack) aStack, aWildcard ? this.getWildcard(1) : this.get(1), aIgnoreNBT); } public static Block getBlockFromStack(Object aStack) { - if (GT_Utility.isStackInvalid(aStack)) return Blocks.air; + if (GTUtility.isStackInvalid(aStack)) return Blocks.air; return Block.getBlockFromItem(((ItemStack) aStack).getItem()); } @@ -904,10 +904,10 @@ public enum GregtechItemList implements GregtechItemContainer { if (this.mHasNotBeenSet) { throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); } - if (GT_Utility.isStackInvalid(this.mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); + if (GTUtility.isStackInvalid(this.mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); } - return GT_Utility.copyAmount(aAmount, GT_OreDictUnificator.get(this.mStack)); + return GTUtility.copyAmount(aAmount, GTOreDictUnificator.get(this.mStack)); } @Override @@ -915,10 +915,10 @@ public enum GregtechItemList implements GregtechItemContainer { if (this.mHasNotBeenSet) { throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); } - if (GT_Utility.isStackInvalid(this.mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); + if (GTUtility.isStackInvalid(this.mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); } - return GT_Utility.copyAmountAndMetaData(aAmount, W, GT_OreDictUnificator.get(this.mStack)); + return GTUtility.copyAmountAndMetaData(aAmount, W, GTOreDictUnificator.get(this.mStack)); } @Override @@ -926,10 +926,10 @@ public enum GregtechItemList implements GregtechItemContainer { if (this.mHasNotBeenSet) { throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); } - if (GT_Utility.isStackInvalid(this.mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); + if (GTUtility.isStackInvalid(this.mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); } - return GT_Utility.copyAmountAndMetaData(aAmount, 0, GT_OreDictUnificator.get(this.mStack)); + return GTUtility.copyAmountAndMetaData(aAmount, 0, GTOreDictUnificator.get(this.mStack)); } @Override @@ -937,31 +937,31 @@ public enum GregtechItemList implements GregtechItemContainer { if (this.mHasNotBeenSet) { throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); } - if (GT_Utility.isStackInvalid(this.mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); + if (GTUtility.isStackInvalid(this.mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); } - return GT_Utility - .copyAmountAndMetaData(aAmount, this.mStack.getMaxDamage() - 1, GT_OreDictUnificator.get(this.mStack)); + return GTUtility + .copyAmountAndMetaData(aAmount, this.mStack.getMaxDamage() - 1, GTOreDictUnificator.get(this.mStack)); } @Override public ItemStack getWithName(final long aAmount, final String aDisplayName, final Object... aReplacements) { final ItemStack rStack = this.get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) { + if (GTUtility.isStackInvalid(rStack)) { return null; } rStack.setStackDisplayName(aDisplayName); - return GT_Utility.copyAmount(aAmount, rStack); + return GTUtility.copyAmount(aAmount, rStack); } @Override public ItemStack getWithCharge(final long aAmount, final int aEnergy, final Object... aReplacements) { final ItemStack rStack = this.get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) { + if (GTUtility.isStackInvalid(rStack)) { return null; } - GT_ModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); - return GT_Utility.copyAmount(aAmount, rStack); + GTModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); + return GTUtility.copyAmount(aAmount, rStack); } @Override @@ -969,10 +969,10 @@ public enum GregtechItemList implements GregtechItemContainer { if (this.mHasNotBeenSet) { throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); } - if (GT_Utility.isStackInvalid(this.mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); + if (GTUtility.isStackInvalid(this.mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); } - return GT_Utility.copyAmountAndMetaData(aAmount, aMetaValue, GT_OreDictUnificator.get(this.mStack)); + return GTUtility.copyAmountAndMetaData(aAmount, aMetaValue, GTOreDictUnificator.get(this.mStack)); } @Override @@ -981,7 +981,7 @@ public enum GregtechItemList implements GregtechItemContainer { throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); } for (final Object tOreName : aOreNames) { - GT_OreDictUnificator.registerOre(tOreName, this.get(1)); + GTOreDictUnificator.registerOre(tOreName, this.get(1)); } return this; } @@ -992,7 +992,7 @@ public enum GregtechItemList implements GregtechItemContainer { throw new IllegalAccessError("The Enum '" + this.name() + "' has not been set to an Item at this time!"); } for (final Object tOreName : aOreNames) { - GT_OreDictUnificator.registerOre(tOreName, this.getWildcard(1)); + GTOreDictUnificator.registerOre(tOreName, this.getWildcard(1)); } return this; } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechOrePrefixes.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechOrePrefixes.java index 655b242c04..fedd28f342 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechOrePrefixes.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/enums/GregtechOrePrefixes.java @@ -1,8 +1,8 @@ package gtPlusPlus.xmod.gregtech.api.enums; -import static gregtech.api.enums.GT_Values.B; -import static gregtech.api.enums.GT_Values.D2; -import static gregtech.api.enums.GT_Values.M; +import static gregtech.api.enums.GTValues.B; +import static gregtech.api.enums.GTValues.D2; +import static gregtech.api.enums.GTValues.M; import static gtPlusPlus.core.util.Utils.getTcAspectStack; import java.util.ArrayList; @@ -21,18 +21,18 @@ import gregtech.api.enums.Dyes; import gregtech.api.enums.Element; import gregtech.api.enums.Materials; import gregtech.api.enums.SubTag; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; +import gregtech.api.enums.TCAspects; +import gregtech.api.enums.TCAspects.TC_AspectStack; import gregtech.api.enums.TextureSet; import gregtech.api.interfaces.IColorModulationContainer; import gregtech.api.interfaces.ICondition; import gregtech.api.interfaces.ISubTagContainer; import gregtech.api.objects.MaterialStack; -import gregtech.api.util.GT_Config; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_OreRecipeRegistrator; +import gregtech.api.util.GTConfig; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.interfaces.internal.IOreRecipeRegistrator; import gtPlusPlus.xmod.gregtech.api.objects.GregtechItemData; import gtPlusPlus.xmod.gregtech.api.objects.GregtechMaterialStack; @@ -123,15 +123,15 @@ public enum GregtechOrePrefixes { public final List mAspects = new ArrayList<>(); public final Collection mFamiliarPrefixes = new HashSet<>(); /** - * Used to determine the amount of Material this Prefix contains. Multiply or Divide GregTech_API.MATERIAL_UNIT to + * Used to determine the amount of Material this Prefix contains. Multiply or Divide GregTechAPI.MATERIAL_UNIT to * get the Amounts in comparision to one Ingot. 0 = Null Negative = Undefined Amount */ public final long mMaterialAmount; private final Collection mNotGeneratedItems = new HashSet<>(), mIgnoredMaterials = new HashSet<>(), mGeneratedItems = new HashSet<>(); - private final ArrayList mOreProcessing = new ArrayList<>(); - private final ArrayList mOreProcessingFake = new ArrayList<>(); + private final ArrayList mOreProcessing = new ArrayList<>(); + private final ArrayList mOreProcessingFake = new ArrayList<>(); public final ItemStack mContainerItem = null; public final ICondition mCondition = null; public byte mDefaultStackSize = 64; @@ -170,64 +170,64 @@ public enum GregtechOrePrefixes { // TODO - Utilise some form of way to check if it's gt 5.9 if so, use string switch. if (this.name() .startsWith("ore")) { - getTcAspectStack(TC_Aspects.TERRA.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.TERRA.name(), 1).addToAspectList(this.mAspects); return; } if (this.name() .startsWith("wire") || this.name() .startsWith("cable")) { - getTcAspectStack(TC_Aspects.ELECTRUM.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.ELECTRUM.name(), 1).addToAspectList(this.mAspects); return; } if (this.name() .startsWith("dust")) { - getTcAspectStack(TC_Aspects.PERDITIO.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.PERDITIO.name(), 1).addToAspectList(this.mAspects); return; } if (this.name() .startsWith("crushed")) { - getTcAspectStack(TC_Aspects.PERFODIO.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.PERFODIO.name(), 1).addToAspectList(this.mAspects); return; } if (this.name() .startsWith("ingot") || this.name() .startsWith("nugget")) { - getTcAspectStack(TC_Aspects.METALLUM.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.METALLUM.name(), 1).addToAspectList(this.mAspects); return; } if (this.name() .startsWith("armor")) { - getTcAspectStack(TC_Aspects.TUTAMEN.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.TUTAMEN.name(), 1).addToAspectList(this.mAspects); return; } if (this.name() .startsWith("stone")) { - getTcAspectStack(TC_Aspects.TERRA.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.TERRA.name(), 1).addToAspectList(this.mAspects); return; } if (this.name() .startsWith("pipe")) { - getTcAspectStack(TC_Aspects.ITER.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.ITER.name(), 1).addToAspectList(this.mAspects); return; } if (this.name() .startsWith("gear")) { - getTcAspectStack(TC_Aspects.MOTUS.name(), 1).addToAspectList(this.mAspects); - getTcAspectStack(TC_Aspects.MACHINA.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.MOTUS.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.MACHINA.name(), 1).addToAspectList(this.mAspects); return; } if (this.name() .startsWith("frame") || this.name() .startsWith("plate")) { - getTcAspectStack(TC_Aspects.FABRICO.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.FABRICO.name(), 1).addToAspectList(this.mAspects); return; } if (this.name() .startsWith("tool")) { - getTcAspectStack(TC_Aspects.INSTRUMENTUM.name(), 2).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.INSTRUMENTUM.name(), 2).addToAspectList(this.mAspects); return; } if (this.name() @@ -236,7 +236,7 @@ public enum GregtechOrePrefixes { .startsWith("crystal") || this.name() .startsWith("lens")) { - getTcAspectStack(TC_Aspects.VITREUS.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.VITREUS.name(), 1).addToAspectList(this.mAspects); return; } if (this.name() @@ -246,7 +246,7 @@ public enum GregtechOrePrefixes { } if (this.name() .startsWith("battery")) { - getTcAspectStack(TC_Aspects.ELECTRUM.name(), 1).addToAspectList(this.mAspects); + getTcAspectStack(TCAspects.ELECTRUM.name(), 1).addToAspectList(this.mAspects); } } @@ -282,7 +282,7 @@ public enum GregtechOrePrefixes { } public static GregtechOrePrefixes getPrefix(final String aPrefixName, final GregtechOrePrefixes aReplacement) { - final Object tObject = GT_Utility.getFieldContent(GregtechOrePrefixes.class, aPrefixName, false, false); + final Object tObject = GTUtility.getFieldContent(GregtechOrePrefixes.class, aPrefixName, false, false); if ((tObject != null) && (tObject instanceof GregtechOrePrefixes)) { return (GregtechOrePrefixes) tObject; } @@ -323,7 +323,7 @@ public enum GregtechOrePrefixes { return false; } for (final ItemStack tStack : this.mPrefixedItems) { - if (GT_Utility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())) { + if (GTUtility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())) { return true; } } @@ -353,7 +353,7 @@ public enum GregtechOrePrefixes { return this.mFamiliarPrefixes.add(aPrefix); } - public boolean add(final Interface_OreRecipeRegistrator aRegistrator) { + public boolean add(final IOreRecipeRegistrator aRegistrator) { if (aRegistrator == null) { return false; } @@ -364,19 +364,19 @@ public enum GregtechOrePrefixes { final ItemStack aStack) { if ((aMaterial != null) && ((aMaterial != GT_Materials._NULL) || this.mIsSelfReferencing || !this.mIsMaterialBased) - && GT_Utility.isStackValid(aStack)) { - for (final Interface_OreRecipeRegistrator tRegistrator : this.mOreProcessing) { + && GTUtility.isStackValid(aStack)) { + for (final IOreRecipeRegistrator tRegistrator : this.mOreProcessing) { if (D2) { - GT_Log.ore.println( + GTLog.ore.println( "Processing '" + aOreDictName + "' with the Prefix '" + this.name() + "' and the Material '" + aMaterial.name() + "' at " - + GT_Utility.getClassName(tRegistrator)); + + GTUtility.getClassName(tRegistrator)); } - tRegistrator.registerOre(this, aMaterial, aOreDictName, aModName, GT_Utility.copyAmount(1, aStack)); + tRegistrator.registerOre(this, aMaterial, aOreDictName, aModName, GTUtility.copyAmount(1, aStack)); } } } @@ -385,19 +385,19 @@ public enum GregtechOrePrefixes { public void processOre(final Materials aMaterial, final String aOreDictName, final String aModName, final ItemStack aStack) { if ((aMaterial != null) && ((aMaterial != Materials._NULL) || this.mIsSelfReferencing || !this.mIsMaterialBased) - && GT_Utility.isStackValid(aStack)) { - for (final Interface_OreRecipeRegistrator tRegistrator : this.mOreProcessingFake) { + && GTUtility.isStackValid(aStack)) { + for (final IOreRecipeRegistrator tRegistrator : this.mOreProcessingFake) { if (D2) { - GT_Log.ore.println( + GTLog.ore.println( "Processing '" + aOreDictName + "' with the Prefix '" + this.name() + "' and the Material '" + aMaterial.mName + "' at " - + GT_Utility.getClassName(tRegistrator)); + + GTUtility.getClassName(tRegistrator)); } - tRegistrator.registerOre(this, aMaterial, aOreDictName, aModName, GT_Utility.copyAmount(1, aStack)); + tRegistrator.registerOre(this, aMaterial, aOreDictName, aModName, GTUtility.copyAmount(1, aStack)); } } } @@ -432,7 +432,7 @@ public enum GregtechOrePrefixes { * */ _NULL(-1, TextureSet.SET_NONE, 1.0F, 0, 0, 0, 255, 255, 255, 0, "NULL", 0, 0, 0, 0, false, false, 1, 1, 1, - Dyes._NULL, Element._NULL, Arrays.asList(getTcAspectStack(TC_Aspects.VACUOS.name(), 1))), + Dyes._NULL, Element._NULL, Arrays.asList(getTcAspectStack(TCAspects.VACUOS.name(), 1))), // Lapis(526, TextureSet.SET_LAPIS, 1.0F, 0, 1, 1 | 4 | 8, 70, 70, 220, 0, "Lapis", 0, 0, -1, 0, false, false, // 3, 1, 1, Dyes.dyeBlue, 2, Arrays.asList(new MaterialStack(Materials.Lazurite, 12), new @@ -445,7 +445,7 @@ public enum GregtechOrePrefixes { new MaterialStack(Materials.Redstone, 1), new MaterialStack(Materials.Blaze, 1), new MaterialStack(Materials.Sulfur, 1)), - Arrays.asList(getTcAspectStack("PRAECANTATIO", 2), getTcAspectStack(TC_Aspects.IGNIS, 1))), + Arrays.asList(getTcAspectStack("PRAECANTATIO", 2), getTcAspectStack(TCAspects.IGNIS, 1))), Cryotheum(21, TextureSet.SET_FLUID, 1.0F, 0, 1, 2 | 16 | 32, 102, 178, 255, 0, "Cryotheum", 0, 0, -1, 0, false, false, 2, 3, 1, Dyes.dyeLightBlue, 2, Arrays.asList( @@ -453,7 +453,7 @@ public enum GregtechOrePrefixes { new MaterialStack(Materials.Redstone, 1), new MaterialStack(Materials.Snow, 1), new MaterialStack(Materials.Niter, 1)), - Arrays.asList(getTcAspectStack("PRAECANTATIO", 2), getTcAspectStack(TC_Aspects.GELUM, 1))), + Arrays.asList(getTcAspectStack("PRAECANTATIO", 2), getTcAspectStack(TCAspects.GELUM, 1))), Ender(22, TextureSet.SET_FLUID, 1.0F, 0, 2, 1, 255, 255, 255, 0, "Ender", 0, 0, -1, 0, false, false, 3, 1, 1, Dyes.dyeGreen), @@ -462,57 +462,57 @@ public enum GregtechOrePrefixes { */ Symbiotic(-1, TextureSet.SET_NONE, 1.0F, 0, 0, 0, 255, 255, 255, 0, "IV Tier", 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray, - Arrays.asList(getTcAspectStack(TC_Aspects.ELECTRUM, 4), getTcAspectStack(TC_Aspects.MACHINA, 4))), + Arrays.asList(getTcAspectStack(TCAspects.ELECTRUM, 4), getTcAspectStack(TCAspects.MACHINA, 4))), Neutronic(-1, TextureSet.SET_NONE, 1.0F, 0, 0, 0, 255, 255, 255, 0, "LuV Tier", 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray, - Arrays.asList(getTcAspectStack(TC_Aspects.ELECTRUM, 6), getTcAspectStack(TC_Aspects.MACHINA, 6))), + Arrays.asList(getTcAspectStack(TCAspects.ELECTRUM, 6), getTcAspectStack(TCAspects.MACHINA, 6))), Quantum(-1, TextureSet.SET_NONE, 1.0F, 0, 0, 0, 255, 255, 255, 0, "ZPM Tier", 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeLightGray, - Arrays.asList(getTcAspectStack(TC_Aspects.ELECTRUM, 8), getTcAspectStack(TC_Aspects.MACHINA, 8))), + Arrays.asList(getTcAspectStack(TCAspects.ELECTRUM, 8), getTcAspectStack(TCAspects.MACHINA, 8))), Superconductor(-1, TextureSet.SET_NONE, 1.0F, 0, 0, 0, 190, 240, 190, 0, "Superconductor", 0, 0, -1, 0, false, - false, 1, 1, 1, Dyes.dyeGreen, Arrays.asList(getTcAspectStack(TC_Aspects.ELECTRUM, 8))), + false, 1, 1, 1, Dyes.dyeGreen, Arrays.asList(getTcAspectStack(TCAspects.ELECTRUM, 8))), Staballoy(30, TextureSet.SET_ROUGH, 10.0F, 5120, 4, 1 | 2 | 16 | 32 | 64 | 128, 68, 75, 66, 0, "Staballoy", 0, 0, 1500, 2800, true, false, 1, 3, 1, Dyes.dyeGreen, 2, Arrays.asList(new MaterialStack(Materials.Titanium, 1), new MaterialStack(Materials.Uranium, 9)), - Arrays.asList(getTcAspectStack(TC_Aspects.METALLUM, 8), getTcAspectStack(TC_Aspects.STRONTIO, 3))), + Arrays.asList(getTcAspectStack(TCAspects.METALLUM, 8), getTcAspectStack(TCAspects.STRONTIO, 3))), Bedrockium(31, TextureSet.SET_FINE, 8.0F, 8196, 3, 1 | 2 | 16 | 32 | 64 | 128, 39, 39, 39, 0, "Bedrockium", 0, 0, -1, 0, false, false, 1, 5, 1, Dyes.dyeLightGray, 2, Arrays.asList(new MaterialStack(Materials.Carbon, 63), new MaterialStack(Materials.Carbon, 56)), - Arrays.asList(getTcAspectStack(TC_Aspects.VACUOS, 8), getTcAspectStack(TC_Aspects.TUTAMEN, 3))), + Arrays.asList(getTcAspectStack(TCAspects.VACUOS, 8), getTcAspectStack(TCAspects.TUTAMEN, 3))), BloodSteel(32, TextureSet.SET_METALLIC, 11.0F, 768, 4, 1 | 2 | 16 | 32 | 64 | 128, 142, 28, 0, 0, "Blood Steel", 0, 0, -1, 0, false, false, 1, 1, 1, Dyes.dyeRed, 2, Arrays.asList(new MaterialStack(Materials.Steel, 3)), - Arrays.asList(getTcAspectStack(TC_Aspects.VICTUS, 8), getTcAspectStack(TC_Aspects.IGNIS, 3))), + Arrays.asList(getTcAspectStack(TCAspects.VICTUS, 8), getTcAspectStack(TCAspects.IGNIS, 3))), Void(33, TextureSet.SET_METALLIC, 6.0F, 1280, 3, 1 | 2 | 16 | 32 | 64 | 128, 82, 17, 82, 0, "Void Metal", 0, 0, -1, 0, false, false, 3, 1, 1, Dyes.dyeBlack, - Arrays.asList(getTcAspectStack("PRAECANTATIO", 5), getTcAspectStack(TC_Aspects.VACUOS, 7))), + Arrays.asList(getTcAspectStack("PRAECANTATIO", 5), getTcAspectStack(TCAspects.VACUOS, 7))), ConductiveIron(34, TextureSet.SET_METALLIC, 5.0F, 256, 2, 1 | 2, 164, 109, 100, 0, "Conductive Iron", 0, 0, -1, 0, false, false, 3, 1, 1, Dyes.dyeRed, 2, Arrays.asList(new MaterialStack(Materials.Iron, 6), new MaterialStack(Materials.Redstone, 2)), - Arrays.asList(getTcAspectStack(TC_Aspects.POTENTIA, 2), getTcAspectStack(TC_Aspects.METALLUM, 2))), + Arrays.asList(getTcAspectStack(TCAspects.POTENTIA, 2), getTcAspectStack(TCAspects.METALLUM, 2))), ElectricalSteel(35, TextureSet.SET_METALLIC, 7.0F, 768, 3, 1 | 2 | 64 | 128, 194, 194, 194, 0, "Electrical Steel", 0, 0, 1811, 1000, true, false, 3, 1, 1, Dyes.dyeLightGray, 2, Arrays.asList( new MaterialStack(Materials.Iron, 3), new MaterialStack(Materials.Coal, 2), new MaterialStack(Materials.Silicon, 2)), - Arrays.asList(getTcAspectStack(TC_Aspects.MAGNETO, 2), getTcAspectStack(TC_Aspects.ELECTRUM, 5))), + Arrays.asList(getTcAspectStack(TCAspects.MAGNETO, 2), getTcAspectStack(TCAspects.ELECTRUM, 5))), EnergeticAlloy(36, TextureSet.SET_SHINY, 5.0F, 512, 3, 1 | 2 | 64 | 128, 252, 152, 45, 0, "Energetic Alloy", 0, 0, -1, 0, false, false, 3, 1, 1, Dyes.dyeOrange, 2, Arrays.asList( new MaterialStack(Materials.Gold, 3), new MaterialStack(Materials.Glowstone, 2), new MaterialStack(Materials.Redstone, 2)), - Arrays.asList(getTcAspectStack(TC_Aspects.POTENTIA, 4), getTcAspectStack(TC_Aspects.LUX, 3))), + Arrays.asList(getTcAspectStack(TCAspects.POTENTIA, 4), getTcAspectStack(TCAspects.LUX, 3))), VibrantAlloy(37, TextureSet.SET_SHINY, 7.0F, 1280, 4, 1 | 2 | 64 | 128, 204, 242, 142, 0, "Vibrant Alloy", 0, 0, -1, 0, false, false, 3, 1, 1, Dyes.dyeLime, 2, Arrays.asList(new MaterialStack(Materials.EnergeticAlloy, 1), new MaterialStack(Materials.EnderPearl, 3)), - Arrays.asList(getTcAspectStack(TC_Aspects.MACHINA, 5), getTcAspectStack(TC_Aspects.TELUM, 4))), + Arrays.asList(getTcAspectStack(TCAspects.MACHINA, 5), getTcAspectStack(TCAspects.TELUM, 4))), PulsatingIron(38, TextureSet.SET_SHINY, 5.0F, 256, 2, 1 | 2 | 64 | 128, 50, 91, 21, 0, "Pulsating Iron", 0, 0, -1, 0, false, false, 3, 1, 1, Dyes.dyeGreen, 2, Arrays.asList(new MaterialStack(Materials.Iron, 2), new MaterialStack(Materials.EnderPearl, 2)), - Arrays.asList(getTcAspectStack(TC_Aspects.ALIENIS, 3), getTcAspectStack(TC_Aspects.METALLUM, 3))), + Arrays.asList(getTcAspectStack(TCAspects.ALIENIS, 3), getTcAspectStack(TCAspects.METALLUM, 3))), /* TODO */ RedstoneAlloy(39, TextureSet.SET_METALLIC, 1.0F, 256, 2, 1 | 2 | 16 | 32 | 64, 178, 34, 34, 0, "Redstone Alloy", 0, 0, -1, 0, false, false, 3, 1, 1, Dyes.dyeRed, 2, Arrays.asList(new MaterialStack(Materials.Iron, 2), new MaterialStack(Materials.Redstone, 4))), @@ -521,14 +521,14 @@ public enum GregtechOrePrefixes { Tantalloy60(40, TextureSet.SET_DULL, 8.0F, 5120, 3, 1 | 2 | 16 | 32 | 64 | 128, 68, 75, 166, 0, "Tantalloy-60", 0, 0, 3035, 2200, true, false, 1, 2, 1, Dyes.dyeLightBlue, 2, Arrays.asList(new MaterialStack(Materials.Tungsten, 1), new MaterialStack(Materials.Tantalum, 9)), - Arrays.asList(getTcAspectStack(TC_Aspects.METALLUM, 8), getTcAspectStack(TC_Aspects.STRONTIO, 3))), + Arrays.asList(getTcAspectStack(TCAspects.METALLUM, 8), getTcAspectStack(TCAspects.STRONTIO, 3))), Tantalloy61(41, TextureSet.SET_DULL, 7.0F, 5120, 2, 1 | 2 | 16 | 32 | 64 | 128, 122, 135, 196, 0, "Tantalloy-61", 0, 0, 3015, 2150, true, false, 1, 2, 1, Dyes.dyeLightBlue, 2, Arrays.asList( new MaterialStack(Materials.Tungsten, 1), new MaterialStack(Materials.Tantalum, 9), new MaterialStack(Materials.Titanium, 1)), - Arrays.asList(getTcAspectStack(TC_Aspects.METALLUM, 8), getTcAspectStack(TC_Aspects.STRONTIO, 3))), + Arrays.asList(getTcAspectStack(TCAspects.METALLUM, 8), getTcAspectStack(TCAspects.STRONTIO, 3))), Potin(42, TextureSet.SET_METALLIC, 7.0F, 5120, 2, 1 | 2 | 16 | 32 | 64 | 128, 201, 151, 129, 0, "Potin", 0, 0, 3015, 2150, true, false, 1, 2, 1, Dyes.dyeLightBlue, 2, @@ -536,42 +536,42 @@ public enum GregtechOrePrefixes { new MaterialStack(Materials.Tungsten, 1), new MaterialStack(Materials.Tantalum, 9), new MaterialStack(Materials.Titanium, 1)), - Arrays.asList(getTcAspectStack(TC_Aspects.METALLUM, 8), getTcAspectStack(TC_Aspects.STRONTIO, 3))), + Arrays.asList(getTcAspectStack(TCAspects.METALLUM, 8), getTcAspectStack(TCAspects.STRONTIO, 3))), Inconel792(43, TextureSet.SET_METALLIC, 7.0F, 5120, 2, 1 | 2 | 16 | 32 | 64 | 128, 108, 240, 118, 0, "Inconel-792", 0, 0, 3015, 2150, true, false, 1, 2, 1, Dyes.dyeLightBlue, 2, Arrays.asList( new MaterialStack(Materials.Tungsten, 1), new MaterialStack(Materials.Tantalum, 9), new MaterialStack(Materials.Titanium, 1)), - Arrays.asList(getTcAspectStack(TC_Aspects.METALLUM, 8), getTcAspectStack(TC_Aspects.STRONTIO, 3))), + Arrays.asList(getTcAspectStack(TCAspects.METALLUM, 8), getTcAspectStack(TCAspects.STRONTIO, 3))), Inconel690(44, TextureSet.SET_DULL, 7.0F, 5120, 2, 1 | 2 | 16 | 32 | 64 | 128, 118, 220, 138, 0, "Inconel-690", 0, 0, 3015, 2150, true, false, 1, 2, 1, Dyes.dyeLightBlue, 2, Arrays.asList( new MaterialStack(Materials.Tungsten, 1), new MaterialStack(Materials.Tantalum, 9), new MaterialStack(Materials.Titanium, 1)), - Arrays.asList(getTcAspectStack(TC_Aspects.METALLUM, 8), getTcAspectStack(TC_Aspects.STRONTIO, 3))), + Arrays.asList(getTcAspectStack(TCAspects.METALLUM, 8), getTcAspectStack(TCAspects.STRONTIO, 3))), MaragingSteel300(45, TextureSet.SET_METALLIC, 7.0F, 5120, 2, 1 | 2 | 16 | 32 | 64 | 128, 150, 150, 150, 0, "Maraging Steel 300", 0, 0, 3015, 2150, true, false, 1, 2, 1, Dyes.dyeLightBlue, 2, Arrays.asList( new MaterialStack(Materials.Tungsten, 1), new MaterialStack(Materials.Tantalum, 9), new MaterialStack(Materials.Titanium, 1)), - Arrays.asList(getTcAspectStack(TC_Aspects.METALLUM, 8), getTcAspectStack(TC_Aspects.STRONTIO, 3))), + Arrays.asList(getTcAspectStack(TCAspects.METALLUM, 8), getTcAspectStack(TCAspects.STRONTIO, 3))), MaragingSteel350(46, TextureSet.SET_METALLIC, 7.0F, 5120, 2, 1 | 2 | 16 | 32 | 64 | 128, 160, 160, 160, 0, "Maraging Steel 350", 0, 0, 3015, 2150, true, false, 1, 2, 1, Dyes.dyeLightBlue, 2, Arrays.asList( new MaterialStack(Materials.Tungsten, 1), new MaterialStack(Materials.Tantalum, 9), new MaterialStack(Materials.Titanium, 1)), - Arrays.asList(getTcAspectStack(TC_Aspects.METALLUM, 8), getTcAspectStack(TC_Aspects.STRONTIO, 3))), + Arrays.asList(getTcAspectStack(TCAspects.METALLUM, 8), getTcAspectStack(TCAspects.STRONTIO, 3))), HastelloyX(47, TextureSet.SET_SHINY, 7.0F, 5120, 2, 1 | 2 | 16 | 32 | 64 | 128, 255, 193, 37, 0, "Hastelloy-X", 0, 0, 3015, 2150, true, false, 1, 2, 1, Dyes.dyeLightBlue, 2, Arrays.asList( new MaterialStack(Materials.Tungsten, 1), new MaterialStack(Materials.Tantalum, 9), new MaterialStack(Materials.Titanium, 1)), - Arrays.asList(getTcAspectStack(TC_Aspects.METALLUM, 8), getTcAspectStack(TC_Aspects.STRONTIO, 3))), + Arrays.asList(getTcAspectStack(TCAspects.METALLUM, 8), getTcAspectStack(TCAspects.STRONTIO, 3))), TriniumNaquadahCarbonite(48, TextureSet.SET_SHINY, 7.0F, 5120, 2, 1 | 2 | 16 | 32 | 64 | 128, 255, 233, 0, 0, "Trinium Naquadah Carbonite", 0, 0, 3015, 2150, true, false, 1, 2, 1, Dyes.dyeLightBlue, 2, @@ -579,7 +579,7 @@ public enum GregtechOrePrefixes { new MaterialStack(Materials.Tungsten, 1), new MaterialStack(Materials.Tantalum, 9), new MaterialStack(Materials.Titanium, 1)), - Arrays.asList(getTcAspectStack(TC_Aspects.METALLUM, 8), getTcAspectStack(TC_Aspects.STRONTIO, 3))), + Arrays.asList(getTcAspectStack(TCAspects.METALLUM, 8), getTcAspectStack(TCAspects.STRONTIO, 3))), // Radioactive Materials HydrofluoricAcid(-1, TextureSet.SET_FLUID, 1.0F, 0, 1, 2 | 16 | 32, 200, 200, 200, 0, "Hydrofluoric Acid", 0, 0, @@ -727,8 +727,8 @@ public enum GregtechOrePrefixes { this.mToolSpeed = aToolSpeed; this.mIconSet = aIconSet; if (aMetaItemSubID >= 0) { - if (CORE.sMU_GeneratedMaterials[aMetaItemSubID] == null) { - CORE.sMU_GeneratedMaterials[aMetaItemSubID] = this; + if (GTPPCore.sMU_GeneratedMaterials[aMetaItemSubID] == null) { + GTPPCore.sMU_GeneratedMaterials[aMetaItemSubID] = this; } else { throw new IllegalArgumentException("The Index " + aMetaItemSubID + " is already used!"); } @@ -971,7 +971,7 @@ public enum GregtechOrePrefixes { } public static GT_Materials get(final String aMaterialName) { - final Object tObject = GT_Utility.getFieldContent(GT_Materials.class, aMaterialName, false, false); + final Object tObject = GTUtility.getFieldContent(GT_Materials.class, aMaterialName, false, false); if ((tObject != null) && (tObject instanceof GT_Materials)) { return (GT_Materials) tObject; } @@ -987,7 +987,7 @@ public enum GregtechOrePrefixes { * * @param aConfiguration */ - public static void init(final GT_Config aConfiguration) { + public static void init(final GTConfig aConfiguration) { for (final GT_Materials tMaterial : VALUES) { final String tString = tMaterial.toString() .toLowerCase(); @@ -1110,7 +1110,7 @@ public enum GregtechOrePrefixes { } for (final ItemStack tStack : this.mMaterialItems) { for (final ItemStack aStack : aStacks) { - if (GT_Utility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())) { + if (GTUtility.areStacksEqual(aStack, tStack, !tStack.hasTagCompound())) { return true; } } @@ -1127,7 +1127,7 @@ public enum GregtechOrePrefixes { } boolean temp = false; for (int i = 0; i < this.mMaterialItems.size(); i++) { - if (GT_Utility.areStacksEqual(aStack, this.mMaterialItems.get(i))) { + if (GTUtility.areStacksEqual(aStack, this.mMaterialItems.get(i))) { this.mMaterialItems.remove(i--); temp = true; } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/GTPPUITextures.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/GTPPUITextures.java new file mode 100644 index 0000000000..08cff8d55e --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/GTPPUITextures.java @@ -0,0 +1,139 @@ +package gtPlusPlus.xmod.gregtech.api.gui; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import com.gtnewhorizons.modularui.api.drawable.AdaptableUITexture; +import com.gtnewhorizons.modularui.api.drawable.UITexture; + +public class GTPPUITextures { + + public static final UITexture OVERLAY_SLOT_COAL = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/coal"); + public static final UITexture OVERLAY_SLOT_CANISTER_DARK = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_slot/canister_dark"); + + public static final AdaptableUITexture BACKGROUND_YELLOW = AdaptableUITexture + .of(GTPlusPlus.ID, "gui/background/yellow", 176, 166, 4); + + public static final AdaptableUITexture SLOT_ITEM_YELLOW = AdaptableUITexture + .of(GTPlusPlus.ID, "gui/slot/item_yellow", 18, 18, 1); + public static final AdaptableUITexture[] SLOT_INVENTORY_MANAGER = new AdaptableUITexture[] { + AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/red", 18, 18, 1), + AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/green", 18, 18, 1), + AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/blue", 18, 18, 1), + AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/cyan", 18, 18, 1), + AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/magenta", 18, 18, 1), + AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/yellow", 18, 18, 1), }; + + public static final UITexture BUTTON_STANDARD_BRONZE = UITexture + .fullImage(GTPlusPlus.ID, "gui/button/standard_bronze"); + + public static final UITexture OVERLAY_SLOT_WEED_EX = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/weed_ex"); + public static final UITexture OVERLAY_SLOT_FERTILIZER = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_slot/fertilizer"); + public static final UITexture OVERLAY_SLOT_ELECTRIC_TOOL = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_slot/electric_tool"); + public static final UITexture OVERLAY_SLOT_PAGE_PRINTED_BRONZE = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_slot/page_printed_bronze"); + public static final UITexture OVERLAY_SLOT_ARROW = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow"); + public static final UITexture OVERLAY_SLOT_ARROW_BRONZE = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_bronze"); + public static final UITexture OVERLAY_SLOT_CRAFT_OUTPUT = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_slot/craft_output"); + public static final UITexture OVERLAY_SLOT_CRAFT_OUTPUT_BRONZE = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_slot/craft_output_bronze"); + public static final UITexture OVERLAY_SLOT_PARK = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/park"); + public static final UITexture OVERLAY_SLOT_PARK_BRONZE = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_slot/park_bronze"); + public static final UITexture OVERLAY_SLOT_INGOT = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/ingot"); + public static final UITexture OVERLAY_SLOT_ARROW_4 = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_4"); + public static final UITexture OVERLAY_SLOT_TURBINE = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/turbine"); + public static final UITexture OVERLAY_SLOT_CHEST = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/chest"); + public static final UITexture[] OVERLAY_SLOT_INVENTORY_MANAGER_COLOR = new UITexture[] { + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/red"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/green"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/blue"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/cyan"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/magenta"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/yellow"), }; + public static final UITexture[] OVERLAY_SLOT_INVENTORY_MANAGER_ARROW = new UITexture[] { + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_red"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_green"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_blue"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_cyan"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_magenta"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_yellow"), }; + + public static final UITexture PROGRESSBAR_FLUID_REACTOR = UITexture + .fullImage(GTPlusPlus.ID, "gui/progressbar/fluid_reactor"); + public static final UITexture PROGRESSBAR_BOILER_EMPTY = UITexture + .fullImage(GTPlusPlus.ID, "gui/progressbar/boiler_empty"); + public static final UITexture PROGRESSBAR_FUEL = UITexture.fullImage(GTPlusPlus.ID, "gui/progressbar/fuel"); + public static final UITexture PROGRESSBAR_ARROW_2 = UITexture.fullImage(GTPlusPlus.ID, "gui/progressbar/arrow_2"); + public static final UITexture PROGRESSBAR_PSS_ENERGY = UITexture + .fullImage(GTPlusPlus.ID, "gui/progressbar/pss_energy"); + + public static final AdaptableUITexture TAB_TITLE_YELLOW = AdaptableUITexture + .of(GTPlusPlus.ID, "gui/tab/title_yellow", 28, 28, 4); + public static final AdaptableUITexture TAB_TITLE_ANGULAR_YELLOW = AdaptableUITexture + .of(GTPlusPlus.ID, "gui/tab/title_angular_yellow", 28, 28, 4); + public static final AdaptableUITexture TAB_TITLE_DARK_YELLOW = AdaptableUITexture + .of(GTPlusPlus.ID, "gui/tab/title_dark_yellow", 28, 28, 4); + + public static final UITexture OVERLAY_BUTTON_HARVESTER_MODE = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_button/harvester_mode"); + public static final UITexture OVERLAY_BUTTON_HARVESTER_TOGGLE = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_button/harvester_toggle"); + public static final UITexture OVERLAY_BUTTON_FLUSH = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/flush"); + public static final UITexture OVERLAY_BUTTON_FLUSH_BRONZE = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_button/flush_bronze"); + public static final UITexture OVERLAY_BUTTON_AUTOMATION = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_button/automation"); + public static final UITexture OVERLAY_BUTTON_LOCK = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/lock"); + public static final UITexture[] OVERLAY_BUTTON_THROUGHPUT = IntStream.range(0, 4) // GT_MetaTileEntity_ElectricAutoWorkbench#MAX_THROUGHPUT + .mapToObj(i -> UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/throughput_" + i)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + public static final UITexture[] OVERLAY_BUTTON_MODE = IntStream.range(0, 10) // GT_MetaTileEntity_ElectricAutoWorkbench#MAX_MODES + .mapToObj(i -> UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/mode_" + i)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + public static final UITexture[] OVERLAY_BUTTON_DIRECTION = new UITexture[] { + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/bottom"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/top"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/north"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/south"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/west"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/east"), }; + public static final UITexture[] OVERLAY_BUTTON_DIRECTION_GRAY = new UITexture[] { + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/bottom_gray"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/top_gray"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/north_gray"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/south_gray"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/west_gray"), + UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/east_gray"), }; + public static final UITexture OVERLAY_BUTTON_TIP_GREEN = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_button/tip_green"); + public static final UITexture OVERLAY_BUTTON_TIP_RED = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_button/tip_red"); + public static final UITexture OVERLAY_BUTTON_ACTIVE_STATE = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_button/active_state"); + public static final UITexture OVERLAY_BUTTON_CHANGE_MODE = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_button/change_mode"); + public static final UITexture OVERLAY_BUTTON_PLUS_MINUS = UITexture + .fullImage(GTPlusPlus.ID, "gui/overlay_button/plus_minus"); + + public static final UITexture PICTURE_WORKBENCH_CIRCLE = UITexture + .fullImage(GTPlusPlus.ID, "gui/picture/workbench_circle"); + public static final UITexture PICTURE_ARROW_WHITE_DOWN = UITexture + .fullImage(GTPlusPlus.ID, "gui/picture/arrow_white_down"); + public static final UITexture PICTURE_REDSTONE_CIRCUIT_SCREEN = UITexture + .fullImage(GTPlusPlus.ID, "gui/picture/redstone_circuit_screen"); + public static final UITexture PICTURE_ELECTRICITY_ERROR = UITexture + .fullImage(GTPlusPlus.ID, "gui/picture/electricity_error"); + public static final UITexture PICTURE_ELECTRICITY_FINE = UITexture + .fullImage(GTPlusPlus.ID, "gui/picture/electricity_fine"); + public static final UITexture PICTURE_ENERGY_FRAME = UITexture.fullImage(GTPlusPlus.ID, "gui/picture/energy_frame"); +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/GTPP_UITextures.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/GTPP_UITextures.java deleted file mode 100644 index e6276713f3..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/GTPP_UITextures.java +++ /dev/null @@ -1,139 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.gui; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import com.gtnewhorizons.modularui.api.drawable.AdaptableUITexture; -import com.gtnewhorizons.modularui.api.drawable.UITexture; - -public class GTPP_UITextures { - - public static final UITexture OVERLAY_SLOT_COAL = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/coal"); - public static final UITexture OVERLAY_SLOT_CANISTER_DARK = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_slot/canister_dark"); - - public static final AdaptableUITexture BACKGROUND_YELLOW = AdaptableUITexture - .of(GTPlusPlus.ID, "gui/background/yellow", 176, 166, 4); - - public static final AdaptableUITexture SLOT_ITEM_YELLOW = AdaptableUITexture - .of(GTPlusPlus.ID, "gui/slot/item_yellow", 18, 18, 1); - public static final AdaptableUITexture[] SLOT_INVENTORY_MANAGER = new AdaptableUITexture[] { - AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/red", 18, 18, 1), - AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/green", 18, 18, 1), - AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/blue", 18, 18, 1), - AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/cyan", 18, 18, 1), - AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/magenta", 18, 18, 1), - AdaptableUITexture.of(GTPlusPlus.ID, "gui/slot/yellow", 18, 18, 1), }; - - public static final UITexture BUTTON_STANDARD_BRONZE = UITexture - .fullImage(GTPlusPlus.ID, "gui/button/standard_bronze"); - - public static final UITexture OVERLAY_SLOT_WEED_EX = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/weed_ex"); - public static final UITexture OVERLAY_SLOT_FERTILIZER = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_slot/fertilizer"); - public static final UITexture OVERLAY_SLOT_ELECTRIC_TOOL = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_slot/electric_tool"); - public static final UITexture OVERLAY_SLOT_PAGE_PRINTED_BRONZE = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_slot/page_printed_bronze"); - public static final UITexture OVERLAY_SLOT_ARROW = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow"); - public static final UITexture OVERLAY_SLOT_ARROW_BRONZE = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_bronze"); - public static final UITexture OVERLAY_SLOT_CRAFT_OUTPUT = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_slot/craft_output"); - public static final UITexture OVERLAY_SLOT_CRAFT_OUTPUT_BRONZE = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_slot/craft_output_bronze"); - public static final UITexture OVERLAY_SLOT_PARK = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/park"); - public static final UITexture OVERLAY_SLOT_PARK_BRONZE = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_slot/park_bronze"); - public static final UITexture OVERLAY_SLOT_INGOT = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/ingot"); - public static final UITexture OVERLAY_SLOT_ARROW_4 = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_4"); - public static final UITexture OVERLAY_SLOT_TURBINE = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/turbine"); - public static final UITexture OVERLAY_SLOT_CHEST = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/chest"); - public static final UITexture[] OVERLAY_SLOT_INVENTORY_MANAGER_COLOR = new UITexture[] { - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/red"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/green"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/blue"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/cyan"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/magenta"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/yellow"), }; - public static final UITexture[] OVERLAY_SLOT_INVENTORY_MANAGER_ARROW = new UITexture[] { - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_red"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_green"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_blue"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_cyan"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_magenta"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_slot/arrow_yellow"), }; - - public static final UITexture PROGRESSBAR_FLUID_REACTOR = UITexture - .fullImage(GTPlusPlus.ID, "gui/progressbar/fluid_reactor"); - public static final UITexture PROGRESSBAR_BOILER_EMPTY = UITexture - .fullImage(GTPlusPlus.ID, "gui/progressbar/boiler_empty"); - public static final UITexture PROGRESSBAR_FUEL = UITexture.fullImage(GTPlusPlus.ID, "gui/progressbar/fuel"); - public static final UITexture PROGRESSBAR_ARROW_2 = UITexture.fullImage(GTPlusPlus.ID, "gui/progressbar/arrow_2"); - public static final UITexture PROGRESSBAR_PSS_ENERGY = UITexture - .fullImage(GTPlusPlus.ID, "gui/progressbar/pss_energy"); - - public static final AdaptableUITexture TAB_TITLE_YELLOW = AdaptableUITexture - .of(GTPlusPlus.ID, "gui/tab/title_yellow", 28, 28, 4); - public static final AdaptableUITexture TAB_TITLE_ANGULAR_YELLOW = AdaptableUITexture - .of(GTPlusPlus.ID, "gui/tab/title_angular_yellow", 28, 28, 4); - public static final AdaptableUITexture TAB_TITLE_DARK_YELLOW = AdaptableUITexture - .of(GTPlusPlus.ID, "gui/tab/title_dark_yellow", 28, 28, 4); - - public static final UITexture OVERLAY_BUTTON_HARVESTER_MODE = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_button/harvester_mode"); - public static final UITexture OVERLAY_BUTTON_HARVESTER_TOGGLE = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_button/harvester_toggle"); - public static final UITexture OVERLAY_BUTTON_FLUSH = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/flush"); - public static final UITexture OVERLAY_BUTTON_FLUSH_BRONZE = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_button/flush_bronze"); - public static final UITexture OVERLAY_BUTTON_AUTOMATION = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_button/automation"); - public static final UITexture OVERLAY_BUTTON_LOCK = UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/lock"); - public static final UITexture[] OVERLAY_BUTTON_THROUGHPUT = IntStream.range(0, 4) // GT_MetaTileEntity_ElectricAutoWorkbench#MAX_THROUGHPUT - .mapToObj(i -> UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/throughput_" + i)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - public static final UITexture[] OVERLAY_BUTTON_MODE = IntStream.range(0, 10) // GT_MetaTileEntity_ElectricAutoWorkbench#MAX_MODES - .mapToObj(i -> UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/mode_" + i)) - .collect(Collectors.toList()) - .toArray(new UITexture[0]); - public static final UITexture[] OVERLAY_BUTTON_DIRECTION = new UITexture[] { - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/bottom"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/top"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/north"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/south"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/west"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/east"), }; - public static final UITexture[] OVERLAY_BUTTON_DIRECTION_GRAY = new UITexture[] { - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/bottom_gray"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/top_gray"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/north_gray"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/south_gray"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/west_gray"), - UITexture.fullImage(GTPlusPlus.ID, "gui/overlay_button/east_gray"), }; - public static final UITexture OVERLAY_BUTTON_TIP_GREEN = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_button/tip_green"); - public static final UITexture OVERLAY_BUTTON_TIP_RED = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_button/tip_red"); - public static final UITexture OVERLAY_BUTTON_ACTIVE_STATE = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_button/active_state"); - public static final UITexture OVERLAY_BUTTON_CHANGE_MODE = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_button/change_mode"); - public static final UITexture OVERLAY_BUTTON_PLUS_MINUS = UITexture - .fullImage(GTPlusPlus.ID, "gui/overlay_button/plus_minus"); - - public static final UITexture PICTURE_WORKBENCH_CIRCLE = UITexture - .fullImage(GTPlusPlus.ID, "gui/picture/workbench_circle"); - public static final UITexture PICTURE_ARROW_WHITE_DOWN = UITexture - .fullImage(GTPlusPlus.ID, "gui/picture/arrow_white_down"); - public static final UITexture PICTURE_REDSTONE_CIRCUIT_SCREEN = UITexture - .fullImage(GTPlusPlus.ID, "gui/picture/redstone_circuit_screen"); - public static final UITexture PICTURE_ELECTRICITY_ERROR = UITexture - .fullImage(GTPlusPlus.ID, "gui/picture/electricity_error"); - public static final UITexture PICTURE_ELECTRICITY_FINE = UITexture - .fullImage(GTPlusPlus.ID, "gui/picture/electricity_fine"); - public static final UITexture PICTURE_ENERGY_FRAME = UITexture.fullImage(GTPlusPlus.ID, "gui/picture/energy_frame"); -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/widget/ElectricSlotWidget.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/widget/ElectricSlotWidget.java index e522d41799..1bc2050eee 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/widget/ElectricSlotWidget.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/gui/widget/ElectricSlotWidget.java @@ -6,7 +6,7 @@ import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import gregtech.api.items.GT_MetaGenerated_Tool; +import gregtech.api.items.MetaGeneratedTool; import ic2.api.info.Info; import ic2.api.item.ElectricItem; import ic2.api.item.IElectricItem; @@ -26,7 +26,7 @@ public class ElectricSlotWidget extends SlotWidget { private ElectricSlotWidget(BaseSlot slot) { super(slot); setFilter( - stack -> (accepts(stack)) || (stack.getItem() instanceof GT_MetaGenerated_Tool) + stack -> (accepts(stack)) || (stack.getItem() instanceof MetaGeneratedTool) || (stack.getItem() instanceof IElectricItem)); } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/GregtechItemContainer.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/GregtechItemContainer.java deleted file mode 100644 index 9431739c45..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/GregtechItemContainer.java +++ /dev/null @@ -1,40 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.interfaces; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -public interface GregtechItemContainer { - - public Item getItem(); - - public Block getBlock(); - - public boolean isStackEqual(Object aStack); - - public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT); - - public ItemStack get(long aAmount, Object... aReplacements); - - public ItemStack getWildcard(long aAmount, Object... aReplacements); - - public ItemStack getUndamaged(long aAmount, Object... aReplacements); - - public ItemStack getAlmostBroken(long aAmount, Object... aReplacements); - - public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements); - - public GregtechItemContainer set(Item aItem); - - public GregtechItemContainer set(ItemStack aStack); - - public GregtechItemContainer registerOre(Object... aOreNames); - - public GregtechItemContainer registerWildcardAsOre(Object... aOreNames); - - public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements); - - public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements); - - public boolean hasBeenSet(); -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/IGregtechItemContainer.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/IGregtechItemContainer.java new file mode 100644 index 0000000000..ea9ab3602a --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/IGregtechItemContainer.java @@ -0,0 +1,40 @@ +package gtPlusPlus.xmod.gregtech.api.interfaces; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +public interface IGregtechItemContainer { + + public Item getItem(); + + public Block getBlock(); + + public boolean isStackEqual(Object aStack); + + public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT); + + public ItemStack get(long aAmount, Object... aReplacements); + + public ItemStack getWildcard(long aAmount, Object... aReplacements); + + public ItemStack getUndamaged(long aAmount, Object... aReplacements); + + public ItemStack getAlmostBroken(long aAmount, Object... aReplacements); + + public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements); + + public IGregtechItemContainer set(Item aItem); + + public IGregtechItemContainer set(ItemStack aStack); + + public IGregtechItemContainer registerOre(Object... aOreNames); + + public IGregtechItemContainer registerWildcardAsOre(Object... aOreNames); + + public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements); + + public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements); + + public boolean hasBeenSet(); +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IItemBehaviour.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IItemBehaviour.java new file mode 100644 index 0000000000..a68efc4fb8 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IItemBehaviour.java @@ -0,0 +1,46 @@ +package gtPlusPlus.xmod.gregtech.api.interfaces.internal; + +import java.util.List; + +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import gregtech.api.enums.SubTag; +import gtPlusPlus.xmod.gregtech.api.items.GTMetaItemBase; + +public interface IItemBehaviour { + + public boolean onLeftClickEntity(E aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity); + + public boolean onItemUse(E aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, + int aSide, float hitX, float hitY, float hitZ); + + public boolean onItemUseFirst(E aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, + int aSide, float hitX, float hitY, float hitZ); + + public ItemStack onItemRightClick(E aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer); + + public List getAdditionalToolTips(E aItem, List aList, ItemStack aStack); + + public void onUpdate(E aItem, ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand); + + public boolean isItemStackUsable(E aItem, ItemStack aStack); + + public boolean canDispense(E aItem, IBlockSource aSource, ItemStack aStack); + + public ItemStack onDispense(E aItem, IBlockSource aSource, ItemStack aStack); + + public boolean hasProjectile(GTMetaItemBase aItem, SubTag aProjectileType, ItemStack aStack); + + public EntityArrow getProjectile(E aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, + double aY, double aZ); + + public EntityArrow getProjectile(E aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, + EntityLivingBase aEntity, float aSpeed); +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IOreRecipeRegistrator.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IOreRecipeRegistrator.java new file mode 100644 index 0000000000..4c8b1c2391 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IOreRecipeRegistrator.java @@ -0,0 +1,24 @@ +package gtPlusPlus.xmod.gregtech.api.interfaces.internal; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Materials; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; + +public interface IOreRecipeRegistrator { + + /** + * Contains a Code Fragment, used in the OrePrefix to register Recipes. Better than using a switch/case, like I did + * before. + * + * @param aPrefix always != null + * @param aMaterial always != null, and can be == _NULL if the Prefix is Self Referencing or not Material based! + * @param aStack always != null + */ + public void registerOre(GregtechOrePrefixes aPrefix, GT_Materials aMaterial, String aOreDictName, String aModName, + ItemStack aStack); + + public void registerOre(GregtechOrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, + ItemStack copyAmount); +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IToolStats.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IToolStats.java new file mode 100644 index 0000000000..98b446869c --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/IToolStats.java @@ -0,0 +1,201 @@ +package gtPlusPlus.xmod.gregtech.api.interfaces.internal; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +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.DamageSource; +import net.minecraftforge.event.world.BlockEvent; + +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gtPlusPlus.xmod.gregtech.api.items.GTMetaTool; + +/** + * The Stats for GT Tools. Not including any Material Modifiers. + *

+ * And this is supposed to not have any ItemStack Parameters as these are generic Stats. + */ +public interface IToolStats extends gregtech.api.interfaces.IToolStats { + + /** + * Called when aPlayer crafts this Tool + */ + @Override + public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer); + + /** + * Called when this gets added to a Tool Item + */ + public void onStatsAddedToTool(GTMetaTool gregtech_MetaTool, int aID); + + /** + * @return Damage the Tool receives when breaking a Block. 100 is one Damage Point (or 100 EU). + */ + @Override + public int getToolDamagePerBlockBreak(); + + /** + * @return Damage the Tool receives when converting the drops of a Block. 100 is one Damage Point (or 100 EU). + */ + @Override + public int getToolDamagePerDropConversion(); + + /** + * @return Damage the Tool receives when being used as Container Item. 100 is one use, however it is usually 8 times + * more than normal. + */ + @Override + public int getToolDamagePerContainerCraft(); + + /** + * @return Damage the Tool receives when being used as Weapon, 200 is the normal Value, 100 for actual Weapons. + */ + @Override + public int getToolDamagePerEntityAttack(); + + /** + * @return Basic Quality of the Tool, 0 is normal. If increased, it will increase the general quality of all Tools + * of this Type. Decreasing is also possible. + */ + @Override + public int getBaseQuality(); + + /** + * @return The Damage Bonus for this Type of Tool against Mobs. 1.0F is normal punch. + */ + @Override + public float getBaseDamage(); + + /** + * @return This gets the Hurt Resistance time for Entities getting hit. (always does 1 as minimum) + */ + @Override + public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity); + + /** + * @return This is a multiplier for the Tool Speed. 1.0F = no special Speed. + */ + @Override + public float getSpeedMultiplier(); + + /** + * @return This is a multiplier for the Tool Speed. 1.0F = no special Durability. + */ + @Override + public float getMaxDurabilityMultiplier(); + + @Override + public DamageSource getDamageSource(EntityLivingBase aPlayer, Entity aEntity); + + @Override + public String getMiningSound(); + + @Override + public String getCraftingSound(); + + @Override + public String getEntityHitSound(); + + @Override + public String getBreakingSound(); + + @Override + public Enchantment[] getEnchantments(ItemStack aStack); + + @Override + public int[] getEnchantmentLevels(ItemStack aStack); + + /** + * @return If this Tool can be used for blocking Damage like a Sword. + */ + @Override + public boolean canBlock(); + + /** + * @return If this Tool can be used as an RC Crowbar. + */ + @Override + public boolean isCrowbar(); + + /** + * @return If this Tool can be used as an BC Wrench. + */ + @Override + public boolean isWrench(); + + /** + * @return If this Tool can be used as Weapon i.e. if that is the main purpose. + */ + @Override + public boolean isWeapon(); + + /** + * @return If this Tool is a Ranged Weapon. Return false at isWeapon unless you have a Blade attached to your + * Bow/Gun or something + */ + @Override + public boolean isRangedWeapon(); + + /** + * @return If this Tool can be used as Weapon i.e. if that is the main purpose. + */ + @Override + public boolean isMiningTool(); + + /** + * aBlock.getHarvestTool(aMetaData) can return the following Values for example. "axe", "pickaxe", "sword", + * "shovel", "hoe", "grafter", "saw", "wrench", "crowbar", "file", "hammer", "plow", "plunger", "scoop", + * "screwdriver", "sense", "scythe", "softhammer", "cutter", "plasmatorch" + * + * @return If this is a minable Block. Tool Quality checks (like Diamond Tier or something) are separate from this + * check. + */ + @Override + public boolean isMinableBlock(Block aBlock, byte aMetaData); + + /** + * This lets you modify the Drop List, when this type of Tool has been used. + * + * @return the Amount of modified Items. + */ + @Override + public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, + int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent); + + /** + * @return Returns a broken Version of the Item. + */ + @Override + public ItemStack getBrokenItem(ItemStack aStack); + + /** + * @return the Damage actually done to the Mob. + */ + @Override + public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, + EntityPlayer aPlayer); + + /** + * @return the Damage actually done to the Mob. + */ + @Override + public float getMagicDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, + EntityPlayer aPlayer); + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack); + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack); + + /** + * Called when this gets added to a Tool Item + */ + @Override + public void onStatsAddedToTool(MetaGeneratedTool aItem, int aID); +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_ItemBehaviour.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_ItemBehaviour.java deleted file mode 100644 index 545a97288f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_ItemBehaviour.java +++ /dev/null @@ -1,46 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.interfaces.internal; - -import java.util.List; - -import net.minecraft.dispenser.IBlockSource; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -import gregtech.api.enums.SubTag; -import gtPlusPlus.xmod.gregtech.api.items.Gregtech_MetaItem_Base; - -public interface Interface_ItemBehaviour { - - public boolean onLeftClickEntity(E aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity); - - public boolean onItemUse(E aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, - int aSide, float hitX, float hitY, float hitZ); - - public boolean onItemUseFirst(E aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, - int aSide, float hitX, float hitY, float hitZ); - - public ItemStack onItemRightClick(E aItem, ItemStack aStack, World aWorld, EntityPlayer aPlayer); - - public List getAdditionalToolTips(E aItem, List aList, ItemStack aStack); - - public void onUpdate(E aItem, ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand); - - public boolean isItemStackUsable(E aItem, ItemStack aStack); - - public boolean canDispense(E aItem, IBlockSource aSource, ItemStack aStack); - - public ItemStack onDispense(E aItem, IBlockSource aSource, ItemStack aStack); - - public boolean hasProjectile(Gregtech_MetaItem_Base aItem, SubTag aProjectileType, ItemStack aStack); - - public EntityArrow getProjectile(E aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, double aX, - double aY, double aZ); - - public EntityArrow getProjectile(E aItem, SubTag aProjectileType, ItemStack aStack, World aWorld, - EntityLivingBase aEntity, float aSpeed); -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_OreRecipeRegistrator.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_OreRecipeRegistrator.java deleted file mode 100644 index 6ae25525bd..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_OreRecipeRegistrator.java +++ /dev/null @@ -1,24 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.interfaces.internal; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Materials; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; - -public interface Interface_OreRecipeRegistrator { - - /** - * Contains a Code Fragment, used in the OrePrefix to register Recipes. Better than using a switch/case, like I did - * before. - * - * @param aPrefix always != null - * @param aMaterial always != null, and can be == _NULL if the Prefix is Self Referencing or not Material based! - * @param aStack always != null - */ - public void registerOre(GregtechOrePrefixes aPrefix, GT_Materials aMaterial, String aOreDictName, String aModName, - ItemStack aStack); - - public void registerOre(GregtechOrePrefixes aPrefix, Materials aMaterial, String aOreDictName, String aModName, - ItemStack copyAmount); -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_ToolStats.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_ToolStats.java deleted file mode 100644 index 97d952d4a1..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/interfaces/internal/Interface_ToolStats.java +++ /dev/null @@ -1,202 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.interfaces.internal; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -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.DamageSource; -import net.minecraftforge.event.world.BlockEvent; - -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.IToolStats; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gtPlusPlus.xmod.gregtech.api.items.Gregtech_MetaTool; - -/** - * The Stats for GT Tools. Not including any Material Modifiers. - *

- * And this is supposed to not have any ItemStack Parameters as these are generic Stats. - */ -public interface Interface_ToolStats extends IToolStats { - - /** - * Called when aPlayer crafts this Tool - */ - @Override - public void onToolCrafted(ItemStack aStack, EntityPlayer aPlayer); - - /** - * Called when this gets added to a Tool Item - */ - public void onStatsAddedToTool(Gregtech_MetaTool gregtech_MetaTool, int aID); - - /** - * @return Damage the Tool receives when breaking a Block. 100 is one Damage Point (or 100 EU). - */ - @Override - public int getToolDamagePerBlockBreak(); - - /** - * @return Damage the Tool receives when converting the drops of a Block. 100 is one Damage Point (or 100 EU). - */ - @Override - public int getToolDamagePerDropConversion(); - - /** - * @return Damage the Tool receives when being used as Container Item. 100 is one use, however it is usually 8 times - * more than normal. - */ - @Override - public int getToolDamagePerContainerCraft(); - - /** - * @return Damage the Tool receives when being used as Weapon, 200 is the normal Value, 100 for actual Weapons. - */ - @Override - public int getToolDamagePerEntityAttack(); - - /** - * @return Basic Quality of the Tool, 0 is normal. If increased, it will increase the general quality of all Tools - * of this Type. Decreasing is also possible. - */ - @Override - public int getBaseQuality(); - - /** - * @return The Damage Bonus for this Type of Tool against Mobs. 1.0F is normal punch. - */ - @Override - public float getBaseDamage(); - - /** - * @return This gets the Hurt Resistance time for Entities getting hit. (always does 1 as minimum) - */ - @Override - public int getHurtResistanceTime(int aOriginalHurtResistance, Entity aEntity); - - /** - * @return This is a multiplier for the Tool Speed. 1.0F = no special Speed. - */ - @Override - public float getSpeedMultiplier(); - - /** - * @return This is a multiplier for the Tool Speed. 1.0F = no special Durability. - */ - @Override - public float getMaxDurabilityMultiplier(); - - @Override - public DamageSource getDamageSource(EntityLivingBase aPlayer, Entity aEntity); - - @Override - public String getMiningSound(); - - @Override - public String getCraftingSound(); - - @Override - public String getEntityHitSound(); - - @Override - public String getBreakingSound(); - - @Override - public Enchantment[] getEnchantments(ItemStack aStack); - - @Override - public int[] getEnchantmentLevels(ItemStack aStack); - - /** - * @return If this Tool can be used for blocking Damage like a Sword. - */ - @Override - public boolean canBlock(); - - /** - * @return If this Tool can be used as an RC Crowbar. - */ - @Override - public boolean isCrowbar(); - - /** - * @return If this Tool can be used as an BC Wrench. - */ - @Override - public boolean isWrench(); - - /** - * @return If this Tool can be used as Weapon i.e. if that is the main purpose. - */ - @Override - public boolean isWeapon(); - - /** - * @return If this Tool is a Ranged Weapon. Return false at isWeapon unless you have a Blade attached to your - * Bow/Gun or something - */ - @Override - public boolean isRangedWeapon(); - - /** - * @return If this Tool can be used as Weapon i.e. if that is the main purpose. - */ - @Override - public boolean isMiningTool(); - - /** - * aBlock.getHarvestTool(aMetaData) can return the following Values for example. "axe", "pickaxe", "sword", - * "shovel", "hoe", "grafter", "saw", "wrench", "crowbar", "file", "hammer", "plow", "plunger", "scoop", - * "screwdriver", "sense", "scythe", "softhammer", "cutter", "plasmatorch" - * - * @return If this is a minable Block. Tool Quality checks (like Diamond Tier or something) are separate from this - * check. - */ - @Override - public boolean isMinableBlock(Block aBlock, byte aMetaData); - - /** - * This lets you modify the Drop List, when this type of Tool has been used. - * - * @return the Amount of modified Items. - */ - @Override - public int convertBlockDrops(List aDrops, ItemStack aStack, EntityPlayer aPlayer, Block aBlock, int aX, - int aY, int aZ, byte aMetaData, int aFortune, boolean aSilkTouch, BlockEvent.HarvestDropsEvent aEvent); - - /** - * @return Returns a broken Version of the Item. - */ - @Override - public ItemStack getBrokenItem(ItemStack aStack); - - /** - * @return the Damage actually done to the Mob. - */ - @Override - public float getNormalDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, - EntityPlayer aPlayer); - - /** - * @return the Damage actually done to the Mob. - */ - @Override - public float getMagicDamageAgainstEntity(float aOriginalDamage, Entity aEntity, ItemStack aStack, - EntityPlayer aPlayer); - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack); - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack); - - /** - * Called when this gets added to a Tool Item - */ - @Override - public void onStatsAddedToTool(GT_MetaGenerated_Tool aItem, int aID); -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTGenericItem.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTGenericItem.java new file mode 100644 index 0000000000..d734328327 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTGenericItem.java @@ -0,0 +1,204 @@ +package gtPlusPlus.xmod.gregtech.api.items; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.List; + +import net.minecraft.block.BlockDispenser; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.dispenser.BehaviorDefaultDispenseItem; +import net.minecraft.dispenser.BehaviorProjectileDispense; +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.dispenser.IPosition; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.IProjectile; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.SubTag; +import gregtech.api.interfaces.IProjectileItem; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.util.Utils; + +/** + * Extended by most Items, also used as a fallback Item, to prevent the accidental deletion when Errors occur. + */ +public class GTGenericItem extends Item implements IProjectileItem { + + private final String mName, mTooltip; + protected IIcon mIcon; + + public GTGenericItem(final String aUnlocalized, final String aEnglish, final String aEnglishTooltip) { + this(aUnlocalized, aEnglish, aEnglishTooltip, true); + } + + public GTGenericItem(final String aUnlocalized, final String aEnglish, final String aEnglishTooltip, + final boolean aWriteToolTipIntoLangFile) { + super(); + this.mName = aUnlocalized; + GTLanguageManager.addStringLocalization(this.mName + ".name", aEnglish); + if (GTUtility.isStringValid(aEnglishTooltip)) { + GTLanguageManager.addStringLocalization( + this.mTooltip = this.mName + ".tooltip_main", + aEnglishTooltip, + aWriteToolTipIntoLangFile); + } else { + this.mTooltip = null; + } + this.setCreativeTab(AddToCreativeTab.tabMachines); + GameRegistry.registerItem(this, this.mName, GTPlusPlus.ID); + BlockDispenser.dispenseBehaviorRegistry.putObject(this, new GT_Item_Dispense()); + } + + @Override + public final Item setUnlocalizedName(final String aName) { + return this; + } + + @Override + public final String getUnlocalizedName() { + return this.mName; + } + + @Override + public String getUnlocalizedName(final ItemStack aStack) { + return this.getHasSubtypes() ? this.mName + "." + this.getDamage(aStack) : this.mName; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(final IIconRegister aIconRegister) { + this.mIcon = aIconRegister.registerIcon(GTPlusPlus.ID + ":" + this.mName); + } + + @Override + public boolean doesSneakBypassUse(final World aWorld, final int aX, final int aY, final int aZ, + final EntityPlayer aPlayer) { + return true; + } + + @Override + public IIcon getIconFromDamage(final int par1) { + return this.mIcon; + } + + public int getTier(final ItemStack aStack) { + return 0; + } + + @Override + public void addInformation(final ItemStack aStack, final EntityPlayer aPlayer, final List aList, + final boolean aF3_H) { + if ((this.getMaxDamage() > 0) && !this.getHasSubtypes()) { + aList.add((aStack.getMaxDamage() - this.getDamage(aStack)) + " / " + aStack.getMaxDamage()); + } + if (this.mTooltip != null) { + aList.add(GTLanguageManager.getTranslation(this.mTooltip)); + } + if (GTModHandler.isElectricItem(aStack)) { + aList.add("Tier: " + this.getTier(aStack)); + } + this.addAdditionalToolTips(aList, aStack); + } + + protected void addAdditionalToolTips(final List aList, final ItemStack aStack) { + // + } + + @Override + public void onCreated(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { + this.isItemStackUsable(aStack); + } + + public boolean isItemStackUsable(final ItemStack aStack) { + return true; + } + + public ItemStack onDispense(final IBlockSource aSource, final ItemStack aStack) { + final EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata()); + final IPosition iposition = BlockDispenser.func_149939_a(aSource); + final ItemStack itemstack1 = aStack.splitStack(1); + BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition); + return aStack; + } + + @Override + public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld, + final double aX, final double aY, final double aZ) { + return null; + } + + @Override + public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld, + final EntityLivingBase aEntity, final float aSpeed) { + return null; + } + + @Override + public boolean hasProjectile(final SubTag aProjectileType, final ItemStack aStack) { + return false; + } + + @Override + public ItemStack getContainerItem(final ItemStack aStack) { + return null; + } + + @Override + public boolean hasContainerItem(final ItemStack aStack) { + return this.getContainerItem(aStack) != null; + } + + public static class GT_Item_Dispense extends BehaviorProjectileDispense { + + @Override + public ItemStack dispenseStack(final IBlockSource aSource, final ItemStack aStack) { + return ((GTGenericItem) aStack.getItem()).onDispense(aSource, aStack); + } + + @Override + protected IProjectile getProjectileEntity(final World aWorld, final IPosition aPosition) { + return null; + } + } + + @Override + public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) { + if (stack.getDisplayName() + .contains("LuV")) { + HEX_OxFFFFFF = 0xffffcc; + } else if (stack.getDisplayName() + .contains("ZPM")) { + HEX_OxFFFFFF = 0xace600; + } else if (stack.getDisplayName() + .contains("UV")) { + HEX_OxFFFFFF = 0xffff00; + } else if (stack.getDisplayName() + .contains("MAX")) { + HEX_OxFFFFFF = 0xff0000; + } else if (stack.getDisplayName() + .contains("Sodium")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(0, 0, 150); + } else if (stack.getDisplayName() + .contains("Cadmium")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(50, 50, 60); + } else if (stack.getDisplayName() + .contains("Lithium")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(225, 220, 255); + } else { + HEX_OxFFFFFF = 0xffffff; + } + return HEX_OxFFFFFF; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItem.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItem.java new file mode 100644 index 0000000000..c98023bad7 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItem.java @@ -0,0 +1,354 @@ +package gtPlusPlus.xmod.gregtech.api.items; + +import static gregtech.api.enums.GTValues.D1; +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.BitSet; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SubTag; +import gregtech.api.enums.TCAspects.TC_AspectStack; +import gregtech.api.interfaces.IFoodStat; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.IItemContainer; +import gregtech.api.objects.ItemData; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.xmod.gregtech.api.interfaces.internal.IItemBehaviour; + +public abstract class GTMetaItem extends GTMetaItemBase { + + /** + * All instances of this Item Class are listed here. This gets used to register the Renderer to all Items of this + * Type, if useStandardMetaItemRenderer() returns true. + *

+ * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item. + */ + public static final HashMap sInstances = new HashMap<>(); + + /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ + + public final short mOffset, mItemAmount; + public final BitSet mEnabledItems; + public final BitSet mVisibleItems; + public final IIcon[][] mIconList; + + public final HashMap mFoodStats = new HashMap<>(); + public final HashMap mElectricStats = new HashMap<>(); + public final HashMap mFluidContainerStats = new HashMap<>(); + public final HashMap mBurnValues = new HashMap<>(); + + /** + * Creates the Item using these Parameters. + * + * @param aUnlocalized The Unlocalized Name of this Item. + */ + public GTMetaItem(final String aUnlocalized, final short aOffset, final short aItemAmount) { + super(aUnlocalized); + this.setCreativeTab(AddToCreativeTab.tabMachines); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.mEnabledItems = new BitSet(aItemAmount); + this.mVisibleItems = new BitSet(aItemAmount); + + this.mOffset = (short) Math.min(32766, aOffset); + this.mItemAmount = (short) Math.min(aItemAmount, 32766 - this.mOffset); + this.mIconList = new IIcon[aItemAmount][1]; + + sInstances.put(this.getUnlocalizedName(), this); + } + + /** + * This adds a Custom Item to the ending Range. + * + * @param aID The Id of the assigned Item [0 - mItemAmount] (The MetaData gets auto-shifted by +mOffset) + * @param aEnglish The Default Localized Name of the created Item + * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip + * @param aFoodBehavior The Food Value of this Item. Can be null aswell. Just a convenience thing. + * @param aRandomData The OreDict Names you want to give the Item. Also used for TC Aspects and some other things. + * @return An ItemStack containing the newly created Item. + */ + public final ItemStack addItem(final int aID, final String aEnglish, String aToolTip, final Object... aRandomData) { + if (aToolTip == null) { + aToolTip = ""; + } + if ((aID >= 0) && (aID < this.mItemAmount)) { + final ItemStack rStack = new ItemStack(this, 1, this.mOffset + aID); + this.mEnabledItems.set(aID); + this.mVisibleItems.set(aID); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName(rStack) + ".name", aEnglish); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName(rStack) + ".tooltip", aToolTip); + final List tAspects = new ArrayList<>(); + // Important Stuff to do first + for (final Object tRandomData : aRandomData) { + if (tRandomData instanceof SubTag) { + if (tRandomData == SubTag.INVISIBLE) { + this.mVisibleItems.set(aID, false); + continue; + } + if (tRandomData == SubTag.NO_UNIFICATION) { + GTOreDictUnificator.addToBlacklist(rStack); + continue; + } + } + } + // now check for the rest + for (final Object tRandomData : aRandomData) { + if (tRandomData != null) { + boolean tUseOreDict = true; + + if (tRandomData instanceof IItemBehaviour) { + this.addItemBehavior(this.mOffset + aID, (IItemBehaviour) tRandomData); + tUseOreDict = false; + } + if (tRandomData instanceof IItemContainer) { + ((IItemContainer) tRandomData).set(rStack); + tUseOreDict = false; + } + if (tRandomData instanceof SubTag) { + continue; + } + if (tRandomData instanceof TC_AspectStack) { + ((TC_AspectStack) tRandomData).addToAspectList(tAspects); + continue; + } + if (tRandomData instanceof ItemData) { + if (GTUtility.isStringValid(tRandomData)) { + GTOreDictUnificator.registerOre(tRandomData, rStack); + } else { + GTOreDictUnificator.addItemData(rStack, (ItemData) tRandomData); + } + continue; + } + if (tUseOreDict) { + GTOreDictUnificator.registerOre(tRandomData, rStack); + continue; + } + } + } + if (GregTechAPI.sThaumcraftCompat != null) { + GregTechAPI.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); + } + return rStack; + } + return null; + } + + /** + * Sets the Furnace Burn Value for the Item. + * + * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] + * @param aValue 200 = 1 Burn Process = 500 EU, max = 32767 (that is 81917.5 EU) + * @return the Item itself for convenience in constructing. + */ + public final GTMetaItem setBurnValue(final int aMetaValue, final int aValue) { + if ((aMetaValue < 0) || (aMetaValue >= (this.mOffset + this.mEnabledItems.length())) || (aValue < 0)) { + return this; + } + if (aValue == 0) { + this.mBurnValues.remove((short) aMetaValue); + } else { + this.mBurnValues.put((short) aMetaValue, aValue > Short.MAX_VALUE ? Short.MAX_VALUE : (short) aValue); + } + return this; + } + + /** + * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] + * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior) + * @param aTransferLimit Transfer Limit. + * @param aTier The electric Tier. + * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0). Use -1 if you want to + * make this Battery chargeable (the use and canUse Functions will still discharge if you just + * use this) Use -2 if you want to make this Battery dischargeable. Use -3 if you want to make + * this Battery charge/discharge-able. + * @return the Item itself for convenience in constructing. + */ + public final GTMetaItem setElectricStats(final int aMetaValue, final long aMaxCharge, final long aTransferLimit, + final long aTier, final long aSpecialData, final boolean aUseAnimations) { + if ((aMetaValue < 0) || (aMetaValue >= (this.mOffset + this.mEnabledItems.length()))) { + return this; + } + if (aMaxCharge == 0) { + this.mElectricStats.remove((short) aMetaValue); + } else { + this.mElectricStats.put( + (short) aMetaValue, + new Long[] { aMaxCharge, Math.max(0, aTransferLimit), Math.max(-1, aTier), aSpecialData }); + if ((aMetaValue >= this.mOffset) && aUseAnimations) { + this.mIconList[aMetaValue - this.mOffset] = Arrays.copyOf( + this.mIconList[aMetaValue - this.mOffset], + Math.max(9, this.mIconList[aMetaValue - this.mOffset].length)); + } + } + return this; + } + + /** + * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] + * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior) + * @param aTransferLimit Transfer Limit. + * @param aTier The electric Tier. + * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0). Use -1 if you want to + * make this Battery chargeable (the use and canUse Functions will still discharge if you just + * use this) Use -2 if you want to make this Battery dischargeable. Use -3 if you want to make + * this Battery charge/discharge-able. + * @return the Item itself for convenience in constructing. + */ + public final GTMetaItem setFluidContainerStats(final int aMetaValue, final long aCapacity, final long aStacksize) { + if ((aMetaValue < 0) || (aMetaValue >= (this.mOffset + this.mEnabledItems.length()))) { + return this; + } + if (aCapacity < 0) { + this.mElectricStats.remove((short) aMetaValue); + } else { + this.mFluidContainerStats.put((short) aMetaValue, new Long[] { aCapacity, Math.max(1, aStacksize) }); + } + return this; + } + + /** + * @return if this MetaGenerated Item should use my Default Renderer System. + */ + public boolean useStandardMetaItemRenderer() { + return true; + } + + /** + * @return the Color Modulation the Material is going to be rendered with. + */ + public short[] getRGBa(final ItemStack aStack) { + return Materials._NULL.getRGBA(); + } + + /** + * @return the Icon the Material is going to be rendered with. + */ + public IIconContainer getIconContainer(final int aMetaData) { + return null; + } + + /* ---------- INTERNAL OVERRIDES ---------- */ + + @Override + public ItemStack onItemRightClick(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { + return super.onItemRightClick(aStack, aWorld, aPlayer); + } + + @Override + public int getMaxItemUseDuration(final ItemStack aStack) { + return this.mFoodStats.get((short) this.getDamage(aStack)) == null ? 0 : 32; + } + + @Override + public EnumAction getItemUseAction(final ItemStack aStack) { + return EnumAction.none; + } + + @Override + public final ItemStack onEaten(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { + final IFoodStat tStat = this.mFoodStats.get((short) this.getDamage(aStack)); + if (tStat != null) {} + + return aStack; + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubItems(final Item var1, final CreativeTabs aCreativeTab, final List aList) { + for (int i = 0, j = this.mEnabledItems.length(); i < j; i++) { + if (this.mVisibleItems.get(i) || (D1 && this.mEnabledItems.get(i))) { + final Long[] tStats = this.mElectricStats.get((short) (this.mOffset + i)); + if ((tStats != null) && (tStats[3] < 0)) { + final ItemStack tStack = new ItemStack(this, 1, this.mOffset + i); + this.setCharge(tStack, Math.abs(tStats[0])); + this.isItemStackUsable(tStack); + aList.add(tStack); + } + if ((tStats == null) || (tStats[3] != -2)) { + final ItemStack tStack = new ItemStack(this, 1, this.mOffset + i); + this.isItemStackUsable(tStack); + aList.add(tStack); + } + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public final void registerIcons(final IIconRegister aIconRegister) { + for (short i = 0, j = (short) this.mEnabledItems.length(); i < j; i++) { + if (this.mEnabledItems.get(i)) { + for (byte k = 1; k < this.mIconList[i].length; k++) { + this.mIconList[i][k] = aIconRegister + .registerIcon(GTPlusPlus.ID + ":" + this.getUnlocalizedName() + "/" + i + "/" + k); + } + this.mIconList[i][0] = aIconRegister + .registerIcon(GTPlusPlus.ID + ":" + this.getUnlocalizedName() + "/" + i); + } + } + } + + @Override + public final Long[] getElectricStats(final ItemStack aStack) { + return this.mElectricStats.get((short) aStack.getItemDamage()); + } + + @Override + public final Long[] getFluidContainerStats(final ItemStack aStack) { + return this.mFluidContainerStats.get((short) aStack.getItemDamage()); + } + + @Override + public int getItemEnchantability() { + return 0; + } + + @Override + public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) { + return false; + } + + @Override + public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) { + return false; + } + + @Override + public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) { + if (stack.getDisplayName() + .contains("LuV")) { + HEX_OxFFFFFF = 0xffffcc; + } else if (stack.getDisplayName() + .contains("ZPM")) { + HEX_OxFFFFFF = 0xace600; + } else if (stack.getDisplayName() + .contains("UV")) { + HEX_OxFFFFFF = 0xffff00; + } else if (stack.getDisplayName() + .contains("MAX")) { + HEX_OxFFFFFF = 0xff0000; + } else { + HEX_OxFFFFFF = 0xffffff; + } + return HEX_OxFFFFFF; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItemBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItemBase.java new file mode 100644 index 0000000000..3e7fcf1486 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItemBase.java @@ -0,0 +1,733 @@ +package gtPlusPlus.xmod.gregtech.api.items; + +import static gregtech.api.enums.GTValues.D1; +import static gregtech.api.enums.GTValues.V; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.dispenser.IBlockSource; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.inventory.Container; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidContainerItem; + +import gregtech.api.enums.SubTag; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.xmod.gregtech.api.interfaces.internal.IItemBehaviour; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; +import ic2.api.item.IElectricItemManager; +import ic2.api.item.ISpecialElectricItem; + +public abstract class GTMetaItemBase extends GTGenericItem + implements ISpecialElectricItem, IElectricItemManager, IFluidContainerItem { + + /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ + private final HashMap>> mItemBehaviors = new HashMap<>(); + + /** + * Creates the Item using these Parameters. + * + * @param aUnlocalized The Unlocalized Name of this Item. + * @param aGeneratedPrefixList The OreDict Prefixes you want to have generated. + */ + public GTMetaItemBase(final String aUnlocalized) { + super(aUnlocalized, "Generated Item", null, false); + this.setHasSubtypes(true); + this.setMaxDamage(0); + } + + /** + * Adds a special Item Behaviour to the Item. + *

+ * Note: the boolean Behaviours sometimes won't be executed if another boolean Behaviour returned true before. + * + * @param aMetaValue the Meta Value of the Item you want to add it to. [0 - 32765] + * @param aBehavior the Click Behavior you want to add. + * @return the Item itself for convenience in constructing. + */ + public final GTMetaItemBase addItemBehavior(final int aMetaValue, final IItemBehaviour aBehavior) { + if ((aMetaValue < 0) || (aMetaValue >= 32766) || (aBehavior == null)) { + return this; + } + ArrayList> tList = this.mItemBehaviors.get((short) aMetaValue); + if (tList == null) { + tList = new ArrayList<>(1); + this.mItemBehaviors.put((short) aMetaValue, tList); + } + tList.add(aBehavior); + return this; + } + + public abstract Long[] getElectricStats(ItemStack aStack); + + public abstract Long[] getFluidContainerStats(ItemStack aStack); + + @Override + public boolean hasProjectile(final SubTag aProjectileType, final ItemStack aStack) { + final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + if (tBehavior.hasProjectile(this, aProjectileType, aStack)) { + return true; + } + } + } + return super.hasProjectile(aProjectileType, aStack); + } + + @Override + public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld, + final double aX, final double aY, final double aZ) { + final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + final EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aX, aY, aZ); + if (rArrow != null) { + return rArrow; + } + } + } + return super.getProjectile(aProjectileType, aStack, aWorld, aX, aY, aZ); + } + + @Override + public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld, + final EntityLivingBase aEntity, final float aSpeed) { + final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + final EntityArrow rArrow = tBehavior + .getProjectile(this, aProjectileType, aStack, aWorld, aEntity, aSpeed); + if (rArrow != null) { + return rArrow; + } + } + } + return super.getProjectile(aProjectileType, aStack, aWorld, aEntity, aSpeed); + } + + @Override + public ItemStack onDispense(final IBlockSource aSource, final ItemStack aStack) { + final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + if (tBehavior.canDispense(this, aSource, aStack)) { + return tBehavior.onDispense(this, aSource, aStack); + } + } + } + return super.onDispense(aSource, aStack); + } + + @Override + public boolean isItemStackUsable(final ItemStack aStack) { + final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + if (!tBehavior.isItemStackUsable(this, aStack)) { + return false; + } + } + } + return super.isItemStackUsable(aStack); + } + + @Override + public boolean onLeftClickEntity(final ItemStack aStack, final EntityPlayer aPlayer, final Entity aEntity) { + this.use(aStack, 0, aPlayer); + this.isItemStackUsable(aStack); + final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + try { + if (tBehavior.onLeftClickEntity(this, aStack, aPlayer, aEntity)) { + if (aStack.stackSize <= 0) { + aPlayer.destroyCurrentEquippedItem(); + } + return true; + } + if (aStack.stackSize <= 0) { + aPlayer.destroyCurrentEquippedItem(); + return false; + } + } catch (final Throwable e) { + if (D1) { + e.printStackTrace(GTLog.err); + } + } + } + } + return false; + } + + @Override + public boolean onItemUse(final ItemStack aStack, final EntityPlayer aPlayer, final World aWorld, final int aX, + final int aY, final int aZ, final int ordinalSide, final float hitX, final float hitY, final float hitZ) { + this.use(aStack, 0, aPlayer); + this.isItemStackUsable(aStack); + final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + try { + if (tBehavior.onItemUse(this, aStack, aPlayer, aWorld, aX, aY, aZ, ordinalSide, hitX, hitY, hitZ)) { + if (aStack.stackSize <= 0) { + aPlayer.destroyCurrentEquippedItem(); + } + return true; + } + if (aStack.stackSize <= 0) { + aPlayer.destroyCurrentEquippedItem(); + return false; + } + } catch (final Throwable e) { + if (D1) { + e.printStackTrace(GTLog.err); + } + } + } + } + return false; + } + + @Override + public boolean onItemUseFirst(final ItemStack aStack, final EntityPlayer aPlayer, final World aWorld, final int aX, + final int aY, final int aZ, final int ordinalSide, final float hitX, final float hitY, final float hitZ) { + this.use(aStack, 0, aPlayer); + this.isItemStackUsable(aStack); + final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + try { + if (tBehavior + .onItemUseFirst(this, aStack, aPlayer, aWorld, aX, aY, aZ, ordinalSide, hitX, hitY, hitZ)) { + if (aStack.stackSize <= 0) { + aPlayer.destroyCurrentEquippedItem(); + } + return true; + } + if (aStack.stackSize <= 0) { + aPlayer.destroyCurrentEquippedItem(); + return false; + } + } catch (final Throwable e) { + if (D1) { + e.printStackTrace(GTLog.err); + } + } + } + } + return false; + } + + @Override + public ItemStack onItemRightClick(ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { + this.use(aStack, 0, aPlayer); + this.isItemStackUsable(aStack); + final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + try { + aStack = tBehavior.onItemRightClick(this, aStack, aWorld, aPlayer); + } catch (final Throwable e) { + if (D1) { + e.printStackTrace(GTLog.err); + } + } + } + } + return aStack; + } + + @Override + public final void addInformation(final ItemStack aStack, final EntityPlayer aPlayer, List aList, + final boolean aF3_H) { + final String tKey = this.getUnlocalizedName(aStack) + ".tooltip", + tString = GTLanguageManager.getTranslation(tKey); + if (GTUtility.isStringValid(tString) && !tKey.equals(tString)) { + aList.add(tString); + } + + Long[] tStats = this.getElectricStats(aStack); + if (tStats != null) { + if (tStats[3] > 0) { + aList.add( + EnumChatFormatting.AQUA + "Contains " + + GTUtility.formatNumbers(tStats[3]) + + " EU Tier: " + + (tStats[2] >= 0 ? tStats[2] : 0) + + EnumChatFormatting.GRAY); + } else { + final long tCharge = this.getRealCharge(aStack); + if ((tStats[3] == -2) && (tCharge <= 0)) { + aList.add( + EnumChatFormatting.AQUA + "Empty. You should recycle it properly." + EnumChatFormatting.GRAY); + } else { + aList.add( + EnumChatFormatting.AQUA + "" + + GTUtility.formatNumbers(tCharge) + + " / " + + GTUtility.formatNumbers(Math.abs(tStats[0])) + + " EU - Voltage: " + + GTUtility.formatNumbers( + V[(int) (tStats[2] >= 0 ? tStats[2] < V.length ? tStats[2] : V.length - 1 : 1)]) + + EnumChatFormatting.GRAY); + } + } + } + + tStats = this.getFluidContainerStats(aStack); + if ((tStats != null) && (tStats[0] > 0)) { + final FluidStack tFluid = this.getFluidContent(aStack); + aList.add( + EnumChatFormatting.BLUE + + ((tFluid == null ? "No Fluids Contained" : GTUtility.getFluidName(tFluid, true))) + + EnumChatFormatting.GRAY); + aList.add( + EnumChatFormatting.BLUE + + (GTUtility.formatNumbers(tFluid == null ? 0 : tFluid.amount) + "L / " + + GTUtility.formatNumbers(tStats[0]) + + "L") + + EnumChatFormatting.GRAY); + } + + final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + aList = tBehavior.getAdditionalToolTips(this, aList, aStack); + } + } + + this.addAdditionalToolTips(aList, aStack); + } + + @Override + public void onUpdate(final ItemStack aStack, final World aWorld, final Entity aPlayer, final int aTimer, + final boolean aIsInHand) { + final ArrayList> tList = this.mItemBehaviors.get((short) this.getDamage(aStack)); + if (tList != null) { + for (final IItemBehaviour tBehavior : tList) { + tBehavior.onUpdate(this, aStack, aWorld, aPlayer, aTimer, aIsInHand); + } + } + } + + @Override + public final boolean canProvideEnergy(final ItemStack aStack) { + final Long[] tStats = this.getElectricStats(aStack); + if (tStats == null) { + return false; + } + return (tStats[3] > 0) || ((aStack.stackSize == 1) && ((tStats[3] == -2) || (tStats[3] == -3))); + } + + @Override + public final double getMaxCharge(final ItemStack aStack) { + final Long[] tStats = this.getElectricStats(aStack); + if (tStats == null) { + return 0; + } + return Math.abs(tStats[0]); + } + + @Override + public final double getTransferLimit(final ItemStack aStack) { + final Long[] tStats = this.getElectricStats(aStack); + if (tStats == null) { + return 0; + } + return Math.max(tStats[1], tStats[3]); + } + + @Override + public final double charge(final ItemStack aStack, final double aCharge, final int aTier, + final boolean aIgnoreTransferLimit, final boolean aSimulate) { + final Long[] tStats = this.getElectricStats(aStack); + if ((tStats == null) || (tStats[2] > aTier) + || !((tStats[3] == -1) || (tStats[3] == -3) || ((tStats[3] < 0) && (aCharge == Integer.MAX_VALUE))) + || (aStack.stackSize != 1)) { + return 0; + } + final long tChargeBefore = this.getRealCharge(aStack), + tNewCharge = aCharge == Integer.MAX_VALUE ? Long.MAX_VALUE + : Math.min( + Math.abs(tStats[0]), + tChargeBefore + (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge))); + if (!aSimulate) { + this.setCharge(aStack, tNewCharge); + } + return tNewCharge - tChargeBefore; + } + + @Override + public final double discharge(final ItemStack aStack, final double aCharge, final int aTier, + final boolean aIgnoreTransferLimit, final boolean aBatteryAlike, final boolean aSimulate) { + final Long[] tStats = this.getElectricStats(aStack); + if ((tStats == null) || (tStats[2] > aTier)) { + return 0; + } + if (aBatteryAlike && !this.canProvideEnergy(aStack)) { + return 0; + } + if (tStats[3] > 0) { + if ((aCharge < tStats[3]) || (aStack.stackSize < 1)) { + return 0; + } + if (!aSimulate) { + aStack.stackSize--; + } + return tStats[3]; + } + final long tChargeBefore = this.getRealCharge(aStack), tNewCharge = Math + .max(0, tChargeBefore - (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge))); + if (!aSimulate) { + this.setCharge(aStack, tNewCharge); + } + return tChargeBefore - tNewCharge; + } + + @Override + public final double getCharge(final ItemStack aStack) { + return this.getRealCharge(aStack); + } + + @Override + public final boolean canUse(final ItemStack aStack, final double aAmount) { + return this.getRealCharge(aStack) >= aAmount; + } + + @Override + public final boolean use(final ItemStack aStack, final double aAmount, final EntityLivingBase aPlayer) { + this.chargeFromArmor(aStack, aPlayer); + if ((aPlayer instanceof EntityPlayer) && ((EntityPlayer) aPlayer).capabilities.isCreativeMode) { + return true; + } + final double tTransfer = this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, true); + if (tTransfer == aAmount) { + this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); + this.chargeFromArmor(aStack, aPlayer); + return true; + } + this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); + this.chargeFromArmor(aStack, aPlayer); + return false; + } + + @Override + public final void chargeFromArmor(final ItemStack aStack, final EntityLivingBase aPlayer) { + if ((aPlayer == null) || aPlayer.worldObj.isRemote) { + return; + } + for (int i = 1; i < 5; i++) { + final ItemStack tArmor = aPlayer.getEquipmentInSlot(i); + if (GTModHandler.isElectricItem(tArmor)) { + final IElectricItem tArmorItem = (IElectricItem) tArmor.getItem(); + if (tArmorItem.canProvideEnergy(tArmor) && (tArmorItem.getTier(tArmor) >= this.getTier(aStack))) { + final double tCharge = ElectricItem.manager.discharge( + tArmor, + this.charge(aStack, Integer.MAX_VALUE - 1, Integer.MAX_VALUE, true, true), + Integer.MAX_VALUE, + true, + true, + false); + if (tCharge > 0) { + this.charge(aStack, tCharge, Integer.MAX_VALUE, true, false); + if (aPlayer instanceof EntityPlayer) { + final Container tContainer = ((EntityPlayer) aPlayer).openContainer; + if (tContainer != null) { + tContainer.detectAndSendChanges(); + } + } + } + } + } + } + } + + public final long getRealCharge(final ItemStack aStack) { + final Long[] tStats = this.getElectricStats(aStack); + if (tStats == null) { + return 0; + } + if (tStats[3] > 0) { + return (int) (long) tStats[3]; + } + final NBTTagCompound tNBT = aStack.getTagCompound(); + return tNBT == null ? 0 : tNBT.getLong("GT.ItemCharge"); + } + + public final boolean setCharge(final ItemStack aStack, long aCharge) { + final Long[] tStats = this.getElectricStats(aStack); + if ((tStats == null) || (tStats[3] > 0)) { + return false; + } + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } + tNBT.removeTag("GT.ItemCharge"); + aCharge = Math.min(tStats[0] < 0 ? Math.abs(tStats[0] / 2) : aCharge, Math.abs(tStats[0])); + if (aCharge > 0) { + aStack.setItemDamage(this.getChargedMetaData(aStack)); + tNBT.setLong("GT.ItemCharge", aCharge); + } else { + aStack.setItemDamage(this.getEmptyMetaData(aStack)); + } + if (tNBT.hasNoTags()) { + aStack.setTagCompound(null); + } else { + aStack.setTagCompound(tNBT); + } + this.isItemStackUsable(aStack); + return true; + } + + public short getChargedMetaData(final ItemStack aStack) { + return (short) aStack.getItemDamage(); + } + + public short getEmptyMetaData(final ItemStack aStack) { + return (short) aStack.getItemDamage(); + } + + @Override + public FluidStack getFluid(final ItemStack aStack) { + return this.getFluidContent(aStack); + } + + @Override + public int getCapacity(final ItemStack aStack) { + final Long[] tStats = this.getFluidContainerStats(aStack); + return tStats == null ? 0 : (int) Math.max(0, tStats[0]); + } + + @Override + public int fill(final ItemStack aStack, final FluidStack aFluid, final boolean doFill) { + if ((aStack == null) || (aStack.stackSize != 1)) { + return 0; + } + + final ItemStack tStack = GTUtility.fillFluidContainer(aFluid, aStack, false, false); + if (tStack != null) { + aStack.setItemDamage(tStack.getItemDamage()); + aStack.func_150996_a(tStack.getItem()); + return GTUtility.getFluidForFilledItem(tStack, false).amount; + } + + final Long[] tStats = this.getFluidContainerStats(aStack); + if ((tStats == null) || (tStats[0] <= 0) + || (aFluid == null) + || (aFluid.getFluid() + .getID() <= 0) + || (aFluid.amount <= 0)) { + return 0; + } + + FluidStack tFluid = this.getFluidContent(aStack); + + if ((tFluid == null) || (tFluid.getFluid() + .getID() <= 0)) { + if (aFluid.amount <= tStats[0]) { + if (doFill) { + this.setFluidContent(aStack, aFluid); + } + return aFluid.amount; + } + if (doFill) { + tFluid = aFluid.copy(); + tFluid.amount = (int) (long) tStats[0]; + this.setFluidContent(aStack, tFluid); + } + return (int) (long) tStats[0]; + } + + if (!tFluid.isFluidEqual(aFluid)) { + return 0; + } + + final int space = (int) (long) tStats[0] - tFluid.amount; + if (aFluid.amount <= space) { + if (doFill) { + tFluid.amount += aFluid.amount; + this.setFluidContent(aStack, tFluid); + } + return aFluid.amount; + } + if (doFill) { + tFluid.amount = (int) (long) tStats[0]; + this.setFluidContent(aStack, tFluid); + } + return space; + } + + @Override + public FluidStack drain(final ItemStack aStack, final int maxDrain, final boolean doDrain) { + if ((aStack == null) || (aStack.stackSize != 1)) { + return null; + } + + FluidStack tFluid = GTUtility.getFluidForFilledItem(aStack, false); + if ((tFluid != null) && (maxDrain >= tFluid.amount)) { + final ItemStack tStack = GTUtility.getContainerItem(aStack, false); + if (tStack == null) { + aStack.stackSize = 0; + return tFluid; + } + aStack.setItemDamage(tStack.getItemDamage()); + aStack.func_150996_a(tStack.getItem()); + return tFluid; + } + + final Long[] tStats = this.getFluidContainerStats(aStack); + if ((tStats == null) || (tStats[0] <= 0)) { + return null; + } + + tFluid = this.getFluidContent(aStack); + if (tFluid == null) { + return null; + } + + int used = maxDrain; + if (tFluid.amount < used) { + used = tFluid.amount; + } + if (doDrain) { + tFluid.amount -= used; + this.setFluidContent(aStack, tFluid); + } + + final FluidStack drained = tFluid.copy(); + drained.amount = used; + return drained; + } + + public FluidStack getFluidContent(final ItemStack aStack) { + final Long[] tStats = this.getFluidContainerStats(aStack); + if ((tStats == null) || (tStats[0] <= 0)) { + return GTUtility.getFluidForFilledItem(aStack, false); + } + final NBTTagCompound tNBT = aStack.getTagCompound(); + return tNBT == null ? null : FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("GT.FluidContent")); + } + + public void setFluidContent(final ItemStack aStack, final FluidStack aFluid) { + NBTTagCompound tNBT = aStack.getTagCompound(); + if (tNBT == null) { + tNBT = new NBTTagCompound(); + } else { + tNBT.removeTag("GT.FluidContent"); + } + if ((aFluid != null) && (aFluid.amount > 0)) { + tNBT.setTag("GT.FluidContent", aFluid.writeToNBT(new NBTTagCompound())); + } + if (tNBT.hasNoTags()) { + aStack.setTagCompound(null); + } else { + aStack.setTagCompound(tNBT); + } + this.isItemStackUsable(aStack); + } + + @Override + public int getItemStackLimit(final ItemStack aStack) { + Long[] tStats = this.getElectricStats(aStack); + if ((tStats != null) && ((tStats[3] == -1) || (tStats[3] == -3)) && (this.getRealCharge(aStack) > 0)) { + return 1; + } + tStats = this.getFluidContainerStats(aStack); + if (tStats != null) { + return (int) (long) tStats[1]; + } + return 64; + } + + @Override + public final Item getChargedItem(final ItemStack itemStack) { + return this; + } + + @Override + public final Item getEmptyItem(final ItemStack itemStack) { + return this; + } + + @Override + public final int getTier(final ItemStack aStack) { + final Long[] tStats = this.getElectricStats(aStack); + return (int) (tStats == null ? Integer.MAX_VALUE : tStats[2]); + } + + @Override + public final String getToolTip(final ItemStack aStack) { + return null; + } // This has its own ToolTip Handler, no need to let the IC2 Handler screw us up at this Point + + @Override + public final IElectricItemManager getManager(final ItemStack aStack) { + return this; + } // We are our own Manager + + @Override + public final boolean getShareTag() { + return true; + } // just to be sure. + + @Override + public int getItemEnchantability() { + return 0; + } + + @Override + public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) { + return false; + } + + @Override + public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) { + return false; + } + + @Override + public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) { + if (stack.getDisplayName() + .contains("LuV")) { + HEX_OxFFFFFF = 0xffffcc; + } else if (stack.getDisplayName() + .contains("ZPM")) { + HEX_OxFFFFFF = 0xace600; + } else if (stack.getDisplayName() + .contains("UV")) { + HEX_OxFFFFFF = 0xffff00; + } else if (stack.getDisplayName() + .contains("MAX")) { + HEX_OxFFFFFF = 0xff0000; + } else if (stack.getDisplayName() + .contains("Sodium")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(0, 0, 150); + } else if (stack.getDisplayName() + .contains("Cadmium")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(50, 50, 60); + } else if (stack.getDisplayName() + .contains("Lithium")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(225, 220, 255); + } else { + HEX_OxFFFFFF = 0xffffff; + } + return HEX_OxFFFFFF; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItemX32.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItemX32.java new file mode 100644 index 0000000000..31cdac4770 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaItemX32.java @@ -0,0 +1,266 @@ +package gtPlusPlus.xmod.gregtech.api.items; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.math.MathUtils; + +/** + * @author Gregorius Techneticies + *

+ * One Item for everything! + *

+ * This brilliant Item Class is used for automatically generating all possible variations of Material Items, + * like Dusts, Ingots, Gems, Plates and similar. It saves me a ton of work, when adding Items, because I always + * have to make a new Item SubType for each OreDict Prefix, when adding a new Material. + *

+ * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom + * defined, just to save space and MetaData. + *

+ * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike + * Item. + */ +public abstract class GTMetaItemX32 extends GTMetaItem { + + protected final OrePrefixes[] mGeneratedPrefixList; + + /** + * Creates the Item using these Parameters. + * + * @param aUnlocalized The Unlocalized Name of this Item. + * @param aGeneratedPrefixList The OreDict Prefixes you want to have generated. + */ + public GTMetaItemX32(final String aUnlocalized, final OrePrefixes... aGeneratedPrefixList) { + super(aUnlocalized, (short) 32000, (short) 766); + this.mGeneratedPrefixList = Arrays.copyOf(aGeneratedPrefixList, 32); + + for (int i = 0; i < 32000; i++) { + final OrePrefixes tPrefix = this.mGeneratedPrefixList[i / 1000]; + if (tPrefix == null) { + continue; + } + final Materials tMaterial = GregTechAPI.sGeneratedMaterials[i % 1000]; + if (tMaterial == null) { + continue; + } + if (this.doesMaterialAllowGeneration(tPrefix, tMaterial)) { + final ItemStack tStack = new ItemStack(this, 1, i); + GTLanguageManager.addStringLocalization( + this.getUnlocalizedName(tStack) + ".name", + this.getDefaultLocalization(tPrefix, tMaterial, i)); + GTLanguageManager.addStringLocalization( + this.getUnlocalizedName(tStack) + ".tooltip", + tMaterial.getToolTip(tPrefix.mMaterialAmount / GTValues.M)); + if (tPrefix.mIsUnificatable) { + GTOreDictUnificator.set(tPrefix, tMaterial, tStack); + } else { + GTOreDictUnificator.registerOre(tPrefix.get(tMaterial), tStack); + } + if (((tPrefix == OrePrefixes.stick) || (tPrefix == OrePrefixes.wireFine)) + && ((tMaterial == Materials.Lead) || (tMaterial == Materials.Tin) + || (tMaterial == Materials.SolderingAlloy))) { + GregTechAPI.sSolderingMetalList.add(tStack); + } + } + } + } + + /* ---------- OVERRIDEABLE FUNCTIONS ---------- */ + + /** + * @return the Color Modulation the Material is going to be rendered with. + */ + @Override + public short[] getRGBa(final ItemStack aStack) { + final Materials tMaterial = GregTechAPI.sGeneratedMaterials[this.getDamage(aStack) % 1000]; + return tMaterial == null ? Materials._NULL.mRGBa : tMaterial.mRGBa; + } + + /** + * @param aPrefix this can be null, you have to return false in that case + * @param aMaterial this can be null, you have to return false in that case + * @return if this Item should be generated and visible. + */ + public boolean doesMaterialAllowGeneration(final OrePrefixes aPrefix, final Materials aMaterial) { + // You have to check for at least these Conditions in every Case! So add a super Call like the following for + // this before executing your Code: + // if (!super.doesMaterialAllowGeneration(aPrefix, aMaterial)) return false; + return (aPrefix != null) && (aMaterial != null) && aPrefix.doGenerateItem(aMaterial); + } + + /* ---------- OVERRIDEABLE FUNCTIONS ---------- */ + + /** + * @param aPrefix the OreDict Prefix + * @param aMaterial the Material + * @param aMetaData a Index from [0 - 31999] + * @return the Localized Name when default LangFiles are used. + */ + public String getDefaultLocalization(final OrePrefixes aPrefix, final Materials aMaterial, final int aMetaData) { + return aPrefix.getDefaultLocalNameForItem(aMaterial); + } + + /** + * @param aMetaData a Index from [0 - 31999] + * @param aMaterial the Material + * @return an Icon Container for the Item Display. + */ + public final IIconContainer getIconContainer(final int aMetaData, final Materials aMaterial) { + return (this.mGeneratedPrefixList[aMetaData / 1000] != null) + && (this.mGeneratedPrefixList[aMetaData / 1000].mTextureIndex >= 0) + ? aMaterial.mIconSet.mTextures[this.mGeneratedPrefixList[aMetaData / 1000].mTextureIndex] + : null; + } + + /** + * @param aPrefix always != null + * @param aMaterial always != null + * @param aDoShowAllItems this is the Configuration Setting of the User, if he wants to see all the Stuff like Tiny + * Dusts or Crushed Ores as well. + * @return if this Item should be visible in NEI or Creative + */ + public boolean doesShowInCreative(final OrePrefixes aPrefix, final Materials aMaterial, + final boolean aDoShowAllItems) { + return true; + } + + /* ---------- INTERNAL OVERRIDES ---------- */ + + @Override + public ItemStack getContainerItem(final ItemStack aStack) { + final int aDamage = aStack.getItemDamage(); + if ((aDamage < 32000) && (aDamage >= 0)) { + final Materials aMaterial = GregTechAPI.sGeneratedMaterials[aDamage % 1000]; + if ((aMaterial != null) && (aMaterial != Materials.Empty) && (aMaterial != Materials._NULL)) { + final OrePrefixes aPrefix = this.mGeneratedPrefixList[aDamage / 1000]; + if (aPrefix != null) { + return GTUtility.copyAmount(1, aPrefix.mContainerItem); + } + } + } + return null; + } + + @Override + public final IIconContainer getIconContainer(final int aMetaData) { + return GregTechAPI.sGeneratedMaterials[aMetaData % 1000] == null ? null + : this.getIconContainer(aMetaData, GregTechAPI.sGeneratedMaterials[aMetaData % 1000]); + } + + @Override + @SideOnly(Side.CLIENT) + public final void getSubItems(final Item var1, final CreativeTabs aCreativeTab, final List aList) { + for (int i = 0; i < 32000; i++) { + if (this.doesMaterialAllowGeneration( + this.mGeneratedPrefixList[i / 1000], + GregTechAPI.sGeneratedMaterials[i % 1000]) + && this.doesShowInCreative( + this.mGeneratedPrefixList[i / 1000], + GregTechAPI.sGeneratedMaterials[i % 1000], + GregTechAPI.sDoShowAllItemsInCreative)) { + final ItemStack tStack = new ItemStack(this, 1, i); + this.isItemStackUsable(tStack); + aList.add(tStack); + } + } + super.getSubItems(var1, aCreativeTab, aList); + } + + @Override + public final IIcon getIconFromDamage(final int aMetaData) { + if (aMetaData < 0) { + return null; + } + if (aMetaData < 32000) { + final Materials tMaterial = GregTechAPI.sGeneratedMaterials[aMetaData % 1000]; + if (tMaterial == null) { + return null; + } + final IIconContainer tIcon = this.getIconContainer(aMetaData, tMaterial); + if (tIcon != null) { + return tIcon.getIcon(); + } + return null; + } + return (aMetaData - 32000) < this.mIconList.length ? this.mIconList[aMetaData - 32000][0] : null; + } + + @Override + public int getItemStackLimit(final ItemStack aStack) { + final int tDamage = this.getDamage(aStack); + if ((tDamage < 32000) && (this.mGeneratedPrefixList[tDamage / 1000] != null)) { + return Math + .min(super.getItemStackLimit(aStack), this.mGeneratedPrefixList[tDamage / 1000].mDefaultStackSize); + } + return super.getItemStackLimit(aStack); + } + + @Override + public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) { + + int aMeta = stack.getItemDamage(); + if (stack.getDisplayName() + .contains("Sodium")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(90, 90, 255); + } else if (stack.getDisplayName() + .contains("Cadmium")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(150, 150, 80); + } else if (stack.getDisplayName() + .contains("Lithium")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(225, 220, 255); + } else if (stack.getDisplayName() + .contains("Wrought")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(200, 180, 180); + } else if (stack.getDisplayName() + .contains("Bronze")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(255, 128, 0); + } else if (stack.getDisplayName() + .contains("Brass")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(255, 180, 0); + } else if (stack.getDisplayName() + .contains("Invar")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(180, 180, 120); + } else { + if (aMeta > 50 && aMeta != 150) { + HEX_OxFFFFFF = 0xffffff; + } else if (stack.getDisplayName() + .contains("ULV")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue(200, 180, 180); + } else if (stack.getDisplayName() + .contains("LuV")) { + HEX_OxFFFFFF = 0xffffcc; + } else if (stack.getDisplayName() + .contains("ZPM")) { + HEX_OxFFFFFF = 0xffe600; + } else if (stack.getDisplayName() + .contains("UV")) { + HEX_OxFFFFFF = 0xffb300; + } else if (stack.getDisplayName() + .contains("MAX")) { + HEX_OxFFFFFF = Utils.rgbtoHexValue( + MathUtils.randInt(220, 250), + MathUtils.randInt(221, 251), + MathUtils.randInt(220, 250)); + } else { + HEX_OxFFFFFF = 0xffffff; + } + } + return HEX_OxFFFFFF; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaTool.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaTool.java new file mode 100644 index 0000000000..f47ef56e9a --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/GTMetaTool.java @@ -0,0 +1,690 @@ +package gtPlusPlus.xmod.gregtech.api.items; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; + +import net.minecraft.block.Block; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.item.EntityMinecart; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.stats.AchievementList; +import net.minecraft.stats.StatList; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import net.minecraftforge.event.world.BlockEvent; + +import buildcraft.api.tools.IToolWrench; +import cpw.mods.fml.common.Optional; +import gregtech.api.enchants.EnchantmentRadioactivity; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Mods; +import gregtech.api.interfaces.IDamagableItem; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.xmod.gregtech.api.interfaces.internal.IToolStats; +import mods.railcraft.api.core.items.IToolCrowbar; + +/** + * This is an example on how you can create a Tool ItemStack, in this case a Bismuth Wrench: + * GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01").getToolWithStats(16, 1, Materials.Bismuth, Materials.Bismuth, + * null); + */ +@Optional.InterfaceList({ + @Optional.Interface(iface = "forestry.api.arboriculture.IToolGrafter", modid = Mods.Names.FORESTRY), + @Optional.Interface(iface = "mods.railcraft.api.core.items.IToolCrowbar", modid = Mods.Names.RAILCRAFT), + @Optional.Interface(iface = "buildcraft.api.tools.IToolWrench", modid = "BuildCraft"), + @Optional.Interface(iface = "crazypants.enderio.api.tool.ITool", modid = Mods.Names.ENDER_I_O) }) +public abstract class GTMetaTool extends MetaGeneratedTool implements IDamagableItem, IToolCrowbar, IToolWrench { + + /** + * All instances of this Item Class are listed here. This gets used to register the Renderer to all Items of this + * Type, if useStandardMetaItemRenderer() returns true. + *

+ * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item. + */ + public static final HashMap sInstances = new HashMap<>(); + + /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ + + public final HashMap mToolStats = new HashMap<>(); + + /** + * Creates the Item using these Parameters. + * + * @param aUnlocalized The Unlocalized Name of this Item. + */ + public GTMetaTool(final String aUnlocalized) { + super(aUnlocalized); + GTModHandler.registerBoxableItemToToolBox(new ItemStack(this)); + this.setCreativeTab(AddToCreativeTab.tabMachines); + this.setMaxStackSize(1); + sInstances.put(this.getUnlocalizedName(), this); + } + + /** + * Called by the Block Harvesting Event within the GTProxy + */ + @Override + public void onHarvestBlockEvent(final ArrayList aDrops, final ItemStack aStack, + final EntityPlayer aPlayer, final Block aBlock, final int aX, final int aY, final int aZ, final byte aMetaData, + final int aFortune, final boolean aSilkTouch, final BlockEvent.HarvestDropsEvent aEvent) { + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + if (this.isItemStackUsable(aStack) && (this.getDigSpeed(aStack, aBlock, aMetaData) > 0.0F)) { + this.doDamage( + aStack, + tStats.convertBlockDrops( + aDrops, + aStack, + aPlayer, + aBlock, + aX, + aY, + aZ, + aMetaData, + aFortune, + aSilkTouch, + aEvent) * tStats.getToolDamagePerDropConversion()); + } + } + + @Override + public boolean onLeftClickEntity(final ItemStack aStack, final EntityPlayer aPlayer, final Entity aEntity) { + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + if ((tStats == null) || !this.isItemStackUsable(aStack)) { + return true; + } + GTUtility.doSoundAtClient(tStats.getEntityHitSound(), 1, 1.0F); + if (super.onLeftClickEntity(aStack, aPlayer, aEntity)) { + return true; + } + if (aEntity.canAttackWithItem() && !aEntity.hitByEntity(aPlayer)) { + final float tMagicDamage = tStats.getMagicDamageAgainstEntity( + aEntity instanceof EntityLivingBase + ? EnchantmentHelper.getEnchantmentModifierLiving(aPlayer, (EntityLivingBase) aEntity) + : 0.0F, + aEntity, + aStack, + aPlayer); + float tDamage = tStats.getNormalDamageAgainstEntity( + (float) aPlayer.getEntityAttribute(SharedMonsterAttributes.attackDamage) + .getAttributeValue() + this.getToolCombatDamage(aStack), + aEntity, + aStack, + aPlayer); + if ((tDamage + tMagicDamage) > 0.0F) { + final boolean tCriticalHit = (aPlayer.fallDistance > 0.0F) && !aPlayer.onGround + && !aPlayer.isOnLadder() + && !aPlayer.isInWater() + && !aPlayer.isPotionActive(Potion.blindness) + && (aPlayer.ridingEntity == null) + && (aEntity instanceof EntityLivingBase); + if (tCriticalHit && (tDamage > 0.0F)) { + tDamage *= 1.5F; + } + tDamage += tMagicDamage; + if (aEntity.attackEntityFrom(tStats.getDamageSource(aPlayer, aEntity), tDamage)) { + if (aEntity instanceof EntityLivingBase) { + aEntity.setFire(EnchantmentHelper.getFireAspectModifier(aPlayer) * 4); + } + final int tKnockcack = (aPlayer.isSprinting() ? 1 : 0) + (aEntity instanceof EntityLivingBase + ? EnchantmentHelper.getKnockbackModifier(aPlayer, (EntityLivingBase) aEntity) + : 0); + if (tKnockcack > 0) { + aEntity.addVelocity( + -MathHelper.sin((aPlayer.rotationYaw * (float) Math.PI) / 180.0F) * tKnockcack * 0.5F, + 0.1D, + MathHelper.cos((aPlayer.rotationYaw * (float) Math.PI) / 180.0F) * tKnockcack * 0.5F); + aPlayer.motionX *= 0.6D; + aPlayer.motionZ *= 0.6D; + aPlayer.setSprinting(false); + } + if (tCriticalHit) { + aPlayer.onCriticalHit(aEntity); + } + if (tMagicDamage > 0.0F) { + aPlayer.onEnchantmentCritical(aEntity); + } + if (tDamage >= 18.0F) { + aPlayer.triggerAchievement(AchievementList.overkill); + } + aPlayer.setLastAttacker(aEntity); + if (aEntity instanceof EntityLivingBase) { + EnchantmentHelper.func_151384_a((EntityLivingBase) aEntity, aPlayer); + } + EnchantmentHelper.func_151385_b(aPlayer, aEntity); + if (aEntity instanceof EntityLivingBase) { + aPlayer.addStat(StatList.damageDealtStat, Math.round(tDamage * 10.0F)); + } + aEntity.hurtResistantTime = Math + .max(1, tStats.getHurtResistanceTime(aEntity.hurtResistantTime, aEntity)); + aPlayer.addExhaustion(0.3F); + this.doDamage(aStack, tStats.getToolDamagePerEntityAttack()); + } + } + } + if (aStack.stackSize <= 0) { + aPlayer.destroyCurrentEquippedItem(); + } + return true; + } + + @Override + public ItemStack onItemRightClick(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + if ((tStats != null) && tStats.canBlock()) { + aPlayer.setItemInUse(aStack, 72000); + } + return super.onItemRightClick(aStack, aWorld, aPlayer); + } + + @SuppressWarnings("unchecked") + public void addAdditionalToolTips(final List aList, final ItemStack aStack) { + final long tMaxDamage = getToolMaxDamage(aStack); + final Materials tMaterial = getPrimaryMaterial(aStack); + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + final int tOffset = this.getElectricStats(aStack) != null ? 2 : 1; + if (tStats != null) { + final String name = aStack.getUnlocalizedName(); + if (name.equals("gt.metatool.01.170") || name.equals("gt.metatool.01.172") + || name.equals("gt.metatool.01.174") + || name.equals("gt.metatool.01.176")) { + aList.add( + tOffset + 0, + EnumChatFormatting.WHITE + "Durability: " + + EnumChatFormatting.GREEN + + (tMaxDamage - getToolDamage(aStack)) + + " / " + + tMaxDamage + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 1, + EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + + EnumChatFormatting.YELLOW + + " lvl " + + this.getHarvestLevel(aStack, "") + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 2, + EnumChatFormatting.WHITE + "Turbine Efficency: " + + EnumChatFormatting.BLUE + + (50.0F + (10.0F * this.getToolCombatDamage(aStack))) + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 3, + EnumChatFormatting.WHITE + "Optimal Steam flow: " + + EnumChatFormatting.LIGHT_PURPLE + + Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) + + EnumChatFormatting.GRAY + + "L/sec"); + aList.add( + tOffset + 3, + EnumChatFormatting.WHITE + "Optimal Gas flow(EU burnvalue per tick): " + + EnumChatFormatting.LIGHT_PURPLE + + Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 25) + + EnumChatFormatting.GRAY + + "EU/t"); + aList.add( + tOffset + 3, + EnumChatFormatting.WHITE + "Optimal Plasma flow(Plasma energyvalue per tick): " + + EnumChatFormatting.LIGHT_PURPLE + + Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) + + EnumChatFormatting.GRAY + + "EU/t"); + + } else { + aList.add( + tOffset + 0, + EnumChatFormatting.WHITE + "Durability: " + + EnumChatFormatting.GREEN + + (tMaxDamage - getToolDamage(aStack)) + + " / " + + tMaxDamage + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 1, + EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + + EnumChatFormatting.YELLOW + + " lvl " + + this.getHarvestLevel(aStack, "") + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 2, + EnumChatFormatting.WHITE + "Attack Damage: " + + EnumChatFormatting.BLUE + + this.getToolCombatDamage(aStack) + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 3, + EnumChatFormatting.WHITE + "Mining Speed: " + + EnumChatFormatting.LIGHT_PURPLE + + Math + .max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) + + EnumChatFormatting.GRAY); + } + } + } + + @Override + @SuppressWarnings("unchecked") + public void addAdditionalToolTips(final List aList, final ItemStack aStack, final EntityPlayer aPlayer) { + final long tMaxDamage = getToolMaxDamage(aStack); + final Materials tMaterial = getPrimaryMaterial(aStack); + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + final int tOffset = this.getElectricStats(aStack) != null ? 2 : 1; + if (tStats != null) { + final String name = aStack.getUnlocalizedName(); + if (name.equals("gt.metatool.01.170") || name.equals("gt.metatool.01.172") + || name.equals("gt.metatool.01.174") + || name.equals("gt.metatool.01.176")) { + aList.add( + tOffset + 0, + EnumChatFormatting.WHITE + "Durability: " + + EnumChatFormatting.GREEN + + (tMaxDamage - getToolDamage(aStack)) + + " / " + + tMaxDamage + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 1, + EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + + EnumChatFormatting.YELLOW + + " lvl " + + this.getHarvestLevel(aStack, "") + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 2, + EnumChatFormatting.WHITE + "Turbine Efficency: " + + EnumChatFormatting.BLUE + + (50.0F + (10.0F * this.getToolCombatDamage(aStack))) + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 3, + EnumChatFormatting.WHITE + "Optimal Steam flow: " + + EnumChatFormatting.LIGHT_PURPLE + + Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) + + EnumChatFormatting.GRAY + + "L/sec"); + aList.add( + tOffset + 3, + EnumChatFormatting.WHITE + "Optimal Gas flow(EU burnvalue per tick): " + + EnumChatFormatting.LIGHT_PURPLE + + Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 50) + + EnumChatFormatting.GRAY + + "EU/t"); + aList.add( + tOffset + 3, + EnumChatFormatting.WHITE + "Optimal Plasma flow(Plasma energyvalue per tick): " + + EnumChatFormatting.LIGHT_PURPLE + + Math.max( + Float.MIN_NORMAL, + tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) + + EnumChatFormatting.GRAY + + "EU/t"); + + } else { + aList.add( + tOffset + 0, + EnumChatFormatting.WHITE + "Durability: " + + EnumChatFormatting.GREEN + + (tMaxDamage - getToolDamage(aStack)) + + " / " + + tMaxDamage + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 1, + EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName + + EnumChatFormatting.YELLOW + + " lvl " + + this.getHarvestLevel(aStack, "") + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 2, + EnumChatFormatting.WHITE + "Attack Damage: " + + EnumChatFormatting.BLUE + + this.getToolCombatDamage(aStack) + + EnumChatFormatting.GRAY); + aList.add( + tOffset + 3, + EnumChatFormatting.WHITE + "Mining Speed: " + + EnumChatFormatting.LIGHT_PURPLE + + Math + .max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) + + EnumChatFormatting.GRAY); + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if ((aNBT != null) && aNBT.hasKey("Heat")) { + int tHeat = aNBT.getInteger("Heat"); + final long tWorldTime = aPlayer.getEntityWorld() + .getWorldTime(); + if (aNBT.hasKey("HeatTime")) { + final long tHeatTime = aNBT.getLong("HeatTime"); + if (tWorldTime > (tHeatTime + 10)) { + tHeat = (int) (tHeat - ((tWorldTime - tHeatTime) / 10)); + if ((tHeat < 300) && (tHeat > -10000)) { + tHeat = 300; + } + } + aNBT.setLong("HeatTime", tWorldTime); + if (tHeat > -10000) { + aNBT.setInteger("Heat", tHeat); + } + } + + aList.add( + tOffset + 3, + EnumChatFormatting.RED + "Heat: " + + aNBT.getInteger("Heat") + + " K" + + EnumChatFormatting.GRAY); + } + } + } + } + } + + @Override + public Long[] getFluidContainerStats(final ItemStack aStack) { + return null; + } + + @Override + public Long[] getElectricStats(final ItemStack aStack) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("GT.ToolStats"); + if ((aNBT != null) && aNBT.getBoolean("Electric")) { + return new Long[] { aNBT.getLong("MaxCharge"), aNBT.getLong("Voltage"), aNBT.getLong("Tier"), + aNBT.getLong("SpecialData") }; + } + } + return new Long[] {}; + } + + @Override + public float getToolCombatDamage(final ItemStack aStack) { + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + if (tStats == null) { + return 0; + } + return tStats.getBaseDamage() + getPrimaryMaterial(aStack).mToolQuality; + } + + @Override + public float getDigSpeed(final ItemStack aStack, final Block aBlock, final int aMetaData) { + if (!this.isItemStackUsable(aStack)) { + return 0.0F; + } + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + if ((tStats == null) || (Math.max(0, this.getHarvestLevel(aStack, "")) < aBlock.getHarvestLevel(aMetaData))) { + return 0.0F; + } + return tStats.isMinableBlock(aBlock, (byte) aMetaData) + ? Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) + : 0.0F; + } + + @Override + public boolean onBlockDestroyed(final ItemStack aStack, final World aWorld, final Block aBlock, final int aX, + final int aY, final int aZ, final EntityLivingBase aPlayer) { + if (!this.isItemStackUsable(aStack)) { + return false; + } + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + if (tStats == null) { + return false; + } + GTUtility.doSoundAtClient(tStats.getMiningSound(), 1, 1.0F); + this.doDamage( + aStack, + (int) Math.max(1, aBlock.getBlockHardness(aWorld, aX, aY, aZ) * tStats.getToolDamagePerBlockBreak())); + return this.getDigSpeed(aStack, aBlock, aWorld.getBlockMetadata(aX, aY, aZ)) > 0.0F; + } + + private ItemStack getContainerItem(ItemStack aStack, final boolean playSound) { + if (!this.isItemStackUsable(aStack)) { + return null; + } + aStack = GTUtility.copyAmount(1, aStack); + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + if (tStats == null) { + return null; + } + this.doDamage(aStack, tStats.getToolDamagePerContainerCraft()); + aStack = aStack.stackSize > 0 ? aStack : null; + if (playSound) {} + return aStack; + } + + @Override + public IToolStats getToolStats(final ItemStack aStack) { + this.isItemStackUsable(aStack); + return this.getToolStatsInternal(aStack); + } + + private IToolStats getToolStatsInternal(final ItemStack aStack) { + return (IToolStats) (aStack == null ? null : this.mToolStats.get((short) aStack.getItemDamage())); + } + + @Override + public boolean canWhack(final EntityPlayer aPlayer, final ItemStack aStack, final int aX, final int aY, + final int aZ) { + if (!this.isItemStackUsable(aStack)) { + return false; + } + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + return (tStats != null) && tStats.isCrowbar(); + } + + @Override + public void onWhack(final EntityPlayer aPlayer, final ItemStack aStack, final int aX, final int aY, final int aZ) { + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + if (tStats != null) { + this.doDamage(aStack, tStats.getToolDamagePerEntityAttack()); + } + } + + @Override + public boolean canWrench(final EntityPlayer player, final int x, final int y, final int z) { + // System.out.println("canWrench"); + if (player == null) { + return false; + } + if (player.getCurrentEquippedItem() == null) { + return false; + } + if (!this.isItemStackUsable(player.getCurrentEquippedItem())) { + return false; + } + final IToolStats tStats = this.getToolStats(player.getCurrentEquippedItem()); + return (tStats != null) && tStats.isWrench(); + } + + @Override + public void wrenchUsed(final EntityPlayer player, final int x, final int y, final int z) { + if (player == null) { + return; + } + if (player.getCurrentEquippedItem() == null) { + return; + } + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(player.getCurrentEquippedItem()); + if (tStats != null) { + this.doDamage(player.getCurrentEquippedItem(), tStats.getToolDamagePerEntityAttack()); + } + } + + @Override + public boolean canLink(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) { + if (!this.isItemStackUsable(aStack)) { + return false; + } + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + return (tStats != null) && tStats.isCrowbar(); + } + + @Override + public void onLink(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) { + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + if (tStats != null) { + this.doDamage(aStack, tStats.getToolDamagePerEntityAttack()); + } + } + + @Override + public boolean canBoost(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) { + if (!this.isItemStackUsable(aStack)) { + return false; + } + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + return (tStats != null) && tStats.isCrowbar(); + } + + @Override + public void onBoost(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) { + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + if (tStats != null) { + this.doDamage(aStack, tStats.getToolDamagePerEntityAttack()); + } + } + + @Override + public void onCreated(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { + final gregtech.api.interfaces.IToolStats tStats = this.getToolStats(aStack); + if ((tStats != null) && (aPlayer != null)) { + tStats.onToolCrafted(aStack, aPlayer); + } + super.onCreated(aStack, aWorld, aPlayer); + } + + @Override + public boolean isFull3D() { + return true; + } + + @Override + public boolean isItemStackUsable(final ItemStack aStack) { + final gregtech.api.interfaces.IToolStats tStats = this.getToolStatsInternal(aStack); + if (((aStack.getItemDamage() % 2) == 1) || (tStats == null)) { + final NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT.removeTag("ench"); + } + return false; + } + final Materials aMaterial = getPrimaryMaterial(aStack); + final HashMap tMap = new HashMap<>(), tResult = new HashMap<>(); + if (aMaterial.mEnchantmentTools != null) { + tMap.put(aMaterial.mEnchantmentTools.effectId, (int) aMaterial.mEnchantmentToolsLevel); + if (aMaterial.mEnchantmentTools == Enchantment.fortune) { + tMap.put(Enchantment.looting.effectId, (int) aMaterial.mEnchantmentToolsLevel); + } + if (aMaterial.mEnchantmentTools == Enchantment.knockback) { + tMap.put(Enchantment.power.effectId, (int) aMaterial.mEnchantmentToolsLevel); + } + if (aMaterial.mEnchantmentTools == Enchantment.fireAspect) { + tMap.put(Enchantment.flame.effectId, (int) aMaterial.mEnchantmentToolsLevel); + } + } + final Enchantment[] tEnchants = tStats.getEnchantments(aStack); + final int[] tLevels = tStats.getEnchantmentLevels(aStack); + for (int i = 0; i < tEnchants.length; i++) { + if (tLevels[i] > 0) { + final Integer tLevel = tMap.get(tEnchants[i].effectId); + tMap.put( + tEnchants[i].effectId, + tLevel == null ? tLevels[i] : tLevel == tLevels[i] ? tLevel + 1 : Math.max(tLevel, tLevels[i])); + } + } + for (final Entry tEntry : tMap.entrySet()) { + if ((tEntry.getKey() == 33) || ((tEntry.getKey() == 20) && (tEntry.getValue() > 2)) + || (tEntry.getKey() == EnchantmentRadioactivity.INSTANCE.effectId)) { + tResult.put(tEntry.getKey(), tEntry.getValue()); + } else { + switch (Enchantment.enchantmentsList[tEntry.getKey()].type) { + case weapon: + if (tStats.isWeapon()) { + tResult.put(tEntry.getKey(), tEntry.getValue()); + } + break; + case all: + tResult.put(tEntry.getKey(), tEntry.getValue()); + break; + case armor: + case armor_feet: + case armor_head: + case armor_legs: + case armor_torso: + break; + case bow: + if (tStats.isRangedWeapon()) { + tResult.put(tEntry.getKey(), tEntry.getValue()); + } + break; + case breakable: + break; + case fishing_rod: + break; + case digger: + if (tStats.isMiningTool()) { + tResult.put(tEntry.getKey(), tEntry.getValue()); + } + break; + } + } + } + EnchantmentHelper.setEnchantments(tResult, aStack); + return true; + } + + @Override + public short getChargedMetaData(final ItemStack aStack) { + return (short) (aStack.getItemDamage() - (aStack.getItemDamage() % 2)); + } + + @Override + public short getEmptyMetaData(final ItemStack aStack) { + final NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT.removeTag("ench"); + } + return (short) ((aStack.getItemDamage() + 1) - (aStack.getItemDamage() % 2)); + } + + @Override + public int getItemEnchantability() { + return 0; + } + + @Override + public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) { + return false; + } + + @Override + public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_Generic_Item.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_Generic_Item.java deleted file mode 100644 index 3ad04ab014..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_Generic_Item.java +++ /dev/null @@ -1,204 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.items; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.List; - -import net.minecraft.block.BlockDispenser; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.dispenser.BehaviorDefaultDispenseItem; -import net.minecraft.dispenser.BehaviorProjectileDispense; -import net.minecraft.dispenser.IBlockSource; -import net.minecraft.dispenser.IPosition; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.IProjectile; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumFacing; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.SubTag; -import gregtech.api.interfaces.IProjectileItem; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.util.Utils; - -/** - * Extended by most Items, also used as a fallback Item, to prevent the accidental deletion when Errors occur. - */ -public class Gregtech_Generic_Item extends Item implements IProjectileItem { - - private final String mName, mTooltip; - protected IIcon mIcon; - - public Gregtech_Generic_Item(final String aUnlocalized, final String aEnglish, final String aEnglishTooltip) { - this(aUnlocalized, aEnglish, aEnglishTooltip, true); - } - - public Gregtech_Generic_Item(final String aUnlocalized, final String aEnglish, final String aEnglishTooltip, - final boolean aWriteToolTipIntoLangFile) { - super(); - this.mName = aUnlocalized; - GT_LanguageManager.addStringLocalization(this.mName + ".name", aEnglish); - if (GT_Utility.isStringValid(aEnglishTooltip)) { - GT_LanguageManager.addStringLocalization( - this.mTooltip = this.mName + ".tooltip_main", - aEnglishTooltip, - aWriteToolTipIntoLangFile); - } else { - this.mTooltip = null; - } - this.setCreativeTab(AddToCreativeTab.tabMachines); - GameRegistry.registerItem(this, this.mName, GTPlusPlus.ID); - BlockDispenser.dispenseBehaviorRegistry.putObject(this, new GT_Item_Dispense()); - } - - @Override - public final Item setUnlocalizedName(final String aName) { - return this; - } - - @Override - public final String getUnlocalizedName() { - return this.mName; - } - - @Override - public String getUnlocalizedName(final ItemStack aStack) { - return this.getHasSubtypes() ? this.mName + "." + this.getDamage(aStack) : this.mName; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerIcons(final IIconRegister aIconRegister) { - this.mIcon = aIconRegister.registerIcon(GTPlusPlus.ID + ":" + this.mName); - } - - @Override - public boolean doesSneakBypassUse(final World aWorld, final int aX, final int aY, final int aZ, - final EntityPlayer aPlayer) { - return true; - } - - @Override - public IIcon getIconFromDamage(final int par1) { - return this.mIcon; - } - - public int getTier(final ItemStack aStack) { - return 0; - } - - @Override - public void addInformation(final ItemStack aStack, final EntityPlayer aPlayer, final List aList, - final boolean aF3_H) { - if ((this.getMaxDamage() > 0) && !this.getHasSubtypes()) { - aList.add((aStack.getMaxDamage() - this.getDamage(aStack)) + " / " + aStack.getMaxDamage()); - } - if (this.mTooltip != null) { - aList.add(GT_LanguageManager.getTranslation(this.mTooltip)); - } - if (GT_ModHandler.isElectricItem(aStack)) { - aList.add("Tier: " + this.getTier(aStack)); - } - this.addAdditionalToolTips(aList, aStack); - } - - protected void addAdditionalToolTips(final List aList, final ItemStack aStack) { - // - } - - @Override - public void onCreated(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { - this.isItemStackUsable(aStack); - } - - public boolean isItemStackUsable(final ItemStack aStack) { - return true; - } - - public ItemStack onDispense(final IBlockSource aSource, final ItemStack aStack) { - final EnumFacing enumfacing = BlockDispenser.func_149937_b(aSource.getBlockMetadata()); - final IPosition iposition = BlockDispenser.func_149939_a(aSource); - final ItemStack itemstack1 = aStack.splitStack(1); - BehaviorDefaultDispenseItem.doDispense(aSource.getWorld(), itemstack1, 6, enumfacing, iposition); - return aStack; - } - - @Override - public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld, - final double aX, final double aY, final double aZ) { - return null; - } - - @Override - public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld, - final EntityLivingBase aEntity, final float aSpeed) { - return null; - } - - @Override - public boolean hasProjectile(final SubTag aProjectileType, final ItemStack aStack) { - return false; - } - - @Override - public ItemStack getContainerItem(final ItemStack aStack) { - return null; - } - - @Override - public boolean hasContainerItem(final ItemStack aStack) { - return this.getContainerItem(aStack) != null; - } - - public static class GT_Item_Dispense extends BehaviorProjectileDispense { - - @Override - public ItemStack dispenseStack(final IBlockSource aSource, final ItemStack aStack) { - return ((Gregtech_Generic_Item) aStack.getItem()).onDispense(aSource, aStack); - } - - @Override - protected IProjectile getProjectileEntity(final World aWorld, final IPosition aPosition) { - return null; - } - } - - @Override - public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) { - if (stack.getDisplayName() - .contains("LuV")) { - HEX_OxFFFFFF = 0xffffcc; - } else if (stack.getDisplayName() - .contains("ZPM")) { - HEX_OxFFFFFF = 0xace600; - } else if (stack.getDisplayName() - .contains("UV")) { - HEX_OxFFFFFF = 0xffff00; - } else if (stack.getDisplayName() - .contains("MAX")) { - HEX_OxFFFFFF = 0xff0000; - } else if (stack.getDisplayName() - .contains("Sodium")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(0, 0, 150); - } else if (stack.getDisplayName() - .contains("Cadmium")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(50, 50, 60); - } else if (stack.getDisplayName() - .contains("Lithium")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(225, 220, 255); - } else { - HEX_OxFFFFFF = 0xffffff; - } - return HEX_OxFFFFFF; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem.java deleted file mode 100644 index 015ba9d716..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem.java +++ /dev/null @@ -1,357 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.items; - -import static gregtech.api.enums.GT_Values.D1; -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.BitSet; -import java.util.HashMap; -import java.util.List; - -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumAction; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.world.World; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TC_Aspects.TC_AspectStack; -import gregtech.api.interfaces.IFoodStat; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.IItemContainer; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_ItemBehaviour; - -public abstract class Gregtech_MetaItem extends Gregtech_MetaItem_Base { - - /** - * All instances of this Item Class are listed here. This gets used to register the Renderer to all Items of this - * Type, if useStandardMetaItemRenderer() returns true. - *

- * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item. - */ - public static final HashMap sInstances = new HashMap<>(); - - /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ - - public final short mOffset, mItemAmount; - public final BitSet mEnabledItems; - public final BitSet mVisibleItems; - public final IIcon[][] mIconList; - - public final HashMap mFoodStats = new HashMap<>(); - public final HashMap mElectricStats = new HashMap<>(); - public final HashMap mFluidContainerStats = new HashMap<>(); - public final HashMap mBurnValues = new HashMap<>(); - - /** - * Creates the Item using these Parameters. - * - * @param aUnlocalized The Unlocalized Name of this Item. - */ - public Gregtech_MetaItem(final String aUnlocalized, final short aOffset, final short aItemAmount) { - super(aUnlocalized); - this.setCreativeTab(AddToCreativeTab.tabMachines); - this.setHasSubtypes(true); - this.setMaxDamage(0); - this.mEnabledItems = new BitSet(aItemAmount); - this.mVisibleItems = new BitSet(aItemAmount); - - this.mOffset = (short) Math.min(32766, aOffset); - this.mItemAmount = (short) Math.min(aItemAmount, 32766 - this.mOffset); - this.mIconList = new IIcon[aItemAmount][1]; - - sInstances.put(this.getUnlocalizedName(), this); - } - - /** - * This adds a Custom Item to the ending Range. - * - * @param aID The Id of the assigned Item [0 - mItemAmount] (The MetaData gets auto-shifted by +mOffset) - * @param aEnglish The Default Localized Name of the created Item - * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip - * @param aFoodBehavior The Food Value of this Item. Can be null aswell. Just a convenience thing. - * @param aRandomData The OreDict Names you want to give the Item. Also used for TC Aspects and some other things. - * @return An ItemStack containing the newly created Item. - */ - public final ItemStack addItem(final int aID, final String aEnglish, String aToolTip, final Object... aRandomData) { - if (aToolTip == null) { - aToolTip = ""; - } - if ((aID >= 0) && (aID < this.mItemAmount)) { - final ItemStack rStack = new ItemStack(this, 1, this.mOffset + aID); - this.mEnabledItems.set(aID); - this.mVisibleItems.set(aID); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName(rStack) + ".name", aEnglish); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName(rStack) + ".tooltip", aToolTip); - final List tAspects = new ArrayList<>(); - // Important Stuff to do first - for (final Object tRandomData : aRandomData) { - if (tRandomData instanceof SubTag) { - if (tRandomData == SubTag.INVISIBLE) { - this.mVisibleItems.set(aID, false); - continue; - } - if (tRandomData == SubTag.NO_UNIFICATION) { - GT_OreDictUnificator.addToBlacklist(rStack); - continue; - } - } - } - // now check for the rest - for (final Object tRandomData : aRandomData) { - if (tRandomData != null) { - boolean tUseOreDict = true; - - if (tRandomData instanceof Interface_ItemBehaviour) { - this.addItemBehavior( - this.mOffset + aID, - (Interface_ItemBehaviour) tRandomData); - tUseOreDict = false; - } - if (tRandomData instanceof IItemContainer) { - ((IItemContainer) tRandomData).set(rStack); - tUseOreDict = false; - } - if (tRandomData instanceof SubTag) { - continue; - } - if (tRandomData instanceof TC_AspectStack) { - ((TC_AspectStack) tRandomData).addToAspectList(tAspects); - continue; - } - if (tRandomData instanceof ItemData) { - if (GT_Utility.isStringValid(tRandomData)) { - GT_OreDictUnificator.registerOre(tRandomData, rStack); - } else { - GT_OreDictUnificator.addItemData(rStack, (ItemData) tRandomData); - } - continue; - } - if (tUseOreDict) { - GT_OreDictUnificator.registerOre(tRandomData, rStack); - continue; - } - } - } - if (GregTech_API.sThaumcraftCompat != null) { - GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); - } - return rStack; - } - return null; - } - - /** - * Sets the Furnace Burn Value for the Item. - * - * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] - * @param aValue 200 = 1 Burn Process = 500 EU, max = 32767 (that is 81917.5 EU) - * @return the Item itself for convenience in constructing. - */ - public final Gregtech_MetaItem setBurnValue(final int aMetaValue, final int aValue) { - if ((aMetaValue < 0) || (aMetaValue >= (this.mOffset + this.mEnabledItems.length())) || (aValue < 0)) { - return this; - } - if (aValue == 0) { - this.mBurnValues.remove((short) aMetaValue); - } else { - this.mBurnValues.put((short) aMetaValue, aValue > Short.MAX_VALUE ? Short.MAX_VALUE : (short) aValue); - } - return this; - } - - /** - * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] - * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior) - * @param aTransferLimit Transfer Limit. - * @param aTier The electric Tier. - * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0). Use -1 if you want to - * make this Battery chargeable (the use and canUse Functions will still discharge if you just - * use this) Use -2 if you want to make this Battery dischargeable. Use -3 if you want to make - * this Battery charge/discharge-able. - * @return the Item itself for convenience in constructing. - */ - public final Gregtech_MetaItem setElectricStats(final int aMetaValue, final long aMaxCharge, - final long aTransferLimit, final long aTier, final long aSpecialData, final boolean aUseAnimations) { - if ((aMetaValue < 0) || (aMetaValue >= (this.mOffset + this.mEnabledItems.length()))) { - return this; - } - if (aMaxCharge == 0) { - this.mElectricStats.remove((short) aMetaValue); - } else { - this.mElectricStats.put( - (short) aMetaValue, - new Long[] { aMaxCharge, Math.max(0, aTransferLimit), Math.max(-1, aTier), aSpecialData }); - if ((aMetaValue >= this.mOffset) && aUseAnimations) { - this.mIconList[aMetaValue - this.mOffset] = Arrays.copyOf( - this.mIconList[aMetaValue - this.mOffset], - Math.max(9, this.mIconList[aMetaValue - this.mOffset].length)); - } - } - return this; - } - - /** - * @param aMetaValue the Meta Value of the Item you want to set it to. [0 - 32765] - * @param aMaxCharge Maximum Charge. (if this is == 0 it will remove the Electric Behavior) - * @param aTransferLimit Transfer Limit. - * @param aTier The electric Tier. - * @param aSpecialData If this Item has a Fixed Charge, like a SingleUse Battery (if > 0). Use -1 if you want to - * make this Battery chargeable (the use and canUse Functions will still discharge if you just - * use this) Use -2 if you want to make this Battery dischargeable. Use -3 if you want to make - * this Battery charge/discharge-able. - * @return the Item itself for convenience in constructing. - */ - public final Gregtech_MetaItem setFluidContainerStats(final int aMetaValue, final long aCapacity, - final long aStacksize) { - if ((aMetaValue < 0) || (aMetaValue >= (this.mOffset + this.mEnabledItems.length()))) { - return this; - } - if (aCapacity < 0) { - this.mElectricStats.remove((short) aMetaValue); - } else { - this.mFluidContainerStats.put((short) aMetaValue, new Long[] { aCapacity, Math.max(1, aStacksize) }); - } - return this; - } - - /** - * @return if this MetaGenerated Item should use my Default Renderer System. - */ - public boolean useStandardMetaItemRenderer() { - return true; - } - - /** - * @return the Color Modulation the Material is going to be rendered with. - */ - public short[] getRGBa(final ItemStack aStack) { - return Materials._NULL.getRGBA(); - } - - /** - * @return the Icon the Material is going to be rendered with. - */ - public IIconContainer getIconContainer(final int aMetaData) { - return null; - } - - /* ---------- INTERNAL OVERRIDES ---------- */ - - @Override - public ItemStack onItemRightClick(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { - return super.onItemRightClick(aStack, aWorld, aPlayer); - } - - @Override - public int getMaxItemUseDuration(final ItemStack aStack) { - return this.mFoodStats.get((short) this.getDamage(aStack)) == null ? 0 : 32; - } - - @Override - public EnumAction getItemUseAction(final ItemStack aStack) { - return EnumAction.none; - } - - @Override - public final ItemStack onEaten(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { - final IFoodStat tStat = this.mFoodStats.get((short) this.getDamage(aStack)); - if (tStat != null) {} - - return aStack; - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(final Item var1, final CreativeTabs aCreativeTab, final List aList) { - for (int i = 0, j = this.mEnabledItems.length(); i < j; i++) { - if (this.mVisibleItems.get(i) || (D1 && this.mEnabledItems.get(i))) { - final Long[] tStats = this.mElectricStats.get((short) (this.mOffset + i)); - if ((tStats != null) && (tStats[3] < 0)) { - final ItemStack tStack = new ItemStack(this, 1, this.mOffset + i); - this.setCharge(tStack, Math.abs(tStats[0])); - this.isItemStackUsable(tStack); - aList.add(tStack); - } - if ((tStats == null) || (tStats[3] != -2)) { - final ItemStack tStack = new ItemStack(this, 1, this.mOffset + i); - this.isItemStackUsable(tStack); - aList.add(tStack); - } - } - } - } - - @Override - @SideOnly(Side.CLIENT) - public final void registerIcons(final IIconRegister aIconRegister) { - for (short i = 0, j = (short) this.mEnabledItems.length(); i < j; i++) { - if (this.mEnabledItems.get(i)) { - for (byte k = 1; k < this.mIconList[i].length; k++) { - this.mIconList[i][k] = aIconRegister - .registerIcon(GTPlusPlus.ID + ":" + this.getUnlocalizedName() + "/" + i + "/" + k); - } - this.mIconList[i][0] = aIconRegister - .registerIcon(GTPlusPlus.ID + ":" + this.getUnlocalizedName() + "/" + i); - } - } - } - - @Override - public final Long[] getElectricStats(final ItemStack aStack) { - return this.mElectricStats.get((short) aStack.getItemDamage()); - } - - @Override - public final Long[] getFluidContainerStats(final ItemStack aStack) { - return this.mFluidContainerStats.get((short) aStack.getItemDamage()); - } - - @Override - public int getItemEnchantability() { - return 0; - } - - @Override - public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) { - return false; - } - - @Override - public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) { - return false; - } - - @Override - public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) { - if (stack.getDisplayName() - .contains("LuV")) { - HEX_OxFFFFFF = 0xffffcc; - } else if (stack.getDisplayName() - .contains("ZPM")) { - HEX_OxFFFFFF = 0xace600; - } else if (stack.getDisplayName() - .contains("UV")) { - HEX_OxFFFFFF = 0xffff00; - } else if (stack.getDisplayName() - .contains("MAX")) { - HEX_OxFFFFFF = 0xff0000; - } else { - HEX_OxFFFFFF = 0xffffff; - } - return HEX_OxFFFFFF; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_Base.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_Base.java deleted file mode 100644 index 3c4418c2bf..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_Base.java +++ /dev/null @@ -1,745 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.items; - -import static gregtech.api.enums.GT_Values.D1; -import static gregtech.api.enums.GT_Values.V; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import net.minecraft.dispenser.IBlockSource; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.inventory.Container; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidContainerItem; - -import gregtech.api.enums.SubTag; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_ItemBehaviour; -import ic2.api.item.ElectricItem; -import ic2.api.item.IElectricItem; -import ic2.api.item.IElectricItemManager; -import ic2.api.item.ISpecialElectricItem; - -public abstract class Gregtech_MetaItem_Base extends Gregtech_Generic_Item - implements ISpecialElectricItem, IElectricItemManager, IFluidContainerItem { - - /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ - private final HashMap>> mItemBehaviors = new HashMap<>(); - - /** - * Creates the Item using these Parameters. - * - * @param aUnlocalized The Unlocalized Name of this Item. - * @param aGeneratedPrefixList The OreDict Prefixes you want to have generated. - */ - public Gregtech_MetaItem_Base(final String aUnlocalized) { - super(aUnlocalized, "Generated Item", null, false); - this.setHasSubtypes(true); - this.setMaxDamage(0); - } - - /** - * Adds a special Item Behaviour to the Item. - *

- * Note: the boolean Behaviours sometimes won't be executed if another boolean Behaviour returned true before. - * - * @param aMetaValue the Meta Value of the Item you want to add it to. [0 - 32765] - * @param aBehavior the Click Behavior you want to add. - * @return the Item itself for convenience in constructing. - */ - public final Gregtech_MetaItem_Base addItemBehavior(final int aMetaValue, - final Interface_ItemBehaviour aBehavior) { - if ((aMetaValue < 0) || (aMetaValue >= 32766) || (aBehavior == null)) { - return this; - } - ArrayList> tList = this.mItemBehaviors.get((short) aMetaValue); - if (tList == null) { - tList = new ArrayList<>(1); - this.mItemBehaviors.put((short) aMetaValue, tList); - } - tList.add(aBehavior); - return this; - } - - public abstract Long[] getElectricStats(ItemStack aStack); - - public abstract Long[] getFluidContainerStats(ItemStack aStack); - - @Override - public boolean hasProjectile(final SubTag aProjectileType, final ItemStack aStack) { - final ArrayList> tList = this.mItemBehaviors - .get((short) this.getDamage(aStack)); - if (tList != null) { - for (final Interface_ItemBehaviour tBehavior : tList) { - if (tBehavior.hasProjectile(this, aProjectileType, aStack)) { - return true; - } - } - } - return super.hasProjectile(aProjectileType, aStack); - } - - @Override - public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld, - final double aX, final double aY, final double aZ) { - final ArrayList> tList = this.mItemBehaviors - .get((short) this.getDamage(aStack)); - if (tList != null) { - for (final Interface_ItemBehaviour tBehavior : tList) { - final EntityArrow rArrow = tBehavior.getProjectile(this, aProjectileType, aStack, aWorld, aX, aY, aZ); - if (rArrow != null) { - return rArrow; - } - } - } - return super.getProjectile(aProjectileType, aStack, aWorld, aX, aY, aZ); - } - - @Override - public EntityArrow getProjectile(final SubTag aProjectileType, final ItemStack aStack, final World aWorld, - final EntityLivingBase aEntity, final float aSpeed) { - final ArrayList> tList = this.mItemBehaviors - .get((short) this.getDamage(aStack)); - if (tList != null) { - for (final Interface_ItemBehaviour tBehavior : tList) { - final EntityArrow rArrow = tBehavior - .getProjectile(this, aProjectileType, aStack, aWorld, aEntity, aSpeed); - if (rArrow != null) { - return rArrow; - } - } - } - return super.getProjectile(aProjectileType, aStack, aWorld, aEntity, aSpeed); - } - - @Override - public ItemStack onDispense(final IBlockSource aSource, final ItemStack aStack) { - final ArrayList> tList = this.mItemBehaviors - .get((short) this.getDamage(aStack)); - if (tList != null) { - for (final Interface_ItemBehaviour tBehavior : tList) { - if (tBehavior.canDispense(this, aSource, aStack)) { - return tBehavior.onDispense(this, aSource, aStack); - } - } - } - return super.onDispense(aSource, aStack); - } - - @Override - public boolean isItemStackUsable(final ItemStack aStack) { - final ArrayList> tList = this.mItemBehaviors - .get((short) this.getDamage(aStack)); - if (tList != null) { - for (final Interface_ItemBehaviour tBehavior : tList) { - if (!tBehavior.isItemStackUsable(this, aStack)) { - return false; - } - } - } - return super.isItemStackUsable(aStack); - } - - @Override - public boolean onLeftClickEntity(final ItemStack aStack, final EntityPlayer aPlayer, final Entity aEntity) { - this.use(aStack, 0, aPlayer); - this.isItemStackUsable(aStack); - final ArrayList> tList = this.mItemBehaviors - .get((short) this.getDamage(aStack)); - if (tList != null) { - for (final Interface_ItemBehaviour tBehavior : tList) { - try { - if (tBehavior.onLeftClickEntity(this, aStack, aPlayer, aEntity)) { - if (aStack.stackSize <= 0) { - aPlayer.destroyCurrentEquippedItem(); - } - return true; - } - if (aStack.stackSize <= 0) { - aPlayer.destroyCurrentEquippedItem(); - return false; - } - } catch (final Throwable e) { - if (D1) { - e.printStackTrace(GT_Log.err); - } - } - } - } - return false; - } - - @Override - public boolean onItemUse(final ItemStack aStack, final EntityPlayer aPlayer, final World aWorld, final int aX, - final int aY, final int aZ, final int ordinalSide, final float hitX, final float hitY, final float hitZ) { - this.use(aStack, 0, aPlayer); - this.isItemStackUsable(aStack); - final ArrayList> tList = this.mItemBehaviors - .get((short) this.getDamage(aStack)); - if (tList != null) { - for (final Interface_ItemBehaviour tBehavior : tList) { - try { - if (tBehavior.onItemUse(this, aStack, aPlayer, aWorld, aX, aY, aZ, ordinalSide, hitX, hitY, hitZ)) { - if (aStack.stackSize <= 0) { - aPlayer.destroyCurrentEquippedItem(); - } - return true; - } - if (aStack.stackSize <= 0) { - aPlayer.destroyCurrentEquippedItem(); - return false; - } - } catch (final Throwable e) { - if (D1) { - e.printStackTrace(GT_Log.err); - } - } - } - } - return false; - } - - @Override - public boolean onItemUseFirst(final ItemStack aStack, final EntityPlayer aPlayer, final World aWorld, final int aX, - final int aY, final int aZ, final int ordinalSide, final float hitX, final float hitY, final float hitZ) { - this.use(aStack, 0, aPlayer); - this.isItemStackUsable(aStack); - final ArrayList> tList = this.mItemBehaviors - .get((short) this.getDamage(aStack)); - if (tList != null) { - for (final Interface_ItemBehaviour tBehavior : tList) { - try { - if (tBehavior - .onItemUseFirst(this, aStack, aPlayer, aWorld, aX, aY, aZ, ordinalSide, hitX, hitY, hitZ)) { - if (aStack.stackSize <= 0) { - aPlayer.destroyCurrentEquippedItem(); - } - return true; - } - if (aStack.stackSize <= 0) { - aPlayer.destroyCurrentEquippedItem(); - return false; - } - } catch (final Throwable e) { - if (D1) { - e.printStackTrace(GT_Log.err); - } - } - } - } - return false; - } - - @Override - public ItemStack onItemRightClick(ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { - this.use(aStack, 0, aPlayer); - this.isItemStackUsable(aStack); - final ArrayList> tList = this.mItemBehaviors - .get((short) this.getDamage(aStack)); - if (tList != null) { - for (final Interface_ItemBehaviour tBehavior : tList) { - try { - aStack = tBehavior.onItemRightClick(this, aStack, aWorld, aPlayer); - } catch (final Throwable e) { - if (D1) { - e.printStackTrace(GT_Log.err); - } - } - } - } - return aStack; - } - - @Override - public final void addInformation(final ItemStack aStack, final EntityPlayer aPlayer, List aList, - final boolean aF3_H) { - final String tKey = this.getUnlocalizedName(aStack) + ".tooltip", - tString = GT_LanguageManager.getTranslation(tKey); - if (GT_Utility.isStringValid(tString) && !tKey.equals(tString)) { - aList.add(tString); - } - - Long[] tStats = this.getElectricStats(aStack); - if (tStats != null) { - if (tStats[3] > 0) { - aList.add( - EnumChatFormatting.AQUA + "Contains " - + GT_Utility.formatNumbers(tStats[3]) - + " EU Tier: " - + (tStats[2] >= 0 ? tStats[2] : 0) - + EnumChatFormatting.GRAY); - } else { - final long tCharge = this.getRealCharge(aStack); - if ((tStats[3] == -2) && (tCharge <= 0)) { - aList.add( - EnumChatFormatting.AQUA + "Empty. You should recycle it properly." + EnumChatFormatting.GRAY); - } else { - aList.add( - EnumChatFormatting.AQUA + "" - + GT_Utility.formatNumbers(tCharge) - + " / " - + GT_Utility.formatNumbers(Math.abs(tStats[0])) - + " EU - Voltage: " - + GT_Utility.formatNumbers( - V[(int) (tStats[2] >= 0 ? tStats[2] < V.length ? tStats[2] : V.length - 1 : 1)]) - + EnumChatFormatting.GRAY); - } - } - } - - tStats = this.getFluidContainerStats(aStack); - if ((tStats != null) && (tStats[0] > 0)) { - final FluidStack tFluid = this.getFluidContent(aStack); - aList.add( - EnumChatFormatting.BLUE - + ((tFluid == null ? "No Fluids Contained" : GT_Utility.getFluidName(tFluid, true))) - + EnumChatFormatting.GRAY); - aList.add( - EnumChatFormatting.BLUE - + (GT_Utility.formatNumbers(tFluid == null ? 0 : tFluid.amount) + "L / " - + GT_Utility.formatNumbers(tStats[0]) - + "L") - + EnumChatFormatting.GRAY); - } - - final ArrayList> tList = this.mItemBehaviors - .get((short) this.getDamage(aStack)); - if (tList != null) { - for (final Interface_ItemBehaviour tBehavior : tList) { - aList = tBehavior.getAdditionalToolTips(this, aList, aStack); - } - } - - this.addAdditionalToolTips(aList, aStack); - } - - @Override - public void onUpdate(final ItemStack aStack, final World aWorld, final Entity aPlayer, final int aTimer, - final boolean aIsInHand) { - final ArrayList> tList = this.mItemBehaviors - .get((short) this.getDamage(aStack)); - if (tList != null) { - for (final Interface_ItemBehaviour tBehavior : tList) { - tBehavior.onUpdate(this, aStack, aWorld, aPlayer, aTimer, aIsInHand); - } - } - } - - @Override - public final boolean canProvideEnergy(final ItemStack aStack) { - final Long[] tStats = this.getElectricStats(aStack); - if (tStats == null) { - return false; - } - return (tStats[3] > 0) || ((aStack.stackSize == 1) && ((tStats[3] == -2) || (tStats[3] == -3))); - } - - @Override - public final double getMaxCharge(final ItemStack aStack) { - final Long[] tStats = this.getElectricStats(aStack); - if (tStats == null) { - return 0; - } - return Math.abs(tStats[0]); - } - - @Override - public final double getTransferLimit(final ItemStack aStack) { - final Long[] tStats = this.getElectricStats(aStack); - if (tStats == null) { - return 0; - } - return Math.max(tStats[1], tStats[3]); - } - - @Override - public final double charge(final ItemStack aStack, final double aCharge, final int aTier, - final boolean aIgnoreTransferLimit, final boolean aSimulate) { - final Long[] tStats = this.getElectricStats(aStack); - if ((tStats == null) || (tStats[2] > aTier) - || !((tStats[3] == -1) || (tStats[3] == -3) || ((tStats[3] < 0) && (aCharge == Integer.MAX_VALUE))) - || (aStack.stackSize != 1)) { - return 0; - } - final long tChargeBefore = this.getRealCharge(aStack), - tNewCharge = aCharge == Integer.MAX_VALUE ? Long.MAX_VALUE - : Math.min( - Math.abs(tStats[0]), - tChargeBefore + (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge))); - if (!aSimulate) { - this.setCharge(aStack, tNewCharge); - } - return tNewCharge - tChargeBefore; - } - - @Override - public final double discharge(final ItemStack aStack, final double aCharge, final int aTier, - final boolean aIgnoreTransferLimit, final boolean aBatteryAlike, final boolean aSimulate) { - final Long[] tStats = this.getElectricStats(aStack); - if ((tStats == null) || (tStats[2] > aTier)) { - return 0; - } - if (aBatteryAlike && !this.canProvideEnergy(aStack)) { - return 0; - } - if (tStats[3] > 0) { - if ((aCharge < tStats[3]) || (aStack.stackSize < 1)) { - return 0; - } - if (!aSimulate) { - aStack.stackSize--; - } - return tStats[3]; - } - final long tChargeBefore = this.getRealCharge(aStack), tNewCharge = Math - .max(0, tChargeBefore - (aIgnoreTransferLimit ? (long) aCharge : Math.min(tStats[1], (long) aCharge))); - if (!aSimulate) { - this.setCharge(aStack, tNewCharge); - } - return tChargeBefore - tNewCharge; - } - - @Override - public final double getCharge(final ItemStack aStack) { - return this.getRealCharge(aStack); - } - - @Override - public final boolean canUse(final ItemStack aStack, final double aAmount) { - return this.getRealCharge(aStack) >= aAmount; - } - - @Override - public final boolean use(final ItemStack aStack, final double aAmount, final EntityLivingBase aPlayer) { - this.chargeFromArmor(aStack, aPlayer); - if ((aPlayer instanceof EntityPlayer) && ((EntityPlayer) aPlayer).capabilities.isCreativeMode) { - return true; - } - final double tTransfer = this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, true); - if (tTransfer == aAmount) { - this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); - this.chargeFromArmor(aStack, aPlayer); - return true; - } - this.discharge(aStack, aAmount, Integer.MAX_VALUE, true, false, false); - this.chargeFromArmor(aStack, aPlayer); - return false; - } - - @Override - public final void chargeFromArmor(final ItemStack aStack, final EntityLivingBase aPlayer) { - if ((aPlayer == null) || aPlayer.worldObj.isRemote) { - return; - } - for (int i = 1; i < 5; i++) { - final ItemStack tArmor = aPlayer.getEquipmentInSlot(i); - if (GT_ModHandler.isElectricItem(tArmor)) { - final IElectricItem tArmorItem = (IElectricItem) tArmor.getItem(); - if (tArmorItem.canProvideEnergy(tArmor) && (tArmorItem.getTier(tArmor) >= this.getTier(aStack))) { - final double tCharge = ElectricItem.manager.discharge( - tArmor, - this.charge(aStack, Integer.MAX_VALUE - 1, Integer.MAX_VALUE, true, true), - Integer.MAX_VALUE, - true, - true, - false); - if (tCharge > 0) { - this.charge(aStack, tCharge, Integer.MAX_VALUE, true, false); - if (aPlayer instanceof EntityPlayer) { - final Container tContainer = ((EntityPlayer) aPlayer).openContainer; - if (tContainer != null) { - tContainer.detectAndSendChanges(); - } - } - } - } - } - } - } - - public final long getRealCharge(final ItemStack aStack) { - final Long[] tStats = this.getElectricStats(aStack); - if (tStats == null) { - return 0; - } - if (tStats[3] > 0) { - return (int) (long) tStats[3]; - } - final NBTTagCompound tNBT = aStack.getTagCompound(); - return tNBT == null ? 0 : tNBT.getLong("GT.ItemCharge"); - } - - public final boolean setCharge(final ItemStack aStack, long aCharge) { - final Long[] tStats = this.getElectricStats(aStack); - if ((tStats == null) || (tStats[3] > 0)) { - return false; - } - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - } - tNBT.removeTag("GT.ItemCharge"); - aCharge = Math.min(tStats[0] < 0 ? Math.abs(tStats[0] / 2) : aCharge, Math.abs(tStats[0])); - if (aCharge > 0) { - aStack.setItemDamage(this.getChargedMetaData(aStack)); - tNBT.setLong("GT.ItemCharge", aCharge); - } else { - aStack.setItemDamage(this.getEmptyMetaData(aStack)); - } - if (tNBT.hasNoTags()) { - aStack.setTagCompound(null); - } else { - aStack.setTagCompound(tNBT); - } - this.isItemStackUsable(aStack); - return true; - } - - public short getChargedMetaData(final ItemStack aStack) { - return (short) aStack.getItemDamage(); - } - - public short getEmptyMetaData(final ItemStack aStack) { - return (short) aStack.getItemDamage(); - } - - @Override - public FluidStack getFluid(final ItemStack aStack) { - return this.getFluidContent(aStack); - } - - @Override - public int getCapacity(final ItemStack aStack) { - final Long[] tStats = this.getFluidContainerStats(aStack); - return tStats == null ? 0 : (int) Math.max(0, tStats[0]); - } - - @Override - public int fill(final ItemStack aStack, final FluidStack aFluid, final boolean doFill) { - if ((aStack == null) || (aStack.stackSize != 1)) { - return 0; - } - - final ItemStack tStack = GT_Utility.fillFluidContainer(aFluid, aStack, false, false); - if (tStack != null) { - aStack.setItemDamage(tStack.getItemDamage()); - aStack.func_150996_a(tStack.getItem()); - return GT_Utility.getFluidForFilledItem(tStack, false).amount; - } - - final Long[] tStats = this.getFluidContainerStats(aStack); - if ((tStats == null) || (tStats[0] <= 0) - || (aFluid == null) - || (aFluid.getFluid() - .getID() <= 0) - || (aFluid.amount <= 0)) { - return 0; - } - - FluidStack tFluid = this.getFluidContent(aStack); - - if ((tFluid == null) || (tFluid.getFluid() - .getID() <= 0)) { - if (aFluid.amount <= tStats[0]) { - if (doFill) { - this.setFluidContent(aStack, aFluid); - } - return aFluid.amount; - } - if (doFill) { - tFluid = aFluid.copy(); - tFluid.amount = (int) (long) tStats[0]; - this.setFluidContent(aStack, tFluid); - } - return (int) (long) tStats[0]; - } - - if (!tFluid.isFluidEqual(aFluid)) { - return 0; - } - - final int space = (int) (long) tStats[0] - tFluid.amount; - if (aFluid.amount <= space) { - if (doFill) { - tFluid.amount += aFluid.amount; - this.setFluidContent(aStack, tFluid); - } - return aFluid.amount; - } - if (doFill) { - tFluid.amount = (int) (long) tStats[0]; - this.setFluidContent(aStack, tFluid); - } - return space; - } - - @Override - public FluidStack drain(final ItemStack aStack, final int maxDrain, final boolean doDrain) { - if ((aStack == null) || (aStack.stackSize != 1)) { - return null; - } - - FluidStack tFluid = GT_Utility.getFluidForFilledItem(aStack, false); - if ((tFluid != null) && (maxDrain >= tFluid.amount)) { - final ItemStack tStack = GT_Utility.getContainerItem(aStack, false); - if (tStack == null) { - aStack.stackSize = 0; - return tFluid; - } - aStack.setItemDamage(tStack.getItemDamage()); - aStack.func_150996_a(tStack.getItem()); - return tFluid; - } - - final Long[] tStats = this.getFluidContainerStats(aStack); - if ((tStats == null) || (tStats[0] <= 0)) { - return null; - } - - tFluid = this.getFluidContent(aStack); - if (tFluid == null) { - return null; - } - - int used = maxDrain; - if (tFluid.amount < used) { - used = tFluid.amount; - } - if (doDrain) { - tFluid.amount -= used; - this.setFluidContent(aStack, tFluid); - } - - final FluidStack drained = tFluid.copy(); - drained.amount = used; - return drained; - } - - public FluidStack getFluidContent(final ItemStack aStack) { - final Long[] tStats = this.getFluidContainerStats(aStack); - if ((tStats == null) || (tStats[0] <= 0)) { - return GT_Utility.getFluidForFilledItem(aStack, false); - } - final NBTTagCompound tNBT = aStack.getTagCompound(); - return tNBT == null ? null : FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("GT.FluidContent")); - } - - public void setFluidContent(final ItemStack aStack, final FluidStack aFluid) { - NBTTagCompound tNBT = aStack.getTagCompound(); - if (tNBT == null) { - tNBT = new NBTTagCompound(); - } else { - tNBT.removeTag("GT.FluidContent"); - } - if ((aFluid != null) && (aFluid.amount > 0)) { - tNBT.setTag("GT.FluidContent", aFluid.writeToNBT(new NBTTagCompound())); - } - if (tNBT.hasNoTags()) { - aStack.setTagCompound(null); - } else { - aStack.setTagCompound(tNBT); - } - this.isItemStackUsable(aStack); - } - - @Override - public int getItemStackLimit(final ItemStack aStack) { - Long[] tStats = this.getElectricStats(aStack); - if ((tStats != null) && ((tStats[3] == -1) || (tStats[3] == -3)) && (this.getRealCharge(aStack) > 0)) { - return 1; - } - tStats = this.getFluidContainerStats(aStack); - if (tStats != null) { - return (int) (long) tStats[1]; - } - return 64; - } - - @Override - public final Item getChargedItem(final ItemStack itemStack) { - return this; - } - - @Override - public final Item getEmptyItem(final ItemStack itemStack) { - return this; - } - - @Override - public final int getTier(final ItemStack aStack) { - final Long[] tStats = this.getElectricStats(aStack); - return (int) (tStats == null ? Integer.MAX_VALUE : tStats[2]); - } - - @Override - public final String getToolTip(final ItemStack aStack) { - return null; - } // This has its own ToolTip Handler, no need to let the IC2 Handler screw us up at this Point - - @Override - public final IElectricItemManager getManager(final ItemStack aStack) { - return this; - } // We are our own Manager - - @Override - public final boolean getShareTag() { - return true; - } // just to be sure. - - @Override - public int getItemEnchantability() { - return 0; - } - - @Override - public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) { - return false; - } - - @Override - public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) { - return false; - } - - @Override - public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) { - if (stack.getDisplayName() - .contains("LuV")) { - HEX_OxFFFFFF = 0xffffcc; - } else if (stack.getDisplayName() - .contains("ZPM")) { - HEX_OxFFFFFF = 0xace600; - } else if (stack.getDisplayName() - .contains("UV")) { - HEX_OxFFFFFF = 0xffff00; - } else if (stack.getDisplayName() - .contains("MAX")) { - HEX_OxFFFFFF = 0xff0000; - } else if (stack.getDisplayName() - .contains("Sodium")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(0, 0, 150); - } else if (stack.getDisplayName() - .contains("Cadmium")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(50, 50, 60); - } else if (stack.getDisplayName() - .contains("Lithium")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(225, 220, 255); - } else { - HEX_OxFFFFFF = 0xffffff; - } - return HEX_OxFFFFFF; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_X32.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_X32.java deleted file mode 100644 index c04acb9537..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaItem_X32.java +++ /dev/null @@ -1,266 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.items; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -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.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.core.util.math.MathUtils; - -/** - * @author Gregorius Techneticies - *

- * One Item for everything! - *

- * This brilliant Item Class is used for automatically generating all possible variations of Material Items, - * like Dusts, Ingots, Gems, Plates and similar. It saves me a ton of work, when adding Items, because I always - * have to make a new Item SubType for each OreDict Prefix, when adding a new Material. - *

- * As you can see, up to 32766 Items can be generated using this Class. And the last 766 Items can be custom - * defined, just to save space and MetaData. - *

- * These Items can also have special RightClick abilities, electric Charge or even be set to become a Food alike - * Item. - */ -public abstract class Gregtech_MetaItem_X32 extends Gregtech_MetaItem { - - protected final OrePrefixes[] mGeneratedPrefixList; - - /** - * Creates the Item using these Parameters. - * - * @param aUnlocalized The Unlocalized Name of this Item. - * @param aGeneratedPrefixList The OreDict Prefixes you want to have generated. - */ - public Gregtech_MetaItem_X32(final String aUnlocalized, final OrePrefixes... aGeneratedPrefixList) { - super(aUnlocalized, (short) 32000, (short) 766); - this.mGeneratedPrefixList = Arrays.copyOf(aGeneratedPrefixList, 32); - - for (int i = 0; i < 32000; i++) { - final OrePrefixes tPrefix = this.mGeneratedPrefixList[i / 1000]; - if (tPrefix == null) { - continue; - } - final Materials tMaterial = GregTech_API.sGeneratedMaterials[i % 1000]; - if (tMaterial == null) { - continue; - } - if (this.doesMaterialAllowGeneration(tPrefix, tMaterial)) { - final ItemStack tStack = new ItemStack(this, 1, i); - GT_LanguageManager.addStringLocalization( - this.getUnlocalizedName(tStack) + ".name", - this.getDefaultLocalization(tPrefix, tMaterial, i)); - GT_LanguageManager.addStringLocalization( - this.getUnlocalizedName(tStack) + ".tooltip", - tMaterial.getToolTip(tPrefix.mMaterialAmount / GT_Values.M)); - if (tPrefix.mIsUnificatable) { - GT_OreDictUnificator.set(tPrefix, tMaterial, tStack); - } else { - GT_OreDictUnificator.registerOre(tPrefix.get(tMaterial), tStack); - } - if (((tPrefix == OrePrefixes.stick) || (tPrefix == OrePrefixes.wireFine)) - && ((tMaterial == Materials.Lead) || (tMaterial == Materials.Tin) - || (tMaterial == Materials.SolderingAlloy))) { - GregTech_API.sSolderingMetalList.add(tStack); - } - } - } - } - - /* ---------- OVERRIDEABLE FUNCTIONS ---------- */ - - /** - * @return the Color Modulation the Material is going to be rendered with. - */ - @Override - public short[] getRGBa(final ItemStack aStack) { - final Materials tMaterial = GregTech_API.sGeneratedMaterials[this.getDamage(aStack) % 1000]; - return tMaterial == null ? Materials._NULL.mRGBa : tMaterial.mRGBa; - } - - /** - * @param aPrefix this can be null, you have to return false in that case - * @param aMaterial this can be null, you have to return false in that case - * @return if this Item should be generated and visible. - */ - public boolean doesMaterialAllowGeneration(final OrePrefixes aPrefix, final Materials aMaterial) { - // You have to check for at least these Conditions in every Case! So add a super Call like the following for - // this before executing your Code: - // if (!super.doesMaterialAllowGeneration(aPrefix, aMaterial)) return false; - return (aPrefix != null) && (aMaterial != null) && aPrefix.doGenerateItem(aMaterial); - } - - /* ---------- OVERRIDEABLE FUNCTIONS ---------- */ - - /** - * @param aPrefix the OreDict Prefix - * @param aMaterial the Material - * @param aMetaData a Index from [0 - 31999] - * @return the Localized Name when default LangFiles are used. - */ - public String getDefaultLocalization(final OrePrefixes aPrefix, final Materials aMaterial, final int aMetaData) { - return aPrefix.getDefaultLocalNameForItem(aMaterial); - } - - /** - * @param aMetaData a Index from [0 - 31999] - * @param aMaterial the Material - * @return an Icon Container for the Item Display. - */ - public final IIconContainer getIconContainer(final int aMetaData, final Materials aMaterial) { - return (this.mGeneratedPrefixList[aMetaData / 1000] != null) - && (this.mGeneratedPrefixList[aMetaData / 1000].mTextureIndex >= 0) - ? aMaterial.mIconSet.mTextures[this.mGeneratedPrefixList[aMetaData / 1000].mTextureIndex] - : null; - } - - /** - * @param aPrefix always != null - * @param aMaterial always != null - * @param aDoShowAllItems this is the Configuration Setting of the User, if he wants to see all the Stuff like Tiny - * Dusts or Crushed Ores as well. - * @return if this Item should be visible in NEI or Creative - */ - public boolean doesShowInCreative(final OrePrefixes aPrefix, final Materials aMaterial, - final boolean aDoShowAllItems) { - return true; - } - - /* ---------- INTERNAL OVERRIDES ---------- */ - - @Override - public ItemStack getContainerItem(final ItemStack aStack) { - final int aDamage = aStack.getItemDamage(); - if ((aDamage < 32000) && (aDamage >= 0)) { - final Materials aMaterial = GregTech_API.sGeneratedMaterials[aDamage % 1000]; - if ((aMaterial != null) && (aMaterial != Materials.Empty) && (aMaterial != Materials._NULL)) { - final OrePrefixes aPrefix = this.mGeneratedPrefixList[aDamage / 1000]; - if (aPrefix != null) { - return GT_Utility.copyAmount(1, aPrefix.mContainerItem); - } - } - } - return null; - } - - @Override - public final IIconContainer getIconContainer(final int aMetaData) { - return GregTech_API.sGeneratedMaterials[aMetaData % 1000] == null ? null - : this.getIconContainer(aMetaData, GregTech_API.sGeneratedMaterials[aMetaData % 1000]); - } - - @Override - @SideOnly(Side.CLIENT) - public final void getSubItems(final Item var1, final CreativeTabs aCreativeTab, final List aList) { - for (int i = 0; i < 32000; i++) { - if (this.doesMaterialAllowGeneration( - this.mGeneratedPrefixList[i / 1000], - GregTech_API.sGeneratedMaterials[i % 1000]) - && this.doesShowInCreative( - this.mGeneratedPrefixList[i / 1000], - GregTech_API.sGeneratedMaterials[i % 1000], - GregTech_API.sDoShowAllItemsInCreative)) { - final ItemStack tStack = new ItemStack(this, 1, i); - this.isItemStackUsable(tStack); - aList.add(tStack); - } - } - super.getSubItems(var1, aCreativeTab, aList); - } - - @Override - public final IIcon getIconFromDamage(final int aMetaData) { - if (aMetaData < 0) { - return null; - } - if (aMetaData < 32000) { - final Materials tMaterial = GregTech_API.sGeneratedMaterials[aMetaData % 1000]; - if (tMaterial == null) { - return null; - } - final IIconContainer tIcon = this.getIconContainer(aMetaData, tMaterial); - if (tIcon != null) { - return tIcon.getIcon(); - } - return null; - } - return (aMetaData - 32000) < this.mIconList.length ? this.mIconList[aMetaData - 32000][0] : null; - } - - @Override - public int getItemStackLimit(final ItemStack aStack) { - final int tDamage = this.getDamage(aStack); - if ((tDamage < 32000) && (this.mGeneratedPrefixList[tDamage / 1000] != null)) { - return Math - .min(super.getItemStackLimit(aStack), this.mGeneratedPrefixList[tDamage / 1000].mDefaultStackSize); - } - return super.getItemStackLimit(aStack); - } - - @Override - public int getColorFromItemStack(final ItemStack stack, int HEX_OxFFFFFF) { - - int aMeta = stack.getItemDamage(); - if (stack.getDisplayName() - .contains("Sodium")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(90, 90, 255); - } else if (stack.getDisplayName() - .contains("Cadmium")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(150, 150, 80); - } else if (stack.getDisplayName() - .contains("Lithium")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(225, 220, 255); - } else if (stack.getDisplayName() - .contains("Wrought")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(200, 180, 180); - } else if (stack.getDisplayName() - .contains("Bronze")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(255, 128, 0); - } else if (stack.getDisplayName() - .contains("Brass")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(255, 180, 0); - } else if (stack.getDisplayName() - .contains("Invar")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(180, 180, 120); - } else { - if (aMeta > 50 && aMeta != 150) { - HEX_OxFFFFFF = 0xffffff; - } else if (stack.getDisplayName() - .contains("ULV")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue(200, 180, 180); - } else if (stack.getDisplayName() - .contains("LuV")) { - HEX_OxFFFFFF = 0xffffcc; - } else if (stack.getDisplayName() - .contains("ZPM")) { - HEX_OxFFFFFF = 0xffe600; - } else if (stack.getDisplayName() - .contains("UV")) { - HEX_OxFFFFFF = 0xffb300; - } else if (stack.getDisplayName() - .contains("MAX")) { - HEX_OxFFFFFF = Utils.rgbtoHexValue( - MathUtils.randInt(220, 250), - MathUtils.randInt(221, 251), - MathUtils.randInt(220, 250)); - } else { - HEX_OxFFFFFF = 0xffffff; - } - } - return HEX_OxFFFFFF; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaTool.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaTool.java deleted file mode 100644 index fcfa5fae50..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/items/Gregtech_MetaTool.java +++ /dev/null @@ -1,692 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.items; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map.Entry; - -import net.minecraft.block.Block; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.item.EntityMinecart; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.potion.Potion; -import net.minecraft.stats.AchievementList; -import net.minecraft.stats.StatList; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MathHelper; -import net.minecraft.world.World; -import net.minecraftforge.event.world.BlockEvent; - -import buildcraft.api.tools.IToolWrench; -import cpw.mods.fml.common.Optional; -import gregtech.api.enchants.Enchantment_Radioactivity; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Mods; -import gregtech.api.interfaces.IDamagableItem; -import gregtech.api.interfaces.IToolStats; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.xmod.gregtech.api.interfaces.internal.Interface_ToolStats; -import mods.railcraft.api.core.items.IToolCrowbar; - -/** - * This is an example on how you can create a Tool ItemStack, in this case a Bismuth Wrench: - * GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01").getToolWithStats(16, 1, Materials.Bismuth, Materials.Bismuth, - * null); - */ -@Optional.InterfaceList({ - @Optional.Interface(iface = "forestry.api.arboriculture.IToolGrafter", modid = Mods.Names.FORESTRY), - @Optional.Interface(iface = "mods.railcraft.api.core.items.IToolCrowbar", modid = Mods.Names.RAILCRAFT), - @Optional.Interface(iface = "buildcraft.api.tools.IToolWrench", modid = "BuildCraft"), - @Optional.Interface(iface = "crazypants.enderio.api.tool.ITool", modid = Mods.Names.ENDER_I_O) }) -public abstract class Gregtech_MetaTool extends GT_MetaGenerated_Tool - implements IDamagableItem, IToolCrowbar, IToolWrench { - - /** - * All instances of this Item Class are listed here. This gets used to register the Renderer to all Items of this - * Type, if useStandardMetaItemRenderer() returns true. - *

- * You can also use the unlocalized Name gotten from getUnlocalizedName() as Key if you want to get a specific Item. - */ - public static final HashMap sInstances = new HashMap<>(); - - /* ---------- CONSTRUCTOR AND MEMBER VARIABLES ---------- */ - - public final HashMap mToolStats = new HashMap<>(); - - /** - * Creates the Item using these Parameters. - * - * @param aUnlocalized The Unlocalized Name of this Item. - */ - public Gregtech_MetaTool(final String aUnlocalized) { - super(aUnlocalized); - GT_ModHandler.registerBoxableItemToToolBox(new ItemStack(this)); - this.setCreativeTab(AddToCreativeTab.tabMachines); - this.setMaxStackSize(1); - sInstances.put(this.getUnlocalizedName(), this); - } - - /** - * Called by the Block Harvesting Event within the GT_Proxy - */ - @Override - public void onHarvestBlockEvent(final ArrayList aDrops, final ItemStack aStack, - final EntityPlayer aPlayer, final Block aBlock, final int aX, final int aY, final int aZ, final byte aMetaData, - final int aFortune, final boolean aSilkTouch, final BlockEvent.HarvestDropsEvent aEvent) { - final IToolStats tStats = this.getToolStats(aStack); - if (this.isItemStackUsable(aStack) && (this.getDigSpeed(aStack, aBlock, aMetaData) > 0.0F)) { - this.doDamage( - aStack, - tStats.convertBlockDrops( - aDrops, - aStack, - aPlayer, - aBlock, - aX, - aY, - aZ, - aMetaData, - aFortune, - aSilkTouch, - aEvent) * tStats.getToolDamagePerDropConversion()); - } - } - - @Override - public boolean onLeftClickEntity(final ItemStack aStack, final EntityPlayer aPlayer, final Entity aEntity) { - final IToolStats tStats = this.getToolStats(aStack); - if ((tStats == null) || !this.isItemStackUsable(aStack)) { - return true; - } - GT_Utility.doSoundAtClient(tStats.getEntityHitSound(), 1, 1.0F); - if (super.onLeftClickEntity(aStack, aPlayer, aEntity)) { - return true; - } - if (aEntity.canAttackWithItem() && !aEntity.hitByEntity(aPlayer)) { - final float tMagicDamage = tStats.getMagicDamageAgainstEntity( - aEntity instanceof EntityLivingBase - ? EnchantmentHelper.getEnchantmentModifierLiving(aPlayer, (EntityLivingBase) aEntity) - : 0.0F, - aEntity, - aStack, - aPlayer); - float tDamage = tStats.getNormalDamageAgainstEntity( - (float) aPlayer.getEntityAttribute(SharedMonsterAttributes.attackDamage) - .getAttributeValue() + this.getToolCombatDamage(aStack), - aEntity, - aStack, - aPlayer); - if ((tDamage + tMagicDamage) > 0.0F) { - final boolean tCriticalHit = (aPlayer.fallDistance > 0.0F) && !aPlayer.onGround - && !aPlayer.isOnLadder() - && !aPlayer.isInWater() - && !aPlayer.isPotionActive(Potion.blindness) - && (aPlayer.ridingEntity == null) - && (aEntity instanceof EntityLivingBase); - if (tCriticalHit && (tDamage > 0.0F)) { - tDamage *= 1.5F; - } - tDamage += tMagicDamage; - if (aEntity.attackEntityFrom(tStats.getDamageSource(aPlayer, aEntity), tDamage)) { - if (aEntity instanceof EntityLivingBase) { - aEntity.setFire(EnchantmentHelper.getFireAspectModifier(aPlayer) * 4); - } - final int tKnockcack = (aPlayer.isSprinting() ? 1 : 0) + (aEntity instanceof EntityLivingBase - ? EnchantmentHelper.getKnockbackModifier(aPlayer, (EntityLivingBase) aEntity) - : 0); - if (tKnockcack > 0) { - aEntity.addVelocity( - -MathHelper.sin((aPlayer.rotationYaw * (float) Math.PI) / 180.0F) * tKnockcack * 0.5F, - 0.1D, - MathHelper.cos((aPlayer.rotationYaw * (float) Math.PI) / 180.0F) * tKnockcack * 0.5F); - aPlayer.motionX *= 0.6D; - aPlayer.motionZ *= 0.6D; - aPlayer.setSprinting(false); - } - if (tCriticalHit) { - aPlayer.onCriticalHit(aEntity); - } - if (tMagicDamage > 0.0F) { - aPlayer.onEnchantmentCritical(aEntity); - } - if (tDamage >= 18.0F) { - aPlayer.triggerAchievement(AchievementList.overkill); - } - aPlayer.setLastAttacker(aEntity); - if (aEntity instanceof EntityLivingBase) { - EnchantmentHelper.func_151384_a((EntityLivingBase) aEntity, aPlayer); - } - EnchantmentHelper.func_151385_b(aPlayer, aEntity); - if (aEntity instanceof EntityLivingBase) { - aPlayer.addStat(StatList.damageDealtStat, Math.round(tDamage * 10.0F)); - } - aEntity.hurtResistantTime = Math - .max(1, tStats.getHurtResistanceTime(aEntity.hurtResistantTime, aEntity)); - aPlayer.addExhaustion(0.3F); - this.doDamage(aStack, tStats.getToolDamagePerEntityAttack()); - } - } - } - if (aStack.stackSize <= 0) { - aPlayer.destroyCurrentEquippedItem(); - } - return true; - } - - @Override - public ItemStack onItemRightClick(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { - final IToolStats tStats = this.getToolStats(aStack); - if ((tStats != null) && tStats.canBlock()) { - aPlayer.setItemInUse(aStack, 72000); - } - return super.onItemRightClick(aStack, aWorld, aPlayer); - } - - @SuppressWarnings("unchecked") - public void addAdditionalToolTips(final List aList, final ItemStack aStack) { - final long tMaxDamage = getToolMaxDamage(aStack); - final Materials tMaterial = getPrimaryMaterial(aStack); - final IToolStats tStats = this.getToolStats(aStack); - final int tOffset = this.getElectricStats(aStack) != null ? 2 : 1; - if (tStats != null) { - final String name = aStack.getUnlocalizedName(); - if (name.equals("gt.metatool.01.170") || name.equals("gt.metatool.01.172") - || name.equals("gt.metatool.01.174") - || name.equals("gt.metatool.01.176")) { - aList.add( - tOffset + 0, - EnumChatFormatting.WHITE + "Durability: " - + EnumChatFormatting.GREEN - + (tMaxDamage - getToolDamage(aStack)) - + " / " - + tMaxDamage - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 1, - EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName - + EnumChatFormatting.YELLOW - + " lvl " - + this.getHarvestLevel(aStack, "") - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 2, - EnumChatFormatting.WHITE + "Turbine Efficency: " - + EnumChatFormatting.BLUE - + (50.0F + (10.0F * this.getToolCombatDamage(aStack))) - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 3, - EnumChatFormatting.WHITE + "Optimal Steam flow: " - + EnumChatFormatting.LIGHT_PURPLE - + Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) - + EnumChatFormatting.GRAY - + "L/sec"); - aList.add( - tOffset + 3, - EnumChatFormatting.WHITE + "Optimal Gas flow(EU burnvalue per tick): " - + EnumChatFormatting.LIGHT_PURPLE - + Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 25) - + EnumChatFormatting.GRAY - + "EU/t"); - aList.add( - tOffset + 3, - EnumChatFormatting.WHITE + "Optimal Plasma flow(Plasma energyvalue per tick): " - + EnumChatFormatting.LIGHT_PURPLE - + Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) - + EnumChatFormatting.GRAY - + "EU/t"); - - } else { - aList.add( - tOffset + 0, - EnumChatFormatting.WHITE + "Durability: " - + EnumChatFormatting.GREEN - + (tMaxDamage - getToolDamage(aStack)) - + " / " - + tMaxDamage - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 1, - EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName - + EnumChatFormatting.YELLOW - + " lvl " - + this.getHarvestLevel(aStack, "") - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 2, - EnumChatFormatting.WHITE + "Attack Damage: " - + EnumChatFormatting.BLUE - + this.getToolCombatDamage(aStack) - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 3, - EnumChatFormatting.WHITE + "Mining Speed: " - + EnumChatFormatting.LIGHT_PURPLE - + Math - .max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) - + EnumChatFormatting.GRAY); - } - } - } - - @Override - @SuppressWarnings("unchecked") - public void addAdditionalToolTips(final List aList, final ItemStack aStack, final EntityPlayer aPlayer) { - final long tMaxDamage = getToolMaxDamage(aStack); - final Materials tMaterial = getPrimaryMaterial(aStack); - final IToolStats tStats = this.getToolStats(aStack); - final int tOffset = this.getElectricStats(aStack) != null ? 2 : 1; - if (tStats != null) { - final String name = aStack.getUnlocalizedName(); - if (name.equals("gt.metatool.01.170") || name.equals("gt.metatool.01.172") - || name.equals("gt.metatool.01.174") - || name.equals("gt.metatool.01.176")) { - aList.add( - tOffset + 0, - EnumChatFormatting.WHITE + "Durability: " - + EnumChatFormatting.GREEN - + (tMaxDamage - getToolDamage(aStack)) - + " / " - + tMaxDamage - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 1, - EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName - + EnumChatFormatting.YELLOW - + " lvl " - + this.getHarvestLevel(aStack, "") - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 2, - EnumChatFormatting.WHITE + "Turbine Efficency: " - + EnumChatFormatting.BLUE - + (50.0F + (10.0F * this.getToolCombatDamage(aStack))) - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 3, - EnumChatFormatting.WHITE + "Optimal Steam flow: " - + EnumChatFormatting.LIGHT_PURPLE - + Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) - + EnumChatFormatting.GRAY - + "L/sec"); - aList.add( - tOffset + 3, - EnumChatFormatting.WHITE + "Optimal Gas flow(EU burnvalue per tick): " - + EnumChatFormatting.LIGHT_PURPLE - + Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 50) - + EnumChatFormatting.GRAY - + "EU/t"); - aList.add( - tOffset + 3, - EnumChatFormatting.WHITE + "Optimal Plasma flow(Plasma energyvalue per tick): " - + EnumChatFormatting.LIGHT_PURPLE - + Math.max( - Float.MIN_NORMAL, - tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed * 1000) - + EnumChatFormatting.GRAY - + "EU/t"); - - } else { - aList.add( - tOffset + 0, - EnumChatFormatting.WHITE + "Durability: " - + EnumChatFormatting.GREEN - + (tMaxDamage - getToolDamage(aStack)) - + " / " - + tMaxDamage - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 1, - EnumChatFormatting.WHITE + tMaterial.mDefaultLocalName - + EnumChatFormatting.YELLOW - + " lvl " - + this.getHarvestLevel(aStack, "") - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 2, - EnumChatFormatting.WHITE + "Attack Damage: " - + EnumChatFormatting.BLUE - + this.getToolCombatDamage(aStack) - + EnumChatFormatting.GRAY); - aList.add( - tOffset + 3, - EnumChatFormatting.WHITE + "Mining Speed: " - + EnumChatFormatting.LIGHT_PURPLE - + Math - .max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) - + EnumChatFormatting.GRAY); - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if ((aNBT != null) && aNBT.hasKey("Heat")) { - int tHeat = aNBT.getInteger("Heat"); - final long tWorldTime = aPlayer.getEntityWorld() - .getWorldTime(); - if (aNBT.hasKey("HeatTime")) { - final long tHeatTime = aNBT.getLong("HeatTime"); - if (tWorldTime > (tHeatTime + 10)) { - tHeat = (int) (tHeat - ((tWorldTime - tHeatTime) / 10)); - if ((tHeat < 300) && (tHeat > -10000)) { - tHeat = 300; - } - } - aNBT.setLong("HeatTime", tWorldTime); - if (tHeat > -10000) { - aNBT.setInteger("Heat", tHeat); - } - } - - aList.add( - tOffset + 3, - EnumChatFormatting.RED + "Heat: " - + aNBT.getInteger("Heat") - + " K" - + EnumChatFormatting.GRAY); - } - } - } - } - } - - @Override - public Long[] getFluidContainerStats(final ItemStack aStack) { - return null; - } - - @Override - public Long[] getElectricStats(final ItemStack aStack) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("GT.ToolStats"); - if ((aNBT != null) && aNBT.getBoolean("Electric")) { - return new Long[] { aNBT.getLong("MaxCharge"), aNBT.getLong("Voltage"), aNBT.getLong("Tier"), - aNBT.getLong("SpecialData") }; - } - } - return new Long[] {}; - } - - @Override - public float getToolCombatDamage(final ItemStack aStack) { - final IToolStats tStats = this.getToolStats(aStack); - if (tStats == null) { - return 0; - } - return tStats.getBaseDamage() + getPrimaryMaterial(aStack).mToolQuality; - } - - @Override - public float getDigSpeed(final ItemStack aStack, final Block aBlock, final int aMetaData) { - if (!this.isItemStackUsable(aStack)) { - return 0.0F; - } - final IToolStats tStats = this.getToolStats(aStack); - if ((tStats == null) || (Math.max(0, this.getHarvestLevel(aStack, "")) < aBlock.getHarvestLevel(aMetaData))) { - return 0.0F; - } - return tStats.isMinableBlock(aBlock, (byte) aMetaData) - ? Math.max(Float.MIN_NORMAL, tStats.getSpeedMultiplier() * getPrimaryMaterial(aStack).mToolSpeed) - : 0.0F; - } - - @Override - public boolean onBlockDestroyed(final ItemStack aStack, final World aWorld, final Block aBlock, final int aX, - final int aY, final int aZ, final EntityLivingBase aPlayer) { - if (!this.isItemStackUsable(aStack)) { - return false; - } - final IToolStats tStats = this.getToolStats(aStack); - if (tStats == null) { - return false; - } - GT_Utility.doSoundAtClient(tStats.getMiningSound(), 1, 1.0F); - this.doDamage( - aStack, - (int) Math.max(1, aBlock.getBlockHardness(aWorld, aX, aY, aZ) * tStats.getToolDamagePerBlockBreak())); - return this.getDigSpeed(aStack, aBlock, aWorld.getBlockMetadata(aX, aY, aZ)) > 0.0F; - } - - private ItemStack getContainerItem(ItemStack aStack, final boolean playSound) { - if (!this.isItemStackUsable(aStack)) { - return null; - } - aStack = GT_Utility.copyAmount(1, aStack); - final IToolStats tStats = this.getToolStats(aStack); - if (tStats == null) { - return null; - } - this.doDamage(aStack, tStats.getToolDamagePerContainerCraft()); - aStack = aStack.stackSize > 0 ? aStack : null; - if (playSound) {} - return aStack; - } - - @Override - public Interface_ToolStats getToolStats(final ItemStack aStack) { - this.isItemStackUsable(aStack); - return this.getToolStatsInternal(aStack); - } - - private Interface_ToolStats getToolStatsInternal(final ItemStack aStack) { - return (Interface_ToolStats) (aStack == null ? null : this.mToolStats.get((short) aStack.getItemDamage())); - } - - @Override - public boolean canWhack(final EntityPlayer aPlayer, final ItemStack aStack, final int aX, final int aY, - final int aZ) { - if (!this.isItemStackUsable(aStack)) { - return false; - } - final IToolStats tStats = this.getToolStats(aStack); - return (tStats != null) && tStats.isCrowbar(); - } - - @Override - public void onWhack(final EntityPlayer aPlayer, final ItemStack aStack, final int aX, final int aY, final int aZ) { - final IToolStats tStats = this.getToolStats(aStack); - if (tStats != null) { - this.doDamage(aStack, tStats.getToolDamagePerEntityAttack()); - } - } - - @Override - public boolean canWrench(final EntityPlayer player, final int x, final int y, final int z) { - // System.out.println("canWrench"); - if (player == null) { - return false; - } - if (player.getCurrentEquippedItem() == null) { - return false; - } - if (!this.isItemStackUsable(player.getCurrentEquippedItem())) { - return false; - } - final Interface_ToolStats tStats = this.getToolStats(player.getCurrentEquippedItem()); - return (tStats != null) && tStats.isWrench(); - } - - @Override - public void wrenchUsed(final EntityPlayer player, final int x, final int y, final int z) { - if (player == null) { - return; - } - if (player.getCurrentEquippedItem() == null) { - return; - } - final IToolStats tStats = this.getToolStats(player.getCurrentEquippedItem()); - if (tStats != null) { - this.doDamage(player.getCurrentEquippedItem(), tStats.getToolDamagePerEntityAttack()); - } - } - - @Override - public boolean canLink(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) { - if (!this.isItemStackUsable(aStack)) { - return false; - } - final IToolStats tStats = this.getToolStats(aStack); - return (tStats != null) && tStats.isCrowbar(); - } - - @Override - public void onLink(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) { - final IToolStats tStats = this.getToolStats(aStack); - if (tStats != null) { - this.doDamage(aStack, tStats.getToolDamagePerEntityAttack()); - } - } - - @Override - public boolean canBoost(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) { - if (!this.isItemStackUsable(aStack)) { - return false; - } - final IToolStats tStats = this.getToolStats(aStack); - return (tStats != null) && tStats.isCrowbar(); - } - - @Override - public void onBoost(final EntityPlayer aPlayer, final ItemStack aStack, final EntityMinecart cart) { - final IToolStats tStats = this.getToolStats(aStack); - if (tStats != null) { - this.doDamage(aStack, tStats.getToolDamagePerEntityAttack()); - } - } - - @Override - public void onCreated(final ItemStack aStack, final World aWorld, final EntityPlayer aPlayer) { - final IToolStats tStats = this.getToolStats(aStack); - if ((tStats != null) && (aPlayer != null)) { - tStats.onToolCrafted(aStack, aPlayer); - } - super.onCreated(aStack, aWorld, aPlayer); - } - - @Override - public boolean isFull3D() { - return true; - } - - @Override - public boolean isItemStackUsable(final ItemStack aStack) { - final IToolStats tStats = this.getToolStatsInternal(aStack); - if (((aStack.getItemDamage() % 2) == 1) || (tStats == null)) { - final NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT.removeTag("ench"); - } - return false; - } - final Materials aMaterial = getPrimaryMaterial(aStack); - final HashMap tMap = new HashMap<>(), tResult = new HashMap<>(); - if (aMaterial.mEnchantmentTools != null) { - tMap.put(aMaterial.mEnchantmentTools.effectId, (int) aMaterial.mEnchantmentToolsLevel); - if (aMaterial.mEnchantmentTools == Enchantment.fortune) { - tMap.put(Enchantment.looting.effectId, (int) aMaterial.mEnchantmentToolsLevel); - } - if (aMaterial.mEnchantmentTools == Enchantment.knockback) { - tMap.put(Enchantment.power.effectId, (int) aMaterial.mEnchantmentToolsLevel); - } - if (aMaterial.mEnchantmentTools == Enchantment.fireAspect) { - tMap.put(Enchantment.flame.effectId, (int) aMaterial.mEnchantmentToolsLevel); - } - } - final Enchantment[] tEnchants = tStats.getEnchantments(aStack); - final int[] tLevels = tStats.getEnchantmentLevels(aStack); - for (int i = 0; i < tEnchants.length; i++) { - if (tLevels[i] > 0) { - final Integer tLevel = tMap.get(tEnchants[i].effectId); - tMap.put( - tEnchants[i].effectId, - tLevel == null ? tLevels[i] : tLevel == tLevels[i] ? tLevel + 1 : Math.max(tLevel, tLevels[i])); - } - } - for (final Entry tEntry : tMap.entrySet()) { - if ((tEntry.getKey() == 33) || ((tEntry.getKey() == 20) && (tEntry.getValue() > 2)) - || (tEntry.getKey() == Enchantment_Radioactivity.INSTANCE.effectId)) { - tResult.put(tEntry.getKey(), tEntry.getValue()); - } else { - switch (Enchantment.enchantmentsList[tEntry.getKey()].type) { - case weapon: - if (tStats.isWeapon()) { - tResult.put(tEntry.getKey(), tEntry.getValue()); - } - break; - case all: - tResult.put(tEntry.getKey(), tEntry.getValue()); - break; - case armor: - case armor_feet: - case armor_head: - case armor_legs: - case armor_torso: - break; - case bow: - if (tStats.isRangedWeapon()) { - tResult.put(tEntry.getKey(), tEntry.getValue()); - } - break; - case breakable: - break; - case fishing_rod: - break; - case digger: - if (tStats.isMiningTool()) { - tResult.put(tEntry.getKey(), tEntry.getValue()); - } - break; - } - } - } - EnchantmentHelper.setEnchantments(tResult, aStack); - return true; - } - - @Override - public short getChargedMetaData(final ItemStack aStack) { - return (short) (aStack.getItemDamage() - (aStack.getItemDamage() % 2)); - } - - @Override - public short getEmptyMetaData(final ItemStack aStack) { - final NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT.removeTag("ench"); - } - return (short) ((aStack.getItemDamage() + 1) - (aStack.getItemDamage() % 2)); - } - - @Override - public int getItemEnchantability() { - return 0; - } - - @Override - public boolean isBookEnchantable(final ItemStack aStack, final ItemStack aBook) { - return false; - } - - @Override - public boolean getIsRepairable(final ItemStack aStack, final ItemStack aMaterial) { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GTPPMTECable.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GTPPMTECable.java new file mode 100644 index 0000000000..9025dad232 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GTPPMTECable.java @@ -0,0 +1,154 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TextureSet; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.metatileentity.IMetaTileEntityCable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTECable; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTUtility; + +public class GTPPMTECable extends MTECable implements IMetaTileEntityCable { + + private static Textures.BlockIcons INSULATION_MEDIUM_PLUS; + + static { + try { + INSULATION_MEDIUM_PLUS = (Textures.BlockIcons) GTUtility + .getField(Textures.BlockIcons.class, "INSULATION_MEDIUM_PLUS") + .get(null); + } catch (IllegalAccessException | NullPointerException e) { + throw new Error(e); + } + } + + private short[] vRGB = null; + + public GTPPMTECable(final int aID, final String aName, final String aNameRegional, final float aThickNess, + final Materials aMaterial, final long aCableLossPerMeter, final long aAmperage, final long aVoltage, + final boolean aInsulated, final boolean aCanShock, final short[] aRGB) { + super( + aID, + aName, + aNameRegional, + aThickNess, + aMaterial, + aCableLossPerMeter, + aAmperage, + aVoltage, + aInsulated, + aCanShock); + this.vRGB = aRGB == null || aRGB.length != 4 ? Materials.Iron.mRGBa : aRGB; + } + + public GTPPMTECable(final String aName, final float aThickNess, final Materials aMaterial, + final long aCableLossPerMeter, final long aAmperage, final long aVoltage, final boolean aInsulated, + final boolean aCanShock, final short[] aRGB) { + super(aName, aThickNess, aMaterial, aCableLossPerMeter, aAmperage, aVoltage, aInsulated, aCanShock); + this.vRGB = aRGB == null || aRGB.length != 4 ? Materials.Iron.mRGBa : aRGB; + } + + public GTPPMTECable(final int aID, final String aName, final String aNameRegional, final float aThickNess, + final long aCableLossPerMeter, final long aAmperage, final long aVoltage, final boolean aInsulated, + final boolean aCanShock, final short[] aRGB) { + this( + aID, + aName, + aNameRegional, + aThickNess, + null, + aCableLossPerMeter, + aAmperage, + aVoltage, + aInsulated, + aCanShock, + aRGB); + } + + public GTPPMTECable(final String aName, final float aThickNess, final long aCableLossPerMeter, final long aAmperage, + final long aVoltage, final boolean aInsulated, final boolean aCanShock, final short[] aRGB) { + this(aName, aThickNess, null, aCableLossPerMeter, aAmperage, aVoltage, aInsulated, aCanShock, aRGB); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new GTPPMTECable( + this.mName, + this.mThickNess, + this.mMaterial, + this.mCableLossPerMeter, + this.mAmperage, + this.mVoltage, + this.mInsulated, + this.mCanShock, + this.vRGB); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, + int aColorIndex, boolean aConnected, boolean aRedstone) { + return getTextureGTNH(aBaseMetaTileEntity, side, aConnections, aColorIndex, aConnected, aRedstone); + } + + private ITexture[] getTextureGTNH(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection aSide, int aConnections, + int aColorIndex, boolean aConnected, boolean aRedstone) { + + Materials wireMaterial = mMaterial; + if (wireMaterial == null) { + wireMaterial = Materials.Iron; + } + + if (!mInsulated) return new ITexture[] { new GTRenderedTexture( + wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], + Dyes.getModulation(aColorIndex, vRGB)) }; + if (aConnected) { + float tThickNess = getThickNess(); + if (tThickNess < 0.124F) return new ITexture[] { new GTRenderedTexture( + Textures.BlockIcons.INSULATION_FULL, + Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + if (tThickNess < 0.374F) // 0.375 x1 + return new ITexture[] { + new GTRenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), + new GTRenderedTexture( + Textures.BlockIcons.INSULATION_TINY, + Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + if (tThickNess < 0.499F) // 0.500 x2 + return new ITexture[] { + new GTRenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), + new GTRenderedTexture( + Textures.BlockIcons.INSULATION_SMALL, + Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + if (tThickNess < 0.624F) // 0.625 x4 + return new ITexture[] { + new GTRenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), + new GTRenderedTexture( + Textures.BlockIcons.INSULATION_MEDIUM, + Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + if (tThickNess < 0.749F) // 0.750 x8 + return new ITexture[] { + new GTRenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), + new GTRenderedTexture( + INSULATION_MEDIUM_PLUS, + Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + if (tThickNess < 0.874F) // 0.825 x12 + return new ITexture[] { + new GTRenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), + new GTRenderedTexture( + Textures.BlockIcons.INSULATION_LARGE, + Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + return new ITexture[] { new GTRenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), + new GTRenderedTexture( + Textures.BlockIcons.INSULATION_HUGE, + Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + } + return new ITexture[] { new GTRenderedTexture( + Textures.BlockIcons.INSULATION_FULL, + Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GTPPMTEFluid.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GTPPMTEFluid.java new file mode 100644 index 0000000000..550e5e409c --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GTPPMTEFluid.java @@ -0,0 +1,117 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SubTag; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEFluid; +import gregtech.api.render.TextureFactory; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; + +public class GTPPMTEFluid extends MTEFluid { + + public final GT_Materials mMaterial; + + public GTPPMTEFluid(int aID, String aName, String aNameRegional, float aThickNess, GT_Materials aMaterial, + int aCapacity, int aHeatResistance, boolean aGasProof) { + this(aID, aName, aNameRegional, aThickNess, aMaterial, aCapacity, aHeatResistance, aGasProof, 1); + } + + public GTPPMTEFluid(final String aName, final float aThickNess, final GT_Materials aMaterial, final int aCapacity, + final int aHeatResistance, final boolean aGasProof) { + this(aName, aThickNess, aMaterial, aCapacity, aHeatResistance, aGasProof, 1); + } + + public GTPPMTEFluid(int aID, String aName, String aNameRegional, float aThickNess, GT_Materials aMaterial, + int aCapacity, int aHeatResistance, boolean aGasProof, int aFluidTypes) { + super(aID, aName, aNameRegional, aThickNess, null, aCapacity, aHeatResistance, aGasProof, aFluidTypes); + this.mLastReceivedFrom = 0; + this.oLastReceivedFrom = 0; + this.mMaterial = aMaterial; + } + + public GTPPMTEFluid(String aName, float aThickNess, GT_Materials aMaterial, int aCapacity, int aHeatResistance, + boolean aGasProof, int aFluidTypes) { + super(aName, aThickNess, null, aCapacity, aHeatResistance, aGasProof, aFluidTypes); + this.mLastReceivedFrom = 0; + this.oLastReceivedFrom = 0; + this.mMaterial = aMaterial; + } + + @Override + public byte getTileEntityBaseType() { + return this.mMaterial == null ? 4 + : (byte) ((this.mMaterial.contains(SubTag.WOOD) ? 12 : 4) + + Math.max(0, Math.min(3, this.mMaterial.mToolQuality))); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new GTPPMTEFluid( + this.mName, + this.mThickNess, + this.mMaterial, + this.mCapacity, + this.mHeatResistance, + this.mGasProof); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, + int aColorIndex, boolean aConnected, boolean aRedstone) { + float tThickNess = getThickNess(); + if (mDisableInput == 0) + return new ITexture[] { aConnected ? getBaseTexture(tThickNess, mPipeAmount, mMaterial, aColorIndex) + : TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; + int tMask = 0; + int[][] sRestrictionArray = { { 2, 3, 5, 4 }, { 2, 3, 5, 4 }, { 1, 0, 5, 4 }, { 1, 0, 4, 5 }, { 1, 0, 2, 3 }, + { 1, 0, 2, 3 } }; + if (side != ForgeDirection.UNKNOWN) { + for (int i = 0; i < 4; i++) + if (isInputDisabledAtSide(ForgeDirection.getOrientation(sRestrictionArray[side.ordinal()][i]))) + tMask |= 1 << i; + // Full block size renderer flips side 5 and 2 textures, flip restrictor textures to compensate + if (side == ForgeDirection.EAST || side == ForgeDirection.UP) + if (tMask > 3 && tMask < 12) tMask = (tMask ^ 12); + } + return new ITexture[] { aConnected ? getBaseTexture(tThickNess, mPipeAmount, mMaterial, aColorIndex) + : TextureFactory.of( + mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], + Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), + getRestrictorTexture(tMask) }; + } + + protected static ITexture getBaseTexture(float aThickNess, int aPipeAmount, GT_Materials aMaterial, + int aColorIndex) { + if (aPipeAmount >= 9) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeNonuple.mTextureIndex], + Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); + if (aPipeAmount >= 4) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeQuadruple.mTextureIndex], + Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); + if (aThickNess < 0.124F) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], + Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); + if (aThickNess < 0.374F) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeTiny.mTextureIndex], + Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); + if (aThickNess < 0.499F) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeSmall.mTextureIndex], + Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); + if (aThickNess < 0.749F) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeMedium.mTextureIndex], + Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); + if (aThickNess < 0.874F) return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeLarge.mTextureIndex], + Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); + return TextureFactory.of( + aMaterial.mIconSet.mTextures[OrePrefixes.pipeHuge.mTextureIndex], + Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ChiselBus.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ChiselBus.java deleted file mode 100644 index 3009c80c80..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_ChiselBus.java +++ /dev/null @@ -1,78 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import net.minecraft.util.EnumChatFormatting; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.Scrollable; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; - -public class GT_MetaTileEntity_ChiselBus extends GT_MetaTileEntity_Hatch_InputBus implements IAddUIWidgets { - - public GT_MetaTileEntity_ChiselBus(int id, String name, String nameRegional, int tier) { - super(id, name, nameRegional, tier); - } - - public GT_MetaTileEntity_ChiselBus(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, getSlots(aTier), aDescription, aTextures); - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex < getSlots(this.mTier); - } - - public static int getSlots(int aTier) { - return (1 + aTier) * 16 + 1; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ChiselBus(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public boolean allowSelectCircuit() { - return false; - } - - @Override - public String[] getDescription() { - return new String[] { "Item Input Bus for Industrial Chisel", getSlots(this.mTier) - 1 + " + 1 " + " Slots", - "Added by: " + EnumChatFormatting.AQUA - + "Quetz4l" - + " - " - + EnumChatFormatting.RED - + "[GT++]" - + EnumChatFormatting.RESET }; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - int slotIndex = 0; - final Scrollable scrollable = new Scrollable().setVerticalScroll(); - for (int row = 0; row * 4 < inventoryHandler.getSlots() - 1; row++) { - int columnsToMake = Math.min(inventoryHandler.getSlots() - row * 4, 4); - for (int column = 0; column < columnsToMake; column++) { - scrollable.widget( - new SlotWidget(inventoryHandler, slotIndex++).setPos(column * 18, row * 18) - .setSize(18, 18)); - - } - } - - builder.widget( - scrollable.setSize(18 * 4 + 4, 18 * 4) - .setPos(52, 7)); // main slots - builder.widget( - new SlotWidget(inventoryHandler, slotIndex).setPos(18, 18) - .setSize(18, 18)); // slot for target - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake.java deleted file mode 100644 index bab504910e..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake.java +++ /dev/null @@ -1,128 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.FluidUtils; - -public class GT_MetaTileEntity_Hatch_AirIntake extends GT_MetaTileEntity_Hatch_FluidGenerator { - - public GT_MetaTileEntity_Hatch_AirIntake(final int aID, final String aName, final String aNameRegional, - final int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_Hatch_AirIntake(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_AirIntake(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public String[] getCustomTooltip() { - String[] aTooltip = new String[3]; - aTooltip[0] = "DO NOT OBSTRUCT THE INPUT!"; - aTooltip[1] = "Draws in Air from the surrounding environment"; - aTooltip[2] = "Creates " + getAmountOfFluidToGenerate() + "L of Air every " + getMaxTickTime() + " ticks"; - return aTooltip; - } - - @Override - public Fluid getFluidToGenerate() { - return FluidUtils.getAir(1) - .getFluid(); - } - - @Override - public int getAmountOfFluidToGenerate() { - return 1000; - } - - @Override - public int getMaxTickTime() { - return 4; - } - - @Override - public int getCapacity() { - return 128000; - } - - @Override - public boolean doesHatchMeetConditionsToGenerate() { - return this.getBaseMetaTileEntity() - .getAirAtSide( - this.getBaseMetaTileEntity() - .getFrontFacing()); - } - - @Override - public void generateParticles(World aWorld, String name) { - if (this.getBaseMetaTileEntity() - .isServerSide()) { - return; - } - final float ran1 = GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat(); - float ran2 = 0.0f; - float ran3 = 0.0f; - ran2 = GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat(); - ran3 = GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat(); - - final IGregTechTileEntity aMuffler = this.getBaseMetaTileEntity(); - final ForgeDirection aDir = aMuffler.getFrontFacing(); - final float xPos = aDir.offsetX * 0.76f + aMuffler.getXCoord() + 0.25f; - float yPos = aDir.offsetY * 0.76f + aMuffler.getYCoord() + 0.65f; - final float zPos = aDir.offsetZ * 0.76f + aMuffler.getZCoord() + 0.25f; - float ySpd = aDir.offsetY * 0.1f + 0.2f + 0.1f * GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat(); - float xSpd; - float zSpd; - if (aDir.offsetY == -1) { - // Logger.INFO("Y = -1"); - final float temp = GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat() * 2.0f * CORE.PI; - xSpd = (float) Math.sin(temp) * 0.1f; - zSpd = (float) Math.cos(temp) * 0.1f; - ySpd = -ySpd; - yPos = yPos - 0.8f; - } else { - xSpd = aDir.offsetX * (0.1f + 0.2f * GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat()); - zSpd = aDir.offsetZ * (0.1f + 0.2f * GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat()); - - xSpd = -xSpd; - zSpd = -zSpd; - } - - aWorld.spawnParticle( - name, - (double) (xPos + ran1 * 0.5f), - (double) (yPos + GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat() * 0.5f), - (double) (zPos + GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat() * 0.5f), - (double) xSpd, - (double) -ySpd, - (double) zSpd); - aWorld.spawnParticle( - name, - (double) (xPos + ran2 * 0.5f), - (double) (yPos + GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat() * 0.5f), - (double) (zPos + GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat() * 0.5f), - (double) xSpd, - (double) -ySpd, - (double) zSpd); - aWorld.spawnParticle( - name, - (double) (xPos + ran3 * 0.5f), - (double) (yPos + GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat() * 0.5f), - (double) (zPos + GT_MetaTileEntity_Hatch_AirIntake.floatGen.nextFloat() * 0.5f), - (double) xSpd, - (double) -ySpd, - (double) zSpd); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake_Extreme.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake_Extreme.java deleted file mode 100644 index 007310fc06..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_AirIntake_Extreme.java +++ /dev/null @@ -1,37 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; - -public class GT_MetaTileEntity_Hatch_AirIntake_Extreme extends GT_MetaTileEntity_Hatch_AirIntake { - - public GT_MetaTileEntity_Hatch_AirIntake_Extreme(final int aID, final String aName, final String aNameRegional, - final int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_Hatch_AirIntake_Extreme(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_AirIntake_Extreme( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public int getAmountOfFluidToGenerate() { - return 8000; - } - - @Override - public int getCapacity() { - return 256000; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_DynamoBuffer.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_DynamoBuffer.java deleted file mode 100644 index f375900800..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_DynamoBuffer.java +++ /dev/null @@ -1,67 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import gregtech.api.enums.GT_Values; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MetaTileEntity_Hatch_DynamoBuffer extends GT_MetaTileEntity_Hatch_Dynamo { - - public GT_MetaTileEntity_Hatch_DynamoBuffer(final int aID, final String aName, final String aNameRegional, - final int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_Hatch_DynamoBuffer(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public ITexture[] getTexturesActive(final ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TexturesGtBlock.OVERLAYS_ENERGY_OUT_MULTI_BUFFER[this.mTier] }; - } - - @Override - public ITexture[] getTexturesInactive(final ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, TexturesGtBlock.OVERLAYS_ENERGY_OUT_MULTI_BUFFER[this.mTier] }; - } - - @Override - public long getMinimumStoredEU() { - return 0L; - } - - @Override - public long maxEUStore() { - return 512L + GT_Values.V[this.mTier + 1] * 2048L; - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_DynamoBuffer(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public String[] getDescription() { - String[] g; - g = new String[] { "Dynamo with internal storage and additional Amp capacity", - "Does not accept more than " + (this.maxEUOutput() * this.maxAmperesIn()) + "EU/t as input", - CORE.GT_Tooltip.get() }; - - return g; - } - - @Override - public long maxAmperesIn() { - return 4; - } - - @Override - public long maxAmperesOut() { - return 4; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_ElementalDataOrbHolder.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_ElementalDataOrbHolder.java deleted file mode 100644 index a33994402b..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_ElementalDataOrbHolder.java +++ /dev/null @@ -1,224 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import java.util.ArrayList; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; - -import gregtech.api.enums.ItemList; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IConfigurationCircuitSupport; -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 gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MetaTileEntity_Hatch_ElementalDataOrbHolder extends GT_MetaTileEntity_Hatch - implements IConfigurationCircuitSupport { - - public GT_MetaTileEntity_Hatch_ElementalDataOrbHolder(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 17, - new String[] { "Holds Data Orbs for the Elemental Duplicator", "Can insert/extract the circuit slot", - "A circuit must be used to select a slot (1-16)", CORE.GT_Tooltip.get() }); - } - - public GT_MetaTileEntity_Hatch_ElementalDataOrbHolder(String aName, int aTier, String aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 17, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_ElementalDataOrbHolder(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 17, aDescription, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Hatch_Data_Orb) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Hatch_Data_Orb) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - 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) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { - fillStacksIntoFirstSlots(); - } - } - - public void updateSlots() { - for (int i = 0; i < mInventory.length - 1; i++) - if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null; - fillStacksIntoFirstSlots(); - } - - protected void fillStacksIntoFirstSlots() { - for (int i = 0; i < mInventory.length - 1; i++) { - if (mInventory[i] != null && mInventory[i].stackSize <= 0) { - mInventory[i] = null; - } - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {} - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - Logger.INFO("Checking if we can pull " + aStack.getDisplayName() + " from slot " + aIndex); - if (aIndex == mInventory.length - 1 && ItemUtils.isControlCircuit(aStack) - && side == getBaseMetaTileEntity().getFrontFacing()) { - return true; - } - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - Logger.INFO("Checking if we can put " + aStack.getDisplayName() + " into slot " + aIndex); - if (aIndex == mInventory.length - 1 && ItemUtils.isControlCircuit(aStack) - && side == getBaseMetaTileEntity().getFrontFacing()) { - return true; - } - return false; - } - - public ArrayList getInventory() { - ArrayList aContents = new ArrayList<>(); - for (int i = getBaseMetaTileEntity().getSizeInventory() - 2; i >= 0; i--) { - if (getBaseMetaTileEntity().getStackInSlot(i) != null) - aContents.add(getBaseMetaTileEntity().getStackInSlot(i)); - } - return aContents; - } - - public ItemStack getOrbByCircuit() { - ItemStack aCirc = getBaseMetaTileEntity().getStackInSlot(getCircuitSlot()); - if (aCirc != null && ItemUtils.isControlCircuit(aCirc)) { - int slot = aCirc.getItemDamage() - 1; // slots are 0 indexed but there's no 0 circuit - if (slot < getBaseMetaTileEntity().getSizeInventory() - 1) { - return getBaseMetaTileEntity().getStackInSlot(slot); - } else { - return null; - } - } else { - return null; - } - } - - @Override - public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { - if (aIndex == mInventory.length - 1 && ItemUtils.isControlCircuit(aStack) - && ordinalSide == getBaseMetaTileEntity().getFrontFacing() - .ordinal()) { - Logger.INFO("Putting " + aStack.getDisplayName() + " into slot " + aIndex); - return true; - } - return false; - } - - @Override - public boolean canExtractItem(int aIndex, ItemStack aStack, int ordinalSide) { - if (aIndex == mInventory.length - 1 && ItemUtils.isControlCircuit(aStack)) { - Logger.INFO("Pulling " + aStack.getDisplayName() + " from slot " + aIndex); - return true; - } - return false; - } - - @Override - public boolean allowSelectCircuit() { - return true; - } - - @Override - public int getCircuitSlot() { - return getSlots(mTier); - } - - @Override - public int getCircuitSlotX() { - return 153; - } - - @Override - public int getCircuitSlotY() { - return 63; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 4) - .startFromSlot(0) - .endAtSlot(15) - .background(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_DATA_ORB) - .applyForWidget( - widget -> widget.setFilter(stack -> ItemList.Tool_DataOrb.isStackEqual(stack, false, true))) - .build() - .setPos(52, 7)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_FluidGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_FluidGenerator.java deleted file mode 100644 index b4e213e829..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_FluidGenerator.java +++ /dev/null @@ -1,255 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.FluidUtils; - -public abstract class GT_MetaTileEntity_Hatch_FluidGenerator extends GT_MetaTileEntity_Hatch_Input { - - protected static XSTR floatGen = new XSTR(); - public int mProgresstime = 0, mMaxProgresstime = 0; - - public GT_MetaTileEntity_Hatch_FluidGenerator(final int aID, final String aName, final String aNameRegional, - final int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_Hatch_FluidGenerator(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - public abstract String[] getCustomTooltip(); - - public abstract Fluid getFluidToGenerate(); - - public abstract int getAmountOfFluidToGenerate(); - - public abstract int getMaxTickTime(); - - @Override - public synchronized String[] getDescription() { - mDescriptionArray[1] = "Capacity: " + GT_Utility.formatNumbers(getCapacity()) + "L"; - final String[] hatchTierString = new String[] { "Hatch Tier: " + GT_Utility.getColoredTierNameFromTier(mTier) }; - - String[] aCustomTips = getCustomTooltip(); - final String[] desc = new String[mDescriptionArray.length + aCustomTips.length + 2]; - System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); - System.arraycopy(hatchTierString, 0, desc, mDescriptionArray.length, 1); - System.arraycopy(aCustomTips, 0, desc, mDescriptionArray.length + 1, aCustomTips.length); - desc[mDescriptionArray.length + aCustomTips.length] = CORE.GT_Tooltip.get(); - return desc; - } - - @Override - public ITexture[] getTexturesActive(final ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture((IIconContainer) Textures.BlockIcons.OVERLAY_MUFFLER) }; - } - - @Override - public ITexture[] getTexturesInactive(final ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture((IIconContainer) Textures.BlockIcons.OVERLAY_MUFFLER) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(final ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(final int aIndex) { - return false; - } - - @Override - public abstract MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity); - - public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (!aBaseMetaTileEntity.isAllowedToWork()) { - aBaseMetaTileEntity.setActive(false); - mProgresstime = 0; - mMaxProgresstime = 0; - } else { - aBaseMetaTileEntity.setActive(true); - mMaxProgresstime = getMaxTickTime(); - if (++mProgresstime >= mMaxProgresstime) { - if (this.canTankBeFilled()) { - addFluidToHatch(aTick); - } - mProgresstime = 0; - } - } - } - - @Override - public int getProgresstime() { - return mProgresstime; - } - - @Override - public int maxProgresstime() { - return mMaxProgresstime; - } - - @Override - public int increaseProgress(int aProgress) { - mProgresstime += aProgress; - return mMaxProgresstime - mProgresstime; - } - - public abstract void generateParticles(final World aWorld, final String name); - - @Override - public int getTankPressure() { - return 100; - } - - @Override - public abstract int getCapacity(); - - @Override - public boolean canTankBeEmptied() { - return true; - } - - public abstract boolean doesHatchMeetConditionsToGenerate(); - - public boolean addFluidToHatch(long aTick) { - if (!doesHatchMeetConditionsToGenerate()) { - return false; - } - int aFillAmount = this.fill(FluidUtils.getFluidStack(getFluidToGenerate(), getAmountOfFluidToGenerate()), true); - if (aFillAmount > 0) { - if (this.getBaseMetaTileEntity() - .isClientSide()) { - generateParticles( - this.getBaseMetaTileEntity() - .getWorld(), - "cloud"); - } - } - return aFillAmount > 0; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean doesFillContainers() { - return true; - } - - @Override - public int fill(FluidStack aFluid, boolean doFill) { - if (aFluid == null || aFluid.getFluid() - .getID() <= 0 || aFluid.amount <= 0 || aFluid.getFluid() != getFluidToGenerate() || !canTankBeFilled()) { - return 0; - } - - if (getFillableStack() == null || getFillableStack().getFluid() - .getID() <= 0) { - if (aFluid.amount <= getCapacity()) { - if (doFill) { - setFillableStack(aFluid.copy()); - getBaseMetaTileEntity().markDirty(); - } - return aFluid.amount; - } - if (doFill) { - setFillableStack(aFluid.copy()); - getFillableStack().amount = getCapacity(); - getBaseMetaTileEntity().markDirty(); - } - return getCapacity(); - } - - if (!getFillableStack().isFluidEqual(aFluid)) return 0; - - int space = getCapacity() - getFillableStack().amount; - if (aFluid.amount <= space) { - if (doFill) { - getFillableStack().amount += aFluid.amount; - getBaseMetaTileEntity().markDirty(); - } - return aFluid.amount; - } - if (doFill) getFillableStack().amount = getCapacity(); - return space; - } - - @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; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mProgresstime", mProgresstime); - aNBT.setInteger("mMaxProgresstime", mMaxProgresstime); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mProgresstime = aNBT.getInteger("mProgresstime"); - mMaxProgresstime = aNBT.getInteger("mMaxProgresstime"); - super.loadNBTData(aNBT); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBattery.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBattery.java deleted file mode 100644 index 31b332e7a5..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBattery.java +++ /dev/null @@ -1,230 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; - -import gregtech.api.enums.GT_Values; -import gregtech.api.gui.modularui.GT_UIInfos; -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.recipe.RecipeMap; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.gui.widget.ElectricSlotWidget; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MetaTileEntity_Hatch_InputBattery extends GT_MetaTileEntity_Hatch { - - public final RecipeMap mRecipeMap = null; - - public GT_MetaTileEntity_Hatch_InputBattery(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, getSlots(aTier), "Chargeable Item Bus for Multiblocks"); - } - - public GT_MetaTileEntity_Hatch_InputBattery(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aTier < 1 ? 1 : aTier == 1 ? 4 : aTier == 2 ? 4 : 16, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - int mSlots = 0; - if (this.mTier == 2) { - mSlots = 4; - } else if (this.mTier == 4) { - mSlots = 16; - } else { - mSlots = 16; - } - return ArrayUtils.addAll(this.mDescriptionArray, "Capacity: " + mSlots + " slots", CORE.GT_Tooltip.get()); - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public long getMinimumStoredEU() { - return 0; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public long maxEUStore() { - return 512 + V[mTier + 1] * 16; - } - - @Override - public long maxAmperesIn() { - return 4; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Hatch_Charger) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Hatch_Charger) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - 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_InputBattery(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { - fillStacksIntoFirstSlots(); - } - if (aBaseMetaTileEntity.isServerSide()) { - if (aBaseMetaTileEntity.getMetaTileEntity() instanceof MetaTileEntity mMetaTileEntity) { - if (mMetaTileEntity.rechargerSlotCount() > 0 && aBaseMetaTileEntity.getStoredEU() > 0) { - for (int i = mMetaTileEntity.rechargerSlotStartIndex(), - k = mMetaTileEntity.rechargerSlotCount() + i; i < k; i++) { - if (aBaseMetaTileEntity.getStoredEU() > 0 && mMetaTileEntity.mInventory[i] != null) { - for (int u = 0; u < 10; u++) { - aBaseMetaTileEntity.decreaseStoredEnergyUnits( - GT_ModHandler.chargeElectricItem( - mMetaTileEntity.mInventory[i], - (int) Math.min(V[this.mTier] * 15, aBaseMetaTileEntity.getStoredEU()), - (int) Math.min(Integer.MAX_VALUE, GT_Values.V[u]), - false, - false), - true); - if (mMetaTileEntity.mInventory[i].stackSize <= 0) { - mMetaTileEntity.mInventory[i] = null; - } - } - } - } - } else {} - } - } - super.onPostTick(aBaseMetaTileEntity, aTimer); - } - - 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() { - 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 boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == getBaseMetaTileEntity().getFrontFacing() - && (mRecipeMap == null || mRecipeMap.containsInput(aStack)); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == getBaseMetaTileEntity().getFrontFacing() - && (mRecipeMap == null || mRecipeMap.containsInput(aStack)); - } - - @Override - public int rechargerSlotStartIndex() { - return 0; - } - - @Override - public int rechargerSlotCount() { - return switch (mTier) { - case 2 -> 4; - case 4 -> 16; - default -> 16; - }; - } - - @Override - public int dechargerSlotStartIndex() { - return 0; - } - - @Override - public int dechargerSlotCount() { - return 0; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - if (mTier == 2) { - for (int i = 0; i < 4; i++) { - builder - .widget(new ElectricSlotWidget(inventoryHandler, i).setPos(70 + (i % 2) * 18, 25 + (i / 2) * 18)); - } - } else { - for (int i = 0; i < 16; i++) { - builder.widget(new ElectricSlotWidget(inventoryHandler, i).setPos(52 + (i % 4) * 18, 7 + (i / 4) * 18)); - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler_Adv.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler_Adv.java deleted file mode 100644 index cc5f539a76..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Muffler_Adv.java +++ /dev/null @@ -1,364 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.GT_Mod; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.common.GT_Pollution; -import gtPlusPlus.core.item.general.ItemAirFilter; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; -import gtPlusPlus.xmod.gregtech.api.gui.GTPP_UITextures; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MetaTileEntity_Hatch_Muffler_Adv extends GT_MetaTileEntity_Hatch_Muffler implements IAddGregtechLogo { - - protected int SLOT_FILTER = 0; - - @Override - public void onConfigLoad() { - super.onConfigLoad(); - try { - int a1 = GT_Mod.gregtechproxy.mPollutionSmogLimit; - if (a1 > 0) { - mPollutionSmogLimit = a1; - } - } catch (Throwable t) { - mPollutionSmogLimit = 500000; - } - } - - private int mPollutionSmogLimit = 500000; - - public GT_MetaTileEntity_Hatch_Muffler_Adv(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 1, new String[] { "" }); - } - - public GT_MetaTileEntity_Hatch_Muffler_Adv(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures); - } - - final String[] mDescription = new String[] { "Outputs pollution from a multiblock", "DO NOT OBSTRUCT THE OUTPUT!", - "Requires 3 Air Blocks in front of the exhaust face", - mTier < 5 ? "Requires an Air Filter" - : "Requires an Air Filter " + EnumChatFormatting.WHITE + "[Tier 2]" + EnumChatFormatting.GRAY, - "Can take Air Filters from an input bus of the multiblock", - "Reduces Pollution to " + calculatePollutionReduction(100, true) + "%", - "Recovers " + (100 - calculatePollutionReduction(100, true)) + "% of CO2/CO/SO2", CORE.GT_Tooltip.get() }; - - @Override - public String[] getDescription() { - return mDescription; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Hatch_Muffler_Adv) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Hatch_Muffler_Adv) }; - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex == SLOT_FILTER; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return (aIndex == this.SLOT_FILTER && isAirFilter(aStack)); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Muffler_Adv(this.mName, this.mTier, mDescriptionArray, this.mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean polluteEnvironment(MetaTileEntity parentTileEntity) { - if (!airCheck()) return false; // Muffler obstructed. - - int emission = 10000; - if (damageAirFilter(parentTileEntity)) { - // damageAirFilter already checks that we have a valid filter. - emission = calculatePollutionReduction(emission, true); - } else { - // Revert to reduction of the basic muffler. - emission = super.calculatePollutionReduction(emission); - } - GT_Pollution.addPollution(getBaseMetaTileEntity(), emission); - return true; - } - - @Override - public int calculatePollutionReduction(int aPollution) { - // This is called by EBF to calculate exhaust gas amounts, we need to check the filter. - return calculatePollutionReduction(aPollution, false); - } - - /** - * Calculates pollution reduction. - * - * @param aPollution Amount of pollution to be reduced. - * @param ignoreFilter If this is true, assumes that a valid filter is present without checking (for example, to - * build tooltips). - * @return Amount of pollution after reduction. - */ - protected int calculatePollutionReduction(int aPollution, boolean ignoreFilter) { - if (!ignoreFilter && !hasAirFilter()) { - // Without a filter, downgrade to basic muffler reduction. - return super.calculatePollutionReduction(aPollution); - } - - // Special case to be always better than a basic muffler. - if (mTier < 2) return (int) (aPollution * 0.95); - if (mTier > 8) return 0; - - return (int) (aPollution * Math.pow(0.64D, mTier - 1)); - } - - /** - * - * @return True if enough blocks in front of the muffler are air. - */ - private boolean airCheck() { - IGregTechTileEntity bmte = getBaseMetaTileEntity(); - ForgeDirection facing = bmte.getFrontFacing(); - return bmte.getAirAtSide(facing) && bmte.getAirAtSideAndDistance(facing, 1) - && bmte.getAirAtSideAndDistance(facing, 2); - } - - /** - * Try to damage an air filter. Will first try to find a valid filter in the hatch's own inventory, then in the - * input buses of the parent multiblock. If the filter is destroyed, will try to replace it from the parent - * multiblock's input buses again. - * - * @param parentTileEntity Which multiblock this hatch is a part of. If this is null, only checks inventory of the - * muffler. - * @return True if the filter has been successfully damaged. - */ - private boolean damageAirFilter(MetaTileEntity parentTileEntity) { - if (!findAirFilter(parentTileEntity)) return false; // No filter available. - - ItemStack filter = mInventory[SLOT_FILTER]; - if (filter == null) return false; // This should never happen if findAirFilter() above succeeded. - - long currentDamage = ItemAirFilter.getFilterDamage(filter); - if (currentDamage < ItemAirFilter.getFilterMaxDamage(filter) - 1) { - // Damage filter by one step. - ItemAirFilter.setFilterDamage(filter, currentDamage + 1); - return true; - } else { - // Destroy the filter. - mInventory[SLOT_FILTER] = null; - - // Try to find a new one. - findAirFilter(parentTileEntity); - - // Regardless of whether we have a new filter or not, *this* operation succeeded. - return true; - } - } - - /** - * Try to find a valid air filter in the input buses of the parent multiblock. - * - * @param parentTileEntity Which multiblock this hatch is a part of. If this is null, only checks inventory of the - * muffler. - * @return True if the inventory of the muffler already contains an air filter, or if one was retrieved from the - * parent multiblock. - */ - private boolean findAirFilter(MetaTileEntity parentTileEntity) { - if (hasAirFilter()) return true; // Has a filter in inventory. - if (mInventory[SLOT_FILTER] != null) return false; // Has a non-filter item in inventory. - if (parentTileEntity == null) return false; // Unknown parent multiblock. - - if (parentTileEntity instanceof GT_MetaTileEntity_MultiBlockBase GTMultiBase) { - for (var inputBus : GTMultiBase.mInputBusses) { - for (ItemStack stack : inputBus.mInventory) { - if (isAirFilter(stack)) { - ItemStack stackCopy = stack.copy(); - if (GTMultiBase.depleteInput(stack)) { - mInventory[SLOT_FILTER] = stackCopy; - return true; - } - } - } - } - } - - return false; - } - - /** - * - * @return True if the item currently in the inventory is an air filter valid for this tier of muffler hatch. - */ - private boolean hasAirFilter() { - return isAirFilter(mInventory[SLOT_FILTER]); - } - - /** - * - * @param filter - * @return True if the argument is an air filter valid for this tier of muffler hatch. - */ - public boolean isAirFilter(ItemStack filter) { - if (filter == null) return false; - if (filter.getItem() instanceof ItemAirFilter) { - if (mTier < 5) { - // Accept any filter. - return true; - } else { - // Accept only T2 filter. - return filter.getItemDamage() == 1; - } - } - return false; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (aBaseMetaTileEntity.isClientSide()) { - if (this.getBaseMetaTileEntity() - .isActive()) { - String aParticleName; - if ((aTick % 2) == 0) { - aParticleName = "cloud"; - } else { - aParticleName = "smoke"; - } - this.pollutionParticles( - this.getBaseMetaTileEntity() - .getWorld(), - aParticleName); - } - } - } - - @Override - public void pollutionParticles(World aWorld, String name) { - float ran1 = CORE.RANDOM.nextFloat(); - float ran2 = 0.0F; - float ran3 = 0.0F; - boolean chk1 = ran1 * 100.0F < (float) this.calculatePollutionReduction(100); - boolean chk2; - boolean chk3; - int aPollutionAmount = PollutionUtils.getPollution(getBaseMetaTileEntity()); - if (aPollutionAmount >= mPollutionSmogLimit) { - ran2 = CORE.RANDOM.nextFloat(); - ran3 = CORE.RANDOM.nextFloat(); - chk2 = ran2 * 100.0F < (float) this.calculatePollutionReduction(100); - chk3 = ran3 * 100.0F < (float) this.calculatePollutionReduction(100); - if (!chk1 && !chk2 && !chk3) { - return; - } - } else { - if (!chk1) { - return; - } - - chk3 = false; - chk2 = false; - } - - IGregTechTileEntity aMuffler = this.getBaseMetaTileEntity(); - ForgeDirection aDir = aMuffler.getFrontFacing(); - float xPos = (float) aDir.offsetX * 0.76F + (float) aMuffler.getXCoord() + 0.25F; - float yPos = (float) aDir.offsetY * 0.76F + (float) aMuffler.getYCoord() + 0.25F; - float zPos = (float) aDir.offsetZ * 0.76F + (float) aMuffler.getZCoord() + 0.25F; - float ySpd = (float) aDir.offsetY * 0.1F + 0.2F + 0.1F * CORE.RANDOM.nextFloat(); - float xSpd; - float zSpd; - if (aDir.offsetY == -1) { - float temp = CORE.RANDOM.nextFloat() * 2.0F * CORE.PI; - xSpd = (float) Math.sin((double) temp) * 0.1F; - zSpd = (float) Math.cos((double) temp) * 0.1F; - } else { - xSpd = (float) aDir.offsetX * (0.1F + 0.2F * CORE.RANDOM.nextFloat()); - zSpd = (float) aDir.offsetZ * (0.1F + 0.2F * CORE.RANDOM.nextFloat()); - } - - if (chk1) { - aWorld.spawnParticle( - name, - (double) (xPos + ran1 * 0.5F), - (double) (yPos + CORE.RANDOM.nextFloat() * 0.5F), - (double) (zPos + CORE.RANDOM.nextFloat() * 0.5F), - (double) xSpd, - (double) ySpd, - (double) zSpd); - } - - if (chk2) { - aWorld.spawnParticle( - name, - (double) (xPos + ran2 * 0.5F), - (double) (yPos + CORE.RANDOM.nextFloat() * 0.5F), - (double) (zPos + CORE.RANDOM.nextFloat() * 0.5F), - (double) xSpd, - (double) ySpd, - (double) zSpd); - } - - if (chk3) { - aWorld.spawnParticle( - name, - (double) (xPos + ran3 * 0.5F), - (double) (yPos + CORE.RANDOM.nextFloat() * 0.5F), - (double) (zPos + CORE.RANDOM.nextFloat() * 0.5F), - (double) xSpd, - (double) ySpd, - (double) zSpd); - } - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) {} - - @Override - public GUITextureSet getGUITextureSet() { - return new GUITextureSet().setMainBackground(GTPP_UITextures.BACKGROUND_YELLOW) - .setItemSlot(GTPP_UITextures.SLOT_ITEM_YELLOW) - .setTitleTab( - GTPP_UITextures.TAB_TITLE_YELLOW, - GTPP_UITextures.TAB_TITLE_DARK_YELLOW, - GTPP_UITextures.TAB_TITLE_ANGULAR_YELLOW); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new SlotWidget(inventoryHandler, 0).setFilter(stack -> stack.getItem() instanceof ItemAirFilter) - .setBackground(getGUITextureSet().getItemSlot()) - .setPos(79, 34)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Naquadah.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Naquadah.java deleted file mode 100644 index ad94907d4c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Naquadah.java +++ /dev/null @@ -1,203 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import java.lang.reflect.Field; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.reflect.ReflectionUtils; - -public class GT_MetaTileEntity_Hatch_Naquadah extends GT_MetaTileEntity_Hatch_Input { - - public final FluidStack[] mFluidsToUse = new FluidStack[3]; - public final int mFluidCapacity; - - public GT_MetaTileEntity_Hatch_Naquadah(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional, 6); - mFluidCapacity = 32000; - initHatch(); - } - - public GT_MetaTileEntity_Hatch_Naquadah(final String aName, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, 6, aDescription[0], aTextures); - mFluidCapacity = 32000; - initHatch(); - } - - private void initHatch() { - if (mFluidsToUse[0] == null) { - mFluidsToUse[0] = Materials.Naquadah.getMolten(1); - } - if (mFluidsToUse[1] == null) { - mFluidsToUse[1] = Materials.NaquadahEnriched.getMolten(1); - } - if (mFluidsToUse[2] == null) { - mFluidsToUse[2] = Materials.Naquadria.getMolten(1); - } - } - - @Override - public ITexture[] getTexturesActive(final ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture((IIconContainer) Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE_ACTIVE) }; - } - - @Override - public ITexture[] getTexturesInactive(final ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, - new GT_RenderedTexture((IIconContainer) Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE) }; - } - - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - if (side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 0) { - for (FluidStack f : mFluidsToUse) { - if (f != null) { - if (GT_Utility.getFluidForFilledItem(aStack, true) - .getFluid() == f.getFluid()) { - return true; - } - } - } - } - return false; - } - - @Override - public boolean isFluidInputAllowed(final FluidStack aFluid) { - for (FluidStack f : mFluidsToUse) { - if (f != null) { - if (aFluid.getFluid() == f.getFluid()) { - return true; - } - } - } - return false; - } - - @Override - public int getCapacity() { - return this.mFluidCapacity; - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Naquadah(this.mName, this.mDescriptionArray, this.mTextures); - } - - @Override - public String[] getDescription() { - if (aDescCache[0] == null || aDescCache[0].contains(".name") || aDescCache[0].contains("fluid.")) { - aDescCache[0] = formatFluidString(this.mFluidsToUse[0]); - } - if (aDescCache[1] == null || aDescCache[1].contains(".name") || aDescCache[1].contains("fluid.")) { - aDescCache[1] = formatFluidString(this.mFluidsToUse[1]); - } - if (aDescCache[2] == null || aDescCache[2].contains(".name") || aDescCache[2].contains("fluid.")) { - aDescCache[2] = formatFluidString(this.mFluidsToUse[2]); - } - String aNaq = aDescCache[0]; - String aEnrNaq = aDescCache[1]; - String aNaquad = aDescCache[2]; - String[] s2 = new String[] { "Fluid Input for Multiblocks", "Capacity: " + getCapacity() + "L", - "Accepted Fluid: " + aNaq, "Accepted Fluid: " + aEnrNaq, "Accepted Fluid: " + aNaquad, - CORE.GT_Tooltip.get() }; - return s2; - } - - private static String[] aDescCache = new String[3]; - - private String formatFluidString(FluidStack f) { - FluidStack mLockedStack = f; - Integer mLockedTemp = 0;; - String mTempMod = "" + EnumChatFormatting.RESET; - mLockedTemp = mLockedStack.getFluid() - .getTemperature(); - 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; - } - } - return mTempMod + mLockedStack.getLocalizedName(); - } - - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - // TODO Auto-generated method stub - return super.getTextureSet(aTextures); - } - - private Field F1, F2; - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - byte a1 = 0, a2 = 0; - try { - if (F1 == null) { - F1 = ReflectionUtils.getField(getClass(), "actualTexture"); - } - if (F2 == null) { - F2 = ReflectionUtils.getField(getClass(), "mTexturePage"); - } - - if (F1 != null) { - a1 = F1.getByte(this); - } - if (F2 != null) { - a2 = F2.getByte(this); - } - } catch (IllegalArgumentException | IllegalAccessException n) {} - - int textureIndex = a1 | a2 << 7; - byte texturePointer = (byte) (a1 & 127); - - if (side == ForgeDirection.UP || side == ForgeDirection.DOWN) { - ITexture g = textureIndex > 0 ? BlockIcons.casingTexturePages[a2][texturePointer] - : BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1]; - - return new ITexture[] { g, - new GT_RenderedTexture((IIconContainer) Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_TOP_ACTIVE) }; - } - - return side != facing - ? (textureIndex > 0 ? new ITexture[] { BlockIcons.casingTexturePages[a2][texturePointer] } - : new ITexture[] { BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1] }) - : (textureIndex > 0 - ? (aActive ? this.getTexturesActive(BlockIcons.casingTexturePages[a2][texturePointer]) - : this.getTexturesInactive(BlockIcons.casingTexturePages[a2][texturePointer])) - : (aActive ? this.getTexturesActive(BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1]) - : this.getTexturesInactive(BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1]))); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBattery.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBattery.java deleted file mode 100644 index 1d6507732c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_OutputBattery.java +++ /dev/null @@ -1,217 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.GT_Values.V; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; - -import gregtech.api.gui.modularui.GT_UIInfos; -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_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.gui.widget.ElectricSlotWidget; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MetaTileEntity_Hatch_OutputBattery extends GT_MetaTileEntity_Hatch { - - public GT_MetaTileEntity_Hatch_OutputBattery(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, getSlots(aTier), "Dischargeable Item Bus for Multiblocks"); - } - - public GT_MetaTileEntity_Hatch_OutputBattery(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aTier < 1 ? 1 : aTier == 1 ? 4 : aTier == 2 ? 9 : 16, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - int mSlots = 0; - if (this.mTier == 2) { - mSlots = 4; - } else if (this.mTier == 4) { - mSlots = 16; - } else { - mSlots = 16; - } - return ArrayUtils.addAll(this.mDescriptionArray, "Capacity: " + mSlots + " slots", CORE.GT_Tooltip.get()); - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public long getMinimumStoredEU() { - return 0; - } - - @Override - public long maxEUOutput() { - return V[mTier]; - } - - @Override - public long maxEUStore() { - return 512 + V[mTier + 1] * 8; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Hatch_Discharger) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Hatch_Discharger) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - 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_OutputBattery(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing(); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing(); - } - - 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() { - 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 int rechargerSlotStartIndex() { - return 0; - } - - @Override - public int rechargerSlotCount() { - return 0; - } - - @Override - public int dechargerSlotStartIndex() { - return 0; - } - - @Override - public int dechargerSlotCount() { - return mTier == 2 ? 4 : 16; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { - fillStacksIntoFirstSlots(); - } - - if (aBaseMetaTileEntity.isServerSide()) { - if (aBaseMetaTileEntity.getMetaTileEntity() instanceof MetaTileEntity mMetaTileEntity) { - if (mMetaTileEntity.dechargerSlotCount() > 0 - && mMetaTileEntity.getEUVar() < aBaseMetaTileEntity.getEUCapacity()) { - for (int i = mMetaTileEntity.dechargerSlotStartIndex(), - k = mMetaTileEntity.dechargerSlotCount() + i; i < k; i++) { - if (mMetaTileEntity.mInventory[i] != null - && mMetaTileEntity.getEUVar() < aBaseMetaTileEntity.getEUCapacity()) { - aBaseMetaTileEntity.increaseStoredEnergyUnits( - GT_ModHandler.dischargeElectricItem( - mMetaTileEntity.mInventory[i], - (int) Math.min( - V[mTier] * 15, - aBaseMetaTileEntity.getEUCapacity() - aBaseMetaTileEntity.getStoredEU()), - (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getInputTier()), - true, - false, - false), - true); - if (mMetaTileEntity.mInventory[i].stackSize <= 0) mMetaTileEntity.mInventory[i] = null; - } - } - } - } - } - super.onPostTick(aBaseMetaTileEntity, aTimer); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - if (mTier == 2) { - for (int i = 0; i < 4; i++) { - builder - .widget(new ElectricSlotWidget(inventoryHandler, i).setPos(70 + (i % 2) * 18, 25 + (i / 2) * 18)); - } - } else { - for (int i = 0; i < 16; i++) { - builder.widget(new ElectricSlotWidget(inventoryHandler, i).setPos(52 + (i % 4) * 18, 7 + (i / 4) * 18)); - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Reservoir.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Reservoir.java deleted file mode 100644 index bfe8290240..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Reservoir.java +++ /dev/null @@ -1,75 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import net.minecraft.world.World; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MetaTileEntity_Hatch_Reservoir extends GT_MetaTileEntity_Hatch_FluidGenerator { - - public GT_MetaTileEntity_Hatch_Reservoir(final int aID, final String aName, final String aNameRegional, - final int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_Hatch_Reservoir(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Reservoir(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public String[] getCustomTooltip() { - String[] aTooltip = new String[2]; - aTooltip[0] = "Infinite water supply hatch"; - aTooltip[1] = "Fills to max capacity every 5 seconds"; - return aTooltip; - } - - @Override - public Fluid getFluidToGenerate() { - return FluidRegistry.WATER; - } - - @Override - public int getAmountOfFluidToGenerate() { - return 2_000_000_000; - } - - @Override - public int getMaxTickTime() { - return 100; - } - - @Override - public int getCapacity() { - return 2_000_000_000; - } - - @Override - public boolean doesHatchMeetConditionsToGenerate() { - return true; - } - - @Override - public void generateParticles(World aWorld, String name) {} - - @Override - public ITexture[] getTexturesActive(final ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Water) }; - } - - @Override - public ITexture[] getTexturesInactive(final ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Water) }; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Solidifier.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Solidifier.java deleted file mode 100644 index 2f8c704cad..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Solidifier.java +++ /dev/null @@ -1,116 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.enums.ItemList; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.util.GT_Utility; - -public class GT_MetaTileEntity_Hatch_Solidifier extends GT_MetaTileEntity_Hatch_Input { - - static final int moldSlot = 2; - static final ItemStack[] solidifierMolds = { ItemList.Shape_Mold_Bottle.get(1), ItemList.Shape_Mold_Plate.get(1), - ItemList.Shape_Mold_Ingot.get(1), ItemList.Shape_Mold_Casing.get(1), ItemList.Shape_Mold_Gear.get(1), - ItemList.Shape_Mold_Gear_Small.get(1), ItemList.Shape_Mold_Credit.get(1), ItemList.Shape_Mold_Nugget.get(1), - ItemList.Shape_Mold_Block.get(1), ItemList.Shape_Mold_Ball.get(1), ItemList.Shape_Mold_Cylinder.get(1), - ItemList.Shape_Mold_Anvil.get(1), ItemList.Shape_Mold_Arrow.get(1), ItemList.Shape_Mold_Rod.get(1), - ItemList.Shape_Mold_Bolt.get(1), ItemList.Shape_Mold_Round.get(1), ItemList.Shape_Mold_Screw.get(1), - ItemList.Shape_Mold_Ring.get(1), ItemList.Shape_Mold_Rod_Long.get(1), ItemList.Shape_Mold_Rotor.get(1), - ItemList.Shape_Mold_Turbine_Blade.get(1), ItemList.Shape_Mold_Pipe_Tiny.get(1), - ItemList.Shape_Mold_Pipe_Small.get(1), ItemList.Shape_Mold_Pipe_Medium.get(1), - ItemList.Shape_Mold_Pipe_Large.get(1), ItemList.Shape_Mold_Pipe_Huge.get(1), - ItemList.Shape_Mold_ToolHeadDrill.get(1) }; - - public GT_MetaTileEntity_Hatch_Solidifier(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - @Override - public String[] getDescription() { - return new String[] { - "Fluid Input with Mold for " + EnumChatFormatting.YELLOW - + "Large Processing Factory" - + EnumChatFormatting.RESET, - "#22 Circuit is imprinted in Hatch", "Capacity: " + GT_Utility.formatNumbers(getCapacity()) + "L", - "Added by: " + EnumChatFormatting.AQUA - + "Quetz4l" - + " - " - + EnumChatFormatting.RED - + "[GT++]" - + EnumChatFormatting.RESET }; - } - - public GT_MetaTileEntity_Hatch_Solidifier(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, getSlots(aTier), aTier, aDescription, aTextures); - } - - private class MoldSlot extends BaseSlot { - - public MoldSlot(IItemHandlerModifiable inventory, int index) { - super(inventory, index); - } - - @Override - public boolean isItemValidPhantom(ItemStack stack) { - return super.isItemValidPhantom(stack) && getBaseMetaTileEntity().isItemValidForSlot(getSlotIndex(), stack); - } - - } - - @Override - public boolean isItemValidForSlot(int aIndex, ItemStack aStack) { - if (aIndex == moldSlot && aStack != null) { - for (final ItemStack itemStack : solidifierMolds) { - if (GT_Utility.areStacksEqual(itemStack, aStack, true)) { - return true; - } - } - } else if (aIndex != moldSlot) { - return super.isItemValidForSlot(aIndex, aStack); - } - - return false; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Solidifier(mName, mTier, mDescriptionArray, mTextures); - } - - public ItemStack getMold() { - return this.getStackInSlot(moldSlot); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - builder.widget( - new SlotWidget(new MoldSlot(inventoryHandler, moldSlot)).setPos(125, 35) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_MOLD) - .setSize(18, 18)); - } - - @Override - public void onBlockDestroyed() { - super.onBlockDestroyed(); - } - - // for a drop-down form when the hatch is destroyed - @Override - public boolean isValidSlot(int aIndex) { - if (aIndex == moldSlot) return true; - else return super.isValidSlot(aIndex); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusInput.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusInput.java deleted file mode 100644 index 457eca1dad..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusInput.java +++ /dev/null @@ -1,274 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.ITEM_IN_SIGN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_IN; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; - -import gregtech.GT_Mod; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -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.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; - -public class GT_MetaTileEntity_Hatch_Steam_BusInput extends GT_MetaTileEntity_Hatch { - - public RecipeMap 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", CORE.GT_Tooltip.get() }); - } - - 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 GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(ITEM_IN_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(ITEM_IN_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - 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) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @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(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - disableSort = !disableSort; - GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("200.1", "Automatic Item Shuffling: ") - + (disableSort ? GT_Utility.trans("087", "Disabled") : GT_Utility.trans("088", "Enabled"))); - } - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == 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) }; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - getBaseMetaTileEntity().add2by2Slots(builder); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusOutput.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusOutput.java deleted file mode 100644 index 5868995d49..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Steam_BusOutput.java +++ /dev/null @@ -1,210 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.ITEM_OUT_SIGN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; - -import gregtech.GT_Mod; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -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.render.TextureFactory; -import gtPlusPlus.core.lib.CORE; - -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", "Does not automatically export items", - "Capacity: 4 stacks", "Does not work with non-steam multiblocks", CORE.GT_Tooltip.get() }); - } - - 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 GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(ITEM_OUT_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(ITEM_OUT_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - 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) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing(); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - 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) }; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - getBaseMetaTileEntity().add2by2Slots(builder); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Turbine.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Turbine.java deleted file mode 100644 index 6c545af332..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Turbine.java +++ /dev/null @@ -1,430 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_ST5; -import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_ST_ACTIVE5; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.minecraft.BlockPos; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.GregtechMetaTileEntity_LargerTurbineBase; - -@SuppressWarnings("deprecation") -public class GT_MetaTileEntity_Hatch_Turbine extends GT_MetaTileEntity_Hatch { - - public boolean mHasController = false; - public boolean mUsingAnimation = true; - private String mControllerLocation; - public int mEUt = 0; - - public GT_MetaTileEntity_Hatch_Turbine(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, 16, "Turbine Rotor holder for XL Turbines"); - } - - public GT_MetaTileEntity_Hatch_Turbine(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures); - } - - public GT_MetaTileEntity_Hatch_Turbine(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription[0], aTextures); - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll( - this.mDescriptionArray, - "Right Click with a soldering iron to reset controller link", - "Right Click with a wrench to remove turbine", - "Right Click with a screwdriver for technical information", - "Sneak + Right Click with a wrench to rotate", - "Sneak + Right Click with a screwdriver to disable animations", - CORE.GT_Tooltip.get()); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, getFrontFacingTurbineTexture() }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, getFrontFacingTurbineTexture() }; - } - - public int getEU() { - return this.mEUt; - } - - public void setEU(int aEU) { - this.mEUt = aEU; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return facing.offsetY == 0; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(int aIndex) { - return false; - } - - public boolean hasTurbine() { - ItemStack aStack = this.mInventory[0]; - boolean aIsValid = GregtechMetaTileEntity_LargerTurbineBase.isValidTurbine(aStack); - return aIsValid; - } - - public ItemStack getTurbine() { - if (hasTurbine()) { - return this.mInventory[0]; - } - return null; - } - - public boolean canWork() { - return hasTurbine(); - } - - public boolean insertTurbine(ItemStack aTurbine) { - if (GregtechMetaTileEntity_LargerTurbineBase.isValidTurbine(aTurbine)) { - this.mInventory[0] = aTurbine; - return true; - } - return false; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Turbine(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public int getInventoryStackLimit() { - return 1; - } - - public void damageTurbine(int aEUt, int damageFactorLow, float damageFactorHigh) { - damageTurbine((long) aEUt, damageFactorLow, damageFactorHigh); - } - - public void damageTurbine(long aEUt, int damageFactorLow, float damageFactorHigh) { - if (hasTurbine() && MathUtils.randInt(0, 1) == 0) { - ItemStack aTurbine = getTurbine(); - ((GT_MetaGenerated_Tool) aTurbine.getItem()).doDamage( - aTurbine, - (long) getDamageToComponent(aTurbine) - * (long) Math.min((float) aEUt / (float) damageFactorLow, Math.pow(aEUt, damageFactorHigh))); - } - } - - private int getDamageToComponent(ItemStack aStack) { - return 1; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("mHasController", mHasController); - aNBT.setBoolean("mUsingAnimation", mUsingAnimation); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mHasController = aNBT.getBoolean("mHasController"); - mUsingAnimation = aNBT.getBoolean("mUsingAnimation"); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (this.mHasController) { - if (aTick % 20 == 0) { - if (isControllerActive()) { - this.getBaseMetaTileEntity() - .setActive(true); - } else { - this.getBaseMetaTileEntity() - .setActive(false); - } - } - } else if (!this.mHasController && this.mControllerLocation != null) { - // Weird Invalid State - if (setController(BlockPos.generateBlockPos(mControllerLocation))) { - // Valid - } - } else { - // No Controller - } - if (this.mInventory[0] != null && this.mInventory[0].stackSize <= 0) this.mInventory[0] = null; - } - - public boolean isControllerActive() { - GregtechMetaTileEntity_LargerTurbineBase x = getController(); - if (x != null) { - // Logger.INFO("Checking Status of Controller. Running? "+(x.mEUt > 0)); - return x.lEUt > 0; - } - // Logger.INFO("Status of Controller failed, controller is null."); - return false; - } - - public GregtechMetaTileEntity_LargerTurbineBase getController() { - if (this.mHasController && this.mControllerLocation != null && this.mControllerLocation.length() > 0) { - BlockPos p = BlockPos.generateBlockPos(mControllerLocation); - if (p != null) { - // Logger.INFO(p.getLocationString()); - IGregTechTileEntity tTileEntity = getBaseMetaTileEntity() - .getIGregTechTileEntity(p.xPos, p.yPos, p.zPos); - if (tTileEntity != null - && tTileEntity.getMetaTileEntity() instanceof GregtechMetaTileEntity_LargerTurbineBase) { - return (GregtechMetaTileEntity_LargerTurbineBase) tTileEntity.getMetaTileEntity(); - } else { - if (tTileEntity == null) { - Logger.INFO("Controller MTE is null, somehow?"); - } else { - Logger.INFO("Controller is a different MTE to expected"); - } - } - } - } - // Logger.INFO("Failed to Get Controller."); - return null; - } - - public boolean canSetNewController() { - if ((mControllerLocation != null && mControllerLocation.length() > 0) || this.mHasController) { - return false; - } - return true; - } - - public boolean setController(BlockPos aPos) { - clearController(); - if (canSetNewController()) { - mControllerLocation = aPos.getUniqueIdentifier(); - mHasController = true; - Logger.INFO("Successfully injected controller into this Turbine Assembly Hatch."); - } - return mHasController; - } - - public void clearController() { - this.mControllerLocation = null; - this.mHasController = false; - } - - public boolean usingAnimations() { - return mUsingAnimation; - } - - private ITexture getFrontFacingTurbineTexture() { - if (!mHasController) { - return this.getBaseMetaTileEntity() - .isActive() ? new GT_RenderedTexture(LARGETURBINE_ST_ACTIVE5) - : new GT_RenderedTexture(LARGETURBINE_ST5); - } else { - if (usingAnimations()) { - if (isControllerActive()) { - return getController().frontFaceActive; - } - } - return getController().frontFace; - } - } - - @Override - public long getMinimumStoredEU() { - return 0; - } - - @Override - public boolean isItemValidForSlot(int aIndex, ItemStack aStack) { - return false; - } - - @Override - public int[] getAccessibleSlotsFromSide(int ordinalSide) { - return new int[] {}; - } - - @Override - public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { - return false; - } - - public void setActive(boolean b) { - this.getBaseMetaTileEntity() - .setActive(b); - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { - return false; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (!aPlayer.isSneaking()) { - PlayerUtils.messagePlayer(aPlayer, "Using Animations? " + usingAnimations()); - PlayerUtils.messagePlayer(aPlayer, "Has Controller? " + this.mHasController); - if (mHasController) { - PlayerUtils.messagePlayer( - aPlayer, - "Controller Location: " + BlockPos.generateBlockPos(mControllerLocation) - .getLocationString()); - PlayerUtils.messagePlayer(aPlayer, "Controller Active? " + this.isControllerActive()); - } - PlayerUtils.messagePlayer( - aPlayer, - "Active? " + this.getBaseMetaTileEntity() - .isActive()); - PlayerUtils.messagePlayer(aPlayer, "Has Turbine inserted? " + this.hasTurbine()); - if (this.hasTurbine()) { - Materials aMat = GT_MetaGenerated_Tool.getPrimaryMaterial(getTurbine()); - String aSize = GregtechMetaTileEntity_LargerTurbineBase - .getTurbineSizeString(GregtechMetaTileEntity_LargerTurbineBase.getTurbineSize(getTurbine())); - PlayerUtils.messagePlayer(aPlayer, "Using: " + aMat.mLocalizedName + " " + aSize); - } - } else { - this.mUsingAnimation = !mUsingAnimation; - if (this.mUsingAnimation) { - PlayerUtils.messagePlayer(aPlayer, "Using Animated Turbine Texture."); - } else { - PlayerUtils.messagePlayer(aPlayer, "Using Static Turbine Texture."); - } - } - } - - @Override - public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, float aX, - float aY, float aZ) { - if (this.getBaseMetaTileEntity() - .isServerSide() && !aPlayer.isSneaking()) { - ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); - if (tCurrentItem != null) { - if (tCurrentItem.getItem() instanceof GT_MetaGenerated_Tool) { - return onToolClick(tCurrentItem, aPlayer, wrenchingSide); - } - } - } - return super.onWrenchRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ); - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (this.getBaseMetaTileEntity() - .isServerSide()) { - ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); - if (tCurrentItem != null) { - if (tCurrentItem.getItem() instanceof GT_MetaGenerated_Tool) { - return onToolClick(tCurrentItem, aPlayer, wrenchingSide); - } - } - } - return false; - } - - public boolean onToolClick(ItemStack tCurrentItem, EntityPlayer aPlayer, ForgeDirection side) { - if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)) { - boolean aHasTurbine = this.hasTurbine(); - if (aPlayer.inventory.getFirstEmptyStack() >= 0 && aHasTurbine) { - if (PlayerUtils.isCreative(aPlayer) - || GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { - aPlayer.inventory.addItemStackToInventory((this.getTurbine())); - this.mInventory[0] = null; - GT_Utility.sendChatToPlayer(aPlayer, "Removed turbine with wrench."); - return true; - } - } else { - GT_Utility.sendChatToPlayer( - aPlayer, - aHasTurbine ? "Cannot remove turbine, no free inventory space." : "No turbine to remove."); - } - } else if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) { - if (mControllerLocation != null && mControllerLocation.length() > 0) { - if (setController(BlockPos.generateBlockPos(mControllerLocation))) { - if (PlayerUtils.isCreative(aPlayer) - || GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { - String tChat = "Trying to Reset linked Controller"; - IGregTechTileEntity g = this.getBaseMetaTileEntity(); - GT_Utility.sendChatToPlayer(aPlayer, tChat); - GT_Utility.sendSoundToPlayers( - g.getWorld(), - SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, - 1.0F, - -1, - g.getXCoord(), - g.getYCoord(), - g.getZCoord()); - return true; - } - } - } - } - return false; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new SlotWidget(inventoryHandler, 0).setFilter(GregtechMetaTileEntity_LargerTurbineBase::isValidTurbine) - .setAccess(false, true) - .setPos(79, 34)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_TurbineProvider.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_TurbineProvider.java deleted file mode 100644 index e9626a310c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_TurbineProvider.java +++ /dev/null @@ -1,221 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_LargeTurbine; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.core.util.sys.KeyboardUtils; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.GregtechMetaTileEntity_LargerTurbineBase; - -public class GT_MetaTileEntity_Hatch_TurbineProvider extends GT_MetaTileEntity_Hatch_InputBus { - - public GT_MetaTileEntity_Hatch_TurbineProvider(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_Hatch_TurbineProvider(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_TurbineProvider( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public String[] getDescription() { - return new String[] { "An automation port for Large Turbines", - "Will attempt once per 1200 ticks to fill the turbine slot of it's parent turbine", - "You may adjust this with a screwdriver", "Hold shift to adjust in finer amounts", - "Hold control to adjust direction", "Left Click with Screwdriver to reset", - "This module assumes the entire turbine is in the same Chunk", CORE.GT_Tooltip.get() }; - } - - private GT_MetaTileEntity_LargeTurbine mParent = null; - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - super.onPostTick(aBaseMetaTileEntity, aTimer); - if (aTimer % mRefreshTime == 0 && this.getBaseMetaTileEntity() - .isServerSide()) { - tryRefillTurbine(); - } - } - - private void tryFindParentTurbine() { - Logger.INFO("This turbine housing has no parent, searching world."); - IGregTechTileEntity T = this.getBaseMetaTileEntity(); - World W = T.getWorld(); - Chunk C = W.getChunkFromBlockCoords(T.getXCoord(), T.getZCoord()); - for (Object o : C.chunkTileEntityMap.values()) { - if (o instanceof IGregTechTileEntity G) { - final IMetaTileEntity aMetaTileEntity = G.getMetaTileEntity(); - if (aMetaTileEntity == null) { - continue; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_LargeTurbine aTurb) { - for (GT_MetaTileEntity_Hatch_InputBus ee : aTurb.mInputBusses) { - if (ee.equals(this)) { - mParent = aTurb; - Logger.INFO("Found a Parent to attach to this housing."); - return; - } - } - } - } - } - } - - private void tryRefillTurbine() { - if (mParent == null) { - tryFindParentTurbine(); - } - if (mParent != null && mParent.mInventory[1] == null) { - for (ItemStack aStack : this.mInventory) { - if (isItemStackTurbine(aStack)) { - setGUIItemStack(aStack); - } - } - } - } - - protected boolean setGUIItemStack(ItemStack aNewGuiSlotContents) { - boolean result = false; - if (mParent.mInventory[1] == null) { - mParent.mInventory[1] = aNewGuiSlotContents != null ? aNewGuiSlotContents.copy() : null; - mParent.depleteInput(aNewGuiSlotContents); - mParent.updateSlots(); - this.updateSlots(); - result = true; - } - return result; - } - - public boolean isItemStackTurbine(ItemStack aStack) { - if (aStack.getItem() instanceof GT_MetaGenerated_Tool) { - if (aStack.getItemDamage() >= 170 && aStack.getItemDamage() <= 176) { - return true; - } - } - return false; - } - - public boolean isItemStackScrewdriver(ItemStack aStack) { - if (aStack.getItem() instanceof GT_MetaGenerated_Tool) { - if (aStack.getItemDamage() == 22 || aStack.getItemDamage() == 150) { - return true; - } - } - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return isItemStackTurbine(aStack); - } - - private int mRefreshTime = 1200; - private boolean mDescending = true; - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mRefreshTime", mRefreshTime); - aNBT.setBoolean("mDescending", mDescending); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mRefreshTime = aNBT.getInteger("mRefreshTime"); - mDescending = aNBT.getBoolean("mDescending"); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer != null) { - if (KeyboardUtils.isCtrlKeyDown()) { - mDescending = !mDescending; - PlayerUtils.messagePlayer(aPlayer, "Direction: " + (mDescending ? "DOWN" : "UP")); - } else { - int aAmount = 0; - if (KeyboardUtils.isShiftKeyDown()) { - aAmount = 10; - } else { - aAmount = 100; - } - if (mDescending) { - mRefreshTime -= aAmount; - if (mRefreshTime < 0) { - mRefreshTime = 1200; - } - } else { - mRefreshTime += aAmount; - if (mRefreshTime > 1200) { - mRefreshTime = 0; - } - } - PlayerUtils.messagePlayer(aPlayer, "Set check time to be every " + mRefreshTime + " ticks."); - } - } - } - - @Override - public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - boolean aDidScrewdriver = false; - if (aPlayer != null) { - if (aPlayer.getHeldItem() != null) { - if (isItemStackScrewdriver(aPlayer.getHeldItem())) { - aDidScrewdriver = true; - mRefreshTime = 1200; - PlayerUtils.messagePlayer(aPlayer, "Reset check time to " + mRefreshTime + " ticks."); - } - } - } - if (!aDidScrewdriver) { - super.onLeftclick(aBaseMetaTileEntity, aPlayer); - } - } - - @Override - public boolean allowSelectCircuit() { - return false; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new SlotWidget(inventoryHandler, 0).setFilter(GregtechMetaTileEntity_LargerTurbineBase::isValidTurbine) - .setAccess(false, true) - .setPos(79, 34)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SuperBus_Input.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SuperBus_Input.java deleted file mode 100644 index 5794e6adf8..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SuperBus_Input.java +++ /dev/null @@ -1,65 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow.Builder; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.Scrollable; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gtPlusPlus.core.lib.CORE; - -public class GT_MetaTileEntity_SuperBus_Input extends GT_MetaTileEntity_Hatch_InputBus { - - public GT_MetaTileEntity_SuperBus_Input(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, getSlots(aTier) + 1); - } - - public GT_MetaTileEntity_SuperBus_Input(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, getSlots(aTier) + 1, aDescription, aTextures); - } - - /** - * Returns a factor of 16 based on tier. - * - * @param aTier The tier of this bus. - * @return (1 + aTier) * 16 - */ - public static int getSlots(int aTier) { - return (1 + aTier) * 16; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_SuperBus_Input(this.mName, this.mTier, mDescriptionArray, this.mTextures); - } - - @Override - public String[] getDescription() { - return new String[] { "Item Input for Multiblocks", "" + getSlots(this.mTier) + " Slots", - CORE.GT_Tooltip.get() }; - } - - @Override - public int getCircuitSlot() { - return getSlots(mTier); - } - - @Override - public void addUIWidgets(Builder builder, UIBuildContext buildContext) { - final Scrollable scrollable = new Scrollable().setVerticalScroll(); - for (int row = 0; row * 4 < inventoryHandler.getSlots() - 1; row++) { - int columnsToMake = Math.min(inventoryHandler.getSlots() - row * 4, 4); - for (int column = 0; column < columnsToMake; column++) { - scrollable.widget( - new SlotWidget(inventoryHandler, row * 4 + column).setPos(column * 18, row * 18) - .setSize(18, 18)); - } - } - builder.widget( - scrollable.setSize(18 * 4 + 4, 18 * 4) - .setPos(52, 7)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SuperBus_Output.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SuperBus_Output.java deleted file mode 100644 index f5f80bed11..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_SuperBus_Output.java +++ /dev/null @@ -1,113 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import net.minecraft.inventory.IInventory; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow.Builder; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.Scrollable; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.gui.widgets.GT_PhantomItemButton; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; - -public class GT_MetaTileEntity_SuperBus_Output extends GT_MetaTileEntity_Hatch_OutputBus { - - public GT_MetaTileEntity_SuperBus_Output(int id, String name, String nameRegional, int tier) { - super(id, name, nameRegional, tier, getSlots(tier)); - } - - public GT_MetaTileEntity_SuperBus_Output(String name, int tier, String[] description, ITexture[][][] textures) { - super(name, tier, getSlots(tier), description, textures); - } - - /** - * Returns a factor of 16 based on tier. - * - * @param aTier The tier of this bus. - * @return (1 + aTier) * 16 - */ - public static int getSlots(int aTier) { - return (1 + aTier) * 16; - } - - @Override - public boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_SuperBus_Output(this.mName, this.mTier, mDescriptionArray, this.mTextures); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { - this.fillStacksIntoFirstSlots(); - } - super.onPostTick(aBaseMetaTileEntity, aTimer); - } - - public void updateSlots() { - for (int i = 0; i < this.mInventory.length; ++i) { - if (this.mInventory[i] != null && this.mInventory[i].stackSize <= 0) { - this.mInventory[i] = null; - } - } - this.fillStacksIntoFirstSlots(); - } - - protected void fillStacksIntoFirstSlots() { - for (int i = 0; i < this.mInventory.length; ++i) { - for (int j = i + 1; j < this.mInventory.length; ++j) { - if (this.mInventory[j] != null && (this.mInventory[i] == null - || GT_Utility.areStacksEqual(this.mInventory[i], this.mInventory[j]))) { - GT_Utility.moveStackFromSlotAToSlotB( - (IInventory) this.getBaseMetaTileEntity(), - (IInventory) this.getBaseMetaTileEntity(), - j, - i, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1); - } - } - } - } - - @Override - public String[] getDescription() { - String[] aDesc = new String[] { "Item Output for Multiblocks", "" + getSlots(this.mTier) + " Slots", - "Left click with data stick to save filter config", "Right click with data stick to load filter config", - CORE.GT_Tooltip.get() }; - return aDesc; - } - - @Override - public void addUIWidgets(Builder builder, UIBuildContext buildContext) { - final Scrollable scrollable = new Scrollable().setVerticalScroll(); - for (int row = 0; row * 4 < inventoryHandler.getSlots() - 1; row++) { - int columnsToMake = Math.min(inventoryHandler.getSlots() - row * 4, 4); - for (int column = 0; column < columnsToMake; column++) { - scrollable.widget( - new SlotWidget(inventoryHandler, row * 4 + column).setPos(column * 18, row * 18) - .setSize(18, 18)); - } - } - builder.widget( - scrollable.setSize(18 * 4 + 4, 18 * 4) - .setPos(52, 7)); - - if (acceptsItemLock()) { - builder.widget( - new GT_PhantomItemButton(this).setPos(getGUIWidth() - 25, 40) - .setBackground(GT_PhantomItemButton.FILTER_BACKGROUND)); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaPipeEntityFluid.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaPipeEntityFluid.java deleted file mode 100644 index e9f9a2dda4..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaPipeEntityFluid.java +++ /dev/null @@ -1,117 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SubTag; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid; -import gregtech.api.render.TextureFactory; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; - -public class GregtechMetaPipeEntityFluid extends GT_MetaPipeEntity_Fluid { - - public final GT_Materials mMaterial; - - public GregtechMetaPipeEntityFluid(int aID, String aName, String aNameRegional, float aThickNess, - GT_Materials aMaterial, int aCapacity, int aHeatResistance, boolean aGasProof) { - this(aID, aName, aNameRegional, aThickNess, aMaterial, aCapacity, aHeatResistance, aGasProof, 1); - } - - public GregtechMetaPipeEntityFluid(final String aName, final float aThickNess, final GT_Materials aMaterial, - final int aCapacity, final int aHeatResistance, final boolean aGasProof) { - this(aName, aThickNess, aMaterial, aCapacity, aHeatResistance, aGasProof, 1); - } - - public GregtechMetaPipeEntityFluid(int aID, String aName, String aNameRegional, float aThickNess, - GT_Materials aMaterial, int aCapacity, int aHeatResistance, boolean aGasProof, int aFluidTypes) { - super(aID, aName, aNameRegional, aThickNess, null, aCapacity, aHeatResistance, aGasProof, aFluidTypes); - this.mLastReceivedFrom = 0; - this.oLastReceivedFrom = 0; - this.mMaterial = aMaterial; - } - - public GregtechMetaPipeEntityFluid(String aName, float aThickNess, GT_Materials aMaterial, int aCapacity, - int aHeatResistance, boolean aGasProof, int aFluidTypes) { - super(aName, aThickNess, null, aCapacity, aHeatResistance, aGasProof, aFluidTypes); - this.mLastReceivedFrom = 0; - this.oLastReceivedFrom = 0; - this.mMaterial = aMaterial; - } - - @Override - public byte getTileEntityBaseType() { - return this.mMaterial == null ? 4 - : (byte) ((this.mMaterial.contains(SubTag.WOOD) ? 12 : 4) - + Math.max(0, Math.min(3, this.mMaterial.mToolQuality))); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaPipeEntityFluid( - this.mName, - this.mThickNess, - this.mMaterial, - this.mCapacity, - this.mHeatResistance, - this.mGasProof); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, - int aColorIndex, boolean aConnected, boolean aRedstone) { - float tThickNess = getThickNess(); - if (mDisableInput == 0) - return new ITexture[] { aConnected ? getBaseTexture(tThickNess, mPipeAmount, mMaterial, aColorIndex) - : TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)) }; - int tMask = 0; - int[][] sRestrictionArray = { { 2, 3, 5, 4 }, { 2, 3, 5, 4 }, { 1, 0, 5, 4 }, { 1, 0, 4, 5 }, { 1, 0, 2, 3 }, - { 1, 0, 2, 3 } }; - if (side != ForgeDirection.UNKNOWN) { - for (int i = 0; i < 4; i++) - if (isInputDisabledAtSide(ForgeDirection.getOrientation(sRestrictionArray[side.ordinal()][i]))) - tMask |= 1 << i; - // Full block size renderer flips side 5 and 2 textures, flip restrictor textures to compensate - if (side == ForgeDirection.EAST || side == ForgeDirection.UP) - if (tMask > 3 && tMask < 12) tMask = (tMask ^ 12); - } - return new ITexture[] { aConnected ? getBaseTexture(tThickNess, mPipeAmount, mMaterial, aColorIndex) - : TextureFactory.of( - mMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], - Dyes.getModulation(aColorIndex, mMaterial.mRGBa)), - getRestrictorTexture(tMask) }; - } - - protected static ITexture getBaseTexture(float aThickNess, int aPipeAmount, GT_Materials aMaterial, - int aColorIndex) { - if (aPipeAmount >= 9) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeNonuple.mTextureIndex], - Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); - if (aPipeAmount >= 4) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeQuadruple.mTextureIndex], - Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); - if (aThickNess < 0.124F) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipe.mTextureIndex], - Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); - if (aThickNess < 0.374F) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeTiny.mTextureIndex], - Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); - if (aThickNess < 0.499F) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeSmall.mTextureIndex], - Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); - if (aThickNess < 0.749F) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeMedium.mTextureIndex], - Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); - if (aThickNess < 0.874F) return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeLarge.mTextureIndex], - Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); - return TextureFactory.of( - aMaterial.mIconSet.mTextures[OrePrefixes.pipeHuge.mTextureIndex], - Dyes.getModulation(aColorIndex, aMaterial.mRGBa)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaPipeEntity_Cable.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaPipeEntity_Cable.java deleted file mode 100644 index 9b1408ba51..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaPipeEntity_Cable.java +++ /dev/null @@ -1,156 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TextureSet; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.metatileentity.IMetaTileEntityCable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Utility; - -public class GregtechMetaPipeEntity_Cable extends GT_MetaPipeEntity_Cable implements IMetaTileEntityCable { - - private static Textures.BlockIcons INSULATION_MEDIUM_PLUS; - - static { - try { - INSULATION_MEDIUM_PLUS = (Textures.BlockIcons) GT_Utility - .getField(Textures.BlockIcons.class, "INSULATION_MEDIUM_PLUS") - .get(null); - } catch (IllegalAccessException | NullPointerException e) { - throw new Error(e); - } - } - - private short[] vRGB = null; - - public GregtechMetaPipeEntity_Cable(final int aID, final String aName, final String aNameRegional, - final float aThickNess, final Materials aMaterial, final long aCableLossPerMeter, final long aAmperage, - final long aVoltage, final boolean aInsulated, final boolean aCanShock, final short[] aRGB) { - super( - aID, - aName, - aNameRegional, - aThickNess, - aMaterial, - aCableLossPerMeter, - aAmperage, - aVoltage, - aInsulated, - aCanShock); - this.vRGB = aRGB == null || aRGB.length != 4 ? Materials.Iron.mRGBa : aRGB; - } - - public GregtechMetaPipeEntity_Cable(final String aName, final float aThickNess, final Materials aMaterial, - final long aCableLossPerMeter, final long aAmperage, final long aVoltage, final boolean aInsulated, - final boolean aCanShock, final short[] aRGB) { - super(aName, aThickNess, aMaterial, aCableLossPerMeter, aAmperage, aVoltage, aInsulated, aCanShock); - this.vRGB = aRGB == null || aRGB.length != 4 ? Materials.Iron.mRGBa : aRGB; - } - - public GregtechMetaPipeEntity_Cable(final int aID, final String aName, final String aNameRegional, - final float aThickNess, final long aCableLossPerMeter, final long aAmperage, final long aVoltage, - final boolean aInsulated, final boolean aCanShock, final short[] aRGB) { - this( - aID, - aName, - aNameRegional, - aThickNess, - null, - aCableLossPerMeter, - aAmperage, - aVoltage, - aInsulated, - aCanShock, - aRGB); - } - - public GregtechMetaPipeEntity_Cable(final String aName, final float aThickNess, final long aCableLossPerMeter, - final long aAmperage, final long aVoltage, final boolean aInsulated, final boolean aCanShock, - final short[] aRGB) { - this(aName, aThickNess, null, aCableLossPerMeter, aAmperage, aVoltage, aInsulated, aCanShock, aRGB); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaPipeEntity_Cable( - this.mName, - this.mThickNess, - this.mMaterial, - this.mCableLossPerMeter, - this.mAmperage, - this.mVoltage, - this.mInsulated, - this.mCanShock, - this.vRGB); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, - int aColorIndex, boolean aConnected, boolean aRedstone) { - return getTextureGTNH(aBaseMetaTileEntity, side, aConnections, aColorIndex, aConnected, aRedstone); - } - - private ITexture[] getTextureGTNH(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection aSide, int aConnections, - int aColorIndex, boolean aConnected, boolean aRedstone) { - - Materials wireMaterial = mMaterial; - if (wireMaterial == null) { - wireMaterial = Materials.Iron; - } - - if (!mInsulated) return new ITexture[] { new GT_RenderedTexture( - wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], - Dyes.getModulation(aColorIndex, vRGB)) }; - if (aConnected) { - float tThickNess = getThickNess(); - if (tThickNess < 0.124F) return new ITexture[] { new GT_RenderedTexture( - Textures.BlockIcons.INSULATION_FULL, - Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - if (tThickNess < 0.374F) // 0.375 x1 - return new ITexture[] { - new GT_RenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), - new GT_RenderedTexture( - Textures.BlockIcons.INSULATION_TINY, - Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - if (tThickNess < 0.499F) // 0.500 x2 - return new ITexture[] { - new GT_RenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), - new GT_RenderedTexture( - Textures.BlockIcons.INSULATION_SMALL, - Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - if (tThickNess < 0.624F) // 0.625 x4 - return new ITexture[] { - new GT_RenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), - new GT_RenderedTexture( - Textures.BlockIcons.INSULATION_MEDIUM, - Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - if (tThickNess < 0.749F) // 0.750 x8 - return new ITexture[] { - new GT_RenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), - new GT_RenderedTexture( - INSULATION_MEDIUM_PLUS, - Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - if (tThickNess < 0.874F) // 0.825 x12 - return new ITexture[] { - new GT_RenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), - new GT_RenderedTexture( - Textures.BlockIcons.INSULATION_LARGE, - Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - return new ITexture[] { - new GT_RenderedTexture(wireMaterial.mIconSet.mTextures[TextureSet.INDEX_wire], vRGB), - new GT_RenderedTexture( - Textures.BlockIcons.INSULATION_HUGE, - Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - } - return new ITexture[] { new GT_RenderedTexture( - Textures.BlockIcons.INSULATION_FULL, - Dyes.getModulation(aColorIndex, Dyes.CABLE_INSULATION.mRGBa)) }; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaTreeFarmerStructural.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaTreeFarmerStructural.java deleted file mode 100644 index 0aaaa75584..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/GregtechMetaTreeFarmerStructural.java +++ /dev/null @@ -1,49 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; - -import net.minecraft.nbt.NBTTagCompound; - -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.objects.GT_RenderedTexture; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.machines.GregtechMetaTreeFarmerBase; - -public class GregtechMetaTreeFarmerStructural extends GregtechMetaTreeFarmerBase { - - public GregtechMetaTreeFarmerStructural(final int aID, final String aName, final String aNameRegional, - final int aTier) { - super(aID, aName, aNameRegional, aTier, 0, "Structural Blocks for the Tree Farmer."); - } - - public GregtechMetaTreeFarmerStructural(final String aName, final int aTier, final int aInvSlotCount, - final String[] aDescription, final ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTreeFarmerStructural( - this.mName, - this.mTier, - this.mInventory.length, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture getOverlayIcon() { - return new GT_RenderedTexture(Textures.BlockIcons.VOID); - } - - @Override - public boolean isValidSlot(final int aIndex) { - return false; - } - - @Override - public void saveNBTData(final NBTTagCompound paramNBTTagCompound) {} - - @Override - public void loadNBTData(final NBTTagCompound paramNBTTagCompound) {} -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/METHatchAirIntake.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/METHatchAirIntake.java new file mode 100644 index 0000000000..e475037c63 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/METHatchAirIntake.java @@ -0,0 +1,127 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.FluidUtils; + +public class METHatchAirIntake extends MTEHatchFluidGenerator { + + public METHatchAirIntake(final int aID, final String aName, final String aNameRegional, final int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public METHatchAirIntake(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new METHatchAirIntake(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public String[] getCustomTooltip() { + String[] aTooltip = new String[3]; + aTooltip[0] = "DO NOT OBSTRUCT THE INPUT!"; + aTooltip[1] = "Draws in Air from the surrounding environment"; + aTooltip[2] = "Creates " + getAmountOfFluidToGenerate() + "L of Air every " + getMaxTickTime() + " ticks"; + return aTooltip; + } + + @Override + public Fluid getFluidToGenerate() { + return FluidUtils.getAir(1) + .getFluid(); + } + + @Override + public int getAmountOfFluidToGenerate() { + return 1000; + } + + @Override + public int getMaxTickTime() { + return 4; + } + + @Override + public int getCapacity() { + return 128000; + } + + @Override + public boolean doesHatchMeetConditionsToGenerate() { + return this.getBaseMetaTileEntity() + .getAirAtSide( + this.getBaseMetaTileEntity() + .getFrontFacing()); + } + + @Override + public void generateParticles(World aWorld, String name) { + if (this.getBaseMetaTileEntity() + .isServerSide()) { + return; + } + final float ran1 = METHatchAirIntake.floatGen.nextFloat(); + float ran2 = 0.0f; + float ran3 = 0.0f; + ran2 = METHatchAirIntake.floatGen.nextFloat(); + ran3 = METHatchAirIntake.floatGen.nextFloat(); + + final IGregTechTileEntity aMuffler = this.getBaseMetaTileEntity(); + final ForgeDirection aDir = aMuffler.getFrontFacing(); + final float xPos = aDir.offsetX * 0.76f + aMuffler.getXCoord() + 0.25f; + float yPos = aDir.offsetY * 0.76f + aMuffler.getYCoord() + 0.65f; + final float zPos = aDir.offsetZ * 0.76f + aMuffler.getZCoord() + 0.25f; + float ySpd = aDir.offsetY * 0.1f + 0.2f + 0.1f * METHatchAirIntake.floatGen.nextFloat(); + float xSpd; + float zSpd; + if (aDir.offsetY == -1) { + // Logger.INFO("Y = -1"); + final float temp = METHatchAirIntake.floatGen.nextFloat() * 2.0f * GTPPCore.PI; + xSpd = (float) Math.sin(temp) * 0.1f; + zSpd = (float) Math.cos(temp) * 0.1f; + ySpd = -ySpd; + yPos = yPos - 0.8f; + } else { + xSpd = aDir.offsetX * (0.1f + 0.2f * METHatchAirIntake.floatGen.nextFloat()); + zSpd = aDir.offsetZ * (0.1f + 0.2f * METHatchAirIntake.floatGen.nextFloat()); + + xSpd = -xSpd; + zSpd = -zSpd; + } + + aWorld.spawnParticle( + name, + (double) (xPos + ran1 * 0.5f), + (double) (yPos + METHatchAirIntake.floatGen.nextFloat() * 0.5f), + (double) (zPos + METHatchAirIntake.floatGen.nextFloat() * 0.5f), + (double) xSpd, + (double) -ySpd, + (double) zSpd); + aWorld.spawnParticle( + name, + (double) (xPos + ran2 * 0.5f), + (double) (yPos + METHatchAirIntake.floatGen.nextFloat() * 0.5f), + (double) (zPos + METHatchAirIntake.floatGen.nextFloat() * 0.5f), + (double) xSpd, + (double) -ySpd, + (double) zSpd); + aWorld.spawnParticle( + name, + (double) (xPos + ran3 * 0.5f), + (double) (yPos + METHatchAirIntake.floatGen.nextFloat() * 0.5f), + (double) (zPos + METHatchAirIntake.floatGen.nextFloat() * 0.5f), + (double) xSpd, + (double) -ySpd, + (double) zSpd); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchAirIntakeExtreme.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchAirIntakeExtreme.java new file mode 100644 index 0000000000..a03f8bada1 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchAirIntakeExtreme.java @@ -0,0 +1,32 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; + +public class MTEHatchAirIntakeExtreme extends METHatchAirIntake { + + public MTEHatchAirIntakeExtreme(final int aID, final String aName, final String aNameRegional, final int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEHatchAirIntakeExtreme(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEHatchAirIntakeExtreme(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public int getAmountOfFluidToGenerate() { + return 8000; + } + + @Override + public int getCapacity() { + return 256000; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchChiselBus.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchChiselBus.java new file mode 100644 index 0000000000..e9d13f3c48 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchChiselBus.java @@ -0,0 +1,78 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import net.minecraft.util.EnumChatFormatting; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.Scrollable; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; + +public class MTEHatchChiselBus extends MTEHatchInputBus implements IAddUIWidgets { + + public MTEHatchChiselBus(int id, String name, String nameRegional, int tier) { + super(id, name, nameRegional, tier); + } + + public MTEHatchChiselBus(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, getSlots(aTier), aDescription, aTextures); + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex < getSlots(this.mTier); + } + + public static int getSlots(int aTier) { + return (1 + aTier) * 16 + 1; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchChiselBus(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean allowSelectCircuit() { + return false; + } + + @Override + public String[] getDescription() { + return new String[] { "Item Input Bus for Industrial Chisel", getSlots(this.mTier) - 1 + " + 1 " + " Slots", + "Added by: " + EnumChatFormatting.AQUA + + "Quetz4l" + + " - " + + EnumChatFormatting.RED + + "[GT++]" + + EnumChatFormatting.RESET }; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + int slotIndex = 0; + final Scrollable scrollable = new Scrollable().setVerticalScroll(); + for (int row = 0; row * 4 < inventoryHandler.getSlots() - 1; row++) { + int columnsToMake = Math.min(inventoryHandler.getSlots() - row * 4, 4); + for (int column = 0; column < columnsToMake; column++) { + scrollable.widget( + new SlotWidget(inventoryHandler, slotIndex++).setPos(column * 18, row * 18) + .setSize(18, 18)); + + } + } + + builder.widget( + scrollable.setSize(18 * 4 + 4, 18 * 4) + .setPos(52, 7)); // main slots + builder.widget( + new SlotWidget(inventoryHandler, slotIndex).setPos(18, 18) + .setSize(18, 18)); // slot for target + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchDynamoBuffer.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchDynamoBuffer.java new file mode 100644 index 0000000000..90b3648583 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchDynamoBuffer.java @@ -0,0 +1,66 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEHatchDynamoBuffer extends MTEHatchDynamo { + + public MTEHatchDynamoBuffer(final int aID, final String aName, final String aNameRegional, final int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEHatchDynamoBuffer(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(final ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TexturesGtBlock.OVERLAYS_ENERGY_OUT_MULTI_BUFFER[this.mTier] }; + } + + @Override + public ITexture[] getTexturesInactive(final ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TexturesGtBlock.OVERLAYS_ENERGY_OUT_MULTI_BUFFER[this.mTier] }; + } + + @Override + public long getMinimumStoredEU() { + return 0L; + } + + @Override + public long maxEUStore() { + return 512L + GTValues.V[this.mTier + 1] * 2048L; + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEHatchDynamoBuffer(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public String[] getDescription() { + String[] g; + g = new String[] { "Dynamo with internal storage and additional Amp capacity", + "Does not accept more than " + (this.maxEUOutput() * this.maxAmperesIn()) + "EU/t as input", + GTPPCore.GT_Tooltip.get() }; + + return g; + } + + @Override + public long maxAmperesIn() { + return 4; + } + + @Override + public long maxAmperesOut() { + return 4; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchElementalDataOrbHolder.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchElementalDataOrbHolder.java new file mode 100644 index 0000000000..0043819b23 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchElementalDataOrbHolder.java @@ -0,0 +1,221 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import java.util.ArrayList; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; + +import gregtech.api.enums.ItemList; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IConfigurationCircuitSupport; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEHatchElementalDataOrbHolder extends MTEHatch implements IConfigurationCircuitSupport { + + public MTEHatchElementalDataOrbHolder(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 17, + new String[] { "Holds Data Orbs for the Elemental Duplicator", "Can insert/extract the circuit slot", + "A circuit must be used to select a slot (1-16)", GTPPCore.GT_Tooltip.get() }); + } + + public MTEHatchElementalDataOrbHolder(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 17, aDescription, aTextures); + } + + public MTEHatchElementalDataOrbHolder(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 17, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Hatch_Data_Orb) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Hatch_Data_Orb) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + 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 MTEHatchElementalDataOrbHolder(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { + fillStacksIntoFirstSlots(); + } + } + + public void updateSlots() { + for (int i = 0; i < mInventory.length - 1; i++) + if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null; + fillStacksIntoFirstSlots(); + } + + protected void fillStacksIntoFirstSlots() { + for (int i = 0; i < mInventory.length - 1; i++) { + if (mInventory[i] != null && mInventory[i].stackSize <= 0) { + mInventory[i] = null; + } + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {} + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + Logger.INFO("Checking if we can pull " + aStack.getDisplayName() + " from slot " + aIndex); + if (aIndex == mInventory.length - 1 && ItemUtils.isControlCircuit(aStack) + && side == getBaseMetaTileEntity().getFrontFacing()) { + return true; + } + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + Logger.INFO("Checking if we can put " + aStack.getDisplayName() + " into slot " + aIndex); + if (aIndex == mInventory.length - 1 && ItemUtils.isControlCircuit(aStack) + && side == getBaseMetaTileEntity().getFrontFacing()) { + return true; + } + return false; + } + + public ArrayList getInventory() { + ArrayList aContents = new ArrayList<>(); + for (int i = getBaseMetaTileEntity().getSizeInventory() - 2; i >= 0; i--) { + if (getBaseMetaTileEntity().getStackInSlot(i) != null) + aContents.add(getBaseMetaTileEntity().getStackInSlot(i)); + } + return aContents; + } + + public ItemStack getOrbByCircuit() { + ItemStack aCirc = getBaseMetaTileEntity().getStackInSlot(getCircuitSlot()); + if (aCirc != null && ItemUtils.isControlCircuit(aCirc)) { + int slot = aCirc.getItemDamage() - 1; // slots are 0 indexed but there's no 0 circuit + if (slot < getBaseMetaTileEntity().getSizeInventory() - 1) { + return getBaseMetaTileEntity().getStackInSlot(slot); + } else { + return null; + } + } else { + return null; + } + } + + @Override + public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { + if (aIndex == mInventory.length - 1 && ItemUtils.isControlCircuit(aStack) + && ordinalSide == getBaseMetaTileEntity().getFrontFacing() + .ordinal()) { + Logger.INFO("Putting " + aStack.getDisplayName() + " into slot " + aIndex); + return true; + } + return false; + } + + @Override + public boolean canExtractItem(int aIndex, ItemStack aStack, int ordinalSide) { + if (aIndex == mInventory.length - 1 && ItemUtils.isControlCircuit(aStack)) { + Logger.INFO("Pulling " + aStack.getDisplayName() + " from slot " + aIndex); + return true; + } + return false; + } + + @Override + public boolean allowSelectCircuit() { + return true; + } + + @Override + public int getCircuitSlot() { + return getSlots(mTier); + } + + @Override + public int getCircuitSlotX() { + return 153; + } + + @Override + public int getCircuitSlotY() { + return 63; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 4) + .startFromSlot(0) + .endAtSlot(15) + .background(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_DATA_ORB) + .applyForWidget( + widget -> widget.setFilter(stack -> ItemList.Tool_DataOrb.isStackEqual(stack, false, true))) + .build() + .setPos(52, 7)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchFluidGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchFluidGenerator.java new file mode 100644 index 0000000000..638176c4b5 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchFluidGenerator.java @@ -0,0 +1,254 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.objects.XSTR; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.FluidUtils; + +public abstract class MTEHatchFluidGenerator extends MTEHatchInput { + + protected static XSTR floatGen = new XSTR(); + public int mProgresstime = 0, mMaxProgresstime = 0; + + public MTEHatchFluidGenerator(final int aID, final String aName, final String aNameRegional, final int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEHatchFluidGenerator(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public abstract String[] getCustomTooltip(); + + public abstract Fluid getFluidToGenerate(); + + public abstract int getAmountOfFluidToGenerate(); + + public abstract int getMaxTickTime(); + + @Override + public synchronized String[] getDescription() { + mDescriptionArray[1] = "Capacity: " + GTUtility.formatNumbers(getCapacity()) + "L"; + final String[] hatchTierString = new String[] { "Hatch Tier: " + GTUtility.getColoredTierNameFromTier(mTier) }; + + String[] aCustomTips = getCustomTooltip(); + final String[] desc = new String[mDescriptionArray.length + aCustomTips.length + 2]; + System.arraycopy(mDescriptionArray, 0, desc, 0, mDescriptionArray.length); + System.arraycopy(hatchTierString, 0, desc, mDescriptionArray.length, 1); + System.arraycopy(aCustomTips, 0, desc, mDescriptionArray.length + 1, aCustomTips.length); + desc[mDescriptionArray.length + aCustomTips.length] = GTPPCore.GT_Tooltip.get(); + return desc; + } + + @Override + public ITexture[] getTexturesActive(final ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture((IIconContainer) Textures.BlockIcons.OVERLAY_MUFFLER) }; + } + + @Override + public ITexture[] getTexturesInactive(final ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture((IIconContainer) Textures.BlockIcons.OVERLAY_MUFFLER) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(final ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(final int aIndex) { + return false; + } + + @Override + public abstract MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity); + + public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (!aBaseMetaTileEntity.isAllowedToWork()) { + aBaseMetaTileEntity.setActive(false); + mProgresstime = 0; + mMaxProgresstime = 0; + } else { + aBaseMetaTileEntity.setActive(true); + mMaxProgresstime = getMaxTickTime(); + if (++mProgresstime >= mMaxProgresstime) { + if (this.canTankBeFilled()) { + addFluidToHatch(aTick); + } + mProgresstime = 0; + } + } + } + + @Override + public int getProgresstime() { + return mProgresstime; + } + + @Override + public int maxProgresstime() { + return mMaxProgresstime; + } + + @Override + public int increaseProgress(int aProgress) { + mProgresstime += aProgress; + return mMaxProgresstime - mProgresstime; + } + + public abstract void generateParticles(final World aWorld, final String name); + + @Override + public int getTankPressure() { + return 100; + } + + @Override + public abstract int getCapacity(); + + @Override + public boolean canTankBeEmptied() { + return true; + } + + public abstract boolean doesHatchMeetConditionsToGenerate(); + + public boolean addFluidToHatch(long aTick) { + if (!doesHatchMeetConditionsToGenerate()) { + return false; + } + int aFillAmount = this.fill(FluidUtils.getFluidStack(getFluidToGenerate(), getAmountOfFluidToGenerate()), true); + if (aFillAmount > 0) { + if (this.getBaseMetaTileEntity() + .isClientSide()) { + generateParticles( + this.getBaseMetaTileEntity() + .getWorld(), + "cloud"); + } + } + return aFillAmount > 0; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean doesFillContainers() { + return true; + } + + @Override + public int fill(FluidStack aFluid, boolean doFill) { + if (aFluid == null || aFluid.getFluid() + .getID() <= 0 || aFluid.amount <= 0 || aFluid.getFluid() != getFluidToGenerate() || !canTankBeFilled()) { + return 0; + } + + if (getFillableStack() == null || getFillableStack().getFluid() + .getID() <= 0) { + if (aFluid.amount <= getCapacity()) { + if (doFill) { + setFillableStack(aFluid.copy()); + getBaseMetaTileEntity().markDirty(); + } + return aFluid.amount; + } + if (doFill) { + setFillableStack(aFluid.copy()); + getFillableStack().amount = getCapacity(); + getBaseMetaTileEntity().markDirty(); + } + return getCapacity(); + } + + if (!getFillableStack().isFluidEqual(aFluid)) return 0; + + int space = getCapacity() - getFillableStack().amount; + if (aFluid.amount <= space) { + if (doFill) { + getFillableStack().amount += aFluid.amount; + getBaseMetaTileEntity().markDirty(); + } + return aFluid.amount; + } + if (doFill) getFillableStack().amount = getCapacity(); + return space; + } + + @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; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mProgresstime", mProgresstime); + aNBT.setInteger("mMaxProgresstime", mMaxProgresstime); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mProgresstime = aNBT.getInteger("mProgresstime"); + mMaxProgresstime = aNBT.getInteger("mMaxProgresstime"); + super.loadNBTData(aNBT); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchInputBattery.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchInputBattery.java new file mode 100644 index 0000000000..99000edc8f --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchInputBattery.java @@ -0,0 +1,229 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; + +import gregtech.api.enums.GTValues; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.gui.widget.ElectricSlotWidget; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEHatchInputBattery extends MTEHatch { + + public final RecipeMap mRecipeMap = null; + + public MTEHatchInputBattery(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, getSlots(aTier), "Chargeable Item Bus for Multiblocks"); + } + + public MTEHatchInputBattery(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aTier < 1 ? 1 : aTier == 1 ? 4 : aTier == 2 ? 4 : 16, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + int mSlots = 0; + if (this.mTier == 2) { + mSlots = 4; + } else if (this.mTier == 4) { + mSlots = 16; + } else { + mSlots = 16; + } + return ArrayUtils.addAll(this.mDescriptionArray, "Capacity: " + mSlots + " slots", GTPPCore.GT_Tooltip.get()); + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public long getMinimumStoredEU() { + return 0; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxEUStore() { + return 512 + V[mTier + 1] * 16; + } + + @Override + public long maxAmperesIn() { + return 4; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Hatch_Charger) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Hatch_Charger) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + 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 MTEHatchInputBattery(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { + fillStacksIntoFirstSlots(); + } + if (aBaseMetaTileEntity.isServerSide()) { + if (aBaseMetaTileEntity.getMetaTileEntity() instanceof MetaTileEntity mMetaTileEntity) { + if (mMetaTileEntity.rechargerSlotCount() > 0 && aBaseMetaTileEntity.getStoredEU() > 0) { + for (int i = mMetaTileEntity.rechargerSlotStartIndex(), + k = mMetaTileEntity.rechargerSlotCount() + i; i < k; i++) { + if (aBaseMetaTileEntity.getStoredEU() > 0 && mMetaTileEntity.mInventory[i] != null) { + for (int u = 0; u < 10; u++) { + aBaseMetaTileEntity.decreaseStoredEnergyUnits( + GTModHandler.chargeElectricItem( + mMetaTileEntity.mInventory[i], + (int) Math.min(V[this.mTier] * 15, aBaseMetaTileEntity.getStoredEU()), + (int) Math.min(Integer.MAX_VALUE, GTValues.V[u]), + false, + false), + true); + if (mMetaTileEntity.mInventory[i].stackSize <= 0) { + mMetaTileEntity.mInventory[i] = null; + } + } + } + } + } else {} + } + } + super.onPostTick(aBaseMetaTileEntity, aTimer); + } + + 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() { + for (int i = 0; i < mInventory.length; i++) + for (int j = i + 1; j < mInventory.length; j++) if (mInventory[j] != null + && (mInventory[i] == null || GTUtility.areStacksEqual(mInventory[i], mInventory[j]))) { + GTUtility.moveStackFromSlotAToSlotB( + getBaseMetaTileEntity(), + getBaseMetaTileEntity(), + j, + i, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1); + } + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == getBaseMetaTileEntity().getFrontFacing() + && (mRecipeMap == null || mRecipeMap.containsInput(aStack)); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == getBaseMetaTileEntity().getFrontFacing() + && (mRecipeMap == null || mRecipeMap.containsInput(aStack)); + } + + @Override + public int rechargerSlotStartIndex() { + return 0; + } + + @Override + public int rechargerSlotCount() { + return switch (mTier) { + case 2 -> 4; + case 4 -> 16; + default -> 16; + }; + } + + @Override + public int dechargerSlotStartIndex() { + return 0; + } + + @Override + public int dechargerSlotCount() { + return 0; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + if (mTier == 2) { + for (int i = 0; i < 4; i++) { + builder + .widget(new ElectricSlotWidget(inventoryHandler, i).setPos(70 + (i % 2) * 18, 25 + (i / 2) * 18)); + } + } else { + for (int i = 0; i < 16; i++) { + builder.widget(new ElectricSlotWidget(inventoryHandler, i).setPos(52 + (i % 4) * 18, 7 + (i / 4) * 18)); + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchMufflerAdvanced.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchMufflerAdvanced.java new file mode 100644 index 0000000000..2cf1ed3efe --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchMufflerAdvanced.java @@ -0,0 +1,363 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.GTMod; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.common.Pollution; +import gtPlusPlus.core.item.general.ItemAirFilter; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; +import gtPlusPlus.xmod.gregtech.api.gui.GTPPUITextures; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEHatchMufflerAdvanced extends MTEHatchMuffler implements IAddGregtechLogo { + + protected int SLOT_FILTER = 0; + + @Override + public void onConfigLoad() { + super.onConfigLoad(); + try { + int a1 = GTMod.gregtechproxy.mPollutionSmogLimit; + if (a1 > 0) { + mPollutionSmogLimit = a1; + } + } catch (Throwable t) { + mPollutionSmogLimit = 500000; + } + } + + private int mPollutionSmogLimit = 500000; + + public MTEHatchMufflerAdvanced(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 1, new String[] { "" }); + } + + public MTEHatchMufflerAdvanced(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures); + } + + final String[] mDescription = new String[] { "Outputs pollution from a multiblock", "DO NOT OBSTRUCT THE OUTPUT!", + "Requires 3 Air Blocks in front of the exhaust face", + mTier < 5 ? "Requires an Air Filter" + : "Requires an Air Filter " + EnumChatFormatting.WHITE + "[Tier 2]" + EnumChatFormatting.GRAY, + "Can take Air Filters from an input bus of the multiblock", + "Reduces Pollution to " + calculatePollutionReduction(100, true) + "%", + "Recovers " + (100 - calculatePollutionReduction(100, true)) + "% of CO2/CO/SO2", GTPPCore.GT_Tooltip.get() }; + + @Override + public String[] getDescription() { + return mDescription; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Hatch_Muffler_Adv) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Hatch_Muffler_Adv) }; + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex == SLOT_FILTER; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return (aIndex == this.SLOT_FILTER && isAirFilter(aStack)); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchMufflerAdvanced(this.mName, this.mTier, mDescriptionArray, this.mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean polluteEnvironment(MetaTileEntity parentTileEntity) { + if (!airCheck()) return false; // Muffler obstructed. + + int emission = 10000; + if (damageAirFilter(parentTileEntity)) { + // damageAirFilter already checks that we have a valid filter. + emission = calculatePollutionReduction(emission, true); + } else { + // Revert to reduction of the basic muffler. + emission = super.calculatePollutionReduction(emission); + } + Pollution.addPollution(getBaseMetaTileEntity(), emission); + return true; + } + + @Override + public int calculatePollutionReduction(int aPollution) { + // This is called by EBF to calculate exhaust gas amounts, we need to check the filter. + return calculatePollutionReduction(aPollution, false); + } + + /** + * Calculates pollution reduction. + * + * @param aPollution Amount of pollution to be reduced. + * @param ignoreFilter If this is true, assumes that a valid filter is present without checking (for example, to + * build tooltips). + * @return Amount of pollution after reduction. + */ + protected int calculatePollutionReduction(int aPollution, boolean ignoreFilter) { + if (!ignoreFilter && !hasAirFilter()) { + // Without a filter, downgrade to basic muffler reduction. + return super.calculatePollutionReduction(aPollution); + } + + // Special case to be always better than a basic muffler. + if (mTier < 2) return (int) (aPollution * 0.95); + if (mTier > 8) return 0; + + return (int) (aPollution * Math.pow(0.64D, mTier - 1)); + } + + /** + * + * @return True if enough blocks in front of the muffler are air. + */ + private boolean airCheck() { + IGregTechTileEntity bmte = getBaseMetaTileEntity(); + ForgeDirection facing = bmte.getFrontFacing(); + return bmte.getAirAtSide(facing) && bmte.getAirAtSideAndDistance(facing, 1) + && bmte.getAirAtSideAndDistance(facing, 2); + } + + /** + * Try to damage an air filter. Will first try to find a valid filter in the hatch's own inventory, then in the + * input buses of the parent multiblock. If the filter is destroyed, will try to replace it from the parent + * multiblock's input buses again. + * + * @param parentTileEntity Which multiblock this hatch is a part of. If this is null, only checks inventory of the + * muffler. + * @return True if the filter has been successfully damaged. + */ + private boolean damageAirFilter(MetaTileEntity parentTileEntity) { + if (!findAirFilter(parentTileEntity)) return false; // No filter available. + + ItemStack filter = mInventory[SLOT_FILTER]; + if (filter == null) return false; // This should never happen if findAirFilter() above succeeded. + + long currentDamage = ItemAirFilter.getFilterDamage(filter); + if (currentDamage < ItemAirFilter.getFilterMaxDamage(filter) - 1) { + // Damage filter by one step. + ItemAirFilter.setFilterDamage(filter, currentDamage + 1); + return true; + } else { + // Destroy the filter. + mInventory[SLOT_FILTER] = null; + + // Try to find a new one. + findAirFilter(parentTileEntity); + + // Regardless of whether we have a new filter or not, *this* operation succeeded. + return true; + } + } + + /** + * Try to find a valid air filter in the input buses of the parent multiblock. + * + * @param parentTileEntity Which multiblock this hatch is a part of. If this is null, only checks inventory of the + * muffler. + * @return True if the inventory of the muffler already contains an air filter, or if one was retrieved from the + * parent multiblock. + */ + private boolean findAirFilter(MetaTileEntity parentTileEntity) { + if (hasAirFilter()) return true; // Has a filter in inventory. + if (mInventory[SLOT_FILTER] != null) return false; // Has a non-filter item in inventory. + if (parentTileEntity == null) return false; // Unknown parent multiblock. + + if (parentTileEntity instanceof MTEMultiBlockBase GTMultiBase) { + for (var inputBus : GTMultiBase.mInputBusses) { + for (ItemStack stack : inputBus.mInventory) { + if (isAirFilter(stack)) { + ItemStack stackCopy = stack.copy(); + if (GTMultiBase.depleteInput(stack)) { + mInventory[SLOT_FILTER] = stackCopy; + return true; + } + } + } + } + } + + return false; + } + + /** + * + * @return True if the item currently in the inventory is an air filter valid for this tier of muffler hatch. + */ + private boolean hasAirFilter() { + return isAirFilter(mInventory[SLOT_FILTER]); + } + + /** + * + * @param filter + * @return True if the argument is an air filter valid for this tier of muffler hatch. + */ + public boolean isAirFilter(ItemStack filter) { + if (filter == null) return false; + if (filter.getItem() instanceof ItemAirFilter) { + if (mTier < 5) { + // Accept any filter. + return true; + } else { + // Accept only T2 filter. + return filter.getItemDamage() == 1; + } + } + return false; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (aBaseMetaTileEntity.isClientSide()) { + if (this.getBaseMetaTileEntity() + .isActive()) { + String aParticleName; + if ((aTick % 2) == 0) { + aParticleName = "cloud"; + } else { + aParticleName = "smoke"; + } + this.pollutionParticles( + this.getBaseMetaTileEntity() + .getWorld(), + aParticleName); + } + } + } + + @Override + public void pollutionParticles(World aWorld, String name) { + float ran1 = GTPPCore.RANDOM.nextFloat(); + float ran2 = 0.0F; + float ran3 = 0.0F; + boolean chk1 = ran1 * 100.0F < (float) this.calculatePollutionReduction(100); + boolean chk2; + boolean chk3; + int aPollutionAmount = PollutionUtils.getPollution(getBaseMetaTileEntity()); + if (aPollutionAmount >= mPollutionSmogLimit) { + ran2 = GTPPCore.RANDOM.nextFloat(); + ran3 = GTPPCore.RANDOM.nextFloat(); + chk2 = ran2 * 100.0F < (float) this.calculatePollutionReduction(100); + chk3 = ran3 * 100.0F < (float) this.calculatePollutionReduction(100); + if (!chk1 && !chk2 && !chk3) { + return; + } + } else { + if (!chk1) { + return; + } + + chk3 = false; + chk2 = false; + } + + IGregTechTileEntity aMuffler = this.getBaseMetaTileEntity(); + ForgeDirection aDir = aMuffler.getFrontFacing(); + float xPos = (float) aDir.offsetX * 0.76F + (float) aMuffler.getXCoord() + 0.25F; + float yPos = (float) aDir.offsetY * 0.76F + (float) aMuffler.getYCoord() + 0.25F; + float zPos = (float) aDir.offsetZ * 0.76F + (float) aMuffler.getZCoord() + 0.25F; + float ySpd = (float) aDir.offsetY * 0.1F + 0.2F + 0.1F * GTPPCore.RANDOM.nextFloat(); + float xSpd; + float zSpd; + if (aDir.offsetY == -1) { + float temp = GTPPCore.RANDOM.nextFloat() * 2.0F * GTPPCore.PI; + xSpd = (float) Math.sin((double) temp) * 0.1F; + zSpd = (float) Math.cos((double) temp) * 0.1F; + } else { + xSpd = (float) aDir.offsetX * (0.1F + 0.2F * GTPPCore.RANDOM.nextFloat()); + zSpd = (float) aDir.offsetZ * (0.1F + 0.2F * GTPPCore.RANDOM.nextFloat()); + } + + if (chk1) { + aWorld.spawnParticle( + name, + (double) (xPos + ran1 * 0.5F), + (double) (yPos + GTPPCore.RANDOM.nextFloat() * 0.5F), + (double) (zPos + GTPPCore.RANDOM.nextFloat() * 0.5F), + (double) xSpd, + (double) ySpd, + (double) zSpd); + } + + if (chk2) { + aWorld.spawnParticle( + name, + (double) (xPos + ran2 * 0.5F), + (double) (yPos + GTPPCore.RANDOM.nextFloat() * 0.5F), + (double) (zPos + GTPPCore.RANDOM.nextFloat() * 0.5F), + (double) xSpd, + (double) ySpd, + (double) zSpd); + } + + if (chk3) { + aWorld.spawnParticle( + name, + (double) (xPos + ran3 * 0.5F), + (double) (yPos + GTPPCore.RANDOM.nextFloat() * 0.5F), + (double) (zPos + GTPPCore.RANDOM.nextFloat() * 0.5F), + (double) xSpd, + (double) ySpd, + (double) zSpd); + } + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) {} + + @Override + public GUITextureSet getGUITextureSet() { + return new GUITextureSet().setMainBackground(GTPPUITextures.BACKGROUND_YELLOW) + .setItemSlot(GTPPUITextures.SLOT_ITEM_YELLOW) + .setTitleTab( + GTPPUITextures.TAB_TITLE_YELLOW, + GTPPUITextures.TAB_TITLE_DARK_YELLOW, + GTPPUITextures.TAB_TITLE_ANGULAR_YELLOW); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new SlotWidget(inventoryHandler, 0).setFilter(stack -> stack.getItem() instanceof ItemAirFilter) + .setBackground(getGUITextureSet().getItemSlot()) + .setPos(79, 34)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchNaquadah.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchNaquadah.java new file mode 100644 index 0000000000..43e43a1d4e --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchNaquadah.java @@ -0,0 +1,202 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import java.lang.reflect.Field; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.reflect.ReflectionUtils; + +public class MTEHatchNaquadah extends MTEHatchInput { + + public final FluidStack[] mFluidsToUse = new FluidStack[3]; + public final int mFluidCapacity; + + public MTEHatchNaquadah(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional, 6); + mFluidCapacity = 32000; + initHatch(); + } + + public MTEHatchNaquadah(final String aName, final String[] aDescription, final ITexture[][][] aTextures) { + super(aName, 6, aDescription[0], aTextures); + mFluidCapacity = 32000; + initHatch(); + } + + private void initHatch() { + if (mFluidsToUse[0] == null) { + mFluidsToUse[0] = Materials.Naquadah.getMolten(1); + } + if (mFluidsToUse[1] == null) { + mFluidsToUse[1] = Materials.NaquadahEnriched.getMolten(1); + } + if (mFluidsToUse[2] == null) { + mFluidsToUse[2] = Materials.Naquadria.getMolten(1); + } + } + + @Override + public ITexture[] getTexturesActive(final ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture((IIconContainer) Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE_ACTIVE) }; + } + + @Override + public ITexture[] getTexturesInactive(final ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture((IIconContainer) Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE) }; + } + + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + if (side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 0) { + for (FluidStack f : mFluidsToUse) { + if (f != null) { + if (GTUtility.getFluidForFilledItem(aStack, true) + .getFluid() == f.getFluid()) { + return true; + } + } + } + } + return false; + } + + @Override + public boolean isFluidInputAllowed(final FluidStack aFluid) { + for (FluidStack f : mFluidsToUse) { + if (f != null) { + if (aFluid.getFluid() == f.getFluid()) { + return true; + } + } + } + return false; + } + + @Override + public int getCapacity() { + return this.mFluidCapacity; + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEHatchNaquadah(this.mName, this.mDescriptionArray, this.mTextures); + } + + @Override + public String[] getDescription() { + if (aDescCache[0] == null || aDescCache[0].contains(".name") || aDescCache[0].contains("fluid.")) { + aDescCache[0] = formatFluidString(this.mFluidsToUse[0]); + } + if (aDescCache[1] == null || aDescCache[1].contains(".name") || aDescCache[1].contains("fluid.")) { + aDescCache[1] = formatFluidString(this.mFluidsToUse[1]); + } + if (aDescCache[2] == null || aDescCache[2].contains(".name") || aDescCache[2].contains("fluid.")) { + aDescCache[2] = formatFluidString(this.mFluidsToUse[2]); + } + String aNaq = aDescCache[0]; + String aEnrNaq = aDescCache[1]; + String aNaquad = aDescCache[2]; + String[] s2 = new String[] { "Fluid Input for Multiblocks", "Capacity: " + getCapacity() + "L", + "Accepted Fluid: " + aNaq, "Accepted Fluid: " + aEnrNaq, "Accepted Fluid: " + aNaquad, + GTPPCore.GT_Tooltip.get() }; + return s2; + } + + private static String[] aDescCache = new String[3]; + + private String formatFluidString(FluidStack f) { + FluidStack mLockedStack = f; + Integer mLockedTemp = 0;; + String mTempMod = "" + EnumChatFormatting.RESET; + mLockedTemp = mLockedStack.getFluid() + .getTemperature(); + 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; + } + } + return mTempMod + mLockedStack.getLocalizedName(); + } + + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + // TODO Auto-generated method stub + return super.getTextureSet(aTextures); + } + + private Field F1, F2; + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + byte a1 = 0, a2 = 0; + try { + if (F1 == null) { + F1 = ReflectionUtils.getField(getClass(), "actualTexture"); + } + if (F2 == null) { + F2 = ReflectionUtils.getField(getClass(), "mTexturePage"); + } + + if (F1 != null) { + a1 = F1.getByte(this); + } + if (F2 != null) { + a2 = F2.getByte(this); + } + } catch (IllegalArgumentException | IllegalAccessException n) {} + + int textureIndex = a1 | a2 << 7; + byte texturePointer = (byte) (a1 & 127); + + if (side == ForgeDirection.UP || side == ForgeDirection.DOWN) { + ITexture g = textureIndex > 0 ? BlockIcons.casingTexturePages[a2][texturePointer] + : BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1]; + + return new ITexture[] { g, + new GTRenderedTexture((IIconContainer) Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_TOP_ACTIVE) }; + } + + return side != facing + ? (textureIndex > 0 ? new ITexture[] { BlockIcons.casingTexturePages[a2][texturePointer] } + : new ITexture[] { BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1] }) + : (textureIndex > 0 + ? (aActive ? this.getTexturesActive(BlockIcons.casingTexturePages[a2][texturePointer]) + : this.getTexturesInactive(BlockIcons.casingTexturePages[a2][texturePointer])) + : (aActive ? this.getTexturesActive(BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1]) + : this.getTexturesInactive(BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1]))); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchOutputBattery.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchOutputBattery.java new file mode 100644 index 0000000000..54303503c0 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchOutputBattery.java @@ -0,0 +1,216 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.GTValues.V; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.gui.widget.ElectricSlotWidget; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEHatchOutputBattery extends MTEHatch { + + public MTEHatchOutputBattery(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, getSlots(aTier), "Dischargeable Item Bus for Multiblocks"); + } + + public MTEHatchOutputBattery(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aTier < 1 ? 1 : aTier == 1 ? 4 : aTier == 2 ? 9 : 16, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + int mSlots = 0; + if (this.mTier == 2) { + mSlots = 4; + } else if (this.mTier == 4) { + mSlots = 16; + } else { + mSlots = 16; + } + return ArrayUtils.addAll(this.mDescriptionArray, "Capacity: " + mSlots + " slots", GTPPCore.GT_Tooltip.get()); + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public long getMinimumStoredEU() { + return 0; + } + + @Override + public long maxEUOutput() { + return V[mTier]; + } + + @Override + public long maxEUStore() { + return 512 + V[mTier + 1] * 8; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Hatch_Discharger) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Hatch_Discharger) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + 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 MTEHatchOutputBattery(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing(); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing(); + } + + 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() { + for (int i = 0; i < mInventory.length; i++) + for (int j = i + 1; j < mInventory.length; j++) if (mInventory[j] != null + && (mInventory[i] == null || GTUtility.areStacksEqual(mInventory[i], mInventory[j]))) { + GTUtility.moveStackFromSlotAToSlotB( + getBaseMetaTileEntity(), + getBaseMetaTileEntity(), + j, + i, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1); + } + } + + @Override + public int rechargerSlotStartIndex() { + return 0; + } + + @Override + public int rechargerSlotCount() { + return 0; + } + + @Override + public int dechargerSlotStartIndex() { + return 0; + } + + @Override + public int dechargerSlotCount() { + return mTier == 2 ? 4 : 16; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { + fillStacksIntoFirstSlots(); + } + + if (aBaseMetaTileEntity.isServerSide()) { + if (aBaseMetaTileEntity.getMetaTileEntity() instanceof MetaTileEntity mMetaTileEntity) { + if (mMetaTileEntity.dechargerSlotCount() > 0 + && mMetaTileEntity.getEUVar() < aBaseMetaTileEntity.getEUCapacity()) { + for (int i = mMetaTileEntity.dechargerSlotStartIndex(), + k = mMetaTileEntity.dechargerSlotCount() + i; i < k; i++) { + if (mMetaTileEntity.mInventory[i] != null + && mMetaTileEntity.getEUVar() < aBaseMetaTileEntity.getEUCapacity()) { + aBaseMetaTileEntity.increaseStoredEnergyUnits( + GTModHandler.dischargeElectricItem( + mMetaTileEntity.mInventory[i], + (int) Math.min( + V[mTier] * 15, + aBaseMetaTileEntity.getEUCapacity() - aBaseMetaTileEntity.getStoredEU()), + (int) Math.min(Integer.MAX_VALUE, mMetaTileEntity.getInputTier()), + true, + false, + false), + true); + if (mMetaTileEntity.mInventory[i].stackSize <= 0) mMetaTileEntity.mInventory[i] = null; + } + } + } + } + } + super.onPostTick(aBaseMetaTileEntity, aTimer); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + if (mTier == 2) { + for (int i = 0; i < 4; i++) { + builder + .widget(new ElectricSlotWidget(inventoryHandler, i).setPos(70 + (i % 2) * 18, 25 + (i / 2) * 18)); + } + } else { + for (int i = 0; i < 16; i++) { + builder.widget(new ElectricSlotWidget(inventoryHandler, i).setPos(52 + (i % 4) * 18, 7 + (i / 4) * 18)); + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchReservoir.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchReservoir.java new file mode 100644 index 0000000000..23231cc6e9 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchReservoir.java @@ -0,0 +1,74 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import net.minecraft.world.World; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEHatchReservoir extends MTEHatchFluidGenerator { + + public MTEHatchReservoir(final int aID, final String aName, final String aNameRegional, final int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEHatchReservoir(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEHatchReservoir(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public String[] getCustomTooltip() { + String[] aTooltip = new String[2]; + aTooltip[0] = "Infinite water supply hatch"; + aTooltip[1] = "Fills to max capacity every 5 seconds"; + return aTooltip; + } + + @Override + public Fluid getFluidToGenerate() { + return FluidRegistry.WATER; + } + + @Override + public int getAmountOfFluidToGenerate() { + return 2_000_000_000; + } + + @Override + public int getMaxTickTime() { + return 100; + } + + @Override + public int getCapacity() { + return 2_000_000_000; + } + + @Override + public boolean doesHatchMeetConditionsToGenerate() { + return true; + } + + @Override + public void generateParticles(World aWorld, String name) {} + + @Override + public ITexture[] getTexturesActive(final ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Water) }; + } + + @Override + public ITexture[] getTexturesInactive(final ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Water) }; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSolidifier.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSolidifier.java new file mode 100644 index 0000000000..ce3337c34b --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSolidifier.java @@ -0,0 +1,115 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.enums.ItemList; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.util.GTUtility; + +public class MTEHatchSolidifier extends MTEHatchInput { + + static final int moldSlot = 2; + static final ItemStack[] solidifierMolds = { ItemList.Shape_Mold_Bottle.get(1), ItemList.Shape_Mold_Plate.get(1), + ItemList.Shape_Mold_Ingot.get(1), ItemList.Shape_Mold_Casing.get(1), ItemList.Shape_Mold_Gear.get(1), + ItemList.Shape_Mold_Gear_Small.get(1), ItemList.Shape_Mold_Credit.get(1), ItemList.Shape_Mold_Nugget.get(1), + ItemList.Shape_Mold_Block.get(1), ItemList.Shape_Mold_Ball.get(1), ItemList.Shape_Mold_Cylinder.get(1), + ItemList.Shape_Mold_Anvil.get(1), ItemList.Shape_Mold_Arrow.get(1), ItemList.Shape_Mold_Rod.get(1), + ItemList.Shape_Mold_Bolt.get(1), ItemList.Shape_Mold_Round.get(1), ItemList.Shape_Mold_Screw.get(1), + ItemList.Shape_Mold_Ring.get(1), ItemList.Shape_Mold_Rod_Long.get(1), ItemList.Shape_Mold_Rotor.get(1), + ItemList.Shape_Mold_Turbine_Blade.get(1), ItemList.Shape_Mold_Pipe_Tiny.get(1), + ItemList.Shape_Mold_Pipe_Small.get(1), ItemList.Shape_Mold_Pipe_Medium.get(1), + ItemList.Shape_Mold_Pipe_Large.get(1), ItemList.Shape_Mold_Pipe_Huge.get(1), + ItemList.Shape_Mold_ToolHeadDrill.get(1) }; + + public MTEHatchSolidifier(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + @Override + public String[] getDescription() { + return new String[] { + "Fluid Input with Mold for " + EnumChatFormatting.YELLOW + + "Large Processing Factory" + + EnumChatFormatting.RESET, + "#22 Circuit is imprinted in Hatch", "Capacity: " + GTUtility.formatNumbers(getCapacity()) + "L", + "Added by: " + EnumChatFormatting.AQUA + + "Quetz4l" + + " - " + + EnumChatFormatting.RED + + "[GT++]" + + EnumChatFormatting.RESET }; + } + + public MTEHatchSolidifier(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, getSlots(aTier), aTier, aDescription, aTextures); + } + + private class MoldSlot extends BaseSlot { + + public MoldSlot(IItemHandlerModifiable inventory, int index) { + super(inventory, index); + } + + @Override + public boolean isItemValidPhantom(ItemStack stack) { + return super.isItemValidPhantom(stack) && getBaseMetaTileEntity().isItemValidForSlot(getSlotIndex(), stack); + } + + } + + @Override + public boolean isItemValidForSlot(int aIndex, ItemStack aStack) { + if (aIndex == moldSlot && aStack != null) { + for (final ItemStack itemStack : solidifierMolds) { + if (GTUtility.areStacksEqual(itemStack, aStack, true)) { + return true; + } + } + } else if (aIndex != moldSlot) { + return super.isItemValidForSlot(aIndex, aStack); + } + + return false; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchSolidifier(mName, mTier, mDescriptionArray, mTextures); + } + + public ItemStack getMold() { + return this.getStackInSlot(moldSlot); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget( + new SlotWidget(new MoldSlot(inventoryHandler, moldSlot)).setPos(125, 35) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_MOLD) + .setSize(18, 18)); + } + + @Override + public void onBlockDestroyed() { + super.onBlockDestroyed(); + } + + // for a drop-down form when the hatch is destroyed + @Override + public boolean isValidSlot(int aIndex) { + if (aIndex == moldSlot) return true; + else return super.isValidSlot(aIndex); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSteamBusOutput.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSteamBusOutput.java new file mode 100644 index 0000000000..52864b8bea --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSteamBusOutput.java @@ -0,0 +1,208 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.ITEM_OUT_SIGN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; + +import gregtech.GTMod; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.render.TextureFactory; +import gtPlusPlus.core.lib.GTPPCore; + +public class MTEHatchSteamBusOutput extends MTEHatch { + + public MTEHatchSteamBusOutput(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 4, + new String[] { "Item Output for Steam Multiblocks", "Does not automatically export items", + "Capacity: 4 stacks", "Does not work with non-steam multiblocks", GTPPCore.GT_Tooltip.get() }); + } + + public MTEHatchSteamBusOutput(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + public MTEHatchSteamBusOutput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(ITEM_OUT_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT), TextureFactory.of(ITEM_OUT_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_OUT) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + 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 MTEHatchSteamBusOutput(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing(); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + 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 GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE) }; + } + + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE) }; + } + + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE) }; + } + + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE) }; + } + + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP) }; + } + + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP) }; + } + + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM) }; + } + + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM) }; + } + + public ITexture[] getBottomFacingPipeActive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getBottomFacingPipeInactive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getTopFacingPipeActive(byte aColor) { + return new ITexture[] { + new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getTopFacingPipeInactive(byte aColor) { + return new ITexture[] { + new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getSideFacingPipeActive(byte aColor) { + return new ITexture[] { + new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getSideFacingPipeInactive(byte aColor) { + return new ITexture[] { + new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + getBaseMetaTileEntity().add2by2Slots(builder); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSuperBusInput.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSuperBusInput.java new file mode 100644 index 0000000000..e95cea2762 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchSuperBusInput.java @@ -0,0 +1,65 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow.Builder; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.Scrollable; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gtPlusPlus.core.lib.GTPPCore; + +public class MTEHatchSuperBusInput extends MTEHatchInputBus { + + public MTEHatchSuperBusInput(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, getSlots(aTier) + 1); + } + + public MTEHatchSuperBusInput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, getSlots(aTier) + 1, aDescription, aTextures); + } + + /** + * Returns a factor of 16 based on tier. + * + * @param aTier The tier of this bus. + * @return (1 + aTier) * 16 + */ + public static int getSlots(int aTier) { + return (1 + aTier) * 16; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchSuperBusInput(this.mName, this.mTier, mDescriptionArray, this.mTextures); + } + + @Override + public String[] getDescription() { + return new String[] { "Item Input for Multiblocks", "" + getSlots(this.mTier) + " Slots", + GTPPCore.GT_Tooltip.get() }; + } + + @Override + public int getCircuitSlot() { + return getSlots(mTier); + } + + @Override + public void addUIWidgets(Builder builder, UIBuildContext buildContext) { + final Scrollable scrollable = new Scrollable().setVerticalScroll(); + for (int row = 0; row * 4 < inventoryHandler.getSlots() - 1; row++) { + int columnsToMake = Math.min(inventoryHandler.getSlots() - row * 4, 4); + for (int column = 0; column < columnsToMake; column++) { + scrollable.widget( + new SlotWidget(inventoryHandler, row * 4 + column).setPos(column * 18, row * 18) + .setSize(18, 18)); + } + } + builder.widget( + scrollable.setSize(18 * 4 + 4, 18 * 4) + .setPos(52, 7)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchTurbine.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchTurbine.java new file mode 100644 index 0000000000..09c3dd6efb --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchTurbine.java @@ -0,0 +1,428 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_ST5; +import static gregtech.api.enums.Textures.BlockIcons.LARGETURBINE_ST_ACTIVE5; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.minecraft.BlockPos; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.MTELargerTurbineBase; + +@SuppressWarnings("deprecation") +public class MTEHatchTurbine extends MTEHatch { + + public boolean mHasController = false; + public boolean mUsingAnimation = true; + private String mControllerLocation; + public int mEUt = 0; + + public MTEHatchTurbine(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 16, "Turbine Rotor holder for XL Turbines"); + } + + public MTEHatchTurbine(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures); + } + + public MTEHatchTurbine(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription[0], aTextures); + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll( + this.mDescriptionArray, + "Right Click with a soldering iron to reset controller link", + "Right Click with a wrench to remove turbine", + "Right Click with a screwdriver for technical information", + "Sneak + Right Click with a wrench to rotate", + "Sneak + Right Click with a screwdriver to disable animations", + GTPPCore.GT_Tooltip.get()); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, getFrontFacingTurbineTexture() }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, getFrontFacingTurbineTexture() }; + } + + public int getEU() { + return this.mEUt; + } + + public void setEU(int aEU) { + this.mEUt = aEU; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return facing.offsetY == 0; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + public boolean hasTurbine() { + ItemStack aStack = this.mInventory[0]; + boolean aIsValid = MTELargerTurbineBase.isValidTurbine(aStack); + return aIsValid; + } + + public ItemStack getTurbine() { + if (hasTurbine()) { + return this.mInventory[0]; + } + return null; + } + + public boolean canWork() { + return hasTurbine(); + } + + public boolean insertTurbine(ItemStack aTurbine) { + if (MTELargerTurbineBase.isValidTurbine(aTurbine)) { + this.mInventory[0] = aTurbine; + return true; + } + return false; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchTurbine(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + public void damageTurbine(int aEUt, int damageFactorLow, float damageFactorHigh) { + damageTurbine((long) aEUt, damageFactorLow, damageFactorHigh); + } + + public void damageTurbine(long aEUt, int damageFactorLow, float damageFactorHigh) { + if (hasTurbine() && MathUtils.randInt(0, 1) == 0) { + ItemStack aTurbine = getTurbine(); + ((MetaGeneratedTool) aTurbine.getItem()).doDamage( + aTurbine, + (long) getDamageToComponent(aTurbine) + * (long) Math.min((float) aEUt / (float) damageFactorLow, Math.pow(aEUt, damageFactorHigh))); + } + } + + private int getDamageToComponent(ItemStack aStack) { + return 1; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("mHasController", mHasController); + aNBT.setBoolean("mUsingAnimation", mUsingAnimation); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mHasController = aNBT.getBoolean("mHasController"); + mUsingAnimation = aNBT.getBoolean("mUsingAnimation"); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (this.mHasController) { + if (aTick % 20 == 0) { + if (isControllerActive()) { + this.getBaseMetaTileEntity() + .setActive(true); + } else { + this.getBaseMetaTileEntity() + .setActive(false); + } + } + } else if (!this.mHasController && this.mControllerLocation != null) { + // Weird Invalid State + if (setController(BlockPos.generateBlockPos(mControllerLocation))) { + // Valid + } + } else { + // No Controller + } + if (this.mInventory[0] != null && this.mInventory[0].stackSize <= 0) this.mInventory[0] = null; + } + + public boolean isControllerActive() { + MTELargerTurbineBase x = getController(); + if (x != null) { + // Logger.INFO("Checking Status of Controller. Running? "+(x.mEUt > 0)); + return x.lEUt > 0; + } + // Logger.INFO("Status of Controller failed, controller is null."); + return false; + } + + public MTELargerTurbineBase getController() { + if (this.mHasController && this.mControllerLocation != null && this.mControllerLocation.length() > 0) { + BlockPos p = BlockPos.generateBlockPos(mControllerLocation); + if (p != null) { + // Logger.INFO(p.getLocationString()); + IGregTechTileEntity tTileEntity = getBaseMetaTileEntity() + .getIGregTechTileEntity(p.xPos, p.yPos, p.zPos); + if (tTileEntity != null && tTileEntity.getMetaTileEntity() instanceof MTELargerTurbineBase) { + return (MTELargerTurbineBase) tTileEntity.getMetaTileEntity(); + } else { + if (tTileEntity == null) { + Logger.INFO("Controller MTE is null, somehow?"); + } else { + Logger.INFO("Controller is a different MTE to expected"); + } + } + } + } + // Logger.INFO("Failed to Get Controller."); + return null; + } + + public boolean canSetNewController() { + if ((mControllerLocation != null && mControllerLocation.length() > 0) || this.mHasController) { + return false; + } + return true; + } + + public boolean setController(BlockPos aPos) { + clearController(); + if (canSetNewController()) { + mControllerLocation = aPos.getUniqueIdentifier(); + mHasController = true; + Logger.INFO("Successfully injected controller into this Turbine Assembly Hatch."); + } + return mHasController; + } + + public void clearController() { + this.mControllerLocation = null; + this.mHasController = false; + } + + public boolean usingAnimations() { + return mUsingAnimation; + } + + private ITexture getFrontFacingTurbineTexture() { + if (!mHasController) { + return this.getBaseMetaTileEntity() + .isActive() ? new GTRenderedTexture(LARGETURBINE_ST_ACTIVE5) : new GTRenderedTexture(LARGETURBINE_ST5); + } else { + if (usingAnimations()) { + if (isControllerActive()) { + return getController().frontFaceActive; + } + } + return getController().frontFace; + } + } + + @Override + public long getMinimumStoredEU() { + return 0; + } + + @Override + public boolean isItemValidForSlot(int aIndex, ItemStack aStack) { + return false; + } + + @Override + public int[] getAccessibleSlotsFromSide(int ordinalSide) { + return new int[] {}; + } + + @Override + public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { + return false; + } + + public void setActive(boolean b) { + this.getBaseMetaTileEntity() + .setActive(b); + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { + return false; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (!aPlayer.isSneaking()) { + PlayerUtils.messagePlayer(aPlayer, "Using Animations? " + usingAnimations()); + PlayerUtils.messagePlayer(aPlayer, "Has Controller? " + this.mHasController); + if (mHasController) { + PlayerUtils.messagePlayer( + aPlayer, + "Controller Location: " + BlockPos.generateBlockPos(mControllerLocation) + .getLocationString()); + PlayerUtils.messagePlayer(aPlayer, "Controller Active? " + this.isControllerActive()); + } + PlayerUtils.messagePlayer( + aPlayer, + "Active? " + this.getBaseMetaTileEntity() + .isActive()); + PlayerUtils.messagePlayer(aPlayer, "Has Turbine inserted? " + this.hasTurbine()); + if (this.hasTurbine()) { + Materials aMat = MetaGeneratedTool.getPrimaryMaterial(getTurbine()); + String aSize = MTELargerTurbineBase + .getTurbineSizeString(MTELargerTurbineBase.getTurbineSize(getTurbine())); + PlayerUtils.messagePlayer(aPlayer, "Using: " + aMat.mLocalizedName + " " + aSize); + } + } else { + this.mUsingAnimation = !mUsingAnimation; + if (this.mUsingAnimation) { + PlayerUtils.messagePlayer(aPlayer, "Using Animated Turbine Texture."); + } else { + PlayerUtils.messagePlayer(aPlayer, "Using Static Turbine Texture."); + } + } + } + + @Override + public boolean onWrenchRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, float aX, + float aY, float aZ) { + if (this.getBaseMetaTileEntity() + .isServerSide() && !aPlayer.isSneaking()) { + ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + if (tCurrentItem != null) { + if (tCurrentItem.getItem() instanceof MetaGeneratedTool) { + return onToolClick(tCurrentItem, aPlayer, wrenchingSide); + } + } + } + return super.onWrenchRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ); + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (this.getBaseMetaTileEntity() + .isServerSide()) { + ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + if (tCurrentItem != null) { + if (tCurrentItem.getItem() instanceof MetaGeneratedTool) { + return onToolClick(tCurrentItem, aPlayer, wrenchingSide); + } + } + } + return false; + } + + public boolean onToolClick(ItemStack tCurrentItem, EntityPlayer aPlayer, ForgeDirection side) { + if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sWrenchList)) { + boolean aHasTurbine = this.hasTurbine(); + if (aPlayer.inventory.getFirstEmptyStack() >= 0 && aHasTurbine) { + if (PlayerUtils.isCreative(aPlayer) + || GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { + aPlayer.inventory.addItemStackToInventory((this.getTurbine())); + this.mInventory[0] = null; + GTUtility.sendChatToPlayer(aPlayer, "Removed turbine with wrench."); + return true; + } + } else { + GTUtility.sendChatToPlayer( + aPlayer, + aHasTurbine ? "Cannot remove turbine, no free inventory space." : "No turbine to remove."); + } + } else if (GTUtility.isStackInList(tCurrentItem, GregTechAPI.sSolderingToolList)) { + if (mControllerLocation != null && mControllerLocation.length() > 0) { + if (setController(BlockPos.generateBlockPos(mControllerLocation))) { + if (PlayerUtils.isCreative(aPlayer) + || GTModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) { + String tChat = "Trying to Reset linked Controller"; + IGregTechTileEntity g = this.getBaseMetaTileEntity(); + GTUtility.sendChatToPlayer(aPlayer, tChat); + GTUtility.sendSoundToPlayers( + g.getWorld(), + SoundResource.IC2_TOOLS_RUBBER_TRAMPOLINE, + 1.0F, + -1, + g.getXCoord(), + g.getYCoord(), + g.getZCoord()); + return true; + } + } + } + } + return false; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new SlotWidget(inventoryHandler, 0).setFilter(MTELargerTurbineBase::isValidTurbine) + .setAccess(false, true) + .setPos(79, 34)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchTurbineProvider.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchTurbineProvider.java new file mode 100644 index 0000000000..6a501a2531 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTEHatchTurbineProvider.java @@ -0,0 +1,216 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.common.tileentities.machines.multi.MTELargeTurbine; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.core.util.sys.KeyboardUtils; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.MTELargerTurbineBase; + +public class MTEHatchTurbineProvider extends MTEHatchInputBus { + + public MTEHatchTurbineProvider(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEHatchTurbineProvider(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchTurbineProvider(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public String[] getDescription() { + return new String[] { "An automation port for Large Turbines", + "Will attempt once per 1200 ticks to fill the turbine slot of it's parent turbine", + "You may adjust this with a screwdriver", "Hold shift to adjust in finer amounts", + "Hold control to adjust direction", "Left Click with Screwdriver to reset", + "This module assumes the entire turbine is in the same Chunk", GTPPCore.GT_Tooltip.get() }; + } + + private MTELargeTurbine mParent = null; + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + super.onPostTick(aBaseMetaTileEntity, aTimer); + if (aTimer % mRefreshTime == 0 && this.getBaseMetaTileEntity() + .isServerSide()) { + tryRefillTurbine(); + } + } + + private void tryFindParentTurbine() { + Logger.INFO("This turbine housing has no parent, searching world."); + IGregTechTileEntity T = this.getBaseMetaTileEntity(); + World W = T.getWorld(); + Chunk C = W.getChunkFromBlockCoords(T.getXCoord(), T.getZCoord()); + for (Object o : C.chunkTileEntityMap.values()) { + if (o instanceof IGregTechTileEntity G) { + final IMetaTileEntity aMetaTileEntity = G.getMetaTileEntity(); + if (aMetaTileEntity == null) { + continue; + } + if (aMetaTileEntity instanceof MTELargeTurbine aTurb) { + for (MTEHatchInputBus ee : aTurb.mInputBusses) { + if (ee.equals(this)) { + mParent = aTurb; + Logger.INFO("Found a Parent to attach to this housing."); + return; + } + } + } + } + } + } + + private void tryRefillTurbine() { + if (mParent == null) { + tryFindParentTurbine(); + } + if (mParent != null && mParent.mInventory[1] == null) { + for (ItemStack aStack : this.mInventory) { + if (isItemStackTurbine(aStack)) { + setGUIItemStack(aStack); + } + } + } + } + + protected boolean setGUIItemStack(ItemStack aNewGuiSlotContents) { + boolean result = false; + if (mParent.mInventory[1] == null) { + mParent.mInventory[1] = aNewGuiSlotContents != null ? aNewGuiSlotContents.copy() : null; + mParent.depleteInput(aNewGuiSlotContents); + mParent.updateSlots(); + this.updateSlots(); + result = true; + } + return result; + } + + public boolean isItemStackTurbine(ItemStack aStack) { + if (aStack.getItem() instanceof MetaGeneratedTool) { + if (aStack.getItemDamage() >= 170 && aStack.getItemDamage() <= 176) { + return true; + } + } + return false; + } + + public boolean isItemStackScrewdriver(ItemStack aStack) { + if (aStack.getItem() instanceof MetaGeneratedTool) { + if (aStack.getItemDamage() == 22 || aStack.getItemDamage() == 150) { + return true; + } + } + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return isItemStackTurbine(aStack); + } + + private int mRefreshTime = 1200; + private boolean mDescending = true; + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mRefreshTime", mRefreshTime); + aNBT.setBoolean("mDescending", mDescending); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mRefreshTime = aNBT.getInteger("mRefreshTime"); + mDescending = aNBT.getBoolean("mDescending"); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aPlayer != null) { + if (KeyboardUtils.isCtrlKeyDown()) { + mDescending = !mDescending; + PlayerUtils.messagePlayer(aPlayer, "Direction: " + (mDescending ? "DOWN" : "UP")); + } else { + int aAmount = 0; + if (KeyboardUtils.isShiftKeyDown()) { + aAmount = 10; + } else { + aAmount = 100; + } + if (mDescending) { + mRefreshTime -= aAmount; + if (mRefreshTime < 0) { + mRefreshTime = 1200; + } + } else { + mRefreshTime += aAmount; + if (mRefreshTime > 1200) { + mRefreshTime = 0; + } + } + PlayerUtils.messagePlayer(aPlayer, "Set check time to be every " + mRefreshTime + " ticks."); + } + } + } + + @Override + public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + boolean aDidScrewdriver = false; + if (aPlayer != null) { + if (aPlayer.getHeldItem() != null) { + if (isItemStackScrewdriver(aPlayer.getHeldItem())) { + aDidScrewdriver = true; + mRefreshTime = 1200; + PlayerUtils.messagePlayer(aPlayer, "Reset check time to " + mRefreshTime + " ticks."); + } + } + } + if (!aDidScrewdriver) { + super.onLeftclick(aBaseMetaTileEntity, aPlayer); + } + } + + @Override + public boolean allowSelectCircuit() { + return false; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new SlotWidget(inventoryHandler, 0).setFilter(MTELargerTurbineBase::isValidTurbine) + .setAccess(false, true) + .setPos(79, 34)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTESuperBusOutput.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTESuperBusOutput.java new file mode 100644 index 0000000000..686589b38a --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTESuperBusOutput.java @@ -0,0 +1,113 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import net.minecraft.inventory.IInventory; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow.Builder; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.Scrollable; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.gui.widgets.PhantomItemButton; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; + +public class MTESuperBusOutput extends MTEHatchOutputBus { + + public MTESuperBusOutput(int id, String name, String nameRegional, int tier) { + super(id, name, nameRegional, tier, getSlots(tier)); + } + + public MTESuperBusOutput(String name, int tier, String[] description, ITexture[][][] textures) { + super(name, tier, getSlots(tier), description, textures); + } + + /** + * Returns a factor of 16 based on tier. + * + * @param aTier The tier of this bus. + * @return (1 + aTier) * 16 + */ + public static int getSlots(int aTier) { + return (1 + aTier) * 16; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESuperBusOutput(this.mName, this.mTier, mDescriptionArray, this.mTextures); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { + this.fillStacksIntoFirstSlots(); + } + super.onPostTick(aBaseMetaTileEntity, aTimer); + } + + public void updateSlots() { + for (int i = 0; i < this.mInventory.length; ++i) { + if (this.mInventory[i] != null && this.mInventory[i].stackSize <= 0) { + this.mInventory[i] = null; + } + } + this.fillStacksIntoFirstSlots(); + } + + protected void fillStacksIntoFirstSlots() { + for (int i = 0; i < this.mInventory.length; ++i) { + for (int j = i + 1; j < this.mInventory.length; ++j) { + if (this.mInventory[j] != null && (this.mInventory[i] == null + || GTUtility.areStacksEqual(this.mInventory[i], this.mInventory[j]))) { + GTUtility.moveStackFromSlotAToSlotB( + (IInventory) this.getBaseMetaTileEntity(), + (IInventory) this.getBaseMetaTileEntity(), + j, + i, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1); + } + } + } + } + + @Override + public String[] getDescription() { + String[] aDesc = new String[] { "Item Output for Multiblocks", "" + getSlots(this.mTier) + " Slots", + "Left click with data stick to save filter config", "Right click with data stick to load filter config", + GTPPCore.GT_Tooltip.get() }; + return aDesc; + } + + @Override + public void addUIWidgets(Builder builder, UIBuildContext buildContext) { + final Scrollable scrollable = new Scrollable().setVerticalScroll(); + for (int row = 0; row * 4 < inventoryHandler.getSlots() - 1; row++) { + int columnsToMake = Math.min(inventoryHandler.getSlots() - row * 4, 4); + for (int column = 0; column < columnsToMake; column++) { + scrollable.widget( + new SlotWidget(inventoryHandler, row * 4 + column).setPos(column * 18, row * 18) + .setSize(18, 18)); + } + } + builder.widget( + scrollable.setSize(18 * 4 + 4, 18 * 4) + .setPos(52, 7)); + + if (acceptsItemLock()) { + builder.widget( + new PhantomItemButton(this).setPos(getGUIWidth() - 25, 40) + .setBackground(PhantomItemButton.FILTER_BACKGROUND)); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTETreeFarmerStructural.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTETreeFarmerStructural.java new file mode 100644 index 0000000000..dca1cfbfa4 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MTETreeFarmerStructural.java @@ -0,0 +1,48 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import net.minecraft.nbt.NBTTagCompound; + +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.objects.GTRenderedTexture; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.machines.MTETreeFarmerBase; + +public class MTETreeFarmerStructural extends MTETreeFarmerBase { + + public MTETreeFarmerStructural(final int aID, final String aName, final String aNameRegional, final int aTier) { + super(aID, aName, aNameRegional, aTier, 0, "Structural Blocks for the Tree Farmer."); + } + + public MTETreeFarmerStructural(final String aName, final int aTier, final int aInvSlotCount, + final String[] aDescription, final ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTETreeFarmerStructural( + this.mName, + this.mTier, + this.mInventory.length, + this.mDescriptionArray, + this.mTextures); + } + + @Override + public ITexture getOverlayIcon() { + return new GTRenderedTexture(Textures.BlockIcons.VOID); + } + + @Override + public boolean isValidSlot(final int aIndex) { + return false; + } + + @Override + public void saveNBTData(final NBTTagCompound paramNBTTagCompound) {} + + @Override + public void loadNBTData(final NBTTagCompound paramNBTTagCompound) {} +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MteHatchSteamBusInput.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MteHatchSteamBusInput.java new file mode 100644 index 0000000000..5de87c4a50 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/MteHatchSteamBusInput.java @@ -0,0 +1,272 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations; + +import static gregtech.api.enums.Textures.BlockIcons.ITEM_IN_SIGN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_IN; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; + +import gregtech.GTMod; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; + +public class MteHatchSteamBusInput extends MTEHatch { + + public RecipeMap mRecipeMap = null; + public boolean disableSort; + + public MteHatchSteamBusInput(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", GTPPCore.GT_Tooltip.get() }); + } + + public MteHatchSteamBusInput(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + public MteHatchSteamBusInput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(ITEM_IN_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(ITEM_IN_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + 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 MteHatchSteamBusInput(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @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 || GTUtility.areStacksEqual(mInventory[i], mInventory[j]))) + GTUtility.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(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + disableSort = !disableSort; + GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("200.1", "Automatic Item Shuffling: ") + + (disableSort ? GTUtility.trans("087", "Disabled") : GTUtility.trans("088", "Enabled"))); + } + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == 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 GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE) }; + } + + public ITexture[] getSideFacingInactive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE) }; + } + + public ITexture[] getFrontFacingActive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE) }; + } + + public ITexture[] getFrontFacingInactive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE) }; + } + + public ITexture[] getTopFacingActive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP) }; + } + + public ITexture[] getTopFacingInactive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP) }; + } + + public ITexture[] getBottomFacingActive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM) }; + } + + public ITexture[] getBottomFacingInactive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM) }; + } + + public ITexture[] getBottomFacingPipeActive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getBottomFacingPipeInactive(byte aColor) { + return new ITexture[] { new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_BOTTOM : Textures.BlockIcons.MACHINE_BRONZE_BOTTOM), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getTopFacingPipeActive(byte aColor) { + return new ITexture[] { + new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getTopFacingPipeInactive(byte aColor) { + return new ITexture[] { + new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_TOP : Textures.BlockIcons.MACHINE_BRONZE_TOP), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getSideFacingPipeActive(byte aColor) { + return new ITexture[] { + new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + public ITexture[] getSideFacingPipeInactive(byte aColor) { + return new ITexture[] { + new GTRenderedTexture( + mTier == 1 ? Textures.BlockIcons.MACHINE_BRONZEBRICKS_SIDE : Textures.BlockIcons.MACHINE_BRONZE_SIDE), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_PIPE_OUT) }; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + getBaseMetaTileEntity().add2by2Slots(builder); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GTPPMetaTileEntity.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GTPPMetaTileEntity.java new file mode 100644 index 0000000000..f8bea768da --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GTPPMetaTileEntity.java @@ -0,0 +1,74 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base; + +import static gregtech.api.enums.GTValues.GT; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.metatileentity.MetaTileEntity; + +public abstract class GTPPMetaTileEntity extends MetaTileEntity { + + /** + * Value between [0 - 9] to describe the Tier of this Machine. + */ + protected byte mTier; + + /** + * A simple Description. + */ + protected final String mDescription; + + /** + * Contains all Textures used by this Block. + */ + public final ITexture[][][] mTextures; + + public GTPPMetaTileEntity(final int aID, final String aName, final String aNameRegional, final int aTier, + final int aInvSlotCount, final String aDescription, final ITexture... aTextures) { + super(aID, aName, aNameRegional, aInvSlotCount); + this.mTier = (byte) Math.max(0, Math.min(aTier, 9)); + this.mDescription = aDescription; + + // must always be the last call! + if (GT.isClientSide()) { + this.mTextures = this.getTextureSet(aTextures); + } else { + this.mTextures = null; + } + } + + public GTPPMetaTileEntity(final String aName, final int aTier, final int aInvSlotCount, final String aDescription, + final ITexture[][][] aTextures) { + super(aName, aInvSlotCount); + this.mTier = (byte) aTier; + this.mDescription = aDescription; + this.mTextures = aTextures; + } + + @Override + public byte getTileEntityBaseType() { + return (byte) (Math.min(3, this.mTier <= 0 ? 0 : 1 + ((this.mTier - 1) / 4))); + } + + @Override + public long getInputTier() { + return this.mTier; + } + + @Override + public long getOutputTier() { + return this.mTier; + } + + @Override + public String[] getDescription() { + return new String[] { this.mDescription }; + } + + /** + * Used Client Side to get a Texture Set for this Block. Called after setting the Tier and the Description so that + * those two are accessible. + * + * @param aTextures is the optional Array you can give to the Constructor. + */ + public abstract ITexture[][][] getTextureSet(ITexture[] aTextures); +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GTPPMultiBlockBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GTPPMultiBlockBase.java new file mode 100644 index 0000000000..dad53f54f6 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GTPPMultiBlockBase.java @@ -0,0 +1,1663 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base; + +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.TimeUnit; +import java.util.function.BiConsumer; +import java.util.function.BiPredicate; +import java.util.function.Function; +import java.util.stream.Collectors; + +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +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.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.StructureUtility; +import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.enums.VoidingMode; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.common.items.IDMetaTool01; +import gregtech.common.items.MetaGeneratedTool01; +import gregtech.common.tileentities.machines.IDualInputHatch; +import gtPlusPlus.GTplusplus; +import gtPlusPlus.GTplusplus.INIT_PHASE; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.minecraft.BlockPos; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import gtPlusPlus.preloader.PreloaderCore; +import gtPlusPlus.preloader.asm.AsmConfig; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.METHatchAirIntake; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchInputBattery; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchOutputBattery; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MteHatchSteamBusInput; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; + +// Glee8e - 11/12/21 - 2:15pm +// Yeah, now I see what's wrong. Someone inherited from GregtechMeta_MultiBlockBase instead of +// GregtechMeta_MultiBlockBase as it should have been +// so any method in GregtechMetaTileEntity_IndustrialDehydrator would see generic field declared in +// GregtechMeta_MultiBlockBase without generic parameter + +public abstract class GTPPMultiBlockBase> + extends MTEExtendedPowerMultiBlockBase { + + public static final boolean DEBUG_DISABLE_CORES_TEMPORARILY = true; + + public GTRecipe mLastRecipe; + + /** + * Don't use this for recipe input check, otherwise you'll get duplicated fluids + */ + public ArrayList mAirIntakes = new ArrayList<>(); + + public ArrayList mChargeHatches = new ArrayList<>(); + public ArrayList mDischargeHatches = new ArrayList<>(); + public ArrayList mAllEnergyHatches = new ArrayList<>(); + public ArrayList mAllDynamoHatches = new ArrayList<>(); + + public GTPPMultiBlockBase(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public GTPPMultiBlockBase(final String aName) { + super(aName); + } + + private static int toStackCount(Entry e) { + int tMaxStackSize = e.getKey() + .getMaxStackSize(); + int tStackSize = e.getValue(); + return (tStackSize + tMaxStackSize - 1) / tMaxStackSize; + } + + public abstract String getMachineType(); + + public String getMachineTooltip() { + return "Machine Type: " + EnumChatFormatting.YELLOW + getMachineType() + EnumChatFormatting.RESET; + } + + public String[] getExtraInfoData() { + return new String[0]; + } + + @Override + public String[] getInfoData() { + ArrayList mInfo = new ArrayList<>(); + if (!this.getMetaName() + .equals("")) { + mInfo.add(this.getMetaName()); + } + + String[] extra = getExtraInfoData(); + + if (extra == null) { + extra = new String[0]; + } + if (extra.length > 0) { + for (String s : extra) { + mInfo.add(s); + } + } + + long seconds = (this.mTotalRunTime / 20); + int weeks = (int) (TimeUnit.SECONDS.toDays(seconds) / 7); + int days = (int) (TimeUnit.SECONDS.toDays(seconds) - 7 * weeks); + long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.DAYS.toHours(days) + - TimeUnit.DAYS.toHours(7L * weeks); + long minutes = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds) * 60); + long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) * 60); + + mInfo.add(getMachineTooltip()); + + // Lets borrow the GTNH handling + + mInfo.add( + StatCollector.translateToLocal("GTPP.multiblock.progress") + ": " + + EnumChatFormatting.GREEN + + mProgresstime / 20 + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + mMaxProgresstime / 20 + + EnumChatFormatting.RESET + + " s"); + + if (!this.mAllEnergyHatches.isEmpty()) { + long storedEnergy = getStoredEnergyInAllEnergyHatches(); + long maxEnergy = getMaxEnergyStorageOfAllEnergyHatches(); + mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.energy") + ":"); + mInfo.add( + StatCollector.translateToLocal( + "" + EnumChatFormatting.GREEN + + Long.toString(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + Long.toString(maxEnergy) + + EnumChatFormatting.RESET + + " EU")); + + mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.mei") + ":"); + mInfo.add( + StatCollector.translateToLocal( + "" + EnumChatFormatting.YELLOW + + Long.toString(getMaxInputVoltage()) + + EnumChatFormatting.RESET + + " EU/t(*2A) " + + StatCollector.translateToLocal("GTPP.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + GTValues.VN[GTUtility.getTier(getMaxInputVoltage())] + + EnumChatFormatting.RESET));; + } + if (!this.mAllDynamoHatches.isEmpty()) { + long storedEnergy = getStoredEnergyInAllDynamoHatches(); + long maxEnergy = getMaxEnergyStorageOfAllDynamoHatches(); + mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.energy") + " In Dynamos:"); + mInfo.add( + StatCollector.translateToLocal( + "" + EnumChatFormatting.GREEN + + Long.toString(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + Long.toString(maxEnergy) + + EnumChatFormatting.RESET + + " EU")); + } + + if (-lEUt > 0) { + mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.usage") + ":"); + mInfo.add( + StatCollector + .translateToLocal("" + EnumChatFormatting.RED + (-lEUt) + EnumChatFormatting.RESET + " EU/t")); + } else { + mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.generation") + ":"); + mInfo.add( + StatCollector + .translateToLocal("" + EnumChatFormatting.GREEN + lEUt + EnumChatFormatting.RESET + " EU/t")); + } + + mInfo.add( + StatCollector.translateToLocal("GTPP.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GTPP.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + Float.toString(mEfficiency / 100.0F) + + EnumChatFormatting.RESET + + " %"); + + if (this.getPollutionPerSecond(null) > 0) { + int mPollutionReduction = getPollutionReductionForAllMufflers(); + mInfo.add( + StatCollector.translateToLocal("GTPP.multiblock.pollution") + ": " + + EnumChatFormatting.RED + + this.getPollutionPerSecond(null) + + EnumChatFormatting.RESET + + "/sec"); + mInfo.add( + StatCollector.translateToLocal("GTPP.multiblock.pollutionreduced") + ": " + + EnumChatFormatting.GREEN + + mPollutionReduction + + EnumChatFormatting.RESET + + " %"); + } + + mInfo.add( + StatCollector.translateToLocal("GTPP.CC.parallel") + ": " + + EnumChatFormatting.GREEN + + (getMaxParallelRecipes()) + + EnumChatFormatting.RESET); + + mInfo.add( + "Total Time Since Built: " + EnumChatFormatting.DARK_GREEN + + Integer.toString(weeks) + + EnumChatFormatting.RESET + + " Weeks, " + + EnumChatFormatting.DARK_GREEN + + Integer.toString(days) + + EnumChatFormatting.RESET + + " Days, "); + mInfo.add( + EnumChatFormatting.DARK_GREEN + Long.toString(hours) + + EnumChatFormatting.RESET + + " Hours, " + + EnumChatFormatting.DARK_GREEN + + Long.toString(minutes) + + EnumChatFormatting.RESET + + " Minutes, " + + EnumChatFormatting.DARK_GREEN + + Long.toString(second) + + EnumChatFormatting.RESET + + " Seconds."); + mInfo.add("Total Time in ticks: " + EnumChatFormatting.DARK_GREEN + Long.toString(this.mTotalRunTime)); + + String[] mInfo2 = mInfo.toArray(new String[mInfo.size()]); + return mInfo2; + } + + public int getPollutionReductionForAllMufflers() { + int mPollutionReduction = 0; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + mPollutionReduction = Math.max(calculatePollutionReductionForHatch(tHatch, 100), mPollutionReduction); + } + return mPollutionReduction; + } + + public long getStoredEnergyInAllEnergyHatches() { + long storedEnergy = 0; + for (MTEHatch tHatch : filterValidMTEs(mAllEnergyHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + } + return storedEnergy; + } + + public long getMaxEnergyStorageOfAllEnergyHatches() { + long maxEnergy = 0; + for (MTEHatch tHatch : filterValidMTEs(mAllEnergyHatches)) { + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + return maxEnergy; + } + + public long getStoredEnergyInAllDynamoHatches() { + long storedEnergy = 0; + for (MTEHatch tHatch : filterValidMTEs(mAllDynamoHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + } + return storedEnergy; + } + + public long getMaxEnergyStorageOfAllDynamoHatches() { + long maxEnergy = 0; + for (MTEHatch tHatch : filterValidMTEs(mAllDynamoHatches)) { + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + return maxEnergy; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + private String[] aCachedToolTip; + + /* + * private final String aRequiresMuffler = "1x Muffler Hatch"; private final String aRequiresCoreModule = + * "1x Core Module"; private final String aRequiresMaint = "1x Maintanence Hatch"; + */ + + public static final String TAG_HIDE_HATCHES = "TAG_HIDE_HATCHES"; + public static final String TAG_HIDE_MAINT = "TAG_HIDE_MAINT"; + public static final String TAG_HIDE_POLLUTION = "TAG_HIDE_POLLUTION"; + public static final String TAG_HIDE_MACHINE_TYPE = "TAG_HIDE_MACHINE_TYPE"; + + public abstract int getMaxParallelRecipes(); + + @Override + public boolean isCorrectMachinePart(final ItemStack paramItemStack) { + return true; + } + + @Override + public int getDamageToComponent(final ItemStack paramItemStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack p0) { + return false; + } + + /** + * A Static {@link Method} object which holds the current status of logging. + */ + public static Method aLogger = null; + + public void log(String s) { + if (!AsmConfig.disableAllLogging) { + if (PreloaderCore.DEBUG_MODE) { + Logger.INFO(s); + } else { + Logger.MACHINE_INFO(s); + } + } + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(GTUtility.roundUpVoltage(this.getMaxInputVoltage())); + logic.setAvailableAmperage(1L); + } + + public long getMaxInputEnergy() { + long rEnergy = 0; + if (mEnergyHatches.size() == 1) // so it only takes 1 amp is only 1 hatch is present so it works like most gt + // multies + return mEnergyHatches.get(0) + .getBaseMetaTileEntity() + .getInputVoltage(); + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) rEnergy += tHatch.getBaseMetaTileEntity() + .getInputVoltage() + * tHatch.getBaseMetaTileEntity() + .getInputAmperage(); + return rEnergy; + } + + public boolean isMachineRunning() { + boolean aRunning = this.getBaseMetaTileEntity() + .isActive(); + // log("Queried Multiblock is currently running: "+aRunning); + return aRunning; + } + + @Override + public void explodeMultiblock() { + MetaTileEntity tTileEntity; + for (final Iterator localIterator = this.mChargeHatches.iterator(); localIterator + .hasNext(); tTileEntity.getBaseMetaTileEntity() + .doExplosion(GTValues.V[8])) { + tTileEntity = localIterator.next(); + } + tTileEntity = null; + for (final Iterator localIterator = this.mDischargeHatches.iterator(); localIterator + .hasNext(); tTileEntity.getBaseMetaTileEntity() + .doExplosion(GTValues.V[8])) { + tTileEntity = localIterator.next(); + } + tTileEntity = null; + for (final Iterator localIterator = this.mTecTechDynamoHatches.iterator(); localIterator + .hasNext(); tTileEntity.getBaseMetaTileEntity() + .doExplosion(GTValues.V[8])) { + tTileEntity = localIterator.next(); + } + tTileEntity = null; + for (final Iterator localIterator = this.mTecTechEnergyHatches.iterator(); localIterator + .hasNext(); tTileEntity.getBaseMetaTileEntity() + .doExplosion(GTValues.V[8])) { + tTileEntity = localIterator.next(); + } + + super.explodeMultiblock(); + } + + protected boolean setGUIItemStack(ItemStack aNewGuiSlotContents) { + boolean result = false; + if (this.mInventory[1] == null) { + this.mInventory[1] = aNewGuiSlotContents != null ? aNewGuiSlotContents.copy() : null; + this.depleteInput(aNewGuiSlotContents); + this.updateSlots(); + result = true; + } + return result; + } + + public ItemStack findItemInInventory(Item aSearchStack) { + return findItemInInventory(aSearchStack, 0); + } + + public ItemStack findItemInInventory(Item aSearchStack, int aMeta) { + return findItemInInventory(ItemUtils.simpleMetaStack(aSearchStack, aMeta, 1)); + } + + public ItemStack findItemInInventory(ItemStack aSearchStack) { + if (aSearchStack != null && this.mInputBusses.size() > 0) { + for (MTEHatchInputBus bus : this.mInputBusses) { + if (bus != null) { + for (ItemStack uStack : bus.mInventory) { + if (uStack != null) { + if (aSearchStack.getClass() + .isInstance(uStack.getItem())) { + return uStack; + } + } + } + } + } + } + return null; + } + + /** + * Deplete fluid input from a set of restricted hatches. This assumes these hatches can store nothing else but your + * expected fluid + */ + protected boolean depleteInputFromRestrictedHatches(Collection aHatches, int aAmount) { + for (final MTEHatchCustomFluidBase tHatch : filterValidMTEs(aHatches)) { + FluidStack tLiquid = tHatch.getFluid(); + if (tLiquid == null || tLiquid.amount < aAmount) { + continue; + } + tLiquid = tHatch.drain(aAmount, false); + if (tLiquid != null && tLiquid.amount >= aAmount) { + tLiquid = tHatch.drain(aAmount, true); + return tLiquid != null && tLiquid.amount >= aAmount; + } + } + return false; + } + + @Override + public void updateSlots() { + for (final MTEHatchInputBattery tHatch : filterValidMTEs(this.mChargeHatches)) { + tHatch.updateSlots(); + } + for (final MTEHatchOutputBattery tHatch : filterValidMTEs(this.mDischargeHatches)) { + tHatch.updateSlots(); + } + super.updateSlots(); + } + + public boolean checkHatch() { + return mMaintenanceHatches.size() <= 1 + && (this.getPollutionPerSecond(null) > 0 ? !mMufflerHatches.isEmpty() : true); + } + + @Override + public void clearHatches() { + super.clearHatches(); + this.mChargeHatches.clear(); + this.mDischargeHatches.clear(); + this.mAirIntakes.clear(); + this.mTecTechEnergyHatches.clear(); + this.mTecTechDynamoHatches.clear(); + this.mAllEnergyHatches.clear(); + this.mAllDynamoHatches.clear(); + } + + public boolean addToMachineListInternal(ArrayList aList, final IGregTechTileEntity aTileEntity, + final int aBaseCasingIndex) { + return addToMachineListInternal(aList, getMetaTileEntity(aTileEntity), aBaseCasingIndex); + } + + public boolean addToMachineListInternal(ArrayList aList, final IMetaTileEntity aTileEntity, + final int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + + // Check type + /* + * Class aHatchType = ReflectionUtils.getTypeOfGenericObject(aList); if + * (!aHatchType.isInstance(aTileEntity)) { return false; } + */ + + // Try setRecipeMap + + try { + if (aTileEntity instanceof MTEHatchInput) { + resetRecipeMapForHatch((MTEHatch) aTileEntity, getRecipeMap()); + } + if (aTileEntity instanceof MTEHatchInputBus) { + resetRecipeMapForHatch((MTEHatch) aTileEntity, getRecipeMap()); + } + } catch (Throwable t) { + t.printStackTrace(); + } + + if (aList.isEmpty()) { + if (aTileEntity instanceof MTEHatch) { + if (GTplusplus.CURRENT_LOAD_PHASE == INIT_PHASE.STARTED) { + log( + "Adding " + aTileEntity.getInventoryName() + + " at " + + new BlockPos(aTileEntity.getBaseMetaTileEntity()).getLocationString()); + } + updateTexture(aTileEntity, aBaseCasingIndex); + return aList.add((E) aTileEntity); + } + } else { + IGregTechTileEntity aCur = aTileEntity.getBaseMetaTileEntity(); + if (aList.contains(aTileEntity)) { + log( + "Found Duplicate " + aTileEntity.getInventoryName() + + " @ " + + new BlockPos(aCur).getLocationString()); + return false; + } + BlockPos aCurPos = new BlockPos(aCur); + boolean aExists = false; + for (E m : aList) { + IGregTechTileEntity b = ((IMetaTileEntity) m).getBaseMetaTileEntity(); + if (b != null) { + BlockPos aPos = new BlockPos(b); + if (aPos != null) { + if (aCurPos.equals(aPos)) { + if (GTplusplus.CURRENT_LOAD_PHASE == INIT_PHASE.STARTED) { + log("Found Duplicate " + b.getInventoryName() + " at " + aPos.getLocationString()); + } + return false; + } + } + } + } + if (aTileEntity instanceof MTEHatch) { + if (GTplusplus.CURRENT_LOAD_PHASE == INIT_PHASE.STARTED) { + log("Adding " + aCur.getInventoryName() + " at " + aCurPos.getLocationString()); + } + updateTexture(aTileEntity, aBaseCasingIndex); + return aList.add((E) aTileEntity); + } + } + return false; + } + + private IMetaTileEntity getMetaTileEntity(final IGregTechTileEntity aTileEntity) { + if (aTileEntity == null) { + return null; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + return aMetaTileEntity; + } + + @Override + public boolean addToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + return addToMachineList(getMetaTileEntity(aTileEntity), aBaseCasingIndex); + } + + public boolean addToMachineList(final IMetaTileEntity aMetaTileEntity, final int aBaseCasingIndex) { + if (aMetaTileEntity == null) { + return false; + } + + // Use this to determine the correct value, then update the hatch texture after. + boolean aDidAdd = false; + + // Handle Custom Hatches + if (aMetaTileEntity instanceof MTEHatchInputBattery) { + log("Found GT_MetaTileEntity_Hatch_InputBattery"); + aDidAdd = addToMachineListInternal(mChargeHatches, aMetaTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchOutputBattery) { + log("Found GT_MetaTileEntity_Hatch_OutputBattery"); + aDidAdd = addToMachineListInternal(mDischargeHatches, aMetaTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof METHatchAirIntake) { + aDidAdd = addToMachineListInternal(mAirIntakes, aMetaTileEntity, aBaseCasingIndex) + && addToMachineListInternal(mInputHatches, aMetaTileEntity, aBaseCasingIndex); + } + + // Handle TT Multi-A Energy Hatches + else if (isThisHatchMultiEnergy(aMetaTileEntity)) { + log("Found isThisHatchMultiEnergy"); + aDidAdd = addToMachineListInternal(mTecTechEnergyHatches, aMetaTileEntity, aBaseCasingIndex); + updateMasterEnergyHatchList(aMetaTileEntity); + } + + // Handle TT Multi-A Dynamos + else if (isThisHatchMultiDynamo(aMetaTileEntity)) { + log("Found isThisHatchMultiDynamo"); + aDidAdd = addToMachineListInternal(mTecTechDynamoHatches, aMetaTileEntity, aBaseCasingIndex); + updateMasterDynamoHatchList(aMetaTileEntity); + } + + // Handle Fluid Hatches using seperate logic + else if (aMetaTileEntity instanceof MTEHatchInput) + aDidAdd = addToMachineListInternal(mInputHatches, aMetaTileEntity, aBaseCasingIndex); + else if (aMetaTileEntity instanceof MTEHatchOutput) + aDidAdd = addToMachineListInternal(mOutputHatches, aMetaTileEntity, aBaseCasingIndex); + + // Process Remaining hatches using Vanilla GT Logic + else if (aMetaTileEntity instanceof IDualInputHatch hatch) { + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + aDidAdd = addToMachineListInternal(mDualInputHatches, aMetaTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchInputBus) + aDidAdd = addToMachineListInternal(mInputBusses, aMetaTileEntity, aBaseCasingIndex); + else if (aMetaTileEntity instanceof MTEHatchOutputBus) + aDidAdd = addToMachineListInternal(mOutputBusses, aMetaTileEntity, aBaseCasingIndex); + else if (aMetaTileEntity instanceof MTEHatchEnergy) { + aDidAdd = addToMachineListInternal(mEnergyHatches, aMetaTileEntity, aBaseCasingIndex); + updateMasterEnergyHatchList(aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchDynamo) { + aDidAdd = addToMachineListInternal(mDynamoHatches, aMetaTileEntity, aBaseCasingIndex); + updateMasterDynamoHatchList(aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchMaintenance) + aDidAdd = addToMachineListInternal(mMaintenanceHatches, aMetaTileEntity, aBaseCasingIndex); + else if (aMetaTileEntity instanceof MTEHatchMuffler) + aDidAdd = addToMachineListInternal(mMufflerHatches, aMetaTileEntity, aBaseCasingIndex); + + // return super.addToMachineList(aTileEntity, aBaseCasingIndex); + return aDidAdd; + } + + @Override + public boolean addMaintenanceToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); + if (aMetaTileEntity instanceof MTEHatchMaintenance) { + return addToMachineList(aMetaTileEntity, aBaseCasingIndex); + } + return false; + } + + @Override + public boolean addMufflerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); + if (aMetaTileEntity instanceof MTEHatchMuffler) { + return addToMachineList(aMetaTileEntity, aBaseCasingIndex); + } + return false; + } + + @Override + public boolean addInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); + if (aMetaTileEntity instanceof MTEHatchInput || aMetaTileEntity instanceof MTEHatchInputBus) { + return addToMachineList(aMetaTileEntity, aBaseCasingIndex); + } + return false; + } + + @Override + public boolean addOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); + if (aMetaTileEntity instanceof MTEHatchOutput || aMetaTileEntity instanceof MTEHatchOutputBus) { + return addToMachineList(aMetaTileEntity, aBaseCasingIndex); + } + return false; + } + + public boolean addAirIntakeToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); + if (aMetaTileEntity instanceof METHatchAirIntake) { + return addToMachineList(aMetaTileEntity, aBaseCasingIndex); + } + return false; + } + + public boolean addFluidInputToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + return addFluidInputToMachineList(getMetaTileEntity(aTileEntity), aBaseCasingIndex); + } + + public boolean addFluidInputToMachineList(final IMetaTileEntity aMetaTileEntity, final int aBaseCasingIndex) { + if (aMetaTileEntity instanceof MTEHatchInput) { + return addToMachineList(aMetaTileEntity, aBaseCasingIndex); + } + return false; + } + + public boolean clearRecipeMapForAllInputHatches() { + return resetRecipeMapForAllInputHatches(null); + } + + public boolean resetRecipeMapForAllInputHatches() { + return resetRecipeMapForAllInputHatches(this.getRecipeMap()); + } + + public boolean resetRecipeMapForAllInputHatches(RecipeMap aMap) { + int cleared = 0; + for (MTEHatchInput g : this.mInputHatches) { + if (resetRecipeMapForHatch(g, aMap)) { + cleared++; + } + } + for (MTEHatchInputBus g : this.mInputBusses) { + if (resetRecipeMapForHatch(g, aMap)) { + cleared++; + } + } + return cleared > 0; + } + + public boolean resetRecipeMapForHatch(IGregTechTileEntity aTileEntity, RecipeMap aMap) { + try { + final IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchInput || aMetaTileEntity instanceof MTEHatchInputBus + || aMetaTileEntity instanceof MteHatchSteamBusInput) { + return resetRecipeMapForHatch((MTEHatch) aMetaTileEntity, aMap); + } else { + return false; + } + } catch (Throwable t) { + t.printStackTrace(); + return false; + } + } + + public boolean resetRecipeMapForHatch(MTEHatch aTileEntity, RecipeMap aMap) { + if (aTileEntity == null) { + return false; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity; + if (aMetaTileEntity instanceof MTEHatchInput || aMetaTileEntity instanceof MTEHatchInputBus + || aMetaTileEntity instanceof MteHatchSteamBusInput) { + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = null; + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = aMap; + if (aMap != null) { + log("Remapped Input Hatch to " + aMap.unlocalizedName + "."); + } else { + log("Cleared Input Hatch."); + } + } else if (aMetaTileEntity instanceof MTEHatchInputBus) { + ((MTEHatchInputBus) aMetaTileEntity).mRecipeMap = null; + ((MTEHatchInputBus) aMetaTileEntity).mRecipeMap = aMap; + if (aMap != null) { + log("Remapped Input Bus to " + aMap.unlocalizedName + "."); + } else { + log("Cleared Input Bus."); + } + } else { + ((MteHatchSteamBusInput) aMetaTileEntity).mRecipeMap = null; + ((MteHatchSteamBusInput) aMetaTileEntity).mRecipeMap = aMap; + if (aMap != null) { + log("Remapped Input Bus to " + aMap.unlocalizedName + "."); + } else { + log("Cleared Input Bus."); + } + } + return true; + } else { + return false; + } + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + clearRecipeMapForAllInputHatches(); + onModeChangeByScrewdriver(side, aPlayer, aX, aY, aZ); + mLastRecipe = null; + resetRecipeMapForAllInputHatches(); + } + + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {} + + /** + * Enable Texture Casing Support if found in GT 5.09 + */ + public boolean updateTexture(final IGregTechTileEntity aTileEntity, int aCasingID) { + return updateTexture(getMetaTileEntity(aTileEntity), aCasingID); + } + + /** + * Enable Texture Casing Support if found in GT 5.09 + */ + public boolean updateTexture(final IMetaTileEntity aTileEntity, int aCasingID) { + try { // gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch.updateTexture(int) + + final IMetaTileEntity aMetaTileEntity = aTileEntity; + if (aMetaTileEntity == null) { + return false; + } + Method mProper = ReflectionUtils.getMethod(MTEHatch.class, "updateTexture", int.class); + if (mProper != null) { + if (MTEHatch.class.isInstance(aMetaTileEntity)) { + mProper.setAccessible(true); + mProper.invoke(aMetaTileEntity, aCasingID); + // log("Good Method Call for updateTexture."); + return true; + } + } else { + log("Bad Method Call for updateTexture."); + if (MTEHatch.class.isInstance(aMetaTileEntity)) { + if (aCasingID <= Byte.MAX_VALUE) { + ((MTEHatch) aTileEntity).updateTexture(aCasingID); + log( + "Good Method Call for updateTexture. Used fallback method of setting mMachineBlock as casing id was <= 128."); + return true; + } else { + log("updateTexture returning false. 1.2"); + } + } else { + log("updateTexture returning false. 1.3"); + } + } + log("updateTexture returning false. 1"); + return false; + } catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + log("updateTexture returning false."); + log("updateTexture returning false. 2"); + e.printStackTrace(); + return false; + } + } + + /** + * TecTech Support + */ + + /** + * This is the array Used to Store the Tectech Multi-Amp Dynamo hatches. + */ + public ArrayList mTecTechDynamoHatches = new ArrayList<>(); + + /** + * This is the array Used to Store the Tectech Multi-Amp Energy hatches. + */ + public ArrayList mTecTechEnergyHatches = new ArrayList<>(); + + /** + * TecTech Multi-Amp Dynamo Support + * + * @param aTileEntity - The Dynamo Hatch + * @param aBaseCasingIndex - Casing Texture + * @return + */ + public boolean addMultiAmpDynamoToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + final IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); + if (aMetaTileEntity == null) { + return false; + } + if (isThisHatchMultiDynamo(aTileEntity)) { + return addToMachineListInternal(mTecTechDynamoHatches, aMetaTileEntity, aBaseCasingIndex); + } + return false; + } + + public boolean isThisHatchMultiDynamo(IGregTechTileEntity aTileEntity) { + return isThisHatchMultiDynamo(getMetaTileEntity(aTileEntity)); + } + + public boolean isThisHatchMultiDynamo(IMetaTileEntity aMetaTileEntity) { + return aMetaTileEntity instanceof MTEHatchDynamoMulti; + } + + @Override + public boolean addDynamoToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); + if (aMetaTileEntity instanceof MTEHatchDynamo || isThisHatchMultiDynamo(aMetaTileEntity)) { + return addToMachineList(aMetaTileEntity, aBaseCasingIndex); + } + return false; + } + + private boolean updateMasterDynamoHatchList(IMetaTileEntity aMetaTileEntity) { + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatch aHatch) { + return mAllDynamoHatches.add(aHatch); + } + return false; + } + + /** + * TecTech Multi-Amp Energy Hatch Support + * + * @param aTileEntity - The Energy Hatch + * @param aBaseCasingIndex - Casing Texture + * @return + */ + public boolean addMultiAmpEnergyToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + final IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); + if (aMetaTileEntity == null) { + return false; + } + if (isThisHatchMultiEnergy(aMetaTileEntity)) { + return addToMachineListInternal(mTecTechEnergyHatches, aMetaTileEntity, aBaseCasingIndex); + } + return false; + } + + public boolean isThisHatchMultiEnergy(IGregTechTileEntity aTileEntity) { + return isThisHatchMultiEnergy(getMetaTileEntity(aTileEntity)); + } + + public boolean isThisHatchMultiEnergy(IMetaTileEntity aMetaTileEntity) { + return aMetaTileEntity instanceof MTEHatchEnergyMulti; + } + + @Override + public boolean addEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); + if (aMetaTileEntity instanceof MTEHatchEnergy || isThisHatchMultiEnergy(aMetaTileEntity)) { + return addToMachineList(aMetaTileEntity, aBaseCasingIndex); + } + return false; + } + + private boolean updateMasterEnergyHatchList(IMetaTileEntity aMetaTileEntity) { + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatch aHatch) { + return mAllEnergyHatches.add(aHatch); + } + return false; + } + + /** + * Pollution Management + */ + public int calculatePollutionReductionForHatch(MTEHatchMuffler hatch, int poll) { + return hatch.calculatePollutionReduction(poll); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("mVoidExcess")) { + // backward compatibility + voidingMode = aNBT.getBoolean("mVoidExcess") ? VoidingMode.VOID_ALL : VoidingMode.VOID_NONE; + } + if (aNBT.hasKey("mUseMultiparallelMode")) { + // backward compatibility + batchMode = aNBT.getBoolean("mUseMultiparallelMode"); + } + } + + /** + * Custom Tool Handling + */ + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + // Do Things + if (this.getBaseMetaTileEntity() + .isServerSide()) { + // Logger.INFO("Right Clicked Controller."); + ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + if (tCurrentItem != null) { + // Logger.INFO("Holding Item."); + if (tCurrentItem.getItem() instanceof MetaGeneratedTool) { + // Logger.INFO("Is GT_MetaGenerated_Tool."); + int[] aOreID = OreDictionary.getOreIDs(tCurrentItem); + for (int id : aOreID) { + // Plunger + if (OreDictionary.getOreName(id) + .equals("craftingToolPlunger")) { + // Logger.INFO("Is Plunger."); + return onPlungerRightClick(aPlayer, side, aX, aY, aZ); + } + } + } + } + } + // Do Super + boolean aSuper = super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + return aSuper; + } + + public boolean onPlungerRightClick(EntityPlayer aPlayer, ForgeDirection side, float aX, float aY, float aZ) { + int aHatchIndex = 0; + PlayerUtils.messagePlayer(aPlayer, "Trying to clear " + mOutputHatches.size() + " output hatches."); + for (MTEHatchOutput hatch : this.mOutputHatches) { + if (hatch.mFluid != null) { + PlayerUtils.messagePlayer( + aPlayer, + "Clearing " + hatch.mFluid.amount + + "L of " + + hatch.mFluid.getLocalizedName() + + " from hatch " + + aHatchIndex + + "."); + hatch.mFluid = null; + } + aHatchIndex++; + } + return aHatchIndex > 0; + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + batchMode = !batchMode; + if (batchMode) { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); + } else { + GTUtility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); + } + return true; + } + return false; + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (supportsVoidProtection() && wrenchingSide == getBaseMetaTileEntity().getFrontFacing()) { + Set allowed = getAllowedVoidingModes(); + setVoidingMode(getVoidingMode().nextInCollection(allowed)); + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.gui.button.voiding_mode") + " " + + StatCollector.translateToLocal(getVoidingMode().getTransKey())); + return true; + } else return super.onSolderingToolRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ); + } + + // Only support to use meta to tier + + /** + * accept meta [0, maxMeta) + * + * @param maxMeta exclusive + */ + public static IStructureElement addTieredBlock(Block aBlock, BiConsumer aSetTheMeta, + Function aGetTheMeta, int maxMeta) { + return addTieredBlock(aBlock, (t, i) -> { + aSetTheMeta.accept(t, i); + return true; + }, aGetTheMeta, 0, maxMeta); + } + + /** + * + * @param minMeta inclusive + * @param maxMeta exclusive + */ + public static IStructureElement addTieredBlock(Block aBlock, BiConsumer aSetTheMeta, + Function aGetTheMeta, int minMeta, int maxMeta) { + return addTieredBlock(aBlock, (t, i) -> { + aSetTheMeta.accept(t, i); + return true; + }, aGetTheMeta, minMeta, maxMeta); + } + + /** + * + * @param minMeta inclusive + * @param maxMeta exclusive + */ + public static IStructureElement addTieredBlock(Block aBlock, BiPredicate aSetTheMeta, + Function aGetTheMeta, int minMeta, int maxMeta) { + + return new IStructureElement<>() { + + @Override + public boolean check(T t, World world, int x, int y, int z) { + Block tBlock = world.getBlock(x, y, z); + if (aBlock == tBlock) { + Integer currentMeta = aGetTheMeta.apply(t); + int newMeta = tBlock.getDamageValue(world, x, y, z) + 1; + if (newMeta > maxMeta || newMeta < minMeta + 1) return false; + if (currentMeta == 0) { + return aSetTheMeta.test(t, newMeta); + } else { + return currentMeta == newMeta; + } + } + return false; + } + + @Override + public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, aBlock, getMeta(trigger)); + return true; + } + + @Override + public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { + return world.setBlock(x, y, z, aBlock, getMeta(trigger), 3); + } + + private int getMeta(ItemStack trigger) { + int meta = trigger.stackSize; + if (meta <= 0) meta = minMeta; + if (meta + minMeta >= maxMeta) meta = maxMeta - 1 - minMeta; + return meta + minMeta; + } + + @Nullable + @Override + public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + return BlocksToPlace.create(aBlock, getMeta(trigger)); + } + + @Override + public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + if (world.getBlock(x, y, z) == aBlock) { + if (world.getBlockMetadata(x, y, z) == getMeta(trigger)) { + return PlaceResult.SKIP; + } + return PlaceResult.REJECT; + } + return StructureUtility.survivalPlaceBlock( + aBlock, + getMeta(trigger), + world, + x, + y, + z, + env.getSource(), + env.getActor(), + env.getChatter()); + } + }; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { getCasingTexture(), TextureFactory.builder() + .addIcon(getActiveOverlay()) + .extFacing() + .build() }; + return new ITexture[] { getCasingTexture(), TextureFactory.builder() + .addIcon(getInactiveOverlay()) + .extFacing() + .build() }; + } + return new ITexture[] { getCasingTexture() }; + } + + protected IIconContainer getActiveOverlay() { + return null; + } + + protected IIconContainer getInactiveOverlay() { + return null; + } + + protected ITexture getCasingTexture() { + return Textures.BlockIcons.getCasingTextureForId(getCasingTextureId()); + } + + protected int getCasingTextureId() { + return 0; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + if (doesBindPlayerInventory()) { + super.addUIWidgets(builder, buildContext); + } else { + addNoPlayerInventoryUI(builder, buildContext); + } + } + + private static final Materials GOOD = Materials.Uranium; + private static final Materials BAD = Materials.Plutonium; + private static final ConcurrentHashMap mToolStacks = new ConcurrentHashMap<>(); + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + protected void addNoPlayerInventoryUI(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(3, 4) + .setSize(152, 159)); + for (int i = 0; i < 9; i++) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.BUTTON_STANDARD) + .setPos(155, 3 + i * 18) + .setSize(18, 18)); + } + + DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); + drawTextsNoPlayerInventory(screenElements); + builder.widget(screenElements); + + setupToolDisplay(); + + builder.widget( + new ItemDrawable(() -> mToolStacks.get(mWrench + "WRENCH")).asWidget() + .setPos(156, 58)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mWrench, val -> mWrench = val)); + builder.widget( + new ItemDrawable(() -> mToolStacks.get(mCrowbar + "CROWBAR")).asWidget() + .setPos(156, 76)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mCrowbar, val -> mCrowbar = val)); + builder.widget( + new ItemDrawable(() -> mToolStacks.get(mHardHammer + "HARDHAMMER")).asWidget() + .setPos(156, 94)) + .widget( + new TextWidget("H").setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(167, 103)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mHardHammer, val -> mHardHammer = val)); + builder.widget( + new ItemDrawable(() -> mToolStacks.get(mSoftHammer + "SOFTHAMMER")).asWidget() + .setPos(156, 112)) + .widget( + new TextWidget("M").setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(167, 121)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mSoftHammer, val -> mSoftHammer = val)); + builder.widget( + new ItemDrawable(() -> mToolStacks.get(mScrewdriver + "SCREWDRIVER")).asWidget() + .setPos(156, 130)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mScrewdriver, val -> mScrewdriver = val)); + builder.widget( + new ItemDrawable(() -> mToolStacks.get(mSolderingTool + "SOLDERING_IRON_LV")).asWidget() + .setPos(156, 148)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mSolderingTool, val -> mSolderingTool = val)); + builder.widget( + new ItemDrawable(() -> mToolStacks.get(getBaseMetaTileEntity().isActive() + "GLASS")).asWidget() + .setPos(156, 22)) + .widget( + TextWidget.dynamicString(() -> getBaseMetaTileEntity().isActive() ? "On" : "Off") + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(157, 31)) + .widget( + new FakeSyncWidget.BooleanSyncer( + () -> getBaseMetaTileEntity().isActive(), + val -> getBaseMetaTileEntity().setActive(val))); + } + + protected void drawTextsNoPlayerInventory(DynamicPositionedColumn screenElements) { + screenElements.setSynced(false) + .setSpace(0) + .setPos(6, 7); + + screenElements + .widget( + new TextWidget(GTUtility.trans("138", "Incomplete Structure.")).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> !mMachine)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val)) + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocal("GTPP.machines.input") + " " + + StatCollector.translateToLocal("GTPP.machines.tier") + + ": " + + EnumChatFormatting.GREEN + + GTValues.VOLTAGE_NAMES[(int) getInputTier()]) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine && getInputTier() > 0)) + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocal("GTPP.machines.output") + " " + + StatCollector.translateToLocal("GTPP.machines.tier") + + ": " + + EnumChatFormatting.GREEN + + GTValues.VOLTAGE_NAMES[(int) getOutputTier()]) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine && getOutputTier() > 0)) + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocal("GTPP.multiblock.progress") + ": " + + EnumChatFormatting.GREEN + + getBaseMetaTileEntity().getProgress() / 20 + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + getBaseMetaTileEntity().getMaxProgress() / 20 + + EnumChatFormatting.RESET + + " s") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + new TextWidget(StatCollector.translateToLocal("GTPP.multiblock.energy") + ":") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocal( + "" + EnumChatFormatting.GREEN + + getStoredEnergyInAllEnergyHatches() + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + getMaxEnergyStorageOfAllEnergyHatches() + + EnumChatFormatting.RESET + + " EU")) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + new TextWidget(StatCollector.translateToLocal("GTPP.multiblock.usage") + ":") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine && getLastRecipeEU() > 0 && getLastRecipeDuration() > 0)) + .widget( + TextWidget.dynamicString( + () -> StatCollector.translateToLocal( + "" + EnumChatFormatting.RED + -getLastRecipeEU() + EnumChatFormatting.RESET + " EU/t/parallel")) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine && getLastRecipeEU() > 0 && getLastRecipeDuration() > 0)) + .widget( + TextWidget.dynamicString(() -> StatCollector.translateToLocal("GTPP.multiblock.generation") + ":") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine && getLastRecipeEU() < 0 && getLastRecipeDuration() > 0)) + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocal( + "" + EnumChatFormatting.GREEN + + getLastRecipeEU() + + EnumChatFormatting.RESET + + " EU/t/parallel")) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine && getLastRecipeEU() < 0 && getLastRecipeDuration() > 0)) + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocal("GTPP.multiblock.duration") + ": " + + EnumChatFormatting.RED + + getLastRecipeDuration() + + EnumChatFormatting.RESET + + " ticks") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine && getLastRecipeEU() != 0 && getLastRecipeDuration() > 0)) + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocal("GTPP.multiblock.specialvalue") + ": " + + EnumChatFormatting.RED + + getLastRecipeEU() + + EnumChatFormatting.RESET + + "") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled( + widget -> mMachine && getLastRecipeEU() != 0 + && getLastRecipeDuration() > 0 + && (mLastRecipe != null ? mLastRecipe.mSpecialValue : 0) > 0)) + .widget( + new TextWidget(StatCollector.translateToLocal("GTPP.multiblock.mei") + ":") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocal( + "" + EnumChatFormatting.YELLOW + + getMaxInputVoltage() + + EnumChatFormatting.RESET + + " EU/t(*2A) " + + StatCollector.translateToLocal("GTPP.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + GTValues.VN[GTUtility.getTier(getMaxInputVoltage())] + + EnumChatFormatting.RESET)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocal("GTPP.multiblock.efficiency") + ": " + + EnumChatFormatting.YELLOW + + (mEfficiency / 100.0F) + + EnumChatFormatting.RESET + + " %") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocal("GTPP.multiblock.pollution") + ": " + + EnumChatFormatting.RED + + (getPollutionPerTick(null) * 20) + + EnumChatFormatting.RESET + + "/sec") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + TextWidget + .dynamicString( + () -> StatCollector.translateToLocal("GTPP.multiblock.pollutionreduced") + ": " + + EnumChatFormatting.GREEN + + getPollutionReductionForAllMufflers() + + EnumChatFormatting.RESET + + " %") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + new TextWidget("Total Time Since Built: ").setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + TextWidget + .dynamicString( + () -> "" + EnumChatFormatting.DARK_GREEN + + getRuntimeWeeksDisplay() + + EnumChatFormatting.RESET + + " Weeks,") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + TextWidget + .dynamicString( + () -> "" + EnumChatFormatting.DARK_GREEN + + getRuntimeDaysDisplay() + + EnumChatFormatting.RESET + + " Days,") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + TextWidget + .dynamicString( + () -> "" + EnumChatFormatting.DARK_GREEN + + getRuntimeHoursDisplay() + + EnumChatFormatting.RESET + + " Hours,") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + TextWidget + .dynamicString( + () -> "" + EnumChatFormatting.DARK_GREEN + + getRuntimeMinutesDisplay() + + EnumChatFormatting.RESET + + " Minutes,") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)) + .widget( + TextWidget + .dynamicString( + () -> "" + EnumChatFormatting.DARK_GREEN + + getRuntimeSecondsDisplay() + + EnumChatFormatting.RESET + + " Seconds") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setEnabled(widget -> mMachine)); + } + + protected int getLastRecipeEU() { + return mLastRecipe != null ? mLastRecipe.mEUt : 0; + } + + protected int getLastRecipeDuration() { + return mLastRecipe != null ? mLastRecipe.mDuration : 0; + } + + protected long getRuntimeSeconds() { + return getTotalRuntimeInTicks() / 20; + } + + protected long getRuntimeWeeksDisplay() { + return TimeUnit.SECONDS.toDays(getRuntimeSeconds()) / 7; + } + + protected long getRuntimeDaysDisplay() { + return TimeUnit.SECONDS.toDays(getRuntimeSeconds()) - 7 * getRuntimeWeeksDisplay(); + } + + protected long getRuntimeHoursDisplay() { + return TimeUnit.SECONDS.toHours(getRuntimeSeconds()) - TimeUnit.DAYS.toHours(getRuntimeDaysDisplay()) + - TimeUnit.DAYS.toHours(7 * getRuntimeWeeksDisplay()); + } + + protected long getRuntimeMinutesDisplay() { + return TimeUnit.SECONDS.toMinutes(getRuntimeSeconds()) - (TimeUnit.SECONDS.toHours(getRuntimeSeconds()) * 60); + } + + protected long getRuntimeSecondsDisplay() { + return TimeUnit.SECONDS.toSeconds(getRuntimeSeconds()) - (TimeUnit.SECONDS.toMinutes(getRuntimeSeconds()) * 60); + } + + protected void setupToolDisplay() { + if (!mToolStacks.isEmpty()) return; + + mToolStacks.put( + true + "WRENCH", + MetaGeneratedTool01.INSTANCE.getToolWithStats(IDMetaTool01.WRENCH.ID, 1, GOOD, Materials.Tungsten, null)); + mToolStacks.put( + true + "CROWBAR", + MetaGeneratedTool01.INSTANCE.getToolWithStats(IDMetaTool01.CROWBAR.ID, 1, GOOD, Materials.Tungsten, null)); + mToolStacks.put( + true + "HARDHAMMER", + MetaGeneratedTool01.INSTANCE + .getToolWithStats(IDMetaTool01.HARDHAMMER.ID, 1, GOOD, Materials.Tungsten, null)); + mToolStacks.put( + true + "SOFTHAMMER", + MetaGeneratedTool01.INSTANCE + .getToolWithStats(IDMetaTool01.SOFTMALLET.ID, 1, GOOD, Materials.Tungsten, null)); + mToolStacks.put( + true + "SCREWDRIVER", + MetaGeneratedTool01.INSTANCE + .getToolWithStats(IDMetaTool01.SCREWDRIVER.ID, 1, GOOD, Materials.Tungsten, null)); + mToolStacks.put( + true + "SOLDERING_IRON_LV", + MetaGeneratedTool01.INSTANCE + .getToolWithStats(IDMetaTool01.SOLDERING_IRON_LV.ID, 1, GOOD, Materials.Tungsten, null)); + + mToolStacks.put( + false + "WRENCH", + MetaGeneratedTool01.INSTANCE.getToolWithStats(IDMetaTool01.WRENCH.ID, 1, BAD, Materials.Tungsten, null)); + mToolStacks.put( + false + "CROWBAR", + MetaGeneratedTool01.INSTANCE.getToolWithStats(IDMetaTool01.CROWBAR.ID, 1, BAD, Materials.Tungsten, null)); + mToolStacks.put( + false + "HARDHAMMER", + MetaGeneratedTool01.INSTANCE + .getToolWithStats(IDMetaTool01.HARDHAMMER.ID, 1, BAD, Materials.Tungsten, null)); + mToolStacks.put( + false + "SOFTHAMMER", + MetaGeneratedTool01.INSTANCE + .getToolWithStats(IDMetaTool01.SOFTMALLET.ID, 1, BAD, Materials.Tungsten, null)); + mToolStacks.put( + false + "SCREWDRIVER", + MetaGeneratedTool01.INSTANCE + .getToolWithStats(IDMetaTool01.SCREWDRIVER.ID, 1, BAD, Materials.Tungsten, null)); + mToolStacks.put( + false + "SOLDERING_IRON_LV", + MetaGeneratedTool01.INSTANCE + .getToolWithStats(IDMetaTool01.SOLDERING_IRON_LV.ID, 1, BAD, Materials.Tungsten, null)); + + ItemStack aGlassPane1 = ItemUtils.getItemStackOfAmountFromOreDict("paneGlassRed", 1); + ItemStack aGlassPane2 = ItemUtils.getItemStackOfAmountFromOreDict("paneGlassLime", 1); + mToolStacks.put("falseGLASS", aGlassPane1); + mToolStacks.put("trueGLASS", aGlassPane2); + } + + public enum GTPPHatchElement implements IHatchElement> { + + AirIntake(GTPPMultiBlockBase::addAirIntakeToMachineList, METHatchAirIntake.class) { + + @Override + public long count(GTPPMultiBlockBase t) { + return t.mAirIntakes.size(); + } + }, + TTDynamo(GTPPMultiBlockBase::addMultiAmpDynamoToMachineList, MTEHatchDynamoMulti.class) { + + @Override + public long count(GTPPMultiBlockBase t) { + return t.mTecTechDynamoHatches.size(); + } + }, + TTEnergy(GTPPMultiBlockBase::addMultiAmpEnergyToMachineList, MTEHatchEnergyMulti.class) { + + @Override + public long count(GTPPMultiBlockBase t) { + return t.mTecTechEnergyHatches.size(); + } + },; + + @SuppressWarnings("unchecked") + private static Class retype(Class clazz) { + return (Class) clazz; + } + + private final List> mMteClasses; + private final IGTHatchAdder> mAdder; + + @SafeVarargs + GTPPHatchElement(IGTHatchAdder> aAdder, + Class... aMteClasses) { + this.mMteClasses = Arrays.asList(aMteClasses); + this.mAdder = aAdder; + } + + GTPPHatchElement(IGTHatchAdder> aAdder, String... aClassNames) { + this.mMteClasses = Arrays.stream(aClassNames) + .map(ReflectionUtils::getClass) + .filter(Objects::nonNull) + .>map(GTPPHatchElement::retype) + .collect(Collectors.toList()); + this.mAdder = aAdder; + } + + @Override + public List> mteClasses() { + return mMteClasses; + } + + @Override + public IGTHatchAdder> adder() { + return mAdder; + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GT_MetaTileEntity_Hatch_CustomFluidBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GT_MetaTileEntity_Hatch_CustomFluidBase.java deleted file mode 100644 index fd92983af4..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GT_MetaTileEntity_Hatch_CustomFluidBase.java +++ /dev/null @@ -1,210 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base; - -import static gregtech.api.enums.Textures.BlockIcons.FLUID_IN_SIGN; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_IN; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; - -import gregtech.GT_Mod; -import gregtech.api.gui.modularui.GT_UIInfos; -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.render.TextureFactory; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.FluidUtils; - -public class GT_MetaTileEntity_Hatch_CustomFluidBase extends GT_MetaTileEntity_Hatch { - - public final Fluid mLockedFluid; - public final int mFluidCapacity; - protected FluidStack mLockedStack = null; - protected String mTempMod = null; - - public GT_MetaTileEntity_Hatch_CustomFluidBase(Fluid aFluid, int aAmount, final int aID, final String aName, - final String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 3, - new String[] { "Fluid Input for Multiblocks", "Capacity: " + GT_Utility.formatNumbers(aAmount) + "L" }); - this.mLockedFluid = aFluid; - this.mFluidCapacity = aAmount; - } - - public GT_MetaTileEntity_Hatch_CustomFluidBase(Fluid aFluid, int aAmount, final String aName, final int aTier, - final String[] aDescription, final ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription[0], aTextures); - this.mLockedFluid = aFluid; - this.mFluidCapacity = aAmount; - } - - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - if (side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 0) { - FluidStack fs = GT_Utility.getFluidForFilledItem(aStack, true); - return fs != null && fs.getFluid() == this.mLockedFluid; - } - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 1; - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(FLUID_IN_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return GT_Mod.gregtechproxy.mRenderIndicatorsOnHatch - ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(FLUID_IN_SIGN) } - : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean doesFillContainers() { - // return true; - return false; - } - - @Override - public boolean doesEmptyContainers() { - return true; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public boolean displaysItemStack() { - return true; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - public void updateSlots() { - if (mInventory[getInputSlot()] != null && mInventory[getInputSlot()].stackSize <= 0) - mInventory[getInputSlot()] = null; - } - - @Override - public int getTankPressure() { - return -100; - } - - @Override - public int getCapacity() { - return this.mFluidCapacity; - } - - @Override - public String[] getDescription() { - if (mLockedStack == null) { - mLockedStack = FluidUtils.getFluidStack(mLockedFluid, 1); - } - int aFluidTemp = 0; - boolean isSteam = false; - if (mLockedFluid != null) { - aFluidTemp = mLockedFluid.getTemperature(); - mTempMod = mLockedFluid.getName(); - } - if (mTempMod.equalsIgnoreCase("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; - return new String[] { "Fluid Input for " + (isSteam ? "Steam " : "") + "Multiblocks", - "Capacity: " + getCapacity() + "L", aFluidName, CORE.GT_Tooltip.get() }; - } - - @Override - public boolean isFluidInputAllowed(final FluidStack aFluid) { - return this.mLockedFluid.getName() - .equals( - aFluid.getFluid() - .getName()); - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_CustomFluidBase( - this.mLockedFluid, - this.mFluidCapacity, - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - protected FluidSlotWidget createFluidSlot() { - return super.createFluidSlot().setFilter(f -> f == mLockedFluid); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMetaTileEntity.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMetaTileEntity.java deleted file mode 100644 index e260347ca5..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMetaTileEntity.java +++ /dev/null @@ -1,74 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base; - -import static gregtech.api.enums.GT_Values.GT; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.metatileentity.MetaTileEntity; - -public abstract class GregtechMetaTileEntity extends MetaTileEntity { - - /** - * Value between [0 - 9] to describe the Tier of this Machine. - */ - protected byte mTier; - - /** - * A simple Description. - */ - protected final String mDescription; - - /** - * Contains all Textures used by this Block. - */ - public final ITexture[][][] mTextures; - - public GregtechMetaTileEntity(final int aID, final String aName, final String aNameRegional, final int aTier, - final int aInvSlotCount, final String aDescription, final ITexture... aTextures) { - super(aID, aName, aNameRegional, aInvSlotCount); - this.mTier = (byte) Math.max(0, Math.min(aTier, 9)); - this.mDescription = aDescription; - - // must always be the last call! - if (GT.isClientSide()) { - this.mTextures = this.getTextureSet(aTextures); - } else { - this.mTextures = null; - } - } - - public GregtechMetaTileEntity(final String aName, final int aTier, final int aInvSlotCount, - final String aDescription, final ITexture[][][] aTextures) { - super(aName, aInvSlotCount); - this.mTier = (byte) aTier; - this.mDescription = aDescription; - this.mTextures = aTextures; - } - - @Override - public byte getTileEntityBaseType() { - return (byte) (Math.min(3, this.mTier <= 0 ? 0 : 1 + ((this.mTier - 1) / 4))); - } - - @Override - public long getInputTier() { - return this.mTier; - } - - @Override - public long getOutputTier() { - return this.mTier; - } - - @Override - public String[] getDescription() { - return new String[] { this.mDescription }; - } - - /** - * Used Client Side to get a Texture Set for this Block. Called after setting the Tier and the Description so that - * those two are accessible. - * - * @param aTextures is the optional Array you can give to the Constructor. - */ - public abstract ITexture[][][] getTextureSet(ITexture[] aTextures); -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMetaTransformerHiAmp.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMetaTransformerHiAmp.java deleted file mode 100644 index c6a088fb1c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMetaTransformerHiAmp.java +++ /dev/null @@ -1,117 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -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.GT_MetaTileEntity_Transformer; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; - -public class GregtechMetaTransformerHiAmp extends GT_MetaTileEntity_Transformer { - - private boolean mHalfMode = false; - - public GregtechMetaTransformerHiAmp(int aID, String aName, String aNameRegional, int aTier, String aDescription) { - super(aID, aName, aNameRegional, aTier, aDescription); - } - - public GregtechMetaTransformerHiAmp(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public long maxEUStore() { - return ((512L + gregtech.api.enums.GT_Values.V[(this.mTier + 1)] * 2L) * 8); - } - - @Override - public long maxAmperesOut() { - if (this.mHalfMode) { - return ((getBaseMetaTileEntity().isAllowedToWork()) ? 8L : 2L); - } - return ((getBaseMetaTileEntity().isAllowedToWork()) ? 16L : 4L); - } - - @Override - public long maxAmperesIn() { - if (this.mHalfMode) { - return ((getBaseMetaTileEntity().isAllowedToWork()) ? 2L : 8L); - } - return ((getBaseMetaTileEntity().isAllowedToWork()) ? 4L : 16L); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - ITexture[][][] rTextures = new ITexture[12][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; - rTextures[1][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; - rTextures[2][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; - rTextures[3][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier + 1] }; - rTextures[4][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier + 1] }; - rTextures[5][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier + 1] }; - rTextures[6][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; - rTextures[7][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; - rTextures[8][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; - rTextures[9][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier + 1] }; - rTextures[10][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier + 1] }; - rTextures[11][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier + 1] }; - } - return rTextures; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTransformerHiAmp(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll( - this.mDescriptionArray, - "Accepts 4A and outputs 16A", - "Toggle 2A/8A half-mode with Screwdriver", - CORE.GT_Tooltip.get()); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setBoolean("mHalfMode", this.mHalfMode); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.mHalfMode = aNBT.getBoolean("mHalfMode"); - super.loadNBTData(aNBT); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - this.mHalfMode = !mHalfMode; - if (this.mHalfMode) { - PlayerUtils.messagePlayer(aPlayer, "Transformer is now running at 2A:8A in/out Ratio."); - } else { - PlayerUtils.messagePlayer(aPlayer, "Transformer is now running at 4A:16A in/out Ratio."); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java deleted file mode 100644 index 1417f53c01..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java +++ /dev/null @@ -1,1689 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base; - -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Map.Entry; -import java.util.Objects; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.TimeUnit; -import java.util.function.BiConsumer; -import java.util.function.BiPredicate; -import java.util.function.Function; -import java.util.stream.Collectors; - -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -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.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.StructureUtility; -import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.enums.VoidingMode; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.items.ID_MetaTool_01; -import gregtech.common.tileentities.machines.IDualInputHatch; -import gtPlusPlus.GTplusplus; -import gtPlusPlus.GTplusplus.INIT_PHASE; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.minecraft.BlockPos; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.preloader.CORE_Preloader; -import gtPlusPlus.preloader.asm.AsmConfig; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_AirIntake; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBattery; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBattery; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Steam_BusInput; - -// Glee8e - 11/12/21 - 2:15pm -// Yeah, now I see what's wrong. Someone inherited from GregtechMeta_MultiBlockBase instead of -// GregtechMeta_MultiBlockBase as it should have been -// so any method in GregtechMetaTileEntity_IndustrialDehydrator would see generic field declared in -// GregtechMeta_MultiBlockBase without generic parameter - -public abstract class GregtechMeta_MultiBlockBase> - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase { - - public static final boolean DEBUG_DISABLE_CORES_TEMPORARILY = true; - - public GT_Recipe mLastRecipe; - - /** - * Don't use this for recipe input check, otherwise you'll get duplicated fluids - */ - public ArrayList mAirIntakes = new ArrayList<>(); - - public ArrayList mChargeHatches = new ArrayList<>(); - public ArrayList mDischargeHatches = new ArrayList<>(); - public ArrayList mAllEnergyHatches = new ArrayList<>(); - public ArrayList mAllDynamoHatches = new ArrayList<>(); - - public GregtechMeta_MultiBlockBase(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMeta_MultiBlockBase(final String aName) { - super(aName); - } - - private static int toStackCount(Entry e) { - int tMaxStackSize = e.getKey() - .getMaxStackSize(); - int tStackSize = e.getValue(); - return (tStackSize + tMaxStackSize - 1) / tMaxStackSize; - } - - public abstract String getMachineType(); - - public String getMachineTooltip() { - return "Machine Type: " + EnumChatFormatting.YELLOW + getMachineType() + EnumChatFormatting.RESET; - } - - public String[] getExtraInfoData() { - return new String[0]; - } - - @Override - public String[] getInfoData() { - ArrayList mInfo = new ArrayList<>(); - if (!this.getMetaName() - .equals("")) { - mInfo.add(this.getMetaName()); - } - - String[] extra = getExtraInfoData(); - - if (extra == null) { - extra = new String[0]; - } - if (extra.length > 0) { - for (String s : extra) { - mInfo.add(s); - } - } - - long seconds = (this.mTotalRunTime / 20); - int weeks = (int) (TimeUnit.SECONDS.toDays(seconds) / 7); - int days = (int) (TimeUnit.SECONDS.toDays(seconds) - 7 * weeks); - long hours = TimeUnit.SECONDS.toHours(seconds) - TimeUnit.DAYS.toHours(days) - - TimeUnit.DAYS.toHours(7L * weeks); - long minutes = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds) * 60); - long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) * 60); - - mInfo.add(getMachineTooltip()); - - // Lets borrow the GTNH handling - - mInfo.add( - StatCollector.translateToLocal("GTPP.multiblock.progress") + ": " - + EnumChatFormatting.GREEN - + mProgresstime / 20 - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + mMaxProgresstime / 20 - + EnumChatFormatting.RESET - + " s"); - - if (!this.mAllEnergyHatches.isEmpty()) { - long storedEnergy = getStoredEnergyInAllEnergyHatches(); - long maxEnergy = getMaxEnergyStorageOfAllEnergyHatches(); - mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.energy") + ":"); - mInfo.add( - StatCollector.translateToLocal( - "" + EnumChatFormatting.GREEN - + Long.toString(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + Long.toString(maxEnergy) - + EnumChatFormatting.RESET - + " EU")); - - mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.mei") + ":"); - mInfo.add( - StatCollector.translateToLocal( - "" + EnumChatFormatting.YELLOW - + Long.toString(getMaxInputVoltage()) - + EnumChatFormatting.RESET - + " EU/t(*2A) " - + StatCollector.translateToLocal("GTPP.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + GT_Values.VN[GT_Utility.getTier(getMaxInputVoltage())] - + EnumChatFormatting.RESET));; - } - if (!this.mAllDynamoHatches.isEmpty()) { - long storedEnergy = getStoredEnergyInAllDynamoHatches(); - long maxEnergy = getMaxEnergyStorageOfAllDynamoHatches(); - mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.energy") + " In Dynamos:"); - mInfo.add( - StatCollector.translateToLocal( - "" + EnumChatFormatting.GREEN - + Long.toString(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + Long.toString(maxEnergy) - + EnumChatFormatting.RESET - + " EU")); - } - - if (-lEUt > 0) { - mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.usage") + ":"); - mInfo.add( - StatCollector - .translateToLocal("" + EnumChatFormatting.RED + (-lEUt) + EnumChatFormatting.RESET + " EU/t")); - } else { - mInfo.add(StatCollector.translateToLocal("GTPP.multiblock.generation") + ":"); - mInfo.add( - StatCollector - .translateToLocal("" + EnumChatFormatting.GREEN + lEUt + EnumChatFormatting.RESET + " EU/t")); - } - - mInfo.add( - StatCollector.translateToLocal("GTPP.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GTPP.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + Float.toString(mEfficiency / 100.0F) - + EnumChatFormatting.RESET - + " %"); - - if (this.getPollutionPerSecond(null) > 0) { - int mPollutionReduction = getPollutionReductionForAllMufflers(); - mInfo.add( - StatCollector.translateToLocal("GTPP.multiblock.pollution") + ": " - + EnumChatFormatting.RED - + this.getPollutionPerSecond(null) - + EnumChatFormatting.RESET - + "/sec"); - mInfo.add( - StatCollector.translateToLocal("GTPP.multiblock.pollutionreduced") + ": " - + EnumChatFormatting.GREEN - + mPollutionReduction - + EnumChatFormatting.RESET - + " %"); - } - - mInfo.add( - StatCollector.translateToLocal("GTPP.CC.parallel") + ": " - + EnumChatFormatting.GREEN - + (getMaxParallelRecipes()) - + EnumChatFormatting.RESET); - - mInfo.add( - "Total Time Since Built: " + EnumChatFormatting.DARK_GREEN - + Integer.toString(weeks) - + EnumChatFormatting.RESET - + " Weeks, " - + EnumChatFormatting.DARK_GREEN - + Integer.toString(days) - + EnumChatFormatting.RESET - + " Days, "); - mInfo.add( - EnumChatFormatting.DARK_GREEN + Long.toString(hours) - + EnumChatFormatting.RESET - + " Hours, " - + EnumChatFormatting.DARK_GREEN - + Long.toString(minutes) - + EnumChatFormatting.RESET - + " Minutes, " - + EnumChatFormatting.DARK_GREEN - + Long.toString(second) - + EnumChatFormatting.RESET - + " Seconds."); - mInfo.add("Total Time in ticks: " + EnumChatFormatting.DARK_GREEN + Long.toString(this.mTotalRunTime)); - - String[] mInfo2 = mInfo.toArray(new String[mInfo.size()]); - return mInfo2; - } - - public int getPollutionReductionForAllMufflers() { - int mPollutionReduction = 0; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - mPollutionReduction = Math.max(calculatePollutionReductionForHatch(tHatch, 100), mPollutionReduction); - } - return mPollutionReduction; - } - - public long getStoredEnergyInAllEnergyHatches() { - long storedEnergy = 0; - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(mAllEnergyHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - } - return storedEnergy; - } - - public long getMaxEnergyStorageOfAllEnergyHatches() { - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(mAllEnergyHatches)) { - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - return maxEnergy; - } - - public long getStoredEnergyInAllDynamoHatches() { - long storedEnergy = 0; - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(mAllDynamoHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - } - return storedEnergy; - } - - public long getMaxEnergyStorageOfAllDynamoHatches() { - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(mAllDynamoHatches)) { - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - return maxEnergy; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - private String[] aCachedToolTip; - - /* - * private final String aRequiresMuffler = "1x Muffler Hatch"; private final String aRequiresCoreModule = - * "1x Core Module"; private final String aRequiresMaint = "1x Maintanence Hatch"; - */ - - public static final String TAG_HIDE_HATCHES = "TAG_HIDE_HATCHES"; - public static final String TAG_HIDE_MAINT = "TAG_HIDE_MAINT"; - public static final String TAG_HIDE_POLLUTION = "TAG_HIDE_POLLUTION"; - public static final String TAG_HIDE_MACHINE_TYPE = "TAG_HIDE_MACHINE_TYPE"; - - public abstract int getMaxParallelRecipes(); - - @Override - public boolean isCorrectMachinePart(final ItemStack paramItemStack) { - return true; - } - - @Override - public int getDamageToComponent(final ItemStack paramItemStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack p0) { - return false; - } - - /** - * A Static {@link Method} object which holds the current status of logging. - */ - public static Method aLogger = null; - - public void log(String s) { - if (!AsmConfig.disableAllLogging) { - if (CORE_Preloader.DEBUG_MODE) { - Logger.INFO(s); - } else { - Logger.MACHINE_INFO(s); - } - } - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(GT_Utility.roundUpVoltage(this.getMaxInputVoltage())); - logic.setAvailableAmperage(1L); - } - - public long getMaxInputEnergy() { - long rEnergy = 0; - if (mEnergyHatches.size() == 1) // so it only takes 1 amp is only 1 hatch is present so it works like most gt - // multies - return mEnergyHatches.get(0) - .getBaseMetaTileEntity() - .getInputVoltage(); - for (GT_MetaTileEntity_Hatch_Energy tHatch : filterValidMTEs(mEnergyHatches)) - rEnergy += tHatch.getBaseMetaTileEntity() - .getInputVoltage() - * tHatch.getBaseMetaTileEntity() - .getInputAmperage(); - return rEnergy; - } - - public boolean isMachineRunning() { - boolean aRunning = this.getBaseMetaTileEntity() - .isActive(); - // log("Queried Multiblock is currently running: "+aRunning); - return aRunning; - } - - @Override - public void explodeMultiblock() { - MetaTileEntity tTileEntity; - for (final Iterator localIterator = this.mChargeHatches - .iterator(); localIterator.hasNext(); tTileEntity.getBaseMetaTileEntity() - .doExplosion(gregtech.api.enums.GT_Values.V[8])) { - tTileEntity = localIterator.next(); - } - tTileEntity = null; - for (final Iterator localIterator = this.mDischargeHatches - .iterator(); localIterator.hasNext(); tTileEntity.getBaseMetaTileEntity() - .doExplosion(gregtech.api.enums.GT_Values.V[8])) { - tTileEntity = localIterator.next(); - } - tTileEntity = null; - for (final Iterator localIterator = this.mTecTechDynamoHatches - .iterator(); localIterator.hasNext(); tTileEntity.getBaseMetaTileEntity() - .doExplosion(gregtech.api.enums.GT_Values.V[8])) { - tTileEntity = localIterator.next(); - } - tTileEntity = null; - for (final Iterator localIterator = this.mTecTechEnergyHatches - .iterator(); localIterator.hasNext(); tTileEntity.getBaseMetaTileEntity() - .doExplosion(gregtech.api.enums.GT_Values.V[8])) { - tTileEntity = localIterator.next(); - } - - super.explodeMultiblock(); - } - - protected boolean setGUIItemStack(ItemStack aNewGuiSlotContents) { - boolean result = false; - if (this.mInventory[1] == null) { - this.mInventory[1] = aNewGuiSlotContents != null ? aNewGuiSlotContents.copy() : null; - this.depleteInput(aNewGuiSlotContents); - this.updateSlots(); - result = true; - } - return result; - } - - public ItemStack findItemInInventory(Item aSearchStack) { - return findItemInInventory(aSearchStack, 0); - } - - public ItemStack findItemInInventory(Item aSearchStack, int aMeta) { - return findItemInInventory(ItemUtils.simpleMetaStack(aSearchStack, aMeta, 1)); - } - - public ItemStack findItemInInventory(ItemStack aSearchStack) { - if (aSearchStack != null && this.mInputBusses.size() > 0) { - for (GT_MetaTileEntity_Hatch_InputBus bus : this.mInputBusses) { - if (bus != null) { - for (ItemStack uStack : bus.mInventory) { - if (uStack != null) { - if (aSearchStack.getClass() - .isInstance(uStack.getItem())) { - return uStack; - } - } - } - } - } - } - return null; - } - - /** - * Deplete fluid input from a set of restricted hatches. This assumes these hatches can store nothing else but your - * expected fluid - */ - protected boolean depleteInputFromRestrictedHatches(Collection aHatches, - int aAmount) { - for (final GT_MetaTileEntity_Hatch_CustomFluidBase tHatch : filterValidMTEs(aHatches)) { - FluidStack tLiquid = tHatch.getFluid(); - if (tLiquid == null || tLiquid.amount < aAmount) { - continue; - } - tLiquid = tHatch.drain(aAmount, false); - if (tLiquid != null && tLiquid.amount >= aAmount) { - tLiquid = tHatch.drain(aAmount, true); - return tLiquid != null && tLiquid.amount >= aAmount; - } - } - return false; - } - - @Override - public void updateSlots() { - for (final GT_MetaTileEntity_Hatch_InputBattery tHatch : filterValidMTEs(this.mChargeHatches)) { - tHatch.updateSlots(); - } - for (final GT_MetaTileEntity_Hatch_OutputBattery tHatch : filterValidMTEs(this.mDischargeHatches)) { - tHatch.updateSlots(); - } - super.updateSlots(); - } - - public boolean checkHatch() { - return mMaintenanceHatches.size() <= 1 - && (this.getPollutionPerSecond(null) > 0 ? !mMufflerHatches.isEmpty() : true); - } - - @Override - public void clearHatches() { - super.clearHatches(); - this.mChargeHatches.clear(); - this.mDischargeHatches.clear(); - this.mAirIntakes.clear(); - this.mTecTechEnergyHatches.clear(); - this.mTecTechDynamoHatches.clear(); - this.mAllEnergyHatches.clear(); - this.mAllDynamoHatches.clear(); - } - - public boolean addToMachineListInternal(ArrayList aList, final IGregTechTileEntity aTileEntity, - final int aBaseCasingIndex) { - return addToMachineListInternal(aList, getMetaTileEntity(aTileEntity), aBaseCasingIndex); - } - - public boolean addToMachineListInternal(ArrayList aList, final IMetaTileEntity aTileEntity, - final int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - - // Check type - /* - * Class aHatchType = ReflectionUtils.getTypeOfGenericObject(aList); if - * (!aHatchType.isInstance(aTileEntity)) { return false; } - */ - - // Try setRecipeMap - - try { - if (aTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - resetRecipeMapForHatch((GT_MetaTileEntity_Hatch) aTileEntity, getRecipeMap()); - } - if (aTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - resetRecipeMapForHatch((GT_MetaTileEntity_Hatch) aTileEntity, getRecipeMap()); - } - } catch (Throwable t) { - t.printStackTrace(); - } - - if (aList.isEmpty()) { - if (aTileEntity instanceof GT_MetaTileEntity_Hatch) { - if (GTplusplus.CURRENT_LOAD_PHASE == INIT_PHASE.STARTED) { - log( - "Adding " + aTileEntity.getInventoryName() - + " at " - + new BlockPos(aTileEntity.getBaseMetaTileEntity()).getLocationString()); - } - updateTexture(aTileEntity, aBaseCasingIndex); - return aList.add((E) aTileEntity); - } - } else { - IGregTechTileEntity aCur = aTileEntity.getBaseMetaTileEntity(); - if (aList.contains(aTileEntity)) { - log( - "Found Duplicate " + aTileEntity.getInventoryName() - + " @ " - + new BlockPos(aCur).getLocationString()); - return false; - } - BlockPos aCurPos = new BlockPos(aCur); - boolean aExists = false; - for (E m : aList) { - IGregTechTileEntity b = ((IMetaTileEntity) m).getBaseMetaTileEntity(); - if (b != null) { - BlockPos aPos = new BlockPos(b); - if (aPos != null) { - if (aCurPos.equals(aPos)) { - if (GTplusplus.CURRENT_LOAD_PHASE == INIT_PHASE.STARTED) { - log("Found Duplicate " + b.getInventoryName() + " at " + aPos.getLocationString()); - } - return false; - } - } - } - } - if (aTileEntity instanceof GT_MetaTileEntity_Hatch) { - if (GTplusplus.CURRENT_LOAD_PHASE == INIT_PHASE.STARTED) { - log("Adding " + aCur.getInventoryName() + " at " + aCurPos.getLocationString()); - } - updateTexture(aTileEntity, aBaseCasingIndex); - return aList.add((E) aTileEntity); - } - } - return false; - } - - private IMetaTileEntity getMetaTileEntity(final IGregTechTileEntity aTileEntity) { - if (aTileEntity == null) { - return null; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - return aMetaTileEntity; - } - - @Override - public boolean addToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - return addToMachineList(getMetaTileEntity(aTileEntity), aBaseCasingIndex); - } - - public boolean addToMachineList(final IMetaTileEntity aMetaTileEntity, final int aBaseCasingIndex) { - if (aMetaTileEntity == null) { - return false; - } - - // Use this to determine the correct value, then update the hatch texture after. - boolean aDidAdd = false; - - // Handle Custom Hatches - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBattery) { - log("Found GT_MetaTileEntity_Hatch_InputBattery"); - aDidAdd = addToMachineListInternal(mChargeHatches, aMetaTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBattery) { - log("Found GT_MetaTileEntity_Hatch_OutputBattery"); - aDidAdd = addToMachineListInternal(mDischargeHatches, aMetaTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_AirIntake) { - aDidAdd = addToMachineListInternal(mAirIntakes, aMetaTileEntity, aBaseCasingIndex) - && addToMachineListInternal(mInputHatches, aMetaTileEntity, aBaseCasingIndex); - } - - // Handle TT Multi-A Energy Hatches - else if (isThisHatchMultiEnergy(aMetaTileEntity)) { - log("Found isThisHatchMultiEnergy"); - aDidAdd = addToMachineListInternal(mTecTechEnergyHatches, aMetaTileEntity, aBaseCasingIndex); - updateMasterEnergyHatchList(aMetaTileEntity); - } - - // Handle TT Multi-A Dynamos - else if (isThisHatchMultiDynamo(aMetaTileEntity)) { - log("Found isThisHatchMultiDynamo"); - aDidAdd = addToMachineListInternal(mTecTechDynamoHatches, aMetaTileEntity, aBaseCasingIndex); - updateMasterDynamoHatchList(aMetaTileEntity); - } - - // Handle Fluid Hatches using seperate logic - else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) - aDidAdd = addToMachineListInternal(mInputHatches, aMetaTileEntity, aBaseCasingIndex); - else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) - aDidAdd = addToMachineListInternal(mOutputHatches, aMetaTileEntity, aBaseCasingIndex); - - // Process Remaining hatches using Vanilla GT Logic - else if (aMetaTileEntity instanceof IDualInputHatch hatch) { - hatch.updateCraftingIcon(this.getMachineCraftingIcon()); - aDidAdd = addToMachineListInternal(mDualInputHatches, aMetaTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) - aDidAdd = addToMachineListInternal(mInputBusses, aMetaTileEntity, aBaseCasingIndex); - else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) - aDidAdd = addToMachineListInternal(mOutputBusses, aMetaTileEntity, aBaseCasingIndex); - else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - aDidAdd = addToMachineListInternal(mEnergyHatches, aMetaTileEntity, aBaseCasingIndex); - updateMasterEnergyHatchList(aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { - aDidAdd = addToMachineListInternal(mDynamoHatches, aMetaTileEntity, aBaseCasingIndex); - updateMasterDynamoHatchList(aMetaTileEntity); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) - aDidAdd = addToMachineListInternal(mMaintenanceHatches, aMetaTileEntity, aBaseCasingIndex); - else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) - aDidAdd = addToMachineListInternal(mMufflerHatches, aMetaTileEntity, aBaseCasingIndex); - - // return super.addToMachineList(aTileEntity, aBaseCasingIndex); - return aDidAdd; - } - - @Override - public boolean addMaintenanceToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - return addToMachineList(aMetaTileEntity, aBaseCasingIndex); - } - return false; - } - - @Override - public boolean addMufflerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { - return addToMachineList(aMetaTileEntity, aBaseCasingIndex); - } - return false; - } - - @Override - public boolean addInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input - || aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - return addToMachineList(aMetaTileEntity, aBaseCasingIndex); - } - return false; - } - - @Override - public boolean addOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output - || aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) { - return addToMachineList(aMetaTileEntity, aBaseCasingIndex); - } - return false; - } - - public boolean addAirIntakeToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_AirIntake) { - return addToMachineList(aMetaTileEntity, aBaseCasingIndex); - } - return false; - } - - public boolean addFluidInputToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - return addFluidInputToMachineList(getMetaTileEntity(aTileEntity), aBaseCasingIndex); - } - - public boolean addFluidInputToMachineList(final IMetaTileEntity aMetaTileEntity, final int aBaseCasingIndex) { - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - return addToMachineList(aMetaTileEntity, aBaseCasingIndex); - } - return false; - } - - public boolean clearRecipeMapForAllInputHatches() { - return resetRecipeMapForAllInputHatches(null); - } - - public boolean resetRecipeMapForAllInputHatches() { - return resetRecipeMapForAllInputHatches(this.getRecipeMap()); - } - - public boolean resetRecipeMapForAllInputHatches(RecipeMap aMap) { - int cleared = 0; - for (GT_MetaTileEntity_Hatch_Input g : this.mInputHatches) { - if (resetRecipeMapForHatch(g, aMap)) { - cleared++; - } - } - for (GT_MetaTileEntity_Hatch_InputBus g : this.mInputBusses) { - if (resetRecipeMapForHatch(g, aMap)) { - cleared++; - } - } - return cleared > 0; - } - - public boolean resetRecipeMapForHatch(IGregTechTileEntity aTileEntity, RecipeMap aMap) { - try { - final IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input - || aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus - || aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Steam_BusInput) { - return resetRecipeMapForHatch((GT_MetaTileEntity_Hatch) aMetaTileEntity, aMap); - } else { - return false; - } - } catch (Throwable t) { - t.printStackTrace(); - return false; - } - } - - public boolean resetRecipeMapForHatch(GT_MetaTileEntity_Hatch aTileEntity, RecipeMap aMap) { - if (aTileEntity == null) { - return false; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input - || aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus - || aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Steam_BusInput) { - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = null; - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = aMap; - if (aMap != null) { - log("Remapped Input Hatch to " + aMap.unlocalizedName + "."); - } else { - log("Cleared Input Hatch."); - } - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - ((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity).mRecipeMap = null; - ((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity).mRecipeMap = aMap; - if (aMap != null) { - log("Remapped Input Bus to " + aMap.unlocalizedName + "."); - } else { - log("Cleared Input Bus."); - } - } else { - ((GT_MetaTileEntity_Hatch_Steam_BusInput) aMetaTileEntity).mRecipeMap = null; - ((GT_MetaTileEntity_Hatch_Steam_BusInput) aMetaTileEntity).mRecipeMap = aMap; - if (aMap != null) { - log("Remapped Input Bus to " + aMap.unlocalizedName + "."); - } else { - log("Cleared Input Bus."); - } - } - return true; - } else { - return false; - } - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - clearRecipeMapForAllInputHatches(); - onModeChangeByScrewdriver(side, aPlayer, aX, aY, aZ); - mLastRecipe = null; - resetRecipeMapForAllInputHatches(); - } - - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {} - - /** - * Enable Texture Casing Support if found in GT 5.09 - */ - public boolean updateTexture(final IGregTechTileEntity aTileEntity, int aCasingID) { - return updateTexture(getMetaTileEntity(aTileEntity), aCasingID); - } - - /** - * Enable Texture Casing Support if found in GT 5.09 - */ - public boolean updateTexture(final IMetaTileEntity aTileEntity, int aCasingID) { - try { // gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch.updateTexture(int) - - final IMetaTileEntity aMetaTileEntity = aTileEntity; - if (aMetaTileEntity == null) { - return false; - } - Method mProper = ReflectionUtils.getMethod(GT_MetaTileEntity_Hatch.class, "updateTexture", int.class); - if (mProper != null) { - if (GT_MetaTileEntity_Hatch.class.isInstance(aMetaTileEntity)) { - mProper.setAccessible(true); - mProper.invoke(aMetaTileEntity, aCasingID); - // log("Good Method Call for updateTexture."); - return true; - } - } else { - log("Bad Method Call for updateTexture."); - if (GT_MetaTileEntity_Hatch.class.isInstance(aMetaTileEntity)) { - if (aCasingID <= Byte.MAX_VALUE) { - ((GT_MetaTileEntity_Hatch) aTileEntity).updateTexture(aCasingID); - log( - "Good Method Call for updateTexture. Used fallback method of setting mMachineBlock as casing id was <= 128."); - return true; - } else { - log("updateTexture returning false. 1.2"); - } - } else { - log("updateTexture returning false. 1.3"); - } - } - log("updateTexture returning false. 1"); - return false; - } catch (SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - log("updateTexture returning false."); - log("updateTexture returning false. 2"); - e.printStackTrace(); - return false; - } - } - - /** - * TecTech Support - */ - - /** - * This is the array Used to Store the Tectech Multi-Amp Dynamo hatches. - */ - public ArrayList mTecTechDynamoHatches = new ArrayList<>(); - - /** - * This is the array Used to Store the Tectech Multi-Amp Energy hatches. - */ - public ArrayList mTecTechEnergyHatches = new ArrayList<>(); - - /** - * TecTech Multi-Amp Dynamo Support - * - * @param aTileEntity - The Dynamo Hatch - * @param aBaseCasingIndex - Casing Texture - * @return - */ - public boolean addMultiAmpDynamoToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - final IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); - if (aMetaTileEntity == null) { - return false; - } - if (isThisHatchMultiDynamo(aTileEntity)) { - return addToMachineListInternal(mTecTechDynamoHatches, aMetaTileEntity, aBaseCasingIndex); - } - return false; - } - - public boolean isThisHatchMultiDynamo(IGregTechTileEntity aTileEntity) { - return isThisHatchMultiDynamo(getMetaTileEntity(aTileEntity)); - } - - public boolean isThisHatchMultiDynamo(IMetaTileEntity aMetaTileEntity) { - Class mDynamoClass; - mDynamoClass = ReflectionUtils - .getClass("com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti"); - if (mDynamoClass != null) { - if (mDynamoClass.isInstance(aMetaTileEntity)) { - return true; - } - } - return false; - } - - @Override - public boolean addDynamoToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo || isThisHatchMultiDynamo(aMetaTileEntity)) { - return addToMachineList(aMetaTileEntity, aBaseCasingIndex); - } - return false; - } - - private boolean updateMasterDynamoHatchList(IMetaTileEntity aMetaTileEntity) { - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch aHatch) { - return mAllDynamoHatches.add(aHatch); - } - return false; - } - - /** - * TecTech Multi-Amp Energy Hatch Support - * - * @param aTileEntity - The Energy Hatch - * @param aBaseCasingIndex - Casing Texture - * @return - */ - public boolean addMultiAmpEnergyToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - final IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); - if (aMetaTileEntity == null) { - return false; - } - if (isThisHatchMultiEnergy(aMetaTileEntity)) { - return addToMachineListInternal(mTecTechEnergyHatches, aMetaTileEntity, aBaseCasingIndex); - } - return false; - } - - public boolean isThisHatchMultiEnergy(IGregTechTileEntity aTileEntity) { - return isThisHatchMultiEnergy(getMetaTileEntity(aTileEntity)); - } - - public boolean isThisHatchMultiEnergy(IMetaTileEntity aMetaTileEntity) { - Class mDynamoClass; - mDynamoClass = ReflectionUtils - .getClass("com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti"); - if (mDynamoClass != null) { - if (mDynamoClass.isInstance(aMetaTileEntity)) { - return true; - } - } - return false; - } - - @Override - public boolean addEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - IMetaTileEntity aMetaTileEntity = getMetaTileEntity(aTileEntity); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy || isThisHatchMultiEnergy(aMetaTileEntity)) { - return addToMachineList(aMetaTileEntity, aBaseCasingIndex); - } - return false; - } - - private boolean updateMasterEnergyHatchList(IMetaTileEntity aMetaTileEntity) { - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch aHatch) { - return mAllEnergyHatches.add(aHatch); - } - return false; - } - - /** - * Pollution Management - */ - public int calculatePollutionReductionForHatch(GT_MetaTileEntity_Hatch_Muffler hatch, int poll) { - return hatch.calculatePollutionReduction(poll); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("mVoidExcess")) { - // backward compatibility - voidingMode = aNBT.getBoolean("mVoidExcess") ? VoidingMode.VOID_ALL : VoidingMode.VOID_NONE; - } - if (aNBT.hasKey("mUseMultiparallelMode")) { - // backward compatibility - batchMode = aNBT.getBoolean("mUseMultiparallelMode"); - } - } - - /** - * Custom Tool Handling - */ - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - // Do Things - if (this.getBaseMetaTileEntity() - .isServerSide()) { - // Logger.INFO("Right Clicked Controller."); - ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); - if (tCurrentItem != null) { - // Logger.INFO("Holding Item."); - if (tCurrentItem.getItem() instanceof GT_MetaGenerated_Tool) { - // Logger.INFO("Is GT_MetaGenerated_Tool."); - int[] aOreID = OreDictionary.getOreIDs(tCurrentItem); - for (int id : aOreID) { - // Plunger - if (OreDictionary.getOreName(id) - .equals("craftingToolPlunger")) { - // Logger.INFO("Is Plunger."); - return onPlungerRightClick(aPlayer, side, aX, aY, aZ); - } - } - } - } - } - // Do Super - boolean aSuper = super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - return aSuper; - } - - public boolean onPlungerRightClick(EntityPlayer aPlayer, ForgeDirection side, float aX, float aY, float aZ) { - int aHatchIndex = 0; - PlayerUtils.messagePlayer(aPlayer, "Trying to clear " + mOutputHatches.size() + " output hatches."); - for (GT_MetaTileEntity_Hatch_Output hatch : this.mOutputHatches) { - if (hatch.mFluid != null) { - PlayerUtils.messagePlayer( - aPlayer, - "Clearing " + hatch.mFluid.amount - + "L of " - + hatch.mFluid.getLocalizedName() - + " from hatch " - + aHatchIndex - + "."); - hatch.mFluid = null; - } - aHatchIndex++; - } - return aHatchIndex > 0; - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - batchMode = !batchMode; - if (batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOn")); - } else { - GT_Utility.sendChatToPlayer(aPlayer, StatCollector.translateToLocal("misc.BatchModeTextOff")); - } - return true; - } - return false; - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (supportsVoidProtection() && wrenchingSide == getBaseMetaTileEntity().getFrontFacing()) { - Set allowed = getAllowedVoidingModes(); - setVoidingMode(getVoidingMode().nextInCollection(allowed)); - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.gui.button.voiding_mode") + " " - + StatCollector.translateToLocal(getVoidingMode().getTransKey())); - return true; - } else return super.onSolderingToolRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ); - } - - // Only support to use meta to tier - - /** - * accept meta [0, maxMeta) - * - * @param maxMeta exclusive - */ - public static IStructureElement addTieredBlock(Block aBlock, BiConsumer aSetTheMeta, - Function aGetTheMeta, int maxMeta) { - return addTieredBlock(aBlock, (t, i) -> { - aSetTheMeta.accept(t, i); - return true; - }, aGetTheMeta, 0, maxMeta); - } - - /** - * - * @param minMeta inclusive - * @param maxMeta exclusive - */ - public static IStructureElement addTieredBlock(Block aBlock, BiConsumer aSetTheMeta, - Function aGetTheMeta, int minMeta, int maxMeta) { - return addTieredBlock(aBlock, (t, i) -> { - aSetTheMeta.accept(t, i); - return true; - }, aGetTheMeta, minMeta, maxMeta); - } - - /** - * - * @param minMeta inclusive - * @param maxMeta exclusive - */ - public static IStructureElement addTieredBlock(Block aBlock, BiPredicate aSetTheMeta, - Function aGetTheMeta, int minMeta, int maxMeta) { - - return new IStructureElement<>() { - - @Override - public boolean check(T t, World world, int x, int y, int z) { - Block tBlock = world.getBlock(x, y, z); - if (aBlock == tBlock) { - Integer currentMeta = aGetTheMeta.apply(t); - int newMeta = tBlock.getDamageValue(world, x, y, z) + 1; - if (newMeta > maxMeta || newMeta < minMeta + 1) return false; - if (currentMeta == 0) { - return aSetTheMeta.test(t, newMeta); - } else { - return currentMeta == newMeta; - } - } - return false; - } - - @Override - public boolean spawnHint(T t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, aBlock, getMeta(trigger)); - return true; - } - - @Override - public boolean placeBlock(T t, World world, int x, int y, int z, ItemStack trigger) { - return world.setBlock(x, y, z, aBlock, getMeta(trigger), 3); - } - - private int getMeta(ItemStack trigger) { - int meta = trigger.stackSize; - if (meta <= 0) meta = minMeta; - if (meta + minMeta >= maxMeta) meta = maxMeta - 1 - minMeta; - return meta + minMeta; - } - - @Nullable - @Override - public BlocksToPlace getBlocksToPlace(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - return BlocksToPlace.create(aBlock, getMeta(trigger)); - } - - @Override - public PlaceResult survivalPlaceBlock(T t, World world, int x, int y, int z, ItemStack trigger, - AutoPlaceEnvironment env) { - if (world.getBlock(x, y, z) == aBlock) { - if (world.getBlockMetadata(x, y, z) == getMeta(trigger)) { - return PlaceResult.SKIP; - } - return PlaceResult.REJECT; - } - return StructureUtility.survivalPlaceBlock( - aBlock, - getMeta(trigger), - world, - x, - y, - z, - env.getSource(), - env.getActor(), - env.getChatter()); - } - }; - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { getCasingTexture(), TextureFactory.builder() - .addIcon(getActiveOverlay()) - .extFacing() - .build() }; - return new ITexture[] { getCasingTexture(), TextureFactory.builder() - .addIcon(getInactiveOverlay()) - .extFacing() - .build() }; - } - return new ITexture[] { getCasingTexture() }; - } - - protected IIconContainer getActiveOverlay() { - return null; - } - - protected IIconContainer getInactiveOverlay() { - return null; - } - - protected ITexture getCasingTexture() { - return Textures.BlockIcons.getCasingTextureForId(getCasingTextureId()); - } - - protected int getCasingTextureId() { - return 0; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - if (doesBindPlayerInventory()) { - super.addUIWidgets(builder, buildContext); - } else { - addNoPlayerInventoryUI(builder, buildContext); - } - } - - private static final Materials GOOD = Materials.Uranium; - private static final Materials BAD = Materials.Plutonium; - private static final ConcurrentHashMap mToolStacks = new ConcurrentHashMap<>(); - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - protected void addNoPlayerInventoryUI(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(3, 4) - .setSize(152, 159)); - for (int i = 0; i < 9; i++) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.BUTTON_STANDARD) - .setPos(155, 3 + i * 18) - .setSize(18, 18)); - } - - DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); - drawTextsNoPlayerInventory(screenElements); - builder.widget(screenElements); - - setupToolDisplay(); - - builder.widget( - new ItemDrawable(() -> mToolStacks.get(mWrench + "WRENCH")).asWidget() - .setPos(156, 58)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mWrench, val -> mWrench = val)); - builder.widget( - new ItemDrawable(() -> mToolStacks.get(mCrowbar + "CROWBAR")).asWidget() - .setPos(156, 76)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mCrowbar, val -> mCrowbar = val)); - builder.widget( - new ItemDrawable(() -> mToolStacks.get(mHardHammer + "HARDHAMMER")).asWidget() - .setPos(156, 94)) - .widget( - new TextWidget("H").setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(167, 103)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mHardHammer, val -> mHardHammer = val)); - builder.widget( - new ItemDrawable(() -> mToolStacks.get(mSoftHammer + "SOFTHAMMER")).asWidget() - .setPos(156, 112)) - .widget( - new TextWidget("M").setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(167, 121)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mSoftHammer, val -> mSoftHammer = val)); - builder.widget( - new ItemDrawable(() -> mToolStacks.get(mScrewdriver + "SCREWDRIVER")).asWidget() - .setPos(156, 130)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mScrewdriver, val -> mScrewdriver = val)); - builder.widget( - new ItemDrawable(() -> mToolStacks.get(mSolderingTool + "SOLDERING_IRON_LV")).asWidget() - .setPos(156, 148)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mSolderingTool, val -> mSolderingTool = val)); - builder.widget( - new ItemDrawable(() -> mToolStacks.get(getBaseMetaTileEntity().isActive() + "GLASS")).asWidget() - .setPos(156, 22)) - .widget( - TextWidget.dynamicString(() -> getBaseMetaTileEntity().isActive() ? "On" : "Off") - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(157, 31)) - .widget( - new FakeSyncWidget.BooleanSyncer( - () -> getBaseMetaTileEntity().isActive(), - val -> getBaseMetaTileEntity().setActive(val))); - } - - protected void drawTextsNoPlayerInventory(DynamicPositionedColumn screenElements) { - screenElements.setSynced(false) - .setSpace(0) - .setPos(6, 7); - - screenElements - .widget( - new TextWidget(GT_Utility.trans("138", "Incomplete Structure.")).setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> !mMachine)) - .widget(new FakeSyncWidget.BooleanSyncer(() -> mMachine, val -> mMachine = val)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal("GTPP.machines.input") + " " - + StatCollector.translateToLocal("GTPP.machines.tier") - + ": " - + EnumChatFormatting.GREEN - + GT_Values.VOLTAGE_NAMES[(int) getInputTier()]) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine && getInputTier() > 0)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal("GTPP.machines.output") + " " - + StatCollector.translateToLocal("GTPP.machines.tier") - + ": " - + EnumChatFormatting.GREEN - + GT_Values.VOLTAGE_NAMES[(int) getOutputTier()]) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine && getOutputTier() > 0)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal("GTPP.multiblock.progress") + ": " - + EnumChatFormatting.GREEN - + getBaseMetaTileEntity().getProgress() / 20 - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + getBaseMetaTileEntity().getMaxProgress() / 20 - + EnumChatFormatting.RESET - + " s") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - new TextWidget(StatCollector.translateToLocal("GTPP.multiblock.energy") + ":") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal( - "" + EnumChatFormatting.GREEN - + getStoredEnergyInAllEnergyHatches() - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + getMaxEnergyStorageOfAllEnergyHatches() - + EnumChatFormatting.RESET - + " EU")) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - new TextWidget(StatCollector.translateToLocal("GTPP.multiblock.usage") + ":") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine && getLastRecipeEU() > 0 && getLastRecipeDuration() > 0)) - .widget( - TextWidget.dynamicString( - () -> StatCollector.translateToLocal( - "" + EnumChatFormatting.RED + -getLastRecipeEU() + EnumChatFormatting.RESET + " EU/t/parallel")) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine && getLastRecipeEU() > 0 && getLastRecipeDuration() > 0)) - .widget( - TextWidget.dynamicString(() -> StatCollector.translateToLocal("GTPP.multiblock.generation") + ":") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine && getLastRecipeEU() < 0 && getLastRecipeDuration() > 0)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal( - "" + EnumChatFormatting.GREEN - + getLastRecipeEU() - + EnumChatFormatting.RESET - + " EU/t/parallel")) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine && getLastRecipeEU() < 0 && getLastRecipeDuration() > 0)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal("GTPP.multiblock.duration") + ": " - + EnumChatFormatting.RED - + getLastRecipeDuration() - + EnumChatFormatting.RESET - + " ticks") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine && getLastRecipeEU() != 0 && getLastRecipeDuration() > 0)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal("GTPP.multiblock.specialvalue") + ": " - + EnumChatFormatting.RED - + getLastRecipeEU() - + EnumChatFormatting.RESET - + "") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled( - widget -> mMachine && getLastRecipeEU() != 0 - && getLastRecipeDuration() > 0 - && (mLastRecipe != null ? mLastRecipe.mSpecialValue : 0) > 0)) - .widget( - new TextWidget(StatCollector.translateToLocal("GTPP.multiblock.mei") + ":") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal( - "" + EnumChatFormatting.YELLOW - + getMaxInputVoltage() - + EnumChatFormatting.RESET - + " EU/t(*2A) " - + StatCollector.translateToLocal("GTPP.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + GT_Values.VN[GT_Utility.getTier(getMaxInputVoltage())] - + EnumChatFormatting.RESET)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal("GTPP.multiblock.efficiency") + ": " - + EnumChatFormatting.YELLOW - + (mEfficiency / 100.0F) - + EnumChatFormatting.RESET - + " %") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal("GTPP.multiblock.pollution") + ": " - + EnumChatFormatting.RED - + (getPollutionPerTick(null) * 20) - + EnumChatFormatting.RESET - + "/sec") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - TextWidget - .dynamicString( - () -> StatCollector.translateToLocal("GTPP.multiblock.pollutionreduced") + ": " - + EnumChatFormatting.GREEN - + getPollutionReductionForAllMufflers() - + EnumChatFormatting.RESET - + " %") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - new TextWidget("Total Time Since Built: ").setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - TextWidget - .dynamicString( - () -> "" + EnumChatFormatting.DARK_GREEN - + getRuntimeWeeksDisplay() - + EnumChatFormatting.RESET - + " Weeks,") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - TextWidget - .dynamicString( - () -> "" + EnumChatFormatting.DARK_GREEN - + getRuntimeDaysDisplay() - + EnumChatFormatting.RESET - + " Days,") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - TextWidget - .dynamicString( - () -> "" + EnumChatFormatting.DARK_GREEN - + getRuntimeHoursDisplay() - + EnumChatFormatting.RESET - + " Hours,") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - TextWidget - .dynamicString( - () -> "" + EnumChatFormatting.DARK_GREEN - + getRuntimeMinutesDisplay() - + EnumChatFormatting.RESET - + " Minutes,") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)) - .widget( - TextWidget - .dynamicString( - () -> "" + EnumChatFormatting.DARK_GREEN - + getRuntimeSecondsDisplay() - + EnumChatFormatting.RESET - + " Seconds") - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setEnabled(widget -> mMachine)); - } - - protected int getLastRecipeEU() { - return mLastRecipe != null ? mLastRecipe.mEUt : 0; - } - - protected int getLastRecipeDuration() { - return mLastRecipe != null ? mLastRecipe.mDuration : 0; - } - - protected long getRuntimeSeconds() { - return getTotalRuntimeInTicks() / 20; - } - - protected long getRuntimeWeeksDisplay() { - return TimeUnit.SECONDS.toDays(getRuntimeSeconds()) / 7; - } - - protected long getRuntimeDaysDisplay() { - return TimeUnit.SECONDS.toDays(getRuntimeSeconds()) - 7 * getRuntimeWeeksDisplay(); - } - - protected long getRuntimeHoursDisplay() { - return TimeUnit.SECONDS.toHours(getRuntimeSeconds()) - TimeUnit.DAYS.toHours(getRuntimeDaysDisplay()) - - TimeUnit.DAYS.toHours(7 * getRuntimeWeeksDisplay()); - } - - protected long getRuntimeMinutesDisplay() { - return TimeUnit.SECONDS.toMinutes(getRuntimeSeconds()) - (TimeUnit.SECONDS.toHours(getRuntimeSeconds()) * 60); - } - - protected long getRuntimeSecondsDisplay() { - return TimeUnit.SECONDS.toSeconds(getRuntimeSeconds()) - (TimeUnit.SECONDS.toMinutes(getRuntimeSeconds()) * 60); - } - - protected void setupToolDisplay() { - if (!mToolStacks.isEmpty()) return; - - mToolStacks.put( - true + "WRENCH", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.WRENCH.ID, 1, GOOD, Materials.Tungsten, null)); - mToolStacks.put( - true + "CROWBAR", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.CROWBAR.ID, 1, GOOD, Materials.Tungsten, null)); - mToolStacks.put( - true + "HARDHAMMER", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.HARDHAMMER.ID, 1, GOOD, Materials.Tungsten, null)); - mToolStacks.put( - true + "SOFTHAMMER", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.SOFTMALLET.ID, 1, GOOD, Materials.Tungsten, null)); - mToolStacks.put( - true + "SCREWDRIVER", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.SCREWDRIVER.ID, 1, GOOD, Materials.Tungsten, null)); - mToolStacks.put( - true + "SOLDERING_IRON_LV", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.SOLDERING_IRON_LV.ID, 1, GOOD, Materials.Tungsten, null)); - - mToolStacks.put( - false + "WRENCH", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.WRENCH.ID, 1, BAD, Materials.Tungsten, null)); - mToolStacks.put( - false + "CROWBAR", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.CROWBAR.ID, 1, BAD, Materials.Tungsten, null)); - mToolStacks.put( - false + "HARDHAMMER", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.HARDHAMMER.ID, 1, BAD, Materials.Tungsten, null)); - mToolStacks.put( - false + "SOFTHAMMER", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.SOFTMALLET.ID, 1, BAD, Materials.Tungsten, null)); - mToolStacks.put( - false + "SCREWDRIVER", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.SCREWDRIVER.ID, 1, BAD, Materials.Tungsten, null)); - mToolStacks.put( - false + "SOLDERING_IRON_LV", - GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.SOLDERING_IRON_LV.ID, 1, BAD, Materials.Tungsten, null)); - - ItemStack aGlassPane1 = ItemUtils.getItemStackOfAmountFromOreDict("paneGlassRed", 1); - ItemStack aGlassPane2 = ItemUtils.getItemStackOfAmountFromOreDict("paneGlassLime", 1); - mToolStacks.put("falseGLASS", aGlassPane1); - mToolStacks.put("trueGLASS", aGlassPane2); - } - - public enum GTPPHatchElement implements IHatchElement> { - - AirIntake(GregtechMeta_MultiBlockBase::addAirIntakeToMachineList, GT_MetaTileEntity_Hatch_AirIntake.class) { - - @Override - public long count(GregtechMeta_MultiBlockBase t) { - return t.mAirIntakes.size(); - } - }, - TTDynamo(GregtechMeta_MultiBlockBase::addMultiAmpDynamoToMachineList, - "com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_DynamoMulti") { - - @Override - public long count(GregtechMeta_MultiBlockBase t) { - return t.mTecTechDynamoHatches.size(); - } - }, - TTEnergy(GregtechMeta_MultiBlockBase::addMultiAmpEnergyToMachineList, - "com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_EnergyMulti") { - - @Override - public long count(GregtechMeta_MultiBlockBase t) { - return t.mTecTechEnergyHatches.size(); - } - },; - - @SuppressWarnings("unchecked") - private static Class retype(Class clazz) { - return (Class) clazz; - } - - private final List> mMteClasses; - private final IGT_HatchAdder> mAdder; - - @SafeVarargs - GTPPHatchElement(IGT_HatchAdder> aAdder, - Class... aMteClasses) { - this.mMteClasses = Arrays.asList(aMteClasses); - this.mAdder = aAdder; - } - - GTPPHatchElement(IGT_HatchAdder> aAdder, String... aClassNames) { - this.mMteClasses = Arrays.stream(aClassNames) - .map(ReflectionUtils::getClass) - .filter(Objects::nonNull) - .>map(GTPPHatchElement::retype) - .collect(Collectors.toList()); - this.mAdder = aAdder; - } - - @Override - public List> mteClasses() { - return mMteClasses; - } - - @Override - public IGT_HatchAdder> adder() { - return mAdder; - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_SteamMultiBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_SteamMultiBase.java deleted file mode 100644 index 689bdf52ba..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_SteamMultiBase.java +++ /dev/null @@ -1,449 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base; - -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static gregtech.api.util.GT_Utility.formatNumbers; -import static mcp.mobius.waila.api.SpecialChars.GREEN; -import static mcp.mobius.waila.api.SpecialChars.RED; -import static mcp.mobius.waila.api.SpecialChars.RESET; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import net.minecraft.inventory.IInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.GT_Mod; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_HatchElementBuilder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.GT_Waila; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gtPlusPlus.core.util.minecraft.FluidUtils; -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 mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public abstract class GregtechMeta_SteamMultiBase> - extends GregtechMeta_MultiBlockBase { - - public ArrayList mSteamInputs = new ArrayList<>(); - public ArrayList mSteamOutputs = new ArrayList<>(); - public ArrayList mSteamInputFluids = new ArrayList<>(); - - protected static final String TT_steaminputbus = StatCollector.translateToLocal("GTPP.MBTT.SteamInputBus"); - protected static final String TT_steamoutputbus = StatCollector.translateToLocal("GTPP.MBTT.SteamOutputBus"); - protected static final String TT_steamhatch = StatCollector.translateToLocal("GTPP.MBTT.SteamHatch"); - - 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 ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureIndex()), - aActive ? getFrontOverlayActive() : getFrontOverlay() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureIndex()) }; - } - - protected abstract GT_RenderedTexture getFrontOverlay(); - - protected abstract GT_RenderedTexture getFrontOverlayActive(); - - public abstract int getTierRecipes(); - - private int getCasingTextureIndex() { - return 10; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(V[getTierRecipes()]); - // We need to trick the GT_ParallelHelper we have enough amps for all recipe parallels. - logic.setAvailableAmperage(getMaxParallelRecipes()); - logic.setAmperageOC(false); - } - - public ArrayList getAllSteamStacks() { - ArrayList aFluids = new ArrayList<>(); - 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.mInputHatches.clear(); - this.mSteamInputFluids.clear(); - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - /** - * Called every tick the Machine runs - */ - @Override - public boolean onRunningTick(ItemStack aStack) { - if (lEUt < 0) { - long aSteamVal = ((-lEUt * 10000) / Math.max(1000, mEfficiency)); - // Logger.INFO("Trying to drain "+aSteamVal+" steam per tick."); - if (!tryConsumeSteam((int) aSteamVal)) { - stopMachine(ShutDownReasonRegistry.POWER_LOSS); - return false; - } - } - return true; - } - - @Override - public boolean addToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - if (aTileEntity == null) { - log("Invalid IGregTechTileEntity"); - return false; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - log("Invalid IMetaTileEntity"); - return false; - } - - // Use this to determine the correct value, then update the hatch texture after. - boolean aDidAdd = false; - - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_CustomFluidBase) { - log("Adding Steam Input Hatch"); - aDidAdd = addToMachineListInternal(mSteamInputFluids, aMetaTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Steam_BusInput) { - log( - "Trying to set recipe map. Type: " - + (getRecipeMap() != null ? getRecipeMap().unlocalizedName : "Null")); - this.resetRecipeMapForHatch(aTileEntity, getRecipeMap()); - log("Adding Steam Input Bus"); - aDidAdd = addToMachineListInternal(mSteamInputs, aMetaTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Steam_BusOutput) { - log("Adding Steam Output Bus"); - aDidAdd = addToMachineListInternal(mSteamOutputs, aMetaTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) - aDidAdd = addToMachineListInternal(mInputHatches, aMetaTileEntity, aBaseCasingIndex); - else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output); - - return aDidAdd; - } - - /* - * Handle I/O with custom hatches - */ - - @Override - public boolean depleteInput(FluidStack aLiquid) { - if (aLiquid == null) return false; - for (GT_MetaTileEntity_Hatch_CustomFluidBase tHatch : filterValidMTEs(mSteamInputFluids)) { - 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_CustomFluidBase tHatch : filterValidMTEs(mSteamInputFluids)) { - 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 : filterValidMTEs(mSteamInputs)) { - tHatch.mRecipeMap = getRecipeMap(); - 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 getStoredFluids() { - ArrayList rList = new ArrayList<>(); - for (GT_MetaTileEntity_Hatch_CustomFluidBase tHatch : filterValidMTEs(mSteamInputFluids)) { - if (tHatch.getFillableStack() != null) { - rList.add(tHatch.getFillableStack()); - } - } - for (GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) if (hatch.getFillableStack() != null) { - rList.add(hatch.getFillableStack()); - } - return rList; - } - - @Override - public ArrayList getStoredInputs() { - ArrayList rList = new ArrayList<>(); - for (GT_MetaTileEntity_Hatch_Steam_BusInput tHatch : filterValidMTEs(mSteamInputs)) { - tHatch.mRecipeMap = getRecipeMap(); - 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 : filterValidMTEs(mSteamOutputs)) { - if (!outputSuccess) { - for (int i = tHatch.getSizeInventory() - 1; i >= 0 && !outputSuccess; i--) { - if (tHatch.getBaseMetaTileEntity() - .addStackToSlot(i, single)) outputSuccess = true; - } - } - } - for (GT_MetaTileEntity_Hatch_Output tHatch : filterValidMTEs(mOutputHatches)) { - if (!outputSuccess && tHatch.outputsItems()) { - if (tHatch.getBaseMetaTileEntity() - .addStackToSlot(1, single)) outputSuccess = true; - } - } - } - return outputSuccess; - } - - @Override - public ArrayList getStoredOutputs() { - ArrayList rList = new ArrayList<>(); - for (GT_MetaTileEntity_Hatch_Steam_BusOutput tHatch : filterValidMTEs(mSteamOutputs)) { - for (int i = tHatch.getBaseMetaTileEntity() - .getSizeInventory() - 1; i >= 0; i--) { - rList.add( - tHatch.getBaseMetaTileEntity() - .getStackInSlot(i)); - } - } - return rList; - } - - @Override - public List getItemOutputSlots(ItemStack[] toOutput) { - List ret = new ArrayList<>(); - for (final GT_MetaTileEntity_Hatch tBus : filterValidMTEs(mSteamOutputs)) { - final IInventory tBusInv = tBus.getBaseMetaTileEntity(); - for (int i = 0; i < tBusInv.getSizeInventory(); i++) { - ret.add(tBus.getStackInSlot(i)); - } - } - return ret; - } - - @Override - public void updateSlots() { - for (GT_MetaTileEntity_Hatch_CustomFluidBase tHatch : filterValidMTEs(mSteamInputFluids)) tHatch.updateSlots(); - for (GT_MetaTileEntity_Hatch_Steam_BusInput tHatch : filterValidMTEs(mSteamInputs)) tHatch.updateSlots(); - } - - @Override - public boolean supportsBatchMode() { - return false; - } - - @Override - public void clearHatches() { - super.clearHatches(); - mInputHatches.clear(); - mSteamInputFluids.clear(); - mSteamInputs.clear(); - mSteamOutputs.clear(); - } - - @Override - public boolean resetRecipeMapForAllInputHatches(RecipeMap aMap) { - boolean ret = super.resetRecipeMapForAllInputHatches(aMap); - for (GT_MetaTileEntity_Hatch_Steam_BusInput hatch : mSteamInputs) { - if (resetRecipeMapForHatch(hatch, aMap)) { - ret = true; - } - } - for (GT_MetaTileEntity_Hatch_Input g : this.mInputHatches) { - if (resetRecipeMapForHatch(g, aMap)) { - ret = true; - } - } - - return ret; - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - final NBTTagCompound tag = accessor.getNBTData(); - - if (tag.getBoolean("incompleteStructure")) { - currentTip.add(RED + "** INCOMPLETE STRUCTURE **" + RESET); - } - String efficiency = RESET + " Efficiency: " + tag.getFloat("efficiency") + "%"; - if (tag.getBoolean("hasProblems")) { - currentTip.add(RED + "** HAS PROBLEMS **" + efficiency); - } else if (!tag.getBoolean("incompleteStructure")) { - currentTip.add(GREEN + "Running Fine" + efficiency); - } - - boolean isActive = tag.getBoolean("isActive"); - if (isActive) { - long actualEnergyUsage = tag.getLong("energyUsage"); - if (actualEnergyUsage > 0) { - currentTip.add( - StatCollector.translateToLocalFormatted("GTPP.waila.steam.use", formatNumbers(actualEnergyUsage))); - } - } - currentTip.add( - GT_Waila.getMachineProgressString(isActive, tag.getInteger("maxProgress"), tag.getInteger("progress"))); - // Show ns on the tooltip - if (GT_Mod.gregtechproxy.wailaAverageNS && tag.hasKey("averageNS")) { - int tAverageTime = tag.getInteger("averageNS"); - currentTip.add("Average CPU load of ~" + formatNumbers(tAverageTime) + " ns"); - } - super.getMTEWailaBody(itemStack, currentTip, accessor, config); - } - - protected static > GT_HatchElementBuilder buildSteamInput( - Class typeToken) { - return buildHatchAdder(typeToken).adder(GregtechMeta_SteamMultiBase::addToMachineList) - .hatchIds(31040) - .shouldReject(t -> !t.mSteamInputFluids.isEmpty()); - } - - protected enum SteamHatchElement implements IHatchElement> { - - InputBus_Steam { - - @Override - public List> mteClasses() { - return Collections.singletonList(GT_MetaTileEntity_Hatch_Steam_BusInput.class); - } - - @Override - public long count(GregtechMeta_SteamMultiBase t) { - return t.mSteamInputs.size(); - } - }, - OutputBus_Steam { - - @Override - public List> mteClasses() { - return Collections.singletonList(GT_MetaTileEntity_Hatch_Steam_BusOutput.class); - } - - @Override - public long count(GregtechMeta_SteamMultiBase t) { - return t.mSteamOutputs.size(); - } - },; - - @Override - public IGT_HatchAdder> adder() { - return GregtechMeta_SteamMultiBase::addToMachineList; - } - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTEHatchCustomFluidBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTEHatchCustomFluidBase.java new file mode 100644 index 0000000000..b084651177 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTEHatchCustomFluidBase.java @@ -0,0 +1,210 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base; + +import static gregtech.api.enums.Textures.BlockIcons.FLUID_IN_SIGN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_IN; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget; + +import gregtech.GTMod; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.FluidUtils; + +public class MTEHatchCustomFluidBase extends MTEHatch { + + public final Fluid mLockedFluid; + public final int mFluidCapacity; + protected FluidStack mLockedStack = null; + protected String mTempMod = null; + + public MTEHatchCustomFluidBase(Fluid aFluid, int aAmount, final int aID, final String aName, + final String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 3, + new String[] { "Fluid Input for Multiblocks", "Capacity: " + GTUtility.formatNumbers(aAmount) + "L" }); + this.mLockedFluid = aFluid; + this.mFluidCapacity = aAmount; + } + + public MTEHatchCustomFluidBase(Fluid aFluid, int aAmount, final String aName, final int aTier, + final String[] aDescription, final ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription[0], aTextures); + this.mLockedFluid = aFluid; + this.mFluidCapacity = aAmount; + } + + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + if (side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 0) { + FluidStack fs = GTUtility.getFluidForFilledItem(aStack, true); + return fs != null && fs.getFluid() == this.mLockedFluid; + } + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing() && aIndex == 1; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(FLUID_IN_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return GTMod.gregtechproxy.mRenderIndicatorsOnHatch + ? new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN), TextureFactory.of(FLUID_IN_SIGN) } + : new ITexture[] { aBaseTexture, TextureFactory.of(OVERLAY_PIPE_IN) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean doesFillContainers() { + // return true; + return false; + } + + @Override + public boolean doesEmptyContainers() { + return true; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public boolean displaysItemStack() { + return true; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + public void updateSlots() { + if (mInventory[getInputSlot()] != null && mInventory[getInputSlot()].stackSize <= 0) + mInventory[getInputSlot()] = null; + } + + @Override + public int getTankPressure() { + return -100; + } + + @Override + public int getCapacity() { + return this.mFluidCapacity; + } + + @Override + public String[] getDescription() { + if (mLockedStack == null) { + mLockedStack = FluidUtils.getFluidStack(mLockedFluid, 1); + } + int aFluidTemp = 0; + boolean isSteam = false; + if (mLockedFluid != null) { + aFluidTemp = mLockedFluid.getTemperature(); + mTempMod = mLockedFluid.getName(); + } + if (mTempMod.equalsIgnoreCase("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; + return new String[] { "Fluid Input for " + (isSteam ? "Steam " : "") + "Multiblocks", + "Capacity: " + getCapacity() + "L", aFluidName, GTPPCore.GT_Tooltip.get() }; + } + + @Override + public boolean isFluidInputAllowed(final FluidStack aFluid) { + return this.mLockedFluid.getName() + .equals( + aFluid.getFluid() + .getName()); + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEHatchCustomFluidBase( + this.mLockedFluid, + this.mFluidCapacity, + this.mName, + this.mTier, + this.mDescriptionArray, + this.mTextures); + } + + @Override + protected FluidSlotWidget createFluidSlot() { + return super.createFluidSlot().setFilter(f -> f == mLockedFluid); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTESteamMultiBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTESteamMultiBase.java new file mode 100644 index 0000000000..9730b551d8 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTESteamMultiBase.java @@ -0,0 +1,447 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static gregtech.api.util.GTUtility.formatNumbers; +import static mcp.mobius.waila.api.SpecialChars.GREEN; +import static mcp.mobius.waila.api.SpecialChars.RED; +import static mcp.mobius.waila.api.SpecialChars.RESET; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.GTMod; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTUtility; +import gregtech.api.util.GTWaila; +import gregtech.api.util.HatchElementBuilder; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchSteamBusOutput; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MteHatchSteamBusInput; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public abstract class MTESteamMultiBase> extends GTPPMultiBlockBase { + + public ArrayList mSteamInputs = new ArrayList<>(); + public ArrayList mSteamOutputs = new ArrayList<>(); + public ArrayList mSteamInputFluids = new ArrayList<>(); + + protected static final String TT_steaminputbus = StatCollector.translateToLocal("GTPP.MBTT.SteamInputBus"); + protected static final String TT_steamoutputbus = StatCollector.translateToLocal("GTPP.MBTT.SteamOutputBus"); + protected static final String TT_steamhatch = StatCollector.translateToLocal("GTPP.MBTT.SteamHatch"); + + public MTESteamMultiBase(String aName) { + super(aName); + } + + public MTESteamMultiBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureIndex()), + aActive ? getFrontOverlayActive() : getFrontOverlay() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureIndex()) }; + } + + protected abstract GTRenderedTexture getFrontOverlay(); + + protected abstract GTRenderedTexture getFrontOverlayActive(); + + public abstract int getTierRecipes(); + + private int getCasingTextureIndex() { + return 10; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(V[getTierRecipes()]); + // We need to trick the GT_ParallelHelper we have enough amps for all recipe parallels. + logic.setAvailableAmperage(getMaxParallelRecipes()); + logic.setAmperageOC(false); + } + + public ArrayList getAllSteamStacks() { + ArrayList aFluids = new ArrayList<>(); + 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.mInputHatches.clear(); + this.mSteamInputFluids.clear(); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + /** + * Called every tick the Machine runs + */ + @Override + public boolean onRunningTick(ItemStack aStack) { + if (lEUt < 0) { + long aSteamVal = ((-lEUt * 10000) / Math.max(1000, mEfficiency)); + // Logger.INFO("Trying to drain "+aSteamVal+" steam per tick."); + if (!tryConsumeSteam((int) aSteamVal)) { + stopMachine(ShutDownReasonRegistry.POWER_LOSS); + return false; + } + } + return true; + } + + @Override + public boolean addToMachineList(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + if (aTileEntity == null) { + log("Invalid IGregTechTileEntity"); + return false; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + log("Invalid IMetaTileEntity"); + return false; + } + + // Use this to determine the correct value, then update the hatch texture after. + boolean aDidAdd = false; + + if (aMetaTileEntity instanceof MTEHatchCustomFluidBase) { + log("Adding Steam Input Hatch"); + aDidAdd = addToMachineListInternal(mSteamInputFluids, aMetaTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MteHatchSteamBusInput) { + log( + "Trying to set recipe map. Type: " + + (getRecipeMap() != null ? getRecipeMap().unlocalizedName : "Null")); + this.resetRecipeMapForHatch(aTileEntity, getRecipeMap()); + log("Adding Steam Input Bus"); + aDidAdd = addToMachineListInternal(mSteamInputs, aMetaTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchSteamBusOutput) { + log("Adding Steam Output Bus"); + aDidAdd = addToMachineListInternal(mSteamOutputs, aMetaTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchInput) + aDidAdd = addToMachineListInternal(mInputHatches, aMetaTileEntity, aBaseCasingIndex); + else if (aMetaTileEntity instanceof MTEHatchOutput); + + return aDidAdd; + } + + /* + * Handle I/O with custom hatches + */ + + @Override + public boolean depleteInput(FluidStack aLiquid) { + if (aLiquid == null) return false; + for (MTEHatchCustomFluidBase tHatch : filterValidMTEs(mSteamInputFluids)) { + 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 (GTUtility.isStackInvalid(aStack)) return false; + FluidStack aLiquid = GTUtility.getFluidForFilledItem(aStack, true); + if (aLiquid != null) return depleteInput(aLiquid); + for (MTEHatchCustomFluidBase tHatch : filterValidMTEs(mSteamInputFluids)) { + if (GTUtility.areStacksEqual( + aStack, + tHatch.getBaseMetaTileEntity() + .getStackInSlot(0))) { + if (tHatch.getBaseMetaTileEntity() + .getStackInSlot(0).stackSize >= aStack.stackSize) { + tHatch.getBaseMetaTileEntity() + .decrStackSize(0, aStack.stackSize); + return true; + } + } + } + for (MteHatchSteamBusInput tHatch : filterValidMTEs(mSteamInputs)) { + tHatch.mRecipeMap = getRecipeMap(); + for (int i = tHatch.getBaseMetaTileEntity() + .getSizeInventory() - 1; i >= 0; i--) { + if (GTUtility.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 getStoredFluids() { + ArrayList rList = new ArrayList<>(); + for (MTEHatchCustomFluidBase tHatch : filterValidMTEs(mSteamInputFluids)) { + if (tHatch.getFillableStack() != null) { + rList.add(tHatch.getFillableStack()); + } + } + for (MTEHatchInput hatch : this.mInputHatches) if (hatch.getFillableStack() != null) { + rList.add(hatch.getFillableStack()); + } + return rList; + } + + @Override + public ArrayList getStoredInputs() { + ArrayList rList = new ArrayList<>(); + for (MteHatchSteamBusInput tHatch : filterValidMTEs(mSteamInputs)) { + tHatch.mRecipeMap = getRecipeMap(); + 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 (GTUtility.isStackInvalid(aStack)) return false; + aStack = GTUtility.copy(aStack); + boolean outputSuccess = true; + while (outputSuccess && aStack.stackSize > 0) { + outputSuccess = false; + ItemStack single = aStack.splitStack(1); + for (MTEHatchSteamBusOutput tHatch : filterValidMTEs(mSteamOutputs)) { + if (!outputSuccess) { + for (int i = tHatch.getSizeInventory() - 1; i >= 0 && !outputSuccess; i--) { + if (tHatch.getBaseMetaTileEntity() + .addStackToSlot(i, single)) outputSuccess = true; + } + } + } + for (MTEHatchOutput tHatch : filterValidMTEs(mOutputHatches)) { + if (!outputSuccess && tHatch.outputsItems()) { + if (tHatch.getBaseMetaTileEntity() + .addStackToSlot(1, single)) outputSuccess = true; + } + } + } + return outputSuccess; + } + + @Override + public ArrayList getStoredOutputs() { + ArrayList rList = new ArrayList<>(); + for (MTEHatchSteamBusOutput tHatch : filterValidMTEs(mSteamOutputs)) { + for (int i = tHatch.getBaseMetaTileEntity() + .getSizeInventory() - 1; i >= 0; i--) { + rList.add( + tHatch.getBaseMetaTileEntity() + .getStackInSlot(i)); + } + } + return rList; + } + + @Override + public List getItemOutputSlots(ItemStack[] toOutput) { + List ret = new ArrayList<>(); + for (final MTEHatch tBus : filterValidMTEs(mSteamOutputs)) { + final IInventory tBusInv = tBus.getBaseMetaTileEntity(); + for (int i = 0; i < tBusInv.getSizeInventory(); i++) { + ret.add(tBus.getStackInSlot(i)); + } + } + return ret; + } + + @Override + public void updateSlots() { + for (MTEHatchCustomFluidBase tHatch : filterValidMTEs(mSteamInputFluids)) tHatch.updateSlots(); + for (MteHatchSteamBusInput tHatch : filterValidMTEs(mSteamInputs)) tHatch.updateSlots(); + } + + @Override + public boolean supportsBatchMode() { + return false; + } + + @Override + public void clearHatches() { + super.clearHatches(); + mInputHatches.clear(); + mSteamInputFluids.clear(); + mSteamInputs.clear(); + mSteamOutputs.clear(); + } + + @Override + public boolean resetRecipeMapForAllInputHatches(RecipeMap aMap) { + boolean ret = super.resetRecipeMapForAllInputHatches(aMap); + for (MteHatchSteamBusInput hatch : mSteamInputs) { + if (resetRecipeMapForHatch(hatch, aMap)) { + ret = true; + } + } + for (MTEHatchInput g : this.mInputHatches) { + if (resetRecipeMapForHatch(g, aMap)) { + ret = true; + } + } + + return ret; + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + final NBTTagCompound tag = accessor.getNBTData(); + + if (tag.getBoolean("incompleteStructure")) { + currentTip.add(RED + "** INCOMPLETE STRUCTURE **" + RESET); + } + String efficiency = RESET + " Efficiency: " + tag.getFloat("efficiency") + "%"; + if (tag.getBoolean("hasProblems")) { + currentTip.add(RED + "** HAS PROBLEMS **" + efficiency); + } else if (!tag.getBoolean("incompleteStructure")) { + currentTip.add(GREEN + "Running Fine" + efficiency); + } + + boolean isActive = tag.getBoolean("isActive"); + if (isActive) { + long actualEnergyUsage = tag.getLong("energyUsage"); + if (actualEnergyUsage > 0) { + currentTip.add( + StatCollector.translateToLocalFormatted("GTPP.waila.steam.use", formatNumbers(actualEnergyUsage))); + } + } + currentTip + .add(GTWaila.getMachineProgressString(isActive, tag.getInteger("maxProgress"), tag.getInteger("progress"))); + // Show ns on the tooltip + if (GTMod.gregtechproxy.wailaAverageNS && tag.hasKey("averageNS")) { + int tAverageTime = tag.getInteger("averageNS"); + currentTip.add("Average CPU load of ~" + formatNumbers(tAverageTime) + " ns"); + } + super.getMTEWailaBody(itemStack, currentTip, accessor, config); + } + + protected static > HatchElementBuilder buildSteamInput(Class typeToken) { + return buildHatchAdder(typeToken).adder(MTESteamMultiBase::addToMachineList) + .hatchIds(31040) + .shouldReject(t -> !t.mSteamInputFluids.isEmpty()); + } + + protected enum SteamHatchElement implements IHatchElement> { + + InputBus_Steam { + + @Override + public List> mteClasses() { + return Collections.singletonList(MteHatchSteamBusInput.class); + } + + @Override + public long count(MTESteamMultiBase t) { + return t.mSteamInputs.size(); + } + }, + OutputBus_Steam { + + @Override + public List> mteClasses() { + return Collections.singletonList(MTEHatchSteamBusOutput.class); + } + + @Override + public long count(MTESteamMultiBase t) { + return t.mSteamOutputs.size(); + } + },; + + @Override + public IGTHatchAdder> adder() { + return MTESteamMultiBase::addToMachineList; + } + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTETransformerHiAmp.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTETransformerHiAmp.java new file mode 100644 index 0000000000..d2a6468f28 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/MTETransformerHiAmp.java @@ -0,0 +1,118 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.enums.GTValues; +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.MTETransformer; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; + +public class MTETransformerHiAmp extends MTETransformer { + + private boolean mHalfMode = false; + + public MTETransformerHiAmp(int aID, String aName, String aNameRegional, int aTier, String aDescription) { + super(aID, aName, aNameRegional, aTier, aDescription); + } + + public MTETransformerHiAmp(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public long maxEUStore() { + return ((512L + GTValues.V[(this.mTier + 1)] * 2L) * 8); + } + + @Override + public long maxAmperesOut() { + if (this.mHalfMode) { + return ((getBaseMetaTileEntity().isAllowedToWork()) ? 8L : 2L); + } + return ((getBaseMetaTileEntity().isAllowedToWork()) ? 16L : 4L); + } + + @Override + public long maxAmperesIn() { + if (this.mHalfMode) { + return ((getBaseMetaTileEntity().isAllowedToWork()) ? 2L : 8L); + } + return ((getBaseMetaTileEntity().isAllowedToWork()) ? 4L : 16L); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[12][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; + rTextures[1][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; + rTextures[2][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[mTier] }; + rTextures[3][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier + 1] }; + rTextures[4][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier + 1] }; + rTextures[5][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI[mTier + 1] }; + rTextures[6][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; + rTextures[7][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; + rTextures[8][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_IN[mTier] }; + rTextures[9][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier + 1] }; + rTextures[10][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier + 1] }; + rTextures[11][i + 1] = new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][i + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[mTier + 1] }; + } + return rTextures; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTETransformerHiAmp(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll( + this.mDescriptionArray, + "Accepts 4A and outputs 16A", + "Toggle 2A/8A half-mode with Screwdriver", + GTPPCore.GT_Tooltip.get()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setBoolean("mHalfMode", this.mHalfMode); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.mHalfMode = aNBT.getBoolean("mHalfMode"); + super.loadNBTData(aNBT); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + this.mHalfMode = !mHalfMode; + if (this.mHalfMode) { + PlayerUtils.messagePlayer(aPlayer, "Transformer is now running at 2A:8A in/out Ratio."); + } else { + PlayerUtils.messagePlayer(aPlayer, "Transformer is now running at 4A:16A in/out Ratio."); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechMetaBoilerBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechMetaBoilerBase.java deleted file mode 100644 index 3f0d8d1ec1..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechMetaBoilerBase.java +++ /dev/null @@ -1,361 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.generators; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.util.math.MathUtils; - -public abstract class GregtechMetaBoilerBase extends GT_MetaTileEntity_BasicTank { - - public int mTemperature = 20; - public int mProcessingEnergy = 0; - public int mLossTimer = 0; - public FluidStack mSteam = null; - public boolean mHadNoWater = false; - public long RI = MathUtils.randLong(5L, 30L); - - public GregtechMetaBoilerBase(final int aID, final String aName, final String aNameRegional, - final String aDescription, final ITexture... aTextures) { - super(aID, aName, aNameRegional, 0, 4, aDescription, aTextures); - } - - public GregtechMetaBoilerBase(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, 4, aDescription, aTextures); - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - ITexture[] tmp = this.mTextures[side.offsetY == 0 ? side != facing ? 2 : ((byte) (aActive ? 4 : 3)) - : side.ordinal()][aColorIndex + 1]; - if ((side != facing) && (tmp.length == 2)) { - tmp = new ITexture[] { tmp[0] }; - } - return tmp; - } - - @Override - public boolean isElectric() { - return false; - } - - @Override - public boolean isPneumatic() { - return false; - } - - @Override - public boolean isSteampowered() { - return false; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isFacingValid(final ForgeDirection facing) { - return facing.offsetY == 0; - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isValidSlot(final int aIndex) { - return true; - } - - @Override - public int getProgresstime() { - return this.mTemperature; - } - - @Override - public int maxProgresstime() { - return 500; - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - if (aPlayer != null) { - if (GT_Utility.areStacksEqual(aPlayer.getCurrentEquippedItem(), new ItemStack(Items.water_bucket, 1))) { - this.fill(Materials.Water.getFluid(1000 * aPlayer.getCurrentEquippedItem().stackSize), true); - aPlayer.getCurrentEquippedItem() - .func_150996_a(Items.bucket); - } else { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - } - } - return true; - } - - @Override - public boolean doesFillContainers() { - return true; - } - - @Override - public boolean doesEmptyContainers() { - return true; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public boolean displaysItemStack() { - return false; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public boolean isFluidInputAllowed(final FluidStack aFluid) { - return GT_ModHandler.isWater(aFluid); - } - - @Override - public FluidStack getDrainableStack() { - return this.mSteam; - } - - @Override - public FluidStack setDrainableStack(final FluidStack aFluid) { - this.mSteam = aFluid; - return this.mSteam; - } - - @Override - public boolean isDrainableStackSeparate() { - return true; - } - - @Override - public boolean allowCoverOnSide(final ForgeDirection side, final GT_ItemStack aCover) { - return GregTech_API.getCoverBehaviorNew(aCover.toStack()) - .isSimpleCover(); - } - - @Override - public void saveNBTData(final NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mLossTimer", this.mLossTimer); - aNBT.setInteger("mTemperature", this.mTemperature); - aNBT.setInteger("mProcessingEnergy", this.mProcessingEnergy); - if (this.mSteam != null) { - try { - aNBT.setTag("mSteam", this.mSteam.writeToNBT(new NBTTagCompound())); - } catch (final Throwable e) {} - } - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.mLossTimer = aNBT.getInteger("mLossTimer"); - this.mTemperature = aNBT.getInteger("mTemperature"); - this.mProcessingEnergy = aNBT.getInteger("mProcessingEnergy"); - this.mSteam = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mSteam")); - } - - @Override - public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { - if ((aBaseMetaTileEntity.isServerSide()) && (aTick > 20L)) { - if (this.mTemperature <= 20) { - this.mTemperature = 20; - this.mLossTimer = 0; - } - if (++this.mLossTimer > 40) { - this.mTemperature -= 1; - this.mLossTimer = 0; - } - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (side != aBaseMetaTileEntity.getFrontFacing()) { - final IFluidHandler tTileEntity = aBaseMetaTileEntity.getITankContainerAtSide(side); - if (tTileEntity != null) { - final FluidStack tDrained = aBaseMetaTileEntity - .drain(side, Math.max(1, this.mSteam.amount / 2), false); - if (tDrained != null) { - final int tFilledAmount = tTileEntity.fill(side.getOpposite(), tDrained, false); - if (tFilledAmount > 0) { - tTileEntity.fill( - side.getOpposite(), - aBaseMetaTileEntity.drain(side, tFilledAmount, true), - true); - } - } - } - } - } - if ((aTick % 10L) == 0L) { - if (this.mTemperature > 100) { - if ((this.mFluid == null) || (!GT_ModHandler.isWater(this.mFluid)) || (this.mFluid.amount <= 0)) { - this.mHadNoWater = true; - } else { - if (this.mHadNoWater) { - aBaseMetaTileEntity.doExplosion(2048L); - return; - } - this.mFluid.amount -= 1; - if (this.mSteam == null) { - this.mSteam = GT_ModHandler.getSteam(150L); - } else if (GT_ModHandler.isSteam(this.mSteam)) { - this.mSteam.amount += 150; - } else { - this.mSteam = GT_ModHandler.getSteam(150L); - } - } - } else { - this.mHadNoWater = false; - } - } - if ((this.mSteam != null) && (this.mSteam.amount > getSteamCapacity())) { - this.sendSound((byte) 1); - this.mSteam.amount = getSteamCapacity() * 3 / 4; - } - if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork()) - && (this.mInventory[2] != null)) { - if ((GT_OreDictUnificator - .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Coal))) - || (GT_OreDictUnificator - .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Coal))) - || (GT_OreDictUnificator - .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Coal))) - || (GT_OreDictUnificator - .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Coal)))) { - this.mProcessingEnergy += 160; - aBaseMetaTileEntity.decrStackSize(2, 1); - if (aBaseMetaTileEntity.getRandomNumber(3) == 0) { - aBaseMetaTileEntity - .addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L)); - } - } else if (GT_OreDictUnificator - .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Charcoal))) { - this.mProcessingEnergy += 160; - aBaseMetaTileEntity.decrStackSize(2, 1); - if (aBaseMetaTileEntity.getRandomNumber(3) == 0) { - aBaseMetaTileEntity - .addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L)); - } - } else if (GT_OreDictUnificator.isItemStackInstanceOf(this.mInventory[2], "fuelCoke")) { - this.mProcessingEnergy += 640; - aBaseMetaTileEntity.decrStackSize(2, 1); - if (aBaseMetaTileEntity.getRandomNumber(2) == 0) { - aBaseMetaTileEntity - .addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L)); - } - } else if ((GT_OreDictUnificator - .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Lignite))) - || (GT_OreDictUnificator - .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Lignite))) - || (GT_OreDictUnificator - .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Lignite))) - || (GT_OreDictUnificator - .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Lignite)))) { - this.mProcessingEnergy += 40; - aBaseMetaTileEntity.decrStackSize(2, 1); - if (aBaseMetaTileEntity.getRandomNumber(8) == 0) { - aBaseMetaTileEntity.addStackToSlot( - 3, - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L)); - } - } - } - if ((this.mTemperature < 1000) && (this.mProcessingEnergy > 0) && ((aTick % 12L) == 0L)) { - this.mProcessingEnergy -= 2; - this.mTemperature += 1; - } - aBaseMetaTileEntity.setActive(this.mProcessingEnergy > 0); - } - } - - @Override - // Since this type of machine can have different water and steam capacities, we need to override getTankInfo() to - // support returning those different capacities. - public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { - return new FluidTankInfo[] { new FluidTankInfo(this.mFluid, getCapacity()), - new FluidTankInfo(this.mSteam, getSteamCapacity()) }; - } - - @Override - public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return (aIndex == 1) || (aIndex == 3); - } - - @Override - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return aIndex == 2; - } - - @Override - public void doSound(final byte aIndex, final double aX, final double aY, final double aZ) { - if (aIndex == 1) { - GT_Utility.doSoundAtClient(SoundResource.RANDOM_FIZZ, 2, 1.0F, aX, aY, aZ); - for (int l = 0; l < 8; l++) { - this.getBaseMetaTileEntity() - .getWorld() - .spawnParticle( - "largesmoke", - (aX - 0.5D) + Math.random(), - aY, - (aZ - 0.5D) + Math.random(), - 0.0D, - 0.0D, - 0.0D); - } - } - } - - @Override - public int getCapacity() { - return 16000; - } - - // This type of machine can have different water and steam capacities. - public int getSteamCapacity() { - return 32000; - } - - @Override - public int getTankPressure() { - return 100; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechMetaSolarGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechMetaSolarGenerator.java deleted file mode 100644 index 5e0588acfd..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechMetaSolarGenerator.java +++ /dev/null @@ -1,241 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.generators; - -import static gregtech.api.enums.GT_Values.V; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; - -public abstract class GregtechMetaSolarGenerator extends GT_MetaTileEntity_BasicTank { - - public int mEfficiency; - public int mProcessingEnergy = 0; - public int mSolarCharge = 20; - public int mLossTimer = 0; - public static int sEnergyPerTick = 16; - - public GregtechMetaSolarGenerator(final int aID, final String aName, final String aNameRegional, final int aTier, - final String aDescription, final ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, 3, aDescription, aTextures); - } - - public GregtechMetaSolarGenerator(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFrontActive(i); - rTextures[6][i + 1] = this.getBackActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } - - @Override - public String[] getDescription() { - return ArrayUtils.add(this.mDescriptionArray, "Efficiency: " + this.getEfficiency() + "%"); - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; - } - - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; - } - - public ITexture[] getFrontActive(final byte aColor) { - return this.getFront(aColor); - } - - public ITexture[] getBackActive(final byte aColor) { - return this.getBack(aColor); - } - - public ITexture[] getBottomActive(final byte aColor) { - return this.getBottom(aColor); - } - - public ITexture[] getTopActive(final byte aColor) { - return this.getTop(aColor); - } - - public ITexture[] getSidesActive(final byte aColor) { - return this.getSides(aColor); - } - - @Override - public boolean isFacingValid(final ForgeDirection side) { - return side.offsetY == 0; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isValidSlot(final int aIndex) { - return aIndex < 2; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return true; - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public long maxEUOutput() { - return this.getBaseMetaTileEntity() - .isAllowedToWork() ? V[this.mTier] : 0; - } - - @Override - public long maxEUStore() { - return Math.max(this.getEUVar(), (V[this.mTier] * 40) + this.getMinimumStoredEU()); - } - - @Override - public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() - && (aTick > 20L) - && (aBaseMetaTileEntity.getUniversalEnergyStored() - < (this.maxEUOutput() + aBaseMetaTileEntity.getEUCapacity()))) { - - if (this.mSolarCharge <= 20) { - this.mSolarCharge = 20; - this.mLossTimer = 0; - } - if (++this.mLossTimer > 45) { - this.mSolarCharge -= 1; - this.mLossTimer = 0; - } - - if ((aTick % 25L) == 0L) { - if (this.mSolarCharge > 100) { - if ((this.mProcessingEnergy > 0) && (aBaseMetaTileEntity.isAllowedToWork()) - && ((aTick % 256L) == 0L) - && (!aBaseMetaTileEntity.getWorld() - .isThundering() - && (aBaseMetaTileEntity.getUniversalEnergyStored() - < ((this.maxEUOutput() * 20) + this.getMinimumStoredEU())))) { - this.getBaseMetaTileEntity() - .increaseStoredEnergyUnits((sEnergyPerTick * this.getEfficiency()) / 10, false); - } - } - } - - if ((this.mSolarCharge < 500) && (this.mProcessingEnergy > 0) && ((aTick % 12L) == 0L)) { - this.mProcessingEnergy -= 1; - this.mSolarCharge += 1; - } - - if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork()) - && ((aTick % 256L) == 0L) - && (!aBaseMetaTileEntity.getWorld() - .isThundering())) { - final boolean bRain = aBaseMetaTileEntity.getWorld() - .isRaining() && (aBaseMetaTileEntity.getBiome().rainfall > 0.0F); - this.mProcessingEnergy += (bRain && (aBaseMetaTileEntity.getWorld().skylightSubtracted >= 4)) - || !aBaseMetaTileEntity.getSkyAtSide(ForgeDirection.UP) ? 0 - : !bRain && aBaseMetaTileEntity.getWorld() - .isDaytime() ? 8 : 1; - } - - if (aBaseMetaTileEntity.isServerSide()) { - aBaseMetaTileEntity.setActive( - aBaseMetaTileEntity.isAllowedToWork() && (aBaseMetaTileEntity.getUniversalEnergyStored() - >= (this.maxEUOutput() + this.getMinimumStoredEU()))); - } - } - } - - public abstract int getEfficiency(); - - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return false; - } - - @Override - public boolean canTankBeEmptied() { - return false; - } - - @Override - public boolean displaysItemStack() { - return false; - } - - @Override - public boolean displaysStackSize() { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechRocketFuelGeneratorBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechRocketFuelGeneratorBase.java deleted file mode 100644 index 43ead231b3..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/GregtechRocketFuelGeneratorBase.java +++ /dev/null @@ -1,333 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.generators; - -import static gregtech.api.enums.GT_Values.V; - -import java.util.Collection; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.RecipeMapWorkable; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; - -public abstract class GregtechRocketFuelGeneratorBase extends GT_MetaTileEntity_BasicTank implements RecipeMapWorkable { - - protected int pollMin, pollMax; - - public GregtechRocketFuelGeneratorBase(final int aID, final String aName, final String aNameRegional, - final int aTier, final String aDescription, final ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, 3, aDescription, aTextures); - pollMin = (int) (CORE.ConfigSwitches.baseMinPollutionPerSecondRocketFuelGenerator - * CORE.ConfigSwitches.pollutionReleasedByTierRocketFuelGenerator[mTier]); - pollMax = (int) (CORE.ConfigSwitches.baseMaxPollutionPerSecondRocketFuelGenerator - * CORE.ConfigSwitches.pollutionReleasedByTierRocketFuelGenerator[mTier]); - } - - public GregtechRocketFuelGeneratorBase(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - pollMin = (int) (CORE.ConfigSwitches.baseMinPollutionPerSecondRocketFuelGenerator - * CORE.ConfigSwitches.pollutionReleasedByTierRocketFuelGenerator[mTier]); - pollMax = (int) (CORE.ConfigSwitches.baseMaxPollutionPerSecondRocketFuelGenerator - * CORE.ConfigSwitches.pollutionReleasedByTierRocketFuelGenerator[mTier]); - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFrontActive(i); - rTextures[6][i + 1] = this.getBackActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } - - @Override - public String[] getDescription() { - String aPollution = "Causes between " + pollMin + " and " + pollMax + " Pollution per second"; - return ArrayUtils.addAll( - this.mDescriptionArray, - "Fuel Efficiency: " + this.getEfficiency() + "%", - aPollution, - CORE.GT_Tooltip.get()); - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; - } - - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; - } - - public ITexture[] getFrontActive(final byte aColor) { - return this.getFront(aColor); - } - - public ITexture[] getBackActive(final byte aColor) { - return this.getBack(aColor); - } - - public ITexture[] getBottomActive(final byte aColor) { - return this.getBottom(aColor); - } - - public ITexture[] getTopActive(final byte aColor) { - return this.getTop(aColor); - } - - public ITexture[] getSidesActive(final byte aColor) { - return this.getSides(aColor); - } - - @Override - public boolean isFacingValid(final ForgeDirection side) { - return side.offsetY == 0; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isValidSlot(final int aIndex) { - return aIndex < 2; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return this.getBaseMetaTileEntity() - .getFrontFacing() == side; - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public long maxEUOutput() { - return V[this.mTier]; - } - - @Override - public long maxEUStore() { - return Math.max(this.getEUVar(), (V[this.mTier] * 500) + this.getMinimumStoredEU()); - } - - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return true; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return false; - } - - @Override - public boolean displaysItemStack() { - return true; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public boolean isFluidInputAllowed(final FluidStack aFluid) { - return this.getFuelValue(aFluid) > 0; - } - - @Override - public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { - - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && ((aTick % 10) == 0)) { - if (this.mFluid == null) { - if (aBaseMetaTileEntity.getUniversalEnergyStored() < (this.maxEUOutput() + this.getMinimumStoredEU())) { - this.mInventory[this.getStackDisplaySlot()] = null; - } else { - if (this.mInventory[this.getStackDisplaySlot()] == null) { - this.mInventory[this.getStackDisplaySlot()] = new ItemStack(Blocks.fire, 1); - } - this.mInventory[this.getStackDisplaySlot()].setStackDisplayName( - "Generating: " + (aBaseMetaTileEntity.getUniversalEnergyStored() - this.getMinimumStoredEU()) - + " EU"); - } - } else { - final int tFuelValue = this.getFuelValue(this.mFluid), - tConsumed = this.consumedFluidPerOperation(this.mFluid); - if ((tFuelValue > 0) && (tConsumed > 0) && (this.mFluid.amount >= tConsumed)) { - final long tFluidAmountToUse = Math.min( - this.mFluid.amount / tConsumed, - (((this.maxEUOutput() * 20) + this.getMinimumStoredEU()) - - aBaseMetaTileEntity.getUniversalEnergyStored()) / tFuelValue); - if ((tFluidAmountToUse > 0) - && aBaseMetaTileEntity.increaseStoredEnergyUnits(tFluidAmountToUse * tFuelValue, true)) { - int aSafeFloor = (int) Math.max(((tFluidAmountToUse * tConsumed) / 3), 1); - this.mFluid.amount -= (int) aSafeFloor; - PollutionUtils.addPollution(getBaseMetaTileEntity(), 10 * getPollution()); - } - } - } - if ((this.mInventory[this.getInputSlot()] != null) - && (aBaseMetaTileEntity.getUniversalEnergyStored() - < ((this.maxEUOutput() * 20) + this.getMinimumStoredEU())) - && (GT_Utility.getFluidForFilledItem(this.mInventory[this.getInputSlot()], true) == null)) { - final int tFuelValue = this.getFuelValue(this.mInventory[this.getInputSlot()]); - if (tFuelValue > 0) { - final ItemStack tEmptyContainer = this.getEmptyContainer(this.mInventory[this.getInputSlot()]); - if (aBaseMetaTileEntity.addStackToSlot(this.getOutputSlot(), tEmptyContainer)) { - aBaseMetaTileEntity.increaseStoredEnergyUnits(tFuelValue, true); - aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1); - PollutionUtils.addPollution(getBaseMetaTileEntity(), getPollution() / 2); - } - } - } - } - - if (aBaseMetaTileEntity.isServerSide()) { - aBaseMetaTileEntity.setActive( - aBaseMetaTileEntity.isAllowedToWork() && (aBaseMetaTileEntity.getUniversalEnergyStored() - >= (this.maxEUOutput() + this.getMinimumStoredEU()))); - } - } - - public int getPollution() { - return MathUtils.randInt(pollMin, pollMax); - } - - @Override - public abstract RecipeMap getRecipeMap(); - - public abstract int getEfficiency(); - - public int consumedFluidPerOperation(final FluidStack aLiquid) { - return 1; - } - - public int getFuelValue(final FluidStack aLiquid) { - if ((aLiquid == null) || (this.getRecipeMap() == null)) { - return 0; - } - FluidStack tLiquid; - final Collection tRecipeList = this.getRecipeMap() - .getAllRecipes(); - for (final GT_Recipe tFuel : tRecipeList) { - if ((tLiquid = tFuel.mFluidInputs[0]) != null) { - if (aLiquid.isFluidEqual(tLiquid)) { - int aperOp = this.consumedFluidPerOperation(tLiquid); - return (int) (((long) tFuel.mSpecialValue * this.getEfficiency() * aperOp) / 100); - } - } - } - return 0; - } - - public int getFuelValue(final ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack) || (this.getRecipeMap() == null)) { - return 0; - } - final GT_Recipe tFuel = this.getRecipeMap() - .findRecipe(this.getBaseMetaTileEntity(), false, Long.MAX_VALUE, null, aStack); - if (tFuel != null) { - return (int) ((tFuel.mSpecialValue * 1000L * this.getEfficiency()) / 100); - } - return 0; - } - - public ItemStack getEmptyContainer(final ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack) || (this.getRecipeMap() == null)) { - return null; - } - final GT_Recipe tFuel = this.getRecipeMap() - .findRecipe(this.getBaseMetaTileEntity(), false, Long.MAX_VALUE, null, aStack); - if (tFuel != null) { - return GT_Utility.copy(tFuel.getOutput(0)); - } - return GT_Utility.getContainerItem(aStack, true); - } - - @Override - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack) && ((this.getFuelValue(aStack) > 0) - || (this.getFuelValue(GT_Utility.getFluidForFilledItem(aStack, true)) > 0)); - } - - @Override - public int getCapacity() { - return 32000; - } - - @Override - public int getTankPressure() { - return -100; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTEBoilerBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTEBoilerBase.java new file mode 100644 index 0000000000..6387624a1c --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTEBoilerBase.java @@ -0,0 +1,360 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.generators; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SoundResource; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.objects.GTItemStack; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.util.math.MathUtils; + +public abstract class MTEBoilerBase extends MTEBasicTank { + + public int mTemperature = 20; + public int mProcessingEnergy = 0; + public int mLossTimer = 0; + public FluidStack mSteam = null; + public boolean mHadNoWater = false; + public long RI = MathUtils.randLong(5L, 30L); + + public MTEBoilerBase(final int aID, final String aName, final String aNameRegional, final String aDescription, + final ITexture... aTextures) { + super(aID, aName, aNameRegional, 0, 4, aDescription, aTextures); + } + + public MTEBoilerBase(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + ITexture[] tmp = this.mTextures[side.offsetY == 0 ? side != facing ? 2 : ((byte) (aActive ? 4 : 3)) + : side.ordinal()][aColorIndex + 1]; + if ((side != facing) && (tmp.length == 2)) { + tmp = new ITexture[] { tmp[0] }; + } + return tmp; + } + + @Override + public boolean isElectric() { + return false; + } + + @Override + public boolean isPneumatic() { + return false; + } + + @Override + public boolean isSteampowered() { + return false; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isFacingValid(final ForgeDirection facing) { + return facing.offsetY == 0; + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(final int aIndex) { + return true; + } + + @Override + public int getProgresstime() { + return this.mTemperature; + } + + @Override + public int maxProgresstime() { + return 500; + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + if (aPlayer != null) { + if (GTUtility.areStacksEqual(aPlayer.getCurrentEquippedItem(), new ItemStack(Items.water_bucket, 1))) { + this.fill(Materials.Water.getFluid(1000 * aPlayer.getCurrentEquippedItem().stackSize), true); + aPlayer.getCurrentEquippedItem() + .func_150996_a(Items.bucket); + } else { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + } + } + return true; + } + + @Override + public boolean doesFillContainers() { + return true; + } + + @Override + public boolean doesEmptyContainers() { + return true; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public boolean displaysItemStack() { + return false; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public boolean isFluidInputAllowed(final FluidStack aFluid) { + return GTModHandler.isWater(aFluid); + } + + @Override + public FluidStack getDrainableStack() { + return this.mSteam; + } + + @Override + public FluidStack setDrainableStack(final FluidStack aFluid) { + this.mSteam = aFluid; + return this.mSteam; + } + + @Override + public boolean isDrainableStackSeparate() { + return true; + } + + @Override + public boolean allowCoverOnSide(final ForgeDirection side, final GTItemStack aCover) { + return GregTechAPI.getCoverBehaviorNew(aCover.toStack()) + .isSimpleCover(); + } + + @Override + public void saveNBTData(final NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mLossTimer", this.mLossTimer); + aNBT.setInteger("mTemperature", this.mTemperature); + aNBT.setInteger("mProcessingEnergy", this.mProcessingEnergy); + if (this.mSteam != null) { + try { + aNBT.setTag("mSteam", this.mSteam.writeToNBT(new NBTTagCompound())); + } catch (final Throwable e) {} + } + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.mLossTimer = aNBT.getInteger("mLossTimer"); + this.mTemperature = aNBT.getInteger("mTemperature"); + this.mProcessingEnergy = aNBT.getInteger("mProcessingEnergy"); + this.mSteam = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag("mSteam")); + } + + @Override + public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { + if ((aBaseMetaTileEntity.isServerSide()) && (aTick > 20L)) { + if (this.mTemperature <= 20) { + this.mTemperature = 20; + this.mLossTimer = 0; + } + if (++this.mLossTimer > 40) { + this.mTemperature -= 1; + this.mLossTimer = 0; + } + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (side != aBaseMetaTileEntity.getFrontFacing()) { + final IFluidHandler tTileEntity = aBaseMetaTileEntity.getITankContainerAtSide(side); + if (tTileEntity != null) { + final FluidStack tDrained = aBaseMetaTileEntity + .drain(side, Math.max(1, this.mSteam.amount / 2), false); + if (tDrained != null) { + final int tFilledAmount = tTileEntity.fill(side.getOpposite(), tDrained, false); + if (tFilledAmount > 0) { + tTileEntity.fill( + side.getOpposite(), + aBaseMetaTileEntity.drain(side, tFilledAmount, true), + true); + } + } + } + } + } + if ((aTick % 10L) == 0L) { + if (this.mTemperature > 100) { + if ((this.mFluid == null) || (!GTModHandler.isWater(this.mFluid)) || (this.mFluid.amount <= 0)) { + this.mHadNoWater = true; + } else { + if (this.mHadNoWater) { + aBaseMetaTileEntity.doExplosion(2048L); + return; + } + this.mFluid.amount -= 1; + if (this.mSteam == null) { + this.mSteam = GTModHandler.getSteam(150L); + } else if (GTModHandler.isSteam(this.mSteam)) { + this.mSteam.amount += 150; + } else { + this.mSteam = GTModHandler.getSteam(150L); + } + } + } else { + this.mHadNoWater = false; + } + } + if ((this.mSteam != null) && (this.mSteam.amount > getSteamCapacity())) { + this.sendSound((byte) 1); + this.mSteam.amount = getSteamCapacity() * 3 / 4; + } + if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork()) + && (this.mInventory[2] != null)) { + if ((GTOreDictUnificator.isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Coal))) + || (GTOreDictUnificator + .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Coal))) + || (GTOreDictUnificator + .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Coal))) + || (GTOreDictUnificator + .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Coal)))) { + this.mProcessingEnergy += 160; + aBaseMetaTileEntity.decrStackSize(2, 1); + if (aBaseMetaTileEntity.getRandomNumber(3) == 0) { + aBaseMetaTileEntity + .addStackToSlot(3, GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L)); + } + } else if (GTOreDictUnificator + .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Charcoal))) { + this.mProcessingEnergy += 160; + aBaseMetaTileEntity.decrStackSize(2, 1); + if (aBaseMetaTileEntity.getRandomNumber(3) == 0) { + aBaseMetaTileEntity + .addStackToSlot(3, GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L)); + } + } else if (GTOreDictUnificator.isItemStackInstanceOf(this.mInventory[2], "fuelCoke")) { + this.mProcessingEnergy += 640; + aBaseMetaTileEntity.decrStackSize(2, 1); + if (aBaseMetaTileEntity.getRandomNumber(2) == 0) { + aBaseMetaTileEntity + .addStackToSlot(3, GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L)); + } + } else if ((GTOreDictUnificator + .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.gem.get(Materials.Lignite))) + || (GTOreDictUnificator + .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dust.get(Materials.Lignite))) + || (GTOreDictUnificator + .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.dustImpure.get(Materials.Lignite))) + || (GTOreDictUnificator + .isItemStackInstanceOf(this.mInventory[2], OrePrefixes.crushed.get(Materials.Lignite)))) { + this.mProcessingEnergy += 40; + aBaseMetaTileEntity.decrStackSize(2, 1); + if (aBaseMetaTileEntity.getRandomNumber(8) == 0) { + aBaseMetaTileEntity.addStackToSlot( + 3, + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L)); + } + } + } + if ((this.mTemperature < 1000) && (this.mProcessingEnergy > 0) && ((aTick % 12L) == 0L)) { + this.mProcessingEnergy -= 2; + this.mTemperature += 1; + } + aBaseMetaTileEntity.setActive(this.mProcessingEnergy > 0); + } + } + + @Override + // Since this type of machine can have different water and steam capacities, we need to override getTankInfo() to + // support returning those different capacities. + public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { + return new FluidTankInfo[] { new FluidTankInfo(this.mFluid, getCapacity()), + new FluidTankInfo(this.mSteam, getSteamCapacity()) }; + } + + @Override + public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return (aIndex == 1) || (aIndex == 3); + } + + @Override + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return aIndex == 2; + } + + @Override + public void doSound(final byte aIndex, final double aX, final double aY, final double aZ) { + if (aIndex == 1) { + GTUtility.doSoundAtClient(SoundResource.RANDOM_FIZZ, 2, 1.0F, aX, aY, aZ); + for (int l = 0; l < 8; l++) { + this.getBaseMetaTileEntity() + .getWorld() + .spawnParticle( + "largesmoke", + (aX - 0.5D) + Math.random(), + aY, + (aZ - 0.5D) + Math.random(), + 0.0D, + 0.0D, + 0.0D); + } + } + } + + @Override + public int getCapacity() { + return 16000; + } + + // This type of machine can have different water and steam capacities. + public int getSteamCapacity() { + return 32000; + } + + @Override + public int getTankPressure() { + return 100; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTERocketFuelGeneratorBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTERocketFuelGeneratorBase.java new file mode 100644 index 0000000000..386c5634f8 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTERocketFuelGeneratorBase.java @@ -0,0 +1,333 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.generators; + +import static gregtech.api.enums.GTValues.V; + +import java.util.Collection; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.RecipeMapWorkable; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; + +public abstract class MTERocketFuelGeneratorBase extends MTEBasicTank implements RecipeMapWorkable { + + protected int pollMin, pollMax; + + public MTERocketFuelGeneratorBase(final int aID, final String aName, final String aNameRegional, final int aTier, + final String aDescription, final ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, 3, aDescription, aTextures); + pollMin = (int) (GTPPCore.ConfigSwitches.baseMinPollutionPerSecondRocketFuelGenerator + * GTPPCore.ConfigSwitches.pollutionReleasedByTierRocketFuelGenerator[mTier]); + pollMax = (int) (GTPPCore.ConfigSwitches.baseMaxPollutionPerSecondRocketFuelGenerator + * GTPPCore.ConfigSwitches.pollutionReleasedByTierRocketFuelGenerator[mTier]); + } + + public MTERocketFuelGeneratorBase(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + pollMin = (int) (GTPPCore.ConfigSwitches.baseMinPollutionPerSecondRocketFuelGenerator + * GTPPCore.ConfigSwitches.pollutionReleasedByTierRocketFuelGenerator[mTier]); + pollMax = (int) (GTPPCore.ConfigSwitches.baseMaxPollutionPerSecondRocketFuelGenerator + * GTPPCore.ConfigSwitches.pollutionReleasedByTierRocketFuelGenerator[mTier]); + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFrontActive(i); + rTextures[6][i + 1] = this.getBackActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } + + @Override + public String[] getDescription() { + String aPollution = "Causes between " + pollMin + " and " + pollMax + " Pollution per second"; + return ArrayUtils.addAll( + this.mDescriptionArray, + "Fuel Efficiency: " + this.getEfficiency() + "%", + aPollution, + GTPPCore.GT_Tooltip.get()); + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; + } + + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; + } + + public ITexture[] getFrontActive(final byte aColor) { + return this.getFront(aColor); + } + + public ITexture[] getBackActive(final byte aColor) { + return this.getBack(aColor); + } + + public ITexture[] getBottomActive(final byte aColor) { + return this.getBottom(aColor); + } + + public ITexture[] getTopActive(final byte aColor) { + return this.getTop(aColor); + } + + public ITexture[] getSidesActive(final byte aColor) { + return this.getSides(aColor); + } + + @Override + public boolean isFacingValid(final ForgeDirection side) { + return side.offsetY == 0; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isValidSlot(final int aIndex) { + return aIndex < 2; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return this.getBaseMetaTileEntity() + .getFrontFacing() == side; + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public long maxEUOutput() { + return V[this.mTier]; + } + + @Override + public long maxEUStore() { + return Math.max(this.getEUVar(), (V[this.mTier] * 500) + this.getMinimumStoredEU()); + } + + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return true; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return false; + } + + @Override + public boolean displaysItemStack() { + return true; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public boolean isFluidInputAllowed(final FluidStack aFluid) { + return this.getFuelValue(aFluid) > 0; + } + + @Override + public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { + + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() && ((aTick % 10) == 0)) { + if (this.mFluid == null) { + if (aBaseMetaTileEntity.getUniversalEnergyStored() < (this.maxEUOutput() + this.getMinimumStoredEU())) { + this.mInventory[this.getStackDisplaySlot()] = null; + } else { + if (this.mInventory[this.getStackDisplaySlot()] == null) { + this.mInventory[this.getStackDisplaySlot()] = new ItemStack(Blocks.fire, 1); + } + this.mInventory[this.getStackDisplaySlot()].setStackDisplayName( + "Generating: " + (aBaseMetaTileEntity.getUniversalEnergyStored() - this.getMinimumStoredEU()) + + " EU"); + } + } else { + final int tFuelValue = this.getFuelValue(this.mFluid), + tConsumed = this.consumedFluidPerOperation(this.mFluid); + if ((tFuelValue > 0) && (tConsumed > 0) && (this.mFluid.amount >= tConsumed)) { + final long tFluidAmountToUse = Math.min( + this.mFluid.amount / tConsumed, + (((this.maxEUOutput() * 20) + this.getMinimumStoredEU()) + - aBaseMetaTileEntity.getUniversalEnergyStored()) / tFuelValue); + if ((tFluidAmountToUse > 0) + && aBaseMetaTileEntity.increaseStoredEnergyUnits(tFluidAmountToUse * tFuelValue, true)) { + int aSafeFloor = (int) Math.max(((tFluidAmountToUse * tConsumed) / 3), 1); + this.mFluid.amount -= (int) aSafeFloor; + PollutionUtils.addPollution(getBaseMetaTileEntity(), 10 * getPollution()); + } + } + } + if ((this.mInventory[this.getInputSlot()] != null) + && (aBaseMetaTileEntity.getUniversalEnergyStored() + < ((this.maxEUOutput() * 20) + this.getMinimumStoredEU())) + && (GTUtility.getFluidForFilledItem(this.mInventory[this.getInputSlot()], true) == null)) { + final int tFuelValue = this.getFuelValue(this.mInventory[this.getInputSlot()]); + if (tFuelValue > 0) { + final ItemStack tEmptyContainer = this.getEmptyContainer(this.mInventory[this.getInputSlot()]); + if (aBaseMetaTileEntity.addStackToSlot(this.getOutputSlot(), tEmptyContainer)) { + aBaseMetaTileEntity.increaseStoredEnergyUnits(tFuelValue, true); + aBaseMetaTileEntity.decrStackSize(this.getInputSlot(), 1); + PollutionUtils.addPollution(getBaseMetaTileEntity(), getPollution() / 2); + } + } + } + } + + if (aBaseMetaTileEntity.isServerSide()) { + aBaseMetaTileEntity.setActive( + aBaseMetaTileEntity.isAllowedToWork() && (aBaseMetaTileEntity.getUniversalEnergyStored() + >= (this.maxEUOutput() + this.getMinimumStoredEU()))); + } + } + + public int getPollution() { + return MathUtils.randInt(pollMin, pollMax); + } + + @Override + public abstract RecipeMap getRecipeMap(); + + public abstract int getEfficiency(); + + public int consumedFluidPerOperation(final FluidStack aLiquid) { + return 1; + } + + public int getFuelValue(final FluidStack aLiquid) { + if ((aLiquid == null) || (this.getRecipeMap() == null)) { + return 0; + } + FluidStack tLiquid; + final Collection tRecipeList = this.getRecipeMap() + .getAllRecipes(); + for (final GTRecipe tFuel : tRecipeList) { + if ((tLiquid = tFuel.mFluidInputs[0]) != null) { + if (aLiquid.isFluidEqual(tLiquid)) { + int aperOp = this.consumedFluidPerOperation(tLiquid); + return (int) (((long) tFuel.mSpecialValue * this.getEfficiency() * aperOp) / 100); + } + } + } + return 0; + } + + public int getFuelValue(final ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack) || (this.getRecipeMap() == null)) { + return 0; + } + final GTRecipe tFuel = this.getRecipeMap() + .findRecipe(this.getBaseMetaTileEntity(), false, Long.MAX_VALUE, null, aStack); + if (tFuel != null) { + return (int) ((tFuel.mSpecialValue * 1000L * this.getEfficiency()) / 100); + } + return 0; + } + + public ItemStack getEmptyContainer(final ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack) || (this.getRecipeMap() == null)) { + return null; + } + final GTRecipe tFuel = this.getRecipeMap() + .findRecipe(this.getBaseMetaTileEntity(), false, Long.MAX_VALUE, null, aStack); + if (tFuel != null) { + return GTUtility.copy(tFuel.getOutput(0)); + } + return GTUtility.getContainerItem(aStack, true); + } + + @Override + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return super.allowPutStack(aBaseMetaTileEntity, aIndex, side, aStack) && ((this.getFuelValue(aStack) > 0) + || (this.getFuelValue(GTUtility.getFluidForFilledItem(aStack, true)) > 0)); + } + + @Override + public int getCapacity() { + return 32000; + } + + @Override + public int getTankPressure() { + return -100; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTESolarGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTESolarGenerator.java new file mode 100644 index 0000000000..0d0cb67916 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/generators/MTESolarGenerator.java @@ -0,0 +1,241 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.generators; + +import static gregtech.api.enums.GTValues.V; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; + +public abstract class MTESolarGenerator extends MTEBasicTank { + + public int mEfficiency; + public int mProcessingEnergy = 0; + public int mSolarCharge = 20; + public int mLossTimer = 0; + public static int sEnergyPerTick = 16; + + public MTESolarGenerator(final int aID, final String aName, final String aNameRegional, final int aTier, + final String aDescription, final ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, 3, aDescription, aTextures); + } + + public MTESolarGenerator(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFrontActive(i); + rTextures[6][i + 1] = this.getBackActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } + + @Override + public String[] getDescription() { + return ArrayUtils.add(this.mDescriptionArray, "Efficiency: " + this.getEfficiency() + "%"); + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; + } + + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1] }; + } + + public ITexture[] getFrontActive(final byte aColor) { + return this.getFront(aColor); + } + + public ITexture[] getBackActive(final byte aColor) { + return this.getBack(aColor); + } + + public ITexture[] getBottomActive(final byte aColor) { + return this.getBottom(aColor); + } + + public ITexture[] getTopActive(final byte aColor) { + return this.getTop(aColor); + } + + public ITexture[] getSidesActive(final byte aColor) { + return this.getSides(aColor); + } + + @Override + public boolean isFacingValid(final ForgeDirection side) { + return side.offsetY == 0; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isValidSlot(final int aIndex) { + return aIndex < 2; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return true; + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public long maxEUOutput() { + return this.getBaseMetaTileEntity() + .isAllowedToWork() ? V[this.mTier] : 0; + } + + @Override + public long maxEUStore() { + return Math.max(this.getEUVar(), (V[this.mTier] * 40) + this.getMinimumStoredEU()); + } + + @Override + public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.isAllowedToWork() + && (aTick > 20L) + && (aBaseMetaTileEntity.getUniversalEnergyStored() + < (this.maxEUOutput() + aBaseMetaTileEntity.getEUCapacity()))) { + + if (this.mSolarCharge <= 20) { + this.mSolarCharge = 20; + this.mLossTimer = 0; + } + if (++this.mLossTimer > 45) { + this.mSolarCharge -= 1; + this.mLossTimer = 0; + } + + if ((aTick % 25L) == 0L) { + if (this.mSolarCharge > 100) { + if ((this.mProcessingEnergy > 0) && (aBaseMetaTileEntity.isAllowedToWork()) + && ((aTick % 256L) == 0L) + && (!aBaseMetaTileEntity.getWorld() + .isThundering() + && (aBaseMetaTileEntity.getUniversalEnergyStored() + < ((this.maxEUOutput() * 20) + this.getMinimumStoredEU())))) { + this.getBaseMetaTileEntity() + .increaseStoredEnergyUnits((sEnergyPerTick * this.getEfficiency()) / 10, false); + } + } + } + + if ((this.mSolarCharge < 500) && (this.mProcessingEnergy > 0) && ((aTick % 12L) == 0L)) { + this.mProcessingEnergy -= 1; + this.mSolarCharge += 1; + } + + if ((this.mProcessingEnergy <= 0) && (aBaseMetaTileEntity.isAllowedToWork()) + && ((aTick % 256L) == 0L) + && (!aBaseMetaTileEntity.getWorld() + .isThundering())) { + final boolean bRain = aBaseMetaTileEntity.getWorld() + .isRaining() && (aBaseMetaTileEntity.getBiome().rainfall > 0.0F); + this.mProcessingEnergy += (bRain && (aBaseMetaTileEntity.getWorld().skylightSubtracted >= 4)) + || !aBaseMetaTileEntity.getSkyAtSide(ForgeDirection.UP) ? 0 + : !bRain && aBaseMetaTileEntity.getWorld() + .isDaytime() ? 8 : 1; + } + + if (aBaseMetaTileEntity.isServerSide()) { + aBaseMetaTileEntity.setActive( + aBaseMetaTileEntity.isAllowedToWork() && (aBaseMetaTileEntity.getUniversalEnergyStored() + >= (this.maxEUOutput() + this.getMinimumStoredEU()))); + } + } + } + + public abstract int getEfficiency(); + + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return false; + } + + @Override + public boolean canTankBeEmptied() { + return false; + } + + @Override + public boolean displaysItemStack() { + return false; + } + + @Override + public boolean displaysStackSize() { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/machines/GregtechMetaTreeFarmerBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/machines/GregtechMetaTreeFarmerBase.java deleted file mode 100644 index fe3253244a..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/machines/GregtechMetaTreeFarmerBase.java +++ /dev/null @@ -1,180 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.machines; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.objects.GT_RenderedTexture; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public abstract class GregtechMetaTreeFarmerBase extends GT_MetaTileEntity_TieredMachineBlock { - - public GregtechMetaTreeFarmerBase(final int aID, final String aName, final String aNameRegional, final int aTier, - final int aInvSlotCount, final String aDescription) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); - } - - public GregtechMetaTreeFarmerBase(final String aName, final int aTier, final int aInvSlotCount, - final String[] aDescription, final ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFrontActive(i); - rTextures[6][i + 1] = this.getBackActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isValidSlot(final int aIndex) { - return false; - } - - @Override - public boolean isFacingValid(final ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return false; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public boolean isInputFacing(final ForgeDirection side) { - return !this.isOutputFacing(side); - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return this.getBaseMetaTileEntity() - .getBackFacing() == side; - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 0; - } - - @Override - public long maxEUStore() { - return 0; - } - - @Override - public long maxEUInput() { - return 0; - } - - @Override - public long maxEUOutput() { - return 0; - } - - @Override - public long maxAmperesIn() { - return 0; - } - - @Override - public long maxAmperesOut() { - return 0; - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return false; - } - - public abstract ITexture getOverlayIcon(); - - @Override - public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Farm_Manager) }; - } - - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Farm_Manager) }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Acacia_Log) }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Podzol) }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Farm_Manager) }; - } - - public ITexture[] getFrontActive(final byte aColor) { - return this.getFront(aColor); - } - - public ITexture[] getBackActive(final byte aColor) { - return this.getBack(aColor); - } - - public ITexture[] getBottomActive(final byte aColor) { - return this.getBottom(aColor); - } - - public ITexture[] getTopActive(final byte aColor) { - return this.getTop(aColor); - } - - public ITexture[] getSidesActive(final byte aColor) { - return this.getSides(aColor); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/machines/MTETreeFarmerBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/machines/MTETreeFarmerBase.java new file mode 100644 index 0000000000..dc0b4a5dd6 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/machines/MTETreeFarmerBase.java @@ -0,0 +1,180 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.machines; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public abstract class MTETreeFarmerBase extends MTETieredMachineBlock { + + public MTETreeFarmerBase(final int aID, final String aName, final String aNameRegional, final int aTier, + final int aInvSlotCount, final String aDescription) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription); + } + + public MTETreeFarmerBase(final String aName, final int aTier, final int aInvSlotCount, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFrontActive(i); + rTextures[6][i + 1] = this.getBackActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isValidSlot(final int aIndex) { + return false; + } + + @Override + public boolean isFacingValid(final ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return false; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public boolean isInputFacing(final ForgeDirection side) { + return !this.isOutputFacing(side); + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return this.getBaseMetaTileEntity() + .getBackFacing() == side; + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 0; + } + + @Override + public long maxEUStore() { + return 0; + } + + @Override + public long maxEUInput() { + return 0; + } + + @Override + public long maxEUOutput() { + return 0; + } + + @Override + public long maxAmperesIn() { + return 0; + } + + @Override + public long maxAmperesOut() { + return 0; + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return false; + } + + public abstract ITexture getOverlayIcon(); + + @Override + public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Farm_Manager) }; + } + + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Farm_Manager) }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Acacia_Log) }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Podzol) }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Farm_Manager) }; + } + + public ITexture[] getFrontActive(final byte aColor) { + return this.getFront(aColor); + } + + public ITexture[] getBackActive(final byte aColor) { + return this.getBack(aColor); + } + + public ITexture[] getBottomActive(final byte aColor) { + return this.getBottom(aColor); + } + + public ITexture[] getTopActive(final byte aColor) { + return this.getTop(aColor); + } + + public ITexture[] getSidesActive(final byte aColor) { + return this.getSides(aColor); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_Catalysts.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_Catalysts.java deleted file mode 100644 index b53e540044..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_Catalysts.java +++ /dev/null @@ -1,71 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -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, 0, 16, "Dedicated Catalyst Storage", false); - } - - public GT_MetaTileEntity_Hatch_Catalysts(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, 0, 16, aDescription, false, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Bus_Catalyst) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Bus_Catalyst) }; - } - - @Override - public String[] getDescription() { - return ArrayUtils.add(this.mDescriptionArray, CORE.GT_Tooltip.get()); - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_Catalysts(mName, mDescriptionArray, mTextures); - } - - @Override - public String getNameGUI() { - return "Catalyst Container"; - } - - @Override - public AutoMap getItemsValidForUsageSlots() { - return new AutoMap<>(); - } - - @Override - public boolean isItemValidForUsageSlot(ItemStack aStack) { - return ItemUtils.isCatalyst(aStack); - } - - @Override - public int getInputSlotCount() { - return 16; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_MillingBalls.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_MillingBalls.java deleted file mode 100644 index e3134f5812..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_MillingBalls.java +++ /dev/null @@ -1,71 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MetaTileEntity_Hatch_MillingBalls extends GT_MetaTileEntity_Hatch_NbtConsumable { - - public GT_MetaTileEntity_Hatch_MillingBalls(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional, 6, 4, "Dedicated Milling Ball Storage", false); - } - - public GT_MetaTileEntity_Hatch_MillingBalls(String aName, String[] aDescription, ITexture[][][] aTextures) { - super(aName, 6, 4, aDescription, false, aTextures); - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Bus_Milling_Balls) }; - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return new ITexture[] { aBaseTexture, new GT_RenderedTexture(TexturesGtBlock.Overlay_Bus_Milling_Balls) }; - } - - @Override - public String[] getDescription() { - return ArrayUtils.add(this.mDescriptionArray, CORE.GT_Tooltip.get()); - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Hatch_MillingBalls(mName, mDescriptionArray, mTextures); - } - - @Override - public String getNameGUI() { - return "Ball Housing"; - } - - @Override - public AutoMap getItemsValidForUsageSlots() { - return new AutoMap<>(); - } - - @Override - public boolean isItemValidForUsageSlot(ItemStack aStack) { - return ItemUtils.isMillingBall(aStack); - } - - @Override - public int getInputSlotCount() { - return 4; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_NbtConsumable.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_NbtConsumable.java deleted file mode 100644 index e18fc489b0..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/GT_MetaTileEntity_Hatch_NbtConsumable.java +++ /dev/null @@ -1,348 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public abstract class GT_MetaTileEntity_Hatch_NbtConsumable extends GT_MetaTileEntity_Hatch - implements IAddGregtechLogo { - - private final int mInputslotCount; - private final int mTotalSlotCount; - private final boolean mAllowDuplicateUsageTypes; - - public GT_MetaTileEntity_Hatch_NbtConsumable(int aID, String aName, String aNameRegional, int aTier, - int aInputSlots, String aDescription, boolean aAllowDuplicateTypes) { - super(aID, aName, aNameRegional, aTier, aInputSlots * 2, aDescription); - mInputslotCount = getInputSlotCount(); - mTotalSlotCount = getInputSlotCount() * 2; - mAllowDuplicateUsageTypes = aAllowDuplicateTypes; - } - - public GT_MetaTileEntity_Hatch_NbtConsumable(String aName, int aTier, int aInputSlots, String[] aDescription, - boolean aAllowDuplicateTypes, ITexture[][][] aTextures) { - super(aName, aTier, aInputSlots * 2, aDescription, aTextures); - mInputslotCount = getInputSlotCount(); - mTotalSlotCount = getInputSlotCount() * 2; - mAllowDuplicateUsageTypes = aAllowDuplicateTypes; - } - - @Override - public abstract ITexture[] getTexturesActive(ITexture aBaseTexture); - - @Override - public abstract ITexture[] getTexturesInactive(ITexture aBaseTexture); - - public abstract int getInputSlotCount(); - - @Override - public final boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public final boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public final boolean isValidSlot(int aIndex) { - return true; - } - - @Override - public abstract MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity); - - @Override - public final boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - public abstract String getNameGUI(); - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - validateUsageSlots(); - if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { - fillStacksIntoFirstSlots(); - tryFillUsageSlots(); - } - } - - public final void updateSlots() { - for (int i = 0; i < mInventory.length; i++) { - if (mInventory[i] != null && mInventory[i].stackSize <= 0) { - mInventory[i] = null; - } - // Only moves items in the first four slots - if (i <= getSlotID_LastInput()) { - fillStacksIntoFirstSlots(); - } - } - } - - protected void validateUsageSlots() { - for (int i = getSlotID_FirstUsage(); i <= getSlotID_LastUsage(); i++) { - if (mInventory[i] != null && mInventory[i].stackSize < 1) { - mInventory[i] = null; - this.markDirty(); - } - } - } - - // Only moves items in the first four slots - protected final void fillStacksIntoFirstSlots() { - for (int i = 0; i <= getSlotID_LastInput(); i++) { - for (int j = i + 1; j <= getSlotID_LastInput(); 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); - } - } - } - } - - public final void tryFillUsageSlots() { - int aSlotSpace = (mInputslotCount - getContentUsageSlots().size()); - if (aSlotSpace > 0) { - Logger.INFO("We have empty usage slots. " + aSlotSpace); - for (int i = getSlotID_FirstInput(); i <= getSlotID_LastInput(); i++) { - ItemStack aStackToTryMove = mInventory[i]; - if (aStackToTryMove != null && isItemValidForUsageSlot(aStackToTryMove)) { - Logger.INFO("Trying to move stack from input slot " + i); - if (moveItemFromStockToUsageSlots(aStackToTryMove)) { - Logger.INFO("Updating Slots."); - updateSlots(); - } - } - } - } - } - - private int getSlotID_FirstInput() { - return 0; - } - - private int getSlotID_LastInput() { - return mInputslotCount - 1; - } - - private int getSlotID_FirstUsage() { - return mInputslotCount; - } - - private int getSlotID_LastUsage() { - return mTotalSlotCount - 1; - } - - public final AutoMap getContentUsageSlots() { - AutoMap aItems = new AutoMap<>(); - for (int i = mInputslotCount; i < mTotalSlotCount; i++) { - if (mInventory[i] != null) { - aItems.add(mInventory[i]); - } - } - return aItems; - } - - public final boolean moveItemFromStockToUsageSlots(ItemStack aStack) { - return moveItemFromStockToUsageSlots(aStack, mAllowDuplicateUsageTypes); - } - - public final boolean moveItemFromStockToUsageSlots(ItemStack aStack, boolean aAllowMultiOfSameTypeInUsageSlots) { - if (aStack != null) { - if (aStack.stackSize > 0) { - - if (!isItemValidForUsageSlot(aStack)) { - Logger.INFO("Stack not valid: " + ItemUtils.getItemName(aStack)); - return false; - } - - // Copy the input stack into a new object - ItemStack aStackToMove = aStack.copy(); - // Set stack size of stack to move to 1. - aStackToMove.stackSize = 1; - // Did we set a stack in the usage slots? - boolean aDidSet = false; - // Did we find another of this item already in the usage slots? - boolean aFoundMatching = false; - // Continue processing with our new stack - // First check for duplicates - for (int i = getSlotID_FirstUsage(); i <= getSlotID_LastUsage(); i++) { - if (mInventory[i] != null) { - if (GT_Utility.areStacksEqual(aStackToMove, mInventory[i], true)) { - Logger.INFO("Found matching stack in slot " + i + "."); - aFoundMatching = true; - break; - } - } - } - // Then Move stack to Usage slots - for (int i = getSlotID_FirstUsage(); i <= getSlotID_LastUsage(); i++) { - if (mInventory[i] == null) { - if ((aFoundMatching && aAllowMultiOfSameTypeInUsageSlots) || !aFoundMatching) { - mInventory[i] = aStackToMove; - aDidSet = true; - Logger.INFO("Moving new stack to usage slots."); - break; - } - } - } - if (aDidSet) { - Logger.INFO("Depleting input stack size by 1."); - // Depleted one from the original input stack - aStack.stackSize--; - } - return aDidSet; - } - } - return false; - } - - @Override - public final boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public final boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == getBaseMetaTileEntity().getFrontFacing() && isItemValidForUsageSlot(aStack) - && aIndex < mInputslotCount; - } - - /** - * Items that get compared when checking for Usage Slot validity. Can return an empty map if - * isItemValidForUsageSlot() is overridden. - * - * @return - */ - public abstract AutoMap getItemsValidForUsageSlots(); - - /** - * Checks if the given item is valid for Usage Slots. Can be overridden for easier handling if you already have - * methods to check this. - * - * @param aStack - * @return - */ - public boolean isItemValidForUsageSlot(ItemStack aStack) { - if (aStack != null) { - for (ItemStack aValid : getItemsValidForUsageSlots()) { - if (GT_Utility.areStacksEqual(aStack, aValid, true)) { - return true; - } - } - } - return false; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - switch (mTotalSlotCount) { - case 8, 18 -> builder.widget( - new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) - .setSize(17, 17) - .setPos(152, 63)); - case 32 -> builder.widget( - new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) - .setSize(17, 17) - .setPos(79, 35)); - } - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - switch (mTotalSlotCount) { - case 8 -> { - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 2) - .startFromSlot(0) - .endAtSlot(3) - .build() - .setPos(25, 25)); - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 2) - .startFromSlot(4) - .endAtSlot(7) - .canInsert(false) - .build() - .setPos(115, 25)); - builder.widget( - new TextWidget("Stock").setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(25, 16)) - .widget( - new TextWidget("Active").setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(115, 16)); - } - case 18 -> { - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 3) - .startFromSlot(0) - .endAtSlot(8) - .build() - .setPos(25, 19)); - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 3) - .startFromSlot(9) - .endAtSlot(17) - .canInsert(false) - .build() - .setPos(97, 19)); - builder.widget( - new TextWidget("Stock").setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(25, 14)) - .widget( - new TextWidget("Active").setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(15, 14)); - } - case 32 -> { - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 4) - .startFromSlot(0) - .endAtSlot(15) - .build() - .setPos(7, 7)); - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 4) - .startFromSlot(16) - .endAtSlot(31) - .canInsert(false) - .build() - .setPos(96, 7)); - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchCatalysts.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchCatalysts.java new file mode 100644 index 0000000000..13bb4b44f1 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchCatalysts.java @@ -0,0 +1,71 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEHatchCatalysts extends MTEHatchNbtConsumable { + + public MTEHatchCatalysts(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 0, 16, "Dedicated Catalyst Storage", false); + } + + public MTEHatchCatalysts(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, 0, 16, aDescription, false, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Bus_Catalyst) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Bus_Catalyst) }; + } + + @Override + public String[] getDescription() { + return ArrayUtils.add(this.mDescriptionArray, GTPPCore.GT_Tooltip.get()); + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchCatalysts(mName, mDescriptionArray, mTextures); + } + + @Override + public String getNameGUI() { + return "Catalyst Container"; + } + + @Override + public AutoMap getItemsValidForUsageSlots() { + return new AutoMap<>(); + } + + @Override + public boolean isItemValidForUsageSlot(ItemStack aStack) { + return ItemUtils.isCatalyst(aStack); + } + + @Override + public int getInputSlotCount() { + return 16; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchMillingBalls.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchMillingBalls.java new file mode 100644 index 0000000000..a40ea08ec1 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchMillingBalls.java @@ -0,0 +1,71 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEHatchMillingBalls extends MTEHatchNbtConsumable { + + public MTEHatchMillingBalls(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 6, 4, "Dedicated Milling Ball Storage", false); + } + + public MTEHatchMillingBalls(String aName, String[] aDescription, ITexture[][][] aTextures) { + super(aName, 6, 4, aDescription, false, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Bus_Milling_Balls) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Bus_Milling_Balls) }; + } + + @Override + public String[] getDescription() { + return ArrayUtils.add(this.mDescriptionArray, GTPPCore.GT_Tooltip.get()); + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchMillingBalls(mName, mDescriptionArray, mTextures); + } + + @Override + public String getNameGUI() { + return "Ball Housing"; + } + + @Override + public AutoMap getItemsValidForUsageSlots() { + return new AutoMap<>(); + } + + @Override + public boolean isItemValidForUsageSlot(ItemStack aStack) { + return ItemUtils.isMillingBall(aStack); + } + + @Override + public int getInputSlotCount() { + return 4; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchNbtConsumable.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchNbtConsumable.java new file mode 100644 index 0000000000..dbcef2d9e7 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/nbthandlers/MTEHatchNbtConsumable.java @@ -0,0 +1,347 @@ +package gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public abstract class MTEHatchNbtConsumable extends MTEHatch implements IAddGregtechLogo { + + private final int mInputslotCount; + private final int mTotalSlotCount; + private final boolean mAllowDuplicateUsageTypes; + + public MTEHatchNbtConsumable(int aID, String aName, String aNameRegional, int aTier, int aInputSlots, + String aDescription, boolean aAllowDuplicateTypes) { + super(aID, aName, aNameRegional, aTier, aInputSlots * 2, aDescription); + mInputslotCount = getInputSlotCount(); + mTotalSlotCount = getInputSlotCount() * 2; + mAllowDuplicateUsageTypes = aAllowDuplicateTypes; + } + + public MTEHatchNbtConsumable(String aName, int aTier, int aInputSlots, String[] aDescription, + boolean aAllowDuplicateTypes, ITexture[][][] aTextures) { + super(aName, aTier, aInputSlots * 2, aDescription, aTextures); + mInputslotCount = getInputSlotCount(); + mTotalSlotCount = getInputSlotCount() * 2; + mAllowDuplicateUsageTypes = aAllowDuplicateTypes; + } + + @Override + public abstract ITexture[] getTexturesActive(ITexture aBaseTexture); + + @Override + public abstract ITexture[] getTexturesInactive(ITexture aBaseTexture); + + public abstract int getInputSlotCount(); + + @Override + public final boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public final boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public final boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public abstract MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity); + + @Override + public final boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + public abstract String getNameGUI(); + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + validateUsageSlots(); + if (aBaseMetaTileEntity.isServerSide() && aBaseMetaTileEntity.hasInventoryBeenModified()) { + fillStacksIntoFirstSlots(); + tryFillUsageSlots(); + } + } + + public final void updateSlots() { + for (int i = 0; i < mInventory.length; i++) { + if (mInventory[i] != null && mInventory[i].stackSize <= 0) { + mInventory[i] = null; + } + // Only moves items in the first four slots + if (i <= getSlotID_LastInput()) { + fillStacksIntoFirstSlots(); + } + } + } + + protected void validateUsageSlots() { + for (int i = getSlotID_FirstUsage(); i <= getSlotID_LastUsage(); i++) { + if (mInventory[i] != null && mInventory[i].stackSize < 1) { + mInventory[i] = null; + this.markDirty(); + } + } + } + + // Only moves items in the first four slots + protected final void fillStacksIntoFirstSlots() { + for (int i = 0; i <= getSlotID_LastInput(); i++) { + for (int j = i + 1; j <= getSlotID_LastInput(); j++) { + if (mInventory[j] != null + && (mInventory[i] == null || GTUtility.areStacksEqual(mInventory[i], mInventory[j]))) { + GTUtility.moveStackFromSlotAToSlotB( + getBaseMetaTileEntity(), + getBaseMetaTileEntity(), + j, + i, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1); + } + } + } + } + + public final void tryFillUsageSlots() { + int aSlotSpace = (mInputslotCount - getContentUsageSlots().size()); + if (aSlotSpace > 0) { + Logger.INFO("We have empty usage slots. " + aSlotSpace); + for (int i = getSlotID_FirstInput(); i <= getSlotID_LastInput(); i++) { + ItemStack aStackToTryMove = mInventory[i]; + if (aStackToTryMove != null && isItemValidForUsageSlot(aStackToTryMove)) { + Logger.INFO("Trying to move stack from input slot " + i); + if (moveItemFromStockToUsageSlots(aStackToTryMove)) { + Logger.INFO("Updating Slots."); + updateSlots(); + } + } + } + } + } + + private int getSlotID_FirstInput() { + return 0; + } + + private int getSlotID_LastInput() { + return mInputslotCount - 1; + } + + private int getSlotID_FirstUsage() { + return mInputslotCount; + } + + private int getSlotID_LastUsage() { + return mTotalSlotCount - 1; + } + + public final AutoMap getContentUsageSlots() { + AutoMap aItems = new AutoMap<>(); + for (int i = mInputslotCount; i < mTotalSlotCount; i++) { + if (mInventory[i] != null) { + aItems.add(mInventory[i]); + } + } + return aItems; + } + + public final boolean moveItemFromStockToUsageSlots(ItemStack aStack) { + return moveItemFromStockToUsageSlots(aStack, mAllowDuplicateUsageTypes); + } + + public final boolean moveItemFromStockToUsageSlots(ItemStack aStack, boolean aAllowMultiOfSameTypeInUsageSlots) { + if (aStack != null) { + if (aStack.stackSize > 0) { + + if (!isItemValidForUsageSlot(aStack)) { + Logger.INFO("Stack not valid: " + ItemUtils.getItemName(aStack)); + return false; + } + + // Copy the input stack into a new object + ItemStack aStackToMove = aStack.copy(); + // Set stack size of stack to move to 1. + aStackToMove.stackSize = 1; + // Did we set a stack in the usage slots? + boolean aDidSet = false; + // Did we find another of this item already in the usage slots? + boolean aFoundMatching = false; + // Continue processing with our new stack + // First check for duplicates + for (int i = getSlotID_FirstUsage(); i <= getSlotID_LastUsage(); i++) { + if (mInventory[i] != null) { + if (GTUtility.areStacksEqual(aStackToMove, mInventory[i], true)) { + Logger.INFO("Found matching stack in slot " + i + "."); + aFoundMatching = true; + break; + } + } + } + // Then Move stack to Usage slots + for (int i = getSlotID_FirstUsage(); i <= getSlotID_LastUsage(); i++) { + if (mInventory[i] == null) { + if ((aFoundMatching && aAllowMultiOfSameTypeInUsageSlots) || !aFoundMatching) { + mInventory[i] = aStackToMove; + aDidSet = true; + Logger.INFO("Moving new stack to usage slots."); + break; + } + } + } + if (aDidSet) { + Logger.INFO("Depleting input stack size by 1."); + // Depleted one from the original input stack + aStack.stackSize--; + } + return aDidSet; + } + } + return false; + } + + @Override + public final boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public final boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == getBaseMetaTileEntity().getFrontFacing() && isItemValidForUsageSlot(aStack) + && aIndex < mInputslotCount; + } + + /** + * Items that get compared when checking for Usage Slot validity. Can return an empty map if + * isItemValidForUsageSlot() is overridden. + * + * @return + */ + public abstract AutoMap getItemsValidForUsageSlots(); + + /** + * Checks if the given item is valid for Usage Slots. Can be overridden for easier handling if you already have + * methods to check this. + * + * @param aStack + * @return + */ + public boolean isItemValidForUsageSlot(ItemStack aStack) { + if (aStack != null) { + for (ItemStack aValid : getItemsValidForUsageSlots()) { + if (GTUtility.areStacksEqual(aStack, aValid, true)) { + return true; + } + } + } + return false; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + switch (mTotalSlotCount) { + case 8, 18 -> builder.widget( + new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) + .setSize(17, 17) + .setPos(152, 63)); + case 32 -> builder.widget( + new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) + .setSize(17, 17) + .setPos(79, 35)); + } + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + switch (mTotalSlotCount) { + case 8 -> { + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 2) + .startFromSlot(0) + .endAtSlot(3) + .build() + .setPos(25, 25)); + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 2) + .startFromSlot(4) + .endAtSlot(7) + .canInsert(false) + .build() + .setPos(115, 25)); + builder.widget( + new TextWidget("Stock").setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(25, 16)) + .widget( + new TextWidget("Active").setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(115, 16)); + } + case 18 -> { + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 3) + .startFromSlot(0) + .endAtSlot(8) + .build() + .setPos(25, 19)); + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 3) + .startFromSlot(9) + .endAtSlot(17) + .canInsert(false) + .build() + .setPos(97, 19)); + builder.widget( + new TextWidget("Stock").setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(25, 14)) + .widget( + new TextWidget("Active").setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(15, 14)); + } + case 32 -> { + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 4) + .startFromSlot(0) + .endAtSlot(15) + .build() + .setPos(7, 7)); + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 4) + .startFromSlot(16) + .endAtSlot(31) + .canInsert(false) + .build() + .setPos(96, 7)); + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPPCopiedBlockTexture.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPPCopiedBlockTexture.java new file mode 100644 index 0000000000..117104b4f2 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPPCopiedBlockTexture.java @@ -0,0 +1,28 @@ +package gtPlusPlus.xmod.gregtech.api.objects; + +import net.minecraft.block.Block; + +import gregtech.api.enums.Dyes; +import gregtech.api.objects.GTCopiedBlockTexture; + +/** + * Made this to get rid of deprecation warnings everywhere. + * + * @author Alkalus + * + */ +@SuppressWarnings("deprecation") +public class GTPPCopiedBlockTexture extends GTCopiedBlockTexture { + + public GTPPCopiedBlockTexture(Block aBlock, int aSide, int aMeta, short[] aRGBa, boolean aAllowAlpha) { + super(aBlock, aMeta, aMeta, aRGBa, aAllowAlpha); + } + + public GTPPCopiedBlockTexture(Block aBlock, int aSide, int aMeta, short[] aRGBa) { + this(aBlock, aSide, aMeta, aRGBa, true); + } + + public GTPPCopiedBlockTexture(Block aBlock, int aSide, int aMeta) { + this(aBlock, aSide, aMeta, Dyes._NULL.mRGBa); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPPRenderedTexture.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPPRenderedTexture.java new file mode 100644 index 0000000000..fda498d1f6 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPPRenderedTexture.java @@ -0,0 +1,27 @@ +package gtPlusPlus.xmod.gregtech.api.objects; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.objects.GTRenderedTexture; + +/** + * Made this to get rid of deprecation warnings everywhere. + * + * @author Alkalus + * + */ +@SuppressWarnings("deprecation") +public class GTPPRenderedTexture extends GTRenderedTexture { + + public GTPPRenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) { + super(aIcon, aRGBa, aAllowAlpha); + } + + public GTPPRenderedTexture(IIconContainer aIcon, short[] aRGBa) { + this(aIcon, aRGBa, true); + } + + public GTPPRenderedTexture(IIconContainer aIcon) { + this(aIcon, Dyes._NULL.mRGBa); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPP_CopiedBlockTexture.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPP_CopiedBlockTexture.java deleted file mode 100644 index 6a780d227c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPP_CopiedBlockTexture.java +++ /dev/null @@ -1,28 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.objects; - -import net.minecraft.block.Block; - -import gregtech.api.enums.Dyes; -import gregtech.api.objects.GT_CopiedBlockTexture; - -/** - * Made this to get rid of deprecation warnings everywhere. - * - * @author Alkalus - * - */ -@SuppressWarnings("deprecation") -public class GTPP_CopiedBlockTexture extends GT_CopiedBlockTexture { - - public GTPP_CopiedBlockTexture(Block aBlock, int aSide, int aMeta, short[] aRGBa, boolean aAllowAlpha) { - super(aBlock, aMeta, aMeta, aRGBa, aAllowAlpha); - } - - public GTPP_CopiedBlockTexture(Block aBlock, int aSide, int aMeta, short[] aRGBa) { - this(aBlock, aSide, aMeta, aRGBa, true); - } - - public GTPP_CopiedBlockTexture(Block aBlock, int aSide, int aMeta) { - this(aBlock, aSide, aMeta, Dyes._NULL.mRGBa); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPP_RenderedTexture.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPP_RenderedTexture.java deleted file mode 100644 index 0da0136193..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GTPP_RenderedTexture.java +++ /dev/null @@ -1,27 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.objects; - -import gregtech.api.enums.Dyes; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.objects.GT_RenderedTexture; - -/** - * Made this to get rid of deprecation warnings everywhere. - * - * @author Alkalus - * - */ -@SuppressWarnings("deprecation") -public class GTPP_RenderedTexture extends GT_RenderedTexture { - - public GTPP_RenderedTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) { - super(aIcon, aRGBa, aAllowAlpha); - } - - public GTPP_RenderedTexture(IIconContainer aIcon, short[] aRGBa) { - this(aIcon, aRGBa, true); - } - - public GTPP_RenderedTexture(IIconContainer aIcon) { - this(aIcon, Dyes._NULL.mRGBa); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GregtechItemData.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GregtechItemData.java index 967d3ae916..2cafd18a39 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GregtechItemData.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/objects/GregtechItemData.java @@ -6,7 +6,7 @@ import java.util.List; import net.minecraft.item.ItemStack; -import gregtech.api.objects.GT_ArrayList; +import gregtech.api.objects.GTArrayList; import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes; import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; @@ -14,7 +14,7 @@ public class GregtechItemData { private static final GregtechMaterialStack[] EMPTY_GT_MaterialStack_ARRAY = new GregtechMaterialStack[0]; - public final List mExtraData = new GT_ArrayList<>(false, 1); + public final List mExtraData = new GTArrayList<>(false, 1); public final GregtechOrePrefixes mPrefix; public final GregtechMaterialStack mMaterial; public final GregtechMaterialStack[] mByProducts; diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/util/GTPPConfig.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/util/GTPPConfig.java new file mode 100644 index 0000000000..1a32b75bb8 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/util/GTPPConfig.java @@ -0,0 +1,123 @@ +package gtPlusPlus.xmod.gregtech.api.util; + +import static gregtech.api.enums.GTValues.E; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; + +import gregtech.api.GregTechAPI; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public class GTPPConfig implements Runnable { + + public static boolean troll = false; + + public static Configuration sConfigFileIDs; + public final Configuration mConfig; + + public GTPPConfig(Configuration aConfig) { + mConfig = aConfig; + mConfig.load(); + mConfig.save(); + } + + public static int addIDConfig(Object aCategory, String aName, int aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = sConfigFileIDs.get( + aCategory.toString() + .replaceAll("\\|", "."), + aName.replaceAll("\\|", "."), + aDefault); + int rResult = tProperty.getInt(aDefault); + if (!tProperty.wasRead() && GregTechAPI.sPostloadFinished) sConfigFileIDs.save(); + return rResult; + } + + public static String getStackConfigName(ItemStack aStack) { + if (GTUtility.isStackInvalid(aStack)) return E; + Object rName = GTOreDictUnificator.getAssociation(aStack); + if (rName != null) return rName.toString(); + try { + if (GTUtility.isStringValid(rName = aStack.getUnlocalizedName())) return rName.toString(); + } catch (Throwable e) { + /* Do nothing */ + } + String sName = aStack.getItem() + .toString(); + String[] tmp = sName.split("@"); + if (tmp.length > 0) sName = tmp[0]; + return sName + "." + aStack.getItemDamage(); + } + + public boolean get(Object aCategory, ItemStack aStack, boolean aDefault) { + String aName = getStackConfigName(aStack); + return get(aCategory, aName, aDefault); + } + + public boolean get(Object aCategory, String aName, boolean aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = mConfig.get( + aCategory.toString() + .replaceAll("\\|", "_"), + (aName + "_" + aDefault).replaceAll("\\|", "_"), + aDefault); + boolean rResult = tProperty.getBoolean(aDefault); + if (!tProperty.wasRead() && GregTechAPI.sPostloadFinished) mConfig.save(); + return rResult; + } + + public int get(Object aCategory, ItemStack aStack, int aDefault) { + return get(aCategory, getStackConfigName(aStack), aDefault); + } + + public int get(Object aCategory, String aName, int aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = mConfig.get( + aCategory.toString() + .replaceAll("\\|", "_"), + (aName + "_" + aDefault).replaceAll("\\|", "_"), + aDefault); + int rResult = tProperty.getInt(aDefault); + if (!tProperty.wasRead() && GregTechAPI.sPostloadFinished) mConfig.save(); + return rResult; + } + + public double get(Object aCategory, ItemStack aStack, double aDefault) { + return get(aCategory, getStackConfigName(aStack), aDefault); + } + + public double get(Object aCategory, String aName, double aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = mConfig.get( + aCategory.toString() + .replaceAll("\\|", "_"), + (aName + "_" + aDefault).replaceAll("\\|", "_"), + aDefault); + double rResult = tProperty.getDouble(aDefault); + if (!tProperty.wasRead() && GregTechAPI.sPostloadFinished) mConfig.save(); + return rResult; + } + + public String get(Object aCategory, ItemStack aStack, String aDefault) { + return get(aCategory, getStackConfigName(aStack), aDefault); + } + + public String get(Object aCategory, String aName, String aDefault) { + if (GTUtility.isStringInvalid(aName)) return aDefault; + Property tProperty = mConfig.get( + aCategory.toString() + .replaceAll("\\|", "_"), + (aName + "_" + aDefault).replaceAll("\\|", "_"), + aDefault); + String rResult = tProperty.getString(); + if (!tProperty.wasRead() && GregTechAPI.sPostloadFinished) mConfig.save(); + return rResult; + } + + @Override + public void run() { + mConfig.save(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/util/GTPP_Config.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/util/GTPP_Config.java deleted file mode 100644 index 65beea207a..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/util/GTPP_Config.java +++ /dev/null @@ -1,123 +0,0 @@ -package gtPlusPlus.xmod.gregtech.api.util; - -import static gregtech.api.enums.GT_Values.E; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.common.config.Property; - -import gregtech.api.GregTech_API; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public class GTPP_Config implements Runnable { - - public static boolean troll = false; - - public static Configuration sConfigFileIDs; - public final Configuration mConfig; - - public GTPP_Config(Configuration aConfig) { - mConfig = aConfig; - mConfig.load(); - mConfig.save(); - } - - public static int addIDConfig(Object aCategory, String aName, int aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = sConfigFileIDs.get( - aCategory.toString() - .replaceAll("\\|", "."), - aName.replaceAll("\\|", "."), - aDefault); - int rResult = tProperty.getInt(aDefault); - if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) sConfigFileIDs.save(); - return rResult; - } - - public static String getStackConfigName(ItemStack aStack) { - if (GT_Utility.isStackInvalid(aStack)) return E; - Object rName = GT_OreDictUnificator.getAssociation(aStack); - if (rName != null) return rName.toString(); - try { - if (GT_Utility.isStringValid(rName = aStack.getUnlocalizedName())) return rName.toString(); - } catch (Throwable e) { - /* Do nothing */ - } - String sName = aStack.getItem() - .toString(); - String[] tmp = sName.split("@"); - if (tmp.length > 0) sName = tmp[0]; - return sName + "." + aStack.getItemDamage(); - } - - public boolean get(Object aCategory, ItemStack aStack, boolean aDefault) { - String aName = getStackConfigName(aStack); - return get(aCategory, aName, aDefault); - } - - public boolean get(Object aCategory, String aName, boolean aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = mConfig.get( - aCategory.toString() - .replaceAll("\\|", "_"), - (aName + "_" + aDefault).replaceAll("\\|", "_"), - aDefault); - boolean rResult = tProperty.getBoolean(aDefault); - if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) mConfig.save(); - return rResult; - } - - public int get(Object aCategory, ItemStack aStack, int aDefault) { - return get(aCategory, getStackConfigName(aStack), aDefault); - } - - public int get(Object aCategory, String aName, int aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = mConfig.get( - aCategory.toString() - .replaceAll("\\|", "_"), - (aName + "_" + aDefault).replaceAll("\\|", "_"), - aDefault); - int rResult = tProperty.getInt(aDefault); - if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) mConfig.save(); - return rResult; - } - - public double get(Object aCategory, ItemStack aStack, double aDefault) { - return get(aCategory, getStackConfigName(aStack), aDefault); - } - - public double get(Object aCategory, String aName, double aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = mConfig.get( - aCategory.toString() - .replaceAll("\\|", "_"), - (aName + "_" + aDefault).replaceAll("\\|", "_"), - aDefault); - double rResult = tProperty.getDouble(aDefault); - if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) mConfig.save(); - return rResult; - } - - public String get(Object aCategory, ItemStack aStack, String aDefault) { - return get(aCategory, getStackConfigName(aStack), aDefault); - } - - public String get(Object aCategory, String aName, String aDefault) { - if (GT_Utility.isStringInvalid(aName)) return aDefault; - Property tProperty = mConfig.get( - aCategory.toString() - .replaceAll("\\|", "_"), - (aName + "_" + aDefault).replaceAll("\\|", "_"), - aDefault); - String rResult = tProperty.getString(); - if (!tProperty.wasRead() && GregTech_API.sPostloadFinished) mConfig.save(); - return rResult; - } - - @Override - public void run() { - mConfig.save(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/util/SpecialBehaviourTooltipHandler.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/util/SpecialBehaviourTooltipHandler.java index df95b7de2b..da6db942aa 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/util/SpecialBehaviourTooltipHandler.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/util/SpecialBehaviourTooltipHandler.java @@ -7,7 +7,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; public class SpecialBehaviourTooltipHandler { @@ -22,7 +22,7 @@ public class SpecialBehaviourTooltipHandler { if (event != null) { if (event.itemStack != null) { for (ItemStack aKey : mTooltipCache.keySet()) { - if (GT_Utility.areStacksEqual(aKey, event.itemStack, false)) { + if (GTUtility.areStacksEqual(aKey, event.itemStack, false)) { String s = mTooltipCache.get(aKey); if (s != null && s.length() > 0) { event.toolTip.add(EnumChatFormatting.RED + s); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/MetaGTProxy.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/MetaGTProxy.java new file mode 100644 index 0000000000..fbef4832e5 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/MetaGTProxy.java @@ -0,0 +1,96 @@ +package gtPlusPlus.xmod.gregtech.common; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import cpw.mods.fml.common.registry.LanguageRegistry; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.TAE; +import gregtech.api.util.GTLanguageManager; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.handler.AchievementHandler; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.LangUtils; +import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; +import gtPlusPlus.xmod.gregtech.common.covers.CoverManager; +import ic2.core.init.BlocksItems; +import ic2.core.init.InternalName; + +public class MetaGTProxy { + + public static AchievementHandler mAssemblyAchievements; + + public MetaGTProxy() {} + + public static void preInit() { + fixIC2FluidNames(); + CoverManager.generateCustomCovers(); + } + + public static void init() { + PollutionUtils.setPollutionFluids(); + fixIC2FluidNames(); + } + + public static void postInit() { + mAssemblyAchievements = new AchievementHandler(); + fixIC2FluidNames(); + + // Finalise TAE + TAE.finalizeTAE(); + } + + @SuppressWarnings("deprecation") + public static void fixIC2FluidNames() { + // Fix IC2 Hot Water name + try { + String aNewHeatedWaterName = "Heated Water"; + Logger.INFO("Renaming [IC2 Hotspring Water] --> [" + aNewHeatedWaterName + "]."); + LanguageRegistry.instance() + .addStringLocalization("fluidHotWater", "Heated Water"); + LanguageRegistry.instance() + .addStringLocalization("fluidHotWater", aNewHeatedWaterName); + LanguageRegistry.instance() + .addStringLocalization("ic2.fluidHotWater", aNewHeatedWaterName); + GTLanguageManager.addStringLocalization("fluidHotWater", aNewHeatedWaterName); + GTLanguageManager.addStringLocalization("ic2.fluidHotWater", aNewHeatedWaterName); + + Block b = BlocksItems.getFluidBlock(InternalName.fluidHotWater); + if (b != null) { + LanguageRegistry.addName(ItemUtils.getSimpleStack(b), aNewHeatedWaterName); + LanguageRegistry.instance() + .addStringLocalization(b.getUnlocalizedName(), aNewHeatedWaterName); + GTLanguageManager.addStringLocalization(b.getUnlocalizedName(), aNewHeatedWaterName); + } + Fluid f = BlocksItems.getFluid(InternalName.fluidHotWater); + if (f != null) { + LanguageRegistry.instance() + .addStringLocalization(f.getUnlocalizedName(), aNewHeatedWaterName); + GTLanguageManager.addStringLocalization(f.getUnlocalizedName(), aNewHeatedWaterName); + int aDam = FluidRegistry.getFluidID(f); + ItemStack s = ItemList.Display_Fluid.getWithDamage(1, aDam); + if (s != null) { + LanguageRegistry.addName(s, aNewHeatedWaterName); + } + } + + String[] aLangs = new String[] { "de_DE", "en_US", "en_GB", "en_IC", "es_AR", "es_ES", "es_MX", "es_UY", + "es_VE", "fr_CA", "fr_FR", "it_IT", "ko_KR", "pt_BR", "pt_PT", "ru_RU", "sv_SE", "tr_TR", "zh_CN", + "zh_TW", }; + String[] aLangValues = new String[] { "Erhitztes Wasser", "Heated Water", "Heated Water", "Heated Water", + "Agua caliente", "Agua caliente", "Agua caliente", "Agua caliente", "Agua caliente", "Eau chauffée", + "Eau chauffée", "Acqua riscaldata", "온수", "Água aquecida", "Água aquecida", "Вода с подогревом", + "Uppvärmt vatten", "Isıtılmış Su", "热水", "热水", }; + for (int i = 0; i < aLangs.length; i++) { + Logger + .REFLECTION("Trying to inject new lang data for " + aLangs[i] + ", using value: " + aLangValues[i]); + LangUtils.rewriteEntryForLanguageRegistry(aLangs[i], "fluidHotWater", aLangValues[i]); + LangUtils.rewriteEntryForLanguageRegistry(aLangs[i], "ic2.fluidHotWater", aLangValues[i]); + } + } catch (Throwable t) { + + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/Meta_GT_Proxy.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/Meta_GT_Proxy.java deleted file mode 100644 index c53e217560..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/Meta_GT_Proxy.java +++ /dev/null @@ -1,96 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; - -import cpw.mods.fml.common.registry.LanguageRegistry; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.TAE; -import gregtech.api.util.GT_LanguageManager; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.handler.AchievementHandler; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.LangUtils; -import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; -import gtPlusPlus.xmod.gregtech.common.covers.CoverManager; -import ic2.core.init.BlocksItems; -import ic2.core.init.InternalName; - -public class Meta_GT_Proxy { - - public static AchievementHandler mAssemblyAchievements; - - public Meta_GT_Proxy() {} - - public static void preInit() { - fixIC2FluidNames(); - CoverManager.generateCustomCovers(); - } - - public static void init() { - PollutionUtils.setPollutionFluids(); - fixIC2FluidNames(); - } - - public static void postInit() { - mAssemblyAchievements = new AchievementHandler(); - fixIC2FluidNames(); - - // Finalise TAE - TAE.finalizeTAE(); - } - - @SuppressWarnings("deprecation") - public static void fixIC2FluidNames() { - // Fix IC2 Hot Water name - try { - String aNewHeatedWaterName = "Heated Water"; - Logger.INFO("Renaming [IC2 Hotspring Water] --> [" + aNewHeatedWaterName + "]."); - LanguageRegistry.instance() - .addStringLocalization("fluidHotWater", "Heated Water"); - LanguageRegistry.instance() - .addStringLocalization("fluidHotWater", aNewHeatedWaterName); - LanguageRegistry.instance() - .addStringLocalization("ic2.fluidHotWater", aNewHeatedWaterName); - GT_LanguageManager.addStringLocalization("fluidHotWater", aNewHeatedWaterName); - GT_LanguageManager.addStringLocalization("ic2.fluidHotWater", aNewHeatedWaterName); - - Block b = BlocksItems.getFluidBlock(InternalName.fluidHotWater); - if (b != null) { - LanguageRegistry.addName(ItemUtils.getSimpleStack(b), aNewHeatedWaterName); - LanguageRegistry.instance() - .addStringLocalization(b.getUnlocalizedName(), aNewHeatedWaterName); - GT_LanguageManager.addStringLocalization(b.getUnlocalizedName(), aNewHeatedWaterName); - } - Fluid f = BlocksItems.getFluid(InternalName.fluidHotWater); - if (f != null) { - LanguageRegistry.instance() - .addStringLocalization(f.getUnlocalizedName(), aNewHeatedWaterName); - GT_LanguageManager.addStringLocalization(f.getUnlocalizedName(), aNewHeatedWaterName); - int aDam = FluidRegistry.getFluidID(f); - ItemStack s = ItemList.Display_Fluid.getWithDamage(1, aDam); - if (s != null) { - LanguageRegistry.addName(s, aNewHeatedWaterName); - } - } - - String[] aLangs = new String[] { "de_DE", "en_US", "en_GB", "en_IC", "es_AR", "es_ES", "es_MX", "es_UY", - "es_VE", "fr_CA", "fr_FR", "it_IT", "ko_KR", "pt_BR", "pt_PT", "ru_RU", "sv_SE", "tr_TR", "zh_CN", - "zh_TW", }; - String[] aLangValues = new String[] { "Erhitztes Wasser", "Heated Water", "Heated Water", "Heated Water", - "Agua caliente", "Agua caliente", "Agua caliente", "Agua caliente", "Agua caliente", "Eau chauffée", - "Eau chauffée", "Acqua riscaldata", "온수", "Água aquecida", "Água aquecida", "Вода с подогревом", - "Uppvärmt vatten", "Isıtılmış Su", "热水", "热水", }; - for (int i = 0; i < aLangs.length; i++) { - Logger - .REFLECTION("Trying to inject new lang data for " + aLangs[i] + ", using value: " + aLangValues[i]); - LangUtils.rewriteEntryForLanguageRegistry(aLangs[i], "fluidHotWater", aLangValues[i]); - LangUtils.rewriteEntryForLanguageRegistry(aLangs[i], "ic2.fluidHotWater", aLangValues[i]); - } - } catch (Throwable t) { - - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks.java index ee0d040394..ef9274af1d 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks.java @@ -8,10 +8,10 @@ import net.minecraftforge.common.util.ForgeDirection; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.TAE; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Material_Casings; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.MaterialCasings; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.objects.GTPP_CopiedBlockTexture; +import gtPlusPlus.xmod.gregtech.api.objects.GTPPCopiedBlockTexture; import gtPlusPlus.xmod.gregtech.common.blocks.textures.CasingTextureHandler; public class GregtechMetaCasingBlocks extends GregtechMetaCasingBlocksAbstract { @@ -19,32 +19,31 @@ public class GregtechMetaCasingBlocks extends GregtechMetaCasingBlocksAbstract { CasingTextureHandler TextureHandler = new CasingTextureHandler(); public GregtechMetaCasingBlocks() { - super(GregtechMetaCasingItems.class, "miscutils.blockcasings", GT_Material_Casings.INSTANCE); + super(GregtechMetaCasingItems.class, "miscutils.blockcasings", MaterialCasings.INSTANCE); for (byte i = 0; i < 16; i = (byte) (i + 1)) { if (i == 2 || i == 3 || i == 4) { continue; } - TAE.registerTexture(0, i, new GTPP_CopiedBlockTexture(this, 6, i)); + TAE.registerTexture(0, i, new GTPPCopiedBlockTexture(this, 6, i)); } - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Centrifuge Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Structural Coke Oven Casing"); - GT_LanguageManager + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Centrifuge Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Structural Coke Oven Casing"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".2.name", "Heat Resistant Coke Oven Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Heat Proof Coke Oven Casing"); // 60 - GT_LanguageManager - .addStringLocalization(this.getUnlocalizedName() + ".4.name", "Material Press Machine Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Electrolyzer Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Wire Factory Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Maceration Stack Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Matter Generation Coil"); // 65 - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Matter Fabricator Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Iron Plated Bricks"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Multitank Exterior Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", "Hastelloy-N Reactor Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", "Zeron-100 Reactor Shielding"); - GT_LanguageManager + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Heat Proof Coke Oven Casing"); // 60 + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "Material Press Machine Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Electrolyzer Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Wire Factory Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Maceration Stack Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Matter Generation Coil"); // 65 + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Matter Fabricator Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Iron Plated Bricks"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Multitank Exterior Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", "Hastelloy-N Reactor Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", "Zeron-100 Reactor Shielding"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".14.name", "Blast Smelter Heat Containment Coil "); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Blast Smelter Casing Block"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Blast Smelter Casing Block"); GregtechItemList.Casing_Centrifuge1.set(new ItemStack(this, 1, 0)); GregtechItemList.Casing_CokeOven.set(new ItemStack(this, 1, 1)); GregtechItemList.Casing_CokeOven_Coil1.set(new ItemStack(this, 1, 2)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks2.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks2.java index 9d53c281a2..eefc983e21 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks2.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks2.java @@ -10,11 +10,11 @@ import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; import gregtech.api.enums.TAE; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Material_Casings; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.MaterialCasings; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.objects.GTPP_CopiedBlockTexture; +import gtPlusPlus.xmod.gregtech.api.objects.GTPPCopiedBlockTexture; import gtPlusPlus.xmod.gregtech.common.blocks.textures.CasingTextureHandler2; import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.storage.GregtechMetaTileEntity_PowerSubStationController; @@ -53,38 +53,38 @@ public class GregtechMetaCasingBlocks2 extends GregtechMetaCasingBlocksAbstract int tier = GregtechMetaTileEntity_PowerSubStationController.getCellTier(field_150939_a, meta); if (meta == 7 && tier > 0) { long capacity = GregtechMetaTileEntity_PowerSubStationController.getCapacityFromCellTier(tier); - aList.add("Energy Storage: " + GT_Utility.formatNumbers(capacity)); + aList.add("Energy Storage: " + GTUtility.formatNumbers(capacity)); } super.addInformation(aStack, aPlayer, aList, aF3_H); } } public GregtechMetaCasingBlocks2() { - super(GregtechMetaCasingItemBlocks2.class, "gtplusplus.blockcasings.2", GT_Material_Casings.INSTANCE); + super(GregtechMetaCasingItemBlocks2.class, "gtplusplus.blockcasings.2", MaterialCasings.INSTANCE); for (byte i = 0; i < 16; i = (byte) (i + 1)) { if (i == 4 || i == 10 || i == 11 || i == 12 || i == 14) { continue; } - TAE.registerTexture(1, i, new GTPP_CopiedBlockTexture(this, 6, i)); + TAE.registerTexture(1, i, new GTPPCopiedBlockTexture(this, 6, i)); } - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Thermal Processing Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Hastelloy-N Sealant Block"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Hastelloy-X Structural Block"); - GT_LanguageManager + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Thermal Processing Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Hastelloy-N Sealant Block"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Hastelloy-X Structural Block"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".3.name", "Incoloy-DS Fluid Containment Block"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "Wash Plant Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Industrial Sieve Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Large Sieve Grate"); - GT_LanguageManager + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "Wash Plant Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Industrial Sieve Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Large Sieve Grate"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".7.name", "Vanadium Redox Power Cell (EV)"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Sub-Station External Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Cyclotron Coil"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Cyclotron Outer Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Thermal Containment Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", "Bulk Production Frame"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", "Cutting Factory Frame"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Sub-Station External Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Cyclotron Coil"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Cyclotron Outer Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Thermal Containment Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", "Bulk Production Frame"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", "Cutting Factory Frame"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Sterile Farm Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Sterile Farm Casing"); GregtechItemList.Casing_ThermalCentrifuge.set(new ItemStack(this, 1, 0)); GregtechItemList.Casing_Refinery_External.set(new ItemStack(this, 1, 1)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks3.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks3.java index 76fb077de1..0a5399efdc 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks3.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks3.java @@ -11,11 +11,11 @@ import net.minecraft.world.IBlockAccess; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.TAE; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Material_Casings; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.MaterialCasings; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.objects.GTPP_CopiedBlockTexture; +import gtPlusPlus.xmod.gregtech.api.objects.GTPPCopiedBlockTexture; import gtPlusPlus.xmod.gregtech.common.blocks.textures.CasingTextureHandler3; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.storage.GregtechMetaTileEntity_PowerSubStationController; @@ -37,46 +37,45 @@ public class GregtechMetaCasingBlocks3 extends GregtechMetaCasingBlocksAbstract int tier = GregtechMetaTileEntity_PowerSubStationController.getCellTier(field_150939_a, meta); if (tier > 0) { long capacity = GregtechMetaTileEntity_PowerSubStationController.getCapacityFromCellTier(tier); - aList.add("Energy Storage: " + GT_Utility.formatNumbers(capacity)); + aList.add("Energy Storage: " + GTUtility.formatNumbers(capacity)); } super.addInformation(aStack, aPlayer, aList, aF3_H); } } public GregtechMetaCasingBlocks3() { - super(GregtechMetaCasingItemBlocks3.class, "gtplusplus.blockcasings.3", GT_Material_Casings.INSTANCE); + super(GregtechMetaCasingItemBlocks3.class, "gtplusplus.blockcasings.3", MaterialCasings.INSTANCE); for (byte i = 0; i < 16; i = (byte) (i + 1)) { // Free up Redox casing in TAE if (i >= 4 && i <= 8) { continue; } - TAE.registerTexture(2, i, new GTPP_CopiedBlockTexture(this, 6, i)); + TAE.registerTexture(2, i, new GTPPCopiedBlockTexture(this, 6, i)); } - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Aquatic Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Inconel Reinforced Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Multi-Use Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Trinium Plated Casing"); - GT_LanguageManager + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Aquatic Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Inconel Reinforced Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Multi-Use Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Trinium Plated Casing"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".4.name", "Vanadium Redox Power Cell (IV)"); - GT_LanguageManager + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".5.name", "Vanadium Redox Power Cell (LuV)"); - GT_LanguageManager + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".6.name", "Vanadium Redox Power Cell (ZPM)"); - GT_LanguageManager + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".7.name", "Vanadium Redox Power Cell (UV)"); - GT_LanguageManager + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".8.name", "Vanadium Redox Power Cell (UHV)"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Supply Depot Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Advanced Cryogenic Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Volcanus Casing"); - GT_LanguageManager - .addStringLocalization(this.getUnlocalizedName() + ".12.name", "Fusion Machine Casing MK III"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", "Advanced Fusion Coil"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", "Unnamed"); // Can Use, don't - // change texture - // (Used for Fusion - // MK4) - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Containment Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Supply Depot Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Advanced Cryogenic Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Volcanus Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", "Fusion Machine Casing MK III"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", "Advanced Fusion Coil"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", "Unnamed"); // Can Use, don't + // change texture + // (Used for Fusion + // MK4) + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Containment Casing"); GregtechItemList.Casing_FishPond.set(new ItemStack(this, 1, 0)); GregtechItemList.Casing_Extruder.set(new ItemStack(this, 1, 1)); GregtechItemList.Casing_Multi_Use.set(new ItemStack(this, 1, 2)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks4.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks4.java index a150d7e828..d68653e73a 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks4.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks4.java @@ -9,30 +9,30 @@ import net.minecraft.util.IIcon; import gregtech.api.enums.TAE; import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Material_Casings; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.MaterialCasings; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.objects.GTPP_CopiedBlockTexture; +import gtPlusPlus.xmod.gregtech.api.objects.GTPPCopiedBlockTexture; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; public class GregtechMetaCasingBlocks4 extends GregtechMetaCasingBlocksAbstract { public GregtechMetaCasingBlocks4() { - super(GregtechMetaCasingItems.class, "gtplusplus.blockcasings.4", GT_Material_Casings.INSTANCE); + super(GregtechMetaCasingItems.class, "gtplusplus.blockcasings.4", MaterialCasings.INSTANCE); for (byte i = 0; i < 16; i = (byte) (i + 1)) { if (i == 2 || i == 4 || i == 5 || i == 6 || i == 7 || i == 8 || i == 12 || i == 13 || i == 14 || i == 15) { continue; } - TAE.registerTexture(3, i, new GTPP_CopiedBlockTexture(this, 6, i)); + TAE.registerTexture(3, i, new GTPPCopiedBlockTexture(this, 6, i)); } - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Naquadah Reactor Base"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Reactor Piping"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Naquadah Containment Chamber"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Tempered Arc Furnace Casing"); - GT_LanguageManager + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Naquadah Reactor Base"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Reactor Piping"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Naquadah Containment Chamber"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Tempered Arc Furnace Casing"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".4.name", "Quantum Force Transformer Coil Casings"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Vacuum Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Turbodyne Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Vacuum Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Turbodyne Casing"); GregtechItemList.Casing_Naq_Reactor_A.set(new ItemStack(this, 1, 0)); GregtechItemList.Casing_Naq_Reactor_B.set(new ItemStack(this, 1, 1)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java index cc573cd188..afe195d7aa 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks5.java @@ -8,10 +8,10 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.TAE; import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Material_Casings; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.MaterialCasings; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.objects.GTPP_CopiedBlockTexture; +import gtPlusPlus.xmod.gregtech.api.objects.GTPPCopiedBlockTexture; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGrinderMultiblock; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; @@ -23,37 +23,36 @@ public class GregtechMetaCasingBlocks5 extends GregtechMetaCasingBlocksAbstract private static final TexturesGrinderMultiblock mGrinderOverlayHandler = new TexturesGrinderMultiblock(); public GregtechMetaCasingBlocks5() { - super(GregtechMetaCasingItems.class, "gtplusplus.blockcasings.5", GT_Material_Casings.INSTANCE); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "IsaMill Exterior Casing"); // IsaMill - // Casing - TAE.registerTexture(0, 2, new GTPP_CopiedBlockTexture(this, 6, 0)); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "IsaMill Piping"); // IsaMill - // Pipe - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "IsaMill Gearbox"); // IsaMill - // Gearbox - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Elemental Confinement Shell"); // Duplicator + super(GregtechMetaCasingItems.class, "gtplusplus.blockcasings.5", MaterialCasings.INSTANCE); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "IsaMill Exterior Casing"); // IsaMill + // Casing + TAE.registerTexture(0, 2, new GTPPCopiedBlockTexture(this, 6, 0)); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "IsaMill Piping"); // IsaMill + // Pipe + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "IsaMill Gearbox"); // IsaMill + // Gearbox + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Elemental Confinement Shell"); // Duplicator + // Casing + TAE.registerTexture(0, 3, new GTPPCopiedBlockTexture(this, 6, 3)); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "Sparge Tower Exterior Casing"); // Sparge + // Tower // Casing - TAE.registerTexture(0, 3, new GTPP_CopiedBlockTexture(this, 6, 3)); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "Sparge Tower Exterior Casing"); // Sparge - // Tower - // Casing - TAE.registerTexture(0, 4, new GTPP_CopiedBlockTexture(this, 6, 4)); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Sturdy Printer Casing"); // Unused - TAE.registerTexture(1, 10, new GTPP_CopiedBlockTexture(this, 6, 5)); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Forge Casing"); // Forge Hammer - // Casing - TAE.registerTexture(1, 11, new GTPP_CopiedBlockTexture(this, 6, 6)); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Neutron Pulse Manipulator"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Cosmic Fabric Manipulator"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Infinity Infused Manipulator"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "SpaceTime Continuum Ripper"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Neutron Shielding Core"); - GT_LanguageManager - .addStringLocalization(this.getUnlocalizedName() + ".12.name", "Cosmic Fabric Shielding Core"); - GT_LanguageManager + TAE.registerTexture(0, 4, new GTPPCopiedBlockTexture(this, 6, 4)); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Sturdy Printer Casing"); // Unused + TAE.registerTexture(1, 10, new GTPPCopiedBlockTexture(this, 6, 5)); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Forge Casing"); // Forge Hammer + // Casing + TAE.registerTexture(1, 11, new GTPPCopiedBlockTexture(this, 6, 6)); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Neutron Pulse Manipulator"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Cosmic Fabric Manipulator"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Infinity Infused Manipulator"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "SpaceTime Continuum Ripper"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Neutron Shielding Core"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", "Cosmic Fabric Shielding Core"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".13.name", "Infinity Infused Shielding Core"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", "SpaceTime Bending Core"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Force Field Glass"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", "SpaceTime Bending Core"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Force Field Glass"); GregtechItemList.Casing_IsaMill_Casing.set(new ItemStack(this, 1, 0)); GregtechItemList.Casing_IsaMill_Pipe.set(new ItemStack(this, 1, 1)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks6.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks6.java index d257078461..c51d6e6afd 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks6.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocks6.java @@ -13,10 +13,10 @@ import net.minecraft.world.IBlockAccess; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.TAE; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Material_Casings; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.MaterialCasings; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.objects.GTPP_CopiedBlockTexture; +import gtPlusPlus.xmod.gregtech.api.objects.GTPPCopiedBlockTexture; import gtPlusPlus.xmod.gregtech.common.blocks.textures.CasingTextureHandler6; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; @@ -45,13 +45,13 @@ public class GregtechMetaCasingBlocks6 extends GregtechMetaCasingBlocksAbstract } public GregtechMetaCasingBlocks6() { - super(GregtechMetaCasingItemBlocks3.class, "gtplusplus.blockcasings.6", GT_Material_Casings.INSTANCE); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Fusion Machine Casing MK IV"); - TAE.registerTexture(3, 4, new GTPP_CopiedBlockTexture(this, 6, 0)); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Advanced Fusion Coil II"); - TAE.registerTexture(3, 5, new GTPP_CopiedBlockTexture(this, 6, 1)); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Unnamed"); - TAE.registerTexture(3, 6, new GTPP_CopiedBlockTexture(this, 6, 2)); + super(GregtechMetaCasingItemBlocks3.class, "gtplusplus.blockcasings.6", MaterialCasings.INSTANCE); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Fusion Machine Casing MK IV"); + TAE.registerTexture(3, 4, new GTPPCopiedBlockTexture(this, 6, 0)); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Advanced Fusion Coil II"); + TAE.registerTexture(3, 5, new GTPPCopiedBlockTexture(this, 6, 1)); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Unnamed"); + TAE.registerTexture(3, 6, new GTPPCopiedBlockTexture(this, 6, 2)); GregtechItemList.Casing_Fusion_External2.set(new ItemStack(this, 1, 0)); GregtechItemList.Casing_Fusion_Internal2.set(new ItemStack(this, 1, 1)); } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocksAbstract.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocksAbstract.java index 79d9e2c458..f286b4d628 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocksAbstract.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocksAbstract.java @@ -19,20 +19,20 @@ import net.minecraft.world.World; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Block_Casings_Abstract; +import gregtech.api.GregTechAPI; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.BlockCasingsAbstract; import gtPlusPlus.core.creative.AddToCreativeTab; -public abstract class GregtechMetaCasingBlocksAbstract extends GT_Block_Casings_Abstract { +public abstract class GregtechMetaCasingBlocksAbstract extends BlockCasingsAbstract { public GregtechMetaCasingBlocksAbstract(final Class aItemClass, final String aName, final Material aMaterial) { super(aItemClass, aName, aMaterial); this.setStepSound(soundTypeMetal); this.setCreativeTab(AddToCreativeTab.tabMachines); - GregTech_API.registerMachineBlock(this, -1); - GT_LanguageManager + GregTechAPI.registerMachineBlock(this, -1); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + "." + 32767 + ".name", "Any Sub Block of this"); } @@ -63,8 +63,8 @@ public abstract class GregtechMetaCasingBlocksAbstract extends GT_Block_Casings_ @Override public void onBlockAdded(final World aWorld, final int aX, final int aY, final int aZ) { - if (GregTech_API.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); } } @@ -106,8 +106,8 @@ public abstract class GregtechMetaCasingBlocksAbstract extends GT_Block_Casings_ @Override public void breakBlock(final World aWorld, final int aX, final int aY, final int aZ, final Block aBlock, final int aMetaData) { - if (GregTech_API.isMachineBlock(this, aMetaData)) { - GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); + if (GregTechAPI.isMachineBlock(this, aMetaData)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocksPipeGearbox.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocksPipeGearbox.java index ad2b11f924..32f1f127d0 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocksPipeGearbox.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaCasingBlocksPipeGearbox.java @@ -8,9 +8,9 @@ import net.minecraft.world.IBlockAccess; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Material_Casings; -import gtPlusPlus.core.material.ALLOY; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.MaterialCasings; +import gtPlusPlus.core.material.MaterialsAlloy; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; public class GregtechMetaCasingBlocksPipeGearbox extends GregtechMetaCasingBlocksAbstract { @@ -18,42 +18,41 @@ public class GregtechMetaCasingBlocksPipeGearbox extends GregtechMetaCasingBlock private static HashMap sMaterialMapping = new HashMap<>(); public GregtechMetaCasingBlocksPipeGearbox() { - super(GregtechMetaCasingItems.class, "gtplusplus.blockcasings.pipesgears", GT_Material_Casings.INSTANCE); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Eglin Steel Gear Box Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Inconel-792 Gear Box Casing"); - GT_LanguageManager - .addStringLocalization(this.getUnlocalizedName() + ".2.name", "Incoloy MA956 Gear Box Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Nitinol-60 Gear Box Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "Zeron-100 Gear Box Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Pikyonium Gear Box Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Titansteel Gear Box Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Abyssal Gear Box Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Babbit Alloy Pipe Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Inconel-690 Pipe Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Stellite Pipe Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Nitinol-60 Pipe Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", "Lafium Pipe Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", "Cinobite Pipe Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", "Titansteel Pipe Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Abyssal Pipe Casing"); + super(GregtechMetaCasingItems.class, "gtplusplus.blockcasings.pipesgears", MaterialCasings.INSTANCE); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Eglin Steel Gear Box Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Inconel-792 Gear Box Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Incoloy MA956 Gear Box Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Nitinol-60 Gear Box Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "Zeron-100 Gear Box Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Pikyonium Gear Box Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Titansteel Gear Box Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Abyssal Gear Box Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Babbit Alloy Pipe Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Inconel-690 Pipe Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Stellite Pipe Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Nitinol-60 Pipe Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".12.name", "Lafium Pipe Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", "Cinobite Pipe Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".14.name", "Titansteel Pipe Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Abyssal Pipe Casing"); int aMappingID = 0; - sMaterialMapping.put(aMappingID++, ALLOY.EGLIN_STEEL.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.INCONEL_792.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.INCOLOY_MA956.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.NITINOL_60.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.ZERON_100.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.PIKYONIUM.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.TITANSTEEL.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.ABYSSAL.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.BABBIT_ALLOY.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.INCONEL_690.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.STELLITE.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.NITINOL_60.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.LAFIUM.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.CINOBITE.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.TITANSTEEL.getRgbAsHex()); - sMaterialMapping.put(aMappingID++, ALLOY.ABYSSAL.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.EGLIN_STEEL.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.INCONEL_792.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.INCOLOY_MA956.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.NITINOL_60.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.ZERON_100.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.PIKYONIUM.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.TITANSTEEL.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.ABYSSAL.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.BABBIT_ALLOY.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.INCONEL_690.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.STELLITE.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.NITINOL_60.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.LAFIUM.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.CINOBITE.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.TITANSTEEL.getRgbAsHex()); + sMaterialMapping.put(aMappingID++, MaterialsAlloy.ABYSSAL.getRgbAsHex()); } @Override diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaItemCasingsAbstract.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaItemCasingsAbstract.java index 23d9ab5007..a432212670 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaItemCasingsAbstract.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaItemCasingsAbstract.java @@ -7,21 +7,21 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemBlock; import net.minecraft.item.ItemStack; -import gregtech.api.util.GT_LanguageManager; +import gregtech.api.util.GTLanguageManager; public abstract class GregtechMetaItemCasingsAbstract extends ItemBlock { - protected final String mCasing_Centrifuge = GT_LanguageManager + protected final String mCasing_Centrifuge = GTLanguageManager .addStringLocalization("mu.centrifugecasing", "Warning! Standing in the Centrifuge not recommended"); - protected final String mCasing_CokeOven = GT_LanguageManager + protected final String mCasing_CokeOven = GTLanguageManager .addStringLocalization("mu.cokeoven", "Sturdy and Strong"); - protected final String mCasing_CokeCoil1 = GT_LanguageManager + protected final String mCasing_CokeCoil1 = GTLanguageManager .addStringLocalization("mu.coil01tooltip", "Base Heating Capacity = 1350 Kelvin"); - protected final String mCasing_CokeCoil2 = GT_LanguageManager + protected final String mCasing_CokeCoil2 = GTLanguageManager .addStringLocalization("mu.coil02tooltip", "Base Heating Capacity = 2275 Kelvin"); - protected final String mNoMobsToolTip = GT_LanguageManager + protected final String mNoMobsToolTip = GTLanguageManager .addStringLocalization("gt.nomobspawnsonthisblock", "Mobs cannot Spawn on this Block"); - protected final String mNoTileEntityToolTip = GT_LanguageManager + protected final String mNoTileEntityToolTip = GTLanguageManager .addStringLocalization("gt.notileentityinthisblock", "This is NOT a TileEntity!"); public GregtechMetaItemCasingsAbstract(final Block par1) { diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMachineCasings.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMachineCasings.java index 473c13f3da..7c65de73bd 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMachineCasings.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMachineCasings.java @@ -11,10 +11,10 @@ import net.minecraft.util.IIcon; import gregtech.api.enums.TAE; import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Material_Casings; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.MaterialCasings; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.objects.GTPP_CopiedBlockTexture; +import gtPlusPlus.xmod.gregtech.api.objects.GTPPCopiedBlockTexture; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; public class GregtechMetaSpecialMachineCasings extends GregtechMetaCasingBlocksAbstract { @@ -43,19 +43,18 @@ public class GregtechMetaSpecialMachineCasings extends GregtechMetaCasingBlocksA } public GregtechMetaSpecialMachineCasings() { - super(SpecialCasingItemBlock.class, "gtplusplus.blockspecialcasings.2", GT_Material_Casings.INSTANCE); + super(SpecialCasingItemBlock.class, "gtplusplus.blockspecialcasings.2", MaterialCasings.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 + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Strong Bronze Machine Casing"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".1.name", "Sturdy Aluminium Machine Casing"); - GT_LanguageManager + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".2.name", "Vigorous Laurenium Machine Casing"); - TAE.registerTexture(84, new GTPP_CopiedBlockTexture(this, 6, 2)); - GT_LanguageManager - .addStringLocalization(this.getUnlocalizedName() + ".3.name", "Rugged Botmium Machine Casing"); + TAE.registerTexture(84, new GTPPCopiedBlockTexture(this, 6, 2)); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Rugged Botmium Machine Casing"); GregtechItemList.Casing_Machine_Custom_1.set(new ItemStack(this, 1, 0)); GregtechItemList.Casing_Machine_Custom_2.set(new ItemStack(this, 1, 1)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings.java index 1d7c853e71..dba95455c8 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings.java @@ -13,10 +13,10 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.TAE; import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Material_Casings; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.MaterialCasings; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.objects.GTPP_CopiedBlockTexture; +import gtPlusPlus.xmod.gregtech.api.objects.GTPPCopiedBlockTexture; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; import gtPlusPlus.xmod.gregtech.common.blocks.textures.turbine.LargeTurbineTextureHandler; @@ -39,32 +39,29 @@ public class GregtechMetaSpecialMultiCasings extends GregtechMetaCasingBlocksAbs } public GregtechMetaSpecialMultiCasings() { - super(SpecialCasingItemBlock.class, "gtplusplus.blockspecialcasings.1", GT_Material_Casings.INSTANCE); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Turbine Shaft"); - GT_LanguageManager + super(SpecialCasingItemBlock.class, "gtplusplus.blockspecialcasings.1", MaterialCasings.INSTANCE); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Turbine Shaft"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".1.name", "Reinforced Steam Turbine Casing"); - GT_LanguageManager + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".2.name", "Reinforced HP Steam Turbine Casing"); - GT_LanguageManager - .addStringLocalization(this.getUnlocalizedName() + ".3.name", "Reinforced Gas Turbine Casing"); - GT_LanguageManager + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Reinforced Gas Turbine Casing"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".4.name", "Reinforced Plasma Turbine Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Tesla Containment Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Structural Solar Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Salt Containment Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Thermally Insulated Casing"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Flotation Cell Casings"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Reinforced Engine Casing"); - GT_LanguageManager - .addStringLocalization(this.getUnlocalizedName() + ".11.name", "Molecular Containment Casing"); - GT_LanguageManager + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Tesla Containment Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Structural Solar Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Salt Containment Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Thermally Insulated Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Flotation Cell Casings"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".10.name", "Reinforced Engine Casing"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".11.name", "Molecular Containment Casing"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".12.name", "High Voltage Current Capacitor"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", "Particle Containment Casing"); - GT_LanguageManager + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".13.name", "Particle Containment Casing"); + GTLanguageManager .addStringLocalization(this.getUnlocalizedName() + ".14.name", "Reinforced Heat Exchanger Casing"); - GT_LanguageManager - .addStringLocalization(this.getUnlocalizedName() + ".15.name", "Reinforced SC Turbine Casing"); - TAE.registerTexture(1, 12, new GTPP_CopiedBlockTexture(this, 6, 14)); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".15.name", "Reinforced SC Turbine Casing"); + TAE.registerTexture(1, 12, new GTPPCopiedBlockTexture(this, 6, 14)); GregtechItemList.Casing_Turbine_Shaft.set(new ItemStack(this, 1, 0)); GregtechItemList.Casing_Turbine_LP.set(new ItemStack(this, 1, 1)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings2.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings2.java index 9a2912c2c5..4f34811289 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings2.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaSpecialMultiCasings2.java @@ -13,8 +13,8 @@ import net.minecraft.world.IBlockAccess; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Material_Casings; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.MaterialCasings; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; @@ -47,19 +47,19 @@ public class GregtechMetaSpecialMultiCasings2 extends GregtechMetaCasingBlocksAb } public GregtechMetaSpecialMultiCasings2() { - super(SpecialCasingItemBlock.class, "gtplusplus.blockspecialcasings.3", GT_Material_Casings.INSTANCE); + super(SpecialCasingItemBlock.class, "gtplusplus.blockspecialcasings.3", MaterialCasings.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", "Resonance Chamber I"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Resonance Chamber II"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Resonance Chamber III"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Resonance Chamber IV"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "Modulator I"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Modulator II"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Modulator III"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Modulator IV"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Resonance Chamber I"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Resonance Chamber II"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Resonance Chamber III"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Resonance Chamber IV"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "Modulator I"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Modulator II"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Modulator III"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Modulator IV"); GregtechItemList.ResonanceChamber_I.set(new ItemStack(this, 1, 0)); GregtechItemList.ResonanceChamber_II.set(new ItemStack(this, 1, 1)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaTieredCasingBlocks1.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaTieredCasingBlocks1.java index 7ddab1c471..50780c5809 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaTieredCasingBlocks1.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/GregtechMetaTieredCasingBlocks1.java @@ -9,10 +9,10 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.IIcon; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Textures; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Material_Casings; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.MaterialCasings; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; @@ -35,24 +35,24 @@ public class GregtechMetaTieredCasingBlocks1 extends GregtechMetaCasingBlocksAbs 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]); + aList.add("Tier: " + GTValues.VN[aMeta]); } super.addInformation(aStack, aPlayer, aList, aF3_H); } } public GregtechMetaTieredCasingBlocks1() { - super(TieredCasingItemBlock.class, "gtplusplus.blocktieredcasings.1", GT_Material_Casings.INSTANCE); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Integral Encasement I"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Integral Encasement II"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Integral Encasement III"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Integral Encasement IV"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "Integral Encasement V"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Integral Framework I"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Integral Framework II"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Integral Framework III"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Integral Framework IV"); - GT_LanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Integral Framework V"); + super(TieredCasingItemBlock.class, "gtplusplus.blocktieredcasings.1", MaterialCasings.INSTANCE); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".0.name", "Integral Encasement I"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".1.name", "Integral Encasement II"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".2.name", "Integral Encasement III"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".3.name", "Integral Encasement IV"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".4.name", "Integral Encasement V"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".5.name", "Integral Framework I"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".6.name", "Integral Framework II"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".7.name", "Integral Framework III"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".8.name", "Integral Framework IV"); + GTLanguageManager.addStringLocalization(this.getUnlocalizedName() + ".9.name", "Integral Framework V"); GregtechItemList.GTPP_Casing_ULV.set(new ItemStack(this, 1, 0)); GregtechItemList.GTPP_Casing_LV.set(new ItemStack(this, 1, 1)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/fluid/GregtechFluidHandler.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/fluid/GregtechFluidHandler.java index 30658ab6ef..0f1c39d28e 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/fluid/GregtechFluidHandler.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/fluid/GregtechFluidHandler.java @@ -4,7 +4,7 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.fluids.FluidRegistry; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.FluidUtils; @@ -28,7 +28,7 @@ public class GregtechFluidHandler { GT_Materials.Cryotheum, 4, 5, - GT_OreDictUnificator.get(OrePrefixes.cell, GT_Materials.Cryotheum, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, GT_Materials.Cryotheum, 1L), ItemUtils.getEmptyCell(), 1000); } @@ -39,7 +39,7 @@ public class GregtechFluidHandler { GT_Materials.Pyrotheum, 4, 4000, - GT_OreDictUnificator.get(OrePrefixes.cell, GT_Materials.Pyrotheum, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, GT_Materials.Pyrotheum, 1L), ItemUtils.getEmptyCell(), 1000); } @@ -50,7 +50,7 @@ public class GregtechFluidHandler { GT_Materials.Ender, 4, 4000, - GT_OreDictUnificator.get(OrePrefixes.cell, GT_Materials.Ender, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, GT_Materials.Ender, 1L), ItemUtils.getEmptyCell(), 1000); } @@ -62,7 +62,7 @@ public class GregtechFluidHandler { GT_Materials.HydrofluoricAcid, 1, 120, - GT_OreDictUnificator.get(OrePrefixes.cell, GT_Materials.HydrofluoricAcid, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, GT_Materials.HydrofluoricAcid, 1L), ItemUtils.getEmptyCell(), 1000, false); @@ -80,7 +80,7 @@ public class GregtechFluidHandler { GT_Materials.SulfurousAcid, 4, 75, - GT_OreDictUnificator.get(OrePrefixes.cell, GT_Materials.SulfurousAcid, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, GT_Materials.SulfurousAcid, 1L), ItemUtils.getEmptyCell(), 1000, false); @@ -92,7 +92,7 @@ public class GregtechFluidHandler { GT_Materials.SulfuricApatite, 4, 500, - GT_OreDictUnificator.get(OrePrefixes.cell, GT_Materials.SulfuricApatite, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, GT_Materials.SulfuricApatite, 1L), ItemUtils.getEmptyCell(), 1000, false); @@ -106,7 +106,7 @@ public class GregtechFluidHandler { GT_Materials.HydrogenChloride, 4, 75, - GT_OreDictUnificator.get(OrePrefixes.cell, GT_Materials.HydrogenChloride, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, GT_Materials.HydrogenChloride, 1L), ItemUtils.getEmptyCell(), 1000, false); @@ -119,7 +119,7 @@ public class GregtechFluidHandler { GT_Materials.SulfuricLithium, 4, 280, - GT_OreDictUnificator.get(OrePrefixes.cell, GT_Materials.SulfuricLithium, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, GT_Materials.SulfuricLithium, 1L), ItemUtils.getEmptyCell(), 1000, false); @@ -131,7 +131,7 @@ public class GregtechFluidHandler { GT_Materials.LithiumHydroxide, 4, 500, - GT_OreDictUnificator.get(OrePrefixes.cell, GT_Materials.LithiumHydroxide, 1L), + GTOreDictUnificator.get(OrePrefixes.cell, GT_Materials.LithiumHydroxide, 1L), ItemUtils.getEmptyCell(), 1000, false); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesCentrifugeMultiblock.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesCentrifugeMultiblock.java index 058d2a7f1e..f4d3d22aba 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesCentrifugeMultiblock.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesCentrifugeMultiblock.java @@ -9,7 +9,7 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaCasingBlocks; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialCentrifuge; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialCentrifuge; public class TexturesCentrifugeMultiblock { @@ -67,8 +67,8 @@ public class TexturesCentrifugeMultiblock { ForgeDirection side) { TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (!(tTileEntity instanceof IGregTechTileEntity tTile)) return 0; - if (tTile.getMetaTileEntity() instanceof GregtechMetaTileEntity_IndustrialCentrifuge - && tTile.getFrontFacing() == side) return tTile.isActive() ? 1 : 2; + if (tTile.getMetaTileEntity() instanceof MTEIndustrialCentrifuge && tTile.getFrontFacing() == side) + return tTile.isActive() ? 1 : 2; return 0; } @@ -133,8 +133,8 @@ public class TexturesCentrifugeMultiblock { public boolean isUsingAnimatedTexture(IMetaTileEntity aMetaTileEntity) { if (aMetaTileEntity != null) { - if (aMetaTileEntity instanceof GregtechMetaTileEntity_IndustrialCentrifuge) { - return ((GregtechMetaTileEntity_IndustrialCentrifuge) aMetaTileEntity).usingAnimations(); + if (aMetaTileEntity instanceof MTEIndustrialCentrifuge) { + return ((MTEIndustrialCentrifuge) aMetaTileEntity).usingAnimations(); } } return false; diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGrinderMultiblock.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGrinderMultiblock.java index e7d09bd308..128e9c95d7 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGrinderMultiblock.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGrinderMultiblock.java @@ -9,7 +9,7 @@ import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaCasingBlocks5; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IsaMill; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIsaMill; public class TexturesGrinderMultiblock { @@ -61,7 +61,7 @@ public class TexturesGrinderMultiblock { private static int isIsaControllerWithSide(IBlockAccess aWorld, int aX, int aY, int aZ, ForgeDirection side) { TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (!(tTileEntity instanceof IGregTechTileEntity tTile)) return 0; - if (tTile.getMetaTileEntity() instanceof GregtechMetaTileEntity_IsaMill && tTile.getFrontFacing() == side) + if (tTile.getMetaTileEntity() instanceof MTEIsaMill && tTile.getFrontFacing() == side) return tTile.isActive() ? 1 : 2; return 0; } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java index 7b58e35a68..57d01bcc5f 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtBlock.java @@ -6,17 +6,17 @@ import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; -import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.objects.GTRenderedTexture; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; public class TexturesGtBlock { - private static final boolean mAnimated = CORE.ConfigSwitches.enableAnimatedTextures; + private static final boolean mAnimated = GTPPCore.ConfigSwitches.enableAnimatedTextures; private static final AutoMap mCustomiconMap = new AutoMap<>(); /* @@ -38,7 +38,7 @@ public class TexturesGtBlock { this.mModID = aModID; mCustomiconMap.put(this); Logger.WARNING("Constructing a Custom Texture. " + this.mIconName); - GregTech_API.sGTBlockIconload.add(this); + GregTechAPI.sGTBlockIconload.add(this); } @Override @@ -53,7 +53,7 @@ public class TexturesGtBlock { @Override public void run() { - this.mIcon = GregTech_API.sBlockIcons.registerIcon(this.mModID + ":" + this.mIconName); + this.mIcon = GregTechAPI.sBlockIcons.registerIcon(this.mModID + ":" + this.mIconName); Logger.WARNING( "FIND ME _ Processing texture: " + this.getTextureFile() .getResourcePath()); @@ -565,16 +565,16 @@ public class TexturesGtBlock { public static final CustomIcon TEXTURE_TECH_PANEL_H = new CustomIcon("metro/TEXTURE_TECH_PANEL_H"); public static ITexture[] OVERLAYS_ENERGY_OUT_MULTI_BUFFER = new ITexture[] { - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 220, 220, 220, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 220, 220, 220, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 255, 100, 0, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 255, 255, 30, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 128, 128, 128, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 240, 240, 245, 0 }), - new GT_RenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 240, 240, 245, 0 }) }; + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 220, 220, 220, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 220, 220, 220, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 255, 100, 0, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 255, 255, 30, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 128, 128, 128, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI_BUFFER, new short[] { 240, 240, 245, 0 }) }; public static IIconContainer[] CONNECTED_FUSION_HULLS = new IIconContainer[] { TEXTURE_CASING_FUSION_COIL_II_1, TEXTURE_CASING_FUSION_COIL_II_2, TEXTURE_CASING_FUSION_COIL_II_3, TEXTURE_CASING_FUSION_COIL_II_4, diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtTools.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtTools.java index a9f74cd75d..bf16555e4f 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtTools.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/TexturesGtTools.java @@ -6,7 +6,7 @@ import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.interfaces.IIconContainer; import gtPlusPlus.api.objects.Logger; @@ -23,7 +23,7 @@ public final class TexturesGtTools { public CustomIcon(final String aIconName) { this.mIconName = aIconName; Logger.INFO("Constructing a Custom Texture. " + this.mIconName); - GregTech_API.sGTItemIconload.add(this); + GregTechAPI.sGTItemIconload.add(this); } @Override @@ -38,9 +38,9 @@ public final class TexturesGtTools { @Override public void run() { - this.mIcon = GregTech_API.sItemIcons.registerIcon(GTPlusPlus.ID + ":" + this.mIconName); + this.mIcon = GregTechAPI.sItemIcons.registerIcon(GTPlusPlus.ID + ":" + this.mIconName); // Utils.LOG_INFO("Registering a Custom Texture. "+mIcon.g); - this.mOverlay = GregTech_API.sItemIcons.registerIcon(GTPlusPlus.ID + ":" + this.mIconName + "_OVERLAY"); + this.mOverlay = GregTechAPI.sItemIcons.registerIcon(GTPlusPlus.ID + ":" + this.mIconName + "_OVERLAY"); } @Override diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/turbine/LargeTurbineTextureHandler.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/turbine/LargeTurbineTextureHandler.java index c983044319..dea287fde6 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/turbine/LargeTurbineTextureHandler.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/blocks/textures/turbine/LargeTurbineTextureHandler.java @@ -98,7 +98,7 @@ import net.minecraftforge.common.util.ForgeDirection; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Turbine; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchTurbine; import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaSpecialMultiCasings; public class LargeTurbineTextureHandler { @@ -206,7 +206,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[0]; } @@ -217,7 +217,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[3]; } @@ -228,7 +228,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[6]; } @@ -238,7 +238,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[1]; } @@ -248,7 +248,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[7]; } @@ -259,7 +259,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[8]; } @@ -270,7 +270,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[5]; } @@ -281,7 +281,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[2]; } @@ -295,7 +295,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[0]; } @@ -306,7 +306,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[3]; } @@ -317,7 +317,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[6]; } @@ -327,7 +327,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[1]; } @@ -337,7 +337,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[7]; } @@ -348,7 +348,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[8]; } @@ -359,7 +359,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[5]; } @@ -370,7 +370,7 @@ public class LargeTurbineTextureHandler { && ((tTileEntity instanceof IGregTechTileEntity)) && (((IGregTechTileEntity) tTileEntity).getFrontFacing() == side) && (null != (tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity())) - && ((tMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine))) { + && ((tMetaTileEntity instanceof MTEHatchTurbine))) { if (isUsingAnimatedTexture(tTileEntity)) { return mGetCurrentTextureSet_ACTIVE[2]; } @@ -388,8 +388,8 @@ public class LargeTurbineTextureHandler { aTile = (IGregTechTileEntity) tTileEntity; if (aTile != null) { final IMetaTileEntity aMetaTileEntity = aTile.getMetaTileEntity(); - if (aMetaTileEntity != null && aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine) { - aVal = ((GT_MetaTileEntity_Hatch_Turbine) aMetaTileEntity).getBaseMetaTileEntity() + if (aMetaTileEntity != null && aMetaTileEntity instanceof MTEHatchTurbine) { + aVal = ((MTEHatchTurbine) aMetaTileEntity).getBaseMetaTileEntity() .isActive(); // Logger.INFO("Returning "+aVal+" as Rotor Assembly controller status"); } @@ -398,11 +398,11 @@ public class LargeTurbineTextureHandler { return aVal; } - public static GT_MetaTileEntity_Hatch_Turbine isTurbineHatch(final IGregTechTileEntity aTileEntity) { + public static MTEHatchTurbine isTurbineHatch(final IGregTechTileEntity aTileEntity) { if (aTileEntity != null) { final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity != null && aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine) { - return (GT_MetaTileEntity_Hatch_Turbine) aMetaTileEntity; + if (aMetaTileEntity != null && aMetaTileEntity instanceof MTEHatchTurbine) { + return (MTEHatchTurbine) aMetaTileEntity; } } return null; diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/CoverOverflow.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/CoverOverflow.java new file mode 100644 index 0000000000..f93b371aa3 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/CoverOverflow.java @@ -0,0 +1,198 @@ +package gtPlusPlus.xmod.gregtech.common.covers; + +import java.util.concurrent.atomic.AtomicBoolean; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerNumericWidget; + +public class CoverOverflow extends CoverBehavior { + + public final int mTransferRate; + public final int mInitialTransferRate; + public final int mMaxTransferRate; + + public CoverOverflow(int aTransferRate) { + this.mTransferRate = aTransferRate * 1000 / 10; + this.mInitialTransferRate = aTransferRate; + this.mMaxTransferRate = aTransferRate * 1000; + } + + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if (aCoverVariable == 0) { + return aCoverVariable; + } + if ((aTileEntity instanceof IFluidHandler)) { + // Logger.INFO("Trying to Void via Overflow."); + IFluidHandler tTank1; + ForgeDirection directionFrom; + directionFrom = ForgeDirection.UNKNOWN; + tTank1 = (IFluidHandler) aTileEntity; + if (tTank1 != null) { + FluidStack aTankStack = tTank1.getTankInfo(directionFrom)[0].fluid; + if (aTankStack != null) { + // Logger.INFO("Found Fluid inside self - "+aTankStack.getLocalizedName()+", overflow point set at + // "+aCoverVariable+"L and we have "+aTankStack.amount+"L inside."); + if (aTankStack.amount > aCoverVariable) { + int aAmountToDrain = aTankStack.amount - aCoverVariable; + // Logger.INFO("There is "+aAmountToDrain+" more fluid in the tank than we would like."); + if (aAmountToDrain > 0) { + FluidStack tLiquid = tTank1.drain(directionFrom, Math.abs(aAmountToDrain), true); + if (tLiquid != null) { + // Logger.INFO("Drained "+aAmountToDrain+"L."); + } + } + } + } else { + // Logger.INFO("Could not simulate drain on self."); + } + } + } + return aCoverVariable; + } + + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (GTUtility.getClickedFacingCoords(side, aX, aY, aZ)[0] >= 0.5F) { + aCoverVariable += (mMaxTransferRate * (aPlayer.isSneaking() ? 0.1f : 0.01f)); + } else { + aCoverVariable -= (mMaxTransferRate * (aPlayer.isSneaking() ? 0.1f : 0.01f)); + } + if (aCoverVariable > mMaxTransferRate) { + aCoverVariable = mInitialTransferRate; + } + if (aCoverVariable <= 0) { + aCoverVariable = mMaxTransferRate; + } + GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("322", "Overflow point: ") + aCoverVariable + GTUtility.trans("323", "L")); + return aCoverVariable; + } + + public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + boolean aShift = aPlayer.isSneaking(); + int aAmount = aShift ? 128 : 8; + if (GTUtility.getClickedFacingCoords(side, aX, aY, aZ)[0] >= 0.5F) { + aCoverVariable += aAmount; + } else { + aCoverVariable -= aAmount; + } + if (aCoverVariable > mMaxTransferRate) { + aCoverVariable = mInitialTransferRate; + } + if (aCoverVariable <= 0) { + aCoverVariable = mMaxTransferRate; + } + GTUtility.sendChatToPlayer( + aPlayer, + GTUtility.trans("322", "Overflow point: ") + aCoverVariable + GTUtility.trans("323", "L")); + aTileEntity.setCoverDataAtSide(side, new ISerializableObject.LegacyCoverData(aCoverVariable)); + return true; + } + + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return false; + } + + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 5; + } + + // GUI + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + return new OverflowUIFactory(buildContext).createWindow(); + } + + private class OverflowUIFactory extends UIFactory { + + private static final int startX = 10; + private static final int startY = 25; + private static final int spaceX = 18; + private static final int spaceY = 18; + + public OverflowUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + AtomicBoolean warn = new AtomicBoolean(false); + + builder + .widget( + new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, CoverOverflow.this) + .addFollower( + new CoverDataFollowerNumericWidget<>(), + coverData -> (double) convert(coverData), + (coverData, state) -> new ISerializableObject.LegacyCoverData(state.intValue()), + widget -> widget.setBounds(0, mMaxTransferRate) + .setScrollValues(1000, 144, 100000) + .setFocusOnGuiOpen(true) + .setPos(startX + spaceX * 0, startY + spaceY * 1 + 8) + .setSize(spaceX * 4 - 3, 12))) + .widget( + new TextWidget(GTUtility.trans("322", "Overflow point: ")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(startX, 4 + startY + spaceY * 0 + 8)); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/CoverToggleVisual.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/CoverToggleVisual.java new file mode 100644 index 0000000000..2ba532d11f --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/CoverToggleVisual.java @@ -0,0 +1,184 @@ +package gtPlusPlus.xmod.gregtech.common.covers; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.objects.XSTR; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.minecraft.BlockPos; +import gtPlusPlus.core.util.minecraft.PlayerUtils; + +public class CoverToggleVisual extends CoverBehavior { + + private static final Map sConnectionStateForEntityMap = new ConcurrentHashMap<>(); + private static final Map sPrefixMap = new ConcurrentHashMap<>(); + private static final int VALUE_OFF = 0; + private static final int VALUE_ON = 1; + + public static String generateUniqueKey(ForgeDirection side, ICoverable aEntity) { + try { + BlockPos aPos = new BlockPos( + aEntity.getIGregTechTileEntity(aEntity.getXCoord(), aEntity.getYCoord(), aEntity.getZCoord())); + + String s = aEntity.getInventoryName() + "." + aPos.getUniqueIdentifier() + side.name(); + return s; + } catch (Throwable t) {} + XSTR x = new XSTR(); + return "ERROR." + x.getSeed() + x.hashCode() + x.nextDouble() + ".ID"; + } + + public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + PlayerUtils + .messagePlayer(aPlayer, GTUtility.trans("756", "Connectable: ") + getConnectionState(aCoverVariable)); + return super.onCoverRightclick(side, aCoverID, aCoverVariable, aTileEntity, aPlayer, aX, aY, aZ); + } + + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + return super.onCoverScrewdriverclick(side, aCoverID, aCoverVariable, aTileEntity, aPlayer, aX, aY, aZ); + } + + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return getConnectionState(aCoverVariable); + } + + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return getConnectionState(aCoverVariable); + } + + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return getConnectionState(aCoverVariable); + } + + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return getConnectionState(aCoverVariable); + } + + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return getConnectionState(aCoverVariable); + } + + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return getConnectionState(aCoverVariable); + } + + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 1; + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + try { + String aKey = generateUniqueKey(side, aTileEntity); + Integer b = sConnectionStateForEntityMap.get(aKey); + // Logger.INFO("Val: "+aCoverVariable); + if (b != null && aCoverVariable != b) { + aCoverVariable = b; + } + if (b == null) { + b = aCoverVariable; + sConnectionStateForEntityMap.put(aKey, b); + trySetState(side, b == VALUE_ON ? VALUE_ON : VALUE_OFF, aTileEntity); + } + } catch (Throwable t) { + + } + return aCoverVariable; + } + + @Override + public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return getConnectionState(aCoverVariable); + } + + @Override + public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return getConnectionState(aCoverVariable); + } + + @Override + public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return super.alwaysLookConnected(side, aCoverID, aCoverVariable, aTileEntity); + } + + @Override + public byte getRedstoneInput(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity) { + if (!getConnectionState(aCoverVariable)) { + return 0; + } + return super.getRedstoneInput(side, aInputRedstone, aCoverID, aCoverVariable, aTileEntity); + } + + @Override + public void placeCover(ForgeDirection side, ItemStack aCover, ICoverable aTileEntity) { + String aKey = generateUniqueKey(side, aTileEntity); + boolean state = getCoverConnections(aCover); + sPrefixMap.put(aKey, aCover.getUnlocalizedName()); + Logger.INFO("Mapping key " + aKey + " to " + state); + sConnectionStateForEntityMap.put(aKey, state ? VALUE_ON : VALUE_OFF); + Logger.INFO("Key Value: " + (state ? VALUE_ON : VALUE_OFF)); + // Try set cover state directly + // trySetState(aSide, state ? VALUE_ON : VALUE_OFF, aTileEntity); + super.placeCover(side, aCover, aTileEntity); + } + + @Override + public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + boolean aForced) { + String aKey = generateUniqueKey(side, aTileEntity); + sConnectionStateForEntityMap.remove(aKey); + // Logger.INFO("Unmapping key "+aKey+"."); + return true; + } + + public static boolean getConnectionState(int aCoverVar) { + return aCoverVar == VALUE_ON; + } + + private static void trySetState(ForgeDirection side, int aState, ICoverable aTile) { + // Try set cover state directly + if (aTile instanceof IGregTechTileEntity gTileEntity) { + gTileEntity.setCoverDataAtSide(side, new ISerializableObject.LegacyCoverData(aState)); + } + } + + public static boolean getConnectionState(ForgeDirection side, ICoverable aTile) { + String aKey = generateUniqueKey(side, aTile); + return getConnectionState(aKey); + } + + public static boolean getConnectionState(String aKey) { + Integer b = sConnectionStateForEntityMap.get(aKey); + // Logger.INFO("Get State: "+b+" | "+aKey); + return b != null ? b == VALUE_ON : false; + } + + public static final boolean getCoverConnections(final ItemStack aStack) { + NBTTagCompound aNBT = aStack.getTagCompound(); + if (aNBT != null) { + aNBT = aNBT.getCompoundTag("CustomCoverMeta"); + if (aNBT != null) { + return aNBT.getBoolean("AllowConnections"); + } + } + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_Overflow.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_Overflow.java deleted file mode 100644 index a3341ea077..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_Overflow.java +++ /dev/null @@ -1,198 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.covers; - -import java.util.concurrent.atomic.AtomicBoolean; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.IFluidHandler; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.gui.modularui.GT_CoverUIBuildContext; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; -import gregtech.common.gui.modularui.widget.CoverDataFollower_NumericWidget; - -public class GTPP_Cover_Overflow extends GT_CoverBehavior { - - public final int mTransferRate; - public final int mInitialTransferRate; - public final int mMaxTransferRate; - - public GTPP_Cover_Overflow(int aTransferRate) { - this.mTransferRate = aTransferRate * 1000 / 10; - this.mInitialTransferRate = aTransferRate; - this.mMaxTransferRate = aTransferRate * 1000; - } - - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - if (aCoverVariable == 0) { - return aCoverVariable; - } - if ((aTileEntity instanceof IFluidHandler)) { - // Logger.INFO("Trying to Void via Overflow."); - IFluidHandler tTank1; - ForgeDirection directionFrom; - directionFrom = ForgeDirection.UNKNOWN; - tTank1 = (IFluidHandler) aTileEntity; - if (tTank1 != null) { - FluidStack aTankStack = tTank1.getTankInfo(directionFrom)[0].fluid; - if (aTankStack != null) { - // Logger.INFO("Found Fluid inside self - "+aTankStack.getLocalizedName()+", overflow point set at - // "+aCoverVariable+"L and we have "+aTankStack.amount+"L inside."); - if (aTankStack.amount > aCoverVariable) { - int aAmountToDrain = aTankStack.amount - aCoverVariable; - // Logger.INFO("There is "+aAmountToDrain+" more fluid in the tank than we would like."); - if (aAmountToDrain > 0) { - FluidStack tLiquid = tTank1.drain(directionFrom, Math.abs(aAmountToDrain), true); - if (tLiquid != null) { - // Logger.INFO("Drained "+aAmountToDrain+"L."); - } - } - } - } else { - // Logger.INFO("Could not simulate drain on self."); - } - } - } - return aCoverVariable; - } - - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (GT_Utility.getClickedFacingCoords(side, aX, aY, aZ)[0] >= 0.5F) { - aCoverVariable += (mMaxTransferRate * (aPlayer.isSneaking() ? 0.1f : 0.01f)); - } else { - aCoverVariable -= (mMaxTransferRate * (aPlayer.isSneaking() ? 0.1f : 0.01f)); - } - if (aCoverVariable > mMaxTransferRate) { - aCoverVariable = mInitialTransferRate; - } - if (aCoverVariable <= 0) { - aCoverVariable = mMaxTransferRate; - } - GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("322", "Overflow point: ") + aCoverVariable + GT_Utility.trans("323", "L")); - return aCoverVariable; - } - - public boolean onCoverRightclick(ForgeDirection side, 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(side, aX, aY, aZ)[0] >= 0.5F) { - aCoverVariable += aAmount; - } else { - aCoverVariable -= aAmount; - } - if (aCoverVariable > mMaxTransferRate) { - aCoverVariable = mInitialTransferRate; - } - if (aCoverVariable <= 0) { - aCoverVariable = mMaxTransferRate; - } - GT_Utility.sendChatToPlayer( - aPlayer, - GT_Utility.trans("322", "Overflow point: ") + aCoverVariable + GT_Utility.trans("323", "L")); - aTileEntity.setCoverDataAtSide(side, new ISerializableObject.LegacyCoverData(aCoverVariable)); - return true; - } - - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return true; - } - - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return false; - } - - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return true; - } - - public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return true; - } - - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 5; - } - - // GUI - - @Override - public boolean hasCoverGUI() { - return true; - } - - @Override - public ModularWindow createWindow(GT_CoverUIBuildContext buildContext) { - return new OverflowUIFactory(buildContext).createWindow(); - } - - private class OverflowUIFactory extends UIFactory { - - private static final int startX = 10; - private static final int startY = 25; - private static final int spaceX = 18; - private static final int spaceY = 18; - - public OverflowUIFactory(GT_CoverUIBuildContext buildContext) { - super(buildContext); - } - - @SuppressWarnings("PointlessArithmeticExpression") - @Override - protected void addUIWidgets(ModularWindow.Builder builder) { - AtomicBoolean warn = new AtomicBoolean(false); - - builder - .widget( - new CoverDataControllerWidget<>(this::getCoverData, this::setCoverData, GTPP_Cover_Overflow.this) - .addFollower( - new CoverDataFollower_NumericWidget<>(), - coverData -> (double) convert(coverData), - (coverData, state) -> new ISerializableObject.LegacyCoverData(state.intValue()), - widget -> widget.setBounds(0, mMaxTransferRate) - .setScrollValues(1000, 144, 100000) - .setFocusOnGuiOpen(true) - .setPos(startX + spaceX * 0, startY + spaceY * 1 + 8) - .setSize(spaceX * 4 - 3, 12))) - .widget( - new TextWidget(GT_Utility.trans("322", "Overflow point: ")).setDefaultColor(COLOR_TEXT_GRAY.get()) - .setPos(startX, 4 + startY + spaceY * 0 + 8)); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_ToggleVisual.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_ToggleVisual.java deleted file mode 100644 index 42ab793c9c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/covers/GTPP_Cover_ToggleVisual.java +++ /dev/null @@ -1,184 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.covers; - -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; - -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.objects.XSTR; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.minecraft.BlockPos; -import gtPlusPlus.core.util.minecraft.PlayerUtils; - -public class GTPP_Cover_ToggleVisual extends GT_CoverBehavior { - - private static final Map sConnectionStateForEntityMap = new ConcurrentHashMap<>(); - private static final Map sPrefixMap = new ConcurrentHashMap<>(); - private static final int VALUE_OFF = 0; - private static final int VALUE_ON = 1; - - public static String generateUniqueKey(ForgeDirection side, ICoverable aEntity) { - try { - BlockPos aPos = new BlockPos( - aEntity.getIGregTechTileEntity(aEntity.getXCoord(), aEntity.getYCoord(), aEntity.getZCoord())); - - String s = aEntity.getInventoryName() + "." + aPos.getUniqueIdentifier() + side.name(); - return s; - } catch (Throwable t) {} - XSTR x = new XSTR(); - return "ERROR." + x.getSeed() + x.hashCode() + x.nextDouble() + ".ID"; - } - - public boolean onCoverRightclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - PlayerUtils - .messagePlayer(aPlayer, GT_Utility.trans("756", "Connectable: ") + getConnectionState(aCoverVariable)); - return super.onCoverRightclick(side, aCoverID, aCoverVariable, aTileEntity, aPlayer, aX, aY, aZ); - } - - public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - EntityPlayer aPlayer, float aX, float aY, float aZ) { - return super.onCoverScrewdriverclick(side, aCoverID, aCoverVariable, aTileEntity, aPlayer, aX, aY, aZ); - } - - public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return getConnectionState(aCoverVariable); - } - - public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return getConnectionState(aCoverVariable); - } - - public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return getConnectionState(aCoverVariable); - } - - public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, - ICoverable aTileEntity) { - return getConnectionState(aCoverVariable); - } - - public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return getConnectionState(aCoverVariable); - } - - public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, - ICoverable aTileEntity) { - return getConnectionState(aCoverVariable); - } - - public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return 1; - } - - @Override - public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity, long aTimer) { - try { - String aKey = generateUniqueKey(side, aTileEntity); - Integer b = sConnectionStateForEntityMap.get(aKey); - // Logger.INFO("Val: "+aCoverVariable); - if (b != null && aCoverVariable != b) { - aCoverVariable = b; - } - if (b == null) { - b = aCoverVariable; - sConnectionStateForEntityMap.put(aKey, b); - trySetState(side, b == VALUE_ON ? VALUE_ON : VALUE_OFF, aTileEntity); - } - } catch (Throwable t) { - - } - return aCoverVariable; - } - - @Override - public boolean letsRedstoneGoIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return getConnectionState(aCoverVariable); - } - - @Override - public boolean letsRedstoneGoOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return getConnectionState(aCoverVariable); - } - - @Override - public boolean alwaysLookConnected(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { - return super.alwaysLookConnected(side, aCoverID, aCoverVariable, aTileEntity); - } - - @Override - public byte getRedstoneInput(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, - ICoverable aTileEntity) { - if (!getConnectionState(aCoverVariable)) { - return 0; - } - return super.getRedstoneInput(side, aInputRedstone, aCoverID, aCoverVariable, aTileEntity); - } - - @Override - public void placeCover(ForgeDirection side, ItemStack aCover, ICoverable aTileEntity) { - String aKey = generateUniqueKey(side, aTileEntity); - boolean state = getCoverConnections(aCover); - sPrefixMap.put(aKey, aCover.getUnlocalizedName()); - Logger.INFO("Mapping key " + aKey + " to " + state); - sConnectionStateForEntityMap.put(aKey, state ? VALUE_ON : VALUE_OFF); - Logger.INFO("Key Value: " + (state ? VALUE_ON : VALUE_OFF)); - // Try set cover state directly - // trySetState(aSide, state ? VALUE_ON : VALUE_OFF, aTileEntity); - super.placeCover(side, aCover, aTileEntity); - } - - @Override - public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, - boolean aForced) { - String aKey = generateUniqueKey(side, aTileEntity); - sConnectionStateForEntityMap.remove(aKey); - // Logger.INFO("Unmapping key "+aKey+"."); - return true; - } - - public static boolean getConnectionState(int aCoverVar) { - return aCoverVar == VALUE_ON; - } - - private static void trySetState(ForgeDirection side, int aState, ICoverable aTile) { - // Try set cover state directly - if (aTile instanceof IGregTechTileEntity gTileEntity) { - gTileEntity.setCoverDataAtSide(side, new ISerializableObject.LegacyCoverData(aState)); - } - } - - public static boolean getConnectionState(ForgeDirection side, ICoverable aTile) { - String aKey = generateUniqueKey(side, aTile); - return getConnectionState(aKey); - } - - public static boolean getConnectionState(String aKey) { - Integer b = sConnectionStateForEntityMap.get(aKey); - // Logger.INFO("Get State: "+b+" | "+aKey); - return b != null ? b == VALUE_ON : false; - } - - public static final boolean getCoverConnections(final ItemStack aStack) { - NBTTagCompound aNBT = aStack.getTagCompound(); - if (aNBT != null) { - aNBT = aNBT.getCompoundTag("CustomCoverMeta"); - if (aNBT != null) { - return aNBT.getBoolean("AllowConnections"); - } - } - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java index 924484e098..e11f4fae02 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/ChargingHelper.java @@ -1,6 +1,6 @@ package gtPlusPlus.xmod.gregtech.common.helpers; -import static gregtech.api.GregTech_API.mEUtoRF; +import static gregtech.api.GregTechAPI.mEUtoRF; import static gregtech.api.enums.Mods.Baubles; import static gregtech.api.enums.Mods.COFHCore; @@ -20,26 +20,26 @@ import cofh.api.energy.IEnergyContainerItem; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent; -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_ModHandler; -import gregtech.common.items.GT_MetaGenerated_Item_01; -import gregtech.common.items.GT_MetaGenerated_Item_02; -import gregtech.common.items.GT_MetaGenerated_Item_03; -import gregtech.common.items.GT_MetaGenerated_Tool_01; +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTModHandler; +import gregtech.common.items.MetaGeneratedItem01; +import gregtech.common.items.MetaGeneratedItem02; +import gregtech.common.items.MetaGeneratedItem03; +import gregtech.common.items.MetaGeneratedTool01; import gtPlusPlus.api.objects.data.Pair; import gtPlusPlus.api.objects.minecraft.BlockPos; 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.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaWirelessCharger; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.MTEWirelessCharger; import ic2.api.item.ElectricItem; import ic2.api.item.IElectricItem; public class ChargingHelper { - private static final Map> mValidPlayers = new HashMap<>(); - protected static Map mChargerMap = new HashMap<>(); + private static final Map> mValidPlayers = new HashMap<>(); + protected static Map mChargerMap = new HashMap<>(); private int mTickTimer = 0; private static final int mTickMultiplier = 20; @@ -75,7 +75,7 @@ public class ChargingHelper { } } - for (GregtechMetaWirelessCharger mEntityTemp : mChargerMap.values()) { + for (MTEWirelessCharger mEntityTemp : mChargerMap.values()) { if (mEntityTemp != null) { if (mEntityTemp.getBaseMetaTileEntity() == null || !mEntityTemp.getBaseMetaTileEntity() .isAllowedToWork()) continue; @@ -96,11 +96,11 @@ public class ChargingHelper { if (mStartingEu - mEntityTemp.getEUVar() <= 0) { long mMaxDistance; if (mEntityTemp.getMode() == 0) { - mMaxDistance = (4 * GT_Values.V[mEntityTemp.getTier()]); + mMaxDistance = (4 * GTValues.V[mEntityTemp.getTier()]); } else if (mEntityTemp.getMode() == 1) { mMaxDistance = (mEntityTemp.getTier() * 10L); } else { - mMaxDistance = (4 * GT_Values.V[mEntityTemp.getTier()] / 2); + mMaxDistance = (4 * GTValues.V[mEntityTemp.getTier()] / 2); } double mDistance = calculateDistance(mEntityTemp, mPlayerMan); long mVoltageCost = MathUtils.findPercentageOfInt(mMaxDistance, (float) mDistance); @@ -121,7 +121,7 @@ public class ChargingHelper { } catch (Throwable t) { if (!mChargerMap.isEmpty()) { for (BlockPos aPos : mChargerMap.keySet()) { - GregtechMetaWirelessCharger r = mChargerMap.get(aPos); + MTEWirelessCharger r = mChargerMap.get(aPos); if (r == null || r.getBaseMetaTileEntity() .isInvalidTileEntity()) { mChargerMap.remove(aPos); @@ -131,11 +131,11 @@ public class ChargingHelper { } } - public static GregtechMetaWirelessCharger getEntry(BlockPos mPos) { + public static MTEWirelessCharger getEntry(BlockPos mPos) { return mChargerMap.get(mPos); } - public static boolean addEntry(BlockPos mPos, GregtechMetaWirelessCharger mEntity) { + public static boolean addEntry(BlockPos mPos, MTEWirelessCharger mEntity) { if (mEntity == null) { return false; } @@ -143,7 +143,7 @@ public class ChargingHelper { return true; } - public static boolean removeEntry(BlockPos mPos, GregtechMetaWirelessCharger mEntity) { + public static boolean removeEntry(BlockPos mPos, MTEWirelessCharger mEntity) { if (mEntity == null) { return false; } @@ -154,31 +154,31 @@ public class ChargingHelper { } } - public static boolean addValidPlayer(EntityPlayer mPlayer, GregtechMetaWirelessCharger mEntity) { + public static boolean addValidPlayer(EntityPlayer mPlayer, MTEWirelessCharger mEntity) { if (mEntity == null) { return false; } if (mValidPlayers.containsKey(mPlayer.getDisplayName())) { return false; } else { - Pair mEntry = new Pair<>(mEntity, (byte) mEntity.getMode()); + Pair mEntry = new Pair<>(mEntity, (byte) mEntity.getMode()); return mValidPlayers.put(mPlayer.getDisplayName(), mEntry) == null; } } - public static boolean removeValidPlayer(EntityPlayer mPlayer, GregtechMetaWirelessCharger mEntity) { + public static boolean removeValidPlayer(EntityPlayer mPlayer, MTEWirelessCharger mEntity) { if (mEntity == null) { return false; } if (mValidPlayers.containsKey(mPlayer.getDisplayName())) { - Pair mEntry = new Pair<>(mEntity, (byte) mEntity.getMode()); + Pair mEntry = new Pair<>(mEntity, (byte) mEntity.getMode()); return mValidPlayers.remove(mPlayer.getDisplayName(), mEntry); } else { return false; } } - private boolean canCharge(GregtechMetaWirelessCharger charger, EntityPlayer chargeablePlayer, + private boolean canCharge(MTEWirelessCharger charger, EntityPlayer chargeablePlayer, Map longRangeChargers, Map shortRangeChargers) { if (charger.getMode() == 0) { return !longRangeChargers.isEmpty() && longRangeChargers.containsKey(chargeablePlayer.getDisplayName()); @@ -192,7 +192,7 @@ public class ChargingHelper { } } - private double calculateDistance(GregtechMetaWirelessCharger mEntityTemp, EntityPlayer mPlayerMan) { + private double calculateDistance(MTEWirelessCharger mEntityTemp, EntityPlayer mPlayerMan) { if (mEntityTemp == null || mPlayerMan == null) { return 0; } @@ -201,14 +201,14 @@ public class ChargingHelper { mEntityTemp.getPositionOfEntity(mPlayerMan)); } - private void chargeItems(@Nonnull GregtechMetaWirelessCharger mEntity, ItemStack[] mItems) { + private void chargeItems(@Nonnull MTEWirelessCharger mEntity, ItemStack[] mItems) { if (mItems == null || mItems.length == 0) { return; } chargeItemsEx(mEntity, mItems); } - private void chargeItemsEx(@Nonnull GregtechMetaWirelessCharger mEntity, ItemStack[] mItems) { + private void chargeItemsEx(@Nonnull MTEWirelessCharger mEntity, ItemStack[] mItems) { // Bad Inventory if (mItems == null || mItems.length == 0) { return; @@ -234,19 +234,18 @@ public class ChargingHelper { } // Try to get charge direct from NBT for GT and IC2 stacks - if (mTemp.getItem() instanceof GT_MetaGenerated_Tool_01 - || mTemp.getItem() instanceof GT_MetaGenerated_Item_01 - || mTemp.getItem() instanceof GT_MetaGenerated_Item_02 - || mTemp.getItem() instanceof GT_MetaGenerated_Item_03 + if (mTemp.getItem() instanceof MetaGeneratedTool01 || mTemp.getItem() instanceof MetaGeneratedItem01 + || mTemp.getItem() instanceof MetaGeneratedItem02 + || mTemp.getItem() instanceof MetaGeneratedItem03 || mTemp.getItem() .getClass() .getName() - .equalsIgnoreCase(GT_MetaGenerated_Tool_01.class.getName())) { + .equalsIgnoreCase(MetaGeneratedTool01.class.getName())) { if (!NBTUtils.hasKey(mTemp, "GT.ItemCharge")) { if (!mTemp.getDisplayName() .toLowerCase() .contains("battery")) { - if (!GT_ModHandler.isElectricItem(mTemp)) { + if (!GTModHandler.isElectricItem(mTemp)) { continue; } } else { @@ -284,8 +283,7 @@ public class ChargingHelper { int mMultiVoltage = (int) (mMulti * mVoltageIncrease); if ((mitemCurrentCharge + mMultiVoltage) <= mItemMaxCharge) { - if (GT_ModHandler.chargeElectricItem(mTemp, mMultiVoltage, Integer.MAX_VALUE, true, false) - > 0) { + if (GTModHandler.chargeElectricItem(mTemp, mMultiVoltage, Integer.MAX_VALUE, true, false) > 0) { for (int i = 0; i < mMulti; i++) { ElectricItem.manager.charge(mTemp, mVoltageIncrease, Integer.MAX_VALUE, false, false); } @@ -300,7 +298,7 @@ public class ChargingHelper { mitemCurrentCharge = ElectricItem.manager.getCharge(mTemp); if (mitemCurrentCharge < mItemMaxCharge && mitemCurrentCharge >= (mItemMaxCharge - mVoltage)) { int xDif = (int) (mItemMaxCharge - mitemCurrentCharge); - if (GT_ModHandler.chargeElectricItem(mTemp, xDif, Integer.MAX_VALUE, true, false) >= 0) { + if (GTModHandler.chargeElectricItem(mTemp, xDif, Integer.MAX_VALUE, true, false) >= 0) { if (ElectricItem.manager.getCharge(mTemp) >= mItemMaxCharge) { mEntity.setEUVar(mEntity.getEUVar() - (xDif)); mEuStored = mEntity.getEUVar(); @@ -334,7 +332,7 @@ public class ChargingHelper { if (itemstack == null) { return false; } - if (GT_ModHandler.isElectricItem(itemstack)) { + if (GTModHandler.isElectricItem(itemstack)) { return true; } return itemstack.getItem() instanceof IElectricItem; diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/FlotationRecipeHandler.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/FlotationRecipeHandler.java index 8cbb473a42..773bf0127e 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/FlotationRecipeHandler.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/FlotationRecipeHandler.java @@ -6,8 +6,8 @@ import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.material.Material; @@ -31,14 +31,14 @@ public class FlotationRecipeHandler { public static Material getMaterialOfMilledProduct(ItemStack aMilled) { for (String aKey : sMilledMap.keySet()) { ItemStack aTempMilledStack = sMilledMap.get(aKey); - if (GT_Utility.areStacksEqual(aTempMilledStack, aMilled, true)) { + if (GTUtility.areStacksEqual(aTempMilledStack, aMilled, true)) { return sMaterialMap.get(aKey); } } return null; } - public static ItemStack findMilledStack(GT_Recipe aRecipe) { + public static ItemStack findMilledStack(GTRecipe aRecipe) { if (aRecipe == null || aRecipe.mInputs == null || aRecipe.mInputs.length <= 0) { return null; } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/GTMethodHelper.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/GTMethodHelper.java new file mode 100644 index 0000000000..357764c820 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/GTMethodHelper.java @@ -0,0 +1,19 @@ +package gtPlusPlus.xmod.gregtech.common.helpers; + +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ITexturedTileEntity; + +public class GTMethodHelper { + + public static ITexture[] getTexture(TileEntity tTileEntity, Block aBlock, ForgeDirection side) { + if (tTileEntity instanceof ITexturedTileEntity) { + return ((ITexturedTileEntity) tTileEntity).getTexture(aBlock, side); + } + return BlockIcons.ERROR_RENDERING; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/GT_MethodHelper.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/GT_MethodHelper.java deleted file mode 100644 index ced9b46c3e..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/GT_MethodHelper.java +++ /dev/null @@ -1,19 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.helpers; - -import net.minecraft.block.Block; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.ITexturedTileEntity; - -public class GT_MethodHelper { - - public static ITexture[] getTexture(TileEntity tTileEntity, Block aBlock, ForgeDirection side) { - if (tTileEntity instanceof ITexturedTileEntity) { - return ((ITexturedTileEntity) tTileEntity).getTexture(aBlock, side); - } - return BlockIcons.ERROR_RENDERING; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/VolumetricFlaskHelper.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/VolumetricFlaskHelper.java index 2b0e2a7a4d..57a985f3f3 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/VolumetricFlaskHelper.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/VolumetricFlaskHelper.java @@ -6,7 +6,7 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.fluids.FluidStack; import gregtech.api.enums.ItemList; -import gregtech.common.items.GT_VolumetricFlask; +import gregtech.common.items.ItemVolumetricFlask; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; public class VolumetricFlaskHelper { @@ -42,8 +42,8 @@ public class VolumetricFlaskHelper { public static int getMaxFlaskCapacity(ItemStack aStack) { if (aStack != null) { Item aItem = aStack.getItem(); - if (aItem instanceof GT_VolumetricFlask) { - return ((GT_VolumetricFlask) aItem).getMaxCapacity(); + if (aItem instanceof ItemVolumetricFlask) { + return ((ItemVolumetricFlask) aItem).getMaxCapacity(); } } return 0; @@ -120,6 +120,6 @@ public class VolumetricFlaskHelper { } public static Item generateNewFlask(String unlocalized, String english, int maxCapacity) { - return new GT_VolumetricFlask(unlocalized, english, maxCapacity); + return new ItemVolumetricFlask(unlocalized, english, maxCapacity); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/tesseract/TesseractHelper.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/tesseract/TesseractHelper.java index 3717f17554..03a4ace32f 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/tesseract/TesseractHelper.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/helpers/tesseract/TesseractHelper.java @@ -1,7 +1,7 @@ package gtPlusPlus.xmod.gregtech.common.helpers.tesseract; -import static gtPlusPlus.core.lib.CORE.sTesseractGeneratorOwnershipMap; -import static gtPlusPlus.core.lib.CORE.sTesseractTerminalOwnershipMap; +import static gtPlusPlus.core.lib.GTPPCore.sTesseractGeneratorOwnershipMap; +import static gtPlusPlus.core.lib.GTPPCore.sTesseractTerminalOwnershipMap; import java.util.HashMap; import java.util.Map; @@ -12,8 +12,8 @@ import java.util.UUID; import net.minecraft.entity.player.EntityPlayer; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.xmod.gregtech.common.tileentities.automation.GT_MetaTileEntity_TesseractGenerator; -import gtPlusPlus.xmod.gregtech.common.tileentities.automation.GT_MetaTileEntity_TesseractTerminal; +import gtPlusPlus.xmod.gregtech.common.tileentities.automation.MTETesseractGenerator; +import gtPlusPlus.xmod.gregtech.common.tileentities.automation.MTETesseractTerminal; public class TesseractHelper { @@ -25,8 +25,7 @@ public class TesseractHelper { */ // Checks if a Generator is owned by a player. - public static final boolean isGeneratorOwnedByPlayer(EntityPlayer player, - GT_MetaTileEntity_TesseractGenerator generator) { + public static final boolean isGeneratorOwnedByPlayer(EntityPlayer player, MTETesseractGenerator generator) { if (player == null) { Logger.WARNING("Failed. [isGeneratorOwnedByPlayer]"); return false; @@ -35,9 +34,9 @@ public class TesseractHelper { UUID playerIdentifier = player.getUniqueID(); if (!sTesseractGeneratorOwnershipMap.isEmpty() && playerIdentifier != null) { // Utils.LOG_WARNING("Success. [isGeneratorOwnedByPlayer] 2"); - Map generators = getGeneratorOwnershipByPlayer(player); - Set> players = generators.entrySet(); - for (Entry current : players) { + Map generators = getGeneratorOwnershipByPlayer(player); + Set> players = generators.entrySet(); + for (Entry current : players) { // Utils.LOG_WARNING("Success. [isGeneratorOwnedByPlayer] 3"); if (current.getValue() .equals(generator)) { @@ -52,23 +51,22 @@ public class TesseractHelper { // Saves A Generator to the Players UUID map along with the Freq. public static final boolean setGeneratorOwnershipByPlayer(EntityPlayer player, int freq, - GT_MetaTileEntity_TesseractGenerator generator) { + MTETesseractGenerator generator) { if (player == null) { return false; } UUID playerIdentifier = player.getUniqueID(); Logger.WARNING("Setting Generator on " + freq + " for " + player.getDisplayName() + "."); if (playerIdentifier != null) { - Map playerOwned = sTesseractGeneratorOwnershipMap - .get(playerIdentifier); + Map playerOwned = sTesseractGeneratorOwnershipMap.get(playerIdentifier); if (playerOwned == null || playerOwned.isEmpty()) { - Map newOwnershipMap = new HashMap<>(); + Map newOwnershipMap = new HashMap<>(); newOwnershipMap.put(freq, generator); sTesseractGeneratorOwnershipMap.put(playerIdentifier, newOwnershipMap); Logger.WARNING("Success! [Empty Map]"); return true; } else if (sTesseractGeneratorOwnershipMap.containsKey(playerIdentifier)) { - Map ownershipMap = sTesseractGeneratorOwnershipMap + Map ownershipMap = sTesseractGeneratorOwnershipMap .get(playerIdentifier); if (!ownershipMap.containsKey(freq)) { ownershipMap.put(freq, generator); @@ -84,7 +82,7 @@ public class TesseractHelper { } // Gets Generator based on Frequency. - public static final GT_MetaTileEntity_TesseractGenerator getGeneratorByFrequency(EntityPlayer player, int freq) { + public static final MTETesseractGenerator getGeneratorByFrequency(EntityPlayer player, int freq) { if (player == null) { return null; } @@ -92,9 +90,9 @@ public class TesseractHelper { Logger.WARNING("Getting Generator on " + freq + " for " + player.getDisplayName() + "."); if (!sTesseractGeneratorOwnershipMap.isEmpty() && playerIdentifier != null) { // Utils.LOG_WARNING("Success. [getGeneratorByFrequency] 1"); - Map generators = getGeneratorOwnershipByPlayer(player); - Set> players = generators.entrySet(); - for (Entry current : players) { + Map generators = getGeneratorOwnershipByPlayer(player); + Set> players = generators.entrySet(); + for (Entry current : players) { // Utils.LOG_WARNING("Success. [getGeneratorByFrequency] 2"); if (current.getKey() .equals(freq)) { @@ -131,16 +129,15 @@ public class TesseractHelper { */ // Checks if a Terminal is owned by a player. - public static final boolean isTerminalOwnedByPlayer(EntityPlayer player, - GT_MetaTileEntity_TesseractTerminal generator) { + public static final boolean isTerminalOwnedByPlayer(EntityPlayer player, MTETesseractTerminal generator) { if (player == null) { return false; } UUID playerIdentifier = player.getUniqueID(); if (!sTesseractTerminalOwnershipMap.isEmpty() && playerIdentifier != null) { - Map generators = getTerminalOwnershipByPlayer(player); - Set> players = generators.entrySet(); - for (Entry current : players) { + Map generators = getTerminalOwnershipByPlayer(player); + Set> players = generators.entrySet(); + for (Entry current : players) { if (current.getValue() .equals(generator)) { return true; @@ -152,24 +149,22 @@ public class TesseractHelper { // Saves A Terminal to the Players UUID map along with the Freq. public static final boolean setTerminalOwnershipByPlayer(EntityPlayer player, int freq, - GT_MetaTileEntity_TesseractTerminal generator) { + MTETesseractTerminal generator) { if (player == null) { return false; } UUID playerIdentifier = player.getUniqueID(); if (playerIdentifier != null) { Logger.WARNING("Setting Terminal on " + freq + " for " + player.getDisplayName() + "."); - Map playerOwned = sTesseractTerminalOwnershipMap - .get(playerIdentifier); + Map playerOwned = sTesseractTerminalOwnershipMap.get(playerIdentifier); if (playerOwned == null || playerOwned.isEmpty()) { - Map newOwnershipMap = new HashMap<>(); + Map newOwnershipMap = new HashMap<>(); newOwnershipMap.put(freq, generator); sTesseractTerminalOwnershipMap.put(playerIdentifier, newOwnershipMap); Logger.WARNING("Success! [Empty Map]"); return true; } else if (sTesseractTerminalOwnershipMap.containsKey(playerIdentifier)) { - Map ownershipMap = sTesseractTerminalOwnershipMap - .get(playerIdentifier); + Map ownershipMap = sTesseractTerminalOwnershipMap.get(playerIdentifier); if (!ownershipMap.containsKey(freq)) { ownershipMap.put(freq, generator); } @@ -183,16 +178,16 @@ public class TesseractHelper { } // Gets Terminal based on Frequency. - public static final GT_MetaTileEntity_TesseractTerminal getTerminalByFrequency(EntityPlayer player, int freq) { + public static final MTETesseractTerminal getTerminalByFrequency(EntityPlayer player, int freq) { if (player == null) { return null; } UUID playerIdentifier = player.getUniqueID(); Logger.WARNING("Getting Terminal on " + freq + " for " + player.getDisplayName() + "."); if (!sTesseractTerminalOwnershipMap.isEmpty() && playerIdentifier != null) { - Map generators = getTerminalOwnershipByPlayer(player); - Set> players = generators.entrySet(); - for (Entry current : players) { + Map generators = getTerminalOwnershipByPlayer(player); + Set> players = generators.entrySet(); + for (Entry current : players) { if (current.getKey() .equals(freq)) { Logger.WARNING("Success!"); @@ -223,13 +218,11 @@ public class TesseractHelper { * Internal Methods * */ - private static Map getGeneratorOwnershipByPlayer( - EntityPlayer player) { + private static Map getGeneratorOwnershipByPlayer(EntityPlayer player) { UUID playerIdentifier = player.getUniqueID(); if (!sTesseractGeneratorOwnershipMap.isEmpty() && playerIdentifier != null) { - Set>> players = sTesseractGeneratorOwnershipMap - .entrySet(); - for (Entry> current : players) { + Set>> players = sTesseractGeneratorOwnershipMap.entrySet(); + for (Entry> current : players) { if (current.getKey() .compareTo(playerIdentifier) == 0) { return current.getValue(); @@ -239,12 +232,11 @@ public class TesseractHelper { return null; } - private static Map getTerminalOwnershipByPlayer(EntityPlayer player) { + private static Map getTerminalOwnershipByPlayer(EntityPlayer player) { UUID playerIdentifier = player.getUniqueID(); if (!sTesseractTerminalOwnershipMap.isEmpty() && playerIdentifier != null) { - Set>> players = sTesseractTerminalOwnershipMap - .entrySet(); - for (Entry> current : players) { + Set>> players = sTesseractTerminalOwnershipMap.entrySet(); + for (Entry> current : players) { if (current.getKey() .compareTo(playerIdentifier) == 0) { return current.getValue(); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/Ids_MetaGeneratedGregtechItems.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/Ids_MetaGeneratedGregtechItems.java deleted file mode 100644 index 5a9e9db772..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/Ids_MetaGeneratedGregtechItems.java +++ /dev/null @@ -1,47 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.items; - -public enum Ids_MetaGeneratedGregtechItems { - - Shape_Extruder_WindmillShaft(40), - Pellet_RTG_PU238(41), - Pellet_RTG_SR90(42), - Pellet_RTG_PO210(43), - Pellet_RTG_AM241(44), - Battery_RE_EV_Sodium(50), - Battery_RE_EV_Cadmium(52), - Battery_RE_EV_Lithium(54), - Gregtech_Computer_Cube(55), - Battery_Gem_1(66), - Battery_Gem_2(68), - Battery_Gem_3(70), - Cover_Overflow_LV(72), - Cover_Overflow_MV(73), - Cover_Overflow_HV(74), - Cover_Overflow_EV(75), - Cover_Overflow_IV(76), - Compressed_Fusion_Reactor(100), - Laser_Lens_Special(105), - Battery_Casing_Gem_1(106), - Battery_Casing_Gem_2(107), - Battery_Casing_Gem_3(108), - Battery_Casing_Gem_4(109), - Battery_Gem_4(110), - Laser_Lens_WoodsGlass(140), - TransmissionComponent_LV(142), - TransmissionComponent_MV(143), - TransmissionComponent_HV(144), - TransmissionComponent_EV(145), - TransmissionComponent_IV(146), - TransmissionComponent_LuV(147), - TransmissionComponent_ZPM(148), - TransmissionComponent_UV(149), - TransmissionComponent_UHV(150), - Distillus_Upgrade_Chip(151), - Maceration_Upgrade_Chip(152); - - public final int ID; - - Ids_MetaGeneratedGregtechItems(int ID) { - this.ID = ID; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaCustomCoverItem.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaCustomCoverItem.java index 8edb8c2cf9..a6cd63ca19 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaCustomCoverItem.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaCustomCoverItem.java @@ -16,17 +16,17 @@ import net.minecraft.world.World; import org.apache.commons.lang3.StringUtils; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.interfaces.IIconContainer; import gregtech.api.interfaces.ITexture; -import gregtech.api.objects.GT_MultiTexture; -import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.objects.GTMultiTexture; +import gregtech.api.objects.GTRenderedTexture; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.creative.AddToCreativeTab; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.sys.KeyboardUtils; -import gtPlusPlus.xmod.gregtech.common.covers.GTPP_Cover_ToggleVisual; +import gtPlusPlus.xmod.gregtech.common.covers.CoverToggleVisual; public class MetaCustomCoverItem extends Item { @@ -72,10 +72,10 @@ public class MetaCustomCoverItem extends Item { if (i > 0 && hide()) { ItemUtils.hideItemFromNEI(thisStack); } - GregTech_API.registerCover( + GregTechAPI.registerCover( thisStack, - new GT_MultiTexture(new ITexture[] { new GT_RenderedTexture(mTextures[i]) }), - new GTPP_Cover_ToggleVisual()); + new GTMultiTexture(new ITexture[] { new GTRenderedTexture(mTextures[i]) }), + new CoverToggleVisual()); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java index ec9416be02..a787e4c4ce 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechItems.java @@ -1,64 +1,64 @@ package gtPlusPlus.xmod.gregtech.common.items; -import static gregtech.api.util.GT_RecipeConstants.RTG_DURATION_IN_DAYS; -import static gregtech.client.GT_TooltipHandler.Tier.EV; -import static gregtech.client.GT_TooltipHandler.registerTieredTooltip; +import static gregtech.api.util.GTRecipeConstants.RTG_DURATION_IN_DAYS; +import static gregtech.client.GTTooltipHandler.Tier.EV; +import static gregtech.client.GTTooltipHandler.registerTieredTooltip; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.rtgFuels; import static gtPlusPlus.core.util.Utils.getTcAspectStack; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Battery_Casing_Gem_1; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Battery_Casing_Gem_2; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Battery_Casing_Gem_3; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Battery_Casing_Gem_4; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Battery_Gem_1; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Battery_Gem_2; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Battery_Gem_3; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Battery_Gem_4; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Battery_RE_EV_Cadmium; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Battery_RE_EV_Lithium; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Battery_RE_EV_Sodium; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Compressed_Fusion_Reactor; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Cover_Overflow_EV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Cover_Overflow_HV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Cover_Overflow_IV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Cover_Overflow_LV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Cover_Overflow_MV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Distillus_Upgrade_Chip; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Gregtech_Computer_Cube; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Laser_Lens_Special; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Laser_Lens_WoodsGlass; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Maceration_Upgrade_Chip; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Pellet_RTG_AM241; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Pellet_RTG_PO210; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Pellet_RTG_PU238; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Pellet_RTG_SR90; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.Shape_Extruder_WindmillShaft; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.TransmissionComponent_EV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.TransmissionComponent_HV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.TransmissionComponent_IV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.TransmissionComponent_LV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.TransmissionComponent_LuV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.TransmissionComponent_MV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.TransmissionComponent_UHV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.TransmissionComponent_UV; -import static gtPlusPlus.xmod.gregtech.common.items.Ids_MetaGeneratedGregtechItems.TransmissionComponent_ZPM; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Battery_Casing_Gem_1; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Battery_Casing_Gem_2; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Battery_Casing_Gem_3; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Battery_Casing_Gem_4; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Battery_Gem_1; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Battery_Gem_2; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Battery_Gem_3; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Battery_Gem_4; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Battery_RE_EV_Cadmium; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Battery_RE_EV_Lithium; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Battery_RE_EV_Sodium; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Compressed_Fusion_Reactor; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Cover_Overflow_EV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Cover_Overflow_HV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Cover_Overflow_IV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Cover_Overflow_LV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Cover_Overflow_MV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Distillus_Upgrade_Chip; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Gregtech_Computer_Cube; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Laser_Lens_Special; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Laser_Lens_WoodsGlass; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Maceration_Upgrade_Chip; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Pellet_RTG_AM241; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Pellet_RTG_PO210; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Pellet_RTG_PU238; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Pellet_RTG_SR90; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.Shape_Extruder_WindmillShaft; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.TransmissionComponent_EV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.TransmissionComponent_HV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.TransmissionComponent_IV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.TransmissionComponent_LV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.TransmissionComponent_LuV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.TransmissionComponent_MV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.TransmissionComponent_UHV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.TransmissionComponent_UV; +import static gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedItemIDs.TransmissionComponent_ZPM; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TC_Aspects; +import gregtech.api.enums.TCAspects; import gregtech.api.enums.Textures; import gregtech.api.enums.TierEU; -import gregtech.api.objects.GT_MultiTexture; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_ModHandler; +import gregtech.api.objects.GTMultiTexture; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTModHandler; import gtPlusPlus.core.util.data.StringUtils; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.items.Gregtech_MetaItem_X32; +import gtPlusPlus.xmod.gregtech.api.items.GTMetaItemX32; import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.covers.GTPP_Cover_Overflow; +import gtPlusPlus.xmod.gregtech.common.covers.CoverOverflow; -public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 { +public class MetaGeneratedGregtechItems extends GTMetaItemX32 { public static final MetaGeneratedGregtechItems INSTANCE; @@ -85,27 +85,27 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 { Battery_RE_EV_Sodium.ID, "Quad Cell Sodium Battery", "Reusable", - getTcAspectStack(TC_Aspects.ELECTRUM, 2L), - getTcAspectStack(TC_Aspects.METALLUM, 2L), - getTcAspectStack(TC_Aspects.POTENTIA, 2L))); + getTcAspectStack(TCAspects.ELECTRUM, 2L), + getTcAspectStack(TCAspects.METALLUM, 2L), + getTcAspectStack(TCAspects.POTENTIA, 2L))); GregtechItemList.Battery_RE_EV_Cadmium.set( this.addItem( Battery_RE_EV_Cadmium.ID, "Quad Cell Cadmium Battery", "Reusable", - getTcAspectStack(TC_Aspects.ELECTRUM, 1L), - getTcAspectStack(TC_Aspects.METALLUM, 1L), - getTcAspectStack(TC_Aspects.POTENTIA, 1L))); + getTcAspectStack(TCAspects.ELECTRUM, 1L), + getTcAspectStack(TCAspects.METALLUM, 1L), + getTcAspectStack(TCAspects.POTENTIA, 1L))); GregtechItemList.Battery_RE_EV_Lithium.set( this.addItem( Battery_RE_EV_Lithium.ID, "Quad Cell Lithium Battery", "Reusable", - getTcAspectStack(TC_Aspects.ELECTRUM, 3L), - getTcAspectStack(TC_Aspects.METALLUM, 3L), - getTcAspectStack(TC_Aspects.POTENTIA, 3L))); + getTcAspectStack(TCAspects.ELECTRUM, 3L), + getTcAspectStack(TCAspects.METALLUM, 3L), + getTcAspectStack(TCAspects.POTENTIA, 3L))); /** * Power Gems @@ -115,27 +115,27 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 { Battery_Gem_1.ID, "Proton Cell", "Reusable", - getTcAspectStack(TC_Aspects.ELECTRUM, 8L), - getTcAspectStack(TC_Aspects.METALLUM, 24L), - getTcAspectStack(TC_Aspects.POTENTIA, 16L))); + getTcAspectStack(TCAspects.ELECTRUM, 8L), + getTcAspectStack(TCAspects.METALLUM, 24L), + getTcAspectStack(TCAspects.POTENTIA, 16L))); GregtechItemList.Battery_Gem_2.set( this.addItem( Battery_Gem_2.ID, "Electron Cell", "Reusable", - getTcAspectStack(TC_Aspects.ELECTRUM, 16L), - getTcAspectStack(TC_Aspects.METALLUM, 32L), - getTcAspectStack(TC_Aspects.POTENTIA, 32L))); + getTcAspectStack(TCAspects.ELECTRUM, 16L), + getTcAspectStack(TCAspects.METALLUM, 32L), + getTcAspectStack(TCAspects.POTENTIA, 32L))); GregtechItemList.Battery_Gem_3.set( this.addItem( Battery_Gem_3.ID, "Quark Entanglement", "Reusable", - getTcAspectStack(TC_Aspects.ELECTRUM, 32L), - getTcAspectStack(TC_Aspects.METALLUM, 48L), - getTcAspectStack(TC_Aspects.POTENTIA, 64L))); + getTcAspectStack(TCAspects.ELECTRUM, 32L), + getTcAspectStack(TCAspects.METALLUM, 48L), + getTcAspectStack(TCAspects.POTENTIA, 64L))); // RTG Pellet GregtechItemList.Pellet_RTG_PU238.set( @@ -143,36 +143,36 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 { Pellet_RTG_PU238.ID, StringUtils.superscript("238") + "Pu Pellet", "", - getTcAspectStack(TC_Aspects.RADIO, 4L), - getTcAspectStack(TC_Aspects.POTENTIA, 2L), - getTcAspectStack(TC_Aspects.METALLUM, 2L))); + getTcAspectStack(TCAspects.RADIO, 4L), + getTcAspectStack(TCAspects.POTENTIA, 2L), + getTcAspectStack(TCAspects.METALLUM, 2L))); GregtechItemList.Pellet_RTG_SR90.set( this.addItem( Pellet_RTG_SR90.ID, StringUtils.superscript("90") + "Sr Pellet", "", - getTcAspectStack(TC_Aspects.RADIO, 4L), - getTcAspectStack(TC_Aspects.POTENTIA, 2L), - getTcAspectStack(TC_Aspects.METALLUM, 2L))); + getTcAspectStack(TCAspects.RADIO, 4L), + getTcAspectStack(TCAspects.POTENTIA, 2L), + getTcAspectStack(TCAspects.METALLUM, 2L))); GregtechItemList.Pellet_RTG_PO210.set( this.addItem( Pellet_RTG_PO210.ID, StringUtils.superscript("210") + "Po Pellet", "", - getTcAspectStack(TC_Aspects.RADIO, 4L), - getTcAspectStack(TC_Aspects.POTENTIA, 2L), - getTcAspectStack(TC_Aspects.METALLUM, 2L))); + getTcAspectStack(TCAspects.RADIO, 4L), + getTcAspectStack(TCAspects.POTENTIA, 2L), + getTcAspectStack(TCAspects.METALLUM, 2L))); GregtechItemList.Pellet_RTG_AM241.set( this.addItem( Pellet_RTG_AM241.ID, StringUtils.superscript("241") + "Am Pellet", "", - getTcAspectStack(TC_Aspects.RADIO, 4L), - getTcAspectStack(TC_Aspects.POTENTIA, 2L), - getTcAspectStack(TC_Aspects.METALLUM, 2L))); + getTcAspectStack(TCAspects.RADIO, 4L), + getTcAspectStack(TCAspects.POTENTIA, 2L), + getTcAspectStack(TCAspects.METALLUM, 2L))); // Computer Cube GregtechItemList.Gregtech_Computer_Cube.set( @@ -180,59 +180,59 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 { Gregtech_Computer_Cube.ID, "Gregtech Computer Cube", "Reusable", - getTcAspectStack(TC_Aspects.ELECTRUM, 8L), - getTcAspectStack(TC_Aspects.METALLUM, 8L), - getTcAspectStack(TC_Aspects.POTENTIA, 8L))); + getTcAspectStack(TCAspects.ELECTRUM, 8L), + getTcAspectStack(TCAspects.METALLUM, 8L), + getTcAspectStack(TCAspects.POTENTIA, 8L))); GregtechItemList.Cover_Overflow_LV.set( this.addItem( Cover_Overflow_LV.ID, "Overflow Valve (LV)", "Maximum void amount: 64,000", - getTcAspectStack(TC_Aspects.ELECTRUM, 1L), - getTcAspectStack(TC_Aspects.MACHINA, 1L), - getTcAspectStack(TC_Aspects.ITER, 1L), - getTcAspectStack(TC_Aspects.AQUA, 1L))); + getTcAspectStack(TCAspects.ELECTRUM, 1L), + getTcAspectStack(TCAspects.MACHINA, 1L), + getTcAspectStack(TCAspects.ITER, 1L), + getTcAspectStack(TCAspects.AQUA, 1L))); GregtechItemList.Cover_Overflow_MV.set( this.addItem( Cover_Overflow_MV.ID, "Overflow Valve (MV)", "Maximum void amount: 512,000", - getTcAspectStack(TC_Aspects.ELECTRUM, 1L), - getTcAspectStack(TC_Aspects.MACHINA, 1L), - getTcAspectStack(TC_Aspects.ITER, 1L), - getTcAspectStack(TC_Aspects.AQUA, 1L))); + getTcAspectStack(TCAspects.ELECTRUM, 1L), + getTcAspectStack(TCAspects.MACHINA, 1L), + getTcAspectStack(TCAspects.ITER, 1L), + getTcAspectStack(TCAspects.AQUA, 1L))); GregtechItemList.Cover_Overflow_HV.set( this.addItem( Cover_Overflow_HV.ID, "Overflow Valve (HV)", "Maximum void amount: 4,096,000", - getTcAspectStack(TC_Aspects.ELECTRUM, 1L), - getTcAspectStack(TC_Aspects.MACHINA, 1L), - getTcAspectStack(TC_Aspects.ITER, 1L), - getTcAspectStack(TC_Aspects.AQUA, 1L))); + getTcAspectStack(TCAspects.ELECTRUM, 1L), + getTcAspectStack(TCAspects.MACHINA, 1L), + getTcAspectStack(TCAspects.ITER, 1L), + getTcAspectStack(TCAspects.AQUA, 1L))); GregtechItemList.Cover_Overflow_EV.set( this.addItem( Cover_Overflow_EV.ID, "Overflow Valve (EV)", "Maximum void amount: 32,768,000", - getTcAspectStack(TC_Aspects.ELECTRUM, 1L), - getTcAspectStack(TC_Aspects.MACHINA, 1L), - getTcAspectStack(TC_Aspects.ITER, 1L), - getTcAspectStack(TC_Aspects.AQUA, 1L))); + getTcAspectStack(TCAspects.ELECTRUM, 1L), + getTcAspectStack(TCAspects.MACHINA, 1L), + getTcAspectStack(TCAspects.ITER, 1L), + getTcAspectStack(TCAspects.AQUA, 1L))); GregtechItemList.Cover_Overflow_IV.set( this.addItem( Cover_Overflow_IV.ID, "Overflow Valve (IV)", "Maximum void amount: 262,144,000", - getTcAspectStack(TC_Aspects.ELECTRUM, 1L), - getTcAspectStack(TC_Aspects.MACHINA, 1L), - getTcAspectStack(TC_Aspects.ITER, 1L), - getTcAspectStack(TC_Aspects.AQUA, 1L))); + getTcAspectStack(TCAspects.ELECTRUM, 1L), + getTcAspectStack(TCAspects.MACHINA, 1L), + getTcAspectStack(TCAspects.ITER, 1L), + getTcAspectStack(TCAspects.AQUA, 1L))); // Fusion Reactor MK4 Singularity GregtechItemList.Compressed_Fusion_Reactor.set( @@ -258,9 +258,9 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 { Battery_Gem_4.ID, "Graviton Anomaly", "Reusable", - getTcAspectStack(TC_Aspects.ELECTRUM, 64L), - getTcAspectStack(TC_Aspects.METALLUM, 64L), - getTcAspectStack(TC_Aspects.POTENTIA, 64L))); + getTcAspectStack(TCAspects.ELECTRUM, 64L), + getTcAspectStack(TCAspects.METALLUM, 64L), + getTcAspectStack(TCAspects.POTENTIA, 64L))); /* * High Tier 'Saws' for the tree Farm @@ -285,11 +285,11 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 { aTransParts[tier - 1].set( this.addItem( IDs[tier - 1], - "Transmission Component (" + GT_Values.VN[tier] + ")", + "Transmission Component (" + GTValues.VN[tier] + ")", "", - getTcAspectStack(TC_Aspects.ELECTRUM, tier), - getTcAspectStack(TC_Aspects.MACHINA, tier), - getTcAspectStack(TC_Aspects.MAGNETO, tier))); + getTcAspectStack(TCAspects.ELECTRUM, tier), + getTcAspectStack(TCAspects.MACHINA, tier), + getTcAspectStack(TCAspects.MAGNETO, tier))); } // Distillus Chip @@ -308,17 +308,17 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 { } private void setAllElectricStats() { - this.setElectricStats(32000 + Battery_RE_EV_Cadmium.ID, 4800000L, GT_Values.V[4], 4L, -3L, true); - this.setElectricStats(32000 + Battery_RE_EV_Sodium.ID, 3200000L, GT_Values.V[4], 4L, -3L, true); - this.setElectricStats(32000 + Battery_RE_EV_Lithium.ID, 6400000L, GT_Values.V[4], 4L, -3L, true); - this.setElectricStats(32000 + Battery_Gem_1.ID, GT_Values.V[6] * 20 * 300 / 4, GT_Values.V[6], 6L, -3L, false); - this.setElectricStats(32000 + Battery_Gem_2.ID, GT_Values.V[7] * 20 * 300 / 4, GT_Values.V[7], 7L, -3L, false); - this.setElectricStats(32000 + Battery_Gem_3.ID, GT_Values.V[8] * 20 * 300 / 4, GT_Values.V[8], 8L, -3L, false); - this.setElectricStats(32000 + Battery_Casing_Gem_4.ID, (64000000000L * 16), GT_Values.V[9], 9L, -3L, false); + this.setElectricStats(32000 + Battery_RE_EV_Cadmium.ID, 4800000L, GTValues.V[4], 4L, -3L, true); + this.setElectricStats(32000 + Battery_RE_EV_Sodium.ID, 3200000L, GTValues.V[4], 4L, -3L, true); + this.setElectricStats(32000 + Battery_RE_EV_Lithium.ID, 6400000L, GTValues.V[4], 4L, -3L, true); + this.setElectricStats(32000 + Battery_Gem_1.ID, GTValues.V[6] * 20 * 300 / 4, GTValues.V[6], 6L, -3L, false); + this.setElectricStats(32000 + Battery_Gem_2.ID, GTValues.V[7] * 20 * 300 / 4, GTValues.V[7], 7L, -3L, false); + this.setElectricStats(32000 + Battery_Gem_3.ID, GTValues.V[8] * 20 * 300 / 4, GTValues.V[8], 8L, -3L, false); + this.setElectricStats(32000 + Battery_Casing_Gem_4.ID, (64000000000L * 16), GTValues.V[9], 9L, -3L, false); this.setElectricStats( 32000 + Gregtech_Computer_Cube.ID, - GT_Values.V[6] * 10 * 60 * 20, - GT_Values.V[5], + GTValues.V[6] * 10 * 60 * 20, + GTValues.V[5], 5L, -3L, false); @@ -331,36 +331,36 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 { } private void registerFuelRTGRecipes() { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(GregtechItemList.Pellet_RTG_PU238.get(1)) .duration(0) .eut(64) .metadata(RTG_DURATION_IN_DAYS, MathUtils.roundToClosestInt(87.7f)) .addTo(rtgFuels); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(GregtechItemList.Pellet_RTG_SR90.get(1)) .duration(0) .eut(TierEU.RECIPE_LV) .metadata(RTG_DURATION_IN_DAYS, MathUtils.roundToClosestInt(28.8f)) .addTo(rtgFuels); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(GregtechItemList.Pellet_RTG_PO210.get(1)) .duration(0) .eut(TierEU.RECIPE_HV) .metadata(RTG_DURATION_IN_DAYS, 1) .addTo(rtgFuels); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(GregtechItemList.Pellet_RTG_AM241.get(1)) .duration(0) .eut(16) .metadata(RTG_DURATION_IN_DAYS, 216) .addTo(rtgFuels); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getIC2Item("RTGPellets", 1)) + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getIC2Item("RTGPellets", 1)) .duration(0) .eut(8) .metadata(RTG_DURATION_IN_DAYS, MathUtils.roundToClosestInt(2.6f)) @@ -368,36 +368,36 @@ public class MetaGeneratedGregtechItems extends Gregtech_MetaItem_X32 { } private void registerCovers() { - GregTech_API.registerCover( + GregTechAPI.registerCover( GregtechItemList.Cover_Overflow_LV.get(1L), - new GT_MultiTexture( + new GTMultiTexture( Textures.BlockIcons.MACHINE_CASINGS[4][0], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)), - new GTPP_Cover_Overflow(64)); - GregTech_API.registerCover( + new GTRenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)), + new CoverOverflow(64)); + GregTechAPI.registerCover( GregtechItemList.Cover_Overflow_MV.get(1L), - new GT_MultiTexture( + new GTMultiTexture( Textures.BlockIcons.MACHINE_CASINGS[5][0], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)), - new GTPP_Cover_Overflow(512)); - GregTech_API.registerCover( + new GTRenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)), + new CoverOverflow(512)); + GregTechAPI.registerCover( GregtechItemList.Cover_Overflow_HV.get(1L), - new GT_MultiTexture( + new GTMultiTexture( Textures.BlockIcons.MACHINE_CASINGS[5][0], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)), - new GTPP_Cover_Overflow(4096)); - GregTech_API.registerCover( + new GTRenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)), + new CoverOverflow(4096)); + GregTechAPI.registerCover( GregtechItemList.Cover_Overflow_EV.get(1L), - new GT_MultiTexture( + new GTMultiTexture( Textures.BlockIcons.MACHINE_CASINGS[8][0], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)), - new GTPP_Cover_Overflow(32768)); - GregTech_API.registerCover( + new GTRenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)), + new CoverOverflow(32768)); + GregTechAPI.registerCover( GregtechItemList.Cover_Overflow_IV.get(1L), - new GT_MultiTexture( + new GTMultiTexture( Textures.BlockIcons.MACHINE_CASINGS[8][0], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)), - new GTPP_Cover_Overflow(262144)); + new GTRenderedTexture(TexturesGtBlock.Overlay_Overflow_Valve)), + new CoverOverflow(262144)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechTools.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechTools.java index 30250a46f3..ddc90a0183 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechTools.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedGregtechTools.java @@ -1,24 +1,24 @@ package gtPlusPlus.xmod.gregtech.common.items; -import gregtech.api.GregTech_API; -import gregtech.api.enums.TC_Aspects; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.TCAspects; import gregtech.api.enums.ToolDictNames; -import gregtech.api.items.GT_MetaGenerated_Tool; +import gregtech.api.items.MetaGeneratedTool; import gtPlusPlus.xmod.gregtech.api.enums.GregtechToolDictNames; -import gtPlusPlus.xmod.gregtech.common.tools.TOOL_Gregtech_AngleGrinder; -import gtPlusPlus.xmod.gregtech.common.tools.TOOL_Gregtech_ElectricSnips; +import gtPlusPlus.xmod.gregtech.common.tools.ToolAngleGrinder; +import gtPlusPlus.xmod.gregtech.common.tools.ToolElectricSnips; -public class MetaGeneratedGregtechTools extends GT_MetaGenerated_Tool { +public class MetaGeneratedGregtechTools extends MetaGeneratedTool { public static final short ANGLE_GRINDER = 7834; public static final short ELECTRIC_SNIPS = 7934; - public static GT_MetaGenerated_Tool INSTANCE; + public static MetaGeneratedTool INSTANCE; static { INSTANCE = new MetaGeneratedGregtechTools(); } - public static GT_MetaGenerated_Tool getInstance() { + public static MetaGeneratedTool getInstance() { return INSTANCE; } @@ -30,25 +30,25 @@ public class MetaGeneratedGregtechTools extends GT_MetaGenerated_Tool { ANGLE_GRINDER, "Angle Grinder", "Hand-held electric filing device", - new TOOL_Gregtech_AngleGrinder(), + new ToolAngleGrinder(), GregtechToolDictNames.craftingToolAngleGrinder, ToolDictNames.craftingToolFile, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 2L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 2L)); + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 2L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 2L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 2L)); // Electric Wire Cutter - GregTech_API.registerWireCutter( + GregTechAPI.registerWireCutter( this.addTool( ELECTRIC_SNIPS, "Automatic Snips", "Hand-held electric wire cutter", - new TOOL_Gregtech_ElectricSnips(), + new ToolElectricSnips(), GregtechToolDictNames.craftingToolElectricSnips, ToolDictNames.craftingToolWireCutter, - new TC_Aspects.TC_AspectStack(TC_Aspects.INSTRUMENTUM, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.FABRICO, 4L), - new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 4L))); + new TCAspects.TC_AspectStack(TCAspects.INSTRUMENTUM, 4L), + new TCAspects.TC_AspectStack(TCAspects.FABRICO, 4L), + new TCAspects.TC_AspectStack(TCAspects.ORDO, 4L))); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedItemIDs.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedItemIDs.java new file mode 100644 index 0000000000..72f5c66c58 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/MetaGeneratedItemIDs.java @@ -0,0 +1,47 @@ +package gtPlusPlus.xmod.gregtech.common.items; + +public enum MetaGeneratedItemIDs { + + Shape_Extruder_WindmillShaft(40), + Pellet_RTG_PU238(41), + Pellet_RTG_SR90(42), + Pellet_RTG_PO210(43), + Pellet_RTG_AM241(44), + Battery_RE_EV_Sodium(50), + Battery_RE_EV_Cadmium(52), + Battery_RE_EV_Lithium(54), + Gregtech_Computer_Cube(55), + Battery_Gem_1(66), + Battery_Gem_2(68), + Battery_Gem_3(70), + Cover_Overflow_LV(72), + Cover_Overflow_MV(73), + Cover_Overflow_HV(74), + Cover_Overflow_EV(75), + Cover_Overflow_IV(76), + Compressed_Fusion_Reactor(100), + Laser_Lens_Special(105), + Battery_Casing_Gem_1(106), + Battery_Casing_Gem_2(107), + Battery_Casing_Gem_3(108), + Battery_Casing_Gem_4(109), + Battery_Gem_4(110), + Laser_Lens_WoodsGlass(140), + TransmissionComponent_LV(142), + TransmissionComponent_MV(143), + TransmissionComponent_HV(144), + TransmissionComponent_EV(145), + TransmissionComponent_IV(146), + TransmissionComponent_LuV(147), + TransmissionComponent_ZPM(148), + TransmissionComponent_UV(149), + TransmissionComponent_UHV(150), + Distillus_Upgrade_Chip(151), + Maceration_Upgrade_Chip(152); + + public final int ID; + + MetaGeneratedItemIDs(int ID) { + this.ID = ID; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Choocher.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Choocher.java index f85822750d..be7a0f1c99 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Choocher.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Choocher.java @@ -7,31 +7,31 @@ import net.minecraft.item.ItemStack; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.items.behaviors.Behaviour_None; -import gregtech.common.items.behaviors.Behaviour_Wrench; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.items.behaviors.BehaviourNone; +import gregtech.common.items.behaviors.BehaviourWrench; import gtPlusPlus.core.util.minecraft.NBTUtils; import gtPlusPlus.core.util.minecraft.PlayerUtils; -public class Behaviour_Choocher extends Behaviour_None { +public class Behaviour_Choocher extends BehaviourNone { private boolean isWrench = true; - private final Behaviour_Wrench wrench = new Behaviour_Wrench(150); + private final BehaviourWrench wrench = new BehaviourWrench(150); private final Behaviour_Prospecting_Ex prospecting = new Behaviour_Prospecting_Ex(10, 1250); - private final String mTooltip1 = GT_LanguageManager + private final String mTooltip1 = GTLanguageManager .addStringLocalization("gt.behaviour.choochering1", "Current tool mode: "); - private final String mTooltip2 = GT_LanguageManager + private final String mTooltip2 = GTLanguageManager .addStringLocalization("gt.behaviour.choochering2", "Change tool mode using Shift+Rightclick."); - private final String mTooltipH = GT_LanguageManager + private final String mTooltipH = GTLanguageManager .addStringLocalization("gt.behaviour.prospectingEx", "Usable for Prospecting large areas."); - private final String mTooltipW = GT_LanguageManager + private final String mTooltipW = GTLanguageManager .addStringLocalization("gt.behaviour.wrench", "Rotates Blocks on Rightclick."); public Behaviour_Choocher() {} @Override - public boolean onItemUseFirst(final GT_MetaBase_Item aItem, final ItemStack aStack, final EntityPlayer aPlayer, + public boolean onItemUseFirst(final MetaBaseItem aItem, final ItemStack aStack, final EntityPlayer aPlayer, final World aWorld, final int aX, final int aY, final int aZ, final ForgeDirection side, final float hitX, final float hitY, final float hitZ) { if (aWorld.isRemote) { @@ -64,7 +64,7 @@ public class Behaviour_Choocher extends Behaviour_None { } @Override - public List getAdditionalToolTips(final GT_MetaBase_Item aItem, final List aList, + public List getAdditionalToolTips(final MetaBaseItem aItem, final List aList, final ItemStack aStack) { boolean inWrenchMode; diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Electric_Lighter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Electric_Lighter.java index f3d7f87a86..c458d237bd 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Electric_Lighter.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Electric_Lighter.java @@ -13,37 +13,37 @@ import net.minecraftforge.common.util.ForgeDirection; import codechicken.lib.math.MathHelper; import gregtech.api.enums.SoundResource; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.behaviors.Behaviour_None; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.common.items.behaviors.BehaviourNone; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.entity.projectile.EntityLightningAttack; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.minecraft.NBTUtils; import gtPlusPlus.core.util.minecraft.PlayerUtils; import gtPlusPlus.xmod.gregtech.common.helpers.ChargingHelper; import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechTools; import ic2.api.item.IElectricItemManager; -public class Behaviour_Electric_Lighter extends Behaviour_None { +public class Behaviour_Electric_Lighter extends BehaviourNone { - private final String mTooltip = GT_LanguageManager + private final String mTooltip = GTLanguageManager .addStringLocalization("gt.behaviour.lighter.tooltip", "Can light things on Fire"); - private final String mTooltipUses = GT_LanguageManager + private final String mTooltipUses = GTLanguageManager .addStringLocalization("gt.behaviour.lighter.uses", "Remaining Uses:"); - private final String mTooltipUnstackable = GT_LanguageManager + private final String mTooltipUnstackable = GTLanguageManager .addStringLocalization("gt.behaviour.unstackable", "Not usable when stacked!"); public Behaviour_Electric_Lighter() {} @Override - public boolean onLeftClickEntity(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { + public boolean onLeftClickEntity(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, Entity aEntity) { if (!aPlayer.worldObj.isRemote && aStack != null && aStack.stackSize == 1) { boolean rOutput = false; if (aEntity instanceof EntityCreeper) { if (this.prepare(aStack) || aPlayer.capabilities.isCreativeMode) { - GT_Utility.sendSoundToPlayers( + GTUtility.sendSoundToPlayers( aPlayer.worldObj, SoundResource.FIRE_IGNITE, 1.0F, @@ -62,8 +62,8 @@ public class Behaviour_Electric_Lighter extends Behaviour_None { } @Override - public boolean onItemUse(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, - int aY, int aZ, int ordinalSide, float hitX, float hitY, float hitZ) { + public boolean onItemUse(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, + int aZ, int ordinalSide, float hitX, float hitY, float hitZ) { if (!aWorld.isRemote && aStack != null && aStack.stackSize == 1) { if (aPlayer.isSneaking()) { Logger.INFO("Changing Mode"); @@ -81,8 +81,11 @@ public class Behaviour_Electric_Lighter extends Behaviour_None { boolean aCurrentMode = NBTUtils.getBoolean(aStack, "aFireballMode"); if (aCurrentMode) { // Shoot Lightning Attack - aWorld - .playSoundAtEntity(aPlayer, "random.bow", 0.5F, 0.4F / (CORE.RANDOM.nextFloat() * 0.4F + 0.8F)); + aWorld.playSoundAtEntity( + aPlayer, + "random.bow", + 0.5F, + 0.4F / (GTPPCore.RANDOM.nextFloat() * 0.4F + 0.8F)); if (!aWorld.isRemote) { aWorld.spawnEntityInWorld(new EntityLightningAttack(aWorld, aPlayer, hitX, hitY, hitZ)); } @@ -94,12 +97,12 @@ public class Behaviour_Electric_Lighter extends Behaviour_None { aX += tDirection.offsetX; aY += tDirection.offsetY; aZ += tDirection.offsetZ; - if (GT_Utility.isBlockAir(aWorld, aX, aY, aZ) + if (GTUtility.isBlockAir(aWorld, aX, aY, aZ) && aPlayer.canPlayerEdit(aX, aY, aZ, ordinalSide, aStack)) { Logger.WARNING("Preparing Lighter b"); if (this.prepare(aStack) || aPlayer.capabilities.isCreativeMode) { Logger.WARNING("Preparing Lighter c"); - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.FIRE_IGNITE, 1.0F, 1.0F, aX, aY, aZ); + GTUtility.sendSoundToPlayers(aWorld, SoundResource.FIRE_IGNITE, 1.0F, 1.0F, aX, aY, aZ); aWorld.setBlock(aX, aY, aZ, Blocks.fire); rOutput = true; // ItemNBT.setLighterFuel(aStack, tFuelAmount); @@ -113,7 +116,7 @@ public class Behaviour_Electric_Lighter extends Behaviour_None { return false; } - public boolean onItemUseFirst(GT_MetaBase_Item aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, + public boolean onItemUseFirst(MetaBaseItem aItem, ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int ordinalSide, float hitX, float hitY, float hitZ) { if (!aWorld.isRemote && aStack != null && aStack.stackSize == 1) { if (aPlayer.isSneaking()) { @@ -132,8 +135,11 @@ public class Behaviour_Electric_Lighter extends Behaviour_None { boolean aCurrentMode = NBTUtils.getBoolean(aStack, "aFireballMode"); if (aCurrentMode) { // Shoot Lightning Attack - aWorld - .playSoundAtEntity(aPlayer, "random.bow", 0.5F, 0.4F / (CORE.RANDOM.nextFloat() * 0.4F + 0.8F)); + aWorld.playSoundAtEntity( + aPlayer, + "random.bow", + 0.5F, + 0.4F / (GTPPCore.RANDOM.nextFloat() * 0.4F + 0.8F)); if (!aWorld.isRemote) { aWorld.spawnEntityInWorld(new EntityLightningAttack(aWorld, aPlayer, hitX, hitY, hitZ)); } @@ -145,12 +151,12 @@ public class Behaviour_Electric_Lighter extends Behaviour_None { aX += tDirection.offsetX; aY += tDirection.offsetY; aZ += tDirection.offsetZ; - if (GT_Utility.isBlockAir(aWorld, aX, aY, aZ) + if (GTUtility.isBlockAir(aWorld, aX, aY, aZ) && aPlayer.canPlayerEdit(aX, aY, aZ, ordinalSide, aStack)) { Logger.WARNING("Preparing Lighter b"); if (this.prepare(aStack) || aPlayer.capabilities.isCreativeMode) { Logger.WARNING("Preparing Lighter c"); - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.FIRE_IGNITE, 1.0F, 1.0F, aX, aY, aZ); + GTUtility.sendSoundToPlayers(aWorld, SoundResource.FIRE_IGNITE, 1.0F, 1.0F, aX, aY, aZ); aWorld.setBlock(aX, aY, aZ, Blocks.fire); rOutput = true; // ItemNBT.setLighterFuel(aStack, tFuelAmount); @@ -191,7 +197,7 @@ public class Behaviour_Electric_Lighter extends Behaviour_None { private void useUp(ItemStack aStack) {} @Override - public List getAdditionalToolTips(GT_MetaBase_Item aItem, List aList, ItemStack aStack) { + public List getAdditionalToolTips(MetaBaseItem aItem, List aList, ItemStack aStack) { aList.add(this.mTooltip); int aUses = 0; if (aStack != null) { diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Prospecting_Ex.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Prospecting_Ex.java index 5749204296..f63da57f1c 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Prospecting_Ex.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/behaviours/Behaviour_Prospecting_Ex.java @@ -11,20 +11,20 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.IFluidBlock; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.enums.Materials; import gregtech.api.enums.SoundResource; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.items.GT_MetaGenerated_Tool; +import gregtech.api.items.MetaBaseItem; +import gregtech.api.items.MetaGeneratedTool; import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.blocks.GT_Block_Ores; -import gregtech.common.blocks.GT_TileEntity_Ores; -import gregtech.common.items.behaviors.Behaviour_Prospecting; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.blocks.BlockOres; +import gregtech.common.blocks.TileEntityOres; +import gregtech.common.items.behaviors.BehaviourProspecting; -public class Behaviour_Prospecting_Ex extends Behaviour_Prospecting { +public class Behaviour_Prospecting_Ex extends BehaviourProspecting { private final int mVanillaCosts; private final int mEUCosts; @@ -36,7 +36,7 @@ public class Behaviour_Prospecting_Ex extends Behaviour_Prospecting { } @Override - public boolean onItemUseFirst(final GT_MetaBase_Item aItem, final ItemStack aStack, final EntityPlayer aPlayer, + public boolean onItemUseFirst(final MetaBaseItem aItem, final ItemStack aStack, final EntityPlayer aPlayer, final World aWorld, final int aX, final int aY, final int aZ, final ForgeDirection side, final float hitX, final float hitY, final float hitZ) { if (aWorld.isRemote) { @@ -48,28 +48,28 @@ public class Behaviour_Prospecting_Ex extends Behaviour_Prospecting { } final byte aMeta = (byte) aWorld.getBlockMetadata(aX, aY, aZ); - ItemData tAssotiation = GT_OreDictUnificator.getAssociation(new ItemStack(aBlock, 1, aMeta)); + ItemData tAssotiation = GTOreDictUnificator.getAssociation(new ItemStack(aBlock, 1, aMeta)); if ((tAssotiation != null) && (tAssotiation.mPrefix.toString() .startsWith("ore"))) { - GT_Utility + GTUtility .sendChatToPlayer(aPlayer, "This is " + tAssotiation.mMaterial.mMaterial.mDefaultLocalName + " Ore."); - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_ANVIL_USE, 1.0F, -1.0F, aX, aY, aZ); + GTUtility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_ANVIL_USE, 1.0F, -1.0F, aX, aY, aZ); return true; } if ((aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.stone)) - || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTech_API.sBlockGranites)) + || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, GregTechAPI.sBlockGranites)) || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.netherrack)) || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.end_stone)) || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.dirt)) || (aBlock.isReplaceableOreGen(aWorld, aX, aY, aZ, Blocks.grass))) { - if (GT_ModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { - GT_Utility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_ANVIL_USE, 1.0F, -1.0F, aX, aY, aZ); + if (GTModHandler.damageOrDechargeItem(aStack, this.mVanillaCosts, this.mEUCosts, aPlayer)) { + GTUtility.sendSoundToPlayers(aWorld, SoundResource.RANDOM_ANVIL_USE, 1.0F, -1.0F, aX, aY, aZ); int tX = aX; int tY = aY; int tZ = aZ; int tMetaID = 0; - final int tQuality = ((aItem instanceof GT_MetaGenerated_Tool) - ? ((GT_MetaGenerated_Tool) aItem).getHarvestLevel(aStack, "") + final int tQuality = ((aItem instanceof MetaGeneratedTool) + ? ((MetaGeneratedTool) aItem).getHarvestLevel(aStack, "") : 0) * 3; int i = 0; @@ -80,23 +80,23 @@ public class Behaviour_Prospecting_Ex extends Behaviour_Prospecting { final Block tBlock = aWorld.getBlock(tX, tY, tZ); if ((tBlock == Blocks.lava) || (tBlock == Blocks.flowing_lava)) { - GT_Utility.sendChatToPlayer(aPlayer, "There is Lava behind this Block."); + GTUtility.sendChatToPlayer(aPlayer, "There is Lava behind this Block."); break; } if ((tBlock == Blocks.water) || (tBlock == Blocks.flowing_water) || ((tBlock instanceof IFluidBlock))) { - GT_Utility.sendChatToPlayer(aPlayer, "There is a Liquid behind this Block."); + GTUtility.sendChatToPlayer(aPlayer, "There is a Liquid behind this Block."); break; } - if ((tBlock == Blocks.monster_egg) || (!GT_Utility.hasBlockHitBox(aWorld, tX, tY, tZ))) { - GT_Utility.sendChatToPlayer(aPlayer, "There is an Air Pocket behind this Block."); + if ((tBlock == Blocks.monster_egg) || (!GTUtility.hasBlockHitBox(aWorld, tX, tY, tZ))) { + GTUtility.sendChatToPlayer(aPlayer, "There is an Air Pocket behind this Block."); break; } if (tBlock != aBlock) { if (i >= 4) { break; } - GT_Utility.sendChatToPlayer(aPlayer, "Material is changing behind this Block."); + GTUtility.sendChatToPlayer(aPlayer, "Material is changing behind this Block."); break; } } @@ -107,13 +107,13 @@ public class Behaviour_Prospecting_Ex extends Behaviour_Prospecting { tY = (aY - 4 - tQuality) + tRandom.nextInt(j); tZ = (aZ - 4 - tQuality) + tRandom.nextInt(j); final Block tBlock = aWorld.getBlock(tX, tY, tZ); - if ((tBlock instanceof GT_Block_Ores)) { + if ((tBlock instanceof BlockOres)) { final TileEntity tTileEntity = aWorld.getTileEntity(tX, tY, tZ); - if ((tTileEntity instanceof GT_TileEntity_Ores)) { - final Materials tMaterial = GregTech_API.sGeneratedMaterials[(((GT_TileEntity_Ores) tTileEntity).mMetaData + if ((tTileEntity instanceof TileEntityOres)) { + final Materials tMaterial = GregTechAPI.sGeneratedMaterials[(((TileEntityOres) tTileEntity).mMetaData % 1000)]; if ((tMaterial != null) && (tMaterial != Materials._NULL)) { - GT_Utility.sendChatToPlayer( + GTUtility.sendChatToPlayer( aPlayer, "Found traces of " + tMaterial.mDefaultLocalName + " Ore."); return true; @@ -121,17 +121,17 @@ public class Behaviour_Prospecting_Ex extends Behaviour_Prospecting { } } else { tMetaID = aWorld.getBlockMetadata(tX, tY, tZ); - tAssotiation = GT_OreDictUnificator.getAssociation(new ItemStack(tBlock, 1, tMetaID)); + tAssotiation = GTOreDictUnificator.getAssociation(new ItemStack(tBlock, 1, tMetaID)); if ((tAssotiation != null) && (tAssotiation.mPrefix.toString() .startsWith("ore"))) { - GT_Utility.sendChatToPlayer( + GTUtility.sendChatToPlayer( aPlayer, "Found traces of " + tAssotiation.mMaterial.mMaterial.mDefaultLocalName + " Ore."); return true; } } } - GT_Utility.sendChatToPlayer(aPlayer, "No Ores found."); + GTUtility.sendChatToPlayer(aPlayer, "No Ores found."); } return true; } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/covers/MetaItemCoverCasings.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/covers/MetaItemCoverCasings.java index 987924952a..399554d306 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/items/covers/MetaItemCoverCasings.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/items/covers/MetaItemCoverCasings.java @@ -8,7 +8,7 @@ import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.IIcon; import net.minecraft.util.StatCollector; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Textures; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.xmod.gregtech.common.items.MetaCustomCoverItem; @@ -45,6 +45,6 @@ public class MetaItemCoverCasings extends MetaCustomCoverItem { public String getItemStackDisplayName(final ItemStack tItem) { return EnumChatFormatting.LIGHT_PURPLE + StatCollector.translateToLocalFormatted( "item.itemCustomMetaCover.miscutils.GtMachineCasings", - GT_Values.VOLTAGE_NAMES[MathUtils.balance(tItem.getItemDamage(), 0, GT_Values.VOLTAGE_NAMES.length - 1)]); // super.getItemStackDisplayName(tItem); + GTValues.VOLTAGE_NAMES[MathUtils.balance(tItem.getItemDamage(), 0, GTValues.VOLTAGE_NAMES.length - 1)]); // super.getItemStackDisplayName(tItem); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/render/CapeRenderer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/render/CapeRenderer.java new file mode 100644 index 0000000000..f9ec4b9433 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/render/CapeRenderer.java @@ -0,0 +1,500 @@ +package gtPlusPlus.xmod.gregtech.common.render; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.Date; +import java.util.List; +import java.util.concurrent.ForkJoinPool; + +import net.minecraft.client.entity.AbstractClientPlayer; +import net.minecraft.client.model.ModelBiped; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.client.renderer.entity.RenderPlayer; +import net.minecraft.potion.Potion; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.event.RenderPlayerEvent; + +import org.apache.commons.io.IOUtils; +import org.lwjgl.opengl.GL11; + +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.api.objects.data.Pair; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.lib.GTPPCore.ConfigSwitches; +import gtPlusPlus.core.proxy.ClientProxy; +import gtPlusPlus.core.util.data.AES; +import gtPlusPlus.core.util.data.FileUtils; +import gtPlusPlus.core.util.math.MathUtils; + +public class CapeRenderer extends RenderPlayer { + + private static final ResourceLocation[] mCapes = { new ResourceLocation("miscutils:textures/OrangeHD.png"), + new ResourceLocation("miscutils:textures/FancyCapeHD.png"), + new ResourceLocation("miscutils:textures/TesterCapeHD.png"), + new ResourceLocation("miscutils:textures/PatreonCapeHD.png"), + new ResourceLocation("miscutils:textures/DevCapeHD.png"), }; + + private final boolean mInit; + + public CapeRenderer() { + mInit = init(); + } + + private boolean init() { + if (mInit) { + return false; + } + return CapeUtils.init(); + } + + private static boolean hasResourceChecked = false; + private static boolean hasSetRenderer = false; + private boolean hasCape = false; + private ResourceLocation tResource = null; + + public synchronized void receiveRenderSpecialsEvent(RenderPlayerEvent.Specials.Pre aEvent) { + + // Check we have set Render Manager + if (this.renderManager == null) { + hasSetRenderer = false; + } + + // Set Render Manager + if (!hasSetRenderer) { + if (RenderManager.instance != null) { + setRenderManager(RenderManager.instance); + hasSetRenderer = true; + } + } + + // Actually Render + if (hasSetRenderer) { + + // We have capes turned off, so let's not render. + if (!ConfigSwitches.enableCustomCapes) { + return; + } + + if (!CapeUtils.mapsPopulated) { + if (!CapeUtils.cacheReady) { + return; + } + CapeUtils.writeCacheToMaps(); + CapeUtils.mapsPopulated = true; + } + + // We have already checked if this player has a cape, but since they do not, we best not render. + if (hasResourceChecked) { + if (!hasCape && !GTPPCore.DEVENV) { + return; + } + } + + // Allocate client player object + AbstractClientPlayer aPlayer = (AbstractClientPlayer) aEvent.entityPlayer; + + // Make sure we don't keep checking on clients who dont have capes. + if (!hasResourceChecked) { + + // Get players UUID + String aPlayerUUID = aPlayer != null ? aPlayer.getGameProfile() + .getId() + .toString() : "BAD"; + + // If for whatever reason this fails, we just exit early. + if (aPlayerUUID.equals("BAD")) { + return; + } + + // Automatically allocate a Dev cape while in Dev mode. + if (tResource == null && GTPPCore.DEVENV) { + tResource = mCapes[4]; + hasCape = true; + } + + String aPlayerName = ClientProxy.playerName; + + // Check cape lists for the cape this player owns. + if (!hasCape) { + for (Pair aData : CapeUtils.mOrangeCapes) { + if (aData.getKey() + .equals(aPlayerUUID) || aPlayerName.equals(aData.getValue())) { + tResource = mCapes[0]; + hasCape = true; + break; + } + } + } + if (!hasCape) { + for (Pair aData : CapeUtils.mMiscCapes) { + if (aData.getKey() + .equals(aPlayerUUID) || aPlayerName.equals(aData.getValue())) { + tResource = mCapes[1]; + hasCape = true; + break; + } + } + } + if (!hasCape) { + for (Pair aData : CapeUtils.mBetaTestCapes) { + if (aData.getKey() + .equals(aPlayerUUID) || aPlayerName.equals(aData.getValue())) { + tResource = mCapes[2]; + hasCape = true; + break; + } + } + } + if (!hasCape) { + for (Pair aData : CapeUtils.mPatreonCapes) { + if (aData.getKey() + .equals(aPlayerUUID) || aPlayerName.equals(aData.getValue())) { + tResource = mCapes[3]; + hasCape = true; + break; + } + } + } + if (!hasCape) { + for (Pair aData : CapeUtils.mDevCapes) { + if (aData.getKey() + .equals(aPlayerUUID) || aPlayerName.equals(aData.getValue())) { + tResource = mCapes[4]; + hasCape = true; + break; + } + } + } + hasResourceChecked = true; + } + + if (hasResourceChecked) { + // We have met all the conditions, let's render that cape. + renderCapeOnPlayer(aEvent, aPlayer); + } + } + } + + private boolean renderCapeOnPlayer(RenderPlayerEvent.Specials.Pre aEvent, AbstractClientPlayer aPlayer) { + float aPartialTicks = aEvent.partialRenderTick; + try { + if (tResource == null && GTPPCore.DEVENV) { + tResource = mCapes[3]; + } + + // If player is invisible, don't render. + if (GTUtility.getFullInvisibility(aPlayer) || aPlayer.isInvisible() + || GTUtility.getPotion(aPlayer, Integer.valueOf(Potion.invisibility.id))) { + aEvent.setCanceled(true); + return false; + } + + if ((tResource != null) && (!aPlayer.getHideCape())) { + bindTexture(tResource); + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 0.0F, 0.125F); + double d0 = aPlayer.field_71091_bM + (aPlayer.field_71094_bP - aPlayer.field_71091_bM) * aPartialTicks + - (aPlayer.prevPosX + (aPlayer.posX - aPlayer.prevPosX) * aPartialTicks); + double d1 = aPlayer.field_71096_bN + (aPlayer.field_71095_bQ - aPlayer.field_71096_bN) * aPartialTicks + - (aPlayer.prevPosY + (aPlayer.posY - aPlayer.prevPosY) * aPartialTicks); + double d2 = aPlayer.field_71097_bO + (aPlayer.field_71085_bR - aPlayer.field_71097_bO) * aPartialTicks + - (aPlayer.prevPosZ + (aPlayer.posZ - aPlayer.prevPosZ) * aPartialTicks); + float f6 = aPlayer.prevRenderYawOffset + + (aPlayer.renderYawOffset - aPlayer.prevRenderYawOffset) * aPartialTicks; + double d3 = MathHelper.sin(f6 * GTPPCore.PI / 180.0F); + double d4 = -MathHelper.cos(f6 * GTPPCore.PI / 180.0F); + float f7 = (float) d1 * 10.0F; + float f8 = (float) (d0 * d3 + d2 * d4) * 100.0F; + float f9 = (float) (d0 * d4 - d2 * d3) * 100.0F; + if (f7 < -6.0F) { + f7 = -6.0F; + } + if (f7 > 32.0F) { + f7 = 32.0F; + } + if (f8 < 0.0F) { + f8 = 0.0F; + } + float f10 = aPlayer.prevCameraYaw + (aPlayer.cameraYaw - aPlayer.prevCameraYaw) * aPartialTicks; + f7 += MathHelper.sin( + (aPlayer.prevDistanceWalkedModified + + (aPlayer.distanceWalkedModified - aPlayer.prevDistanceWalkedModified) * aPartialTicks) * 6.0F) + * 32.0F + * f10; + if (aPlayer.isSneaking()) { + f7 += 25.0F; + } + GL11.glRotatef(6.0F + f8 / 2.0F + f7, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(f9 / 2.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-f9 / 2.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + ((ModelBiped) this.mainModel).renderCloak(0.0625F); + GL11.glPopMatrix(); + return true; + } + } catch (Throwable e) { + + } + return false; + } + + private static class CapeUtils { + + private static char SPLIT_CHARACTER = '§'; + private static AES sAES; + private static volatile boolean cacheReady = false; + private static boolean mapsPopulated = false; + + // UUID - Username + private static final AutoMap> mOrangeCapes = new AutoMap<>(); + private static final AutoMap> mMiscCapes = new AutoMap<>(); + private static final AutoMap> mBetaTestCapes = new AutoMap<>(); + private static final AutoMap> mPatreonCapes = new AutoMap<>(); + private static final AutoMap> mDevCapes = new AutoMap<>(); + + private static boolean init() { + CapeUtils.handleOldCapeCache(); + if (GTPPCore.DEVENV) { + return true; + } + ForkJoinPool.commonPool() + .execute(() -> { + try { + if (shouldDownloadCapeList()) { + downloadCapeList(); + } + } catch (Exception ignored) {} + cacheReady = true; + }); + return true; + } + + private static boolean shouldDownloadCapeList() { + if (!doesCapeCacheExistLocally()) { + return true; + } + if (isCapeCacheWeekOld()) { + return true; + } + return false; + } + + private static boolean isCapeCacheWeekOld() { + if (!doesCapeCacheExistLocally()) { + return true; + } else { + File dat = CapeUtils.getCapeCache(); + Date dateLastMod = new Date(dat.lastModified()); + Date dateNow = new Date(System.currentTimeMillis() - (7l * 24 * 60 * 60 * 1000)); + if (dateLastMod.before(dateNow)) { + return true; + } + } + return false; + } + + private static void downloadCapeList() { + try { + File dat = getCapeCache(); + File temp = allocateTempFile(); + InputStream inputStream = new URL("https://alkcorp.overminddl1.com/CapeCache.dat").openStream(); + FileOutputStream fileOS = new FileOutputStream(temp); + IOUtils.copy(inputStream, fileOS); + if (isDownloadedCapeListBigger(temp)) { + fileOS = new FileOutputStream(dat); + IOUtils.copy(inputStream, fileOS); + } + } catch (Throwable t) { + Logger.INFO("Unable to download GT++ cape list."); + } + } + + private static boolean isDownloadedCapeListBigger(File aFile) { + double aExistingFileSize = (doesCapeCacheExistLocally() ? getCapeCache().length() : 0); + double aNewFileSize = aFile.length(); + if (aNewFileSize > aExistingFileSize) { + return true; + } + return false; + } + + private static void handleOldCapeCache() { + File aCacheFile = FileUtils.getFile("GTPP", "dat"); + if (FileUtils.doesFileExist(aCacheFile)) { + aCacheFile.delete(); + } + } + + private static boolean doesCapeCacheExistLocally() { + File aCacheFile = FileUtils.getFile("CapeCache", "dat"); + if (FileUtils.doesFileExist(aCacheFile)) { + return true; + } + return false; + } + + private static File getCapeCache() { + File aCacheFile = FileUtils.getFile("CapeCache", "dat"); + if (FileUtils.doesFileExist(aCacheFile)) { + FileUtils.createFile(aCacheFile); + } + return aCacheFile; + } + + public static final List getDataFromCache() { + File aCacheFile = getCapeCache(); + List aCache = FileUtils.readLines(aCacheFile); + if (aCache != null && !aCache.isEmpty()) { + return aCache; + } + return new AutoMap<>(); + } + + private static File allocateTempFile() { + File tempFile = null; + try { + tempFile = File.createTempFile("gtpp-", null); + } catch (IOException e) { + e.printStackTrace(); + } + if (tempFile == null) { + tempFile = FileUtils + .createFile("", "gtpp-" + MathUtils.randInt(Short.MAX_VALUE, (Integer.MAX_VALUE / 2)), "tmp"); + } + tempFile.deleteOnExit(); + return tempFile; + } + + public static final void writeCacheToMaps() { + List aCacheData = getDataFromCache(); + if (aCacheData != null && !aCacheData.isEmpty()) { + if (sAES == null) { + sAES = new AES(); + } + AutoMap aDecodedData = new AutoMap<>(); + for (String aToDecode : aCacheData) { + aDecodedData.put(sAES.decode(aToDecode)); + } + if (!aDecodedData.isEmpty()) { + AutoMap> aCapeType1 = new AutoMap<>(); + AutoMap> aCapeType2 = new AutoMap<>(); + AutoMap> aCapeType3 = new AutoMap<>(); + AutoMap> aCapeType4 = new AutoMap<>(); + AutoMap> aCapeType5 = new AutoMap<>(); + boolean didProcessStringData = false; + Logger.INFO("Decoded String Count: " + aDecodedData.size()); + for (String aToSplit : aDecodedData) { + String[] aSplitData = aToSplit.split("" + SPLIT_CHARACTER); + if (aSplitData != null && aSplitData.length >= 2) { + if (aSplitData[0] != null) { + Integer aCapeTypeID2 = Integer.parseInt(aSplitData[0]); + if (aCapeTypeID2 != null) { + int aCapeTypeID = aCapeTypeID2; + Pair aFinalString = new Pair<>( + "UUID: " + aSplitData[1], + "Username: " + + (aSplitData[2] != null && aSplitData[0].length() > 0 ? aSplitData[2] + : "Not Specified")); + Logger.INFO("Cape Type: " + aCapeTypeID); + switch (aCapeTypeID) { + case 0 -> { + aCapeType1.add(aFinalString); + Logger.INFO( + "Added user to map " + aCapeTypeID + + ", map now holds " + + aCapeType1.size() + + " users."); + } + case 1 -> { + aCapeType2.add(aFinalString); + Logger.INFO( + "Added user to map " + aCapeTypeID + + ", map now holds " + + aCapeType2.size() + + " users."); + } + case 2 -> { + aCapeType3.add(aFinalString); + Logger.INFO( + "Added user to map " + aCapeTypeID + + ", map now holds " + + aCapeType3.size() + + " users."); + } + case 3 -> { + aCapeType4.add(aFinalString); + Logger.INFO( + "Added user to map " + aCapeTypeID + + ", map now holds " + + aCapeType4.size() + + " users."); + } + case 4 -> { + aCapeType5.add(aFinalString); + Logger.INFO( + "Added user to map " + aCapeTypeID + + ", map now holds " + + aCapeType5.size() + + " users."); + } + default -> {} + } + } + } + } + } + if (!aCapeType1.isEmpty() || !aCapeType2.isEmpty() + || !aCapeType3.isEmpty() + || !aCapeType4.isEmpty() + || !aCapeType5.isEmpty()) { + didProcessStringData = true; + } else { + // did not process any data + } + if (didProcessStringData) { + if (!aCapeType1.isEmpty()) { + for (Pair aUser : aCapeType1) { + Logger.INFO("Adding Generic cape for " + aUser.getKey()); + mOrangeCapes.add(aUser); + } + } + if (!aCapeType2.isEmpty()) { + for (Pair aUser : aCapeType2) { + Logger.INFO("Adding Blue cape for " + aUser.getKey()); + mMiscCapes.add(aUser); + } + } + if (!aCapeType3.isEmpty()) { + for (Pair aUser : aCapeType3) { + Logger.INFO("Adding Beta cape for " + aUser.getKey()); + mBetaTestCapes.add(aUser); + } + } + if (!aCapeType4.isEmpty()) { + for (Pair aUser : aCapeType4) { + Logger.INFO("Adding Patreon cape for " + aUser.getKey()); + mPatreonCapes.add(aUser); + } + } + if (!aCapeType5.isEmpty()) { + for (Pair aUser : aCapeType5) { + Logger.INFO("Adding Dev cape for " + aUser.getKey()); + mDevCapes.add(aUser); + } + } + } + } else { + // No data decoded + } + } else { + // Nothing was cached? + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/render/FlaskRenderer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/render/FlaskRenderer.java new file mode 100644 index 0000000000..20d904ae80 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/render/FlaskRenderer.java @@ -0,0 +1,107 @@ +package gtPlusPlus.xmod.gregtech.common.render; + +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; + +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.common.items.ItemVolumetricFlask; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import ic2.core.util.DrawUtil; + +@SideOnly(cpw.mods.fml.relauncher.Side.CLIENT) +public final class FlaskRenderer implements net.minecraftforge.client.IItemRenderer { + + public FlaskRenderer() { + MinecraftForgeClient.registerItemRenderer(GregtechItemList.VOLUMETRIC_FLASK_8k.getItem(), this); + MinecraftForgeClient.registerItemRenderer(GregtechItemList.VOLUMETRIC_FLASK_32k.getItem(), this); + } + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type != ItemRenderType.FIRST_PERSON_MAP; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, IItemRenderer.ItemRendererHelper helper) { + return type == ItemRenderType.ENTITY; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + ItemVolumetricFlask cell = (ItemVolumetricFlask) 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); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_CapeRenderer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_CapeRenderer.java deleted file mode 100644 index a281a205d2..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_CapeRenderer.java +++ /dev/null @@ -1,500 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.render; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.util.Date; -import java.util.List; -import java.util.concurrent.ForkJoinPool; - -import net.minecraft.client.entity.AbstractClientPlayer; -import net.minecraft.client.model.ModelBiped; -import net.minecraft.client.renderer.entity.RenderManager; -import net.minecraft.client.renderer.entity.RenderPlayer; -import net.minecraft.potion.Potion; -import net.minecraft.util.MathHelper; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.client.event.RenderPlayerEvent; - -import org.apache.commons.io.IOUtils; -import org.lwjgl.opengl.GL11; - -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.api.objects.data.Pair; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.lib.CORE.ConfigSwitches; -import gtPlusPlus.core.proxy.ClientProxy; -import gtPlusPlus.core.util.data.AES; -import gtPlusPlus.core.util.data.FileUtils; -import gtPlusPlus.core.util.math.MathUtils; - -public class GTPP_CapeRenderer extends RenderPlayer { - - private static final ResourceLocation[] mCapes = { new ResourceLocation("miscutils:textures/OrangeHD.png"), - new ResourceLocation("miscutils:textures/FancyCapeHD.png"), - new ResourceLocation("miscutils:textures/TesterCapeHD.png"), - new ResourceLocation("miscutils:textures/PatreonCapeHD.png"), - new ResourceLocation("miscutils:textures/DevCapeHD.png"), }; - - private final boolean mInit; - - public GTPP_CapeRenderer() { - mInit = init(); - } - - private boolean init() { - if (mInit) { - return false; - } - return CapeUtils.init(); - } - - private static boolean hasResourceChecked = false; - private static boolean hasSetRenderer = false; - private boolean hasCape = false; - private ResourceLocation tResource = null; - - public synchronized void receiveRenderSpecialsEvent(RenderPlayerEvent.Specials.Pre aEvent) { - - // Check we have set Render Manager - if (this.renderManager == null) { - hasSetRenderer = false; - } - - // Set Render Manager - if (!hasSetRenderer) { - if (RenderManager.instance != null) { - setRenderManager(RenderManager.instance); - hasSetRenderer = true; - } - } - - // Actually Render - if (hasSetRenderer) { - - // We have capes turned off, so let's not render. - if (!ConfigSwitches.enableCustomCapes) { - return; - } - - if (!CapeUtils.mapsPopulated) { - if (!CapeUtils.cacheReady) { - return; - } - CapeUtils.writeCacheToMaps(); - CapeUtils.mapsPopulated = true; - } - - // We have already checked if this player has a cape, but since they do not, we best not render. - if (hasResourceChecked) { - if (!hasCape && !CORE.DEVENV) { - return; - } - } - - // Allocate client player object - AbstractClientPlayer aPlayer = (AbstractClientPlayer) aEvent.entityPlayer; - - // Make sure we don't keep checking on clients who dont have capes. - if (!hasResourceChecked) { - - // Get players UUID - String aPlayerUUID = aPlayer != null ? aPlayer.getGameProfile() - .getId() - .toString() : "BAD"; - - // If for whatever reason this fails, we just exit early. - if (aPlayerUUID.equals("BAD")) { - return; - } - - // Automatically allocate a Dev cape while in Dev mode. - if (tResource == null && CORE.DEVENV) { - tResource = mCapes[4]; - hasCape = true; - } - - String aPlayerName = ClientProxy.playerName; - - // Check cape lists for the cape this player owns. - if (!hasCape) { - for (Pair aData : CapeUtils.mOrangeCapes) { - if (aData.getKey() - .equals(aPlayerUUID) || aPlayerName.equals(aData.getValue())) { - tResource = mCapes[0]; - hasCape = true; - break; - } - } - } - if (!hasCape) { - for (Pair aData : CapeUtils.mMiscCapes) { - if (aData.getKey() - .equals(aPlayerUUID) || aPlayerName.equals(aData.getValue())) { - tResource = mCapes[1]; - hasCape = true; - break; - } - } - } - if (!hasCape) { - for (Pair aData : CapeUtils.mBetaTestCapes) { - if (aData.getKey() - .equals(aPlayerUUID) || aPlayerName.equals(aData.getValue())) { - tResource = mCapes[2]; - hasCape = true; - break; - } - } - } - if (!hasCape) { - for (Pair aData : CapeUtils.mPatreonCapes) { - if (aData.getKey() - .equals(aPlayerUUID) || aPlayerName.equals(aData.getValue())) { - tResource = mCapes[3]; - hasCape = true; - break; - } - } - } - if (!hasCape) { - for (Pair aData : CapeUtils.mDevCapes) { - if (aData.getKey() - .equals(aPlayerUUID) || aPlayerName.equals(aData.getValue())) { - tResource = mCapes[4]; - hasCape = true; - break; - } - } - } - hasResourceChecked = true; - } - - if (hasResourceChecked) { - // We have met all the conditions, let's render that cape. - renderCapeOnPlayer(aEvent, aPlayer); - } - } - } - - private boolean renderCapeOnPlayer(RenderPlayerEvent.Specials.Pre aEvent, AbstractClientPlayer aPlayer) { - float aPartialTicks = aEvent.partialRenderTick; - try { - if (tResource == null && CORE.DEVENV) { - tResource = mCapes[3]; - } - - // If player is invisible, don't render. - if (GT_Utility.getFullInvisibility(aPlayer) || aPlayer.isInvisible() - || GT_Utility.getPotion(aPlayer, Integer.valueOf(Potion.invisibility.id))) { - aEvent.setCanceled(true); - return false; - } - - if ((tResource != null) && (!aPlayer.getHideCape())) { - bindTexture(tResource); - GL11.glPushMatrix(); - GL11.glTranslatef(0.0F, 0.0F, 0.125F); - double d0 = aPlayer.field_71091_bM + (aPlayer.field_71094_bP - aPlayer.field_71091_bM) * aPartialTicks - - (aPlayer.prevPosX + (aPlayer.posX - aPlayer.prevPosX) * aPartialTicks); - double d1 = aPlayer.field_71096_bN + (aPlayer.field_71095_bQ - aPlayer.field_71096_bN) * aPartialTicks - - (aPlayer.prevPosY + (aPlayer.posY - aPlayer.prevPosY) * aPartialTicks); - double d2 = aPlayer.field_71097_bO + (aPlayer.field_71085_bR - aPlayer.field_71097_bO) * aPartialTicks - - (aPlayer.prevPosZ + (aPlayer.posZ - aPlayer.prevPosZ) * aPartialTicks); - float f6 = aPlayer.prevRenderYawOffset - + (aPlayer.renderYawOffset - aPlayer.prevRenderYawOffset) * aPartialTicks; - double d3 = MathHelper.sin(f6 * CORE.PI / 180.0F); - double d4 = -MathHelper.cos(f6 * CORE.PI / 180.0F); - float f7 = (float) d1 * 10.0F; - float f8 = (float) (d0 * d3 + d2 * d4) * 100.0F; - float f9 = (float) (d0 * d4 - d2 * d3) * 100.0F; - if (f7 < -6.0F) { - f7 = -6.0F; - } - if (f7 > 32.0F) { - f7 = 32.0F; - } - if (f8 < 0.0F) { - f8 = 0.0F; - } - float f10 = aPlayer.prevCameraYaw + (aPlayer.cameraYaw - aPlayer.prevCameraYaw) * aPartialTicks; - f7 += MathHelper.sin( - (aPlayer.prevDistanceWalkedModified - + (aPlayer.distanceWalkedModified - aPlayer.prevDistanceWalkedModified) * aPartialTicks) * 6.0F) - * 32.0F - * f10; - if (aPlayer.isSneaking()) { - f7 += 25.0F; - } - GL11.glRotatef(6.0F + f8 / 2.0F + f7, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(f9 / 2.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(-f9 / 2.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); - ((ModelBiped) this.mainModel).renderCloak(0.0625F); - GL11.glPopMatrix(); - return true; - } - } catch (Throwable e) { - - } - return false; - } - - private static class CapeUtils { - - private static char SPLIT_CHARACTER = '§'; - private static AES sAES; - private static volatile boolean cacheReady = false; - private static boolean mapsPopulated = false; - - // UUID - Username - private static final AutoMap> mOrangeCapes = new AutoMap<>(); - private static final AutoMap> mMiscCapes = new AutoMap<>(); - private static final AutoMap> mBetaTestCapes = new AutoMap<>(); - private static final AutoMap> mPatreonCapes = new AutoMap<>(); - private static final AutoMap> mDevCapes = new AutoMap<>(); - - private static boolean init() { - CapeUtils.handleOldCapeCache(); - if (CORE.DEVENV) { - return true; - } - ForkJoinPool.commonPool() - .execute(() -> { - try { - if (shouldDownloadCapeList()) { - downloadCapeList(); - } - } catch (Exception ignored) {} - cacheReady = true; - }); - return true; - } - - private static boolean shouldDownloadCapeList() { - if (!doesCapeCacheExistLocally()) { - return true; - } - if (isCapeCacheWeekOld()) { - return true; - } - return false; - } - - private static boolean isCapeCacheWeekOld() { - if (!doesCapeCacheExistLocally()) { - return true; - } else { - File dat = CapeUtils.getCapeCache(); - Date dateLastMod = new Date(dat.lastModified()); - Date dateNow = new Date(System.currentTimeMillis() - (7l * 24 * 60 * 60 * 1000)); - if (dateLastMod.before(dateNow)) { - return true; - } - } - return false; - } - - private static void downloadCapeList() { - try { - File dat = getCapeCache(); - File temp = allocateTempFile(); - InputStream inputStream = new URL("https://alkcorp.overminddl1.com/CapeCache.dat").openStream(); - FileOutputStream fileOS = new FileOutputStream(temp); - IOUtils.copy(inputStream, fileOS); - if (isDownloadedCapeListBigger(temp)) { - fileOS = new FileOutputStream(dat); - IOUtils.copy(inputStream, fileOS); - } - } catch (Throwable t) { - Logger.INFO("Unable to download GT++ cape list."); - } - } - - private static boolean isDownloadedCapeListBigger(File aFile) { - double aExistingFileSize = (doesCapeCacheExistLocally() ? getCapeCache().length() : 0); - double aNewFileSize = aFile.length(); - if (aNewFileSize > aExistingFileSize) { - return true; - } - return false; - } - - private static void handleOldCapeCache() { - File aCacheFile = FileUtils.getFile("GTPP", "dat"); - if (FileUtils.doesFileExist(aCacheFile)) { - aCacheFile.delete(); - } - } - - private static boolean doesCapeCacheExistLocally() { - File aCacheFile = FileUtils.getFile("CapeCache", "dat"); - if (FileUtils.doesFileExist(aCacheFile)) { - return true; - } - return false; - } - - private static File getCapeCache() { - File aCacheFile = FileUtils.getFile("CapeCache", "dat"); - if (FileUtils.doesFileExist(aCacheFile)) { - FileUtils.createFile(aCacheFile); - } - return aCacheFile; - } - - public static final List getDataFromCache() { - File aCacheFile = getCapeCache(); - List aCache = FileUtils.readLines(aCacheFile); - if (aCache != null && !aCache.isEmpty()) { - return aCache; - } - return new AutoMap<>(); - } - - private static File allocateTempFile() { - File tempFile = null; - try { - tempFile = File.createTempFile("gtpp-", null); - } catch (IOException e) { - e.printStackTrace(); - } - if (tempFile == null) { - tempFile = FileUtils - .createFile("", "gtpp-" + MathUtils.randInt(Short.MAX_VALUE, (Integer.MAX_VALUE / 2)), "tmp"); - } - tempFile.deleteOnExit(); - return tempFile; - } - - public static final void writeCacheToMaps() { - List aCacheData = getDataFromCache(); - if (aCacheData != null && !aCacheData.isEmpty()) { - if (sAES == null) { - sAES = new AES(); - } - AutoMap aDecodedData = new AutoMap<>(); - for (String aToDecode : aCacheData) { - aDecodedData.put(sAES.decode(aToDecode)); - } - if (!aDecodedData.isEmpty()) { - AutoMap> aCapeType1 = new AutoMap<>(); - AutoMap> aCapeType2 = new AutoMap<>(); - AutoMap> aCapeType3 = new AutoMap<>(); - AutoMap> aCapeType4 = new AutoMap<>(); - AutoMap> aCapeType5 = new AutoMap<>(); - boolean didProcessStringData = false; - Logger.INFO("Decoded String Count: " + aDecodedData.size()); - for (String aToSplit : aDecodedData) { - String[] aSplitData = aToSplit.split("" + SPLIT_CHARACTER); - if (aSplitData != null && aSplitData.length >= 2) { - if (aSplitData[0] != null) { - Integer aCapeTypeID2 = Integer.parseInt(aSplitData[0]); - if (aCapeTypeID2 != null) { - int aCapeTypeID = aCapeTypeID2; - Pair aFinalString = new Pair<>( - "UUID: " + aSplitData[1], - "Username: " - + (aSplitData[2] != null && aSplitData[0].length() > 0 ? aSplitData[2] - : "Not Specified")); - Logger.INFO("Cape Type: " + aCapeTypeID); - switch (aCapeTypeID) { - case 0 -> { - aCapeType1.add(aFinalString); - Logger.INFO( - "Added user to map " + aCapeTypeID - + ", map now holds " - + aCapeType1.size() - + " users."); - } - case 1 -> { - aCapeType2.add(aFinalString); - Logger.INFO( - "Added user to map " + aCapeTypeID - + ", map now holds " - + aCapeType2.size() - + " users."); - } - case 2 -> { - aCapeType3.add(aFinalString); - Logger.INFO( - "Added user to map " + aCapeTypeID - + ", map now holds " - + aCapeType3.size() - + " users."); - } - case 3 -> { - aCapeType4.add(aFinalString); - Logger.INFO( - "Added user to map " + aCapeTypeID - + ", map now holds " - + aCapeType4.size() - + " users."); - } - case 4 -> { - aCapeType5.add(aFinalString); - Logger.INFO( - "Added user to map " + aCapeTypeID - + ", map now holds " - + aCapeType5.size() - + " users."); - } - default -> {} - } - } - } - } - } - if (!aCapeType1.isEmpty() || !aCapeType2.isEmpty() - || !aCapeType3.isEmpty() - || !aCapeType4.isEmpty() - || !aCapeType5.isEmpty()) { - didProcessStringData = true; - } else { - // did not process any data - } - if (didProcessStringData) { - if (!aCapeType1.isEmpty()) { - for (Pair aUser : aCapeType1) { - Logger.INFO("Adding Generic cape for " + aUser.getKey()); - mOrangeCapes.add(aUser); - } - } - if (!aCapeType2.isEmpty()) { - for (Pair aUser : aCapeType2) { - Logger.INFO("Adding Blue cape for " + aUser.getKey()); - mMiscCapes.add(aUser); - } - } - if (!aCapeType3.isEmpty()) { - for (Pair aUser : aCapeType3) { - Logger.INFO("Adding Beta cape for " + aUser.getKey()); - mBetaTestCapes.add(aUser); - } - } - if (!aCapeType4.isEmpty()) { - for (Pair aUser : aCapeType4) { - Logger.INFO("Adding Patreon cape for " + aUser.getKey()); - mPatreonCapes.add(aUser); - } - } - if (!aCapeType5.isEmpty()) { - for (Pair aUser : aCapeType5) { - Logger.INFO("Adding Dev cape for " + aUser.getKey()); - mDevCapes.add(aUser); - } - } - } - } else { - // No data decoded - } - } else { - // Nothing was cached? - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_FlaskRenderer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_FlaskRenderer.java deleted file mode 100644 index 0c9e59e2f2..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_FlaskRenderer.java +++ /dev/null @@ -1,107 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.render; - -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; - -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.common.items.GT_VolumetricFlask; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import ic2.core.util.DrawUtil; - -@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); - } - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - return type != ItemRenderType.FIRST_PERSON_MAP; - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, IItemRenderer.ItemRendererHelper helper) { - return type == ItemRenderType.ENTITY; - } - - @Override - 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); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_Render_MachineBlock.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_Render_MachineBlock.java deleted file mode 100644 index bfd16b4cc5..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/render/GTPP_Render_MachineBlock.java +++ /dev/null @@ -1,1250 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.render; - -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_DOWN; -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_EAST; -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_NORTH; -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_SOUTH; -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_UP; -import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_WEST; -import static gregtech.api.interfaces.metatileentity.IConnectable.HAS_FOAM; -import static gregtech.api.interfaces.metatileentity.IConnectable.NO_CONNECTION; -import static net.minecraftforge.common.util.ForgeDirection.DOWN; -import static net.minecraftforge.common.util.ForgeDirection.EAST; -import static net.minecraftforge.common.util.ForgeDirection.NORTH; -import static net.minecraftforge.common.util.ForgeDirection.SOUTH; -import static net.minecraftforge.common.util.ForgeDirection.UP; -import static net.minecraftforge.common.util.ForgeDirection.WEST; - -import java.util.EnumMap; -import java.util.EnumSet; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; - -import org.lwjgl.opengl.GL11; - -import cpw.mods.fml.client.registry.RenderingRegistry; -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity; -import gregtech.api.interfaces.tileentity.ITexturedTileEntity; -import gregtech.api.metatileentity.MetaPipeEntity; -import gregtech.common.blocks.GT_Block_Machines; -import gregtech.common.render.GT_Renderer_Block; -import gtPlusPlus.xmod.gregtech.common.helpers.GT_MethodHelper; - -public class GTPP_Render_MachineBlock extends GT_Renderer_Block { - - public static GTPP_Render_MachineBlock INSTANCE; - public final int mRenderID = RenderingRegistry.getNextAvailableRenderId(); - - public GTPP_Render_MachineBlock() { - INSTANCE = this; - RenderingRegistry.registerBlockHandler(this); - } - - private static ITexture[] getTexture(IMetaTileEntity tile, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean active, boolean arg5) { - final IGregTechTileEntity gtTile = tile.getBaseMetaTileEntity(); - return tile.getTexture(gtTile, side, facing, (byte) colorIndex, active, arg5); - } - - private static ITexture[] getTexture(IMetaTileEntity tile, ForgeDirection side, int facingMask, int colorIndex, - boolean active, boolean arg5) { - final MetaPipeEntity gtTile = (MetaPipeEntity) tile.getBaseMetaTileEntity(); - return gtTile.getTexture((IGregTechTileEntity) tile, side, facingMask, colorIndex, active, arg5); - } - - private static void renderNormalInventoryMetaTileEntity(Block aBlock, int aMeta, RenderBlocks aRenderer) { - if (aMeta > 0 && aMeta < GregTech_API.METATILEENTITIES.length) { - IMetaTileEntity tMetaTileEntity = GregTech_API.METATILEENTITIES[aMeta]; - if (tMetaTileEntity != null) { - aBlock.setBlockBoundsForItemRender(); - aRenderer.setRenderBoundsFromBlock(aBlock); - GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - if (tMetaTileEntity.getBaseMetaTileEntity() instanceof IPipeRenderedTileEntity pipeRenderedTile) { - float tThickness = pipeRenderedTile.getThickNess(); - float sp = (1.0F - tThickness) / 2.0F; - aBlock.setBlockBounds(0.0F, sp, sp, 1.0F, sp + tThickness, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(0.0F, -1.0F, 0.0F); - renderNegativeYFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, DOWN, 0b001001, -1, false, false), - true); - Tessellator.instance.draw(); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(0.0F, 1.0F, 0.0F); - renderPositiveYFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, UP, 0b001001, -1, false, false), - true); - Tessellator.instance.draw(); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(0.0F, 0.0F, -1.0F); - renderNegativeZFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, ForgeDirection.NORTH, 0b001001, -1, false, false), - true); - Tessellator.instance.draw(); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(0.0F, 0.0F, 1.0F); - renderPositiveZFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, ForgeDirection.SOUTH, 0b001001, -1, false, false), - true); - Tessellator.instance.draw(); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(-1.0F, 0.0F, 0.0F); - renderNegativeXFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, ForgeDirection.WEST, 0b001001, -1, true, false), - true); - Tessellator.instance.draw(); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(1.0F, 0.0F, 0.0F); - renderPositiveXFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, ForgeDirection.EAST, 0b001001, -1, true, false), - true); - Tessellator.instance.draw(); - } else { - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(0.0F, -1.0F, 0.0F); - renderNegativeYFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, DOWN, ForgeDirection.WEST, -1, true, false), - true); - Tessellator.instance.draw(); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(0.0F, 1.0F, 0.0F); - renderPositiveYFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, UP, ForgeDirection.WEST, -1, true, false), - true); - Tessellator.instance.draw(); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(0.0F, 0.0F, -1.0F); - renderNegativeZFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, ForgeDirection.NORTH, ForgeDirection.WEST, -1, true, false), - true); - Tessellator.instance.draw(); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(0.0F, 0.0F, 1.0F); - renderPositiveZFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, ForgeDirection.SOUTH, ForgeDirection.WEST, -1, true, false), - true); - Tessellator.instance.draw(); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(-1.0F, 0.0F, 0.0F); - renderNegativeXFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, ForgeDirection.WEST, ForgeDirection.WEST, -1, true, false), - true); - Tessellator.instance.draw(); - Tessellator.instance.startDrawingQuads(); - Tessellator.instance.setNormal(1.0F, 0.0F, 0.0F); - renderPositiveXFacing( - null, - aRenderer, - aBlock, - 0, - 0, - 0, - getTexture(tMetaTileEntity, ForgeDirection.EAST, ForgeDirection.WEST, -1, true, false), - true); - Tessellator.instance.draw(); - } - - aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - aRenderer.setRenderBoundsFromBlock(aBlock); - GL11.glTranslatef(0.5F, 0.5F, 0.5F); - } - } - } - - public boolean renderStandardBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, - RenderBlocks aRenderer) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - - return tTileEntity instanceof ITexturedTileEntity - ? renderStandardBlock( - aWorld, - aX, - aY, - aZ, - aBlock, - aRenderer, - new ITexture[][] { GT_MethodHelper.getTexture(tTileEntity, aBlock, DOWN), - GT_MethodHelper.getTexture(tTileEntity, aBlock, UP), - GT_MethodHelper.getTexture(tTileEntity, aBlock, ForgeDirection.NORTH), - GT_MethodHelper.getTexture(tTileEntity, aBlock, ForgeDirection.SOUTH), - GT_MethodHelper.getTexture(tTileEntity, aBlock, ForgeDirection.WEST), - GT_MethodHelper.getTexture(tTileEntity, aBlock, ForgeDirection.EAST) }) - : false; - } - - public boolean renderStandardBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, - RenderBlocks aRenderer, ITexture[][] aTextures) { - aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[DOWN.ordinal()], true); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[UP.ordinal()], true); - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[ForgeDirection.NORTH.ordinal()], true); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[ForgeDirection.SOUTH.ordinal()], true); - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[ForgeDirection.WEST.ordinal()], true); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[ForgeDirection.EAST.ordinal()], true); - return true; - } - - public boolean renderPipeBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, - IPipeRenderedTileEntity aTileEntity, RenderBlocks aRenderer) { - final int aConnections = aTileEntity.getConnections(); - if ((aConnections & HAS_FOAM) != 0) { - return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer); - } else { - float tThickness = aTileEntity.getThickNess(); - if (tThickness >= 0.99F) { - return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer); - } else { - float sp = (1.0F - tThickness) / 2.0F; - int connexionSidesBits = 0; - - for (int ordinalSide = 0; ordinalSide < 6; ++ordinalSide) { - if ((aConnections & 1 << ordinalSide) != 0) { - connexionSidesBits = connexionSidesBits | 1 << (ordinalSide + 2) % 6; - } - } - - final EnumSet coveredSides = EnumSet.noneOf(ForgeDirection.class); - - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (aTileEntity.getCoverIDAtSide(side) != 0) coveredSides.add(side); - } - - if (coveredSides.containsAll(EnumSet.of(DOWN, UP, NORTH, SOUTH, WEST, EAST))) { - return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer); - } else { - final EnumMap texture = new EnumMap<>(ForgeDirection.class); - final EnumMap textureUncovered = new EnumMap<>(ForgeDirection.class); - - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - texture.put(side, GT_MethodHelper.getTexture((TileEntity) aTileEntity, aBlock, side)); - textureUncovered.put(side, aTileEntity.getTextureUncovered(side)); - } - - switch (connexionSidesBits) { - case NO_CONNECTION -> { - aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(DOWN), - false); - renderPositiveYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(UP), - false); - renderNegativeZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(NORTH), - false); - renderPositiveZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(SOUTH), - false); - renderNegativeXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(WEST), - false); - renderPositiveXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(EAST), - false); - } - case (CONNECTED_DOWN | CONNECTED_UP) -> { - aBlock.setBlockBounds(0.0F, sp, sp, 1.0F, sp + tThickness, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(DOWN), - false); - renderPositiveYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(UP), - false); - renderNegativeZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(NORTH), - false); - renderPositiveZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(SOUTH), - false); - if (!coveredSides.contains(WEST)) { - renderNegativeXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(WEST), - false); - } - if (!coveredSides.contains(EAST)) { - renderPositiveXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(EAST), - false); - } - } - case (CONNECTED_NORTH | CONNECTED_SOUTH) -> { - aBlock.setBlockBounds(sp, 0.0F, sp, sp + tThickness, 1.0F, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(NORTH), - false); - renderPositiveZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(SOUTH), - false); - renderNegativeXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(WEST), - false); - renderPositiveXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(EAST), - false); - if (!coveredSides.contains(DOWN)) { - renderNegativeYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(DOWN), - false); - } - if (!coveredSides.contains(UP)) { - renderPositiveYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(UP), - false); - } - } - case (CONNECTED_WEST | CONNECTED_EAST) -> { - aBlock.setBlockBounds(sp, sp, 0.0F, sp + tThickness, sp + tThickness, 1.0F); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(DOWN), - false); - renderPositiveYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(UP), - false); - renderNegativeXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(WEST), - false); - renderPositiveXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(EAST), - false); - if (!coveredSides.contains(NORTH)) { - renderNegativeZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(NORTH), - false); - } - if (!coveredSides.contains(SOUTH)) { - renderPositiveZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(SOUTH), - false); - } - } - default -> { - if ((connexionSidesBits & CONNECTED_DOWN) == 0) { - aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(WEST), - false); - } else { - aBlock.setBlockBounds(0.0F, sp, sp, sp, sp + tThickness, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(DOWN), - false); - renderPositiveYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(UP), - false); - renderNegativeZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(NORTH), - false); - renderPositiveZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(SOUTH), - false); - if (!coveredSides.contains(WEST)) { - renderNegativeXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(WEST), - false); - } - } - if ((connexionSidesBits & CONNECTED_UP) == 0) { - aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderPositiveXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(EAST), - false); - } else { - aBlock.setBlockBounds(sp + tThickness, sp, sp, 1.0F, sp + tThickness, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(DOWN), - false); - renderPositiveYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(UP), - false); - renderNegativeZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(NORTH), - false); - renderPositiveZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(SOUTH), - false); - if (!coveredSides.contains(EAST)) { - renderPositiveXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(EAST), - false); - } - } - if ((connexionSidesBits & CONNECTED_NORTH) == 0) { - aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(DOWN), - false); - } else { - aBlock.setBlockBounds(sp, 0.0F, sp, sp + tThickness, sp, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(NORTH), - false); - renderPositiveZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(SOUTH), - false); - renderNegativeXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(WEST), - false); - renderPositiveXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(EAST), - false); - if (!coveredSides.contains(DOWN)) { - renderNegativeYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(DOWN), - false); - } - } - if ((connexionSidesBits & CONNECTED_SOUTH) == 0) { - aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderPositiveYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(UP), - false); - } else { - aBlock.setBlockBounds(sp, sp + tThickness, sp, sp + tThickness, 1.0F, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(NORTH), - false); - renderPositiveZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(SOUTH), - false); - renderNegativeXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(WEST), - false); - renderPositiveXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(EAST), - false); - if (!coveredSides.contains(UP)) { - renderPositiveYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(UP), - false); - } - } - if ((connexionSidesBits & CONNECTED_WEST) == 0) { - aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(NORTH), - false); - } else { - aBlock.setBlockBounds(sp, sp, 0.0F, sp + tThickness, sp + tThickness, sp); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(DOWN), - false); - renderPositiveYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(UP), - false); - renderNegativeXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(WEST), - false); - renderPositiveXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(EAST), - false); - if (!coveredSides.contains(NORTH)) { - renderNegativeZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(NORTH), - false); - } - } - if ((connexionSidesBits & CONNECTED_EAST) == 0) { - aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderPositiveZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(SOUTH), - false); - } else { - aBlock.setBlockBounds(sp, sp, sp + tThickness, sp + tThickness, sp + tThickness, 1.0F); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(DOWN), - false); - renderPositiveYFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(UP), - false); - renderNegativeXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(WEST), - false); - renderPositiveXFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(EAST), - false); - if (!coveredSides.contains(SOUTH)) { - renderPositiveZFacing( - aWorld, - aRenderer, - aBlock, - aX, - aY, - aZ, - textureUncovered.get(SOUTH), - false); - } - } - } - } - - if (coveredSides.contains(DOWN)) { - aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); - if (!coveredSides.contains(NORTH)) { - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); - } - - if (!coveredSides.contains(SOUTH)) { - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); - } - - if (!coveredSides.contains(WEST)) { - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); - } - - if (!coveredSides.contains(EAST)) { - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); - } - } - - if (coveredSides.contains(UP)) { - aBlock.setBlockBounds(0.0F, 0.875F, 0.0F, 1.0F, 1.0F, 1.0F); - aRenderer.setRenderBoundsFromBlock(aBlock); - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); - if (!coveredSides.contains(NORTH)) { - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); - } - - if (!coveredSides.contains(SOUTH)) { - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); - } - - if (!coveredSides.contains(WEST)) { - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); - } - - if (!coveredSides.contains(EAST)) { - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); - } - } - - if (coveredSides.contains(NORTH)) { - aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.125F); - aRenderer.setRenderBoundsFromBlock(aBlock); - if (!coveredSides.contains(DOWN)) { - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); - } - - if (!coveredSides.contains(UP)) { - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); - } - - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); - if (!coveredSides.contains(WEST)) { - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); - } - - if (!coveredSides.contains(EAST)) { - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); - } - } - - if (coveredSides.contains(SOUTH)) { - aBlock.setBlockBounds(0.0F, 0.0F, 0.875F, 1.0F, 1.0F, 1.0F); - aRenderer.setRenderBoundsFromBlock(aBlock); - if (!coveredSides.contains(DOWN)) { - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); - } - - if (!coveredSides.contains(UP)) { - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); - } - - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); - if (!coveredSides.contains(WEST)) { - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); - } - - if (!coveredSides.contains(EAST)) { - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); - } - } - - if (coveredSides.contains(WEST)) { - aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 0.125F, 1.0F, 1.0F); - aRenderer.setRenderBoundsFromBlock(aBlock); - if (!coveredSides.contains(DOWN)) { - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); - } - - if (!coveredSides.contains(UP)) { - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); - } - - if (!coveredSides.contains(NORTH)) { - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); - } - - if (!coveredSides.contains(SOUTH)) { - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); - } - - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); - } - - if (coveredSides.contains(EAST)) { - aBlock.setBlockBounds(0.875F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - aRenderer.setRenderBoundsFromBlock(aBlock); - if (!coveredSides.contains(DOWN)) { - renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); - } - - if (!coveredSides.contains(UP)) { - renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); - } - - if (!coveredSides.contains(NORTH)) { - renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); - } - - if (!coveredSides.contains(SOUTH)) { - renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); - } - - renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); - renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); - } - - aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - aRenderer.setRenderBoundsFromBlock(aBlock); - return true; - } - } - } - } - - public static void renderNegativeYFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX, aY - 1, aZ, 0)) { - return; - } - - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aFullBlock ? aY - 1 : aY, aZ)); - } - - if (aIcon != null) { - for (ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderYNeg(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - aRenderer.flipTexture = false; - } - - public static void renderPositiveYFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX, aY + 1, aZ, 1)) { - return; - } - - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aFullBlock ? aY + 1 : aY, aZ)); - } - - if (aIcon != null) { - for (ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderYPos(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - aRenderer.flipTexture = false; - } - - public static void renderNegativeZFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX, aY, aZ - 1, 2)) { - return; - } - - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aY, aFullBlock ? aZ - 1 : aZ)); - } - - aRenderer.flipTexture = !aFullBlock; - if (aIcon != null) { - for (ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderZNeg(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - aRenderer.flipTexture = false; - } - - public static void renderPositiveZFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX, aY, aZ + 1, 3)) { - return; - } - - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aY, aFullBlock ? aZ + 1 : aZ)); - } - - if (aIcon != null) { - for (ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderZPos(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - aRenderer.flipTexture = false; - } - - public static void renderNegativeXFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX - 1, aY, aZ, 4)) { - return; - } - - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aFullBlock ? aX - 1 : aX, aY, aZ)); - } - - if (aIcon != null) { - for (ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderXNeg(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - aRenderer.flipTexture = false; - } - - public static void renderPositiveXFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, - int aZ, ITexture[] aIcon, boolean aFullBlock) { - if (aWorld != null) { - if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX + 1, aY, aZ, 5)) { - return; - } - - Tessellator.instance - .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aFullBlock ? aX + 1 : aX, aY, aZ)); - } - - aRenderer.flipTexture = !aFullBlock; - if (aIcon != null) { - for (ITexture iTexture : aIcon) { - if (iTexture != null) { - iTexture.renderXPos(aRenderer, aBlock, aX, aY, aZ); - } - } - } - - aRenderer.flipTexture = false; - } - - @Override - public void renderInventoryBlock(Block aBlock, int aMeta, int aModelID, RenderBlocks aRenderer) { - aMeta += 30400; - if (aBlock instanceof GT_Block_Machines) { - if (aMeta > 0 && aMeta < GregTech_API.METATILEENTITIES.length - && GregTech_API.METATILEENTITIES[aMeta] != null - && !GregTech_API.METATILEENTITIES[aMeta].renderInInventory(aBlock, aMeta, aRenderer)) { - renderNormalInventoryMetaTileEntity(aBlock, aMeta, aRenderer); - } - } - aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); - aRenderer.setRenderBoundsFromBlock(aBlock); - GL11.glTranslatef(0.5F, 0.5F, 0.5F); - } - - @Override - public boolean renderWorldBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, int aModelID, - RenderBlocks aRenderer) { - TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ); - return aTileEntity == null ? false - : (aTileEntity instanceof IGregTechTileEntity - && ((IGregTechTileEntity) aTileEntity).getMetaTileEntity() != null - && ((IGregTechTileEntity) aTileEntity).getMetaTileEntity() - .renderInWorld(aWorld, aX, aY, aZ, aBlock, aRenderer) - ? true - : (aTileEntity instanceof IPipeRenderedTileEntity - ? renderPipeBlock( - aWorld, - aX, - aY, - aZ, - aBlock, - (IPipeRenderedTileEntity) aTileEntity, - aRenderer) - : renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer))); - } - - @Override - public boolean shouldRender3DInInventory(int aModel) { - return true; - } - - @Override - public int getRenderId() { - return this.mRenderID; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/render/MachineBlockRenderer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/render/MachineBlockRenderer.java new file mode 100644 index 0000000000..7ce7002738 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/render/MachineBlockRenderer.java @@ -0,0 +1,1250 @@ +package gtPlusPlus.xmod.gregtech.common.render; + +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_DOWN; +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_EAST; +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_NORTH; +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_SOUTH; +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_UP; +import static gregtech.api.interfaces.metatileentity.IConnectable.CONNECTED_WEST; +import static gregtech.api.interfaces.metatileentity.IConnectable.HAS_FOAM; +import static gregtech.api.interfaces.metatileentity.IConnectable.NO_CONNECTION; +import static net.minecraftforge.common.util.ForgeDirection.DOWN; +import static net.minecraftforge.common.util.ForgeDirection.EAST; +import static net.minecraftforge.common.util.ForgeDirection.NORTH; +import static net.minecraftforge.common.util.ForgeDirection.SOUTH; +import static net.minecraftforge.common.util.ForgeDirection.UP; +import static net.minecraftforge.common.util.ForgeDirection.WEST; + +import java.util.EnumMap; +import java.util.EnumSet; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.registry.RenderingRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity; +import gregtech.api.interfaces.tileentity.ITexturedTileEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.common.blocks.BlockMachines; +import gregtech.common.render.GTRendererBlock; +import gtPlusPlus.xmod.gregtech.common.helpers.GTMethodHelper; + +public class MachineBlockRenderer extends GTRendererBlock { + + public static MachineBlockRenderer INSTANCE; + public final int mRenderID = RenderingRegistry.getNextAvailableRenderId(); + + public MachineBlockRenderer() { + INSTANCE = this; + RenderingRegistry.registerBlockHandler(this); + } + + private static ITexture[] getTexture(IMetaTileEntity tile, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean active, boolean arg5) { + final IGregTechTileEntity gtTile = tile.getBaseMetaTileEntity(); + return tile.getTexture(gtTile, side, facing, (byte) colorIndex, active, arg5); + } + + private static ITexture[] getTexture(IMetaTileEntity tile, ForgeDirection side, int facingMask, int colorIndex, + boolean active, boolean arg5) { + final MetaPipeEntity gtTile = (MetaPipeEntity) tile.getBaseMetaTileEntity(); + return gtTile.getTexture((IGregTechTileEntity) tile, side, facingMask, colorIndex, active, arg5); + } + + private static void renderNormalInventoryMetaTileEntity(Block aBlock, int aMeta, RenderBlocks aRenderer) { + if (aMeta > 0 && aMeta < GregTechAPI.METATILEENTITIES.length) { + IMetaTileEntity tMetaTileEntity = GregTechAPI.METATILEENTITIES[aMeta]; + if (tMetaTileEntity != null) { + aBlock.setBlockBoundsForItemRender(); + aRenderer.setRenderBoundsFromBlock(aBlock); + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + if (tMetaTileEntity.getBaseMetaTileEntity() instanceof IPipeRenderedTileEntity pipeRenderedTile) { + float tThickness = pipeRenderedTile.getThickNess(); + float sp = (1.0F - tThickness) / 2.0F; + aBlock.setBlockBounds(0.0F, sp, sp, 1.0F, sp + tThickness, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(0.0F, -1.0F, 0.0F); + renderNegativeYFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, DOWN, 0b001001, -1, false, false), + true); + Tessellator.instance.draw(); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(0.0F, 1.0F, 0.0F); + renderPositiveYFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, UP, 0b001001, -1, false, false), + true); + Tessellator.instance.draw(); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(0.0F, 0.0F, -1.0F); + renderNegativeZFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, ForgeDirection.NORTH, 0b001001, -1, false, false), + true); + Tessellator.instance.draw(); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(0.0F, 0.0F, 1.0F); + renderPositiveZFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, ForgeDirection.SOUTH, 0b001001, -1, false, false), + true); + Tessellator.instance.draw(); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(-1.0F, 0.0F, 0.0F); + renderNegativeXFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, ForgeDirection.WEST, 0b001001, -1, true, false), + true); + Tessellator.instance.draw(); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(1.0F, 0.0F, 0.0F); + renderPositiveXFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, ForgeDirection.EAST, 0b001001, -1, true, false), + true); + Tessellator.instance.draw(); + } else { + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(0.0F, -1.0F, 0.0F); + renderNegativeYFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, DOWN, ForgeDirection.WEST, -1, true, false), + true); + Tessellator.instance.draw(); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(0.0F, 1.0F, 0.0F); + renderPositiveYFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, UP, ForgeDirection.WEST, -1, true, false), + true); + Tessellator.instance.draw(); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(0.0F, 0.0F, -1.0F); + renderNegativeZFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, ForgeDirection.NORTH, ForgeDirection.WEST, -1, true, false), + true); + Tessellator.instance.draw(); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(0.0F, 0.0F, 1.0F); + renderPositiveZFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, ForgeDirection.SOUTH, ForgeDirection.WEST, -1, true, false), + true); + Tessellator.instance.draw(); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(-1.0F, 0.0F, 0.0F); + renderNegativeXFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, ForgeDirection.WEST, ForgeDirection.WEST, -1, true, false), + true); + Tessellator.instance.draw(); + Tessellator.instance.startDrawingQuads(); + Tessellator.instance.setNormal(1.0F, 0.0F, 0.0F); + renderPositiveXFacing( + null, + aRenderer, + aBlock, + 0, + 0, + 0, + getTexture(tMetaTileEntity, ForgeDirection.EAST, ForgeDirection.WEST, -1, true, false), + true); + Tessellator.instance.draw(); + } + + aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + aRenderer.setRenderBoundsFromBlock(aBlock); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + } + } + + public boolean renderStandardBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, + RenderBlocks aRenderer) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + + return tTileEntity instanceof ITexturedTileEntity + ? renderStandardBlock( + aWorld, + aX, + aY, + aZ, + aBlock, + aRenderer, + new ITexture[][] { GTMethodHelper.getTexture(tTileEntity, aBlock, DOWN), + GTMethodHelper.getTexture(tTileEntity, aBlock, UP), + GTMethodHelper.getTexture(tTileEntity, aBlock, ForgeDirection.NORTH), + GTMethodHelper.getTexture(tTileEntity, aBlock, ForgeDirection.SOUTH), + GTMethodHelper.getTexture(tTileEntity, aBlock, ForgeDirection.WEST), + GTMethodHelper.getTexture(tTileEntity, aBlock, ForgeDirection.EAST) }) + : false; + } + + public boolean renderStandardBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, + RenderBlocks aRenderer, ITexture[][] aTextures) { + aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[DOWN.ordinal()], true); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[UP.ordinal()], true); + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[ForgeDirection.NORTH.ordinal()], true); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[ForgeDirection.SOUTH.ordinal()], true); + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[ForgeDirection.WEST.ordinal()], true); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, aTextures[ForgeDirection.EAST.ordinal()], true); + return true; + } + + public boolean renderPipeBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, + IPipeRenderedTileEntity aTileEntity, RenderBlocks aRenderer) { + final int aConnections = aTileEntity.getConnections(); + if ((aConnections & HAS_FOAM) != 0) { + return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer); + } else { + float tThickness = aTileEntity.getThickNess(); + if (tThickness >= 0.99F) { + return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer); + } else { + float sp = (1.0F - tThickness) / 2.0F; + int connexionSidesBits = 0; + + for (int ordinalSide = 0; ordinalSide < 6; ++ordinalSide) { + if ((aConnections & 1 << ordinalSide) != 0) { + connexionSidesBits = connexionSidesBits | 1 << (ordinalSide + 2) % 6; + } + } + + final EnumSet coveredSides = EnumSet.noneOf(ForgeDirection.class); + + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (aTileEntity.getCoverIDAtSide(side) != 0) coveredSides.add(side); + } + + if (coveredSides.containsAll(EnumSet.of(DOWN, UP, NORTH, SOUTH, WEST, EAST))) { + return renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer); + } else { + final EnumMap texture = new EnumMap<>(ForgeDirection.class); + final EnumMap textureUncovered = new EnumMap<>(ForgeDirection.class); + + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + texture.put(side, GTMethodHelper.getTexture((TileEntity) aTileEntity, aBlock, side)); + textureUncovered.put(side, aTileEntity.getTextureUncovered(side)); + } + + switch (connexionSidesBits) { + case NO_CONNECTION -> { + aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(DOWN), + false); + renderPositiveYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(UP), + false); + renderNegativeZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(NORTH), + false); + renderPositiveZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(SOUTH), + false); + renderNegativeXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(WEST), + false); + renderPositiveXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(EAST), + false); + } + case (CONNECTED_DOWN | CONNECTED_UP) -> { + aBlock.setBlockBounds(0.0F, sp, sp, 1.0F, sp + tThickness, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(DOWN), + false); + renderPositiveYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(UP), + false); + renderNegativeZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(NORTH), + false); + renderPositiveZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(SOUTH), + false); + if (!coveredSides.contains(WEST)) { + renderNegativeXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(WEST), + false); + } + if (!coveredSides.contains(EAST)) { + renderPositiveXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(EAST), + false); + } + } + case (CONNECTED_NORTH | CONNECTED_SOUTH) -> { + aBlock.setBlockBounds(sp, 0.0F, sp, sp + tThickness, 1.0F, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(NORTH), + false); + renderPositiveZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(SOUTH), + false); + renderNegativeXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(WEST), + false); + renderPositiveXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(EAST), + false); + if (!coveredSides.contains(DOWN)) { + renderNegativeYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(DOWN), + false); + } + if (!coveredSides.contains(UP)) { + renderPositiveYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(UP), + false); + } + } + case (CONNECTED_WEST | CONNECTED_EAST) -> { + aBlock.setBlockBounds(sp, sp, 0.0F, sp + tThickness, sp + tThickness, 1.0F); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(DOWN), + false); + renderPositiveYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(UP), + false); + renderNegativeXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(WEST), + false); + renderPositiveXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(EAST), + false); + if (!coveredSides.contains(NORTH)) { + renderNegativeZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(NORTH), + false); + } + if (!coveredSides.contains(SOUTH)) { + renderPositiveZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(SOUTH), + false); + } + } + default -> { + if ((connexionSidesBits & CONNECTED_DOWN) == 0) { + aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(WEST), + false); + } else { + aBlock.setBlockBounds(0.0F, sp, sp, sp, sp + tThickness, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(DOWN), + false); + renderPositiveYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(UP), + false); + renderNegativeZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(NORTH), + false); + renderPositiveZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(SOUTH), + false); + if (!coveredSides.contains(WEST)) { + renderNegativeXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(WEST), + false); + } + } + if ((connexionSidesBits & CONNECTED_UP) == 0) { + aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderPositiveXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(EAST), + false); + } else { + aBlock.setBlockBounds(sp + tThickness, sp, sp, 1.0F, sp + tThickness, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(DOWN), + false); + renderPositiveYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(UP), + false); + renderNegativeZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(NORTH), + false); + renderPositiveZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(SOUTH), + false); + if (!coveredSides.contains(EAST)) { + renderPositiveXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(EAST), + false); + } + } + if ((connexionSidesBits & CONNECTED_NORTH) == 0) { + aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(DOWN), + false); + } else { + aBlock.setBlockBounds(sp, 0.0F, sp, sp + tThickness, sp, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(NORTH), + false); + renderPositiveZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(SOUTH), + false); + renderNegativeXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(WEST), + false); + renderPositiveXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(EAST), + false); + if (!coveredSides.contains(DOWN)) { + renderNegativeYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(DOWN), + false); + } + } + if ((connexionSidesBits & CONNECTED_SOUTH) == 0) { + aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderPositiveYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(UP), + false); + } else { + aBlock.setBlockBounds(sp, sp + tThickness, sp, sp + tThickness, 1.0F, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(NORTH), + false); + renderPositiveZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(SOUTH), + false); + renderNegativeXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(WEST), + false); + renderPositiveXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(EAST), + false); + if (!coveredSides.contains(UP)) { + renderPositiveYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(UP), + false); + } + } + if ((connexionSidesBits & CONNECTED_WEST) == 0) { + aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(NORTH), + false); + } else { + aBlock.setBlockBounds(sp, sp, 0.0F, sp + tThickness, sp + tThickness, sp); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(DOWN), + false); + renderPositiveYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(UP), + false); + renderNegativeXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(WEST), + false); + renderPositiveXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(EAST), + false); + if (!coveredSides.contains(NORTH)) { + renderNegativeZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(NORTH), + false); + } + } + if ((connexionSidesBits & CONNECTED_EAST) == 0) { + aBlock.setBlockBounds(sp, sp, sp, sp + tThickness, sp + tThickness, sp + tThickness); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderPositiveZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(SOUTH), + false); + } else { + aBlock.setBlockBounds(sp, sp, sp + tThickness, sp + tThickness, sp + tThickness, 1.0F); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(DOWN), + false); + renderPositiveYFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(UP), + false); + renderNegativeXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(WEST), + false); + renderPositiveXFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(EAST), + false); + if (!coveredSides.contains(SOUTH)) { + renderPositiveZFacing( + aWorld, + aRenderer, + aBlock, + aX, + aY, + aZ, + textureUncovered.get(SOUTH), + false); + } + } + } + } + + if (coveredSides.contains(DOWN)) { + aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.125F, 1.0F); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); + if (!coveredSides.contains(NORTH)) { + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); + } + + if (!coveredSides.contains(SOUTH)) { + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); + } + + if (!coveredSides.contains(WEST)) { + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); + } + + if (!coveredSides.contains(EAST)) { + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(DOWN), false); + } + } + + if (coveredSides.contains(UP)) { + aBlock.setBlockBounds(0.0F, 0.875F, 0.0F, 1.0F, 1.0F, 1.0F); + aRenderer.setRenderBoundsFromBlock(aBlock); + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); + if (!coveredSides.contains(NORTH)) { + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); + } + + if (!coveredSides.contains(SOUTH)) { + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); + } + + if (!coveredSides.contains(WEST)) { + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); + } + + if (!coveredSides.contains(EAST)) { + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(UP), false); + } + } + + if (coveredSides.contains(NORTH)) { + aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.125F); + aRenderer.setRenderBoundsFromBlock(aBlock); + if (!coveredSides.contains(DOWN)) { + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); + } + + if (!coveredSides.contains(UP)) { + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); + } + + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); + if (!coveredSides.contains(WEST)) { + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); + } + + if (!coveredSides.contains(EAST)) { + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(NORTH), false); + } + } + + if (coveredSides.contains(SOUTH)) { + aBlock.setBlockBounds(0.0F, 0.0F, 0.875F, 1.0F, 1.0F, 1.0F); + aRenderer.setRenderBoundsFromBlock(aBlock); + if (!coveredSides.contains(DOWN)) { + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); + } + + if (!coveredSides.contains(UP)) { + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); + } + + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); + if (!coveredSides.contains(WEST)) { + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); + } + + if (!coveredSides.contains(EAST)) { + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(SOUTH), false); + } + } + + if (coveredSides.contains(WEST)) { + aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 0.125F, 1.0F, 1.0F); + aRenderer.setRenderBoundsFromBlock(aBlock); + if (!coveredSides.contains(DOWN)) { + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); + } + + if (!coveredSides.contains(UP)) { + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); + } + + if (!coveredSides.contains(NORTH)) { + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); + } + + if (!coveredSides.contains(SOUTH)) { + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); + } + + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(WEST), false); + } + + if (coveredSides.contains(EAST)) { + aBlock.setBlockBounds(0.875F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + aRenderer.setRenderBoundsFromBlock(aBlock); + if (!coveredSides.contains(DOWN)) { + renderNegativeYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); + } + + if (!coveredSides.contains(UP)) { + renderPositiveYFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); + } + + if (!coveredSides.contains(NORTH)) { + renderNegativeZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); + } + + if (!coveredSides.contains(SOUTH)) { + renderPositiveZFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); + } + + renderNegativeXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); + renderPositiveXFacing(aWorld, aRenderer, aBlock, aX, aY, aZ, texture.get(EAST), false); + } + + aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + aRenderer.setRenderBoundsFromBlock(aBlock); + return true; + } + } + } + } + + public static void renderNegativeYFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX, aY - 1, aZ, 0)) { + return; + } + + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aFullBlock ? aY - 1 : aY, aZ)); + } + + if (aIcon != null) { + for (ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderYNeg(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + aRenderer.flipTexture = false; + } + + public static void renderPositiveYFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX, aY + 1, aZ, 1)) { + return; + } + + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aFullBlock ? aY + 1 : aY, aZ)); + } + + if (aIcon != null) { + for (ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderYPos(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + aRenderer.flipTexture = false; + } + + public static void renderNegativeZFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX, aY, aZ - 1, 2)) { + return; + } + + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aY, aFullBlock ? aZ - 1 : aZ)); + } + + aRenderer.flipTexture = !aFullBlock; + if (aIcon != null) { + for (ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderZNeg(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + aRenderer.flipTexture = false; + } + + public static void renderPositiveZFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX, aY, aZ + 1, 3)) { + return; + } + + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aX, aY, aFullBlock ? aZ + 1 : aZ)); + } + + if (aIcon != null) { + for (ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderZPos(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + aRenderer.flipTexture = false; + } + + public static void renderNegativeXFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX - 1, aY, aZ, 4)) { + return; + } + + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aFullBlock ? aX - 1 : aX, aY, aZ)); + } + + if (aIcon != null) { + for (ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderXNeg(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + aRenderer.flipTexture = false; + } + + public static void renderPositiveXFacing(IBlockAccess aWorld, RenderBlocks aRenderer, Block aBlock, int aX, int aY, + int aZ, ITexture[] aIcon, boolean aFullBlock) { + if (aWorld != null) { + if (aFullBlock && !aBlock.shouldSideBeRendered(aWorld, aX + 1, aY, aZ, 5)) { + return; + } + + Tessellator.instance + .setBrightness(aBlock.getMixedBrightnessForBlock(aWorld, aFullBlock ? aX + 1 : aX, aY, aZ)); + } + + aRenderer.flipTexture = !aFullBlock; + if (aIcon != null) { + for (ITexture iTexture : aIcon) { + if (iTexture != null) { + iTexture.renderXPos(aRenderer, aBlock, aX, aY, aZ); + } + } + } + + aRenderer.flipTexture = false; + } + + @Override + public void renderInventoryBlock(Block aBlock, int aMeta, int aModelID, RenderBlocks aRenderer) { + aMeta += 30400; + if (aBlock instanceof BlockMachines) { + if (aMeta > 0 && aMeta < GregTechAPI.METATILEENTITIES.length + && GregTechAPI.METATILEENTITIES[aMeta] != null + && !GregTechAPI.METATILEENTITIES[aMeta].renderInInventory(aBlock, aMeta, aRenderer)) { + renderNormalInventoryMetaTileEntity(aBlock, aMeta, aRenderer); + } + } + aBlock.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + aRenderer.setRenderBoundsFromBlock(aBlock); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + + @Override + public boolean renderWorldBlock(IBlockAccess aWorld, int aX, int aY, int aZ, Block aBlock, int aModelID, + RenderBlocks aRenderer) { + TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ); + return aTileEntity == null ? false + : (aTileEntity instanceof IGregTechTileEntity + && ((IGregTechTileEntity) aTileEntity).getMetaTileEntity() != null + && ((IGregTechTileEntity) aTileEntity).getMetaTileEntity() + .renderInWorld(aWorld, aX, aY, aZ, aBlock, aRenderer) + ? true + : (aTileEntity instanceof IPipeRenderedTileEntity + ? renderPipeBlock( + aWorld, + aX, + aY, + aZ, + aBlock, + (IPipeRenderedTileEntity) aTileEntity, + aRenderer) + : renderStandardBlock(aWorld, aX, aY, aZ, aBlock, aRenderer))); + } + + @Override + public boolean shouldRender3DInInventory(int aModel) { + return true; + } + + @Override + public int getRenderId() { + return this.mRenderID; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_ElectricAutoWorkbench.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_ElectricAutoWorkbench.java deleted file mode 100644 index c1ba23c3c7..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_ElectricAutoWorkbench.java +++ /dev/null @@ -1,868 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.automation; - -import java.util.ArrayList; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.oredict.OreDictionary; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddGregtechLogo; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.gui.GTPP_UITextures; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MetaTileEntity_ElectricAutoWorkbench extends GT_MetaTileEntity_BasicTank implements IAddGregtechLogo { - - public int mMode = 0, mCurrentSlot = 0, mThroughPut = 0, mTicksUntilNextUpdate = 20; - public boolean mLastCraftSuccessful = false; - protected String mLocalName; - - private static final int MAX_MODES = 10; - private static final int MAX_THROUGHPUT = 4; - - public GT_MetaTileEntity_ElectricAutoWorkbench(final int aID, final int aTier, final String aDescription) { - super( - aID, - "basicmachine.automation.autoworkbench.0" + aTier, - "Auto Workbench (" + GT_Values.VN[aTier] + ")", - aTier, - 30, - aDescription); - mLocalName = "Auto Workbench (" + GT_Values.VN[aTier] + ")"; - } - - public GT_MetaTileEntity_ElectricAutoWorkbench(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, 30, aDescription, aTextures); - } - - @Override - public boolean isTransformerUpgradable() { - return true; - } - - @Override - public boolean isOverclockerUpgradable() { - return false; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex < 19; - } - - @Override - public boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return !isOutputFacing(side); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == getBaseMetaTileEntity().getBackFacing(); - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long maxEUInput() { - return GT_Values.V[mTier]; - } - - @Override - public long maxEUOutput() { - return mThroughPut % 2 == 0 ? GT_Values.V[mTier] : 0; - } - - @Override - public long getMinimumStoredEU() { - return GT_Values.V[this.mTier]; - } - - @Override - public long maxEUStore() { - return Math.max(2048L, GT_Values.V[this.mTier] * (this.mTier * GT_Values.V[this.mTier])); - } - - @Override - public int getSizeInventory() { - return 30; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ElectricAutoWorkbench( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mMode", mMode); - aNBT.setInteger("mThroughPut", mThroughPut); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mMode = aNBT.getInteger("mMode"); - mThroughPut = aNBT.getInteger("mThroughPut"); - } - - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public boolean displaysItemStack() { - return false; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { - return side != getBaseMetaTileEntity().getFrontFacing() && side != getBaseMetaTileEntity().getBackFacing(); - } - - private void switchMode() { - mInventory[28] = null; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().isServerSide() - && getBaseMetaTileEntity().getUniversalEnergyStored() >= (mMode == 5 || mMode == 6 ? 128 : 2048) - && (getBaseMetaTileEntity().hasWorkJustBeenEnabled() || --mTicksUntilNextUpdate < 1)) { - mTicksUntilNextUpdate = 32; - - for (byte i = 19; i < 28; i++) { - if (mInventory[i] != null && mInventory[i].isItemStackDamageable() - && mInventory[i].getItem() - .hasContainerItem(mInventory[i])) { - mInventory[i].setItemDamage(OreDictionary.WILDCARD_VALUE); - } - } - - if (mInventory[18] == null) { - for (byte i = 0; i < 18 && mFluid != null; i++) { - ItemStack tOutput = GT_Utility.fillFluidContainer(mFluid, mInventory[i], false, true); - if (tOutput != null) { - for (byte j = 0; j < 9; j++) { - if (mInventory[j] == null || (GT_Utility.areStacksEqual(tOutput, mInventory[j]) - && mInventory[j].stackSize + tOutput.stackSize <= tOutput.getMaxStackSize())) { - mFluid.amount -= GT_Utility.getFluidForFilledItem(tOutput, true).amount - * tOutput.stackSize; - getBaseMetaTileEntity().decrStackSize(i, 1); - if (mInventory[j] == null) { - mInventory[j] = tOutput; - } else { - mInventory[j].stackSize++; - } - if (mFluid.amount <= 0) mFluid = null; - break; - } - } - } - } - - ItemStack[] tRecipe = new ItemStack[9]; - ItemStack tTempStack = null, tOutput = null; - - if (mInventory[17] != null && mThroughPut < 2 && mMode != 0) { - if (mInventory[18] == null) { - mInventory[18] = mInventory[17]; - mInventory[17] = null; - } - } else { - if (!mLastCraftSuccessful) { - mCurrentSlot = (mCurrentSlot + 1) % 18; - for (int i = 0; i < 17 && mInventory[mCurrentSlot] == null; i++) - mCurrentSlot = (mCurrentSlot + 1) % 18; - } - switch (mMode) { - case 0 -> { - if (mInventory[mCurrentSlot] != null - && !isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { - if (mInventory[18] == null && mThroughPut < 2 && mCurrentSlot < 8) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - break; - } - for (int i = 0; i < 9; i++) { - tRecipe[i] = mInventory[i + 19]; - if (tRecipe[i] != null) { - tRecipe[i] = GT_Utility.copy(tRecipe[i]); - tRecipe[i].stackSize = 1; - } - } - } - case 1 -> { - if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { - if (mInventory[18] == null && mThroughPut < 2) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - break; - } - tTempStack = GT_Utility.copy(mInventory[mCurrentSlot]); - tTempStack.stackSize = 1; - tRecipe[0] = tTempStack; - if (GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { - tRecipe[1] = tTempStack; - tRecipe[3] = tTempStack; - tRecipe[4] = tTempStack; - } else break; - if (GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { - tRecipe[2] = tTempStack; - tRecipe[5] = tTempStack; - tRecipe[6] = tTempStack; - tRecipe[7] = tTempStack; - tRecipe[8] = tTempStack; - } else break; - if (GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { - if (mInventory[18] == null) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - } - } - case 2 -> { - if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { - if (mInventory[18] == null && mThroughPut < 2) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - break; - } - tTempStack = GT_Utility.copy(mInventory[mCurrentSlot]); - tTempStack.stackSize = 1; - tRecipe[0] = tTempStack; - if (GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { - if (mInventory[18] == null) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - } - } - case 3 -> { - if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { - if (mInventory[18] == null && mThroughPut < 2) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - break; - } - tTempStack = GT_Utility.copy(mInventory[mCurrentSlot]); - tTempStack.stackSize = 1; - tRecipe[0] = tTempStack; - tRecipe[1] = tTempStack; - tRecipe[3] = tTempStack; - tRecipe[4] = tTempStack; - if (GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { - if (mInventory[18] == null) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - } - } - case 4 -> { - if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { - if (mInventory[18] == null && mThroughPut < 2) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - break; - } - tTempStack = GT_Utility.copy(mInventory[mCurrentSlot]); - tTempStack.stackSize = 1; - tRecipe[0] = tTempStack; - tRecipe[1] = tTempStack; - tRecipe[2] = tTempStack; - tRecipe[3] = tTempStack; - tRecipe[4] = tTempStack; - tRecipe[5] = tTempStack; - tRecipe[6] = tTempStack; - tRecipe[7] = tTempStack; - tRecipe[8] = tTempStack; - if (GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { - if (mInventory[18] == null) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - } - } - case 5 -> { - if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { - if (mInventory[18] == null && mThroughPut < 2) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - break; - } - tTempStack = GT_Utility.copy(mInventory[mCurrentSlot]); - tTempStack.stackSize = 1; - tRecipe[0] = tTempStack; - tOutput = GT_OreDictUnificator.get(true, tTempStack); - if (tOutput != null && GT_Utility.areStacksEqual(tOutput, tTempStack)) tOutput = null; - if (tOutput == null) { - tRecipe[0] = null; - if (mInventory[18] == null) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - } - } - case 6 -> { - if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { - if (mInventory[18] == null && mThroughPut < 2) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - } else if (OrePrefixes.dustSmall.contains(mInventory[mCurrentSlot])) { - tTempStack = GT_Utility.copy(mInventory[mCurrentSlot]); - tTempStack.stackSize = 1; - tRecipe[0] = tTempStack; - tRecipe[1] = tTempStack; - tRecipe[3] = tTempStack; - tRecipe[4] = tTempStack; - if (GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) - == null) { - if (mInventory[18] == null) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - } - } else if (OrePrefixes.dustTiny.contains(mInventory[mCurrentSlot])) { - tTempStack = GT_Utility.copy(mInventory[mCurrentSlot]); - tTempStack.stackSize = 1; - tRecipe[0] = tTempStack; - tRecipe[1] = tTempStack; - tRecipe[2] = tTempStack; - tRecipe[3] = tTempStack; - tRecipe[4] = tTempStack; - tRecipe[5] = tTempStack; - tRecipe[6] = tTempStack; - tRecipe[7] = tTempStack; - tRecipe[8] = tTempStack; - if (GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) - == null) { - if (mInventory[18] == null) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - } - } else { - if (mInventory[18] == null && mThroughPut < 2) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - } - } - case 7 -> { - if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot]) - || !OrePrefixes.nugget.contains(mInventory[mCurrentSlot])) { - if (mInventory[18] == null && mThroughPut < 2) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - break; - } - tTempStack = GT_Utility.copy(mInventory[mCurrentSlot]); - tTempStack.stackSize = 1; - tRecipe[0] = tTempStack; - tRecipe[1] = tTempStack; - tRecipe[2] = tTempStack; - tRecipe[3] = tTempStack; - tRecipe[4] = tTempStack; - tRecipe[5] = tTempStack; - tRecipe[6] = tTempStack; - tRecipe[7] = tTempStack; - tRecipe[8] = tTempStack; - if (GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { - if (mInventory[18] == null) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - } - } - case 8 -> { - if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot]) - || mInventory[mCurrentSlot].getItemDamage() <= 0 - || !mInventory[mCurrentSlot].getItem() - .isRepairable()) { - if (mInventory[18] == null && mThroughPut < 2) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - break; - } - tTempStack = GT_Utility.copy(mInventory[mCurrentSlot]); - tTempStack.stackSize = 1; - for (int i = mCurrentSlot + 1; i < 18; i++) { - if (mInventory[i] != null && mInventory[i].getItem() == tTempStack.getItem() - && mInventory[mCurrentSlot].getItemDamage() + mInventory[i].getItemDamage() - > tTempStack.getMaxDamage()) { - tRecipe[0] = tTempStack; - tRecipe[1] = GT_Utility.copy(mInventory[i]); - if (GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) - == null) { - if (mInventory[18] == null) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - } - break; - } - } - } - case 9 -> { - if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { - if (mInventory[18] == null && mThroughPut < 2) { - mInventory[18] = mInventory[mCurrentSlot]; - mInventory[mCurrentSlot] = null; - mTicksUntilNextUpdate = 1; - } - break; - } - for (byte i = 0, j = 0; i < 18 && j < 9 - && (j < 2 - || GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) - == null); i++) { - tRecipe[j] = mInventory[(mCurrentSlot + i) % 18]; - if (tRecipe[j] != null) { - tRecipe[j] = GT_Utility.copy(tRecipe[j]); - tRecipe[j].stackSize = 1; - j++; - } - } - if (tRecipe[1] == null) tRecipe[0] = null; - } - } - } - - if (tOutput == null) - tOutput = GT_ModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe); - - if (tOutput != null || mMode == 0) mInventory[28] = tOutput; - - if (tOutput == null) { - mLastCraftSuccessful = false; - } else { - if ((tTempStack = GT_OreDictUnificator.get(true, tOutput)) != null) { - tTempStack.stackSize = tOutput.stackSize; - tOutput = tTempStack; - } - - mInventory[28] = GT_Utility.copy(tOutput); - ArrayList tList = recipeContent(tRecipe), tContent = benchContent(); - if (tList.size() > 0 && tContent.size() > 0) { - - boolean success = (mMode == 6 || mMode == 7 || mInventory[17] == null); - for (byte i = 0; i < tList.size() && success; i++) { - success = false; - for (byte j = 0; j < tContent.size() && !success; j++) { - if (GT_Utility.areStacksEqual(tList.get(i), tContent.get(j))) { - if (tList.get(i).stackSize <= tContent.get(j).stackSize) { - success = true; - } - } - } - } - - if (success) { - mLastCraftSuccessful = true; - - for (byte i = 8; i > -1; i--) { - for (byte j = 17; j > -1; j--) { - if (tRecipe[i] != null && mInventory[j] != null) { - if (GT_Utility.areStacksEqual(tRecipe[i], mInventory[j])) { - ItemStack tStack = GT_Utility.getContainerItem(mInventory[j], true); - if (tStack != null) { - getBaseMetaTileEntity().decrStackSize(j, 1); - if (!tStack.isItemStackDamageable() - || tStack.getItemDamage() < tStack.getMaxDamage()) { - for (byte k = 9; k < 18; k++) { - if (mInventory[k] == null) { - mInventory[k] = GT_Utility.copy(tStack); - break; - } else if (GT_Utility.areStacksEqual(mInventory[k], tStack) - && mInventory[k].stackSize + tStack.stackSize - <= tStack.getMaxStackSize()) { - mInventory[k].stackSize += tStack.stackSize; - break; - } - } - } - } else { - getBaseMetaTileEntity().decrStackSize(j, 1); - } - break; - } - } - } - } - - mInventory[18] = GT_Utility.copy(tOutput); - getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(mMode == 5 || mMode == 6 || mMode == 7 ? 128 : 2048, true); - mTicksUntilNextUpdate = 1; - } else { - mLastCraftSuccessful = false; - if (mInventory[mMode == 0 ? 8 : 17] != null && mInventory[18] == null && mThroughPut < 2) { - mInventory[18] = mInventory[mMode == 0 ? 8 : 17]; - mInventory[mMode == 0 ? 8 : 17] = null; - mTicksUntilNextUpdate = 1; - } - } - } - - if (mInventory[18] == null && mThroughPut < 2) { - for (byte i = 0; i < 8; i++) { - for (byte j = i; ++j < 9;) { - if (GT_Utility.areStacksEqual(mInventory[i], mInventory[j]) - && mInventory[i].getMaxStackSize() > 8) { - mInventory[18] = mInventory[j]; - mInventory[j] = null; - mTicksUntilNextUpdate = 1; - break; - } - } - } - } - } - } - - if (mThroughPut < 2) { - getBaseMetaTileEntity().decreaseStoredEnergyUnits( - GT_Utility.moveOneItemStack( - getBaseMetaTileEntity(), - getBaseMetaTileEntity().getIInventoryAtSide(getBaseMetaTileEntity().getBackFacing()), - getBaseMetaTileEntity().getBackFacing(), - getBaseMetaTileEntity().getFrontFacing(), - null, - false, - (byte) 64, - (byte) 1, - (byte) 64, - (byte) 1) * 10, - true); - } - } - } - - private boolean isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(ItemStack aStack) { - if (aStack == null) return true; - for (byte i = 19; i < 28; i++) { - if (mInventory[i] != null) { - if (GT_Utility.areStacksEqual(mInventory[i], aStack)) return true; - if (GT_Utility.areStacksEqual(GT_Utility.getContainerForFilledItem(mInventory[i], true), aStack)) - return true; - } - } - return false; - } - - private ArrayList recipeContent(ItemStack[] tRecipe) { - ArrayList tList = new ArrayList<>(); - for (byte i = 0; i < 9; i++) { - if (tRecipe[i] != null) { - boolean temp = false; - for (ItemStack itemStack : tList) { - if (GT_Utility.areStacksEqual(tRecipe[i], itemStack)) { - itemStack.stackSize++; - temp = true; - break; - } - } - if (!temp) tList.add(GT_Utility.copy(1, tRecipe[i])); - } - } - return tList; - } - - private ArrayList benchContent() { - ArrayList tList = new ArrayList<>(); - for (byte i = 0; i < 18; i++) { - if (mInventory[i] != null) { - boolean temp = false; - for (byte j = 0; j < tList.size(); j++) { - if (GT_Utility.areStacksEqual(mInventory[i], mInventory[j])) { - tList.get(j).stackSize += mInventory[i].stackSize; - temp = true; - break; - } - } - if (!temp) tList.add(GT_Utility.copy(mInventory[i])); - } - } - return tList; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return mMode == 0 ? aIndex >= 10 : aIndex >= 18; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return mMode == 0 ? aIndex < 9 : aIndex < 18; - } - - /* - * @Override public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { if (aSide == - * aFacing) return 112; if (GT_Utility.getOppositeSide(aSide) == aFacing) return 113; return 114; } - */ - - @Override - public int getCapacity() { - return 16000; - } - - @Override - public int getTankPressure() { - return -100; - } - - @Override - public String[] getDescription() { - return new String[] { "Automatic Crafting Table Mk III", - // this.mDescription, - CORE.GT_Tooltip.get() }; - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFront(i); - rTextures[6][i + 1] = this.getBack(i); - rTextures[7][i + 1] = this.getBottom(i); - rTextures[8][i + 1] = this.getTop(i); - rTextures[9][i + 1] = this.getSides(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return this.mTextures[0][aColorIndex + 1]; - } else if (side.getOpposite() == facing) { - return this.mTextures[1][aColorIndex + 1]; - } else { - return this.mTextures[4][aColorIndex + 1]; - } - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Adv_Workbench_Crafting_Overlay) }; - } - - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(BlockIcons.OVERLAY_PIPE) }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Adv_Workbench_Crafting_Overlay) }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Adv_Workbench_Crafting_Overlay) }; - } - - @Override - public void addGregTechLogo(ModularWindow.Builder builder) { - builder.widget( - new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) - .setSize(17, 17) - .setPos(118, 22)); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 3) - .endAtSlot(8) - .build() - .setPos(7, 4)) - .widget( - SlotGroup.ofItemHandler(inventoryHandler, 9) - .startFromSlot(9) - .endAtSlot(17) - .canInsert(false) - .background(GT_UITextures.SLOT_DARK_GRAY) - .applyForWidget(SlotWidget::disableShiftInsert) - .build() - .setPos(7, 59)) - .widget( - new SlotWidget(inventoryHandler, 18).setAccess(true, false) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_OUT) - .setPos(151, 40)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SLOTS_HOLO_3BY3) - .setPos(62, 4) - .setSize(54, 54)) - .widget( - SlotGroup.ofItemHandler(inventoryHandler, 3) - .startFromSlot(19) - .endAtSlot(27) - .phantom(true) - .background(GT_UITextures.TRANSPARENT) - .build() - .setPos(62, 4)) - .widget( - SlotWidget.phantom(inventoryHandler, 28) - .disableInteraction() - .setBackground(getGUITextureSet().getItemSlot(), GTPP_UITextures.OVERLAY_SLOT_ARROW_4) - .setPos(151, 4)); - builder.widget( - new CycleButtonWidget().setGetter(() -> mThroughPut) - .setSetter(val -> mThroughPut = val) - .setLength(MAX_THROUGHPUT) - .setTextureGetter(i -> GTPP_UITextures.OVERLAY_BUTTON_THROUGHPUT[i]) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .setPos(120, 4) - .setSize(18, 18)); - String[] mModeText = new String[] { "Normal Crafting Table", "???", "1x1", "2x2", "3x3", "Unifier", "Dust", - "???", "Hammer?", "Circle" }; - CycleButtonWidget modeButton = new CycleButtonWidget().setGetter(() -> mMode) - .setSetter(val -> { - mMode = val; - switchMode(); - }) - .setLength(MAX_MODES) - .setTextureGetter(i -> GTPP_UITextures.OVERLAY_BUTTON_MODE[i]); - for (int i = 0; i < MAX_MODES; i++) { - modeButton.addTooltip(i, "Mode: " + mModeText[i]); - } - builder.widget( - modeButton.setBackground(GT_UITextures.BUTTON_STANDARD) - .setPos(120, 40) - .setSize(18, 18)); - builder.widget( - new DrawableWidget().setDrawable(GTPP_UITextures.PICTURE_WORKBENCH_CIRCLE) - .setPos(136, 23) - .setSize(16, 16)) - .widget( - new DrawableWidget().setDrawable(GTPP_UITextures.PICTURE_ARROW_WHITE_DOWN) - .setPos(155, 23) - .setSize(10, 16)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_TesseractGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_TesseractGenerator.java deleted file mode 100644 index 33dbfee6d4..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_TesseractGenerator.java +++ /dev/null @@ -1,833 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.automation; - -import static gtPlusPlus.core.lib.CORE.sTesseractGeneratorOwnershipMap; -import static gtPlusPlus.core.lib.CORE.sTesseractTerminalOwnershipMap; - -import java.util.UUID; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.IInventory; -import net.minecraft.inventory.ISidedInventory; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; -import net.minecraftforge.fluids.IFluidHandler; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IDigitalChest; -import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.helpers.tesseract.TesseractHelper; - -public class GT_MetaTileEntity_TesseractGenerator extends GT_MetaTileEntity_BasicTank { - - public static int TESSERACT_ENERGY_COST_DIMENSIONAL = 512; - public static int TESSERACT_ENERGY_COST = 128; - public byte isWorking = 0; - public int oFrequency = 0; - public int mNeededEnergy = 0; - public int mFrequency = 0; - public UUID mOwner; - - public GT_MetaTileEntity_TesseractGenerator(final int aID, final String aName, final String aNameRegional, - final int aTier) { - super(aID, aName, aNameRegional, aTier, 3, ""); - } - - public GT_MetaTileEntity_TesseractGenerator(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_TesseractGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public boolean isTransformerUpgradable() { - return true; - } - - @Override - public boolean isOverclockerUpgradable() { - return false; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isFacingValid(final ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public boolean isInputFacing(final ForgeDirection side) { - return true; - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getBackFacing(); - } - - @Override - public boolean isValidSlot(final int aIndex) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return this.getBaseMetaTileEntity() - .getEUCapacity() / 2; - } - - @Override - public long maxEUInput() { - return 512; - } - - @Override - public long maxEUOutput() { - return 0; - } - - @Override - public long maxEUStore() { - return 512 * 32; - } - - @Override - public long maxSteamStore() { - return this.maxEUStore(); - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean ownerControl() { - return true; - } - - @Override - public int getProgresstime() { - return (TesseractHelper.getGeneratorByFrequency(PlayerUtils.getPlayerOnServerFromUUID(mOwner), this.mFrequency) - == this) && (this.isWorking >= 20) ? 999 : 0; - } - - @Override - public int maxProgresstime() { - return 1000; - } - - @Override - public void saveNBTData(final NBTTagCompound aNBT) { - aNBT.setInteger("mFrequency", this.mFrequency); - if (mOwner != null) aNBT.setString("mOwner", mOwner.toString()); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - this.mFrequency = aNBT.getInteger("mFrequency"); - try { - this.mOwner = UUID.fromString(aNBT.getString("mOnwer")); - } catch (IllegalArgumentException i) { - - } - } - - @Override - public void onConfigLoad() { - int J = 4; - TESSERACT_ENERGY_COST = 128 * J; - TESSERACT_ENERGY_COST_DIMENSIONAL = 512 * J; - } - - @Override - public void onServerStart() { - sTesseractGeneratorOwnershipMap.clear(); - sTesseractTerminalOwnershipMap.clear(); - } - - public void onServerStop() { - sTesseractGeneratorOwnershipMap.clear(); - sTesseractTerminalOwnershipMap.clear(); - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer, - final ForgeDirection side, final float aX, final float aY, final float aZ) { - - if (this.mOwner == null) { - if (this.getBaseMetaTileEntity() - .getOwnerName() != null - && !this.getBaseMetaTileEntity() - .getOwnerName() - .equals("")) { - if (this.getBaseMetaTileEntity() - .getOwnerName() - .toLowerCase() - .equals( - aPlayer.getDisplayName() - .toLowerCase())) { - this.mOwner = PlayerUtils.getPlayersUUIDByName( - this.getBaseMetaTileEntity() - .getOwnerName()); - } - } - } - - if (side == this.getBaseMetaTileEntity() - .getFrontFacing()) { - if (aPlayer.getUniqueID() - .compareTo(this.mOwner) == 0) { - final float[] tCoords = GT_Utility.getClickedFacingCoords(side, aX, aY, aZ); - switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + (2 * (byte) (int) (tCoords[1] * 2.0F)))) { - case 0: - Logger.WARNING("Freq. -1 | " + this.mFrequency); - try { - CORE.sTesseractGeneratorOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency -= 1; - - break; - case 1: - Logger.WARNING("Freq. +1 | " + this.mFrequency); - try { - CORE.sTesseractGeneratorOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency += 1; - default: - // Utils.LOG_WARNING("Did not click the correct place."); - break; - } - if (getGeneratorEntity(this.mFrequency) != null && getGeneratorEntity(this.mFrequency) != this) { - GT_Utility.sendChatToPlayer( - aPlayer, - "Frequency: " + this.mFrequency + EnumChatFormatting.RED + " (Occupied)"); - } else { - GT_Utility.sendChatToPlayer(aPlayer, "Frequency: " + this.mFrequency); - } - } else if (aPlayer.getUniqueID() - .compareTo(this.mOwner) != 0) { - GT_Utility.sendChatToPlayer(aPlayer, "This is not your Tesseract Generator to configure."); - } - } - - return true; - } - - @Override - public void onScrewdriverRightClick(final ForgeDirection side, final EntityPlayer aPlayer, final float aX, - final float aY, final float aZ) { - if (aPlayer.getUniqueID() - .compareTo(this.mOwner) == 0) { - if (side == this.getBaseMetaTileEntity() - .getFrontFacing()) { - final float[] tCoords = GT_Utility.getClickedFacingCoords(side, aX, aY, aZ); - switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + (2 * (byte) (int) (tCoords[1] * 2.0F)))) { - case 0 -> { - try { - CORE.sTesseractGeneratorOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency -= 64; - } - case 1 -> { - try { - CORE.sTesseractGeneratorOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency += 64; - } - case 2 -> { - try { - CORE.sTesseractGeneratorOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency -= 512; - } - case 3 -> { - try { - CORE.sTesseractGeneratorOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency += 512; - } - } - if (getGeneratorEntity(this.mFrequency) != null && getGeneratorEntity(this.mFrequency) != this) { - GT_Utility.sendChatToPlayer( - aPlayer, - "Frequency: " + this.mFrequency + EnumChatFormatting.RED + " (Occupied)"); - } else { - GT_Utility.sendChatToPlayer(aPlayer, "Frequency: " + this.mFrequency); - } - } - } else { - GT_Utility.sendChatToPlayer(aPlayer, "This is not your Tesseract Generator to configure."); - } - } - - public boolean allowCoverOnSide(final ForgeDirection side, final int aCoverID) { - return side != this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public String[] getInfoData() { - final TileEntity tTileEntity = this.getBaseMetaTileEntity() - .getTileEntityAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity != null) && (this.getBaseMetaTileEntity() - .isAllowedToWork()) - && ((tTileEntity instanceof IGregTechDeviceInformation)) - && (((IGregTechDeviceInformation) tTileEntity).isGivingInformation())) { - return ((IGregTechDeviceInformation) tTileEntity).getInfoData(); - } - return new String[] { "Tesseract Generator", "Freqency:", "" + this.mFrequency, - (getGeneratorEntity() == this) && (this.isWorking >= 20) ? "Active" : "Inactive" }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - public boolean isSendingInformation() { - final TileEntity tTileEntity = this.getBaseMetaTileEntity() - .getTileEntityAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity != null) && (this.getBaseMetaTileEntity() - .isAllowedToWork()) && ((tTileEntity instanceof IGregTechDeviceInformation))) { - return ((IGregTechDeviceInformation) tTileEntity).isGivingInformation(); - } - return false; - } - - @Override - public boolean isDigitalChest() { - final TileEntity tTileEntity = this.getBaseMetaTileEntity() - .getTileEntityAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity != null) && (this.getBaseMetaTileEntity() - .isAllowedToWork()) && ((tTileEntity instanceof IDigitalChest))) { - return ((IDigitalChest) tTileEntity).isDigitalChest(); - } - return false; - } - - @Override - public ItemStack[] getStoredItemData() { - final TileEntity tTileEntity = this.getBaseMetaTileEntity() - .getTileEntityAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity != null) && (this.getBaseMetaTileEntity() - .isAllowedToWork()) && ((tTileEntity instanceof IDigitalChest))) { - return ((IDigitalChest) tTileEntity).getStoredItemData(); - } - return new ItemStack[] {}; - } - - @Override - public void setItemCount(final int aCount) { - final TileEntity tTileEntity = this.getBaseMetaTileEntity() - .getTileEntityAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity != null) && (this.getBaseMetaTileEntity() - .isAllowedToWork()) && ((tTileEntity instanceof IDigitalChest))) { - ((IDigitalChest) tTileEntity).setItemCount(aCount); - } - } - - @Override - public int getMaxItemCount() { - final TileEntity tTileEntity = this.getBaseMetaTileEntity() - .getTileEntityAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity != null) && (this.getBaseMetaTileEntity() - .isAllowedToWork()) && ((tTileEntity instanceof IDigitalChest))) { - return ((IDigitalChest) tTileEntity).getMaxItemCount(); - } - return 0; - } - - @Override - public boolean isItemValidForSlot(final int aIndex, final ItemStack aStack) { - final IInventory tTileEntity = this.getBaseMetaTileEntity() - .getIInventoryAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return false; - } - return tTileEntity.isItemValidForSlot(aIndex, aStack); - } - - @Override - public int[] getAccessibleSlotsFromSide(final int ordinalSide) { - final IInventory tTileEntity = this.getBaseMetaTileEntity() - .getIInventoryAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return new int[0]; - } - if ((tTileEntity instanceof ISidedInventory)) { - return ((ISidedInventory) tTileEntity).getAccessibleSlotsFromSide(ordinalSide); - } - final int[] rArray = new int[this.getSizeInventory()]; - for (int i = 0; i < this.getSizeInventory(); i++) { - rArray[i] = i; - } - return rArray; - } - - @Override - public boolean canInsertItem(final int aIndex, final ItemStack aStack, final int ordinalSide) { - final IInventory tTileEntity = this.getBaseMetaTileEntity() - .getIInventoryAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return false; - } - if ((tTileEntity instanceof ISidedInventory)) { - return ((ISidedInventory) tTileEntity).canInsertItem(aIndex, aStack, ordinalSide); - } - return true; - } - - @Override - public boolean canExtractItem(final int aIndex, final ItemStack aStack, final int ordinalSide) { - final IInventory tTileEntity = this.getBaseMetaTileEntity() - .getIInventoryAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return false; - } - if ((tTileEntity instanceof ISidedInventory)) { - return ((ISidedInventory) tTileEntity).canExtractItem(aIndex, aStack, ordinalSide); - } - return true; - } - - @Override - public int getSizeInventory() { - final IInventory tTileEntity = this.getBaseMetaTileEntity() - .getIInventoryAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return 0; - } - return tTileEntity.getSizeInventory(); - } - - @Override - public ItemStack getStackInSlot(final int aIndex) { - final IInventory tTileEntity = this.getBaseMetaTileEntity() - .getIInventoryAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return null; - } - return tTileEntity.getStackInSlot(aIndex); - } - - @Override - public void setInventorySlotContents(final int aIndex, final ItemStack aStack) { - final IInventory tTileEntity = this.getBaseMetaTileEntity() - .getIInventoryAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return; - } - tTileEntity.setInventorySlotContents(aIndex, aStack); - } - - @Override - public ItemStack decrStackSize(final int aIndex, final int aAmount) { - final IInventory tTileEntity = this.getBaseMetaTileEntity() - .getIInventoryAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return null; - } - return tTileEntity.decrStackSize(aIndex, aAmount); - } - - @Override - public String getInventoryName() { - final IInventory tTileEntity = this.getBaseMetaTileEntity() - .getIInventoryAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return ""; - } - return tTileEntity.getInventoryName(); - } - - @Override - public int getInventoryStackLimit() { - final IInventory tTileEntity = this.getBaseMetaTileEntity() - .getIInventoryAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return 0; - } - return tTileEntity.getInventoryStackLimit(); - } - - @Override - public boolean canFill(final ForgeDirection aSide, final Fluid aFluid) { - final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() - .getITankContainerAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return false; - } - return tTileEntity.canFill(aSide, aFluid); - } - - @Override - public boolean canDrain(final ForgeDirection aSide, final Fluid aFluid) { - final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() - .getITankContainerAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return false; - } - return tTileEntity.canDrain(aSide, aFluid); - } - - @Override - public FluidTankInfo[] getTankInfo(final ForgeDirection aSide) { - final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() - .getITankContainerAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return new FluidTankInfo[0]; - } - return tTileEntity.getTankInfo(aSide); - } - - @Override - public int fill_default(final ForgeDirection aDirection, final FluidStack aFluid, final boolean doFill) { - final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() - .getITankContainerAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return 0; - } - return tTileEntity.fill(aDirection, aFluid, doFill); - } - - @Override - public FluidStack drain(final ForgeDirection aDirection, final int maxDrain, final boolean doDrain) { - final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() - .getITankContainerAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return null; - } - return tTileEntity.drain(aDirection, maxDrain, doDrain); - } - - @Override - public FluidStack drain(final ForgeDirection aSide, final FluidStack aFluid, final boolean doDrain) { - final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() - .getITankContainerAtSide( - this.getBaseMetaTileEntity() - .getBackFacing()); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return null; - } - return tTileEntity.drain(aSide, aFluid, doDrain); - } - - public boolean addEnergyConsumption(final GT_MetaTileEntity_TesseractTerminal aTerminal) { - if (!this.getBaseMetaTileEntity() - .isAllowedToWork()) { - return false; - } - int J = (aTerminal.getBaseMetaTileEntity() - .getWorld() - == this.getBaseMetaTileEntity() - .getWorld() ? TESSERACT_ENERGY_COST : TESSERACT_ENERGY_COST_DIMENSIONAL); - - J *= 4; - - this.mNeededEnergy += J; - - return true; - } - - public boolean isValidTesseractGenerator(final String aOwnerName, final boolean aWorkIrrelevant) { - return (this.getBaseMetaTileEntity() != null) && (!this.getBaseMetaTileEntity() - .isInvalidTileEntity()) - && (this.getBaseMetaTileEntity() - .isAllowedToWork()) - && ((aOwnerName == null) || (this.getBaseMetaTileEntity() - .getOwnerName() - .equals(aOwnerName))) - && ((aWorkIrrelevant) || (this.isWorking >= 20)); - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - // TODO Auto-generated method stub - super.onPreTick(aBaseMetaTileEntity, aTick); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - // Utils.LOG_WARNING("Ticking Generator. 0"); - if (this.getBaseMetaTileEntity() - .isServerSide()) { - // Utils.LOG_WARNING("Ticking Generator."); - // Set owner - if (PlayerUtils.getPlayersUUIDByName( - this.getBaseMetaTileEntity() - .getOwnerName()) - != null) { - if (this.mOwner == null) { - Logger.WARNING("Setting Generators Owner. 1"); - this.mOwner = PlayerUtils.getPlayersUUIDByName( - this.getBaseMetaTileEntity() - .getOwnerName()); - } - } - - if (this.mFrequency != this.oFrequency) { - - Logger.WARNING("mFreq != oFreq"); - - if (getGeneratorEntity() == this) { - getGeneratorEntity(this.oFrequency); - this.getBaseMetaTileEntity() - .issueBlockUpdate(); - Logger.WARNING("this Gen == oFreq on map - do block update"); - } - Logger.WARNING("mFreq will be set to oFreq"); - this.oFrequency = this.mFrequency; - } - if ((this.getBaseMetaTileEntity() - .isAllowedToWork()) - && (this.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(this.mNeededEnergy, false))) { - // Utils.LOG_WARNING("Can Work & Has Energy"); - if ((getGeneratorEntity(Integer.valueOf(this.mFrequency)) == null) - || (!getGeneratorEntity(Integer.valueOf(this.mFrequency)).isValidTesseractGenerator(null, true))) { - // Utils.LOG_WARNING("storing TE I think to mFreq map?"); - TesseractHelper.setGeneratorOwnershipByPlayer( - PlayerUtils.getPlayerOnServerFromUUID(mOwner), - this.mFrequency, - this); - } - } else { - if (getGeneratorEntity(Integer.valueOf(this.mFrequency)) == this) { - Logger.WARNING("this gen == mFreq on map - do block update"); - TesseractHelper.removeGenerator(PlayerUtils.getPlayerOnServerFromUUID(mOwner), this.mFrequency); - this.getBaseMetaTileEntity() - .issueBlockUpdate(); - } - this.isWorking = 0; - } - if (getGeneratorEntity(Integer.valueOf(this.mFrequency)) == this) { - // Utils.LOG_WARNING("mFreq == this - do work related things"); - if (this.isWorking < 20) { - this.isWorking = ((byte) (this.isWorking + 1)); - } - if (this.isWorking == 20) { - this.getBaseMetaTileEntity() - .issueBlockUpdate(); - this.isWorking = ((byte) (this.isWorking + 1)); - } - } else { - this.isWorking = 0; - } - this.mNeededEnergy = 0; - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll( - this.mDescriptionArray, - "Generates a Tesseract for the attached Inventory", - "Connect with pipes to insert items", - "Consumes " + TESSERACT_ENERGY_COST + "EU/t for same dimension transfers", - "Consumes " + TESSERACT_ENERGY_COST_DIMENSIONAL + "EU/t for cross dimensional transfers", - CORE.GT_Tooltip.get()); - } - - @Override - public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - return new ITexture[0][0][0]; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return side == facing - ? new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Screen_Frequency) } - : new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), - new GT_RenderedTexture(Textures.BlockIcons.VOID) }; - } - - // To-Do? - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return false; - } - - @Override - public boolean canTankBeEmptied() { - return false; - } - - @Override - public boolean displaysItemStack() { - return false; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - private GT_MetaTileEntity_TesseractGenerator getGeneratorEntity() { - GT_MetaTileEntity_TesseractGenerator thisGenerator = TesseractHelper - .getGeneratorByFrequency(PlayerUtils.getPlayerOnServerFromUUID(mOwner), this.mFrequency); - if (thisGenerator != null) { - return thisGenerator; - } - return null; - } - - private GT_MetaTileEntity_TesseractGenerator getGeneratorEntity(int frequency) { - GT_MetaTileEntity_TesseractGenerator thisGenerator = TesseractHelper - .getGeneratorByFrequency(PlayerUtils.getPlayerOnServerFromUUID(mOwner), frequency); - if (thisGenerator != null) { - return thisGenerator; - } - return null; - } - - @Override - public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - if (this.getBaseMetaTileEntity() - .getOwnerName() != null - && !this.getBaseMetaTileEntity() - .getOwnerName() - .equals("")) { - this.mOwner = PlayerUtils.getPlayersUUIDByName( - this.getBaseMetaTileEntity() - .getOwnerName()); - Logger.WARNING("Setting Generators Owner. 2"); - } - super.onCreated(aStack, aWorld, aPlayer); - } - - @Override - public void onRemoval() { - try { - CORE.sTesseractGeneratorOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - super.onRemoval(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_TesseractTerminal.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_TesseractTerminal.java deleted file mode 100644 index 28b567e06c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/GT_MetaTileEntity_TesseractTerminal.java +++ /dev/null @@ -1,643 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.automation; - -import java.util.UUID; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.fluids.FluidTankInfo; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.helpers.tesseract.TesseractHelper; - -public class GT_MetaTileEntity_TesseractTerminal extends GT_MetaTileEntity_BasicTank { - - public int mFrequency = 0; - public UUID mOwner; - public boolean mDidWork = false; - public static boolean sInterDimensionalTesseractAllowed = true; - private static int TESSERACT_ENERGY_COST = 128; - private static int TESSERACT_ENERGY_COST_DIMENSIONAL = 512; - - public GT_MetaTileEntity_TesseractTerminal(final int aID, final String aName, final String aNameRegional, - final int aTier) { - super(aID, aName, aNameRegional, aTier, 3, ""); - } - - public GT_MetaTileEntity_TesseractTerminal(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_TesseractTerminal(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public boolean isTransformerUpgradable() { - return false; - } - - @Override - public boolean isOverclockerUpgradable() { - return false; - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isFacingValid(final ForgeDirection facing) { - return true; - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getBackFacing(); - } - - @Override - public boolean isValidSlot(final int aIndex) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return (this.getBaseMetaTileEntity() - .getEUCapacity() / 100); - } - - @Override - public long maxEUInput() { - return TESSERACT_ENERGY_COST_DIMENSIONAL; - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public long maxEUStore() { - return TESSERACT_ENERGY_COST_DIMENSIONAL * 8 * 32; - } - - @Override - public long maxSteamStore() { - return this.maxEUStore(); - } - - @Override - public boolean ownerControl() { - return true; - } - - @Override - public int getProgresstime() { - return this.getTesseract(this.mFrequency, false) != null ? 999 : 0; - } - - @Override - public int maxProgresstime() { - return 1000; - } - - @Override - public void saveNBTData(final NBTTagCompound aNBT) { - aNBT.setInteger("mFrequency", this.mFrequency); - aNBT.setString("mOwner", mOwner.toString()); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - this.mFrequency = aNBT.getInteger("mFrequency"); - this.mOwner = UUID.fromString(aNBT.getString("mOnwer")); - } - - @Override - public void onConfigLoad() { - sInterDimensionalTesseractAllowed = true; - TESSERACT_ENERGY_COST = 512; - TESSERACT_ENERGY_COST_DIMENSIONAL = 2048; - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer, - final ForgeDirection side, final float aX, final float aY, final float aZ) { - - if (this.mOwner == null) { - if (this.getBaseMetaTileEntity() - .getOwnerName() != null - && !this.getBaseMetaTileEntity() - .getOwnerName() - .equals("")) { - if (this.getBaseMetaTileEntity() - .getOwnerName() - .toLowerCase() - .equals( - aPlayer.getDisplayName() - .toLowerCase())) { - this.mOwner = PlayerUtils.getPlayersUUIDByName( - this.getBaseMetaTileEntity() - .getOwnerName()); - } - } - } - - if (aPlayer.getUniqueID() - .compareTo(this.mOwner) == 0) { - if (side == this.getBaseMetaTileEntity() - .getFrontFacing()) { - final float[] tCoords = GT_Utility.getClickedFacingCoords(side, aX, aY, aZ); - switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + (2 * (byte) (int) (tCoords[1] * 2.0F)))) { - case 0: - // Utils.LOG_WARNING("Freq. -1 | " + this.mFrequency); - try { - CORE.sTesseractTerminalOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency -= 1; - break; - case 1: - // Utils.LOG_WARNING("Freq. +1 | " + this.mFrequency); - try { - CORE.sTesseractTerminalOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency += 1; - default: - // Utils.LOG_WARNING("Did not click the correct place."); - try { - CORE.sTesseractTerminalOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - break; - } - PlayerUtils.messagePlayer(aPlayer, "Frequency: " + this.mFrequency); - if (this.getTesseract(this.mFrequency, false) != null) { - PlayerUtils.messagePlayer( - aPlayer, - new StringBuilder().append(EnumChatFormatting.GREEN) - .append(" (Connected)") - .toString()); - } - } - } else if (aPlayer.getUniqueID() - .compareTo(this.mOwner) != 0) { - GT_Utility.sendChatToPlayer(aPlayer, "This is not your Tesseract Terminal to configure."); - } - return true; - } - - @Override - public void onScrewdriverRightClick(final ForgeDirection side, final EntityPlayer aPlayer, final float aX, - final float aY, final float aZ) { - if (aPlayer.getUniqueID() - .compareTo(this.mOwner) == 0) { - if (side == this.getBaseMetaTileEntity() - .getFrontFacing()) { - final float[] tCoords = GT_Utility.getClickedFacingCoords(side, aX, aY, aZ); - switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + (2 * (byte) (int) (tCoords[1] * 2.0F)))) { - case 0 -> { - try { - CORE.sTesseractTerminalOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency -= 64; - } - case 1 -> { - try { - CORE.sTesseractTerminalOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency += 64; - } - case 2 -> { - try { - CORE.sTesseractTerminalOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency -= 512; - } - case 3 -> { - try { - CORE.sTesseractTerminalOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - this.mFrequency += 512; - } - } - GT_Utility.sendChatToPlayer( - aPlayer, - "Frequency: " + this.mFrequency - + (this.getTesseract(this.mFrequency, false) == null ? "" - : new StringBuilder().append(EnumChatFormatting.GREEN) - .append(" (Connected)") - .toString())); - } - } else if (aPlayer.getUniqueID() - .compareTo(this.mOwner) != 0) { - GT_Utility.sendChatToPlayer(aPlayer, "This is not your Tesseract Terminal to configure."); - } - } - - public boolean allowCoverOnSide(final ForgeDirection side, final int aCoverID) { - return side != this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - public GT_MetaTileEntity_TesseractGenerator getTesseract(final int aFrequency, final boolean aWorkIrrelevant) { - final GT_MetaTileEntity_TesseractGenerator rTesseract = TesseractHelper - .getGeneratorByFrequency(PlayerUtils.getPlayerOnServerFromUUID(mOwner), aFrequency); - if (rTesseract == null) { - return null; - } - if (!TesseractHelper.isGeneratorOwnedByPlayer(PlayerUtils.getPlayerOnServerFromUUID(mOwner), rTesseract)) { - return null; - } - if (rTesseract.mFrequency != aFrequency) { - TesseractHelper.setTerminalOwnershipByPlayer( - PlayerUtils.getPlayerOnServerFromUUID(mOwner), - Integer.valueOf(aFrequency), - null); - return null; - } - if (!rTesseract.isValidTesseractGenerator( - this.getBaseMetaTileEntity() - .getOwnerName(), - aWorkIrrelevant)) { - return null; - } - if ((!sInterDimensionalTesseractAllowed) && (rTesseract.getBaseMetaTileEntity() - .getWorld() - != this.getBaseMetaTileEntity() - .getWorld())) { - return null; - } - return rTesseract; - } - - @Override - public String[] getInfoData() { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity != null) && (this.getBaseMetaTileEntity() - .isAllowedToWork()) && (tTileEntity.isSendingInformation())) { - return tTileEntity.getInfoData(); - } - return new String[] { "Tesseract Generator", "Freqency:", "" + this.mFrequency, - this.getTesseract(this.mFrequency, false) != null ? "Active" : "Inactive" }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public boolean isDigitalChest() { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return false; - } - return tTileEntity.isDigitalChest(); - } - - @Override - public ItemStack[] getStoredItemData() { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return null; - } - return tTileEntity.getStoredItemData(); - } - - @Override - public void setItemCount(final int aCount) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return; - } - tTileEntity.setItemCount(aCount); - } - - @Override - public int getMaxItemCount() { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return 0; - } - return tTileEntity.getMaxItemCount(); - } - - @Override - public boolean isItemValidForSlot(final int aIndex, final ItemStack aStack) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return false; - } - return tTileEntity.isItemValidForSlot(aIndex, aStack); - } - - @Override - public int[] getAccessibleSlotsFromSide(final int ordinalSide) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return new int[0]; - } - return tTileEntity.getAccessibleSlotsFromSide(ordinalSide); - } - - @Override - public boolean canInsertItem(final int aIndex, final ItemStack aStack, final int ordinalSide) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return false; - } - return tTileEntity.canInsertItem(aIndex, aStack, ordinalSide); - } - - @Override - public boolean canExtractItem(final int aIndex, final ItemStack aStack, final int ordinalSide) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return false; - } - return tTileEntity.canExtractItem(aIndex, aStack, ordinalSide); - } - - @Override - public int getSizeInventory() { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return 0; - } - return tTileEntity.getSizeInventory(); - } - - @Override - public ItemStack getStackInSlot(final int aIndex) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return null; - } - return tTileEntity.getStackInSlot(aIndex); - } - - @Override - public void setInventorySlotContents(final int aIndex, final ItemStack aStack) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return; - } - tTileEntity.setInventorySlotContents(aIndex, aStack); - } - - @Override - public ItemStack decrStackSize(final int aIndex, final int aAmount) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return null; - } - return tTileEntity.decrStackSize(aIndex, aAmount); - } - - @Override - public String getInventoryName() { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return ""; - } - return tTileEntity.getInventoryName(); - } - - @Override - public int getInventoryStackLimit() { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return 0; - } - return tTileEntity.getInventoryStackLimit(); - } - - @Override - public boolean canFill(final ForgeDirection aSide, final Fluid aFluid) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return false; - } - return tTileEntity.canFill(aSide, aFluid); - } - - @Override - public boolean canDrain(final ForgeDirection aSide, final Fluid aFluid) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return false; - } - return tTileEntity.canDrain(aSide, aFluid); - } - - @Override - public FluidTankInfo[] getTankInfo(final ForgeDirection aSide) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return new FluidTankInfo[0]; - } - return tTileEntity.getTankInfo(aSide); - } - - @Override - public int fill_default(final ForgeDirection aDirection, final FluidStack aFluid, final boolean doFill) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return 0; - } - return tTileEntity.fill(aDirection, aFluid, doFill); - } - - @Override - public FluidStack drain(final ForgeDirection aDirection, final int maxDrain, final boolean doDrain) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return null; - } - return tTileEntity.drain(aDirection, maxDrain, doDrain); - } - - @Override - public FluidStack drain(final ForgeDirection aSide, final FluidStack aFluid, final boolean doDrain) { - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); - if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() - .isAllowedToWork())) { - return null; - } - return tTileEntity.drain(aSide, aFluid, doDrain); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if ((this.getBaseMetaTileEntity() - .isServerSide()) - && (this.getBaseMetaTileEntity() - .isAllowedToWork())) { - // Set owner - if (PlayerUtils.getPlayersUUIDByName( - this.getBaseMetaTileEntity() - .getOwnerName()) - != null) { - if (this.mOwner == null) { - this.mOwner = PlayerUtils.getPlayersUUIDByName( - this.getBaseMetaTileEntity() - .getOwnerName()); - } - } - final GT_MetaTileEntity_TesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, true); - if (tTileEntity != null) { - tTileEntity.addEnergyConsumption(this); - if ((!this.mDidWork) && (this.getTesseract(this.mFrequency, false) != null)) { - this.mDidWork = true; - this.getBaseMetaTileEntity() - .issueBlockUpdate(); - this.getBaseMetaTileEntity() - .decreaseStoredEnergyUnits(128, false); - } - } else if (this.mDidWork == true) { - this.mDidWork = false; - this.getBaseMetaTileEntity() - .issueBlockUpdate(); - } - } - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll( - this.mDescriptionArray, - "Accesses Tesseract Generators remotely", - "Connect with pipes to extract items or fluids", - "Outputs from the back face", - "Consumes " + TESSERACT_ENERGY_COST + "EU/t for same dimension transfers", - "Consumes " + TESSERACT_ENERGY_COST_DIMENSIONAL + "EU/t for cross dimensional transfers", - CORE.GT_Tooltip.get()); - } - - @Override - public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - return new ITexture[0][0][0]; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return side == facing - ? new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Screen_Frequency) } - : new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), - new GT_RenderedTexture(Textures.BlockIcons.VOID) }; - } - - // To-Do? - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return false; - } - - @Override - public boolean canTankBeEmptied() { - return false; - } - - @Override - public boolean displaysItemStack() { - return false; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { - if (this.getBaseMetaTileEntity() - .getOwnerName() != null - && !this.getBaseMetaTileEntity() - .getOwnerName() - .equals("")) { - this.mOwner = PlayerUtils.getPlayersUUIDByName( - this.getBaseMetaTileEntity() - .getOwnerName()); - } - super.onCreated(aStack, aWorld, aPlayer); - } - - @Override - public void onRemoval() { - try { - CORE.sTesseractTerminalOwnershipMap.get(mOwner) - .remove(this.mFrequency); - } catch (Throwable t) {} - super.onRemoval(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTEElectricAutoWorkbench.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTEElectricAutoWorkbench.java new file mode 100644 index 0000000000..05150c8478 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTEElectricAutoWorkbench.java @@ -0,0 +1,864 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.automation; + +import java.util.ArrayList; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.Textures; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.gui.GTPPUITextures; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEElectricAutoWorkbench extends MTEBasicTank implements IAddGregtechLogo { + + public int mMode = 0, mCurrentSlot = 0, mThroughPut = 0, mTicksUntilNextUpdate = 20; + public boolean mLastCraftSuccessful = false; + protected String mLocalName; + + private static final int MAX_MODES = 10; + private static final int MAX_THROUGHPUT = 4; + + public MTEElectricAutoWorkbench(final int aID, final int aTier, final String aDescription) { + super( + aID, + "basicmachine.automation.autoworkbench.0" + aTier, + "Auto Workbench (" + GTValues.VN[aTier] + ")", + aTier, + 30, + aDescription); + mLocalName = "Auto Workbench (" + GTValues.VN[aTier] + ")"; + } + + public MTEElectricAutoWorkbench(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, 30, aDescription, aTextures); + } + + @Override + public boolean isTransformerUpgradable() { + return true; + } + + @Override + public boolean isOverclockerUpgradable() { + return false; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex < 19; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return !isOutputFacing(side); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getBackFacing(); + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long maxEUInput() { + return GTValues.V[mTier]; + } + + @Override + public long maxEUOutput() { + return mThroughPut % 2 == 0 ? GTValues.V[mTier] : 0; + } + + @Override + public long getMinimumStoredEU() { + return GTValues.V[this.mTier]; + } + + @Override + public long maxEUStore() { + return Math.max(2048L, GTValues.V[this.mTier] * (this.mTier * GTValues.V[this.mTier])); + } + + @Override + public int getSizeInventory() { + return 30; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEElectricAutoWorkbench(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mMode", mMode); + aNBT.setInteger("mThroughPut", mThroughPut); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mMode = aNBT.getInteger("mMode"); + mThroughPut = aNBT.getInteger("mThroughPut"); + } + + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public boolean displaysItemStack() { + return false; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { + return side != getBaseMetaTileEntity().getFrontFacing() && side != getBaseMetaTileEntity().getBackFacing(); + } + + private void switchMode() { + mInventory[28] = null; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().isServerSide() + && getBaseMetaTileEntity().getUniversalEnergyStored() >= (mMode == 5 || mMode == 6 ? 128 : 2048) + && (getBaseMetaTileEntity().hasWorkJustBeenEnabled() || --mTicksUntilNextUpdate < 1)) { + mTicksUntilNextUpdate = 32; + + for (byte i = 19; i < 28; i++) { + if (mInventory[i] != null && mInventory[i].isItemStackDamageable() + && mInventory[i].getItem() + .hasContainerItem(mInventory[i])) { + mInventory[i].setItemDamage(OreDictionary.WILDCARD_VALUE); + } + } + + if (mInventory[18] == null) { + for (byte i = 0; i < 18 && mFluid != null; i++) { + ItemStack tOutput = GTUtility.fillFluidContainer(mFluid, mInventory[i], false, true); + if (tOutput != null) { + for (byte j = 0; j < 9; j++) { + if (mInventory[j] == null || (GTUtility.areStacksEqual(tOutput, mInventory[j]) + && mInventory[j].stackSize + tOutput.stackSize <= tOutput.getMaxStackSize())) { + mFluid.amount -= GTUtility.getFluidForFilledItem(tOutput, true).amount + * tOutput.stackSize; + getBaseMetaTileEntity().decrStackSize(i, 1); + if (mInventory[j] == null) { + mInventory[j] = tOutput; + } else { + mInventory[j].stackSize++; + } + if (mFluid.amount <= 0) mFluid = null; + break; + } + } + } + } + + ItemStack[] tRecipe = new ItemStack[9]; + ItemStack tTempStack = null, tOutput = null; + + if (mInventory[17] != null && mThroughPut < 2 && mMode != 0) { + if (mInventory[18] == null) { + mInventory[18] = mInventory[17]; + mInventory[17] = null; + } + } else { + if (!mLastCraftSuccessful) { + mCurrentSlot = (mCurrentSlot + 1) % 18; + for (int i = 0; i < 17 && mInventory[mCurrentSlot] == null; i++) + mCurrentSlot = (mCurrentSlot + 1) % 18; + } + switch (mMode) { + case 0 -> { + if (mInventory[mCurrentSlot] != null + && !isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { + if (mInventory[18] == null && mThroughPut < 2 && mCurrentSlot < 8) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + break; + } + for (int i = 0; i < 9; i++) { + tRecipe[i] = mInventory[i + 19]; + if (tRecipe[i] != null) { + tRecipe[i] = GTUtility.copy(tRecipe[i]); + tRecipe[i].stackSize = 1; + } + } + } + case 1 -> { + if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { + if (mInventory[18] == null && mThroughPut < 2) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + break; + } + tTempStack = GTUtility.copy(mInventory[mCurrentSlot]); + tTempStack.stackSize = 1; + tRecipe[0] = tTempStack; + if (GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { + tRecipe[1] = tTempStack; + tRecipe[3] = tTempStack; + tRecipe[4] = tTempStack; + } else break; + if (GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { + tRecipe[2] = tTempStack; + tRecipe[5] = tTempStack; + tRecipe[6] = tTempStack; + tRecipe[7] = tTempStack; + tRecipe[8] = tTempStack; + } else break; + if (GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { + if (mInventory[18] == null) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + } + } + case 2 -> { + if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { + if (mInventory[18] == null && mThroughPut < 2) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + break; + } + tTempStack = GTUtility.copy(mInventory[mCurrentSlot]); + tTempStack.stackSize = 1; + tRecipe[0] = tTempStack; + if (GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { + if (mInventory[18] == null) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + } + } + case 3 -> { + if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { + if (mInventory[18] == null && mThroughPut < 2) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + break; + } + tTempStack = GTUtility.copy(mInventory[mCurrentSlot]); + tTempStack.stackSize = 1; + tRecipe[0] = tTempStack; + tRecipe[1] = tTempStack; + tRecipe[3] = tTempStack; + tRecipe[4] = tTempStack; + if (GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { + if (mInventory[18] == null) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + } + } + case 4 -> { + if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { + if (mInventory[18] == null && mThroughPut < 2) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + break; + } + tTempStack = GTUtility.copy(mInventory[mCurrentSlot]); + tTempStack.stackSize = 1; + tRecipe[0] = tTempStack; + tRecipe[1] = tTempStack; + tRecipe[2] = tTempStack; + tRecipe[3] = tTempStack; + tRecipe[4] = tTempStack; + tRecipe[5] = tTempStack; + tRecipe[6] = tTempStack; + tRecipe[7] = tTempStack; + tRecipe[8] = tTempStack; + if (GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { + if (mInventory[18] == null) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + } + } + case 5 -> { + if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { + if (mInventory[18] == null && mThroughPut < 2) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + break; + } + tTempStack = GTUtility.copy(mInventory[mCurrentSlot]); + tTempStack.stackSize = 1; + tRecipe[0] = tTempStack; + tOutput = GTOreDictUnificator.get(true, tTempStack); + if (tOutput != null && GTUtility.areStacksEqual(tOutput, tTempStack)) tOutput = null; + if (tOutput == null) { + tRecipe[0] = null; + if (mInventory[18] == null) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + } + } + case 6 -> { + if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { + if (mInventory[18] == null && mThroughPut < 2) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + } else if (OrePrefixes.dustSmall.contains(mInventory[mCurrentSlot])) { + tTempStack = GTUtility.copy(mInventory[mCurrentSlot]); + tTempStack.stackSize = 1; + tRecipe[0] = tTempStack; + tRecipe[1] = tTempStack; + tRecipe[3] = tTempStack; + tRecipe[4] = tTempStack; + if (GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) + == null) { + if (mInventory[18] == null) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + } + } else if (OrePrefixes.dustTiny.contains(mInventory[mCurrentSlot])) { + tTempStack = GTUtility.copy(mInventory[mCurrentSlot]); + tTempStack.stackSize = 1; + tRecipe[0] = tTempStack; + tRecipe[1] = tTempStack; + tRecipe[2] = tTempStack; + tRecipe[3] = tTempStack; + tRecipe[4] = tTempStack; + tRecipe[5] = tTempStack; + tRecipe[6] = tTempStack; + tRecipe[7] = tTempStack; + tRecipe[8] = tTempStack; + if (GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) + == null) { + if (mInventory[18] == null) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + } + } else { + if (mInventory[18] == null && mThroughPut < 2) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + } + } + case 7 -> { + if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot]) + || !OrePrefixes.nugget.contains(mInventory[mCurrentSlot])) { + if (mInventory[18] == null && mThroughPut < 2) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + break; + } + tTempStack = GTUtility.copy(mInventory[mCurrentSlot]); + tTempStack.stackSize = 1; + tRecipe[0] = tTempStack; + tRecipe[1] = tTempStack; + tRecipe[2] = tTempStack; + tRecipe[3] = tTempStack; + tRecipe[4] = tTempStack; + tRecipe[5] = tTempStack; + tRecipe[6] = tTempStack; + tRecipe[7] = tTempStack; + tRecipe[8] = tTempStack; + if (GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) == null) { + if (mInventory[18] == null) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + } + } + case 8 -> { + if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot]) + || mInventory[mCurrentSlot].getItemDamage() <= 0 + || !mInventory[mCurrentSlot].getItem() + .isRepairable()) { + if (mInventory[18] == null && mThroughPut < 2) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + break; + } + tTempStack = GTUtility.copy(mInventory[mCurrentSlot]); + tTempStack.stackSize = 1; + for (int i = mCurrentSlot + 1; i < 18; i++) { + if (mInventory[i] != null && mInventory[i].getItem() == tTempStack.getItem() + && mInventory[mCurrentSlot].getItemDamage() + mInventory[i].getItemDamage() + > tTempStack.getMaxDamage()) { + tRecipe[0] = tTempStack; + tRecipe[1] = GTUtility.copy(mInventory[i]); + if (GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) + == null) { + if (mInventory[18] == null) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + } + break; + } + } + } + case 9 -> { + if (isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(mInventory[mCurrentSlot])) { + if (mInventory[18] == null && mThroughPut < 2) { + mInventory[18] = mInventory[mCurrentSlot]; + mInventory[mCurrentSlot] = null; + mTicksUntilNextUpdate = 1; + } + break; + } + for (byte i = 0, j = 0; i < 18 && j < 9 + && (j < 2 + || GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe) + == null); i++) { + tRecipe[j] = mInventory[(mCurrentSlot + i) % 18]; + if (tRecipe[j] != null) { + tRecipe[j] = GTUtility.copy(tRecipe[j]); + tRecipe[j].stackSize = 1; + j++; + } + } + if (tRecipe[1] == null) tRecipe[0] = null; + } + } + } + + if (tOutput == null) + tOutput = GTModHandler.getAllRecipeOutput(getBaseMetaTileEntity().getWorld(), tRecipe); + + if (tOutput != null || mMode == 0) mInventory[28] = tOutput; + + if (tOutput == null) { + mLastCraftSuccessful = false; + } else { + if ((tTempStack = GTOreDictUnificator.get(true, tOutput)) != null) { + tTempStack.stackSize = tOutput.stackSize; + tOutput = tTempStack; + } + + mInventory[28] = GTUtility.copy(tOutput); + ArrayList tList = recipeContent(tRecipe), tContent = benchContent(); + if (tList.size() > 0 && tContent.size() > 0) { + + boolean success = (mMode == 6 || mMode == 7 || mInventory[17] == null); + for (byte i = 0; i < tList.size() && success; i++) { + success = false; + for (byte j = 0; j < tContent.size() && !success; j++) { + if (GTUtility.areStacksEqual(tList.get(i), tContent.get(j))) { + if (tList.get(i).stackSize <= tContent.get(j).stackSize) { + success = true; + } + } + } + } + + if (success) { + mLastCraftSuccessful = true; + + for (byte i = 8; i > -1; i--) { + for (byte j = 17; j > -1; j--) { + if (tRecipe[i] != null && mInventory[j] != null) { + if (GTUtility.areStacksEqual(tRecipe[i], mInventory[j])) { + ItemStack tStack = GTUtility.getContainerItem(mInventory[j], true); + if (tStack != null) { + getBaseMetaTileEntity().decrStackSize(j, 1); + if (!tStack.isItemStackDamageable() + || tStack.getItemDamage() < tStack.getMaxDamage()) { + for (byte k = 9; k < 18; k++) { + if (mInventory[k] == null) { + mInventory[k] = GTUtility.copy(tStack); + break; + } else if (GTUtility.areStacksEqual(mInventory[k], tStack) + && mInventory[k].stackSize + tStack.stackSize + <= tStack.getMaxStackSize()) { + mInventory[k].stackSize += tStack.stackSize; + break; + } + } + } + } else { + getBaseMetaTileEntity().decrStackSize(j, 1); + } + break; + } + } + } + } + + mInventory[18] = GTUtility.copy(tOutput); + getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(mMode == 5 || mMode == 6 || mMode == 7 ? 128 : 2048, true); + mTicksUntilNextUpdate = 1; + } else { + mLastCraftSuccessful = false; + if (mInventory[mMode == 0 ? 8 : 17] != null && mInventory[18] == null && mThroughPut < 2) { + mInventory[18] = mInventory[mMode == 0 ? 8 : 17]; + mInventory[mMode == 0 ? 8 : 17] = null; + mTicksUntilNextUpdate = 1; + } + } + } + + if (mInventory[18] == null && mThroughPut < 2) { + for (byte i = 0; i < 8; i++) { + for (byte j = i; ++j < 9;) { + if (GTUtility.areStacksEqual(mInventory[i], mInventory[j]) + && mInventory[i].getMaxStackSize() > 8) { + mInventory[18] = mInventory[j]; + mInventory[j] = null; + mTicksUntilNextUpdate = 1; + break; + } + } + } + } + } + } + + if (mThroughPut < 2) { + getBaseMetaTileEntity().decreaseStoredEnergyUnits( + GTUtility.moveOneItemStack( + getBaseMetaTileEntity(), + getBaseMetaTileEntity().getIInventoryAtSide(getBaseMetaTileEntity().getBackFacing()), + getBaseMetaTileEntity().getBackFacing(), + getBaseMetaTileEntity().getFrontFacing(), + null, + false, + (byte) 64, + (byte) 1, + (byte) 64, + (byte) 1) * 10, + true); + } + } + } + + private boolean isItemTypeOrItsEmptyLiquidContainerInCraftingGrid(ItemStack aStack) { + if (aStack == null) return true; + for (byte i = 19; i < 28; i++) { + if (mInventory[i] != null) { + if (GTUtility.areStacksEqual(mInventory[i], aStack)) return true; + if (GTUtility.areStacksEqual(GTUtility.getContainerForFilledItem(mInventory[i], true), aStack)) + return true; + } + } + return false; + } + + private ArrayList recipeContent(ItemStack[] tRecipe) { + ArrayList tList = new ArrayList<>(); + for (byte i = 0; i < 9; i++) { + if (tRecipe[i] != null) { + boolean temp = false; + for (ItemStack itemStack : tList) { + if (GTUtility.areStacksEqual(tRecipe[i], itemStack)) { + itemStack.stackSize++; + temp = true; + break; + } + } + if (!temp) tList.add(GTUtility.copy(1, tRecipe[i])); + } + } + return tList; + } + + private ArrayList benchContent() { + ArrayList tList = new ArrayList<>(); + for (byte i = 0; i < 18; i++) { + if (mInventory[i] != null) { + boolean temp = false; + for (byte j = 0; j < tList.size(); j++) { + if (GTUtility.areStacksEqual(mInventory[i], mInventory[j])) { + tList.get(j).stackSize += mInventory[i].stackSize; + temp = true; + break; + } + } + if (!temp) tList.add(GTUtility.copy(mInventory[i])); + } + } + return tList; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return mMode == 0 ? aIndex >= 10 : aIndex >= 18; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return mMode == 0 ? aIndex < 9 : aIndex < 18; + } + + /* + * @Override public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { if (aSide == + * aFacing) return 112; if (GT_Utility.getOppositeSide(aSide) == aFacing) return 113; return 114; } + */ + + @Override + public int getCapacity() { + return 16000; + } + + @Override + public int getTankPressure() { + return -100; + } + + @Override + public String[] getDescription() { + return new String[] { "Automatic Crafting Table Mk III", + // this.mDescription, + GTPPCore.GT_Tooltip.get() }; + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFront(i); + rTextures[6][i + 1] = this.getBack(i); + rTextures[7][i + 1] = this.getBottom(i); + rTextures[8][i + 1] = this.getTop(i); + rTextures[9][i + 1] = this.getSides(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return this.mTextures[0][aColorIndex + 1]; + } else if (side.getOpposite() == facing) { + return this.mTextures[1][aColorIndex + 1]; + } else { + return this.mTextures[4][aColorIndex + 1]; + } + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Adv_Workbench_Crafting_Overlay) }; + } + + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(BlockIcons.OVERLAY_PIPE) }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Adv_Workbench_Crafting_Overlay) }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Adv_Workbench_Crafting_Overlay) }; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(getGUITextureSet().getGregTechLogo()) + .setSize(17, 17) + .setPos(118, 22)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 3) + .endAtSlot(8) + .build() + .setPos(7, 4)) + .widget( + SlotGroup.ofItemHandler(inventoryHandler, 9) + .startFromSlot(9) + .endAtSlot(17) + .canInsert(false) + .background(GTUITextures.SLOT_DARK_GRAY) + .applyForWidget(SlotWidget::disableShiftInsert) + .build() + .setPos(7, 59)) + .widget( + new SlotWidget(inventoryHandler, 18).setAccess(true, false) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_OUT) + .setPos(151, 40)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SLOTS_HOLO_3BY3) + .setPos(62, 4) + .setSize(54, 54)) + .widget( + SlotGroup.ofItemHandler(inventoryHandler, 3) + .startFromSlot(19) + .endAtSlot(27) + .phantom(true) + .background(GTUITextures.TRANSPARENT) + .build() + .setPos(62, 4)) + .widget( + SlotWidget.phantom(inventoryHandler, 28) + .disableInteraction() + .setBackground(getGUITextureSet().getItemSlot(), GTPPUITextures.OVERLAY_SLOT_ARROW_4) + .setPos(151, 4)); + builder.widget( + new CycleButtonWidget().setGetter(() -> mThroughPut) + .setSetter(val -> mThroughPut = val) + .setLength(MAX_THROUGHPUT) + .setTextureGetter(i -> GTPPUITextures.OVERLAY_BUTTON_THROUGHPUT[i]) + .setBackground(GTUITextures.BUTTON_STANDARD) + .setPos(120, 4) + .setSize(18, 18)); + String[] mModeText = new String[] { "Normal Crafting Table", "???", "1x1", "2x2", "3x3", "Unifier", "Dust", + "???", "Hammer?", "Circle" }; + CycleButtonWidget modeButton = new CycleButtonWidget().setGetter(() -> mMode) + .setSetter(val -> { + mMode = val; + switchMode(); + }) + .setLength(MAX_MODES) + .setTextureGetter(i -> GTPPUITextures.OVERLAY_BUTTON_MODE[i]); + for (int i = 0; i < MAX_MODES; i++) { + modeButton.addTooltip(i, "Mode: " + mModeText[i]); + } + builder.widget( + modeButton.setBackground(GTUITextures.BUTTON_STANDARD) + .setPos(120, 40) + .setSize(18, 18)); + builder.widget( + new DrawableWidget().setDrawable(GTPPUITextures.PICTURE_WORKBENCH_CIRCLE) + .setPos(136, 23) + .setSize(16, 16)) + .widget( + new DrawableWidget().setDrawable(GTPPUITextures.PICTURE_ARROW_WHITE_DOWN) + .setPos(155, 23) + .setSize(10, 16)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTETesseractGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTETesseractGenerator.java new file mode 100644 index 0000000000..08db4e19be --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTETesseractGenerator.java @@ -0,0 +1,832 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.automation; + +import static gtPlusPlus.core.lib.GTPPCore.sTesseractGeneratorOwnershipMap; +import static gtPlusPlus.core.lib.GTPPCore.sTesseractTerminalOwnershipMap; + +import java.util.UUID; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IDigitalChest; +import gregtech.api.interfaces.tileentity.IGregTechDeviceInformation; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.helpers.tesseract.TesseractHelper; + +public class MTETesseractGenerator extends MTEBasicTank { + + public static int TESSERACT_ENERGY_COST_DIMENSIONAL = 512; + public static int TESSERACT_ENERGY_COST = 128; + public byte isWorking = 0; + public int oFrequency = 0; + public int mNeededEnergy = 0; + public int mFrequency = 0; + public UUID mOwner; + + public MTETesseractGenerator(final int aID, final String aName, final String aNameRegional, final int aTier) { + super(aID, aName, aNameRegional, aTier, 3, ""); + } + + public MTETesseractGenerator(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTETesseractGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean isTransformerUpgradable() { + return true; + } + + @Override + public boolean isOverclockerUpgradable() { + return false; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isFacingValid(final ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public boolean isInputFacing(final ForgeDirection side) { + return true; + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getBackFacing(); + } + + @Override + public boolean isValidSlot(final int aIndex) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return this.getBaseMetaTileEntity() + .getEUCapacity() / 2; + } + + @Override + public long maxEUInput() { + return 512; + } + + @Override + public long maxEUOutput() { + return 0; + } + + @Override + public long maxEUStore() { + return 512 * 32; + } + + @Override + public long maxSteamStore() { + return this.maxEUStore(); + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean ownerControl() { + return true; + } + + @Override + public int getProgresstime() { + return (TesseractHelper.getGeneratorByFrequency(PlayerUtils.getPlayerOnServerFromUUID(mOwner), this.mFrequency) + == this) && (this.isWorking >= 20) ? 999 : 0; + } + + @Override + public int maxProgresstime() { + return 1000; + } + + @Override + public void saveNBTData(final NBTTagCompound aNBT) { + aNBT.setInteger("mFrequency", this.mFrequency); + if (mOwner != null) aNBT.setString("mOwner", mOwner.toString()); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + this.mFrequency = aNBT.getInteger("mFrequency"); + try { + this.mOwner = UUID.fromString(aNBT.getString("mOnwer")); + } catch (IllegalArgumentException i) { + + } + } + + @Override + public void onConfigLoad() { + int J = 4; + TESSERACT_ENERGY_COST = 128 * J; + TESSERACT_ENERGY_COST_DIMENSIONAL = 512 * J; + } + + @Override + public void onServerStart() { + sTesseractGeneratorOwnershipMap.clear(); + sTesseractTerminalOwnershipMap.clear(); + } + + public void onServerStop() { + sTesseractGeneratorOwnershipMap.clear(); + sTesseractTerminalOwnershipMap.clear(); + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer, + final ForgeDirection side, final float aX, final float aY, final float aZ) { + + if (this.mOwner == null) { + if (this.getBaseMetaTileEntity() + .getOwnerName() != null + && !this.getBaseMetaTileEntity() + .getOwnerName() + .equals("")) { + if (this.getBaseMetaTileEntity() + .getOwnerName() + .toLowerCase() + .equals( + aPlayer.getDisplayName() + .toLowerCase())) { + this.mOwner = PlayerUtils.getPlayersUUIDByName( + this.getBaseMetaTileEntity() + .getOwnerName()); + } + } + } + + if (side == this.getBaseMetaTileEntity() + .getFrontFacing()) { + if (aPlayer.getUniqueID() + .compareTo(this.mOwner) == 0) { + final float[] tCoords = GTUtility.getClickedFacingCoords(side, aX, aY, aZ); + switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + (2 * (byte) (int) (tCoords[1] * 2.0F)))) { + case 0: + Logger.WARNING("Freq. -1 | " + this.mFrequency); + try { + GTPPCore.sTesseractGeneratorOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency -= 1; + + break; + case 1: + Logger.WARNING("Freq. +1 | " + this.mFrequency); + try { + GTPPCore.sTesseractGeneratorOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency += 1; + default: + // Utils.LOG_WARNING("Did not click the correct place."); + break; + } + if (getGeneratorEntity(this.mFrequency) != null && getGeneratorEntity(this.mFrequency) != this) { + GTUtility.sendChatToPlayer( + aPlayer, + "Frequency: " + this.mFrequency + EnumChatFormatting.RED + " (Occupied)"); + } else { + GTUtility.sendChatToPlayer(aPlayer, "Frequency: " + this.mFrequency); + } + } else if (aPlayer.getUniqueID() + .compareTo(this.mOwner) != 0) { + GTUtility.sendChatToPlayer(aPlayer, "This is not your Tesseract Generator to configure."); + } + } + + return true; + } + + @Override + public void onScrewdriverRightClick(final ForgeDirection side, final EntityPlayer aPlayer, final float aX, + final float aY, final float aZ) { + if (aPlayer.getUniqueID() + .compareTo(this.mOwner) == 0) { + if (side == this.getBaseMetaTileEntity() + .getFrontFacing()) { + final float[] tCoords = GTUtility.getClickedFacingCoords(side, aX, aY, aZ); + switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + (2 * (byte) (int) (tCoords[1] * 2.0F)))) { + case 0 -> { + try { + GTPPCore.sTesseractGeneratorOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency -= 64; + } + case 1 -> { + try { + GTPPCore.sTesseractGeneratorOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency += 64; + } + case 2 -> { + try { + GTPPCore.sTesseractGeneratorOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency -= 512; + } + case 3 -> { + try { + GTPPCore.sTesseractGeneratorOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency += 512; + } + } + if (getGeneratorEntity(this.mFrequency) != null && getGeneratorEntity(this.mFrequency) != this) { + GTUtility.sendChatToPlayer( + aPlayer, + "Frequency: " + this.mFrequency + EnumChatFormatting.RED + " (Occupied)"); + } else { + GTUtility.sendChatToPlayer(aPlayer, "Frequency: " + this.mFrequency); + } + } + } else { + GTUtility.sendChatToPlayer(aPlayer, "This is not your Tesseract Generator to configure."); + } + } + + public boolean allowCoverOnSide(final ForgeDirection side, final int aCoverID) { + return side != this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public String[] getInfoData() { + final TileEntity tTileEntity = this.getBaseMetaTileEntity() + .getTileEntityAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity != null) && (this.getBaseMetaTileEntity() + .isAllowedToWork()) + && ((tTileEntity instanceof IGregTechDeviceInformation)) + && (((IGregTechDeviceInformation) tTileEntity).isGivingInformation())) { + return ((IGregTechDeviceInformation) tTileEntity).getInfoData(); + } + return new String[] { "Tesseract Generator", "Freqency:", "" + this.mFrequency, + (getGeneratorEntity() == this) && (this.isWorking >= 20) ? "Active" : "Inactive" }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + public boolean isSendingInformation() { + final TileEntity tTileEntity = this.getBaseMetaTileEntity() + .getTileEntityAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity != null) && (this.getBaseMetaTileEntity() + .isAllowedToWork()) && ((tTileEntity instanceof IGregTechDeviceInformation))) { + return ((IGregTechDeviceInformation) tTileEntity).isGivingInformation(); + } + return false; + } + + @Override + public boolean isDigitalChest() { + final TileEntity tTileEntity = this.getBaseMetaTileEntity() + .getTileEntityAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity != null) && (this.getBaseMetaTileEntity() + .isAllowedToWork()) && ((tTileEntity instanceof IDigitalChest))) { + return ((IDigitalChest) tTileEntity).isDigitalChest(); + } + return false; + } + + @Override + public ItemStack[] getStoredItemData() { + final TileEntity tTileEntity = this.getBaseMetaTileEntity() + .getTileEntityAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity != null) && (this.getBaseMetaTileEntity() + .isAllowedToWork()) && ((tTileEntity instanceof IDigitalChest))) { + return ((IDigitalChest) tTileEntity).getStoredItemData(); + } + return new ItemStack[] {}; + } + + @Override + public void setItemCount(final int aCount) { + final TileEntity tTileEntity = this.getBaseMetaTileEntity() + .getTileEntityAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity != null) && (this.getBaseMetaTileEntity() + .isAllowedToWork()) && ((tTileEntity instanceof IDigitalChest))) { + ((IDigitalChest) tTileEntity).setItemCount(aCount); + } + } + + @Override + public int getMaxItemCount() { + final TileEntity tTileEntity = this.getBaseMetaTileEntity() + .getTileEntityAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity != null) && (this.getBaseMetaTileEntity() + .isAllowedToWork()) && ((tTileEntity instanceof IDigitalChest))) { + return ((IDigitalChest) tTileEntity).getMaxItemCount(); + } + return 0; + } + + @Override + public boolean isItemValidForSlot(final int aIndex, final ItemStack aStack) { + final IInventory tTileEntity = this.getBaseMetaTileEntity() + .getIInventoryAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return false; + } + return tTileEntity.isItemValidForSlot(aIndex, aStack); + } + + @Override + public int[] getAccessibleSlotsFromSide(final int ordinalSide) { + final IInventory tTileEntity = this.getBaseMetaTileEntity() + .getIInventoryAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return new int[0]; + } + if ((tTileEntity instanceof ISidedInventory)) { + return ((ISidedInventory) tTileEntity).getAccessibleSlotsFromSide(ordinalSide); + } + final int[] rArray = new int[this.getSizeInventory()]; + for (int i = 0; i < this.getSizeInventory(); i++) { + rArray[i] = i; + } + return rArray; + } + + @Override + public boolean canInsertItem(final int aIndex, final ItemStack aStack, final int ordinalSide) { + final IInventory tTileEntity = this.getBaseMetaTileEntity() + .getIInventoryAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return false; + } + if ((tTileEntity instanceof ISidedInventory)) { + return ((ISidedInventory) tTileEntity).canInsertItem(aIndex, aStack, ordinalSide); + } + return true; + } + + @Override + public boolean canExtractItem(final int aIndex, final ItemStack aStack, final int ordinalSide) { + final IInventory tTileEntity = this.getBaseMetaTileEntity() + .getIInventoryAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return false; + } + if ((tTileEntity instanceof ISidedInventory)) { + return ((ISidedInventory) tTileEntity).canExtractItem(aIndex, aStack, ordinalSide); + } + return true; + } + + @Override + public int getSizeInventory() { + final IInventory tTileEntity = this.getBaseMetaTileEntity() + .getIInventoryAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return 0; + } + return tTileEntity.getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot(final int aIndex) { + final IInventory tTileEntity = this.getBaseMetaTileEntity() + .getIInventoryAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return null; + } + return tTileEntity.getStackInSlot(aIndex); + } + + @Override + public void setInventorySlotContents(final int aIndex, final ItemStack aStack) { + final IInventory tTileEntity = this.getBaseMetaTileEntity() + .getIInventoryAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return; + } + tTileEntity.setInventorySlotContents(aIndex, aStack); + } + + @Override + public ItemStack decrStackSize(final int aIndex, final int aAmount) { + final IInventory tTileEntity = this.getBaseMetaTileEntity() + .getIInventoryAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return null; + } + return tTileEntity.decrStackSize(aIndex, aAmount); + } + + @Override + public String getInventoryName() { + final IInventory tTileEntity = this.getBaseMetaTileEntity() + .getIInventoryAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return ""; + } + return tTileEntity.getInventoryName(); + } + + @Override + public int getInventoryStackLimit() { + final IInventory tTileEntity = this.getBaseMetaTileEntity() + .getIInventoryAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return 0; + } + return tTileEntity.getInventoryStackLimit(); + } + + @Override + public boolean canFill(final ForgeDirection aSide, final Fluid aFluid) { + final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() + .getITankContainerAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return false; + } + return tTileEntity.canFill(aSide, aFluid); + } + + @Override + public boolean canDrain(final ForgeDirection aSide, final Fluid aFluid) { + final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() + .getITankContainerAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return false; + } + return tTileEntity.canDrain(aSide, aFluid); + } + + @Override + public FluidTankInfo[] getTankInfo(final ForgeDirection aSide) { + final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() + .getITankContainerAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return new FluidTankInfo[0]; + } + return tTileEntity.getTankInfo(aSide); + } + + @Override + public int fill_default(final ForgeDirection aDirection, final FluidStack aFluid, final boolean doFill) { + final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() + .getITankContainerAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return 0; + } + return tTileEntity.fill(aDirection, aFluid, doFill); + } + + @Override + public FluidStack drain(final ForgeDirection aDirection, final int maxDrain, final boolean doDrain) { + final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() + .getITankContainerAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return null; + } + return tTileEntity.drain(aDirection, maxDrain, doDrain); + } + + @Override + public FluidStack drain(final ForgeDirection aSide, final FluidStack aFluid, final boolean doDrain) { + final IFluidHandler tTileEntity = this.getBaseMetaTileEntity() + .getITankContainerAtSide( + this.getBaseMetaTileEntity() + .getBackFacing()); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return null; + } + return tTileEntity.drain(aSide, aFluid, doDrain); + } + + public boolean addEnergyConsumption(final MTETesseractTerminal aTerminal) { + if (!this.getBaseMetaTileEntity() + .isAllowedToWork()) { + return false; + } + int J = (aTerminal.getBaseMetaTileEntity() + .getWorld() + == this.getBaseMetaTileEntity() + .getWorld() ? TESSERACT_ENERGY_COST : TESSERACT_ENERGY_COST_DIMENSIONAL); + + J *= 4; + + this.mNeededEnergy += J; + + return true; + } + + public boolean isValidTesseractGenerator(final String aOwnerName, final boolean aWorkIrrelevant) { + return (this.getBaseMetaTileEntity() != null) && (!this.getBaseMetaTileEntity() + .isInvalidTileEntity()) + && (this.getBaseMetaTileEntity() + .isAllowedToWork()) + && ((aOwnerName == null) || (this.getBaseMetaTileEntity() + .getOwnerName() + .equals(aOwnerName))) + && ((aWorkIrrelevant) || (this.isWorking >= 20)); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + // TODO Auto-generated method stub + super.onPreTick(aBaseMetaTileEntity, aTick); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + // Utils.LOG_WARNING("Ticking Generator. 0"); + if (this.getBaseMetaTileEntity() + .isServerSide()) { + // Utils.LOG_WARNING("Ticking Generator."); + // Set owner + if (PlayerUtils.getPlayersUUIDByName( + this.getBaseMetaTileEntity() + .getOwnerName()) + != null) { + if (this.mOwner == null) { + Logger.WARNING("Setting Generators Owner. 1"); + this.mOwner = PlayerUtils.getPlayersUUIDByName( + this.getBaseMetaTileEntity() + .getOwnerName()); + } + } + + if (this.mFrequency != this.oFrequency) { + + Logger.WARNING("mFreq != oFreq"); + + if (getGeneratorEntity() == this) { + getGeneratorEntity(this.oFrequency); + this.getBaseMetaTileEntity() + .issueBlockUpdate(); + Logger.WARNING("this Gen == oFreq on map - do block update"); + } + Logger.WARNING("mFreq will be set to oFreq"); + this.oFrequency = this.mFrequency; + } + if ((this.getBaseMetaTileEntity() + .isAllowedToWork()) + && (this.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(this.mNeededEnergy, false))) { + // Utils.LOG_WARNING("Can Work & Has Energy"); + if ((getGeneratorEntity(Integer.valueOf(this.mFrequency)) == null) + || (!getGeneratorEntity(Integer.valueOf(this.mFrequency)).isValidTesseractGenerator(null, true))) { + // Utils.LOG_WARNING("storing TE I think to mFreq map?"); + TesseractHelper.setGeneratorOwnershipByPlayer( + PlayerUtils.getPlayerOnServerFromUUID(mOwner), + this.mFrequency, + this); + } + } else { + if (getGeneratorEntity(Integer.valueOf(this.mFrequency)) == this) { + Logger.WARNING("this gen == mFreq on map - do block update"); + TesseractHelper.removeGenerator(PlayerUtils.getPlayerOnServerFromUUID(mOwner), this.mFrequency); + this.getBaseMetaTileEntity() + .issueBlockUpdate(); + } + this.isWorking = 0; + } + if (getGeneratorEntity(Integer.valueOf(this.mFrequency)) == this) { + // Utils.LOG_WARNING("mFreq == this - do work related things"); + if (this.isWorking < 20) { + this.isWorking = ((byte) (this.isWorking + 1)); + } + if (this.isWorking == 20) { + this.getBaseMetaTileEntity() + .issueBlockUpdate(); + this.isWorking = ((byte) (this.isWorking + 1)); + } + } else { + this.isWorking = 0; + } + this.mNeededEnergy = 0; + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll( + this.mDescriptionArray, + "Generates a Tesseract for the attached Inventory", + "Connect with pipes to insert items", + "Consumes " + TESSERACT_ENERGY_COST + "EU/t for same dimension transfers", + "Consumes " + TESSERACT_ENERGY_COST_DIMENSIONAL + "EU/t for cross dimensional transfers", + GTPPCore.GT_Tooltip.get()); + } + + @Override + public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + return new ITexture[0][0][0]; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return side == facing + ? new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Screen_Frequency) } + : new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), + new GTRenderedTexture(Textures.BlockIcons.VOID) }; + } + + // To-Do? + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return false; + } + + @Override + public boolean canTankBeEmptied() { + return false; + } + + @Override + public boolean displaysItemStack() { + return false; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + private MTETesseractGenerator getGeneratorEntity() { + MTETesseractGenerator thisGenerator = TesseractHelper + .getGeneratorByFrequency(PlayerUtils.getPlayerOnServerFromUUID(mOwner), this.mFrequency); + if (thisGenerator != null) { + return thisGenerator; + } + return null; + } + + private MTETesseractGenerator getGeneratorEntity(int frequency) { + MTETesseractGenerator thisGenerator = TesseractHelper + .getGeneratorByFrequency(PlayerUtils.getPlayerOnServerFromUUID(mOwner), frequency); + if (thisGenerator != null) { + return thisGenerator; + } + return null; + } + + @Override + public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + if (this.getBaseMetaTileEntity() + .getOwnerName() != null + && !this.getBaseMetaTileEntity() + .getOwnerName() + .equals("")) { + this.mOwner = PlayerUtils.getPlayersUUIDByName( + this.getBaseMetaTileEntity() + .getOwnerName()); + Logger.WARNING("Setting Generators Owner. 2"); + } + super.onCreated(aStack, aWorld, aPlayer); + } + + @Override + public void onRemoval() { + try { + GTPPCore.sTesseractGeneratorOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + super.onRemoval(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTETesseractTerminal.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTETesseractTerminal.java new file mode 100644 index 0000000000..c34a2ca41b --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/automation/MTETesseractTerminal.java @@ -0,0 +1,642 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.automation; + +import java.util.UUID; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.helpers.tesseract.TesseractHelper; + +public class MTETesseractTerminal extends MTEBasicTank { + + public int mFrequency = 0; + public UUID mOwner; + public boolean mDidWork = false; + public static boolean sInterDimensionalTesseractAllowed = true; + private static int TESSERACT_ENERGY_COST = 128; + private static int TESSERACT_ENERGY_COST_DIMENSIONAL = 512; + + public MTETesseractTerminal(final int aID, final String aName, final String aNameRegional, final int aTier) { + super(aID, aName, aNameRegional, aTier, 3, ""); + } + + public MTETesseractTerminal(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTETesseractTerminal(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean isTransformerUpgradable() { + return false; + } + + @Override + public boolean isOverclockerUpgradable() { + return false; + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isFacingValid(final ForgeDirection facing) { + return true; + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getBackFacing(); + } + + @Override + public boolean isValidSlot(final int aIndex) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return (this.getBaseMetaTileEntity() + .getEUCapacity() / 100); + } + + @Override + public long maxEUInput() { + return TESSERACT_ENERGY_COST_DIMENSIONAL; + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public long maxEUStore() { + return TESSERACT_ENERGY_COST_DIMENSIONAL * 8 * 32; + } + + @Override + public long maxSteamStore() { + return this.maxEUStore(); + } + + @Override + public boolean ownerControl() { + return true; + } + + @Override + public int getProgresstime() { + return this.getTesseract(this.mFrequency, false) != null ? 999 : 0; + } + + @Override + public int maxProgresstime() { + return 1000; + } + + @Override + public void saveNBTData(final NBTTagCompound aNBT) { + aNBT.setInteger("mFrequency", this.mFrequency); + aNBT.setString("mOwner", mOwner.toString()); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + this.mFrequency = aNBT.getInteger("mFrequency"); + this.mOwner = UUID.fromString(aNBT.getString("mOnwer")); + } + + @Override + public void onConfigLoad() { + sInterDimensionalTesseractAllowed = true; + TESSERACT_ENERGY_COST = 512; + TESSERACT_ENERGY_COST_DIMENSIONAL = 2048; + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer, + final ForgeDirection side, final float aX, final float aY, final float aZ) { + + if (this.mOwner == null) { + if (this.getBaseMetaTileEntity() + .getOwnerName() != null + && !this.getBaseMetaTileEntity() + .getOwnerName() + .equals("")) { + if (this.getBaseMetaTileEntity() + .getOwnerName() + .toLowerCase() + .equals( + aPlayer.getDisplayName() + .toLowerCase())) { + this.mOwner = PlayerUtils.getPlayersUUIDByName( + this.getBaseMetaTileEntity() + .getOwnerName()); + } + } + } + + if (aPlayer.getUniqueID() + .compareTo(this.mOwner) == 0) { + if (side == this.getBaseMetaTileEntity() + .getFrontFacing()) { + final float[] tCoords = GTUtility.getClickedFacingCoords(side, aX, aY, aZ); + switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + (2 * (byte) (int) (tCoords[1] * 2.0F)))) { + case 0: + // Utils.LOG_WARNING("Freq. -1 | " + this.mFrequency); + try { + GTPPCore.sTesseractTerminalOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency -= 1; + break; + case 1: + // Utils.LOG_WARNING("Freq. +1 | " + this.mFrequency); + try { + GTPPCore.sTesseractTerminalOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency += 1; + default: + // Utils.LOG_WARNING("Did not click the correct place."); + try { + GTPPCore.sTesseractTerminalOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + break; + } + PlayerUtils.messagePlayer(aPlayer, "Frequency: " + this.mFrequency); + if (this.getTesseract(this.mFrequency, false) != null) { + PlayerUtils.messagePlayer( + aPlayer, + new StringBuilder().append(EnumChatFormatting.GREEN) + .append(" (Connected)") + .toString()); + } + } + } else if (aPlayer.getUniqueID() + .compareTo(this.mOwner) != 0) { + GTUtility.sendChatToPlayer(aPlayer, "This is not your Tesseract Terminal to configure."); + } + return true; + } + + @Override + public void onScrewdriverRightClick(final ForgeDirection side, final EntityPlayer aPlayer, final float aX, + final float aY, final float aZ) { + if (aPlayer.getUniqueID() + .compareTo(this.mOwner) == 0) { + if (side == this.getBaseMetaTileEntity() + .getFrontFacing()) { + final float[] tCoords = GTUtility.getClickedFacingCoords(side, aX, aY, aZ); + switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + (2 * (byte) (int) (tCoords[1] * 2.0F)))) { + case 0 -> { + try { + GTPPCore.sTesseractTerminalOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency -= 64; + } + case 1 -> { + try { + GTPPCore.sTesseractTerminalOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency += 64; + } + case 2 -> { + try { + GTPPCore.sTesseractTerminalOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency -= 512; + } + case 3 -> { + try { + GTPPCore.sTesseractTerminalOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + this.mFrequency += 512; + } + } + GTUtility.sendChatToPlayer( + aPlayer, + "Frequency: " + this.mFrequency + + (this.getTesseract(this.mFrequency, false) == null ? "" + : new StringBuilder().append(EnumChatFormatting.GREEN) + .append(" (Connected)") + .toString())); + } + } else if (aPlayer.getUniqueID() + .compareTo(this.mOwner) != 0) { + GTUtility.sendChatToPlayer(aPlayer, "This is not your Tesseract Terminal to configure."); + } + } + + public boolean allowCoverOnSide(final ForgeDirection side, final int aCoverID) { + return side != this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + public MTETesseractGenerator getTesseract(final int aFrequency, final boolean aWorkIrrelevant) { + final MTETesseractGenerator rTesseract = TesseractHelper + .getGeneratorByFrequency(PlayerUtils.getPlayerOnServerFromUUID(mOwner), aFrequency); + if (rTesseract == null) { + return null; + } + if (!TesseractHelper.isGeneratorOwnedByPlayer(PlayerUtils.getPlayerOnServerFromUUID(mOwner), rTesseract)) { + return null; + } + if (rTesseract.mFrequency != aFrequency) { + TesseractHelper.setTerminalOwnershipByPlayer( + PlayerUtils.getPlayerOnServerFromUUID(mOwner), + Integer.valueOf(aFrequency), + null); + return null; + } + if (!rTesseract.isValidTesseractGenerator( + this.getBaseMetaTileEntity() + .getOwnerName(), + aWorkIrrelevant)) { + return null; + } + if ((!sInterDimensionalTesseractAllowed) && (rTesseract.getBaseMetaTileEntity() + .getWorld() + != this.getBaseMetaTileEntity() + .getWorld())) { + return null; + } + return rTesseract; + } + + @Override + public String[] getInfoData() { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity != null) && (this.getBaseMetaTileEntity() + .isAllowedToWork()) && (tTileEntity.isSendingInformation())) { + return tTileEntity.getInfoData(); + } + return new String[] { "Tesseract Generator", "Freqency:", "" + this.mFrequency, + this.getTesseract(this.mFrequency, false) != null ? "Active" : "Inactive" }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public boolean isDigitalChest() { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return false; + } + return tTileEntity.isDigitalChest(); + } + + @Override + public ItemStack[] getStoredItemData() { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return null; + } + return tTileEntity.getStoredItemData(); + } + + @Override + public void setItemCount(final int aCount) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return; + } + tTileEntity.setItemCount(aCount); + } + + @Override + public int getMaxItemCount() { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return 0; + } + return tTileEntity.getMaxItemCount(); + } + + @Override + public boolean isItemValidForSlot(final int aIndex, final ItemStack aStack) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return false; + } + return tTileEntity.isItemValidForSlot(aIndex, aStack); + } + + @Override + public int[] getAccessibleSlotsFromSide(final int ordinalSide) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return new int[0]; + } + return tTileEntity.getAccessibleSlotsFromSide(ordinalSide); + } + + @Override + public boolean canInsertItem(final int aIndex, final ItemStack aStack, final int ordinalSide) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return false; + } + return tTileEntity.canInsertItem(aIndex, aStack, ordinalSide); + } + + @Override + public boolean canExtractItem(final int aIndex, final ItemStack aStack, final int ordinalSide) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return false; + } + return tTileEntity.canExtractItem(aIndex, aStack, ordinalSide); + } + + @Override + public int getSizeInventory() { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return 0; + } + return tTileEntity.getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot(final int aIndex) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return null; + } + return tTileEntity.getStackInSlot(aIndex); + } + + @Override + public void setInventorySlotContents(final int aIndex, final ItemStack aStack) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return; + } + tTileEntity.setInventorySlotContents(aIndex, aStack); + } + + @Override + public ItemStack decrStackSize(final int aIndex, final int aAmount) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return null; + } + return tTileEntity.decrStackSize(aIndex, aAmount); + } + + @Override + public String getInventoryName() { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return ""; + } + return tTileEntity.getInventoryName(); + } + + @Override + public int getInventoryStackLimit() { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return 0; + } + return tTileEntity.getInventoryStackLimit(); + } + + @Override + public boolean canFill(final ForgeDirection aSide, final Fluid aFluid) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return false; + } + return tTileEntity.canFill(aSide, aFluid); + } + + @Override + public boolean canDrain(final ForgeDirection aSide, final Fluid aFluid) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return false; + } + return tTileEntity.canDrain(aSide, aFluid); + } + + @Override + public FluidTankInfo[] getTankInfo(final ForgeDirection aSide) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return new FluidTankInfo[0]; + } + return tTileEntity.getTankInfo(aSide); + } + + @Override + public int fill_default(final ForgeDirection aDirection, final FluidStack aFluid, final boolean doFill) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return 0; + } + return tTileEntity.fill(aDirection, aFluid, doFill); + } + + @Override + public FluidStack drain(final ForgeDirection aDirection, final int maxDrain, final boolean doDrain) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return null; + } + return tTileEntity.drain(aDirection, maxDrain, doDrain); + } + + @Override + public FluidStack drain(final ForgeDirection aSide, final FluidStack aFluid, final boolean doDrain) { + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, false); + if ((tTileEntity == null) || (!this.getBaseMetaTileEntity() + .isAllowedToWork())) { + return null; + } + return tTileEntity.drain(aSide, aFluid, doDrain); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if ((this.getBaseMetaTileEntity() + .isServerSide()) + && (this.getBaseMetaTileEntity() + .isAllowedToWork())) { + // Set owner + if (PlayerUtils.getPlayersUUIDByName( + this.getBaseMetaTileEntity() + .getOwnerName()) + != null) { + if (this.mOwner == null) { + this.mOwner = PlayerUtils.getPlayersUUIDByName( + this.getBaseMetaTileEntity() + .getOwnerName()); + } + } + final MTETesseractGenerator tTileEntity = this.getTesseract(this.mFrequency, true); + if (tTileEntity != null) { + tTileEntity.addEnergyConsumption(this); + if ((!this.mDidWork) && (this.getTesseract(this.mFrequency, false) != null)) { + this.mDidWork = true; + this.getBaseMetaTileEntity() + .issueBlockUpdate(); + this.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(128, false); + } + } else if (this.mDidWork == true) { + this.mDidWork = false; + this.getBaseMetaTileEntity() + .issueBlockUpdate(); + } + } + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll( + this.mDescriptionArray, + "Accesses Tesseract Generators remotely", + "Connect with pipes to extract items or fluids", + "Outputs from the back face", + "Consumes " + TESSERACT_ENERGY_COST + "EU/t for same dimension transfers", + "Consumes " + TESSERACT_ENERGY_COST_DIMENSIONAL + "EU/t for cross dimensional transfers", + GTPPCore.GT_Tooltip.get()); + } + + @Override + public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + return new ITexture[0][0][0]; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return side == facing + ? new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Screen_Frequency) } + : new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), + new GTRenderedTexture(Textures.BlockIcons.VOID) }; + } + + // To-Do? + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return false; + } + + @Override + public boolean canTankBeEmptied() { + return false; + } + + @Override + public boolean displaysItemStack() { + return false; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + if (this.getBaseMetaTileEntity() + .getOwnerName() != null + && !this.getBaseMetaTileEntity() + .getOwnerName() + .equals("")) { + this.mOwner = PlayerUtils.getPlayersUUIDByName( + this.getBaseMetaTileEntity() + .getOwnerName()); + } + super.onCreated(aStack, aWorld, aPlayer); + } + + @Override + public void onRemoval() { + try { + GTPPCore.sTesseractTerminalOwnershipMap.get(mOwner) + .remove(this.mFrequency); + } catch (Throwable t) {} + super.onRemoval(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_Base.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_Base.java deleted file mode 100644 index 6200a37872..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_Base.java +++ /dev/null @@ -1,332 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.generators; - -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntityFurnace; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidTankInfo; - -import org.apache.commons.lang3.ArrayUtils; -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.UITexture; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.gui.modularui.GUITextureSet; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.common.tileentities.boilers.GT_MetaTileEntity_Boiler; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.gui.GTPP_UITextures; - -public class GT_MetaTileEntity_Boiler_Base extends GT_MetaTileEntity_Boiler { - - private final int steamPerSecond; - private final int tier; - - public GT_MetaTileEntity_Boiler_Base(int aID, String aNameRegional, int tier) { - super( - aID, - "electricboiler." + tier + ".tier.single", - aNameRegional, - "Produces " + (CORE.ConfigSwitches.boilerSteamPerSecond * tier) + "L of Steam per second"); - this.steamPerSecond = (CORE.ConfigSwitches.boilerSteamPerSecond * tier); - this.tier = tier; - } - - public GT_MetaTileEntity_Boiler_Base(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - this.steamPerSecond = (CORE.ConfigSwitches.boilerSteamPerSecond * aTier); - this.tier = aTier; - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll( - this.mDescriptionArray, - "Produces " + getPollution() + " pollution/sec", - "Consumes fuel only when temperature is less than 100C", - "Fuel with burn time greater than 500 is more efficient.", - "Doesn't explode if there's no water", - CORE.GT_Tooltip.get()); - } - - public ITexture getOverlayIcon() { - return new GT_RenderedTexture(Textures.BlockIcons.BOILER_FRONT); - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFrontActive(i); - rTextures[6][i + 1] = this.getBackActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - protected GT_RenderedTexture getCasingTexture() { - if (this.tier == 1) { - return new GT_RenderedTexture(Textures.BlockIcons.MACHINE_LV_SIDE); - } else if (this.tier == 2) { - return new GT_RenderedTexture(Textures.BlockIcons.MACHINE_MV_SIDE); - } else { - return new GT_RenderedTexture(Textures.BlockIcons.MACHINE_HV_SIDE); - } - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.tier][aColor + 1], this.getCasingTexture() }; - } - - public ITexture[] getBack(final byte aColor) { - return this.getSides(aColor); - } - - public ITexture[] getBottom(final byte aColor) { - return this.getSides(aColor); - } - - public ITexture[] getTop(final byte aColor) { - return this.getSides(aColor); - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.tier][aColor + 1], this.getCasingTexture() }; - } - - public ITexture[] getFrontActive(final byte aColor) { - return this.getFront(aColor); - } - - public ITexture[] getBackActive(final byte aColor) { - return this.getSides(aColor); - } - - public ITexture[] getBottomActive(final byte aColor) { - return this.getBottom(aColor); - } - - public ITexture[] getTopActive(final byte aColor) { - return this.getTop(aColor); - } - - public ITexture[] getSidesActive(final byte aColor) { - return this.getSides(aColor); - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return side != this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public boolean isFacingValid(final ForgeDirection side) { - return side.offsetY == 0; - } - - // Please find out what I do. - // I do stuff within the GUI. - // this.mTemperature = Math.min(54, Math.max(0, this.mTemperature * 54 / (((GT_MetaTileEntity_Boiler) - // this.mTileEntity.getMetaTileEntity()).maxProgresstime() - 10))); - @Override - public int maxProgresstime() { - return 1000 + (250 * tier); - } - - @Override - public boolean isElectric() { - return false; - } - - @Override - public int getCapacity() { - return (16000 + (16000 * tier)); - } - - // This type of machine can have different water and steam capacities. - @Override - public int getSteamCapacity() { - return 2 * getCapacity(); - } - - @Override - protected int getProductionPerSecond() { - return steamPerSecond; - } - - @Override - protected int getMaxTemperature() { - return maxProgresstime(); - } - - @Override - protected int getEnergyConsumption() { - return 2; - } - - @Override - protected int getCooldownInterval() { - return 40; - } - - @Override - protected int getHeatUpRate() { - return 10; - } - - @Override - protected void updateFuel(IGregTechTileEntity tile, long ticks) { - ItemStack fuelStack = this.mInventory[2]; - if (fuelStack == null) return; - - int burnTime = getBurnTime(fuelStack); - if (burnTime > 0 && this.mTemperature <= 101) { - consumeFuel(tile, fuelStack, burnTime); - } - } - - @Override - protected boolean isItemValidFuel(@NotNull ItemStack stack) { - return getBurnTime(stack) > 0; - } - - @Override - // Since this type of machine can have different water and steam capacities, we need to override getTankInfo() to - // support returning those different capacities. - public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { - return new FluidTankInfo[] { new FluidTankInfo(this.mFluid, getCapacity()), - new FluidTankInfo(this.mSteam, getSteamCapacity()) }; - } - - @Override - protected boolean isAutomatable() { - return true; - } - - @Override - protected int getPollution() { - return (int) (CORE.ConfigSwitches.basePollutionPerSecondBoiler - * CORE.ConfigSwitches.pollutionReleasedByTierBoiler[this.tier]); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_Base(this.mName, tier, this.mDescriptionArray, this.mTextures); - } - - @Override - protected void onDangerousWaterLack(IGregTechTileEntity tile, long ticks) { - // Smart boilers don't explode! - } - - /** - * Returns burn time if the stack is a valid fuel, otherwise return 0. - */ - private static int getBurnTime(ItemStack stack) { - int burnTime = GameRegistry.getFuelValue(stack); - if (burnTime <= 0) { - burnTime = TileEntityFurnace.getItemBurnTime(stack); - } - - return burnTime; - } - - public void consumeFuel(IGregTechTileEntity tile, ItemStack fuel, int burnTime) { - this.mProcessingEnergy += burnTime / 10; - this.mTemperature += burnTime / 500; // will add bonus temperature points if the burn time is pretty high - - tile.decrStackSize(2, 1); - if (tile.getRandomNumber(3) == 0) { - if (fuel.getDisplayName() - .toLowerCase() - .contains("charcoal") - || fuel.getDisplayName() - .toLowerCase() - .contains("coke")) { - tile.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L)); - } else { - tile.addStackToSlot(3, GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L)); - } - } - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCover) { - if (side != this.getBaseMetaTileEntity() - .getFrontFacing()) { - return true; - } - return super.allowCoverOnSide(side, aCover); - } - - @Override - public GUITextureSet getGUITextureSet() { - return GUITextureSet.DEFAULT; - } - - @Override - protected IDrawable[] getFuelSlotBackground() { - return new IDrawable[] { getGUITextureSet().getItemSlot(), GTPP_UITextures.OVERLAY_SLOT_COAL }; - } - - @Override - protected IDrawable[] getAshSlotBackground() { - return new IDrawable[] { getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_DUST }; - } - - @Override - public int getTitleColor() { - return COLOR_TITLE.get(); - } - - @Override - protected IDrawable getOverlaySlotIn() { - return GT_UITextures.OVERLAY_SLOT_IN; - } - - @Override - protected IDrawable getOverlaySlotOut() { - return GT_UITextures.OVERLAY_SLOT_OUT; - } - - @Override - protected IDrawable getOverlaySlotCanister() { - return GTPP_UITextures.OVERLAY_SLOT_CANISTER_DARK; - } - - @Override - protected UITexture getProgressbarEmpty() { - return GTPP_UITextures.PROGRESSBAR_BOILER_EMPTY; - } - - @Override - protected UITexture getProgressbarFuel() { - return GTPP_UITextures.PROGRESSBAR_FUEL; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_HV.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_HV.java deleted file mode 100644 index e24698812f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_HV.java +++ /dev/null @@ -1,51 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.generators; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; - -public class GT_MetaTileEntity_Boiler_HV extends GT_MetaTileEntity_Boiler_Base { - - public GT_MetaTileEntity_Boiler_HV(int aID, String aNameRegional, int aBoilerTier) { - super(aID, aNameRegional, aBoilerTier); - } - - public GT_MetaTileEntity_Boiler_HV(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_HV(this.mName, 3, this.mDescriptionArray, this.mTextures); - } - - @Override - protected GT_RenderedTexture getCasingTexture() { - return new GT_RenderedTexture(Textures.BlockIcons.MACHINE_HV_SIDE); - } - - @Override - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(Textures.BlockIcons.BOILER_FRONT) }; - } - - @Override - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(Textures.BlockIcons.MACHINE_HV_TOP) }; - } - - @Override - public ITexture[] getFrontActive(final byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(Textures.BlockIcons.BOILER_FRONT_ACTIVE) }; - } - - @Override - public ITexture[] getTopActive(final byte aColor) { - return getTop(aColor); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_LV.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_LV.java deleted file mode 100644 index adaec8a51e..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_LV.java +++ /dev/null @@ -1,51 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.generators; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; - -public class GT_MetaTileEntity_Boiler_LV extends GT_MetaTileEntity_Boiler_Base { - - public GT_MetaTileEntity_Boiler_LV(int aID, String aNameRegional, int aBoilerTier) { - super(aID, aNameRegional, aBoilerTier); - } - - public GT_MetaTileEntity_Boiler_LV(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_LV(this.mName, 1, this.mDescriptionArray, this.mTextures); - } - - @Override - protected GT_RenderedTexture getCasingTexture() { - return new GT_RenderedTexture(Textures.BlockIcons.MACHINE_LV_SIDE); - } - - @Override - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(Textures.BlockIcons.BOILER_FRONT) }; - } - - @Override - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(Textures.BlockIcons.MACHINE_LV_TOP) }; - } - - @Override - public ITexture[] getFrontActive(final byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(Textures.BlockIcons.BOILER_FRONT_ACTIVE) }; - } - - @Override - public ITexture[] getTopActive(final byte aColor) { - return getTop(aColor); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_MV.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_MV.java deleted file mode 100644 index dce70d4ccf..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_Boiler_MV.java +++ /dev/null @@ -1,51 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.generators; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; - -public class GT_MetaTileEntity_Boiler_MV extends GT_MetaTileEntity_Boiler_Base { - - public GT_MetaTileEntity_Boiler_MV(int aID, String aNameRegional, int aBoilerTier) { - super(aID, aNameRegional, aBoilerTier); - } - - public GT_MetaTileEntity_Boiler_MV(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_Boiler_MV(this.mName, 2, this.mDescriptionArray, this.mTextures); - } - - @Override - protected GT_RenderedTexture getCasingTexture() { - return new GT_RenderedTexture(Textures.BlockIcons.MACHINE_MV_SIDE); - } - - @Override - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(Textures.BlockIcons.BOILER_FRONT) }; - } - - @Override - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(Textures.BlockIcons.MACHINE_MV_TOP) }; - } - - @Override - public ITexture[] getFrontActive(final byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(Textures.BlockIcons.BOILER_FRONT_ACTIVE) }; - } - - @Override - public ITexture[] getTopActive(final byte aColor) { - return getTop(aColor); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_SemiFluidGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_SemiFluidGenerator.java deleted file mode 100644 index bbb5ae9da4..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GT_MetaTileEntity_SemiFluidGenerator.java +++ /dev/null @@ -1,162 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.generators; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.lib.CORE; - -public class GT_MetaTileEntity_SemiFluidGenerator extends GT_MetaTileEntity_BasicGenerator { - - public int mEfficiency; - - public GT_MetaTileEntity_SemiFluidGenerator(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, "Requires semi-fluid Fuel", new ITexture[0]); - } - - public GT_MetaTileEntity_SemiFluidGenerator(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public int getPollution() { - return (int) (CORE.ConfigSwitches.basePollutionPerSecondSemiFluidGenerator - * CORE.ConfigSwitches.pollutionReleasedByTierSemiFluidGenerator[this.mTier]); - } - - @Override - public int getCapacity() { - return 16000; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_SemiFluidGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - // Logger.WARNING("Fuel Count: "+Gregtech_Recipe_Map.sSemiFluidLiquidFuels.mRecipeList.size()); - return GTPPRecipeMaps.semiFluidFuels; - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll( - this.mDescriptionArray, - "Produces " + (this.getPollution()) + " pollution/sec", - "Fuel Efficiency: " + this.getEfficiency() + "%", - CORE.GT_Tooltip.get()); - } - - @Override - public int getEfficiency() { - return this.mEfficiency; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return (side == getBaseMetaTileEntity().getFrontFacing()); - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCover) { - if (side != this.getBaseMetaTileEntity() - .getFrontFacing()) { - return true; - } - return super.allowCoverOnSide(side, aCover); - } - - @Override - public int getFuelValue(ItemStack aStack) { - if ((GT_Utility.isStackInvalid(aStack)) || (getRecipeMap() == null)) { - Logger.WARNING("Bad Fuel?"); - return 0; - } - int rValue = Math.max(GT_ModHandler.getFuelValue(aStack) * 6 / 5, super.getFuelValue(aStack)); - if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) { - rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3); - } - Logger.WARNING("Good Fuel: " + rValue); - return rValue; - } - - @Override - public ITexture[] getFront(byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_FRONT), - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBack(byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_TOP) }; - } - - @Override - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM) }; - } - - @Override - public ITexture[] getTop(byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE) }; - } - - @Override - public ITexture[] getSides(byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_TOP) }; - } - - @Override - public ITexture[] getFrontActive(byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_FRONT_ACTIVE), - Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] }; - } - - @Override - public ITexture[] getBackActive(byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_TOP_ACTIVE) }; - } - - @Override - public ITexture[] getBottomActive(byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM_ACTIVE) }; - } - - @Override - public ITexture[] getTopActive(byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE) }; - } - - @Override - public ITexture[] getSidesActive(byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_TOP_ACTIVE) }; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntityGeothermalGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntityGeothermalGenerator.java deleted file mode 100644 index af235556c8..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntityGeothermalGenerator.java +++ /dev/null @@ -1,171 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.generators; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_ModHandler; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntityGeothermalGenerator extends GT_MetaTileEntity_BasicGenerator { - - public int mEfficiency; - - public GregtechMetaTileEntityGeothermalGenerator(final int aID, final String aName, final String aNameRegional, - final int aTier) { - super(aID, aName, aNameRegional, aTier, "Requires Pahoehoe Lava or Normal Lava as Fuel", new ITexture[0]); - this.setEfficiency(); - } - - public GregtechMetaTileEntityGeothermalGenerator(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - this.setEfficiency(); - } - - @Override - public String[] getDescription() { - String aPollution = "Causes " + this.getPollution() + " Pollution per second"; - return ArrayUtils.addAll( - this.mDescriptionArray, - "Generates power at " + this.getEfficiency() + "% Efficiency per tick", - aPollution, - CORE.GT_Tooltip.get()); - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public int getCapacity() { - // return MathUtils.roundToClosestMultiple(32000*(this.mTier/2), 25000); - return 5000 * this.mTier; - } - - public void setEfficiency() { - this.mEfficiency = (100 - (this.mTier * 7)); - } - - @Override - public int getEfficiency() { - return this.mEfficiency; - } - - @Override - public int getFuelValue(final ItemStack aStack) { - int rValue = Math.max((GT_ModHandler.getFuelValue(aStack) * 6) / 5, super.getFuelValue(aStack)); - if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) { - rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3); - } - return rValue; - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntityGeothermalGenerator( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE), - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; - } - - @Override - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BACK), - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Diesel_Vertical) }; - } - - @Override - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM) }; - } - - @Override - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE), - new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER) }; - } - - @Override - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.BOILER_LAVA_FRONT) }; - } - - @Override - public ITexture[] getFrontActive(final byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE), - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; - } - - @Override - public ITexture[] getBackActive(final byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BACK_ACTIVE), - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Diesel_Vertical_Active) }; - } - - @Override - public ITexture[] getBottomActive(final byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM_ACTIVE) }; - } - - @Override - public ITexture[] getTopActive(final byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE), - new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE) }; - } - - @Override - public ITexture[] getSidesActive(final byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.BOILER_LAVA_FRONT_ACTIVE) }; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.hotFuels; - } - - @Override - public int getPollution() { - return (int) (CORE.ConfigSwitches.basePollutionPerSecondGeothermalGenerator - * CORE.ConfigSwitches.pollutionReleasedByTierGeothermalGenerator[mTier]); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntityRocketFuelGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntityRocketFuelGenerator.java deleted file mode 100644 index 5b1a45e16f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntityRocketFuelGenerator.java +++ /dev/null @@ -1,145 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.generators; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_ModHandler; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.generators.GregtechRocketFuelGeneratorBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntityRocketFuelGenerator extends GregtechRocketFuelGeneratorBase { - - public int mEfficiency; - - public GregtechMetaTileEntityRocketFuelGenerator(final int aID, final String aName, final String aNameRegional, - final int aTier) { - super(aID, aName, aNameRegional, aTier, "Requires GT++ Rocket Fuels", new ITexture[0]); - } - - public GregtechMetaTileEntityRocketFuelGenerator(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - this.mEfficiency = getEfficiency(); - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntityRocketFuelGenerator( - this.mName, - this.mTier, - this.mDescriptionArray, - this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.rocketFuels; - } - - @Override - public int getCapacity() { - return 32000; - } - - @Override - public int getEfficiency() { - return 80 - (10 * (this.mTier - 4)); - } - - @Override - public int getFuelValue(final ItemStack aStack) { - int rValue = Math.max((GT_ModHandler.getFuelValue(aStack) * 6) / 5, super.getFuelValue(aStack)); - if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) { - rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3); - } - return rValue; - } - - private GT_RenderedTexture getCasingTexture() { - if (this.mTier <= 4) { - return new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top); - } else if (this.mTier == 5) { - - return new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Advanced); - } else { - - return new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Ultra); - } - // return new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top); - } - - @Override - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], this.getCasingTexture(), - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; - } - - @Override - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Vent) }; - } - - @Override - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - @Override - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Redstone_Off) }; - } - - @Override - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { super.getSides(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Diesel_Horizontal) }; - } - - @Override - public ITexture[] getFrontActive(final byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], this.getCasingTexture(), - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; - } - - @Override - public ITexture[] getBackActive(final byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Vent_Fast) }; - } - - @Override - public ITexture[] getBottomActive(final byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - @Override - public ITexture[] getTopActive(final byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Redstone_On) }; - } - - @Override - public ITexture[] getSidesActive(final byte aColor) { - return new ITexture[] { super.getSidesActive(aColor)[0], this.getCasingTexture(), - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Diesel_Horizontal_Active) }; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntity_RTG.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntity_RTG.java deleted file mode 100644 index 32cf3a92cc..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/GregtechMetaTileEntity_RTG.java +++ /dev/null @@ -1,379 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.generators; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicGenerator; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; - -public class GregtechMetaTileEntity_RTG extends GT_MetaTileEntity_BasicGenerator { - - public int mEfficiency; - private long mTicksToBurnFor; - private int mVoltage = 0; - private GT_Recipe mCurrentRecipe; - private int mDaysRemaining = 0; - private int mDayTick = 0; - private byte mNewTier = 0; - - public int removeDayOfTime() { - if (this.mDaysRemaining > 0) { - return this.mDaysRemaining--; - } - return this.mDaysRemaining; - } - - // Generates fuel value based on MC days - public static int convertDaysToTicks(float days) { - int value = 0; - value = MathUtils.roundToClosestInt(20 * 86400 * days); - return value; - } - - public static long getTotalEUGenerated(int ticks, int voltage) { - return ticks * voltage; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setLong("mTicksToBurnFor", this.mTicksToBurnFor); - aNBT.setInteger("mVoltage", this.mVoltage); - aNBT.setInteger("mDaysRemaining", this.mDaysRemaining); - aNBT.setInteger("mDayTick", this.mDayTick); - aNBT.setByte("mNewTier", this.mNewTier); - - if (this.mCurrentRecipe != null) { - final NBTTagList list = new NBTTagList(); - final ItemStack stack = this.mCurrentRecipe.mInputs[0]; - if (stack != null) { - final NBTTagCompound data = new NBTTagCompound(); - stack.writeToNBT(data); - data.setInteger("mSlot", 0); - list.appendTag(data); - } - aNBT.setTag("mRecipeItem", list); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.mTicksToBurnFor = aNBT.getLong("mTicksToBurnFor"); - this.mVoltage = aNBT.getInteger("mVoltage"); - this.mDaysRemaining = aNBT.getInteger("mDaysRemaining"); - this.mDayTick = aNBT.getInteger("mDayTick"); - this.mNewTier = aNBT.getByte("mNewTier"); - - try { - ReflectionUtils.setByte(this, "mTier", this.mNewTier); - } catch (Exception e) { - if (this.getBaseMetaTileEntity() != null) { - IGregTechTileEntity thisTile = this.getBaseMetaTileEntity(); - if (thisTile.isAllowedToWork() || thisTile.isActive()) { - thisTile.setActive(false); - } - } - } - - final NBTTagList list = aNBT.getTagList("mRecipeItem", 10); - final NBTTagCompound data = list.getCompoundTagAt(0); - ItemStack lastUsedFuel = ItemStack.loadItemStackFromNBT(data); - if (lastUsedFuel != null) { - this.mCurrentRecipe = getRecipeMap().findRecipe( - getBaseMetaTileEntity(), - false, - 9223372036854775807L, - null, - new ItemStack[] { lastUsedFuel }); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (this.mDayTick < 24000) { - this.mDayTick++; - } else if (this.mDayTick >= 24000) { - this.mDayTick = 0; - this.mDaysRemaining = this.removeDayOfTime(); - } - } - - if ((aBaseMetaTileEntity.isServerSide()) && (aBaseMetaTileEntity.isAllowedToWork()) && (aTick % 10L == 0L)) { - long tProducedEU = 0L; - if (this.mFluid == null) { - if (aBaseMetaTileEntity.getUniversalEnergyStored() < maxEUOutput() + getMinimumStoredEU()) { - this.mInventory[getStackDisplaySlot()] = null; - } else { - if (this.mInventory[getStackDisplaySlot()] == null) - this.mInventory[getStackDisplaySlot()] = new ItemStack(Blocks.fire, 1); - this.mInventory[getStackDisplaySlot()].setStackDisplayName( - "Generating: " - + GT_Utility.formatNumbers( - aBaseMetaTileEntity.getUniversalEnergyStored() - getMinimumStoredEU()) - + " EU"); - } - } else { - int tFuelValue = getFuelValue(this.mFluid); - int tConsumed = consumedFluidPerOperation(this.mFluid); - if ((tFuelValue > 0) && (tConsumed > 0) && (this.mFluid.amount > tConsumed)) { - long tFluidAmountToUse = Math.min( - this.mFluid.amount / tConsumed, - (maxEUStore() - aBaseMetaTileEntity.getUniversalEnergyStored()) / tFuelValue); - if ((tFluidAmountToUse > 0L) - && (aBaseMetaTileEntity.increaseStoredEnergyUnits(tFluidAmountToUse * tFuelValue, true))) { - tProducedEU = tFluidAmountToUse * tFuelValue; - FluidStack tmp260_257 = this.mFluid; - tmp260_257.amount = (int) (tmp260_257.amount - (tFluidAmountToUse * tConsumed)); - } - } - } - if ((this.mInventory[getInputSlot()] != null) - && (aBaseMetaTileEntity.getUniversalEnergyStored() < maxEUOutput() * 20L + getMinimumStoredEU()) - && (GT_Utility.getFluidForFilledItem(this.mInventory[getInputSlot()], true) == null)) { - int tFuelValue = getFuelValue(this.mInventory[getInputSlot()]); - if (tFuelValue > 0) { - ItemStack tEmptyContainer = getEmptyContainer(this.mInventory[getInputSlot()]); - if (aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), tEmptyContainer)) { - aBaseMetaTileEntity.increaseStoredEnergyUnits(tFuelValue, true); - aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); - tProducedEU = tFuelValue; - } - } - } - if ((tProducedEU > 0L) && (getPollution() > 0)) { - PollutionUtils - .addPollution(aBaseMetaTileEntity, (int) (tProducedEU * getPollution() / 500 * this.mTier + 1L)); - } - } - - if (aBaseMetaTileEntity.isServerSide()) aBaseMetaTileEntity.setActive( - (aBaseMetaTileEntity.isAllowedToWork()) - && (aBaseMetaTileEntity.getUniversalEnergyStored() >= maxEUOutput() + getMinimumStoredEU())); - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll( - this.mDescriptionArray, - "Fuel is measured in minecraft days (Check with Scanner)", - "RTG changes output voltage depending on fuel", - "Generates power at " + GT_Utility.formatNumbers(this.getEfficiency()) + "% Efficiency per tick", - "Output Voltage: " + GT_Utility.formatNumbers(this.getOutputTier()) + " EU/t", - CORE.GT_Tooltip.get()); - } - - public GregtechMetaTileEntity_RTG(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier, "Requires RTG Pellets", new ITexture[0]); - } - - private byte getTier() { - int voltage = this.mVoltage; - if (voltage >= 512) { - return 4; - } else if (voltage >= 128) { - return 3; - } else if (voltage >= 32) { - return 2; - } else if (voltage >= 8) { - return 1; - } - return 0; - } - - public GregtechMetaTileEntity_RTG(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return ((side.offsetY == 0) && (side != getBaseMetaTileEntity().getFrontFacing()) - && (side != getBaseMetaTileEntity().getBackFacing())); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_RTG(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.rtgFuels; - } - - @Override - public int getCapacity() { - return 0; - } - - @Override - public int getEfficiency() { - return this.mEfficiency = 100; - } - - @Override - public ITexture[] getFront(byte aColor) { - return new ITexture[] { super.getFront(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP), - new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_MASSFAB) }; - } - - @Override - public ITexture[] getBack(byte aColor) { - return new ITexture[] { super.getBack(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP) }; - } - - @Override - public ITexture[] getBottom(byte aColor) { - return new ITexture[] { super.getBottom(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP) }; - } - - @Override - public ITexture[] getTop(byte aColor) { - return new ITexture[] { super.getTop(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP), - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE) }; - } - - @Override - public ITexture[] getSides(byte aColor) { - return new ITexture[] { gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS[this.mTier][(0)], - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE), - gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[getTier()] }; - } - - @Override - public ITexture[] getFrontActive(byte aColor) { - return new ITexture[] { super.getFrontActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE), - new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_MASSFAB_ACTIVE) }; - } - - @Override - public ITexture[] getBackActive(byte aColor) { - return new ITexture[] { super.getBackActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE) }; - } - - @Override - public ITexture[] getBottomActive(byte aColor) { - return new ITexture[] { super.getBottomActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE) }; - } - - @Override - public ITexture[] getTopActive(byte aColor) { - return new ITexture[] { super.getTopActive(aColor)[0], - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE), - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE_ACTIVE) }; - } - - @Override - public ITexture[] getSidesActive(byte aColor) { - return new ITexture[] { gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS[this.mTier][(0)], - new GT_RenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE), - gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[getTier()] }; - } - - @Override - public int getPollution() { - return 0; - } - - @Override - public int getFuelValue(ItemStack aStack) { - if ((GT_Utility.isStackInvalid(aStack)) || (getRecipeMap() == null)) return 0; - GT_Recipe tFuel = getRecipeMap() - .findRecipe(getBaseMetaTileEntity(), false, 9223372036854775807L, null, new ItemStack[] { aStack }); - if (tFuel != null) { - this.mCurrentRecipe = tFuel; - int voltage = tFuel.mEUt; - this.mVoltage = voltage; - // this.mDaysRemaining = tFuel.mSpecialValue*365; - - // Do some voodoo. - byte mTier2; - // mTier2 = ReflectionUtils.getField(this.getClass(), "mTier"); - try { - if (ItemStack.areItemStacksEqual(tFuel.mInputs[0], GregtechItemList.Pellet_RTG_AM241.get(1))) { - mTier2 = 1; - } else if (ItemStack.areItemStacksEqual(tFuel.mInputs[0], GregtechItemList.Pellet_RTG_PO210.get(1))) { - mTier2 = 3; - } else if (ItemStack.areItemStacksEqual(tFuel.mInputs[0], GregtechItemList.Pellet_RTG_PU238.get(1))) { - mTier2 = 2; - } else if (ItemStack.areItemStacksEqual(tFuel.mInputs[0], GregtechItemList.Pellet_RTG_SR90.get(1))) { - mTier2 = 1; - } else { - mTier2 = 0; - } - ReflectionUtils.setByte(this, "mTier", mTier2); - this.mNewTier = mTier2; - } catch (Exception e) { - Logger.WARNING("Failed setting mTier."); - e.printStackTrace(); - } - - this.mTicksToBurnFor = getTotalEUGenerated(convertDaysToTicks(tFuel.mSpecialValue), voltage); - if (mTicksToBurnFor >= Integer.MAX_VALUE) { - mTicksToBurnFor = Integer.MAX_VALUE; - Logger.WARNING("Fuel went over Int limit, setting to MAX_VALUE."); - } - this.mDaysRemaining = MathUtils.roundToClosestInt(mTicksToBurnFor / 20 / 60 / 3); - Logger.WARNING("step | " + (int) (mTicksToBurnFor * getEfficiency() / 100L)); - return (int) (mTicksToBurnFor * getEfficiency() / 100L); - } - Logger.WARNING("Not sure"); - return 0; - } - - @Override - public long maxEUOutput() { - return ((getBaseMetaTileEntity().isAllowedToWork()) ? this.mVoltage : 0L); - } - - @Override - public long getOutputTier() { - if (this.mCurrentRecipe != null) { - return this.mVoltage = this.mCurrentRecipe.mEUt; - } - return 0; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String[] getInfoData() { - return new String[] { "RTG - Running at tier " + this.mTier, "Active: " + this.getBaseMetaTileEntity() - .isActive(), "Current Output: " + GT_Utility.formatNumbers(mVoltage) + " EU/t", - "Days of Fuel remaining: " + GT_Utility.formatNumbers(mTicksToBurnFor / 20 / 60 / 20), - "Hours of Fuel remaining: " + GT_Utility.formatNumbers(mTicksToBurnFor / 20 / 60 / 60), - "Ticks of " + this.mVoltage + "v remaining: " + mTicksToBurnFor, - this.mCurrentRecipe.mInputs[0].getDisplayName() + " x1" }; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerBase.java new file mode 100644 index 0000000000..b3a367bcaf --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerBase.java @@ -0,0 +1,332 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.generators; + +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntityFurnace; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidTankInfo; + +import org.apache.commons.lang3.ArrayUtils; +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.gui.modularui.GUITextureSet; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.common.tileentities.boilers.MTEBoiler; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.gui.GTPPUITextures; + +public class MTEBoilerBase extends MTEBoiler { + + private final int steamPerSecond; + private final int tier; + + public MTEBoilerBase(int aID, String aNameRegional, int tier) { + super( + aID, + "electricboiler." + tier + ".tier.single", + aNameRegional, + "Produces " + (GTPPCore.ConfigSwitches.boilerSteamPerSecond * tier) + "L of Steam per second"); + this.steamPerSecond = (GTPPCore.ConfigSwitches.boilerSteamPerSecond * tier); + this.tier = tier; + } + + public MTEBoilerBase(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + this.steamPerSecond = (GTPPCore.ConfigSwitches.boilerSteamPerSecond * aTier); + this.tier = aTier; + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll( + this.mDescriptionArray, + "Produces " + getPollution() + " pollution/sec", + "Consumes fuel only when temperature is less than 100C", + "Fuel with burn time greater than 500 is more efficient.", + "Doesn't explode if there's no water", + GTPPCore.GT_Tooltip.get()); + } + + public ITexture getOverlayIcon() { + return new GTRenderedTexture(Textures.BlockIcons.BOILER_FRONT); + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFrontActive(i); + rTextures[6][i + 1] = this.getBackActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + protected GTRenderedTexture getCasingTexture() { + if (this.tier == 1) { + return new GTRenderedTexture(Textures.BlockIcons.MACHINE_LV_SIDE); + } else if (this.tier == 2) { + return new GTRenderedTexture(Textures.BlockIcons.MACHINE_MV_SIDE); + } else { + return new GTRenderedTexture(Textures.BlockIcons.MACHINE_HV_SIDE); + } + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.tier][aColor + 1], this.getCasingTexture() }; + } + + public ITexture[] getBack(final byte aColor) { + return this.getSides(aColor); + } + + public ITexture[] getBottom(final byte aColor) { + return this.getSides(aColor); + } + + public ITexture[] getTop(final byte aColor) { + return this.getSides(aColor); + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.tier][aColor + 1], this.getCasingTexture() }; + } + + public ITexture[] getFrontActive(final byte aColor) { + return this.getFront(aColor); + } + + public ITexture[] getBackActive(final byte aColor) { + return this.getSides(aColor); + } + + public ITexture[] getBottomActive(final byte aColor) { + return this.getBottom(aColor); + } + + public ITexture[] getTopActive(final byte aColor) { + return this.getTop(aColor); + } + + public ITexture[] getSidesActive(final byte aColor) { + return this.getSides(aColor); + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return side != this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public boolean isFacingValid(final ForgeDirection side) { + return side.offsetY == 0; + } + + // Please find out what I do. + // I do stuff within the GUI. + // this.mTemperature = Math.min(54, Math.max(0, this.mTemperature * 54 / (((GT_MetaTileEntity_Boiler) + // this.mTileEntity.getMetaTileEntity()).maxProgresstime() - 10))); + @Override + public int maxProgresstime() { + return 1000 + (250 * tier); + } + + @Override + public boolean isElectric() { + return false; + } + + @Override + public int getCapacity() { + return (16000 + (16000 * tier)); + } + + // This type of machine can have different water and steam capacities. + @Override + public int getSteamCapacity() { + return 2 * getCapacity(); + } + + @Override + protected int getProductionPerSecond() { + return steamPerSecond; + } + + @Override + protected int getMaxTemperature() { + return maxProgresstime(); + } + + @Override + protected int getEnergyConsumption() { + return 2; + } + + @Override + protected int getCooldownInterval() { + return 40; + } + + @Override + protected int getHeatUpRate() { + return 10; + } + + @Override + protected void updateFuel(IGregTechTileEntity tile, long ticks) { + ItemStack fuelStack = this.mInventory[2]; + if (fuelStack == null) return; + + int burnTime = getBurnTime(fuelStack); + if (burnTime > 0 && this.mTemperature <= 101) { + consumeFuel(tile, fuelStack, burnTime); + } + } + + @Override + protected boolean isItemValidFuel(@NotNull ItemStack stack) { + return getBurnTime(stack) > 0; + } + + @Override + // Since this type of machine can have different water and steam capacities, we need to override getTankInfo() to + // support returning those different capacities. + public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { + return new FluidTankInfo[] { new FluidTankInfo(this.mFluid, getCapacity()), + new FluidTankInfo(this.mSteam, getSteamCapacity()) }; + } + + @Override + protected boolean isAutomatable() { + return true; + } + + @Override + protected int getPollution() { + return (int) (GTPPCore.ConfigSwitches.basePollutionPerSecondBoiler + * GTPPCore.ConfigSwitches.pollutionReleasedByTierBoiler[this.tier]); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBoilerBase(this.mName, tier, this.mDescriptionArray, this.mTextures); + } + + @Override + protected void onDangerousWaterLack(IGregTechTileEntity tile, long ticks) { + // Smart boilers don't explode! + } + + /** + * Returns burn time if the stack is a valid fuel, otherwise return 0. + */ + private static int getBurnTime(ItemStack stack) { + int burnTime = GameRegistry.getFuelValue(stack); + if (burnTime <= 0) { + burnTime = TileEntityFurnace.getItemBurnTime(stack); + } + + return burnTime; + } + + public void consumeFuel(IGregTechTileEntity tile, ItemStack fuel, int burnTime) { + this.mProcessingEnergy += burnTime / 10; + this.mTemperature += burnTime / 500; // will add bonus temperature points if the burn time is pretty high + + tile.decrStackSize(2, 1); + if (tile.getRandomNumber(3) == 0) { + if (fuel.getDisplayName() + .toLowerCase() + .contains("charcoal") + || fuel.getDisplayName() + .toLowerCase() + .contains("coke")) { + tile.addStackToSlot(3, GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Ash, 1L)); + } else { + tile.addStackToSlot(3, GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.DarkAsh, 1L)); + } + } + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCover) { + if (side != this.getBaseMetaTileEntity() + .getFrontFacing()) { + return true; + } + return super.allowCoverOnSide(side, aCover); + } + + @Override + public GUITextureSet getGUITextureSet() { + return GUITextureSet.DEFAULT; + } + + @Override + protected IDrawable[] getFuelSlotBackground() { + return new IDrawable[] { getGUITextureSet().getItemSlot(), GTPPUITextures.OVERLAY_SLOT_COAL }; + } + + @Override + protected IDrawable[] getAshSlotBackground() { + return new IDrawable[] { getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_DUST }; + } + + @Override + public int getTitleColor() { + return COLOR_TITLE.get(); + } + + @Override + protected IDrawable getOverlaySlotIn() { + return GTUITextures.OVERLAY_SLOT_IN; + } + + @Override + protected IDrawable getOverlaySlotOut() { + return GTUITextures.OVERLAY_SLOT_OUT; + } + + @Override + protected IDrawable getOverlaySlotCanister() { + return GTPPUITextures.OVERLAY_SLOT_CANISTER_DARK; + } + + @Override + protected UITexture getProgressbarEmpty() { + return GTPPUITextures.PROGRESSBAR_BOILER_EMPTY; + } + + @Override + protected UITexture getProgressbarFuel() { + return GTPPUITextures.PROGRESSBAR_FUEL; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerHV.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerHV.java new file mode 100644 index 0000000000..6bb0c658bd --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerHV.java @@ -0,0 +1,51 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.generators; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; + +public class MTEBoilerHV extends MTEBoilerBase { + + public MTEBoilerHV(int aID, String aNameRegional, int aBoilerTier) { + super(aID, aNameRegional, aBoilerTier); + } + + public MTEBoilerHV(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBoilerHV(this.mName, 3, this.mDescriptionArray, this.mTextures); + } + + @Override + protected GTRenderedTexture getCasingTexture() { + return new GTRenderedTexture(Textures.BlockIcons.MACHINE_HV_SIDE); + } + + @Override + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(Textures.BlockIcons.BOILER_FRONT) }; + } + + @Override + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(Textures.BlockIcons.MACHINE_HV_TOP) }; + } + + @Override + public ITexture[] getFrontActive(final byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(Textures.BlockIcons.BOILER_FRONT_ACTIVE) }; + } + + @Override + public ITexture[] getTopActive(final byte aColor) { + return getTop(aColor); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerLV.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerLV.java new file mode 100644 index 0000000000..0d8c03e448 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerLV.java @@ -0,0 +1,51 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.generators; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; + +public class MTEBoilerLV extends MTEBoilerBase { + + public MTEBoilerLV(int aID, String aNameRegional, int aBoilerTier) { + super(aID, aNameRegional, aBoilerTier); + } + + public MTEBoilerLV(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBoilerLV(this.mName, 1, this.mDescriptionArray, this.mTextures); + } + + @Override + protected GTRenderedTexture getCasingTexture() { + return new GTRenderedTexture(Textures.BlockIcons.MACHINE_LV_SIDE); + } + + @Override + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(Textures.BlockIcons.BOILER_FRONT) }; + } + + @Override + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(Textures.BlockIcons.MACHINE_LV_TOP) }; + } + + @Override + public ITexture[] getFrontActive(final byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(Textures.BlockIcons.BOILER_FRONT_ACTIVE) }; + } + + @Override + public ITexture[] getTopActive(final byte aColor) { + return getTop(aColor); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerMV.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerMV.java new file mode 100644 index 0000000000..32bda689c2 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEBoilerMV.java @@ -0,0 +1,51 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.generators; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; + +public class MTEBoilerMV extends MTEBoilerBase { + + public MTEBoilerMV(int aID, String aNameRegional, int aBoilerTier) { + super(aID, aNameRegional, aBoilerTier); + } + + public MTEBoilerMV(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBoilerMV(this.mName, 2, this.mDescriptionArray, this.mTextures); + } + + @Override + protected GTRenderedTexture getCasingTexture() { + return new GTRenderedTexture(Textures.BlockIcons.MACHINE_MV_SIDE); + } + + @Override + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(Textures.BlockIcons.BOILER_FRONT) }; + } + + @Override + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(Textures.BlockIcons.MACHINE_MV_TOP) }; + } + + @Override + public ITexture[] getFrontActive(final byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(Textures.BlockIcons.BOILER_FRONT_ACTIVE) }; + } + + @Override + public ITexture[] getTopActive(final byte aColor) { + return getTop(aColor); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEGeothermalGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEGeothermalGenerator.java new file mode 100644 index 0000000000..4fac228f4f --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTEGeothermalGenerator.java @@ -0,0 +1,166 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.generators; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicGenerator; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTModHandler; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEGeothermalGenerator extends MTEBasicGenerator { + + public int mEfficiency; + + public MTEGeothermalGenerator(final int aID, final String aName, final String aNameRegional, final int aTier) { + super(aID, aName, aNameRegional, aTier, "Requires Pahoehoe Lava or Normal Lava as Fuel", new ITexture[0]); + this.setEfficiency(); + } + + public MTEGeothermalGenerator(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + this.setEfficiency(); + } + + @Override + public String[] getDescription() { + String aPollution = "Causes " + this.getPollution() + " Pollution per second"; + return ArrayUtils.addAll( + this.mDescriptionArray, + "Generates power at " + this.getEfficiency() + "% Efficiency per tick", + aPollution, + GTPPCore.GT_Tooltip.get()); + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public int getCapacity() { + // return MathUtils.roundToClosestMultiple(32000*(this.mTier/2), 25000); + return 5000 * this.mTier; + } + + public void setEfficiency() { + this.mEfficiency = (100 - (this.mTier * 7)); + } + + @Override + public int getEfficiency() { + return this.mEfficiency; + } + + @Override + public int getFuelValue(final ItemStack aStack) { + int rValue = Math.max((GTModHandler.getFuelValue(aStack) * 6) / 5, super.getFuelValue(aStack)); + if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) { + rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3); + } + return rValue; + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEGeothermalGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE), + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; + } + + @Override + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BACK), + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Diesel_Vertical) }; + } + + @Override + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM) }; + } + + @Override + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER) }; + } + + @Override + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.BOILER_LAVA_FRONT) }; + } + + @Override + public ITexture[] getFrontActive(final byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE), + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; + } + + @Override + public ITexture[] getBackActive(final byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BACK_ACTIVE), + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Diesel_Vertical_Active) }; + } + + @Override + public ITexture[] getBottomActive(final byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM_ACTIVE) }; + } + + @Override + public ITexture[] getTopActive(final byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_ROCK_BREAKER_ACTIVE) }; + } + + @Override + public ITexture[] getSidesActive(final byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.BOILER_LAVA_FRONT_ACTIVE) }; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.hotFuels; + } + + @Override + public int getPollution() { + return (int) (GTPPCore.ConfigSwitches.basePollutionPerSecondGeothermalGenerator + * GTPPCore.ConfigSwitches.pollutionReleasedByTierGeothermalGenerator[mTier]); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTERTGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTERTGenerator.java new file mode 100644 index 0000000000..00a915b89c --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTERTGenerator.java @@ -0,0 +1,379 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.generators; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicGenerator; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; + +public class MTERTGenerator extends MTEBasicGenerator { + + public int mEfficiency; + private long mTicksToBurnFor; + private int mVoltage = 0; + private GTRecipe mCurrentRecipe; + private int mDaysRemaining = 0; + private int mDayTick = 0; + private byte mNewTier = 0; + + public int removeDayOfTime() { + if (this.mDaysRemaining > 0) { + return this.mDaysRemaining--; + } + return this.mDaysRemaining; + } + + // Generates fuel value based on MC days + public static int convertDaysToTicks(float days) { + int value = 0; + value = MathUtils.roundToClosestInt(20 * 86400 * days); + return value; + } + + public static long getTotalEUGenerated(int ticks, int voltage) { + return ticks * voltage; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setLong("mTicksToBurnFor", this.mTicksToBurnFor); + aNBT.setInteger("mVoltage", this.mVoltage); + aNBT.setInteger("mDaysRemaining", this.mDaysRemaining); + aNBT.setInteger("mDayTick", this.mDayTick); + aNBT.setByte("mNewTier", this.mNewTier); + + if (this.mCurrentRecipe != null) { + final NBTTagList list = new NBTTagList(); + final ItemStack stack = this.mCurrentRecipe.mInputs[0]; + if (stack != null) { + final NBTTagCompound data = new NBTTagCompound(); + stack.writeToNBT(data); + data.setInteger("mSlot", 0); + list.appendTag(data); + } + aNBT.setTag("mRecipeItem", list); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.mTicksToBurnFor = aNBT.getLong("mTicksToBurnFor"); + this.mVoltage = aNBT.getInteger("mVoltage"); + this.mDaysRemaining = aNBT.getInteger("mDaysRemaining"); + this.mDayTick = aNBT.getInteger("mDayTick"); + this.mNewTier = aNBT.getByte("mNewTier"); + + try { + ReflectionUtils.setByte(this, "mTier", this.mNewTier); + } catch (Exception e) { + if (this.getBaseMetaTileEntity() != null) { + IGregTechTileEntity thisTile = this.getBaseMetaTileEntity(); + if (thisTile.isAllowedToWork() || thisTile.isActive()) { + thisTile.setActive(false); + } + } + } + + final NBTTagList list = aNBT.getTagList("mRecipeItem", 10); + final NBTTagCompound data = list.getCompoundTagAt(0); + ItemStack lastUsedFuel = ItemStack.loadItemStackFromNBT(data); + if (lastUsedFuel != null) { + this.mCurrentRecipe = getRecipeMap().findRecipe( + getBaseMetaTileEntity(), + false, + 9223372036854775807L, + null, + new ItemStack[] { lastUsedFuel }); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (this.mDayTick < 24000) { + this.mDayTick++; + } else if (this.mDayTick >= 24000) { + this.mDayTick = 0; + this.mDaysRemaining = this.removeDayOfTime(); + } + } + + if ((aBaseMetaTileEntity.isServerSide()) && (aBaseMetaTileEntity.isAllowedToWork()) && (aTick % 10L == 0L)) { + long tProducedEU = 0L; + if (this.mFluid == null) { + if (aBaseMetaTileEntity.getUniversalEnergyStored() < maxEUOutput() + getMinimumStoredEU()) { + this.mInventory[getStackDisplaySlot()] = null; + } else { + if (this.mInventory[getStackDisplaySlot()] == null) + this.mInventory[getStackDisplaySlot()] = new ItemStack(Blocks.fire, 1); + this.mInventory[getStackDisplaySlot()].setStackDisplayName( + "Generating: " + + GTUtility.formatNumbers( + aBaseMetaTileEntity.getUniversalEnergyStored() - getMinimumStoredEU()) + + " EU"); + } + } else { + int tFuelValue = getFuelValue(this.mFluid); + int tConsumed = consumedFluidPerOperation(this.mFluid); + if ((tFuelValue > 0) && (tConsumed > 0) && (this.mFluid.amount > tConsumed)) { + long tFluidAmountToUse = Math.min( + this.mFluid.amount / tConsumed, + (maxEUStore() - aBaseMetaTileEntity.getUniversalEnergyStored()) / tFuelValue); + if ((tFluidAmountToUse > 0L) + && (aBaseMetaTileEntity.increaseStoredEnergyUnits(tFluidAmountToUse * tFuelValue, true))) { + tProducedEU = tFluidAmountToUse * tFuelValue; + FluidStack tmp260_257 = this.mFluid; + tmp260_257.amount = (int) (tmp260_257.amount - (tFluidAmountToUse * tConsumed)); + } + } + } + if ((this.mInventory[getInputSlot()] != null) + && (aBaseMetaTileEntity.getUniversalEnergyStored() < maxEUOutput() * 20L + getMinimumStoredEU()) + && (GTUtility.getFluidForFilledItem(this.mInventory[getInputSlot()], true) == null)) { + int tFuelValue = getFuelValue(this.mInventory[getInputSlot()]); + if (tFuelValue > 0) { + ItemStack tEmptyContainer = getEmptyContainer(this.mInventory[getInputSlot()]); + if (aBaseMetaTileEntity.addStackToSlot(getOutputSlot(), tEmptyContainer)) { + aBaseMetaTileEntity.increaseStoredEnergyUnits(tFuelValue, true); + aBaseMetaTileEntity.decrStackSize(getInputSlot(), 1); + tProducedEU = tFuelValue; + } + } + } + if ((tProducedEU > 0L) && (getPollution() > 0)) { + PollutionUtils + .addPollution(aBaseMetaTileEntity, (int) (tProducedEU * getPollution() / 500 * this.mTier + 1L)); + } + } + + if (aBaseMetaTileEntity.isServerSide()) aBaseMetaTileEntity.setActive( + (aBaseMetaTileEntity.isAllowedToWork()) + && (aBaseMetaTileEntity.getUniversalEnergyStored() >= maxEUOutput() + getMinimumStoredEU())); + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll( + this.mDescriptionArray, + "Fuel is measured in minecraft days (Check with Scanner)", + "RTG changes output voltage depending on fuel", + "Generates power at " + GTUtility.formatNumbers(this.getEfficiency()) + "% Efficiency per tick", + "Output Voltage: " + GTUtility.formatNumbers(this.getOutputTier()) + " EU/t", + GTPPCore.GT_Tooltip.get()); + } + + public MTERTGenerator(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, "Requires RTG Pellets", new ITexture[0]); + } + + private byte getTier() { + int voltage = this.mVoltage; + if (voltage >= 512) { + return 4; + } else if (voltage >= 128) { + return 3; + } else if (voltage >= 32) { + return 2; + } else if (voltage >= 8) { + return 1; + } + return 0; + } + + public MTERTGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return ((side.offsetY == 0) && (side != getBaseMetaTileEntity().getFrontFacing()) + && (side != getBaseMetaTileEntity().getBackFacing())); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTERTGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.rtgFuels; + } + + @Override + public int getCapacity() { + return 0; + } + + @Override + public int getEfficiency() { + return this.mEfficiency = 100; + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_MASSFAB) }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP) }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP) }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP), + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE) }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS[this.mTier][(0)], + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE), + gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[getTier()] }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_MASSFAB_ACTIVE) }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE) }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE) }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE), + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_FLUID_SIDE_ACTIVE) }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS[this.mTier][(0)], + new GTRenderedTexture(Textures.BlockIcons.NAQUADAH_REACTOR_SOLID_TOP_ACTIVE), + gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[getTier()] }; + } + + @Override + public int getPollution() { + return 0; + } + + @Override + public int getFuelValue(ItemStack aStack) { + if ((GTUtility.isStackInvalid(aStack)) || (getRecipeMap() == null)) return 0; + GTRecipe tFuel = getRecipeMap() + .findRecipe(getBaseMetaTileEntity(), false, 9223372036854775807L, null, new ItemStack[] { aStack }); + if (tFuel != null) { + this.mCurrentRecipe = tFuel; + int voltage = tFuel.mEUt; + this.mVoltage = voltage; + // this.mDaysRemaining = tFuel.mSpecialValue*365; + + // Do some voodoo. + byte mTier2; + // mTier2 = ReflectionUtils.getField(this.getClass(), "mTier"); + try { + if (ItemStack.areItemStacksEqual(tFuel.mInputs[0], GregtechItemList.Pellet_RTG_AM241.get(1))) { + mTier2 = 1; + } else if (ItemStack.areItemStacksEqual(tFuel.mInputs[0], GregtechItemList.Pellet_RTG_PO210.get(1))) { + mTier2 = 3; + } else if (ItemStack.areItemStacksEqual(tFuel.mInputs[0], GregtechItemList.Pellet_RTG_PU238.get(1))) { + mTier2 = 2; + } else if (ItemStack.areItemStacksEqual(tFuel.mInputs[0], GregtechItemList.Pellet_RTG_SR90.get(1))) { + mTier2 = 1; + } else { + mTier2 = 0; + } + ReflectionUtils.setByte(this, "mTier", mTier2); + this.mNewTier = mTier2; + } catch (Exception e) { + Logger.WARNING("Failed setting mTier."); + e.printStackTrace(); + } + + this.mTicksToBurnFor = getTotalEUGenerated(convertDaysToTicks(tFuel.mSpecialValue), voltage); + if (mTicksToBurnFor >= Integer.MAX_VALUE) { + mTicksToBurnFor = Integer.MAX_VALUE; + Logger.WARNING("Fuel went over Int limit, setting to MAX_VALUE."); + } + this.mDaysRemaining = MathUtils.roundToClosestInt(mTicksToBurnFor / 20 / 60 / 3); + Logger.WARNING("step | " + (int) (mTicksToBurnFor * getEfficiency() / 100L)); + return (int) (mTicksToBurnFor * getEfficiency() / 100L); + } + Logger.WARNING("Not sure"); + return 0; + } + + @Override + public long maxEUOutput() { + return ((getBaseMetaTileEntity().isAllowedToWork()) ? this.mVoltage : 0L); + } + + @Override + public long getOutputTier() { + if (this.mCurrentRecipe != null) { + return this.mVoltage = this.mCurrentRecipe.mEUt; + } + return 0; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { "RTG - Running at tier " + this.mTier, "Active: " + this.getBaseMetaTileEntity() + .isActive(), "Current Output: " + GTUtility.formatNumbers(mVoltage) + " EU/t", + "Days of Fuel remaining: " + GTUtility.formatNumbers(mTicksToBurnFor / 20 / 60 / 20), + "Hours of Fuel remaining: " + GTUtility.formatNumbers(mTicksToBurnFor / 20 / 60 / 60), + "Ticks of " + this.mVoltage + "v remaining: " + mTicksToBurnFor, + this.mCurrentRecipe.mInputs[0].getDisplayName() + " x1" }; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTERocketFuelGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTERocketFuelGenerator.java new file mode 100644 index 0000000000..48c3a63007 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTERocketFuelGenerator.java @@ -0,0 +1,140 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.generators; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTModHandler; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.generators.MTERocketFuelGeneratorBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTERocketFuelGenerator extends MTERocketFuelGeneratorBase { + + public int mEfficiency; + + public MTERocketFuelGenerator(final int aID, final String aName, final String aNameRegional, final int aTier) { + super(aID, aName, aNameRegional, aTier, "Requires GT++ Rocket Fuels", new ITexture[0]); + } + + public MTERocketFuelGenerator(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + this.mEfficiency = getEfficiency(); + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTERocketFuelGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.rocketFuels; + } + + @Override + public int getCapacity() { + return 32000; + } + + @Override + public int getEfficiency() { + return 80 - (10 * (this.mTier - 4)); + } + + @Override + public int getFuelValue(final ItemStack aStack) { + int rValue = Math.max((GTModHandler.getFuelValue(aStack) * 6) / 5, super.getFuelValue(aStack)); + if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) { + rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3); + } + return rValue; + } + + private GTRenderedTexture getCasingTexture() { + if (this.mTier <= 4) { + return new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top); + } else if (this.mTier == 5) { + + return new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Advanced); + } else { + + return new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Ultra); + } + // return new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top); + } + + @Override + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], this.getCasingTexture(), + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; + } + + @Override + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Vent) }; + } + + @Override + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + @Override + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Redstone_Off) }; + } + + @Override + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Diesel_Horizontal) }; + } + + @Override + public ITexture[] getFrontActive(final byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], this.getCasingTexture(), + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; + } + + @Override + public ITexture[] getBackActive(final byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Vent_Fast) }; + } + + @Override + public ITexture[] getBottomActive(final byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + @Override + public ITexture[] getTopActive(final byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Redstone_On) }; + } + + @Override + public ITexture[] getSidesActive(final byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], this.getCasingTexture(), + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Diesel_Horizontal_Active) }; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTESemiFluidGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTESemiFluidGenerator.java new file mode 100644 index 0000000000..4c893eb92d --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/generators/MTESemiFluidGenerator.java @@ -0,0 +1,161 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.generators; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicGenerator; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.lib.GTPPCore; + +public class MTESemiFluidGenerator extends MTEBasicGenerator { + + public int mEfficiency; + + public MTESemiFluidGenerator(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, "Requires semi-fluid Fuel", new ITexture[0]); + } + + public MTESemiFluidGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public int getPollution() { + return (int) (GTPPCore.ConfigSwitches.basePollutionPerSecondSemiFluidGenerator + * GTPPCore.ConfigSwitches.pollutionReleasedByTierSemiFluidGenerator[this.mTier]); + } + + @Override + public int getCapacity() { + return 16000; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESemiFluidGenerator(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public RecipeMap getRecipeMap() { + // Logger.WARNING("Fuel Count: "+Gregtech_Recipe_Map.sSemiFluidLiquidFuels.mRecipeList.size()); + return GTPPRecipeMaps.semiFluidFuels; + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll( + this.mDescriptionArray, + "Produces " + (this.getPollution()) + " pollution/sec", + "Fuel Efficiency: " + this.getEfficiency() + "%", + GTPPCore.GT_Tooltip.get()); + } + + @Override + public int getEfficiency() { + return this.mEfficiency; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return (side == getBaseMetaTileEntity().getFrontFacing()); + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCover) { + if (side != this.getBaseMetaTileEntity() + .getFrontFacing()) { + return true; + } + return super.allowCoverOnSide(side, aCover); + } + + @Override + public int getFuelValue(ItemStack aStack) { + if ((GTUtility.isStackInvalid(aStack)) || (getRecipeMap() == null)) { + Logger.WARNING("Bad Fuel?"); + return 0; + } + int rValue = Math.max(GTModHandler.getFuelValue(aStack) * 6 / 5, super.getFuelValue(aStack)); + if (ItemList.Fuel_Can_Plastic_Filled.isStackEqual(aStack, false, true)) { + rValue = Math.max(rValue, GameRegistry.getFuelValue(aStack) * 3); + } + Logger.WARNING("Good Fuel: " + rValue); + return rValue; + } + + @Override + public ITexture[] getFront(byte aColor) { + return new ITexture[] { super.getFront(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_FRONT), + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBack(byte aColor) { + return new ITexture[] { super.getBack(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_TOP) }; + } + + @Override + public ITexture[] getBottom(byte aColor) { + return new ITexture[] { super.getBottom(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM) }; + } + + @Override + public ITexture[] getTop(byte aColor) { + return new ITexture[] { super.getTop(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE) }; + } + + @Override + public ITexture[] getSides(byte aColor) { + return new ITexture[] { super.getSides(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_TOP) }; + } + + @Override + public ITexture[] getFrontActive(byte aColor) { + return new ITexture[] { super.getFrontActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_FRONT_ACTIVE), + Textures.BlockIcons.OVERLAYS_ENERGY_OUT[this.mTier] }; + } + + @Override + public ITexture[] getBackActive(byte aColor) { + return new ITexture[] { super.getBackActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_TOP_ACTIVE) }; + } + + @Override + public ITexture[] getBottomActive(byte aColor) { + return new ITexture[] { super.getBottomActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_BOTTOM_ACTIVE) }; + } + + @Override + public ITexture[] getTopActive(byte aColor) { + return new ITexture[] { super.getTopActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_SIDE_ACTIVE) }; + } + + @Override + public ITexture[] getSidesActive(byte aColor) { + return new ITexture[] { super.getSidesActive(aColor)[0], + new GTRenderedTexture(Textures.BlockIcons.DIESEL_GENERATOR_TOP_ACTIVE) }; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_CropHarvestor.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_CropHarvestor.java deleted file mode 100644 index b93a3cbfd0..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_CropHarvestor.java +++ /dev/null @@ -1,706 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; - -import java.util.Collections; -import java.util.HashSet; -import java.util.Map; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import com.gtnewhorizon.gtnhlib.util.map.ItemStackMap; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.ProgressBar; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.api.gui.GTPP_UITextures; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import ic2.api.crops.CropCard; -import ic2.api.crops.ICropTile; -import ic2.core.item.DamageHandler; - -public class GT_MetaTileEntity_CropHarvestor extends GT_MetaTileEntity_BasicTank { - - private static final int SLOT_WEEDEX_1 = 1; - private static final int SLOT_WEEDEX_2 = 2; - private static final int SLOT_FERT_1 = 3; - private static final int SLOT_FERT_4 = 6; - private static final int SLOT_OUTPUT_START = 7; - - public boolean mModeAlternative = false; - public boolean mHarvestEnabled = true; - - public GT_MetaTileEntity_CropHarvestor(final int aID, final int aTier, final String aDescription) { - super( - aID, - "basicmachine.cropharvester.0" + aTier, - "Crop Manager (" + GT_Values.VN[aTier] + ")", - aTier, - 21, - aDescription); - } - - public GT_MetaTileEntity_CropHarvestor(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, 21, aDescription, aTextures); - } - - @Override - public boolean isTransformerUpgradable() { - return true; - } - - @Override - public boolean isOverclockerUpgradable() { - return true; - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public long maxAmperesIn() { - return 8; - } - - @Override - public long getMinimumStoredEU() { - return GT_Values.V[this.mTier]; - } - - @Override - public long maxEUStore() { - return GT_Values.V[this.mTier] * (this.mTier * GT_Values.V[this.mTier]); - } - - @Override - public long maxEUInput() { - return GT_Values.V[this.mTier]; - } - - @Override - public int getCapacity() { - return 32000 * this.mTier; - } - - @Override - public int getTankPressure() { - return -100; - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_CropHarvestor(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public int getSizeInventory() { - return 21; - } - - private static int getRange(int aTier) { - return switch (aTier) { - case 1 -> 1; - case 2 -> 5; - case 3 -> 9; - case 4 -> 13; - case 5 -> 17; - case 6 -> 21; - case 7 -> 25; - case 8 -> 29; - case 9 -> 33; - default -> 0; - }; - } - - private HashSet mCropCache = new HashSet<>(); - private boolean mInvalidCache = false; - - public boolean doesInventoryHaveSpace() { - for (int i = SLOT_OUTPUT_START; i < this.getSizeInventory(); i++) { - if (this.mInventory[i] == null || this.mInventory[i].stackSize < 64) { - return true; - } - } - return false; - } - - public long powerUsage() { - return this.maxEUInput() / 8; - } - - public long powerUsageSecondary() { - return this.maxEUInput() / 32; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (!getBaseMetaTileEntity().isServerSide() || !getBaseMetaTileEntity().isAllowedToWork() - || (!getBaseMetaTileEntity().hasWorkJustBeenEnabled() && aTick % 100 != 0)) return; - - if (this.getBaseMetaTileEntity() - .getUniversalEnergyStored() < getMinimumStoredEU()) return; - - int aTileX = this.getBaseMetaTileEntity() - .getXCoord(); - int aTileY = this.getBaseMetaTileEntity() - .getXCoord(); - int aTileZ = this.getBaseMetaTileEntity() - .getXCoord(); - - int aRadius = 10 + getRange(this.mTier); - int aSide = (aRadius - 1) / 2; - Map aAllDrops = new ItemStackMap<>(true); - - if (this.mCropCache.isEmpty() || aTick % 1200 == 0 || this.mInvalidCache) { - if (!this.mCropCache.isEmpty()) { - this.mCropCache.clear(); - } - // Logger.INFO("Looking for crops."); - for (int y = -2; y <= 2; y++) { - for (int x = (-aSide); x <= aSide; x++) { - for (int z = (-aSide); z <= aSide; z++) { - TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityOffset(x, y, z); - if (tTileEntity != null && tTileEntity instanceof ICropTile tCrop) { - this.mCropCache.add(tCrop); - } - } - } - } - } - - // Process Cache - if (!doesInventoryHaveSpace()) return; - - for (ICropTile tCrop : this.mCropCache) { - if (tCrop == null) { - this.mInvalidCache = true; - break; - } - CropCard aCrop = tCrop.getCrop(); - if (aCrop == null) continue; - - if (this.mModeAlternative) processSecondaryFunctions(tCrop); - if (!this.mHarvestEnabled) continue; - - if (aCrop.canBeHarvested(tCrop) && tCrop.getSize() == aCrop.getOptimalHavestSize(tCrop)) { - if (!getBaseMetaTileEntity().decreaseStoredEnergyUnits(powerUsage(), true)) continue; - ItemStack[] aHarvest = tCrop.harvest_automated(true); - if (aHarvest == null) continue; - - for (ItemStack aStack : aHarvest) { - if (!ItemUtils.checkForInvalidItems(aStack)) continue; - if (this.mTier * 5 > MathUtils.randInt(1, 100)) { - aStack.stackSize += Math.floor(tCrop.getGain() / 10); - Logger.INFO("Bonus output given for " + aCrop.displayName()); - } - Logger.INFO("Harvested " + aCrop.displayName()); - aAllDrops.merge(aStack, aStack.stackSize, Integer::sum); - } - } - } - - if (aAllDrops.isEmpty()) return; - - Logger.INFO("Handling " + aAllDrops.size() + " Harvests"); - - for (var dropEntry : aAllDrops.entrySet()) { - ItemStack dropItem = dropEntry.getKey(); - int dropAmount = dropEntry.getValue(); - - // how this can happen, idk - if (dropItem == null) continue; - - for (int i = SLOT_OUTPUT_START; i < this.getSizeInventory() && dropAmount > 0; i++) { - ItemStack invStack = mInventory[i]; - - // If the slot is empty, create a new stack for the drop item, else check if it is the same as the drop - // and merge if possible - if (invStack == null || GT_Utility.isStackInvalid(invStack) || invStack.stackSize == 0) { - int stackSize = Math.min(dropAmount, dropItem.getMaxStackSize()); - getBaseMetaTileEntity().setInventorySlotContents(i, GT_Utility.copyAmount(stackSize, dropItem)); - dropAmount -= stackSize; - } else if (GT_Utility.areStacksEqual(invStack, dropItem)) { - int space = Math.min(invStack.getMaxStackSize(), getInventoryStackLimit()) - invStack.stackSize; - if (dropAmount <= space) { - // if the drop amount fits - getBaseMetaTileEntity().addStackToSlot(i, invStack, dropAmount); - dropAmount = 0; - } else { - // fill the slot - getBaseMetaTileEntity().addStackToSlot(i, invStack, space); - dropAmount -= space; - } - } - } - } - } - - public boolean hasFertilizer() { - for (int i = SLOT_FERT_1; i <= SLOT_FERT_4; i++) { - if (this.mInventory[i] != null) { - return true; - } - } - return false; - } - - public boolean consumeFertilizer(boolean aSimulate) { - if (hasFertilizer()) { - for (int i = SLOT_FERT_1; i <= SLOT_FERT_4; i++) { - if (this.mInventory[i] != null) { - consume(i, 1, aSimulate); - return true; - } - } - } - return false; - } - - public boolean hasWeedEX() { - for (int i = SLOT_WEEDEX_1; i <= SLOT_WEEDEX_2; i++) { - if (this.mInventory[i] != null) { - return true; - } - } - return false; - } - - public boolean consumeWeedEX(boolean aSimulate) { - if (hasWeedEX()) { - for (int i = SLOT_WEEDEX_1; i <= SLOT_WEEDEX_2; i++) { - if (this.mInventory[i] != null) { - damage(i, 1, aSimulate); - return true; - } - } - } - return false; - } - - public void processSecondaryFunctions(ICropTile aCrop) { - if (!this.mModeAlternative) { - return; - } - if (hasFertilizer() && consumeFertilizer(true) - && this.getBaseMetaTileEntity() - .getUniversalEnergyStored() >= getMinimumStoredEU() - && getBaseMetaTileEntity().decreaseStoredEnergyUnits(powerUsageSecondary(), true) - && applyFertilizer(aCrop)) { - if (consumeFertilizer(false)) { - // Logger.INFO("Consumed Fert."); - } - } - if (this.getFluidAmount() > 0 && this.getBaseMetaTileEntity() - .getUniversalEnergyStored() >= getMinimumStoredEU() - && getBaseMetaTileEntity().decreaseStoredEnergyUnits(powerUsageSecondary(), true) - && applyHydration(aCrop)) { - // Logger.INFO("Consumed Water."); - } - if (hasWeedEX() && consumeWeedEX(true) - && this.getBaseMetaTileEntity() - .getUniversalEnergyStored() >= getMinimumStoredEU() - && getBaseMetaTileEntity().decreaseStoredEnergyUnits(powerUsageSecondary(), true) - && applyWeedEx(aCrop)) { - if (consumeWeedEX(false)) { - // Logger.INFO("Consumed Weed-EX."); - } - } - } - - public boolean applyWeedEx(ICropTile aCrop) { - if (aCrop.getWeedExStorage() < 150) { - aCrop.setWeedExStorage(aCrop.getWeedExStorage() + 50); - boolean triggerDecline; - triggerDecline = aCrop.getWorld().rand.nextInt(3) == 0; - if (aCrop.getCrop() != null && aCrop.getCrop() - .isWeed(aCrop) && aCrop.getWeedExStorage() >= 75 && triggerDecline) { - switch (aCrop.getWorld().rand.nextInt(5)) { - case 0: - if (aCrop.getGrowth() > 0) { - aCrop.setGrowth((byte) (aCrop.getGrowth() - 1)); - } - case 1: - if (aCrop.getGain() > 0) { - aCrop.setGain((byte) (aCrop.getGain() - 1)); - } - default: - if (aCrop.getResistance() > 0) { - aCrop.setResistance((byte) (aCrop.getResistance() - 1)); - } - } - } - return true; - } else { - return false; - } - } - - public boolean applyFertilizer(ICropTile aCrop) { - if (aCrop.getNutrientStorage() >= 100) { - return false; - } else { - // Logger.INFO("Current Nutrient: "+aCrop.getNutrientStorage()+" for "+aCrop.getCrop().displayName()); - aCrop.setNutrientStorage(aCrop.getNutrientStorage() + 100); - return true; - } - } - - public boolean applyHydration(ICropTile aCrop) { - if (aCrop.getHydrationStorage() >= 200 || this.getFluidAmount() == 0) { - // Logger.INFO("Hydration Max"); - return false; - } else { - int apply = 200 - aCrop.getHydrationStorage(); - if (this.getFluidAmount() >= 0) { - int drain = 0; - if (this.getFluidAmount() >= apply) { - drain = apply; - } else { - drain = this.getFluidAmount(); - } - this.mFluid.amount -= drain; - if (this.mFluid.amount <= 0) { - this.mFluid = null; - } - // Logger.INFO("Did Hydrate"); - aCrop.setHydrationStorage(aCrop.getHydrationStorage() + drain); - return true; - } else { - // Logger.INFO("No water?"); - return false; - } - } - } - - public boolean consume(int aSlot, int amount, boolean simulate) { - ItemStack stack = this.mInventory[aSlot]; - if (stack != null && stack.stackSize >= amount) { - int currentAmount = Math.min(amount, stack.stackSize); - amount -= currentAmount; - if (!simulate) { - if (stack.stackSize == currentAmount) { - this.mInventory[aSlot] = null; - } else { - stack.stackSize -= currentAmount; - } - } else { - return amount >= 0; - } - return true; - } - return false; - } - - public ItemStack damage(int aSlot, int amount, boolean simulate) { - ItemStack ret = null; - int damageApplied = 0; - ItemStack stack = this.mInventory[aSlot]; - Item item = stack.getItem(); - if (stack != null && item.isDamageable() - && (ret == null || stack.getItem() == ret.getItem() && ItemStack.areItemStackTagsEqual(stack, ret))) { - if (simulate) { - stack = stack.copy(); - } - int maxDamage = DamageHandler.getMaxDamage(stack); - while (amount > 0 && stack.stackSize > 0) { - int currentAmount = Math.min(amount, maxDamage - DamageHandler.getDamage(stack)); - DamageHandler.damage(stack, currentAmount, null); - damageApplied += currentAmount; - amount -= currentAmount; - if (DamageHandler.getDamage(stack) >= maxDamage) { - --stack.stackSize; - DamageHandler.setDamage(stack, 0); - } - - if (ret == null) { - ret = stack.copy(); - } - } - if (stack.stackSize == 0 && !simulate) { - this.mInventory[aSlot] = null; - } - } - - if (ret != null) { - int i = DamageHandler.getMaxDamage(ret); - ret.stackSize = damageApplied / i; - DamageHandler.setDamage(ret, damageApplied % i); - } - return ret; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return aStack != null && aIndex >= SLOT_OUTPUT_START && aIndex < this.getSizeInventory(); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - if (aStack != null) { - if (aStack.getItem() - .getUnlocalizedName() - .equals("ic2.itemFertilizer")) { - return aIndex >= SLOT_FERT_1 && aIndex <= SLOT_FERT_4; - } else if (aStack.getItem() - .getUnlocalizedName() - .equals("ic2.itemWeedEx")) { - return aIndex >= SLOT_WEEDEX_1 && aIndex <= SLOT_WEEDEX_2; - } - } - return false; - } - - @Override - public String[] getDescription() { - int aRadius = 10 + getRange(this.mTier); - int aSide = (aRadius - 1) / 2; - return ArrayUtils.addAll( - this.mDescriptionArray, - "Secondary mode can Hydrate/Fertilize/Weed-EX", - "Consumes " + powerUsage() + "eu per harvest", - "Consumes " + powerUsageSecondary() + "eu per secondary operation", - "Can harvest 2 block levels above and below itself", - "Radius: " + aSide + " blocks each side (" + aRadius + "x3x" + aRadius + ")", - "Has " + (this.mTier * 5) + "% chance for extra drops", - "Holds " + this.getCapacity() + "L of Water", - CORE.GT_Tooltip.get()); - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { - return true; - } - - /* - * @Override public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { if (aSide == - * aFacing) return 118+(aRedstone?8:0); if (GT_Utility.getOppositeSide(aSide) == aFacing) return - * 113+(aRedstone?8:0); int tIndex = 128+(aRedstone?8:0); switch (aFacing) { case 0: return tIndex+64; case 1: - * return tIndex+32; case 2: switch (aSide) { case 0: return tIndex+32; case 1: return tIndex+32; case 4: return - * tIndex+16; case 5: return tIndex+48; } case 3: switch (aSide) { case 0: return tIndex+64; case 1: return - * tIndex+64; case 4: return tIndex+48; case 5: return tIndex+16; } case 4: switch (aSide) { case 0: return - * tIndex+16; case 1: return tIndex+16; case 2: return tIndex+48; case 3: return tIndex+16; } case 5: switch (aSide) - * { case 0: return tIndex+48; case 1: return tIndex+48; case 2: return tIndex+16; case 3: return tIndex+48; } } - * return tIndex; } - */ - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFront(i); - rTextures[6][i + 1] = this.getBack(i); - rTextures[7][i + 1] = this.getBottom(i); - rTextures[8][i + 1] = this.getTop(i); - rTextures[9][i + 1] = this.getSides(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == ForgeDirection.DOWN || side == ForgeDirection.UP) { - return this.mTextures[3][aColorIndex + 1]; - } else { - return this.mTextures[4][aColorIndex + 1]; - } - /* - * return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 : aSide == GT_Utility.getOppositeSide(aFacing) - * ? 1 : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - */ - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_CropHarvester_Cutter) }; - } - - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_CropHarvester_Cutter) }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_CropHarvester_Boxes) }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_CropHarvester_Boxes) }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_CropHarvester_Cutter) }; - } - - @Override - public boolean doesFillContainers() { - return false; - } - - @Override - public boolean doesEmptyContainers() { - return false; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return false; - } - - @Override - public boolean displaysItemStack() { - return false; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("mModeAlternative", this.mModeAlternative); - aNBT.setBoolean("mHarvestEnabled", this.mHarvestEnabled); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.mModeAlternative = aNBT.getBoolean("mModeAlternative"); - if (aNBT.hasKey("mHarvestEnabled")) { - this.mHarvestEnabled = aNBT.getBoolean("mHarvestEnabled"); - } - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new CycleButtonWidget().setToggle(() -> mModeAlternative, val -> mModeAlternative = val) - .setTexture(GTPP_UITextures.OVERLAY_BUTTON_HARVESTER_MODE) - .addTooltip(0, "Enable Hydration/Fertilizing/Weed-EX") - .addTooltip(1, "Disable Hydration/Fertilizing/Weed-EX") - .setBackground(GT_UITextures.BUTTON_STANDARD) - .setPos(47, 63) - .setSize(18, 18)); - builder.widget( - new CycleButtonWidget().setToggle(() -> mHarvestEnabled, val -> mHarvestEnabled = val) - .setTexture(GTPP_UITextures.OVERLAY_BUTTON_HARVESTER_TOGGLE) - .addTooltip(0, "Enable Harvest") - .addTooltip(1, "Disable Harvest") - .setBackground(GT_UITextures.BUTTON_STANDARD) - .setPos(67, 63) - .setSize(18, 18)); - builder.widget( - SlotGroup.ofItemHandler(inventoryHandler, 2) - .startFromSlot(SLOT_WEEDEX_1) - .endAtSlot(SLOT_WEEDEX_2) - .applyForWidget( - widget -> widget.setFilter( - stack -> stack != null && stack.getItem() - .getUnlocalizedName() - .equals("ic2.itemWeedEx")) - .setBackground(getGUITextureSet().getItemSlot(), GTPP_UITextures.OVERLAY_SLOT_WEED_EX)) - .build() - .setPos(7, 13)) - .widget( - SlotGroup.ofItemHandler(inventoryHandler, 2) - .startFromSlot(SLOT_FERT_1) - .endAtSlot(SLOT_FERT_4) - .applyForWidget( - widget -> widget.setFilter( - stack -> stack != null && stack.getItem() - .getUnlocalizedName() - .equals("ic2.itemFertilizer")) - .setBackground(getGUITextureSet().getItemSlot(), GTPP_UITextures.OVERLAY_SLOT_FERTILIZER)) - .build() - .setPos(7, 31)) - .widget( - SlotGroup.ofItemHandler(inventoryHandler, 6) - .startFromSlot(SLOT_OUTPUT_START) - .endAtSlot(SLOT_OUTPUT_START + 6 * 3) - .canInsert(false) - .build() - .setPos(61, 7)); - builder - .widget( - new ProgressBar() - .setTexture(GTPP_UITextures.PROGRESSBAR_BOILER_EMPTY, GT_UITextures.PROGRESSBAR_BOILER_WATER, 54) - .setDirection(ProgressBar.Direction.UP) - .setProgress(() -> (float) getFluidAmount() / getCapacity()) - .setSynced(false, false) - .dynamicTooltip( - () -> Collections.singletonList("Water: " + getFluidAmount() + "L / " + getCapacity() + "L")) - .setPos(47, 7) - .setSize(10, 54)) - .widget(new FakeSyncWidget.FluidStackSyncer(this::getDrainableStack, this::setDrainableStack)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaAtmosphericReconditioner.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaAtmosphericReconditioner.java deleted file mode 100644 index 4bc9004944..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaAtmosphericReconditioner.java +++ /dev/null @@ -1,889 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; - -import static gregtech.api.enums.GT_Values.V; - -import java.util.Collections; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.items.ID_MetaTool_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.recipe.common.CI; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; -import gtPlusPlus.xmod.gregtech.api.gui.GTPP_UITextures; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaAtmosphericReconditioner extends GT_MetaTileEntity_BasicMachine { - - public int mPollutionReduction = 0; - protected int mBaseEff = 2500; - protected int mOptimalAirFlow = 0; - protected boolean mHasPollution = false; - protected int SLOT_ROTOR = 5; - protected int SLOT_FILTER = 6; - protected static boolean mPollutionEnabled = true; - - protected boolean mSaveRotor = false; - - public GregtechMetaAtmosphericReconditioner(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 2, - "Making sure you don't live in Gwalior - Uses 2A", - 3, - 0, - new ITexture[] { new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_MASSFAB_ACTIVE), - new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_MASSFAB), - new GT_RenderedTexture(TexturesGtBlock.Overlay_MatterFab_Active), - new GT_RenderedTexture(TexturesGtBlock.Overlay_MatterFab), - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Vent_Fast), - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Vent), - new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB_ACTIVE), - new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB) }); - mPollutionEnabled = PollutionUtils.isPollutionEnabled(); - } - - public GregtechMetaAtmosphericReconditioner(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, 2, aDescription, aTextures, 2, 0); - mPollutionEnabled = PollutionUtils.isPollutionEnabled(); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaAtmosphericReconditioner(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public String[] getDescription() { - - boolean highTier = this.mTier >= 7; - - String[] A = ArrayUtils.addAll( - this.mDescriptionArray, - 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", - "Insert an equal tier Conveyor Module to enable automation"); - if (!mPollutionEnabled) { - String[] B = new String[] { "===============================================", - "Pollution is disabled, scrubbers will now have a bonus use", - "They are now able to remove ALL lingering pollution as GT ignores it", "and it will linger forever!", - "===============================================", }; - A = ArrayUtils.addAll(A, B); - } - return A; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mOptimalAirFlow", this.mOptimalAirFlow); - aNBT.setBoolean("mSaveRotor", mSaveRotor); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.mOptimalAirFlow = aNBT.getInteger("mOptimalAirFlow"); - this.mSaveRotor = aNBT.getBoolean("mSaveRotor"); - } - - @Override - public long maxAmperesIn() { - return 2; - } - - @Override - public long getMinimumStoredEU() { - return V[mTier] * 2; - } - - @Override - public long maxEUStore() { - return V[mTier] * 256; - } - - @Override - public long maxEUInput() { - return V[mTier]; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - - // Get Current Pollution Amount. - int mCurrentPollution = getCurrentChunkPollution(); - boolean isIdle = true; - - // Get Inventory Item - ItemStack stackRotor = this.mInventory[SLOT_ROTOR]; - ItemStack stackFilter = this.mInventory[SLOT_FILTER]; - - // Power Drain - long drainEU = maxEUInput() * maxAmperesIn(); - if (aBaseMetaTileEntity.isActive() && aBaseMetaTileEntity.getStoredEU() >= drainEU) { - if (aBaseMetaTileEntity.decreaseStoredEnergyUnits(drainEU, false)) { - isIdle = false; - } else { - aBaseMetaTileEntity.setActive(false); - this.sendSound((byte) -122); - } - } else if (!aBaseMetaTileEntity.isActive() && aBaseMetaTileEntity.getStoredEU() >= drainEU / 4) { - if (aBaseMetaTileEntity.decreaseStoredEnergyUnits((drainEU / 4), false)) { - isIdle = false; - } else { - aBaseMetaTileEntity.setActive(false); - this.sendSound((byte) -122); - } - } else { - aBaseMetaTileEntity.setActive(false); - this.sendSound((byte) -122); - } - - // Only try once/sec. - if (!isIdle && aTick % 20L == 0L) { - - for (int i = 0; i < this.mInventory.length; i++) { - ItemStack aSlotContent = this.mInventory[i]; - if (aSlotContent != null) { - Logger.INFO("Found " + aSlotContent.getDisplayName() + " in slot " + i); - } - } - - for (int i = 0; i < this.mInventory.length; i++) { - if (hasRotor(this.mInventory[i])) { - Logger.INFO("Found Rotor in slot " + i); - break; - } - } - for (int i = 0; i < this.mInventory.length; i++) { - if (hasAirFilter(this.mInventory[i])) { - Logger.INFO("Found Filter in slot " + i); - break; - } - } - - // Check if machine can work. - if ((aBaseMetaTileEntity.isAllowedToWork())) { - Logger.INFO("Can work."); - - // Enable machine animation/graphic - if (hasRotor(stackRotor) && hasAirFilter(stackFilter) && this.mHasPollution) { - if (!this.getBaseMetaTileEntity() - .isActive()) { - Logger.INFO("Set Active."); - aBaseMetaTileEntity.setActive(true); - } - } else if (!this.mHasPollution || mCurrentPollution <= 0 - || stackRotor == null - || stackFilter == null - || !hasRotor(stackRotor) - || !hasAirFilter(stackFilter)) { - if (!this.getBaseMetaTileEntity() - .isActive()) { - Logger.INFO("Set Inactive."); - aBaseMetaTileEntity.setActive(false); - this.sendSound((byte) -122); - } - } - - // If Active. - if (aBaseMetaTileEntity.isActive()) { - Logger.INFO("Doing something."); - - // Do nothing if there is no pollution. - if (this.mHasPollution && mCurrentPollution > 0) { - Logger - .INFO("Has Pollution? " + mHasPollution + ", Current Pollution: " + mCurrentPollution); - - // Only check every 30s. - if (!isIdle && aTick % (20L * 30) == 0L) { - mPollutionEnabled = PollutionUtils.isPollutionEnabled(); - // Clear out pollution if it's disabled, because I am a nice gal. - if (!PollutionUtils.isPollutionEnabled()) { - PollutionUtils.nullifyPollution(this.getBaseMetaTileEntity()); - } - } - - // Use a Turbine - if (hasRotor(stackRotor) && hasAirFilter(stackFilter)) { - Logger.INFO("Found Turbine."); - - mBaseEff = getBaseEfficiency(stackRotor); - mOptimalAirFlow = getOptimalAirFlow(stackRotor); - - // Make sure we have a valid Turbine and Eff/Airflow - if (this.mBaseEff > 0 && this.mOptimalAirFlow > 0) { - // Utils.LOG_WARNING("Pollution Cleaner [5]"); - - // Log Debug information. - Logger.INFO("mBaseEff[1]:" + mBaseEff); - Logger.INFO("mOptimalAirFlow[1]:" + mOptimalAirFlow); - - // Calculate The Voltage we are running - long tVoltage = drainEU; - byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage)); - - // Check Sides for Air, - // More air means more pollution processing. - 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 - Logger.INFO("mPollutionReduction[1]:" + reduction); - - // I stole this code - reduction = (MathUtils.safeInt((long) reduction * this.mBaseEff) / 100000) - * mAirSides - * Math.max((tTier - 2), 1); - Logger.INFO("reduction[2]:" + reduction); - reduction = MathUtils.safeInt(((long) reduction / 100) * this.mOptimalAirFlow); - Logger.INFO("reduction[3]:" + reduction); - - mPollutionReduction = reduction; - - // Set a temp to remove variable to aleviate duplicate code. - int toRemove = 0; - - Logger.INFO("mCurrentPollution[4]:" + mCurrentPollution); - Logger.INFO("mCurrentPollution[5]:" + reduction); - if (reduction <= mCurrentPollution) { - // Clean some Air. - toRemove = reduction; - } else { - // Makes sure we don't get negative pollution. - toRemove = mCurrentPollution; - } - - toRemove = toRemove / 2; - Logger.INFO("mCurrentPollution[6]:" + toRemove); - - // We are good to clean - if (toRemove > 0) { - if (damageTurbineRotor() && damageAirFilter()) { - Logger.INFO("Removing " + toRemove + " pollution"); - removePollution(mSaveRotor ? (toRemove / 2) : toRemove); - Logger.INFO("mNewPollution[4]:" + getCurrentChunkPollution()); - } else { - Logger.INFO("Could not damage turbine rotor or Air Filter."); - aBaseMetaTileEntity.setActive(false); - } - } // End of pollution removal block. - } // End of valid air sides block. - } // End of valid toolstats block. - } // End of correct inventory item block. - else { - // Utils.LOG_WARNING("Wrong Tool metaitem Found."); - } - } - } else if (!aBaseMetaTileEntity.isActive()) { - return; - } - } // End of can work block. - else { // Disable Machine. - // aBaseMetaTileEntity.setActive(false); - } - } // 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. - } - - public int getCurrentChunkPollution() { - int mCurrentChunkPollution = 0; - if (this.mTier < 7) { - mCurrentChunkPollution = PollutionUtils.getPollution(getBaseMetaTileEntity()); - } else { - AutoMap aSurrounding = new AutoMap<>(); - World aWorld = this.getBaseMetaTileEntity() - .getWorld(); - int xPos = this.getBaseMetaTileEntity() - .getXCoord(); - int zPos = this.getBaseMetaTileEntity() - .getZCoord(); - Chunk a1 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos - 32); - Chunk a2 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos); - Chunk a3 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos + 32); - Chunk b1 = aWorld.getChunkFromBlockCoords(xPos, zPos - 32); - Chunk b2 = aWorld.getChunkFromBlockCoords(xPos, zPos); - Chunk b3 = aWorld.getChunkFromBlockCoords(xPos, zPos + 32); - Chunk c1 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos - 32); - Chunk c2 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos); - Chunk c3 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos + 32); - aSurrounding.put(a1); - aSurrounding.put(a2); - aSurrounding.put(a3); - aSurrounding.put(b1); - aSurrounding.put(b2); - aSurrounding.put(b3); - aSurrounding.put(c1); - aSurrounding.put(c2); - aSurrounding.put(c3); - for (Chunk r : aSurrounding) { - mCurrentChunkPollution += getPollutionInChunk(r); - } - } - if (mCurrentChunkPollution > 0) { - mHasPollution = true; - } else { - mHasPollution = false; - } - return mCurrentChunkPollution; - } - - public int getPollutionInChunk(Chunk aChunk) { - int mCurrentChunkPollution = PollutionUtils.getPollution(aChunk); - if (mCurrentChunkPollution > 0) { - mHasPollution = true; - } else { - mHasPollution = false; - } - return mCurrentChunkPollution; - } - - public boolean hasRotor(ItemStack rotorStack) { - if (rotorStack != null) { - if (rotorStack.getItem() instanceof ItemBasicScrubberTurbine) { - // Logger.INFO("Found Basic Turbine Rotor."); - return true; - } else if (rotorStack.getItem() instanceof GT_MetaGenerated_Tool && rotorStack.getItemDamage() >= 170 - && rotorStack.getItemDamage() <= 179) { - // Logger.INFO("Found Turbine Rotor."); - return true; - } else { - // Logger.INFO("Found: "+rotorStack.getDisplayName()+":"+rotorStack.getItemDamage()); - } - } - // Logger.INFO("Found No Turbine Rotor."); - return false; - } - - public boolean damageTurbineRotor() { - try { - - boolean creativeRotor = false; - ItemStack rotorStack = this.mInventory[SLOT_ROTOR]; - if (rotorStack == null) { - return false; - } else if (rotorStack.getItem() instanceof ItemBasicScrubberTurbine) { - long currentUse = ItemBasicScrubberTurbine.getFilterDamage(rotorStack); - // Remove broken Filter - if (rotorStack.getItemDamage() == 0 && currentUse >= 2000 - 10) { - Logger.INFO("Depleting ItemBasicScrubberTurbine T1"); - this.mInventory[this.SLOT_FILTER] = null; - return false; - } else if (rotorStack.getItemDamage() == 1 && currentUse >= 4000 - 10) { - Logger.INFO("Depleting ItemBasicScrubberTurbine T2"); - this.mInventory[this.SLOT_FILTER] = null; - return false; - } else if (rotorStack.getItemDamage() == 2 && currentUse >= 6000 - 10) { - Logger.INFO("Depleting ItemBasicScrubberTurbine T3"); - this.mInventory[this.SLOT_FILTER] = null; - return false; - } else { - // Do Damage - Logger.INFO("Damaging ItemBasicScrubberTurbine"); - ItemBasicScrubberTurbine.setFilterDamage(rotorStack, currentUse + 10); - Logger.INFO("Rotor Damage: " + currentUse); - return true; - } - } else if (rotorStack.getItem() instanceof GT_MetaGenerated_Tool_01) { - Materials t1 = GT_MetaGenerated_Tool.getPrimaryMaterial(rotorStack); - Materials t2 = GT_MetaGenerated_Tool.getSecondaryMaterial(rotorStack); - if (t1 == Materials._NULL && t2 == Materials._NULL) { - Logger.INFO("Found creative rotor."); - creativeRotor = true; - } - } else { - Logger.INFO("Bad item in rotor slot."); - return false; - } - - 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.INFO("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]); - * Logger.INFO("Trying to do "+damageValue+" damage to the rotor. [2]"); - */ - - // Damage Rotor - // int rotorDurability = this.mInventory[this.SLOT_ROTOR].getItemDamage(); - long rotorDamage = creativeRotor ? 0 - : GT_MetaGenerated_Tool.getToolDamage(this.mInventory[this.SLOT_ROTOR]); - long rotorDurabilityMax = creativeRotor ? Integer.MAX_VALUE - : GT_MetaGenerated_Tool.getToolMaxDamage(this.mInventory[this.SLOT_ROTOR]); - long rotorDurability = (rotorDurabilityMax - rotorDamage); - Logger.INFO( - "Rotor Damage: " + rotorDamage - + " | Max Durability: " - + rotorDurabilityMax - + " | " - + " Remaining Durability: " - + rotorDurability); - if (rotorDurability >= damageValue) { - - if (!mSaveRotor) { - Logger.INFO("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.INFO("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) { - Logger.INFO("Destroying Rotor."); - this.mInventory[this.SLOT_ROTOR] = null; - return false; - } else if (rotorDurability <= 0 && mSaveRotor) { - Logger.INFO("Saving Rotor."); - return false; - } - - } else { - Logger.INFO("Bad Rotor."); - return false; - } - } catch (Throwable t) { - t.printStackTrace(); - } - return false; - } - - public int getFreeSpaces() { - int mAir = 0; - IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); - if (aBaseMetaTileEntity.getAirOffset(1, 0, 0)) { - mAir++; - } - if (aBaseMetaTileEntity.getAirOffset(-1, 0, 0)) { - mAir++; - } - if (aBaseMetaTileEntity.getAirOffset(0, 0, 1)) { - mAir++; - } - if (aBaseMetaTileEntity.getAirOffset(0, 0, -1)) { - mAir++; - } - if (aBaseMetaTileEntity.getAirOffset(0, 1, 0)) { - mAir++; - } - if (aBaseMetaTileEntity.getAirOffset(0, -1, 0)) { - mAir++; - } - return mAir; - } - - public boolean removePollution(int toRemove) { - - if (this == null || this.getBaseMetaTileEntity() == null - || this.getBaseMetaTileEntity() - .getWorld() == null) { - return false; - } - - if (this.mTier < 7) { - int startPollution = getCurrentChunkPollution(); - Logger.INFO("Current Chunk Pollution: " + startPollution); - PollutionUtils.removePollution(this.getBaseMetaTileEntity(), toRemove); - int after = getCurrentChunkPollution(); - Logger.INFO("Current Chunk Pollution: " + after); - return (after < startPollution); - } else { - int chunksWithRemoval = 0; - int totalRemoved = 0; - AutoMap aSurrounding = new AutoMap<>(); - 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(); - - Chunk a1 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos - 32); - Chunk a2 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos); - Chunk a3 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos + 32); - Chunk b1 = aWorld.getChunkFromBlockCoords(xPos, zPos - 32); - Chunk b2 = aWorld.getChunkFromBlockCoords(xPos, zPos); - Chunk b3 = aWorld.getChunkFromBlockCoords(xPos, zPos + 32); - Chunk c1 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos - 32); - Chunk c2 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos); - Chunk c3 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos + 32); - - aSurrounding.put(a1); - aSurrounding.put(a2); - aSurrounding.put(a3); - aSurrounding.put(b1); - aSurrounding.put(b2); - aSurrounding.put(b3); - 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.INFO( - "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++; - after = getPollutionInChunk(r); - } else { - after = 0; - } - if (startPollution - after > 0) { - totalRemoved += (startPollution - after); - } - Logger.INFO( - "Removed " + (startPollution - after) - + " pollution from chunk " - + r.xPosition - + ", " - + r.zPosition - + " | " - + after); - } - return totalRemoved > 0 && chunksWithRemoval > 0; - } - } - - public boolean removePollution(Chunk aChunk, int toRemove) { - int before = getCurrentChunkPollution(); - PollutionUtils.removePollution(aChunk, toRemove); - int after = getCurrentChunkPollution(); - return (after < before); - } - - public boolean hasAirFilter(ItemStack filter) { - if (filter == null) { - return false; - } - return filter.getItem() instanceof ItemAirFilter; - } - - public boolean damageAirFilter() { - ItemStack filter = this.mInventory[this.SLOT_FILTER]; - if (filter == null) { - return false; - } - - boolean creativeRotor = false; - ItemStack rotorStack = this.mInventory[SLOT_ROTOR]; - if (rotorStack != null) { - if (rotorStack.getItem() instanceof GT_MetaGenerated_Tool_01) { - Materials t1 = GT_MetaGenerated_Tool.getPrimaryMaterial(rotorStack); - Materials t2 = GT_MetaGenerated_Tool.getSecondaryMaterial(rotorStack); - if (t1 == Materials._NULL && t2 == Materials._NULL) { - creativeRotor = true; - } - } - } - - if (creativeRotor) { - return true; - } - - if (filter.getItem() instanceof ItemAirFilter) { - - long currentUse = ItemAirFilter.getFilterDamage(filter); - - // Remove broken Filter - if (filter.getItemDamage() == 0 && currentUse >= 50 - 1) { - this.mInventory[this.SLOT_FILTER] = null; - return false; - } else if (filter.getItemDamage() == 1 && currentUse >= 2500 - 1) { - this.mInventory[this.SLOT_FILTER] = null; - return false; - } else { - // Do Damage - ItemAirFilter.setFilterDamage(filter, currentUse + 1); - Logger.INFO("Filter Damage: " + currentUse); - return true; - } - } - return false; - } - - @Override - public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { - if (aIndex == SLOT_FILTER) { - if (aStack.getItem() instanceof ItemAirFilter) { - Logger.INFO("Inserting Air Filter into " + aIndex); - return true; - } - } - if (aIndex == SLOT_ROTOR) { - if (this.mInventory[7] != 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 false; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - } - - @Override - public void doSound(byte aIndex, double aX, double aY, double aZ) { - if (aIndex == -120) { - GT_Utility - .doSoundAtClient(SoundResource.IC2_TOOLS_BATTERY_USE, MathUtils.randInt(5, 50), 0.05F, aX, aY, aZ); - } else { - super.doSound((byte) 0, aX, aY, aZ); - } - } - - @Override - public String[] getInfoData() { - AutoMap aTooltipSuper = new AutoMap<>(); - for (String s : super.getInfoData()) { - aTooltipSuper.put(s); - } - 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); - } 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; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCoverID) { - if (side.offsetY != 0) { - return false; - } - return super.allowCoverOnSide(side, aCoverID); - } - - @Override - public ITexture[] getTopFacingInactive(byte aColor) { - return super.getTopFacingInactive(aColor); - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - aNBT.setInteger("mOptimalAirFlow", this.mOptimalAirFlow); - aNBT.setBoolean("mSaveRotor", mSaveRotor); - super.setItemNBT(aNBT); - } - - private static ItemStack[] sGregTurbines; - - public static ItemStack getTieredTurbine(int aTier) { - if (sGregTurbines == null) { - sGregTurbines = new ItemStack[3]; - sGregTurbines[0] = GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01") - .getToolWithStats(ID_MetaTool_01.TURBINE_SMALL.ID, 1, Materials.Iron, Materials.Iron, null); - sGregTurbines[1] = GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01") - .getToolWithStats(ID_MetaTool_01.TURBINE_SMALL.ID, 1, Materials.Bronze, Materials.Bronze, null); - sGregTurbines[2] = GT_MetaGenerated_Tool.sInstances.get("gt.metatool.01") - .getToolWithStats(ID_MetaTool_01.TURBINE_SMALL.ID, 1, Materials.Steel, Materials.Steel, null); - } else { - return sGregTurbines[aTier]; - } - - return null; - } - - public int getBaseEfficiency(ItemStack aStackRotor) { - if (aStackRotor.getItem() instanceof ItemBasicScrubberTurbine) { - return getBaseEfficiency(getTieredTurbine(aStackRotor.getItemDamage())); - } - return (int) ((50.0F - + (10.0F * ((GT_MetaGenerated_Tool) aStackRotor.getItem()).getToolCombatDamage(aStackRotor))) * 100); - } - - public int getOptimalAirFlow(ItemStack aStackRotor) { - if (aStackRotor.getItem() instanceof ItemBasicScrubberTurbine) { - return getOptimalAirFlow(getTieredTurbine(aStackRotor.getItemDamage())); - } - return (int) Math.max( - Float.MIN_NORMAL, - ((GT_MetaGenerated_Tool) aStackRotor.getItem()).getToolStats(aStackRotor) - .getSpeedMultiplier() * GT_MetaGenerated_Tool.getPrimaryMaterial(aStackRotor).mToolSpeed * 50); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget(new SlotWidget(inventoryHandler, SLOT_ROTOR).setFilter(stack -> { - if (stack.getItem() instanceof ItemBasicScrubberTurbine) { - return true; - } - return stack.getItem() instanceof GT_MetaGenerated_Tool && stack.getItemDamage() >= 170 - && stack.getItemDamage() <= 179; - }) - .setBackground(getGUITextureSet().getItemSlot(), GTPP_UITextures.OVERLAY_SLOT_TURBINE) - .setPos(52, 24)) - .widget( - new SlotWidget(inventoryHandler, SLOT_FILTER) - .setFilter(stack -> stack.getItem() instanceof ItemAirFilter) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_RECYCLE) - .setPos(106, 24)) - .widget( - new SlotWidget(inventoryHandler, 7) - .setFilter(stack -> GT_Utility.areStacksEqual(stack, CI.getConveyor(mTier, 1), true)) - .setPos(124, 62)); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_INFORMATION) - .dynamicTooltip(() -> Collections.singletonList("Reduction: " + mPollutionReduction + "/s")) - .attachSyncer( - new FakeSyncWidget.IntegerSyncer(() -> mPollutionReduction, val -> mPollutionReduction = val), - builder, - (widget, val) -> widget.notifyTooltipChange()) - .setPos(163, 5) - .setSize(7, 18)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionCreator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionCreator.java deleted file mode 100644 index d7b6b8fffd..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionCreator.java +++ /dev/null @@ -1,458 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -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.objects.GT_RenderedTexture; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMetaTileEntity; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaPollutionCreator extends GregtechMetaTileEntity { - - int mCurrentPollution; - int mAveragePollution; - int mAveragePollutionArray[] = new int[10]; - private int mArrayPos = 0; - private int mTickTimer = 0; - private int mSecondTimer = 0; - - public GregtechMetaPollutionCreator(final int aID, final String aName, final String aNameRegional, final int aTier, - final String aDescription, final int aSlotCount) { - super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); - } - - public GregtechMetaPollutionCreator(final String aName, final int aTier, final String aDescription, - final ITexture[][][] aTextures, final int aSlotCount) { - super(aName, aTier, aSlotCount, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - return new String[] { this.mDescription, "A useful debug machine to create pollution.", CORE.GT_Tooltip.get() }; - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFrontActive(i); - rTextures[6][i + 1] = this.getBackActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; - } - - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getFrontActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; - } - - public ITexture[] getBackActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getBottomActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getTopActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getSidesActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (pollutionMultiplier > 99) { - pollutionMultiplier = 1; - } else { - pollutionMultiplier++; - } - PlayerUtils.messagePlayer(aPlayer, "Pollution Mutliplier is now " + pollutionMultiplier + "."); - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaPollutionCreator( - this.mName, - this.mTier, - this.mDescription, - this.mTextures, - this.mInventory.length); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isValidSlot(final int aIndex) { - return true; - } - - @Override - public boolean isFacingValid(final ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public boolean isInputFacing(final ForgeDirection side) { - return side != this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 0; - } - - @Override - public long maxEUStore() { - return 0; - } - - @Override - public int getCapacity() { - return 0; - } - - @Override - public long maxEUInput() { - return 0; - } - - @Override - public long maxEUOutput() { - return 0; - } - - @Override - public long maxAmperesIn() { - return 0; - } - - @Override - public long maxAmperesOut() { - return 0; - } - - @Override - public int rechargerSlotStartIndex() { - return 0; - } - - @Override - public int dechargerSlotStartIndex() { - return 0; - } - - @Override - public int rechargerSlotCount() { - return 0; - } - - @Override - public int dechargerSlotCount() { - return 0; - } - - @Override - public int getProgresstime() { - return (int) this.getBaseMetaTileEntity() - .getUniversalEnergyStored(); - } - - @Override - public int maxProgresstime() { - return (int) this.getBaseMetaTileEntity() - .getUniversalEnergyCapacity(); - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - this.showPollution(aPlayer.getEntityWorld(), aPlayer); - return true; - } - - public int pollutionMultiplier = 1; - - private void showPollution(final World worldIn, final EntityPlayer playerIn) { - if (!PollutionUtils.isPollutionEnabled()) { - PlayerUtils.messagePlayer(playerIn, "This block is useless, Pollution is disabled."); - } else { - addPollution(); - PlayerUtils - .messagePlayer(playerIn, "This chunk now contains " + getCurrentChunkPollution() + " pollution."); - // PlayerUtils.messagePlayer(playerIn, "Average over last ten minutes: "+getAveragePollutionOverLastTen()+" - // pollution."); - } - } - - private boolean addPollution() { - PollutionUtils.addPollution(getBaseMetaTileEntity(), 100000 * pollutionMultiplier); - return true; - } - - @Override - public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - public int getCurrentChunkPollution() { - return getCurrentChunkPollution(this.getBaseMetaTileEntity()); - } - - public int getCurrentChunkPollution(IGregTechTileEntity aBaseMetaTileEntity) { - return PollutionUtils.getPollution(aBaseMetaTileEntity); - } - - @Override - public String[] getInfoData() { - return new String[] { this.getLocalName(), "Current Pollution: " + this.mCurrentPollution, - "Average/10 minutes:" + getAveragePollutionOverLastTen() }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { - return new int[] {}; - } - - @Override - public boolean canInsertItem(final int p_102007_1_, final ItemStack p_102007_2_, final int p_102007_3_) { - return false; - } - - @Override - public boolean canExtractItem(final int p_102008_1_, final ItemStack p_102008_2_, final int p_102008_3_) { - return false; - } - - @Override - public int getSizeInventory() { - return 0; - } - - @Override - public ItemStack getStackInSlot(final int p_70301_1_) { - return null; - } - - @Override - public ItemStack decrStackSize(final int p_70298_1_, final int p_70298_2_) { - return null; - } - - @Override - public ItemStack getStackInSlotOnClosing(final int p_70304_1_) { - return null; - } - - @Override - public void setInventorySlotContents(final int p_70299_1_, final ItemStack p_70299_2_) {} - - @Override - public String getInventoryName() { - return null; - } - - @Override - public boolean hasCustomInventoryName() { - return false; - } - - @Override - public int getInventoryStackLimit() { - return 0; - } - - @Override - public boolean isUseableByPlayer(final EntityPlayer p_70300_1_) { - return false; - } - - @Override - public void openInventory() {} - - @Override - public void closeInventory() {} - - @Override - public boolean isItemValidForSlot(final int p_94041_1_, final ItemStack p_94041_2_) { - return false; - } - - @Override - public boolean isOverclockerUpgradable() { - return false; - } - - @Override - public boolean isTransformerUpgradable() { - return false; - } - - @Override - public void saveNBTData(final NBTTagCompound aNBT) { - aNBT.setInteger("mCurrentPollution", this.mCurrentPollution); - aNBT.setInteger("mAveragePollution", this.mAveragePollution); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - this.mCurrentPollution = aNBT.getInteger("mCurrentPollution"); - this.mAveragePollution = aNBT.getInteger("mAveragePollution"); - } - - @Override - public void onFirstTick(final IGregTechTileEntity aBaseMetaTileEntity) { - if (this.getBaseMetaTileEntity() - .isServerSide()) { - if (this.mCurrentPollution == 0) { - this.mCurrentPollution = getCurrentChunkPollution(); - } - if (this.mArrayPos < 0 || this.mArrayPos > 9) { - this.mArrayPos = 0; - } - this.mTickTimer = 0; - } - } - - @Override - public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (this.getBaseMetaTileEntity() - .isServerSide()) { - // TickTimer - 20 times a second - this.mTickTimer++; - if (mTickTimer % 20 == 0) { - this.mCurrentPollution = getCurrentChunkPollution(); - } - } - } - - public int getAveragePollutionOverLastTen() { - int counter = 0; - int total = 0; - - for (int j : this.mAveragePollutionArray) { - if (j != 0) { - total += j; - counter++; - } - } - int returnValue = 0; - if (total > 0 && counter > 0) { - returnValue = (total / counter); - this.mAveragePollution = returnValue; - } else { - returnValue = getCurrentChunkPollution(); - } - // Logger.INFO("| DEBUG: "+returnValue +" | ArrayPos:"+this.mArrayPos+" | Counter:"+counter+" | Total:"+total+" - // |"); - return returnValue; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionDetector.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionDetector.java deleted file mode 100644 index 92443d2658..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaPollutionDetector.java +++ /dev/null @@ -1,502 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -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.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMetaTileEntity; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaPollutionDetector extends GregtechMetaTileEntity { - - int mCurrentPollution; - int mAveragePollution; - int mAveragePollutionArray[] = new int[10]; - private int mArrayPos = 0; - private int mTickTimer = 0; - private int mSecondTimer = 0; - private long mRedstoneLevel = 0; - - public GregtechMetaPollutionDetector(final int aID, final String aName, final String aNameRegional, final int aTier, - final String aDescription, final int aSlotCount) { - super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); - } - - public GregtechMetaPollutionDetector(final String aName, final int aTier, final String aDescription, - final ITexture[][][] aTextures, final int aSlotCount) { - super(aName, aTier, aSlotCount, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - return new String[] { this.mDescription, "Right click to check pollution levels.", - "Configure with screwdriver to set redstone output amount.", "Does not use power.", CORE.GT_Tooltip.get() }; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return side == facing - ? new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Screen_Frequency) } - : new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), - new GT_RenderedTexture(Textures.BlockIcons.VOID) }; - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFrontActive(i); - rTextures[6][i + 1] = this.getBackActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - /* - * @Override public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final byte aSide, final - * byte aFacing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { return - * this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 : side == facing.getOpposite() ? 1 : side == - * ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; } - */ - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; - } - - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getFrontActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; - } - - public ITexture[] getBackActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getBottomActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getTopActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getSidesActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaPollutionDetector( - this.mName, - this.mTier, - this.mDescription, - this.mTextures, - this.mInventory.length); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isValidSlot(final int aIndex) { - return true; - } - - @Override - public boolean isFacingValid(final ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public boolean isInputFacing(final ForgeDirection side) { - return side != this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 0; - } - - @Override - public long maxEUStore() { - return 0; - } - - @Override - public int getCapacity() { - return 0; - } - - @Override - public long maxEUInput() { - return 0; - } - - @Override - public long maxEUOutput() { - return 0; - } - - @Override - public long maxAmperesIn() { - return 0; - } - - @Override - public long maxAmperesOut() { - return 0; - } - - @Override - public int rechargerSlotStartIndex() { - return 0; - } - - @Override - public int dechargerSlotStartIndex() { - return 0; - } - - @Override - public int rechargerSlotCount() { - return 0; - } - - @Override - public int dechargerSlotCount() { - return 0; - } - - @Override - public int getProgresstime() { - return (int) this.getBaseMetaTileEntity() - .getUniversalEnergyStored(); - } - - @Override - public int maxProgresstime() { - return (int) this.getBaseMetaTileEntity() - .getUniversalEnergyCapacity(); - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - this.showPollution(aPlayer.getEntityWorld(), aPlayer); - return true; - } - - private void showPollution(final World worldIn, final EntityPlayer playerIn) { - if (!PollutionUtils.isPollutionEnabled()) { - PlayerUtils.messagePlayer(playerIn, "This block is useless, Pollution is disabled."); - } else { - PlayerUtils.messagePlayer(playerIn, "This chunk contains " + getCurrentChunkPollution() + " pollution."); - PlayerUtils.messagePlayer(playerIn, "Emit Redstone at pollution level: " + this.mRedstoneLevel); - } - } - - @Override - public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - public int getCurrentChunkPollution() { - return getCurrentChunkPollution(this.getBaseMetaTileEntity()); - } - - public int getCurrentChunkPollution(IGregTechTileEntity aBaseMetaTileEntity) { - return PollutionUtils.getPollution(aBaseMetaTileEntity); - } - - @Override - public String[] getInfoData() { - return new String[] { this.getLocalName(), "Current Pollution: " + this.mCurrentPollution, - "Average/10 Sec: " + this.mAveragePollution, "Emit Redstone at pollution level: " + this.mRedstoneLevel }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { - return new int[] {}; - } - - @Override - public boolean canInsertItem(final int p_102007_1_, final ItemStack p_102007_2_, final int p_102007_3_) { - return false; - } - - @Override - public boolean canExtractItem(final int p_102008_1_, final ItemStack p_102008_2_, final int p_102008_3_) { - return false; - } - - @Override - public int getSizeInventory() { - return 0; - } - - @Override - public ItemStack getStackInSlot(final int p_70301_1_) { - return null; - } - - @Override - public ItemStack decrStackSize(final int p_70298_1_, final int p_70298_2_) { - return null; - } - - @Override - public ItemStack getStackInSlotOnClosing(final int p_70304_1_) { - return null; - } - - @Override - public void setInventorySlotContents(final int p_70299_1_, final ItemStack p_70299_2_) {} - - @Override - public String getInventoryName() { - return null; - } - - @Override - public boolean hasCustomInventoryName() { - return false; - } - - @Override - public int getInventoryStackLimit() { - return 0; - } - - @Override - public boolean isUseableByPlayer(final EntityPlayer p_70300_1_) { - return false; - } - - @Override - public void openInventory() {} - - @Override - public void closeInventory() {} - - @Override - public boolean isItemValidForSlot(final int p_94041_1_, final ItemStack p_94041_2_) { - return false; - } - - @Override - public boolean isOverclockerUpgradable() { - return false; - } - - @Override - public boolean isTransformerUpgradable() { - return false; - } - - @Override - public void saveNBTData(final NBTTagCompound aNBT) { - aNBT.setInteger("mCurrentPollution", this.mCurrentPollution); - aNBT.setInteger("mAveragePollution", this.mAveragePollution); - aNBT.setLong("mRedstoneLevel", this.mRedstoneLevel); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - this.mCurrentPollution = aNBT.getInteger("mCurrentPollution"); - this.mAveragePollution = aNBT.getInteger("mAveragePollution"); - this.mRedstoneLevel = aNBT.getLong("mRedstoneLevel"); - } - - @Override - public void onFirstTick(final IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - } - - public boolean allowCoverOnSide(final ForgeDirection side, final int aCoverID) { - return side != this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - - // Only Calc server-side - if (!this.getBaseMetaTileEntity() - .isServerSide()) { - return; - } - // Emit Redstone - if (this.getCurrentChunkPollution() >= this.mRedstoneLevel) { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - this.getBaseMetaTileEntity() - .setStrongOutputRedstoneSignal(side, (byte) 16); - } - this.markDirty(); - } else { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - this.getBaseMetaTileEntity() - .setStrongOutputRedstoneSignal(side, (byte) 0); - } - this.markDirty(); - } - - // Do Math for stats - if (this.mTickTimer % 20 == 0) { - mCurrentPollution = this.getCurrentChunkPollution(); - if (mArrayPos > mAveragePollutionArray.length - 1) { - mArrayPos = 0; - } - mAveragePollutionArray[mArrayPos] = mCurrentPollution; - mAveragePollution = getAveragePollutionOverLastTen(); - mArrayPos++; - } - this.mTickTimer++; - } - - public int getAveragePollutionOverLastTen() { - return MathUtils.getIntAverage(mAveragePollutionArray); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - - if (side == this.getBaseMetaTileEntity() - .getFrontFacing()) { - final float[] tCoords = GT_Utility.getClickedFacingCoords(side, aX, aY, aZ); - switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + (2 * (byte) (int) (tCoords[1] * 2.0F)))) { - case 0 -> this.mRedstoneLevel -= 5000; - case 1 -> this.mRedstoneLevel += 5000; - case 2 -> this.mRedstoneLevel -= 50000; - case 3 -> this.mRedstoneLevel += 50000; - } - this.markDirty(); - GT_Utility.sendChatToPlayer(aPlayer, "Emit Redstone at Pollution Level: " + this.mRedstoneLevel); - } - - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - } - - @Override - public boolean allowGeneralRedstoneOutput() { - if (this.getCurrentChunkPollution() >= this.mRedstoneLevel) { - this.markDirty(); - return true; - } - return false; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - } - - @Override - public void onMachineBlockUpdate() { - super.onMachineBlockUpdate(); - } - - @Override - public boolean hasSidedRedstoneOutputBehavior() { - if (this.getCurrentChunkPollution() >= this.mRedstoneLevel) { - this.markDirty(); - return true; - } - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaTileEntity_AutoChisel.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaTileEntity_AutoChisel.java deleted file mode 100644 index a845982e8b..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaTileEntity_AutoChisel.java +++ /dev/null @@ -1,185 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; - -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.math.Pos2d; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; - -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.BasicUIProperties; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import team.chisel.carving.Carving; - -public class GregtechMetaTileEntity_AutoChisel extends GT_MetaTileEntity_BasicMachine { - - private ItemStack mInputCache; - private ItemStack mOutputCache; - - public GregtechMetaTileEntity_AutoChisel(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 1, - "Chisels things, Gregtech style", - 1, - 1, - new ITexture[] { new GT_RenderedTexture(BlockIcons.OVERLAY_SIDE_MASSFAB_ACTIVE), - new GT_RenderedTexture(BlockIcons.OVERLAY_SIDE_MASSFAB), - new GT_RenderedTexture(BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_ACTIVE), - new GT_RenderedTexture(BlockIcons.OVERLAY_FRONT_MULTI_SMELTER), - new GT_RenderedTexture(TexturesGtBlock.Overlay_MatterFab_Active), - new GT_RenderedTexture(TexturesGtBlock.Overlay_MatterFab), - new GT_RenderedTexture(BlockIcons.OVERLAY_BOTTOM_MASSFAB_ACTIVE), - new GT_RenderedTexture(BlockIcons.OVERLAY_BOTTOM_MASSFAB) }); - } - - public GregtechMetaTileEntity_AutoChisel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures, 1, 1); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_AutoChisel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll( - this.mDescriptionArray, - "What you want to chisel goes in slot 1", - "What you want to get goes in the special slot (bottom right)", - "If special slot is empty, first chisel result is used"); - } - - private boolean hasValidCache(ItemStack aStack, ItemStack aSpecialSlot, boolean aClearOnFailure) { - if (mInputCache != null && mOutputCache != null) { - if (GT_Utility.areStacksEqual(aStack, mInputCache) - && GT_Utility.areStacksEqual(aSpecialSlot, mOutputCache)) { - return true; - } - } - // clear cache if it was invalid - if (aClearOnFailure) { - mInputCache = null; - mOutputCache = null; - } - return false; - } - - private void cacheItem(ItemStack mInputItem, ItemStack mOutputItem) { - mOutputCache = mOutputItem.copy(); - mInputCache = mInputItem.copy(); - } - - @Override - protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return hasValidCache(aStack, this.getSpecialSlot(), false) ? true - : super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) && hasChiselResults(aStack); - } - - // lets make sure the user isn't trying to make something from a block that doesn't have this as a valid target - private static boolean canBeMadeFrom(ItemStack from, ItemStack to) { - List results = getItemsForChiseling(from); - for (ItemStack s : results) { - if (s.getItem() == to.getItem() && s.getItemDamage() == to.getItemDamage()) { - return true; - } - } - return false; - } - - // lets make sure the user isn't trying to make something from a block that doesn't have this as a valid target - private static boolean hasChiselResults(ItemStack from) { - List results = getItemsForChiseling(from); - return results.size() > 0; - } - - private static List getItemsForChiseling(ItemStack aStack) { - return Carving.chisel.getItemsForChiseling(aStack); - } - - private static ItemStack getChiselOutput(ItemStack aInput, ItemStack aTarget) { - ItemStack tOutput = null; - if (aTarget != null && canBeMadeFrom(aInput, aTarget)) { - tOutput = aTarget; - } else if (aTarget != null && !canBeMadeFrom(aInput, aTarget)) { - tOutput = null; - } else { - tOutput = getItemsForChiseling(aInput).get(0); - } - return tOutput; - } - - @Override - public int checkRecipe() { - ItemStack tOutput = null; - ItemStack aInput = getInputAt(0); - ItemStack aTarget = getSpecialSlot(); - boolean tIsCached = hasValidCache(aInput, aTarget, true); - if (aInput != null && hasChiselResults(aInput) && aInput.stackSize > 0) { - tOutput = tIsCached ? mOutputCache.copy() : getChiselOutput(aInput, aTarget); - if (tOutput != null) { - tOutput = tOutput.copy(); - tOutput.stackSize = 1; - // We can chisel this - if (canOutput(tOutput)) { - getInputAt(0).stackSize -= 1; - calculateOverclockedNess(16, 20); - // In case recipe is too OP for that machine - if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) { - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - } - if (!tIsCached) { - cacheItem(ItemUtils.getSimpleStack(aInput, 1), ItemUtils.getSimpleStack(tOutput, 1)); - } - this.mOutputItems[0] = tOutput.copy(); - return FOUND_AND_SUCCESSFULLY_USED_RECIPE; - } else { - mOutputBlocked++; - return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; - } - } - } - return DID_NOT_FIND_RECIPE; - } - - private static final FallbackableUITexture progressBarTexture = GT_UITextures - .fallbackableProgressbar("auto_chisel", GT_UITextures.PROGRESSBAR_COMPRESS); - - @Override - protected BasicUIProperties getUIProperties() { - return super.getUIProperties().toBuilder() - .progressBarTexture(progressBarTexture) - .build(); - } - - @Override - protected SlotWidget createItemInputSlot(int index, IDrawable[] backgrounds, Pos2d pos) { - return (SlotWidget) super.createItemInputSlot(index, backgrounds, pos) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_COMPRESSOR); - } - - @Override - protected SlotWidget createSpecialSlot(IDrawable[] backgrounds, Pos2d pos, BasicUIProperties uiProperties) { - return (SlotWidget) super.createSpecialSlot(backgrounds, pos, uiProperties) - .setGTTooltip(() -> mTooltipCache.getData("GTPP.machines.chisel_slot.tooltip")); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaWirelessCharger.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaWirelessCharger.java deleted file mode 100644 index b1289958a9..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/GregtechMetaWirelessCharger.java +++ /dev/null @@ -1,672 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.GT_Values; -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.BaseMetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gtPlusPlus.api.objects.minecraft.BlockPos; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.EntityUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMetaTileEntity; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.helpers.ChargingHelper; - -public class GregtechMetaWirelessCharger extends GregtechMetaTileEntity { - - private int mCurrentDimension = 0; - public int mMode = 0; - public boolean mLocked = true; - - public GregtechMetaWirelessCharger(final int aID, final String aName, final String aNameRegional, final int aTier, - final String aDescription, final int aSlotCount) { - super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); - } - - public GregtechMetaWirelessCharger(final String aName, final int aTier, final String aDescription, - final ITexture[][][] aTextures, final int aSlotCount) { - super(aName, aTier, aSlotCount, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - return new String[] { this.mDescription, "Can be locked to the owner by sneaking with a screwdriver", - "Can also be locked with a lock upgrade", "", "3 Modes, Long-Range, Local and Mixed.", - "Long-Range: Can supply 2A of power to a single player up to " + (GT_Values.V[this.mTier] * 4) + "m away.", - "Local: Can supply several Amps to each player within " + this.mTier * 20 + "m.", - "Mixed: Provides both 2A of long range and 1A per player locally.", - "Mixed mode is more conservative of power and as a result only", - "Gets half the distances each singular mode gets.", CORE.GT_Tooltip.get() }; - } - - public int getTier() { - return this.mTier; - } - - public int getMode() { - return this.mMode; - } - - public int getDimensionID() { - return this.mCurrentDimension; - } - - public Map getLocalMap() { - return this.mLocalChargingMap; - } - - public Map getLongRangeMap() { - return this.mWirelessChargingMap; - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFrontActive(i); - rTextures[6][i + 1] = this.getBackActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; - } - - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getFrontActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; - } - - public ITexture[] getBackActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getBottomActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getTopActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getSidesActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - - if (aPlayer.isSneaking()) { - mLocked = !mLocked; - PlayerUtils.messagePlayer(aPlayer, mLocked ? "Locked to owner." : "Unlocked."); - return; - } - - mWirelessChargingMap.clear(); - mLocalChargingMap.clear(); - if (!this.getBaseMetaTileEntity() - .getWorld().playerEntities.isEmpty()) { - for (Object mTempPlayer : this.getBaseMetaTileEntity() - .getWorld().playerEntities) { - if (mTempPlayer instanceof EntityPlayer || mTempPlayer instanceof EntityPlayerMP) { - EntityPlayer mTemp = (EntityPlayer) mTempPlayer; - ChargingHelper.removeValidPlayer(mTemp, this); - } - } - } - - if (this.mMode >= 2) { - this.mMode = 0; - } else { - this.mMode++; - } - if (this.mMode == 0) { - PlayerUtils.messagePlayer(aPlayer, "Now in Long-Range Charge Mode."); - } else if (this.mMode == 1) { - PlayerUtils.messagePlayer(aPlayer, "Now in Local Charge Mode."); - } else { - PlayerUtils.messagePlayer(aPlayer, "Now in Mixed Charge Mode."); - } - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaWirelessCharger( - this.mName, - this.mTier, - this.mDescription, - this.mTextures, - this.mInventory.length); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isValidSlot(final int aIndex) { - return true; - } - - @Override - public boolean isFacingValid(final ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public boolean isInputFacing(final ForgeDirection side) { - return side != this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 0; - } - - @Override - public long maxEUStore() { - return GT_Values.V[this.mTier] * 128; - } - - @Override - public int getCapacity() { - return (int) (GT_Values.V[this.mTier] * 32); - } - - @Override - public long maxEUInput() { - return GT_Values.V[this.mTier]; - } - - @Override - public long maxEUOutput() { - return 0; - } - - @Override - public long maxAmperesIn() { - if (this.mMode == 0) { - return 2; - } else if (this.mMode == 1) { - return this.mLocalChargingMap.size() * 8; - } else { - return ((this.mLocalChargingMap.size() * 4) + this.mWirelessChargingMap.size()); - } - } - - @Override - public long maxAmperesOut() { - return 0; - } - - @Override - public int rechargerSlotStartIndex() { - return 0; - } - - @Override - public int dechargerSlotStartIndex() { - return 0; - } - - @Override - public int rechargerSlotCount() { - return 0; - } - - @Override - public int dechargerSlotCount() { - return 0; - } - - @Override - public int getProgresstime() { - return (int) this.getBaseMetaTileEntity() - .getUniversalEnergyStored(); - } - - @Override - public int maxProgresstime() { - return (int) this.getBaseMetaTileEntity() - .getUniversalEnergyCapacity(); - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - return true; - } - - @Override - public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public String[] getInfoData() { - return new String[] { this.getLocalName() }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { - return new int[] {}; - } - - @Override - public boolean canInsertItem(final int p_102007_1_, final ItemStack p_102007_2_, final int p_102007_3_) { - return false; - } - - @Override - public boolean canExtractItem(final int p_102008_1_, final ItemStack p_102008_2_, final int p_102008_3_) { - return false; - } - - @Override - public int getSizeInventory() { - return 0; - } - - @Override - public ItemStack getStackInSlot(final int p_70301_1_) { - return null; - } - - @Override - public ItemStack decrStackSize(final int p_70298_1_, final int p_70298_2_) { - return null; - } - - @Override - public ItemStack getStackInSlotOnClosing(final int p_70304_1_) { - return null; - } - - @Override - public void setInventorySlotContents(final int p_70299_1_, final ItemStack p_70299_2_) {} - - @Override - public String getInventoryName() { - return null; - } - - @Override - public boolean hasCustomInventoryName() { - return false; - } - - @Override - public int getInventoryStackLimit() { - return 0; - } - - @Override - public boolean isUseableByPlayer(final EntityPlayer p_70300_1_) { - return false; - } - - @Override - public void openInventory() {} - - @Override - public void closeInventory() {} - - @Override - public boolean isItemValidForSlot(final int p_94041_1_, final ItemStack p_94041_2_) { - return false; - } - - @Override - public boolean isOverclockerUpgradable() { - return false; - } - - @Override - public boolean isTransformerUpgradable() { - return false; - } - - @Override - public void saveNBTData(final NBTTagCompound aNBT) { - aNBT.setBoolean("mLocked", this.mLocked); - aNBT.setInteger("mMode", this.mMode); - aNBT.setInteger("mCurrentDimension", this.mCurrentDimension); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - this.mLocked = aNBT.getBoolean("mLocked"); - this.mMode = aNBT.getInteger("mMode"); - this.mCurrentDimension = aNBT.getInteger("mCurrentDimension"); - } - - @Override - public void onFirstTick(final IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - } - - private Map mWirelessChargingMap = new HashMap<>(); - private Map mLocalChargingMap = new HashMap<>(); - - private boolean isValidPlayer(EntityPlayer aPlayer) { - BaseMetaTileEntity aTile = (BaseMetaTileEntity) this.getBaseMetaTileEntity(); - if (mLocked || (aTile != null && aTile.privateAccess())) { - if (aPlayer.getUniqueID() - .equals(getBaseMetaTileEntity().getOwnerUuid())) { - return true; - } else { - return false; - } - } - return true; - } - - @Override - public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (this.getBaseMetaTileEntity() - .isServerSide()) { - - if (this.mCurrentDimension != aBaseMetaTileEntity.getWorld().provider.dimensionId) { - this.mCurrentDimension = aBaseMetaTileEntity.getWorld().provider.dimensionId; - } - - if (aTick % 20 == 0) { - boolean mHasBeenMapped = this.equals(ChargingHelper.getEntry(getTileEntityPosition())); - if (!mHasBeenMapped) { - mHasBeenMapped = ChargingHelper.addEntry(getTileEntityPosition(), this); - } - - if (mHasBeenMapped && !aBaseMetaTileEntity.getWorld().playerEntities.isEmpty()) { - for (Object mTempPlayer : aBaseMetaTileEntity.getWorld().playerEntities) { - if (mTempPlayer instanceof EntityPlayer || mTempPlayer instanceof EntityPlayerMP) { - EntityPlayer mTemp = (EntityPlayer) mTempPlayer; - - if (this.mMode == 1 || this.mMode == 2) { - int tempRange = (this.mMode == 1 ? this.mTier * 20 : this.mTier * 10); - if (getDistanceBetweenTwoPositions(getTileEntityPosition(), getPositionOfEntity(mTemp)) - < tempRange) { - if (isValidPlayer(mTemp) - && !mLocalChargingMap.containsKey(mTemp.getDisplayName())) { - mLocalChargingMap.put(mTemp.getDisplayName(), mTemp.getPersistentID()); - ChargingHelper.addValidPlayer(mTemp, this); - // PlayerUtils.messagePlayer(mTemp, "You have entered charging range. - // ["+tempRange+"m - Local]."); - } - } else { - if (mLocalChargingMap.containsKey(mTemp.getDisplayName())) { - if (mLocalChargingMap.remove(mTemp.getDisplayName()) != null) { - // PlayerUtils.messagePlayer(mTemp, "You have left charging range. - // ["+tempRange+"m - Local]."); - ChargingHelper.removeValidPlayer(mTemp, this); - } - } - } - } - if (this.mMode == 0 || this.mMode == 2) { - int tempRange = (int) (this.mMode == 0 ? 4 * GT_Values.V[this.mTier] - : 2 * GT_Values.V[this.mTier]); - if (getDistanceBetweenTwoPositions(getTileEntityPosition(), getPositionOfEntity(mTemp)) - <= tempRange) { - if (!mWirelessChargingMap.containsKey(mTemp.getDisplayName())) { - if (isValidPlayer(mTemp)) { - mWirelessChargingMap.put(mTemp.getDisplayName(), mTemp.getPersistentID()); - ChargingHelper.addValidPlayer(mTemp, this); - PlayerUtils.messagePlayer( - mTemp, - "You have entered charging range. [" + tempRange + "m - Long-Range]."); - } - } - } else { - if (mWirelessChargingMap.containsKey(mTemp.getDisplayName())) { - if (mWirelessChargingMap.remove(mTemp.getDisplayName()) != null) { - PlayerUtils.messagePlayer( - mTemp, - "You have left charging range. [" + tempRange + "m - Long Range]."); - ChargingHelper.removeValidPlayer(mTemp, this); - } - } - } - } - /* - * if (this.mMode == 0 || this.mMode == 2){ int tempRange = (int) (this.mMode == 0 ? - * 4*GT_Values.V[this.mTier] : 2*GT_Values.V[this.mTier]); if - * (getDistanceBetweenTwoPositions(getTileEntityPosition(), getPositionOfEntity(mTemp)) < - * tempRange){ if (!mWirelessChargingMap.containsKey(mTemp)){ - * mWirelessChargingMap.put(mTemp, mTemp.getPersistentID()); - * PlayerUtils.messagePlayer(mTemp, "You have entered charging range. ["+tempRange+"m]."); - * ChargingHelper.addValidPlayer(mTemp, this); } } else { if - * (mWirelessChargingMap.containsKey(mTemp)){ if (mWirelessChargingMap.remove(mTemp) != - * null){ PlayerUtils.messagePlayer(mTemp, - * "You have left charging range. ["+tempRange+"m]."); - * ChargingHelper.removeValidPlayer(mTemp, this); } } } } - */ - - } - } - } - } - } - } - - public BlockPos getTileEntityPosition() { - return new BlockPos( - this.getBaseMetaTileEntity() - .getXCoord(), - this.getBaseMetaTileEntity() - .getYCoord(), - this.getBaseMetaTileEntity() - .getZCoord(), - this.getBaseMetaTileEntity() - .getWorld()); - } - - public BlockPos getPositionOfEntity(Entity mEntity) { - if (mEntity == null) { - return null; - } - return EntityUtils.findBlockPosUnderEntity(mEntity); - } - - public double getDistanceBetweenTwoPositions(BlockPos objectA, BlockPos objectB) { - if (objectA == null || objectB == null) { - return 0f; - } - int[] objectArray1 = new int[] { objectA.xPos, objectA.yPos, objectA.zPos }; - int[] objectArray2 = new int[] { objectB.xPos, objectB.yPos, objectB.zPos }; - - final double distance = Math.sqrt( - (objectArray2[0] - objectArray1[0]) * (objectArray2[0] - objectArray1[0]) - + (objectArray2[1] - objectArray1[1]) * (objectArray2[1] - objectArray1[1]) - + (objectArray2[2] - objectArray1[2]) * (objectArray2[2] - objectArray1[2])); - return distance; - } - - @Override - public void onRemoval() { - - ChargingHelper.removeEntry(getTileEntityPosition(), this); - - mWirelessChargingMap.clear(); - mLocalChargingMap.clear(); - if (!this.getBaseMetaTileEntity() - .getWorld().playerEntities.isEmpty()) { - for (Object mTempPlayer : this.getBaseMetaTileEntity() - .getWorld().playerEntities) { - if (mTempPlayer instanceof EntityPlayer || mTempPlayer instanceof EntityPlayerMP) { - EntityPlayer mTemp = (EntityPlayer) mTempPlayer; - ChargingHelper.removeValidPlayer(mTemp, this); - } - } - } - - super.onRemoval(); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - - int tempRange; - - if (this.mMode == 0 || this.mMode == 2) { - tempRange = (int) (this.mMode == 0 ? 4 * GT_Values.V[this.mTier] : 2 * GT_Values.V[this.mTier]); - } else { - tempRange = this.mMode == 1 ? this.mTier * 20 : this.mTier * 10; - } - - if (this.mMode == 2) { - PlayerUtils - .messagePlayer(aPlayer, "Mixed Mode | Local: " + this.mTier * 10 + "m | Long: " + tempRange + "m"); - PlayerUtils.messagePlayer(aPlayer, "Players with access:"); - for (String name : this.getLocalMap() - .keySet()) { - PlayerUtils.messagePlayer(aPlayer, "Local: " + name); - } - for (String name : this.getLongRangeMap() - .keySet()) { - PlayerUtils.messagePlayer(aPlayer, "Long: " + name); - } - } else if (this.mMode == 1) { - PlayerUtils.messagePlayer(aPlayer, "Local Mode: " + this.mTier * 20 + "m"); - PlayerUtils.messagePlayer(aPlayer, "Players with access:"); - for (String name : this.getLocalMap() - .keySet()) { - PlayerUtils.messagePlayer(aPlayer, "" + name); - } - - } else { - PlayerUtils.messagePlayer(aPlayer, "Long-range Mode: " + tempRange + "m"); - PlayerUtils.messagePlayer(aPlayer, "Players with access:"); - for (String name : this.getLongRangeMap() - .keySet()) { - PlayerUtils.messagePlayer(aPlayer, "" + name); - } - } - - return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - } - - @Override - public void onServerStart() { - mWirelessChargingMap.clear(); - mLocalChargingMap.clear(); - super.onServerStart(); - } - - @Override - public void onExplosion() { - ChargingHelper.removeEntry(getTileEntityPosition(), this); - super.onExplosion(); - } - - @Override - public void doExplosion(long aExplosionPower) { - ChargingHelper.removeEntry(getTileEntityPosition(), this); - super.doExplosion(aExplosionPower); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEAtmosphericReconditioner.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEAtmosphericReconditioner.java new file mode 100644 index 0000000000..3a85e0aae3 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEAtmosphericReconditioner.java @@ -0,0 +1,887 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; + +import static gregtech.api.enums.GTValues.V; + +import java.util.Collections; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.common.items.IDMetaTool01; +import gregtech.common.items.MetaGeneratedTool01; +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.recipe.common.CI; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; +import gtPlusPlus.xmod.gregtech.api.gui.GTPPUITextures; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEAtmosphericReconditioner extends MTEBasicMachine { + + public int mPollutionReduction = 0; + protected int mBaseEff = 2500; + protected int mOptimalAirFlow = 0; + protected boolean mHasPollution = false; + protected int SLOT_ROTOR = 5; + protected int SLOT_FILTER = 6; + protected static boolean mPollutionEnabled = true; + + protected boolean mSaveRotor = false; + + public MTEAtmosphericReconditioner(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 2, + "Making sure you don't live in Gwalior - Uses 2A", + 3, + 0, + new ITexture[] { new GTRenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_MASSFAB_ACTIVE), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_MASSFAB), + new GTRenderedTexture(TexturesGtBlock.Overlay_MatterFab_Active), + new GTRenderedTexture(TexturesGtBlock.Overlay_MatterFab), + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Vent_Fast), + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Vent), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB_ACTIVE), + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_BOTTOM_MASSFAB) }); + mPollutionEnabled = PollutionUtils.isPollutionEnabled(); + } + + public MTEAtmosphericReconditioner(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 2, aDescription, aTextures, 2, 0); + mPollutionEnabled = PollutionUtils.isPollutionEnabled(); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAtmosphericReconditioner(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public String[] getDescription() { + + boolean highTier = this.mTier >= 7; + + String[] A = ArrayUtils.addAll( + this.mDescriptionArray, + 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", + "Insert an equal tier Conveyor Module to enable automation"); + if (!mPollutionEnabled) { + String[] B = new String[] { "===============================================", + "Pollution is disabled, scrubbers will now have a bonus use", + "They are now able to remove ALL lingering pollution as GT ignores it", "and it will linger forever!", + "===============================================", }; + A = ArrayUtils.addAll(A, B); + } + return A; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mOptimalAirFlow", this.mOptimalAirFlow); + aNBT.setBoolean("mSaveRotor", mSaveRotor); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.mOptimalAirFlow = aNBT.getInteger("mOptimalAirFlow"); + this.mSaveRotor = aNBT.getBoolean("mSaveRotor"); + } + + @Override + public long maxAmperesIn() { + return 2; + } + + @Override + public long getMinimumStoredEU() { + return V[mTier] * 2; + } + + @Override + public long maxEUStore() { + return V[mTier] * 256; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + + // Get Current Pollution Amount. + int mCurrentPollution = getCurrentChunkPollution(); + boolean isIdle = true; + + // Get Inventory Item + ItemStack stackRotor = this.mInventory[SLOT_ROTOR]; + ItemStack stackFilter = this.mInventory[SLOT_FILTER]; + + // Power Drain + long drainEU = maxEUInput() * maxAmperesIn(); + if (aBaseMetaTileEntity.isActive() && aBaseMetaTileEntity.getStoredEU() >= drainEU) { + if (aBaseMetaTileEntity.decreaseStoredEnergyUnits(drainEU, false)) { + isIdle = false; + } else { + aBaseMetaTileEntity.setActive(false); + this.sendSound((byte) -122); + } + } else if (!aBaseMetaTileEntity.isActive() && aBaseMetaTileEntity.getStoredEU() >= drainEU / 4) { + if (aBaseMetaTileEntity.decreaseStoredEnergyUnits((drainEU / 4), false)) { + isIdle = false; + } else { + aBaseMetaTileEntity.setActive(false); + this.sendSound((byte) -122); + } + } else { + aBaseMetaTileEntity.setActive(false); + this.sendSound((byte) -122); + } + + // Only try once/sec. + if (!isIdle && aTick % 20L == 0L) { + + for (int i = 0; i < this.mInventory.length; i++) { + ItemStack aSlotContent = this.mInventory[i]; + if (aSlotContent != null) { + Logger.INFO("Found " + aSlotContent.getDisplayName() + " in slot " + i); + } + } + + for (int i = 0; i < this.mInventory.length; i++) { + if (hasRotor(this.mInventory[i])) { + Logger.INFO("Found Rotor in slot " + i); + break; + } + } + for (int i = 0; i < this.mInventory.length; i++) { + if (hasAirFilter(this.mInventory[i])) { + Logger.INFO("Found Filter in slot " + i); + break; + } + } + + // Check if machine can work. + if ((aBaseMetaTileEntity.isAllowedToWork())) { + Logger.INFO("Can work."); + + // Enable machine animation/graphic + if (hasRotor(stackRotor) && hasAirFilter(stackFilter) && this.mHasPollution) { + if (!this.getBaseMetaTileEntity() + .isActive()) { + Logger.INFO("Set Active."); + aBaseMetaTileEntity.setActive(true); + } + } else if (!this.mHasPollution || mCurrentPollution <= 0 + || stackRotor == null + || stackFilter == null + || !hasRotor(stackRotor) + || !hasAirFilter(stackFilter)) { + if (!this.getBaseMetaTileEntity() + .isActive()) { + Logger.INFO("Set Inactive."); + aBaseMetaTileEntity.setActive(false); + this.sendSound((byte) -122); + } + } + + // If Active. + if (aBaseMetaTileEntity.isActive()) { + Logger.INFO("Doing something."); + + // Do nothing if there is no pollution. + if (this.mHasPollution && mCurrentPollution > 0) { + Logger + .INFO("Has Pollution? " + mHasPollution + ", Current Pollution: " + mCurrentPollution); + + // Only check every 30s. + if (!isIdle && aTick % (20L * 30) == 0L) { + mPollutionEnabled = PollutionUtils.isPollutionEnabled(); + // Clear out pollution if it's disabled, because I am a nice gal. + if (!PollutionUtils.isPollutionEnabled()) { + PollutionUtils.nullifyPollution(this.getBaseMetaTileEntity()); + } + } + + // Use a Turbine + if (hasRotor(stackRotor) && hasAirFilter(stackFilter)) { + Logger.INFO("Found Turbine."); + + mBaseEff = getBaseEfficiency(stackRotor); + mOptimalAirFlow = getOptimalAirFlow(stackRotor); + + // Make sure we have a valid Turbine and Eff/Airflow + if (this.mBaseEff > 0 && this.mOptimalAirFlow > 0) { + // Utils.LOG_WARNING("Pollution Cleaner [5]"); + + // Log Debug information. + Logger.INFO("mBaseEff[1]:" + mBaseEff); + Logger.INFO("mOptimalAirFlow[1]:" + mOptimalAirFlow); + + // Calculate The Voltage we are running + long tVoltage = drainEU; + byte tTier = (byte) Math.max(1, GTUtility.getTier(tVoltage)); + + // Check Sides for Air, + // More air means more pollution processing. + 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 + Logger.INFO("mPollutionReduction[1]:" + reduction); + + // I stole this code + reduction = (MathUtils.safeInt((long) reduction * this.mBaseEff) / 100000) + * mAirSides + * Math.max((tTier - 2), 1); + Logger.INFO("reduction[2]:" + reduction); + reduction = MathUtils.safeInt(((long) reduction / 100) * this.mOptimalAirFlow); + Logger.INFO("reduction[3]:" + reduction); + + mPollutionReduction = reduction; + + // Set a temp to remove variable to aleviate duplicate code. + int toRemove = 0; + + Logger.INFO("mCurrentPollution[4]:" + mCurrentPollution); + Logger.INFO("mCurrentPollution[5]:" + reduction); + if (reduction <= mCurrentPollution) { + // Clean some Air. + toRemove = reduction; + } else { + // Makes sure we don't get negative pollution. + toRemove = mCurrentPollution; + } + + toRemove = toRemove / 2; + Logger.INFO("mCurrentPollution[6]:" + toRemove); + + // We are good to clean + if (toRemove > 0) { + if (damageTurbineRotor() && damageAirFilter()) { + Logger.INFO("Removing " + toRemove + " pollution"); + removePollution(mSaveRotor ? (toRemove / 2) : toRemove); + Logger.INFO("mNewPollution[4]:" + getCurrentChunkPollution()); + } else { + Logger.INFO("Could not damage turbine rotor or Air Filter."); + aBaseMetaTileEntity.setActive(false); + } + } // End of pollution removal block. + } // End of valid air sides block. + } // End of valid toolstats block. + } // End of correct inventory item block. + else { + // Utils.LOG_WARNING("Wrong Tool metaitem Found."); + } + } + } else if (!aBaseMetaTileEntity.isActive()) { + return; + } + } // End of can work block. + else { // Disable Machine. + // aBaseMetaTileEntity.setActive(false); + } + } // 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. + } + + public int getCurrentChunkPollution() { + int mCurrentChunkPollution = 0; + if (this.mTier < 7) { + mCurrentChunkPollution = PollutionUtils.getPollution(getBaseMetaTileEntity()); + } else { + AutoMap aSurrounding = new AutoMap<>(); + World aWorld = this.getBaseMetaTileEntity() + .getWorld(); + int xPos = this.getBaseMetaTileEntity() + .getXCoord(); + int zPos = this.getBaseMetaTileEntity() + .getZCoord(); + Chunk a1 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos - 32); + Chunk a2 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos); + Chunk a3 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos + 32); + Chunk b1 = aWorld.getChunkFromBlockCoords(xPos, zPos - 32); + Chunk b2 = aWorld.getChunkFromBlockCoords(xPos, zPos); + Chunk b3 = aWorld.getChunkFromBlockCoords(xPos, zPos + 32); + Chunk c1 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos - 32); + Chunk c2 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos); + Chunk c3 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos + 32); + aSurrounding.put(a1); + aSurrounding.put(a2); + aSurrounding.put(a3); + aSurrounding.put(b1); + aSurrounding.put(b2); + aSurrounding.put(b3); + aSurrounding.put(c1); + aSurrounding.put(c2); + aSurrounding.put(c3); + for (Chunk r : aSurrounding) { + mCurrentChunkPollution += getPollutionInChunk(r); + } + } + if (mCurrentChunkPollution > 0) { + mHasPollution = true; + } else { + mHasPollution = false; + } + return mCurrentChunkPollution; + } + + public int getPollutionInChunk(Chunk aChunk) { + int mCurrentChunkPollution = PollutionUtils.getPollution(aChunk); + if (mCurrentChunkPollution > 0) { + mHasPollution = true; + } else { + mHasPollution = false; + } + return mCurrentChunkPollution; + } + + public boolean hasRotor(ItemStack rotorStack) { + if (rotorStack != null) { + if (rotorStack.getItem() instanceof ItemBasicScrubberTurbine) { + // Logger.INFO("Found Basic Turbine Rotor."); + return true; + } else if (rotorStack.getItem() instanceof MetaGeneratedTool && rotorStack.getItemDamage() >= 170 + && rotorStack.getItemDamage() <= 179) { + // Logger.INFO("Found Turbine Rotor."); + return true; + } else { + // Logger.INFO("Found: "+rotorStack.getDisplayName()+":"+rotorStack.getItemDamage()); + } + } + // Logger.INFO("Found No Turbine Rotor."); + return false; + } + + public boolean damageTurbineRotor() { + try { + + boolean creativeRotor = false; + ItemStack rotorStack = this.mInventory[SLOT_ROTOR]; + if (rotorStack == null) { + return false; + } else if (rotorStack.getItem() instanceof ItemBasicScrubberTurbine) { + long currentUse = ItemBasicScrubberTurbine.getFilterDamage(rotorStack); + // Remove broken Filter + if (rotorStack.getItemDamage() == 0 && currentUse >= 2000 - 10) { + Logger.INFO("Depleting ItemBasicScrubberTurbine T1"); + this.mInventory[this.SLOT_FILTER] = null; + return false; + } else if (rotorStack.getItemDamage() == 1 && currentUse >= 4000 - 10) { + Logger.INFO("Depleting ItemBasicScrubberTurbine T2"); + this.mInventory[this.SLOT_FILTER] = null; + return false; + } else if (rotorStack.getItemDamage() == 2 && currentUse >= 6000 - 10) { + Logger.INFO("Depleting ItemBasicScrubberTurbine T3"); + this.mInventory[this.SLOT_FILTER] = null; + return false; + } else { + // Do Damage + Logger.INFO("Damaging ItemBasicScrubberTurbine"); + ItemBasicScrubberTurbine.setFilterDamage(rotorStack, currentUse + 10); + Logger.INFO("Rotor Damage: " + currentUse); + return true; + } + } else if (rotorStack.getItem() instanceof MetaGeneratedTool01) { + Materials t1 = MetaGeneratedTool.getPrimaryMaterial(rotorStack); + Materials t2 = MetaGeneratedTool.getSecondaryMaterial(rotorStack); + if (t1 == Materials._NULL && t2 == Materials._NULL) { + Logger.INFO("Found creative rotor."); + creativeRotor = true; + } + } else { + Logger.INFO("Bad item in rotor slot."); + return false; + } + + if (mInventory[SLOT_ROTOR].getItem() instanceof MetaGeneratedTool01 + && ((MetaGeneratedTool) mInventory[SLOT_ROTOR].getItem()).getToolStats(mInventory[SLOT_ROTOR]) + .getSpeedMultiplier() > 0 + && MetaGeneratedTool.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.INFO("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]); + * Logger.INFO("Trying to do "+damageValue+" damage to the rotor. [2]"); + */ + + // Damage Rotor + // int rotorDurability = this.mInventory[this.SLOT_ROTOR].getItemDamage(); + long rotorDamage = creativeRotor ? 0 + : MetaGeneratedTool.getToolDamage(this.mInventory[this.SLOT_ROTOR]); + long rotorDurabilityMax = creativeRotor ? Integer.MAX_VALUE + : MetaGeneratedTool.getToolMaxDamage(this.mInventory[this.SLOT_ROTOR]); + long rotorDurability = (rotorDurabilityMax - rotorDamage); + Logger.INFO( + "Rotor Damage: " + rotorDamage + + " | Max Durability: " + + rotorDurabilityMax + + " | " + + " Remaining Durability: " + + rotorDurability); + if (rotorDurability >= damageValue) { + + if (!mSaveRotor) { + Logger.INFO("Damaging Rotor."); + + if (!creativeRotor) GTModHandler + .damageOrDechargeItem(this.mInventory[this.SLOT_ROTOR], (int) damageValue, 0, null); + + long tempDur = MetaGeneratedTool.getToolDamage(this.mInventory[this.SLOT_ROTOR]); + if (tempDur < rotorDurabilityMax) { + return true; + } else { + rotorDurability = 0; + } + } else { + Logger.INFO("Damaging Rotor."); + if (rotorDurability > 1000) { + if (!creativeRotor) GTModHandler + .damageOrDechargeItem(this.mInventory[this.SLOT_ROTOR], (int) damageValue / 2, 0, null); + long tempDur = MetaGeneratedTool.getToolDamage(this.mInventory[this.SLOT_ROTOR]); + if (tempDur < rotorDurabilityMax) { + return true; + } else { + rotorDurability = 0; + } + } + } + } + + if (rotorDurability <= 0 && !mSaveRotor && !creativeRotor) { + Logger.INFO("Destroying Rotor."); + this.mInventory[this.SLOT_ROTOR] = null; + return false; + } else if (rotorDurability <= 0 && mSaveRotor) { + Logger.INFO("Saving Rotor."); + return false; + } + + } else { + Logger.INFO("Bad Rotor."); + return false; + } + } catch (Throwable t) { + t.printStackTrace(); + } + return false; + } + + public int getFreeSpaces() { + int mAir = 0; + IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); + if (aBaseMetaTileEntity.getAirOffset(1, 0, 0)) { + mAir++; + } + if (aBaseMetaTileEntity.getAirOffset(-1, 0, 0)) { + mAir++; + } + if (aBaseMetaTileEntity.getAirOffset(0, 0, 1)) { + mAir++; + } + if (aBaseMetaTileEntity.getAirOffset(0, 0, -1)) { + mAir++; + } + if (aBaseMetaTileEntity.getAirOffset(0, 1, 0)) { + mAir++; + } + if (aBaseMetaTileEntity.getAirOffset(0, -1, 0)) { + mAir++; + } + return mAir; + } + + public boolean removePollution(int toRemove) { + + if (this == null || this.getBaseMetaTileEntity() == null + || this.getBaseMetaTileEntity() + .getWorld() == null) { + return false; + } + + if (this.mTier < 7) { + int startPollution = getCurrentChunkPollution(); + Logger.INFO("Current Chunk Pollution: " + startPollution); + PollutionUtils.removePollution(this.getBaseMetaTileEntity(), toRemove); + int after = getCurrentChunkPollution(); + Logger.INFO("Current Chunk Pollution: " + after); + return (after < startPollution); + } else { + int chunksWithRemoval = 0; + int totalRemoved = 0; + AutoMap aSurrounding = new AutoMap<>(); + 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(); + + Chunk a1 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos - 32); + Chunk a2 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos); + Chunk a3 = aWorld.getChunkFromBlockCoords(xPos - 32, zPos + 32); + Chunk b1 = aWorld.getChunkFromBlockCoords(xPos, zPos - 32); + Chunk b2 = aWorld.getChunkFromBlockCoords(xPos, zPos); + Chunk b3 = aWorld.getChunkFromBlockCoords(xPos, zPos + 32); + Chunk c1 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos - 32); + Chunk c2 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos); + Chunk c3 = aWorld.getChunkFromBlockCoords(xPos + 32, zPos + 32); + + aSurrounding.put(a1); + aSurrounding.put(a2); + aSurrounding.put(a3); + aSurrounding.put(b1); + aSurrounding.put(b2); + aSurrounding.put(b3); + 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.INFO( + "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++; + after = getPollutionInChunk(r); + } else { + after = 0; + } + if (startPollution - after > 0) { + totalRemoved += (startPollution - after); + } + Logger.INFO( + "Removed " + (startPollution - after) + + " pollution from chunk " + + r.xPosition + + ", " + + r.zPosition + + " | " + + after); + } + return totalRemoved > 0 && chunksWithRemoval > 0; + } + } + + public boolean removePollution(Chunk aChunk, int toRemove) { + int before = getCurrentChunkPollution(); + PollutionUtils.removePollution(aChunk, toRemove); + int after = getCurrentChunkPollution(); + return (after < before); + } + + public boolean hasAirFilter(ItemStack filter) { + if (filter == null) { + return false; + } + return filter.getItem() instanceof ItemAirFilter; + } + + public boolean damageAirFilter() { + ItemStack filter = this.mInventory[this.SLOT_FILTER]; + if (filter == null) { + return false; + } + + boolean creativeRotor = false; + ItemStack rotorStack = this.mInventory[SLOT_ROTOR]; + if (rotorStack != null) { + if (rotorStack.getItem() instanceof MetaGeneratedTool01) { + Materials t1 = MetaGeneratedTool.getPrimaryMaterial(rotorStack); + Materials t2 = MetaGeneratedTool.getSecondaryMaterial(rotorStack); + if (t1 == Materials._NULL && t2 == Materials._NULL) { + creativeRotor = true; + } + } + } + + if (creativeRotor) { + return true; + } + + if (filter.getItem() instanceof ItemAirFilter) { + + long currentUse = ItemAirFilter.getFilterDamage(filter); + + // Remove broken Filter + if (filter.getItemDamage() == 0 && currentUse >= 50 - 1) { + this.mInventory[this.SLOT_FILTER] = null; + return false; + } else if (filter.getItemDamage() == 1 && currentUse >= 2500 - 1) { + this.mInventory[this.SLOT_FILTER] = null; + return false; + } else { + // Do Damage + ItemAirFilter.setFilterDamage(filter, currentUse + 1); + Logger.INFO("Filter Damage: " + currentUse); + return true; + } + } + return false; + } + + @Override + public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { + if (aIndex == SLOT_FILTER) { + if (aStack.getItem() instanceof ItemAirFilter) { + Logger.INFO("Inserting Air Filter into " + aIndex); + return true; + } + } + if (aIndex == SLOT_ROTOR) { + if (this.mInventory[7] != null) { + Logger.INFO("Found conveyor, can automate turbines. Inserting into " + aIndex); + if (aStack.getItem() instanceof ItemBasicScrubberTurbine) { + return true; + } + if (aStack.getItem() instanceof MetaGeneratedTool && aStack.getItemDamage() >= 170 + && aStack.getItemDamage() <= 179) { + return true; + } + } + } + return false; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + } + + @Override + public void doSound(byte aIndex, double aX, double aY, double aZ) { + if (aIndex == -120) { + GTUtility.doSoundAtClient(SoundResource.IC2_TOOLS_BATTERY_USE, MathUtils.randInt(5, 50), 0.05F, aX, aY, aZ); + } else { + super.doSound((byte) 0, aX, aY, aZ); + } + } + + @Override + public String[] getInfoData() { + AutoMap aTooltipSuper = new AutoMap<>(); + for (String s : super.getInfoData()) { + aTooltipSuper.put(s); + } + int mAirSides = getFreeSpaces(); + int reduction = 0; + + try { + long tVoltage = maxEUInput(); + byte tTier = (byte) Math.max(1, GTUtility.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; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCoverID) { + if (side.offsetY != 0) { + return false; + } + return super.allowCoverOnSide(side, aCoverID); + } + + @Override + public ITexture[] getTopFacingInactive(byte aColor) { + return super.getTopFacingInactive(aColor); + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + aNBT.setInteger("mOptimalAirFlow", this.mOptimalAirFlow); + aNBT.setBoolean("mSaveRotor", mSaveRotor); + super.setItemNBT(aNBT); + } + + private static ItemStack[] sGregTurbines; + + public static ItemStack getTieredTurbine(int aTier) { + if (sGregTurbines == null) { + sGregTurbines = new ItemStack[3]; + sGregTurbines[0] = MetaGeneratedTool.sInstances.get("gt.metatool.01") + .getToolWithStats(IDMetaTool01.TURBINE_SMALL.ID, 1, Materials.Iron, Materials.Iron, null); + sGregTurbines[1] = MetaGeneratedTool.sInstances.get("gt.metatool.01") + .getToolWithStats(IDMetaTool01.TURBINE_SMALL.ID, 1, Materials.Bronze, Materials.Bronze, null); + sGregTurbines[2] = MetaGeneratedTool.sInstances.get("gt.metatool.01") + .getToolWithStats(IDMetaTool01.TURBINE_SMALL.ID, 1, Materials.Steel, Materials.Steel, null); + } else { + return sGregTurbines[aTier]; + } + + return null; + } + + public int getBaseEfficiency(ItemStack aStackRotor) { + if (aStackRotor.getItem() instanceof ItemBasicScrubberTurbine) { + return getBaseEfficiency(getTieredTurbine(aStackRotor.getItemDamage())); + } + return (int) ((50.0F + (10.0F * ((MetaGeneratedTool) aStackRotor.getItem()).getToolCombatDamage(aStackRotor))) + * 100); + } + + public int getOptimalAirFlow(ItemStack aStackRotor) { + if (aStackRotor.getItem() instanceof ItemBasicScrubberTurbine) { + return getOptimalAirFlow(getTieredTurbine(aStackRotor.getItemDamage())); + } + return (int) Math.max( + Float.MIN_NORMAL, + ((MetaGeneratedTool) aStackRotor.getItem()).getToolStats(aStackRotor) + .getSpeedMultiplier() * MetaGeneratedTool.getPrimaryMaterial(aStackRotor).mToolSpeed * 50); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget(new SlotWidget(inventoryHandler, SLOT_ROTOR).setFilter(stack -> { + if (stack.getItem() instanceof ItemBasicScrubberTurbine) { + return true; + } + return stack.getItem() instanceof MetaGeneratedTool && stack.getItemDamage() >= 170 + && stack.getItemDamage() <= 179; + }) + .setBackground(getGUITextureSet().getItemSlot(), GTPPUITextures.OVERLAY_SLOT_TURBINE) + .setPos(52, 24)) + .widget( + new SlotWidget(inventoryHandler, SLOT_FILTER) + .setFilter(stack -> stack.getItem() instanceof ItemAirFilter) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_RECYCLE) + .setPos(106, 24)) + .widget( + new SlotWidget(inventoryHandler, 7) + .setFilter(stack -> GTUtility.areStacksEqual(stack, CI.getConveyor(mTier, 1), true)) + .setPos(124, 62)); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_INFORMATION) + .dynamicTooltip(() -> Collections.singletonList("Reduction: " + mPollutionReduction + "/s")) + .attachSyncer( + new FakeSyncWidget.IntegerSyncer(() -> mPollutionReduction, val -> mPollutionReduction = val), + builder, + (widget, val) -> widget.notifyTooltipChange()) + .setPos(163, 5) + .setSize(7, 18)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEAutoChisel.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEAutoChisel.java new file mode 100644 index 0000000000..6cdc97130b --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEAutoChisel.java @@ -0,0 +1,184 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; + +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import com.gtnewhorizons.modularui.api.drawable.FallbackableUITexture; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicMachine; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.BasicUIProperties; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import team.chisel.carving.Carving; + +public class MTEAutoChisel extends MTEBasicMachine { + + private ItemStack mInputCache; + private ItemStack mOutputCache; + + public MTEAutoChisel(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, + "Chisels things, Gregtech style", + 1, + 1, + new ITexture[] { new GTRenderedTexture(BlockIcons.OVERLAY_SIDE_MASSFAB_ACTIVE), + new GTRenderedTexture(BlockIcons.OVERLAY_SIDE_MASSFAB), + new GTRenderedTexture(BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_ACTIVE), + new GTRenderedTexture(BlockIcons.OVERLAY_FRONT_MULTI_SMELTER), + new GTRenderedTexture(TexturesGtBlock.Overlay_MatterFab_Active), + new GTRenderedTexture(TexturesGtBlock.Overlay_MatterFab), + new GTRenderedTexture(BlockIcons.OVERLAY_BOTTOM_MASSFAB_ACTIVE), + new GTRenderedTexture(BlockIcons.OVERLAY_BOTTOM_MASSFAB) }); + } + + public MTEAutoChisel(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures, 1, 1); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAutoChisel(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll( + this.mDescriptionArray, + "What you want to chisel goes in slot 1", + "What you want to get goes in the special slot (bottom right)", + "If special slot is empty, first chisel result is used"); + } + + private boolean hasValidCache(ItemStack aStack, ItemStack aSpecialSlot, boolean aClearOnFailure) { + if (mInputCache != null && mOutputCache != null) { + if (GTUtility.areStacksEqual(aStack, mInputCache) && GTUtility.areStacksEqual(aSpecialSlot, mOutputCache)) { + return true; + } + } + // clear cache if it was invalid + if (aClearOnFailure) { + mInputCache = null; + mOutputCache = null; + } + return false; + } + + private void cacheItem(ItemStack mInputItem, ItemStack mOutputItem) { + mOutputCache = mOutputItem.copy(); + mInputCache = mInputItem.copy(); + } + + @Override + protected boolean allowPutStackValidated(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return hasValidCache(aStack, this.getSpecialSlot(), false) ? true + : super.allowPutStackValidated(aBaseMetaTileEntity, aIndex, side, aStack) && hasChiselResults(aStack); + } + + // lets make sure the user isn't trying to make something from a block that doesn't have this as a valid target + private static boolean canBeMadeFrom(ItemStack from, ItemStack to) { + List results = getItemsForChiseling(from); + for (ItemStack s : results) { + if (s.getItem() == to.getItem() && s.getItemDamage() == to.getItemDamage()) { + return true; + } + } + return false; + } + + // lets make sure the user isn't trying to make something from a block that doesn't have this as a valid target + private static boolean hasChiselResults(ItemStack from) { + List results = getItemsForChiseling(from); + return results.size() > 0; + } + + private static List getItemsForChiseling(ItemStack aStack) { + return Carving.chisel.getItemsForChiseling(aStack); + } + + private static ItemStack getChiselOutput(ItemStack aInput, ItemStack aTarget) { + ItemStack tOutput = null; + if (aTarget != null && canBeMadeFrom(aInput, aTarget)) { + tOutput = aTarget; + } else if (aTarget != null && !canBeMadeFrom(aInput, aTarget)) { + tOutput = null; + } else { + tOutput = getItemsForChiseling(aInput).get(0); + } + return tOutput; + } + + @Override + public int checkRecipe() { + ItemStack tOutput = null; + ItemStack aInput = getInputAt(0); + ItemStack aTarget = getSpecialSlot(); + boolean tIsCached = hasValidCache(aInput, aTarget, true); + if (aInput != null && hasChiselResults(aInput) && aInput.stackSize > 0) { + tOutput = tIsCached ? mOutputCache.copy() : getChiselOutput(aInput, aTarget); + if (tOutput != null) { + tOutput = tOutput.copy(); + tOutput.stackSize = 1; + // We can chisel this + if (canOutput(tOutput)) { + getInputAt(0).stackSize -= 1; + calculateOverclockedNess(16, 20); + // In case recipe is too OP for that machine + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && mEUt == Integer.MAX_VALUE - 1) { + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + } + if (!tIsCached) { + cacheItem(ItemUtils.getSimpleStack(aInput, 1), ItemUtils.getSimpleStack(tOutput, 1)); + } + this.mOutputItems[0] = tOutput.copy(); + return FOUND_AND_SUCCESSFULLY_USED_RECIPE; + } else { + mOutputBlocked++; + return FOUND_RECIPE_BUT_DID_NOT_MEET_REQUIREMENTS; + } + } + } + return DID_NOT_FIND_RECIPE; + } + + private static final FallbackableUITexture progressBarTexture = GTUITextures + .fallbackableProgressbar("auto_chisel", GTUITextures.PROGRESSBAR_COMPRESS); + + @Override + protected BasicUIProperties getUIProperties() { + return super.getUIProperties().toBuilder() + .progressBarTexture(progressBarTexture) + .build(); + } + + @Override + protected SlotWidget createItemInputSlot(int index, IDrawable[] backgrounds, Pos2d pos) { + return (SlotWidget) super.createItemInputSlot(index, backgrounds, pos) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_COMPRESSOR); + } + + @Override + protected SlotWidget createSpecialSlot(IDrawable[] backgrounds, Pos2d pos, BasicUIProperties uiProperties) { + return (SlotWidget) super.createSpecialSlot(backgrounds, pos, uiProperties) + .setGTTooltip(() -> mTooltipCache.getData("GTPP.machines.chisel_slot.tooltip")); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTECropHarvestor.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTECropHarvestor.java new file mode 100644 index 0000000000..07884ed745 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTECropHarvestor.java @@ -0,0 +1,706 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Map; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import com.gtnewhorizon.gtnhlib.util.map.ItemStackMap; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.api.gui.GTPPUITextures; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import ic2.api.crops.CropCard; +import ic2.api.crops.ICropTile; +import ic2.core.item.DamageHandler; + +public class MTECropHarvestor extends MTEBasicTank { + + private static final int SLOT_WEEDEX_1 = 1; + private static final int SLOT_WEEDEX_2 = 2; + private static final int SLOT_FERT_1 = 3; + private static final int SLOT_FERT_4 = 6; + private static final int SLOT_OUTPUT_START = 7; + + public boolean mModeAlternative = false; + public boolean mHarvestEnabled = true; + + public MTECropHarvestor(final int aID, final int aTier, final String aDescription) { + super( + aID, + "basicmachine.cropharvester.0" + aTier, + "Crop Manager (" + GTValues.VN[aTier] + ")", + aTier, + 21, + aDescription); + } + + public MTECropHarvestor(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, 21, aDescription, aTextures); + } + + @Override + public boolean isTransformerUpgradable() { + return true; + } + + @Override + public boolean isOverclockerUpgradable() { + return true; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public long maxAmperesIn() { + return 8; + } + + @Override + public long getMinimumStoredEU() { + return GTValues.V[this.mTier]; + } + + @Override + public long maxEUStore() { + return GTValues.V[this.mTier] * (this.mTier * GTValues.V[this.mTier]); + } + + @Override + public long maxEUInput() { + return GTValues.V[this.mTier]; + } + + @Override + public int getCapacity() { + return 32000 * this.mTier; + } + + @Override + public int getTankPressure() { + return -100; + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTECropHarvestor(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public int getSizeInventory() { + return 21; + } + + private static int getRange(int aTier) { + return switch (aTier) { + case 1 -> 1; + case 2 -> 5; + case 3 -> 9; + case 4 -> 13; + case 5 -> 17; + case 6 -> 21; + case 7 -> 25; + case 8 -> 29; + case 9 -> 33; + default -> 0; + }; + } + + private HashSet mCropCache = new HashSet<>(); + private boolean mInvalidCache = false; + + public boolean doesInventoryHaveSpace() { + for (int i = SLOT_OUTPUT_START; i < this.getSizeInventory(); i++) { + if (this.mInventory[i] == null || this.mInventory[i].stackSize < 64) { + return true; + } + } + return false; + } + + public long powerUsage() { + return this.maxEUInput() / 8; + } + + public long powerUsageSecondary() { + return this.maxEUInput() / 32; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (!getBaseMetaTileEntity().isServerSide() || !getBaseMetaTileEntity().isAllowedToWork() + || (!getBaseMetaTileEntity().hasWorkJustBeenEnabled() && aTick % 100 != 0)) return; + + if (this.getBaseMetaTileEntity() + .getUniversalEnergyStored() < getMinimumStoredEU()) return; + + int aTileX = this.getBaseMetaTileEntity() + .getXCoord(); + int aTileY = this.getBaseMetaTileEntity() + .getXCoord(); + int aTileZ = this.getBaseMetaTileEntity() + .getXCoord(); + + int aRadius = 10 + getRange(this.mTier); + int aSide = (aRadius - 1) / 2; + Map aAllDrops = new ItemStackMap<>(true); + + if (this.mCropCache.isEmpty() || aTick % 1200 == 0 || this.mInvalidCache) { + if (!this.mCropCache.isEmpty()) { + this.mCropCache.clear(); + } + // Logger.INFO("Looking for crops."); + for (int y = -2; y <= 2; y++) { + for (int x = (-aSide); x <= aSide; x++) { + for (int z = (-aSide); z <= aSide; z++) { + TileEntity tTileEntity = getBaseMetaTileEntity().getTileEntityOffset(x, y, z); + if (tTileEntity != null && tTileEntity instanceof ICropTile tCrop) { + this.mCropCache.add(tCrop); + } + } + } + } + } + + // Process Cache + if (!doesInventoryHaveSpace()) return; + + for (ICropTile tCrop : this.mCropCache) { + if (tCrop == null) { + this.mInvalidCache = true; + break; + } + CropCard aCrop = tCrop.getCrop(); + if (aCrop == null) continue; + + if (this.mModeAlternative) processSecondaryFunctions(tCrop); + if (!this.mHarvestEnabled) continue; + + if (aCrop.canBeHarvested(tCrop) && tCrop.getSize() == aCrop.getOptimalHavestSize(tCrop)) { + if (!getBaseMetaTileEntity().decreaseStoredEnergyUnits(powerUsage(), true)) continue; + ItemStack[] aHarvest = tCrop.harvest_automated(true); + if (aHarvest == null) continue; + + for (ItemStack aStack : aHarvest) { + if (!ItemUtils.checkForInvalidItems(aStack)) continue; + if (this.mTier * 5 > MathUtils.randInt(1, 100)) { + aStack.stackSize += Math.floor(tCrop.getGain() / 10); + Logger.INFO("Bonus output given for " + aCrop.displayName()); + } + Logger.INFO("Harvested " + aCrop.displayName()); + aAllDrops.merge(aStack, aStack.stackSize, Integer::sum); + } + } + } + + if (aAllDrops.isEmpty()) return; + + Logger.INFO("Handling " + aAllDrops.size() + " Harvests"); + + for (var dropEntry : aAllDrops.entrySet()) { + ItemStack dropItem = dropEntry.getKey(); + int dropAmount = dropEntry.getValue(); + + // how this can happen, idk + if (dropItem == null) continue; + + for (int i = SLOT_OUTPUT_START; i < this.getSizeInventory() && dropAmount > 0; i++) { + ItemStack invStack = mInventory[i]; + + // If the slot is empty, create a new stack for the drop item, else check if it is the same as the drop + // and merge if possible + if (invStack == null || GTUtility.isStackInvalid(invStack) || invStack.stackSize == 0) { + int stackSize = Math.min(dropAmount, dropItem.getMaxStackSize()); + getBaseMetaTileEntity().setInventorySlotContents(i, GTUtility.copyAmount(stackSize, dropItem)); + dropAmount -= stackSize; + } else if (GTUtility.areStacksEqual(invStack, dropItem)) { + int space = Math.min(invStack.getMaxStackSize(), getInventoryStackLimit()) - invStack.stackSize; + if (dropAmount <= space) { + // if the drop amount fits + getBaseMetaTileEntity().addStackToSlot(i, invStack, dropAmount); + dropAmount = 0; + } else { + // fill the slot + getBaseMetaTileEntity().addStackToSlot(i, invStack, space); + dropAmount -= space; + } + } + } + } + } + + public boolean hasFertilizer() { + for (int i = SLOT_FERT_1; i <= SLOT_FERT_4; i++) { + if (this.mInventory[i] != null) { + return true; + } + } + return false; + } + + public boolean consumeFertilizer(boolean aSimulate) { + if (hasFertilizer()) { + for (int i = SLOT_FERT_1; i <= SLOT_FERT_4; i++) { + if (this.mInventory[i] != null) { + consume(i, 1, aSimulate); + return true; + } + } + } + return false; + } + + public boolean hasWeedEX() { + for (int i = SLOT_WEEDEX_1; i <= SLOT_WEEDEX_2; i++) { + if (this.mInventory[i] != null) { + return true; + } + } + return false; + } + + public boolean consumeWeedEX(boolean aSimulate) { + if (hasWeedEX()) { + for (int i = SLOT_WEEDEX_1; i <= SLOT_WEEDEX_2; i++) { + if (this.mInventory[i] != null) { + damage(i, 1, aSimulate); + return true; + } + } + } + return false; + } + + public void processSecondaryFunctions(ICropTile aCrop) { + if (!this.mModeAlternative) { + return; + } + if (hasFertilizer() && consumeFertilizer(true) + && this.getBaseMetaTileEntity() + .getUniversalEnergyStored() >= getMinimumStoredEU() + && getBaseMetaTileEntity().decreaseStoredEnergyUnits(powerUsageSecondary(), true) + && applyFertilizer(aCrop)) { + if (consumeFertilizer(false)) { + // Logger.INFO("Consumed Fert."); + } + } + if (this.getFluidAmount() > 0 && this.getBaseMetaTileEntity() + .getUniversalEnergyStored() >= getMinimumStoredEU() + && getBaseMetaTileEntity().decreaseStoredEnergyUnits(powerUsageSecondary(), true) + && applyHydration(aCrop)) { + // Logger.INFO("Consumed Water."); + } + if (hasWeedEX() && consumeWeedEX(true) + && this.getBaseMetaTileEntity() + .getUniversalEnergyStored() >= getMinimumStoredEU() + && getBaseMetaTileEntity().decreaseStoredEnergyUnits(powerUsageSecondary(), true) + && applyWeedEx(aCrop)) { + if (consumeWeedEX(false)) { + // Logger.INFO("Consumed Weed-EX."); + } + } + } + + public boolean applyWeedEx(ICropTile aCrop) { + if (aCrop.getWeedExStorage() < 150) { + aCrop.setWeedExStorage(aCrop.getWeedExStorage() + 50); + boolean triggerDecline; + triggerDecline = aCrop.getWorld().rand.nextInt(3) == 0; + if (aCrop.getCrop() != null && aCrop.getCrop() + .isWeed(aCrop) && aCrop.getWeedExStorage() >= 75 && triggerDecline) { + switch (aCrop.getWorld().rand.nextInt(5)) { + case 0: + if (aCrop.getGrowth() > 0) { + aCrop.setGrowth((byte) (aCrop.getGrowth() - 1)); + } + case 1: + if (aCrop.getGain() > 0) { + aCrop.setGain((byte) (aCrop.getGain() - 1)); + } + default: + if (aCrop.getResistance() > 0) { + aCrop.setResistance((byte) (aCrop.getResistance() - 1)); + } + } + } + return true; + } else { + return false; + } + } + + public boolean applyFertilizer(ICropTile aCrop) { + if (aCrop.getNutrientStorage() >= 100) { + return false; + } else { + // Logger.INFO("Current Nutrient: "+aCrop.getNutrientStorage()+" for "+aCrop.getCrop().displayName()); + aCrop.setNutrientStorage(aCrop.getNutrientStorage() + 100); + return true; + } + } + + public boolean applyHydration(ICropTile aCrop) { + if (aCrop.getHydrationStorage() >= 200 || this.getFluidAmount() == 0) { + // Logger.INFO("Hydration Max"); + return false; + } else { + int apply = 200 - aCrop.getHydrationStorage(); + if (this.getFluidAmount() >= 0) { + int drain = 0; + if (this.getFluidAmount() >= apply) { + drain = apply; + } else { + drain = this.getFluidAmount(); + } + this.mFluid.amount -= drain; + if (this.mFluid.amount <= 0) { + this.mFluid = null; + } + // Logger.INFO("Did Hydrate"); + aCrop.setHydrationStorage(aCrop.getHydrationStorage() + drain); + return true; + } else { + // Logger.INFO("No water?"); + return false; + } + } + } + + public boolean consume(int aSlot, int amount, boolean simulate) { + ItemStack stack = this.mInventory[aSlot]; + if (stack != null && stack.stackSize >= amount) { + int currentAmount = Math.min(amount, stack.stackSize); + amount -= currentAmount; + if (!simulate) { + if (stack.stackSize == currentAmount) { + this.mInventory[aSlot] = null; + } else { + stack.stackSize -= currentAmount; + } + } else { + return amount >= 0; + } + return true; + } + return false; + } + + public ItemStack damage(int aSlot, int amount, boolean simulate) { + ItemStack ret = null; + int damageApplied = 0; + ItemStack stack = this.mInventory[aSlot]; + Item item = stack.getItem(); + if (stack != null && item.isDamageable() + && (ret == null || stack.getItem() == ret.getItem() && ItemStack.areItemStackTagsEqual(stack, ret))) { + if (simulate) { + stack = stack.copy(); + } + int maxDamage = DamageHandler.getMaxDamage(stack); + while (amount > 0 && stack.stackSize > 0) { + int currentAmount = Math.min(amount, maxDamage - DamageHandler.getDamage(stack)); + DamageHandler.damage(stack, currentAmount, null); + damageApplied += currentAmount; + amount -= currentAmount; + if (DamageHandler.getDamage(stack) >= maxDamage) { + --stack.stackSize; + DamageHandler.setDamage(stack, 0); + } + + if (ret == null) { + ret = stack.copy(); + } + } + if (stack.stackSize == 0 && !simulate) { + this.mInventory[aSlot] = null; + } + } + + if (ret != null) { + int i = DamageHandler.getMaxDamage(ret); + ret.stackSize = damageApplied / i; + DamageHandler.setDamage(ret, damageApplied % i); + } + return ret; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return aStack != null && aIndex >= SLOT_OUTPUT_START && aIndex < this.getSizeInventory(); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (aStack != null) { + if (aStack.getItem() + .getUnlocalizedName() + .equals("ic2.itemFertilizer")) { + return aIndex >= SLOT_FERT_1 && aIndex <= SLOT_FERT_4; + } else if (aStack.getItem() + .getUnlocalizedName() + .equals("ic2.itemWeedEx")) { + return aIndex >= SLOT_WEEDEX_1 && aIndex <= SLOT_WEEDEX_2; + } + } + return false; + } + + @Override + public String[] getDescription() { + int aRadius = 10 + getRange(this.mTier); + int aSide = (aRadius - 1) / 2; + return ArrayUtils.addAll( + this.mDescriptionArray, + "Secondary mode can Hydrate/Fertilize/Weed-EX", + "Consumes " + powerUsage() + "eu per harvest", + "Consumes " + powerUsageSecondary() + "eu per secondary operation", + "Can harvest 2 block levels above and below itself", + "Radius: " + aSide + " blocks each side (" + aRadius + "x3x" + aRadius + ")", + "Has " + (this.mTier * 5) + "% chance for extra drops", + "Holds " + this.getCapacity() + "L of Water", + GTPPCore.GT_Tooltip.get()); + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { + return true; + } + + /* + * @Override public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { if (aSide == + * aFacing) return 118+(aRedstone?8:0); if (GT_Utility.getOppositeSide(aSide) == aFacing) return + * 113+(aRedstone?8:0); int tIndex = 128+(aRedstone?8:0); switch (aFacing) { case 0: return tIndex+64; case 1: + * return tIndex+32; case 2: switch (aSide) { case 0: return tIndex+32; case 1: return tIndex+32; case 4: return + * tIndex+16; case 5: return tIndex+48; } case 3: switch (aSide) { case 0: return tIndex+64; case 1: return + * tIndex+64; case 4: return tIndex+48; case 5: return tIndex+16; } case 4: switch (aSide) { case 0: return + * tIndex+16; case 1: return tIndex+16; case 2: return tIndex+48; case 3: return tIndex+16; } case 5: switch (aSide) + * { case 0: return tIndex+48; case 1: return tIndex+48; case 2: return tIndex+16; case 3: return tIndex+48; } } + * return tIndex; } + */ + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFront(i); + rTextures[6][i + 1] = this.getBack(i); + rTextures[7][i + 1] = this.getBottom(i); + rTextures[8][i + 1] = this.getTop(i); + rTextures[9][i + 1] = this.getSides(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == ForgeDirection.DOWN || side == ForgeDirection.UP) { + return this.mTextures[3][aColorIndex + 1]; + } else { + return this.mTextures[4][aColorIndex + 1]; + } + /* + * return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 : aSide == GT_Utility.getOppositeSide(aFacing) + * ? 1 : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + */ + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_CropHarvester_Cutter) }; + } + + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_CropHarvester_Cutter) }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_CropHarvester_Boxes) }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_CropHarvester_Boxes) }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_CropHarvester_Cutter) }; + } + + @Override + public boolean doesFillContainers() { + return false; + } + + @Override + public boolean doesEmptyContainers() { + return false; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return false; + } + + @Override + public boolean displaysItemStack() { + return false; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("mModeAlternative", this.mModeAlternative); + aNBT.setBoolean("mHarvestEnabled", this.mHarvestEnabled); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.mModeAlternative = aNBT.getBoolean("mModeAlternative"); + if (aNBT.hasKey("mHarvestEnabled")) { + this.mHarvestEnabled = aNBT.getBoolean("mHarvestEnabled"); + } + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new CycleButtonWidget().setToggle(() -> mModeAlternative, val -> mModeAlternative = val) + .setTexture(GTPPUITextures.OVERLAY_BUTTON_HARVESTER_MODE) + .addTooltip(0, "Enable Hydration/Fertilizing/Weed-EX") + .addTooltip(1, "Disable Hydration/Fertilizing/Weed-EX") + .setBackground(GTUITextures.BUTTON_STANDARD) + .setPos(47, 63) + .setSize(18, 18)); + builder.widget( + new CycleButtonWidget().setToggle(() -> mHarvestEnabled, val -> mHarvestEnabled = val) + .setTexture(GTPPUITextures.OVERLAY_BUTTON_HARVESTER_TOGGLE) + .addTooltip(0, "Enable Harvest") + .addTooltip(1, "Disable Harvest") + .setBackground(GTUITextures.BUTTON_STANDARD) + .setPos(67, 63) + .setSize(18, 18)); + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 2) + .startFromSlot(SLOT_WEEDEX_1) + .endAtSlot(SLOT_WEEDEX_2) + .applyForWidget( + widget -> widget.setFilter( + stack -> stack != null && stack.getItem() + .getUnlocalizedName() + .equals("ic2.itemWeedEx")) + .setBackground(getGUITextureSet().getItemSlot(), GTPPUITextures.OVERLAY_SLOT_WEED_EX)) + .build() + .setPos(7, 13)) + .widget( + SlotGroup.ofItemHandler(inventoryHandler, 2) + .startFromSlot(SLOT_FERT_1) + .endAtSlot(SLOT_FERT_4) + .applyForWidget( + widget -> widget.setFilter( + stack -> stack != null && stack.getItem() + .getUnlocalizedName() + .equals("ic2.itemFertilizer")) + .setBackground(getGUITextureSet().getItemSlot(), GTPPUITextures.OVERLAY_SLOT_FERTILIZER)) + .build() + .setPos(7, 31)) + .widget( + SlotGroup.ofItemHandler(inventoryHandler, 6) + .startFromSlot(SLOT_OUTPUT_START) + .endAtSlot(SLOT_OUTPUT_START + 6 * 3) + .canInsert(false) + .build() + .setPos(61, 7)); + builder + .widget( + new ProgressBar() + .setTexture(GTPPUITextures.PROGRESSBAR_BOILER_EMPTY, GTUITextures.PROGRESSBAR_BOILER_WATER, 54) + .setDirection(ProgressBar.Direction.UP) + .setProgress(() -> (float) getFluidAmount() / getCapacity()) + .setSynced(false, false) + .dynamicTooltip( + () -> Collections.singletonList("Water: " + getFluidAmount() + "L / " + getCapacity() + "L")) + .setPos(47, 7) + .setSize(10, 54)) + .widget(new FakeSyncWidget.FluidStackSyncer(this::getDrainableStack, this::setDrainableStack)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEPollutionCreator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEPollutionCreator.java new file mode 100644 index 0000000000..b87403d17e --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEPollutionCreator.java @@ -0,0 +1,459 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +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.objects.GTRenderedTexture; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMetaTileEntity; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEPollutionCreator extends GTPPMetaTileEntity { + + int mCurrentPollution; + int mAveragePollution; + int mAveragePollutionArray[] = new int[10]; + private int mArrayPos = 0; + private int mTickTimer = 0; + private int mSecondTimer = 0; + + public MTEPollutionCreator(final int aID, final String aName, final String aNameRegional, final int aTier, + final String aDescription, final int aSlotCount) { + super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); + } + + public MTEPollutionCreator(final String aName, final int aTier, final String aDescription, + final ITexture[][][] aTextures, final int aSlotCount) { + super(aName, aTier, aSlotCount, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + return new String[] { this.mDescription, "A useful debug machine to create pollution.", + GTPPCore.GT_Tooltip.get() }; + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFrontActive(i); + rTextures[6][i + 1] = this.getBackActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; + } + + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getFrontActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; + } + + public ITexture[] getBackActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getBottomActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getTopActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getSidesActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier + 3][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (pollutionMultiplier > 99) { + pollutionMultiplier = 1; + } else { + pollutionMultiplier++; + } + PlayerUtils.messagePlayer(aPlayer, "Pollution Mutliplier is now " + pollutionMultiplier + "."); + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEPollutionCreator( + this.mName, + this.mTier, + this.mDescription, + this.mTextures, + this.mInventory.length); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isValidSlot(final int aIndex) { + return true; + } + + @Override + public boolean isFacingValid(final ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public boolean isInputFacing(final ForgeDirection side) { + return side != this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 0; + } + + @Override + public long maxEUStore() { + return 0; + } + + @Override + public int getCapacity() { + return 0; + } + + @Override + public long maxEUInput() { + return 0; + } + + @Override + public long maxEUOutput() { + return 0; + } + + @Override + public long maxAmperesIn() { + return 0; + } + + @Override + public long maxAmperesOut() { + return 0; + } + + @Override + public int rechargerSlotStartIndex() { + return 0; + } + + @Override + public int dechargerSlotStartIndex() { + return 0; + } + + @Override + public int rechargerSlotCount() { + return 0; + } + + @Override + public int dechargerSlotCount() { + return 0; + } + + @Override + public int getProgresstime() { + return (int) this.getBaseMetaTileEntity() + .getUniversalEnergyStored(); + } + + @Override + public int maxProgresstime() { + return (int) this.getBaseMetaTileEntity() + .getUniversalEnergyCapacity(); + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + this.showPollution(aPlayer.getEntityWorld(), aPlayer); + return true; + } + + public int pollutionMultiplier = 1; + + private void showPollution(final World worldIn, final EntityPlayer playerIn) { + if (!PollutionUtils.isPollutionEnabled()) { + PlayerUtils.messagePlayer(playerIn, "This block is useless, Pollution is disabled."); + } else { + addPollution(); + PlayerUtils + .messagePlayer(playerIn, "This chunk now contains " + getCurrentChunkPollution() + " pollution."); + // PlayerUtils.messagePlayer(playerIn, "Average over last ten minutes: "+getAveragePollutionOverLastTen()+" + // pollution."); + } + } + + private boolean addPollution() { + PollutionUtils.addPollution(getBaseMetaTileEntity(), 100000 * pollutionMultiplier); + return true; + } + + @Override + public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + public int getCurrentChunkPollution() { + return getCurrentChunkPollution(this.getBaseMetaTileEntity()); + } + + public int getCurrentChunkPollution(IGregTechTileEntity aBaseMetaTileEntity) { + return PollutionUtils.getPollution(aBaseMetaTileEntity); + } + + @Override + public String[] getInfoData() { + return new String[] { this.getLocalName(), "Current Pollution: " + this.mCurrentPollution, + "Average/10 minutes:" + getAveragePollutionOverLastTen() }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { + return new int[] {}; + } + + @Override + public boolean canInsertItem(final int p_102007_1_, final ItemStack p_102007_2_, final int p_102007_3_) { + return false; + } + + @Override + public boolean canExtractItem(final int p_102008_1_, final ItemStack p_102008_2_, final int p_102008_3_) { + return false; + } + + @Override + public int getSizeInventory() { + return 0; + } + + @Override + public ItemStack getStackInSlot(final int p_70301_1_) { + return null; + } + + @Override + public ItemStack decrStackSize(final int p_70298_1_, final int p_70298_2_) { + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(final int p_70304_1_) { + return null; + } + + @Override + public void setInventorySlotContents(final int p_70299_1_, final ItemStack p_70299_2_) {} + + @Override + public String getInventoryName() { + return null; + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 0; + } + + @Override + public boolean isUseableByPlayer(final EntityPlayer p_70300_1_) { + return false; + } + + @Override + public void openInventory() {} + + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(final int p_94041_1_, final ItemStack p_94041_2_) { + return false; + } + + @Override + public boolean isOverclockerUpgradable() { + return false; + } + + @Override + public boolean isTransformerUpgradable() { + return false; + } + + @Override + public void saveNBTData(final NBTTagCompound aNBT) { + aNBT.setInteger("mCurrentPollution", this.mCurrentPollution); + aNBT.setInteger("mAveragePollution", this.mAveragePollution); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + this.mCurrentPollution = aNBT.getInteger("mCurrentPollution"); + this.mAveragePollution = aNBT.getInteger("mAveragePollution"); + } + + @Override + public void onFirstTick(final IGregTechTileEntity aBaseMetaTileEntity) { + if (this.getBaseMetaTileEntity() + .isServerSide()) { + if (this.mCurrentPollution == 0) { + this.mCurrentPollution = getCurrentChunkPollution(); + } + if (this.mArrayPos < 0 || this.mArrayPos > 9) { + this.mArrayPos = 0; + } + this.mTickTimer = 0; + } + } + + @Override + public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (this.getBaseMetaTileEntity() + .isServerSide()) { + // TickTimer - 20 times a second + this.mTickTimer++; + if (mTickTimer % 20 == 0) { + this.mCurrentPollution = getCurrentChunkPollution(); + } + } + } + + public int getAveragePollutionOverLastTen() { + int counter = 0; + int total = 0; + + for (int j : this.mAveragePollutionArray) { + if (j != 0) { + total += j; + counter++; + } + } + int returnValue = 0; + if (total > 0 && counter > 0) { + returnValue = (total / counter); + this.mAveragePollution = returnValue; + } else { + returnValue = getCurrentChunkPollution(); + } + // Logger.INFO("| DEBUG: "+returnValue +" | ArrayPos:"+this.mArrayPos+" | Counter:"+counter+" | Total:"+total+" + // |"); + return returnValue; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEPollutionDetector.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEPollutionDetector.java new file mode 100644 index 0000000000..6d599b60b9 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEPollutionDetector.java @@ -0,0 +1,503 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +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.objects.GTRenderedTexture; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMetaTileEntity; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEPollutionDetector extends GTPPMetaTileEntity { + + int mCurrentPollution; + int mAveragePollution; + int mAveragePollutionArray[] = new int[10]; + private int mArrayPos = 0; + private int mTickTimer = 0; + private int mSecondTimer = 0; + private long mRedstoneLevel = 0; + + public MTEPollutionDetector(final int aID, final String aName, final String aNameRegional, final int aTier, + final String aDescription, final int aSlotCount) { + super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); + } + + public MTEPollutionDetector(final String aName, final int aTier, final String aDescription, + final ITexture[][][] aTextures, final int aSlotCount) { + super(aName, aTier, aSlotCount, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + return new String[] { this.mDescription, "Right click to check pollution levels.", + "Configure with screwdriver to set redstone output amount.", "Does not use power.", + GTPPCore.GT_Tooltip.get() }; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return side == facing + ? new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Screen_Frequency) } + : new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Dimensional), + new GTRenderedTexture(Textures.BlockIcons.VOID) }; + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFrontActive(i); + rTextures[6][i + 1] = this.getBackActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + /* + * @Override public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final byte aSide, final + * byte aFacing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { return + * this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 : side == facing.getOpposite() ? 1 : side == + * ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; } + */ + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; + } + + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getFrontActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; + } + + public ITexture[] getBackActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getBottomActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getTopActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getSidesActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEPollutionDetector( + this.mName, + this.mTier, + this.mDescription, + this.mTextures, + this.mInventory.length); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isValidSlot(final int aIndex) { + return true; + } + + @Override + public boolean isFacingValid(final ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public boolean isInputFacing(final ForgeDirection side) { + return side != this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 0; + } + + @Override + public long maxEUStore() { + return 0; + } + + @Override + public int getCapacity() { + return 0; + } + + @Override + public long maxEUInput() { + return 0; + } + + @Override + public long maxEUOutput() { + return 0; + } + + @Override + public long maxAmperesIn() { + return 0; + } + + @Override + public long maxAmperesOut() { + return 0; + } + + @Override + public int rechargerSlotStartIndex() { + return 0; + } + + @Override + public int dechargerSlotStartIndex() { + return 0; + } + + @Override + public int rechargerSlotCount() { + return 0; + } + + @Override + public int dechargerSlotCount() { + return 0; + } + + @Override + public int getProgresstime() { + return (int) this.getBaseMetaTileEntity() + .getUniversalEnergyStored(); + } + + @Override + public int maxProgresstime() { + return (int) this.getBaseMetaTileEntity() + .getUniversalEnergyCapacity(); + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + this.showPollution(aPlayer.getEntityWorld(), aPlayer); + return true; + } + + private void showPollution(final World worldIn, final EntityPlayer playerIn) { + if (!PollutionUtils.isPollutionEnabled()) { + PlayerUtils.messagePlayer(playerIn, "This block is useless, Pollution is disabled."); + } else { + PlayerUtils.messagePlayer(playerIn, "This chunk contains " + getCurrentChunkPollution() + " pollution."); + PlayerUtils.messagePlayer(playerIn, "Emit Redstone at pollution level: " + this.mRedstoneLevel); + } + } + + @Override + public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + public int getCurrentChunkPollution() { + return getCurrentChunkPollution(this.getBaseMetaTileEntity()); + } + + public int getCurrentChunkPollution(IGregTechTileEntity aBaseMetaTileEntity) { + return PollutionUtils.getPollution(aBaseMetaTileEntity); + } + + @Override + public String[] getInfoData() { + return new String[] { this.getLocalName(), "Current Pollution: " + this.mCurrentPollution, + "Average/10 Sec: " + this.mAveragePollution, "Emit Redstone at pollution level: " + this.mRedstoneLevel }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { + return new int[] {}; + } + + @Override + public boolean canInsertItem(final int p_102007_1_, final ItemStack p_102007_2_, final int p_102007_3_) { + return false; + } + + @Override + public boolean canExtractItem(final int p_102008_1_, final ItemStack p_102008_2_, final int p_102008_3_) { + return false; + } + + @Override + public int getSizeInventory() { + return 0; + } + + @Override + public ItemStack getStackInSlot(final int p_70301_1_) { + return null; + } + + @Override + public ItemStack decrStackSize(final int p_70298_1_, final int p_70298_2_) { + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(final int p_70304_1_) { + return null; + } + + @Override + public void setInventorySlotContents(final int p_70299_1_, final ItemStack p_70299_2_) {} + + @Override + public String getInventoryName() { + return null; + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 0; + } + + @Override + public boolean isUseableByPlayer(final EntityPlayer p_70300_1_) { + return false; + } + + @Override + public void openInventory() {} + + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(final int p_94041_1_, final ItemStack p_94041_2_) { + return false; + } + + @Override + public boolean isOverclockerUpgradable() { + return false; + } + + @Override + public boolean isTransformerUpgradable() { + return false; + } + + @Override + public void saveNBTData(final NBTTagCompound aNBT) { + aNBT.setInteger("mCurrentPollution", this.mCurrentPollution); + aNBT.setInteger("mAveragePollution", this.mAveragePollution); + aNBT.setLong("mRedstoneLevel", this.mRedstoneLevel); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + this.mCurrentPollution = aNBT.getInteger("mCurrentPollution"); + this.mAveragePollution = aNBT.getInteger("mAveragePollution"); + this.mRedstoneLevel = aNBT.getLong("mRedstoneLevel"); + } + + @Override + public void onFirstTick(final IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + } + + public boolean allowCoverOnSide(final ForgeDirection side, final int aCoverID) { + return side != this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + + // Only Calc server-side + if (!this.getBaseMetaTileEntity() + .isServerSide()) { + return; + } + // Emit Redstone + if (this.getCurrentChunkPollution() >= this.mRedstoneLevel) { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + this.getBaseMetaTileEntity() + .setStrongOutputRedstoneSignal(side, (byte) 16); + } + this.markDirty(); + } else { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + this.getBaseMetaTileEntity() + .setStrongOutputRedstoneSignal(side, (byte) 0); + } + this.markDirty(); + } + + // Do Math for stats + if (this.mTickTimer % 20 == 0) { + mCurrentPollution = this.getCurrentChunkPollution(); + if (mArrayPos > mAveragePollutionArray.length - 1) { + mArrayPos = 0; + } + mAveragePollutionArray[mArrayPos] = mCurrentPollution; + mAveragePollution = getAveragePollutionOverLastTen(); + mArrayPos++; + } + this.mTickTimer++; + } + + public int getAveragePollutionOverLastTen() { + return MathUtils.getIntAverage(mAveragePollutionArray); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + + if (side == this.getBaseMetaTileEntity() + .getFrontFacing()) { + final float[] tCoords = GTUtility.getClickedFacingCoords(side, aX, aY, aZ); + switch ((byte) ((byte) (int) (tCoords[0] * 2.0F) + (2 * (byte) (int) (tCoords[1] * 2.0F)))) { + case 0 -> this.mRedstoneLevel -= 5000; + case 1 -> this.mRedstoneLevel += 5000; + case 2 -> this.mRedstoneLevel -= 50000; + case 3 -> this.mRedstoneLevel += 50000; + } + this.markDirty(); + GTUtility.sendChatToPlayer(aPlayer, "Emit Redstone at Pollution Level: " + this.mRedstoneLevel); + } + + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + } + + @Override + public boolean allowGeneralRedstoneOutput() { + if (this.getCurrentChunkPollution() >= this.mRedstoneLevel) { + this.markDirty(); + return true; + } + return false; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + } + + @Override + public void onMachineBlockUpdate() { + super.onMachineBlockUpdate(); + } + + @Override + public boolean hasSidedRedstoneOutputBehavior() { + if (this.getCurrentChunkPollution() >= this.mRedstoneLevel) { + this.markDirty(); + return true; + } + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEWirelessCharger.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEWirelessCharger.java new file mode 100644 index 0000000000..1535140115 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/basic/MTEWirelessCharger.java @@ -0,0 +1,672 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.GTValues; +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.BaseMetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.api.objects.minecraft.BlockPos; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.EntityUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMetaTileEntity; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.helpers.ChargingHelper; + +public class MTEWirelessCharger extends GTPPMetaTileEntity { + + private int mCurrentDimension = 0; + public int mMode = 0; + public boolean mLocked = true; + + public MTEWirelessCharger(final int aID, final String aName, final String aNameRegional, final int aTier, + final String aDescription, final int aSlotCount) { + super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); + } + + public MTEWirelessCharger(final String aName, final int aTier, final String aDescription, + final ITexture[][][] aTextures, final int aSlotCount) { + super(aName, aTier, aSlotCount, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + return new String[] { this.mDescription, "Can be locked to the owner by sneaking with a screwdriver", + "Can also be locked with a lock upgrade", "", "3 Modes, Long-Range, Local and Mixed.", + "Long-Range: Can supply 2A of power to a single player up to " + (GTValues.V[this.mTier] * 4) + "m away.", + "Local: Can supply several Amps to each player within " + this.mTier * 20 + "m.", + "Mixed: Provides both 2A of long range and 1A per player locally.", + "Mixed mode is more conservative of power and as a result only", + "Gets half the distances each singular mode gets.", GTPPCore.GT_Tooltip.get() }; + } + + public int getTier() { + return this.mTier; + } + + public int getMode() { + return this.mMode; + } + + public int getDimensionID() { + return this.mCurrentDimension; + } + + public Map getLocalMap() { + return this.mLocalChargingMap; + } + + public Map getLongRangeMap() { + return this.mWirelessChargingMap; + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFrontActive(i); + rTextures[6][i + 1] = this.getBackActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; + } + + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getFrontActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Screen_2) }; + } + + public ITexture[] getBackActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getBottomActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getTopActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getSidesActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + + if (aPlayer.isSneaking()) { + mLocked = !mLocked; + PlayerUtils.messagePlayer(aPlayer, mLocked ? "Locked to owner." : "Unlocked."); + return; + } + + mWirelessChargingMap.clear(); + mLocalChargingMap.clear(); + if (!this.getBaseMetaTileEntity() + .getWorld().playerEntities.isEmpty()) { + for (Object mTempPlayer : this.getBaseMetaTileEntity() + .getWorld().playerEntities) { + if (mTempPlayer instanceof EntityPlayer || mTempPlayer instanceof EntityPlayerMP) { + EntityPlayer mTemp = (EntityPlayer) mTempPlayer; + ChargingHelper.removeValidPlayer(mTemp, this); + } + } + } + + if (this.mMode >= 2) { + this.mMode = 0; + } else { + this.mMode++; + } + if (this.mMode == 0) { + PlayerUtils.messagePlayer(aPlayer, "Now in Long-Range Charge Mode."); + } else if (this.mMode == 1) { + PlayerUtils.messagePlayer(aPlayer, "Now in Local Charge Mode."); + } else { + PlayerUtils.messagePlayer(aPlayer, "Now in Mixed Charge Mode."); + } + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEWirelessCharger( + this.mName, + this.mTier, + this.mDescription, + this.mTextures, + this.mInventory.length); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isValidSlot(final int aIndex) { + return true; + } + + @Override + public boolean isFacingValid(final ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public boolean isInputFacing(final ForgeDirection side) { + return side != this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 0; + } + + @Override + public long maxEUStore() { + return GTValues.V[this.mTier] * 128; + } + + @Override + public int getCapacity() { + return (int) (GTValues.V[this.mTier] * 32); + } + + @Override + public long maxEUInput() { + return GTValues.V[this.mTier]; + } + + @Override + public long maxEUOutput() { + return 0; + } + + @Override + public long maxAmperesIn() { + if (this.mMode == 0) { + return 2; + } else if (this.mMode == 1) { + return this.mLocalChargingMap.size() * 8; + } else { + return ((this.mLocalChargingMap.size() * 4) + this.mWirelessChargingMap.size()); + } + } + + @Override + public long maxAmperesOut() { + return 0; + } + + @Override + public int rechargerSlotStartIndex() { + return 0; + } + + @Override + public int dechargerSlotStartIndex() { + return 0; + } + + @Override + public int rechargerSlotCount() { + return 0; + } + + @Override + public int dechargerSlotCount() { + return 0; + } + + @Override + public int getProgresstime() { + return (int) this.getBaseMetaTileEntity() + .getUniversalEnergyStored(); + } + + @Override + public int maxProgresstime() { + return (int) this.getBaseMetaTileEntity() + .getUniversalEnergyCapacity(); + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + return true; + } + + @Override + public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public String[] getInfoData() { + return new String[] { this.getLocalName() }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { + return new int[] {}; + } + + @Override + public boolean canInsertItem(final int p_102007_1_, final ItemStack p_102007_2_, final int p_102007_3_) { + return false; + } + + @Override + public boolean canExtractItem(final int p_102008_1_, final ItemStack p_102008_2_, final int p_102008_3_) { + return false; + } + + @Override + public int getSizeInventory() { + return 0; + } + + @Override + public ItemStack getStackInSlot(final int p_70301_1_) { + return null; + } + + @Override + public ItemStack decrStackSize(final int p_70298_1_, final int p_70298_2_) { + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(final int p_70304_1_) { + return null; + } + + @Override + public void setInventorySlotContents(final int p_70299_1_, final ItemStack p_70299_2_) {} + + @Override + public String getInventoryName() { + return null; + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 0; + } + + @Override + public boolean isUseableByPlayer(final EntityPlayer p_70300_1_) { + return false; + } + + @Override + public void openInventory() {} + + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(final int p_94041_1_, final ItemStack p_94041_2_) { + return false; + } + + @Override + public boolean isOverclockerUpgradable() { + return false; + } + + @Override + public boolean isTransformerUpgradable() { + return false; + } + + @Override + public void saveNBTData(final NBTTagCompound aNBT) { + aNBT.setBoolean("mLocked", this.mLocked); + aNBT.setInteger("mMode", this.mMode); + aNBT.setInteger("mCurrentDimension", this.mCurrentDimension); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + this.mLocked = aNBT.getBoolean("mLocked"); + this.mMode = aNBT.getInteger("mMode"); + this.mCurrentDimension = aNBT.getInteger("mCurrentDimension"); + } + + @Override + public void onFirstTick(final IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + } + + private Map mWirelessChargingMap = new HashMap<>(); + private Map mLocalChargingMap = new HashMap<>(); + + private boolean isValidPlayer(EntityPlayer aPlayer) { + BaseMetaTileEntity aTile = (BaseMetaTileEntity) this.getBaseMetaTileEntity(); + if (mLocked || (aTile != null && aTile.privateAccess())) { + if (aPlayer.getUniqueID() + .equals(getBaseMetaTileEntity().getOwnerUuid())) { + return true; + } else { + return false; + } + } + return true; + } + + @Override + public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (this.getBaseMetaTileEntity() + .isServerSide()) { + + if (this.mCurrentDimension != aBaseMetaTileEntity.getWorld().provider.dimensionId) { + this.mCurrentDimension = aBaseMetaTileEntity.getWorld().provider.dimensionId; + } + + if (aTick % 20 == 0) { + boolean mHasBeenMapped = this.equals(ChargingHelper.getEntry(getTileEntityPosition())); + if (!mHasBeenMapped) { + mHasBeenMapped = ChargingHelper.addEntry(getTileEntityPosition(), this); + } + + if (mHasBeenMapped && !aBaseMetaTileEntity.getWorld().playerEntities.isEmpty()) { + for (Object mTempPlayer : aBaseMetaTileEntity.getWorld().playerEntities) { + if (mTempPlayer instanceof EntityPlayer || mTempPlayer instanceof EntityPlayerMP) { + EntityPlayer mTemp = (EntityPlayer) mTempPlayer; + + if (this.mMode == 1 || this.mMode == 2) { + int tempRange = (this.mMode == 1 ? this.mTier * 20 : this.mTier * 10); + if (getDistanceBetweenTwoPositions(getTileEntityPosition(), getPositionOfEntity(mTemp)) + < tempRange) { + if (isValidPlayer(mTemp) + && !mLocalChargingMap.containsKey(mTemp.getDisplayName())) { + mLocalChargingMap.put(mTemp.getDisplayName(), mTemp.getPersistentID()); + ChargingHelper.addValidPlayer(mTemp, this); + // PlayerUtils.messagePlayer(mTemp, "You have entered charging range. + // ["+tempRange+"m - Local]."); + } + } else { + if (mLocalChargingMap.containsKey(mTemp.getDisplayName())) { + if (mLocalChargingMap.remove(mTemp.getDisplayName()) != null) { + // PlayerUtils.messagePlayer(mTemp, "You have left charging range. + // ["+tempRange+"m - Local]."); + ChargingHelper.removeValidPlayer(mTemp, this); + } + } + } + } + if (this.mMode == 0 || this.mMode == 2) { + int tempRange = (int) (this.mMode == 0 ? 4 * GTValues.V[this.mTier] + : 2 * GTValues.V[this.mTier]); + if (getDistanceBetweenTwoPositions(getTileEntityPosition(), getPositionOfEntity(mTemp)) + <= tempRange) { + if (!mWirelessChargingMap.containsKey(mTemp.getDisplayName())) { + if (isValidPlayer(mTemp)) { + mWirelessChargingMap.put(mTemp.getDisplayName(), mTemp.getPersistentID()); + ChargingHelper.addValidPlayer(mTemp, this); + PlayerUtils.messagePlayer( + mTemp, + "You have entered charging range. [" + tempRange + "m - Long-Range]."); + } + } + } else { + if (mWirelessChargingMap.containsKey(mTemp.getDisplayName())) { + if (mWirelessChargingMap.remove(mTemp.getDisplayName()) != null) { + PlayerUtils.messagePlayer( + mTemp, + "You have left charging range. [" + tempRange + "m - Long Range]."); + ChargingHelper.removeValidPlayer(mTemp, this); + } + } + } + } + /* + * if (this.mMode == 0 || this.mMode == 2){ int tempRange = (int) (this.mMode == 0 ? + * 4*GT_Values.V[this.mTier] : 2*GT_Values.V[this.mTier]); if + * (getDistanceBetweenTwoPositions(getTileEntityPosition(), getPositionOfEntity(mTemp)) < + * tempRange){ if (!mWirelessChargingMap.containsKey(mTemp)){ + * mWirelessChargingMap.put(mTemp, mTemp.getPersistentID()); + * PlayerUtils.messagePlayer(mTemp, "You have entered charging range. ["+tempRange+"m]."); + * ChargingHelper.addValidPlayer(mTemp, this); } } else { if + * (mWirelessChargingMap.containsKey(mTemp)){ if (mWirelessChargingMap.remove(mTemp) != + * null){ PlayerUtils.messagePlayer(mTemp, + * "You have left charging range. ["+tempRange+"m]."); + * ChargingHelper.removeValidPlayer(mTemp, this); } } } } + */ + + } + } + } + } + } + } + + public BlockPos getTileEntityPosition() { + return new BlockPos( + this.getBaseMetaTileEntity() + .getXCoord(), + this.getBaseMetaTileEntity() + .getYCoord(), + this.getBaseMetaTileEntity() + .getZCoord(), + this.getBaseMetaTileEntity() + .getWorld()); + } + + public BlockPos getPositionOfEntity(Entity mEntity) { + if (mEntity == null) { + return null; + } + return EntityUtils.findBlockPosUnderEntity(mEntity); + } + + public double getDistanceBetweenTwoPositions(BlockPos objectA, BlockPos objectB) { + if (objectA == null || objectB == null) { + return 0f; + } + int[] objectArray1 = new int[] { objectA.xPos, objectA.yPos, objectA.zPos }; + int[] objectArray2 = new int[] { objectB.xPos, objectB.yPos, objectB.zPos }; + + final double distance = Math.sqrt( + (objectArray2[0] - objectArray1[0]) * (objectArray2[0] - objectArray1[0]) + + (objectArray2[1] - objectArray1[1]) * (objectArray2[1] - objectArray1[1]) + + (objectArray2[2] - objectArray1[2]) * (objectArray2[2] - objectArray1[2])); + return distance; + } + + @Override + public void onRemoval() { + + ChargingHelper.removeEntry(getTileEntityPosition(), this); + + mWirelessChargingMap.clear(); + mLocalChargingMap.clear(); + if (!this.getBaseMetaTileEntity() + .getWorld().playerEntities.isEmpty()) { + for (Object mTempPlayer : this.getBaseMetaTileEntity() + .getWorld().playerEntities) { + if (mTempPlayer instanceof EntityPlayer || mTempPlayer instanceof EntityPlayerMP) { + EntityPlayer mTemp = (EntityPlayer) mTempPlayer; + ChargingHelper.removeValidPlayer(mTemp, this); + } + } + } + + super.onRemoval(); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + + int tempRange; + + if (this.mMode == 0 || this.mMode == 2) { + tempRange = (int) (this.mMode == 0 ? 4 * GTValues.V[this.mTier] : 2 * GTValues.V[this.mTier]); + } else { + tempRange = this.mMode == 1 ? this.mTier * 20 : this.mTier * 10; + } + + if (this.mMode == 2) { + PlayerUtils + .messagePlayer(aPlayer, "Mixed Mode | Local: " + this.mTier * 10 + "m | Long: " + tempRange + "m"); + PlayerUtils.messagePlayer(aPlayer, "Players with access:"); + for (String name : this.getLocalMap() + .keySet()) { + PlayerUtils.messagePlayer(aPlayer, "Local: " + name); + } + for (String name : this.getLongRangeMap() + .keySet()) { + PlayerUtils.messagePlayer(aPlayer, "Long: " + name); + } + } else if (this.mMode == 1) { + PlayerUtils.messagePlayer(aPlayer, "Local Mode: " + this.mTier * 20 + "m"); + PlayerUtils.messagePlayer(aPlayer, "Players with access:"); + for (String name : this.getLocalMap() + .keySet()) { + PlayerUtils.messagePlayer(aPlayer, "" + name); + } + + } else { + PlayerUtils.messagePlayer(aPlayer, "Long-range Mode: " + tempRange + "m"); + PlayerUtils.messagePlayer(aPlayer, "Players with access:"); + for (String name : this.getLongRangeMap() + .keySet()) { + PlayerUtils.messagePlayer(aPlayer, "" + name); + } + } + + return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + } + + @Override + public void onServerStart() { + mWirelessChargingMap.clear(); + mLocalChargingMap.clear(); + super.onServerStart(); + } + + @Override + public void onExplosion() { + ChargingHelper.removeEntry(getTileEntityPosition(), this); + super.onExplosion(); + } + + @Override + public void doExplosion(long aExplosionPower) { + ChargingHelper.removeEntry(getTileEntityPosition(), this); + super.doExplosion(aExplosionPower); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java deleted file mode 100644 index 52804f9ad2..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/GMTE_AmazonPackager.java +++ /dev/null @@ -1,248 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.misc; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GMTE_AmazonPackager extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - private int mCasing; - - private static final int MACHINEMODE_PACKAGER = 0; - private static final int MACHINEMODE_UNPACKAGER = 1; - - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GMTE_AmazonPackager(mName); - } - - public GMTE_AmazonPackager(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GMTE_AmazonPackager(String aName) { - super(aName); - } - - @Override - public String getMachineType() { - return "Packager, Unpackager"; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GMTE_AmazonPackager.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(TAE.getIndexFromPage(2, 9)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 9)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Amazon Warehouse") - .addInfo("This Multiblock is used for EXTREME packaging requirements") - .addInfo("Can be configured with a screwdriver to work as an Unpackager") - .addInfo("Dust Schematics are inserted into the input busses") - .addInfo("If inserted into the controller, it is shared across all busses") - .addInfo("1x, 2x, 3x & Other Schematics are to be placed into the controller GUI slot") - .addInfo("500% faster than using single block machines of the same voltage") - .addInfo("Only uses 75% of the EU/t normally required") - .addInfo("Processes 16 items per voltage tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front center") - .addCasingInfoMin("Supply Depot Casings", 10, false) - .addInputBus("Any casing", 1) - .addOutputBus("Any casing", 1) - .addEnergyHatch("Any casing", 1) - .addMaintenanceHatch("Any casing", 1) - .addMufflerHatch("Any casing", 1) - .toolTipFinisher("GT++"); - return tt; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAAmazonPackagerActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAAmazonPackager; - } - - @Override - protected int getCasingTextureId() { - return TAE.getIndexFromPage(2, 9); - } - - @Override - public RecipeMap getRecipeMap() { - return (machineMode == MACHINEMODE_PACKAGER) ? RecipeMaps.packagerRecipes : RecipeMaps.unpackagerRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(RecipeMaps.packagerRecipes, RecipeMaps.unpackagerRecipes); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 6F) - .setEuModifier(0.75F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 10 && checkHatch(); - } - - @Override - public int getMaxEfficiency(ItemStack p0) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack arg0) { - return CORE.ConfigSwitches.pollutionPerSecondMultiPackager; - } - - @Override - public int getMaxParallelRecipes() { - return (16 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - if (aNBT.hasKey("mPackageMode")) { - machineMode = aNBT.getInteger("mPackageMode"); - } - super.loadNBTData(aNBT); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("mode", machineMode); - } - - @Override - public String getMachineModeName() { - return StatCollector.translateToLocal("GT5U.GTPP_MULTI_PACKAGER.mode." + machineMode); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector.translateToLocal("GT5U.GTPP_MULTI_PACKAGER.mode." + tag.getInteger("mode")) - + EnumChatFormatting.RESET); - } - - @Override - public boolean supportsMachineModeSwitch() { - return true; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - setMachineMode(nextMachineMode()); - PlayerUtils.messagePlayer( - aPlayer, - String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); - } - - @Override - public void setMachineModeIcons() { - machineModeIcons.clear(); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_PACKAGER); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_UNPACKAGER); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/MTEAmazonPackager.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/MTEAmazonPackager.java new file mode 100644 index 0000000000..9f0b6d6be9 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/misc/MTEAmazonPackager.java @@ -0,0 +1,246 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.misc; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEAmazonPackager extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mCasing; + + private static final int MACHINEMODE_PACKAGER = 0; + private static final int MACHINEMODE_UNPACKAGER = 1; + + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAmazonPackager(mName); + } + + public MTEAmazonPackager(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEAmazonPackager(String aName) { + super(aName); + } + + @Override + public String getMachineType() { + return "Packager, Unpackager"; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEAmazonPackager.class).atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(TAE.getIndexFromPage(2, 9)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 9)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Amazon Warehouse") + .addInfo("This Multiblock is used for EXTREME packaging requirements") + .addInfo("Can be configured with a screwdriver to work as an Unpackager") + .addInfo("Dust Schematics are inserted into the input busses") + .addInfo("If inserted into the controller, it is shared across all busses") + .addInfo("1x, 2x, 3x & Other Schematics are to be placed into the controller GUI slot") + .addInfo("500% faster than using single block machines of the same voltage") + .addInfo("Only uses 75% of the EU/t normally required") + .addInfo("Processes 16 items per voltage tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front center") + .addCasingInfoMin("Supply Depot Casings", 10, false) + .addInputBus("Any casing", 1) + .addOutputBus("Any casing", 1) + .addEnergyHatch("Any casing", 1) + .addMaintenanceHatch("Any casing", 1) + .addMufflerHatch("Any casing", 1) + .toolTipFinisher("GT++"); + return tt; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAAmazonPackagerActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAAmazonPackager; + } + + @Override + protected int getCasingTextureId() { + return TAE.getIndexFromPage(2, 9); + } + + @Override + public RecipeMap getRecipeMap() { + return (machineMode == MACHINEMODE_PACKAGER) ? RecipeMaps.packagerRecipes : RecipeMaps.unpackagerRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(RecipeMaps.packagerRecipes, RecipeMaps.unpackagerRecipes); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 6F) + .setEuModifier(0.75F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 10 && checkHatch(); + } + + @Override + public int getMaxEfficiency(ItemStack p0) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack arg0) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiPackager; + } + + @Override + public int getMaxParallelRecipes() { + return (16 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (aNBT.hasKey("mPackageMode")) { + machineMode = aNBT.getInteger("mPackageMode"); + } + super.loadNBTData(aNBT); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("mode", machineMode); + } + + @Override + public String getMachineModeName() { + return StatCollector.translateToLocal("GT5U.GTPP_MULTI_PACKAGER.mode." + machineMode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector.translateToLocal("GT5U.GTPP_MULTI_PACKAGER.mode." + tag.getInteger("mode")) + + EnumChatFormatting.RESET); + } + + @Override + public boolean supportsMachineModeSwitch() { + return true; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + setMachineMode(nextMachineMode()); + PlayerUtils.messagePlayer( + aPlayer, + String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); + } + + @Override + public void setMachineModeIcons() { + machineModeIcons.clear(); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_PACKAGER); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_UNPACKAGER); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialAlloySmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialAlloySmelter.java deleted file mode 100644 index e5d138dfda..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialAlloySmelter.java +++ /dev/null @@ -1,223 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; - -import net.minecraft.item.ItemStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.TAE; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; - -public class GregtechMetaTileEntity_IndustrialAlloySmelter extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - public static int CASING_TEXTURE_ID; - private HeatingCoilLevel mHeatingCapacity; - private int mLevel = 0; - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialAlloySmelter(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 1); - } - - public GregtechMetaTileEntity_IndustrialAlloySmelter(String aName) { - super(aName); - CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 1); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialAlloySmelter(this.mName); - } - - @Override - protected IIconContainer getActiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_ACTIVE; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER; - } - - @Override - protected int getCasingTextureId() { - return CASING_TEXTURE_ID; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.alloySmelterRecipes; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialAlloySmelter; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public String getMachineType() { - return "Alloy Smelter"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Alloy Smelter") - .addInfo("Gains one parallel per voltage tier") - .addInfo("Gains one multiplier per coil tier") - .addInfo("Parallel = Tier * Coil Tier") - .addInfo("Gains 5% speed bonus per coil tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 5, 3, true) - .addController("Bottom center") - .addCasingInfoMin("Inconel Reinforced Casings", 8, false) - .addOtherStructurePart("Integral Encasement V", "Middle Layer") - .addOtherStructurePart("Heating Coils", "Above and below Integral Encasements") - .addInputBus("Any Inconel Reinforced Casing", 1) - .addOutputBus("Any Inconel Reinforced Casing", 1) - .addEnergyHatch("Any Inconel Reinforced Casing", 1) - .addMaintenanceHatch("Any Inconel Reinforced Casing", 1) - .addMufflerHatch("Any Inconel Reinforced Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "VVV", "V-V", "VVV" }, - { "HHH", "H-H", "HHH" }, { "C~C", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialAlloySmelter.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(CASING_TEXTURE_ID) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 1)))) - .addElement( - 'H', - ofCoil( - GregtechMetaTileEntity_IndustrialAlloySmelter::setCoilLevel, - GregtechMetaTileEntity_IndustrialAlloySmelter::getCoilLevel)) - .addElement('V', ofBlock(ModBlocks.blockCasingsTieredGTPP, 4)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 4, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 4, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - mLevel = 0; - setCoilLevel(HeatingCoilLevel.None); - return checkPiece(mName, 1, 4, 0) && mCasing >= 8 - && getCoilLevel() != HeatingCoilLevel.None - && (mLevel = getCoilLevel().getTier() + 1) > 0 - && checkHatch(); - } - - @Override - public int getMaxParallelRecipes() { - return (this.mLevel * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setSpeedBoost(100F / (100F + 5F * mLevel)) - .setHeatOC(true) - .setRecipeHeat(0) - // Need to multiply by 2 because heat OC is done only once every 1800 and this one does it once - // every - // 900 - .setMachineHeat((int) (getCoilLevel().getHeat() * 2)); - } - }.setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - public HeatingCoilLevel getCoilLevel() { - return mHeatingCapacity; - } - - public void setCoilLevel(HeatingCoilLevel aCoilLevel) { - mHeatingCapacity = aCoilLevel; - } - - @Override - public boolean isInputSeparationEnabled() { - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialArcFurnace.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialArcFurnace.java deleted file mode 100644 index cc182cf6d2..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialArcFurnace.java +++ /dev/null @@ -1,359 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_IndustrialArcFurnace - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - // 862 - private static final int mCasingTextureID = TAE.getIndexFromPage(3, 3); - public static String mCasingName = "Tempered Arc Furnace Casing"; - private boolean mPlasmaMode = false; - - private int mSize = 0; - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialArcFurnace(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialArcFurnace(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialArcFurnace(this.mName); - } - - @Override - public String getMachineType() { - return "(Plasma/Electric) Arc Furnace"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for Industrial Arc Furnace") - .addInfo("250% faster than using single block machines of the same voltage") - .addInfo("Processes 8 * voltage tier * W items") - .addInfo("Right-click controller with a Screwdriver to change modes") - .addInfo("Max Size required to process Plasma recipes") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .addController("Top center") - .addStructureInfo("Size: nxnx3 [WxHxL] (Hollow)") - .addStructureInfo("n can be 3, 5 or 7") - .addCasingInfoMin(mCasingName, 10, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - /** - * The front part of multi. Used to determine the tier, or in other words, determine the size of multi. - */ - private static final String STRUCTURE_PIECE_FRONT = "front"; - /** - * The rest part of multi. - */ - private static final String STRUCTURE_PIECE_REST = "rest"; - private static final int MAX_TIER = 3; - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape(STRUCTURE_PIECE_FRONT + 1, new String[][] { { "CCC", "C~C", "CCC" } }) - .addShape(STRUCTURE_PIECE_FRONT + 2, new String[][] { { "CCCCC", "C C", "C C", "C C", "CCCCC" } }) - .addShape( - STRUCTURE_PIECE_FRONT + 3, - new String[][] { { "CCCCCCC", "C C", "C C", "C C", "C C", "C C", "CCCCCCC" }, }) - .addShape(STRUCTURE_PIECE_REST + 1, new String[][] { { "CCC", "C-C", "CCC" }, { "CCC", "CCC", "CCC" } }) - .addShape( - STRUCTURE_PIECE_REST + 2, - new String[][] { { "CCCCC", "C---C", "C---C", "C---C", "CCCCC" }, - { "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" } }) - .addShape( - STRUCTURE_PIECE_REST + 3, - new String[][] { { "CCCCCCC", "C-----C", "C-----C", "C-----C", "C-----C", "C-----C", "CCCCCCC" }, - { "CCCCCCC", "CCCCCCC", "CCCCCCC", "CCCCCCC", "CCCCCCC", "CCCCCCC", "CCCCCCC" }, }) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialArcFurnace.class) - .atLeast(InputBus, InputHatch, OutputBus, OutputHatch, Maintenance, Energy, Muffler) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .allowOnly(ForgeDirection.NORTH) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings4Misc, 3)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - private int getTierFromHint(ItemStack stackSize) { - if (stackSize.stackSize <= 0 || stackSize.stackSize >= MAX_TIER) { - return MAX_TIER; - } - return stackSize.stackSize; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - int maxTier = getTierFromHint(stackSize); - for (int tier = 1; tier <= maxTier; tier++) { - buildPiece(STRUCTURE_PIECE_FRONT + tier, stackSize, hintsOnly, tier, tier, 0); - } - buildPiece(STRUCTURE_PIECE_REST + maxTier, stackSize, hintsOnly, maxTier, maxTier, -1); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int maxTier = getTierFromHint(stackSize); - int built; - for (int tier = 1; tier <= maxTier; tier++) { - built = survivialBuildPiece( - STRUCTURE_PIECE_FRONT + tier, - stackSize, - tier, - tier, - 0, - elementBudget, - env, - false, - true); - if (built >= 0) return built; - } - - return survivialBuildPiece( - STRUCTURE_PIECE_REST + maxTier, - stackSize, - maxTier, - maxTier, - -1, - elementBudget, - env, - false, - true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - mSize = 0; - int tier = 0; - while (tier < MAX_TIER && checkPiece(STRUCTURE_PIECE_FRONT + (tier + 1), (tier + 1), (tier + 1), 0)) { - tier++; - } - if (tier <= 0) return false; - if (checkPiece(STRUCTURE_PIECE_REST + tier, tier, tier, -1)) { - mSize = 2 * tier + 1; - return mCasing >= 10 && checkHatch(); - } - return false; - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDIndustrialArcFurnaceActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDIndustrialArcFurnace; - } - - @Override - protected int getCasingTextureId() { - return mCasingTextureID; - } - - @Override - public RecipeMap getRecipeMap() { - return mPlasmaMode ? RecipeMaps.plasmaArcFurnaceRecipes : RecipeMaps.arcFurnaceRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(RecipeMaps.arcFurnaceRecipes, RecipeMaps.plasmaArcFurnaceRecipes); - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 3.5F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return (this.mSize * 8 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialArcFurnace; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - public Block getCasingBlock() { - return ModBlocks.blockCasings4Misc; - } - - public byte getCasingMeta() { - return 3; - } - - public byte getCasingTextureIndex() { - return (byte) mCasingTextureID; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (this.mSize > 5) { - this.mPlasmaMode = !mPlasmaMode; - if (mPlasmaMode) { - PlayerUtils.messagePlayer( - aPlayer, - "[" + EnumChatFormatting.RED - + "MODE" - + EnumChatFormatting.RESET - + "] " - + EnumChatFormatting.LIGHT_PURPLE - + "Plasma" - + EnumChatFormatting.RESET); - } else { - PlayerUtils.messagePlayer( - aPlayer, - "[" + EnumChatFormatting.RED - + "MODE" - + EnumChatFormatting.RESET - + "] " - + EnumChatFormatting.YELLOW - + "Electric" - + EnumChatFormatting.RESET); - } - } else { - PlayerUtils.messagePlayer( - aPlayer, - "[" + EnumChatFormatting.RED - + "MODE" - + EnumChatFormatting.RESET - + "] " - + EnumChatFormatting.GRAY - + "Cannot change mode, structure not large enough." - + EnumChatFormatting.RESET); - } - mLastRecipe = null; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("mPlasmaMode", mPlasmaMode); - aNBT.setInteger("mSize", mSize); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mPlasmaMode = aNBT.getBoolean("mPlasmaMode"); - mSize = aNBT.getInteger("mSize"); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setBoolean("mode", mPlasmaMode); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector.translateToLocal("GT5U.GTPP_MULTI_ARC_FURNACE.mode." + (tag.getBoolean("mode") ? 1 : 0)) - + EnumChatFormatting.RESET); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCentrifuge.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCentrifuge.java deleted file mode 100644 index c04620d4b4..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCentrifuge.java +++ /dev/null @@ -1,228 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; - -public class GregtechMetaTileEntity_IndustrialCentrifuge - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private boolean mIsAnimated; - private static final CustomIcon frontFaceActive = new CustomIcon("iconsets/LARGECENTRIFUGE_ACTIVE5"); - private static final CustomIcon frontFace = new CustomIcon("iconsets/LARGECENTRIFUGE5"); - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - // public static double recipesComplete = 0; - - public GregtechMetaTileEntity_IndustrialCentrifuge(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - mIsAnimated = true; - } - - public GregtechMetaTileEntity_IndustrialCentrifuge(final String aName) { - super(aName); - mIsAnimated = true; - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialCentrifuge(this.mName); - } - - @Override - public String getMachineType() { - return "Centrifuge"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Centrifuge") - .addInfo("125% faster than using single block machines of the same voltage") - .addInfo("Disable animations with a screwdriver") - .addInfo("Only uses 90% of the EU/t normally required") - .addInfo("Processes six items per voltage tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front Center") - .addCasingInfoMin("Centrifuge Casings", 6, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialCentrifuge.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 0)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - if (usingAnimations()) { - return frontFaceActive; - } else { - return frontFace; - } - } - - @Override - protected IIconContainer getInactiveOverlay() { - return frontFace; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(0); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.centrifugeNonCellRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setEuModifier(0.9F) - .setSpeedBonus(1F / 2.25F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return (6 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - public Block getCasingBlock() { - return ModBlocks.blockCasingsMisc; - } - - public byte getCasingMeta() { - return 0; - } - - public byte getCasingTextureIndex() { - return (byte) TAE.GTPP_INDEX(0); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialCentrifuge; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - this.mIsAnimated = !mIsAnimated; - Logger.INFO("Is Centrifuge animated " + this.mIsAnimated); - if (this.mIsAnimated) { - PlayerUtils.messagePlayer(aPlayer, "Using Animated Turbine Texture. "); - } else { - PlayerUtils.messagePlayer(aPlayer, "Using Static Turbine Texture. "); - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("mIsAnimated", mIsAnimated); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("mIsAnimated")) { - mIsAnimated = aNBT.getBoolean("mIsAnimated"); - } else { - mIsAnimated = true; - } - } - - public boolean usingAnimations() { - // Logger.INFO("Is animated? "+this.mIsAnimated); - return this.mIsAnimated; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialChisel.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialChisel.java deleted file mode 100644 index 82d18a9347..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialChisel.java +++ /dev/null @@ -1,342 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.List; -import java.util.stream.Stream; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_StreamUtil; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ChiselBus; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import team.chisel.carving.Carving; - -public class GregtechMetaTileEntity_IndustrialChisel - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - - private ItemStack target; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - private ItemStack mInputCache; - private ItemStack mOutputCache; - private GT_Recipe mCachedRecipe; - - public GregtechMetaTileEntity_IndustrialChisel(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialChisel(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialChisel(this.mName); - } - - @Override - public String getMachineType() { - return "Chisel"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Factory Grade Auto Chisel") - .addInfo("Target block goes in Controller slot for common Input Buses") - .addInfo("You can also set a target block in each Chisel Input Bus and use them as an Input Bus") - .addInfo("If no target is provided for common buses, the result of the first chisel is used") - .addInfo("Speed: +200% | EU Usage: 75% | Parallel: Tier x 16") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front center") - .addCasingInfoMin("Sturdy Printer Casing", 6, false) - .addInputBus("Any casing", 1) - .addOutputBus("Any casing", 1) - .addEnergyHatch("Any casing", 1) - .addMaintenanceHatch("Any casing", 1) - .addMufflerHatch("Any casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - // spotless:off - new String[][] { - { "CCC", "CCC", "CCC" }, - { "C~C", "C-C", "CCC" }, - { "CCC", "CCC", "CCC" }, - })) - // spotless:on - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialChisel.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(90) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings5Misc, 5)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAIndustrialChiselActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAIndustrialChisel; - } - - @Override - protected int getCasingTextureId() { - return 90; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - private boolean hasValidCache(ItemStack aStack, ItemStack aSpecialSlot, boolean aClearOnFailure) { - if (mInputCache != null && mOutputCache != null && mCachedRecipe != null) { - if (GT_Utility.areStacksEqual(aStack, mInputCache) - && GT_Utility.areStacksEqual(aSpecialSlot, mOutputCache)) { - return true; - } - } - // clear cache if it was invalid - if (aClearOnFailure) { - mInputCache = null; - mOutputCache = null; - mCachedRecipe = null; - } - return false; - } - - private void cacheItem(ItemStack aInputItem, ItemStack aOutputItem, GT_Recipe aRecipe) { - mInputCache = aInputItem.copy(); - mOutputCache = aOutputItem.copy(); - mCachedRecipe = aRecipe; - } - - // lets make sure the user isn't trying to make something from a block that doesn't have this as a valid target - private static boolean canBeMadeFrom(ItemStack from, ItemStack to) { - List results = getItemsForChiseling(from); - for (ItemStack s : results) { - if (s.getItem() == to.getItem() && s.getItemDamage() == to.getItemDamage()) { - return true; - } - } - return false; - } - - // lets make sure the user isn't trying to make something from a block that doesn't have this as a valid target - private static boolean hasChiselResults(ItemStack from) { - List results = getItemsForChiseling(from); - return results.size() > 0; - } - - private static List getItemsForChiseling(ItemStack aStack) { - return Carving.chisel.getItemsForChiseling(aStack); - } - - private static ItemStack getChiselOutput(ItemStack aInput, ItemStack aTarget) { - ItemStack tOutput; - if (aTarget != null && canBeMadeFrom(aInput, aTarget)) { - tOutput = aTarget; - } else if (aTarget != null && !canBeMadeFrom(aInput, aTarget)) { - tOutput = null; - } else { - tOutput = getItemsForChiseling(aInput).get(0); - } - return tOutput; - } - - private GT_Recipe generateChiselRecipe(ItemStack aInput) { - boolean tIsCached = hasValidCache(aInput, this.target, true); - if (tIsCached || aInput != null && hasChiselResults(aInput)) { - ItemStack tOutput = tIsCached ? mOutputCache.copy() : getChiselOutput(aInput, this.target); - if (tOutput != null) { - if (mCachedRecipe != null && GT_Utility.areStacksEqual(aInput, mInputCache) - && GT_Utility.areStacksEqual(tOutput, mOutputCache)) { - return mCachedRecipe; - } - // We can chisel this - GT_Recipe aRecipe = new GT_Recipe( - false, - new ItemStack[] { ItemUtils.getSimpleStack(aInput, 1) }, - new ItemStack[] { ItemUtils.getSimpleStack(tOutput, 1) }, - null, - new int[] { 10000 }, - new FluidStack[] {}, - new FluidStack[] {}, - 20, - 16, - 0); - - // Cache it - cacheItem(aInput, tOutput, aRecipe); - return aRecipe; - } - } - return null; - } - - private GT_Recipe getRecipe() { - for (GT_MetaTileEntity_Hatch_InputBus bus : this.mInputBusses) { - if (bus instanceof GT_MetaTileEntity_ChiselBus) { // Chisel buses - if (bus.mInventory[bus.getSizeInventory() - 1] == null) continue; - this.target = bus.mInventory[bus.getSizeInventory() - 1]; - - for (int i = bus.getSizeInventory() - 2; i >= 0; i--) { - ItemStack itemsInSlot = bus.mInventory[i]; - if (itemsInSlot != null) { - GT_Recipe tRecipe = generateChiselRecipe(itemsInSlot); - if (tRecipe != null) { - return tRecipe; - } - } - } - } else { - target = this.getControllerSlot(); // Common buses - for (int i = bus.getSizeInventory() - 1; i >= 0; i--) { - ItemStack itemsInSlot = bus.mInventory[i]; - if (itemsInSlot != null) { - GT_Recipe tRecipe = generateChiselRecipe(itemsInSlot); - if (tRecipe != null) { - return tRecipe; - } - } - } - } - - } - return null; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected Stream findRecipeMatches(@Nullable RecipeMap map) { - return GT_StreamUtil.ofNullable(getRecipe()); - } - }.setSpeedBonus(1F / 3F) - .setEuModifier(0.75F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - protected void sendStartMultiBlockSoundLoop() { - sendLoopStart(PROCESS_START_SOUND_INDEX); - } - - @Override - public int getMaxParallelRecipes() { - return (16 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - private static ResourceLocation sChiselSound = null; - - private static ResourceLocation getChiselSound() { - if (sChiselSound == null) { - sChiselSound = new ResourceLocation(Carving.chisel.getVariationSound(Blocks.stone, 0)); - } - return sChiselSound; - } - - @Override - public void doSound(byte aIndex, double aX, double aY, double aZ) { - switch (aIndex) { - case PROCESS_START_SOUND_INDEX -> GT_Utility - .doSoundAtClient(getChiselSound(), getTimeBetweenProcessSounds(), 1.0F, 1.0F, aX, aY, aZ); - case INTERRUPT_SOUND_INDEX -> GT_Utility - .doSoundAtClient(SoundResource.IC2_MACHINES_INTERRUPT_ONE, 100, 1.0F, aX, aY, aZ); - } - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialChisel; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCokeOven.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCokeOven.java deleted file mode 100644 index a20b879fb8..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCokeOven.java +++ /dev/null @@ -1,209 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.item.ItemStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -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; - -public class GregtechMetaTileEntity_IndustrialCokeOven - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mLevel = 0; - private int mCasing; - private int mCasing1; - private int mCasing2; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialCokeOven(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialCokeOven(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialCokeOven(this.mName); - } - - @Override - public String getMachineType() { - return "Coke Oven"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Processes Logs and Coal into Charcoal and Coal Coke.") - .addInfo("Controller Block for the Industrial Coke Oven") - .addInfo("Gain 4% energy discount per voltage tier") - .addInfo("Process 12x materials with Heat Resistant Casings") - .addInfo("Or 24x materials with Heat Proof Casings") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front middle at bottom") - .addCasingInfoMin("Structural Coke Oven Casings", 8, false) - .addCasingInfoMin("Heat Resistant/Proof Coke Oven Casings", 8, false) - .addInputBus("Any Structural Coke Oven Casing", 1) - .addOutputBus("Any Structural Coke Oven Casing", 1) - .addInputHatch("Any Structural Coke Oven Casing", 1) - .addOutputHatch("Any Structural Coke Oven Casing", 1) - .addEnergyHatch("Any Structural Coke Oven Casing", 1) - .addMaintenanceHatch("Any Structural Coke Oven Casing", 1) - .addMufflerHatch("Any Structural Coke Oven Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "C~C", "CCC", "CCC" }, })) - .addShape( - mName + "1", - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "aaa", "a-a", "aaa" }, { "C~C", "CCC", "CCC" }, })) - .addShape( - mName + "2", - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "bbb", "b-b", "bbb" }, { "C~C", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialCokeOven.class) - .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Energy, Muffler) - .casingIndex(TAE.GTPP_INDEX(1)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 1)))) - .addElement( - 'H', - ofChain( - onElementPass(x -> ++x.mCasing1, ofBlock(ModBlocks.blockCasingsMisc, 2)), - onElementPass(x -> ++x.mCasing2, ofBlock(ModBlocks.blockCasingsMisc, 3)))) - .addElement('a', ofBlock(ModBlocks.blockCasingsMisc, 2)) - .addElement('b', ofBlock(ModBlocks.blockCasingsMisc, 3)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - if (stackSize.stackSize == 1) buildPiece(mName + "1", stackSize, hintsOnly, 1, 2, 0); - else buildPiece(mName + "2", stackSize, hintsOnly, 1, 2, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - if (stackSize.stackSize == 1) - return survivialBuildPiece(mName + "1", stackSize, 1, 2, 0, elementBudget, env, false, true); - else return survivialBuildPiece(mName + "2", stackSize, 1, 2, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - mCasing1 = 0; - mCasing2 = 0; - mLevel = 0; - if (checkPiece(mName, 1, 2, 0)) { - if (mCasing1 == 8) mLevel = 1; - if (mCasing2 == 8) mLevel = 2; - return mLevel > 0 && mCasing >= 8 && checkHatch(); - } - return false; - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCACokeOvenActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCACokeOven; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(1); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.cokeOvenRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - protected void setupProcessingLogic(ProcessingLogic logic) { - super.setupProcessingLogic(logic); - logic.setEuModifier((100F - (GT_Utility.getTier(getMaxInputVoltage()) * 4)) / 100F); - } - - @Override - public int getMaxParallelRecipes() { - return this.mLevel * 12; - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialCokeOven; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCuttingMachine.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCuttingMachine.java deleted file mode 100644 index 4910ee4d2f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialCuttingMachine.java +++ /dev/null @@ -1,270 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_IndustrialCuttingMachine extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - private static final int MACHINEMODE_CUTTER = 0; - private static final int MACHINEMODE_SLICER = 1; - - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialCuttingMachine(final int aID, final String aName, - final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialCuttingMachine(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialCuttingMachine(this.mName); - } - - @Override - public String getMachineType() { - return "Cutting Machine / Slicing Machine"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Cutting Factory") - .addInfo("200% faster than using single block machines of the same voltage") - .addInfo("Only uses 75% of the EU/t normally required") - .addInfo("Processes four items per voltage tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 5, true) - .addController("Front Center") - .addCasingInfoMin("Cutting Factory Frames", 14, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC", "CCC", "CCC" }, { "C~C", "C-C", "C-C", "C-C", "CCC" }, - { "CCC", "CCC", "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialCuttingMachine.class) - .atLeast(InputBus, InputHatch, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 13)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 14 && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDIndustrialCuttingMachineActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDIndustrialCuttingMachine; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(29); - } - - @Override - public RecipeMap getRecipeMap() { - return (machineMode == MACHINEMODE_CUTTER) ? RecipeMaps.cutterRecipes : RecipeMaps.slicerRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(RecipeMaps.cutterRecipes, RecipeMaps.slicerRecipes); - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 3F) - .setEuModifier(0.75F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return (4 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialCuttingMachine; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public boolean isInputSeparationEnabled() { - return true; - } - - public Block getCasingBlock() { - return ModBlocks.blockCasings2Misc; - } - - public byte getCasingMeta() { - return 13; - } - - public byte getCasingTextureIndex() { - return (byte) TAE.GTPP_INDEX(29); - } - - @Override - public boolean supportsMachineModeSwitch() { - return true; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - setMachineMode(nextMachineMode()); - PlayerUtils.messagePlayer( - aPlayer, - String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); - } - - @Override - public void setMachineModeIcons() { - machineModeIcons.clear(); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_CUTTING); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_SLICING); - } - - @Override - public String getMachineModeName() { - return StatCollector.translateToLocal("GT5U.GTPP_MULTI_CUTTING_MACHINE.mode." + machineMode); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - // Migrates old NBT tag to the new one - if (aNBT.hasKey("mCuttingMode")) { - machineMode = aNBT.getBoolean("mCuttingMode") ? MACHINEMODE_CUTTER : MACHINEMODE_SLICER; - } - super.loadNBTData(aNBT); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("mode", machineMode); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector.translateToLocal("GT5U.GTPP_MULTI_CUTTING_MACHINE.mode." + tag.getInteger("mode")) - + EnumChatFormatting.RESET); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialDehydrator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialDehydrator.java deleted file mode 100644 index f4b10890c8..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialDehydrator.java +++ /dev/null @@ -1,278 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_IndustrialDehydrator - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private static int CASING_TEXTURE_ID; - private static String mCasingName = "Vacuum Casing"; - private HeatingCoilLevel mHeatingCapacity; - private boolean mDehydratorMode = false; - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialDehydrator(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - CASING_TEXTURE_ID = TAE.getIndexFromPage(3, 10); - } - - public GregtechMetaTileEntity_IndustrialDehydrator(String aName) { - super(aName); - CASING_TEXTURE_ID = TAE.getIndexFromPage(3, 10); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialDehydrator(mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Factory Grade Vacuum Furnace") - .addInfo("Can toggle the operation temperature with a Screwdriver") - .addInfo("All Dehydrator recipes are Low Temp recipes") - .addInfo("Speed: +120% | EU Usage: 50% | Parallel: 4") - .addInfo("Each 900K over the min. Heat Capacity grants 5% speedup (multiplicatively)") - .addInfo("Each 1800K over the min. Heat Capacity allows for one upgraded overclock") - .addInfo("Upgraded overclocks reduce recipe time to 25% and increase EU/t to 400%") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 5, 3, true) - .addController("Bottom Center") - .addCasingInfoMin(mCasingName, 5, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "HHH", "H-H", "HHH" }, - { "HHH", "H-H", "HHH" }, { "C~C", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialDehydrator.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) - .casingIndex(CASING_TEXTURE_ID) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings4Misc, 10)))) - .addElement( - 'H', - ofCoil( - GregtechMetaTileEntity_IndustrialDehydrator::setCoilLevel, - GregtechMetaTileEntity_IndustrialDehydrator::getCoilLevel)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 4, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 4, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - setCoilLevel(HeatingCoilLevel.None); - return checkPiece(mName, 1, 4, 0) && mCasing >= 5 && getCoilLevel() != HeatingCoilLevel.None && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAIndustrialDehydratorActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAIndustrialDehydrator; - } - - @Override - protected int getCasingTextureId() { - return CASING_TEXTURE_ID; - } - - @Override - public RecipeMap getRecipeMap() { - return mDehydratorMode ? GTPPRecipeMaps.chemicalDehydratorNonCellRecipes : GTPPRecipeMaps.vacuumFurnaceRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(GTPPRecipeMaps.chemicalDehydratorNonCellRecipes, GTPPRecipeMaps.vacuumFurnaceRecipes); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialDehydrator; - } - - @Override - public String getMachineType() { - return "Vacuum Furnace / Dehydrator"; - } - - @Override - public int getMaxParallelRecipes() { - return 4; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - return recipe.mSpecialValue <= getCoilLevel().getHeat() ? CheckRecipeResultRegistry.SUCCESSFUL - : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); - } - - @NotNull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setHeatOC(true) - .setHeatDiscount(true) - .setRecipeHeat(recipe.mSpecialValue) - .setMachineHeat((int) getCoilLevel().getHeat()); - } - }.setSpeedBonus(1F / 2.2F) - .setEuModifier(0.5F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - mDehydratorMode = !mDehydratorMode; - String aMode = mDehydratorMode ? "Dehydrator" : "Vacuum Furnace"; - PlayerUtils.messagePlayer(aPlayer, "Mode: " + aMode); - mLastRecipe = null; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("mDehydratorMode", mDehydratorMode); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mDehydratorMode = aNBT.getBoolean("mDehydratorMode"); - } - - public HeatingCoilLevel getCoilLevel() { - return mHeatingCapacity; - } - - public void setCoilLevel(HeatingCoilLevel aCoilLevel) { - mHeatingCapacity = aCoilLevel; - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setBoolean("mode", mDehydratorMode); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector - .translateToLocal("GT5U.GTPP_MULTI_INDUSTRIAL_DEHYDRATOR.mode." + (tag.getBoolean("mode") ? 1 : 0)) - + EnumChatFormatting.RESET); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialElectrolyzer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialElectrolyzer.java deleted file mode 100644 index cf03c6aae9..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialElectrolyzer.java +++ /dev/null @@ -1,169 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.item.ItemStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -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; - -public class GregtechMetaTileEntity_IndustrialElectrolyzer extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialElectrolyzer(final int aID, final String aName, - final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialElectrolyzer(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialElectrolyzer(this.mName); - } - - @Override - public String getMachineType() { - return "Electrolyzer"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Electrolyzer") - .addInfo("180% faster than using single block machines of the same voltage") - .addInfo("Only uses 90% of the EU/t normally required") - .addInfo("Processes two items per voltage tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front Center") - .addCasingInfoMin("Electrolyzer Casings", 6, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialElectrolyzer.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) - .casingIndex(TAE.GTPP_INDEX(5)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 5)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDIndustrialElectrolyzerActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDIndustrialElectrolyzer; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(5); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.electrolyzerNonCellRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 2.8F) - .setEuModifier(0.9F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialElectrolyzer; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public int getMaxParallelRecipes() { - return 2 * GT_Utility.getTier(this.getMaxInputVoltage()); - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialExtruder.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialExtruder.java deleted file mode 100644 index 9114fb5eac..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialExtruder.java +++ /dev/null @@ -1,194 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -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; - -public class GregtechMetaTileEntity_IndustrialExtruder - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialExtruder(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialExtruder(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialExtruder(this.mName); - } - - @Override - public String getMachineType() { - return "Extruder"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Material Extruder") - .addInfo("250% faster than using single block machines of the same voltage") - .addInfo("Processes four items per voltage tier") - .addInfo("Extrusion Shape for recipe goes in the Input Bus") - .addInfo("Each Input Bus can have a different shape!") - .addInfo("You can use several input buses per multiblock") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 5, true) - .addController("Front Center") - .addCasingInfoMin("Inconel Reinforced Casings", 14, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC", "CCC", "CCC" }, { "C~C", "C-C", "C-C", "C-C", "CCC" }, - { "CCC", "CCC", "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialExtruder.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 14 && checkHatch(); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_COMPRESSOR_OP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDIndustrialExtruderActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDIndustrialExtruder; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(33); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.extruderRecipes; - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 3.5F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return (4 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialExtruder; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - public Block getCasingBlock() { - return ModBlocks.blockCasings3Misc; - } - - public byte getCasingMeta() { - return 1; - } - - public byte getCasingTextureIndex() { - return (byte) TAE.GTPP_INDEX(33); - } - - @Override - public boolean isInputSeparationEnabled() { - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialFluidHeater.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialFluidHeater.java deleted file mode 100644 index 254402d4c1..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialFluidHeater.java +++ /dev/null @@ -1,204 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -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; - -public class GregtechMetaTileEntity_IndustrialFluidHeater extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing1; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialFluidHeater(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialFluidHeater(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialFluidHeater(this.mName); - } - - @Override - public String getMachineType() { - return "Fluid Heater"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Fluid Heater") - .addInfo("120% faster than using single block machines of the same voltage") - .addInfo("Only uses 90% of the EU/t normally required") - .addInfo("Processes eight items per voltage tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(5, 6, 5, true) - .addController("Front Center") - .addCasingInfoMin("Top/Bottom layer: Multi-use Casings", 34, false) - .addCasingInfoMin("Middle layers: Thermal Containment Casing", 47, false) - .addInputBus("Bottom Layer (optional)", 1) - .addInputHatch("Bottom Layer", 1) - .addOutputBus("Top Layer (optional)", 1) - .addOutputHatch("Top Layer", 1) - .addEnergyHatch("Any Multi-use Casing", 1) - .addMaintenanceHatch("Any Multi-use Casing", 1) - .addMufflerHatch("Any Multi-use Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { " TTT ", "TTTTT", "TTTTT", "TTTTT", " TTT " }, - { " XXX ", "X---X", "X---X", "X---X", " XXX " }, - { " XXX ", "X---X", "X---X", "X---X", " XXX " }, - { " XXX ", "X---X", "X---X", "X---X", " XXX " }, - { " X~X ", "X---X", "X---X", "X---X", " XXX " }, - { " BBB ", "BBBBB", "BBBBB", "BBBBB", " BBB " }, })) - .addElement( - 'B', - buildHatchAdder(GregtechMetaTileEntity_IndustrialFluidHeater.class) - .atLeast(InputBus, InputHatch, Maintenance, Energy, Muffler) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing1, ofBlock(getCasingBlock2(), getCasingMeta2())))) - .addElement('X', ofBlock(getCasingBlock1(), getCasingMeta1())) - .addElement( - 'T', - buildHatchAdder(GregtechMetaTileEntity_IndustrialFluidHeater.class) - .atLeast(OutputBus, OutputHatch, Maintenance, Energy, Muffler) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing1, ofBlock(getCasingBlock2(), getCasingMeta2())))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 2, 4, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 2, 4, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing1 = 0; - boolean didBuild = checkPiece(mName, 2, 4, 0); - log("Built? " + didBuild + ", " + mCasing1); - return didBuild && mCasing1 >= 34 && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAFluidHeaterActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAFluidHeater; - } - - @Override - protected int getCasingTextureId() { - return TAE.getIndexFromPage(0, 1); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.fluidHeaterRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 2.2F) - .setEuModifier(0.9F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return (8 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialThermalCentrifuge; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - public Block getCasingBlock1() { - return ModBlocks.blockCasings2Misc; - } - - public byte getCasingMeta1() { - return 11; - } - - public Block getCasingBlock2() { - return ModBlocks.blockCasings3Misc; - } - - public byte getCasingMeta2() { - return 2; - } - - public byte getCasingTextureIndex() { - return (byte) TAE.getIndexFromPage(2, 2); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialForgeHammer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialForgeHammer.java deleted file mode 100644 index 44484cb90e..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialForgeHammer.java +++ /dev/null @@ -1,244 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Mods.EnderIO; -import static gregtech.api.enums.Mods.Railcraft; -import static gregtech.api.enums.Mods.ThaumicBases; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; - -import org.apache.commons.lang3.tuple.Pair; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.ITierConverter; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -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; - -@SuppressWarnings("SpellCheckingInspection") -public class GregtechMetaTileEntity_IndustrialForgeHammer extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - private int mAnvilTier = 0; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialForgeHammer(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialForgeHammer(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialForgeHammer(this.mName); - } - - @Override - public String getMachineType() { - return "Forge Hammer"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Forge Hammer") - .addInfo("Speed: +100% | EU Usage: 100% | Parallel: Tier x Anvil Tier x 8") - .addInfo("T1 - Vanilla Anvil"); - if (Railcraft.isModLoaded()) { - tt.addInfo("T2 - Steel Anvil"); - } - if (EnderIO.isModLoaded()) { - tt.addInfo("T3 - Dark Steel Anvil"); - } - if (ThaumicBases.isModLoaded()) { - tt.addInfo("T3 - Thaumium Anvil"); - tt.addInfo("T4 - Void Metal Anvil"); - } - - tt.addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front Center") - .addCasingInfoMin("Forge Casing", 6, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .addOtherStructurePart("Anvil", "In the center of 3x3x3 structure", 2) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - Map anvilTiers = new HashMap<>(); - - anvilTiers.put(Blocks.anvil, 1); - - if (Railcraft.isModLoaded()) { - anvilTiers.put(GameRegistry.findBlock(Railcraft.ID, "anvil"), 2); - } - - if (EnderIO.isModLoaded()) { - anvilTiers.put(GameRegistry.findBlock(EnderIO.ID, "blockDarkSteelAnvil"), 3); - } - - if (ThaumicBases.isModLoaded()) { - anvilTiers.put(GameRegistry.findBlock(ThaumicBases.ID, "thaumicAnvil"), 3); - anvilTiers.put(GameRegistry.findBlock(ThaumicBases.ID, "voidAnvil"), 4); - } - - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "CAC", "CCC" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialForgeHammer.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) - .casingIndex(TAE.getIndexFromPage(1, 11)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings5Misc, 6)))) - .addElement( - 'A', - ofBlocksTiered( - anvilTierConverter(anvilTiers), - getAllAnvilTiers(anvilTiers), - 0, - GregtechMetaTileEntity_IndustrialForgeHammer::setAnvilTier, - GregtechMetaTileEntity_IndustrialForgeHammer::getAnvilTier)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - private static List> getAllAnvilTiers(Map anvilTiers) { - return anvilTiers.entrySet() - .stream() - .map(e -> Pair.of(e.getKey(), e.getValue())) - .collect(Collectors.toList()); - } - - private static ITierConverter anvilTierConverter(Map anvilTiers) { - return (block, meta) -> block == null ? 0 : anvilTiers.getOrDefault(block, 0); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.RANDOM_ANVIL_USE; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAIndustrialForgeHammerActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAIndustrialForgeHammer; - } - - @Override - protected int getCasingTextureId() { - return TAE.getIndexFromPage(1, 11); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.hammerRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1 / 2F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return (8 * getAnvilTier() * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialForgeHammer; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - private void setAnvilTier(int tier) { - mAnvilTier = tier; - } - - private int getAnvilTier() { - return mAnvilTier; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMacerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMacerator.java deleted file mode 100644 index ff66b930ad..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMacerator.java +++ /dev/null @@ -1,390 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.List; -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants.NBT; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.IDualInputHatch; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_IndustrialMacerator - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int controllerTier = 1; - private int structureTier; - private int mCasing; - - private static final String STRUCTURE_PIECE_MAIN = "main"; - - private static final int HORIZONTAL_OFF_SET = 1; - private static final int VERTICAL_OFF_SET = 5; - private static final int DEPTH_OFF_SET = 0; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - private static int getStructureCasingTier(Block b, int m) { - if (b == GregTech_API.sBlockCasings4 && m == 2) return 1; - if (b == ModBlocks.blockCasingsMisc && m == 7) return 2; - return 0; - } - - public GregtechMetaTileEntity_IndustrialMacerator(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialMacerator(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialMacerator(this.mName); - } - - @Override - public String getMachineType() { - return "Macerator/Pulverizer"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller block for the Industrial Maceration Stack") - .addInfo("60% faster than using single block machines of the same voltage") - .addInfo("Maximum of n*tier parallels, LV = Tier 1, MV = Tier 2, etc.") - .addInfo("n=2 initially. n=8 after inserting Maceration Upgrade Chip.") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 6, 3, true) - .addController("Bottom center") - .addCasingInfoMin("Maceration Stack Casings (After upgrade)", 26, false) - .addCasingInfoMin("Stable Titanium Casings (Before upgrade)", 26, false) - .addInputBus("Bottom casing", 1) - .addEnergyHatch("Any casing", 1) - .addMaintenanceHatch("Any casing", 1) - .addOutputBus("One per layer except bottom layer", 2) - .addMufflerHatch("Any casing except bottom layer", 2) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - STRUCTURE_PIECE_MAIN, - // spotless:off - transpose( - new String[][] { - {"AAA","AAA","AAA"}, - {"AAA","A A","AAA"}, - {"AAA","A A","AAA"}, - {"AAA","A A","AAA"}, - {"AAA","A A","AAA"}, - {"A~A","AAA","AAA"} })) - //spotless:on - .addElement( - 'A', - ofChain( - buildHatchAdder(GregtechMetaTileEntity_IndustrialMacerator.class) - .atLeast(Energy, Maintenance, InputBus, Muffler, OutputBus) - .casingIndex(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings4, 2)) - .allowOnly(ForgeDirection.NORTH) - .dot(1) - .build(), - onElementPass( - m -> m.mCasing++, - ofBlocksTiered( - GregtechMetaTileEntity_IndustrialMacerator::getStructureCasingTier, - ImmutableList.of( - Pair.of(GregTech_API.sBlockCasings4, 2), - Pair.of(ModBlocks.blockCasingsMisc, 7)), - -1, - (m, t) -> m.structureTier = t, - m -> m.structureTier)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - this.buildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - hintsOnly, - HORIZONTAL_OFF_SET, - VERTICAL_OFF_SET, - DEPTH_OFF_SET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (this.mMachine) return -1; - return survivialBuildPiece( - STRUCTURE_PIECE_MAIN, - stackSize, - HORIZONTAL_OFF_SET, - VERTICAL_OFF_SET, - DEPTH_OFF_SET, - elementBudget, - env, - false, - true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - structureTier = -1; - if (!checkPiece(STRUCTURE_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; - if (structureTier < 1 || mCasing < 26 || !checkHatch()) return false; - updateHatchTexture(); - return structureTier >= controllerTier; - } - - protected void updateHatchTexture() { - int textureID = getCasingTextureId(); - for (GT_MetaTileEntity_Hatch h : mInputBusses) h.updateTexture(textureID); - for (IDualInputHatch h : mDualInputHatches) h.updateTexture(textureID); - for (GT_MetaTileEntity_Hatch h : mOutputBusses) h.updateTexture(textureID); - for (GT_MetaTileEntity_Hatch h : mMaintenanceHatches) h.updateTexture(textureID); - for (GT_MetaTileEntity_Hatch h : mMufflerHatches) h.updateTexture(textureID); - for (GT_MetaTileEntity_Hatch h : mEnergyHatches) h.updateTexture(textureID); - } - - @Override - public boolean checkHatch() { - return !mMufflerHatches.isEmpty() && !mMaintenanceHatches.isEmpty() - && !mOutputBusses.isEmpty() - && (!mInputBusses.isEmpty() || !mDualInputHatches.isEmpty()); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_MACERATOR_OP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.Overlay_MatterFab_Active; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.Overlay_MatterFab; - } - - @Override - protected int getCasingTextureId() { - if (structureTier == 2) return TAE.GTPP_INDEX(7); - return GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings4, 2); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.maceratorRecipes; - } - - @Override - public int getRecipeCatalystPriority() { - return -10; - } - - @Override - public void onPreTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive()) - && (aBaseMetaTileEntity.getFrontFacing() != ForgeDirection.UP) - && (aBaseMetaTileEntity.getCoverIDAtSide(ForgeDirection.UP) == 0) - && (!aBaseMetaTileEntity.getOpacityAtSide(ForgeDirection.UP))) { - final Random tRandom = aBaseMetaTileEntity.getWorld().rand; - aBaseMetaTileEntity.getWorld() - .spawnParticle( - "smoke", - (aBaseMetaTileEntity.getXCoord() + 0.8F) - (tRandom.nextFloat() * 0.6F), - aBaseMetaTileEntity.getYCoord() + 0.3f + (tRandom.nextFloat() * 0.2F), - (aBaseMetaTileEntity.getZCoord() + 1.2F) - (tRandom.nextFloat() * 1.6F), - 0.0D, - 0.0D, - 0.0D); - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide() && aTick % 20 == 0 && controllerTier == 1) { - ItemStack aGuiStack = this.getControllerSlot(); - if (GregtechItemList.Maceration_Upgrade_Chip.isStackEqual(aGuiStack, false, true)) { - controllerTier = 2; - mInventory[1] = ItemUtils.depleteStack(aGuiStack); - markDirty(); - // schedule a structure check - mUpdated = true; - } - } - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - if (controllerTier == 1 && !aPlayer.isSneaking()) { - ItemStack heldItem = aPlayer.getHeldItem(); - if (GregtechItemList.Maceration_Upgrade_Chip.isStackEqual(heldItem, false, true)) { - controllerTier = 2; - aPlayer.setCurrentItemOrArmor(0, ItemUtils.depleteStack(heldItem)); - if (getBaseMetaTileEntity().isServerSide()) { - markDirty(); - aPlayer.inventory.markDirty(); - // schedule a structure check - mUpdated = true; - } - return true; - } - } - return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - } - - @Override - public void onValueUpdate(byte aValue) { - structureTier = aValue; - } - - @Override - public byte getUpdateData() { - return (byte) structureTier; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setByte("mTier", (byte) controllerTier); - aNBT.setByte("structureTier", (byte) structureTier); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (!aNBT.hasKey("mTier", NBT.TAG_BYTE)) - // we assume old macerators are all T2 variants, as they were made before price reduction and shouldn't need - // to worry about upgrading - controllerTier = 2; - else controllerTier = aNBT.getByte("mTier"); - - structureTier = aNBT.getByte("structureTier"); - } - - @Override - public void initDefaultModes(NBTTagCompound aNBT) { - super.initDefaultModes(aNBT); - if (aNBT == null || !aNBT.hasKey("mTier")) { - controllerTier = 1; - } else { - controllerTier = aNBT.getByte("mTier"); - } - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - super.setItemNBT(aNBT); - aNBT.setByte("mTier", (byte) controllerTier); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 1.6F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - final long tVoltage = getMaxInputVoltage(); - final byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage)); - return Math.max(1, (controllerTier == 1 ? 2 : 8) * tTier); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialMacerator; - } - - @Override - public boolean isOverclockerUpgradable() { - return true; - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("tier", controllerTier); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - if (tag.hasKey("tier")) { - currentTip.add( - "Tier: " + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(tag.getInteger("tier")) - + EnumChatFormatting.RESET); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMixer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMixer.java deleted file mode 100644 index 39b5d6e73e..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMixer.java +++ /dev/null @@ -1,211 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -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; - -public class GregtechMetaTileEntity_IndustrialMixer - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - public static int CASING_TEXTURE_ID; - public static String mCasingName = "Multi-Use Casing"; - public static String mCasingName2 = "Titanium Turbine Casing"; - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialMixer(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 2); - } - - public GregtechMetaTileEntity_IndustrialMixer(final String aName) { - super(aName); - CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 2); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { - if (aNBT.hasKey("isBussesSeparate")) { - inputSeparation = aNBT.getBoolean("isBussesSeparate"); - } - // Fallback for existing mixers - else { - inputSeparation = true; - } - } - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialMixer(this.mName); - } - - @Override - public String getMachineType() { - return "Mixer"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Mixer") - .addInfo("250% faster than using single block machines of the same voltage") - .addInfo("Processes eight recipes per voltage tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 4, 3, false) - .addController("Second Layer Center") - .addCasingInfoMin(mCasingName, 6, false) - .addCasingInfoMin(mCasingName2, 2, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "CCC", "CMC", "CCC" }, { "C~C", "CMC", "CCC" }, - { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialMixer.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) - .casingIndex(CASING_TEXTURE_ID) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 2)))) - .addElement('M', ofBlock(GregTech_API.sBlockCasings4, 11)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 2, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 2, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 2, 0) && mCasing >= 6 && checkHatch(); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_COMPRESSOR_OP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDIndustrialMixerActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDIndustrialMixer; - } - - @Override - protected int getCasingTextureId() { - return CASING_TEXTURE_ID; - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.mixerNonCellRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 3.5F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return (8 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialMixer; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - inputSeparation = !inputSeparation; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMolecularTransformer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMolecularTransformer.java deleted file mode 100644 index f40e851c55..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMolecularTransformer.java +++ /dev/null @@ -1,241 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -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; - -public class GregtechMetaTileEntity_IndustrialMolecularTransformer - extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - private static final int CASING_TEXTURE_ID = 48; - private int mCasing = 0; - - public GregtechMetaTileEntity_IndustrialMolecularTransformer(final int aID, final String aName, - final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialMolecularTransformer(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialMolecularTransformer(this.mName); - } - - @Override - public String getMachineType() { - return "Molecular Transformer"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Changes the structure of items to produce new ones") - .addInfo("Maximum 1x of each bus/hatch.") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(7, 7, 7, false) - .addController("Top Center") - .addCasingInfoMin("Robust Tungstensteel Machine Casing", 40, false) - .addCasingInfoMin("Tungstensteel Coils", 16, false) - .addCasingInfoMin("Molecular Containment Casing", 52, false) - .addCasingInfoMin("High Voltage Current Capacitor", 32, false) - .addCasingInfoMin("Particle Containment Casing", 4, false) - .addCasingInfoMin("Resonance Chamber I", 5, false) - .addCasingInfoMin("Modulator I", 4, false) - .addInputBus("Any Robust Tungstensteel Machine Casing", 1) - .addOutputBus("Any Robust Tungstensteel Machine Casing", 1) - .addEnergyHatch("Any Robust Tungstensteel Machine Casing", 1) - .addMaintenanceHatch("Any Robust Tungstensteel Machine Casing", 1) - .addMufflerHatch("Any Robust Tungstensteel Machine Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - STRUCTURE_PIECE_MAIN, - (new String[][] { { " ", " ", " xxx ", " x~x ", " xxx ", " ", " " }, - { " ", " xxx ", " xyyyx ", " xyzyx ", " xyyyx ", " xxx ", " " }, - { " ", " xxx ", " xyyyx ", " xyzyx ", " xyyyx ", " xxx ", " " }, - { " ", " xxx ", " xyyyx ", " xyzyx ", " xyyyx ", " xxx ", " " }, - { " t ", " ttxtt ", " tyyyt ", "txyzyxt", " tyyyt ", " ttxtt ", " t " }, - { " c ", " ccecc ", " cxfxc ", "cefefec", " cxfxc ", " ccecc ", " c " }, - { " h ", " hhhhh ", " hhhhh ", "hhhhhhh", " hhhhh ", " hhhhh ", " h " }, })) - .addElement('x', ofBlock(getCasingBlock(), getCasingMeta())) - .addElement('y', ofBlock(getCasingBlock(), getCasingMeta2())) - .addElement('z', ofBlock(getCasingBlock(), getCasingMeta3())) - .addElement('e', ofBlock(getCasingBlock2(), 0)) - .addElement('f', ofBlock(getCasingBlock2(), 4)) - .addElement('c', ofBlock(getCoilBlock(), 3)) - .addElement('t', ofBlock(getCasingBlock3(), getTungstenCasingMeta())) - .addElement( - 'h', - buildHatchAdder(GregtechMetaTileEntity_IndustrialMolecularTransformer.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .buildAndChain( - onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock3(), getTungstenCasingMeta())))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 3, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - boolean aDidBuild = checkPiece(STRUCTURE_PIECE_MAIN, 3, 3, 0); - if (this.mInputBusses.size() != 1 || this.mOutputBusses.size() != 1 || this.mEnergyHatches.size() != 1) { - return false; - } - // there are 16 slot that only allow casing, so we subtract this from the grand total required - return aDidBuild && mCasing >= 40 - 16 && checkHatch(); - } - - protected static int getCasingTextureIndex() { - return CASING_TEXTURE_ID; - } - - protected static Block getCasingBlock() { - return ModBlocks.blockSpecialMultiCasings; - } - - protected static Block getCasingBlock2() { - return ModBlocks.blockSpecialMultiCasings2; - } - - protected static Block getCasingBlock3() { - return GregTech_API.sBlockCasings4; - } - - protected static Block getCoilBlock() { - return GregTech_API.sBlockCasings5; - } - - protected static int getCasingMeta() { - return 11; - } - - protected static int getCasingMeta2() { - return 12; - } - - protected static int getCasingMeta3() { - return 13; - } - - protected static int getTungstenCasingMeta() { - return 0; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d == ForgeDirection.UP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAIndustrialMolecularTransformerActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAIndustrialMolecularTransformer; - } - - @Override - protected int getCasingTextureId() { - return 44; - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.molecularTransformerRecipes; - } - - @Override - public boolean isCorrectMachinePart(final ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic(); - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiMolecularTransformer; - } - - @Override - public int getDamageToComponent(final ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMultiMachine.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMultiMachine.java deleted file mode 100644 index d9a9a1549a..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialMultiMachine.java +++ /dev/null @@ -1,541 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.stream.Stream; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_CraftingInput_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Input_ME; -import gregtech.common.tileentities.machines.IDualInputHatch; -import gregtech.common.tileentities.machines.IDualInputInventory; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Solidifier; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_IndustrialMultiMachine extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private final static int MACHINEMODE_METAL = 0; - private final static int MACHINEMODE_FLUID = 1; - private final static int MACHINEMODE_MISC = 2; - - private static final int MODE_COMPRESSOR = 0; - private static final int MODE_LATHE = 1; - private static final int MODE_MAGNETIC = 2; - private static final int MODE_FERMENTER = 3; - private static final int MODE_FLUIDEXTRACT = 4; - private static final int MODE_EXTRACTOR = 5; - private static final int MODE_LASER = 6; - private static final int MODE_AUTOCLAVE = 7; - private static final int MODE_FLUIDSOLIDIFY = 8; - private static final int[][] MODE_MAP = new int[][] { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } }; - public static final String[] aToolTipNames = new String[9]; - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - static { - for (int id = 0; id < 9; id++) { - RecipeMap recipeMap = getRecipeMap(id); - if (recipeMap != null) { - String aNEI = GT_LanguageManager.getTranslation(getRecipeMap(id).unlocalizedName); - aToolTipNames[id] = aNEI != null ? aNEI : "BAD NEI NAME (Report to Github)"; - } - } - } - - public GregtechMetaTileEntity_IndustrialMultiMachine(final int aID, final String aName, - final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialMultiMachine(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialMultiMachine(this.mName); - } - - @Override - public String getMachineType() { - return "Nine in One"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - String[] aBuiltStrings = new String[3]; - aBuiltStrings[0] = aToolTipNames[0] + ", " + aToolTipNames[1] + ", " + aToolTipNames[2]; - aBuiltStrings[1] = aToolTipNames[3] + ", " + aToolTipNames[4] + ", " + aToolTipNames[5]; - aBuiltStrings[2] = aToolTipNames[6] + ", " + aToolTipNames[7] + ", " + aToolTipNames[8]; - - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Multi-Machine") - .addInfo("250% faster than using single block machines of the same voltage") - .addInfo("Only uses 80% of the EU/t normally required") - .addInfo("Processes two items per voltage tier") - .addInfo("Machine Type: Metal - " + EnumChatFormatting.YELLOW + aBuiltStrings[0] + EnumChatFormatting.RESET) - .addInfo("Machine Type: Fluid - " + EnumChatFormatting.YELLOW + aBuiltStrings[1] + EnumChatFormatting.RESET) - .addInfo("Machine Type: Misc - " + EnumChatFormatting.YELLOW + aBuiltStrings[2] + EnumChatFormatting.RESET) - .addInfo("Read Multi-Machine Manual for extra information") - .addInfo( - EnumChatFormatting.AQUA + "You can use Solidifier Hatch to solidify multiple liquids." - + EnumChatFormatting.RESET) - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front Center") - .addCasingInfoMin("Multi-Use Casings", 6, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialMultiMachine.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) - .casingIndex(getTextureIndex()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 2)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAIndustrialMultiMachineActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAIndustrialMultiMachine; - } - - @Override - protected int getCasingTextureId() { - return getTextureIndex(); - } - - @Override - public int getMaxParallelRecipes() { - return (2 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - switch (machineMode) { - case MACHINEMODE_METAL -> { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialMultiMachine_ModeMetal; - } - case MACHINEMODE_FLUID -> { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialMultiMachine_ModeFluid; - } - default -> { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialMultiMachine_ModeMisc; - } - } - } - - public int getTextureIndex() { - return TAE.getIndexFromPage(2, 2); - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - private ItemStack getCircuit(ItemStack[] t) { - for (ItemStack j : t) { - if (j.getItem() == GT_Utility.getIntegratedCircuit(0) - .getItem()) { - if (j.getItemDamage() >= 20 && j.getItemDamage() <= 22) { - return j; - } - } - } - return null; - } - - private int getCircuitID(ItemStack circuit) { - int H = circuit.getItemDamage(); - int T = (H == 20 ? 0 : (H == 21 ? 1 : (H == 22 ? 2 : -1))); - return MODE_MAP[machineMode][T]; - } - - @Override - public RecipeMap getRecipeMap() { - return null; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList( - RecipeMaps.compressorRecipes, - RecipeMaps.latheRecipes, - RecipeMaps.polarizerRecipes, - RecipeMaps.fermentingRecipes, - RecipeMaps.fluidExtractionRecipes, - RecipeMaps.extractorRecipes, - RecipeMaps.laserEngraverRecipes, - RecipeMaps.autoclaveRecipes, - RecipeMaps.fluidSolidifierRecipes); - } - - @Override - public int getRecipeCatalystPriority() { - return -10; - } - - private static RecipeMap getRecipeMap(int aMode) { - if (aMode == MODE_COMPRESSOR) { - return RecipeMaps.compressorRecipes; - } else if (aMode == MODE_LATHE) { - return RecipeMaps.latheRecipes; - } else if (aMode == MODE_MAGNETIC) { - return RecipeMaps.polarizerRecipes; - } else if (aMode == MODE_FERMENTER) { - return RecipeMaps.fermentingRecipes; - } else if (aMode == MODE_FLUIDEXTRACT) { - return RecipeMaps.fluidExtractionRecipes; - } else if (aMode == MODE_EXTRACTOR) { - return RecipeMaps.extractorRecipes; - } else if (aMode == MODE_LASER) { - return RecipeMaps.laserEngraverRecipes; - } else if (aMode == MODE_AUTOCLAVE) { - return RecipeMaps.autoclaveRecipes; - } else if (aMode == MODE_FLUIDSOLIDIFY) { - return RecipeMaps.fluidSolidifierRecipes; - } else { - return null; - } - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - private ItemStack lastCircuit = null; - private int lastMode = -1; - - @Nonnull - @Override - protected Stream findRecipeMatches(@Nullable RecipeMap map) { - ItemStack circuit = getCircuit(inputItems); - if (circuit == null) { - return Stream.empty(); - } - if (!GT_Utility.areStacksEqual(circuit, lastCircuit)) { - lastRecipe = null; - lastCircuit = circuit; - } - if (machineMode != lastMode) { - lastRecipe = null; - lastMode = machineMode; - } - RecipeMap foundMap = getRecipeMap(getCircuitID(circuit)); - if (foundMap == null) { - return Stream.empty(); - } - return super.findRecipeMatches(foundMap); - } - }.setSpeedBonus(1F / 3.5F) - .setEuModifier(0.8F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public String getMachineModeName() { - return StatCollector.translateToLocal("GT5U.GTPP_MULTI_INDUSTRIAL_MULTI_MACHINE.mode." + machineMode); - } - - @Override - public String[] getInfoData() { - String[] data = super.getInfoData(); - ArrayList mInfo = new ArrayList<>(Arrays.asList(data)); - String mode; - switch (machineMode) { - case MACHINEMODE_METAL -> mode = StatCollector.translateToLocal("GTPP.multiblock.multimachine.metal"); - case MACHINEMODE_FLUID -> mode = StatCollector.translateToLocal("GTPP.multiblock.multimachine.fluid"); - default -> mode = StatCollector.translateToLocal("GTPP.multiblock.multimachine.misc"); - } - mInfo.add(mode); - return mInfo.toArray(new String[0]); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - if (aNBT.hasKey("mInternalMode")) { - machineMode = aNBT.getInteger("mInternalMode"); - } - super.loadNBTData(aNBT); - } - - @Override - public boolean isInputSeparationEnabled() { - return true; - } - - @Override - protected CheckRecipeResult doCheckRecipe() { - - if (machineMode != MACHINEMODE_MISC || !isInputSeparationEnabled()) { - return super.doCheckRecipe(); - } else { - CheckRecipeResult result = CheckRecipeResultRegistry.NO_RECIPE; - - // check crafting input hatches first - if (supportsCraftingMEBuffer()) { - for (IDualInputHatch dualInputHatch : mDualInputHatches) { - for (var it = dualInputHatch.inventories(); it.hasNext();) { - IDualInputInventory slot = it.next(); - processingLogic.setInputItems(slot.getItemInputs()); - processingLogic.setInputFluids(slot.getFluidInputs()); - CheckRecipeResult foundResult = processingLogic.process(); - if (foundResult.wasSuccessful()) { - return foundResult; - } - if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { - // Recipe failed in interesting way, so remember that and continue searching - result = foundResult; - } - } - } - } - - // Logic for GT_MetaTileEntity_Hatch_Solidifier - for (GT_MetaTileEntity_Hatch_Input solidifierHatch : mInputHatches) { - if (solidifierHatch instanceof GT_MetaTileEntity_Hatch_Solidifier) { - ItemStack mold = ((GT_MetaTileEntity_Hatch_Solidifier) solidifierHatch).getMold(); - FluidStack fluid = solidifierHatch.getFluid(); - - if (mold != null && fluid != null) { - List inputItems = new ArrayList<>(); - inputItems.add(mold); - inputItems.add(GT_Utility.getIntegratedCircuit(22)); - - processingLogic.setInputItems(inputItems.toArray(new ItemStack[0])); - processingLogic.setInputFluids(fluid); - - CheckRecipeResult foundResult = processingLogic.process(); - if (foundResult.wasSuccessful()) { - return foundResult; - } - if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { - // Recipe failed in interesting way, so remember that and continue searching - result = foundResult; - } - } - } - } - processingLogic.clear(); - processingLogic.setInputFluids(getStoredFluids()); - // Default logic - for (GT_MetaTileEntity_Hatch_InputBus bus : mInputBusses) { - if (bus instanceof GT_MetaTileEntity_Hatch_CraftingInput_ME) { - continue; - } - List inputItems = new ArrayList<>(); - for (int i = bus.getSizeInventory() - 1; i >= 0; i--) { - ItemStack stored = bus.getStackInSlot(i); - if (stored != null) { - inputItems.add(stored); - } - } - if (canUseControllerSlotForRecipe() && getControllerSlot() != null) { - inputItems.add(getControllerSlot()); - } - processingLogic.setInputItems(inputItems.toArray(new ItemStack[0])); - CheckRecipeResult foundResult = processingLogic.process(); - if (foundResult.wasSuccessful()) { - return foundResult; - } - if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { - // Recipe failed in interesting way, so remember that and continue searching - result = foundResult; - } - } - - return result; - } - } - - @Override - public ArrayList getStoredFluids() { - ArrayList rList = new ArrayList<>(); - for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) { - if (tHatch instanceof GT_MetaTileEntity_Hatch_Solidifier) { - continue; - } - - setHatchRecipeMap(tHatch); - if (tHatch instanceof GT_MetaTileEntity_Hatch_MultiInput) { - for (FluidStack tFluid : ((GT_MetaTileEntity_Hatch_MultiInput) tHatch).getStoredFluid()) { - if (tFluid != null) { - rList.add(tFluid); - } - } - } else if (tHatch instanceof GT_MetaTileEntity_Hatch_Input_ME) { - if (tHatch.isValid()) { - for (FluidStack fluidStack : ((GT_MetaTileEntity_Hatch_Input_ME) tHatch).getStoredFluids()) { - if (fluidStack == null) continue; - rList.add(fluidStack); - } - } - } else { - if (tHatch.getFillableStack() != null) { - rList.add(tHatch.getFillableStack()); - } - } - } - - return rList; - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("mode", machineMode); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - if (tag.hasKey("mode")) { - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector - .translateToLocal("GT5U.GTPP_MULTI_INDUSTRIAL_MULTI_MACHINE.mode." + tag.getInteger("mode")) - + EnumChatFormatting.RESET); - } - } - - @Override - public boolean supportsMachineModeSwitch() { - return true; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - setMachineMode(nextMachineMode()); - PlayerUtils.messagePlayer( - aPlayer, - String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); - } - - @Override - public int nextMachineMode() { - mLastRecipe = null; - if (machineMode == MACHINEMODE_METAL) return MACHINEMODE_FLUID; - else if (machineMode == MACHINEMODE_FLUID) return MACHINEMODE_MISC; - else return MACHINEMODE_METAL; - } - - @Override - public void setMachineModeIcons() { - machineModeIcons.clear(); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_LPF_METAL); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_LPF_FLUID); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_DEFAULT); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialPlatePress.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialPlatePress.java deleted file mode 100644 index d7e7b2047f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialPlatePress.java +++ /dev/null @@ -1,262 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.SoundResource; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_IndustrialPlatePress - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - - private static final int MACHINEMODE_BENDER = 0; - private static final int MACHINEMODE_FORMER = 1; - - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialPlatePress(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialPlatePress(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialPlatePress(this.mName); - } - - @Override - public String getMachineType() { - return "Bending Machine, Forming Press"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for Advanced Bending & Forming") - .addInfo("500% faster than using single block machines of the same voltage") - .addInfo("Processes four items per voltage tier") - .addInfo("Circuit for recipe goes in the Input Bus") - .addInfo("Each Input Bus can have a different Circuit/Shape!") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front Center") - .addCasingInfoMin("Material Press Machine Casings", 6, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialPlatePress.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(50) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 4)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_COMPRESSOR_OP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDIndustrialPlatePressActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDIndustrialPlatePress; - } - - @Override - protected int getCasingTextureId() { - return 50; - } - - @Override - public RecipeMap getRecipeMap() { - return (machineMode == MACHINEMODE_FORMER) ? RecipeMaps.formingPressRecipes : RecipeMaps.benderRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(RecipeMaps.formingPressRecipes, RecipeMaps.benderRecipes); - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 6F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return (4 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - if (machineMode == MACHINEMODE_FORMER) - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialPlatePress_ModeForming; - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialPlatePress_ModeBending; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - // Migrates old NBT tag to the new one - if (aNBT.hasKey("mFormingMode")) { - machineMode = aNBT.getBoolean("mFormingMode") ? MACHINEMODE_FORMER : MACHINEMODE_BENDER; - } - super.loadNBTData(aNBT); - } - - @Override - public boolean supportsMachineModeSwitch() { - return true; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - setMachineMode(nextMachineMode()); - PlayerUtils.messagePlayer( - aPlayer, - String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); - } - - @Override - public void setMachineModeIcons() { - machineModeIcons.clear(); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_BENDING); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_FORMING); - } - - @Override - public String getMachineModeName() { - return StatCollector.translateToLocal("GT5U.GTPP_MULTI_INDUSTRIAL_PLATE_PRESS.mode." + machineMode); - } - - @Override - public boolean isInputSeparationEnabled() { - return true; - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("mode", machineMode); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector - .translateToLocal("GT5U.GTPP_MULTI_INDUSTRIAL_PLATE_PRESS.mode." + tag.getInteger("mode")) - + EnumChatFormatting.RESET); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialSifter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialSifter.java deleted file mode 100644 index 5189e546a5..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialSifter.java +++ /dev/null @@ -1,209 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.Random; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -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; - -public class GregtechMetaTileEntity_IndustrialSifter - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialSifter(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialSifter(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialSifter(this.mName); - } - - @Override - public String getMachineType() { - return "Sifter"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Sifter") - .addInfo("400% faster than single-block machines of the same voltage") - .addInfo("Only uses 75% of the EU/t normally required") - .addInfo("Processes four items per voltage tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(5, 3, 5, false) - .addController("Bottom Center") - .addCasingInfoMin("Sieve Grate", 18, false) - .addCasingInfoMin("Sieve Casings", 35, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCCCC", "CMMMC", "CMMMC", "CMMMC", "CCCCC" }, - { "CCCCC", "CMMMC", "CMMMC", "CMMMC", "CCCCC" }, - { "CC~CC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialSifter.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) - .casingIndex(TAE.GTPP_INDEX(21)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 5)))) - .addElement('M', ofBlock(ModBlocks.blockCasings2Misc, 6)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 2, 2, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 2, 2, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 2, 2, 0) && mCasing >= 35 && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDIndustrialSifterActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDIndustrialSifter; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(21); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.sifterRecipes; - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - public void onPreTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive()) - && (aBaseMetaTileEntity.getFrontFacing() != ForgeDirection.UP) - && (aBaseMetaTileEntity.getCoverIDAtSide(ForgeDirection.UP) == 0) - && (!aBaseMetaTileEntity.getOpacityAtSide(ForgeDirection.UP))) { - final Random tRandom = aBaseMetaTileEntity.getWorld().rand; - if (tRandom.nextFloat() > 0.4) return; - - final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX * 2; - final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ * 2; - - aBaseMetaTileEntity.getWorld() - .spawnParticle( - "smoke", - (aBaseMetaTileEntity.getXCoord() + xDir + 2.1F) - (tRandom.nextFloat() * 3.2F), - aBaseMetaTileEntity.getYCoord() + 2.5f + (tRandom.nextFloat() * 1.2F), - (aBaseMetaTileEntity.getZCoord() + zDir + 2.1F) - (tRandom.nextFloat() * 3.2F), - 0.0, - 0.0, - 0.0); - } - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 5F) - .setEuModifier(0.75F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return (4 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialSifter; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public boolean isOverclockerUpgradable() { - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialThermalCentrifuge.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialThermalCentrifuge.java deleted file mode 100644 index d1e9e0d6a0..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialThermalCentrifuge.java +++ /dev/null @@ -1,184 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -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; - -public class GregtechMetaTileEntity_IndustrialThermalCentrifuge extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialThermalCentrifuge(final int aID, final String aName, - final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialThermalCentrifuge(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialThermalCentrifuge(this.mName); - } - - @Override - public String getMachineType() { - return "Thermal Centrifuge"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Thermal Centrifuge") - .addInfo("150% faster than using single block machines of the same voltage") - .addInfo("Only uses 80% of the EU/t normally required") - .addInfo("Processes eight items per voltage tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 2, 3, false) - .addController("Front Center") - .addCasingInfoMin("Thermal Processing Casings/Noise Hazard Sign Blocks", 8, false) - .addInputBus("Bottom Casing", 1) - .addOutputBus("Bottom Casing", 1) - .addEnergyHatch("Bottom Casing", 1) - .addMaintenanceHatch("Bottom Casing", 1) - .addMufflerHatch("Bottom Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape(mName, transpose(new String[][] { { "X~X", "XXX", "XXX" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - ofChain( - buildHatchAdder(GregtechMetaTileEntity_IndustrialThermalCentrifuge.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .build(), - onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 0)), - onElementPass(x -> ++x.mCasing, ofBlock(GregTech_API.sBlockCasings3, 9)))) - .addElement( - 'X', - ofChain( - onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 0)), - onElementPass(x -> ++x.mCasing, ofBlock(GregTech_API.sBlockCasings3, 9)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 0, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 0, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 0, 0) && mCasing >= 8 && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDIndustrialThermalCentrifugeActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDIndustrialThermalCentrifuge; - } - - @Override - protected int getCasingTextureId() { - return getCasingTextureIndex(); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.thermalCentrifugeRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 2.5F) - .setEuModifier(0.8F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return (8 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialThermalCentrifuge; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - public Block getCasingBlock() { - return ModBlocks.blockCasings2Misc; - } - - public byte getCasingMeta() { - return 0; - } - - public byte getCasingTextureIndex() { - return (byte) TAE.GTPP_INDEX(16); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java deleted file mode 100644 index a38b7f1a9e..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialVacuumFreezer.java +++ /dev/null @@ -1,256 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.Objects; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GT_MetaTileEntity_Hatch_CustomFluidBase; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntity_IndustrialVacuumFreezer extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - public static int CASING_TEXTURE_ID; - public static String mCryoFuelName = "Gelid Cryotheum"; - public static String mCasingName = "Advanced Cryogenic Casing"; - public static String mHatchName = "Cryotheum Hatch"; - public static FluidStack mFuelStack; - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - private final ArrayList mCryotheumHatches = new ArrayList<>(); - - public GregtechMetaTileEntity_IndustrialVacuumFreezer(final int aID, final String aName, - final String aNameRegional) { - super(aID, aName, aNameRegional); - mFuelStack = FluidUtils.getFluidStack("cryotheum", 1); - CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 10); - } - - public GregtechMetaTileEntity_IndustrialVacuumFreezer(final String aName) { - super(aName); - mFuelStack = FluidUtils.getFluidStack("cryotheum", 1); - CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 10); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return (IMetaTileEntity) new GregtechMetaTileEntity_IndustrialVacuumFreezer(this.mName); - } - - @Override - public String getMachineType() { - return "Vacuum Freezer"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Factory Grade Advanced Vacuum Freezer") - .addInfo("Speed: +100% | EU Usage: 100% | Parallel: 4") - .addInfo("Consumes 10L of " + mCryoFuelName + "/s during operation") - .addInfo("Constructed exactly the same as a normal Vacuum Freezer") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front Center") - .addCasingInfoMin(mCasingName, 10, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addOtherStructurePart(mHatchName, "Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - ofChain( - buildHatchAdder(GregtechMetaTileEntity_IndustrialVacuumFreezer.class) - .adder(GregtechMetaTileEntity_IndustrialVacuumFreezer::addCryotheumHatch) - .hatchId(967) - .shouldReject(t -> !t.mCryotheumHatches.isEmpty()) - .casingIndex(CASING_TEXTURE_ID) - .dot(1) - .build(), - buildHatchAdder(GregtechMetaTileEntity_IndustrialVacuumFreezer.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) - .casingIndex(CASING_TEXTURE_ID) - .dot(1) - .build(), - onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 10)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - mCryotheumHatches.clear(); - return checkPiece(mName, 1, 1, 0) && mCasing >= 10 && checkHatch(); - } - - @Override - public boolean checkHatch() { - return super.checkHatch() && !mCryotheumHatches.isEmpty(); - } - - private boolean addCryotheumHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_CustomFluidBase - && aMetaTileEntity.getBaseMetaTileEntity() - .getMetaTileID() == 967) { - return addToMachineListInternal(mCryotheumHatches, aTileEntity, aBaseCasingIndex); - } - } - return false; - } - - @Override - public void updateSlots() { - for (GT_MetaTileEntity_Hatch_CustomFluidBase tHatch : filterValidMTEs(mCryotheumHatches)) tHatch.updateSlots(); - super.updateSlots(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAIndustrialVacuumFreezerActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAIndustrialVacuumFreezer; - } - - @Override - protected int getCasingTextureId() { - return CASING_TEXTURE_ID; - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.advancedFreezerRecipes; - } - - @Override - public boolean isCorrectMachinePart(final ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 2F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return 4; - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialVacuumFreezer; - } - - @Override - public int getDamageToComponent(final ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - /* - * if (this.getBaseMetaTileEntity().isActive()) { if (!this.depleteInput(mFuelStack.copy())) { - * this.getBaseMetaTileEntity().setActive(false); } } - */ - super.onPostTick(aBaseMetaTileEntity, aTick); - - if (this.mStartUpCheck < 0) { - if (this.mMaxProgresstime > 0 && this.mProgresstime != 0 || this.getBaseMetaTileEntity() - .hasWorkJustBeenEnabled()) { - if (aTick % 20 == 0 || this.getBaseMetaTileEntity() - .hasWorkJustBeenEnabled()) { - if (!this.depleteInputFromRestrictedHatches(this.mCryotheumHatches, 10)) { - this.causeMaintenanceIssue(); - this.stopMachine( - ShutDownReasonRegistry - .outOfFluid(Objects.requireNonNull(FluidUtils.getFluidStack("cryotheum", 10)))); - } - } - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialWashPlant.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialWashPlant.java deleted file mode 100644 index 8645bc6686..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialWashPlant.java +++ /dev/null @@ -1,425 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import ic2.core.init.BlocksItems; -import ic2.core.init.InternalName; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_IndustrialWashPlant - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - private static final int MACHINEMODE_OREWASH = 0; - private static final int MACHINEMODE_SIMPLEWASH = 1; - private static final int MACHINEMODE_CHEMBATH = 2; - - public GregtechMetaTileEntity_IndustrialWashPlant(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialWashPlant(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialWashPlant(this.mName); - } - - @Override - public String getMachineType() { - return "Ore Washer, Simple Washer, Chemical Bath"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Wash Plant") - .addInfo("Can be configured with a screwdriver to also do Simple Washer and process Chemical Bathing") - .addInfo("400% faster than using single block machines of the same voltage") - .addInfo("Processes four item per voltage tier") - .addInfo("Always requires an Input Hatch full of water to refill structure") - .addInfo("Need to be filled with water.") - .addInfo("Will automatically fill water from input hatch.") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(5, 3, 7, true) - .addController("Front Center") - .addCasingInfoMin("Wash Plant Casings", 40, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCCCC", "CwwwC", "CwwwC", "CwwwC", "CwwwC", "CwwwC", "CCCCC" }, - { "CC~CC", "CwwwC", "CwwwC", "CwwwC", "CwwwC", "CwwwC", "CCCCC" }, - { "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialWashPlant.class) - .atLeast(InputBus, InputHatch, OutputHatch, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) - .addElement( - 'w', - ofChain( - isAir(), - ofBlockAnyMeta(Blocks.water), - ofBlockAnyMeta(Blocks.flowing_water), - ofBlockAnyMeta(BlocksItems.getFluidBlock(InternalName.fluidDistilledWater)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 2, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 2, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 2, 1, 0) && mCasing >= 40 && checkHatch(); - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - // don't rotate a washer, water will flow out. - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDIndustrialWashPlantActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDIndustrialWashPlant; - } - - @Override - protected int getCasingTextureId() { - return getCasingTextureIndex(); - } - - @Override - public RecipeMap getRecipeMap() { - switch (machineMode) { - case MACHINEMODE_OREWASH -> { - return RecipeMaps.oreWasherRecipes; - } - case MACHINEMODE_SIMPLEWASH -> { - return GTPPRecipeMaps.simpleWasherRecipes; - } - default -> { - return RecipeMaps.chemicalBathRecipes; - } - } - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays - .asList(RecipeMaps.oreWasherRecipes, GTPPRecipeMaps.simpleWasherRecipes, RecipeMaps.chemicalBathRecipes); - } - - @Override - public int getRecipeCatalystPriority() { - return -10; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (checkForWater()) { - return CheckRecipeResultRegistry.SUCCESSFUL; - } - return SimpleCheckRecipeResult.ofFailure("no_water"); - } - }.setSpeedBonus(1F / 5F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return (4 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - if (machineMode == MACHINEMODE_CHEMBATH) - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialWashPlant_ModeChemBath; - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialWashPlant_ModeWasher; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - public Block getCasingBlock() { - return ModBlocks.blockCasings2Misc; - } - - public byte getCasingMeta() { - return 4; - } - - public byte getCasingTextureIndex() { - return (byte) TAE.GTPP_INDEX(11); - } - - public boolean checkForWater() { - - // Get Facing direction - IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); - int mDirectionX = aBaseMetaTileEntity.getBackFacing().offsetX; - int mCurrentDirectionX; - int mCurrentDirectionZ; - int mOffsetX_Lower = 0; - int mOffsetX_Upper = 0; - int mOffsetZ_Lower = 0; - int mOffsetZ_Upper = 0; - - if (mDirectionX == 0) { - mCurrentDirectionX = 2; - mCurrentDirectionZ = 3; - mOffsetX_Lower = -2; - mOffsetX_Upper = 2; - mOffsetZ_Lower = -3; - mOffsetZ_Upper = 3; - } else { - mCurrentDirectionX = 3; - mCurrentDirectionZ = 2; - mOffsetX_Lower = -3; - mOffsetX_Upper = 3; - mOffsetZ_Lower = -2; - mOffsetZ_Upper = 2; - } - - // if (aBaseMetaTileEntity.fac) - - final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX * mCurrentDirectionX; - final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ * mCurrentDirectionZ; - - int tAmount = 0; - for (int i = mOffsetX_Lower + 1; i <= mOffsetX_Upper - 1; ++i) { - for (int j = mOffsetZ_Lower + 1; j <= mOffsetZ_Upper - 1; ++j) { - for (int h = 0; h < 2; ++h) { - Block tBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j); - byte tMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir + i, h, zDir + j); - if (tBlock == Blocks.air || tBlock == Blocks.flowing_water || tBlock == Blocks.water) { - if (this.getStoredFluids() != null) { - for (FluidStack stored : this.getStoredFluids()) { - if (stored.isFluidEqual(FluidUtils.getFluidStack("water", 1))) { - if (stored.amount >= 1000) { - // Utils.LOG_WARNING("Going to try swap an air block for water from inut bus."); - stored.amount -= 1000; - Block fluidUsed = null; - if (tBlock == Blocks.air || tBlock == Blocks.flowing_water) { - fluidUsed = Blocks.water; - } - if (tBlock == Blocks.water) { - fluidUsed = BlocksItems.getFluidBlock(InternalName.fluidDistilledWater); - } - aBaseMetaTileEntity.getWorld() - .setBlock( - aBaseMetaTileEntity.getXCoord() + xDir + i, - aBaseMetaTileEntity.getYCoord() + h, - aBaseMetaTileEntity.getZCoord() + zDir + j, - fluidUsed); - } - } - } - } - } - if (tBlock == Blocks.water) { - ++tAmount; - // Utils.LOG_WARNING("Found Water"); - } else if (tBlock == BlocksItems.getFluidBlock(InternalName.fluidDistilledWater)) { - ++tAmount; - ++tAmount; - // Utils.LOG_WARNING("Found Distilled Water"); - } - } - } - } - - boolean isValidWater = tAmount >= 45; - if (isValidWater) { - Logger.WARNING("Filled structure."); - } else { - Logger.WARNING("Did not fill structure."); - } - return isValidWater; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - if (aNBT.hasKey("mChemicalMode")) { - boolean aTempMode = aNBT.getBoolean("mChemicalMode"); - if (aTempMode) { - machineMode = 2; - } else { - machineMode = 0; - } - aNBT.removeTag("mChemicalMode"); - } - if (aNBT.hasKey("mMode")) { - machineMode = aNBT.getInteger("mMode"); - } - super.loadNBTData(aNBT); - } - - @Override - public String getMachineModeName() { - return StatCollector.translateToLocal("GT5U.GTPP_MULTI_WASH_PLANT.mode." + machineMode); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("mode", machineMode); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector.translateToLocal("GT5U.GTPP_MULTI_WASH_PLANT.mode." + tag.getInteger("mode")) - + EnumChatFormatting.RESET); - } - - @Override - public boolean supportsMachineModeSwitch() { - return true; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - setMachineMode(nextMachineMode()); - PlayerUtils.messagePlayer( - aPlayer, - String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); - } - - @Override - public int nextMachineMode() { - if (machineMode == MACHINEMODE_OREWASH) return MACHINEMODE_SIMPLEWASH; - else if (machineMode == MACHINEMODE_SIMPLEWASH) return MACHINEMODE_CHEMBATH; - else return MACHINEMODE_OREWASH; - } - - @Override - public void setMachineModeIcons() { - machineModeIcons.clear(); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_WASHPLANT); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_SIMPLEWASHER); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_CHEMBATH); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialWireMill.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialWireMill.java deleted file mode 100644 index 4304b5b52a..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IndustrialWireMill.java +++ /dev/null @@ -1,213 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -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; - -public class GregtechMetaTileEntity_IndustrialWireMill - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialWireMill(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialWireMill(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialWireMill(this.mName); - } - - @Override - public String getMachineType() { - return "Wiremill"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Wire Factory") - .addInfo("200% faster than using single block machines of the same voltage") - .addInfo("Only uses 75% of the EU/t normally required") - .addInfo("Processes four items per voltage tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 5, true) - .addController("Front Center") - .addCasingInfoMin("Wire Factory Casings", 14, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC", "CCC", "CCC" }, { "C~C", "C-C", "C-C", "C-C", "CCC" }, - { "CCC", "CCC", "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialWireMill.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 14 && checkHatch(); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_RECYCLER_OP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDIndustrialWireMillActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDIndustrialWireMill; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(6); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.wiremillRecipes; - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 3F) - .setEuModifier(0.75F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - inputSeparation = !inputSeparation; - aPlayer.addChatMessage( - new ChatComponentTranslation( - inputSeparation ? "interaction.separateBusses.enabled" : "interaction.separateBusses.disabled")); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { - inputSeparation = aNBT.getBoolean("isBussesSeparate"); - } - } - - @Override - public int getMaxParallelRecipes() { - return (4 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialWireMill; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - public Block getCasingBlock() { - return ModBlocks.blockCasingsMisc; - } - - public byte getCasingMeta() { - return 6; - } - - public byte getCasingTextureIndex() { - return (byte) TAE.GTPP_INDEX(6); - } - - @Override - public boolean supportsInputSeparation() { - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IsaMill.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IsaMill.java deleted file mode 100644 index c14cae9b88..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_IsaMill.java +++ /dev/null @@ -1,529 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; -import net.minecraft.world.chunk.Chunk; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -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.minecraft.BlockPos; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.item.chemistry.general.ItemGenericChemBase; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.EntityUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.GT_MetaTileEntity_Hatch_MillingBalls; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; - -public class GregtechMetaTileEntity_IsaMill extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - protected boolean boostEu = false; - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - private static final IIconContainer frontFaceActive = new CustomIcon("iconsets/Grinder/GRINDER_ACTIVE5"); - private static final IIconContainer frontFace = new CustomIcon("iconsets/Grinder/GRINDER5"); - - private final ArrayList mMillingBallBuses = new ArrayList<>(); - private static final DamageSource mIsaMillDamageSource = new DamageSource("gtpp.grinder").setDamageBypassesArmor(); - - public GregtechMetaTileEntity_IsaMill(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IsaMill(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Large Grinding Machine") - .addInfo("Grind ores.") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 7, false) - .addController("Front Center") - .addCasingInfoMin("IsaMill Exterior Casing", 40, false) - .addOtherStructurePart("IsaMill Gearbox", "5x, Inner Blocks") - .addOtherStructurePart("IsaMill Piping", "8x, ring around controller") - .addStructureInfo("IsaMill Pipings must not be obstructed in front (only air blocks)") - .addOtherStructurePart("Milling Ball Hatch", "Any Casing") - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "DDD", "CCC", "CCC", "CCC", "CCC", "CCC", "CCC" }, - { "D~D", "CGC", "CGC", "CGC", "CGC", "CGC", "CCC" }, - { "DDD", "CCC", "CCC", "CCC", "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - ofChain( - buildHatchAdder(GregtechMetaTileEntity_IsaMill.class) - .adder(GregtechMetaTileEntity_IsaMill::addMillingBallsHatch) - .hatchClass(GT_MetaTileEntity_Hatch_MillingBalls.class) - .shouldReject(t -> !t.mMillingBallBuses.isEmpty()) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .build(), - buildHatchAdder(GregtechMetaTileEntity_IsaMill.class) - .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Energy, Muffler) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .build(), - onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) - .addElement('D', ofBlock(getIntakeBlock(), getIntakeMeta())) - .addElement('G', ofBlock(getGearboxBlock(), getGearboxMeta())) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - mMillingBallBuses.clear(); - return checkPiece(mName, 1, 1, 0) && mCasing >= 48 - 8 && checkHatch(); - } - - @Override - public boolean checkHatch() { - return super.checkHatch() && mMillingBallBuses.size() == 1; - } - - @Override - protected IIconContainer getActiveOverlay() { - return frontFaceActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return frontFace; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(2); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return getMaxEfficiency(aStack) > 0; - } - - private boolean addMillingBallsHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_MillingBalls) { - return addToMachineListInternal(mMillingBallBuses, aMetaTileEntity, aBaseCasingIndex); - } - } - return false; - } - - @Override - public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_MillingBalls) { - log("Found GT_MetaTileEntity_Hatch_MillingBalls"); - return addToMachineListInternal(mMillingBallBuses, aMetaTileEntity, aBaseCasingIndex); - } - return super.addToMachineList(aTileEntity, aBaseCasingIndex); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.millingRecipes; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (this.mUpdate == 1 || this.mStartUpCheck == 1) { - this.mMillingBallBuses.clear(); - } - } - if (aTick % 20 == 0 && isMachineRunning()) { - checkForEntities(aBaseMetaTileEntity, aTick); - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - private final AutoMap mFrontBlockPosCache = new AutoMap<>(); - - public void checkForEntities(IGregTechTileEntity aBaseMetaTileEntity, long aTime) { - - if (aTime % 100 == 0) { - mFrontBlockPosCache.clear(); - } - if (mFrontBlockPosCache.isEmpty()) { - ForgeDirection tSide = aBaseMetaTileEntity.getBackFacing(); - int aTileX = aBaseMetaTileEntity.getXCoord(); - int aTileY = aBaseMetaTileEntity.getYCoord(); - int aTileZ = aBaseMetaTileEntity.getZCoord(); - boolean xFacing = tSide.offsetX != 0; - boolean zFacing = tSide.offsetZ != 0; - - // Check Casings - int aDepthOffset = (tSide == ForgeDirection.NORTH || tSide == ForgeDirection.WEST) ? 1 : -1; - for (int aHorizontalOffset = -1; aHorizontalOffset < 2; aHorizontalOffset++) { - for (int aVerticalOffset = -1; aVerticalOffset < 2; aVerticalOffset++) { - int aX = !xFacing ? (aTileX + aHorizontalOffset) : (aTileX + aDepthOffset); - int aY = aTileY + aVerticalOffset; - int aZ = !zFacing ? (aTileZ + aHorizontalOffset) : (aTileZ + aDepthOffset); - mFrontBlockPosCache.add(new BlockPos(aX, aY, aZ, aBaseMetaTileEntity.getWorld())); - } - } - } - - AutoMap aEntities = getEntities(mFrontBlockPosCache, aBaseMetaTileEntity.getWorld()); - if (!aEntities.isEmpty()) { - for (EntityLivingBase aFoundEntity : aEntities) { - if (aFoundEntity instanceof EntityPlayer aPlayer) { - if (PlayerUtils.isCreative(aPlayer) || !PlayerUtils.canTakeDamage(aPlayer)) { - continue; - } else { - if (aFoundEntity.getHealth() > 0) { - EntityUtils.doDamage(aFoundEntity, mIsaMillDamageSource, getPlayerDamageValue(aPlayer, 10)); - if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive())) { - generateParticles(aFoundEntity); - } - } - } - } else if (aFoundEntity.getHealth() > 0) { - EntityUtils.doDamage( - aFoundEntity, - mIsaMillDamageSource, - Math.max(1, (int) (aFoundEntity.getMaxHealth() / 3))); - if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive())) { - generateParticles(aFoundEntity); - } - } - } - } - } - - // 20 armor points add 80% damage reduction, more points add more damage reduction - private int getPlayerDamageValue(EntityPlayer player, int damage) { - int armorValue = player.getTotalArmorValue(); - int reducedDamage = (int) (damage - damage * (armorValue * 0.04)); - return Math.max(reducedDamage, 0); - } - - private static AutoMap getEntities(AutoMap aPositionsToCheck, World aWorld) { - AutoMap aEntities = new AutoMap<>(); - HashSet aChunksToCheck = new HashSet<>(); - if (!aPositionsToCheck.isEmpty()) { - Chunk aLocalChunk; - for (BlockPos aPos : aPositionsToCheck) { - aLocalChunk = aWorld.getChunkFromBlockCoords(aPos.xPos, aPos.zPos); - aChunksToCheck.add(aLocalChunk); - } - } - if (!aChunksToCheck.isEmpty()) { - AutoMap aEntitiesFound = new AutoMap<>(); - for (Chunk aChunk : aChunksToCheck) { - if (aChunk.isChunkLoaded) { - List[] aEntityLists = aChunk.entityLists; - for (List aEntitySubList : aEntityLists) { - for (Object aEntity : aEntitySubList) { - if (aEntity instanceof EntityLivingBase aPlayer) { - aEntitiesFound.add(aPlayer); - } - } - } - } - } - if (!aEntitiesFound.isEmpty()) { - for (EntityLivingBase aEntity : aEntitiesFound) { - BlockPos aPlayerPos = EntityUtils.findBlockPosOfEntity(aEntity); - for (BlockPos aBlockSpaceToCheck : aPositionsToCheck) { - if (aBlockSpaceToCheck.equals(aPlayerPos)) { - aEntities.add(aEntity); - } - } - } - } - } - return aEntities; - } - - private static void generateParticles(EntityLivingBase aEntity) { - BlockPos aPlayerPosBottom = EntityUtils.findBlockPosOfEntity(aEntity); - BlockPos aPlayerPosTop = aPlayerPosBottom.getUp(); - AutoMap aEntityPositions = new AutoMap<>(); - aEntityPositions.add(aPlayerPosBottom); - aEntityPositions.add(aPlayerPosTop); - for (int i = 0; i < 64; i++) { - BlockPos aEffectPos = aEntityPositions.get(aEntity.height > 1f ? MathUtils.randInt(0, 1) : 0); - float aOffsetX = MathUtils.randFloat(-0.35f, 0.35f); - float aOffsetY = MathUtils.randFloat(-0.25f, 0.35f); - float aOffsetZ = MathUtils.randFloat(-0.35f, 0.35f); - aEntity.worldObj.spawnParticle( - "reddust", - aEffectPos.xPos + aOffsetX, - aEffectPos.yPos + 0.3f + aOffsetY, - aEffectPos.zPos + aOffsetZ, - 0.0D, - 0.0D, - 0.0D); - } - } - - public Block getCasingBlock() { - return ModBlocks.blockCasings5Misc; - } - - public byte getCasingMeta() { - return 0; - } - - public Block getIntakeBlock() { - return ModBlocks.blockCasings5Misc; - } - - public byte getIntakeMeta() { - return 1; - } - - public Block getGearboxBlock() { - return ModBlocks.blockCasings5Misc; - } - - public byte getGearboxMeta() { - return 2; - } - - public byte getCasingTextureIndex() { - return 66; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IsaMill(this.mName); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 1; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIsaMill; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public String[] getExtraInfoData() { - return new String[] { "IsaMill Grinding Machine", "Current Efficiency: " + (mEfficiency / 100) + "%", - getIdealStatus() == getRepairStatus() ? "No Maintainance issues" : "Needs Maintainance" }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String getMachineType() { - return "Grinding Machine"; - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - /* - * Milling Ball Handling - */ - - @Override - public ArrayList getStoredInputs() { - ArrayList tItems = super.getStoredInputs(); - for (GT_MetaTileEntity_Hatch_MillingBalls tHatch : filterValidMTEs(mMillingBallBuses)) { - AutoMap aHatchContent = tHatch.getContentUsageSlots(); - if (!aHatchContent.isEmpty()) { - tItems.addAll(aHatchContent); - } - } - return tItems; - } - - public int getMaxBallDurability(ItemStack aStack) { - return ItemGenericChemBase.getMaxBallDurability(aStack); - } - - private ItemStack findMillingBall(ItemStack[] aItemInputs) { - if (mMillingBallBuses.size() != 1) { - return null; - } else { - GT_MetaTileEntity_Hatch_MillingBalls aBus = mMillingBallBuses.get(0); - if (aBus != null) { - AutoMap aAvailableItems = aBus.getContentUsageSlots(); - if (!aAvailableItems.isEmpty()) { - for (final ItemStack aInput : aItemInputs) { - if (ItemUtils.isMillingBall(aInput)) { - for (ItemStack aBall : aAvailableItems) { - if (GT_Utility.areStacksEqual(aBall, aInput, true)) { - Logger.INFO("Found a valid milling ball to use."); - return aBall; - } - } - } - } - } - } - } - return null; - } - - private void damageMillingBall(ItemStack aStack) { - if (MathUtils.randFloat(0, 10000000) / 10000000f < (1.2f - (0.2 * 1))) { - int damage = getMillingBallDamage(aStack) + 1; - log("damage milling ball " + damage); - if (damage >= getMaxBallDurability(aStack)) { - log("consuming milling ball"); - aStack.stackSize -= 1; - } else { - setDamage(aStack, damage); - } - } else { - log("not damaging milling ball"); - } - } - - private int getMillingBallDamage(ItemStack aStack) { - return ItemGenericChemBase.getMillingBallDamage(aStack); - } - - private void setDamage(ItemStack aStack, int aAmount) { - ItemGenericChemBase.setMillingBallDamage(aStack, aAmount); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - ItemStack millingBall; - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - millingBall = findMillingBall(inputItems); - if (millingBall == null) { - return SimpleCheckRecipeResult.ofFailure("no_milling_ball"); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - public CheckRecipeResult process() { - CheckRecipeResult result = super.process(); - if (result.wasSuccessful()) { - damageMillingBall(millingBall); - } - return result; - } - }.enablePerfectOverclock(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_NuclearSaltProcessingPlant.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_NuclearSaltProcessingPlant.java deleted file mode 100644 index 6d1593bec9..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_NuclearSaltProcessingPlant.java +++ /dev/null @@ -1,224 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.item.ItemStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.TAE; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; - -public class GregtechMetaTileEntity_NuclearSaltProcessingPlant extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - protected GT_Recipe lastRecipeToBuffer; - private int casing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_NuclearSaltProcessingPlant(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_NuclearSaltProcessingPlant(String mName) { - super(mName); - } - - @Override - public String getMachineType() { - return "Reactor Processing Unit, Cold Trap"; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity tileEntity) { - return new GregtechMetaTileEntity_NuclearSaltProcessingPlant(this.mName); - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiAutoCrafter; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Nuclear Salt Processing Plant") - .addInfo("Processes depleted nuclear salts that come from the LFTR") - .addInfo("Handles the recipes of the Reactor Processor Unit and Cold Trap") - .addInfo("Only Thermally Insulated Casings can be replaced with hatches") - .addInfo("Mufflers on top, Energy Hatches on bottom, exactly 2 of each are required") - .addInfo("Maintenance Hatch goes on the back, opposite of the controller block") - .addInfo("Inputs go on the left side of the multi, outputs on the right side") - .addInfo("150% faster than using single block machines of the same voltage") - .addInfo("Processes two items per voltage tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front Center") - .addCasingInfoMin("IV Machine Casing", 58, false) - .addCasingInfoMin("Thermally Insulated Casing", 1, false) - .addInputBus("Left Half", 2) - .addInputHatch("Left Half", 2) - .addOutputBus("Right Half", 3) - .addOutputHatch("Right Half", 3) - .addMufflerHatch("Top Side, 2 Required", 4) - .addEnergyHatch("Bottom Side, 2 Required", 5) - .addMaintenanceHatch("Back Side, Opposite of Controller", 6) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - protected IIconContainer getActiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER_ACTIVE; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER; - } - - @Override - protected int getCasingTextureId() { - return TAE.getIndexFromPage(0, 10); - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "AAA AAA", "ADA ADA", "AAA AAA" }, - { "ABBA ACCA", "B AAA C", "ABBA ACCA" }, { "ABBB~CCCA", "B C", "ABBBFCCCA" }, - { "ABBA ACCA", "B AAA C", "ABBA ACCA" }, { "AAA AAA", "AEA AEA", "AAA AAA" } })) - .addElement('A', ofBlock(GregTech_API.sBlockCasings1, 5)) - .addElement( - 'B', - buildHatchAdder(GregtechMetaTileEntity_NuclearSaltProcessingPlant.class) - .atLeast(InputBus, InputHatch) - .casingIndex(TAE.getIndexFromPage(0, 10)) - .dot(2) - .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockSpecialMultiCasings, 8)))) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_NuclearSaltProcessingPlant.class) - .atLeast(OutputBus, OutputHatch) - .casingIndex(TAE.getIndexFromPage(0, 10)) - .dot(3) - .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockSpecialMultiCasings, 8)))) - .addElement( - 'D', - buildHatchAdder(GregtechMetaTileEntity_NuclearSaltProcessingPlant.class).atLeast(Muffler) - .casingIndex(TAE.getIndexFromPage(0, 10)) - .dot(4) - .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockSpecialMultiCasings, 8)))) - .addElement( - 'E', - buildHatchAdder(GregtechMetaTileEntity_NuclearSaltProcessingPlant.class).atLeast(Energy) - .casingIndex(TAE.getIndexFromPage(0, 10)) - .dot(5) - .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockSpecialMultiCasings, 8)))) - .addElement( - 'F', - buildHatchAdder(GregtechMetaTileEntity_NuclearSaltProcessingPlant.class).atLeast(Maintenance) - .casingIndex(TAE.getIndexFromPage(0, 10)) - .dot(6) - .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockSpecialMultiCasings, 8)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack itemStack, boolean hintsOnly) { - buildPiece(mName, itemStack, hintsOnly, 4, 2, 0); - } - - @Override - public int survivalConstruct(ItemStack itemStack, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, itemStack, 4, 2, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity baseMetaTileEntity, ItemStack itemStack) { - casing = 0; - return checkPiece(mName, 4, 2, 0) && checkHatch(); - } - - @Override - public boolean checkHatch() { - return mEnergyHatches.size() == 2 && mMufflerHatches.size() == 2 && super.checkHatch(); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.nuclearSaltProcessingPlantRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 2.5F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return 2 * (Math.max(1, GT_Utility.getTier(getMaxInputVoltage()))); - } - - @Override - public String[] getExtraInfoData() { - final String running = (this.mMaxProgresstime > 0 ? "Salt Plant running" : "Salt Plant stopped"); - final String maintenance = (this.getIdealStatus() == this.getRepairStatus() ? "No Maintenance issues" - : "Needs Maintenance"); - String tSpecialText; - - if (lastRecipeToBuffer != null && lastRecipeToBuffer.mOutputs[0].getDisplayName() != null) { - tSpecialText = "Currently processing: " + lastRecipeToBuffer.mOutputs[0].getDisplayName(); - } else { - tSpecialText = "Currently processing: Nothing"; - } - - return new String[] { "Nuclear Salt Processing Plant", running, maintenance, tSpecialText }; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_SpargeTower.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_SpargeTower.java deleted file mode 100644 index 19873c9dca..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_SpargeTower.java +++ /dev/null @@ -1,507 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.fluid.IFluidStore; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.GasSpargingRecipe; -import gregtech.api.util.GasSpargingRecipeMap; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntity_SpargeTower extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - protected static final String STRUCTURE_PIECE_BASE = "base"; - protected static final String STRUCTURE_PIECE_LAYER = "layer"; - protected static final String STRUCTURE_PIECE_LAYER_HINT = "layerHint"; - protected static final String STRUCTURE_PIECE_TOP_HINT = "topHint"; - private static final IStructureDefinition STRUCTURE_DEFINITION; - - static { - IHatchElement layeredOutputHatch = OutputHatch - .withCount(GregtechMetaTileEntity_SpargeTower::getCurrentLayerOutputHatchCount) - .withAdder(GregtechMetaTileEntity_SpargeTower::addLayerOutputHatch); - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape(STRUCTURE_PIECE_BASE, transpose(new String[][] { { "b~b", "bbb", "bbb" }, })) - .addShape(STRUCTURE_PIECE_LAYER, transpose(new String[][] { { "lll", "lcl", "lll" } })) - .addShape(STRUCTURE_PIECE_LAYER_HINT, transpose(new String[][] { { "lll", "l-l", "lll" } })) - .addShape(STRUCTURE_PIECE_TOP_HINT, transpose(new String[][] { { "lll", "lll", "lll" } })) - .addElement( - 'b', - buildHatchAdder(GregtechMetaTileEntity_SpargeTower.class) - .atLeast(Energy, InputHatch, InputBus, Maintenance) - .disallowOnly(ForgeDirection.UP) - .casingIndex(getCasingIndex()) - .dot(1) - .buildAndChain( - onElementPass( - GregtechMetaTileEntity_SpargeTower::onCasingFound, - ofBlock(ModBlocks.blockCasings5Misc, 4)))) - .addElement( - 'l', - ofChain( - buildHatchAdder(GregtechMetaTileEntity_SpargeTower.class).atLeast(layeredOutputHatch) - .disallowOnly(ForgeDirection.UP, ForgeDirection.DOWN) - .casingIndex(getCasingIndex()) - .dot(2) - .build(), - ofHatchAdder(GregtechMetaTileEntity_SpargeTower::addEnergyInputToMachineList, getCasingIndex(), 2), - ofHatchAdder(GregtechMetaTileEntity_SpargeTower::addMaintenanceToMachineList, getCasingIndex(), 2), - onElementPass( - GregtechMetaTileEntity_SpargeTower::onCasingFound, - ofBlock(ModBlocks.blockCasings5Misc, 4)))) - .addElement( - 'c', - ofChain( - onElementPass( - t -> t.onTopLayerFound(false), - ofHatchAdder(GregtechMetaTileEntity_SpargeTower::addOutputToMachineList, getCasingIndex(), 3)), - onElementPass( - t -> t.onTopLayerFound(false), - ofHatchAdder( - GregtechMetaTileEntity_SpargeTower::addMaintenanceToMachineList, - getCasingIndex(), - 3)), - onElementPass(t -> t.onTopLayerFound(true), ofBlock(ModBlocks.blockCasings5Misc, 4)), - isAir())) - .build(); - } - - protected final List> mOutputHatchesByLayer = new ArrayList<>(); - protected int mHeight; - protected int mCasing; - protected boolean mTopLayerFound; - - public GregtechMetaTileEntity_SpargeTower(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_SpargeTower(String aName) { - super(aName); - } - - public static int getCasingIndex() { - return 68; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_SpargeTower(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Gas Sparge Tower") - .addInfo("Controller block for the Sparging Tower") - .addInfo("Runs gases through depleted molten salts to extract precious fluids") - .addInfo("Works the same way as the Distillation Tower, but with a fixed height of 8") - .addInfo("Fluids are only put out at the correct height") - .addInfo("The correct height equals the slot number in the NEI recipe") - .addSeparator() - .beginStructureBlock(3, 8, 3, true) - .addController("Front bottom") - .addOtherStructurePart("Sparge Tower Exterior Casing", "45 (minimum)") - .addEnergyHatch("Any casing", 1, 2) - .addMaintenanceHatch("Any casing", 1, 2, 3) - .addInputHatch("2x Input Hatches (Any bottom layer casing)", 1) - .addOutputHatch("6x Output Hatches (At least one per layer except bottom layer)", 2, 3) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCASpargeTowerActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCASpargeTower; - } - - @Override - protected int getCasingTextureId() { - return getCasingIndex(); - } - - @Override - public RecipeMap getRecipeMap() { - if (GTPPRecipeMaps.spargeTowerFakeRecipes.getAllRecipes() - .isEmpty()) { - generateRecipes(); - } - return GTPPRecipeMaps.spargeTowerFakeRecipes; - } - - private static boolean generateRecipes() { - for (GasSpargingRecipe aRecipe : GasSpargingRecipeMap.mRecipes) { - GT_Recipe newRecipe = new GT_Recipe( - false, - new ItemStack[] {}, - new ItemStack[] {}, - null, - null, - aRecipe.mFluidInputs.clone(), - new FluidStack[] {}, - aRecipe.mDuration, - aRecipe.mEUt, - 0); - GTPPRecipeMaps.spargeTowerFakeRecipes.add(newRecipe); - } - return !GTPPRecipeMaps.spargeTowerFakeRecipes.getAllRecipes() - .isEmpty(); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - ArrayList tFluidList = getStoredFluids(); - long tVoltage = GT_Utility.roundUpVoltage(this.getMaxInputVoltage()); - byte tTier = (byte) Math.max(0, GT_Utility.getTier(tVoltage)); - FluidStack[] tFluids = tFluidList.toArray(new FluidStack[0]); - if (tFluids.length > 0) { - GT_Recipe tRecipe = getRecipeMap() - .findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[tTier], tFluids); - if (tRecipe != null) { - FluidStack[] possibleOutputs = getPossibleByproductsOfSparge( - tRecipe.mFluidInputs[0], - tRecipe.mFluidInputs[1]).toArray(new FluidStack[0]); - if (canOutputAll(possibleOutputs) && tRecipe.isRecipeInputEqual(true, tFluids)) { - this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - - calculateOverclockedNessMulti((long) tRecipe.mEUt, tRecipe.mDuration, 1, tVoltage); - mMaxProgresstime = Math.max(1, mMaxProgresstime); - ArrayList aFluidOutputs = getByproductsOfSparge( - tRecipe.mFluidInputs[0], - tRecipe.mFluidInputs[1]); - this.mOutputFluids = aFluidOutputs.toArray(new FluidStack[0]); - updateSlots(); - - if (lEUt > 0) { - lEUt = (-lEUt); - } - - return CheckRecipeResultRegistry.SUCCESSFUL; - } - } - } - this.lEUt = 0; - this.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_RECIPE; - } - - private static List getPossibleByproductsOfSparge(final FluidStack aSpargeGas, - final FluidStack aSpentFuel) { - GasSpargingRecipe aSpargeRecipe = GasSpargingRecipeMap.findRecipe(aSpargeGas, aSpentFuel); - ArrayList aOutputGases = new ArrayList<>(); - if (aSpargeRecipe == null) { - return aOutputGases; - } - - aOutputGases.add(aSpargeRecipe.mOutputSpargedFuel.copy()); - ArrayList aTempMap = new ArrayList<>(); - for (int i = 2; i < aSpargeRecipe.mFluidOutputs.length; i++) { - int aGasAmount = aSpargeRecipe.mMaxOutputQuantity[i - 2] / 100; - FluidStack aOutput = aSpargeRecipe.mFluidOutputs[i].copy(); - FluidStack aSpargeOutput = null; - if (aGasAmount > 0) { - aSpargeOutput = new FluidStack(aOutput.getFluid(), aGasAmount); - } - aTempMap.add(aSpargeOutput); - } - aOutputGases.add(new FluidStack(aSpargeRecipe.mInputGas.getFluid(), aSpargeRecipe.mInputGas.amount)); - aOutputGases.addAll(aTempMap); - return aOutputGases; - } - - private static ArrayList getByproductsOfSparge(final FluidStack aSpargeGas, - final FluidStack aSpentFuel) { - GasSpargingRecipe aSpargeRecipe = GasSpargingRecipeMap.findRecipe(aSpargeGas, aSpentFuel); - ArrayList aOutputGases = new ArrayList<>(); - if (aSpargeRecipe == null) { - Logger.INFO("Did not find sparge recipe!"); - return aOutputGases; - } - int aSpargeGasAmount = aSpargeRecipe.mInputGas.amount; - - aOutputGases.add(aSpargeRecipe.mOutputSpargedFuel.copy()); - ArrayList aTempMap = new ArrayList<>(); - for (int i = 2; i < aSpargeRecipe.mFluidOutputs.length; i++) { - int aGasAmount = MathUtils.randInt(0, (aSpargeRecipe.mMaxOutputQuantity[i - 2] / 100)); - FluidStack aOutput = aSpargeRecipe.mFluidOutputs[i].copy(); - aSpargeGasAmount -= aGasAmount; - FluidStack aSpargeOutput = null; - if (aGasAmount > 0) { - aSpargeOutput = new FluidStack(aOutput.getFluid(), aGasAmount); - } - aTempMap.add(aSpargeOutput); - } - Logger.INFO("Sparge gas left: " + aSpargeGasAmount); - if (aSpargeGasAmount > 0) { - aOutputGases.add(new FluidStack(aSpargeRecipe.mInputGas.getFluid(), aSpargeGasAmount)); - } - // Logger.INFO("Sparge Outputs: "+ItemUtils.getArrayStackNames(aTempMap)); - aOutputGases.addAll(aTempMap); - Logger.INFO("Sparge output size: " + aOutputGases.size()); - // Logger.INFO("Output of sparging: "+ItemUtils.getArrayStackNames(aOutputGases)); - return aOutputGases; - } - - protected void onCasingFound() { - mCasing++; - } - - protected void onTopLayerFound(boolean aIsCasing) { - mTopLayerFound = true; - if (aIsCasing) { - onCasingFound(); - } - } - - protected int getCurrentLayerOutputHatchCount() { - return mOutputHatchesByLayer.size() < mHeight || mHeight <= 0 ? 0 - : mOutputHatchesByLayer.get(mHeight - 1) - .size(); - } - - protected boolean addLayerOutputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null || aTileEntity.isDead() - || !(aTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_Hatch_Output tHatch)) { - Logger.INFO("Bad Output Hatch"); - return false; - } - while (mOutputHatchesByLayer.size() < mHeight) { - mOutputHatchesByLayer.add(new ArrayList<>()); - } - tHatch.updateTexture(aBaseCasingIndex); - boolean addedHatch = mOutputHatchesByLayer.get(mHeight - 1) - .add(tHatch); - Logger.INFO("Added Hatch: " + addedHatch); - return addedHatch; - } - - @Override - public List getFluidOutputSlots(FluidStack[] toOutput) { - return getFluidOutputSlotsByLayer(toOutput, mOutputHatchesByLayer); - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - // don't rotate a freaking tower, it won't work - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - // reset - mOutputHatchesByLayer.forEach(List::clear); - mHeight = 1; - mTopLayerFound = false; - mCasing = 0; - - // check base - if (!checkPiece(STRUCTURE_PIECE_BASE, 1, 0, 0)) { - Logger.INFO("Bad Base. Height: " + mHeight); - return false; - } - - // check each layer - while (mHeight < 8 && checkPiece(STRUCTURE_PIECE_LAYER, 1, mHeight, 0) && !mTopLayerFound) { - if (mOutputHatchesByLayer.get(mHeight - 1) - .isEmpty()) { - // layer without output hatch - Logger.INFO("Height: " + mHeight + " - Missing output on " + (mHeight - 1)); - return false; - } - // not top - mHeight++; - } - - // validate final invariants... - Logger.INFO("Height: " + mHeight); - Logger.INFO("Casings: " + mCasing); - Logger.INFO("Required: " + (7 * mHeight - 5)); - Logger.INFO("Found Top: " + mTopLayerFound); - return mCasing >= 45 && mTopLayerFound && mMaintenanceHatches.size() == 1; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(ItemStack aStack) { - return 0; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - protected void addFluidOutputs(FluidStack[] mOutputFluids2) { - for (int i = 0; i < mOutputFluids2.length && i < mOutputHatchesByLayer.size(); i++) { - FluidStack tStack = mOutputFluids2[i] != null ? mOutputFluids2[i].copy() : null; - if (tStack == null) { - continue; - } - if (!dumpFluid(mOutputHatchesByLayer.get(i), tStack, true)) { - dumpFluid(mOutputHatchesByLayer.get(i), tStack, false); - } - } - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 1, 0, 0); - int tTotalHeight = 8; // min 2 output layer, so at least 1 + 2 height - for (int i = 1; i < tTotalHeight - 1; i++) { - buildPiece(STRUCTURE_PIECE_LAYER_HINT, stackSize, hintsOnly, 1, i, 0); - } - buildPiece(STRUCTURE_PIECE_TOP_HINT, stackSize, hintsOnly, 1, tTotalHeight - 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - mHeight = 0; - int built = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 1, 0, 0, elementBudget, env, false, true); - if (built >= 0) return built; - int tTotalHeight = 8; // min 2 output layer, so at least 1 + 2 height - for (int i = 1; i < tTotalHeight - 1; i++) { - mHeight = i; - built = survivialBuildPiece( - STRUCTURE_PIECE_LAYER_HINT, - stackSize, - 1, - i, - 0, - elementBudget, - env, - false, - true); - if (built >= 0) return built; - } - mHeight = tTotalHeight - 1; - return survivialBuildPiece( - STRUCTURE_PIECE_TOP_HINT, - stackSize, - 1, - tTotalHeight - 1, - 0, - elementBudget, - env, - false, - true); - } - - @Override - public String getMachineType() { - return "Gas Sparger"; - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - @Override - public boolean onPlungerRightClick(EntityPlayer aPlayer, ForgeDirection side, float aX, float aY, float aZ) { - int aLayerIndex = 0; - PlayerUtils - .messagePlayer(aPlayer, "Trying to clear " + mOutputHatchesByLayer.size() + " layers of output hatches."); - for (List layer : this.mOutputHatchesByLayer) { - int aHatchIndex = 0; - for (GT_MetaTileEntity_Hatch_Output hatch : layer) { - if (hatch.mFluid != null) { - PlayerUtils.messagePlayer( - aPlayer, - "Clearing " + hatch.mFluid.amount - + "L of " - + hatch.mFluid.getLocalizedName() - + " from hatch " - + aHatchIndex - + " on layer " - + aLayerIndex - + "."); - hatch.mFluid = null; - } - aHatchIndex++; - } - aLayerIndex++; - } - return aLayerIndex > 0; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - // Ensure that lEUt is negative from loaded NBT data, since this multi consumes EU - if (lEUt > 0) { - lEUt = (-lEUt); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialAlloySmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialAlloySmelter.java new file mode 100644 index 0000000000..ed14343fa3 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialAlloySmelter.java @@ -0,0 +1,221 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; + +import net.minecraft.item.ItemStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.TAE; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; + +public class MTEIndustrialAlloySmelter extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + public static int CASING_TEXTURE_ID; + private HeatingCoilLevel mHeatingCapacity; + private int mLevel = 0; + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialAlloySmelter(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 1); + } + + public MTEIndustrialAlloySmelter(String aName) { + super(aName); + CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 1); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEIndustrialAlloySmelter(this.mName); + } + + @Override + protected IIconContainer getActiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_ACTIVE; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER; + } + + @Override + protected int getCasingTextureId() { + return CASING_TEXTURE_ID; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.alloySmelterRecipes; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialAlloySmelter; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public String getMachineType() { + return "Alloy Smelter"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Alloy Smelter") + .addInfo("Gains one parallel per voltage tier") + .addInfo("Gains one multiplier per coil tier") + .addInfo("Parallel = Tier * Coil Tier") + .addInfo("Gains 5% speed bonus per coil tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 5, 3, true) + .addController("Bottom center") + .addCasingInfoMin("Inconel Reinforced Casings", 8, false) + .addOtherStructurePart("Integral Encasement V", "Middle Layer") + .addOtherStructurePart("Heating Coils", "Above and below Integral Encasements") + .addInputBus("Any Inconel Reinforced Casing", 1) + .addOutputBus("Any Inconel Reinforced Casing", 1) + .addEnergyHatch("Any Inconel Reinforced Casing", 1) + .addMaintenanceHatch("Any Inconel Reinforced Casing", 1) + .addMufflerHatch("Any Inconel Reinforced Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "VVV", "V-V", "VVV" }, + { "HHH", "H-H", "HHH" }, { "C~C", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialAlloySmelter.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(CASING_TEXTURE_ID) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 1)))) + .addElement( + 'H', + ofCoil(MTEIndustrialAlloySmelter::setCoilLevel, MTEIndustrialAlloySmelter::getCoilLevel)) + .addElement('V', ofBlock(ModBlocks.blockCasingsTieredGTPP, 4)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 4, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 4, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + mLevel = 0; + setCoilLevel(HeatingCoilLevel.None); + return checkPiece(mName, 1, 4, 0) && mCasing >= 8 + && getCoilLevel() != HeatingCoilLevel.None + && (mLevel = getCoilLevel().getTier() + 1) > 0 + && checkHatch(); + } + + @Override + public int getMaxParallelRecipes() { + return (this.mLevel * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).setSpeedBoost(100F / (100F + 5F * mLevel)) + .setHeatOC(true) + .setRecipeHeat(0) + // Need to multiply by 2 because heat OC is done only once every 1800 and this one does it once + // every + // 900 + .setMachineHeat((int) (getCoilLevel().getHeat() * 2)); + } + }.setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + public HeatingCoilLevel getCoilLevel() { + return mHeatingCapacity; + } + + public void setCoilLevel(HeatingCoilLevel aCoilLevel) { + mHeatingCapacity = aCoilLevel; + } + + @Override + public boolean isInputSeparationEnabled() { + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialArcFurnace.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialArcFurnace.java new file mode 100644 index 0000000000..256e1219aa --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialArcFurnace.java @@ -0,0 +1,359 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEIndustrialArcFurnace extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + // 862 + private static final int mCasingTextureID = TAE.getIndexFromPage(3, 3); + public static String mCasingName = "Tempered Arc Furnace Casing"; + private boolean mPlasmaMode = false; + + private int mSize = 0; + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialArcFurnace(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialArcFurnace(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialArcFurnace(this.mName); + } + + @Override + public String getMachineType() { + return "(Plasma/Electric) Arc Furnace"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for Industrial Arc Furnace") + .addInfo("250% faster than using single block machines of the same voltage") + .addInfo("Processes 8 * voltage tier * W items") + .addInfo("Right-click controller with a Screwdriver to change modes") + .addInfo("Max Size required to process Plasma recipes") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .addController("Top center") + .addStructureInfo("Size: nxnx3 [WxHxL] (Hollow)") + .addStructureInfo("n can be 3, 5 or 7") + .addCasingInfoMin(mCasingName, 10, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + /** + * The front part of multi. Used to determine the tier, or in other words, determine the size of multi. + */ + private static final String STRUCTURE_PIECE_FRONT = "front"; + /** + * The rest part of multi. + */ + private static final String STRUCTURE_PIECE_REST = "rest"; + private static final int MAX_TIER = 3; + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape(STRUCTURE_PIECE_FRONT + 1, new String[][] { { "CCC", "C~C", "CCC" } }) + .addShape(STRUCTURE_PIECE_FRONT + 2, new String[][] { { "CCCCC", "C C", "C C", "C C", "CCCCC" } }) + .addShape( + STRUCTURE_PIECE_FRONT + 3, + new String[][] { { "CCCCCCC", "C C", "C C", "C C", "C C", "C C", "CCCCCCC" }, }) + .addShape(STRUCTURE_PIECE_REST + 1, new String[][] { { "CCC", "C-C", "CCC" }, { "CCC", "CCC", "CCC" } }) + .addShape( + STRUCTURE_PIECE_REST + 2, + new String[][] { { "CCCCC", "C---C", "C---C", "C---C", "CCCCC" }, + { "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" } }) + .addShape( + STRUCTURE_PIECE_REST + 3, + new String[][] { { "CCCCCCC", "C-----C", "C-----C", "C-----C", "C-----C", "C-----C", "CCCCCCC" }, + { "CCCCCCC", "CCCCCCC", "CCCCCCC", "CCCCCCC", "CCCCCCC", "CCCCCCC", "CCCCCCC" }, }) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialArcFurnace.class) + .atLeast(InputBus, InputHatch, OutputBus, OutputHatch, Maintenance, Energy, Muffler) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .allowOnly(ForgeDirection.NORTH) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings4Misc, 3)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + private int getTierFromHint(ItemStack stackSize) { + if (stackSize.stackSize <= 0 || stackSize.stackSize >= MAX_TIER) { + return MAX_TIER; + } + return stackSize.stackSize; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + int maxTier = getTierFromHint(stackSize); + for (int tier = 1; tier <= maxTier; tier++) { + buildPiece(STRUCTURE_PIECE_FRONT + tier, stackSize, hintsOnly, tier, tier, 0); + } + buildPiece(STRUCTURE_PIECE_REST + maxTier, stackSize, hintsOnly, maxTier, maxTier, -1); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int maxTier = getTierFromHint(stackSize); + int built; + for (int tier = 1; tier <= maxTier; tier++) { + built = survivialBuildPiece( + STRUCTURE_PIECE_FRONT + tier, + stackSize, + tier, + tier, + 0, + elementBudget, + env, + false, + true); + if (built >= 0) return built; + } + + return survivialBuildPiece( + STRUCTURE_PIECE_REST + maxTier, + stackSize, + maxTier, + maxTier, + -1, + elementBudget, + env, + false, + true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + mSize = 0; + int tier = 0; + while (tier < MAX_TIER && checkPiece(STRUCTURE_PIECE_FRONT + (tier + 1), (tier + 1), (tier + 1), 0)) { + tier++; + } + if (tier <= 0) return false; + if (checkPiece(STRUCTURE_PIECE_REST + tier, tier, tier, -1)) { + mSize = 2 * tier + 1; + return mCasing >= 10 && checkHatch(); + } + return false; + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDIndustrialArcFurnaceActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDIndustrialArcFurnace; + } + + @Override + protected int getCasingTextureId() { + return mCasingTextureID; + } + + @Override + public RecipeMap getRecipeMap() { + return mPlasmaMode ? RecipeMaps.plasmaArcFurnaceRecipes : RecipeMaps.arcFurnaceRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(RecipeMaps.arcFurnaceRecipes, RecipeMaps.plasmaArcFurnaceRecipes); + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 3.5F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return (this.mSize * 8 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialArcFurnace; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + public Block getCasingBlock() { + return ModBlocks.blockCasings4Misc; + } + + public byte getCasingMeta() { + return 3; + } + + public byte getCasingTextureIndex() { + return (byte) mCasingTextureID; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (this.mSize > 5) { + this.mPlasmaMode = !mPlasmaMode; + if (mPlasmaMode) { + PlayerUtils.messagePlayer( + aPlayer, + "[" + EnumChatFormatting.RED + + "MODE" + + EnumChatFormatting.RESET + + "] " + + EnumChatFormatting.LIGHT_PURPLE + + "Plasma" + + EnumChatFormatting.RESET); + } else { + PlayerUtils.messagePlayer( + aPlayer, + "[" + EnumChatFormatting.RED + + "MODE" + + EnumChatFormatting.RESET + + "] " + + EnumChatFormatting.YELLOW + + "Electric" + + EnumChatFormatting.RESET); + } + } else { + PlayerUtils.messagePlayer( + aPlayer, + "[" + EnumChatFormatting.RED + + "MODE" + + EnumChatFormatting.RESET + + "] " + + EnumChatFormatting.GRAY + + "Cannot change mode, structure not large enough." + + EnumChatFormatting.RESET); + } + mLastRecipe = null; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("mPlasmaMode", mPlasmaMode); + aNBT.setInteger("mSize", mSize); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mPlasmaMode = aNBT.getBoolean("mPlasmaMode"); + mSize = aNBT.getInteger("mSize"); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setBoolean("mode", mPlasmaMode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector.translateToLocal("GT5U.GTPP_MULTI_ARC_FURNACE.mode." + (tag.getBoolean("mode") ? 1 : 0)) + + EnumChatFormatting.RESET); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCentrifuge.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCentrifuge.java new file mode 100644 index 0000000000..86a971cb5c --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCentrifuge.java @@ -0,0 +1,228 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; + +public class MTEIndustrialCentrifuge extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private boolean mIsAnimated; + private static final CustomIcon frontFaceActive = new CustomIcon("iconsets/LARGECENTRIFUGE_ACTIVE5"); + private static final CustomIcon frontFace = new CustomIcon("iconsets/LARGECENTRIFUGE5"); + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + // public static double recipesComplete = 0; + + public MTEIndustrialCentrifuge(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + mIsAnimated = true; + } + + public MTEIndustrialCentrifuge(final String aName) { + super(aName); + mIsAnimated = true; + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialCentrifuge(this.mName); + } + + @Override + public String getMachineType() { + return "Centrifuge"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Centrifuge") + .addInfo("125% faster than using single block machines of the same voltage") + .addInfo("Disable animations with a screwdriver") + .addInfo("Only uses 90% of the EU/t normally required") + .addInfo("Processes six items per voltage tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front Center") + .addCasingInfoMin("Centrifuge Casings", 6, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialCentrifuge.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 0)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + if (usingAnimations()) { + return frontFaceActive; + } else { + return frontFace; + } + } + + @Override + protected IIconContainer getInactiveOverlay() { + return frontFace; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(0); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.centrifugeNonCellRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setEuModifier(0.9F) + .setSpeedBonus(1F / 2.25F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return (6 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + public Block getCasingBlock() { + return ModBlocks.blockCasingsMisc; + } + + public byte getCasingMeta() { + return 0; + } + + public byte getCasingTextureIndex() { + return (byte) TAE.GTPP_INDEX(0); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialCentrifuge; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + this.mIsAnimated = !mIsAnimated; + Logger.INFO("Is Centrifuge animated " + this.mIsAnimated); + if (this.mIsAnimated) { + PlayerUtils.messagePlayer(aPlayer, "Using Animated Turbine Texture. "); + } else { + PlayerUtils.messagePlayer(aPlayer, "Using Static Turbine Texture. "); + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("mIsAnimated", mIsAnimated); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("mIsAnimated")) { + mIsAnimated = aNBT.getBoolean("mIsAnimated"); + } else { + mIsAnimated = true; + } + } + + public boolean usingAnimations() { + // Logger.INFO("Is animated? "+this.mIsAnimated); + return this.mIsAnimated; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialChisel.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialChisel.java new file mode 100644 index 0000000000..1dc694e584 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialChisel.java @@ -0,0 +1,340 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.List; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTStreamUtil; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchChiselBus; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import team.chisel.carving.Carving; + +public class MTEIndustrialChisel extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mCasing; + + private ItemStack target; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + private ItemStack mInputCache; + private ItemStack mOutputCache; + private GTRecipe mCachedRecipe; + + public MTEIndustrialChisel(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialChisel(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEIndustrialChisel(this.mName); + } + + @Override + public String getMachineType() { + return "Chisel"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Factory Grade Auto Chisel") + .addInfo("Target block goes in Controller slot for common Input Buses") + .addInfo("You can also set a target block in each Chisel Input Bus and use them as an Input Bus") + .addInfo("If no target is provided for common buses, the result of the first chisel is used") + .addInfo("Speed: +200% | EU Usage: 75% | Parallel: Tier x 16") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front center") + .addCasingInfoMin("Sturdy Printer Casing", 6, false) + .addInputBus("Any casing", 1) + .addOutputBus("Any casing", 1) + .addEnergyHatch("Any casing", 1) + .addMaintenanceHatch("Any casing", 1) + .addMufflerHatch("Any casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + // spotless:off + new String[][] { + { "CCC", "CCC", "CCC" }, + { "C~C", "C-C", "CCC" }, + { "CCC", "CCC", "CCC" }, + })) + // spotless:on + .addElement( + 'C', + buildHatchAdder(MTEIndustrialChisel.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(90) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings5Misc, 5)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAIndustrialChiselActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAIndustrialChisel; + } + + @Override + protected int getCasingTextureId() { + return 90; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + private boolean hasValidCache(ItemStack aStack, ItemStack aSpecialSlot, boolean aClearOnFailure) { + if (mInputCache != null && mOutputCache != null && mCachedRecipe != null) { + if (GTUtility.areStacksEqual(aStack, mInputCache) && GTUtility.areStacksEqual(aSpecialSlot, mOutputCache)) { + return true; + } + } + // clear cache if it was invalid + if (aClearOnFailure) { + mInputCache = null; + mOutputCache = null; + mCachedRecipe = null; + } + return false; + } + + private void cacheItem(ItemStack aInputItem, ItemStack aOutputItem, GTRecipe aRecipe) { + mInputCache = aInputItem.copy(); + mOutputCache = aOutputItem.copy(); + mCachedRecipe = aRecipe; + } + + // lets make sure the user isn't trying to make something from a block that doesn't have this as a valid target + private static boolean canBeMadeFrom(ItemStack from, ItemStack to) { + List results = getItemsForChiseling(from); + for (ItemStack s : results) { + if (s.getItem() == to.getItem() && s.getItemDamage() == to.getItemDamage()) { + return true; + } + } + return false; + } + + // lets make sure the user isn't trying to make something from a block that doesn't have this as a valid target + private static boolean hasChiselResults(ItemStack from) { + List results = getItemsForChiseling(from); + return results.size() > 0; + } + + private static List getItemsForChiseling(ItemStack aStack) { + return Carving.chisel.getItemsForChiseling(aStack); + } + + private static ItemStack getChiselOutput(ItemStack aInput, ItemStack aTarget) { + ItemStack tOutput; + if (aTarget != null && canBeMadeFrom(aInput, aTarget)) { + tOutput = aTarget; + } else if (aTarget != null && !canBeMadeFrom(aInput, aTarget)) { + tOutput = null; + } else { + tOutput = getItemsForChiseling(aInput).get(0); + } + return tOutput; + } + + private GTRecipe generateChiselRecipe(ItemStack aInput) { + boolean tIsCached = hasValidCache(aInput, this.target, true); + if (tIsCached || aInput != null && hasChiselResults(aInput)) { + ItemStack tOutput = tIsCached ? mOutputCache.copy() : getChiselOutput(aInput, this.target); + if (tOutput != null) { + if (mCachedRecipe != null && GTUtility.areStacksEqual(aInput, mInputCache) + && GTUtility.areStacksEqual(tOutput, mOutputCache)) { + return mCachedRecipe; + } + // We can chisel this + GTRecipe aRecipe = new GTRecipe( + false, + new ItemStack[] { ItemUtils.getSimpleStack(aInput, 1) }, + new ItemStack[] { ItemUtils.getSimpleStack(tOutput, 1) }, + null, + new int[] { 10000 }, + new FluidStack[] {}, + new FluidStack[] {}, + 20, + 16, + 0); + + // Cache it + cacheItem(aInput, tOutput, aRecipe); + return aRecipe; + } + } + return null; + } + + private GTRecipe getRecipe() { + for (MTEHatchInputBus bus : this.mInputBusses) { + if (bus instanceof MTEHatchChiselBus) { // Chisel buses + if (bus.mInventory[bus.getSizeInventory() - 1] == null) continue; + this.target = bus.mInventory[bus.getSizeInventory() - 1]; + + for (int i = bus.getSizeInventory() - 2; i >= 0; i--) { + ItemStack itemsInSlot = bus.mInventory[i]; + if (itemsInSlot != null) { + GTRecipe tRecipe = generateChiselRecipe(itemsInSlot); + if (tRecipe != null) { + return tRecipe; + } + } + } + } else { + target = this.getControllerSlot(); // Common buses + for (int i = bus.getSizeInventory() - 1; i >= 0; i--) { + ItemStack itemsInSlot = bus.mInventory[i]; + if (itemsInSlot != null) { + GTRecipe tRecipe = generateChiselRecipe(itemsInSlot); + if (tRecipe != null) { + return tRecipe; + } + } + } + } + + } + return null; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected Stream findRecipeMatches(@Nullable RecipeMap map) { + return GTStreamUtil.ofNullable(getRecipe()); + } + }.setSpeedBonus(1F / 3F) + .setEuModifier(0.75F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + protected void sendStartMultiBlockSoundLoop() { + sendLoopStart(PROCESS_START_SOUND_INDEX); + } + + @Override + public int getMaxParallelRecipes() { + return (16 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + private static ResourceLocation sChiselSound = null; + + private static ResourceLocation getChiselSound() { + if (sChiselSound == null) { + sChiselSound = new ResourceLocation(Carving.chisel.getVariationSound(Blocks.stone, 0)); + } + return sChiselSound; + } + + @Override + public void doSound(byte aIndex, double aX, double aY, double aZ) { + switch (aIndex) { + case PROCESS_START_SOUND_INDEX -> GTUtility + .doSoundAtClient(getChiselSound(), getTimeBetweenProcessSounds(), 1.0F, 1.0F, aX, aY, aZ); + case INTERRUPT_SOUND_INDEX -> GTUtility + .doSoundAtClient(SoundResource.IC2_MACHINES_INTERRUPT_ONE, 100, 1.0F, aX, aY, aZ); + } + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialChisel; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCokeOven.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCokeOven.java new file mode 100644 index 0000000000..552f90d855 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCokeOven.java @@ -0,0 +1,208 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.item.ItemStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEIndustrialCokeOven extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mLevel = 0; + private int mCasing; + private int mCasing1; + private int mCasing2; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialCokeOven(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialCokeOven(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialCokeOven(this.mName); + } + + @Override + public String getMachineType() { + return "Coke Oven"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Processes Logs and Coal into Charcoal and Coal Coke.") + .addInfo("Controller Block for the Industrial Coke Oven") + .addInfo("Gain 4% energy discount per voltage tier") + .addInfo("Process 12x materials with Heat Resistant Casings") + .addInfo("Or 24x materials with Heat Proof Casings") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front middle at bottom") + .addCasingInfoMin("Structural Coke Oven Casings", 8, false) + .addCasingInfoMin("Heat Resistant/Proof Coke Oven Casings", 8, false) + .addInputBus("Any Structural Coke Oven Casing", 1) + .addOutputBus("Any Structural Coke Oven Casing", 1) + .addInputHatch("Any Structural Coke Oven Casing", 1) + .addOutputHatch("Any Structural Coke Oven Casing", 1) + .addEnergyHatch("Any Structural Coke Oven Casing", 1) + .addMaintenanceHatch("Any Structural Coke Oven Casing", 1) + .addMufflerHatch("Any Structural Coke Oven Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "C~C", "CCC", "CCC" }, })) + .addShape( + mName + "1", + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "aaa", "a-a", "aaa" }, { "C~C", "CCC", "CCC" }, })) + .addShape( + mName + "2", + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "bbb", "b-b", "bbb" }, { "C~C", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialCokeOven.class) + .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Energy, Muffler) + .casingIndex(TAE.GTPP_INDEX(1)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 1)))) + .addElement( + 'H', + ofChain( + onElementPass(x -> ++x.mCasing1, ofBlock(ModBlocks.blockCasingsMisc, 2)), + onElementPass(x -> ++x.mCasing2, ofBlock(ModBlocks.blockCasingsMisc, 3)))) + .addElement('a', ofBlock(ModBlocks.blockCasingsMisc, 2)) + .addElement('b', ofBlock(ModBlocks.blockCasingsMisc, 3)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + if (stackSize.stackSize == 1) buildPiece(mName + "1", stackSize, hintsOnly, 1, 2, 0); + else buildPiece(mName + "2", stackSize, hintsOnly, 1, 2, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + if (stackSize.stackSize == 1) + return survivialBuildPiece(mName + "1", stackSize, 1, 2, 0, elementBudget, env, false, true); + else return survivialBuildPiece(mName + "2", stackSize, 1, 2, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + mCasing1 = 0; + mCasing2 = 0; + mLevel = 0; + if (checkPiece(mName, 1, 2, 0)) { + if (mCasing1 == 8) mLevel = 1; + if (mCasing2 == 8) mLevel = 2; + return mLevel > 0 && mCasing >= 8 && checkHatch(); + } + return false; + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCACokeOvenActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCACokeOven; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(1); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.cokeOvenRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + protected void setupProcessingLogic(ProcessingLogic logic) { + super.setupProcessingLogic(logic); + logic.setEuModifier((100F - (GTUtility.getTier(getMaxInputVoltage()) * 4)) / 100F); + } + + @Override + public int getMaxParallelRecipes() { + return this.mLevel * 12; + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialCokeOven; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCuttingMachine.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCuttingMachine.java new file mode 100644 index 0000000000..5d80aac3f4 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialCuttingMachine.java @@ -0,0 +1,269 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEIndustrialCuttingMachine extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private int mCasing; + private static final int MACHINEMODE_CUTTER = 0; + private static final int MACHINEMODE_SLICER = 1; + + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialCuttingMachine(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialCuttingMachine(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialCuttingMachine(this.mName); + } + + @Override + public String getMachineType() { + return "Cutting Machine / Slicing Machine"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Cutting Factory") + .addInfo("200% faster than using single block machines of the same voltage") + .addInfo("Only uses 75% of the EU/t normally required") + .addInfo("Processes four items per voltage tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 5, true) + .addController("Front Center") + .addCasingInfoMin("Cutting Factory Frames", 14, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC", "CCC", "CCC" }, { "C~C", "C-C", "C-C", "C-C", "CCC" }, + { "CCC", "CCC", "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialCuttingMachine.class) + .atLeast(InputBus, InputHatch, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 13)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 14 && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDIndustrialCuttingMachineActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDIndustrialCuttingMachine; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(29); + } + + @Override + public RecipeMap getRecipeMap() { + return (machineMode == MACHINEMODE_CUTTER) ? RecipeMaps.cutterRecipes : RecipeMaps.slicerRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(RecipeMaps.cutterRecipes, RecipeMaps.slicerRecipes); + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 3F) + .setEuModifier(0.75F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return (4 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialCuttingMachine; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public boolean isInputSeparationEnabled() { + return true; + } + + public Block getCasingBlock() { + return ModBlocks.blockCasings2Misc; + } + + public byte getCasingMeta() { + return 13; + } + + public byte getCasingTextureIndex() { + return (byte) TAE.GTPP_INDEX(29); + } + + @Override + public boolean supportsMachineModeSwitch() { + return true; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + setMachineMode(nextMachineMode()); + PlayerUtils.messagePlayer( + aPlayer, + String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); + } + + @Override + public void setMachineModeIcons() { + machineModeIcons.clear(); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_CUTTING); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_SLICING); + } + + @Override + public String getMachineModeName() { + return StatCollector.translateToLocal("GT5U.GTPP_MULTI_CUTTING_MACHINE.mode." + machineMode); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + // Migrates old NBT tag to the new one + if (aNBT.hasKey("mCuttingMode")) { + machineMode = aNBT.getBoolean("mCuttingMode") ? MACHINEMODE_CUTTER : MACHINEMODE_SLICER; + } + super.loadNBTData(aNBT); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("mode", machineMode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector.translateToLocal("GT5U.GTPP_MULTI_CUTTING_MACHINE.mode." + tag.getInteger("mode")) + + EnumChatFormatting.RESET); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialDehydrator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialDehydrator.java new file mode 100644 index 0000000000..0975c5fa88 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialDehydrator.java @@ -0,0 +1,274 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEIndustrialDehydrator extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private static int CASING_TEXTURE_ID; + private static String mCasingName = "Vacuum Casing"; + private HeatingCoilLevel mHeatingCapacity; + private boolean mDehydratorMode = false; + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialDehydrator(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + CASING_TEXTURE_ID = TAE.getIndexFromPage(3, 10); + } + + public MTEIndustrialDehydrator(String aName) { + super(aName); + CASING_TEXTURE_ID = TAE.getIndexFromPage(3, 10); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEIndustrialDehydrator(mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Factory Grade Vacuum Furnace") + .addInfo("Can toggle the operation temperature with a Screwdriver") + .addInfo("All Dehydrator recipes are Low Temp recipes") + .addInfo("Speed: +120% | EU Usage: 50% | Parallel: 4") + .addInfo("Each 900K over the min. Heat Capacity grants 5% speedup (multiplicatively)") + .addInfo("Each 1800K over the min. Heat Capacity allows for one upgraded overclock") + .addInfo("Upgraded overclocks reduce recipe time to 25% and increase EU/t to 400%") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 5, 3, true) + .addController("Bottom Center") + .addCasingInfoMin(mCasingName, 5, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "HHH", "H-H", "HHH" }, + { "HHH", "H-H", "HHH" }, { "C~C", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialDehydrator.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) + .casingIndex(CASING_TEXTURE_ID) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings4Misc, 10)))) + .addElement('H', ofCoil(MTEIndustrialDehydrator::setCoilLevel, MTEIndustrialDehydrator::getCoilLevel)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 4, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 4, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + setCoilLevel(HeatingCoilLevel.None); + return checkPiece(mName, 1, 4, 0) && mCasing >= 5 && getCoilLevel() != HeatingCoilLevel.None && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAIndustrialDehydratorActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAIndustrialDehydrator; + } + + @Override + protected int getCasingTextureId() { + return CASING_TEXTURE_ID; + } + + @Override + public RecipeMap getRecipeMap() { + return mDehydratorMode ? GTPPRecipeMaps.chemicalDehydratorNonCellRecipes : GTPPRecipeMaps.vacuumFurnaceRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(GTPPRecipeMaps.chemicalDehydratorNonCellRecipes, GTPPRecipeMaps.vacuumFurnaceRecipes); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialDehydrator; + } + + @Override + public String getMachineType() { + return "Vacuum Furnace / Dehydrator"; + } + + @Override + public int getMaxParallelRecipes() { + return 4; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + return recipe.mSpecialValue <= getCoilLevel().getHeat() ? CheckRecipeResultRegistry.SUCCESSFUL + : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); + } + + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).setHeatOC(true) + .setHeatDiscount(true) + .setRecipeHeat(recipe.mSpecialValue) + .setMachineHeat((int) getCoilLevel().getHeat()); + } + }.setSpeedBonus(1F / 2.2F) + .setEuModifier(0.5F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + mDehydratorMode = !mDehydratorMode; + String aMode = mDehydratorMode ? "Dehydrator" : "Vacuum Furnace"; + PlayerUtils.messagePlayer(aPlayer, "Mode: " + aMode); + mLastRecipe = null; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("mDehydratorMode", mDehydratorMode); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mDehydratorMode = aNBT.getBoolean("mDehydratorMode"); + } + + public HeatingCoilLevel getCoilLevel() { + return mHeatingCapacity; + } + + public void setCoilLevel(HeatingCoilLevel aCoilLevel) { + mHeatingCapacity = aCoilLevel; + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setBoolean("mode", mDehydratorMode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector + .translateToLocal("GT5U.GTPP_MULTI_INDUSTRIAL_DEHYDRATOR.mode." + (tag.getBoolean("mode") ? 1 : 0)) + + EnumChatFormatting.RESET); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialExtruder.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialExtruder.java new file mode 100644 index 0000000000..0f2b573a2e --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialExtruder.java @@ -0,0 +1,193 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEIndustrialExtruder extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialExtruder(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialExtruder(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialExtruder(this.mName); + } + + @Override + public String getMachineType() { + return "Extruder"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Material Extruder") + .addInfo("250% faster than using single block machines of the same voltage") + .addInfo("Processes four items per voltage tier") + .addInfo("Extrusion Shape for recipe goes in the Input Bus") + .addInfo("Each Input Bus can have a different shape!") + .addInfo("You can use several input buses per multiblock") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 5, true) + .addController("Front Center") + .addCasingInfoMin("Inconel Reinforced Casings", 14, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC", "CCC", "CCC" }, { "C~C", "C-C", "C-C", "C-C", "CCC" }, + { "CCC", "CCC", "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialExtruder.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 14 && checkHatch(); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_COMPRESSOR_OP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDIndustrialExtruderActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDIndustrialExtruder; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(33); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.extruderRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 3.5F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return (4 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialExtruder; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + public Block getCasingBlock() { + return ModBlocks.blockCasings3Misc; + } + + public byte getCasingMeta() { + return 1; + } + + public byte getCasingTextureIndex() { + return (byte) TAE.GTPP_INDEX(33); + } + + @Override + public boolean isInputSeparationEnabled() { + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialFluidHeater.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialFluidHeater.java new file mode 100644 index 0000000000..9c22e81024 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialFluidHeater.java @@ -0,0 +1,204 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEIndustrialFluidHeater extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private int mCasing1; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialFluidHeater(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialFluidHeater(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialFluidHeater(this.mName); + } + + @Override + public String getMachineType() { + return "Fluid Heater"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Fluid Heater") + .addInfo("120% faster than using single block machines of the same voltage") + .addInfo("Only uses 90% of the EU/t normally required") + .addInfo("Processes eight items per voltage tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(5, 6, 5, true) + .addController("Front Center") + .addCasingInfoMin("Top/Bottom layer: Multi-use Casings", 34, false) + .addCasingInfoMin("Middle layers: Thermal Containment Casing", 47, false) + .addInputBus("Bottom Layer (optional)", 1) + .addInputHatch("Bottom Layer", 1) + .addOutputBus("Top Layer (optional)", 1) + .addOutputHatch("Top Layer", 1) + .addEnergyHatch("Any Multi-use Casing", 1) + .addMaintenanceHatch("Any Multi-use Casing", 1) + .addMufflerHatch("Any Multi-use Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { " TTT ", "TTTTT", "TTTTT", "TTTTT", " TTT " }, + { " XXX ", "X---X", "X---X", "X---X", " XXX " }, + { " XXX ", "X---X", "X---X", "X---X", " XXX " }, + { " XXX ", "X---X", "X---X", "X---X", " XXX " }, + { " X~X ", "X---X", "X---X", "X---X", " XXX " }, + { " BBB ", "BBBBB", "BBBBB", "BBBBB", " BBB " }, })) + .addElement( + 'B', + buildHatchAdder(MTEIndustrialFluidHeater.class) + .atLeast(InputBus, InputHatch, Maintenance, Energy, Muffler) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing1, ofBlock(getCasingBlock2(), getCasingMeta2())))) + .addElement('X', ofBlock(getCasingBlock1(), getCasingMeta1())) + .addElement( + 'T', + buildHatchAdder(MTEIndustrialFluidHeater.class) + .atLeast(OutputBus, OutputHatch, Maintenance, Energy, Muffler) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing1, ofBlock(getCasingBlock2(), getCasingMeta2())))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 2, 4, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 2, 4, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing1 = 0; + boolean didBuild = checkPiece(mName, 2, 4, 0); + log("Built? " + didBuild + ", " + mCasing1); + return didBuild && mCasing1 >= 34 && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAFluidHeaterActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAFluidHeater; + } + + @Override + protected int getCasingTextureId() { + return TAE.getIndexFromPage(0, 1); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.fluidHeaterRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 2.2F) + .setEuModifier(0.9F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return (8 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialThermalCentrifuge; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + public Block getCasingBlock1() { + return ModBlocks.blockCasings2Misc; + } + + public byte getCasingMeta1() { + return 11; + } + + public Block getCasingBlock2() { + return ModBlocks.blockCasings3Misc; + } + + public byte getCasingMeta2() { + return 2; + } + + public byte getCasingTextureIndex() { + return (byte) TAE.getIndexFromPage(2, 2); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialForgeHammer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialForgeHammer.java new file mode 100644 index 0000000000..b809feaa6e --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialForgeHammer.java @@ -0,0 +1,244 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Mods.EnderIO; +import static gregtech.api.enums.Mods.Railcraft; +import static gregtech.api.enums.Mods.ThaumicBases; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; + +import org.apache.commons.lang3.tuple.Pair; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.ITierConverter; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +@SuppressWarnings("SpellCheckingInspection") +public class MTEIndustrialForgeHammer extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private int mCasing; + private int mAnvilTier = 0; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialForgeHammer(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialForgeHammer(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialForgeHammer(this.mName); + } + + @Override + public String getMachineType() { + return "Forge Hammer"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Forge Hammer") + .addInfo("Speed: +100% | EU Usage: 100% | Parallel: Tier x Anvil Tier x 8") + .addInfo("T1 - Vanilla Anvil"); + if (Railcraft.isModLoaded()) { + tt.addInfo("T2 - Steel Anvil"); + } + if (EnderIO.isModLoaded()) { + tt.addInfo("T3 - Dark Steel Anvil"); + } + if (ThaumicBases.isModLoaded()) { + tt.addInfo("T3 - Thaumium Anvil"); + tt.addInfo("T4 - Void Metal Anvil"); + } + + tt.addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front Center") + .addCasingInfoMin("Forge Casing", 6, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .addOtherStructurePart("Anvil", "In the center of 3x3x3 structure", 2) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + Map anvilTiers = new HashMap<>(); + + anvilTiers.put(Blocks.anvil, 1); + + if (Railcraft.isModLoaded()) { + anvilTiers.put(GameRegistry.findBlock(Railcraft.ID, "anvil"), 2); + } + + if (EnderIO.isModLoaded()) { + anvilTiers.put(GameRegistry.findBlock(EnderIO.ID, "blockDarkSteelAnvil"), 3); + } + + if (ThaumicBases.isModLoaded()) { + anvilTiers.put(GameRegistry.findBlock(ThaumicBases.ID, "thaumicAnvil"), 3); + anvilTiers.put(GameRegistry.findBlock(ThaumicBases.ID, "voidAnvil"), 4); + } + + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "CAC", "CCC" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialForgeHammer.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) + .casingIndex(TAE.getIndexFromPage(1, 11)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings5Misc, 6)))) + .addElement( + 'A', + ofBlocksTiered( + anvilTierConverter(anvilTiers), + getAllAnvilTiers(anvilTiers), + 0, + MTEIndustrialForgeHammer::setAnvilTier, + MTEIndustrialForgeHammer::getAnvilTier)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + private static List> getAllAnvilTiers(Map anvilTiers) { + return anvilTiers.entrySet() + .stream() + .map(e -> Pair.of(e.getKey(), e.getValue())) + .collect(Collectors.toList()); + } + + private static ITierConverter anvilTierConverter(Map anvilTiers) { + return (block, meta) -> block == null ? 0 : anvilTiers.getOrDefault(block, 0); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.RANDOM_ANVIL_USE; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAIndustrialForgeHammerActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAIndustrialForgeHammer; + } + + @Override + protected int getCasingTextureId() { + return TAE.getIndexFromPage(1, 11); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.hammerRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1 / 2F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return (8 * getAnvilTier() * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialForgeHammer; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + private void setAnvilTier(int tier) { + mAnvilTier = tier; + } + + private int getAnvilTier() { + return mAnvilTier; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMacerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMacerator.java new file mode 100644 index 0000000000..635e5889f5 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMacerator.java @@ -0,0 +1,389 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.List; +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants.NBT; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.IDualInputHatch; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEIndustrialMacerator extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private int controllerTier = 1; + private int structureTier; + private int mCasing; + + private static final String STRUCTURE_PIECE_MAIN = "main"; + + private static final int HORIZONTAL_OFF_SET = 1; + private static final int VERTICAL_OFF_SET = 5; + private static final int DEPTH_OFF_SET = 0; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + private static int getStructureCasingTier(Block b, int m) { + if (b == GregTechAPI.sBlockCasings4 && m == 2) return 1; + if (b == ModBlocks.blockCasingsMisc && m == 7) return 2; + return 0; + } + + public MTEIndustrialMacerator(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialMacerator(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialMacerator(this.mName); + } + + @Override + public String getMachineType() { + return "Macerator/Pulverizer"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller block for the Industrial Maceration Stack") + .addInfo("60% faster than using single block machines of the same voltage") + .addInfo("Maximum of n*tier parallels, LV = Tier 1, MV = Tier 2, etc.") + .addInfo("n=2 initially. n=8 after inserting Maceration Upgrade Chip.") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 6, 3, true) + .addController("Bottom center") + .addCasingInfoMin("Maceration Stack Casings (After upgrade)", 26, false) + .addCasingInfoMin("Stable Titanium Casings (Before upgrade)", 26, false) + .addInputBus("Bottom casing", 1) + .addEnergyHatch("Any casing", 1) + .addMaintenanceHatch("Any casing", 1) + .addOutputBus("One per layer except bottom layer", 2) + .addMufflerHatch("Any casing except bottom layer", 2) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_MAIN, + // spotless:off + transpose( + new String[][] { + {"AAA","AAA","AAA"}, + {"AAA","A A","AAA"}, + {"AAA","A A","AAA"}, + {"AAA","A A","AAA"}, + {"AAA","A A","AAA"}, + {"A~A","AAA","AAA"} })) + //spotless:on + .addElement( + 'A', + ofChain( + buildHatchAdder(MTEIndustrialMacerator.class) + .atLeast(Energy, Maintenance, InputBus, Muffler, OutputBus) + .casingIndex(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings4, 2)) + .allowOnly(ForgeDirection.NORTH) + .dot(1) + .build(), + onElementPass( + m -> m.mCasing++, + ofBlocksTiered( + MTEIndustrialMacerator::getStructureCasingTier, + ImmutableList + .of(Pair.of(GregTechAPI.sBlockCasings4, 2), Pair.of(ModBlocks.blockCasingsMisc, 7)), + -1, + (m, t) -> m.structureTier = t, + m -> m.structureTier)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + this.buildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + hintsOnly, + HORIZONTAL_OFF_SET, + VERTICAL_OFF_SET, + DEPTH_OFF_SET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (this.mMachine) return -1; + return survivialBuildPiece( + STRUCTURE_PIECE_MAIN, + stackSize, + HORIZONTAL_OFF_SET, + VERTICAL_OFF_SET, + DEPTH_OFF_SET, + elementBudget, + env, + false, + true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + structureTier = -1; + if (!checkPiece(STRUCTURE_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; + if (structureTier < 1 || mCasing < 26 || !checkHatch()) return false; + updateHatchTexture(); + return structureTier >= controllerTier; + } + + protected void updateHatchTexture() { + int textureID = getCasingTextureId(); + for (MTEHatch h : mInputBusses) h.updateTexture(textureID); + for (IDualInputHatch h : mDualInputHatches) h.updateTexture(textureID); + for (MTEHatch h : mOutputBusses) h.updateTexture(textureID); + for (MTEHatch h : mMaintenanceHatches) h.updateTexture(textureID); + for (MTEHatch h : mMufflerHatches) h.updateTexture(textureID); + for (MTEHatch h : mEnergyHatches) h.updateTexture(textureID); + } + + @Override + public boolean checkHatch() { + return !mMufflerHatches.isEmpty() && !mMaintenanceHatches.isEmpty() + && !mOutputBusses.isEmpty() + && (!mInputBusses.isEmpty() || !mDualInputHatches.isEmpty()); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_MACERATOR_OP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.Overlay_MatterFab_Active; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.Overlay_MatterFab; + } + + @Override + protected int getCasingTextureId() { + if (structureTier == 2) return TAE.GTPP_INDEX(7); + return GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings4, 2); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.maceratorRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return -10; + } + + @Override + public void onPreTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive()) + && (aBaseMetaTileEntity.getFrontFacing() != ForgeDirection.UP) + && (aBaseMetaTileEntity.getCoverIDAtSide(ForgeDirection.UP) == 0) + && (!aBaseMetaTileEntity.getOpacityAtSide(ForgeDirection.UP))) { + final Random tRandom = aBaseMetaTileEntity.getWorld().rand; + aBaseMetaTileEntity.getWorld() + .spawnParticle( + "smoke", + (aBaseMetaTileEntity.getXCoord() + 0.8F) - (tRandom.nextFloat() * 0.6F), + aBaseMetaTileEntity.getYCoord() + 0.3f + (tRandom.nextFloat() * 0.2F), + (aBaseMetaTileEntity.getZCoord() + 1.2F) - (tRandom.nextFloat() * 1.6F), + 0.0D, + 0.0D, + 0.0D); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && aTick % 20 == 0 && controllerTier == 1) { + ItemStack aGuiStack = this.getControllerSlot(); + if (GregtechItemList.Maceration_Upgrade_Chip.isStackEqual(aGuiStack, false, true)) { + controllerTier = 2; + mInventory[1] = ItemUtils.depleteStack(aGuiStack); + markDirty(); + // schedule a structure check + mUpdated = true; + } + } + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + if (controllerTier == 1 && !aPlayer.isSneaking()) { + ItemStack heldItem = aPlayer.getHeldItem(); + if (GregtechItemList.Maceration_Upgrade_Chip.isStackEqual(heldItem, false, true)) { + controllerTier = 2; + aPlayer.setCurrentItemOrArmor(0, ItemUtils.depleteStack(heldItem)); + if (getBaseMetaTileEntity().isServerSide()) { + markDirty(); + aPlayer.inventory.markDirty(); + // schedule a structure check + mUpdated = true; + } + return true; + } + } + return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); + } + + @Override + public void onValueUpdate(byte aValue) { + structureTier = aValue; + } + + @Override + public byte getUpdateData() { + return (byte) structureTier; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByte("mTier", (byte) controllerTier); + aNBT.setByte("structureTier", (byte) structureTier); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (!aNBT.hasKey("mTier", NBT.TAG_BYTE)) + // we assume old macerators are all T2 variants, as they were made before price reduction and shouldn't need + // to worry about upgrading + controllerTier = 2; + else controllerTier = aNBT.getByte("mTier"); + + structureTier = aNBT.getByte("structureTier"); + } + + @Override + public void initDefaultModes(NBTTagCompound aNBT) { + super.initDefaultModes(aNBT); + if (aNBT == null || !aNBT.hasKey("mTier")) { + controllerTier = 1; + } else { + controllerTier = aNBT.getByte("mTier"); + } + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + super.setItemNBT(aNBT); + aNBT.setByte("mTier", (byte) controllerTier); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 1.6F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + final long tVoltage = getMaxInputVoltage(); + final byte tTier = (byte) Math.max(1, GTUtility.getTier(tVoltage)); + return Math.max(1, (controllerTier == 1 ? 2 : 8) * tTier); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialMacerator; + } + + @Override + public boolean isOverclockerUpgradable() { + return true; + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("tier", controllerTier); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + if (tag.hasKey("tier")) { + currentTip.add( + "Tier: " + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(tag.getInteger("tier")) + + EnumChatFormatting.RESET); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMixer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMixer.java new file mode 100644 index 0000000000..e733168fca --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMixer.java @@ -0,0 +1,210 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEIndustrialMixer extends GTPPMultiBlockBase implements ISurvivalConstructable { + + public static int CASING_TEXTURE_ID; + public static String mCasingName = "Multi-Use Casing"; + public static String mCasingName2 = "Titanium Turbine Casing"; + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialMixer(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 2); + } + + public MTEIndustrialMixer(final String aName) { + super(aName); + CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 2); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { + if (aNBT.hasKey("isBussesSeparate")) { + inputSeparation = aNBT.getBoolean("isBussesSeparate"); + } + // Fallback for existing mixers + else { + inputSeparation = true; + } + } + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialMixer(this.mName); + } + + @Override + public String getMachineType() { + return "Mixer"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Mixer") + .addInfo("250% faster than using single block machines of the same voltage") + .addInfo("Processes eight recipes per voltage tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 4, 3, false) + .addController("Second Layer Center") + .addCasingInfoMin(mCasingName, 6, false) + .addCasingInfoMin(mCasingName2, 2, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "CCC", "CMC", "CCC" }, { "C~C", "CMC", "CCC" }, + { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialMixer.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) + .casingIndex(CASING_TEXTURE_ID) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 2)))) + .addElement('M', ofBlock(GregTechAPI.sBlockCasings4, 11)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 2, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 2, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 2, 0) && mCasing >= 6 && checkHatch(); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_COMPRESSOR_OP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDIndustrialMixerActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDIndustrialMixer; + } + + @Override + protected int getCasingTextureId() { + return CASING_TEXTURE_ID; + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.mixerNonCellRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 3.5F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return (8 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialMixer; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + inputSeparation = !inputSeparation; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMolecularTransformer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMolecularTransformer.java new file mode 100644 index 0000000000..4ffd484163 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMolecularTransformer.java @@ -0,0 +1,239 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEIndustrialMolecularTransformer extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private static final int CASING_TEXTURE_ID = 48; + private int mCasing = 0; + + public MTEIndustrialMolecularTransformer(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialMolecularTransformer(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialMolecularTransformer(this.mName); + } + + @Override + public String getMachineType() { + return "Molecular Transformer"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Changes the structure of items to produce new ones") + .addInfo("Maximum 1x of each bus/hatch.") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(7, 7, 7, false) + .addController("Top Center") + .addCasingInfoMin("Robust Tungstensteel Machine Casing", 40, false) + .addCasingInfoMin("Tungstensteel Coils", 16, false) + .addCasingInfoMin("Molecular Containment Casing", 52, false) + .addCasingInfoMin("High Voltage Current Capacitor", 32, false) + .addCasingInfoMin("Particle Containment Casing", 4, false) + .addCasingInfoMin("Resonance Chamber I", 5, false) + .addCasingInfoMin("Modulator I", 4, false) + .addInputBus("Any Robust Tungstensteel Machine Casing", 1) + .addOutputBus("Any Robust Tungstensteel Machine Casing", 1) + .addEnergyHatch("Any Robust Tungstensteel Machine Casing", 1) + .addMaintenanceHatch("Any Robust Tungstensteel Machine Casing", 1) + .addMufflerHatch("Any Robust Tungstensteel Machine Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_MAIN, + (new String[][] { { " ", " ", " xxx ", " x~x ", " xxx ", " ", " " }, + { " ", " xxx ", " xyyyx ", " xyzyx ", " xyyyx ", " xxx ", " " }, + { " ", " xxx ", " xyyyx ", " xyzyx ", " xyyyx ", " xxx ", " " }, + { " ", " xxx ", " xyyyx ", " xyzyx ", " xyyyx ", " xxx ", " " }, + { " t ", " ttxtt ", " tyyyt ", "txyzyxt", " tyyyt ", " ttxtt ", " t " }, + { " c ", " ccecc ", " cxfxc ", "cefefec", " cxfxc ", " ccecc ", " c " }, + { " h ", " hhhhh ", " hhhhh ", "hhhhhhh", " hhhhh ", " hhhhh ", " h " }, })) + .addElement('x', ofBlock(getCasingBlock(), getCasingMeta())) + .addElement('y', ofBlock(getCasingBlock(), getCasingMeta2())) + .addElement('z', ofBlock(getCasingBlock(), getCasingMeta3())) + .addElement('e', ofBlock(getCasingBlock2(), 0)) + .addElement('f', ofBlock(getCasingBlock2(), 4)) + .addElement('c', ofBlock(getCoilBlock(), 3)) + .addElement('t', ofBlock(getCasingBlock3(), getTungstenCasingMeta())) + .addElement( + 'h', + buildHatchAdder(MTEIndustrialMolecularTransformer.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .buildAndChain( + onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock3(), getTungstenCasingMeta())))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 3, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + boolean aDidBuild = checkPiece(STRUCTURE_PIECE_MAIN, 3, 3, 0); + if (this.mInputBusses.size() != 1 || this.mOutputBusses.size() != 1 || this.mEnergyHatches.size() != 1) { + return false; + } + // there are 16 slot that only allow casing, so we subtract this from the grand total required + return aDidBuild && mCasing >= 40 - 16 && checkHatch(); + } + + protected static int getCasingTextureIndex() { + return CASING_TEXTURE_ID; + } + + protected static Block getCasingBlock() { + return ModBlocks.blockSpecialMultiCasings; + } + + protected static Block getCasingBlock2() { + return ModBlocks.blockSpecialMultiCasings2; + } + + protected static Block getCasingBlock3() { + return GregTechAPI.sBlockCasings4; + } + + protected static Block getCoilBlock() { + return GregTechAPI.sBlockCasings5; + } + + protected static int getCasingMeta() { + return 11; + } + + protected static int getCasingMeta2() { + return 12; + } + + protected static int getCasingMeta3() { + return 13; + } + + protected static int getTungstenCasingMeta() { + return 0; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d == ForgeDirection.UP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAIndustrialMolecularTransformerActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAIndustrialMolecularTransformer; + } + + @Override + protected int getCasingTextureId() { + return 44; + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.molecularTransformerRecipes; + } + + @Override + public boolean isCorrectMachinePart(final ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic(); + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiMolecularTransformer; + } + + @Override + public int getDamageToComponent(final ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMultiMachine.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMultiMachine.java new file mode 100644 index 0000000000..472b1f66fd --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialMultiMachine.java @@ -0,0 +1,540 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEHatchMultiInput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.IDualInputHatch; +import gregtech.common.tileentities.machines.IDualInputInventory; +import gregtech.common.tileentities.machines.MTEHatchCraftingInputME; +import gregtech.common.tileentities.machines.MTEHatchInputME; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchSolidifier; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEIndustrialMultiMachine extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private final static int MACHINEMODE_METAL = 0; + private final static int MACHINEMODE_FLUID = 1; + private final static int MACHINEMODE_MISC = 2; + + private static final int MODE_COMPRESSOR = 0; + private static final int MODE_LATHE = 1; + private static final int MODE_MAGNETIC = 2; + private static final int MODE_FERMENTER = 3; + private static final int MODE_FLUIDEXTRACT = 4; + private static final int MODE_EXTRACTOR = 5; + private static final int MODE_LASER = 6; + private static final int MODE_AUTOCLAVE = 7; + private static final int MODE_FLUIDSOLIDIFY = 8; + private static final int[][] MODE_MAP = new int[][] { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 } }; + public static final String[] aToolTipNames = new String[9]; + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + static { + for (int id = 0; id < 9; id++) { + RecipeMap recipeMap = getRecipeMap(id); + if (recipeMap != null) { + String aNEI = GTLanguageManager.getTranslation(getRecipeMap(id).unlocalizedName); + aToolTipNames[id] = aNEI != null ? aNEI : "BAD NEI NAME (Report to Github)"; + } + } + } + + public MTEIndustrialMultiMachine(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialMultiMachine(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialMultiMachine(this.mName); + } + + @Override + public String getMachineType() { + return "Nine in One"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + String[] aBuiltStrings = new String[3]; + aBuiltStrings[0] = aToolTipNames[0] + ", " + aToolTipNames[1] + ", " + aToolTipNames[2]; + aBuiltStrings[1] = aToolTipNames[3] + ", " + aToolTipNames[4] + ", " + aToolTipNames[5]; + aBuiltStrings[2] = aToolTipNames[6] + ", " + aToolTipNames[7] + ", " + aToolTipNames[8]; + + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Multi-Machine") + .addInfo("250% faster than using single block machines of the same voltage") + .addInfo("Only uses 80% of the EU/t normally required") + .addInfo("Processes two items per voltage tier") + .addInfo("Machine Type: Metal - " + EnumChatFormatting.YELLOW + aBuiltStrings[0] + EnumChatFormatting.RESET) + .addInfo("Machine Type: Fluid - " + EnumChatFormatting.YELLOW + aBuiltStrings[1] + EnumChatFormatting.RESET) + .addInfo("Machine Type: Misc - " + EnumChatFormatting.YELLOW + aBuiltStrings[2] + EnumChatFormatting.RESET) + .addInfo("Read Multi-Machine Manual for extra information") + .addInfo( + EnumChatFormatting.AQUA + "You can use Solidifier Hatch to solidify multiple liquids." + + EnumChatFormatting.RESET) + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front Center") + .addCasingInfoMin("Multi-Use Casings", 6, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialMultiMachine.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) + .casingIndex(getTextureIndex()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 2)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAIndustrialMultiMachineActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAIndustrialMultiMachine; + } + + @Override + protected int getCasingTextureId() { + return getTextureIndex(); + } + + @Override + public int getMaxParallelRecipes() { + return (2 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + switch (machineMode) { + case MACHINEMODE_METAL -> { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialMultiMachine_ModeMetal; + } + case MACHINEMODE_FLUID -> { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialMultiMachine_ModeFluid; + } + default -> { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialMultiMachine_ModeMisc; + } + } + } + + public int getTextureIndex() { + return TAE.getIndexFromPage(2, 2); + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + private ItemStack getCircuit(ItemStack[] t) { + for (ItemStack j : t) { + if (j.getItem() == GTUtility.getIntegratedCircuit(0) + .getItem()) { + if (j.getItemDamage() >= 20 && j.getItemDamage() <= 22) { + return j; + } + } + } + return null; + } + + private int getCircuitID(ItemStack circuit) { + int H = circuit.getItemDamage(); + int T = (H == 20 ? 0 : (H == 21 ? 1 : (H == 22 ? 2 : -1))); + return MODE_MAP[machineMode][T]; + } + + @Override + public RecipeMap getRecipeMap() { + return null; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList( + RecipeMaps.compressorRecipes, + RecipeMaps.latheRecipes, + RecipeMaps.polarizerRecipes, + RecipeMaps.fermentingRecipes, + RecipeMaps.fluidExtractionRecipes, + RecipeMaps.extractorRecipes, + RecipeMaps.laserEngraverRecipes, + RecipeMaps.autoclaveRecipes, + RecipeMaps.fluidSolidifierRecipes); + } + + @Override + public int getRecipeCatalystPriority() { + return -10; + } + + private static RecipeMap getRecipeMap(int aMode) { + if (aMode == MODE_COMPRESSOR) { + return RecipeMaps.compressorRecipes; + } else if (aMode == MODE_LATHE) { + return RecipeMaps.latheRecipes; + } else if (aMode == MODE_MAGNETIC) { + return RecipeMaps.polarizerRecipes; + } else if (aMode == MODE_FERMENTER) { + return RecipeMaps.fermentingRecipes; + } else if (aMode == MODE_FLUIDEXTRACT) { + return RecipeMaps.fluidExtractionRecipes; + } else if (aMode == MODE_EXTRACTOR) { + return RecipeMaps.extractorRecipes; + } else if (aMode == MODE_LASER) { + return RecipeMaps.laserEngraverRecipes; + } else if (aMode == MODE_AUTOCLAVE) { + return RecipeMaps.autoclaveRecipes; + } else if (aMode == MODE_FLUIDSOLIDIFY) { + return RecipeMaps.fluidSolidifierRecipes; + } else { + return null; + } + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + private ItemStack lastCircuit = null; + private int lastMode = -1; + + @Nonnull + @Override + protected Stream findRecipeMatches(@Nullable RecipeMap map) { + ItemStack circuit = getCircuit(inputItems); + if (circuit == null) { + return Stream.empty(); + } + if (!GTUtility.areStacksEqual(circuit, lastCircuit)) { + lastRecipe = null; + lastCircuit = circuit; + } + if (machineMode != lastMode) { + lastRecipe = null; + lastMode = machineMode; + } + RecipeMap foundMap = getRecipeMap(getCircuitID(circuit)); + if (foundMap == null) { + return Stream.empty(); + } + return super.findRecipeMatches(foundMap); + } + }.setSpeedBonus(1F / 3.5F) + .setEuModifier(0.8F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public String getMachineModeName() { + return StatCollector.translateToLocal("GT5U.GTPP_MULTI_INDUSTRIAL_MULTI_MACHINE.mode." + machineMode); + } + + @Override + public String[] getInfoData() { + String[] data = super.getInfoData(); + ArrayList mInfo = new ArrayList<>(Arrays.asList(data)); + String mode; + switch (machineMode) { + case MACHINEMODE_METAL -> mode = StatCollector.translateToLocal("GTPP.multiblock.multimachine.metal"); + case MACHINEMODE_FLUID -> mode = StatCollector.translateToLocal("GTPP.multiblock.multimachine.fluid"); + default -> mode = StatCollector.translateToLocal("GTPP.multiblock.multimachine.misc"); + } + mInfo.add(mode); + return mInfo.toArray(new String[0]); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (aNBT.hasKey("mInternalMode")) { + machineMode = aNBT.getInteger("mInternalMode"); + } + super.loadNBTData(aNBT); + } + + @Override + public boolean isInputSeparationEnabled() { + return true; + } + + @Override + protected CheckRecipeResult doCheckRecipe() { + + if (machineMode != MACHINEMODE_MISC || !isInputSeparationEnabled()) { + return super.doCheckRecipe(); + } else { + CheckRecipeResult result = CheckRecipeResultRegistry.NO_RECIPE; + + // check crafting input hatches first + if (supportsCraftingMEBuffer()) { + for (IDualInputHatch dualInputHatch : mDualInputHatches) { + for (var it = dualInputHatch.inventories(); it.hasNext();) { + IDualInputInventory slot = it.next(); + processingLogic.setInputItems(slot.getItemInputs()); + processingLogic.setInputFluids(slot.getFluidInputs()); + CheckRecipeResult foundResult = processingLogic.process(); + if (foundResult.wasSuccessful()) { + return foundResult; + } + if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { + // Recipe failed in interesting way, so remember that and continue searching + result = foundResult; + } + } + } + } + + // Logic for GT_MetaTileEntity_Hatch_Solidifier + for (MTEHatchInput solidifierHatch : mInputHatches) { + if (solidifierHatch instanceof MTEHatchSolidifier) { + ItemStack mold = ((MTEHatchSolidifier) solidifierHatch).getMold(); + FluidStack fluid = solidifierHatch.getFluid(); + + if (mold != null && fluid != null) { + List inputItems = new ArrayList<>(); + inputItems.add(mold); + inputItems.add(GTUtility.getIntegratedCircuit(22)); + + processingLogic.setInputItems(inputItems.toArray(new ItemStack[0])); + processingLogic.setInputFluids(fluid); + + CheckRecipeResult foundResult = processingLogic.process(); + if (foundResult.wasSuccessful()) { + return foundResult; + } + if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { + // Recipe failed in interesting way, so remember that and continue searching + result = foundResult; + } + } + } + } + processingLogic.clear(); + processingLogic.setInputFluids(getStoredFluids()); + // Default logic + for (MTEHatchInputBus bus : mInputBusses) { + if (bus instanceof MTEHatchCraftingInputME) { + continue; + } + List inputItems = new ArrayList<>(); + for (int i = bus.getSizeInventory() - 1; i >= 0; i--) { + ItemStack stored = bus.getStackInSlot(i); + if (stored != null) { + inputItems.add(stored); + } + } + if (canUseControllerSlotForRecipe() && getControllerSlot() != null) { + inputItems.add(getControllerSlot()); + } + processingLogic.setInputItems(inputItems.toArray(new ItemStack[0])); + CheckRecipeResult foundResult = processingLogic.process(); + if (foundResult.wasSuccessful()) { + return foundResult; + } + if (foundResult != CheckRecipeResultRegistry.NO_RECIPE) { + // Recipe failed in interesting way, so remember that and continue searching + result = foundResult; + } + } + + return result; + } + } + + @Override + public ArrayList getStoredFluids() { + ArrayList rList = new ArrayList<>(); + for (MTEHatchInput tHatch : filterValidMTEs(mInputHatches)) { + if (tHatch instanceof MTEHatchSolidifier) { + continue; + } + + setHatchRecipeMap(tHatch); + if (tHatch instanceof MTEHatchMultiInput) { + for (FluidStack tFluid : ((MTEHatchMultiInput) tHatch).getStoredFluid()) { + if (tFluid != null) { + rList.add(tFluid); + } + } + } else if (tHatch instanceof MTEHatchInputME) { + if (tHatch.isValid()) { + for (FluidStack fluidStack : ((MTEHatchInputME) tHatch).getStoredFluids()) { + if (fluidStack == null) continue; + rList.add(fluidStack); + } + } + } else { + if (tHatch.getFillableStack() != null) { + rList.add(tHatch.getFillableStack()); + } + } + } + + return rList; + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("mode", machineMode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + if (tag.hasKey("mode")) { + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector + .translateToLocal("GT5U.GTPP_MULTI_INDUSTRIAL_MULTI_MACHINE.mode." + tag.getInteger("mode")) + + EnumChatFormatting.RESET); + } + } + + @Override + public boolean supportsMachineModeSwitch() { + return true; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + setMachineMode(nextMachineMode()); + PlayerUtils.messagePlayer( + aPlayer, + String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); + } + + @Override + public int nextMachineMode() { + mLastRecipe = null; + if (machineMode == MACHINEMODE_METAL) return MACHINEMODE_FLUID; + else if (machineMode == MACHINEMODE_FLUID) return MACHINEMODE_MISC; + else return MACHINEMODE_METAL; + } + + @Override + public void setMachineModeIcons() { + machineModeIcons.clear(); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_LPF_METAL); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_LPF_FLUID); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_DEFAULT); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialPlatePress.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialPlatePress.java new file mode 100644 index 0000000000..f41ebdd292 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialPlatePress.java @@ -0,0 +1,262 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.SoundResource; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEIndustrialPlatePress extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private int mCasing; + + private static final int MACHINEMODE_BENDER = 0; + private static final int MACHINEMODE_FORMER = 1; + + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialPlatePress(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialPlatePress(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialPlatePress(this.mName); + } + + @Override + public String getMachineType() { + return "Bending Machine, Forming Press"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for Advanced Bending & Forming") + .addInfo("500% faster than using single block machines of the same voltage") + .addInfo("Processes four items per voltage tier") + .addInfo("Circuit for recipe goes in the Input Bus") + .addInfo("Each Input Bus can have a different Circuit/Shape!") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front Center") + .addCasingInfoMin("Material Press Machine Casings", 6, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialPlatePress.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(50) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 4)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_COMPRESSOR_OP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDIndustrialPlatePressActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDIndustrialPlatePress; + } + + @Override + protected int getCasingTextureId() { + return 50; + } + + @Override + public RecipeMap getRecipeMap() { + return (machineMode == MACHINEMODE_FORMER) ? RecipeMaps.formingPressRecipes : RecipeMaps.benderRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(RecipeMaps.formingPressRecipes, RecipeMaps.benderRecipes); + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 6F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return (4 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + if (machineMode == MACHINEMODE_FORMER) + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialPlatePress_ModeForming; + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialPlatePress_ModeBending; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + // Migrates old NBT tag to the new one + if (aNBT.hasKey("mFormingMode")) { + machineMode = aNBT.getBoolean("mFormingMode") ? MACHINEMODE_FORMER : MACHINEMODE_BENDER; + } + super.loadNBTData(aNBT); + } + + @Override + public boolean supportsMachineModeSwitch() { + return true; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + setMachineMode(nextMachineMode()); + PlayerUtils.messagePlayer( + aPlayer, + String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); + } + + @Override + public void setMachineModeIcons() { + machineModeIcons.clear(); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_BENDING); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_FORMING); + } + + @Override + public String getMachineModeName() { + return StatCollector.translateToLocal("GT5U.GTPP_MULTI_INDUSTRIAL_PLATE_PRESS.mode." + machineMode); + } + + @Override + public boolean isInputSeparationEnabled() { + return true; + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("mode", machineMode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector + .translateToLocal("GT5U.GTPP_MULTI_INDUSTRIAL_PLATE_PRESS.mode." + tag.getInteger("mode")) + + EnumChatFormatting.RESET); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialSifter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialSifter.java new file mode 100644 index 0000000000..6dbd019887 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialSifter.java @@ -0,0 +1,208 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.Random; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEIndustrialSifter extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialSifter(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialSifter(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialSifter(this.mName); + } + + @Override + public String getMachineType() { + return "Sifter"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Sifter") + .addInfo("400% faster than single-block machines of the same voltage") + .addInfo("Only uses 75% of the EU/t normally required") + .addInfo("Processes four items per voltage tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(5, 3, 5, false) + .addController("Bottom Center") + .addCasingInfoMin("Sieve Grate", 18, false) + .addCasingInfoMin("Sieve Casings", 35, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCCCC", "CMMMC", "CMMMC", "CMMMC", "CCCCC" }, + { "CCCCC", "CMMMC", "CMMMC", "CMMMC", "CCCCC" }, + { "CC~CC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialSifter.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) + .casingIndex(TAE.GTPP_INDEX(21)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 5)))) + .addElement('M', ofBlock(ModBlocks.blockCasings2Misc, 6)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 2, 2, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 2, 2, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 2, 2, 0) && mCasing >= 35 && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDIndustrialSifterActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDIndustrialSifter; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(21); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.sifterRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + public void onPreTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive()) + && (aBaseMetaTileEntity.getFrontFacing() != ForgeDirection.UP) + && (aBaseMetaTileEntity.getCoverIDAtSide(ForgeDirection.UP) == 0) + && (!aBaseMetaTileEntity.getOpacityAtSide(ForgeDirection.UP))) { + final Random tRandom = aBaseMetaTileEntity.getWorld().rand; + if (tRandom.nextFloat() > 0.4) return; + + final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX * 2; + final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ * 2; + + aBaseMetaTileEntity.getWorld() + .spawnParticle( + "smoke", + (aBaseMetaTileEntity.getXCoord() + xDir + 2.1F) - (tRandom.nextFloat() * 3.2F), + aBaseMetaTileEntity.getYCoord() + 2.5f + (tRandom.nextFloat() * 1.2F), + (aBaseMetaTileEntity.getZCoord() + zDir + 2.1F) - (tRandom.nextFloat() * 3.2F), + 0.0, + 0.0, + 0.0); + } + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 5F) + .setEuModifier(0.75F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return (4 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialSifter; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public boolean isOverclockerUpgradable() { + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialThermalCentrifuge.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialThermalCentrifuge.java new file mode 100644 index 0000000000..b494d0bfa7 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialThermalCentrifuge.java @@ -0,0 +1,183 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEIndustrialThermalCentrifuge extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialThermalCentrifuge(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialThermalCentrifuge(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialThermalCentrifuge(this.mName); + } + + @Override + public String getMachineType() { + return "Thermal Centrifuge"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Thermal Centrifuge") + .addInfo("150% faster than using single block machines of the same voltage") + .addInfo("Only uses 80% of the EU/t normally required") + .addInfo("Processes eight items per voltage tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 2, 3, false) + .addController("Front Center") + .addCasingInfoMin("Thermal Processing Casings/Noise Hazard Sign Blocks", 8, false) + .addInputBus("Bottom Casing", 1) + .addOutputBus("Bottom Casing", 1) + .addEnergyHatch("Bottom Casing", 1) + .addMaintenanceHatch("Bottom Casing", 1) + .addMufflerHatch("Bottom Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape(mName, transpose(new String[][] { { "X~X", "XXX", "XXX" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + ofChain( + buildHatchAdder(MTEIndustrialThermalCentrifuge.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .build(), + onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 0)), + onElementPass(x -> ++x.mCasing, ofBlock(GregTechAPI.sBlockCasings3, 9)))) + .addElement( + 'X', + ofChain( + onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 0)), + onElementPass(x -> ++x.mCasing, ofBlock(GregTechAPI.sBlockCasings3, 9)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 0, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 0, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 0, 0) && mCasing >= 8 && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDIndustrialThermalCentrifugeActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDIndustrialThermalCentrifuge; + } + + @Override + protected int getCasingTextureId() { + return getCasingTextureIndex(); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.thermalCentrifugeRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 2.5F) + .setEuModifier(0.8F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return (8 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialThermalCentrifuge; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + public Block getCasingBlock() { + return ModBlocks.blockCasings2Misc; + } + + public byte getCasingMeta() { + return 0; + } + + public byte getCasingTextureIndex() { + return (byte) TAE.GTPP_INDEX(16); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialVacuumFreezer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialVacuumFreezer.java new file mode 100644 index 0000000000..3d18a9eda0 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialVacuumFreezer.java @@ -0,0 +1,254 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.Objects; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTEHatchCustomFluidBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEIndustrialVacuumFreezer extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + public static int CASING_TEXTURE_ID; + public static String mCryoFuelName = "Gelid Cryotheum"; + public static String mCasingName = "Advanced Cryogenic Casing"; + public static String mHatchName = "Cryotheum Hatch"; + public static FluidStack mFuelStack; + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + private final ArrayList mCryotheumHatches = new ArrayList<>(); + + public MTEIndustrialVacuumFreezer(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + mFuelStack = FluidUtils.getFluidStack("cryotheum", 1); + CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 10); + } + + public MTEIndustrialVacuumFreezer(final String aName) { + super(aName); + mFuelStack = FluidUtils.getFluidStack("cryotheum", 1); + CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 10); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return (IMetaTileEntity) new MTEIndustrialVacuumFreezer(this.mName); + } + + @Override + public String getMachineType() { + return "Vacuum Freezer"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Factory Grade Advanced Vacuum Freezer") + .addInfo("Speed: +100% | EU Usage: 100% | Parallel: 4") + .addInfo("Consumes 10L of " + mCryoFuelName + "/s during operation") + .addInfo("Constructed exactly the same as a normal Vacuum Freezer") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front Center") + .addCasingInfoMin(mCasingName, 10, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addOtherStructurePart(mHatchName, "Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + ofChain( + buildHatchAdder(MTEIndustrialVacuumFreezer.class) + .adder(MTEIndustrialVacuumFreezer::addCryotheumHatch) + .hatchId(967) + .shouldReject(t -> !t.mCryotheumHatches.isEmpty()) + .casingIndex(CASING_TEXTURE_ID) + .dot(1) + .build(), + buildHatchAdder(MTEIndustrialVacuumFreezer.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) + .casingIndex(CASING_TEXTURE_ID) + .dot(1) + .build(), + onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 10)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + mCryotheumHatches.clear(); + return checkPiece(mName, 1, 1, 0) && mCasing >= 10 && checkHatch(); + } + + @Override + public boolean checkHatch() { + return super.checkHatch() && !mCryotheumHatches.isEmpty(); + } + + private boolean addCryotheumHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchCustomFluidBase && aMetaTileEntity.getBaseMetaTileEntity() + .getMetaTileID() == 967) { + return addToMachineListInternal(mCryotheumHatches, aTileEntity, aBaseCasingIndex); + } + } + return false; + } + + @Override + public void updateSlots() { + for (MTEHatchCustomFluidBase tHatch : filterValidMTEs(mCryotheumHatches)) tHatch.updateSlots(); + super.updateSlots(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAIndustrialVacuumFreezerActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAIndustrialVacuumFreezer; + } + + @Override + protected int getCasingTextureId() { + return CASING_TEXTURE_ID; + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.advancedFreezerRecipes; + } + + @Override + public boolean isCorrectMachinePart(final ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 2F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return 4; + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialVacuumFreezer; + } + + @Override + public int getDamageToComponent(final ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + /* + * if (this.getBaseMetaTileEntity().isActive()) { if (!this.depleteInput(mFuelStack.copy())) { + * this.getBaseMetaTileEntity().setActive(false); } } + */ + super.onPostTick(aBaseMetaTileEntity, aTick); + + if (this.mStartUpCheck < 0) { + if (this.mMaxProgresstime > 0 && this.mProgresstime != 0 || this.getBaseMetaTileEntity() + .hasWorkJustBeenEnabled()) { + if (aTick % 20 == 0 || this.getBaseMetaTileEntity() + .hasWorkJustBeenEnabled()) { + if (!this.depleteInputFromRestrictedHatches(this.mCryotheumHatches, 10)) { + this.causeMaintenanceIssue(); + this.stopMachine( + ShutDownReasonRegistry + .outOfFluid(Objects.requireNonNull(FluidUtils.getFluidStack("cryotheum", 10)))); + } + } + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialWashPlant.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialWashPlant.java new file mode 100644 index 0000000000..35d0867cee --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialWashPlant.java @@ -0,0 +1,425 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import ic2.core.init.BlocksItems; +import ic2.core.init.InternalName; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEIndustrialWashPlant extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private int mCasing; + + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + private static final int MACHINEMODE_OREWASH = 0; + private static final int MACHINEMODE_SIMPLEWASH = 1; + private static final int MACHINEMODE_CHEMBATH = 2; + + public MTEIndustrialWashPlant(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialWashPlant(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialWashPlant(this.mName); + } + + @Override + public String getMachineType() { + return "Ore Washer, Simple Washer, Chemical Bath"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Wash Plant") + .addInfo("Can be configured with a screwdriver to also do Simple Washer and process Chemical Bathing") + .addInfo("400% faster than using single block machines of the same voltage") + .addInfo("Processes four item per voltage tier") + .addInfo("Always requires an Input Hatch full of water to refill structure") + .addInfo("Need to be filled with water.") + .addInfo("Will automatically fill water from input hatch.") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(5, 3, 7, true) + .addController("Front Center") + .addCasingInfoMin("Wash Plant Casings", 40, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCCCC", "CwwwC", "CwwwC", "CwwwC", "CwwwC", "CwwwC", "CCCCC" }, + { "CC~CC", "CwwwC", "CwwwC", "CwwwC", "CwwwC", "CwwwC", "CCCCC" }, + { "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialWashPlant.class) + .atLeast(InputBus, InputHatch, OutputHatch, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) + .addElement( + 'w', + ofChain( + isAir(), + ofBlockAnyMeta(Blocks.water), + ofBlockAnyMeta(Blocks.flowing_water), + ofBlockAnyMeta(BlocksItems.getFluidBlock(InternalName.fluidDistilledWater)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 2, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 2, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 2, 1, 0) && mCasing >= 40 && checkHatch(); + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + // don't rotate a washer, water will flow out. + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDIndustrialWashPlantActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDIndustrialWashPlant; + } + + @Override + protected int getCasingTextureId() { + return getCasingTextureIndex(); + } + + @Override + public RecipeMap getRecipeMap() { + switch (machineMode) { + case MACHINEMODE_OREWASH -> { + return RecipeMaps.oreWasherRecipes; + } + case MACHINEMODE_SIMPLEWASH -> { + return GTPPRecipeMaps.simpleWasherRecipes; + } + default -> { + return RecipeMaps.chemicalBathRecipes; + } + } + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays + .asList(RecipeMaps.oreWasherRecipes, GTPPRecipeMaps.simpleWasherRecipes, RecipeMaps.chemicalBathRecipes); + } + + @Override + public int getRecipeCatalystPriority() { + return -10; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (checkForWater()) { + return CheckRecipeResultRegistry.SUCCESSFUL; + } + return SimpleCheckRecipeResult.ofFailure("no_water"); + } + }.setSpeedBonus(1F / 5F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return (4 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + if (machineMode == MACHINEMODE_CHEMBATH) + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialWashPlant_ModeChemBath; + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialWashPlant_ModeWasher; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + public Block getCasingBlock() { + return ModBlocks.blockCasings2Misc; + } + + public byte getCasingMeta() { + return 4; + } + + public byte getCasingTextureIndex() { + return (byte) TAE.GTPP_INDEX(11); + } + + public boolean checkForWater() { + + // Get Facing direction + IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); + int mDirectionX = aBaseMetaTileEntity.getBackFacing().offsetX; + int mCurrentDirectionX; + int mCurrentDirectionZ; + int mOffsetX_Lower = 0; + int mOffsetX_Upper = 0; + int mOffsetZ_Lower = 0; + int mOffsetZ_Upper = 0; + + if (mDirectionX == 0) { + mCurrentDirectionX = 2; + mCurrentDirectionZ = 3; + mOffsetX_Lower = -2; + mOffsetX_Upper = 2; + mOffsetZ_Lower = -3; + mOffsetZ_Upper = 3; + } else { + mCurrentDirectionX = 3; + mCurrentDirectionZ = 2; + mOffsetX_Lower = -3; + mOffsetX_Upper = 3; + mOffsetZ_Lower = -2; + mOffsetZ_Upper = 2; + } + + // if (aBaseMetaTileEntity.fac) + + final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX * mCurrentDirectionX; + final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ * mCurrentDirectionZ; + + int tAmount = 0; + for (int i = mOffsetX_Lower + 1; i <= mOffsetX_Upper - 1; ++i) { + for (int j = mOffsetZ_Lower + 1; j <= mOffsetZ_Upper - 1; ++j) { + for (int h = 0; h < 2; ++h) { + Block tBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j); + byte tMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir + i, h, zDir + j); + if (tBlock == Blocks.air || tBlock == Blocks.flowing_water || tBlock == Blocks.water) { + if (this.getStoredFluids() != null) { + for (FluidStack stored : this.getStoredFluids()) { + if (stored.isFluidEqual(FluidUtils.getFluidStack("water", 1))) { + if (stored.amount >= 1000) { + // Utils.LOG_WARNING("Going to try swap an air block for water from inut bus."); + stored.amount -= 1000; + Block fluidUsed = null; + if (tBlock == Blocks.air || tBlock == Blocks.flowing_water) { + fluidUsed = Blocks.water; + } + if (tBlock == Blocks.water) { + fluidUsed = BlocksItems.getFluidBlock(InternalName.fluidDistilledWater); + } + aBaseMetaTileEntity.getWorld() + .setBlock( + aBaseMetaTileEntity.getXCoord() + xDir + i, + aBaseMetaTileEntity.getYCoord() + h, + aBaseMetaTileEntity.getZCoord() + zDir + j, + fluidUsed); + } + } + } + } + } + if (tBlock == Blocks.water) { + ++tAmount; + // Utils.LOG_WARNING("Found Water"); + } else if (tBlock == BlocksItems.getFluidBlock(InternalName.fluidDistilledWater)) { + ++tAmount; + ++tAmount; + // Utils.LOG_WARNING("Found Distilled Water"); + } + } + } + } + + boolean isValidWater = tAmount >= 45; + if (isValidWater) { + Logger.WARNING("Filled structure."); + } else { + Logger.WARNING("Did not fill structure."); + } + return isValidWater; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (aNBT.hasKey("mChemicalMode")) { + boolean aTempMode = aNBT.getBoolean("mChemicalMode"); + if (aTempMode) { + machineMode = 2; + } else { + machineMode = 0; + } + aNBT.removeTag("mChemicalMode"); + } + if (aNBT.hasKey("mMode")) { + machineMode = aNBT.getInteger("mMode"); + } + super.loadNBTData(aNBT); + } + + @Override + public String getMachineModeName() { + return StatCollector.translateToLocal("GT5U.GTPP_MULTI_WASH_PLANT.mode." + machineMode); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("mode", machineMode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector.translateToLocal("GT5U.GTPP_MULTI_WASH_PLANT.mode." + tag.getInteger("mode")) + + EnumChatFormatting.RESET); + } + + @Override + public boolean supportsMachineModeSwitch() { + return true; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + setMachineMode(nextMachineMode()); + PlayerUtils.messagePlayer( + aPlayer, + String.format(StatCollector.translateToLocal("GT5U.MULTI_MACHINE_CHANGE"), getMachineModeName())); + } + + @Override + public int nextMachineMode() { + if (machineMode == MACHINEMODE_OREWASH) return MACHINEMODE_SIMPLEWASH; + else if (machineMode == MACHINEMODE_SIMPLEWASH) return MACHINEMODE_CHEMBATH; + else return MACHINEMODE_OREWASH; + } + + @Override + public void setMachineModeIcons() { + machineModeIcons.clear(); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_WASHPLANT); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_SIMPLEWASHER); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_CHEMBATH); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialWireMill.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialWireMill.java new file mode 100644 index 0000000000..292fd1041b --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIndustrialWireMill.java @@ -0,0 +1,212 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEIndustrialWireMill extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialWireMill(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialWireMill(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialWireMill(this.mName); + } + + @Override + public String getMachineType() { + return "Wiremill"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Wire Factory") + .addInfo("200% faster than using single block machines of the same voltage") + .addInfo("Only uses 75% of the EU/t normally required") + .addInfo("Processes four items per voltage tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 5, true) + .addController("Front Center") + .addCasingInfoMin("Wire Factory Casings", 14, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC", "CCC", "CCC" }, { "C~C", "C-C", "C-C", "C-C", "CCC" }, + { "CCC", "CCC", "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialWireMill.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 14 && checkHatch(); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_RECYCLER_OP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDIndustrialWireMillActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDIndustrialWireMill; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(6); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.wiremillRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 3F) + .setEuModifier(0.75F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + inputSeparation = !inputSeparation; + aPlayer.addChatMessage( + new ChatComponentTranslation( + inputSeparation ? "interaction.separateBusses.enabled" : "interaction.separateBusses.disabled")); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { + inputSeparation = aNBT.getBoolean("isBussesSeparate"); + } + } + + @Override + public int getMaxParallelRecipes() { + return (4 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialWireMill; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + public Block getCasingBlock() { + return ModBlocks.blockCasingsMisc; + } + + public byte getCasingMeta() { + return 6; + } + + public byte getCasingTextureIndex() { + return (byte) TAE.GTPP_INDEX(6); + } + + @Override + public boolean supportsInputSeparation() { + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIsaMill.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIsaMill.java new file mode 100644 index 0000000000..d1a6ac34f0 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEIsaMill.java @@ -0,0 +1,527 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; +import net.minecraft.world.chunk.Chunk; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.api.objects.minecraft.BlockPos; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.item.chemistry.general.ItemGenericChemBase; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.EntityUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.MTEHatchMillingBalls; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; + +public class MTEIsaMill extends GTPPMultiBlockBase implements ISurvivalConstructable { + + protected boolean boostEu = false; + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + private static final IIconContainer frontFaceActive = new CustomIcon("iconsets/Grinder/GRINDER_ACTIVE5"); + private static final IIconContainer frontFace = new CustomIcon("iconsets/Grinder/GRINDER5"); + + private final ArrayList mMillingBallBuses = new ArrayList<>(); + private static final DamageSource mIsaMillDamageSource = new DamageSource("gtpp.grinder").setDamageBypassesArmor(); + + public MTEIsaMill(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIsaMill(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Large Grinding Machine") + .addInfo("Grind ores.") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 7, false) + .addController("Front Center") + .addCasingInfoMin("IsaMill Exterior Casing", 40, false) + .addOtherStructurePart("IsaMill Gearbox", "5x, Inner Blocks") + .addOtherStructurePart("IsaMill Piping", "8x, ring around controller") + .addStructureInfo("IsaMill Pipings must not be obstructed in front (only air blocks)") + .addOtherStructurePart("Milling Ball Hatch", "Any Casing") + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "DDD", "CCC", "CCC", "CCC", "CCC", "CCC", "CCC" }, + { "D~D", "CGC", "CGC", "CGC", "CGC", "CGC", "CCC" }, + { "DDD", "CCC", "CCC", "CCC", "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + ofChain( + buildHatchAdder(MTEIsaMill.class).adder(MTEIsaMill::addMillingBallsHatch) + .hatchClass(MTEHatchMillingBalls.class) + .shouldReject(t -> !t.mMillingBallBuses.isEmpty()) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .build(), + buildHatchAdder(MTEIsaMill.class) + .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Energy, Muffler) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .build(), + onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) + .addElement('D', ofBlock(getIntakeBlock(), getIntakeMeta())) + .addElement('G', ofBlock(getGearboxBlock(), getGearboxMeta())) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + mMillingBallBuses.clear(); + return checkPiece(mName, 1, 1, 0) && mCasing >= 48 - 8 && checkHatch(); + } + + @Override + public boolean checkHatch() { + return super.checkHatch() && mMillingBallBuses.size() == 1; + } + + @Override + protected IIconContainer getActiveOverlay() { + return frontFaceActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return frontFace; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(2); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return getMaxEfficiency(aStack) > 0; + } + + private boolean addMillingBallsHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchMillingBalls) { + return addToMachineListInternal(mMillingBallBuses, aMetaTileEntity, aBaseCasingIndex); + } + } + return false; + } + + @Override + public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchMillingBalls) { + log("Found GT_MetaTileEntity_Hatch_MillingBalls"); + return addToMachineListInternal(mMillingBallBuses, aMetaTileEntity, aBaseCasingIndex); + } + return super.addToMachineList(aTileEntity, aBaseCasingIndex); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.millingRecipes; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (this.mUpdate == 1 || this.mStartUpCheck == 1) { + this.mMillingBallBuses.clear(); + } + } + if (aTick % 20 == 0 && isMachineRunning()) { + checkForEntities(aBaseMetaTileEntity, aTick); + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + private final AutoMap mFrontBlockPosCache = new AutoMap<>(); + + public void checkForEntities(IGregTechTileEntity aBaseMetaTileEntity, long aTime) { + + if (aTime % 100 == 0) { + mFrontBlockPosCache.clear(); + } + if (mFrontBlockPosCache.isEmpty()) { + ForgeDirection tSide = aBaseMetaTileEntity.getBackFacing(); + int aTileX = aBaseMetaTileEntity.getXCoord(); + int aTileY = aBaseMetaTileEntity.getYCoord(); + int aTileZ = aBaseMetaTileEntity.getZCoord(); + boolean xFacing = tSide.offsetX != 0; + boolean zFacing = tSide.offsetZ != 0; + + // Check Casings + int aDepthOffset = (tSide == ForgeDirection.NORTH || tSide == ForgeDirection.WEST) ? 1 : -1; + for (int aHorizontalOffset = -1; aHorizontalOffset < 2; aHorizontalOffset++) { + for (int aVerticalOffset = -1; aVerticalOffset < 2; aVerticalOffset++) { + int aX = !xFacing ? (aTileX + aHorizontalOffset) : (aTileX + aDepthOffset); + int aY = aTileY + aVerticalOffset; + int aZ = !zFacing ? (aTileZ + aHorizontalOffset) : (aTileZ + aDepthOffset); + mFrontBlockPosCache.add(new BlockPos(aX, aY, aZ, aBaseMetaTileEntity.getWorld())); + } + } + } + + AutoMap aEntities = getEntities(mFrontBlockPosCache, aBaseMetaTileEntity.getWorld()); + if (!aEntities.isEmpty()) { + for (EntityLivingBase aFoundEntity : aEntities) { + if (aFoundEntity instanceof EntityPlayer aPlayer) { + if (PlayerUtils.isCreative(aPlayer) || !PlayerUtils.canTakeDamage(aPlayer)) { + continue; + } else { + if (aFoundEntity.getHealth() > 0) { + EntityUtils.doDamage(aFoundEntity, mIsaMillDamageSource, getPlayerDamageValue(aPlayer, 10)); + if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive())) { + generateParticles(aFoundEntity); + } + } + } + } else if (aFoundEntity.getHealth() > 0) { + EntityUtils.doDamage( + aFoundEntity, + mIsaMillDamageSource, + Math.max(1, (int) (aFoundEntity.getMaxHealth() / 3))); + if ((aBaseMetaTileEntity.isClientSide()) && (aBaseMetaTileEntity.isActive())) { + generateParticles(aFoundEntity); + } + } + } + } + } + + // 20 armor points add 80% damage reduction, more points add more damage reduction + private int getPlayerDamageValue(EntityPlayer player, int damage) { + int armorValue = player.getTotalArmorValue(); + int reducedDamage = (int) (damage - damage * (armorValue * 0.04)); + return Math.max(reducedDamage, 0); + } + + private static AutoMap getEntities(AutoMap aPositionsToCheck, World aWorld) { + AutoMap aEntities = new AutoMap<>(); + HashSet aChunksToCheck = new HashSet<>(); + if (!aPositionsToCheck.isEmpty()) { + Chunk aLocalChunk; + for (BlockPos aPos : aPositionsToCheck) { + aLocalChunk = aWorld.getChunkFromBlockCoords(aPos.xPos, aPos.zPos); + aChunksToCheck.add(aLocalChunk); + } + } + if (!aChunksToCheck.isEmpty()) { + AutoMap aEntitiesFound = new AutoMap<>(); + for (Chunk aChunk : aChunksToCheck) { + if (aChunk.isChunkLoaded) { + List[] aEntityLists = aChunk.entityLists; + for (List aEntitySubList : aEntityLists) { + for (Object aEntity : aEntitySubList) { + if (aEntity instanceof EntityLivingBase aPlayer) { + aEntitiesFound.add(aPlayer); + } + } + } + } + } + if (!aEntitiesFound.isEmpty()) { + for (EntityLivingBase aEntity : aEntitiesFound) { + BlockPos aPlayerPos = EntityUtils.findBlockPosOfEntity(aEntity); + for (BlockPos aBlockSpaceToCheck : aPositionsToCheck) { + if (aBlockSpaceToCheck.equals(aPlayerPos)) { + aEntities.add(aEntity); + } + } + } + } + } + return aEntities; + } + + private static void generateParticles(EntityLivingBase aEntity) { + BlockPos aPlayerPosBottom = EntityUtils.findBlockPosOfEntity(aEntity); + BlockPos aPlayerPosTop = aPlayerPosBottom.getUp(); + AutoMap aEntityPositions = new AutoMap<>(); + aEntityPositions.add(aPlayerPosBottom); + aEntityPositions.add(aPlayerPosTop); + for (int i = 0; i < 64; i++) { + BlockPos aEffectPos = aEntityPositions.get(aEntity.height > 1f ? MathUtils.randInt(0, 1) : 0); + float aOffsetX = MathUtils.randFloat(-0.35f, 0.35f); + float aOffsetY = MathUtils.randFloat(-0.25f, 0.35f); + float aOffsetZ = MathUtils.randFloat(-0.35f, 0.35f); + aEntity.worldObj.spawnParticle( + "reddust", + aEffectPos.xPos + aOffsetX, + aEffectPos.yPos + 0.3f + aOffsetY, + aEffectPos.zPos + aOffsetZ, + 0.0D, + 0.0D, + 0.0D); + } + } + + public Block getCasingBlock() { + return ModBlocks.blockCasings5Misc; + } + + public byte getCasingMeta() { + return 0; + } + + public Block getIntakeBlock() { + return ModBlocks.blockCasings5Misc; + } + + public byte getIntakeMeta() { + return 1; + } + + public Block getGearboxBlock() { + return ModBlocks.blockCasings5Misc; + } + + public byte getGearboxMeta() { + return 2; + } + + public byte getCasingTextureIndex() { + return 66; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEIsaMill(this.mName); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIsaMill; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public String[] getExtraInfoData() { + return new String[] { "IsaMill Grinding Machine", "Current Efficiency: " + (mEfficiency / 100) + "%", + getIdealStatus() == getRepairStatus() ? "No Maintainance issues" : "Needs Maintainance" }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String getMachineType() { + return "Grinding Machine"; + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + /* + * Milling Ball Handling + */ + + @Override + public ArrayList getStoredInputs() { + ArrayList tItems = super.getStoredInputs(); + for (MTEHatchMillingBalls tHatch : filterValidMTEs(mMillingBallBuses)) { + AutoMap aHatchContent = tHatch.getContentUsageSlots(); + if (!aHatchContent.isEmpty()) { + tItems.addAll(aHatchContent); + } + } + return tItems; + } + + public int getMaxBallDurability(ItemStack aStack) { + return ItemGenericChemBase.getMaxBallDurability(aStack); + } + + private ItemStack findMillingBall(ItemStack[] aItemInputs) { + if (mMillingBallBuses.size() != 1) { + return null; + } else { + MTEHatchMillingBalls aBus = mMillingBallBuses.get(0); + if (aBus != null) { + AutoMap aAvailableItems = aBus.getContentUsageSlots(); + if (!aAvailableItems.isEmpty()) { + for (final ItemStack aInput : aItemInputs) { + if (ItemUtils.isMillingBall(aInput)) { + for (ItemStack aBall : aAvailableItems) { + if (GTUtility.areStacksEqual(aBall, aInput, true)) { + Logger.INFO("Found a valid milling ball to use."); + return aBall; + } + } + } + } + } + } + } + return null; + } + + private void damageMillingBall(ItemStack aStack) { + if (MathUtils.randFloat(0, 10000000) / 10000000f < (1.2f - (0.2 * 1))) { + int damage = getMillingBallDamage(aStack) + 1; + log("damage milling ball " + damage); + if (damage >= getMaxBallDurability(aStack)) { + log("consuming milling ball"); + aStack.stackSize -= 1; + } else { + setDamage(aStack, damage); + } + } else { + log("not damaging milling ball"); + } + } + + private int getMillingBallDamage(ItemStack aStack) { + return ItemGenericChemBase.getMillingBallDamage(aStack); + } + + private void setDamage(ItemStack aStack, int aAmount) { + ItemGenericChemBase.setMillingBallDamage(aStack, aAmount); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + ItemStack millingBall; + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + millingBall = findMillingBall(inputItems); + if (millingBall == null) { + return SimpleCheckRecipeResult.ofFailure("no_milling_ball"); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + public CheckRecipeResult process() { + CheckRecipeResult result = super.process(); + if (result.wasSuccessful()) { + damageMillingBall(millingBall); + } + return result; + } + }.enablePerfectOverclock(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTENuclearSaltProcessingPlant.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTENuclearSaltProcessingPlant.java new file mode 100644 index 0000000000..139ea00d82 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTENuclearSaltProcessingPlant.java @@ -0,0 +1,222 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.item.ItemStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.TAE; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; + +public class MTENuclearSaltProcessingPlant extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + protected GTRecipe lastRecipeToBuffer; + private int casing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTENuclearSaltProcessingPlant(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTENuclearSaltProcessingPlant(String mName) { + super(mName); + } + + @Override + public String getMachineType() { + return "Reactor Processing Unit, Cold Trap"; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity tileEntity) { + return new MTENuclearSaltProcessingPlant(this.mName); + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiAutoCrafter; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Nuclear Salt Processing Plant") + .addInfo("Processes depleted nuclear salts that come from the LFTR") + .addInfo("Handles the recipes of the Reactor Processor Unit and Cold Trap") + .addInfo("Only Thermally Insulated Casings can be replaced with hatches") + .addInfo("Mufflers on top, Energy Hatches on bottom, exactly 2 of each are required") + .addInfo("Maintenance Hatch goes on the back, opposite of the controller block") + .addInfo("Inputs go on the left side of the multi, outputs on the right side") + .addInfo("150% faster than using single block machines of the same voltage") + .addInfo("Processes two items per voltage tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front Center") + .addCasingInfoMin("IV Machine Casing", 58, false) + .addCasingInfoMin("Thermally Insulated Casing", 1, false) + .addInputBus("Left Half", 2) + .addInputHatch("Left Half", 2) + .addOutputBus("Right Half", 3) + .addOutputHatch("Right Half", 3) + .addMufflerHatch("Top Side, 2 Required", 4) + .addEnergyHatch("Bottom Side, 2 Required", 5) + .addMaintenanceHatch("Back Side, Opposite of Controller", 6) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + protected IIconContainer getActiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER_ACTIVE; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER; + } + + @Override + protected int getCasingTextureId() { + return TAE.getIndexFromPage(0, 10); + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "AAA AAA", "ADA ADA", "AAA AAA" }, + { "ABBA ACCA", "B AAA C", "ABBA ACCA" }, { "ABBB~CCCA", "B C", "ABBBFCCCA" }, + { "ABBA ACCA", "B AAA C", "ABBA ACCA" }, { "AAA AAA", "AEA AEA", "AAA AAA" } })) + .addElement('A', ofBlock(GregTechAPI.sBlockCasings1, 5)) + .addElement( + 'B', + buildHatchAdder(MTENuclearSaltProcessingPlant.class).atLeast(InputBus, InputHatch) + .casingIndex(TAE.getIndexFromPage(0, 10)) + .dot(2) + .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockSpecialMultiCasings, 8)))) + .addElement( + 'C', + buildHatchAdder(MTENuclearSaltProcessingPlant.class).atLeast(OutputBus, OutputHatch) + .casingIndex(TAE.getIndexFromPage(0, 10)) + .dot(3) + .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockSpecialMultiCasings, 8)))) + .addElement( + 'D', + buildHatchAdder(MTENuclearSaltProcessingPlant.class).atLeast(Muffler) + .casingIndex(TAE.getIndexFromPage(0, 10)) + .dot(4) + .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockSpecialMultiCasings, 8)))) + .addElement( + 'E', + buildHatchAdder(MTENuclearSaltProcessingPlant.class).atLeast(Energy) + .casingIndex(TAE.getIndexFromPage(0, 10)) + .dot(5) + .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockSpecialMultiCasings, 8)))) + .addElement( + 'F', + buildHatchAdder(MTENuclearSaltProcessingPlant.class).atLeast(Maintenance) + .casingIndex(TAE.getIndexFromPage(0, 10)) + .dot(6) + .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockSpecialMultiCasings, 8)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack itemStack, boolean hintsOnly) { + buildPiece(mName, itemStack, hintsOnly, 4, 2, 0); + } + + @Override + public int survivalConstruct(ItemStack itemStack, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, itemStack, 4, 2, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity baseMetaTileEntity, ItemStack itemStack) { + casing = 0; + return checkPiece(mName, 4, 2, 0) && checkHatch(); + } + + @Override + public boolean checkHatch() { + return mEnergyHatches.size() == 2 && mMufflerHatches.size() == 2 && super.checkHatch(); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.nuclearSaltProcessingPlantRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 2.5F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return 2 * (Math.max(1, GTUtility.getTier(getMaxInputVoltage()))); + } + + @Override + public String[] getExtraInfoData() { + final String running = (this.mMaxProgresstime > 0 ? "Salt Plant running" : "Salt Plant stopped"); + final String maintenance = (this.getIdealStatus() == this.getRepairStatus() ? "No Maintenance issues" + : "Needs Maintenance"); + String tSpecialText; + + if (lastRecipeToBuffer != null && lastRecipeToBuffer.mOutputs[0].getDisplayName() != null) { + tSpecialText = "Currently processing: " + lastRecipeToBuffer.mOutputs[0].getDisplayName(); + } else { + tSpecialText = "Currently processing: Nothing"; + } + + return new String[] { "Nuclear Salt Processing Plant", running, maintenance, tSpecialText }; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTESpargeTower.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTESpargeTower.java new file mode 100644 index 0000000000..d78bbc0e45 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTESpargeTower.java @@ -0,0 +1,498 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.fluid.IFluidStore; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.GasSpargingRecipe; +import gregtech.api.util.GasSpargingRecipeMap; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTESpargeTower extends GTPPMultiBlockBase implements ISurvivalConstructable { + + protected static final String STRUCTURE_PIECE_BASE = "base"; + protected static final String STRUCTURE_PIECE_LAYER = "layer"; + protected static final String STRUCTURE_PIECE_LAYER_HINT = "layerHint"; + protected static final String STRUCTURE_PIECE_TOP_HINT = "topHint"; + private static final IStructureDefinition STRUCTURE_DEFINITION; + + static { + IHatchElement layeredOutputHatch = OutputHatch + .withCount(MTESpargeTower::getCurrentLayerOutputHatchCount) + .withAdder(MTESpargeTower::addLayerOutputHatch); + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape(STRUCTURE_PIECE_BASE, transpose(new String[][] { { "b~b", "bbb", "bbb" }, })) + .addShape(STRUCTURE_PIECE_LAYER, transpose(new String[][] { { "lll", "lcl", "lll" } })) + .addShape(STRUCTURE_PIECE_LAYER_HINT, transpose(new String[][] { { "lll", "l-l", "lll" } })) + .addShape(STRUCTURE_PIECE_TOP_HINT, transpose(new String[][] { { "lll", "lll", "lll" } })) + .addElement( + 'b', + buildHatchAdder(MTESpargeTower.class).atLeast(Energy, InputHatch, InputBus, Maintenance) + .disallowOnly(ForgeDirection.UP) + .casingIndex(getCasingIndex()) + .dot(1) + .buildAndChain( + onElementPass(MTESpargeTower::onCasingFound, ofBlock(ModBlocks.blockCasings5Misc, 4)))) + .addElement( + 'l', + ofChain( + buildHatchAdder(MTESpargeTower.class).atLeast(layeredOutputHatch) + .disallowOnly(ForgeDirection.UP, ForgeDirection.DOWN) + .casingIndex(getCasingIndex()) + .dot(2) + .build(), + ofHatchAdder(MTESpargeTower::addEnergyInputToMachineList, getCasingIndex(), 2), + ofHatchAdder(MTESpargeTower::addMaintenanceToMachineList, getCasingIndex(), 2), + onElementPass(MTESpargeTower::onCasingFound, ofBlock(ModBlocks.blockCasings5Misc, 4)))) + .addElement( + 'c', + ofChain( + onElementPass( + t -> t.onTopLayerFound(false), + ofHatchAdder(MTESpargeTower::addOutputToMachineList, getCasingIndex(), 3)), + onElementPass( + t -> t.onTopLayerFound(false), + ofHatchAdder(MTESpargeTower::addMaintenanceToMachineList, getCasingIndex(), 3)), + onElementPass(t -> t.onTopLayerFound(true), ofBlock(ModBlocks.blockCasings5Misc, 4)), + isAir())) + .build(); + } + + protected final List> mOutputHatchesByLayer = new ArrayList<>(); + protected int mHeight; + protected int mCasing; + protected boolean mTopLayerFound; + + public MTESpargeTower(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTESpargeTower(String aName) { + super(aName); + } + + public static int getCasingIndex() { + return 68; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESpargeTower(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Gas Sparge Tower") + .addInfo("Controller block for the Sparging Tower") + .addInfo("Runs gases through depleted molten salts to extract precious fluids") + .addInfo("Works the same way as the Distillation Tower, but with a fixed height of 8") + .addInfo("Fluids are only put out at the correct height") + .addInfo("The correct height equals the slot number in the NEI recipe") + .addSeparator() + .beginStructureBlock(3, 8, 3, true) + .addController("Front bottom") + .addOtherStructurePart("Sparge Tower Exterior Casing", "45 (minimum)") + .addEnergyHatch("Any casing", 1, 2) + .addMaintenanceHatch("Any casing", 1, 2, 3) + .addInputHatch("2x Input Hatches (Any bottom layer casing)", 1) + .addOutputHatch("6x Output Hatches (At least one per layer except bottom layer)", 2, 3) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCASpargeTowerActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCASpargeTower; + } + + @Override + protected int getCasingTextureId() { + return getCasingIndex(); + } + + @Override + public RecipeMap getRecipeMap() { + if (GTPPRecipeMaps.spargeTowerFakeRecipes.getAllRecipes() + .isEmpty()) { + generateRecipes(); + } + return GTPPRecipeMaps.spargeTowerFakeRecipes; + } + + private static boolean generateRecipes() { + for (GasSpargingRecipe aRecipe : GasSpargingRecipeMap.mRecipes) { + GTRecipe newRecipe = new GTRecipe( + false, + new ItemStack[] {}, + new ItemStack[] {}, + null, + null, + aRecipe.mFluidInputs.clone(), + new FluidStack[] {}, + aRecipe.mDuration, + aRecipe.mEUt, + 0); + GTPPRecipeMaps.spargeTowerFakeRecipes.add(newRecipe); + } + return !GTPPRecipeMaps.spargeTowerFakeRecipes.getAllRecipes() + .isEmpty(); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + ArrayList tFluidList = getStoredFluids(); + long tVoltage = GTUtility.roundUpVoltage(this.getMaxInputVoltage()); + byte tTier = (byte) Math.max(0, GTUtility.getTier(tVoltage)); + FluidStack[] tFluids = tFluidList.toArray(new FluidStack[0]); + if (tFluids.length > 0) { + GTRecipe tRecipe = getRecipeMap().findRecipe(getBaseMetaTileEntity(), false, GTValues.V[tTier], tFluids); + if (tRecipe != null) { + FluidStack[] possibleOutputs = getPossibleByproductsOfSparge( + tRecipe.mFluidInputs[0], + tRecipe.mFluidInputs[1]).toArray(new FluidStack[0]); + if (canOutputAll(possibleOutputs) && tRecipe.isRecipeInputEqual(true, tFluids)) { + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + + calculateOverclockedNessMulti((long) tRecipe.mEUt, tRecipe.mDuration, 1, tVoltage); + mMaxProgresstime = Math.max(1, mMaxProgresstime); + ArrayList aFluidOutputs = getByproductsOfSparge( + tRecipe.mFluidInputs[0], + tRecipe.mFluidInputs[1]); + this.mOutputFluids = aFluidOutputs.toArray(new FluidStack[0]); + updateSlots(); + + if (lEUt > 0) { + lEUt = (-lEUt); + } + + return CheckRecipeResultRegistry.SUCCESSFUL; + } + } + } + this.lEUt = 0; + this.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_RECIPE; + } + + private static List getPossibleByproductsOfSparge(final FluidStack aSpargeGas, + final FluidStack aSpentFuel) { + GasSpargingRecipe aSpargeRecipe = GasSpargingRecipeMap.findRecipe(aSpargeGas, aSpentFuel); + ArrayList aOutputGases = new ArrayList<>(); + if (aSpargeRecipe == null) { + return aOutputGases; + } + + aOutputGases.add(aSpargeRecipe.mOutputSpargedFuel.copy()); + ArrayList aTempMap = new ArrayList<>(); + for (int i = 2; i < aSpargeRecipe.mFluidOutputs.length; i++) { + int aGasAmount = aSpargeRecipe.mMaxOutputQuantity[i - 2] / 100; + FluidStack aOutput = aSpargeRecipe.mFluidOutputs[i].copy(); + FluidStack aSpargeOutput = null; + if (aGasAmount > 0) { + aSpargeOutput = new FluidStack(aOutput.getFluid(), aGasAmount); + } + aTempMap.add(aSpargeOutput); + } + aOutputGases.add(new FluidStack(aSpargeRecipe.mInputGas.getFluid(), aSpargeRecipe.mInputGas.amount)); + aOutputGases.addAll(aTempMap); + return aOutputGases; + } + + private static ArrayList getByproductsOfSparge(final FluidStack aSpargeGas, + final FluidStack aSpentFuel) { + GasSpargingRecipe aSpargeRecipe = GasSpargingRecipeMap.findRecipe(aSpargeGas, aSpentFuel); + ArrayList aOutputGases = new ArrayList<>(); + if (aSpargeRecipe == null) { + Logger.INFO("Did not find sparge recipe!"); + return aOutputGases; + } + int aSpargeGasAmount = aSpargeRecipe.mInputGas.amount; + + aOutputGases.add(aSpargeRecipe.mOutputSpargedFuel.copy()); + ArrayList aTempMap = new ArrayList<>(); + for (int i = 2; i < aSpargeRecipe.mFluidOutputs.length; i++) { + int aGasAmount = MathUtils.randInt(0, (aSpargeRecipe.mMaxOutputQuantity[i - 2] / 100)); + FluidStack aOutput = aSpargeRecipe.mFluidOutputs[i].copy(); + aSpargeGasAmount -= aGasAmount; + FluidStack aSpargeOutput = null; + if (aGasAmount > 0) { + aSpargeOutput = new FluidStack(aOutput.getFluid(), aGasAmount); + } + aTempMap.add(aSpargeOutput); + } + Logger.INFO("Sparge gas left: " + aSpargeGasAmount); + if (aSpargeGasAmount > 0) { + aOutputGases.add(new FluidStack(aSpargeRecipe.mInputGas.getFluid(), aSpargeGasAmount)); + } + // Logger.INFO("Sparge Outputs: "+ItemUtils.getArrayStackNames(aTempMap)); + aOutputGases.addAll(aTempMap); + Logger.INFO("Sparge output size: " + aOutputGases.size()); + // Logger.INFO("Output of sparging: "+ItemUtils.getArrayStackNames(aOutputGases)); + return aOutputGases; + } + + protected void onCasingFound() { + mCasing++; + } + + protected void onTopLayerFound(boolean aIsCasing) { + mTopLayerFound = true; + if (aIsCasing) { + onCasingFound(); + } + } + + protected int getCurrentLayerOutputHatchCount() { + return mOutputHatchesByLayer.size() < mHeight || mHeight <= 0 ? 0 + : mOutputHatchesByLayer.get(mHeight - 1) + .size(); + } + + protected boolean addLayerOutputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null || aTileEntity.isDead() + || !(aTileEntity.getMetaTileEntity() instanceof MTEHatchOutput tHatch)) { + Logger.INFO("Bad Output Hatch"); + return false; + } + while (mOutputHatchesByLayer.size() < mHeight) { + mOutputHatchesByLayer.add(new ArrayList<>()); + } + tHatch.updateTexture(aBaseCasingIndex); + boolean addedHatch = mOutputHatchesByLayer.get(mHeight - 1) + .add(tHatch); + Logger.INFO("Added Hatch: " + addedHatch); + return addedHatch; + } + + @Override + public List getFluidOutputSlots(FluidStack[] toOutput) { + return getFluidOutputSlotsByLayer(toOutput, mOutputHatchesByLayer); + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + // don't rotate a freaking tower, it won't work + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + // reset + mOutputHatchesByLayer.forEach(List::clear); + mHeight = 1; + mTopLayerFound = false; + mCasing = 0; + + // check base + if (!checkPiece(STRUCTURE_PIECE_BASE, 1, 0, 0)) { + Logger.INFO("Bad Base. Height: " + mHeight); + return false; + } + + // check each layer + while (mHeight < 8 && checkPiece(STRUCTURE_PIECE_LAYER, 1, mHeight, 0) && !mTopLayerFound) { + if (mOutputHatchesByLayer.get(mHeight - 1) + .isEmpty()) { + // layer without output hatch + Logger.INFO("Height: " + mHeight + " - Missing output on " + (mHeight - 1)); + return false; + } + // not top + mHeight++; + } + + // validate final invariants... + Logger.INFO("Height: " + mHeight); + Logger.INFO("Casings: " + mCasing); + Logger.INFO("Required: " + (7 * mHeight - 5)); + Logger.INFO("Found Top: " + mTopLayerFound); + return mCasing >= 45 && mTopLayerFound && mMaintenanceHatches.size() == 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + protected void addFluidOutputs(FluidStack[] mOutputFluids2) { + for (int i = 0; i < mOutputFluids2.length && i < mOutputHatchesByLayer.size(); i++) { + FluidStack tStack = mOutputFluids2[i] != null ? mOutputFluids2[i].copy() : null; + if (tStack == null) { + continue; + } + if (!dumpFluid(mOutputHatchesByLayer.get(i), tStack, true)) { + dumpFluid(mOutputHatchesByLayer.get(i), tStack, false); + } + } + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 1, 0, 0); + int tTotalHeight = 8; // min 2 output layer, so at least 1 + 2 height + for (int i = 1; i < tTotalHeight - 1; i++) { + buildPiece(STRUCTURE_PIECE_LAYER_HINT, stackSize, hintsOnly, 1, i, 0); + } + buildPiece(STRUCTURE_PIECE_TOP_HINT, stackSize, hintsOnly, 1, tTotalHeight - 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + mHeight = 0; + int built = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 1, 0, 0, elementBudget, env, false, true); + if (built >= 0) return built; + int tTotalHeight = 8; // min 2 output layer, so at least 1 + 2 height + for (int i = 1; i < tTotalHeight - 1; i++) { + mHeight = i; + built = survivialBuildPiece( + STRUCTURE_PIECE_LAYER_HINT, + stackSize, + 1, + i, + 0, + elementBudget, + env, + false, + true); + if (built >= 0) return built; + } + mHeight = tTotalHeight - 1; + return survivialBuildPiece( + STRUCTURE_PIECE_TOP_HINT, + stackSize, + 1, + tTotalHeight - 1, + 0, + elementBudget, + env, + false, + true); + } + + @Override + public String getMachineType() { + return "Gas Sparger"; + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + @Override + public boolean onPlungerRightClick(EntityPlayer aPlayer, ForgeDirection side, float aX, float aY, float aZ) { + int aLayerIndex = 0; + PlayerUtils + .messagePlayer(aPlayer, "Trying to clear " + mOutputHatchesByLayer.size() + " layers of output hatches."); + for (List layer : this.mOutputHatchesByLayer) { + int aHatchIndex = 0; + for (MTEHatchOutput hatch : layer) { + if (hatch.mFluid != null) { + PlayerUtils.messagePlayer( + aPlayer, + "Clearing " + hatch.mFluid.amount + + "L of " + + hatch.mFluid.getLocalizedName() + + " from hatch " + + aHatchIndex + + " on layer " + + aLayerIndex + + "."); + hatch.mFluid = null; + } + aHatchIndex++; + } + aLayerIndex++; + } + return aLayerIndex > 0; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + // Ensure that lEUt is negative from loaded NBT data, since this multi consumes EU + if (lEUt > 0) { + lEUt = (-lEUt); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEndustrialElectrolyzer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEndustrialElectrolyzer.java new file mode 100644 index 0000000000..487e22f3f2 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/MTEndustrialElectrolyzer.java @@ -0,0 +1,168 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.item.ItemStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEndustrialElectrolyzer extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEndustrialElectrolyzer(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEndustrialElectrolyzer(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEndustrialElectrolyzer(this.mName); + } + + @Override + public String getMachineType() { + return "Electrolyzer"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Electrolyzer") + .addInfo("180% faster than using single block machines of the same voltage") + .addInfo("Only uses 90% of the EU/t normally required") + .addInfo("Processes two items per voltage tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front Center") + .addCasingInfoMin("Electrolyzer Casings", 6, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEndustrialElectrolyzer.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) + .casingIndex(TAE.GTPP_INDEX(5)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 5)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 6 && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDIndustrialElectrolyzerActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDIndustrialElectrolyzer; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(5); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.electrolyzerNonCellRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 2.8F) + .setEuModifier(0.9F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialElectrolyzer; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public int getMaxParallelRecipes() { + return 2 * GTUtility.getTier(this.getMaxInputVoltage()); + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_DistillationTower.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_DistillationTower.java deleted file mode 100644 index 0befc6f7c7..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_DistillationTower.java +++ /dev/null @@ -1,519 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.fluid.IFluidStore; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Output_ME; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_Adv_DistillationTower extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private Mode mMode = Mode.DistillationTower; - private boolean mUpgraded = false; - - protected static final String STRUCTURE_PIECE_BASE = "base"; - protected static final String STRUCTURE_PIECE_LAYER = "layer"; - protected static final String STRUCTURE_PIECE_LAYER_HINT = "layerHint"; - protected static final String STRUCTURE_PIECE_TOP_HINT = "topHint"; - - protected final List> mOutputHatchesByLayer = new ArrayList<>(); - protected int mHeight; - protected int mCasing; - protected boolean mTopLayerFound; - - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_Adv_DistillationTower(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_Adv_DistillationTower(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_Adv_DistillationTower(this.mName); - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - IHatchElement layeredOutputHatch = OutputHatch - .withCount(GregtechMetaTileEntity_Adv_DistillationTower::getCurrentLayerOutputHatchCount) - .withAdder(GregtechMetaTileEntity_Adv_DistillationTower::addLayerOutputHatch); - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape(STRUCTURE_PIECE_BASE, transpose(new String[][] { { "b~b", "bbb", "bbb" }, })) - .addShape(STRUCTURE_PIECE_LAYER, transpose(new String[][] { { "lll", "lcl", "lll" }, })) - .addShape(STRUCTURE_PIECE_LAYER_HINT, transpose(new String[][] { { "lll", "l-l", "lll" }, })) - .addShape(STRUCTURE_PIECE_TOP_HINT, transpose(new String[][] { { "ttt", "ttt", "ttt" }, })) - .addElement( - 'b', - ofChain( - buildHatchAdder(GregtechMetaTileEntity_Adv_DistillationTower.class) - .atLeast(Energy, OutputBus, InputHatch, InputBus, Maintenance) - .disallowOnly(ForgeDirection.UP) - .casingIndex(getCasingTextureId()) - .dot(1) - .build(), - ofBlock(GregTech_API.sBlockCasings4, 1))) - .addElement( - 'l', - ofChain( - buildHatchAdder(GregtechMetaTileEntity_Adv_DistillationTower.class) - .atLeast(layeredOutputHatch, Energy, Maintenance) - .disallowOnly(ForgeDirection.UP, ForgeDirection.DOWN) - .casingIndex(getCasingTextureId()) - .dot(2) - .build(), - ofHatchAdder( - GregtechMetaTileEntity_Adv_DistillationTower::addMufflerToMachineList, - getCasingTextureId(), - 3), - ofBlock(GregTech_API.sBlockCasings4, 1))) - .addElement( - 'c', - ofChain( - onElementPass( - GregtechMetaTileEntity_Adv_DistillationTower::onTopLayerFound, - ofHatchAdder( - GregtechMetaTileEntity_Adv_DistillationTower::addMufflerToMachineList, - getCasingTextureId(), - 3)), - onElementPass( - GregtechMetaTileEntity_Adv_DistillationTower::onTopLayerFound, - ofHatchAdder( - GregtechMetaTileEntity_Adv_DistillationTower::addOutputToMachineList, - getCasingTextureId(), - 3)), - onElementPass( - GregtechMetaTileEntity_Adv_DistillationTower::onTopLayerFound, - ofHatchAdder( - GregtechMetaTileEntity_Adv_DistillationTower::addMaintenanceToMachineList, - getCasingTextureId(), - 3)), - onElementPass( - GregtechMetaTileEntity_Adv_DistillationTower::onTopLayerFound, - ofBlock(GregTech_API.sBlockCasings4, 1)), - isAir())) - .addElement( - 't', - buildHatchAdder(GregtechMetaTileEntity_Adv_DistillationTower.class) - .atLeast(layeredOutputHatch, Muffler) - .disallowOnly(ForgeDirection.DOWN) - .casingIndex(getCasingTextureId()) - .dot(2) - .buildAndChain(GregTech_API.sBlockCasings4, 1)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - protected int getCurrentLayerOutputHatchCount() { - return mOutputHatchesByLayer.size() < mHeight || mHeight <= 0 ? 0 - : mOutputHatchesByLayer.get(mHeight - 1) - .size(); - } - - protected boolean addLayerOutputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null || aTileEntity.isDead() - || !(aTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_Hatch_Output tHatch)) return false; - while (mOutputHatchesByLayer.size() < mHeight) mOutputHatchesByLayer.add(new ArrayList<>()); - tHatch.updateTexture(aBaseCasingIndex); - return mOutputHatchesByLayer.get(mHeight - 1) - .add(tHatch) && mOutputHatches.add(tHatch); - } - - protected void onTopLayerFound() { - mTopLayerFound = true; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Advanced Distillation Tower") - .addInfo("Use 85% less energy in distillery mode") - .addInfo("250%/100% faster in DT/distillery mode") - .addInfo("Right click the controller with screwdriver to change mode.") - .addInfo("Max parallel dictated by tower tier and mode") - .addInfo("DTower Mode: T1=4, T2=12") - .addInfo("Distillery Mode: Tower Tier * (4*InputTier)") - .addInfo("Distillery Mode require a full height tower") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .addCasingInfoMin("Clean Stainless Steel Machine Casing", 7, false) - .addInputBus("Bottom Casing", 1) - .addOutputBus("Bottom Casing", 1) - .addInputHatch("Bottom Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addOutputHatch("One per layer except bottom", 2) - .addMufflerHatch("Top Casing", 3) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 1, 0, 0); - int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height - for (int i = 1; i < tTotalHeight - 1; i++) { - buildPiece(STRUCTURE_PIECE_LAYER_HINT, stackSize, hintsOnly, 1, i, 0); - } - buildPiece(STRUCTURE_PIECE_TOP_HINT, stackSize, hintsOnly, 1, tTotalHeight - 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - mHeight = 0; - int built = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 1, 0, 0, elementBudget, env, false, true); - if (built >= 0) return built; - int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height - for (int i = 1; i < tTotalHeight - 1; i++) { - mHeight = i; - built = survivialBuildPiece( - STRUCTURE_PIECE_LAYER_HINT, - stackSize, - 1, - i, - 0, - elementBudget, - env, - false, - true); - if (built >= 0) return built; - } - mHeight = tTotalHeight - 1; - return survivialBuildPiece( - STRUCTURE_PIECE_TOP_HINT, - stackSize, - 1, - tTotalHeight - 1, - 0, - elementBudget, - env, - false, - true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - // reset - mOutputHatchesByLayer.forEach(List::clear); - mHeight = 1; - mTopLayerFound = false; - - // check base - if (!checkPiece(STRUCTURE_PIECE_BASE, 1, 0, 0)) return false; - - // check each layer - while (mHeight < 12) { - if (!checkPiece(STRUCTURE_PIECE_LAYER, 1, mHeight, 0)) { - return false; - } - if (mOutputHatchesByLayer.size() < mHeight || mOutputHatchesByLayer.get(mHeight - 1) - .isEmpty()) - // layer without output hatch - return false; - if (mTopLayerFound || !mMufflerHatches.isEmpty()) { - break; - } - // not top - mHeight++; - } - boolean check = mTopLayerFound && mHeight >= 2 && checkHatch(); - if (check && mHeight < 11) { - // force the mode to DT if not in full height - mMode = Mode.DistillationTower; - mLastRecipe = null; - } - return check; - } - - @Override - public RecipeMap getRecipeMap() { - return mMode.getRecipeMap(); - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(RecipeMaps.distilleryRecipes, RecipeMaps.distillationTowerRecipes); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - // don't rotate a freaking tower, it won't work - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - if (this.mMode == Mode.Distillery) - return CORE.ConfigSwitches.pollutionPerSecondMultiAdvDistillationTower_ModeDistillery; - return CORE.ConfigSwitches.pollutionPerSecondMultiAdvDistillationTower_ModeDT; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setByte("mMode", (byte) mMode.ordinal()); - aNBT.setBoolean("mUpgraded", mUpgraded); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mMode = Mode.values()[aNBT.getByte("mMode")]; - mUpgraded = aNBT.getBoolean("mUpgraded"); - super.loadNBTData(aNBT); - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (mHeight < 11) { - PlayerUtils.messagePlayer(aPlayer, "Cannot switch mode if not in full height."); - return; - } - mMode = mMode.next(); - PlayerUtils.messagePlayer(aPlayer, "Now running in " + mMode + " Mode."); - mLastRecipe = null; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public boolean addOutput(FluidStack aLiquid) { - if (aLiquid == null) return false; - FluidStack copiedFluidStack = aLiquid.copy(); - for (List hatches : mOutputHatchesByLayer) { - if (dumpFluid(hatches, copiedFluidStack, true)) return true; - } - for (List hatches : mOutputHatchesByLayer) { - if (dumpFluid(hatches, copiedFluidStack, false)) return true; - } - return false; - } - - @Override - protected void addFluidOutputs(FluidStack[] mOutputFluids2) { - if (mMode == Mode.DistillationTower) { - // dt mode - for (int i = 0; i < mOutputFluids2.length && i < mOutputHatchesByLayer.size(); i++) { - FluidStack tStack = mOutputFluids2[i].copy(); - if (!dumpFluid(mOutputHatchesByLayer.get(i), tStack, true)) - dumpFluid(mOutputHatchesByLayer.get(i), tStack, false); - } - } else { - // distillery mode - for (FluidStack outputFluidStack : mOutputFluids2) { - addOutput(outputFluidStack); - } - } - } - - @Override - public List getFluidOutputSlots(FluidStack[] toOutput) { - return getFluidOutputSlotsByLayer(toOutput, mOutputHatchesByLayer); - } - - @Override - public String getMachineType() { - return "Distillery, Distillation Tower"; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - protected void setupProcessingLogic(ProcessingLogic logic) { - super.setupProcessingLogic(logic); - logic.setEuModifier(mMode == Mode.Distillery ? 0.15F : 1F); - logic.setSpeedBonus(mMode == Mode.Distillery ? 1F / 2F : 1F / 3.5F); - } - - @Override - public int getMaxParallelRecipes() { - return switch (mMode) { - case DistillationTower -> getTierOfTower() == 1 ? 4 : getTierOfTower() == 2 ? 12 : 0; - case Distillery -> getTierOfTower() * (4 * GT_Utility.getTier(this.getMaxInputVoltage())); - default -> 0; - }; - } - - private int getTierOfTower() { - return mUpgraded ? 2 : 1; - } - - @Override - protected IIconContainer getActiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; - } - - @Override - protected int getCasingTextureId() { - return 49; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aTick % 20 == 0 && !mUpgraded) { - ItemStack aGuiStack = this.getControllerSlot(); - if (aGuiStack != null) { - if (GT_Utility.areStacksEqual(aGuiStack, GregtechItemList.Distillus_Upgrade_Chip.get(1))) { - this.mUpgraded = true; - mInventory[1] = ItemUtils.depleteStack(aGuiStack); - } - } - } - } - - @Override - public boolean canDumpFluidToME() { - // All fluids can be dumped to ME only if each layer contains a ME Output Hatch. - return this.mOutputHatchesByLayer.stream() - .allMatch( - tLayerOutputHatches -> tLayerOutputHatches.stream() - .anyMatch( - tHatch -> (tHatch instanceof GT_MetaTileEntity_Hatch_Output_ME tMEHatch) - && (tMEHatch.canAcceptFluid()))); - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - aNBT.setBoolean("mUpgraded", mUpgraded); - super.setItemNBT(aNBT); - } - - @Override - public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { - super.addAdditionalTooltipInformation(stack, tooltip); - NBTTagCompound aNBT = stack.getTagCompound(); - if (aNBT != null && aNBT.hasKey("mUpgraded")) { - tooltip.add(StatCollector.translateToLocal("tooltip.large_distill_tower.upgraded")); - } - } - - private enum Mode { - - DistillationTower(RecipeMaps.distillationTowerRecipes), - Distillery(RecipeMaps.distilleryRecipes),; - - static final Mode[] VALUES = values(); - private final RecipeMap recipeMap; - - Mode(RecipeMap recipeMap) { - this.recipeMap = recipeMap; - } - - public RecipeMap getRecipeMap() { - return recipeMap; - } - - public Mode next() { - return VALUES[(ordinal() + 1) % VALUES.length]; - } - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("mode", mMode.ordinal()); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector - .translateToLocal("GT5U.GTPP_MULTI_ADV_DISTILLATION_TOWER.mode." + tag.getInteger("mode")) - + EnumChatFormatting.RESET); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_EBF.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_EBF.java deleted file mode 100644 index 91a1274d69..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_EBF.java +++ /dev/null @@ -1,328 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.Objects; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GT_MetaTileEntity_Hatch_CustomFluidBase; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntity_Adv_EBF extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - public static int CASING_TEXTURE_ID; - public static String mHotFuelName = "Blazing Pyrotheum"; - public static String mCasingName = "Volcanus Casing"; - public static String mHatchName = "Pyrotheum Hatch"; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - private int mCasing; - private final ArrayList mPyrotheumHatches = new ArrayList<>(); - - private HeatingCoilLevel mHeatingCapacity = HeatingCoilLevel.None; - - public GregtechMetaTileEntity_Adv_EBF(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 11); - } - - public GregtechMetaTileEntity_Adv_EBF(String aName) { - super(aName); - CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 11); - } - - @Override - public String getMachineType() { - return "Blast Furnace"; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_Adv_EBF(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Factory Grade Advanced Blast Furnace") - .addInfo("Speed: +120% | EU Usage: 90% | Parallel: 8") - .addInfo("Consumes 10L of " + mHotFuelName + " per second during operation") - .addInfo("Constructed exactly the same as a normal EBF") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .addController("Bottom center") - .addCasingInfoMin(mCasingName, 8, false) - .addInputHatch("Any Casing", 1) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addOtherStructurePart(mHatchName, "Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public String[] getExtraInfoData() { - return new String[] { StatCollector.translateToLocal("GT5U.EBF.heat") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mHeatingCapacity.getHeat()) - + EnumChatFormatting.RESET - + " K" }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "HHH", "H-H", "HHH" }, - { "C~C", "CCC", "CCC" }, })) - .addElement( - 'C', - ofChain( - buildHatchAdder(GregtechMetaTileEntity_Adv_EBF.class) - .adder(GregtechMetaTileEntity_Adv_EBF::addPyrotheumHatch) - .hatchId(968) - .shouldReject(x -> !x.mPyrotheumHatches.isEmpty()) - .casingIndex(CASING_TEXTURE_ID) - .dot(1) - .build(), - buildHatchAdder(GregtechMetaTileEntity_Adv_EBF.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) - .casingIndex(CASING_TEXTURE_ID) - .dot(1) - .build(), - onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 11)))) - .addElement( - 'H', - ofCoil(GregtechMetaTileEntity_Adv_EBF::setCoilLevel, GregtechMetaTileEntity_Adv_EBF::getCoilLevel)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 3, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - mPyrotheumHatches.clear(); - setCoilLevel(HeatingCoilLevel.None); - return checkPiece(mName, 1, 3, 0) && mCasing >= 8 && getCoilLevel() != HeatingCoilLevel.None && checkHatch(); - } - - @Override - public boolean checkHatch() { - return super.checkHatch() && !mPyrotheumHatches.isEmpty(); - } - - private boolean addPyrotheumHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_CustomFluidBase - && aMetaTileEntity.getBaseMetaTileEntity() - .getMetaTileID() == 968) { - return addToMachineListInternal(mPyrotheumHatches, aTileEntity, aBaseCasingIndex); - } - } - return false; - } - - @Override - public void updateSlots() { - for (GT_MetaTileEntity_Hatch_CustomFluidBase tHatch : filterValidMTEs(mPyrotheumHatches)) tHatch.updateSlots(); - super.updateSlots(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAAdvancedEBFActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAAdvancedEBF; - } - - @Override - protected int getCasingTextureId() { - return CASING_TEXTURE_ID; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.blastFurnaceRecipes; - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - return recipe.mSpecialValue <= getCoilLevel().getHeat() ? CheckRecipeResultRegistry.SUCCESSFUL - : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); - } - - @NotNull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe).setHeatOC(true) - .setHeatDiscount(true) - .setRecipeHeat(recipe.mSpecialValue) - .setMachineHeat((int) getCoilLevel().getHeat()); - } - }.setSpeedBonus(1F / 2.2F) - .setEuModifier(0.9F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiAdvEBF; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - // Try dry Pyrotheum after all other logic - if (this.mStartUpCheck < 0) { - if (this.mMaxProgresstime > 0 && this.mProgresstime != 0 || this.getBaseMetaTileEntity() - .hasWorkJustBeenEnabled()) { - if (aTick % 20 == 0 || this.getBaseMetaTileEntity() - .hasWorkJustBeenEnabled()) { - if (!this.depleteInputFromRestrictedHatches(this.mPyrotheumHatches, 10)) { - this.causeMaintenanceIssue(); - this.stopMachine( - ShutDownReasonRegistry - .outOfFluid(Objects.requireNonNull(FluidUtils.getFluidStack("pyrotheum", 10)))); - } - } - } - } - } - - @Override - public int getMaxParallelRecipes() { - return 8; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - inputSeparation = !inputSeparation; - aPlayer.addChatMessage( - new ChatComponentTranslation( - inputSeparation ? "interaction.separateBusses.enabled" : "interaction.separateBusses.disabled")); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { - inputSeparation = aNBT.getBoolean("isBussesSeparate"); - } - } - - public HeatingCoilLevel getCoilLevel() { - return mHeatingCapacity; - } - - public void setCoilLevel(HeatingCoilLevel aCoilLevel) { - mHeatingCapacity = aCoilLevel; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK4.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK4.java deleted file mode 100644 index 11f56cbd13..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK4.java +++ /dev/null @@ -1,200 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; - -import java.lang.reflect.Method; - -import net.minecraft.block.Block; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.TAE; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.objects.overclockdescriber.OverclockDescriber; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.AdvancedFusionOverclockDescriber; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_FusionComputer; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntity_Adv_Fusion_MK4 extends GT_MetaTileEntity_FusionComputer { - - public static final Method mUpdateHatchTexture; - - static { - mUpdateHatchTexture = ReflectionUtils.getMethod(GT_MetaTileEntity_Hatch.class, "updateTexture", int.class); - } - - public GregtechMetaTileEntity_Adv_Fusion_MK4(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_Adv_Fusion_MK4(String aName) { - super(aName); - } - - @Override - protected OverclockDescriber createOverclockDescriber() { - return new AdvancedFusionOverclockDescriber((byte) tier(), capableStartupCanonical()); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fusion Reactor") - .addInfo("HARNESSING THE POWER OF A BLUE GIANT") - .addInfo("Controller block for the Fusion Reactor Mk IV") - .addInfo("131072EU/t and 320M EU capacity per Energy Hatch") - .addInfo("If the recipe has a startup cost greater than the") - .addInfo("number of energy hatches * cap, you can't do it") - .addInfo("Performs 4/4 overclocks") - .addSeparator() - .beginStructureBlock(15, 3, 15, false) - .addController("See diagram when placed") - .addCasingInfoMin("Fusion Machine Casings MK III", 79, false) - .addStructureInfo("Cover the coils with casing") - .addOtherStructurePart("Advanced Fusion Coils", "Center part of the ring") - .addEnergyHatch("1-16, Specified casings", 2) - .addInputHatch("2-16, Specified casings", 1) - .addOutputHatch("1-16, Specified casings", 3) - .addStructureInfo("ALL Hatches must be UHV or better") - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public int tier() { - return 9; - } - - @Override - public long maxEUStore() { - return (640010000L * 4) * (Math.min(16, this.mEnergyHatches.size())) / 8L; - } - - @Override - public long capableStartupCanonical() { - return 5_120_000_000L; - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_Adv_Fusion_MK4(mName); - } - - @Override - public Block getCasing() { - return getFusionCoil(); - } - - @Override - public int getCasingMeta() { - return 12; - } - - @Override - public Block getFusionCoil() { - return ModBlocks.blockCasings3Misc; - } - - @Override - public int getFusionCoilMeta() { - return 13; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return super.createProcessingLogic().enablePerfectOverclock(); - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { - new GT_RenderedTexture( - Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS, - Dyes.getModulation(-1, Dyes._NULL.mRGBa)), - TextureFactory.builder() - .addIcon(this.getIconOverlay()) - .extFacing() - .build() }; - } else if (!aActive) { - return new ITexture[] { new GT_RenderedTexture( - Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS, - Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; - } else { - return new ITexture[] { new GT_RenderedTexture( - TexturesGtBlock.TEXTURE_CASING_FUSION_CASING_ULTRA, - Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; - } - } - - @Override - public ITexture getTextureOverlay() { - return new GT_RenderedTexture( - this.getBaseMetaTileEntity() - .isActive() ? TexturesGtBlock.Casing_Machine_Screen_3 : TexturesGtBlock.Casing_Machine_Screen_1); - } - - public IIconContainer getIconOverlay() { - return this.getBaseMetaTileEntity() - .isActive() ? TexturesGtBlock.Casing_Machine_Screen_3 : TexturesGtBlock.Casing_Machine_Screen_1; - } - - @Override - public boolean turnCasingActive(final boolean status) { - try { - if (this.mEnergyHatches != null) { - for (final GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) { - mUpdateHatchTexture.invoke(hatch, (status ? TAE.getIndexFromPage(2, 14) : 53)); - } - } - if (this.mOutputHatches != null) { - for (final GT_MetaTileEntity_Hatch_Output hatch2 : this.mOutputHatches) { - mUpdateHatchTexture.invoke(hatch2, (status ? TAE.getIndexFromPage(2, 14) : 53)); - } - } - if (this.mInputHatches != null) { - for (final GT_MetaTileEntity_Hatch_Input hatch3 : this.mInputHatches) { - mUpdateHatchTexture.invoke(hatch3, (status ? TAE.getIndexFromPage(2, 14) : 53)); - } - } - } catch (Throwable t) { - return false; - } - return true; - } - - @Override - public String[] getInfoData() { - String tier = "IV"; - float plasmaOut = 0; - int powerRequired = 0; - if (this.mLastRecipe != null) { - powerRequired = this.mLastRecipe.mEUt; - if (this.mLastRecipe.getFluidOutput(0) != null) { - plasmaOut = (float) this.mLastRecipe.getFluidOutput(0).amount / (float) this.mLastRecipe.mDuration; - } - } - - return new String[] { "Fusion Reactor MK " + tier, "EU Required: " + powerRequired + "EU/t", - "Stored EU: " + mEUStore + " / " + maxEUStore(), "Plasma Output: " + plasmaOut + "L/t" }; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK5.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK5.java deleted file mode 100644 index 9b0dce3674..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Fusion_MK5.java +++ /dev/null @@ -1,200 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; - -import java.lang.reflect.Method; - -import net.minecraft.block.Block; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Dyes; -import gregtech.api.enums.TAE; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.objects.overclockdescriber.OverclockDescriber; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.AdvancedFusionOverclockDescriber; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.common.tileentities.machines.multi.GT_MetaTileEntity_FusionComputer; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntity_Adv_Fusion_MK5 extends GT_MetaTileEntity_FusionComputer { - - public static final Method mUpdateHatchTexture; - - static { - mUpdateHatchTexture = ReflectionUtils.getMethod(GT_MetaTileEntity_Hatch.class, "updateTexture", int.class); - } - - public GregtechMetaTileEntity_Adv_Fusion_MK5(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_Adv_Fusion_MK5(String aName) { - super(aName); - } - - @Override - protected OverclockDescriber createOverclockDescriber() { - return new AdvancedFusionOverclockDescriber((byte) tier(), capableStartupCanonical()); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fusion Reactor") - .addInfo("HARNESSING THE POWER OF A NEUTRON STAR") - .addInfo("Controller block for the Fusion Reactor Mk V") - .addInfo("524,288EU/t and 1.28B EU capacity per Energy Hatch") - .addInfo("If the recipe has a startup cost greater than the") - .addInfo("number of energy hatches * cap, you can't do it") - .addInfo("Performs 4/4 overclocks") - .addSeparator() - .beginStructureBlock(15, 3, 15, false) - .addController("See diagram when placed") - .addCasingInfoMin("Fusion Machine Casings MK IV", 79, false) - .addStructureInfo("Cover the coils with casing") - .addOtherStructurePart("Advanced Fusion Coils II", "Center part of the ring") - .addEnergyHatch("1-16, Specified casings", 2) - .addInputHatch("2-16, Specified casings", 1) - .addOutputHatch("1-16, Specified casings", 3) - .addStructureInfo("ALL Hatches must be UEV or better") - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public int tier() { - return 10; - } - - @Override - public long maxEUStore() { - return (640010000L * 16) * (Math.min(16, this.mEnergyHatches.size())) / 8L; - } - - @Override - public long capableStartupCanonical() { - return 20_480_000_000L; - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_Adv_Fusion_MK5(mName); - } - - @Override - public Block getCasing() { - return getFusionCoil(); - } - - @Override - public int getCasingMeta() { - return 0; - } - - @Override - public Block getFusionCoil() { - return ModBlocks.blockCasings6Misc; - } - - @Override - public int getFusionCoilMeta() { - return 1; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return super.createProcessingLogic().enablePerfectOverclock(); - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { - new GT_RenderedTexture( - Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS, - Dyes.getModulation(-1, Dyes._NULL.mRGBa)), - TextureFactory.builder() - .addIcon(this.getIconOverlay()) - .extFacing() - .build() }; - } else if (!aActive) { - return new ITexture[] { new GT_RenderedTexture( - Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS, - Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; - } else { - return new ITexture[] { new GT_RenderedTexture( - TexturesGtBlock.TEXTURE_CASING_FUSION_CASING_HYPER, - Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; - } - } - - @Override - public ITexture getTextureOverlay() { - return new GT_RenderedTexture( - this.getBaseMetaTileEntity() - .isActive() ? TexturesGtBlock.Casing_Machine_Screen_Rainbow : TexturesGtBlock.Casing_Machine_Screen_1); - } - - public IIconContainer getIconOverlay() { - return this.getBaseMetaTileEntity() - .isActive() ? TexturesGtBlock.Casing_Machine_Screen_Rainbow : TexturesGtBlock.Casing_Machine_Screen_1; - } - - @Override - public boolean turnCasingActive(final boolean status) { - try { - if (this.mEnergyHatches != null) { - for (final GT_MetaTileEntity_Hatch_Energy hatch : this.mEnergyHatches) { - mUpdateHatchTexture.invoke(hatch, (status ? TAE.getIndexFromPage(3, 6) : 53)); - } - } - if (this.mOutputHatches != null) { - for (final GT_MetaTileEntity_Hatch_Output hatch2 : this.mOutputHatches) { - mUpdateHatchTexture.invoke(hatch2, (status ? TAE.getIndexFromPage(3, 6) : 53)); - } - } - if (this.mInputHatches != null) { - for (final GT_MetaTileEntity_Hatch_Input hatch3 : this.mInputHatches) { - mUpdateHatchTexture.invoke(hatch3, (status ? TAE.getIndexFromPage(3, 6) : 53)); - } - } - } catch (Throwable t) { - return false; - } - return true; - } - - @Override - public String[] getInfoData() { - String tier = "V"; - float plasmaOut = 0; - int powerRequired = 0; - if (this.mLastRecipe != null) { - powerRequired = this.mLastRecipe.mEUt; - if (this.mLastRecipe.getFluidOutput(0) != null) { - plasmaOut = (float) this.mLastRecipe.getFluidOutput(0).amount / (float) this.mLastRecipe.mDuration; - } - } - - return new String[] { "Fusion Reactor MK " + tier, "EU Required: " + powerRequired + "EU/t", - "Stored EU: " + mEUStore + " / " + maxEUStore(), "Plasma Output: " + plasmaOut + "L/t" }; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_HeatExchanger.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_HeatExchanger.java deleted file mode 100644 index f8579957f3..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_HeatExchanger.java +++ /dev/null @@ -1,409 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.registries.LHECoolantRegistry; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.block.base.BasicBlock.BlockTypes; -import gtPlusPlus.core.block.base.BlockBaseModular; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntity_Adv_HeatExchanger - extends GregtechMeta_MultiBlockBase { - - private static final int CASING_INDEX = TAE.getIndexFromPage(1, 12); - private static final String STRUCTURE_PIECE_MAIN = "main"; - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { { " ccc ", "cCCCc", "cCCCc", "cCCCc", " ccc " }, - { " ccc ", "cPPPc", "cPPPc", "cPPPc", " ccc " }, { " ccc ", "cPPPc", "cPPPc", "cPPPc", " ccc " }, - { " ccc ", "cPPPc", "cPPPc", "cPPPc", " ccc " }, { " ccc ", "cPPPc", "cPPPc", "cPPPc", " ccc " }, - { " c~c ", "cPPPc", "cPPPc", "cPPPc", " ccc " }, { " hhh ", "hHHHh", "hHHHh", "hHHHh", " hhh " }, - { " f f ", "f f", " ", "f f", " f f " }, - { " f f ", "f f", " ", "f f", " f f " }, })) - .addElement('P', ofBlock(GregTech_API.sBlockCasings2, 15)) - .addElement('f', ofBlock(getFrame(), 0)) - .addElement( - 'C', - ofChain( - ofHatchAdder( - GregtechMetaTileEntity_Adv_HeatExchanger::addColdFluidOutputToMachineList, - CASING_INDEX, - 2), - onElementPass( - GregtechMetaTileEntity_Adv_HeatExchanger::onCasingAdded, - ofBlock(ModBlocks.blockSpecialMultiCasings, 14)))) - .addElement( - 'H', - ofChain( - ofHatchAdder(GregtechMetaTileEntity_Adv_HeatExchanger::addHotFluidInputToMachineList, CASING_INDEX, 3), - onElementPass( - GregtechMetaTileEntity_Adv_HeatExchanger::onCasingAdded, - ofBlock(ModBlocks.blockSpecialMultiCasings, 14)))) - .addElement( - 'h', - ofChain( - ofHatchAdder(GregtechMetaTileEntity_Adv_HeatExchanger::addInputToMachineList, CASING_INDEX, 1), - ofHatchAdder(GregtechMetaTileEntity_Adv_HeatExchanger::addOutputToMachineList, CASING_INDEX, 1), - ofHatchAdder(GregtechMetaTileEntity_Adv_HeatExchanger::addMaintenanceToMachineList, CASING_INDEX, 1), - onElementPass( - GregtechMetaTileEntity_Adv_HeatExchanger::onCasingAdded, - ofBlock(ModBlocks.blockSpecialMultiCasings, 14)))) - .addElement( - 'c', - ofChain( - onElementPass( - GregtechMetaTileEntity_Adv_HeatExchanger::onCasingAdded, - ofBlock(ModBlocks.blockSpecialMultiCasings, 14)))) - .build(); - public static float penalty_per_config = 0.015f; // penalize 1.5% efficiency per circuitry level (1-25) - - private GT_MetaTileEntity_Hatch_Input mInputHotFluidHatch; - private GT_MetaTileEntity_Hatch_Output mOutputColdFluidHatch; - private boolean superheated = false; - private int superheated_threshold = 0; - private float water; - private int mCasingAmount; - - public GregtechMetaTileEntity_Adv_HeatExchanger(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_Adv_HeatExchanger(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the XL Heat Exchanger") - .addInfo("More complicated than a Fusion Reactor. Seriously") - .addInfo("But you know this by now, right?") - .addInfo("Works as fast as 32 Large Heat Exchangers") - .addSeparator() - .addInfo("Inputs are Hot Coolant or Lava") - .addInfo("Outputs Coolant or Pahoehoe Lava and SH Steam/Steam") - .addInfo("Outputs SH Steam if input flow is equal to or above a certain value:") - .addInfo("Hot Coolant: 25,600 L/s, maximum 51,200 L/s, max output 10,240,000 SH Steam/s") - .addInfo("Lava: 32,000 L/s, maximum 64,000 L/s, max output 5,120,000 SH Steam/s") - .addInfo("A circuit in the controller lowers the SH Steam threshold and efficiency") - .addInfo("3.75% reduction and 1.5% efficiency loss per circuit config over 1") - .addSeparator() - .beginStructureBlock(5, 9, 5, false) - .addController("Front bottom") - .addCasingInfoMin("Reinforced Heat Exchanger Casing", 90, false) - .addOtherStructurePart("Tungstensteel Pipe Casing", "Center 3x5x3 (45 blocks)") - .addMaintenanceHatch("Any casing", 1) - .addInputHatch("Hot fluid, bottom center", 2) - .addInputHatch("Distilled water, any bottom layer casing", 1) - .addOutputHatch("Cold fluid, top center", 3) - .addOutputHatch("Steam/SH Steam, any bottom layer casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - superheated = aNBT.getBoolean("superheated"); - super.loadNBTData(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setBoolean("superheated", superheated); - super.saveNBTData(aNBT); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAAdvancedHeatExchangerActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAAdvancedHeatExchanger; - } - - @Override - protected int getCasingTextureId() { - return CASING_INDEX; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> !r.isUpsideDown() && !f.isVerticallyFliped(); - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - if (mInputHotFluidHatch.getFluid() == null) return CheckRecipeResultRegistry.SUCCESSFUL; - - int fluidAmountToConsume = mInputHotFluidHatch.getFluidAmount(); // how much fluid is in hatch - - // The XL LHE works as fast as 32 regular LHEs. These are the comments from the original LHE, - // with changes where the values needed to change for the 32x speed multiplier - superheated_threshold = 128000; // default: must have 4000L -> 128000L per second to generate superheated steam - float efficiency = 1f; // default: operate at 100% efficiency with no integrated circuitry - int shs_reduction_per_config = 4800; // reduce threshold 150L -> 4800L per second per circuitry level (1-25) - float steam_output_multiplier = 20f; // default: multiply output by 4 * 10 (boosted x5) - float penalty = 0.0f; // penalty to apply to output based on circuitry level (1-25). - - // Do we have an integrated circuit with a valid configuration? - if (mInventory[1] != null && mInventory[1].getUnlocalizedName() - .startsWith("gt.integrated_circuit")) { - int circuit_config = mInventory[1].getItemDamage(); - if (circuit_config >= 1 && circuit_config <= 25) { - // If so, apply the penalty and reduced threshold. - penalty = (circuit_config - 1) * penalty_per_config; - superheated_threshold -= (shs_reduction_per_config * (circuit_config - 1)); - } - } - - efficiency -= penalty; - - var coolant = LHECoolantRegistry.getCoolant( - mInputHotFluidHatch.getFluid() - .getFluid()); - - if (coolant == null) { - superheated_threshold = 0; - return CheckRecipeResultRegistry.NO_RECIPE; - } else { - steam_output_multiplier *= coolant.steamMultiplier; - superheated_threshold *= coolant.superheatedThreshold; - } - - // set the internal superheated flag if we have enough hot fluid. Used in the onRunningTick method. - this.superheated = fluidAmountToConsume >= superheated_threshold; - - // Don't consume too much hot fluid per second, maximum is 2x SH threshold. - fluidAmountToConsume = Math.min(fluidAmountToConsume, superheated_threshold * 2); - - mInputHotFluidHatch.drain(fluidAmountToConsume, true); - mOutputColdFluidHatch.fill(coolant.getColdFluid(fluidAmountToConsume), true); - - this.mMaxProgresstime = 20; - this.lEUt = (long) (fluidAmountToConsume * steam_output_multiplier * efficiency); - this.mEfficiencyIncrease = 80; - - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - private int useWater(float input) { - water = water + input; - int usage = (int) water; - water = water - usage; - return usage; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (this.lEUt > 0) { - int tGeneratedEU = (int) (this.lEUt * 2L * this.mEfficiency / 10000L); // APPROXIMATELY how much steam to - // generate. - if (tGeneratedEU > 0) { - - if (superheated) tGeneratedEU /= 2; // We produce half as much superheated steam if necessary - - int distilledConsumed = useWater(tGeneratedEU / 160f); // how much distilled water to consume - // tGeneratedEU = distilledConsumed * 160; // EXACTLY how much steam to generate, producing a perfect - // 1:160 ratio with distilled water consumption - - FluidStack distilledStack = GT_ModHandler.getDistilledWater(distilledConsumed); - if (depleteInput(distilledStack)) // Consume the distilled water - { - if (superheated) { - addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", tGeneratedEU)); // Generate - // superheated - // steam - } else { - addOutput(GT_ModHandler.getSteam(tGeneratedEU)); // Generate regular steam - } - } else { - GT_Log.exp.println(this.mName + " had no more Distilled water!"); - explodeMultiblock(); // Generate crater - } - } - return true; - } - return true; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - private void onCasingAdded() { - mCasingAmount++; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mOutputColdFluidHatch = null; - mInputHotFluidHatch = null; - mCasingAmount = 0; - return checkPiece(STRUCTURE_PIECE_MAIN, 2, 5, 0) && mCasingAmount >= 90 && mMaintenanceHatches.size() == 1; - } - - public boolean addColdFluidOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - mOutputColdFluidHatch = (GT_MetaTileEntity_Hatch_Output) aMetaTileEntity; - return true; - } - return false; - } - - public boolean addHotFluidInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = getRecipeMap(); - mInputHotFluidHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - return true; - } - return false; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_Adv_HeatExchanger(this.mName); - } - - @Override - public boolean isGivingInformation() { - return super.isGivingInformation(); - } - - @Override - public String[] getExtraInfoData() { - return new String[] { - StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime / 20) - + EnumChatFormatting.RESET - + " s / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime / 20) - + EnumChatFormatting.RESET - + " s", - StatCollector.translateToLocal("GT5U.multiblock.usage") + " " - + StatCollector.translateToLocal("GT5U.LHE.steam") - + ": " - + (superheated ? EnumChatFormatting.RED : EnumChatFormatting.YELLOW) - + GT_Utility.formatNumbers(superheated ? -2 * lEUt : -lEUt) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " - + EnumChatFormatting.RED - + (getIdealStatus() - getRepairStatus()) - + EnumChatFormatting.RESET - + " " - + StatCollector.translateToLocal("GT5U.multiblock.efficiency") - + ": " - + EnumChatFormatting.YELLOW - + mEfficiency / 100.0F - + EnumChatFormatting.RESET - + " %", - StatCollector.translateToLocal("GT5U.LHE.superheated") + ": " - + (superheated ? EnumChatFormatting.RED : EnumChatFormatting.BLUE) - + superheated - + EnumChatFormatting.RESET, - StatCollector.translateToLocal("GT5U.LHE.superheated") + " " - + StatCollector.translateToLocal("GT5U.LHE.threshold") - + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(superheated_threshold) - + EnumChatFormatting.RESET }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 5, 0); - } - - @Override - public String getMachineType() { - return "Heat Exchanger"; - } - - @Override - public int getMaxParallelRecipes() { - return 0; - } - - private static Block sFrame; - - public static Block getFrame() { - if (sFrame == null) { - sFrame = BlockBaseModular.getMaterialBlock(ALLOY.TALONITE, BlockTypes.FRAME); - } - return sFrame; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Implosion.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Implosion.java deleted file mode 100644 index a2bb155809..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_Implosion.java +++ /dev/null @@ -1,177 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.GregTech_API.sBlockCasings4; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.item.ItemStack; - -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntity_Adv_Implosion - extends GregtechMeta_MultiBlockBase { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_Adv_Implosion(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_Adv_Implosion(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_Adv_Implosion(this.mName); - } - - @Override - public String getMachineType() { - return "Implosion Compressor"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Factory Grade Advanced Implosion Compressor") - .addInfo("Speed: +100% | EU Usage: 100% | Parallel: ((Tier/2)+1)") - .addInfo("Constructed exactly the same as a normal Implosion Compressor") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front center") - .addCasingInfoMin("Robust TungstenSteel Casing", 10, false) - .addInputBus("Any casing", 1) - .addOutputBus("Any casing", 1) - .addEnergyHatch("Any casing", 1) - .addMaintenanceHatch("Any casing", 1) - .addMufflerHatch("Any casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - ofChain( - buildHatchAdder(GregtechMetaTileEntity_Adv_Implosion.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(48) - .dot(1) - .build(), - onElementPass(x -> ++x.mCasing, ofBlock(sBlockCasings4, 0)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 10 && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAAdvancedImplosionActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAAdvancedImplosion; - } - - @Override - protected int getCasingTextureId() { - return 48; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.implosionRecipes; - } - - @Override - public int getRecipeCatalystPriority() { - return -1; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 2F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.RANDOM_EXPLODE; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiAdvImplosion; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public int getMaxParallelRecipes() { - return (GT_Utility.getTier(this.getMaxInputVoltage()) / 2 + 1); - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java new file mode 100644 index 0000000000..ad351caf55 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvDistillationTower.java @@ -0,0 +1,504 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.fluid.IFluidStore; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.MTEHatchOutputME; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEAdvDistillationTower extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private Mode mMode = Mode.DistillationTower; + private boolean mUpgraded = false; + + protected static final String STRUCTURE_PIECE_BASE = "base"; + protected static final String STRUCTURE_PIECE_LAYER = "layer"; + protected static final String STRUCTURE_PIECE_LAYER_HINT = "layerHint"; + protected static final String STRUCTURE_PIECE_TOP_HINT = "topHint"; + + protected final List> mOutputHatchesByLayer = new ArrayList<>(); + protected int mHeight; + protected int mCasing; + protected boolean mTopLayerFound; + + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEAdvDistillationTower(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEAdvDistillationTower(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAdvDistillationTower(this.mName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + IHatchElement layeredOutputHatch = OutputHatch + .withCount(MTEAdvDistillationTower::getCurrentLayerOutputHatchCount) + .withAdder(MTEAdvDistillationTower::addLayerOutputHatch); + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape(STRUCTURE_PIECE_BASE, transpose(new String[][] { { "b~b", "bbb", "bbb" }, })) + .addShape(STRUCTURE_PIECE_LAYER, transpose(new String[][] { { "lll", "lcl", "lll" }, })) + .addShape(STRUCTURE_PIECE_LAYER_HINT, transpose(new String[][] { { "lll", "l-l", "lll" }, })) + .addShape(STRUCTURE_PIECE_TOP_HINT, transpose(new String[][] { { "ttt", "ttt", "ttt" }, })) + .addElement( + 'b', + ofChain( + buildHatchAdder(MTEAdvDistillationTower.class) + .atLeast(Energy, OutputBus, InputHatch, InputBus, Maintenance) + .disallowOnly(ForgeDirection.UP) + .casingIndex(getCasingTextureId()) + .dot(1) + .build(), + ofBlock(GregTechAPI.sBlockCasings4, 1))) + .addElement( + 'l', + ofChain( + buildHatchAdder(MTEAdvDistillationTower.class).atLeast(layeredOutputHatch, Energy, Maintenance) + .disallowOnly(ForgeDirection.UP, ForgeDirection.DOWN) + .casingIndex(getCasingTextureId()) + .dot(2) + .build(), + ofHatchAdder(MTEAdvDistillationTower::addMufflerToMachineList, getCasingTextureId(), 3), + ofBlock(GregTechAPI.sBlockCasings4, 1))) + .addElement( + 'c', + ofChain( + onElementPass( + MTEAdvDistillationTower::onTopLayerFound, + ofHatchAdder(MTEAdvDistillationTower::addMufflerToMachineList, getCasingTextureId(), 3)), + onElementPass( + MTEAdvDistillationTower::onTopLayerFound, + ofHatchAdder(MTEAdvDistillationTower::addOutputToMachineList, getCasingTextureId(), 3)), + onElementPass( + MTEAdvDistillationTower::onTopLayerFound, + ofHatchAdder( + MTEAdvDistillationTower::addMaintenanceToMachineList, + getCasingTextureId(), + 3)), + onElementPass(MTEAdvDistillationTower::onTopLayerFound, ofBlock(GregTechAPI.sBlockCasings4, 1)), + isAir())) + .addElement( + 't', + buildHatchAdder(MTEAdvDistillationTower.class).atLeast(layeredOutputHatch, Muffler) + .disallowOnly(ForgeDirection.DOWN) + .casingIndex(getCasingTextureId()) + .dot(2) + .buildAndChain(GregTechAPI.sBlockCasings4, 1)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + protected int getCurrentLayerOutputHatchCount() { + return mOutputHatchesByLayer.size() < mHeight || mHeight <= 0 ? 0 + : mOutputHatchesByLayer.get(mHeight - 1) + .size(); + } + + protected boolean addLayerOutputHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null || aTileEntity.isDead() + || !(aTileEntity.getMetaTileEntity() instanceof MTEHatchOutput tHatch)) return false; + while (mOutputHatchesByLayer.size() < mHeight) mOutputHatchesByLayer.add(new ArrayList<>()); + tHatch.updateTexture(aBaseCasingIndex); + return mOutputHatchesByLayer.get(mHeight - 1) + .add(tHatch) && mOutputHatches.add(tHatch); + } + + protected void onTopLayerFound() { + mTopLayerFound = true; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Advanced Distillation Tower") + .addInfo("Use 85% less energy in distillery mode") + .addInfo("250%/100% faster in DT/distillery mode") + .addInfo("Right click the controller with screwdriver to change mode.") + .addInfo("Max parallel dictated by tower tier and mode") + .addInfo("DTower Mode: T1=4, T2=12") + .addInfo("Distillery Mode: Tower Tier * (4*InputTier)") + .addInfo("Distillery Mode require a full height tower") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .addCasingInfoMin("Clean Stainless Steel Machine Casing", 7, false) + .addInputBus("Bottom Casing", 1) + .addOutputBus("Bottom Casing", 1) + .addInputHatch("Bottom Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addOutputHatch("One per layer except bottom", 2) + .addMufflerHatch("Top Casing", 3) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 1, 0, 0); + int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height + for (int i = 1; i < tTotalHeight - 1; i++) { + buildPiece(STRUCTURE_PIECE_LAYER_HINT, stackSize, hintsOnly, 1, i, 0); + } + buildPiece(STRUCTURE_PIECE_TOP_HINT, stackSize, hintsOnly, 1, tTotalHeight - 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + mHeight = 0; + int built = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 1, 0, 0, elementBudget, env, false, true); + if (built >= 0) return built; + int tTotalHeight = Math.min(12, stackSize.stackSize + 2); // min 2 output layer, so at least 1 + 2 height + for (int i = 1; i < tTotalHeight - 1; i++) { + mHeight = i; + built = survivialBuildPiece( + STRUCTURE_PIECE_LAYER_HINT, + stackSize, + 1, + i, + 0, + elementBudget, + env, + false, + true); + if (built >= 0) return built; + } + mHeight = tTotalHeight - 1; + return survivialBuildPiece( + STRUCTURE_PIECE_TOP_HINT, + stackSize, + 1, + tTotalHeight - 1, + 0, + elementBudget, + env, + false, + true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + // reset + mOutputHatchesByLayer.forEach(List::clear); + mHeight = 1; + mTopLayerFound = false; + + // check base + if (!checkPiece(STRUCTURE_PIECE_BASE, 1, 0, 0)) return false; + + // check each layer + while (mHeight < 12) { + if (!checkPiece(STRUCTURE_PIECE_LAYER, 1, mHeight, 0)) { + return false; + } + if (mOutputHatchesByLayer.size() < mHeight || mOutputHatchesByLayer.get(mHeight - 1) + .isEmpty()) + // layer without output hatch + return false; + if (mTopLayerFound || !mMufflerHatches.isEmpty()) { + break; + } + // not top + mHeight++; + } + boolean check = mTopLayerFound && mHeight >= 2 && checkHatch(); + if (check && mHeight < 11) { + // force the mode to DT if not in full height + mMode = Mode.DistillationTower; + mLastRecipe = null; + } + return check; + } + + @Override + public RecipeMap getRecipeMap() { + return mMode.getRecipeMap(); + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(RecipeMaps.distilleryRecipes, RecipeMaps.distillationTowerRecipes); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + // don't rotate a freaking tower, it won't work + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + if (this.mMode == Mode.Distillery) + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiAdvDistillationTower_ModeDistillery; + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiAdvDistillationTower_ModeDT; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setByte("mMode", (byte) mMode.ordinal()); + aNBT.setBoolean("mUpgraded", mUpgraded); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mMode = Mode.values()[aNBT.getByte("mMode")]; + mUpgraded = aNBT.getBoolean("mUpgraded"); + super.loadNBTData(aNBT); + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (mHeight < 11) { + PlayerUtils.messagePlayer(aPlayer, "Cannot switch mode if not in full height."); + return; + } + mMode = mMode.next(); + PlayerUtils.messagePlayer(aPlayer, "Now running in " + mMode + " Mode."); + mLastRecipe = null; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public boolean addOutput(FluidStack aLiquid) { + if (aLiquid == null) return false; + FluidStack copiedFluidStack = aLiquid.copy(); + for (List hatches : mOutputHatchesByLayer) { + if (dumpFluid(hatches, copiedFluidStack, true)) return true; + } + for (List hatches : mOutputHatchesByLayer) { + if (dumpFluid(hatches, copiedFluidStack, false)) return true; + } + return false; + } + + @Override + protected void addFluidOutputs(FluidStack[] mOutputFluids2) { + if (mMode == Mode.DistillationTower) { + // dt mode + for (int i = 0; i < mOutputFluids2.length && i < mOutputHatchesByLayer.size(); i++) { + FluidStack tStack = mOutputFluids2[i].copy(); + if (!dumpFluid(mOutputHatchesByLayer.get(i), tStack, true)) + dumpFluid(mOutputHatchesByLayer.get(i), tStack, false); + } + } else { + // distillery mode + for (FluidStack outputFluidStack : mOutputFluids2) { + addOutput(outputFluidStack); + } + } + } + + @Override + public List getFluidOutputSlots(FluidStack[] toOutput) { + return getFluidOutputSlotsByLayer(toOutput, mOutputHatchesByLayer); + } + + @Override + public String getMachineType() { + return "Distillery, Distillation Tower"; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + protected void setupProcessingLogic(ProcessingLogic logic) { + super.setupProcessingLogic(logic); + logic.setEuModifier(mMode == Mode.Distillery ? 0.15F : 1F); + logic.setSpeedBonus(mMode == Mode.Distillery ? 1F / 2F : 1F / 3.5F); + } + + @Override + public int getMaxParallelRecipes() { + return switch (mMode) { + case DistillationTower -> getTierOfTower() == 1 ? 4 : getTierOfTower() == 2 ? 12 : 0; + case Distillery -> getTierOfTower() * (4 * GTUtility.getTier(this.getMaxInputVoltage())); + default -> 0; + }; + } + + private int getTierOfTower() { + return mUpgraded ? 2 : 1; + } + + @Override + protected IIconContainer getActiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; + } + + @Override + protected int getCasingTextureId() { + return 49; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aTick % 20 == 0 && !mUpgraded) { + ItemStack aGuiStack = this.getControllerSlot(); + if (aGuiStack != null) { + if (GTUtility.areStacksEqual(aGuiStack, GregtechItemList.Distillus_Upgrade_Chip.get(1))) { + this.mUpgraded = true; + mInventory[1] = ItemUtils.depleteStack(aGuiStack); + } + } + } + } + + @Override + public boolean canDumpFluidToME() { + // All fluids can be dumped to ME only if each layer contains a ME Output Hatch. + return this.mOutputHatchesByLayer.stream() + .allMatch( + tLayerOutputHatches -> tLayerOutputHatches.stream() + .anyMatch(tHatch -> (tHatch instanceof MTEHatchOutputME tMEHatch) && (tMEHatch.canAcceptFluid()))); + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + aNBT.setBoolean("mUpgraded", mUpgraded); + super.setItemNBT(aNBT); + } + + @Override + public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { + super.addAdditionalTooltipInformation(stack, tooltip); + NBTTagCompound aNBT = stack.getTagCompound(); + if (aNBT != null && aNBT.hasKey("mUpgraded")) { + tooltip.add(StatCollector.translateToLocal("tooltip.large_distill_tower.upgraded")); + } + } + + private enum Mode { + + DistillationTower(RecipeMaps.distillationTowerRecipes), + Distillery(RecipeMaps.distilleryRecipes),; + + static final Mode[] VALUES = values(); + private final RecipeMap recipeMap; + + Mode(RecipeMap recipeMap) { + this.recipeMap = recipeMap; + } + + public RecipeMap getRecipeMap() { + return recipeMap; + } + + public Mode next() { + return VALUES[(ordinal() + 1) % VALUES.length]; + } + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("mode", mMode.ordinal()); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector + .translateToLocal("GT5U.GTPP_MULTI_ADV_DISTILLATION_TOWER.mode." + tag.getInteger("mode")) + + EnumChatFormatting.RESET); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvEBF.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvEBF.java new file mode 100644 index 0000000000..63aec37990 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvEBF.java @@ -0,0 +1,323 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.Objects; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTEHatchCustomFluidBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEAdvEBF extends GTPPMultiBlockBase implements ISurvivalConstructable { + + public static int CASING_TEXTURE_ID; + public static String mHotFuelName = "Blazing Pyrotheum"; + public static String mCasingName = "Volcanus Casing"; + public static String mHatchName = "Pyrotheum Hatch"; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + private int mCasing; + private final ArrayList mPyrotheumHatches = new ArrayList<>(); + + private HeatingCoilLevel mHeatingCapacity = HeatingCoilLevel.None; + + public MTEAdvEBF(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 11); + } + + public MTEAdvEBF(String aName) { + super(aName); + CASING_TEXTURE_ID = TAE.getIndexFromPage(2, 11); + } + + @Override + public String getMachineType() { + return "Blast Furnace"; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAdvEBF(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Factory Grade Advanced Blast Furnace") + .addInfo("Speed: +120% | EU Usage: 90% | Parallel: 8") + .addInfo("Consumes 10L of " + mHotFuelName + " per second during operation") + .addInfo("Constructed exactly the same as a normal EBF") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .addController("Bottom center") + .addCasingInfoMin(mCasingName, 8, false) + .addInputHatch("Any Casing", 1) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addOtherStructurePart(mHatchName, "Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public String[] getExtraInfoData() { + return new String[] { StatCollector.translateToLocal("GT5U.EBF.heat") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mHeatingCapacity.getHeat()) + + EnumChatFormatting.RESET + + " K" }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "HHH", "H-H", "HHH" }, + { "C~C", "CCC", "CCC" }, })) + .addElement( + 'C', + ofChain( + buildHatchAdder(MTEAdvEBF.class).adder(MTEAdvEBF::addPyrotheumHatch) + .hatchId(968) + .shouldReject(x -> !x.mPyrotheumHatches.isEmpty()) + .casingIndex(CASING_TEXTURE_ID) + .dot(1) + .build(), + buildHatchAdder(MTEAdvEBF.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) + .casingIndex(CASING_TEXTURE_ID) + .dot(1) + .build(), + onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 11)))) + .addElement('H', ofCoil(MTEAdvEBF::setCoilLevel, MTEAdvEBF::getCoilLevel)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 3, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + mPyrotheumHatches.clear(); + setCoilLevel(HeatingCoilLevel.None); + return checkPiece(mName, 1, 3, 0) && mCasing >= 8 && getCoilLevel() != HeatingCoilLevel.None && checkHatch(); + } + + @Override + public boolean checkHatch() { + return super.checkHatch() && !mPyrotheumHatches.isEmpty(); + } + + private boolean addPyrotheumHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchCustomFluidBase && aMetaTileEntity.getBaseMetaTileEntity() + .getMetaTileID() == 968) { + return addToMachineListInternal(mPyrotheumHatches, aTileEntity, aBaseCasingIndex); + } + } + return false; + } + + @Override + public void updateSlots() { + for (MTEHatchCustomFluidBase tHatch : filterValidMTEs(mPyrotheumHatches)) tHatch.updateSlots(); + super.updateSlots(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAAdvancedEBFActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAAdvancedEBF; + } + + @Override + protected int getCasingTextureId() { + return CASING_TEXTURE_ID; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.blastFurnaceRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + return recipe.mSpecialValue <= getCoilLevel().getHeat() ? CheckRecipeResultRegistry.SUCCESSFUL + : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); + } + + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).setHeatOC(true) + .setHeatDiscount(true) + .setRecipeHeat(recipe.mSpecialValue) + .setMachineHeat((int) getCoilLevel().getHeat()); + } + }.setSpeedBonus(1F / 2.2F) + .setEuModifier(0.9F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiAdvEBF; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + // Try dry Pyrotheum after all other logic + if (this.mStartUpCheck < 0) { + if (this.mMaxProgresstime > 0 && this.mProgresstime != 0 || this.getBaseMetaTileEntity() + .hasWorkJustBeenEnabled()) { + if (aTick % 20 == 0 || this.getBaseMetaTileEntity() + .hasWorkJustBeenEnabled()) { + if (!this.depleteInputFromRestrictedHatches(this.mPyrotheumHatches, 10)) { + this.causeMaintenanceIssue(); + this.stopMachine( + ShutDownReasonRegistry + .outOfFluid(Objects.requireNonNull(FluidUtils.getFluidStack("pyrotheum", 10)))); + } + } + } + } + } + + @Override + public int getMaxParallelRecipes() { + return 8; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + inputSeparation = !inputSeparation; + aPlayer.addChatMessage( + new ChatComponentTranslation( + inputSeparation ? "interaction.separateBusses.enabled" : "interaction.separateBusses.disabled")); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { + inputSeparation = aNBT.getBoolean("isBussesSeparate"); + } + } + + public HeatingCoilLevel getCoilLevel() { + return mHeatingCapacity; + } + + public void setCoilLevel(HeatingCoilLevel aCoilLevel) { + mHeatingCapacity = aCoilLevel; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvFusionMk4.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvFusionMk4.java new file mode 100644 index 0000000000..eed5159271 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvFusionMk4.java @@ -0,0 +1,200 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; + +import java.lang.reflect.Method; + +import net.minecraft.block.Block; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.TAE; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.AdvancedFusionOverclockDescriber; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.multi.MTEFusionComputer; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEAdvFusionMk4 extends MTEFusionComputer { + + public static final Method mUpdateHatchTexture; + + static { + mUpdateHatchTexture = ReflectionUtils.getMethod(MTEHatch.class, "updateTexture", int.class); + } + + public MTEAdvFusionMk4(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEAdvFusionMk4(String aName) { + super(aName); + } + + @Override + protected OverclockDescriber createOverclockDescriber() { + return new AdvancedFusionOverclockDescriber((byte) tier(), capableStartupCanonical()); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fusion Reactor") + .addInfo("HARNESSING THE POWER OF A BLUE GIANT") + .addInfo("Controller block for the Fusion Reactor Mk IV") + .addInfo("131072EU/t and 320M EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo("Performs 4/4 overclocks") + .addSeparator() + .beginStructureBlock(15, 3, 15, false) + .addController("See diagram when placed") + .addCasingInfoMin("Fusion Machine Casings MK III", 79, false) + .addStructureInfo("Cover the coils with casing") + .addOtherStructurePart("Advanced Fusion Coils", "Center part of the ring") + .addEnergyHatch("1-16, Specified casings", 2) + .addInputHatch("2-16, Specified casings", 1) + .addOutputHatch("1-16, Specified casings", 3) + .addStructureInfo("ALL Hatches must be UHV or better") + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public int tier() { + return 9; + } + + @Override + public long maxEUStore() { + return (640010000L * 4) * (Math.min(16, this.mEnergyHatches.size())) / 8L; + } + + @Override + public long capableStartupCanonical() { + return 5_120_000_000L; + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAdvFusionMk4(mName); + } + + @Override + public Block getCasing() { + return getFusionCoil(); + } + + @Override + public int getCasingMeta() { + return 12; + } + + @Override + public Block getFusionCoil() { + return ModBlocks.blockCasings3Misc; + } + + @Override + public int getFusionCoilMeta() { + return 13; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return super.createProcessingLogic().enablePerfectOverclock(); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { + new GTRenderedTexture( + Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS, + Dyes.getModulation(-1, Dyes._NULL.mRGBa)), + TextureFactory.builder() + .addIcon(this.getIconOverlay()) + .extFacing() + .build() }; + } else if (!aActive) { + return new ITexture[] { new GTRenderedTexture( + Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS, + Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; + } else { + return new ITexture[] { new GTRenderedTexture( + TexturesGtBlock.TEXTURE_CASING_FUSION_CASING_ULTRA, + Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; + } + } + + @Override + public ITexture getTextureOverlay() { + return new GTRenderedTexture( + this.getBaseMetaTileEntity() + .isActive() ? TexturesGtBlock.Casing_Machine_Screen_3 : TexturesGtBlock.Casing_Machine_Screen_1); + } + + public IIconContainer getIconOverlay() { + return this.getBaseMetaTileEntity() + .isActive() ? TexturesGtBlock.Casing_Machine_Screen_3 : TexturesGtBlock.Casing_Machine_Screen_1; + } + + @Override + public boolean turnCasingActive(final boolean status) { + try { + if (this.mEnergyHatches != null) { + for (final MTEHatchEnergy hatch : this.mEnergyHatches) { + mUpdateHatchTexture.invoke(hatch, (status ? TAE.getIndexFromPage(2, 14) : 53)); + } + } + if (this.mOutputHatches != null) { + for (final MTEHatchOutput hatch2 : this.mOutputHatches) { + mUpdateHatchTexture.invoke(hatch2, (status ? TAE.getIndexFromPage(2, 14) : 53)); + } + } + if (this.mInputHatches != null) { + for (final MTEHatchInput hatch3 : this.mInputHatches) { + mUpdateHatchTexture.invoke(hatch3, (status ? TAE.getIndexFromPage(2, 14) : 53)); + } + } + } catch (Throwable t) { + return false; + } + return true; + } + + @Override + public String[] getInfoData() { + String tier = "IV"; + float plasmaOut = 0; + int powerRequired = 0; + if (this.mLastRecipe != null) { + powerRequired = this.mLastRecipe.mEUt; + if (this.mLastRecipe.getFluidOutput(0) != null) { + plasmaOut = (float) this.mLastRecipe.getFluidOutput(0).amount / (float) this.mLastRecipe.mDuration; + } + } + + return new String[] { "Fusion Reactor MK " + tier, "EU Required: " + powerRequired + "EU/t", + "Stored EU: " + mEUStore + " / " + maxEUStore(), "Plasma Output: " + plasmaOut + "L/t" }; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvFusionMk5.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvFusionMk5.java new file mode 100644 index 0000000000..9ed65ffa08 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvFusionMk5.java @@ -0,0 +1,200 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; + +import java.lang.reflect.Method; + +import net.minecraft.block.Block; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.TAE; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.objects.overclockdescriber.OverclockDescriber; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.AdvancedFusionOverclockDescriber; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.multi.MTEFusionComputer; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEAdvFusionMk5 extends MTEFusionComputer { + + public static final Method mUpdateHatchTexture; + + static { + mUpdateHatchTexture = ReflectionUtils.getMethod(MTEHatch.class, "updateTexture", int.class); + } + + public MTEAdvFusionMk5(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEAdvFusionMk5(String aName) { + super(aName); + } + + @Override + protected OverclockDescriber createOverclockDescriber() { + return new AdvancedFusionOverclockDescriber((byte) tier(), capableStartupCanonical()); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fusion Reactor") + .addInfo("HARNESSING THE POWER OF A NEUTRON STAR") + .addInfo("Controller block for the Fusion Reactor Mk V") + .addInfo("524,288EU/t and 1.28B EU capacity per Energy Hatch") + .addInfo("If the recipe has a startup cost greater than the") + .addInfo("number of energy hatches * cap, you can't do it") + .addInfo("Performs 4/4 overclocks") + .addSeparator() + .beginStructureBlock(15, 3, 15, false) + .addController("See diagram when placed") + .addCasingInfoMin("Fusion Machine Casings MK IV", 79, false) + .addStructureInfo("Cover the coils with casing") + .addOtherStructurePart("Advanced Fusion Coils II", "Center part of the ring") + .addEnergyHatch("1-16, Specified casings", 2) + .addInputHatch("2-16, Specified casings", 1) + .addOutputHatch("1-16, Specified casings", 3) + .addStructureInfo("ALL Hatches must be UEV or better") + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public int tier() { + return 10; + } + + @Override + public long maxEUStore() { + return (640010000L * 16) * (Math.min(16, this.mEnergyHatches.size())) / 8L; + } + + @Override + public long capableStartupCanonical() { + return 20_480_000_000L; + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAdvFusionMk5(mName); + } + + @Override + public Block getCasing() { + return getFusionCoil(); + } + + @Override + public int getCasingMeta() { + return 0; + } + + @Override + public Block getFusionCoil() { + return ModBlocks.blockCasings6Misc; + } + + @Override + public int getFusionCoilMeta() { + return 1; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return super.createProcessingLogic().enablePerfectOverclock(); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { + new GTRenderedTexture( + Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS, + Dyes.getModulation(-1, Dyes._NULL.mRGBa)), + TextureFactory.builder() + .addIcon(this.getIconOverlay()) + .extFacing() + .build() }; + } else if (!aActive) { + return new ITexture[] { new GTRenderedTexture( + Textures.BlockIcons.MACHINE_CASING_FUSION_GLASS, + Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; + } else { + return new ITexture[] { new GTRenderedTexture( + TexturesGtBlock.TEXTURE_CASING_FUSION_CASING_HYPER, + Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; + } + } + + @Override + public ITexture getTextureOverlay() { + return new GTRenderedTexture( + this.getBaseMetaTileEntity() + .isActive() ? TexturesGtBlock.Casing_Machine_Screen_Rainbow : TexturesGtBlock.Casing_Machine_Screen_1); + } + + public IIconContainer getIconOverlay() { + return this.getBaseMetaTileEntity() + .isActive() ? TexturesGtBlock.Casing_Machine_Screen_Rainbow : TexturesGtBlock.Casing_Machine_Screen_1; + } + + @Override + public boolean turnCasingActive(final boolean status) { + try { + if (this.mEnergyHatches != null) { + for (final MTEHatchEnergy hatch : this.mEnergyHatches) { + mUpdateHatchTexture.invoke(hatch, (status ? TAE.getIndexFromPage(3, 6) : 53)); + } + } + if (this.mOutputHatches != null) { + for (final MTEHatchOutput hatch2 : this.mOutputHatches) { + mUpdateHatchTexture.invoke(hatch2, (status ? TAE.getIndexFromPage(3, 6) : 53)); + } + } + if (this.mInputHatches != null) { + for (final MTEHatchInput hatch3 : this.mInputHatches) { + mUpdateHatchTexture.invoke(hatch3, (status ? TAE.getIndexFromPage(3, 6) : 53)); + } + } + } catch (Throwable t) { + return false; + } + return true; + } + + @Override + public String[] getInfoData() { + String tier = "V"; + float plasmaOut = 0; + int powerRequired = 0; + if (this.mLastRecipe != null) { + powerRequired = this.mLastRecipe.mEUt; + if (this.mLastRecipe.getFluidOutput(0) != null) { + plasmaOut = (float) this.mLastRecipe.getFluidOutput(0).amount / (float) this.mLastRecipe.mDuration; + } + } + + return new String[] { "Fusion Reactor MK " + tier, "EU Required: " + powerRequired + "EU/t", + "Stored EU: " + mEUStore + " / " + maxEUStore(), "Plasma Output: " + plasmaOut + "L/t" }; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvHeatExchanger.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvHeatExchanger.java new file mode 100644 index 0000000000..0779c03183 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvHeatExchanger.java @@ -0,0 +1,396 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.registries.LHECoolantRegistry; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.block.base.BasicBlock.BlockTypes; +import gtPlusPlus.core.block.base.BlockBaseModular; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEAdvHeatExchanger extends GTPPMultiBlockBase { + + private static final int CASING_INDEX = TAE.getIndexFromPage(1, 12); + private static final String STRUCTURE_PIECE_MAIN = "main"; + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { " ccc ", "cCCCc", "cCCCc", "cCCCc", " ccc " }, + { " ccc ", "cPPPc", "cPPPc", "cPPPc", " ccc " }, { " ccc ", "cPPPc", "cPPPc", "cPPPc", " ccc " }, + { " ccc ", "cPPPc", "cPPPc", "cPPPc", " ccc " }, { " ccc ", "cPPPc", "cPPPc", "cPPPc", " ccc " }, + { " c~c ", "cPPPc", "cPPPc", "cPPPc", " ccc " }, { " hhh ", "hHHHh", "hHHHh", "hHHHh", " hhh " }, + { " f f ", "f f", " ", "f f", " f f " }, + { " f f ", "f f", " ", "f f", " f f " }, })) + .addElement('P', ofBlock(GregTechAPI.sBlockCasings2, 15)) + .addElement('f', ofBlock(getFrame(), 0)) + .addElement( + 'C', + ofChain( + ofHatchAdder(MTEAdvHeatExchanger::addColdFluidOutputToMachineList, CASING_INDEX, 2), + onElementPass(MTEAdvHeatExchanger::onCasingAdded, ofBlock(ModBlocks.blockSpecialMultiCasings, 14)))) + .addElement( + 'H', + ofChain( + ofHatchAdder(MTEAdvHeatExchanger::addHotFluidInputToMachineList, CASING_INDEX, 3), + onElementPass(MTEAdvHeatExchanger::onCasingAdded, ofBlock(ModBlocks.blockSpecialMultiCasings, 14)))) + .addElement( + 'h', + ofChain( + ofHatchAdder(MTEAdvHeatExchanger::addInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEAdvHeatExchanger::addOutputToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEAdvHeatExchanger::addMaintenanceToMachineList, CASING_INDEX, 1), + onElementPass(MTEAdvHeatExchanger::onCasingAdded, ofBlock(ModBlocks.blockSpecialMultiCasings, 14)))) + .addElement( + 'c', + ofChain(onElementPass(MTEAdvHeatExchanger::onCasingAdded, ofBlock(ModBlocks.blockSpecialMultiCasings, 14)))) + .build(); + public static float penalty_per_config = 0.015f; // penalize 1.5% efficiency per circuitry level (1-25) + + private MTEHatchInput mInputHotFluidHatch; + private MTEHatchOutput mOutputColdFluidHatch; + private boolean superheated = false; + private int superheated_threshold = 0; + private float water; + private int mCasingAmount; + + public MTEAdvHeatExchanger(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEAdvHeatExchanger(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the XL Heat Exchanger") + .addInfo("More complicated than a Fusion Reactor. Seriously") + .addInfo("But you know this by now, right?") + .addInfo("Works as fast as 32 Large Heat Exchangers") + .addSeparator() + .addInfo("Inputs are Hot Coolant or Lava") + .addInfo("Outputs Coolant or Pahoehoe Lava and SH Steam/Steam") + .addInfo("Outputs SH Steam if input flow is equal to or above a certain value:") + .addInfo("Hot Coolant: 25,600 L/s, maximum 51,200 L/s, max output 10,240,000 SH Steam/s") + .addInfo("Lava: 32,000 L/s, maximum 64,000 L/s, max output 5,120,000 SH Steam/s") + .addInfo("A circuit in the controller lowers the SH Steam threshold and efficiency") + .addInfo("3.75% reduction and 1.5% efficiency loss per circuit config over 1") + .addSeparator() + .beginStructureBlock(5, 9, 5, false) + .addController("Front bottom") + .addCasingInfoMin("Reinforced Heat Exchanger Casing", 90, false) + .addOtherStructurePart("Tungstensteel Pipe Casing", "Center 3x5x3 (45 blocks)") + .addMaintenanceHatch("Any casing", 1) + .addInputHatch("Hot fluid, bottom center", 2) + .addInputHatch("Distilled water, any bottom layer casing", 1) + .addOutputHatch("Cold fluid, top center", 3) + .addOutputHatch("Steam/SH Steam, any bottom layer casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + superheated = aNBT.getBoolean("superheated"); + super.loadNBTData(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setBoolean("superheated", superheated); + super.saveNBTData(aNBT); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAAdvancedHeatExchangerActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAAdvancedHeatExchanger; + } + + @Override + protected int getCasingTextureId() { + return CASING_INDEX; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> !r.isUpsideDown() && !f.isVerticallyFliped(); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + if (mInputHotFluidHatch.getFluid() == null) return CheckRecipeResultRegistry.SUCCESSFUL; + + int fluidAmountToConsume = mInputHotFluidHatch.getFluidAmount(); // how much fluid is in hatch + + // The XL LHE works as fast as 32 regular LHEs. These are the comments from the original LHE, + // with changes where the values needed to change for the 32x speed multiplier + superheated_threshold = 128000; // default: must have 4000L -> 128000L per second to generate superheated steam + float efficiency = 1f; // default: operate at 100% efficiency with no integrated circuitry + int shs_reduction_per_config = 4800; // reduce threshold 150L -> 4800L per second per circuitry level (1-25) + float steam_output_multiplier = 20f; // default: multiply output by 4 * 10 (boosted x5) + float penalty = 0.0f; // penalty to apply to output based on circuitry level (1-25). + + // Do we have an integrated circuit with a valid configuration? + if (mInventory[1] != null && mInventory[1].getUnlocalizedName() + .startsWith("gt.integrated_circuit")) { + int circuit_config = mInventory[1].getItemDamage(); + if (circuit_config >= 1 && circuit_config <= 25) { + // If so, apply the penalty and reduced threshold. + penalty = (circuit_config - 1) * penalty_per_config; + superheated_threshold -= (shs_reduction_per_config * (circuit_config - 1)); + } + } + + efficiency -= penalty; + + var coolant = LHECoolantRegistry.getCoolant( + mInputHotFluidHatch.getFluid() + .getFluid()); + + if (coolant == null) { + superheated_threshold = 0; + return CheckRecipeResultRegistry.NO_RECIPE; + } else { + steam_output_multiplier *= coolant.steamMultiplier; + superheated_threshold *= coolant.superheatedThreshold; + } + + // set the internal superheated flag if we have enough hot fluid. Used in the onRunningTick method. + this.superheated = fluidAmountToConsume >= superheated_threshold; + + // Don't consume too much hot fluid per second, maximum is 2x SH threshold. + fluidAmountToConsume = Math.min(fluidAmountToConsume, superheated_threshold * 2); + + mInputHotFluidHatch.drain(fluidAmountToConsume, true); + mOutputColdFluidHatch.fill(coolant.getColdFluid(fluidAmountToConsume), true); + + this.mMaxProgresstime = 20; + this.lEUt = (long) (fluidAmountToConsume * steam_output_multiplier * efficiency); + this.mEfficiencyIncrease = 80; + + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + private int useWater(float input) { + water = water + input; + int usage = (int) water; + water = water - usage; + return usage; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (this.lEUt > 0) { + int tGeneratedEU = (int) (this.lEUt * 2L * this.mEfficiency / 10000L); // APPROXIMATELY how much steam to + // generate. + if (tGeneratedEU > 0) { + + if (superheated) tGeneratedEU /= 2; // We produce half as much superheated steam if necessary + + int distilledConsumed = useWater(tGeneratedEU / 160f); // how much distilled water to consume + // tGeneratedEU = distilledConsumed * 160; // EXACTLY how much steam to generate, producing a perfect + // 1:160 ratio with distilled water consumption + + FluidStack distilledStack = GTModHandler.getDistilledWater(distilledConsumed); + if (depleteInput(distilledStack)) // Consume the distilled water + { + if (superheated) { + addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", tGeneratedEU)); // Generate + // superheated + // steam + } else { + addOutput(GTModHandler.getSteam(tGeneratedEU)); // Generate regular steam + } + } else { + GTLog.exp.println(this.mName + " had no more Distilled water!"); + explodeMultiblock(); // Generate crater + } + } + return true; + } + return true; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + private void onCasingAdded() { + mCasingAmount++; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mOutputColdFluidHatch = null; + mInputHotFluidHatch = null; + mCasingAmount = 0; + return checkPiece(STRUCTURE_PIECE_MAIN, 2, 5, 0) && mCasingAmount >= 90 && mMaintenanceHatches.size() == 1; + } + + public boolean addColdFluidOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchOutput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + mOutputColdFluidHatch = (MTEHatchOutput) aMetaTileEntity; + return true; + } + return false; + } + + public boolean addHotFluidInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = getRecipeMap(); + mInputHotFluidHatch = (MTEHatchInput) aMetaTileEntity; + return true; + } + return false; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAdvHeatExchanger(this.mName); + } + + @Override + public boolean isGivingInformation() { + return super.isGivingInformation(); + } + + @Override + public String[] getExtraInfoData() { + return new String[] { + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + StatCollector.translateToLocal("GT5U.multiblock.usage") + " " + + StatCollector.translateToLocal("GT5U.LHE.steam") + + ": " + + (superheated ? EnumChatFormatting.RED : EnumChatFormatting.YELLOW) + + GTUtility.formatNumbers(superheated ? -2 * lEUt : -lEUt) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + StatCollector.translateToLocal("GT5U.LHE.superheated") + ": " + + (superheated ? EnumChatFormatting.RED : EnumChatFormatting.BLUE) + + superheated + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("GT5U.LHE.superheated") + " " + + StatCollector.translateToLocal("GT5U.LHE.threshold") + + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(superheated_threshold) + + EnumChatFormatting.RESET }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 2, 5, 0); + } + + @Override + public String getMachineType() { + return "Heat Exchanger"; + } + + @Override + public int getMaxParallelRecipes() { + return 0; + } + + private static Block sFrame; + + public static Block getFrame() { + if (sFrame == null) { + sFrame = BlockBaseModular.getMaterialBlock(MaterialsAlloy.TALONITE, BlockTypes.FRAME); + } + return sFrame; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvImplosionCompressor.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvImplosionCompressor.java new file mode 100644 index 0000000000..109022932d --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/MTEAdvImplosionCompressor.java @@ -0,0 +1,176 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.GregTechAPI.sBlockCasings4; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.item.ItemStack; + +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEAdvImplosionCompressor extends GTPPMultiBlockBase { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEAdvImplosionCompressor(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEAdvImplosionCompressor(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEAdvImplosionCompressor(this.mName); + } + + @Override + public String getMachineType() { + return "Implosion Compressor"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Factory Grade Advanced Implosion Compressor") + .addInfo("Speed: +100% | EU Usage: 100% | Parallel: ((Tier/2)+1)") + .addInfo("Constructed exactly the same as a normal Implosion Compressor") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front center") + .addCasingInfoMin("Robust TungstenSteel Casing", 10, false) + .addInputBus("Any casing", 1) + .addOutputBus("Any casing", 1) + .addEnergyHatch("Any casing", 1) + .addMaintenanceHatch("Any casing", 1) + .addMufflerHatch("Any casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + ofChain( + buildHatchAdder(MTEAdvImplosionCompressor.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(48) + .dot(1) + .build(), + onElementPass(x -> ++x.mCasing, ofBlock(sBlockCasings4, 0)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 10 && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAAdvancedImplosionActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAAdvancedImplosion; + } + + @Override + protected int getCasingTextureId() { + return 48; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.implosionRecipes; + } + + @Override + public int getRecipeCatalystPriority() { + return -1; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 2F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.RANDOM_EXPLODE; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiAdvImplosion; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public int getMaxParallelRecipes() { + return (GTUtility.getTier(this.getMaxInputVoltage()) / 2 + 1); + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamCentrifuge.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamCentrifuge.java deleted file mode 100644 index 644893964b..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamCentrifuge.java +++ /dev/null @@ -1,419 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.GregTech_API.*; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorEvgenWarGold; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.common.blocks.GT_Block_Casings1; -import gregtech.common.blocks.GT_Block_Casings2; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_SteamMultiBase; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_SteamCentrifuge - extends GregtechMeta_SteamMultiBase implements ISurvivalConstructable { - - public GregtechMetaTileEntity_SteamCentrifuge(String aName) { - super(aName); - } - - public GregtechMetaTileEntity_SteamCentrifuge(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_SteamCentrifuge(this.mName); - } - - @Override - public String getMachineType() { - return "Centrifuge"; - } - - private static final String STRUCTUR_PIECE_MAIN = "main"; - - private IStructureDefinition STRUCTURE_DEFINITION = null; - // spotless:off - private final String[][] shape = new String[][] { - { " AAA ", "AAAAA", "AAAAA", "AAAAA", " AAA " }, - { " ", " ABA ", " BDB ", " ABA ", " " }, - { " A ", " ACA ", "ACDCA", " ACA ", " A " }, - { " A~A ", "AABAA", "ABDBA", "AABAA", " AAA " }, - { " AAA ", "AAAAA", "AAAAA", "AAAAA", " AAA " } }; - //spotless:on - - private static final int HORIZONTAL_OFF_SET = 2; - private static final int VERTICAL_OFF_SET = 3; - private static final int DEPTH_OFF_SET = 0; - - private int tierGearBoxCasing = -1; - private int tierPipeCasing = -1; - private int tierFireBoxCasing = -1; - private int tierMachineCasing = -1; - - private int tCountCasing = 0; - - private int tierMachine = 1; - - public int getTierMachineCasing(Block block, int meta) { - if (block == sBlockCasings1 && 10 == meta) { - tCountCasing++; - return 1; - } - if (block == sBlockCasings2 && 0 == meta) { - tCountCasing++; - return 2; - } - return 0; - } - - public static int getTierFireBoxCasing(Block block, int meta) { - if (block == sBlockCasings3 && 13 == meta) return 1; - if (block == sBlockCasings3 && 14 == meta) return 2; - return 0; - } - - public static int getTierGearBoxCasing(Block block, int meta) { - if (block == sBlockCasings2 && 2 == meta) return 1; - if (block == sBlockCasings2 && 3 == meta) return 2; - return 0; - } - - public static int getTierPipeCasing(Block block, int meta) { - if (block == sBlockCasings2 && 12 == meta) return 1; - if (block == sBlockCasings2 && 13 == meta) return 2; - return 0; - } - - protected void updateHatchTexture() { - for (GT_MetaTileEntity_Hatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mOutputHatches) h.updateTexture(getCasingTextureID()); - } - - private int getCasingTextureID() { - if (tierGearBoxCasing == 2 || tierPipeCasing == 2 || tierFireBoxCasing == 2 || tierMachineCasing == 2) - return ((GT_Block_Casings2) GregTech_API.sBlockCasings2).getTextureIndex(0); - return ((GT_Block_Casings1) GregTech_API.sBlockCasings1).getTextureIndex(10); - } - - @Override - public void onValueUpdate(byte aValue) { - tierMachineCasing = aValue; - } - - @Override - public byte getUpdateData() { - return (byte) tierMachineCasing; - } - - @Override - protected GT_RenderedTexture getFrontOverlay() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_CENTRIFUGE); - } - - @Override - protected GT_RenderedTexture getFrontOverlayActive() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_CENTRIFUGE_ACTIVE); - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), - aActive ? getFrontOverlayActive() : getFrontOverlay() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - - STRUCTURE_DEFINITION = StructureDefinition.builder() - - .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) - .addElement( - 'B', - ofBlocksTiered( - GregtechMetaTileEntity_SteamCentrifuge::getTierGearBoxCasing, - ImmutableList.of(Pair.of(sBlockCasings2, 2), Pair.of(sBlockCasings2, 3)), - -1, - (t, m) -> t.tierGearBoxCasing = m, - t -> t.tierGearBoxCasing)) - .addElement( - 'C', - ofBlocksTiered( - GregtechMetaTileEntity_SteamCentrifuge::getTierPipeCasing, - ImmutableList.of(Pair.of(sBlockCasings2, 12), Pair.of(sBlockCasings2, 13)), - -1, - (t, m) -> t.tierPipeCasing = m, - t -> t.tierPipeCasing)) - .addElement( - 'D', - ofBlocksTiered( - GregtechMetaTileEntity_SteamCentrifuge::getTierFireBoxCasing, - ImmutableList.of(Pair.of(sBlockCasings3, 13), Pair.of(sBlockCasings3, 14)), - -1, - (t, m) -> t.tierFireBoxCasing = m, - t -> t.tierFireBoxCasing)) - .addElement( - 'A', - ofChain( - buildSteamInput(GregtechMetaTileEntity_SteamCentrifuge.class).casingIndex(10) - .dot(1) - .build(), - buildHatchAdder(GregtechMetaTileEntity_SteamCentrifuge.class) - .atLeast(SteamHatchElement.InputBus_Steam, SteamHatchElement.OutputBus_Steam, OutputHatch) - .casingIndex(10) - .dot(1) - .buildAndChain(), - ofBlocksTiered( - this::getTierMachineCasing, - ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), - -1, - (t, m) -> t.tierMachineCasing = m, - t -> t.tierMachineCasing))) - .build(); - - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - this.buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (this.mMachine) return -1; - return this.survivialBuildPiece( - STRUCTUR_PIECE_MAIN, - stackSize, - HORIZONTAL_OFF_SET, - VERTICAL_OFF_SET, - DEPTH_OFF_SET, - elementBudget, - env, - false, - true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - tierGearBoxCasing = -1; - tierPipeCasing = -1; - tierFireBoxCasing = -1; - tierMachineCasing = -1; - tCountCasing = 0; - if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; - if (tierGearBoxCasing < 0 && tierPipeCasing < 0 && tierFireBoxCasing < 0 && tierMachineCasing < 0) return false; - if (tierGearBoxCasing == 1 && tierPipeCasing == 1 - && tierFireBoxCasing == 1 - && tierMachineCasing == 1 - && tCountCasing > 60 - && checkHatches()) { - updateHatchTexture(); - tierMachine = 1; - return true; - } - if (tierGearBoxCasing == 2 && tierPipeCasing == 2 - && tierFireBoxCasing == 2 - && tierMachineCasing == 2 - && tCountCasing > 60 - && checkHatches()) { - updateHatchTexture(); - tierMachine = 2; - return true; - } - return false; - } - - private boolean checkHatches() { - return !mSteamInputFluids.isEmpty() && !mSteamInputs.isEmpty() - && !mSteamOutputs.isEmpty() - && !mOutputHatches.isEmpty() - && mInputHatches.isEmpty(); - } - - @Override - public int getMaxParallelRecipes() { - return tierMachine == 1 ? 8 : 16; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.centrifugeRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - if (availableVoltage < recipe.mEUt) { - return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Override - @Nonnull - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return GT_OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); - } - }.setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getTierRecipes() { - return tierMachine == 1 ? 1 : 2; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Steam Centrifuge") - .addInfo("33.3% faster than a single block steam machine would run.") - .addInfo( - "On Tier 1, it uses only 66.6% of the steam/s required compared to what a single block steam machine would use.") - .addInfo("Bronze tier runs recipes up to LV tier") - .addInfo("Steel tier runs recipes up to MV tier") - .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") - .addSeparator() - .beginStructureBlock(5, 5, 5, false) - .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addOutputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addStructureInfo( - EnumChatFormatting.WHITE + "Steam Input Hatch " - + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + " Any casing") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) - .addStructureInfo(EnumChatFormatting.GOLD + "60-65x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") - .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Bronze Gear Box Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "3x" + EnumChatFormatting.GRAY + " Bronze Firebox Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "4x" + EnumChatFormatting.GRAY + " Bronze Pipe Casing") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) - .addStructureInfo( - EnumChatFormatting.GOLD + "60-65x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Steel Gear Box Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "3x" + EnumChatFormatting.GRAY + " Steel Firebox Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "4x" + EnumChatFormatting.GRAY + " Steel Pipe Casing") - .addStructureInfo("") - .toolTipFinisher(AuthorEvgenWarGold); - return tt; - } - - @Override - public String[] getInfoData() { - ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); - info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); - return info.toArray(new String[0]); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - - currenttip.add( - StatCollector.translateToLocal("GTPP.machines.tier") + ": " - + EnumChatFormatting.YELLOW - + tag.getInteger("tierMachine") - + EnumChatFormatting.RESET); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " - + EnumChatFormatting.BLUE - + tag.getInteger("parallel") - + EnumChatFormatting.RESET); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("tierMachine", tierMachine); - tag.setInteger("parallel", getMaxParallelRecipes()); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("tierMachine", tierMachine); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - tierMachine = aNBT.getInteger("tierMachine"); - } - - @SideOnly(Side.CLIENT) - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_STEAM_CENTRIFUGE_LOOP.resourceLocation; - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamCompressor.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamCompressor.java deleted file mode 100644 index f2debf5981..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamCompressor.java +++ /dev/null @@ -1,352 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.GregTech_API.sBlockCasings1; -import static gregtech.api.GregTech_API.sBlockCasings2; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.common.blocks.GT_Block_Casings1; -import gregtech.common.blocks.GT_Block_Casings2; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_SteamMultiBase; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_SteamCompressor - extends GregtechMeta_SteamMultiBase implements ISurvivalConstructable { - - public GregtechMetaTileEntity_SteamCompressor(String aName) { - super(aName); - } - - public GregtechMetaTileEntity_SteamCompressor(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { - return new GregtechMetaTileEntity_SteamCompressor(this.mName); - } - - @Override - public String getMachineType() { - return "Compressor"; - } - - private static final String STRUCTUR_PIECE_MAIN = "main"; - - private IStructureDefinition STRUCTURE_DEFINITION = null; - - // spotless:off - private final String[][] shape = new String[][] { - { "CCC", "CCC", "CCC", "CCC" }, - { "C~C", "C-C", "C-C", "CCC" }, - { "CCC", "CCC", "CCC", "CCC" } }; - //spotless:on - - private static final int HORIZONTAL_OFF_SET = 1; - private static final int VERTICAL_OFF_SET = 1; - private static final int DEPTH_OFF_SET = 0; - - private int mCountCasing = 0; - - private int tierMachine = 1; - - private int tierMachineCasing = -1; - - public int getTierMachineCasing(Block block, int meta) { - if (block == sBlockCasings1 && 10 == meta) { - mCountCasing++; - return 1; - } - if (block == sBlockCasings2 && 0 == meta) { - mCountCasing++; - return 2; - } - return 0; - } - - protected void updateHatchTexture() { - for (GT_MetaTileEntity_Hatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); - } - - private int getCasingTextureID() { - if (tierMachineCasing == 2) return ((GT_Block_Casings2) GregTech_API.sBlockCasings2).getTextureIndex(0); - return ((GT_Block_Casings1) GregTech_API.sBlockCasings1).getTextureIndex(10); - } - - @Override - public void onValueUpdate(byte aValue) { - tierMachineCasing = aValue; - } - - @Override - public byte getUpdateData() { - return (byte) tierMachineCasing; - } - - @Override - protected GT_RenderedTexture getFrontOverlay() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR); - } - - @Override - protected GT_RenderedTexture getFrontOverlayActive() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE); - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), - aActive ? getFrontOverlayActive() : getFrontOverlay() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) - .addElement( - 'C', - ofChain( - buildSteamInput(GregtechMetaTileEntity_SteamCompressor.class).casingIndex(10) - .dot(1) - .build(), - buildHatchAdder(GregtechMetaTileEntity_SteamCompressor.class) - .atLeast(SteamHatchElement.InputBus_Steam, SteamHatchElement.OutputBus_Steam) - .casingIndex(10) - .dot(1) - .buildAndChain(), - ofBlocksTiered( - this::getTierMachineCasing, - ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), - -1, - (t, m) -> t.tierMachineCasing = m, - t -> t.tierMachineCasing))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece( - STRUCTUR_PIECE_MAIN, - stackSize, - HORIZONTAL_OFF_SET, - VERTICAL_OFF_SET, - DEPTH_OFF_SET, - elementBudget, - env, - false, - true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCountCasing = 0; - tierMachineCasing = -1; - if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; - if (tierMachineCasing < 0) return false; - if (tierMachineCasing == 1 && mCountCasing > 25 && checkHatches()) { - updateHatchTexture(); - tierMachine = 1; - return true; - } - if (tierMachineCasing == 2 && mCountCasing > 25 && checkHatches()) { - updateHatchTexture(); - tierMachine = 2; - return true; - } - - return false; - } - - private boolean checkHatches() { - return !mSteamInputFluids.isEmpty() && !mSteamInputs.isEmpty() - && !mSteamOutputs.isEmpty() - && mOutputHatches.isEmpty() - && mInputHatches.isEmpty(); - } - - @Override - public int getMaxParallelRecipes() { - return tierMachine == 1 ? 8 : 16; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.compressorRecipes; - } - - // note that a basic steam machine has .setEUtDiscount(2F).setSpeedBoost(2F). So these are bonuses. - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - if (availableVoltage < recipe.mEUt) { - return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Override - @Nonnull - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return GT_OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); - } - }.setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getTierRecipes() { - return tierMachine == 1 ? 1 : 2; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Steam Compressor") - .addInfo("33.3% faster than using a single block Steam Compressor.") - .addInfo("Uses only 66.6% of the steam/s compared to a single block Steam Compressor.") - .addInfo("Bronze tier runs recipes up to LV tier") - .addInfo("Steel tier runs recipes up to MV tier") - .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") - .addSeparator() - .beginStructureBlock(3, 3, 4, false) - .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addStructureInfo( - EnumChatFormatting.WHITE + "Steam Input Hatch " - + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + " Any casing") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) - .addStructureInfo(EnumChatFormatting.GOLD + "25-30x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) - .addStructureInfo( - EnumChatFormatting.GOLD + "25-30x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") - .addStructureInfo("") - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public String[] getInfoData() { - ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); - info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); - return info.toArray(new String[0]); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - - currenttip.add( - StatCollector.translateToLocal("GTPP.machines.tier") + ": " - + EnumChatFormatting.YELLOW - + tag.getInteger("tierMachine") - + EnumChatFormatting.RESET); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " - + EnumChatFormatting.BLUE - + tag.getInteger("parallel") - + EnumChatFormatting.RESET); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("tierMachine", tierMachine); - tag.setInteger("parallel", getMaxParallelRecipes()); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("tierMachine", tierMachine); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - tierMachine = aNBT.getInteger("tierMachine"); - } - - @SideOnly(Side.CLIENT) - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.IC2_MACHINES_COMPRESSOR_OP.resourceLocation; - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamForgeHammer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamForgeHammer.java deleted file mode 100644 index c444743ca9..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamForgeHammer.java +++ /dev/null @@ -1,409 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.GregTech_API.sBlockCasings1; -import static gregtech.api.GregTech_API.sBlockCasings2; -import static gregtech.api.enums.GT_Values.AuthorEvgenWarGold; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.common.blocks.GT_Block_Casings1; -import gregtech.common.blocks.GT_Block_Casings2; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_SteamMultiBase; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_SteamForgeHammer - extends GregtechMeta_SteamMultiBase implements ISurvivalConstructable { - - public GregtechMetaTileEntity_SteamForgeHammer(String aName) { - super(aName); - } - - public GregtechMetaTileEntity_SteamForgeHammer(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_SteamForgeHammer(this.mName); - } - - @Override - public String getMachineType() { - return "Forge Hammer"; - } - - private static final String STRUCTUR_PIECE_MAIN = "main"; - - private IStructureDefinition STRUCTURE_DEFINITION = null; - - // spotless:off - private final String[][] shape = new String[][] { - {" "," "," B "," "," "}, - {" "," A ","AABAA"," A "," "}, - {" "," ","A C A"," "," "}, - {" "," ","A C A"," "," "}, - {" "," ","A A"," "," "}, - {" "," A~A ","AA AA"," AAA "," "}, - {" AAA ","AAAAA","AAAAA","AAAAA"," AAA "} }; - //spotless:on - - private static final int HORIZONTAL_OFF_SET = 2; - private static final int VERTICAL_OFF_SET = 5; - private static final int DEPTH_OFF_SET = 1; - - private int tierPipeCasing = -1; - private int tierMachineCasing = -1; - - private int tCountCasing = 0; - - private int tierMachine = 1; - - private int tierSimpleBlock = -1; - - public static int getTierSimpleBlock(Block block, int meta) { - if (block == Blocks.iron_block && meta == 0) return 1; - if (block == GregTech_API.sBlockMetal6 && meta == 13) return 2; - return 0; - } - - public int getTierMachineCasing(Block block, int meta) { - if (block == sBlockCasings1 && 10 == meta) { - tCountCasing++; - return 1; - } - if (block == sBlockCasings2 && 0 == meta) { - tCountCasing++; - return 2; - } - return 0; - } - - public static int getTierPipeCasing(Block block, int meta) { - if (block == sBlockCasings2 && 12 == meta) return 1; - if (block == sBlockCasings2 && 13 == meta) return 2; - return 0; - } - - protected void updateHatchTexture() { - for (GT_MetaTileEntity_Hatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); - } - - private int getCasingTextureID() { - if (tierPipeCasing == 2 || tierMachineCasing == 2 || tierSimpleBlock == 2) - return ((GT_Block_Casings2) GregTech_API.sBlockCasings2).getTextureIndex(0); - return ((GT_Block_Casings1) GregTech_API.sBlockCasings1).getTextureIndex(10); - } - - @Override - public void onValueUpdate(byte aValue) { - tierMachineCasing = aValue; - } - - @Override - public byte getUpdateData() { - return (byte) tierMachineCasing; - } - - @Override - protected GT_RenderedTexture getFrontOverlay() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FORGE_HAMMER); - } - - @Override - protected GT_RenderedTexture getFrontOverlayActive() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FORGE_HAMMER_ACTIVE); - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), - aActive ? getFrontOverlayActive() : getFrontOverlay() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - - STRUCTURE_DEFINITION = StructureDefinition.builder() - - .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) - .addElement( - 'B', - ofBlocksTiered( - GregtechMetaTileEntity_SteamForgeHammer::getTierPipeCasing, - ImmutableList.of(Pair.of(sBlockCasings2, 12), Pair.of(sBlockCasings2, 13)), - -1, - (t, m) -> t.tierPipeCasing = m, - t -> t.tierPipeCasing)) - .addElement( - 'C', - ofBlocksTiered( - GregtechMetaTileEntity_SteamForgeHammer::getTierSimpleBlock, - ImmutableList.of(Pair.of(Blocks.iron_block, 0), Pair.of(GregTech_API.sBlockMetal6, 13)), - -1, - (t, m) -> t.tierSimpleBlock = m, - t -> t.tierSimpleBlock)) - .addElement( - 'A', - ofChain( - buildSteamInput(GregtechMetaTileEntity_SteamForgeHammer.class).casingIndex(10) - .dot(1) - .build(), - buildHatchAdder(GregtechMetaTileEntity_SteamForgeHammer.class) - .atLeast(SteamHatchElement.InputBus_Steam, SteamHatchElement.OutputBus_Steam) - .casingIndex(10) - .dot(1) - .buildAndChain(), - ofBlocksTiered( - this::getTierMachineCasing, - ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), - -1, - (t, m) -> t.tierMachineCasing = m, - t -> t.tierMachineCasing))) - .build(); - - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - this.buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (this.mMachine) return -1; - return this.survivialBuildPiece( - STRUCTUR_PIECE_MAIN, - stackSize, - HORIZONTAL_OFF_SET, - VERTICAL_OFF_SET, - DEPTH_OFF_SET, - elementBudget, - env, - false, - true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - tierPipeCasing = -1; - tierMachineCasing = -1; - tierSimpleBlock = -1; - tCountCasing = 0; - if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; - if (tierPipeCasing < 0 && tierMachineCasing < 0 && tierSimpleBlock < 0) return false; - if (tierPipeCasing == 1 && tierMachineCasing == 1 - && tierSimpleBlock == 1 - && tCountCasing > 35 - && checkHatches()) { - updateHatchTexture(); - tierMachine = 1; - return true; - } - if (tierPipeCasing == 2 && tierMachineCasing == 2 - && tierSimpleBlock == 2 - && tCountCasing > 35 - && checkHatches()) { - updateHatchTexture(); - tierMachine = 2; - return true; - } - return false; - } - - private boolean checkHatches() { - return !mSteamInputFluids.isEmpty() && !mSteamInputs.isEmpty() - && !mSteamOutputs.isEmpty() - && mOutputHatches.isEmpty() - && mInputHatches.isEmpty(); - } - - @Override - public int getMaxParallelRecipes() { - return tierMachine == 1 ? 8 : 16; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.hammerRecipes; - } - - @SideOnly(Side.CLIENT) - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.RANDOM_ANVIL_USE.resourceLocation; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - if (availableVoltage < recipe.mEUt) { - return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Override - @Nonnull - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return GT_OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); - } - }.setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getTierRecipes() { - return tierMachine == 1 ? 1 : 2; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Steam Forge Hammer") - .addInfo("33.3% faster than a single block steam machine would run.") - .addInfo( - "On Tier 1, it uses only 66.6% of the steam/s required compared to what a single block steam machine would use.") - .addInfo("Bronze tier runs recipes up to LV tier") - .addInfo("Steel tier runs recipes up to MV tier") - .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") - .addSeparator() - .beginStructureBlock(6, 5, 5, false) - .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addStructureInfo( - EnumChatFormatting.WHITE + "Steam Input Hatch " - + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + " Any casing") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) - .addStructureInfo(EnumChatFormatting.GOLD + "35-39x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") - .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Bronze Pipe Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Iron Block") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) - .addStructureInfo( - EnumChatFormatting.GOLD + "35-39x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Steel Pipe Casing") - .addStructureInfo( - EnumChatFormatting.GOLD + "2x" - + EnumChatFormatting.GRAY - + " Steel Block" - + EnumChatFormatting.RED - + " from GregTech") - .addStructureInfo("") - .toolTipFinisher(AuthorEvgenWarGold); - return tt; - } - - @Override - public String[] getInfoData() { - ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); - info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); - return info.toArray(new String[0]); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - - currenttip.add( - StatCollector.translateToLocal("GTPP.machines.tier") + ": " - + EnumChatFormatting.YELLOW - + tag.getInteger("tierMachine") - + EnumChatFormatting.RESET); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " - + EnumChatFormatting.BLUE - + tag.getInteger("parallel") - + EnumChatFormatting.RESET); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("tierMachine", tierMachine); - tag.setInteger("parallel", getMaxParallelRecipes()); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("tierMachine", tierMachine); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - tierMachine = aNBT.getInteger("tierMachine"); - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMacerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMacerator.java deleted file mode 100644 index 3a055d7403..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMacerator.java +++ /dev/null @@ -1,354 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.GregTech_API.sBlockCasings1; -import static gregtech.api.GregTech_API.sBlockCasings2; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.common.blocks.GT_Block_Casings1; -import gregtech.common.blocks.GT_Block_Casings2; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_SteamMultiBase; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_SteamMacerator - extends GregtechMeta_SteamMultiBase implements ISurvivalConstructable { - - 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); - } - - @Override - public String getMachineType() { - return "Macerator"; - } - - private static final String STRUCTUR_PIECE_MAIN = "main"; - - private IStructureDefinition STRUCTURE_DEFINITION = null; - - private final String[][] shape = new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, - { "CCC", "CCC", "CCC" } }; - // spotless:on - - private static final int HORIZONTAL_OFF_SET = 1; - private static final int VERTICAL_OFF_SET = 1; - private static final int DEPTH_OFF_SET = 0; - - private int mCounCasing = 0; - - private int tierMachine = 0; - - private int tierMachineCasing = -1; - - public int getTierMachineCasing(Block block, int meta) { - if (block == sBlockCasings1 && 10 == meta) { - mCounCasing++; - return 1; - } - if (block == sBlockCasings2 && 0 == meta) { - mCounCasing++; - return 2; - } - return 0; - } - - protected void updateHatchTexture() { - for (GT_MetaTileEntity_Hatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); - } - - private int getCasingTextureID() { - if (tierMachineCasing == 2) return ((GT_Block_Casings2) GregTech_API.sBlockCasings2).getTextureIndex(0); - return ((GT_Block_Casings1) GregTech_API.sBlockCasings1).getTextureIndex(10); - } - - @Override - public void onValueUpdate(byte aValue) { - tierMachineCasing = aValue; - } - - @Override - public byte getUpdateData() { - return (byte) tierMachineCasing; - } - - @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 ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), - aActive ? getFrontOverlayActive() : getFrontOverlay() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) - .addElement( - 'C', - ofChain( - buildSteamInput(GregtechMetaTileEntity_SteamMacerator.class).casingIndex(10) - .dot(1) - .build(), - buildHatchAdder(GregtechMetaTileEntity_SteamMacerator.class) - .atLeast(SteamHatchElement.InputBus_Steam, SteamHatchElement.OutputBus_Steam) - .casingIndex(10) - .dot(1) - .buildAndChain(), - ofBlocksTiered( - this::getTierMachineCasing, - ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), - -1, - (t, m) -> t.tierMachineCasing = m, - t -> t.tierMachineCasing))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece( - STRUCTUR_PIECE_MAIN, - stackSize, - HORIZONTAL_OFF_SET, - VERTICAL_OFF_SET, - DEPTH_OFF_SET, - elementBudget, - env, - false, - true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - tierMachineCasing = -1; - mCounCasing = 0; - if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; - if (tierMachineCasing < 0) return false; - if (tierMachineCasing == 1 && mCounCasing > 14 && checkHatches()) { - updateHatchTexture(); - tierMachine = 1; - return true; - } - if (tierMachineCasing == 2 && mCounCasing > 14 && checkHatches()) { - updateHatchTexture(); - tierMachine = 2; - return true; - } - - return false; - } - - private boolean checkHatches() { - return !mSteamInputFluids.isEmpty() && !mSteamInputs.isEmpty() - && !mSteamOutputs.isEmpty() - && mOutputHatches.isEmpty() - && mInputHatches.isEmpty(); - } - - @Override - public int getMaxParallelRecipes() { - return tierMachine == 1 ? 8 : 16; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.maceratorRecipes; - } - - @Override - public int getItemOutputLimit() { - return 1; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - if (availableVoltage < recipe.mEUt) { - return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - // note that a basic steam machine has .setEUtDiscount(2F).setSpeedBoost(2F). So these here are bonuses. - @Override - @Nonnull - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return GT_OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); - } - }.setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getTierRecipes() { - return tierMachine == 1 ? 1 : 2; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Steam Macerator") - .addInfo("33.3% faster than using a single block Steam Macerator.") - .addInfo("Uses only 66.6% of the steam/s required compared to a single block Steam Macerator on Tier 1.") - .addInfo("Bronze tier runs recipes up to LV tier") - .addInfo("Steel tier runs recipes up to MV tier") - .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") - .addSeparator() - .beginStructureBlock(3, 3, 3, false) - .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addStructureInfo( - EnumChatFormatting.WHITE + "Steam Input Hatch " - + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + " Any casing") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) - .addStructureInfo(EnumChatFormatting.GOLD + "14-22x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) - .addStructureInfo( - EnumChatFormatting.GOLD + "14-22x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") - .addStructureInfo("") - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public String[] getInfoData() { - ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); - info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); - return info.toArray(new String[0]); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - - currenttip.add( - StatCollector.translateToLocal("GTPP.machines.tier") + ": " - + EnumChatFormatting.YELLOW - + tag.getInteger("tierMachine") - + EnumChatFormatting.RESET); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " - + EnumChatFormatting.BLUE - + tag.getInteger("parallel") - + EnumChatFormatting.RESET); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("tierMachine", tierMachine); - tag.setInteger("parallel", getMaxParallelRecipes()); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("tierMachine", tierMachine); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - tierMachine = aNBT.getInteger("tierMachine"); - } - - @SideOnly(Side.CLIENT) - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.IC2_MACHINES_MACERATOR_OP.resourceLocation; - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMixer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMixer.java deleted file mode 100644 index ae91b28152..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamMixer.java +++ /dev/null @@ -1,458 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.GregTech_API.sBlockCasings1; -import static gregtech.api.GregTech_API.sBlockCasings2; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorEvgenWarGold; -import static gregtech.api.enums.Mods.EnderIO; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.ITierConverter; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.common.blocks.GT_Block_Casings1; -import gregtech.common.blocks.GT_Block_Casings2; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_SteamMultiBase; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_SteamMixer extends GregtechMeta_SteamMultiBase - implements ISurvivalConstructable { - - public GregtechMetaTileEntity_SteamMixer(String aName) { - super(aName); - } - - public GregtechMetaTileEntity_SteamMixer(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_SteamMixer(this.mName); - } - - @Override - public String getMachineType() { - return "Mixer"; - } - - private static final String STRUCTUR_PIECE_MAIN = "main"; - - private IStructureDefinition STRUCTURE_DEFINITION = null; - // spotless:off - private final String[][] shape = new String[][]{ - {" "," A "," A "," AAAAA "," A "," A "," "}, - {" A "," A "," ","AA B AA"," "," A "," A "}, - {" A "," "," ","A C A"," "," "," A "}, - {" AAAAA ","A A","A A","A C A","A A","A A"," AAAAA "}, - {" AA~AA ","AD DA","A D D A","A B A","A D D A","AD DA"," AAAAA "}, - {" AAAAA ","AAAAAAA","AAAAAAA","AAAAAAA","AAAAAAA","AAAAAAA"," AAAAA "}}; - //spotless:on - - private static final int HORIZONTAL_OFF_SET = 3; - private static final int VERTICAL_OFF_SET = 4; - private static final int DEPTH_OFF_SET = 0; - - private int tierGearBoxCasing = -1; - private int tierPipeCasing = -1; - private int tierMachineCasing = -1; - - private int tCountCasing = 0; - - private int tierMachine = 1; - - private int tierSimpleBlock = 0; - - Map simpleBlockTiers = new HashMap<>(); - - public int getTierMachineCasing(Block block, int meta) { - if (block == sBlockCasings1 && 10 == meta) { - tCountCasing++; - return 1; - } - if (block == sBlockCasings2 && 0 == meta) { - tCountCasing++; - return 2; - } - return 0; - } - - public static int getTierGearBoxCasing(Block block, int meta) { - if (block == sBlockCasings2 && 2 == meta) return 1; - if (block == sBlockCasings2 && 3 == meta) return 2; - return 0; - } - - public static int getTierPipeCasing(Block block, int meta) { - if (block == sBlockCasings2 && 12 == meta) return 1; - if (block == sBlockCasings2 && 13 == meta) return 2; - return 0; - } - - private static List> getAllSimpleBlockTiers(Map simpleBlockTiers) { - return simpleBlockTiers.entrySet() - .stream() - .map(e -> Pair.of(e.getKey(), e.getValue())) - .collect(Collectors.toList()); - } - - private static ITierConverter simpleBlockTierConverter(Map simpleBlockTiers) { - return (block, meta) -> block == null ? 0 : simpleBlockTiers.getOrDefault(block, 1); - } - - private void setSimpleBlockTier(int tier) { - tierSimpleBlock = tier; - } - - private int getSimpleBlockTier() { - return tierSimpleBlock; - } - - protected void updateHatchTexture() { - for (GT_MetaTileEntity_Hatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mOutputHatches) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mInputHatches) h.updateTexture(getCasingTextureID()); - } - - private int getCasingTextureID() { - if (tierGearBoxCasing == 2 || tierPipeCasing == 2 || tierMachineCasing == 2 || tierSimpleBlock == 2) - return ((GT_Block_Casings2) GregTech_API.sBlockCasings2).getTextureIndex(0); - return ((GT_Block_Casings1) GregTech_API.sBlockCasings1).getTextureIndex(10); - } - - @Override - public void onValueUpdate(byte aValue) { - tierMachineCasing = aValue; - } - - @Override - public byte getUpdateData() { - return (byte) tierMachineCasing; - } - - @Override - protected GT_RenderedTexture getFrontOverlay() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_CENTRIFUGE); - } - - @Override - protected GT_RenderedTexture getFrontOverlayActive() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_CENTRIFUGE_ACTIVE); - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), - aActive ? getFrontOverlayActive() : getFrontOverlay() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - simpleBlockTiers.put(Blocks.iron_block, 1); - - if (EnderIO.isModLoaded()) { - simpleBlockTiers.put(GameRegistry.findBlock(EnderIO.ID, "blockIngotStorage"), 6); - } else simpleBlockTiers.put(Blocks.iron_block, 2); - - STRUCTURE_DEFINITION = StructureDefinition.builder() - - .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) - .addElement( - 'B', - ofBlocksTiered( - GregtechMetaTileEntity_SteamMixer::getTierGearBoxCasing, - ImmutableList.of(Pair.of(sBlockCasings2, 2), Pair.of(sBlockCasings2, 3)), - -1, - (t, m) -> t.tierGearBoxCasing = m, - t -> t.tierGearBoxCasing)) - .addElement( - 'C', - ofBlocksTiered( - GregtechMetaTileEntity_SteamMixer::getTierPipeCasing, - ImmutableList.of(Pair.of(sBlockCasings2, 12), Pair.of(sBlockCasings2, 13)), - -1, - (t, m) -> t.tierPipeCasing = m, - t -> t.tierPipeCasing)) - .addElement( - 'D', - ofBlocksTiered( - simpleBlockTierConverter(simpleBlockTiers), - getAllSimpleBlockTiers(simpleBlockTiers), - -1, - GregtechMetaTileEntity_SteamMixer::setSimpleBlockTier, - GregtechMetaTileEntity_SteamMixer::getSimpleBlockTier)) - .addElement( - 'A', - ofChain( - buildSteamInput(GregtechMetaTileEntity_SteamMixer.class).casingIndex(10) - .dot(1) - .allowOnly(ForgeDirection.NORTH) - .build(), - buildHatchAdder(GregtechMetaTileEntity_SteamMixer.class) - .atLeast( - SteamHatchElement.InputBus_Steam, - SteamHatchElement.OutputBus_Steam, - OutputHatch, - InputHatch) - .casingIndex(10) - .dot(1) - .allowOnly(ForgeDirection.NORTH) - .buildAndChain(), - ofBlocksTiered( - this::getTierMachineCasing, - ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), - -1, - (t, m) -> t.tierMachineCasing = m, - t -> t.tierMachineCasing))) - .build(); - - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - this.buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (this.mMachine) return -1; - return this.survivialBuildPiece( - STRUCTUR_PIECE_MAIN, - stackSize, - HORIZONTAL_OFF_SET, - VERTICAL_OFF_SET, - DEPTH_OFF_SET, - elementBudget, - env, - false, - true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - tierGearBoxCasing = -1; - tierPipeCasing = -1; - tierSimpleBlock = -1; - tierMachineCasing = -1; - tCountCasing = 0; - if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; - if (tierGearBoxCasing < 0 && tierPipeCasing < 0 && tierMachineCasing < 0) return false; - if (tierGearBoxCasing == 1 && tierPipeCasing == 1 - && tierSimpleBlock == 1 - && tierMachineCasing == 1 - && tCountCasing > 90 - && !mSteamInputFluids.isEmpty() - && !mSteamInputs.isEmpty() - && !mSteamOutputs.isEmpty() - && !mInputHatches.isEmpty() - && !mOutputHatches.isEmpty()) { - updateHatchTexture(); - tierMachine = 1; - return true; - } - if (tierGearBoxCasing == 2 && tierPipeCasing == 2 - && tierSimpleBlock == 2 - && tierMachineCasing == 2 - && tCountCasing > 90 - && !mSteamInputFluids.isEmpty() - && !mSteamInputs.isEmpty() - && !mSteamOutputs.isEmpty() - && !mInputHatches.isEmpty() - && !mOutputHatches.isEmpty()) { - updateHatchTexture(); - tierMachine = 2; - return true; - } - return false; - } - - @Override - public int getMaxParallelRecipes() { - return tierMachine == 1 ? 8 : 16; - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.mixerNonCellRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - if (availableVoltage < recipe.mEUt) { - return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Override - @Nonnull - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return GT_OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); - } - }.setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getTierRecipes() { - return tierMachine == 1 ? 1 : 2; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Steam Mixer") - .addInfo("Bronze tier runs recipes up to LV tier") - .addInfo("Steel tier runs recipes up to MV tier") - .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") - .addSeparator() - .beginStructureBlock(7, 6, 7, false) - .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addOutputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addStructureInfo( - EnumChatFormatting.WHITE + "Steam Input Hatch " - + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + " Any casing") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) - .addStructureInfo(EnumChatFormatting.GOLD + "90-100x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") - .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Bronze Gear Box Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Bronze Pipe Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Block of Iron") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) - .addStructureInfo( - EnumChatFormatting.GOLD + "90-100x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Steel Gear Box Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Steel Pipe Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Block of Iron") - .addStructureInfo("") - .toolTipFinisher(AuthorEvgenWarGold); - return tt; - } - - @Override - public String[] getInfoData() { - ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); - info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); - return info.toArray(new String[0]); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - - currenttip.add( - StatCollector.translateToLocal("GTPP.machines.tier") + ": " - + EnumChatFormatting.YELLOW - + tag.getInteger("tierMachine") - + EnumChatFormatting.RESET); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " - + EnumChatFormatting.BLUE - + tag.getInteger("parallel") - + EnumChatFormatting.RESET); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("tierMachine", tierMachine); - tag.setInteger("parallel", getMaxParallelRecipes()); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("tierMachine", tierMachine); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - tierMachine = aNBT.getInteger("tierMachine"); - } - - @SideOnly(Side.CLIENT) - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_STEAM_CENTRIFUGE_LOOP.resourceLocation; - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWasher.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWasher.java deleted file mode 100644 index a245f696f9..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWasher.java +++ /dev/null @@ -1,552 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; -import static gregtech.api.GregTech_API.*; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_Values.AuthorEvgenWarGold; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableList; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; -import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.common.blocks.GT_Block_Casings1; -import gregtech.common.blocks.GT_Block_Casings2; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_SteamMultiBase; -import ic2.core.init.BlocksItems; -import ic2.core.init.InternalName; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_SteamWasher extends GregtechMeta_SteamMultiBase - implements ISurvivalConstructable { - - public GregtechMetaTileEntity_SteamWasher(String aName) { - super(aName); - } - - public GregtechMetaTileEntity_SteamWasher(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_SteamWasher(this.mName); - } - - @Override - public String getMachineType() { - return "Washer"; - } - - private static final String STRUCTUR_PIECE_MAIN = "main"; - - private IStructureDefinition STRUCTURE_DEFINITION = null; - - private final String[][] shape = new String[][] { - { " ", " ", " CCCCCC ", " ", " " }, - { " ", " ", " C C ", " ", " " }, - { " AAA ", " A A", " C A C A", " A A", " AAA " }, - { " ADDDA", "AAA D D", "AAA D C D", "AAA D D", " ADDDA" }, - { " ADDDA", "A~A DEEED", "AAA DECED", "AAA DEEED", " ADDDA" }, - { " AAAAA", "AAA ABBBA", "AAA ABABA", "AAA ABBBA", " AAAAA" } }; - - private static final int HORIZONTAL_OFF_SET = 1; - private static final int VERTICAL_OFF_SET = 4; - private static final int DEPTH_OFF_SET = 1; - - private static final int MACHINEMODE_OREWASH = 0; - private static final int MACHINEMODE_SIMPLEWASH = 1; - - private boolean isBroken = true; - - private int tierGearBoxCasing = -1; - private int tierPipeCasing = -1; - private int tierMachineCasing = -1; - private int tierMachine = 1; - - private int tCountCasing = 0; - - public int getTierMachineCasing(Block block, int meta) { - if (block == sBlockCasings1 && 10 == meta) { - tCountCasing++; - return 1; - } - if (block == sBlockCasings2 && 0 == meta) { - tCountCasing++; - return 2; - } - return 0; - } - - public static int getTierGearBoxCasing(Block block, int meta) { - if (block == sBlockCasings2 && 2 == meta) return 1; - if (block == sBlockCasings2 && 3 == meta) return 2; - return 0; - } - - public static int getTierPipeCasing(Block block, int meta) { - if (block == sBlockCasings2 && 12 == meta) return 1; - if (block == sBlockCasings2 && 13 == meta) return 2; - return 0; - } - - protected void updateHatchTexture() { - for (GT_MetaTileEntity_Hatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mInputHatches) h.updateTexture(getCasingTextureID()); - } - - private int getCasingTextureID() { - if (tierGearBoxCasing == 2 || tierPipeCasing == 2 || tierMachineCasing == 2) - return ((GT_Block_Casings2) GregTech_API.sBlockCasings2).getTextureIndex(0); - return ((GT_Block_Casings1) GregTech_API.sBlockCasings1).getTextureIndex(10); - } - - @Override - public void onValueUpdate(byte aValue) { - tierMachineCasing = aValue; - } - - @Override - public byte getUpdateData() { - return (byte) tierMachineCasing; - } - - @Override - protected GT_RenderedTexture getFrontOverlay() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_WASHER); - } - - @Override - protected GT_RenderedTexture getFrontOverlayActive() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_WASHER_ACTIVE); - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), - aActive ? getFrontOverlayActive() : getFrontOverlay() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - - STRUCTURE_DEFINITION = StructureDefinition.builder() - - .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) - .addElement( - 'B', - ofBlocksTiered( - GregtechMetaTileEntity_SteamWasher::getTierGearBoxCasing, - ImmutableList.of(Pair.of(sBlockCasings2, 2), Pair.of(sBlockCasings2, 3)), - -1, - (t, m) -> t.tierGearBoxCasing = m, - t -> t.tierGearBoxCasing)) - .addElement( - 'C', - ofBlocksTiered( - GregtechMetaTileEntity_SteamWasher::getTierPipeCasing, - ImmutableList.of(Pair.of(sBlockCasings2, 12), Pair.of(sBlockCasings2, 13)), - -1, - (t, m) -> t.tierPipeCasing = m, - t -> t.tierPipeCasing)) - .addElement('D', ofBlock(Blocks.glass, 0)) - .addElement( - 'E', - ofChain( - isAir(), - ofBlockAnyMeta(Blocks.water), - ofBlockAnyMeta(BlocksItems.getFluidBlock(InternalName.fluidDistilledWater)))) - .addElement( - 'A', - ofChain( - buildSteamInput(GregtechMetaTileEntity_SteamWasher.class).casingIndex(10) - .dot(1) - .allowOnly(ForgeDirection.NORTH) - .build(), - buildHatchAdder(GregtechMetaTileEntity_SteamWasher.class) - .atLeast(SteamHatchElement.InputBus_Steam, SteamHatchElement.OutputBus_Steam, InputHatch) - .casingIndex(10) - .dot(1) - .allowOnly(ForgeDirection.NORTH) - .buildAndChain(), - ofBlocksTiered( - this::getTierMachineCasing, - ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), - -1, - (t, m) -> t.tierMachineCasing = m, - t -> t.tierMachineCasing))) - .build(); - - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - this.buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (this.mMachine) return -1; - return this.survivialBuildPiece( - STRUCTUR_PIECE_MAIN, - stackSize, - HORIZONTAL_OFF_SET, - VERTICAL_OFF_SET, - DEPTH_OFF_SET, - elementBudget, - env, - false, - true); - } - - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - tierGearBoxCasing = -1; - tierPipeCasing = -1; - tierMachineCasing = -1; - tCountCasing = 0; - if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; - if (tierGearBoxCasing < 0 && tierPipeCasing < 0 && tierMachineCasing < 0) return false; - if (tierGearBoxCasing == 1 && tierPipeCasing == 1 - && tierMachineCasing == 1 - && tCountCasing > 55 - && checkHatches()) { - updateHatchTexture(); - tierMachine = 1; - return true; - } - if (tierGearBoxCasing == 2 && tierPipeCasing == 2 - && tierMachineCasing == 2 - && tCountCasing > 55 - && checkHatches()) { - updateHatchTexture(); - tierMachine = 2; - return true; - } - return false; - } - - private boolean checkHatches() { - return !mSteamInputFluids.isEmpty() && !mSteamInputs.isEmpty() - && !mSteamOutputs.isEmpty() - && mOutputHatches.isEmpty() - && !mInputHatches.isEmpty(); - } - - @Override - public int getMaxParallelRecipes() { - return tierMachine == 1 ? 8 : 16; - } - - @Override - public RecipeMap getRecipeMap() { - if (machineMode == MACHINEMODE_SIMPLEWASH) { - return GTPPRecipeMaps.simpleWasherRecipes; - } - return RecipeMaps.oreWasherRecipes; - } - - @NotNull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(GTPPRecipeMaps.simpleWasherRecipes, RecipeMaps.oreWasherRecipes); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@Nonnull GT_Recipe recipe) { - if (isBroken) { - checkForWater(); - isBroken = false; - } else if (availableVoltage < recipe.mEUt) { - return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - } else return CheckRecipeResultRegistry.SUCCESSFUL; - return SimpleCheckRecipeResult.ofFailure("no_water"); - } - - @Override - @Nonnull - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return GT_OverclockCalculator.ofNoOverclock(recipe) - .setEUtDiscount(1.33F) - .setSpeedBoost(1.5F); - } - }.setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getTierRecipes() { - return tierMachine == 1 ? 1 : 2; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Steam Washer") - .addInfo("33.3% faster than a single block steam machine would run.") - .addInfo( - "On Tier 1, it uses only 66.6% of the steam/s required compared to what a single block steam machine would use.") - .addInfo("Bronze tier runs recipes up to LV tier") - .addInfo("Steel tier runs recipes up to MV tier") - .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") - .addSeparator() - .beginStructureBlock(5, 5, 5, false) - .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addStructureInfo( - EnumChatFormatting.WHITE + "Steam Input Hatch " - + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + " Any casing") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) - .addStructureInfo(EnumChatFormatting.GOLD + "55-59x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") - .addStructureInfo(EnumChatFormatting.GOLD + "24x" + EnumChatFormatting.GRAY + " Any Glass") - .addStructureInfo(EnumChatFormatting.GOLD + "12x" + EnumChatFormatting.GRAY + " Bronze Pipe Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Bronze Gear Box Casing") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) - .addStructureInfo( - EnumChatFormatting.GOLD + "55-59x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "24x" + EnumChatFormatting.GRAY + " Any Glass") - .addStructureInfo(EnumChatFormatting.GOLD + "12x" + EnumChatFormatting.GRAY + " Steel Pipe Casing") - .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Steel Gear Box Casing") - .addStructureInfo("") - .toolTipFinisher(AuthorEvgenWarGold); - return tt; - } - - @Override - public String[] getInfoData() { - ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); - info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); - return info.toArray(new String[0]); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - - currenttip.add( - StatCollector.translateToLocal("GTPP.machines.tier") + ": " - + EnumChatFormatting.YELLOW - + tag.getInteger("tierMachine") - + EnumChatFormatting.RESET); - currenttip.add( - StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " - + EnumChatFormatting.BLUE - + tag.getInteger("parallel") - + EnumChatFormatting.RESET); - currenttip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector.translateToLocal("GT5U.GTPP_MULTI_WASH_PLANT.mode." + tag.getInteger("mode")) - + EnumChatFormatting.RESET); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("tierMachine", tierMachine); - tag.setInteger("parallel", getMaxParallelRecipes()); - tag.setInteger("mode", machineMode); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("tierMachine", tierMachine); - aNBT.setInteger("mMode", machineMode); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - tierMachine = aNBT.getInteger("tierMachine"); - machineMode = aNBT.getInteger("mMode"); - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - // don't rotate a washer, water will flow out. - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated(); - } - - @SideOnly(Side.CLIENT) - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_STEAM_WASHER_LOOP.resourceLocation; - } - - @Override - public boolean supportsMachineModeSwitch() { - return true; - } - - @Override - public int nextMachineMode() { - if (machineMode == MACHINEMODE_OREWASH) return MACHINEMODE_SIMPLEWASH; - else return MACHINEMODE_OREWASH; - } - - @Override - public void setMachineModeIcons() { - machineModeIcons.clear(); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_WASHPLANT); - machineModeIcons.add(GT_UITextures.OVERLAY_BUTTON_MACHINEMODE_SIMPLEWASHER); - } - - @Override - public String getMachineModeName() { - return StatCollector.translateToLocal("GT5U.GTPP_MULTI_WASH_PLANT.mode." + machineMode); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - if (mUpdate < -250) mUpdate = 50; - if ((aTick % 1200) == 0) { - isBroken = true; - } - } - } - - private void checkForWater() { - ExtendedFacing facing = getExtendedFacing(); - final ForgeDirection frontFacing = facing.getDirection(); - final Flip curFlip = facing.getFlip(); - IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); - - double xOffset = getExtendedFacing().getRelativeBackInWorld().offsetX; - double zOffset = getExtendedFacing().getRelativeBackInWorld().offsetZ; - double yOffset = getExtendedFacing().getRelativeBackInWorld().offsetY; - - switch (frontFacing) { - case WEST -> { - xOffset -= 1; - zOffset += curFlip.isHorizontallyFlipped() ? -6 : 4; - } - case EAST -> { - xOffset -= 1; - zOffset += curFlip.isHorizontallyFlipped() ? 4 : -6; - } - case NORTH -> { - zOffset -= 1; - xOffset += curFlip.isHorizontallyFlipped() ? 4 : -6; - } - case SOUTH -> { - zOffset -= 1; - xOffset += curFlip.isHorizontallyFlipped() ? -6 : 4; - } - } - - int x = gregTechTileEntity.getXCoord(); - int y = gregTechTileEntity.getYCoord(); - int z = gregTechTileEntity.getZCoord(); - - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - Block tBlock = this.getBaseMetaTileEntity() - .getWorld() - .getBlock((int) (i + xOffset + x), (int) (y + yOffset), (int) (j + zOffset + z)); - if (tBlock == Blocks.air) { - if (tryConsumeWater()) { - this.getBaseMetaTileEntity() - .getWorld() - .setBlock( - (int) (i + xOffset + x), - (int) (y + yOffset), - (int) (j + zOffset + z), - Blocks.water); - } - } - } - } - } - - private boolean tryConsumeWater() { - if (getStoredFluids() != null) { - for (FluidStack waterCapacity : this.getStoredFluids()) { - if (waterCapacity.isFluidEqual(FluidUtils.getWater(1000))) { - if (waterCapacity.amount >= 1000) { - waterCapacity.amount -= 1000; - return true; - } - } - } - } - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWaterPump.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWaterPump.java deleted file mode 100644 index 9d727b21ba..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/GregtechMetaTileEntity_SteamWaterPump.java +++ /dev/null @@ -1,374 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.GT_Values.AuthorEvgenWarGold; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -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.objects.GT_RenderedTexture; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.VoidProtectionHelper; -import gregtech.common.blocks.GT_Block_Casings9; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_SteamMultiBase; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_SteamWaterPump - extends GregtechMeta_SteamMultiBase implements ISurvivalConstructable { - - public GregtechMetaTileEntity_SteamWaterPump(String aName) { - super(aName); - } - - public GregtechMetaTileEntity_SteamWaterPump(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_SteamWaterPump(this.mName); - } - - @Override - public String getMachineType() { - return "Water Pump"; - } - - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - private static final int HORIZONTAL_OFF_SET = 1; - private static final int VERTICAL_OFF_SET = 2; - private static final int DEPTH_OFF_SET = 0; - private static final String tier1 = "tier1"; - private static final String tier2 = "tier2"; - - // Base amount of water produced per second, before applying humidity and tier modifiers. - private static final int BASE_WATER_PER_SECOND = 1_500; - private static final int PROGRESSION_TIME_TICKS = 20; - - private static final int BASE_STEAM_PER_SECOND = 1_500; - - private int mSetTier = 1; - - private float currentHumidity; - - private static final Fluid water = FluidRegistry.getFluid("water"); - - private FluidStack[] getWater() { - return new FluidStack[] { new FluidStack(water, calculateFinalWaterOutput()) }; - } - - private int mCountCasing; - - private float getHumidity() { - return this.getBaseMetaTileEntity() - .getWorld() - .getBiomeGenForCoords(getBaseMetaTileEntity().getXCoord(), getBaseMetaTileEntity().getZCoord()).rainfall; - } - - private int calculateFinalWaterOutput() { - return (int) (currentHumidity * BASE_WATER_PER_SECOND * mSetTier); - } - - // spotless:off - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - - STRUCTURE_DEFINITION = StructureDefinition.builder() - - .addShape( - tier1, - transpose( - new String[][] { - { " A ", " A ", "AAA", " A " }, - { " A ", " ", "A A", " A " }, - { "C~C", "CCC", "CCC", "CCC" } })) - .addShape( - tier2, - transpose( - new String[][] { - { " D ", " D ", "DDD", " D " }, - { " D ", " ", "D D", " D " }, - { "C~C", "CCC", "CCC", "CCC" } })) - .addElement('A', ofFrame(Materials.Bronze)) - .addElement('D', ofFrame(Materials.Steel)) - .addElement( - 'C', - ofChain( - buildSteamInput(GregtechMetaTileEntity_SteamWaterPump.class) - .casingIndex(((GT_Block_Casings9) GregTech_API.sBlockCasings9).getTextureIndex(2)) - .dot(1) - .build(), - buildHatchAdder(GregtechMetaTileEntity_SteamWaterPump.class) - .atLeast(OutputHatch) - .casingIndex(((GT_Block_Casings9) GregTech_API.sBlockCasings9).getTextureIndex(2)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCountCasing, ofBlock(GregTech_API.sBlockCasings9, 2))) - ) - ) - .build(); - - } - return STRUCTURE_DEFINITION; - } - // spotless:on - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - if (stackSize.stackSize == 1) { - this.buildPiece(tier1, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); - } else { - this.buildPiece(tier2, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); - } - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (this.mMachine) return -1; - int built = 0; - if (stackSize.stackSize == 1) { - mSetTier = 1; - built += this.survivialBuildPiece( - tier1, - stackSize, - HORIZONTAL_OFF_SET, - VERTICAL_OFF_SET, - DEPTH_OFF_SET, - elementBudget, - env, - false, - true); - } else { - mSetTier = 2; - built += this.survivialBuildPiece( - tier2, - stackSize, - HORIZONTAL_OFF_SET, - VERTICAL_OFF_SET, - DEPTH_OFF_SET, - elementBudget, - env, - false, - true); - } - return built; - } - - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCountCasing = 0; - mSetTier = 1; - if (!checkPiece(tier1, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) { - if (!checkPiece(tier2, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; - mSetTier = 2; - } - - if (this.mOutputHatches.size() != 1 || this.mSteamInputFluids.size() != 1) return false; - - currentHumidity = getHumidity(); - return mCountCasing >= 9; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { - Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings9, 2)), - aActive ? getFrontOverlayActive() : getFrontOverlay() }; - } - return new ITexture[] { Textures.BlockIcons - .getCasingTextureForId(GT_Utility.getCasingTextureIndex(GregTech_API.sBlockCasings9, 2)) }; - } - - @Override - protected GT_RenderedTexture getFrontOverlay() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_WATER_PUMP); - } - - @Override - protected GT_RenderedTexture getFrontOverlayActive() { - return new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_WATER_PUMP_ACTIVE); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Water Pump") - .addInfo("Pumps Water based on humidity") - .addInfo("Has 2 tiers: Bronze and Steel") - .addInfo("Steel tier extracts 2x Water") - .addInfo( - EnumChatFormatting.AQUA + "Generates: " - + EnumChatFormatting.WHITE - + " humidity * tier * " - + BASE_WATER_PER_SECOND - + " L/s" - + EnumChatFormatting.AQUA - + " of Water." - + EnumChatFormatting.RESET) - .addInfo( - EnumChatFormatting.RED + "Consumes: " - + EnumChatFormatting.WHITE - + BASE_STEAM_PER_SECOND - + " L/s" - + EnumChatFormatting.RED - + " of Steam." - + EnumChatFormatting.RESET) - .addSeparator() - .beginStructureBlock(3, 3, 5, false) - .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) - .addStructureInfo( - EnumChatFormatting.WHITE + "Steam Input Hatch " - + EnumChatFormatting.GOLD - + "1" - + EnumChatFormatting.GRAY - + " Any casing") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) - .addStructureInfo(EnumChatFormatting.GOLD + "10" + EnumChatFormatting.GRAY + " Bronze Frame Box") - .addStructureInfo(EnumChatFormatting.GOLD + "10" + EnumChatFormatting.GRAY + " Wooden Casing") - .addStructureInfo("") - .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) - .addStructureInfo(EnumChatFormatting.GOLD + "10" + EnumChatFormatting.GRAY + " Steel Frame Box") - .addStructureInfo(EnumChatFormatting.GOLD + "10 " + EnumChatFormatting.GRAY + " Wooden Casing") - .addStructureInfo("") - .toolTipFinisher(AuthorEvgenWarGold); - return tt; - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - - VoidProtectionHelper voidProtection = new VoidProtectionHelper().setMachine(this) - .setFluidOutputs(getWater()) - .build(); - - if (voidProtection.isFluidFull()) { - mOutputFluids = null; - mMaxProgresstime = 0; - return CheckRecipeResultRegistry.FLUID_OUTPUT_FULL; - } else { - if (getTotalSteamStored() >= BASE_STEAM_PER_SECOND) { - mMaxProgresstime = PROGRESSION_TIME_TICKS; - tryConsumeSteam(BASE_STEAM_PER_SECOND); - mOutputFluids = getWater(); - updateSlots(); - return CheckRecipeResultRegistry.SUCCESSFUL; - } else return CheckRecipeResultRegistry.NO_RECIPE; - } - } - - @Override - public int getTierRecipes() { - return 0; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - if ((aTick % 1200) == 0) { - currentHumidity = getHumidity(); - } - } - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currenttip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - - currenttip.add( - StatCollector.translateToLocal("GT5U.machines.tier") + ": " - + EnumChatFormatting.BLUE - + tag.getInteger("mSetTier") - + EnumChatFormatting.RESET); - currenttip.add( - StatCollector.translateToLocal("GT5U.biomes.humidity") + " " - + EnumChatFormatting.BLUE - + tag.getFloat("humidity") - + " %" - + EnumChatFormatting.RESET); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setFloat("humidity", currentHumidity * 100); - tag.setInteger("mSetTier", mSetTier); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mSetTier", mSetTier); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mSetTier = aNBT.getInteger("mSetTier"); - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); - } - - @SideOnly(Side.CLIENT) - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_WATER_PUMP_LOOP.resourceLocation; - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCentrifuge.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCentrifuge.java new file mode 100644 index 0000000000..7d2628d958 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCentrifuge.java @@ -0,0 +1,418 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.GregTechAPI.*; +import static gregtech.api.enums.GTValues.AuthorEvgenWarGold; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.blocks.BlockCasings1; +import gregtech.common.blocks.BlockCasings2; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTESteamMultiBase; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTESteamCentrifuge extends MTESteamMultiBase implements ISurvivalConstructable { + + public MTESteamCentrifuge(String aName) { + super(aName); + } + + public MTESteamCentrifuge(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamCentrifuge(this.mName); + } + + @Override + public String getMachineType() { + return "Centrifuge"; + } + + private static final String STRUCTUR_PIECE_MAIN = "main"; + + private IStructureDefinition STRUCTURE_DEFINITION = null; + // spotless:off + private final String[][] shape = new String[][] { + { " AAA ", "AAAAA", "AAAAA", "AAAAA", " AAA " }, + { " ", " ABA ", " BDB ", " ABA ", " " }, + { " A ", " ACA ", "ACDCA", " ACA ", " A " }, + { " A~A ", "AABAA", "ABDBA", "AABAA", " AAA " }, + { " AAA ", "AAAAA", "AAAAA", "AAAAA", " AAA " } }; + //spotless:on + + private static final int HORIZONTAL_OFF_SET = 2; + private static final int VERTICAL_OFF_SET = 3; + private static final int DEPTH_OFF_SET = 0; + + private int tierGearBoxCasing = -1; + private int tierPipeCasing = -1; + private int tierFireBoxCasing = -1; + private int tierMachineCasing = -1; + + private int tCountCasing = 0; + + private int tierMachine = 1; + + public int getTierMachineCasing(Block block, int meta) { + if (block == sBlockCasings1 && 10 == meta) { + tCountCasing++; + return 1; + } + if (block == sBlockCasings2 && 0 == meta) { + tCountCasing++; + return 2; + } + return 0; + } + + public static int getTierFireBoxCasing(Block block, int meta) { + if (block == sBlockCasings3 && 13 == meta) return 1; + if (block == sBlockCasings3 && 14 == meta) return 2; + return 0; + } + + public static int getTierGearBoxCasing(Block block, int meta) { + if (block == sBlockCasings2 && 2 == meta) return 1; + if (block == sBlockCasings2 && 3 == meta) return 2; + return 0; + } + + public static int getTierPipeCasing(Block block, int meta) { + if (block == sBlockCasings2 && 12 == meta) return 1; + if (block == sBlockCasings2 && 13 == meta) return 2; + return 0; + } + + protected void updateHatchTexture() { + for (MTEHatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mOutputHatches) h.updateTexture(getCasingTextureID()); + } + + private int getCasingTextureID() { + if (tierGearBoxCasing == 2 || tierPipeCasing == 2 || tierFireBoxCasing == 2 || tierMachineCasing == 2) + return ((BlockCasings2) GregTechAPI.sBlockCasings2).getTextureIndex(0); + return ((BlockCasings1) GregTechAPI.sBlockCasings1).getTextureIndex(10); + } + + @Override + public void onValueUpdate(byte aValue) { + tierMachineCasing = aValue; + } + + @Override + public byte getUpdateData() { + return (byte) tierMachineCasing; + } + + @Override + protected GTRenderedTexture getFrontOverlay() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_CENTRIFUGE); + } + + @Override + protected GTRenderedTexture getFrontOverlayActive() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_CENTRIFUGE_ACTIVE); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), + aActive ? getFrontOverlayActive() : getFrontOverlay() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + + STRUCTURE_DEFINITION = StructureDefinition.builder() + + .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) + .addElement( + 'B', + ofBlocksTiered( + MTESteamCentrifuge::getTierGearBoxCasing, + ImmutableList.of(Pair.of(sBlockCasings2, 2), Pair.of(sBlockCasings2, 3)), + -1, + (t, m) -> t.tierGearBoxCasing = m, + t -> t.tierGearBoxCasing)) + .addElement( + 'C', + ofBlocksTiered( + MTESteamCentrifuge::getTierPipeCasing, + ImmutableList.of(Pair.of(sBlockCasings2, 12), Pair.of(sBlockCasings2, 13)), + -1, + (t, m) -> t.tierPipeCasing = m, + t -> t.tierPipeCasing)) + .addElement( + 'D', + ofBlocksTiered( + MTESteamCentrifuge::getTierFireBoxCasing, + ImmutableList.of(Pair.of(sBlockCasings3, 13), Pair.of(sBlockCasings3, 14)), + -1, + (t, m) -> t.tierFireBoxCasing = m, + t -> t.tierFireBoxCasing)) + .addElement( + 'A', + ofChain( + buildSteamInput(MTESteamCentrifuge.class).casingIndex(10) + .dot(1) + .build(), + buildHatchAdder(MTESteamCentrifuge.class) + .atLeast(SteamHatchElement.InputBus_Steam, SteamHatchElement.OutputBus_Steam, OutputHatch) + .casingIndex(10) + .dot(1) + .buildAndChain(), + ofBlocksTiered( + this::getTierMachineCasing, + ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), + -1, + (t, m) -> t.tierMachineCasing = m, + t -> t.tierMachineCasing))) + .build(); + + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + this.buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (this.mMachine) return -1; + return this.survivialBuildPiece( + STRUCTUR_PIECE_MAIN, + stackSize, + HORIZONTAL_OFF_SET, + VERTICAL_OFF_SET, + DEPTH_OFF_SET, + elementBudget, + env, + false, + true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + tierGearBoxCasing = -1; + tierPipeCasing = -1; + tierFireBoxCasing = -1; + tierMachineCasing = -1; + tCountCasing = 0; + if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; + if (tierGearBoxCasing < 0 && tierPipeCasing < 0 && tierFireBoxCasing < 0 && tierMachineCasing < 0) return false; + if (tierGearBoxCasing == 1 && tierPipeCasing == 1 + && tierFireBoxCasing == 1 + && tierMachineCasing == 1 + && tCountCasing > 60 + && checkHatches()) { + updateHatchTexture(); + tierMachine = 1; + return true; + } + if (tierGearBoxCasing == 2 && tierPipeCasing == 2 + && tierFireBoxCasing == 2 + && tierMachineCasing == 2 + && tCountCasing > 60 + && checkHatches()) { + updateHatchTexture(); + tierMachine = 2; + return true; + } + return false; + } + + private boolean checkHatches() { + return !mSteamInputFluids.isEmpty() && !mSteamInputs.isEmpty() + && !mSteamOutputs.isEmpty() + && !mOutputHatches.isEmpty() + && mInputHatches.isEmpty(); + } + + @Override + public int getMaxParallelRecipes() { + return tierMachine == 1 ? 8 : 16; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.centrifugeRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + if (availableVoltage < recipe.mEUt) { + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Override + @Nonnull + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return OverclockCalculator.ofNoOverclock(recipe) + .setEUtDiscount(1.33F) + .setSpeedBoost(1.5F); + } + }.setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getTierRecipes() { + return tierMachine == 1 ? 1 : 2; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Steam Centrifuge") + .addInfo("33.3% faster than a single block steam machine would run.") + .addInfo( + "On Tier 1, it uses only 66.6% of the steam/s required compared to what a single block steam machine would use.") + .addInfo("Bronze tier runs recipes up to LV tier") + .addInfo("Steel tier runs recipes up to MV tier") + .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") + .addSeparator() + .beginStructureBlock(5, 5, 5, false) + .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addOutputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addStructureInfo( + EnumChatFormatting.WHITE + "Steam Input Hatch " + + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + " Any casing") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) + .addStructureInfo(EnumChatFormatting.GOLD + "60-65x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") + .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Bronze Gear Box Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "3x" + EnumChatFormatting.GRAY + " Bronze Firebox Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "4x" + EnumChatFormatting.GRAY + " Bronze Pipe Casing") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) + .addStructureInfo( + EnumChatFormatting.GOLD + "60-65x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Steel Gear Box Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "3x" + EnumChatFormatting.GRAY + " Steel Firebox Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "4x" + EnumChatFormatting.GRAY + " Steel Pipe Casing") + .addStructureInfo("") + .toolTipFinisher(AuthorEvgenWarGold); + return tt; + } + + @Override + public String[] getInfoData() { + ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); + info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); + info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); + return info.toArray(new String[0]); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + + currenttip.add( + StatCollector.translateToLocal("GTPP.machines.tier") + ": " + + EnumChatFormatting.YELLOW + + tag.getInteger("tierMachine") + + EnumChatFormatting.RESET); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " + + EnumChatFormatting.BLUE + + tag.getInteger("parallel") + + EnumChatFormatting.RESET); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("tierMachine", tierMachine); + tag.setInteger("parallel", getMaxParallelRecipes()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("tierMachine", tierMachine); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + tierMachine = aNBT.getInteger("tierMachine"); + } + + @SideOnly(Side.CLIENT) + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_STEAM_CENTRIFUGE_LOOP.resourceLocation; + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java new file mode 100644 index 0000000000..9588a5d11a --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamCompressor.java @@ -0,0 +1,351 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.GregTechAPI.sBlockCasings1; +import static gregtech.api.GregTechAPI.sBlockCasings2; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.blocks.BlockCasings1; +import gregtech.common.blocks.BlockCasings2; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTESteamMultiBase; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTESteamCompressor extends MTESteamMultiBase implements ISurvivalConstructable { + + public MTESteamCompressor(String aName) { + super(aName); + } + + public MTESteamCompressor(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { + return new MTESteamCompressor(this.mName); + } + + @Override + public String getMachineType() { + return "Compressor"; + } + + private static final String STRUCTUR_PIECE_MAIN = "main"; + + private IStructureDefinition STRUCTURE_DEFINITION = null; + + // spotless:off + private final String[][] shape = new String[][] { + { "CCC", "CCC", "CCC", "CCC" }, + { "C~C", "C-C", "C-C", "CCC" }, + { "CCC", "CCC", "CCC", "CCC" } }; + //spotless:on + + private static final int HORIZONTAL_OFF_SET = 1; + private static final int VERTICAL_OFF_SET = 1; + private static final int DEPTH_OFF_SET = 0; + + private int mCountCasing = 0; + + private int tierMachine = 1; + + private int tierMachineCasing = -1; + + public int getTierMachineCasing(Block block, int meta) { + if (block == sBlockCasings1 && 10 == meta) { + mCountCasing++; + return 1; + } + if (block == sBlockCasings2 && 0 == meta) { + mCountCasing++; + return 2; + } + return 0; + } + + protected void updateHatchTexture() { + for (MTEHatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); + } + + private int getCasingTextureID() { + if (tierMachineCasing == 2) return ((BlockCasings2) GregTechAPI.sBlockCasings2).getTextureIndex(0); + return ((BlockCasings1) GregTechAPI.sBlockCasings1).getTextureIndex(10); + } + + @Override + public void onValueUpdate(byte aValue) { + tierMachineCasing = aValue; + } + + @Override + public byte getUpdateData() { + return (byte) tierMachineCasing; + } + + @Override + protected GTRenderedTexture getFrontOverlay() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR); + } + + @Override + protected GTRenderedTexture getFrontOverlayActive() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_COMPRESSOR_ACTIVE); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), + aActive ? getFrontOverlayActive() : getFrontOverlay() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) + .addElement( + 'C', + ofChain( + buildSteamInput(MTESteamCompressor.class).casingIndex(10) + .dot(1) + .build(), + buildHatchAdder(MTESteamCompressor.class) + .atLeast(SteamHatchElement.InputBus_Steam, SteamHatchElement.OutputBus_Steam) + .casingIndex(10) + .dot(1) + .buildAndChain(), + ofBlocksTiered( + this::getTierMachineCasing, + ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), + -1, + (t, m) -> t.tierMachineCasing = m, + t -> t.tierMachineCasing))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece( + STRUCTUR_PIECE_MAIN, + stackSize, + HORIZONTAL_OFF_SET, + VERTICAL_OFF_SET, + DEPTH_OFF_SET, + elementBudget, + env, + false, + true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCountCasing = 0; + tierMachineCasing = -1; + if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; + if (tierMachineCasing < 0) return false; + if (tierMachineCasing == 1 && mCountCasing > 25 && checkHatches()) { + updateHatchTexture(); + tierMachine = 1; + return true; + } + if (tierMachineCasing == 2 && mCountCasing > 25 && checkHatches()) { + updateHatchTexture(); + tierMachine = 2; + return true; + } + + return false; + } + + private boolean checkHatches() { + return !mSteamInputFluids.isEmpty() && !mSteamInputs.isEmpty() + && !mSteamOutputs.isEmpty() + && mOutputHatches.isEmpty() + && mInputHatches.isEmpty(); + } + + @Override + public int getMaxParallelRecipes() { + return tierMachine == 1 ? 8 : 16; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.compressorRecipes; + } + + // note that a basic steam machine has .setEUtDiscount(2F).setSpeedBoost(2F). So these are bonuses. + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + if (availableVoltage < recipe.mEUt) { + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Override + @Nonnull + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return OverclockCalculator.ofNoOverclock(recipe) + .setEUtDiscount(1.33F) + .setSpeedBoost(1.5F); + } + }.setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getTierRecipes() { + return tierMachine == 1 ? 1 : 2; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Steam Compressor") + .addInfo("33.3% faster than using a single block Steam Compressor.") + .addInfo("Uses only 66.6% of the steam/s compared to a single block Steam Compressor.") + .addInfo("Bronze tier runs recipes up to LV tier") + .addInfo("Steel tier runs recipes up to MV tier") + .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") + .addSeparator() + .beginStructureBlock(3, 3, 4, false) + .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addStructureInfo( + EnumChatFormatting.WHITE + "Steam Input Hatch " + + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + " Any casing") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) + .addStructureInfo(EnumChatFormatting.GOLD + "25-30x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) + .addStructureInfo( + EnumChatFormatting.GOLD + "25-30x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") + .addStructureInfo("") + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public String[] getInfoData() { + ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); + info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); + info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); + return info.toArray(new String[0]); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + + currenttip.add( + StatCollector.translateToLocal("GTPP.machines.tier") + ": " + + EnumChatFormatting.YELLOW + + tag.getInteger("tierMachine") + + EnumChatFormatting.RESET); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " + + EnumChatFormatting.BLUE + + tag.getInteger("parallel") + + EnumChatFormatting.RESET); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("tierMachine", tierMachine); + tag.setInteger("parallel", getMaxParallelRecipes()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("tierMachine", tierMachine); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + tierMachine = aNBT.getInteger("tierMachine"); + } + + @SideOnly(Side.CLIENT) + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.IC2_MACHINES_COMPRESSOR_OP.resourceLocation; + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamForgeHammer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamForgeHammer.java new file mode 100644 index 0000000000..76e3ade135 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamForgeHammer.java @@ -0,0 +1,408 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.GregTechAPI.sBlockCasings1; +import static gregtech.api.GregTechAPI.sBlockCasings2; +import static gregtech.api.enums.GTValues.AuthorEvgenWarGold; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.blocks.BlockCasings1; +import gregtech.common.blocks.BlockCasings2; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTESteamMultiBase; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTESteamForgeHammer extends MTESteamMultiBase implements ISurvivalConstructable { + + public MTESteamForgeHammer(String aName) { + super(aName); + } + + public MTESteamForgeHammer(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamForgeHammer(this.mName); + } + + @Override + public String getMachineType() { + return "Forge Hammer"; + } + + private static final String STRUCTUR_PIECE_MAIN = "main"; + + private IStructureDefinition STRUCTURE_DEFINITION = null; + + // spotless:off + private final String[][] shape = new String[][] { + {" "," "," B "," "," "}, + {" "," A ","AABAA"," A "," "}, + {" "," ","A C A"," "," "}, + {" "," ","A C A"," "," "}, + {" "," ","A A"," "," "}, + {" "," A~A ","AA AA"," AAA "," "}, + {" AAA ","AAAAA","AAAAA","AAAAA"," AAA "} }; + //spotless:on + + private static final int HORIZONTAL_OFF_SET = 2; + private static final int VERTICAL_OFF_SET = 5; + private static final int DEPTH_OFF_SET = 1; + + private int tierPipeCasing = -1; + private int tierMachineCasing = -1; + + private int tCountCasing = 0; + + private int tierMachine = 1; + + private int tierSimpleBlock = -1; + + public static int getTierSimpleBlock(Block block, int meta) { + if (block == Blocks.iron_block && meta == 0) return 1; + if (block == GregTechAPI.sBlockMetal6 && meta == 13) return 2; + return 0; + } + + public int getTierMachineCasing(Block block, int meta) { + if (block == sBlockCasings1 && 10 == meta) { + tCountCasing++; + return 1; + } + if (block == sBlockCasings2 && 0 == meta) { + tCountCasing++; + return 2; + } + return 0; + } + + public static int getTierPipeCasing(Block block, int meta) { + if (block == sBlockCasings2 && 12 == meta) return 1; + if (block == sBlockCasings2 && 13 == meta) return 2; + return 0; + } + + protected void updateHatchTexture() { + for (MTEHatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); + } + + private int getCasingTextureID() { + if (tierPipeCasing == 2 || tierMachineCasing == 2 || tierSimpleBlock == 2) + return ((BlockCasings2) GregTechAPI.sBlockCasings2).getTextureIndex(0); + return ((BlockCasings1) GregTechAPI.sBlockCasings1).getTextureIndex(10); + } + + @Override + public void onValueUpdate(byte aValue) { + tierMachineCasing = aValue; + } + + @Override + public byte getUpdateData() { + return (byte) tierMachineCasing; + } + + @Override + protected GTRenderedTexture getFrontOverlay() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FORGE_HAMMER); + } + + @Override + protected GTRenderedTexture getFrontOverlayActive() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_FORGE_HAMMER_ACTIVE); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), + aActive ? getFrontOverlayActive() : getFrontOverlay() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + + STRUCTURE_DEFINITION = StructureDefinition.builder() + + .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) + .addElement( + 'B', + ofBlocksTiered( + MTESteamForgeHammer::getTierPipeCasing, + ImmutableList.of(Pair.of(sBlockCasings2, 12), Pair.of(sBlockCasings2, 13)), + -1, + (t, m) -> t.tierPipeCasing = m, + t -> t.tierPipeCasing)) + .addElement( + 'C', + ofBlocksTiered( + MTESteamForgeHammer::getTierSimpleBlock, + ImmutableList.of(Pair.of(Blocks.iron_block, 0), Pair.of(GregTechAPI.sBlockMetal6, 13)), + -1, + (t, m) -> t.tierSimpleBlock = m, + t -> t.tierSimpleBlock)) + .addElement( + 'A', + ofChain( + buildSteamInput(MTESteamForgeHammer.class).casingIndex(10) + .dot(1) + .build(), + buildHatchAdder(MTESteamForgeHammer.class) + .atLeast(SteamHatchElement.InputBus_Steam, SteamHatchElement.OutputBus_Steam) + .casingIndex(10) + .dot(1) + .buildAndChain(), + ofBlocksTiered( + this::getTierMachineCasing, + ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), + -1, + (t, m) -> t.tierMachineCasing = m, + t -> t.tierMachineCasing))) + .build(); + + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + this.buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (this.mMachine) return -1; + return this.survivialBuildPiece( + STRUCTUR_PIECE_MAIN, + stackSize, + HORIZONTAL_OFF_SET, + VERTICAL_OFF_SET, + DEPTH_OFF_SET, + elementBudget, + env, + false, + true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + tierPipeCasing = -1; + tierMachineCasing = -1; + tierSimpleBlock = -1; + tCountCasing = 0; + if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; + if (tierPipeCasing < 0 && tierMachineCasing < 0 && tierSimpleBlock < 0) return false; + if (tierPipeCasing == 1 && tierMachineCasing == 1 + && tierSimpleBlock == 1 + && tCountCasing > 35 + && checkHatches()) { + updateHatchTexture(); + tierMachine = 1; + return true; + } + if (tierPipeCasing == 2 && tierMachineCasing == 2 + && tierSimpleBlock == 2 + && tCountCasing > 35 + && checkHatches()) { + updateHatchTexture(); + tierMachine = 2; + return true; + } + return false; + } + + private boolean checkHatches() { + return !mSteamInputFluids.isEmpty() && !mSteamInputs.isEmpty() + && !mSteamOutputs.isEmpty() + && mOutputHatches.isEmpty() + && mInputHatches.isEmpty(); + } + + @Override + public int getMaxParallelRecipes() { + return tierMachine == 1 ? 8 : 16; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.hammerRecipes; + } + + @SideOnly(Side.CLIENT) + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.RANDOM_ANVIL_USE.resourceLocation; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + if (availableVoltage < recipe.mEUt) { + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Override + @Nonnull + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return OverclockCalculator.ofNoOverclock(recipe) + .setEUtDiscount(1.33F) + .setSpeedBoost(1.5F); + } + }.setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getTierRecipes() { + return tierMachine == 1 ? 1 : 2; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Steam Forge Hammer") + .addInfo("33.3% faster than a single block steam machine would run.") + .addInfo( + "On Tier 1, it uses only 66.6% of the steam/s required compared to what a single block steam machine would use.") + .addInfo("Bronze tier runs recipes up to LV tier") + .addInfo("Steel tier runs recipes up to MV tier") + .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") + .addSeparator() + .beginStructureBlock(6, 5, 5, false) + .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addStructureInfo( + EnumChatFormatting.WHITE + "Steam Input Hatch " + + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + " Any casing") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) + .addStructureInfo(EnumChatFormatting.GOLD + "35-39x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") + .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Bronze Pipe Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Iron Block") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) + .addStructureInfo( + EnumChatFormatting.GOLD + "35-39x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Steel Pipe Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "2x" + + EnumChatFormatting.GRAY + + " Steel Block" + + EnumChatFormatting.RED + + " from GregTech") + .addStructureInfo("") + .toolTipFinisher(AuthorEvgenWarGold); + return tt; + } + + @Override + public String[] getInfoData() { + ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); + info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); + info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); + return info.toArray(new String[0]); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + + currenttip.add( + StatCollector.translateToLocal("GTPP.machines.tier") + ": " + + EnumChatFormatting.YELLOW + + tag.getInteger("tierMachine") + + EnumChatFormatting.RESET); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " + + EnumChatFormatting.BLUE + + tag.getInteger("parallel") + + EnumChatFormatting.RESET); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("tierMachine", tierMachine); + tag.setInteger("parallel", getMaxParallelRecipes()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("tierMachine", tierMachine); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + tierMachine = aNBT.getInteger("tierMachine"); + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMacerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMacerator.java new file mode 100644 index 0000000000..43e6245557 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMacerator.java @@ -0,0 +1,353 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.GregTechAPI.sBlockCasings1; +import static gregtech.api.GregTechAPI.sBlockCasings2; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.blocks.BlockCasings1; +import gregtech.common.blocks.BlockCasings2; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTESteamMultiBase; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTESteamMacerator extends MTESteamMultiBase implements ISurvivalConstructable { + + public MTESteamMacerator(String aName) { + super(aName); + } + + public MTESteamMacerator(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { + return new MTESteamMacerator(this.mName); + } + + @Override + public String getMachineType() { + return "Macerator"; + } + + private static final String STRUCTUR_PIECE_MAIN = "main"; + + private IStructureDefinition STRUCTURE_DEFINITION = null; + + private final String[][] shape = new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, + { "CCC", "CCC", "CCC" } }; + // spotless:on + + private static final int HORIZONTAL_OFF_SET = 1; + private static final int VERTICAL_OFF_SET = 1; + private static final int DEPTH_OFF_SET = 0; + + private int mCounCasing = 0; + + private int tierMachine = 0; + + private int tierMachineCasing = -1; + + public int getTierMachineCasing(Block block, int meta) { + if (block == sBlockCasings1 && 10 == meta) { + mCounCasing++; + return 1; + } + if (block == sBlockCasings2 && 0 == meta) { + mCounCasing++; + return 2; + } + return 0; + } + + protected void updateHatchTexture() { + for (MTEHatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); + } + + private int getCasingTextureID() { + if (tierMachineCasing == 2) return ((BlockCasings2) GregTechAPI.sBlockCasings2).getTextureIndex(0); + return ((BlockCasings1) GregTechAPI.sBlockCasings1).getTextureIndex(10); + } + + @Override + public void onValueUpdate(byte aValue) { + tierMachineCasing = aValue; + } + + @Override + public byte getUpdateData() { + return (byte) tierMachineCasing; + } + + @Override + protected GTRenderedTexture getFrontOverlay() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR); + } + + @Override + protected GTRenderedTexture getFrontOverlayActive() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_TOP_STEAM_MACERATOR_ACTIVE); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), + aActive ? getFrontOverlayActive() : getFrontOverlay() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) + .addElement( + 'C', + ofChain( + buildSteamInput(MTESteamMacerator.class).casingIndex(10) + .dot(1) + .build(), + buildHatchAdder(MTESteamMacerator.class) + .atLeast(SteamHatchElement.InputBus_Steam, SteamHatchElement.OutputBus_Steam) + .casingIndex(10) + .dot(1) + .buildAndChain(), + ofBlocksTiered( + this::getTierMachineCasing, + ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), + -1, + (t, m) -> t.tierMachineCasing = m, + t -> t.tierMachineCasing))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece( + STRUCTUR_PIECE_MAIN, + stackSize, + HORIZONTAL_OFF_SET, + VERTICAL_OFF_SET, + DEPTH_OFF_SET, + elementBudget, + env, + false, + true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + tierMachineCasing = -1; + mCounCasing = 0; + if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; + if (tierMachineCasing < 0) return false; + if (tierMachineCasing == 1 && mCounCasing > 14 && checkHatches()) { + updateHatchTexture(); + tierMachine = 1; + return true; + } + if (tierMachineCasing == 2 && mCounCasing > 14 && checkHatches()) { + updateHatchTexture(); + tierMachine = 2; + return true; + } + + return false; + } + + private boolean checkHatches() { + return !mSteamInputFluids.isEmpty() && !mSteamInputs.isEmpty() + && !mSteamOutputs.isEmpty() + && mOutputHatches.isEmpty() + && mInputHatches.isEmpty(); + } + + @Override + public int getMaxParallelRecipes() { + return tierMachine == 1 ? 8 : 16; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.maceratorRecipes; + } + + @Override + public int getItemOutputLimit() { + return 1; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + if (availableVoltage < recipe.mEUt) { + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + // note that a basic steam machine has .setEUtDiscount(2F).setSpeedBoost(2F). So these here are bonuses. + @Override + @Nonnull + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return OverclockCalculator.ofNoOverclock(recipe) + .setEUtDiscount(1.33F) + .setSpeedBoost(1.5F); + } + }.setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getTierRecipes() { + return tierMachine == 1 ? 1 : 2; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Steam Macerator") + .addInfo("33.3% faster than using a single block Steam Macerator.") + .addInfo("Uses only 66.6% of the steam/s required compared to a single block Steam Macerator on Tier 1.") + .addInfo("Bronze tier runs recipes up to LV tier") + .addInfo("Steel tier runs recipes up to MV tier") + .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") + .addSeparator() + .beginStructureBlock(3, 3, 3, false) + .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addStructureInfo( + EnumChatFormatting.WHITE + "Steam Input Hatch " + + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + " Any casing") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) + .addStructureInfo(EnumChatFormatting.GOLD + "14-22x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) + .addStructureInfo( + EnumChatFormatting.GOLD + "14-22x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") + .addStructureInfo("") + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public String[] getInfoData() { + ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); + info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); + info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); + return info.toArray(new String[0]); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + + currenttip.add( + StatCollector.translateToLocal("GTPP.machines.tier") + ": " + + EnumChatFormatting.YELLOW + + tag.getInteger("tierMachine") + + EnumChatFormatting.RESET); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " + + EnumChatFormatting.BLUE + + tag.getInteger("parallel") + + EnumChatFormatting.RESET); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("tierMachine", tierMachine); + tag.setInteger("parallel", getMaxParallelRecipes()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("tierMachine", tierMachine); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + tierMachine = aNBT.getInteger("tierMachine"); + } + + @SideOnly(Side.CLIENT) + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.IC2_MACHINES_MACERATOR_OP.resourceLocation; + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMixer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMixer.java new file mode 100644 index 0000000000..1fc6e55042 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamMixer.java @@ -0,0 +1,457 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.GregTechAPI.sBlockCasings1; +import static gregtech.api.GregTechAPI.sBlockCasings2; +import static gregtech.api.enums.GTValues.AuthorEvgenWarGold; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Mods.EnderIO; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.ITierConverter; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.blocks.BlockCasings1; +import gregtech.common.blocks.BlockCasings2; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTESteamMultiBase; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTESteamMixer extends MTESteamMultiBase implements ISurvivalConstructable { + + public MTESteamMixer(String aName) { + super(aName); + } + + public MTESteamMixer(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamMixer(this.mName); + } + + @Override + public String getMachineType() { + return "Mixer"; + } + + private static final String STRUCTUR_PIECE_MAIN = "main"; + + private IStructureDefinition STRUCTURE_DEFINITION = null; + // spotless:off + private final String[][] shape = new String[][]{ + {" "," A "," A "," AAAAA "," A "," A "," "}, + {" A "," A "," ","AA B AA"," "," A "," A "}, + {" A "," "," ","A C A"," "," "," A "}, + {" AAAAA ","A A","A A","A C A","A A","A A"," AAAAA "}, + {" AA~AA ","AD DA","A D D A","A B A","A D D A","AD DA"," AAAAA "}, + {" AAAAA ","AAAAAAA","AAAAAAA","AAAAAAA","AAAAAAA","AAAAAAA"," AAAAA "}}; + //spotless:on + + private static final int HORIZONTAL_OFF_SET = 3; + private static final int VERTICAL_OFF_SET = 4; + private static final int DEPTH_OFF_SET = 0; + + private int tierGearBoxCasing = -1; + private int tierPipeCasing = -1; + private int tierMachineCasing = -1; + + private int tCountCasing = 0; + + private int tierMachine = 1; + + private int tierSimpleBlock = 0; + + Map simpleBlockTiers = new HashMap<>(); + + public int getTierMachineCasing(Block block, int meta) { + if (block == sBlockCasings1 && 10 == meta) { + tCountCasing++; + return 1; + } + if (block == sBlockCasings2 && 0 == meta) { + tCountCasing++; + return 2; + } + return 0; + } + + public static int getTierGearBoxCasing(Block block, int meta) { + if (block == sBlockCasings2 && 2 == meta) return 1; + if (block == sBlockCasings2 && 3 == meta) return 2; + return 0; + } + + public static int getTierPipeCasing(Block block, int meta) { + if (block == sBlockCasings2 && 12 == meta) return 1; + if (block == sBlockCasings2 && 13 == meta) return 2; + return 0; + } + + private static List> getAllSimpleBlockTiers(Map simpleBlockTiers) { + return simpleBlockTiers.entrySet() + .stream() + .map(e -> Pair.of(e.getKey(), e.getValue())) + .collect(Collectors.toList()); + } + + private static ITierConverter simpleBlockTierConverter(Map simpleBlockTiers) { + return (block, meta) -> block == null ? 0 : simpleBlockTiers.getOrDefault(block, 1); + } + + private void setSimpleBlockTier(int tier) { + tierSimpleBlock = tier; + } + + private int getSimpleBlockTier() { + return tierSimpleBlock; + } + + protected void updateHatchTexture() { + for (MTEHatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mOutputHatches) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mInputHatches) h.updateTexture(getCasingTextureID()); + } + + private int getCasingTextureID() { + if (tierGearBoxCasing == 2 || tierPipeCasing == 2 || tierMachineCasing == 2 || tierSimpleBlock == 2) + return ((BlockCasings2) GregTechAPI.sBlockCasings2).getTextureIndex(0); + return ((BlockCasings1) GregTechAPI.sBlockCasings1).getTextureIndex(10); + } + + @Override + public void onValueUpdate(byte aValue) { + tierMachineCasing = aValue; + } + + @Override + public byte getUpdateData() { + return (byte) tierMachineCasing; + } + + @Override + protected GTRenderedTexture getFrontOverlay() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_CENTRIFUGE); + } + + @Override + protected GTRenderedTexture getFrontOverlayActive() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_CENTRIFUGE_ACTIVE); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), + aActive ? getFrontOverlayActive() : getFrontOverlay() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + simpleBlockTiers.put(Blocks.iron_block, 1); + + if (EnderIO.isModLoaded()) { + simpleBlockTiers.put(GameRegistry.findBlock(EnderIO.ID, "blockIngotStorage"), 6); + } else simpleBlockTiers.put(Blocks.iron_block, 2); + + STRUCTURE_DEFINITION = StructureDefinition.builder() + + .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) + .addElement( + 'B', + ofBlocksTiered( + MTESteamMixer::getTierGearBoxCasing, + ImmutableList.of(Pair.of(sBlockCasings2, 2), Pair.of(sBlockCasings2, 3)), + -1, + (t, m) -> t.tierGearBoxCasing = m, + t -> t.tierGearBoxCasing)) + .addElement( + 'C', + ofBlocksTiered( + MTESteamMixer::getTierPipeCasing, + ImmutableList.of(Pair.of(sBlockCasings2, 12), Pair.of(sBlockCasings2, 13)), + -1, + (t, m) -> t.tierPipeCasing = m, + t -> t.tierPipeCasing)) + .addElement( + 'D', + ofBlocksTiered( + simpleBlockTierConverter(simpleBlockTiers), + getAllSimpleBlockTiers(simpleBlockTiers), + -1, + MTESteamMixer::setSimpleBlockTier, + MTESteamMixer::getSimpleBlockTier)) + .addElement( + 'A', + ofChain( + buildSteamInput(MTESteamMixer.class).casingIndex(10) + .dot(1) + .allowOnly(ForgeDirection.NORTH) + .build(), + buildHatchAdder(MTESteamMixer.class) + .atLeast( + SteamHatchElement.InputBus_Steam, + SteamHatchElement.OutputBus_Steam, + OutputHatch, + InputHatch) + .casingIndex(10) + .dot(1) + .allowOnly(ForgeDirection.NORTH) + .buildAndChain(), + ofBlocksTiered( + this::getTierMachineCasing, + ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), + -1, + (t, m) -> t.tierMachineCasing = m, + t -> t.tierMachineCasing))) + .build(); + + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + this.buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (this.mMachine) return -1; + return this.survivialBuildPiece( + STRUCTUR_PIECE_MAIN, + stackSize, + HORIZONTAL_OFF_SET, + VERTICAL_OFF_SET, + DEPTH_OFF_SET, + elementBudget, + env, + false, + true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + tierGearBoxCasing = -1; + tierPipeCasing = -1; + tierSimpleBlock = -1; + tierMachineCasing = -1; + tCountCasing = 0; + if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; + if (tierGearBoxCasing < 0 && tierPipeCasing < 0 && tierMachineCasing < 0) return false; + if (tierGearBoxCasing == 1 && tierPipeCasing == 1 + && tierSimpleBlock == 1 + && tierMachineCasing == 1 + && tCountCasing > 90 + && !mSteamInputFluids.isEmpty() + && !mSteamInputs.isEmpty() + && !mSteamOutputs.isEmpty() + && !mInputHatches.isEmpty() + && !mOutputHatches.isEmpty()) { + updateHatchTexture(); + tierMachine = 1; + return true; + } + if (tierGearBoxCasing == 2 && tierPipeCasing == 2 + && tierSimpleBlock == 2 + && tierMachineCasing == 2 + && tCountCasing > 90 + && !mSteamInputFluids.isEmpty() + && !mSteamInputs.isEmpty() + && !mSteamOutputs.isEmpty() + && !mInputHatches.isEmpty() + && !mOutputHatches.isEmpty()) { + updateHatchTexture(); + tierMachine = 2; + return true; + } + return false; + } + + @Override + public int getMaxParallelRecipes() { + return tierMachine == 1 ? 8 : 16; + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.mixerNonCellRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + if (availableVoltage < recipe.mEUt) { + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Override + @Nonnull + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return OverclockCalculator.ofNoOverclock(recipe) + .setEUtDiscount(1.33F) + .setSpeedBoost(1.5F); + } + }.setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getTierRecipes() { + return tierMachine == 1 ? 1 : 2; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Steam Mixer") + .addInfo("Bronze tier runs recipes up to LV tier") + .addInfo("Steel tier runs recipes up to MV tier") + .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") + .addSeparator() + .beginStructureBlock(7, 6, 7, false) + .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addOutputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addStructureInfo( + EnumChatFormatting.WHITE + "Steam Input Hatch " + + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + " Any casing") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) + .addStructureInfo(EnumChatFormatting.GOLD + "90-100x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") + .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Bronze Gear Box Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Bronze Pipe Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Block of Iron") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) + .addStructureInfo( + EnumChatFormatting.GOLD + "90-100x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Steel Gear Box Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "2x" + EnumChatFormatting.GRAY + " Steel Pipe Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Block of Iron") + .addStructureInfo("") + .toolTipFinisher(AuthorEvgenWarGold); + return tt; + } + + @Override + public String[] getInfoData() { + ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); + info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); + info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); + return info.toArray(new String[0]); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + + currenttip.add( + StatCollector.translateToLocal("GTPP.machines.tier") + ": " + + EnumChatFormatting.YELLOW + + tag.getInteger("tierMachine") + + EnumChatFormatting.RESET); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " + + EnumChatFormatting.BLUE + + tag.getInteger("parallel") + + EnumChatFormatting.RESET); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("tierMachine", tierMachine); + tag.setInteger("parallel", getMaxParallelRecipes()); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("tierMachine", tierMachine); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + tierMachine = aNBT.getInteger("tierMachine"); + } + + @SideOnly(Side.CLIENT) + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_STEAM_CENTRIFUGE_LOOP.resourceLocation; + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWasher.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWasher.java new file mode 100644 index 0000000000..438a762da6 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWasher.java @@ -0,0 +1,551 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.*; +import static gregtech.api.GregTechAPI.*; +import static gregtech.api.enums.GTValues.AuthorEvgenWarGold; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.blocks.BlockCasings1; +import gregtech.common.blocks.BlockCasings2; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTESteamMultiBase; +import ic2.core.init.BlocksItems; +import ic2.core.init.InternalName; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTESteamWasher extends MTESteamMultiBase implements ISurvivalConstructable { + + public MTESteamWasher(String aName) { + super(aName); + } + + public MTESteamWasher(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamWasher(this.mName); + } + + @Override + public String getMachineType() { + return "Washer"; + } + + private static final String STRUCTUR_PIECE_MAIN = "main"; + + private IStructureDefinition STRUCTURE_DEFINITION = null; + + private final String[][] shape = new String[][] { + { " ", " ", " CCCCCC ", " ", " " }, + { " ", " ", " C C ", " ", " " }, + { " AAA ", " A A", " C A C A", " A A", " AAA " }, + { " ADDDA", "AAA D D", "AAA D C D", "AAA D D", " ADDDA" }, + { " ADDDA", "A~A DEEED", "AAA DECED", "AAA DEEED", " ADDDA" }, + { " AAAAA", "AAA ABBBA", "AAA ABABA", "AAA ABBBA", " AAAAA" } }; + + private static final int HORIZONTAL_OFF_SET = 1; + private static final int VERTICAL_OFF_SET = 4; + private static final int DEPTH_OFF_SET = 1; + + private static final int MACHINEMODE_OREWASH = 0; + private static final int MACHINEMODE_SIMPLEWASH = 1; + + private boolean isBroken = true; + + private int tierGearBoxCasing = -1; + private int tierPipeCasing = -1; + private int tierMachineCasing = -1; + private int tierMachine = 1; + + private int tCountCasing = 0; + + public int getTierMachineCasing(Block block, int meta) { + if (block == sBlockCasings1 && 10 == meta) { + tCountCasing++; + return 1; + } + if (block == sBlockCasings2 && 0 == meta) { + tCountCasing++; + return 2; + } + return 0; + } + + public static int getTierGearBoxCasing(Block block, int meta) { + if (block == sBlockCasings2 && 2 == meta) return 1; + if (block == sBlockCasings2 && 3 == meta) return 2; + return 0; + } + + public static int getTierPipeCasing(Block block, int meta) { + if (block == sBlockCasings2 && 12 == meta) return 1; + if (block == sBlockCasings2 && 13 == meta) return 2; + return 0; + } + + protected void updateHatchTexture() { + for (MTEHatch h : mSteamInputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamOutputs) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mSteamInputFluids) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mInputHatches) h.updateTexture(getCasingTextureID()); + } + + private int getCasingTextureID() { + if (tierGearBoxCasing == 2 || tierPipeCasing == 2 || tierMachineCasing == 2) + return ((BlockCasings2) GregTechAPI.sBlockCasings2).getTextureIndex(0); + return ((BlockCasings1) GregTechAPI.sBlockCasings1).getTextureIndex(10); + } + + @Override + public void onValueUpdate(byte aValue) { + tierMachineCasing = aValue; + } + + @Override + public byte getUpdateData() { + return (byte) tierMachineCasing; + } + + @Override + protected GTRenderedTexture getFrontOverlay() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_WASHER); + } + + @Override + protected GTRenderedTexture getFrontOverlayActive() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_STEAM_WASHER_ACTIVE); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()), + aActive ? getFrontOverlayActive() : getFrontOverlay() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(getCasingTextureID()) }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + + STRUCTURE_DEFINITION = StructureDefinition.builder() + + .addShape(STRUCTUR_PIECE_MAIN, transpose(shape)) + .addElement( + 'B', + ofBlocksTiered( + MTESteamWasher::getTierGearBoxCasing, + ImmutableList.of(Pair.of(sBlockCasings2, 2), Pair.of(sBlockCasings2, 3)), + -1, + (t, m) -> t.tierGearBoxCasing = m, + t -> t.tierGearBoxCasing)) + .addElement( + 'C', + ofBlocksTiered( + MTESteamWasher::getTierPipeCasing, + ImmutableList.of(Pair.of(sBlockCasings2, 12), Pair.of(sBlockCasings2, 13)), + -1, + (t, m) -> t.tierPipeCasing = m, + t -> t.tierPipeCasing)) + .addElement('D', ofBlock(Blocks.glass, 0)) + .addElement( + 'E', + ofChain( + isAir(), + ofBlockAnyMeta(Blocks.water), + ofBlockAnyMeta(BlocksItems.getFluidBlock(InternalName.fluidDistilledWater)))) + .addElement( + 'A', + ofChain( + buildSteamInput(MTESteamWasher.class).casingIndex(10) + .dot(1) + .allowOnly(ForgeDirection.NORTH) + .build(), + buildHatchAdder(MTESteamWasher.class) + .atLeast(SteamHatchElement.InputBus_Steam, SteamHatchElement.OutputBus_Steam, InputHatch) + .casingIndex(10) + .dot(1) + .allowOnly(ForgeDirection.NORTH) + .buildAndChain(), + ofBlocksTiered( + this::getTierMachineCasing, + ImmutableList.of(Pair.of(sBlockCasings1, 10), Pair.of(sBlockCasings2, 0)), + -1, + (t, m) -> t.tierMachineCasing = m, + t -> t.tierMachineCasing))) + .build(); + + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + this.buildPiece(STRUCTUR_PIECE_MAIN, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (this.mMachine) return -1; + return this.survivialBuildPiece( + STRUCTUR_PIECE_MAIN, + stackSize, + HORIZONTAL_OFF_SET, + VERTICAL_OFF_SET, + DEPTH_OFF_SET, + elementBudget, + env, + false, + true); + } + + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + tierGearBoxCasing = -1; + tierPipeCasing = -1; + tierMachineCasing = -1; + tCountCasing = 0; + if (!checkPiece(STRUCTUR_PIECE_MAIN, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; + if (tierGearBoxCasing < 0 && tierPipeCasing < 0 && tierMachineCasing < 0) return false; + if (tierGearBoxCasing == 1 && tierPipeCasing == 1 + && tierMachineCasing == 1 + && tCountCasing > 55 + && checkHatches()) { + updateHatchTexture(); + tierMachine = 1; + return true; + } + if (tierGearBoxCasing == 2 && tierPipeCasing == 2 + && tierMachineCasing == 2 + && tCountCasing > 55 + && checkHatches()) { + updateHatchTexture(); + tierMachine = 2; + return true; + } + return false; + } + + private boolean checkHatches() { + return !mSteamInputFluids.isEmpty() && !mSteamInputs.isEmpty() + && !mSteamOutputs.isEmpty() + && mOutputHatches.isEmpty() + && !mInputHatches.isEmpty(); + } + + @Override + public int getMaxParallelRecipes() { + return tierMachine == 1 ? 8 : 16; + } + + @Override + public RecipeMap getRecipeMap() { + if (machineMode == MACHINEMODE_SIMPLEWASH) { + return GTPPRecipeMaps.simpleWasherRecipes; + } + return RecipeMaps.oreWasherRecipes; + } + + @NotNull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(GTPPRecipeMaps.simpleWasherRecipes, RecipeMaps.oreWasherRecipes); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + if (isBroken) { + checkForWater(); + isBroken = false; + } else if (availableVoltage < recipe.mEUt) { + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + } else return CheckRecipeResultRegistry.SUCCESSFUL; + return SimpleCheckRecipeResult.ofFailure("no_water"); + } + + @Override + @Nonnull + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return OverclockCalculator.ofNoOverclock(recipe) + .setEUtDiscount(1.33F) + .setSpeedBoost(1.5F); + } + }.setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getTierRecipes() { + return tierMachine == 1 ? 1 : 2; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Steam Washer") + .addInfo("33.3% faster than a single block steam machine would run.") + .addInfo( + "On Tier 1, it uses only 66.6% of the steam/s required compared to what a single block steam machine would use.") + .addInfo("Bronze tier runs recipes up to LV tier") + .addInfo("Steel tier runs recipes up to MV tier") + .addInfo("Processes 8x parallel Bronze tier and 16x parallel Steel tier") + .addSeparator() + .beginStructureBlock(5, 5, 5, false) + .addInputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addOutputBus(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addStructureInfo( + EnumChatFormatting.WHITE + "Steam Input Hatch " + + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + " Any casing") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) + .addStructureInfo(EnumChatFormatting.GOLD + "55-59x" + EnumChatFormatting.GRAY + " Bronze Plated Bricks") + .addStructureInfo(EnumChatFormatting.GOLD + "24x" + EnumChatFormatting.GRAY + " Any Glass") + .addStructureInfo(EnumChatFormatting.GOLD + "12x" + EnumChatFormatting.GRAY + " Bronze Pipe Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Bronze Gear Box Casing") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) + .addStructureInfo( + EnumChatFormatting.GOLD + "55-59x" + EnumChatFormatting.GRAY + " Solid Steel Machine Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "24x" + EnumChatFormatting.GRAY + " Any Glass") + .addStructureInfo(EnumChatFormatting.GOLD + "12x" + EnumChatFormatting.GRAY + " Steel Pipe Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "8x" + EnumChatFormatting.GRAY + " Steel Gear Box Casing") + .addStructureInfo("") + .toolTipFinisher(AuthorEvgenWarGold); + return tt; + } + + @Override + public String[] getInfoData() { + ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); + info.add("Machine Tier: " + EnumChatFormatting.YELLOW + tierMachine); + info.add("Parallel: " + EnumChatFormatting.YELLOW + getMaxParallelRecipes()); + return info.toArray(new String[0]); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + + currenttip.add( + StatCollector.translateToLocal("GTPP.machines.tier") + ": " + + EnumChatFormatting.YELLOW + + tag.getInteger("tierMachine") + + EnumChatFormatting.RESET); + currenttip.add( + StatCollector.translateToLocal("GT5U.multiblock.curparallelism") + ": " + + EnumChatFormatting.BLUE + + tag.getInteger("parallel") + + EnumChatFormatting.RESET); + currenttip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector.translateToLocal("GT5U.GTPP_MULTI_WASH_PLANT.mode." + tag.getInteger("mode")) + + EnumChatFormatting.RESET); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("tierMachine", tierMachine); + tag.setInteger("parallel", getMaxParallelRecipes()); + tag.setInteger("mode", machineMode); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("tierMachine", tierMachine); + aNBT.setInteger("mMode", machineMode); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + tierMachine = aNBT.getInteger("tierMachine"); + machineMode = aNBT.getInteger("mMode"); + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + // don't rotate a washer, water will flow out. + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated(); + } + + @SideOnly(Side.CLIENT) + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_STEAM_WASHER_LOOP.resourceLocation; + } + + @Override + public boolean supportsMachineModeSwitch() { + return true; + } + + @Override + public int nextMachineMode() { + if (machineMode == MACHINEMODE_OREWASH) return MACHINEMODE_SIMPLEWASH; + else return MACHINEMODE_OREWASH; + } + + @Override + public void setMachineModeIcons() { + machineModeIcons.clear(); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_WASHPLANT); + machineModeIcons.add(GTUITextures.OVERLAY_BUTTON_MACHINEMODE_SIMPLEWASHER); + } + + @Override + public String getMachineModeName() { + return StatCollector.translateToLocal("GT5U.GTPP_MULTI_WASH_PLANT.mode." + machineMode); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + if (mUpdate < -250) mUpdate = 50; + if ((aTick % 1200) == 0) { + isBroken = true; + } + } + } + + private void checkForWater() { + ExtendedFacing facing = getExtendedFacing(); + final ForgeDirection frontFacing = facing.getDirection(); + final Flip curFlip = facing.getFlip(); + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + + double xOffset = getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = getExtendedFacing().getRelativeBackInWorld().offsetY; + + switch (frontFacing) { + case WEST -> { + xOffset -= 1; + zOffset += curFlip.isHorizontallyFlipped() ? -6 : 4; + } + case EAST -> { + xOffset -= 1; + zOffset += curFlip.isHorizontallyFlipped() ? 4 : -6; + } + case NORTH -> { + zOffset -= 1; + xOffset += curFlip.isHorizontallyFlipped() ? 4 : -6; + } + case SOUTH -> { + zOffset -= 1; + xOffset += curFlip.isHorizontallyFlipped() ? -6 : 4; + } + } + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + Block tBlock = this.getBaseMetaTileEntity() + .getWorld() + .getBlock((int) (i + xOffset + x), (int) (y + yOffset), (int) (j + zOffset + z)); + if (tBlock == Blocks.air) { + if (tryConsumeWater()) { + this.getBaseMetaTileEntity() + .getWorld() + .setBlock( + (int) (i + xOffset + x), + (int) (y + yOffset), + (int) (j + zOffset + z), + Blocks.water); + } + } + } + } + } + + private boolean tryConsumeWater() { + if (getStoredFluids() != null) { + for (FluidStack waterCapacity : this.getStoredFluids()) { + if (waterCapacity.isFluidEqual(FluidUtils.getWater(1000))) { + if (waterCapacity.amount >= 1000) { + waterCapacity.amount -= 1000; + return true; + } + } + } + } + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWaterPump.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWaterPump.java new file mode 100644 index 0000000000..8b11690673 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/steam/MTESteamWaterPump.java @@ -0,0 +1,373 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.AuthorEvgenWarGold; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +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.objects.GTRenderedTexture; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.VoidProtectionHelper; +import gregtech.common.blocks.BlockCasings9; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTESteamMultiBase; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTESteamWaterPump extends MTESteamMultiBase implements ISurvivalConstructable { + + public MTESteamWaterPump(String aName) { + super(aName); + } + + public MTESteamWaterPump(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESteamWaterPump(this.mName); + } + + @Override + public String getMachineType() { + return "Water Pump"; + } + + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + private static final int HORIZONTAL_OFF_SET = 1; + private static final int VERTICAL_OFF_SET = 2; + private static final int DEPTH_OFF_SET = 0; + private static final String tier1 = "tier1"; + private static final String tier2 = "tier2"; + + // Base amount of water produced per second, before applying humidity and tier modifiers. + private static final int BASE_WATER_PER_SECOND = 1_500; + private static final int PROGRESSION_TIME_TICKS = 20; + + private static final int BASE_STEAM_PER_SECOND = 1_500; + + private int mSetTier = 1; + + private float currentHumidity; + + private static final Fluid water = FluidRegistry.getFluid("water"); + + private FluidStack[] getWater() { + return new FluidStack[] { new FluidStack(water, calculateFinalWaterOutput()) }; + } + + private int mCountCasing; + + private float getHumidity() { + return this.getBaseMetaTileEntity() + .getWorld() + .getBiomeGenForCoords(getBaseMetaTileEntity().getXCoord(), getBaseMetaTileEntity().getZCoord()).rainfall; + } + + private int calculateFinalWaterOutput() { + return (int) (currentHumidity * BASE_WATER_PER_SECOND * mSetTier); + } + + // spotless:off + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + + STRUCTURE_DEFINITION = StructureDefinition.builder() + + .addShape( + tier1, + transpose( + new String[][] { + { " A ", " A ", "AAA", " A " }, + { " A ", " ", "A A", " A " }, + { "C~C", "CCC", "CCC", "CCC" } })) + .addShape( + tier2, + transpose( + new String[][] { + { " D ", " D ", "DDD", " D " }, + { " D ", " ", "D D", " D " }, + { "C~C", "CCC", "CCC", "CCC" } })) + .addElement('A', ofFrame(Materials.Bronze)) + .addElement('D', ofFrame(Materials.Steel)) + .addElement( + 'C', + ofChain( + buildSteamInput(MTESteamWaterPump.class) + .casingIndex(((BlockCasings9) GregTechAPI.sBlockCasings9).getTextureIndex(2)) + .dot(1) + .build(), + buildHatchAdder(MTESteamWaterPump.class) + .atLeast(OutputHatch) + .casingIndex(((BlockCasings9) GregTechAPI.sBlockCasings9).getTextureIndex(2)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCountCasing, ofBlock(GregTechAPI.sBlockCasings9, 2))) + ) + ) + .build(); + + } + return STRUCTURE_DEFINITION; + } + // spotless:on + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + if (stackSize.stackSize == 1) { + this.buildPiece(tier1, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); + } else { + this.buildPiece(tier2, stackSize, hintsOnly, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET); + } + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (this.mMachine) return -1; + int built = 0; + if (stackSize.stackSize == 1) { + mSetTier = 1; + built += this.survivialBuildPiece( + tier1, + stackSize, + HORIZONTAL_OFF_SET, + VERTICAL_OFF_SET, + DEPTH_OFF_SET, + elementBudget, + env, + false, + true); + } else { + mSetTier = 2; + built += this.survivialBuildPiece( + tier2, + stackSize, + HORIZONTAL_OFF_SET, + VERTICAL_OFF_SET, + DEPTH_OFF_SET, + elementBudget, + env, + false, + true); + } + return built; + } + + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCountCasing = 0; + mSetTier = 1; + if (!checkPiece(tier1, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) { + if (!checkPiece(tier2, HORIZONTAL_OFF_SET, VERTICAL_OFF_SET, DEPTH_OFF_SET)) return false; + mSetTier = 2; + } + + if (this.mOutputHatches.size() != 1 || this.mSteamInputFluids.size() != 1) return false; + + currentHumidity = getHumidity(); + return mCountCasing >= 9; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { + Textures.BlockIcons + .getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings9, 2)), + aActive ? getFrontOverlayActive() : getFrontOverlay() }; + } + return new ITexture[] { + Textures.BlockIcons.getCasingTextureForId(GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings9, 2)) }; + } + + @Override + protected GTRenderedTexture getFrontOverlay() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_WATER_PUMP); + } + + @Override + protected GTRenderedTexture getFrontOverlayActive() { + return new GTRenderedTexture(Textures.BlockIcons.OVERLAY_FRONT_WATER_PUMP_ACTIVE); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Water Pump") + .addInfo("Pumps Water based on humidity") + .addInfo("Has 2 tiers: Bronze and Steel") + .addInfo("Steel tier extracts 2x Water") + .addInfo( + EnumChatFormatting.AQUA + "Generates: " + + EnumChatFormatting.WHITE + + " humidity * tier * " + + BASE_WATER_PER_SECOND + + " L/s" + + EnumChatFormatting.AQUA + + " of Water." + + EnumChatFormatting.RESET) + .addInfo( + EnumChatFormatting.RED + "Consumes: " + + EnumChatFormatting.WHITE + + BASE_STEAM_PER_SECOND + + " L/s" + + EnumChatFormatting.RED + + " of Steam." + + EnumChatFormatting.RESET) + .addSeparator() + .beginStructureBlock(3, 3, 5, false) + .addInputHatch(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Any casing", 1) + .addStructureInfo( + EnumChatFormatting.WHITE + "Steam Input Hatch " + + EnumChatFormatting.GOLD + + "1" + + EnumChatFormatting.GRAY + + " Any casing") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 1) + .addStructureInfo(EnumChatFormatting.GOLD + "10" + EnumChatFormatting.GRAY + " Bronze Frame Box") + .addStructureInfo(EnumChatFormatting.GOLD + "10" + EnumChatFormatting.GRAY + " Wooden Casing") + .addStructureInfo("") + .addStructureInfo(EnumChatFormatting.BLUE + "Tier " + EnumChatFormatting.DARK_PURPLE + 2) + .addStructureInfo(EnumChatFormatting.GOLD + "10" + EnumChatFormatting.GRAY + " Steel Frame Box") + .addStructureInfo(EnumChatFormatting.GOLD + "10 " + EnumChatFormatting.GRAY + " Wooden Casing") + .addStructureInfo("") + .toolTipFinisher(AuthorEvgenWarGold); + return tt; + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + + VoidProtectionHelper voidProtection = new VoidProtectionHelper().setMachine(this) + .setFluidOutputs(getWater()) + .build(); + + if (voidProtection.isFluidFull()) { + mOutputFluids = null; + mMaxProgresstime = 0; + return CheckRecipeResultRegistry.FLUID_OUTPUT_FULL; + } else { + if (getTotalSteamStored() >= BASE_STEAM_PER_SECOND) { + mMaxProgresstime = PROGRESSION_TIME_TICKS; + tryConsumeSteam(BASE_STEAM_PER_SECOND); + mOutputFluids = getWater(); + updateSlots(); + return CheckRecipeResultRegistry.SUCCESSFUL; + } else return CheckRecipeResultRegistry.NO_RECIPE; + } + } + + @Override + public int getTierRecipes() { + return 0; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + if ((aTick % 1200) == 0) { + currentHumidity = getHumidity(); + } + } + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currenttip, accessor, config); + NBTTagCompound tag = accessor.getNBTData(); + + currenttip.add( + StatCollector.translateToLocal("GT5U.machines.tier") + ": " + + EnumChatFormatting.BLUE + + tag.getInteger("mSetTier") + + EnumChatFormatting.RESET); + currenttip.add( + StatCollector.translateToLocal("GT5U.biomes.humidity") + " " + + EnumChatFormatting.BLUE + + tag.getFloat("humidity") + + " %" + + EnumChatFormatting.RESET); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setFloat("humidity", currentHumidity * 100); + tag.setInteger("mSetTier", mSetTier); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mSetTier", mSetTier); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mSetTier = aNBT.getInteger("mSetTier"); + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); + } + + @SideOnly(Side.CLIENT) + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_WATER_PUMP_LOOP.resourceLocation; + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_AutoCrafter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_AutoCrafter.java deleted file mode 100644 index 6cae5e4bcd..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_AutoCrafter.java +++ /dev/null @@ -1,196 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.item.ItemStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; - -public class GT4Entity_AutoCrafter extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - protected GT_Recipe lastRecipeToBuffer; - private int casing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GT4Entity_AutoCrafter(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT4Entity_AutoCrafter(String mName) { - super(mName); - } - - @Override - public String getMachineType() { - return "Assembler"; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity tileEntity) { - return new GT4Entity_AutoCrafter(this.mName); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public int getMaxEfficiency(ItemStack itemStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiAutoCrafter; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Highly Advanced Assembling Machine") - .addInfo("200% faster than using single block machines of the same voltage") - .addInfo("Processes two items per voltage tier") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front Center") - .addCasingInfoRange("Bulk Production Frame", 10, 25, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - protected IIconContainer getActiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER_ACTIVE; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER; - } - - @Override - protected int getCasingTextureId() { - return TAE.getIndexFromPage(0, 10); - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GT4Entity_AutoCrafter.class) - .atLeast(InputBus, OutputBus, InputHatch, Maintenance, Energy, Muffler) - .casingIndex(TAE.getIndexFromPage(0, 10)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockCasings2Misc, 12)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack itemStack, boolean hintsOnly) { - buildPiece(mName, itemStack, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack itemStack, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, itemStack, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity baseMetaTileEntity, ItemStack itemStack) { - casing = 0; - return checkPiece(mName, 1, 1, 0) && casing >= 10 && checkHatch(); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.assemblerRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 3F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - public int getMaxParallelRecipes() { - return 2 * (Math.max(1, GT_Utility.getTier(getMaxInputVoltage()))); - } - - @Override - public String[] getExtraInfoData() { - final String running = (this.mMaxProgresstime > 0 ? "Auto-Crafter running" : "Auto-Crafter stopped"); - final String maintenance = (this.getIdealStatus() == this.getRepairStatus() ? "No Maintenance issues" - : "Needs Maintenance"); - String tSpecialText; - - if (lastRecipeToBuffer != null && lastRecipeToBuffer.mOutputs[0].getDisplayName() != null) { - tSpecialText = "Currently processing: " + lastRecipeToBuffer.mOutputs[0].getDisplayName(); - } else { - tSpecialText = "Currently processing: Nothing"; - } - - return new String[] { "Large Scale Auto-Assembler v1.01c", running, maintenance, tSpecialText }; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_ThermalBoiler.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_ThermalBoiler.java deleted file mode 100644 index 694444f423..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GT4Entity_ThermalBoiler.java +++ /dev/null @@ -1,353 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.stream.Stream; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT4Entity_ThermalBoiler extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - private static final int lavaFilterResilience = 30; // Damage lava filter with 1/n probability every operation. - private int dryHeatCounter = 0; // Counts up to dryHeatMaximum to check for explosion conditions. - private static final int dryHeatMaximum = 10; // 10 consecutive operations without water = BOOM - - private static final Item itemLavaFilter = ItemList.Component_LavaFilter.getItem(); - private static final Item itemObsidian = Item.getItemFromBlock(Blocks.obsidian); - private static final Fluid fluidWater = FluidRegistry.WATER; - private static final Fluid fluidDistilledWater = FluidUtils.getDistilledWater(1) - .getFluid(); - private static final Fluid fluidSteam = FluidUtils.getSteam(1) - .getFluid(); - private static final Fluid fluidSHSteam = FluidUtils.getSuperHeatedSteam(1) - .getFluid(); - - public GT4Entity_ThermalBoiler(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT4Entity_ThermalBoiler(String mName) { - super(mName); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT4Entity_ThermalBoiler(this.mName); - } - - @Override - public String getMachineType() { - return "Boiler"; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return (aStack != null && aStack.getItem() == itemLavaFilter) ? 1 : 0; - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.thermalBoilerRecipes; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return false; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - // Only test against the first fluid input in the recipe. - // We still want to run if we lack water (and subsequently explode). - @NotNull - @Override - protected Stream findRecipeMatches(@Nullable RecipeMap map) { - if (lastRecipe != null && depleteInput(lastRecipe.mFluidInputs[0], true)) { - return Stream.of(lastRecipe); - } - if (map == null) { - return Stream.empty(); - } - return map.getAllRecipes() - .stream() - .filter(recipe -> depleteInput(recipe.mFluidInputs[0], true)); - } - - @NotNull - @Override - protected GT_ParallelHelper createParallelHelper(@Nonnull GT_Recipe recipe) { - GT_Recipe adjustedRecipe = recipe.copy(); - - // Hack the recipe logic to not consume water, so that we can explode. - for (FluidStack inputFluid : adjustedRecipe.mFluidInputs) { - if (inputFluid != null - && (inputFluid.getFluid() == fluidWater || inputFluid.getFluid() == fluidDistilledWater)) { - inputFluid.amount = 0; - } - } - - // If we don't have a lava filter, remove non-obsidian outputs - // so that output space for them is not required if void protection is on. - if (!findLavaFilter()) { - for (ItemStack outputItem : adjustedRecipe.mOutputs) { - if (outputItem != null && outputItem.getItem() != itemObsidian) { - outputItem.stackSize = 0; - } - } - } - return super.createParallelHelper(adjustedRecipe); - } - }; - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - // super.checkProcessing() instantly sets efficiency to maximum, override this. - int efficiency = mEfficiency; - CheckRecipeResult result = super.checkProcessing(); - if (result.wasSuccessful()) { - mEfficiency = efficiency; - mEfficiencyIncrease = mMaxProgresstime * getEfficiencyIncrease(); - - // Adjust steam output based on efficiency. - if (mOutputFluids != null) { - for (FluidStack outputFluid : mOutputFluids) { - if (outputFluid != null - && (outputFluid.getFluid() == fluidSteam || outputFluid.getFluid() == fluidSHSteam)) { - - // Purely for display reasons, we don't actually make any EU. - if (outputFluid.getFluid() == fluidSteam) { - lEUt = outputFluid.amount / mMaxProgresstime / 2; - } else { - lEUt = outputFluid.amount / mMaxProgresstime; - } - - // Adjust steam output based on efficiency. - // TODO: This is not reflected in the GUI while the player has it open?? - if (mEfficiency < getMaxEfficiency(null)) { - outputFluid.amount = Math - .max(1, (outputFluid.amount * mEfficiency) / getMaxEfficiency(null)); - } - - // Consume water to run recipe. - if (!useWater(outputFluid.amount)) { - outputFluid.amount = 0; - lEUt = 0; - } - } - } - } - - // Remove non-obsidian outputs if we can't damage lava filter. - if (mOutputItems != null && mOutputItems.length > 0) { - if (!damageLavaFilter()) { - for (ItemStack outputItem : mOutputItems) { - if (outputItem != null && outputItem.getItem() != itemObsidian) { - outputItem.stackSize = 0; - } - } - } - } - } - return result; - } - - private boolean findLavaFilter() { - if (getControllerSlot() == null) { - for (var bus : mInputBusses) { - for (ItemStack stack : bus.mInventory) { - if (stack != null && stack.getItem() == itemLavaFilter) { - setGUIItemStack(stack); - return true; - } - } - } - return false; - } else { - return getControllerSlot().getItem() == itemLavaFilter; - } - } - - private boolean damageLavaFilter() { - if (!findLavaFilter()) return false; - if (getBaseMetaTileEntity().getRandomNumber(lavaFilterResilience) > 0) return true; - - ItemStack filter = getControllerSlot(); - if (filter.attemptDamageItem(1, getBaseMetaTileEntity().getWorld().rand)) { - mInventory[1] = null; - } - return true; - } - - private boolean useWater(int steamAmount) { - // Round up to not dupe decimal amounts of water. - int waterAmount = Math.floorDiv(steamAmount + GT_Values.STEAM_PER_WATER - 1, GT_Values.STEAM_PER_WATER); - if (depleteInput(FluidUtils.getWater(waterAmount)) || depleteInput(FluidUtils.getDistilledWater(waterAmount))) { - dryHeatCounter = 0; - return true; - } else { - // Add some leniency with explosions. - if (dryHeatCounter < dryHeatMaximum) { - ++dryHeatCounter; - } else { - GT_Log.exp.println(this.mName + " was too hot and had no more Water!"); - explodeMultiblock(); // Generate crater - } - return false; - } - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - public int getEfficiencyIncrease() { - return 12; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiThermalBoiler; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Thermal Boiler Controller") - .addInfo("Converts Water & Heat into Steam") - .addInfo("Filters raw materials from lava") - .addInfo("Explodes if water is not supplied") - .addInfo("Consult user manual for more information") - .addPollutionAmount(getPollutionPerSecond(null)) - .beginStructureBlock(3, 3, 3, true) - .addController("Front Center") - .addCasingInfoMin("Thermal Containment Casings", 10, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAThermalBoilerActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAThermalBoiler; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(1); - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GT4Entity_ThermalBoiler.class) - .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Muffler) - .casingIndex(TAE.getIndexFromPage(0, 1)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 11)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 10 && checkHatch(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_ElementalDuplicator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_ElementalDuplicator.java deleted file mode 100644 index 3b99849803..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_ElementalDuplicator.java +++ /dev/null @@ -1,352 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.Collections; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -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.common.blocks.textures.TexturesGtBlock; - -public class GregtechMTE_ElementalDuplicator extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - private final ArrayList mReplicatorDataOrbHatches = new ArrayList<>(); - private static final int CASING_TEXTURE_ID = TAE.getIndexFromPage(0, 3); - private int mCasing = 0; - - public GregtechMTE_ElementalDuplicator(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMTE_ElementalDuplicator(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMTE_ElementalDuplicator(this.mName); - } - - @Override - public String getMachineType() { - return "Replicator"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Produces Elemental Material from UU Matter") - .addInfo("Speed: +100% | EU Usage: 100% | Parallel: 8 * Tier") - .addInfo("Maximum 1x of each bus/hatch.") - .addInfo("Requires circuit 1-16 in your Data Orb Repository") - .addInfo("depending on what Data Orb you want to prioritize") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(9, 6, 9, true) - .addController("Top Center") - .addCasingInfoMin("Elemental Confinement Shell", 138, false) - .addCasingInfoMin("Matter Fabricator Casing", 24, false) - .addCasingInfoMin("Particle Containment Casing", 24, false) - .addCasingInfoMin("Matter Generation Coil", 24, false) - .addCasingInfoMin("High Voltage Current Capacitor", 20, false) - .addCasingInfoMin("Resonance Chamber III", 24, false) - .addCasingInfoMin("Modulator III", 16, false) - .addOtherStructurePart("Data Orb Repository", "1x", 1) - .addInputHatch("Any 1 dot hint", 1) - .addOutputBus("Any 1 dot hint", 1) - .addOutputHatch("Any 1 dot hint", 1) - .addEnergyHatch("Any 1 dot hint", 1) - .addMaintenanceHatch("Any 1 dot hint", 1) - .addMufflerHatch("Any 1 dot hint", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - - // h = Hatch - // c = Casing - - // a = MF Casing 1 - // b = Matter Gen Coil - - // d = Current Capacitor - // e = Particle - - // f = Resonance III - // g = Modulator III - - .addShape( - STRUCTURE_PIECE_MAIN, - (new String[][] { - { " ccc ", " ccccc ", " ccccccc ", "ccchhhccc", "ccch~hccc", "ccchhhccc", " ccccccc ", - " ccccc ", " ccc " }, - { " cac ", " abfba ", " abfgfba ", "cbfgdgfbc", "afgdddgfa", "cbfgdgfbc", " abfgfba ", - " abfba ", " cac " }, - { " cec ", " e e ", " e e ", "c d c", "e ddd e", "c d c", " e e ", - " e e ", " cec " }, - { " cec ", " e e ", " e e ", "c d c", "e ddd e", "c d c", " e e ", - " e e ", " cec " }, - { " cac ", " abfba ", " abfgfba ", "cbfgdgfbc", "afgdddgfa", "cbfgdgfbc", " abfgfba ", - " abfba ", " cac " }, - { " ccc ", " ccccc ", " ccccccc ", "ccchhhccc", "ccchhhccc", "ccchhhccc", " ccccccc ", - " ccccc ", " ccc " }, })) - .addElement('a', ofBlock(getCasingBlock4(), getCasingMeta6())) - .addElement('b', ofBlock(getCasingBlock4(), getCasingMeta7())) - .addElement('d', ofBlock(getCasingBlock2(), getCasingMeta2())) - .addElement('e', ofBlock(getCasingBlock2(), getCasingMeta3())) - .addElement('f', ofBlock(getCasingBlock3(), getCasingMeta4())) - .addElement('g', ofBlock(getCasingBlock3(), getCasingMeta5())) - .addElement('c', lazy(t -> onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) - .addElement( - 'h', - lazy( - t -> ofChain( - buildHatchAdder(GregtechMTE_ElementalDuplicator.class) - .atLeast(InputHatch, OutputBus, OutputHatch, Maintenance, Muffler, Energy) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .build(), - buildHatchAdder(GregtechMTE_ElementalDuplicator.class) - .hatchClass(GT_MetaTileEntity_Hatch_ElementalDataOrbHolder.class) - .shouldReject(x -> x.mReplicatorDataOrbHatches.size() >= 1) - .adder(GregtechMTE_ElementalDuplicator::addDataOrbHatch) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .build(), - onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta()))))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 4, 4, 0); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - boolean aDidBuild = checkPiece(STRUCTURE_PIECE_MAIN, 4, 4, 0); - if (this.mInputHatches.size() != 1 || (this.mOutputBusses.size() != 1 && this.mOutputHatches.size() != 0) - || this.mEnergyHatches.size() != 1 - || this.mReplicatorDataOrbHatches.size() != 1) { - return false; - } - log("Casings: " + mCasing); - return aDidBuild && mCasing >= 138 && checkHatch(); - } - - @Override - public int survivalConstruct(ItemStack itemStack, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, itemStack, 4, 4, 0, elementBudget, env, false, true); - } - - protected static int getCasingTextureIndex() { - return CASING_TEXTURE_ID; - } - - protected static Block getCasingBlock() { - return ModBlocks.blockCasings5Misc; - } - - protected static Block getCasingBlock2() { - return ModBlocks.blockSpecialMultiCasings; - } - - protected static Block getCasingBlock3() { - return ModBlocks.blockSpecialMultiCasings2; - } - - protected static Block getCasingBlock4() { - return ModBlocks.blockCasingsMisc; - } - - protected static int getCasingMeta() { - return 3; - } - - protected static int getCasingMeta2() { - return 12; - } - - protected static int getCasingMeta3() { - return 13; - } - - protected static int getCasingMeta4() { - return 2; - } - - protected static int getCasingMeta5() { - return 6; - } - - protected static int getCasingMeta6() { - return 9; - } - - protected static int getCasingMeta7() { - return 8; - } - - private boolean addDataOrbHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_ElementalDataOrbHolder) { - try { - return addToMachineListInternal(mReplicatorDataOrbHatches, aMetaTileEntity, aBaseCasingIndex); - } catch (Throwable t) { - t.printStackTrace(); - } - } - } - return false; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d == ForgeDirection.UP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAElementalDuplicatorActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAElementalDuplicator; - } - - @Override - protected int getCasingTextureId() { - return CASING_TEXTURE_ID; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.replicatorRecipes; - } - - @Override - public boolean isCorrectMachinePart(final ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic().setSpeedBonus(1F / 2F) - .enablePerfectOverclock() - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - protected void setupProcessingLogic(ProcessingLogic logic) { - super.setupProcessingLogic(logic); - for (GT_MetaTileEntity_Hatch_ElementalDataOrbHolder hatch : filterValidMTEs(mReplicatorDataOrbHatches)) { - ItemStack orb = hatch.getOrbByCircuit(); - logic.setSpecialSlotItem(orb); - break; - } - } - - @Override - public int getMaxParallelRecipes() { - return (8 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiMolecularTransformer; - } - - @Override - public int getDamageToComponent(final ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.isServerSide()) { - if (this.mUpdate == 1 || this.mStartUpCheck == 1) { - this.mReplicatorDataOrbHatches.clear(); - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public ArrayList getStoredInputs() { - ArrayList tItems = super.getStoredInputs(); - for (GT_MetaTileEntity_Hatch_ElementalDataOrbHolder tHatch : filterValidMTEs(mReplicatorDataOrbHatches)) { - tItems.add(tHatch.getOrbByCircuit()); - } - tItems.removeAll(Collections.singleton(null)); - return tItems; - } - - @Override - public boolean doesBindPlayerInventory() { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_FrothFlotationCell.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_FrothFlotationCell.java deleted file mode 100644 index b887c74a47..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_FrothFlotationCell.java +++ /dev/null @@ -1,287 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.List; -import java.util.Objects; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.helpers.FlotationRecipeHandler; - -public class GregtechMTE_FrothFlotationCell extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMTE_FrothFlotationCell(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMTE_FrothFlotationCell(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMTE_FrothFlotationCell(this.mName); - } - - @Override - public String getMachineType() { - return "Flotation Cell"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Process that milled ore!") - .addInfo("You can only ever process one type of material per controller") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(7, 9, 7, true) - .addController("Front Center") - .addCasingInfoMin("Inconel Reinforced Casing", 68, false) - .addCasingInfoMin("Flotation Casing", 52, false) - .addInputBus("Bottom Casing", 1) - .addInputHatch("Bottom Casing", 1) - .addOutputHatch("Bottom Casing", 1) - .addEnergyHatch("Bottom Casing", 1) - .addMaintenanceHatch("Bottom Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDFrothFlotationCellActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDFrothFlotationCell; - } - - @Override - protected int getCasingTextureId() { - return TAE.getIndexFromPage(2, 1); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.flotationCellRecipes; - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - new String[][] { { " ", " ", " X ", " X~X ", " X ", " ", " " }, - { " ", " F ", " FFF ", " FF FF ", " FFF ", " F ", " " }, - { " ", " F ", " F F ", " F F ", " F F ", " F ", " " }, - { " ", " F ", " F F ", " F F ", " F F ", " F ", " " }, - { " ", " F ", " F F ", " F F ", " F F ", " F ", " " }, - { " ", " F ", " F F ", " F F ", " F F ", " F ", " " }, - { " ", " F ", " F F ", " F F ", " F F ", " F ", " " }, - { " CCC ", " CCCCC ", "CCCCCCC", "CCCCCCC", "CCCCCCC", " CCCCC ", " CCC " }, - { " CCC ", " CCCCC ", "CCCCCCC", "CCCCCCC", "CCCCCCC", " CCCCC ", " CCC " }, }) - .addElement( - 'C', - buildHatchAdder(GregtechMTE_FrothFlotationCell.class) - .atLeast(InputBus, InputHatch, OutputHatch, Maintenance, Energy) - .casingIndex(getCasingTextureId()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 1)))) - .addElement('F', ofBlock(ModBlocks.blockSpecialMultiCasings, 9)) - .addElement('X', ofBlock(ModBlocks.blockCasings3Misc, 1)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 3, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 3, 3, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 3, 3, 0) && mCasing >= 68 - 4 && checkHatch(); - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d == ForgeDirection.UP; - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiFrothFlotationCell; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - /* - * Material checks Makes sure we can only ever use one type of material in this flotation cell. We used - * to depend on Alk's hash, but it's unreliable and user-hostile So we're using unlocalized name of - * material now. - */ - Material foundMaterial = FlotationRecipeHandler - .getMaterialOfMilledProduct(FlotationRecipeHandler.findMilledStack(recipe)); - String foundMaterialName = null; - if (foundMaterial != null) { - foundMaterialName = foundMaterial.getUnlocalizedName(); - } - - if (foundMaterialName == null) { - return CheckRecipeResultRegistry.NO_RECIPE; - } - - // Set material locked for this controller - if (lockedMaterialName == null) { - lockedMaterialName = foundMaterialName; - } - - // Check material match - if (!Objects.equals(lockedMaterialName, foundMaterialName)) { - return SimpleCheckRecipeResult.ofFailure("machine_locked_to_different_recipe"); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - }.enablePerfectOverclock(); - } - - /* - * Handle NBT - */ - - private String lockedMaterialName = null; - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - if (lockedMaterialName != null) { - aNBT.setString("lockedMaterialName", lockedMaterialName); - } - super.setItemNBT(aNBT); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (lockedMaterialName != null) { - aNBT.setString("lockedMaterialName", lockedMaterialName); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("lockedMaterialName", Constants.NBT.TAG_STRING)) { - lockedMaterialName = aNBT.getString("lockedMaterialName"); - } - } - - @Override - public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { - if (stack.hasTagCompound() && stack.getTagCompound() - .hasKey("lockedMaterialName")) { - tooltip.add( - StatCollector.translateToLocal("tooltip.flotationCell.lockedTo") + " " - + StatCollector.translateToLocal( - stack.getTagCompound() - .getString("lockedMaterialName"))); - } - } - - @Override - public String[] getExtraInfoData() { - return new String[] { "Locked material: " + lockedMaterialName }; - } - - @Override - public boolean isRecipeLockingEnabled() { - return lockedMaterialName != null && !lockedMaterialName.equals(""); - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - super.addUIWidgets(builder, buildContext); - builder.widget(new FakeSyncWidget.StringSyncer(() -> lockedMaterialName, val -> lockedMaterialName = val)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_NuclearReactor.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_NuclearReactor.java deleted file mode 100644 index 5bea6bb91f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMTE_NuclearReactor.java +++ /dev/null @@ -1,525 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Dynamo; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_RecipeConstants.LFTR_OUTPUT_POWER; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.filterByMTETier; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.nuclear.NUCLIDE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; - -public class GregtechMTE_NuclearReactor extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - protected int mFuelRemaining = 0; - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMTE_NuclearReactor(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMTE_NuclearReactor(final String aName) { - super(aName); - } - - @Override - public long maxEUStore() { - return (640000000L * (Math.min(16, this.mEnergyHatches.size()))) / 16L; - } - - @Override - public String getMachineType() { - return "Reactor"; - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.liquidFluorineThoriumReactorRecipes; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Liquid Fluoride Thorium Reactor.") - .addInfo("Produces energy and new elements from Radioactive Beta Decay!") - .addInfo("Input LFTB and a molten salt as fuel, and match the 4 Buffered Dynamo Hatches:") - .addInfo("LFTR Fuel 1 (4 EV Hatches), LFTR Fuel 2 (4 IV Hatches), LFTR Fuel 3 (4 LuV Hatches)") - .addInfo("If using better hatches for a worse fuel, only 1 hatch will output EU") - .addInfo("Outputs U233 every 10 seconds, on average, while the reactor is running") - .addInfo("Check NEI to see the other 3 outputs - they differ between fuels") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(7, 4, 7, true) - .addController("Bottom Center") - .addCasingInfoMin("Hastelloy-N Reactor Casing", 27, false) - .addCasingInfoMin("Zeron-100 Reactor Shielding", 26, false) - .addInputHatch("Top or bottom layer edges", 1) - .addOutputHatch("Top or bottom layer edges", 1) - .addDynamoHatch("Top or bottom layer edges", 1) - .addMufflerHatch("Top 3x3", 2) - .addStructureInfo("All dynamos must be between EV and LuV tier.") - .addStructureInfo("All other hatches must be IV+ tier.") - .addStructureInfo("4x Output Hatches or 1x Output Hatch (ME), 1+ Input Hatches") - .addStructureInfo("4x Dynamo Hatches, 4x Mufflers") - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public String[] getExtraInfoData() { - final String tRunning = (this.mMaxProgresstime > 0 ? "Reactor running" : "Reactor stopped"); - final String tMaintainance = (this.getIdealStatus() == this.getRepairStatus() ? "No Maintainance issues" - : "Needs Maintainance"); - - return new String[] { "Liquid Fluoride Thorium Reactor", tRunning, tMaintainance, - "Current Output: " + this.lEUt + " EU/t", "Fuel Remaining: " + this.mFuelRemaining + " Litres", - "Current Efficiency: " + (this.mEfficiency / 5) + "%", "Current Efficiency (Raw): " + (this.mEfficiency), - "It requires you to have 100% Efficiency." }; - } - - @Override - public boolean allowCoverOnSide(final ForgeDirection side, final GT_ItemStack aStack) { - return side != this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - boolean aWarmedUp = this.mEfficiency == this.getMaxEfficiency(null); - if (!aBaseMetaTileEntity.isActive() || !aWarmedUp) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)), - TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_NUCLEAR_REACTOR_ACTIVE) - .extFacing() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)), - TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_NUCLEAR_REACTOR) - .extFacing() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)) }; - } else if (aBaseMetaTileEntity.isActive() && aWarmedUp) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(13)), - TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_NUCLEAR_REACTOR_ACTIVE) - .extFacing() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(13)), - TextureFactory.builder() - .addIcon(Textures.BlockIcons.OVERLAY_FRONT_NUCLEAR_REACTOR) - .extFacing() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(13)) }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)) }; - } - - public final boolean addNuclearReactorEdgeList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo dynamo - && dynamo.getTierForStructure() >= 4 - && dynamo.getTierForStructure() <= 6) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input hatch - && hatch.getTierForStructure() >= 5) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output hatch - && hatch.getTierForStructure() >= 5) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } - } - return false; - } - - public final boolean addNuclearReactorTopList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler hatch && hatch.getTierForStructure() >= 5) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } - } - return false; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { - { "CCCCCCC", "COOOOOC", "COXXXOC", "COXXXOC", "COXXXOC", "COOOOOC", "CCCCCCC" }, - { "GGGGGGG", "G-----G", "G-----G", "G-----G", "G-----G", "G-----G", "GGGGGGG" }, - { "GGGGGGG", "G-----G", "G-----G", "G-----G", "G-----G", "G-----G", "GGGGGGG" }, - { "CCC~CCC", "COOOOOC", "COOOOOC", "COOOOOC", "COOOOOC", "COOOOOC", "CCCCCCC" }, })) - .addElement( - 'C', - ofChain( - buildHatchAdder(GregtechMTE_NuclearReactor.class).atLeast(Maintenance) - .casingIndex(TAE.GTPP_INDEX(12)) - .dot(1) - .build(), - buildHatchAdder(GregtechMTE_NuclearReactor.class).atLeast(InputHatch, OutputHatch) - .adder(GregtechMTE_NuclearReactor::addNuclearReactorEdgeList) - .hatchItemFilterAnd(t -> filterByMTETier(5, Integer.MAX_VALUE)) - .casingIndex(TAE.GTPP_INDEX(12)) - .dot(1) - .build(), - buildHatchAdder(GregtechMTE_NuclearReactor.class).atLeast(Dynamo) - .adder(GregtechMTE_NuclearReactor::addNuclearReactorEdgeList) - .hatchItemFilterAnd(t -> filterByMTETier(4, 6)) - .casingIndex(TAE.GTPP_INDEX(12)) - .dot(1) - .build(), - onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 12)))) - .addElement( - 'X', - buildHatchAdder(GregtechMTE_NuclearReactor.class).atLeast(Muffler) - .adder(GregtechMTE_NuclearReactor::addNuclearReactorTopList) - .hatchItemFilterAnd(t -> filterByMTETier(5, Integer.MAX_VALUE)) - .casingIndex(TAE.GTPP_INDEX(12)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 12)))) - .addElement('O', ofBlock(ModBlocks.blockCasingsMisc, 12)) - .addElement('G', ofBlock(ModBlocks.blockCasingsMisc, 13)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 3, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 3, 3, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - if (checkPiece(mName, 3, 3, 0) && mCasing >= 27) { - if ((mOutputHatches.size() >= 3 || canDumpFluidToME()) && mInputHatches.size() >= 1 - && mDynamoHatches.size() == 4 - && mMufflerHatches.size() == 4) { - this.turnCasingActive(false); - return true; - } - } - return false; - } - - // Alk's Life Lessons from Greg. - /* - * [23:41:15] xdir and zdir are x2 and not x3 [23:41:26] thats you - * issue [23:44:33] mmm? [23:44:49] Should they be x3? [23:44:50] you - * just do a x2, what is for a 5x5 multiblock [23:45:01] x3 is for a 7x7 one [23:45:06] - * I have no idea what that value does, tbh.. [23:45:15] its the offset [23:45:23] - * Debugging checkMachine has been a pain and I usually trash designs that don't work straight up.. - * [23:45:28] it determines the horizontal middle of the multiblock [23:45:47] - * which is in your case THREE blocks away from the controller [23:45:51] Ahh - * [23:45:57] and not 2 [23:46:06] Noted, thanks :D - */ - - @Override - public boolean isCorrectMachinePart(final ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(final ItemStack aStack) { - return 0; - } - - @Override - public int getDamageToComponent(final ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return true; - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMTE_NuclearReactor(this.mName); - } - - public boolean turnCasingActive(final boolean status) { - // TODO - if (this.mDynamoHatches != null) { - for (final GT_MetaTileEntity_Hatch_Dynamo hatch : this.mDynamoHatches) { - hatch.updateTexture(status ? TAE.GTPP_INDEX(13) : TAE.GTPP_INDEX(12)); - } - } - if (this.mMufflerHatches != null) { - for (final GT_MetaTileEntity_Hatch_Muffler hatch : this.mMufflerHatches) { - hatch.updateTexture(status ? TAE.GTPP_INDEX(13) : TAE.GTPP_INDEX(12)); - } - } - if (this.mOutputHatches != null) { - for (final GT_MetaTileEntity_Hatch_Output hatch : this.mOutputHatches) { - hatch.updateTexture(status ? TAE.GTPP_INDEX(13) : TAE.GTPP_INDEX(12)); - } - } - if (this.mInputHatches != null) { - for (final GT_MetaTileEntity_Hatch_Input hatch : this.mInputHatches) { - hatch.updateTexture(status ? TAE.GTPP_INDEX(13) : TAE.GTPP_INDEX(12)); - } - } - if (this.mMaintenanceHatches != null) { - for (final GT_MetaTileEntity_Hatch_Maintenance hatch : this.mMaintenanceHatches) { - hatch.updateTexture(status ? TAE.GTPP_INDEX(13) : TAE.GTPP_INDEX(12)); - } - } - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return GT_OverclockCalculator - .ofNoOverclock(recipe.getMetadataOrDefault(LFTR_OUTPUT_POWER, 0) * 4L, recipe.mDuration); - } - - @NotNull - @Override - public CheckRecipeResult process() { - CheckRecipeResult result = super.process(); - if (!result.wasSuccessful()) { - resetMultiProcessing(); - } - return result; - } - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - mFuelRemaining = 0; - int li2bef4 = 0; - FluidStack aFuelFluid = null; - for (FluidStack aFluidInput : recipe.mFluidInputs) { - if (!aFluidInput.getFluid() - .equals(NUCLIDE.Li2BeF4.getFluid())) { - aFuelFluid = aFluidInput; - break; - } - } - if (aFuelFluid != null) { - for (FluidStack fluidStack : inputFluids) { - if (fluidStack.isFluidEqual(aFuelFluid)) { - mFuelRemaining += fluidStack.amount; - } else if (fluidStack.getFluid() - .equals(NUCLIDE.Li2BeF4.getFluid())) { - li2bef4 += fluidStack.amount; - } - } - } - if (mFuelRemaining < 100) { - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - if (li2bef4 < 200) { - return SimpleCheckRecipeResult.ofFailure("no_li2bef4"); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - }; - } - - protected void resetMultiProcessing() { - this.mEfficiency = 0; - this.mLastRecipe = null; - stopMachine(ShutDownReasonRegistry.NONE); - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - // Warm up for 4~ minutes - if (mEfficiency < this.getMaxEfficiency(null)) { - this.mMaxProgresstime = 1; - this.mEfficiencyIncrease = 2; - this.lEUt = 0; - return SimpleCheckRecipeResult.ofSuccess("warm_up"); - } - CheckRecipeResult result = super.checkProcessing(); - if (result.wasSuccessful()) { - // We produce EU, so we negate the value, if negative - if (lEUt < 0) { - lEUt = -lEUt; - } - } - return result; - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - @Override - public void explodeMultiblock() { - this.mInventory[1] = null; - long explodevalue; - for (final MetaTileEntity tTileEntity : this.mInputBusses) { - explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); - tTileEntity.getBaseMetaTileEntity() - .doExplosion(explodevalue); - } - for (final MetaTileEntity tTileEntity : this.mOutputBusses) { - explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); - tTileEntity.getBaseMetaTileEntity() - .doExplosion(explodevalue); - } - for (final MetaTileEntity tTileEntity : this.mInputHatches) { - explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); - tTileEntity.getBaseMetaTileEntity() - .doExplosion(explodevalue); - } - for (final MetaTileEntity tTileEntity : this.mOutputHatches) { - explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); - tTileEntity.getBaseMetaTileEntity() - .doExplosion(explodevalue); - } - for (final MetaTileEntity tTileEntity : this.mDynamoHatches) { - explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); - tTileEntity.getBaseMetaTileEntity() - .doExplosion(explodevalue); - } - for (final MetaTileEntity tTileEntity : this.mMufflerHatches) { - explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); - tTileEntity.getBaseMetaTileEntity() - .doExplosion(explodevalue); - } - for (final MetaTileEntity tTileEntity : this.mEnergyHatches) { - explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); - tTileEntity.getBaseMetaTileEntity() - .doExplosion(explodevalue); - } - for (final MetaTileEntity tTileEntity : this.mMaintenanceHatches) { - explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); - tTileEntity.getBaseMetaTileEntity() - .doExplosion(explodevalue); - } - explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); - this.getBaseMetaTileEntity() - .doExplosion(explodevalue); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (aBaseMetaTileEntity.getWorld().isRemote) { - if (aBaseMetaTileEntity.isActive()) { - // Set casings active if we're warmed up. - this.turnCasingActive(this.mEfficiency == this.getMaxEfficiency(null)); - } else { - this.turnCasingActive(false); - } - } - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - // See if we're warmed up. - if (this.mEfficiency == this.getMaxEfficiency(null)) { - // Try output some Uranium-233 - if (MathUtils.randInt(1, 300) == 1) { - this.addOutput(ELEMENT.getInstance().URANIUM233.getFluidStack(MathUtils.randInt(1, 10))); - } - } - return super.onRunningTick(aStack); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mFuelRemaining", this.mFuelRemaining); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - this.mFuelRemaining = aNBT.getInteger("mFuelRemaining"); - super.loadNBTData(aNBT); - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java deleted file mode 100644 index 8017ffbf47..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java +++ /dev/null @@ -1,823 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static gregtech.common.items.ID_MetaTool_01.BRANCHCUTTER; -import static gregtech.common.items.ID_MetaTool_01.BUZZSAW_HV; -import static gregtech.common.items.ID_MetaTool_01.BUZZSAW_LV; -import static gregtech.common.items.ID_MetaTool_01.BUZZSAW_MV; -import static gregtech.common.items.ID_MetaTool_01.CHAINSAW_HV; -import static gregtech.common.items.ID_MetaTool_01.CHAINSAW_LV; -import static gregtech.common.items.ID_MetaTool_01.CHAINSAW_MV; -import static gregtech.common.items.ID_MetaTool_01.KNIFE; -import static gregtech.common.items.ID_MetaTool_01.POCKET_BRANCHCUTTER; -import static gregtech.common.items.ID_MetaTool_01.POCKET_KNIFE; -import static gregtech.common.items.ID_MetaTool_01.POCKET_MULTITOOL; -import static gregtech.common.items.ID_MetaTool_01.POCKET_SAW; -import static gregtech.common.items.ID_MetaTool_01.POCKET_WIRECUTTER; -import static gregtech.common.items.ID_MetaTool_01.SAW; -import static gregtech.common.items.ID_MetaTool_01.WIRECUTTER; -import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase.GTPPHatchElement.TTEnergy; - -import java.util.ArrayList; -import java.util.EnumMap; -import java.util.HashMap; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemShears; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.fluids.FluidStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import forestry.api.arboriculture.IToolGrafter; -import forestry.api.arboriculture.ITree; -import forestry.api.arboriculture.TreeManager; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Mods; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.VoidProtectionHelper; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.items.ID_MetaTool_01; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechTools; - -public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - public static int CASING_TEXTURE_ID; - private static final int TICKS_PER_OPERATION = 100; - private static final int TOOL_DAMAGE_PER_OPERATION = 1; - private static final int TOOL_CHARGE_PER_OPERATION = 32; - - private int mCasing; - public static String mCasingName = "Sterile Farm Casing"; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntityTreeFarm(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - CASING_TEXTURE_ID = TAE.getIndexFromPage(1, 15); - } - - public GregtechMetaTileEntityTreeFarm(final String aName) { - super(aName); - CASING_TEXTURE_ID = TAE.getIndexFromPage(1, 15); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntityTreeFarm(this.mName); - } - - @Override - public String getMachineType() { - return "Tree Farm"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller block for the Tree Growth Simulator") - .addInfo("Farms and harvests trees using EU") - .addInfo("Place a sapling in the controller slot") - .addInfo("Place a tool in an input bus") - .addInfo("Different tools are required for different outputs") - .addInfo("Advanced tools multiply output amount") - .addInfo(" Logs: Saw (1x), Buzzsaw (2x), Chainsaw (4x)") - .addInfo(" Saplings: Branch Cutter (1x), Grafter (3x)") - .addInfo(" Leaves: Shears (1x), Wire Cutter (2x), Automatic Snips (4x)") - .addInfo(" Fruit: Knife (1x)") - .addInfo("Multiple tools can be used at the same time") - .addSeparator() - .addInfo("Work time is fixed at 5 seconds") - .addInfo("Energy input tier multiplies output further") - .addInfo("Output multiplier is equal to: 2*tier^2 - 2*tier + 5") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 3, true) - .addController("Front center") - .addCasingInfoMin(mCasingName, 8, false) - .addInputBus("Any casing", 1) - .addStructureInfo( - EnumChatFormatting.YELLOW + "Stocking Input Busses and Crafting Input Busses/Buffers are not allowed!") - .addOutputBus("Any casing", 1) - .addEnergyHatch("Any casing", 1) - .addMaintenanceHatch("Any casing", 1) - .addMufflerHatch("Any casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCATreeFarmActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCATreeFarm; - } - - @Override - protected int getCasingTextureId() { - return CASING_TEXTURE_ID; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 1, 0) && mCasing >= 8 && checkHatch(); - } - - @Override - public boolean addInputBusToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - // Tools from a stocking inout bus can not be damaged, this would cause an infinite durability exploit. - // Therefore disallow ME input bus. - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus_ME) return false; - return super.addInputBusToMachineList(aTileEntity, aBaseCasingIndex); - } - - @Override - public boolean supportsCraftingMEBuffer() { - return false; - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - @Override - public boolean supportsBatchMode() { - // Batch mode would not do anything, processing time is fixed at 100 ticks. - return false; - } - - @Override - public boolean isBatchModeEnabled() { - return false; - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiTreeFarm; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntityTreeFarm.class) - .atLeast( - InputHatch, - OutputHatch, - InputBus, - OutputBus, - Maintenance, - Energy.or(TTEnergy), - Muffler) - .casingIndex(CASING_TEXTURE_ID) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 15)))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - /* Processing logic. */ - - @Override - public boolean isCorrectMachinePart(final ItemStack aStack) { - if (aStack == null) return false; - if (isValidSapling(aStack)) return true; - /* - * In previous versions, a saw used to go in the controller slot. We do not want an update to stop processing of - * a machine set up like this. Instead, a sapling is placed in this slot at the start of the next operation. - */ - if (aStack.getItem() instanceof GT_MetaGenerated_Tool_01) return true; - return false; - } - - @Override - public RecipeMap getRecipeMap() { - // Only for NEI, not used in processing logic. - return GTPPRecipeMaps.treeGrowthSimulatorFakeRecipes; - } - - /** - * Valid processing modes (types of output) for the Tree Growth Simulator. - */ - public enum Mode { - LOG, - SAPLING, - LEAVES, - FRUIT - } - - /** - * Edit this to change relative yields for different modes. For example, logs are output at 5 times the rate of - * saplings. - */ - private static final EnumMap modeMultiplier = new EnumMap<>(Mode.class); - static { - modeMultiplier.put(Mode.LOG, 5); - modeMultiplier.put(Mode.SAPLING, 1); - modeMultiplier.put(Mode.LEAVES, 2); - modeMultiplier.put(Mode.FRUIT, 1); - } - - /** - * Return the output multiplier for a given power tier. - * - * @param tier Power tier the machine runs on. - * @return Factor to multiply all outputs by. - */ - private static int getTierMultiplier(int tier) { - /* - * Where does this formula come from? [12:57 AM] boubou_19: i did. Basically Pandoro measured the output of a - * WA-ed farming station for each tier of WA, then i computed the Lagrange interpolating polynomial of his - * dataset, which gave this - */ - return (2 * (tier * tier)) - (2 * tier) + 5; - } - - /** - * Key of this map is the registry name of the sapling, followed by ":", and the sapling's metadata value. - *

- * The value of the map is a list of products by {@link Mode}. Products for some modes can be null if the tree does - * not produce anything in that mode (for example, it has no fruit). - */ - public static final HashMap> treeProductsMap = new HashMap<>(); - - @Override - public ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Override - @Nonnull - public CheckRecipeResult process() { - if (inputItems == null) { - inputItems = new ItemStack[0]; - } - if (inputFluids == null) { - inputFluids = new FluidStack[0]; - } - - ItemStack sapling = findSapling(); - if (sapling == null) return SimpleCheckRecipeResult.ofFailure("no_sapling"); - - EnumMap outputPerMode = getOutputsForSapling(sapling); - if (outputPerMode == null) { - // This should usually not be possible, outputs for all valid saplings should be defined. - Logger.INFO("No output found for sapling: " + sapling.getDisplayName()); - return SimpleCheckRecipeResult.ofFailure("no_output_for_sapling"); - } - - int tier = Math.max(1, GT_Utility.getTier(availableVoltage * availableAmperage)); - int tierMultiplier = getTierMultiplier(tier); - - List outputs = new ArrayList<>(); - for (Mode mode : Mode.values()) { - ItemStack output = outputPerMode.get(mode); - if (output == null) continue; // This sapling has no output in this mode. - - // Find a tool to use in this mode. - int toolMultiplier = useToolForMode(mode, false); - if (toolMultiplier < 0) continue; // No valid tool for this mode found. - - // Increase output by the relevant multipliers. - ItemStack out = output.copy(); - out.stackSize *= tierMultiplier * modeMultiplier.get(mode) * toolMultiplier; - outputs.add(out); - } - - if (outputs.isEmpty()) { - // No outputs can be produced using the tools we have available. - return SimpleCheckRecipeResult.ofFailure("no_tools"); - } - - outputItems = outputs.toArray(new ItemStack[0]); - - VoidProtectionHelper voidProtection = new VoidProtectionHelper().setMachine(machine) - .setItemOutputs(outputItems) - .build(); - if (voidProtection.isItemFull()) { - return CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; - } - - duration = TICKS_PER_OPERATION; - calculatedEut = GT_Values.VP[tier]; - - for (Mode mode : Mode.values()) { - if (outputPerMode.get(mode) != null) { - useToolForMode(mode, true); - } - } - - return SimpleCheckRecipeResult.ofSuccess("growing_trees"); - } - }; - } - - /** - * Attempts to find a tool appropriate for the given mode, and damage/discharge it by one use. - * - * @param mode The mode to use. This specifies which tools are valid. - * @param shouldDamage if true, then the tool will have reduced durability/charge - */ - - private int useToolForMode(Mode mode, boolean shouldDamage) { - final ArrayList inputs = getStoredInputs(); - final int inputsSize = inputs.size(); - for (int i = inputsSize - 1; i >= 0; i--) { - ItemStack stack = inputs.get(i); - - int toolMultiplier = getToolMultiplier(stack, mode); - if (toolMultiplier < 0) { - continue; - } - boolean canDamage = shouldDamage - ? GT_ModHandler.damageOrDechargeItem(stack, TOOL_DAMAGE_PER_OPERATION, TOOL_CHARGE_PER_OPERATION, null) - : GT_ModHandler.damageOrDechargeItem(stack, 0, 0, null); - if (shouldDamage) { - if (!canDamage || GT_ModHandler.isElectricItem(stack) - && !GT_ModHandler.canUseElectricItem(stack, TOOL_CHARGE_PER_OPERATION)) { - depleteInput(stack); - addOutput(stack); - } - } - if (canDamage) { - return toolMultiplier; - } - } - return -1; - } - - /** - * Calculate output multiplier for a given tool and mode. - * - * @param toolStack The tool to use. - * @param mode The mode to use. - * @return Output multiplier for the given tool used in the given mode. If the tool is not appropriate for this - * mode, returns -1. - */ - public static int getToolMultiplier(ItemStack toolStack, Mode mode) { - Item tool = toolStack.getItem(); - int damage = toolStack.getItemDamage(); - switch (mode) { - case LOG: - if (tool instanceof GT_MetaGenerated_Tool_01) { - - if (damage == SAW.ID || damage == POCKET_SAW.ID || damage == POCKET_MULTITOOL.ID) { - return 1; - } - - if (damage == BUZZSAW_LV.ID || damage == BUZZSAW_MV.ID || damage == BUZZSAW_HV.ID) { - return 2; - } - - if (damage == CHAINSAW_LV.ID || damage == CHAINSAW_MV.ID || damage == CHAINSAW_HV.ID) { - return 4; - } - } - break; - - case SAPLING: - if (tool instanceof GT_MetaGenerated_Tool_01 - && (damage == BRANCHCUTTER.ID || damage == POCKET_BRANCHCUTTER.ID - || damage == POCKET_MULTITOOL.ID)) { - return 1; - } - if (tool instanceof IToolGrafter && tool.isDamageable()) { - return 3; - } - break; - - case LEAVES: - // Do not allow unbreakable tools. Operation should have a running cost. - if (tool instanceof ItemShears && tool.isDamageable()) { - return 1; - } - if (tool instanceof GT_MetaGenerated_Tool_01) { - if (damage == POCKET_MULTITOOL.ID) { - return 1; - } - if (damage == WIRECUTTER.ID || damage == POCKET_WIRECUTTER.ID) { - return 2; - } - } - if (tool instanceof MetaGeneratedGregtechTools) { - if (toolStack.getItemDamage() == MetaGeneratedGregtechTools.ELECTRIC_SNIPS) { - return 4; - } - } - break; - - case FRUIT: - if (tool instanceof GT_MetaGenerated_Tool_01 - && (damage == KNIFE.ID || damage == POCKET_KNIFE.ID || damage == POCKET_MULTITOOL.ID)) { - return 1; - } - break; - } - - // No valid tool was found. - return -1; - } - - /* Handling saplings. */ - - /** - * Finds a valid sapling from input buses, and places it into the controller slot. - * - * @return The sapling that was found (now in the controller slot). - */ - private ItemStack findSapling() { - ItemStack controllerSlot = getControllerSlot(); - - if (isValidSapling(controllerSlot)) { - return controllerSlot; - } - - if (controllerSlot != null) { - // Non-sapling item in controller slot. This could be a saw from an older version of the TGS. - // We first try to swap it with a sapling from an input bus to not interrupt existing setups. - if (!legacyToolSwap()) { - // Swap failed, output whatever is blocking the slot. - addOutput(controllerSlot); - mInventory[1] = null; - } - } - - // Here controller slot is empty, find a valid sapling to use. - for (ItemStack stack : getStoredInputs()) { - if (isValidSapling(stack)) { - mInventory[1] = stack.splitStack(1); - return mInventory[1]; - } - } - - // No saplings were found. - return null; - } - - /** - * In previous versions, the saw used to be placed in the controller slot and the sapling into an input bus. We do - * not want to break existing setups like this, so we attempt to swap the two if possible. - * - * @return True on success, false otherwise. - */ - private boolean legacyToolSwap() { - ItemStack controllerSlot = getControllerSlot(); - if (controllerSlot == null || !(controllerSlot.getItem() instanceof GT_MetaGenerated_Tool_01)) return false; - - for (GT_MetaTileEntity_Hatch_InputBus inputBus : filterValidMTEs(mInputBusses)) { - ItemStack[] inventory = inputBus.getRealInventory(); - for (int slot = 0; slot < inventory.length; ++slot) { - if (isValidSapling(inventory[slot])) { - // Do the swap. - mInventory[1] = inventory[slot]; - inventory[slot] = controllerSlot; - inputBus.updateSlots(); - return true; - } - } - } - return false; - } - - /** - * Check if an ItemStack is a sapling that can be farmed. - * - * @param stack An ItemStack. - * @return True if stack is a valid sapling that can be farmed. - */ - private boolean isValidSapling(ItemStack stack) { - if (stack == null) return false; - String registryName = Item.itemRegistry.getNameForObject(stack.getItem()); - return treeProductsMap.containsKey(registryName + ":" + stack.getItemDamage()) - || "Forestry:sapling".equals(registryName); - } - - /** - * Get a list of possible outputs for a sapling, for each mode. This is either recovered from - * {@link #treeProductsMap}, or generated from stats of Forestry saplings. - * - * @param sapling A sapling to farm. - * @return A map of outputs for each mode. Outputs for some modes might be null. - */ - private static EnumMap getOutputsForSapling(ItemStack sapling) { - String registryName = Item.itemRegistry.getNameForObject(sapling.getItem()); - if ("Forestry:sapling".equals(registryName)) { - return getOutputsForForestrySapling(sapling); - } else { - return treeProductsMap.get(registryName + ":" + sapling.getItemDamage()); - } - } - - /** - * Calculate outputs for Forestry saplings. Default amounts stored in {@link #treeProductsMap} are adjusted based - * the genetics of the input sapling. - *

- * Relevant stats: - *

    - *
  • height, girth: Affects log output.
  • - *
  • fertility (called Saplings in game): Affects sapling output.
  • - *
  • yield: Affects fruit output.
  • - *
- * See {@link forestry.core.genetics.alleles.EnumAllele} for detailed numeric values for each allele. - * - * @param sapling A sapling to farm. Must be a Forestry sapling with a valid genome. - * @return A map of outputs for each mode. Outputs for some modes might be null. - */ - private static EnumMap getOutputsForForestrySapling(ItemStack sapling) { - ITree tree = TreeManager.treeRoot.getMember(sapling); - if (tree == null) return null; - - String speciesUUID = tree.getIdent(); - - EnumMap defaultMap = treeProductsMap.get("Forestry:sapling:" + speciesUUID); - if (defaultMap == null) return null; - - // We need to make a new map so that we don't modify the stored amounts of outputs. - EnumMap adjustedMap = new EnumMap<>(Mode.class); - - ItemStack log = defaultMap.get(Mode.LOG); - if (log != null) { - double height = Math.max( - 3 * (tree.getGenome() - .getHeight() - 1), - 0) + 1; - double girth = tree.getGenome() - .getGirth(); - - log = log.copy(); - log.stackSize = (int) (log.stackSize * height * girth); - adjustedMap.put(Mode.LOG, log); - } - - ItemStack saplingOut = defaultMap.get(Mode.SAPLING); - if (saplingOut != null) { - // Lowest = 0.01 ... Average = 0.05 ... Highest = 0.3 - double fertility = tree.getGenome() - .getFertility() * 10; - - // Return a copy of the *input* sapling, retaining its genetics. - int stackSize = Math.max(1, (int) (saplingOut.stackSize * fertility)); - saplingOut = sapling.copy(); - saplingOut.stackSize = stackSize; - adjustedMap.put(Mode.SAPLING, saplingOut); - } - - ItemStack leaves = defaultMap.get(Mode.LEAVES); - if (leaves != null) { - adjustedMap.put(Mode.LEAVES, leaves.copy()); - } - - ItemStack fruit = defaultMap.get(Mode.FRUIT); - if (fruit != null) { - // Lowest = 0.025 ... Average = 0.2 ... Highest = 0.4 - double yield = tree.getGenome() - .getYield() * 10; - - fruit = fruit.copy(); - fruit.stackSize = (int) (fruit.stackSize * yield); - adjustedMap.put(Mode.FRUIT, fruit); - } - - return adjustedMap; - } - - /* Recipe registration. */ - - /** - * Registers outputs for a sapling. This method assumes that output in mode SAPLING is the same as the input - * sapling. Output amount is further modified by mode, machine tier, and tool used. Recipes are added in - * {@link gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoader_TreeFarm}. - * - * @param sapling The input sapling to farm, and also the output in mode SAPLING. - * @param log ItemStack to output in mode LOG. - * @param leaves ItemStack to output in mode LEAVES. - * @param fruit ItemStack to output in mode FRUIT. - */ - public static void registerTreeProducts(ItemStack sapling, ItemStack log, ItemStack leaves, ItemStack fruit) { - registerTreeProducts(sapling, log, sapling, leaves, fruit); - } - - /** - * Registers outputs for a sapling. Output amount is further modified by mode, machine tier, and tool used. Recipes - * are added in {@link gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoader_TreeFarm}. - * - * @param saplingIn The input sapling to farm. - * @param log ItemStack to output in mode LOG. - * @param saplingOut ItemStack to output in mode SAPLING. - * @param leaves ItemStack to output in mode LEAVES. - * @param fruit ItemStack to output in mode FRUIT. - */ - public static void registerTreeProducts(ItemStack saplingIn, ItemStack log, ItemStack saplingOut, ItemStack leaves, - ItemStack fruit) { - String key = Item.itemRegistry.getNameForObject(saplingIn.getItem()) + ":" + saplingIn.getItemDamage(); - EnumMap map = new EnumMap<>(Mode.class); - if (log != null) map.put(Mode.LOG, log); - if (saplingOut != null) map.put(Mode.SAPLING, saplingOut); - if (leaves != null) map.put(Mode.LEAVES, leaves); - if (fruit != null) map.put(Mode.FRUIT, fruit); - treeProductsMap.put(key, map); - - if (!addFakeRecipeToNEI(saplingIn, log, saplingOut, leaves, fruit)) { - Logger.INFO("Registering NEI fake recipe for " + key + " failed!"); - } - } - - /** - * For Forestry trees, the output amounts depend on the genetics of the sapling. Here we register only the types of - * items to output. In {@link #getOutputsForForestrySapling(ItemStack)} these outputs are then multiplied according - * to the stats of the real sapling that is in the controller slot. - */ - public static void registerForestryTree(String speciesUID, ItemStack sapling, ItemStack log, ItemStack leaves, - ItemStack fruit) { - String key = "Forestry:sapling:" + speciesUID; - EnumMap map = new EnumMap<>(Mode.class); - map.put(Mode.LOG, log); - map.put(Mode.SAPLING, sapling); - map.put(Mode.LEAVES, leaves); - map.put(Mode.FRUIT, fruit); - treeProductsMap.put(key, map); - - // In the NEI recipe we want to display outputs adjusted for the default genetics of this tree type. - // To do this we use the same method as when calculating real outputs. - map = getOutputsForForestrySapling(sapling); - if (map == null) { - Logger.INFO("Could not create Forestry tree output map for " + speciesUID); - return; - } - addFakeRecipeToNEI( - sapling, - map.get(Mode.LOG), - map.get(Mode.SAPLING), - map.get(Mode.LEAVES), - map.get(Mode.FRUIT)); - } - - /** - * This array is used to get the rotating display of items in NEI showing all possible tools for a given mode. - */ - private static final ItemStack[][] altToolsForNEI; - static { - GT_MetaGenerated_Tool toolInstance = GT_MetaGenerated_Tool_01.INSTANCE; - altToolsForNEI = new ItemStack[][] { - // Mode.LOG - { toolInstance.getToolWithStats(SAW.ID, 1, null, null, null), - toolInstance.getToolWithStats(POCKET_SAW.ID, 1, null, null, null), - toolInstance.getToolWithStats(ID_MetaTool_01.BUZZSAW_LV.ID, 1, null, null, null), - toolInstance.getToolWithStats(CHAINSAW_LV.ID, 1, null, null, null), - toolInstance.getToolWithStats(ID_MetaTool_01.BUZZSAW_MV.ID, 1, null, null, null), - toolInstance.getToolWithStats(CHAINSAW_MV.ID, 1, null, null, null), - toolInstance.getToolWithStats(ID_MetaTool_01.BUZZSAW_HV.ID, 1, null, null, null), - toolInstance.getToolWithStats(CHAINSAW_HV.ID, 1, null, null, null), }, - // Mode.SAPLING - { toolInstance.getToolWithStats(ID_MetaTool_01.BRANCHCUTTER.ID, 1, null, null, null), - toolInstance.getToolWithStats(ID_MetaTool_01.POCKET_BRANCHCUTTER.ID, 1, null, null, null), - GT_ModHandler.getModItem(Mods.Forestry.ID, "grafter", 1, 0), }, - // Mode.LEAVES - { new ItemStack(Items.shears), - toolInstance.getToolWithStats(ID_MetaTool_01.WIRECUTTER.ID, 1, null, null, null), - toolInstance.getToolWithStats(ID_MetaTool_01.POCKET_WIRECUTTER.ID, 1, null, null, null), - MetaGeneratedGregtechTools.getInstance() - .getToolWithStats(MetaGeneratedGregtechTools.ELECTRIC_SNIPS, 1, null, null, null), }, - // Mode.FRUIT - { toolInstance.getToolWithStats(ID_MetaTool_01.KNIFE.ID, 1, null, null, null), - toolInstance.getToolWithStats(ID_MetaTool_01.POCKET_KNIFE.ID, 1, null, null, null), } }; - } - - /** - * Add a recipe for this tree to NEI. These recipes are only used in NEI, they are never used for processing logic. - * - * @return True if the recipe was added successfully. - */ - public static boolean addFakeRecipeToNEI(ItemStack saplingIn, ItemStack log, ItemStack saplingOut, ItemStack leaves, - ItemStack fruit) { - int recipeCount = GTPPRecipeMaps.treeGrowthSimulatorFakeRecipes.getAllRecipes() - .size(); - - // Sapling goes into the "special" slot. - ItemStack specialStack = saplingIn.copy(); - specialStack.stackSize = 0; - - /* - * Calculate the correct amount of outputs for each mode. The amount displayed in NEI should take into account - * the mode multiplier, but not tool/tier multipliers as those can change dynamically. If the sapling has an - * output in this mode, also add the tools usable for this mode as inputs. - */ - ItemStack[][] inputStacks = new ItemStack[Mode.values().length][]; - ItemStack[] outputStacks = new ItemStack[Mode.values().length]; - - for (Mode mode : Mode.values()) { - ItemStack output = switch (mode) { - case LOG -> log; - case SAPLING -> saplingOut; - case LEAVES -> leaves; - case FRUIT -> fruit; - }; - if (output != null) { - int ordinal = mode.ordinal(); - inputStacks[ordinal] = altToolsForNEI[ordinal]; - outputStacks[ordinal] = output.copy(); - outputStacks[ordinal].stackSize *= modeMultiplier.get(mode); - } - } - - Logger.INFO( - "Adding Tree Growth Simulation NEI recipe for " + specialStack.getDisplayName() - + " -> " - + ItemUtils.getArrayStackNames(outputStacks)); - - GTPPRecipeMaps.treeGrowthSimulatorFakeRecipes.addFakeRecipe( - false, - new GT_Recipe.GT_Recipe_WithAlt( - false, - null, // All inputs are taken from aAtl argument. - outputStacks, - specialStack, - null, - null, - null, - TICKS_PER_OPERATION, - 0, - recipeCount, // special value, also sorts recipes correctly in order of addition. - inputStacks)); - - return GTPPRecipeMaps.treeGrowthSimulatorFakeRecipes.getAllRecipes() - .size() > recipeCount; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_AlloyBlastSmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_AlloyBlastSmelter.java deleted file mode 100644 index 506a68ea12..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_AlloyBlastSmelter.java +++ /dev/null @@ -1,233 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -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.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -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; - -public class GregtechMetaTileEntity_AlloyBlastSmelter - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mMode = 0; - private boolean isUsingControllerCircuit = false; - private static Item circuit; - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_AlloyBlastSmelter(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_AlloyBlastSmelter(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_AlloyBlastSmelter(this.mName); - } - - @Override - public String getMachineType() { - return "Fluid Alloy Cooker"; - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (aNBT.hasKey("isBussesSeparate")) { - inputSeparation = aNBT.getBoolean("isBussesSeparate"); - } - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Alloy Blast Smelter") - .addInfo("Allows Complex GT++ alloys to be created") - .addInfo("Accepts only one Energy Hatch") - .addInfo("Circuit for recipe goes in the Input Bus or GUI slot") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 4, 3, true) - .addController("Bottom Center") - .addCasingInfoMin("Blast Smelter Casings", 5, false) - .addCasingInfoMin("Blast Smelter Heat Containment Coils", 16, false) - .addInputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "HHH", "H-H", "HHH" }, - { "C~C", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_AlloyBlastSmelter.class) - .atLeast(InputBus, InputHatch, OutputBus, OutputHatch, Maintenance, Energy, Muffler) - .casingIndex(TAE.GTPP_INDEX(15)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 15)))) - .addElement('H', ofBlock(ModBlocks.blockCasingsMisc, 14)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 3, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 1, 3, 0) && mCasing >= 5 && mEnergyHatches.size() == 1 && checkHatch(); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_INDUCTION_LOOP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDAlloyBlastSmelterActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDAlloyBlastSmelter; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(15); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.alloyBlastSmelterRecipes; - } - - @Override - public boolean isCorrectMachinePart(final ItemStack aStack) { - if (this.getBaseMetaTileEntity() - .isServerSide()) { - // Get Controller Circuit - if (circuit == null) { - circuit = GT_Utility.getIntegratedCircuit(0) - .getItem(); - } - if (aStack != null && aStack.getItem() == circuit) { - this.mMode = aStack.getItemDamage(); - return this.isUsingControllerCircuit = true; - } else { - if (aStack == null) { - this.isUsingControllerCircuit = false; - return true; // Allowed empty - } - Logger.WARNING("Not circuit in GUI inputs."); - return this.isUsingControllerCircuit = false; - } - } - Logger.WARNING("No Circuit, clientside."); - return this.isUsingControllerCircuit = false; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic(); - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - inputSeparation = !inputSeparation; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiABS; - } - - @Override - public int getDamageToComponent(final ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Cyclotron.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Cyclotron.java deleted file mode 100644 index c85e406b6c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Cyclotron.java +++ /dev/null @@ -1,338 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.item.chemistry.IonParticles; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntity_Cyclotron extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_Cyclotron(int aID, String aName, String aNameRegional, int tier) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_Cyclotron(String aName) { - super(aName); - } - - @Override - public String getMachineType() { - return "Particle Accelerator"; - } - - public int tier() { - return 5; - } - - @Override - public long maxEUStore() { - return 1800000000L; - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_Cyclotron(this.mName); - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { - return side != getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { - { " ", " hhh ", " hh hh ", " h h ", - " h h ", " h h ", " h h ", " h h ", - " h h ", " h h ", " h h ", " h h ", - " hh hh ", " hhh ", " ", }, - { " hhh ", " hhccchh ", " hcchhhcch ", " hchh hhch ", - " hch hch ", " hch hch ", "hch hch", "hch hch", - "hch hch", " hch hch ", " hch hch ", " hchh hhch ", - " hcch~hcch ", " hhccchh ", " hhh ", }, - { " ", " hhh ", " hh hh ", " h h ", - " h h ", " h h ", " h h ", " h h ", - " h h ", " h h ", " h h ", " h h ", - " hh hh ", " hhh ", " ", } })) - .addElement( - 'h', - buildHatchAdder(GregtechMetaTileEntity_Cyclotron.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) - .casingIndex(44) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) - .addElement('c', ofBlock(getCyclotronCoil(), getCyclotronCoilMeta())) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 7, 1, 12); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 7, 1, 12, elementBudget, env, false, true); - } - - @SideOnly(Side.CLIENT) - @Override - protected ResourceLocation getActivitySoundLoop() { - return SoundResource.GT_MACHINES_FUSION_LOOP.resourceLocation; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 7, 1, 12) && mCasing >= 40 && checkHatch(); - } - - public Block getCasingBlock() { - return ModBlocks.blockCasings2Misc; - } - - public int getCasingMeta() { - return 10; - } - - public Block getCyclotronCoil() { - return ModBlocks.blockCasings2Misc; - } - - public int getCyclotronCoilMeta() { - return 9; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Super Magnetic Speed Shooter") - .addSeparator() - .addInfo("Particles are accelerated over 186 revolutions to 80% light speed") - .addInfo("Can produce a continuous beam current of 2.2 mA at 590 MeV") - .addInfo("Which will be extracted from the Isochronous Cyclotron") - .addSeparator() - .addInfo("Consists of the same layout as a Fusion Reactor") - .addInfo("Any external casing can be a hatch/bus, unlike Fusion") - .addInfo("Cyclotron Machine Casings around Cyclotron Coil Blocks") - .addInfo("All Hatches must be IV or better") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .addCasingInfoMin("Cyclotron Machine Casings", 40, false) - .addCasingInfoMin("Cyclotron Coil", 32, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - protected IIconContainer getActiveOverlay() { - return getIconOverlay(); - } - - @Override - protected IIconContainer getInactiveOverlay() { - return getIconOverlay(); - } - - @Override - protected int getCasingTextureId() { - return 44; - } - - public IIconContainer getIconOverlay() { - if (this.getBaseMetaTileEntity() - .isActive()) { - return TexturesGtBlock.Overlay_MatterFab_Active_Animated; - } - return TexturesGtBlock.Overlay_MatterFab_Animated; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.cyclotronRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - public CheckRecipeResult process() { - CheckRecipeResult result = super.process(); - if (result.wasSuccessful()) { - for (ItemStack s : outputItems) { - if (s != null) { - if (s.getItem() instanceof IonParticles) { - long aCharge = IonParticles.getChargeState(s); - if (aCharge == 0) { - IonParticles.setChargeState( - s, - MathUtils.getRandomFromArray( - new int[] { -5, -5, -4, -4, -4, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, - -2, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, - 5, 5, 5, 6, 6 })); - } - } - } - } - } - return result; - } - }; - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (this.mOutputBusses.size() > 0) { - for (GT_MetaTileEntity_Hatch_OutputBus g : this.mOutputBusses) { - if (g != null) { - for (ItemStack s : g.mInventory) { - if (s != null) { - if (s.getItem() instanceof IonParticles) { - long aCharge = IonParticles.getChargeState(s); - if (aCharge == 0) { - IonParticles.setChargeState( - s, - MathUtils.getRandomFromArray( - new int[] { -5, -5, -4, -4, -4, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, - -2, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, - 5, 5, 5, 6, 6 })); - } - } - } - } - } - } - } - return super.onRunningTick(aStack); - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiCyclotron; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public String[] getExtraInfoData() { - String tier = tier() == 5 ? "I" : "II"; - float plasmaOut = 0; - int powerRequired = 0; - if (this.mLastRecipe != null) { - powerRequired = this.mLastRecipe.mEUt; - if (this.mLastRecipe.getFluidOutput(0) != null) { - plasmaOut = (float) this.mLastRecipe.getFluidOutput(0).amount / (float) this.mLastRecipe.mDuration; - } - } - - return new String[] { "COMET - Compact Cyclotron MK " + tier, "EU Required: " + powerRequired + "EU/t", - "Stored EU: " + this.getEUVar() + " / " + maxEUStore() }; - } - - @Override - public boolean doesBindPlayerInventory() { - return false; - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_IndustrialFishingPond.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_IndustrialFishingPond.java deleted file mode 100644 index 0133c8b301..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_IndustrialFishingPond.java +++ /dev/null @@ -1,488 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gtPlusPlus.core.util.data.ArrayUtils.removeNulls; - -import java.util.HashMap; -import java.util.Map; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.WeightedRandomFishable; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.FishPondFakeRecipe; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import ic2.core.init.BlocksItems; -import ic2.core.init.InternalName; - -public class GregtechMetaTileEntity_IndustrialFishingPond extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private boolean isUsingControllerCircuit = false; - private static final Item circuit = GT_Utility.getIntegratedCircuit(0) - .getItem(); - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - private static final Class cofhWater; - - static { - cofhWater = ReflectionUtils.getClass("cofh.asmhooks.block.BlockWater"); - } - - public GregtechMetaTileEntity_IndustrialFishingPond(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialFishingPond(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialFishingPond(this.mName); - } - - @Override - public String getMachineType() { - return "Fish Trap"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Fishing Pond") - .addInfo("Can process (Tier + 1) * 2 recipes") - .addInfo("Put a numbered circuit into the input bus.") - .addInfo("Circuit 14 for Fish") - .addInfo("Circuit 15 for Junk") - .addInfo("Circuit 16 for Treasure") - .addInfo("Need to be filled with water.") - .addInfo("Will automatically fill water from input hatch.") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(9, 3, 9, true) - .addController("Front Center") - .addCasingInfoMin("Aquatic Casings", 64, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { - { "XXXXXXXXX", "X X", "X X", "X X", "X X", "X X", "X X", - "X X", "XXXXXXXXX" }, - { "XXXX~XXXX", "X X", "X X", "X X", "X X", "X X", "X X", - "X X", "XXXXXXXXX" }, - { "XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX", - "XXXXXXXXX", "XXXXXXXXX" }, })) - .addElement( - 'X', - buildHatchAdder(GregtechMetaTileEntity_IndustrialFishingPond.class) - .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 4, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 4, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 4, 1, 0) && mCasing >= 64 && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER; - } - - @Override - protected int getCasingTextureId() { - return getCasingTextureIndex(); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.fishPondRecipes; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - ItemStack controllerStack = getControllerSlot(); - if (controllerStack != null) { - if (controllerStack.getItem() == circuit) { - this.isUsingControllerCircuit = true; - this.mMode = controllerStack.getItemDamage(); - } else { - this.isUsingControllerCircuit = false; - } - } else { - this.isUsingControllerCircuit = false; - } - if (!hasGenerateRecipes) { - generateRecipes(); - } - if (!checkForWater()) { - return SimpleCheckRecipeResult.ofFailure("no_water"); - } - ItemStack[] tItemInputs = getStoredInputs().toArray(new ItemStack[0]); - FluidStack[] tFluidInputs = getStoredFluids().toArray(new FluidStack[0]); - - if (!isUsingControllerCircuit && tItemInputs.length == 0) { - return CheckRecipeResultRegistry.NO_RECIPE; - } - - long tEnergy = getMaxInputEnergy(); - - getCircuit(tItemInputs); - - ItemStack[] mFishOutput = generateLoot(this.mMode); - mFishOutput = removeNulls(mFishOutput); - GT_Recipe g = new GT_Recipe( - true, - new ItemStack[] {}, - mFishOutput, - null, - new int[] {}, - tFluidInputs, - null, - 200, - 16, - 0); - GT_OverclockCalculator calculator = new GT_OverclockCalculator().setRecipeEUt(g.mEUt) - .setEUt(tEnergy) - .setDuration(g.mDuration); - GT_ParallelHelper helper = new GT_ParallelHelper().setRecipe(g) - .setItemInputs(tItemInputs) - .setFluidInputs(tFluidInputs) - .setAvailableEUt(tEnergy) - .setMaxParallel(getMaxParallelRecipes()) - .setConsumption(true) - .setOutputCalculation(true) - .setMachine(this) - .enableBatchMode(batchMode ? 128 : 1) - .setCalculator(calculator); - - helper.build(); - - if (helper.getCurrentParallel() == 0) { - return CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; - } - - this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - - lEUt = -calculator.getConsumption(); - mMaxProgresstime = (int) Math.ceil(calculator.getDuration() * helper.getDurationMultiplierDouble()); - - mOutputItems = helper.getItemOutputs(); - mOutputFluids = null; - updateSlots(); - - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Override - public int getMaxParallelRecipes() { - return (2 * (GT_Utility.getTier(this.getMaxInputVoltage()) + 1)); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialFishingPond; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - public Block getCasingBlock() { - return ModBlocks.blockCasings3Misc; - } - - public byte getCasingMeta() { - return 0; - } - - public int getCasingTextureIndex() { - return TAE.GTPP_INDEX(32); - } - - public boolean checkForWater() { - - // Get Facing direction - IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); - int mDirectionX = aBaseMetaTileEntity.getBackFacing().offsetX; - int mCurrentDirectionX; - int mCurrentDirectionZ; - int mOffsetX_Lower = 0; - int mOffsetX_Upper = 0; - int mOffsetZ_Lower = 0; - int mOffsetZ_Upper = 0; - - mCurrentDirectionX = 4; - mCurrentDirectionZ = 4; - - mOffsetX_Lower = -4; - mOffsetX_Upper = 4; - mOffsetZ_Lower = -4; - mOffsetZ_Upper = 4; - - // if (aBaseMetaTileEntity.fac) - - final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX * mCurrentDirectionX; - final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ * mCurrentDirectionZ; - - int tAmount = 0; - for (int i = mOffsetX_Lower + 1; i <= mOffsetX_Upper - 1; ++i) { - for (int j = mOffsetZ_Lower + 1; j <= mOffsetZ_Upper - 1; ++j) { - for (int h = 0; h < 2; h++) { - Block tBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j); - byte tMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir + i, h, zDir + j); - if (isNotStaticWater(tBlock, tMeta)) { - if (this.getStoredFluids() != null) { - for (FluidStack stored : this.getStoredFluids()) { - if (stored.isFluidEqual(FluidUtils.getFluidStack("water", 1))) { - if (stored.amount >= 1000) { - // Utils.LOG_WARNING("Going to try swap an air block for water from inut bus."); - stored.amount -= 1000; - Block fluidUsed = Blocks.water; - aBaseMetaTileEntity.getWorld() - .setBlock( - aBaseMetaTileEntity.getXCoord() + xDir + i, - aBaseMetaTileEntity.getYCoord() + h, - aBaseMetaTileEntity.getZCoord() + zDir + j, - fluidUsed); - } - } - } - } - } - tBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j); - if (tBlock == Blocks.water || tBlock == Blocks.flowing_water) { - ++tAmount; - } - } - } - } - - return tAmount >= 60; - } - - private boolean isNotStaticWater(Block block, byte meta) { - return block == Blocks.air || block == Blocks.flowing_water - || block == BlocksItems.getFluidBlock(InternalName.fluidDistilledWater) - || (cofhWater != null && cofhWater.isAssignableFrom(block.getClass()) && meta != 0); - } - - private static AutoMap> categories = new AutoMap<>(); - private static AutoMap categoryFish = new AutoMap<>(); - private static AutoMap categoryJunk = new AutoMap<>(); - private static AutoMap categoryLoot = new AutoMap<>(); - private static boolean hasGenerateRecipes = false; - private int mMode = 14; - private int mMax = 8; - - private void generateRecipes() { - if (hasGenerateRecipes) return; - - categories.put(categoryFish); - categories.put(categoryJunk); - categories.put(categoryLoot); - for (WeightedRandomFishable h : FishPondFakeRecipe.fish) { - categoryFish.put(h); - } - for (WeightedRandomFishable h : FishPondFakeRecipe.junk) { - categoryJunk.put(h); - } - for (WeightedRandomFishable h : FishPondFakeRecipe.treasure) { - categoryLoot.put(h); - } - hasGenerateRecipes = true; - } - - private int getCircuit(ItemStack[] t) { - if (!this.isUsingControllerCircuit) { - for (ItemStack j : t) { - if (j.getItem() == GT_Utility.getIntegratedCircuit(0) - .getItem()) { - // Fish - if (j.getItemDamage() == 14) { - mMax = 8 + (this.getMaxParallelRecipes() - 2); - this.mMode = 14; - break; - } - // Junk - else if (j.getItemDamage() == 15) { - this.mMode = 15; - mMax = 4; - break; - } - // Loot - else if (j.getItemDamage() == 16) { - this.mMode = 16; - mMax = 4; - break; - } else { - this.mMode = 0; - mMax = 0; - break; - } - } else { - this.mMode = 0; - mMax = 0; - break; - } - } - } - return this.mMode; - } - - // reflection map - private static Map reflectiveFishMap = new HashMap<>(); - - private ItemStack reflectiveFish(WeightedRandomFishable y) { - if (reflectiveFishMap.containsKey(y)) { - return reflectiveFishMap.get(y); - } - ItemStack t; - try { - t = (ItemStack) ReflectionUtils.getField(WeightedRandomFishable.class, "field_150711_b") - .get(y); - ItemStack k = ItemUtils.getSimpleStack(t, 1); - reflectiveFishMap.put(y, k); - return t; - } catch (IllegalArgumentException | IllegalAccessException e) {} - return null; - } - - private ItemStack[] generateLoot(int mode) { - ItemStack[] mFishOutput = new ItemStack[this.mMax]; - if (this.mMode == 14) { - for (int k = 0; k < this.mMax; k++) { - if (mFishOutput[k] == null) for (WeightedRandomFishable g : categoryFish.values()) { - if (MathUtils.randInt(0, (65 - getMaxParallelRecipes())) <= 2) { - ItemStack t = reflectiveFish(g); - if (t != null) { - mFishOutput[k] = ItemUtils.getSimpleStack(t, 1); - } - } - } - } - } else if (this.mMode == 15) { - for (int k = 0; k < this.mMax; k++) { - if (mFishOutput[k] == null) for (WeightedRandomFishable g : categoryJunk.values()) { - if (MathUtils.randInt(0, 100) <= 1) { - ItemStack t = reflectiveFish(g); - if (t != null) { - mFishOutput[k] = ItemUtils.getSimpleStack(t, 1); - } - } - } - } - } else if (this.mMode == 16) { - for (int k = 0; k < this.mMax; k++) { - if (mFishOutput[k] == null) for (WeightedRandomFishable g : categoryLoot.values()) { - if (MathUtils.randInt(0, 1000) <= 2) { - ItemStack t = reflectiveFish(g); - if (t != null) { - mFishOutput[k] = ItemUtils.getSimpleStack(t, 1); - } - } - } - } - } else { - mFishOutput = null; - } - return mFishOutput; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_IndustrialRockBreaker.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_IndustrialRockBreaker.java deleted file mode 100644 index 520d52c9c5..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_IndustrialRockBreaker.java +++ /dev/null @@ -1,366 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntity_IndustrialRockBreaker extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_IndustrialRockBreaker(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_IndustrialRockBreaker(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_IndustrialRockBreaker(this.mName); - } - - @Override - public String getMachineType() { - return "Rock Breaker"; - } - - private static final String casingBaseName = GT_LanguageManager.getTranslation("gtplusplus.blockcasings.2.0.name"); - private static final String casingMiddleName = GT_LanguageManager - .getTranslation("gtplusplus.blockcasings.2.11.name"); - private static final String anyBaseCasing = "Any " + casingBaseName; - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Industrial Rock Breaker") - .addInfo("Speed: +200% | EU Usage: 75% | Parallel: Tier x 8") - .addInfo("Circuit goes in the GUI slot") - .addInfo("1 = cobble, 2 = stone, 3 = obsidian") - .addInfo("Needs Water and Lava in input hatch") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 4, 3, true) - .addController("Bottom Center") - .addCasingInfoMin(casingBaseName, 9, false) - .addCasingInfoExactly(casingMiddleName, 16, false) - .addInputBus(anyBaseCasing, 1) - .addInputHatch(anyBaseCasing, 1) - .addOutputBus(anyBaseCasing, 1) - .addEnergyHatch(anyBaseCasing, 1) - .addMaintenanceHatch(anyBaseCasing, 1) - .addMufflerHatch(anyBaseCasing, 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "HHH", "H-H", "HHH" }, - { "C~C", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_IndustrialRockBreaker.class) - .atLeast(InputBus, InputHatch, OutputBus, Maintenance, Energy, Muffler) - .casingIndex(TAE.GTPP_INDEX(16)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 0)))) - .addElement('H', ofBlock(ModBlocks.blockCasings2Misc, 11)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 3, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - boolean aCheckPiece = checkPiece(mName, 1, 3, 0); - boolean aCasingCount = mCasing >= 9; - boolean aCheckHatch = checkHatch(); - log("" + aCheckPiece + ", " + aCasingCount + ", " + aCheckHatch); - return aCheckPiece && aCasingCount && aCheckHatch; - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_INDUCTION_LOOP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAIndustrialRockBreakerActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAIndustrialRockBreaker; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(16); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.rockBreakerFakeRecipes; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - @Override - public boolean isCorrectMachinePart(final ItemStack aStack) { - return true; - } - - private static GT_Recipe sRecipe_Cobblestone; - private static GT_Recipe sRecipe_SmoothStone; - private static GT_Recipe sRecipe_Redstone; - - private static void generateRecipes() { - sRecipe_Cobblestone = new GT_Recipe( - false, - new ItemStack[] { GT_Utility.getIntegratedCircuit(1) }, - new ItemStack[] { ItemUtils.getSimpleStack(Blocks.cobblestone) }, - null, - new int[] { 10000 }, - null, - null, - 16, - 32, - 0); - sRecipe_SmoothStone = new GT_Recipe( - false, - new ItemStack[] { GT_Utility.getIntegratedCircuit(2) }, - new ItemStack[] { ItemUtils.getSimpleStack(Blocks.stone) }, - null, - new int[] { 10000 }, - null, - null, - 16, - 32, - 0); - sRecipe_Redstone = new GT_Recipe( - false, - new ItemStack[] { GT_Utility.getIntegratedCircuit(3), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L) }, - new ItemStack[] { ItemUtils.getSimpleStack(Blocks.obsidian) }, - null, - new int[] { 10000 }, - null, - null, - 128, - 32, - 0); - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - ArrayList aFluids = this.getStoredFluids(); - if (aFluids.isEmpty()) { - return CheckRecipeResultRegistry.NO_RECIPE; - } - - boolean aHasWater = false; - boolean aHasLava = false; - for (FluidStack aFluid : aFluids) { - if (aFluid.getFluid() == FluidRegistry.WATER) { - aHasWater = true; - } else if (aFluid.getFluid() == FluidRegistry.LAVA) { - aHasLava = true; - } - } - ArrayList aItems = this.getStoredInputs(); - boolean aHasRedstone = false; - if (!aItems.isEmpty()) { - for (ItemStack aItem : aItems) { - if (GT_Utility - .areStacksEqual(aItem, GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L))) { - aHasRedstone = true; - break; - } - } - } - - if (!aHasWater) { - return SimpleCheckRecipeResult.ofFailure("no_water"); - } - if (!aHasLava) { - return SimpleCheckRecipeResult.ofFailure("no_lava"); - } - ItemStack aGuiCircuit = this.getControllerSlot(); - if (!ItemUtils.isControlCircuit(aGuiCircuit)) { - return CheckRecipeResultRegistry.NO_RECIPE; - } - - if (sRecipe_Cobblestone == null || sRecipe_SmoothStone == null || sRecipe_Redstone == null) { - generateRecipes(); - } - - int aCircuit = aGuiCircuit.getItemDamage(); - - GT_Recipe tRecipe = null; - switch (aCircuit) { - case 1 -> tRecipe = sRecipe_Cobblestone; - case 2 -> tRecipe = sRecipe_SmoothStone; - case 3 -> { - if (aHasRedstone) { - tRecipe = sRecipe_Redstone; - } - } - } - - if (tRecipe == null) { - return CheckRecipeResultRegistry.NO_RECIPE; - } - - ItemStack[] aItemInputs = aItems.toArray(new ItemStack[0]); - FluidStack[] aFluidInputs = new FluidStack[] {}; - - long tEnergy = getMaxInputEnergy(); - // Remember last recipe - an optimization for findRecipe() - this.mLastRecipe = tRecipe; - - GT_ParallelHelper helper = new GT_ParallelHelper().setRecipe(tRecipe) - .setItemInputs(aItemInputs) - .setFluidInputs(aFluidInputs) - .setAvailableEUt(tEnergy) - .setMaxParallel(getMaxParallelRecipes()) - .setConsumption(true) - .setOutputCalculation(true) - .setEUtModifier(0.75F) - .setMachine(this); - - if (batchMode) { - helper.enableBatchMode(128); - } - - helper.build(); - - if (helper.getCurrentParallel() == 0) { - return CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; - } - - this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - - GT_OverclockCalculator calculator = new GT_OverclockCalculator().setRecipeEUt(tRecipe.mEUt) - .setEUt(tEnergy) - .setDuration(tRecipe.mDuration) - .setEUtDiscount(0.75F) - .setSpeedBoost(1F / 3F) - .setParallel((int) Math.floor(helper.getCurrentParallel() / helper.getDurationMultiplierDouble())) - .calculate(); - lEUt = -calculator.getConsumption(); - mMaxProgresstime = (int) Math.ceil(calculator.getDuration() * helper.getDurationMultiplierDouble()); - - mOutputItems = helper.getItemOutputs(); - mOutputFluids = helper.getFluidOutputs(); - updateSlots(); - return CheckRecipeResultRegistry.SUCCESSFUL; - - } - - @Override - public int getMaxParallelRecipes() { - return (8 * GT_Utility.getTier(this.getMaxInputVoltage())); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiIndustrialRockBreaker; - } - - @Override - public int getDamageToComponent(final ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public ArrayList getStoredInputs() { - ArrayList aInputs = super.getStoredInputs(); - if (this.getControllerSlot() != null) { - aInputs.add(this.getControllerSlot()); - } - return aInputs; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_LargeRocketEngine.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_LargeRocketEngine.java deleted file mode 100644 index 96a477bb26..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_LargeRocketEngine.java +++ /dev/null @@ -1,524 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Dynamo; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase.GTPPHatchElement.AirIntake; -import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase.GTPPHatchElement.TTDynamo; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.ImmutableMap; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.item.chemistry.RocketFuels; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.MISC_MATERIALS; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_AirIntake; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaTileEntity_LargeRocketEngine - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - protected int fuelConsumption; - protected int fuelValue; - protected int fuelRemaining; - protected int freeFuelTicks = 0; - protected int euProduction = 0; - protected boolean boostEu; - - public static String mLubricantName = "Carbon Dioxide"; - public static String mCoolantName = "Liquid Hydrogen"; - - public static String mCasingName = "Turbodyne Casing"; - public static String mIntakeHatchName = "Tungstensteel Turbine Casing"; - public static String mGearboxName = "Inconel Reinforced Casing"; - - private static Fluid sAirFluid = null; - private static FluidStack sAirFluidStack = null; - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - private static final int CASING_ID = TAE.getIndexFromPage(3, 11); - - public GregtechMetaTileEntity_LargeRocketEngine(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - this.fuelConsumption = 0; - this.fuelValue = 0; - this.fuelRemaining = 0; - this.boostEu = false; - setAir(); - } - - public GregtechMetaTileEntity_LargeRocketEngine(final String aName) { - super(aName); - this.fuelConsumption = 0; - this.fuelValue = 0; - this.fuelRemaining = 0; - this.boostEu = false; - setAir(); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Large Rocket Engine") - .addInfo("Generating Power from Rocket Fuels - Supports TecTech Multi-Amp Dynamos!") - .addInfo("Supply GT++ Rocket Fuels and 1000L of " + mLubricantName + " per hour") - .addInfo("Produces as much energy as you put fuel in, with optional boosting") - .addInfo("This multi doesn't accept fluids if not enabled - enable it first!") - .addInfo("Consumes 2000L/s of air and pollutes 1500 gibbl/s per 16384 eu/t produced") - .addInfo("Place 1-8 Air Intake Hatches on the sides to maintain Air input") - .addInfo("If it runs out of air, it will shut down and have to be manually restarted") - .addInfo("Supply 3L of " + mCoolantName + " per second, per 1000 EU/t to boost") - .addInfo("Takes 3x the amount of " + mLubricantName + " and maintains efficiency") - .addInfo("Fuel efficiency starts at ~160%, falls more slowly at higher EU/t if boosted") - .addInfo("If producing more than 30k EU/t, fuel efficiency will be lower:") - .addInfo("(These thresholds are 3x higher when boosted, boosted values displayed second)") - .addInfo("- 75% of max fuel efficiency at 53k or 159k EU/t output energy") - .addInfo("- 50% of max fuel efficiency at 69k or 207k EU/t output energy") - .addInfo("- 25% of max fuel efficiency at 98k or 294k EU/t output energy") - .addInfo("formula: x = input of energy (30000^(1/3)/ x^(1/3)) * (80000^(1/3)/ x^(1/3))") - .addSeparator() - .beginStructureBlock(3, 3, 10, false) - .addController("Front Center") - .addCasingInfoMin(mCasingName, 64, false) - .addCasingInfoMin(mGearboxName, 8, false) - .addStructureHint("Air Intake Hatch", 1) - .addInputBus("Side center line", 1) - .addInputHatch("Side center line", 1) - .addMaintenanceHatch("Any Block Touching Inconel Reinforced Casing", 1) - .addDynamoHatch("Top center line", 2) - .addMufflerHatch("Back Center", 3) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (this.STRUCTURE_DEFINITION == null) { - this.STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - this.mName, - transpose( - new String[][] { { "CTC", "CTC", "CTC", "CTC", "CTC", "CTC", "CTC", "CTC", "CTC", "CTC" }, - { "C~C", "SIS", "SIS", "SIS", "SIS", "SIS", "SIS", "SIS", "SIS", "CMC" }, - { "CCC", "CSC", "CSC", "CSC", "CSC", "CSC", "CSC", "CSC", "CSC", "CCC" }, })) - .addElement('C', ofBlock(getCasingBlock(), getCasingMeta())) - .addElement('I', ofBlock(getGearboxBlock(), getGearboxMeta())) - // side - .addElement( - 'S', - buildHatchAdder(GregtechMetaTileEntity_LargeRocketEngine.class) - .atLeast(ImmutableMap.of(AirIntake, 8, InputBus, 1, InputHatch, 3, Maintenance, 1)) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) - // top - .addElement( - 'T', - buildHatchAdder(GregtechMetaTileEntity_LargeRocketEngine.class) - .atLeast(ImmutableMap.of(AirIntake, 8, Dynamo.or(TTDynamo), 1, Maintenance, 1)) - .casingIndex(getCasingTextureIndex()) - .dot(2) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) - .addElement('M', Muffler.newAny(getCasingTextureIndex(), 3)) - .build(); - } - return this.STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(this.mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.mCasing = 0; - this.mTecTechDynamoHatches.clear(); - this.mAllDynamoHatches.clear(); - this.mAirIntakes.clear(); - return checkPiece(this.mName, 1, 1, 0) && this.mCasing >= 64 - 48 - && this.mAirIntakes.size() >= 1 - && checkHatch(); - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCALargeRocketEngineActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCALargeRocketEngine; - } - - @Override - protected int getCasingTextureId() { - return CASING_ID; - } - - @Override - public boolean isCorrectMachinePart(final ItemStack aStack) { - return this.getMaxEfficiency(aStack) > 0; - } - - public static void setAir() { - if (sAirFluidStack == null) { - sAirFluidStack = FluidUtils.getFluidStack("air", 1); - } - if (sAirFluid == null && sAirFluidStack != null) { - sAirFluid = sAirFluidStack.getFluid(); - } - } - - public int getAir() { - setAir(); - if (this.mAirIntakes.isEmpty() || this.mAirIntakes.size() <= 0) { - return 0; - } else { - int totalAir = 0; - for (GT_MetaTileEntity_Hatch_AirIntake u : this.mAirIntakes) { - if (u != null && u.mFluid != null) { - FluidStack f = u.mFluid; - if (f.isFluidEqual(sAirFluidStack)) { - totalAir += f.amount; - } - } - } - return totalAir; - } - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.rocketFuels; - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - final ArrayList tFluids = this.getStoredFluids(); - this.clearRecipeMapForAllInputHatches(); - int aircount = getAir(); - int aAirToConsume = this.euProduction / 100; - if (aircount < aAirToConsume) { - stopMachine(ShutDownReasonRegistry.outOfFluid(new FluidStack(sAirFluid, aAirToConsume))); - return SimpleCheckRecipeResult.ofFailure("no_air"); - } else { - int aTotalAir = 0; - for (GT_MetaTileEntity_Hatch_AirIntake aAirHatch : this.mAirIntakes) { - if (aAirHatch.mFluid != null) { - aTotalAir += aAirHatch.getFluidAmount(); - } - } - if (aTotalAir >= aAirToConsume) { - int aSplitAmount = (aAirToConsume / this.mAirIntakes.size()); - if (aSplitAmount > 0) { - for (GT_MetaTileEntity_Hatch_AirIntake aAirHatch : mAirIntakes) { - boolean hasIntakeAir = aAirHatch.drain(aSplitAmount, true) != null; - if (!hasIntakeAir) { - this.freeFuelTicks = 0; - return SimpleCheckRecipeResult.ofFailure("no_air"); - } - } - } - } - } - // reset fuel ticks in case it does not reset when it stops - if (this.freeFuelTicks != 0 && this.mProgresstime == 0 && this.mEfficiency == 0) this.freeFuelTicks = 0; - - if (tFluids.size() > 0 && getRecipeMap() != null) { - if (this.mRuntime % 72 == 0) { - if (!consumeCO2()) { - this.freeFuelTicks = 0; - return SimpleCheckRecipeResult.ofFailure("no_co2"); - } - } - if (this.freeFuelTicks == 0) { - this.boostEu = consumeLOH(); - } - for (final FluidStack hatchFluid1 : tFluids) { - if (hatchFluid1.isFluidEqual(sAirFluidStack)) { - continue; - } - if (this.freeFuelTicks == 0) { - for (final GT_Recipe aFuel : getRecipeMap().getAllRecipes()) { - final FluidStack tLiquid; - tLiquid = aFuel.mFluidInputs[0]; - if (hatchFluid1.isFluidEqual(tLiquid)) { - if (!consumeFuel(aFuel, hatchFluid1.amount)) { - continue; - } - this.fuelValue = aFuel.mSpecialValue * 3; - this.fuelRemaining = hatchFluid1.amount; - this.lEUt = ((this.mEfficiency < 2000) ? 0 : GT_Values.V[5] << 1); - this.mProgresstime = 1; - this.mMaxProgresstime = 1; - this.mEfficiencyIncrease = this.euProduction / 2000; - return CheckRecipeResultRegistry.GENERATING; - } - } - } else { - this.mEfficiencyIncrease = this.euProduction / 2000; - this.freeFuelTicks--; - this.lEUt = ((this.mEfficiency < 1000) ? 0 : GT_Values.V[5] << 1); - this.mProgresstime = 1; - this.mMaxProgresstime = 1; - return CheckRecipeResultRegistry.GENERATING; - } - } - } - this.lEUt = 0; - this.mEfficiency = 0; - this.freeFuelTicks = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - /** - * Consumes Fuel if required. Free Fuel Ticks are handled here. - * - * @param aFuel - * @return - */ - public boolean consumeFuel(GT_Recipe aFuel, int amount) { - amount *= this.boostEu ? 0.3 : 0.9; - this.freeFuelTicks = 0; - int value = aFuel.mSpecialValue * 3; - int energy = value * amount; - if (amount < 5) return false; - FluidStack tLiquid = FluidUtils.getFluidStack(aFuel.mFluidInputs[0], (this.boostEu ? amount * 3 : amount)); - if (!this.depleteInput(tLiquid)) { - return false; - } else { - this.fuelConsumption = this.boostEu ? amount * 3 : amount; - this.freeFuelTicks = 20; - setEUProduction(energy); - return true; - } - } - - public void setEUProduction(int energy) { - energy /= 20; - double energyEfficiency; - double tDivideEnergy = Math.cbrt(energy); - if (energy > 30000) { - // cbrt(30 000) / - energyEfficiency = (31.072325 / tDivideEnergy); - if (energy >= 80000) - // cbrt(80 000) / - energyEfficiency *= (43.0886938 / tDivideEnergy); - energyEfficiency *= energy; - } else { - energyEfficiency = energy; - } - this.euProduction = (int) (energyEfficiency); - if (this.boostEu) this.euProduction *= 3; - } - - public boolean consumeCO2() { - return this.depleteInput(MISC_MATERIALS.CARBON_DIOXIDE.getFluidStack(this.boostEu ? 3 : 1)) - || this.depleteInput(FluidUtils.getFluidStack("carbondioxide", (this.boostEu ? 3 : 1))); - } - - public boolean consumeLOH() { - int LOHamount = (3 * this.euProduction) / 1000; - return this.depleteInput(FluidUtils.getFluidStack(RocketFuels.Liquid_Hydrogen, LOHamount)); // (40 * ((long) - // euProduction / - // 10000)) - } - - @Override - public boolean addEnergyOutput(long aEU) { - if (aEU <= 0) { - return true; - } - if (this.mAllDynamoHatches.size() > 0) { - return addEnergyOutputMultipleDynamos(aEU, true); - } - return false; - } - - @Override - public boolean addEnergyOutputMultipleDynamos(long aEU, boolean aAllowMixedVoltageDynamos) { - int injected = 0; - long totalOutput = 0; - long aFirstVoltageFound = -1; - boolean aFoundMixedDynamos = false; - for (GT_MetaTileEntity_Hatch aDynamo : filterValidMTEs(this.mAllDynamoHatches)) { - long aVoltage = aDynamo.maxEUOutput(); - long aTotal = aDynamo.maxAmperesOut() * aVoltage; - // Check against voltage to check when hatch mixing - if (aFirstVoltageFound == -1) { - aFirstVoltageFound = aVoltage; - } else { - if (aFirstVoltageFound != aVoltage) { - aFoundMixedDynamos = true; - } - } - totalOutput += aTotal; - } - - if (totalOutput < aEU || (aFoundMixedDynamos && !aAllowMixedVoltageDynamos)) { - explodeMultiblock(); - return false; - } - - long leftToInject; - long aVoltage; - int aAmpsToInject; - int aRemainder; - - for (GT_MetaTileEntity_Hatch aDynamo : filterValidMTEs(this.mAllDynamoHatches)) { - leftToInject = aEU - injected; - aVoltage = aDynamo.maxEUOutput(); - aAmpsToInject = (int) (leftToInject / aVoltage); - aRemainder = (int) (leftToInject - (aAmpsToInject * aVoltage)); - long powerGain; - for (int i = 0; i < Math.min(aDynamo.maxAmperesOut(), aAmpsToInject + 1); i++) { - if (i == Math.min(aDynamo.maxAmperesOut(), aAmpsToInject)) { - powerGain = aRemainder; - } else { - powerGain = aVoltage; - } - aDynamo.getBaseMetaTileEntity() - .increaseStoredEnergyUnits(powerGain, false); - injected += powerGain; - } - } - return injected > 0; - } - - public Block getCasingBlock() { - return ModBlocks.blockCasings4Misc; - } - - public byte getCasingMeta() { - return 11; - } - - public Block getGearboxBlock() { - return ModBlocks.blockCasings3Misc; - } - - public byte getGearboxMeta() { - return 1; - } - - public byte getCasingTextureIndex() { - return (byte) CASING_ID; - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_LargeRocketEngine(this.mName); - } - - @Override - public void saveNBTData(final NBTTagCompound aNBT) { - aNBT.setInteger("freeFuelTicks", this.freeFuelTicks); - aNBT.setInteger("euProduction", this.euProduction); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.freeFuelTicks = aNBT.getInteger("freeFuelTicks"); - this.euProduction = aNBT.getInteger("euProduction"); - } - - @Override - public int getDamageToComponent(final ItemStack aStack) { - return 1; - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return this.euProduction; - } - - @Override - public int getPollutionPerTick(final ItemStack aStack) { - return 75 * (this.euProduction / 10000); - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return true; - } - - @Override - public String[] getExtraInfoData() { - return new String[] { "Rocket Engine", "Current Air: " + getAir(), - "Current Pollution: " + getPollutionPerTick(null), - "Time until next fuel consumption: " + this.freeFuelTicks, - "Current Output: " + this.lEUt * this.mEfficiency / 10000 + " EU/t", - "Fuel Consumption: " + (this.fuelConsumption) + "L/s", "Fuel Value: " + this.fuelValue + " EU/L", - "Fuel Remaining: " + this.fuelRemaining + " Litres", "Current Efficiency: " + this.mEfficiency / 100 + "%", - (this.getIdealStatus() == this.getRepairStatus()) ? "No Maintainance issues" : "Needs Maintainance" }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String getMachineType() { - return "Rocket Engine"; - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - @Override - public boolean doesBindPlayerInventory() { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_LargeSemifluidGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_LargeSemifluidGenerator.java deleted file mode 100644 index 4403779d09..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_LargeSemifluidGenerator.java +++ /dev/null @@ -1,332 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Dynamo; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase.GTPPHatchElement.TTDynamo; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; - -public class GregtechMetaTileEntity_LargeSemifluidGenerator extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - protected int fuelConsumption = 0; - protected int fuelValue = 0; - protected int fuelRemaining = 0; - protected boolean boostEu = false; - - public GregtechMetaTileEntity_LargeSemifluidGenerator(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_LargeSemifluidGenerator(String aName) { - super(aName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Large Semifluid Generator") - .addInfo("Engine Intake Casings must not be obstructed in front (only air blocks)") - .addInfo("Supply Semifluid Fuels and 2000L of Lubricant per hour to run.") - .addInfo("Supply 80L of Oxygen per second to boost output (optional).") - .addInfo("Default: Produces 2048EU/t at 100% efficiency") - .addInfo("Boosted: Produces 6144EU/t at 150% efficiency") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 3, 4, false) - .addController("Front Center") - .addCasingInfoMin("Stable Titanium Machine Casing", 16, false) - .addCasingInfoMin("Steel Gear Box Machine Casing", 2, false) - .addCasingInfoMin("Engine Intake Machine Casing", 8, false) - .addInputHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .addDynamoHatch("Back Center", 2) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - protected IIconContainer getActiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE; - } - - @Override - protected int getCasingTextureId() { - return 50; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return getMaxEfficiency(aStack) > 0; - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - ArrayList tFluids = getStoredFluids(); - - // Check for lubricant and oxygen first, so we can compute costs ahead of time. - // This will allow us to check costs without needing to actually try to deplete fluids - // (wasting earlier fluids in the check if later fluids turn out to be insufficient). - FluidStack lubricant = Materials.Lubricant.getFluid(0L); - FluidStack oxygen = Materials.Oxygen.getGas(0L); - for (FluidStack hatchFluid : tFluids) { - if (hatchFluid.isFluidEqual(lubricant)) { - lubricant.amount = Math.max(lubricant.amount, hatchFluid.amount); - } else if (hatchFluid.isFluidEqual(oxygen)) { - oxygen.amount = Math.max(oxygen.amount, hatchFluid.amount); - } - } - boostEu = oxygen.amount >= 4L; - long lubricantCost = boostEu ? 2L : 1L; - if (lubricant.amount < lubricantCost) { - return SimpleCheckRecipeResult.ofFailure("no_lubricant"); - } - - for (FluidStack hatchFluid : tFluids) { // Loops through hatches - GT_Recipe aFuel = GTPPRecipeMaps.semiFluidFuels.getBackend() - .findFuel(hatchFluid); - if (aFuel == null) { - // Not a valid semi-fluid fuel. - continue; - } - - int newEUt = boostEu ? 4096 : 2048; - fuelConsumption = newEUt / aFuel.mSpecialValue; // Calc fuel consumption - FluidStack tLiquid = new FluidStack(hatchFluid.getFluid(), fuelConsumption); - if (depleteInput(tLiquid)) { // Deplete that amount - // We checked beforehand, so both of these depletions should succeed. - // But check the return values anyway just to be safe. - if (boostEu) { - if (!depleteInput(Materials.Oxygen.getGas(4L))) { - return SimpleCheckRecipeResult.ofFailure("no_oxygen"); - } - } - // Deplete Lubricant. 2000L should = 1 hour of runtime (if baseEU = 2048) - if (mRuntime % 72 == 0 || mRuntime == 0) { - if (!depleteInput(Materials.Lubricant.getFluid(lubricantCost))) { - return SimpleCheckRecipeResult.ofFailure("no_lubricant"); - } - } - - fuelValue = aFuel.mSpecialValue; - fuelRemaining = hatchFluid.amount; // Record available fuel - this.lEUt = mEfficiency < 2000 ? 0 : newEUt; // Output 0 if startup is less than 20% - this.mProgresstime = 1; - this.mMaxProgresstime = 1; - this.mEfficiencyIncrease = 15; - return CheckRecipeResultRegistry.GENERATING; - } - } - - this.lEUt = 0; - this.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "III", "CCC", "CCC", "CCC" }, { "I~I", "CGC", "CGC", "CMC" }, - { "III", "CCC", "CCC", "CCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_LargeSemifluidGenerator.class) - .atLeast(Muffler, InputHatch, Maintenance) - .casingIndex(getCasingTextureIndex()) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) - .addElement('G', ofBlock(getGearboxBlock(), getGearboxMeta())) - .addElement('I', ofBlock(getIntakeBlock(), getIntakeMeta())) - .addElement( - 'M', - Dynamo.or(TTDynamo) - .newAny(getCasingTextureIndex(), 2)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - mDynamoHatches.clear(); - return checkPiece(mName, 1, 1, 0) && mCasing >= 16 && checkHatch(); - } - - public final boolean addLargeSemifluidGeneratorList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } - } - return false; - } - - public final boolean addLargeSemifluidGeneratorBackList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo || this.isThisHatchMultiDynamo(aTileEntity)) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } - } - return false; - } - - public Block getCasingBlock() { - return GregTech_API.sBlockCasings4; - } - - public byte getCasingMeta() { - return 2; - } - - public Block getIntakeBlock() { - return GregTech_API.sBlockCasings4; - } - - public byte getIntakeMeta() { - return 13; - } - - public Block getGearboxBlock() { - return GregTech_API.sBlockCasings2; - } - - public byte getGearboxMeta() { - return 3; - } - - public byte getCasingTextureIndex() { - return 50; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_LargeSemifluidGenerator(this.mName); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 1; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return boostEu ? 15000 : 10000; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiLargeSemiFluidGenerator; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return true; - } - - @Override - public String[] getExtraInfoData() { - return new String[] { "Large Semifluid Generator", "Current Output: " + lEUt * mEfficiency / 10000 + " EU/t", - "Fuel Consumption: " + fuelConsumption + "L/t", "Fuel Value: " + fuelValue + " EU/L", - "Fuel Remaining: " + fuelRemaining + " Litres", "Current Efficiency: " + (mEfficiency / 100) + "%", - getIdealStatus() == getRepairStatus() ? "No Maintainance issues" : "Needs Maintainance" }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public String getMachineType() { - return "Semifluid Generator"; - } - - @Override - public int getMaxParallelRecipes() { - return 0; - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_MassFabricator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_MassFabricator.java deleted file mode 100644 index ee989d22ca..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_MassFabricator.java +++ /dev/null @@ -1,361 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.Arrays; -import java.util.Collection; -import java.util.List; -import java.util.stream.Stream; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.Materials; -import gregtech.api.enums.TAE; -import gregtech.api.enums.TierEU; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.config.machinestats.ConfigMassFabricator; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -public class GregtechMetaTileEntity_MassFabricator - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - public static int sUUAperUUM = 1; - public static int sUUASpeedBonus = 4; - public static int sDurationMultiplier = 3200; - - public static String mCasingName1 = "Matter Fabricator Casing"; - public static String mCasingName2 = "Containment Casing"; - public static String mCasingName3 = "Matter Generation Coil"; - - private int mMode = 0; - - private static final int MODE_SCRAP = 1; - private static final int MODE_UU = 0; - - public static boolean sRequiresUUA = false; - private static final FluidStack[] mUU = new FluidStack[2]; - private static final ItemStack[] mScrap = new ItemStack[2]; - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_MassFabricator(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_MassFabricator(final String aName) { - super(aName); - } - - @Override - public String getMachineType() { - return "Mass Fabricator / Recycler"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Matter Fabricator") - .addInfo("Speed: +0% | EU Usage: 80%") - .addInfo("Parallel: Scrap = 64 | UU = 8 * Tier") - .addInfo("Produces UU-A, UU-M & Scrap") - .addInfo("Change mode with screwdriver") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(5, 4, 5, true) - .addController("Front Center") - .addCasingInfoMin(mCasingName3, 9, false) - .addCasingInfoMin(mCasingName2, 24, false) - .addCasingInfoMin(mCasingName1, 36, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .addOutputHatch("Any Casing", 1) - .addEnergyHatch("Any Casing", 1) - .addMaintenanceHatch("Any Casing", 1) - .addMufflerHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.Overlay_MatterFab_Active_Animated; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.Overlay_MatterFab_Animated; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(9); - } - - @Override - public void onConfigLoad() { - super.onConfigLoad(); - sDurationMultiplier = ConfigMassFabricator.durationMultiplier; - sUUAperUUM = ConfigMassFabricator.UUAPerUUM; - sUUASpeedBonus = ConfigMassFabricator.UUASpeedBonus; - sRequiresUUA = ConfigMassFabricator.requiresUUA; - } - - public static boolean sInit = false; - - public static void init() { - if (!sInit) { - if (mScrap[0] == null) { - mScrap[0] = ItemUtils.getSimpleStack(ItemUtils.getItemFromFQRN("IC2:itemScrap")); - } - if (mScrap[1] == null) { - mScrap[1] = ItemUtils.getSimpleStack(ItemUtils.getItemFromFQRN("IC2:itemScrapbox")); - } - if (mUU[0] == null) { - mUU[0] = Materials.UUAmplifier.getFluid(100); - } - if (mUU[1] == null) { - mUU[1] = Materials.UUMatter.getFluid(100); - } - sInit = true; - } - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, - { "CGGGC", "G---G", "G---G", "G---G", "CGGGC" }, - { "CGGGC", "G---G", "G---G", "G---G", "CGGGC" }, - { "CC~CC", "CHHHC", "CHHHC", "CHHHC", "CCCCC" }, })) - .addElement( - 'C', - buildHatchAdder(GregtechMetaTileEntity_MassFabricator.class) - .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Energy, Muffler) - .casingIndex(TAE.GTPP_INDEX(9)) - .dot(1) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 9)))) - .addElement('H', ofBlock(ModBlocks.blockCasingsMisc, 8)) - .addElement('G', ofBlock(ModBlocks.blockCasings3Misc, 15)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 2, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 2, 3, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - return checkPiece(mName, 2, 3, 0) && mCasing >= 36 && checkHatch(); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiMassFabricator; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_MassFabricator(this.mName); - } - - /** - * Special Recipe Handling - */ - @Override - public RecipeMap getRecipeMap() { - return this.mMode == MODE_SCRAP ? RecipeMaps.recyclerRecipes : GTPPRecipeMaps.multiblockMassFabricatorRecipes; - } - - @Nonnull - @Override - public Collection> getAvailableRecipeMaps() { - return Arrays.asList(RecipeMaps.recyclerRecipes, GTPPRecipeMaps.multiblockMassFabricatorRecipes); - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - public CheckRecipeResult process() { - init(); - return super.process(); - } - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (mMode == MODE_SCRAP) { - if (recipe.mOutputs == null) { - return SimpleCheckRecipeResult.ofSuccess("no_scrap"); - } - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Nonnull - @Override - protected Stream findRecipeMatches(@Nullable RecipeMap map) { - if (mMode == MODE_SCRAP) { - if (inputItems != null) { - for (ItemStack item : inputItems) { - if (item == null || item.stackSize == 0) continue; - ItemStack aPotentialOutput = GT_ModHandler - .getRecyclerOutput(GT_Utility.copyAmount(1, item), 0); - GT_Recipe recipe = new GT_Recipe( - false, - new ItemStack[] { GT_Utility.copyAmount(1, item) }, - aPotentialOutput == null ? null : new ItemStack[] { aPotentialOutput }, - null, - new int[] { 2000 }, - null, - null, - 40, - (int) TierEU.RECIPE_LV, - 0); - return Stream.of(recipe); - } - } - return Stream.empty(); - } - return super.findRecipeMatches(map); - } - }.setEuModifier(0.8F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - protected void setupProcessingLogic(ProcessingLogic logic) { - super.setupProcessingLogic(logic); - logic.enablePerfectOverclock(); - } - - @Override - public int getMaxParallelRecipes() { - return this.mMode == MODE_SCRAP ? 64 : 8 * (Math.max(1, GT_Utility.getTier(getMaxInputVoltage()))); - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - int aMode = this.mMode + 1; - if (aMode > 1) { - this.mMode = MODE_UU; - PlayerUtils.messagePlayer(aPlayer, "Mode [" + this.mMode + "]: Matter/AmpliFabricator"); - } else if (aMode == 1) { - this.mMode = MODE_SCRAP; - PlayerUtils.messagePlayer(aPlayer, "Mode [" + this.mMode + "]: Recycler"); - } else { - this.mMode = MODE_SCRAP; - PlayerUtils.messagePlayer(aPlayer, "Mode [" + this.mMode + "]: Recycler"); - } - mLastRecipe = null; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mMode", mMode); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mMode = aNBT.getInteger("mMode"); - super.loadNBTData(aNBT); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - tag.setInteger("mode", mMode); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - final NBTTagCompound tag = accessor.getNBTData(); - currentTip.add( - StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " - + EnumChatFormatting.WHITE - + StatCollector.translateToLocal("GT5U.GTPP_MULTI_MASS_FABRICATOR.mode." + tag.getInteger("mode")) - + EnumChatFormatting.RESET); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_QuantumForceTransformer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_QuantumForceTransformer.java deleted file mode 100644 index 9f25f59f1f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_QuantumForceTransformer.java +++ /dev/null @@ -1,945 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.ExoticEnergy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_OreDictUnificator.getAssociation; -import static gregtech.api.util.GT_ParallelHelper.addFluidsLong; -import static gregtech.api.util.GT_ParallelHelper.addItemsLong; -import static gregtech.api.util.GT_ParallelHelper.calculateChancedOutputMultiplier; -import static gregtech.api.util.GT_RecipeBuilder.BUCKETS; -import static gregtech.api.util.GT_RecipeBuilder.INGOTS; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Nonnull; - -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; -import net.minecraft.world.IBlockAccess; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.ITierConverter; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureUtility; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TAE; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.objects.ItemData; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_ParallelHelper; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -@SuppressWarnings("SpellCheckingInspection") -public class GregtechMetaTileEntity_QuantumForceTransformer - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private int mCasing; - protected int mCraftingTier = 0; - protected int mFocusingTier = 0; - protected int mMaxParallel = 0; - private boolean mFluidMode = false, doFermium = false, doNeptunium = false; - private static final Fluid mNeptunium = ELEMENT.getInstance().NEPTUNIUM.getPlasma(); - private static final Fluid mFermium = ELEMENT.getInstance().FERMIUM.getPlasma(); - private static final String MAIN_PIECE = "main"; - private GT_MetaTileEntity_Hatch_Input mNeptuniumHatch; - private GT_MetaTileEntity_Hatch_Input mFermiumHatch; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - MAIN_PIECE, - new String[][] { // A - 142, B - 234, C - 177, D - 96, E - 224, H - 36, M - 21 - { " ", " ", " ", " ", " ", - " ", " ", " ", " ", " ", - " ", " ", " ", " BAB ", " BBBBABBBB ", - " BAAAAAAAB ", " BABBABBAB ", " BA AB ", " A A ", " A A ", - " A A " }, - { " ", " ", " ", " ", " ", - " ", " ", " ", " ", " ", - " ", " ", " BAB ", " AAABBBAAA ", " BAAAAAAAAAB ", - " B B ", " A A ", " A A ", " ", " ", - " " }, - { " ", " ", " ", " ", " ", - " ", " ", " ", " ", " ", - " ", " BAB ", " AA AA ", " AA AA ", " BAA AAB ", - " B B ", " A A ", " A A ", " ", " ", - " " }, - { " ", " ", " ", " ", " ", - " ", " ", " ", " ", " ", - " ", " BAAAB ", " AA AA ", " AA AA ", "BAA AAB", - "B B", "A A", "A A", "A A", "A A", - "A A" }, - { " TTT ", " EEE ", " EEE ", " EEE ", " DDD ", - " EEE ", " DDD ", " EEE ", " EEE ", " EEE ", - " DDD ", " BAEEEAB ", " AA EEE AA ", " A EEE A ", "BA DDD AB", - "B EEE B", "B DDD B", " EEE ", " EEE ", " EEE ", - " Z~X " }, - { " TTTTT ", " ECCCE ", " ECCCE ", " ECCCE ", " D D ", - " ECCCE ", " D D ", " ECCCE ", " ECCCE ", " ECCCE ", - " D D ", " BAECCCEAB ", " A ECCCE A ", " A ECCCE A ", "BA D D AB", - "B ECCCE B", "B D D B", "B ECCCE B", " ECCCE ", " ECCCE ", - " HHHHH " }, - { " TTTTTTT ", " ECCCCCE ", " EC CE ", " EC CE ", " D D ", - " EC CE ", " D D ", " EC CE ", " EC CE ", " EC CE ", - " D D ", " BAEC CEAB ", " B EC CE B ", "BB EC CE BB", "BA D D AB", - "A EC CE A", "A D D A", "A EC CE A", " EC CE ", " EC CE ", - " HHHHHHH " }, - { " TTTTTTT ", " ECCCCCE ", " EC CE ", " EC CE ", " D D ", - " EC CE ", " D D ", " EC CE ", " EC CE ", " EC CE ", - " D D ", " AAEC CEAA ", " A EC CE A ", "AB EC CE BA", "AA D D AA", - "A EC CE A", "A D D A", " EC CE ", " EC CE ", " EC CE ", - " HHHHHHH " }, - { " TTTTTTT ", " ECCCCCE ", " EC CE ", " EC CE ", " D D ", - " EC CE ", " D D ", " EC CE ", " EC CE ", " EC CE ", - " D D ", " BAEC CEAB ", " B EC CE B ", "BB EC CE BB", "BA D D AB", - "A EC CE A", "A D D A", "A EC CE A", " EC CE ", " EC CE ", - " HHHHHHH " }, - { " TTTTT ", " ECCCE ", " ECCCE ", " ECCCE ", " D D ", - " ECCCE ", " D D ", " ECCCE ", " ECCCE ", " ECCCE ", - " D D ", " BAECCCEAB ", " A ECCCE A ", " A ECCCE A ", "BA D D AB", - "B ECCCE B", "B D D B", "B ECCCE B", " ECCCE ", " ECCCE ", - " HHHHH " }, - { " TTT ", " EEE ", " EEE ", " EEE ", " DDD ", - " EEE ", " DDD ", " EEE ", " EEE ", " EEE ", - " DDD ", " BAEEEAB ", " AA EEE AA ", " A EEE A ", "BA DDD AB", - "B EEE B", "B DDD B", " EEE ", " EEE ", " EEE ", - " HHH " }, - { " ", " ", " ", " ", " ", - " ", " ", " ", " ", " ", - " ", " BAAAB ", " AA AA ", " AA AA ", "BAA AAB", - "B B", "A A", "A A", "A A", "A A", - "A A" }, - { " ", " ", " ", " ", " ", - " ", " ", " ", " ", " ", - " ", " BAB ", " AA AA ", " AA AA ", " BAA AAB ", - " B B ", " A A ", " A A ", " ", " ", - " " }, - { " ", " ", " ", " ", " ", - " ", " ", " ", " ", " ", - " ", " ", " BAB ", " AAABBBAAA ", " BAAAAAAAAAB ", - " B B ", " A A ", " A A ", " ", " ", - " " }, - { " ", " ", " ", " ", " ", - " ", " ", " ", " ", " ", - " ", " ", " ", " BAB ", " BBBBABBBB ", - " BBBAAABBB ", " ABBAAABBA ", " A BA AB A ", " A A ", " A A ", - " A A " }, }) - .addElement( - 'A', - withChannel( - "manipulator", - StructureUtility.ofBlocksTiered( - craftingTierConverter(), - getAllCraftingTiers(), - 0, - GregtechMetaTileEntity_QuantumForceTransformer::setCraftingTier, - GregtechMetaTileEntity_QuantumForceTransformer::getCraftingTier))) - .addElement( - 'B', - withChannel( - "shielding", - StructureUtility.ofBlocksTiered( - focusingTierConverter(), - getAllFocusingTiers(), - 0, - GregtechMetaTileEntity_QuantumForceTransformer::setFocusingTier, - GregtechMetaTileEntity_QuantumForceTransformer::getFocusingTier))) - .addElement('C', ofBlock(ModBlocks.blockCasings4Misc, 4)) - .addElement('D', ofBlock(ModBlocks.blockCasings2Misc, 12)) - .addElement('E', lazy(t -> ofBlock(t.getCasingBlock1(), t.getCasingMeta1()))) - .addElement( - 'H', - buildHatchAdder(GregtechMetaTileEntity_QuantumForceTransformer.class) - .atLeast(InputBus, InputHatch, Maintenance, Energy.or(ExoticEnergy)) - .casingIndex(TAE.getIndexFromPage(0, 10)) - .dot(4) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12)))) - .addElement( - 'T', - buildHatchAdder(GregtechMetaTileEntity_QuantumForceTransformer.class) - .atLeast(OutputBus, OutputHatch, Maintenance) - .casingIndex(TAE.getIndexFromPage(0, 10)) - .dot(5) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12)))) - .addElement( - 'Z', - buildHatchAdder(GregtechMetaTileEntity_QuantumForceTransformer.class) - .hatchClass(GT_MetaTileEntity_Hatch_Input.class) - .adder(GregtechMetaTileEntity_QuantumForceTransformer::addNeptuniumHatch) - .casingIndex(TAE.getIndexFromPage(0, 10)) - .dot(5) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12)))) - .addElement( - 'X', - buildHatchAdder(GregtechMetaTileEntity_QuantumForceTransformer.class) - .hatchClass(GT_MetaTileEntity_Hatch_Input.class) - .adder(GregtechMetaTileEntity_QuantumForceTransformer::addFermiumHatch) - .casingIndex(TAE.getIndexFromPage(0, 10)) - .dot(5) - .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12)))) - .build(); - - public GregtechMetaTileEntity_QuantumForceTransformer(final int aID, final String aName, - final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_QuantumForceTransformer(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_QuantumForceTransformer(this.mName); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Quantum Force Transformer") - .addInfo("Controller Block for the Quantum Force Transformer") - .addInfo("Allows Complex chemical lines to be performed instantly in one step") - .addInfo("Every recipe requires a catalyst, each catalyst adds 1 parallel and lasts forever") - .addInfo("Accepts TecTech Energy and Laser Hatches") - .addInfo("All inputs go on the bottom, all outputs go on the top") - .addInfo("Put a circuit in the controller to specify the focused output") - .addInfo("Check NEI to see the order of outputs, and which circuit number you need.") - .addInfo("If separate input busses are enabled put the circuit in the circuit slot of the bus") - .addInfo("Uses FocusTier*4*sqrt(parallels) Neptunium Plasma if focusing") - .addInfo("Can use FocusTier*4*sqrt(parallels) Fermium Plasma for additional chance output") - .addInfo("Use a screwdriver to enable Fluid mode") - .addInfo( - "Fluid mode turns all possible outputs into their fluid variant, those which can't are left as they were.") - .addInfo("This multi gets improved when all casings of some types are upgraded") - .addInfo("Casing functions:") - .addInfo("Pulse Manipulators: Recipe Tier Allowed (check NEI for the tier of each recipe)") - .addInfo("Shielding Cores: Focusing Tier (equal to or higher than recipe tier to allow focus)") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(15, 21, 15, true) - .addController("Bottom Center") - .addCasingInfoMin("Bulk Production Frame", 80, false) - .addCasingInfoMin("Quantum Force Conductor", 177, false) - .addCasingInfoMin("Force Field Glass", 224, false) - .addCasingInfoMin("Pulse Manipulators", 236, true) - .addCasingInfoMin("Shielding Cores", 142, true) - .addInputBus(EnumChatFormatting.BLUE + "Bottom" + EnumChatFormatting.GRAY + " Layer", 4) - .addInputHatch(EnumChatFormatting.BLUE + "Bottom" + EnumChatFormatting.GRAY + " Layer", 4) - .addOutputHatch(EnumChatFormatting.AQUA + "Top" + EnumChatFormatting.GRAY + " Layer", 5) - .addOutputBus(EnumChatFormatting.AQUA + "Top" + EnumChatFormatting.GRAY + " Layer", 5) - .addEnergyHatch(EnumChatFormatting.BLUE + "Bottom" + EnumChatFormatting.GRAY + " Layer", 4) - .addStructureInfo( - EnumChatFormatting.WHITE + "Neptunium Plasma Hatch: " - + EnumChatFormatting.GREEN - + "Left" - + EnumChatFormatting.GRAY - + " side of Controller") - .addStructureInfo( - EnumChatFormatting.WHITE + "Fermium Plasma Hatch: " - + EnumChatFormatting.DARK_GREEN - + "Right" - + EnumChatFormatting.GRAY - + " side of Controller") - .toolTipFinisher( - GT_Values.AuthorBlueWeabo + EnumChatFormatting.RESET - + EnumChatFormatting.GREEN - + " + Steelux" - + EnumChatFormatting.RESET - + " - [GT++]"); - return tt; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - this.mCasing = 0; - this.mCraftingTier = 0; - this.mFocusingTier = 0; - if (!checkPiece(MAIN_PIECE, 7, 20, 4)) { - return false; - } - - if (mOutputBusses.isEmpty() || mOutputHatches.isEmpty()) { - return false; - } - - // Maintenance hatch not required but left for compatibility. - // Don't allow more than 1, no free casing spam! - if (mMaintenanceHatches.size() > 1) { - return false; - } - - return checkExoticAndNormalEnergyHatches(); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(MAIN_PIECE, stackSize, hintsOnly, 7, 20, 4); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(MAIN_PIECE, stackSize, 7, 20, 4, elementBudget, env, false, true); - } - - public static List> getAllCraftingTiers() { - return new ArrayList<>() { - - { - add(Pair.of(ModBlocks.blockCasings5Misc, 7)); - add(Pair.of(ModBlocks.blockCasings5Misc, 8)); - add(Pair.of(ModBlocks.blockCasings5Misc, 9)); - add(Pair.of(ModBlocks.blockCasings5Misc, 10)); - } - }; - } - - public static List> getAllFocusingTiers() { - return new ArrayList<>() { - - { - add(Pair.of(ModBlocks.blockCasings5Misc, 11)); - add(Pair.of(ModBlocks.blockCasings5Misc, 12)); - add(Pair.of(ModBlocks.blockCasings5Misc, 13)); - add(Pair.of(ModBlocks.blockCasings5Misc, 14)); - } - }; - } - - public static ITierConverter craftingTierConverter() { - return (block, meta) -> { - if (block == null) { - return -1; - } else if (block == ModBlocks.blockCasings5Misc) { // Resonance Chambers - switch (meta) { - case 7 -> { - return 1; - } - case 8 -> { - return 2; - } - case 9 -> { - return 3; - } - case 10 -> { - return 4; - } - } - } - return -1; - }; - } - - public static ITierConverter focusingTierConverter() { - return (block, meta) -> { - if (block == null) { - return -1; - } else if (block == ModBlocks.blockCasings5Misc) { // Generation Coils - switch (meta) { - case 11 -> { - return 1; - } - case 12 -> { - return 2; - } - case 13 -> { - return 3; - } - case 14 -> { - return 4; - } - } - } - return -1; - }; - } - - private void setCraftingTier(int tier) { - mCraftingTier = tier; - } - - private void setFocusingTier(int tier) { - mFocusingTier = tier; - } - - private int getCraftingTier() { - return mCraftingTier; - } - - private int getFocusingTier() { - return mFocusingTier; - } - - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAQFTActive; - } - - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAQFT; - } - - protected int getCasingTextureId() { - return TAE.getIndexFromPage(0, 10); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.quantumForceTransformerRecipes; - } - - @Override - public boolean isCorrectMachinePart(final ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - private int[] chances; - private FluidStack[] fluidModeItems; - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (recipe.mSpecialValue > getCraftingTier()) { - return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); - } - ItemStack catalyst = null; - for (ItemStack item : recipe.mInputs) { - if (ItemUtils.isCatalyst(item)) { - catalyst = item; - break; - } - } - - if (catalyst == null) { - return SimpleCheckRecipeResult.ofFailure("no_catalyst"); - } - - maxParallel = 0; - for (ItemStack item : inputItems) { - if (ItemUtils.isCatalyst(item) && item.isItemEqual(catalyst)) { - maxParallel += item.stackSize; - } - } - - mMaxParallel = maxParallel; - doFermium = false; - doNeptunium = false; - - if (recipe.mSpecialValue <= getFocusingTier()) { - if (drain(mFermiumHatch, new FluidStack(mFermium, 1), false)) { - doFermium = true; - } - if (drain(mNeptuniumHatch, new FluidStack(mNeptunium, 1), false)) { - doNeptunium = true; - } - } - - chances = getOutputChances(recipe, doNeptunium ? findProgrammedCircuitNumber() : -1); - - // Handle Fluid Mode. Add fluid that item can be turned into to fluidModeItems. - // null if Fluid Mode is disabled or item cannot be turned into fluid. - fluidModeItems = new FluidStack[recipe.mOutputs.length]; - if (mFluidMode) { - for (int i = 0; i < recipe.mOutputs.length; i++) { - ItemStack item = recipe.getOutput(i); - if (item == null) continue; - ItemData data = getAssociation(item); - Materials mat = data == null ? null : data.mMaterial.mMaterial; - if (mat != null) { - if (mat.mStandardMoltenFluid != null) { - fluidModeItems[i] = mat.getMolten(INGOTS); - } else if (mat.mFluid != null) { - fluidModeItems[i] = mat.getFluid(BUCKETS); - } - } - } - } - - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - public GT_ParallelHelper createParallelHelper(@Nonnull GT_Recipe recipe) { - return super.createParallelHelper(recipe).setCustomItemOutputCalculation(parallel -> { - ArrayList items = new ArrayList<>(); - - for (int i = 0; i < recipe.mOutputs.length; i++) { - ItemStack item = recipe.getOutput(i); - if (item == null || fluidModeItems[i] != null) continue; - ItemStack itemToAdd = item.copy(); - double outputMultiplier = calculateChancedOutputMultiplier(chances[i], parallel); - long itemAmount = (long) (item.stackSize * outputMultiplier); - addItemsLong(items, itemToAdd, itemAmount); - } - - return items.toArray(new ItemStack[0]); - }) - .setCustomFluidOutputCalculation(parallel -> { - ArrayList fluids = new ArrayList<>(); - - if (mFluidMode) { - for (int i = 0; i < recipe.mOutputs.length; i++) { - FluidStack fluid = fluidModeItems[i]; - if (fluid == null) continue; - FluidStack fluidToAdd = fluid.copy(); - double outputMultiplier = calculateChancedOutputMultiplier(chances[i], parallel); - int itemAmount = recipe.mOutputs[i].stackSize; - long fluidAmount = (long) (fluidToAdd.amount * outputMultiplier * itemAmount); - addFluidsLong(fluids, fluidToAdd, fluidAmount); - } - } - - for (int i = 0; i < recipe.mFluidOutputs.length; i++) { - FluidStack fluid = recipe.getFluidOutput(i); - if (fluid == null) continue; - FluidStack fluidToAdd = fluid.copy(); - double outputMultiplier = calculateChancedOutputMultiplier( - chances[i + recipe.mOutputs.length], - parallel); - long fluidAmount = (long) (fluidToAdd.amount * outputMultiplier); - addFluidsLong(fluids, fluidToAdd, fluidAmount); - } - - return fluids.toArray(new FluidStack[0]); - }); - } - - private int findProgrammedCircuitNumber() { - if (isInputSeparationEnabled()) { - for (ItemStack stack : inputItems) { - if (GT_Utility.isAnyIntegratedCircuit(stack)) { - return stack.getItemDamage() - 1; - } - } - return -1; - } else { - final ItemStack controllerStack = getControllerSlot(); - return GT_Utility.isAnyIntegratedCircuit(controllerStack) ? controllerStack.getItemDamage() - 1 - : -1; - } - } - }; - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(getAverageInputVoltage()); - logic.setAvailableAmperage(getMaxInputAmps()); - } - - private byte runningTick = 0; - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (!super.onRunningTick(aStack)) { - return false; - } - - if (runningTick % 20 == 0) { - int amount = (int) (getFocusingTier() * 4 - * Math.sqrt(Math.min(mMaxParallel, processingLogic.getCurrentParallels()))); - if (doFermium) { - FluidStack fermiumToConsume = new FluidStack(mFermium, amount); - if (!drain(mFermiumHatch, fermiumToConsume, true)) { - doFermium = false; - stopMachine(ShutDownReasonRegistry.outOfFluid(fermiumToConsume)); - return false; - } - } - - if (doNeptunium) { - FluidStack neptuniumToConsume = new FluidStack(mNeptunium, amount); - if (!drain(mNeptuniumHatch, neptuniumToConsume, true)) { - doNeptunium = false; - stopMachine(ShutDownReasonRegistry.outOfFluid(neptuniumToConsume)); - return false; - } - } - - runningTick = 1; - } else { - runningTick++; - } - - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - // TODO: Look for proper fix - // Updates every 30 sec - if (mUpdate <= -550) mUpdate = 50; - } - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return 0; - } - - @Override - public int getDamageToComponent(final ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - public static int getBaseOutputChance(GT_Recipe tRecipe) { - int aOutputsAmount = tRecipe.mOutputs.length + tRecipe.mFluidOutputs.length; - return 10000 / aOutputsAmount; - } - - private int[] getOutputChances(GT_Recipe tRecipe, int aChanceIncreased) { - int difference = getFocusingTier() - tRecipe.mSpecialValue; - int aOutputsAmount = tRecipe.mOutputs.length + tRecipe.mFluidOutputs.length; - int aChancePerOutput = 10000 / aOutputsAmount; - int[] tChances = new int[aOutputsAmount]; - Arrays.fill(tChances, aChancePerOutput); - - switch (difference) { - case 0 -> { - for (int i = 0; i < tChances.length; i++) { - if (doNeptunium) { - if (i == aChanceIncreased) { - tChances[i] += aChancePerOutput / 2 * (aOutputsAmount - 1); - } else { - tChances[i] /= 2; - } - } - - if (doFermium) { - tChances[i] += (10000 - tChances[i]) / 4; - } - } - } - case 1 -> { - for (int i = 0; i < tChances.length; i++) { - if (doNeptunium) { - if (i == aChanceIncreased) { - tChances[i] += aChancePerOutput * 3 / 4 * (aOutputsAmount - 1); - } else { - tChances[i] /= 4; - } - } - - if (doFermium) { - tChances[i] += (10000 - tChances[i]) / 3; - } - } - } - case 2, 3 -> { - for (int i = 0; i < tChances.length; i++) { - if (doNeptunium) { - if (i == aChanceIncreased) { - tChances[i] = 10000; - } else { - tChances[i] = 0; - } - } - - if (doFermium) { - tChances[i] += (10000 - tChances[i]) / 2; - } - } - } - } - return tChances; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - mFluidMode = !mFluidMode; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("miscutils.machines.QFTFluidMode") + " " + mFluidMode); - } - - public boolean addNeptuniumHatch(IGregTechTileEntity aTileEntity, short aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = null; - mNeptuniumHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - return true; - } - return false; - } - - public boolean addFermiumHatch(IGregTechTileEntity aTileEntity, short aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mRecipeMap = null; - mFermiumHatch = (GT_MetaTileEntity_Hatch_Input) aMetaTileEntity; - return true; - } - return false; - } - - public Block getCasingBlock1() { - return ModBlocks.blockCasings5Misc; - } - - public byte getCasingMeta1() { - return 15; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setBoolean("mFluidMode", mFluidMode); - aNBT.setBoolean("doFermium", doFermium); - aNBT.setBoolean("doNeptunium", doNeptunium); - aNBT.setInteger("mMaxParallel", mMaxParallel); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { - inputSeparation = aNBT.getBoolean("mSeparateInputBusses"); - } - if (!aNBT.hasKey(BATCH_MODE_NBT_KEY)) { - batchMode = aNBT.getBoolean("mBatchMode"); - } - mFluidMode = aNBT.getBoolean("mFluidMode"); - doFermium = aNBT.getBoolean("doFermium"); - doNeptunium = aNBT.getBoolean("doNeptunium"); - mMaxParallel = aNBT.getInteger("mMaxParallel"); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { getCasingTexture(), TextureFactory.builder() - .addIcon(getActiveOverlay()) - .extFacing() - .build() }; - return new ITexture[] { getCasingTexture(), TextureFactory.builder() - .addIcon(getInactiveOverlay()) - .extFacing() - .build() }; - } - return new ITexture[] { getCasingTexture() }; - } - - private ITexture getCasingTexture() { - return Textures.BlockIcons.getCasingTextureForId(getCasingTextureId()); - } - - @SideOnly(Side.CLIENT) - private void renderForceField(double x, double y, double z, int side, double minU, double maxU, double minV, - double maxV) { - // spotless:off - Tessellator tes = Tessellator.instance; - switch (side) { - case 0 -> { - tes.addVertexWithUV(x + 3, y, z + 7, maxU, maxV); - tes.addVertexWithUV(x + 3, y + 4, z + 7, maxU, minV); - tes.addVertexWithUV(x - 3, y + 4, z + 7, minU, minV); - tes.addVertexWithUV(x - 3, y, z + 7, minU, maxV); - tes.addVertexWithUV(x - 3, y, z + 7, minU, maxV); - tes.addVertexWithUV(x - 3, y + 4, z + 7, minU, minV); - tes.addVertexWithUV(x + 3, y + 4, z + 7, maxU, minV); - tes.addVertexWithUV(x + 3, y, z + 7, maxU, maxV); - } - case 1 -> { - tes.addVertexWithUV(x + 7, y, z + 4, maxU, maxV); - tes.addVertexWithUV(x + 7, y + 4, z + 4, maxU, minV); - tes.addVertexWithUV(x + 7, y + 4, z - 4, minU, minV); - tes.addVertexWithUV(x + 7, y, z - 4, minU, maxV); - tes.addVertexWithUV(x + 7, y, z - 4, minU, maxV); - tes.addVertexWithUV(x + 7, y + 4, z - 4, minU, minV); - tes.addVertexWithUV(x + 7, y + 4, z + 4, maxU, minV); - tes.addVertexWithUV(x + 7, y, z + 4, maxU, maxV); - } - case 2 -> { - tes.addVertexWithUV(x + 3, y, z - 7, maxU, maxV); - tes.addVertexWithUV(x + 3, y + 4, z - 7, maxU, minV); - tes.addVertexWithUV(x - 3, y + 4, z - 7, minU, minV); - tes.addVertexWithUV(x - 3, y, z - 7, minU, maxV); - tes.addVertexWithUV(x - 3, y, z - 7, minU, maxV); - tes.addVertexWithUV(x - 3, y + 4, z - 7, minU, minV); - tes.addVertexWithUV(x + 3, y + 4, z - 7, maxU, minV); - tes.addVertexWithUV(x + 3, y, z - 7, maxU, maxV); - } - case 3 -> { - tes.addVertexWithUV(x - 7, y, z + 4, maxU, maxV); - tes.addVertexWithUV(x - 7, y + 4, z + 4, maxU, minV); - tes.addVertexWithUV(x - 7, y + 4, z - 4, minU, minV); - tes.addVertexWithUV(x - 7, y, z - 4, minU, maxV); - tes.addVertexWithUV(x - 7, y, z - 4, minU, maxV); - tes.addVertexWithUV(x - 7, y + 4, z - 4, minU, minV); - tes.addVertexWithUV(x - 7, y + 4, z + 4, maxU, minV); - tes.addVertexWithUV(x - 7, y, z + 4, maxU, maxV); - } - case 4 -> { - tes.addVertexWithUV(x - 3, y, z + 7, maxU, maxV); - tes.addVertexWithUV(x - 3, y + 4, z + 7, maxU, minV); - tes.addVertexWithUV(x - 7, y + 4, z + 4, minU, minV); - tes.addVertexWithUV(x - 7, y, z + 4, minU, maxV); - tes.addVertexWithUV(x - 7, y, z + 4, minU, maxV); - tes.addVertexWithUV(x - 7, y + 4, z + 4, minU, minV); - tes.addVertexWithUV(x - 3, y + 4, z + 7, maxU, minV); - tes.addVertexWithUV(x - 3, y, z + 7, maxU, maxV); - } - case 5 -> { - tes.addVertexWithUV(x - 3, y, z - 7, maxU, maxV); - tes.addVertexWithUV(x - 3, y + 4, z - 7, maxU, minV); - tes.addVertexWithUV(x - 7, y + 4, z - 4, minU, minV); - tes.addVertexWithUV(x - 7, y, z - 4, minU, maxV); - tes.addVertexWithUV(x - 7, y, z - 4, minU, maxV); - tes.addVertexWithUV(x - 7, y + 4, z - 4, minU, minV); - tes.addVertexWithUV(x - 3, y + 4, z - 7, maxU, minV); - tes.addVertexWithUV(x - 3, y, z - 7, maxU, maxV); - } - case 6 -> { - tes.addVertexWithUV(x + 3, y, z + 7, maxU, maxV); - tes.addVertexWithUV(x + 3, y + 4, z + 7, maxU, minV); - tes.addVertexWithUV(x + 7, y + 4, z + 4, minU, minV); - tes.addVertexWithUV(x + 7, y, z + 4, minU, maxV); - tes.addVertexWithUV(x + 7, y, z + 4, minU, maxV); - tes.addVertexWithUV(x + 7, y + 4, z + 4, minU, minV); - tes.addVertexWithUV(x + 3, y + 4, z + 7, maxU, minV); - tes.addVertexWithUV(x + 3, y, z + 7, maxU, maxV); - } - case 7 -> { - tes.addVertexWithUV(x + 3, y, z - 7, maxU, maxV); - tes.addVertexWithUV(x + 3, y + 4, z - 7, maxU, minV); - tes.addVertexWithUV(x + 7, y + 4, z - 4, minU, minV); - tes.addVertexWithUV(x + 7, y, z - 4, minU, maxV); - tes.addVertexWithUV(x + 7, y, z - 4, minU, maxV); - tes.addVertexWithUV(x + 7, y + 4, z - 4, minU, minV); - tes.addVertexWithUV(x + 3, y + 4, z - 7, maxU, minV); - tes.addVertexWithUV(x + 3, y, z - 7, maxU, maxV); - } - } - } - - @SideOnly(Side.CLIENT) - @Override - public boolean renderInWorld(IBlockAccess aWorld, int x, int y, int z, Block block, RenderBlocks renderer) { - Tessellator tes = Tessellator.instance; - IIcon forceField = TexturesGtBlock.ForceField.getIcon(); - if (getBaseMetaTileEntity().isActive()) { - double minU = forceField.getMinU(); - double maxU = forceField.getMaxU(); - double minV = forceField.getMinV(); - double maxV = forceField.getMaxV(); - double xBaseOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetX; - double zBaseOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetZ; - tes.setColorOpaque_F(1f, 1f, 1f); - tes.setBrightness(15728880); - //Center O: 0, 0 1 ------- 8 - //Corner 1: 7, -2 / \ - //Corner 2: 3, -6 2 / \ 7 - //Corner 3: -2, -6 | | - //Corner 4: -6, -2 | O | - //Corner 5: -6, 3 | | - //Corner 6: -2, 7 3 \ / 6 - //Corner 7: 3, 7 \ / - //Corner 8: 7, 3 4 ------- 5 - renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 0, minU, maxU, minV, maxV); - renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 1, minU, maxU, minV, maxV); - renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 2, minU, maxU, minV, maxV); - renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 3, minU, maxU, minV, maxV); - renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 4, minU, maxU, minV, maxV); - renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 5, minU, maxU, minV, maxV); - renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 6, minU, maxU, minV, maxV); - renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 7, minU, maxU, minV, maxV); - } - // Needs to be false to render the controller - return false; - //spotless:on - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Refinery.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Refinery.java deleted file mode 100644 index 8a6564858e..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_Refinery.java +++ /dev/null @@ -1,220 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.filterByMTETier; - -import net.minecraft.item.ItemStack; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.TAE; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; - -public class GregtechMetaTileEntity_Refinery extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - public GregtechMetaTileEntity_Refinery(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_Refinery(final String aName) { - super(aName); - } - - @Override - public String getMachineType() { - return "Fuel Refinery"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Fission Fuel Processing Unit") - .addInfo("Refines fluorides and Uranium into nuclear fuel for the LFTR") - .addInfo("LFTR Fuel 2 and Fuel 3 have alternative, much more efficient recipes") - .addInfo("However, they require fission breeding outputs from the LFTR itself") - .addInfo("Only one Energy Hatch is allowed per Processing Unit") - .addInfo("All recipe times in this multi are very long, watch out!") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(3, 9, 3, false) - .addController("Bottom Center") - .addCasingInfoMin("Hastelloy-X Structural Block", 7, false) - .addCasingInfoMin("Incoloy-DS Fluid Containment Block", 5, false) - .addCasingInfoMin("Zeron-100 Reactor Shielding", 4, false) - .addCasingInfoMin("Hastelloy-N Sealant Blocks", 17, false) - .addInputHatch("Base platform", 1) - .addOutputHatch("Base platform", 1) - .addMufflerHatch("Base platform", 1) - .addMaintenanceHatch("Base platform", 1) - .addEnergyHatch("Base platform", 1) - .addStructureInfo("Muffler's Tier must be IV+") - .addStructureInfo("2-4x Input Hatches, 1-2x Output Hatches") - .addStructureInfo("1x Muffler, 1x Maintenance Hatch, 1x Energy Hatch") - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - @Override - protected IIconContainer getActiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_ACTIVE; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER; - } - - @Override - protected int getCasingTextureId() { - return TAE.GTPP_INDEX(18); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.fissionFuelProcessingRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic(); - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - @Override - public boolean addMufflerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Muffler - && ((GT_MetaTileEntity_Hatch_Muffler) aMetaTileEntity).mTier >= 5) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } - } - return false; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { { " ", " N ", " " }, { " N ", "NIN", " N " }, { " N ", "NIN", " N " }, - { " N ", "NIN", " N " }, { " Z ", "ZIZ", " Z " }, { " N ", "NIN", " N " }, - { "XXX", "XXX", "XXX" }, { "X~X", "XXX", "XXX" }, })) - .addElement( - 'X', - ofChain( - buildHatchAdder(GregtechMetaTileEntity_Refinery.class) - .atLeast(Energy, Maintenance, OutputHatch, OutputBus, InputHatch) - .casingIndex(TAE.GTPP_INDEX(18)) - .dot(1) - .build(), - buildHatchAdder(GregtechMetaTileEntity_Refinery.class).atLeast(Muffler) - .adder(GregtechMetaTileEntity_Refinery::addMufflerToMachineList) - .hatchItemFilterAnd(t -> filterByMTETier(6, Integer.MAX_VALUE)) - .casingIndex(TAE.GTPP_INDEX(18)) - .dot(1) - .build(), - onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 2)))) - .addElement('I', ofBlock(ModBlocks.blockCasings2Misc, 3)) - .addElement('N', ofBlock(ModBlocks.blockCasings2Misc, 1)) - .addElement('Z', ofBlock(ModBlocks.blockCasingsMisc, 13)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 1, 7, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 1, 7, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - if (checkPiece(mName, 1, 7, 0) && mCasing >= 7) { - if (this.mInputHatches.size() >= 2 && this.mInputHatches.size() <= 4 - && this.mOutputHatches.size() >= 1 - && this.mOutputHatches.size() <= 2 - && this.mMufflerHatches.size() == 1 - && this.mMaintenanceHatches.size() == 1 - && this.mEnergyHatches.size() == 1) { - this.resetRecipeMapForAllInputHatches(this.getRecipeMap()); - return true; - } - } - return false; - } - - @Override - public boolean isCorrectMachinePart(final ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiRefinery; - } - - @Override - public int getDamageToComponent(final ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_Refinery(this.mName); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_SolarTower.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_SolarTower.java deleted file mode 100644 index 0f3d201cb5..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntity_SolarTower.java +++ /dev/null @@ -1,675 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -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.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.MISC_MATERIALS; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.tileentities.misc.TileEntitySolarHeater; - -public class GregtechMetaTileEntity_SolarTower extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - // 862 - private static final int mCasingTextureID = TAE.getIndexFromPage(3, 9); - private int mHeatLevel = 0; - private int mCasing1; - private int mCasing2; - private int mCasing3; - private int mCasing4; - - public ArrayList mSolarHeaters = new ArrayList<>(); - - public GregtechMetaTileEntity_SolarTower(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMetaTileEntity_SolarTower(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaTileEntity_SolarTower(this.mName); - } - - @Override - public String getMachineType() { - return "Solar Tower"; - } - - @Override - protected final GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Contributing Green Energy towards the future") - .addInfo("Surround with rings of Solar Reflectors") - .addInfo("The Reflectors increase the internal heat value of the Tower (see below for formula)") - .addInfo("Each Reflector ring increases tier, the first ring is required for the Tower to work") - .addInfo("Input: " + MISC_MATERIALS.SOLAR_SALT_COLD.getLocalizedName()) - .addInfo("Output: " + MISC_MATERIALS.SOLAR_SALT_HOT.getLocalizedName()) - .addInfo("Every cycle (10 seconds), heat increases and all the Cold Solar Salt is heated") - .addInfo("Converting Cold to Hot Solar Salt reduces heat, equal to the amount converted") - .addInfo("This conversion only happens if heat >= 30000 and controller efficiency = 100%") - .addInfo("If there's more Cold Salt than heat, all the heat is used up and returns to 0") - .addInfo("The heat increase is most efficient at exactly half of maximum heat") - .addInfo("Minimum efficiency at 0 or 100000 heat, maximum efficiency at 50000") - .addInfo("Heat Efficiency formula: ( 7000 - [|currentHeat - 50000| ^ 0.8]) / 7000") - .addInfo("Heat gain per cycle: numberHeaters * heatEfficiency * (10 + bonus)") - .addInfo("Bonus: 1 ring = +1, 2 rings = +2, 3 rings = +4, 4 rings = +8, 5 rings = +16") - .addInfo("Total number of reflectors based on how many rings are built:") - .addInfo("1 ring = 36, 2 rings = 88, 3 rings = 156, 4 rings = 240, 5 rings = 340") - .addSeparator() - .beginVariableStructureBlock(15, 31, 28, 28, 15, 31, false) - .addController("Top Middle") - .addCasingInfoMin("Structural Solar Casing", 229, false) - .addCasingInfoMin("Thermally Insulated Casing", 60, false) - .addCasingInfoMin("Salt Containment Casing", 66, false) - .addCasingInfoMin("Thermal Containment Casing", 60, false) - .addInputHatch("Any 2 dot hint(min 1)", 2) - .addOutputHatch("Any 2 dot hint(min 1)", 2) - .addMaintenanceHatch("Any 2 dot hint", 2) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - private static final String STRUCTURE_PIECE_BASE = "base"; - private static final String STRUCTURE_PIECE_TOWER = "tower"; - private static final String STRUCTURE_PIECE_TOP = "top"; - - private static final String[] STRUCTURE_PIECE_SOLAR_HEATER_RING = { "ring1", "ring2", "ring3", "ring4", "ring5" }; - private static final String SOLAR_HEATER_RING_1 = STRUCTURE_PIECE_SOLAR_HEATER_RING[0]; - private static final String SOLAR_HEATER_RING_2 = STRUCTURE_PIECE_SOLAR_HEATER_RING[1]; - private static final String SOLAR_HEATER_RING_3 = STRUCTURE_PIECE_SOLAR_HEATER_RING[2]; - private static final String SOLAR_HEATER_RING_4 = STRUCTURE_PIECE_SOLAR_HEATER_RING[3]; - private static final String SOLAR_HEATER_RING_5 = STRUCTURE_PIECE_SOLAR_HEATER_RING[4]; - - private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { - - @Override - protected IStructureDefinition computeValue(Class type) { - return StructureDefinition.builder() - - // s = salt - // c = thermal containment - // i = thermal insulated - // t = solar structural - // h = hatch - // g = solar heater - - .addShape( - STRUCTURE_PIECE_TOP, - (new String[][] { { " ", " ", " ~ ", " ", " " }, - { " ", " s ", " sss ", " s ", " " }, - { " c ", " ccc ", "ccscc", " ccc ", " c " }, - { " c ", " ccc ", "ccscc", " ccc ", " c " }, - { " c ", " ccc ", "ccscc", " ccc ", " c " }, - { " c ", " ccc ", "ccscc", " ccc ", " c " }, - { " c ", " ccc ", "ccscc", " ccc ", " c " }, })) - .addShape( - STRUCTURE_PIECE_TOWER, - (new String[][] { { " i ", "isi", " i " }, { " i ", "isi", " i " }, { " i ", "isi", " i " }, - { " i ", "isi", " i " }, { " i ", "isi", " i " }, { " i ", "isi", " i " }, - { " i ", "isi", " i " }, { " i ", "isi", " i " }, { " i ", "isi", " i " }, - { " i ", "isi", " i " }, { " i ", "isi", " i " }, { " i ", "isi", " i " }, - { " i ", "isi", " i " }, { " i ", "isi", " i " }, { " i ", "isi", " i " }, })) - .addShape( - STRUCTURE_PIECE_BASE, - (new String[][] { - { " ", " ", " t ", " ttt ", " ttstt ", " ttssstt ", - " ttstt ", " ttt ", " t ", " ", " " }, - { " ", " ", " t ", " ttt ", " tssst ", " ttssstt ", - " tssst ", " ttt ", " t ", " ", " " }, - { " ", " t ", " ttt ", " ttttt ", " ttssstt ", " tttsssttt ", - " ttssstt ", " ttttt ", " ttt ", " t ", " " }, - { " ", " t ", " ttt ", " ttttt ", " ttssstt ", " tttsssttt ", - " ttssstt ", " ttttt ", " ttt ", " t ", " " }, - { " hhh ", " ttttt ", " ttttttt ", " ttttttttt ", "htttsssttth", "htttsssttth", - "htttsssttth", " ttttttttt ", " ttttttt ", " ttttt ", " hhh " }, - { " hhh ", " ttttt ", " ttttttt ", " ttttttttt ", "httttttttth", "httttttttth", - "httttttttth", " ttttttttt ", " ttttttt ", " ttttt ", " hhh " }, })) - .addShape( - SOLAR_HEATER_RING_1, - (new String[][] { { " ggggg ", " g g ", " g g ", " g g ", - " g g ", "g g", "g g", "g g", "g g", - "g g", " g g ", " g g ", " g g ", " g g ", - " ggggg ", } })) - .addShape( - SOLAR_HEATER_RING_2, - (new String[][] { - { " ggggggggg ", " g g ", " g g ", " g g ", - " g g ", "g g", "g g", "g g", - "g g", "g g", "g g", "g g", - "g g", "g g", " g g ", " g g ", - " g g ", " g g ", " ggggggggg ", } })) - .addShape( - SOLAR_HEATER_RING_3, - (new String[][] { { " ggggggggggggg ", " g g ", " g g ", - " g g ", " g g ", "g g", - "g g", "g g", "g g", - "g g", "g g", "g g", - "g g", "g g", "g g", - "g g", "g g", "g g", - " g g ", " g g ", " g g ", - " g g ", " ggggggggggggg ", } })) - .addShape( - SOLAR_HEATER_RING_4, - (new String[][] { { " ggggggggggggggggg ", " g g ", - " g g ", " g g ", " g g ", - "g g", "g g", "g g", - "g g", "g g", "g g", - "g g", "g g", "g g", - "g g", "g g", "g g", - "g g", "g g", "g g", - "g g", "g g", " g g ", - " g g ", " g g ", " g g ", - " ggggggggggggggggg ", } })) - .addShape( - SOLAR_HEATER_RING_5, - (new String[][] { { " ggggggggggggggggggggg ", " g g ", - " g g ", " g g ", - " g g ", "g g", - "g g", "g g", - "g g", "g g", - "g g", "g g", - "g g", "g g", - "g g", "g g", - "g g", "g g", - "g g", "g g", - "g g", "g g", - "g g", "g g", - "g g", "g g", - " g g ", " g g ", - " g g ", " g g ", - " ggggggggggggggggggggg ", } })) - .addElement( - 'g', - lazy( - t -> buildHatchAdder(GregtechMetaTileEntity_SolarTower.class) - .hatchClass(TileEntitySolarHeater.class) - .adder(GregtechMetaTileEntity_SolarTower::addSolarHeater) - // Use a positive casing index to make adder builder happy - .casingIndex(1) - .dot(1) - .continueIfSuccess() - .build())) - .addElement( - 't', - lazy(t -> onElementPass(x -> ++x.mCasing1, ofBlock(t.getCasingBlock(), t.getCasingMeta())))) - .addElement( - 'i', - lazy(t -> onElementPass(x -> ++x.mCasing2, ofBlock(t.getCasingBlock(), t.getCasingMeta2())))) - .addElement( - 's', - lazy(t -> onElementPass(x -> ++x.mCasing3, ofBlock(t.getCasingBlock(), t.getCasingMeta3())))) - .addElement( - 'c', - lazy(t -> onElementPass(x -> ++x.mCasing4, ofBlock(t.getCasingBlock2(), t.getCasingMeta4())))) - .addElement( - 'h', - lazy( - t -> buildHatchAdder(GregtechMetaTileEntity_SolarTower.class) - .atLeast(InputHatch, OutputHatch, Maintenance) - .casingIndex(t.getCasingTextureIndex()) - .dot(2) - .buildAndChain( - onElementPass(x -> ++x.mCasing1, ofBlock(t.getCasingBlock(), t.getCasingMeta()))))) - .build(); - } - }; - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - resetSolarHeaters(); - this.mMaintenanceHatches.clear(); - this.mInputHatches.clear(); - this.mOutputHatches.clear(); - mCasing1 = 0; - mCasing2 = 0; - mCasing3 = 0; - mCasing4 = 0; - - boolean aStructureTop = checkPiece(STRUCTURE_PIECE_TOP, 2, 2, 0); - log("Top Check: " + aStructureTop); - boolean aStructureTower = checkPiece(STRUCTURE_PIECE_TOWER, 1, 1, -7); - log("Tower Check: " + aStructureTower); - boolean aStructureBase = checkPiece(STRUCTURE_PIECE_BASE, 5, 5, -22); - log("Base Check: " + aStructureBase); - boolean aCasingCount1 = mCasing1 >= 229; - boolean aCasingCount2 = mCasing2 == 60; - boolean aCasingCount3 = mCasing3 == 66; - boolean aCasingCount4 = mCasing4 == 60; - boolean aAllStructure = aStructureTop && aStructureTower && aStructureBase; - boolean aAllCasings = aCasingCount1 && aCasingCount2 && aCasingCount3 && aCasingCount4; - if (!aAllCasings || !aAllStructure - || mMaintenanceHatches.size() != 1 - || mInputHatches.size() < 1 - || mOutputHatches.size() < 1) { - log( - "Bad Hatches - Solar Heaters: " + mSolarHeaters.size() - + ", Maint: " - + mMaintenanceHatches.size() - + ", Input Hatches: " - + mInputHatches.size() - + ", Output Hatches: " - + mOutputHatches.size() - + ", Top: " - + aStructureTop - + ", Tower: " - + aStructureTower - + ", Base: " - + aStructureBase - + ", Casing Count: " - + aCasingCount1 - + " | Found: " - + mCasing1 - + ", Casing Count: " - + aCasingCount2 - + " | Found: " - + mCasing2 - + ", Casing Count: " - + aCasingCount3 - + " | Found: " - + mCasing3 - + ", Casing Count: " - + aCasingCount4 - + " | Found: " - + mCasing4); - return false; - } - log( - "Built " + this.getLocalName() - + " with " - + mCasing1 - + " Structural Solar casings, " - + mCasing2 - + " Thermally Insulated casings, " - + mCasing3 - + " Salt Containment casings, " - + mCasing4 - + " Thermal Containment casings."); - return aAllCasings && aAllStructure; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - // Tower - buildPiece(STRUCTURE_PIECE_TOP, stackSize, hintsOnly, 2, 2, 0); - buildPiece(STRUCTURE_PIECE_TOWER, stackSize, hintsOnly, 1, 1, -7); - buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 5, 5, -22); - - // Solar Heaters - if (stackSize.stackSize >= 1) { - buildPiece(SOLAR_HEATER_RING_1, stackSize, hintsOnly, 7, 7, -27); - if (stackSize.stackSize >= 2) { - buildPiece(SOLAR_HEATER_RING_2, stackSize, hintsOnly, 9, 9, -27); - if (stackSize.stackSize >= 3) { - buildPiece(SOLAR_HEATER_RING_3, stackSize, hintsOnly, 11, 11, -27); - if (stackSize.stackSize >= 4) { - buildPiece(SOLAR_HEATER_RING_4, stackSize, hintsOnly, 13, 13, -27); - if (stackSize.stackSize >= 5) { - buildPiece(SOLAR_HEATER_RING_5, stackSize, hintsOnly, 15, 15, -27); - } - } - } - } - } - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - int built; - int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 2); - // Tower - built = survivialBuildPiece(STRUCTURE_PIECE_TOP, stackSize, 2, 2, 0, realBudget, env, false, true); - if (built >= 0) return built; - built = survivialBuildPiece(STRUCTURE_PIECE_TOWER, stackSize, 1, 1, -7, realBudget, env, false, true); - if (built >= 0) return built; - built = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 5, 5, -22, realBudget, env, false, true); - if (built >= 0) return built; - - // Solar Heaters - if (stackSize.stackSize < 1) return -1; - built = survivialBuildPiece(SOLAR_HEATER_RING_1, stackSize, 7, 7, -27, realBudget, env, false, true); - if (built >= 0) return built; - if (stackSize.stackSize < 2) return -1; - built = survivialBuildPiece(SOLAR_HEATER_RING_2, stackSize, 9, 9, -27, realBudget, env, false, true); - if (built >= 0) return built; - if (stackSize.stackSize < 3) return -1; - built = survivialBuildPiece(SOLAR_HEATER_RING_3, stackSize, 11, 11, -27, realBudget, env, false, true); - if (built >= 0) return built; - if (stackSize.stackSize < 4) return -1; - built = survivialBuildPiece(SOLAR_HEATER_RING_4, stackSize, 13, 13, -27, realBudget, env, false, true); - if (built >= 0) return built; - if (stackSize.stackSize < 5) return -1; - return survivialBuildPiece(SOLAR_HEATER_RING_5, stackSize, 15, 15, -27, realBudget, env, false, true); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION.get(getClass()); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_MAGNETIZER_LOOP; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == ForgeDirection.DOWN || side == ForgeDirection.UP) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)), - TextureFactory.builder() - .addIcon(TexturesGtBlock.oMCDSolarTowerActive) - .extFacing() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)), - TextureFactory.builder() - .addIcon(TexturesGtBlock.oMCDSolarTower) - .extFacing() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)) }; - } - - @Override - public RecipeMap getRecipeMap() { - // Only for visual - return GTPPRecipeMaps.solarTowerRecipes; - } - - private int getHeaterTier() { - int aSolarHeaterCounter = this.mSolarHeaters.size(); - if (aSolarHeaterCounter > 0) { - if (aSolarHeaterCounter == 36) { - return 1; - } else if (aSolarHeaterCounter == 88) { - return 2; - } else if (aSolarHeaterCounter == 156) { - return 4; - } else if (aSolarHeaterCounter == 240) { - return 8; - } else if (aSolarHeaterCounter == 340) { - return 16; - } - } - return 0; - } - - private int getHeaterCountForTier(int aTier) { - return switch (aTier) { - case 1 -> 36; - case 2 -> 88; - case 4 -> 156; - case 8 -> 240; - case 16 -> 340; - default -> 0; - }; - } - - public boolean getConnectedSolarReflectors() { - - resetSolarHeaters(); - int aRing = 1; - - if (this.mSolarHeaters.size() < 36) { - // 15x15 - boolean aRing1 = checkPiece(SOLAR_HEATER_RING_1, 7, 7, -27); - if (aRing1) { - // log("Found Ring: "+(aRing++)+", Total: "+this.mSolarHeaters.size()); - } - } - if (this.mSolarHeaters.size() < 88) { - // 17x17 - boolean aRing2 = checkPiece(SOLAR_HEATER_RING_2, 9, 9, -27); - if (aRing2) { - // log("Found Ring: "+(aRing++)+", Total: "+this.mSolarHeaters.size()); - } - } - if (this.mSolarHeaters.size() < 156) { - // 19x19 - boolean aRing3 = checkPiece(SOLAR_HEATER_RING_3, 11, 11, -27); - if (aRing3) { - // log("Found Ring: "+(aRing++)+", Total: "+this.mSolarHeaters.size()); - } - } - if (this.mSolarHeaters.size() < 240) { - // 21x21 - boolean aRing4 = checkPiece(SOLAR_HEATER_RING_4, 13, 13, -27); - if (aRing4) { - // log("Found Ring: "+(aRing++)+", Total: "+this.mSolarHeaters.size()); - } - } - if (this.mSolarHeaters.size() < 340) { - // 23x23 - boolean aRing5 = checkPiece(SOLAR_HEATER_RING_5, 15, 15, -27); - if (aRing5) { - // log("Found Ring: "+(aRing++)+", Total: "+this.mSolarHeaters.size()); - } - } - return mSolarHeaters.size() > 0; - } - - private boolean addSolarHeater(IGregTechTileEntity aTileEntity, int a) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof TileEntitySolarHeater mTile) { - if (!mTile.hasSolarTower() && mTile.canSeeSky()) { - // Logger.INFO("Found Solar Reflector, Injecting Data."); - mTile.setSolarTower(this); - return this.mSolarHeaters.add(mTile); - } - } - } - return false; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d == ForgeDirection.UP; - } - - private Fluid mColdSalt = null; - private Fluid mHotSalt = null; - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - this.mEfficiencyIncrease = 100; - this.mMaxProgresstime = 200; - - if (this.mSolarHeaters.isEmpty() || this.mSolarHeaters.size() < 340 - || this.getTotalRuntimeInTicks() % 200 == 0) { - getConnectedSolarReflectors(); - } - - int aTier = getHeaterTier(); - int aHeaters = getHeaterCountForTier(aTier); - - // Original formula was (-Math.pow(this.mHeatLevel - 50000, 0.8) + 7000) / 7000 - // However, negative numbers to the power of a non-integer result in NaN, by default - // Max efficiency is 1, at mHeatLevel = 50000, and it lowers at the same rate if going above or below this heat - // Min efficiency is 0.179, at mHeatLevel = 0 or 100000 - double aEfficiency = (-Math.pow(Math.abs(this.mHeatLevel - 50000), 0.8) + 7000) / 7000; - - World w = this.getBaseMetaTileEntity() - .getWorld(); - - // Manage Heat every 10s - // Add Heat First, if sources available and it's daytime, heat gain is halved if raining - if (w != null) { - if (aHeaters > 0 && w.isDaytime()) { - if (w.isRaining() && this.getBaseMetaTileEntity() - .getBiome().rainfall > 0.0F) { - this.mHeatLevel += GT_Utility.safeInt((long) ((aHeaters / 2) * aEfficiency * (10 + aTier))); - } else { - this.mHeatLevel += GT_Utility.safeInt((long) (aHeaters * aEfficiency * (10 + aTier))); - } - } - - // Remove Heat, based on time of day - if (mHeatLevel > 0) { - if (mHeatLevel > 100000) { - this.mHeatLevel = 100000; - } else { - this.mHeatLevel -= 10; - } - } - } - - if (this.mEfficiency == this.getMaxEfficiency(null) && this.mHeatLevel >= 30000) { - if (mColdSalt == null) { - mColdSalt = MISC_MATERIALS.SOLAR_SALT_COLD.getFluid(); - } - if (mHotSalt == null) { - mHotSalt = MISC_MATERIALS.SOLAR_SALT_HOT.getFluid(); - } - ArrayList aFluids = this.getStoredFluids(); - for (FluidStack aFluid : aFluids) { - if (aFluid.getFluid() - .equals(mColdSalt)) { - int aFluidAmount = Math.min(aFluid.amount, this.mHeatLevel); - - this.mHeatLevel -= aFluidAmount; - this.depleteInput(FluidUtils.getFluidStack(mColdSalt, aFluidAmount)); - this.addOutput(FluidUtils.getFluidStack(mHotSalt, aFluidAmount)); - this.mHeatLevel = Math.max(this.mHeatLevel, 0); - - break; - } - } - } - - return CheckRecipeResultRegistry.GENERATING; - } - - @Override - public int getMaxParallelRecipes() { - return 1; - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(final ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - public Block getCasingBlock() { - return ModBlocks.blockSpecialMultiCasings; - } - - public Block getCasingBlock2() { - return ModBlocks.blockCasings2Misc; - } - - public byte getCasingMeta() { - return 6; - } - - public byte getCasingMeta2() { - return 8; - } - - public byte getCasingMeta3() { - return 7; - } - - public byte getCasingMeta4() { - return 11; - } - - public byte getCasingTextureIndex() { - return (byte) mCasingTextureID; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {} - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("mHeatLevel", mHeatLevel); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mHeatLevel = aNBT.getInteger("mHeatLevel"); - } - - @Override - public void onRemoval() { - resetSolarHeaters(); - super.onRemoval(); - } - - private void resetSolarHeaters() { - for (TileEntitySolarHeater aTile : this.mSolarHeaters) { - aTile.clearSolarTower(); - } - this.mSolarHeaters.clear(); - } - - @Override - public String[] getExtraInfoData() { - return new String[] { "Internal Heat Level: " + this.mHeatLevel, - "Connected Solar Reflectors: " + this.mSolarHeaters.size() }; - } - - @Override - public boolean doesBindPlayerInventory() { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEAlloyBlastSmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEAlloyBlastSmelter.java new file mode 100644 index 0000000000..20c14d1ed2 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEAlloyBlastSmelter.java @@ -0,0 +1,232 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +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.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEAlloyBlastSmelter extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mMode = 0; + private boolean isUsingControllerCircuit = false; + private static Item circuit; + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEAlloyBlastSmelter(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEAlloyBlastSmelter(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEAlloyBlastSmelter(this.mName); + } + + @Override + public String getMachineType() { + return "Fluid Alloy Cooker"; + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("isBussesSeparate")) { + inputSeparation = aNBT.getBoolean("isBussesSeparate"); + } + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Alloy Blast Smelter") + .addInfo("Allows Complex GT++ alloys to be created") + .addInfo("Accepts only one Energy Hatch") + .addInfo("Circuit for recipe goes in the Input Bus or GUI slot") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 4, 3, true) + .addController("Bottom Center") + .addCasingInfoMin("Blast Smelter Casings", 5, false) + .addCasingInfoMin("Blast Smelter Heat Containment Coils", 16, false) + .addInputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "HHH", "H-H", "HHH" }, + { "C~C", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEAlloyBlastSmelter.class) + .atLeast(InputBus, InputHatch, OutputBus, OutputHatch, Maintenance, Energy, Muffler) + .casingIndex(TAE.GTPP_INDEX(15)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 15)))) + .addElement('H', ofBlock(ModBlocks.blockCasingsMisc, 14)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 3, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 3, 0) && mCasing >= 5 && mEnergyHatches.size() == 1 && checkHatch(); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_INDUCTION_LOOP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDAlloyBlastSmelterActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDAlloyBlastSmelter; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(15); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.alloyBlastSmelterRecipes; + } + + @Override + public boolean isCorrectMachinePart(final ItemStack aStack) { + if (this.getBaseMetaTileEntity() + .isServerSide()) { + // Get Controller Circuit + if (circuit == null) { + circuit = GTUtility.getIntegratedCircuit(0) + .getItem(); + } + if (aStack != null && aStack.getItem() == circuit) { + this.mMode = aStack.getItemDamage(); + return this.isUsingControllerCircuit = true; + } else { + if (aStack == null) { + this.isUsingControllerCircuit = false; + return true; // Allowed empty + } + Logger.WARNING("Not circuit in GUI inputs."); + return this.isUsingControllerCircuit = false; + } + } + Logger.WARNING("No Circuit, clientside."); + return this.isUsingControllerCircuit = false; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic(); + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + inputSeparation = !inputSeparation; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiABS; + } + + @Override + public int getDamageToComponent(final ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEAutoCrafter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEAutoCrafter.java new file mode 100644 index 0000000000..41b9abf12e --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEAutoCrafter.java @@ -0,0 +1,195 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.item.ItemStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; + +public class MTEAutoCrafter extends GTPPMultiBlockBase implements ISurvivalConstructable { + + protected GTRecipe lastRecipeToBuffer; + private int casing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEAutoCrafter(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEAutoCrafter(String mName) { + super(mName); + } + + @Override + public String getMachineType() { + return "Assembler"; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity tileEntity) { + return new MTEAutoCrafter(this.mName); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiAutoCrafter; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Highly Advanced Assembling Machine") + .addInfo("200% faster than using single block machines of the same voltage") + .addInfo("Processes two items per voltage tier") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front Center") + .addCasingInfoRange("Bulk Production Frame", 10, 25, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + protected IIconContainer getActiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER_ACTIVE; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER; + } + + @Override + protected int getCasingTextureId() { + return TAE.getIndexFromPage(0, 10); + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEAutoCrafter.class) + .atLeast(InputBus, OutputBus, InputHatch, Maintenance, Energy, Muffler) + .casingIndex(TAE.getIndexFromPage(0, 10)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.casing, ofBlock(ModBlocks.blockCasings2Misc, 12)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack itemStack, boolean hintsOnly) { + buildPiece(mName, itemStack, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack itemStack, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, itemStack, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity baseMetaTileEntity, ItemStack itemStack) { + casing = 0; + return checkPiece(mName, 1, 1, 0) && casing >= 10 && checkHatch(); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.assemblerRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 3F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + public int getMaxParallelRecipes() { + return 2 * (Math.max(1, GTUtility.getTier(getMaxInputVoltage()))); + } + + @Override + public String[] getExtraInfoData() { + final String running = (this.mMaxProgresstime > 0 ? "Auto-Crafter running" : "Auto-Crafter stopped"); + final String maintenance = (this.getIdealStatus() == this.getRepairStatus() ? "No Maintenance issues" + : "Needs Maintenance"); + String tSpecialText; + + if (lastRecipeToBuffer != null && lastRecipeToBuffer.mOutputs[0].getDisplayName() != null) { + tSpecialText = "Currently processing: " + lastRecipeToBuffer.mOutputs[0].getDisplayName(); + } else { + tSpecialText = "Currently processing: Nothing"; + } + + return new String[] { "Large Scale Auto-Assembler v1.01c", running, maintenance, tSpecialText }; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTECyclotron.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTECyclotron.java new file mode 100644 index 0000000000..051daee9a3 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTECyclotron.java @@ -0,0 +1,337 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.api.objects.GTItemStack; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.item.chemistry.IonParticles; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTECyclotron extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTECyclotron(int aID, String aName, String aNameRegional, int tier) { + super(aID, aName, aNameRegional); + } + + public MTECyclotron(String aName) { + super(aName); + } + + @Override + public String getMachineType() { + return "Particle Accelerator"; + } + + public int tier() { + return 5; + } + + @Override + public long maxEUStore() { + return 1800000000L; + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTECyclotron(this.mName); + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { + return side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { + { " ", " hhh ", " hh hh ", " h h ", + " h h ", " h h ", " h h ", " h h ", + " h h ", " h h ", " h h ", " h h ", + " hh hh ", " hhh ", " ", }, + { " hhh ", " hhccchh ", " hcchhhcch ", " hchh hhch ", + " hch hch ", " hch hch ", "hch hch", "hch hch", + "hch hch", " hch hch ", " hch hch ", " hchh hhch ", + " hcch~hcch ", " hhccchh ", " hhh ", }, + { " ", " hhh ", " hh hh ", " h h ", + " h h ", " h h ", " h h ", " h h ", + " h h ", " h h ", " h h ", " h h ", + " hh hh ", " hhh ", " ", } })) + .addElement( + 'h', + buildHatchAdder(MTECyclotron.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch, OutputHatch) + .casingIndex(44) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) + .addElement('c', ofBlock(getCyclotronCoil(), getCyclotronCoilMeta())) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 7, 1, 12); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 7, 1, 12, elementBudget, env, false, true); + } + + @SideOnly(Side.CLIENT) + @Override + protected ResourceLocation getActivitySoundLoop() { + return SoundResource.GT_MACHINES_FUSION_LOOP.resourceLocation; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 7, 1, 12) && mCasing >= 40 && checkHatch(); + } + + public Block getCasingBlock() { + return ModBlocks.blockCasings2Misc; + } + + public int getCasingMeta() { + return 10; + } + + public Block getCyclotronCoil() { + return ModBlocks.blockCasings2Misc; + } + + public int getCyclotronCoilMeta() { + return 9; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Super Magnetic Speed Shooter") + .addSeparator() + .addInfo("Particles are accelerated over 186 revolutions to 80% light speed") + .addInfo("Can produce a continuous beam current of 2.2 mA at 590 MeV") + .addInfo("Which will be extracted from the Isochronous Cyclotron") + .addSeparator() + .addInfo("Consists of the same layout as a Fusion Reactor") + .addInfo("Any external casing can be a hatch/bus, unlike Fusion") + .addInfo("Cyclotron Machine Casings around Cyclotron Coil Blocks") + .addInfo("All Hatches must be IV or better") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .addCasingInfoMin("Cyclotron Machine Casings", 40, false) + .addCasingInfoMin("Cyclotron Coil", 32, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + protected IIconContainer getActiveOverlay() { + return getIconOverlay(); + } + + @Override + protected IIconContainer getInactiveOverlay() { + return getIconOverlay(); + } + + @Override + protected int getCasingTextureId() { + return 44; + } + + public IIconContainer getIconOverlay() { + if (this.getBaseMetaTileEntity() + .isActive()) { + return TexturesGtBlock.Overlay_MatterFab_Active_Animated; + } + return TexturesGtBlock.Overlay_MatterFab_Animated; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.cyclotronRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + public CheckRecipeResult process() { + CheckRecipeResult result = super.process(); + if (result.wasSuccessful()) { + for (ItemStack s : outputItems) { + if (s != null) { + if (s.getItem() instanceof IonParticles) { + long aCharge = IonParticles.getChargeState(s); + if (aCharge == 0) { + IonParticles.setChargeState( + s, + MathUtils.getRandomFromArray( + new int[] { -5, -5, -4, -4, -4, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, + -2, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, + 5, 5, 5, 6, 6 })); + } + } + } + } + } + return result; + } + }; + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (this.mOutputBusses.size() > 0) { + for (MTEHatchOutputBus g : this.mOutputBusses) { + if (g != null) { + for (ItemStack s : g.mInventory) { + if (s != null) { + if (s.getItem() instanceof IonParticles) { + long aCharge = IonParticles.getChargeState(s); + if (aCharge == 0) { + IonParticles.setChargeState( + s, + MathUtils.getRandomFromArray( + new int[] { -5, -5, -4, -4, -4, -3, -3, -3, -3, -3, -2, -2, -2, -2, -2, -2, + -2, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, + 5, 5, 5, 6, 6 })); + } + } + } + } + } + } + } + return super.onRunningTick(aStack); + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiCyclotron; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public String[] getExtraInfoData() { + String tier = tier() == 5 ? "I" : "II"; + float plasmaOut = 0; + int powerRequired = 0; + if (this.mLastRecipe != null) { + powerRequired = this.mLastRecipe.mEUt; + if (this.mLastRecipe.getFluidOutput(0) != null) { + plasmaOut = (float) this.mLastRecipe.getFluidOutput(0).amount / (float) this.mLastRecipe.mDuration; + } + } + + return new String[] { "COMET - Compact Cyclotron MK " + tier, "EU Required: " + powerRequired + "EU/t", + "Stored EU: " + this.getEUVar() + " / " + maxEUStore() }; + } + + @Override + public boolean doesBindPlayerInventory() { + return false; + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEElementalDuplicator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEElementalDuplicator.java new file mode 100644 index 0000000000..676b6e817a --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEElementalDuplicator.java @@ -0,0 +1,352 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.Collections; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchElementalDataOrbHolder; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEElementalDuplicator extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private final ArrayList mReplicatorDataOrbHatches = new ArrayList<>(); + private static final int CASING_TEXTURE_ID = TAE.getIndexFromPage(0, 3); + private int mCasing = 0; + + public MTEElementalDuplicator(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEElementalDuplicator(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEElementalDuplicator(this.mName); + } + + @Override + public String getMachineType() { + return "Replicator"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Produces Elemental Material from UU Matter") + .addInfo("Speed: +100% | EU Usage: 100% | Parallel: 8 * Tier") + .addInfo("Maximum 1x of each bus/hatch.") + .addInfo("Requires circuit 1-16 in your Data Orb Repository") + .addInfo("depending on what Data Orb you want to prioritize") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(9, 6, 9, true) + .addController("Top Center") + .addCasingInfoMin("Elemental Confinement Shell", 138, false) + .addCasingInfoMin("Matter Fabricator Casing", 24, false) + .addCasingInfoMin("Particle Containment Casing", 24, false) + .addCasingInfoMin("Matter Generation Coil", 24, false) + .addCasingInfoMin("High Voltage Current Capacitor", 20, false) + .addCasingInfoMin("Resonance Chamber III", 24, false) + .addCasingInfoMin("Modulator III", 16, false) + .addOtherStructurePart("Data Orb Repository", "1x", 1) + .addInputHatch("Any 1 dot hint", 1) + .addOutputBus("Any 1 dot hint", 1) + .addOutputHatch("Any 1 dot hint", 1) + .addEnergyHatch("Any 1 dot hint", 1) + .addMaintenanceHatch("Any 1 dot hint", 1) + .addMufflerHatch("Any 1 dot hint", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + + // h = Hatch + // c = Casing + + // a = MF Casing 1 + // b = Matter Gen Coil + + // d = Current Capacitor + // e = Particle + + // f = Resonance III + // g = Modulator III + + .addShape( + STRUCTURE_PIECE_MAIN, + (new String[][] { + { " ccc ", " ccccc ", " ccccccc ", "ccchhhccc", "ccch~hccc", "ccchhhccc", " ccccccc ", + " ccccc ", " ccc " }, + { " cac ", " abfba ", " abfgfba ", "cbfgdgfbc", "afgdddgfa", "cbfgdgfbc", " abfgfba ", + " abfba ", " cac " }, + { " cec ", " e e ", " e e ", "c d c", "e ddd e", "c d c", " e e ", + " e e ", " cec " }, + { " cec ", " e e ", " e e ", "c d c", "e ddd e", "c d c", " e e ", + " e e ", " cec " }, + { " cac ", " abfba ", " abfgfba ", "cbfgdgfbc", "afgdddgfa", "cbfgdgfbc", " abfgfba ", + " abfba ", " cac " }, + { " ccc ", " ccccc ", " ccccccc ", "ccchhhccc", "ccchhhccc", "ccchhhccc", " ccccccc ", + " ccccc ", " ccc " }, })) + .addElement('a', ofBlock(getCasingBlock4(), getCasingMeta6())) + .addElement('b', ofBlock(getCasingBlock4(), getCasingMeta7())) + .addElement('d', ofBlock(getCasingBlock2(), getCasingMeta2())) + .addElement('e', ofBlock(getCasingBlock2(), getCasingMeta3())) + .addElement('f', ofBlock(getCasingBlock3(), getCasingMeta4())) + .addElement('g', ofBlock(getCasingBlock3(), getCasingMeta5())) + .addElement('c', lazy(t -> onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) + .addElement( + 'h', + lazy( + t -> ofChain( + buildHatchAdder(MTEElementalDuplicator.class) + .atLeast(InputHatch, OutputBus, OutputHatch, Maintenance, Muffler, Energy) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .build(), + buildHatchAdder(MTEElementalDuplicator.class) + .hatchClass(MTEHatchElementalDataOrbHolder.class) + .shouldReject(x -> x.mReplicatorDataOrbHatches.size() >= 1) + .adder(MTEElementalDuplicator::addDataOrbHatch) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .build(), + onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta()))))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 4, 4, 0); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + boolean aDidBuild = checkPiece(STRUCTURE_PIECE_MAIN, 4, 4, 0); + if (this.mInputHatches.size() != 1 || (this.mOutputBusses.size() != 1 && this.mOutputHatches.size() != 0) + || this.mEnergyHatches.size() != 1 + || this.mReplicatorDataOrbHatches.size() != 1) { + return false; + } + log("Casings: " + mCasing); + return aDidBuild && mCasing >= 138 && checkHatch(); + } + + @Override + public int survivalConstruct(ItemStack itemStack, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, itemStack, 4, 4, 0, elementBudget, env, false, true); + } + + protected static int getCasingTextureIndex() { + return CASING_TEXTURE_ID; + } + + protected static Block getCasingBlock() { + return ModBlocks.blockCasings5Misc; + } + + protected static Block getCasingBlock2() { + return ModBlocks.blockSpecialMultiCasings; + } + + protected static Block getCasingBlock3() { + return ModBlocks.blockSpecialMultiCasings2; + } + + protected static Block getCasingBlock4() { + return ModBlocks.blockCasingsMisc; + } + + protected static int getCasingMeta() { + return 3; + } + + protected static int getCasingMeta2() { + return 12; + } + + protected static int getCasingMeta3() { + return 13; + } + + protected static int getCasingMeta4() { + return 2; + } + + protected static int getCasingMeta5() { + return 6; + } + + protected static int getCasingMeta6() { + return 9; + } + + protected static int getCasingMeta7() { + return 8; + } + + private boolean addDataOrbHatch(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchElementalDataOrbHolder) { + try { + return addToMachineListInternal(mReplicatorDataOrbHatches, aMetaTileEntity, aBaseCasingIndex); + } catch (Throwable t) { + t.printStackTrace(); + } + } + } + return false; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d == ForgeDirection.UP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAElementalDuplicatorActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAElementalDuplicator; + } + + @Override + protected int getCasingTextureId() { + return CASING_TEXTURE_ID; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.replicatorRecipes; + } + + @Override + public boolean isCorrectMachinePart(final ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic().setSpeedBonus(1F / 2F) + .enablePerfectOverclock() + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + protected void setupProcessingLogic(ProcessingLogic logic) { + super.setupProcessingLogic(logic); + for (MTEHatchElementalDataOrbHolder hatch : filterValidMTEs(mReplicatorDataOrbHatches)) { + ItemStack orb = hatch.getOrbByCircuit(); + logic.setSpecialSlotItem(orb); + break; + } + } + + @Override + public int getMaxParallelRecipes() { + return (8 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiMolecularTransformer; + } + + @Override + public int getDamageToComponent(final ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (this.mUpdate == 1 || this.mStartUpCheck == 1) { + this.mReplicatorDataOrbHatches.clear(); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public ArrayList getStoredInputs() { + ArrayList tItems = super.getStoredInputs(); + for (MTEHatchElementalDataOrbHolder tHatch : filterValidMTEs(mReplicatorDataOrbHatches)) { + tItems.add(tHatch.getOrbByCircuit()); + } + tItems.removeAll(Collections.singleton(null)); + return tItems; + } + + @Override + public boolean doesBindPlayerInventory() { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEFrothFlotationCell.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEFrothFlotationCell.java new file mode 100644 index 0000000000..8e052870fa --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEFrothFlotationCell.java @@ -0,0 +1,286 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.List; +import java.util.Objects; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.Constants; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.helpers.FlotationRecipeHandler; + +public class MTEFrothFlotationCell extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEFrothFlotationCell(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEFrothFlotationCell(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEFrothFlotationCell(this.mName); + } + + @Override + public String getMachineType() { + return "Flotation Cell"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Process that milled ore!") + .addInfo("You can only ever process one type of material per controller") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(7, 9, 7, true) + .addController("Front Center") + .addCasingInfoMin("Inconel Reinforced Casing", 68, false) + .addCasingInfoMin("Flotation Casing", 52, false) + .addInputBus("Bottom Casing", 1) + .addInputHatch("Bottom Casing", 1) + .addOutputHatch("Bottom Casing", 1) + .addEnergyHatch("Bottom Casing", 1) + .addMaintenanceHatch("Bottom Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDFrothFlotationCellActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDFrothFlotationCell; + } + + @Override + protected int getCasingTextureId() { + return TAE.getIndexFromPage(2, 1); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.flotationCellRecipes; + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + new String[][] { { " ", " ", " X ", " X~X ", " X ", " ", " " }, + { " ", " F ", " FFF ", " FF FF ", " FFF ", " F ", " " }, + { " ", " F ", " F F ", " F F ", " F F ", " F ", " " }, + { " ", " F ", " F F ", " F F ", " F F ", " F ", " " }, + { " ", " F ", " F F ", " F F ", " F F ", " F ", " " }, + { " ", " F ", " F F ", " F F ", " F F ", " F ", " " }, + { " ", " F ", " F F ", " F F ", " F F ", " F ", " " }, + { " CCC ", " CCCCC ", "CCCCCCC", "CCCCCCC", "CCCCCCC", " CCCCC ", " CCC " }, + { " CCC ", " CCCCC ", "CCCCCCC", "CCCCCCC", "CCCCCCC", " CCCCC ", " CCC " }, }) + .addElement( + 'C', + buildHatchAdder(MTEFrothFlotationCell.class) + .atLeast(InputBus, InputHatch, OutputHatch, Maintenance, Energy) + .casingIndex(getCasingTextureId()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings3Misc, 1)))) + .addElement('F', ofBlock(ModBlocks.blockSpecialMultiCasings, 9)) + .addElement('X', ofBlock(ModBlocks.blockCasings3Misc, 1)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 3, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 3, 3, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 3, 3, 0) && mCasing >= 68 - 4 && checkHatch(); + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d == ForgeDirection.UP; + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiFrothFlotationCell; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + /* + * Material checks Makes sure we can only ever use one type of material in this flotation cell. We used + * to depend on Alk's hash, but it's unreliable and user-hostile So we're using unlocalized name of + * material now. + */ + Material foundMaterial = FlotationRecipeHandler + .getMaterialOfMilledProduct(FlotationRecipeHandler.findMilledStack(recipe)); + String foundMaterialName = null; + if (foundMaterial != null) { + foundMaterialName = foundMaterial.getUnlocalizedName(); + } + + if (foundMaterialName == null) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + + // Set material locked for this controller + if (lockedMaterialName == null) { + lockedMaterialName = foundMaterialName; + } + + // Check material match + if (!Objects.equals(lockedMaterialName, foundMaterialName)) { + return SimpleCheckRecipeResult.ofFailure("machine_locked_to_different_recipe"); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + }.enablePerfectOverclock(); + } + + /* + * Handle NBT + */ + + private String lockedMaterialName = null; + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + if (lockedMaterialName != null) { + aNBT.setString("lockedMaterialName", lockedMaterialName); + } + super.setItemNBT(aNBT); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (lockedMaterialName != null) { + aNBT.setString("lockedMaterialName", lockedMaterialName); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("lockedMaterialName", Constants.NBT.TAG_STRING)) { + lockedMaterialName = aNBT.getString("lockedMaterialName"); + } + } + + @Override + public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { + if (stack.hasTagCompound() && stack.getTagCompound() + .hasKey("lockedMaterialName")) { + tooltip.add( + StatCollector.translateToLocal("tooltip.flotationCell.lockedTo") + " " + + StatCollector.translateToLocal( + stack.getTagCompound() + .getString("lockedMaterialName"))); + } + } + + @Override + public String[] getExtraInfoData() { + return new String[] { "Locked material: " + lockedMaterialName }; + } + + @Override + public boolean isRecipeLockingEnabled() { + return lockedMaterialName != null && !lockedMaterialName.equals(""); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget(new FakeSyncWidget.StringSyncer(() -> lockedMaterialName, val -> lockedMaterialName = val)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialFishingPond.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialFishingPond.java new file mode 100644 index 0000000000..3a7370cf25 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialFishingPond.java @@ -0,0 +1,488 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gtPlusPlus.core.util.data.ArrayUtils.removeNulls; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.WeightedRandomFishable; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.FishPondFakeRecipe; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.ParallelHelper; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import ic2.core.init.BlocksItems; +import ic2.core.init.InternalName; + +public class MTEIndustrialFishingPond extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private boolean isUsingControllerCircuit = false; + private static final Item circuit = GTUtility.getIntegratedCircuit(0) + .getItem(); + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + private static final Class cofhWater; + + static { + cofhWater = ReflectionUtils.getClass("cofh.asmhooks.block.BlockWater"); + } + + public MTEIndustrialFishingPond(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialFishingPond(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialFishingPond(this.mName); + } + + @Override + public String getMachineType() { + return "Fish Trap"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Fishing Pond") + .addInfo("Can process (Tier + 1) * 2 recipes") + .addInfo("Put a numbered circuit into the input bus.") + .addInfo("Circuit 14 for Fish") + .addInfo("Circuit 15 for Junk") + .addInfo("Circuit 16 for Treasure") + .addInfo("Need to be filled with water.") + .addInfo("Will automatically fill water from input hatch.") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(9, 3, 9, true) + .addController("Front Center") + .addCasingInfoMin("Aquatic Casings", 64, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { + { "XXXXXXXXX", "X X", "X X", "X X", "X X", "X X", "X X", + "X X", "XXXXXXXXX" }, + { "XXXX~XXXX", "X X", "X X", "X X", "X X", "X X", "X X", + "X X", "XXXXXXXXX" }, + { "XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX", "XXXXXXXXX", + "XXXXXXXXX", "XXXXXXXXX" }, })) + .addElement( + 'X', + buildHatchAdder(MTEIndustrialFishingPond.class) + .atLeast(InputBus, OutputBus, Maintenance, Energy, Muffler, InputHatch) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 4, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 4, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 4, 1, 0) && mCasing >= 64 && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER_ACTIVE; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_VACUUM_FREEZER; + } + + @Override + protected int getCasingTextureId() { + return getCasingTextureIndex(); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.fishPondRecipes; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + ItemStack controllerStack = getControllerSlot(); + if (controllerStack != null) { + if (controllerStack.getItem() == circuit) { + this.isUsingControllerCircuit = true; + this.mMode = controllerStack.getItemDamage(); + } else { + this.isUsingControllerCircuit = false; + } + } else { + this.isUsingControllerCircuit = false; + } + if (!hasGenerateRecipes) { + generateRecipes(); + } + if (!checkForWater()) { + return SimpleCheckRecipeResult.ofFailure("no_water"); + } + ItemStack[] tItemInputs = getStoredInputs().toArray(new ItemStack[0]); + FluidStack[] tFluidInputs = getStoredFluids().toArray(new FluidStack[0]); + + if (!isUsingControllerCircuit && tItemInputs.length == 0) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + + long tEnergy = getMaxInputEnergy(); + + getCircuit(tItemInputs); + + ItemStack[] mFishOutput = generateLoot(this.mMode); + mFishOutput = removeNulls(mFishOutput); + GTRecipe g = new GTRecipe( + true, + new ItemStack[] {}, + mFishOutput, + null, + new int[] {}, + tFluidInputs, + null, + 200, + 16, + 0); + OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(g.mEUt) + .setEUt(tEnergy) + .setDuration(g.mDuration); + ParallelHelper helper = new ParallelHelper().setRecipe(g) + .setItemInputs(tItemInputs) + .setFluidInputs(tFluidInputs) + .setAvailableEUt(tEnergy) + .setMaxParallel(getMaxParallelRecipes()) + .setConsumption(true) + .setOutputCalculation(true) + .setMachine(this) + .enableBatchMode(batchMode ? 128 : 1) + .setCalculator(calculator); + + helper.build(); + + if (helper.getCurrentParallel() == 0) { + return CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; + } + + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + + lEUt = -calculator.getConsumption(); + mMaxProgresstime = (int) Math.ceil(calculator.getDuration() * helper.getDurationMultiplierDouble()); + + mOutputItems = helper.getItemOutputs(); + mOutputFluids = null; + updateSlots(); + + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Override + public int getMaxParallelRecipes() { + return (2 * (GTUtility.getTier(this.getMaxInputVoltage()) + 1)); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialFishingPond; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + public Block getCasingBlock() { + return ModBlocks.blockCasings3Misc; + } + + public byte getCasingMeta() { + return 0; + } + + public int getCasingTextureIndex() { + return TAE.GTPP_INDEX(32); + } + + public boolean checkForWater() { + + // Get Facing direction + IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); + int mDirectionX = aBaseMetaTileEntity.getBackFacing().offsetX; + int mCurrentDirectionX; + int mCurrentDirectionZ; + int mOffsetX_Lower = 0; + int mOffsetX_Upper = 0; + int mOffsetZ_Lower = 0; + int mOffsetZ_Upper = 0; + + mCurrentDirectionX = 4; + mCurrentDirectionZ = 4; + + mOffsetX_Lower = -4; + mOffsetX_Upper = 4; + mOffsetZ_Lower = -4; + mOffsetZ_Upper = 4; + + // if (aBaseMetaTileEntity.fac) + + final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX * mCurrentDirectionX; + final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ * mCurrentDirectionZ; + + int tAmount = 0; + for (int i = mOffsetX_Lower + 1; i <= mOffsetX_Upper - 1; ++i) { + for (int j = mOffsetZ_Lower + 1; j <= mOffsetZ_Upper - 1; ++j) { + for (int h = 0; h < 2; h++) { + Block tBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j); + byte tMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir + i, h, zDir + j); + if (isNotStaticWater(tBlock, tMeta)) { + if (this.getStoredFluids() != null) { + for (FluidStack stored : this.getStoredFluids()) { + if (stored.isFluidEqual(FluidUtils.getFluidStack("water", 1))) { + if (stored.amount >= 1000) { + // Utils.LOG_WARNING("Going to try swap an air block for water from inut bus."); + stored.amount -= 1000; + Block fluidUsed = Blocks.water; + aBaseMetaTileEntity.getWorld() + .setBlock( + aBaseMetaTileEntity.getXCoord() + xDir + i, + aBaseMetaTileEntity.getYCoord() + h, + aBaseMetaTileEntity.getZCoord() + zDir + j, + fluidUsed); + } + } + } + } + } + tBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j); + if (tBlock == Blocks.water || tBlock == Blocks.flowing_water) { + ++tAmount; + } + } + } + } + + return tAmount >= 60; + } + + private boolean isNotStaticWater(Block block, byte meta) { + return block == Blocks.air || block == Blocks.flowing_water + || block == BlocksItems.getFluidBlock(InternalName.fluidDistilledWater) + || (cofhWater != null && cofhWater.isAssignableFrom(block.getClass()) && meta != 0); + } + + private static AutoMap> categories = new AutoMap<>(); + private static AutoMap categoryFish = new AutoMap<>(); + private static AutoMap categoryJunk = new AutoMap<>(); + private static AutoMap categoryLoot = new AutoMap<>(); + private static boolean hasGenerateRecipes = false; + private int mMode = 14; + private int mMax = 8; + + private void generateRecipes() { + if (hasGenerateRecipes) return; + + categories.put(categoryFish); + categories.put(categoryJunk); + categories.put(categoryLoot); + for (WeightedRandomFishable h : FishPondFakeRecipe.fish) { + categoryFish.put(h); + } + for (WeightedRandomFishable h : FishPondFakeRecipe.junk) { + categoryJunk.put(h); + } + for (WeightedRandomFishable h : FishPondFakeRecipe.treasure) { + categoryLoot.put(h); + } + hasGenerateRecipes = true; + } + + private int getCircuit(ItemStack[] t) { + if (!this.isUsingControllerCircuit) { + for (ItemStack j : t) { + if (j.getItem() == GTUtility.getIntegratedCircuit(0) + .getItem()) { + // Fish + if (j.getItemDamage() == 14) { + mMax = 8 + (this.getMaxParallelRecipes() - 2); + this.mMode = 14; + break; + } + // Junk + else if (j.getItemDamage() == 15) { + this.mMode = 15; + mMax = 4; + break; + } + // Loot + else if (j.getItemDamage() == 16) { + this.mMode = 16; + mMax = 4; + break; + } else { + this.mMode = 0; + mMax = 0; + break; + } + } else { + this.mMode = 0; + mMax = 0; + break; + } + } + } + return this.mMode; + } + + // reflection map + private static Map reflectiveFishMap = new HashMap<>(); + + private ItemStack reflectiveFish(WeightedRandomFishable y) { + if (reflectiveFishMap.containsKey(y)) { + return reflectiveFishMap.get(y); + } + ItemStack t; + try { + t = (ItemStack) ReflectionUtils.getField(WeightedRandomFishable.class, "field_150711_b") + .get(y); + ItemStack k = ItemUtils.getSimpleStack(t, 1); + reflectiveFishMap.put(y, k); + return t; + } catch (IllegalArgumentException | IllegalAccessException e) {} + return null; + } + + private ItemStack[] generateLoot(int mode) { + ItemStack[] mFishOutput = new ItemStack[this.mMax]; + if (this.mMode == 14) { + for (int k = 0; k < this.mMax; k++) { + if (mFishOutput[k] == null) for (WeightedRandomFishable g : categoryFish.values()) { + if (MathUtils.randInt(0, (65 - getMaxParallelRecipes())) <= 2) { + ItemStack t = reflectiveFish(g); + if (t != null) { + mFishOutput[k] = ItemUtils.getSimpleStack(t, 1); + } + } + } + } + } else if (this.mMode == 15) { + for (int k = 0; k < this.mMax; k++) { + if (mFishOutput[k] == null) for (WeightedRandomFishable g : categoryJunk.values()) { + if (MathUtils.randInt(0, 100) <= 1) { + ItemStack t = reflectiveFish(g); + if (t != null) { + mFishOutput[k] = ItemUtils.getSimpleStack(t, 1); + } + } + } + } + } else if (this.mMode == 16) { + for (int k = 0; k < this.mMax; k++) { + if (mFishOutput[k] == null) for (WeightedRandomFishable g : categoryLoot.values()) { + if (MathUtils.randInt(0, 1000) <= 2) { + ItemStack t = reflectiveFish(g); + if (t != null) { + mFishOutput[k] = ItemUtils.getSimpleStack(t, 1); + } + } + } + } + } else { + mFishOutput = null; + } + return mFishOutput; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialRockBreaker.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialRockBreaker.java new file mode 100644 index 0000000000..4b91b42d9f --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEIndustrialRockBreaker.java @@ -0,0 +1,366 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.ParallelHelper; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEIndustrialRockBreaker extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEIndustrialRockBreaker(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEIndustrialRockBreaker(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEIndustrialRockBreaker(this.mName); + } + + @Override + public String getMachineType() { + return "Rock Breaker"; + } + + private static final String casingBaseName = GTLanguageManager.getTranslation("gtplusplus.blockcasings.2.0.name"); + private static final String casingMiddleName = GTLanguageManager + .getTranslation("gtplusplus.blockcasings.2.11.name"); + private static final String anyBaseCasing = "Any " + casingBaseName; + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Industrial Rock Breaker") + .addInfo("Speed: +200% | EU Usage: 75% | Parallel: Tier x 8") + .addInfo("Circuit goes in the GUI slot") + .addInfo("1 = cobble, 2 = stone, 3 = obsidian") + .addInfo("Needs Water and Lava in input hatch") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 4, 3, true) + .addController("Bottom Center") + .addCasingInfoMin(casingBaseName, 9, false) + .addCasingInfoExactly(casingMiddleName, 16, false) + .addInputBus(anyBaseCasing, 1) + .addInputHatch(anyBaseCasing, 1) + .addOutputBus(anyBaseCasing, 1) + .addEnergyHatch(anyBaseCasing, 1) + .addMaintenanceHatch(anyBaseCasing, 1) + .addMufflerHatch(anyBaseCasing, 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "HHH", "H-H", "HHH" }, { "HHH", "H-H", "HHH" }, + { "C~C", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEIndustrialRockBreaker.class) + .atLeast(InputBus, InputHatch, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(TAE.GTPP_INDEX(16)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 0)))) + .addElement('H', ofBlock(ModBlocks.blockCasings2Misc, 11)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 3, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + boolean aCheckPiece = checkPiece(mName, 1, 3, 0); + boolean aCasingCount = mCasing >= 9; + boolean aCheckHatch = checkHatch(); + log("" + aCheckPiece + ", " + aCasingCount + ", " + aCheckHatch); + return aCheckPiece && aCasingCount && aCheckHatch; + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_INDUCTION_LOOP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAIndustrialRockBreakerActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAIndustrialRockBreaker; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(16); + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.rockBreakerFakeRecipes; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + public boolean isCorrectMachinePart(final ItemStack aStack) { + return true; + } + + private static GTRecipe sRecipe_Cobblestone; + private static GTRecipe sRecipe_SmoothStone; + private static GTRecipe sRecipe_Redstone; + + private static void generateRecipes() { + sRecipe_Cobblestone = new GTRecipe( + false, + new ItemStack[] { GTUtility.getIntegratedCircuit(1) }, + new ItemStack[] { ItemUtils.getSimpleStack(Blocks.cobblestone) }, + null, + new int[] { 10000 }, + null, + null, + 16, + 32, + 0); + sRecipe_SmoothStone = new GTRecipe( + false, + new ItemStack[] { GTUtility.getIntegratedCircuit(2) }, + new ItemStack[] { ItemUtils.getSimpleStack(Blocks.stone) }, + null, + new int[] { 10000 }, + null, + null, + 16, + 32, + 0); + sRecipe_Redstone = new GTRecipe( + false, + new ItemStack[] { GTUtility.getIntegratedCircuit(3), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L) }, + new ItemStack[] { ItemUtils.getSimpleStack(Blocks.obsidian) }, + null, + new int[] { 10000 }, + null, + null, + 128, + 32, + 0); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + ArrayList aFluids = this.getStoredFluids(); + if (aFluids.isEmpty()) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + + boolean aHasWater = false; + boolean aHasLava = false; + for (FluidStack aFluid : aFluids) { + if (aFluid.getFluid() == FluidRegistry.WATER) { + aHasWater = true; + } else if (aFluid.getFluid() == FluidRegistry.LAVA) { + aHasLava = true; + } + } + ArrayList aItems = this.getStoredInputs(); + boolean aHasRedstone = false; + if (!aItems.isEmpty()) { + for (ItemStack aItem : aItems) { + if (GTUtility + .areStacksEqual(aItem, GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L))) { + aHasRedstone = true; + break; + } + } + } + + if (!aHasWater) { + return SimpleCheckRecipeResult.ofFailure("no_water"); + } + if (!aHasLava) { + return SimpleCheckRecipeResult.ofFailure("no_lava"); + } + ItemStack aGuiCircuit = this.getControllerSlot(); + if (!ItemUtils.isControlCircuit(aGuiCircuit)) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + + if (sRecipe_Cobblestone == null || sRecipe_SmoothStone == null || sRecipe_Redstone == null) { + generateRecipes(); + } + + int aCircuit = aGuiCircuit.getItemDamage(); + + GTRecipe tRecipe = null; + switch (aCircuit) { + case 1 -> tRecipe = sRecipe_Cobblestone; + case 2 -> tRecipe = sRecipe_SmoothStone; + case 3 -> { + if (aHasRedstone) { + tRecipe = sRecipe_Redstone; + } + } + } + + if (tRecipe == null) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + + ItemStack[] aItemInputs = aItems.toArray(new ItemStack[0]); + FluidStack[] aFluidInputs = new FluidStack[] {}; + + long tEnergy = getMaxInputEnergy(); + // Remember last recipe - an optimization for findRecipe() + this.mLastRecipe = tRecipe; + + ParallelHelper helper = new ParallelHelper().setRecipe(tRecipe) + .setItemInputs(aItemInputs) + .setFluidInputs(aFluidInputs) + .setAvailableEUt(tEnergy) + .setMaxParallel(getMaxParallelRecipes()) + .setConsumption(true) + .setOutputCalculation(true) + .setEUtModifier(0.75F) + .setMachine(this); + + if (batchMode) { + helper.enableBatchMode(128); + } + + helper.build(); + + if (helper.getCurrentParallel() == 0) { + return CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; + } + + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + + OverclockCalculator calculator = new OverclockCalculator().setRecipeEUt(tRecipe.mEUt) + .setEUt(tEnergy) + .setDuration(tRecipe.mDuration) + .setEUtDiscount(0.75F) + .setSpeedBoost(1F / 3F) + .setParallel((int) Math.floor(helper.getCurrentParallel() / helper.getDurationMultiplierDouble())) + .calculate(); + lEUt = -calculator.getConsumption(); + mMaxProgresstime = (int) Math.ceil(calculator.getDuration() * helper.getDurationMultiplierDouble()); + + mOutputItems = helper.getItemOutputs(); + mOutputFluids = helper.getFluidOutputs(); + updateSlots(); + return CheckRecipeResultRegistry.SUCCESSFUL; + + } + + @Override + public int getMaxParallelRecipes() { + return (8 * GTUtility.getTier(this.getMaxInputVoltage())); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiIndustrialRockBreaker; + } + + @Override + public int getDamageToComponent(final ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public ArrayList getStoredInputs() { + ArrayList aInputs = super.getStoredInputs(); + if (this.getControllerSlot() != null) { + aInputs.add(this.getControllerSlot()); + } + return aInputs; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTELargeRocketEngine.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTELargeRocketEngine.java new file mode 100644 index 0000000000..3a5bbaa42a --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTELargeRocketEngine.java @@ -0,0 +1,523 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Dynamo; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase.GTPPHatchElement.AirIntake; +import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase.GTPPHatchElement.TTDynamo; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableMap; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.item.chemistry.RocketFuels; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.METHatchAirIntake; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTELargeRocketEngine extends GTPPMultiBlockBase implements ISurvivalConstructable { + + protected int fuelConsumption; + protected int fuelValue; + protected int fuelRemaining; + protected int freeFuelTicks = 0; + protected int euProduction = 0; + protected boolean boostEu; + + public static String mLubricantName = "Carbon Dioxide"; + public static String mCoolantName = "Liquid Hydrogen"; + + public static String mCasingName = "Turbodyne Casing"; + public static String mIntakeHatchName = "Tungstensteel Turbine Casing"; + public static String mGearboxName = "Inconel Reinforced Casing"; + + private static Fluid sAirFluid = null; + private static FluidStack sAirFluidStack = null; + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + private static final int CASING_ID = TAE.getIndexFromPage(3, 11); + + public MTELargeRocketEngine(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + this.fuelConsumption = 0; + this.fuelValue = 0; + this.fuelRemaining = 0; + this.boostEu = false; + setAir(); + } + + public MTELargeRocketEngine(final String aName) { + super(aName); + this.fuelConsumption = 0; + this.fuelValue = 0; + this.fuelRemaining = 0; + this.boostEu = false; + setAir(); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Large Rocket Engine") + .addInfo("Generating Power from Rocket Fuels - Supports TecTech Multi-Amp Dynamos!") + .addInfo("Supply GT++ Rocket Fuels and 1000L of " + mLubricantName + " per hour") + .addInfo("Produces as much energy as you put fuel in, with optional boosting") + .addInfo("This multi doesn't accept fluids if not enabled - enable it first!") + .addInfo("Consumes 2000L/s of air and pollutes 1500 gibbl/s per 16384 eu/t produced") + .addInfo("Place 1-8 Air Intake Hatches on the sides to maintain Air input") + .addInfo("If it runs out of air, it will shut down and have to be manually restarted") + .addInfo("Supply 3L of " + mCoolantName + " per second, per 1000 EU/t to boost") + .addInfo("Takes 3x the amount of " + mLubricantName + " and maintains efficiency") + .addInfo("Fuel efficiency starts at ~160%, falls more slowly at higher EU/t if boosted") + .addInfo("If producing more than 30k EU/t, fuel efficiency will be lower:") + .addInfo("(These thresholds are 3x higher when boosted, boosted values displayed second)") + .addInfo("- 75% of max fuel efficiency at 53k or 159k EU/t output energy") + .addInfo("- 50% of max fuel efficiency at 69k or 207k EU/t output energy") + .addInfo("- 25% of max fuel efficiency at 98k or 294k EU/t output energy") + .addInfo("formula: x = input of energy (30000^(1/3)/ x^(1/3)) * (80000^(1/3)/ x^(1/3))") + .addSeparator() + .beginStructureBlock(3, 3, 10, false) + .addController("Front Center") + .addCasingInfoMin(mCasingName, 64, false) + .addCasingInfoMin(mGearboxName, 8, false) + .addStructureHint("Air Intake Hatch", 1) + .addInputBus("Side center line", 1) + .addInputHatch("Side center line", 1) + .addMaintenanceHatch("Any Block Touching Inconel Reinforced Casing", 1) + .addDynamoHatch("Top center line", 2) + .addMufflerHatch("Back Center", 3) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (this.STRUCTURE_DEFINITION == null) { + this.STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + this.mName, + transpose( + new String[][] { { "CTC", "CTC", "CTC", "CTC", "CTC", "CTC", "CTC", "CTC", "CTC", "CTC" }, + { "C~C", "SIS", "SIS", "SIS", "SIS", "SIS", "SIS", "SIS", "SIS", "CMC" }, + { "CCC", "CSC", "CSC", "CSC", "CSC", "CSC", "CSC", "CSC", "CSC", "CCC" }, })) + .addElement('C', ofBlock(getCasingBlock(), getCasingMeta())) + .addElement('I', ofBlock(getGearboxBlock(), getGearboxMeta())) + // side + .addElement( + 'S', + buildHatchAdder(MTELargeRocketEngine.class) + .atLeast(ImmutableMap.of(AirIntake, 8, InputBus, 1, InputHatch, 3, Maintenance, 1)) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) + // top + .addElement( + 'T', + buildHatchAdder(MTELargeRocketEngine.class) + .atLeast(ImmutableMap.of(AirIntake, 8, Dynamo.or(TTDynamo), 1, Maintenance, 1)) + .casingIndex(getCasingTextureIndex()) + .dot(2) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) + .addElement('M', Muffler.newAny(getCasingTextureIndex(), 3)) + .build(); + } + return this.STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(this.mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.mCasing = 0; + this.mTecTechDynamoHatches.clear(); + this.mAllDynamoHatches.clear(); + this.mAirIntakes.clear(); + return checkPiece(this.mName, 1, 1, 0) && this.mCasing >= 64 - 48 + && this.mAirIntakes.size() >= 1 + && checkHatch(); + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCALargeRocketEngineActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCALargeRocketEngine; + } + + @Override + protected int getCasingTextureId() { + return CASING_ID; + } + + @Override + public boolean isCorrectMachinePart(final ItemStack aStack) { + return this.getMaxEfficiency(aStack) > 0; + } + + public static void setAir() { + if (sAirFluidStack == null) { + sAirFluidStack = FluidUtils.getFluidStack("air", 1); + } + if (sAirFluid == null && sAirFluidStack != null) { + sAirFluid = sAirFluidStack.getFluid(); + } + } + + public int getAir() { + setAir(); + if (this.mAirIntakes.isEmpty() || this.mAirIntakes.size() <= 0) { + return 0; + } else { + int totalAir = 0; + for (METHatchAirIntake u : this.mAirIntakes) { + if (u != null && u.mFluid != null) { + FluidStack f = u.mFluid; + if (f.isFluidEqual(sAirFluidStack)) { + totalAir += f.amount; + } + } + } + return totalAir; + } + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.rocketFuels; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + final ArrayList tFluids = this.getStoredFluids(); + this.clearRecipeMapForAllInputHatches(); + int aircount = getAir(); + int aAirToConsume = this.euProduction / 100; + if (aircount < aAirToConsume) { + stopMachine(ShutDownReasonRegistry.outOfFluid(new FluidStack(sAirFluid, aAirToConsume))); + return SimpleCheckRecipeResult.ofFailure("no_air"); + } else { + int aTotalAir = 0; + for (METHatchAirIntake aAirHatch : this.mAirIntakes) { + if (aAirHatch.mFluid != null) { + aTotalAir += aAirHatch.getFluidAmount(); + } + } + if (aTotalAir >= aAirToConsume) { + int aSplitAmount = (aAirToConsume / this.mAirIntakes.size()); + if (aSplitAmount > 0) { + for (METHatchAirIntake aAirHatch : mAirIntakes) { + boolean hasIntakeAir = aAirHatch.drain(aSplitAmount, true) != null; + if (!hasIntakeAir) { + this.freeFuelTicks = 0; + return SimpleCheckRecipeResult.ofFailure("no_air"); + } + } + } + } + } + // reset fuel ticks in case it does not reset when it stops + if (this.freeFuelTicks != 0 && this.mProgresstime == 0 && this.mEfficiency == 0) this.freeFuelTicks = 0; + + if (tFluids.size() > 0 && getRecipeMap() != null) { + if (this.mRuntime % 72 == 0) { + if (!consumeCO2()) { + this.freeFuelTicks = 0; + return SimpleCheckRecipeResult.ofFailure("no_co2"); + } + } + if (this.freeFuelTicks == 0) { + this.boostEu = consumeLOH(); + } + for (final FluidStack hatchFluid1 : tFluids) { + if (hatchFluid1.isFluidEqual(sAirFluidStack)) { + continue; + } + if (this.freeFuelTicks == 0) { + for (final GTRecipe aFuel : getRecipeMap().getAllRecipes()) { + final FluidStack tLiquid; + tLiquid = aFuel.mFluidInputs[0]; + if (hatchFluid1.isFluidEqual(tLiquid)) { + if (!consumeFuel(aFuel, hatchFluid1.amount)) { + continue; + } + this.fuelValue = aFuel.mSpecialValue * 3; + this.fuelRemaining = hatchFluid1.amount; + this.lEUt = ((this.mEfficiency < 2000) ? 0 : GTValues.V[5] << 1); + this.mProgresstime = 1; + this.mMaxProgresstime = 1; + this.mEfficiencyIncrease = this.euProduction / 2000; + return CheckRecipeResultRegistry.GENERATING; + } + } + } else { + this.mEfficiencyIncrease = this.euProduction / 2000; + this.freeFuelTicks--; + this.lEUt = ((this.mEfficiency < 1000) ? 0 : GTValues.V[5] << 1); + this.mProgresstime = 1; + this.mMaxProgresstime = 1; + return CheckRecipeResultRegistry.GENERATING; + } + } + } + this.lEUt = 0; + this.mEfficiency = 0; + this.freeFuelTicks = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + /** + * Consumes Fuel if required. Free Fuel Ticks are handled here. + * + * @param aFuel + * @return + */ + public boolean consumeFuel(GTRecipe aFuel, int amount) { + amount *= this.boostEu ? 0.3 : 0.9; + this.freeFuelTicks = 0; + int value = aFuel.mSpecialValue * 3; + int energy = value * amount; + if (amount < 5) return false; + FluidStack tLiquid = FluidUtils.getFluidStack(aFuel.mFluidInputs[0], (this.boostEu ? amount * 3 : amount)); + if (!this.depleteInput(tLiquid)) { + return false; + } else { + this.fuelConsumption = this.boostEu ? amount * 3 : amount; + this.freeFuelTicks = 20; + setEUProduction(energy); + return true; + } + } + + public void setEUProduction(int energy) { + energy /= 20; + double energyEfficiency; + double tDivideEnergy = Math.cbrt(energy); + if (energy > 30000) { + // cbrt(30 000) / + energyEfficiency = (31.072325 / tDivideEnergy); + if (energy >= 80000) + // cbrt(80 000) / + energyEfficiency *= (43.0886938 / tDivideEnergy); + energyEfficiency *= energy; + } else { + energyEfficiency = energy; + } + this.euProduction = (int) (energyEfficiency); + if (this.boostEu) this.euProduction *= 3; + } + + public boolean consumeCO2() { + return this.depleteInput(MaterialMisc.CARBON_DIOXIDE.getFluidStack(this.boostEu ? 3 : 1)) + || this.depleteInput(FluidUtils.getFluidStack("carbondioxide", (this.boostEu ? 3 : 1))); + } + + public boolean consumeLOH() { + int LOHamount = (3 * this.euProduction) / 1000; + return this.depleteInput(FluidUtils.getFluidStack(RocketFuels.Liquid_Hydrogen, LOHamount)); // (40 * ((long) + // euProduction / + // 10000)) + } + + @Override + public boolean addEnergyOutput(long aEU) { + if (aEU <= 0) { + return true; + } + if (this.mAllDynamoHatches.size() > 0) { + return addEnergyOutputMultipleDynamos(aEU, true); + } + return false; + } + + @Override + public boolean addEnergyOutputMultipleDynamos(long aEU, boolean aAllowMixedVoltageDynamos) { + int injected = 0; + long totalOutput = 0; + long aFirstVoltageFound = -1; + boolean aFoundMixedDynamos = false; + for (MTEHatch aDynamo : filterValidMTEs(this.mAllDynamoHatches)) { + long aVoltage = aDynamo.maxEUOutput(); + long aTotal = aDynamo.maxAmperesOut() * aVoltage; + // Check against voltage to check when hatch mixing + if (aFirstVoltageFound == -1) { + aFirstVoltageFound = aVoltage; + } else { + if (aFirstVoltageFound != aVoltage) { + aFoundMixedDynamos = true; + } + } + totalOutput += aTotal; + } + + if (totalOutput < aEU || (aFoundMixedDynamos && !aAllowMixedVoltageDynamos)) { + explodeMultiblock(); + return false; + } + + long leftToInject; + long aVoltage; + int aAmpsToInject; + int aRemainder; + + for (MTEHatch aDynamo : filterValidMTEs(this.mAllDynamoHatches)) { + leftToInject = aEU - injected; + aVoltage = aDynamo.maxEUOutput(); + aAmpsToInject = (int) (leftToInject / aVoltage); + aRemainder = (int) (leftToInject - (aAmpsToInject * aVoltage)); + long powerGain; + for (int i = 0; i < Math.min(aDynamo.maxAmperesOut(), aAmpsToInject + 1); i++) { + if (i == Math.min(aDynamo.maxAmperesOut(), aAmpsToInject)) { + powerGain = aRemainder; + } else { + powerGain = aVoltage; + } + aDynamo.getBaseMetaTileEntity() + .increaseStoredEnergyUnits(powerGain, false); + injected += powerGain; + } + } + return injected > 0; + } + + public Block getCasingBlock() { + return ModBlocks.blockCasings4Misc; + } + + public byte getCasingMeta() { + return 11; + } + + public Block getGearboxBlock() { + return ModBlocks.blockCasings3Misc; + } + + public byte getGearboxMeta() { + return 1; + } + + public byte getCasingTextureIndex() { + return (byte) CASING_ID; + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTELargeRocketEngine(this.mName); + } + + @Override + public void saveNBTData(final NBTTagCompound aNBT) { + aNBT.setInteger("freeFuelTicks", this.freeFuelTicks); + aNBT.setInteger("euProduction", this.euProduction); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.freeFuelTicks = aNBT.getInteger("freeFuelTicks"); + this.euProduction = aNBT.getInteger("euProduction"); + } + + @Override + public int getDamageToComponent(final ItemStack aStack) { + return 1; + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return this.euProduction; + } + + @Override + public int getPollutionPerTick(final ItemStack aStack) { + return 75 * (this.euProduction / 10000); + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return true; + } + + @Override + public String[] getExtraInfoData() { + return new String[] { "Rocket Engine", "Current Air: " + getAir(), + "Current Pollution: " + getPollutionPerTick(null), + "Time until next fuel consumption: " + this.freeFuelTicks, + "Current Output: " + this.lEUt * this.mEfficiency / 10000 + " EU/t", + "Fuel Consumption: " + (this.fuelConsumption) + "L/s", "Fuel Value: " + this.fuelValue + " EU/L", + "Fuel Remaining: " + this.fuelRemaining + " Litres", "Current Efficiency: " + this.mEfficiency / 100 + "%", + (this.getIdealStatus() == this.getRepairStatus()) ? "No Maintainance issues" : "Needs Maintainance" }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String getMachineType() { + return "Rocket Engine"; + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + @Override + public boolean doesBindPlayerInventory() { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTELargeSemifluidGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTELargeSemifluidGenerator.java new file mode 100644 index 0000000000..141fbff41f --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTELargeSemifluidGenerator.java @@ -0,0 +1,331 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Dynamo; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase.GTPPHatchElement.TTDynamo; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; + +public class MTELargeSemifluidGenerator extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + protected int fuelConsumption = 0; + protected int fuelValue = 0; + protected int fuelRemaining = 0; + protected boolean boostEu = false; + + public MTELargeSemifluidGenerator(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeSemifluidGenerator(String aName) { + super(aName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Large Semifluid Generator") + .addInfo("Engine Intake Casings must not be obstructed in front (only air blocks)") + .addInfo("Supply Semifluid Fuels and 2000L of Lubricant per hour to run.") + .addInfo("Supply 80L of Oxygen per second to boost output (optional).") + .addInfo("Default: Produces 2048EU/t at 100% efficiency") + .addInfo("Boosted: Produces 6144EU/t at 150% efficiency") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 4, false) + .addController("Front Center") + .addCasingInfoMin("Stable Titanium Machine Casing", 16, false) + .addCasingInfoMin("Steel Gear Box Machine Casing", 2, false) + .addCasingInfoMin("Engine Intake Machine Casing", 8, false) + .addInputHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .addDynamoHatch("Back Center", 2) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + protected IIconContainer getActiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE_ACTIVE; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_DIESEL_ENGINE; + } + + @Override + protected int getCasingTextureId() { + return 50; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return getMaxEfficiency(aStack) > 0; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + ArrayList tFluids = getStoredFluids(); + + // Check for lubricant and oxygen first, so we can compute costs ahead of time. + // This will allow us to check costs without needing to actually try to deplete fluids + // (wasting earlier fluids in the check if later fluids turn out to be insufficient). + FluidStack lubricant = Materials.Lubricant.getFluid(0L); + FluidStack oxygen = Materials.Oxygen.getGas(0L); + for (FluidStack hatchFluid : tFluids) { + if (hatchFluid.isFluidEqual(lubricant)) { + lubricant.amount = Math.max(lubricant.amount, hatchFluid.amount); + } else if (hatchFluid.isFluidEqual(oxygen)) { + oxygen.amount = Math.max(oxygen.amount, hatchFluid.amount); + } + } + boostEu = oxygen.amount >= 4L; + long lubricantCost = boostEu ? 2L : 1L; + if (lubricant.amount < lubricantCost) { + return SimpleCheckRecipeResult.ofFailure("no_lubricant"); + } + + for (FluidStack hatchFluid : tFluids) { // Loops through hatches + GTRecipe aFuel = GTPPRecipeMaps.semiFluidFuels.getBackend() + .findFuel(hatchFluid); + if (aFuel == null) { + // Not a valid semi-fluid fuel. + continue; + } + + int newEUt = boostEu ? 4096 : 2048; + fuelConsumption = newEUt / aFuel.mSpecialValue; // Calc fuel consumption + FluidStack tLiquid = new FluidStack(hatchFluid.getFluid(), fuelConsumption); + if (depleteInput(tLiquid)) { // Deplete that amount + // We checked beforehand, so both of these depletions should succeed. + // But check the return values anyway just to be safe. + if (boostEu) { + if (!depleteInput(Materials.Oxygen.getGas(4L))) { + return SimpleCheckRecipeResult.ofFailure("no_oxygen"); + } + } + // Deplete Lubricant. 2000L should = 1 hour of runtime (if baseEU = 2048) + if (mRuntime % 72 == 0 || mRuntime == 0) { + if (!depleteInput(Materials.Lubricant.getFluid(lubricantCost))) { + return SimpleCheckRecipeResult.ofFailure("no_lubricant"); + } + } + + fuelValue = aFuel.mSpecialValue; + fuelRemaining = hatchFluid.amount; // Record available fuel + this.lEUt = mEfficiency < 2000 ? 0 : newEUt; // Output 0 if startup is less than 20% + this.mProgresstime = 1; + this.mMaxProgresstime = 1; + this.mEfficiencyIncrease = 15; + return CheckRecipeResultRegistry.GENERATING; + } + } + + this.lEUt = 0; + this.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "III", "CCC", "CCC", "CCC" }, { "I~I", "CGC", "CGC", "CMC" }, + { "III", "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTELargeSemifluidGenerator.class).atLeast(Muffler, InputHatch, Maintenance) + .casingIndex(getCasingTextureIndex()) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(getCasingBlock(), getCasingMeta())))) + .addElement('G', ofBlock(getGearboxBlock(), getGearboxMeta())) + .addElement('I', ofBlock(getIntakeBlock(), getIntakeMeta())) + .addElement( + 'M', + Dynamo.or(TTDynamo) + .newAny(getCasingTextureIndex(), 2)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + mDynamoHatches.clear(); + return checkPiece(mName, 1, 1, 0) && mCasing >= 16 && checkHatch(); + } + + public final boolean addLargeSemifluidGeneratorList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchMaintenance) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchMuffler) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchInput) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } + } + return false; + } + + public final boolean addLargeSemifluidGeneratorBackList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchDynamo || this.isThisHatchMultiDynamo(aTileEntity)) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } + } + return false; + } + + public Block getCasingBlock() { + return GregTechAPI.sBlockCasings4; + } + + public byte getCasingMeta() { + return 2; + } + + public Block getIntakeBlock() { + return GregTechAPI.sBlockCasings4; + } + + public byte getIntakeMeta() { + return 13; + } + + public Block getGearboxBlock() { + return GregTechAPI.sBlockCasings2; + } + + public byte getGearboxMeta() { + return 3; + } + + public byte getCasingTextureIndex() { + return 50; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeSemifluidGenerator(this.mName); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return boostEu ? 15000 : 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiLargeSemiFluidGenerator; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return true; + } + + @Override + public String[] getExtraInfoData() { + return new String[] { "Large Semifluid Generator", "Current Output: " + lEUt * mEfficiency / 10000 + " EU/t", + "Fuel Consumption: " + fuelConsumption + "L/t", "Fuel Value: " + fuelValue + " EU/L", + "Fuel Remaining: " + fuelRemaining + " Litres", "Current Efficiency: " + (mEfficiency / 100) + "%", + getIdealStatus() == getRepairStatus() ? "No Maintainance issues" : "Needs Maintainance" }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String getMachineType() { + return "Semifluid Generator"; + } + + @Override + public int getMaxParallelRecipes() { + return 0; + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEMassFabricator.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEMassFabricator.java new file mode 100644 index 0000000000..0bcf503daf --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEMassFabricator.java @@ -0,0 +1,360 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.Materials; +import gregtech.api.enums.TAE; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.config.machinestats.ConfigMassFabricator; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; + +public class MTEMassFabricator extends GTPPMultiBlockBase implements ISurvivalConstructable { + + public static int sUUAperUUM = 1; + public static int sUUASpeedBonus = 4; + public static int sDurationMultiplier = 3200; + + public static String mCasingName1 = "Matter Fabricator Casing"; + public static String mCasingName2 = "Containment Casing"; + public static String mCasingName3 = "Matter Generation Coil"; + + private int mMode = 0; + + private static final int MODE_SCRAP = 1; + private static final int MODE_UU = 0; + + public static boolean sRequiresUUA = false; + private static final FluidStack[] mUU = new FluidStack[2]; + private static final ItemStack[] mScrap = new ItemStack[2]; + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTEMassFabricator(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMassFabricator(final String aName) { + super(aName); + } + + @Override + public String getMachineType() { + return "Mass Fabricator / Recycler"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Matter Fabricator") + .addInfo("Speed: +0% | EU Usage: 80%") + .addInfo("Parallel: Scrap = 64 | UU = 8 * Tier") + .addInfo("Produces UU-A, UU-M & Scrap") + .addInfo("Change mode with screwdriver") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(5, 4, 5, true) + .addController("Front Center") + .addCasingInfoMin(mCasingName3, 9, false) + .addCasingInfoMin(mCasingName2, 24, false) + .addCasingInfoMin(mCasingName1, 36, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addEnergyHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.Overlay_MatterFab_Active_Animated; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.Overlay_MatterFab_Animated; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(9); + } + + @Override + public void onConfigLoad() { + super.onConfigLoad(); + sDurationMultiplier = ConfigMassFabricator.durationMultiplier; + sUUAperUUM = ConfigMassFabricator.UUAPerUUM; + sUUASpeedBonus = ConfigMassFabricator.UUASpeedBonus; + sRequiresUUA = ConfigMassFabricator.requiresUUA; + } + + public static boolean sInit = false; + + public static void init() { + if (!sInit) { + if (mScrap[0] == null) { + mScrap[0] = ItemUtils.getSimpleStack(ItemUtils.getItemFromFQRN("IC2:itemScrap")); + } + if (mScrap[1] == null) { + mScrap[1] = ItemUtils.getSimpleStack(ItemUtils.getItemFromFQRN("IC2:itemScrapbox")); + } + if (mUU[0] == null) { + mUU[0] = Materials.UUAmplifier.getFluid(100); + } + if (mUU[1] == null) { + mUU[1] = Materials.UUMatter.getFluid(100); + } + sInit = true; + } + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCCCC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, + { "CGGGC", "G---G", "G---G", "G---G", "CGGGC" }, + { "CGGGC", "G---G", "G---G", "G---G", "CGGGC" }, + { "CC~CC", "CHHHC", "CHHHC", "CHHHC", "CCCCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEMassFabricator.class) + .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Energy, Muffler) + .casingIndex(TAE.GTPP_INDEX(9)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 9)))) + .addElement('H', ofBlock(ModBlocks.blockCasingsMisc, 8)) + .addElement('G', ofBlock(ModBlocks.blockCasings3Misc, 15)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 2, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 2, 3, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 2, 3, 0) && mCasing >= 36 && checkHatch(); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiMassFabricator; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEMassFabricator(this.mName); + } + + /** + * Special Recipe Handling + */ + @Override + public RecipeMap getRecipeMap() { + return this.mMode == MODE_SCRAP ? RecipeMaps.recyclerRecipes : GTPPRecipeMaps.multiblockMassFabricatorRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(RecipeMaps.recyclerRecipes, GTPPRecipeMaps.multiblockMassFabricatorRecipes); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + public CheckRecipeResult process() { + init(); + return super.process(); + } + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (mMode == MODE_SCRAP) { + if (recipe.mOutputs == null) { + return SimpleCheckRecipeResult.ofSuccess("no_scrap"); + } + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Nonnull + @Override + protected Stream findRecipeMatches(@Nullable RecipeMap map) { + if (mMode == MODE_SCRAP) { + if (inputItems != null) { + for (ItemStack item : inputItems) { + if (item == null || item.stackSize == 0) continue; + ItemStack aPotentialOutput = GTModHandler + .getRecyclerOutput(GTUtility.copyAmount(1, item), 0); + GTRecipe recipe = new GTRecipe( + false, + new ItemStack[] { GTUtility.copyAmount(1, item) }, + aPotentialOutput == null ? null : new ItemStack[] { aPotentialOutput }, + null, + new int[] { 2000 }, + null, + null, + 40, + (int) TierEU.RECIPE_LV, + 0); + return Stream.of(recipe); + } + } + return Stream.empty(); + } + return super.findRecipeMatches(map); + } + }.setEuModifier(0.8F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + protected void setupProcessingLogic(ProcessingLogic logic) { + super.setupProcessingLogic(logic); + logic.enablePerfectOverclock(); + } + + @Override + public int getMaxParallelRecipes() { + return this.mMode == MODE_SCRAP ? 64 : 8 * (Math.max(1, GTUtility.getTier(getMaxInputVoltage()))); + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + int aMode = this.mMode + 1; + if (aMode > 1) { + this.mMode = MODE_UU; + PlayerUtils.messagePlayer(aPlayer, "Mode [" + this.mMode + "]: Matter/AmpliFabricator"); + } else if (aMode == 1) { + this.mMode = MODE_SCRAP; + PlayerUtils.messagePlayer(aPlayer, "Mode [" + this.mMode + "]: Recycler"); + } else { + this.mMode = MODE_SCRAP; + PlayerUtils.messagePlayer(aPlayer, "Mode [" + this.mMode + "]: Recycler"); + } + mLastRecipe = null; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mMode", mMode); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mMode = aNBT.getInteger("mMode"); + super.loadNBTData(aNBT); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + super.getWailaNBTData(player, tile, tag, world, x, y, z); + tag.setInteger("mode", mMode); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + super.getWailaBody(itemStack, currentTip, accessor, config); + final NBTTagCompound tag = accessor.getNBTData(); + currentTip.add( + StatCollector.translateToLocal("GT5U.machines.oreprocessor1") + " " + + EnumChatFormatting.WHITE + + StatCollector.translateToLocal("GT5U.GTPP_MULTI_MASS_FABRICATOR.mode." + tag.getInteger("mode")) + + EnumChatFormatting.RESET); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTENuclearReactor.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTENuclearReactor.java new file mode 100644 index 0000000000..3da77cf783 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTENuclearReactor.java @@ -0,0 +1,521 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Dynamo; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTRecipeConstants.LFTR_OUTPUT_POWER; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.filterByMTETier; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.objects.GTItemStack; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.nuclear.MaterialsNuclides; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; + +public class MTENuclearReactor extends GTPPMultiBlockBase implements ISurvivalConstructable { + + protected int mFuelRemaining = 0; + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTENuclearReactor(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTENuclearReactor(final String aName) { + super(aName); + } + + @Override + public long maxEUStore() { + return (640000000L * (Math.min(16, this.mEnergyHatches.size()))) / 16L; + } + + @Override + public String getMachineType() { + return "Reactor"; + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.liquidFluorineThoriumReactorRecipes; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Liquid Fluoride Thorium Reactor.") + .addInfo("Produces energy and new elements from Radioactive Beta Decay!") + .addInfo("Input LFTB and a molten salt as fuel, and match the 4 Buffered Dynamo Hatches:") + .addInfo("LFTR Fuel 1 (4 EV Hatches), LFTR Fuel 2 (4 IV Hatches), LFTR Fuel 3 (4 LuV Hatches)") + .addInfo("If using better hatches for a worse fuel, only 1 hatch will output EU") + .addInfo("Outputs U233 every 10 seconds, on average, while the reactor is running") + .addInfo("Check NEI to see the other 3 outputs - they differ between fuels") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(7, 4, 7, true) + .addController("Bottom Center") + .addCasingInfoMin("Hastelloy-N Reactor Casing", 27, false) + .addCasingInfoMin("Zeron-100 Reactor Shielding", 26, false) + .addInputHatch("Top or bottom layer edges", 1) + .addOutputHatch("Top or bottom layer edges", 1) + .addDynamoHatch("Top or bottom layer edges", 1) + .addMufflerHatch("Top 3x3", 2) + .addStructureInfo("All dynamos must be between EV and LuV tier.") + .addStructureInfo("All other hatches must be IV+ tier.") + .addStructureInfo("4x Output Hatches or 1x Output Hatch (ME), 1+ Input Hatches") + .addStructureInfo("4x Dynamo Hatches, 4x Mufflers") + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + public String[] getExtraInfoData() { + final String tRunning = (this.mMaxProgresstime > 0 ? "Reactor running" : "Reactor stopped"); + final String tMaintainance = (this.getIdealStatus() == this.getRepairStatus() ? "No Maintainance issues" + : "Needs Maintainance"); + + return new String[] { "Liquid Fluoride Thorium Reactor", tRunning, tMaintainance, + "Current Output: " + this.lEUt + " EU/t", "Fuel Remaining: " + this.mFuelRemaining + " Litres", + "Current Efficiency: " + (this.mEfficiency / 5) + "%", "Current Efficiency (Raw): " + (this.mEfficiency), + "It requires you to have 100% Efficiency." }; + } + + @Override + public boolean allowCoverOnSide(final ForgeDirection side, final GTItemStack aStack) { + return side != this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + boolean aWarmedUp = this.mEfficiency == this.getMaxEfficiency(null); + if (!aBaseMetaTileEntity.isActive() || !aWarmedUp) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_NUCLEAR_REACTOR_ACTIVE) + .extFacing() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_NUCLEAR_REACTOR) + .extFacing() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)) }; + } else if (aBaseMetaTileEntity.isActive() && aWarmedUp) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(13)), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_NUCLEAR_REACTOR_ACTIVE) + .extFacing() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(13)), + TextureFactory.builder() + .addIcon(Textures.BlockIcons.OVERLAY_FRONT_NUCLEAR_REACTOR) + .extFacing() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(13)) }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)) }; + } + + public final boolean addNuclearReactorEdgeList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchMaintenance) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchDynamo dynamo && dynamo.getTierForStructure() >= 4 + && dynamo.getTierForStructure() <= 6) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchInput hatch && hatch.getTierForStructure() >= 5) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchOutput hatch && hatch.getTierForStructure() >= 5) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } + } + return false; + } + + public final boolean addNuclearReactorTopList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchMuffler hatch && hatch.getTierForStructure() >= 5) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } + } + return false; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { + { "CCCCCCC", "COOOOOC", "COXXXOC", "COXXXOC", "COXXXOC", "COOOOOC", "CCCCCCC" }, + { "GGGGGGG", "G-----G", "G-----G", "G-----G", "G-----G", "G-----G", "GGGGGGG" }, + { "GGGGGGG", "G-----G", "G-----G", "G-----G", "G-----G", "G-----G", "GGGGGGG" }, + { "CCC~CCC", "COOOOOC", "COOOOOC", "COOOOOC", "COOOOOC", "COOOOOC", "CCCCCCC" }, })) + .addElement( + 'C', + ofChain( + buildHatchAdder(MTENuclearReactor.class).atLeast(Maintenance) + .casingIndex(TAE.GTPP_INDEX(12)) + .dot(1) + .build(), + buildHatchAdder(MTENuclearReactor.class).atLeast(InputHatch, OutputHatch) + .adder(MTENuclearReactor::addNuclearReactorEdgeList) + .hatchItemFilterAnd(t -> filterByMTETier(5, Integer.MAX_VALUE)) + .casingIndex(TAE.GTPP_INDEX(12)) + .dot(1) + .build(), + buildHatchAdder(MTENuclearReactor.class).atLeast(Dynamo) + .adder(MTENuclearReactor::addNuclearReactorEdgeList) + .hatchItemFilterAnd(t -> filterByMTETier(4, 6)) + .casingIndex(TAE.GTPP_INDEX(12)) + .dot(1) + .build(), + onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 12)))) + .addElement( + 'X', + buildHatchAdder(MTENuclearReactor.class).atLeast(Muffler) + .adder(MTENuclearReactor::addNuclearReactorTopList) + .hatchItemFilterAnd(t -> filterByMTETier(5, Integer.MAX_VALUE)) + .casingIndex(TAE.GTPP_INDEX(12)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasingsMisc, 12)))) + .addElement('O', ofBlock(ModBlocks.blockCasingsMisc, 12)) + .addElement('G', ofBlock(ModBlocks.blockCasingsMisc, 13)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 3, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 3, 3, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + if (checkPiece(mName, 3, 3, 0) && mCasing >= 27) { + if ((mOutputHatches.size() >= 3 || canDumpFluidToME()) && mInputHatches.size() >= 1 + && mDynamoHatches.size() == 4 + && mMufflerHatches.size() == 4) { + this.turnCasingActive(false); + return true; + } + } + return false; + } + + // Alk's Life Lessons from Greg. + /* + * [23:41:15] xdir and zdir are x2 and not x3 [23:41:26] thats you + * issue [23:44:33] mmm? [23:44:49] Should they be x3? [23:44:50] you + * just do a x2, what is for a 5x5 multiblock [23:45:01] x3 is for a 7x7 one [23:45:06] + * I have no idea what that value does, tbh.. [23:45:15] its the offset [23:45:23] + * Debugging checkMachine has been a pain and I usually trash designs that don't work straight up.. + * [23:45:28] it determines the horizontal middle of the multiblock [23:45:47] + * which is in your case THREE blocks away from the controller [23:45:51] Ahh + * [23:45:57] and not 2 [23:46:06] Noted, thanks :D + */ + + @Override + public boolean isCorrectMachinePart(final ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(final ItemStack aStack) { + return 0; + } + + @Override + public int getDamageToComponent(final ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return true; + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTENuclearReactor(this.mName); + } + + public boolean turnCasingActive(final boolean status) { + // TODO + if (this.mDynamoHatches != null) { + for (final MTEHatchDynamo hatch : this.mDynamoHatches) { + hatch.updateTexture(status ? TAE.GTPP_INDEX(13) : TAE.GTPP_INDEX(12)); + } + } + if (this.mMufflerHatches != null) { + for (final MTEHatchMuffler hatch : this.mMufflerHatches) { + hatch.updateTexture(status ? TAE.GTPP_INDEX(13) : TAE.GTPP_INDEX(12)); + } + } + if (this.mOutputHatches != null) { + for (final MTEHatchOutput hatch : this.mOutputHatches) { + hatch.updateTexture(status ? TAE.GTPP_INDEX(13) : TAE.GTPP_INDEX(12)); + } + } + if (this.mInputHatches != null) { + for (final MTEHatchInput hatch : this.mInputHatches) { + hatch.updateTexture(status ? TAE.GTPP_INDEX(13) : TAE.GTPP_INDEX(12)); + } + } + if (this.mMaintenanceHatches != null) { + for (final MTEHatchMaintenance hatch : this.mMaintenanceHatches) { + hatch.updateTexture(status ? TAE.GTPP_INDEX(13) : TAE.GTPP_INDEX(12)); + } + } + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return OverclockCalculator + .ofNoOverclock(recipe.getMetadataOrDefault(LFTR_OUTPUT_POWER, 0) * 4L, recipe.mDuration); + } + + @NotNull + @Override + public CheckRecipeResult process() { + CheckRecipeResult result = super.process(); + if (!result.wasSuccessful()) { + resetMultiProcessing(); + } + return result; + } + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + mFuelRemaining = 0; + int li2bef4 = 0; + FluidStack aFuelFluid = null; + for (FluidStack aFluidInput : recipe.mFluidInputs) { + if (!aFluidInput.getFluid() + .equals(MaterialsNuclides.Li2BeF4.getFluid())) { + aFuelFluid = aFluidInput; + break; + } + } + if (aFuelFluid != null) { + for (FluidStack fluidStack : inputFluids) { + if (fluidStack.isFluidEqual(aFuelFluid)) { + mFuelRemaining += fluidStack.amount; + } else if (fluidStack.getFluid() + .equals(MaterialsNuclides.Li2BeF4.getFluid())) { + li2bef4 += fluidStack.amount; + } + } + } + if (mFuelRemaining < 100) { + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + if (li2bef4 < 200) { + return SimpleCheckRecipeResult.ofFailure("no_li2bef4"); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + }; + } + + protected void resetMultiProcessing() { + this.mEfficiency = 0; + this.mLastRecipe = null; + stopMachine(ShutDownReasonRegistry.NONE); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + // Warm up for 4~ minutes + if (mEfficiency < this.getMaxEfficiency(null)) { + this.mMaxProgresstime = 1; + this.mEfficiencyIncrease = 2; + this.lEUt = 0; + return SimpleCheckRecipeResult.ofSuccess("warm_up"); + } + CheckRecipeResult result = super.checkProcessing(); + if (result.wasSuccessful()) { + // We produce EU, so we negate the value, if negative + if (lEUt < 0) { + lEUt = -lEUt; + } + } + return result; + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + @Override + public void explodeMultiblock() { + this.mInventory[1] = null; + long explodevalue; + for (final MetaTileEntity tTileEntity : this.mInputBusses) { + explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); + tTileEntity.getBaseMetaTileEntity() + .doExplosion(explodevalue); + } + for (final MetaTileEntity tTileEntity : this.mOutputBusses) { + explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); + tTileEntity.getBaseMetaTileEntity() + .doExplosion(explodevalue); + } + for (final MetaTileEntity tTileEntity : this.mInputHatches) { + explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); + tTileEntity.getBaseMetaTileEntity() + .doExplosion(explodevalue); + } + for (final MetaTileEntity tTileEntity : this.mOutputHatches) { + explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); + tTileEntity.getBaseMetaTileEntity() + .doExplosion(explodevalue); + } + for (final MetaTileEntity tTileEntity : this.mDynamoHatches) { + explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); + tTileEntity.getBaseMetaTileEntity() + .doExplosion(explodevalue); + } + for (final MetaTileEntity tTileEntity : this.mMufflerHatches) { + explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); + tTileEntity.getBaseMetaTileEntity() + .doExplosion(explodevalue); + } + for (final MetaTileEntity tTileEntity : this.mEnergyHatches) { + explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); + tTileEntity.getBaseMetaTileEntity() + .doExplosion(explodevalue); + } + for (final MetaTileEntity tTileEntity : this.mMaintenanceHatches) { + explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); + tTileEntity.getBaseMetaTileEntity() + .doExplosion(explodevalue); + } + explodevalue = MathUtils.randLong(Integer.MAX_VALUE, 8589934588L); + this.getBaseMetaTileEntity() + .doExplosion(explodevalue); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.getWorld().isRemote) { + if (aBaseMetaTileEntity.isActive()) { + // Set casings active if we're warmed up. + this.turnCasingActive(this.mEfficiency == this.getMaxEfficiency(null)); + } else { + this.turnCasingActive(false); + } + } + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + // See if we're warmed up. + if (this.mEfficiency == this.getMaxEfficiency(null)) { + // Try output some Uranium-233 + if (MathUtils.randInt(1, 300) == 1) { + this.addOutput(MaterialsElements.getInstance().URANIUM233.getFluidStack(MathUtils.randInt(1, 10))); + } + } + return super.onRunningTick(aStack); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mFuelRemaining", this.mFuelRemaining); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.mFuelRemaining = aNBT.getInteger("mFuelRemaining"); + super.loadNBTData(aNBT); + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEQuantumForceTransformer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEQuantumForceTransformer.java new file mode 100644 index 0000000000..b3f3f2b136 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEQuantumForceTransformer.java @@ -0,0 +1,939 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.ExoticEnergy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTOreDictUnificator.getAssociation; +import static gregtech.api.util.GTRecipeBuilder.BUCKETS; +import static gregtech.api.util.GTRecipeBuilder.INGOTS; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.ParallelHelper.addFluidsLong; +import static gregtech.api.util.ParallelHelper.addItemsLong; +import static gregtech.api.util.ParallelHelper.calculateChancedOutputMultiplier; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.IBlockAccess; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.ITierConverter; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureUtility; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TAE; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.ParallelHelper; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +@SuppressWarnings("SpellCheckingInspection") +public class MTEQuantumForceTransformer extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private int mCasing; + protected int mCraftingTier = 0; + protected int mFocusingTier = 0; + protected int mMaxParallel = 0; + private boolean mFluidMode = false, doFermium = false, doNeptunium = false; + private static final Fluid mNeptunium = MaterialsElements.getInstance().NEPTUNIUM.getPlasma(); + private static final Fluid mFermium = MaterialsElements.getInstance().FERMIUM.getPlasma(); + private static final String MAIN_PIECE = "main"; + private MTEHatchInput mNeptuniumHatch; + private MTEHatchInput mFermiumHatch; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + MAIN_PIECE, + new String[][] { // A - 142, B - 234, C - 177, D - 96, E - 224, H - 36, M - 21 + { " ", " ", " ", " ", " ", + " ", " ", " ", " ", " ", + " ", " ", " ", " BAB ", " BBBBABBBB ", + " BAAAAAAAB ", " BABBABBAB ", " BA AB ", " A A ", " A A ", + " A A " }, + { " ", " ", " ", " ", " ", + " ", " ", " ", " ", " ", + " ", " ", " BAB ", " AAABBBAAA ", " BAAAAAAAAAB ", + " B B ", " A A ", " A A ", " ", " ", + " " }, + { " ", " ", " ", " ", " ", + " ", " ", " ", " ", " ", + " ", " BAB ", " AA AA ", " AA AA ", " BAA AAB ", + " B B ", " A A ", " A A ", " ", " ", + " " }, + { " ", " ", " ", " ", " ", + " ", " ", " ", " ", " ", + " ", " BAAAB ", " AA AA ", " AA AA ", "BAA AAB", + "B B", "A A", "A A", "A A", "A A", + "A A" }, + { " TTT ", " EEE ", " EEE ", " EEE ", " DDD ", + " EEE ", " DDD ", " EEE ", " EEE ", " EEE ", + " DDD ", " BAEEEAB ", " AA EEE AA ", " A EEE A ", "BA DDD AB", + "B EEE B", "B DDD B", " EEE ", " EEE ", " EEE ", + " Z~X " }, + { " TTTTT ", " ECCCE ", " ECCCE ", " ECCCE ", " D D ", + " ECCCE ", " D D ", " ECCCE ", " ECCCE ", " ECCCE ", + " D D ", " BAECCCEAB ", " A ECCCE A ", " A ECCCE A ", "BA D D AB", + "B ECCCE B", "B D D B", "B ECCCE B", " ECCCE ", " ECCCE ", + " HHHHH " }, + { " TTTTTTT ", " ECCCCCE ", " EC CE ", " EC CE ", " D D ", + " EC CE ", " D D ", " EC CE ", " EC CE ", " EC CE ", + " D D ", " BAEC CEAB ", " B EC CE B ", "BB EC CE BB", "BA D D AB", + "A EC CE A", "A D D A", "A EC CE A", " EC CE ", " EC CE ", + " HHHHHHH " }, + { " TTTTTTT ", " ECCCCCE ", " EC CE ", " EC CE ", " D D ", + " EC CE ", " D D ", " EC CE ", " EC CE ", " EC CE ", + " D D ", " AAEC CEAA ", " A EC CE A ", "AB EC CE BA", "AA D D AA", + "A EC CE A", "A D D A", " EC CE ", " EC CE ", " EC CE ", + " HHHHHHH " }, + { " TTTTTTT ", " ECCCCCE ", " EC CE ", " EC CE ", " D D ", + " EC CE ", " D D ", " EC CE ", " EC CE ", " EC CE ", + " D D ", " BAEC CEAB ", " B EC CE B ", "BB EC CE BB", "BA D D AB", + "A EC CE A", "A D D A", "A EC CE A", " EC CE ", " EC CE ", + " HHHHHHH " }, + { " TTTTT ", " ECCCE ", " ECCCE ", " ECCCE ", " D D ", + " ECCCE ", " D D ", " ECCCE ", " ECCCE ", " ECCCE ", + " D D ", " BAECCCEAB ", " A ECCCE A ", " A ECCCE A ", "BA D D AB", + "B ECCCE B", "B D D B", "B ECCCE B", " ECCCE ", " ECCCE ", + " HHHHH " }, + { " TTT ", " EEE ", " EEE ", " EEE ", " DDD ", + " EEE ", " DDD ", " EEE ", " EEE ", " EEE ", + " DDD ", " BAEEEAB ", " AA EEE AA ", " A EEE A ", "BA DDD AB", + "B EEE B", "B DDD B", " EEE ", " EEE ", " EEE ", + " HHH " }, + { " ", " ", " ", " ", " ", + " ", " ", " ", " ", " ", + " ", " BAAAB ", " AA AA ", " AA AA ", "BAA AAB", + "B B", "A A", "A A", "A A", "A A", + "A A" }, + { " ", " ", " ", " ", " ", + " ", " ", " ", " ", " ", + " ", " BAB ", " AA AA ", " AA AA ", " BAA AAB ", + " B B ", " A A ", " A A ", " ", " ", + " " }, + { " ", " ", " ", " ", " ", + " ", " ", " ", " ", " ", + " ", " ", " BAB ", " AAABBBAAA ", " BAAAAAAAAAB ", + " B B ", " A A ", " A A ", " ", " ", + " " }, + { " ", " ", " ", " ", " ", + " ", " ", " ", " ", " ", + " ", " ", " ", " BAB ", " BBBBABBBB ", + " BBBAAABBB ", " ABBAAABBA ", " A BA AB A ", " A A ", " A A ", + " A A " }, }) + .addElement( + 'A', + withChannel( + "manipulator", + StructureUtility.ofBlocksTiered( + craftingTierConverter(), + getAllCraftingTiers(), + 0, + MTEQuantumForceTransformer::setCraftingTier, + MTEQuantumForceTransformer::getCraftingTier))) + .addElement( + 'B', + withChannel( + "shielding", + StructureUtility.ofBlocksTiered( + focusingTierConverter(), + getAllFocusingTiers(), + 0, + MTEQuantumForceTransformer::setFocusingTier, + MTEQuantumForceTransformer::getFocusingTier))) + .addElement('C', ofBlock(ModBlocks.blockCasings4Misc, 4)) + .addElement('D', ofBlock(ModBlocks.blockCasings2Misc, 12)) + .addElement('E', lazy(t -> ofBlock(t.getCasingBlock1(), t.getCasingMeta1()))) + .addElement( + 'H', + buildHatchAdder(MTEQuantumForceTransformer.class) + .atLeast(InputBus, InputHatch, Maintenance, Energy.or(ExoticEnergy)) + .casingIndex(TAE.getIndexFromPage(0, 10)) + .dot(4) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12)))) + .addElement( + 'T', + buildHatchAdder(MTEQuantumForceTransformer.class).atLeast(OutputBus, OutputHatch, Maintenance) + .casingIndex(TAE.getIndexFromPage(0, 10)) + .dot(5) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12)))) + .addElement( + 'Z', + buildHatchAdder(MTEQuantumForceTransformer.class).hatchClass(MTEHatchInput.class) + .adder(MTEQuantumForceTransformer::addNeptuniumHatch) + .casingIndex(TAE.getIndexFromPage(0, 10)) + .dot(5) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12)))) + .addElement( + 'X', + buildHatchAdder(MTEQuantumForceTransformer.class).hatchClass(MTEHatchInput.class) + .adder(MTEQuantumForceTransformer::addFermiumHatch) + .casingIndex(TAE.getIndexFromPage(0, 10)) + .dot(5) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 12)))) + .build(); + + public MTEQuantumForceTransformer(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEQuantumForceTransformer(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEQuantumForceTransformer(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Quantum Force Transformer") + .addInfo("Controller Block for the Quantum Force Transformer") + .addInfo("Allows Complex chemical lines to be performed instantly in one step") + .addInfo("Every recipe requires a catalyst, each catalyst adds 1 parallel and lasts forever") + .addInfo("Accepts TecTech Energy and Laser Hatches") + .addInfo("All inputs go on the bottom, all outputs go on the top") + .addInfo("Put a circuit in the controller to specify the focused output") + .addInfo("Check NEI to see the order of outputs, and which circuit number you need.") + .addInfo("If separate input busses are enabled put the circuit in the circuit slot of the bus") + .addInfo("Uses FocusTier*4*sqrt(parallels) Neptunium Plasma if focusing") + .addInfo("Can use FocusTier*4*sqrt(parallels) Fermium Plasma for additional chance output") + .addInfo("Use a screwdriver to enable Fluid mode") + .addInfo( + "Fluid mode turns all possible outputs into their fluid variant, those which can't are left as they were.") + .addInfo("This multi gets improved when all casings of some types are upgraded") + .addInfo("Casing functions:") + .addInfo("Pulse Manipulators: Recipe Tier Allowed (check NEI for the tier of each recipe)") + .addInfo("Shielding Cores: Focusing Tier (equal to or higher than recipe tier to allow focus)") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(15, 21, 15, true) + .addController("Bottom Center") + .addCasingInfoMin("Bulk Production Frame", 80, false) + .addCasingInfoMin("Quantum Force Conductor", 177, false) + .addCasingInfoMin("Force Field Glass", 224, false) + .addCasingInfoMin("Pulse Manipulators", 236, true) + .addCasingInfoMin("Shielding Cores", 142, true) + .addInputBus(EnumChatFormatting.BLUE + "Bottom" + EnumChatFormatting.GRAY + " Layer", 4) + .addInputHatch(EnumChatFormatting.BLUE + "Bottom" + EnumChatFormatting.GRAY + " Layer", 4) + .addOutputHatch(EnumChatFormatting.AQUA + "Top" + EnumChatFormatting.GRAY + " Layer", 5) + .addOutputBus(EnumChatFormatting.AQUA + "Top" + EnumChatFormatting.GRAY + " Layer", 5) + .addEnergyHatch(EnumChatFormatting.BLUE + "Bottom" + EnumChatFormatting.GRAY + " Layer", 4) + .addStructureInfo( + EnumChatFormatting.WHITE + "Neptunium Plasma Hatch: " + + EnumChatFormatting.GREEN + + "Left" + + EnumChatFormatting.GRAY + + " side of Controller") + .addStructureInfo( + EnumChatFormatting.WHITE + "Fermium Plasma Hatch: " + + EnumChatFormatting.DARK_GREEN + + "Right" + + EnumChatFormatting.GRAY + + " side of Controller") + .toolTipFinisher( + GTValues.AuthorBlueWeabo + EnumChatFormatting.RESET + + EnumChatFormatting.GREEN + + " + Steelux" + + EnumChatFormatting.RESET + + " - [GT++]"); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + this.mCasing = 0; + this.mCraftingTier = 0; + this.mFocusingTier = 0; + if (!checkPiece(MAIN_PIECE, 7, 20, 4)) { + return false; + } + + if (mOutputBusses.isEmpty() || mOutputHatches.isEmpty()) { + return false; + } + + // Maintenance hatch not required but left for compatibility. + // Don't allow more than 1, no free casing spam! + if (mMaintenanceHatches.size() > 1) { + return false; + } + + return checkExoticAndNormalEnergyHatches(); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(MAIN_PIECE, stackSize, hintsOnly, 7, 20, 4); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(MAIN_PIECE, stackSize, 7, 20, 4, elementBudget, env, false, true); + } + + public static List> getAllCraftingTiers() { + return new ArrayList<>() { + + { + add(Pair.of(ModBlocks.blockCasings5Misc, 7)); + add(Pair.of(ModBlocks.blockCasings5Misc, 8)); + add(Pair.of(ModBlocks.blockCasings5Misc, 9)); + add(Pair.of(ModBlocks.blockCasings5Misc, 10)); + } + }; + } + + public static List> getAllFocusingTiers() { + return new ArrayList<>() { + + { + add(Pair.of(ModBlocks.blockCasings5Misc, 11)); + add(Pair.of(ModBlocks.blockCasings5Misc, 12)); + add(Pair.of(ModBlocks.blockCasings5Misc, 13)); + add(Pair.of(ModBlocks.blockCasings5Misc, 14)); + } + }; + } + + public static ITierConverter craftingTierConverter() { + return (block, meta) -> { + if (block == null) { + return -1; + } else if (block == ModBlocks.blockCasings5Misc) { // Resonance Chambers + switch (meta) { + case 7 -> { + return 1; + } + case 8 -> { + return 2; + } + case 9 -> { + return 3; + } + case 10 -> { + return 4; + } + } + } + return -1; + }; + } + + public static ITierConverter focusingTierConverter() { + return (block, meta) -> { + if (block == null) { + return -1; + } else if (block == ModBlocks.blockCasings5Misc) { // Generation Coils + switch (meta) { + case 11 -> { + return 1; + } + case 12 -> { + return 2; + } + case 13 -> { + return 3; + } + case 14 -> { + return 4; + } + } + } + return -1; + }; + } + + private void setCraftingTier(int tier) { + mCraftingTier = tier; + } + + private void setFocusingTier(int tier) { + mFocusingTier = tier; + } + + private int getCraftingTier() { + return mCraftingTier; + } + + private int getFocusingTier() { + return mFocusingTier; + } + + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAQFTActive; + } + + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAQFT; + } + + protected int getCasingTextureId() { + return TAE.getIndexFromPage(0, 10); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.quantumForceTransformerRecipes; + } + + @Override + public boolean isCorrectMachinePart(final ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + private int[] chances; + private FluidStack[] fluidModeItems; + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (recipe.mSpecialValue > getCraftingTier()) { + return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); + } + ItemStack catalyst = null; + for (ItemStack item : recipe.mInputs) { + if (ItemUtils.isCatalyst(item)) { + catalyst = item; + break; + } + } + + if (catalyst == null) { + return SimpleCheckRecipeResult.ofFailure("no_catalyst"); + } + + maxParallel = 0; + for (ItemStack item : inputItems) { + if (ItemUtils.isCatalyst(item) && item.isItemEqual(catalyst)) { + maxParallel += item.stackSize; + } + } + + mMaxParallel = maxParallel; + doFermium = false; + doNeptunium = false; + + if (recipe.mSpecialValue <= getFocusingTier()) { + if (drain(mFermiumHatch, new FluidStack(mFermium, 1), false)) { + doFermium = true; + } + if (drain(mNeptuniumHatch, new FluidStack(mNeptunium, 1), false)) { + doNeptunium = true; + } + } + + chances = getOutputChances(recipe, doNeptunium ? findProgrammedCircuitNumber() : -1); + + // Handle Fluid Mode. Add fluid that item can be turned into to fluidModeItems. + // null if Fluid Mode is disabled or item cannot be turned into fluid. + fluidModeItems = new FluidStack[recipe.mOutputs.length]; + if (mFluidMode) { + for (int i = 0; i < recipe.mOutputs.length; i++) { + ItemStack item = recipe.getOutput(i); + if (item == null) continue; + ItemData data = getAssociation(item); + Materials mat = data == null ? null : data.mMaterial.mMaterial; + if (mat != null) { + if (mat.mStandardMoltenFluid != null) { + fluidModeItems[i] = mat.getMolten(INGOTS); + } else if (mat.mFluid != null) { + fluidModeItems[i] = mat.getFluid(BUCKETS); + } + } + } + } + + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + public ParallelHelper createParallelHelper(@Nonnull GTRecipe recipe) { + return super.createParallelHelper(recipe).setCustomItemOutputCalculation(parallel -> { + ArrayList items = new ArrayList<>(); + + for (int i = 0; i < recipe.mOutputs.length; i++) { + ItemStack item = recipe.getOutput(i); + if (item == null || fluidModeItems[i] != null) continue; + ItemStack itemToAdd = item.copy(); + double outputMultiplier = calculateChancedOutputMultiplier(chances[i], parallel); + long itemAmount = (long) (item.stackSize * outputMultiplier); + addItemsLong(items, itemToAdd, itemAmount); + } + + return items.toArray(new ItemStack[0]); + }) + .setCustomFluidOutputCalculation(parallel -> { + ArrayList fluids = new ArrayList<>(); + + if (mFluidMode) { + for (int i = 0; i < recipe.mOutputs.length; i++) { + FluidStack fluid = fluidModeItems[i]; + if (fluid == null) continue; + FluidStack fluidToAdd = fluid.copy(); + double outputMultiplier = calculateChancedOutputMultiplier(chances[i], parallel); + int itemAmount = recipe.mOutputs[i].stackSize; + long fluidAmount = (long) (fluidToAdd.amount * outputMultiplier * itemAmount); + addFluidsLong(fluids, fluidToAdd, fluidAmount); + } + } + + for (int i = 0; i < recipe.mFluidOutputs.length; i++) { + FluidStack fluid = recipe.getFluidOutput(i); + if (fluid == null) continue; + FluidStack fluidToAdd = fluid.copy(); + double outputMultiplier = calculateChancedOutputMultiplier( + chances[i + recipe.mOutputs.length], + parallel); + long fluidAmount = (long) (fluidToAdd.amount * outputMultiplier); + addFluidsLong(fluids, fluidToAdd, fluidAmount); + } + + return fluids.toArray(new FluidStack[0]); + }); + } + + private int findProgrammedCircuitNumber() { + if (isInputSeparationEnabled()) { + for (ItemStack stack : inputItems) { + if (GTUtility.isAnyIntegratedCircuit(stack)) { + return stack.getItemDamage() - 1; + } + } + return -1; + } else { + final ItemStack controllerStack = getControllerSlot(); + return GTUtility.isAnyIntegratedCircuit(controllerStack) ? controllerStack.getItemDamage() - 1 : -1; + } + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getAverageInputVoltage()); + logic.setAvailableAmperage(getMaxInputAmps()); + } + + private byte runningTick = 0; + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (!super.onRunningTick(aStack)) { + return false; + } + + if (runningTick % 20 == 0) { + int amount = (int) (getFocusingTier() * 4 + * Math.sqrt(Math.min(mMaxParallel, processingLogic.getCurrentParallels()))); + if (doFermium) { + FluidStack fermiumToConsume = new FluidStack(mFermium, amount); + if (!drain(mFermiumHatch, fermiumToConsume, true)) { + doFermium = false; + stopMachine(ShutDownReasonRegistry.outOfFluid(fermiumToConsume)); + return false; + } + } + + if (doNeptunium) { + FluidStack neptuniumToConsume = new FluidStack(mNeptunium, amount); + if (!drain(mNeptuniumHatch, neptuniumToConsume, true)) { + doNeptunium = false; + stopMachine(ShutDownReasonRegistry.outOfFluid(neptuniumToConsume)); + return false; + } + } + + runningTick = 1; + } else { + runningTick++; + } + + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + // TODO: Look for proper fix + // Updates every 30 sec + if (mUpdate <= -550) mUpdate = 50; + } + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return 0; + } + + @Override + public int getDamageToComponent(final ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + public static int getBaseOutputChance(GTRecipe tRecipe) { + int aOutputsAmount = tRecipe.mOutputs.length + tRecipe.mFluidOutputs.length; + return 10000 / aOutputsAmount; + } + + private int[] getOutputChances(GTRecipe tRecipe, int aChanceIncreased) { + int difference = getFocusingTier() - tRecipe.mSpecialValue; + int aOutputsAmount = tRecipe.mOutputs.length + tRecipe.mFluidOutputs.length; + int aChancePerOutput = 10000 / aOutputsAmount; + int[] tChances = new int[aOutputsAmount]; + Arrays.fill(tChances, aChancePerOutput); + + switch (difference) { + case 0 -> { + for (int i = 0; i < tChances.length; i++) { + if (doNeptunium) { + if (i == aChanceIncreased) { + tChances[i] += aChancePerOutput / 2 * (aOutputsAmount - 1); + } else { + tChances[i] /= 2; + } + } + + if (doFermium) { + tChances[i] += (10000 - tChances[i]) / 4; + } + } + } + case 1 -> { + for (int i = 0; i < tChances.length; i++) { + if (doNeptunium) { + if (i == aChanceIncreased) { + tChances[i] += aChancePerOutput * 3 / 4 * (aOutputsAmount - 1); + } else { + tChances[i] /= 4; + } + } + + if (doFermium) { + tChances[i] += (10000 - tChances[i]) / 3; + } + } + } + case 2, 3 -> { + for (int i = 0; i < tChances.length; i++) { + if (doNeptunium) { + if (i == aChanceIncreased) { + tChances[i] = 10000; + } else { + tChances[i] = 0; + } + } + + if (doFermium) { + tChances[i] += (10000 - tChances[i]) / 2; + } + } + } + } + return tChances; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + mFluidMode = !mFluidMode; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("miscutils.machines.QFTFluidMode") + " " + mFluidMode); + } + + public boolean addNeptuniumHatch(IGregTechTileEntity aTileEntity, short aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = null; + mNeptuniumHatch = (MTEHatchInput) aMetaTileEntity; + return true; + } + return false; + } + + public boolean addFermiumHatch(IGregTechTileEntity aTileEntity, short aBaseCasingIndex) { + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = null; + mFermiumHatch = (MTEHatchInput) aMetaTileEntity; + return true; + } + return false; + } + + public Block getCasingBlock1() { + return ModBlocks.blockCasings5Misc; + } + + public byte getCasingMeta1() { + return 15; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setBoolean("mFluidMode", mFluidMode); + aNBT.setBoolean("doFermium", doFermium); + aNBT.setBoolean("doNeptunium", doNeptunium); + aNBT.setInteger("mMaxParallel", mMaxParallel); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { + inputSeparation = aNBT.getBoolean("mSeparateInputBusses"); + } + if (!aNBT.hasKey(BATCH_MODE_NBT_KEY)) { + batchMode = aNBT.getBoolean("mBatchMode"); + } + mFluidMode = aNBT.getBoolean("mFluidMode"); + doFermium = aNBT.getBoolean("doFermium"); + doNeptunium = aNBT.getBoolean("doNeptunium"); + mMaxParallel = aNBT.getInteger("mMaxParallel"); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { getCasingTexture(), TextureFactory.builder() + .addIcon(getActiveOverlay()) + .extFacing() + .build() }; + return new ITexture[] { getCasingTexture(), TextureFactory.builder() + .addIcon(getInactiveOverlay()) + .extFacing() + .build() }; + } + return new ITexture[] { getCasingTexture() }; + } + + private ITexture getCasingTexture() { + return Textures.BlockIcons.getCasingTextureForId(getCasingTextureId()); + } + + @SideOnly(Side.CLIENT) + private void renderForceField(double x, double y, double z, int side, double minU, double maxU, double minV, + double maxV) { + // spotless:off + Tessellator tes = Tessellator.instance; + switch (side) { + case 0 -> { + tes.addVertexWithUV(x + 3, y, z + 7, maxU, maxV); + tes.addVertexWithUV(x + 3, y + 4, z + 7, maxU, minV); + tes.addVertexWithUV(x - 3, y + 4, z + 7, minU, minV); + tes.addVertexWithUV(x - 3, y, z + 7, minU, maxV); + tes.addVertexWithUV(x - 3, y, z + 7, minU, maxV); + tes.addVertexWithUV(x - 3, y + 4, z + 7, minU, minV); + tes.addVertexWithUV(x + 3, y + 4, z + 7, maxU, minV); + tes.addVertexWithUV(x + 3, y, z + 7, maxU, maxV); + } + case 1 -> { + tes.addVertexWithUV(x + 7, y, z + 4, maxU, maxV); + tes.addVertexWithUV(x + 7, y + 4, z + 4, maxU, minV); + tes.addVertexWithUV(x + 7, y + 4, z - 4, minU, minV); + tes.addVertexWithUV(x + 7, y, z - 4, minU, maxV); + tes.addVertexWithUV(x + 7, y, z - 4, minU, maxV); + tes.addVertexWithUV(x + 7, y + 4, z - 4, minU, minV); + tes.addVertexWithUV(x + 7, y + 4, z + 4, maxU, minV); + tes.addVertexWithUV(x + 7, y, z + 4, maxU, maxV); + } + case 2 -> { + tes.addVertexWithUV(x + 3, y, z - 7, maxU, maxV); + tes.addVertexWithUV(x + 3, y + 4, z - 7, maxU, minV); + tes.addVertexWithUV(x - 3, y + 4, z - 7, minU, minV); + tes.addVertexWithUV(x - 3, y, z - 7, minU, maxV); + tes.addVertexWithUV(x - 3, y, z - 7, minU, maxV); + tes.addVertexWithUV(x - 3, y + 4, z - 7, minU, minV); + tes.addVertexWithUV(x + 3, y + 4, z - 7, maxU, minV); + tes.addVertexWithUV(x + 3, y, z - 7, maxU, maxV); + } + case 3 -> { + tes.addVertexWithUV(x - 7, y, z + 4, maxU, maxV); + tes.addVertexWithUV(x - 7, y + 4, z + 4, maxU, minV); + tes.addVertexWithUV(x - 7, y + 4, z - 4, minU, minV); + tes.addVertexWithUV(x - 7, y, z - 4, minU, maxV); + tes.addVertexWithUV(x - 7, y, z - 4, minU, maxV); + tes.addVertexWithUV(x - 7, y + 4, z - 4, minU, minV); + tes.addVertexWithUV(x - 7, y + 4, z + 4, maxU, minV); + tes.addVertexWithUV(x - 7, y, z + 4, maxU, maxV); + } + case 4 -> { + tes.addVertexWithUV(x - 3, y, z + 7, maxU, maxV); + tes.addVertexWithUV(x - 3, y + 4, z + 7, maxU, minV); + tes.addVertexWithUV(x - 7, y + 4, z + 4, minU, minV); + tes.addVertexWithUV(x - 7, y, z + 4, minU, maxV); + tes.addVertexWithUV(x - 7, y, z + 4, minU, maxV); + tes.addVertexWithUV(x - 7, y + 4, z + 4, minU, minV); + tes.addVertexWithUV(x - 3, y + 4, z + 7, maxU, minV); + tes.addVertexWithUV(x - 3, y, z + 7, maxU, maxV); + } + case 5 -> { + tes.addVertexWithUV(x - 3, y, z - 7, maxU, maxV); + tes.addVertexWithUV(x - 3, y + 4, z - 7, maxU, minV); + tes.addVertexWithUV(x - 7, y + 4, z - 4, minU, minV); + tes.addVertexWithUV(x - 7, y, z - 4, minU, maxV); + tes.addVertexWithUV(x - 7, y, z - 4, minU, maxV); + tes.addVertexWithUV(x - 7, y + 4, z - 4, minU, minV); + tes.addVertexWithUV(x - 3, y + 4, z - 7, maxU, minV); + tes.addVertexWithUV(x - 3, y, z - 7, maxU, maxV); + } + case 6 -> { + tes.addVertexWithUV(x + 3, y, z + 7, maxU, maxV); + tes.addVertexWithUV(x + 3, y + 4, z + 7, maxU, minV); + tes.addVertexWithUV(x + 7, y + 4, z + 4, minU, minV); + tes.addVertexWithUV(x + 7, y, z + 4, minU, maxV); + tes.addVertexWithUV(x + 7, y, z + 4, minU, maxV); + tes.addVertexWithUV(x + 7, y + 4, z + 4, minU, minV); + tes.addVertexWithUV(x + 3, y + 4, z + 7, maxU, minV); + tes.addVertexWithUV(x + 3, y, z + 7, maxU, maxV); + } + case 7 -> { + tes.addVertexWithUV(x + 3, y, z - 7, maxU, maxV); + tes.addVertexWithUV(x + 3, y + 4, z - 7, maxU, minV); + tes.addVertexWithUV(x + 7, y + 4, z - 4, minU, minV); + tes.addVertexWithUV(x + 7, y, z - 4, minU, maxV); + tes.addVertexWithUV(x + 7, y, z - 4, minU, maxV); + tes.addVertexWithUV(x + 7, y + 4, z - 4, minU, minV); + tes.addVertexWithUV(x + 3, y + 4, z - 7, maxU, minV); + tes.addVertexWithUV(x + 3, y, z - 7, maxU, maxV); + } + } + } + + @SideOnly(Side.CLIENT) + @Override + public boolean renderInWorld(IBlockAccess aWorld, int x, int y, int z, Block block, RenderBlocks renderer) { + Tessellator tes = Tessellator.instance; + IIcon forceField = TexturesGtBlock.ForceField.getIcon(); + if (getBaseMetaTileEntity().isActive()) { + double minU = forceField.getMinU(); + double maxU = forceField.getMaxU(); + double minV = forceField.getMinV(); + double maxV = forceField.getMaxV(); + double xBaseOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double zBaseOffset = 3 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + tes.setColorOpaque_F(1f, 1f, 1f); + tes.setBrightness(15728880); + //Center O: 0, 0 1 ------- 8 + //Corner 1: 7, -2 / \ + //Corner 2: 3, -6 2 / \ 7 + //Corner 3: -2, -6 | | + //Corner 4: -6, -2 | O | + //Corner 5: -6, 3 | | + //Corner 6: -2, 7 3 \ / 6 + //Corner 7: 3, 7 \ / + //Corner 8: 7, 3 4 ------- 5 + renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 0, minU, maxU, minV, maxV); + renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 1, minU, maxU, minV, maxV); + renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 2, minU, maxU, minV, maxV); + renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 3, minU, maxU, minV, maxV); + renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 4, minU, maxU, minV, maxV); + renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 5, minU, maxU, minV, maxV); + renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 6, minU, maxU, minV, maxV); + renderForceField(x + xBaseOffset + 0.5, y, z + zBaseOffset + 0.5, 7, minU, maxU, minV, maxV); + } + // Needs to be false to render the controller + return false; + //spotless:on + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTERefinery.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTERefinery.java new file mode 100644 index 0000000000..2160f43546 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTERefinery.java @@ -0,0 +1,218 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.filterByMTETier; + +import net.minecraft.item.ItemStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.TAE; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; + +public class MTERefinery extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTERefinery(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTERefinery(final String aName) { + super(aName); + } + + @Override + public String getMachineType() { + return "Fuel Refinery"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Fission Fuel Processing Unit") + .addInfo("Refines fluorides and Uranium into nuclear fuel for the LFTR") + .addInfo("LFTR Fuel 2 and Fuel 3 have alternative, much more efficient recipes") + .addInfo("However, they require fission breeding outputs from the LFTR itself") + .addInfo("Only one Energy Hatch is allowed per Processing Unit") + .addInfo("All recipe times in this multi are very long, watch out!") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 9, 3, false) + .addController("Bottom Center") + .addCasingInfoMin("Hastelloy-X Structural Block", 7, false) + .addCasingInfoMin("Incoloy-DS Fluid Containment Block", 5, false) + .addCasingInfoMin("Zeron-100 Reactor Shielding", 4, false) + .addCasingInfoMin("Hastelloy-N Sealant Blocks", 17, false) + .addInputHatch("Base platform", 1) + .addOutputHatch("Base platform", 1) + .addMufflerHatch("Base platform", 1) + .addMaintenanceHatch("Base platform", 1) + .addEnergyHatch("Base platform", 1) + .addStructureInfo("Muffler's Tier must be IV+") + .addStructureInfo("2-4x Input Hatches, 1-2x Output Hatches") + .addStructureInfo("1x Muffler, 1x Maintenance Hatch, 1x Energy Hatch") + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + protected IIconContainer getActiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER_ACTIVE; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return Textures.BlockIcons.OVERLAY_FRONT_MULTI_SMELTER; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(18); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.fissionFuelProcessingRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic(); + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + @Override + public boolean addMufflerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchMuffler && ((MTEHatchMuffler) aMetaTileEntity).mTier >= 5) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } + } + return false; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { " ", " N ", " " }, { " N ", "NIN", " N " }, { " N ", "NIN", " N " }, + { " N ", "NIN", " N " }, { " Z ", "ZIZ", " Z " }, { " N ", "NIN", " N " }, + { "XXX", "XXX", "XXX" }, { "X~X", "XXX", "XXX" }, })) + .addElement( + 'X', + ofChain( + buildHatchAdder(MTERefinery.class) + .atLeast(Energy, Maintenance, OutputHatch, OutputBus, InputHatch) + .casingIndex(TAE.GTPP_INDEX(18)) + .dot(1) + .build(), + buildHatchAdder(MTERefinery.class).atLeast(Muffler) + .adder(MTERefinery::addMufflerToMachineList) + .hatchItemFilterAnd(t -> filterByMTETier(6, Integer.MAX_VALUE)) + .casingIndex(TAE.GTPP_INDEX(18)) + .dot(1) + .build(), + onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 2)))) + .addElement('I', ofBlock(ModBlocks.blockCasings2Misc, 3)) + .addElement('N', ofBlock(ModBlocks.blockCasings2Misc, 1)) + .addElement('Z', ofBlock(ModBlocks.blockCasingsMisc, 13)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 7, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 7, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + if (checkPiece(mName, 1, 7, 0) && mCasing >= 7) { + if (this.mInputHatches.size() >= 2 && this.mInputHatches.size() <= 4 + && this.mOutputHatches.size() >= 1 + && this.mOutputHatches.size() <= 2 + && this.mMufflerHatches.size() == 1 + && this.mMaintenanceHatches.size() == 1 + && this.mEnergyHatches.size() == 1) { + this.resetRecipeMapForAllInputHatches(this.getRecipeMap()); + return true; + } + } + return false; + } + + @Override + public boolean isCorrectMachinePart(final ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiRefinery; + } + + @Override + public int getDamageToComponent(final ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTERefinery(this.mName); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTESolarTower.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTESolarTower.java new file mode 100644 index 0000000000..085cb1b784 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTESolarTower.java @@ -0,0 +1,672 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +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.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.tileentities.misc.MTESolarHeater; + +public class MTESolarTower extends GTPPMultiBlockBase implements ISurvivalConstructable { + + // 862 + private static final int mCasingTextureID = TAE.getIndexFromPage(3, 9); + private int mHeatLevel = 0; + private int mCasing1; + private int mCasing2; + private int mCasing3; + private int mCasing4; + + public ArrayList mSolarHeaters = new ArrayList<>(); + + public MTESolarTower(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTESolarTower(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTESolarTower(this.mName); + } + + @Override + public String getMachineType() { + return "Solar Tower"; + } + + @Override + protected final MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Contributing Green Energy towards the future") + .addInfo("Surround with rings of Solar Reflectors") + .addInfo("The Reflectors increase the internal heat value of the Tower (see below for formula)") + .addInfo("Each Reflector ring increases tier, the first ring is required for the Tower to work") + .addInfo("Input: " + MaterialMisc.SOLAR_SALT_COLD.getLocalizedName()) + .addInfo("Output: " + MaterialMisc.SOLAR_SALT_HOT.getLocalizedName()) + .addInfo("Every cycle (10 seconds), heat increases and all the Cold Solar Salt is heated") + .addInfo("Converting Cold to Hot Solar Salt reduces heat, equal to the amount converted") + .addInfo("This conversion only happens if heat >= 30000 and controller efficiency = 100%") + .addInfo("If there's more Cold Salt than heat, all the heat is used up and returns to 0") + .addInfo("The heat increase is most efficient at exactly half of maximum heat") + .addInfo("Minimum efficiency at 0 or 100000 heat, maximum efficiency at 50000") + .addInfo("Heat Efficiency formula: ( 7000 - [|currentHeat - 50000| ^ 0.8]) / 7000") + .addInfo("Heat gain per cycle: numberHeaters * heatEfficiency * (10 + bonus)") + .addInfo("Bonus: 1 ring = +1, 2 rings = +2, 3 rings = +4, 4 rings = +8, 5 rings = +16") + .addInfo("Total number of reflectors based on how many rings are built:") + .addInfo("1 ring = 36, 2 rings = 88, 3 rings = 156, 4 rings = 240, 5 rings = 340") + .addSeparator() + .beginVariableStructureBlock(15, 31, 28, 28, 15, 31, false) + .addController("Top Middle") + .addCasingInfoMin("Structural Solar Casing", 229, false) + .addCasingInfoMin("Thermally Insulated Casing", 60, false) + .addCasingInfoMin("Salt Containment Casing", 66, false) + .addCasingInfoMin("Thermal Containment Casing", 60, false) + .addInputHatch("Any 2 dot hint(min 1)", 2) + .addOutputHatch("Any 2 dot hint(min 1)", 2) + .addMaintenanceHatch("Any 2 dot hint", 2) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + private static final String STRUCTURE_PIECE_BASE = "base"; + private static final String STRUCTURE_PIECE_TOWER = "tower"; + private static final String STRUCTURE_PIECE_TOP = "top"; + + private static final String[] STRUCTURE_PIECE_SOLAR_HEATER_RING = { "ring1", "ring2", "ring3", "ring4", "ring5" }; + private static final String SOLAR_HEATER_RING_1 = STRUCTURE_PIECE_SOLAR_HEATER_RING[0]; + private static final String SOLAR_HEATER_RING_2 = STRUCTURE_PIECE_SOLAR_HEATER_RING[1]; + private static final String SOLAR_HEATER_RING_3 = STRUCTURE_PIECE_SOLAR_HEATER_RING[2]; + private static final String SOLAR_HEATER_RING_4 = STRUCTURE_PIECE_SOLAR_HEATER_RING[3]; + private static final String SOLAR_HEATER_RING_5 = STRUCTURE_PIECE_SOLAR_HEATER_RING[4]; + + private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { + + @Override + protected IStructureDefinition computeValue(Class type) { + return StructureDefinition.builder() + + // s = salt + // c = thermal containment + // i = thermal insulated + // t = solar structural + // h = hatch + // g = solar heater + + .addShape( + STRUCTURE_PIECE_TOP, + (new String[][] { { " ", " ", " ~ ", " ", " " }, + { " ", " s ", " sss ", " s ", " " }, + { " c ", " ccc ", "ccscc", " ccc ", " c " }, + { " c ", " ccc ", "ccscc", " ccc ", " c " }, + { " c ", " ccc ", "ccscc", " ccc ", " c " }, + { " c ", " ccc ", "ccscc", " ccc ", " c " }, + { " c ", " ccc ", "ccscc", " ccc ", " c " }, })) + .addShape( + STRUCTURE_PIECE_TOWER, + (new String[][] { { " i ", "isi", " i " }, { " i ", "isi", " i " }, { " i ", "isi", " i " }, + { " i ", "isi", " i " }, { " i ", "isi", " i " }, { " i ", "isi", " i " }, + { " i ", "isi", " i " }, { " i ", "isi", " i " }, { " i ", "isi", " i " }, + { " i ", "isi", " i " }, { " i ", "isi", " i " }, { " i ", "isi", " i " }, + { " i ", "isi", " i " }, { " i ", "isi", " i " }, { " i ", "isi", " i " }, })) + .addShape( + STRUCTURE_PIECE_BASE, + (new String[][] { + { " ", " ", " t ", " ttt ", " ttstt ", " ttssstt ", + " ttstt ", " ttt ", " t ", " ", " " }, + { " ", " ", " t ", " ttt ", " tssst ", " ttssstt ", + " tssst ", " ttt ", " t ", " ", " " }, + { " ", " t ", " ttt ", " ttttt ", " ttssstt ", " tttsssttt ", + " ttssstt ", " ttttt ", " ttt ", " t ", " " }, + { " ", " t ", " ttt ", " ttttt ", " ttssstt ", " tttsssttt ", + " ttssstt ", " ttttt ", " ttt ", " t ", " " }, + { " hhh ", " ttttt ", " ttttttt ", " ttttttttt ", "htttsssttth", "htttsssttth", + "htttsssttth", " ttttttttt ", " ttttttt ", " ttttt ", " hhh " }, + { " hhh ", " ttttt ", " ttttttt ", " ttttttttt ", "httttttttth", "httttttttth", + "httttttttth", " ttttttttt ", " ttttttt ", " ttttt ", " hhh " }, })) + .addShape( + SOLAR_HEATER_RING_1, + (new String[][] { { " ggggg ", " g g ", " g g ", " g g ", + " g g ", "g g", "g g", "g g", "g g", + "g g", " g g ", " g g ", " g g ", " g g ", + " ggggg ", } })) + .addShape( + SOLAR_HEATER_RING_2, + (new String[][] { + { " ggggggggg ", " g g ", " g g ", " g g ", + " g g ", "g g", "g g", "g g", + "g g", "g g", "g g", "g g", + "g g", "g g", " g g ", " g g ", + " g g ", " g g ", " ggggggggg ", } })) + .addShape( + SOLAR_HEATER_RING_3, + (new String[][] { { " ggggggggggggg ", " g g ", " g g ", + " g g ", " g g ", "g g", + "g g", "g g", "g g", + "g g", "g g", "g g", + "g g", "g g", "g g", + "g g", "g g", "g g", + " g g ", " g g ", " g g ", + " g g ", " ggggggggggggg ", } })) + .addShape( + SOLAR_HEATER_RING_4, + (new String[][] { { " ggggggggggggggggg ", " g g ", + " g g ", " g g ", " g g ", + "g g", "g g", "g g", + "g g", "g g", "g g", + "g g", "g g", "g g", + "g g", "g g", "g g", + "g g", "g g", "g g", + "g g", "g g", " g g ", + " g g ", " g g ", " g g ", + " ggggggggggggggggg ", } })) + .addShape( + SOLAR_HEATER_RING_5, + (new String[][] { { " ggggggggggggggggggggg ", " g g ", + " g g ", " g g ", + " g g ", "g g", + "g g", "g g", + "g g", "g g", + "g g", "g g", + "g g", "g g", + "g g", "g g", + "g g", "g g", + "g g", "g g", + "g g", "g g", + "g g", "g g", + "g g", "g g", + " g g ", " g g ", + " g g ", " g g ", + " ggggggggggggggggggggg ", } })) + .addElement( + 'g', + lazy( + t -> buildHatchAdder(MTESolarTower.class).hatchClass(MTESolarHeater.class) + .adder(MTESolarTower::addSolarHeater) + // Use a positive casing index to make adder builder happy + .casingIndex(1) + .dot(1) + .continueIfSuccess() + .build())) + .addElement( + 't', + lazy(t -> onElementPass(x -> ++x.mCasing1, ofBlock(t.getCasingBlock(), t.getCasingMeta())))) + .addElement( + 'i', + lazy(t -> onElementPass(x -> ++x.mCasing2, ofBlock(t.getCasingBlock(), t.getCasingMeta2())))) + .addElement( + 's', + lazy(t -> onElementPass(x -> ++x.mCasing3, ofBlock(t.getCasingBlock(), t.getCasingMeta3())))) + .addElement( + 'c', + lazy(t -> onElementPass(x -> ++x.mCasing4, ofBlock(t.getCasingBlock2(), t.getCasingMeta4())))) + .addElement( + 'h', + lazy( + t -> buildHatchAdder(MTESolarTower.class).atLeast(InputHatch, OutputHatch, Maintenance) + .casingIndex(t.getCasingTextureIndex()) + .dot(2) + .buildAndChain( + onElementPass(x -> ++x.mCasing1, ofBlock(t.getCasingBlock(), t.getCasingMeta()))))) + .build(); + } + }; + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + resetSolarHeaters(); + this.mMaintenanceHatches.clear(); + this.mInputHatches.clear(); + this.mOutputHatches.clear(); + mCasing1 = 0; + mCasing2 = 0; + mCasing3 = 0; + mCasing4 = 0; + + boolean aStructureTop = checkPiece(STRUCTURE_PIECE_TOP, 2, 2, 0); + log("Top Check: " + aStructureTop); + boolean aStructureTower = checkPiece(STRUCTURE_PIECE_TOWER, 1, 1, -7); + log("Tower Check: " + aStructureTower); + boolean aStructureBase = checkPiece(STRUCTURE_PIECE_BASE, 5, 5, -22); + log("Base Check: " + aStructureBase); + boolean aCasingCount1 = mCasing1 >= 229; + boolean aCasingCount2 = mCasing2 == 60; + boolean aCasingCount3 = mCasing3 == 66; + boolean aCasingCount4 = mCasing4 == 60; + boolean aAllStructure = aStructureTop && aStructureTower && aStructureBase; + boolean aAllCasings = aCasingCount1 && aCasingCount2 && aCasingCount3 && aCasingCount4; + if (!aAllCasings || !aAllStructure + || mMaintenanceHatches.size() != 1 + || mInputHatches.size() < 1 + || mOutputHatches.size() < 1) { + log( + "Bad Hatches - Solar Heaters: " + mSolarHeaters.size() + + ", Maint: " + + mMaintenanceHatches.size() + + ", Input Hatches: " + + mInputHatches.size() + + ", Output Hatches: " + + mOutputHatches.size() + + ", Top: " + + aStructureTop + + ", Tower: " + + aStructureTower + + ", Base: " + + aStructureBase + + ", Casing Count: " + + aCasingCount1 + + " | Found: " + + mCasing1 + + ", Casing Count: " + + aCasingCount2 + + " | Found: " + + mCasing2 + + ", Casing Count: " + + aCasingCount3 + + " | Found: " + + mCasing3 + + ", Casing Count: " + + aCasingCount4 + + " | Found: " + + mCasing4); + return false; + } + log( + "Built " + this.getLocalName() + + " with " + + mCasing1 + + " Structural Solar casings, " + + mCasing2 + + " Thermally Insulated casings, " + + mCasing3 + + " Salt Containment casings, " + + mCasing4 + + " Thermal Containment casings."); + return aAllCasings && aAllStructure; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + // Tower + buildPiece(STRUCTURE_PIECE_TOP, stackSize, hintsOnly, 2, 2, 0); + buildPiece(STRUCTURE_PIECE_TOWER, stackSize, hintsOnly, 1, 1, -7); + buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 5, 5, -22); + + // Solar Heaters + if (stackSize.stackSize >= 1) { + buildPiece(SOLAR_HEATER_RING_1, stackSize, hintsOnly, 7, 7, -27); + if (stackSize.stackSize >= 2) { + buildPiece(SOLAR_HEATER_RING_2, stackSize, hintsOnly, 9, 9, -27); + if (stackSize.stackSize >= 3) { + buildPiece(SOLAR_HEATER_RING_3, stackSize, hintsOnly, 11, 11, -27); + if (stackSize.stackSize >= 4) { + buildPiece(SOLAR_HEATER_RING_4, stackSize, hintsOnly, 13, 13, -27); + if (stackSize.stackSize >= 5) { + buildPiece(SOLAR_HEATER_RING_5, stackSize, hintsOnly, 15, 15, -27); + } + } + } + } + } + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + int built; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 2); + // Tower + built = survivialBuildPiece(STRUCTURE_PIECE_TOP, stackSize, 2, 2, 0, realBudget, env, false, true); + if (built >= 0) return built; + built = survivialBuildPiece(STRUCTURE_PIECE_TOWER, stackSize, 1, 1, -7, realBudget, env, false, true); + if (built >= 0) return built; + built = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 5, 5, -22, realBudget, env, false, true); + if (built >= 0) return built; + + // Solar Heaters + if (stackSize.stackSize < 1) return -1; + built = survivialBuildPiece(SOLAR_HEATER_RING_1, stackSize, 7, 7, -27, realBudget, env, false, true); + if (built >= 0) return built; + if (stackSize.stackSize < 2) return -1; + built = survivialBuildPiece(SOLAR_HEATER_RING_2, stackSize, 9, 9, -27, realBudget, env, false, true); + if (built >= 0) return built; + if (stackSize.stackSize < 3) return -1; + built = survivialBuildPiece(SOLAR_HEATER_RING_3, stackSize, 11, 11, -27, realBudget, env, false, true); + if (built >= 0) return built; + if (stackSize.stackSize < 4) return -1; + built = survivialBuildPiece(SOLAR_HEATER_RING_4, stackSize, 13, 13, -27, realBudget, env, false, true); + if (built >= 0) return built; + if (stackSize.stackSize < 5) return -1; + return survivialBuildPiece(SOLAR_HEATER_RING_5, stackSize, 15, 15, -27, realBudget, env, false, true); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_MAGNETIZER_LOOP; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == ForgeDirection.DOWN || side == ForgeDirection.UP) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)), + TextureFactory.builder() + .addIcon(TexturesGtBlock.oMCDSolarTowerActive) + .extFacing() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)), + TextureFactory.builder() + .addIcon(TexturesGtBlock.oMCDSolarTower) + .extFacing() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(12)) }; + } + + @Override + public RecipeMap getRecipeMap() { + // Only for visual + return GTPPRecipeMaps.solarTowerRecipes; + } + + private int getHeaterTier() { + int aSolarHeaterCounter = this.mSolarHeaters.size(); + if (aSolarHeaterCounter > 0) { + if (aSolarHeaterCounter == 36) { + return 1; + } else if (aSolarHeaterCounter == 88) { + return 2; + } else if (aSolarHeaterCounter == 156) { + return 4; + } else if (aSolarHeaterCounter == 240) { + return 8; + } else if (aSolarHeaterCounter == 340) { + return 16; + } + } + return 0; + } + + private int getHeaterCountForTier(int aTier) { + return switch (aTier) { + case 1 -> 36; + case 2 -> 88; + case 4 -> 156; + case 8 -> 240; + case 16 -> 340; + default -> 0; + }; + } + + public boolean getConnectedSolarReflectors() { + + resetSolarHeaters(); + int aRing = 1; + + if (this.mSolarHeaters.size() < 36) { + // 15x15 + boolean aRing1 = checkPiece(SOLAR_HEATER_RING_1, 7, 7, -27); + if (aRing1) { + // log("Found Ring: "+(aRing++)+", Total: "+this.mSolarHeaters.size()); + } + } + if (this.mSolarHeaters.size() < 88) { + // 17x17 + boolean aRing2 = checkPiece(SOLAR_HEATER_RING_2, 9, 9, -27); + if (aRing2) { + // log("Found Ring: "+(aRing++)+", Total: "+this.mSolarHeaters.size()); + } + } + if (this.mSolarHeaters.size() < 156) { + // 19x19 + boolean aRing3 = checkPiece(SOLAR_HEATER_RING_3, 11, 11, -27); + if (aRing3) { + // log("Found Ring: "+(aRing++)+", Total: "+this.mSolarHeaters.size()); + } + } + if (this.mSolarHeaters.size() < 240) { + // 21x21 + boolean aRing4 = checkPiece(SOLAR_HEATER_RING_4, 13, 13, -27); + if (aRing4) { + // log("Found Ring: "+(aRing++)+", Total: "+this.mSolarHeaters.size()); + } + } + if (this.mSolarHeaters.size() < 340) { + // 23x23 + boolean aRing5 = checkPiece(SOLAR_HEATER_RING_5, 15, 15, -27); + if (aRing5) { + // log("Found Ring: "+(aRing++)+", Total: "+this.mSolarHeaters.size()); + } + } + return mSolarHeaters.size() > 0; + } + + private boolean addSolarHeater(IGregTechTileEntity aTileEntity, int a) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTESolarHeater mTile) { + if (!mTile.hasSolarTower() && mTile.canSeeSky()) { + // Logger.INFO("Found Solar Reflector, Injecting Data."); + mTile.setSolarTower(this); + return this.mSolarHeaters.add(mTile); + } + } + } + return false; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d == ForgeDirection.UP; + } + + private Fluid mColdSalt = null; + private Fluid mHotSalt = null; + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + this.mEfficiencyIncrease = 100; + this.mMaxProgresstime = 200; + + if (this.mSolarHeaters.isEmpty() || this.mSolarHeaters.size() < 340 + || this.getTotalRuntimeInTicks() % 200 == 0) { + getConnectedSolarReflectors(); + } + + int aTier = getHeaterTier(); + int aHeaters = getHeaterCountForTier(aTier); + + // Original formula was (-Math.pow(this.mHeatLevel - 50000, 0.8) + 7000) / 7000 + // However, negative numbers to the power of a non-integer result in NaN, by default + // Max efficiency is 1, at mHeatLevel = 50000, and it lowers at the same rate if going above or below this heat + // Min efficiency is 0.179, at mHeatLevel = 0 or 100000 + double aEfficiency = (-Math.pow(Math.abs(this.mHeatLevel - 50000), 0.8) + 7000) / 7000; + + World w = this.getBaseMetaTileEntity() + .getWorld(); + + // Manage Heat every 10s + // Add Heat First, if sources available and it's daytime, heat gain is halved if raining + if (w != null) { + if (aHeaters > 0 && w.isDaytime()) { + if (w.isRaining() && this.getBaseMetaTileEntity() + .getBiome().rainfall > 0.0F) { + this.mHeatLevel += GTUtility.safeInt((long) ((aHeaters / 2) * aEfficiency * (10 + aTier))); + } else { + this.mHeatLevel += GTUtility.safeInt((long) (aHeaters * aEfficiency * (10 + aTier))); + } + } + + // Remove Heat, based on time of day + if (mHeatLevel > 0) { + if (mHeatLevel > 100000) { + this.mHeatLevel = 100000; + } else { + this.mHeatLevel -= 10; + } + } + } + + if (this.mEfficiency == this.getMaxEfficiency(null) && this.mHeatLevel >= 30000) { + if (mColdSalt == null) { + mColdSalt = MaterialMisc.SOLAR_SALT_COLD.getFluid(); + } + if (mHotSalt == null) { + mHotSalt = MaterialMisc.SOLAR_SALT_HOT.getFluid(); + } + ArrayList aFluids = this.getStoredFluids(); + for (FluidStack aFluid : aFluids) { + if (aFluid.getFluid() + .equals(mColdSalt)) { + int aFluidAmount = Math.min(aFluid.amount, this.mHeatLevel); + + this.mHeatLevel -= aFluidAmount; + this.depleteInput(FluidUtils.getFluidStack(mColdSalt, aFluidAmount)); + this.addOutput(FluidUtils.getFluidStack(mHotSalt, aFluidAmount)); + this.mHeatLevel = Math.max(this.mHeatLevel, 0); + + break; + } + } + } + + return CheckRecipeResultRegistry.GENERATING; + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(final ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + public Block getCasingBlock() { + return ModBlocks.blockSpecialMultiCasings; + } + + public Block getCasingBlock2() { + return ModBlocks.blockCasings2Misc; + } + + public byte getCasingMeta() { + return 6; + } + + public byte getCasingMeta2() { + return 8; + } + + public byte getCasingMeta3() { + return 7; + } + + public byte getCasingMeta4() { + return 11; + } + + public byte getCasingTextureIndex() { + return (byte) mCasingTextureID; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) {} + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("mHeatLevel", mHeatLevel); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mHeatLevel = aNBT.getInteger("mHeatLevel"); + } + + @Override + public void onRemoval() { + resetSolarHeaters(); + super.onRemoval(); + } + + private void resetSolarHeaters() { + for (MTESolarHeater aTile : this.mSolarHeaters) { + aTile.clearSolarTower(); + } + this.mSolarHeaters.clear(); + } + + @Override + public String[] getExtraInfoData() { + return new String[] { "Internal Heat Level: " + this.mHeatLevel, + "Connected Solar Reflectors: " + this.mSolarHeaters.size() }; + } + + @Override + public boolean doesBindPlayerInventory() { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEThermalBoiler.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEThermalBoiler.java new file mode 100644 index 0000000000..8889cbd501 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTEThermalBoiler.java @@ -0,0 +1,352 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.stream.Stream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.ParallelHelper; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEThermalBoiler extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + private static final int lavaFilterResilience = 30; // Damage lava filter with 1/n probability every operation. + private int dryHeatCounter = 0; // Counts up to dryHeatMaximum to check for explosion conditions. + private static final int dryHeatMaximum = 10; // 10 consecutive operations without water = BOOM + + private static final Item itemLavaFilter = ItemList.Component_LavaFilter.getItem(); + private static final Item itemObsidian = Item.getItemFromBlock(Blocks.obsidian); + private static final Fluid fluidWater = FluidRegistry.WATER; + private static final Fluid fluidDistilledWater = FluidUtils.getDistilledWater(1) + .getFluid(); + private static final Fluid fluidSteam = FluidUtils.getSteam(1) + .getFluid(); + private static final Fluid fluidSHSteam = FluidUtils.getSuperHeatedSteam(1) + .getFluid(); + + public MTEThermalBoiler(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEThermalBoiler(String mName) { + super(mName); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEThermalBoiler(this.mName); + } + + @Override + public String getMachineType() { + return "Boiler"; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return (aStack != null && aStack.getItem() == itemLavaFilter) ? 1 : 0; + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.thermalBoilerRecipes; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return false; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + // Only test against the first fluid input in the recipe. + // We still want to run if we lack water (and subsequently explode). + @NotNull + @Override + protected Stream findRecipeMatches(@Nullable RecipeMap map) { + if (lastRecipe != null && depleteInput(lastRecipe.mFluidInputs[0], true)) { + return Stream.of(lastRecipe); + } + if (map == null) { + return Stream.empty(); + } + return map.getAllRecipes() + .stream() + .filter(recipe -> depleteInput(recipe.mFluidInputs[0], true)); + } + + @NotNull + @Override + protected ParallelHelper createParallelHelper(@Nonnull GTRecipe recipe) { + GTRecipe adjustedRecipe = recipe.copy(); + + // Hack the recipe logic to not consume water, so that we can explode. + for (FluidStack inputFluid : adjustedRecipe.mFluidInputs) { + if (inputFluid != null + && (inputFluid.getFluid() == fluidWater || inputFluid.getFluid() == fluidDistilledWater)) { + inputFluid.amount = 0; + } + } + + // If we don't have a lava filter, remove non-obsidian outputs + // so that output space for them is not required if void protection is on. + if (!findLavaFilter()) { + for (ItemStack outputItem : adjustedRecipe.mOutputs) { + if (outputItem != null && outputItem.getItem() != itemObsidian) { + outputItem.stackSize = 0; + } + } + } + return super.createParallelHelper(adjustedRecipe); + } + }; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + // super.checkProcessing() instantly sets efficiency to maximum, override this. + int efficiency = mEfficiency; + CheckRecipeResult result = super.checkProcessing(); + if (result.wasSuccessful()) { + mEfficiency = efficiency; + mEfficiencyIncrease = mMaxProgresstime * getEfficiencyIncrease(); + + // Adjust steam output based on efficiency. + if (mOutputFluids != null) { + for (FluidStack outputFluid : mOutputFluids) { + if (outputFluid != null + && (outputFluid.getFluid() == fluidSteam || outputFluid.getFluid() == fluidSHSteam)) { + + // Purely for display reasons, we don't actually make any EU. + if (outputFluid.getFluid() == fluidSteam) { + lEUt = outputFluid.amount / mMaxProgresstime / 2; + } else { + lEUt = outputFluid.amount / mMaxProgresstime; + } + + // Adjust steam output based on efficiency. + // TODO: This is not reflected in the GUI while the player has it open?? + if (mEfficiency < getMaxEfficiency(null)) { + outputFluid.amount = Math + .max(1, (outputFluid.amount * mEfficiency) / getMaxEfficiency(null)); + } + + // Consume water to run recipe. + if (!useWater(outputFluid.amount)) { + outputFluid.amount = 0; + lEUt = 0; + } + } + } + } + + // Remove non-obsidian outputs if we can't damage lava filter. + if (mOutputItems != null && mOutputItems.length > 0) { + if (!damageLavaFilter()) { + for (ItemStack outputItem : mOutputItems) { + if (outputItem != null && outputItem.getItem() != itemObsidian) { + outputItem.stackSize = 0; + } + } + } + } + } + return result; + } + + private boolean findLavaFilter() { + if (getControllerSlot() == null) { + for (var bus : mInputBusses) { + for (ItemStack stack : bus.mInventory) { + if (stack != null && stack.getItem() == itemLavaFilter) { + setGUIItemStack(stack); + return true; + } + } + } + return false; + } else { + return getControllerSlot().getItem() == itemLavaFilter; + } + } + + private boolean damageLavaFilter() { + if (!findLavaFilter()) return false; + if (getBaseMetaTileEntity().getRandomNumber(lavaFilterResilience) > 0) return true; + + ItemStack filter = getControllerSlot(); + if (filter.attemptDamageItem(1, getBaseMetaTileEntity().getWorld().rand)) { + mInventory[1] = null; + } + return true; + } + + private boolean useWater(int steamAmount) { + // Round up to not dupe decimal amounts of water. + int waterAmount = Math.floorDiv(steamAmount + GTValues.STEAM_PER_WATER - 1, GTValues.STEAM_PER_WATER); + if (depleteInput(FluidUtils.getWater(waterAmount)) || depleteInput(FluidUtils.getDistilledWater(waterAmount))) { + dryHeatCounter = 0; + return true; + } else { + // Add some leniency with explosions. + if (dryHeatCounter < dryHeatMaximum) { + ++dryHeatCounter; + } else { + GTLog.exp.println(this.mName + " was too hot and had no more Water!"); + explodeMultiblock(); // Generate crater + } + return false; + } + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + public int getEfficiencyIncrease() { + return 12; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiThermalBoiler; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Thermal Boiler Controller") + .addInfo("Converts Water & Heat into Steam") + .addInfo("Filters raw materials from lava") + .addInfo("Explodes if water is not supplied") + .addInfo("Consult user manual for more information") + .addPollutionAmount(getPollutionPerSecond(null)) + .beginStructureBlock(3, 3, 3, true) + .addController("Front Center") + .addCasingInfoMin("Thermal Containment Casings", 10, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .addOutputHatch("Any Casing", 1) + .addMaintenanceHatch("Any Casing", 1) + .addMufflerHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAThermalBoilerActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAThermalBoiler; + } + + @Override + protected int getCasingTextureId() { + return TAE.GTPP_INDEX(1); + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTEThermalBoiler.class) + .atLeast(InputBus, OutputBus, InputHatch, OutputHatch, Maintenance, Muffler) + .casingIndex(TAE.getIndexFromPage(0, 1)) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 11)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 10 && checkHatch(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTETreeFarm.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTETreeFarm.java new file mode 100644 index 0000000000..6f8dd28c03 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/MTETreeFarm.java @@ -0,0 +1,823 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static gregtech.common.items.IDMetaTool01.BRANCHCUTTER; +import static gregtech.common.items.IDMetaTool01.BUZZSAW_HV; +import static gregtech.common.items.IDMetaTool01.BUZZSAW_LV; +import static gregtech.common.items.IDMetaTool01.BUZZSAW_MV; +import static gregtech.common.items.IDMetaTool01.CHAINSAW_HV; +import static gregtech.common.items.IDMetaTool01.CHAINSAW_LV; +import static gregtech.common.items.IDMetaTool01.CHAINSAW_MV; +import static gregtech.common.items.IDMetaTool01.KNIFE; +import static gregtech.common.items.IDMetaTool01.POCKET_BRANCHCUTTER; +import static gregtech.common.items.IDMetaTool01.POCKET_KNIFE; +import static gregtech.common.items.IDMetaTool01.POCKET_MULTITOOL; +import static gregtech.common.items.IDMetaTool01.POCKET_SAW; +import static gregtech.common.items.IDMetaTool01.POCKET_WIRECUTTER; +import static gregtech.common.items.IDMetaTool01.SAW; +import static gregtech.common.items.IDMetaTool01.WIRECUTTER; +import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase.GTPPHatchElement.TTEnergy; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.HashMap; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.init.Items; +import net.minecraft.item.Item; +import net.minecraft.item.ItemShears; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import forestry.api.arboriculture.IToolGrafter; +import forestry.api.arboriculture.ITree; +import forestry.api.arboriculture.TreeManager; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Mods; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.VoidProtectionHelper; +import gregtech.common.items.IDMetaTool01; +import gregtech.common.items.MetaGeneratedTool01; +import gregtech.common.tileentities.machines.MTEHatchInputBusME; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechTools; +import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoaderTreeFarm; + +public class MTETreeFarm extends GTPPMultiBlockBase implements ISurvivalConstructable { + + public static int CASING_TEXTURE_ID; + private static final int TICKS_PER_OPERATION = 100; + private static final int TOOL_DAMAGE_PER_OPERATION = 1; + private static final int TOOL_CHARGE_PER_OPERATION = 32; + + private int mCasing; + public static String mCasingName = "Sterile Farm Casing"; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + public MTETreeFarm(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + CASING_TEXTURE_ID = TAE.getIndexFromPage(1, 15); + } + + public MTETreeFarm(final String aName) { + super(aName); + CASING_TEXTURE_ID = TAE.getIndexFromPage(1, 15); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTETreeFarm(this.mName); + } + + @Override + public String getMachineType() { + return "Tree Farm"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller block for the Tree Growth Simulator") + .addInfo("Farms and harvests trees using EU") + .addInfo("Place a sapling in the controller slot") + .addInfo("Place a tool in an input bus") + .addInfo("Different tools are required for different outputs") + .addInfo("Advanced tools multiply output amount") + .addInfo(" Logs: Saw (1x), Buzzsaw (2x), Chainsaw (4x)") + .addInfo(" Saplings: Branch Cutter (1x), Grafter (3x)") + .addInfo(" Leaves: Shears (1x), Wire Cutter (2x), Automatic Snips (4x)") + .addInfo(" Fruit: Knife (1x)") + .addInfo("Multiple tools can be used at the same time") + .addSeparator() + .addInfo("Work time is fixed at 5 seconds") + .addInfo("Energy input tier multiplies output further") + .addInfo("Output multiplier is equal to: 2*tier^2 - 2*tier + 5") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(3, 3, 3, true) + .addController("Front center") + .addCasingInfoMin(mCasingName, 8, false) + .addInputBus("Any casing", 1) + .addStructureInfo( + EnumChatFormatting.YELLOW + "Stocking Input Busses and Crafting Input Busses/Buffers are not allowed!") + .addOutputBus("Any casing", 1) + .addEnergyHatch("Any casing", 1) + .addMaintenanceHatch("Any casing", 1) + .addMufflerHatch("Any casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCATreeFarmActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCATreeFarm; + } + + @Override + protected int getCasingTextureId() { + return CASING_TEXTURE_ID; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + return checkPiece(mName, 1, 1, 0) && mCasing >= 8 && checkHatch(); + } + + @Override + public boolean addInputBusToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + // Tools from a stocking inout bus can not be damaged, this would cause an infinite durability exploit. + // Therefore disallow ME input bus. + if (aTileEntity == null) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchInputBusME) return false; + return super.addInputBusToMachineList(aTileEntity, aBaseCasingIndex); + } + + @Override + public boolean supportsCraftingMEBuffer() { + return false; + } + + @Override + public int getMaxParallelRecipes() { + return 1; + } + + @Override + public boolean supportsBatchMode() { + // Batch mode would not do anything, processing time is fixed at 100 ticks. + return false; + } + + @Override + public boolean isBatchModeEnabled() { + return false; + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiTreeFarm; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "C~C", "C-C", "CCC" }, { "CCC", "CCC", "CCC" }, })) + .addElement( + 'C', + buildHatchAdder(MTETreeFarm.class) + .atLeast( + InputHatch, + OutputHatch, + InputBus, + OutputBus, + Maintenance, + Energy.or(TTEnergy), + Muffler) + .casingIndex(CASING_TEXTURE_ID) + .dot(1) + .buildAndChain(onElementPass(x -> ++x.mCasing, ofBlock(ModBlocks.blockCasings2Misc, 15)))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 1, 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 1, 1, 0, elementBudget, env, false, true); + } + + /* Processing logic. */ + + @Override + public boolean isCorrectMachinePart(final ItemStack aStack) { + if (aStack == null) return false; + if (isValidSapling(aStack)) return true; + /* + * In previous versions, a saw used to go in the controller slot. We do not want an update to stop processing of + * a machine set up like this. Instead, a sapling is placed in this slot at the start of the next operation. + */ + if (aStack.getItem() instanceof MetaGeneratedTool01) return true; + return false; + } + + @Override + public RecipeMap getRecipeMap() { + // Only for NEI, not used in processing logic. + return GTPPRecipeMaps.treeGrowthSimulatorFakeRecipes; + } + + /** + * Valid processing modes (types of output) for the Tree Growth Simulator. + */ + public enum Mode { + LOG, + SAPLING, + LEAVES, + FRUIT + } + + /** + * Edit this to change relative yields for different modes. For example, logs are output at 5 times the rate of + * saplings. + */ + private static final EnumMap modeMultiplier = new EnumMap<>(Mode.class); + static { + modeMultiplier.put(Mode.LOG, 5); + modeMultiplier.put(Mode.SAPLING, 1); + modeMultiplier.put(Mode.LEAVES, 2); + modeMultiplier.put(Mode.FRUIT, 1); + } + + /** + * Return the output multiplier for a given power tier. + * + * @param tier Power tier the machine runs on. + * @return Factor to multiply all outputs by. + */ + private static int getTierMultiplier(int tier) { + /* + * Where does this formula come from? [12:57 AM] boubou_19: i did. Basically Pandoro measured the output of a + * WA-ed farming station for each tier of WA, then i computed the Lagrange interpolating polynomial of his + * dataset, which gave this + */ + return (2 * (tier * tier)) - (2 * tier) + 5; + } + + /** + * Key of this map is the registry name of the sapling, followed by ":", and the sapling's metadata value. + *

+ * The value of the map is a list of products by {@link Mode}. Products for some modes can be null if the tree does + * not produce anything in that mode (for example, it has no fruit). + */ + public static final HashMap> treeProductsMap = new HashMap<>(); + + @Override + public ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Override + @Nonnull + public CheckRecipeResult process() { + if (inputItems == null) { + inputItems = new ItemStack[0]; + } + if (inputFluids == null) { + inputFluids = new FluidStack[0]; + } + + ItemStack sapling = findSapling(); + if (sapling == null) return SimpleCheckRecipeResult.ofFailure("no_sapling"); + + EnumMap outputPerMode = getOutputsForSapling(sapling); + if (outputPerMode == null) { + // This should usually not be possible, outputs for all valid saplings should be defined. + Logger.INFO("No output found for sapling: " + sapling.getDisplayName()); + return SimpleCheckRecipeResult.ofFailure("no_output_for_sapling"); + } + + int tier = Math.max(1, GTUtility.getTier(availableVoltage * availableAmperage)); + int tierMultiplier = getTierMultiplier(tier); + + List outputs = new ArrayList<>(); + for (Mode mode : Mode.values()) { + ItemStack output = outputPerMode.get(mode); + if (output == null) continue; // This sapling has no output in this mode. + + // Find a tool to use in this mode. + int toolMultiplier = useToolForMode(mode, false); + if (toolMultiplier < 0) continue; // No valid tool for this mode found. + + // Increase output by the relevant multipliers. + ItemStack out = output.copy(); + out.stackSize *= tierMultiplier * modeMultiplier.get(mode) * toolMultiplier; + outputs.add(out); + } + + if (outputs.isEmpty()) { + // No outputs can be produced using the tools we have available. + return SimpleCheckRecipeResult.ofFailure("no_tools"); + } + + outputItems = outputs.toArray(new ItemStack[0]); + + VoidProtectionHelper voidProtection = new VoidProtectionHelper().setMachine(machine) + .setItemOutputs(outputItems) + .build(); + if (voidProtection.isItemFull()) { + return CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; + } + + duration = TICKS_PER_OPERATION; + calculatedEut = GTValues.VP[tier]; + + for (Mode mode : Mode.values()) { + if (outputPerMode.get(mode) != null) { + useToolForMode(mode, true); + } + } + + return SimpleCheckRecipeResult.ofSuccess("growing_trees"); + } + }; + } + + /** + * Attempts to find a tool appropriate for the given mode, and damage/discharge it by one use. + * + * @param mode The mode to use. This specifies which tools are valid. + * @param shouldDamage if true, then the tool will have reduced durability/charge + */ + + private int useToolForMode(Mode mode, boolean shouldDamage) { + final ArrayList inputs = getStoredInputs(); + final int inputsSize = inputs.size(); + for (int i = inputsSize - 1; i >= 0; i--) { + ItemStack stack = inputs.get(i); + + int toolMultiplier = getToolMultiplier(stack, mode); + if (toolMultiplier < 0) { + continue; + } + boolean canDamage = shouldDamage + ? GTModHandler.damageOrDechargeItem(stack, TOOL_DAMAGE_PER_OPERATION, TOOL_CHARGE_PER_OPERATION, null) + : GTModHandler.damageOrDechargeItem(stack, 0, 0, null); + if (shouldDamage) { + if (!canDamage || GTModHandler.isElectricItem(stack) + && !GTModHandler.canUseElectricItem(stack, TOOL_CHARGE_PER_OPERATION)) { + depleteInput(stack); + addOutput(stack); + } + } + if (canDamage) { + return toolMultiplier; + } + } + return -1; + } + + /** + * Calculate output multiplier for a given tool and mode. + * + * @param toolStack The tool to use. + * @param mode The mode to use. + * @return Output multiplier for the given tool used in the given mode. If the tool is not appropriate for this + * mode, returns -1. + */ + public static int getToolMultiplier(ItemStack toolStack, Mode mode) { + Item tool = toolStack.getItem(); + int damage = toolStack.getItemDamage(); + switch (mode) { + case LOG: + if (tool instanceof MetaGeneratedTool01) { + + if (damage == SAW.ID || damage == POCKET_SAW.ID || damage == POCKET_MULTITOOL.ID) { + return 1; + } + + if (damage == BUZZSAW_LV.ID || damage == BUZZSAW_MV.ID || damage == BUZZSAW_HV.ID) { + return 2; + } + + if (damage == CHAINSAW_LV.ID || damage == CHAINSAW_MV.ID || damage == CHAINSAW_HV.ID) { + return 4; + } + } + break; + + case SAPLING: + if (tool instanceof MetaGeneratedTool01 + && (damage == BRANCHCUTTER.ID || damage == POCKET_BRANCHCUTTER.ID + || damage == POCKET_MULTITOOL.ID)) { + return 1; + } + if (tool instanceof IToolGrafter && tool.isDamageable()) { + return 3; + } + break; + + case LEAVES: + // Do not allow unbreakable tools. Operation should have a running cost. + if (tool instanceof ItemShears && tool.isDamageable()) { + return 1; + } + if (tool instanceof MetaGeneratedTool01) { + if (damage == POCKET_MULTITOOL.ID) { + return 1; + } + if (damage == WIRECUTTER.ID || damage == POCKET_WIRECUTTER.ID) { + return 2; + } + } + if (tool instanceof MetaGeneratedGregtechTools) { + if (toolStack.getItemDamage() == MetaGeneratedGregtechTools.ELECTRIC_SNIPS) { + return 4; + } + } + break; + + case FRUIT: + if (tool instanceof MetaGeneratedTool01 + && (damage == KNIFE.ID || damage == POCKET_KNIFE.ID || damage == POCKET_MULTITOOL.ID)) { + return 1; + } + break; + } + + // No valid tool was found. + return -1; + } + + /* Handling saplings. */ + + /** + * Finds a valid sapling from input buses, and places it into the controller slot. + * + * @return The sapling that was found (now in the controller slot). + */ + private ItemStack findSapling() { + ItemStack controllerSlot = getControllerSlot(); + + if (isValidSapling(controllerSlot)) { + return controllerSlot; + } + + if (controllerSlot != null) { + // Non-sapling item in controller slot. This could be a saw from an older version of the TGS. + // We first try to swap it with a sapling from an input bus to not interrupt existing setups. + if (!legacyToolSwap()) { + // Swap failed, output whatever is blocking the slot. + addOutput(controllerSlot); + mInventory[1] = null; + } + } + + // Here controller slot is empty, find a valid sapling to use. + for (ItemStack stack : getStoredInputs()) { + if (isValidSapling(stack)) { + mInventory[1] = stack.splitStack(1); + return mInventory[1]; + } + } + + // No saplings were found. + return null; + } + + /** + * In previous versions, the saw used to be placed in the controller slot and the sapling into an input bus. We do + * not want to break existing setups like this, so we attempt to swap the two if possible. + * + * @return True on success, false otherwise. + */ + private boolean legacyToolSwap() { + ItemStack controllerSlot = getControllerSlot(); + if (controllerSlot == null || !(controllerSlot.getItem() instanceof MetaGeneratedTool01)) return false; + + for (MTEHatchInputBus inputBus : filterValidMTEs(mInputBusses)) { + ItemStack[] inventory = inputBus.getRealInventory(); + for (int slot = 0; slot < inventory.length; ++slot) { + if (isValidSapling(inventory[slot])) { + // Do the swap. + mInventory[1] = inventory[slot]; + inventory[slot] = controllerSlot; + inputBus.updateSlots(); + return true; + } + } + } + return false; + } + + /** + * Check if an ItemStack is a sapling that can be farmed. + * + * @param stack An ItemStack. + * @return True if stack is a valid sapling that can be farmed. + */ + private boolean isValidSapling(ItemStack stack) { + if (stack == null) return false; + String registryName = Item.itemRegistry.getNameForObject(stack.getItem()); + return treeProductsMap.containsKey(registryName + ":" + stack.getItemDamage()) + || "Forestry:sapling".equals(registryName); + } + + /** + * Get a list of possible outputs for a sapling, for each mode. This is either recovered from + * {@link #treeProductsMap}, or generated from stats of Forestry saplings. + * + * @param sapling A sapling to farm. + * @return A map of outputs for each mode. Outputs for some modes might be null. + */ + private static EnumMap getOutputsForSapling(ItemStack sapling) { + String registryName = Item.itemRegistry.getNameForObject(sapling.getItem()); + if ("Forestry:sapling".equals(registryName)) { + return getOutputsForForestrySapling(sapling); + } else { + return treeProductsMap.get(registryName + ":" + sapling.getItemDamage()); + } + } + + /** + * Calculate outputs for Forestry saplings. Default amounts stored in {@link #treeProductsMap} are adjusted based + * the genetics of the input sapling. + *

+ * Relevant stats: + *

    + *
  • height, girth: Affects log output.
  • + *
  • fertility (called Saplings in game): Affects sapling output.
  • + *
  • yield: Affects fruit output.
  • + *
+ * See {@link forestry.core.genetics.alleles.EnumAllele} for detailed numeric values for each allele. + * + * @param sapling A sapling to farm. Must be a Forestry sapling with a valid genome. + * @return A map of outputs for each mode. Outputs for some modes might be null. + */ + private static EnumMap getOutputsForForestrySapling(ItemStack sapling) { + ITree tree = TreeManager.treeRoot.getMember(sapling); + if (tree == null) return null; + + String speciesUUID = tree.getIdent(); + + EnumMap defaultMap = treeProductsMap.get("Forestry:sapling:" + speciesUUID); + if (defaultMap == null) return null; + + // We need to make a new map so that we don't modify the stored amounts of outputs. + EnumMap adjustedMap = new EnumMap<>(Mode.class); + + ItemStack log = defaultMap.get(Mode.LOG); + if (log != null) { + double height = Math.max( + 3 * (tree.getGenome() + .getHeight() - 1), + 0) + 1; + double girth = tree.getGenome() + .getGirth(); + + log = log.copy(); + log.stackSize = (int) (log.stackSize * height * girth); + adjustedMap.put(Mode.LOG, log); + } + + ItemStack saplingOut = defaultMap.get(Mode.SAPLING); + if (saplingOut != null) { + // Lowest = 0.01 ... Average = 0.05 ... Highest = 0.3 + double fertility = tree.getGenome() + .getFertility() * 10; + + // Return a copy of the *input* sapling, retaining its genetics. + int stackSize = Math.max(1, (int) (saplingOut.stackSize * fertility)); + saplingOut = sapling.copy(); + saplingOut.stackSize = stackSize; + adjustedMap.put(Mode.SAPLING, saplingOut); + } + + ItemStack leaves = defaultMap.get(Mode.LEAVES); + if (leaves != null) { + adjustedMap.put(Mode.LEAVES, leaves.copy()); + } + + ItemStack fruit = defaultMap.get(Mode.FRUIT); + if (fruit != null) { + // Lowest = 0.025 ... Average = 0.2 ... Highest = 0.4 + double yield = tree.getGenome() + .getYield() * 10; + + fruit = fruit.copy(); + fruit.stackSize = (int) (fruit.stackSize * yield); + adjustedMap.put(Mode.FRUIT, fruit); + } + + return adjustedMap; + } + + /* Recipe registration. */ + + /** + * Registers outputs for a sapling. This method assumes that output in mode SAPLING is the same as the input + * sapling. Output amount is further modified by mode, machine tier, and tool used. Recipes are added in + * {@link RecipeLoaderTreeFarm}. + * + * @param sapling The input sapling to farm, and also the output in mode SAPLING. + * @param log ItemStack to output in mode LOG. + * @param leaves ItemStack to output in mode LEAVES. + * @param fruit ItemStack to output in mode FRUIT. + */ + public static void registerTreeProducts(ItemStack sapling, ItemStack log, ItemStack leaves, ItemStack fruit) { + registerTreeProducts(sapling, log, sapling, leaves, fruit); + } + + /** + * Registers outputs for a sapling. Output amount is further modified by mode, machine tier, and tool used. Recipes + * are added in {@link RecipeLoaderTreeFarm}. + * + * @param saplingIn The input sapling to farm. + * @param log ItemStack to output in mode LOG. + * @param saplingOut ItemStack to output in mode SAPLING. + * @param leaves ItemStack to output in mode LEAVES. + * @param fruit ItemStack to output in mode FRUIT. + */ + public static void registerTreeProducts(ItemStack saplingIn, ItemStack log, ItemStack saplingOut, ItemStack leaves, + ItemStack fruit) { + String key = Item.itemRegistry.getNameForObject(saplingIn.getItem()) + ":" + saplingIn.getItemDamage(); + EnumMap map = new EnumMap<>(Mode.class); + if (log != null) map.put(Mode.LOG, log); + if (saplingOut != null) map.put(Mode.SAPLING, saplingOut); + if (leaves != null) map.put(Mode.LEAVES, leaves); + if (fruit != null) map.put(Mode.FRUIT, fruit); + treeProductsMap.put(key, map); + + if (!addFakeRecipeToNEI(saplingIn, log, saplingOut, leaves, fruit)) { + Logger.INFO("Registering NEI fake recipe for " + key + " failed!"); + } + } + + /** + * For Forestry trees, the output amounts depend on the genetics of the sapling. Here we register only the types of + * items to output. In {@link #getOutputsForForestrySapling(ItemStack)} these outputs are then multiplied according + * to the stats of the real sapling that is in the controller slot. + */ + public static void registerForestryTree(String speciesUID, ItemStack sapling, ItemStack log, ItemStack leaves, + ItemStack fruit) { + String key = "Forestry:sapling:" + speciesUID; + EnumMap map = new EnumMap<>(Mode.class); + map.put(Mode.LOG, log); + map.put(Mode.SAPLING, sapling); + map.put(Mode.LEAVES, leaves); + map.put(Mode.FRUIT, fruit); + treeProductsMap.put(key, map); + + // In the NEI recipe we want to display outputs adjusted for the default genetics of this tree type. + // To do this we use the same method as when calculating real outputs. + map = getOutputsForForestrySapling(sapling); + if (map == null) { + Logger.INFO("Could not create Forestry tree output map for " + speciesUID); + return; + } + addFakeRecipeToNEI( + sapling, + map.get(Mode.LOG), + map.get(Mode.SAPLING), + map.get(Mode.LEAVES), + map.get(Mode.FRUIT)); + } + + /** + * This array is used to get the rotating display of items in NEI showing all possible tools for a given mode. + */ + private static final ItemStack[][] altToolsForNEI; + static { + MetaGeneratedTool toolInstance = MetaGeneratedTool01.INSTANCE; + altToolsForNEI = new ItemStack[][] { + // Mode.LOG + { toolInstance.getToolWithStats(SAW.ID, 1, null, null, null), + toolInstance.getToolWithStats(POCKET_SAW.ID, 1, null, null, null), + toolInstance.getToolWithStats(IDMetaTool01.BUZZSAW_LV.ID, 1, null, null, null), + toolInstance.getToolWithStats(CHAINSAW_LV.ID, 1, null, null, null), + toolInstance.getToolWithStats(IDMetaTool01.BUZZSAW_MV.ID, 1, null, null, null), + toolInstance.getToolWithStats(CHAINSAW_MV.ID, 1, null, null, null), + toolInstance.getToolWithStats(IDMetaTool01.BUZZSAW_HV.ID, 1, null, null, null), + toolInstance.getToolWithStats(CHAINSAW_HV.ID, 1, null, null, null), }, + // Mode.SAPLING + { toolInstance.getToolWithStats(IDMetaTool01.BRANCHCUTTER.ID, 1, null, null, null), + toolInstance.getToolWithStats(IDMetaTool01.POCKET_BRANCHCUTTER.ID, 1, null, null, null), + GTModHandler.getModItem(Mods.Forestry.ID, "grafter", 1, 0), }, + // Mode.LEAVES + { new ItemStack(Items.shears), + toolInstance.getToolWithStats(IDMetaTool01.WIRECUTTER.ID, 1, null, null, null), + toolInstance.getToolWithStats(IDMetaTool01.POCKET_WIRECUTTER.ID, 1, null, null, null), + MetaGeneratedGregtechTools.getInstance() + .getToolWithStats(MetaGeneratedGregtechTools.ELECTRIC_SNIPS, 1, null, null, null), }, + // Mode.FRUIT + { toolInstance.getToolWithStats(IDMetaTool01.KNIFE.ID, 1, null, null, null), + toolInstance.getToolWithStats(IDMetaTool01.POCKET_KNIFE.ID, 1, null, null, null), } }; + } + + /** + * Add a recipe for this tree to NEI. These recipes are only used in NEI, they are never used for processing logic. + * + * @return True if the recipe was added successfully. + */ + public static boolean addFakeRecipeToNEI(ItemStack saplingIn, ItemStack log, ItemStack saplingOut, ItemStack leaves, + ItemStack fruit) { + int recipeCount = GTPPRecipeMaps.treeGrowthSimulatorFakeRecipes.getAllRecipes() + .size(); + + // Sapling goes into the "special" slot. + ItemStack specialStack = saplingIn.copy(); + specialStack.stackSize = 0; + + /* + * Calculate the correct amount of outputs for each mode. The amount displayed in NEI should take into account + * the mode multiplier, but not tool/tier multipliers as those can change dynamically. If the sapling has an + * output in this mode, also add the tools usable for this mode as inputs. + */ + ItemStack[][] inputStacks = new ItemStack[Mode.values().length][]; + ItemStack[] outputStacks = new ItemStack[Mode.values().length]; + + for (Mode mode : Mode.values()) { + ItemStack output = switch (mode) { + case LOG -> log; + case SAPLING -> saplingOut; + case LEAVES -> leaves; + case FRUIT -> fruit; + }; + if (output != null) { + int ordinal = mode.ordinal(); + inputStacks[ordinal] = altToolsForNEI[ordinal]; + outputStacks[ordinal] = output.copy(); + outputStacks[ordinal].stackSize *= modeMultiplier.get(mode); + } + } + + Logger.INFO( + "Adding Tree Growth Simulation NEI recipe for " + specialStack.getDisplayName() + + " -> " + + ItemUtils.getArrayStackNames(outputStacks)); + + GTPPRecipeMaps.treeGrowthSimulatorFakeRecipes.addFakeRecipe( + false, + new GTRecipe.GTRecipe_WithAlt( + false, + null, // All inputs are taken from aAtl argument. + outputStacks, + specialStack, + null, + null, + null, + TICKS_PER_OPERATION, + 0, + recipeCount, // special value, also sorts recipes correctly in order of addition. + inputStacks)); + + return GTPPRecipeMaps.treeGrowthSimulatorFakeRecipes.getAllRecipes() + .size() > recipeCount; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/GregtechMTE_AlgaePondBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/GregtechMTE_AlgaePondBase.java deleted file mode 100644 index 7e5200e16c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/GregtechMTE_AlgaePondBase.java +++ /dev/null @@ -1,393 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.algae; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; - -import java.util.stream.Stream; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.github.technus.tectech.thing.casing.TT_Container_Casings; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.TAE; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_StreamUtil; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.item.chemistry.AgriculturalChem; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoader_AlgaeFarm; -import ic2.core.init.BlocksItems; -import ic2.core.init.InternalName; - -public class GregtechMTE_AlgaePondBase extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - private int mLevel = -1; - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - private int checkMeta; - private static final Class cofhWater; - - static { - cofhWater = ReflectionUtils.getClass("cofh.asmhooks.block.BlockWater"); - } - - public GregtechMTE_AlgaePondBase(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMTE_AlgaePondBase(final String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMTE_AlgaePondBase(this.mName); - } - - @Override - public String getMachineType() { - return "Algae Pond"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Grows Algae!") - .addInfo("Controller Block for the Algae Farm") - .addInfo("Provide compost to boost production by one tier") - .addInfo("Does not require power or maintenance") - .addInfo("All Machine Casings must be the same tier, this dictates machine speed.") - .addInfo("Requires one Input Hatch that matches the tier of the Casings") - .addInfo("Fill Input Hatch with Water to fill the inside of the multiblock.") - .addPollutionAmount(getPollutionPerSecond(null)) - .addSeparator() - .beginStructureBlock(9, 3, 9, true) - .addController("Front Center") - .addCasingInfoMin("Machine Casings", 64, true) - .addCasingInfoMin("Sterile Farm Casings", 64, false) - .addInputBus("Any Casing", 1) - .addOutputBus("Any Casing", 1) - .addInputHatch("Any Casing", 1) - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - public void setMeta(int meta) { - checkMeta = meta; - } - - public int getMeta() { - return checkMeta; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { - { "XXXXXXXXX", "X X", "X X", "X X", "X X", "X X", "X X", - "X X", "XXXXXXXXX" }, - { "XXXXXXXXX", "X X", "X X", "X X", "X X", "X X", "X X", - "X X", "XXXXXXXXX" }, - { "CCCC~CCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", - "CCCCCCCCC", "CCCCCCCCC" }, })) - .addElement( - 'C', - ofChain( - buildHatchAdder(GregtechMTE_AlgaePondBase.class).atLeast(InputHatch, InputBus, OutputBus) - .casingIndex(TAE.getIndexFromPage(1, 15)) - .dot(1) - .build(), - onElementPass( - x -> ++x.mCasing, - addTieredBlock( - GregTech_API.sBlockCasings1, - GregtechMTE_AlgaePondBase::setMeta, - GregtechMTE_AlgaePondBase::getMeta, - 10)), - onElementPass( - x -> ++x.mCasing, - addTieredBlock( - TT_Container_Casings.sBlockCasingsNH, - GregtechMTE_AlgaePondBase::setMeta, - GregtechMTE_AlgaePondBase::getMeta, - 10, - 15)))) - .addElement('X', ofBlock(ModBlocks.blockCasings2Misc, 15)) - .build(); - } - return STRUCTURE_DEFINITION; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 4, 2, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 4, 2, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - mLevel = 0; - checkMeta = 0; - - if (checkPiece(mName, 4, 2, 0) && mCasing >= 64 - && checkMeta > 0 - && mInputHatches.size() >= 1 - && mOutputBusses.size() >= 1) { - mLevel = checkMeta - 1; - for (GT_MetaTileEntity_Hatch_Input inputHatch : mInputHatches) { - if (inputHatch.mTier < mLevel) { - return false; - } - } - return true; - } - return false; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCDAlgaePondBaseActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCDAlgaePondBase; - } - - @Override - protected int getCasingTextureId() { - int aID = TAE.getIndexFromPage(1, 15); - if (mLevel > -1) { - aID = mLevel; - } - return aID; - } - - @Override - public int getMaxParallelRecipes() { - return 2; - } - - public boolean checkForWater() { - - // Get Facing direction - IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); - int mDirectionX = aBaseMetaTileEntity.getBackFacing().offsetX; - int mCurrentDirectionX; - int mCurrentDirectionZ; - int mOffsetX_Lower = 0; - int mOffsetX_Upper = 0; - int mOffsetZ_Lower = 0; - int mOffsetZ_Upper = 0; - - mCurrentDirectionX = 4; - mCurrentDirectionZ = 4; - - mOffsetX_Lower = -4; - mOffsetX_Upper = 4; - mOffsetZ_Lower = -4; - mOffsetZ_Upper = 4; - - // if (aBaseMetaTileEntity.fac) - - final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX * mCurrentDirectionX; - final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ * mCurrentDirectionZ; - - int tAmount = 0; - for (int i = mOffsetX_Lower + 1; i <= mOffsetX_Upper - 1; ++i) { - for (int j = mOffsetZ_Lower + 1; j <= mOffsetZ_Upper - 1; ++j) { - for (int h = 0; h < 2; h++) { - Block tBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j); - byte tMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir + i, h, zDir + j); - if (isNotStaticWater(tBlock, tMeta)) { - if (this.getStoredFluids() != null) { - for (FluidStack stored : this.getStoredFluids()) { - if (stored.isFluidEqual(FluidUtils.getFluidStack("water", 1))) { - if (stored.amount >= 1000) { - // Utils.LOG_WARNING("Going to try swap an air block for water from inut bus."); - stored.amount -= 1000; - Block fluidUsed = Blocks.water; - aBaseMetaTileEntity.getWorld() - .setBlock( - aBaseMetaTileEntity.getXCoord() + xDir + i, - aBaseMetaTileEntity.getYCoord() + h, - aBaseMetaTileEntity.getZCoord() + zDir + j, - fluidUsed); - } - } - } - } - } - tBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j); - if (tBlock == Blocks.water || tBlock == Blocks.flowing_water) { - ++tAmount; - // Logger.INFO("Found Water"); - } - } - } - } - - boolean isValidWater = tAmount >= 49; - - if (isValidWater) { - Logger.INFO("Filled structure."); - return true; - } else { - return false; - } - } - - private boolean isNotStaticWater(Block block, byte meta) { - return block == Blocks.air || block == Blocks.flowing_water - || block == BlocksItems.getFluidBlock(InternalName.fluidDistilledWater) - || (cofhWater != null && cofhWater.isAssignableFrom(block.getClass()) && meta != 0); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerSecond(final ItemStack aStack) { - return CORE.ConfigSwitches.pollutionPerSecondMultiAlgaePond; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - // Silly Client Syncing - if (aBaseMetaTileEntity.isClientSide()) { - this.mLevel = getCasingTier(); - } - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @Nonnull - @Override - protected Stream findRecipeMatches(@Nullable RecipeMap map) { - return GT_StreamUtil - .ofNullable(RecipeLoader_AlgaeFarm.getTieredRecipeFromCache(mLevel, isUsingCompost(inputItems))); - } - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (!checkForWater()) { - return SimpleCheckRecipeResult.ofFailure("no_water"); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - }.setEuModifier(0F) - .setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - private boolean isUsingCompost(ItemStack[] aItemInputs) { - ItemStack aCompost = ItemUtils.getSimpleStack(AgriculturalChem.mCompost, 1); - for (ItemStack i : aItemInputs) { - if (GT_Utility.areStacksEqual(aCompost, i)) { - if (i.stackSize >= RecipeLoader_AlgaeFarm.compostForTier(mLevel)) { - return true; - } - } - } - return false; - } - - private int getCasingTier() { - if (this.getBaseMetaTileEntity() - .getWorld() == null) { - return 0; - } - try { - Block aInitStructureCheck; - int aInitStructureCheckMeta; - IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); - int xDir = aBaseMetaTileEntity.getBackFacing().offsetX; - int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ; - aInitStructureCheck = aBaseMetaTileEntity.getBlockOffset(xDir, -1, zDir); - aInitStructureCheckMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir, -1, zDir); - if (aInitStructureCheck == GregTech_API.sBlockCasings1 - || aInitStructureCheck == TT_Container_Casings.sBlockCasingsNH) { - return aInitStructureCheckMeta; - } - return 0; - } catch (Throwable t) { - t.printStackTrace(); - return 0; - } - } - - @Override - public boolean getDefaultHasMaintenanceChecks() { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/MTEAlgaePondBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/MTEAlgaePondBase.java new file mode 100644 index 0000000000..1223158f31 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/algae/MTEAlgaePondBase.java @@ -0,0 +1,392 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.algae; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.stream.Stream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.TAE; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTStreamUtil; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.item.chemistry.AgriculturalChem; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.loaders.recipe.RecipeLoaderAlgaeFarm; +import ic2.core.init.BlocksItems; +import ic2.core.init.InternalName; +import tectech.thing.casing.TTCasingsContainer; + +public class MTEAlgaePondBase extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mLevel = -1; + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + private int checkMeta; + private static final Class cofhWater; + + static { + cofhWater = ReflectionUtils.getClass("cofh.asmhooks.block.BlockWater"); + } + + public MTEAlgaePondBase(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEAlgaePondBase(final String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEAlgaePondBase(this.mName); + } + + @Override + public String getMachineType() { + return "Algae Pond"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Grows Algae!") + .addInfo("Controller Block for the Algae Farm") + .addInfo("Provide compost to boost production by one tier") + .addInfo("Does not require power or maintenance") + .addInfo("All Machine Casings must be the same tier, this dictates machine speed.") + .addInfo("Requires one Input Hatch that matches the tier of the Casings") + .addInfo("Fill Input Hatch with Water to fill the inside of the multiblock.") + .addPollutionAmount(getPollutionPerSecond(null)) + .addSeparator() + .beginStructureBlock(9, 3, 9, true) + .addController("Front Center") + .addCasingInfoMin("Machine Casings", 64, true) + .addCasingInfoMin("Sterile Farm Casings", 64, false) + .addInputBus("Any Casing", 1) + .addOutputBus("Any Casing", 1) + .addInputHatch("Any Casing", 1) + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + public void setMeta(int meta) { + checkMeta = meta; + } + + public int getMeta() { + return checkMeta; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { + { "XXXXXXXXX", "X X", "X X", "X X", "X X", "X X", "X X", + "X X", "XXXXXXXXX" }, + { "XXXXXXXXX", "X X", "X X", "X X", "X X", "X X", "X X", + "X X", "XXXXXXXXX" }, + { "CCCC~CCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", "CCCCCCCCC", + "CCCCCCCCC", "CCCCCCCCC" }, })) + .addElement( + 'C', + ofChain( + buildHatchAdder(MTEAlgaePondBase.class).atLeast(InputHatch, InputBus, OutputBus) + .casingIndex(TAE.getIndexFromPage(1, 15)) + .dot(1) + .build(), + onElementPass( + x -> ++x.mCasing, + addTieredBlock( + GregTechAPI.sBlockCasings1, + MTEAlgaePondBase::setMeta, + MTEAlgaePondBase::getMeta, + 10)), + onElementPass( + x -> ++x.mCasing, + addTieredBlock( + TTCasingsContainer.sBlockCasingsNH, + MTEAlgaePondBase::setMeta, + MTEAlgaePondBase::getMeta, + 10, + 15)))) + .addElement('X', ofBlock(ModBlocks.blockCasings2Misc, 15)) + .build(); + } + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 4, 2, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 4, 2, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + mLevel = 0; + checkMeta = 0; + + if (checkPiece(mName, 4, 2, 0) && mCasing >= 64 + && checkMeta > 0 + && mInputHatches.size() >= 1 + && mOutputBusses.size() >= 1) { + mLevel = checkMeta - 1; + for (MTEHatchInput inputHatch : mInputHatches) { + if (inputHatch.mTier < mLevel) { + return false; + } + } + return true; + } + return false; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && !f.isVerticallyFliped(); + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCDAlgaePondBaseActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCDAlgaePondBase; + } + + @Override + protected int getCasingTextureId() { + int aID = TAE.getIndexFromPage(1, 15); + if (mLevel > -1) { + aID = mLevel; + } + return aID; + } + + @Override + public int getMaxParallelRecipes() { + return 2; + } + + public boolean checkForWater() { + + // Get Facing direction + IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); + int mDirectionX = aBaseMetaTileEntity.getBackFacing().offsetX; + int mCurrentDirectionX; + int mCurrentDirectionZ; + int mOffsetX_Lower = 0; + int mOffsetX_Upper = 0; + int mOffsetZ_Lower = 0; + int mOffsetZ_Upper = 0; + + mCurrentDirectionX = 4; + mCurrentDirectionZ = 4; + + mOffsetX_Lower = -4; + mOffsetX_Upper = 4; + mOffsetZ_Lower = -4; + mOffsetZ_Upper = 4; + + // if (aBaseMetaTileEntity.fac) + + final int xDir = aBaseMetaTileEntity.getBackFacing().offsetX * mCurrentDirectionX; + final int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ * mCurrentDirectionZ; + + int tAmount = 0; + for (int i = mOffsetX_Lower + 1; i <= mOffsetX_Upper - 1; ++i) { + for (int j = mOffsetZ_Lower + 1; j <= mOffsetZ_Upper - 1; ++j) { + for (int h = 0; h < 2; h++) { + Block tBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j); + byte tMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir + i, h, zDir + j); + if (isNotStaticWater(tBlock, tMeta)) { + if (this.getStoredFluids() != null) { + for (FluidStack stored : this.getStoredFluids()) { + if (stored.isFluidEqual(FluidUtils.getFluidStack("water", 1))) { + if (stored.amount >= 1000) { + // Utils.LOG_WARNING("Going to try swap an air block for water from inut bus."); + stored.amount -= 1000; + Block fluidUsed = Blocks.water; + aBaseMetaTileEntity.getWorld() + .setBlock( + aBaseMetaTileEntity.getXCoord() + xDir + i, + aBaseMetaTileEntity.getYCoord() + h, + aBaseMetaTileEntity.getZCoord() + zDir + j, + fluidUsed); + } + } + } + } + } + tBlock = aBaseMetaTileEntity.getBlockOffset(xDir + i, h, zDir + j); + if (tBlock == Blocks.water || tBlock == Blocks.flowing_water) { + ++tAmount; + // Logger.INFO("Found Water"); + } + } + } + } + + boolean isValidWater = tAmount >= 49; + + if (isValidWater) { + Logger.INFO("Filled structure."); + return true; + } else { + return false; + } + } + + private boolean isNotStaticWater(Block block, byte meta) { + return block == Blocks.air || block == Blocks.flowing_water + || block == BlocksItems.getFluidBlock(InternalName.fluidDistilledWater) + || (cofhWater != null && cofhWater.isAssignableFrom(block.getClass()) && meta != 0); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerSecond(final ItemStack aStack) { + return GTPPCore.ConfigSwitches.pollutionPerSecondMultiAlgaePond; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + // Silly Client Syncing + if (aBaseMetaTileEntity.isClientSide()) { + this.mLevel = getCasingTier(); + } + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected Stream findRecipeMatches(@Nullable RecipeMap map) { + return GTStreamUtil + .ofNullable(RecipeLoaderAlgaeFarm.getTieredRecipeFromCache(mLevel, isUsingCompost(inputItems))); + } + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (!checkForWater()) { + return SimpleCheckRecipeResult.ofFailure("no_water"); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + }.setEuModifier(0F) + .setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + private boolean isUsingCompost(ItemStack[] aItemInputs) { + ItemStack aCompost = ItemUtils.getSimpleStack(AgriculturalChem.mCompost, 1); + for (ItemStack i : aItemInputs) { + if (GTUtility.areStacksEqual(aCompost, i)) { + if (i.stackSize >= RecipeLoaderAlgaeFarm.compostForTier(mLevel)) { + return true; + } + } + } + return false; + } + + private int getCasingTier() { + if (this.getBaseMetaTileEntity() + .getWorld() == null) { + return 0; + } + try { + Block aInitStructureCheck; + int aInitStructureCheckMeta; + IGregTechTileEntity aBaseMetaTileEntity = this.getBaseMetaTileEntity(); + int xDir = aBaseMetaTileEntity.getBackFacing().offsetX; + int zDir = aBaseMetaTileEntity.getBackFacing().offsetZ; + aInitStructureCheck = aBaseMetaTileEntity.getBlockOffset(xDir, -1, zDir); + aInitStructureCheckMeta = aBaseMetaTileEntity.getMetaIDOffset(xDir, -1, zDir); + if (aInitStructureCheck == GregTechAPI.sBlockCasings1 + || aInitStructureCheck == TTCasingsContainer.sBlockCasingsNH) { + return aInitStructureCheckMeta; + } + return 0; + } catch (Throwable t) { + t.printStackTrace(); + return 0; + } + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/GregtechMTE_ChemicalPlant.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/GregtechMTE_ChemicalPlant.java deleted file mode 100644 index b359a3b831..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/GregtechMTE_ChemicalPlant.java +++ /dev/null @@ -1,676 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.chemplant; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.filterByMTETier; -import static gregtech.api.util.GT_StructureUtility.ofCoil; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElement; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureUtility; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.SoundResource; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.metatileentity.GregTechTileClientEvents; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.IDualInputHatch; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.api.objects.data.Triplet; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -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.base.GregtechMeta_MultiBlockBase; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.GT_MetaTileEntity_Hatch_Catalysts; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMTE_ChemicalPlant extends GregtechMeta_MultiBlockBase - implements ISurvivalConstructable { - - private int mSolidCasingTier = 0; - private int mMachineCasingTier = 0; - private int mPipeCasingTier = 0; - private int mCoilTier = 0; - private HeatingCoilLevel checkCoil; - private int[] checkCasing = new int[8]; - private int checkMachine; - private int checkPipe; - private int maxTierOfHatch; - private int mCasing; - private static IStructureDefinition STRUCTURE_DEFINITION = null; - - private final ArrayList mCatalystBuses = new ArrayList<>(); - - private static final HashMap> mTieredBlockRegistry = new HashMap<>(); - - public GregtechMTE_ChemicalPlant(final int aID, final String aName, final String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregtechMTE_ChemicalPlant(final String aName) { - super(aName); - } - - public static boolean registerMachineCasingForTier(int aTier, Block aBlock, int aMeta, int aCasingTextureID) { - Triplet aCasingData = new Triplet<>(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); - return true; - } - - 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); - } - - @Override - public String getMachineType() { - return "Chemical Plant"; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the Chemical Plant") - .addInfo("Heavy Industry, now right at your doorstep!") - .addInfo("Please read the user manual for more information on construction and usage") - .addSeparator() - .addController("Bottom Center") - .addStructureHint("Catalyst Housing", 1) - .addInputBus("Bottom Casing", 1) - .addOutputBus("Bottom Casing", 1) - .addInputHatch("Bottom Casing", 1) - .addOutputHatch("Bottom Casing", 1) - .addEnergyHatch("Bottom Casing", 1) - .addMaintenanceHatch("Bottom Casing", 1) - .addSubChannelUsage("casing", "metal machine casing") - .addSubChannelUsage("machine", "tier machine casing") - .addSubChannelUsage("coil", "heating coil blocks") - .addSubChannelUsage("pipe", "pipe casing blocks") - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - public void setMachineMeta(int meta) { - checkMachine = meta; - } - - public int getMachineMeta() { - return checkMachine; - } - - public void setPipeMeta(int meta) { - checkPipe = meta; - } - - public int getPipeMeta() { - return checkPipe; - } - - public void setCoilMeta(HeatingCoilLevel meta) { - checkCoil = meta; - } - - public HeatingCoilLevel getCoilMeta() { - return checkCoil; - } - - @Override - public IStructureDefinition getStructureDefinition() { - if (STRUCTURE_DEFINITION == null) { - IStructureElement allCasingsElement = withChannel( - "casing", - ofChain( - IntStream.range(0, 8) - .mapToObj(GregtechMTE_ChemicalPlant::ofSolidCasing) - .collect(Collectors.toList()))); - STRUCTURE_DEFINITION = StructureDefinition.builder() - .addShape( - mName, - transpose( - new String[][] { - { "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX" }, - { "X X", " MMMMM ", " MHHHM ", " MHHHM ", " MHHHM ", " MMMMM ", "X X" }, - { "X X", " ", " PPP ", " PPP ", " PPP ", " ", "X X" }, - { "X X", " ", " HHH ", " HHH ", " HHH ", " ", "X X" }, - { "X X", " ", " PPP ", " PPP ", " PPP ", " ", "X X" }, - { "X X", " MMMMM ", " MHHHM ", " MHHHM ", " MHHHM ", " MMMMM ", "X X" }, - { "CCC~CCC", "CMMMMMC", "CMMMMMC", "CMMMMMC", "CMMMMMC", "CMMMMMC", "CCCCCCC" }, })) - .addElement( - 'C', - ofChain( - buildHatchAdder(GregtechMTE_ChemicalPlant.class).atLeast(Maintenance) - .casingIndex(getCasingTextureID()) - .dot(1) - .build(), - buildHatchAdder(GregtechMTE_ChemicalPlant.class) - .atLeast(InputHatch, OutputHatch, InputBus, OutputBus) - .adder(GregtechMTE_ChemicalPlant::addChemicalPlantList) - .hatchItemFilterAnd( - (t, s) -> filterByMTETier( - Integer.MIN_VALUE, - s.stackSize >= 10 ? Integer.MAX_VALUE : s.stackSize)) - .casingIndex(getCasingTextureID()) - .dot(1) - .build(), - buildHatchAdder(GregtechMTE_ChemicalPlant.class) - .hatchClass(GT_MetaTileEntity_Hatch_Catalysts.class) - .shouldReject(t -> t.mCatalystBuses.size() >= 1) - .adder(GregtechMTE_ChemicalPlant::addChemicalPlantList) - .casingIndex(getCasingTextureID()) - .dot(1) - .build(), - allCasingsElement)) - .addElement('X', allCasingsElement) - .addElement( - 'M', - withChannel( - "machine", - addTieredBlock( - GregTech_API.sBlockCasings1, - GregtechMTE_ChemicalPlant::setMachineMeta, - GregtechMTE_ChemicalPlant::getMachineMeta, - 10))) - .addElement( - 'H', - withChannel( - "coil", - ofCoil(GregtechMTE_ChemicalPlant::setCoilMeta, GregtechMTE_ChemicalPlant::getCoilMeta))) - .addElement( - 'P', - withChannel( - "pipe", - addTieredBlock( - GregTech_API.sBlockCasings2, - GregtechMTE_ChemicalPlant::setPipeMeta, - GregtechMTE_ChemicalPlant::getPipeMeta, - 12, - 16))) - .build(); - } - return STRUCTURE_DEFINITION; - } - - private static IStructureElement ofSolidCasing(int aIndex) { - return new IStructureElement() { - - @Override - public boolean check(GregtechMTE_ChemicalPlant t, World world, int x, int y, int z) { - if (check(aIndex, world, x, y, z)) { - t.checkCasing[aIndex]++; - t.mCasing++; - return true; - } else return false; - } - - private boolean check(int aIndex, World world, int x, int y, int z) { - Block block = world.getBlock(x, y, z); - int meta = world.getBlockMetadata(x, y, z); - Block target = mTieredBlockRegistry.get(aIndex) - .getValue_1(); - int targetMeta = mTieredBlockRegistry.get(aIndex) - .getValue_2(); - return target.equals(block) && meta == targetMeta; - } - - int getIndex(int size) { - if (size > 8) size = 8; - return size - 1; - } - - @Override - public boolean spawnHint(GregtechMTE_ChemicalPlant t, World world, int x, int y, int z, ItemStack trigger) { - StructureLibAPI.hintParticle( - world, - x, - y, - z, - mTieredBlockRegistry.get(getIndex(trigger.stackSize)) - .getValue_1(), - mTieredBlockRegistry.get(getIndex(trigger.stackSize)) - .getValue_2()); - return true; - } - - @Override - public boolean placeBlock(GregtechMTE_ChemicalPlant t, World world, int x, int y, int z, - ItemStack trigger) { - return world.setBlock( - x, - y, - z, - mTieredBlockRegistry.get(getIndex(trigger.stackSize)) - .getValue_1(), - mTieredBlockRegistry.get(getIndex(trigger.stackSize)) - .getValue_2(), - 3); - } - - @Nullable - @Override - public BlocksToPlace getBlocksToPlace(GregtechMTE_ChemicalPlant gregtechMTE_chemicalPlant, World world, - int x, int y, int z, ItemStack trigger, AutoPlaceEnvironment env) { - return BlocksToPlace.create( - mTieredBlockRegistry.get(getIndex(trigger.stackSize)) - .getValue_1(), - mTieredBlockRegistry.get(getIndex(trigger.stackSize)) - .getValue_2()); - } - - @Override - public PlaceResult survivalPlaceBlock(GregtechMTE_ChemicalPlant t, World world, int x, int y, int z, - ItemStack trigger, AutoPlaceEnvironment env) { - if (check(getIndex(trigger.stackSize), world, x, y, z)) return PlaceResult.SKIP; - return StructureUtility.survivalPlaceBlock( - mTieredBlockRegistry.get(getIndex(trigger.stackSize)) - .getValue_1(), - mTieredBlockRegistry.get(getIndex(trigger.stackSize)) - .getValue_2(), - world, - x, - y, - z, - env.getSource(), - env.getActor(), - env.getChatter()); - } - }; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(mName, stackSize, hintsOnly, 3, 6, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - return survivialBuildPiece(mName, stackSize, 3, 6, 0, elementBudget, env, false, true); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - for (int i = 0; i < 8; i++) { - checkCasing[i] = 0; - } - checkPipe = 0; - checkMachine = 0; - mSolidCasingTier = 0; - mMachineCasingTier = 0; - mPipeCasingTier = 0; - mCoilTier = 0; - maxTierOfHatch = 0; - mCatalystBuses.clear(); - setCoilMeta(HeatingCoilLevel.None); - if (checkPiece(mName, 3, 6, 0) && mCasing >= 70) { - for (int i = 0; i < 8; i++) { - if (checkCasing[i] == mCasing) { - mSolidCasingTier = i; - } else if (checkCasing[i] > 0) return false; - } - mMachineCasingTier = checkMachine - 1; - mPipeCasingTier = checkPipe - 12; - mCoilTier = checkCoil.getTier(); - getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); - updateHatchTexture(); - return (mMachineCasingTier >= 9 || mMachineCasingTier >= maxTierOfHatch) && mCatalystBuses.size() <= 1; - } - return false; - } - - public void updateHatchTexture() { - for (GT_MetaTileEntity_Hatch h : mCatalystBuses) h.updateTexture(getCasingTextureID()); - for (IDualInputHatch h : mDualInputHatches) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mInputBusses) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mMaintenanceHatches) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mEnergyHatches) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mOutputBusses) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mInputHatches) h.updateTexture(getCasingTextureID()); - for (GT_MetaTileEntity_Hatch h : mOutputHatches) h.updateTexture(getCasingTextureID()); - } - - public final boolean addChemicalPlantList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } else { - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Catalysts) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_InputBus) { - maxTierOfHatch = Math.max(maxTierOfHatch, ((GT_MetaTileEntity_Hatch_InputBus) aMetaTileEntity).mTier); - return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { - return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { - maxTierOfHatch = Math.max(maxTierOfHatch, ((GT_MetaTileEntity_Hatch_Energy) aMetaTileEntity).mTier); - return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_OutputBus) { - maxTierOfHatch = Math.max(maxTierOfHatch, ((GT_MetaTileEntity_Hatch_OutputBus) aMetaTileEntity).mTier); - return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Input) { - maxTierOfHatch = Math.max(maxTierOfHatch, ((GT_MetaTileEntity_Hatch_Input) aMetaTileEntity).mTier); - return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Output) { - maxTierOfHatch = Math.max(maxTierOfHatch, ((GT_MetaTileEntity_Hatch_Output) aMetaTileEntity).mTier); - return addToMachineList(aTileEntity, aBaseCasingIndex); - } - } - return false; - } - - @Override - protected SoundResource getProcessStartSound() { - return SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP; - } - - @Override - protected IIconContainer getActiveOverlay() { - return TexturesGtBlock.oMCAChemicalPlantActive; - } - - @Override - protected IIconContainer getInactiveOverlay() { - return TexturesGtBlock.oMCAChemicalPlant; - } - - @Override - protected int getCasingTextureId() { - return getCasingTextureID(); - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.chemicalPlantRecipes; - } - - @Override - public int getMaxParallelRecipes() { - return 2 * getPipeCasingTier(); - } - - private int getSolidCasingTier() { - return this.mSolidCasingTier; - } - - private int getMachineCasingTier() { - return mMachineCasingTier; - } - - private int getPipeCasingTier() { - return mPipeCasingTier; - } - - private int getCasingTextureID() { - // Check the Tier Client Side - int aTier = mSolidCasingTier; - return getCasingTextureIdForTier(aTier); - } - - public boolean addToMachineList(IGregTechTileEntity aTileEntity) { - int aMaxTier = getMachineCasingTier(); - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_TieredMachineBlock aMachineBlock) { - int aTileTier = aMachineBlock.mTier; - if (aTileTier > aMaxTier) { - log("Hatch tier too high."); - return false; - } else { - return addToMachineList(aTileEntity, getCasingTextureID()); - } - } else { - log("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"); - } - - @Override - public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Catalysts) { - log("Found GT_MetaTileEntity_Hatch_Catalysts"); - return addToMachineListInternal(mCatalystBuses, aMetaTileEntity, aBaseCasingIndex); - } - return super.addToMachineList(aTileEntity, aBaseCasingIndex); - } - - @Override - public int getMaxEfficiency(final ItemStack aStack) { - return 10000; - } - - @Override - public int getPollutionPerTick(final ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(final ItemStack aStack) { - return false; - } - - public int getMaxCatalystDurability() { - return 50; - } - - @Override - public byte getUpdateData() { - return (byte) mSolidCasingTier; - } - - @Override - public void receiveClientEvent(byte aEventID, byte aValue) { - super.receiveClientEvent(aEventID, aValue); - if (aEventID == GregTechTileClientEvents.CHANGE_CUSTOM_DATA && (aValue & 0x80) == 0) { - // received an update data from above method - // if no &0x80 clause it might catch the noop texture page event - mSolidCasingTier = aValue; - } - } - - private void damageCatalyst(@Nonnull ItemStack aStack, int minParallel) { - // Awakened Draconium Coils with Tungstensteel Pipe Casings (or above) no longer consume catalysts. - if (!isCatalystDamageable()) return; - for (int i = 0; i < minParallel; i++) { - if (MathUtils.randFloat(0, 10000000) / 10000000f < (1.2f - (0.2 * this.mPipeCasingTier))) { - int damage = getDamage(aStack) + 1; - if (damage >= getMaxCatalystDurability()) { - addOutput(CI.getEmptyCatalyst(1)); - aStack.stackSize -= 1; - return; - } else { - setDamage(aStack, damage); - } - } - } - } - - private boolean isCatalystDamageable() { - return this.mCoilTier < 10 || this.mPipeCasingTier < 4; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - ItemStack catalyst; - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (recipe.mSpecialValue > mSolidCasingTier) { - return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue + 1); - } - // checks if it has a catalyst - ItemStack catalystInRecipe = null; - for (ItemStack item : recipe.mInputs) { - if (ItemUtils.isCatalyst(item)) { - catalystInRecipe = item; - break; - } - } - - if (catalystInRecipe != null) { - catalyst = findCatalyst(getCatalystInputs().toArray(new ItemStack[0]), catalystInRecipe); - if (catalyst == null) { - return SimpleCheckRecipeResult.ofFailure("no_catalyst"); - } - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - public CheckRecipeResult process() { - ArrayList inputItemsList = new ArrayList<>(Arrays.asList(inputItems)); - inputItemsList.addAll(getCatalystInputs()); - inputItems = inputItemsList.toArray(new ItemStack[0]); - return super.process(); - } - - @NotNull - @Override - protected CheckRecipeResult onRecipeStart(@NotNull GT_Recipe recipe) { - if (catalyst != null) { - damageCatalyst(catalyst, getCurrentParallels()); - } - return super.onRecipeStart(recipe); - } - }.setMaxParallelSupplier(this::getMaxParallelRecipes); - } - - @Override - protected void setupProcessingLogic(ProcessingLogic logic) { - super.setupProcessingLogic(logic); - // Same speed bonus as pyro oven - logic.setSpeedBonus(2F / (1 + this.mCoilTier)); - } - - @Override - public void updateSlots() { - super.updateSlots(); - for (GT_MetaTileEntity_Hatch_Catalysts h : mCatalystBuses) { - h.updateSlots(); - h.tryFillUsageSlots(); - } - } - - private ItemStack findCatalyst(ItemStack[] aItemInputs, ItemStack catalyst) { - if (aItemInputs != null) { - for (ItemStack item : aItemInputs) { - if (GT_Utility.areStacksEqual(item, catalyst, true)) { - return item; - } - } - } - return null; - } - - private int getDamage(@Nonnull ItemStack aStack) { - return ItemGenericChemBase.getCatalystDamage(aStack); - } - - private void setDamage(@Nonnull ItemStack aStack, int aAmount) { - ItemGenericChemBase.setCatalystDamage(aStack, aAmount); - } - - /* - * Catalyst Handling - */ - public ArrayList getCatalystInputs() { - ArrayList tItems = new ArrayList<>(); - for (GT_MetaTileEntity_Hatch_Catalysts tHatch : filterValidMTEs(mCatalystBuses)) { - AutoMap aHatchContent = tHatch.getContentUsageSlots(); - if (!aHatchContent.isEmpty()) { - tItems.addAll(aHatchContent); - } - } - return tItems; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/MTEChemicalPlant.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/MTEChemicalPlant.java new file mode 100644 index 0000000000..2046de6c1c --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/chemplant/MTEChemicalPlant.java @@ -0,0 +1,670 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.chemplant; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.filterByMTETier; +import static gregtech.api.util.GTStructureUtility.ofCoil; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureUtility; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.GregTechTileClientEvents; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.IDualInputHatch; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.api.objects.data.Triplet; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.item.chemistry.general.ItemGenericChemBase; +import gtPlusPlus.core.lib.GTPPCore; +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.base.GTPPMultiBlockBase; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.MTEHatchCatalysts; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEChemicalPlant extends GTPPMultiBlockBase implements ISurvivalConstructable { + + private int mSolidCasingTier = 0; + private int mMachineCasingTier = 0; + private int mPipeCasingTier = 0; + private int mCoilTier = 0; + private HeatingCoilLevel checkCoil; + private int[] checkCasing = new int[8]; + private int checkMachine; + private int checkPipe; + private int maxTierOfHatch; + private int mCasing; + private static IStructureDefinition STRUCTURE_DEFINITION = null; + + private final ArrayList mCatalystBuses = new ArrayList<>(); + + private static final HashMap> mTieredBlockRegistry = new HashMap<>(); + + public MTEChemicalPlant(final int aID, final String aName, final String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEChemicalPlant(final String aName) { + super(aName); + } + + public static boolean registerMachineCasingForTier(int aTier, Block aBlock, int aMeta, int aCasingTextureID) { + Triplet aCasingData = new Triplet<>(aBlock, aMeta, aCasingTextureID); + if (mTieredBlockRegistry.containsKey(aTier)) { + GTPPCore.crash( + "Tried to register a Machine casing for tier " + aTier + + " to the Chemical Plant, however this tier already contains one."); + } + mTieredBlockRegistry.put(aTier, aCasingData); + return true; + } + + 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 MTEChemicalPlant(this.mName); + } + + @Override + public String getMachineType() { + return "Chemical Plant"; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the Chemical Plant") + .addInfo("Heavy Industry, now right at your doorstep!") + .addInfo("Please read the user manual for more information on construction and usage") + .addSeparator() + .addController("Bottom Center") + .addStructureHint("Catalyst Housing", 1) + .addInputBus("Bottom Casing", 1) + .addOutputBus("Bottom Casing", 1) + .addInputHatch("Bottom Casing", 1) + .addOutputHatch("Bottom Casing", 1) + .addEnergyHatch("Bottom Casing", 1) + .addMaintenanceHatch("Bottom Casing", 1) + .addSubChannelUsage("casing", "metal machine casing") + .addSubChannelUsage("machine", "tier machine casing") + .addSubChannelUsage("coil", "heating coil blocks") + .addSubChannelUsage("pipe", "pipe casing blocks") + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + public void setMachineMeta(int meta) { + checkMachine = meta; + } + + public int getMachineMeta() { + return checkMachine; + } + + public void setPipeMeta(int meta) { + checkPipe = meta; + } + + public int getPipeMeta() { + return checkPipe; + } + + public void setCoilMeta(HeatingCoilLevel meta) { + checkCoil = meta; + } + + public HeatingCoilLevel getCoilMeta() { + return checkCoil; + } + + @Override + public IStructureDefinition getStructureDefinition() { + if (STRUCTURE_DEFINITION == null) { + IStructureElement allCasingsElement = withChannel( + "casing", + ofChain( + IntStream.range(0, 8) + .mapToObj(MTEChemicalPlant::ofSolidCasing) + .collect(Collectors.toList()))); + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { + { "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX", "XXXXXXX" }, + { "X X", " MMMMM ", " MHHHM ", " MHHHM ", " MHHHM ", " MMMMM ", "X X" }, + { "X X", " ", " PPP ", " PPP ", " PPP ", " ", "X X" }, + { "X X", " ", " HHH ", " HHH ", " HHH ", " ", "X X" }, + { "X X", " ", " PPP ", " PPP ", " PPP ", " ", "X X" }, + { "X X", " MMMMM ", " MHHHM ", " MHHHM ", " MHHHM ", " MMMMM ", "X X" }, + { "CCC~CCC", "CMMMMMC", "CMMMMMC", "CMMMMMC", "CMMMMMC", "CMMMMMC", "CCCCCCC" }, })) + .addElement( + 'C', + ofChain( + buildHatchAdder(MTEChemicalPlant.class).atLeast(Maintenance) + .casingIndex(getCasingTextureID()) + .dot(1) + .build(), + buildHatchAdder(MTEChemicalPlant.class).atLeast(InputHatch, OutputHatch, InputBus, OutputBus) + .adder(MTEChemicalPlant::addChemicalPlantList) + .hatchItemFilterAnd( + (t, s) -> filterByMTETier( + Integer.MIN_VALUE, + s.stackSize >= 10 ? Integer.MAX_VALUE : s.stackSize)) + .casingIndex(getCasingTextureID()) + .dot(1) + .build(), + buildHatchAdder(MTEChemicalPlant.class).hatchClass(MTEHatchCatalysts.class) + .shouldReject(t -> t.mCatalystBuses.size() >= 1) + .adder(MTEChemicalPlant::addChemicalPlantList) + .casingIndex(getCasingTextureID()) + .dot(1) + .build(), + allCasingsElement)) + .addElement('X', allCasingsElement) + .addElement( + 'M', + withChannel( + "machine", + addTieredBlock( + GregTechAPI.sBlockCasings1, + MTEChemicalPlant::setMachineMeta, + MTEChemicalPlant::getMachineMeta, + 10))) + .addElement( + 'H', + withChannel("coil", ofCoil(MTEChemicalPlant::setCoilMeta, MTEChemicalPlant::getCoilMeta))) + .addElement( + 'P', + withChannel( + "pipe", + addTieredBlock( + GregTechAPI.sBlockCasings2, + MTEChemicalPlant::setPipeMeta, + MTEChemicalPlant::getPipeMeta, + 12, + 16))) + .build(); + } + return STRUCTURE_DEFINITION; + } + + private static IStructureElement ofSolidCasing(int aIndex) { + return new IStructureElement() { + + @Override + public boolean check(MTEChemicalPlant t, World world, int x, int y, int z) { + if (check(aIndex, world, x, y, z)) { + t.checkCasing[aIndex]++; + t.mCasing++; + return true; + } else return false; + } + + private boolean check(int aIndex, World world, int x, int y, int z) { + Block block = world.getBlock(x, y, z); + int meta = world.getBlockMetadata(x, y, z); + Block target = mTieredBlockRegistry.get(aIndex) + .getValue_1(); + int targetMeta = mTieredBlockRegistry.get(aIndex) + .getValue_2(); + return target.equals(block) && meta == targetMeta; + } + + int getIndex(int size) { + if (size > 8) size = 8; + return size - 1; + } + + @Override + public boolean spawnHint(MTEChemicalPlant t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle( + world, + x, + y, + z, + mTieredBlockRegistry.get(getIndex(trigger.stackSize)) + .getValue_1(), + mTieredBlockRegistry.get(getIndex(trigger.stackSize)) + .getValue_2()); + return true; + } + + @Override + public boolean placeBlock(MTEChemicalPlant t, World world, int x, int y, int z, ItemStack trigger) { + return world.setBlock( + x, + y, + z, + mTieredBlockRegistry.get(getIndex(trigger.stackSize)) + .getValue_1(), + mTieredBlockRegistry.get(getIndex(trigger.stackSize)) + .getValue_2(), + 3); + } + + @Nullable + @Override + public BlocksToPlace getBlocksToPlace(MTEChemicalPlant gregtechMTE_chemicalPlant, World world, int x, int y, + int z, ItemStack trigger, AutoPlaceEnvironment env) { + return BlocksToPlace.create( + mTieredBlockRegistry.get(getIndex(trigger.stackSize)) + .getValue_1(), + mTieredBlockRegistry.get(getIndex(trigger.stackSize)) + .getValue_2()); + } + + @Override + public PlaceResult survivalPlaceBlock(MTEChemicalPlant t, World world, int x, int y, int z, + ItemStack trigger, AutoPlaceEnvironment env) { + if (check(getIndex(trigger.stackSize), world, x, y, z)) return PlaceResult.SKIP; + return StructureUtility.survivalPlaceBlock( + mTieredBlockRegistry.get(getIndex(trigger.stackSize)) + .getValue_1(), + mTieredBlockRegistry.get(getIndex(trigger.stackSize)) + .getValue_2(), + world, + x, + y, + z, + env.getSource(), + env.getActor(), + env.getChatter()); + } + }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(mName, stackSize, hintsOnly, 3, 6, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 3, 6, 0, elementBudget, env, false, true); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + for (int i = 0; i < 8; i++) { + checkCasing[i] = 0; + } + checkPipe = 0; + checkMachine = 0; + mSolidCasingTier = 0; + mMachineCasingTier = 0; + mPipeCasingTier = 0; + mCoilTier = 0; + maxTierOfHatch = 0; + mCatalystBuses.clear(); + setCoilMeta(HeatingCoilLevel.None); + if (checkPiece(mName, 3, 6, 0) && mCasing >= 70) { + for (int i = 0; i < 8; i++) { + if (checkCasing[i] == mCasing) { + mSolidCasingTier = i; + } else if (checkCasing[i] > 0) return false; + } + mMachineCasingTier = checkMachine - 1; + mPipeCasingTier = checkPipe - 12; + mCoilTier = checkCoil.getTier(); + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, getUpdateData()); + updateHatchTexture(); + return (mMachineCasingTier >= 9 || mMachineCasingTier >= maxTierOfHatch) && mCatalystBuses.size() <= 1; + } + return false; + } + + public void updateHatchTexture() { + for (MTEHatch h : mCatalystBuses) h.updateTexture(getCasingTextureID()); + for (IDualInputHatch h : mDualInputHatches) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mInputBusses) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mMaintenanceHatches) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mEnergyHatches) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mOutputBusses) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mInputHatches) h.updateTexture(getCasingTextureID()); + for (MTEHatch h : mOutputHatches) h.updateTexture(getCasingTextureID()); + } + + public final boolean addChemicalPlantList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } else { + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchCatalysts) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchInputBus) { + maxTierOfHatch = Math.max(maxTierOfHatch, ((MTEHatchInputBus) aMetaTileEntity).mTier); + return addToMachineList(aTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchMaintenance) { + return addToMachineList(aTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchEnergy) { + maxTierOfHatch = Math.max(maxTierOfHatch, ((MTEHatchEnergy) aMetaTileEntity).mTier); + return addToMachineList(aTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchOutputBus) { + maxTierOfHatch = Math.max(maxTierOfHatch, ((MTEHatchOutputBus) aMetaTileEntity).mTier); + return addToMachineList(aTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchInput) { + maxTierOfHatch = Math.max(maxTierOfHatch, ((MTEHatchInput) aMetaTileEntity).mTier); + return addToMachineList(aTileEntity, aBaseCasingIndex); + } else if (aMetaTileEntity instanceof MTEHatchOutput) { + maxTierOfHatch = Math.max(maxTierOfHatch, ((MTEHatchOutput) aMetaTileEntity).mTier); + return addToMachineList(aTileEntity, aBaseCasingIndex); + } + } + return false; + } + + @Override + protected SoundResource getProcessStartSound() { + return SoundResource.IC2_MACHINES_ELECTROFURNACE_LOOP; + } + + @Override + protected IIconContainer getActiveOverlay() { + return TexturesGtBlock.oMCAChemicalPlantActive; + } + + @Override + protected IIconContainer getInactiveOverlay() { + return TexturesGtBlock.oMCAChemicalPlant; + } + + @Override + protected int getCasingTextureId() { + return getCasingTextureID(); + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.chemicalPlantRecipes; + } + + @Override + public int getMaxParallelRecipes() { + return 2 * getPipeCasingTier(); + } + + private int getSolidCasingTier() { + return this.mSolidCasingTier; + } + + private int getMachineCasingTier() { + return mMachineCasingTier; + } + + private int getPipeCasingTier() { + return mPipeCasingTier; + } + + private int getCasingTextureID() { + // Check the Tier Client Side + int aTier = mSolidCasingTier; + return getCasingTextureIdForTier(aTier); + } + + public boolean addToMachineList(IGregTechTileEntity aTileEntity) { + int aMaxTier = getMachineCasingTier(); + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTETieredMachineBlock aMachineBlock) { + int aTileTier = aMachineBlock.mTier; + if (aTileTier > aMaxTier) { + log("Hatch tier too high."); + return false; + } else { + return addToMachineList(aTileEntity, getCasingTextureID()); + } + } else { + log("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"); + } + + @Override + public boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchCatalysts) { + log("Found GT_MetaTileEntity_Hatch_Catalysts"); + return addToMachineListInternal(mCatalystBuses, aMetaTileEntity, aBaseCasingIndex); + } + return super.addToMachineList(aTileEntity, aBaseCasingIndex); + } + + @Override + public int getMaxEfficiency(final ItemStack aStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(final ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(final ItemStack aStack) { + return false; + } + + public int getMaxCatalystDurability() { + return 50; + } + + @Override + public byte getUpdateData() { + return (byte) mSolidCasingTier; + } + + @Override + public void receiveClientEvent(byte aEventID, byte aValue) { + super.receiveClientEvent(aEventID, aValue); + if (aEventID == GregTechTileClientEvents.CHANGE_CUSTOM_DATA && (aValue & 0x80) == 0) { + // received an update data from above method + // if no &0x80 clause it might catch the noop texture page event + mSolidCasingTier = aValue; + } + } + + private void damageCatalyst(@Nonnull ItemStack aStack, int minParallel) { + // Awakened Draconium Coils with Tungstensteel Pipe Casings (or above) no longer consume catalysts. + if (!isCatalystDamageable()) return; + for (int i = 0; i < minParallel; i++) { + if (MathUtils.randFloat(0, 10000000) / 10000000f < (1.2f - (0.2 * this.mPipeCasingTier))) { + int damage = getDamage(aStack) + 1; + if (damage >= getMaxCatalystDurability()) { + addOutput(CI.getEmptyCatalyst(1)); + aStack.stackSize -= 1; + return; + } else { + setDamage(aStack, damage); + } + } + } + } + + private boolean isCatalystDamageable() { + return this.mCoilTier < 10 || this.mPipeCasingTier < 4; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + ItemStack catalyst; + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (recipe.mSpecialValue > mSolidCasingTier) { + return CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue + 1); + } + // checks if it has a catalyst + ItemStack catalystInRecipe = null; + for (ItemStack item : recipe.mInputs) { + if (ItemUtils.isCatalyst(item)) { + catalystInRecipe = item; + break; + } + } + + if (catalystInRecipe != null) { + catalyst = findCatalyst(getCatalystInputs().toArray(new ItemStack[0]), catalystInRecipe); + if (catalyst == null) { + return SimpleCheckRecipeResult.ofFailure("no_catalyst"); + } + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + public CheckRecipeResult process() { + ArrayList inputItemsList = new ArrayList<>(Arrays.asList(inputItems)); + inputItemsList.addAll(getCatalystInputs()); + inputItems = inputItemsList.toArray(new ItemStack[0]); + return super.process(); + } + + @NotNull + @Override + protected CheckRecipeResult onRecipeStart(@NotNull GTRecipe recipe) { + if (catalyst != null) { + damageCatalyst(catalyst, getCurrentParallels()); + } + return super.onRecipeStart(recipe); + } + }.setMaxParallelSupplier(this::getMaxParallelRecipes); + } + + @Override + protected void setupProcessingLogic(ProcessingLogic logic) { + super.setupProcessingLogic(logic); + // Same speed bonus as pyro oven + logic.setSpeedBonus(2F / (1 + this.mCoilTier)); + } + + @Override + public void updateSlots() { + super.updateSlots(); + for (MTEHatchCatalysts h : mCatalystBuses) { + h.updateSlots(); + h.tryFillUsageSlots(); + } + } + + private ItemStack findCatalyst(ItemStack[] aItemInputs, ItemStack catalyst) { + if (aItemInputs != null) { + for (ItemStack item : aItemInputs) { + if (GTUtility.areStacksEqual(item, catalyst, true)) { + return item; + } + } + } + return null; + } + + private int getDamage(@Nonnull ItemStack aStack) { + return ItemGenericChemBase.getCatalystDamage(aStack); + } + + private void setDamage(@Nonnull ItemStack aStack, int aAmount) { + ItemGenericChemBase.setCatalystDamage(aStack, aAmount); + } + + /* + * Catalyst Handling + */ + public ArrayList getCatalystInputs() { + ArrayList tItems = new ArrayList<>(); + for (MTEHatchCatalysts tHatch : filterValidMTEs(mCatalystBuses)) { + AutoMap aHatchContent = tHatch.getContentUsageSlots(); + if (!aHatchContent.isEmpty()) { + tItems.addAll(aHatchContent); + } + } + return tItems; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/GregTechMetaTileEntity_MegaAlloyBlastSmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/GregTechMetaTileEntity_MegaAlloyBlastSmelter.java deleted file mode 100644 index 2e3370fe4c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/GregTechMetaTileEntity_MegaAlloyBlastSmelter.java +++ /dev/null @@ -1,497 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.mega; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.ExoticEnergy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofCoil; -import static gregtech.api.util.GT_Utility.filterValidMTEs; - -import java.util.ArrayList; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.HeatingCoilLevel; -import gregtech.api.enums.TAE; -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.logic.ProcessingLogic; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregTechMetaTileEntity_MegaAlloyBlastSmelter - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private static final int MAX_PARALLELS = 256; - private HeatingCoilLevel coilLevel; - private byte glassTier = -1; - private float speedBonus = 1; - private float energyDiscount = 1; - private boolean hasNormalCoils; - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - "main", - new String[][] { - { " ", " ", " ", " ", " ", " ", - " ", " ", " ", " ", " ", " ", - " ", " DDDDD ", " CCCCC ", " AEEEA ", " AE~EA ", " AEEEA ", - " CCCCC ", " ZZZZZ " }, - { " DDDDD ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", - " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", - " DDDDD ", " D D ", " C C ", " A A ", " A A ", " A A ", - " C C ", " ZZZZZZZ " }, - { " DDDDDDD ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", - " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", - " DBBBBBD ", " D BBBBB D ", " C BBBBB C ", " A BBBBB A ", " A BBBBB A ", " A BBBBB A ", - " C BBBBB C ", " ZZZZZZZZZ " }, - { " DDDDDDDDD ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", - " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", - " DB BD ", "D B B D", "C B B C", "A B B A", "A B B A", "A B B A", - "C B B C", "ZZZZZZZZZZZ" }, - { " DDDDDDDDD ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", - " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", - " DB BD ", "D B B D", "C B B C", "A B B A", "A B B A", "A B B A", - "C B B C", "ZZZZZZZZZZZ" }, - { " DDDDFDDDD ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", - " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", - " DB BD ", "D B B D", "C B B C", "A B B A", "A B B A", "A B B A", - "C B B C", "ZZZZZZZZZZZ" }, - { " DDDDDDDDD ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", - " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", - " DB BD ", "D B B D", "C B B C", "A B B A", "A B B A", "A B B A", - "C B B C", "ZZZZZZZZZZZ" }, - { " DDDDDDDDD ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", - " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", - " DB BD ", "D B B D", "C B B C", "A B B A", "A B B A", "A B B A", - "C B B C", "ZZZZZZZZZZZ" }, - { " DDDDDDD ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", - " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", - " DBBBBBD ", " D BBBBB D ", " C BBBBB C ", " A BBBBB A ", " A BBBBB A ", " A BBBBB A ", - " C BBBBB C ", " ZZZZZZZZZ " }, - { " DDDDD ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", - " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", - " DDDDD ", " D D ", " C C ", " A A ", " A A ", " A A ", - " C C ", " ZZZZZZZ " }, - { " ", " ", " ", " ", " ", " ", - " ", " ", " ", " ", " ", " ", - " ", " DDDDD ", " CCCCC ", " AAAAA ", " AAAAA ", " AAAAA ", - " CCCCC ", " ZZZZZ " } }) - .addElement( - 'B', - withChannel( - "coil", - ofChain( - onElementPass( - te -> te.hasNormalCoils = false, - ofCoil( - GregTechMetaTileEntity_MegaAlloyBlastSmelter::setCoilLevel, - GregTechMetaTileEntity_MegaAlloyBlastSmelter::getCoilLevel)), - onElementPass(te -> te.hasNormalCoils = true, ofBlock(ModBlocks.blockCasingsMisc, 14))))) - - .addElement( - 'Z', - buildHatchAdder(GregTechMetaTileEntity_MegaAlloyBlastSmelter.class) - .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Energy, ExoticEnergy) - .casingIndex(TAE.GTPP_INDEX(15)) - .dot(1) - .buildAndChain(ofBlock(ModBlocks.blockCasingsMisc, 15))) - .addElement( - 'E', - buildHatchAdder(GregTechMetaTileEntity_MegaAlloyBlastSmelter.class).atLeast(Maintenance) - .casingIndex(TAE.GTPP_INDEX(15)) - .dot(2) - .buildAndChain(ofBlock(ModBlocks.blockCasingsMisc, 15))) - .addElement('D', ofBlock(ModBlocks.blockCasingsMisc, 15)) - .addElement('C', ofBlock(ModBlocks.blockCasingsMisc, 14)) - .addElement( - 'A', - withChannel( - "glass", - BorosilicateGlass.ofBoroGlass((byte) -1, (te, t) -> te.glassTier = t, te -> te.glassTier))) - .addElement('F', Muffler.newAny(TAE.GTPP_INDEX(15), 3)) - .build(); - - public GregTechMetaTileEntity_MegaAlloyBlastSmelter(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GregTechMetaTileEntity_MegaAlloyBlastSmelter(String aName) { - super(aName); - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - if (glassTier < GT_Utility.getTier(recipe.mEUt)) { - return CheckRecipeResultRegistry.insufficientMachineTier(GT_Utility.getTier(recipe.mEUt)); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @NotNull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - calculateEnergyDiscount(coilLevel, recipe); - return super.createOverclockCalculator(recipe).setSpeedBoost(speedBonus) - .setEUtDiscount(energyDiscount); - } - }.setMaxParallel(MAX_PARALLELS); - } - - @Override - protected void setProcessingLogicPower(ProcessingLogic logic) { - logic.setAvailableVoltage(getMaxInputEu()); - logic.setAvailableAmperage(1); - } - - @Override - public boolean addOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - boolean exotic = addExoticEnergyInputToMachineList(aTileEntity, aBaseCasingIndex); - return super.addToMachineList(aTileEntity, aBaseCasingIndex) || exotic; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - glassTier = -1; - coilLevel = HeatingCoilLevel.None; - if (!checkPiece("main", 5, 16, 0)) return false; - if (hasNormalCoils) coilLevel = HeatingCoilLevel.None; - if (mMaintenanceHatches.size() != 1) return false; - if (mMufflerHatches.size() != 1) return false; - if (this.glassTier < 10 && !getExoticAndNormalEnergyHatchList().isEmpty()) { - for (GT_MetaTileEntity_Hatch hatchEnergy : getExoticAndNormalEnergyHatchList()) { - if (this.glassTier < hatchEnergy.mTier) { - return false; - } - } - } - // Disallow lasers if the glass is below UV tier - if (glassTier < 8) { - for (GT_MetaTileEntity_Hatch hatchEnergy : getExoticEnergyHatches()) { - if (hatchEnergy.getConnectionType() == GT_MetaTileEntity_Hatch.ConnectionType.LASER) { - return false; - } - } - } - calculateSpeedBonus(coilLevel, glassTier); - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - private void calculateSpeedBonus(HeatingCoilLevel lvl, int glassTier) { - int bonusTier = lvl != null ? Math.min(lvl.getTier() - 3, glassTier - 2) : 0; - if (bonusTier < 0) { - speedBonus = 1; - return; - } - speedBonus = 1 - 0.05f * bonusTier; - } - - private void calculateEnergyDiscount(HeatingCoilLevel lvl, GT_Recipe recipe) { - int recipeTier = GT_Utility.getTier(recipe.mEUt); - int tierDifference = lvl != null ? lvl.getTier() + 1 - recipeTier : 0; - if (tierDifference < 0) { - energyDiscount = 1; - return; - } - energyDiscount = (float) Math.pow(0.95, tierDifference); - } - - @Override - public void explodeMultiblock() { - super.explodeMultiblock(); - } - - @Override - public List getExoticAndNormalEnergyHatchList() { - List tHatches = new ArrayList<>(); - tHatches.addAll(mExoticEnergyHatches); - tHatches.addAll(mEnergyHatches); - return tHatches; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece("main", stackSize, hintsOnly, 5, 16, 0); - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fluid Alloy Cooker") - .addInfo("Controller block for the Mega Alloy Blast Smelter") - .addInfo( - "Runs the same recipes as the normal ABS, except with up to " + EnumChatFormatting.BOLD - + EnumChatFormatting.UNDERLINE - + MAX_PARALLELS - + EnumChatFormatting.RESET - + EnumChatFormatting.GRAY - + " parallels.") - .addInfo( - "Every coil tier above TPV grants a speed bonus if the equivalent or better glass tier is present.") - .addInfo( - EnumChatFormatting.YELLOW + "Speed Bonus" - + EnumChatFormatting.GRAY - + ": 5% lower recipe time per tier (additive)") - .addInfo("Furthermore, an energy discount is granted for using coils above the recipe tier.") - .addInfo( - EnumChatFormatting.YELLOW + "Energy Discount" - + EnumChatFormatting.GRAY - + ": 5% lower energy consumption per tier (multiplicative)") - .addInfo( - EnumChatFormatting.ITALIC - + "Can also use normal ABS coils in their place instead, if you don't like the bonuses :)" - + EnumChatFormatting.RESET - + EnumChatFormatting.GRAY) - .addInfo("The glass limits the tier of the energy hatch. UEV glass unlocks all tiers.") - .addInfo("UV glass required for TecTech laser hatches.") - .addInfo( - EnumChatFormatting.ITALIC + "\"all it does is make metals hot\"" - + EnumChatFormatting.RESET - + EnumChatFormatting.GRAY) - .beginStructureBlock(11, 20, 11, false) - .addStructureInfo("This structure is too complex! See schematic for details.") - .addMaintenanceHatch("Around the controller", 2) - .addOtherStructurePart("Input Bus, Output Bus, Input Hatch, Output Bus, Energy Hatch", "Bottom Casing", 1) - .addMufflerHatch("1 in the center of the top layer", 3) - .toolTipFinisher( - EnumChatFormatting.AQUA + "MadMan310 " - + EnumChatFormatting.GRAY - + "via " - + EnumChatFormatting.RED - + "GT++"); - return tt; - } - - @Override - public String[] getInfoData() { - long storedEnergy = 0; - long maxEnergy = 0; - int paras = getBaseMetaTileEntity().isActive() ? processingLogic.getCurrentParallels() : 0; - int moreSpeed = (int) ((1 - speedBonus) * 100); - int lessEnergy = (int) ((1 - energyDiscount) * 100); - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(mExoticEnergyHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - - return new String[] { "------------ Critical Information ------------", - StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mProgresstime) - + EnumChatFormatting.RESET - + "t / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(mMaxProgresstime) - + EnumChatFormatting.RESET - + "t", - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(-lEUt) - + EnumChatFormatting.RESET - + " EU/t", - StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getAverageInputVoltage()) - + EnumChatFormatting.RESET - + " EU/t(*" - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(getMaxInputAmps()) - + EnumChatFormatting.RESET - + "A) " - + StatCollector.translateToLocal("GT5U.machines.tier") - + ": " - + EnumChatFormatting.YELLOW - + GT_Values.VN[GT_Utility.getTier(getAverageInputVoltage())] - + EnumChatFormatting.RESET, - "Parallels: " + EnumChatFormatting.BLUE + paras + EnumChatFormatting.RESET, - "Speed Bonus: " + EnumChatFormatting.BLUE + moreSpeed + "%" + EnumChatFormatting.RESET, - "Energy Discount: " + EnumChatFormatting.BLUE + lessEnergy + "%" + EnumChatFormatting.RESET, - "-----------------------------------------" }; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GregTechMetaTileEntity_MegaAlloyBlastSmelter(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) { - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(15)), - TextureFactory.builder() - .addIcon(TexturesGtBlock.oMCAMegaAlloyBlastSmelterActive) - .extFacing() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(15)), - TextureFactory.builder() - .addIcon(TexturesGtBlock.oMCAMegaAlloyBlastSmelter) - .extFacing() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(15)) }; - } - - @Override - public RecipeMap getRecipeMap() { - return GTPPRecipeMaps.alloyBlastSmelterRecipes; - } - - public HeatingCoilLevel getCoilLevel() { - return coilLevel; - } - - public void setCoilLevel(HeatingCoilLevel coilLevel) { - this.coilLevel = coilLevel; - } - - @Override - public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - // Lock to single recipe - super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); - } else { - inputSeparation = !inputSeparation; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); - } - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ, ItemStack aTool) { - if (aPlayer.isSneaking()) { - batchMode = !batchMode; - if (batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, "Batch recipes."); - } else { - GT_Utility.sendChatToPlayer(aPlayer, "Don't batch recipes."); - } - } - - return true; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return 102400; - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece("main", stackSize, 5, 16, 0, elementBudget, env, false, true); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - this.glassTier = aNBT.getByte("glassTier"); - if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { - inputSeparation = aNBT.getBoolean("separateBusses"); - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setByte("glassTier", glassTier); - super.saveNBTData(aNBT); - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/MTEMegaAlloyBlastSmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/MTEMegaAlloyBlastSmelter.java new file mode 100644 index 0000000000..1f97f38402 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/mega/MTEMegaAlloyBlastSmelter.java @@ -0,0 +1,494 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.mega; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.ExoticEnergy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; +import static gregtech.api.util.GTUtility.filterValidMTEs; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.API.BorosilicateGlass; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.enums.TAE; +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.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEMegaAlloyBlastSmelter extends MTEExtendedPowerMultiBlockBase + implements ISurvivalConstructable { + + private static final int MAX_PARALLELS = 256; + private HeatingCoilLevel coilLevel; + private byte glassTier = -1; + private float speedBonus = 1; + private float energyDiscount = 1; + private boolean hasNormalCoils; + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + "main", + new String[][] { + { " ", " ", " ", " ", " ", " ", + " ", " ", " ", " ", " ", " ", + " ", " DDDDD ", " CCCCC ", " AEEEA ", " AE~EA ", " AEEEA ", + " CCCCC ", " ZZZZZ " }, + { " DDDDD ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", + " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", + " DDDDD ", " D D ", " C C ", " A A ", " A A ", " A A ", + " C C ", " ZZZZZZZ " }, + { " DDDDDDD ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", + " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", + " DBBBBBD ", " D BBBBB D ", " C BBBBB C ", " A BBBBB A ", " A BBBBB A ", " A BBBBB A ", + " C BBBBB C ", " ZZZZZZZZZ " }, + { " DDDDDDDDD ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", + " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", + " DB BD ", "D B B D", "C B B C", "A B B A", "A B B A", "A B B A", + "C B B C", "ZZZZZZZZZZZ" }, + { " DDDDDDDDD ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", + " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", + " DB BD ", "D B B D", "C B B C", "A B B A", "A B B A", "A B B A", + "C B B C", "ZZZZZZZZZZZ" }, + { " DDDDFDDDD ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", + " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", + " DB BD ", "D B B D", "C B B C", "A B B A", "A B B A", "A B B A", + "C B B C", "ZZZZZZZZZZZ" }, + { " DDDDDDDDD ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", + " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", + " DB BD ", "D B B D", "C B B C", "A B B A", "A B B A", "A B B A", + "C B B C", "ZZZZZZZZZZZ" }, + { " DDDDDDDDD ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", + " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", " AB BA ", + " DB BD ", "D B B D", "C B B C", "A B B A", "A B B A", "A B B A", + "C B B C", "ZZZZZZZZZZZ" }, + { " DDDDDDD ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", + " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", " ABBBBBA ", + " DBBBBBD ", " D BBBBB D ", " C BBBBB C ", " A BBBBB A ", " A BBBBB A ", " A BBBBB A ", + " C BBBBB C ", " ZZZZZZZZZ " }, + { " DDDDD ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", + " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", " AAAAA ", + " DDDDD ", " D D ", " C C ", " A A ", " A A ", " A A ", + " C C ", " ZZZZZZZ " }, + { " ", " ", " ", " ", " ", " ", + " ", " ", " ", " ", " ", " ", + " ", " DDDDD ", " CCCCC ", " AAAAA ", " AAAAA ", " AAAAA ", + " CCCCC ", " ZZZZZ " } }) + .addElement( + 'B', + withChannel( + "coil", + ofChain( + onElementPass( + te -> te.hasNormalCoils = false, + ofCoil(MTEMegaAlloyBlastSmelter::setCoilLevel, MTEMegaAlloyBlastSmelter::getCoilLevel)), + onElementPass(te -> te.hasNormalCoils = true, ofBlock(ModBlocks.blockCasingsMisc, 14))))) + + .addElement( + 'Z', + buildHatchAdder(MTEMegaAlloyBlastSmelter.class) + .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Energy, ExoticEnergy) + .casingIndex(TAE.GTPP_INDEX(15)) + .dot(1) + .buildAndChain(ofBlock(ModBlocks.blockCasingsMisc, 15))) + .addElement( + 'E', + buildHatchAdder(MTEMegaAlloyBlastSmelter.class).atLeast(Maintenance) + .casingIndex(TAE.GTPP_INDEX(15)) + .dot(2) + .buildAndChain(ofBlock(ModBlocks.blockCasingsMisc, 15))) + .addElement('D', ofBlock(ModBlocks.blockCasingsMisc, 15)) + .addElement('C', ofBlock(ModBlocks.blockCasingsMisc, 14)) + .addElement( + 'A', + withChannel( + "glass", + BorosilicateGlass.ofBoroGlass((byte) -1, (te, t) -> te.glassTier = t, te -> te.glassTier))) + .addElement('F', Muffler.newAny(TAE.GTPP_INDEX(15), 3)) + .build(); + + public MTEMegaAlloyBlastSmelter(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMegaAlloyBlastSmelter(String aName) { + super(aName); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + if (glassTier < GTUtility.getTier(recipe.mEUt)) { + return CheckRecipeResultRegistry.insufficientMachineTier(GTUtility.getTier(recipe.mEUt)); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + calculateEnergyDiscount(coilLevel, recipe); + return super.createOverclockCalculator(recipe).setSpeedBoost(speedBonus) + .setEUtDiscount(energyDiscount); + } + }.setMaxParallel(MAX_PARALLELS); + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(getMaxInputEu()); + logic.setAvailableAmperage(1); + } + + @Override + public boolean addOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + boolean exotic = addExoticEnergyInputToMachineList(aTileEntity, aBaseCasingIndex); + return super.addToMachineList(aTileEntity, aBaseCasingIndex) || exotic; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + glassTier = -1; + coilLevel = HeatingCoilLevel.None; + if (!checkPiece("main", 5, 16, 0)) return false; + if (hasNormalCoils) coilLevel = HeatingCoilLevel.None; + if (mMaintenanceHatches.size() != 1) return false; + if (mMufflerHatches.size() != 1) return false; + if (this.glassTier < 10 && !getExoticAndNormalEnergyHatchList().isEmpty()) { + for (MTEHatch hatchEnergy : getExoticAndNormalEnergyHatchList()) { + if (this.glassTier < hatchEnergy.mTier) { + return false; + } + } + } + // Disallow lasers if the glass is below UV tier + if (glassTier < 8) { + for (MTEHatch hatchEnergy : getExoticEnergyHatches()) { + if (hatchEnergy.getConnectionType() == MTEHatch.ConnectionType.LASER) { + return false; + } + } + } + calculateSpeedBonus(coilLevel, glassTier); + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + private void calculateSpeedBonus(HeatingCoilLevel lvl, int glassTier) { + int bonusTier = lvl != null ? Math.min(lvl.getTier() - 3, glassTier - 2) : 0; + if (bonusTier < 0) { + speedBonus = 1; + return; + } + speedBonus = 1 - 0.05f * bonusTier; + } + + private void calculateEnergyDiscount(HeatingCoilLevel lvl, GTRecipe recipe) { + int recipeTier = GTUtility.getTier(recipe.mEUt); + int tierDifference = lvl != null ? lvl.getTier() + 1 - recipeTier : 0; + if (tierDifference < 0) { + energyDiscount = 1; + return; + } + energyDiscount = (float) Math.pow(0.95, tierDifference); + } + + @Override + public void explodeMultiblock() { + super.explodeMultiblock(); + } + + @Override + public List getExoticAndNormalEnergyHatchList() { + List tHatches = new ArrayList<>(); + tHatches.addAll(mExoticEnergyHatches); + tHatches.addAll(mEnergyHatches); + return tHatches; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece("main", stackSize, hintsOnly, 5, 16, 0); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fluid Alloy Cooker") + .addInfo("Controller block for the Mega Alloy Blast Smelter") + .addInfo( + "Runs the same recipes as the normal ABS, except with up to " + EnumChatFormatting.BOLD + + EnumChatFormatting.UNDERLINE + + MAX_PARALLELS + + EnumChatFormatting.RESET + + EnumChatFormatting.GRAY + + " parallels.") + .addInfo( + "Every coil tier above TPV grants a speed bonus if the equivalent or better glass tier is present.") + .addInfo( + EnumChatFormatting.YELLOW + "Speed Bonus" + + EnumChatFormatting.GRAY + + ": 5% lower recipe time per tier (additive)") + .addInfo("Furthermore, an energy discount is granted for using coils above the recipe tier.") + .addInfo( + EnumChatFormatting.YELLOW + "Energy Discount" + + EnumChatFormatting.GRAY + + ": 5% lower energy consumption per tier (multiplicative)") + .addInfo( + EnumChatFormatting.ITALIC + + "Can also use normal ABS coils in their place instead, if you don't like the bonuses :)" + + EnumChatFormatting.RESET + + EnumChatFormatting.GRAY) + .addInfo("The glass limits the tier of the energy hatch. UEV glass unlocks all tiers.") + .addInfo("UV glass required for TecTech laser hatches.") + .addInfo( + EnumChatFormatting.ITALIC + "\"all it does is make metals hot\"" + + EnumChatFormatting.RESET + + EnumChatFormatting.GRAY) + .beginStructureBlock(11, 20, 11, false) + .addStructureInfo("This structure is too complex! See schematic for details.") + .addMaintenanceHatch("Around the controller", 2) + .addOtherStructurePart("Input Bus, Output Bus, Input Hatch, Output Bus, Energy Hatch", "Bottom Casing", 1) + .addMufflerHatch("1 in the center of the top layer", 3) + .toolTipFinisher( + EnumChatFormatting.AQUA + "MadMan310 " + + EnumChatFormatting.GRAY + + "via " + + EnumChatFormatting.RED + + "GT++"); + return tt; + } + + @Override + public String[] getInfoData() { + long storedEnergy = 0; + long maxEnergy = 0; + int paras = getBaseMetaTileEntity().isActive() ? processingLogic.getCurrentParallels() : 0; + int moreSpeed = (int) ((1 - speedBonus) * 100); + int lessEnergy = (int) ((1 - energyDiscount) * 100); + for (MTEHatch tHatch : filterValidMTEs(mExoticEnergyHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + return new String[] { "------------ Critical Information ------------", + StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime) + + EnumChatFormatting.RESET + + "t / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime) + + EnumChatFormatting.RESET + + "t", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(-lEUt) + + EnumChatFormatting.RESET + + " EU/t", + StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getAverageInputVoltage()) + + EnumChatFormatting.RESET + + " EU/t(*" + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getMaxInputAmps()) + + EnumChatFormatting.RESET + + "A) " + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + GTValues.VN[GTUtility.getTier(getAverageInputVoltage())] + + EnumChatFormatting.RESET, + "Parallels: " + EnumChatFormatting.BLUE + paras + EnumChatFormatting.RESET, + "Speed Bonus: " + EnumChatFormatting.BLUE + moreSpeed + "%" + EnumChatFormatting.RESET, + "Energy Discount: " + EnumChatFormatting.BLUE + lessEnergy + "%" + EnumChatFormatting.RESET, + "-----------------------------------------" }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMegaAlloyBlastSmelter(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(15)), + TextureFactory.builder() + .addIcon(TexturesGtBlock.oMCAMegaAlloyBlastSmelterActive) + .extFacing() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(15)), + TextureFactory.builder() + .addIcon(TexturesGtBlock.oMCAMegaAlloyBlastSmelter) + .extFacing() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(15)) }; + } + + @Override + public RecipeMap getRecipeMap() { + return GTPPRecipeMaps.alloyBlastSmelterRecipes; + } + + public HeatingCoilLevel getCoilLevel() { + return coilLevel; + } + + public void setCoilLevel(HeatingCoilLevel coilLevel) { + this.coilLevel = coilLevel; + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + // Lock to single recipe + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + } else { + inputSeparation = !inputSeparation; + GTUtility.sendChatToPlayer( + aPlayer, + StatCollector.translateToLocal("GT5U.machines.separatebus") + " " + inputSeparation); + } + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack aTool) { + if (aPlayer.isSneaking()) { + batchMode = !batchMode; + if (batchMode) { + GTUtility.sendChatToPlayer(aPlayer, "Batch recipes."); + } else { + GTUtility.sendChatToPlayer(aPlayer, "Don't batch recipes."); + } + } + + return true; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 102400; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece("main", stackSize, 5, 16, 0, elementBudget, env, false, true); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + this.glassTier = aNBT.getByte("glassTier"); + if (!aNBT.hasKey(INPUT_SEPARATION_NBT_KEY)) { + inputSeparation = aNBT.getBoolean("separateBusses"); + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setByte("glassTier", glassTier); + super.saveNBTData(aNBT); + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java deleted file mode 100644 index 84fac40265..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Gas.java +++ /dev/null @@ -1,208 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; - -import static gtPlusPlus.core.lib.CORE.RANDOM; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import gregtech.api.enums.Materials; -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.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.recipe.maps.FuelBackend; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -@SuppressWarnings("deprecation") -public class GT_MTE_LargeTurbine_Gas extends GregtechMetaTileEntity_LargerTurbineBase { - - private static final HashSet BLACKLIST = new HashSet<>(); - - static { - BLACKLIST.add( - Materials.Benzene.getFluid(0) - .getFluid()); - } - - public GT_MTE_LargeTurbine_Gas(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MTE_LargeTurbine_Gas(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MTE_LargeTurbine_Gas(mName); - } - - @Override - public int getCasingMeta() { - return 3; - } - - @Override - public int getCasingTextureIndex() { - return 58; - } - - @Override - protected boolean requiresOutputHatch() { - return false; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return 4000; - } - - @Override - public int getFuelValue(FluidStack aLiquid) { - if (aLiquid == null) { - return 0; - } - GT_Recipe tFuel = getRecipeMap().getBackend() - .findFuel(aLiquid); - if (tFuel != null) { - return tFuel.mSpecialValue; - } - return 0; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.gasTurbineFuels; - } - - @Override - public int getRecipeCatalystPriority() { - return -20; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - List fluids = getStoredFluids(); - for (FluidStack fluid : fluids) { - if (fluid != null && BLACKLIST.contains(fluid.getFluid())) { - return SimpleCheckRecipeResult.ofFailure("fuel_blacklisted"); - } - } - return super.checkProcessing(); - } - - @Override - long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { - if (aFluids.size() >= 1) { - int tEU = 0; - int actualOptimalFlow = 0; - FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. - // Doesn't matter which one. Ignore the rest! - int fuelValue = getFuelValue(firstFuelType); - // log("Fuel Value of "+aFluids.get(0).getLocalizedName()+" is "+fuelValue+"eu"); - if (aOptFlow < fuelValue) { - // turbine too weak and/or fuel too powerful - // at least consume 1L - this.realOptFlow = 1; - // wastes the extra fuel and generate aOptFlow directly - depleteInput(new FluidStack(firstFuelType, 1)); - this.storedFluid += 1; - return GT_Utility.safeInt((long) aOptFlow * (long) aBaseEff / 10000L); - } - - actualOptimalFlow = GT_Utility.safeInt((long) (aOptFlow * (double) flowMultipliers[1] / fuelValue)); - this.realOptFlow = actualOptimalFlow; - - int remainingFlow = GT_Utility.safeInt((long) (actualOptimalFlow * 1.25f)); // Allowed to use up to 125% of - // optimal flow. Variable - // required outside of loop for - // multi-hatch scenarios. - int flow = 0; - int totalFlow = 0; - - storedFluid = 0; - for (FluidStack aFluid : aFluids) { - if (aFluid.isFluidEqual(firstFuelType)) { - flow = Math.min(aFluid.amount, remainingFlow); // try to use up to 125% of optimal flow w/o - // exceeding remainingFlow - depleteInput(new FluidStack(aFluid, flow)); // deplete that amount - this.storedFluid += aFluid.amount; - remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches - totalFlow += flow; // track total input used - } - } - if (totalFlow <= 0) return 0; - tEU = GT_Utility.safeInt((long) totalFlow * fuelValue); - - if (totalFlow == actualOptimalFlow) { - tEU = GT_Utility.safeInt((long) tEU * (long) aBaseEff / 10000L); - } else { - float efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); - tEU *= efficiency; - tEU = GT_Utility.safeInt((long) tEU * (long) aBaseEff / 10000L); - } - - return tEU; - } - return 0; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return (RANDOM.nextInt(4) == 0) ? 0 : 1; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - } - - @Override - public String getMachineType() { - return "Large Gas Turbine"; - } - - @Override - protected String getTurbineType() { - return "Gas"; - } - - @Override - protected String getCasingName() { - return "Reinforced Gas Turbine Casing"; - } - - @Override - protected ITexture getTextureFrontFace() { - return new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced); - } - - @Override - protected ITexture getTextureFrontFaceActive() { - return new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java deleted file mode 100644 index db99b52be1..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Plasma.java +++ /dev/null @@ -1,314 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; - -import java.util.ArrayList; -import java.util.HashSet; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.recipe.maps.FuelBackend; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Turbine; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -@SuppressWarnings("deprecation") -public class GT_MTE_LargeTurbine_Plasma extends GregtechMetaTileEntity_LargerTurbineBase { - - private static final HashSet BLACKLIST = new HashSet<>(); - - public GT_MTE_LargeTurbine_Plasma(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MTE_LargeTurbine_Plasma(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MTE_LargeTurbine_Plasma(mName); - } - - @Override - public int getCasingMeta() { - return 4; - } - - @Override - public int getCasingTextureIndex() { - return 60; - } - - @Override - protected boolean requiresOutputHatch() { - return true; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return 0; - } - - @Override - public int getFuelValue(FluidStack aLiquid) { - if (aLiquid == null) { - return 0; - } - GT_Recipe tFuel = getRecipeMap().getBackend() - .findFuel(aLiquid); - if (tFuel != null) { - return tFuel.mSpecialValue; - } - return 0; - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.plasmaFuels; - } - - @Override - public int getRecipeCatalystPriority() { - return -20; - } - - @Override - protected boolean filtersFluid() { - return false; - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - - try { - ArrayList aEmptyTurbineRotorHatches = getEmptyTurbineAssemblies(); - if (aEmptyTurbineRotorHatches.size() > 0) { - hatch: for (GT_MetaTileEntity_Hatch_Turbine aHatch : aEmptyTurbineRotorHatches) { - ArrayList aTurbines = getAllBufferedTurbines(); - for (ItemStack aTurbineItem : aTurbines) { - if (aTurbineItem == null) { - continue; - } - if (aHatch.insertTurbine(aTurbineItem.copy())) { - depleteTurbineFromStock(aTurbineItem); - continue hatch; - } - } - } - } - - if (getEmptyTurbineAssemblies().size() > 0 || !areAllTurbinesTheSame()) { - stopMachine(ShutDownReasonRegistry.NO_TURBINE); - return CheckRecipeResultRegistry.NO_TURBINE_FOUND; - } - - ArrayList tFluids = getStoredFluids(); - - if (tFluids.size() > 0) { - for (FluidStack fluid : tFluids) { - if (fluid != null && BLACKLIST.contains(fluid.getFluid())) { - return SimpleCheckRecipeResult.ofFailure("fuel_blacklisted"); - } - } - if (baseEff == 0 || optFlow == 0 - || counter >= 512 - || this.getBaseMetaTileEntity() - .hasWorkJustBeenEnabled() - || this.getBaseMetaTileEntity() - .hasInventoryBeenModified()) { - counter = 0; - - float aTotalBaseEff = 0; - float aTotalOptimalFlow = 0; - - ItemStack aStack = getFullTurbineAssemblies().get(0) - .getTurbine(); - aTotalBaseEff += GT_Utility.safeInt( - (long) ((5F + ((GT_MetaGenerated_Tool) aStack.getItem()).getToolCombatDamage(aStack)) * 1000F)); - aTotalOptimalFlow += GT_Utility.safeInt( - (long) Math.max( - Float.MIN_NORMAL, - ((GT_MetaGenerated_Tool) aStack.getItem()).getToolStats(aStack) - .getSpeedMultiplier() * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed - * 50)); - - // Calculate total EU/t (as shown on turbine tooltip (Fast mode doesn't affect)) - double aEUPerTurbine = aTotalOptimalFlow * 40 - * 0.0105 - * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mPlasmaMultiplier - * (50.0f + (10.0f * ((GT_MetaGenerated_Tool) aStack.getItem()).getToolCombatDamage(aStack))); - aTotalOptimalFlow *= getSpeedMultiplier(); - - if (aTotalOptimalFlow < 0) { - aTotalOptimalFlow = 100; - } - - flowMultipliers[0] = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mSteamMultiplier; - flowMultipliers[1] = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mGasMultiplier; - flowMultipliers[2] = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mPlasmaMultiplier; - baseEff = MathUtils.roundToClosestInt(aTotalBaseEff); - optFlow = MathUtils.roundToClosestInt(aTotalOptimalFlow); - euPerTurbine = MathUtils.roundToClosestInt(aEUPerTurbine); - if (optFlow <= 0 || baseEff <= 0) { - stopMachine(ShutDownReasonRegistry.NONE); // in case the turbine got removed - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - } else { - counter++; - } - } - - // How much the turbine should be producing with this flow - long newPower = fluidIntoPower(tFluids, optFlow, baseEff, flowMultipliers); - - // Reduce produced power depending on the ratio between fuel value and turbine EU/t with the following - // formula: - // EU/t = EU/t * MIN(1, ( ( (FuelValue / 200) ^ 2 ) / EUPerTurbine)) - int fuelValue = 0; - if (tFluids.size() > 0) { - fuelValue = getFuelValue(new FluidStack(tFluids.get(0), 0)); - } - float magicValue = (fuelValue * 0.005f) * (fuelValue * 0.005f); - float efficiencyLoss = Math.min(1.0f, magicValue / euPerTurbine); - newPower *= efficiencyLoss; - - long difference = newPower - this.lEUt; // difference between current output and new output - - // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the - // difference in power level (per tick) - // This is how much the turbine can actually change during this tick - int maxChangeAllowed = Math.max(10, GT_Utility.safeInt((long) Math.abs(difference) / 100)); - - if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed - // change - int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative. - this.lEUt += change; // Apply the change - } else { - this.lEUt = newPower; - } - if (this.lEUt <= 0) { - this.lEUt = 0; - this.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } else { - this.mMaxProgresstime = 20; - this.mEfficiencyIncrease = 10; - // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. - // Play sounds (GT++ addition - GT multiblocks play no sounds) - enableAllTurbineHatches(); - return CheckRecipeResultRegistry.GENERATING; - } - } catch (Throwable t) { - t.printStackTrace(); - } - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - @Override - long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { - if (aFluids.size() >= 1) { - aOptFlow *= 800; // CHANGED THINGS HERE, check recipe runs once per 20 ticks - int tEU = 0; - - int actualOptimalFlow = 0; - - FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. - // Doesn't matter which one. Ignore the rest! - int fuelValue = getFuelValue(firstFuelType); - actualOptimalFlow = GT_Utility - .safeInt((long) Math.ceil((double) aOptFlow * (double) flowMultipliers[2] / (double) fuelValue)); - this.realOptFlow = actualOptimalFlow; // For scanner info - - int remainingFlow = GT_Utility.safeInt((long) (actualOptimalFlow * 1.25f)); // Allowed to use up to 125% of - // optimal flow. Variable - // required outside of loop for - // multi-hatch scenarios. - int flow = 0; - int totalFlow = 0; - - storedFluid = 0; - for (FluidStack aFluid : aFluids) { - if (aFluid.isFluidEqual(firstFuelType)) { - flow = Math.min(aFluid.amount, remainingFlow); // try to use up w/o exceeding remainingFlow - depleteInput(new FluidStack(aFluid, flow)); // deplete that amount - this.storedFluid += aFluid.amount; - remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches - totalFlow += flow; // track total input used - } - } - String fn = FluidRegistry.getFluidName(firstFuelType); - String[] nameSegments = fn.split("\\.", 2); - if (nameSegments.length == 2) { - String outputName = nameSegments[1]; - FluidStack output = FluidRegistry.getFluidStack(outputName, totalFlow); - if (output == null) { - output = FluidRegistry.getFluidStack("molten." + outputName, totalFlow); - } - if (output != null) { - addOutput(output); - } - } - if (totalFlow <= 0) return 0; - tEU = GT_Utility.safeInt((long) ((fuelValue / 20D) * (double) totalFlow)); - - if (totalFlow == actualOptimalFlow) { - tEU = GT_Utility.safeInt((long) (aBaseEff / 10000D * tEU)); - } else { - double efficiency = 1.0D - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); - - tEU = (int) (tEU * efficiency); - tEU = GT_Utility.safeInt((long) (aBaseEff / 10000D * tEU)); - } - - return tEU; - } - return 0; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 1; - } - - @Override - public String getMachineType() { - return "Large Plasma Turbine"; - } - - @Override - protected String getTurbineType() { - return "Plasma"; - } - - @Override - protected String getCasingName() { - return "Reinforced Plasma Turbine Casing"; - } - - @Override - protected ITexture getTextureFrontFace() { - return new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced); - } - - @Override - protected ITexture getTextureFrontFaceActive() { - return new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SCSteam.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SCSteam.java deleted file mode 100644 index 6c3db51577..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SCSteam.java +++ /dev/null @@ -1,126 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; - -import java.util.ArrayList; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MTE_LargeTurbine_SCSteam extends GregtechMetaTileEntity_LargerTurbineBase { - - public GT_MTE_LargeTurbine_SCSteam(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MTE_LargeTurbine_SCSteam(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MTE_LargeTurbine_SCSteam(mName); - } - - @Override - public int getCasingMeta() { - return 15; - } - - @Override - public int getCasingTextureIndex() { - return 1538; - } - - @Override - protected boolean requiresOutputHatch() { - return true; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return 0; - } - - @Override - public int getFuelValue(FluidStack aLiquid) { - return 0; - } - - @Override - long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { - int tEU = 0; - int totalFlow = 0; // Byproducts are based on actual flow - int flow = 0; - // Variable required outside of loop for - // multi-hatch scenarios. - this.realOptFlow = aOptFlow; - // this.realOptFlow = (double) aOptFlow * (double) flowMultipliers[0]; - // Will there be an multiplier for SC? - int remainingFlow = MathUtils.safeInt((long) (realOptFlow * 1.25f)); // Allowed to use up to - // 125% of optimal flow. - - storedFluid = 0; - FluidStack tSCSteam = FluidRegistry.getFluidStack("supercriticalsteam", 1); - for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { - if (GT_Utility.areFluidsEqual(aFluids.get(i), tSCSteam, true)) { - flow = Math.min(aFluids.get(i).amount, remainingFlow); // try to use up w/o exceeding remainingFlow - depleteInput(new FluidStack(aFluids.get(i), flow)); // deplete that amount - this.storedFluid += aFluids.get(i).amount; - remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches - totalFlow += flow; // track total input used - } - } - if (totalFlow <= 0) return 0; - tEU = totalFlow; - addOutput(GT_ModHandler.getSteam(totalFlow * 100)); - if (totalFlow != realOptFlow) { - float efficiency = 1.0f - Math.abs((totalFlow - (float) realOptFlow) / (float) realOptFlow); - // if(totalFlow>aOptFlow){efficiency = 1.0f;} - tEU *= efficiency; - tEU = Math.max(1, MathUtils.safeInt((long) tEU * (long) aBaseEff / 10000L)); - } else { - tEU = MathUtils.safeInt((long) tEU * (long) aBaseEff / 10000L); - } - - return tEU * 100L; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 8; - } - - @Override - public String getMachineType() { - return "Large Supercritical Steam Turbine"; - } - - @Override - protected String getTurbineType() { - return "Supercritical Steam"; - } - - @Override - protected String getCasingName() { - return "Reinforced SC Turbine Casing"; - } - - @Override - protected ITexture getTextureFrontFace() { - return TextureFactory.of(TexturesGtBlock.Overlay_Machine_Controller_Advanced); - } - - @Override - protected ITexture getTextureFrontFaceActive() { - return TextureFactory.of(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java deleted file mode 100644 index d1346d3a51..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_SHSteam.java +++ /dev/null @@ -1,204 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; - -import java.util.ArrayList; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.GT_Mod; -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_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -@SuppressWarnings("deprecation") -public class GT_MTE_LargeTurbine_SHSteam extends GregtechMetaTileEntity_LargerTurbineBase { - - public boolean achievement = false; - private boolean looseFit = false; - - public GT_MTE_LargeTurbine_SHSteam(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MTE_LargeTurbine_SHSteam(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MTE_LargeTurbine_SHSteam(mName); - } - - @Override - public int getCasingMeta() { - return 2; - } - - @Override - public int getCasingTextureIndex() { - return 59; - } - - @Override - protected boolean requiresOutputHatch() { - return true; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return 0; - } - - @Override - public int getFuelValue(FluidStack aLiquid) { - return 0; - } - - @Override - long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { - if (looseFit) { - aOptFlow *= 4; - if (aBaseEff > 10000) { - aOptFlow *= Math.pow(1.1f, ((aBaseEff - 7500) / 10000F) * 20f); - aBaseEff = 7500; - } else if (aBaseEff > 7500) { - aOptFlow *= Math.pow(1.1f, ((aBaseEff - 7500) / 10000F) * 20f); - aBaseEff *= 0.75f; - } else { - aBaseEff *= 0.75f; - } - } - // prevent overflow like that in SC Steam - long tEU = 0; - int totalFlow = 0; // Byproducts are based on actual flow - int flow = 0; - - // Variable required outside of loop for - // multi-hatch scenarios. - this.realOptFlow = aOptFlow * flowMultipliers[0]; - - int remainingFlow = MathUtils.safeInt((long) (realOptFlow * 1.25f)); // Allowed to use up to - // 125% of optimal flow. - - storedFluid = 0; - for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { - String fluidName = aFluids.get(i) - .getFluid() - .getUnlocalizedName(aFluids.get(i)); - if (fluidName.equals("ic2.fluidSuperheatedSteam")) { - flow = Math.min(aFluids.get(i).amount, remainingFlow); // try to use up w/o exceeding remainingFlow - depleteInput(new FluidStack(aFluids.get(i), flow)); // deplete that amount - this.storedFluid += aFluids.get(i).amount; - remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches - totalFlow += flow; // track total input used - if (!achievement) { - try { - GT_Mod.achievements.issueAchievement( - this.getBaseMetaTileEntity() - .getWorld() - .getPlayerEntityByName( - this.getBaseMetaTileEntity() - .getOwnerName()), - "efficientsteam"); - } catch (Exception e) {} - achievement = true; - } - } else if (fluidName.equals("fluid.steam") || fluidName.equals("ic2.fluidSteam") - || fluidName.equals("fluid.mfr.steam.still.name")) { - depleteInput(new FluidStack(aFluids.get(i), aFluids.get(i).amount)); - } - } - if (totalFlow <= 0) return 0; - tEU = totalFlow; - addOutput(GT_ModHandler.getSteam(totalFlow)); - if (totalFlow != realOptFlow) { - float efficiency = 1.0f - Math.abs((totalFlow - (float) realOptFlow) / (float) realOptFlow); - // if(totalFlow>aOptFlow){efficiency = 1.0f;} - tEU *= efficiency; - tEU = Math.max(1L, tEU * aBaseEff / 10000L); - } else { - tEU = tEU * aBaseEff / 10000L; - } - - return tEU; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - // Using a screwdriver to change modes should allow for any combination of Slow/Fast and Tight/Loose Mode - // Whenever there's a mode switch, there will be two messages on the player chat - // The two messages specify which two modes the turbine is on after the change - // (Tight/Loose changes on every action, Slow/Fast changes every other action, all pairs are cycled this way) - if (side == getBaseMetaTileEntity().getFrontFacing()) { - looseFit ^= true; - GT_Utility.sendChatToPlayer( - aPlayer, - looseFit ? "Fitting is Loose (Higher Flow)" : "Fitting is Tight (Higher Efficiency)"); - } - - if (looseFit) { - super.onModeChangeByScrewdriver(side, aPlayer, aX, aY, aZ); - } else if (mFastMode) { - PlayerUtils.messagePlayer(aPlayer, "Running in Fast (48x) Mode."); - } else { - PlayerUtils.messagePlayer(aPlayer, "Running in Slow (16x) Mode."); - } - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return (looseFit && CORE.RANDOM.nextInt(4) == 0) ? 0 : 1; - } - - @Override - public boolean isLooseMode() { - return looseFit; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("turbineFitting", looseFit); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - looseFit = aNBT.getBoolean("turbineFitting"); - } - - @Override - public String getMachineType() { - return "Large Super-heated Steam Turbine"; - } - - @Override - protected String getTurbineType() { - return "Super-heated Steam"; - } - - @Override - protected String getCasingName() { - return "Reinforced HP Steam Turbine Casing"; - } - - @Override - protected ITexture getTextureFrontFace() { - return new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced); - } - - @Override - protected ITexture getTextureFrontFaceActive() { - return new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java deleted file mode 100644 index c882b84aab..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GT_MTE_LargeTurbine_Steam.java +++ /dev/null @@ -1,215 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; - -import static gtPlusPlus.core.lib.CORE.RANDOM; - -import java.util.ArrayList; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.GT_Mod; -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_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -@SuppressWarnings("deprecation") -public class GT_MTE_LargeTurbine_Steam extends GregtechMetaTileEntity_LargerTurbineBase { - - private float water; - private boolean achievement = false; - private boolean looseFit = false; - - public GT_MTE_LargeTurbine_Steam(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MTE_LargeTurbine_Steam(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MTE_LargeTurbine_Steam(mName); - } - - @Override - public int getCasingMeta() { - return 1; - } - - @Override - public int getCasingTextureIndex() { - return 16; - } - - @Override - protected boolean requiresOutputHatch() { - return true; - } - - @Override - public int getPollutionPerSecond(ItemStack aStack) { - return 0; - } - - private int useWater(float input) { - water = water + input; - int usage = (int) water; - water = water - usage; - return usage; - } - - @Override - public int getFuelValue(FluidStack aLiquid) { - return 0; - } - - @Override - long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { - if (looseFit) { - aOptFlow *= 4; - if (aBaseEff > 10000) { - aOptFlow *= Math.pow(1.1f, ((aBaseEff - 7500) / 10000F) * 20f); - aBaseEff = 7500; - } else if (aBaseEff > 7500) { - aOptFlow *= Math.pow(1.1f, ((aBaseEff - 7500) / 10000F) * 20f); - aBaseEff *= 0.75f; - } else { - aBaseEff *= 0.75f; - } - } - // prevent overflow like that in SC Steam - long tEU = 0; - int totalFlow = 0; // Byproducts are based on actual flow - int flow = 0; - - // Variable required outside of loop for - // multi-hatch scenarios. - this.realOptFlow = aOptFlow * flowMultipliers[0]; - - int remainingFlow = MathUtils.safeInt((long) (realOptFlow * 1.25f)); // Allowed to - // use up to - // 125% of - // optimal flow. - - storedFluid = 0; - for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { // loop through each hatch; extract inputs and - // track totals. - String fluidName = aFluids.get(i) - .getFluid() - .getUnlocalizedName(aFluids.get(i)); - if (fluidName.equals("fluid.steam") || fluidName.equals("ic2.fluidSteam") - || fluidName.equals("fluid.mfr.steam.still.name")) { - flow = Math.min(aFluids.get(i).amount, remainingFlow); // try to use up w/o exceeding remainingFlow - depleteInput(new FluidStack(aFluids.get(i), flow)); // deplete that amount - this.storedFluid += aFluids.get(i).amount; - remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches - totalFlow += flow; // track total input used - if (!achievement) { - GT_Mod.achievements.issueAchievement( - this.getBaseMetaTileEntity() - .getWorld() - .getPlayerEntityByName( - this.getBaseMetaTileEntity() - .getOwnerName()), - "muchsteam"); - achievement = true; - } - } else if (fluidName.equals("ic2.fluidSuperheatedSteam")) { - depleteInput(new FluidStack(aFluids.get(i), aFluids.get(i).amount)); - } - } - if (totalFlow <= 0) return 0; - tEU = totalFlow; - int waterToOutput = useWater(totalFlow / 160.0f); - addOutput(GT_ModHandler.getDistilledWater(waterToOutput)); - if (totalFlow != realOptFlow) { - float efficiency = 1.0f - Math.abs((totalFlow - (float) realOptFlow) / (float) realOptFlow); - // if(totalFlow>aOptFlow){efficiency = 1.0f;} - tEU *= efficiency; - tEU = Math.max(1L, tEU * aBaseEff / 20000L); - } else { - tEU = tEU * aBaseEff / 20000L; - } - - return tEU; - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - // Using a screwdriver to change modes should allow for any combination of Slow/Fast and Tight/Loose Mode - // Whenever there's a mode switch, there will be two messages on the player chat - // The two messages specify which two modes the turbine is on after the change - // (Tight/Loose changes on every action, Slow/Fast changes every other action, all pairs are cycled this way) - if (side == getBaseMetaTileEntity().getFrontFacing()) { - looseFit ^= true; - GT_Utility.sendChatToPlayer( - aPlayer, - looseFit ? "Fitting: Loose - More Flow" : "Fitting: Tight - More Efficiency"); - } - - if (looseFit) { - super.onModeChangeByScrewdriver(side, aPlayer, aX, aY, aZ); - } else if (mFastMode) { - PlayerUtils.messagePlayer(aPlayer, "Running in Fast (48x) Mode."); - } else { - PlayerUtils.messagePlayer(aPlayer, "Running in Slow (16x) Mode."); - } - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return (looseFit && RANDOM.nextInt(4) == 0) ? 0 : 1; - } - - @Override - public boolean isLooseMode() { - return looseFit; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("turbineFitting", looseFit); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - looseFit = aNBT.getBoolean("turbineFitting"); - } - - @Override - public String getMachineType() { - return "Large Steam Turbine"; - } - - @Override - protected String getTurbineType() { - return "Steam"; - } - - @Override - protected String getCasingName() { - return "Reinforced Steam Turbine Casing"; - } - - @Override - protected ITexture getTextureFrontFace() { - return new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced); - } - - @Override - protected ITexture getTextureFrontFaceActive() { - return new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java deleted file mode 100644 index c343d170f2..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/GregtechMetaTileEntity_LargerTurbineBase.java +++ /dev/null @@ -1,886 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static gregtech.api.enums.GT_HatchElement.Dynamo; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.Muffler; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase.GTPPHatchElement.TTDynamo; - -import java.util.ArrayList; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.enums.Materials; -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.items.GT_MetaGenerated_Tool; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Muffler; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.api.util.shutdown.ShutDownReasonRegistry; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.api.objects.minecraft.BlockPos; -import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Turbine; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; - -public abstract class GregtechMetaTileEntity_LargerTurbineBase - extends GregtechMeta_MultiBlockBase implements ISurvivalConstructable { - - protected int baseEff = 0; - protected long optFlow = 0; - protected long euPerTurbine = 0; - protected double realOptFlow = 0; - protected int storedFluid = 0; - protected int counter = 0; - protected boolean mFastMode = false; - protected double mufflerReduction = 1; - protected float[] flowMultipliers = new float[] { 1, 1, 1 }; - - public ITexture frontFace; - public ITexture frontFaceActive; - - public ArrayList mTurbineRotorHatches = new ArrayList<>(); - - public GregtechMetaTileEntity_LargerTurbineBase(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - frontFace = getTextureFrontFace(); - frontFaceActive = getTextureFrontFaceActive(); - } - - public GregtechMetaTileEntity_LargerTurbineBase(String aName) { - super(aName); - frontFace = getTextureFrontFace(); - frontFaceActive = getTextureFrontFaceActive(); - } - - protected abstract ITexture getTextureFrontFace(); - - protected abstract ITexture getTextureFrontFaceActive(); - - protected abstract String getTurbineType(); - - protected abstract String getCasingName(); - - protected abstract boolean requiresOutputHatch(); - - @Override - protected final GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType(getMachineType()) - .addInfo("Controller Block for the XL " + getTurbineType() + " Turbine") - .addInfo("Runs as fast as 16 Large Turbines of the same type, takes the space of 12") - .addInfo("Right-click with screwdriver to enable Fast Mode, to run it even faster") - .addInfo("Optimal flow will increase or decrease accordingly on mode switch") - .addInfo("Fast Mode increases speed to 48x instead of 16x, with some penalties") - .addInfo("Maintenance problems and turbine damage happen 12x as often in Fast Mode"); - if (getTurbineType().contains("Steam")) { - tt.addInfo("XL Steam Turbines can use Loose Mode with either Slow or Fast Mode"); - } - if (getTurbineType().equals("Plasma")) { - tt.addInfo("Plasma fuel efficiency is lower for high tier turbines when using low-grade plasmas") - .addInfo("Efficiency = ((FuelValue / 200,000)^2) / (EU per Turbine)"); - } - tt.addPollutionAmount(getPollutionPerSecond(null)) - .addInfo("Pollution is 3x higher in Fast Mode") - .addSeparator() - .beginStructureBlock(7, 9, 7, false) - .addController("Top Middle") - .addCasingInfoMin(getCasingName(), 360, false) - .addCasingInfoMin("Rotor Shaft", 30, false) - .addOtherStructurePart("Rotor Assembly", "Any 1 dot hint", 1) - .addInputBus("Any 4 dot hint (min 1)", 4) - .addInputHatch("Any 4 dot hint(min 1)", 4); - if (requiresOutputHatch()) { - tt.addOutputHatch("Any 4 dot hint(min 1)", 4); - } - tt.addDynamoHatch("Any 4 dot hint(min 1)", 4) - .addMaintenanceHatch("Any 4 dot hint(min 1)", 4); - if (requiresMufflers()) { - tt.addMufflerHatch("Any 7 dot hint (x4)", 7); - } - tt.toolTipFinisher(CORE.GT_Tooltip_Builder.get()); - return tt; - } - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { - - @Override - @SuppressWarnings("SpellCheckingInspection") - protected IStructureDefinition computeValue(Class type) { - return StructureDefinition.builder() - // c = turbine casing - // s = turbine shaft - // t = turbine housing - // h = dynamo/maint - // m = muffler - .addShape( - STRUCTURE_PIECE_MAIN, - (new String[][] { { "ccchccc", "ccccccc", "ccmmmcc", "ccm~mcc", "ccmmmcc", "ccccccc", "ccchccc" }, - { "ctchctc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "ctchctc" }, - { "ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc" }, - { "ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc" }, - { "ctchctc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "ctchctc" }, - { "ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc" }, - { "ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc" }, - { "ctchctc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "ctchctc" }, - { "ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc" }, })) - .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMeta()))) - .addElement('s', lazy(t -> ofBlock(t.getShaftBlock(), t.getTurbineShaftMeta()))) - .addElement( - 't', - lazy( - t -> buildHatchAdder(GregtechMetaTileEntity_LargerTurbineBase.class) - .adder(GregtechMetaTileEntity_LargerTurbineBase::addTurbineHatch) - .hatchClass(GT_MetaTileEntity_Hatch_Turbine.class) - .casingIndex(t.getCasingTextureIndex()) - .dot(1) - .build())) - .addElement( - 'h', - lazy( - t -> buildHatchAdder(GregtechMetaTileEntity_LargerTurbineBase.class) - .atLeast(InputBus, InputHatch, OutputHatch, Dynamo.or(TTDynamo), Maintenance) - .casingIndex(t.getCasingTextureIndex()) - .dot(4) - .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) - .addElement( - 'm', - lazy( - t -> buildHatchAdder(GregtechMetaTileEntity_LargerTurbineBase.class).atLeast(Muffler) - .casingIndex(t.getCasingTextureIndex()) - .dot(7) - .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) - .build(); - } - }; - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION.get(getClass()); - } - - private boolean requiresMufflers() { - if (!PollutionUtils.isPollutionEnabled()) { - return false; - } - return getPollutionPerSecond(null) > 0; - } - - public final double getMufflerReduction() { - double totalReduction = 0; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - totalReduction += ((double) tHatch.calculatePollutionReduction(100)) / 100; - } - return totalReduction / 4; - } - - @Override - public void clearHatches() { - super.clearHatches(); - mTurbineRotorHatches.clear(); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - // we do not check for casing count here. the bare minimal is 372 but we only require 360 - boolean aStructure = checkPiece(STRUCTURE_PIECE_MAIN, 3, 3, 0); - log("Structure Check: " + aStructure); - if (mTurbineRotorHatches.size() != 12 || mMaintenanceHatches.size() != 1 - || (mDynamoHatches.size() < 1 && mTecTechDynamoHatches.size() < 1) - || (requiresMufflers() && mMufflerHatches.size() != 4) - || mInputBusses.size() < 1 - || mInputHatches.size() < 1 - || (requiresOutputHatch() && mOutputHatches.size() < 1)) { - log( - "Bad Hatches - Turbine Housings: " + mTurbineRotorHatches.size() - + ", Maint: " - + mMaintenanceHatches.size() - + ", Dynamo: " - + mDynamoHatches.size() - + ", Muffler: " - + mMufflerHatches.size() - + ", Input Buses: " - + mInputBusses.size() - + ", Input Hatches: " - + mInputHatches.size() - + ", Output Hatches: " - + mOutputHatches.size()); - return false; - } - mufflerReduction = getMufflerReduction(); - return aStructure; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 3, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 2); - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 3, 0, realBudget, env, false, true); - } - - public boolean addTurbineHatch(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { - if (aTileEntity == null) { - return false; - } - final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) { - return false; - } - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Turbine aTurbineHatch) { - log("Found GT_MetaTileEntity_Hatch_Turbine"); - updateTexture(aTileEntity, aBaseCasingIndex); - IGregTechTileEntity g = this.getBaseMetaTileEntity(); - if (aTurbineHatch.setController(new BlockPos(g.getXCoord(), g.getYCoord(), g.getZCoord(), g.getWorld()))) { - boolean aDidAdd = this.mTurbineRotorHatches.add(aTurbineHatch); - Logger.INFO("Injected Controller into Turbine Assembly. Found: " + this.mTurbineRotorHatches.size()); - return aDidAdd; - } else { - Logger.INFO("Failed to inject controller into Turbine Assembly Hatch."); - } - } - log("Bad Turbine Housing"); - return false; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return getMaxEfficiency(aStack) > 0; - } - - public Block getCasingBlock() { - return ModBlocks.blockSpecialMultiCasings; - } - - public final Block getShaftBlock() { - return ModBlocks.blockSpecialMultiCasings; - } - - public abstract int getCasingMeta(); - - public byte getTurbineShaftMeta() { - return 0; - } - - public abstract int getCasingTextureIndex(); - - public abstract int getFuelValue(FluidStack aLiquid); - - public static boolean isValidTurbine(ItemStack aTurbine) { - return (aTurbine != null && aTurbine.getItem() instanceof GT_MetaGenerated_Tool - && aTurbine.getItemDamage() >= 170 - && aTurbine.getItemDamage() <= 176); - } - - protected ArrayList getAllBufferedTurbines() { - startRecipeProcessing(); - ArrayList aTurbinesInStorage = new ArrayList<>(); - for (ItemStack aStack : getStoredInputs()) { - if (isValidTurbine(aStack)) { - int stackSize = aStack.stackSize; - while (stackSize > 0) { - int tmpStackSize = Math.min(stackSize, aStack.getMaxStackSize()); - ItemStack copy = aStack.copy(); - copy.stackSize = tmpStackSize; - aTurbinesInStorage.add(copy); - stackSize -= tmpStackSize; - } - } - } - endRecipeProcessing(); - return aTurbinesInStorage; - } - - public boolean areAllTurbinesTheSame() { - ArrayList aTurbineAssemblies = getFullTurbineAssemblies(); - if (aTurbineAssemblies.size() < 12) { - log("Found " + aTurbineAssemblies.size() + ", expected 12."); - return false; - } - AutoMap aTurbineMats = new AutoMap<>(); - AutoMap aTurbineSizes = new AutoMap<>(); - for (GT_MetaTileEntity_Hatch_Turbine aHatch : aTurbineAssemblies) { - aTurbineMats.add(GT_MetaGenerated_Tool.getPrimaryMaterial(aHatch.getTurbine())); - aTurbineSizes.add(getTurbineSize(aHatch.getTurbine())); - } - Materials aBaseMat = aTurbineMats.get(0); - int aBaseSize = aTurbineSizes.get(0); - for (int aSize : aTurbineSizes) { - if (aBaseSize != aSize) { - return false; - } - } - for (Materials aMat : aTurbineMats) { - if (aBaseMat != aMat) { - return false; - } - } - return true; - } - - public static int getTurbineSize(ItemStack aTurbine) { - if (isValidTurbine(aTurbine)) { - if (aTurbine.getItemDamage() >= 170 && aTurbine.getItemDamage() < 172) { - return 1; - } else if (aTurbine.getItemDamage() >= 172 && aTurbine.getItemDamage() < 174) { - return 2; - } else if (aTurbine.getItemDamage() >= 174 && aTurbine.getItemDamage() < 176) { - return 3; - } else if (aTurbine.getItemDamage() >= 176 && aTurbine.getItemDamage() < 178) { - return 4; - } - } - return 0; - } - - public static String getTurbineSizeString(int aSize) { - return switch (aSize) { - case 1 -> "Small Turbine"; - case 2 -> "Turbine"; - case 3 -> "Large Turbine"; - case 4 -> "Huge Turbine"; - default -> ""; - }; - } - - protected ArrayList getEmptyTurbineAssemblies() { - ArrayList aEmptyTurbineRotorHatches = new ArrayList<>(); - // log("Checking "+mTurbineRotorHatches.size()+" Assemblies for empties."); - for (GT_MetaTileEntity_Hatch_Turbine aTurbineHatch : this.mTurbineRotorHatches) { - if (!aTurbineHatch.hasTurbine()) { - aEmptyTurbineRotorHatches.add(aTurbineHatch); - } - } - return aEmptyTurbineRotorHatches; - } - - protected ArrayList getFullTurbineAssemblies() { - ArrayList aTurbineRotorHatches = new ArrayList<>(); - // log("Checking "+mTurbineRotorHatches.size()+" Assemblies for Turbines."); - for (GT_MetaTileEntity_Hatch_Turbine aTurbineHatch : this.mTurbineRotorHatches) { - if (aTurbineHatch.hasTurbine()) { - // log("Found Assembly with Turbine."); - aTurbineRotorHatches.add(aTurbineHatch); - } - } - return aTurbineRotorHatches; - } - - protected void depleteTurbineFromStock(ItemStack aTurbine) { - if (aTurbine == null) { - return; - } - startRecipeProcessing(); - for (GT_MetaTileEntity_Hatch_InputBus aInputBus : this.mInputBusses) { - for (int slot = aInputBus.getSizeInventory() - 1; slot >= 0; slot--) { - ItemStack aStack = aInputBus.getStackInSlot(slot); - if (aStack != null && GT_Utility.areStacksEqual(aStack, aTurbine)) { - aStack.stackSize -= aTurbine.stackSize; - updateSlots(); - endRecipeProcessing(); - return; - } - } - } - endRecipeProcessing(); - } - - @Override - public @NotNull CheckRecipeResult checkProcessing() { - try { - ArrayList aEmptyTurbineRotorHatches = getEmptyTurbineAssemblies(); - if (aEmptyTurbineRotorHatches.size() > 0) { - hatch: for (GT_MetaTileEntity_Hatch_Turbine aHatch : aEmptyTurbineRotorHatches) { - ArrayList aTurbines = getAllBufferedTurbines(); - for (ItemStack aTurbineItem : aTurbines) { - if (aTurbineItem == null) { - continue; - } - if (aHatch.insertTurbine(aTurbineItem.copy())) { - depleteTurbineFromStock(aTurbineItem); - continue hatch; - } - } - } - } - - if (getEmptyTurbineAssemblies().size() > 0 || !areAllTurbinesTheSame()) { - stopMachine(ShutDownReasonRegistry.NO_TURBINE); - return CheckRecipeResultRegistry.NO_TURBINE_FOUND; - } - - ArrayList tFluids = getStoredFluids(); - - if (tFluids.size() > 0) { - if (baseEff == 0 || optFlow == 0 - || counter >= 512 - || this.getBaseMetaTileEntity() - .hasWorkJustBeenEnabled() - || this.getBaseMetaTileEntity() - .hasInventoryBeenModified()) { - counter = 0; - float aTotalBaseEff = 0; - float aTotalOptimalFlow = 0; - - ItemStack aStack = getFullTurbineAssemblies().get(0) - .getTurbine(); - aTotalBaseEff += GT_Utility.safeInt( - (long) ((5F + ((GT_MetaGenerated_Tool) aStack.getItem()).getToolCombatDamage(aStack)) * 1000F)); - aTotalOptimalFlow += GT_Utility.safeInt( - (long) Math.max( - Float.MIN_NORMAL, - ((GT_MetaGenerated_Tool) aStack.getItem()).getToolStats(aStack) - .getSpeedMultiplier() * GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mToolSpeed - * 50) - * getSpeedMultiplier()); - if (aTotalOptimalFlow < 0) { - aTotalOptimalFlow = 100; - } - - flowMultipliers[0] = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mSteamMultiplier; - flowMultipliers[1] = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mGasMultiplier; - flowMultipliers[2] = GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mPlasmaMultiplier; - baseEff = MathUtils.roundToClosestInt(aTotalBaseEff); - optFlow = MathUtils.roundToClosestInt(aTotalOptimalFlow); - if (optFlow <= 0 || baseEff <= 0) { - stopMachine(ShutDownReasonRegistry.NONE); // in case the turbine got removed - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - } else { - counter++; - } - } - - // How much the turbine should be producing with this flow - long newPower = fluidIntoPower(tFluids, optFlow, baseEff, flowMultipliers); - long difference = newPower - this.lEUt; // difference between current output and new output - - // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the - // difference in power level (per tick) - // This is how much the turbine can actually change during this tick - int maxChangeAllowed = Math.max(10, GT_Utility.safeInt(Math.abs(difference) / 100)); - - if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed - // change - int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative. - this.lEUt += change; // Apply the change - } else { - this.lEUt = newPower; - } - if (this.lEUt <= 0) { - this.lEUt = 0; - this.mEfficiency = 0; - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } else { - this.mMaxProgresstime = 1; - this.mEfficiencyIncrease = 10; - // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. - // Play sounds (GT++ addition - GT multiblocks play no sounds) - enableAllTurbineHatches(); - return CheckRecipeResultRegistry.GENERATING; - } - } catch (Throwable t) { - t.printStackTrace(); - } - return CheckRecipeResultRegistry.NO_FUEL_FOUND; - } - - @Override - public boolean doRandomMaintenanceDamage() { - if (getMaxParallelRecipes() == 0) { - stopMachine(ShutDownReasonRegistry.NO_TURBINE); - return false; - } - - if (mRuntime++ > 1000) { - mRuntime = 0; - - if (getBaseMetaTileEntity().getRandomNumber(6000) < getMaintenanceThreshold()) { - causeMaintenanceIssue(); - } - for (GT_MetaTileEntity_Hatch_Turbine aHatch : getFullTurbineAssemblies()) { - // This cycle depletes durability from the turbine rotors. - // The amount of times it is run depends on turbineDamageMultiplier - // In XL turbines, durability loss is around 5.2-5.3x faster than in singles - // To compensate for that, the mEU/t scaling is divided by 5 to make it only slightly faster - for (int i = 0; i < getTurbineDamageMultiplier(); i++) { - aHatch.damageTurbine(lEUt / 5, damageFactorLow, damageFactorHigh); - } - } - } - return true; - } - - @Override - public int getMaxParallelRecipes() { - return (getFullTurbineAssemblies().size()); - } - - abstract long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers); - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 1; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return this.getMaxParallelRecipes() == 12 ? 10000 : 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - public boolean isLooseMode() { - return false; - } - - @Override - public String[] getExtraInfoData() { - int mPollutionReduction = (int) (100 * mufflerReduction); - - String tRunning = mMaxProgresstime > 0 - ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.running.true") - + EnumChatFormatting.RESET - : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.running.false") - + EnumChatFormatting.RESET; - - String tMaintenance = getIdealStatus() == getRepairStatus() - ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") - + EnumChatFormatting.RESET - : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") - + EnumChatFormatting.RESET; - int tDura; - - StringBuilder aTurbineDamage = new StringBuilder(); - for (GT_MetaTileEntity_Hatch_Turbine aHatch : this.getFullTurbineAssemblies()) { - ItemStack aTurbine = aHatch.getTurbine(); - tDura = MathUtils.safeInt( - (long) (100.0f / GT_MetaGenerated_Tool.getToolMaxDamage(aTurbine) - * (GT_MetaGenerated_Tool.getToolDamage(aTurbine)) + 1)); - aTurbineDamage.append(EnumChatFormatting.RED) - .append(GT_Utility.formatNumbers(tDura)) - .append(EnumChatFormatting.RESET) - .append("% | "); - } - - long storedEnergy = 0; - long maxEnergy = 0; - for (GT_MetaTileEntity_Hatch_Dynamo tHatch : filterValidMTEs(mDynamoHatches)) { - storedEnergy += tHatch.getBaseMetaTileEntity() - .getStoredEU(); - maxEnergy += tHatch.getBaseMetaTileEntity() - .getEUCapacity(); - } - - boolean aIsSteam = this.getClass() - .getName() - .toLowerCase() - .contains("steam"); - - String[] ret = new String[] { - // 8 Lines available for information panels - tRunning + ": " - + EnumChatFormatting.RED - + GT_Utility.formatNumbers(((lEUt * mEfficiency) / 10000)) - + EnumChatFormatting.RESET - + " EU/t", - tMaintenance, - StatCollector.translateToLocal("GT5U.turbine.efficiency") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers((mEfficiency / 100F)) - + EnumChatFormatting.RESET - + "%", - StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(storedEnergy) - + EnumChatFormatting.RESET - + " EU / " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(maxEnergy) - + EnumChatFormatting.RESET - + " EU", - StatCollector.translateToLocal("GT5U.turbine.flow") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(MathUtils.safeInt((long) realOptFlow)) - + EnumChatFormatting.RESET - + " L/s" - + EnumChatFormatting.YELLOW - + " (" - + (isLooseMode() ? StatCollector.translateToLocal("GT5U.turbine.loose") - : StatCollector.translateToLocal("GT5U.turbine.tight")) - + ")", - StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " - + EnumChatFormatting.GOLD - + GT_Utility.formatNumbers(storedFluid) - + EnumChatFormatting.RESET - + "L", - StatCollector.translateToLocal("GT5U.turbine.dmg") + ": " + aTurbineDamage, - StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " - + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(mPollutionReduction) - + EnumChatFormatting.RESET - + " %" }; - if (!aIsSteam) ret[4] = StatCollector.translateToLocal("GT5U.turbine.flow") + ": " - + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(MathUtils.safeInt((long) realOptFlow)) - + EnumChatFormatting.RESET - + " L/t"; - return ret; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public boolean polluteEnvironment(int aPollutionLevel) { - if (this.requiresMufflers()) { - mPollution += aPollutionLevel * getPollutionMultiplier() * mufflerReduction; - for (GT_MetaTileEntity_Hatch_Muffler tHatch : filterValidMTEs(mMufflerHatches)) { - if (mPollution >= 10000) { - if (PollutionUtils.addPollution(this.getBaseMetaTileEntity(), 10000)) { - mPollution -= 10000; - } - } else { - break; - } - } - return mPollution < 10000; - } - return true; - } - - @Override - public long maxAmperesOut() { - // This should not be a hard limit, due to TecTech dynamos - if (mFastMode) { - return 64; - } else { - return 16; - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setBoolean("mFastMode", mFastMode); - super.saveNBTData(aNBT); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mFastMode = aNBT.getBoolean("mFastMode"); - super.loadNBTData(aNBT); - } - - @Override - public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - mFastMode = !mFastMode; - if (mFastMode) { - PlayerUtils.messagePlayer(aPlayer, "Running in Fast (48x) Mode."); - } else { - PlayerUtils.messagePlayer(aPlayer, "Running in Slow (16x) Mode."); - } - } - - public final ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, - ForgeDirection facing, int aColorIndex, boolean aActive, boolean aRedstone) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[1][aColorIndex + 1], - facing == side ? getFrontFacingTurbineTexture(aActive) - : Textures.BlockIcons.getCasingTextureForId(getCasingTextureIndex()) }; - } - - protected ITexture getFrontFacingTurbineTexture(boolean isActive) { - if (isActive) { - return frontFaceActive; - } - return frontFace; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - if (this.maxProgresstime() > 0 || this.getBaseMetaTileEntity() - .hasWorkJustBeenEnabled()) { - enableAllTurbineHatches(); - } - if (this.maxProgresstime() <= 0) { - stopMachine(ShutDownReasonRegistry.NONE); - } - } - } - - @Override - public void stopMachine(@NotNull ShutDownReason reason) { - baseEff = 0; - optFlow = 0; - disableAllTurbineHatches(); - super.stopMachine(reason); - } - - @Override - public void onRemoval() { - super.onRemoval(); - for (GT_MetaTileEntity_Hatch_Turbine h : this.mTurbineRotorHatches) { - h.clearController(); - } - disableAllTurbineHatches(); - this.mTurbineRotorHatches.clear(); - } - - public void enableAllTurbineHatches() { - updateTurbineHatches(this.isMachineRunning()); - } - - public void disableAllTurbineHatches() { - updateTurbineHatches(false); - } - - private Long mLastHatchUpdate; - - public void updateTurbineHatches(boolean aState) { - if (mLastHatchUpdate == null) { - mLastHatchUpdate = System.currentTimeMillis() / 1000; - } - if (this.mTurbineRotorHatches.isEmpty() || ((System.currentTimeMillis() / 1000) - mLastHatchUpdate) <= 2) { - return; - } - for (GT_MetaTileEntity_Hatch_Turbine h : filterValidMTEs(this.mTurbineRotorHatches)) { - h.setActive(aState); - } - - mLastHatchUpdate = System.currentTimeMillis() / 1000; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d == ForgeDirection.UP; - } - - /** - * Called every tick the Machine runs - */ - @Override - public boolean onRunningTick(ItemStack aStack) { - if (lEUt > 0) { - addEnergyOutput((lEUt * mEfficiency) / 10000); - return true; - } - return false; - } - - @Override - public boolean addEnergyOutput(long aEU) { - if (aEU <= 0) { - return true; - } - if (this.mAllDynamoHatches.size() > 0) { - return addEnergyOutputMultipleDynamos(aEU, true); - } - return false; - } - - @Override - public boolean addEnergyOutputMultipleDynamos(long aEU, boolean aAllowMixedVoltageDynamos) { - int injected = 0; - long aFirstVoltageFound = -1; - for (GT_MetaTileEntity_Hatch aDynamo : filterValidMTEs(mAllDynamoHatches)) { - long aVoltage = aDynamo.maxEUOutput(); - // Check against voltage to check when hatch mixing - if (aFirstVoltageFound == -1) { - aFirstVoltageFound = aVoltage; - } - } - - long leftToInject; - long aVoltage; - int aAmpsToInject; - int aRemainder; - int ampsOnCurrentHatch; - for (GT_MetaTileEntity_Hatch aDynamo : filterValidMTEs(mAllDynamoHatches)) { - leftToInject = aEU - injected; - aVoltage = aDynamo.maxEUOutput(); - aAmpsToInject = (int) (leftToInject / aVoltage); - aRemainder = (int) (leftToInject - (aAmpsToInject * aVoltage)); - ampsOnCurrentHatch = (int) Math.min(aDynamo.maxAmperesOut(), aAmpsToInject); - - // add full amps - aDynamo.getBaseMetaTileEntity() - .increaseStoredEnergyUnits(aVoltage * ampsOnCurrentHatch, false); - injected += aVoltage * ampsOnCurrentHatch; - - // add reminder - if (aRemainder > 0 && ampsOnCurrentHatch < aDynamo.maxAmperesOut()) { - aDynamo.getBaseMetaTileEntity() - .increaseStoredEnergyUnits(aRemainder, false); - injected += aRemainder; - } - } - return injected > 0; - } - - public int getSpeedMultiplier() { - return mFastMode ? 48 : 16; - } - - public int getMaintenanceThreshold() { - return mFastMode ? 12 : 1; - } - - public int getPollutionMultiplier() { - return mFastMode ? 3 : 1; - } - - public int getTurbineDamageMultiplier() { - return mFastMode ? 3 : 1; - } - - @Override - public boolean supportsBatchMode() { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineGas.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineGas.java new file mode 100644 index 0000000000..e57a7d7e77 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineGas.java @@ -0,0 +1,208 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; + +import static gtPlusPlus.core.lib.GTPPCore.RANDOM; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.recipe.maps.FuelBackend; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +@SuppressWarnings("deprecation") +public class MTELargeTurbineGas extends MTELargerTurbineBase { + + private static final HashSet BLACKLIST = new HashSet<>(); + + static { + BLACKLIST.add( + Materials.Benzene.getFluid(0) + .getFluid()); + } + + public MTELargeTurbineGas(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbineGas(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeTurbineGas(mName); + } + + @Override + public int getCasingMeta() { + return 3; + } + + @Override + public int getCasingTextureIndex() { + return 58; + } + + @Override + protected boolean requiresOutputHatch() { + return false; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 4000; + } + + @Override + public int getFuelValue(FluidStack aLiquid) { + if (aLiquid == null) { + return 0; + } + GTRecipe tFuel = getRecipeMap().getBackend() + .findFuel(aLiquid); + if (tFuel != null) { + return tFuel.mSpecialValue; + } + return 0; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.gasTurbineFuels; + } + + @Override + public int getRecipeCatalystPriority() { + return -20; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + List fluids = getStoredFluids(); + for (FluidStack fluid : fluids) { + if (fluid != null && BLACKLIST.contains(fluid.getFluid())) { + return SimpleCheckRecipeResult.ofFailure("fuel_blacklisted"); + } + } + return super.checkProcessing(); + } + + @Override + long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { + if (aFluids.size() >= 1) { + int tEU = 0; + int actualOptimalFlow = 0; + FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. + // Doesn't matter which one. Ignore the rest! + int fuelValue = getFuelValue(firstFuelType); + // log("Fuel Value of "+aFluids.get(0).getLocalizedName()+" is "+fuelValue+"eu"); + if (aOptFlow < fuelValue) { + // turbine too weak and/or fuel too powerful + // at least consume 1L + this.realOptFlow = 1; + // wastes the extra fuel and generate aOptFlow directly + depleteInput(new FluidStack(firstFuelType, 1)); + this.storedFluid += 1; + return GTUtility.safeInt((long) aOptFlow * (long) aBaseEff / 10000L); + } + + actualOptimalFlow = GTUtility.safeInt((long) (aOptFlow * (double) flowMultipliers[1] / fuelValue)); + this.realOptFlow = actualOptimalFlow; + + int remainingFlow = GTUtility.safeInt((long) (actualOptimalFlow * 1.25f)); // Allowed to use up to 125% of + // optimal flow. Variable + // required outside of loop for + // multi-hatch scenarios. + int flow = 0; + int totalFlow = 0; + + storedFluid = 0; + for (FluidStack aFluid : aFluids) { + if (aFluid.isFluidEqual(firstFuelType)) { + flow = Math.min(aFluid.amount, remainingFlow); // try to use up to 125% of optimal flow w/o + // exceeding remainingFlow + depleteInput(new FluidStack(aFluid, flow)); // deplete that amount + this.storedFluid += aFluid.amount; + remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches + totalFlow += flow; // track total input used + } + } + if (totalFlow <= 0) return 0; + tEU = GTUtility.safeInt((long) totalFlow * fuelValue); + + if (totalFlow == actualOptimalFlow) { + tEU = GTUtility.safeInt((long) tEU * (long) aBaseEff / 10000L); + } else { + float efficiency = 1.0f - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); + tEU *= efficiency; + tEU = GTUtility.safeInt((long) tEU * (long) aBaseEff / 10000L); + } + + return tEU; + } + return 0; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return (RANDOM.nextInt(4) == 0) ? 0 : 1; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + } + + @Override + public String getMachineType() { + return "Large Gas Turbine"; + } + + @Override + protected String getTurbineType() { + return "Gas"; + } + + @Override + protected String getCasingName() { + return "Reinforced Gas Turbine Casing"; + } + + @Override + protected ITexture getTextureFrontFace() { + return new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced); + } + + @Override + protected ITexture getTextureFrontFaceActive() { + return new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbinePlasma.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbinePlasma.java new file mode 100644 index 0000000000..310463e0d5 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbinePlasma.java @@ -0,0 +1,315 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; + +import java.util.ArrayList; +import java.util.HashSet; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.recipe.maps.FuelBackend; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchTurbine; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +@SuppressWarnings("deprecation") +public class MTELargeTurbinePlasma extends MTELargerTurbineBase { + + private static final HashSet BLACKLIST = new HashSet<>(); + + public MTELargeTurbinePlasma(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbinePlasma(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeTurbinePlasma(mName); + } + + @Override + public int getCasingMeta() { + return 4; + } + + @Override + public int getCasingTextureIndex() { + return 60; + } + + @Override + protected boolean requiresOutputHatch() { + return true; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 0; + } + + @Override + public int getFuelValue(FluidStack aLiquid) { + if (aLiquid == null) { + return 0; + } + GTRecipe tFuel = getRecipeMap().getBackend() + .findFuel(aLiquid); + if (tFuel != null) { + return tFuel.mSpecialValue; + } + return 0; + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.plasmaFuels; + } + + @Override + public int getRecipeCatalystPriority() { + return -20; + } + + @Override + protected boolean filtersFluid() { + return false; + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + + try { + ArrayList aEmptyTurbineRotorHatches = getEmptyTurbineAssemblies(); + if (aEmptyTurbineRotorHatches.size() > 0) { + hatch: for (MTEHatchTurbine aHatch : aEmptyTurbineRotorHatches) { + ArrayList aTurbines = getAllBufferedTurbines(); + for (ItemStack aTurbineItem : aTurbines) { + if (aTurbineItem == null) { + continue; + } + if (aHatch.insertTurbine(aTurbineItem.copy())) { + depleteTurbineFromStock(aTurbineItem); + continue hatch; + } + } + } + } + + if (getEmptyTurbineAssemblies().size() > 0 || !areAllTurbinesTheSame()) { + stopMachine(ShutDownReasonRegistry.NO_TURBINE); + return CheckRecipeResultRegistry.NO_TURBINE_FOUND; + } + + ArrayList tFluids = getStoredFluids(); + + if (tFluids.size() > 0) { + for (FluidStack fluid : tFluids) { + if (fluid != null && BLACKLIST.contains(fluid.getFluid())) { + return SimpleCheckRecipeResult.ofFailure("fuel_blacklisted"); + } + } + if (baseEff == 0 || optFlow == 0 + || counter >= 512 + || this.getBaseMetaTileEntity() + .hasWorkJustBeenEnabled() + || this.getBaseMetaTileEntity() + .hasInventoryBeenModified()) { + counter = 0; + + float aTotalBaseEff = 0; + float aTotalOptimalFlow = 0; + + ItemStack aStack = getFullTurbineAssemblies().get(0) + .getTurbine(); + aTotalBaseEff += GTUtility.safeInt( + (long) ((5F + ((MetaGeneratedTool) aStack.getItem()).getToolCombatDamage(aStack)) * 1000F)); + aTotalOptimalFlow += GTUtility + .safeInt( + (long) Math.max( + Float.MIN_NORMAL, + ((MetaGeneratedTool) aStack.getItem()).getToolStats(aStack) + .getSpeedMultiplier() * MetaGeneratedTool.getPrimaryMaterial(aStack).mToolSpeed + * 50)); + + // Calculate total EU/t (as shown on turbine tooltip (Fast mode doesn't affect)) + double aEUPerTurbine = aTotalOptimalFlow * 40 + * 0.0105 + * MetaGeneratedTool.getPrimaryMaterial(aStack).mPlasmaMultiplier + * (50.0f + (10.0f * ((MetaGeneratedTool) aStack.getItem()).getToolCombatDamage(aStack))); + aTotalOptimalFlow *= getSpeedMultiplier(); + + if (aTotalOptimalFlow < 0) { + aTotalOptimalFlow = 100; + } + + flowMultipliers[0] = MetaGeneratedTool.getPrimaryMaterial(aStack).mSteamMultiplier; + flowMultipliers[1] = MetaGeneratedTool.getPrimaryMaterial(aStack).mGasMultiplier; + flowMultipliers[2] = MetaGeneratedTool.getPrimaryMaterial(aStack).mPlasmaMultiplier; + baseEff = MathUtils.roundToClosestInt(aTotalBaseEff); + optFlow = MathUtils.roundToClosestInt(aTotalOptimalFlow); + euPerTurbine = MathUtils.roundToClosestInt(aEUPerTurbine); + if (optFlow <= 0 || baseEff <= 0) { + stopMachine(ShutDownReasonRegistry.NONE); // in case the turbine got removed + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + } else { + counter++; + } + } + + // How much the turbine should be producing with this flow + long newPower = fluidIntoPower(tFluids, optFlow, baseEff, flowMultipliers); + + // Reduce produced power depending on the ratio between fuel value and turbine EU/t with the following + // formula: + // EU/t = EU/t * MIN(1, ( ( (FuelValue / 200) ^ 2 ) / EUPerTurbine)) + int fuelValue = 0; + if (tFluids.size() > 0) { + fuelValue = getFuelValue(new FluidStack(tFluids.get(0), 0)); + } + float magicValue = (fuelValue * 0.005f) * (fuelValue * 0.005f); + float efficiencyLoss = Math.min(1.0f, magicValue / euPerTurbine); + newPower *= efficiencyLoss; + + long difference = newPower - this.lEUt; // difference between current output and new output + + // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the + // difference in power level (per tick) + // This is how much the turbine can actually change during this tick + int maxChangeAllowed = Math.max(10, GTUtility.safeInt((long) Math.abs(difference) / 100)); + + if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed + // change + int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative. + this.lEUt += change; // Apply the change + } else { + this.lEUt = newPower; + } + if (this.lEUt <= 0) { + this.lEUt = 0; + this.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } else { + this.mMaxProgresstime = 20; + this.mEfficiencyIncrease = 10; + // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. + // Play sounds (GT++ addition - GT multiblocks play no sounds) + enableAllTurbineHatches(); + return CheckRecipeResultRegistry.GENERATING; + } + } catch (Throwable t) { + t.printStackTrace(); + } + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + @Override + long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { + if (aFluids.size() >= 1) { + aOptFlow *= 800; // CHANGED THINGS HERE, check recipe runs once per 20 ticks + int tEU = 0; + + int actualOptimalFlow = 0; + + FluidStack firstFuelType = new FluidStack(aFluids.get(0), 0); // Identify a SINGLE type of fluid to process. + // Doesn't matter which one. Ignore the rest! + int fuelValue = getFuelValue(firstFuelType); + actualOptimalFlow = GTUtility + .safeInt((long) Math.ceil((double) aOptFlow * (double) flowMultipliers[2] / (double) fuelValue)); + this.realOptFlow = actualOptimalFlow; // For scanner info + + int remainingFlow = GTUtility.safeInt((long) (actualOptimalFlow * 1.25f)); // Allowed to use up to 125% of + // optimal flow. Variable + // required outside of loop for + // multi-hatch scenarios. + int flow = 0; + int totalFlow = 0; + + storedFluid = 0; + for (FluidStack aFluid : aFluids) { + if (aFluid.isFluidEqual(firstFuelType)) { + flow = Math.min(aFluid.amount, remainingFlow); // try to use up w/o exceeding remainingFlow + depleteInput(new FluidStack(aFluid, flow)); // deplete that amount + this.storedFluid += aFluid.amount; + remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches + totalFlow += flow; // track total input used + } + } + String fn = FluidRegistry.getFluidName(firstFuelType); + String[] nameSegments = fn.split("\\.", 2); + if (nameSegments.length == 2) { + String outputName = nameSegments[1]; + FluidStack output = FluidRegistry.getFluidStack(outputName, totalFlow); + if (output == null) { + output = FluidRegistry.getFluidStack("molten." + outputName, totalFlow); + } + if (output != null) { + addOutput(output); + } + } + if (totalFlow <= 0) return 0; + tEU = GTUtility.safeInt((long) ((fuelValue / 20D) * (double) totalFlow)); + + if (totalFlow == actualOptimalFlow) { + tEU = GTUtility.safeInt((long) (aBaseEff / 10000D * tEU)); + } else { + double efficiency = 1.0D - Math.abs((totalFlow - actualOptimalFlow) / (float) actualOptimalFlow); + + tEU = (int) (tEU * efficiency); + tEU = GTUtility.safeInt((long) (aBaseEff / 10000D * tEU)); + } + + return tEU; + } + return 0; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 1; + } + + @Override + public String getMachineType() { + return "Large Plasma Turbine"; + } + + @Override + protected String getTurbineType() { + return "Plasma"; + } + + @Override + protected String getCasingName() { + return "Reinforced Plasma Turbine Casing"; + } + + @Override + protected ITexture getTextureFrontFace() { + return new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced); + } + + @Override + protected ITexture getTextureFrontFaceActive() { + return new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSCSteam.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSCSteam.java new file mode 100644 index 0000000000..0ef3ef0256 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSCSteam.java @@ -0,0 +1,126 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTELargeTurbineSCSteam extends MTELargerTurbineBase { + + public MTELargeTurbineSCSteam(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbineSCSteam(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeTurbineSCSteam(mName); + } + + @Override + public int getCasingMeta() { + return 15; + } + + @Override + public int getCasingTextureIndex() { + return 1538; + } + + @Override + protected boolean requiresOutputHatch() { + return true; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 0; + } + + @Override + public int getFuelValue(FluidStack aLiquid) { + return 0; + } + + @Override + long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { + int tEU = 0; + int totalFlow = 0; // Byproducts are based on actual flow + int flow = 0; + // Variable required outside of loop for + // multi-hatch scenarios. + this.realOptFlow = aOptFlow; + // this.realOptFlow = (double) aOptFlow * (double) flowMultipliers[0]; + // Will there be an multiplier for SC? + int remainingFlow = MathUtils.safeInt((long) (realOptFlow * 1.25f)); // Allowed to use up to + // 125% of optimal flow. + + storedFluid = 0; + FluidStack tSCSteam = FluidRegistry.getFluidStack("supercriticalsteam", 1); + for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { + if (GTUtility.areFluidsEqual(aFluids.get(i), tSCSteam, true)) { + flow = Math.min(aFluids.get(i).amount, remainingFlow); // try to use up w/o exceeding remainingFlow + depleteInput(new FluidStack(aFluids.get(i), flow)); // deplete that amount + this.storedFluid += aFluids.get(i).amount; + remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches + totalFlow += flow; // track total input used + } + } + if (totalFlow <= 0) return 0; + tEU = totalFlow; + addOutput(GTModHandler.getSteam(totalFlow * 100)); + if (totalFlow != realOptFlow) { + float efficiency = 1.0f - Math.abs((totalFlow - (float) realOptFlow) / (float) realOptFlow); + // if(totalFlow>aOptFlow){efficiency = 1.0f;} + tEU *= efficiency; + tEU = Math.max(1, MathUtils.safeInt((long) tEU * (long) aBaseEff / 10000L)); + } else { + tEU = MathUtils.safeInt((long) tEU * (long) aBaseEff / 10000L); + } + + return tEU * 100L; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 8; + } + + @Override + public String getMachineType() { + return "Large Supercritical Steam Turbine"; + } + + @Override + protected String getTurbineType() { + return "Supercritical Steam"; + } + + @Override + protected String getCasingName() { + return "Reinforced SC Turbine Casing"; + } + + @Override + protected ITexture getTextureFrontFace() { + return TextureFactory.of(TexturesGtBlock.Overlay_Machine_Controller_Advanced); + } + + @Override + protected ITexture getTextureFrontFaceActive() { + return TextureFactory.of(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSHSteam.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSHSteam.java new file mode 100644 index 0000000000..7fdc36450d --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSHSteam.java @@ -0,0 +1,204 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; + +import java.util.ArrayList; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.GTMod; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +@SuppressWarnings("deprecation") +public class MTELargeTurbineSHSteam extends MTELargerTurbineBase { + + public boolean achievement = false; + private boolean looseFit = false; + + public MTELargeTurbineSHSteam(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbineSHSteam(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeTurbineSHSteam(mName); + } + + @Override + public int getCasingMeta() { + return 2; + } + + @Override + public int getCasingTextureIndex() { + return 59; + } + + @Override + protected boolean requiresOutputHatch() { + return true; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 0; + } + + @Override + public int getFuelValue(FluidStack aLiquid) { + return 0; + } + + @Override + long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { + if (looseFit) { + aOptFlow *= 4; + if (aBaseEff > 10000) { + aOptFlow *= Math.pow(1.1f, ((aBaseEff - 7500) / 10000F) * 20f); + aBaseEff = 7500; + } else if (aBaseEff > 7500) { + aOptFlow *= Math.pow(1.1f, ((aBaseEff - 7500) / 10000F) * 20f); + aBaseEff *= 0.75f; + } else { + aBaseEff *= 0.75f; + } + } + // prevent overflow like that in SC Steam + long tEU = 0; + int totalFlow = 0; // Byproducts are based on actual flow + int flow = 0; + + // Variable required outside of loop for + // multi-hatch scenarios. + this.realOptFlow = aOptFlow * flowMultipliers[0]; + + int remainingFlow = MathUtils.safeInt((long) (realOptFlow * 1.25f)); // Allowed to use up to + // 125% of optimal flow. + + storedFluid = 0; + for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { + String fluidName = aFluids.get(i) + .getFluid() + .getUnlocalizedName(aFluids.get(i)); + if (fluidName.equals("ic2.fluidSuperheatedSteam")) { + flow = Math.min(aFluids.get(i).amount, remainingFlow); // try to use up w/o exceeding remainingFlow + depleteInput(new FluidStack(aFluids.get(i), flow)); // deplete that amount + this.storedFluid += aFluids.get(i).amount; + remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches + totalFlow += flow; // track total input used + if (!achievement) { + try { + GTMod.achievements.issueAchievement( + this.getBaseMetaTileEntity() + .getWorld() + .getPlayerEntityByName( + this.getBaseMetaTileEntity() + .getOwnerName()), + "efficientsteam"); + } catch (Exception e) {} + achievement = true; + } + } else if (fluidName.equals("fluid.steam") || fluidName.equals("ic2.fluidSteam") + || fluidName.equals("fluid.mfr.steam.still.name")) { + depleteInput(new FluidStack(aFluids.get(i), aFluids.get(i).amount)); + } + } + if (totalFlow <= 0) return 0; + tEU = totalFlow; + addOutput(GTModHandler.getSteam(totalFlow)); + if (totalFlow != realOptFlow) { + float efficiency = 1.0f - Math.abs((totalFlow - (float) realOptFlow) / (float) realOptFlow); + // if(totalFlow>aOptFlow){efficiency = 1.0f;} + tEU *= efficiency; + tEU = Math.max(1L, tEU * aBaseEff / 10000L); + } else { + tEU = tEU * aBaseEff / 10000L; + } + + return tEU; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + // Using a screwdriver to change modes should allow for any combination of Slow/Fast and Tight/Loose Mode + // Whenever there's a mode switch, there will be two messages on the player chat + // The two messages specify which two modes the turbine is on after the change + // (Tight/Loose changes on every action, Slow/Fast changes every other action, all pairs are cycled this way) + if (side == getBaseMetaTileEntity().getFrontFacing()) { + looseFit ^= true; + GTUtility.sendChatToPlayer( + aPlayer, + looseFit ? "Fitting is Loose (Higher Flow)" : "Fitting is Tight (Higher Efficiency)"); + } + + if (looseFit) { + super.onModeChangeByScrewdriver(side, aPlayer, aX, aY, aZ); + } else if (mFastMode) { + PlayerUtils.messagePlayer(aPlayer, "Running in Fast (48x) Mode."); + } else { + PlayerUtils.messagePlayer(aPlayer, "Running in Slow (16x) Mode."); + } + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return (looseFit && GTPPCore.RANDOM.nextInt(4) == 0) ? 0 : 1; + } + + @Override + public boolean isLooseMode() { + return looseFit; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("turbineFitting", looseFit); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + looseFit = aNBT.getBoolean("turbineFitting"); + } + + @Override + public String getMachineType() { + return "Large Super-heated Steam Turbine"; + } + + @Override + protected String getTurbineType() { + return "Super-heated Steam"; + } + + @Override + protected String getCasingName() { + return "Reinforced HP Steam Turbine Casing"; + } + + @Override + protected ITexture getTextureFrontFace() { + return new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced); + } + + @Override + protected ITexture getTextureFrontFaceActive() { + return new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSteam.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSteam.java new file mode 100644 index 0000000000..68cfc8cd1e --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargeTurbineSteam.java @@ -0,0 +1,215 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; + +import static gtPlusPlus.core.lib.GTPPCore.RANDOM; + +import java.util.ArrayList; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.GTMod; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +@SuppressWarnings("deprecation") +public class MTELargeTurbineSteam extends MTELargerTurbineBase { + + private float water; + private boolean achievement = false; + private boolean looseFit = false; + + public MTELargeTurbineSteam(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELargeTurbineSteam(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTELargeTurbineSteam(mName); + } + + @Override + public int getCasingMeta() { + return 1; + } + + @Override + public int getCasingTextureIndex() { + return 16; + } + + @Override + protected boolean requiresOutputHatch() { + return true; + } + + @Override + public int getPollutionPerSecond(ItemStack aStack) { + return 0; + } + + private int useWater(float input) { + water = water + input; + int usage = (int) water; + water = water - usage; + return usage; + } + + @Override + public int getFuelValue(FluidStack aLiquid) { + return 0; + } + + @Override + long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers) { + if (looseFit) { + aOptFlow *= 4; + if (aBaseEff > 10000) { + aOptFlow *= Math.pow(1.1f, ((aBaseEff - 7500) / 10000F) * 20f); + aBaseEff = 7500; + } else if (aBaseEff > 7500) { + aOptFlow *= Math.pow(1.1f, ((aBaseEff - 7500) / 10000F) * 20f); + aBaseEff *= 0.75f; + } else { + aBaseEff *= 0.75f; + } + } + // prevent overflow like that in SC Steam + long tEU = 0; + int totalFlow = 0; // Byproducts are based on actual flow + int flow = 0; + + // Variable required outside of loop for + // multi-hatch scenarios. + this.realOptFlow = aOptFlow * flowMultipliers[0]; + + int remainingFlow = MathUtils.safeInt((long) (realOptFlow * 1.25f)); // Allowed to + // use up to + // 125% of + // optimal flow. + + storedFluid = 0; + for (int i = 0; i < aFluids.size() && remainingFlow > 0; i++) { // loop through each hatch; extract inputs and + // track totals. + String fluidName = aFluids.get(i) + .getFluid() + .getUnlocalizedName(aFluids.get(i)); + if (fluidName.equals("fluid.steam") || fluidName.equals("ic2.fluidSteam") + || fluidName.equals("fluid.mfr.steam.still.name")) { + flow = Math.min(aFluids.get(i).amount, remainingFlow); // try to use up w/o exceeding remainingFlow + depleteInput(new FluidStack(aFluids.get(i), flow)); // deplete that amount + this.storedFluid += aFluids.get(i).amount; + remainingFlow -= flow; // track amount we're allowed to continue depleting from hatches + totalFlow += flow; // track total input used + if (!achievement) { + GTMod.achievements.issueAchievement( + this.getBaseMetaTileEntity() + .getWorld() + .getPlayerEntityByName( + this.getBaseMetaTileEntity() + .getOwnerName()), + "muchsteam"); + achievement = true; + } + } else if (fluidName.equals("ic2.fluidSuperheatedSteam")) { + depleteInput(new FluidStack(aFluids.get(i), aFluids.get(i).amount)); + } + } + if (totalFlow <= 0) return 0; + tEU = totalFlow; + int waterToOutput = useWater(totalFlow / 160.0f); + addOutput(GTModHandler.getDistilledWater(waterToOutput)); + if (totalFlow != realOptFlow) { + float efficiency = 1.0f - Math.abs((totalFlow - (float) realOptFlow) / (float) realOptFlow); + // if(totalFlow>aOptFlow){efficiency = 1.0f;} + tEU *= efficiency; + tEU = Math.max(1L, tEU * aBaseEff / 20000L); + } else { + tEU = tEU * aBaseEff / 20000L; + } + + return tEU; + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + // Using a screwdriver to change modes should allow for any combination of Slow/Fast and Tight/Loose Mode + // Whenever there's a mode switch, there will be two messages on the player chat + // The two messages specify which two modes the turbine is on after the change + // (Tight/Loose changes on every action, Slow/Fast changes every other action, all pairs are cycled this way) + if (side == getBaseMetaTileEntity().getFrontFacing()) { + looseFit ^= true; + GTUtility.sendChatToPlayer( + aPlayer, + looseFit ? "Fitting: Loose - More Flow" : "Fitting: Tight - More Efficiency"); + } + + if (looseFit) { + super.onModeChangeByScrewdriver(side, aPlayer, aX, aY, aZ); + } else if (mFastMode) { + PlayerUtils.messagePlayer(aPlayer, "Running in Fast (48x) Mode."); + } else { + PlayerUtils.messagePlayer(aPlayer, "Running in Slow (16x) Mode."); + } + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return (looseFit && RANDOM.nextInt(4) == 0) ? 0 : 1; + } + + @Override + public boolean isLooseMode() { + return looseFit; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("turbineFitting", looseFit); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + looseFit = aNBT.getBoolean("turbineFitting"); + } + + @Override + public String getMachineType() { + return "Large Steam Turbine"; + } + + @Override + protected String getTurbineType() { + return "Steam"; + } + + @Override + protected String getCasingName() { + return "Reinforced Steam Turbine Casing"; + } + + @Override + protected ITexture getTextureFrontFace() { + return new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced); + } + + @Override + protected ITexture getTextureFrontFaceActive() { + return new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Controller_Advanced_Active); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbineBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbineBase.java new file mode 100644 index 0000000000..69e3580f11 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/turbines/MTELargerTurbineBase.java @@ -0,0 +1,884 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.lazy; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static gregtech.api.enums.HatchElement.Dynamo; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase.GTPPHatchElement.TTDynamo; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.enums.Materials; +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.items.MetaGeneratedTool; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.api.objects.minecraft.BlockPos; +import gtPlusPlus.core.block.ModBlocks; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchTurbine; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; + +public abstract class MTELargerTurbineBase extends GTPPMultiBlockBase + implements ISurvivalConstructable { + + protected int baseEff = 0; + protected long optFlow = 0; + protected long euPerTurbine = 0; + protected double realOptFlow = 0; + protected int storedFluid = 0; + protected int counter = 0; + protected boolean mFastMode = false; + protected double mufflerReduction = 1; + protected float[] flowMultipliers = new float[] { 1, 1, 1 }; + + public ITexture frontFace; + public ITexture frontFaceActive; + + public ArrayList mTurbineRotorHatches = new ArrayList<>(); + + public MTELargerTurbineBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + frontFace = getTextureFrontFace(); + frontFaceActive = getTextureFrontFaceActive(); + } + + public MTELargerTurbineBase(String aName) { + super(aName); + frontFace = getTextureFrontFace(); + frontFaceActive = getTextureFrontFaceActive(); + } + + protected abstract ITexture getTextureFrontFace(); + + protected abstract ITexture getTextureFrontFaceActive(); + + protected abstract String getTurbineType(); + + protected abstract String getCasingName(); + + protected abstract boolean requiresOutputHatch(); + + @Override + protected final MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(getMachineType()) + .addInfo("Controller Block for the XL " + getTurbineType() + " Turbine") + .addInfo("Runs as fast as 16 Large Turbines of the same type, takes the space of 12") + .addInfo("Right-click with screwdriver to enable Fast Mode, to run it even faster") + .addInfo("Optimal flow will increase or decrease accordingly on mode switch") + .addInfo("Fast Mode increases speed to 48x instead of 16x, with some penalties") + .addInfo("Maintenance problems and turbine damage happen 12x as often in Fast Mode"); + if (getTurbineType().contains("Steam")) { + tt.addInfo("XL Steam Turbines can use Loose Mode with either Slow or Fast Mode"); + } + if (getTurbineType().equals("Plasma")) { + tt.addInfo("Plasma fuel efficiency is lower for high tier turbines when using low-grade plasmas") + .addInfo("Efficiency = ((FuelValue / 200,000)^2) / (EU per Turbine)"); + } + tt.addPollutionAmount(getPollutionPerSecond(null)) + .addInfo("Pollution is 3x higher in Fast Mode") + .addSeparator() + .beginStructureBlock(7, 9, 7, false) + .addController("Top Middle") + .addCasingInfoMin(getCasingName(), 360, false) + .addCasingInfoMin("Rotor Shaft", 30, false) + .addOtherStructurePart("Rotor Assembly", "Any 1 dot hint", 1) + .addInputBus("Any 4 dot hint (min 1)", 4) + .addInputHatch("Any 4 dot hint(min 1)", 4); + if (requiresOutputHatch()) { + tt.addOutputHatch("Any 4 dot hint(min 1)", 4); + } + tt.addDynamoHatch("Any 4 dot hint(min 1)", 4) + .addMaintenanceHatch("Any 4 dot hint(min 1)", 4); + if (requiresMufflers()) { + tt.addMufflerHatch("Any 7 dot hint (x4)", 7); + } + tt.toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); + return tt; + } + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final ClassValue> STRUCTURE_DEFINITION = new ClassValue<>() { + + @Override + @SuppressWarnings("SpellCheckingInspection") + protected IStructureDefinition computeValue(Class type) { + return StructureDefinition.builder() + // c = turbine casing + // s = turbine shaft + // t = turbine housing + // h = dynamo/maint + // m = muffler + .addShape( + STRUCTURE_PIECE_MAIN, + (new String[][] { { "ccchccc", "ccccccc", "ccmmmcc", "ccm~mcc", "ccmmmcc", "ccccccc", "ccchccc" }, + { "ctchctc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "ctchctc" }, + { "ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc" }, + { "ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc" }, + { "ctchctc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "ctchctc" }, + { "ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc" }, + { "ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc" }, + { "ctchctc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "cscccsc", "ctchctc" }, + { "ccchccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccccccc", "ccchccc" }, })) + .addElement('c', lazy(t -> ofBlock(t.getCasingBlock(), t.getCasingMeta()))) + .addElement('s', lazy(t -> ofBlock(t.getShaftBlock(), t.getTurbineShaftMeta()))) + .addElement( + 't', + lazy( + t -> buildHatchAdder(MTELargerTurbineBase.class).adder(MTELargerTurbineBase::addTurbineHatch) + .hatchClass(MTEHatchTurbine.class) + .casingIndex(t.getCasingTextureIndex()) + .dot(1) + .build())) + .addElement( + 'h', + lazy( + t -> buildHatchAdder(MTELargerTurbineBase.class) + .atLeast(InputBus, InputHatch, OutputHatch, Dynamo.or(TTDynamo), Maintenance) + .casingIndex(t.getCasingTextureIndex()) + .dot(4) + .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) + .addElement( + 'm', + lazy( + t -> buildHatchAdder(MTELargerTurbineBase.class).atLeast(Muffler) + .casingIndex(t.getCasingTextureIndex()) + .dot(7) + .buildAndChain(t.getCasingBlock(), t.getCasingMeta()))) + .build(); + } + }; + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION.get(getClass()); + } + + private boolean requiresMufflers() { + if (!PollutionUtils.isPollutionEnabled()) { + return false; + } + return getPollutionPerSecond(null) > 0; + } + + public final double getMufflerReduction() { + double totalReduction = 0; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + totalReduction += ((double) tHatch.calculatePollutionReduction(100)) / 100; + } + return totalReduction / 4; + } + + @Override + public void clearHatches() { + super.clearHatches(); + mTurbineRotorHatches.clear(); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + // we do not check for casing count here. the bare minimal is 372 but we only require 360 + boolean aStructure = checkPiece(STRUCTURE_PIECE_MAIN, 3, 3, 0); + log("Structure Check: " + aStructure); + if (mTurbineRotorHatches.size() != 12 || mMaintenanceHatches.size() != 1 + || (mDynamoHatches.size() < 1 && mTecTechDynamoHatches.size() < 1) + || (requiresMufflers() && mMufflerHatches.size() != 4) + || mInputBusses.size() < 1 + || mInputHatches.size() < 1 + || (requiresOutputHatch() && mOutputHatches.size() < 1)) { + log( + "Bad Hatches - Turbine Housings: " + mTurbineRotorHatches.size() + + ", Maint: " + + mMaintenanceHatches.size() + + ", Dynamo: " + + mDynamoHatches.size() + + ", Muffler: " + + mMufflerHatches.size() + + ", Input Buses: " + + mInputBusses.size() + + ", Input Hatches: " + + mInputHatches.size() + + ", Output Hatches: " + + mOutputHatches.size()); + return false; + } + mufflerReduction = getMufflerReduction(); + return aStructure; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 3, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 2); + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 3, 3, 0, realBudget, env, false, true); + } + + public boolean addTurbineHatch(final IGregTechTileEntity aTileEntity, final int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchTurbine aTurbineHatch) { + log("Found GT_MetaTileEntity_Hatch_Turbine"); + updateTexture(aTileEntity, aBaseCasingIndex); + IGregTechTileEntity g = this.getBaseMetaTileEntity(); + if (aTurbineHatch.setController(new BlockPos(g.getXCoord(), g.getYCoord(), g.getZCoord(), g.getWorld()))) { + boolean aDidAdd = this.mTurbineRotorHatches.add(aTurbineHatch); + Logger.INFO("Injected Controller into Turbine Assembly. Found: " + this.mTurbineRotorHatches.size()); + return aDidAdd; + } else { + Logger.INFO("Failed to inject controller into Turbine Assembly Hatch."); + } + } + log("Bad Turbine Housing"); + return false; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return getMaxEfficiency(aStack) > 0; + } + + public Block getCasingBlock() { + return ModBlocks.blockSpecialMultiCasings; + } + + public final Block getShaftBlock() { + return ModBlocks.blockSpecialMultiCasings; + } + + public abstract int getCasingMeta(); + + public byte getTurbineShaftMeta() { + return 0; + } + + public abstract int getCasingTextureIndex(); + + public abstract int getFuelValue(FluidStack aLiquid); + + public static boolean isValidTurbine(ItemStack aTurbine) { + return (aTurbine != null && aTurbine.getItem() instanceof MetaGeneratedTool + && aTurbine.getItemDamage() >= 170 + && aTurbine.getItemDamage() <= 176); + } + + protected ArrayList getAllBufferedTurbines() { + startRecipeProcessing(); + ArrayList aTurbinesInStorage = new ArrayList<>(); + for (ItemStack aStack : getStoredInputs()) { + if (isValidTurbine(aStack)) { + int stackSize = aStack.stackSize; + while (stackSize > 0) { + int tmpStackSize = Math.min(stackSize, aStack.getMaxStackSize()); + ItemStack copy = aStack.copy(); + copy.stackSize = tmpStackSize; + aTurbinesInStorage.add(copy); + stackSize -= tmpStackSize; + } + } + } + endRecipeProcessing(); + return aTurbinesInStorage; + } + + public boolean areAllTurbinesTheSame() { + ArrayList aTurbineAssemblies = getFullTurbineAssemblies(); + if (aTurbineAssemblies.size() < 12) { + log("Found " + aTurbineAssemblies.size() + ", expected 12."); + return false; + } + AutoMap aTurbineMats = new AutoMap<>(); + AutoMap aTurbineSizes = new AutoMap<>(); + for (MTEHatchTurbine aHatch : aTurbineAssemblies) { + aTurbineMats.add(MetaGeneratedTool.getPrimaryMaterial(aHatch.getTurbine())); + aTurbineSizes.add(getTurbineSize(aHatch.getTurbine())); + } + Materials aBaseMat = aTurbineMats.get(0); + int aBaseSize = aTurbineSizes.get(0); + for (int aSize : aTurbineSizes) { + if (aBaseSize != aSize) { + return false; + } + } + for (Materials aMat : aTurbineMats) { + if (aBaseMat != aMat) { + return false; + } + } + return true; + } + + public static int getTurbineSize(ItemStack aTurbine) { + if (isValidTurbine(aTurbine)) { + if (aTurbine.getItemDamage() >= 170 && aTurbine.getItemDamage() < 172) { + return 1; + } else if (aTurbine.getItemDamage() >= 172 && aTurbine.getItemDamage() < 174) { + return 2; + } else if (aTurbine.getItemDamage() >= 174 && aTurbine.getItemDamage() < 176) { + return 3; + } else if (aTurbine.getItemDamage() >= 176 && aTurbine.getItemDamage() < 178) { + return 4; + } + } + return 0; + } + + public static String getTurbineSizeString(int aSize) { + return switch (aSize) { + case 1 -> "Small Turbine"; + case 2 -> "Turbine"; + case 3 -> "Large Turbine"; + case 4 -> "Huge Turbine"; + default -> ""; + }; + } + + protected ArrayList getEmptyTurbineAssemblies() { + ArrayList aEmptyTurbineRotorHatches = new ArrayList<>(); + // log("Checking "+mTurbineRotorHatches.size()+" Assemblies for empties."); + for (MTEHatchTurbine aTurbineHatch : this.mTurbineRotorHatches) { + if (!aTurbineHatch.hasTurbine()) { + aEmptyTurbineRotorHatches.add(aTurbineHatch); + } + } + return aEmptyTurbineRotorHatches; + } + + protected ArrayList getFullTurbineAssemblies() { + ArrayList aTurbineRotorHatches = new ArrayList<>(); + // log("Checking "+mTurbineRotorHatches.size()+" Assemblies for Turbines."); + for (MTEHatchTurbine aTurbineHatch : this.mTurbineRotorHatches) { + if (aTurbineHatch.hasTurbine()) { + // log("Found Assembly with Turbine."); + aTurbineRotorHatches.add(aTurbineHatch); + } + } + return aTurbineRotorHatches; + } + + protected void depleteTurbineFromStock(ItemStack aTurbine) { + if (aTurbine == null) { + return; + } + startRecipeProcessing(); + for (MTEHatchInputBus aInputBus : this.mInputBusses) { + for (int slot = aInputBus.getSizeInventory() - 1; slot >= 0; slot--) { + ItemStack aStack = aInputBus.getStackInSlot(slot); + if (aStack != null && GTUtility.areStacksEqual(aStack, aTurbine)) { + aStack.stackSize -= aTurbine.stackSize; + updateSlots(); + endRecipeProcessing(); + return; + } + } + } + endRecipeProcessing(); + } + + @Override + public @NotNull CheckRecipeResult checkProcessing() { + try { + ArrayList aEmptyTurbineRotorHatches = getEmptyTurbineAssemblies(); + if (aEmptyTurbineRotorHatches.size() > 0) { + hatch: for (MTEHatchTurbine aHatch : aEmptyTurbineRotorHatches) { + ArrayList aTurbines = getAllBufferedTurbines(); + for (ItemStack aTurbineItem : aTurbines) { + if (aTurbineItem == null) { + continue; + } + if (aHatch.insertTurbine(aTurbineItem.copy())) { + depleteTurbineFromStock(aTurbineItem); + continue hatch; + } + } + } + } + + if (getEmptyTurbineAssemblies().size() > 0 || !areAllTurbinesTheSame()) { + stopMachine(ShutDownReasonRegistry.NO_TURBINE); + return CheckRecipeResultRegistry.NO_TURBINE_FOUND; + } + + ArrayList tFluids = getStoredFluids(); + + if (tFluids.size() > 0) { + if (baseEff == 0 || optFlow == 0 + || counter >= 512 + || this.getBaseMetaTileEntity() + .hasWorkJustBeenEnabled() + || this.getBaseMetaTileEntity() + .hasInventoryBeenModified()) { + counter = 0; + float aTotalBaseEff = 0; + float aTotalOptimalFlow = 0; + + ItemStack aStack = getFullTurbineAssemblies().get(0) + .getTurbine(); + aTotalBaseEff += GTUtility.safeInt( + (long) ((5F + ((MetaGeneratedTool) aStack.getItem()).getToolCombatDamage(aStack)) * 1000F)); + aTotalOptimalFlow += GTUtility.safeInt( + (long) Math.max( + Float.MIN_NORMAL, + ((MetaGeneratedTool) aStack.getItem()).getToolStats(aStack) + .getSpeedMultiplier() * MetaGeneratedTool.getPrimaryMaterial(aStack).mToolSpeed * 50) + * getSpeedMultiplier()); + if (aTotalOptimalFlow < 0) { + aTotalOptimalFlow = 100; + } + + flowMultipliers[0] = MetaGeneratedTool.getPrimaryMaterial(aStack).mSteamMultiplier; + flowMultipliers[1] = MetaGeneratedTool.getPrimaryMaterial(aStack).mGasMultiplier; + flowMultipliers[2] = MetaGeneratedTool.getPrimaryMaterial(aStack).mPlasmaMultiplier; + baseEff = MathUtils.roundToClosestInt(aTotalBaseEff); + optFlow = MathUtils.roundToClosestInt(aTotalOptimalFlow); + if (optFlow <= 0 || baseEff <= 0) { + stopMachine(ShutDownReasonRegistry.NONE); // in case the turbine got removed + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + } else { + counter++; + } + } + + // How much the turbine should be producing with this flow + long newPower = fluidIntoPower(tFluids, optFlow, baseEff, flowMultipliers); + long difference = newPower - this.lEUt; // difference between current output and new output + + // Magic numbers: can always change by at least 10 eu/t, but otherwise by at most 1 percent of the + // difference in power level (per tick) + // This is how much the turbine can actually change during this tick + int maxChangeAllowed = Math.max(10, GTUtility.safeInt(Math.abs(difference) / 100)); + + if (Math.abs(difference) > maxChangeAllowed) { // If this difference is too big, use the maximum allowed + // change + int change = maxChangeAllowed * (difference > 0 ? 1 : -1); // Make the change positive or negative. + this.lEUt += change; // Apply the change + } else { + this.lEUt = newPower; + } + if (this.lEUt <= 0) { + this.lEUt = 0; + this.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } else { + this.mMaxProgresstime = 1; + this.mEfficiencyIncrease = 10; + // Overvoltage is handled inside the MultiBlockBase when pushing out to dynamos. no need to do it here. + // Play sounds (GT++ addition - GT multiblocks play no sounds) + enableAllTurbineHatches(); + return CheckRecipeResultRegistry.GENERATING; + } + } catch (Throwable t) { + t.printStackTrace(); + } + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + @Override + public boolean doRandomMaintenanceDamage() { + if (getMaxParallelRecipes() == 0) { + stopMachine(ShutDownReasonRegistry.NO_TURBINE); + return false; + } + + if (mRuntime++ > 1000) { + mRuntime = 0; + + if (getBaseMetaTileEntity().getRandomNumber(6000) < getMaintenanceThreshold()) { + causeMaintenanceIssue(); + } + for (MTEHatchTurbine aHatch : getFullTurbineAssemblies()) { + // This cycle depletes durability from the turbine rotors. + // The amount of times it is run depends on turbineDamageMultiplier + // In XL turbines, durability loss is around 5.2-5.3x faster than in singles + // To compensate for that, the mEU/t scaling is divided by 5 to make it only slightly faster + for (int i = 0; i < getTurbineDamageMultiplier(); i++) { + aHatch.damageTurbine(lEUt / 5, damageFactorLow, damageFactorHigh); + } + } + } + return true; + } + + @Override + public int getMaxParallelRecipes() { + return (getFullTurbineAssemblies().size()); + } + + abstract long fluidIntoPower(ArrayList aFluids, long aOptFlow, int aBaseEff, float[] flowMultipliers); + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return this.getMaxParallelRecipes() == 12 ? 10000 : 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + public boolean isLooseMode() { + return false; + } + + @Override + public String[] getExtraInfoData() { + int mPollutionReduction = (int) (100 * mufflerReduction); + + String tRunning = mMaxProgresstime > 0 + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.running.true") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.running.false") + + EnumChatFormatting.RESET; + + String tMaintenance = getIdealStatus() == getRepairStatus() + ? EnumChatFormatting.GREEN + StatCollector.translateToLocal("GT5U.turbine.maintenance.false") + + EnumChatFormatting.RESET + : EnumChatFormatting.RED + StatCollector.translateToLocal("GT5U.turbine.maintenance.true") + + EnumChatFormatting.RESET; + int tDura; + + StringBuilder aTurbineDamage = new StringBuilder(); + for (MTEHatchTurbine aHatch : this.getFullTurbineAssemblies()) { + ItemStack aTurbine = aHatch.getTurbine(); + tDura = MathUtils.safeInt( + (long) (100.0f / MetaGeneratedTool.getToolMaxDamage(aTurbine) + * (MetaGeneratedTool.getToolDamage(aTurbine)) + 1)); + aTurbineDamage.append(EnumChatFormatting.RED) + .append(GTUtility.formatNumbers(tDura)) + .append(EnumChatFormatting.RESET) + .append("% | "); + } + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchDynamo tHatch : filterValidMTEs(mDynamoHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + boolean aIsSteam = this.getClass() + .getName() + .toLowerCase() + .contains("steam"); + + String[] ret = new String[] { + // 8 Lines available for information panels + tRunning + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(((lEUt * mEfficiency) / 10000)) + + EnumChatFormatting.RESET + + " EU/t", + tMaintenance, + StatCollector.translateToLocal("GT5U.turbine.efficiency") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers((mEfficiency / 100F)) + + EnumChatFormatting.RESET + + "%", + StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + StatCollector.translateToLocal("GT5U.turbine.flow") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(MathUtils.safeInt((long) realOptFlow)) + + EnumChatFormatting.RESET + + " L/s" + + EnumChatFormatting.YELLOW + + " (" + + (isLooseMode() ? StatCollector.translateToLocal("GT5U.turbine.loose") + : StatCollector.translateToLocal("GT5U.turbine.tight")) + + ")", + StatCollector.translateToLocal("GT5U.turbine.fuel") + ": " + + EnumChatFormatting.GOLD + + GTUtility.formatNumbers(storedFluid) + + EnumChatFormatting.RESET + + "L", + StatCollector.translateToLocal("GT5U.turbine.dmg") + ": " + aTurbineDamage, + StatCollector.translateToLocal("GT5U.multiblock.pollution") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mPollutionReduction) + + EnumChatFormatting.RESET + + " %" }; + if (!aIsSteam) ret[4] = StatCollector.translateToLocal("GT5U.turbine.flow") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(MathUtils.safeInt((long) realOptFlow)) + + EnumChatFormatting.RESET + + " L/t"; + return ret; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public boolean polluteEnvironment(int aPollutionLevel) { + if (this.requiresMufflers()) { + mPollution += aPollutionLevel * getPollutionMultiplier() * mufflerReduction; + for (MTEHatchMuffler tHatch : filterValidMTEs(mMufflerHatches)) { + if (mPollution >= 10000) { + if (PollutionUtils.addPollution(this.getBaseMetaTileEntity(), 10000)) { + mPollution -= 10000; + } + } else { + break; + } + } + return mPollution < 10000; + } + return true; + } + + @Override + public long maxAmperesOut() { + // This should not be a hard limit, due to TecTech dynamos + if (mFastMode) { + return 64; + } else { + return 16; + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setBoolean("mFastMode", mFastMode); + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mFastMode = aNBT.getBoolean("mFastMode"); + super.loadNBTData(aNBT); + } + + @Override + public void onModeChangeByScrewdriver(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + mFastMode = !mFastMode; + if (mFastMode) { + PlayerUtils.messagePlayer(aPlayer, "Running in Fast (48x) Mode."); + } else { + PlayerUtils.messagePlayer(aPlayer, "Running in Slow (16x) Mode."); + } + } + + public final ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, + ForgeDirection facing, int aColorIndex, boolean aActive, boolean aRedstone) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[1][aColorIndex + 1], + facing == side ? getFrontFacingTurbineTexture(aActive) + : Textures.BlockIcons.getCasingTextureForId(getCasingTextureIndex()) }; + } + + protected ITexture getFrontFacingTurbineTexture(boolean isActive) { + if (isActive) { + return frontFaceActive; + } + return frontFace; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + if (this.maxProgresstime() > 0 || this.getBaseMetaTileEntity() + .hasWorkJustBeenEnabled()) { + enableAllTurbineHatches(); + } + if (this.maxProgresstime() <= 0) { + stopMachine(ShutDownReasonRegistry.NONE); + } + } + } + + @Override + public void stopMachine(@NotNull ShutDownReason reason) { + baseEff = 0; + optFlow = 0; + disableAllTurbineHatches(); + super.stopMachine(reason); + } + + @Override + public void onRemoval() { + super.onRemoval(); + for (MTEHatchTurbine h : this.mTurbineRotorHatches) { + h.clearController(); + } + disableAllTurbineHatches(); + this.mTurbineRotorHatches.clear(); + } + + public void enableAllTurbineHatches() { + updateTurbineHatches(this.isMachineRunning()); + } + + public void disableAllTurbineHatches() { + updateTurbineHatches(false); + } + + private Long mLastHatchUpdate; + + public void updateTurbineHatches(boolean aState) { + if (mLastHatchUpdate == null) { + mLastHatchUpdate = System.currentTimeMillis() / 1000; + } + if (this.mTurbineRotorHatches.isEmpty() || ((System.currentTimeMillis() / 1000) - mLastHatchUpdate) <= 2) { + return; + } + for (MTEHatchTurbine h : filterValidMTEs(this.mTurbineRotorHatches)) { + h.setActive(aState); + } + + mLastHatchUpdate = System.currentTimeMillis() / 1000; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d == ForgeDirection.UP; + } + + /** + * Called every tick the Machine runs + */ + @Override + public boolean onRunningTick(ItemStack aStack) { + if (lEUt > 0) { + addEnergyOutput((lEUt * mEfficiency) / 10000); + return true; + } + return false; + } + + @Override + public boolean addEnergyOutput(long aEU) { + if (aEU <= 0) { + return true; + } + if (this.mAllDynamoHatches.size() > 0) { + return addEnergyOutputMultipleDynamos(aEU, true); + } + return false; + } + + @Override + public boolean addEnergyOutputMultipleDynamos(long aEU, boolean aAllowMixedVoltageDynamos) { + int injected = 0; + long aFirstVoltageFound = -1; + for (MTEHatch aDynamo : filterValidMTEs(mAllDynamoHatches)) { + long aVoltage = aDynamo.maxEUOutput(); + // Check against voltage to check when hatch mixing + if (aFirstVoltageFound == -1) { + aFirstVoltageFound = aVoltage; + } + } + + long leftToInject; + long aVoltage; + int aAmpsToInject; + int aRemainder; + int ampsOnCurrentHatch; + for (MTEHatch aDynamo : filterValidMTEs(mAllDynamoHatches)) { + leftToInject = aEU - injected; + aVoltage = aDynamo.maxEUOutput(); + aAmpsToInject = (int) (leftToInject / aVoltage); + aRemainder = (int) (leftToInject - (aAmpsToInject * aVoltage)); + ampsOnCurrentHatch = (int) Math.min(aDynamo.maxAmperesOut(), aAmpsToInject); + + // add full amps + aDynamo.getBaseMetaTileEntity() + .increaseStoredEnergyUnits(aVoltage * ampsOnCurrentHatch, false); + injected += aVoltage * ampsOnCurrentHatch; + + // add reminder + if (aRemainder > 0 && ampsOnCurrentHatch < aDynamo.maxAmperesOut()) { + aDynamo.getBaseMetaTileEntity() + .increaseStoredEnergyUnits(aRemainder, false); + injected += aRemainder; + } + } + return injected > 0; + } + + public int getSpeedMultiplier() { + return mFastMode ? 48 : 16; + } + + public int getMaintenanceThreshold() { + return mFastMode ? 12 : 1; + } + + public int getPollutionMultiplier() { + return mFastMode ? 3 : 1; + } + + public int getTurbineDamageMultiplier() { + return mFastMode ? 3 : 1; + } + + @Override + public boolean supportsBatchMode() { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/storage/GregtechMetaTileEntity_PowerSubStationController.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/storage/GregtechMetaTileEntity_PowerSubStationController.java index 13bef7c885..7476cd2b90 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/storage/GregtechMetaTileEntity_PowerSubStationController.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/storage/GregtechMetaTileEntity_PowerSubStationController.java @@ -6,14 +6,14 @@ import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElement import static com.gtnewhorizon.structurelib.structure.StructureUtility.onlyIf; import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; -import static gregtech.api.enums.GT_HatchElement.Dynamo; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdderOptional; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase.GTPPHatchElement.TTDynamo; -import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase.GTPPHatchElement.TTEnergy; +import static gregtech.api.enums.HatchElement.Dynamo; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofHatchAdderOptional; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase.GTPPHatchElement.TTDynamo; +import static gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase.GTPPHatchElement.TTEnergy; import javax.annotation.Nullable; @@ -49,37 +49,37 @@ import com.gtnewhorizons.modularui.common.widget.SlotGroup; import com.gtnewhorizons.modularui.common.widget.SlotWidget; import com.gtnewhorizons.modularui.common.widget.TextWidget; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.TAE; import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Dynamo; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Maintenance; -import gregtech.api.objects.GT_RenderedTexture; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.objects.GTRenderedTexture; import gregtech.api.recipe.check.CheckRecipeResult; import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.block.ModBlocks; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.MovingAverageLong; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.math.MathUtils; import gtPlusPlus.core.util.minecraft.PlayerUtils; import gtPlusPlus.preloader.asm.AsmConfig; -import gtPlusPlus.xmod.gregtech.api.gui.GTPP_UITextures; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMeta_MultiBlockBase; +import gtPlusPlus.xmod.gregtech.api.gui.GTPPUITextures; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMultiBlockBase; -public class GregtechMetaTileEntity_PowerSubStationController extends - GregtechMeta_MultiBlockBase implements ISurvivalConstructable { +public class GregtechMetaTileEntity_PowerSubStationController + extends GTPPMultiBlockBase implements ISurvivalConstructable { private static enum TopState { MayBeTop, @@ -118,8 +118,8 @@ public class GregtechMetaTileEntity_PowerSubStationController extends } @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); tt.addMachineType(getMachineType()) .addInfo("Consumes " + this.ENERGY_TAX + "% of the average voltage of all energy type hatches") .addInfo("Does not require maintenance") @@ -135,7 +135,7 @@ public class GregtechMetaTileEntity_PowerSubStationController extends .addEnergyHatch("Any Casing", 1) .addSubChannelUsage("capacitor", "Vanadium Capacitor Cell Tier") .addSubChannelUsage("height", "Height of structure") - .toolTipFinisher(CORE.GT_Tooltip_Builder.get()); + .toolTipFinisher(GTPPCore.GT_Tooltip_Builder.get()); return tt; } @@ -144,7 +144,7 @@ public class GregtechMetaTileEntity_PowerSubStationController extends final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { if (side == facing) { return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TAE.GTPP_INDEX(24)), - new GT_RenderedTexture( + new GTRenderedTexture( aActive ? Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER_ACTIVE : Textures.BlockIcons.OVERLAY_FRONT_DISASSEMBLER) }; } @@ -160,7 +160,7 @@ public class GregtechMetaTileEntity_PowerSubStationController extends @Override public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { // if (mBatteryCapacity <= 0) return false; - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); return true; } @@ -214,7 +214,7 @@ public class GregtechMetaTileEntity_PowerSubStationController extends public static int getMaxHatchTier(int aCellTier) { switch (aCellTier) { case 9 -> { - return GT_Values.VOLTAGE_NAMES[9].equals("Ultimate High Voltage") ? 15 : 9; + return GTValues.VOLTAGE_NAMES[9].equals("Ultimate High Voltage") ? 15 : 9; } default -> { if (aCellTier < 4) { @@ -434,13 +434,13 @@ public class GregtechMetaTileEntity_PowerSubStationController extends } int tier = getMaxHatchTier(level); long volSum = 0; - for (GT_MetaTileEntity_Hatch hatch : mAllDynamoHatches) { + for (MTEHatch hatch : mAllDynamoHatches) { if (hatch.mTier > tier || hatch.mTier < 3) { return false; } volSum += (8L << (hatch.mTier * 2)); } - for (GT_MetaTileEntity_Hatch hatch : mAllEnergyHatches) { + for (MTEHatch hatch : mAllEnergyHatches) { if (hatch.mTier > tier || hatch.mTier < 3) { return false; } @@ -458,11 +458,11 @@ public class GregtechMetaTileEntity_PowerSubStationController extends return false; } else { IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Energy) { + if (aMetaTileEntity instanceof MTEHatchEnergy) { return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Dynamo) { + } else if (aMetaTileEntity instanceof MTEHatchDynamo) { return addToMachineList(aTileEntity, aBaseCasingIndex); - } else if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_Maintenance) { + } else if (aMetaTileEntity instanceof MTEHatchMaintenance) { return addToMachineList(aTileEntity, aBaseCasingIndex); } else { if (isThisHatchMultiDynamo(aMetaTileEntity)) { @@ -624,18 +624,18 @@ public class GregtechMetaTileEntity_PowerSubStationController extends long aInputAverage = 0; long aOutputAverage = 0; // Input Power - for (GT_MetaTileEntity_Hatch THatch : filterValidMTEs(this.mDischargeHatches)) { + for (MTEHatch THatch : filterValidMTEs(this.mDischargeHatches)) { aInputAverage += drawEnergyFromHatch(THatch); } - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(this.mAllEnergyHatches)) { + for (MTEHatch tHatch : filterValidMTEs(this.mAllEnergyHatches)) { aInputAverage += drawEnergyFromHatch(tHatch); } // Output Power - for (GT_MetaTileEntity_Hatch THatch : filterValidMTEs(this.mChargeHatches)) { + for (MTEHatch THatch : filterValidMTEs(this.mChargeHatches)) { aOutputAverage += addEnergyToHatch(THatch); } - for (GT_MetaTileEntity_Hatch tHatch : filterValidMTEs(this.mAllDynamoHatches)) { + for (MTEHatch tHatch : filterValidMTEs(this.mAllDynamoHatches)) { aOutputAverage += addEnergyToHatch(tHatch); } // reset progress time @@ -680,10 +680,10 @@ public class GregtechMetaTileEntity_PowerSubStationController extends String storedEnergyText; if (this.getEUVar() > this.mBatteryCapacity) { - storedEnergyText = EnumChatFormatting.RED + GT_Utility.formatNumbers(this.getEUVar()) + storedEnergyText = EnumChatFormatting.RED + GTUtility.formatNumbers(this.getEUVar()) + EnumChatFormatting.RESET; } else { - storedEnergyText = EnumChatFormatting.GREEN + GT_Utility.formatNumbers(this.getEUVar()) + storedEnergyText = EnumChatFormatting.GREEN + GTUtility.formatNumbers(this.getEUVar()) + EnumChatFormatting.RESET; } @@ -693,10 +693,10 @@ public class GregtechMetaTileEntity_PowerSubStationController extends return new String[] { "Ergon Energy - District Sub-Station", "Stored EU: " + storedEnergyText, "Capacity: " + EnumChatFormatting.YELLOW - + GT_Utility.formatNumbers(this.maxEUStore()) + + GTUtility.formatNumbers(this.maxEUStore()) + EnumChatFormatting.RESET, "Running Costs: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(this.computeEnergyTax()) + + GTUtility.formatNumbers(this.computeEnergyTax()) + EnumChatFormatting.RESET + " EU/t", "Controller Mode: " + mode, @@ -710,23 +710,23 @@ public class GregtechMetaTileEntity_PowerSubStationController extends + "]", "----------------------", "Stats for Nerds", "Average Input: " + EnumChatFormatting.BLUE - + GT_Utility.formatNumbers(this.getAverageEuAdded()) + + GTUtility.formatNumbers(this.getAverageEuAdded()) + EnumChatFormatting.RESET + " EU", "Average Output: " + EnumChatFormatting.GOLD - + GT_Utility.formatNumbers(this.getAverageEuConsumed()) + + GTUtility.formatNumbers(this.getAverageEuConsumed()) + EnumChatFormatting.RESET + " EU", "Total Input: " + EnumChatFormatting.BLUE - + GT_Utility.formatNumbers(this.mTotalEnergyAdded) + + GTUtility.formatNumbers(this.mTotalEnergyAdded) + EnumChatFormatting.RESET + " EU", "Total Output: " + EnumChatFormatting.GOLD - + GT_Utility.formatNumbers(this.mTotalEnergyConsumed) + + GTUtility.formatNumbers(this.mTotalEnergyConsumed) + EnumChatFormatting.RESET + " EU", "Total Costs: " + EnumChatFormatting.RED - + GT_Utility.formatNumbers(this.mTotalEnergyLost) + + GTUtility.formatNumbers(this.mTotalEnergyLost) + EnumChatFormatting.RESET + " EU", }; } @@ -844,7 +844,7 @@ public class GregtechMetaTileEntity_PowerSubStationController extends @Override public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) .setPos(4, 4) .setSize(149, 149)) .widget(new SlotWidget(inventoryHandler, 0).setPos(154, 4)) @@ -896,13 +896,13 @@ public class GregtechMetaTileEntity_PowerSubStationController extends .setDefaultColor(COLOR_TEXT_WHITE.get()) .setPos(10, 40)) .widget( - new DrawableWidget().setDrawable(GTPP_UITextures.PICTURE_ENERGY_FRAME) + new DrawableWidget().setDrawable(GTPPUITextures.PICTURE_ENERGY_FRAME) .setPos(4, 155) .setSize(149, 7)) .widget(new FakeSyncWidget.FloatSyncer(this::getProgress, val -> clientProgress = val)) .widget( new ProgressBar().setProgress(this::getProgress) - .setTexture(GTPP_UITextures.PROGRESSBAR_PSS_ENERGY, 147) + .setTexture(GTPPUITextures.PROGRESSBAR_PSS_ENERGY, 147) .setDirection(ProgressBar.Direction.RIGHT) .setPos(5, 156) .setSize(147, 5)) diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/MTESolarHeater.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/MTESolarHeater.java new file mode 100644 index 0000000000..64925c9bb1 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/MTESolarHeater.java @@ -0,0 +1,343 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.misc; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +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.MTETieredMachineBlock; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTESolarTower; + +public class MTESolarHeater extends MTETieredMachineBlock { + + public boolean mHasTower = false; + private MTESolarTower mTower = null; + + private int mTX, mTY, mTZ; + private Byte mRequiredFacing; + + public MTESolarHeater(final int aID, final String aName, final String aNameRegional, final int aTier, + final String aDescription, final int aSlotCount) { + super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); + } + + public MTESolarHeater(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures, final int aSlotCount) { + super(aName, aTier, aSlotCount, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + return ArrayUtils.addAll(this.mDescriptionArray, "Point me at a Solar Tower", GTPPCore.GT_Tooltip.get()); + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFrontActive(i); + rTextures[6][i + 1] = this.getBackActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), + new GTRenderedTexture(Textures.BlockIcons.SOLARPANEL_IV) }; + } + + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top) }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), + new GTRenderedTexture(Textures.BlockIcons.SOLARPANEL_LuV) }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), + new GTRenderedTexture(Textures.BlockIcons.SOLARPANEL_IV) }; + } + + public ITexture[] getFrontActive(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), + new GTRenderedTexture(Textures.BlockIcons.SOLARPANEL_IV) }; + } + + public ITexture[] getBackActive(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top) }; + } + + public ITexture[] getBottomActive(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; + } + + public ITexture[] getTopActive(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), + new GTRenderedTexture(Textures.BlockIcons.SOLARPANEL_LuV) }; + } + + public ITexture[] getSidesActive(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), + new GTRenderedTexture(Textures.BlockIcons.SOLARPANEL_IV) }; + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTESolarHeater(this.mName, this.mTier, this.mDescriptionArray, this.mTextures, 0); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public String[] getInfoData() { + return new String[] { this.getLocalName(), "Testificate" }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public boolean isUseableByPlayer(final EntityPlayer p_70300_1_) { + return false; + } + + public boolean allowCoverOnSide(final byte aSide, final int aCoverID) { + return false; + } + + @Override + public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { + return new int[] {}; + } + + @Override + public int getSizeInventory() { + return 0; + } + + @Override + public ItemStack getStackInSlot(final int p_70301_1_) { + return null; + } + + @Override + public long maxEUStore() { + return 0; + } + + @Override + public int getCapacity() { + return 0; + } + + @Override + public long maxEUInput() { + return 0; + } + + @Override + public long maxEUOutput() { + return 0; + } + + @Override + public long maxAmperesIn() { + return 0; + } + + @Override + public long maxAmperesOut() { + return 0; + } + + @Override + public boolean isElectric() { + return false; + } + + @Override + public boolean isValidSlot(final int aIndex) { + return false; + } + + @Override + public boolean isFacingValid(final ForgeDirection facing) { + return facing.offsetY == 0; + } + + @Override + public boolean isEnetInput() { + return false; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + /* + * aNBT.setBoolean("mHasTower", mHasTower); if (this.mHasTower) { aNBT.setInteger("mTX", mTX); + * aNBT.setInteger("mTY", mTY); aNBT.setInteger("mTZ", mTZ); } + */ + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + /* + * this.mHasTower = aNBT.getBoolean("mHasTower"); if (this.mHasTower) { if (aNBT.hasKey("mTX")) this.mTX = + * aNBT.getInteger("mTX"); if (aNBT.hasKey("mTY")) this.mTY = aNBT.getInteger("mTY"); if (aNBT.hasKey("mTZ")) + * this.mTZ = aNBT.getInteger("mTZ"); } + */ + } + + @Override + public long getInputTier() { + return 0; + } + + @Override + public long getOutputTier() { + return 0; + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { + return false; + } + + @Override + public void onExplosion() {} + + public boolean hasSolarTower() { + return mHasTower; + } + + public MTESolarTower getSolarTower() { + if (this.mHasTower) { + return mTower; + } + return null; + } + + public boolean canSeeSky() { + if (this.getBaseMetaTileEntity() + .getWorld() + .canBlockSeeTheSky( + this.getBaseMetaTileEntity() + .getXCoord(), + this.getBaseMetaTileEntity() + .getYCoord() + 1, + this.getBaseMetaTileEntity() + .getZCoord())) { + return true; + } + return false; + } + + public boolean setSolarTower(MTESolarTower aTowerTile) { + if (!hasSolarTower()) { + this.mTX = aTowerTile.getBaseMetaTileEntity() + .getXCoord(); + this.mTY = (int) aTowerTile.getBaseMetaTileEntity() + .getYCoord(); + this.mTZ = aTowerTile.getBaseMetaTileEntity() + .getZCoord(); + this.mHasTower = true; + this.mTower = aTowerTile; + return true; + } + return false; + } + + public boolean clearSolarTower() { + if (mHasTower || mRequiredFacing != null || this.mTower != null) { + this.mTX = 0; + this.mTY = 0; + this.mTZ = 0; + this.mRequiredFacing = null; + this.mTower = null; + this.mHasTower = false; + return true; + } + return false; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + } + + @Override + public void onRemoval() { + super.onRemoval(); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side.offsetY == 0; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 0; + } + + @Override + public void onFacingChange() { + super.onFacingChange(); + } + + @Override + public void doExplosion(long aExplosionPower) {} +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/TileEntitySolarHeater.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/TileEntitySolarHeater.java deleted file mode 100644 index 141f4bbc43..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/misc/TileEntitySolarHeater.java +++ /dev/null @@ -1,343 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.misc; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -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.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_RenderedTexture; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_SolarTower; - -public class TileEntitySolarHeater extends GT_MetaTileEntity_TieredMachineBlock { - - public boolean mHasTower = false; - private GregtechMetaTileEntity_SolarTower mTower = null; - - private int mTX, mTY, mTZ; - private Byte mRequiredFacing; - - public TileEntitySolarHeater(final int aID, final String aName, final String aNameRegional, final int aTier, - final String aDescription, final int aSlotCount) { - super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); - } - - public TileEntitySolarHeater(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures, final int aSlotCount) { - super(aName, aTier, aSlotCount, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - return ArrayUtils.addAll(this.mDescriptionArray, "Point me at a Solar Tower", CORE.GT_Tooltip.get()); - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFrontActive(i); - rTextures[6][i + 1] = this.getBackActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), - new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_IV) }; - } - - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top) }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), - new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_LuV) }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), - new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_IV) }; - } - - public ITexture[] getFrontActive(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), - new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_IV) }; - } - - public ITexture[] getBackActive(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top) }; - } - - public ITexture[] getBottomActive(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Bottom) }; - } - - public ITexture[] getTopActive(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), - new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_LuV) }; - } - - public ITexture[] getSidesActive(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top), - new GT_RenderedTexture(Textures.BlockIcons.SOLARPANEL_IV) }; - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new TileEntitySolarHeater(this.mName, this.mTier, this.mDescriptionArray, this.mTextures, 0); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public String[] getInfoData() { - return new String[] { this.getLocalName(), "Testificate" }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public boolean isUseableByPlayer(final EntityPlayer p_70300_1_) { - return false; - } - - public boolean allowCoverOnSide(final byte aSide, final int aCoverID) { - return false; - } - - @Override - public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { - return new int[] {}; - } - - @Override - public int getSizeInventory() { - return 0; - } - - @Override - public ItemStack getStackInSlot(final int p_70301_1_) { - return null; - } - - @Override - public long maxEUStore() { - return 0; - } - - @Override - public int getCapacity() { - return 0; - } - - @Override - public long maxEUInput() { - return 0; - } - - @Override - public long maxEUOutput() { - return 0; - } - - @Override - public long maxAmperesIn() { - return 0; - } - - @Override - public long maxAmperesOut() { - return 0; - } - - @Override - public boolean isElectric() { - return false; - } - - @Override - public boolean isValidSlot(final int aIndex) { - return false; - } - - @Override - public boolean isFacingValid(final ForgeDirection facing) { - return facing.offsetY == 0; - } - - @Override - public boolean isEnetInput() { - return false; - } - - @Override - public boolean isEnetOutput() { - return false; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - /* - * aNBT.setBoolean("mHasTower", mHasTower); if (this.mHasTower) { aNBT.setInteger("mTX", mTX); - * aNBT.setInteger("mTY", mTY); aNBT.setInteger("mTZ", mTZ); } - */ - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - /* - * this.mHasTower = aNBT.getBoolean("mHasTower"); if (this.mHasTower) { if (aNBT.hasKey("mTX")) this.mTX = - * aNBT.getInteger("mTX"); if (aNBT.hasKey("mTY")) this.mTY = aNBT.getInteger("mTY"); if (aNBT.hasKey("mTZ")) - * this.mTZ = aNBT.getInteger("mTZ"); } - */ - } - - @Override - public long getInputTier() { - return 0; - } - - @Override - public long getOutputTier() { - return 0; - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { - return false; - } - - @Override - public void onExplosion() {} - - public boolean hasSolarTower() { - return mHasTower; - } - - public GregtechMetaTileEntity_SolarTower getSolarTower() { - if (this.mHasTower) { - return mTower; - } - return null; - } - - public boolean canSeeSky() { - if (this.getBaseMetaTileEntity() - .getWorld() - .canBlockSeeTheSky( - this.getBaseMetaTileEntity() - .getXCoord(), - this.getBaseMetaTileEntity() - .getYCoord() + 1, - this.getBaseMetaTileEntity() - .getZCoord())) { - return true; - } - return false; - } - - public boolean setSolarTower(GregtechMetaTileEntity_SolarTower aTowerTile) { - if (!hasSolarTower()) { - this.mTX = aTowerTile.getBaseMetaTileEntity() - .getXCoord(); - this.mTY = (int) aTowerTile.getBaseMetaTileEntity() - .getYCoord(); - this.mTZ = aTowerTile.getBaseMetaTileEntity() - .getZCoord(); - this.mHasTower = true; - this.mTower = aTowerTile; - return true; - } - return false; - } - - public boolean clearSolarTower() { - if (mHasTower || mRequiredFacing != null || this.mTower != null) { - this.mTX = 0; - this.mTY = 0; - this.mTZ = 0; - this.mRequiredFacing = null; - this.mTower = null; - this.mHasTower = false; - return true; - } - return false; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - } - - @Override - public void onRemoval() { - super.onRemoval(); - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side.offsetY == 0; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return false; - } - - @Override - public long getMinimumStoredEU() { - return 0; - } - - @Override - public void onFacingChange() { - super.onFacingChange(); - } - - @Override - public void doExplosion(long aExplosionPower) {} -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneBase.java deleted file mode 100644 index ee6ccff4b1..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneBase.java +++ /dev/null @@ -1,111 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.objects.GT_ItemStack; -import gtPlusPlus.core.lib.CORE; - -public abstract class GT_MetaTileEntity_RedstoneBase extends GT_MetaTileEntity_TieredMachineBlock { - - protected int mOpenerCount; - - public GT_MetaTileEntity_RedstoneBase(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_RedstoneBase(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, - String[] aDescription, ITexture... aTextures) { - super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); - } - - public GT_MetaTileEntity_RedstoneBase(String aName, int aTier, int aInvSlotCount, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aInvSlotCount, aDescription, aTextures); - } - - @Override - public final boolean isSimpleMachine() { - return false; - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aStack) { - return side != getBaseMetaTileEntity().getFrontFacing(); - } - - @Override - public final boolean isValidSlot(int aIndex) { - return false; - } - - @Override - public final boolean isFacingValid(ForgeDirection facing) { - return true; - } - - @Override - public final boolean isAccessAllowed(EntityPlayer aPlayer) { - return true; - } - - @Override - public abstract void saveNBTData(NBTTagCompound aNBT); - - @Override - public abstract void loadNBTData(NBTTagCompound aNBT); - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - return false; - } - - @Override - public final void onOpenGUI() { - super.onOpenGUI(); - mOpenerCount++; - } - - @Override - public final void onCloseGUI() { - super.onCloseGUI(); - mOpenerCount--; - } - - public boolean hasRedstoneSignal() { - if (getBaseMetaTileEntity().getStrongestRedstone() > 0) { - return true; - } - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (getBaseMetaTileEntity().getOutputRedstoneSignal(side) > 0) { - return true; - } - } - return false; - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public String[] getDescription() { - return ArrayUtils.add(this.mDescriptionArray, CORE.GT_Tooltip.get()); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneButtonPanel.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneButtonPanel.java deleted file mode 100644 index 174a13d3c8..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneButtonPanel.java +++ /dev/null @@ -1,205 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; - -public class GT_MetaTileEntity_RedstoneButtonPanel extends GT_MetaTileEntity_RedstoneBase { - - public byte mRedstoneStrength = 0, mType = 0, mUpdate = 0; - - public static TexturesGtBlock.CustomIcon[] sIconList = new TexturesGtBlock.CustomIcon[64]; - - static { - for (int i = 0; i < 64; i++) { - sIconList[i] = new CustomIcon("TileEntities/gt4/redstone/ButtonPanel/" + i); - } - } - - public GT_MetaTileEntity_RedstoneButtonPanel(int aID) { - super( - aID, - "redstone.button.panel", - "Button Panel", - 5, - 0, - "Right-click with Screwdriver to change Button Design"); - } - - public GT_MetaTileEntity_RedstoneButtonPanel(final String aName, String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, 5, 0, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_RedstoneButtonPanel(this.mName, mDescriptionArray, this.mTextures); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setByte("mRedstoneStrength", mRedstoneStrength); - aNBT.setByte("mType", mType); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mRedstoneStrength = aNBT.getByte("mRedstoneStrength"); - mType = aNBT.getByte("mType"); - } - - @Override - public void onValueUpdate(byte aValue) { - mRedstoneStrength = (byte) (aValue & 15); - mType = (byte) (aValue >>> 4); - } - - @Override - public byte getUpdateData() { - return (byte) ((mRedstoneStrength & 15) | (mType << 4)); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getFrontFacing()) { - if (getBaseMetaTileEntity().isServerSide()) { - mUpdate = 2; - switch (mType) { - case 0: - default: - switch (side) { - case DOWN, UP -> mRedstoneStrength = (byte) ((byte) (aX * 4) + 4 * (byte) (aZ * 4)); - case NORTH -> mRedstoneStrength = (byte) ((byte) (4 - aX * 4) + 4 * (byte) (4 - aY * 4)); - case SOUTH -> mRedstoneStrength = (byte) ((byte) (aX * 4) + 4 * (byte) (4 - aY * 4)); - case WEST -> mRedstoneStrength = (byte) ((byte) (aZ * 4) + 4 * (byte) (4 - aY * 4)); - case EAST -> mRedstoneStrength = (byte) ((byte) (4 - aZ * 4) + 4 * (byte) (4 - aY * 4)); - } - break; - case 1: - switch (side) { - case DOWN, UP -> mRedstoneStrength = (byte) (mRedstoneStrength - ^ (1 << (((byte) (aX * 2) + 2 * (byte) (aZ * 2))))); - case NORTH -> mRedstoneStrength = (byte) (mRedstoneStrength - ^ (1 << (((byte) (2 - aX * 2) + 2 * (byte) (2 - aY * 2))))); - case SOUTH -> mRedstoneStrength = (byte) (mRedstoneStrength - ^ (1 << (((byte) (aX * 2) + 2 * (byte) (2 - aY * 2))))); - case WEST -> mRedstoneStrength = (byte) (mRedstoneStrength - ^ (1 << (((byte) (aZ * 2) + 2 * (byte) (2 - aY * 2))))); - case EAST -> mRedstoneStrength = (byte) (mRedstoneStrength - ^ (1 << (((byte) (2 - aZ * 2) + 2 * (byte) (2 - aY * 2))))); - } - break; - case 2: - switch (side) { - case DOWN, UP -> mRedstoneStrength = (byte) (mRedstoneStrength ^ (1 << ((byte) (aZ * 4)))); - case NORTH -> mRedstoneStrength = (byte) (mRedstoneStrength ^ (1 << ((byte) (4 - aY * 4)))); - case SOUTH -> mRedstoneStrength = (byte) (mRedstoneStrength ^ (1 << ((byte) (4 - aY * 4)))); - case WEST -> mRedstoneStrength = (byte) (mRedstoneStrength ^ (1 << ((byte) (4 - aY * 4)))); - case EAST -> mRedstoneStrength = (byte) (mRedstoneStrength ^ (1 << ((byte) (4 - aY * 4)))); - } - break; - } - } - return true; - } - return false; - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (getBaseMetaTileEntity().isServerSide()) { - getBaseMetaTileEntity().setGenericRedstoneOutput(true); - if (mUpdate > 0) { - mUpdate--; - } else if (getBaseMetaTileEntity().isAllowedToWork()) { - mRedstoneStrength = 0; - } - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - getBaseMetaTileEntity().setStrongOutputRedstoneSignal( - side, - side == getBaseMetaTileEntity().getFrontFacing() ? (byte) 0 : mRedstoneStrength); - getBaseMetaTileEntity().setInternalOutputRedstoneSignal( - side, - side == getBaseMetaTileEntity().getFrontFacing() ? (byte) 0 : mRedstoneStrength); - } - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getFrontFacing()) mType = (byte) ((mType + 1) % 3); - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getSides(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFront(i); - rTextures[6][i + 1] = this.getSidesActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], - new GT_RenderedTexture(sIconList[mType * 16 + mRedstoneStrength]) }; - } - return this.mTextures[(aActive || hasRedstoneSignal() ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Top_Main_Off) }; - } - - public ITexture[] getTopActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Top_Main_On) }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_Main_Off) }; - } - - public ITexture[] getBottomActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_Main_On) }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Side_Main_Off) }; - } - - public ITexture[] getSidesActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Side_Main_On) }; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneCircuitBlock.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneCircuitBlock.java deleted file mode 100644 index 3b9b9af9a0..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneCircuitBlock.java +++ /dev/null @@ -1,654 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import java.util.Set; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.oredict.OreDictionary; - -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IRedstoneCircuitBlock; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.ICoverable; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_CircuitryBehavior; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gtPlusPlus.xmod.gregtech.api.gui.GTPP_UITextures; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GT_MetaTileEntity_RedstoneCircuitBlock extends GT_MetaTileEntity_RedstoneBase - implements IRedstoneCircuitBlock, IAddUIWidgets { - - public int mGate = 0, mGateData[] = new int[] { 0, 0, 0, 0, 0, 0, 0, 0 }; - public boolean bOutput = true; - - public GT_MetaTileEntity_RedstoneCircuitBlock(int aID) { - super(aID, "redstone.circuit", "Redstone Circuit Block", 1, 5, "Computes Redstone"); - } - - public GT_MetaTileEntity_RedstoneCircuitBlock(final String aName, String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, 1, 5, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_RedstoneCircuitBlock(this.mName, mDescriptionArray, this.mTextures); - } - - @Override - public boolean hasSidedRedstoneOutputBehavior() { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isInputFacing(ForgeDirection side) { - return !this.isOutputFacing(side); - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isPneumatic() { - return false; - } - - @Override - public boolean isSteampowered() { - return false; - } - - @Override - public boolean isOutputFacing(ForgeDirection side) { - return side == this.getOutputFacing(); - } - - @Override - public long getMinimumStoredEU() { - return 512; - } - - @Override - public long maxEUInput() { - return GT_Values.V[1]; - } - - @Override - public long maxEUOutput() { - return bOutput ? GT_Values.V[1] : 0; - } - - @Override - public long maxAmperesIn() { - return 2; - } - - @Override - public long maxAmperesOut() { - return 1; - } - - @Override - public int getSizeInventory() { - return 5; - } - - @Override - public long maxEUStore() { - return GT_Values.V[3] * 1024; - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mGate", mGate); - aNBT.setIntArray("mGateData", mGateData); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mGate = aNBT.getInteger("mGate"); - mGateData = aNBT.getIntArray("mGateData"); - if (mGateData.length != 8) mGateData = new int[] { 0, 0, 0, 0, 0, 0, 0, 0 }; - } - - public void switchGateForward(boolean aShift) { - try { - Set tKeys = GregTech_API.sCircuitryBehaviors.keySet(); - ArrayList tList = new ArrayList<>(); - tList.addAll(tKeys); - if (tList.size() <= 0) return; - Collections.sort(tList); - if (!GregTech_API.sCircuitryBehaviors.containsKey(mGate)) mGate = tList.get(0); - int tIndex = Collections.binarySearch(tList, mGate); - tIndex += aShift ? 16 : 1; - while (tIndex >= tList.size()) tIndex -= tList.size(); - mGate = tList.get(tIndex); - switchGate(); - } catch (Throwable e) { - GT_Log.err.print(e); - } - } - - public void switchGateBackward(boolean aShift) { - try { - Set tKeys = GregTech_API.sCircuitryBehaviors.keySet(); - ArrayList tList = new ArrayList<>(); - tList.addAll(tKeys); - if (tList.size() <= 0) return; - Collections.sort(tList); - if (!GregTech_API.sCircuitryBehaviors.containsKey(mGate)) mGate = tList.get(0); - int tIndex = Collections.binarySearch(tList, mGate); - tIndex -= aShift ? 16 : 1; - while (tIndex < 0) tIndex += tList.size(); - mGate = tList.get(tIndex); - switchGate(); - } catch (Throwable e) { - GT_Log.err.print(e); - } - } - - @Override - public void onFacingChange() { - resetRedstone(); - } - - private void resetRedstone() { - getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.DOWN, (byte) 0); - getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.UP, (byte) 0); - getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.NORTH, (byte) 0); - getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.SOUTH, (byte) 0); - getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.WEST, (byte) 0); - getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.EAST, (byte) 0); - } - - public void changeGateData(int aIndex, int aValue) { - mGateData[aIndex] += aValue; - validateGateData(); - } - - public void stackGateData(int aIndex, ItemStack aStack) { - mGateData[aIndex] = GT_Utility.stackToInt(aStack); - validateGateData(); - } - - private void switchGate() { - resetRedstone(); - Arrays.fill(mGateData, 0); - GT_CircuitryBehavior tBehaviour = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tBehaviour != null) try { - tBehaviour.initParameters(mGateData, this); - } catch (Throwable e) { - GT_Log.err.print(e); - } - validateGateData(); - } - - private void validateGateData() { - GT_CircuitryBehavior tBehaviour = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tBehaviour != null) try { - tBehaviour.validateParameters(mGateData, this); - } catch (Throwable e) { - GT_Log.err.print(e); - } - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - getBaseMetaTileEntity().setGenericRedstoneOutput(true); - validateGateData(); - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - getBaseMetaTileEntity().setGenericRedstoneOutput(true); - if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().isServerSide()) { - mInventory[0] = mInventory[1] = mInventory[2] = mInventory[3] = mInventory[4] = null; - if (getBaseMetaTileEntity().getUniversalEnergyStored() >= getMinimumStoredEU()) { - if (getBaseMetaTileEntity().isActive()) { - GT_CircuitryBehavior tBehaviour = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tBehaviour != null) { - try { - tBehaviour.onTick(mGateData, this); - if (tBehaviour.displayItemStack(mGateData, this, 0)) - mInventory[1] = getCoverByID(mGateData[0]); - if (tBehaviour.displayItemStack(mGateData, this, 1)) - mInventory[2] = getCoverByID(mGateData[1]); - if (tBehaviour.displayItemStack(mGateData, this, 2)) - mInventory[3] = getCoverByID(mGateData[2]); - if (tBehaviour.displayItemStack(mGateData, this, 3)) - mInventory[4] = getCoverByID(mGateData[3]); - } catch (Throwable e) { - GT_Log.err.print(e); - } - } - } - getBaseMetaTileEntity().setErrorDisplayID(0); - } else { - getBaseMetaTileEntity().setErrorDisplayID(1); - } - } - } - - @Override - public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - // Only Calc server-side - if (!this.getBaseMetaTileEntity() - .isServerSide()) { - return; - } - // Emit Redstone - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - byte aRedstone = getBaseMetaTileEntity().getOutputRedstoneSignal(side); - this.getBaseMetaTileEntity() - .setInternalOutputRedstoneSignal(side, aRedstone); - } - } - - @Override - public final boolean hasRedstoneSignal() { - for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { - if (getBaseMetaTileEntity().getOutputRedstoneSignal(side) > 0) { - return true; - } - } - return false; - } - - @Override - public boolean allowGeneralRedstoneOutput() { - return true; - } - - /** The Item List for Covers */ - public static final Map sCoversItems = new HashMap<>(); - - private static void initCovers() { - for (GT_ItemStack aKey : GregTech_API.sCovers.keySet()) { - ItemStack aStack = aKey.toStack() - .copy(); - if (aStack != null) { - sCoversItems.put(GT_Utility.stackToInt(aStack), aStack); - } - } - } - - public static ItemStack getCoverByID(int aStack) { - if (sCoversItems.isEmpty()) { - initCovers(); - } - return sCoversItems.get(Integer.valueOf(aStack)); - } - - @Override - public ForgeDirection getOutputFacing() { - return getBaseMetaTileEntity().getBackFacing(); - } - - @Override - public boolean setRedstone(byte aStrength, ForgeDirection side) { - if (getOutputRedstone(side) != aStrength) { - if (getBaseMetaTileEntity().decreaseStoredEnergyUnits(1, false)) { - getBaseMetaTileEntity().setInternalOutputRedstoneSignal(side, aStrength); - getBaseMetaTileEntity().setErrorDisplayID(0); - return true; - } else { - getBaseMetaTileEntity().setErrorDisplayID(1); - return false; - } - } - return false; - } - - /* - * @Override public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { if (aSide == - * getOutputFacing()) { if (side == ForgeDirection.DOWN) return aRedstone ? 56 : 54; if (side == ForgeDirection.UP) - * return aRedstone ? 53 : 52; return aRedstone ? 94 : 93; } if (side == ForgeDirection.DOWN) return aRedstone ? 60 - * : 59; if (side == ForgeDirection.UP) return aRedstone ? 58 : 57; return aRedstone ? 62 : 61; } - */ - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - public byte getOutputRedstone(ForgeDirection side) { - return getBaseMetaTileEntity().getOutputRedstoneSignal(side); - } - - @Override - public byte getInputRedstone(ForgeDirection side) { - return getBaseMetaTileEntity().getInternalInputRedstoneSignal(side); - } - - @Override - public Block getBlockAtSide(ForgeDirection side) { - return getBaseMetaTileEntity().getBlockAtSide(side); - } - - @Override - public byte getMetaIDAtSide(ForgeDirection side) { - return getBaseMetaTileEntity().getMetaIDAtSide(side); - } - - @Override - public TileEntity getTileEntityAtSide(ForgeDirection side) { - return getBaseMetaTileEntity().getTileEntityAtSide(side); - } - - @Override - public int getRandom(int aRange) { - return getBaseMetaTileEntity().getRandomNumber(aRange); - } - - @Override - public GT_CoverBehavior getCover(ForgeDirection side) { - return (GT_CoverBehavior) getBaseMetaTileEntity().getCoverBehaviorAtSideNew(side); - } - - @Override - public int getCoverID(ForgeDirection side) { - return getBaseMetaTileEntity().getCoverIDAtSide(side); - } - - @Override - public int getCoverVariable(ForgeDirection side) { - return ((ISerializableObject.LegacyCoverData) getBaseMetaTileEntity().getComplexCoverDataAtSide(side)).get(); - } - - @Override - public ICoverable getOwnTileEntity() { - return getBaseMetaTileEntity(); - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getSides(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getSidesActive(i); - rTextures[6][i + 1] = this.getBackActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return this.mTextures[(aActive || hasRedstoneSignal() ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } - - private GT_RenderedTexture getBase() { - return new GT_RenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top); - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { getBase(), new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Top_Off) }; - } - - public ITexture[] getTopActive(final byte aColor) { - return new ITexture[] { getBase(), new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Top_On) }; - } - - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { getBase(), new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Side_Off), - new GT_RenderedTexture(TexturesGtBlock.Casing_InventoryManagaer_Red) }; - } - - public ITexture[] getBackActive(final byte aColor) { - return new ITexture[] { getBase(), new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Side_On), - new GT_RenderedTexture(TexturesGtBlock.Casing_InventoryManagaer_Red_Redstone) }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { getBase(), new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_Off) }; - } - - public ITexture[] getBottomActive(final byte aColor) { - return new ITexture[] { getBase(), new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_On) }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { getBase(), new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Side_Off) }; - } - - public ITexture[] getSidesActive(final byte aColor) { - return new ITexture[] { getBase(), new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Side_On) }; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GTPP_UITextures.PICTURE_REDSTONE_CIRCUIT_SCREEN) - .setPos(43, 5) - .setSize(108, 72)); - for (int i = 0; i < 4; i++) { - final int index = i; - builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { - ItemStack tStack = widget.getContext() - .getPlayer().inventory.getItemStack(); - if (tStack == null) { - changeGateData( - index, - clickData.mouseButton == 0 ? clickData.shift ? +128 : +1 : clickData.shift ? -128 : -1); - } else { - tStack = GT_Utility.copy(tStack); - if (clickData.mouseButton != 0) tStack.setItemDamage(OreDictionary.WILDCARD_VALUE); - stackGateData(index, tStack); - } - }) - .setBackground(GT_UITextures.BUTTON_STANDARD, GTPP_UITextures.OVERLAY_BUTTON_PLUS_MINUS) - .setPos(7, 5 + i * 18) - .setSize(18, 18)) - .widget( - SlotWidget.phantom(inventoryHandler, i + 1) - .disableInteraction() - .setPos(25, 5 + i * 18)); - } - builder.widget( - new CycleButtonWidget().setToggle(() -> bOutput, val -> bOutput = val) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setStaticTexture(GT_UITextures.OVERLAY_BUTTON_EMIT_ENERGY) - .addTooltip("Toggle EU Output") - .setPos(151, 5) - .setSize(18, 18)) - .widget( - new CycleButtonWidget() - .setToggle(() -> getBaseMetaTileEntity().isActive(), val -> getBaseMetaTileEntity().setActive(val)) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setStaticTexture(GTPP_UITextures.OVERLAY_BUTTON_ACTIVE_STATE) - .addTooltip("Toggle Active State") - .setPos(151, 23) - .setSize(18, 18)) - .widget(new ButtonWidget().setOnClick((clickData, widget) -> { - if (clickData.mouseButton == 0) switchGateForward(clickData.shift); - else switchGateBackward(clickData.shift); - }) - .setBackground(GT_UITextures.BUTTON_STANDARD, GTPP_UITextures.OVERLAY_BUTTON_CHANGE_MODE) - .addTooltip("Change Redstone Circuit") - .setPos(151, 41) - .setSize(18, 18)); - - builder.widget(new FakeSyncWidget.IntegerSyncer(() -> mGate, val -> mGate = val)); - for (int i = 0; i < mGateData.length; i++) { - final int index = i; - builder.widget(new FakeSyncWidget.IntegerSyncer(() -> mGateData[index], val -> mGateData[index] = val)); - } - - builder.widget(new DrawableWidget().setDrawable(() -> { - if (getBaseMetaTileEntity().getErrorDisplayID() > 0) { - if ((getBaseMetaTileEntity().getTimer() / 5) % 2 == 0) { - return GTPP_UITextures.PICTURE_ELECTRICITY_ERROR; - } else { - return null; - } - } else { - return GTPP_UITextures.PICTURE_ELECTRICITY_FINE; - } - }) - .setPos(140, 9) - .setSize(7, 7)) - .widget( - new FakeSyncWidget.IntegerSyncer( - () -> getBaseMetaTileEntity().getErrorDisplayID(), - val -> getBaseMetaTileEntity().setErrorDisplayID(val))); - - builder.widget(TextWidget.dynamicString(() -> { - GT_CircuitryBehavior tCircuit = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tCircuit != null) return tCircuit.getName(); - return ""; - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 8)) - .widget(TextWidget.dynamicString(() -> { - GT_CircuitryBehavior tCircuit = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tCircuit != null) return tCircuit.getDescription(); - return ""; - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 19)) - .widget(TextWidget.dynamicString(() -> { - GT_CircuitryBehavior tCircuit = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tCircuit != null) return tCircuit.getDataDescription(mGateData, 0); - return ""; - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 33)) - .widget(TextWidget.dynamicString(() -> { - GT_CircuitryBehavior tCircuit = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tCircuit != null) return tCircuit.getDataDescription(mGateData, 1); - return ""; - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 44)) - .widget(TextWidget.dynamicString(() -> { - GT_CircuitryBehavior tCircuit = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tCircuit != null) return tCircuit.getDataDescription(mGateData, 2); - return ""; - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 55)) - .widget(TextWidget.dynamicString(() -> { - GT_CircuitryBehavior tCircuit = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tCircuit != null) return tCircuit.getDataDescription(mGateData, 3); - return ""; - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(46, 66)) - .widget(TextWidget.dynamicString(() -> { - GT_CircuitryBehavior tCircuit = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tCircuit != null) { - String tString = tCircuit.getDataDisplay(mGateData, 0); - return tString == null ? GT_Utility.parseNumberToString(mGateData[0]) : tString; - } - return ""; - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(99, 33)) - .widget(TextWidget.dynamicString(() -> { - GT_CircuitryBehavior tCircuit = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tCircuit != null) { - String tString = tCircuit.getDataDisplay(mGateData, 1); - return tString == null ? GT_Utility.parseNumberToString(mGateData[1]) : tString; - } - return ""; - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(99, 44)) - .widget(TextWidget.dynamicString(() -> { - GT_CircuitryBehavior tCircuit = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tCircuit != null) { - String tString = tCircuit.getDataDisplay(mGateData, 2); - return tString == null ? GT_Utility.parseNumberToString(mGateData[2]) : tString; - } - return ""; - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(99, 55)) - .widget(TextWidget.dynamicString(() -> { - GT_CircuitryBehavior tCircuit = GregTech_API.sCircuitryBehaviors.get(mGate); - if (tCircuit != null) { - String tString = tCircuit.getDataDisplay(mGateData, 3); - return tString == null ? GT_Utility.parseNumberToString(mGateData[3]) : tString; - } - return ""; - }) - .setSynced(false) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(99, 66)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneLamp.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneLamp.java deleted file mode 100644 index 06dd76c3f4..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneLamp.java +++ /dev/null @@ -1,73 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; - -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; - -public class GT_MetaTileEntity_RedstoneLamp extends GT_MetaTileEntity_RedstoneBase { - - public byte mRedstoneStrength = 0, mType = 0; - public static TexturesGtBlock.CustomIcon[] sIconList = new TexturesGtBlock.CustomIcon[2]; - - static { - sIconList[0] = new CustomIcon("TileEntities/gt4/redstone/Lamp/off"); - sIconList[1] = new CustomIcon("TileEntities/gt4/redstone/Lamp/on"); - } - - public GT_MetaTileEntity_RedstoneLamp(int aID) { - super(aID, "redstone.lamp", "Redstone Controlled Lamp", 0, 0, "Redstone Controlled Lamp"); - } - - public GT_MetaTileEntity_RedstoneLamp(final String aName, String[] aDescription, final ITexture[][][] aTextures) { - super(aName, 0, 0, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_RedstoneLamp(this.mName, mDescriptionArray, this.mTextures); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) {} - - @Override - public void loadNBTData(NBTTagCompound aNBT) {} - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().isServerSide()) { - getBaseMetaTileEntity().setLightValue(getBaseMetaTileEntity().getStrongestRedstone()); - getBaseMetaTileEntity().setActive(getBaseMetaTileEntity().getStrongestRedstone() > 0); - } - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getSides(i); - rTextures[1][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return this.mTextures[(aActive ? 1 : 0)][aColorIndex + 1]; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(sIconList[0]) }; - } - - public ITexture[] getSidesActive(final byte aColor) { - return new ITexture[] { new GT_RenderedTexture(sIconList[1]) }; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneStrengthDisplay.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneStrengthDisplay.java deleted file mode 100644 index b3b9d0fdcb..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneStrengthDisplay.java +++ /dev/null @@ -1,139 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; - -public class GT_MetaTileEntity_RedstoneStrengthDisplay extends GT_MetaTileEntity_RedstoneBase { - - public byte mRedstoneStrength = 0, mType = 0; - public static TexturesGtBlock.CustomIcon[] sIconList = new TexturesGtBlock.CustomIcon[144]; - - static { - for (int i = 0; i < 144; i++) { - sIconList[i] = new CustomIcon("TileEntities/gt4/redstone/Display/" + i); - } - } - - public GT_MetaTileEntity_RedstoneStrengthDisplay(int aID, String aUnlocal, String aLocal, String aDescription) { - super(aID, aUnlocal, aLocal, 5, 0, aDescription); - } - - public GT_MetaTileEntity_RedstoneStrengthDisplay(final String aName, String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, 5, 0, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_RedstoneStrengthDisplay(this.mName, mDescriptionArray, this.mTextures); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setByte("mRedstoneStrength", mRedstoneStrength); - aNBT.setByte("mType", mType); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - mRedstoneStrength = aNBT.getByte("mRedstoneStrength"); - mType = aNBT.getByte("mType"); - } - - @Override - public void onValueUpdate(byte aValue) { - mRedstoneStrength = (byte) (aValue & 15); - mType = (byte) (aValue >>> 4); - } - - @Override - public byte getUpdateData() { - return (byte) ((mRedstoneStrength & 15) | (mType << 4)); - } - - @Override - public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPreTick(aBaseMetaTileEntity, aTick); - if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().isServerSide()) { - mRedstoneStrength = getBaseMetaTileEntity().getStrongestRedstone(); - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getFrontFacing()) mType = (byte) ((mType + 1) % 6); - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getSides(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFront(i); - rTextures[6][i + 1] = this.getSidesActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], - new GT_RenderedTexture(sIconList[mType * 16 + mRedstoneStrength]) }; - } - return this.mTextures[(aActive || hasRedstoneSignal() ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Top_Off) }; - } - - public ITexture[] getTopActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Top_On) }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_Off) }; - } - - public ITexture[] getBottomActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_On) }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Side_Off) }; - } - - public ITexture[] getSidesActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Casing_Redstone_Side_On) }; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneStrengthScale.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneStrengthScale.java deleted file mode 100644 index 5821dbab1a..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/GT_MetaTileEntity_RedstoneStrengthScale.java +++ /dev/null @@ -1,54 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.objects.GT_RenderedTexture; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; - -public class GT_MetaTileEntity_RedstoneStrengthScale extends GT_MetaTileEntity_RedstoneStrengthDisplay { - - public static TexturesGtBlock.CustomIcon[] sIconList = new TexturesGtBlock.CustomIcon[32]; - - static { - for (int i = 0; i < 32; i++) { - sIconList[i] = new CustomIcon("TileEntities/gt4/redstone/Scale/" + i); - } - } - - public GT_MetaTileEntity_RedstoneStrengthScale(int aID) { - super(aID, "redstone.display.scale", "Redstone Scale", "Redstone Strength on a Scale"); - } - - public GT_MetaTileEntity_RedstoneStrengthScale(final String aName, String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_RedstoneStrengthScale(this.mName, mDescriptionArray, this.mTextures); - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (side == getBaseMetaTileEntity().getFrontFacing()) mType = (byte) ((mType + 1) % 2); - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - if (side == facing) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], - new GT_RenderedTexture(sIconList[mType * 16 + mRedstoneStrength]) }; - } - return this.mTextures[(aActive || hasRedstoneSignal() ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneBase.java new file mode 100644 index 0000000000..6da66be563 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneBase.java @@ -0,0 +1,111 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.objects.GTItemStack; +import gtPlusPlus.core.lib.GTPPCore; + +public abstract class MTERedstoneBase extends MTETieredMachineBlock { + + protected int mOpenerCount; + + public MTERedstoneBase(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String aDescription, ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTERedstoneBase(int aID, String aName, String aNameRegional, int aTier, int aInvSlotCount, + String[] aDescription, ITexture... aTextures) { + super(aID, aName, aNameRegional, aTier, aInvSlotCount, aDescription, aTextures); + } + + public MTERedstoneBase(String aName, int aTier, int aInvSlotCount, String[] aDescription, + ITexture[][][] aTextures) { + super(aName, aTier, aInvSlotCount, aDescription, aTextures); + } + + @Override + public final boolean isSimpleMachine() { + return false; + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aStack) { + return side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public final boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public final boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public final boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public abstract void saveNBTData(NBTTagCompound aNBT); + + @Override + public abstract void loadNBTData(NBTTagCompound aNBT); + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + return false; + } + + @Override + public final void onOpenGUI() { + super.onOpenGUI(); + mOpenerCount++; + } + + @Override + public final void onCloseGUI() { + super.onCloseGUI(); + mOpenerCount--; + } + + public boolean hasRedstoneSignal() { + if (getBaseMetaTileEntity().getStrongestRedstone() > 0) { + return true; + } + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (getBaseMetaTileEntity().getOutputRedstoneSignal(side) > 0) { + return true; + } + } + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public String[] getDescription() { + return ArrayUtils.add(this.mDescriptionArray, GTPPCore.GT_Tooltip.get()); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneButtonPanel.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneButtonPanel.java new file mode 100644 index 0000000000..a83d05f928 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneButtonPanel.java @@ -0,0 +1,204 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; + +public class MTERedstoneButtonPanel extends MTERedstoneBase { + + public byte mRedstoneStrength = 0, mType = 0, mUpdate = 0; + + public static TexturesGtBlock.CustomIcon[] sIconList = new TexturesGtBlock.CustomIcon[64]; + + static { + for (int i = 0; i < 64; i++) { + sIconList[i] = new CustomIcon("TileEntities/gt4/redstone/ButtonPanel/" + i); + } + } + + public MTERedstoneButtonPanel(int aID) { + super( + aID, + "redstone.button.panel", + "Button Panel", + 5, + 0, + "Right-click with Screwdriver to change Button Design"); + } + + public MTERedstoneButtonPanel(final String aName, String[] aDescription, final ITexture[][][] aTextures) { + super(aName, 5, 0, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTERedstoneButtonPanel(this.mName, mDescriptionArray, this.mTextures); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setByte("mRedstoneStrength", mRedstoneStrength); + aNBT.setByte("mType", mType); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mRedstoneStrength = aNBT.getByte("mRedstoneStrength"); + mType = aNBT.getByte("mType"); + } + + @Override + public void onValueUpdate(byte aValue) { + mRedstoneStrength = (byte) (aValue & 15); + mType = (byte) (aValue >>> 4); + } + + @Override + public byte getUpdateData() { + return (byte) ((mRedstoneStrength & 15) | (mType << 4)); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing()) { + if (getBaseMetaTileEntity().isServerSide()) { + mUpdate = 2; + switch (mType) { + case 0: + default: + switch (side) { + case DOWN, UP -> mRedstoneStrength = (byte) ((byte) (aX * 4) + 4 * (byte) (aZ * 4)); + case NORTH -> mRedstoneStrength = (byte) ((byte) (4 - aX * 4) + 4 * (byte) (4 - aY * 4)); + case SOUTH -> mRedstoneStrength = (byte) ((byte) (aX * 4) + 4 * (byte) (4 - aY * 4)); + case WEST -> mRedstoneStrength = (byte) ((byte) (aZ * 4) + 4 * (byte) (4 - aY * 4)); + case EAST -> mRedstoneStrength = (byte) ((byte) (4 - aZ * 4) + 4 * (byte) (4 - aY * 4)); + } + break; + case 1: + switch (side) { + case DOWN, UP -> mRedstoneStrength = (byte) (mRedstoneStrength + ^ (1 << (((byte) (aX * 2) + 2 * (byte) (aZ * 2))))); + case NORTH -> mRedstoneStrength = (byte) (mRedstoneStrength + ^ (1 << (((byte) (2 - aX * 2) + 2 * (byte) (2 - aY * 2))))); + case SOUTH -> mRedstoneStrength = (byte) (mRedstoneStrength + ^ (1 << (((byte) (aX * 2) + 2 * (byte) (2 - aY * 2))))); + case WEST -> mRedstoneStrength = (byte) (mRedstoneStrength + ^ (1 << (((byte) (aZ * 2) + 2 * (byte) (2 - aY * 2))))); + case EAST -> mRedstoneStrength = (byte) (mRedstoneStrength + ^ (1 << (((byte) (2 - aZ * 2) + 2 * (byte) (2 - aY * 2))))); + } + break; + case 2: + switch (side) { + case DOWN, UP -> mRedstoneStrength = (byte) (mRedstoneStrength ^ (1 << ((byte) (aZ * 4)))); + case NORTH -> mRedstoneStrength = (byte) (mRedstoneStrength ^ (1 << ((byte) (4 - aY * 4)))); + case SOUTH -> mRedstoneStrength = (byte) (mRedstoneStrength ^ (1 << ((byte) (4 - aY * 4)))); + case WEST -> mRedstoneStrength = (byte) (mRedstoneStrength ^ (1 << ((byte) (4 - aY * 4)))); + case EAST -> mRedstoneStrength = (byte) (mRedstoneStrength ^ (1 << ((byte) (4 - aY * 4)))); + } + break; + } + } + return true; + } + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (getBaseMetaTileEntity().isServerSide()) { + getBaseMetaTileEntity().setGenericRedstoneOutput(true); + if (mUpdate > 0) { + mUpdate--; + } else if (getBaseMetaTileEntity().isAllowedToWork()) { + mRedstoneStrength = 0; + } + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + getBaseMetaTileEntity().setStrongOutputRedstoneSignal( + side, + side == getBaseMetaTileEntity().getFrontFacing() ? (byte) 0 : mRedstoneStrength); + getBaseMetaTileEntity().setInternalOutputRedstoneSignal( + side, + side == getBaseMetaTileEntity().getFrontFacing() ? (byte) 0 : mRedstoneStrength); + } + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing()) mType = (byte) ((mType + 1) % 3); + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getSides(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFront(i); + rTextures[6][i + 1] = this.getSidesActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], + new GTRenderedTexture(sIconList[mType * 16 + mRedstoneStrength]) }; + } + return this.mTextures[(aActive || hasRedstoneSignal() ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Top_Main_Off) }; + } + + public ITexture[] getTopActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Top_Main_On) }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_Main_Off) }; + } + + public ITexture[] getBottomActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_Main_On) }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Side_Main_Off) }; + } + + public ITexture[] getSidesActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Side_Main_On) }; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneCircuitBlock.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneCircuitBlock.java new file mode 100644 index 0000000000..20cd569e24 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneCircuitBlock.java @@ -0,0 +1,652 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.oredict.OreDictionary; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IRedstoneCircuitBlock; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTItemStack; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.CircuitryBehavior; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gtPlusPlus.xmod.gregtech.api.gui.GTPPUITextures; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTERedstoneCircuitBlock extends MTERedstoneBase implements IRedstoneCircuitBlock, IAddUIWidgets { + + public int mGate = 0, mGateData[] = new int[] { 0, 0, 0, 0, 0, 0, 0, 0 }; + public boolean bOutput = true; + + public MTERedstoneCircuitBlock(int aID) { + super(aID, "redstone.circuit", "Redstone Circuit Block", 1, 5, "Computes Redstone"); + } + + public MTERedstoneCircuitBlock(final String aName, String[] aDescription, final ITexture[][][] aTextures) { + super(aName, 1, 5, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTERedstoneCircuitBlock(this.mName, mDescriptionArray, this.mTextures); + } + + @Override + public boolean hasSidedRedstoneOutputBehavior() { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return !this.isOutputFacing(side); + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isPneumatic() { + return false; + } + + @Override + public boolean isSteampowered() { + return false; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == this.getOutputFacing(); + } + + @Override + public long getMinimumStoredEU() { + return 512; + } + + @Override + public long maxEUInput() { + return GTValues.V[1]; + } + + @Override + public long maxEUOutput() { + return bOutput ? GTValues.V[1] : 0; + } + + @Override + public long maxAmperesIn() { + return 2; + } + + @Override + public long maxAmperesOut() { + return 1; + } + + @Override + public int getSizeInventory() { + return 5; + } + + @Override + public long maxEUStore() { + return GTValues.V[3] * 1024; + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mGate", mGate); + aNBT.setIntArray("mGateData", mGateData); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mGate = aNBT.getInteger("mGate"); + mGateData = aNBT.getIntArray("mGateData"); + if (mGateData.length != 8) mGateData = new int[] { 0, 0, 0, 0, 0, 0, 0, 0 }; + } + + public void switchGateForward(boolean aShift) { + try { + Set tKeys = GregTechAPI.sCircuitryBehaviors.keySet(); + ArrayList tList = new ArrayList<>(); + tList.addAll(tKeys); + if (tList.size() <= 0) return; + Collections.sort(tList); + if (!GregTechAPI.sCircuitryBehaviors.containsKey(mGate)) mGate = tList.get(0); + int tIndex = Collections.binarySearch(tList, mGate); + tIndex += aShift ? 16 : 1; + while (tIndex >= tList.size()) tIndex -= tList.size(); + mGate = tList.get(tIndex); + switchGate(); + } catch (Throwable e) { + GTLog.err.print(e); + } + } + + public void switchGateBackward(boolean aShift) { + try { + Set tKeys = GregTechAPI.sCircuitryBehaviors.keySet(); + ArrayList tList = new ArrayList<>(); + tList.addAll(tKeys); + if (tList.size() <= 0) return; + Collections.sort(tList); + if (!GregTechAPI.sCircuitryBehaviors.containsKey(mGate)) mGate = tList.get(0); + int tIndex = Collections.binarySearch(tList, mGate); + tIndex -= aShift ? 16 : 1; + while (tIndex < 0) tIndex += tList.size(); + mGate = tList.get(tIndex); + switchGate(); + } catch (Throwable e) { + GTLog.err.print(e); + } + } + + @Override + public void onFacingChange() { + resetRedstone(); + } + + private void resetRedstone() { + getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.DOWN, (byte) 0); + getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.UP, (byte) 0); + getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.NORTH, (byte) 0); + getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.SOUTH, (byte) 0); + getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.WEST, (byte) 0); + getBaseMetaTileEntity().setInternalOutputRedstoneSignal(ForgeDirection.EAST, (byte) 0); + } + + public void changeGateData(int aIndex, int aValue) { + mGateData[aIndex] += aValue; + validateGateData(); + } + + public void stackGateData(int aIndex, ItemStack aStack) { + mGateData[aIndex] = GTUtility.stackToInt(aStack); + validateGateData(); + } + + private void switchGate() { + resetRedstone(); + Arrays.fill(mGateData, 0); + CircuitryBehavior tBehaviour = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tBehaviour != null) try { + tBehaviour.initParameters(mGateData, this); + } catch (Throwable e) { + GTLog.err.print(e); + } + validateGateData(); + } + + private void validateGateData() { + CircuitryBehavior tBehaviour = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tBehaviour != null) try { + tBehaviour.validateParameters(mGateData, this); + } catch (Throwable e) { + GTLog.err.print(e); + } + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + getBaseMetaTileEntity().setGenericRedstoneOutput(true); + validateGateData(); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + getBaseMetaTileEntity().setGenericRedstoneOutput(true); + if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().isServerSide()) { + mInventory[0] = mInventory[1] = mInventory[2] = mInventory[3] = mInventory[4] = null; + if (getBaseMetaTileEntity().getUniversalEnergyStored() >= getMinimumStoredEU()) { + if (getBaseMetaTileEntity().isActive()) { + CircuitryBehavior tBehaviour = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tBehaviour != null) { + try { + tBehaviour.onTick(mGateData, this); + if (tBehaviour.displayItemStack(mGateData, this, 0)) + mInventory[1] = getCoverByID(mGateData[0]); + if (tBehaviour.displayItemStack(mGateData, this, 1)) + mInventory[2] = getCoverByID(mGateData[1]); + if (tBehaviour.displayItemStack(mGateData, this, 2)) + mInventory[3] = getCoverByID(mGateData[2]); + if (tBehaviour.displayItemStack(mGateData, this, 3)) + mInventory[4] = getCoverByID(mGateData[3]); + } catch (Throwable e) { + GTLog.err.print(e); + } + } + } + getBaseMetaTileEntity().setErrorDisplayID(0); + } else { + getBaseMetaTileEntity().setErrorDisplayID(1); + } + } + } + + @Override + public void onPostTick(final IGregTechTileEntity aBaseMetaTileEntity, final long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + // Only Calc server-side + if (!this.getBaseMetaTileEntity() + .isServerSide()) { + return; + } + // Emit Redstone + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + byte aRedstone = getBaseMetaTileEntity().getOutputRedstoneSignal(side); + this.getBaseMetaTileEntity() + .setInternalOutputRedstoneSignal(side, aRedstone); + } + } + + @Override + public final boolean hasRedstoneSignal() { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (getBaseMetaTileEntity().getOutputRedstoneSignal(side) > 0) { + return true; + } + } + return false; + } + + @Override + public boolean allowGeneralRedstoneOutput() { + return true; + } + + /** The Item List for Covers */ + public static final Map sCoversItems = new HashMap<>(); + + private static void initCovers() { + for (GTItemStack aKey : GregTechAPI.sCovers.keySet()) { + ItemStack aStack = aKey.toStack() + .copy(); + if (aStack != null) { + sCoversItems.put(GTUtility.stackToInt(aStack), aStack); + } + } + } + + public static ItemStack getCoverByID(int aStack) { + if (sCoversItems.isEmpty()) { + initCovers(); + } + return sCoversItems.get(Integer.valueOf(aStack)); + } + + @Override + public ForgeDirection getOutputFacing() { + return getBaseMetaTileEntity().getBackFacing(); + } + + @Override + public boolean setRedstone(byte aStrength, ForgeDirection side) { + if (getOutputRedstone(side) != aStrength) { + if (getBaseMetaTileEntity().decreaseStoredEnergyUnits(1, false)) { + getBaseMetaTileEntity().setInternalOutputRedstoneSignal(side, aStrength); + getBaseMetaTileEntity().setErrorDisplayID(0); + return true; + } else { + getBaseMetaTileEntity().setErrorDisplayID(1); + return false; + } + } + return false; + } + + /* + * @Override public int getTextureIndex(byte aSide, byte aFacing, boolean aActive, boolean aRedstone) { if (aSide == + * getOutputFacing()) { if (side == ForgeDirection.DOWN) return aRedstone ? 56 : 54; if (side == ForgeDirection.UP) + * return aRedstone ? 53 : 52; return aRedstone ? 94 : 93; } if (side == ForgeDirection.DOWN) return aRedstone ? 60 + * : 59; if (side == ForgeDirection.UP) return aRedstone ? 58 : 57; return aRedstone ? 62 : 61; } + */ + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + public byte getOutputRedstone(ForgeDirection side) { + return getBaseMetaTileEntity().getOutputRedstoneSignal(side); + } + + @Override + public byte getInputRedstone(ForgeDirection side) { + return getBaseMetaTileEntity().getInternalInputRedstoneSignal(side); + } + + @Override + public Block getBlockAtSide(ForgeDirection side) { + return getBaseMetaTileEntity().getBlockAtSide(side); + } + + @Override + public byte getMetaIDAtSide(ForgeDirection side) { + return getBaseMetaTileEntity().getMetaIDAtSide(side); + } + + @Override + public TileEntity getTileEntityAtSide(ForgeDirection side) { + return getBaseMetaTileEntity().getTileEntityAtSide(side); + } + + @Override + public int getRandom(int aRange) { + return getBaseMetaTileEntity().getRandomNumber(aRange); + } + + @Override + public CoverBehavior getCover(ForgeDirection side) { + return (CoverBehavior) getBaseMetaTileEntity().getCoverBehaviorAtSideNew(side); + } + + @Override + public int getCoverID(ForgeDirection side) { + return getBaseMetaTileEntity().getCoverIDAtSide(side); + } + + @Override + public int getCoverVariable(ForgeDirection side) { + return ((ISerializableObject.LegacyCoverData) getBaseMetaTileEntity().getComplexCoverDataAtSide(side)).get(); + } + + @Override + public ICoverable getOwnTileEntity() { + return getBaseMetaTileEntity(); + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getSides(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getSidesActive(i); + rTextures[6][i + 1] = this.getBackActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return this.mTextures[(aActive || hasRedstoneSignal() ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } + + private GTRenderedTexture getBase() { + return new GTRenderedTexture(TexturesGtBlock.Casing_Machine_Simple_Top); + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { getBase(), new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Top_Off) }; + } + + public ITexture[] getTopActive(final byte aColor) { + return new ITexture[] { getBase(), new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Top_On) }; + } + + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { getBase(), new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Side_Off), + new GTRenderedTexture(TexturesGtBlock.Casing_InventoryManagaer_Red) }; + } + + public ITexture[] getBackActive(final byte aColor) { + return new ITexture[] { getBase(), new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Side_On), + new GTRenderedTexture(TexturesGtBlock.Casing_InventoryManagaer_Red_Redstone) }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { getBase(), new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_Off) }; + } + + public ITexture[] getBottomActive(final byte aColor) { + return new ITexture[] { getBase(), new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_On) }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { getBase(), new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Side_Off) }; + } + + public ITexture[] getSidesActive(final byte aColor) { + return new ITexture[] { getBase(), new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Side_On) }; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTPPUITextures.PICTURE_REDSTONE_CIRCUIT_SCREEN) + .setPos(43, 5) + .setSize(108, 72)); + for (int i = 0; i < 4; i++) { + final int index = i; + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + ItemStack tStack = widget.getContext() + .getPlayer().inventory.getItemStack(); + if (tStack == null) { + changeGateData( + index, + clickData.mouseButton == 0 ? clickData.shift ? +128 : +1 : clickData.shift ? -128 : -1); + } else { + tStack = GTUtility.copy(tStack); + if (clickData.mouseButton != 0) tStack.setItemDamage(OreDictionary.WILDCARD_VALUE); + stackGateData(index, tStack); + } + }) + .setBackground(GTUITextures.BUTTON_STANDARD, GTPPUITextures.OVERLAY_BUTTON_PLUS_MINUS) + .setPos(7, 5 + i * 18) + .setSize(18, 18)) + .widget( + SlotWidget.phantom(inventoryHandler, i + 1) + .disableInteraction() + .setPos(25, 5 + i * 18)); + } + builder.widget( + new CycleButtonWidget().setToggle(() -> bOutput, val -> bOutput = val) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setStaticTexture(GTUITextures.OVERLAY_BUTTON_EMIT_ENERGY) + .addTooltip("Toggle EU Output") + .setPos(151, 5) + .setSize(18, 18)) + .widget( + new CycleButtonWidget() + .setToggle(() -> getBaseMetaTileEntity().isActive(), val -> getBaseMetaTileEntity().setActive(val)) + .setVariableBackground(GTUITextures.BUTTON_STANDARD_TOGGLE) + .setStaticTexture(GTPPUITextures.OVERLAY_BUTTON_ACTIVE_STATE) + .addTooltip("Toggle Active State") + .setPos(151, 23) + .setSize(18, 18)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (clickData.mouseButton == 0) switchGateForward(clickData.shift); + else switchGateBackward(clickData.shift); + }) + .setBackground(GTUITextures.BUTTON_STANDARD, GTPPUITextures.OVERLAY_BUTTON_CHANGE_MODE) + .addTooltip("Change Redstone Circuit") + .setPos(151, 41) + .setSize(18, 18)); + + builder.widget(new FakeSyncWidget.IntegerSyncer(() -> mGate, val -> mGate = val)); + for (int i = 0; i < mGateData.length; i++) { + final int index = i; + builder.widget(new FakeSyncWidget.IntegerSyncer(() -> mGateData[index], val -> mGateData[index] = val)); + } + + builder.widget(new DrawableWidget().setDrawable(() -> { + if (getBaseMetaTileEntity().getErrorDisplayID() > 0) { + if ((getBaseMetaTileEntity().getTimer() / 5) % 2 == 0) { + return GTPPUITextures.PICTURE_ELECTRICITY_ERROR; + } else { + return null; + } + } else { + return GTPPUITextures.PICTURE_ELECTRICITY_FINE; + } + }) + .setPos(140, 9) + .setSize(7, 7)) + .widget( + new FakeSyncWidget.IntegerSyncer( + () -> getBaseMetaTileEntity().getErrorDisplayID(), + val -> getBaseMetaTileEntity().setErrorDisplayID(val))); + + builder.widget(TextWidget.dynamicString(() -> { + CircuitryBehavior tCircuit = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tCircuit != null) return tCircuit.getName(); + return ""; + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 8)) + .widget(TextWidget.dynamicString(() -> { + CircuitryBehavior tCircuit = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tCircuit != null) return tCircuit.getDescription(); + return ""; + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 19)) + .widget(TextWidget.dynamicString(() -> { + CircuitryBehavior tCircuit = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tCircuit != null) return tCircuit.getDataDescription(mGateData, 0); + return ""; + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 33)) + .widget(TextWidget.dynamicString(() -> { + CircuitryBehavior tCircuit = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tCircuit != null) return tCircuit.getDataDescription(mGateData, 1); + return ""; + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 44)) + .widget(TextWidget.dynamicString(() -> { + CircuitryBehavior tCircuit = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tCircuit != null) return tCircuit.getDataDescription(mGateData, 2); + return ""; + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 55)) + .widget(TextWidget.dynamicString(() -> { + CircuitryBehavior tCircuit = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tCircuit != null) return tCircuit.getDataDescription(mGateData, 3); + return ""; + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 66)) + .widget(TextWidget.dynamicString(() -> { + CircuitryBehavior tCircuit = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tCircuit != null) { + String tString = tCircuit.getDataDisplay(mGateData, 0); + return tString == null ? GTUtility.parseNumberToString(mGateData[0]) : tString; + } + return ""; + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(99, 33)) + .widget(TextWidget.dynamicString(() -> { + CircuitryBehavior tCircuit = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tCircuit != null) { + String tString = tCircuit.getDataDisplay(mGateData, 1); + return tString == null ? GTUtility.parseNumberToString(mGateData[1]) : tString; + } + return ""; + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(99, 44)) + .widget(TextWidget.dynamicString(() -> { + CircuitryBehavior tCircuit = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tCircuit != null) { + String tString = tCircuit.getDataDisplay(mGateData, 2); + return tString == null ? GTUtility.parseNumberToString(mGateData[2]) : tString; + } + return ""; + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(99, 55)) + .widget(TextWidget.dynamicString(() -> { + CircuitryBehavior tCircuit = GregTechAPI.sCircuitryBehaviors.get(mGate); + if (tCircuit != null) { + String tString = tCircuit.getDataDisplay(mGateData, 3); + return tString == null ? GTUtility.parseNumberToString(mGateData[3]) : tString; + } + return ""; + }) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(99, 66)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneLamp.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneLamp.java new file mode 100644 index 0000000000..7b963d3c7d --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneLamp.java @@ -0,0 +1,73 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; + +public class MTERedstoneLamp extends MTERedstoneBase { + + public byte mRedstoneStrength = 0, mType = 0; + public static TexturesGtBlock.CustomIcon[] sIconList = new TexturesGtBlock.CustomIcon[2]; + + static { + sIconList[0] = new CustomIcon("TileEntities/gt4/redstone/Lamp/off"); + sIconList[1] = new CustomIcon("TileEntities/gt4/redstone/Lamp/on"); + } + + public MTERedstoneLamp(int aID) { + super(aID, "redstone.lamp", "Redstone Controlled Lamp", 0, 0, "Redstone Controlled Lamp"); + } + + public MTERedstoneLamp(final String aName, String[] aDescription, final ITexture[][][] aTextures) { + super(aName, 0, 0, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTERedstoneLamp(this.mName, mDescriptionArray, this.mTextures); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) {} + + @Override + public void loadNBTData(NBTTagCompound aNBT) {} + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().isServerSide()) { + getBaseMetaTileEntity().setLightValue(getBaseMetaTileEntity().getStrongestRedstone()); + getBaseMetaTileEntity().setActive(getBaseMetaTileEntity().getStrongestRedstone() > 0); + } + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getSides(i); + rTextures[1][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return this.mTextures[(aActive ? 1 : 0)][aColorIndex + 1]; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(sIconList[0]) }; + } + + public ITexture[] getSidesActive(final byte aColor) { + return new ITexture[] { new GTRenderedTexture(sIconList[1]) }; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneStrengthDisplay.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneStrengthDisplay.java new file mode 100644 index 0000000000..c2591c6a41 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneStrengthDisplay.java @@ -0,0 +1,138 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; + +public class MTERedstoneStrengthDisplay extends MTERedstoneBase { + + public byte mRedstoneStrength = 0, mType = 0; + public static TexturesGtBlock.CustomIcon[] sIconList = new TexturesGtBlock.CustomIcon[144]; + + static { + for (int i = 0; i < 144; i++) { + sIconList[i] = new CustomIcon("TileEntities/gt4/redstone/Display/" + i); + } + } + + public MTERedstoneStrengthDisplay(int aID, String aUnlocal, String aLocal, String aDescription) { + super(aID, aUnlocal, aLocal, 5, 0, aDescription); + } + + public MTERedstoneStrengthDisplay(final String aName, String[] aDescription, final ITexture[][][] aTextures) { + super(aName, 5, 0, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTERedstoneStrengthDisplay(this.mName, mDescriptionArray, this.mTextures); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setByte("mRedstoneStrength", mRedstoneStrength); + aNBT.setByte("mType", mType); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + mRedstoneStrength = aNBT.getByte("mRedstoneStrength"); + mType = aNBT.getByte("mType"); + } + + @Override + public void onValueUpdate(byte aValue) { + mRedstoneStrength = (byte) (aValue & 15); + mType = (byte) (aValue >>> 4); + } + + @Override + public byte getUpdateData() { + return (byte) ((mRedstoneStrength & 15) | (mType << 4)); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if (getBaseMetaTileEntity().isAllowedToWork() && getBaseMetaTileEntity().isServerSide()) { + mRedstoneStrength = getBaseMetaTileEntity().getStrongestRedstone(); + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing()) mType = (byte) ((mType + 1) % 6); + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getSides(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFront(i); + rTextures[6][i + 1] = this.getSidesActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], + new GTRenderedTexture(sIconList[mType * 16 + mRedstoneStrength]) }; + } + return this.mTextures[(aActive || hasRedstoneSignal() ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1] }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Top_Off) }; + } + + public ITexture[] getTopActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Top_On) }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_Off) }; + } + + public ITexture[] getBottomActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Bottom_On) }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Side_Off) }; + } + + public ITexture[] getSidesActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Casing_Redstone_Side_On) }; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneStrengthScale.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneStrengthScale.java new file mode 100644 index 0000000000..e59500dcc0 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/redstone/MTERedstoneStrengthScale.java @@ -0,0 +1,53 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.redstone; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock.CustomIcon; + +public class MTERedstoneStrengthScale extends MTERedstoneStrengthDisplay { + + public static TexturesGtBlock.CustomIcon[] sIconList = new TexturesGtBlock.CustomIcon[32]; + + static { + for (int i = 0; i < 32; i++) { + sIconList[i] = new CustomIcon("TileEntities/gt4/redstone/Scale/" + i); + } + } + + public MTERedstoneStrengthScale(int aID) { + super(aID, "redstone.display.scale", "Redstone Scale", "Redstone Strength on a Scale"); + } + + public MTERedstoneStrengthScale(final String aName, String[] aDescription, final ITexture[][][] aTextures) { + super(aName, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTERedstoneStrengthScale(this.mName, mDescriptionArray, this.mTextures); + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (side == getBaseMetaTileEntity().getFrontFacing()) mType = (byte) ((mType + 1) % 2); + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[mTier][aColorIndex + 1], + new GTRenderedTexture(sIconList[mType * 16 + mRedstoneStrength]) }; + } + return this.mTextures[(aActive || hasRedstoneSignal() ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredChest.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredChest.java deleted file mode 100644 index 2b1591ab80..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredChest.java +++ /dev/null @@ -1,245 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.storage; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.ArrayUtils; - -import com.gtnewhorizons.modularui.api.NumberFormatMUI; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.enums.Textures.BlockIcons; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.modularui.IAddUIWidgets; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_TieredMachineBlock; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.lib.CORE; - -public class GT_MetaTileEntity_TieredChest extends GT_MetaTileEntity_TieredMachineBlock implements IAddUIWidgets { - - public int mItemCount = 0; - public ItemStack mItemStack = null; - private static final double mStorageFactor = (270000.0D / 16); - - public GT_MetaTileEntity_TieredChest(int aID, String aName, String aNameRegional, int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 3, - "This Chest stores " + (int) (Math.pow(6.0D, (double) aTier) * mStorageFactor) + " Items", - new ITexture[0]); - } - - public GT_MetaTileEntity_TieredChest(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - return ArrayUtils.add(this.mDescriptionArray, CORE.GT_Tooltip.get()); - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - public boolean isFacingValid(ForgeDirection facing) { - 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_TieredChest(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (this.getBaseMetaTileEntity() - .isServerSide() - && this.getBaseMetaTileEntity() - .isAllowedToWork()) { - if (this.getItemCount() <= 0) { - this.mItemStack = null; - this.mItemCount = 0; - } - - if (this.mItemStack == null && this.mInventory[0] != null) { - this.mItemStack = this.mInventory[0].copy(); - } - - if (this.mInventory[0] != null && this.mItemCount < this.getMaxItemCount() - && GT_Utility.areStacksEqual(this.mInventory[0], this.mItemStack)) { - this.mItemCount += this.mInventory[0].stackSize; - if (this.mItemCount > this.getMaxItemCount()) { - this.mInventory[0].stackSize = this.mItemCount - this.getMaxItemCount(); - this.mItemCount = this.getMaxItemCount(); - } else { - this.mInventory[0] = null; - } - } - - if (this.mInventory[1] == null && this.mItemStack != null) { - this.mInventory[1] = this.mItemStack.copy(); - this.mInventory[1].stackSize = Math.min(this.mItemStack.getMaxStackSize(), this.mItemCount); - this.mItemCount -= this.mInventory[1].stackSize; - } else if (this.mItemCount > 0 && GT_Utility.areStacksEqual(this.mInventory[1], this.mItemStack) - && this.mInventory[1].getMaxStackSize() > this.mInventory[1].stackSize) { - int tmp = Math - .min(this.mItemCount, this.mInventory[1].getMaxStackSize() - this.mInventory[1].stackSize); - this.mInventory[1].stackSize += tmp; - this.mItemCount -= tmp; - } - - if (this.mItemStack != null) { - this.mInventory[2] = this.mItemStack.copy(); - this.mInventory[2].stackSize = Math.min(this.mItemStack.getMaxStackSize(), this.mItemCount); - } else { - this.mInventory[2] = null; - } - } - } - - private int getItemCount() { - return this.mItemCount; - } - - @Override - public void setItemCount(int aCount) { - this.mItemCount = aCount; - } - - @Override - public int getProgresstime() { - return this.mItemCount + (this.mInventory[0] == null ? 0 : this.mInventory[0].stackSize) - + (this.mInventory[1] == null ? 0 : this.mInventory[1].stackSize); - } - - @Override - public int maxProgresstime() { - return this.getMaxItemCount(); - } - - @Override - public int getMaxItemCount() { - return (int) (Math.pow(6.0D, (double) this.mTier) * mStorageFactor - 128.0D); - } - - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return aIndex == 1; - } - - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return aIndex == 0 && (this.mInventory[0] == null || GT_Utility.areStacksEqual(this.mInventory[0], aStack)); - } - - @Override - public String[] getInfoData() { - return this.mItemStack == null - ? new String[] { "Super Storage Chest", "Stored Items:", "No Items", Integer.toString(0), - Integer.toString(this.getMaxItemCount()) } - : new String[] { "Super Storage Chest", "Stored Items:", this.mItemStack.getDisplayName(), - Integer.toString(this.mItemCount), Integer.toString(this.getMaxItemCount()) }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - aNBT.setInteger("mItemCount", this.mItemCount); - if (this.mItemStack != null) { - aNBT.setTag("mItemStack", this.mItemStack.writeToNBT(new NBTTagCompound())); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - if (aNBT.hasKey("mItemCount")) { - this.mItemCount = aNBT.getInteger("mItemCount"); - } - - if (aNBT.hasKey("mItemStack")) { - this.mItemStack = ItemStack.loadItemStackFromNBT((NBTTagCompound) aNBT.getTag("mItemStack")); - } - } - - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int aColorIndex, boolean aActive, boolean aRedstone) { - return aBaseMetaTileEntity.getFrontFacing() == ForgeDirection.DOWN && side == ForgeDirection.WEST - ? new ITexture[] { BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1], - new GT_RenderedTexture(BlockIcons.OVERLAY_QCHEST) } - : (side == aBaseMetaTileEntity.getFrontFacing() - ? new ITexture[] { BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1], - new GT_RenderedTexture(BlockIcons.OVERLAY_QCHEST) } - : new ITexture[] { BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1] }); - } - - @Override - public ITexture[][][] getTextureSet(ITexture[] aTextures) { - return new ITexture[0][0][0]; - } - - protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(7, 16) - .setSize(71, 45)) - .widget( - new SlotWidget(inventoryHandler, 0) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_IN) - .setPos(79, 16)) - .widget( - new SlotWidget(inventoryHandler, 1).setAccess(true, false) - .setBackground(getGUITextureSet().getItemSlot(), GT_UITextures.OVERLAY_SLOT_OUT) - .setPos(79, 52)) - .widget( - SlotWidget.phantom(inventoryHandler, 2) - .disableInteraction() - .setBackground(GT_UITextures.TRANSPARENT) - .setPos(59, 42)) - .widget( - new TextWidget("Item Amount").setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(10, 20)) - .widget( - new TextWidget().setStringSupplier(() -> numberFormat.format(mItemCount)) - .setDefaultColor(COLOR_TEXT_WHITE.get()) - .setPos(10, 30)); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredTank.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredTank.java deleted file mode 100644 index e277eb4076..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GT_MetaTileEntity_TieredTank.java +++ /dev/null @@ -1,189 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.storage; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UIInfos; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicTank; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; - -public class GT_MetaTileEntity_TieredTank extends GT_MetaTileEntity_BasicTank { - - public GT_MetaTileEntity_TieredTank(final int aID, final String aName, final String aNameRegional, - final int aTier) { - super( - aID, - aName, - aNameRegional, - aTier, - 3, - "Stores " + GT_Utility.formatNumbers(((int) (Math.pow(2, aTier) * 32000))) + "L of fluid"); - } - - public GT_MetaTileEntity_TieredTank(final String aName, final int aTier, final String[] aDescription, - final ITexture[][][] aTextures) { - super(aName, aTier, 3, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - List description = new ArrayList<>(Arrays.asList(this.mDescriptionArray)); - description.add("A portable tank."); - if (this.mFluid != null) { - description.add("Fluid: " + mFluid.getLocalizedName() + " " + mFluid.amount + "L"); - } - description.add(CORE.GT_Tooltip.get()); - return description.toArray(new String[0]); - } - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - return new ITexture[0][0][0]; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return side == ForgeDirection.UP - ? new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1], - new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_TOP_FLUIDTANK) } - : new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1], - new GT_RenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_FLUIDTANK) }; - } - - @Override - public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { - if (stack.hasTagCompound() && stack.stackTagCompound.hasKey("mFluid")) { - final FluidStack tContents = FluidStack - .loadFluidStackFromNBT(stack.stackTagCompound.getCompoundTag("mFluid")); - if (tContents != null && tContents.amount > 0) { - tooltip.add( - GT_LanguageManager.addStringLocalization( - "TileEntity_TANK_INFO", - "Contains Fluid: ", - !GregTech_API.sPostloadFinished) + EnumChatFormatting.YELLOW - + tContents.getLocalizedName() - + EnumChatFormatting.GRAY); - tooltip.add( - GT_LanguageManager.addStringLocalization( - "TileEntity_TANK_AMOUNT", - "Fluid Amount: ", - !GregTech_API.sPostloadFinished) + EnumChatFormatting.GREEN - + GT_Utility.formatNumbers(tContents.amount) - + " L" - + EnumChatFormatting.GRAY); - } - } - } - - @Override - public boolean isSimpleMachine() { - return true; - } - - @Override - public boolean isFacingValid(final ForgeDirection facing) { - return true; - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public final byte getUpdateData() { - return 0x00; - } - - @Override - public boolean doesFillContainers() { - return true; - } - - @Override - public boolean doesEmptyContainers() { - return true; - } - - @Override - public boolean canTankBeFilled() { - return true; - } - - @Override - public boolean canTankBeEmptied() { - return true; - } - - @Override - public String[] getInfoData() { - - if (this.mFluid == null) { - return new String[] { GT_Values.VOLTAGE_NAMES[this.mTier] + " Fluid Tank", "Stored Fluid:", "No Fluid", - 0 + "L", this.getCapacity() + "L" }; - } - return new String[] { GT_Values.VOLTAGE_NAMES[this.mTier] + " Fluid Tank", "Stored Fluid:", - this.mFluid.getLocalizedName(), this.mFluid.amount + "L", this.getCapacity() + "L" }; - } - - @Override - public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_TieredTank(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } - - @Override - public int getCapacity() { - return (int) (Math.pow(2, this.mTier) * 32000); - } - - @Override - public int getTankPressure() { - return 100; - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); - return true; - } - - @Override - public boolean displaysItemStack() { - return true; - } - - @Override - public boolean displaysStackSize() { - return false; - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - if (mFluid != null) { - Logger.WARNING("Setting item fluid nbt"); - aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); - if (aNBT.hasKey("mFluid")) { - Logger.WARNING("Set mFluid to NBT."); - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GregtechMetaEnergyBuffer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GregtechMetaEnergyBuffer.java deleted file mode 100644 index 17b2d77756..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/GregtechMetaEnergyBuffer.java +++ /dev/null @@ -1,439 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.storage; - -import static gregtech.api.enums.GT_Values.V; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -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.objects.GT_ItemStack; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMetaTileEntity; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; - -public class GregtechMetaEnergyBuffer extends GregtechMetaTileEntity { - - protected byte aCurrentOutputAmperage = 4; - - public GregtechMetaEnergyBuffer(final int aID, final String aName, final String aNameRegional, final int aTier, - final String aDescription, final int aSlotCount) { - super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); - } - - public GregtechMetaEnergyBuffer(final String aName, final int aTier, final String aDescription, - final ITexture[][][] aTextures, final int aSlotCount) { - super(aName, aTier, aSlotCount, aDescription, aTextures); - } - - @Override - public String[] getDescription() { - return new String[] { this.mDescription, "Defaults 4A In/Out", "Change output Amperage with a screwdriver", - "Now Portable!", CORE.GT_Tooltip.get() }; - } - - @Override - public boolean allowCoverOnSide(ForgeDirection side, GT_ItemStack aCover) { - if (side != this.getBaseMetaTileEntity() - .getFrontFacing()) { - return true; - } - return super.allowCoverOnSide(side, aCover); - } - - /* - * MACHINE_STEEL_SIDE - */ - - @Override - public ITexture[][][] getTextureSet(final ITexture[] aTextures) { - final ITexture[][][] rTextures = new ITexture[10][17][]; - for (byte i = -1; i < 16; i++) { - rTextures[0][i + 1] = this.getFront(i); - rTextures[1][i + 1] = this.getBack(i); - rTextures[2][i + 1] = this.getBottom(i); - rTextures[3][i + 1] = this.getTop(i); - rTextures[4][i + 1] = this.getSides(i); - rTextures[5][i + 1] = this.getFrontActive(i); - rTextures[6][i + 1] = this.getBackActive(i); - rTextures[7][i + 1] = this.getBottomActive(i); - rTextures[8][i + 1] = this.getTopActive(i); - rTextures[9][i + 1] = this.getSidesActive(i); - } - return rTextures; - } - - @Override - public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, - final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { - return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 - : side == facing.getOpposite() ? 1 - : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; - } - - public ITexture[] getFront(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; - } - - public ITexture[] getBack(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; - } - - public ITexture[] getBottom(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; - } - - public ITexture[] getTop(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Screen_Logo) }; - } - - public ITexture[] getSides(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; - } - - public ITexture[] getFrontActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; - } - - public ITexture[] getBackActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; - } - - public ITexture[] getBottomActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; - } - - public ITexture[] getTopActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Screen_Logo) }; - } - - public ITexture[] getSidesActive(final byte aColor) { - return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], - new GT_RenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; - } - - @Override - public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { - return new GregtechMetaEnergyBuffer( - this.mName, - this.mTier, - this.mDescription, - this.mTextures, - this.mInventory.length); - } - - @Override - public boolean isSimpleMachine() { - return false; - } - - @Override - public boolean isElectric() { - return true; - } - - @Override - public boolean isValidSlot(final int aIndex) { - return true; - } - - @Override - public boolean isFacingValid(final ForgeDirection facing) { - return true; - } - - @Override - public boolean isEnetInput() { - return true; - } - - @Override - public boolean isEnetOutput() { - return true; - } - - @Override - public boolean isInputFacing(final ForgeDirection side) { - return side != this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public boolean isOutputFacing(final ForgeDirection side) { - return side == this.getBaseMetaTileEntity() - .getFrontFacing(); - } - - @Override - public boolean isTeleporterCompatible() { - return false; - } - - @Override - public long getMinimumStoredEU() { - return V[this.mTier] * 2; - } - - @Override - public long maxEUStore() { - return V[this.mTier] * 250000; - } - - @Override - public long maxEUInput() { - return V[this.mTier]; - } - - @Override - public long maxEUOutput() { - return V[this.mTier]; - } - - @Override - public long maxAmperesIn() { - return aCurrentOutputAmperage; - } - - @Override - public long maxAmperesOut() { - return aCurrentOutputAmperage; - } - - @Override - public int rechargerSlotStartIndex() { - return 0; - } - - @Override - public int dechargerSlotStartIndex() { - return 0; - } - - @Override - public int rechargerSlotCount() { - return 0; - } - - @Override - public int dechargerSlotCount() { - return 0; - } - - @Override - public int getProgresstime() { - return (int) this.getBaseMetaTileEntity() - .getUniversalEnergyStored(); - } - - @Override - public int maxProgresstime() { - return (int) this.getBaseMetaTileEntity() - .getUniversalEnergyCapacity(); - } - - @Override - public boolean isAccessAllowed(final EntityPlayer aPlayer) { - return true; - } - - @Override - public void saveNBTData(final NBTTagCompound aNBT) { - aNBT.setByte("aCurrentOutputAmperage", aCurrentOutputAmperage); - long aEU = this.getBaseMetaTileEntity() - .getStoredEU(); - if (aEU > 0) { - aNBT.setLong("aStoredEU", aEU); - if (aNBT.hasKey("aStoredEU")) { - Logger.WARNING("Set aStoredEU to NBT."); - } - } - } - - @Override - public void loadNBTData(final NBTTagCompound aNBT) { - aCurrentOutputAmperage = aNBT.getByte("aCurrentOutputAmperage"); - if (aNBT.hasKey("aStoredEU")) { - this.setEUVar(aNBT.getLong("aStoredEU")); - } - } - - @Override - public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { - Logger.WARNING("Right Click on MTE by Player"); - if (aBaseMetaTileEntity.isClientSide()) { - return true; - } - - Logger.WARNING("MTE is Client-side"); - this.showEnergy(aPlayer.getEntityWorld(), aPlayer); - return true; - } - - protected void showEnergy(final World worldIn, final EntityPlayer playerIn) { - final long tempStorage = this.getBaseMetaTileEntity() - .getStoredEU(); - final double c = ((double) tempStorage / this.maxEUStore()) * 100; - final double roundOff = Math.round(c * 100.00) / 100.00; - PlayerUtils.messagePlayer( - playerIn, - "Energy: " + GT_Utility.formatNumbers(tempStorage) + " EU at " + V[this.mTier] + "v (" + roundOff + "%)"); - PlayerUtils.messagePlayer(playerIn, "Amperage: " + GT_Utility.formatNumbers(maxAmperesOut()) + "A"); - } - // Utils.LOG_WARNING("Begin Show Energy"); - /* - * //Utils.LOG_INFO("getProgresstime: "+tempStorage+" maxProgresstime: "+maxEUStore()+" C: "+c); - * Utils.LOG_INFO("getProgressTime: "+getProgresstime()); Utils.LOG_INFO("maxProgressTime: "+maxProgresstime()); - * Utils.LOG_INFO("getMinimumStoredEU: "+getMinimumStoredEU()); Utils.LOG_INFO("maxEUStore: "+maxEUStore()); - */ - /* - * final long d = (tempStorage * 100L) / maxEUStore(); - * Utils.LOG_INFO("getProgresstime: "+tempStorage+" maxProgresstime: "+maxEUStore()+" D: "+d); final double - * roundOff2 = Math.round(d * 100.00) / 100.00; Utils.messagePlayer(playerIn, "Energy: " + tempStorage + - * " EU at "+V[mTier]+"v ("+roundOff2+"%)"); Utils.LOG_WARNING("Making new instance of Guihandler"); GuiHandler - * block = new GuiHandler(); Utils.LOG_WARNING("Guihandler.toString(): "+block.toString()); - * block.getClientGuiElement(1, playerIn, worldIn, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ); - */ - - @Override - public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, - final ForgeDirection side, final ItemStack aStack) { - return false; - } - - @Override - public String[] getInfoData() { - String cur = GT_Utility.formatNumbers( - this.getBaseMetaTileEntity() - .getStoredEU()); - String max = GT_Utility.formatNumbers( - this.getBaseMetaTileEntity() - .getEUCapacity()); - - // Right-align current storage with maximum storage - String fmt = String.format("%%%ds", max.length()); - cur = String.format(fmt, cur); - - return new String[] { cur + " EU stored", max + " EU capacity" }; - } - - @Override - public boolean isGivingInformation() { - return true; - } - - @Override - public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { - return new int[] {}; - } - - @Override - public boolean canInsertItem(final int p_102007_1_, final ItemStack p_102007_2_, final int p_102007_3_) { - return false; - } - - @Override - public boolean canExtractItem(final int p_102008_1_, final ItemStack p_102008_2_, final int p_102008_3_) { - return false; - } - - @Override - public int getSizeInventory() { - return 0; - } - - @Override - public ItemStack getStackInSlot(final int p_70301_1_) { - return null; - } - - @Override - public ItemStack decrStackSize(final int p_70298_1_, final int p_70298_2_) { - return null; - } - - @Override - public ItemStack getStackInSlotOnClosing(final int p_70304_1_) { - return null; - } - - @Override - public void setInventorySlotContents(final int p_70299_1_, final ItemStack p_70299_2_) {} - - @Override - public String getInventoryName() { - return super.getInventoryName(); - } - - @Override - public boolean hasCustomInventoryName() { - return false; - } - - @Override - public int getInventoryStackLimit() { - return 0; - } - - @Override - public boolean isUseableByPlayer(final EntityPlayer p_70300_1_) { - return false; - } - - @Override - public void openInventory() {} - - @Override - public void closeInventory() {} - - @Override - public boolean isItemValidForSlot(final int p_94041_1_, final ItemStack p_94041_2_) { - return false; - } - - @Override - public void setItemNBT(NBTTagCompound aNBT) { - aNBT.setByte("aCurrentOutputAmperage", aCurrentOutputAmperage); - long aEU = this.getBaseMetaTileEntity() - .getStoredEU(); - if (aEU > 0) { - aNBT.setLong("aStoredEU", aEU); - if (aNBT.hasKey("aStoredEU")) { - Logger.WARNING("Set aStoredEU to NBT."); - } - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - byte aTest = (byte) (aCurrentOutputAmperage + 1); - if (aTest > 16 || aTest <= 0) { - aTest = 1; - } - aCurrentOutputAmperage = aTest; - PlayerUtils.messagePlayer(aPlayer, "Now handling " + aCurrentOutputAmperage + " Amps."); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTEEnergyBuffer.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTEEnergyBuffer.java new file mode 100644 index 0000000000..ed4ff6b4ca --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTEEnergyBuffer.java @@ -0,0 +1,434 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.storage; + +import static gregtech.api.enums.GTValues.V; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +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.objects.GTItemStack; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GTPPMetaTileEntity; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; + +public class MTEEnergyBuffer extends GTPPMetaTileEntity { + + protected byte aCurrentOutputAmperage = 4; + + public MTEEnergyBuffer(final int aID, final String aName, final String aNameRegional, final int aTier, + final String aDescription, final int aSlotCount) { + super(aID, aName, aNameRegional, aTier, aSlotCount, aDescription); + } + + public MTEEnergyBuffer(final String aName, final int aTier, final String aDescription, + final ITexture[][][] aTextures, final int aSlotCount) { + super(aName, aTier, aSlotCount, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + return new String[] { this.mDescription, "Defaults 4A In/Out", "Change output Amperage with a screwdriver", + "Now Portable!", GTPPCore.GT_Tooltip.get() }; + } + + @Override + public boolean allowCoverOnSide(ForgeDirection side, GTItemStack aCover) { + if (side != this.getBaseMetaTileEntity() + .getFrontFacing()) { + return true; + } + return super.allowCoverOnSide(side, aCover); + } + + /* + * MACHINE_STEEL_SIDE + */ + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + final ITexture[][][] rTextures = new ITexture[10][17][]; + for (byte i = -1; i < 16; i++) { + rTextures[0][i + 1] = this.getFront(i); + rTextures[1][i + 1] = this.getBack(i); + rTextures[2][i + 1] = this.getBottom(i); + rTextures[3][i + 1] = this.getTop(i); + rTextures[4][i + 1] = this.getSides(i); + rTextures[5][i + 1] = this.getFrontActive(i); + rTextures[6][i + 1] = this.getBackActive(i); + rTextures[7][i + 1] = this.getBottomActive(i); + rTextures[8][i + 1] = this.getTopActive(i); + rTextures[9][i + 1] = this.getSidesActive(i); + } + return rTextures; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return this.mTextures[(aActive ? 5 : 0) + (side == facing ? 0 + : side == facing.getOpposite() ? 1 + : side == ForgeDirection.DOWN ? 2 : side == ForgeDirection.UP ? 3 : 4)][aColorIndex + 1]; + } + + public ITexture[] getFront(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; + } + + public ITexture[] getBack(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; + } + + public ITexture[] getBottom(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; + } + + public ITexture[] getTop(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Screen_Logo) }; + } + + public ITexture[] getSides(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; + } + + public ITexture[] getFrontActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI[this.mTier] }; + } + + public ITexture[] getBackActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; + } + + public ITexture[] getBottomActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; + } + + public ITexture[] getTopActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Screen_Logo) }; + } + + public ITexture[] getSidesActive(final byte aColor) { + return new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColor + 1], + new GTRenderedTexture(TexturesGtBlock.Overlay_Machine_Dimensional_Orange) }; + } + + @Override + public IMetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTEEnergyBuffer(this.mName, this.mTier, this.mDescription, this.mTextures, this.mInventory.length); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isValidSlot(final int aIndex) { + return true; + } + + @Override + public boolean isFacingValid(final ForgeDirection facing) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isInputFacing(final ForgeDirection side) { + return side != this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public boolean isOutputFacing(final ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public boolean isTeleporterCompatible() { + return false; + } + + @Override + public long getMinimumStoredEU() { + return V[this.mTier] * 2; + } + + @Override + public long maxEUStore() { + return V[this.mTier] * 250000; + } + + @Override + public long maxEUInput() { + return V[this.mTier]; + } + + @Override + public long maxEUOutput() { + return V[this.mTier]; + } + + @Override + public long maxAmperesIn() { + return aCurrentOutputAmperage; + } + + @Override + public long maxAmperesOut() { + return aCurrentOutputAmperage; + } + + @Override + public int rechargerSlotStartIndex() { + return 0; + } + + @Override + public int dechargerSlotStartIndex() { + return 0; + } + + @Override + public int rechargerSlotCount() { + return 0; + } + + @Override + public int dechargerSlotCount() { + return 0; + } + + @Override + public int getProgresstime() { + return (int) this.getBaseMetaTileEntity() + .getUniversalEnergyStored(); + } + + @Override + public int maxProgresstime() { + return (int) this.getBaseMetaTileEntity() + .getUniversalEnergyCapacity(); + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public void saveNBTData(final NBTTagCompound aNBT) { + aNBT.setByte("aCurrentOutputAmperage", aCurrentOutputAmperage); + long aEU = this.getBaseMetaTileEntity() + .getStoredEU(); + if (aEU > 0) { + aNBT.setLong("aStoredEU", aEU); + if (aNBT.hasKey("aStoredEU")) { + Logger.WARNING("Set aStoredEU to NBT."); + } + } + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + aCurrentOutputAmperage = aNBT.getByte("aCurrentOutputAmperage"); + if (aNBT.hasKey("aStoredEU")) { + this.setEUVar(aNBT.getLong("aStoredEU")); + } + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + Logger.WARNING("Right Click on MTE by Player"); + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + + Logger.WARNING("MTE is Client-side"); + this.showEnergy(aPlayer.getEntityWorld(), aPlayer); + return true; + } + + protected void showEnergy(final World worldIn, final EntityPlayer playerIn) { + final long tempStorage = this.getBaseMetaTileEntity() + .getStoredEU(); + final double c = ((double) tempStorage / this.maxEUStore()) * 100; + final double roundOff = Math.round(c * 100.00) / 100.00; + PlayerUtils.messagePlayer( + playerIn, + "Energy: " + GTUtility.formatNumbers(tempStorage) + " EU at " + V[this.mTier] + "v (" + roundOff + "%)"); + PlayerUtils.messagePlayer(playerIn, "Amperage: " + GTUtility.formatNumbers(maxAmperesOut()) + "A"); + } + // Utils.LOG_WARNING("Begin Show Energy"); + /* + * //Utils.LOG_INFO("getProgresstime: "+tempStorage+" maxProgresstime: "+maxEUStore()+" C: "+c); + * Utils.LOG_INFO("getProgressTime: "+getProgresstime()); Utils.LOG_INFO("maxProgressTime: "+maxProgresstime()); + * Utils.LOG_INFO("getMinimumStoredEU: "+getMinimumStoredEU()); Utils.LOG_INFO("maxEUStore: "+maxEUStore()); + */ + /* + * final long d = (tempStorage * 100L) / maxEUStore(); + * Utils.LOG_INFO("getProgresstime: "+tempStorage+" maxProgresstime: "+maxEUStore()+" D: "+d); final double + * roundOff2 = Math.round(d * 100.00) / 100.00; Utils.messagePlayer(playerIn, "Energy: " + tempStorage + + * " EU at "+V[mTier]+"v ("+roundOff2+"%)"); Utils.LOG_WARNING("Making new instance of Guihandler"); GuiHandler + * block = new GuiHandler(); Utils.LOG_WARNING("Guihandler.toString(): "+block.toString()); + * block.getClientGuiElement(1, playerIn, worldIn, (int) playerIn.posX, (int) playerIn.posY, (int) playerIn.posZ); + */ + + @Override + public boolean allowPullStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(final IGregTechTileEntity aBaseMetaTileEntity, final int aIndex, + final ForgeDirection side, final ItemStack aStack) { + return false; + } + + @Override + public String[] getInfoData() { + String cur = GTUtility.formatNumbers( + this.getBaseMetaTileEntity() + .getStoredEU()); + String max = GTUtility.formatNumbers( + this.getBaseMetaTileEntity() + .getEUCapacity()); + + // Right-align current storage with maximum storage + String fmt = String.format("%%%ds", max.length()); + cur = String.format(fmt, cur); + + return new String[] { cur + " EU stored", max + " EU capacity" }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public int[] getAccessibleSlotsFromSide(final int p_94128_1_) { + return new int[] {}; + } + + @Override + public boolean canInsertItem(final int p_102007_1_, final ItemStack p_102007_2_, final int p_102007_3_) { + return false; + } + + @Override + public boolean canExtractItem(final int p_102008_1_, final ItemStack p_102008_2_, final int p_102008_3_) { + return false; + } + + @Override + public int getSizeInventory() { + return 0; + } + + @Override + public ItemStack getStackInSlot(final int p_70301_1_) { + return null; + } + + @Override + public ItemStack decrStackSize(final int p_70298_1_, final int p_70298_2_) { + return null; + } + + @Override + public ItemStack getStackInSlotOnClosing(final int p_70304_1_) { + return null; + } + + @Override + public void setInventorySlotContents(final int p_70299_1_, final ItemStack p_70299_2_) {} + + @Override + public String getInventoryName() { + return super.getInventoryName(); + } + + @Override + public boolean hasCustomInventoryName() { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 0; + } + + @Override + public boolean isUseableByPlayer(final EntityPlayer p_70300_1_) { + return false; + } + + @Override + public void openInventory() {} + + @Override + public void closeInventory() {} + + @Override + public boolean isItemValidForSlot(final int p_94041_1_, final ItemStack p_94041_2_) { + return false; + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + aNBT.setByte("aCurrentOutputAmperage", aCurrentOutputAmperage); + long aEU = this.getBaseMetaTileEntity() + .getStoredEU(); + if (aEU > 0) { + aNBT.setLong("aStoredEU", aEU); + if (aNBT.hasKey("aStoredEU")) { + Logger.WARNING("Set aStoredEU to NBT."); + } + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + byte aTest = (byte) (aCurrentOutputAmperage + 1); + if (aTest > 16 || aTest <= 0) { + aTest = 1; + } + aCurrentOutputAmperage = aTest; + PlayerUtils.messagePlayer(aPlayer, "Now handling " + aCurrentOutputAmperage + " Amps."); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTETieredChest.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTETieredChest.java new file mode 100644 index 0000000000..423a71c3e1 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTETieredChest.java @@ -0,0 +1,245 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.storage; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.lib.GTPPCore; + +public class MTETieredChest extends MTETieredMachineBlock implements IAddUIWidgets { + + public int mItemCount = 0; + public ItemStack mItemStack = null; + private static final double mStorageFactor = (270000.0D / 16); + + public MTETieredChest(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 3, + "This Chest stores " + (int) (Math.pow(6.0D, (double) aTier) * mStorageFactor) + " Items", + new ITexture[0]); + } + + public MTETieredChest(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + return ArrayUtils.add(this.mDescriptionArray, GTPPCore.GT_Tooltip.get()); + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + public boolean isFacingValid(ForgeDirection facing) { + 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 MTETieredChest(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (this.getBaseMetaTileEntity() + .isServerSide() + && this.getBaseMetaTileEntity() + .isAllowedToWork()) { + if (this.getItemCount() <= 0) { + this.mItemStack = null; + this.mItemCount = 0; + } + + if (this.mItemStack == null && this.mInventory[0] != null) { + this.mItemStack = this.mInventory[0].copy(); + } + + if (this.mInventory[0] != null && this.mItemCount < this.getMaxItemCount() + && GTUtility.areStacksEqual(this.mInventory[0], this.mItemStack)) { + this.mItemCount += this.mInventory[0].stackSize; + if (this.mItemCount > this.getMaxItemCount()) { + this.mInventory[0].stackSize = this.mItemCount - this.getMaxItemCount(); + this.mItemCount = this.getMaxItemCount(); + } else { + this.mInventory[0] = null; + } + } + + if (this.mInventory[1] == null && this.mItemStack != null) { + this.mInventory[1] = this.mItemStack.copy(); + this.mInventory[1].stackSize = Math.min(this.mItemStack.getMaxStackSize(), this.mItemCount); + this.mItemCount -= this.mInventory[1].stackSize; + } else if (this.mItemCount > 0 && GTUtility.areStacksEqual(this.mInventory[1], this.mItemStack) + && this.mInventory[1].getMaxStackSize() > this.mInventory[1].stackSize) { + int tmp = Math + .min(this.mItemCount, this.mInventory[1].getMaxStackSize() - this.mInventory[1].stackSize); + this.mInventory[1].stackSize += tmp; + this.mItemCount -= tmp; + } + + if (this.mItemStack != null) { + this.mInventory[2] = this.mItemStack.copy(); + this.mInventory[2].stackSize = Math.min(this.mItemStack.getMaxStackSize(), this.mItemCount); + } else { + this.mInventory[2] = null; + } + } + } + + private int getItemCount() { + return this.mItemCount; + } + + @Override + public void setItemCount(int aCount) { + this.mItemCount = aCount; + } + + @Override + public int getProgresstime() { + return this.mItemCount + (this.mInventory[0] == null ? 0 : this.mInventory[0].stackSize) + + (this.mInventory[1] == null ? 0 : this.mInventory[1].stackSize); + } + + @Override + public int maxProgresstime() { + return this.getMaxItemCount(); + } + + @Override + public int getMaxItemCount() { + return (int) (Math.pow(6.0D, (double) this.mTier) * mStorageFactor - 128.0D); + } + + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return aIndex == 1; + } + + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return aIndex == 0 && (this.mInventory[0] == null || GTUtility.areStacksEqual(this.mInventory[0], aStack)); + } + + @Override + public String[] getInfoData() { + return this.mItemStack == null + ? new String[] { "Super Storage Chest", "Stored Items:", "No Items", Integer.toString(0), + Integer.toString(this.getMaxItemCount()) } + : new String[] { "Super Storage Chest", "Stored Items:", this.mItemStack.getDisplayName(), + Integer.toString(this.mItemCount), Integer.toString(this.getMaxItemCount()) }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("mItemCount", this.mItemCount); + if (this.mItemStack != null) { + aNBT.setTag("mItemStack", this.mItemStack.writeToNBT(new NBTTagCompound())); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + if (aNBT.hasKey("mItemCount")) { + this.mItemCount = aNBT.getInteger("mItemCount"); + } + + if (aNBT.hasKey("mItemStack")) { + this.mItemStack = ItemStack.loadItemStackFromNBT((NBTTagCompound) aNBT.getTag("mItemStack")); + } + } + + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean aActive, boolean aRedstone) { + return aBaseMetaTileEntity.getFrontFacing() == ForgeDirection.DOWN && side == ForgeDirection.WEST + ? new ITexture[] { BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1], + new GTRenderedTexture(BlockIcons.OVERLAY_QCHEST) } + : (side == aBaseMetaTileEntity.getFrontFacing() + ? new ITexture[] { BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1], + new GTRenderedTexture(BlockIcons.OVERLAY_QCHEST) } + : new ITexture[] { BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1] }); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return new ITexture[0][0][0]; + } + + protected static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(7, 16) + .setSize(71, 45)) + .widget( + new SlotWidget(inventoryHandler, 0) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_IN) + .setPos(79, 16)) + .widget( + new SlotWidget(inventoryHandler, 1).setAccess(true, false) + .setBackground(getGUITextureSet().getItemSlot(), GTUITextures.OVERLAY_SLOT_OUT) + .setPos(79, 52)) + .widget( + SlotWidget.phantom(inventoryHandler, 2) + .disableInteraction() + .setBackground(GTUITextures.TRANSPARENT) + .setPos(59, 42)) + .widget( + new TextWidget("Item Amount").setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(10, 20)) + .widget( + new TextWidget().setStringSupplier(() -> numberFormat.format(mItemCount)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(10, 30)); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTETieredTank.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTETieredTank.java new file mode 100644 index 0000000000..fb766b9dd5 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/MTETieredTank.java @@ -0,0 +1,188 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.storage; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicTank; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.lib.GTPPCore; + +public class MTETieredTank extends MTEBasicTank { + + public MTETieredTank(final int aID, final String aName, final String aNameRegional, final int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 3, + "Stores " + GTUtility.formatNumbers(((int) (Math.pow(2, aTier) * 32000))) + "L of fluid"); + } + + public MTETieredTank(final String aName, final int aTier, final String[] aDescription, + final ITexture[][][] aTextures) { + super(aName, aTier, 3, aDescription, aTextures); + } + + @Override + public String[] getDescription() { + List description = new ArrayList<>(Arrays.asList(this.mDescriptionArray)); + description.add("A portable tank."); + if (this.mFluid != null) { + description.add("Fluid: " + mFluid.getLocalizedName() + " " + mFluid.amount + "L"); + } + description.add(GTPPCore.GT_Tooltip.get()); + return description.toArray(new String[0]); + } + + @Override + public ITexture[][][] getTextureSet(final ITexture[] aTextures) { + return new ITexture[0][0][0]; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int aColorIndex, final boolean aActive, final boolean aRedstone) { + return side == ForgeDirection.UP + ? new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1], + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_TOP_FLUIDTANK) } + : new ITexture[] { Textures.BlockIcons.MACHINE_CASINGS[this.mTier][aColorIndex + 1], + new GTRenderedTexture(Textures.BlockIcons.OVERLAY_SIDE_FLUIDTANK) }; + } + + @Override + public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { + if (stack.hasTagCompound() && stack.stackTagCompound.hasKey("mFluid")) { + final FluidStack tContents = FluidStack + .loadFluidStackFromNBT(stack.stackTagCompound.getCompoundTag("mFluid")); + if (tContents != null && tContents.amount > 0) { + tooltip.add( + GTLanguageManager.addStringLocalization( + "TileEntity_TANK_INFO", + "Contains Fluid: ", + !GregTechAPI.sPostloadFinished) + EnumChatFormatting.YELLOW + + tContents.getLocalizedName() + + EnumChatFormatting.GRAY); + tooltip.add( + GTLanguageManager.addStringLocalization( + "TileEntity_TANK_AMOUNT", + "Fluid Amount: ", + !GregTechAPI.sPostloadFinished) + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(tContents.amount) + + " L" + + EnumChatFormatting.GRAY); + } + } + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(final ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(final EntityPlayer aPlayer) { + return true; + } + + @Override + public final byte getUpdateData() { + return 0x00; + } + + @Override + public boolean doesFillContainers() { + return true; + } + + @Override + public boolean doesEmptyContainers() { + return true; + } + + @Override + public boolean canTankBeFilled() { + return true; + } + + @Override + public boolean canTankBeEmptied() { + return true; + } + + @Override + public String[] getInfoData() { + + if (this.mFluid == null) { + return new String[] { GTValues.VOLTAGE_NAMES[this.mTier] + " Fluid Tank", "Stored Fluid:", "No Fluid", + 0 + "L", this.getCapacity() + "L" }; + } + return new String[] { GTValues.VOLTAGE_NAMES[this.mTier] + " Fluid Tank", "Stored Fluid:", + this.mFluid.getLocalizedName(), this.mFluid.amount + "L", this.getCapacity() + "L" }; + } + + @Override + public MetaTileEntity newMetaEntity(final IGregTechTileEntity aTileEntity) { + return new MTETieredTank(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public int getCapacity() { + return (int) (Math.pow(2, this.mTier) * 32000); + } + + @Override + public int getTankPressure() { + return 100; + } + + @Override + public boolean onRightclick(final IGregTechTileEntity aBaseMetaTileEntity, final EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean displaysItemStack() { + return true; + } + + @Override + public boolean displaysStackSize() { + return false; + } + + @Override + public void setItemNBT(NBTTagCompound aNBT) { + if (mFluid != null) { + Logger.WARNING("Setting item fluid nbt"); + aNBT.setTag("mFluid", mFluid.writeToNBT(new NBTTagCompound())); + if (aNBT.hasKey("mFluid")) { + Logger.WARNING("Set mFluid to NBT."); + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/creative/GT_MetaTileEntity_InfiniteItemHolder.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/creative/GT_MetaTileEntity_InfiniteItemHolder.java deleted file mode 100644 index 2dca8d5c30..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/creative/GT_MetaTileEntity_InfiniteItemHolder.java +++ /dev/null @@ -1,92 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tileentities.storage.creative; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gtPlusPlus.core.util.minecraft.PlayerUtils; -import gtPlusPlus.core.util.sys.KeyboardUtils; -import gtPlusPlus.xmod.gregtech.common.tileentities.storage.GT_MetaTileEntity_TieredChest; - -public class GT_MetaTileEntity_InfiniteItemHolder extends GT_MetaTileEntity_TieredChest { - - public GT_MetaTileEntity_InfiniteItemHolder(int aID, String aName, String aNameRegional, int aTier) { - super(aID, aName, aNameRegional, aTier); - } - - public GT_MetaTileEntity_InfiniteItemHolder(String aName, int aTier, String[] aDescription, - ITexture[][][] aTextures) { - super(aName, aTier, aDescription, aTextures); - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.getWorld().isRemote) { - return false; - } - - if (!KeyboardUtils.isShiftKeyDown()) { - if (this.mItemStack == null) { - if (aPlayer.getHeldItem() != null) { - this.mItemStack = aPlayer.getHeldItem() - .copy(); - this.mItemCount = Short.MAX_VALUE; - aPlayer.setCurrentItemOrArmor(0, null); - PlayerUtils.messagePlayer( - aPlayer, - "Now holding " + this.mItemStack.getDisplayName() + " x" + Short.MAX_VALUE + "."); - return true; - } - } else { - if (aPlayer.getHeldItem() == null) { - aPlayer.entityDropItem(mItemStack, 1); - this.mItemStack = null; - this.mItemCount = 0; - PlayerUtils.messagePlayer(aPlayer, "Emptying."); - return true; - } - } - } - - PlayerUtils.messagePlayer( - aPlayer, - "Currently holding: " + (this.mItemStack != null ? this.mItemStack.getDisplayName() : "Nothing") - + " x" - + this.mItemCount); - return true; - // return super.onRightclick(aBaseMetaTileEntity, aPlayer); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { - if (mItemStack != null) { - setItemCount(0); - } - super.onPostTick(aBaseMetaTileEntity, aTimer); - } - - @Override - public void setItemCount(int aCount) { - super.setItemCount(Short.MAX_VALUE); - } - - @Override - public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return true; - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return false; - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_InfiniteItemHolder(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/creative/MTEInfiniteItemHolder.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/creative/MTEInfiniteItemHolder.java new file mode 100644 index 0000000000..677fe1a1c9 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/storage/creative/MTEInfiniteItemHolder.java @@ -0,0 +1,91 @@ +package gtPlusPlus.xmod.gregtech.common.tileentities.storage.creative; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gtPlusPlus.core.util.minecraft.PlayerUtils; +import gtPlusPlus.core.util.sys.KeyboardUtils; +import gtPlusPlus.xmod.gregtech.common.tileentities.storage.MTETieredChest; + +public class MTEInfiniteItemHolder extends MTETieredChest { + + public MTEInfiniteItemHolder(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEInfiniteItemHolder(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.getWorld().isRemote) { + return false; + } + + if (!KeyboardUtils.isShiftKeyDown()) { + if (this.mItemStack == null) { + if (aPlayer.getHeldItem() != null) { + this.mItemStack = aPlayer.getHeldItem() + .copy(); + this.mItemCount = Short.MAX_VALUE; + aPlayer.setCurrentItemOrArmor(0, null); + PlayerUtils.messagePlayer( + aPlayer, + "Now holding " + this.mItemStack.getDisplayName() + " x" + Short.MAX_VALUE + "."); + return true; + } + } else { + if (aPlayer.getHeldItem() == null) { + aPlayer.entityDropItem(mItemStack, 1); + this.mItemStack = null; + this.mItemCount = 0; + PlayerUtils.messagePlayer(aPlayer, "Emptying."); + return true; + } + } + } + + PlayerUtils.messagePlayer( + aPlayer, + "Currently holding: " + (this.mItemStack != null ? this.mItemStack.getDisplayName() : "Nothing") + + " x" + + this.mItemCount); + return true; + // return super.onRightclick(aBaseMetaTileEntity, aPlayer); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTimer) { + if (mItemStack != null) { + setItemCount(0); + } + super.onPostTick(aBaseMetaTileEntity, aTimer); + } + + @Override + public void setItemCount(int aCount) { + super.setItemCount(Short.MAX_VALUE); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return true; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEInfiniteItemHolder(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/TOOL_Gregtech_AngleGrinder.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/TOOL_Gregtech_AngleGrinder.java deleted file mode 100644 index 6af3a61487..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/TOOL_Gregtech_AngleGrinder.java +++ /dev/null @@ -1,175 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tools; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.EntityIronGolem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.stats.AchievementList; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -import net.minecraftforge.event.world.BlockEvent; - -import gregtech.GT_Mod; -import gregtech.api.enums.Materials; -import gregtech.api.enums.SoundResource; -import gregtech.api.enums.Textures.ItemIcons; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.common.items.behaviors.Behaviour_None; -import gregtech.common.tools.GT_Tool; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtTools; - -public class TOOL_Gregtech_AngleGrinder extends GT_Tool { - - public static final List mEffectiveList = Arrays - .asList(new String[] { EntityIronGolem.class.getName(), "EntityTowerGuardian" }); - - @Override - public float getNormalDamageAgainstEntity(final float aOriginalDamage, final Entity aEntity, final ItemStack aStack, - final EntityPlayer aPlayer) { - String tName = aEntity.getClass() - .getName(); - tName = tName.substring(tName.lastIndexOf(".") + 1); - return (mEffectiveList.contains(tName)) || (tName.contains("Golem")) ? aOriginalDamage * 2.0F : aOriginalDamage; - } - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 400; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 100; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 8.0F; - } - - @Override - public float getSpeedMultiplier() { - return 2F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.8F; - } - - @Override - public String getCraftingSound() { - return SoundResource.RANDOM_ANVIL_USE.toString(); - } - - @Override - public String getEntityHitSound() { - return SoundResource.RANDOM_ANVIL_BREAK.toString(); - } - - @Override - public String getMiningSound() { - return null; - } - - @Override - public boolean canBlock() { - return false; - } - - @Override - public boolean isWrench() { - return false; - } - - @Override - public boolean isCrowbar() { - return false; - } - - @Override - public boolean isWeapon() { - return true; - } - - @Override - public boolean isMinableBlock(final Block aBlock, final byte aMetaData) { - final String tTool = aBlock.getHarvestTool(aMetaData); - return (tTool != null) && (tTool.equals("sword") || tTool.equals("file")); - } - - @Override - public int convertBlockDrops(final List aDrops, final ItemStack aStack, final EntityPlayer aPlayer, - final Block aBlock, final int aX, final int aY, final int aZ, final byte aMetaData, final int aFortune, - final boolean aSilkTouch, final BlockEvent.HarvestDropsEvent aEvent) { - return 0; - } - - @Override - public ItemStack getBrokenItem(final ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return (IIconContainer) (aIsToolHead ? TexturesGtTools.ANGLE_GRINDER : ItemIcons.POWER_UNIT_HV); - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : Materials.TungstenSteel.mRGBa; - } - - @Override - public void onToolCrafted(final ItemStack aStack, final EntityPlayer aPlayer) { - super.onToolCrafted(aStack, aPlayer); - aPlayer.triggerAchievement(AchievementList.buildSword); - try { - GT_Mod.achievements.issueAchievement(aPlayer, "tools"); - GT_Mod.achievements.issueAchievement(aPlayer, "unitool"); - } catch (final Exception e) {} - } - - @Override - public IChatComponent getDeathMessage(final EntityLivingBase aPlayer, final EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " has been Ground out of existence by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } - - @Override - public void onStatsAddedToTool(final GT_MetaGenerated_Tool aItem, final int aID) { - aItem.addItemBehavior(aID, new Behaviour_None()); - } - - @Override - public boolean isGrafter() { - return false; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/TOOL_Gregtech_ElectricSnips.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/TOOL_Gregtech_ElectricSnips.java deleted file mode 100644 index 25ad03548a..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/TOOL_Gregtech_ElectricSnips.java +++ /dev/null @@ -1,96 +0,0 @@ -package gtPlusPlus.xmod.gregtech.common.tools; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.stats.AchievementList; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; - -import gregtech.GT_Mod; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures.ItemIcons; -import gregtech.api.interfaces.IIconContainer; -import gregtech.api.items.GT_MetaGenerated_Tool; -import gregtech.common.tools.GT_Tool_WireCutter; -import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtTools; - -public class TOOL_Gregtech_ElectricSnips extends GT_Tool_WireCutter { - - @Override - public int getToolDamagePerBlockBreak() { - return 50; - } - - @Override - public int getToolDamagePerDropConversion() { - return 100; - } - - @Override - public int getToolDamagePerContainerCraft() { - return 400; - } - - @Override - public int getToolDamagePerEntityAttack() { - return 100; - } - - @Override - public int getBaseQuality() { - return 0; - } - - @Override - public float getBaseDamage() { - return 4.0F; - } - - @Override - public float getSpeedMultiplier() { - return 1F; - } - - @Override - public float getMaxDurabilityMultiplier() { - return 1.4F; - } - - @Override - public ItemStack getBrokenItem(final ItemStack aStack) { - return null; - } - - @Override - public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { - return (IIconContainer) (aIsToolHead ? TexturesGtTools.ELECTRIC_SNIPS : ItemIcons.POWER_UNIT_MV); - } - - @Override - public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { - return aIsToolHead ? GT_MetaGenerated_Tool.getPrimaryMaterial(aStack).mRGBa : Materials.TungstenSteel.mRGBa; - } - - @Override - public void onToolCrafted(final ItemStack aStack, final EntityPlayer aPlayer) { - super.onToolCrafted(aStack, aPlayer); - aPlayer.triggerAchievement(AchievementList.buildSword); - try { - GT_Mod.achievements.issueAchievement(aPlayer, "tools"); - GT_Mod.achievements.issueAchievement(aPlayer, "unitool"); - } catch (final Exception e) {} - } - - @Override - public IChatComponent getDeathMessage(final EntityLivingBase aPlayer, final EntityLivingBase aEntity) { - return new ChatComponentText( - EnumChatFormatting.RED + aEntity.getCommandSenderName() - + EnumChatFormatting.WHITE - + " has been Snipped out of existence by " - + EnumChatFormatting.GREEN - + aPlayer.getCommandSenderName() - + EnumChatFormatting.WHITE); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/ToolAngleGrinder.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/ToolAngleGrinder.java new file mode 100644 index 0000000000..196bc2a5bb --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/ToolAngleGrinder.java @@ -0,0 +1,175 @@ +package gtPlusPlus.xmod.gregtech.common.tools; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityIronGolem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.AchievementList; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraftforge.event.world.BlockEvent; + +import gregtech.GTMod; +import gregtech.api.enums.Materials; +import gregtech.api.enums.SoundResource; +import gregtech.api.enums.Textures.ItemIcons; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.common.items.behaviors.BehaviourNone; +import gregtech.common.tools.GTTool; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtTools; + +public class ToolAngleGrinder extends GTTool { + + public static final List mEffectiveList = Arrays + .asList(new String[] { EntityIronGolem.class.getName(), "EntityTowerGuardian" }); + + @Override + public float getNormalDamageAgainstEntity(final float aOriginalDamage, final Entity aEntity, final ItemStack aStack, + final EntityPlayer aPlayer) { + String tName = aEntity.getClass() + .getName(); + tName = tName.substring(tName.lastIndexOf(".") + 1); + return (mEffectiveList.contains(tName)) || (tName.contains("Golem")) ? aOriginalDamage * 2.0F : aOriginalDamage; + } + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 400; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 100; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 8.0F; + } + + @Override + public float getSpeedMultiplier() { + return 2F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.8F; + } + + @Override + public String getCraftingSound() { + return SoundResource.RANDOM_ANVIL_USE.toString(); + } + + @Override + public String getEntityHitSound() { + return SoundResource.RANDOM_ANVIL_BREAK.toString(); + } + + @Override + public String getMiningSound() { + return null; + } + + @Override + public boolean canBlock() { + return false; + } + + @Override + public boolean isWrench() { + return false; + } + + @Override + public boolean isCrowbar() { + return false; + } + + @Override + public boolean isWeapon() { + return true; + } + + @Override + public boolean isMinableBlock(final Block aBlock, final byte aMetaData) { + final String tTool = aBlock.getHarvestTool(aMetaData); + return (tTool != null) && (tTool.equals("sword") || tTool.equals("file")); + } + + @Override + public int convertBlockDrops(final List aDrops, final ItemStack aStack, final EntityPlayer aPlayer, + final Block aBlock, final int aX, final int aY, final int aZ, final byte aMetaData, final int aFortune, + final boolean aSilkTouch, final BlockEvent.HarvestDropsEvent aEvent) { + return 0; + } + + @Override + public ItemStack getBrokenItem(final ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return (IIconContainer) (aIsToolHead ? TexturesGtTools.ANGLE_GRINDER : ItemIcons.POWER_UNIT_HV); + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa : Materials.TungstenSteel.mRGBa; + } + + @Override + public void onToolCrafted(final ItemStack aStack, final EntityPlayer aPlayer) { + super.onToolCrafted(aStack, aPlayer); + aPlayer.triggerAchievement(AchievementList.buildSword); + try { + GTMod.achievements.issueAchievement(aPlayer, "tools"); + GTMod.achievements.issueAchievement(aPlayer, "unitool"); + } catch (final Exception e) {} + } + + @Override + public IChatComponent getDeathMessage(final EntityLivingBase aPlayer, final EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " has been Ground out of existence by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } + + @Override + public void onStatsAddedToTool(final MetaGeneratedTool aItem, final int aID) { + aItem.addItemBehavior(aID, new BehaviourNone()); + } + + @Override + public boolean isGrafter() { + return false; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/ToolElectricSnips.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/ToolElectricSnips.java new file mode 100644 index 0000000000..78675f70d5 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tools/ToolElectricSnips.java @@ -0,0 +1,96 @@ +package gtPlusPlus.xmod.gregtech.common.tools; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.stats.AchievementList; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; + +import gregtech.GTMod; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures.ItemIcons; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.items.MetaGeneratedTool; +import gregtech.common.tools.ToolWireCutter; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtTools; + +public class ToolElectricSnips extends ToolWireCutter { + + @Override + public int getToolDamagePerBlockBreak() { + return 50; + } + + @Override + public int getToolDamagePerDropConversion() { + return 100; + } + + @Override + public int getToolDamagePerContainerCraft() { + return 400; + } + + @Override + public int getToolDamagePerEntityAttack() { + return 100; + } + + @Override + public int getBaseQuality() { + return 0; + } + + @Override + public float getBaseDamage() { + return 4.0F; + } + + @Override + public float getSpeedMultiplier() { + return 1F; + } + + @Override + public float getMaxDurabilityMultiplier() { + return 1.4F; + } + + @Override + public ItemStack getBrokenItem(final ItemStack aStack) { + return null; + } + + @Override + public IIconContainer getIcon(boolean aIsToolHead, ItemStack aStack) { + return (IIconContainer) (aIsToolHead ? TexturesGtTools.ELECTRIC_SNIPS : ItemIcons.POWER_UNIT_MV); + } + + @Override + public short[] getRGBa(boolean aIsToolHead, ItemStack aStack) { + return aIsToolHead ? MetaGeneratedTool.getPrimaryMaterial(aStack).mRGBa : Materials.TungstenSteel.mRGBa; + } + + @Override + public void onToolCrafted(final ItemStack aStack, final EntityPlayer aPlayer) { + super.onToolCrafted(aStack, aPlayer); + aPlayer.triggerAchievement(AchievementList.buildSword); + try { + GTMod.achievements.issueAchievement(aPlayer, "tools"); + GTMod.achievements.issueAchievement(aPlayer, "unitool"); + } catch (final Exception e) {} + } + + @Override + public IChatComponent getDeathMessage(final EntityLivingBase aPlayer, final EntityLivingBase aEntity) { + return new ChatComponentText( + EnumChatFormatting.RED + aEntity.getCommandSenderName() + + EnumChatFormatting.WHITE + + " has been Snipped out of existence by " + + EnumChatFormatting.GREEN + + aPlayer.getCommandSenderName() + + EnumChatFormatting.WHITE); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/GTPPBlocks.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/GTPPBlocks.java new file mode 100644 index 0000000000..e68ca95cce --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/GTPPBlocks.java @@ -0,0 +1,34 @@ +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.GregtechMetaCasingBlocks6; +import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaCasingBlocksPipeGearbox; +import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaSpecialMachineCasings; +import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaSpecialMultiCasings; +import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaSpecialMultiCasings2; +import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaTieredCasingBlocks1; + +public class GTPPBlocks { + + public static void run() { + + // Casing Blocks + ModBlocks.blockCasingsMisc = new GregtechMetaCasingBlocks(); + ModBlocks.blockCasings2Misc = new GregtechMetaCasingBlocks2(); + ModBlocks.blockCasings3Misc = new GregtechMetaCasingBlocks3(); + ModBlocks.blockCasings4Misc = new GregtechMetaCasingBlocks4(); + ModBlocks.blockCasings5Misc = new GregtechMetaCasingBlocks5(); + ModBlocks.blockCasings6Misc = new GregtechMetaCasingBlocks6(); + + ModBlocks.blockCasingsTieredGTPP = new GregtechMetaTieredCasingBlocks1(); + ModBlocks.blockSpecialMultiCasings = new GregtechMetaSpecialMultiCasings(); + ModBlocks.blockSpecialMultiCasings2 = new GregtechMetaSpecialMultiCasings2(); + ModBlocks.blockCustomMachineCasings = new GregtechMetaSpecialMachineCasings(); + ModBlocks.blockCustomPipeGearCasings = new GregtechMetaCasingBlocksPipeGearbox(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/Gregtech_Blocks.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/Gregtech_Blocks.java deleted file mode 100644 index 1a3d07f510..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/Gregtech_Blocks.java +++ /dev/null @@ -1,34 +0,0 @@ -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.GregtechMetaCasingBlocks6; -import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaCasingBlocksPipeGearbox; -import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaSpecialMachineCasings; -import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaSpecialMultiCasings; -import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaSpecialMultiCasings2; -import gtPlusPlus.xmod.gregtech.common.blocks.GregtechMetaTieredCasingBlocks1; - -public class Gregtech_Blocks { - - public static void run() { - - // Casing Blocks - ModBlocks.blockCasingsMisc = new GregtechMetaCasingBlocks(); - ModBlocks.blockCasings2Misc = new GregtechMetaCasingBlocks2(); - ModBlocks.blockCasings3Misc = new GregtechMetaCasingBlocks3(); - ModBlocks.blockCasings4Misc = new GregtechMetaCasingBlocks4(); - ModBlocks.blockCasings5Misc = new GregtechMetaCasingBlocks5(); - ModBlocks.blockCasings6Misc = new GregtechMetaCasingBlocks6(); - - ModBlocks.blockCasingsTieredGTPP = new GregtechMetaTieredCasingBlocks1(); - ModBlocks.blockSpecialMultiCasings = new GregtechMetaSpecialMultiCasings(); - ModBlocks.blockSpecialMultiCasings2 = new GregtechMetaSpecialMultiCasings2(); - ModBlocks.blockCustomMachineCasings = new GregtechMetaSpecialMachineCasings(); - ModBlocks.blockCustomPipeGearCasings = new GregtechMetaCasingBlocksPipeGearbox(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/ProcessingAngleGrinder.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/ProcessingAngleGrinder.java index e2723e5248..23dd55b22b 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/ProcessingAngleGrinder.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/ProcessingAngleGrinder.java @@ -2,24 +2,24 @@ package gtPlusPlus.xmod.gregtech.loaders; import net.minecraft.item.ItemStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.SubTag; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_ModHandler.RecipeBits; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTModHandler.RecipeBits; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.ELEMENT; +import gtPlusPlus.core.material.MaterialsElements; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.minecraft.MaterialUtils; 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; +import gtPlusPlus.xmod.gregtech.api.interfaces.internal.IOreRecipeRegistrator; import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechTools; -public class ProcessingAngleGrinder implements Interface_OreRecipeRegistrator, Runnable { +public class ProcessingAngleGrinder implements IOreRecipeRegistrator, Runnable { public ProcessingAngleGrinder() { GregtechOrePrefixes.toolAngleGrinder.add(this); @@ -63,8 +63,8 @@ public class ProcessingAngleGrinder implements Interface_OreRecipeRegistrator, R Logger.MATERIALS("Generating Angle Grinder from " + MaterialUtils.getMaterialName(aMaterial)); // Input 1 - final ItemStack plate = GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L); - final ItemStack longrod = GT_OreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L); + final ItemStack plate = GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L); + final ItemStack longrod = GTOreDictUnificator.get(OrePrefixes.stickLong, aMaterial, 1L); if ((null != plate && longrod != null)) { addRecipe(aMaterial, 1600000L, 3, ItemList.Battery_RE_HV_Lithium.get(1)); @@ -80,9 +80,9 @@ public class ProcessingAngleGrinder implements Interface_OreRecipeRegistrator, R + (longrod == null) + " |"); } - // GT_ModHandler.addCraftingRecipe(, - // GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | - // GT_ModHandler.RecipeBits.BUFFERED, new Object[]{"P H", "PIP", " I ", + // GTModHandler.addCraftingRecipe(, + // GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | + // GTModHandler.RecipeBits.BUFFERED, new Object[]{"P H", "PIP", " I ", // Character.valueOf('I'), OrePrefixes.ingot.get(aMaterial), // Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), // Character.valueOf('H'), OrePrefixes.toolHeadHammer.get(aMaterial)}); @@ -111,7 +111,7 @@ public class ProcessingAngleGrinder implements Interface_OreRecipeRegistrator, R 1, aMaterial, Materials.Titanium, - new long[] { aBatteryStorage, GT_Values.V[aVoltageTier], 3L, -1L }); + new long[] { aBatteryStorage, GTValues.V[aVoltageTier], 3L, -1L }); long aDura = MetaGeneratedGregtechTools.getToolMaxDamage(aOutputStack); if (aDura <= 32000) { @@ -122,12 +122,12 @@ public class ProcessingAngleGrinder implements Interface_OreRecipeRegistrator, R return false; } - return GT_ModHandler.addCraftingRecipe( + return GTModHandler.addCraftingRecipe( aOutputStack, RecipeBits.DISMANTLEABLE | RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | RecipeBits.BUFFERED, new Object[] { "SXL", "GMG", "PBP", 'X', ItemList.Component_Grinder_Tungsten.get(1), 'M', CI.getElectricMotor(aVoltageTier, 1), 'S', OrePrefixes.screw.get(Materials.Titanium), 'L', OrePrefixes.stickLong.get(aMaterial), 'P', OrePrefixes.plate.get(aMaterial), 'G', - ELEMENT.STANDALONE.BLACK_METAL.getGear(1), 'B', aBattery }); + MaterialsElements.STANDALONE.BLACK_METAL.getGear(1), 'B', aBattery }); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricSnips.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricSnips.java index a894a7ad62..a6e9d15ca2 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricSnips.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/ProcessingElectricSnips.java @@ -2,25 +2,25 @@ package gtPlusPlus.xmod.gregtech.loaders; import net.minecraft.item.ItemStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.SubTag; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.common.items.GT_MetaGenerated_Tool_01; -import gregtech.common.items.ID_MetaTool_01; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.common.items.IDMetaTool01; +import gregtech.common.items.MetaGeneratedTool01; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.ELEMENT; +import gtPlusPlus.core.material.MaterialsElements; 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; +import gtPlusPlus.xmod.gregtech.api.interfaces.internal.IOreRecipeRegistrator; import gtPlusPlus.xmod.gregtech.common.items.MetaGeneratedGregtechTools; -public class ProcessingElectricSnips implements Interface_OreRecipeRegistrator, Runnable { +public class ProcessingElectricSnips implements IOreRecipeRegistrator, Runnable { public ProcessingElectricSnips() { GregtechOrePrefixes.toolElectricSnips.add(this); @@ -64,7 +64,7 @@ public class ProcessingElectricSnips implements Interface_OreRecipeRegistrator, Logger.MATERIALS("Generating Electric Snips from " + MaterialUtils.getMaterialName(aMaterial)); // Input 1 - final ItemStack plate = GT_OreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L); + final ItemStack plate = GTOreDictUnificator.get(OrePrefixes.plate, aMaterial, 1L); if ((null != plate)) { addRecipe(aMaterial, 1600000L, 3, ItemList.Battery_RE_HV_Lithium.get(1)); @@ -79,9 +79,9 @@ public class ProcessingElectricSnips implements Interface_OreRecipeRegistrator, + " | Rod? " + " |"); } - // GT_ModHandler.addCraftingRecipe(, - // GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | - // GT_ModHandler.RecipeBits.BUFFERED, new Object[]{"P H", "PIP", " I ", + // GTModHandler.addCraftingRecipe(, + // GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | + // GTModHandler.RecipeBits.BUFFERED, new Object[]{"P H", "PIP", " I ", // Character.valueOf('I'), OrePrefixes.ingot.get(aMaterial), // Character.valueOf('P'), OrePrefixes.plate.get(aMaterial), // Character.valueOf('H'), OrePrefixes.toolHeadHammer.get(aMaterial)}); @@ -110,10 +110,10 @@ public class ProcessingElectricSnips implements Interface_OreRecipeRegistrator, 1, aMaterial, Materials.Titanium, - new long[] { aBatteryStorage, GT_Values.V[aVoltageTier], 3L, -1L }); + new long[] { aBatteryStorage, GTValues.V[aVoltageTier], 3L, -1L }); - ItemStack aInputCutter = GT_MetaGenerated_Tool_01.INSTANCE - .getToolWithStats(ID_MetaTool_01.WIRECUTTER.ID, 1, aMaterial, aMaterial, null); + ItemStack aInputCutter = MetaGeneratedTool01.INSTANCE + .getToolWithStats(IDMetaTool01.WIRECUTTER.ID, 1, aMaterial, aMaterial, null); long aDura = MetaGeneratedGregtechTools.getToolMaxDamage(aOutputStack); if (aDura <= 32000) { @@ -127,9 +127,9 @@ public class ProcessingElectricSnips implements Interface_OreRecipeRegistrator, OrePrefixes.wireFine.get(Materials.Electrum), aInputCutter, OrePrefixes.wireFine.get(Materials.Electrum), - ELEMENT.STANDALONE.WHITE_METAL.getGear(1), + MaterialsElements.STANDALONE.WHITE_METAL.getGear(1), CI.getElectricMotor(aVoltageTier, 1), - ELEMENT.STANDALONE.WHITE_METAL.getGear(1), + MaterialsElements.STANDALONE.WHITE_METAL.getGear(1), OrePrefixes.plate.get(aMaterial), aBattery, OrePrefixes.plate.get(aMaterial), diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenAlloySmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenAlloySmelter.java new file mode 100644 index 0000000000..8ef73917b7 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenAlloySmelter.java @@ -0,0 +1,69 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; + +import java.util.HashSet; +import java.util.Set; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeGenAlloySmelter extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenAlloySmelter(final Material M) { + this.toGenerate = M; + mRecipeGenMap.add(this); + } + + @Override + public void run() { + generateRecipes(this.toGenerate); + } + + private void generateRecipes(final Material material) { + final int tVoltageMultiplier = material.vVoltageMultiplier; + final long duration = Math.max(material.getMass() * 2L, 1L); + // Nuggets + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) + && ItemUtils.checkForInvalidItems(material.getNugget(1))) { + GTValues.RA.stdBuilder() + .itemInputs(material.getIngot(1), ItemList.Shape_Mold_Nugget.get(0)) + .itemOutputs(material.getNugget(9)) + .duration(duration) + .eut(tVoltageMultiplier) + .addTo(alloySmelterRecipes); + } + + // Gears + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) + && ItemUtils.checkForInvalidItems(material.getGear(1))) { + GTValues.RA.stdBuilder() + .itemInputs(material.getIngot(8), ItemList.Shape_Mold_Gear.get(0)) + .itemOutputs(material.getGear(1)) + .duration(duration) + .eut(tVoltageMultiplier) + .addTo(alloySmelterRecipes); + } + + // Ingot + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) + && ItemUtils.checkForInvalidItems(material.getNugget(1))) { + GTValues.RA.stdBuilder() + .itemInputs(material.getNugget(9), ItemList.Shape_Mold_Ingot.get(0)) + .itemOutputs(material.getIngot(1)) + .duration(duration) + .eut(tVoltageMultiplier) + .addTo(alloySmelterRecipes); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenAssembler.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenAssembler.java new file mode 100644 index 0000000000..64ce9d1c42 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenAssembler.java @@ -0,0 +1,85 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeGenAssembler extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenAssembler(final Material M) { + this.toGenerate = M; + mRecipeGenMap.add(this); + } + + @Override + public void run() { + generateRecipes(this.toGenerate); + } + + private void generateRecipes(final Material material) { + + // Frame Box + if (ItemUtils.checkForInvalidItems(new ItemStack[] { material.getRod(1), material.getFrameBox(1) })) { + GTValues.RA.stdBuilder() + .itemInputs(material.getRod(4), GTUtility.getIntegratedCircuit(4)) + .itemOutputs(material.getFrameBox(1)) + .duration(3 * SECONDS) + .eut(material.vVoltageMultiplier) + .addTo(assemblerRecipes); + } + + // Rotor + if (ItemUtils + .checkForInvalidItems(new ItemStack[] { material.getPlate(1), material.getRing(1), material.getRotor(1) })) + addAssemblerRecipe( + material.getPlate(4), + material.getRing(1), + material.getRotor(1), + 240, + material.vVoltageMultiplier); + } + + @Deprecated + private static void addAssemblerRecipe(final ItemStack input1, final ItemStack input2, final ItemStack output1, + final int seconds, final int euCost) { + GTValues.RA.stdBuilder() + .itemInputs(input1, input2) + .itemOutputs(output1) + .fluidInputs(FluidUtils.getFluidStack("molten.solderingalloy", 16)) + .duration(seconds) + .eut(euCost) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(input1, input2) + .itemOutputs(output1) + .fluidInputs(FluidUtils.getFluidStack("molten.tin", 32)) + .duration(seconds) + .eut(euCost) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(input1, input2) + .itemOutputs(output1) + .fluidInputs(FluidUtils.getFluidStack("molten.lead", 48)) + .duration(seconds) + .eut(euCost) + .addTo(assemblerRecipes); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBase.java new file mode 100644 index 0000000000..415cdc76aa --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBase.java @@ -0,0 +1,15 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.core.material.Material; + +public abstract class RecipeGenBase implements RunnableWithInfo { + + protected Material toGenerate; + protected boolean disableOptional; + + @Override + public Material getInfoData() { + return toGenerate; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBlastSmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBlastSmelter.java new file mode 100644 index 0000000000..d90e842394 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBlastSmelter.java @@ -0,0 +1,308 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.enums.GTValues.VP; +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.alloyBlastSmelterRecipes; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.recipe.GTPPRecipeCategories; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.material.MaterialStack; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.nuclear.MaterialsFluorides; +import gtPlusPlus.core.material.nuclear.MaterialsNuclides; +import gtPlusPlus.core.material.state.MaterialState; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeGenBlastSmelter extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenBlastSmelter(final Material M) { + this.toGenerate = M; + mRecipeGenMap.add(this); + } + + @Override + public void run() { + generateARecipe(this.toGenerate); + } + + private void generateARecipe(final Material M) { + + // Add a Blast Smelting Recipe, Let's go! + ItemStack tStack = M.getDust(1); + if (tStack == null) { + return; + } + + final Material[] badMaterials = { MaterialsFluorides.THORIUM_HEXAFLUORIDE, + MaterialsFluorides.THORIUM_TETRAFLUORIDE, MaterialsAlloy.BLOODSTEEL, MaterialsNuclides.LiFBeF2ThF4UF4, + MaterialsNuclides.LiFBeF2ZrF4UF4, MaterialsNuclides.LiFBeF2ZrF4U235 }; + for (final Material R : badMaterials) { + if (M == R) { + return; + } + } + + // Prepare some Variables + ItemStack[] components; + ArrayList tMaterial = new ArrayList<>(); + int inputStackCount = 0; + int fluidAmount = 0; + final boolean doTest = true; + tMaterial = M.getComposites(); + + // This Bad boy here is what dictates unique recipes. + ItemStack circuitGT; + + int tier = Math.max(1, M.vTier); + long aVoltage = VP[tier]; + + // Set a duration + int duration = 120 * tier * 10; + + if (tier <= 4) { + duration = 20 * tier * 10; + } + + int mMaterialListSize = 0; + + int mTotalPartsCounter = M.smallestStackSizeWhenProcessing; + + if (M.getComposites() != null) { + for (final gtPlusPlus.core.material.MaterialStack ternkfsdf : M.getComposites()) { + if (ternkfsdf != null) { + mMaterialListSize++; + } + } + } else { + mMaterialListSize = 1; + } + + Logger.WARNING("[BAS] Size: " + mMaterialListSize); + + // Make a simple one Material MaterialStack[] and log it for validity. + circuitGT = GTUtility.getIntegratedCircuit(1); + final ItemStack[] tItemStackTest = new ItemStack[] { circuitGT, tStack }; + inputStackCount = 1; + fluidAmount = 144 * inputStackCount; + Logger.WARNING( + "[BAS] Adding an Alloy Blast Smelter Recipe for " + M.getLocalizedName() + + ". Gives " + + fluidAmount + + "L of molten metal."); + for (int das = 0; das < tItemStackTest.length; das++) { + if (tItemStackTest[das] != null) { + Logger.WARNING( + "[BAS] tMaterial[" + das + + "]: " + + tItemStackTest[das].getDisplayName() + + " Meta: " + + tItemStackTest[das].getItemDamage() + + ", Amount: " + + tItemStackTest[das].stackSize); + } + } + + final boolean hasMoreInputThanACircuit = (tItemStackTest.length > 1); + + // Generate Recipes for all singular materials that can be made molten. + if (hasMoreInputThanACircuit) { + if (M.requiresBlastFurnace()) { + GTValues.RA.stdBuilder() + .itemInputs(tItemStackTest) + .fluidOutputs(M.getFluidStack(fluidAmount)) + .duration(duration / (mTotalPartsCounter > 0 ? mTotalPartsCounter : 1)) + .eut(aVoltage) + .recipeCategory(GTPPRecipeCategories.absNonAlloyRecipes) + .addTo(alloyBlastSmelterRecipes); + } else { + Logger.WARNING("[BAS] Failed."); + } + } else { + GTValues.RA.stdBuilder() + .itemInputs(tItemStackTest) + .fluidOutputs(M.getFluidStack(fluidAmount)) + .eut(aVoltage) + .duration(duration / (mTotalPartsCounter > 0 ? mTotalPartsCounter : 1) / 2) + .addTo(alloyBlastSmelterRecipes); + + Logger.WARNING("[BAS] Success."); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Ingot.get(0)) + .itemOutputs(M.getIngot(1)) + .fluidInputs(M.getFluidStack(144)) + .duration(duration / 2) + .eut(60) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING("[BAS] Success, Also added a Fluid solidifier recipe."); + + } + + if (tMaterial == null) { + Logger.WARNING("[BAS] doTest: " + doTest + " | tMaterial == null: true"); + return; + } + + // Reset the Variables for compounds if last recipe was a success. + inputStackCount = 0; + + if (mMaterialListSize <= 1) { + return; + } + // If this Material has some kind of compound list, proceed + + final gtPlusPlus.core.material.MaterialStack[] tempStack = new gtPlusPlus.core.material.MaterialStack[mMaterialListSize]; + circuitGT = GTUtility.getIntegratedCircuit(mMaterialListSize); + + // Builds me a MaterialStack[] from the MaterialList of M. + int ooo = 0; + for (final gtPlusPlus.core.material.MaterialStack xMaterial : M.getComposites()) { + if (xMaterial == null) { + ooo++; + continue; + } + + if (xMaterial.getStackMaterial() == null) { + tempStack[ooo] = xMaterial; + ooo++; + continue; + } + + Logger.WARNING( + "[BAS] FOUND: " + xMaterial.getStackMaterial() + .getLocalizedName()); + Logger.WARNING( + "[BAS] ADDING: " + xMaterial.getStackMaterial() + .getLocalizedName()); + tempStack[ooo] = xMaterial; + ooo++; + } + + // Builds me an ItemStack[] of the materials. - Without a circuit - this gets a good count for + // the 144L fluid multiplier + components = new ItemStack[9]; + inputStackCount = 0; + FluidStack componentsFluid = null; + for (int irc = 0; irc < M.getComposites() + .size(); irc++) { + if (M.getComposites() + .get(irc) == null) { + continue; + } + + final int r = (int) M.vSmallestRatio[irc]; + inputStackCount = inputStackCount + r; + if ((M.getComposites() + .get(irc) + .getStackMaterial() + .getState() != MaterialState.SOLID) || !ItemUtils.checkForInvalidItems( + M.getComposites() + .get(irc) + .getDustStack(r))) { + final int xr = r; + if ((xr > 0) && (xr <= 100)) { + final int mathmatics = (r * 1000); + componentsFluid = FluidUtils.getFluidStack( + M.getComposites() + .get(irc) + .getStackMaterial() + .getFluidStack(mathmatics), + mathmatics); + } + } else { + components[irc] = M.getComposites() + .get(irc) + .getUnificatedDustStack(r); + } + } + + // Adds a circuit + if ((mMaterialListSize < 9) && (mMaterialListSize != 0)) { + final ItemStack[] components_NoCircuit = components; + // Builds me an ItemStack[] of the materials. - With a circuit + components = new ItemStack[components_NoCircuit.length + 1]; + for (int fr = 0; fr < components.length; fr++) { + if (fr == 0) { + components[0] = circuitGT; + } else { + components[fr] = components_NoCircuit[fr - 1]; + } + } + Logger.WARNING( + "[BAS] Should have added a circuit. mMaterialListSize: " + mMaterialListSize + + " | circuit: " + + components[0].getDisplayName()); + } else { + Logger.WARNING("[BAS] Did not add a circuit. mMaterialListSize: " + mMaterialListSize); + } + + // Set Fluid output + fluidAmount = 144 * inputStackCount; + + Logger.WARNING( + "[BAS] Adding an Alloy Blast Smelter Recipe for " + M.getLocalizedName() + + " using it's compound dusts. This material has " + + inputStackCount + + " parts. Gives " + + fluidAmount + + "L of molten metal."); + Logger.WARNING("[BAS] tMaterial.length: " + components.length + "."); + for (int das = 0; das < components.length; das++) { + if (components[das] != null) { + Logger.WARNING( + "[BAS] tMaterial[" + das + + "]: " + + components[das].getDisplayName() + + " Meta: " + + components[das].getItemDamage() + + ", Amount: " + + components[das].stackSize); + } + } + + // Adds Recipe + GTRecipeBuilder builder = GTValues.RA.stdBuilder(); + List inputs = new ArrayList<>(Arrays.asList(components)); + inputs.removeIf(Objects::isNull); + components = inputs.toArray(new ItemStack[0]); + + builder = builder.itemInputs(components); + if (componentsFluid != null) { + builder.fluidInputs(componentsFluid); + } + builder.fluidOutputs(M.getFluidStack(fluidAmount)); + + if (M.requiresBlastFurnace()) { + builder.eut(aVoltage); + } else { + builder.eut(aVoltage / 2); + } + builder.duration(duration) + .addTo(alloyBlastSmelterRecipes); + Logger.WARNING("[BAS] Success."); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBlastSmelterGTNH.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBlastSmelterGTNH.java new file mode 100644 index 0000000000..84a9290d87 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenBlastSmelterGTNH.java @@ -0,0 +1,252 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.enums.GTValues; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.minecraft.ItemStackData; +import gtPlusPlus.api.recipe.GTPPRecipeCategories; +import gtPlusPlus.api.recipe.GTPPRecipeMaps; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeGenBlastSmelterGTNH { + + private static Map mCachedIngotToFluidRegistry = new HashMap<>(); + private static Map mCachedHotToColdRegistry = new HashMap<>(); + + private static synchronized void setIngotToFluid(final ItemStackData stack, final FluidStack fluid) { + if (stack != null && fluid != null) { + mCachedIngotToFluidRegistry.put(stack.getUniqueDataIdentifier(), fluid); + } + } + + private static synchronized void setHotToCold(final ItemStackData hot, final ItemStackData cold) { + if (hot != null && cold != null) { + mCachedHotToColdRegistry.put(hot.getUniqueDataIdentifier(), cold.getUniqueDataIdentifier()); + } + } + + private static synchronized FluidStack getFluidFromIngot(final ItemStackData ingot) { + ItemStackData h = ingot; + if (mCachedIngotToFluidRegistry.containsKey(h.getUniqueDataIdentifier())) { + Logger.MACHINE_INFO("[ABS] mCachedIngotToFluidRegistry contains Output Ingot."); + return mCachedIngotToFluidRegistry.get(h.getUniqueDataIdentifier()); + } + if (mCachedHotToColdRegistry.containsKey(h.getUniqueDataIdentifier())) { + Logger.MACHINE_INFO("[ABS] mCachedHotToColdRegistry contains Output Ingot."); + return mCachedIngotToFluidRegistry.get(mCachedHotToColdRegistry.get(h.getUniqueDataIdentifier())); + } + Logger.MACHINE_INFO("[ABS] Neither Cache contains Output Ingot."); + return null; + } + + private static boolean isValid(final ItemStack[] inputs, final ItemStack outputs[], final FluidStack[] fluidIn, + final FluidStack fluidOut) { + if (inputs != null && outputs != null + && fluidIn != null + && fluidOut != null + && inputs.length > 0 + && outputs.length > 0) { + return true; + } + return false; + } + + public static synchronized boolean generateGTNHBlastSmelterRecipesFromEBFList() { + + // Make a counting object + int mSuccess = 0; + + Logger.INFO("[ABS] Starting recipe generation based on EBF recipe map."); + Logger.INFO("[ABS] Caching Ingots and their Molten fluid.."); + // Ingots/Dusts -> Fluids + for (GTRecipe x : RecipeMaps.fluidExtractionRecipes.getAllRecipes()) { + ItemStack validInput = null; + FluidStack validOutput = null; + // If there aren't both non empty inputs and outputs, we skip + if (ArrayUtils.isEmpty(x.mInputs) || ArrayUtils.isEmpty(x.mFluidOutputs)) { + continue; + } + + for (int tag : OreDictionary.getOreIDs(x.mInputs[0])) { + String oreName = OreDictionary.getOreName(tag) + .toLowerCase(); + String mType = "ingot"; + if (oreName.startsWith(mType) && !oreName.contains("double") + && !oreName.contains("triple") + && !oreName.contains("quad") + && !oreName.contains("quintuple")) { + validInput = x.mInputs[0]; + } + } + + validOutput = x.mFluidOutputs[0]; + + if (validInput != null) { + ItemStackData R = new ItemStackData(validInput); + setIngotToFluid(R, validOutput); + Logger.MACHINE_INFO( + "[ABS][I2F] Cached " + validInput.getDisplayName() + + " to " + + validOutput.getLocalizedName() + + ". Stored Under ID of " + + R.getUniqueDataIdentifier()); + } + } + + Logger.INFO("[ABS] Caching Ingots and their Hot form..."); + // Hot Ingots -> Cold Ingots + for (GTRecipe x : RecipeMaps.vacuumFreezerRecipes.getAllRecipes()) { + ItemStack validInput = null; + ItemStack validOutput = null; + // If we the input is an ingot and it and the output are valid, map it to cache. + if (ArrayUtils.isNotEmpty(x.mInputs) && x.mInputs[0] != null) { + validInput = x.mInputs[0]; + } + if (ArrayUtils.isNotEmpty(x.mOutputs) && x.mOutputs[0] != null) { + validOutput = x.mOutputs[0]; + } + if (validInput != null && validOutput != null) { + ItemStackData R1 = new ItemStackData(validInput); + ItemStackData R2 = new ItemStackData(validOutput); + setHotToCold(R1, R2); + Logger.MACHINE_INFO( + "[ABS][H2C] Cached " + validInput.getDisplayName() + + " to " + + validOutput.getDisplayName() + + ". Stored Under ID of " + + R1.getUniqueDataIdentifier() + + ", links to ID " + + R2.getUniqueDataIdentifier()); + } + } + + Logger.INFO("[ABS] Generating recipes based on existing EBF recipes."); + // Okay, so now lets Iterate existing EBF recipes. + for (GTRecipe x : RecipeMaps.blastFurnaceRecipes.getAllRecipes()) { + ItemStack[] inputs, outputs; + FluidStack[] inputsF; + int voltage, time, special; + boolean enabled; + inputs = x.mInputs.clone(); + outputs = x.mOutputs.clone(); + inputsF = x.mFluidInputs.clone(); + voltage = x.mEUt; + time = x.mDuration; + enabled = x.mEnabled; + special = x.mSpecialValue; + + // continue to next recipe if the Temp is too high. + if (special > 3600) { + Logger.MACHINE_INFO("[ABS] Skipping ABS addition for GTNH due to temp."); + continue; + } else { + 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 EBF 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)) { + // Boolean to decide whether or not to create a new circuit later + boolean circuitFound = false; + + // Build correct input stack + ArrayList aTempList = new ArrayList<>(); + for (ItemStack recipeItem : inputs) { + if (ItemUtils.isControlCircuit(recipeItem)) { + circuitFound = true; + } + aTempList.add(recipeItem); + } + + inputs = aTempList.toArray(new ItemStack[aTempList.size()]); + int inputLength = inputs.length; + // If no circuit was found, increase array length by 1 to add circuit at newInput[0] + if (!circuitFound) { + inputLength++; + } + + ItemStack[] newInput = new ItemStack[inputLength]; + + int l = 0; + // If no circuit was found, add a circuit here + if (!circuitFound) { + l = 1; + newInput[0] = GTUtility.getIntegratedCircuit(inputs.length); + } + + for (ItemStack y : inputs) { + newInput[l++] = y; + } + + GTValues.RA.stdBuilder() + .itemInputs(newInput) + .fluidInputs(inputsF) + .fluidOutputs(mMoltenStack) + .duration(MathUtils.roundToClosestInt(time * 0.8)) + .eut(voltage) + .recipeCategory( + inputLength <= 2 ? GTPPRecipeCategories.absNonAlloyRecipes + : GTPPRecipeMaps.alloyBlastSmelterRecipes.getDefaultRecipeCategory()) + .addTo(GTPPRecipeMaps.alloyBlastSmelterRecipes); + } else { + if (!enabled) { + Logger.MACHINE_INFO("[ABS] Failure. EBF 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."); + } + } + } + } + } + + Logger.INFO("[ABS] Processed " + mSuccess + " recipes."); + return mSuccess > 0; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenDustGeneration.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenDustGeneration.java new file mode 100644 index 0000000000..4c77e31cbb --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenDustGeneration.java @@ -0,0 +1,471 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.packagerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.material.MaterialStack; +import gtPlusPlus.core.material.state.MaterialState; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.RecipeUtils; + +public class RecipeGenDustGeneration extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenDustGeneration(final Material M) { + this(M, false); + } + + public RecipeGenDustGeneration(final Material M, final boolean O) { + this.toGenerate = M; + this.disableOptional = O; + mRecipeGenMap.add(this); + final ItemStack normalDust = M.getDust(1); + final ItemStack smallDust = M.getSmallDust(1); + final ItemStack tinyDust = M.getTinyDust(1); + if (tinyDust != null && normalDust != null) { + if (RecipeUtils.addShapedRecipe( + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + normalDust)) { + Logger.INFO("9 Tiny dust to 1 Dust Recipe: " + M.getLocalizedName() + " - Success"); + } else { + Logger.INFO("9 Tiny dust to 1 Dust Recipe: " + M.getLocalizedName() + " - Failed"); + } + + if (RecipeUtils + .addShapedRecipe(normalDust, null, null, null, null, null, null, null, null, M.getTinyDust(9))) { + Logger.INFO("9 Tiny dust from 1 Recipe: " + M.getLocalizedName() + " - Success"); + } else { + Logger.INFO("9 Tiny dust from 1 Recipe: " + M.getLocalizedName() + " - Failed"); + } + } + + if (smallDust != null && normalDust != null) { + if (RecipeUtils.addShapedRecipe( + smallDust, + smallDust, + null, + smallDust, + smallDust, + null, + null, + null, + null, + normalDust)) { + Logger.INFO("4 Small dust to 1 Dust Recipe: " + M.getLocalizedName() + " - Success"); + } else { + Logger.INFO("4 Small dust to 1 Dust Recipe: " + M.getLocalizedName() + " - Failed"); + } + if (RecipeUtils + .addShapedRecipe(null, normalDust, null, null, null, null, null, null, null, M.getSmallDust(4))) { + Logger.INFO("4 Small dust from 1 Dust Recipe: " + M.getLocalizedName() + " - Success"); + } else { + Logger.INFO("4 Small dust from 1 Dust Recipe: " + M.getLocalizedName() + " - Failed"); + } + } + } + + @Override + public void run() { + generateRecipes(this.toGenerate, this.disableOptional); + } + + private void generateRecipes(final Material material, final boolean disableOptional) { + + Logger.INFO("Generating Shaped Crafting recipes for " + material.getLocalizedName()); + + final ItemStack normalDust = material.getDust(1); + final ItemStack smallDust = material.getSmallDust(1); + final ItemStack tinyDust = material.getTinyDust(1); + + final ItemStack[] inputStacks = material.getMaterialComposites(); + final ItemStack outputStacks = material.getDust(material.smallestStackSizeWhenProcessing); + + // Macerate blocks back to dusts. + final ItemStack materialBlock = material.getBlock(1); + final ItemStack materialFrameBox = material.getFrameBox(1); + + if (ItemUtils.checkForInvalidItems(materialBlock)) { + RA.stdBuilder() + .itemInputs(materialBlock) + .itemOutputs(material.getDust(9)) + .eut(2) + .duration(20 * SECONDS) + .addTo(maceratorRecipes); + } + + if (ItemUtils.checkForInvalidItems(materialFrameBox)) { + RA.stdBuilder() + .itemInputs(materialFrameBox) + .itemOutputs(material.getDust(2)) + .eut(2) + .duration(20 * SECONDS) + .addTo(maceratorRecipes); + } + + if (ItemUtils.checkForInvalidItems(smallDust) && ItemUtils.checkForInvalidItems(tinyDust)) { + generatePackagerRecipes(material); + } + + ItemStack ingot = material.getIngot(1); + if (ItemUtils.checkForInvalidItems(normalDust) && ItemUtils.checkForInvalidItems(ingot)) { + addFurnaceRecipe(material); + addMacerationRecipe(material); + } + + // Is this a composite? + if ((inputStacks == null) || disableOptional) { + return; + } + + // Is this a composite? + Logger.WARNING("mixer length: " + inputStacks.length); + if (!((inputStacks.length != 0) && (inputStacks.length <= 4))) { + return; + } + // Log Input items + Logger.WARNING(ItemUtils.getArrayStackNames(inputStacks)); + final long[] inputStackSize = material.vSmallestRatio; + Logger.WARNING("mixer is stacksizeVar null? " + (inputStackSize != null)); + // Is smallest ratio invalid? + if (inputStackSize == null) { + return; + } + // set stack sizes on an input ItemStack[] + for (short x = 0; x < inputStacks.length; x++) { + if ((inputStacks[x] != null) && (inputStackSize[x] != 0)) { + inputStacks[x].stackSize = (int) inputStackSize[x]; + } + } + // Relog input values, with stack sizes + Logger.WARNING(ItemUtils.getArrayStackNames(inputStacks)); + + // Get us four ItemStacks to input into the mixer + ItemStack[] input = new ItemStack[4]; + + input[0] = (inputStacks.length >= 1) ? ((inputStacks[0] == null) ? null : inputStacks[0]) : null; + input[1] = (inputStacks.length >= 2) ? ((inputStacks[1] == null) ? null : inputStacks[1]) : null; + input[2] = (inputStacks.length >= 3) ? ((inputStacks[2] == null) ? null : inputStacks[2]) : null; + input[3] = (inputStacks.length >= 4) ? ((inputStacks[3] == null) ? null : inputStacks[3]) : null; + + if (inputStacks.length == 1) { + input[1] = input[0]; + input[0] = GTUtility.getIntegratedCircuit(inputStacks.length + 10); + } else if (inputStacks.length == 2) { + input[2] = input[1]; + input[1] = input[0]; + input[0] = GTUtility.getIntegratedCircuit(inputStacks.length + 10); + + } else if (inputStacks.length == 3) { + input[3] = input[2]; + input[2] = input[1]; + input[1] = input[0]; + input[0] = GTUtility.getIntegratedCircuit(inputStacks.length + 10); + } + + // Add mixer Recipe + FluidStack oxygen = GTValues.NF; + if (material.getComposites() != null) { + for (final MaterialStack x : material.getComposites()) { + if (material.getComposites() + .isEmpty()) { + continue; + } + if (x == null) { + continue; + } + if (x.getStackMaterial() == null) { + continue; + } + + if (x.getStackMaterial() + .getDust(1) != null) { + continue; + } + + if (x.getStackMaterial() + .getState() != MaterialState.SOLID + && x.getStackMaterial() + .getState() != MaterialState.ORE + && x.getStackMaterial() + .getState() != MaterialState.PLASMA) { + oxygen = x.getStackMaterial() + .getFluidStack(1000); + break; + } + } + } + + input = ItemUtils.cleanItemStackArray(input); + + // Add mixer Recipe + List inputs = new ArrayList<>(Arrays.asList(input)); + inputs.removeIf(Objects::isNull); + + if (oxygen == null) { + GTValues.RA.stdBuilder() + .itemInputs(inputs.toArray(new ItemStack[0])) + .itemOutputs(outputStacks) + .duration((int) Math.max(material.getMass() * 2L * 1, 1)) + .eut(material.vVoltageMultiplier) + .addTo(mixerRecipes); + } else { + GTValues.RA.stdBuilder() + .itemInputs(inputs.toArray(new ItemStack[0])) + .itemOutputs(outputStacks) + .fluidInputs(oxygen) + .duration((int) Math.max(material.getMass() * 2L * 1, 1)) + .eut(material.vVoltageMultiplier) + .addTo(mixerRecipes); + } + + Logger.WARNING("Dust Mixer Recipe: " + material.getLocalizedName() + " - Success"); + } + + public static boolean addMixerRecipe_Standalone(final Material material) { + final ItemStack[] inputStacks = material.getMaterialComposites(); + final ItemStack outputStacks = material.getDust(material.smallestStackSizeWhenProcessing); + // Is this a composite? + if (inputStacks == null) { + Logger.WARNING("InputStacks == NUll - " + material.getLocalizedName()); + return false; + } + + // Is this a composite? + Logger.WARNING("mixer length: " + inputStacks.length); + if (!((inputStacks.length >= 1) && (inputStacks.length <= 4))) { + Logger.WARNING("InputStacks is out range 1-4 - " + material.getLocalizedName()); + return false; + } + // Log Input items + Logger.WARNING(ItemUtils.getArrayStackNames(inputStacks)); + final long[] inputStackSize = material.vSmallestRatio; + Logger.WARNING("mixer is stacksizeVar not null? " + (inputStackSize != null)); + + // Is smallest ratio invalid? + if (inputStackSize == null) { + Logger.WARNING("inputStackSize == NUll - " + material.getLocalizedName()); + return true; + } + + // set stack sizes on an input ItemStack[] + for (short x = 0; x < inputStacks.length; x++) { + if ((inputStacks[x] != null) && (inputStackSize[x] != 0)) { + inputStacks[x].stackSize = (int) inputStackSize[x]; + } + } + + // Relog input values, with stack sizes + Logger.WARNING(ItemUtils.getArrayStackNames(inputStacks)); + + // Get us four ItemStacks to input into the mixer + ItemStack input1, input2, input3, input4; + input1 = inputStacks[0]; + input2 = (inputStacks.length >= 2) ? (input2 = (inputStacks[1] == null) ? null : inputStacks[1]) : null; + input3 = (inputStacks.length >= 3) ? (input3 = (inputStacks[2] == null) ? null : inputStacks[2]) : null; + input4 = (inputStacks.length >= 4) ? (input4 = (inputStacks[3] == null) ? null : inputStacks[3]) : null; + + if (inputStacks.length == 1) { + input2 = input1; + input1 = GTUtility.getIntegratedCircuit(20); + } else if (inputStacks.length == 2) { + input3 = input2; + input2 = input1; + input1 = GTUtility.getIntegratedCircuit(20); + + } else if (inputStacks.length == 3) { + input4 = input3; + input3 = input2; + input2 = input1; + input1 = GTUtility.getIntegratedCircuit(20); + } + + // Add mixer Recipe + FluidStack oxygen = GTValues.NF; + if (material.getComposites() != null) { + int compSlot = 0; + for (final MaterialStack x : material.getComposites()) { + + if (material.getComposites() + .isEmpty()) { + compSlot++; + continue; + } + if (x == null) { + compSlot++; + continue; + } + + if (x.getStackMaterial() == null) { + compSlot++; + continue; + } + + if (x.getStackMaterial() + .getDust(1) == null) { + compSlot++; + continue; + } + + MaterialState f = x.getStackMaterial() + .getState(); + if (f == MaterialState.GAS || f == MaterialState.LIQUID + || f == MaterialState.PURE_LIQUID + || f == MaterialState.PURE_GAS) { + oxygen = x.getStackMaterial() + .getFluidStack((int) (material.vSmallestRatio[compSlot] * 1000)); + } + compSlot++; + } + } + + // Add mixer Recipe + try { + if (oxygen == null) { + GTValues.RA.stdBuilder() + .itemInputs(input1, input2, input3, input4) + .itemOutputs(outputStacks) + .duration((int) Math.max(material.getMass() * 2L * 1, 1)) + .eut(material.vVoltageMultiplier) + .addTo(mixerRecipes); + } else { + GTValues.RA.stdBuilder() + .itemInputs(input1, input2, input3, input4) + .itemOutputs(outputStacks) + .fluidInputs(oxygen) + .duration((int) Math.max(material.getMass() * 2L * 1, 1)) + .eut(material.vVoltageMultiplier) + .addTo(mixerRecipes); + } + + Logger.WARNING("Dust Mixer Recipe: " + material.getLocalizedName() + " - Success"); + + } catch (Throwable t) { + t.printStackTrace(); + } + return true; + } + + public static boolean generatePackagerRecipes(Material aMatInfo) { + // Small Dust + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(4, aMatInfo.getSmallDust(4)), ItemList.Schematic_Dust.get(0)) + .itemOutputs(aMatInfo.getDust(1)) + .duration(5 * SECONDS) + .eut(4) + .addTo(packagerRecipes); + + // Tiny Dust + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(4, aMatInfo.getTinyDust(9)), ItemList.Schematic_Dust.get(0)) + .itemOutputs(aMatInfo.getDust(1)) + .duration(5 * SECONDS) + .eut(4) + .addTo(packagerRecipes); + return true; + } + + private void addMacerationRecipe(Material aMatInfo) { + try { + Logger.MATERIALS("Adding Maceration recipe for " + aMatInfo.getLocalizedName() + " Ingot -> Dusts"); + RA.stdBuilder() + .itemInputs(aMatInfo.getIngot(1)) + .itemOutputs(aMatInfo.getDust(1)) + .eut(2) + .duration(20 * SECONDS) + .addTo(maceratorRecipes); + } catch (Throwable t) { + t.printStackTrace(); + } + } + + private void addFurnaceRecipe(Material aMatInfo) { + + ItemStack aDust = aMatInfo.getDust(1); + ItemStack aOutput; + try { + if (aMatInfo.requiresBlastFurnace()) { + aOutput = aMatInfo.getHotIngot(1); + if (ItemUtils.checkForInvalidItems(aOutput)) { + if (addBlastFurnaceRecipe(aMatInfo, aDust, aOutput, aMatInfo.getMeltingPointK())) { + Logger + .MATERIALS("Successfully added a blast furnace recipe for " + aMatInfo.getLocalizedName()); + } else { + Logger.MATERIALS("Failed to add a blast furnace recipe for " + aMatInfo.getLocalizedName()); + } + } else { + Logger.MATERIALS("Failed to add a blast furnace recipe for " + aMatInfo.getLocalizedName()); + } + } else { + aOutput = aMatInfo.getIngot(1); + if (ItemUtils.checkForInvalidItems(aOutput)) { + if (GTModHandler.addSmeltingAndAlloySmeltingRecipe(aDust, aOutput, false)) { + Logger.MATERIALS("Successfully added a furnace recipe for " + aMatInfo.getLocalizedName()); + } else { + Logger.MATERIALS("Failed to add a furnace recipe for " + aMatInfo.getLocalizedName()); + } + } + } + } catch (Throwable t) { + t.printStackTrace(); + } + } + + private boolean addBlastFurnaceRecipe(Material aMatInfo, final ItemStack input1, final ItemStack output1, + final int tempRequired) { + + int timeTaken; + if (aMatInfo.vTier <= 4) { + timeTaken = 25 * aMatInfo.vTier * 10; + } else { + timeTaken = 125 * aMatInfo.vTier * 10; + } + + long aVoltage = aMatInfo.vVoltageMultiplier; + + GTValues.RA.stdBuilder() + .itemInputs(input1) + .itemOutputs(output1) + .duration(timeTaken) + .eut(aVoltage) + .metadata(COIL_HEAT, tempRequired) + .addTo(blastFurnaceRecipes); + return true; + + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenExtruder.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenExtruder.java new file mode 100644 index 0000000000..80b9a75a14 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenExtruder.java @@ -0,0 +1,159 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.recipe.RecipeMaps.extruderRecipes; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeGenExtruder extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenExtruder(final Material M) { + this.toGenerate = M; + mRecipeGenMap.add(this); + } + + @Override + public void run() { + generateRecipes(this.toGenerate); + } + + private void generateRecipes(final Material material) { + + final ItemStack itemIngot = material.getIngot(1); + final ItemStack itemPlate = material.getPlate(1); + final ItemStack itemGear = material.getGear(1); + + final ItemStack shape_Plate = ItemList.Shape_Extruder_Plate.get(0); + final ItemStack shape_Ring = ItemList.Shape_Extruder_Ring.get(0); + final ItemStack shape_Gear = ItemList.Shape_Extruder_Gear.get(0); + final ItemStack shape_Rod = ItemList.Shape_Extruder_Rod.get(0); + final ItemStack shape_Bolt = ItemList.Shape_Extruder_Bolt.get(0); + final ItemStack shape_Block = ItemList.Shape_Extruder_Block.get(0); + final ItemStack shape_Ingot = ItemList.Shape_Extruder_Ingot.get(0); + + Logger.WARNING("Generating Extruder recipes for " + material.getLocalizedName()); + + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) + && ItemUtils.checkForInvalidItems(material.getBlock(1))) { + // Ingot Recipe + GTValues.RA.stdBuilder() + .itemInputs(material.getBlock(1), shape_Ingot) + .itemOutputs(material.getIngot(9)) + .duration((int) Math.max(material.getMass() * 2L * 1, 1)) + .eut(material.vVoltageMultiplier) + .addTo(extruderRecipes); + + Logger.WARNING("Extruder Ingot Recipe: " + material.getLocalizedName() + " - Success"); + + // Block Recipe + GTValues.RA.stdBuilder() + .itemInputs(material.getIngot(9), shape_Block) + .itemOutputs(material.getBlock(1)) + .duration((int) Math.max(material.getMass() * 2L * 1, 1)) + .eut(material.vVoltageMultiplier) + .addTo(extruderRecipes); + + Logger.WARNING("Extruder Block Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Plate Recipe + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) + && ItemUtils.checkForInvalidItems(material.getPlate(1))) { + GTValues.RA.stdBuilder() + .itemInputs(itemIngot, shape_Plate) + .itemOutputs(itemPlate) + .duration(10 * TICKS) + .eut(material.vVoltageMultiplier) + .addTo(extruderRecipes); + + Logger.WARNING("Extruder Plate Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Ring Recipe + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) + && ItemUtils.checkForInvalidItems(material.getRing(1))) { + if (!material.isRadioactive) { + GTValues.RA.stdBuilder() + .itemInputs(itemIngot, shape_Ring) + .itemOutputs(material.getRing(4)) + .duration((int) Math.max(material.getMass() * 2L * 1, 1)) + .eut(material.vVoltageMultiplier) + .addTo(extruderRecipes); + + Logger.WARNING("Extruder Ring Recipe: " + material.getLocalizedName() + " - Success"); + } + } + + // Gear Recipe + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) && ItemUtils.checkForInvalidItems(material.getGear(1))) + if (!material.isRadioactive) { + GTValues.RA.stdBuilder() + .itemInputs(material.getIngot(4), shape_Gear) + .itemOutputs(itemGear) + .duration((int) Math.max(material.getMass() * 5L, 1)) + .eut(material.vVoltageMultiplier) + .addTo(extruderRecipes); + + Logger.WARNING("Extruder Gear Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Rod Recipe + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) + && ItemUtils.checkForInvalidItems(material.getRod(1))) { + GTValues.RA.stdBuilder() + .itemInputs(itemIngot, shape_Rod) + .itemOutputs(material.getRod(2)) + .duration((int) Math.max(material.getMass() * 2L * 1, 1)) + .eut(material.vVoltageMultiplier) + .addTo(extruderRecipes); + + Logger.WARNING("Extruder Rod Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Bolt Recipe + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) && ItemUtils.checkForInvalidItems(material.getBolt(1))) + if (!material.isRadioactive) { + GTValues.RA.stdBuilder() + .itemInputs(itemIngot, shape_Bolt) + .itemOutputs(material.getBolt(8)) + .duration((int) Math.max(material.getMass() * 2L * 1, 1)) + .eut(material.vVoltageMultiplier) + .addTo(extruderRecipes); + + Logger.WARNING("Extruder Bolt Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Rotor Recipe + // Shape_Extruder_Rotor + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) + && ItemUtils.checkForInvalidItems(material.getRotor(1))) { + + GTValues.RA.stdBuilder() + .itemInputs(material.getIngot(5), ItemList.Shape_Extruder_Rotor.get(0)) + .itemOutputs(material.getRotor(1)) + .duration((int) Math.max(material.getMass() * 5L * 1, 1)) + .eut(material.vVoltageMultiplier) + .addTo(extruderRecipes); + + Logger.WARNING("Extruder Rotor Recipe: " + material.getLocalizedName() + " - Success"); + } + + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluidCanning.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluidCanning.java new file mode 100644 index 0000000000..c9f627c0d5 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluidCanning.java @@ -0,0 +1,222 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import java.util.HashSet; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTRecipe; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; + +public class RecipeGenFluidCanning implements Runnable { + + public static void init() { + FluidCanningRunnableHandler x = new FluidCanningRunnableHandler(); + x.run(); + } + + private static class FluidCanningRunnableHandler implements RunnableWithInfo { + + @Override + public void run() { + mHasRun = true; + for (RecipeGenFluidCanning aRecipe : mCache) { + aRecipe.run(); + } + } + + @Override + public String getInfoData() { + return "Fluid Canning Recipes"; + } + } + + private static boolean mHasRun = false; + + private static HashSet mCache = new HashSet<>(); + + private static void addRunnableToRecipeCache(RecipeGenFluidCanning r) { + if (mHasRun) { + GTPPCore.crash(); + } + mCache.add(r); + } + + protected boolean disableOptional; + + private final GTRecipe recipe; + private final boolean isValid; + + public boolean valid() { + return isValid; + } + + // Alternative Constructor + public RecipeGenFluidCanning(boolean aExtracting, ItemStack aEmpty, ItemStack aFull, FluidStack aFluidIn, + FluidStack aFluidOut, Integer aDuration, Integer aEUt) { + ItemStack aInput; + ItemStack aOutput; + FluidStack aFluidInput; + FluidStack aFluidOutput; + + // Safety check on the duration + if (aDuration == null || aDuration <= 0) { + aDuration = (aFluidIn != null) ? (aFluidIn.amount / 62) + : ((aFluidOut != null) ? (aFluidOut.amount / 62) : 10); + } + + // Safety check on the EU + if (aEUt == null || aEUt <= 0) { + if (aExtracting) { + aEUt = 2; + } else { + aEUt = 1; + } + } + + // Set Item stacks correctly, invert if extraction recipe. + if (aExtracting) { + aInput = aFull; + aOutput = aEmpty; + aFluidInput = GTValues.NF; + aFluidOutput = aFluidIn; + } else { + aInput = aEmpty; + aOutput = aFull; + aFluidInput = aFluidIn; + aFluidOutput = aFluidOut != null ? aFluidOut : GTValues.NF; + } + + // Check validity + + GTRecipe aRecipe = new GTRecipe( + true, + new ItemStack[] { aInput }, + new ItemStack[] { aOutput }, + null, + new int[] { 10000 }, + new FluidStack[] { aFluidInput }, + new FluidStack[] { aFluidOutput }, + aDuration, + aEUt, + 0); + + // Check Valid + boolean aTempValidityCheck = false; + // Logger.INFO("Validity Check."); + if (aExtracting) { + Logger.INFO("Extracting."); + if (aInput != null && aFluidOutput != null) { + // Logger.INFO("Pass."); + aTempValidityCheck = true; + } + } else { + // Logger.INFO("Canning."); + if (aInput != null && aOutput != null && (aFluidInput != null || aFluidOutput != null)) { + // Logger.INFO("Pass."); + aTempValidityCheck = true; + } + } + + if (aTempValidityCheck) { + // Valid Recipe + recipe = aRecipe; + disableOptional = aExtracting; + isValid = true; + addRunnableToRecipeCache(this); + } else { + // Logger.INFO("Failed Validity Check."); + isValid = false; + disableOptional = aExtracting; + aRecipe.mEnabled = false; + aRecipe.mHidden = true; + recipe = null; + } + } + + @Override + public void run() { + Logger.INFO("Processing Recipe with Hash: " + recipe.hashCode()); + generateRecipes(); + } + + private void generateRecipes() { + if (isValid && recipe != null) { + if (this.disableOptional) { + addFluidExtractionRecipe(recipe); + } else { + addFluidCannerRecipe(recipe); + } + } + } + + private void addFluidExtractionRecipe(GTRecipe aRecipe) { + GTPPCore.crash(); + Logger.INFO( + "[FE-Debug] " + aRecipe.mFluidOutputs[0].amount + + "L of " + + aRecipe.mFluidOutputs[0].getLocalizedName() + + " fluid extractor from 1 " + + aRecipe.mInputs[0].getDisplayName() + + " - Success. Time: " + + aRecipe.mDuration + + ", Voltage: " + + aRecipe.mEUt); + int aCount1 = getMapSize(RecipeMaps.fluidExtractionRecipes); + int aCount2 = aCount1; + RecipeMaps.fluidExtractionRecipes.addRecipe(aRecipe); + aCount1 = getMapSize(RecipeMaps.fluidExtractionRecipes); + if (aCount1 <= aCount2) { + Logger.INFO( + "[ERROR] Failed adding Extraction recipe for " + ItemUtils.getArrayStackNames(aRecipe.mInputs) + + ", " + + ItemUtils.getArrayStackNames(aRecipe.mOutputs) + + ", " + + ItemUtils.getArrayStackNames(aRecipe.mFluidInputs) + + ", " + + ItemUtils.getArrayStackNames(aRecipe.mFluidOutputs)); + dumpStack(); + } + } + + private void addFluidCannerRecipe(GTRecipe aRecipe) { + boolean result; + int aCount1 = getMapSize(RecipeMaps.fluidCannerRecipes); + int aCount2 = aCount1; + RecipeMaps.fluidCannerRecipes.addRecipe(aRecipe); + aCount1 = getMapSize(RecipeMaps.fluidCannerRecipes); + if (aCount1 <= aCount2) { + Logger.INFO( + "[ERROR] Failed adding Canning recipe for " + ItemUtils.getArrayStackNames(aRecipe.mInputs) + + ", " + + ItemUtils.getArrayStackNames(aRecipe.mOutputs) + + ", " + + ItemUtils.getArrayStackNames(aRecipe.mFluidInputs) + + ", " + + ItemUtils.getArrayStackNames(aRecipe.mFluidOutputs)); + dumpStack(); + } + } + + private void dumpStack() { + int parents = 2; + for (int i = 0; i < 6; i++) { + Logger.INFO( + (disableOptional ? "EXTRACTING" : "CANNING") + " DEBUG | " + + (i == 0 ? "Called from: " : "Parent: ") + + ReflectionUtils.getMethodName(i + parents)); + } + } + + private int getMapSize(RecipeMap aMap) { + return aMap.getAllRecipes() + .size(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluids.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluids.java new file mode 100644 index 0000000000..aa2f85f037 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluids.java @@ -0,0 +1,209 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import java.util.HashSet; +import java.util.Set; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeGenFluids extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenFluids(final Material M) { + this(M, false); + } + + public RecipeGenFluids(final Material M, final boolean dO) { + this.toGenerate = M; + this.disableOptional = dO; + mRecipeGenMap.add(this); + } + + @Override + public void run() { + generateRecipes(this.toGenerate, this.disableOptional); + } + + private void generateRecipes(final Material material, final boolean dO) { + + if (material == null) { + return; + } + + // Melting Shapes to fluid + if (material.getFluidStack(1) != null && !material.getFluidStack(1) + .getUnlocalizedName() + .toLowerCase() + .contains("plasma")) { + + // Making Shapes from fluid + + // Ingot + if (ItemUtils.checkForInvalidItems(material.getIngot(1))) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Ingot.get(0)) + .itemOutputs(material.getIngot(1)) + .fluidInputs(material.getFluidStack(144)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(material.vVoltageMultiplier) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING("144l fluid molder for 1 ingot Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Plate + if (ItemUtils.checkForInvalidItems(material.getPlate(1))) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Plate.get(0)) + .itemOutputs(material.getPlate(1)) + .fluidInputs(material.getFluidStack(144)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(material.vVoltageMultiplier) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING("144l fluid molder for 1 plate Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Nugget + if (ItemUtils.checkForInvalidItems(material.getNugget(1))) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Nugget.get(0)) + .itemOutputs(material.getNugget(1)) + .fluidInputs(material.getFluidStack(16)) + .duration(16 * TICKS) + .eut(material.vVoltageMultiplier) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING("16l fluid molder for 1 nugget Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Gears + if (ItemUtils.checkForInvalidItems(material.getGear(1))) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Gear.get(0)) + .itemOutputs(material.getGear(1)) + .fluidInputs(material.getFluidStack(576)) + .duration(6 * SECONDS + 8 * TICKS) + .eut(material.vVoltageMultiplier) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING("576l fluid molder for 1 gear Recipe: " + material.getLocalizedName() + " - Success"); + + } + + // Blocks + if (ItemUtils.checkForInvalidItems(material.getBlock(1))) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Block.get(0)) + .itemOutputs(material.getBlock(1)) + .fluidInputs(material.getFluidStack(144 * 9)) + .duration(14 * SECONDS + 8 * TICKS) + .eut(material.vVoltageMultiplier) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING( + (144 * 9) + "l fluid molder from 1 block Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Rod + if (ItemUtils.checkForInvalidItems(material.getRod(1))) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Rod.get(0)) + .itemOutputs(material.getRod(1)) + .fluidInputs(material.getFluidStack(72)) + .duration(7 * SECONDS + 10 * TICKS) + .eut(material.vVoltageMultiplier) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING( + (144 * 9) + "l fluid molder from 1 rod Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Rod Long + if (ItemUtils.checkForInvalidItems(material.getLongRod(1))) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Rod_Long.get(0)) + .itemOutputs(material.getLongRod(1)) + .fluidInputs(material.getFluidStack(144)) + .duration(15 * SECONDS) + .eut(material.vVoltageMultiplier) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING( + (144 * 9) + "l fluid molder from 1 rod long Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Bolt + if (ItemUtils.checkForInvalidItems(material.getBolt(1))) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Bolt.get(0)) + .itemOutputs(material.getBolt(1)) + .fluidInputs(material.getFluidStack(18)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(material.vVoltageMultiplier) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING( + (144 * 9) + "l fluid molder from 1 bolt Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Screw + if (ItemUtils.checkForInvalidItems(material.getScrew(1))) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Screw.get(0)) + .itemOutputs(material.getScrew(1)) + .fluidInputs(material.getFluidStack(18)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(material.vVoltageMultiplier) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING( + (144 * 9) + "l fluid molder from 1 screw Recipe: " + material.getLocalizedName() + " - Success"); + + } + + // Ring + if (ItemUtils.checkForInvalidItems(material.getRing(1))) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Ring.get(0)) + .itemOutputs(material.getRing(1)) + .fluidInputs(material.getFluidStack(36)) + .duration(5 * SECONDS) + .eut(material.vVoltageMultiplier) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING( + (144 * 9) + "l fluid molder from 1 ring Recipe: " + material.getLocalizedName() + " - Success"); + + } + + // Rotor + if (ItemUtils.checkForInvalidItems(material.getRotor(1))) { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Rotor.get(0)) + .itemOutputs(material.getRotor(1)) + .fluidInputs(material.getFluidStack(612)) + .duration(5 * SECONDS) + .eut(material.vVoltageMultiplier) + .addTo(fluidSolidifierRecipes); + + Logger.WARNING( + (144 * 9) + "l fluid molder from 1 rotor Recipe: " + material.getLocalizedName() + " - Success"); + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluorite.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluorite.java new file mode 100644 index 0000000000..0916febadc --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenFluorite.java @@ -0,0 +1,271 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.material.nuclear.MaterialsFluorides; +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; + +public class RecipeGenFluorite extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenFluorite(final Material material) { + this.toGenerate = material; + mRecipeGenMap.add(this); + + /** + * Shaped Crafting + */ + RecipeUtils.addShapedRecipe( + CI.craftingToolHammer_Hard, + null, + null, + material.getCrushedPurified(1), + null, + null, + null, + null, + null, + material.getDustPurified(1)); + + RecipeUtils.addShapedRecipe( + CI.craftingToolHammer_Hard, + null, + null, + material.getCrushed(1), + null, + null, + null, + null, + null, + material.getDustImpure(1)); + + RecipeUtils.addShapedRecipe( + CI.craftingToolHammer_Hard, + null, + null, + material.getCrushedCentrifuged(1), + null, + null, + null, + null, + null, + material.getDust(1)); + + final ItemStack normalDust = material.getDust(1); + final ItemStack smallDust = material.getSmallDust(1); + final ItemStack tinyDust = material.getTinyDust(1); + + if (RecipeUtils.addShapedRecipe( + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + normalDust)) { + Logger.WARNING("9 Tiny dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("9 Tiny dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); + } + + if (RecipeUtils + .addShapedRecipe(normalDust, null, null, null, null, null, null, null, null, material.getTinyDust(9))) { + Logger.WARNING("9 Tiny dust from 1 Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("9 Tiny dust from 1 Recipe: " + material.getLocalizedName() + " - Failed"); + } + + if (RecipeUtils + .addShapedRecipe(smallDust, smallDust, null, smallDust, smallDust, null, null, null, null, normalDust)) { + Logger.WARNING("4 Small dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("4 Small dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); + } + + if (RecipeUtils + .addShapedRecipe(null, normalDust, null, null, null, null, null, null, null, material.getSmallDust(4))) { + Logger.WARNING("4 Small dust from 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("4 Small dust from 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); + } + } + + @Override + public void run() { + generateRecipes(this.toGenerate); + } + + public static void generateRecipes(final Material material) { + + int tVoltageMultiplier = MaterialUtils.getVoltageForTier(material.vTier); + + final ItemStack dustStone = ItemUtils.getItemStackOfAmountFromOreDict("dustStone", 1); + + ItemStack tinyDustA = MaterialsFluorides.FLUORITE.getTinyDust(1); + ItemStack tinyDustB = MaterialsFluorides.FLUORITE.getTinyDust(1); + ItemStack matDust = MaterialsFluorides.FLUORITE.getDust(1); + ItemStack matDustA = MaterialsFluorides.FLUORITE.getDust(1); + + /** + * Package + */ + // Allow ore dusts to be packaged + if (ItemUtils.checkForInvalidItems(material.getSmallDust(1)) + && ItemUtils.checkForInvalidItems(material.getTinyDust(1))) { + RecipeGenDustGeneration.generatePackagerRecipes(material); + } + + /** + * Macerate + */ + // Macerate ore to Crushed + GTValues.RA.stdBuilder() + .itemInputs(material.getOre(1)) + .itemOutputs(material.getCrushed(2)) + .duration(20 * SECONDS) + .eut(tVoltageMultiplier / 2) + .addTo(maceratorRecipes); + + Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate ore to Crushed ore'"); + + // Macerate raw ore to Crushed + GTValues.RA.stdBuilder() + .itemInputs(material.getRawOre(1)) + .itemOutputs(material.getCrushed(2)) + .duration(20 * SECONDS) + .eut(tVoltageMultiplier / 2) + .addTo(maceratorRecipes); + + Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate raw ore to Crushed ore'"); + + // Macerate Centrifuged to Pure Dust + GTValues.RA.stdBuilder() + .itemInputs(material.getCrushedCentrifuged(1)) + .itemOutputs(matDust, matDustA) + .outputChances(100_00, 10_00) + .duration(20 * SECONDS) + .eut(tVoltageMultiplier / 2) + .addTo(maceratorRecipes); + + Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate Centrifuged ore to Pure Dust'"); + + GTValues.RA.stdBuilder() + .itemInputs(material.getCrushedPurified(1)) + .itemOutputs(material.getCrushedCentrifuged(1), tinyDustA, dustStone) + .duration(25 * SECONDS) + .eut(48) + .addTo(thermalCentrifugeRecipes); + + Logger.MATERIALS( + "[ThermalCentrifuge] Added Recipe: 'Washed ore to Centrifuged Ore' | Input: " + + material.getCrushedPurified(1) + .getDisplayName() + + " | Outputs: " + + material.getCrushedCentrifuged(1) + .getDisplayName() + + ", " + + tinyDustA.getDisplayName() + + ", " + + dustStone.getDisplayName() + + "."); + + GTValues.RA.stdBuilder() + .itemInputs(MaterialsFluorides.FLUORITE.getCrushed(2)) + .itemOutputs( + MaterialsFluorides.FLUORITE.getCrushedPurified(8), + MaterialsFluorides.FLUORITE.getDustImpure(4), + MaterialsFluorides.FLUORITE.getDustPurified(2)) + .outputChances(100_00, 50_00, 10_00) + .fluidInputs(FluidUtils.getFluidStack("hydrogen", 2000)) + .duration(30 * SECONDS) + .eut(240) + .addTo(chemicalBathRecipes); + + /** + * Forge Hammer + */ + + GTValues.RA.stdBuilder() + .itemInputs(material.getCrushedCentrifuged(1)) + .itemOutputs(matDust) + .duration(10 * TICKS) + .eut(tVoltageMultiplier / 4) + .addTo(hammerRecipes); + + Logger.MATERIALS("[ForgeHammer] Added Recipe: 'Crushed Centrifuged to Pure Dust'"); + + /** + * Centrifuge + */ + // Purified Dust to Clean + GTValues.RA.stdBuilder() + .itemInputs(material.getDustPurified(1)) + .itemOutputs(matDust, tinyDustA) + .eut(tVoltageMultiplier / 2) + .duration((int) Math.max(1L, material.getMass() * 8L)) + .addTo(centrifugeRecipes); + + Logger.MATERIALS("[Centrifuge] Added Recipe: Purified Dust to Clean Dust"); + + // Impure Dust to Clean + GTValues.RA.stdBuilder() + .itemInputs(material.getDustImpure(1)) + .itemOutputs(matDust, tinyDustB) + .eut(tVoltageMultiplier / 2) + .duration((int) Math.max(1L, material.getMass() * 8L)) + .addTo(centrifugeRecipes); + + Logger.MATERIALS("[Centrifuge] Added Recipe: Inpure Dust to Clean Dust"); + + // CaF2 + H2SO4 → CaSO4(solid) + 2 HF + FluidStack aGregtechHydro = FluidUtils.getFluidStack("hydrofluoricacid_gt5u", 16000); + if (aGregtechHydro == null) { + aGregtechHydro = FluidUtils.getFluidStack("hydrofluoricacid", 16000); + } + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(5), MaterialsFluorides.FLUORITE.getDust(37)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumSulfate", 15), + ItemUtils.getItemStackOfAmountFromOreDict("dustSilver", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustGold", 2), + ItemUtils.getItemStackOfAmountFromOreDict("dustTin", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 2)) + .outputChances(100_00, 10_00, 10_00, 30_00, 20_00) + .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 8000)) + .fluidOutputs(aGregtechHydro) + .eut(240) + .duration(10 * MINUTES) + .addTo(chemicalDehydratorRecipes); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMaterialProcessing.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMaterialProcessing.java new file mode 100644 index 0000000000..8ca1e6f447 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMaterialProcessing.java @@ -0,0 +1,313 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.api.objects.data.Pair; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.material.MaterialStack; +import gtPlusPlus.core.material.state.MaterialState; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeGenMaterialProcessing extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenMaterialProcessing(final Material M) { + this(M, false); + } + + public RecipeGenMaterialProcessing(final Material M, final boolean O) { + this.toGenerate = M; + this.disableOptional = O; + mRecipeGenMap.add(this); + } + + @Override + public void run() { + generateRecipes(this.toGenerate, this.disableOptional); + } + + private void generateRecipes(final Material material, final boolean disableOptional) { + if (disableOptional) { + return; + } + + if (material.getMaterialComposites().length > 1) { + Logger.MATERIALS("[Recipe Generator Debug] [" + material.getLocalizedName() + "]"); + final int tVoltageMultiplier = material.vVoltageMultiplier; + int[] partSizes = new int[99]; + if (material.vSmallestRatio != null) { + partSizes = new int[material.vSmallestRatio.length]; + for (int hu = 0; hu < material.vSmallestRatio.length; hu++) { + partSizes[hu] = (int) material.vSmallestRatio[hu]; + } + } + AutoMap> componentMap = new AutoMap<>(); + int alnsnfds = 0; + for (MaterialStack r : material.getComposites()) { + if (r != null) { + componentMap.put(new Pair<>(partSizes[alnsnfds], r.getStackMaterial())); + } + alnsnfds++; + } + + /** + * Centrifuge + */ + + // Process Dust + if (componentMap.size() > 0 && componentMap.size() <= 6) { + ItemStack mInternalOutputs[] = new ItemStack[6]; + int mChances[] = new int[6]; + int mCellCount = 0; + + int mTotalCount = 0; + + int mCounter = 0; + for (Pair f : componentMap) { + if (f.getValue() + .getState() != MaterialState.SOLID) { + Logger.MATERIALS( + "[Centrifuge] Found Fluid Component, adding " + f.getKey() + + " cells of " + + f.getValue() + .getLocalizedName() + + "."); + mInternalOutputs[mCounter++] = f.getValue() + .getCell(f.getKey()); + mCellCount += f.getKey(); + mTotalCount += f.getKey(); + Logger.MATERIALS( + "[Centrifuge] In total, adding " + mCellCount + + " cells for " + + material.getLocalizedName() + + " processing."); + } else { + Logger.MATERIALS( + "[Centrifuge] Found Solid Component, adding " + f.getKey() + + " dusts of " + + f.getValue() + .getLocalizedName() + + "."); + mInternalOutputs[mCounter++] = f.getValue() + .getDust(f.getKey()); + mTotalCount += f.getKey(); + } + } + + // Build Output Array + for (int g = 0; g < mInternalOutputs.length; g++) { + Logger.MATERIALS( + "[Centrifuge] Is output[" + g + + "] valid with a chance? " + + (mInternalOutputs[g] != null ? 10000 : 0)); + mChances[g] = (mInternalOutputs[g] != null ? 10000 : 0); + } + + ItemStack emptyCell = null; + if (mCellCount > 0) { + emptyCell = ItemUtils.getItemStackOfAmountFromOreDict("cellEmpty", mCellCount); + Logger.MATERIALS("[Centrifuge] Recipe now requires " + mCellCount + " empty cells as input."); + } + + ItemStack mainDust = material.getDust(material.smallestStackSizeWhenProcessing); + if (mainDust != null) { + Logger.MATERIALS( + "[Centrifuge] Recipe now requires " + material.smallestStackSizeWhenProcessing + + "x " + + mainDust.getDisplayName() + + " as input."); + } else { + mainDust = material.getDust(mTotalCount); + Logger.MATERIALS("[Centrifuge] Could not find valid input dust, trying alternative."); + if (mainDust != null) { + Logger.MATERIALS( + "[Centrifuge] Recipe now requires " + mTotalCount + + "x " + + mainDust.getDisplayName() + + " as input."); + } else { + Logger.MATERIALS("[Centrifuge] Could not find valid input dust, exiting."); + return; + } + } + + for (int j = 0; j < mInternalOutputs.length; j++) { + if (mInternalOutputs[j] == null) { + mInternalOutputs[j] = GTValues.NI; + Logger.MATERIALS("[Centrifuge] Set slot " + j + " to null."); + } else { + Logger.MATERIALS( + "[Centrifuge] Set slot " + j + " to " + mInternalOutputs[j].getDisplayName() + "."); + } + } + + // i don't understand the mess above, so let's just strip nulls and assume the chances are in correct + // order + List internalOutputs = new ArrayList<>(Arrays.asList(mInternalOutputs)); + internalOutputs.removeIf(Objects::isNull); + + int[] chances = new int[internalOutputs.size()]; + for (int i = 0; i < internalOutputs.size(); i++) { + chances[i] = mChances[i]; + } + + ItemStack[] inputs; + if (emptyCell == null) { + inputs = new ItemStack[] { mainDust }; + } else { + inputs = new ItemStack[] { mainDust, emptyCell }; + } + GTValues.RA.stdBuilder() + .itemInputs(inputs) + .itemOutputs(internalOutputs.toArray(new ItemStack[0])) + .outputChances(chances) + .eut(tVoltageMultiplier) + .duration((tVoltageMultiplier / 10) * SECONDS) + .addTo(centrifugeRecipes); + + Logger.MATERIALS( + "[Centrifuge] Generated Centrifuge recipe for " + material.getDust(1) + .getDisplayName()); + + } else if (componentMap.size() > 6 && componentMap.size() <= 9) { + Logger.MATERIALS( + "[Issue][Electrolyzer] " + material.getLocalizedName() + + " is composed of over 6 materials, so an electrolyzer recipe for processing cannot be generated. Trying to create one for the Dehydrator instead."); + + ItemStack mInternalOutputs[] = new ItemStack[9]; + int mChances[] = new int[9]; + int mCellCount = 0; + + int mTotalCount = 0; + + int mCounter = 0; + for (Pair f : componentMap) { + if (f.getValue() + .getState() != MaterialState.SOLID) { + Logger.MATERIALS( + "[Dehydrator] Found Fluid Component, adding " + f.getKey() + + " cells of " + + f.getValue() + .getLocalizedName() + + "."); + mInternalOutputs[mCounter++] = f.getValue() + .getCell(f.getKey()); + mCellCount += f.getKey(); + mTotalCount += f.getKey(); + Logger.MATERIALS( + "[Dehydrator] In total, adding " + mCellCount + + " cells for " + + material.getLocalizedName() + + " processing."); + } else { + Logger.MATERIALS( + "[Dehydrator] Found Solid Component, adding " + f.getKey() + + " dusts of " + + f.getValue() + .getLocalizedName() + + "."); + mInternalOutputs[mCounter++] = f.getValue() + .getDust(f.getKey()); + mTotalCount += f.getKey(); + } + } + + // Build Output Array + for (int g = 0; g < mInternalOutputs.length; g++) { + Logger.MATERIALS( + "[Dehydrator] Is output[" + g + + "] valid with a chance? " + + (mInternalOutputs[g] != null ? 10000 : 0)); + mChances[g] = (mInternalOutputs[g] != null ? 10000 : 0); + } + + ItemStack emptyCell = null; + if (mCellCount > 0) { + emptyCell = CI.emptyCells(mCellCount); + Logger.MATERIALS("[Dehydrator] Recipe now requires " + mCellCount + " empty cells as input."); + } + + ItemStack mainDust = material.getDust(material.smallestStackSizeWhenProcessing); + if (mainDust != null) { + Logger.MATERIALS( + "[Dehydrator] Recipe now requires " + material.smallestStackSizeWhenProcessing + + "x " + + mainDust.getDisplayName() + + " as input."); + } else { + mainDust = material.getDust(mTotalCount); + Logger.MATERIALS("[Dehydrator] Could not find valid input dust, trying alternative."); + if (mainDust != null) { + Logger.MATERIALS( + "[Dehydrator] Recipe now requires " + mTotalCount + + "x " + + mainDust.getDisplayName() + + " as input."); + } else { + Logger.MATERIALS("[Dehydrator] Could not find valid input dust, exiting."); + return; + } + } + + for (int j = 0; j < mInternalOutputs.length; j++) { + if (mInternalOutputs[j] == null) { + mInternalOutputs[j] = GTValues.NI; + Logger.MATERIALS("[Dehydrator] Set slot " + j + " to null."); + } else { + Logger.MATERIALS( + "[Dehydrator] Set slot " + j + " to " + mInternalOutputs[j].getDisplayName() + "."); + } + } + // i don't understand the mess above, so let's just strip nulls and assume the chances are in correct + // order + List internalOutputs = new ArrayList<>(Arrays.asList(mInternalOutputs)); + internalOutputs.removeIf(Objects::isNull); + int[] chances = new int[internalOutputs.size()]; + for (int i = 0; i < internalOutputs.size(); i++) { + chances[i] = mChances[i]; + } + + ItemStack[] inputs; + if (emptyCell == null) { + inputs = new ItemStack[] { mainDust }; + } else { + inputs = new ItemStack[] { mainDust, emptyCell }; + } + + GTValues.RA.stdBuilder() + .itemInputs(inputs) + .itemOutputs(internalOutputs.toArray(new ItemStack[0])) + .outputChances(chances) + .eut(tVoltageMultiplier) + .duration(20 * (tVoltageMultiplier / 10)) + .addTo(chemicalDehydratorRecipes); + + Logger.MATERIALS( + "[Dehydrator] Generated Dehydrator recipe for " + material.getDust(1) + .getDisplayName()); + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMetalRecipe.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMetalRecipe.java new file mode 100644 index 0000000000..975d903e87 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMetalRecipe.java @@ -0,0 +1,121 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.recipe.RecipeMaps.compressorRecipes; +import static gregtech.api.recipe.RecipeMaps.cutterRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.latheRecipes; +import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import java.util.HashSet; +import java.util.Set; + +import gregtech.api.enums.GTValues; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeGenMetalRecipe extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenMetalRecipe(final Material M) { + this.toGenerate = M; + mRecipeGenMap.add(this); + } + + @Override + public void run() { + generateRecipes(this.toGenerate); + } + + private void generateRecipes(final Material material) { + + Logger.WARNING("Generating Metal recipes for " + material.getLocalizedName()); + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) + && ItemUtils.checkForInvalidItems(material.getBlock(1))) { + + GTValues.RA.stdBuilder() + .itemInputs(material.getIngot(9)) + .itemOutputs(material.getBlock(1)) + .duration(15 * SECONDS) + .eut(2) + .addTo(compressorRecipes); + Logger.WARNING("Compress Block Recipe: " + material.getLocalizedName() + " - Success"); + + } + + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) + && ItemUtils.checkForInvalidItems(material.getRod(1))) { + GTValues.RA.stdBuilder() + .itemInputs(material.getIngot(1)) + .itemOutputs(material.getRod(1), material.getSmallDust(2)) + .duration(Math.max(material.getMass() / 8L, 1L)) + .eut(material.vVoltageMultiplier) + .addTo(latheRecipes); + + Logger.WARNING("Lathe Rod Recipe: " + material.getLocalizedName() + " - Success"); + } + + if (ItemUtils.checkForInvalidItems(material.getRod(1)) && ItemUtils.checkForInvalidItems(material.getBolt(1))) { + GTValues.RA.stdBuilder() + .itemInputs(material.getRod(1)) + .itemOutputs(material.getBolt(4)) + .duration(Math.max(material.getMass() * 2L, 1L)) + .eut(material.vVoltageMultiplier) + .addTo(cutterRecipes); + + Logger.WARNING("Cut Bolt Recipe: " + material.getLocalizedName() + " - Success"); + } + + if (ItemUtils.checkForInvalidItems(material.getIngot(1)) + && ItemUtils.checkForInvalidItems(material.getHotIngot(1))) { + + GTValues.RA.stdBuilder() + .itemInputs(material.getHotIngot(1)) + .itemOutputs(material.getIngot(1)) + .duration((int) Math.max(material.getMass() * 3L, 1L)) + .eut(material.vVoltageMultiplier) + .addTo(vacuumFreezerRecipes); + Logger.WARNING("Cool Hot Ingot Recipe: " + material.getLocalizedName() + " - Success"); + } + + if (ItemUtils.checkForInvalidItems(material.getRod(1)) + && ItemUtils.checkForInvalidItems(material.getLongRod(1))) { + GTValues.RA.stdBuilder() + .itemInputs(material.getRod(2)) + .itemOutputs(material.getLongRod(1)) + .duration((int) Math.max(material.getMass(), 1L)) + .eut(16) + .addTo(hammerRecipes); + + Logger.WARNING("Hammer Long Rod Recipe: " + material.getLocalizedName() + " - Success"); + + GTValues.RA.stdBuilder() + .itemInputs(material.getLongRod(1)) + .itemOutputs(material.getRod(2)) + .duration(Math.max(material.getMass(), 1L)) + .eut(4) + .addTo(cutterRecipes); + + } + + if (ItemUtils.checkForInvalidItems(material.getBolt(1)) + && ItemUtils.checkForInvalidItems(material.getScrew(1))) { + GTValues.RA.stdBuilder() + .itemInputs(material.getBolt(1)) + .itemOutputs(material.getScrew(1)) + .duration(Math.max(material.getMass() / 8L, 1L)) + .eut(4) + .addTo(latheRecipes); + + Logger.WARNING("Lathe Screw Recipe: " + material.getLocalizedName() + " - Success"); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMultisUsingFluidInsteadOfCells.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMultisUsingFluidInsteadOfCells.java new file mode 100644 index 0000000000..20d4fcdb36 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenMultisUsingFluidInsteadOfCells.java @@ -0,0 +1,187 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.recipe.GTRecipeUtils; + +public class RecipeGenMultisUsingFluidInsteadOfCells { + + private static ItemStack mEmptyCell; + private static final AutoMap mItemsToIgnore = new AutoMap<>(); + 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()) { + return a.getItemDamage() == b.getItemDamage(); + } + 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; + return GTUtility.areStacksEqual(aTempStack, aCell); + } + return false; + } + + private static synchronized FluidStack getFluidFromItemStack(final ItemStack ingot) { + if (ingot == null) { + return null; + } + return GTUtility.getFluidForFilledItem(ingot, true); + } + + public static synchronized int generateRecipesNotUsingCells(RecipeMap aInputs, RecipeMap aOutputs) { + init(); + int aRecipesHandled = 0; + int aInvalidRecipesToConvert = 0; + int aOriginalCount = aInputs.getAllRecipes() + .size(); + ArrayList deDuplicationInputArray = new ArrayList<>(); + + recipe: for (GTRecipe x : aInputs.getAllRecipes()) { + if (x != null) { + + ItemStack[] aInputItems = x.mInputs.clone(); + ItemStack[] aOutputItems = x.mOutputs.clone(); + FluidStack[] aInputFluids = x.mFluidInputs.clone(); + FluidStack[] aOutputFluids = x.mFluidOutputs.clone(); + + AutoMap aInputItemsMap = new AutoMap<>(); + AutoMap aOutputItemsMap = new AutoMap<>(); + AutoMap aInputFluidsMap = new AutoMap<>(); + AutoMap aOutputFluidsMap = new AutoMap<>(); + + // Iterate Inputs, Convert valid items into fluids + 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 + 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 + aInputFluidsMap.addAll(Arrays.asList(aInputFluids)); + // Add Output fluids second + aOutputFluidsMap.addAll(Arrays.asList(aOutputFluids)); + + // 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); + } + + if (!ItemUtils.checkForInvalidItems(aNewItemInputs, aNewItemOutputs)) { + aInvalidRecipesToConvert++; + continue; // Skip this recipe entirely if we find an item we don't like + } + GTRecipe aNewRecipe = new GTRecipe( + false, + aNewItemInputs, + aNewItemOutputs, + x.mSpecialItems, + x.mChances, + aNewFluidInputs, + aNewFluidOutputs, + x.mDuration, + x.mEUt, + x.mSpecialValue); + aNewRecipe.owners = new ArrayList<>(x.owners); + + // add all recipes to an intermediate array + deDuplicationInputArray.add(aNewRecipe); + + aRecipesHandled++; + } else { + aInvalidRecipesToConvert++; + } + } + // cast arraylist of input to a regular array and pass it to a duplicate recipe remover. + List deDuplicationOutputArray = GTRecipeUtils + .removeDuplicates(deDuplicationInputArray, aOutputs.unlocalizedName); + // add each recipe from the above output to the intended recipe map + for (GTRecipe recipe : deDuplicationOutputArray) { + aOutputs.add(recipe); + } + Logger.INFO("Generated Recipes for " + aOutputs.unlocalizedName); + 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/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenOre.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenOre.java new file mode 100644 index 0000000000..14d5e86e7b --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenOre.java @@ -0,0 +1,725 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.oreWasherRecipes; +import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.util.GTModHandler; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.api.objects.data.Pair; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.material.MaterialStack; +import gtPlusPlus.core.material.state.MaterialState; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.MaterialUtils; +import gtPlusPlus.core.util.minecraft.RecipeUtils; + +public class RecipeGenOre extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenOre(final Material M) { + this(M, false); + } + + public RecipeGenOre(final Material M, final boolean O) { + this.toGenerate = M; + this.disableOptional = O; + mRecipeGenMap.add(this); + } + + @Override + public void run() { + generateRecipes(this.toGenerate, this.disableOptional); + } + + private static Material mStone; + + private void generateRecipes(final Material material, final boolean disableOptional) { + + if (mStone == null) { + mStone = MaterialUtils.generateMaterialFromGtENUM(Materials.Stone); + } + + // if (material.getMaterialComposites().length > 1){ + Logger.MATERIALS("[Recipe Generator Debug] [" + material.getLocalizedName() + "]"); + int tVoltageMultiplier = MaterialUtils.getVoltageForTier(material.vTier); + + final ItemStack dustStone = ItemUtils.getItemStackOfAmountFromOreDict("dustStone", 1); + Material bonusA = null; // Ni + Material bonusB = null; // Tin + + if (material.getComposites() + .size() >= 1 + && material.getComposites() + .get(0) != null) { + bonusA = material.getComposites() + .get(0) + .getStackMaterial(); + } else { + bonusA = material; + } + + boolean allFailed = false; + + // Setup Bonuses + ArrayList aMatComp = new ArrayList<>(); + for (Material j : MaterialUtils.getCompoundMaterialsRecursively(material)) { + aMatComp.add(j); + } + + if (aMatComp.size() < 3) { + while (aMatComp.size() < 3) { + aMatComp.add(material); + } + } + + AutoMap amJ = new AutoMap<>(); + int aIndexCounter = 0; + for (Material g : aMatComp) { + if (g.hasSolidForm()) { + if (getDust(g) != null && getTinyDust(g) != null) { + amJ.put(g); + } + } + } + + if (amJ.size() < 2) { + if (material.getComposites() + .size() >= 2 + && material.getComposites() + .get(1) != null) { + bonusB = material.getComposites() + .get(1) + .getStackMaterial(); + // If Secondary Output has no solid output, try the third (If it exists) + if (!bonusB.hasSolidForm() && material.getComposites() + .size() >= 3 + && material.getComposites() + .get(2) != null) { + bonusB = material.getComposites() + .get(2) + .getStackMaterial(); + // If Third Output has no solid output, try the Fourth (If it exists) + if (!bonusB.hasSolidForm() && material.getComposites() + .size() >= 4 + && material.getComposites() + .get(3) != null) { + bonusB = material.getComposites() + .get(3) + .getStackMaterial(); + // If Fourth Output has no solid output, try the Fifth (If it exists) + if (!bonusB.hasSolidForm() && material.getComposites() + .size() >= 5 + && material.getComposites() + .get(4) != null) { + bonusB = material.getComposites() + .get(4) + .getStackMaterial(); + // If Fifth Output has no solid output, default out to Stone dust. + if (!bonusB.hasSolidForm()) { + allFailed = true; + bonusB = mStone; + } + } + } + } + } else { + allFailed = true; + } + } else { + bonusA = amJ.get(0); + bonusB = amJ.get(1); + } + + // Default out if it's made of fluids or some stuff. + if (bonusA == null) { + bonusA = tVoltageMultiplier > 100 ? material : mStone; + } + // Default out if it's made of fluids or some stuff. + if (allFailed || bonusB == null) { + bonusB = tVoltageMultiplier > 100 ? material : mStone; + } + + AutoMap> componentMap = new AutoMap<>(); + for (MaterialStack r : material.getComposites()) { + if (r != null) { + componentMap.put(new Pair<>(r.getPartsPerOneHundred(), r.getStackMaterial())); + } + } + + // Need two valid outputs + if (bonusA == null || bonusB == null || !bonusA.hasSolidForm() || !bonusB.hasSolidForm()) { + if (bonusA == null) { + bonusA = mStone; + } + if (bonusB == null) { + bonusB = mStone; + } + if (!bonusA.hasSolidForm()) { + bonusA = mStone; + } + if (!bonusB.hasSolidForm()) { + bonusB = mStone; + } + } + + ItemStack matDust = getDust(material); + ItemStack matDustA = getDust(bonusA); + ItemStack matDustB = getDust(bonusB); + + /** + * Package + */ + // Allow ore dusts to be packaged + if (ItemUtils.checkForInvalidItems(material.getSmallDust(1)) + && ItemUtils.checkForInvalidItems(material.getTinyDust(1))) { + RecipeGenDustGeneration.generatePackagerRecipes(material); + } + + /** + * Macerate + */ + // Macerate ore to Crushed + GTValues.RA.stdBuilder() + .itemInputs(material.getOre(1)) + .itemOutputs(material.getCrushed(2)) + .duration(20 * SECONDS) + .eut(tVoltageMultiplier / 2) + .addTo(maceratorRecipes); + + Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate ore to Crushed ore'"); + + // Macerate raw ore to Crushed + GTValues.RA.stdBuilder() + .itemInputs(material.getRawOre(1)) + .itemOutputs(material.getCrushed(2)) + .duration(20 * SECONDS) + .eut(tVoltageMultiplier / 2) + .addTo(maceratorRecipes); + + Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate raw ore to Crushed ore'"); + + // Macerate Crushed to Impure Dust + GTValues.RA.stdBuilder() + .itemInputs(material.getCrushed(1)) + .itemOutputs(material.getDustImpure(1), matDustA) + .outputChances(100_00, 10_00) + .duration(20 * SECONDS) + .eut(tVoltageMultiplier / 2) + .addTo(maceratorRecipes); + + Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate Crushed ore to Impure Dust'"); + + // Macerate Washed to Purified Dust + GTValues.RA.stdBuilder() + .itemInputs(material.getCrushedPurified(1)) + .itemOutputs(material.getDustPurified(1), matDustA) + .outputChances(100_00, 10_00) + .duration(20 * SECONDS) + .eut(tVoltageMultiplier / 2) + .addTo(maceratorRecipes); + + Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate Washed ore to Purified Dust'"); + + // Macerate Centrifuged to Pure Dust + GTValues.RA.stdBuilder() + .itemInputs(material.getCrushedCentrifuged(1)) + .itemOutputs(matDust, matDustA) + .outputChances(100_00, 10_00) + .duration(20 * SECONDS) + .eut(tVoltageMultiplier / 2) + .addTo(maceratorRecipes); + + Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate Centrifuged ore to Pure Dust'"); + + // Wash + RA.stdBuilder() + .itemInputs(material.getCrushed(1)) + .itemOutputs(material.getCrushedPurified(1), matDustA, dustStone) + .outputChances(100_00, 11_11, 100_00) + .fluidInputs(GTModHandler.getWater(1000)) + .duration(25 * SECONDS) + .eut(16) + .addTo(oreWasherRecipes); + + RA.stdBuilder() + .itemInputs(material.getCrushed(1)) + .itemOutputs(material.getCrushedPurified(1), matDustA, dustStone) + .outputChances(100_00, 11_11, 100_00) + .fluidInputs(GTModHandler.getDistilledWater(200)) + .duration(15 * SECONDS) + .eut(16) + .addTo(oreWasherRecipes); + Logger.MATERIALS("[OreWasher] Added Recipe: 'Wash Crushed ore into Purified Crushed ore'"); + + // Thermal Centrifuge + + Logger.MATERIALS("material.getCrushed(1): " + (material.getCrushed(1) != null)); + Logger.MATERIALS("material.getCrushedPurified(1): " + (material.getCrushedPurified(1) != null)); + + Logger.MATERIALS("material.getTinyDust(1): " + (ItemUtils.getItemName(bonusA.getCrushed(1)))); + Logger.MATERIALS("material.getTinyDust(1): " + (ItemUtils.getItemName(bonusB.getCrushed(1)))); + + GTValues.RA.stdBuilder() + .itemInputs(material.getCrushed(1)) + .itemOutputs(material.getCrushedCentrifuged(1), matDustB, dustStone) + .outputChances(100_00, 11_11, 100_00) + .duration(25 * SECONDS) + .eut(48) + .addTo(thermalCentrifugeRecipes); + + Logger.MATERIALS( + "[ThermalCentrifuge] Added Recipe: 'Crushed ore to Centrifuged Ore' | Input: " + material.getCrushed(1) + .getDisplayName() + + " | Outputs: " + + material.getCrushedCentrifuged(1) + .getDisplayName() + + ", " + + matDustB.getDisplayName() + + ", " + + dustStone.getDisplayName() + + "."); + + GTValues.RA.stdBuilder() + .itemInputs(material.getCrushedPurified(1)) + .itemOutputs(material.getCrushedCentrifuged(1), matDustA, dustStone) + .outputChances(100_00, 11_11, 100_00) + .duration(25 * SECONDS) + .eut(48) + .addTo(thermalCentrifugeRecipes); + + Logger.MATERIALS( + "[ThermalCentrifuge] Added Recipe: 'Washed ore to Centrifuged Ore' | Input: " + + material.getCrushedPurified(1) + .getDisplayName() + + " | Outputs: " + + material.getCrushedCentrifuged(1) + .getDisplayName() + + ", " + + matDustA.getDisplayName() + + ", " + + dustStone.getDisplayName() + + "."); + + // Forge Hammer + + GTValues.RA.stdBuilder() + .itemInputs(material.getCrushedCentrifuged(1)) + .itemOutputs(matDust) + .duration(10 * TICKS) + .eut(tVoltageMultiplier / 4) + .addTo(hammerRecipes); + + Logger.MATERIALS("[ForgeHammer] Added Recipe: 'Crushed Centrifuged to Pure Dust'"); + + GTValues.RA.stdBuilder() + .itemInputs(material.getCrushedPurified(1)) + .itemOutputs(material.getDustPurified(1)) + .duration(10 * TICKS) + .eut(tVoltageMultiplier / 4) + .addTo(hammerRecipes); + Logger.MATERIALS("[ForgeHammer] Added Recipe: 'Crushed Purified to Purified Dust'"); + + GTValues.RA.stdBuilder() + .itemInputs(material.getOre(1)) + .itemOutputs(material.getCrushed(1)) + .duration(10 * TICKS) + .eut(tVoltageMultiplier / 4) + .addTo(hammerRecipes); + + Logger.MATERIALS("[ForgeHammer] Added Recipe: 'Ore to Crushed'"); + + // Centrifuge + + // Purified Dust to Clean + GTValues.RA.stdBuilder() + .itemInputs(material.getDustPurified(1)) + .itemOutputs(matDust, matDustA) + .outputChances(100_00, 11_11) + .eut(tVoltageMultiplier / 2) + .duration((int) Math.max(1L, material.getMass() * 8L)) + .addTo(centrifugeRecipes); + + Logger.MATERIALS("[Centrifuge] Added Recipe: Purified Dust to Clean Dust"); + + // Impure Dust to Clean + GTValues.RA.stdBuilder() + .itemInputs(material.getDustImpure(1)) + .itemOutputs(matDust, matDustB) + .outputChances(100_00, 11_11) + .eut(tVoltageMultiplier / 2) + .duration((int) Math.max(1L, material.getMass() * 8L)) + .addTo(centrifugeRecipes); + + Logger.MATERIALS("[Centrifuge] Added Recipe: Inpure Dust to Clean Dust"); + + // Electrolyzer + + if (!disableOptional) { + // Process Dust + if (componentMap.size() > 0 && componentMap.size() <= 6) { + + ItemStack mInternalOutputs[] = new ItemStack[6]; + int mChances[] = new int[6]; + int mCellCount = 0; + + int mTotalCount = 0; + + int mCounter = 0; + for (Pair f : componentMap) { + if (f.getValue() + .getState() != MaterialState.SOLID) { + Logger.MATERIALS( + "[Electrolyzer] Found Fluid Component, adding " + f.getKey() + + " cells of " + + f.getValue() + .getLocalizedName() + + "."); + mInternalOutputs[mCounter++] = f.getValue() + .getCell(f.getKey()); + mCellCount += f.getKey(); + mTotalCount += f.getKey(); + Logger.MATERIALS( + "[Electrolyzer] In total, adding " + mCellCount + + " cells for " + + material.getLocalizedName() + + " processing."); + } else { + Logger.MATERIALS( + "[Electrolyzer] Found Solid Component, adding " + f.getKey() + + " dusts of " + + f.getValue() + .getLocalizedName() + + "."); + mInternalOutputs[mCounter++] = f.getValue() + .getDust(f.getKey()); + mTotalCount += f.getKey(); + } + } + + // Build Output Array + for (int g = 0; g < mInternalOutputs.length; g++) { + Logger.MATERIALS( + "[Electrolyzer] Is output[" + g + + "] valid with a chance? " + + (mInternalOutputs[g] != null ? 10000 : 0)); + mChances[g] = (mInternalOutputs[g] != null ? 10000 : 0); + } + + ItemStack emptyCell = null; + if (mCellCount > 0) { + emptyCell = ItemUtils.getItemStackOfAmountFromOreDict("cellEmpty", mCellCount); + Logger.MATERIALS("[Electrolyzer] Recipe now requires " + mCellCount + " empty cells as input."); + } + + ItemStack mainDust = material.getDust(material.smallestStackSizeWhenProcessing); + if (mainDust != null) { + Logger.MATERIALS( + "[Electrolyzer] Recipe now requires " + material.smallestStackSizeWhenProcessing + + "x " + + mainDust.getDisplayName() + + " as input."); + } else { + mainDust = material.getDust(mTotalCount); + Logger.MATERIALS("[Electrolyzer] Could not find valid input dust, trying alternative."); + if (mainDust != null) { + Logger.MATERIALS( + "[Electrolyzer] Recipe now requires " + mTotalCount + + "x " + + mainDust.getDisplayName() + + " as input."); + } else { + Logger.MATERIALS("[Electrolyzer] Could not find valid input dust, exiting."); + return; + } + } + + for (int j = 0; j < mInternalOutputs.length; j++) { + if (mInternalOutputs[j] == null) { + mInternalOutputs[j] = GTValues.NI; + Logger.MATERIALS("[Electrolyzer] Set slot " + j + " to null."); + } else { + Logger.MATERIALS( + "[Electrolyzer] Set slot " + j + " to " + mInternalOutputs[j].getDisplayName() + "."); + } + } + + // i don't understand the mess above, so let's just strip nulls and assume the chances are in correct + // order + List internalOutputs = new ArrayList<>(Arrays.asList(mInternalOutputs)); + internalOutputs.removeIf(Objects::isNull); + int[] chances = new int[internalOutputs.size()]; + for (int i = 0; i < internalOutputs.size(); i++) { + chances[i] = mChances[i]; + } + ItemStack[] inputs; + if (emptyCell == null) { + inputs = new ItemStack[] { mainDust }; + } else { + inputs = new ItemStack[] { mainDust, emptyCell }; + } + GTValues.RA.stdBuilder() + .itemInputs(inputs) + .itemOutputs(internalOutputs.toArray(new ItemStack[0])) + .outputChances(chances) + .duration(Math.max(material.getMass() * 3L * 1, 1)) + .eut(tVoltageMultiplier) + .addTo(electrolyzerRecipes); + + Logger.MATERIALS("[Electrolyzer] Generated Electrolyzer recipe for " + matDust.getDisplayName()); + + } else if (componentMap.size() > 6 && componentMap.size() <= 9) { + Logger.MATERIALS( + "[Issue][Electrolyzer] " + material.getLocalizedName() + + " is composed of over 6 materials, so an electrolyzer recipe for processing cannot be generated. Trying to create one for the Dehydrator instead."); + + ItemStack mInternalOutputs[] = new ItemStack[9]; + int mChances[] = new int[9]; + int mCellCount = 0; + + int mTotalCount = 0; + + int mCounter = 0; + for (Pair f : componentMap) { + if (f.getValue() + .getState() != MaterialState.SOLID + && f.getValue() + .getState() != MaterialState.ORE) { + Logger.MATERIALS( + "[Dehydrator] Found Fluid Component, adding " + f.getKey() + + " cells of " + + f.getValue() + .getLocalizedName() + + "."); + mInternalOutputs[mCounter++] = f.getValue() + .getCell(f.getKey()); + mCellCount += f.getKey(); + mTotalCount += f.getKey(); + Logger.MATERIALS( + "[Dehydrator] In total, adding " + mCellCount + + " cells for " + + material.getLocalizedName() + + " processing."); + } else { + Logger.MATERIALS( + "[Dehydrator] Found Solid Component, adding " + f.getKey() + + " dusts of " + + f.getValue() + .getLocalizedName() + + "."); + mInternalOutputs[mCounter++] = f.getValue() + .getDust(f.getKey()); + mTotalCount += f.getKey(); + } + } + + // Build Output Array + for (int g = 0; g < mInternalOutputs.length; g++) { + Logger.MATERIALS( + "[Dehydrator] Is output[" + g + + "] valid with a chance? " + + (mInternalOutputs[g] != null ? 10000 : 0)); + mChances[g] = (mInternalOutputs[g] != null ? 10000 : 0); + } + + ItemStack emptyCell = null; + if (mCellCount > 0) { + emptyCell = ItemUtils.getItemStackOfAmountFromOreDict("cellEmpty", mCellCount); + Logger.MATERIALS("[Dehydrator] Recipe now requires " + mCellCount + " empty cells as input."); + } + + ItemStack mainDust = material.getDust(material.smallestStackSizeWhenProcessing); + if (mainDust != null) { + Logger.MATERIALS( + "[Dehydrator] Recipe now requires " + material.smallestStackSizeWhenProcessing + + "x " + + mainDust.getDisplayName() + + " as input."); + } else { + mainDust = material.getDust(mTotalCount); + Logger.MATERIALS("[Dehydrator] Could not find valid input dust, trying alternative."); + if (mainDust != null) { + Logger.MATERIALS( + "[Dehydrator] Recipe now requires " + mTotalCount + + "x " + + mainDust.getDisplayName() + + " as input."); + } else { + Logger.MATERIALS("[Dehydrator] Could not find valid input dust, exiting."); + return; + } + } + + for (int j = 0; j < mInternalOutputs.length; j++) { + if (mInternalOutputs[j] == null) { + mInternalOutputs[j] = GTValues.NI; + Logger.MATERIALS("[Dehydrator] Set slot " + j + " to null."); + } else { + Logger.MATERIALS( + "[Dehydrator] Set slot " + j + " to " + mInternalOutputs[j].getDisplayName() + "."); + } + } + + // i don't understand the mess above, so let's just strip nulls and assume the chances are in correct + // order + List internalOutputs = new ArrayList<>(Arrays.asList(mInternalOutputs)); + internalOutputs.removeIf(Objects::isNull); + int[] chances = new int[internalOutputs.size()]; + for (int i = 0; i < internalOutputs.size(); i++) { + chances[i] = mChances[i]; + } + + ItemStack[] inputs; + if (emptyCell == null) { + inputs = new ItemStack[] { mainDust }; + } else { + inputs = new ItemStack[] { mainDust, emptyCell }; + } + + GTValues.RA.stdBuilder() + .itemInputs(inputs) + .itemOutputs(internalOutputs.toArray(new ItemStack[0])) + .outputChances(chances) + .eut(tVoltageMultiplier) + .duration((int) Math.max(material.getMass() * 4L * 1, 1)) + .addTo(chemicalDehydratorRecipes); + + Logger.MATERIALS("[Dehydrator] Generated Dehydrator recipe for " + matDust.getDisplayName()); + Logger.MATERIALS( + "Inputs: " + mainDust.getDisplayName() + + " x" + + mainDust.stackSize + + ", " + + (emptyCell == null ? "No Cells" + : "" + emptyCell.getDisplayName() + " x" + emptyCell.stackSize)); + Logger.MATERIALS("Outputs " + ItemUtils.getArrayStackNames(mInternalOutputs)); + Logger.MATERIALS("Time: " + ((int) Math.max(material.getMass() * 4L * 1, 1))); + Logger.MATERIALS("EU: " + tVoltageMultiplier); + + } + } + + // Shaped Crafting + + RecipeUtils.addShapedRecipe( + CI.craftingToolHammer_Hard, + null, + null, + material.getCrushedPurified(1), + null, + null, + null, + null, + null, + material.getDustPurified(1)); + + RecipeUtils.addShapedRecipe( + CI.craftingToolHammer_Hard, + null, + null, + material.getCrushed(1), + null, + null, + null, + null, + null, + material.getDustImpure(1)); + + RecipeUtils.addShapedRecipe( + CI.craftingToolHammer_Hard, + null, + null, + material.getCrushedCentrifuged(1), + null, + null, + null, + null, + null, + matDust); + + final ItemStack normalDust = matDust; + final ItemStack smallDust = material.getSmallDust(1); + final ItemStack tinyDust = material.getTinyDust(1); + + if (RecipeUtils.addShapedRecipe( + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + tinyDust, + normalDust)) { + Logger.WARNING("9 Tiny dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("9 Tiny dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); + } + + if (RecipeUtils + .addShapedRecipe(normalDust, null, null, null, null, null, null, null, null, material.getTinyDust(9))) { + Logger.WARNING("9 Tiny dust from 1 Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("9 Tiny dust from 1 Recipe: " + material.getLocalizedName() + " - Failed"); + } + + if (RecipeUtils + .addShapedRecipe(smallDust, smallDust, null, smallDust, smallDust, null, null, null, null, normalDust)) { + Logger.WARNING("4 Small dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("4 Small dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); + } + + if (RecipeUtils + .addShapedRecipe(null, normalDust, null, null, null, null, null, null, null, material.getSmallDust(4))) { + Logger.WARNING("4 Small dust from 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("4 Small dust from 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); + } + + } + + public static ItemStack getTinyDust(Material m) { + ItemStack x = m.getTinyDust(1); + if (x == null) { + x = mStone.getDust(1); + } + return x; + } + + public static ItemStack getDust(Material m) { + ItemStack x = m.getDust(1); + if (x == null) { + x = mStone.getDust(1); + } + return x; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenPlasma.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenPlasma.java new file mode 100644 index 0000000000..12e3534032 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenPlasma.java @@ -0,0 +1,90 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; +import static gregtech.api.util.GTRecipeConstants.FUEL_TYPE; +import static gregtech.api.util.GTRecipeConstants.FUEL_VALUE; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTRecipeConstants; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeGenPlasma extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenPlasma(final Material M) { + this.toGenerate = M; + mRecipeGenMap.add(this); + } + + @Override + public void run() { + generateRecipes(this.toGenerate); + } + + private void generateRecipes(final Material material) { + if (material.getPlasma() != null) { + // Cool Plasma + ItemStack aPlasmaCell = material.getPlasmaCell(1); + ItemStack aCell = material.getCell(1); + ItemStack aContainerItem = GTUtility.getFluidForFilledItem(aPlasmaCell, true) == null + ? GTUtility.getContainerItem(aPlasmaCell, true) + : CI.emptyCells(1); + if (ItemUtils.checkForInvalidItems(new ItemStack[] { aPlasmaCell, aContainerItem })) { + switch (material.getUnlocalizedName()) { + case "Runite": + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1L, aPlasmaCell)) + .itemOutputs(aContainerItem) + .metadata(FUEL_VALUE, 350_000) + .metadata(FUEL_TYPE, GTRecipeConstants.FuelType.PlasmaTurbine.ordinal()) + .duration(0) + .eut(0) + .addTo(GTRecipeConstants.Fuel); + case "CelestialTungsten": + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1L, aPlasmaCell)) + .itemOutputs(aContainerItem) + .metadata(FUEL_VALUE, 720_000) + .metadata(FUEL_TYPE, GTRecipeConstants.FuelType.PlasmaTurbine.ordinal()) + .duration(0) + .eut(0) + .addTo(GTRecipeConstants.Fuel); + + default: + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1L, aPlasmaCell)) + .itemOutputs(aContainerItem) + .metadata(FUEL_VALUE, (int) Math.max(1024L, 1024L * material.getMass())) + .metadata(FUEL_TYPE, GTRecipeConstants.FuelType.PlasmaTurbine.ordinal()) + .duration(0) + .eut(0) + .addTo(GTRecipeConstants.Fuel); + } + } + if (ItemUtils.checkForInvalidItems(new ItemStack[] { aCell, aPlasmaCell })) { + GTValues.RA.stdBuilder() + .itemInputs(aPlasmaCell) + .itemOutputs(aCell) + .duration(Math.max(material.getMass() * 2L, 1L)) + .eut(TierEU.RECIPE_MV) + .addTo(vacuumFreezerRecipes); + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenPlates.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenPlates.java new file mode 100644 index 0000000000..eb48d6d8e7 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenPlates.java @@ -0,0 +1,180 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; +import static gregtech.api.recipe.RecipeMaps.benderRecipes; +import static gregtech.api.recipe.RecipeMaps.cutterRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; + +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeGenPlates extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenPlates(final Material M) { + this.toGenerate = M; + mRecipeGenMap.add(this); + } + + @Override + public void run() { + generateRecipes(this.toGenerate); + } + + private void generateRecipes(final Material material) { + + final ItemStack ingotStackOne = material.getIngot(1); + final ItemStack ingotStackTwo = material.getIngot(2); + final ItemStack ingotStackThree = material.getIngot(3); + final ItemStack ingotStackNine = material.getIngot(9); + final ItemStack shape_Mold = ItemList.Shape_Mold_Plate.get(0); + final ItemStack plate_Single = material.getPlate(1); + final ItemStack plate_SingleTwo = material.getPlate(2); + final ItemStack plate_SingleNine = material.getPlate(9); + final ItemStack plate_Double = material.getPlateDouble(1); + final ItemStack plate_Dense = material.getPlateDense(1); + final ItemStack foil_SingleFour = material.getFoil(4); + final ItemStack block = material.getBlock(1); + + Logger.WARNING("Generating Plate recipes for " + material.getLocalizedName()); + + // Forge Hammer + if (ItemUtils.checkForInvalidItems(ingotStackTwo) && ItemUtils.checkForInvalidItems(plate_Single)) { + GTValues.RA.stdBuilder() + .itemInputs(ingotStackThree) + .itemOutputs(plate_SingleTwo) + .duration(Math.max(material.getMass(), 1L)) + .eut(material.vVoltageMultiplier) + .addTo(hammerRecipes); + + Logger.WARNING("Forge Hammer Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Bender + if (ItemUtils.checkForInvalidItems(ingotStackOne) && ItemUtils.checkForInvalidItems(plate_Single)) { + GTValues.RA.stdBuilder() + .itemInputs(ingotStackOne, GTUtility.getIntegratedCircuit(1)) + .itemOutputs(plate_Single) + .duration(Math.max(material.getMass() * 1L, 1L)) + .eut(material.vVoltageMultiplier) + .addTo(benderRecipes); + + Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); + } + + if (ItemUtils.checkForInvalidItems(ingotStackOne) && ItemUtils.checkForInvalidItems(foil_SingleFour)) { + GTValues.RA.stdBuilder() + .itemInputs(ingotStackOne, GTUtility.getIntegratedCircuit(10)) + .itemOutputs(foil_SingleFour) + .duration(Math.max(material.getMass() * 2L, 1L)) + .eut(material.vVoltageMultiplier) + .addTo(benderRecipes); + + Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Alloy Smelter + if (ItemUtils.checkForInvalidItems(ingotStackTwo) && ItemUtils.checkForInvalidItems(plate_Single)) { + GTValues.RA.stdBuilder() + .itemInputs(ingotStackTwo, shape_Mold) + .itemOutputs(plate_Single) + .duration(Math.max(material.getMass() * 2L, 1L)) + .eut(material.vVoltageMultiplier) + .addTo(alloySmelterRecipes); + + Logger.WARNING("Alloy Smelter Recipe: " + material.getLocalizedName() + " - Success"); + } + // Cutting Machine + if (ItemUtils.checkForInvalidItems(block) && ItemUtils.checkForInvalidItems(plate_Single)) { + GTValues.RA.stdBuilder() + .itemInputs(block) + .itemOutputs(plate_SingleNine) + .duration(Math.max(material.getMass() * 10L, 1L)) + .eut(material.vVoltageMultiplier) + .addTo(cutterRecipes); + + Logger.WARNING("Cutting Machine Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Making Double Plates + if (ItemUtils.checkForInvalidItems(ingotStackTwo) && ItemUtils.checkForInvalidItems(plate_Double)) { + GTValues.RA.stdBuilder() + .itemInputs(ingotStackTwo, GTUtility.getIntegratedCircuit(2)) + .itemOutputs(plate_Double) + .duration(Math.max(material.getMass() * 2L, 1L)) + .eut(material.vVoltageMultiplier) + .addTo(benderRecipes); + + Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); + } + + if (ItemUtils.checkForInvalidItems(plate_SingleTwo) && ItemUtils.checkForInvalidItems(plate_Double)) { + GTValues.RA.stdBuilder() + .itemInputs(plate_SingleTwo, GTUtility.getIntegratedCircuit(2)) + .itemOutputs(plate_Double) + .duration(Math.max(material.getMass() * 2L, 1L)) + .eut(material.vVoltageMultiplier) + .addTo(benderRecipes); + Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Bender + if (ItemUtils.checkForInvalidItems(material.getPlate(1)) + && ItemUtils.checkForInvalidItems(material.getFoil(1))) { + GTValues.RA.stdBuilder() + .itemInputs(material.getPlate(1), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(material.getFoil(4)) + .duration(Math.max(material.getMass(), 1L)) + .eut(material.vVoltageMultiplier) + .addTo(benderRecipes); + + GregTechAPI.registerCover( + material.getFoil(1), + new GTRenderedTexture(material.getTextureSet().mTextures[70], material.getRGBA(), false), + null); + Logger.WARNING("Bender Foil Recipe: " + material.getLocalizedName() + " - Success"); + } + + // Making Dense Plates + if (ItemUtils.checkForInvalidItems(ingotStackNine) && ItemUtils.checkForInvalidItems(plate_Dense)) { + GTValues.RA.stdBuilder() + .itemInputs(ingotStackNine, GTUtility.getIntegratedCircuit(9)) + .itemOutputs(plate_Dense) + .duration(Math.max(material.getMass() * 2L, 1L)) + .eut(material.vVoltageMultiplier) + .addTo(benderRecipes); + + Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); + } + + if (ItemUtils.checkForInvalidItems(plate_SingleNine) && ItemUtils.checkForInvalidItems(plate_Dense)) { + GTValues.RA.stdBuilder() + .itemInputs(plate_SingleNine, GTUtility.getIntegratedCircuit(9)) + .itemOutputs(plate_Dense) + .duration(Math.max(material.getMass() * 2L, 1L)) + .eut(material.vVoltageMultiplier) + .addTo(benderRecipes); + + Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); + } + + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenRecycling.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenRecycling.java new file mode 100644 index 0000000000..8fe051dd71 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenRecycling.java @@ -0,0 +1,375 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import static gregtech.api.enums.GTValues.M; +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import java.util.ArrayList; +import java.util.Map; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.api.objects.data.Pair; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.state.MaterialState; +import gtPlusPlus.core.util.Utils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; + +public class RecipeGenRecycling implements Runnable { + + public static AutoMap mQueuedRecyclingGenerators = new AutoMap<>(); + + public static void executeGenerators() { + if (mQueuedRecyclingGenerators.size() > 0) { + for (Runnable R : mQueuedRecyclingGenerators.values()) { + R.run(); + } + } + } + + final Material toGenerate; + public static Map mNameMap; + + public RecipeGenRecycling(final Material M) { + this.toGenerate = M; + if (mNameMap == null) { + mNameMap = this.getNameMap(); + } + mQueuedRecyclingGenerators.put(this); + } + + @Override + public void run() { + if (mNameMap != null) { + generateRecipes(this.toGenerate); + } + } + + public static void generateRecipes(final Material material) { + + if (material != null) Logger.WARNING("Generating Recycling recipes for " + material.getLocalizedName()); + + final OrePrefixes[] mValidPrefixesAsString = { OrePrefixes.ingot, OrePrefixes.ingotHot, OrePrefixes.nugget, + OrePrefixes.plate, OrePrefixes.plateDense, OrePrefixes.plateDouble, OrePrefixes.plateTriple, + OrePrefixes.plateQuadruple, OrePrefixes.plateQuintuple, OrePrefixes.stick, OrePrefixes.stickLong, + OrePrefixes.bolt, OrePrefixes.screw, OrePrefixes.ring, OrePrefixes.rotor, OrePrefixes.gearGt, + OrePrefixes.gearGtSmall, OrePrefixes.gear, OrePrefixes.block, OrePrefixes.cableGt01, OrePrefixes.cableGt02, + OrePrefixes.cableGt04, OrePrefixes.cableGt08, OrePrefixes.cableGt12, OrePrefixes.wireFine, + OrePrefixes.wireGt01, OrePrefixes.wireGt02, OrePrefixes.wireGt04, OrePrefixes.wireGt08, + OrePrefixes.wireGt12, OrePrefixes.wireGt16, OrePrefixes.foil, OrePrefixes.frameGt, OrePrefixes.pipeHuge, + OrePrefixes.pipeLarge, OrePrefixes.pipeMedium, OrePrefixes.pipeSmall, OrePrefixes.pipeTiny, }; + + int mSlotIndex = 0; + Pair[] mValidPairs = new Pair[mValidPrefixesAsString.length]; + + for (int r = 0; r < mValidPairs.length; r++) { + ItemStack temp = getItemStackOfAmountFromOreDictNoBroken( + mValidPrefixesAsString[r].name() + Utils.sanitizeString(material.getLocalizedName()), + 1); + if (temp != null) { + mValidPairs[mSlotIndex++] = new Pair<>(mValidPrefixesAsString[r], temp.copy()); + } + } + + int validCounter = 0; + Pair[] temp = mValidPairs; + for (Pair temp2 : mValidPairs) { + if (temp2 == null) { + continue; + } + Logger.WARNING( + "Valid: " + temp2.getValue() + .getDisplayName()); + validCounter++; + } + Pair temp3[] = new Pair[validCounter]; + int temp4 = 0; + for (Pair r : mValidPairs) { + if (r == null) { + continue; + } + + temp3[temp4++] = r; + } + if (temp3.length > 0) { + mValidPairs = temp3.clone(); + } + + for (final Pair validPrefix : mValidPairs) { + if (material == null || validPrefix == null + || (material.getState() != MaterialState.SOLID && material.getState() != MaterialState.LIQUID) + || validPrefix.getKey() == OrePrefixes.ingotHot) { + continue; + } + + final ItemStack tempStack = validPrefix.getValue(); + final ItemStack mDust = getDust(material, validPrefix.getKey()); + + // Maceration + if (ItemUtils.checkForInvalidItems(tempStack) && mDust != null) { + RA.stdBuilder() + .itemInputs(tempStack) + .itemOutputs(mDust) + .eut(2) + .duration(20 * SECONDS) + .addTo(maceratorRecipes); + Logger.WARNING( + "Recycle Recipe: " + material.getLocalizedName() + + " - Success - Recycle " + + tempStack.getDisplayName() + + " and obtain " + + mDust.getDisplayName()); + } + + // Fluid Extractor + if (ItemUtils.checkForInvalidItems(tempStack)) { + int aFluidAmount = (int) ((144 * validPrefix.getKey().mMaterialAmount) / (M * tempStack.stackSize)); + int aDuration = (int) Math.max(1, (24 * validPrefix.getKey().mMaterialAmount) / M); + FluidStack fluidOutput = material.getFluidStack(aFluidAmount); + if (fluidOutput != null) { + GTValues.RA.stdBuilder() + .itemInputs(tempStack) + .fluidOutputs(fluidOutput) + .duration(aDuration) + .eut(material.vVoltageMultiplier) + .addTo(fluidExtractionRecipes); + + Logger.WARNING( + "Fluid Recycle Recipe: " + material.getLocalizedName() + + " - Success - Recycle " + + tempStack.getDisplayName() + + " and obtain " + + aFluidAmount + + "mb of " + + material.getFluidStack(1) + .getLocalizedName() + + ". Time: " + + aDuration + + ", Voltage: " + + material.vVoltageMultiplier); + } + } + } + + } + + public static Pair getDustData(final Material aMaterial, final OrePrefixes aPrefix) { + return getDustData(aMaterial, aPrefix.mMaterialAmount); + } + + public static Pair getDustData(final Material aMaterial, final long aMaterialAmount) { + ItemStack mDust = null; + OrePrefixes mPrefix = null; + + if (aMaterial == null || aMaterialAmount <= 0) { + return null; + } + if ((((aMaterialAmount % M) == 0) || (aMaterialAmount >= (M * 16)))) { + mDust = get(OrePrefixes.dust, aMaterial, aMaterialAmount / M); + mPrefix = OrePrefixes.dust; + } + if ((mDust == null) && ((((aMaterialAmount * 4) % M) == 0) || (aMaterialAmount >= (M * 8)))) { + mDust = get(OrePrefixes.dustSmall, aMaterial, (aMaterialAmount * 4) / M); + mPrefix = OrePrefixes.dustSmall; + } + if ((mDust == null) && (((aMaterialAmount * 9) >= M))) { + mDust = get(OrePrefixes.dustTiny, aMaterial, (aMaterialAmount * 9) / M); + mPrefix = OrePrefixes.dustTiny; + } + + if (mPrefix != null && mDust != null) { + Logger.WARNING("Built valid dust pair."); + return new Pair<>(mPrefix, mDust); + } else { + Logger.WARNING("mPrefix: " + (mPrefix != null)); + Logger.WARNING("mDust: " + (mDust != null)); + } + Logger.WARNING("Failed to build valid dust pair."); + return null; + } + + public static ItemStack getDust(final Material aMaterial, final OrePrefixes aPrefix) { + return aMaterial == null ? null : getDust(aMaterial, aPrefix.mMaterialAmount); + } + + public static ItemStack getDust(final Material aMaterial, final long aMaterialAmount) { + if (aMaterialAmount <= 0) { + return null; + } + ItemStack rStack = null; + if ((((aMaterialAmount % M) == 0) || (aMaterialAmount >= (M * 16)))) { + Logger.WARNING("Trying to get a Dust"); + rStack = get(OrePrefixes.dust, aMaterial, aMaterialAmount / M); + } + if ((rStack == null) && ((((aMaterialAmount * 4) % M) == 0) || (aMaterialAmount >= (M * 8)))) { + Logger.WARNING("Trying to get a Small Dust"); + rStack = get(OrePrefixes.dustSmall, aMaterial, (aMaterialAmount * 4) / M); + } + if ((rStack == null) && (((aMaterialAmount * 9) >= M))) { + Logger.WARNING("Trying to get a Tiny Dust"); + rStack = get(OrePrefixes.dustTiny, aMaterial, (aMaterialAmount * 9) / M); + } + return rStack; + } + + public static ItemStack get(final Object aName, final long aAmount) { + return get(aName, null, aAmount, true, true); + } + + public static ItemStack get(final Object aName, final ItemStack aReplacement, final long aAmount) { + return get(aName, aReplacement, aAmount, true, true); + } + + public static ItemStack get(final OrePrefixes aPrefix, final Material aMaterial, final long aAmount) { + return get(aPrefix, aMaterial, null, aAmount); + } + + public static ItemStack get(final OrePrefixes aPrefix, final Material aMaterial, final ItemStack aReplacement, + final long aAmount) { + return get( + aPrefix.name() + Utils.sanitizeString(aMaterial.getLocalizedName()), + aReplacement, + aAmount, + false, + true); + } + + public static ItemStack get(final Object aName, final ItemStack aReplacement, final long aAmount, + final boolean aMentionPossibleTypos, final boolean aNoInvalidAmounts) { + if (aNoInvalidAmounts && (aAmount < 1L)) { + Logger.WARNING("Returning Null. Method: " + ReflectionUtils.getMethodName(0)); + Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(1)); + Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(2)); + Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(3)); + Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(4)); + return null; + } + if (!mNameMap.containsKey(aName.toString()) && aMentionPossibleTypos) { + Logger.WARNING("Unknown Key for Unification, Typo? " + aName); + } + return GTUtility.copyAmount( + aAmount, + new Object[] { mNameMap.get(aName.toString()), getFirstOre(aName, aAmount), aReplacement }); + } + + public static ItemStack getFirstOre(final Object aName, final long aAmount) { + if (GTUtility.isStringInvalid(aName)) { + Logger.WARNING("Returning Null. Method: " + ReflectionUtils.getMethodName(0)); + Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(1)); + Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(2)); + Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(3)); + Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(4)); + return null; + } + final ItemStack tStack = mNameMap.get(aName.toString()); + if (GTUtility.isStackValid(tStack)) { + Logger.WARNING("Found valid stack."); + return GTUtility.copyAmount(aAmount, new Object[] { tStack }); + } + return GTUtility.copyAmount(aAmount, getOres(aName).toArray()); + } + + public static ArrayList getOres(final Object aOreName) { + final String aName = (aOreName == null) ? "" : aOreName.toString(); + final ArrayList rList = new ArrayList<>(); + if (GTUtility.isStringValid(aName)) { + Logger.WARNING("Making a list of all OreDict entries for " + aOreName + "."); + if (rList.addAll(OreDictionary.getOres(aName))) { + Logger.WARNING("Added " + rList.size() + " elements to list."); + } else { + Logger.WARNING("Failed to Add Collection from oreDictionary, forcing an entry."); + rList.add(ItemUtils.getItemStackOfAmountFromOreDict((String) aOreName, 1)); + } + } + return rList; + } + + @SuppressWarnings("unchecked") + public Map getNameMap() { + Map tempMap; + try { + tempMap = (Map) FieldUtils + .readStaticField(GTOreDictUnificator.class, "sName2StackMap", true); + if (tempMap != null) { + Logger.WARNING("Found 'sName2StackMap' in GTOreDictUnificator.class."); + return tempMap; + } + } catch (final IllegalAccessException e) { + e.printStackTrace(); + } + Logger.WARNING("Invalid map stored in GTOreDictUnificator.class, unable to find sName2StackMap field."); + return null; + } + + public static ItemStack getItemStackOfAmountFromOreDictNoBroken(String oredictName, final int amount) { + + try { + + if (oredictName.contains("-") || oredictName.contains("_")) { + oredictName = Utils.sanitizeString(oredictName, new char[] { '-', '_' }); + } else { + oredictName = Utils.sanitizeString(oredictName); + } + + // Adds a check to grab dusts using GT methodology if possible. + ItemStack returnValue = null; + if (oredictName.toLowerCase() + .contains("dust")) { + final String MaterialName = oredictName.toLowerCase() + .replace("dust", ""); + final Materials m = Materials.get(MaterialName); + if (m != null && m != Materials._NULL) { + returnValue = ItemUtils.getGregtechDust(m, amount); + if (ItemUtils.checkForInvalidItems(returnValue)) { + return returnValue; + } + } + } + if (returnValue == null) { + returnValue = getItemStackOfAmountFromOreDict(oredictName, amount); + if (ItemUtils.checkForInvalidItems(returnValue)) { + return returnValue.copy(); + } + } + return null; + } catch (final Throwable t) { + return null; + } + } + + public static ItemStack getItemStackOfAmountFromOreDict(String oredictName, final int amount) { + String mTemp = oredictName; + + // Banned Materials and replacements for GT5.8 compat. + + if (oredictName.toLowerCase() + .contains("ingotclay")) { + return ItemUtils.getSimpleStack(Items.clay_ball, amount); + } + + final ArrayList oreDictList = OreDictionary.getOres(mTemp); + if (!oreDictList.isEmpty()) { + final ItemStack returnValue = oreDictList.get(0) + .copy(); + returnValue.stackSize = amount; + return returnValue; + } + return null; + // return getItemStackOfAmountFromOreDictNoBroken(mTemp, amount); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenShapedCrafting.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenShapedCrafting.java new file mode 100644 index 0000000000..0c07b382ec --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGenShapedCrafting.java @@ -0,0 +1,210 @@ +package gtPlusPlus.xmod.gregtech.loaders; + +import java.util.HashSet; +import java.util.Set; + +import gregtech.api.util.GTModHandler; +import gtPlusPlus.api.interfaces.RunnableWithInfo; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialGenerator; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeGenShapedCrafting extends RecipeGenBase { + + public static final Set> mRecipeGenMap = new HashSet<>(); + + static { + MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); + } + + public RecipeGenShapedCrafting(final Material M) { + this.toGenerate = M; + mRecipeGenMap.add(this); + } + + @Override + public void run() { + generateRecipes(this.toGenerate); + } + + private void generateRecipes(final Material material) { + Logger.WARNING("Generating Shaped Crafting recipes for " + material.getLocalizedName()); // TODO + + // Single Plate Shaped/Shapeless + if (ItemUtils.checkForInvalidItems(material.getPlate(1)) + && ItemUtils.checkForInvalidItems(material.getIngot(1))) + if (material.getPlate(1) != null && material.getIngot(1) != null) GTModHandler.addCraftingRecipe( + material.getPlate(1), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "h", "B", "I", Character.valueOf('I'), material.getIngot(1), Character.valueOf('B'), + material.getIngot(1) }); + + if (ItemUtils.checkForInvalidItems(material.getPlate(1)) + && ItemUtils.checkForInvalidItems(material.getIngot(1))) + GTModHandler.addShapelessCraftingRecipe( + material.getPlate(1), + new Object[] { gregtech.api.enums.ToolDictNames.craftingToolForgeHammer, material.getIngot(1), + material.getIngot(1) }); + + // Double Plate Shaped/Shapeless + if (ItemUtils.checkForInvalidItems(material.getPlateDouble(1)) + && ItemUtils.checkForInvalidItems(material.getPlate(1))) + GTModHandler.addCraftingRecipe( + material.getPlateDouble(1), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "I", "B", "h", Character.valueOf('I'), material.getPlate(1), Character.valueOf('B'), + material.getPlate(1) }); + + if (ItemUtils.checkForInvalidItems(material.getPlateDouble(1)) + && ItemUtils.checkForInvalidItems(material.getPlate(1))) + GTModHandler.addShapelessCraftingRecipe( + material.getPlateDouble(1), + new Object[] { gregtech.api.enums.ToolDictNames.craftingToolForgeHammer, material.getPlate(1), + material.getPlate(1) }); + + // Ring Recipe + if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getRing(1)) + && ItemUtils.checkForInvalidItems(material.getRod(1))) { + if (GTModHandler.addCraftingRecipe( + material.getRing(1), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "h ", "fR", 'R', material.getRod(1) })) { + Logger.WARNING("GT:NH Ring Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("GT:NH Ring Recipe: " + material.getLocalizedName() + " - Failed"); + } + } + + // Framebox Recipe + if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getFrameBox(1)) + && ItemUtils.checkForInvalidItems(material.getRod(1))) { + if (GTModHandler.addCraftingRecipe( + material.getFrameBox(2), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "RRR", "RwR", "RRR", 'R', material.getRod(1) })) { + Logger.WARNING("Framebox Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("Framebox Recipe: " + material.getLocalizedName() + " - Failed"); + } + } + + // Shaped Recipe - Bolts + if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getBolt(1)) + && ItemUtils.checkForInvalidItems(material.getRod(1))) { + if (GTModHandler.addCraftingRecipe( + material.getBolt(2), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "s ", " R", 'R', material.getRod(1) })) { + Logger.WARNING("Bolt Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("Bolt Recipe: " + material.getLocalizedName() + " - Failed"); + } + } + + // Shaped Recipe - Fine Wire + if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getFoil(1)) + && ItemUtils.checkForInvalidItems(material.getFineWire(1))) { + if (GTModHandler.addCraftingRecipe( + material.getFineWire(1), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "Fx", 'F', material.getFoil(1) })) { + Logger.WARNING("Fine Wire Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("Fine Wire Recipe: " + material.getLocalizedName() + " - Failed"); + } + } + + // Shaped Recipe - Foil + if (ItemUtils.checkForInvalidItems(material.getFoil(1)) + && ItemUtils.checkForInvalidItems(material.getPlate(1))) { + if (GTModHandler.addCraftingRecipe( + material.getFoil(2), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "hP", 'P', material.getPlate(1) })) { + Logger.WARNING("Foil Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("Foil Recipe: " + material.getLocalizedName() + " - Failed"); + } + } + + // Shaped Recipe - Ingot to Rod + if (ItemUtils.checkForInvalidItems(material.getRod(1)) && ItemUtils.checkForInvalidItems(material.getIngot(1))) + if (GTModHandler.addCraftingRecipe( + material.getRod(1), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "f ", " I", 'I', material.getIngot(1) })) { + Logger.WARNING("Rod Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("Rod Recipe: " + material.getLocalizedName() + " - Failed"); + } + + // Shaped Recipe - Long Rod to two smalls + if (ItemUtils.checkForInvalidItems(material.getRod(1)) + && ItemUtils.checkForInvalidItems(material.getLongRod(1))) + if (GTModHandler.addCraftingRecipe( + material.getRod(2), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "s", "L", 'L', material.getLongRod(1) })) { + Logger.WARNING("Rod Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("Rod Recipe: " + material.getLocalizedName() + " - Failed"); + } + + // Two small to long rod + if (ItemUtils.checkForInvalidItems(material.getLongRod(1)) + && ItemUtils.checkForInvalidItems(material.getRod(1))) + if (GTModHandler.addCraftingRecipe( + material.getLongRod(1), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "RhR", 'R', material.getRod(1) })) { + Logger.WARNING("Long Rod Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("Long Rod Recipe: " + material.getLocalizedName() + " - Failed"); + } + + // 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 (GTModHandler.addCraftingRecipe( + material.getRotor(1), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "PhP", "SRf", "PdP", 'P', material.getPlate(1), 'S', material.getScrew(1), 'R', + material.getRing(1), })) { + Logger.WARNING("Rotor Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("Rotor Recipe: " + material.getLocalizedName() + " - Failed"); + } + } + + // Gear Recipe + if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getGear(1)) + && ItemUtils.checkForInvalidItems(material.getPlate(1)) + && ItemUtils.checkForInvalidItems(material.getRod(1))) { + if (GTModHandler.addCraftingRecipe( + material.getGear(1), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "RPR", "PwP", "RPR", 'P', material.getPlate(1), 'R', material.getRod(1), })) { + Logger.WARNING("Gear Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("Gear Recipe: " + material.getLocalizedName() + " - Failed"); + } + } + + // Screws + if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getScrew(1)) + && ItemUtils.checkForInvalidItems(material.getBolt(1))) { + if (GTModHandler.addCraftingRecipe( + material.getScrew(1), + GTModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GTModHandler.RecipeBits.BUFFERED, + new Object[] { "fB", "B ", 'B', material.getBolt(1), })) { + Logger.WARNING("Screw Recipe: " + material.getLocalizedName() + " - Success"); + } else { + Logger.WARNING("Screw Recipe: " + material.getLocalizedName() + " - Failed"); + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_AlloySmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_AlloySmelter.java deleted file mode 100644 index b56a480c0c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_AlloySmelter.java +++ /dev/null @@ -1,69 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; - -import java.util.HashSet; -import java.util.Set; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeGen_AlloySmelter extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_AlloySmelter(final Material M) { - this.toGenerate = M; - mRecipeGenMap.add(this); - } - - @Override - public void run() { - generateRecipes(this.toGenerate); - } - - private void generateRecipes(final Material material) { - final int tVoltageMultiplier = material.vVoltageMultiplier; - final long duration = Math.max(material.getMass() * 2L, 1L); - // Nuggets - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) - && ItemUtils.checkForInvalidItems(material.getNugget(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(material.getIngot(1), ItemList.Shape_Mold_Nugget.get(0)) - .itemOutputs(material.getNugget(9)) - .duration(duration) - .eut(tVoltageMultiplier) - .addTo(alloySmelterRecipes); - } - - // Gears - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) - && ItemUtils.checkForInvalidItems(material.getGear(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(material.getIngot(8), ItemList.Shape_Mold_Gear.get(0)) - .itemOutputs(material.getGear(1)) - .duration(duration) - .eut(tVoltageMultiplier) - .addTo(alloySmelterRecipes); - } - - // Ingot - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) - && ItemUtils.checkForInvalidItems(material.getNugget(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(material.getNugget(9), ItemList.Shape_Mold_Ingot.get(0)) - .itemOutputs(material.getIngot(1)) - .duration(duration) - .eut(tVoltageMultiplier) - .addTo(alloySmelterRecipes); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Assembler.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Assembler.java deleted file mode 100644 index 8256b73a44..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Assembler.java +++ /dev/null @@ -1,85 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import java.util.HashSet; -import java.util.Set; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeGen_Assembler extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_Assembler(final Material M) { - this.toGenerate = M; - mRecipeGenMap.add(this); - } - - @Override - public void run() { - generateRecipes(this.toGenerate); - } - - private void generateRecipes(final Material material) { - - // Frame Box - if (ItemUtils.checkForInvalidItems(new ItemStack[] { material.getRod(1), material.getFrameBox(1) })) { - GT_Values.RA.stdBuilder() - .itemInputs(material.getRod(4), GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(material.getFrameBox(1)) - .duration(3 * SECONDS) - .eut(material.vVoltageMultiplier) - .addTo(assemblerRecipes); - } - - // Rotor - if (ItemUtils - .checkForInvalidItems(new ItemStack[] { material.getPlate(1), material.getRing(1), material.getRotor(1) })) - addAssemblerRecipe( - material.getPlate(4), - material.getRing(1), - material.getRotor(1), - 240, - material.vVoltageMultiplier); - } - - @Deprecated - private static void addAssemblerRecipe(final ItemStack input1, final ItemStack input2, final ItemStack output1, - final int seconds, final int euCost) { - GT_Values.RA.stdBuilder() - .itemInputs(input1, input2) - .itemOutputs(output1) - .fluidInputs(FluidUtils.getFluidStack("molten.solderingalloy", 16)) - .duration(seconds) - .eut(euCost) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(input1, input2) - .itemOutputs(output1) - .fluidInputs(FluidUtils.getFluidStack("molten.tin", 32)) - .duration(seconds) - .eut(euCost) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(input1, input2) - .itemOutputs(output1) - .fluidInputs(FluidUtils.getFluidStack("molten.lead", 48)) - .duration(seconds) - .eut(euCost) - .addTo(assemblerRecipes); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Base.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Base.java deleted file mode 100644 index d000889757..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Base.java +++ /dev/null @@ -1,15 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.core.material.Material; - -public abstract class RecipeGen_Base implements RunnableWithInfo { - - protected Material toGenerate; - protected boolean disableOptional; - - @Override - public Material getInfoData() { - return toGenerate; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelter.java deleted file mode 100644 index bcf2565b39..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelter.java +++ /dev/null @@ -1,307 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.enums.GT_Values.VP; -import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.alloyBlastSmelterRecipes; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.util.GT_RecipeBuilder; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.recipe.GTPPRecipeCategories; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.material.MaterialStack; -import gtPlusPlus.core.material.nuclear.FLUORIDES; -import gtPlusPlus.core.material.nuclear.NUCLIDE; -import gtPlusPlus.core.material.state.MaterialState; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeGen_BlastSmelter extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_BlastSmelter(final Material M) { - this.toGenerate = M; - mRecipeGenMap.add(this); - } - - @Override - public void run() { - generateARecipe(this.toGenerate); - } - - private void generateARecipe(final Material M) { - - // Add a Blast Smelting Recipe, Let's go! - ItemStack tStack = M.getDust(1); - if (tStack == null) { - return; - } - - final Material[] badMaterials = { FLUORIDES.THORIUM_HEXAFLUORIDE, FLUORIDES.THORIUM_TETRAFLUORIDE, - ALLOY.BLOODSTEEL, NUCLIDE.LiFBeF2ThF4UF4, NUCLIDE.LiFBeF2ZrF4UF4, NUCLIDE.LiFBeF2ZrF4U235 }; - for (final Material R : badMaterials) { - if (M == R) { - return; - } - } - - // Prepare some Variables - ItemStack[] components; - ArrayList tMaterial = new ArrayList<>(); - int inputStackCount = 0; - int fluidAmount = 0; - final boolean doTest = true; - tMaterial = M.getComposites(); - - // This Bad boy here is what dictates unique recipes. - ItemStack circuitGT; - - int tier = Math.max(1, M.vTier); - long aVoltage = VP[tier]; - - // Set a duration - int duration = 120 * tier * 10; - - if (tier <= 4) { - duration = 20 * tier * 10; - } - - int mMaterialListSize = 0; - - int mTotalPartsCounter = M.smallestStackSizeWhenProcessing; - - if (M.getComposites() != null) { - for (final gtPlusPlus.core.material.MaterialStack ternkfsdf : M.getComposites()) { - if (ternkfsdf != null) { - mMaterialListSize++; - } - } - } else { - mMaterialListSize = 1; - } - - Logger.WARNING("[BAS] Size: " + mMaterialListSize); - - // Make a simple one Material MaterialStack[] and log it for validity. - circuitGT = GT_Utility.getIntegratedCircuit(1); - final ItemStack[] tItemStackTest = new ItemStack[] { circuitGT, tStack }; - inputStackCount = 1; - fluidAmount = 144 * inputStackCount; - Logger.WARNING( - "[BAS] Adding an Alloy Blast Smelter Recipe for " + M.getLocalizedName() - + ". Gives " - + fluidAmount - + "L of molten metal."); - for (int das = 0; das < tItemStackTest.length; das++) { - if (tItemStackTest[das] != null) { - Logger.WARNING( - "[BAS] tMaterial[" + das - + "]: " - + tItemStackTest[das].getDisplayName() - + " Meta: " - + tItemStackTest[das].getItemDamage() - + ", Amount: " - + tItemStackTest[das].stackSize); - } - } - - final boolean hasMoreInputThanACircuit = (tItemStackTest.length > 1); - - // Generate Recipes for all singular materials that can be made molten. - if (hasMoreInputThanACircuit) { - if (M.requiresBlastFurnace()) { - GT_Values.RA.stdBuilder() - .itemInputs(tItemStackTest) - .fluidOutputs(M.getFluidStack(fluidAmount)) - .duration(duration / (mTotalPartsCounter > 0 ? mTotalPartsCounter : 1)) - .eut(aVoltage) - .recipeCategory(GTPPRecipeCategories.absNonAlloyRecipes) - .addTo(alloyBlastSmelterRecipes); - } else { - Logger.WARNING("[BAS] Failed."); - } - } else { - GT_Values.RA.stdBuilder() - .itemInputs(tItemStackTest) - .fluidOutputs(M.getFluidStack(fluidAmount)) - .eut(aVoltage) - .duration(duration / (mTotalPartsCounter > 0 ? mTotalPartsCounter : 1) / 2) - .addTo(alloyBlastSmelterRecipes); - - Logger.WARNING("[BAS] Success."); - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Ingot.get(0)) - .itemOutputs(M.getIngot(1)) - .fluidInputs(M.getFluidStack(144)) - .duration(duration / 2) - .eut(60) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING("[BAS] Success, Also added a Fluid solidifier recipe."); - - } - - if (tMaterial == null) { - Logger.WARNING("[BAS] doTest: " + doTest + " | tMaterial == null: true"); - return; - } - - // Reset the Variables for compounds if last recipe was a success. - inputStackCount = 0; - - if (mMaterialListSize <= 1) { - return; - } - // If this Material has some kind of compound list, proceed - - final gtPlusPlus.core.material.MaterialStack[] tempStack = new gtPlusPlus.core.material.MaterialStack[mMaterialListSize]; - circuitGT = GT_Utility.getIntegratedCircuit(mMaterialListSize); - - // Builds me a MaterialStack[] from the MaterialList of M. - int ooo = 0; - for (final gtPlusPlus.core.material.MaterialStack xMaterial : M.getComposites()) { - if (xMaterial == null) { - ooo++; - continue; - } - - if (xMaterial.getStackMaterial() == null) { - tempStack[ooo] = xMaterial; - ooo++; - continue; - } - - Logger.WARNING( - "[BAS] FOUND: " + xMaterial.getStackMaterial() - .getLocalizedName()); - Logger.WARNING( - "[BAS] ADDING: " + xMaterial.getStackMaterial() - .getLocalizedName()); - tempStack[ooo] = xMaterial; - ooo++; - } - - // Builds me an ItemStack[] of the materials. - Without a circuit - this gets a good count for - // the 144L fluid multiplier - components = new ItemStack[9]; - inputStackCount = 0; - FluidStack componentsFluid = null; - for (int irc = 0; irc < M.getComposites() - .size(); irc++) { - if (M.getComposites() - .get(irc) == null) { - continue; - } - - final int r = (int) M.vSmallestRatio[irc]; - inputStackCount = inputStackCount + r; - if ((M.getComposites() - .get(irc) - .getStackMaterial() - .getState() != MaterialState.SOLID) || !ItemUtils.checkForInvalidItems( - M.getComposites() - .get(irc) - .getDustStack(r))) { - final int xr = r; - if ((xr > 0) && (xr <= 100)) { - final int mathmatics = (r * 1000); - componentsFluid = FluidUtils.getFluidStack( - M.getComposites() - .get(irc) - .getStackMaterial() - .getFluidStack(mathmatics), - mathmatics); - } - } else { - components[irc] = M.getComposites() - .get(irc) - .getUnificatedDustStack(r); - } - } - - // Adds a circuit - if ((mMaterialListSize < 9) && (mMaterialListSize != 0)) { - final ItemStack[] components_NoCircuit = components; - // Builds me an ItemStack[] of the materials. - With a circuit - components = new ItemStack[components_NoCircuit.length + 1]; - for (int fr = 0; fr < components.length; fr++) { - if (fr == 0) { - components[0] = circuitGT; - } else { - components[fr] = components_NoCircuit[fr - 1]; - } - } - Logger.WARNING( - "[BAS] Should have added a circuit. mMaterialListSize: " + mMaterialListSize - + " | circuit: " - + components[0].getDisplayName()); - } else { - Logger.WARNING("[BAS] Did not add a circuit. mMaterialListSize: " + mMaterialListSize); - } - - // Set Fluid output - fluidAmount = 144 * inputStackCount; - - Logger.WARNING( - "[BAS] Adding an Alloy Blast Smelter Recipe for " + M.getLocalizedName() - + " using it's compound dusts. This material has " - + inputStackCount - + " parts. Gives " - + fluidAmount - + "L of molten metal."); - Logger.WARNING("[BAS] tMaterial.length: " + components.length + "."); - for (int das = 0; das < components.length; das++) { - if (components[das] != null) { - Logger.WARNING( - "[BAS] tMaterial[" + das - + "]: " - + components[das].getDisplayName() - + " Meta: " - + components[das].getItemDamage() - + ", Amount: " - + components[das].stackSize); - } - } - - // Adds Recipe - GT_RecipeBuilder builder = GT_Values.RA.stdBuilder(); - List inputs = new ArrayList<>(Arrays.asList(components)); - inputs.removeIf(Objects::isNull); - components = inputs.toArray(new ItemStack[0]); - - builder = builder.itemInputs(components); - if (componentsFluid != null) { - builder.fluidInputs(componentsFluid); - } - builder.fluidOutputs(M.getFluidStack(fluidAmount)); - - if (M.requiresBlastFurnace()) { - builder.eut(aVoltage); - } else { - builder.eut(aVoltage / 2); - } - builder.duration(duration) - .addTo(alloyBlastSmelterRecipes); - Logger.WARNING("[BAS] Success."); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelterGT_GTNH.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelterGT_GTNH.java deleted file mode 100644 index 0ac39d39bc..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_BlastSmelterGT_GTNH.java +++ /dev/null @@ -1,252 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import org.apache.commons.lang3.ArrayUtils; - -import gregtech.api.enums.GT_Values; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.minecraft.ItemStackData; -import gtPlusPlus.api.recipe.GTPPRecipeCategories; -import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeGen_BlastSmelterGT_GTNH { - - private static Map mCachedIngotToFluidRegistry = new HashMap<>(); - private static Map mCachedHotToColdRegistry = new HashMap<>(); - - private static synchronized void setIngotToFluid(final ItemStackData stack, final FluidStack fluid) { - if (stack != null && fluid != null) { - mCachedIngotToFluidRegistry.put(stack.getUniqueDataIdentifier(), fluid); - } - } - - private static synchronized void setHotToCold(final ItemStackData hot, final ItemStackData cold) { - if (hot != null && cold != null) { - mCachedHotToColdRegistry.put(hot.getUniqueDataIdentifier(), cold.getUniqueDataIdentifier()); - } - } - - private static synchronized FluidStack getFluidFromIngot(final ItemStackData ingot) { - ItemStackData h = ingot; - if (mCachedIngotToFluidRegistry.containsKey(h.getUniqueDataIdentifier())) { - Logger.MACHINE_INFO("[ABS] mCachedIngotToFluidRegistry contains Output Ingot."); - return mCachedIngotToFluidRegistry.get(h.getUniqueDataIdentifier()); - } - if (mCachedHotToColdRegistry.containsKey(h.getUniqueDataIdentifier())) { - Logger.MACHINE_INFO("[ABS] mCachedHotToColdRegistry contains Output Ingot."); - return mCachedIngotToFluidRegistry.get(mCachedHotToColdRegistry.get(h.getUniqueDataIdentifier())); - } - Logger.MACHINE_INFO("[ABS] Neither Cache contains Output Ingot."); - return null; - } - - private static boolean isValid(final ItemStack[] inputs, final ItemStack outputs[], final FluidStack[] fluidIn, - final FluidStack fluidOut) { - if (inputs != null && outputs != null - && fluidIn != null - && fluidOut != null - && inputs.length > 0 - && outputs.length > 0) { - return true; - } - return false; - } - - public static synchronized boolean generateGTNHBlastSmelterRecipesFromEBFList() { - - // Make a counting object - int mSuccess = 0; - - Logger.INFO("[ABS] Starting recipe generation based on EBF recipe map."); - Logger.INFO("[ABS] Caching Ingots and their Molten fluid.."); - // Ingots/Dusts -> Fluids - for (GT_Recipe x : RecipeMaps.fluidExtractionRecipes.getAllRecipes()) { - ItemStack validInput = null; - FluidStack validOutput = null; - // If there aren't both non empty inputs and outputs, we skip - if (ArrayUtils.isEmpty(x.mInputs) || ArrayUtils.isEmpty(x.mFluidOutputs)) { - continue; - } - - for (int tag : OreDictionary.getOreIDs(x.mInputs[0])) { - String oreName = OreDictionary.getOreName(tag) - .toLowerCase(); - String mType = "ingot"; - if (oreName.startsWith(mType) && !oreName.contains("double") - && !oreName.contains("triple") - && !oreName.contains("quad") - && !oreName.contains("quintuple")) { - validInput = x.mInputs[0]; - } - } - - validOutput = x.mFluidOutputs[0]; - - if (validInput != null) { - ItemStackData R = new ItemStackData(validInput); - setIngotToFluid(R, validOutput); - Logger.MACHINE_INFO( - "[ABS][I2F] Cached " + validInput.getDisplayName() - + " to " - + validOutput.getLocalizedName() - + ". Stored Under ID of " - + R.getUniqueDataIdentifier()); - } - } - - Logger.INFO("[ABS] Caching Ingots and their Hot form..."); - // Hot Ingots -> Cold Ingots - for (GT_Recipe x : RecipeMaps.vacuumFreezerRecipes.getAllRecipes()) { - ItemStack validInput = null; - ItemStack validOutput = null; - // If we the input is an ingot and it and the output are valid, map it to cache. - if (ArrayUtils.isNotEmpty(x.mInputs) && x.mInputs[0] != null) { - validInput = x.mInputs[0]; - } - if (ArrayUtils.isNotEmpty(x.mOutputs) && x.mOutputs[0] != null) { - validOutput = x.mOutputs[0]; - } - if (validInput != null && validOutput != null) { - ItemStackData R1 = new ItemStackData(validInput); - ItemStackData R2 = new ItemStackData(validOutput); - setHotToCold(R1, R2); - Logger.MACHINE_INFO( - "[ABS][H2C] Cached " + validInput.getDisplayName() - + " to " - + validOutput.getDisplayName() - + ". Stored Under ID of " - + R1.getUniqueDataIdentifier() - + ", links to ID " - + R2.getUniqueDataIdentifier()); - } - } - - Logger.INFO("[ABS] Generating recipes based on existing EBF recipes."); - // Okay, so now lets Iterate existing EBF recipes. - for (GT_Recipe x : RecipeMaps.blastFurnaceRecipes.getAllRecipes()) { - ItemStack[] inputs, outputs; - FluidStack[] inputsF; - int voltage, time, special; - boolean enabled; - inputs = x.mInputs.clone(); - outputs = x.mOutputs.clone(); - inputsF = x.mFluidInputs.clone(); - voltage = x.mEUt; - time = x.mDuration; - enabled = x.mEnabled; - special = x.mSpecialValue; - - // continue to next recipe if the Temp is too high. - if (special > 3600) { - Logger.MACHINE_INFO("[ABS] Skipping ABS addition for GTNH due to temp."); - continue; - } else { - 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 EBF 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)) { - // Boolean to decide whether or not to create a new circuit later - boolean circuitFound = false; - - // Build correct input stack - ArrayList aTempList = new ArrayList<>(); - for (ItemStack recipeItem : inputs) { - if (ItemUtils.isControlCircuit(recipeItem)) { - circuitFound = true; - } - aTempList.add(recipeItem); - } - - inputs = aTempList.toArray(new ItemStack[aTempList.size()]); - int inputLength = inputs.length; - // If no circuit was found, increase array length by 1 to add circuit at newInput[0] - if (!circuitFound) { - inputLength++; - } - - ItemStack[] newInput = new ItemStack[inputLength]; - - int l = 0; - // If no circuit was found, add a circuit here - if (!circuitFound) { - l = 1; - newInput[0] = GT_Utility.getIntegratedCircuit(inputs.length); - } - - for (ItemStack y : inputs) { - newInput[l++] = y; - } - - GT_Values.RA.stdBuilder() - .itemInputs(newInput) - .fluidInputs(inputsF) - .fluidOutputs(mMoltenStack) - .duration(MathUtils.roundToClosestInt(time * 0.8)) - .eut(voltage) - .recipeCategory( - inputLength <= 2 ? GTPPRecipeCategories.absNonAlloyRecipes - : GTPPRecipeMaps.alloyBlastSmelterRecipes.getDefaultRecipeCategory()) - .addTo(GTPPRecipeMaps.alloyBlastSmelterRecipes); - } else { - if (!enabled) { - Logger.MACHINE_INFO("[ABS] Failure. EBF 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."); - } - } - } - } - } - - Logger.INFO("[ABS] Processed " + mSuccess + " recipes."); - return mSuccess > 0; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_DustGeneration.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_DustGeneration.java deleted file mode 100644 index 028149eccd..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_DustGeneration.java +++ /dev/null @@ -1,471 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.recipe.RecipeMaps.packagerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.material.MaterialStack; -import gtPlusPlus.core.material.state.MaterialState; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.RecipeUtils; - -public class RecipeGen_DustGeneration extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_DustGeneration(final Material M) { - this(M, false); - } - - public RecipeGen_DustGeneration(final Material M, final boolean O) { - this.toGenerate = M; - this.disableOptional = O; - mRecipeGenMap.add(this); - final ItemStack normalDust = M.getDust(1); - final ItemStack smallDust = M.getSmallDust(1); - final ItemStack tinyDust = M.getTinyDust(1); - if (tinyDust != null && normalDust != null) { - if (RecipeUtils.addShapedRecipe( - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - normalDust)) { - Logger.INFO("9 Tiny dust to 1 Dust Recipe: " + M.getLocalizedName() + " - Success"); - } else { - Logger.INFO("9 Tiny dust to 1 Dust Recipe: " + M.getLocalizedName() + " - Failed"); - } - - if (RecipeUtils - .addShapedRecipe(normalDust, null, null, null, null, null, null, null, null, M.getTinyDust(9))) { - Logger.INFO("9 Tiny dust from 1 Recipe: " + M.getLocalizedName() + " - Success"); - } else { - Logger.INFO("9 Tiny dust from 1 Recipe: " + M.getLocalizedName() + " - Failed"); - } - } - - if (smallDust != null && normalDust != null) { - if (RecipeUtils.addShapedRecipe( - smallDust, - smallDust, - null, - smallDust, - smallDust, - null, - null, - null, - null, - normalDust)) { - Logger.INFO("4 Small dust to 1 Dust Recipe: " + M.getLocalizedName() + " - Success"); - } else { - Logger.INFO("4 Small dust to 1 Dust Recipe: " + M.getLocalizedName() + " - Failed"); - } - if (RecipeUtils - .addShapedRecipe(null, normalDust, null, null, null, null, null, null, null, M.getSmallDust(4))) { - Logger.INFO("4 Small dust from 1 Dust Recipe: " + M.getLocalizedName() + " - Success"); - } else { - Logger.INFO("4 Small dust from 1 Dust Recipe: " + M.getLocalizedName() + " - Failed"); - } - } - } - - @Override - public void run() { - generateRecipes(this.toGenerate, this.disableOptional); - } - - private void generateRecipes(final Material material, final boolean disableOptional) { - - Logger.INFO("Generating Shaped Crafting recipes for " + material.getLocalizedName()); - - final ItemStack normalDust = material.getDust(1); - final ItemStack smallDust = material.getSmallDust(1); - final ItemStack tinyDust = material.getTinyDust(1); - - final ItemStack[] inputStacks = material.getMaterialComposites(); - final ItemStack outputStacks = material.getDust(material.smallestStackSizeWhenProcessing); - - // Macerate blocks back to dusts. - final ItemStack materialBlock = material.getBlock(1); - final ItemStack materialFrameBox = material.getFrameBox(1); - - if (ItemUtils.checkForInvalidItems(materialBlock)) { - RA.stdBuilder() - .itemInputs(materialBlock) - .itemOutputs(material.getDust(9)) - .eut(2) - .duration(20 * SECONDS) - .addTo(maceratorRecipes); - } - - if (ItemUtils.checkForInvalidItems(materialFrameBox)) { - RA.stdBuilder() - .itemInputs(materialFrameBox) - .itemOutputs(material.getDust(2)) - .eut(2) - .duration(20 * SECONDS) - .addTo(maceratorRecipes); - } - - if (ItemUtils.checkForInvalidItems(smallDust) && ItemUtils.checkForInvalidItems(tinyDust)) { - generatePackagerRecipes(material); - } - - ItemStack ingot = material.getIngot(1); - if (ItemUtils.checkForInvalidItems(normalDust) && ItemUtils.checkForInvalidItems(ingot)) { - addFurnaceRecipe(material); - addMacerationRecipe(material); - } - - // Is this a composite? - if ((inputStacks == null) || disableOptional) { - return; - } - - // Is this a composite? - Logger.WARNING("mixer length: " + inputStacks.length); - if (!((inputStacks.length != 0) && (inputStacks.length <= 4))) { - return; - } - // Log Input items - Logger.WARNING(ItemUtils.getArrayStackNames(inputStacks)); - final long[] inputStackSize = material.vSmallestRatio; - Logger.WARNING("mixer is stacksizeVar null? " + (inputStackSize != null)); - // Is smallest ratio invalid? - if (inputStackSize == null) { - return; - } - // set stack sizes on an input ItemStack[] - for (short x = 0; x < inputStacks.length; x++) { - if ((inputStacks[x] != null) && (inputStackSize[x] != 0)) { - inputStacks[x].stackSize = (int) inputStackSize[x]; - } - } - // Relog input values, with stack sizes - Logger.WARNING(ItemUtils.getArrayStackNames(inputStacks)); - - // Get us four ItemStacks to input into the mixer - ItemStack[] input = new ItemStack[4]; - - input[0] = (inputStacks.length >= 1) ? ((inputStacks[0] == null) ? null : inputStacks[0]) : null; - input[1] = (inputStacks.length >= 2) ? ((inputStacks[1] == null) ? null : inputStacks[1]) : null; - input[2] = (inputStacks.length >= 3) ? ((inputStacks[2] == null) ? null : inputStacks[2]) : null; - input[3] = (inputStacks.length >= 4) ? ((inputStacks[3] == null) ? null : inputStacks[3]) : null; - - if (inputStacks.length == 1) { - input[1] = input[0]; - input[0] = GT_Utility.getIntegratedCircuit(inputStacks.length + 10); - } else if (inputStacks.length == 2) { - input[2] = input[1]; - input[1] = input[0]; - input[0] = GT_Utility.getIntegratedCircuit(inputStacks.length + 10); - - } else if (inputStacks.length == 3) { - input[3] = input[2]; - input[2] = input[1]; - input[1] = input[0]; - input[0] = GT_Utility.getIntegratedCircuit(inputStacks.length + 10); - } - - // Add mixer Recipe - FluidStack oxygen = GT_Values.NF; - if (material.getComposites() != null) { - for (final MaterialStack x : material.getComposites()) { - if (material.getComposites() - .isEmpty()) { - continue; - } - if (x == null) { - continue; - } - if (x.getStackMaterial() == null) { - continue; - } - - if (x.getStackMaterial() - .getDust(1) != null) { - continue; - } - - if (x.getStackMaterial() - .getState() != MaterialState.SOLID - && x.getStackMaterial() - .getState() != MaterialState.ORE - && x.getStackMaterial() - .getState() != MaterialState.PLASMA) { - oxygen = x.getStackMaterial() - .getFluidStack(1000); - break; - } - } - } - - input = ItemUtils.cleanItemStackArray(input); - - // Add mixer Recipe - List inputs = new ArrayList<>(Arrays.asList(input)); - inputs.removeIf(Objects::isNull); - - if (oxygen == null) { - GT_Values.RA.stdBuilder() - .itemInputs(inputs.toArray(new ItemStack[0])) - .itemOutputs(outputStacks) - .duration((int) Math.max(material.getMass() * 2L * 1, 1)) - .eut(material.vVoltageMultiplier) - .addTo(mixerRecipes); - } else { - GT_Values.RA.stdBuilder() - .itemInputs(inputs.toArray(new ItemStack[0])) - .itemOutputs(outputStacks) - .fluidInputs(oxygen) - .duration((int) Math.max(material.getMass() * 2L * 1, 1)) - .eut(material.vVoltageMultiplier) - .addTo(mixerRecipes); - } - - Logger.WARNING("Dust Mixer Recipe: " + material.getLocalizedName() + " - Success"); - } - - public static boolean addMixerRecipe_Standalone(final Material material) { - final ItemStack[] inputStacks = material.getMaterialComposites(); - final ItemStack outputStacks = material.getDust(material.smallestStackSizeWhenProcessing); - // Is this a composite? - if (inputStacks == null) { - Logger.WARNING("InputStacks == NUll - " + material.getLocalizedName()); - return false; - } - - // Is this a composite? - Logger.WARNING("mixer length: " + inputStacks.length); - if (!((inputStacks.length >= 1) && (inputStacks.length <= 4))) { - Logger.WARNING("InputStacks is out range 1-4 - " + material.getLocalizedName()); - return false; - } - // Log Input items - Logger.WARNING(ItemUtils.getArrayStackNames(inputStacks)); - final long[] inputStackSize = material.vSmallestRatio; - Logger.WARNING("mixer is stacksizeVar not null? " + (inputStackSize != null)); - - // Is smallest ratio invalid? - if (inputStackSize == null) { - Logger.WARNING("inputStackSize == NUll - " + material.getLocalizedName()); - return true; - } - - // set stack sizes on an input ItemStack[] - for (short x = 0; x < inputStacks.length; x++) { - if ((inputStacks[x] != null) && (inputStackSize[x] != 0)) { - inputStacks[x].stackSize = (int) inputStackSize[x]; - } - } - - // Relog input values, with stack sizes - Logger.WARNING(ItemUtils.getArrayStackNames(inputStacks)); - - // Get us four ItemStacks to input into the mixer - ItemStack input1, input2, input3, input4; - input1 = inputStacks[0]; - input2 = (inputStacks.length >= 2) ? (input2 = (inputStacks[1] == null) ? null : inputStacks[1]) : null; - input3 = (inputStacks.length >= 3) ? (input3 = (inputStacks[2] == null) ? null : inputStacks[2]) : null; - input4 = (inputStacks.length >= 4) ? (input4 = (inputStacks[3] == null) ? null : inputStacks[3]) : null; - - if (inputStacks.length == 1) { - input2 = input1; - input1 = GT_Utility.getIntegratedCircuit(20); - } else if (inputStacks.length == 2) { - input3 = input2; - input2 = input1; - input1 = GT_Utility.getIntegratedCircuit(20); - - } else if (inputStacks.length == 3) { - input4 = input3; - input3 = input2; - input2 = input1; - input1 = GT_Utility.getIntegratedCircuit(20); - } - - // Add mixer Recipe - FluidStack oxygen = GT_Values.NF; - if (material.getComposites() != null) { - int compSlot = 0; - for (final MaterialStack x : material.getComposites()) { - - if (material.getComposites() - .isEmpty()) { - compSlot++; - continue; - } - if (x == null) { - compSlot++; - continue; - } - - if (x.getStackMaterial() == null) { - compSlot++; - continue; - } - - if (x.getStackMaterial() - .getDust(1) == null) { - compSlot++; - continue; - } - - MaterialState f = x.getStackMaterial() - .getState(); - if (f == MaterialState.GAS || f == MaterialState.LIQUID - || f == MaterialState.PURE_LIQUID - || f == MaterialState.PURE_GAS) { - oxygen = x.getStackMaterial() - .getFluidStack((int) (material.vSmallestRatio[compSlot] * 1000)); - } - compSlot++; - } - } - - // Add mixer Recipe - try { - if (oxygen == null) { - GT_Values.RA.stdBuilder() - .itemInputs(input1, input2, input3, input4) - .itemOutputs(outputStacks) - .duration((int) Math.max(material.getMass() * 2L * 1, 1)) - .eut(material.vVoltageMultiplier) - .addTo(mixerRecipes); - } else { - GT_Values.RA.stdBuilder() - .itemInputs(input1, input2, input3, input4) - .itemOutputs(outputStacks) - .fluidInputs(oxygen) - .duration((int) Math.max(material.getMass() * 2L * 1, 1)) - .eut(material.vVoltageMultiplier) - .addTo(mixerRecipes); - } - - Logger.WARNING("Dust Mixer Recipe: " + material.getLocalizedName() + " - Success"); - - } catch (Throwable t) { - t.printStackTrace(); - } - return true; - } - - public static boolean generatePackagerRecipes(Material aMatInfo) { - // Small Dust - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(4, aMatInfo.getSmallDust(4)), ItemList.Schematic_Dust.get(0)) - .itemOutputs(aMatInfo.getDust(1)) - .duration(5 * SECONDS) - .eut(4) - .addTo(packagerRecipes); - - // Tiny Dust - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(4, aMatInfo.getTinyDust(9)), ItemList.Schematic_Dust.get(0)) - .itemOutputs(aMatInfo.getDust(1)) - .duration(5 * SECONDS) - .eut(4) - .addTo(packagerRecipes); - return true; - } - - private void addMacerationRecipe(Material aMatInfo) { - try { - Logger.MATERIALS("Adding Maceration recipe for " + aMatInfo.getLocalizedName() + " Ingot -> Dusts"); - RA.stdBuilder() - .itemInputs(aMatInfo.getIngot(1)) - .itemOutputs(aMatInfo.getDust(1)) - .eut(2) - .duration(20 * SECONDS) - .addTo(maceratorRecipes); - } catch (Throwable t) { - t.printStackTrace(); - } - } - - private void addFurnaceRecipe(Material aMatInfo) { - - ItemStack aDust = aMatInfo.getDust(1); - ItemStack aOutput; - try { - if (aMatInfo.requiresBlastFurnace()) { - aOutput = aMatInfo.getHotIngot(1); - if (ItemUtils.checkForInvalidItems(aOutput)) { - if (addBlastFurnaceRecipe(aMatInfo, aDust, aOutput, aMatInfo.getMeltingPointK())) { - Logger - .MATERIALS("Successfully added a blast furnace recipe for " + aMatInfo.getLocalizedName()); - } else { - Logger.MATERIALS("Failed to add a blast furnace recipe for " + aMatInfo.getLocalizedName()); - } - } else { - Logger.MATERIALS("Failed to add a blast furnace recipe for " + aMatInfo.getLocalizedName()); - } - } else { - aOutput = aMatInfo.getIngot(1); - if (ItemUtils.checkForInvalidItems(aOutput)) { - if (GT_ModHandler.addSmeltingAndAlloySmeltingRecipe(aDust, aOutput, false)) { - Logger.MATERIALS("Successfully added a furnace recipe for " + aMatInfo.getLocalizedName()); - } else { - Logger.MATERIALS("Failed to add a furnace recipe for " + aMatInfo.getLocalizedName()); - } - } - } - } catch (Throwable t) { - t.printStackTrace(); - } - } - - private boolean addBlastFurnaceRecipe(Material aMatInfo, final ItemStack input1, final ItemStack output1, - final int tempRequired) { - - int timeTaken; - if (aMatInfo.vTier <= 4) { - timeTaken = 25 * aMatInfo.vTier * 10; - } else { - timeTaken = 125 * aMatInfo.vTier * 10; - } - - long aVoltage = aMatInfo.vVoltageMultiplier; - - GT_Values.RA.stdBuilder() - .itemInputs(input1) - .itemOutputs(output1) - .duration(timeTaken) - .eut(aVoltage) - .metadata(COIL_HEAT, tempRequired) - .addTo(blastFurnaceRecipes); - return true; - - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Extruder.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Extruder.java deleted file mode 100644 index c559a77e23..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Extruder.java +++ /dev/null @@ -1,159 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.recipe.RecipeMaps.extruderRecipes; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import java.util.HashSet; -import java.util.Set; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeGen_Extruder extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_Extruder(final Material M) { - this.toGenerate = M; - mRecipeGenMap.add(this); - } - - @Override - public void run() { - generateRecipes(this.toGenerate); - } - - private void generateRecipes(final Material material) { - - final ItemStack itemIngot = material.getIngot(1); - final ItemStack itemPlate = material.getPlate(1); - final ItemStack itemGear = material.getGear(1); - - final ItemStack shape_Plate = ItemList.Shape_Extruder_Plate.get(0); - final ItemStack shape_Ring = ItemList.Shape_Extruder_Ring.get(0); - final ItemStack shape_Gear = ItemList.Shape_Extruder_Gear.get(0); - final ItemStack shape_Rod = ItemList.Shape_Extruder_Rod.get(0); - final ItemStack shape_Bolt = ItemList.Shape_Extruder_Bolt.get(0); - final ItemStack shape_Block = ItemList.Shape_Extruder_Block.get(0); - final ItemStack shape_Ingot = ItemList.Shape_Extruder_Ingot.get(0); - - Logger.WARNING("Generating Extruder recipes for " + material.getLocalizedName()); - - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) - && ItemUtils.checkForInvalidItems(material.getBlock(1))) { - // Ingot Recipe - GT_Values.RA.stdBuilder() - .itemInputs(material.getBlock(1), shape_Ingot) - .itemOutputs(material.getIngot(9)) - .duration((int) Math.max(material.getMass() * 2L * 1, 1)) - .eut(material.vVoltageMultiplier) - .addTo(extruderRecipes); - - Logger.WARNING("Extruder Ingot Recipe: " + material.getLocalizedName() + " - Success"); - - // Block Recipe - GT_Values.RA.stdBuilder() - .itemInputs(material.getIngot(9), shape_Block) - .itemOutputs(material.getBlock(1)) - .duration((int) Math.max(material.getMass() * 2L * 1, 1)) - .eut(material.vVoltageMultiplier) - .addTo(extruderRecipes); - - Logger.WARNING("Extruder Block Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Plate Recipe - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) - && ItemUtils.checkForInvalidItems(material.getPlate(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(itemIngot, shape_Plate) - .itemOutputs(itemPlate) - .duration(10 * TICKS) - .eut(material.vVoltageMultiplier) - .addTo(extruderRecipes); - - Logger.WARNING("Extruder Plate Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Ring Recipe - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) - && ItemUtils.checkForInvalidItems(material.getRing(1))) { - if (!material.isRadioactive) { - GT_Values.RA.stdBuilder() - .itemInputs(itemIngot, shape_Ring) - .itemOutputs(material.getRing(4)) - .duration((int) Math.max(material.getMass() * 2L * 1, 1)) - .eut(material.vVoltageMultiplier) - .addTo(extruderRecipes); - - Logger.WARNING("Extruder Ring Recipe: " + material.getLocalizedName() + " - Success"); - } - } - - // Gear Recipe - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) && ItemUtils.checkForInvalidItems(material.getGear(1))) - if (!material.isRadioactive) { - GT_Values.RA.stdBuilder() - .itemInputs(material.getIngot(4), shape_Gear) - .itemOutputs(itemGear) - .duration((int) Math.max(material.getMass() * 5L, 1)) - .eut(material.vVoltageMultiplier) - .addTo(extruderRecipes); - - Logger.WARNING("Extruder Gear Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Rod Recipe - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) - && ItemUtils.checkForInvalidItems(material.getRod(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(itemIngot, shape_Rod) - .itemOutputs(material.getRod(2)) - .duration((int) Math.max(material.getMass() * 2L * 1, 1)) - .eut(material.vVoltageMultiplier) - .addTo(extruderRecipes); - - Logger.WARNING("Extruder Rod Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Bolt Recipe - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) && ItemUtils.checkForInvalidItems(material.getBolt(1))) - if (!material.isRadioactive) { - GT_Values.RA.stdBuilder() - .itemInputs(itemIngot, shape_Bolt) - .itemOutputs(material.getBolt(8)) - .duration((int) Math.max(material.getMass() * 2L * 1, 1)) - .eut(material.vVoltageMultiplier) - .addTo(extruderRecipes); - - Logger.WARNING("Extruder Bolt Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Rotor Recipe - // Shape_Extruder_Rotor - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) - && ItemUtils.checkForInvalidItems(material.getRotor(1))) { - - GT_Values.RA.stdBuilder() - .itemInputs(material.getIngot(5), ItemList.Shape_Extruder_Rotor.get(0)) - .itemOutputs(material.getRotor(1)) - .duration((int) Math.max(material.getMass() * 5L * 1, 1)) - .eut(material.vVoltageMultiplier) - .addTo(extruderRecipes); - - Logger.WARNING("Extruder Rotor Recipe: " + material.getLocalizedName() + " - Success"); - } - - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_FluidCanning.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_FluidCanning.java deleted file mode 100644 index fb6dc807ef..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_FluidCanning.java +++ /dev/null @@ -1,222 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import java.util.HashSet; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.util.GT_Recipe; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; - -public class RecipeGen_FluidCanning implements Runnable { - - public static void init() { - FluidCanningRunnableHandler x = new FluidCanningRunnableHandler(); - x.run(); - } - - private static class FluidCanningRunnableHandler implements RunnableWithInfo { - - @Override - public void run() { - mHasRun = true; - for (RecipeGen_FluidCanning aRecipe : mCache) { - aRecipe.run(); - } - } - - @Override - public String getInfoData() { - return "Fluid Canning Recipes"; - } - } - - private static boolean mHasRun = false; - - private static HashSet mCache = new HashSet<>(); - - private static void addRunnableToRecipeCache(RecipeGen_FluidCanning r) { - if (mHasRun) { - CORE.crash(); - } - mCache.add(r); - } - - protected boolean disableOptional; - - private final GT_Recipe recipe; - private final boolean isValid; - - public boolean valid() { - return isValid; - } - - // Alternative Constructor - public RecipeGen_FluidCanning(boolean aExtracting, ItemStack aEmpty, ItemStack aFull, FluidStack aFluidIn, - FluidStack aFluidOut, Integer aDuration, Integer aEUt) { - ItemStack aInput; - ItemStack aOutput; - FluidStack aFluidInput; - FluidStack aFluidOutput; - - // Safety check on the duration - if (aDuration == null || aDuration <= 0) { - aDuration = (aFluidIn != null) ? (aFluidIn.amount / 62) - : ((aFluidOut != null) ? (aFluidOut.amount / 62) : 10); - } - - // Safety check on the EU - if (aEUt == null || aEUt <= 0) { - if (aExtracting) { - aEUt = 2; - } else { - aEUt = 1; - } - } - - // Set Item stacks correctly, invert if extraction recipe. - if (aExtracting) { - aInput = aFull; - aOutput = aEmpty; - aFluidInput = GT_Values.NF; - aFluidOutput = aFluidIn; - } else { - aInput = aEmpty; - aOutput = aFull; - aFluidInput = aFluidIn; - aFluidOutput = aFluidOut != null ? aFluidOut : GT_Values.NF; - } - - // Check validity - - GT_Recipe aRecipe = new GT_Recipe( - true, - new ItemStack[] { aInput }, - new ItemStack[] { aOutput }, - null, - new int[] { 10000 }, - new FluidStack[] { aFluidInput }, - new FluidStack[] { aFluidOutput }, - aDuration, - aEUt, - 0); - - // Check Valid - boolean aTempValidityCheck = false; - // Logger.INFO("Validity Check."); - if (aExtracting) { - Logger.INFO("Extracting."); - if (aInput != null && aFluidOutput != null) { - // Logger.INFO("Pass."); - aTempValidityCheck = true; - } - } else { - // Logger.INFO("Canning."); - if (aInput != null && aOutput != null && (aFluidInput != null || aFluidOutput != null)) { - // Logger.INFO("Pass."); - aTempValidityCheck = true; - } - } - - if (aTempValidityCheck) { - // Valid Recipe - recipe = aRecipe; - disableOptional = aExtracting; - isValid = true; - addRunnableToRecipeCache(this); - } else { - // Logger.INFO("Failed Validity Check."); - isValid = false; - disableOptional = aExtracting; - aRecipe.mEnabled = false; - aRecipe.mHidden = true; - recipe = null; - } - } - - @Override - public void run() { - Logger.INFO("Processing Recipe with Hash: " + recipe.hashCode()); - generateRecipes(); - } - - private void generateRecipes() { - if (isValid && recipe != null) { - if (this.disableOptional) { - addFluidExtractionRecipe(recipe); - } else { - addFluidCannerRecipe(recipe); - } - } - } - - private void addFluidExtractionRecipe(GT_Recipe aRecipe) { - CORE.crash(); - Logger.INFO( - "[FE-Debug] " + aRecipe.mFluidOutputs[0].amount - + "L of " - + aRecipe.mFluidOutputs[0].getLocalizedName() - + " fluid extractor from 1 " - + aRecipe.mInputs[0].getDisplayName() - + " - Success. Time: " - + aRecipe.mDuration - + ", Voltage: " - + aRecipe.mEUt); - int aCount1 = getMapSize(RecipeMaps.fluidExtractionRecipes); - int aCount2 = aCount1; - RecipeMaps.fluidExtractionRecipes.addRecipe(aRecipe); - aCount1 = getMapSize(RecipeMaps.fluidExtractionRecipes); - if (aCount1 <= aCount2) { - Logger.INFO( - "[ERROR] Failed adding Extraction recipe for " + ItemUtils.getArrayStackNames(aRecipe.mInputs) - + ", " - + ItemUtils.getArrayStackNames(aRecipe.mOutputs) - + ", " - + ItemUtils.getArrayStackNames(aRecipe.mFluidInputs) - + ", " - + ItemUtils.getArrayStackNames(aRecipe.mFluidOutputs)); - dumpStack(); - } - } - - private void addFluidCannerRecipe(GT_Recipe aRecipe) { - boolean result; - int aCount1 = getMapSize(RecipeMaps.fluidCannerRecipes); - int aCount2 = aCount1; - RecipeMaps.fluidCannerRecipes.addRecipe(aRecipe); - aCount1 = getMapSize(RecipeMaps.fluidCannerRecipes); - if (aCount1 <= aCount2) { - Logger.INFO( - "[ERROR] Failed adding Canning recipe for " + ItemUtils.getArrayStackNames(aRecipe.mInputs) - + ", " - + ItemUtils.getArrayStackNames(aRecipe.mOutputs) - + ", " - + ItemUtils.getArrayStackNames(aRecipe.mFluidInputs) - + ", " - + ItemUtils.getArrayStackNames(aRecipe.mFluidOutputs)); - dumpStack(); - } - } - - private void dumpStack() { - int parents = 2; - for (int i = 0; i < 6; i++) { - Logger.INFO( - (disableOptional ? "EXTRACTING" : "CANNING") + " DEBUG | " - + (i == 0 ? "Called from: " : "Parent: ") - + ReflectionUtils.getMethodName(i + parents)); - } - } - - private int getMapSize(RecipeMap aMap) { - return aMap.getAllRecipes() - .size(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluids.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluids.java deleted file mode 100644 index 06bb7a48c2..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluids.java +++ /dev/null @@ -1,209 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import java.util.HashSet; -import java.util.Set; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeGen_Fluids extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_Fluids(final Material M) { - this(M, false); - } - - public RecipeGen_Fluids(final Material M, final boolean dO) { - this.toGenerate = M; - this.disableOptional = dO; - mRecipeGenMap.add(this); - } - - @Override - public void run() { - generateRecipes(this.toGenerate, this.disableOptional); - } - - private void generateRecipes(final Material material, final boolean dO) { - - if (material == null) { - return; - } - - // Melting Shapes to fluid - if (material.getFluidStack(1) != null && !material.getFluidStack(1) - .getUnlocalizedName() - .toLowerCase() - .contains("plasma")) { - - // Making Shapes from fluid - - // Ingot - if (ItemUtils.checkForInvalidItems(material.getIngot(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Ingot.get(0)) - .itemOutputs(material.getIngot(1)) - .fluidInputs(material.getFluidStack(144)) - .duration(1 * SECONDS + 12 * TICKS) - .eut(material.vVoltageMultiplier) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING("144l fluid molder for 1 ingot Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Plate - if (ItemUtils.checkForInvalidItems(material.getPlate(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Plate.get(0)) - .itemOutputs(material.getPlate(1)) - .fluidInputs(material.getFluidStack(144)) - .duration(1 * SECONDS + 12 * TICKS) - .eut(material.vVoltageMultiplier) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING("144l fluid molder for 1 plate Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Nugget - if (ItemUtils.checkForInvalidItems(material.getNugget(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Nugget.get(0)) - .itemOutputs(material.getNugget(1)) - .fluidInputs(material.getFluidStack(16)) - .duration(16 * TICKS) - .eut(material.vVoltageMultiplier) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING("16l fluid molder for 1 nugget Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Gears - if (ItemUtils.checkForInvalidItems(material.getGear(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Gear.get(0)) - .itemOutputs(material.getGear(1)) - .fluidInputs(material.getFluidStack(576)) - .duration(6 * SECONDS + 8 * TICKS) - .eut(material.vVoltageMultiplier) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING("576l fluid molder for 1 gear Recipe: " + material.getLocalizedName() + " - Success"); - - } - - // Blocks - if (ItemUtils.checkForInvalidItems(material.getBlock(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Block.get(0)) - .itemOutputs(material.getBlock(1)) - .fluidInputs(material.getFluidStack(144 * 9)) - .duration(14 * SECONDS + 8 * TICKS) - .eut(material.vVoltageMultiplier) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING( - (144 * 9) + "l fluid molder from 1 block Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Rod - if (ItemUtils.checkForInvalidItems(material.getRod(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Rod.get(0)) - .itemOutputs(material.getRod(1)) - .fluidInputs(material.getFluidStack(72)) - .duration(7 * SECONDS + 10 * TICKS) - .eut(material.vVoltageMultiplier) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING( - (144 * 9) + "l fluid molder from 1 rod Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Rod Long - if (ItemUtils.checkForInvalidItems(material.getLongRod(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Rod_Long.get(0)) - .itemOutputs(material.getLongRod(1)) - .fluidInputs(material.getFluidStack(144)) - .duration(15 * SECONDS) - .eut(material.vVoltageMultiplier) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING( - (144 * 9) + "l fluid molder from 1 rod long Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Bolt - if (ItemUtils.checkForInvalidItems(material.getBolt(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Bolt.get(0)) - .itemOutputs(material.getBolt(1)) - .fluidInputs(material.getFluidStack(18)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(material.vVoltageMultiplier) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING( - (144 * 9) + "l fluid molder from 1 bolt Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Screw - if (ItemUtils.checkForInvalidItems(material.getScrew(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Screw.get(0)) - .itemOutputs(material.getScrew(1)) - .fluidInputs(material.getFluidStack(18)) - .duration(2 * SECONDS + 10 * TICKS) - .eut(material.vVoltageMultiplier) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING( - (144 * 9) + "l fluid molder from 1 screw Recipe: " + material.getLocalizedName() + " - Success"); - - } - - // Ring - if (ItemUtils.checkForInvalidItems(material.getRing(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Ring.get(0)) - .itemOutputs(material.getRing(1)) - .fluidInputs(material.getFluidStack(36)) - .duration(5 * SECONDS) - .eut(material.vVoltageMultiplier) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING( - (144 * 9) + "l fluid molder from 1 ring Recipe: " + material.getLocalizedName() + " - Success"); - - } - - // Rotor - if (ItemUtils.checkForInvalidItems(material.getRotor(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Rotor.get(0)) - .itemOutputs(material.getRotor(1)) - .fluidInputs(material.getFluidStack(612)) - .duration(5 * SECONDS) - .eut(material.vVoltageMultiplier) - .addTo(fluidSolidifierRecipes); - - Logger.WARNING( - (144 * 9) + "l fluid molder from 1 rotor Recipe: " + material.getLocalizedName() + " - Success"); - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluorite.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluorite.java deleted file mode 100644 index 8d0ed2ff1d..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Fluorite.java +++ /dev/null @@ -1,271 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; - -import java.util.HashSet; -import java.util.Set; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.material.nuclear.FLUORIDES; -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; - -public class RecipeGen_Fluorite extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_Fluorite(final Material material) { - this.toGenerate = material; - mRecipeGenMap.add(this); - - /** - * Shaped Crafting - */ - RecipeUtils.addShapedRecipe( - CI.craftingToolHammer_Hard, - null, - null, - material.getCrushedPurified(1), - null, - null, - null, - null, - null, - material.getDustPurified(1)); - - RecipeUtils.addShapedRecipe( - CI.craftingToolHammer_Hard, - null, - null, - material.getCrushed(1), - null, - null, - null, - null, - null, - material.getDustImpure(1)); - - RecipeUtils.addShapedRecipe( - CI.craftingToolHammer_Hard, - null, - null, - material.getCrushedCentrifuged(1), - null, - null, - null, - null, - null, - material.getDust(1)); - - final ItemStack normalDust = material.getDust(1); - final ItemStack smallDust = material.getSmallDust(1); - final ItemStack tinyDust = material.getTinyDust(1); - - if (RecipeUtils.addShapedRecipe( - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - normalDust)) { - Logger.WARNING("9 Tiny dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("9 Tiny dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); - } - - if (RecipeUtils - .addShapedRecipe(normalDust, null, null, null, null, null, null, null, null, material.getTinyDust(9))) { - Logger.WARNING("9 Tiny dust from 1 Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("9 Tiny dust from 1 Recipe: " + material.getLocalizedName() + " - Failed"); - } - - if (RecipeUtils - .addShapedRecipe(smallDust, smallDust, null, smallDust, smallDust, null, null, null, null, normalDust)) { - Logger.WARNING("4 Small dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("4 Small dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); - } - - if (RecipeUtils - .addShapedRecipe(null, normalDust, null, null, null, null, null, null, null, material.getSmallDust(4))) { - Logger.WARNING("4 Small dust from 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("4 Small dust from 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); - } - } - - @Override - public void run() { - generateRecipes(this.toGenerate); - } - - public static void generateRecipes(final Material material) { - - int tVoltageMultiplier = MaterialUtils.getVoltageForTier(material.vTier); - - final ItemStack dustStone = ItemUtils.getItemStackOfAmountFromOreDict("dustStone", 1); - - ItemStack tinyDustA = FLUORIDES.FLUORITE.getTinyDust(1); - ItemStack tinyDustB = FLUORIDES.FLUORITE.getTinyDust(1); - ItemStack matDust = FLUORIDES.FLUORITE.getDust(1); - ItemStack matDustA = FLUORIDES.FLUORITE.getDust(1); - - /** - * Package - */ - // Allow ore dusts to be packaged - if (ItemUtils.checkForInvalidItems(material.getSmallDust(1)) - && ItemUtils.checkForInvalidItems(material.getTinyDust(1))) { - RecipeGen_DustGeneration.generatePackagerRecipes(material); - } - - /** - * Macerate - */ - // Macerate ore to Crushed - GT_Values.RA.stdBuilder() - .itemInputs(material.getOre(1)) - .itemOutputs(material.getCrushed(2)) - .duration(20 * SECONDS) - .eut(tVoltageMultiplier / 2) - .addTo(maceratorRecipes); - - Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate ore to Crushed ore'"); - - // Macerate raw ore to Crushed - GT_Values.RA.stdBuilder() - .itemInputs(material.getRawOre(1)) - .itemOutputs(material.getCrushed(2)) - .duration(20 * SECONDS) - .eut(tVoltageMultiplier / 2) - .addTo(maceratorRecipes); - - Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate raw ore to Crushed ore'"); - - // Macerate Centrifuged to Pure Dust - GT_Values.RA.stdBuilder() - .itemInputs(material.getCrushedCentrifuged(1)) - .itemOutputs(matDust, matDustA) - .outputChances(100_00, 10_00) - .duration(20 * SECONDS) - .eut(tVoltageMultiplier / 2) - .addTo(maceratorRecipes); - - Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate Centrifuged ore to Pure Dust'"); - - GT_Values.RA.stdBuilder() - .itemInputs(material.getCrushedPurified(1)) - .itemOutputs(material.getCrushedCentrifuged(1), tinyDustA, dustStone) - .duration(25 * SECONDS) - .eut(48) - .addTo(thermalCentrifugeRecipes); - - Logger.MATERIALS( - "[ThermalCentrifuge] Added Recipe: 'Washed ore to Centrifuged Ore' | Input: " - + material.getCrushedPurified(1) - .getDisplayName() - + " | Outputs: " - + material.getCrushedCentrifuged(1) - .getDisplayName() - + ", " - + tinyDustA.getDisplayName() - + ", " - + dustStone.getDisplayName() - + "."); - - GT_Values.RA.stdBuilder() - .itemInputs(FLUORIDES.FLUORITE.getCrushed(2)) - .itemOutputs( - FLUORIDES.FLUORITE.getCrushedPurified(8), - FLUORIDES.FLUORITE.getDustImpure(4), - FLUORIDES.FLUORITE.getDustPurified(2)) - .outputChances(100_00, 50_00, 10_00) - .fluidInputs(FluidUtils.getFluidStack("hydrogen", 2000)) - .duration(30 * SECONDS) - .eut(240) - .addTo(chemicalBathRecipes); - - /** - * Forge Hammer - */ - - GT_Values.RA.stdBuilder() - .itemInputs(material.getCrushedCentrifuged(1)) - .itemOutputs(matDust) - .duration(10 * TICKS) - .eut(tVoltageMultiplier / 4) - .addTo(hammerRecipes); - - Logger.MATERIALS("[ForgeHammer] Added Recipe: 'Crushed Centrifuged to Pure Dust'"); - - /** - * Centrifuge - */ - // Purified Dust to Clean - GT_Values.RA.stdBuilder() - .itemInputs(material.getDustPurified(1)) - .itemOutputs(matDust, tinyDustA) - .eut(tVoltageMultiplier / 2) - .duration((int) Math.max(1L, material.getMass() * 8L)) - .addTo(centrifugeRecipes); - - Logger.MATERIALS("[Centrifuge] Added Recipe: Purified Dust to Clean Dust"); - - // Impure Dust to Clean - GT_Values.RA.stdBuilder() - .itemInputs(material.getDustImpure(1)) - .itemOutputs(matDust, tinyDustB) - .eut(tVoltageMultiplier / 2) - .duration((int) Math.max(1L, material.getMass() * 8L)) - .addTo(centrifugeRecipes); - - Logger.MATERIALS("[Centrifuge] Added Recipe: Inpure Dust to Clean Dust"); - - // CaF2 + H2SO4 → CaSO4(solid) + 2 HF - FluidStack aGregtechHydro = FluidUtils.getFluidStack("hydrofluoricacid_gt5u", 16000); - if (aGregtechHydro == null) { - aGregtechHydro = FluidUtils.getFluidStack("hydrofluoricacid", 16000); - } - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(5), FLUORIDES.FLUORITE.getDust(37)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumSulfate", 15), - ItemUtils.getItemStackOfAmountFromOreDict("dustSilver", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustGold", 2), - ItemUtils.getItemStackOfAmountFromOreDict("dustTin", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 2)) - .outputChances(100_00, 10_00, 10_00, 30_00, 20_00) - .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 8000)) - .fluidOutputs(aGregtechHydro) - .eut(240) - .duration(10 * MINUTES) - .addTo(chemicalDehydratorRecipes); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MaterialProcessing.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MaterialProcessing.java deleted file mode 100644 index dc7a912cd2..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MaterialProcessing.java +++ /dev/null @@ -1,313 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.api.objects.data.Pair; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.material.MaterialStack; -import gtPlusPlus.core.material.state.MaterialState; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeGen_MaterialProcessing extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_MaterialProcessing(final Material M) { - this(M, false); - } - - public RecipeGen_MaterialProcessing(final Material M, final boolean O) { - this.toGenerate = M; - this.disableOptional = O; - mRecipeGenMap.add(this); - } - - @Override - public void run() { - generateRecipes(this.toGenerate, this.disableOptional); - } - - private void generateRecipes(final Material material, final boolean disableOptional) { - if (disableOptional) { - return; - } - - if (material.getMaterialComposites().length > 1) { - Logger.MATERIALS("[Recipe Generator Debug] [" + material.getLocalizedName() + "]"); - final int tVoltageMultiplier = material.vVoltageMultiplier; - int[] partSizes = new int[99]; - if (material.vSmallestRatio != null) { - partSizes = new int[material.vSmallestRatio.length]; - for (int hu = 0; hu < material.vSmallestRatio.length; hu++) { - partSizes[hu] = (int) material.vSmallestRatio[hu]; - } - } - AutoMap> componentMap = new AutoMap<>(); - int alnsnfds = 0; - for (MaterialStack r : material.getComposites()) { - if (r != null) { - componentMap.put(new Pair<>(partSizes[alnsnfds], r.getStackMaterial())); - } - alnsnfds++; - } - - /** - * Centrifuge - */ - - // Process Dust - if (componentMap.size() > 0 && componentMap.size() <= 6) { - ItemStack mInternalOutputs[] = new ItemStack[6]; - int mChances[] = new int[6]; - int mCellCount = 0; - - int mTotalCount = 0; - - int mCounter = 0; - for (Pair f : componentMap) { - if (f.getValue() - .getState() != MaterialState.SOLID) { - Logger.MATERIALS( - "[Centrifuge] Found Fluid Component, adding " + f.getKey() - + " cells of " - + f.getValue() - .getLocalizedName() - + "."); - mInternalOutputs[mCounter++] = f.getValue() - .getCell(f.getKey()); - mCellCount += f.getKey(); - mTotalCount += f.getKey(); - Logger.MATERIALS( - "[Centrifuge] In total, adding " + mCellCount - + " cells for " - + material.getLocalizedName() - + " processing."); - } else { - Logger.MATERIALS( - "[Centrifuge] Found Solid Component, adding " + f.getKey() - + " dusts of " - + f.getValue() - .getLocalizedName() - + "."); - mInternalOutputs[mCounter++] = f.getValue() - .getDust(f.getKey()); - mTotalCount += f.getKey(); - } - } - - // Build Output Array - for (int g = 0; g < mInternalOutputs.length; g++) { - Logger.MATERIALS( - "[Centrifuge] Is output[" + g - + "] valid with a chance? " - + (mInternalOutputs[g] != null ? 10000 : 0)); - mChances[g] = (mInternalOutputs[g] != null ? 10000 : 0); - } - - ItemStack emptyCell = null; - if (mCellCount > 0) { - emptyCell = ItemUtils.getItemStackOfAmountFromOreDict("cellEmpty", mCellCount); - Logger.MATERIALS("[Centrifuge] Recipe now requires " + mCellCount + " empty cells as input."); - } - - ItemStack mainDust = material.getDust(material.smallestStackSizeWhenProcessing); - if (mainDust != null) { - Logger.MATERIALS( - "[Centrifuge] Recipe now requires " + material.smallestStackSizeWhenProcessing - + "x " - + mainDust.getDisplayName() - + " as input."); - } else { - mainDust = material.getDust(mTotalCount); - Logger.MATERIALS("[Centrifuge] Could not find valid input dust, trying alternative."); - if (mainDust != null) { - Logger.MATERIALS( - "[Centrifuge] Recipe now requires " + mTotalCount - + "x " - + mainDust.getDisplayName() - + " as input."); - } else { - Logger.MATERIALS("[Centrifuge] Could not find valid input dust, exiting."); - return; - } - } - - for (int j = 0; j < mInternalOutputs.length; j++) { - if (mInternalOutputs[j] == null) { - mInternalOutputs[j] = GT_Values.NI; - Logger.MATERIALS("[Centrifuge] Set slot " + j + " to null."); - } else { - Logger.MATERIALS( - "[Centrifuge] Set slot " + j + " to " + mInternalOutputs[j].getDisplayName() + "."); - } - } - - // i don't understand the mess above, so let's just strip nulls and assume the chances are in correct - // order - List internalOutputs = new ArrayList<>(Arrays.asList(mInternalOutputs)); - internalOutputs.removeIf(Objects::isNull); - - int[] chances = new int[internalOutputs.size()]; - for (int i = 0; i < internalOutputs.size(); i++) { - chances[i] = mChances[i]; - } - - ItemStack[] inputs; - if (emptyCell == null) { - inputs = new ItemStack[] { mainDust }; - } else { - inputs = new ItemStack[] { mainDust, emptyCell }; - } - GT_Values.RA.stdBuilder() - .itemInputs(inputs) - .itemOutputs(internalOutputs.toArray(new ItemStack[0])) - .outputChances(chances) - .eut(tVoltageMultiplier) - .duration((tVoltageMultiplier / 10) * SECONDS) - .addTo(centrifugeRecipes); - - Logger.MATERIALS( - "[Centrifuge] Generated Centrifuge recipe for " + material.getDust(1) - .getDisplayName()); - - } else if (componentMap.size() > 6 && componentMap.size() <= 9) { - Logger.MATERIALS( - "[Issue][Electrolyzer] " + material.getLocalizedName() - + " is composed of over 6 materials, so an electrolyzer recipe for processing cannot be generated. Trying to create one for the Dehydrator instead."); - - ItemStack mInternalOutputs[] = new ItemStack[9]; - int mChances[] = new int[9]; - int mCellCount = 0; - - int mTotalCount = 0; - - int mCounter = 0; - for (Pair f : componentMap) { - if (f.getValue() - .getState() != MaterialState.SOLID) { - Logger.MATERIALS( - "[Dehydrator] Found Fluid Component, adding " + f.getKey() - + " cells of " - + f.getValue() - .getLocalizedName() - + "."); - mInternalOutputs[mCounter++] = f.getValue() - .getCell(f.getKey()); - mCellCount += f.getKey(); - mTotalCount += f.getKey(); - Logger.MATERIALS( - "[Dehydrator] In total, adding " + mCellCount - + " cells for " - + material.getLocalizedName() - + " processing."); - } else { - Logger.MATERIALS( - "[Dehydrator] Found Solid Component, adding " + f.getKey() - + " dusts of " - + f.getValue() - .getLocalizedName() - + "."); - mInternalOutputs[mCounter++] = f.getValue() - .getDust(f.getKey()); - mTotalCount += f.getKey(); - } - } - - // Build Output Array - for (int g = 0; g < mInternalOutputs.length; g++) { - Logger.MATERIALS( - "[Dehydrator] Is output[" + g - + "] valid with a chance? " - + (mInternalOutputs[g] != null ? 10000 : 0)); - mChances[g] = (mInternalOutputs[g] != null ? 10000 : 0); - } - - ItemStack emptyCell = null; - if (mCellCount > 0) { - emptyCell = CI.emptyCells(mCellCount); - Logger.MATERIALS("[Dehydrator] Recipe now requires " + mCellCount + " empty cells as input."); - } - - ItemStack mainDust = material.getDust(material.smallestStackSizeWhenProcessing); - if (mainDust != null) { - Logger.MATERIALS( - "[Dehydrator] Recipe now requires " + material.smallestStackSizeWhenProcessing - + "x " - + mainDust.getDisplayName() - + " as input."); - } else { - mainDust = material.getDust(mTotalCount); - Logger.MATERIALS("[Dehydrator] Could not find valid input dust, trying alternative."); - if (mainDust != null) { - Logger.MATERIALS( - "[Dehydrator] Recipe now requires " + mTotalCount - + "x " - + mainDust.getDisplayName() - + " as input."); - } else { - Logger.MATERIALS("[Dehydrator] Could not find valid input dust, exiting."); - return; - } - } - - for (int j = 0; j < mInternalOutputs.length; j++) { - if (mInternalOutputs[j] == null) { - mInternalOutputs[j] = GT_Values.NI; - Logger.MATERIALS("[Dehydrator] Set slot " + j + " to null."); - } else { - Logger.MATERIALS( - "[Dehydrator] Set slot " + j + " to " + mInternalOutputs[j].getDisplayName() + "."); - } - } - // i don't understand the mess above, so let's just strip nulls and assume the chances are in correct - // order - List internalOutputs = new ArrayList<>(Arrays.asList(mInternalOutputs)); - internalOutputs.removeIf(Objects::isNull); - int[] chances = new int[internalOutputs.size()]; - for (int i = 0; i < internalOutputs.size(); i++) { - chances[i] = mChances[i]; - } - - ItemStack[] inputs; - if (emptyCell == null) { - inputs = new ItemStack[] { mainDust }; - } else { - inputs = new ItemStack[] { mainDust, emptyCell }; - } - - GT_Values.RA.stdBuilder() - .itemInputs(inputs) - .itemOutputs(internalOutputs.toArray(new ItemStack[0])) - .outputChances(chances) - .eut(tVoltageMultiplier) - .duration(20 * (tVoltageMultiplier / 10)) - .addTo(chemicalDehydratorRecipes); - - Logger.MATERIALS( - "[Dehydrator] Generated Dehydrator recipe for " + material.getDust(1) - .getDisplayName()); - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MetalRecipe.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MetalRecipe.java deleted file mode 100644 index ce17a8724c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MetalRecipe.java +++ /dev/null @@ -1,121 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.recipe.RecipeMaps.compressorRecipes; -import static gregtech.api.recipe.RecipeMaps.cutterRecipes; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.latheRecipes; -import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import java.util.HashSet; -import java.util.Set; - -import gregtech.api.enums.GT_Values; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeGen_MetalRecipe extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_MetalRecipe(final Material M) { - this.toGenerate = M; - mRecipeGenMap.add(this); - } - - @Override - public void run() { - generateRecipes(this.toGenerate); - } - - private void generateRecipes(final Material material) { - - Logger.WARNING("Generating Metal recipes for " + material.getLocalizedName()); - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) - && ItemUtils.checkForInvalidItems(material.getBlock(1))) { - - GT_Values.RA.stdBuilder() - .itemInputs(material.getIngot(9)) - .itemOutputs(material.getBlock(1)) - .duration(15 * SECONDS) - .eut(2) - .addTo(compressorRecipes); - Logger.WARNING("Compress Block Recipe: " + material.getLocalizedName() + " - Success"); - - } - - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) - && ItemUtils.checkForInvalidItems(material.getRod(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(material.getIngot(1)) - .itemOutputs(material.getRod(1), material.getSmallDust(2)) - .duration(Math.max(material.getMass() / 8L, 1L)) - .eut(material.vVoltageMultiplier) - .addTo(latheRecipes); - - Logger.WARNING("Lathe Rod Recipe: " + material.getLocalizedName() + " - Success"); - } - - if (ItemUtils.checkForInvalidItems(material.getRod(1)) && ItemUtils.checkForInvalidItems(material.getBolt(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(material.getRod(1)) - .itemOutputs(material.getBolt(4)) - .duration(Math.max(material.getMass() * 2L, 1L)) - .eut(material.vVoltageMultiplier) - .addTo(cutterRecipes); - - Logger.WARNING("Cut Bolt Recipe: " + material.getLocalizedName() + " - Success"); - } - - if (ItemUtils.checkForInvalidItems(material.getIngot(1)) - && ItemUtils.checkForInvalidItems(material.getHotIngot(1))) { - - GT_Values.RA.stdBuilder() - .itemInputs(material.getHotIngot(1)) - .itemOutputs(material.getIngot(1)) - .duration((int) Math.max(material.getMass() * 3L, 1L)) - .eut(material.vVoltageMultiplier) - .addTo(vacuumFreezerRecipes); - Logger.WARNING("Cool Hot Ingot Recipe: " + material.getLocalizedName() + " - Success"); - } - - if (ItemUtils.checkForInvalidItems(material.getRod(1)) - && ItemUtils.checkForInvalidItems(material.getLongRod(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(material.getRod(2)) - .itemOutputs(material.getLongRod(1)) - .duration((int) Math.max(material.getMass(), 1L)) - .eut(16) - .addTo(hammerRecipes); - - Logger.WARNING("Hammer Long Rod Recipe: " + material.getLocalizedName() + " - Success"); - - GT_Values.RA.stdBuilder() - .itemInputs(material.getLongRod(1)) - .itemOutputs(material.getRod(2)) - .duration(Math.max(material.getMass(), 1L)) - .eut(4) - .addTo(cutterRecipes); - - } - - if (ItemUtils.checkForInvalidItems(material.getBolt(1)) - && ItemUtils.checkForInvalidItems(material.getScrew(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(material.getBolt(1)) - .itemOutputs(material.getScrew(1)) - .duration(Math.max(material.getMass() / 8L, 1L)) - .eut(4) - .addTo(latheRecipes); - - Logger.WARNING("Lathe Screw Recipe: " + material.getLocalizedName() + " - Success"); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MultisUsingFluidInsteadOfCells.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MultisUsingFluidInsteadOfCells.java deleted file mode 100644 index 208be14c8c..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_MultisUsingFluidInsteadOfCells.java +++ /dev/null @@ -1,187 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.recipe.RecipeMap; -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.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.recipe.GT_RecipeUtils; - -public class RecipeGen_MultisUsingFluidInsteadOfCells { - - private static ItemStack mEmptyCell; - private static final AutoMap mItemsToIgnore = new AutoMap<>(); - 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()) { - return a.getItemDamage() == b.getItemDamage(); - } - 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; - return GT_Utility.areStacksEqual(aTempStack, aCell); - } - return false; - } - - private static synchronized FluidStack getFluidFromItemStack(final ItemStack ingot) { - if (ingot == null) { - return null; - } - return GT_Utility.getFluidForFilledItem(ingot, true); - } - - public static synchronized int generateRecipesNotUsingCells(RecipeMap aInputs, RecipeMap aOutputs) { - init(); - int aRecipesHandled = 0; - int aInvalidRecipesToConvert = 0; - int aOriginalCount = aInputs.getAllRecipes() - .size(); - ArrayList deDuplicationInputArray = new ArrayList<>(); - - recipe: for (GT_Recipe x : aInputs.getAllRecipes()) { - if (x != null) { - - ItemStack[] aInputItems = x.mInputs.clone(); - ItemStack[] aOutputItems = x.mOutputs.clone(); - FluidStack[] aInputFluids = x.mFluidInputs.clone(); - FluidStack[] aOutputFluids = x.mFluidOutputs.clone(); - - AutoMap aInputItemsMap = new AutoMap<>(); - AutoMap aOutputItemsMap = new AutoMap<>(); - AutoMap aInputFluidsMap = new AutoMap<>(); - AutoMap aOutputFluidsMap = new AutoMap<>(); - - // Iterate Inputs, Convert valid items into fluids - 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 - 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 - aInputFluidsMap.addAll(Arrays.asList(aInputFluids)); - // Add Output fluids second - aOutputFluidsMap.addAll(Arrays.asList(aOutputFluids)); - - // 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); - } - - if (!ItemUtils.checkForInvalidItems(aNewItemInputs, aNewItemOutputs)) { - aInvalidRecipesToConvert++; - continue; // Skip this recipe entirely if we find an item we don't like - } - GT_Recipe aNewRecipe = new GT_Recipe( - false, - aNewItemInputs, - aNewItemOutputs, - x.mSpecialItems, - x.mChances, - aNewFluidInputs, - aNewFluidOutputs, - x.mDuration, - x.mEUt, - x.mSpecialValue); - aNewRecipe.owners = new ArrayList<>(x.owners); - - // add all recipes to an intermediate array - deDuplicationInputArray.add(aNewRecipe); - - aRecipesHandled++; - } else { - aInvalidRecipesToConvert++; - } - } - // cast arraylist of input to a regular array and pass it to a duplicate recipe remover. - List deDuplicationOutputArray = GT_RecipeUtils - .removeDuplicates(deDuplicationInputArray, aOutputs.unlocalizedName); - // add each recipe from the above output to the intended recipe map - for (GT_Recipe recipe : deDuplicationOutputArray) { - aOutputs.add(recipe); - } - Logger.INFO("Generated Recipes for " + aOutputs.unlocalizedName); - 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/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java deleted file mode 100644 index 69c5c6a7c3..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Ore.java +++ /dev/null @@ -1,725 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.oreWasherRecipes; -import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Objects; -import java.util.Set; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.util.GT_ModHandler; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.api.objects.data.Pair; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.material.MaterialStack; -import gtPlusPlus.core.material.state.MaterialState; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.MaterialUtils; -import gtPlusPlus.core.util.minecraft.RecipeUtils; - -public class RecipeGen_Ore extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_Ore(final Material M) { - this(M, false); - } - - public RecipeGen_Ore(final Material M, final boolean O) { - this.toGenerate = M; - this.disableOptional = O; - mRecipeGenMap.add(this); - } - - @Override - public void run() { - generateRecipes(this.toGenerate, this.disableOptional); - } - - private static Material mStone; - - private void generateRecipes(final Material material, final boolean disableOptional) { - - if (mStone == null) { - mStone = MaterialUtils.generateMaterialFromGtENUM(Materials.Stone); - } - - // if (material.getMaterialComposites().length > 1){ - Logger.MATERIALS("[Recipe Generator Debug] [" + material.getLocalizedName() + "]"); - int tVoltageMultiplier = MaterialUtils.getVoltageForTier(material.vTier); - - final ItemStack dustStone = ItemUtils.getItemStackOfAmountFromOreDict("dustStone", 1); - Material bonusA = null; // Ni - Material bonusB = null; // Tin - - if (material.getComposites() - .size() >= 1 - && material.getComposites() - .get(0) != null) { - bonusA = material.getComposites() - .get(0) - .getStackMaterial(); - } else { - bonusA = material; - } - - boolean allFailed = false; - - // Setup Bonuses - ArrayList aMatComp = new ArrayList<>(); - for (Material j : MaterialUtils.getCompoundMaterialsRecursively(material)) { - aMatComp.add(j); - } - - if (aMatComp.size() < 3) { - while (aMatComp.size() < 3) { - aMatComp.add(material); - } - } - - AutoMap amJ = new AutoMap<>(); - int aIndexCounter = 0; - for (Material g : aMatComp) { - if (g.hasSolidForm()) { - if (getDust(g) != null && getTinyDust(g) != null) { - amJ.put(g); - } - } - } - - if (amJ.size() < 2) { - if (material.getComposites() - .size() >= 2 - && material.getComposites() - .get(1) != null) { - bonusB = material.getComposites() - .get(1) - .getStackMaterial(); - // If Secondary Output has no solid output, try the third (If it exists) - if (!bonusB.hasSolidForm() && material.getComposites() - .size() >= 3 - && material.getComposites() - .get(2) != null) { - bonusB = material.getComposites() - .get(2) - .getStackMaterial(); - // If Third Output has no solid output, try the Fourth (If it exists) - if (!bonusB.hasSolidForm() && material.getComposites() - .size() >= 4 - && material.getComposites() - .get(3) != null) { - bonusB = material.getComposites() - .get(3) - .getStackMaterial(); - // If Fourth Output has no solid output, try the Fifth (If it exists) - if (!bonusB.hasSolidForm() && material.getComposites() - .size() >= 5 - && material.getComposites() - .get(4) != null) { - bonusB = material.getComposites() - .get(4) - .getStackMaterial(); - // If Fifth Output has no solid output, default out to Stone dust. - if (!bonusB.hasSolidForm()) { - allFailed = true; - bonusB = mStone; - } - } - } - } - } else { - allFailed = true; - } - } else { - bonusA = amJ.get(0); - bonusB = amJ.get(1); - } - - // Default out if it's made of fluids or some stuff. - if (bonusA == null) { - bonusA = tVoltageMultiplier > 100 ? material : mStone; - } - // Default out if it's made of fluids or some stuff. - if (allFailed || bonusB == null) { - bonusB = tVoltageMultiplier > 100 ? material : mStone; - } - - AutoMap> componentMap = new AutoMap<>(); - for (MaterialStack r : material.getComposites()) { - if (r != null) { - componentMap.put(new Pair<>(r.getPartsPerOneHundred(), r.getStackMaterial())); - } - } - - // Need two valid outputs - if (bonusA == null || bonusB == null || !bonusA.hasSolidForm() || !bonusB.hasSolidForm()) { - if (bonusA == null) { - bonusA = mStone; - } - if (bonusB == null) { - bonusB = mStone; - } - if (!bonusA.hasSolidForm()) { - bonusA = mStone; - } - if (!bonusB.hasSolidForm()) { - bonusB = mStone; - } - } - - ItemStack matDust = getDust(material); - ItemStack matDustA = getDust(bonusA); - ItemStack matDustB = getDust(bonusB); - - /** - * Package - */ - // Allow ore dusts to be packaged - if (ItemUtils.checkForInvalidItems(material.getSmallDust(1)) - && ItemUtils.checkForInvalidItems(material.getTinyDust(1))) { - RecipeGen_DustGeneration.generatePackagerRecipes(material); - } - - /** - * Macerate - */ - // Macerate ore to Crushed - GT_Values.RA.stdBuilder() - .itemInputs(material.getOre(1)) - .itemOutputs(material.getCrushed(2)) - .duration(20 * SECONDS) - .eut(tVoltageMultiplier / 2) - .addTo(maceratorRecipes); - - Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate ore to Crushed ore'"); - - // Macerate raw ore to Crushed - GT_Values.RA.stdBuilder() - .itemInputs(material.getRawOre(1)) - .itemOutputs(material.getCrushed(2)) - .duration(20 * SECONDS) - .eut(tVoltageMultiplier / 2) - .addTo(maceratorRecipes); - - Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate raw ore to Crushed ore'"); - - // Macerate Crushed to Impure Dust - GT_Values.RA.stdBuilder() - .itemInputs(material.getCrushed(1)) - .itemOutputs(material.getDustImpure(1), matDustA) - .outputChances(100_00, 10_00) - .duration(20 * SECONDS) - .eut(tVoltageMultiplier / 2) - .addTo(maceratorRecipes); - - Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate Crushed ore to Impure Dust'"); - - // Macerate Washed to Purified Dust - GT_Values.RA.stdBuilder() - .itemInputs(material.getCrushedPurified(1)) - .itemOutputs(material.getDustPurified(1), matDustA) - .outputChances(100_00, 10_00) - .duration(20 * SECONDS) - .eut(tVoltageMultiplier / 2) - .addTo(maceratorRecipes); - - Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate Washed ore to Purified Dust'"); - - // Macerate Centrifuged to Pure Dust - GT_Values.RA.stdBuilder() - .itemInputs(material.getCrushedCentrifuged(1)) - .itemOutputs(matDust, matDustA) - .outputChances(100_00, 10_00) - .duration(20 * SECONDS) - .eut(tVoltageMultiplier / 2) - .addTo(maceratorRecipes); - - Logger.MATERIALS("[Macerator] Added Recipe: 'Macerate Centrifuged ore to Pure Dust'"); - - // Wash - RA.stdBuilder() - .itemInputs(material.getCrushed(1)) - .itemOutputs(material.getCrushedPurified(1), matDustA, dustStone) - .outputChances(100_00, 11_11, 100_00) - .fluidInputs(GT_ModHandler.getWater(1000)) - .duration(25 * SECONDS) - .eut(16) - .addTo(oreWasherRecipes); - - RA.stdBuilder() - .itemInputs(material.getCrushed(1)) - .itemOutputs(material.getCrushedPurified(1), matDustA, dustStone) - .outputChances(100_00, 11_11, 100_00) - .fluidInputs(GT_ModHandler.getDistilledWater(200)) - .duration(15 * SECONDS) - .eut(16) - .addTo(oreWasherRecipes); - Logger.MATERIALS("[OreWasher] Added Recipe: 'Wash Crushed ore into Purified Crushed ore'"); - - // Thermal Centrifuge - - Logger.MATERIALS("material.getCrushed(1): " + (material.getCrushed(1) != null)); - Logger.MATERIALS("material.getCrushedPurified(1): " + (material.getCrushedPurified(1) != null)); - - Logger.MATERIALS("material.getTinyDust(1): " + (ItemUtils.getItemName(bonusA.getCrushed(1)))); - Logger.MATERIALS("material.getTinyDust(1): " + (ItemUtils.getItemName(bonusB.getCrushed(1)))); - - GT_Values.RA.stdBuilder() - .itemInputs(material.getCrushed(1)) - .itemOutputs(material.getCrushedCentrifuged(1), matDustB, dustStone) - .outputChances(100_00, 11_11, 100_00) - .duration(25 * SECONDS) - .eut(48) - .addTo(thermalCentrifugeRecipes); - - Logger.MATERIALS( - "[ThermalCentrifuge] Added Recipe: 'Crushed ore to Centrifuged Ore' | Input: " + material.getCrushed(1) - .getDisplayName() - + " | Outputs: " - + material.getCrushedCentrifuged(1) - .getDisplayName() - + ", " - + matDustB.getDisplayName() - + ", " - + dustStone.getDisplayName() - + "."); - - GT_Values.RA.stdBuilder() - .itemInputs(material.getCrushedPurified(1)) - .itemOutputs(material.getCrushedCentrifuged(1), matDustA, dustStone) - .outputChances(100_00, 11_11, 100_00) - .duration(25 * SECONDS) - .eut(48) - .addTo(thermalCentrifugeRecipes); - - Logger.MATERIALS( - "[ThermalCentrifuge] Added Recipe: 'Washed ore to Centrifuged Ore' | Input: " - + material.getCrushedPurified(1) - .getDisplayName() - + " | Outputs: " - + material.getCrushedCentrifuged(1) - .getDisplayName() - + ", " - + matDustA.getDisplayName() - + ", " - + dustStone.getDisplayName() - + "."); - - // Forge Hammer - - GT_Values.RA.stdBuilder() - .itemInputs(material.getCrushedCentrifuged(1)) - .itemOutputs(matDust) - .duration(10 * TICKS) - .eut(tVoltageMultiplier / 4) - .addTo(hammerRecipes); - - Logger.MATERIALS("[ForgeHammer] Added Recipe: 'Crushed Centrifuged to Pure Dust'"); - - GT_Values.RA.stdBuilder() - .itemInputs(material.getCrushedPurified(1)) - .itemOutputs(material.getDustPurified(1)) - .duration(10 * TICKS) - .eut(tVoltageMultiplier / 4) - .addTo(hammerRecipes); - Logger.MATERIALS("[ForgeHammer] Added Recipe: 'Crushed Purified to Purified Dust'"); - - GT_Values.RA.stdBuilder() - .itemInputs(material.getOre(1)) - .itemOutputs(material.getCrushed(1)) - .duration(10 * TICKS) - .eut(tVoltageMultiplier / 4) - .addTo(hammerRecipes); - - Logger.MATERIALS("[ForgeHammer] Added Recipe: 'Ore to Crushed'"); - - // Centrifuge - - // Purified Dust to Clean - GT_Values.RA.stdBuilder() - .itemInputs(material.getDustPurified(1)) - .itemOutputs(matDust, matDustA) - .outputChances(100_00, 11_11) - .eut(tVoltageMultiplier / 2) - .duration((int) Math.max(1L, material.getMass() * 8L)) - .addTo(centrifugeRecipes); - - Logger.MATERIALS("[Centrifuge] Added Recipe: Purified Dust to Clean Dust"); - - // Impure Dust to Clean - GT_Values.RA.stdBuilder() - .itemInputs(material.getDustImpure(1)) - .itemOutputs(matDust, matDustB) - .outputChances(100_00, 11_11) - .eut(tVoltageMultiplier / 2) - .duration((int) Math.max(1L, material.getMass() * 8L)) - .addTo(centrifugeRecipes); - - Logger.MATERIALS("[Centrifuge] Added Recipe: Inpure Dust to Clean Dust"); - - // Electrolyzer - - if (!disableOptional) { - // Process Dust - if (componentMap.size() > 0 && componentMap.size() <= 6) { - - ItemStack mInternalOutputs[] = new ItemStack[6]; - int mChances[] = new int[6]; - int mCellCount = 0; - - int mTotalCount = 0; - - int mCounter = 0; - for (Pair f : componentMap) { - if (f.getValue() - .getState() != MaterialState.SOLID) { - Logger.MATERIALS( - "[Electrolyzer] Found Fluid Component, adding " + f.getKey() - + " cells of " - + f.getValue() - .getLocalizedName() - + "."); - mInternalOutputs[mCounter++] = f.getValue() - .getCell(f.getKey()); - mCellCount += f.getKey(); - mTotalCount += f.getKey(); - Logger.MATERIALS( - "[Electrolyzer] In total, adding " + mCellCount - + " cells for " - + material.getLocalizedName() - + " processing."); - } else { - Logger.MATERIALS( - "[Electrolyzer] Found Solid Component, adding " + f.getKey() - + " dusts of " - + f.getValue() - .getLocalizedName() - + "."); - mInternalOutputs[mCounter++] = f.getValue() - .getDust(f.getKey()); - mTotalCount += f.getKey(); - } - } - - // Build Output Array - for (int g = 0; g < mInternalOutputs.length; g++) { - Logger.MATERIALS( - "[Electrolyzer] Is output[" + g - + "] valid with a chance? " - + (mInternalOutputs[g] != null ? 10000 : 0)); - mChances[g] = (mInternalOutputs[g] != null ? 10000 : 0); - } - - ItemStack emptyCell = null; - if (mCellCount > 0) { - emptyCell = ItemUtils.getItemStackOfAmountFromOreDict("cellEmpty", mCellCount); - Logger.MATERIALS("[Electrolyzer] Recipe now requires " + mCellCount + " empty cells as input."); - } - - ItemStack mainDust = material.getDust(material.smallestStackSizeWhenProcessing); - if (mainDust != null) { - Logger.MATERIALS( - "[Electrolyzer] Recipe now requires " + material.smallestStackSizeWhenProcessing - + "x " - + mainDust.getDisplayName() - + " as input."); - } else { - mainDust = material.getDust(mTotalCount); - Logger.MATERIALS("[Electrolyzer] Could not find valid input dust, trying alternative."); - if (mainDust != null) { - Logger.MATERIALS( - "[Electrolyzer] Recipe now requires " + mTotalCount - + "x " - + mainDust.getDisplayName() - + " as input."); - } else { - Logger.MATERIALS("[Electrolyzer] Could not find valid input dust, exiting."); - return; - } - } - - for (int j = 0; j < mInternalOutputs.length; j++) { - if (mInternalOutputs[j] == null) { - mInternalOutputs[j] = GT_Values.NI; - Logger.MATERIALS("[Electrolyzer] Set slot " + j + " to null."); - } else { - Logger.MATERIALS( - "[Electrolyzer] Set slot " + j + " to " + mInternalOutputs[j].getDisplayName() + "."); - } - } - - // i don't understand the mess above, so let's just strip nulls and assume the chances are in correct - // order - List internalOutputs = new ArrayList<>(Arrays.asList(mInternalOutputs)); - internalOutputs.removeIf(Objects::isNull); - int[] chances = new int[internalOutputs.size()]; - for (int i = 0; i < internalOutputs.size(); i++) { - chances[i] = mChances[i]; - } - ItemStack[] inputs; - if (emptyCell == null) { - inputs = new ItemStack[] { mainDust }; - } else { - inputs = new ItemStack[] { mainDust, emptyCell }; - } - GT_Values.RA.stdBuilder() - .itemInputs(inputs) - .itemOutputs(internalOutputs.toArray(new ItemStack[0])) - .outputChances(chances) - .duration(Math.max(material.getMass() * 3L * 1, 1)) - .eut(tVoltageMultiplier) - .addTo(electrolyzerRecipes); - - Logger.MATERIALS("[Electrolyzer] Generated Electrolyzer recipe for " + matDust.getDisplayName()); - - } else if (componentMap.size() > 6 && componentMap.size() <= 9) { - Logger.MATERIALS( - "[Issue][Electrolyzer] " + material.getLocalizedName() - + " is composed of over 6 materials, so an electrolyzer recipe for processing cannot be generated. Trying to create one for the Dehydrator instead."); - - ItemStack mInternalOutputs[] = new ItemStack[9]; - int mChances[] = new int[9]; - int mCellCount = 0; - - int mTotalCount = 0; - - int mCounter = 0; - for (Pair f : componentMap) { - if (f.getValue() - .getState() != MaterialState.SOLID - && f.getValue() - .getState() != MaterialState.ORE) { - Logger.MATERIALS( - "[Dehydrator] Found Fluid Component, adding " + f.getKey() - + " cells of " - + f.getValue() - .getLocalizedName() - + "."); - mInternalOutputs[mCounter++] = f.getValue() - .getCell(f.getKey()); - mCellCount += f.getKey(); - mTotalCount += f.getKey(); - Logger.MATERIALS( - "[Dehydrator] In total, adding " + mCellCount - + " cells for " - + material.getLocalizedName() - + " processing."); - } else { - Logger.MATERIALS( - "[Dehydrator] Found Solid Component, adding " + f.getKey() - + " dusts of " - + f.getValue() - .getLocalizedName() - + "."); - mInternalOutputs[mCounter++] = f.getValue() - .getDust(f.getKey()); - mTotalCount += f.getKey(); - } - } - - // Build Output Array - for (int g = 0; g < mInternalOutputs.length; g++) { - Logger.MATERIALS( - "[Dehydrator] Is output[" + g - + "] valid with a chance? " - + (mInternalOutputs[g] != null ? 10000 : 0)); - mChances[g] = (mInternalOutputs[g] != null ? 10000 : 0); - } - - ItemStack emptyCell = null; - if (mCellCount > 0) { - emptyCell = ItemUtils.getItemStackOfAmountFromOreDict("cellEmpty", mCellCount); - Logger.MATERIALS("[Dehydrator] Recipe now requires " + mCellCount + " empty cells as input."); - } - - ItemStack mainDust = material.getDust(material.smallestStackSizeWhenProcessing); - if (mainDust != null) { - Logger.MATERIALS( - "[Dehydrator] Recipe now requires " + material.smallestStackSizeWhenProcessing - + "x " - + mainDust.getDisplayName() - + " as input."); - } else { - mainDust = material.getDust(mTotalCount); - Logger.MATERIALS("[Dehydrator] Could not find valid input dust, trying alternative."); - if (mainDust != null) { - Logger.MATERIALS( - "[Dehydrator] Recipe now requires " + mTotalCount - + "x " - + mainDust.getDisplayName() - + " as input."); - } else { - Logger.MATERIALS("[Dehydrator] Could not find valid input dust, exiting."); - return; - } - } - - for (int j = 0; j < mInternalOutputs.length; j++) { - if (mInternalOutputs[j] == null) { - mInternalOutputs[j] = GT_Values.NI; - Logger.MATERIALS("[Dehydrator] Set slot " + j + " to null."); - } else { - Logger.MATERIALS( - "[Dehydrator] Set slot " + j + " to " + mInternalOutputs[j].getDisplayName() + "."); - } - } - - // i don't understand the mess above, so let's just strip nulls and assume the chances are in correct - // order - List internalOutputs = new ArrayList<>(Arrays.asList(mInternalOutputs)); - internalOutputs.removeIf(Objects::isNull); - int[] chances = new int[internalOutputs.size()]; - for (int i = 0; i < internalOutputs.size(); i++) { - chances[i] = mChances[i]; - } - - ItemStack[] inputs; - if (emptyCell == null) { - inputs = new ItemStack[] { mainDust }; - } else { - inputs = new ItemStack[] { mainDust, emptyCell }; - } - - GT_Values.RA.stdBuilder() - .itemInputs(inputs) - .itemOutputs(internalOutputs.toArray(new ItemStack[0])) - .outputChances(chances) - .eut(tVoltageMultiplier) - .duration((int) Math.max(material.getMass() * 4L * 1, 1)) - .addTo(chemicalDehydratorRecipes); - - Logger.MATERIALS("[Dehydrator] Generated Dehydrator recipe for " + matDust.getDisplayName()); - Logger.MATERIALS( - "Inputs: " + mainDust.getDisplayName() - + " x" - + mainDust.stackSize - + ", " - + (emptyCell == null ? "No Cells" - : "" + emptyCell.getDisplayName() + " x" + emptyCell.stackSize)); - Logger.MATERIALS("Outputs " + ItemUtils.getArrayStackNames(mInternalOutputs)); - Logger.MATERIALS("Time: " + ((int) Math.max(material.getMass() * 4L * 1, 1))); - Logger.MATERIALS("EU: " + tVoltageMultiplier); - - } - } - - // Shaped Crafting - - RecipeUtils.addShapedRecipe( - CI.craftingToolHammer_Hard, - null, - null, - material.getCrushedPurified(1), - null, - null, - null, - null, - null, - material.getDustPurified(1)); - - RecipeUtils.addShapedRecipe( - CI.craftingToolHammer_Hard, - null, - null, - material.getCrushed(1), - null, - null, - null, - null, - null, - material.getDustImpure(1)); - - RecipeUtils.addShapedRecipe( - CI.craftingToolHammer_Hard, - null, - null, - material.getCrushedCentrifuged(1), - null, - null, - null, - null, - null, - matDust); - - final ItemStack normalDust = matDust; - final ItemStack smallDust = material.getSmallDust(1); - final ItemStack tinyDust = material.getTinyDust(1); - - if (RecipeUtils.addShapedRecipe( - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - tinyDust, - normalDust)) { - Logger.WARNING("9 Tiny dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("9 Tiny dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); - } - - if (RecipeUtils - .addShapedRecipe(normalDust, null, null, null, null, null, null, null, null, material.getTinyDust(9))) { - Logger.WARNING("9 Tiny dust from 1 Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("9 Tiny dust from 1 Recipe: " + material.getLocalizedName() + " - Failed"); - } - - if (RecipeUtils - .addShapedRecipe(smallDust, smallDust, null, smallDust, smallDust, null, null, null, null, normalDust)) { - Logger.WARNING("4 Small dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("4 Small dust to 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); - } - - if (RecipeUtils - .addShapedRecipe(null, normalDust, null, null, null, null, null, null, null, material.getSmallDust(4))) { - Logger.WARNING("4 Small dust from 1 Dust Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("4 Small dust from 1 Dust Recipe: " + material.getLocalizedName() + " - Failed"); - } - - } - - public static ItemStack getTinyDust(Material m) { - ItemStack x = m.getTinyDust(1); - if (x == null) { - x = mStone.getDust(1); - } - return x; - } - - public static ItemStack getDust(Material m) { - ItemStack x = m.getDust(1); - if (x == null) { - x = mStone.getDust(1); - } - return x; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Plasma.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Plasma.java deleted file mode 100644 index 2ece69065f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Plasma.java +++ /dev/null @@ -1,90 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeConstants.FUEL_TYPE; -import static gregtech.api.util.GT_RecipeConstants.FUEL_VALUE; - -import java.util.HashSet; -import java.util.Set; - -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_RecipeConstants; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeGen_Plasma extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_Plasma(final Material M) { - this.toGenerate = M; - mRecipeGenMap.add(this); - } - - @Override - public void run() { - generateRecipes(this.toGenerate); - } - - private void generateRecipes(final Material material) { - if (material.getPlasma() != null) { - // Cool Plasma - ItemStack aPlasmaCell = material.getPlasmaCell(1); - ItemStack aCell = material.getCell(1); - ItemStack aContainerItem = GT_Utility.getFluidForFilledItem(aPlasmaCell, true) == null - ? GT_Utility.getContainerItem(aPlasmaCell, true) - : CI.emptyCells(1); - if (ItemUtils.checkForInvalidItems(new ItemStack[] { aPlasmaCell, aContainerItem })) { - switch (material.getUnlocalizedName()) { - case "Runite": - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1L, aPlasmaCell)) - .itemOutputs(aContainerItem) - .metadata(FUEL_VALUE, 350_000) - .metadata(FUEL_TYPE, GT_RecipeConstants.FuelType.PlasmaTurbine.ordinal()) - .duration(0) - .eut(0) - .addTo(GT_RecipeConstants.Fuel); - case "CelestialTungsten": - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1L, aPlasmaCell)) - .itemOutputs(aContainerItem) - .metadata(FUEL_VALUE, 720_000) - .metadata(FUEL_TYPE, GT_RecipeConstants.FuelType.PlasmaTurbine.ordinal()) - .duration(0) - .eut(0) - .addTo(GT_RecipeConstants.Fuel); - - default: - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(1L, aPlasmaCell)) - .itemOutputs(aContainerItem) - .metadata(FUEL_VALUE, (int) Math.max(1024L, 1024L * material.getMass())) - .metadata(FUEL_TYPE, GT_RecipeConstants.FuelType.PlasmaTurbine.ordinal()) - .duration(0) - .eut(0) - .addTo(GT_RecipeConstants.Fuel); - } - } - if (ItemUtils.checkForInvalidItems(new ItemStack[] { aCell, aPlasmaCell })) { - GT_Values.RA.stdBuilder() - .itemInputs(aPlasmaCell) - .itemOutputs(aCell) - .duration(Math.max(material.getMass() * 2L, 1L)) - .eut(TierEU.RECIPE_MV) - .addTo(vacuumFreezerRecipes); - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Plates.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Plates.java deleted file mode 100644 index f126e80834..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Plates.java +++ /dev/null @@ -1,180 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; -import static gregtech.api.recipe.RecipeMaps.benderRecipes; -import static gregtech.api.recipe.RecipeMaps.cutterRecipes; -import static gregtech.api.recipe.RecipeMaps.hammerRecipes; - -import java.util.HashSet; -import java.util.Set; - -import net.minecraft.item.ItemStack; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.objects.GT_RenderedTexture; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeGen_Plates extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_Plates(final Material M) { - this.toGenerate = M; - mRecipeGenMap.add(this); - } - - @Override - public void run() { - generateRecipes(this.toGenerate); - } - - private void generateRecipes(final Material material) { - - final ItemStack ingotStackOne = material.getIngot(1); - final ItemStack ingotStackTwo = material.getIngot(2); - final ItemStack ingotStackThree = material.getIngot(3); - final ItemStack ingotStackNine = material.getIngot(9); - final ItemStack shape_Mold = ItemList.Shape_Mold_Plate.get(0); - final ItemStack plate_Single = material.getPlate(1); - final ItemStack plate_SingleTwo = material.getPlate(2); - final ItemStack plate_SingleNine = material.getPlate(9); - final ItemStack plate_Double = material.getPlateDouble(1); - final ItemStack plate_Dense = material.getPlateDense(1); - final ItemStack foil_SingleFour = material.getFoil(4); - final ItemStack block = material.getBlock(1); - - Logger.WARNING("Generating Plate recipes for " + material.getLocalizedName()); - - // Forge Hammer - if (ItemUtils.checkForInvalidItems(ingotStackTwo) && ItemUtils.checkForInvalidItems(plate_Single)) { - GT_Values.RA.stdBuilder() - .itemInputs(ingotStackThree) - .itemOutputs(plate_SingleTwo) - .duration(Math.max(material.getMass(), 1L)) - .eut(material.vVoltageMultiplier) - .addTo(hammerRecipes); - - Logger.WARNING("Forge Hammer Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Bender - if (ItemUtils.checkForInvalidItems(ingotStackOne) && ItemUtils.checkForInvalidItems(plate_Single)) { - GT_Values.RA.stdBuilder() - .itemInputs(ingotStackOne, GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(plate_Single) - .duration(Math.max(material.getMass() * 1L, 1L)) - .eut(material.vVoltageMultiplier) - .addTo(benderRecipes); - - Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); - } - - if (ItemUtils.checkForInvalidItems(ingotStackOne) && ItemUtils.checkForInvalidItems(foil_SingleFour)) { - GT_Values.RA.stdBuilder() - .itemInputs(ingotStackOne, GT_Utility.getIntegratedCircuit(10)) - .itemOutputs(foil_SingleFour) - .duration(Math.max(material.getMass() * 2L, 1L)) - .eut(material.vVoltageMultiplier) - .addTo(benderRecipes); - - Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Alloy Smelter - if (ItemUtils.checkForInvalidItems(ingotStackTwo) && ItemUtils.checkForInvalidItems(plate_Single)) { - GT_Values.RA.stdBuilder() - .itemInputs(ingotStackTwo, shape_Mold) - .itemOutputs(plate_Single) - .duration(Math.max(material.getMass() * 2L, 1L)) - .eut(material.vVoltageMultiplier) - .addTo(alloySmelterRecipes); - - Logger.WARNING("Alloy Smelter Recipe: " + material.getLocalizedName() + " - Success"); - } - // Cutting Machine - if (ItemUtils.checkForInvalidItems(block) && ItemUtils.checkForInvalidItems(plate_Single)) { - GT_Values.RA.stdBuilder() - .itemInputs(block) - .itemOutputs(plate_SingleNine) - .duration(Math.max(material.getMass() * 10L, 1L)) - .eut(material.vVoltageMultiplier) - .addTo(cutterRecipes); - - Logger.WARNING("Cutting Machine Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Making Double Plates - if (ItemUtils.checkForInvalidItems(ingotStackTwo) && ItemUtils.checkForInvalidItems(plate_Double)) { - GT_Values.RA.stdBuilder() - .itemInputs(ingotStackTwo, GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(plate_Double) - .duration(Math.max(material.getMass() * 2L, 1L)) - .eut(material.vVoltageMultiplier) - .addTo(benderRecipes); - - Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); - } - - if (ItemUtils.checkForInvalidItems(plate_SingleTwo) && ItemUtils.checkForInvalidItems(plate_Double)) { - GT_Values.RA.stdBuilder() - .itemInputs(plate_SingleTwo, GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(plate_Double) - .duration(Math.max(material.getMass() * 2L, 1L)) - .eut(material.vVoltageMultiplier) - .addTo(benderRecipes); - Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Bender - if (ItemUtils.checkForInvalidItems(material.getPlate(1)) - && ItemUtils.checkForInvalidItems(material.getFoil(1))) { - GT_Values.RA.stdBuilder() - .itemInputs(material.getPlate(1), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(material.getFoil(4)) - .duration(Math.max(material.getMass(), 1L)) - .eut(material.vVoltageMultiplier) - .addTo(benderRecipes); - - GregTech_API.registerCover( - material.getFoil(1), - new GT_RenderedTexture(material.getTextureSet().mTextures[70], material.getRGBA(), false), - null); - Logger.WARNING("Bender Foil Recipe: " + material.getLocalizedName() + " - Success"); - } - - // Making Dense Plates - if (ItemUtils.checkForInvalidItems(ingotStackNine) && ItemUtils.checkForInvalidItems(plate_Dense)) { - GT_Values.RA.stdBuilder() - .itemInputs(ingotStackNine, GT_Utility.getIntegratedCircuit(9)) - .itemOutputs(plate_Dense) - .duration(Math.max(material.getMass() * 2L, 1L)) - .eut(material.vVoltageMultiplier) - .addTo(benderRecipes); - - Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); - } - - if (ItemUtils.checkForInvalidItems(plate_SingleNine) && ItemUtils.checkForInvalidItems(plate_Dense)) { - GT_Values.RA.stdBuilder() - .itemInputs(plate_SingleNine, GT_Utility.getIntegratedCircuit(9)) - .itemOutputs(plate_Dense) - .duration(Math.max(material.getMass() * 2L, 1L)) - .eut(material.vVoltageMultiplier) - .addTo(benderRecipes); - - Logger.WARNING("Bender Recipe: " + material.getLocalizedName() + " - Success"); - } - - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Recycling.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Recycling.java deleted file mode 100644 index ec6929a2ee..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_Recycling.java +++ /dev/null @@ -1,375 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import static gregtech.api.enums.GT_Values.M; -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import java.util.ArrayList; -import java.util.Map; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import org.apache.commons.lang3.reflect.FieldUtils; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.api.objects.data.Pair; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.state.MaterialState; -import gtPlusPlus.core.util.Utils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; - -public class RecipeGen_Recycling implements Runnable { - - public static AutoMap mQueuedRecyclingGenerators = new AutoMap<>(); - - public static void executeGenerators() { - if (mQueuedRecyclingGenerators.size() > 0) { - for (Runnable R : mQueuedRecyclingGenerators.values()) { - R.run(); - } - } - } - - final Material toGenerate; - public static Map mNameMap; - - public RecipeGen_Recycling(final Material M) { - this.toGenerate = M; - if (mNameMap == null) { - mNameMap = this.getNameMap(); - } - mQueuedRecyclingGenerators.put(this); - } - - @Override - public void run() { - if (mNameMap != null) { - generateRecipes(this.toGenerate); - } - } - - public static void generateRecipes(final Material material) { - - if (material != null) Logger.WARNING("Generating Recycling recipes for " + material.getLocalizedName()); - - final OrePrefixes[] mValidPrefixesAsString = { OrePrefixes.ingot, OrePrefixes.ingotHot, OrePrefixes.nugget, - OrePrefixes.plate, OrePrefixes.plateDense, OrePrefixes.plateDouble, OrePrefixes.plateTriple, - OrePrefixes.plateQuadruple, OrePrefixes.plateQuintuple, OrePrefixes.stick, OrePrefixes.stickLong, - OrePrefixes.bolt, OrePrefixes.screw, OrePrefixes.ring, OrePrefixes.rotor, OrePrefixes.gearGt, - OrePrefixes.gearGtSmall, OrePrefixes.gear, OrePrefixes.block, OrePrefixes.cableGt01, OrePrefixes.cableGt02, - OrePrefixes.cableGt04, OrePrefixes.cableGt08, OrePrefixes.cableGt12, OrePrefixes.wireFine, - OrePrefixes.wireGt01, OrePrefixes.wireGt02, OrePrefixes.wireGt04, OrePrefixes.wireGt08, - OrePrefixes.wireGt12, OrePrefixes.wireGt16, OrePrefixes.foil, OrePrefixes.frameGt, OrePrefixes.pipeHuge, - OrePrefixes.pipeLarge, OrePrefixes.pipeMedium, OrePrefixes.pipeSmall, OrePrefixes.pipeTiny, }; - - int mSlotIndex = 0; - Pair[] mValidPairs = new Pair[mValidPrefixesAsString.length]; - - for (int r = 0; r < mValidPairs.length; r++) { - ItemStack temp = getItemStackOfAmountFromOreDictNoBroken( - mValidPrefixesAsString[r].name() + Utils.sanitizeString(material.getLocalizedName()), - 1); - if (temp != null) { - mValidPairs[mSlotIndex++] = new Pair<>(mValidPrefixesAsString[r], temp.copy()); - } - } - - int validCounter = 0; - Pair[] temp = mValidPairs; - for (Pair temp2 : mValidPairs) { - if (temp2 == null) { - continue; - } - Logger.WARNING( - "Valid: " + temp2.getValue() - .getDisplayName()); - validCounter++; - } - Pair temp3[] = new Pair[validCounter]; - int temp4 = 0; - for (Pair r : mValidPairs) { - if (r == null) { - continue; - } - - temp3[temp4++] = r; - } - if (temp3.length > 0) { - mValidPairs = temp3.clone(); - } - - for (final Pair validPrefix : mValidPairs) { - if (material == null || validPrefix == null - || (material.getState() != MaterialState.SOLID && material.getState() != MaterialState.LIQUID) - || validPrefix.getKey() == OrePrefixes.ingotHot) { - continue; - } - - final ItemStack tempStack = validPrefix.getValue(); - final ItemStack mDust = getDust(material, validPrefix.getKey()); - - // Maceration - if (ItemUtils.checkForInvalidItems(tempStack) && mDust != null) { - RA.stdBuilder() - .itemInputs(tempStack) - .itemOutputs(mDust) - .eut(2) - .duration(20 * SECONDS) - .addTo(maceratorRecipes); - Logger.WARNING( - "Recycle Recipe: " + material.getLocalizedName() - + " - Success - Recycle " - + tempStack.getDisplayName() - + " and obtain " - + mDust.getDisplayName()); - } - - // Fluid Extractor - if (ItemUtils.checkForInvalidItems(tempStack)) { - int aFluidAmount = (int) ((144 * validPrefix.getKey().mMaterialAmount) / (M * tempStack.stackSize)); - int aDuration = (int) Math.max(1, (24 * validPrefix.getKey().mMaterialAmount) / M); - FluidStack fluidOutput = material.getFluidStack(aFluidAmount); - if (fluidOutput != null) { - GT_Values.RA.stdBuilder() - .itemInputs(tempStack) - .fluidOutputs(fluidOutput) - .duration(aDuration) - .eut(material.vVoltageMultiplier) - .addTo(fluidExtractionRecipes); - - Logger.WARNING( - "Fluid Recycle Recipe: " + material.getLocalizedName() - + " - Success - Recycle " - + tempStack.getDisplayName() - + " and obtain " - + aFluidAmount - + "mb of " - + material.getFluidStack(1) - .getLocalizedName() - + ". Time: " - + aDuration - + ", Voltage: " - + material.vVoltageMultiplier); - } - } - } - - } - - public static Pair getDustData(final Material aMaterial, final OrePrefixes aPrefix) { - return getDustData(aMaterial, aPrefix.mMaterialAmount); - } - - public static Pair getDustData(final Material aMaterial, final long aMaterialAmount) { - ItemStack mDust = null; - OrePrefixes mPrefix = null; - - if (aMaterial == null || aMaterialAmount <= 0) { - return null; - } - if ((((aMaterialAmount % M) == 0) || (aMaterialAmount >= (M * 16)))) { - mDust = get(OrePrefixes.dust, aMaterial, aMaterialAmount / M); - mPrefix = OrePrefixes.dust; - } - if ((mDust == null) && ((((aMaterialAmount * 4) % M) == 0) || (aMaterialAmount >= (M * 8)))) { - mDust = get(OrePrefixes.dustSmall, aMaterial, (aMaterialAmount * 4) / M); - mPrefix = OrePrefixes.dustSmall; - } - if ((mDust == null) && (((aMaterialAmount * 9) >= M))) { - mDust = get(OrePrefixes.dustTiny, aMaterial, (aMaterialAmount * 9) / M); - mPrefix = OrePrefixes.dustTiny; - } - - if (mPrefix != null && mDust != null) { - Logger.WARNING("Built valid dust pair."); - return new Pair<>(mPrefix, mDust); - } else { - Logger.WARNING("mPrefix: " + (mPrefix != null)); - Logger.WARNING("mDust: " + (mDust != null)); - } - Logger.WARNING("Failed to build valid dust pair."); - return null; - } - - public static ItemStack getDust(final Material aMaterial, final OrePrefixes aPrefix) { - return aMaterial == null ? null : getDust(aMaterial, aPrefix.mMaterialAmount); - } - - public static ItemStack getDust(final Material aMaterial, final long aMaterialAmount) { - if (aMaterialAmount <= 0) { - return null; - } - ItemStack rStack = null; - if ((((aMaterialAmount % M) == 0) || (aMaterialAmount >= (M * 16)))) { - Logger.WARNING("Trying to get a Dust"); - rStack = get(OrePrefixes.dust, aMaterial, aMaterialAmount / M); - } - if ((rStack == null) && ((((aMaterialAmount * 4) % M) == 0) || (aMaterialAmount >= (M * 8)))) { - Logger.WARNING("Trying to get a Small Dust"); - rStack = get(OrePrefixes.dustSmall, aMaterial, (aMaterialAmount * 4) / M); - } - if ((rStack == null) && (((aMaterialAmount * 9) >= M))) { - Logger.WARNING("Trying to get a Tiny Dust"); - rStack = get(OrePrefixes.dustTiny, aMaterial, (aMaterialAmount * 9) / M); - } - return rStack; - } - - public static ItemStack get(final Object aName, final long aAmount) { - return get(aName, null, aAmount, true, true); - } - - public static ItemStack get(final Object aName, final ItemStack aReplacement, final long aAmount) { - return get(aName, aReplacement, aAmount, true, true); - } - - public static ItemStack get(final OrePrefixes aPrefix, final Material aMaterial, final long aAmount) { - return get(aPrefix, aMaterial, null, aAmount); - } - - public static ItemStack get(final OrePrefixes aPrefix, final Material aMaterial, final ItemStack aReplacement, - final long aAmount) { - return get( - aPrefix.name() + Utils.sanitizeString(aMaterial.getLocalizedName()), - aReplacement, - aAmount, - false, - true); - } - - public static ItemStack get(final Object aName, final ItemStack aReplacement, final long aAmount, - final boolean aMentionPossibleTypos, final boolean aNoInvalidAmounts) { - if (aNoInvalidAmounts && (aAmount < 1L)) { - Logger.WARNING("Returning Null. Method: " + ReflectionUtils.getMethodName(0)); - Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(1)); - Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(2)); - Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(3)); - Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(4)); - return null; - } - if (!mNameMap.containsKey(aName.toString()) && aMentionPossibleTypos) { - Logger.WARNING("Unknown Key for Unification, Typo? " + aName); - } - return GT_Utility.copyAmount( - aAmount, - new Object[] { mNameMap.get(aName.toString()), getFirstOre(aName, aAmount), aReplacement }); - } - - public static ItemStack getFirstOre(final Object aName, final long aAmount) { - if (GT_Utility.isStringInvalid(aName)) { - Logger.WARNING("Returning Null. Method: " + ReflectionUtils.getMethodName(0)); - Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(1)); - Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(2)); - Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(3)); - Logger.WARNING("Called from method: " + ReflectionUtils.getMethodName(4)); - return null; - } - final ItemStack tStack = mNameMap.get(aName.toString()); - if (GT_Utility.isStackValid(tStack)) { - Logger.WARNING("Found valid stack."); - return GT_Utility.copyAmount(aAmount, new Object[] { tStack }); - } - return GT_Utility.copyAmount(aAmount, getOres(aName).toArray()); - } - - public static ArrayList getOres(final Object aOreName) { - final String aName = (aOreName == null) ? "" : aOreName.toString(); - final ArrayList rList = new ArrayList<>(); - if (GT_Utility.isStringValid(aName)) { - Logger.WARNING("Making a list of all OreDict entries for " + aOreName + "."); - if (rList.addAll(OreDictionary.getOres(aName))) { - Logger.WARNING("Added " + rList.size() + " elements to list."); - } else { - Logger.WARNING("Failed to Add Collection from oreDictionary, forcing an entry."); - rList.add(ItemUtils.getItemStackOfAmountFromOreDict((String) aOreName, 1)); - } - } - return rList; - } - - @SuppressWarnings("unchecked") - public Map getNameMap() { - Map tempMap; - try { - tempMap = (Map) FieldUtils - .readStaticField(GT_OreDictUnificator.class, "sName2StackMap", true); - if (tempMap != null) { - Logger.WARNING("Found 'sName2StackMap' in GT_OreDictUnificator.class."); - return tempMap; - } - } catch (final IllegalAccessException e) { - e.printStackTrace(); - } - Logger.WARNING("Invalid map stored in GT_OreDictUnificator.class, unable to find sName2StackMap field."); - return null; - } - - public static ItemStack getItemStackOfAmountFromOreDictNoBroken(String oredictName, final int amount) { - - try { - - if (oredictName.contains("-") || oredictName.contains("_")) { - oredictName = Utils.sanitizeString(oredictName, new char[] { '-', '_' }); - } else { - oredictName = Utils.sanitizeString(oredictName); - } - - // Adds a check to grab dusts using GT methodology if possible. - ItemStack returnValue = null; - if (oredictName.toLowerCase() - .contains("dust")) { - final String MaterialName = oredictName.toLowerCase() - .replace("dust", ""); - final Materials m = Materials.get(MaterialName); - if (m != null && m != Materials._NULL) { - returnValue = ItemUtils.getGregtechDust(m, amount); - if (ItemUtils.checkForInvalidItems(returnValue)) { - return returnValue; - } - } - } - if (returnValue == null) { - returnValue = getItemStackOfAmountFromOreDict(oredictName, amount); - if (ItemUtils.checkForInvalidItems(returnValue)) { - return returnValue.copy(); - } - } - return null; - } catch (final Throwable t) { - return null; - } - } - - public static ItemStack getItemStackOfAmountFromOreDict(String oredictName, final int amount) { - String mTemp = oredictName; - - // Banned Materials and replacements for GT5.8 compat. - - if (oredictName.toLowerCase() - .contains("ingotclay")) { - return ItemUtils.getSimpleStack(Items.clay_ball, amount); - } - - final ArrayList oreDictList = OreDictionary.getOres(mTemp); - if (!oreDictList.isEmpty()) { - final ItemStack returnValue = oreDictList.get(0) - .copy(); - returnValue.stackSize = amount; - return returnValue; - } - return null; - // return getItemStackOfAmountFromOreDictNoBroken(mTemp, amount); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_ShapedCrafting.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_ShapedCrafting.java deleted file mode 100644 index 3ef1740189..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/RecipeGen_ShapedCrafting.java +++ /dev/null @@ -1,222 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders; - -import java.util.HashSet; -import java.util.Set; - -import gregtech.api.util.GT_ModHandler; -import gtPlusPlus.api.interfaces.RunnableWithInfo; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.material.MaterialGenerator; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeGen_ShapedCrafting extends RecipeGen_Base { - - public static final Set> mRecipeGenMap = new HashSet<>(); - - static { - MaterialGenerator.mRecipeMapsToGenerate.put(mRecipeGenMap); - } - - public RecipeGen_ShapedCrafting(final Material M) { - this.toGenerate = M; - mRecipeGenMap.add(this); - } - - @Override - public void run() { - generateRecipes(this.toGenerate); - } - - private void generateRecipes(final Material material) { - Logger.WARNING("Generating Shaped Crafting recipes for " + material.getLocalizedName()); // TODO - - // Single Plate Shaped/Shapeless - if (ItemUtils.checkForInvalidItems(material.getPlate(1)) - && ItemUtils.checkForInvalidItems(material.getIngot(1))) - if (material.getPlate(1) != null && material.getIngot(1) != null) GT_ModHandler.addCraftingRecipe( - material.getPlate(1), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "h", "B", "I", Character.valueOf('I'), material.getIngot(1), Character.valueOf('B'), - material.getIngot(1) }); - - if (ItemUtils.checkForInvalidItems(material.getPlate(1)) - && ItemUtils.checkForInvalidItems(material.getIngot(1))) - GT_ModHandler.addShapelessCraftingRecipe( - material.getPlate(1), - new Object[] { gregtech.api.enums.ToolDictNames.craftingToolForgeHammer, material.getIngot(1), - material.getIngot(1) }); - - // Double Plate Shaped/Shapeless - if (ItemUtils.checkForInvalidItems(material.getPlateDouble(1)) - && ItemUtils.checkForInvalidItems(material.getPlate(1))) - GT_ModHandler.addCraftingRecipe( - material.getPlateDouble(1), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "I", "B", "h", Character.valueOf('I'), material.getPlate(1), Character.valueOf('B'), - material.getPlate(1) }); - - if (ItemUtils.checkForInvalidItems(material.getPlateDouble(1)) - && ItemUtils.checkForInvalidItems(material.getPlate(1))) - GT_ModHandler.addShapelessCraftingRecipe( - material.getPlateDouble(1), - new Object[] { gregtech.api.enums.ToolDictNames.craftingToolForgeHammer, material.getPlate(1), - material.getPlate(1) }); - - // Ring Recipe - if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getRing(1)) - && ItemUtils.checkForInvalidItems(material.getRod(1))) { - if (GT_ModHandler.addCraftingRecipe( - material.getRing(1), - GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS | GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "h ", "fR", 'R', material.getRod(1) })) { - Logger.WARNING("GT:NH Ring Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("GT:NH Ring Recipe: " + material.getLocalizedName() + " - Failed"); - } - } - - // Framebox Recipe - if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getFrameBox(1)) - && ItemUtils.checkForInvalidItems(material.getRod(1))) { - if (GT_ModHandler.addCraftingRecipe( - material.getFrameBox(2), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "RRR", "RwR", "RRR", 'R', material.getRod(1) })) { - Logger.WARNING("Framebox Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("Framebox Recipe: " + material.getLocalizedName() + " - Failed"); - } - } - - // Shaped Recipe - Bolts - if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getBolt(1)) - && ItemUtils.checkForInvalidItems(material.getRod(1))) { - if (GT_ModHandler.addCraftingRecipe( - material.getBolt(2), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "s ", " R", 'R', material.getRod(1) })) { - Logger.WARNING("Bolt Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("Bolt Recipe: " + material.getLocalizedName() + " - Failed"); - } - } - - // Shaped Recipe - Fine Wire - if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getFoil(1)) - && ItemUtils.checkForInvalidItems(material.getFineWire(1))) { - if (GT_ModHandler.addCraftingRecipe( - material.getFineWire(1), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "Fx", 'F', material.getFoil(1) })) { - Logger.WARNING("Fine Wire Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("Fine Wire Recipe: " + material.getLocalizedName() + " - Failed"); - } - } - - // Shaped Recipe - Foil - if (ItemUtils.checkForInvalidItems(material.getFoil(1)) - && ItemUtils.checkForInvalidItems(material.getPlate(1))) { - if (GT_ModHandler.addCraftingRecipe( - material.getFoil(2), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "hP", 'P', material.getPlate(1) })) { - Logger.WARNING("Foil Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("Foil Recipe: " + material.getLocalizedName() + " - Failed"); - } - } - - // Shaped Recipe - Ingot to Rod - if (ItemUtils.checkForInvalidItems(material.getRod(1)) && ItemUtils.checkForInvalidItems(material.getIngot(1))) - if (GT_ModHandler.addCraftingRecipe( - material.getRod(1), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "f ", " I", 'I', material.getIngot(1) })) { - Logger.WARNING("Rod Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("Rod Recipe: " + material.getLocalizedName() + " - Failed"); - } - - // Shaped Recipe - Long Rod to two smalls - if (ItemUtils.checkForInvalidItems(material.getRod(1)) - && ItemUtils.checkForInvalidItems(material.getLongRod(1))) - if (GT_ModHandler.addCraftingRecipe( - material.getRod(2), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "s", "L", 'L', material.getLongRod(1) })) { - Logger.WARNING("Rod Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("Rod Recipe: " + material.getLocalizedName() + " - Failed"); - } - - // Two small to long rod - if (ItemUtils.checkForInvalidItems(material.getLongRod(1)) - && ItemUtils.checkForInvalidItems(material.getRod(1))) - if (GT_ModHandler.addCraftingRecipe( - material.getLongRod(1), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "RhR", 'R', material.getRod(1) })) { - Logger.WARNING("Long Rod Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("Long Rod Recipe: " + material.getLocalizedName() + " - Failed"); - } - - // 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 (GT_ModHandler.addCraftingRecipe( - material.getRotor(1), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "PhP", "SRf", "PdP", 'P', material.getPlate(1), 'S', material.getScrew(1), 'R', - material.getRing(1), })) { - Logger.WARNING("Rotor Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("Rotor Recipe: " + material.getLocalizedName() + " - Failed"); - } - } - - // Gear Recipe - if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getGear(1)) - && ItemUtils.checkForInvalidItems(material.getPlate(1)) - && ItemUtils.checkForInvalidItems(material.getRod(1))) { - if (GT_ModHandler.addCraftingRecipe( - material.getGear(1), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "RPR", "PwP", "RPR", 'P', material.getPlate(1), 'R', material.getRod(1), })) { - Logger.WARNING("Gear Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("Gear Recipe: " + material.getLocalizedName() + " - Failed"); - } - } - - // Screws - if (!material.isRadioactive && ItemUtils.checkForInvalidItems(material.getScrew(1)) - && ItemUtils.checkForInvalidItems(material.getBolt(1))) { - if (GT_ModHandler.addCraftingRecipe( - material.getScrew(1), - gregtech.api.util.GT_ModHandler.RecipeBits.DO_NOT_CHECK_FOR_COLLISIONS - | gregtech.api.util.GT_ModHandler.RecipeBits.BUFFERED, - new Object[] { "fB", "B ", 'B', material.getBolt(1), })) { - Logger.WARNING("Screw Recipe: " + material.getLocalizedName() + " - Success"); - } else { - Logger.WARNING("Screw Recipe: " + material.getLocalizedName() + " - Failed"); - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/misc/AddCustomMachineToPA.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/misc/AddCustomMachineToPA.java index aab24db6d3..0f19131855 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/misc/AddCustomMachineToPA.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/misc/AddCustomMachineToPA.java @@ -1,6 +1,6 @@ package gtPlusPlus.xmod.gregtech.loaders.misc; -import gregtech.api.util.GT_ProcessingArray_Manager; +import gregtech.api.util.ProcessingArrayManager; import gtPlusPlus.api.recipe.GTPPRecipeMaps; public class AddCustomMachineToPA { @@ -8,6 +8,6 @@ public class AddCustomMachineToPA { public static void register() { // Simple Washers - GT_ProcessingArray_Manager.addRecipeMapToPA("simplewasher.01", GTPPRecipeMaps.simpleWasherRecipes); + ProcessingArrayManager.addRecipeMapToPA("simplewasher.01", GTPPRecipeMaps.simpleWasherRecipes); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderAlgaeFarm.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderAlgaeFarm.java new file mode 100644 index 0000000000..bfa8b6d1b1 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderAlgaeFarm.java @@ -0,0 +1,192 @@ +package gtPlusPlus.xmod.gregtech.loaders.recipe; + +import java.util.HashMap; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTRecipe; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.api.objects.data.WeightedCollection; +import gtPlusPlus.core.item.chemistry.AgriculturalChem; +import gtPlusPlus.core.util.math.MathUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeLoaderAlgaeFarm { + + private static final HashMap> mRecipeCache = new HashMap<>(); + private static final HashMap> mRecipeCompostCache = new HashMap<>(); + + public static void generateRecipes() { + for (int i = 0; i < 15; i++) { + getTieredRecipeFromCache(i, false); + } + for (int i = 0; i < 15; i++) { + getTieredRecipeFromCache(i, true); + } + } + + public static GTRecipe getTieredRecipeFromCache(int aTier, boolean aCompost) { + HashMap> aMap = aCompost ? mRecipeCompostCache : mRecipeCache; + String aComp = aCompost ? "(Compost)" : ""; + + AutoMap aTemp = aMap.get(aTier); + if (aTemp == null || aTemp.isEmpty()) { + aTemp = new AutoMap<>(); + aMap.put(aTier, aTemp); + Logger.INFO("Tier " + aTier + aComp + " had no recipes, initialising new map."); + } + if (aTemp.size() < 500) { + Logger + .INFO("Tier " + aTier + aComp + " has less than 500 recipes, generating " + (500 - aTemp.size()) + "."); + for (int i = aTemp.size(); i < 500; i++) { + aTemp.put(generateBaseRecipe(aCompost, aTier)); + } + } + int aIndex = MathUtils.randInt(0, aTemp.isEmpty() ? 1 : aTemp.size()); + Logger.INFO("Using recipe with index of " + aIndex + ". " + aComp); + return aTemp.get(aIndex); + } + + public static int compostForTier(int aTier) { + return aTier > 1 ? (int) Math.min(64, Math.pow(2, aTier - 1)) : 1; + } + + private static GTRecipe generateBaseRecipe(boolean aUsingCompost, int aTier) { + + // Type Safety + if (aTier < 0) { + return null; + } + + WeightedCollection aOutputTimeMulti = new WeightedCollection<>(); + for (int i = 100; i > 0; i--) { + float aValue = 0; + if (i < 10) { + aValue = 3f; + } else if (i < 20) { + aValue = 2f; + } else { + aValue = 1f; + } + aOutputTimeMulti.put(i, aValue); + } + + final int[] aDurations = new int[] { 2000, 1800, 1600, 1400, 1200, 1000, 512, 256, 128, 64, 32, 16, 8, 4, 2, + 1 }; + + ItemStack[] aInputs = new ItemStack[] {}; + + if (aUsingCompost) { + // Make it use 4 compost per tier if we have some available + // Compost consumption maxes out at 1 stack per cycle + ItemStack aCompost = ItemUtils.getSimpleStack(AgriculturalChem.mCompost, compostForTier(aTier)); + aInputs = new ItemStack[] { aCompost }; + // Boost Tier by one if using compost so it gets a speed boost + aTier++; + } + + // We set these elsewhere + ItemStack[] aOutputs = getOutputsForTier(aTier); + + GTRecipe tRecipe = new GTRecipe( + false, + aInputs, + aOutputs, + (Object) null, + new int[] {}, + new FluidStack[] { GTValues.NF }, + new FluidStack[] { GTValues.NF }, + (int) (aDurations[aTier] * aOutputTimeMulti.get() / 2), // Time + 0, + 0); + + tRecipe.mSpecialValue = tRecipe.hashCode(); + + return tRecipe; + } + + private static ItemStack[] getOutputsForTier(int aTier) { + + // Create an Automap to dump contents into + AutoMap aOutputMap = new AutoMap<>(); + + // Add loot relevant to tier and also add any from lower tiers. + + if (aTier >= 0) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 2)); + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 4)); + if (MathUtils.randInt(0, 10) > 9) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 2)); + } + } + + if (aTier >= 1) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 4)); + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 2)); + if (MathUtils.randInt(0, 10) > 9) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 4)); + } + } + if (aTier >= 2) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 2)); + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 3)); + if (MathUtils.randInt(0, 10) > 9) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 8)); + } + } + if (aTier >= 3) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 4)); + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 1)); + if (MathUtils.randInt(0, 10) > 9) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 4)); + } + } + if (aTier >= 4) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 2)); + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 3)); + if (MathUtils.randInt(0, 10) > 9) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, 4)); + } + } + if (aTier >= 5) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 4)); + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, 2)); + if (MathUtils.randInt(0, 10) > 9) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, 4)); + } + } + // Tier 6 is Highest for outputs + if (aTier >= 6) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, 4)); + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, 2)); + if (MathUtils.randInt(0, 10) > 9) { + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, 8)); + } + } + + // Iterate a special loop at higher tiers to provide more Red/Gold Algae. + for (int i2 = 0; i2 < 20; i2++) { + if (aTier >= (6 + i2)) { + int aMulti = i2 + 1; + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, aMulti * 4)); + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, aMulti * 3)); + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, aMulti * 2)); + aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, aMulti)); + } else { + i2 = 20; + } + } + + // Map the AutoMap contents to an Itemstack Array. + ItemStack[] aOutputs = new ItemStack[aOutputMap.size()]; + for (int i = 0; i < aOutputMap.size(); i++) { + aOutputs[i] = aOutputMap.get(i); + } + + // Return filled ItemStack Array. + return aOutputs; + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderChemicalSkips.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderChemicalSkips.java new file mode 100644 index 0000000000..b3f7f27c56 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderChemicalSkips.java @@ -0,0 +1,822 @@ +package gtPlusPlus.xmod.gregtech.loaders.recipe; + +import static goodgenerator.loader.Loaders.advancedRadiationProtectionPlate; +import static gregtech.api.enums.Mods.EternalSingularity; +import static gregtech.api.enums.Mods.GalaxySpace; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.fusionRecipes; +import static gregtech.api.util.GTModHandler.getModItem; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.FUSION_THRESHOLD; +import static gregtech.api.util.GTRecipeConstants.QFT_FOCUS_TIER; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.quantumForceTransformerRecipes; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsKevlar; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.Mods; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gregtech.common.items.CombType; +import gregtech.loaders.misc.GTBees; +import gtPlusPlus.core.item.chemistry.GenericChem; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.Particle; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import gtnhlanth.common.register.WerkstoffMaterialPool; +import tectech.recipe.TTRecipeAdder; +import tectech.thing.block.BlockQuantumGlass; + +public class RecipeLoaderChemicalSkips { + + public static void generate() { + createRecipes(); + } + + private static void createRecipes() { + quantumTransformerRecipes(); + fusionReactorRecipes(); + catalystRecipes(); + tieredCasingRecipes(); + } + + // All the recipes that the QFT can do. Each recipe has a machine tier. + // -> Tier 1 is UEV (UEV circuits and 1 Eternal Singularity); + // -> Tier 2 needs new item from QFT, plus stacks of Infinity; + // -> Tier 3 needs new item from QFT, plus stacks of Transcendent Metal; + // -> Tier 4 needs new item from QFT, plus stacks of Spacetime; + // (Until they are created, the new items are represented by + // HSS-G for Tier 2, HSS-S for Tier 3 and HSS-E for Tier 4) + + private static void quantumTransformerRecipes() { + ItemStack stemcells = GTUtility.copyAmountUnsafe(64 * 32, ItemList.Circuit_Chip_Stemcell.get(1)); + ItemStack biocells = GTUtility.copyAmountUnsafe(64 * 32, ItemList.Circuit_Chip_Biocell.get(1)); + // Platline + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffLoader.PTMetallicPowder.get(OrePrefixes.dust, 32), + ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) + .itemOutputs( + Materials.Platinum.getDust(64), + Materials.Palladium.getDust(64), + Materials.Iridium.getDust(64), + Materials.Osmium.getDust(64), + WerkstoffLoader.Rhodium.get(OrePrefixes.dust, 64), + WerkstoffLoader.Ruthenium.get(OrePrefixes.dust, 64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + // Partial platline (from Pd, Os, Ir, Rh and leach) + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffLoader.PDMetallicPowder.get(OrePrefixes.dust, 32), + ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) + .itemOutputs( + Materials.Palladium.getDust(64), + Materials.Platinum.getDust(64), + WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.dust, 64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffLoader.IrLeachResidue.get(OrePrefixes.dust, 32), + ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) + .itemOutputs( + Materials.Iridium.getDust(64), + Materials.Platinum.getDust(64), + Materials.Osmiridium.getDust(64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffLoader.IrOsLeachResidue.get(OrePrefixes.dust, 32), + ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) + .itemOutputs(Materials.Osmium.getDust(64), Materials.Iridium.getDust(64), Materials.Osmiridium.getDust(64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffLoader.CrudeRhMetall.get(OrePrefixes.dust, 32), + ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) + .itemOutputs( + WerkstoffLoader.Rhodium.get(OrePrefixes.dust, 64), + Materials.Palladium.getDust(64), + Materials.Platinum.getDust(64), + WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.dust, 64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffLoader.LeachResidue.get(OrePrefixes.dust, 32), + ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) + .itemOutputs( + Materials.Iridium.getDust(64), + Materials.Osmium.getDust(64), + WerkstoffLoader.Rhodium.get(OrePrefixes.dust, 64), + WerkstoffLoader.Ruthenium.get(OrePrefixes.dust, 64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + // Early Plastics + GTValues.RA.stdBuilder() + .itemInputs(Materials.Carbon.getDust(64), ItemUtils.getSimpleStack(GenericChem.mPlasticPolymerCatalyst, 0)) + .fluidInputs( + Materials.Oxygen.getGas(1000 * 16), + Materials.Hydrogen.getGas(1000 * 16), + Materials.Chlorine.getGas(1000 * 16), + Materials.Fluorine.getGas(1000 * 16)) + .fluidOutputs( + Materials.Plastic.getMolten(144 * 256), + Materials.PolyvinylChloride.getMolten(144 * 128), + Materials.Polystyrene.getMolten(144 * 64), + Materials.Polytetrafluoroethylene.getMolten(144 * 128), + Materials.Epoxid.getMolten(144 * 64), + Materials.Polybenzimidazole.getMolten(144 * 64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + // Early Rubbers/Cable Materials + GTValues.RA.stdBuilder() + .itemInputs(Materials.Carbon.getDust(64), ItemUtils.getSimpleStack(GenericChem.mRubberPolymerCatalyst, 0)) + .fluidInputs( + Materials.Oxygen.getGas(1000 * 16), + Materials.Hydrogen.getGas(1000 * 16), + Materials.Chlorine.getGas(1000 * 16)) + .fluidOutputs( + Materials.Silicone.getMolten(144 * 64), + Materials.StyreneButadieneRubber.getMolten(144 * 64), + Materials.PolyphenyleneSulfide.getMolten(144 * 128), + Materials.Rubber.getMolten(144 * 256)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + // Glues and Solders + GTValues.RA.stdBuilder() + .itemInputs( + Materials.Carbon.getDust(32), + Materials.Bismuth.getDust(32), + ItemUtils.getSimpleStack(GenericChem.mAdhesionPromoterCatalyst, 0)) + .itemOutputs(ItemList.StableAdhesive.get(1)) + .fluidInputs(Materials.Oxygen.getGas(10000), Materials.Hydrogen.getGas(10000)) + .fluidOutputs( + MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(1000 * 32), + Materials.AdvancedGlue.getFluid(1000 * 16), + MaterialsAlloy.INDALLOY_140.getFluidStack(144 * 64), + Materials.SolderingAlloy.getMolten(144 * 128)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + // Titanium, Tungsten, Indium + GTValues.RA.stdBuilder() + .itemInputs( + Materials.Lead.getDust(16), + Materials.Bauxite.getDust(32), + Materials.Tungstate.getDust(16), + ItemUtils.getSimpleStack(GenericChem.mTitaTungstenIndiumCatalyst, 0)) + .itemOutputs( + Materials.Titanium.getDust(64), + Materials.TungstenSteel.getDust(64), + Materials.TungstenCarbide.getDust(64), + Materials.Indium.getDust(64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + // Thorium, Uranium, Plutonium + GTValues.RA.stdBuilder() + .itemInputs( + Materials.Thorium.getDust(32), + Materials.Uranium.getDust(32), + ItemUtils.getSimpleStack(GenericChem.mRadioactivityCatalyst, 0)) + .itemOutputs( + MaterialsElements.getInstance().THORIUM232.getDust(64), + MaterialsElements.getInstance().URANIUM233.getDust(64), + Materials.Uranium235.getDust(64), + MaterialsElements.getInstance().PLUTONIUM238.getDust(64), + Materials.Plutonium.getDust(64), + Materials.Plutonium241.getDust(64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + // Monaline + GTValues.RA.stdBuilder() + .itemInputs( + Materials.Monazite.getDust(32), + ItemUtils.getSimpleStack(GenericChem.mRareEarthGroupCatalyst, 0)) + .itemOutputs( + Materials.Cerium.getDust(64), + Materials.Gadolinium.getDust(64), + Materials.Samarium.getDust(64), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.dust), 64, 11002), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.dust), 64, 11007), + ItemList.SuperconductorComposite.get(1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .metadata(QFT_FOCUS_TIER, 2) + .addTo(quantumForceTransformerRecipes); + // Bastline + GTValues.RA.stdBuilder() + .itemInputs( + Materials.Bastnasite.getDust(32), + ItemUtils.getSimpleStack(GenericChem.mRareEarthGroupCatalyst, 0)) + .itemOutputs( + Materials.Holmium.getDust(64), + Materials.Cerium.getDust(64), + Materials.Samarium.getDust(64), + Materials.Gadolinium.getDust(64), + Materials.Lanthanum.getDust(64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .metadata(QFT_FOCUS_TIER, 2) + .addTo(quantumForceTransformerRecipes); + // Bastline from Cerium-rich mixture + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 16), + ItemUtils.getSimpleStack(GenericChem.mRareEarthGroupCatalyst, 0)) + .itemOutputs( + Materials.Holmium.getDust(64), + Materials.Cerium.getDust(64), + Materials.Samarium.getDust(64), + Materials.Gadolinium.getDust(64), + Materials.Lanthanum.getDust(64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .metadata(QFT_FOCUS_TIER, 2) + .addTo(quantumForceTransformerRecipes); + // Early Waterline skip (first 4 tiers) + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(GenericChem.mLimpidWaterCatalyst, 0)) + .fluidInputs(Materials.Water.getFluid(40000L)) + .fluidOutputs( + Materials.Grade1PurifiedWater.getFluid(20000L), + Materials.Grade2PurifiedWater.getFluid(10000L), + Materials.Grade3PurifiedWater.getFluid(5000L), + Materials.Grade4PurifiedWater.getFluid(1000L)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .metadata(QFT_FOCUS_TIER, 2) + .addTo(quantumForceTransformerRecipes); + // Stem Cells + GTValues.RA.stdBuilder() + .itemInputs( + Materials.Calcium.getDust(32), + Materials.MeatRaw.getDust(32), + getModItem(NewHorizonsCoreMod.ID, "GTNHBioItems", 32, 2), + ItemUtils.getSimpleStack(GenericChem.mRawIntelligenceCatalyst, 0)) + .itemOutputs(stemcells) + .fluidOutputs( + Materials.GrowthMediumRaw.getFluid(1000 * 1024), + Materials.GrowthMediumSterilized.getFluid(1000 * 512)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .metadata(QFT_FOCUS_TIER, 3) + .addTo(quantumForceTransformerRecipes); + // Unknown Particles + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(GenericChem.mParticleAccelerationCatalyst, 0)) + .itemOutputs( + Particle.getBaseParticle(Particle.UNKNOWN), + Particle.getBaseParticle(Particle.GRAVITON), + Particle.getBaseParticle(Particle.PROTON), + Particle.getBaseParticle(Particle.ELECTRON)) + .fluidInputs(Materials.Hydrogen.getGas(10000L), Materials.Deuterium.getGas(1000L)) + .fluidOutputs(FluidUtils.getFluidStack("plasma.hydrogen", 1000)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .metadata(QFT_FOCUS_TIER, 3) + .addTo(quantumForceTransformerRecipes); + // Lategame Plastics (Missing Radox Polymer and Heavy Radox) + GTValues.RA.stdBuilder() + .itemInputs( + Materials.Carbon.getDust(64), + Materials.Osmium.getDust(24), + ItemUtils.getSimpleStack(GenericChem.mUltimatePlasticCatalyst, 0)) + .fluidInputs(Materials.Hydrogen.getGas(1000 * 16), Materials.Nitrogen.getGas(1000 * 16)) + .fluidOutputs( + FluidUtils.getFluidStack("xenoxene", 1000 * 16), + FluidUtils.getFluidStack("molten.radoxpoly", 144 * 64), + FluidUtils.getFluidStack("heavyradox", 1000 * 16), + MaterialsKevlar.Kevlar.getMolten(144 * 64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .metadata(QFT_FOCUS_TIER, 4) + .addTo(quantumForceTransformerRecipes); + if (Mods.Forestry.isModLoaded()) { + // Lategame Kevlar using Kevlar bee comb + GTValues.RA.stdBuilder() + .itemInputs( + GTBees.combs.getStackForType(CombType.KEVLAR, 24), + Materials.Carbon.getDust(64), + ItemUtils.getSimpleStack(GenericChem.mUltimatePlasticCatalyst, 0)) + .fluidInputs(Materials.Nitrogen.getGas(1000 * 16), Materials.Hydrogen.getGas(1000 * 16)) + .fluidOutputs( + MaterialsKevlar.PolyurethaneResin.getFluid(1000 * 32), + MaterialsKevlar.LiquidCrystalKevlar.getFluid(144 * 32), + MaterialsKevlar.Kevlar.getMolten(144 * 64)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .metadata(QFT_FOCUS_TIER, 4) + .addTo(quantumForceTransformerRecipes); + // Platline skip using Platline Combs (Palladium, Osmium, Iridium, Platinum) + GTValues.RA.stdBuilder() + .itemInputs( + GTBees.combs.getStackForType(CombType.PLATINUM, 32), + GTBees.combs.getStackForType(CombType.PALLADIUM, 32), + GTBees.combs.getStackForType(CombType.OSMIUM, 32), + GTBees.combs.getStackForType(CombType.IRIDIUM, 32), + ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) + .fluidOutputs( + Materials.Osmium.getMolten(144 * 256), + Materials.Palladium.getMolten(144 * 256), + Materials.Iridium.getMolten(144 * 256), + Materials.Platinum.getMolten(144 * 256)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .metadata(QFT_FOCUS_TIER, 1) + .addTo(quantumForceTransformerRecipes); + } + // Bio Cells and Mutated Solder + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Circuit_Chip_Stemcell.get(16), + Materials.InfinityCatalyst.getDust(4), + ItemUtils.getSimpleStack(GenericChem.mBiologicalIntelligenceCatalyst, 0)) + .itemOutputs(biocells) + .fluidOutputs( + MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(144 * 128), + Materials.BioMediumSterilized.getFluid(1000 * 256), + Materials.BioMediumRaw.getFluid(1000 * 512)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .metadata(QFT_FOCUS_TIER, 4) + .addTo(quantumForceTransformerRecipes); + // Advanced Waterline skip (last 4 tiers) + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(GenericChem.mFlawlessWaterCatalyst, 0)) + .fluidInputs(Materials.Water.getFluid(40000L)) + .fluidOutputs( + Materials.Grade5PurifiedWater.getFluid(20000L), + Materials.Grade6PurifiedWater.getFluid(10000L), + Materials.Grade7PurifiedWater.getFluid(5000L), + Materials.Grade8PurifiedWater.getFluid(1000L)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .metadata(QFT_FOCUS_TIER, 4) + .addTo(quantumForceTransformerRecipes); + // Rare Particles + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getSimpleStack(GenericChem.mSynchrotronCapableCatalyst, 0), + GregtechItemList.Laser_Lens_Special.get(1)) + .itemOutputs( + Particle.getBaseParticle(Particle.Z_BOSON), + Particle.getBaseParticle(Particle.W_BOSON), + Particle.getBaseParticle(Particle.LAMBDA), + Particle.getBaseParticle(Particle.OMEGA), + Particle.getBaseParticle(Particle.HIGGS_BOSON)) + .fluidInputs( + FluidUtils.getFluidStack("plasma.hydrogen", 30000), + Materials.Helium.getPlasma(30000L), + Materials.Americium.getPlasma(30000L), + new FluidStack(MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 30000)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .metadata(QFT_FOCUS_TIER, 4) + .addTo(quantumForceTransformerRecipes); + + if (GalaxySpace.isModLoaded()) { + // Seaweed + ItemStack seaweed = GTUtility + .copyAmountUnsafe(64 * 32, getModItem(GalaxySpace.ID, "tcetiedandelions", 1, 4)); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get("cropSeaweed", 64), + Materials.Mytryl.getDust(16), + ItemUtils.getSimpleStack(GenericChem.mAlgagenicGrowthPromoterCatalyst, 0)) + .itemOutputs(seaweed, getModItem(NewHorizonsCoreMod.ID, "item.TCetiESeaweedExtract", 16)) + .fluidInputs(FluidUtils.getFluidStack("unknowwater", 25_000)) + .fluidOutputs( + FluidUtils.getFluidStack("seaweedbroth", 50_000), + FluidUtils.getFluidStack("iodine", 64_000)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .metadata(QFT_FOCUS_TIER, 4) + .addTo(quantumForceTransformerRecipes); + + } + } + + private static void fusionReactorRecipes() { + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Radon.getPlasma(100), Materials.Nitrogen.getPlasma(100)) + .fluidOutputs(new FluidStack(MaterialsElements.getInstance().NEPTUNIUM.getPlasma(), 100)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .metadata(FUSION_THRESHOLD, 1_000_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Americium.getPlasma(100), Materials.Boron.getPlasma(100)) + .fluidOutputs(new FluidStack(MaterialsElements.getInstance().FERMIUM.getPlasma(), 100)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .metadata(FUSION_THRESHOLD, 1_000_000_000) + .addTo(fusionRecipes); + + // MK5 versions + GTValues.RA.stdBuilder() + .fluidInputs( + new FluidStack(MaterialsElements.getInstance().XENON.getPlasma(), 288), + Materials.Yttrium.getMolten(288)) + .fluidOutputs(new FluidStack(MaterialsElements.getInstance().NEPTUNIUM.getPlasma(), 288)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(TierEU.RECIPE_UEV) + .metadata(FUSION_THRESHOLD, 1_000_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs( + new FluidStack(MaterialsElements.STANDALONE.FORCE.getPlasma(), 288), + Materials.Rubidium.getMolten(288)) + .fluidOutputs(new FluidStack(MaterialsElements.getInstance().FERMIUM.getPlasma(), 288)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(TierEU.RECIPE_UEV) + .metadata(FUSION_THRESHOLD, 1_000_000_000) + .addTo(fusionRecipes); + } + + private static void catalystRecipes() { + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.dust), 64, 88), + Materials.Osmiridium.getDust(64), + Materials.Carbon.getNanite(64)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 1)) + .fluidInputs(MaterialsElements.STANDALONE.HYPOGEN.getFluidStack(360)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + Materials.Polybenzimidazole.getDust(64), + Materials.Polytetrafluoroethylene.getDust(64), + Materials.Carbon.getNanite(64)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mPlasticPolymerCatalyst, 1)) + .fluidInputs(MaterialsElements.STANDALONE.HYPOGEN.getFluidStack(360)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + Materials.Silicone.getDust(64), + Materials.StyreneButadieneRubber.getDust(64), + Materials.Carbon.getNanite(64)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mRubberPolymerCatalyst, 1)) + .fluidInputs(MaterialsElements.STANDALONE.HYPOGEN.getFluidStack(360)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + MaterialsAlloy.INDALLOY_140.getDust(64), + MaterialMisc.ETHYL_CYANOACRYLATE.getCell(64), + Materials.Carbon.getNanite(64)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mAdhesionPromoterCatalyst, 1)) + .fluidInputs(MaterialsElements.STANDALONE.HYPOGEN.getFluidStack(360)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + Materials.TungstenSteel.getDust(64), + Materials.Indium.getDust(64), + Materials.Carbon.getNanite(64)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mTitaTungstenIndiumCatalyst, 1)) + .fluidInputs(MaterialsElements.STANDALONE.HYPOGEN.getFluidStack(360)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + MaterialsElements.getInstance().URANIUM235.getDust(64), + MaterialsElements.getInstance().PLUTONIUM241.getDust(64), + Materials.Carbon.getNanite(64)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mRadioactivityCatalyst, 1)) + .fluidInputs(MaterialsElements.STANDALONE.HYPOGEN.getFluidStack(360)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + Materials.Samarium.getDust(64), + Materials.Gadolinium.getDust(64), + Materials.Silver.getNanite(1)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mRareEarthGroupCatalyst, 1)) + .fluidInputs(MaterialsElements.STANDALONE.HYPOGEN.getFluidStack(9216)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + Materials.Naquadah.getDust(64), + Materials.Adamantium.getDust(64), + Materials.Silver.getNanite(1)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mSimpleNaquadahCatalyst, 1)) + .fluidInputs(MaterialsElements.STANDALONE.HYPOGEN.getFluidStack(9216)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + Materials.Naquadria.getDust(64), + Materials.Trinium.getDust(64), + Materials.Gold.getNanite(1)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mAdvancedNaquadahCatalyst, 1)) + .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(9216L)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + ItemList.Circuit_Chip_Stemcell.get(64), + Materials.Gold.getNanite(1)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mRawIntelligenceCatalyst, 1)) + .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(9216L)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + GregtechItemList.Laser_Lens_Special.get(64), + GTModHandler.getModItem(EternalSingularity.ID, "eternal_singularity", 10)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mParticleAccelerationCatalyst, 1)) + .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(9216L)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + MaterialsKevlar.Kevlar.getDust(64), + MaterialsUEVplus.TranscendentMetal.getNanite(1)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mUltimatePlasticCatalyst, 1)) + .fluidInputs(FluidUtils.getFluidStack("molten.shirabon", 92160)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + ItemList.Circuit_Chip_Biocell.get(64), + MaterialsUEVplus.TranscendentMetal.getNanite(1)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mBiologicalIntelligenceCatalyst, 1)) + .fluidInputs(FluidUtils.getFluidStack("molten.shirabon", 92160)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + Particle.getBaseParticle(Particle.HIGGS_BOSON), + Particle.getIon("Helium", 0), + Particle.getIon("Hydrogen", 0), + MaterialsUEVplus.Eternity.getNanite(16)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mSynchrotronCapableCatalyst, 1)) + .fluidInputs(FluidUtils.getFluidStack("molten.shirabon", 92160)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + GTOreDictUnificator.get("blockShirabon", 16), + MaterialsUEVplus.Universium.getNanite(1), + ItemList.Timepiece.get(1)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.TemporalHarmonyCatalyst, 1)) + .fluidInputs(Materials.DarkIron.getMolten(92160)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(10), + CI.getEmptyCatalyst(1), + getModItem(NewHorizonsCoreMod.ID, "item.TCetiESeaweedExtract", 64), + GTOreDictUnificator.get("dustIodine", 64), + MaterialsUEVplus.TranscendentMetal.getNanite(1)) + .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mAlgagenicGrowthPromoterCatalyst, 1)) + .fluidInputs(FluidUtils.getFluidStack("molten.shirabon", 92_160)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + } + + private static void tieredCasingRecipes() { + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.ForceFieldGlass.get(1), + 1024 * 30 * 20, + 1024, + (int) TierEU.RECIPE_ZPM, + 32, + new ItemStack[] { GregtechItemList.ForceFieldGlass.get(1), Materials.Carbon.getNanite(4), + ItemList.Emitter_UV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 8), + GregtechItemList.Laser_Lens_Special.get(1), new ItemStack(advancedRadiationProtectionPlate, 2) }, + new FluidStack[] { Materials.Thulium.getMolten(144 * 10), MaterialsUEVplus.ExcitedDTCC.getFluid(5000), + new FluidStack(MaterialsElements.getInstance().NEPTUNIUM.getPlasma(), 500), + new FluidStack(MaterialsElements.getInstance().FERMIUM.getPlasma(), 500) }, + GregtechItemList.NeutronPulseManipulator.get(1), + 60 * 20, + (int) TierEU.RECIPE_UEV); + + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.NeutronPulseManipulator.get(1), + 2048 * 30 * 20, + 2048, + (int) TierEU.RECIPE_UV, + 32, + new ItemStack[] { GregtechItemList.ForceFieldGlass.get(2), Materials.Carbon.getNanite(8), + ItemList.Emitter_UEV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUEV, 8), + GregtechItemList.Laser_Lens_Special.get(1), new ItemStack(advancedRadiationProtectionPlate, 4), + ItemList.StableAdhesive.get(4) }, + new FluidStack[] { Materials.Thulium.getMolten(144 * 12), MaterialsUEVplus.ExcitedDTPC.getFluid(5000), + new FluidStack(MaterialsElements.getInstance().NEPTUNIUM.getPlasma(), 2500), + new FluidStack(MaterialsElements.getInstance().FERMIUM.getPlasma(), 2500) }, + GregtechItemList.CosmicFabricManipulator.get(1), + 75 * 20, + (int) TierEU.RECIPE_UIV); + + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.CosmicFabricManipulator.get(1), + 4096 * 30 * 20, + 4096, + (int) TierEU.RECIPE_ZPM, + 32, + new ItemStack[] { GregtechItemList.ForceFieldGlass.get(4), Materials.Carbon.getNanite(16), + ItemList.Emitter_UIV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 8), + GregtechItemList.Laser_Lens_Special.get(1), new ItemStack(advancedRadiationProtectionPlate, 8), + ItemList.SuperconductorComposite.get(4) }, + new FluidStack[] { Materials.Thulium.getMolten(144 * 15), MaterialsUEVplus.ExcitedDTRC.getFluid(5000), + new FluidStack(MaterialsElements.getInstance().NEPTUNIUM.getPlasma(), 1000 * 10), + new FluidStack(MaterialsElements.getInstance().FERMIUM.getPlasma(), 1000 * 10) }, + GregtechItemList.InfinityInfusedManipulator.get(1), + 90 * 20, + (int) TierEU.RECIPE_UMV); + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.InfinityInfusedManipulator.get(1), + 1024 * 30 * 20, + 1024, + (int) TierEU.RECIPE_ZPM, + 32, + new ItemStack[] { GregtechItemList.ForceFieldGlass.get(8), Materials.Carbon.getNanite(32), + ItemList.Emitter_UMV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 8), + GregtechItemList.Laser_Lens_Special.get(1), new ItemStack(advancedRadiationProtectionPlate, 16), + ItemList.NaquadriaSupersolid.get(4) }, + new FluidStack[] { Materials.Thulium.getMolten(144 * 20), MaterialsUEVplus.ExcitedDTEC.getFluid(5000), + new FluidStack(MaterialsElements.getInstance().NEPTUNIUM.getPlasma(), 2000 * 10), + new FluidStack(MaterialsElements.getInstance().FERMIUM.getPlasma(), 2000 * 10) }, + GregtechItemList.SpaceTimeContinuumRipper.get(1), + 60 * 20, + (int) TierEU.RECIPE_UXV); + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Casing_AdvancedRadiationProof.get(1), + 1024 * 30 * 20, + 1024, + (int) TierEU.RECIPE_ZPM, + 32, + new ItemStack[] { MaterialsAlloy.QUANTUM.getFrameBox(1), + GTOreDictUnificator.get("plateDensePreciousMetalsAlloy", 4), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Neutronium, 16), + ItemList.Field_Generator_UV.get(1), MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getScrew(16) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(144 * 10), }, + GregtechItemList.NeutronShieldingCore.get(1), + 60 * 20, + (int) TierEU.RECIPE_UEV); + + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.NeutronShieldingCore.get(1), + 2048 * 30 * 20, + 2048, + (int) TierEU.RECIPE_UV, + 32, + new ItemStack[] { MaterialsAlloy.QUANTUM.getFrameBox(2), + GTOreDictUnificator.get("plateDenseEnrichedNaquadahAlloy", 4), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 16), + ItemList.Field_Generator_UEV.get(1), + // Radox polymer screw. + GTOreDictUnificator.get(OrePrefixes.screw, Materials.get("RadoxPoly"), 16), + ItemList.StableAdhesive.get(4) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(144 * 20), }, + GregtechItemList.CosmicFabricShieldingCore.get(1), + 75 * 20, + (int) TierEU.RECIPE_UIV); + + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.CosmicFabricShieldingCore.get(1), + 4096 * 30 * 20, + 4096, + (int) TierEU.RECIPE_UHV, + 32, + new ItemStack[] { MaterialsAlloy.QUANTUM.getFrameBox(4), + MaterialsElements.STANDALONE.HYPOGEN.getPlateDense(4), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 16), + ItemList.Field_Generator_UIV.get(1), GTOreDictUnificator.get("screwMetastableOganesson", 16), + ItemList.SuperconductorComposite.get(4) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(144 * 40), }, + GregtechItemList.InfinityInfusedShieldingCore.get(1), + 90 * 20, + (int) TierEU.RECIPE_UMV); + + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.InfinityInfusedShieldingCore.get(1), + 8192 * 30 * 20, + 8192, + (int) TierEU.RECIPE_UEV, + 32, + new ItemStack[] { MaterialsAlloy.QUANTUM.getFrameBox(8), GTOreDictUnificator.get("plateDenseShirabon", 4), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 16), + ItemList.Field_Generator_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Dilithium, 16), + ItemList.NaquadriaSupersolid.get(4) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(144 * 80), }, + GregtechItemList.SpaceTimeBendingCore.get(1), + 120 * 20, + (int) TierEU.RECIPE_UXV); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(BlockQuantumGlass.INSTANCE, 1), + ItemList.Field_Generator_ZPM.get(1), + MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getLongRod(6), + MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getPlate(6)) + .itemOutputs(GregtechItemList.ForceFieldGlass.get(1)) + .fluidInputs(MaterialsAlloy.QUANTUM.getFluidStack(144 * 6)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderGTNH.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderGTNH.java new file mode 100644 index 0000000000..19ebb3db93 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderGTNH.java @@ -0,0 +1,56 @@ +package gtPlusPlus.xmod.gregtech.loaders.recipe; + +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.recipe.RecipeMaps.fusionRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.FUSION_THRESHOLD; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gtPlusPlus.core.material.MaterialsElements; + +public class RecipeLoaderGTNH { + + public static void generate() { + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Ball.get(0L)) + .itemOutputs(new ItemStack(Items.ender_pearl, 1, 0)) + .fluidInputs(new FluidStack(FluidRegistry.getFluid("ender"), 250)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(fluidSolidifierRecipes); + + // MK4 + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Plutonium241.getMolten(144), Materials.Helium.getGas(1000)) + .fluidOutputs(MaterialsElements.getInstance().CURIUM.getFluidStack(144)) + .duration(4 * SECONDS + 16 * TICKS) + .eut(98304) + .metadata(FUSION_THRESHOLD, 500_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(MaterialsElements.getInstance().CURIUM.getFluidStack(144), Materials.Helium.getPlasma(144)) + .fluidOutputs(MaterialsElements.getInstance().CALIFORNIUM.getFluidStack(144)) + .duration(6 * SECONDS + 8 * TICKS) + .eut(196608) + .metadata(FUSION_THRESHOLD, 750_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Plutonium241.getMolten(144), Materials.Calcium.getPlasma(144)) + .fluidOutputs(Materials.Flerovium.getMolten(144)) + .duration(8 * SECONDS) + .eut(196608) + .metadata(FUSION_THRESHOLD, 1_000_000_000) + .addTo(fusionRecipes); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderGlueLine.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderGlueLine.java new file mode 100644 index 0000000000..e517734008 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderGlueLine.java @@ -0,0 +1,424 @@ +package gtPlusPlus.xmod.gregtech.loaders.recipe; + +import static gregtech.api.enums.Mods.GalacticraftCore; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalReactorRecipes; +import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.CHEMPLANT_CASING_TIER; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.item.chemistry.AgriculturalChem; +import gtPlusPlus.core.item.chemistry.GenericChem; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.plugin.agrichem.BioRecipes; + +public class RecipeLoaderGlueLine { + + public static void generate() { + createRecipes(); + } + + private static void createRecipes() { + chemicalPlantRecipes(); + chemicalReactorRecipes(); + dehydratorRecipes(); + distillationTowerRecipes(); + fluidHeaterRecipes(); + mixerRecipes(); + + glueUsageRecipes(); + } + + private static void chemicalPlantRecipes() { + // CO + C3H6O2 = C4H6O3 + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(17), ItemUtils.getSimpleStack(GenericChem.mBlueCatalyst, 0)) + .fluidInputs( + FluidUtils.getFluidStack("carbonmonoxide", 1000), + FluidUtils.getFluidStack("methylacetate", 1000)) + .fluidOutputs(MaterialMisc.ACETIC_ANHYDRIDE.getFluidStack(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(CHEMPLANT_CASING_TIER, 3) + .addTo(chemicalPlantRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(18)) + .fluidInputs( + FluidUtils.getFluidStack("aceticacid", 1000), + FluidUtils.getFluidStack("chlorine", 1000), + MaterialMisc.ACETIC_ANHYDRIDE.getFluidStack(1000)) + .fluidOutputs( + MaterialMisc.CHLOROACETIC_MIXTURE.getFluidStack(1000), + MaterialMisc.ACETIC_ANHYDRIDE.getFluidStack(950)) + .duration(2 * MINUTES + 30 * SECONDS) + .eut(1000) + .metadata(CHEMPLANT_CASING_TIER, 4) + .addTo(chemicalPlantRecipes); + // Na2CO3 + NaCN + C2H3O2Cl + 2HCl = C3H3NO2 + 3NaCl + CO2 + H2O + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(19), + ItemUtils.getSimpleStack(AgriculturalChem.mSodiumCarbonate, 6), + MaterialMisc.SODIUM_CYANIDE.getDust(3)) + .itemOutputs(MaterialMisc.CYANOACETIC_ACID.getDust(9), Materials.Salt.getDust(6)) + .fluidInputs( + MaterialMisc.CHLOROACETIC_ACID.getFluidStack(1000), + FluidUtils.getFluidStack("hydrochloricacid_gt5u", 2000)) + .fluidOutputs(Materials.CarbonDioxide.getGas(1000), GTModHandler.getWater(1000)) + .duration(20 * SECONDS) + .eut(1000) + .metadata(CHEMPLANT_CASING_TIER, 4) + .addTo(chemicalPlantRecipes); + // CuSO4 + 5C3H3NO2 + 5C2H6O = CuSO4·5(H2O) + 5C5H7NO2 + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(20), + ItemUtils.getSimpleStack(GenericChem.mSolidAcidCatalyst, 0), + MaterialMisc.COPPER_SULFATE.getDust(6), + MaterialMisc.CYANOACETIC_ACID.getDust(45)) + .itemOutputs(MaterialMisc.COPPER_SULFATE_HYDRATED.getDust(11)) + .fluidInputs(Materials.Ethanol.getFluid(5000)) + .fluidOutputs(MaterialMisc.ETHYL_CYANOACETATE.getFluidStack(5000)) + .duration(8 * MINUTES + 20 * SECONDS) + .eut(6000) + .metadata(CHEMPLANT_CASING_TIER, 5) + .addTo(chemicalPlantRecipes); + // C3H3NO2 + C2H6O = C5H7NO2 + H2O + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(21), MaterialMisc.CYANOACETIC_ACID.getDust(9)) + .fluidInputs(Materials.Ethanol.getFluid(1000)) + .fluidOutputs(MaterialMisc.ETHYL_CYANOACETATE.getFluidStack(1000)) + .duration(16 * MINUTES + 40 * SECONDS) + .eut(6000) + .metadata(CHEMPLANT_CASING_TIER, 5) + .addTo(chemicalPlantRecipes); + + BioRecipes.mFormaldehyde = FluidUtils.getFluidStack("fluid.formaldehyde", 1) + .getFluid(); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(22), ItemUtils.getSimpleStack(GenericChem.mSolidAcidCatalyst, 0)) + .fluidInputs( + MaterialMisc.ETHYL_CYANOACETATE.getFluidStack(100), + FluidUtils.getFluidStack(BioRecipes.mFormaldehyde, 100)) + .fluidOutputs(MaterialMisc.CYANOACRYLATE_POLYMER.getFluidStack(100), FluidUtils.getWater(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .metadata(CHEMPLANT_CASING_TIER, 5) + .addTo(chemicalPlantRecipes); + // CH4 + NH3 + 3O = HCN + 3H2O + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(23), ItemUtils.getSimpleStack(GenericChem.mPinkCatalyst, 0)) + .fluidInputs( + FluidUtils.getFluidStack("methane", 2000), + FluidUtils.getFluidStack("ammonia", 2000), + FluidUtils.getFluidStack("oxygen", 6000)) + .fluidOutputs(MaterialMisc.HYDROGEN_CYANIDE.getFluidStack(2000), FluidUtils.getWater(6000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(CHEMPLANT_CASING_TIER, 3) + .addTo(chemicalPlantRecipes); + + } + + private static void chemicalReactorRecipes() { + // NaOH + HCN = NaCN + H2O + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(17), + ItemUtils.getItemStackOfAmountFromOreDict("dustSodiumHydroxide", 3)) + .itemOutputs(MaterialMisc.SODIUM_CYANIDE.getDust(3)) + .fluidInputs(MaterialMisc.HYDROGEN_CYANIDE.getFluidStack(1000)) + .fluidOutputs(FluidUtils.getWater(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(chemicalReactorRecipes); + + // #UniversalChemical recipemap won't generate LCR recipe if config >= 10 + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(17), + ItemUtils.getItemStackOfAmountFromOreDict("dustSodiumHydroxide", 3)) + .itemOutputs(MaterialMisc.SODIUM_CYANIDE.getDust(3)) + .fluidInputs(MaterialMisc.HYDROGEN_CYANIDE.getFluidStack(1000)) + .fluidOutputs(FluidUtils.getWater(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(multiblockChemicalReactorRecipes); + + // CaCO3 + 2HCl = CaCl2 + CO2 + H2O + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getSimpleStack(ModItems.dustCalciumCarbonate, 5), GTUtility.getIntegratedCircuit(8)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("bartworks:gt.bwMetaGenerateddust:63", 3)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(2000L)) + .fluidOutputs(Materials.CarbonDioxide.getGas(1000)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Cu + 2H2SO4 = CuSO4 + SO2 + 2H2O + // SO2 + 2H2O -> diluted sulfuric acid + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(19), ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 1)) + .itemOutputs(MaterialMisc.COPPER_SULFATE.getDust(6)) + .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 2000)) + .fluidOutputs(FluidUtils.getFluidStack("dilutedsulfuricacid", 1000)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(chemicalReactorRecipes); + + // #UniversalChemical won't generate LCR recipe if config >= 10 + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(19), ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 1)) + .itemOutputs(MaterialMisc.COPPER_SULFATE.getDust(6)) + .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 2000)) + .fluidOutputs(FluidUtils.getFluidStack("dilutedsulfuricacid", 1000)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(multiblockChemicalReactorRecipes); + } + + private static void dehydratorRecipes() { + GTValues.RA.stdBuilder() + .itemInputs(MaterialMisc.COPPER_SULFATE_HYDRATED.getDust(11)) + .itemOutputs(MaterialMisc.COPPER_SULFATE.getDust(6)) + .fluidOutputs(GTModHandler.getWater(5000)) + .eut(10) + .duration(5 * MINUTES) + .addTo(chemicalDehydratorRecipes); + } + + private static void distillationTowerRecipes() { + GTValues.RA.stdBuilder() + .fluidInputs(MaterialMisc.CHLOROACETIC_MIXTURE.getFluidStack(1000)) + .fluidOutputs( + MaterialMisc.CHLOROACETIC_ACID.getFluidStack(100), + MaterialMisc.DICHLOROACETIC_ACID.getFluidStack(450), + MaterialMisc.TRICHLOROACETIC_ACID.getFluidStack(450)) + .duration(4 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(distillationTowerRecipes); + + } + + private static void fluidHeaterRecipes() { + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(16)) + .fluidInputs(MaterialMisc.CYANOACRYLATE_POLYMER.getFluidStack(100)) + .fluidOutputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(100)) + .duration(45 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(fluidHeaterRecipes); + } + + private static void mixerRecipes() { + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1), MaterialMisc.DICHLOROACETIC_ACID.getCell(1)) + .itemOutputs(CI.emptyCells(1)) + .fluidInputs(MaterialMisc.TRICHLOROACETIC_ACID.getFluidStack(1000)) + .fluidOutputs(MaterialMisc.CHLOROACETIC_MIXTURE.getFluidStack(2000)) + .duration(5 * SECONDS) + .eut(100) + .addTo(mixerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getItemStackOfAmountFromOreDict("cellSulfurTrioxide", 1), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CI.emptyCells(1)) + .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 1000)) + .fluidOutputs(MaterialMisc.SOLID_ACID_MIXTURE.getFluidStack(1000)) + .duration(5 * SECONDS) + .eut(40) + .addTo(mixerRecipes); + + } + + private static void glueUsageRecipes() { + // Braintech Tape recipe, PBI and superglue make 16 tape at once + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Polybenzimidazole, 1L), + GTModHandler.getIC2Item("carbonMesh", 1L), + GTUtility.getIntegratedCircuit(10)) + .itemOutputs(ItemList.Duct_Tape.get(16L)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(100)) + .duration(6 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + // Maintenance Hatch recipe, using Braintech Tape + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Hull_LV.get(1), ItemList.Duct_Tape.get(1), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(ItemList.Hatch_Maintenance.get(1)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(100)) + .duration(6 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + // Graphene recipes from later wafer tiers, using superglue instead of the bronze age glue + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustGraphite", 64), + ItemList.Circuit_Silicon_Wafer4.get(2L), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustGraphene", 64)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(500)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustGraphite", 64), + ItemList.Circuit_Silicon_Wafer5.get(1L), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustGraphene", 64)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(250)) + .duration(4 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4L), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(ItemList.SFMixture.get(32)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(100)) + .duration(1 * MINUTES + 20 * SECONDS) + .eut(16) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.GelledToluene.get(1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Polybenzimidazole, 1L), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(ItemList.SFMixture.get(64)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(100)) + .duration(1 * MINUTES + 20 * SECONDS) + .eut(16) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.foil, Materials.PolyvinylChloride, 8), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 32)) + .itemOutputs(new ItemStack(Items.book, 64, 0)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(200)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(8) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.RedSteel, 18)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32505", 1)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(144)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.NaquadahAlloy, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Europium, 6)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32506", 1)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(288)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.ElectrumFlux, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Americium, 18)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32507", 1)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(576)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt02, Materials.ElectrumFlux, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Naquadah, 24)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32561", 1)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(1152)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.ElectrumFlux, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahEnriched, 36)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32562", 1)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(2304)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.ElectrumFlux, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 48)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32563", 1)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(4608)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 56)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32564", 1)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(9216)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 64)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32565", 1)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(18432)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + + if (NewHorizonsCoreMod.isModLoaded() && GalacticraftCore.isModLoaded()) { + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getItemStackFromFQRN("GalacticraftMars:item.itemBasicAsteroids:7", 1), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Titanium, 8), + ItemUtils.getItemStackFromFQRN("dreamcraft:item.TungstenString", 8), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(ItemUtils.getItemStackFromFQRN("GalaxySpace:item.ThermalClothT2", 1)) + .fluidInputs(MaterialMisc.ETHYL_CYANOACRYLATE.getFluidStack(576)) + .duration(30 * SECONDS) + .eut(1024) + .addTo(assemblerRecipes); + + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderLFTR.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderLFTR.java new file mode 100644 index 0000000000..b5a3a55cd0 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderLFTR.java @@ -0,0 +1,133 @@ +package gtPlusPlus.xmod.gregtech.loaders.recipe; + +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.LFTR_OUTPUT_POWER; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.liquidFluorineThoriumReactorRecipes; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.util.GasSpargingRecipeMap; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.nuclear.MaterialsFluorides; +import gtPlusPlus.core.material.nuclear.MaterialsNuclides; + +public class RecipeLoaderLFTR { + + private static AutoMap mNobleGases; + private static AutoMap mFluorideGases; + private static AutoMap mSpargeGases; + + private static void configureSparging() { + if (mSpargeGases == null) { + mSpargeGases = new AutoMap<>(); + mSpargeGases.add( + Materials.Helium.getGas(1) + .getFluid()); + mSpargeGases.add( + Materials.Fluorine.getGas(1) + .getFluid()); + } + if (mNobleGases == null) { + mNobleGases = new AutoMap<>(); + mNobleGases.add(mSpargeGases.get(0)); + mNobleGases.add(MaterialsElements.getInstance().XENON.getFluid()); + mNobleGases.add(MaterialsElements.getInstance().NEON.getFluid()); + mNobleGases.add(MaterialsElements.getInstance().ARGON.getFluid()); + mNobleGases.add(MaterialsElements.getInstance().KRYPTON.getFluid()); + mNobleGases.add(MaterialsElements.getInstance().RADON.getFluid()); + } + if (mFluorideGases == null) { + mFluorideGases = new AutoMap<>(); + mFluorideGases.add(mSpargeGases.get(1)); + mFluorideGases.add(MaterialsFluorides.LITHIUM_FLUORIDE.getFluid()); + mFluorideGases.add(MaterialsFluorides.NEPTUNIUM_HEXAFLUORIDE.getFluid()); + mFluorideGases.add(MaterialsFluorides.TECHNETIUM_HEXAFLUORIDE.getFluid()); + mFluorideGases.add(MaterialsFluorides.SELENIUM_HEXAFLUORIDE.getFluid()); + mFluorideGases.add(MaterialsFluorides.THORIUM_TETRAFLUORIDE.getFluid()); + } + } + + public static void generate() { + // Fli2BeF4 + Thorium TetraFluoride = Uranium233 + // 72k Ticks/hr + // 1l/4t = 1000l/hr + // 1l/40t = 1000l/10hr (Probably better) LiFBeF2ThF4UF4 + // 1l/20t= 1000l/2.5hr LiFBeF2ZrF4UF4 + // 1l/10t= 1000l/2.5hr LiFBeF2ZrF4U235 + + configureSparging(); + FluidStack Li2BeF4 = MaterialsNuclides.Li2BeF4.getFluidStack(200); + + // LiFBeF2ThF4UF4 - T3 + GTValues.RA.stdBuilder() + .fluidInputs(MaterialsNuclides.LiFBeF2ThF4UF4.getFluidStack(100), Li2BeF4) + .fluidOutputs( + MaterialsNuclides.LiFBeF2UF4FP.getFluidStack(100), + MaterialsNuclides.LiFBeF2ThF4.getFluidStack(200), + MaterialsFluorides.URANIUM_HEXAFLUORIDE.getFluidStack(20), + MaterialsFluorides.URANIUM_HEXAFLUORIDE.getFluidStack(10)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(0) + .metadata(LFTR_OUTPUT_POWER, 32768 * 4) + .addTo(liquidFluorineThoriumReactorRecipes); + + // LiFBeF2ZrF4UF4 - T2 + GTValues.RA.stdBuilder() + .fluidInputs(MaterialsNuclides.LiFBeF2ZrF4UF4.getFluidStack(100), Li2BeF4) + .fluidOutputs( + MaterialsNuclides.LiFBeF2UF4FP.getFluidStack(50), + MaterialsNuclides.LiFBeF2ThF4.getFluidStack(100), + MaterialsFluorides.URANIUM_HEXAFLUORIDE.getFluidStack(10), + MaterialsFluorides.URANIUM_HEXAFLUORIDE.getFluidStack(5)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(0) + .metadata(LFTR_OUTPUT_POWER, 8192 * 4) + .addTo(liquidFluorineThoriumReactorRecipes); + + // LiFBeF2ZrF4U235 - T1 + GTValues.RA.stdBuilder() + .fluidInputs(MaterialsNuclides.LiFBeF2ZrF4U235.getFluidStack(100), Li2BeF4) + .fluidOutputs( + MaterialsNuclides.LiFBeF2UF4FP.getFluidStack(25), + MaterialsNuclides.LiFThF4.getFluidStack(50), + MaterialsFluorides.URANIUM_HEXAFLUORIDE.getFluidStack(4), + MaterialsFluorides.URANIUM_HEXAFLUORIDE.getFluidStack(2)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(0) + .metadata(LFTR_OUTPUT_POWER, 8192) + .addTo(liquidFluorineThoriumReactorRecipes); + + // Sparging NEI Recipes + GasSpargingRecipeMap.addRecipe( + new FluidStack(mSpargeGases.get(0), 1000), + MaterialsNuclides.LiFBeF2UF4FP.getFluidStack(50), + MaterialsNuclides.Sparged_LiFBeF2UF4FP.getFluidStack(50), + new FluidStack[] { new FluidStack(mNobleGases.get(1), 10), new FluidStack(mNobleGases.get(2), 10), + new FluidStack(mNobleGases.get(3), 10), new FluidStack(mNobleGases.get(4), 10), + new FluidStack(mNobleGases.get(5), 10) }, + new int[] { 20000, 20000, 20000, 20000, 20000 }); + + GasSpargingRecipeMap.addRecipe( + new FluidStack(mSpargeGases.get(1), 100), + MaterialsNuclides.LiFThF4.getFluidStack(50), + MaterialsNuclides.Sparged_LiFThF4.getFluidStack(50), + new FluidStack[] { new FluidStack(mFluorideGases.get(1), 5), new FluidStack(mFluorideGases.get(2), 5), + new FluidStack(mFluorideGases.get(3), 5), new FluidStack(mFluorideGases.get(4), 5), + new FluidStack(mFluorideGases.get(5), 5) }, + new int[] { 1000, 1000, 1000, 1000, 1000 }); + + GasSpargingRecipeMap.addRecipe( + new FluidStack(mSpargeGases.get(1), 100), + MaterialsNuclides.LiFBeF2ThF4.getFluidStack(50), + MaterialsNuclides.Sparged_LiFBeF2ThF4.getFluidStack(50), + new FluidStack[] { new FluidStack(mFluorideGases.get(1), 10), new FluidStack(mFluorideGases.get(2), 10), + new FluidStack(mFluorideGases.get(3), 10), new FluidStack(mFluorideGases.get(4), 10), + new FluidStack(mFluorideGases.get(5), 10) }, + new int[] { 2000, 2000, 2000, 2000, 2000 }); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderMolecularTransformer.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderMolecularTransformer.java new file mode 100644 index 0000000000..1a96b594fb --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderMolecularTransformer.java @@ -0,0 +1,88 @@ +package gtPlusPlus.xmod.gregtech.loaders.recipe; + +import static advsolar.utils.MTRecipeManager.transformerRecipes; +import static gregtech.api.enums.Mods.AdvancedSolarPanel; +import static gregtech.api.enums.Mods.GalaxySpace; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.molecularTransformerRecipes; + +import advsolar.utils.MTRecipeRecord; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.util.math.MathUtils; + +public class RecipeLoaderMolecularTransformer { + + public static void run() { + + for (MTRecipeRecord aRecipe : transformerRecipes) { + int aEU = (int) TierEU.RECIPE_IV; + Logger.INFO("======================="); + Logger.INFO("Generating GT recipe for Molecular Transformer."); + Logger.INFO( + "Input: " + aRecipe.inputStack + .getDisplayName() + ", Output: " + aRecipe.outputStack.getDisplayName() + ", EU/t: " + aEU); + float aTicks = (float) aRecipe.energyPerOperation / (float) aEU; + Logger.INFO("Ticks: " + aTicks); + int aTicksRoundedUp = MathUtils.roundToClosestInt(Math.ceil(aTicks)); + Logger.INFO("Ticks: " + aTicksRoundedUp); + Logger.INFO("Total EU equal or greater? " + ((aTicksRoundedUp * aEU) >= aRecipe.energyPerOperation)); + GTValues.RA.stdBuilder() + .itemInputs(aRecipe.inputStack) + .itemOutputs(aRecipe.outputStack) + .duration(aTicksRoundedUp) + .eut(aEU) + .addTo(molecularTransformerRecipes); + + Logger.INFO("======================="); + } + + transformerRecipes.clear(); + if (AdvancedSolarPanel.isModLoaded() && GalaxySpace.isModLoaded()) { + + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L)) + .itemOutputs(GTModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(molecularTransformerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(GalaxySpace.ID, "item.GlowstoneDusts", 1L, 0)) + .itemOutputs(GTModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) + .duration(7 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_IV) + .addTo(molecularTransformerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(GalaxySpace.ID, "item.GlowstoneDusts", 1L, 1)) + .itemOutputs(GTModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) + .duration(1 * SECONDS + 18 * TICKS) + .eut(TierEU.RECIPE_LuV) + .addTo(molecularTransformerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(GalaxySpace.ID, "item.GlowstoneDusts", 1L, 2)) + .itemOutputs(GTModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) + .duration(10 * TICKS) + .eut(TierEU.RECIPE_ZPM) + .addTo(molecularTransformerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(GalaxySpace.ID, "item.GlowstoneDusts", 1L, 3)) + .itemOutputs(GTModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) + .duration(3 * TICKS) + .eut(TierEU.RECIPE_UV) + .addTo(molecularTransformerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTModHandler.getModItem(GalaxySpace.ID, "item.GlowstoneDusts", 1L, 4)) + .itemOutputs(GTModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) + .duration(1 * TICKS) + .eut(TierEU.RECIPE_UHV) + .addTo(molecularTransformerRecipes); + + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderNuclear.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderNuclear.java new file mode 100644 index 0000000000..4f67c7160b --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderNuclear.java @@ -0,0 +1,763 @@ +package gtPlusPlus.xmod.gregtech.loaders.recipe; + +import static gregtech.api.enums.GTValues.RA; +import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; +import static gregtech.api.recipe.RecipeMaps.electroMagneticSeparatorRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes; +import static gregtech.api.recipe.RecipeMaps.fusionRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; +import static gregtech.api.recipe.RecipeMaps.sifterRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.FUSION_THRESHOLD; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.item.chemistry.GenericChem; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.nuclear.MaterialsFluorides; +import gtPlusPlus.core.material.nuclear.MaterialsNuclides; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeLoaderNuclear { + + public static void generate() { + createRecipes(); + RecipeLoaderLFTR.generate(); + RecipeLoaderNuclearFuelProcessing.generate(); + } + + private static void createRecipes() { + autoclave(); + blastFurnace(); + centrifugeRecipes(); + chemicalBathRecipes(); + chemicalReactorRecipes(); + dehydratorRecipes(); + electroMagneticSeperator(); + fluidExtractorRecipes(); + fluidHeater(); + fusionChainRecipes(); + macerator(); + mixerRecipes(); + sifter(); + } + + private static void autoclave() { + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("pelletZirconium", 1)) + .fluidInputs(FluidUtils.getFluidStack("chlorine", 4_000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(autoclaveRecipes); + } + + private static void blastFurnace() { + + GTValues.RA.stdBuilder() + .itemInputs( + MaterialsFluorides.LITHIUM_FLUORIDE.getDust(4), + MaterialsFluorides.BERYLLIUM_FLUORIDE.getDust(3)) + .itemOutputs(MaterialsNuclides.Li2BeF4.getDust(7)) + .duration(2 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .metadata(COIL_HEAT, 3000) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustZrCl4", 1)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustCookedZrCl4", 1)) + .duration(1 * MINUTES) + .eut(340) + .metadata(COIL_HEAT, 300) + .addTo(blastFurnaceRecipes); + } + + private static void centrifugeRecipes() { + + // Process Used Fuel Rods for Krypton + + // Uranium + for (ItemStack depletedRod : new ItemStack[] { + ItemUtils.getItemStackFromFQRN("IC2:reactorUraniumSimpledepleted", 8), + ItemUtils.getItemStackFromFQRN("IC2:reactorUraniumDualdepleted", 4), + ItemUtils.getItemStackFromFQRN("IC2:reactorUraniumQuaddepleted", 2) }) { + GTValues.RA.stdBuilder() + .itemInputs(depletedRod, GTUtility.getIntegratedCircuit(20)) + .itemOutputs( + ItemList.IC2_Fuel_Rod_Empty.get(8), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 2L), + MaterialsElements.getInstance().URANIUM232.getSmallDust(1), + MaterialsElements.getInstance().URANIUM233.getSmallDust(1), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Uranium235, 1L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1L)) + .outputChances(10000, 10000, 1000, 1000, 1000, 500) + .fluidOutputs(FluidUtils.getFluidStack("krypton", 60)) + .duration(4 * MINUTES + 10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + } + + // Mox + for (ItemStack depletedRod : new ItemStack[] { + ItemUtils.getItemStackFromFQRN("IC2:reactorMOXSimpledepleted", 8), + ItemUtils.getItemStackFromFQRN("IC2:reactorMOXDualdepleted", 4), + ItemUtils.getItemStackFromFQRN("IC2:reactorMOXQuaddepleted", 2) }) { + GTValues.RA.stdBuilder() + .itemInputs(depletedRod, GTUtility.getIntegratedCircuit(20)) + .itemOutputs( + ItemList.IC2_Fuel_Rod_Empty.get(8), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 2L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium241, 1L), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1L), + MaterialsElements.getInstance().PLUTONIUM238.getTinyDust(1), + GTOreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1L)) + .outputChances(10000, 10000, 500, 500, 500, 500) + .fluidOutputs(FluidUtils.getFluidStack("krypton", 90)) + .duration(6 * MINUTES + 15 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + } + + // Thorium + for (ItemStack depletedRod : new ItemStack[] { ItemList.Depleted_Thorium_1.get(8), + ItemList.Depleted_Thorium_2.get(4), ItemList.Depleted_Thorium_4.get(2) }) { + GTValues.RA.stdBuilder() + .itemInputs(depletedRod, GTUtility.getIntegratedCircuit(20)) + .itemOutputs( + ItemList.IC2_Fuel_Rod_Empty.get(8), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 2L), + MaterialsElements.getInstance().THORIUM232.getDust(1), + GTOreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lutetium, 1L), + MaterialsElements.getInstance().POLONIUM.getSmallDust(1), + MaterialsElements.getInstance().THALLIUM.getTinyDust(1)) + .outputChances(10000, 10000, 5000, 5000, 5000, 2500) + .fluidOutputs(FluidUtils.getFluidStack("krypton", 30)) + .duration(2 * MINUTES + 5 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(centrifugeRecipes); + } + } + + private static void chemicalBathRecipes() { + + int[] chances = { 9000, 6000, 3000 }; + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustTin", 12)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 3), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 4), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 5)) + .outputChances(chances) + .fluidInputs(FluidUtils.getFluidStack("chlorine", 2400)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(chemicalBathRecipes); + + chances = new int[] { 9000, 3000, 1000 }; + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustRutile", 5)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 3), + ItemUtils.getItemStackOfAmountFromOreDict("dustTitanium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustHafnium", 1)) + .outputChances(chances) + .fluidInputs(FluidUtils.getFluidStack("chlorine", 4000)) + .duration(30 * SECONDS) + .eut(1024) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumCarbonate", 3)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumFluoride", 2)) + .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid", 500)) + .duration(9 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(chemicalBathRecipes); + + } + + private static void chemicalReactorRecipes() { + + ItemStack aGtHydrofluoricAcid = ItemUtils + .getItemStackOfAmountFromOreDictNoBroken("cellHydrofluoricAcid_GT5U", 2); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumCarbonate", 6), + ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumHydroxide", 5)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLi2CO3CaOH2", 11)) + .duration(10 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroxide", 3)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumFluoride", 2)) + .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid", 500)) + .fluidOutputs(FluidUtils.getFluidStack("water", 1000)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getItemStackOfAmountFromOreDict("cellOxygen", 8), + ItemUtils.getItemStackOfAmountFromOreDict("dustLithium7", 16)) + .itemOutputs(CI.emptyCells(8)) + .fluidInputs(FluidUtils.getFluidStack("water", 8000)) + .fluidOutputs(FluidUtils.getFluidStack("lithiumhydroxide", 6912)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // LFTR Fuel Related Compounds + // Hydroxide + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(3), MaterialsElements.getInstance().OXYGEN.getCell(1)) + .itemOutputs(CI.emptyCells(1)) + .fluidInputs(MaterialsElements.getInstance().HYDROGEN.getFluidStack(1000)) + .fluidOutputs(MaterialMisc.HYDROXIDE.getFluidStack(1000)) + .duration(8 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Beryllium Hydroxide + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(3), MaterialsElements.getInstance().BERYLLIUM.getDust(1)) + .fluidInputs(MaterialMisc.HYDROXIDE.getFluidStack(2000)) + .fluidOutputs(MaterialsFluorides.BERYLLIUM_HYDROXIDE.getFluidStack(432)) + .duration(4 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Ammonium Bifluoride + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(3), + ItemUtils.getItemStackOfAmountFromOreDict("cellHydrofluoricAcid", 1)) + .itemOutputs(CI.emptyCells(1)) + .fluidInputs(MaterialMisc.AMMONIA.getFluidStack(1000)) + .fluidOutputs(MaterialsFluorides.AMMONIUM_BIFLUORIDE.getFluidStack(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Ammonium Bifluoride + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(3), aGtHydrofluoricAcid) + .itemOutputs(CI.emptyCells(2)) + .fluidInputs(MaterialMisc.AMMONIA.getFluidStack(1000)) + .fluidOutputs(MaterialsFluorides.AMMONIUM_BIFLUORIDE.getFluidStack(576)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Ammonium + // To be deprecated now that it is no longer needed for ammonium bifluoride + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(3), MaterialsElements.getInstance().HYDROGEN.getCell(1)) + .itemOutputs(CI.emptyCells(1)) + .fluidInputs(MaterialMisc.AMMONIA.getFluidStack(1000)) + .fluidOutputs(MaterialMisc.AMMONIUM.getFluidStack(2000)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Sodium Fluoride + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(15), + ItemUtils.getItemStackOfAmountFromOreDict("dustSodiumHydroxide", 3)) + .itemOutputs(MaterialsFluorides.SODIUM_FLUORIDE.getDust(2)) + .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid", 500)) + .fluidOutputs(FluidUtils.getWater(1000)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedBioCircuit(15), + ItemUtils.getItemStackOfAmountFromOreDict("dustSodiumHydroxide", 3)) + .itemOutputs(MaterialsFluorides.SODIUM_FLUORIDE.getDust(2)) + .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid_gt5u", 1000)) + .fluidOutputs(FluidUtils.getWater(1000)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + } + + private static void dehydratorRecipes() { + + // Makes 7-Lithium + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(14)) + .fluidInputs(FluidUtils.getFluidStack("sulfuriclithium", 1440)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustSulfur", 3), + ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustSodium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustCarbon", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustLithium7", 4)) + .duration(30 * SECONDS) + .eut(30) + .addTo(chemicalDehydratorRecipes); + + // Makes Lithium Carbonate + GTValues.RA.stdBuilder() + .itemInputs(CI.emptyCells(12), ItemUtils.getItemStackOfAmountFromOreDict("dustLepidolite", 20)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustPotassium", 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4), + ItemUtils.getItemStackOfAmountFromOreDict("cellOxygen", 10), + ItemUtils.getItemStackOfAmountFromOreDict("cellFluorine", 2), + ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumCarbonate", 3)) + .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 10000)) + .fluidOutputs(FluidUtils.getFluidStack("sulfuriclithium", 10000)) + .eut(1_000) + .duration(1 * MINUTES + 15 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + // Calcium Hydroxide + if (ItemUtils.checkForInvalidItems(ItemUtils.getItemStackOfAmountFromOreDict("dustQuicklime", 1))) { + // CaO + H2O = Ca(OH)2 + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedBioCircuit(20), ItemUtils.getItemStackOfAmountFromOreDict("dustQuicklime", 2)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumHydroxide", 5)) + .fluidInputs(FluidUtils.getFluidStack("water", 1000)) + .eut(TierEU.RECIPE_MV) + .duration(12 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + } else { + Logger.INFO("[dustCalciumHydroxide] FAILED TO LOAD RECIPE"); + if (!ItemUtils.checkForInvalidItems(ItemUtils.getItemStackOfAmountFromOreDict("dustQuicklime", 1))) { + Logger.INFO("Could not find dustQuicklime, cannot make dustCalciumHydroxide."); + } + } + + // 2 LiOH + CaCO3 + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(20), + ItemUtils.getItemStackOfAmountFromOreDict("dustLi2CO3CaOH2", 11)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroxide", 6), + ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumCarbonate", 5)) + .eut(1_000) + .duration(6 * MINUTES) + .addTo(chemicalDehydratorRecipes); + + // LiOH Liquid to Dust + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(22)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroxide", 1)) + .fluidInputs(FluidUtils.getFluidStack("lithiumhydroxide", 144)) + .eut(64) + .duration(1 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + // Zirconium Chloride -> TetraFluoride + FluidStack aHydrogenChloride = new FluidStack(GenericChem.HydrochloricAcid, 800); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(11), + ItemUtils.getItemStackOfAmountFromOreDict("dustCookedZrCl4", 1)) + .itemOutputs(MaterialsFluorides.ZIRCONIUM_TETRAFLUORIDE.getDust(1)) + .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid", 400)) + .fluidOutputs(aHydrogenChloride) + .eut(TierEU.RECIPE_HV) + .duration(15 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + // Zirconium Chloride -> TetraFluoride + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(10), + ItemUtils.getItemStackOfAmountFromOreDict("dustCookedZrCl4", 1)) + .itemOutputs(MaterialsFluorides.ZIRCONIUM_TETRAFLUORIDE.getDust(1)) + .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid_gt5u", 800)) + .fluidOutputs(aHydrogenChloride) + .eut(TierEU.RECIPE_HV) + .duration(30 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + // Be(OH)2 + 2 (NH4)HF2 → (NH4)2BeF4 + 2 H2O + // Inputs use solid rule because they are molten forms of solids + // Outputs use fluid rule because they are not molten forms of solids + GTValues.RA.stdBuilder() + .itemInputs(MaterialsFluorides.BERYLLIUM_HYDROXIDE.getDust(3), CI.emptyCells(2)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("cellWater", 2)) + .fluidInputs(MaterialsFluorides.AMMONIUM_BIFLUORIDE.getFluidStack(1152)) + .fluidOutputs(MaterialsFluorides.AMMONIUM_TETRAFLUOROBERYLLATE.getFluidStack(1000)) + .eut(64) + .duration(6 * SECONDS) + .addTo(chemicalDehydratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(MaterialsFluorides.BERYLLIUM_HYDROXIDE.getDust(3), CI.getNumberedAdvancedCircuit(17)) + .fluidInputs(MaterialsFluorides.AMMONIUM_BIFLUORIDE.getFluidStack(1152)) + .fluidOutputs( + Materials.Water.getFluid(2000L), + MaterialsFluorides.AMMONIUM_TETRAFLUOROBERYLLATE.getFluidStack(1000)) + .eut(TierEU.RECIPE_MV) + .duration(5 * MINUTES) + .addTo(multiblockChemicalReactorRecipes); + + // (NH4)2BeF4 → 2 NH3 + 2 HF + BeF2 + // Ammonium tetrafluoroberyllate uses fluid rule because it is not a molten form of a solid + // Beryllium fluoride uses solid rule + // Industrial strength hydrofluoric acid follows its usual convention where it is twice as dense as regular + // hydrofluoric acid + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(17), CI.emptyCells(3)) + .itemOutputs( + MaterialMisc.AMMONIA.getCell(2), + ItemUtils.getItemStackOfAmountFromOreDict("cellHydrofluoricAcid", 1), + MaterialsFluorides.BERYLLIUM_FLUORIDE.getDust(3)) + .fluidInputs(MaterialsFluorides.AMMONIUM_TETRAFLUOROBERYLLATE.getFluidStack(1000)) + .eut(TierEU.RECIPE_MV) + .duration(5 * MINUTES) + .addTo(chemicalDehydratorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(17)) + .itemOutputs(MaterialsFluorides.BERYLLIUM_FLUORIDE.getDust(3)) + .fluidInputs(MaterialsFluorides.AMMONIUM_TETRAFLUOROBERYLLATE.getFluidStack(1000)) + .fluidOutputs(MaterialMisc.AMMONIA.getFluidStack(2000), FluidUtils.getFluidStack("hydrofluoricacid", 1000)) + .eut(TierEU.RECIPE_MV) + .duration(5 * MINUTES) + .addTo(multiblockChemicalReactorRecipes); + } + + private static void electroMagneticSeperator() { + + // Zirconium + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedBauxite", 1)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustBauxite", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustSmallRutile", 1), + ItemUtils.getItemStackOfAmountFromOreDict("nuggetZirconium", 1)) + .outputChances(10000, 2500, 4000) + .duration(20 * SECONDS) + .eut(24) + .addTo(electroMagneticSeparatorRecipes); + // Zircon + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedMagnetite", 1)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustMagnetite", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustSmallZircon", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustTinyZircon", 1)) + .outputChances(10000, 1250, 2500) + .duration(20 * SECONDS) + .eut(24) + .addTo(electroMagneticSeparatorRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedCassiterite", 1)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustCassiterite", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustSmallZircon", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustTinyZircon", 1)) + .outputChances(10000, 1250, 2500) + .duration(20 * SECONDS) + .eut(24) + .addTo(electroMagneticSeparatorRecipes); + + } + + private static void fluidExtractorRecipes() { + + // FLiBe fuel + GTValues.RA.stdBuilder() + .itemInputs(MaterialsNuclides.Li2BeF4.getDust(1)) + .fluidOutputs(MaterialsNuclides.Li2BeF4.getFluidStack(144)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(fluidExtractionRecipes); + + // Lithium Fluoride + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumFluoride", 1)) + .fluidOutputs(MaterialsFluorides.LITHIUM_FLUORIDE.getFluidStack(144)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(fluidExtractionRecipes); + + // Lithium Fluoride + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustBerylliumFluoride", 1)) + .fluidOutputs(MaterialsFluorides.BERYLLIUM_FLUORIDE.getFluidStack(144)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(fluidExtractionRecipes); + + // LFTR Fuel 1 + GTValues.RA.stdBuilder() + .itemInputs(MaterialsNuclides.LiFBeF2ZrF4U235.getDust(1)) + .fluidOutputs(MaterialsNuclides.LiFBeF2ZrF4U235.getFluidStack(144)) + .duration(12 * SECONDS + 10 * TICKS) + .eut(1000) + .addTo(fluidExtractionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(MaterialsNuclides.LiFBeF2ZrF4UF4.getDust(1)) + .fluidOutputs(MaterialsNuclides.LiFBeF2ZrF4UF4.getFluidStack(144)) + .duration(7 * SECONDS + 10 * TICKS) + .eut(1500) + .addTo(fluidExtractionRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(MaterialsNuclides.LiFBeF2ThF4UF4.getDust(1)) + .fluidOutputs(MaterialsNuclides.LiFBeF2ThF4UF4.getFluidStack(144)) + .duration(7 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_EV) + .addTo(fluidExtractionRecipes); + + // ZIRCONIUM_TETRAFLUORIDE + GTValues.RA.stdBuilder() + .itemInputs(MaterialsFluorides.ZIRCONIUM_TETRAFLUORIDE.getDust(1)) + .fluidOutputs(MaterialsFluorides.ZIRCONIUM_TETRAFLUORIDE.getFluidStack(144)) + .duration(10 * SECONDS) + .eut(512 + 256) + .addTo(fluidExtractionRecipes); + } + + private static void fusionChainRecipes() { + // Mk1 + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Boron.getPlasma(144), Materials.Calcium.getPlasma(16)) + .fluidOutputs(new FluidStack(MaterialsElements.getInstance().NEON.getPlasma(), 1000)) + .duration(3 * SECONDS + 4 * TICKS) + .eut(TierEU.RECIPE_LuV) + .metadata(FUSION_THRESHOLD, 100_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs( + new FluidStack(MaterialsElements.getInstance().NEON.getPlasma(), 144), + Materials.Bedrockium.getMolten(144)) + .fluidOutputs(new FluidStack(MaterialsElements.STANDALONE.FORCE.getPlasma(), 1000)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(TierEU.RECIPE_LuV) + .metadata(FUSION_THRESHOLD, 100_000_000) + .addTo(fusionRecipes); + + // Mk2 + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Niobium.getPlasma(144), Materials.Zinc.getPlasma(144)) + .fluidOutputs(new FluidStack(MaterialsElements.getInstance().KRYPTON.getPlasma(), 144)) + .duration(32 * TICKS) + .eut(TierEU.RECIPE_ZPM) + .metadata(FUSION_THRESHOLD, 300_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs( + new FluidStack(MaterialsElements.getInstance().KRYPTON.getPlasma(), 144), + new FluidStack(MaterialsElements.STANDALONE.FORCE.getPlasma(), 1000)) + .fluidOutputs(new FluidStack(MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getPlasma(), 1000)) + .duration(32 * TICKS) + .eut(TierEU.RECIPE_ZPM) + .metadata(FUSION_THRESHOLD, 300_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs( + new FluidStack(MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getPlasma(), 144), + new FluidStack(MaterialsAlloy.TITANSTEEL.getFluid(), 8)) + .fluidOutputs(new FluidStack(MaterialsElements.STANDALONE.RUNITE.getPlasma(), 1000)) + .duration(32 * TICKS) + .eut(TierEU.RECIPE_ZPM) + .metadata(FUSION_THRESHOLD, 300_000_000) + .addTo(fusionRecipes); + + // Mk3 + GTValues.RA.stdBuilder() + .fluidInputs(MaterialsElements.getInstance().CURIUM.getFluidStack(144), Materials.Americium.getPlasma(144)) + .fluidOutputs(new FluidStack(MaterialsElements.getInstance().XENON.getPlasma(), 144)) + .duration(16 * TICKS) + .eut(TierEU.RECIPE_UV) + .metadata(FUSION_THRESHOLD, 500_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs( + new FluidStack(MaterialsElements.getInstance().XENON.getPlasma(), 144), + new FluidStack(MaterialsElements.STANDALONE.RUNITE.getPlasma(), 1000)) + .fluidOutputs(new FluidStack(MaterialsElements.STANDALONE.ADVANCED_NITINOL.getPlasma(), 1000)) + .duration(16 * TICKS) + .eut(TierEU.RECIPE_UV) + .metadata(FUSION_THRESHOLD, 500_000_000) + .addTo(fusionRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs( + new FluidStack(MaterialsElements.STANDALONE.ADVANCED_NITINOL.getPlasma(), 72), + Materials.Tartarite.getMolten(2)) + .fluidOutputs(new FluidStack(MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 1000)) + .duration(8 * TICKS) + .eut(TierEU.RECIPE_UV) + .metadata(FUSION_THRESHOLD, 500_000_000) + .addTo(fusionRecipes); + } + + private static void macerator() { + RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("pelletZirconium", 1)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustZrCl4", 5)) + .eut(2) + .duration(20 * SECONDS) + .addTo(maceratorRecipes); + } + + private static void mixerRecipes() { + + // Rebalanced to correct the chemistry + // UF4 uses solid rule due to item form even though item form currently is inaccessible because item form may be + // accessible in future and must be consistent + // UF4 solid rule also assumes 1:144 item:fluid ratio in this case + GTValues.RA.stdBuilder() + .itemInputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustUranium233", 4), + ItemUtils.getItemStackOfAmountFromOreDict("dustUranium235", 1)) + .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid", 10000)) + .fluidOutputs(MaterialsFluorides.URANIUM_TETRAFLUORIDE.getFluidStack(3600)) + .duration(2 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(mixerRecipes); + + } + + private static void sifter() { + // Zirconium + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedIlmenite", 1)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustIron", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustWroughtIron", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustHafnium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustHafnium", 1)) + .outputChances(5000, 278, 1000, 1000, 300, 300) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(sifterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedTin", 1)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustTin", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustZinc", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1)) + .outputChances(10000, 556, 1500, 1000, 500, 500) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(sifterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedCassiterite", 1)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustCassiterite", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustTin", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1)) + .outputChances(10000, 556, 1500, 1000, 500, 500) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(sifterRecipes); + // Radium + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedThorium", 1)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustThorium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustLead", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1)) + .outputChances(10000, 500, 300, 200, 100, 100) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(sifterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedUranium", 1)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustUranium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustLead", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1)) + .outputChances(10000, 556, 1000, 500, 500, 500) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(sifterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedUraninite", 1)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustUraninite", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustUranium", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1)) + .outputChances(10000, 556, 500, 250, 250, 250) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(sifterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedPitchblende", 1)) + .itemOutputs( + ItemUtils.getItemStackOfAmountFromOreDict("dustPitchblende", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustLead", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), + ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1)) + .outputChances(10000, 556, 500, 250, 250, 250) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(sifterRecipes); + + } + + private static void fluidHeater() { + GTValues.RA.stdBuilder() + .itemInputs(MaterialsFluorides.SODIUM_FLUORIDE.getDust(1)) + .fluidOutputs(MaterialsFluorides.SODIUM_FLUORIDE.getFluidStack(144)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(fluidHeaterRecipes); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderNuclearFuelProcessing.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderNuclearFuelProcessing.java new file mode 100644 index 0000000000..86e56b23af --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderNuclearFuelProcessing.java @@ -0,0 +1,261 @@ +package gtPlusPlus.xmod.gregtech.loaders.recipe; + +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.CHEMPLANT_CASING_TIER; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.coldTrapRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.fissionFuelProcessingRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.reactorProcessingUnitRecipes; + +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gtPlusPlus.core.item.chemistry.NuclearChem; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.nuclear.MaterialsFluorides; +import gtPlusPlus.core.material.nuclear.MaterialsNuclides; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; + +public class RecipeLoaderNuclearFuelProcessing { + + public static void generate() { + + // Create Fuels + + final FluidStack aLithiumFluoride = MaterialsFluorides.LITHIUM_FLUORIDE.getFluidStack(100); + final FluidStack aBerylliumFluoride = MaterialsFluorides.BERYLLIUM_FLUORIDE.getFluidStack(100); + final FluidStack aThoriumFluoride = MaterialsFluorides.THORIUM_TETRAFLUORIDE.getFluidStack(100); + final FluidStack aZirconiumFluoride = MaterialsFluorides.ZIRCONIUM_TETRAFLUORIDE.getFluidStack(100); + final FluidStack aUraniumTetraFluoride = MaterialsFluorides.URANIUM_TETRAFLUORIDE.getFluidStack(100); + final FluidStack aUranium235 = MaterialsElements.getInstance().URANIUM235.getFluidStack(1000); + final FluidStack aLiFBeF2ZrF4U235 = MaterialsNuclides.LiFBeF2ZrF4U235.getFluidStack(100); + final FluidStack aLiFBeF2ZrF4UF4 = MaterialsNuclides.LiFBeF2ZrF4UF4.getFluidStack(100); + final FluidStack aLiFBeF2ThF4UF4 = MaterialsNuclides.LiFBeF2ThF4UF4.getFluidStack(100); + + // 7LiF - BeF2 - ZrF4 - U235 - 590C + GTValues.RA.stdBuilder() + .fluidInputs( + FluidUtils.getFluidStack(aLithiumFluoride, 550), + FluidUtils.getFluidStack(aBerylliumFluoride, 150), + FluidUtils.getFluidStack(aZirconiumFluoride, 60), + FluidUtils.getFluidStack(aUranium235, 240)) + .fluidOutputs(FluidUtils.getFluidStack(aLiFBeF2ZrF4U235, 1000)) + .duration(30 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(fissionFuelProcessingRecipes); + // 7LiF - BeF2 - ZrF4 - UF4 - 650C + GTValues.RA.stdBuilder() + .fluidInputs( + FluidUtils.getFluidStack(aLithiumFluoride, 600), + FluidUtils.getFluidStack(aBerylliumFluoride, 250), + FluidUtils.getFluidStack(aZirconiumFluoride, 80), + FluidUtils.getFluidStack(aUraniumTetraFluoride, 70)) + .fluidOutputs(FluidUtils.getFluidStack(aLiFBeF2ZrF4UF4, 1000)) + .duration(40 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(fissionFuelProcessingRecipes); + // 7liF - BeF2 - ThF4 - UF4 - 566C + GTValues.RA.stdBuilder() + .fluidInputs( + FluidUtils.getFluidStack(aLithiumFluoride, 580), + FluidUtils.getFluidStack(aBerylliumFluoride, 270), + FluidUtils.getFluidStack(aThoriumFluoride, 80), + FluidUtils.getFluidStack(aUraniumTetraFluoride, 70)) + .fluidOutputs(FluidUtils.getFluidStack(aLiFBeF2ThF4UF4, 1000)) + .duration(50 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(fissionFuelProcessingRecipes); + + // Reprocess Fuels + + // Reactor Blanket step 1 - Fluorination + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(17), MaterialsElements.getInstance().FLUORINE.getCell(6)) + .itemOutputs( + CI.emptyCells(5), + MaterialsFluorides.LITHIUM_FLUORIDE.getCell(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1)) + .outputChances(10000, 10000, 500, 500, 500, 250, 250, 250) + .fluidInputs(MaterialsNuclides.LiFThF4.getFluidStack(10000)) + .fluidOutputs(MaterialsNuclides.UF6F2.getFluidStack(1500)) + .duration(10 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(reactorProcessingUnitRecipes); + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(18), MaterialsElements.getInstance().FLUORINE.getCell(6)) + .itemOutputs( + CI.emptyCells(4), + MaterialsFluorides.LITHIUM_FLUORIDE.getCell(1), + MaterialsFluorides.BERYLLIUM_FLUORIDE.getCell(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1)) + .outputChances(10000, 10000, 10000, 1000, 1000, 1000, 500, 500, 500) + .fluidInputs(MaterialsNuclides.LiFBeF2ThF4.getFluidStack(10000)) + .fluidOutputs(MaterialsNuclides.UF6F2.getFluidStack(3000)) + .duration(10 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(reactorProcessingUnitRecipes); + // Reactor Blanket step 1 - Fluorination + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(7), MaterialsElements.getInstance().FLUORINE.getCell(6)) + .itemOutputs( + CI.emptyCells(4), + MaterialsFluorides.LITHIUM_FLUORIDE.getCell(2), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1)) + .outputChances(10000, 10000, 1000, 1000, 1000, 1000, 1000, 1000) + .fluidInputs(MaterialsNuclides.Sparged_LiFThF4.getFluidStack(10000)) + .fluidOutputs(MaterialsNuclides.UF6F2.getFluidStack(3000)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(reactorProcessingUnitRecipes); + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(8), MaterialsElements.getInstance().FLUORINE.getCell(6)) + .itemOutputs( + CI.emptyCells(2), + MaterialsFluorides.LITHIUM_FLUORIDE.getCell(2), + MaterialsFluorides.BERYLLIUM_FLUORIDE.getCell(2), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1), + MaterialsElements.getInstance().PROTACTINIUM.getDust(1)) + .outputChances(10000, 10000, 10000, 2000, 2000, 2000, 2000, 2000, 2000) + .fluidInputs(MaterialsNuclides.Sparged_LiFBeF2ThF4.getFluidStack(10000)) + .fluidOutputs(MaterialsNuclides.UF6F2.getFluidStack(6000)) + .duration(5 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(reactorProcessingUnitRecipes); + + // Reactor Blanket step 2 - Sorption + Cold Trap + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(8), MaterialsFluorides.SODIUM_FLUORIDE.getCell(4)) + .itemOutputs( + MaterialsElements.getInstance().FLUORINE.getCell(2), + MaterialsFluorides.URANIUM_HEXAFLUORIDE.getCell(2), + MaterialsElements.getInstance().URANIUM233.getDust(1), + MaterialsElements.getInstance().URANIUM233.getDust(1), + MaterialsElements.getInstance().URANIUM233.getDust(1)) + .outputChances(10000, 10000, 3000, 2000, 1000) + .fluidInputs(MaterialsNuclides.UF6F2.getFluidStack(3000)) + .fluidOutputs(MaterialsFluorides.SODIUM_FLUORIDE.getFluidStack(2000)) + .duration(10 * MINUTES) + .eut(TierEU.RECIPE_HV) + .addTo(coldTrapRecipes); + + // LiBeF2UF4FP + F2 = LiFBeF2 & UF6F2FP + // Reactor Core step 1 - Process Burnt Salt + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(1), MaterialsElements.getInstance().FLUORINE.getCell(1)) + .itemOutputs(MaterialsNuclides.UF6F2FP.getCell(1)) + .outputChances(10000) + .fluidInputs(MaterialsNuclides.LiFBeF2UF4FP.getFluidStack(1000)) + .fluidOutputs(FluidUtils.getFluidStack(NuclearChem.Impure_LiFBeF2, 1000)) + .duration(2 * HOURS) + .eut(TierEU.RECIPE_HV) + .addTo(reactorProcessingUnitRecipes); + // LiBeF2UF4FP + F2 = LiFBeF2 & UF6F2FP + // Reactor Core step 1 - Process Burnt Salt + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(1), MaterialsElements.getInstance().FLUORINE.getCell(3)) + .itemOutputs(CI.emptyCells(1), MaterialsNuclides.UF6F2FP.getCell(2)) + .fluidInputs(MaterialsNuclides.Sparged_LiFBeF2UF4FP.getFluidStack(1000)) + .fluidOutputs(FluidUtils.getFluidStack(NuclearChem.Impure_LiFBeF2, 2000)) + .duration(60 * MINUTES) + .eut(TierEU.RECIPE_HV) + .addTo(reactorProcessingUnitRecipes); + + // Reactor Core step 2A - Sorption + Cold Trap + GTValues.RA.stdBuilder() + .itemInputs(CI.getNumberedAdvancedCircuit(8), MaterialsFluorides.SODIUM_FLUORIDE.getCell(3)) + .itemOutputs( + MaterialsElements.getInstance().FLUORINE.getCell(1), + MaterialsFluorides.URANIUM_HEXAFLUORIDE.getCell(2), + MaterialsElements.getInstance().PHOSPHORUS.getDust(1), + MaterialsElements.getInstance().PHOSPHORUS.getDust(1), + MaterialsElements.getInstance().PHOSPHORUS.getDust(1), + MaterialsElements.getInstance().PHOSPHORUS.getDust(1), + MaterialsElements.getInstance().PHOSPHORUS.getDust(1), + MaterialsElements.getInstance().PHOSPHORUS.getDust(1)) + .outputChances(10000, 10000, 5000, 5000, 5000, 5000, 5000, 5000) + .fluidInputs(MaterialsNuclides.UF6F2FP.getFluidStack(2000)) + .fluidOutputs(MaterialsFluorides.SODIUM_FLUORIDE.getFluidStack(2000)) + .duration(10 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(coldTrapRecipes); + + // Reactor Core step 2B - Distillation + GTValues.RA.stdBuilder() + .fluidInputs(FluidUtils.getFluidStack(NuclearChem.Impure_LiFBeF2, 1000)) + .fluidOutputs(MaterialsNuclides.LiFBeF2.getFluidStack(250)) + .duration(7 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(distillationTowerRecipes); + + // UF6 -> UF4 reduction + // UF6 + LiFBeF2 + H2 -> LiFBeF2UF4 + HF + GTValues.RA.stdBuilder() + .itemInputs(MaterialsFluorides.URANIUM_HEXAFLUORIDE.getCell(1), MaterialsNuclides.LiFBeF2.getCell(1)) + .fluidInputs(Materials.Hydrogen.getGas(2000L)) + .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("cellHydrofluoricAcid", 2)) + .fluidOutputs(MaterialsNuclides.LiFBeF2UF4.getFluidStack(3000)) + .duration(2 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .metadata(COIL_HEAT, 5400) + .addTo(blastFurnaceRecipes); + // Alternative recipe to the above, for chemplant, to not use cells + + GTValues.RA.stdBuilder() + .fluidInputs( + MaterialsFluorides.URANIUM_HEXAFLUORIDE.getFluidStack(1000), + MaterialsNuclides.LiFBeF2.getFluidStack(1000), + MaterialsElements.getInstance().HYDROGEN.getFluidStack(2000)) + .fluidOutputs( + MaterialsNuclides.LiFBeF2UF4.getFluidStack(3000), + FluidUtils.getFluidStack("hydrofluoricacid", 2000)) + .duration(2 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_IV) + .metadata(CHEMPLANT_CASING_TIER, 4) + .addTo(chemicalPlantRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs( + MaterialsFluorides.ZIRCONIUM_TETRAFLUORIDE.getFluidStack(100), + MaterialsNuclides.LiFBeF2UF4.getFluidStack(900)) + .fluidOutputs(MaterialsNuclides.LiFBeF2ZrF4UF4.getFluidStack(1000)) + .duration(12 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(fissionFuelProcessingRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + MaterialsFluorides.THORIUM_TETRAFLUORIDE.getFluidStack(100), + MaterialsNuclides.LiFBeF2UF4.getFluidStack(900)) + .fluidOutputs(MaterialsNuclides.LiFBeF2ThF4UF4.getFluidStack(1000)) + .duration(15 * MINUTES) + .eut(TierEU.RECIPE_IV) + .addTo(fissionFuelProcessingRecipes); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderTreeFarm.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderTreeFarm.java new file mode 100644 index 0000000000..7f5e885b94 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoaderTreeFarm.java @@ -0,0 +1,632 @@ +package gtPlusPlus.xmod.gregtech.loaders.recipe; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Mods; +import gregtech.api.util.GTModHandler; +import gtPlusPlus.core.item.chemistry.AgriculturalChem; +import gtPlusPlus.xmod.bop.blocks.BOPBlockRegistrator; +import gtPlusPlus.xmod.forestry.ForestryTreeHandler; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTETreeFarm; + +public class RecipeLoaderTreeFarm { + + public static void generateRecipes() { + generateVanillaTrees(); + + if (Mods.IndustrialCraft2.isModLoaded()) generateIC2Trees(); + if (Mods.TinkerConstruct.isModLoaded()) generateTinkersTrees(); + generateGTPPTrees(); + + if (Mods.TwilightForest.isModLoaded()) generateTwilightForestTrees(); + if (Mods.GalaxySpace.isModLoaded()) generateGalaxySpaceTrees(); + if (Mods.GalacticraftAmunRa.isModLoaded()) generateAmunRaTrees(); + + if (Mods.Thaumcraft.isModLoaded()) generateThaumcraftTrees(); + if (Mods.ThaumicBases.isModLoaded()) generateThaumicBasesTrees(); + if (Mods.TaintedMagic.isModLoaded()) generateTaintedMagicTrees(); + if (Mods.ForbiddenMagic.isModLoaded()) generateForbiddenMagicTrees(); + if (Mods.Witchery.isModLoaded()) generateWitcheryTrees(); + + if (Mods.Natura.isModLoaded()) generateNaturaTrees(); + if (Mods.BiomesOPlenty.isModLoaded()) generateBOPTrees(); + if (Mods.PamsHarvestCraft.isModLoaded()) generatePamsTrees(); + if (Mods.PamsHarvestTheNether.isModLoaded()) generatePamsNetherTrees(); + + if (Mods.Forestry.isModLoaded()) { + ForestryTreeHandler.generateForestryTrees(); + } + + if (Mods.Forestry.isModLoaded() && Mods.ExtraTrees.isModLoaded()) ForestryTreeHandler.generateExtraTreesTrees(); + } + + private static void generateVanillaTrees() { + MTETreeFarm.registerTreeProducts( // Oak + new ItemStack(Blocks.sapling, 1, 0), + new ItemStack(Blocks.log, 1, 0), + new ItemStack(Blocks.leaves, 1, 0), + new ItemStack(Items.apple, 1, 0)); + + MTETreeFarm.registerTreeProducts( // Spruce + new ItemStack(Blocks.sapling, 1, 1), + new ItemStack(Blocks.log, 2, 1), + new ItemStack(Blocks.leaves, 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Birch + new ItemStack(Blocks.sapling, 1, 2), + new ItemStack(Blocks.log, 1, 2), + new ItemStack(Blocks.leaves, 1, 2), + null); + + MTETreeFarm.registerTreeProducts( // Jungle + new ItemStack(Blocks.sapling, 1, 3), + new ItemStack(Blocks.log, 2, 3), + new ItemStack(Blocks.leaves, 1, 3), + new ItemStack(Items.dye, 1, 3)); + + MTETreeFarm.registerTreeProducts( // Acacia + new ItemStack(Blocks.sapling, 1, 4), + new ItemStack(Blocks.log2, 1, 0), + new ItemStack(Blocks.leaves2, 1, 0), + null); + + MTETreeFarm.registerTreeProducts( // Dark Oak + new ItemStack(Blocks.sapling, 1, 5), + new ItemStack(Blocks.log2, 1, 1), + new ItemStack(Blocks.leaves2, 1, 1), + new ItemStack(Items.apple, 1, 0)); + + MTETreeFarm.registerTreeProducts( // Brown Mushroom + new ItemStack(Blocks.brown_mushroom, 1, 0), + new ItemStack(Blocks.brown_mushroom_block, 1, 0), + null, + null); + + MTETreeFarm.registerTreeProducts( // Red Mushroom + new ItemStack(Blocks.red_mushroom, 1, 0), + new ItemStack(Blocks.red_mushroom_block, 1, 0), + null, + null); + } + + private static void generateIC2Trees() { + MTETreeFarm.registerTreeProducts( // Rubber Tree + GTModHandler.getModItem(Mods.IndustrialCraft2.ID, "blockRubSapling", 1, 0), + GTModHandler.getModItem(Mods.IndustrialCraft2.ID, "blockRubWood", 1, 0), + GTModHandler.getModItem(Mods.IndustrialCraft2.ID, "blockRubLeaves", 1, 0), + GTModHandler.getModItem(Mods.IndustrialCraft2.ID, "itemHarz", 1, 0)); + } + + private static void generateTinkersTrees() { + MTETreeFarm.registerTreeProducts( // Slimy + GTModHandler.getModItem(Mods.TinkerConstruct.ID, "slime.sapling", 1, 0), + GTModHandler.getModItem(Mods.TinkerConstruct.ID, "slime.gel", 1, 1), + GTModHandler.getModItem(Mods.TinkerConstruct.ID, "slime.leaves", 1, 0), + GTModHandler.getModItem(Mods.TinkerConstruct.ID, "strangeFood", 1, 0)); + } + + private static void generateGTPPTrees() { + MTETreeFarm.registerTreeProducts( // Rainforest Oak + new ItemStack(BOPBlockRegistrator.sapling_Rainforest, 1, 0), + new ItemStack(BOPBlockRegistrator.log_Rainforest, 3, 0), + new ItemStack(BOPBlockRegistrator.leaves_Rainforest, 1, 0), + new ItemStack(Items.apple, 1, 0)); + + MTETreeFarm.registerTreeProducts( // Pine + new ItemStack(BOPBlockRegistrator.sapling_Pine, 1, 0), + new ItemStack(BOPBlockRegistrator.log_Pine, 1, 0), + new ItemStack(BOPBlockRegistrator.leaves_Pine, 1, 0), + new ItemStack(AgriculturalChem.mAgrichemItem1, 1, 24)); + } + + private static void generateTwilightForestTrees() { + MTETreeFarm.registerTreeProducts( // Sickly Twilight Oak + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 0), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 1, 0), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves", 1, 0), + null); + + MTETreeFarm.registerTreeProducts( // Canopy Tree + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 1), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 1, 1), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves", 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Twilight Mangrove + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 2), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 1, 2), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves", 1, 2), + null); + + MTETreeFarm.registerTreeProducts( // Darkwood + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 3), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 1, 3), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.DarkLeaves", 1, 0), + null); + + MTETreeFarm.registerTreeProducts( // Robust Twilight Oak + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 4), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 4, 0), + // Does not drop more robust saplings normally: + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 0), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves", 1, 0), + null); + + MTETreeFarm.registerTreeProducts( // Tree of Time + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 5), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLog", 1, 0), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLeaves", 1, 0), + // No I am not making this drop clocks. + null); + + MTETreeFarm.registerTreeProducts( // Tree of Transformation + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 6), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLog", 1, 1), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLeaves", 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Sorting Tree + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 8), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLog", 1, 3), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLeaves", 1, 3), + null); + + MTETreeFarm.registerTreeProducts( // Rainbow Oak + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 9), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 1, 0), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves", 1, 3), + null); + + MTETreeFarm.registerTreeProducts( // Thorns + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFThorns", 1, 0), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFThorns", 1, 0), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFThorns", 1, 1), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves3", 1, 0), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFThornRose", 1, 0)); + + MTETreeFarm.registerTreeProducts( // Magic Beans + GTModHandler.getModItem(Mods.TwilightForest.ID, "item.magicBeans", 1, 0), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.HugeStalk", 5, 0), + GTModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves3", 1, 1), + null); + } + + private static void generateGalaxySpaceTrees() { + MTETreeFarm.registerTreeProducts( // Barnarda C + GTModHandler.getModItem(Mods.GalaxySpace.ID, "barnardaCsapling", 1, 1), + GTModHandler.getModItem(Mods.GalaxySpace.ID, "barnardaClog", 1, 0), + GTModHandler.getModItem(Mods.GalaxySpace.ID, "barnardaCleaves", 1, 0), + null); + } + + private static void generateAmunRaTrees() { + MTETreeFarm.registerTreeProducts( // Virilig + GTModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.saplings", 1, 0), + GTModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.log1", 1, 0), + GTModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.null", 1, 0), + null); + + MTETreeFarm.registerTreeProducts( // Lumipod + GTModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.saplings", 1, 1), + GTModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.wood1", 1, 0), + null, + GTModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.wood1", 1, 1)); + } + + private static void generateNaturaTrees() { + MTETreeFarm.registerTreeProducts( // Redwood + GTModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 0), + GTModHandler.getModItem(Mods.Natura.ID, "redwood", 5, 1), + GTModHandler.getModItem(Mods.Natura.ID, "florasapling", 2, 0), + GTModHandler.getModItem(Mods.Natura.ID, "floraleaves", 2, 0), + GTModHandler.getModItem(Mods.Natura.ID, "redwood", 2, 0)); + + MTETreeFarm.registerTreeProducts( // Eucalyptus + GTModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 1), + GTModHandler.getModItem(Mods.Natura.ID, "tree", 1, 0), + GTModHandler.getModItem(Mods.Natura.ID, "floraleaves", 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Hopseed + GTModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 2), + GTModHandler.getModItem(Mods.Natura.ID, "tree", 1, 3), + GTModHandler.getModItem(Mods.Natura.ID, "floraleaves", 1, 2), + null); + + MTETreeFarm.registerTreeProducts( // Sakura + GTModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 3), + GTModHandler.getModItem(Mods.Natura.ID, "tree", 1, 1), + GTModHandler.getModItem(Mods.Natura.ID, "floraleavesnocolor", 1, 0), + null); + + MTETreeFarm.registerTreeProducts( // Ghostwood + GTModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 4), + GTModHandler.getModItem(Mods.Natura.ID, "tree", 1, 2), + GTModHandler.getModItem(Mods.Natura.ID, "floraleavesnocolor", 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Blood + GTModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 5), + GTModHandler.getModItem(Mods.Natura.ID, "bloodwood", 1, 0), + GTModHandler.getModItem(Mods.Natura.ID, "floraleavesnocolor", 1, 2), + new ItemStack(Items.redstone, 1, 0)); + + MTETreeFarm.registerTreeProducts( // Darkwood + GTModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 6), + GTModHandler.getModItem(Mods.Natura.ID, "Dark Tree", 1, 0), + GTModHandler.getModItem(Mods.Natura.ID, "Dark Leaves", 1, 0), + GTModHandler.getModItem(Mods.Natura.ID, "Natura.netherfood", 1, 0)); + + MTETreeFarm.registerTreeProducts( // Fusewood + GTModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 7), + GTModHandler.getModItem(Mods.Natura.ID, "Dark Tree", 1, 1), + GTModHandler.getModItem(Mods.Natura.ID, "Dark Leaves", 1, 3), + null); + + MTETreeFarm.registerTreeProducts( // Maple + GTModHandler.getModItem(Mods.Natura.ID, "Rare Sapling", 1, 0), + GTModHandler.getModItem(Mods.Natura.ID, "Rare Tree", 1, 0), + GTModHandler.getModItem(Mods.Natura.ID, "Rare Leaves", 1, 0), + null); + + MTETreeFarm.registerTreeProducts( // Silverbell + GTModHandler.getModItem(Mods.Natura.ID, "Rare Sapling", 1, 1), + GTModHandler.getModItem(Mods.Natura.ID, "Rare Tree", 1, 1), + GTModHandler.getModItem(Mods.Natura.ID, "Rare Leaves", 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Amaranth + GTModHandler.getModItem(Mods.Natura.ID, "Rare Sapling", 1, 2), + GTModHandler.getModItem(Mods.Natura.ID, "Rare Tree", 1, 2), + GTModHandler.getModItem(Mods.Natura.ID, "Rare Leaves", 1, 2), + null); + + MTETreeFarm.registerTreeProducts( // Tigerwood + GTModHandler.getModItem(Mods.Natura.ID, "Rare Sapling", 1, 3), + GTModHandler.getModItem(Mods.Natura.ID, "Rare Tree", 1, 3), + GTModHandler.getModItem(Mods.Natura.ID, "Rare Leaves", 1, 3), + null); + + MTETreeFarm.registerTreeProducts( // Willow + GTModHandler.getModItem(Mods.Natura.ID, "Rare Sapling", 1, 4), + GTModHandler.getModItem(Mods.Natura.ID, "willow", 1, 0), + GTModHandler.getModItem(Mods.Natura.ID, "floraleavesnocolor", 1, 3), + null); + + MTETreeFarm.registerTreeProducts( // Green Glowshroom + GTModHandler.getModItem(Mods.Natura.ID, "Glowshroom", 1, 0), + GTModHandler.getModItem(Mods.Natura.ID, "greenGlowshroom", 1, 0), + null, + null); + + MTETreeFarm.registerTreeProducts( // Purple Glowshroom + GTModHandler.getModItem(Mods.Natura.ID, "Glowshroom", 1, 1), + GTModHandler.getModItem(Mods.Natura.ID, "purpleGlowshroom", 1, 0), + null, + null); + + MTETreeFarm.registerTreeProducts( // Blue Glowshroom + GTModHandler.getModItem(Mods.Natura.ID, "Glowshroom", 1, 2), + GTModHandler.getModItem(Mods.Natura.ID, "blueGlowshroom", 1, 0), + null, + null); + } + + private static void generateBOPTrees() { + MTETreeFarm.registerTreeProducts( // Apple + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 0), + new ItemStack(Blocks.log, 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "appleLeaves", 1, 0), + new ItemStack(Items.apple, 2, 0)); + + MTETreeFarm.registerTreeProducts( // Yellow Autumn + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 1), + new ItemStack(Blocks.log, 1, 2), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves1", 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "food", 1, 8)); + + MTETreeFarm.registerTreeProducts( // Bamboo + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 2), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "bamboo", 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves1", 1, 9), + null); + + MTETreeFarm.registerTreeProducts( // Magic + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 3), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs2", 1, 1), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves1", 1, 2), + null); + + MTETreeFarm.registerTreeProducts( // Dark + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 4), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs1", 1, 2), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves1", 1, 3), + null); + + MTETreeFarm.registerTreeProducts( // Dying + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 5), + new ItemStack(Blocks.log, 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves2", 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "food", 1, 8)); + + MTETreeFarm.registerTreeProducts( // Fir + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 6), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs1", 1, 3), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves2", 1, 1), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "misc", 1, 13)); + + MTETreeFarm.registerTreeProducts( // Ethereal + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 7), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs2", 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves2", 1, 2), + null); + + MTETreeFarm.registerTreeProducts( // Orange Autumn + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 8), + new ItemStack(Blocks.log2, 1, 1), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves2", 1, 3), + null); + + MTETreeFarm.registerTreeProducts( // Origin + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 9), + new ItemStack(Blocks.log, 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves3", 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "food", 1, 8)); + + MTETreeFarm.registerTreeProducts( // Pink Cherry + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 10), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs1", 1, 1), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves3", 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Maple + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 11), + new ItemStack(Blocks.log, 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves3", 1, 2), + null); + + MTETreeFarm.registerTreeProducts( // White Cherry + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 12), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs1", 1, 1), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves3", 1, 3), + null); + + MTETreeFarm.registerTreeProducts( // Hellbark + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 13), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs4", 1, 1), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves4", 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "food", 1, 8)); + + MTETreeFarm.registerTreeProducts( // Jacaranda + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 14), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs4", 1, 2), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves4", 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Persimmon + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 15), + new ItemStack(Blocks.log, 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "persimmonLeaves", 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "food", 2, 8)); + + MTETreeFarm.registerTreeProducts( // Sacred Oak + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs1", 4, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 2, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves1", 2, 0), + null); + + MTETreeFarm.registerTreeProducts( // Mangrove + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 1), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs2", 1, 2), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves1", 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Palm + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 2), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs2", 1, 3), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves1", 1, 2), + null); + + MTETreeFarm.registerTreeProducts( // Redwood + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 3), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs3", 2, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves1", 1, 3), + null); + + MTETreeFarm.registerTreeProducts( // Willow + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 4), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs3", 1, 1), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves2", 1, 0), + null); + + MTETreeFarm.registerTreeProducts( // Pine + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 5), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs4", 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves2", 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Mahogany + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 6), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs4", 1, 3), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves2", 1, 2), + null); + + MTETreeFarm.registerTreeProducts( // Flowering Oak + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 7), + new ItemStack(Blocks.log, 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves2", 1, 3), + null); + + MTETreeFarm.registerTreeProducts( // Red Flower Stem + new ItemStack(Blocks.red_flower, 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs3", 1, 3), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "petals", 1, 0), + null); + + MTETreeFarm.registerTreeProducts( // Yellow Flower Stem + new ItemStack(Blocks.yellow_flower, 1, 0), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs3", 1, 3), + GTModHandler.getModItem(Mods.BiomesOPlenty.ID, "petals", 1, 1), + null); + } + + private static void addPamTree(String name, int meta) { + MTETreeFarm.registerTreeProducts( + GTModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pam" + name + "Sapling", 1, 0), + new ItemStack(Blocks.log, 1, meta), + new ItemStack(Blocks.leaves, 1, meta), + GTModHandler.getModItem(Mods.PamsHarvestCraft.ID, name + "Item", 2, 0)); + } + + private static void generatePamsTrees() { + MTETreeFarm.registerTreeProducts( // Cinnamon + GTModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pamappleSapling", 1, 0), + new ItemStack(Blocks.log, 1, 0), + new ItemStack(Blocks.leaves, 1, 0), + new ItemStack(Items.apple, 2, 0)); + + addPamTree("almond", 3); + addPamTree("apricot", 3); + addPamTree("avocado", 0); + addPamTree("banana", 3); + addPamTree("cashew", 3); + addPamTree("cherry", 0); + addPamTree("chestnut", 0); + + MTETreeFarm.registerTreeProducts( // Cinnamon + GTModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pamcinnamonSapling", 1, 0), + GTModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pamCinnamon", 1, 0), + new ItemStack(Blocks.leaves, 1, 3), + GTModHandler.getModItem(Mods.PamsHarvestCraft.ID, "cinnamonItem", 2, 0)); + + addPamTree("coconut", 3); + addPamTree("date", 3); + addPamTree("dragonfruit", 3); + addPamTree("durian", 3); + addPamTree("fig", 3); + addPamTree("grapefruit", 3); + addPamTree("lemon", 3); + addPamTree("lime", 3); + + MTETreeFarm.registerTreeProducts( // Maple + GTModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pammapleSapling", 1, 0), + GTModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pamMaple", 1, 0), + new ItemStack(Blocks.leaves, 1, 1), + GTModHandler.getModItem(Mods.PamsHarvestCraft.ID, "maplesyrupItem", 2, 0)); + + addPamTree("mango", 3); + addPamTree("nutmeg", 0); + addPamTree("olive", 0); + addPamTree("orange", 3); + addPamTree("papaya", 3); + + MTETreeFarm.registerTreeProducts( // Paperbark + GTModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pampaperbarkSapling", 1, 0), + GTModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pamPaperbark", 1, 0), + new ItemStack(Blocks.leaves, 1, 3), + new ItemStack(Items.paper, 1, 0)); + + addPamTree("peach", 3); + addPamTree("pear", 0); + addPamTree("pecan", 3); + addPamTree("peppercorn", 3); + addPamTree("persimmon", 3); + addPamTree("pistachio", 3); + addPamTree("plum", 0); + addPamTree("pomegranate", 3); + addPamTree("starfruit", 3); + addPamTree("vanillabean", 3); + addPamTree("walnut", 0); + addPamTree("gooseberry", 0); + } + + private static void generatePamsNetherTrees() { + MTETreeFarm.registerTreeProducts( // Ignis Fruit + GTModHandler.getModItem(Mods.PamsHarvestTheNether.ID, "netherSapling", 1, 0), + GTModHandler.getModItem(Mods.PamsHarvestTheNether.ID, "netherLog", 1, 0), + GTModHandler.getModItem(Mods.PamsHarvestTheNether.ID, "netherLeaves", 1, 0), + GTModHandler.getModItem(Mods.PamsHarvestTheNether.ID, "ignisfruitItem", 2, 0)); + } + + private static void generateThaumcraftTrees() { + MTETreeFarm.registerTreeProducts( // Greatwood + GTModHandler.getModItem(Mods.Thaumcraft.ID, "blockCustomPlant", 1, 0), + GTModHandler.getModItem(Mods.Thaumcraft.ID, "blockMagicalLog", 2, 0), + GTModHandler.getModItem(Mods.Thaumcraft.ID, "blockMagicalLeaves", 1, 0), + null); + + MTETreeFarm.registerTreeProducts( // Silverwood + GTModHandler.getModItem(Mods.Thaumcraft.ID, "blockCustomPlant", 1, 1), + GTModHandler.getModItem(Mods.Thaumcraft.ID, "blockMagicalLog", 1, 1), + GTModHandler.getModItem(Mods.Thaumcraft.ID, "blockMagicalLeaves", 1, 1), + null); + } + + private static void generateThaumicBasesTrees() { + MTETreeFarm.registerTreeProducts( // Golden Oak + GTModHandler.getModItem(Mods.ThaumicBases.ID, "goldenOakSapling", 1, 0), + new ItemStack(Blocks.log, 1, 0), + GTModHandler.getModItem(Mods.ThaumicBases.ID, "genLeaves", 1, 0), + GTModHandler.getModItem(Mods.Thaumcraft.ID, "blockMagicalLeaves", 1, 0), + null); + + MTETreeFarm.registerTreeProducts( // Peaceful + GTModHandler.getModItem(Mods.ThaumicBases.ID, "goldenOakSapling", 1, 1), + GTModHandler.getModItem(Mods.ThaumicBases.ID, "genLogs", 1, 0), + GTModHandler.getModItem(Mods.ThaumicBases.ID, "genLeaves", 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Nether + GTModHandler.getModItem(Mods.ThaumicBases.ID, "goldenOakSapling", 1, 2), + GTModHandler.getModItem(Mods.ThaumicBases.ID, "genLogs", 1, 1), + GTModHandler.getModItem(Mods.ThaumicBases.ID, "genLeaves", 1, 2), + null); + + MTETreeFarm.registerTreeProducts( // Ender + GTModHandler.getModItem(Mods.ThaumicBases.ID, "goldenOakSapling", 1, 3), + GTModHandler.getModItem(Mods.ThaumicBases.ID, "genLogs", 1, 2), + GTModHandler.getModItem(Mods.ThaumicBases.ID, "genLeaves", 1, 3), + null); + } + + private static void generateTaintedMagicTrees() { + MTETreeFarm.registerTreeProducts( // Warpwood + GTModHandler.getModItem(Mods.TaintedMagic.ID, "BlockWarpwoodSapling", 1, 0), + GTModHandler.getModItem(Mods.TaintedMagic.ID, "BlockWarpwoodLog", 1, 0), + GTModHandler.getModItem(Mods.TaintedMagic.ID, "BlockWarpwoodLeaves", 1, 0), + null); + } + + private static void generateForbiddenMagicTrees() { + MTETreeFarm.registerTreeProducts( // Warpwood + GTModHandler.getModItem(Mods.ForbiddenMagic.ID, "TaintSapling", 1, 0), + GTModHandler.getModItem(Mods.ForbiddenMagic.ID, "TaintLog", 1, 0), + GTModHandler.getModItem(Mods.ForbiddenMagic.ID, "TaintLeaves", 1, 0), + GTModHandler.getModItem(Mods.ForbiddenMagic.ID, "TaintFruit", 1, 0)); + } + + private static void generateWitcheryTrees() { + MTETreeFarm.registerTreeProducts( // Rowan + GTModHandler.getModItem(Mods.Witchery.ID, "witchsapling", 1, 0), + GTModHandler.getModItem(Mods.Witchery.ID, "witchlog", 1, 0), + GTModHandler.getModItem(Mods.Witchery.ID, "witchleaves", 1, 0), + GTModHandler.getModItem(Mods.Witchery.ID, "ingredient", 1, 63)); + + MTETreeFarm.registerTreeProducts( // Alder + GTModHandler.getModItem(Mods.Witchery.ID, "witchsapling", 1, 1), + GTModHandler.getModItem(Mods.Witchery.ID, "witchlog", 1, 1), + GTModHandler.getModItem(Mods.Witchery.ID, "witchleaves", 1, 1), + null); + + MTETreeFarm.registerTreeProducts( // Hawthorn + GTModHandler.getModItem(Mods.Witchery.ID, "witchsapling", 1, 2), + GTModHandler.getModItem(Mods.Witchery.ID, "witchlog", 1, 2), + GTModHandler.getModItem(Mods.Witchery.ID, "witchleaves", 1, 2), + null); + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_AlgaeFarm.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_AlgaeFarm.java deleted file mode 100644 index 1d3454c1a0..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_AlgaeFarm.java +++ /dev/null @@ -1,192 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders.recipe; - -import java.util.HashMap; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.util.GT_Recipe; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.api.objects.data.WeightedCollection; -import gtPlusPlus.core.item.chemistry.AgriculturalChem; -import gtPlusPlus.core.util.math.MathUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeLoader_AlgaeFarm { - - private static final HashMap> mRecipeCache = new HashMap<>(); - private static final HashMap> mRecipeCompostCache = new HashMap<>(); - - public static void generateRecipes() { - for (int i = 0; i < 15; i++) { - getTieredRecipeFromCache(i, false); - } - for (int i = 0; i < 15; i++) { - getTieredRecipeFromCache(i, true); - } - } - - public static GT_Recipe getTieredRecipeFromCache(int aTier, boolean aCompost) { - HashMap> aMap = aCompost ? mRecipeCompostCache : mRecipeCache; - String aComp = aCompost ? "(Compost)" : ""; - - AutoMap aTemp = aMap.get(aTier); - if (aTemp == null || aTemp.isEmpty()) { - aTemp = new AutoMap<>(); - aMap.put(aTier, aTemp); - Logger.INFO("Tier " + aTier + aComp + " had no recipes, initialising new map."); - } - if (aTemp.size() < 500) { - Logger - .INFO("Tier " + aTier + aComp + " has less than 500 recipes, generating " + (500 - aTemp.size()) + "."); - for (int i = aTemp.size(); i < 500; i++) { - aTemp.put(generateBaseRecipe(aCompost, aTier)); - } - } - int aIndex = MathUtils.randInt(0, aTemp.isEmpty() ? 1 : aTemp.size()); - Logger.INFO("Using recipe with index of " + aIndex + ". " + aComp); - return aTemp.get(aIndex); - } - - public static int compostForTier(int aTier) { - return aTier > 1 ? (int) Math.min(64, Math.pow(2, aTier - 1)) : 1; - } - - private static GT_Recipe generateBaseRecipe(boolean aUsingCompost, int aTier) { - - // Type Safety - if (aTier < 0) { - return null; - } - - WeightedCollection aOutputTimeMulti = new WeightedCollection<>(); - for (int i = 100; i > 0; i--) { - float aValue = 0; - if (i < 10) { - aValue = 3f; - } else if (i < 20) { - aValue = 2f; - } else { - aValue = 1f; - } - aOutputTimeMulti.put(i, aValue); - } - - final int[] aDurations = new int[] { 2000, 1800, 1600, 1400, 1200, 1000, 512, 256, 128, 64, 32, 16, 8, 4, 2, - 1 }; - - ItemStack[] aInputs = new ItemStack[] {}; - - if (aUsingCompost) { - // Make it use 4 compost per tier if we have some available - // Compost consumption maxes out at 1 stack per cycle - ItemStack aCompost = ItemUtils.getSimpleStack(AgriculturalChem.mCompost, compostForTier(aTier)); - aInputs = new ItemStack[] { aCompost }; - // Boost Tier by one if using compost so it gets a speed boost - aTier++; - } - - // We set these elsewhere - ItemStack[] aOutputs = getOutputsForTier(aTier); - - GT_Recipe tRecipe = new GT_Recipe( - false, - aInputs, - aOutputs, - (Object) null, - new int[] {}, - new FluidStack[] { GT_Values.NF }, - new FluidStack[] { GT_Values.NF }, - (int) (aDurations[aTier] * aOutputTimeMulti.get() / 2), // Time - 0, - 0); - - tRecipe.mSpecialValue = tRecipe.hashCode(); - - return tRecipe; - } - - private static ItemStack[] getOutputsForTier(int aTier) { - - // Create an Automap to dump contents into - AutoMap aOutputMap = new AutoMap<>(); - - // Add loot relevant to tier and also add any from lower tiers. - - if (aTier >= 0) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 2)); - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 4)); - if (MathUtils.randInt(0, 10) > 9) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 2)); - } - } - - if (aTier >= 1) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mAlgaeBiosmass, 4)); - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 2)); - if (MathUtils.randInt(0, 10) > 9) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 4)); - } - } - if (aTier >= 2) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 2)); - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 3)); - if (MathUtils.randInt(0, 10) > 9) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 8)); - } - } - if (aTier >= 3) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, 4)); - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 1)); - if (MathUtils.randInt(0, 10) > 9) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 4)); - } - } - if (aTier >= 4) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 2)); - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 3)); - if (MathUtils.randInt(0, 10) > 9) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, 4)); - } - } - if (aTier >= 5) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, 4)); - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, 2)); - if (MathUtils.randInt(0, 10) > 9) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, 4)); - } - } - // Tier 6 is Highest for outputs - if (aTier >= 6) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, 4)); - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, 2)); - if (MathUtils.randInt(0, 10) > 9) { - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, 8)); - } - } - - // Iterate a special loop at higher tiers to provide more Red/Gold Algae. - for (int i2 = 0; i2 < 20; i2++) { - if (aTier >= (6 + i2)) { - int aMulti = i2 + 1; - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGreenAlgaeBiosmass, aMulti * 4)); - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mBrownAlgaeBiosmass, aMulti * 3)); - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mGoldenBrownAlgaeBiosmass, aMulti * 2)); - aOutputMap.put(ItemUtils.getSimpleStack(AgriculturalChem.mRedAlgaeBiosmass, aMulti)); - } else { - i2 = 20; - } - } - - // Map the AutoMap contents to an Itemstack Array. - ItemStack[] aOutputs = new ItemStack[aOutputMap.size()]; - for (int i = 0; i < aOutputMap.size(); i++) { - aOutputs[i] = aOutputMap.get(i); - } - - // Return filled ItemStack Array. - return aOutputs; - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_ChemicalSkips.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_ChemicalSkips.java deleted file mode 100644 index c22d57b34f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_ChemicalSkips.java +++ /dev/null @@ -1,818 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders.recipe; - -import static goodgenerator.loader.Loaders.advancedRadiationProtectionPlate; -import static gregtech.api.enums.Mods.EternalSingularity; -import static gregtech.api.enums.Mods.GalaxySpace; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.fusionRecipes; -import static gregtech.api.util.GT_ModHandler.getModItem; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.FUSION_THRESHOLD; -import static gregtech.api.util.GT_RecipeConstants.QFT_FOCUS_TIER; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.quantumForceTransformerRecipes; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import com.elisis.gtnhlanth.common.register.WerkstoffMaterialPool; -import com.github.bartimaeusnek.bartworks.system.material.WerkstoffLoader; -import com.github.technus.tectech.recipe.TT_recipeAdder; -import com.github.technus.tectech.thing.block.QuantumGlassBlock; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.MaterialsKevlar; -import gregtech.api.enums.MaterialsUEVplus; -import gregtech.api.enums.Mods; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.items.CombType; -import gregtech.loaders.misc.GT_Bees; -import gtPlusPlus.core.item.chemistry.GenericChem; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.MISC_MATERIALS; -import gtPlusPlus.core.material.Particle; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; - -public class RecipeLoader_ChemicalSkips { - - public static void generate() { - createRecipes(); - } - - private static void createRecipes() { - quantumTransformerRecipes(); - fusionReactorRecipes(); - catalystRecipes(); - tieredCasingRecipes(); - } - - // All the recipes that the QFT can do. Each recipe has a machine tier. - // -> Tier 1 is UEV (UEV circuits and 1 Eternal Singularity); - // -> Tier 2 needs new item from QFT, plus stacks of Infinity; - // -> Tier 3 needs new item from QFT, plus stacks of Transcendent Metal; - // -> Tier 4 needs new item from QFT, plus stacks of Spacetime; - // (Until they are created, the new items are represented by - // HSS-G for Tier 2, HSS-S for Tier 3 and HSS-E for Tier 4) - - private static void quantumTransformerRecipes() { - ItemStack stemcells = GT_Utility.copyAmountUnsafe(64 * 32, ItemList.Circuit_Chip_Stemcell.get(1)); - ItemStack biocells = GT_Utility.copyAmountUnsafe(64 * 32, ItemList.Circuit_Chip_Biocell.get(1)); - // Platline - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffLoader.PTMetallicPowder.get(OrePrefixes.dust, 32), - ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) - .itemOutputs( - Materials.Platinum.getDust(64), - Materials.Palladium.getDust(64), - Materials.Iridium.getDust(64), - Materials.Osmium.getDust(64), - WerkstoffLoader.Rhodium.get(OrePrefixes.dust, 64), - WerkstoffLoader.Ruthenium.get(OrePrefixes.dust, 64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - // Partial platline (from Pd, Os, Ir, Rh and leach) - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffLoader.PDMetallicPowder.get(OrePrefixes.dust, 32), - ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) - .itemOutputs( - Materials.Palladium.getDust(64), - Materials.Platinum.getDust(64), - WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.dust, 64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffLoader.IrLeachResidue.get(OrePrefixes.dust, 32), - ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) - .itemOutputs( - Materials.Iridium.getDust(64), - Materials.Platinum.getDust(64), - Materials.Osmiridium.getDust(64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffLoader.IrOsLeachResidue.get(OrePrefixes.dust, 32), - ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) - .itemOutputs(Materials.Osmium.getDust(64), Materials.Iridium.getDust(64), Materials.Osmiridium.getDust(64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffLoader.CrudeRhMetall.get(OrePrefixes.dust, 32), - ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) - .itemOutputs( - WerkstoffLoader.Rhodium.get(OrePrefixes.dust, 64), - Materials.Palladium.getDust(64), - Materials.Platinum.getDust(64), - WerkstoffLoader.LuVTierMaterial.get(OrePrefixes.dust, 64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffLoader.LeachResidue.get(OrePrefixes.dust, 32), - ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) - .itemOutputs( - Materials.Iridium.getDust(64), - Materials.Osmium.getDust(64), - WerkstoffLoader.Rhodium.get(OrePrefixes.dust, 64), - WerkstoffLoader.Ruthenium.get(OrePrefixes.dust, 64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - // Early Plastics - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Carbon.getDust(64), ItemUtils.getSimpleStack(GenericChem.mPlasticPolymerCatalyst, 0)) - .fluidInputs( - Materials.Oxygen.getGas(1000 * 16), - Materials.Hydrogen.getGas(1000 * 16), - Materials.Chlorine.getGas(1000 * 16), - Materials.Fluorine.getGas(1000 * 16)) - .fluidOutputs( - Materials.Plastic.getMolten(144 * 256), - Materials.PolyvinylChloride.getMolten(144 * 128), - Materials.Polystyrene.getMolten(144 * 64), - Materials.Polytetrafluoroethylene.getMolten(144 * 128), - Materials.Epoxid.getMolten(144 * 64), - Materials.Polybenzimidazole.getMolten(144 * 64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - // Early Rubbers/Cable Materials - GT_Values.RA.stdBuilder() - .itemInputs(Materials.Carbon.getDust(64), ItemUtils.getSimpleStack(GenericChem.mRubberPolymerCatalyst, 0)) - .fluidInputs( - Materials.Oxygen.getGas(1000 * 16), - Materials.Hydrogen.getGas(1000 * 16), - Materials.Chlorine.getGas(1000 * 16)) - .fluidOutputs( - Materials.Silicone.getMolten(144 * 64), - Materials.StyreneButadieneRubber.getMolten(144 * 64), - Materials.PolyphenyleneSulfide.getMolten(144 * 128), - Materials.Rubber.getMolten(144 * 256)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - // Glues and Solders - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Carbon.getDust(32), - Materials.Bismuth.getDust(32), - ItemUtils.getSimpleStack(GenericChem.mAdhesionPromoterCatalyst, 0)) - .itemOutputs(ItemList.StableAdhesive.get(1)) - .fluidInputs(Materials.Oxygen.getGas(10000), Materials.Hydrogen.getGas(10000)) - .fluidOutputs( - MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(1000 * 32), - Materials.AdvancedGlue.getFluid(1000 * 16), - ALLOY.INDALLOY_140.getFluidStack(144 * 64), - Materials.SolderingAlloy.getMolten(144 * 128)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - // Titanium, Tungsten, Indium - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Lead.getDust(16), - Materials.Bauxite.getDust(32), - Materials.Tungstate.getDust(16), - ItemUtils.getSimpleStack(GenericChem.mTitaTungstenIndiumCatalyst, 0)) - .itemOutputs( - Materials.Titanium.getDust(64), - Materials.TungstenSteel.getDust(64), - Materials.TungstenCarbide.getDust(64), - Materials.Indium.getDust(64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - // Thorium, Uranium, Plutonium - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Thorium.getDust(32), - Materials.Uranium.getDust(32), - ItemUtils.getSimpleStack(GenericChem.mRadioactivityCatalyst, 0)) - .itemOutputs( - ELEMENT.getInstance().THORIUM232.getDust(64), - ELEMENT.getInstance().URANIUM233.getDust(64), - Materials.Uranium235.getDust(64), - ELEMENT.getInstance().PLUTONIUM238.getDust(64), - Materials.Plutonium.getDust(64), - Materials.Plutonium241.getDust(64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - // Monaline - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Monazite.getDust(32), - ItemUtils.getSimpleStack(GenericChem.mRareEarthGroupCatalyst, 0)) - .itemOutputs( - Materials.Cerium.getDust(64), - Materials.Gadolinium.getDust(64), - Materials.Samarium.getDust(64), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.dust), 64, 11002), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.dust), 64, 11007), - ItemList.SuperconductorComposite.get(1)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .metadata(QFT_FOCUS_TIER, 2) - .addTo(quantumForceTransformerRecipes); - // Bastline - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Bastnasite.getDust(32), - ItemUtils.getSimpleStack(GenericChem.mRareEarthGroupCatalyst, 0)) - .itemOutputs( - Materials.Holmium.getDust(64), - Materials.Cerium.getDust(64), - Materials.Samarium.getDust(64), - Materials.Gadolinium.getDust(64), - Materials.Lanthanum.getDust(64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .metadata(QFT_FOCUS_TIER, 2) - .addTo(quantumForceTransformerRecipes); - // Bastline from Cerium-rich mixture - GT_Values.RA.stdBuilder() - .itemInputs( - WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 16), - ItemUtils.getSimpleStack(GenericChem.mRareEarthGroupCatalyst, 0)) - .itemOutputs( - Materials.Holmium.getDust(64), - Materials.Cerium.getDust(64), - Materials.Samarium.getDust(64), - Materials.Gadolinium.getDust(64), - Materials.Lanthanum.getDust(64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .metadata(QFT_FOCUS_TIER, 2) - .addTo(quantumForceTransformerRecipes); - // Early Waterline skip (first 4 tiers) - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(GenericChem.mLimpidWaterCatalyst, 0)) - .fluidInputs(Materials.Water.getFluid(40000L)) - .fluidOutputs( - Materials.Grade1PurifiedWater.getFluid(20000L), - Materials.Grade2PurifiedWater.getFluid(10000L), - Materials.Grade3PurifiedWater.getFluid(5000L), - Materials.Grade4PurifiedWater.getFluid(1000L)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .metadata(QFT_FOCUS_TIER, 2) - .addTo(quantumForceTransformerRecipes); - // Stem Cells - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Calcium.getDust(32), - Materials.MeatRaw.getDust(32), - getModItem(NewHorizonsCoreMod.ID, "GTNHBioItems", 32, 2), - ItemUtils.getSimpleStack(GenericChem.mRawIntelligenceCatalyst, 0)) - .itemOutputs(stemcells) - .fluidOutputs( - Materials.GrowthMediumRaw.getFluid(1000 * 1024), - Materials.GrowthMediumSterilized.getFluid(1000 * 512)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .metadata(QFT_FOCUS_TIER, 3) - .addTo(quantumForceTransformerRecipes); - // Unknown Particles - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(GenericChem.mParticleAccelerationCatalyst, 0)) - .itemOutputs( - Particle.getBaseParticle(Particle.UNKNOWN), - Particle.getBaseParticle(Particle.GRAVITON), - Particle.getBaseParticle(Particle.PROTON), - Particle.getBaseParticle(Particle.ELECTRON)) - .fluidInputs(Materials.Hydrogen.getGas(10000L), Materials.Deuterium.getGas(1000L)) - .fluidOutputs(FluidUtils.getFluidStack("plasma.hydrogen", 1000)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .metadata(QFT_FOCUS_TIER, 3) - .addTo(quantumForceTransformerRecipes); - // Lategame Plastics (Missing Radox Polymer and Heavy Radox) - GT_Values.RA.stdBuilder() - .itemInputs( - Materials.Carbon.getDust(64), - Materials.Osmium.getDust(24), - ItemUtils.getSimpleStack(GenericChem.mUltimatePlasticCatalyst, 0)) - .fluidInputs(Materials.Hydrogen.getGas(1000 * 16), Materials.Nitrogen.getGas(1000 * 16)) - .fluidOutputs( - FluidUtils.getFluidStack("xenoxene", 1000 * 16), - FluidUtils.getFluidStack("molten.radoxpoly", 144 * 64), - FluidUtils.getFluidStack("heavyradox", 1000 * 16), - MaterialsKevlar.Kevlar.getMolten(144 * 64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .metadata(QFT_FOCUS_TIER, 4) - .addTo(quantumForceTransformerRecipes); - if (Mods.Forestry.isModLoaded()) { - // Lategame Kevlar using Kevlar bee comb - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Bees.combs.getStackForType(CombType.KEVLAR, 24), - Materials.Carbon.getDust(64), - ItemUtils.getSimpleStack(GenericChem.mUltimatePlasticCatalyst, 0)) - .fluidInputs(Materials.Nitrogen.getGas(1000 * 16), Materials.Hydrogen.getGas(1000 * 16)) - .fluidOutputs( - MaterialsKevlar.PolyurethaneResin.getFluid(1000 * 32), - MaterialsKevlar.LiquidCrystalKevlar.getFluid(144 * 32), - MaterialsKevlar.Kevlar.getMolten(144 * 64)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .metadata(QFT_FOCUS_TIER, 4) - .addTo(quantumForceTransformerRecipes); - // Platline skip using Platline Combs (Palladium, Osmium, Iridium, Platinum) - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Bees.combs.getStackForType(CombType.PLATINUM, 32), - GT_Bees.combs.getStackForType(CombType.PALLADIUM, 32), - GT_Bees.combs.getStackForType(CombType.OSMIUM, 32), - GT_Bees.combs.getStackForType(CombType.IRIDIUM, 32), - ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 0)) - .fluidOutputs( - Materials.Osmium.getMolten(144 * 256), - Materials.Palladium.getMolten(144 * 256), - Materials.Iridium.getMolten(144 * 256), - Materials.Platinum.getMolten(144 * 256)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UV) - .metadata(QFT_FOCUS_TIER, 1) - .addTo(quantumForceTransformerRecipes); - } - // Bio Cells and Mutated Solder - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Circuit_Chip_Stemcell.get(16), - Materials.InfinityCatalyst.getDust(4), - ItemUtils.getSimpleStack(GenericChem.mBiologicalIntelligenceCatalyst, 0)) - .itemOutputs(biocells) - .fluidOutputs( - MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(144 * 128), - Materials.BioMediumSterilized.getFluid(1000 * 256), - Materials.BioMediumRaw.getFluid(1000 * 512)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .metadata(QFT_FOCUS_TIER, 4) - .addTo(quantumForceTransformerRecipes); - // Advanced Waterline skip (last 4 tiers) - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(GenericChem.mFlawlessWaterCatalyst, 0)) - .fluidInputs(Materials.Water.getFluid(40000L)) - .fluidOutputs( - Materials.Grade5PurifiedWater.getFluid(20000L), - Materials.Grade6PurifiedWater.getFluid(10000L), - Materials.Grade7PurifiedWater.getFluid(5000L), - Materials.Grade8PurifiedWater.getFluid(1000L)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .metadata(QFT_FOCUS_TIER, 4) - .addTo(quantumForceTransformerRecipes); - // Rare Particles - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getSimpleStack(GenericChem.mSynchrotronCapableCatalyst, 0), - GregtechItemList.Laser_Lens_Special.get(1)) - .itemOutputs( - Particle.getBaseParticle(Particle.Z_BOSON), - Particle.getBaseParticle(Particle.W_BOSON), - Particle.getBaseParticle(Particle.LAMBDA), - Particle.getBaseParticle(Particle.OMEGA), - Particle.getBaseParticle(Particle.HIGGS_BOSON)) - .fluidInputs( - FluidUtils.getFluidStack("plasma.hydrogen", 30000), - Materials.Helium.getPlasma(30000L), - Materials.Americium.getPlasma(30000L), - new FluidStack(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 30000)) - .duration(3 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .metadata(QFT_FOCUS_TIER, 4) - .addTo(quantumForceTransformerRecipes); - - if (GalaxySpace.isModLoaded()) { - // Seaweed - ItemStack seaweed = GT_Utility - .copyAmountUnsafe(64 * 32, getModItem(GalaxySpace.ID, "tcetiedandelions", 1, 4)); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get("cropSeaweed", 64), - Materials.Mytryl.getDust(16), - ItemUtils.getSimpleStack(GenericChem.mAlgagenicGrowthPromoterCatalyst, 0)) - .itemOutputs(seaweed, getModItem(NewHorizonsCoreMod.ID, "item.TCetiESeaweedExtract", 16)) - .fluidInputs(FluidUtils.getFluidStack("unknowwater", 25_000)) - .fluidOutputs( - FluidUtils.getFluidStack("seaweedbroth", 50_000), - FluidUtils.getFluidStack("iodine", 64_000)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .metadata(QFT_FOCUS_TIER, 4) - .addTo(quantumForceTransformerRecipes); - - } - } - - private static void fusionReactorRecipes() { - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Radon.getPlasma(100), Materials.Nitrogen.getPlasma(100)) - .fluidOutputs(new FluidStack(ELEMENT.getInstance().NEPTUNIUM.getPlasma(), 100)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .metadata(FUSION_THRESHOLD, 1_000_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Americium.getPlasma(100), Materials.Boron.getPlasma(100)) - .fluidOutputs(new FluidStack(ELEMENT.getInstance().FERMIUM.getPlasma(), 100)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .metadata(FUSION_THRESHOLD, 1_000_000_000) - .addTo(fusionRecipes); - - // MK5 versions - GT_Values.RA.stdBuilder() - .fluidInputs(new FluidStack(ELEMENT.getInstance().XENON.getPlasma(), 288), Materials.Yttrium.getMolten(288)) - .fluidOutputs(new FluidStack(ELEMENT.getInstance().NEPTUNIUM.getPlasma(), 288)) - .duration(1 * SECONDS + 12 * TICKS) - .eut(TierEU.RECIPE_UEV) - .metadata(FUSION_THRESHOLD, 1_000_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(new FluidStack(ELEMENT.STANDALONE.FORCE.getPlasma(), 288), Materials.Rubidium.getMolten(288)) - .fluidOutputs(new FluidStack(ELEMENT.getInstance().FERMIUM.getPlasma(), 288)) - .duration(1 * SECONDS + 12 * TICKS) - .eut(TierEU.RECIPE_UEV) - .metadata(FUSION_THRESHOLD, 1_000_000_000) - .addTo(fusionRecipes); - } - - private static void catalystRecipes() { - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - new ItemStack(WerkstoffLoader.items.get(OrePrefixes.dust), 64, 88), - Materials.Osmiridium.getDust(64), - Materials.Carbon.getNanite(64)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mPlatinumGroupCatalyst, 1)) - .fluidInputs(ELEMENT.STANDALONE.HYPOGEN.getFluidStack(360)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - Materials.Polybenzimidazole.getDust(64), - Materials.Polytetrafluoroethylene.getDust(64), - Materials.Carbon.getNanite(64)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mPlasticPolymerCatalyst, 1)) - .fluidInputs(ELEMENT.STANDALONE.HYPOGEN.getFluidStack(360)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - Materials.Silicone.getDust(64), - Materials.StyreneButadieneRubber.getDust(64), - Materials.Carbon.getNanite(64)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mRubberPolymerCatalyst, 1)) - .fluidInputs(ELEMENT.STANDALONE.HYPOGEN.getFluidStack(360)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - ALLOY.INDALLOY_140.getDust(64), - MISC_MATERIALS.ETHYL_CYANOACRYLATE.getCell(64), - Materials.Carbon.getNanite(64)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mAdhesionPromoterCatalyst, 1)) - .fluidInputs(ELEMENT.STANDALONE.HYPOGEN.getFluidStack(360)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - Materials.TungstenSteel.getDust(64), - Materials.Indium.getDust(64), - Materials.Carbon.getNanite(64)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mTitaTungstenIndiumCatalyst, 1)) - .fluidInputs(ELEMENT.STANDALONE.HYPOGEN.getFluidStack(360)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - ELEMENT.getInstance().URANIUM235.getDust(64), - ELEMENT.getInstance().PLUTONIUM241.getDust(64), - Materials.Carbon.getNanite(64)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mRadioactivityCatalyst, 1)) - .fluidInputs(ELEMENT.STANDALONE.HYPOGEN.getFluidStack(360)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - Materials.Samarium.getDust(64), - Materials.Gadolinium.getDust(64), - Materials.Silver.getNanite(1)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mRareEarthGroupCatalyst, 1)) - .fluidInputs(ELEMENT.STANDALONE.HYPOGEN.getFluidStack(9216)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - Materials.Naquadah.getDust(64), - Materials.Adamantium.getDust(64), - Materials.Silver.getNanite(1)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mSimpleNaquadahCatalyst, 1)) - .fluidInputs(ELEMENT.STANDALONE.HYPOGEN.getFluidStack(9216)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - Materials.Naquadria.getDust(64), - Materials.Trinium.getDust(64), - Materials.Gold.getNanite(1)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mAdvancedNaquadahCatalyst, 1)) - .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(9216L)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - ItemList.Circuit_Chip_Stemcell.get(64), - Materials.Gold.getNanite(1)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mRawIntelligenceCatalyst, 1)) - .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(9216L)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - GregtechItemList.Laser_Lens_Special.get(64), - GT_ModHandler.getModItem(EternalSingularity.ID, "eternal_singularity", 10)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mParticleAccelerationCatalyst, 1)) - .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(9216L)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UIV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - MaterialsKevlar.Kevlar.getDust(64), - MaterialsUEVplus.TranscendentMetal.getNanite(1)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mUltimatePlasticCatalyst, 1)) - .fluidInputs(FluidUtils.getFluidStack("molten.shirabon", 92160)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - ItemList.Circuit_Chip_Biocell.get(64), - MaterialsUEVplus.TranscendentMetal.getNanite(1)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mBiologicalIntelligenceCatalyst, 1)) - .fluidInputs(FluidUtils.getFluidStack("molten.shirabon", 92160)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - Particle.getBaseParticle(Particle.HIGGS_BOSON), - Particle.getIon("Helium", 0), - Particle.getIon("Hydrogen", 0), - MaterialsUEVplus.Eternity.getNanite(16)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mSynchrotronCapableCatalyst, 1)) - .fluidInputs(FluidUtils.getFluidStack("molten.shirabon", 92160)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - GT_OreDictUnificator.get("blockShirabon", 16), - MaterialsUEVplus.Universium.getNanite(1), - ItemList.Timepiece.get(1)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.TemporalHarmonyCatalyst, 1)) - .fluidInputs(Materials.DarkIron.getMolten(92160)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UXV) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(10), - CI.getEmptyCatalyst(1), - getModItem(NewHorizonsCoreMod.ID, "item.TCetiESeaweedExtract", 64), - GT_OreDictUnificator.get("dustIodine", 64), - MaterialsUEVplus.TranscendentMetal.getNanite(1)) - .itemOutputs(ItemUtils.getSimpleStack(GenericChem.mAlgagenicGrowthPromoterCatalyst, 1)) - .fluidInputs(FluidUtils.getFluidStack("molten.shirabon", 92_160)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UMV) - .addTo(assemblerRecipes); - } - - private static void tieredCasingRecipes() { - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.ForceFieldGlass.get(1), - 1024 * 30 * 20, - 1024, - (int) TierEU.RECIPE_ZPM, - 32, - new ItemStack[] { GregtechItemList.ForceFieldGlass.get(1), Materials.Carbon.getNanite(4), - ItemList.Emitter_UV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 8), - GregtechItemList.Laser_Lens_Special.get(1), new ItemStack(advancedRadiationProtectionPlate, 2) }, - new FluidStack[] { Materials.Thulium.getMolten(144 * 10), MaterialsUEVplus.ExcitedDTCC.getFluid(5000), - new FluidStack(ELEMENT.getInstance().NEPTUNIUM.getPlasma(), 500), - new FluidStack(ELEMENT.getInstance().FERMIUM.getPlasma(), 500) }, - GregtechItemList.NeutronPulseManipulator.get(1), - 60 * 20, - (int) TierEU.RECIPE_UEV); - - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.NeutronPulseManipulator.get(1), - 2048 * 30 * 20, - 2048, - (int) TierEU.RECIPE_UV, - 32, - new ItemStack[] { GregtechItemList.ForceFieldGlass.get(2), Materials.Carbon.getNanite(8), - ItemList.Emitter_UEV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUEV, 8), - GregtechItemList.Laser_Lens_Special.get(1), new ItemStack(advancedRadiationProtectionPlate, 4), - ItemList.StableAdhesive.get(4) }, - new FluidStack[] { Materials.Thulium.getMolten(144 * 12), MaterialsUEVplus.ExcitedDTPC.getFluid(5000), - new FluidStack(ELEMENT.getInstance().NEPTUNIUM.getPlasma(), 2500), - new FluidStack(ELEMENT.getInstance().FERMIUM.getPlasma(), 2500) }, - GregtechItemList.CosmicFabricManipulator.get(1), - 75 * 20, - (int) TierEU.RECIPE_UIV); - - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.CosmicFabricManipulator.get(1), - 4096 * 30 * 20, - 4096, - (int) TierEU.RECIPE_ZPM, - 32, - new ItemStack[] { GregtechItemList.ForceFieldGlass.get(4), Materials.Carbon.getNanite(16), - ItemList.Emitter_UIV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 8), - GregtechItemList.Laser_Lens_Special.get(1), new ItemStack(advancedRadiationProtectionPlate, 8), - ItemList.SuperconductorComposite.get(4) }, - new FluidStack[] { Materials.Thulium.getMolten(144 * 15), MaterialsUEVplus.ExcitedDTRC.getFluid(5000), - new FluidStack(ELEMENT.getInstance().NEPTUNIUM.getPlasma(), 1000 * 10), - new FluidStack(ELEMENT.getInstance().FERMIUM.getPlasma(), 1000 * 10) }, - GregtechItemList.InfinityInfusedManipulator.get(1), - 90 * 20, - (int) TierEU.RECIPE_UMV); - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.InfinityInfusedManipulator.get(1), - 1024 * 30 * 20, - 1024, - (int) TierEU.RECIPE_ZPM, - 32, - new ItemStack[] { GregtechItemList.ForceFieldGlass.get(8), Materials.Carbon.getNanite(32), - ItemList.Emitter_UMV.get(4), - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 8), - GregtechItemList.Laser_Lens_Special.get(1), new ItemStack(advancedRadiationProtectionPlate, 16), - ItemList.NaquadriaSupersolid.get(4) }, - new FluidStack[] { Materials.Thulium.getMolten(144 * 20), MaterialsUEVplus.ExcitedDTEC.getFluid(5000), - new FluidStack(ELEMENT.getInstance().NEPTUNIUM.getPlasma(), 2000 * 10), - new FluidStack(ELEMENT.getInstance().FERMIUM.getPlasma(), 2000 * 10) }, - GregtechItemList.SpaceTimeContinuumRipper.get(1), - 60 * 20, - (int) TierEU.RECIPE_UXV); - - TT_recipeAdder.addResearchableAssemblylineRecipe( - ItemList.Casing_AdvancedRadiationProof.get(1), - 1024 * 30 * 20, - 1024, - (int) TierEU.RECIPE_ZPM, - 32, - new ItemStack[] { ALLOY.QUANTUM.getFrameBox(1), - GT_OreDictUnificator.get("plateDensePreciousMetalsAlloy", 4), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Neutronium, 16), - ItemList.Field_Generator_UV.get(1), ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getScrew(16) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(144 * 10), }, - GregtechItemList.NeutronShieldingCore.get(1), - 60 * 20, - (int) TierEU.RECIPE_UEV); - - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.NeutronShieldingCore.get(1), - 2048 * 30 * 20, - 2048, - (int) TierEU.RECIPE_UV, - 32, - new ItemStack[] { ALLOY.QUANTUM.getFrameBox(2), - GT_OreDictUnificator.get("plateDenseEnrichedNaquadahAlloy", 4), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 16), - ItemList.Field_Generator_UEV.get(1), - // Radox polymer screw. - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.get("RadoxPoly"), 16), - ItemList.StableAdhesive.get(4) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(144 * 20), }, - GregtechItemList.CosmicFabricShieldingCore.get(1), - 75 * 20, - (int) TierEU.RECIPE_UIV); - - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.CosmicFabricShieldingCore.get(1), - 4096 * 30 * 20, - 4096, - (int) TierEU.RECIPE_UHV, - 32, - new ItemStack[] { ALLOY.QUANTUM.getFrameBox(4), ELEMENT.STANDALONE.HYPOGEN.getPlateDense(4), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 16), - ItemList.Field_Generator_UIV.get(1), GT_OreDictUnificator.get("screwMetastableOganesson", 16), - ItemList.SuperconductorComposite.get(4) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(144 * 40), }, - GregtechItemList.InfinityInfusedShieldingCore.get(1), - 90 * 20, - (int) TierEU.RECIPE_UMV); - - TT_recipeAdder.addResearchableAssemblylineRecipe( - GregtechItemList.InfinityInfusedShieldingCore.get(1), - 8192 * 30 * 20, - 8192, - (int) TierEU.RECIPE_UEV, - 32, - new ItemStack[] { ALLOY.QUANTUM.getFrameBox(8), GT_OreDictUnificator.get("plateDenseShirabon", 4), - GT_OreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 16), - ItemList.Field_Generator_UMV.get(1), - GT_OreDictUnificator.get(OrePrefixes.screw, Materials.Dilithium, 16), - ItemList.NaquadriaSupersolid.get(4) }, - new FluidStack[] { MISC_MATERIALS.MUTATED_LIVING_SOLDER.getFluidStack(144 * 80), }, - GregtechItemList.SpaceTimeBendingCore.get(1), - 120 * 20, - (int) TierEU.RECIPE_UXV); - - GT_Values.RA.stdBuilder() - .itemInputs( - new ItemStack(QuantumGlassBlock.INSTANCE, 1), - ItemList.Field_Generator_ZPM.get(1), - ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getLongRod(6), - ELEMENT.STANDALONE.CHRONOMATIC_GLASS.getPlate(6)) - .itemOutputs(GregtechItemList.ForceFieldGlass.get(1)) - .fluidInputs(ALLOY.QUANTUM.getFluidStack(144 * 6)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UEV) - .addTo(assemblerRecipes); - - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_GTNH.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_GTNH.java deleted file mode 100644 index 680a4291e8..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_GTNH.java +++ /dev/null @@ -1,56 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders.recipe; - -import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; -import static gregtech.api.recipe.RecipeMaps.fusionRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.FUSION_THRESHOLD; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -import gtPlusPlus.core.material.ELEMENT; - -public class RecipeLoader_GTNH { - - public static void generate() { - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Shape_Mold_Ball.get(0L)) - .itemOutputs(new ItemStack(Items.ender_pearl, 1, 0)) - .fluidInputs(new FluidStack(FluidRegistry.getFluid("ender"), 250)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(fluidSolidifierRecipes); - - // MK4 - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Plutonium241.getMolten(144), Materials.Helium.getGas(1000)) - .fluidOutputs(ELEMENT.getInstance().CURIUM.getFluidStack(144)) - .duration(4 * SECONDS + 16 * TICKS) - .eut(98304) - .metadata(FUSION_THRESHOLD, 500_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(ELEMENT.getInstance().CURIUM.getFluidStack(144), Materials.Helium.getPlasma(144)) - .fluidOutputs(ELEMENT.getInstance().CALIFORNIUM.getFluidStack(144)) - .duration(6 * SECONDS + 8 * TICKS) - .eut(196608) - .metadata(FUSION_THRESHOLD, 750_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Plutonium241.getMolten(144), Materials.Calcium.getPlasma(144)) - .fluidOutputs(Materials.Flerovium.getMolten(144)) - .duration(8 * SECONDS) - .eut(196608) - .metadata(FUSION_THRESHOLD, 1_000_000_000) - .addTo(fusionRecipes); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_GlueLine.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_GlueLine.java deleted file mode 100644 index da4a68d7f5..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_GlueLine.java +++ /dev/null @@ -1,426 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders.recipe; - -import static gregtech.api.enums.Mods.GalacticraftCore; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.chemicalReactorRecipes; -import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes; -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.CHEMPLANT_CASING_TIER; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.item.chemistry.AgriculturalChem; -import gtPlusPlus.core.item.chemistry.GenericChem; -import gtPlusPlus.core.material.MISC_MATERIALS; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.plugin.agrichem.BioRecipes; - -public class RecipeLoader_GlueLine { - - public static void generate() { - createRecipes(); - } - - private static void createRecipes() { - chemicalPlantRecipes(); - chemicalReactorRecipes(); - dehydratorRecipes(); - distillationTowerRecipes(); - fluidHeaterRecipes(); - mixerRecipes(); - - glueUsageRecipes(); - } - - private static void chemicalPlantRecipes() { - // CO + C3H6O2 = C4H6O3 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(17), ItemUtils.getSimpleStack(GenericChem.mBlueCatalyst, 0)) - .fluidInputs( - FluidUtils.getFluidStack("carbonmonoxide", 1000), - FluidUtils.getFluidStack("methylacetate", 1000)) - .fluidOutputs(MISC_MATERIALS.ACETIC_ANHYDRIDE.getFluidStack(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(CHEMPLANT_CASING_TIER, 3) - .addTo(chemicalPlantRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(18)) - .fluidInputs( - FluidUtils.getFluidStack("aceticacid", 1000), - FluidUtils.getFluidStack("chlorine", 1000), - MISC_MATERIALS.ACETIC_ANHYDRIDE.getFluidStack(1000)) - .fluidOutputs( - MISC_MATERIALS.CHLOROACETIC_MIXTURE.getFluidStack(1000), - MISC_MATERIALS.ACETIC_ANHYDRIDE.getFluidStack(950)) - .duration(2 * MINUTES + 30 * SECONDS) - .eut(1000) - .metadata(CHEMPLANT_CASING_TIER, 4) - .addTo(chemicalPlantRecipes); - // Na2CO3 + NaCN + C2H3O2Cl + 2HCl = C3H3NO2 + 3NaCl + CO2 + H2O - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(19), - ItemUtils.getSimpleStack(AgriculturalChem.mSodiumCarbonate, 6), - MISC_MATERIALS.SODIUM_CYANIDE.getDust(3)) - .itemOutputs(MISC_MATERIALS.CYANOACETIC_ACID.getDust(9), Materials.Salt.getDust(6)) - .fluidInputs( - MISC_MATERIALS.CHLOROACETIC_ACID.getFluidStack(1000), - FluidUtils.getFluidStack("hydrochloricacid_gt5u", 2000)) - .fluidOutputs(Materials.CarbonDioxide.getGas(1000), GT_ModHandler.getWater(1000)) - .duration(20 * SECONDS) - .eut(1000) - .metadata(CHEMPLANT_CASING_TIER, 4) - .addTo(chemicalPlantRecipes); - // CuSO4 + 5C3H3NO2 + 5C2H6O = CuSO4·5(H2O) + 5C5H7NO2 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(20), - ItemUtils.getSimpleStack(GenericChem.mSolidAcidCatalyst, 0), - MISC_MATERIALS.COPPER_SULFATE.getDust(6), - MISC_MATERIALS.CYANOACETIC_ACID.getDust(45)) - .itemOutputs(MISC_MATERIALS.COPPER_SULFATE_HYDRATED.getDust(11)) - .fluidInputs(Materials.Ethanol.getFluid(5000)) - .fluidOutputs(MISC_MATERIALS.ETHYL_CYANOACETATE.getFluidStack(5000)) - .duration(8 * MINUTES + 20 * SECONDS) - .eut(6000) - .metadata(CHEMPLANT_CASING_TIER, 5) - .addTo(chemicalPlantRecipes); - // C3H3NO2 + C2H6O = C5H7NO2 + H2O - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(21), MISC_MATERIALS.CYANOACETIC_ACID.getDust(9)) - .fluidInputs(Materials.Ethanol.getFluid(1000)) - .fluidOutputs(MISC_MATERIALS.ETHYL_CYANOACETATE.getFluidStack(1000)) - .duration(16 * MINUTES + 40 * SECONDS) - .eut(6000) - .metadata(CHEMPLANT_CASING_TIER, 5) - .addTo(chemicalPlantRecipes); - - BioRecipes.mFormaldehyde = FluidUtils.getFluidStack("fluid.formaldehyde", 1) - .getFluid(); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(22), - ItemUtils.getSimpleStack(GenericChem.mSolidAcidCatalyst, 0)) - .fluidInputs( - MISC_MATERIALS.ETHYL_CYANOACETATE.getFluidStack(100), - FluidUtils.getFluidStack(BioRecipes.mFormaldehyde, 100)) - .fluidOutputs(MISC_MATERIALS.CYANOACRYLATE_POLYMER.getFluidStack(100), FluidUtils.getWater(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .metadata(CHEMPLANT_CASING_TIER, 5) - .addTo(chemicalPlantRecipes); - // CH4 + NH3 + 3O = HCN + 3H2O - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(23), ItemUtils.getSimpleStack(GenericChem.mPinkCatalyst, 0)) - .fluidInputs( - FluidUtils.getFluidStack("methane", 2000), - FluidUtils.getFluidStack("ammonia", 2000), - FluidUtils.getFluidStack("oxygen", 6000)) - .fluidOutputs(MISC_MATERIALS.HYDROGEN_CYANIDE.getFluidStack(2000), FluidUtils.getWater(6000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_HV) - .metadata(CHEMPLANT_CASING_TIER, 3) - .addTo(chemicalPlantRecipes); - - } - - private static void chemicalReactorRecipes() { - // NaOH + HCN = NaCN + H2O - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(17), - ItemUtils.getItemStackOfAmountFromOreDict("dustSodiumHydroxide", 3)) - .itemOutputs(MISC_MATERIALS.SODIUM_CYANIDE.getDust(3)) - .fluidInputs(MISC_MATERIALS.HYDROGEN_CYANIDE.getFluidStack(1000)) - .fluidOutputs(FluidUtils.getWater(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(chemicalReactorRecipes); - - // #UniversalChemical recipemap won't generate LCR recipe if config >= 10 - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(17), - ItemUtils.getItemStackOfAmountFromOreDict("dustSodiumHydroxide", 3)) - .itemOutputs(MISC_MATERIALS.SODIUM_CYANIDE.getDust(3)) - .fluidInputs(MISC_MATERIALS.HYDROGEN_CYANIDE.getFluidStack(1000)) - .fluidOutputs(FluidUtils.getWater(1000)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(multiblockChemicalReactorRecipes); - - // CaCO3 + 2HCl = CaCl2 + CO2 + H2O - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getSimpleStack(ModItems.dustCalciumCarbonate, 5), GT_Utility.getIntegratedCircuit(8)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("bartworks:gt.bwMetaGenerateddust:63", 3)) - .fluidInputs(Materials.HydrochloricAcid.getFluid(2000L)) - .fluidOutputs(Materials.CarbonDioxide.getGas(1000)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Cu + 2H2SO4 = CuSO4 + SO2 + 2H2O - // SO2 + 2H2O -> diluted sulfuric acid - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(19), ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 1)) - .itemOutputs(MISC_MATERIALS.COPPER_SULFATE.getDust(6)) - .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 2000)) - .fluidOutputs(FluidUtils.getFluidStack("dilutedsulfuricacid", 1000)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(chemicalReactorRecipes); - - // #UniversalChemical won't generate LCR recipe if config >= 10 - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(19), ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 1)) - .itemOutputs(MISC_MATERIALS.COPPER_SULFATE.getDust(6)) - .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 2000)) - .fluidOutputs(FluidUtils.getFluidStack("dilutedsulfuricacid", 1000)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(multiblockChemicalReactorRecipes); - } - - private static void dehydratorRecipes() { - GT_Values.RA.stdBuilder() - .itemInputs(MISC_MATERIALS.COPPER_SULFATE_HYDRATED.getDust(11)) - .itemOutputs(MISC_MATERIALS.COPPER_SULFATE.getDust(6)) - .fluidOutputs(GT_ModHandler.getWater(5000)) - .eut(10) - .duration(5 * MINUTES) - .addTo(chemicalDehydratorRecipes); - } - - private static void distillationTowerRecipes() { - GT_Values.RA.stdBuilder() - .fluidInputs(MISC_MATERIALS.CHLOROACETIC_MIXTURE.getFluidStack(1000)) - .fluidOutputs( - MISC_MATERIALS.CHLOROACETIC_ACID.getFluidStack(100), - MISC_MATERIALS.DICHLOROACETIC_ACID.getFluidStack(450), - MISC_MATERIALS.TRICHLOROACETIC_ACID.getFluidStack(450)) - .duration(4 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(distillationTowerRecipes); - - } - - private static void fluidHeaterRecipes() { - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(16)) - .fluidInputs(MISC_MATERIALS.CYANOACRYLATE_POLYMER.getFluidStack(100)) - .fluidOutputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(100)) - .duration(45 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(fluidHeaterRecipes); - } - - private static void mixerRecipes() { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1), MISC_MATERIALS.DICHLOROACETIC_ACID.getCell(1)) - .itemOutputs(CI.emptyCells(1)) - .fluidInputs(MISC_MATERIALS.TRICHLOROACETIC_ACID.getFluidStack(1000)) - .fluidOutputs(MISC_MATERIALS.CHLOROACETIC_MIXTURE.getFluidStack(2000)) - .duration(5 * SECONDS) - .eut(100) - .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getItemStackOfAmountFromOreDict("cellSulfurTrioxide", 1), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(CI.emptyCells(1)) - .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 1000)) - .fluidOutputs(MISC_MATERIALS.SOLID_ACID_MIXTURE.getFluidStack(1000)) - .duration(5 * SECONDS) - .eut(40) - .addTo(mixerRecipes); - - } - - private static void glueUsageRecipes() { - // Braintech Tape recipe, PBI and superglue make 16 tape at once - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Polybenzimidazole, 1L), - GT_ModHandler.getIC2Item("carbonMesh", 1L), - GT_Utility.getIntegratedCircuit(10)) - .itemOutputs(ItemList.Duct_Tape.get(16L)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(100)) - .duration(6 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - // Maintenance Hatch recipe, using Braintech Tape - GT_Values.RA.stdBuilder() - .itemInputs(ItemList.Hull_LV.get(1), ItemList.Duct_Tape.get(1), GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(ItemList.Hatch_Maintenance.get(1)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(100)) - .duration(6 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(assemblerRecipes); - // Graphene recipes from later wafer tiers, using superglue instead of the bronze age glue - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustGraphite", 64), - ItemList.Circuit_Silicon_Wafer4.get(2L), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustGraphene", 64)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(500)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustGraphite", 64), - ItemList.Circuit_Silicon_Wafer5.get(1L), - GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustGraphene", 64)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(250)) - .duration(4 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Lithium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Wood, 4L), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(ItemList.SFMixture.get(32)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(100)) - .duration(1 * MINUTES + 20 * SECONDS) - .eut(16) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.GelledToluene.get(1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Polybenzimidazole, 1L), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(ItemList.SFMixture.get(64)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(100)) - .duration(1 * MINUTES + 20 * SECONDS) - .eut(16) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.PolyvinylChloride, 8), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Paper, 32)) - .itemOutputs(new ItemStack(Items.book, 64, 0)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(200)) - .duration(1 * SECONDS + 12 * TICKS) - .eut(8) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.RedSteel, 18)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32505", 1)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(144)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.NaquadahAlloy, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Europium, 6)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32506", 1)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(288)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_LuV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt01, Materials.ElectrumFlux, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Americium, 18)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32507", 1)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(576)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_ZPM) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt02, Materials.ElectrumFlux, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Naquadah, 24)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32561", 1)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(1152)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_UV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt04, Materials.ElectrumFlux, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahEnriched, 36)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32562", 1)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(2304)) - .duration(10 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.cableGt08, Materials.ElectrumFlux, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.NaquadahAlloy, 48)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32563", 1)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(4608)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 56)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32564", 1)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(9216)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUHV, 2), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 64)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("gregtech:gt.metaitem.01:32565", 1)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(18432)) - .duration(60 * SECONDS) - .eut(TierEU.RECIPE_UHV) - .addTo(assemblerRecipes); - - if (NewHorizonsCoreMod.isModLoaded() && GalacticraftCore.isModLoaded()) { - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getItemStackFromFQRN("GalacticraftMars:item.itemBasicAsteroids:7", 1), - GT_OreDictUnificator.get(OrePrefixes.foil, Materials.Titanium, 8), - ItemUtils.getItemStackFromFQRN("dreamcraft:item.TungstenString", 8), - GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(ItemUtils.getItemStackFromFQRN("GalaxySpace:item.ThermalClothT2", 1)) - .fluidInputs(MISC_MATERIALS.ETHYL_CYANOACRYLATE.getFluidStack(576)) - .duration(30 * SECONDS) - .eut(1024) - .addTo(assemblerRecipes); - - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_LFTR.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_LFTR.java deleted file mode 100644 index 507e149abf..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_LFTR.java +++ /dev/null @@ -1,133 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders.recipe; - -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.LFTR_OUTPUT_POWER; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.liquidFluorineThoriumReactorRecipes; - -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.util.GasSpargingRecipeMap; -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.nuclear.FLUORIDES; -import gtPlusPlus.core.material.nuclear.NUCLIDE; - -public class RecipeLoader_LFTR { - - private static AutoMap mNobleGases; - private static AutoMap mFluorideGases; - private static AutoMap mSpargeGases; - - private static void configureSparging() { - if (mSpargeGases == null) { - mSpargeGases = new AutoMap<>(); - mSpargeGases.add( - Materials.Helium.getGas(1) - .getFluid()); - mSpargeGases.add( - Materials.Fluorine.getGas(1) - .getFluid()); - } - if (mNobleGases == null) { - mNobleGases = new AutoMap<>(); - mNobleGases.add(mSpargeGases.get(0)); - mNobleGases.add(ELEMENT.getInstance().XENON.getFluid()); - mNobleGases.add(ELEMENT.getInstance().NEON.getFluid()); - mNobleGases.add(ELEMENT.getInstance().ARGON.getFluid()); - mNobleGases.add(ELEMENT.getInstance().KRYPTON.getFluid()); - mNobleGases.add(ELEMENT.getInstance().RADON.getFluid()); - } - if (mFluorideGases == null) { - mFluorideGases = new AutoMap<>(); - mFluorideGases.add(mSpargeGases.get(1)); - mFluorideGases.add(FLUORIDES.LITHIUM_FLUORIDE.getFluid()); - mFluorideGases.add(FLUORIDES.NEPTUNIUM_HEXAFLUORIDE.getFluid()); - mFluorideGases.add(FLUORIDES.TECHNETIUM_HEXAFLUORIDE.getFluid()); - mFluorideGases.add(FLUORIDES.SELENIUM_HEXAFLUORIDE.getFluid()); - mFluorideGases.add(FLUORIDES.THORIUM_TETRAFLUORIDE.getFluid()); - } - } - - public static void generate() { - // Fli2BeF4 + Thorium TetraFluoride = Uranium233 - // 72k Ticks/hr - // 1l/4t = 1000l/hr - // 1l/40t = 1000l/10hr (Probably better) LiFBeF2ThF4UF4 - // 1l/20t= 1000l/2.5hr LiFBeF2ZrF4UF4 - // 1l/10t= 1000l/2.5hr LiFBeF2ZrF4U235 - - configureSparging(); - FluidStack Li2BeF4 = NUCLIDE.Li2BeF4.getFluidStack(200); - - // LiFBeF2ThF4UF4 - T3 - GT_Values.RA.stdBuilder() - .fluidInputs(NUCLIDE.LiFBeF2ThF4UF4.getFluidStack(100), Li2BeF4) - .fluidOutputs( - NUCLIDE.LiFBeF2UF4FP.getFluidStack(100), - NUCLIDE.LiFBeF2ThF4.getFluidStack(200), - FLUORIDES.URANIUM_HEXAFLUORIDE.getFluidStack(20), - FLUORIDES.URANIUM_HEXAFLUORIDE.getFluidStack(10)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(0) - .metadata(LFTR_OUTPUT_POWER, 32768 * 4) - .addTo(liquidFluorineThoriumReactorRecipes); - - // LiFBeF2ZrF4UF4 - T2 - GT_Values.RA.stdBuilder() - .fluidInputs(NUCLIDE.LiFBeF2ZrF4UF4.getFluidStack(100), Li2BeF4) - .fluidOutputs( - NUCLIDE.LiFBeF2UF4FP.getFluidStack(50), - NUCLIDE.LiFBeF2ThF4.getFluidStack(100), - FLUORIDES.URANIUM_HEXAFLUORIDE.getFluidStack(10), - FLUORIDES.URANIUM_HEXAFLUORIDE.getFluidStack(5)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(0) - .metadata(LFTR_OUTPUT_POWER, 8192 * 4) - .addTo(liquidFluorineThoriumReactorRecipes); - - // LiFBeF2ZrF4U235 - T1 - GT_Values.RA.stdBuilder() - .fluidInputs(NUCLIDE.LiFBeF2ZrF4U235.getFluidStack(100), Li2BeF4) - .fluidOutputs( - NUCLIDE.LiFBeF2UF4FP.getFluidStack(25), - NUCLIDE.LiFThF4.getFluidStack(50), - FLUORIDES.URANIUM_HEXAFLUORIDE.getFluidStack(4), - FLUORIDES.URANIUM_HEXAFLUORIDE.getFluidStack(2)) - .duration(1 * MINUTES + 40 * SECONDS) - .eut(0) - .metadata(LFTR_OUTPUT_POWER, 8192) - .addTo(liquidFluorineThoriumReactorRecipes); - - // Sparging NEI Recipes - GasSpargingRecipeMap.addRecipe( - new FluidStack(mSpargeGases.get(0), 1000), - NUCLIDE.LiFBeF2UF4FP.getFluidStack(50), - NUCLIDE.Sparged_LiFBeF2UF4FP.getFluidStack(50), - new FluidStack[] { new FluidStack(mNobleGases.get(1), 10), new FluidStack(mNobleGases.get(2), 10), - new FluidStack(mNobleGases.get(3), 10), new FluidStack(mNobleGases.get(4), 10), - new FluidStack(mNobleGases.get(5), 10) }, - new int[] { 20000, 20000, 20000, 20000, 20000 }); - - GasSpargingRecipeMap.addRecipe( - new FluidStack(mSpargeGases.get(1), 100), - NUCLIDE.LiFThF4.getFluidStack(50), - NUCLIDE.Sparged_LiFThF4.getFluidStack(50), - new FluidStack[] { new FluidStack(mFluorideGases.get(1), 5), new FluidStack(mFluorideGases.get(2), 5), - new FluidStack(mFluorideGases.get(3), 5), new FluidStack(mFluorideGases.get(4), 5), - new FluidStack(mFluorideGases.get(5), 5) }, - new int[] { 1000, 1000, 1000, 1000, 1000 }); - - GasSpargingRecipeMap.addRecipe( - new FluidStack(mSpargeGases.get(1), 100), - NUCLIDE.LiFBeF2ThF4.getFluidStack(50), - NUCLIDE.Sparged_LiFBeF2ThF4.getFluidStack(50), - new FluidStack[] { new FluidStack(mFluorideGases.get(1), 10), new FluidStack(mFluorideGases.get(2), 10), - new FluidStack(mFluorideGases.get(3), 10), new FluidStack(mFluorideGases.get(4), 10), - new FluidStack(mFluorideGases.get(5), 10) }, - new int[] { 2000, 2000, 2000, 2000, 2000 }); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_MolecularTransformer.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_MolecularTransformer.java deleted file mode 100644 index b1d71ca120..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_MolecularTransformer.java +++ /dev/null @@ -1,88 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders.recipe; - -import static advsolar.utils.MTRecipeManager.transformerRecipes; -import static gregtech.api.enums.Mods.AdvancedSolarPanel; -import static gregtech.api.enums.Mods.GalaxySpace; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.molecularTransformerRecipes; - -import advsolar.utils.MTRecipeRecord; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.util.math.MathUtils; - -public class RecipeLoader_MolecularTransformer { - - public static void run() { - - for (MTRecipeRecord aRecipe : transformerRecipes) { - int aEU = (int) TierEU.RECIPE_IV; - Logger.INFO("======================="); - Logger.INFO("Generating GT recipe for Molecular Transformer."); - Logger.INFO( - "Input: " + aRecipe.inputStack - .getDisplayName() + ", Output: " + aRecipe.outputStack.getDisplayName() + ", EU/t: " + aEU); - float aTicks = (float) aRecipe.energyPerOperation / (float) aEU; - Logger.INFO("Ticks: " + aTicks); - int aTicksRoundedUp = MathUtils.roundToClosestInt(Math.ceil(aTicks)); - Logger.INFO("Ticks: " + aTicksRoundedUp); - Logger.INFO("Total EU equal or greater? " + ((aTicksRoundedUp * aEU) >= aRecipe.energyPerOperation)); - GT_Values.RA.stdBuilder() - .itemInputs(aRecipe.inputStack) - .itemOutputs(aRecipe.outputStack) - .duration(aTicksRoundedUp) - .eut(aEU) - .addTo(molecularTransformerRecipes); - - Logger.INFO("======================="); - } - - transformerRecipes.clear(); - if (AdvancedSolarPanel.isModLoaded() && GalaxySpace.isModLoaded()) { - - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Glowstone, 1L)) - .itemOutputs(GT_ModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(molecularTransformerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(GalaxySpace.ID, "item.GlowstoneDusts", 1L, 0)) - .itemOutputs(GT_ModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) - .duration(7 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_IV) - .addTo(molecularTransformerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(GalaxySpace.ID, "item.GlowstoneDusts", 1L, 1)) - .itemOutputs(GT_ModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) - .duration(1 * SECONDS + 18 * TICKS) - .eut(TierEU.RECIPE_LuV) - .addTo(molecularTransformerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(GalaxySpace.ID, "item.GlowstoneDusts", 1L, 2)) - .itemOutputs(GT_ModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) - .duration(10 * TICKS) - .eut(TierEU.RECIPE_ZPM) - .addTo(molecularTransformerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(GalaxySpace.ID, "item.GlowstoneDusts", 1L, 3)) - .itemOutputs(GT_ModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) - .duration(3 * TICKS) - .eut(TierEU.RECIPE_UV) - .addTo(molecularTransformerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(GT_ModHandler.getModItem(GalaxySpace.ID, "item.GlowstoneDusts", 1L, 4)) - .itemOutputs(GT_ModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 1L, 9)) - .duration(1 * TICKS) - .eut(TierEU.RECIPE_UHV) - .addTo(molecularTransformerRecipes); - - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_Nuclear.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_Nuclear.java deleted file mode 100644 index efd6023778..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_Nuclear.java +++ /dev/null @@ -1,761 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders.recipe; - -import static gregtech.api.enums.GT_Values.RA; -import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; -import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; -import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; -import static gregtech.api.recipe.RecipeMaps.electroMagneticSeparatorRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.recipe.RecipeMaps.fluidHeaterRecipes; -import static gregtech.api.recipe.RecipeMaps.fusionRecipes; -import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; -import static gregtech.api.recipe.RecipeMaps.sifterRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gregtech.api.util.GT_RecipeConstants.FUSION_THRESHOLD; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.item.chemistry.GenericChem; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.MISC_MATERIALS; -import gtPlusPlus.core.material.nuclear.FLUORIDES; -import gtPlusPlus.core.material.nuclear.NUCLIDE; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeLoader_Nuclear { - - public static void generate() { - createRecipes(); - RecipeLoader_LFTR.generate(); - RecipeLoader_NuclearFuelProcessing.generate(); - } - - private static void createRecipes() { - autoclave(); - blastFurnace(); - centrifugeRecipes(); - chemicalBathRecipes(); - chemicalReactorRecipes(); - dehydratorRecipes(); - electroMagneticSeperator(); - fluidExtractorRecipes(); - fluidHeater(); - fusionChainRecipes(); - macerator(); - mixerRecipes(); - sifter(); - } - - private static void autoclave() { - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("pelletZirconium", 1)) - .fluidInputs(FluidUtils.getFluidStack("chlorine", 4_000)) - .duration(15 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(autoclaveRecipes); - } - - private static void blastFurnace() { - - GT_Values.RA.stdBuilder() - .itemInputs(FLUORIDES.LITHIUM_FLUORIDE.getDust(4), FLUORIDES.BERYLLIUM_FLUORIDE.getDust(3)) - .itemOutputs(NUCLIDE.Li2BeF4.getDust(7)) - .duration(2 * MINUTES + 20 * SECONDS) - .eut(TierEU.RECIPE_EV) - .metadata(COIL_HEAT, 3000) - .addTo(blastFurnaceRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustZrCl4", 1)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustCookedZrCl4", 1)) - .duration(1 * MINUTES) - .eut(340) - .metadata(COIL_HEAT, 300) - .addTo(blastFurnaceRecipes); - } - - private static void centrifugeRecipes() { - - // Process Used Fuel Rods for Krypton - - // Uranium - for (ItemStack depletedRod : new ItemStack[] { - ItemUtils.getItemStackFromFQRN("IC2:reactorUraniumSimpledepleted", 8), - ItemUtils.getItemStackFromFQRN("IC2:reactorUraniumDualdepleted", 4), - ItemUtils.getItemStackFromFQRN("IC2:reactorUraniumQuaddepleted", 2) }) { - GT_Values.RA.stdBuilder() - .itemInputs(depletedRod, GT_Utility.getIntegratedCircuit(20)) - .itemOutputs( - ItemList.IC2_Fuel_Rod_Empty.get(8), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Uranium, 2L), - ELEMENT.getInstance().URANIUM232.getSmallDust(1), - ELEMENT.getInstance().URANIUM233.getSmallDust(1), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Uranium235, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1L)) - .outputChances(10000, 10000, 1000, 1000, 1000, 500) - .fluidOutputs(FluidUtils.getFluidStack("krypton", 60)) - .duration(4 * MINUTES + 10 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(centrifugeRecipes); - } - - // Mox - for (ItemStack depletedRod : new ItemStack[] { - ItemUtils.getItemStackFromFQRN("IC2:reactorMOXSimpledepleted", 8), - ItemUtils.getItemStackFromFQRN("IC2:reactorMOXDualdepleted", 4), - ItemUtils.getItemStackFromFQRN("IC2:reactorMOXQuaddepleted", 2) }) { - GT_Values.RA.stdBuilder() - .itemInputs(depletedRod, GT_Utility.getIntegratedCircuit(20)) - .itemOutputs( - ItemList.IC2_Fuel_Rod_Empty.get(8), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Plutonium, 2L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium241, 1L), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1L), - ELEMENT.getInstance().PLUTONIUM238.getTinyDust(1), - GT_OreDictUnificator.get(OrePrefixes.dustTiny, Materials.Plutonium, 1L)) - .outputChances(10000, 10000, 500, 500, 500, 500) - .fluidOutputs(FluidUtils.getFluidStack("krypton", 90)) - .duration(6 * MINUTES + 15 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(centrifugeRecipes); - } - - // Thorium - for (ItemStack depletedRod : new ItemStack[] { ItemList.Depleted_Thorium_1.get(8), - ItemList.Depleted_Thorium_2.get(4), ItemList.Depleted_Thorium_4.get(2) }) { - GT_Values.RA.stdBuilder() - .itemInputs(depletedRod, GT_Utility.getIntegratedCircuit(20)) - .itemOutputs( - ItemList.IC2_Fuel_Rod_Empty.get(8), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Thorium, 2L), - ELEMENT.getInstance().THORIUM232.getDust(1), - GT_OreDictUnificator.get(OrePrefixes.dustSmall, Materials.Lutetium, 1L), - ELEMENT.getInstance().POLONIUM.getSmallDust(1), - ELEMENT.getInstance().THALLIUM.getTinyDust(1)) - .outputChances(10000, 10000, 5000, 5000, 5000, 2500) - .fluidOutputs(FluidUtils.getFluidStack("krypton", 30)) - .duration(2 * MINUTES + 5 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(centrifugeRecipes); - } - } - - private static void chemicalBathRecipes() { - - int[] chances = { 9000, 6000, 3000 }; - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustTin", 12)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 3), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 4), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 5)) - .outputChances(chances) - .fluidInputs(FluidUtils.getFluidStack("chlorine", 2400)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(chemicalBathRecipes); - - chances = new int[] { 9000, 3000, 1000 }; - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustRutile", 5)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 3), - ItemUtils.getItemStackOfAmountFromOreDict("dustTitanium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustHafnium", 1)) - .outputChances(chances) - .fluidInputs(FluidUtils.getFluidStack("chlorine", 4000)) - .duration(30 * SECONDS) - .eut(1024) - .addTo(chemicalBathRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumCarbonate", 3)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumFluoride", 2)) - .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid", 500)) - .duration(9 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(chemicalBathRecipes); - - } - - private static void chemicalReactorRecipes() { - - ItemStack aGtHydrofluoricAcid = ItemUtils - .getItemStackOfAmountFromOreDictNoBroken("cellHydrofluoricAcid_GT5U", 2); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumCarbonate", 6), - ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumHydroxide", 5)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLi2CO3CaOH2", 11)) - .duration(10 * MINUTES) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroxide", 3)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumFluoride", 2)) - .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid", 500)) - .fluidOutputs(FluidUtils.getFluidStack("water", 1000)) - .duration(2 * MINUTES) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getItemStackOfAmountFromOreDict("cellOxygen", 8), - ItemUtils.getItemStackOfAmountFromOreDict("dustLithium7", 16)) - .itemOutputs(CI.emptyCells(8)) - .fluidInputs(FluidUtils.getFluidStack("water", 8000)) - .fluidOutputs(FluidUtils.getFluidStack("lithiumhydroxide", 6912)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // LFTR Fuel Related Compounds - // Hydroxide - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(3), ELEMENT.getInstance().OXYGEN.getCell(1)) - .itemOutputs(CI.emptyCells(1)) - .fluidInputs(ELEMENT.getInstance().HYDROGEN.getFluidStack(1000)) - .fluidOutputs(MISC_MATERIALS.HYDROXIDE.getFluidStack(1000)) - .duration(8 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Beryllium Hydroxide - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(3), ELEMENT.getInstance().BERYLLIUM.getDust(1)) - .fluidInputs(MISC_MATERIALS.HYDROXIDE.getFluidStack(2000)) - .fluidOutputs(FLUORIDES.BERYLLIUM_HYDROXIDE.getFluidStack(432)) - .duration(4 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Ammonium Bifluoride - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.getIntegratedCircuit(3), - ItemUtils.getItemStackOfAmountFromOreDict("cellHydrofluoricAcid", 1)) - .itemOutputs(CI.emptyCells(1)) - .fluidInputs(MISC_MATERIALS.AMMONIA.getFluidStack(1000)) - .fluidOutputs(FLUORIDES.AMMONIUM_BIFLUORIDE.getFluidStack(576)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Ammonium Bifluoride - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(3), aGtHydrofluoricAcid) - .itemOutputs(CI.emptyCells(2)) - .fluidInputs(MISC_MATERIALS.AMMONIA.getFluidStack(1000)) - .fluidOutputs(FLUORIDES.AMMONIUM_BIFLUORIDE.getFluidStack(576)) - .duration(40 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Ammonium - // To be deprecated now that it is no longer needed for ammonium bifluoride - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(3), ELEMENT.getInstance().HYDROGEN.getCell(1)) - .itemOutputs(CI.emptyCells(1)) - .fluidInputs(MISC_MATERIALS.AMMONIA.getFluidStack(1000)) - .fluidOutputs(MISC_MATERIALS.AMMONIUM.getFluidStack(2000)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - // Sodium Fluoride - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(15), - ItemUtils.getItemStackOfAmountFromOreDict("dustSodiumHydroxide", 3)) - .itemOutputs(FLUORIDES.SODIUM_FLUORIDE.getDust(2)) - .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid", 500)) - .fluidOutputs(FluidUtils.getWater(1000)) - .duration(1 * MINUTES) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedBioCircuit(15), - ItemUtils.getItemStackOfAmountFromOreDict("dustSodiumHydroxide", 3)) - .itemOutputs(FLUORIDES.SODIUM_FLUORIDE.getDust(2)) - .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid_gt5u", 1000)) - .fluidOutputs(FluidUtils.getWater(1000)) - .duration(1 * MINUTES) - .eut(TierEU.RECIPE_LV) - .addTo(UniversalChemical); - } - - private static void dehydratorRecipes() { - - // Makes 7-Lithium - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(14)) - .fluidInputs(FluidUtils.getFluidStack("sulfuriclithium", 1440)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustSulfur", 3), - ItemUtils.getItemStackOfAmountFromOreDict("dustCopper", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustSodium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustCarbon", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustLithium7", 4)) - .duration(30 * SECONDS) - .eut(30) - .addTo(chemicalDehydratorRecipes); - - // Makes Lithium Carbonate - GT_Values.RA.stdBuilder() - .itemInputs(CI.emptyCells(12), ItemUtils.getItemStackOfAmountFromOreDict("dustLepidolite", 20)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustPotassium", 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Aluminium, 4), - ItemUtils.getItemStackOfAmountFromOreDict("cellOxygen", 10), - ItemUtils.getItemStackOfAmountFromOreDict("cellFluorine", 2), - ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumCarbonate", 3)) - .fluidInputs(FluidUtils.getFluidStack("sulfuricacid", 10000)) - .fluidOutputs(FluidUtils.getFluidStack("sulfuriclithium", 10000)) - .eut(1_000) - .duration(1 * MINUTES + 15 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - // Calcium Hydroxide - if (ItemUtils.checkForInvalidItems(ItemUtils.getItemStackOfAmountFromOreDict("dustQuicklime", 1))) { - // CaO + H2O = Ca(OH)2 - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedBioCircuit(20), ItemUtils.getItemStackOfAmountFromOreDict("dustQuicklime", 2)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumHydroxide", 5)) - .fluidInputs(FluidUtils.getFluidStack("water", 1000)) - .eut(TierEU.RECIPE_MV) - .duration(12 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - } else { - Logger.INFO("[dustCalciumHydroxide] FAILED TO LOAD RECIPE"); - if (!ItemUtils.checkForInvalidItems(ItemUtils.getItemStackOfAmountFromOreDict("dustQuicklime", 1))) { - Logger.INFO("Could not find dustQuicklime, cannot make dustCalciumHydroxide."); - } - } - - // 2 LiOH + CaCO3 - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(20), - ItemUtils.getItemStackOfAmountFromOreDict("dustLi2CO3CaOH2", 11)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroxide", 6), - ItemUtils.getItemStackOfAmountFromOreDict("dustCalciumCarbonate", 5)) - .eut(1_000) - .duration(6 * MINUTES) - .addTo(chemicalDehydratorRecipes); - - // LiOH Liquid to Dust - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(22)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumHydroxide", 1)) - .fluidInputs(FluidUtils.getFluidStack("lithiumhydroxide", 144)) - .eut(64) - .duration(1 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - // Zirconium Chloride -> TetraFluoride - FluidStack aHydrogenChloride = new FluidStack(GenericChem.HydrochloricAcid, 800); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(11), - ItemUtils.getItemStackOfAmountFromOreDict("dustCookedZrCl4", 1)) - .itemOutputs(FLUORIDES.ZIRCONIUM_TETRAFLUORIDE.getDust(1)) - .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid", 400)) - .fluidOutputs(aHydrogenChloride) - .eut(TierEU.RECIPE_HV) - .duration(15 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - // Zirconium Chloride -> TetraFluoride - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(10), - ItemUtils.getItemStackOfAmountFromOreDict("dustCookedZrCl4", 1)) - .itemOutputs(FLUORIDES.ZIRCONIUM_TETRAFLUORIDE.getDust(1)) - .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid_gt5u", 800)) - .fluidOutputs(aHydrogenChloride) - .eut(TierEU.RECIPE_HV) - .duration(30 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - // Be(OH)2 + 2 (NH4)HF2 → (NH4)2BeF4 + 2 H2O - // Inputs use solid rule because they are molten forms of solids - // Outputs use fluid rule because they are not molten forms of solids - GT_Values.RA.stdBuilder() - .itemInputs(FLUORIDES.BERYLLIUM_HYDROXIDE.getDust(3), CI.emptyCells(2)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("cellWater", 2)) - .fluidInputs(FLUORIDES.AMMONIUM_BIFLUORIDE.getFluidStack(1152)) - .fluidOutputs(FLUORIDES.AMMONIUM_TETRAFLUOROBERYLLATE.getFluidStack(1000)) - .eut(64) - .duration(6 * SECONDS) - .addTo(chemicalDehydratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(FLUORIDES.BERYLLIUM_HYDROXIDE.getDust(3), CI.getNumberedAdvancedCircuit(17)) - .fluidInputs(FLUORIDES.AMMONIUM_BIFLUORIDE.getFluidStack(1152)) - .fluidOutputs(Materials.Water.getFluid(2000L), FLUORIDES.AMMONIUM_TETRAFLUOROBERYLLATE.getFluidStack(1000)) - .eut(TierEU.RECIPE_MV) - .duration(5 * MINUTES) - .addTo(multiblockChemicalReactorRecipes); - - // (NH4)2BeF4 → 2 NH3 + 2 HF + BeF2 - // Ammonium tetrafluoroberyllate uses fluid rule because it is not a molten form of a solid - // Beryllium fluoride uses solid rule - // Industrial strength hydrofluoric acid follows its usual convention where it is twice as dense as regular - // hydrofluoric acid - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(17), CI.emptyCells(3)) - .itemOutputs( - MISC_MATERIALS.AMMONIA.getCell(2), - ItemUtils.getItemStackOfAmountFromOreDict("cellHydrofluoricAcid", 1), - FLUORIDES.BERYLLIUM_FLUORIDE.getDust(3)) - .fluidInputs(FLUORIDES.AMMONIUM_TETRAFLUOROBERYLLATE.getFluidStack(1000)) - .eut(TierEU.RECIPE_MV) - .duration(5 * MINUTES) - .addTo(chemicalDehydratorRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(17)) - .itemOutputs(FLUORIDES.BERYLLIUM_FLUORIDE.getDust(3)) - .fluidInputs(FLUORIDES.AMMONIUM_TETRAFLUOROBERYLLATE.getFluidStack(1000)) - .fluidOutputs( - MISC_MATERIALS.AMMONIA.getFluidStack(2000), - FluidUtils.getFluidStack("hydrofluoricacid", 1000)) - .eut(TierEU.RECIPE_MV) - .duration(5 * MINUTES) - .addTo(multiblockChemicalReactorRecipes); - } - - private static void electroMagneticSeperator() { - - // Zirconium - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedBauxite", 1)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustBauxite", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustSmallRutile", 1), - ItemUtils.getItemStackOfAmountFromOreDict("nuggetZirconium", 1)) - .outputChances(10000, 2500, 4000) - .duration(20 * SECONDS) - .eut(24) - .addTo(electroMagneticSeparatorRecipes); - // Zircon - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedMagnetite", 1)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustMagnetite", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustSmallZircon", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustTinyZircon", 1)) - .outputChances(10000, 1250, 2500) - .duration(20 * SECONDS) - .eut(24) - .addTo(electroMagneticSeparatorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedCassiterite", 1)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustCassiterite", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustSmallZircon", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustTinyZircon", 1)) - .outputChances(10000, 1250, 2500) - .duration(20 * SECONDS) - .eut(24) - .addTo(electroMagneticSeparatorRecipes); - - } - - private static void fluidExtractorRecipes() { - - // FLiBe fuel - GT_Values.RA.stdBuilder() - .itemInputs(NUCLIDE.Li2BeF4.getDust(1)) - .fluidOutputs(NUCLIDE.Li2BeF4.getFluidStack(144)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(fluidExtractionRecipes); - - // Lithium Fluoride - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustLithiumFluoride", 1)) - .fluidOutputs(FLUORIDES.LITHIUM_FLUORIDE.getFluidStack(144)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(fluidExtractionRecipes); - - // Lithium Fluoride - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("dustBerylliumFluoride", 1)) - .fluidOutputs(FLUORIDES.BERYLLIUM_FLUORIDE.getFluidStack(144)) - .duration(5 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(fluidExtractionRecipes); - - // LFTR Fuel 1 - GT_Values.RA.stdBuilder() - .itemInputs(NUCLIDE.LiFBeF2ZrF4U235.getDust(1)) - .fluidOutputs(NUCLIDE.LiFBeF2ZrF4U235.getFluidStack(144)) - .duration(12 * SECONDS + 10 * TICKS) - .eut(1000) - .addTo(fluidExtractionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(NUCLIDE.LiFBeF2ZrF4UF4.getDust(1)) - .fluidOutputs(NUCLIDE.LiFBeF2ZrF4UF4.getFluidStack(144)) - .duration(7 * SECONDS + 10 * TICKS) - .eut(1500) - .addTo(fluidExtractionRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(NUCLIDE.LiFBeF2ThF4UF4.getDust(1)) - .fluidOutputs(NUCLIDE.LiFBeF2ThF4UF4.getFluidStack(144)) - .duration(7 * SECONDS + 10 * TICKS) - .eut(TierEU.RECIPE_EV) - .addTo(fluidExtractionRecipes); - - // ZIRCONIUM_TETRAFLUORIDE - GT_Values.RA.stdBuilder() - .itemInputs(FLUORIDES.ZIRCONIUM_TETRAFLUORIDE.getDust(1)) - .fluidOutputs(FLUORIDES.ZIRCONIUM_TETRAFLUORIDE.getFluidStack(144)) - .duration(10 * SECONDS) - .eut(512 + 256) - .addTo(fluidExtractionRecipes); - } - - private static void fusionChainRecipes() { - // Mk1 - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Boron.getPlasma(144), Materials.Calcium.getPlasma(16)) - .fluidOutputs(new FluidStack(ELEMENT.getInstance().NEON.getPlasma(), 1000)) - .duration(3 * SECONDS + 4 * TICKS) - .eut(TierEU.RECIPE_LuV) - .metadata(FUSION_THRESHOLD, 100_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs( - new FluidStack(ELEMENT.getInstance().NEON.getPlasma(), 144), - Materials.Bedrockium.getMolten(144)) - .fluidOutputs(new FluidStack(ELEMENT.STANDALONE.FORCE.getPlasma(), 1000)) - .duration(1 * SECONDS + 12 * TICKS) - .eut(TierEU.RECIPE_LuV) - .metadata(FUSION_THRESHOLD, 100_000_000) - .addTo(fusionRecipes); - - // Mk2 - GT_Values.RA.stdBuilder() - .fluidInputs(Materials.Niobium.getPlasma(144), Materials.Zinc.getPlasma(144)) - .fluidOutputs(new FluidStack(ELEMENT.getInstance().KRYPTON.getPlasma(), 144)) - .duration(32 * TICKS) - .eut(TierEU.RECIPE_ZPM) - .metadata(FUSION_THRESHOLD, 300_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs( - new FluidStack(ELEMENT.getInstance().KRYPTON.getPlasma(), 144), - new FluidStack(ELEMENT.STANDALONE.FORCE.getPlasma(), 1000)) - .fluidOutputs(new FluidStack(ELEMENT.STANDALONE.ASTRAL_TITANIUM.getPlasma(), 1000)) - .duration(32 * TICKS) - .eut(TierEU.RECIPE_ZPM) - .metadata(FUSION_THRESHOLD, 300_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs( - new FluidStack(ELEMENT.STANDALONE.ASTRAL_TITANIUM.getPlasma(), 144), - new FluidStack(ALLOY.TITANSTEEL.getFluid(), 8)) - .fluidOutputs(new FluidStack(ELEMENT.STANDALONE.RUNITE.getPlasma(), 1000)) - .duration(32 * TICKS) - .eut(TierEU.RECIPE_ZPM) - .metadata(FUSION_THRESHOLD, 300_000_000) - .addTo(fusionRecipes); - - // Mk3 - GT_Values.RA.stdBuilder() - .fluidInputs(ELEMENT.getInstance().CURIUM.getFluidStack(144), Materials.Americium.getPlasma(144)) - .fluidOutputs(new FluidStack(ELEMENT.getInstance().XENON.getPlasma(), 144)) - .duration(16 * TICKS) - .eut(TierEU.RECIPE_UV) - .metadata(FUSION_THRESHOLD, 500_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs( - new FluidStack(ELEMENT.getInstance().XENON.getPlasma(), 144), - new FluidStack(ELEMENT.STANDALONE.RUNITE.getPlasma(), 1000)) - .fluidOutputs(new FluidStack(ELEMENT.STANDALONE.ADVANCED_NITINOL.getPlasma(), 1000)) - .duration(16 * TICKS) - .eut(TierEU.RECIPE_UV) - .metadata(FUSION_THRESHOLD, 500_000_000) - .addTo(fusionRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs( - new FluidStack(ELEMENT.STANDALONE.ADVANCED_NITINOL.getPlasma(), 72), - Materials.Tartarite.getMolten(2)) - .fluidOutputs(new FluidStack(ELEMENT.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 1000)) - .duration(8 * TICKS) - .eut(TierEU.RECIPE_UV) - .metadata(FUSION_THRESHOLD, 500_000_000) - .addTo(fusionRecipes); - } - - private static void macerator() { - RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("pelletZirconium", 1)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("dustZrCl4", 5)) - .eut(2) - .duration(20 * SECONDS) - .addTo(maceratorRecipes); - } - - private static void mixerRecipes() { - - // Rebalanced to correct the chemistry - // UF4 uses solid rule due to item form even though item form currently is inaccessible because item form may be - // accessible in future and must be consistent - // UF4 solid rule also assumes 1:144 item:fluid ratio in this case - GT_Values.RA.stdBuilder() - .itemInputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustUranium233", 4), - ItemUtils.getItemStackOfAmountFromOreDict("dustUranium235", 1)) - .fluidInputs(FluidUtils.getFluidStack("hydrofluoricacid", 10000)) - .fluidOutputs(FLUORIDES.URANIUM_TETRAFLUORIDE.getFluidStack(3600)) - .duration(2 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(mixerRecipes); - - } - - private static void sifter() { - // Zirconium - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedIlmenite", 1)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustIron", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustWroughtIron", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustHafnium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustHafnium", 1)) - .outputChances(5000, 278, 1000, 1000, 300, 300) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(sifterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedTin", 1)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustTin", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustZinc", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1)) - .outputChances(10000, 556, 1500, 1000, 500, 500) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(sifterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedCassiterite", 1)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustCassiterite", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustTin", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustZirconium", 1)) - .outputChances(10000, 556, 1500, 1000, 500, 500) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(sifterRecipes); - // Radium - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedThorium", 1)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustThorium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustLead", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1)) - .outputChances(10000, 500, 300, 200, 100, 100) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(sifterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedUranium", 1)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustUranium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustLead", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1)) - .outputChances(10000, 556, 1000, 500, 500, 500) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(sifterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedUraninite", 1)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustUraninite", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustUranium", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1)) - .outputChances(10000, 556, 500, 250, 250, 250) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(sifterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict("crushedPurifiedPitchblende", 1)) - .itemOutputs( - ItemUtils.getItemStackOfAmountFromOreDict("dustPitchblende", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustLead", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1), - ItemUtils.getItemStackOfAmountFromOreDict("dustRadium226", 1)) - .outputChances(10000, 556, 500, 250, 250, 250) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(sifterRecipes); - - } - - private static void fluidHeater() { - GT_Values.RA.stdBuilder() - .itemInputs(FLUORIDES.SODIUM_FLUORIDE.getDust(1)) - .fluidOutputs(FLUORIDES.SODIUM_FLUORIDE.getFluidStack(144)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(fluidHeaterRecipes); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_NuclearFuelProcessing.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_NuclearFuelProcessing.java deleted file mode 100644 index 30066acf66..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_NuclearFuelProcessing.java +++ /dev/null @@ -1,255 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders.recipe; - -import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; -import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.CHEMPLANT_CASING_TIER; -import static gregtech.api.util.GT_RecipeConstants.COIL_HEAT; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalPlantRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.coldTrapRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.fissionFuelProcessingRecipes; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.reactorProcessingUnitRecipes; - -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -import gtPlusPlus.core.item.chemistry.NuclearChem; -import gtPlusPlus.core.material.ELEMENT; -import gtPlusPlus.core.material.nuclear.FLUORIDES; -import gtPlusPlus.core.material.nuclear.NUCLIDE; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; - -public class RecipeLoader_NuclearFuelProcessing { - - public static void generate() { - - // Create Fuels - - final FluidStack aLithiumFluoride = FLUORIDES.LITHIUM_FLUORIDE.getFluidStack(100); - final FluidStack aBerylliumFluoride = FLUORIDES.BERYLLIUM_FLUORIDE.getFluidStack(100); - final FluidStack aThoriumFluoride = FLUORIDES.THORIUM_TETRAFLUORIDE.getFluidStack(100); - final FluidStack aZirconiumFluoride = FLUORIDES.ZIRCONIUM_TETRAFLUORIDE.getFluidStack(100); - final FluidStack aUraniumTetraFluoride = FLUORIDES.URANIUM_TETRAFLUORIDE.getFluidStack(100); - final FluidStack aUranium235 = ELEMENT.getInstance().URANIUM235.getFluidStack(1000); - final FluidStack aLiFBeF2ZrF4U235 = NUCLIDE.LiFBeF2ZrF4U235.getFluidStack(100); - final FluidStack aLiFBeF2ZrF4UF4 = NUCLIDE.LiFBeF2ZrF4UF4.getFluidStack(100); - final FluidStack aLiFBeF2ThF4UF4 = NUCLIDE.LiFBeF2ThF4UF4.getFluidStack(100); - - // 7LiF - BeF2 - ZrF4 - U235 - 590C - GT_Values.RA.stdBuilder() - .fluidInputs( - FluidUtils.getFluidStack(aLithiumFluoride, 550), - FluidUtils.getFluidStack(aBerylliumFluoride, 150), - FluidUtils.getFluidStack(aZirconiumFluoride, 60), - FluidUtils.getFluidStack(aUranium235, 240)) - .fluidOutputs(FluidUtils.getFluidStack(aLiFBeF2ZrF4U235, 1000)) - .duration(30 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(fissionFuelProcessingRecipes); - // 7LiF - BeF2 - ZrF4 - UF4 - 650C - GT_Values.RA.stdBuilder() - .fluidInputs( - FluidUtils.getFluidStack(aLithiumFluoride, 600), - FluidUtils.getFluidStack(aBerylliumFluoride, 250), - FluidUtils.getFluidStack(aZirconiumFluoride, 80), - FluidUtils.getFluidStack(aUraniumTetraFluoride, 70)) - .fluidOutputs(FluidUtils.getFluidStack(aLiFBeF2ZrF4UF4, 1000)) - .duration(40 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(fissionFuelProcessingRecipes); - // 7liF - BeF2 - ThF4 - UF4 - 566C - GT_Values.RA.stdBuilder() - .fluidInputs( - FluidUtils.getFluidStack(aLithiumFluoride, 580), - FluidUtils.getFluidStack(aBerylliumFluoride, 270), - FluidUtils.getFluidStack(aThoriumFluoride, 80), - FluidUtils.getFluidStack(aUraniumTetraFluoride, 70)) - .fluidOutputs(FluidUtils.getFluidStack(aLiFBeF2ThF4UF4, 1000)) - .duration(50 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(fissionFuelProcessingRecipes); - - // Reprocess Fuels - - // Reactor Blanket step 1 - Fluorination - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(17), ELEMENT.getInstance().FLUORINE.getCell(6)) - .itemOutputs( - CI.emptyCells(5), - FLUORIDES.LITHIUM_FLUORIDE.getCell(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1)) - .outputChances(10000, 10000, 500, 500, 500, 250, 250, 250) - .fluidInputs(NUCLIDE.LiFThF4.getFluidStack(10000)) - .fluidOutputs(NUCLIDE.UF6F2.getFluidStack(1500)) - .duration(10 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(reactorProcessingUnitRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(18), ELEMENT.getInstance().FLUORINE.getCell(6)) - .itemOutputs( - CI.emptyCells(4), - FLUORIDES.LITHIUM_FLUORIDE.getCell(1), - FLUORIDES.BERYLLIUM_FLUORIDE.getCell(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1)) - .outputChances(10000, 10000, 10000, 1000, 1000, 1000, 500, 500, 500) - .fluidInputs(NUCLIDE.LiFBeF2ThF4.getFluidStack(10000)) - .fluidOutputs(NUCLIDE.UF6F2.getFluidStack(3000)) - .duration(10 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(reactorProcessingUnitRecipes); - // Reactor Blanket step 1 - Fluorination - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(7), ELEMENT.getInstance().FLUORINE.getCell(6)) - .itemOutputs( - CI.emptyCells(4), - FLUORIDES.LITHIUM_FLUORIDE.getCell(2), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1)) - .outputChances(10000, 10000, 1000, 1000, 1000, 1000, 1000, 1000) - .fluidInputs(NUCLIDE.Sparged_LiFThF4.getFluidStack(10000)) - .fluidOutputs(NUCLIDE.UF6F2.getFluidStack(3000)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(reactorProcessingUnitRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(8), ELEMENT.getInstance().FLUORINE.getCell(6)) - .itemOutputs( - CI.emptyCells(2), - FLUORIDES.LITHIUM_FLUORIDE.getCell(2), - FLUORIDES.BERYLLIUM_FLUORIDE.getCell(2), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1), - ELEMENT.getInstance().PROTACTINIUM.getDust(1)) - .outputChances(10000, 10000, 10000, 2000, 2000, 2000, 2000, 2000, 2000) - .fluidInputs(NUCLIDE.Sparged_LiFBeF2ThF4.getFluidStack(10000)) - .fluidOutputs(NUCLIDE.UF6F2.getFluidStack(6000)) - .duration(5 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(reactorProcessingUnitRecipes); - - // Reactor Blanket step 2 - Sorption + Cold Trap - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(8), FLUORIDES.SODIUM_FLUORIDE.getCell(4)) - .itemOutputs( - ELEMENT.getInstance().FLUORINE.getCell(2), - FLUORIDES.URANIUM_HEXAFLUORIDE.getCell(2), - ELEMENT.getInstance().URANIUM233.getDust(1), - ELEMENT.getInstance().URANIUM233.getDust(1), - ELEMENT.getInstance().URANIUM233.getDust(1)) - .outputChances(10000, 10000, 3000, 2000, 1000) - .fluidInputs(NUCLIDE.UF6F2.getFluidStack(3000)) - .fluidOutputs(FLUORIDES.SODIUM_FLUORIDE.getFluidStack(2000)) - .duration(10 * MINUTES) - .eut(TierEU.RECIPE_HV) - .addTo(coldTrapRecipes); - - // LiBeF2UF4FP + F2 = LiFBeF2 & UF6F2FP - // Reactor Core step 1 - Process Burnt Salt - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(1), ELEMENT.getInstance().FLUORINE.getCell(1)) - .itemOutputs(NUCLIDE.UF6F2FP.getCell(1)) - .outputChances(10000) - .fluidInputs(NUCLIDE.LiFBeF2UF4FP.getFluidStack(1000)) - .fluidOutputs(FluidUtils.getFluidStack(NuclearChem.Impure_LiFBeF2, 1000)) - .duration(2 * HOURS) - .eut(TierEU.RECIPE_HV) - .addTo(reactorProcessingUnitRecipes); - // LiBeF2UF4FP + F2 = LiFBeF2 & UF6F2FP - // Reactor Core step 1 - Process Burnt Salt - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(1), ELEMENT.getInstance().FLUORINE.getCell(3)) - .itemOutputs(CI.emptyCells(1), NUCLIDE.UF6F2FP.getCell(2)) - .fluidInputs(NUCLIDE.Sparged_LiFBeF2UF4FP.getFluidStack(1000)) - .fluidOutputs(FluidUtils.getFluidStack(NuclearChem.Impure_LiFBeF2, 2000)) - .duration(60 * MINUTES) - .eut(TierEU.RECIPE_HV) - .addTo(reactorProcessingUnitRecipes); - - // Reactor Core step 2A - Sorption + Cold Trap - GT_Values.RA.stdBuilder() - .itemInputs(CI.getNumberedAdvancedCircuit(8), FLUORIDES.SODIUM_FLUORIDE.getCell(3)) - .itemOutputs( - ELEMENT.getInstance().FLUORINE.getCell(1), - FLUORIDES.URANIUM_HEXAFLUORIDE.getCell(2), - ELEMENT.getInstance().PHOSPHORUS.getDust(1), - ELEMENT.getInstance().PHOSPHORUS.getDust(1), - ELEMENT.getInstance().PHOSPHORUS.getDust(1), - ELEMENT.getInstance().PHOSPHORUS.getDust(1), - ELEMENT.getInstance().PHOSPHORUS.getDust(1), - ELEMENT.getInstance().PHOSPHORUS.getDust(1)) - .outputChances(10000, 10000, 5000, 5000, 5000, 5000, 5000, 5000) - .fluidInputs(NUCLIDE.UF6F2FP.getFluidStack(2000)) - .fluidOutputs(FLUORIDES.SODIUM_FLUORIDE.getFluidStack(2000)) - .duration(10 * MINUTES) - .eut(TierEU.RECIPE_EV) - .addTo(coldTrapRecipes); - - // Reactor Core step 2B - Distillation - GT_Values.RA.stdBuilder() - .fluidInputs(FluidUtils.getFluidStack(NuclearChem.Impure_LiFBeF2, 1000)) - .fluidOutputs(NUCLIDE.LiFBeF2.getFluidStack(250)) - .duration(7 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_IV) - .addTo(distillationTowerRecipes); - - // UF6 -> UF4 reduction - // UF6 + LiFBeF2 + H2 -> LiFBeF2UF4 + HF - GT_Values.RA.stdBuilder() - .itemInputs(FLUORIDES.URANIUM_HEXAFLUORIDE.getCell(1), NUCLIDE.LiFBeF2.getCell(1)) - .fluidInputs(Materials.Hydrogen.getGas(2000L)) - .itemOutputs(ItemUtils.getItemStackOfAmountFromOreDict("cellHydrofluoricAcid", 2)) - .fluidOutputs(NUCLIDE.LiFBeF2UF4.getFluidStack(3000)) - .duration(2 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_IV) - .metadata(COIL_HEAT, 5400) - .addTo(blastFurnaceRecipes); - // Alternative recipe to the above, for chemplant, to not use cells - - GT_Values.RA.stdBuilder() - .fluidInputs( - FLUORIDES.URANIUM_HEXAFLUORIDE.getFluidStack(1000), - NUCLIDE.LiFBeF2.getFluidStack(1000), - ELEMENT.getInstance().HYDROGEN.getFluidStack(2000)) - .fluidOutputs(NUCLIDE.LiFBeF2UF4.getFluidStack(3000), FluidUtils.getFluidStack("hydrofluoricacid", 2000)) - .duration(2 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_IV) - .metadata(CHEMPLANT_CASING_TIER, 4) - .addTo(chemicalPlantRecipes); - - GT_Values.RA.stdBuilder() - .fluidInputs(FLUORIDES.ZIRCONIUM_TETRAFLUORIDE.getFluidStack(100), NUCLIDE.LiFBeF2UF4.getFluidStack(900)) - .fluidOutputs(NUCLIDE.LiFBeF2ZrF4UF4.getFluidStack(1000)) - .duration(12 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(fissionFuelProcessingRecipes); - GT_Values.RA.stdBuilder() - .fluidInputs(FLUORIDES.THORIUM_TETRAFLUORIDE.getFluidStack(100), NUCLIDE.LiFBeF2UF4.getFluidStack(900)) - .fluidOutputs(NUCLIDE.LiFBeF2ThF4UF4.getFluidStack(1000)) - .duration(15 * MINUTES) - .eut(TierEU.RECIPE_IV) - .addTo(fissionFuelProcessingRecipes); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_TreeFarm.java b/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_TreeFarm.java deleted file mode 100644 index f3d596fb9e..0000000000 --- a/src/main/java/gtPlusPlus/xmod/gregtech/loaders/recipe/RecipeLoader_TreeFarm.java +++ /dev/null @@ -1,632 +0,0 @@ -package gtPlusPlus.xmod.gregtech.loaders.recipe; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.Mods; -import gregtech.api.util.GT_ModHandler; -import gtPlusPlus.core.item.chemistry.AgriculturalChem; -import gtPlusPlus.xmod.bop.blocks.BOP_Block_Registrator; -import gtPlusPlus.xmod.forestry.ForestryTreeHandler; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntityTreeFarm; - -public class RecipeLoader_TreeFarm { - - public static void generateRecipes() { - generateVanillaTrees(); - - if (Mods.IndustrialCraft2.isModLoaded()) generateIC2Trees(); - if (Mods.TinkerConstruct.isModLoaded()) generateTinkersTrees(); - generateGTPPTrees(); - - if (Mods.TwilightForest.isModLoaded()) generateTwilightForestTrees(); - if (Mods.GalaxySpace.isModLoaded()) generateGalaxySpaceTrees(); - if (Mods.GalacticraftAmunRa.isModLoaded()) generateAmunRaTrees(); - - if (Mods.Thaumcraft.isModLoaded()) generateThaumcraftTrees(); - if (Mods.ThaumicBases.isModLoaded()) generateThaumicBasesTrees(); - if (Mods.TaintedMagic.isModLoaded()) generateTaintedMagicTrees(); - if (Mods.ForbiddenMagic.isModLoaded()) generateForbiddenMagicTrees(); - if (Mods.Witchery.isModLoaded()) generateWitcheryTrees(); - - if (Mods.Natura.isModLoaded()) generateNaturaTrees(); - if (Mods.BiomesOPlenty.isModLoaded()) generateBOPTrees(); - if (Mods.PamsHarvestCraft.isModLoaded()) generatePamsTrees(); - if (Mods.PamsHarvestTheNether.isModLoaded()) generatePamsNetherTrees(); - - if (Mods.Forestry.isModLoaded()) { - ForestryTreeHandler.generateForestryTrees(); - } - - if (Mods.Forestry.isModLoaded() && Mods.ExtraTrees.isModLoaded()) ForestryTreeHandler.generateExtraTreesTrees(); - } - - private static void generateVanillaTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Oak - new ItemStack(Blocks.sapling, 1, 0), - new ItemStack(Blocks.log, 1, 0), - new ItemStack(Blocks.leaves, 1, 0), - new ItemStack(Items.apple, 1, 0)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Spruce - new ItemStack(Blocks.sapling, 1, 1), - new ItemStack(Blocks.log, 2, 1), - new ItemStack(Blocks.leaves, 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Birch - new ItemStack(Blocks.sapling, 1, 2), - new ItemStack(Blocks.log, 1, 2), - new ItemStack(Blocks.leaves, 1, 2), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Jungle - new ItemStack(Blocks.sapling, 1, 3), - new ItemStack(Blocks.log, 2, 3), - new ItemStack(Blocks.leaves, 1, 3), - new ItemStack(Items.dye, 1, 3)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Acacia - new ItemStack(Blocks.sapling, 1, 4), - new ItemStack(Blocks.log2, 1, 0), - new ItemStack(Blocks.leaves2, 1, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Dark Oak - new ItemStack(Blocks.sapling, 1, 5), - new ItemStack(Blocks.log2, 1, 1), - new ItemStack(Blocks.leaves2, 1, 1), - new ItemStack(Items.apple, 1, 0)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Brown Mushroom - new ItemStack(Blocks.brown_mushroom, 1, 0), - new ItemStack(Blocks.brown_mushroom_block, 1, 0), - null, - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Red Mushroom - new ItemStack(Blocks.red_mushroom, 1, 0), - new ItemStack(Blocks.red_mushroom_block, 1, 0), - null, - null); - } - - private static void generateIC2Trees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Rubber Tree - GT_ModHandler.getModItem(Mods.IndustrialCraft2.ID, "blockRubSapling", 1, 0), - GT_ModHandler.getModItem(Mods.IndustrialCraft2.ID, "blockRubWood", 1, 0), - GT_ModHandler.getModItem(Mods.IndustrialCraft2.ID, "blockRubLeaves", 1, 0), - GT_ModHandler.getModItem(Mods.IndustrialCraft2.ID, "itemHarz", 1, 0)); - } - - private static void generateTinkersTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Slimy - GT_ModHandler.getModItem(Mods.TinkerConstruct.ID, "slime.sapling", 1, 0), - GT_ModHandler.getModItem(Mods.TinkerConstruct.ID, "slime.gel", 1, 1), - GT_ModHandler.getModItem(Mods.TinkerConstruct.ID, "slime.leaves", 1, 0), - GT_ModHandler.getModItem(Mods.TinkerConstruct.ID, "strangeFood", 1, 0)); - } - - private static void generateGTPPTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Rainforest Oak - new ItemStack(BOP_Block_Registrator.sapling_Rainforest, 1, 0), - new ItemStack(BOP_Block_Registrator.log_Rainforest, 3, 0), - new ItemStack(BOP_Block_Registrator.leaves_Rainforest, 1, 0), - new ItemStack(Items.apple, 1, 0)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Pine - new ItemStack(BOP_Block_Registrator.sapling_Pine, 1, 0), - new ItemStack(BOP_Block_Registrator.log_Pine, 1, 0), - new ItemStack(BOP_Block_Registrator.leaves_Pine, 1, 0), - new ItemStack(AgriculturalChem.mAgrichemItem1, 1, 24)); - } - - private static void generateTwilightForestTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Sickly Twilight Oak - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 0), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 1, 0), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves", 1, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Canopy Tree - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 1), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 1, 1), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves", 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Twilight Mangrove - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 2), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 1, 2), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves", 1, 2), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Darkwood - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 3), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 1, 3), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.DarkLeaves", 1, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Robust Twilight Oak - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 4), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 4, 0), - // Does not drop more robust saplings normally: - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 0), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves", 1, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Tree of Time - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 5), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLog", 1, 0), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLeaves", 1, 0), - // No I am not making this drop clocks. - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Tree of Transformation - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 6), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLog", 1, 1), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLeaves", 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Sorting Tree - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 8), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLog", 1, 3), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFMagicLeaves", 1, 3), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Rainbow Oak - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFSapling", 1, 9), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLog", 1, 0), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves", 1, 3), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Thorns - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFThorns", 1, 0), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFThorns", 1, 0), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFThorns", 1, 1), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves3", 1, 0), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFThornRose", 1, 0)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Magic Beans - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "item.magicBeans", 1, 0), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.HugeStalk", 5, 0), - GT_ModHandler.getModItem(Mods.TwilightForest.ID, "tile.TFLeaves3", 1, 1), - null); - } - - private static void generateGalaxySpaceTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Barnarda C - GT_ModHandler.getModItem(Mods.GalaxySpace.ID, "barnardaCsapling", 1, 1), - GT_ModHandler.getModItem(Mods.GalaxySpace.ID, "barnardaClog", 1, 0), - GT_ModHandler.getModItem(Mods.GalaxySpace.ID, "barnardaCleaves", 1, 0), - null); - } - - private static void generateAmunRaTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Virilig - GT_ModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.saplings", 1, 0), - GT_ModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.log1", 1, 0), - GT_ModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.null", 1, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Lumipod - GT_ModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.saplings", 1, 1), - GT_ModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.wood1", 1, 0), - null, - GT_ModHandler.getModItem(Mods.GalacticraftAmunRa.ID, "tile.wood1", 1, 1)); - } - - private static void generateNaturaTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Redwood - GT_ModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 0), - GT_ModHandler.getModItem(Mods.Natura.ID, "redwood", 5, 1), - GT_ModHandler.getModItem(Mods.Natura.ID, "florasapling", 2, 0), - GT_ModHandler.getModItem(Mods.Natura.ID, "floraleaves", 2, 0), - GT_ModHandler.getModItem(Mods.Natura.ID, "redwood", 2, 0)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Eucalyptus - GT_ModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 1), - GT_ModHandler.getModItem(Mods.Natura.ID, "tree", 1, 0), - GT_ModHandler.getModItem(Mods.Natura.ID, "floraleaves", 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Hopseed - GT_ModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 2), - GT_ModHandler.getModItem(Mods.Natura.ID, "tree", 1, 3), - GT_ModHandler.getModItem(Mods.Natura.ID, "floraleaves", 1, 2), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Sakura - GT_ModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 3), - GT_ModHandler.getModItem(Mods.Natura.ID, "tree", 1, 1), - GT_ModHandler.getModItem(Mods.Natura.ID, "floraleavesnocolor", 1, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Ghostwood - GT_ModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 4), - GT_ModHandler.getModItem(Mods.Natura.ID, "tree", 1, 2), - GT_ModHandler.getModItem(Mods.Natura.ID, "floraleavesnocolor", 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Blood - GT_ModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 5), - GT_ModHandler.getModItem(Mods.Natura.ID, "bloodwood", 1, 0), - GT_ModHandler.getModItem(Mods.Natura.ID, "floraleavesnocolor", 1, 2), - new ItemStack(Items.redstone, 1, 0)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Darkwood - GT_ModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 6), - GT_ModHandler.getModItem(Mods.Natura.ID, "Dark Tree", 1, 0), - GT_ModHandler.getModItem(Mods.Natura.ID, "Dark Leaves", 1, 0), - GT_ModHandler.getModItem(Mods.Natura.ID, "Natura.netherfood", 1, 0)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Fusewood - GT_ModHandler.getModItem(Mods.Natura.ID, "florasapling", 1, 7), - GT_ModHandler.getModItem(Mods.Natura.ID, "Dark Tree", 1, 1), - GT_ModHandler.getModItem(Mods.Natura.ID, "Dark Leaves", 1, 3), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Maple - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Sapling", 1, 0), - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Tree", 1, 0), - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Leaves", 1, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Silverbell - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Sapling", 1, 1), - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Tree", 1, 1), - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Leaves", 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Amaranth - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Sapling", 1, 2), - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Tree", 1, 2), - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Leaves", 1, 2), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Tigerwood - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Sapling", 1, 3), - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Tree", 1, 3), - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Leaves", 1, 3), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Willow - GT_ModHandler.getModItem(Mods.Natura.ID, "Rare Sapling", 1, 4), - GT_ModHandler.getModItem(Mods.Natura.ID, "willow", 1, 0), - GT_ModHandler.getModItem(Mods.Natura.ID, "floraleavesnocolor", 1, 3), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Green Glowshroom - GT_ModHandler.getModItem(Mods.Natura.ID, "Glowshroom", 1, 0), - GT_ModHandler.getModItem(Mods.Natura.ID, "greenGlowshroom", 1, 0), - null, - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Purple Glowshroom - GT_ModHandler.getModItem(Mods.Natura.ID, "Glowshroom", 1, 1), - GT_ModHandler.getModItem(Mods.Natura.ID, "purpleGlowshroom", 1, 0), - null, - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Blue Glowshroom - GT_ModHandler.getModItem(Mods.Natura.ID, "Glowshroom", 1, 2), - GT_ModHandler.getModItem(Mods.Natura.ID, "blueGlowshroom", 1, 0), - null, - null); - } - - private static void generateBOPTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Apple - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 0), - new ItemStack(Blocks.log, 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "appleLeaves", 1, 0), - new ItemStack(Items.apple, 2, 0)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Yellow Autumn - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 1), - new ItemStack(Blocks.log, 1, 2), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves1", 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "food", 1, 8)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Bamboo - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 2), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "bamboo", 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves1", 1, 9), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Magic - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 3), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs2", 1, 1), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves1", 1, 2), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Dark - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 4), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs1", 1, 2), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves1", 1, 3), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Dying - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 5), - new ItemStack(Blocks.log, 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves2", 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "food", 1, 8)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Fir - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 6), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs1", 1, 3), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves2", 1, 1), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "misc", 1, 13)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Ethereal - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 7), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs2", 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves2", 1, 2), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Orange Autumn - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 8), - new ItemStack(Blocks.log2, 1, 1), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves2", 1, 3), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Origin - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 9), - new ItemStack(Blocks.log, 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves3", 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "food", 1, 8)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Pink Cherry - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 10), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs1", 1, 1), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves3", 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Maple - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 11), - new ItemStack(Blocks.log, 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves3", 1, 2), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // White Cherry - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 12), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs1", 1, 1), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves3", 1, 3), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Hellbark - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 13), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs4", 1, 1), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves4", 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "food", 1, 8)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Jacaranda - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 14), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs4", 1, 2), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "leaves4", 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Persimmon - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "saplings", 1, 15), - new ItemStack(Blocks.log, 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "persimmonLeaves", 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "food", 2, 8)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Sacred Oak - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs1", 4, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 2, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves1", 2, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Mangrove - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 1), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs2", 1, 2), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves1", 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Palm - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 2), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs2", 1, 3), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves1", 1, 2), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Redwood - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 3), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs3", 2, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves1", 1, 3), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Willow - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 4), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs3", 1, 1), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves2", 1, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Pine - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 5), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs4", 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves2", 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Mahogany - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 6), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs4", 1, 3), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves2", 1, 2), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Flowering Oak - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedSaplings", 1, 7), - new ItemStack(Blocks.log, 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "colorizedLeaves2", 1, 3), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Red Flower Stem - new ItemStack(Blocks.red_flower, 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs3", 1, 3), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "petals", 1, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Yellow Flower Stem - new ItemStack(Blocks.yellow_flower, 1, 0), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "logs3", 1, 3), - GT_ModHandler.getModItem(Mods.BiomesOPlenty.ID, "petals", 1, 1), - null); - } - - private static void addPamTree(String name, int meta) { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( - GT_ModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pam" + name + "Sapling", 1, 0), - new ItemStack(Blocks.log, 1, meta), - new ItemStack(Blocks.leaves, 1, meta), - GT_ModHandler.getModItem(Mods.PamsHarvestCraft.ID, name + "Item", 2, 0)); - } - - private static void generatePamsTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Cinnamon - GT_ModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pamappleSapling", 1, 0), - new ItemStack(Blocks.log, 1, 0), - new ItemStack(Blocks.leaves, 1, 0), - new ItemStack(Items.apple, 2, 0)); - - addPamTree("almond", 3); - addPamTree("apricot", 3); - addPamTree("avocado", 0); - addPamTree("banana", 3); - addPamTree("cashew", 3); - addPamTree("cherry", 0); - addPamTree("chestnut", 0); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Cinnamon - GT_ModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pamcinnamonSapling", 1, 0), - GT_ModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pamCinnamon", 1, 0), - new ItemStack(Blocks.leaves, 1, 3), - GT_ModHandler.getModItem(Mods.PamsHarvestCraft.ID, "cinnamonItem", 2, 0)); - - addPamTree("coconut", 3); - addPamTree("date", 3); - addPamTree("dragonfruit", 3); - addPamTree("durian", 3); - addPamTree("fig", 3); - addPamTree("grapefruit", 3); - addPamTree("lemon", 3); - addPamTree("lime", 3); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Maple - GT_ModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pammapleSapling", 1, 0), - GT_ModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pamMaple", 1, 0), - new ItemStack(Blocks.leaves, 1, 1), - GT_ModHandler.getModItem(Mods.PamsHarvestCraft.ID, "maplesyrupItem", 2, 0)); - - addPamTree("mango", 3); - addPamTree("nutmeg", 0); - addPamTree("olive", 0); - addPamTree("orange", 3); - addPamTree("papaya", 3); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Paperbark - GT_ModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pampaperbarkSapling", 1, 0), - GT_ModHandler.getModItem(Mods.PamsHarvestCraft.ID, "pamPaperbark", 1, 0), - new ItemStack(Blocks.leaves, 1, 3), - new ItemStack(Items.paper, 1, 0)); - - addPamTree("peach", 3); - addPamTree("pear", 0); - addPamTree("pecan", 3); - addPamTree("peppercorn", 3); - addPamTree("persimmon", 3); - addPamTree("pistachio", 3); - addPamTree("plum", 0); - addPamTree("pomegranate", 3); - addPamTree("starfruit", 3); - addPamTree("vanillabean", 3); - addPamTree("walnut", 0); - addPamTree("gooseberry", 0); - } - - private static void generatePamsNetherTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Ignis Fruit - GT_ModHandler.getModItem(Mods.PamsHarvestTheNether.ID, "netherSapling", 1, 0), - GT_ModHandler.getModItem(Mods.PamsHarvestTheNether.ID, "netherLog", 1, 0), - GT_ModHandler.getModItem(Mods.PamsHarvestTheNether.ID, "netherLeaves", 1, 0), - GT_ModHandler.getModItem(Mods.PamsHarvestTheNether.ID, "ignisfruitItem", 2, 0)); - } - - private static void generateThaumcraftTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Greatwood - GT_ModHandler.getModItem(Mods.Thaumcraft.ID, "blockCustomPlant", 1, 0), - GT_ModHandler.getModItem(Mods.Thaumcraft.ID, "blockMagicalLog", 2, 0), - GT_ModHandler.getModItem(Mods.Thaumcraft.ID, "blockMagicalLeaves", 1, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Silverwood - GT_ModHandler.getModItem(Mods.Thaumcraft.ID, "blockCustomPlant", 1, 1), - GT_ModHandler.getModItem(Mods.Thaumcraft.ID, "blockMagicalLog", 1, 1), - GT_ModHandler.getModItem(Mods.Thaumcraft.ID, "blockMagicalLeaves", 1, 1), - null); - } - - private static void generateThaumicBasesTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Golden Oak - GT_ModHandler.getModItem(Mods.ThaumicBases.ID, "goldenOakSapling", 1, 0), - new ItemStack(Blocks.log, 1, 0), - GT_ModHandler.getModItem(Mods.ThaumicBases.ID, "genLeaves", 1, 0), - GT_ModHandler.getModItem(Mods.Thaumcraft.ID, "blockMagicalLeaves", 1, 0), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Peaceful - GT_ModHandler.getModItem(Mods.ThaumicBases.ID, "goldenOakSapling", 1, 1), - GT_ModHandler.getModItem(Mods.ThaumicBases.ID, "genLogs", 1, 0), - GT_ModHandler.getModItem(Mods.ThaumicBases.ID, "genLeaves", 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Nether - GT_ModHandler.getModItem(Mods.ThaumicBases.ID, "goldenOakSapling", 1, 2), - GT_ModHandler.getModItem(Mods.ThaumicBases.ID, "genLogs", 1, 1), - GT_ModHandler.getModItem(Mods.ThaumicBases.ID, "genLeaves", 1, 2), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Ender - GT_ModHandler.getModItem(Mods.ThaumicBases.ID, "goldenOakSapling", 1, 3), - GT_ModHandler.getModItem(Mods.ThaumicBases.ID, "genLogs", 1, 2), - GT_ModHandler.getModItem(Mods.ThaumicBases.ID, "genLeaves", 1, 3), - null); - } - - private static void generateTaintedMagicTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Warpwood - GT_ModHandler.getModItem(Mods.TaintedMagic.ID, "BlockWarpwoodSapling", 1, 0), - GT_ModHandler.getModItem(Mods.TaintedMagic.ID, "BlockWarpwoodLog", 1, 0), - GT_ModHandler.getModItem(Mods.TaintedMagic.ID, "BlockWarpwoodLeaves", 1, 0), - null); - } - - private static void generateForbiddenMagicTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Warpwood - GT_ModHandler.getModItem(Mods.ForbiddenMagic.ID, "TaintSapling", 1, 0), - GT_ModHandler.getModItem(Mods.ForbiddenMagic.ID, "TaintLog", 1, 0), - GT_ModHandler.getModItem(Mods.ForbiddenMagic.ID, "TaintLeaves", 1, 0), - GT_ModHandler.getModItem(Mods.ForbiddenMagic.ID, "TaintFruit", 1, 0)); - } - - private static void generateWitcheryTrees() { - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Rowan - GT_ModHandler.getModItem(Mods.Witchery.ID, "witchsapling", 1, 0), - GT_ModHandler.getModItem(Mods.Witchery.ID, "witchlog", 1, 0), - GT_ModHandler.getModItem(Mods.Witchery.ID, "witchleaves", 1, 0), - GT_ModHandler.getModItem(Mods.Witchery.ID, "ingredient", 1, 63)); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Alder - GT_ModHandler.getModItem(Mods.Witchery.ID, "witchsapling", 1, 1), - GT_ModHandler.getModItem(Mods.Witchery.ID, "witchlog", 1, 1), - GT_ModHandler.getModItem(Mods.Witchery.ID, "witchleaves", 1, 1), - null); - - GregtechMetaTileEntityTreeFarm.registerTreeProducts( // Hawthorn - GT_ModHandler.getModItem(Mods.Witchery.ID, "witchsapling", 1, 2), - GT_ModHandler.getModItem(Mods.Witchery.ID, "witchlog", 1, 2), - GT_ModHandler.getModItem(Mods.Witchery.ID, "witchleaves", 1, 2), - null); - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/Gregtech4Content.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/Gregtech4Content.java index fe61fd608d..02141388bb 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/Gregtech4Content.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/Gregtech4Content.java @@ -21,23 +21,23 @@ import static gregtech.api.enums.MetaTileEntityIDs.GT4_Tesseract_Generator; import static gregtech.api.enums.MetaTileEntityIDs.GT4_Tesseract_Terminal; import static gregtech.api.enums.MetaTileEntityIDs.GT4_Thermal_Boiler; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.automation.GT_MetaTileEntity_ElectricAutoWorkbench; -import gtPlusPlus.xmod.gregtech.common.tileentities.automation.GT_MetaTileEntity_TesseractGenerator; -import gtPlusPlus.xmod.gregtech.common.tileentities.automation.GT_MetaTileEntity_TesseractTerminal; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GT_MetaTileEntity_CropHarvestor; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GT4Entity_AutoCrafter; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GT4Entity_ThermalBoiler; +import gtPlusPlus.xmod.gregtech.common.tileentities.automation.MTEElectricAutoWorkbench; +import gtPlusPlus.xmod.gregtech.common.tileentities.automation.MTETesseractGenerator; +import gtPlusPlus.xmod.gregtech.common.tileentities.automation.MTETesseractTerminal; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.MTECropHarvestor; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTEAutoCrafter; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTEThermalBoiler; public class Gregtech4Content { // ID Range 828, 829, 833 - 850 public static void run() { - Logger.INFO("Max MTE: " + GregTech_API.METATILEENTITIES.length + " | " + GregTech_API.MAXIMUM_METATILE_IDS); + Logger.INFO("Max MTE: " + GregTechAPI.METATILEENTITIES.length + " | " + GregTechAPI.MAXIMUM_METATILE_IDS); thermalBoiler(); multiCrafter(); tesseracts(); @@ -48,73 +48,57 @@ public class Gregtech4Content { private static void automation() { Logger.INFO("Gregtech 4 Content | Registering Auto Workbenches."); GregtechItemList.GT4_Electric_Auto_Workbench_LV.set( - new GT_MetaTileEntity_ElectricAutoWorkbench( - GT4_Electric_Auto_Workbench_LV.ID, - 1, - "Automatic crafting machine").getStackForm(1L)); + new MTEElectricAutoWorkbench(GT4_Electric_Auto_Workbench_LV.ID, 1, "Automatic crafting machine") + .getStackForm(1L)); GregtechItemList.GT4_Electric_Auto_Workbench_MV.set( - new GT_MetaTileEntity_ElectricAutoWorkbench( - GT4_Electric_Auto_Workbench_MV.ID, - 2, - "Automatic crafting machine").getStackForm(1L)); + new MTEElectricAutoWorkbench(GT4_Electric_Auto_Workbench_MV.ID, 2, "Automatic crafting machine") + .getStackForm(1L)); GregtechItemList.GT4_Electric_Auto_Workbench_HV.set( - new GT_MetaTileEntity_ElectricAutoWorkbench( - GT4_Electric_Auto_Workbench_HV.ID, - 3, - "Automatic crafting machine").getStackForm(1L)); + new MTEElectricAutoWorkbench(GT4_Electric_Auto_Workbench_HV.ID, 3, "Automatic crafting machine") + .getStackForm(1L)); GregtechItemList.GT4_Electric_Auto_Workbench_EV.set( - new GT_MetaTileEntity_ElectricAutoWorkbench( - GT4_Electric_Auto_Workbench_EV.ID, - 4, - "Automatic crafting machine").getStackForm(1L)); + new MTEElectricAutoWorkbench(GT4_Electric_Auto_Workbench_EV.ID, 4, "Automatic crafting machine") + .getStackForm(1L)); GregtechItemList.GT4_Electric_Auto_Workbench_IV.set( - new GT_MetaTileEntity_ElectricAutoWorkbench( - GT4_Electric_Auto_Workbench_IV.ID, - 5, - "Automatic crafting machine").getStackForm(1L)); + new MTEElectricAutoWorkbench(GT4_Electric_Auto_Workbench_IV.ID, 5, "Automatic crafting machine") + .getStackForm(1L)); GregtechItemList.GT4_Electric_Auto_Workbench_LuV.set( - new GT_MetaTileEntity_ElectricAutoWorkbench( - GT4_Electric_Auto_Workbench_LuV.ID, - 6, - "Automatic crafting machine").getStackForm(1L)); + new MTEElectricAutoWorkbench(GT4_Electric_Auto_Workbench_LuV.ID, 6, "Automatic crafting machine") + .getStackForm(1L)); GregtechItemList.GT4_Electric_Auto_Workbench_ZPM.set( - new GT_MetaTileEntity_ElectricAutoWorkbench( - GT4_Electric_Auto_Workbench_ZPM.ID, - 7, - "Automatic crafting machine").getStackForm(1L)); + new MTEElectricAutoWorkbench(GT4_Electric_Auto_Workbench_ZPM.ID, 7, "Automatic crafting machine") + .getStackForm(1L)); GregtechItemList.GT4_Electric_Auto_Workbench_UV.set( - new GT_MetaTileEntity_ElectricAutoWorkbench( - GT4_Electric_Auto_Workbench_UV.ID, - 8, - "Automatic crafting machine").getStackForm(1L)); + new MTEElectricAutoWorkbench(GT4_Electric_Auto_Workbench_UV.ID, 8, "Automatic crafting machine") + .getStackForm(1L)); } private static void basic() { Logger.INFO("Gregtech 4 Content | Registering Crop Managers."); GregtechItemList.GT4_Crop_Harvester_LV.set( - new GT_MetaTileEntity_CropHarvestor(GT4_Crop_Harvester_LV.ID, 1, "Harvests the Cropsticks in front of it") + new MTECropHarvestor(GT4_Crop_Harvester_LV.ID, 1, "Harvests the Cropsticks in front of it") .getStackForm(1L)); GregtechItemList.GT4_Crop_Harvester_MV.set( - new GT_MetaTileEntity_CropHarvestor(GT4_Crop_Harvester_MV.ID, 2, "Harvests the Cropsticks in front of it") + new MTECropHarvestor(GT4_Crop_Harvester_MV.ID, 2, "Harvests the Cropsticks in front of it") .getStackForm(1L)); GregtechItemList.GT4_Crop_Harvester_HV.set( - new GT_MetaTileEntity_CropHarvestor(GT4_Crop_Harvester_HV.ID, 3, "Harvests the Cropsticks in front of it") + new MTECropHarvestor(GT4_Crop_Harvester_HV.ID, 3, "Harvests the Cropsticks in front of it") .getStackForm(1L)); GregtechItemList.GT4_Crop_Harvester_EV.set( - new GT_MetaTileEntity_CropHarvestor(GT4_Crop_Harvester_EV.ID, 4, "Harvests the Cropsticks in front of it") + new MTECropHarvestor(GT4_Crop_Harvester_EV.ID, 4, "Harvests the Cropsticks in front of it") .getStackForm(1L)); GregtechItemList.GT4_Crop_Harvester_IV.set( - new GT_MetaTileEntity_CropHarvestor(GT4_Crop_Harvester_IV.ID, 5, "Harvests the Cropsticks in front of it") + new MTECropHarvestor(GT4_Crop_Harvester_IV.ID, 5, "Harvests the Cropsticks in front of it") .getStackForm(1L)); GregtechItemList.GT4_Crop_Harvester_LuV.set( - new GT_MetaTileEntity_CropHarvestor(GT4_Crop_Harvester_LuV.ID, 6, "Harvests the Cropsticks in front of it") + new MTECropHarvestor(GT4_Crop_Harvester_LuV.ID, 6, "Harvests the Cropsticks in front of it") .getStackForm(1L)); GregtechItemList.GT4_Crop_Harvester_ZPM.set( - new GT_MetaTileEntity_CropHarvestor(GT4_Crop_Harvester_ZPM.ID, 7, "Harvests the Cropsticks in front of it") + new MTECropHarvestor(GT4_Crop_Harvester_ZPM.ID, 7, "Harvests the Cropsticks in front of it") .getStackForm(1L)); GregtechItemList.GT4_Crop_Harvester_UV.set( - new GT_MetaTileEntity_CropHarvestor(GT4_Crop_Harvester_UV.ID, 8, "Harvests the Cropsticks in front of it") + new MTECropHarvestor(GT4_Crop_Harvester_UV.ID, 8, "Harvests the Cropsticks in front of it") .getStackForm(1L)); } @@ -122,25 +106,19 @@ public class Gregtech4Content { // Gregtech 4 Tesseracts Logger.INFO("Gregtech 4 Content | Registering Tesseracts."); GregtechItemList.GT4_Tesseract_Generator.set( - new GT_MetaTileEntity_TesseractGenerator( - GT4_Tesseract_Generator.ID, - "tesseract.generator", - "Tesseract Generator", - 4).getStackForm(1L)); + new MTETesseractGenerator(GT4_Tesseract_Generator.ID, "tesseract.generator", "Tesseract Generator", 4) + .getStackForm(1L)); GregtechItemList.GT4_Tesseract_Terminal.set( - new GT_MetaTileEntity_TesseractTerminal( - GT4_Tesseract_Terminal.ID, - "tesseract.terminal", - "Tesseract Terminal", - 4).getStackForm(1L)); + new MTETesseractTerminal(GT4_Tesseract_Terminal.ID, "tesseract.terminal", "Tesseract Terminal", 4) + .getStackForm(1L)); } private static void thermalBoiler() { // Gregtech 4 Thermal Boiler - if (CORE.ConfigSwitches.enableMultiblock_ThermalBoiler) { + if (GTPPCore.ConfigSwitches.enableMultiblock_ThermalBoiler) { Logger.INFO("Gregtech 4 Content | Registering Thermal Boiler."); GregtechItemList.GT4_Thermal_Boiler.set( - new GT4Entity_ThermalBoiler(GT4_Thermal_Boiler.ID, "gtplusplus.thermal.boiler", "Thermal Boiler") + new MTEThermalBoiler(GT4_Thermal_Boiler.ID, "gtplusplus.thermal.boiler", "Thermal Boiler") .getStackForm(1L)); } } @@ -149,9 +127,7 @@ public class Gregtech4Content { // Gregtech 4 Multiblock Auto-Crafter Logger.INFO("Gregtech 4 Content | Registering Multiblock Crafter."); GregtechItemList.GT4_Multi_Crafter.set( - new GT4Entity_AutoCrafter( - GT4_Multi_Crafter.ID, - "gtplusplus.autocrafter.multi", - "Large Scale Auto-Assembler v1.01").getStackForm(1L)); + new MTEAutoCrafter(GT4_Multi_Crafter.ID, "gtplusplus.autocrafter.multi", "Large Scale Auto-Assembler v1.01") + .getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAdvancedBoilers.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAdvancedBoilers.java index 7d031dfeff..2e076e7fbe 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAdvancedBoilers.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAdvancedBoilers.java @@ -9,15 +9,15 @@ import net.minecraft.item.ItemStack; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GTModHandler; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.recipe.RECIPES_MachineComponents; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.recipe.RecipesMachineComponents; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.generators.GT_MetaTileEntity_Boiler_HV; -import gtPlusPlus.xmod.gregtech.common.tileentities.generators.GT_MetaTileEntity_Boiler_LV; -import gtPlusPlus.xmod.gregtech.common.tileentities.generators.GT_MetaTileEntity_Boiler_MV; +import gtPlusPlus.xmod.gregtech.common.tileentities.generators.MTEBoilerHV; +import gtPlusPlus.xmod.gregtech.common.tileentities.generators.MTEBoilerLV; +import gtPlusPlus.xmod.gregtech.common.tileentities.generators.MTEBoilerMV; public class GregtechAdvancedBoilers { @@ -29,11 +29,11 @@ public class GregtechAdvancedBoilers { private static void run1() { // Boilers GregtechItemList.Boiler_Advanced_LV - .set(new GT_MetaTileEntity_Boiler_LV(Boiler_Advanced_LV.ID, "Advanced Boiler [LV]", 1).getStackForm(1L)); + .set(new MTEBoilerLV(Boiler_Advanced_LV.ID, "Advanced Boiler [LV]", 1).getStackForm(1L)); GregtechItemList.Boiler_Advanced_MV - .set(new GT_MetaTileEntity_Boiler_MV(Boiler_Advanced_MV.ID, "Advanced Boiler [MV]", 2).getStackForm(1L)); + .set(new MTEBoilerMV(Boiler_Advanced_MV.ID, "Advanced Boiler [MV]", 2).getStackForm(1L)); GregtechItemList.Boiler_Advanced_HV - .set(new GT_MetaTileEntity_Boiler_HV(Boiler_Advanced_HV.ID, "Advanced Boiler [HV]", 3).getStackForm(1L)); + .set(new MTEBoilerHV(Boiler_Advanced_HV.ID, "Advanced Boiler [HV]", 3).getStackForm(1L)); ItemStack chassisT1 = ItemUtils .getItemStackWithMeta(true, "miscutils:itemBoilerChassis", "Boiler_Chassis_T1", 0, 1); @@ -45,60 +45,62 @@ public class GregtechAdvancedBoilers { // Make the Coil in each following recipe a hammer and a Screwdriver. // Chassis Recipes - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( chassisT1, - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WCW", "GMG", "WPW", 'M', ItemList.Hull_ULV, 'P', OrePrefixes.pipeLarge.get(Materials.Bronze), 'C', OrePrefixes.circuit.get(Materials.ULV), 'W', OrePrefixes.plate.get(Materials.Lead), 'G', OrePrefixes.pipeSmall.get(Materials.Copper) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( chassisT2, - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WCW", "GMG", "WPW", 'M', ItemList.Hull_LV, 'P', OrePrefixes.pipeLarge.get(Materials.Steel), 'C', OrePrefixes.circuit.get(Materials.LV), 'W', OrePrefixes.plate.get(Materials.Steel), 'G', OrePrefixes.pipeSmall.get(Materials.Bronze) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( chassisT3, - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WCW", "GMG", "WPW", 'M', ItemList.Hull_MV, 'P', OrePrefixes.pipeLarge.get(Materials.StainlessSteel), 'C', OrePrefixes.circuit.get(Materials.MV), 'W', OrePrefixes.plate.get(Materials.Aluminium), 'G', OrePrefixes.pipeSmall.get(Materials.Steel) }); - ItemStack pipeTier1 = ItemUtils.getItemStackOfAmountFromOreDict(RECIPES_MachineComponents.pipeTier7, 1); - ItemStack pipeTier2 = ItemUtils.getItemStackOfAmountFromOreDict(RECIPES_MachineComponents.pipeTier8, 1); - ItemStack pipeTier3 = ItemUtils.getItemStackOfAmountFromOreDict(RECIPES_MachineComponents.pipeTier9, 1); + ItemStack pipeTier1 = ItemUtils.getItemStackOfAmountFromOreDict(RecipesMachineComponents.pipeTier7, 1); + ItemStack pipeTier2 = ItemUtils.getItemStackOfAmountFromOreDict(RecipesMachineComponents.pipeTier8, 1); + ItemStack pipeTier3 = ItemUtils.getItemStackOfAmountFromOreDict(RecipesMachineComponents.pipeTier9, 1); // Boiler Recipes - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Boiler_Advanced_LV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "dCw", "WMW", "GPG", 'M', ItemList.Hull_LV, 'P', pipeTier1, 'C', OrePrefixes.circuit.get(Materials.LV), 'W', chassisT1, 'G', OrePrefixes.gear.get(Materials.Steel) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Boiler_Advanced_MV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "dCw", "WMW", "GPG", 'M', ItemList.Hull_MV, 'P', pipeTier2, 'C', - OrePrefixes.circuit.get(Materials.MV), 'W', chassisT2, 'G', ALLOY.SILICON_CARBIDE.getGear(1) }); + OrePrefixes.circuit.get(Materials.MV), 'W', chassisT2, 'G', + MaterialsAlloy.SILICON_CARBIDE.getGear(1) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Boiler_Advanced_HV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "dCw", "WMW", "GPG", 'M', ItemList.Hull_HV, 'P', pipeTier3, 'C', - OrePrefixes.circuit.get(Materials.HV), 'W', chassisT3, 'G', ALLOY.SILICON_CARBIDE.getGear(1) }); + OrePrefixes.circuit.get(Materials.HV), 'W', chassisT3, 'G', + MaterialsAlloy.SILICON_CARBIDE.getGear(1) }); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAlgaeContent.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAlgaeContent.java index 4666357f4c..f543286fbe 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAlgaeContent.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAlgaeContent.java @@ -4,13 +4,13 @@ import static gregtech.api.enums.MetaTileEntityIDs.AlgaeFarm_Controller; import static gregtech.api.enums.MetaTileEntityIDs.Bus_Catalysts; import static gregtech.api.enums.MetaTileEntityIDs.ChemicalPlant_Controller; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.block.ModBlocks; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.GT_MetaTileEntity_Hatch_Catalysts; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.algae.GregtechMTE_AlgaePondBase; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.chemplant.GregtechMTE_ChemicalPlant; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.MTEHatchCatalysts; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.algae.MTEAlgaePondBase; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.chemplant.MTEChemicalPlant; public class GregtechAlgaeContent { @@ -23,35 +23,34 @@ public class GregtechAlgaeContent { // Algae Pond GregtechItemList.AlgaeFarm_Controller.set( - new GregtechMTE_AlgaePondBase(AlgaeFarm_Controller.ID, "algaefarm.controller.tier.single", "Algae Farm") + new MTEAlgaePondBase(AlgaeFarm_Controller.ID, "algaefarm.controller.tier.single", "Algae Farm") .getStackForm(1L)); // Chemical Plant GregtechItemList.ChemicalPlant_Controller.set( - new GregtechMTE_ChemicalPlant( + new MTEChemicalPlant( ChemicalPlant_Controller.ID, "chemicalplant.controller.tier.single", "ExxonMobil Chemical Plant").getStackForm(1L)); - GregtechItemList.Bus_Catalysts.set( - (new GT_MetaTileEntity_Hatch_Catalysts(Bus_Catalysts.ID, "hatch.catalysts", "Catalyst Housing")) - .getStackForm(1L)); + GregtechItemList.Bus_Catalysts + .set((new MTEHatchCatalysts(Bus_Catalysts.ID, "hatch.catalysts", "Catalyst Housing")).getStackForm(1L)); // Bronze - GregtechMTE_ChemicalPlant.registerMachineCasingForTier(0, ModBlocks.blockCustomMachineCasings, 0, 10); + MTEChemicalPlant.registerMachineCasingForTier(0, ModBlocks.blockCustomMachineCasings, 0, 10); // Steel - GregtechMTE_ChemicalPlant.registerMachineCasingForTier(1, GregTech_API.sBlockCasings2, 0, 16); + MTEChemicalPlant.registerMachineCasingForTier(1, GregTechAPI.sBlockCasings2, 0, 16); // Aluminium - GregtechMTE_ChemicalPlant.registerMachineCasingForTier(2, ModBlocks.blockCustomMachineCasings, 1, 17); + MTEChemicalPlant.registerMachineCasingForTier(2, ModBlocks.blockCustomMachineCasings, 1, 17); // Stainless - GregtechMTE_ChemicalPlant.registerMachineCasingForTier(3, GregTech_API.sBlockCasings4, 1, 49); + MTEChemicalPlant.registerMachineCasingForTier(3, GregTechAPI.sBlockCasings4, 1, 49); // Titanium - GregtechMTE_ChemicalPlant.registerMachineCasingForTier(4, GregTech_API.sBlockCasings4, 2, 50); + MTEChemicalPlant.registerMachineCasingForTier(4, GregTechAPI.sBlockCasings4, 2, 50); // Tungsten - GregtechMTE_ChemicalPlant.registerMachineCasingForTier(5, GregTech_API.sBlockCasings4, 0, 48); + MTEChemicalPlant.registerMachineCasingForTier(5, GregTechAPI.sBlockCasings4, 0, 48); // Laurenium - GregtechMTE_ChemicalPlant.registerMachineCasingForTier(6, ModBlocks.blockCustomMachineCasings, 2, 84); + MTEChemicalPlant.registerMachineCasingForTier(6, ModBlocks.blockCustomMachineCasings, 2, 84); // Botmium - GregtechMTE_ChemicalPlant.registerMachineCasingForTier(7, ModBlocks.blockCustomMachineCasings, 3, 11); + MTEChemicalPlant.registerMachineCasingForTier(7, ModBlocks.blockCustomMachineCasings, 3, 11); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAmazonWarehouse.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAmazonWarehouse.java index 1800ee9440..f3201d9973 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAmazonWarehouse.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechAmazonWarehouse.java @@ -4,7 +4,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.Amazon_Warehouse_Controller; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.misc.GMTE_AmazonPackager; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.misc.MTEAmazonPackager; public class GregtechAmazonWarehouse { @@ -16,7 +16,7 @@ public class GregtechAmazonWarehouse { private static void run1() { // Amazon packager multiblock GregtechItemList.Amazon_Warehouse_Controller.set( - new GMTE_AmazonPackager( + new MTEAmazonPackager( Amazon_Warehouse_Controller.ID, "amazonprime.controller.tier.single", "Amazon Warehousing Depot.").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechBufferDynamos.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechBufferDynamos.java index 7ec4897482..9e2e29a7fc 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechBufferDynamos.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechBufferDynamos.java @@ -15,10 +15,10 @@ import static gtPlusPlus.core.recipe.common.CI.bitsd; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GTModHandler; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_DynamoBuffer; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchDynamoBuffer; public class GregtechBufferDynamos { @@ -28,111 +28,111 @@ public class GregtechBufferDynamos { private static void run2() { GregtechItemList.Hatch_Buffer_Dynamo_ULV.set( - new GT_MetaTileEntity_Hatch_DynamoBuffer( + new MTEHatchDynamoBuffer( Hatch_Buffer_Dynamo_ULV.ID, "hatch.dynamo.buffer.tier.00", "ULV Dynamo Hatch [Buffered]", 0).getStackForm(1L)); GregtechItemList.Hatch_Buffer_Dynamo_LV.set( - new GT_MetaTileEntity_Hatch_DynamoBuffer( + new MTEHatchDynamoBuffer( Hatch_Buffer_Dynamo_LV.ID, "hatch.dynamo.buffer.tier.01", "LV Dynamo Hatch [Buffered]", 1).getStackForm(1L)); GregtechItemList.Hatch_Buffer_Dynamo_MV.set( - new GT_MetaTileEntity_Hatch_DynamoBuffer( + new MTEHatchDynamoBuffer( Hatch_Buffer_Dynamo_MV.ID, "hatch.dynamo.buffer.tier.02", "MV Dynamo Hatch [Buffered]", 2).getStackForm(1L)); GregtechItemList.Hatch_Buffer_Dynamo_HV.set( - new GT_MetaTileEntity_Hatch_DynamoBuffer( + new MTEHatchDynamoBuffer( Hatch_Buffer_Dynamo_HV.ID, "hatch.dynamo.buffer.tier.03", "HV Dynamo Hatch [Buffered]", 3).getStackForm(1L)); GregtechItemList.Hatch_Buffer_Dynamo_EV.set( - new GT_MetaTileEntity_Hatch_DynamoBuffer( + new MTEHatchDynamoBuffer( Hatch_Buffer_Dynamo_EV.ID, "hatch.dynamo.buffer.tier.04", "EV Dynamo Hatch [Buffered]", 4).getStackForm(1L)); GregtechItemList.Hatch_Buffer_Dynamo_IV.set( - new GT_MetaTileEntity_Hatch_DynamoBuffer( + new MTEHatchDynamoBuffer( Hatch_Buffer_Dynamo_IV.ID, "hatch.dynamo.buffer.tier.05", "IV Dynamo Hatch [Buffered]", 5).getStackForm(1L)); GregtechItemList.Hatch_Buffer_Dynamo_LuV.set( - new GT_MetaTileEntity_Hatch_DynamoBuffer( + new MTEHatchDynamoBuffer( Hatch_Buffer_Dynamo_LuV.ID, "hatch.dynamo.buffer.tier.06", "LuV Dynamo Hatch [Buffered]", 6).getStackForm(1L)); GregtechItemList.Hatch_Buffer_Dynamo_ZPM.set( - new GT_MetaTileEntity_Hatch_DynamoBuffer( + new MTEHatchDynamoBuffer( Hatch_Buffer_Dynamo_ZPM.ID, "hatch.dynamo.buffer.tier.07", "ZPM Dynamo Hatch [Buffered]", 7).getStackForm(1L)); GregtechItemList.Hatch_Buffer_Dynamo_UV.set( - new GT_MetaTileEntity_Hatch_DynamoBuffer( + new MTEHatchDynamoBuffer( Hatch_Buffer_Dynamo_UV.ID, "hatch.dynamo.buffer.tier.08", "UV Dynamo Hatch [Buffered]", 8).getStackForm(1L)); GregtechItemList.Hatch_Buffer_Dynamo_MAX.set( - new GT_MetaTileEntity_Hatch_DynamoBuffer( + new MTEHatchDynamoBuffer( Hatch_Buffer_Dynamo_MAX.ID, "hatch.dynamo.buffer.tier.09", "UHV Dynamo Hatch [Buffered]", 9).getStackForm(1L)); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Buffer_Dynamo_ULV.get(1L), bitsd, new Object[] { "TMC", 'M', ItemList.Hatch_Dynamo_ULV, 'T', CI.getTieredCircuit(0), 'C', OrePrefixes.cableGt04.get((Object) Materials.Lead) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Buffer_Dynamo_LV.get(1L), bitsd, new Object[] { "TMC", 'M', ItemList.Hatch_Dynamo_LV, 'T', CI.getTieredCircuit(1), 'C', OrePrefixes.cableGt04.get((Object) Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Buffer_Dynamo_MV.get(1L), bitsd, new Object[] { "TMC", 'M', ItemList.Hatch_Dynamo_MV, 'T', CI.getTieredCircuit(2), 'C', OrePrefixes.cableGt04.get((Object) Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Buffer_Dynamo_HV.get(1L), bitsd, new Object[] { "TMC", 'M', ItemList.Hatch_Dynamo_HV, 'T', CI.getTieredCircuit(3), 'C', OrePrefixes.cableGt04.get((Object) Materials.Gold) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Buffer_Dynamo_EV.get(1L), bitsd, new Object[] { "TMC", 'M', ItemList.Hatch_Dynamo_EV, 'T', CI.getTieredCircuit(4), 'C', OrePrefixes.cableGt04.get((Object) Materials.Aluminium) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Buffer_Dynamo_IV.get(1L), bitsd, new Object[] { "TMC", 'M', ItemList.Hatch_Dynamo_IV, 'T', CI.getTieredCircuit(5), 'C', OrePrefixes.cableGt04.get((Object) Materials.Tungsten) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Buffer_Dynamo_LuV.get(1L), bitsd, new Object[] { "TMC", 'M', ItemList.Hatch_Dynamo_LuV, 'T', CI.getTieredCircuit(6), 'C', OrePrefixes.cableGt04.get((Object) Materials.VanadiumGallium) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Buffer_Dynamo_ZPM.get(1L), bitsd, new Object[] { "TMC", 'M', ItemList.Hatch_Dynamo_ZPM, 'T', CI.getTieredCircuit(7), 'C', OrePrefixes.cableGt04.get((Object) Materials.Naquadah) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Buffer_Dynamo_UV.get(1L), bitsd, new Object[] { "TMC", 'M', ItemList.Hatch_Dynamo_UV, 'T', CI.getTieredCircuit(8), 'C', OrePrefixes.wireGt12.get((Object) Materials.NaquadahAlloy) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Buffer_Dynamo_MAX.get(1L), bitsd, new Object[] { "TMC", 'M', ItemList.Hatch_Dynamo_UHV, 'T', CI.getTieredCircuit(9), 'C', diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java index 9b12d4ca11..f08457f807 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechConduits.java @@ -6,8 +6,8 @@ import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; import static gregtech.api.recipe.RecipeMaps.extruderRecipes; import static gregtech.api.recipe.RecipeMaps.unpackagerRecipes; import static gregtech.api.recipe.RecipeMaps.wiremillRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; @@ -16,18 +16,18 @@ import java.util.ArrayList; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.metatileentity.implementations.MTEFluid; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.ELEMENT; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.core.util.Utils; import gtPlusPlus.core.util.minecraft.FluidUtils; @@ -35,8 +35,8 @@ import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.core.util.minecraft.MaterialUtils; import gtPlusPlus.core.util.minecraft.RecipeUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechOrePrefixes.GT_Materials; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GregtechMetaPipeEntityFluid; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GregtechMetaPipeEntity_Cable; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GTPPMTECable; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GTPPMTEFluid; public class GregtechConduits { @@ -48,10 +48,10 @@ public class GregtechConduits { public static void run() { Logger.INFO("Gregtech5u Content | Registering Custom Cables/Wires/Pipes."); - if (CORE.ConfigSwitches.enableCustom_Cables) { + if (GTPPCore.ConfigSwitches.enableCustom_Cables) { run1(); } - if (CORE.ConfigSwitches.enableCustom_Pipes) { + if (GTPPCore.ConfigSwitches.enableCustom_Pipes) { run2(); run3(); } @@ -60,8 +60,8 @@ public class GregtechConduits { private static void run3() { try { - Class aPipeEntity = GT_MetaPipeEntity_Fluid.class; - Constructor constructor = aPipeEntity.getConstructor( + Class aPipeEntity = MTEFluid.class; + Constructor constructor = aPipeEntity.getConstructor( int.class, String.class, String.class, @@ -159,9 +159,9 @@ public class GregtechConduits { } } - private static void generateFluidMultiPipes(Constructor aClazz, Materials aMaterial, - String name, String displayName, int startID, int transferRatePerSec, int heatCapacity, boolean gasProof) { - GT_MetaPipeEntity_Fluid aPipe; + private static void generateFluidMultiPipes(Constructor aClazz, Materials aMaterial, String name, + String displayName, int startID, int transferRatePerSec, int heatCapacity, boolean gasProof) { + MTEFluid aPipe; final int transferRatePerTick = transferRatePerSec / 20; try { aPipe = aClazz.newInstance( @@ -178,7 +178,7 @@ public class GregtechConduits { Logger.INFO("Failed to Generate " + aMaterial + " Hexadecuple pipes."); } else { Logger.INFO("Generated " + aMaterial + " Hexadecuple pipes."); - GT_OreDictUnificator.registerOre("pipeHexadecuple" + aMaterial, aPipe.getStackForm(1L)); + GTOreDictUnificator.registerOre("pipeHexadecuple" + aMaterial, aPipe.getStackForm(1L)); } } catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { @@ -192,24 +192,66 @@ public class GregtechConduits { wireFactory("RedstoneAlloy", 32, BaseWireID + 45, 0, 2, 1, new short[] { 178, 34, 34, 0 }); // need to go back id because fluid pipes already occupy - makeCustomWires(ELEMENT.STANDALONE.HYPOGEN, BaseWireID - 15, 0, 0, 8, GT_Values.V[11], false, true); + makeCustomWires(MaterialsElements.STANDALONE.HYPOGEN, BaseWireID - 15, 0, 0, 8, GTValues.V[11], false, true); } private static void run2() { - generateNonGTFluidPipes(GT_Materials.Staballoy, ALLOY.STABALLOY, BasePipeID, 12500, 7500, true); - generateNonGTFluidPipes(GT_Materials.Tantalloy60, ALLOY.TANTALLOY_60, BasePipeID + 5, 10000, 4250, true); - generateNonGTFluidPipes(GT_Materials.Tantalloy61, ALLOY.TANTALLOY_61, BasePipeID + 10, 12000, 5800, true); + generateNonGTFluidPipes(GT_Materials.Staballoy, MaterialsAlloy.STABALLOY, BasePipeID, 12500, 7500, true); + generateNonGTFluidPipes( + GT_Materials.Tantalloy60, + MaterialsAlloy.TANTALLOY_60, + BasePipeID + 5, + 10000, + 4250, + true); + generateNonGTFluidPipes( + GT_Materials.Tantalloy61, + MaterialsAlloy.TANTALLOY_61, + BasePipeID + 10, + 12000, + 5800, + true); if (Thaumcraft.isModLoaded()) { generateNonGTFluidPipes(GT_Materials.Void, null, BasePipeID + 15, 1600, 25000, true); } generateGTFluidPipes(Materials.Europium, BasePipeID + 20, 12000, 7500, true); - generateNonGTFluidPipes(GT_Materials.Potin, ALLOY.POTIN, BasePipeID + 25, 500, 2000, true); - generateNonGTFluidPipes(GT_Materials.MaragingSteel300, ALLOY.MARAGING300, BasePipeID + 30, 14000, 2500, true); - generateNonGTFluidPipes(GT_Materials.MaragingSteel350, ALLOY.MARAGING350, BasePipeID + 35, 16000, 2500, true); - generateNonGTFluidPipes(GT_Materials.Inconel690, ALLOY.INCONEL_690, BasePipeID + 40, 15000, 4800, true); - generateNonGTFluidPipes(GT_Materials.Inconel792, ALLOY.INCONEL_792, BasePipeID + 45, 16000, 5500, true); - generateNonGTFluidPipes(GT_Materials.HastelloyX, ALLOY.HASTELLOY_X, BasePipeID + 50, 20000, 4200, true); + generateNonGTFluidPipes(GT_Materials.Potin, MaterialsAlloy.POTIN, BasePipeID + 25, 500, 2000, true); + generateNonGTFluidPipes( + GT_Materials.MaragingSteel300, + MaterialsAlloy.MARAGING300, + BasePipeID + 30, + 14000, + 2500, + true); + generateNonGTFluidPipes( + GT_Materials.MaragingSteel350, + MaterialsAlloy.MARAGING350, + BasePipeID + 35, + 16000, + 2500, + true); + generateNonGTFluidPipes( + GT_Materials.Inconel690, + MaterialsAlloy.INCONEL_690, + BasePipeID + 40, + 15000, + 4800, + true); + generateNonGTFluidPipes( + GT_Materials.Inconel792, + MaterialsAlloy.INCONEL_792, + BasePipeID + 45, + 16000, + 5500, + true); + generateNonGTFluidPipes( + GT_Materials.HastelloyX, + MaterialsAlloy.HASTELLOY_X, + BasePipeID + 50, + 20000, + 4200, + true); generateGTFluidPipes(Materials.Tungsten, BasePipeID + 55, 4320, 7200, true); if (EnderIO.isModLoaded()) { @@ -220,7 +262,7 @@ public class GregtechConduits { generateNonGTFluidPipes( GT_Materials.TriniumNaquadahCarbonite, - ALLOY.TRINIUM_NAQUADAH_CARBON, + MaterialsAlloy.TRINIUM_NAQUADAH_CARBON, 30500, 20, 250000, @@ -230,23 +272,23 @@ public class GregtechConduits { private static void wireFactory(final String Material, final int Voltage, final int ID, final long insulatedLoss, final long uninsulatedLoss, final long Amps, final short[] rgb) { final Materials T = Materials.get(Material); - int V = GT_Utility.getTier(Voltage); + int V = GTUtility.getTier(Voltage); if (V == -1) { Logger.ERROR("Failed to set voltage on " + Material + ". Invalid voltage of " + Voltage + "V set."); Logger.ERROR(Material + " has defaulted to 8v."); V = 0; } - makeWires(T, ID, insulatedLoss, uninsulatedLoss, Amps, GT_Values.V[V], true, false, rgb); + makeWires(T, ID, insulatedLoss, uninsulatedLoss, Amps, GTValues.V[V], true, false, rgb); } private static void makeWires(final Materials aMaterial, final int aStartID, final long aLossInsulated, final long aLoss, final long aAmperage, final long aVoltage, final boolean aInsulatable, final boolean aAutoInsulated, final short[] aRGB) { Logger.WARNING("Gregtech5u Content | Registered " + aMaterial.mName + " as a new material for Wire & Cable."); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt01, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 0, "wire." + aMaterial.mName.toLowerCase() + ".01", "1x " + aMaterial.mDefaultLocalName + " Wire", @@ -258,10 +300,10 @@ public class GregtechConduits { false, !aAutoInsulated, aRGB).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt02, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 1, "wire." + aMaterial.mName.toLowerCase() + ".02", "2x " + aMaterial.mDefaultLocalName + " Wire", @@ -273,10 +315,10 @@ public class GregtechConduits { false, !aAutoInsulated, aRGB).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt04, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 2, "wire." + aMaterial.mName.toLowerCase() + ".04", "4x " + aMaterial.mDefaultLocalName + " Wire", @@ -288,10 +330,10 @@ public class GregtechConduits { false, !aAutoInsulated, aRGB).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt08, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 3, "wire." + aMaterial.mName.toLowerCase() + ".08", "8x " + aMaterial.mDefaultLocalName + " Wire", @@ -303,10 +345,10 @@ public class GregtechConduits { false, !aAutoInsulated, aRGB).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt12, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 4, "wire." + aMaterial.mName.toLowerCase() + ".12", "12x " + aMaterial.mDefaultLocalName + " Wire", @@ -318,10 +360,10 @@ public class GregtechConduits { false, !aAutoInsulated, aRGB).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.wireGt16, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 5, "wire." + aMaterial.mName.toLowerCase() + ".16", "16x " + aMaterial.mDefaultLocalName + " Wire", @@ -334,10 +376,10 @@ public class GregtechConduits { !aAutoInsulated, aRGB).getStackForm(1L)); if (aInsulatable) { - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt01, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 6, "cable." + aMaterial.mName.toLowerCase() + ".01", "1x " + aMaterial.mDefaultLocalName + " Cable", @@ -349,10 +391,10 @@ public class GregtechConduits { true, false, aRGB).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt02, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 7, "cable." + aMaterial.mName.toLowerCase() + ".02", "2x " + aMaterial.mDefaultLocalName + " Cable", @@ -364,10 +406,10 @@ public class GregtechConduits { true, false, aRGB).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt04, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 8, "cable." + aMaterial.mName.toLowerCase() + ".04", "4x " + aMaterial.mDefaultLocalName + " Cable", @@ -379,10 +421,10 @@ public class GregtechConduits { true, false, aRGB).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt08, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 9, "cable." + aMaterial.mName.toLowerCase() + ".08", "8x " + aMaterial.mDefaultLocalName + " Cable", @@ -394,10 +436,10 @@ public class GregtechConduits { true, false, aRGB).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt12, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 10, "cable." + aMaterial.mName.toLowerCase() + ".12", "12x " + aMaterial.mDefaultLocalName + " Cable", @@ -409,10 +451,10 @@ public class GregtechConduits { true, false, aRGB).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.cableGt16, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 11, "cable." + aMaterial.mName.toLowerCase() + ".16", "16x " + aMaterial.mDefaultLocalName + " Cable", @@ -429,13 +471,13 @@ public class GregtechConduits { private static void customWireFactory(final Material Material, final int Voltage, final int ID, final long insulatedLoss, final long uninsulatedLoss, final long Amps) { - int V = GT_Utility.getTier(Voltage); + int V = GTUtility.getTier(Voltage); if (V == -1) { Logger.ERROR("Failed to set voltage on " + Material + ". Invalid voltage of " + Voltage + "V set."); Logger.ERROR(Material + " has defaulted to 8v."); V = 0; } - makeCustomWires(Material, ID, insulatedLoss, uninsulatedLoss, Amps, GT_Values.V[V], true, false); + makeCustomWires(Material, ID, insulatedLoss, uninsulatedLoss, Amps, GTValues.V[V], true, false); } private static void makeCustomWires(final Material aMaterial, final int aStartID, final long aLossInsulated, @@ -446,7 +488,7 @@ public class GregtechConduits { registerOre( OrePrefixes.wireGt01, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 0, "wire." + aMaterial.getLocalizedName() .toLowerCase() + ".01", @@ -461,7 +503,7 @@ public class GregtechConduits { registerOre( OrePrefixes.wireGt02, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 1, "wire." + aMaterial.getLocalizedName() .toLowerCase() + ".02", @@ -476,7 +518,7 @@ public class GregtechConduits { registerOre( OrePrefixes.wireGt04, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 2, "wire." + aMaterial.getLocalizedName() .toLowerCase() + ".04", @@ -491,7 +533,7 @@ public class GregtechConduits { registerOre( OrePrefixes.wireGt08, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 3, "wire." + aMaterial.getLocalizedName() .toLowerCase() + ".08", @@ -506,7 +548,7 @@ public class GregtechConduits { registerOre( OrePrefixes.wireGt12, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 4, "wire." + aMaterial.getLocalizedName() .toLowerCase() + ".12", @@ -521,7 +563,7 @@ public class GregtechConduits { registerOre( OrePrefixes.wireGt16, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 5, "wire." + aMaterial.getLocalizedName() .toLowerCase() + ".16", @@ -537,7 +579,7 @@ public class GregtechConduits { registerOre( OrePrefixes.cableGt01, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 6, "cable." + aMaterial.getLocalizedName() .toLowerCase() + ".01", @@ -552,7 +594,7 @@ public class GregtechConduits { registerOre( OrePrefixes.cableGt02, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 7, "cable." + aMaterial.getLocalizedName() .toLowerCase() + ".02", @@ -567,7 +609,7 @@ public class GregtechConduits { registerOre( OrePrefixes.cableGt04, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 8, "cable." + aMaterial.getLocalizedName() .toLowerCase() + ".04", @@ -582,7 +624,7 @@ public class GregtechConduits { registerOre( OrePrefixes.cableGt08, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 9, "cable." + aMaterial.getLocalizedName() .toLowerCase() + ".08", @@ -597,7 +639,7 @@ public class GregtechConduits { registerOre( OrePrefixes.cableGt12, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 10, "cable." + aMaterial.getLocalizedName() .toLowerCase() + ".12", @@ -612,7 +654,7 @@ public class GregtechConduits { registerOre( OrePrefixes.cableGt16, aMaterial, - new GregtechMetaPipeEntity_Cable( + new GTPPMTECable( aStartID + 11, "cable." + aMaterial.getLocalizedName() .toLowerCase() + ".16", @@ -632,9 +674,9 @@ public class GregtechConduits { final int transferRatePerTick = transferRatePerSec / 20; final long mass = material.getMass(); final long voltage = material.mMeltingPoint >= 2800 ? 64 : 16; - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeTiny.get(material), - new GT_MetaPipeEntity_Fluid( + new MTEFluid( startID, "GT_Pipe_" + material.mDefaultLocalName + "_Tiny", "Tiny " + material.mDefaultLocalName + " Fluid Pipe", @@ -643,9 +685,9 @@ public class GregtechConduits { transferRatePerTick * 2, heatResistance, isGasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeSmall.get(material), - new GT_MetaPipeEntity_Fluid( + new MTEFluid( startID + 1, "GT_Pipe_" + material.mDefaultLocalName + "_Small", "Small " + material.mDefaultLocalName + " Fluid Pipe", @@ -654,9 +696,9 @@ public class GregtechConduits { transferRatePerTick * 4, heatResistance, isGasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeMedium.get(material), - new GT_MetaPipeEntity_Fluid( + new MTEFluid( startID + 2, "GT_Pipe_" + material.mDefaultLocalName + "", "" + material.mDefaultLocalName + " Fluid Pipe", @@ -665,9 +707,9 @@ public class GregtechConduits { transferRatePerTick * 12, heatResistance, isGasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeLarge.get(material), - new GT_MetaPipeEntity_Fluid( + new MTEFluid( startID + 3, "GT_Pipe_" + material.mDefaultLocalName + "_Large", "Large " + material.mDefaultLocalName + " Fluid Pipe", @@ -676,9 +718,9 @@ public class GregtechConduits { transferRatePerTick * 24, heatResistance, isGasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeHuge.get(material), - new GT_MetaPipeEntity_Fluid( + new MTEFluid( startID + 4, "GT_Pipe_" + material.mDefaultLocalName + "_Huge", "Huge " + material.mDefaultLocalName + " Fluid Pipe", @@ -689,13 +731,13 @@ public class GregtechConduits { isGasProof).getStackForm(1L)); } - private static void generateNonGTFluidPipes(final GT_Materials material, final Material myMaterial, + private static void generateNonGTFluidPipes(final GT_Materials material, final Material GGMaterial, final int startID, final int transferRatePerSec, final int heatResistance, final boolean isGasProof) { final int transferRatePerTick = transferRatePerSec / 20; - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeTiny.get(material), - new GregtechMetaPipeEntityFluid( + new GTPPMTEFluid( startID, "GT_Pipe_" + material.mDefaultLocalName + "_Tiny", "Tiny " + material.mDefaultLocalName + " Fluid Pipe", @@ -704,9 +746,9 @@ public class GregtechConduits { transferRatePerTick * 2, heatResistance, isGasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeSmall.get(material), - new GregtechMetaPipeEntityFluid( + new GTPPMTEFluid( startID + 1, "GT_Pipe_" + material.mDefaultLocalName + "_Small", "Small " + material.mDefaultLocalName + " Fluid Pipe", @@ -715,9 +757,9 @@ public class GregtechConduits { transferRatePerTick * 4, heatResistance, isGasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeMedium.get(material), - new GregtechMetaPipeEntityFluid( + new GTPPMTEFluid( startID + 2, "GT_Pipe_" + material.mDefaultLocalName + "", "" + material.mDefaultLocalName + " Fluid Pipe", @@ -726,9 +768,9 @@ public class GregtechConduits { transferRatePerTick * 12, heatResistance, isGasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeLarge.get(material), - new GregtechMetaPipeEntityFluid( + new GTPPMTEFluid( startID + 3, "GT_Pipe_" + material.mDefaultLocalName + "_Large", "Large " + material.mDefaultLocalName + " Fluid Pipe", @@ -737,9 +779,9 @@ public class GregtechConduits { transferRatePerTick * 24, heatResistance, isGasProof).getStackForm(1L)); - GT_OreDictUnificator.registerOre( + GTOreDictUnificator.registerOre( OrePrefixes.pipeHuge.get(material), - new GregtechMetaPipeEntityFluid( + new GTPPMTEFluid( startID + 4, "GT_Pipe_" + material.mDefaultLocalName + "_Huge", "Huge " + material.mDefaultLocalName + " Fluid Pipe", @@ -836,7 +878,7 @@ public class GregtechConduits { if (pipeIngot != null && ItemUtils.checkForInvalidItems(pipeIngot)) { // 1 Clay Plate = 1 Clay Dust = 2 Clay Ball int inputMultiplier = materialName.equals("Clay") ? 2 : 1; - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(pipeIngot, 1 * inputMultiplier), ItemList.Shape_Extruder_Pipe_Tiny.get(0)) @@ -844,7 +886,7 @@ public class GregtechConduits { .duration(5 * TICKS) .eut(eut) .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(pipeIngot, 1 * inputMultiplier), ItemList.Shape_Extruder_Pipe_Small.get(0)) @@ -852,7 +894,7 @@ public class GregtechConduits { .duration(10 * TICKS) .eut(eut) .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(pipeIngot, 3 * inputMultiplier), ItemList.Shape_Extruder_Pipe_Medium.get(0)) @@ -860,7 +902,7 @@ public class GregtechConduits { .duration(20 * TICKS) .eut(eut) .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(pipeIngot, 6 * inputMultiplier), ItemList.Shape_Extruder_Pipe_Large.get(0)) @@ -868,7 +910,7 @@ public class GregtechConduits { .duration(2 * SECONDS) .eut(eut) .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( ItemUtils.getSimpleStack(pipeIngot, 12 * inputMultiplier), ItemList.Shape_Extruder_Pipe_Huge.get(0)) @@ -911,13 +953,13 @@ public class GregtechConduits { } public static boolean registerOre(Object aName, ItemStack aStack) { - if ((aName == null) || (GT_Utility.isStackInvalid(aStack))) return false; + if ((aName == null) || (GTUtility.isStackInvalid(aStack))) return false; String tName = aName.toString(); - if (GT_Utility.isStringInvalid(tName)) return false; - ArrayList tList = GT_OreDictUnificator.getOres(tName); + if (GTUtility.isStringInvalid(tName)) return false; + ArrayList tList = GTOreDictUnificator.getOres(tName); for (ItemStack itemStack : tList) - if (GT_Utility.areStacksEqual((ItemStack) itemStack, aStack, true)) return false; - OreDictionary.registerOre(tName, GT_Utility.copyAmount(1L, new Object[] { aStack })); + if (GTUtility.areStacksEqual((ItemStack) itemStack, aStack, true)) return false; + OreDictionary.registerOre(tName, GTUtility.copyAmount(1L, new Object[] { aStack })); return true; } @@ -949,38 +991,38 @@ public class GregtechConduits { // Wire mill if (ItemUtils .checkForInvalidItems(new ItemStack[] { aIngot, aWire01, aWire02, aWire04, aWire08, aWire12, aWire16 })) { - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getIngot(1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getIngot(1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(aMaterial.getWire01(2)) .duration(5 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getIngot(1), GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getIngot(1), GTUtility.getIntegratedCircuit(2)) .itemOutputs(aMaterial.getWire02(1)) .duration(7 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getIngot(2), GT_Utility.getIntegratedCircuit(4)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getIngot(2), GTUtility.getIntegratedCircuit(4)) .itemOutputs(aMaterial.getWire04(1)) .duration(10 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getIngot(4), GT_Utility.getIntegratedCircuit(8)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getIngot(4), GTUtility.getIntegratedCircuit(8)) .itemOutputs(aMaterial.getWire08(1)) .duration(12 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getIngot(6), GT_Utility.getIntegratedCircuit(12)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getIngot(6), GTUtility.getIntegratedCircuit(12)) .itemOutputs(aMaterial.getWire12(1)) .duration(15 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getIngot(8), GT_Utility.getIntegratedCircuit(16)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getIngot(8), GTUtility.getIntegratedCircuit(16)) .itemOutputs(aMaterial.getWire16(1)) .duration(17 * SECONDS + 10 * TICKS) .eut(4) @@ -990,38 +1032,38 @@ public class GregtechConduits { if (ItemUtils .checkForInvalidItems(new ItemStack[] { aRod, aWire01, aWire02, aWire04, aWire08, aWire12, aWire16 })) { - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getRod(1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getRod(1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(aMaterial.getWire01(1)) .duration(2 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getRod(2), GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getRod(2), GTUtility.getIntegratedCircuit(2)) .itemOutputs(aMaterial.getWire02(1)) .duration(5 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getRod(4), GT_Utility.getIntegratedCircuit(4)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getRod(4), GTUtility.getIntegratedCircuit(4)) .itemOutputs(aMaterial.getWire04(1)) .duration(7 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getRod(8), GT_Utility.getIntegratedCircuit(8)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getRod(8), GTUtility.getIntegratedCircuit(8)) .itemOutputs(aMaterial.getWire08(1)) .duration(10 * SECONDS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getRod(12), GT_Utility.getIntegratedCircuit(12)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getRod(12), GTUtility.getIntegratedCircuit(12)) .itemOutputs(aMaterial.getWire12(1)) .duration(12 * SECONDS + 10 * TICKS) .eut(4) .addTo(wiremillRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getRod(16), GT_Utility.getIntegratedCircuit(16)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getRod(16), GTUtility.getIntegratedCircuit(16)) .itemOutputs(aMaterial.getWire16(1)) .duration(15 * SECONDS) .eut(4) @@ -1030,8 +1072,8 @@ public class GregtechConduits { } if (ItemUtils.checkForInvalidItems(new ItemStack[] { aIngot, aFineWire })) { - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getIngot(1), GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getIngot(1), GTUtility.getIntegratedCircuit(3)) .itemOutputs(aMaterial.getFineWire(8)) .duration(5 * SECONDS) .eut(4) @@ -1040,8 +1082,8 @@ public class GregtechConduits { } if (ItemUtils.checkForInvalidItems(new ItemStack[] { aRod, aFineWire })) { - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getRod(1), GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getRod(1), GTUtility.getIntegratedCircuit(3)) .itemOutputs(aMaterial.getFineWire(4)) .duration(2 * SECONDS + 10 * TICKS) .eut(4) @@ -1050,8 +1092,8 @@ public class GregtechConduits { } if (ItemUtils.checkForInvalidItems(new ItemStack[] { aWire01, aFineWire })) { - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getWire01(1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getWire01(1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(aMaterial.getFineWire(4)) .duration(10 * SECONDS) .eut(8) @@ -1061,7 +1103,7 @@ public class GregtechConduits { // Extruder if (ItemUtils.checkForInvalidItems(new ItemStack[] { aIngot, aWire01 })) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(aIngot, ItemList.Shape_Extruder_Wire.get(0)) .itemOutputs(aMaterial.getWire01(2)) .duration(9 * SECONDS + 16 * TICKS) @@ -1070,7 +1112,7 @@ public class GregtechConduits { } if (ItemUtils.checkForInvalidItems(new ItemStack[] { aCable01, aWire01 })) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(aCable01) .itemOutputs(aWire01) .duration(5 * SECONDS) @@ -1149,8 +1191,8 @@ public class GregtechConduits { // Wire to Cable // 1x if (ItemUtils.checkForInvalidItems(new ItemStack[] { aWire01, aCable01 })) { - GT_Values.RA.stdBuilder() - .itemInputs(aWire01, GT_Utility.getIntegratedCircuit(24)) + GTValues.RA.stdBuilder() + .itemInputs(aWire01, GTUtility.getIntegratedCircuit(24)) .itemOutputs(aCable01) .fluidInputs(FluidUtils.getFluidStack("molten.rubber", 144)) .duration(5 * SECONDS) @@ -1161,8 +1203,8 @@ public class GregtechConduits { // 2x if (ItemUtils.checkForInvalidItems(new ItemStack[] { aWire02, aCable02 })) { - GT_Values.RA.stdBuilder() - .itemInputs(aWire02, GT_Utility.getIntegratedCircuit(24)) + GTValues.RA.stdBuilder() + .itemInputs(aWire02, GTUtility.getIntegratedCircuit(24)) .itemOutputs(aCable02) .fluidInputs(FluidUtils.getFluidStack("molten.rubber", 144)) .duration(5 * SECONDS) @@ -1173,8 +1215,8 @@ public class GregtechConduits { // 4x if (ItemUtils.checkForInvalidItems(new ItemStack[] { aWire04, aCable04 })) { - GT_Values.RA.stdBuilder() - .itemInputs(aWire04, GT_Utility.getIntegratedCircuit(24)) + GTValues.RA.stdBuilder() + .itemInputs(aWire04, GTUtility.getIntegratedCircuit(24)) .itemOutputs(aCable04) .fluidInputs(FluidUtils.getFluidStack("molten.rubber", 288)) .duration(5 * SECONDS) @@ -1185,8 +1227,8 @@ public class GregtechConduits { // 8x if (ItemUtils.checkForInvalidItems(new ItemStack[] { aWire08, aCable08 })) { - GT_Values.RA.stdBuilder() - .itemInputs(aWire08, GT_Utility.getIntegratedCircuit(24)) + GTValues.RA.stdBuilder() + .itemInputs(aWire08, GTUtility.getIntegratedCircuit(24)) .itemOutputs(aCable08) .fluidInputs(FluidUtils.getFluidStack("molten.rubber", 432)) .duration(5 * SECONDS) @@ -1197,8 +1239,8 @@ public class GregtechConduits { // 12x if (ItemUtils.checkForInvalidItems(new ItemStack[] { aWire12, aCable12 })) { - GT_Values.RA.stdBuilder() - .itemInputs(aWire12, GT_Utility.getIntegratedCircuit(24)) + GTValues.RA.stdBuilder() + .itemInputs(aWire12, GTUtility.getIntegratedCircuit(24)) .itemOutputs(aCable12) .fluidInputs(FluidUtils.getFluidStack("molten.rubber", 576)) .duration(5 * SECONDS) @@ -1209,8 +1251,8 @@ public class GregtechConduits { // 16x if (ItemUtils.checkForInvalidItems(new ItemStack[] { aWire16, aCable16 })) { - GT_Values.RA.stdBuilder() - .itemInputs(aWire16, GT_Utility.getIntegratedCircuit(24)) + GTValues.RA.stdBuilder() + .itemInputs(aWire16, GTUtility.getIntegratedCircuit(24)) .itemOutputs(aCable16) .fluidInputs(FluidUtils.getFluidStack("molten.rubber", 720)) .duration(5 * SECONDS) @@ -1221,32 +1263,32 @@ public class GregtechConduits { // Assemble small wires into bigger wires if (ItemUtils.checkForInvalidItems(new ItemStack[] { aWire01, aWire02 })) { - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getWire01(2), GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getWire01(2), GTUtility.getIntegratedCircuit(2)) .itemOutputs(aWire02) .duration(5 * SECONDS) .eut(8) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getWire01(4), GT_Utility.getIntegratedCircuit(4)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getWire01(4), GTUtility.getIntegratedCircuit(4)) .itemOutputs(aWire04) .duration(5 * SECONDS) .eut(8) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getWire01(8), GT_Utility.getIntegratedCircuit(8)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getWire01(8), GTUtility.getIntegratedCircuit(8)) .itemOutputs(aWire08) .duration(5 * SECONDS) .eut(8) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getWire01(12), GT_Utility.getIntegratedCircuit(12)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getWire01(12), GTUtility.getIntegratedCircuit(12)) .itemOutputs(aWire12) .duration(5 * SECONDS) .eut(8) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(aMaterial.getWire01(16), GT_Utility.getIntegratedCircuit(16)) + GTValues.RA.stdBuilder() + .itemInputs(aMaterial.getWire01(16), GTUtility.getIntegratedCircuit(16)) .itemOutputs(aWire16) .duration(5 * SECONDS) .eut(8) diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java index 35b5c6719e..2781730229 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCustomHatches.java @@ -22,17 +22,17 @@ import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ChiselBus; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_AirIntake; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_AirIntake_Extreme; -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_Reservoir; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Solidifier; -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.base.GT_MetaTileEntity_Hatch_CustomFluidBase; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.METHatchAirIntake; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchAirIntakeExtreme; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchChiselBus; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchMufflerAdvanced; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchNaquadah; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchReservoir; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchSolidifier; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchSuperBusInput; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchTurbineProvider; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTESuperBusOutput; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTEHatchCustomFluidBase; public class GregtechCustomHatches { @@ -50,7 +50,7 @@ public class GregtechCustomHatches { private static void run1() { GregtechItemList.Hatch_Input_Cryotheum.set( - new GT_MetaTileEntity_Hatch_CustomFluidBase( + new MTEHatchCustomFluidBase( FluidUtils.getFluidStack("cryotheum", 1) .getFluid(), // Fluid to restrict hatch to 128000, // Capacity @@ -61,7 +61,7 @@ public class GregtechCustomHatches { ).getStackForm(1L)); GregtechItemList.Hatch_Input_Pyrotheum.set( - new GT_MetaTileEntity_Hatch_CustomFluidBase( + new MTEHatchCustomFluidBase( FluidUtils.getFluidStack("pyrotheum", 1) .getFluid(), // Fluid to restrict hatch to 128000, // Capacity @@ -72,14 +72,14 @@ public class GregtechCustomHatches { ).getStackForm(1L)); GregtechItemList.Hatch_Input_Naquadah.set( - new GT_MetaTileEntity_Hatch_Naquadah( + new MTEHatchNaquadah( Hatch_Input_Naquadah.ID, // ID "hatch.naquadah.input.tier.00", // unlocal name "Naquadah Reactor Input hatch" // Local name ).getStackForm(1L)); GregtechItemList.Hatch_Input_TurbineHousing.set( - new GT_MetaTileEntity_Hatch_TurbineProvider( + new MTEHatchTurbineProvider( Hatch_Input_TurbineHousing.ID, // ID "hatch.turbine.input.tier.00", // unlocal name "Turbine Housing", // Local name @@ -87,13 +87,10 @@ public class GregtechCustomHatches { // Multiblock Air Intake Hatch GregtechItemList.Hatch_Air_Intake.set( - new GT_MetaTileEntity_Hatch_AirIntake( - Hatch_Air_Intake.ID, - "hatch.air.intake.tier.00", - "Air Intake Hatch", - 5).getStackForm(1L)); + new METHatchAirIntake(Hatch_Air_Intake.ID, "hatch.air.intake.tier.00", "Air Intake Hatch", 5) + .getStackForm(1L)); GregtechItemList.Hatch_Air_Intake_Extreme.set( - new GT_MetaTileEntity_Hatch_AirIntake_Extreme( + new MTEHatchAirIntakeExtreme( Hatch_Air_Intake_Extreme.ID, "hatch.air.intake.tier.01", "Extreme Air Intake Hatch", @@ -101,15 +98,12 @@ public class GregtechCustomHatches { // Multiblock Reservoir Hatch GregtechItemList.Hatch_Reservoir.set( - new GT_MetaTileEntity_Hatch_Reservoir( - Hatch_Reservoir.ID, - "hatch.water.intake.tier.00", - "Reservoir Hatch", - 4).getStackForm(1L)); + new MTEHatchReservoir(Hatch_Reservoir.ID, "hatch.water.intake.tier.00", "Reservoir Hatch", 4) + .getStackForm(1L)); // Steam Hatch GregtechItemList.Hatch_Input_Steam.set( - new GT_MetaTileEntity_Hatch_CustomFluidBase( + new MTEHatchCustomFluidBase( FluidUtils.getSteam(1) .getFluid(), // Fluid to restrict hatch to 64000, // Capacity @@ -122,55 +116,52 @@ public class GregtechCustomHatches { private static void run2() { GregtechItemList.Hatch_Muffler_Adv_LV.set( - (new GT_MetaTileEntity_Hatch_Muffler_Adv( - 30001, - "hatch.muffler.adv.tier.01", - "Advanced Muffler Hatch (LV)", - 1)).getStackForm(1L)); + (new MTEHatchMufflerAdvanced(30001, "hatch.muffler.adv.tier.01", "Advanced Muffler Hatch (LV)", 1)) + .getStackForm(1L)); GregtechItemList.Hatch_Muffler_Adv_MV.set( - (new GT_MetaTileEntity_Hatch_Muffler_Adv( + (new MTEHatchMufflerAdvanced( Hatch_Muffler_Adv_MV.ID, "hatch.muffler.adv.tier.02", "Advanced Muffler Hatch (MV)", 2)).getStackForm(1L)); GregtechItemList.Hatch_Muffler_Adv_HV.set( - (new GT_MetaTileEntity_Hatch_Muffler_Adv( + (new MTEHatchMufflerAdvanced( Hatch_Muffler_Adv_HV.ID, "hatch.muffler.adv.tier.03", "Advanced Muffler Hatch (HV)", 3)).getStackForm(1L)); GregtechItemList.Hatch_Muffler_Adv_EV.set( - (new GT_MetaTileEntity_Hatch_Muffler_Adv( + (new MTEHatchMufflerAdvanced( Hatch_Muffler_Adv_EV.ID, "hatch.muffler.adv.tier.04", "Advanced Muffler Hatch (EV)", 4)).getStackForm(1L)); GregtechItemList.Hatch_Muffler_Adv_IV.set( - (new GT_MetaTileEntity_Hatch_Muffler_Adv( + (new MTEHatchMufflerAdvanced( Hatch_Muffler_Adv_IV.ID, "hatch.muffler.adv.tier.05", "Advanced Muffler Hatch (IV)", 5)).getStackForm(1L)); GregtechItemList.Hatch_Muffler_Adv_LuV.set( - (new GT_MetaTileEntity_Hatch_Muffler_Adv( + (new MTEHatchMufflerAdvanced( Hatch_Muffler_Adv_LuV.ID, "hatch.muffler.adv.tier.06", "Advanced Muffler Hatch (LuV)", 6)).getStackForm(1L)); GregtechItemList.Hatch_Muffler_Adv_ZPM.set( - (new GT_MetaTileEntity_Hatch_Muffler_Adv( + (new MTEHatchMufflerAdvanced( Hatch_Muffler_Adv_ZPM.ID, "hatch.muffler.adv.tier.07", "Advanced Muffler Hatch (ZPM)", 7)).getStackForm(1L)); GregtechItemList.Hatch_Muffler_Adv_UV.set( - (new GT_MetaTileEntity_Hatch_Muffler_Adv( + (new MTEHatchMufflerAdvanced( Hatch_Muffler_Adv_UV.ID, "hatch.muffler.adv.tier.08", "Advanced Muffler Hatch (UV)", 8)).getStackForm(1L)); GregtechItemList.Hatch_Muffler_Adv_MAX.set( - (new GT_MetaTileEntity_Hatch_Muffler_Adv( + (new MTEHatchMufflerAdvanced( Hatch_Muffler_Adv_MAX.ID, "hatch.muffler.adv.tier.09", "Advanced Muffler Hatch (UHV)", @@ -245,19 +236,16 @@ public class GregtechCustomHatches { .getStackForm(1L)); } - private static GT_MetaTileEntity_SuperBus_Input makeInputBus(int id, String unlocalizedName, String localizedName, - int tier) { - return new GT_MetaTileEntity_SuperBus_Input(id, unlocalizedName, localizedName, tier); + private static MTEHatchSuperBusInput makeInputBus(int id, String unlocalizedName, String localizedName, int tier) { + return new MTEHatchSuperBusInput(id, unlocalizedName, localizedName, tier); } - private static GT_MetaTileEntity_SuperBus_Output makeOutputBus(int id, String unlocalizedName, String localizedName, - int tier) { - return new GT_MetaTileEntity_SuperBus_Output(id, unlocalizedName, localizedName, tier); + private static MTESuperBusOutput makeOutputBus(int id, String unlocalizedName, String localizedName, int tier) { + return new MTESuperBusOutput(id, unlocalizedName, localizedName, tier); } - private static GT_MetaTileEntity_ChiselBus makeChiselBus(int id, String unlocalizedName, String localizedName, - int tier) { - return new GT_MetaTileEntity_ChiselBus(id, unlocalizedName, localizedName, tier); + private static MTEHatchChiselBus makeChiselBus(int id, String unlocalizedName, String localizedName, int tier) { + return new MTEHatchChiselBus(id, unlocalizedName, localizedName, tier); } private static void run4() { @@ -275,18 +263,14 @@ public class GregtechCustomHatches { private static void run6() { int aID = 31781; // 31781-31784 - GregtechItemList.GT_MetaTileEntity_Solidifier_I.set( - new GT_MetaTileEntity_Hatch_Solidifier(aID++, "hatch.solidifier.tier.05", "Solidifier Hatch I", 5) - .getStackForm(1L)); - GregtechItemList.GT_MetaTileEntity_Solidifier_II.set( - new GT_MetaTileEntity_Hatch_Solidifier(aID++, "hatch.solidifier.tier.06", "Solidifier Hatch II", 6) - .getStackForm(1L)); - GregtechItemList.GT_MetaTileEntity_Solidifier_III.set( - new GT_MetaTileEntity_Hatch_Solidifier(aID++, "hatch.solidifier.tier.07", "Solidifier Hatch III", 7) - .getStackForm(1L)); - GregtechItemList.GT_MetaTileEntity_Solidifier_IV.set( - new GT_MetaTileEntity_Hatch_Solidifier(aID, "hatch.solidifier.tier.08", "Solidifier Hatch IV", 8) - .getStackForm(1L)); + GregtechItemList.GT_MetaTileEntity_Solidifier_I + .set(new MTEHatchSolidifier(aID++, "hatch.solidifier.tier.05", "Solidifier Hatch I", 5).getStackForm(1L)); + GregtechItemList.GT_MetaTileEntity_Solidifier_II + .set(new MTEHatchSolidifier(aID++, "hatch.solidifier.tier.06", "Solidifier Hatch II", 6).getStackForm(1L)); + GregtechItemList.GT_MetaTileEntity_Solidifier_III + .set(new MTEHatchSolidifier(aID++, "hatch.solidifier.tier.07", "Solidifier Hatch III", 7).getStackForm(1L)); + GregtechItemList.GT_MetaTileEntity_Solidifier_IV + .set(new MTEHatchSolidifier(aID, "hatch.solidifier.tier.08", "Solidifier Hatch IV", 8).getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCyclotron.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCyclotron.java index 500bc1c57c..014257ff98 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCyclotron.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechCyclotron.java @@ -4,7 +4,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.COMET_Cyclotron; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_Cyclotron; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTECyclotron; public class GregtechCyclotron { @@ -15,10 +15,7 @@ public class GregtechCyclotron { private static void run1() { GregtechItemList.COMET_Cyclotron.set( - new GregtechMetaTileEntity_Cyclotron( - COMET_Cyclotron.ID, - "cyclotron.tier.single", - "COMET - Compact Cyclotron", - 6).getStackForm(1L)); + new MTECyclotron(COMET_Cyclotron.ID, "cyclotron.tier.single", "COMET - Compact Cyclotron", 6) + .getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechDehydrator.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechDehydrator.java index 94c669c4e9..85d87cb706 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechDehydrator.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechDehydrator.java @@ -7,35 +7,35 @@ import static gregtech.api.enums.MetaTileEntityIDs.GT_Dehydrator_IV; import static gregtech.api.enums.MetaTileEntityIDs.GT_Dehydrator_LuV; import static gregtech.api.enums.MetaTileEntityIDs.GT_Dehydrator_MV; import static gregtech.api.enums.MetaTileEntityIDs.GT_Dehydrator_ZPM; -import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT; -import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL; -import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe.X.ROBOT_ARM; +import static gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe.X.CIRCUIT; +import static gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe.X.HULL; +import static gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe.X.ROBOT_ARM; import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; import net.minecraft.item.ItemStack; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.SoundResource; import gregtech.api.enums.TierEU; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe; +import gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe.SpecialEffects; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.recipe.GTPPRecipeMaps; import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.ALLOY; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.material.MaterialsAlloy; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialDehydrator; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialDehydrator; public class GregtechDehydrator { public static void run() { Logger.INFO("Gregtech5u Content | Registering Chemical Dehydrators."); - if (CORE.ConfigSwitches.enableMachine_Dehydrators) { + if (GTPPCore.ConfigSwitches.enableMachine_Dehydrators) { run1(); } } @@ -47,34 +47,34 @@ public class GregtechDehydrator { ItemStack coilT4 = new ItemStack(ModItems.itemDehydratorCoil, 1, 3); // Make some coils by wrapping wire around a spool. - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( new ItemStack(ModItems.itemDehydratorCoilWire, 4, 0), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Bronze, 1)) + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Bronze, 1)) .itemOutputs(coilT1) .duration(8 * SECONDS) .eut(TierEU.RECIPE_MV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( new ItemStack(ModItems.itemDehydratorCoilWire, 4, 1), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Steel, 1)) + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Steel, 1)) .itemOutputs(coilT2) .duration(8 * SECONDS) .eut(TierEU.RECIPE_HV / 2) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( new ItemStack(ModItems.itemDehydratorCoilWire, 4, 2), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.StainlessSteel, 1)) + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.StainlessSteel, 1)) .itemOutputs(coilT3) .duration(8 * SECONDS) .eut(TierEU.RECIPE_HV) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( new ItemStack(ModItems.itemDehydratorCoilWire, 4, 3), - GT_OreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Titanium, 1)) + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Titanium, 1)) .itemOutputs(coilT4) .duration(8 * SECONDS) .eut(TierEU.RECIPE_EV / 2) @@ -82,12 +82,12 @@ public class GregtechDehydrator { // Basic GregtechItemList.GT_Dehydrator_MV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( GT_Dehydrator_MV.ID, "machine.dehydrator.tier.00", "Basic Dehydrator I", 2, - new String[] { "This dehydrates your Grapes into Raisins.", CORE.GT_Tooltip.get() }, + new String[] { "This dehydrates your Grapes into Raisins.", GTPPCore.GT_Tooltip.get() }, GTPPRecipeMaps.chemicalDehydratorRecipes, 2, 9, @@ -102,12 +102,12 @@ public class GregtechDehydrator { .getStackForm(1L)); GregtechItemList.GT_Dehydrator_HV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( GT_Dehydrator_HV.ID, "machine.dehydrator.tier.01", "Basic Dehydrator II", 3, - new String[] { "This dehydrates your Grapes into Raisins.", CORE.GT_Tooltip.get() }, + new String[] { "This dehydrates your Grapes into Raisins.", GTPPCore.GT_Tooltip.get() }, GTPPRecipeMaps.chemicalDehydratorRecipes, 2, 9, @@ -117,18 +117,18 @@ public class GregtechDehydrator { "DEHYDRATOR", new Object[] { "ECE", "WMW", "GPG", 'M', HULL, 'P', ROBOT_ARM, 'E', OrePrefixes.wireFine.get(Materials.Electrum), 'C', CIRCUIT, 'W', - OrePrefixes.cableGt04.get(Materials.Silver), 'G', ALLOY.POTIN.getGear(1) }) + OrePrefixes.cableGt04.get(Materials.Silver), 'G', MaterialsAlloy.POTIN.getGear(1) }) .setRecipeCatalystPriority(5) .getStackForm(1L)); // Chemical GregtechItemList.GT_Dehydrator_EV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( GT_Dehydrator_EV.ID, "advancedmachine.dehydrator.tier.01", "Chemical Dehydrator I", 4, - new String[] { "A hangover is the way your body reacts to dehydration.", CORE.GT_Tooltip.get() }, + new String[] { "A hangover is the way your body reacts to dehydration.", GTPPCore.GT_Tooltip.get() }, GTPPRecipeMaps.chemicalDehydratorRecipes, 2, 9, @@ -137,17 +137,17 @@ public class GregtechDehydrator { SpecialEffects.NONE, "DEHYDRATOR", new Object[] { "ECE", "WMW", "GPG", 'M', HULL, 'P', ROBOT_ARM, 'E', coilT1, 'C', CIRCUIT, 'W', - OrePrefixes.cableGt04.get(Materials.Aluminium), 'G', ALLOY.TUMBAGA.getGear(1) }) + OrePrefixes.cableGt04.get(Materials.Aluminium), 'G', MaterialsAlloy.TUMBAGA.getGear(1) }) .setRecipeCatalystPriority(4) .getStackForm(1L)); GregtechItemList.GT_Dehydrator_IV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( GT_Dehydrator_IV.ID, "advancedmachine.dehydrator.tier.02", "Chemical Dehydrator II", 5, - new String[] { "A hangover is the way your body reacts to dehydration.", CORE.GT_Tooltip.get() }, + new String[] { "A hangover is the way your body reacts to dehydration.", GTPPCore.GT_Tooltip.get() }, GTPPRecipeMaps.chemicalDehydratorRecipes, 2, 9, @@ -156,17 +156,17 @@ public class GregtechDehydrator { SpecialEffects.NONE, "DEHYDRATOR", new Object[] { "ECE", "WMW", "GPG", 'M', HULL, 'P', ROBOT_ARM, 'E', coilT2, 'C', CIRCUIT, 'W', - OrePrefixes.cableGt04.get(Materials.Tungsten), 'G', ALLOY.INCONEL_690.getGear(1) }) + OrePrefixes.cableGt04.get(Materials.Tungsten), 'G', MaterialsAlloy.INCONEL_690.getGear(1) }) .setRecipeCatalystPriority(3) .getStackForm(1L)); GregtechItemList.GT_Dehydrator_LuV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( GT_Dehydrator_LuV.ID, "advancedmachine.dehydrator.tier.03", "Chemical Dehydrator III", 6, - new String[] { "You could probably make space icecream with this..", CORE.GT_Tooltip.get() }, + new String[] { "You could probably make space icecream with this..", GTPPCore.GT_Tooltip.get() }, GTPPRecipeMaps.chemicalDehydratorRecipes, 2, 9, @@ -175,17 +175,17 @@ public class GregtechDehydrator { SpecialEffects.NONE, "DEHYDRATOR", new Object[] { "ECE", "WMW", "GPG", 'M', HULL, 'P', ROBOT_ARM, 'E', coilT3, 'C', CIRCUIT, 'W', - OrePrefixes.cableGt04.get(Materials.Naquadah), 'G', ALLOY.HASTELLOY_N.getGear(1) }) + OrePrefixes.cableGt04.get(Materials.Naquadah), 'G', MaterialsAlloy.HASTELLOY_N.getGear(1) }) .setRecipeCatalystPriority(2) .getStackForm(1L)); GregtechItemList.GT_Dehydrator_ZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( GT_Dehydrator_ZPM.ID, "advancedmachine.dehydrator.tier.04", "Chemical Dehydrator IV", 7, - new String[] { "You can definitely make space icecream with this..", CORE.GT_Tooltip.get() }, + new String[] { "You can definitely make space icecream with this..", GTPPCore.GT_Tooltip.get() }, GTPPRecipeMaps.chemicalDehydratorRecipes, 2, 9, @@ -194,15 +194,13 @@ public class GregtechDehydrator { SpecialEffects.NONE, "DEHYDRATOR", new Object[] { "ECE", "WMW", "GPG", 'M', HULL, 'P', ROBOT_ARM, 'E', coilT4, 'C', CIRCUIT, 'W', - OrePrefixes.cableGt04.get(Materials.Osmium), 'G', ALLOY.ZERON_100.getGear(1) }) + OrePrefixes.cableGt04.get(Materials.Osmium), 'G', MaterialsAlloy.ZERON_100.getGear(1) }) .setRecipeCatalystPriority(1) .getStackForm(1L)); // Advanced GregtechItemList.Controller_Vacuum_Furnace.set( - new GregtechMetaTileEntity_IndustrialDehydrator( - Controller_Vacuum_Furnace.ID, - "multimachine.adv.vacuumfurnace", - "Utupu-Tanuri").getStackForm(1L)); + new MTEIndustrialDehydrator(Controller_Vacuum_Furnace.ID, "multimachine.adv.vacuumfurnace", "Utupu-Tanuri") + .getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechEnergyBuffer.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechEnergyBuffer.java index 4b43158f54..528efc5712 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechEnergyBuffer.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechEnergyBuffer.java @@ -14,11 +14,11 @@ import static gregtech.api.enums.MetaTileEntityIDs.Energy_Buffer_1by1_ZPM; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GTModHandler; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; import gtPlusPlus.xmod.gregtech.api.enums.GregtechOreDictNames; -import gtPlusPlus.xmod.gregtech.common.tileentities.storage.GregtechMetaEnergyBuffer; +import gtPlusPlus.xmod.gregtech.common.tileentities.storage.MTEEnergyBuffer; public class GregtechEnergyBuffer { @@ -34,7 +34,7 @@ public class GregtechEnergyBuffer { // Energy Buffers GregtechItemList.Energy_Buffer_1by1_ULV.set( - new GregtechMetaEnergyBuffer( + new MTEEnergyBuffer( Energy_Buffer_1by1_ULV.ID, "energybuffer.tier.00", "Ultra Low Voltage Energy Buffer", @@ -42,15 +42,10 @@ public class GregtechEnergyBuffer { "", 1).getStackForm(1L)); GregtechItemList.Energy_Buffer_1by1_LV.set( - new GregtechMetaEnergyBuffer( - Energy_Buffer_1by1_LV.ID, - "energybuffer.tier.01", - "Low Voltage Energy Buffer", - 1, - "", - 1).getStackForm(1L)); + new MTEEnergyBuffer(Energy_Buffer_1by1_LV.ID, "energybuffer.tier.01", "Low Voltage Energy Buffer", 1, "", 1) + .getStackForm(1L)); GregtechItemList.Energy_Buffer_1by1_MV.set( - new GregtechMetaEnergyBuffer( + new MTEEnergyBuffer( Energy_Buffer_1by1_MV.ID, "energybuffer.tier.02", "Medium Voltage Energy Buffer", @@ -58,7 +53,7 @@ public class GregtechEnergyBuffer { "", 1).getStackForm(1L)); GregtechItemList.Energy_Buffer_1by1_HV.set( - new GregtechMetaEnergyBuffer( + new MTEEnergyBuffer( Energy_Buffer_1by1_HV.ID, "energybuffer.tier.03", "High Voltage Energy Buffer", @@ -66,7 +61,7 @@ public class GregtechEnergyBuffer { "", 1).getStackForm(1L)); GregtechItemList.Energy_Buffer_1by1_EV.set( - new GregtechMetaEnergyBuffer( + new MTEEnergyBuffer( Energy_Buffer_1by1_EV.ID, "energybuffer.tier.04", "Extreme Voltage Energy Buffer", @@ -74,7 +69,7 @@ public class GregtechEnergyBuffer { "", 1).getStackForm(1L)); GregtechItemList.Energy_Buffer_1by1_IV.set( - new GregtechMetaEnergyBuffer( + new MTEEnergyBuffer( Energy_Buffer_1by1_IV.ID, "energybuffer.tier.05", "Insane Voltage Energy Buffer", @@ -82,7 +77,7 @@ public class GregtechEnergyBuffer { "", 1).getStackForm(1L)); GregtechItemList.Energy_Buffer_1by1_LuV.set( - new GregtechMetaEnergyBuffer( + new MTEEnergyBuffer( Energy_Buffer_1by1_LuV.ID, "energybuffer.tier.06", "Ludicrous Voltage Energy Buffer", @@ -90,7 +85,7 @@ public class GregtechEnergyBuffer { "", 1).getStackForm(1L)); GregtechItemList.Energy_Buffer_1by1_ZPM.set( - new GregtechMetaEnergyBuffer( + new MTEEnergyBuffer( Energy_Buffer_1by1_ZPM.ID, "energybuffer.tier.07", "ZPM Voltage Energy Buffer", @@ -98,7 +93,7 @@ public class GregtechEnergyBuffer { "", 1).getStackForm(1L)); GregtechItemList.Energy_Buffer_1by1_UV.set( - new GregtechMetaEnergyBuffer( + new MTEEnergyBuffer( Energy_Buffer_1by1_UV.ID, "energybuffer.tier.08", "Ultimate Voltage Energy Buffer", @@ -106,7 +101,7 @@ public class GregtechEnergyBuffer { "", 1).getStackForm(1L)); GregtechItemList.Energy_Buffer_1by1_MAX.set( - new GregtechMetaEnergyBuffer( + new MTEEnergyBuffer( Energy_Buffer_1by1_MAX.ID, "energybuffer.tier.09", "MAX Voltage Energy Buffer", @@ -114,80 +109,80 @@ public class GregtechEnergyBuffer { "", 1).getStackForm(1L)); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_ULV.get(1L, new Object[0]), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", 'M', ItemList.Hull_ULV, 'W', OrePrefixes.wireGt08.get(Materials.Lead), 'T', GregtechOreDictNames.buffer_core }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_LV.get(1L, new Object[0]), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", 'M', ItemList.Hull_LV, 'W', OrePrefixes.wireGt08.get(Materials.Tin), 'T', GregtechOreDictNames.buffer_core }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_MV.get(1L, new Object[0]), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", 'M', ItemList.Hull_MV, 'W', OrePrefixes.wireGt08.get(Materials.AnyCopper), 'T', GregtechOreDictNames.buffer_core }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_HV.get(1L, new Object[0]), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", 'M', ItemList.Hull_HV, 'W', OrePrefixes.wireGt08.get(Materials.Gold), 'T', GregtechOreDictNames.buffer_core }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_EV.get(1L, new Object[0]), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", 'M', ItemList.Hull_EV, 'W', OrePrefixes.wireGt08.get(Materials.Aluminium), 'T', GregtechOreDictNames.buffer_core }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_IV.get(1L, new Object[0]), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", 'M', ItemList.Hull_IV, 'W', OrePrefixes.wireGt08.get(Materials.Tungsten), 'T', GregtechOreDictNames.buffer_core }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_LuV.get(1L, new Object[0]), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", 'M', ItemList.Hull_LuV, 'W', OrePrefixes.wireGt08.get(Materials.Osmium), 'T', GregtechOreDictNames.buffer_core }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_ZPM.get(1L, new Object[0]), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", 'M', ItemList.Hull_ZPM, 'W', OrePrefixes.wireGt08.get(Materials.Osmium), 'T', GregtechOreDictNames.buffer_core }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_UV.get(1L, new Object[0]), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", 'M', ItemList.Hull_UV, 'W', OrePrefixes.wireGt08.get(Materials.Osmium), 'T', GregtechOreDictNames.buffer_core }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_MAX.get(1L, new Object[0]), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", 'M', ItemList.Hull_MAX, 'W', OrePrefixes.wireGt08.get(Materials.SuperconductorUHV), 'T', GregtechOreDictNames.buffer_core }); /* - * GT_ModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_MAX.get(1L, new Object[0]), - * GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE | - * GT_ModHandler.RecipeBits.REVERSIBLE | GT_ModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", + * GTModHandler.addCraftingRecipe( GregtechItemList.Energy_Buffer_1by1_MAX.get(1L, new Object[0]), + * GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE | + * GTModHandler.RecipeBits.REVERSIBLE | GTModHandler.RecipeBits.BUFFERED, new Object[] { "WTW", "WMW", * Character.valueOf('M'), ItemList.Hull_MAX, Character.valueOf('W'), * OrePrefixes.wireGt08.get(Materials.Superconductor), Character.valueOf('T'), GregtechOreDictNames.buffer_core * }); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechFactoryGradeReplacementMultis.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechFactoryGradeReplacementMultis.java index deaefb3e9d..0f284446fe 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechFactoryGradeReplacementMultis.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechFactoryGradeReplacementMultis.java @@ -9,12 +9,12 @@ import static gregtech.api.enums.MetaTileEntityIDs.Machine_Adv_ImplosionCompress import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialVacuumFreezer; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.GregtechMetaTileEntity_Adv_DistillationTower; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.GregtechMetaTileEntity_Adv_EBF; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.GregtechMetaTileEntity_Adv_Fusion_MK4; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.GregtechMetaTileEntity_Adv_Fusion_MK5; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.GregtechMetaTileEntity_Adv_Implosion; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialVacuumFreezer; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.MTEAdvDistillationTower; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.MTEAdvEBF; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.MTEAdvFusionMk4; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.MTEAdvFusionMk5; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.MTEAdvImplosionCompressor; public class GregtechFactoryGradeReplacementMultis { @@ -25,32 +25,25 @@ public class GregtechFactoryGradeReplacementMultis { private static void run1() { Logger.INFO("Gregtech 5 Content | Registering Advanced GT Multiblock replacements."); GregtechItemList.Machine_Adv_BlastFurnace.set( - new GregtechMetaTileEntity_Adv_EBF(Machine_Adv_BlastFurnace.ID, "multimachine.adv.blastfurnace", "Volcanus") - .getStackForm(1L)); + new MTEAdvEBF(Machine_Adv_BlastFurnace.ID, "multimachine.adv.blastfurnace", "Volcanus").getStackForm(1L)); GregtechItemList.Machine_Adv_ImplosionCompressor.set( - new GregtechMetaTileEntity_Adv_Implosion( + new MTEAdvImplosionCompressor( Machine_Adv_ImplosionCompressor.ID, "multimachine.adv.implosioncompressor", "Density^2").getStackForm(1L)); GregtechItemList.Industrial_Cryogenic_Freezer.set( - new GregtechMetaTileEntity_IndustrialVacuumFreezer( + new MTEIndustrialVacuumFreezer( Industrial_Cryogenic_Freezer.ID, "multimachine.adv.industrialfreezer", "Cryogenic Freezer").getStackForm(1L)); GregtechItemList.FusionComputer_UV2.set( - new GregtechMetaTileEntity_Adv_Fusion_MK4( - FusionComputer_UV2.ID, - "fusioncomputer.tier.09", - "FusionTech MK IV").getStackForm(1L)); + new MTEAdvFusionMk4(FusionComputer_UV2.ID, "fusioncomputer.tier.09", "FusionTech MK IV").getStackForm(1L)); GregtechItemList.FusionComputer_UV3.set( - new GregtechMetaTileEntity_Adv_Fusion_MK5( - FusionComputer_UV3.ID, - "fusioncomputer.tier.10", - "FusionTech MK V").getStackForm(1L)); + new MTEAdvFusionMk5(FusionComputer_UV3.ID, "fusioncomputer.tier.10", "FusionTech MK V").getStackForm(1L)); // 31021 GregtechItemList.Machine_Adv_DistillationTower.set( - new GregtechMetaTileEntity_Adv_DistillationTower( + new MTEAdvDistillationTower( Machine_Adv_DistillationTower.ID, "multimachine.adv.distillationtower", "Dangote Distillus").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechGeothermalThermalGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechGeothermalThermalGenerator.java index ed577a1551..0be94d63c9 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechGeothermalThermalGenerator.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechGeothermalThermalGenerator.java @@ -9,70 +9,70 @@ import net.minecraft.item.ItemStack; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GTModHandler; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.ALLOY; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.material.MaterialsAlloy; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.generators.GregtechMetaTileEntityGeothermalGenerator; +import gtPlusPlus.xmod.gregtech.common.tileentities.generators.MTEGeothermalGenerator; public class GregtechGeothermalThermalGenerator { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Geothermal Engines."); - if (CORE.ConfigSwitches.enableMachine_GeothermalEngines) { + if (GTPPCore.ConfigSwitches.enableMachine_GeothermalEngines) { run1(); } } private static void run1() { GregtechItemList.Geothermal_Engine_EV.set( - new GregtechMetaTileEntityGeothermalGenerator( + new MTEGeothermalGenerator( Geothermal_Engine_EV.ID, "advancedgenerator.geothermalFuel.tier.01", "Basic Geothermal Engine", 4).getStackForm(1L)); GregtechItemList.Geothermal_Engine_IV.set( - new GregtechMetaTileEntityGeothermalGenerator( + new MTEGeothermalGenerator( Geothermal_Engine_IV.ID, "advancedgenerator.geothermalFuel.tier.02", "Turbo Geothermal Engine", 5).getStackForm(1L)); GregtechItemList.Geothermal_Engine_LuV.set( - new GregtechMetaTileEntityGeothermalGenerator( + new MTEGeothermalGenerator( Geothermal_Engine_LuV.ID, "advancedgenerator.geothermalFuel.tier.03", "Vulcan Geothermal Engine", 6).getStackForm(1L)); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Geothermal_Engine_EV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "CEC", "GMG", "PWP", 'M', ItemList.Hull_EV, 'P', ItemList.Electric_Piston_EV, 'E', ItemList.Electric_Motor_EV, 'C', OrePrefixes.circuit.get(Materials.ZPM), 'W', - OrePrefixes.cableGt04.get(Materials.Aluminium), 'G', ALLOY.TANTALLOY_61.getGear(1) }); + OrePrefixes.cableGt04.get(Materials.Aluminium), 'G', MaterialsAlloy.TANTALLOY_61.getGear(1) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Geothermal_Engine_IV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "CEC", "GMG", "PWP", 'M', ItemList.Hull_IV, 'P', ItemList.Electric_Piston_IV, 'E', ItemList.Electric_Motor_IV, 'C', OrePrefixes.circuit.get(Materials.UV), 'W', - OrePrefixes.cableGt04.get(Materials.Platinum), 'G', ALLOY.STELLITE.getGear(1) }); + OrePrefixes.cableGt04.get(Materials.Platinum), 'G', MaterialsAlloy.STELLITE.getGear(1) }); final ItemStack INGREDIENT_1 = CI.electricPiston_LuV; final ItemStack INGREDIENT_2 = CI.electricMotor_LuV; - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Geothermal_Engine_LuV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "CEC", "GMG", "PWP", 'M', ItemList.Hull_LuV, 'P', INGREDIENT_1, 'E', INGREDIENT_2, 'C', OrePrefixes.circuit.get(Materials.UHV), 'W', OrePrefixes.cableGt04.get(Materials.Tungsten), 'G', - ALLOY.ZERON_100.getGear(1) }); + MaterialsAlloy.ZERON_100.getGear(1) }); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechHiAmpTransformer.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechHiAmpTransformer.java index 8c452cbca4..7d5d6b5169 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechHiAmpTransformer.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechHiAmpTransformer.java @@ -12,83 +12,83 @@ import static gregtech.api.enums.MetaTileEntityIDs.Transformer_HA_ZPM_LuV; import net.minecraft.item.ItemStack; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GTModHandler; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.GregtechMetaTransformerHiAmp; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.base.MTETransformerHiAmp; public class GregtechHiAmpTransformer { public static void run() { - long bitsd = GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED; + long bitsd = GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED; String mHammerName = "Mallet"; GregtechItemList.Transformer_HA_LV_ULV.set( - new GregtechMetaTransformerHiAmp( + new MTETransformerHiAmp( Transformer_HA_LV_ULV.ID, "transformer.ha.tier.00", "ULV Hi-Amp Transformer", 0, "LV -> ULV (Use Soft " + mHammerName + " to invert)").getStackForm(1L)); GregtechItemList.Transformer_HA_MV_LV.set( - new GregtechMetaTransformerHiAmp( + new MTETransformerHiAmp( Transformer_HA_MV_LV.ID, "transformer.ha.tier.01", "LV Hi-Amp Transformer", 1, "MV -> LV (Use Soft " + mHammerName + " to invert)").getStackForm(1L)); GregtechItemList.Transformer_HA_HV_MV.set( - new GregtechMetaTransformerHiAmp( + new MTETransformerHiAmp( Transformer_HA_HV_MV.ID, "transformer.ha.tier.02", "MV Hi-Amp Transformer", 2, "HV -> MV (Use Soft " + mHammerName + " to invert)").getStackForm(1L)); GregtechItemList.Transformer_HA_EV_HV.set( - new GregtechMetaTransformerHiAmp( + new MTETransformerHiAmp( Transformer_HA_EV_HV.ID, "transformer.ha.tier.03", "HV Hi-Amp Transformer", 3, "EV -> HV (Use Soft " + mHammerName + " to invert)").getStackForm(1L)); GregtechItemList.Transformer_HA_IV_EV.set( - new GregtechMetaTransformerHiAmp( + new MTETransformerHiAmp( Transformer_HA_IV_EV.ID, "transformer.ha.tier.04", "EV Hi-Amp Transformer", 4, "IV -> EV (Use Soft " + mHammerName + " to invert)").getStackForm(1L)); GregtechItemList.Transformer_HA_LuV_IV.set( - new GregtechMetaTransformerHiAmp( + new MTETransformerHiAmp( Transformer_HA_LuV_IV.ID, "transformer.ha.tier.05", "IV Hi-Amp Transformer", 5, "LuV -> IV (Use Soft " + mHammerName + " to invert)").getStackForm(1L)); GregtechItemList.Transformer_HA_ZPM_LuV.set( - new GregtechMetaTransformerHiAmp( + new MTETransformerHiAmp( Transformer_HA_ZPM_LuV.ID, "transformer.ha.tier.06", "LuV Hi-Amp Transformer", 6, "ZPM -> LuV (Use Soft " + mHammerName + " to invert)").getStackForm(1L)); GregtechItemList.Transformer_HA_UV_ZPM.set( - new GregtechMetaTransformerHiAmp( + new MTETransformerHiAmp( Transformer_HA_UV_ZPM.ID, "transformer.ha.tier.07", "ZPM Hi-Amp Transformer", 7, "UV -> ZPM (Use Soft " + mHammerName + " to invert)").getStackForm(1L)); GregtechItemList.Transformer_HA_MAX_UV.set( - new GregtechMetaTransformerHiAmp( + new MTETransformerHiAmp( Transformer_HA_MAX_UV.ID, "transformer.ha.tier.08", "UV Hi-Amp Transformer", @@ -99,67 +99,67 @@ public class GregtechHiAmpTransformer { ItemStack mItem_3; mItem_1 = ItemUtils.simpleMetaStack( - ItemUtils.getSimpleStack(GregTech_API.sBlockCasings5) + ItemUtils.getSimpleStack(GregTechAPI.sBlockCasings5) .getItem(), 3, 1); mItem_2 = ItemUtils.simpleMetaStack( - ItemUtils.getSimpleStack(GregTech_API.sBlockCasings5) + ItemUtils.getSimpleStack(GregTechAPI.sBlockCasings5) .getItem(), 4, 1); mItem_3 = ItemUtils.simpleMetaStack( - ItemUtils.getSimpleStack(GregTech_API.sBlockCasings5) + ItemUtils.getSimpleStack(GregTechAPI.sBlockCasings5) .getItem(), 9, 1); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Transformer_HA_LV_ULV.get(1L), bitsd, new Object[] { " BB", "CM ", " BB", 'M', ItemList.Transformer_LV_ULV, 'C', OrePrefixes.wireGt04.get(Materials.Tin), 'B', OrePrefixes.wireGt04.get(Materials.Lead) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Transformer_HA_MV_LV.get(1L), bitsd, new Object[] { " BB", "CM ", " BB", 'M', ItemList.Transformer_MV_LV, 'C', OrePrefixes.wireGt04.get(Materials.AnyCopper), 'B', OrePrefixes.wireGt04.get(Materials.Tin) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Transformer_HA_HV_MV.get(1L), bitsd, new Object[] { " BB", "CM ", " BB", 'M', ItemList.Transformer_HV_MV, 'C', OrePrefixes.wireGt04.get(Materials.Gold), 'B', OrePrefixes.wireGt04.get(Materials.AnyCopper) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Transformer_HA_EV_HV.get(1L), bitsd, new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Transformer_EV_HV, 'C', OrePrefixes.wireGt04.get(Materials.Aluminium), 'B', OrePrefixes.wireGt04.get(Materials.Gold), 'K', ItemList.Casing_Coil_Cupronickel }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Transformer_HA_IV_EV.get(1L), bitsd, new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Transformer_IV_EV, 'C', OrePrefixes.wireGt04.get(Materials.Tungsten), 'B', OrePrefixes.wireGt04.get(Materials.Aluminium), 'K', ItemList.Casing_Coil_Kanthal }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Transformer_HA_LuV_IV.get(1L), bitsd, new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Transformer_LuV_IV, 'C', OrePrefixes.wireGt04.get(Materials.VanadiumGallium), 'B', OrePrefixes.wireGt04.get(Materials.Tungsten), 'K', ItemList.Casing_Coil_Nichrome }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Transformer_HA_ZPM_LuV.get(1L), bitsd, new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Transformer_ZPM_LuV, 'C', OrePrefixes.wireGt04.get(Materials.Naquadah), 'B', OrePrefixes.wireGt04.get(Materials.VanadiumGallium), 'K', mItem_1 }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Transformer_HA_UV_ZPM.get(1L), bitsd, new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Transformer_UV_ZPM, 'C', OrePrefixes.wireGt04.get(Materials.NaquadahAlloy), 'B', OrePrefixes.wireGt04.get(Materials.Naquadah), 'K', mItem_2 }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Transformer_HA_MAX_UV.get(1L), bitsd, new Object[] { "KBB", "CM ", "KBB", 'M', ItemList.Transformer_MAX_UV, 'C', diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialAlloySmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialAlloySmelter.java index e40a2ad86b..dc2a5a552e 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialAlloySmelter.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialAlloySmelter.java @@ -4,7 +4,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.Industrial_AlloySmelter; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialAlloySmelter; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialAlloySmelter; public class GregtechIndustrialAlloySmelter { @@ -15,7 +15,7 @@ public class GregtechIndustrialAlloySmelter { private static void run1() { GregtechItemList.Industrial_AlloySmelter.set( - new GregtechMetaTileEntity_IndustrialAlloySmelter( + new MTEIndustrialAlloySmelter( Industrial_AlloySmelter.ID, "industrialalloysmelter.controller.tier.single", "Zyngen").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialArcFurnace.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialArcFurnace.java index 85ea33917a..af2b911bdd 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialArcFurnace.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialArcFurnace.java @@ -4,7 +4,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.Industrial_Arc_Furnace; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialArcFurnace; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialArcFurnace; public class GregtechIndustrialArcFurnace { @@ -16,7 +16,7 @@ public class GregtechIndustrialArcFurnace { private static void run1() { // Industrial Arc Furnace Multiblock GregtechItemList.Industrial_Arc_Furnace.set( - new GregtechMetaTileEntity_IndustrialArcFurnace( + new MTEIndustrialArcFurnace( Industrial_Arc_Furnace.ID, "industrialarcfurnace.controller.tier.single", "High Current Industrial Arc Furnace").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialBlastSmelter.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialBlastSmelter.java index 498b504eb1..956193bef2 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialBlastSmelter.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialBlastSmelter.java @@ -4,16 +4,16 @@ import static gregtech.api.enums.MetaTileEntityIDs.Industrial_AlloyBlastSmelter; import static gregtech.api.enums.MetaTileEntityIDs.Mega_AlloyBlastSmelter; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_AlloyBlastSmelter; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.mega.GregTechMetaTileEntity_MegaAlloyBlastSmelter; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTEAlloyBlastSmelter; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.mega.MTEMegaAlloyBlastSmelter; public class GregtechIndustrialBlastSmelter { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Alloy Blast Smelter Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_AlloyBlastSmelter) { + if (GTPPCore.ConfigSwitches.enableMultiblock_AlloyBlastSmelter) { run1(); } } @@ -21,12 +21,12 @@ public class GregtechIndustrialBlastSmelter { private static void run1() { // Industrial Alloy Blast Smelter Multiblock GregtechItemList.Industrial_AlloyBlastSmelter.set( - new GregtechMetaTileEntity_AlloyBlastSmelter( + new MTEAlloyBlastSmelter( Industrial_AlloyBlastSmelter.ID, "industrialsalloyamelter.controller.tier.single", "Alloy Blast Smelter").getStackForm(1L)); GregtechItemList.Mega_AlloyBlastSmelter.set( - new GregTechMetaTileEntity_MegaAlloyBlastSmelter( + new MTEMegaAlloyBlastSmelter( Mega_AlloyBlastSmelter.ID, "industrialsalloyamelter.controller.tier.mega", "Mega Alloy Blast Smelter").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCentrifuge.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCentrifuge.java index 4dab825902..4a0da61dbd 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCentrifuge.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCentrifuge.java @@ -3,15 +3,15 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_Centrifuge; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialCentrifuge; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialCentrifuge; public class GregtechIndustrialCentrifuge { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Centrifuge Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialCentrifuge) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialCentrifuge) { run1(); } } @@ -19,7 +19,7 @@ public class GregtechIndustrialCentrifuge { private static void run1() { // Industrial Centrifuge Multiblock GregtechItemList.Industrial_Centrifuge.set( - new GregtechMetaTileEntity_IndustrialCentrifuge( + new MTEIndustrialCentrifuge( Industrial_Centrifuge.ID, "industrialcentrifuge.controller.tier.single", "Industrial Centrifuge").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialChisel.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialChisel.java index 23bd4565fc..2fd0517895 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialChisel.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialChisel.java @@ -6,24 +6,21 @@ import static gregtech.api.enums.MetaTileEntityIDs.GT_Chisel_LV; import static gregtech.api.enums.MetaTileEntityIDs.GT_Chisel_MV; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaTileEntity_AutoChisel; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialChisel; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.MTEAutoChisel; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialChisel; public class GregtechIndustrialChisel { public static void run() { - GregtechItemList.GT_Chisel_LV.set( - new GregtechMetaTileEntity_AutoChisel(GT_Chisel_LV.ID, "chisel.tier.01", "Basic Auto-Chisel", 1) - .getStackForm(1L)); - GregtechItemList.GT_Chisel_MV.set( - new GregtechMetaTileEntity_AutoChisel(GT_Chisel_MV.ID, "chisel.tier.02", "Advanced Auto-Chisel", 2) - .getStackForm(1L)); - GregtechItemList.GT_Chisel_HV.set( - new GregtechMetaTileEntity_AutoChisel(GT_Chisel_HV.ID, "chisel.tier.03", "Precision Auto-Chisel", 3) - .getStackForm(1L)); + GregtechItemList.GT_Chisel_LV + .set(new MTEAutoChisel(GT_Chisel_LV.ID, "chisel.tier.01", "Basic Auto-Chisel", 1).getStackForm(1L)); + GregtechItemList.GT_Chisel_MV + .set(new MTEAutoChisel(GT_Chisel_MV.ID, "chisel.tier.02", "Advanced Auto-Chisel", 2).getStackForm(1L)); + GregtechItemList.GT_Chisel_HV + .set(new MTEAutoChisel(GT_Chisel_HV.ID, "chisel.tier.03", "Precision Auto-Chisel", 3).getStackForm(1L)); GregtechItemList.Controller_IndustrialAutoChisel.set( - new GregtechMetaTileEntity_IndustrialChisel( + new MTEIndustrialChisel( Controller_IndustrialAutoChisel.ID, "multimachine.adv.chisel", "Industrial 3D Copying Machine").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCokeOven.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCokeOven.java index de8b253534..219b5ee196 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCokeOven.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCokeOven.java @@ -3,15 +3,15 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_CokeOven; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialCokeOven; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialCokeOven; public class GregtechIndustrialCokeOven { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Coke Oven Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialCokeOven) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialCokeOven) { run1(); } } @@ -19,7 +19,7 @@ public class GregtechIndustrialCokeOven { private static void run1() { // Industrial Centrifuge Multiblock GregtechItemList.Industrial_CokeOven.set( - new GregtechMetaTileEntity_IndustrialCokeOven( + new MTEIndustrialCokeOven( Industrial_CokeOven.ID, "industrialcokeoven.controller.tier.single", "Industrial Coke Oven").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCuttingFactory.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCuttingFactory.java index 69a449c70b..c05614827d 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCuttingFactory.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialCuttingFactory.java @@ -3,15 +3,15 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_CuttingFactoryController; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialCuttingMachine; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialCuttingMachine; public class GregtechIndustrialCuttingFactory { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Cutting Factory Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialCuttingMachine) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialCuttingMachine) { run1(); } } @@ -19,7 +19,7 @@ public class GregtechIndustrialCuttingFactory { private static void run1() { // Industrial Wire Factory Multiblock GregtechItemList.Industrial_CuttingFactoryController.set( - new GregtechMetaTileEntity_IndustrialCuttingMachine( + new MTEIndustrialCuttingMachine( Industrial_CuttingFactoryController.ID, "industrialcuttingmachine.controller.tier.01", "Cutting Factory Controller").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElectrolyzer.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElectrolyzer.java index 0493662f85..34f736e0f7 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElectrolyzer.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElectrolyzer.java @@ -3,15 +3,15 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_Electrolyzer; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialElectrolyzer; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEndustrialElectrolyzer; public class GregtechIndustrialElectrolyzer { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Electrolyzer Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialElectrolyzer) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialElectrolyzer) { run1(); } } @@ -19,7 +19,7 @@ public class GregtechIndustrialElectrolyzer { private static void run1() { // Industrial Electrolyzer Multiblock GregtechItemList.Industrial_Electrolyzer.set( - new GregtechMetaTileEntity_IndustrialElectrolyzer( + new MTEndustrialElectrolyzer( Industrial_Electrolyzer.ID, "industrialelectrolyzer.controller.tier.single", "Industrial Electrolyzer").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElementDuplicator.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElementDuplicator.java index c3f86d8e2e..527e1549e6 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElementDuplicator.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialElementDuplicator.java @@ -5,8 +5,8 @@ import static gregtech.api.enums.MetaTileEntityIDs.Hatch_Input_Elemental_Duplica 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.common.tileentities.machines.multi.production.GregtechMTE_ElementalDuplicator; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchElementalDataOrbHolder; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTEElementalDuplicator; public class GregtechIndustrialElementDuplicator { @@ -15,12 +15,12 @@ public class GregtechIndustrialElementDuplicator { Logger.INFO("Gregtech5u Content | Registering Elemental Duplicator Multiblock."); GregtechItemList.Controller_ElementalDuplicator.set( - new GregtechMTE_ElementalDuplicator( + new MTEElementalDuplicator( Controller_ElementalDuplicator.ID, "gtpp.multimachine.replicator", "Elemental Duplicator").getStackForm(1L)); GregtechItemList.Hatch_Input_Elemental_Duplicator.set( - new GT_MetaTileEntity_Hatch_ElementalDataOrbHolder( + new MTEHatchElementalDataOrbHolder( Hatch_Input_Elemental_Duplicator.ID, "hatch.input_bus.elementalorbholder", "Data Orb Repository", diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialExtruder.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialExtruder.java index ad9d267b3b..1af1b8dec1 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialExtruder.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialExtruder.java @@ -3,15 +3,15 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_Extruder; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialExtruder; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialExtruder; public class GregtechIndustrialExtruder { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Extrusion Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialExtrudingMachine) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialExtrudingMachine) { run1(); } } @@ -19,7 +19,7 @@ public class GregtechIndustrialExtruder { private static void run1() { // Industrial Presser Multiblock GregtechItemList.Industrial_Extruder.set( - new GregtechMetaTileEntity_IndustrialExtruder( + new MTEIndustrialExtruder( Industrial_Extruder.ID, "industrialextruder.controller.tier.single", "Industrial Extrusion Machine").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFishPond.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFishPond.java index 0bba25461e..489ad334f5 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFishPond.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFishPond.java @@ -4,7 +4,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.Industrial_FishingPond; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_IndustrialFishingPond; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTEIndustrialFishingPond; public class GregtechIndustrialFishPond { @@ -15,7 +15,7 @@ public class GregtechIndustrialFishPond { private static void run1() { GregtechItemList.Industrial_FishingPond.set( - new GregtechMetaTileEntity_IndustrialFishingPond( + new MTEIndustrialFishingPond( Industrial_FishingPond.ID, "industrial.fishpond.controller.tier.single", "Zhuhai - Fishing Port").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFluidHeater.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFluidHeater.java index 23bb34e16e..11a3013882 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFluidHeater.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFluidHeater.java @@ -4,7 +4,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.Controller_IndustrialFluidHea import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialFluidHeater; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialFluidHeater; public class GregtechIndustrialFluidHeater { @@ -15,7 +15,7 @@ public class GregtechIndustrialFluidHeater { private static void run1() { GregtechItemList.Controller_IndustrialFluidHeater.set( - new GregtechMetaTileEntity_IndustrialFluidHeater( + new MTEIndustrialFluidHeater( Controller_IndustrialFluidHeater.ID, "industrialfluidheater.controller.tier.single", "Thermic Heating Device").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialForgeHammer.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialForgeHammer.java index f55e5e2a97..9b24118b85 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialForgeHammer.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialForgeHammer.java @@ -4,7 +4,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.Controller_IndustrialForgeHam import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialForgeHammer; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialForgeHammer; public class GregtechIndustrialForgeHammer { @@ -15,7 +15,7 @@ public class GregtechIndustrialForgeHammer { private static void run1() { GregtechItemList.Controller_IndustrialForgeHammer.set( - new GregtechMetaTileEntity_IndustrialForgeHammer( + new MTEIndustrialForgeHammer( Controller_IndustrialForgeHammer.ID, "industrialhammer.controller.tier.single", "Industrial Sledgehammer").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFuelRefinery.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFuelRefinery.java index e7b3d700ad..96883ac3c2 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFuelRefinery.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialFuelRefinery.java @@ -3,15 +3,15 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_FuelRefinery; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_Refinery; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTERefinery; public class GregtechIndustrialFuelRefinery { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Fuel Processing and Refinery Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_NuclearFuelRefinery) { + if (GTPPCore.ConfigSwitches.enableMultiblock_NuclearFuelRefinery) { run1(); } } @@ -19,7 +19,7 @@ public class GregtechIndustrialFuelRefinery { private static void run1() { // Industrial Maceration Stack Multiblock GregtechItemList.Industrial_FuelRefinery.set( - new GregtechMetaTileEntity_Refinery( + new MTERefinery( Industrial_FuelRefinery.ID, "industrialrefinery.controller.tier.single", "Reactor Fuel Processing Plant").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMacerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMacerator.java index f9cb57f504..6d9d17c987 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMacerator.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMacerator.java @@ -3,15 +3,15 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_MacerationStack; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialMacerator; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialMacerator; public class GregtechIndustrialMacerator { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Maceration Stack Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialMacerationStack) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialMacerationStack) { run1(); } } @@ -19,7 +19,7 @@ public class GregtechIndustrialMacerator { private static void run1() { // Industrial Maceration Stack Multiblock GregtechItemList.Industrial_MacerationStack.set( - new GregtechMetaTileEntity_IndustrialMacerator( + new MTEIndustrialMacerator( Industrial_MacerationStack.ID, "industrialmacerator.controller.tier.single", "Maceration Stack Controller").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMassFabricator.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMassFabricator.java index 9bf1a3746f..9d680127dd 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMassFabricator.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMassFabricator.java @@ -1,25 +1,25 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_MassFab; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.multiblockMassFabricatorRecipes; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.minecraft.ItemUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_MassFabricator; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTEMassFabricator; public class GregtechIndustrialMassFabricator { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Matter Fabricator Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_MatterFabricator) { + if (GTPPCore.ConfigSwitches.enableMultiblock_MatterFabricator) { generateRecipes(); run1(); } @@ -28,7 +28,7 @@ public class GregtechIndustrialMassFabricator { private static void run1() { // Industrial Matter Fabricator Multiblock GregtechItemList.Industrial_MassFab.set( - new GregtechMetaTileEntity_MassFabricator( + new MTEMassFabricator( Industrial_MassFab.ID, "industrialmassfab.controller.tier.single", "Matter Fabrication CPU").getStackForm(1L)); @@ -39,9 +39,9 @@ public class GregtechIndustrialMassFabricator { // Generate Scrap->UUA Recipes // Basic UUA1 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(9), + GTUtility.getIntegratedCircuit(9), ItemUtils.getSimpleStack(ItemUtils.getItemFromFQRN("IC2:itemScrap"), 9)) .fluidOutputs(Materials.UUAmplifier.getFluid(1)) .duration(9 * SECONDS) @@ -50,9 +50,9 @@ public class GregtechIndustrialMassFabricator { .addTo(multiblockMassFabricatorRecipes); // Basic UUA2 - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_Utility.getIntegratedCircuit(19), + GTUtility.getIntegratedCircuit(19), ItemUtils.getSimpleStack(ItemUtils.getItemFromFQRN("IC2:itemScrapbox"))) .fluidOutputs(Materials.UUAmplifier.getFluid(1)) .duration(9 * SECONDS) @@ -61,8 +61,8 @@ public class GregtechIndustrialMassFabricator { .addTo(multiblockMassFabricatorRecipes); // Basic UUM - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) .fluidOutputs(Materials.UUMatter.getFluid(16)) .duration(2 * MINUTES + 40 * SECONDS) .eut(4096) @@ -70,8 +70,8 @@ public class GregtechIndustrialMassFabricator { .addTo(multiblockMassFabricatorRecipes); // Basic UUM - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(2)) .fluidInputs(Materials.UUAmplifier.getFluid(16)) .fluidOutputs(Materials.UUMatter.getFluid(16)) .duration(40 * SECONDS) @@ -80,8 +80,8 @@ public class GregtechIndustrialMassFabricator { .addTo(multiblockMassFabricatorRecipes); // Advanced UUM - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(3)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(3)) .fluidOutputs(Materials.UUMatter.getFluid(256)) .duration(2 * MINUTES + 40 * SECONDS) .eut(65536) @@ -89,8 +89,8 @@ public class GregtechIndustrialMassFabricator { .addTo(multiblockMassFabricatorRecipes); // Advanced UUM - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(4)) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(4)) .fluidInputs(Materials.UUAmplifier.getFluid(256)) .fluidOutputs(Materials.UUMatter.getFluid(256)) .duration(40 * SECONDS) diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMixer.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMixer.java index 7da9e59425..9508061d6f 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMixer.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMixer.java @@ -3,15 +3,15 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_Mixer; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialMixer; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialMixer; public class GregtechIndustrialMixer { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Mixer Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialPlatePress) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialPlatePress) { run1(); } } @@ -19,7 +19,7 @@ public class GregtechIndustrialMixer { private static void run1() { // Industrial Mixer Multiblock GregtechItemList.Industrial_Mixer.set( - new GregtechMetaTileEntity_IndustrialMixer( + new MTEIndustrialMixer( Industrial_Mixer.ID, "industrialmixer.controller.tier.single", "Industrial Mixing Machine").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMultiMachine.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMultiMachine.java index ae9dae1773..051569195a 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMultiMachine.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialMultiMachine.java @@ -3,22 +3,22 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_MultiMachine; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialMultiMachine; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialMultiMachine; public class GregtechIndustrialMultiMachine { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Multi-Machine Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialMultiMachine) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialMultiMachine) { run1(); } } private static void run1() { GregtechItemList.Industrial_MultiMachine.set( - new GregtechMetaTileEntity_IndustrialMultiMachine( + new MTEIndustrialMultiMachine( Industrial_MultiMachine.ID, "industrialmultimachine.controller.tier.single", "Large Processing Factory").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialPlatePress.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialPlatePress.java index 96446b4380..de6bab91d0 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialPlatePress.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialPlatePress.java @@ -3,15 +3,15 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_PlatePress; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialPlatePress; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialPlatePress; public class GregtechIndustrialPlatePress { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Press Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialPlatePress) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialPlatePress) { run1(); } } @@ -19,7 +19,7 @@ public class GregtechIndustrialPlatePress { private static void run1() { // Industrial Presser Multiblock GregtechItemList.Industrial_PlatePress.set( - new GregtechMetaTileEntity_IndustrialPlatePress( + new MTEIndustrialPlatePress( Industrial_PlatePress.ID, "industrialbender.controller.tier.single", "Industrial Material Press").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialRockBreaker.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialRockBreaker.java index 5523103d18..1c59ad421f 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialRockBreaker.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialRockBreaker.java @@ -3,13 +3,13 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Controller_IndustrialRockBreaker; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_IndustrialRockBreaker; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTEIndustrialRockBreaker; public class GregtechIndustrialRockBreaker { public static void run() { GregtechItemList.Controller_IndustrialRockBreaker.set( - new GregtechMetaTileEntity_IndustrialRockBreaker( + new MTEIndustrialRockBreaker( Controller_IndustrialRockBreaker.ID, "industrialrockcrusher.controller.tier.single", "Boldarnator").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialSifter.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialSifter.java index 12ff0a281e..e82a9f2027 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialSifter.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialSifter.java @@ -3,22 +3,22 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_Sifter; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialSifter; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialSifter; public class GregtechIndustrialSifter { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Sifter Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialSifter) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialSifter) { run1(); } } private static void run1() { GregtechItemList.Industrial_Sifter.set( - new GregtechMetaTileEntity_IndustrialSifter( + new MTEIndustrialSifter( Industrial_Sifter.ID, "industrialsifter.controller.tier.single", "Large Sifter Control Block").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialThermalCentrifuge.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialThermalCentrifuge.java index 74b2d26e35..7ee3452d34 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialThermalCentrifuge.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialThermalCentrifuge.java @@ -3,22 +3,22 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_ThermalCentrifuge; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialThermalCentrifuge; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialThermalCentrifuge; public class GregtechIndustrialThermalCentrifuge { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Thermal Centrifuge Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialThermalCentrifuge) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialThermalCentrifuge) { run1(); } } private static void run1() { GregtechItemList.Industrial_ThermalCentrifuge.set( - new GregtechMetaTileEntity_IndustrialThermalCentrifuge( + new MTEIndustrialThermalCentrifuge( Industrial_ThermalCentrifuge.ID, "industrialthermalcentrifuge.controller.tier.single", "Large Thermal Refinery").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialTreeFarm.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialTreeFarm.java index 6327c424ce..5c43c70fc3 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialTreeFarm.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialTreeFarm.java @@ -3,14 +3,14 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_TreeFarm; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntityTreeFarm; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTETreeFarm; public class GregtechIndustrialTreeFarm { public static void run() { - if (CORE.ConfigSwitches.enableMultiblock_TreeFarmer) { + if (GTPPCore.ConfigSwitches.enableMultiblock_TreeFarmer) { Logger.INFO("Gregtech5u Content | Registering Tree Farm Multiblock."); run1(); } @@ -18,9 +18,7 @@ public class GregtechIndustrialTreeFarm { private static void run1() { GregtechItemList.Industrial_TreeFarm.set( - new GregtechMetaTileEntityTreeFarm( - Industrial_TreeFarm.ID, - "treefarm.controller.tier.single", - "Tree Growth Simulator").getStackForm(1L)); + new MTETreeFarm(Industrial_TreeFarm.ID, "treefarm.controller.tier.single", "Tree Growth Simulator") + .getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialWashPlant.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialWashPlant.java index 20804a9138..2ae9795b0d 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialWashPlant.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialWashPlant.java @@ -3,22 +3,22 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_WashPlant; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialWashPlant; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialWashPlant; public class GregtechIndustrialWashPlant { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Wash Plant Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialWashPlant) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialWashPlant) { run1(); } } private static void run1() { GregtechItemList.Industrial_WashPlant.set( - new GregtechMetaTileEntity_IndustrialWashPlant( + new MTEIndustrialWashPlant( Industrial_WashPlant.ID, "industrialwashplant.controller.tier.single", "Ore Washing Plant").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialWiremill.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialWiremill.java index 51bb20a6f6..39920a4553 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialWiremill.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIndustrialWiremill.java @@ -3,15 +3,15 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_WireFactory; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialWireMill; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialWireMill; public class GregtechIndustrialWiremill { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Wire Factory Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_IndustrialWireMill) { + if (GTPPCore.ConfigSwitches.enableMultiblock_IndustrialWireMill) { run1(); } } @@ -19,7 +19,7 @@ public class GregtechIndustrialWiremill { private static void run1() { // Industrial Wire Factory Multiblock GregtechItemList.Industrial_WireFactory.set( - new GregtechMetaTileEntity_IndustrialWireMill( + new MTEIndustrialWireMill( Industrial_WireFactory.ID, "industrialwiremill.controller.tier.single", "Wire Factory Controller").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIsaMill.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIsaMill.java index 1fae804b7d..90a107de32 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIsaMill.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechIsaMill.java @@ -6,9 +6,9 @@ import static gregtech.api.enums.MetaTileEntityIDs.Controller_IsaMill; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.GT_MetaTileEntity_Hatch_MillingBalls; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IsaMill; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMTE_FrothFlotationCell; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.MTEHatchMillingBalls; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIsaMill; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTEFrothFlotationCell; public class GregtechIsaMill { @@ -17,19 +17,16 @@ public class GregtechIsaMill { Logger.INFO("Gregtech5u Content | Registering Milling Content."); GregtechItemList.Controller_IsaMill.set( - new GregtechMetaTileEntity_IsaMill( - Controller_IsaMill.ID, - "gtpp.multimachine.isamill", - "IsaMill Grinding Machine").getStackForm(1L)); + new MTEIsaMill(Controller_IsaMill.ID, "gtpp.multimachine.isamill", "IsaMill Grinding Machine") + .getStackForm(1L)); GregtechItemList.Controller_Flotation_Cell.set( - new GregtechMTE_FrothFlotationCell( + new MTEFrothFlotationCell( Controller_Flotation_Cell.ID, "gtpp.multimachine.flotationcell", "Flotation Cell Regulator").getStackForm(1L)); // Milling Ball Bus - GregtechItemList.Bus_Milling_Balls.set( - (new GT_MetaTileEntity_Hatch_MillingBalls(Bus_Milling_Balls.ID, "hatch.milling", "Ball Housing")) - .getStackForm(1L)); + GregtechItemList.Bus_Milling_Balls + .set((new MTEHatchMillingBalls(Bus_Milling_Balls.ID, "hatch.milling", "Ball Housing")).getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechLFTR.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechLFTR.java index f4d6eae1b8..71bc6937bc 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechLFTR.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechLFTR.java @@ -8,20 +8,20 @@ import static gregtech.api.enums.MetaTileEntityIDs.ReactorProcessingUnit_ZPM; import static gregtech.api.enums.MetaTileEntityIDs.ThoriumReactor; import gregtech.api.enums.SoundResource; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects; +import gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe; +import gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe.SpecialEffects; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_SpargeTower; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMTE_NuclearReactor; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTESpargeTower; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTENuclearReactor; public class GregtechLFTR { public static void run() { Logger.INFO("Gregtech5u Content | Registering Liquid Fluorine Thorium Reactor [LFTR]."); - if (CORE.ConfigSwitches.enableMultiblock_LiquidFluorideThoriumReactor) { + if (GTPPCore.ConfigSwitches.enableMultiblock_LiquidFluorideThoriumReactor) { run1(); } } @@ -29,16 +29,16 @@ public class GregtechLFTR { private static void run1() { // LFTR GregtechItemList.ThoriumReactor.set( - new GregtechMTE_NuclearReactor(ThoriumReactor.ID, "lftr.controller.single", "Thorium Reactor [LFTR]") + new MTENuclearReactor(ThoriumReactor.ID, "lftr.controller.single", "Thorium Reactor [LFTR]") .getStackForm(1L)); // Reactor Processing Units GregtechItemList.ReactorProcessingUnit_IV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( ReactorProcessingUnit_IV.ID, "rpu.tier.01", "Reactor Processing Unit I", 5, - new String[] { "Processes Nuclear things", CORE.GT_Tooltip.get() }, + new String[] { "Processes Nuclear things", GTPPCore.GT_Tooltip.get() }, GTPPRecipeMaps.reactorProcessingUnitRecipes, 2, 9, @@ -48,12 +48,12 @@ public class GregtechLFTR { "REACTOR_PROCESSING_UNIT", null).getStackForm(1L)); GregtechItemList.ReactorProcessingUnit_ZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( ReactorProcessingUnit_ZPM.ID, "rpu.tier.02", "Reactor Processing Unit II", 7, - new String[] { "Processes Nuclear things", CORE.GT_Tooltip.get() }, + new String[] { "Processes Nuclear things", GTPPCore.GT_Tooltip.get() }, GTPPRecipeMaps.reactorProcessingUnitRecipes, 2, 9, @@ -64,12 +64,12 @@ public class GregtechLFTR { null).getStackForm(1L)); // Cold Traps GregtechItemList.ColdTrap_IV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( ColdTrap_IV.ID, "coldtrap.tier.01", "Cold Trap I", 5, - new String[] { "Just like the Arctic", "Does not require ice cubes", CORE.GT_Tooltip.get() }, + new String[] { "Just like the Arctic", "Does not require ice cubes", GTPPCore.GT_Tooltip.get() }, GTPPRecipeMaps.coldTrapRecipes, 2, 9, @@ -79,12 +79,12 @@ public class GregtechLFTR { "COLD_TRAP", null).getStackForm(1L)); GregtechItemList.ColdTrap_ZPM.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( ColdTrap_ZPM.ID, "coldtrap.tier.02", "Cold Trap II", 7, - new String[] { "Just like the Arctic", "Does not require ice cubes", CORE.GT_Tooltip.get() }, + new String[] { "Just like the Arctic", "Does not require ice cubes", GTPPCore.GT_Tooltip.get() }, GTPPRecipeMaps.coldTrapRecipes, 2, 9, @@ -95,9 +95,7 @@ public class GregtechLFTR { null).getStackForm(1L)); // Sparge Tower GregtechItemList.Controller_Sparge_Tower.set( - new GregtechMetaTileEntity_SpargeTower( - Controller_Sparge_Tower.ID, - "sparge.controller.single", - "Sparge Tower Controller").getStackForm(1L)); + new MTESpargeTower(Controller_Sparge_Tower.ID, "sparge.controller.single", "Sparge Tower Controller") + .getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechLargeTurbinesAndHeatExchanger.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechLargeTurbinesAndHeatExchanger.java index a367ac009c..580be58352 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechLargeTurbinesAndHeatExchanger.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechLargeTurbinesAndHeatExchanger.java @@ -10,13 +10,13 @@ import static gregtech.api.enums.MetaTileEntityIDs.XL_HeatExchanger; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Turbine; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.GregtechMetaTileEntity_Adv_HeatExchanger; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.GT_MTE_LargeTurbine_Gas; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.GT_MTE_LargeTurbine_Plasma; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.GT_MTE_LargeTurbine_SCSteam; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.GT_MTE_LargeTurbine_SHSteam; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.GT_MTE_LargeTurbine_Steam; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchTurbine; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.advanced.MTEAdvHeatExchanger; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.MTELargeTurbineGas; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.MTELargeTurbinePlasma; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.MTELargeTurbineSCSteam; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.MTELargeTurbineSHSteam; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.turbines.MTELargeTurbineSteam; public class GregtechLargeTurbinesAndHeatExchanger { @@ -27,35 +27,30 @@ public class GregtechLargeTurbinesAndHeatExchanger { private static void run1() { GregtechItemList.Large_Steam_Turbine.set( - new GT_MTE_LargeTurbine_Steam( - Large_Steam_Turbine.ID, - "multimachine.largerturbine", - "XL Turbo Steam Turbine").getStackForm(1L)); + new MTELargeTurbineSteam(Large_Steam_Turbine.ID, "multimachine.largerturbine", "XL Turbo Steam Turbine") + .getStackForm(1L)); GregtechItemList.Large_HPSteam_Turbine.set( - new GT_MTE_LargeTurbine_SHSteam( + new MTELargeTurbineSHSteam( Large_HPSteam_Turbine.ID, "multimachine.largerhpturbine", "XL Turbo HP Steam Turbine").getStackForm(1L)); GregtechItemList.Large_Gas_Turbine.set( - new GT_MTE_LargeTurbine_Gas(Large_Gas_Turbine.ID, "multimachine.largergasturbine", "XL Turbo Gas Turbine") + new MTELargeTurbineGas(Large_Gas_Turbine.ID, "multimachine.largergasturbine", "XL Turbo Gas Turbine") .getStackForm(1L)); GregtechItemList.Large_Plasma_Turbine.set( - new GT_MTE_LargeTurbine_Plasma( + new MTELargeTurbinePlasma( Large_Plasma_Turbine.ID, "multimachine.largerplasmaturbine", "XL Turbo Plasma Turbine").getStackForm(1L)); GregtechItemList.Large_SCSteam_Turbine.set( - new GT_MTE_LargeTurbine_SCSteam( + new MTELargeTurbineSCSteam( Large_SCSteam_Turbine.ID, "multimachine.largerscturbine", "XL Turbo SC Steam Turbine").getStackForm(1L)); - GregtechItemList.Hatch_Turbine_Rotor.set( - new GT_MetaTileEntity_Hatch_Turbine(Hatch_Turbine_Rotor.ID, "hatch.turbine", "Rotor Assembly", 8) - .getStackForm(1L)); + GregtechItemList.Hatch_Turbine_Rotor + .set(new MTEHatchTurbine(Hatch_Turbine_Rotor.ID, "hatch.turbine", "Rotor Assembly", 8).getStackForm(1L)); GregtechItemList.XL_HeatExchanger.set( - new GregtechMetaTileEntity_Adv_HeatExchanger( - XL_HeatExchanger.ID, - "multimachine.reallybigheatexchanger", - "Whakawhiti Wera XL").getStackForm(1L)); + new MTEAdvHeatExchanger(XL_HeatExchanger.ID, "multimachine.reallybigheatexchanger", "Whakawhiti Wera XL") + .getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechMolecularTransformer.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechMolecularTransformer.java index f7014c4cbb..e09d056ceb 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechMolecularTransformer.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechMolecularTransformer.java @@ -4,7 +4,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.Controller_MolecularTransform import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_IndustrialMolecularTransformer; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTEIndustrialMolecularTransformer; public class GregtechMolecularTransformer { @@ -15,7 +15,7 @@ public class GregtechMolecularTransformer { private static void run1() { GregtechItemList.Controller_MolecularTransformer.set( - new GregtechMetaTileEntity_IndustrialMolecularTransformer( + new MTEIndustrialMolecularTransformer( Controller_MolecularTransformer.ID, "moleculartransformer.controller.tier.single", "Molecular Transformer").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechNuclearSaltProcessingPlant.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechNuclearSaltProcessingPlant.java index c4aee9bd19..2121dde7a9 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechNuclearSaltProcessingPlant.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechNuclearSaltProcessingPlant.java @@ -3,18 +3,18 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Nuclear_Salt_Processing_Plant; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.GregtechMetaTileEntity_NuclearSaltProcessingPlant; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.MTENuclearSaltProcessingPlant; public class GregtechNuclearSaltProcessingPlant { public static void run() { Logger.INFO("Gregtech5u Content | Registering Nuclear Salt Processing Plant Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_NuclearSaltProcessingPlant) { + if (GTPPCore.ConfigSwitches.enableMultiblock_NuclearSaltProcessingPlant) { // Nuclear Salt Processing Plant Multiblock GregtechItemList.Nuclear_Salt_Processing_Plant.set( - new GregtechMetaTileEntity_NuclearSaltProcessingPlant( + new MTENuclearSaltProcessingPlant( Nuclear_Salt_Processing_Plant.ID, "nuclearsaltprocessingplant.controller.tier.single", "Nuclear Salt Processing Plant").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechPollutionDevices.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechPollutionDevices.java index 5f902c05d9..d554a6dc8e 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechPollutionDevices.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechPollutionDevices.java @@ -13,12 +13,12 @@ import static gregtech.api.enums.MetaTileEntityIDs.Pollution_Creator; import static gregtech.api.enums.MetaTileEntityIDs.Pollution_Detector; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.minecraft.gregtech.PollutionUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaAtmosphericReconditioner; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaPollutionCreator; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaPollutionDetector; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.MTEAtmosphericReconditioner; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.MTEPollutionCreator; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.MTEPollutionDetector; public class GregtechPollutionDevices { @@ -30,10 +30,10 @@ public class GregtechPollutionDevices { } private static void run1() { - if (CORE.ConfigSwitches.enableMachine_Pollution) { + if (GTPPCore.ConfigSwitches.enableMachine_Pollution) { // 759 GregtechItemList.Pollution_Detector.set( - new GregtechMetaPollutionDetector( + new MTEPollutionDetector( Pollution_Detector.ID, "pollutiondetector.01.tier.single", "Pollution Detection Device", @@ -41,7 +41,7 @@ public class GregtechPollutionDevices { "Tells you if you're living in Gwalior yet.", 0).getStackForm(1L)); GregtechItemList.Pollution_Creator.set( - new GregtechMetaPollutionCreator( + new MTEPollutionCreator( Pollution_Creator.ID, "pollutioncreator.01.tier.single", "Smog Device", @@ -50,55 +50,55 @@ public class GregtechPollutionDevices { 0).getStackForm(1L)); GregtechItemList.Pollution_Cleaner_LV.set( - new GregtechMetaAtmosphericReconditioner( + new MTEAtmosphericReconditioner( Pollution_Cleaner_LV.ID, "pollutioncleaner.02.tier.single", "Upgraded Pollution Scrubber", 1).getStackForm(1L)); GregtechItemList.Pollution_Cleaner_MV.set( - new GregtechMetaAtmosphericReconditioner( + new MTEAtmosphericReconditioner( Pollution_Cleaner_MV.ID, "pollutioncleaner.03.tier.single", "Advanced Pollution Scrubber", 2).getStackForm(1L)); GregtechItemList.Pollution_Cleaner_HV.set( - new GregtechMetaAtmosphericReconditioner( + new MTEAtmosphericReconditioner( Pollution_Cleaner_HV.ID, "pollutioncleaner.04.tier.single", "Precision Pollution Scrubber", 3).getStackForm(1L)); GregtechItemList.Pollution_Cleaner_EV.set( - new GregtechMetaAtmosphericReconditioner( + new MTEAtmosphericReconditioner( Pollution_Cleaner_EV.ID, "pollutioncleaner.05.tier.single", "Air Recycler", 4).getStackForm(1L)); GregtechItemList.Pollution_Cleaner_IV.set( - new GregtechMetaAtmosphericReconditioner( + new MTEAtmosphericReconditioner( Pollution_Cleaner_IV.ID, "pollutioncleaner.06.tier.single", "Upgraded Air Recycler", 5).getStackForm(1L)); GregtechItemList.Pollution_Cleaner_LuV.set( - new GregtechMetaAtmosphericReconditioner( + new MTEAtmosphericReconditioner( Pollution_Cleaner_LuV.ID, "pollutioncleaner.07.tier.single", "Advanced Air Recycler", 6).getStackForm(1L)); GregtechItemList.Pollution_Cleaner_ZPM.set( - new GregtechMetaAtmosphericReconditioner( + new MTEAtmosphericReconditioner( Pollution_Cleaner_ZPM.ID, "pollutioncleaner.08.tier.single", "Precision Air Recycler", 7).getStackForm(1L)); GregtechItemList.Pollution_Cleaner_UV.set( - new GregtechMetaAtmosphericReconditioner( + new MTEAtmosphericReconditioner( Pollution_Cleaner_UV.ID, "pollutioncleaner.09.tier.single", "Atmospheric Cleaner", 8).getStackForm(1L)); GregtechItemList.Pollution_Cleaner_MAX.set( - new GregtechMetaAtmosphericReconditioner( + new MTEAtmosphericReconditioner( Pollution_Cleaner_MAX.ID, "pollutioncleaner.10.tier.single", "Biosphere Cleanser", diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechPowerSubStation.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechPowerSubStation.java index ed02264afe..76bde9c81d 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechPowerSubStation.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechPowerSubStation.java @@ -7,20 +7,20 @@ import static gregtech.api.enums.MetaTileEntityIDs.Hatch_Output_Battery_MV; import static gregtech.api.enums.MetaTileEntityIDs.PowerSubStation; import gregtech.api.enums.ItemList; -import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GTModHandler; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBattery; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBattery; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchInputBattery; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchOutputBattery; import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.storage.GregtechMetaTileEntity_PowerSubStationController; public class GregtechPowerSubStation { public static void run() { Logger.INFO("Gregtech5u Content | Registering Power Substation Node."); - if (CORE.ConfigSwitches.enableMultiblock_PowerSubstation) { + if (GTPPCore.ConfigSwitches.enableMultiblock_PowerSubstation) { run1(); } } @@ -34,44 +34,38 @@ public class GregtechPowerSubStation { "Power Station Control Node").getStackForm(1L)); int tID = 886; GregtechItemList.Hatch_Input_Battery_MV.set( - new GT_MetaTileEntity_Hatch_InputBattery( - Hatch_Input_Battery_MV.ID, - "hatch.input_battery.tier.00", - "Charging Bus (MV)", - 2).getStackForm(1L)); + new MTEHatchInputBattery(Hatch_Input_Battery_MV.ID, "hatch.input_battery.tier.00", "Charging Bus (MV)", 2) + .getStackForm(1L)); GregtechItemList.Hatch_Input_Battery_EV.set( - new GT_MetaTileEntity_Hatch_InputBattery( - Hatch_Input_Battery_EV.ID, - "hatch.input_battery.tier.01", - "Charging Bus (EV)", - 4).getStackForm(1L)); + new MTEHatchInputBattery(Hatch_Input_Battery_EV.ID, "hatch.input_battery.tier.01", "Charging Bus (EV)", 4) + .getStackForm(1L)); GregtechItemList.Hatch_Output_Battery_MV.set( - new GT_MetaTileEntity_Hatch_OutputBattery( + new MTEHatchOutputBattery( Hatch_Output_Battery_MV.ID, "hatch.output_battery.tier.00", "Discharging Bus (MV)", 2).getStackForm(1L)); GregtechItemList.Hatch_Output_Battery_EV.set( - new GT_MetaTileEntity_Hatch_OutputBattery( + new MTEHatchOutputBattery( Hatch_Output_Battery_EV.ID, "hatch.output_battery.tier.01", "Discharging Bus (EV)", 4).getStackForm(1L)); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Input_Battery_MV.get(1L), CI.bitsd, new Object[] { "C", "M", 'M', ItemList.Hull_MV, 'C', ItemList.Battery_Buffer_2by2_MV }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Input_Battery_EV.get(1L), CI.bitsd, new Object[] { "C", "M", 'M', ItemList.Hull_EV, 'C', ItemList.Battery_Buffer_4by4_EV }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Output_Battery_MV.get(1L), CI.bitsd, new Object[] { "M", "C", 'M', ItemList.Hull_MV, 'C', ItemList.Battery_Buffer_2by2_MV }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Hatch_Output_Battery_EV.get(1L), CI.bitsd, new Object[] { "M", "C", 'M', ItemList.Hull_EV, 'C', ItemList.Battery_Buffer_4by4_EV }); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechQuantumForceTransformer.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechQuantumForceTransformer.java index f923afc733..77385f6790 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechQuantumForceTransformer.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechQuantumForceTransformer.java @@ -3,17 +3,17 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.QuantumForceTransformer; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_QuantumForceTransformer; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTEQuantumForceTransformer; public class GregtechQuantumForceTransformer { public static void run() { Logger.INFO("Gregtech5u Content | Registering Quantum Force Transformer Multiblock."); - if (CORE.ConfigSwitches.enableMultiblock_QuantumForceTransformer) { + if (GTPPCore.ConfigSwitches.enableMultiblock_QuantumForceTransformer) { GregtechItemList.QuantumForceTransformer.set( - new GregtechMetaTileEntity_QuantumForceTransformer( + new MTEQuantumForceTransformer( QuantumForceTransformer.ID, "quantumforcetransformer.controller.tier.single", "Quantum Force Transformer").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRTG.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRTG.java index 60f7b4b0e0..dc11c31c55 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRTG.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRTG.java @@ -4,7 +4,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.RTG; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.generators.GregtechMetaTileEntity_RTG; +import gtPlusPlus.xmod.gregtech.common.tileentities.generators.MTERTGenerator; public class GregtechRTG { @@ -15,10 +15,7 @@ public class GregtechRTG { private static void run1() { GregtechItemList.RTG.set( - new GregtechMetaTileEntity_RTG( - RTG.ID, - "basicgenerator.rtg.tier.01", - "Radioisotope Thermoelectric Generator", - 3).getStackForm(1L)); + new MTERTGenerator(RTG.ID, "basicgenerator.rtg.tier.01", "Radioisotope Thermoelectric Generator", 3) + .getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneButtonPanel.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneButtonPanel.java index c999a7cd08..e7b313d851 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneButtonPanel.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneButtonPanel.java @@ -1,16 +1,16 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.GT_MetaTileEntity_RedstoneButtonPanel; +import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.MTERedstoneButtonPanel; public class GregtechRedstoneButtonPanel { public static void run() { Logger.INFO("Gregtech5u Content | Registering Redstone Button Panel."); - if (CORE.ConfigSwitches.enableMachine_RedstoneBlocks) { - GregtechItemList.RedstoneButtonPanel.set(new GT_MetaTileEntity_RedstoneButtonPanel(31800).getStackForm(1L)); + if (GTPPCore.ConfigSwitches.enableMachine_RedstoneBlocks) { + GregtechItemList.RedstoneButtonPanel.set(new MTERedstoneButtonPanel(31800).getStackForm(1L)); } } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneCircuitBlock.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneCircuitBlock.java index 106ee48fba..1d92f61c4a 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneCircuitBlock.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneCircuitBlock.java @@ -1,17 +1,16 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.GT_MetaTileEntity_RedstoneCircuitBlock; +import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.MTERedstoneCircuitBlock; public class GregtechRedstoneCircuitBlock { public static void run() { Logger.INFO("Gregtech5u Content | Registering Redstone Circuit Block."); - if (CORE.ConfigSwitches.enableMachine_RedstoneBlocks) { - GregtechItemList.RedstoneCircuitBlock - .set(new GT_MetaTileEntity_RedstoneCircuitBlock(31801).getStackForm(1L)); + if (GTPPCore.ConfigSwitches.enableMachine_RedstoneBlocks) { + GregtechItemList.RedstoneCircuitBlock.set(new MTERedstoneCircuitBlock(31801).getStackForm(1L)); } } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneLamp.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneLamp.java index 81c2a0469d..e6fcbb4cb2 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneLamp.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneLamp.java @@ -1,16 +1,16 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.GT_MetaTileEntity_RedstoneLamp; +import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.MTERedstoneLamp; public class GregtechRedstoneLamp { public static void run() { Logger.INFO("Gregtech5u Content | Registering Redstone Lamp."); - if (CORE.ConfigSwitches.enableMachine_RedstoneBlocks) { - GregtechItemList.RedstoneLamp.set(new GT_MetaTileEntity_RedstoneLamp(31803).getStackForm(1L)); + if (GTPPCore.ConfigSwitches.enableMachine_RedstoneBlocks) { + GregtechItemList.RedstoneLamp.set(new MTERedstoneLamp(31803).getStackForm(1L)); } } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneStrengthDisplay.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneStrengthDisplay.java index c8bee5c5c1..7c3cea0213 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneStrengthDisplay.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneStrengthDisplay.java @@ -1,17 +1,17 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.GT_MetaTileEntity_RedstoneStrengthDisplay; +import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.MTERedstoneStrengthDisplay; public class GregtechRedstoneStrengthDisplay { public static void run() { Logger.INFO("Gregtech5u Content | Registering Redstone Strength Display."); - if (CORE.ConfigSwitches.enableMachine_RedstoneBlocks) { + if (GTPPCore.ConfigSwitches.enableMachine_RedstoneBlocks) { GregtechItemList.RedstoneStrengthDisplay.set( - new GT_MetaTileEntity_RedstoneStrengthDisplay( + new MTERedstoneStrengthDisplay( 31804, "redstone.display", "Redstone Strength Display", diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneStrengthScale.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneStrengthScale.java index e08a489216..149b9647ed 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneStrengthScale.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRedstoneStrengthScale.java @@ -1,17 +1,16 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.GT_MetaTileEntity_RedstoneStrengthScale; +import gtPlusPlus.xmod.gregtech.common.tileentities.redstone.MTERedstoneStrengthScale; public class GregtechRedstoneStrengthScale { public static void run() { Logger.INFO("Gregtech5u Content | Registering Redstone Strength Scale."); - if (CORE.ConfigSwitches.enableMachine_RedstoneBlocks) { - GregtechItemList.RedstoneStrengthScale - .set(new GT_MetaTileEntity_RedstoneStrengthScale(31805).getStackForm(1L)); + if (GTPPCore.ConfigSwitches.enableMachine_RedstoneBlocks) { + GregtechItemList.RedstoneStrengthScale.set(new MTERedstoneStrengthScale(31805).getStackForm(1L)); } } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRocketFuelGenerator.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRocketFuelGenerator.java index 2e18957716..06328a7e30 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRocketFuelGenerator.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechRocketFuelGenerator.java @@ -10,90 +10,90 @@ import net.minecraft.item.ItemStack; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_ModHandler; +import gregtech.api.util.GTModHandler; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; -import gtPlusPlus.core.material.ALLOY; +import gtPlusPlus.core.lib.GTPPCore; +import gtPlusPlus.core.material.MaterialsAlloy; import gtPlusPlus.core.recipe.common.CI; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.generators.GregtechMetaTileEntityRocketFuelGenerator; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_LargeRocketEngine; +import gtPlusPlus.xmod.gregtech.common.tileentities.generators.MTERocketFuelGenerator; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTELargeRocketEngine; public class GregtechRocketFuelGenerator { public static void run() { Logger.INFO("Gregtech5u Content | Registering Industrial Rocket Engines."); - if (CORE.ConfigSwitches.enableMachine_RocketEngines) { + if (GTPPCore.ConfigSwitches.enableMachine_RocketEngines) { run1(); } } private static void run1() { GregtechItemList.Controller_RocketEngine.set( - new GregtechMetaTileEntity_LargeRocketEngine( + new MTELargeRocketEngine( Controller_RocketEngine.ID, "gtpp.multimachine.rocketengine", "Rocketdyne F-1A Engine").getStackForm(1L)); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Controller_RocketEngine.get(1L), CI.bitsd, new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Machine_Multi_DieselEngine.get(1), 'P', ItemList.Electric_Piston_IV, 'E', ItemList.Field_Generator_EV, 'C', OrePrefixes.circuit.get(Materials.LuV), 'W', OrePrefixes.cableGt08.get(Materials.Platinum), 'G', - ALLOY.MARAGING350.getGear(1) }); + MaterialsAlloy.MARAGING350.getGear(1) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Casing_RocketEngine.get(1L), CI.bitsd, new Object[] { "PhP", "RFR", "PWP", 'R', OrePrefixes.pipeMedium.get(Materials.TungstenSteel), 'F', - ItemList.Casing_RobustTungstenSteel, 'P', ALLOY.NITINOL_60.getGear(1), 'W', + ItemList.Casing_RobustTungstenSteel, 'P', MaterialsAlloy.NITINOL_60.getGear(1), 'W', OrePrefixes.stickLong.get(Materials.TungstenSteel) }); GregtechItemList.Rocket_Engine_EV.set( - new GregtechMetaTileEntityRocketFuelGenerator( + new MTERocketFuelGenerator( Rocket_Engine_EV.ID, "advancedgenerator.rocketFuel.tier.01", "Basic Rocket Engine", 4).getStackForm(1L)); GregtechItemList.Rocket_Engine_IV.set( - new GregtechMetaTileEntityRocketFuelGenerator( + new MTERocketFuelGenerator( Rocket_Engine_IV.ID, "advancedgenerator.rocketFuel.tier.02", "Advanced Rocket Engine", 5).getStackForm(1L)); GregtechItemList.Rocket_Engine_LuV.set( - new GregtechMetaTileEntityRocketFuelGenerator( + new MTERocketFuelGenerator( Rocket_Engine_LuV.ID, "advancedgenerator.rocketFuel.tier.03", "Turbo Rocket Engine", 6).getStackForm(1L)); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Rocket_Engine_EV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_EV, 'P', ItemList.Electric_Piston_EV, 'E', ItemList.Electric_Motor_EV, 'C', OrePrefixes.circuit.get(Materials.IV), 'W', - OrePrefixes.cableGt02.get(Materials.Aluminium), 'G', ALLOY.TANTALLOY_61.getGear(1) }); + OrePrefixes.cableGt02.get(Materials.Aluminium), 'G', MaterialsAlloy.TANTALLOY_61.getGear(1) }); - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Rocket_Engine_IV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_IV, 'P', ItemList.Electric_Piston_IV, 'E', ItemList.Electric_Motor_IV, 'C', OrePrefixes.circuit.get(Materials.LuV), 'W', - OrePrefixes.cableGt02.get(Materials.Platinum), 'G', ALLOY.STELLITE.getGear(1) }); + OrePrefixes.cableGt02.get(Materials.Platinum), 'G', MaterialsAlloy.STELLITE.getGear(1) }); final ItemStack INGREDIENT_1 = CI.electricPiston_LuV; final ItemStack INGREDIENT_2 = CI.electricMotor_LuV; - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( GregtechItemList.Rocket_Engine_LuV.get(1L), - GT_ModHandler.RecipeBits.DISMANTLEABLE | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED, + GTModHandler.RecipeBits.DISMANTLEABLE | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED, new Object[] { "PCP", "EME", "GWG", 'M', ItemList.Hull_LuV, 'P', INGREDIENT_1, 'E', INGREDIENT_2, 'C', OrePrefixes.circuit.get(Materials.ZPM), 'W', OrePrefixes.cableGt02.get(Materials.Tungsten), 'G', - ALLOY.ZERON_100.getGear(1) }); + MaterialsAlloy.ZERON_100.getGear(1) }); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSemiFluidgenerators.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSemiFluidgenerators.java index 6e41bc67f2..adc7517d78 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSemiFluidgenerators.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSemiFluidgenerators.java @@ -8,44 +8,44 @@ import static gregtech.api.enums.MetaTileEntityIDs.Generator_SemiFluid_LV; import static gregtech.api.enums.MetaTileEntityIDs.Generator_SemiFluid_MV; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.generators.GT_MetaTileEntity_SemiFluidGenerator; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_LargeSemifluidGenerator; +import gtPlusPlus.xmod.gregtech.common.tileentities.generators.MTESemiFluidGenerator; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTELargeSemifluidGenerator; public class GregtechSemiFluidgenerators { public static void run() { GregtechItemList.Generator_SemiFluid_LV.set( - new GT_MetaTileEntity_SemiFluidGenerator( + new MTESemiFluidGenerator( Generator_SemiFluid_LV.ID, "basicgenerator.semifluid.tier.01", "Basic Semi-Fluid Generator", 1).getStackForm(1L)); GregtechItemList.Generator_SemiFluid_MV.set( - new GT_MetaTileEntity_SemiFluidGenerator( + new MTESemiFluidGenerator( Generator_SemiFluid_MV.ID, "basicgenerator.semifluid.tier.02", "Advanced Semi-Fluid Generator", 2).getStackForm(1L)); GregtechItemList.Generator_SemiFluid_HV.set( - new GT_MetaTileEntity_SemiFluidGenerator( + new MTESemiFluidGenerator( Generator_SemiFluid_HV.ID, "basicgenerator.semifluid.tier.03", "Turbo Semi-Fluid Generator", 3).getStackForm(1L)); GregtechItemList.Generator_SemiFluid_EV.set( - new GT_MetaTileEntity_SemiFluidGenerator( + new MTESemiFluidGenerator( Generator_SemiFluid_EV.ID, "basicgenerator.semifluid.tier.04", "Turbo Semi-Fluid Generator II", 4).getStackForm(1L)); GregtechItemList.Generator_SemiFluid_IV.set( - new GT_MetaTileEntity_SemiFluidGenerator( + new MTESemiFluidGenerator( Generator_SemiFluid_IV.ID, "basicgenerator.semifluid.tier.05", "Turbo Semi-Fluid Generator III", 5).getStackForm(1L)); GregtechItemList.Controller_LargeSemifluidGenerator.set( - new GregtechMetaTileEntity_LargeSemifluidGenerator( + new MTELargeSemifluidGenerator( Controller_LargeSemifluidGenerator.ID, "gtpp.multimachine.semifluidgenerator", "Large Semifluid Burner").getStackForm(1L)); diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSimpleWasher.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSimpleWasher.java index d0f9cdd6f4..4c6de56d94 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSimpleWasher.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSimpleWasher.java @@ -9,32 +9,32 @@ import static gregtech.api.enums.MetaTileEntityIDs.SimpleDustWasher_MV; import static gregtech.api.enums.MetaTileEntityIDs.SimpleDustWasher_ULV; import static gregtech.api.enums.MetaTileEntityIDs.SimpleDustWasher_UV; import static gregtech.api.enums.MetaTileEntityIDs.SimpleDustWasher_ZPM; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.simpleWasherRecipes; import java.util.List; import net.minecraft.item.ItemStack; -import com.github.bartimaeusnek.bartworks.system.material.Werkstoff; import com.google.common.collect.ImmutableList; -import gregtech.api.enums.GT_Values; +import bartworks.system.material.Werkstoff; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.SoundResource; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects; -import gregtech.api.util.GT_OreDictUnificator; +import gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe; +import gregtech.api.metatileentity.implementations.MTEBasicMachineWithRecipe.SpecialEffects; +import gregtech.api.util.GTOreDictUnificator; import gtPlusPlus.api.objects.data.Quad; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; public class GregtechSimpleWasher { public static void run() { - if (CORE.ConfigSwitches.enableMachine_SimpleWasher) { + if (GTPPCore.ConfigSwitches.enableMachine_SimpleWasher) { generateDirtyDustRecipes(); generateDirtyCrushedRecipes(); // Register the Simple Washer Entity. @@ -85,13 +85,13 @@ public class GregtechSimpleWasher { "Simple Washer VIII")); GregtechItemList.SimpleDustWasher_ULV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( SimpleDustWasher_ULV.ID, "simplewasher.01.tier.01", "Deprecated ULV Simple Washer", 0, new String[] { "It's like an automatic Cauldron for washing dusts.", - "§cDEPRECATED: No recipe.§r Make a Simple Washer I.", CORE.GT_Tooltip.get() }, + "§cDEPRECATED: No recipe.§r Make a Simple Washer I.", GTPPCore.GT_Tooltip.get() }, simpleWasherRecipes, 1, 1, @@ -107,13 +107,13 @@ public class GregtechSimpleWasher { int tier = i + 1; washer.getKey() .set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( + new MTEBasicMachineWithRecipe( washer.getValue_1(), washer.getValue_2(), washer.getValue_3(), tier, new String[] { "It's like an automatic Cauldron for washing dusts.", - CORE.GT_Tooltip.get() }, + GTPPCore.GT_Tooltip.get() }, simpleWasherRecipes, 1, 1, @@ -140,9 +140,9 @@ public class GregtechSimpleWasher { continue; } - dustClean = GT_OreDictUnificator.get(OrePrefixes.dust, v, 1L); - dustDirty = GT_OreDictUnificator.get(OrePrefixes.dustImpure, v, 1L); - dustPure = GT_OreDictUnificator.get(OrePrefixes.dustPure, v, 1L); + dustClean = GTOreDictUnificator.get(OrePrefixes.dust, v, 1L); + dustDirty = GTOreDictUnificator.get(OrePrefixes.dustImpure, v, 1L); + dustPure = GTOreDictUnificator.get(OrePrefixes.dustPure, v, 1L); addSimpleWashRecipe(dustDirty, dustClean); addSimpleWashRecipe(dustPure, dustClean); } @@ -166,8 +166,8 @@ public class GregtechSimpleWasher { ItemStack crushedClean; ItemStack crushedDirty; for (Materials v : Materials.values()) { - crushedClean = GT_OreDictUnificator.get(OrePrefixes.crushedPurified, v, 1L); - crushedDirty = GT_OreDictUnificator.get(OrePrefixes.crushed, v, 1L); + crushedClean = GTOreDictUnificator.get(OrePrefixes.crushedPurified, v, 1L); + crushedDirty = GTOreDictUnificator.get(OrePrefixes.crushed, v, 1L); addSimpleWashRecipe(crushedDirty, crushedClean); } @@ -183,7 +183,7 @@ public class GregtechSimpleWasher { private static void addSimpleWashRecipe(ItemStack aInput, ItemStack aOutput) { if (aInput != null && aOutput != null) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(aInput) .itemOutputs(aOutput) .fluidInputs(FluidUtils.getFluidStack("water", 100)) diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSolarTower.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSolarTower.java index 232f3d60e5..d9672bf812 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSolarTower.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSolarTower.java @@ -3,13 +3,13 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Industrial_Solar_Tower; import static gregtech.api.enums.MetaTileEntityIDs.Solar_Tower_Reflector; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.recipe.GTPPRecipeMaps; -import gtPlusPlus.core.material.MISC_MATERIALS; +import gtPlusPlus.core.material.MaterialMisc; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.GregtechMetaTileEntity_SolarTower; -import gtPlusPlus.xmod.gregtech.common.tileentities.misc.TileEntitySolarHeater; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.production.MTESolarTower; +import gtPlusPlus.xmod.gregtech.common.tileentities.misc.MTESolarHeater; public class GregtechSolarTower { @@ -21,12 +21,10 @@ public class GregtechSolarTower { private static void run1() { // Solar Tower GregtechItemList.Industrial_Solar_Tower.set( - new GregtechMetaTileEntity_SolarTower( - Industrial_Solar_Tower.ID, - "solartower.controller.tier.single", - "Solar Tower").getStackForm(1L)); + new MTESolarTower(Industrial_Solar_Tower.ID, "solartower.controller.tier.single", "Solar Tower") + .getStackForm(1L)); GregtechItemList.Solar_Tower_Reflector.set( - new TileEntitySolarHeater( + new MTESolarHeater( Solar_Tower_Reflector.ID, "solarreflector.simple.single", "Solar Reflector", @@ -35,9 +33,9 @@ public class GregtechSolarTower { 0).getStackForm(1L)); // NEI recipe - GT_Values.RA.stdBuilder() - .fluidInputs(MISC_MATERIALS.SOLAR_SALT_COLD.getFluidStack(1000)) - .fluidOutputs(MISC_MATERIALS.SOLAR_SALT_HOT.getFluidStack(1000)) + GTValues.RA.stdBuilder() + .fluidInputs(MaterialMisc.SOLAR_SALT_COLD.getFluidStack(1000)) + .fluidOutputs(MaterialMisc.SOLAR_SALT_HOT.getFluidStack(1000)) .duration(0) .eut(0) .noOptimize() diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java index f2ef67157a..3808b6683d 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSteamMultis.java @@ -11,14 +11,14 @@ import static gregtech.api.enums.MetaTileEntityIDs.Hatch_Output_Bus_Steam; 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_SteamCentrifuge; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamCompressor; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamForgeHammer; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamMacerator; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamMixer; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamWasher; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTEHatchSteamBusOutput; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MteHatchSteamBusInput; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.MTESteamCentrifuge; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.MTESteamCompressor; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.MTESteamForgeHammer; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.MTESteamMacerator; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.MTESteamMixer; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.MTESteamWasher; public class GregtechSteamMultis { @@ -27,44 +27,37 @@ public class GregtechSteamMultis { Logger.INFO("Gregtech5u Content | Registering Steam Multiblocks."); GregtechItemList.Controller_SteamMaceratorMulti.set( - new GregtechMetaTileEntity_SteamMacerator( + new MTESteamMacerator( Controller_SteamMaceratorMulti.ID, "gtpp.multimachine.steam.macerator", "Steam Grinder").getStackForm(1L)); GregtechItemList.Controller_SteamCompressorMulti.set( - new GregtechMetaTileEntity_SteamCompressor( + new MTESteamCompressor( Controller_SteamCompressorMulti.ID, "gtpp.multimachine.steam.compressor", "Steam Squasher").getStackForm(1L)); GregtechItemList.Controller_SteamCentrifugeMulti.set( - new GregtechMetaTileEntity_SteamCentrifuge( + new MTESteamCentrifuge( Controller_SteamCentrifugeMulti.ID, "gtpp.multimachine.steam.centrifuge", "Steam Centrifuge").getStackForm(1)); GregtechItemList.Controller_SteamWasherMulti.set( - new GregtechMetaTileEntity_SteamWasher( - Controller_SteamWasherMulti.ID, - "gtpp.multimachine.steam.washer", - "Steam Washer").getStackForm(1)); + new MTESteamWasher(Controller_SteamWasherMulti.ID, "gtpp.multimachine.steam.washer", "Steam Washer") + .getStackForm(1)); GregtechItemList.Controller_SteamForgeHammerMulti.set( - new GregtechMetaTileEntity_SteamForgeHammer( + new MTESteamForgeHammer( Controller_SteamForgeHammer.ID, "gtpp.multimachine.steam.forge.hammer", "Steam Forge Hammer").getStackForm(1)); GregtechItemList.Controller_SteamMixerMulti.set( - new GregtechMetaTileEntity_SteamMixer( - Controller_SteamMixerMulti.ID, - "gtpp.multimachine.steam.mixer", - "Steam Mixer").getStackForm(1)); + new MTESteamMixer(Controller_SteamMixerMulti.ID, "gtpp.multimachine.steam.mixer", "Steam Mixer") + .getStackForm(1)); GregtechItemList.Hatch_Input_Bus_Steam.set( - new GT_MetaTileEntity_Hatch_Steam_BusInput( - Hatch_Input_Bus_Steam.ID, - "hatch.input_bus.tier.steam", - "Input Bus (Steam)", - 0).getStackForm(1L)); + new MteHatchSteamBusInput(Hatch_Input_Bus_Steam.ID, "hatch.input_bus.tier.steam", "Input Bus (Steam)", 0) + .getStackForm(1L)); GregtechItemList.Hatch_Output_Bus_Steam.set( - new GT_MetaTileEntity_Hatch_Steam_BusOutput( + new MTEHatchSteamBusOutput( Hatch_Output_Bus_Steam.ID, "hatch.output_bus.tier.steam", "Output Bus (Steam)", diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSuperChests.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSuperChests.java index b9c92c4241..531eff4c1a 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSuperChests.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechSuperChests.java @@ -7,7 +7,7 @@ import static gregtech.api.enums.MetaTileEntityIDs.Super_Chest_LV; import static gregtech.api.enums.MetaTileEntityIDs.Super_Chest_MV; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.storage.GT_MetaTileEntity_TieredChest; +import gtPlusPlus.xmod.gregtech.common.tileentities.storage.MTETieredChest; public class GregtechSuperChests { @@ -15,35 +15,20 @@ public class GregtechSuperChests { String aSuffix = " [Disabled]"; GregtechItemList.Super_Chest_LV.set( - (new GT_MetaTileEntity_TieredChest( - Super_Chest_LV.ID, - "super.chest.gtpp.tier.01", - "Super Chest I" + aSuffix, - 1)).getStackForm(1L)); + (new MTETieredChest(Super_Chest_LV.ID, "super.chest.gtpp.tier.01", "Super Chest I" + aSuffix, 1)) + .getStackForm(1L)); GregtechItemList.Super_Chest_MV.set( - (new GT_MetaTileEntity_TieredChest( - Super_Chest_MV.ID, - "super.chest.gtpp.tier.02", - "Super Chest II" + aSuffix, - 2)).getStackForm(1L)); + (new MTETieredChest(Super_Chest_MV.ID, "super.chest.gtpp.tier.02", "Super Chest II" + aSuffix, 2)) + .getStackForm(1L)); GregtechItemList.Super_Chest_HV.set( - (new GT_MetaTileEntity_TieredChest( - Super_Chest_HV.ID, - "super.chest.gtpp.tier.03", - "Super Chest III" + aSuffix, - 3)).getStackForm(1L)); + (new MTETieredChest(Super_Chest_HV.ID, "super.chest.gtpp.tier.03", "Super Chest III" + aSuffix, 3)) + .getStackForm(1L)); GregtechItemList.Super_Chest_EV.set( - (new GT_MetaTileEntity_TieredChest( - Super_Chest_EV.ID, - "super.chest.gtpp.tier.04", - "Super Chest IV" + aSuffix, - 4)).getStackForm(1L)); + (new MTETieredChest(Super_Chest_EV.ID, "super.chest.gtpp.tier.04", "Super Chest IV" + aSuffix, 4)) + .getStackForm(1L)); GregtechItemList.Super_Chest_IV.set( - (new GT_MetaTileEntity_TieredChest( - Super_Chest_IV.ID, - "super.chest.gtpp.tier.05", - "Super Chest V" + aSuffix, - 5)).getStackForm(1L)); + (new MTETieredChest(Super_Chest_IV.ID, "super.chest.gtpp.tier.05", "Super Chest V" + aSuffix, 5)) + .getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechThaumcraftDevices.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechThaumcraftDevices.java index 4acd1ab060..b730da2dcc 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechThaumcraftDevices.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechThaumcraftDevices.java @@ -5,7 +5,7 @@ import static gregtech.api.enums.Mods.Thaumcraft; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaPollutionCreator; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.MTEPollutionCreator; public class GregtechThaumcraftDevices { @@ -19,7 +19,7 @@ public class GregtechThaumcraftDevices { private static void run1() { // 956-960 GregtechItemList.Thaumcraft_Researcher.set( - new GregtechMetaPollutionCreator( + new MTEPollutionCreator( Thaumcraft_Researcher.ID, "thaumcraft.gtpp.machine.01", "Arcane Researcher", diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechThreadedBuffers.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechThreadedBuffers.java index c1427a333f..4ef223c48e 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechThreadedBuffers.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechThreadedBuffers.java @@ -3,16 +3,13 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.Infinite_Item_Chest; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.storage.creative.GT_MetaTileEntity_InfiniteItemHolder; +import gtPlusPlus.xmod.gregtech.common.tileentities.storage.creative.MTEInfiniteItemHolder; public class GregtechThreadedBuffers { public static void run() { GregtechItemList.Infinite_Item_Chest.set( - (new GT_MetaTileEntity_InfiniteItemHolder( - Infinite_Item_Chest.ID, - "infinite.chest.tier.01", - "Infinite Item Chest", - 1)).getStackForm(1L)); + (new MTEInfiniteItemHolder(Infinite_Item_Chest.ID, "infinite.chest.tier.01", "Infinite Item Chest", 1)) + .getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTieredFluidTanks.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTieredFluidTanks.java index ea86481c46..77f169ef1c 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTieredFluidTanks.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTieredFluidTanks.java @@ -1,40 +1,34 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; -import static gregtech.api.enums.MetaTileEntityIDs.GT_FluidTank_HV; -import static gregtech.api.enums.MetaTileEntityIDs.GT_FluidTank_LV; -import static gregtech.api.enums.MetaTileEntityIDs.GT_FluidTank_MV; -import static gregtech.api.enums.MetaTileEntityIDs.GT_FluidTank_ULV; +import static gregtech.api.enums.MetaTileEntityIDs.GTFluidTank_HV; +import static gregtech.api.enums.MetaTileEntityIDs.GTFluidTank_LV; +import static gregtech.api.enums.MetaTileEntityIDs.GTFluidTank_MV; +import static gregtech.api.enums.MetaTileEntityIDs.GTFluidTank_ULV; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.storage.GT_MetaTileEntity_TieredTank; +import gtPlusPlus.xmod.gregtech.common.tileentities.storage.MTETieredTank; public class GregtechTieredFluidTanks { public static void run() { Logger.INFO("Gregtech5u Content | Registering Portable Fluid Tanks."); - if (CORE.ConfigSwitches.enableMachine_FluidTanks) { + if (GTPPCore.ConfigSwitches.enableMachine_FluidTanks) { run1(); } } private static void run1() { Logger.INFO("Only loading ULV-IV tier tanks for New Horizons Modpack."); - GregtechItemList.GT_FluidTank_ULV.set( - new GT_MetaTileEntity_TieredTank( - GT_FluidTank_ULV.ID, - "fluidtank.tier.00", - "Ultra Low Voltage Fluid Tank", - 0).getStackForm(1L)); - GregtechItemList.GT_FluidTank_LV.set( - new GT_MetaTileEntity_TieredTank(GT_FluidTank_LV.ID, "fluidtank.tier.01", "Low Voltage Fluid Tank", 1) - .getStackForm(1L)); - GregtechItemList.GT_FluidTank_MV.set( - new GT_MetaTileEntity_TieredTank(GT_FluidTank_MV.ID, "fluidtank.tier.02", "Medium Voltage Fluid Tank", 2) - .getStackForm(1L)); - GregtechItemList.GT_FluidTank_HV.set( - new GT_MetaTileEntity_TieredTank(GT_FluidTank_HV.ID, "fluidtank.tier.03", "High Voltage Fluid Tank", 3) + GregtechItemList.GTFluidTank_ULV.set( + new MTETieredTank(GTFluidTank_ULV.ID, "fluidtank.tier.00", "Ultra Low Voltage Fluid Tank", 0) .getStackForm(1L)); + GregtechItemList.GTFluidTank_LV.set( + new MTETieredTank(GTFluidTank_LV.ID, "fluidtank.tier.01", "Low Voltage Fluid Tank", 1).getStackForm(1L)); + GregtechItemList.GTFluidTank_MV.set( + new MTETieredTank(GTFluidTank_MV.ID, "fluidtank.tier.02", "Medium Voltage Fluid Tank", 2).getStackForm(1L)); + GregtechItemList.GTFluidTank_HV.set( + new MTETieredTank(GTFluidTank_HV.ID, "fluidtank.tier.03", "High Voltage Fluid Tank", 3).getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTreeFarmerTE.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTreeFarmerTE.java index 7de699fc22..b848ef1e61 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTreeFarmerTE.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechTreeFarmerTE.java @@ -3,22 +3,22 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import static gregtech.api.enums.MetaTileEntityIDs.TreeFarmer_Structural; import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.lib.CORE; +import gtPlusPlus.core.lib.GTPPCore; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.GregtechMetaTreeFarmerStructural; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.MTETreeFarmerStructural; public class GregtechTreeFarmerTE { public static void run() { Logger.INFO("Gregtech5u Content | Registering Tree Farmer Structural Block."); - if (CORE.ConfigSwitches.enableMultiblock_TreeFarmer) { + if (GTPPCore.ConfigSwitches.enableMultiblock_TreeFarmer) { run1(); } } private static void run1() { GregtechItemList.TreeFarmer_Structural.set( - new GregtechMetaTreeFarmerStructural(TreeFarmer_Structural.ID, "treefarmer.structural", "Farm Keeper", 0) + new MTETreeFarmerStructural(TreeFarmer_Structural.ID, "treefarmer.structural", "Farm Keeper", 0) .getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWaterPump.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWaterPump.java index 476e13bd15..9854921dd4 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWaterPump.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWaterPump.java @@ -1,14 +1,13 @@ package gtPlusPlus.xmod.gregtech.registration.gregtech; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.GregtechMetaTileEntity_SteamWaterPump; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.multi.processing.steam.MTESteamWaterPump; public class GregtechWaterPump { public static void run() { // Water Pump Multiblock - GregtechItemList.WaterPump.set( - new GregtechMetaTileEntity_SteamWaterPump(31085, "waterpump.controller.tier.single", "Water Pump") - .getStackForm(1L)); + GregtechItemList.WaterPump + .set(new MTESteamWaterPump(31085, "waterpump.controller.tier.single", "Water Pump").getStackForm(1L)); } } diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java index 3d615f97a0..c66d2b574a 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/registration/gregtech/GregtechWirelessChargers.java @@ -14,7 +14,7 @@ import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.util.Utils; import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; import gtPlusPlus.xmod.gregtech.common.helpers.ChargingHelper; -import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.GregtechMetaWirelessCharger; +import gtPlusPlus.xmod.gregtech.common.tileentities.machines.basic.MTEWirelessCharger; public class GregtechWirelessChargers { @@ -25,7 +25,7 @@ public class GregtechWirelessChargers { Utils.registerEvent(new ChargingHelper()); GregtechItemList.Charger_LV.set( - new GregtechMetaWirelessCharger( + new MTEWirelessCharger( Charger_LV.ID, "wificharger.01.tier.single", "Wireless Charger MK I", @@ -33,7 +33,7 @@ public class GregtechWirelessChargers { "Hopefully won't give you cancer.", 0).getStackForm(1L)); GregtechItemList.Charger_MV.set( - new GregtechMetaWirelessCharger( + new MTEWirelessCharger( Charger_MV.ID, "wificharger.02.tier.single", "Wireless Charger MK II", @@ -41,7 +41,7 @@ public class GregtechWirelessChargers { "Hopefully won't give you cancer.", 0).getStackForm(1L)); GregtechItemList.Charger_HV.set( - new GregtechMetaWirelessCharger( + new MTEWirelessCharger( Charger_HV.ID, "wificharger.03.tier.single", "Wireless Charger MK III", @@ -49,7 +49,7 @@ public class GregtechWirelessChargers { "Hopefully won't give you cancer.", 0).getStackForm(1L)); GregtechItemList.Charger_EV.set( - new GregtechMetaWirelessCharger( + new MTEWirelessCharger( Charger_EV.ID, "wificharger.04.tier.single", "Wireless Charger MK IV", @@ -57,7 +57,7 @@ public class GregtechWirelessChargers { "Hopefully won't give you cancer.", 0).getStackForm(1L)); GregtechItemList.Charger_IV.set( - new GregtechMetaWirelessCharger( + new MTEWirelessCharger( Charger_IV.ID, "wificharger.05.tier.single", "Wireless Charger MK V", @@ -65,7 +65,7 @@ public class GregtechWirelessChargers { "Hopefully won't give you cancer.", 0).getStackForm(1L)); GregtechItemList.Charger_LuV.set( - new GregtechMetaWirelessCharger( + new MTEWirelessCharger( Charger_LuV.ID, "wificharger.06.tier.single", "Wireless Charger MK VI", @@ -73,7 +73,7 @@ public class GregtechWirelessChargers { "Hopefully won't give you cancer.", 0).getStackForm(1L)); GregtechItemList.Charger_ZPM.set( - new GregtechMetaWirelessCharger( + new MTEWirelessCharger( Charger_ZPM.ID, "wificharger.07.tier.single", "Wireless Charger MK VII", @@ -81,7 +81,7 @@ public class GregtechWirelessChargers { "Hopefully won't give you cancer.", 0).getStackForm(1L)); GregtechItemList.Charger_UV.set( - new GregtechMetaWirelessCharger( + new MTEWirelessCharger( Charger_UV.ID, "wificharger.08.tier.single", "Wireless Charger MK VIII", @@ -89,7 +89,7 @@ public class GregtechWirelessChargers { "Hopefully won't give you cancer.", 0).getStackForm(1L)); GregtechItemList.Charger_UHV.set( - new GregtechMetaWirelessCharger( + new MTEWirelessCharger( Charger_UHV.ID, "wificharger.09.tier.single", "Wireless Charger MK IX", diff --git a/src/main/java/gtPlusPlus/xmod/ic2/HANDLER_IC2.java b/src/main/java/gtPlusPlus/xmod/ic2/HANDLER_IC2.java deleted file mode 100644 index 475d8d5feb..0000000000 --- a/src/main/java/gtPlusPlus/xmod/ic2/HANDLER_IC2.java +++ /dev/null @@ -1,15 +0,0 @@ -package gtPlusPlus.xmod.ic2; - -import gtPlusPlus.xmod.ic2.item.IC2_Items; -import gtPlusPlus.xmod.ic2.recipe.RECIPE_IC2; - -public class HANDLER_IC2 { - - public static void preInit() { - IC2_Items.register(); - } - - public static void postInit() { - RECIPE_IC2.initRecipes(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/ic2/HandlerIC2.java b/src/main/java/gtPlusPlus/xmod/ic2/HandlerIC2.java new file mode 100644 index 0000000000..ba3c1ae0de --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/ic2/HandlerIC2.java @@ -0,0 +1,15 @@ +package gtPlusPlus.xmod.ic2; + +import gtPlusPlus.xmod.ic2.item.IC2Items; +import gtPlusPlus.xmod.ic2.recipe.RecipeIC2; + +public class HandlerIC2 { + + public static void preInit() { + IC2Items.register(); + } + + public static void postInit() { + RecipeIC2.initRecipes(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/ic2/item/IC2Items.java b/src/main/java/gtPlusPlus/xmod/ic2/item/IC2Items.java new file mode 100644 index 0000000000..7b6dbe5908 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/ic2/item/IC2Items.java @@ -0,0 +1,77 @@ +package gtPlusPlus.xmod.ic2.item; + +import static gregtech.api.enums.Mods.EnderIO; + +import net.minecraft.item.ItemStack; + +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.item.base.CoreItem; +import gtPlusPlus.core.item.wearable.hazmat.ItemArmorHazmatEx; + +public class IC2Items { + + public static ItemStack rotor_Material_1; // Energetic Alloy + public static ItemStack rotor_Material_2; // TungstenSteel + public static ItemStack rotor_Material_3; // Vibrant Alloy + public static ItemStack rotor_Material_4; // Iridium + + public static ItemStack rotor_Blade_Material_1; + public static ItemStack rotor_Blade_Material_2; + public static ItemStack rotor_Blade_Material_3; + public static ItemStack rotor_Blade_Material_4; + + public static ItemStack shaft_Material_1; // Energetic Alloy + public static ItemStack shaft_Material_2; // TungstenSteel + public static ItemStack shaft_Material_3; // Vibrant Alloy + public static ItemStack shaft_Material_4; // Iridium + + private static final String[] mData1 = new String[] { "itemEnergeticRotorBlade", "itemMagnaliumRotorBlade" }; + private static final String[] mData2 = new String[] { "itemEnergeticShaft", "itemMagnaliumShaft" }; + private static final String[] mData3 = new String[] { "itemVibrantRotorBlade", "itemUltimetRotorBlade" }; + private static final String[] mData4 = new String[] { "itemVibrantShaft", "itemUltimetShaft" }; + + public static void register() { + + int aIndexEIO = (EnderIO.isModLoaded() ? 0 : 1); + + // Rotor Blades + rotor_Blade_Material_1 = new ItemStack( + new CoreItem(mData1[aIndexEIO], AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor")); + rotor_Blade_Material_2 = new ItemStack( + new CoreItem( + "itemTungstenSteelRotorBlade", + AddToCreativeTab.tabMachines, + 16, + "A part for an advanced Kinetic Rotor")); + rotor_Blade_Material_3 = new ItemStack( + new CoreItem(mData3[aIndexEIO], AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor")); + rotor_Blade_Material_4 = new ItemStack( + new CoreItem( + "itemIridiumRotorBlade", + AddToCreativeTab.tabMachines, + 16, + "A part for an advanced Kinetic Rotor")); + + // Rotor Shafts + shaft_Material_1 = new ItemStack( + new CoreItem(mData2[aIndexEIO], AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor")); + shaft_Material_2 = new ItemStack( + new CoreItem( + "itemTungstenSteelShaft", + AddToCreativeTab.tabMachines, + 16, + "A part for an advanced Kinetic Rotor")); + shaft_Material_3 = new ItemStack( + new CoreItem(mData4[aIndexEIO], AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor")); + shaft_Material_4 = new ItemStack( + new CoreItem("itemIridiumShaft", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor")); + + // Rotors + rotor_Material_1 = new ItemStack(new CustomKineticRotor(0)); + rotor_Material_2 = new ItemStack(new CustomKineticRotor(1)); + rotor_Material_3 = new ItemStack(new CustomKineticRotor(2)); + rotor_Material_4 = new ItemStack(new CustomKineticRotor(3)); + + ItemArmorHazmatEx.init(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/ic2/item/IC2_Items.java b/src/main/java/gtPlusPlus/xmod/ic2/item/IC2_Items.java deleted file mode 100644 index 3dacc657de..0000000000 --- a/src/main/java/gtPlusPlus/xmod/ic2/item/IC2_Items.java +++ /dev/null @@ -1,77 +0,0 @@ -package gtPlusPlus.xmod.ic2.item; - -import static gregtech.api.enums.Mods.EnderIO; - -import net.minecraft.item.ItemStack; - -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.item.base.CoreItem; -import gtPlusPlus.core.item.wearable.hazmat.ItemArmorHazmatEx; - -public class IC2_Items { - - public static ItemStack rotor_Material_1; // Energetic Alloy - public static ItemStack rotor_Material_2; // TungstenSteel - public static ItemStack rotor_Material_3; // Vibrant Alloy - public static ItemStack rotor_Material_4; // Iridium - - public static ItemStack rotor_Blade_Material_1; - public static ItemStack rotor_Blade_Material_2; - public static ItemStack rotor_Blade_Material_3; - public static ItemStack rotor_Blade_Material_4; - - public static ItemStack shaft_Material_1; // Energetic Alloy - public static ItemStack shaft_Material_2; // TungstenSteel - public static ItemStack shaft_Material_3; // Vibrant Alloy - public static ItemStack shaft_Material_4; // Iridium - - private static final String[] mData1 = new String[] { "itemEnergeticRotorBlade", "itemMagnaliumRotorBlade" }; - private static final String[] mData2 = new String[] { "itemEnergeticShaft", "itemMagnaliumShaft" }; - private static final String[] mData3 = new String[] { "itemVibrantRotorBlade", "itemUltimetRotorBlade" }; - private static final String[] mData4 = new String[] { "itemVibrantShaft", "itemUltimetShaft" }; - - public static void register() { - - int aIndexEIO = (EnderIO.isModLoaded() ? 0 : 1); - - // Rotor Blades - rotor_Blade_Material_1 = new ItemStack( - new CoreItem(mData1[aIndexEIO], AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor")); - rotor_Blade_Material_2 = new ItemStack( - new CoreItem( - "itemTungstenSteelRotorBlade", - AddToCreativeTab.tabMachines, - 16, - "A part for an advanced Kinetic Rotor")); - rotor_Blade_Material_3 = new ItemStack( - new CoreItem(mData3[aIndexEIO], AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor")); - rotor_Blade_Material_4 = new ItemStack( - new CoreItem( - "itemIridiumRotorBlade", - AddToCreativeTab.tabMachines, - 16, - "A part for an advanced Kinetic Rotor")); - - // Rotor Shafts - shaft_Material_1 = new ItemStack( - new CoreItem(mData2[aIndexEIO], AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor")); - shaft_Material_2 = new ItemStack( - new CoreItem( - "itemTungstenSteelShaft", - AddToCreativeTab.tabMachines, - 16, - "A part for an advanced Kinetic Rotor")); - shaft_Material_3 = new ItemStack( - new CoreItem(mData4[aIndexEIO], AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor")); - shaft_Material_4 = new ItemStack( - new CoreItem("itemIridiumShaft", AddToCreativeTab.tabMachines, 16, "A part for an advanced Kinetic Rotor")); - - // Rotors - rotor_Material_1 = new ItemStack(new CustomKineticRotor(0)); - rotor_Material_2 = new ItemStack(new CustomKineticRotor(1)); - rotor_Material_3 = new ItemStack(new CustomKineticRotor(2)); - rotor_Material_4 = new ItemStack(new CustomKineticRotor(3)); - - ItemArmorHazmatEx.init(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/ic2/recipe/RECIPE_IC2.java b/src/main/java/gtPlusPlus/xmod/ic2/recipe/RECIPE_IC2.java deleted file mode 100644 index dddcab86e6..0000000000 --- a/src/main/java/gtPlusPlus/xmod/ic2/recipe/RECIPE_IC2.java +++ /dev/null @@ -1,357 +0,0 @@ -package gtPlusPlus.xmod.ic2.recipe; - -import static gregtech.api.enums.Mods.EnderIO; -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.recipe.RecipeMaps.extruderRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gtPlusPlus.core.recipe.RECIPES_Tools.craftingToolHardHammer; -import static gtPlusPlus.core.recipe.RECIPES_Tools.craftingToolWrench; - -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.api.objects.Logger; -import gtPlusPlus.core.material.ALLOY; -import gtPlusPlus.core.material.Material; -import gtPlusPlus.core.recipe.common.CI; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.minecraft.MaterialUtils; -import gtPlusPlus.core.util.minecraft.RecipeUtils; -import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; -import gtPlusPlus.xmod.ic2.item.IC2_Items; -import ic2.core.Ic2Items; - -public class RECIPE_IC2 { - - public static String plate_T1 = "plateEnergeticAlloy"; - public static String plate_T2 = "plateTungstenSteel"; - public static String plate_T3 = "plateVibrantAlloy"; - public static String plate_T4 = "plateAlloyIridium"; - - public static ItemStack block_T1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.EnergeticAlloy, 1L); - public static ItemStack block_T2 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 1L); - public static ItemStack block_T3 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.VibrantAlloy, 1L); - public static ItemStack block_T4 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iridium, 1L); - - public static ItemStack shaft_block_T1 = GT_OreDictUnificator.get(OrePrefixes.block, Materials.EnergeticAlloy, 1L); - public static ItemStack shaft_block_T2 = GT_OreDictUnificator.get(OrePrefixes.block, Materials.TungstenSteel, 1L); - public static ItemStack shaft_block_T3 = GT_OreDictUnificator.get(OrePrefixes.block, Materials.VibrantAlloy, 1L); - public static ItemStack shaft_block_T4 = GT_OreDictUnificator.get(OrePrefixes.block, Materials.Iridium, 1L); - - public static String ingot_T1 = "ingotEnergeticAlloy"; - public static String ingot_T2 = "ingotTungstenSteel"; - public static String ingot_T3 = "ingotVibrantAlloy"; - public static String ingot_T4 = "ingotIridium"; - - public static String ring_T1 = "ringStainlessSteel"; - public static String ring_T2 = "ringTungstenSteel"; - public static String ring_T3 = "ringChrome"; - public static String ring_T4 = "ringOsmiridium"; - - private static ItemStack rotor_blade_T1 = ItemUtils.getSimpleStack(IC2_Items.rotor_Blade_Material_1.getItem()); - private static ItemStack rotor_blade_T2 = ItemUtils.getSimpleStack(IC2_Items.rotor_Blade_Material_2.getItem()); - private static ItemStack rotor_blade_T3 = ItemUtils.getSimpleStack(IC2_Items.rotor_Blade_Material_3.getItem()); - private static ItemStack rotor_blade_T4 = ItemUtils.getSimpleStack(IC2_Items.rotor_Blade_Material_4.getItem()); - - private static ItemStack shaft_T1 = ItemUtils.getSimpleStack(IC2_Items.shaft_Material_1.getItem()); - private static ItemStack shaft_T2 = ItemUtils.getSimpleStack(IC2_Items.shaft_Material_2.getItem()); - private static ItemStack shaft_T3 = ItemUtils.getSimpleStack(IC2_Items.shaft_Material_3.getItem()); - private static ItemStack shaft_T4 = ItemUtils.getSimpleStack(IC2_Items.shaft_Material_4.getItem()); - - private static ItemStack rotor_T1 = ItemUtils.getSimpleStack(IC2_Items.rotor_Material_1.getItem()); - private static ItemStack rotor_T2 = ItemUtils.getSimpleStack(IC2_Items.rotor_Material_2.getItem()); - private static ItemStack rotor_T3 = ItemUtils.getSimpleStack(IC2_Items.rotor_Material_3.getItem()); - private static ItemStack rotor_T4 = ItemUtils.getSimpleStack(IC2_Items.rotor_Material_4.getItem()); - - private static boolean checkForEnderIO() { - if (!EnderIO.isModLoaded()) { - plate_T1 = "plateMagnalium"; - plate_T2 = "plateTungstenSteel"; - plate_T3 = "plateUltimet"; - plate_T4 = "plateAlloyIridium"; - - block_T1 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Magnalium, 1L); - block_T2 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 1L); - block_T3 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Ultimet, 1L); - block_T4 = GT_OreDictUnificator.get(OrePrefixes.ingot, Materials.Iridium, 1L); - - ingot_T1 = "ingotMagnalium"; - ingot_T2 = "ingotTungstenSteel"; - ingot_T3 = "ingotUltimet"; - ingot_T4 = "ingotIridium"; - return true; - } - return false; - } - - public static void initRecipes() { - - checkForEnderIO(); - addAdvancedHazmat(); - - RecipeUtils.addShapedRecipe( - plate_T1, - plate_T1, - plate_T1, - plate_T1, - ring_T1, - plate_T1, - plate_T1, - plate_T1, - plate_T1, - rotor_blade_T1); - - RecipeUtils.addShapedRecipe( - plate_T2, - plate_T2, - plate_T2, - plate_T2, - ring_T2, - plate_T2, - plate_T2, - plate_T2, - plate_T2, - rotor_blade_T2); - - RecipeUtils.addShapedRecipe( - plate_T3, - plate_T3, - plate_T3, - plate_T3, - ring_T3, - plate_T3, - plate_T3, - plate_T3, - plate_T3, - rotor_blade_T3); - - RecipeUtils.addShapedRecipe( - plate_T4, - plate_T4, - plate_T4, - plate_T4, - ring_T4, - plate_T4, - plate_T4, - plate_T4, - plate_T4, - rotor_blade_T4); - - // Shaft Extruder Recipe - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Shape_Extruder_WindmillShaft.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "hXS", "XPX", "fXd", Character.valueOf('P'), ItemList.Shape_Extruder_Rod, - Character.valueOf('X'), OrePrefixes.plate.get(Materials.DarkSteel), Character.valueOf('S'), - OrePrefixes.screw.get(Materials.DarkSteel) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Shape_Extruder_WindmillShaft.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "hXS", "XPX", "fXd", Character.valueOf('P'), ItemList.Shape_Extruder_Rod, - Character.valueOf('X'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('S'), - OrePrefixes.screw.get(Materials.TungstenSteel) }); - GT_ModHandler.addCraftingRecipe( - GregtechItemList.Shape_Extruder_WindmillShaft.get(1L), - GT_ModHandler.RecipeBits.BUFFERED | GT_ModHandler.RecipeBits.NOT_REMOVABLE - | GT_ModHandler.RecipeBits.REVERSIBLE, - new Object[] { "hXS", "XPX", "fXd", Character.valueOf('P'), ItemList.Shape_Extruder_Rod, - Character.valueOf('X'), OrePrefixes.plate.get(Materials.Molybdenum), Character.valueOf('S'), - OrePrefixes.screw.get(Materials.Molybdenum) }); - Logger.INFO("Added recipe item for GT5 Extruder: Shaft Shape"); - - // Shaft Recipes - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(9L, block_T1), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) - .itemOutputs(shaft_T1) - .duration(2 * MINUTES + 8 * SECONDS) - .eut(250) - .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.copyAmount(1L, shaft_block_T1), - GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) - .itemOutputs(shaft_T1) - .duration(2 * MINUTES + 8 * SECONDS) - .eut(250) - .addTo(extruderRecipes); - Logger.INFO("Added recipe for GT5 Extruder: Windmill Shaft [Energetic]"); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(9L, block_T2), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) - .itemOutputs(shaft_T2) - .duration(4 * MINUTES + 16 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.copyAmount(1L, shaft_block_T2), - GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) - .itemOutputs(shaft_T2) - .duration(4 * MINUTES + 16 * SECONDS) - .eut(TierEU.RECIPE_HV) - .addTo(extruderRecipes); - - Logger.INFO("Added recipe for GT5 Extruder: Windmill Shaft [TungstenSteel]"); - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(9L, block_T3), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) - .itemOutputs(shaft_T3) - .duration(8 * MINUTES + 32 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.copyAmount(1L, shaft_block_T3), - GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) - .itemOutputs(shaft_T3) - .duration(8 * MINUTES + 32 * SECONDS) - .eut(TierEU.RECIPE_EV) - .addTo(extruderRecipes); - Logger.INFO("Added recipe for GT5 Extruder: Windmill Shaft [Vibrant]"); - - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.copyAmount(9L, block_T4), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) - .itemOutputs(shaft_T4) - .duration(17 * MINUTES + 4 * SECONDS) - .eut(4000) - .addTo(extruderRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - GT_Utility.copyAmount(1L, shaft_block_T4), - GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) - .itemOutputs(shaft_T4) - .duration(17 * MINUTES + 4 * SECONDS) - .eut(4000) - .addTo(extruderRecipes); - Logger.INFO("Added recipe for GT5 Extruder: Windmill Shaft [Iridium]"); - - 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.addShapedRecipe( - shaft_T2, - rotor_blade_T2, - craftingToolHardHammer, - rotor_blade_T2, - ring_T2, - rotor_blade_T2, - craftingToolWrench, - rotor_blade_T2, - shaft_T2, - rotor_T2); - - 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.addShapedRecipe( - shaft_T4, - rotor_blade_T4, - craftingToolHardHammer, - rotor_blade_T4, - ring_T4, - rotor_blade_T4, - craftingToolWrench, - rotor_blade_T4, - shaft_T4, - rotor_T4); - } - - private static void addAdvancedHazmat() { - - ItemStack[] aBasicHazmatPieces = new ItemStack[] { Ic2Items.hazmatHelmet.copy(), - Ic2Items.hazmatChestplate.copy(), Ic2Items.hazmatLeggings.copy(), Ic2Items.hazmatBoots.copy() }; - - Material aRubber = MaterialUtils.generateMaterialFromGtENUM(Materials.Rubber); - ItemStack aYellowWool = ItemUtils.getSimpleStack(Blocks.wool, 4, 1); - ItemStack aBlackWool = ItemUtils.getSimpleStack(Blocks.wool, 15, 1); - ItemStack aCoilIC2 = Ic2Items.coil; - ItemStack aPlateCobalt = CI.getTieredComponentOfMaterial(Materials.Cobalt, OrePrefixes.plate, 1); - ItemStack aGearSmallSteel = CI.getTieredComponentOfMaterial(Materials.Steel, OrePrefixes.gearGtSmall, 1); - ItemStack aGearSmallAluminium = CI - .getTieredComponentOfMaterial(Materials.Aluminium, OrePrefixes.gearGtSmall, 1); - ItemStack aGearPotin = ALLOY.TUMBAGA.getGear(1); - ItemStack aGearSiliconCarbide = ALLOY.SILICON_CARBIDE.getGear(1); - - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(2), - aBasicHazmatPieces[0], - ItemUtils.getSimpleStack(aYellowWool, 16), - ItemUtils.getSimpleStack(aPlateCobalt, 4), - ItemUtils.getSimpleStack(aCoilIC2, 8), - ItemUtils.getSimpleStack(aGearSmallAluminium, 4)) - .itemOutputs(GregtechItemList.Armour_Hazmat_Advanced_Helmet.get(1)) - .fluidInputs(aRubber.getFluidStack(144 * 4)) - .duration(30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(2), - aBasicHazmatPieces[1], - ItemUtils.getSimpleStack(aYellowWool, 64), - ItemUtils.getSimpleStack(aCoilIC2, 32), - ItemUtils.getSimpleStack(aPlateCobalt, 16), - ItemUtils.getSimpleStack(aGearSiliconCarbide, 8)) - .itemOutputs(GregtechItemList.Armour_Hazmat_Advanced_Chest.get(1)) - .fluidInputs(aRubber.getFluidStack(144 * 10)) - .duration(1 * MINUTES + 30 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(2), - aBasicHazmatPieces[2], - ItemUtils.getSimpleStack(aYellowWool, 32), - ItemUtils.getSimpleStack(aCoilIC2, 16), - ItemUtils.getSimpleStack(aPlateCobalt, 8), - ItemUtils.getSimpleStack(aGearSiliconCarbide, 4)) - .itemOutputs(GregtechItemList.Armour_Hazmat_Advanced_Legs.get(1)) - .fluidInputs(aRubber.getFluidStack(144 * 8)) - .duration(1 * MINUTES + 15 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() - .itemInputs( - CI.getNumberedAdvancedCircuit(2), - aBasicHazmatPieces[3], - ItemUtils.getSimpleStack(aBlackWool, 16), - ItemUtils.getSimpleStack(aCoilIC2, 6), - ItemUtils.getSimpleStack(aGearSmallSteel, 8), - ItemUtils.getSimpleStack(aGearPotin, 4)) - .itemOutputs(GregtechItemList.Armour_Hazmat_Advanced_Boots.get(1)) - .fluidInputs(aRubber.getFluidStack(144 * 6)) - .duration(45 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(assemblerRecipes); - - } -} diff --git a/src/main/java/gtPlusPlus/xmod/ic2/recipe/RecipeIC2.java b/src/main/java/gtPlusPlus/xmod/ic2/recipe/RecipeIC2.java new file mode 100644 index 0000000000..dc7a87d4dd --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/ic2/recipe/RecipeIC2.java @@ -0,0 +1,349 @@ +package gtPlusPlus.xmod.ic2.recipe; + +import static gregtech.api.enums.Mods.EnderIO; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.extruderRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gtPlusPlus.core.recipe.RecipesTools.craftingToolHardHammer; +import static gtPlusPlus.core.recipe.RecipesTools.craftingToolWrench; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.api.objects.Logger; +import gtPlusPlus.core.material.Material; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.recipe.common.CI; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.minecraft.MaterialUtils; +import gtPlusPlus.core.util.minecraft.RecipeUtils; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import gtPlusPlus.xmod.ic2.item.IC2Items; +import ic2.core.Ic2Items; + +public class RecipeIC2 { + + public static String plate_T1 = "plateEnergeticAlloy"; + public static String plate_T2 = "plateTungstenSteel"; + public static String plate_T3 = "plateVibrantAlloy"; + public static String plate_T4 = "plateAlloyIridium"; + + public static ItemStack block_T1 = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.EnergeticAlloy, 1L); + public static ItemStack block_T2 = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 1L); + public static ItemStack block_T3 = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.VibrantAlloy, 1L); + public static ItemStack block_T4 = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Iridium, 1L); + + public static ItemStack shaft_block_T1 = GTOreDictUnificator.get(OrePrefixes.block, Materials.EnergeticAlloy, 1L); + public static ItemStack shaft_block_T2 = GTOreDictUnificator.get(OrePrefixes.block, Materials.TungstenSteel, 1L); + public static ItemStack shaft_block_T3 = GTOreDictUnificator.get(OrePrefixes.block, Materials.VibrantAlloy, 1L); + public static ItemStack shaft_block_T4 = GTOreDictUnificator.get(OrePrefixes.block, Materials.Iridium, 1L); + + public static String ingot_T1 = "ingotEnergeticAlloy"; + public static String ingot_T2 = "ingotTungstenSteel"; + public static String ingot_T3 = "ingotVibrantAlloy"; + public static String ingot_T4 = "ingotIridium"; + + public static String ring_T1 = "ringStainlessSteel"; + public static String ring_T2 = "ringTungstenSteel"; + public static String ring_T3 = "ringChrome"; + public static String ring_T4 = "ringOsmiridium"; + + private static ItemStack rotor_blade_T1 = ItemUtils.getSimpleStack(IC2Items.rotor_Blade_Material_1.getItem()); + private static ItemStack rotor_blade_T2 = ItemUtils.getSimpleStack(IC2Items.rotor_Blade_Material_2.getItem()); + private static ItemStack rotor_blade_T3 = ItemUtils.getSimpleStack(IC2Items.rotor_Blade_Material_3.getItem()); + private static ItemStack rotor_blade_T4 = ItemUtils.getSimpleStack(IC2Items.rotor_Blade_Material_4.getItem()); + + private static ItemStack shaft_T1 = ItemUtils.getSimpleStack(IC2Items.shaft_Material_1.getItem()); + private static ItemStack shaft_T2 = ItemUtils.getSimpleStack(IC2Items.shaft_Material_2.getItem()); + private static ItemStack shaft_T3 = ItemUtils.getSimpleStack(IC2Items.shaft_Material_3.getItem()); + private static ItemStack shaft_T4 = ItemUtils.getSimpleStack(IC2Items.shaft_Material_4.getItem()); + + private static ItemStack rotor_T1 = ItemUtils.getSimpleStack(IC2Items.rotor_Material_1.getItem()); + private static ItemStack rotor_T2 = ItemUtils.getSimpleStack(IC2Items.rotor_Material_2.getItem()); + private static ItemStack rotor_T3 = ItemUtils.getSimpleStack(IC2Items.rotor_Material_3.getItem()); + private static ItemStack rotor_T4 = ItemUtils.getSimpleStack(IC2Items.rotor_Material_4.getItem()); + + private static boolean checkForEnderIO() { + if (!EnderIO.isModLoaded()) { + plate_T1 = "plateMagnalium"; + plate_T2 = "plateTungstenSteel"; + plate_T3 = "plateUltimet"; + plate_T4 = "plateAlloyIridium"; + + block_T1 = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Magnalium, 1L); + block_T2 = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.TungstenSteel, 1L); + block_T3 = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Ultimet, 1L); + block_T4 = GTOreDictUnificator.get(OrePrefixes.ingot, Materials.Iridium, 1L); + + ingot_T1 = "ingotMagnalium"; + ingot_T2 = "ingotTungstenSteel"; + ingot_T3 = "ingotUltimet"; + ingot_T4 = "ingotIridium"; + return true; + } + return false; + } + + public static void initRecipes() { + + checkForEnderIO(); + addAdvancedHazmat(); + + RecipeUtils.addShapedRecipe( + plate_T1, + plate_T1, + plate_T1, + plate_T1, + ring_T1, + plate_T1, + plate_T1, + plate_T1, + plate_T1, + rotor_blade_T1); + + RecipeUtils.addShapedRecipe( + plate_T2, + plate_T2, + plate_T2, + plate_T2, + ring_T2, + plate_T2, + plate_T2, + plate_T2, + plate_T2, + rotor_blade_T2); + + RecipeUtils.addShapedRecipe( + plate_T3, + plate_T3, + plate_T3, + plate_T3, + ring_T3, + plate_T3, + plate_T3, + plate_T3, + plate_T3, + rotor_blade_T3); + + RecipeUtils.addShapedRecipe( + plate_T4, + plate_T4, + plate_T4, + plate_T4, + ring_T4, + plate_T4, + plate_T4, + plate_T4, + plate_T4, + rotor_blade_T4); + + // Shaft Extruder Recipe + GTModHandler.addCraftingRecipe( + GregtechItemList.Shape_Extruder_WindmillShaft.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "hXS", "XPX", "fXd", Character.valueOf('P'), ItemList.Shape_Extruder_Rod, + Character.valueOf('X'), OrePrefixes.plate.get(Materials.DarkSteel), Character.valueOf('S'), + OrePrefixes.screw.get(Materials.DarkSteel) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Shape_Extruder_WindmillShaft.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "hXS", "XPX", "fXd", Character.valueOf('P'), ItemList.Shape_Extruder_Rod, + Character.valueOf('X'), OrePrefixes.plate.get(Materials.TungstenSteel), Character.valueOf('S'), + OrePrefixes.screw.get(Materials.TungstenSteel) }); + GTModHandler.addCraftingRecipe( + GregtechItemList.Shape_Extruder_WindmillShaft.get(1L), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE + | GTModHandler.RecipeBits.REVERSIBLE, + new Object[] { "hXS", "XPX", "fXd", Character.valueOf('P'), ItemList.Shape_Extruder_Rod, + Character.valueOf('X'), OrePrefixes.plate.get(Materials.Molybdenum), Character.valueOf('S'), + OrePrefixes.screw.get(Materials.Molybdenum) }); + Logger.INFO("Added recipe item for GT5 Extruder: Shaft Shape"); + + // Shaft Recipes + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(9L, block_T1), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) + .itemOutputs(shaft_T1) + .duration(2 * MINUTES + 8 * SECONDS) + .eut(250) + .addTo(extruderRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1L, shaft_block_T1), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) + .itemOutputs(shaft_T1) + .duration(2 * MINUTES + 8 * SECONDS) + .eut(250) + .addTo(extruderRecipes); + Logger.INFO("Added recipe for GT5 Extruder: Windmill Shaft [Energetic]"); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(9L, block_T2), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) + .itemOutputs(shaft_T2) + .duration(4 * MINUTES + 16 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(extruderRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1L, shaft_block_T2), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) + .itemOutputs(shaft_T2) + .duration(4 * MINUTES + 16 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(extruderRecipes); + + Logger.INFO("Added recipe for GT5 Extruder: Windmill Shaft [TungstenSteel]"); + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(9L, block_T3), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) + .itemOutputs(shaft_T3) + .duration(8 * MINUTES + 32 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(extruderRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1L, shaft_block_T3), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) + .itemOutputs(shaft_T3) + .duration(8 * MINUTES + 32 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(extruderRecipes); + Logger.INFO("Added recipe for GT5 Extruder: Windmill Shaft [Vibrant]"); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(9L, block_T4), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) + .itemOutputs(shaft_T4) + .duration(17 * MINUTES + 4 * SECONDS) + .eut(4000) + .addTo(extruderRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(1L, shaft_block_T4), GregtechItemList.Shape_Extruder_WindmillShaft.get(0L)) + .itemOutputs(shaft_T4) + .duration(17 * MINUTES + 4 * SECONDS) + .eut(4000) + .addTo(extruderRecipes); + Logger.INFO("Added recipe for GT5 Extruder: Windmill Shaft [Iridium]"); + + 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.addShapedRecipe( + shaft_T2, + rotor_blade_T2, + craftingToolHardHammer, + rotor_blade_T2, + ring_T2, + rotor_blade_T2, + craftingToolWrench, + rotor_blade_T2, + shaft_T2, + rotor_T2); + + 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.addShapedRecipe( + shaft_T4, + rotor_blade_T4, + craftingToolHardHammer, + rotor_blade_T4, + ring_T4, + rotor_blade_T4, + craftingToolWrench, + rotor_blade_T4, + shaft_T4, + rotor_T4); + } + + private static void addAdvancedHazmat() { + + ItemStack[] aBasicHazmatPieces = new ItemStack[] { Ic2Items.hazmatHelmet.copy(), + Ic2Items.hazmatChestplate.copy(), Ic2Items.hazmatLeggings.copy(), Ic2Items.hazmatBoots.copy() }; + + Material aRubber = MaterialUtils.generateMaterialFromGtENUM(Materials.Rubber); + ItemStack aYellowWool = ItemUtils.getSimpleStack(Blocks.wool, 4, 1); + ItemStack aBlackWool = ItemUtils.getSimpleStack(Blocks.wool, 15, 1); + ItemStack aCoilIC2 = Ic2Items.coil; + ItemStack aPlateCobalt = CI.getTieredComponentOfMaterial(Materials.Cobalt, OrePrefixes.plate, 1); + ItemStack aGearSmallSteel = CI.getTieredComponentOfMaterial(Materials.Steel, OrePrefixes.gearGtSmall, 1); + ItemStack aGearSmallAluminium = CI + .getTieredComponentOfMaterial(Materials.Aluminium, OrePrefixes.gearGtSmall, 1); + ItemStack aGearPotin = MaterialsAlloy.TUMBAGA.getGear(1); + ItemStack aGearSiliconCarbide = MaterialsAlloy.SILICON_CARBIDE.getGear(1); + + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(2), + aBasicHazmatPieces[0], + ItemUtils.getSimpleStack(aYellowWool, 16), + ItemUtils.getSimpleStack(aPlateCobalt, 4), + ItemUtils.getSimpleStack(aCoilIC2, 8), + ItemUtils.getSimpleStack(aGearSmallAluminium, 4)) + .itemOutputs(GregtechItemList.Armour_Hazmat_Advanced_Helmet.get(1)) + .fluidInputs(aRubber.getFluidStack(144 * 4)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(2), + aBasicHazmatPieces[1], + ItemUtils.getSimpleStack(aYellowWool, 64), + ItemUtils.getSimpleStack(aCoilIC2, 32), + ItemUtils.getSimpleStack(aPlateCobalt, 16), + ItemUtils.getSimpleStack(aGearSiliconCarbide, 8)) + .itemOutputs(GregtechItemList.Armour_Hazmat_Advanced_Chest.get(1)) + .fluidInputs(aRubber.getFluidStack(144 * 10)) + .duration(1 * MINUTES + 30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(2), + aBasicHazmatPieces[2], + ItemUtils.getSimpleStack(aYellowWool, 32), + ItemUtils.getSimpleStack(aCoilIC2, 16), + ItemUtils.getSimpleStack(aPlateCobalt, 8), + ItemUtils.getSimpleStack(aGearSiliconCarbide, 4)) + .itemOutputs(GregtechItemList.Armour_Hazmat_Advanced_Legs.get(1)) + .fluidInputs(aRubber.getFluidStack(144 * 8)) + .duration(1 * MINUTES + 15 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CI.getNumberedAdvancedCircuit(2), + aBasicHazmatPieces[3], + ItemUtils.getSimpleStack(aBlackWool, 16), + ItemUtils.getSimpleStack(aCoilIC2, 6), + ItemUtils.getSimpleStack(aGearSmallSteel, 8), + ItemUtils.getSimpleStack(aGearPotin, 4)) + .itemOutputs(GregtechItemList.Armour_Hazmat_Advanced_Boots.get(1)) + .fluidInputs(aRubber.getFluidStack(144 * 6)) + .duration(45 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + } +} diff --git a/src/main/java/gtPlusPlus/xmod/pamsharvest/fishtrap/FishTrapHandler.java b/src/main/java/gtPlusPlus/xmod/pamsharvest/fishtrap/FishTrapHandler.java index ee51f28eaa..79a2d61e86 100644 --- a/src/main/java/gtPlusPlus/xmod/pamsharvest/fishtrap/FishTrapHandler.java +++ b/src/main/java/gtPlusPlus/xmod/pamsharvest/fishtrap/FishTrapHandler.java @@ -3,10 +3,10 @@ package gtPlusPlus.xmod.pamsharvest.fishtrap; import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gtPlusPlus.core.util.minecraft.FluidUtils; import gtPlusPlus.core.util.minecraft.ItemUtils; @@ -23,7 +23,7 @@ public class FishTrapHandler { for (String fish : harvestcraftFish) { final String itemName = prefix + fish + suffix; if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken(itemName, 1) != null) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict(itemName, 1)) .itemOutputs( ItemUtils.getItemStackOfAmountFromOreDict("dustMeatRaw", 1), @@ -32,13 +32,13 @@ public class FishTrapHandler { .duration(20 * SECONDS) .eut(2) .addTo(maceratorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict(itemName, 1)) .fluidOutputs(FluidUtils.getFluidStack("methane", 48)) .duration(19 * SECONDS + 4 * TICKS) .eut(5) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict(itemName, 1)) .fluidOutputs(FluidUtils.getFluidStack("fishoil", 50)) .duration(16 * TICKS) @@ -47,7 +47,7 @@ public class FishTrapHandler { } } if (ItemUtils.getItemStackOfAmountFromOreDictNoBroken(greenheartFish, 1) != null) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict(greenheartFish, 1)) .itemOutputs( ItemUtils.getItemStackOfAmountFromOreDict("dustMeatRaw", 1), @@ -56,13 +56,13 @@ public class FishTrapHandler { .duration(20 * SECONDS) .eut(2) .addTo(maceratorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict(greenheartFish, 1)) .fluidOutputs(FluidUtils.getFluidStack("methane", 48)) .duration(19 * SECONDS + 4 * TICKS) .eut(5) .addTo(centrifugeRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(ItemUtils.getItemStackOfAmountFromOreDict(greenheartFish, 1)) .fluidOutputs(FluidUtils.getFluidStack("fishoil", 50)) .duration(16 * TICKS) diff --git a/src/main/java/gtPlusPlus/xmod/railcraft/HANDLER_Railcraft.java b/src/main/java/gtPlusPlus/xmod/railcraft/HANDLER_Railcraft.java deleted file mode 100644 index 7e920565e8..0000000000 --- a/src/main/java/gtPlusPlus/xmod/railcraft/HANDLER_Railcraft.java +++ /dev/null @@ -1,218 +0,0 @@ -package gtPlusPlus.xmod.railcraft; - -import static gregtech.api.enums.Mods.GTPlusPlus; -import static gregtech.api.enums.Mods.NewHorizonsCoreMod; -import static gregtech.api.enums.Mods.Railcraft; -import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; -import static gtPlusPlus.api.recipe.GTPPRecipeMaps.cokeOvenRecipes; -import static gtPlusPlus.core.creative.AddToCreativeTab.tabMisc; - -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gtPlusPlus.core.item.ModItems; -import gtPlusPlus.core.item.base.BaseItemBurnable; -import gtPlusPlus.core.util.minecraft.FluidUtils; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.xmod.railcraft.utils.RailcraftUtils; - -public class HANDLER_Railcraft { - - public static void preInit() { - // Register Custom Coal Coke - ModItems.itemCoalCoke = new BaseItemBurnable( - "itemCoalCoke", - "Coking Coal", - tabMisc, - 64, - 0, - "Used for metallurgy.", - "fuelCoke", - 3200, - 0).setTextureName(GTPlusPlus.ID + ":burnables/itemCoalCoke"); - - // Add in things that once existed in 1.5.2 - ModItems.itemCactusCharcoal = new BaseItemBurnable( - "itemCactusCharcoal", - "Cactus Charcoal", - tabMisc, - 64, - 0, - "Used for smelting.", - "fuelCactusCharcoal", - 400, - 0).setTextureName(GTPlusPlus.ID + ":burnables/itemCactusCharcoal"); - ModItems.itemSugarCharcoal = new BaseItemBurnable( - "itemSugarCharcoal", - "Sugar Charcoal", - tabMisc, - 64, - 0, - "Used for smelting.", - "fuelSugarCharcoal", - 400, - 0).setTextureName(GTPlusPlus.ID + ":burnables/itemSugarCharcoal"); - ModItems.itemCactusCoke = new BaseItemBurnable( - "itemCactusCoke", - "Cactus Coke", - tabMisc, - 64, - 0, - "Used for smelting.", - "fuelCactusCoke", - 800, - 0).setTextureName(GTPlusPlus.ID + ":burnables/itemCactusCoke"); - ModItems.itemSugarCoke = new BaseItemBurnable( - "itemSugarCoke", - "Sugar Coke", - tabMisc, - 64, - 0, - "Used for smelting.", - "fuelSugarCoke", - 800, - 0).setTextureName(GTPlusPlus.ID + ":burnables/itemSugarCoke"); - - ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(ModItems.itemCactusCharcoal), "itemCharcoalCactus"); - ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(ModItems.itemCactusCoke), "itemCokeCactus"); - ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(ModItems.itemSugarCharcoal), "itemCharcoalSugar"); - ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(ModItems.itemSugarCoke), "itemCokeSugar"); - } - - public static void postInit() { - generateCokeOvenRecipes(); - } - - private static void generateCokeOvenRecipes() { - ItemStack[] aInputs1 = new ItemStack[] { ItemUtils.getSimpleStack(Blocks.cactus), - ItemUtils.getSimpleStack(Items.reeds) }; - ItemStack[] aInputs2 = new ItemStack[] { ItemUtils.getSimpleStack(ModItems.itemCactusCharcoal), - ItemUtils.getSimpleStack(ModItems.itemSugarCharcoal) }; - ItemStack[] aOutputs = new ItemStack[] { ItemUtils.getSimpleStack(ModItems.itemCactusCoke), - ItemUtils.getSimpleStack(ModItems.itemSugarCoke) }; - for (int i = 0; i < aOutputs.length; i++) { - // Recipes for the Charcoals and Cokes, outputting either Creosote or Charcoal Byproducts depending on the - // fluid input - GT_Values.RA.stdBuilder() - .itemInputs(aInputs1[i], GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(aInputs2[i]) - .fluidOutputs(FluidUtils.getFluidStack("creosote", 100)) - .eut(16) - .duration(1 * SECONDS) - .addTo(cokeOvenRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(aInputs1[i], GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(aInputs2[i]) - .fluidInputs(FluidUtils.getFluidStack("nitrogen", 100)) - .fluidOutputs(FluidUtils.getFluidStack("charcoal_byproducts", 200)) - .eut(16) - .duration(10 * TICKS) - .addTo(cokeOvenRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(aInputs2[i], GT_Utility.getIntegratedCircuit(3)) - .itemOutputs(aOutputs[i]) - .fluidOutputs(FluidUtils.getFluidStack("creosote", 200)) - .eut(16) - .duration(2 * SECONDS) - .addTo(cokeOvenRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(aInputs2[i], GT_Utility.getIntegratedCircuit(4)) - .itemOutputs(aOutputs[i]) - .fluidInputs(FluidUtils.getFluidStack("nitrogen", 50)) - .fluidOutputs(FluidUtils.getFluidStack("charcoal_byproducts", 100)) - .eut(16) - .duration(1 * SECONDS) - .addTo(cokeOvenRecipes); - - // Generate Wood Tar and Wood Gas from these Cokes - GT_Values.RA.stdBuilder() - .itemInputs(aOutputs[i], GT_Utility.getIntegratedCircuit(5)) - .itemOutputs(Materials.Ash.getDustSmall(1)) - .fluidInputs(FluidUtils.getFluidStack("steam", 100)) - .fluidOutputs(Materials.WoodTar.getFluid(200)) - .eut(240) - .duration(3 * SECONDS) - .addTo(cokeOvenRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs(aOutputs[i], GT_Utility.getIntegratedCircuit(6)) - .itemOutputs(Materials.Ash.getDustSmall(1)) - .fluidInputs(FluidUtils.getFluidStack("steam", 100)) - .fluidOutputs(Materials.WoodGas.getGas(300)) - .eut(3 * SECONDS) - .duration(240) - .addTo(cokeOvenRecipes); - - // Fluid Extracting the Charcoals for Wood Tar - GT_Values.RA.stdBuilder() - .itemInputs(aInputs2[i]) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1L)) - .outputChances(1000) - .fluidOutputs(Materials.WoodTar.getFluid(50L)) - .duration(1 * SECONDS + 10 * TICKS) - .eut(16) - .addTo(fluidExtractionRecipes); - - // Processing the Charcoals with Oxygen to get CO and CO2 - // C + O = CO - GT_Values.RA.stdBuilder() - .itemInputs(aInputs2[i], GT_Utility.getIntegratedCircuit(1)) - .itemOutputs(Materials.Ash.getDustTiny(1)) - .fluidInputs(Materials.Oxygen.getGas(500)) - .fluidOutputs(Materials.CarbonMonoxide.getGas(500)) - .duration(4 * SECONDS) - .eut(8) - .addTo(UniversalChemical); - // C + 2O = CO2 - GT_Values.RA.stdBuilder() - .itemInputs(aInputs2[i], GT_Utility.getIntegratedCircuit(2)) - .itemOutputs(Materials.Ash.getDustTiny(1)) - .fluidInputs(Materials.Oxygen.getGas(2000)) - .fluidOutputs(Materials.CarbonDioxide.getGas(1000)) - .duration(2 * SECONDS) - .eut(8) - .addTo(UniversalChemical); - } - if (Railcraft.isModLoaded()) { - for (int i = 0; i < aOutputs.length; i++) { - RailcraftUtils.addCokeOvenRecipe( - aInputs1[i], - true, - true, - aInputs2[i], - FluidUtils.getFluidStack("creosote", 30), - 500); - } - for (int i = 0; i < aOutputs.length; i++) { - RailcraftUtils.addCokeOvenRecipe( - aInputs2[i], - true, - true, - aOutputs[i], - FluidUtils.getFluidStack("creosote", 30), - 500); - } - - if (NewHorizonsCoreMod.isModLoaded()) { - for (int i = 0; i < aOutputs.length; i++) { - RailcraftUtils.addAdvancedCokeOvenRecipe(aInputs1[i], true, true, aInputs2[i], 20); - } - for (int i = 0; i < aOutputs.length; i++) { - RailcraftUtils.addAdvancedCokeOvenRecipe(aInputs2[i], true, true, aOutputs[i], 20); - } - } - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/railcraft/HandlerRailcraft.java b/src/main/java/gtPlusPlus/xmod/railcraft/HandlerRailcraft.java new file mode 100644 index 0000000000..4587a86a10 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/railcraft/HandlerRailcraft.java @@ -0,0 +1,218 @@ +package gtPlusPlus.xmod.railcraft; + +import static gregtech.api.enums.Mods.GTPlusPlus; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.enums.Mods.Railcraft; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.cokeOvenRecipes; +import static gtPlusPlus.core.creative.AddToCreativeTab.tabMisc; + +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.item.ModItems; +import gtPlusPlus.core.item.base.BaseItemBurnable; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.xmod.railcraft.utils.RailcraftUtils; + +public class HandlerRailcraft { + + public static void preInit() { + // Register Custom Coal Coke + ModItems.itemCoalCoke = new BaseItemBurnable( + "itemCoalCoke", + "Coking Coal", + tabMisc, + 64, + 0, + "Used for metallurgy.", + "fuelCoke", + 3200, + 0).setTextureName(GTPlusPlus.ID + ":burnables/itemCoalCoke"); + + // Add in things that once existed in 1.5.2 + ModItems.itemCactusCharcoal = new BaseItemBurnable( + "itemCactusCharcoal", + "Cactus Charcoal", + tabMisc, + 64, + 0, + "Used for smelting.", + "fuelCactusCharcoal", + 400, + 0).setTextureName(GTPlusPlus.ID + ":burnables/itemCactusCharcoal"); + ModItems.itemSugarCharcoal = new BaseItemBurnable( + "itemSugarCharcoal", + "Sugar Charcoal", + tabMisc, + 64, + 0, + "Used for smelting.", + "fuelSugarCharcoal", + 400, + 0).setTextureName(GTPlusPlus.ID + ":burnables/itemSugarCharcoal"); + ModItems.itemCactusCoke = new BaseItemBurnable( + "itemCactusCoke", + "Cactus Coke", + tabMisc, + 64, + 0, + "Used for smelting.", + "fuelCactusCoke", + 800, + 0).setTextureName(GTPlusPlus.ID + ":burnables/itemCactusCoke"); + ModItems.itemSugarCoke = new BaseItemBurnable( + "itemSugarCoke", + "Sugar Coke", + tabMisc, + 64, + 0, + "Used for smelting.", + "fuelSugarCoke", + 800, + 0).setTextureName(GTPlusPlus.ID + ":burnables/itemSugarCoke"); + + ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(ModItems.itemCactusCharcoal), "itemCharcoalCactus"); + ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(ModItems.itemCactusCoke), "itemCokeCactus"); + ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(ModItems.itemSugarCharcoal), "itemCharcoalSugar"); + ItemUtils.addItemToOreDictionary(ItemUtils.getSimpleStack(ModItems.itemSugarCoke), "itemCokeSugar"); + } + + public static void postInit() { + generateCokeOvenRecipes(); + } + + private static void generateCokeOvenRecipes() { + ItemStack[] aInputs1 = new ItemStack[] { ItemUtils.getSimpleStack(Blocks.cactus), + ItemUtils.getSimpleStack(Items.reeds) }; + ItemStack[] aInputs2 = new ItemStack[] { ItemUtils.getSimpleStack(ModItems.itemCactusCharcoal), + ItemUtils.getSimpleStack(ModItems.itemSugarCharcoal) }; + ItemStack[] aOutputs = new ItemStack[] { ItemUtils.getSimpleStack(ModItems.itemCactusCoke), + ItemUtils.getSimpleStack(ModItems.itemSugarCoke) }; + for (int i = 0; i < aOutputs.length; i++) { + // Recipes for the Charcoals and Cokes, outputting either Creosote or Charcoal Byproducts depending on the + // fluid input + GTValues.RA.stdBuilder() + .itemInputs(aInputs1[i], GTUtility.getIntegratedCircuit(3)) + .itemOutputs(aInputs2[i]) + .fluidOutputs(FluidUtils.getFluidStack("creosote", 100)) + .eut(16) + .duration(1 * SECONDS) + .addTo(cokeOvenRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(aInputs1[i], GTUtility.getIntegratedCircuit(4)) + .itemOutputs(aInputs2[i]) + .fluidInputs(FluidUtils.getFluidStack("nitrogen", 100)) + .fluidOutputs(FluidUtils.getFluidStack("charcoal_byproducts", 200)) + .eut(16) + .duration(10 * TICKS) + .addTo(cokeOvenRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(aInputs2[i], GTUtility.getIntegratedCircuit(3)) + .itemOutputs(aOutputs[i]) + .fluidOutputs(FluidUtils.getFluidStack("creosote", 200)) + .eut(16) + .duration(2 * SECONDS) + .addTo(cokeOvenRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(aInputs2[i], GTUtility.getIntegratedCircuit(4)) + .itemOutputs(aOutputs[i]) + .fluidInputs(FluidUtils.getFluidStack("nitrogen", 50)) + .fluidOutputs(FluidUtils.getFluidStack("charcoal_byproducts", 100)) + .eut(16) + .duration(1 * SECONDS) + .addTo(cokeOvenRecipes); + + // Generate Wood Tar and Wood Gas from these Cokes + GTValues.RA.stdBuilder() + .itemInputs(aOutputs[i], GTUtility.getIntegratedCircuit(5)) + .itemOutputs(Materials.Ash.getDustSmall(1)) + .fluidInputs(FluidUtils.getFluidStack("steam", 100)) + .fluidOutputs(Materials.WoodTar.getFluid(200)) + .eut(240) + .duration(3 * SECONDS) + .addTo(cokeOvenRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(aOutputs[i], GTUtility.getIntegratedCircuit(6)) + .itemOutputs(Materials.Ash.getDustSmall(1)) + .fluidInputs(FluidUtils.getFluidStack("steam", 100)) + .fluidOutputs(Materials.WoodGas.getGas(300)) + .eut(3 * SECONDS) + .duration(240) + .addTo(cokeOvenRecipes); + + // Fluid Extracting the Charcoals for Wood Tar + GTValues.RA.stdBuilder() + .itemInputs(aInputs2[i]) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 1L)) + .outputChances(1000) + .fluidOutputs(Materials.WoodTar.getFluid(50L)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(fluidExtractionRecipes); + + // Processing the Charcoals with Oxygen to get CO and CO2 + // C + O = CO + GTValues.RA.stdBuilder() + .itemInputs(aInputs2[i], GTUtility.getIntegratedCircuit(1)) + .itemOutputs(Materials.Ash.getDustTiny(1)) + .fluidInputs(Materials.Oxygen.getGas(500)) + .fluidOutputs(Materials.CarbonMonoxide.getGas(500)) + .duration(4 * SECONDS) + .eut(8) + .addTo(UniversalChemical); + // C + 2O = CO2 + GTValues.RA.stdBuilder() + .itemInputs(aInputs2[i], GTUtility.getIntegratedCircuit(2)) + .itemOutputs(Materials.Ash.getDustTiny(1)) + .fluidInputs(Materials.Oxygen.getGas(2000)) + .fluidOutputs(Materials.CarbonDioxide.getGas(1000)) + .duration(2 * SECONDS) + .eut(8) + .addTo(UniversalChemical); + } + if (Railcraft.isModLoaded()) { + for (int i = 0; i < aOutputs.length; i++) { + RailcraftUtils.addCokeOvenRecipe( + aInputs1[i], + true, + true, + aInputs2[i], + FluidUtils.getFluidStack("creosote", 30), + 500); + } + for (int i = 0; i < aOutputs.length; i++) { + RailcraftUtils.addCokeOvenRecipe( + aInputs2[i], + true, + true, + aOutputs[i], + FluidUtils.getFluidStack("creosote", 30), + 500); + } + + if (NewHorizonsCoreMod.isModLoaded()) { + for (int i = 0; i < aOutputs.length; i++) { + RailcraftUtils.addAdvancedCokeOvenRecipe(aInputs1[i], true, true, aInputs2[i], 20); + } + for (int i = 0; i < aOutputs.length; i++) { + RailcraftUtils.addAdvancedCokeOvenRecipe(aInputs2[i], true, true, aOutputs[i], 20); + } + } + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/HANDLER_TF.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/HANDLER_TF.java deleted file mode 100644 index 460a5e9fbe..0000000000 --- a/src/main/java/gtPlusPlus/xmod/thermalfoundation/HANDLER_TF.java +++ /dev/null @@ -1,36 +0,0 @@ -package gtPlusPlus.xmod.thermalfoundation; - -import static gregtech.api.enums.Mods.COFHCore; - -import gtPlusPlus.xmod.thermalfoundation.block.TF_Blocks; -import gtPlusPlus.xmod.thermalfoundation.fluid.TF_Fluids; -import gtPlusPlus.xmod.thermalfoundation.item.TF_Items; -import gtPlusPlus.xmod.thermalfoundation.recipe.TF_Gregtech_Recipes; - -public class HANDLER_TF { - - public static void preInit() { - if (COFHCore.isModLoaded()) { - TF_Fluids.preInit(); - TF_Items.preInit(); - TF_Blocks.preInit(); - } - } - - public static void init() { - if (COFHCore.isModLoaded()) { - TF_Fluids.init(); - TF_Blocks.init(); - TF_Items.init(); - } - } - - public static void postInit() { - if (COFHCore.isModLoaded()) { - TF_Fluids.postInit(); - TF_Items.postInit(); - TF_Blocks.postInit(); - TF_Gregtech_Recipes.run(); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/HandlerTF.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/HandlerTF.java new file mode 100644 index 0000000000..cb8b2c38c3 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/thermalfoundation/HandlerTF.java @@ -0,0 +1,36 @@ +package gtPlusPlus.xmod.thermalfoundation; + +import static gregtech.api.enums.Mods.COFHCore; + +import gtPlusPlus.xmod.thermalfoundation.block.TFBlocks; +import gtPlusPlus.xmod.thermalfoundation.fluid.TFFluids; +import gtPlusPlus.xmod.thermalfoundation.item.TFItems; +import gtPlusPlus.xmod.thermalfoundation.recipe.TFGregtechRecipes; + +public class HandlerTF { + + public static void preInit() { + if (COFHCore.isModLoaded()) { + TFFluids.preInit(); + TFItems.preInit(); + TFBlocks.preInit(); + } + } + + public static void init() { + if (COFHCore.isModLoaded()) { + TFFluids.init(); + TFBlocks.init(); + TFItems.init(); + } + } + + public static void postInit() { + if (COFHCore.isModLoaded()) { + TFFluids.postInit(); + TFItems.postInit(); + TFBlocks.postInit(); + TFGregtechRecipes.run(); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidCryotheum.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidCryotheum.java new file mode 100644 index 0000000000..0fefa79686 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidCryotheum.java @@ -0,0 +1,178 @@ +package gtPlusPlus.xmod.thermalfoundation.block; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialLiquid; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityBlaze; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntitySnowman; +import net.minecraft.entity.monster.EntityZombie; +import net.minecraft.init.Blocks; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import cofh.core.fluid.BlockFluidInteractive; +import cofh.lib.util.BlockWrapper; +import cofh.lib.util.helpers.DamageHelper; +import cofh.lib.util.helpers.ServerHelper; +import cpw.mods.fml.common.registry.GameRegistry; +import gtPlusPlus.xmod.thermalfoundation.fluid.TFFluids; + +public class TFBlockFluidCryotheum extends BlockFluidInteractive { + + public static final Material materialFluidCryotheum = new MaterialLiquid(MapColor.iceColor); + private static boolean enableSourceFall = true; + private static boolean effect = true; + + public TFBlockFluidCryotheum() { + super(GTPlusPlus.ID, TFFluids.fluidCryotheum, materialFluidCryotheum, "cryotheum"); + this.setQuantaPerBlock(5); + this.setTickRate(15); + + this.setHardness(1000.0F); + this.setLightOpacity(1); + this.setParticleColor(0.15F, 0.7F, 1.0F); + } + + @Override + public boolean preInit() { + GameRegistry.registerBlock(this, "FluidCryotheum"); + + this.addInteraction(Blocks.grass, Blocks.dirt); + this.addInteraction(Blocks.water, 0, Blocks.ice); + this.addInteraction(Blocks.water, Blocks.snow); + this.addInteraction(Blocks.flowing_water, 0, Blocks.ice); + this.addInteraction(Blocks.flowing_water, Blocks.snow); + this.addInteraction(Blocks.lava, 0, Blocks.obsidian); + this.addInteraction(Blocks.lava, Blocks.stone); + this.addInteraction(Blocks.flowing_lava, 0, Blocks.obsidian); + this.addInteraction(Blocks.flowing_lava, Blocks.stone); + this.addInteraction(Blocks.leaves, Blocks.air); + this.addInteraction(Blocks.tallgrass, Blocks.air); + this.addInteraction(Blocks.fire, Blocks.air); + + effect = true; + enableSourceFall = true; + + return true; + } + + @Override + public void onEntityCollidedWithBlock(final World paramWorld, final int paramInt1, final int paramInt2, + final int paramInt3, final Entity paramEntity) { + paramEntity.extinguish(); + if (!effect) { + return; + } + if ((paramEntity.motionY < -0.05D) || (paramEntity.motionY > 0.05D)) { + paramEntity.motionY *= 0.05D; + } + if ((paramEntity.motionZ < -0.05D) || (paramEntity.motionZ > 0.05D)) { + paramEntity.motionZ *= 0.05D; + } + if ((paramEntity.motionX < -0.05D) || (paramEntity.motionX > 0.05D)) { + paramEntity.motionX *= 0.05D; + } + if (ServerHelper.isClientWorld(paramWorld)) { + return; + } + if ((paramWorld.getTotalWorldTime() % 8L) != 0L) { + return; + } + if (((paramEntity instanceof EntityZombie)) || ((paramEntity instanceof EntityCreeper))) { + final EntitySnowman localEntitySnowman = new EntitySnowman(paramWorld); + localEntitySnowman.setLocationAndAngles( + paramEntity.posX, + paramEntity.posY, + paramEntity.posZ, + paramEntity.rotationYaw, + paramEntity.rotationPitch); + paramWorld.spawnEntityInWorld(localEntitySnowman); + + paramEntity.setDead(); + } else if ( + /* ((paramEntity instanceof EntityBlizz)) || */ ((paramEntity instanceof EntitySnowman))) { + ((EntityLivingBase) paramEntity).addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 120, 0)); + ((EntityLivingBase) paramEntity).addPotionEffect(new PotionEffect(Potion.regeneration.id, 120, 0)); + } else if ((paramEntity instanceof EntityBlaze)) { + paramEntity.attackEntityFrom(DamageHelper.cryotheum, 10.0F); + } else { + final boolean bool = paramEntity.velocityChanged; + paramEntity.attackEntityFrom(DamageHelper.cryotheum, 2.0F); + paramEntity.velocityChanged = bool; + } + } + + @Override + public int getLightValue(final IBlockAccess paramIBlockAccess, final int paramInt1, final int paramInt2, + final int paramInt3) { + return TFFluids.fluidCryotheum.getLuminosity(); + } + + @Override + public void updateTick(final World paramWorld, final int paramInt1, final int paramInt2, final int paramInt3, + final Random paramRandom) { + if (effect) { + this.checkForInteraction(paramWorld, paramInt1, paramInt2, paramInt3); + } + if ((enableSourceFall) && (paramWorld.getBlockMetadata(paramInt1, paramInt2, paramInt3) == 0)) { + final Block localBlock = paramWorld.getBlock(paramInt1, paramInt2 + this.densityDir, paramInt3); + final int i = paramWorld.getBlockMetadata(paramInt1, paramInt2 + this.densityDir, paramInt3); + if ((localBlock == this) && (i != 0)) { + paramWorld.setBlock(paramInt1, paramInt2 + this.densityDir, paramInt3, this, 0, 3); + paramWorld.setBlockToAir(paramInt1, paramInt2, paramInt3); + return; + } + } + super.updateTick(paramWorld, paramInt1, paramInt2, paramInt3, paramRandom); + } + + protected void checkForInteraction(final World paramWorld, final int paramInt1, final int paramInt2, + final int paramInt3) { + if (paramWorld.getBlock(paramInt1, paramInt2, paramInt3) != this) { + return; + } + int i = paramInt1; + int j = paramInt2; + int k = paramInt3; + for (int m = 0; m < 6; m++) { + i = paramInt1 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][0]; + j = paramInt2 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][1]; + k = paramInt3 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][2]; + + this.interactWithBlock(paramWorld, i, j, k); + } + this.interactWithBlock(paramWorld, paramInt1 - 1, paramInt2, paramInt3 - 1); + this.interactWithBlock(paramWorld, paramInt1 - 1, paramInt2, paramInt3 + 1); + this.interactWithBlock(paramWorld, paramInt1 + 1, paramInt2, paramInt3 - 1); + this.interactWithBlock(paramWorld, paramInt1 + 1, paramInt2, paramInt3 + 1); + } + + protected void interactWithBlock(final World paramWorld, final int paramInt1, final int paramInt2, + final int paramInt3) { + final Block localBlock = paramWorld.getBlock(paramInt1, paramInt2, paramInt3); + if ((localBlock == Blocks.air) || (localBlock == this)) { + return; + } + final int i = paramWorld.getBlockMetadata(paramInt1, paramInt2, paramInt3); + if (this.hasInteraction(localBlock, i)) { + final BlockWrapper localBlockWrapper = this.getInteraction(localBlock, i); + paramWorld + .setBlock(paramInt1, paramInt2, paramInt3, localBlockWrapper.block, localBlockWrapper.metadata, 3); + } else if ((paramWorld.isSideSolid(paramInt1, paramInt2, paramInt3, ForgeDirection.UP)) + && (paramWorld.isAirBlock(paramInt1, paramInt2 + 1, paramInt3))) { + paramWorld.setBlock(paramInt1, paramInt2 + 1, paramInt3, Blocks.snow_layer, 0, 3); + } + } + +} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidEnder.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidEnder.java new file mode 100644 index 0000000000..1f7c1fec93 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidEnder.java @@ -0,0 +1,61 @@ +package gtPlusPlus.xmod.thermalfoundation.block; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import net.minecraft.block.material.MapColor; +import net.minecraft.block.material.Material; +import net.minecraft.block.material.MaterialLiquid; +import net.minecraft.entity.Entity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cofh.core.fluid.BlockFluidCoFHBase; +import cofh.core.util.CoreUtils; +import cpw.mods.fml.common.registry.GameRegistry; +import gtPlusPlus.xmod.thermalfoundation.fluid.TFFluids; + +public class TFBlockFluidEnder extends BlockFluidCoFHBase { + + public static final Material materialFluidEnder = new MaterialLiquid(MapColor.greenColor); + private static boolean effect = true; + + public TFBlockFluidEnder() { + super(GTPlusPlus.ID, TFFluids.fluidEnder, materialFluidEnder, "ender"); + setQuantaPerBlock(4); + setTickRate(20); + + setHardness(2000.0F); + setLightOpacity(7); + setParticleColor(0.05F, 0.2F, 0.2F); + } + + @Override + public boolean preInit() { + GameRegistry.registerBlock(this, "FluidEnder"); + + return true; + } + + @Override + public void onEntityCollidedWithBlock(World paramWorld, int paramInt1, int paramInt2, int paramInt3, + Entity paramEntity) { + if ((!effect) || (paramWorld.isRemote)) { + return; + } + if (paramWorld.getTotalWorldTime() % 8L == 0L) { + int i = paramInt1 - 8 + paramWorld.rand.nextInt(17); + int j = paramInt2 + paramWorld.rand.nextInt(8); + int k = paramInt3 - 8 + paramWorld.rand.nextInt(17); + if (!paramWorld.getBlock(i, j, k) + .getMaterial() + .isSolid()) { + CoreUtils.teleportEntityTo(paramEntity, i, j, k); + } + } + } + + @Override + public int getLightValue(IBlockAccess paramIBlockAccess, int paramInt1, int paramInt2, int paramInt3) { + return TFFluids.fluidEnder.getLuminosity(); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidPyrotheum.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidPyrotheum.java new file mode 100644 index 0000000000..1014667355 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlockFluidPyrotheum.java @@ -0,0 +1,192 @@ +package gtPlusPlus.xmod.thermalfoundation.block; + +import static gregtech.api.enums.Mods.GTPlusPlus; + +import java.util.Random; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import cofh.core.fluid.BlockFluidInteractive; +import cofh.lib.util.BlockWrapper; +import cofh.lib.util.helpers.ServerHelper; +import cpw.mods.fml.common.registry.GameRegistry; +import gtPlusPlus.xmod.thermalfoundation.fluid.TFFluids; + +public class TFBlockFluidPyrotheum extends BlockFluidInteractive { + + Random random = new Random(); + private static boolean effect = true; + private static boolean enableSourceFall = true; + + public TFBlockFluidPyrotheum() { + super(GTPlusPlus.ID, TFFluids.fluidPyrotheum, Material.lava, "pyrotheum"); + this.setQuantaPerBlock(5); + this.setTickRate(10); + + this.setHardness(1000.0F); + this.setLightOpacity(1); + this.setParticleColor(1.0F, 0.7F, 0.15F); + } + + @Override + public boolean preInit() { + GameRegistry.registerBlock(this, "FluidPyrotheum"); + + this.addInteraction(Blocks.cobblestone, Blocks.stone); + this.addInteraction(Blocks.grass, Blocks.dirt); + this.addInteraction(Blocks.sand, Blocks.glass); + this.addInteraction(Blocks.water, Blocks.stone); + this.addInteraction(Blocks.flowing_water, Blocks.stone); + this.addInteraction(Blocks.clay, Blocks.hardened_clay); + this.addInteraction(Blocks.ice, Blocks.stone); + this.addInteraction(Blocks.snow, Blocks.air); + this.addInteraction(Blocks.snow_layer, Blocks.air); + for (int i = 0; i < 8; i++) { + this.addInteraction(Blocks.stone_stairs, i, Blocks.stone_brick_stairs, i); + } + final String str1 = "Fluid.Pyrotheum"; + String str2 = "Enable this for Fluid Pyrotheum to be worse than lava."; + effect = true; + + str2 = "Enable this for Fluid Pyrotheum Source blocks to gradually fall downwards."; + enableSourceFall = true; + + return true; + } + + @Override + public void onEntityCollidedWithBlock(final World paramWorld, final int paramInt1, final int paramInt2, + final int paramInt3, final Entity paramEntity) { + if (!effect) { + return; + } + if (ServerHelper.isClientWorld(paramWorld)) { + return; + } + if (!(paramEntity instanceof EntityPlayer)) { + if ((paramEntity instanceof EntityCreeper)) { + paramWorld.createExplosion( + paramEntity, + paramEntity.posX, + paramEntity.posY, + paramEntity.posZ, + 6.0F, + paramEntity.worldObj.getGameRules() + .getGameRuleBooleanValue("mobGriefing")); + paramEntity.setDead(); + } + } + } + + @Override + public int getLightValue(final IBlockAccess paramIBlockAccess, final int paramInt1, final int paramInt2, + final int paramInt3) { + return TFFluids.fluidPyrotheum.getLuminosity(); + } + + @Override + public int getFireSpreadSpeed(final IBlockAccess paramIBlockAccess, final int paramInt1, final int paramInt2, + final int paramInt3, final ForgeDirection paramForgeDirection) { + return effect ? 800 : 0; + } + + @Override + public int getFlammability(final IBlockAccess paramIBlockAccess, final int paramInt1, final int paramInt2, + final int paramInt3, final ForgeDirection paramForgeDirection) { + return 0; + } + + @Override + public boolean isFlammable(final IBlockAccess paramIBlockAccess, final int paramInt1, final int paramInt2, + final int paramInt3, final ForgeDirection paramForgeDirection) { + return (effect) && (paramForgeDirection.ordinal() > ForgeDirection.UP.ordinal()) + && (paramIBlockAccess.getBlock(paramInt1, paramInt2 - 1, paramInt3) != this); + } + + @Override + public boolean isFireSource(final World paramWorld, final int paramInt1, final int paramInt2, final int paramInt3, + final ForgeDirection paramForgeDirection) { + return effect; + } + + @Override + public void updateTick(final World paramWorld, final int paramInt1, final int paramInt2, final int paramInt3, + final Random paramRandom) { + if (effect) { + this.checkForInteraction(paramWorld, paramInt1, paramInt2, paramInt3); + } + if ((enableSourceFall) && (paramWorld.getBlockMetadata(paramInt1, paramInt2, paramInt3) == 0)) { + final Block localBlock = paramWorld.getBlock(paramInt1, paramInt2 + this.densityDir, paramInt3); + final int i = paramWorld.getBlockMetadata(paramInt1, paramInt2 + this.densityDir, paramInt3); + if (((localBlock == this) && (i != 0)) || (localBlock + .isFlammable(paramWorld, paramInt1, paramInt2 + this.densityDir, paramInt3, ForgeDirection.UP))) { + paramWorld.setBlock(paramInt1, paramInt2 + this.densityDir, paramInt3, this, 0, 3); + paramWorld.setBlockToAir(paramInt1, paramInt2, paramInt3); + return; + } + } + super.updateTick(paramWorld, paramInt1, paramInt2, paramInt3, paramRandom); + } + + protected void checkForInteraction(final World paramWorld, final int paramInt1, final int paramInt2, + final int paramInt3) { + if (paramWorld.getBlock(paramInt1, paramInt2, paramInt3) != this) { + return; + } + int i = paramInt1; + int j = paramInt2; + int k = paramInt3; + for (int m = 0; m < 6; m++) { + i = paramInt1 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][0]; + j = paramInt2 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][1]; + k = paramInt3 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][2]; + + this.interactWithBlock(paramWorld, i, j, k); + } + this.interactWithBlock(paramWorld, paramInt1 - 1, paramInt2, paramInt3 - 1); + this.interactWithBlock(paramWorld, paramInt1 - 1, paramInt2, paramInt3 + 1); + this.interactWithBlock(paramWorld, paramInt1 + 1, paramInt2, paramInt3 - 1); + this.interactWithBlock(paramWorld, paramInt1 + 1, paramInt2, paramInt3 + 1); + } + + protected void interactWithBlock(final World paramWorld, final int paramInt1, final int paramInt2, + final int paramInt3) { + final Block localBlock = paramWorld.getBlock(paramInt1, paramInt2, paramInt3); + if ((localBlock == Blocks.air) || (localBlock == this)) { + return; + } + final int i = paramWorld.getBlockMetadata(paramInt1, paramInt2, paramInt3); + if (this.hasInteraction(localBlock, i)) { + final BlockWrapper localBlockWrapper = this.getInteraction(localBlock, i); + paramWorld + .setBlock(paramInt1, paramInt2, paramInt3, localBlockWrapper.block, localBlockWrapper.metadata, 3); + this.triggerInteractionEffects(paramWorld, paramInt1, paramInt2, paramInt3); + } else if (localBlock.isFlammable(paramWorld, paramInt1, paramInt2, paramInt3, ForgeDirection.UP)) { + paramWorld.setBlock(paramInt1, paramInt2, paramInt3, Blocks.fire); + } else if ((paramWorld.isSideSolid(paramInt1, paramInt2, paramInt3, ForgeDirection.UP)) + && (paramWorld.isAirBlock(paramInt1, paramInt2 + 1, paramInt3))) { + paramWorld.setBlock(paramInt1, paramInt2 + 1, paramInt3, Blocks.fire, 0, 3); + } + } + + protected void triggerInteractionEffects(final World paramWorld, final int paramInt1, final int paramInt2, + final int paramInt3) { + if (this.random.nextInt(16) == 0) { + paramWorld.playSoundEffect( + paramInt1 + 0.5F, + paramInt2 + 0.5F, + paramInt3 + 0.5F, + "random.fizz", + 0.5F, + 2.2F + ((paramWorld.rand.nextFloat() - paramWorld.rand.nextFloat()) * 0.8F)); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlocks.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlocks.java new file mode 100644 index 0000000000..4e238ae5f5 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TFBlocks.java @@ -0,0 +1,23 @@ +package gtPlusPlus.xmod.thermalfoundation.block; + +import cofh.core.fluid.BlockFluidCoFHBase; + +public class TFBlocks { + + public static BlockFluidCoFHBase blockFluidPyrotheum; + public static BlockFluidCoFHBase blockFluidCryotheum; + public static BlockFluidCoFHBase blockFluidEnder; + + public static void preInit() { + blockFluidPyrotheum = new TFBlockFluidPyrotheum(); + blockFluidCryotheum = new TFBlockFluidCryotheum(); + blockFluidEnder = new TFBlockFluidEnder(); + blockFluidPyrotheum.preInit(); + blockFluidCryotheum.preInit(); + blockFluidEnder.preInit(); + } + + public static void init() {} + + public static void postInit() {} +} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Cryotheum.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Cryotheum.java deleted file mode 100644 index b48be445e5..0000000000 --- a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Cryotheum.java +++ /dev/null @@ -1,178 +0,0 @@ -package gtPlusPlus.xmod.thermalfoundation.block; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.material.MapColor; -import net.minecraft.block.material.Material; -import net.minecraft.block.material.MaterialLiquid; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.monster.EntityBlaze; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.monster.EntitySnowman; -import net.minecraft.entity.monster.EntityZombie; -import net.minecraft.init.Blocks; -import net.minecraft.potion.Potion; -import net.minecraft.potion.PotionEffect; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import cofh.core.fluid.BlockFluidInteractive; -import cofh.lib.util.BlockWrapper; -import cofh.lib.util.helpers.DamageHelper; -import cofh.lib.util.helpers.ServerHelper; -import cpw.mods.fml.common.registry.GameRegistry; -import gtPlusPlus.xmod.thermalfoundation.fluid.TF_Fluids; - -public class TF_Block_Fluid_Cryotheum extends BlockFluidInteractive { - - public static final Material materialFluidCryotheum = new MaterialLiquid(MapColor.iceColor); - private static boolean enableSourceFall = true; - private static boolean effect = true; - - public TF_Block_Fluid_Cryotheum() { - super(GTPlusPlus.ID, TF_Fluids.fluidCryotheum, materialFluidCryotheum, "cryotheum"); - this.setQuantaPerBlock(5); - this.setTickRate(15); - - this.setHardness(1000.0F); - this.setLightOpacity(1); - this.setParticleColor(0.15F, 0.7F, 1.0F); - } - - @Override - public boolean preInit() { - GameRegistry.registerBlock(this, "FluidCryotheum"); - - this.addInteraction(Blocks.grass, Blocks.dirt); - this.addInteraction(Blocks.water, 0, Blocks.ice); - this.addInteraction(Blocks.water, Blocks.snow); - this.addInteraction(Blocks.flowing_water, 0, Blocks.ice); - this.addInteraction(Blocks.flowing_water, Blocks.snow); - this.addInteraction(Blocks.lava, 0, Blocks.obsidian); - this.addInteraction(Blocks.lava, Blocks.stone); - this.addInteraction(Blocks.flowing_lava, 0, Blocks.obsidian); - this.addInteraction(Blocks.flowing_lava, Blocks.stone); - this.addInteraction(Blocks.leaves, Blocks.air); - this.addInteraction(Blocks.tallgrass, Blocks.air); - this.addInteraction(Blocks.fire, Blocks.air); - - effect = true; - enableSourceFall = true; - - return true; - } - - @Override - public void onEntityCollidedWithBlock(final World paramWorld, final int paramInt1, final int paramInt2, - final int paramInt3, final Entity paramEntity) { - paramEntity.extinguish(); - if (!effect) { - return; - } - if ((paramEntity.motionY < -0.05D) || (paramEntity.motionY > 0.05D)) { - paramEntity.motionY *= 0.05D; - } - if ((paramEntity.motionZ < -0.05D) || (paramEntity.motionZ > 0.05D)) { - paramEntity.motionZ *= 0.05D; - } - if ((paramEntity.motionX < -0.05D) || (paramEntity.motionX > 0.05D)) { - paramEntity.motionX *= 0.05D; - } - if (ServerHelper.isClientWorld(paramWorld)) { - return; - } - if ((paramWorld.getTotalWorldTime() % 8L) != 0L) { - return; - } - if (((paramEntity instanceof EntityZombie)) || ((paramEntity instanceof EntityCreeper))) { - final EntitySnowman localEntitySnowman = new EntitySnowman(paramWorld); - localEntitySnowman.setLocationAndAngles( - paramEntity.posX, - paramEntity.posY, - paramEntity.posZ, - paramEntity.rotationYaw, - paramEntity.rotationPitch); - paramWorld.spawnEntityInWorld(localEntitySnowman); - - paramEntity.setDead(); - } else if ( - /* ((paramEntity instanceof EntityBlizz)) || */ ((paramEntity instanceof EntitySnowman))) { - ((EntityLivingBase) paramEntity).addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 120, 0)); - ((EntityLivingBase) paramEntity).addPotionEffect(new PotionEffect(Potion.regeneration.id, 120, 0)); - } else if ((paramEntity instanceof EntityBlaze)) { - paramEntity.attackEntityFrom(DamageHelper.cryotheum, 10.0F); - } else { - final boolean bool = paramEntity.velocityChanged; - paramEntity.attackEntityFrom(DamageHelper.cryotheum, 2.0F); - paramEntity.velocityChanged = bool; - } - } - - @Override - public int getLightValue(final IBlockAccess paramIBlockAccess, final int paramInt1, final int paramInt2, - final int paramInt3) { - return TF_Fluids.fluidCryotheum.getLuminosity(); - } - - @Override - public void updateTick(final World paramWorld, final int paramInt1, final int paramInt2, final int paramInt3, - final Random paramRandom) { - if (effect) { - this.checkForInteraction(paramWorld, paramInt1, paramInt2, paramInt3); - } - if ((enableSourceFall) && (paramWorld.getBlockMetadata(paramInt1, paramInt2, paramInt3) == 0)) { - final Block localBlock = paramWorld.getBlock(paramInt1, paramInt2 + this.densityDir, paramInt3); - final int i = paramWorld.getBlockMetadata(paramInt1, paramInt2 + this.densityDir, paramInt3); - if ((localBlock == this) && (i != 0)) { - paramWorld.setBlock(paramInt1, paramInt2 + this.densityDir, paramInt3, this, 0, 3); - paramWorld.setBlockToAir(paramInt1, paramInt2, paramInt3); - return; - } - } - super.updateTick(paramWorld, paramInt1, paramInt2, paramInt3, paramRandom); - } - - protected void checkForInteraction(final World paramWorld, final int paramInt1, final int paramInt2, - final int paramInt3) { - if (paramWorld.getBlock(paramInt1, paramInt2, paramInt3) != this) { - return; - } - int i = paramInt1; - int j = paramInt2; - int k = paramInt3; - for (int m = 0; m < 6; m++) { - i = paramInt1 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][0]; - j = paramInt2 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][1]; - k = paramInt3 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][2]; - - this.interactWithBlock(paramWorld, i, j, k); - } - this.interactWithBlock(paramWorld, paramInt1 - 1, paramInt2, paramInt3 - 1); - this.interactWithBlock(paramWorld, paramInt1 - 1, paramInt2, paramInt3 + 1); - this.interactWithBlock(paramWorld, paramInt1 + 1, paramInt2, paramInt3 - 1); - this.interactWithBlock(paramWorld, paramInt1 + 1, paramInt2, paramInt3 + 1); - } - - protected void interactWithBlock(final World paramWorld, final int paramInt1, final int paramInt2, - final int paramInt3) { - final Block localBlock = paramWorld.getBlock(paramInt1, paramInt2, paramInt3); - if ((localBlock == Blocks.air) || (localBlock == this)) { - return; - } - final int i = paramWorld.getBlockMetadata(paramInt1, paramInt2, paramInt3); - if (this.hasInteraction(localBlock, i)) { - final BlockWrapper localBlockWrapper = this.getInteraction(localBlock, i); - paramWorld - .setBlock(paramInt1, paramInt2, paramInt3, localBlockWrapper.block, localBlockWrapper.metadata, 3); - } else if ((paramWorld.isSideSolid(paramInt1, paramInt2, paramInt3, ForgeDirection.UP)) - && (paramWorld.isAirBlock(paramInt1, paramInt2 + 1, paramInt3))) { - paramWorld.setBlock(paramInt1, paramInt2 + 1, paramInt3, Blocks.snow_layer, 0, 3); - } - } - -} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Ender.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Ender.java deleted file mode 100644 index 9f89d01250..0000000000 --- a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Ender.java +++ /dev/null @@ -1,61 +0,0 @@ -package gtPlusPlus.xmod.thermalfoundation.block; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import net.minecraft.block.material.MapColor; -import net.minecraft.block.material.Material; -import net.minecraft.block.material.MaterialLiquid; -import net.minecraft.entity.Entity; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import cofh.core.fluid.BlockFluidCoFHBase; -import cofh.core.util.CoreUtils; -import cpw.mods.fml.common.registry.GameRegistry; -import gtPlusPlus.xmod.thermalfoundation.fluid.TF_Fluids; - -public class TF_Block_Fluid_Ender extends BlockFluidCoFHBase { - - public static final Material materialFluidEnder = new MaterialLiquid(MapColor.greenColor); - private static boolean effect = true; - - public TF_Block_Fluid_Ender() { - super(GTPlusPlus.ID, TF_Fluids.fluidEnder, materialFluidEnder, "ender"); - setQuantaPerBlock(4); - setTickRate(20); - - setHardness(2000.0F); - setLightOpacity(7); - setParticleColor(0.05F, 0.2F, 0.2F); - } - - @Override - public boolean preInit() { - GameRegistry.registerBlock(this, "FluidEnder"); - - return true; - } - - @Override - public void onEntityCollidedWithBlock(World paramWorld, int paramInt1, int paramInt2, int paramInt3, - Entity paramEntity) { - if ((!effect) || (paramWorld.isRemote)) { - return; - } - if (paramWorld.getTotalWorldTime() % 8L == 0L) { - int i = paramInt1 - 8 + paramWorld.rand.nextInt(17); - int j = paramInt2 + paramWorld.rand.nextInt(8); - int k = paramInt3 - 8 + paramWorld.rand.nextInt(17); - if (!paramWorld.getBlock(i, j, k) - .getMaterial() - .isSolid()) { - CoreUtils.teleportEntityTo(paramEntity, i, j, k); - } - } - } - - @Override - public int getLightValue(IBlockAccess paramIBlockAccess, int paramInt1, int paramInt2, int paramInt3) { - return TF_Fluids.fluidEnder.getLuminosity(); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Pyrotheum.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Pyrotheum.java deleted file mode 100644 index 90c8be8bf7..0000000000 --- a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Block_Fluid_Pyrotheum.java +++ /dev/null @@ -1,192 +0,0 @@ -package gtPlusPlus.xmod.thermalfoundation.block; - -import static gregtech.api.enums.Mods.GTPlusPlus; - -import java.util.Random; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.entity.Entity; -import net.minecraft.entity.monster.EntityCreeper; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import cofh.core.fluid.BlockFluidInteractive; -import cofh.lib.util.BlockWrapper; -import cofh.lib.util.helpers.ServerHelper; -import cpw.mods.fml.common.registry.GameRegistry; -import gtPlusPlus.xmod.thermalfoundation.fluid.TF_Fluids; - -public class TF_Block_Fluid_Pyrotheum extends BlockFluidInteractive { - - Random random = new Random(); - private static boolean effect = true; - private static boolean enableSourceFall = true; - - public TF_Block_Fluid_Pyrotheum() { - super(GTPlusPlus.ID, TF_Fluids.fluidPyrotheum, Material.lava, "pyrotheum"); - this.setQuantaPerBlock(5); - this.setTickRate(10); - - this.setHardness(1000.0F); - this.setLightOpacity(1); - this.setParticleColor(1.0F, 0.7F, 0.15F); - } - - @Override - public boolean preInit() { - GameRegistry.registerBlock(this, "FluidPyrotheum"); - - this.addInteraction(Blocks.cobblestone, Blocks.stone); - this.addInteraction(Blocks.grass, Blocks.dirt); - this.addInteraction(Blocks.sand, Blocks.glass); - this.addInteraction(Blocks.water, Blocks.stone); - this.addInteraction(Blocks.flowing_water, Blocks.stone); - this.addInteraction(Blocks.clay, Blocks.hardened_clay); - this.addInteraction(Blocks.ice, Blocks.stone); - this.addInteraction(Blocks.snow, Blocks.air); - this.addInteraction(Blocks.snow_layer, Blocks.air); - for (int i = 0; i < 8; i++) { - this.addInteraction(Blocks.stone_stairs, i, Blocks.stone_brick_stairs, i); - } - final String str1 = "Fluid.Pyrotheum"; - String str2 = "Enable this for Fluid Pyrotheum to be worse than lava."; - effect = true; - - str2 = "Enable this for Fluid Pyrotheum Source blocks to gradually fall downwards."; - enableSourceFall = true; - - return true; - } - - @Override - public void onEntityCollidedWithBlock(final World paramWorld, final int paramInt1, final int paramInt2, - final int paramInt3, final Entity paramEntity) { - if (!effect) { - return; - } - if (ServerHelper.isClientWorld(paramWorld)) { - return; - } - if (!(paramEntity instanceof EntityPlayer)) { - if ((paramEntity instanceof EntityCreeper)) { - paramWorld.createExplosion( - paramEntity, - paramEntity.posX, - paramEntity.posY, - paramEntity.posZ, - 6.0F, - paramEntity.worldObj.getGameRules() - .getGameRuleBooleanValue("mobGriefing")); - paramEntity.setDead(); - } - } - } - - @Override - public int getLightValue(final IBlockAccess paramIBlockAccess, final int paramInt1, final int paramInt2, - final int paramInt3) { - return TF_Fluids.fluidPyrotheum.getLuminosity(); - } - - @Override - public int getFireSpreadSpeed(final IBlockAccess paramIBlockAccess, final int paramInt1, final int paramInt2, - final int paramInt3, final ForgeDirection paramForgeDirection) { - return effect ? 800 : 0; - } - - @Override - public int getFlammability(final IBlockAccess paramIBlockAccess, final int paramInt1, final int paramInt2, - final int paramInt3, final ForgeDirection paramForgeDirection) { - return 0; - } - - @Override - public boolean isFlammable(final IBlockAccess paramIBlockAccess, final int paramInt1, final int paramInt2, - final int paramInt3, final ForgeDirection paramForgeDirection) { - return (effect) && (paramForgeDirection.ordinal() > ForgeDirection.UP.ordinal()) - && (paramIBlockAccess.getBlock(paramInt1, paramInt2 - 1, paramInt3) != this); - } - - @Override - public boolean isFireSource(final World paramWorld, final int paramInt1, final int paramInt2, final int paramInt3, - final ForgeDirection paramForgeDirection) { - return effect; - } - - @Override - public void updateTick(final World paramWorld, final int paramInt1, final int paramInt2, final int paramInt3, - final Random paramRandom) { - if (effect) { - this.checkForInteraction(paramWorld, paramInt1, paramInt2, paramInt3); - } - if ((enableSourceFall) && (paramWorld.getBlockMetadata(paramInt1, paramInt2, paramInt3) == 0)) { - final Block localBlock = paramWorld.getBlock(paramInt1, paramInt2 + this.densityDir, paramInt3); - final int i = paramWorld.getBlockMetadata(paramInt1, paramInt2 + this.densityDir, paramInt3); - if (((localBlock == this) && (i != 0)) || (localBlock - .isFlammable(paramWorld, paramInt1, paramInt2 + this.densityDir, paramInt3, ForgeDirection.UP))) { - paramWorld.setBlock(paramInt1, paramInt2 + this.densityDir, paramInt3, this, 0, 3); - paramWorld.setBlockToAir(paramInt1, paramInt2, paramInt3); - return; - } - } - super.updateTick(paramWorld, paramInt1, paramInt2, paramInt3, paramRandom); - } - - protected void checkForInteraction(final World paramWorld, final int paramInt1, final int paramInt2, - final int paramInt3) { - if (paramWorld.getBlock(paramInt1, paramInt2, paramInt3) != this) { - return; - } - int i = paramInt1; - int j = paramInt2; - int k = paramInt3; - for (int m = 0; m < 6; m++) { - i = paramInt1 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][0]; - j = paramInt2 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][1]; - k = paramInt3 + cofh.lib.util.helpers.BlockHelper.SIDE_COORD_MOD[m][2]; - - this.interactWithBlock(paramWorld, i, j, k); - } - this.interactWithBlock(paramWorld, paramInt1 - 1, paramInt2, paramInt3 - 1); - this.interactWithBlock(paramWorld, paramInt1 - 1, paramInt2, paramInt3 + 1); - this.interactWithBlock(paramWorld, paramInt1 + 1, paramInt2, paramInt3 - 1); - this.interactWithBlock(paramWorld, paramInt1 + 1, paramInt2, paramInt3 + 1); - } - - protected void interactWithBlock(final World paramWorld, final int paramInt1, final int paramInt2, - final int paramInt3) { - final Block localBlock = paramWorld.getBlock(paramInt1, paramInt2, paramInt3); - if ((localBlock == Blocks.air) || (localBlock == this)) { - return; - } - final int i = paramWorld.getBlockMetadata(paramInt1, paramInt2, paramInt3); - if (this.hasInteraction(localBlock, i)) { - final BlockWrapper localBlockWrapper = this.getInteraction(localBlock, i); - paramWorld - .setBlock(paramInt1, paramInt2, paramInt3, localBlockWrapper.block, localBlockWrapper.metadata, 3); - this.triggerInteractionEffects(paramWorld, paramInt1, paramInt2, paramInt3); - } else if (localBlock.isFlammable(paramWorld, paramInt1, paramInt2, paramInt3, ForgeDirection.UP)) { - paramWorld.setBlock(paramInt1, paramInt2, paramInt3, Blocks.fire); - } else if ((paramWorld.isSideSolid(paramInt1, paramInt2, paramInt3, ForgeDirection.UP)) - && (paramWorld.isAirBlock(paramInt1, paramInt2 + 1, paramInt3))) { - paramWorld.setBlock(paramInt1, paramInt2 + 1, paramInt3, Blocks.fire, 0, 3); - } - } - - protected void triggerInteractionEffects(final World paramWorld, final int paramInt1, final int paramInt2, - final int paramInt3) { - if (this.random.nextInt(16) == 0) { - paramWorld.playSoundEffect( - paramInt1 + 0.5F, - paramInt2 + 0.5F, - paramInt3 + 0.5F, - "random.fizz", - 0.5F, - 2.2F + ((paramWorld.rand.nextFloat() - paramWorld.rand.nextFloat()) * 0.8F)); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Blocks.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Blocks.java deleted file mode 100644 index 38fed4c137..0000000000 --- a/src/main/java/gtPlusPlus/xmod/thermalfoundation/block/TF_Blocks.java +++ /dev/null @@ -1,23 +0,0 @@ -package gtPlusPlus.xmod.thermalfoundation.block; - -import cofh.core.fluid.BlockFluidCoFHBase; - -public class TF_Blocks { - - public static BlockFluidCoFHBase blockFluidPyrotheum; - public static BlockFluidCoFHBase blockFluidCryotheum; - public static BlockFluidCoFHBase blockFluidEnder; - - public static void preInit() { - blockFluidPyrotheum = new TF_Block_Fluid_Pyrotheum(); - blockFluidCryotheum = new TF_Block_Fluid_Cryotheum(); - blockFluidEnder = new TF_Block_Fluid_Ender(); - blockFluidPyrotheum.preInit(); - blockFluidCryotheum.preInit(); - blockFluidEnder.preInit(); - } - - public static void init() {} - - public static void postInit() {} -} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/fluid/TFFluids.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/fluid/TFFluids.java new file mode 100644 index 0000000000..61832d630d --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/thermalfoundation/fluid/TFFluids.java @@ -0,0 +1,29 @@ +package gtPlusPlus.xmod.thermalfoundation.fluid; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import gtPlusPlus.api.objects.Logger; + +public class TFFluids { + + public static Fluid fluidPyrotheum; + public static Fluid fluidCryotheum; + public static Fluid fluidEnder; + + public static void preInit() { + Logger.INFO("Adding in our own versions of Thermal Foundation Fluids - Non-GT"); + final Fluid pyrotheum = FluidRegistry.getFluid("pyrotheum"); + final Fluid cryotheum = FluidRegistry.getFluid("cryotheum"); + final Fluid ender = FluidRegistry.getFluid("ender"); + + fluidPyrotheum = pyrotheum; + fluidCryotheum = cryotheum; + fluidEnder = ender; + + } + + public static void init() {} + + public static void postInit() {} +} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/fluid/TF_Fluids.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/fluid/TF_Fluids.java deleted file mode 100644 index 63d0c49b2f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/thermalfoundation/fluid/TF_Fluids.java +++ /dev/null @@ -1,29 +0,0 @@ -package gtPlusPlus.xmod.thermalfoundation.fluid; - -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; - -import gtPlusPlus.api.objects.Logger; - -public class TF_Fluids { - - public static Fluid fluidPyrotheum; - public static Fluid fluidCryotheum; - public static Fluid fluidEnder; - - public static void preInit() { - Logger.INFO("Adding in our own versions of Thermal Foundation Fluids - Non-GT"); - final Fluid pyrotheum = FluidRegistry.getFluid("pyrotheum"); - final Fluid cryotheum = FluidRegistry.getFluid("cryotheum"); - final Fluid ender = FluidRegistry.getFluid("ender"); - - fluidPyrotheum = pyrotheum; - fluidCryotheum = cryotheum; - fluidEnder = ender; - - } - - public static void init() {} - - public static void postInit() {} -} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/item/TFItems.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/item/TFItems.java new file mode 100644 index 0000000000..556b11483f --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/thermalfoundation/item/TFItems.java @@ -0,0 +1,75 @@ +package gtPlusPlus.xmod.thermalfoundation.item; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidContainerRegistry; + +import cofh.core.item.ItemBase; +import cofh.core.item.ItemBucket; +import cofh.core.util.energy.FurnaceFuelHandler; +import cofh.core.util.fluid.BucketHandler; +import gtPlusPlus.core.creative.AddToCreativeTab; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtPlusPlus.core.util.reflect.ReflectionUtils; +import gtPlusPlus.xmod.thermalfoundation.block.TFBlocks; +import gtPlusPlus.xmod.thermalfoundation.fluid.TFFluids; + +public class TFItems { + + public static ItemBase itemMaterial; + public static ItemStack rodBlizz; + public static ItemStack dustBlizz; + public static ItemStack dustPyrotheum; + public static ItemStack dustCryotheum; + public static ItemBucket itemBucket; + public static ItemStack bucketPyrotheum; + public static ItemStack bucketCryotheum; + public static ItemStack bucketEnder; + + public static ItemStack itemDustBlizz; + public static ItemStack itemDustPyrotheum; + public static ItemStack itemDustCryotheum; + public static ItemStack itemRodBlizz; + + public static void preInit() { + + itemBucket = (ItemBucket) new ItemBucket("MiscUtils").setUnlocalizedName("bucket") + .setCreativeTab(AddToCreativeTab.tabMisc); + itemMaterial = (ItemBase) new ItemBase("MiscUtils").setUnlocalizedName("material") + .setCreativeTab(AddToCreativeTab.tabMisc); + + bucketPyrotheum = itemBucket.addOreDictItem(1, "bucketPyrotheum"); + bucketCryotheum = itemBucket.addOreDictItem(2, "bucketCryotheum"); + bucketEnder = itemBucket.addOreDictItem(3, "bucketEnder", 1); + rodBlizz = itemMaterial.addOreDictItem(1, "rodBlizz"); + dustBlizz = itemMaterial.addOreDictItem(2, "dustBlizz"); + dustPyrotheum = itemMaterial.addOreDictItem(3, "dustPyrotheum"); + dustCryotheum = itemMaterial.addOreDictItem(4, "dustCryotheum"); + + if (ReflectionUtils.doesClassExist("cofh.core.util.energy.FurnaceFuelHandler")) { + FurnaceFuelHandler.registerFuel(dustPyrotheum, 2400); // cofh.core.util.energy.FurnaceFuelHandler.registerFuel(ItemStack, + // int) + } + + ItemUtils.addItemToOreDictionary(rodBlizz, "stickBlizz"); + + itemRodBlizz = ItemUtils.simpleMetaStack(itemMaterial, 1, 1); + itemDustBlizz = ItemUtils.simpleMetaStack(itemMaterial, 2, 1); + itemDustPyrotheum = ItemUtils.simpleMetaStack(itemMaterial, 3, 1); + itemDustCryotheum = ItemUtils.simpleMetaStack(itemMaterial, 4, 1); + } + + public static void init() { + + BucketHandler.registerBucket(TFBlocks.blockFluidPyrotheum, 0, bucketPyrotheum); + BucketHandler.registerBucket(TFBlocks.blockFluidCryotheum, 0, bucketCryotheum); + BucketHandler.registerBucket(TFBlocks.blockFluidEnder, 0, bucketEnder); + FluidContainerRegistry + .registerFluidContainer(TFFluids.fluidPyrotheum, bucketPyrotheum, FluidContainerRegistry.EMPTY_BUCKET); + FluidContainerRegistry + .registerFluidContainer(TFFluids.fluidCryotheum, bucketCryotheum, FluidContainerRegistry.EMPTY_BUCKET); + FluidContainerRegistry + .registerFluidContainer(TFFluids.fluidEnder, bucketEnder, FluidContainerRegistry.EMPTY_BUCKET); + } + + public static void postInit() {} +} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/item/TF_Items.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/item/TF_Items.java deleted file mode 100644 index d2ea7ea2d1..0000000000 --- a/src/main/java/gtPlusPlus/xmod/thermalfoundation/item/TF_Items.java +++ /dev/null @@ -1,75 +0,0 @@ -package gtPlusPlus.xmod.thermalfoundation.item; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidContainerRegistry; - -import cofh.core.item.ItemBase; -import cofh.core.item.ItemBucket; -import cofh.core.util.energy.FurnaceFuelHandler; -import cofh.core.util.fluid.BucketHandler; -import gtPlusPlus.core.creative.AddToCreativeTab; -import gtPlusPlus.core.util.minecraft.ItemUtils; -import gtPlusPlus.core.util.reflect.ReflectionUtils; -import gtPlusPlus.xmod.thermalfoundation.block.TF_Blocks; -import gtPlusPlus.xmod.thermalfoundation.fluid.TF_Fluids; - -public class TF_Items { - - public static ItemBase itemMaterial; - public static ItemStack rodBlizz; - public static ItemStack dustBlizz; - public static ItemStack dustPyrotheum; - public static ItemStack dustCryotheum; - public static ItemBucket itemBucket; - public static ItemStack bucketPyrotheum; - public static ItemStack bucketCryotheum; - public static ItemStack bucketEnder; - - public static ItemStack itemDustBlizz; - public static ItemStack itemDustPyrotheum; - public static ItemStack itemDustCryotheum; - public static ItemStack itemRodBlizz; - - public static void preInit() { - - itemBucket = (ItemBucket) new ItemBucket("MiscUtils").setUnlocalizedName("bucket") - .setCreativeTab(AddToCreativeTab.tabMisc); - itemMaterial = (ItemBase) new ItemBase("MiscUtils").setUnlocalizedName("material") - .setCreativeTab(AddToCreativeTab.tabMisc); - - bucketPyrotheum = itemBucket.addOreDictItem(1, "bucketPyrotheum"); - bucketCryotheum = itemBucket.addOreDictItem(2, "bucketCryotheum"); - bucketEnder = itemBucket.addOreDictItem(3, "bucketEnder", 1); - rodBlizz = itemMaterial.addOreDictItem(1, "rodBlizz"); - dustBlizz = itemMaterial.addOreDictItem(2, "dustBlizz"); - dustPyrotheum = itemMaterial.addOreDictItem(3, "dustPyrotheum"); - dustCryotheum = itemMaterial.addOreDictItem(4, "dustCryotheum"); - - if (ReflectionUtils.doesClassExist("cofh.core.util.energy.FurnaceFuelHandler")) { - FurnaceFuelHandler.registerFuel(dustPyrotheum, 2400); // cofh.core.util.energy.FurnaceFuelHandler.registerFuel(ItemStack, - // int) - } - - ItemUtils.addItemToOreDictionary(rodBlizz, "stickBlizz"); - - itemRodBlizz = ItemUtils.simpleMetaStack(itemMaterial, 1, 1); - itemDustBlizz = ItemUtils.simpleMetaStack(itemMaterial, 2, 1); - itemDustPyrotheum = ItemUtils.simpleMetaStack(itemMaterial, 3, 1); - itemDustCryotheum = ItemUtils.simpleMetaStack(itemMaterial, 4, 1); - } - - public static void init() { - - BucketHandler.registerBucket(TF_Blocks.blockFluidPyrotheum, 0, bucketPyrotheum); - BucketHandler.registerBucket(TF_Blocks.blockFluidCryotheum, 0, bucketCryotheum); - BucketHandler.registerBucket(TF_Blocks.blockFluidEnder, 0, bucketEnder); - FluidContainerRegistry - .registerFluidContainer(TF_Fluids.fluidPyrotheum, bucketPyrotheum, FluidContainerRegistry.EMPTY_BUCKET); - FluidContainerRegistry - .registerFluidContainer(TF_Fluids.fluidCryotheum, bucketCryotheum, FluidContainerRegistry.EMPTY_BUCKET); - FluidContainerRegistry - .registerFluidContainer(TF_Fluids.fluidEnder, bucketEnder, FluidContainerRegistry.EMPTY_BUCKET); - } - - public static void postInit() {} -} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/recipe/TFGregtechRecipes.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/recipe/TFGregtechRecipes.java new file mode 100644 index 0000000000..52b85d6a19 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/thermalfoundation/recipe/TFGregtechRecipes.java @@ -0,0 +1,93 @@ +package gtPlusPlus.xmod.thermalfoundation.recipe; + +import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; +import gtPlusPlus.core.util.minecraft.FluidUtils; + +public class TFGregtechRecipes { + + public static void run() { + start(); + } + + private static void start() { + + final FluidStack moltenBlaze = getFluidStack("molten.blaze", 1440); + + // Gelid Cryotheum + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.ore, Materials.Cinnabar, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cinnabar, 3L)) + .fluidInputs(getFluidStack("cryotheum", 144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(chemicalBathRecipes); + + // Blizz Powder + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Items.snowball, 4)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blizz, 1L)) + .fluidInputs(moltenBlaze) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV / 2) + .addTo(chemicalBathRecipes); + + // Blizz Rod + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Items.blaze_rod)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.stick, Materials.Blizz, 1L)) + .duration(((int) Math.max((Materials.Blaze.getMass() * 4) * 3L, 1L)) * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(vacuumFreezerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Pyrotheum, 1L)) + .duration(8 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Snow, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blizz, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cryotheum, 1L)) + .duration(8 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Niter, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Snow, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blizz, 1L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cryotheum, 1L)) + .duration(8 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + } + + private static FluidStack getFluidStack(final String fluidName, final int amount) { + return FluidUtils.getFluidStack(fluidName, amount); + } +} diff --git a/src/main/java/gtPlusPlus/xmod/thermalfoundation/recipe/TF_Gregtech_Recipes.java b/src/main/java/gtPlusPlus/xmod/thermalfoundation/recipe/TF_Gregtech_Recipes.java deleted file mode 100644 index cd48964d37..0000000000 --- a/src/main/java/gtPlusPlus/xmod/thermalfoundation/recipe/TF_Gregtech_Recipes.java +++ /dev/null @@ -1,93 +0,0 @@ -package gtPlusPlus.xmod.thermalfoundation.recipe; - -import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; -import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; - -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_OreDictUnificator; -import gtPlusPlus.core.util.minecraft.FluidUtils; - -public class TF_Gregtech_Recipes { - - public static void run() { - start(); - } - - private static void start() { - - final FluidStack moltenBlaze = getFluidStack("molten.blaze", 1440); - - // Gelid Cryotheum - GT_Values.RA.stdBuilder() - .itemInputs(GT_OreDictUnificator.get(OrePrefixes.ore, Materials.Cinnabar, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cinnabar, 3L)) - .fluidInputs(getFluidStack("cryotheum", 144)) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_LV) - .addTo(chemicalBathRecipes); - - // Blizz Powder - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Items.snowball, 4)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blizz, 1L)) - .fluidInputs(moltenBlaze) - .duration(20 * SECONDS) - .eut(TierEU.RECIPE_HV / 2) - .addTo(chemicalBathRecipes); - - // Blizz Rod - GT_Values.RA.stdBuilder() - .itemInputs(new ItemStack(Items.blaze_rod)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.stick, Materials.Blizz, 1L)) - .duration(((int) Math.max((Materials.Blaze.getMass() * 4) * 3L, 1L)) * TICKS) - .eut(TierEU.RECIPE_MV) - .addTo(vacuumFreezerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Coal, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Sulfur, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Pyrotheum, 1L)) - .duration(8 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Saltpeter, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Snow, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blizz, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cryotheum, 1L)) - .duration(8 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - - GT_Values.RA.stdBuilder() - .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Niter, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Snow, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Redstone, 1L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Blizz, 1L)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Cryotheum, 1L)) - .duration(8 * SECONDS) - .eut(TierEU.RECIPE_MV) - .addTo(mixerRecipes); - } - - private static FluidStack getFluidStack(final String fluidName, final int amount) { - return FluidUtils.getFluidStack(fluidName, amount); - } -} diff --git a/src/main/java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java b/src/main/java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java deleted file mode 100644 index 1023d0325f..0000000000 --- a/src/main/java/gtPlusPlus/xmod/tinkers/HANDLER_Tinkers.java +++ /dev/null @@ -1,30 +0,0 @@ -package gtPlusPlus.xmod.tinkers; - -import static gregtech.api.enums.Mods.TinkerConstruct; - -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; - -import gtPlusPlus.api.objects.data.AutoMap; -import gtPlusPlus.xmod.tinkers.material.BaseTinkersMaterial; -import gtPlusPlus.xmod.tinkers.util.TinkersDryingRecipe; -import gtPlusPlus.xmod.tinkers.util.TinkersUtils; - -public class HANDLER_Tinkers { - - public static AutoMap mTinkerMaterials = new AutoMap<>(); - - public static void postInit() { - if (TinkerConstruct.isModLoaded()) { - - Fluid pyrotheumFluid = FluidRegistry.getFluid("pyrotheum"); - if (pyrotheumFluid != null) { - // Enable Pyrotheum as Fuel for the Smeltery - TinkersUtils.addSmelteryFuel(pyrotheumFluid, 5000, 70); // pyrotheum lasts 3.5 seconds per 15 mb - } - - // Generate Drying Rack recipes - TinkersDryingRecipe.generateAllDryingRecipes(); - } - } -} diff --git a/src/main/java/gtPlusPlus/xmod/tinkers/HandlerTinkers.java b/src/main/java/gtPlusPlus/xmod/tinkers/HandlerTinkers.java new file mode 100644 index 0000000000..5dbde33493 --- /dev/null +++ b/src/main/java/gtPlusPlus/xmod/tinkers/HandlerTinkers.java @@ -0,0 +1,30 @@ +package gtPlusPlus.xmod.tinkers; + +import static gregtech.api.enums.Mods.TinkerConstruct; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.xmod.tinkers.material.BaseTinkersMaterial; +import gtPlusPlus.xmod.tinkers.util.TinkersDryingRecipe; +import gtPlusPlus.xmod.tinkers.util.TinkersUtils; + +public class HandlerTinkers { + + public static AutoMap mTinkerMaterials = new AutoMap<>(); + + public static void postInit() { + if (TinkerConstruct.isModLoaded()) { + + Fluid pyrotheumFluid = FluidRegistry.getFluid("pyrotheum"); + if (pyrotheumFluid != null) { + // Enable Pyrotheum as Fuel for the Smeltery + TinkersUtils.addSmelteryFuel(pyrotheumFluid, 5000, 70); // pyrotheum lasts 3.5 seconds per 15 mb + } + + // Generate Drying Rack recipes + TinkersDryingRecipe.generateAllDryingRecipes(); + } + } +} diff --git a/src/main/java/gtPlusPlus/xmod/tinkers/material/BaseTinkersMaterial.java b/src/main/java/gtPlusPlus/xmod/tinkers/material/BaseTinkersMaterial.java index f57aa64263..5a4984a898 100644 --- a/src/main/java/gtPlusPlus/xmod/tinkers/material/BaseTinkersMaterial.java +++ b/src/main/java/gtPlusPlus/xmod/tinkers/material/BaseTinkersMaterial.java @@ -15,7 +15,7 @@ import cpw.mods.fml.common.event.FMLInterModComms; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.core.material.Material; import gtPlusPlus.core.util.Utils; -import gtPlusPlus.xmod.tinkers.HANDLER_Tinkers; +import gtPlusPlus.xmod.tinkers.HandlerTinkers; import gtPlusPlus.xmod.tinkers.util.TinkersUtils; public class BaseTinkersMaterial { @@ -40,7 +40,7 @@ public class BaseTinkersMaterial { mID = aNextFreeID++; Logger.INFO("[TiCon] Assigning ID " + mID + " to " + mLocalName + "."); aInternalMaterialIdMap.put(mUnlocalName, mID); - HANDLER_Tinkers.mTinkerMaterials.put(this); + HandlerTinkers.mTinkerMaterials.put(this); } public String getUnlocalName() { diff --git a/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java b/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java index 44fb9d12b7..4adac363e8 100644 --- a/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java +++ b/src/main/java/gtPlusPlus/xmod/tinkers/util/TinkersDryingRecipe.java @@ -9,9 +9,9 @@ import java.util.List; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import gtPlusPlus.api.objects.Logger; import gtPlusPlus.api.objects.data.AutoMap; import gtPlusPlus.core.util.reflect.ReflectionUtils; @@ -42,8 +42,8 @@ public class TinkersDryingRecipe { if (!recipes.isEmpty()) { Logger.INFO("Adding " + recipes.size() + " drying rack recipes to the dehydrator."); for (TinkersDryingRecipe r : recipes) { - GT_Values.RA.stdBuilder() - .itemInputs(GT_Utility.getIntegratedCircuit(16), r.input) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(16), r.input) .itemOutputs(r.result) .eut(TierEU.RECIPE_LV) .duration(r.time / 10) diff --git a/src/main/java/gtneioreplugin/Config.java b/src/main/java/gtneioreplugin/Config.java new file mode 100644 index 0000000000..17ac9af423 --- /dev/null +++ b/src/main/java/gtneioreplugin/Config.java @@ -0,0 +1,28 @@ +package gtneioreplugin; + +@com.gtnewhorizon.gtnhlib.config.Config( + modid = GTNEIOrePlugin.MODID, + category = "general", + filename = GTNEIOrePlugin.MODID) +public class Config { + + @com.gtnewhorizon.gtnhlib.config.Config.Comment("if true, generate both csv files.") + @com.gtnewhorizon.gtnhlib.config.Config.DefaultBoolean(false) + @com.gtnewhorizon.gtnhlib.config.Config.RequiresMcRestart + public static boolean printCsv; + + @com.gtnewhorizon.gtnhlib.config.Config.Comment("the name of the file you want for the ore sheet, it'll appear at the root of your instance.") + @com.gtnewhorizon.gtnhlib.config.Config.DefaultString("GTNH-Oresheet.csv") + @com.gtnewhorizon.gtnhlib.config.Config.RequiresMcRestart + public static String CSVName; + + @com.gtnewhorizon.gtnhlib.config.Config.Comment("the name of the file you want for the small ore sheet, it'll appear at the root of your instance.") + @com.gtnewhorizon.gtnhlib.config.Config.DefaultString("GTNH-Small-Ores-Sheet.csv") + @com.gtnewhorizon.gtnhlib.config.Config.RequiresMcRestart + public static String CSVnameSmall; + + @com.gtnewhorizon.gtnhlib.config.Config.Comment("Maximum number of lines the dimension names tooltip can have before it wraps around.") + @com.gtnewhorizon.gtnhlib.config.Config.DefaultInt(11) + @com.gtnewhorizon.gtnhlib.config.Config.RequiresMcRestart + public static int maxTooltipLines; +} diff --git a/src/main/java/gtneioreplugin/GTNEIOrePlugin.java b/src/main/java/gtneioreplugin/GTNEIOrePlugin.java new file mode 100644 index 0000000000..6a168a8070 --- /dev/null +++ b/src/main/java/gtneioreplugin/GTNEIOrePlugin.java @@ -0,0 +1,84 @@ +package gtneioreplugin; + +import java.io.File; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import com.gtnewhorizon.gtnhlib.config.ConfigException; +import com.gtnewhorizon.gtnhlib.config.ConfigurationManager; + +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.EventHandler; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLLoadCompleteEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import gregtech.GT_Version; +import gtneioreplugin.plugin.IMCForNEI; +import gtneioreplugin.plugin.block.ModBlocks; +import gtneioreplugin.util.CSVMaker; +import gtneioreplugin.util.GT5OreLayerHelper; +import gtneioreplugin.util.GT5OreSmallHelper; +import gtneioreplugin.util.GT5UndergroundFluidHelper; + +@Mod( + modid = GTNEIOrePlugin.MODID, + name = GTNEIOrePlugin.NAME, + version = GTNEIOrePlugin.VERSION, + dependencies = "required-after:gregtech;required-after:NotEnoughItems") +public class GTNEIOrePlugin { + + static { + try { + ConfigurationManager.registerConfig(Config.class); + } catch (ConfigException e) { + throw new RuntimeException(e); + } + } + + public static final String MODID = "gtneioreplugin"; + public static final String NAME = "GT NEI Ore Plugin GT:NH Mod"; + public static final String VERSION = GT_Version.VERSION; + public static final Logger LOG = LogManager.getLogger(NAME); + public static File instanceDir; + public static final CreativeTabs creativeTab = new CreativeTabs(MODID) { + + @Override + public Item getTabIconItem() { + return GameRegistry.makeItemStack("gregtech:gt.blockores", 386, 1, null) + .getItem(); + } + }; + + @Mod.Instance(MODID) + public static GTNEIOrePlugin instance; + + @EventHandler + public void preinit(FMLPreInitializationEvent event) { + instanceDir = event.getModConfigurationDirectory() + .getParentFile(); + } + + @EventHandler + public void init(FMLInitializationEvent event) { + ModBlocks.init(); + IMCForNEI.IMCSender(); + } + + @EventHandler + public void onLoadComplete(FMLLoadCompleteEvent event) { + GT5OreLayerHelper.init(); + GT5OreSmallHelper.init(); + GT5UndergroundFluidHelper.init(); + if (event.getSide() == Side.CLIENT) { + if (Config.printCsv) { + new CSVMaker().run(); + } + } + } +} diff --git a/src/main/java/gtneioreplugin/plugin/IMCForNEI.java b/src/main/java/gtneioreplugin/plugin/IMCForNEI.java new file mode 100644 index 0000000000..620140c630 --- /dev/null +++ b/src/main/java/gtneioreplugin/plugin/IMCForNEI.java @@ -0,0 +1,52 @@ +package gtneioreplugin.plugin; + +import net.minecraft.nbt.NBTTagCompound; + +import cpw.mods.fml.common.event.FMLInterModComms; +import gtneioreplugin.GTNEIOrePlugin; + +public class IMCForNEI { + + public static void IMCSender() { + // Though these 2 are already registered in NEI jar, we need to re-register + // because new DimensionDisplayItems made tabs a bit taller. + sendHandler("gregtech5.plugin.gtneioreplugin.PluginGT5VeinStat", "gregtech:gt.blockores:386"); + + sendHandler("gregtech5.plugin.gtneioreplugin.PluginGT5SmallOreStat", "gregtech:gt.blockores:85"); + + sendHandler("gregtech5.plugin.gtneioreplugin.PluginGT5UndergroundFluid", "gregtech:gt.metaitem.01:32619"); + sendCatalyst("gregtech5.plugin.gtneioreplugin.PluginGT5UndergroundFluid", "gregtech:gt.blockmachines:1157"); + sendCatalyst("gregtech5.plugin.gtneioreplugin.PluginGT5UndergroundFluid", "gregtech:gt.blockmachines:141"); + sendCatalyst("gregtech5.plugin.gtneioreplugin.PluginGT5UndergroundFluid", "gregtech:gt.blockmachines:142"); + sendCatalyst("gregtech5.plugin.gtneioreplugin.PluginGT5UndergroundFluid", "gregtech:gt.blockmachines:149"); + sendCatalyst("gregtech5.plugin.gtneioreplugin.PluginGT5UndergroundFluid", "gregtech:gt.blockmachines:148"); + } + + private static void sendHandler(String name, String itemStack) { + NBTTagCompound aNBT = new NBTTagCompound(); + aNBT.setString("handler", name); + aNBT.setString("modName", GTNEIOrePlugin.NAME); + aNBT.setString("modId", GTNEIOrePlugin.MODID); + aNBT.setBoolean("modRequired", true); + aNBT.setString("itemName", itemStack); + aNBT.setInteger("handlerHeight", 160); + aNBT.setInteger("handlerWidth", 166); + aNBT.setInteger("maxRecipesPerPage", 2); + aNBT.setInteger("yShift", 0); + FMLInterModComms.sendMessage("NotEnoughItems", "registerHandlerInfo", aNBT); + } + + @SuppressWarnings("SameParameterValue") + private static void sendCatalyst(String name, String itemStack, int priority) { + NBTTagCompound aNBT = new NBTTagCompound(); + aNBT.setString("handlerID", name); + aNBT.setString("itemName", itemStack); + aNBT.setInteger("priority", priority); + FMLInterModComms.sendMessage("NotEnoughItems", "registerCatalystInfo", aNBT); + } + + @SuppressWarnings("SameParameterValue") + private static void sendCatalyst(String name, String itemStack) { + sendCatalyst(name, itemStack, 0); + } +} diff --git a/src/main/java/gtneioreplugin/plugin/NEIPluginConfig.java b/src/main/java/gtneioreplugin/plugin/NEIPluginConfig.java new file mode 100644 index 0000000000..8ce07c124c --- /dev/null +++ b/src/main/java/gtneioreplugin/plugin/NEIPluginConfig.java @@ -0,0 +1,35 @@ +package gtneioreplugin.plugin; + +import codechicken.nei.api.API; +import codechicken.nei.api.IConfigureNEI; +import gtneioreplugin.GTNEIOrePlugin; +import gtneioreplugin.plugin.gregtech5.PluginGT5SmallOreStat; +import gtneioreplugin.plugin.gregtech5.PluginGT5UndergroundFluid; +import gtneioreplugin.plugin.gregtech5.PluginGT5VeinStat; + +@SuppressWarnings("unused") +public class NEIPluginConfig implements IConfigureNEI { + + @Override + public String getName() { + return "GregTech Ore Plugin"; + } + + @Override + public String getVersion() { + return GTNEIOrePlugin.VERSION; + } + + @Override + public void loadConfig() { + PluginGT5VeinStat pluginVeinStat = new PluginGT5VeinStat(); + PluginGT5SmallOreStat pluginSmallOreStat = new PluginGT5SmallOreStat(); + PluginGT5UndergroundFluid pluginGT5UndergroundFluid = new PluginGT5UndergroundFluid(); + API.registerRecipeHandler(pluginVeinStat); + API.registerUsageHandler(pluginVeinStat); + API.registerRecipeHandler(pluginSmallOreStat); + API.registerUsageHandler(pluginSmallOreStat); + API.registerRecipeHandler(pluginGT5UndergroundFluid); + API.registerUsageHandler(pluginGT5UndergroundFluid); + } +} diff --git a/src/main/java/gtneioreplugin/plugin/PluginBase.java b/src/main/java/gtneioreplugin/plugin/PluginBase.java new file mode 100644 index 0000000000..065046f74b --- /dev/null +++ b/src/main/java/gtneioreplugin/plugin/PluginBase.java @@ -0,0 +1,52 @@ +package gtneioreplugin.plugin; + +import java.awt.Rectangle; + +import net.minecraft.client.resources.I18n; +import net.minecraft.util.EnumChatFormatting; + +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.recipe.TemplateRecipeHandler; + +public abstract class PluginBase extends TemplateRecipeHandler { + + @Override + public int recipiesPerPage() { + return 1; + } + + @Override + public String getRecipeName() { + return null; + } + + @Override + public String getGuiTexture() { + return "gtneioreplugin:textures/gui/nei/guiBase.png"; + } + + @Override + public void loadTransferRects() { + int stringLength = GuiDraw.getStringWidth(EnumChatFormatting.BOLD + I18n.format("gtnop.gui.nei.seeAll")); + transferRects.add( + new RecipeTransferRect(new Rectangle(getGuiWidth() - stringLength - 3, 5, stringLength, 9), getOutputId())); + } + + public abstract String getOutputId(); + + public int getGuiWidth() { + return 166; + } + + /** + * Draw the "see all recipes" transfer label + */ + protected void drawSeeAllRecipesLabel() { + GuiDraw.drawStringR( + EnumChatFormatting.BOLD + I18n.format("gtnop.gui.nei.seeAll"), + getGuiWidth() - 3, + 5, + 0x404040, + false); + } +} diff --git a/src/main/java/gtneioreplugin/plugin/block/BlockDimensionDisplay.java b/src/main/java/gtneioreplugin/plugin/block/BlockDimensionDisplay.java new file mode 100644 index 0000000000..055172ebe4 --- /dev/null +++ b/src/main/java/gtneioreplugin/plugin/block/BlockDimensionDisplay.java @@ -0,0 +1,47 @@ +package gtneioreplugin.plugin.block; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.util.MathHelper; + +import gtneioreplugin.plugin.renderer.ItemDimensionDisplayRenderer; + +public class BlockDimensionDisplay extends Block { + + private final String dimension; + + @SuppressWarnings("unused") + public long getDimensionRocketTier() { + return this.dimensionRocketTier; + } + + private final long dimensionRocketTier; + private final IIcon[] icons = new IIcon[6]; + + public BlockDimensionDisplay(String dimension) { + super(Material.rock); + this.dimension = dimension; + this.dimensionRocketTier = ItemDimensionDisplayRenderer.getPrefix(dimension); + } + + @Override + public IIcon getIcon(int side, int meta) { + return this.icons[MathHelper.clamp_int(side, 0, 5)]; + } + + @Override + public void registerBlockIcons(IIconRegister iconRegister) { + this.icons[0] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_bottom"); + this.icons[1] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_top"); + this.icons[2] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_back"); + this.icons[3] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_front"); + this.icons[4] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_left"); + this.icons[5] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_right"); + } + + public String getDimension() { + return this.dimension; + } +} diff --git a/src/main/java/gtneioreplugin/plugin/block/ModBlocks.java b/src/main/java/gtneioreplugin/plugin/block/ModBlocks.java new file mode 100644 index 0000000000..df3f59f355 --- /dev/null +++ b/src/main/java/gtneioreplugin/plugin/block/ModBlocks.java @@ -0,0 +1,27 @@ +package gtneioreplugin.plugin.block; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.block.Block; + +import cpw.mods.fml.common.registry.GameRegistry; +import gtneioreplugin.plugin.item.ItemDimensionDisplay; +import gtneioreplugin.util.DimensionHelper; + +public class ModBlocks { + + public static final Map blocks = new HashMap<>(); + + public static void init() { + for (String dimension : DimensionHelper.DimNameDisplayed) { + Block block = new BlockDimensionDisplay(dimension); + GameRegistry.registerBlock(block, ItemDimensionDisplay.class, "blockDimensionDisplay_" + dimension); + blocks.put(dimension, block); + } + } + + public static Block getBlock(String dimension) { + return blocks.get(dimension); + } +} diff --git a/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5Base.java b/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5Base.java new file mode 100644 index 0000000000..86117f099a --- /dev/null +++ b/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5Base.java @@ -0,0 +1,65 @@ +package gtneioreplugin.plugin.gregtech5; + +import net.minecraft.client.resources.I18n; + +import codechicken.lib.gui.GuiDraw; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.util.GTLanguageManager; +import gtneioreplugin.plugin.PluginBase; + +public abstract class PluginGT5Base extends PluginBase { + + protected static String getLocalizedNameForItem(Materials aMaterial, String aFormat) { + return String.format( + aFormat.replace("%s", "%temp") + .replace("%material", "%s"), + aMaterial.mLocalizedName) + .replace("%temp", "%s"); + } + + protected static String getLocalizedNameForItem(String aFormat, int aMaterialID) { + if (aMaterialID >= 0 && aMaterialID < 1000) { + Materials aMaterial = GregTechAPI.sGeneratedMaterials[aMaterialID]; + if (aMaterial != null) { + return getLocalizedNameForItem(aMaterial, aFormat); + } + } + return aFormat; + } + + public static String getGTOreLocalizedName(short index) { + + if (!getLocalizedNameForItem(GTLanguageManager.getTranslation(getGTOreUnlocalizedName(index)), index % 1000) + .contains("Awakened")) + return getLocalizedNameForItem( + GTLanguageManager.getTranslation(getGTOreUnlocalizedName(index)), + index % 1000); + else return "Aw. Draconium Ore"; + } + + protected static String getGTOreUnlocalizedName(short index) { + return "gt.blockores." + index + ".name"; + } + + static void drawLine(String lineKey, String value, int x, int y) { + GuiDraw.drawString(I18n.format(lineKey) + ": " + value, x, y, 0x404040, false); + } + + protected int getMaximumMaterialIndex(short meta, boolean smallOre) { + int offset = smallOre ? 16000 : 0; + if (!getGTOreLocalizedName((short) (meta + offset + 5000)) + .equals(getGTOreUnlocalizedName((short) (meta + offset + 5000)))) return 7; + else if (!getGTOreLocalizedName((short) (meta + offset + 5000)) + .equals(getGTOreUnlocalizedName((short) (meta + offset + 5000)))) return 6; + else return 5; + } + + /** + * Draw the dimension header and the dimension names over up to 3 lines + * + */ + protected void drawDimNames() { + GuiDraw.drawString(I18n.format("gtnop.gui.nei.worldNames") + ": ", 2, 100, 0x404040, false); + } +} diff --git a/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5SmallOreStat.java b/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5SmallOreStat.java new file mode 100644 index 0000000000..fb5b298b7b --- /dev/null +++ b/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5SmallOreStat.java @@ -0,0 +1,208 @@ +package gtneioreplugin.plugin.gregtech5; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; + +import codechicken.nei.PositionedStack; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; +import gtneioreplugin.plugin.item.ItemDimensionDisplay; +import gtneioreplugin.util.DimensionHelper; +import gtneioreplugin.util.GT5OreSmallHelper; +import gtneioreplugin.util.GT5OreSmallHelper.OreSmallWrapper; + +public class PluginGT5SmallOreStat extends PluginGT5Base { + + private static final int SMALL_ORE_BASE_META = 16000; + + @Override + public void drawExtras(int recipe) { + OreSmallWrapper oreSmall = getSmallOre(recipe); + + drawSmallOreName(oreSmall); + drawSmallOreInfo(oreSmall); + + drawDimNames(); + + drawSeeAllRecipesLabel(); + } + + private void drawSmallOreName(OreSmallWrapper oreSmall) { + String oreName = getGTOreLocalizedName((short) (oreSmall.oreMeta + SMALL_ORE_BASE_META)); + drawLine("gtnop.gui.nei.oreName", oreName, 2, 18); + } + + private void drawSmallOreInfo(OreSmallWrapper oreSmall) { + drawLine("gtnop.gui.nei.genHeight", oreSmall.worldGenHeightRange, 2, 31); + drawLine("gtnop.gui.nei.amount", String.valueOf(oreSmall.amountPerChunk), 2, 44); + drawLine("gtnop.gui.nei.chanceDrops", "", 2, 83 + getRestrictBiomeOffset()); + drawLine("gtnop.gui.nei.worldNames", "", 2, 100); + } + + private OreSmallWrapper getSmallOre(int recipe) { + CachedOreSmallRecipe crecipe = (CachedOreSmallRecipe) this.arecipes.get(recipe); + return GT5OreSmallHelper.mapOreSmallWrapper.get(crecipe.oreGenName); + } + + public int getRestrictBiomeOffset() { + return GT5OreSmallHelper.restrictBiomeSupport ? 0 : -13; + } + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getOutputId())) + for (ItemStack stack : GT5OreSmallHelper.oreSmallList) loadCraftingRecipes(stack); + else super.loadCraftingRecipes(outputId, results); + } + + @Override + public void loadCraftingRecipes(ItemStack stack) { + if (stack.getUnlocalizedName() + .startsWith("gt.blockores")) { + short oreMeta = (short) (stack.getItemDamage() % 1000); + loadSmallOre(oreMeta, getMaximumMaterialIndex(oreMeta, true)); + } else if (GT5OreSmallHelper.mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { + short oreMeta = GT5OreSmallHelper.mapOreDropUnlocalizedNameToOreMeta.get(stack.getUnlocalizedName()); + loadSmallOre(oreMeta, 7); + } else super.loadCraftingRecipes(stack); + } + + @Override + public void loadUsageRecipes(ItemStack stack) { + String dimension = ItemDimensionDisplay.getDimension(stack); + if (dimension == null) { + return; + } + + for (OreSmallWrapper oreVein : GT5OreSmallHelper.mapOreSmallWrapper.values()) { + if (Arrays.asList(getDimNameArrayFromVeinName(oreVein.oreGenName)) + .contains(dimension)) { + addSmallOre(oreVein, 7); + } + } + } + + private void loadSmallOre(short oreMeta, int maximumIndex) { + OreSmallWrapper smallOre = getSmallOre(oreMeta); + if (smallOre != null) { + addSmallOre(smallOre, maximumIndex); + } + } + + private OreSmallWrapper getSmallOre(short oreMeta) { + for (OreSmallWrapper oreSmallWorldGen : GT5OreSmallHelper.mapOreSmallWrapper.values()) { + if (oreSmallWorldGen.oreMeta == oreMeta) { + return oreSmallWorldGen; + } + } + return null; + } + + private void addSmallOre(OreSmallWrapper smallOre, int maximumIndex) { + this.arecipes.add( + new CachedOreSmallRecipe( + smallOre.oreGenName, + smallOre.getMaterialDrops(maximumIndex), + getStoneDusts(maximumIndex), + GT5OreSmallHelper.mapOreMetaToOreDrops.get(smallOre.oreMeta))); + } + + private List getStoneDusts(int maximumIndex) { + List materialDustStackList = new ArrayList<>(); + for (int i = 0; i < maximumIndex; i++) materialDustStackList + .add(GTOreDictUnificator.get(OrePrefixes.dust, GT5OreSmallHelper.getDroppedDusts()[i], 1L)); + return materialDustStackList; + } + + @Override + public String getOutputId() { + return "GTOrePluginOreSmall"; + } + + @Override + public String getRecipeName() { + return I18n.format("gtnop.gui.smallOreStat.name"); + } + + private String[] getDimNameArrayFromVeinName(String veinName) { + OreSmallWrapper oreSmall = GT5OreSmallHelper.mapOreSmallWrapper.get(veinName); + String[] dims = GT5OreSmallHelper.bufferedDims.get(oreSmall) + .keySet() + .toArray(new String[0]); + Arrays.sort( + dims, + Comparator.comparingInt( + s -> Arrays.asList(DimensionHelper.DimNameDisplayed) + .indexOf(s))); + return dims; + } + + public class CachedOreSmallRecipe extends CachedRecipe { + + public final String oreGenName; + public final PositionedStack positionedStackOreSmall; + public final PositionedStack positionedStackMaterialDust; + public final List positionedDropStackList; + private final List dimensionDisplayItems = new ArrayList<>(); + + public CachedOreSmallRecipe(String oreGenName, List stackList, List materialDustStackList, + List dropStackList) { + this.oreGenName = oreGenName; + this.positionedStackOreSmall = new PositionedStack(stackList, 2, 0); + this.positionedStackMaterialDust = new PositionedStack( + materialDustStackList, + 43, + 79 + getRestrictBiomeOffset()); + List positionedDropStackList = new ArrayList<>(); + int i = 1; + for (ItemStack stackDrop : dropStackList) positionedDropStackList.add( + new PositionedStack(stackDrop, 43 + 20 * (i % 4), 79 + 16 * ((i++) / 4) + getRestrictBiomeOffset())); + this.positionedDropStackList = positionedDropStackList; + setDimensionDisplayItems(); + } + + private void setDimensionDisplayItems() { + int x = 2; + int y = 110; + int count = 0; + int itemsPerLine = 9; + int itemSize = 18; + for (String dim : getDimNameArrayFromVeinName(this.oreGenName)) { + ItemStack item = ItemDimensionDisplay.getItem(dim); + if (item != null) { + int xPos = x + itemSize * (count % itemsPerLine); + int yPos = y + itemSize * (count / itemsPerLine); + dimensionDisplayItems.add(new PositionedStack(item, xPos, yPos, false)); + count++; + } + } + } + + @Override + public List getIngredients() { + return dimensionDisplayItems; + } + + @Override + public PositionedStack getResult() { + return null; + } + + @Override + public List getOtherStacks() { + List outputs = new ArrayList<>(); + positionedStackOreSmall.setPermutationToRender((cycleticks / 20) % positionedStackOreSmall.items.length); + positionedStackMaterialDust + .setPermutationToRender((cycleticks / 20) % positionedStackMaterialDust.items.length); + outputs.add(positionedStackOreSmall); + outputs.add(positionedStackMaterialDust); + outputs.addAll(positionedDropStackList); + return outputs; + } + } +} diff --git a/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5UndergroundFluid.java b/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5UndergroundFluid.java new file mode 100644 index 0000000000..bd1bbf0a00 --- /dev/null +++ b/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5UndergroundFluid.java @@ -0,0 +1,168 @@ +package gtneioreplugin.plugin.gregtech5; + +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.PositionedStack; +import gregtech.api.util.GTUtility; +import gtneioreplugin.plugin.PluginBase; +import gtneioreplugin.plugin.item.ItemDimensionDisplay; +import gtneioreplugin.util.GT5UndergroundFluidHelper; +import gtneioreplugin.util.GT5UndergroundFluidHelper.UndergroundFluidWrapper; + +public class PluginGT5UndergroundFluid extends PluginBase { + + private static final int lineSpace = 20; + private static final int xDimensionDisplay = 30; + private static final int halfItemLength = 16 / 2; + private static final DecimalFormat format = new DecimalFormat("0.#"); + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getOutputId())) { + for (Map.Entry> entry : GT5UndergroundFluidHelper.getAllEntries() + .entrySet()) { + Fluid fluid = FluidRegistry.getFluid(entry.getKey()); + if (fluid != null) { + this.arecipes.add(new CachedUndergroundFluidRecipe(fluid, entry.getValue())); + } + } + } else { + super.loadCraftingRecipes(outputId, results); + } + } + + @Override + public void loadCraftingRecipes(ItemStack result) { + Fluid fluid = null; + FluidStack containerFluid = GTUtility.getFluidForFilledItem(result, true); + if (containerFluid != null) { + fluid = containerFluid.getFluid(); + } + if (fluid == null) { + FluidStack displayFluid = GTUtility.getFluidFromDisplayStack(result); + if (displayFluid != null) { + fluid = displayFluid.getFluid(); + } + } + if (fluid == null) return; + + List wrappers = GT5UndergroundFluidHelper.getEntry(fluid.getName()); + if (wrappers != null) { + this.arecipes.add(new CachedUndergroundFluidRecipe(fluid, wrappers)); + } + } + + @Override + public void loadUsageRecipes(ItemStack ingredient) { + String dimension = ItemDimensionDisplay.getDimension(ingredient); + if (dimension != null) { + for (Map.Entry> entry : GT5UndergroundFluidHelper.getAllEntries() + .entrySet()) { + boolean found = false; + for (UndergroundFluidWrapper wrapper : entry.getValue()) { + if (wrapper.dimension.equals(dimension)) { + found = true; + break; + } + } + if (found) { + Fluid fluid = FluidRegistry.getFluid(entry.getKey()); + if (fluid != null) { + this.arecipes.add(new CachedUndergroundFluidRecipe(fluid, entry.getValue())); + } + } + } + } + } + + @Override + public void drawExtras(int recipeIndex) { + drawSeeAllRecipesLabel(); + + int xChance = 85; + int xAmount = 140; + int yHeader = 30; + int black = 0x404040; + + GuiDraw.drawStringC(I18n.format("gtnop.gui.nei.dimension") + ":", xDimensionDisplay, yHeader, black, false); + GuiDraw.drawStringC(I18n.format("gtnop.gui.nei.chance") + ":", xChance, yHeader, black, false); + GuiDraw.drawStringC(I18n.format("gtnop.gui.nei.fluidAmount") + ":", xAmount, yHeader, black, false); + + int y = 50; + CachedUndergroundFluidRecipe recipe = (CachedUndergroundFluidRecipe) this.arecipes.get(recipeIndex); + for (int i = 0; i < recipe.dimensionDisplayItems.size(); i++) { + GuiDraw.drawStringC(format.format((double) recipe.chances.get(i) / 100) + "%", xChance, y, black, false); + GuiDraw.drawStringC( + recipe.minAmounts.get(i) + .toString() + "-" + + recipe.maxAmounts.get(i) + .toString(), + xAmount, + y, + black, + false); + y += lineSpace; + } + } + + @Override + public String getOutputId() { + return "GTOrePluginUndergroundFluid"; + } + + @Override + public String getRecipeName() { + return I18n.format("gtnop.gui.undergroundFluid.name"); + } + + private class CachedUndergroundFluidRecipe extends CachedRecipe { + + private final PositionedStack targetFluidDisplay; + private final List dimensionDisplayItems = new ArrayList<>(); + private final List chances = new ArrayList<>(); + private final List maxAmounts = new ArrayList<>(); + private final List minAmounts = new ArrayList<>(); + + private CachedUndergroundFluidRecipe(Fluid fluid, List wrappers) { + targetFluidDisplay = new PositionedStack( + GTUtility.getFluidDisplayStack(fluid), + getGuiWidth() / 2 - halfItemLength, + 3); + int y = 50 - halfItemLength; + for (UndergroundFluidWrapper wrapper : wrappers) { + ItemStack dimensionDisplay = ItemDimensionDisplay.getItem(wrapper.dimension); + if (dimensionDisplay != null) { + dimensionDisplayItems.add( + new PositionedStack( + dimensionDisplay, + xDimensionDisplay - halfItemLength, + y + GuiDraw.fontRenderer.FONT_HEIGHT / 2)); + y += lineSpace; + chances.add(wrapper.chance); + maxAmounts.add(wrapper.maxAmount); + minAmounts.add(wrapper.minAmount); + } + } + } + + @Override + public PositionedStack getResult() { + return targetFluidDisplay; + } + + @Override + public List getIngredients() { + return dimensionDisplayItems; + } + } +} diff --git a/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5VeinStat.java b/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5VeinStat.java new file mode 100644 index 0000000000..954ac32242 --- /dev/null +++ b/src/main/java/gtneioreplugin/plugin/gregtech5/PluginGT5VeinStat.java @@ -0,0 +1,212 @@ +package gtneioreplugin.plugin.gregtech5; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.List; + +import net.minecraft.client.resources.I18n; +import net.minecraft.item.ItemStack; + +import codechicken.nei.PositionedStack; +import cpw.mods.fml.common.Loader; +import gtneioreplugin.plugin.item.ItemDimensionDisplay; +import gtneioreplugin.util.DimensionHelper; +import gtneioreplugin.util.GT5OreLayerHelper; +import gtneioreplugin.util.GT5OreLayerHelper.OreLayerWrapper; +import gtneioreplugin.util.OreVeinLayer; + +public class PluginGT5VeinStat extends PluginGT5Base { + + @Override + public void loadCraftingRecipes(String outputId, Object... results) { + if (outputId.equals(getOutputId())) { + for (OreLayerWrapper oreVein : getAllVeins()) { + addVeinWithLayers(oreVein, 7); + } + } else super.loadCraftingRecipes(outputId, results); + } + + @Override + public void loadCraftingRecipes(ItemStack stack) { + if (stack.getUnlocalizedName() + .startsWith("gt.blockores")) { + loadMatchingVeins((short) (stack.getItemDamage() % 1000)); + } else super.loadCraftingRecipes(stack); + } + + private void loadMatchingVeins(short oreId) { + for (OreLayerWrapper oreVein : getAllVeins()) { + if (oreVein.containsOre(oreId)) { + addVeinWithLayers(oreVein, getMaximumMaterialIndex(oreId, false)); + } + } + } + + @Override + public void loadUsageRecipes(ItemStack stack) { + String dimension = ItemDimensionDisplay.getDimension(stack); + if (dimension == null) { + return; + } + + for (OreLayerWrapper oreVein : getAllVeins()) { + if (Arrays.asList(getDimNameArrayFromVeinName(oreVein.veinName)) + .contains(dimension)) { + addVeinWithLayers(oreVein, getMaximumMaterialIndex((short) (stack.getItemDamage() % 1000), false)); + } + } + } + + private void addVeinWithLayers(OreLayerWrapper oreVein, int maximumMaterialIndex) { + this.arecipes.add( + new CachedVeinStatRecipe( + oreVein.veinName, + oreVein.getVeinLayerOre(maximumMaterialIndex, OreVeinLayer.VEIN_PRIMARY), + oreVein.getVeinLayerOre(maximumMaterialIndex, OreVeinLayer.VEIN_SECONDARY), + oreVein.getVeinLayerOre(maximumMaterialIndex, OreVeinLayer.VEIN_BETWEEN), + oreVein.getVeinLayerOre(maximumMaterialIndex, OreVeinLayer.VEIN_SPORADIC))); + } + + private Collection getAllVeins() { + return GT5OreLayerHelper.mapOreLayerWrapper.values(); + } + + @Override + public void drawExtras(int recipe) { + OreLayerWrapper oreLayer = getOreLayer(recipe); + + drawVeinName(oreLayer); + drawVeinLayerNames(oreLayer); + drawVeinInfo(oreLayer); + + drawDimNames(); + + drawSeeAllRecipesLabel(); + } + + private OreLayerWrapper getOreLayer(int recipe) { + CachedVeinStatRecipe crecipe = (CachedVeinStatRecipe) this.arecipes.get(recipe); + return GT5OreLayerHelper.mapOreLayerWrapper.get(crecipe.veinName); + } + + private static void drawVeinName(OreLayerWrapper oreLayer) { + if (Loader.isModLoaded("visualprospecting")) { + drawVeinNameLine(I18n.format(oreLayer.veinName) + " "); + } else { + String veinName = getGTOreLocalizedName(oreLayer.Meta[OreVeinLayer.VEIN_PRIMARY]); + if (veinName.contains("Ore")) drawVeinNameLine(veinName.split("Ore")[0]); + else if (veinName.contains("Sand")) drawVeinNameLine(veinName.split("Sand")[0]); + else drawVeinNameLine(veinName + " "); + } + } + + private static void drawVeinNameLine(String veinName) { + drawLine("gtnop.gui.nei.veinName", veinName + I18n.format("gtnop.gui" + ".nei.vein"), 2, 20); + } + + private static void drawVeinLayerNames(OreLayerWrapper oreLayer) { + drawVeinLayerNameLine(oreLayer, OreVeinLayer.VEIN_PRIMARY, 50); + drawVeinLayerNameLine(oreLayer, OreVeinLayer.VEIN_SECONDARY, 60); + drawVeinLayerNameLine(oreLayer, OreVeinLayer.VEIN_BETWEEN, 70); + drawVeinLayerNameLine(oreLayer, OreVeinLayer.VEIN_SPORADIC, 80); + } + + private static void drawVeinLayerNameLine(OreLayerWrapper oreLayer, int veinLayer, int height) { + drawLine( + OreVeinLayer.getOreVeinLayerName(veinLayer), + getGTOreLocalizedName(oreLayer.Meta[veinLayer]), + 2, + height); + } + + private static void drawVeinInfo(OreLayerWrapper oreLayer) { + drawLine("gtnop.gui.nei.genHeight", oreLayer.worldGenHeightRange, 2, 90); + drawLine("gtnop.gui.nei.weightedChance", Integer.toString(oreLayer.randomWeight), 100, 90); + } + + @Override + public String getOutputId() { + return "GTOrePluginVein"; + } + + @Override + public String getRecipeName() { + return I18n.format("gtnop.gui.veinStat.name"); + } + + private String[] getDimNameArrayFromVeinName(String veinName) { + OreLayerWrapper oreLayer = GT5OreLayerHelper.mapOreLayerWrapper.get(veinName); + String[] dims = (GT5OreLayerHelper.bufferedDims.get(oreLayer) + .keySet() + .toArray(new String[0])); + Arrays.sort( + dims, + Comparator.comparingInt( + s -> Arrays.asList(DimensionHelper.DimNameDisplayed) + .indexOf(s))); + return dims; + } + + public class CachedVeinStatRecipe extends CachedRecipe { + + public final String veinName; + public final PositionedStack positionedStackPrimary; + public final PositionedStack positionedStackSecondary; + public final PositionedStack positionedStackBetween; + public final PositionedStack positionedStackSporadic; + private final List dimensionDisplayItems = new ArrayList<>(); + + public CachedVeinStatRecipe(String veinName, List stackListPrimary, + List stackListSecondary, List stackListBetween, List stackListSporadic) { + this.veinName = veinName; + positionedStackPrimary = new PositionedStack(stackListPrimary, 2, 0); + positionedStackSecondary = new PositionedStack(stackListSecondary, 22, 0); + positionedStackBetween = new PositionedStack(stackListBetween, 42, 0); + positionedStackSporadic = new PositionedStack(stackListSporadic, 62, 0); + setDimensionDisplayItems(); + } + + private void setDimensionDisplayItems() { + int x = 2; + int y = 110; + int count = 0; + int itemsPerLine = 9; + int itemSize = 18; + for (String dim : getDimNameArrayFromVeinName(this.veinName)) { + ItemStack item = ItemDimensionDisplay.getItem(dim); + if (item != null) { + int xPos = x + itemSize * (count % itemsPerLine); + int yPos = y + itemSize * (count / itemsPerLine); + dimensionDisplayItems.add(new PositionedStack(item, xPos, yPos, false)); + count++; + } + } + } + + @Override + public List getIngredients() { + return dimensionDisplayItems; + } + + @Override + public PositionedStack getResult() { + return null; + } + + @Override + public List getOtherStacks() { + List outputs = new ArrayList<>(); + positionedStackPrimary.setPermutationToRender((cycleticks / 20) % positionedStackPrimary.items.length); + positionedStackSecondary.setPermutationToRender((cycleticks / 20) % positionedStackPrimary.items.length); + positionedStackBetween.setPermutationToRender((cycleticks / 20) % positionedStackPrimary.items.length); + positionedStackSporadic.setPermutationToRender((cycleticks / 20) % positionedStackPrimary.items.length); + outputs.add(positionedStackPrimary); + outputs.add(positionedStackSecondary); + outputs.add(positionedStackBetween); + outputs.add(positionedStackSporadic); + return outputs; + } + } +} diff --git a/src/main/java/gtneioreplugin/plugin/item/ItemDimensionDisplay.java b/src/main/java/gtneioreplugin/plugin/item/ItemDimensionDisplay.java new file mode 100644 index 0000000000..39fdacda99 --- /dev/null +++ b/src/main/java/gtneioreplugin/plugin/item/ItemDimensionDisplay.java @@ -0,0 +1,55 @@ +package gtneioreplugin.plugin.item; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.MinecraftForgeClient; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.Side; +import gtneioreplugin.GTNEIOrePlugin; +import gtneioreplugin.plugin.block.BlockDimensionDisplay; +import gtneioreplugin.plugin.block.ModBlocks; +import gtneioreplugin.plugin.renderer.ItemDimensionDisplayRenderer; +import gtneioreplugin.util.DimensionHelper; + +public class ItemDimensionDisplay extends ItemBlock { + + public ItemDimensionDisplay(Block block) { + super(block); + setCreativeTab(GTNEIOrePlugin.creativeTab); + + if (FMLCommonHandler.instance() + .getEffectiveSide() == Side.CLIENT) { + MinecraftForgeClient.registerItemRenderer(this, new ItemDimensionDisplayRenderer()); + } + } + + public static ItemStack getItem(String dimension) { + Block block = ModBlocks.getBlock(dimension); + if (block != null) { + return new ItemStack(block); + } + if (dimension != null) { + GTNEIOrePlugin.LOG.warn("Unknown dimension queried for ItemDimensionDisplay: " + dimension); + } + return null; + } + + public static String getDimension(ItemStack stack) { + if (stack.getItem() instanceof ItemDimensionDisplay) { + return ((BlockDimensionDisplay) Block.getBlockFromItem(stack.getItem())).getDimension(); + } + return null; + } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + String dimension = getDimension(stack); + if (dimension != null) { + return DimensionHelper.convertCondensedStringToToolTip(dimension) + .get(0); + } + return super.getItemStackDisplayName(stack); + } +} diff --git a/src/main/java/gtneioreplugin/plugin/renderer/ItemDimensionDisplayRenderer.java b/src/main/java/gtneioreplugin/plugin/renderer/ItemDimensionDisplayRenderer.java new file mode 100644 index 0000000000..547ad52951 --- /dev/null +++ b/src/main/java/gtneioreplugin/plugin/renderer/ItemDimensionDisplayRenderer.java @@ -0,0 +1,78 @@ +package gtneioreplugin.plugin.renderer; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer; + +import org.lwjgl.opengl.GL11; + +import gtneioreplugin.plugin.item.ItemDimensionDisplay; + +public class ItemDimensionDisplayRenderer implements IItemRenderer { + + private final RenderItem renderItem = new RenderItem(); + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return type == ItemRenderType.INVENTORY; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return false; + } + + // Renders the actual text on top of planet items. + @Override + public void renderItem(ItemRenderType type, ItemStack stack, Object... data) { + String dimension = ItemDimensionDisplay.getDimension(stack); + if (dimension == null) { + return; + } + + renderItem.renderItemIntoGUI( + Minecraft.getMinecraft().fontRenderer, + Minecraft.getMinecraft().renderEngine, + stack, + 0, + 0, + false); + + FontRenderer fontRender = Minecraft.getMinecraft().fontRenderer; + float smallTextScale = 3F / 4F; + + GL11.glPushMatrix(); + GL11.glTranslatef(0, 0, 300); + GL11.glScalef(smallTextScale, smallTextScale, 1.0f); + + long prefix = getPrefix(dimension); + String tooltipPrefix = prefix != -1 ? "T" + prefix : "INVALID. Please, report this to the GTNH team"; + + fontRender + .drawString(tooltipPrefix, 0, (int) (16 / smallTextScale) - fontRender.FONT_HEIGHT + 1, 0xFFFFFF, true); + + GL11.glPopMatrix(); + + GL11.glDisable(GL11.GL_ALPHA_TEST); + } + + // See DimensionHelper.DimNameDisplayed for real names of these. + public static long getPrefix(String dimName) { + return switch (dimName) { + case "Ow", "Ne", "TF", "ED", "VA", "EA" -> 0L; + case "Mo" -> 1L; + case "De", "Ma", "Ph" -> 2L; + case "As", "Ca", "Ce", "Eu", "Ga", "Rb" -> 3L; + case "Io", "Me", "Ve" -> 4L; + case "En", "Mi", "Ob", "Ti", "Ra" -> 5L; + case "Pr", "Tr" -> 6L; + case "Ha", "KB", "MM", "Pl" -> 7L; + case "BC", "BE", "BF", "CB", "TE", "VB" -> 8L; + case "An", "Ho", "Np", "Mh", "MB", "Se" -> 9L; + case "DD" -> 10L; + default -> -1L; + }; + } +} diff --git a/src/main/java/gtneioreplugin/util/CSVMaker.java b/src/main/java/gtneioreplugin/util/CSVMaker.java new file mode 100644 index 0000000000..814b684aac --- /dev/null +++ b/src/main/java/gtneioreplugin/util/CSVMaker.java @@ -0,0 +1,119 @@ +package gtneioreplugin.util; + +import java.io.BufferedWriter; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import gtneioreplugin.Config; +import gtneioreplugin.GTNEIOrePlugin; +import gtneioreplugin.plugin.gregtech5.PluginGT5VeinStat; +import gtneioreplugin.util.GT5OreLayerHelper.OreLayerWrapper; + +// todo: yeet any opencsv usage. +public class CSVMaker implements Runnable { + + public void runSmallOres() { + try { + Iterator> it = GT5OreSmallHelper.mapOreSmallWrapper + .entrySet() + .iterator(); + List SmallOreVeins = new ArrayList<>(); + while (it.hasNext()) { + SmallOre oremix = new SmallOre(); + + Map.Entry pair = it.next(); + GT5OreSmallHelper.OreSmallWrapper oreLayer = pair.getValue(); + + Map Dims = GT5OreSmallHelper.bufferedDims.get(oreLayer); + + oremix.setOreName(oreLayer.oreGenName); + oremix.setOreMeta(oreLayer.oreMeta); + oremix.setHeight(oreLayer.worldGenHeightRange); + oremix.setAmount(oreLayer.amountPerChunk); + oremix.setDims(Dims); + + SmallOreVeins.add(oremix); + + it.remove(); // avoids a ConcurrentModificationException + } + + BufferedWriter one = Files.newBufferedWriter( + GTNEIOrePlugin.instanceDir.toPath() + .resolve(Config.CSVnameSmall)); + Collections.sort(SmallOreVeins); + + // header first + one.write(SmallOre.getCsvHeader()); + one.newLine(); + for (SmallOre ore : SmallOreVeins) { + one.write(ore.getCsvEntry()); + one.newLine(); + } + one.flush(); + one.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public void run() { + runVeins(); + runSmallOres(); + } + + public void runVeins() { + try { + Iterator> it = GT5OreLayerHelper.mapOreLayerWrapper.entrySet() + .iterator(); + List OreVeins = new ArrayList<>(); + while (it.hasNext()) { + Oremix oremix = new Oremix(); + + Map.Entry pair = it.next(); + Map Dims = GT5OreLayerHelper.bufferedDims.get(pair.getValue()); + OreLayerWrapper oreLayer = pair.getValue(); + oremix.setOreMixName(oreLayer.veinName); + oremix.setPrimary(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[0])); + oremix.setSecondary(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[1])); + oremix.setInbetween(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[2])); + oremix.setSporadic(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[3])); + oremix.setSize(oreLayer.size); + oremix.setHeight(oreLayer.worldGenHeightRange); + oremix.setDensity(oreLayer.density); + oremix.setWeight(oreLayer.randomWeight); + oremix.setOreMixIDs( + Integer.toString(oreLayer.Meta[0]) + "|" + + Integer.toString(oreLayer.Meta[1]) + + "|" + + Integer.toString(oreLayer.Meta[2]) + + "|" + + Integer.toString(oreLayer.Meta[3])); + oremix.setDims(Dims); + OreVeins.add(oremix); + + it.remove(); // avoids a ConcurrentModificationException + } + BufferedWriter one = Files.newBufferedWriter( + GTNEIOrePlugin.instanceDir.toPath() + .resolve(Config.CSVName)); + Collections.sort(OreVeins); + + // header first + one.write(Oremix.getCsvHeader()); + one.newLine(); + for (Oremix ore : OreVeins) { + one.write(ore.getCsvEntry()); + one.newLine(); + } + one.flush(); + one.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/gtneioreplugin/util/DimensionHelper.java b/src/main/java/gtneioreplugin/util/DimensionHelper.java new file mode 100644 index 0000000000..d7725844ef --- /dev/null +++ b/src/main/java/gtneioreplugin/util/DimensionHelper.java @@ -0,0 +1,351 @@ +package gtneioreplugin.util; + +import static galacticgreg.api.enums.DimensionDef.DimNames.ANUBIS; +import static galacticgreg.api.enums.DimensionDef.DimNames.ASTEROIDS; +import static galacticgreg.api.enums.DimensionDef.DimNames.BARNARDC; +import static galacticgreg.api.enums.DimensionDef.DimNames.BARNARDE; +import static galacticgreg.api.enums.DimensionDef.DimNames.BARNARDF; +import static galacticgreg.api.enums.DimensionDef.DimNames.CALLISTO; +import static galacticgreg.api.enums.DimensionDef.DimNames.CENTAURIA; +import static galacticgreg.api.enums.DimensionDef.DimNames.CERES; +import static galacticgreg.api.enums.DimensionDef.DimNames.DEEPDARK; +import static galacticgreg.api.enums.DimensionDef.DimNames.DEIMOS; +import static galacticgreg.api.enums.DimensionDef.DimNames.ENCELADUS; +import static galacticgreg.api.enums.DimensionDef.DimNames.ENDASTEROIDS; +import static galacticgreg.api.enums.DimensionDef.DimNames.EUROPA; +import static galacticgreg.api.enums.DimensionDef.DimNames.GANYMEDE; +import static galacticgreg.api.enums.DimensionDef.DimNames.HAUMEA; +import static galacticgreg.api.enums.DimensionDef.DimNames.HORUS; +import static galacticgreg.api.enums.DimensionDef.DimNames.IO; +import static galacticgreg.api.enums.DimensionDef.DimNames.KUIPERBELT; +import static galacticgreg.api.enums.DimensionDef.DimNames.MAAHES; +import static galacticgreg.api.enums.DimensionDef.DimNames.MAKEMAKE; +import static galacticgreg.api.enums.DimensionDef.DimNames.MARS; +import static galacticgreg.api.enums.DimensionDef.DimNames.MEHENBELT; +import static galacticgreg.api.enums.DimensionDef.DimNames.MERCURY; +import static galacticgreg.api.enums.DimensionDef.DimNames.MIRANDA; +import static galacticgreg.api.enums.DimensionDef.DimNames.MOON; +import static galacticgreg.api.enums.DimensionDef.DimNames.NEPER; +import static galacticgreg.api.enums.DimensionDef.DimNames.OBERON; +import static galacticgreg.api.enums.DimensionDef.DimNames.PHOBOS; +import static galacticgreg.api.enums.DimensionDef.DimNames.PLUTO; +import static galacticgreg.api.enums.DimensionDef.DimNames.PROTEUS; +import static galacticgreg.api.enums.DimensionDef.DimNames.ROSS128B; +import static galacticgreg.api.enums.DimensionDef.DimNames.ROSS128BA; +import static galacticgreg.api.enums.DimensionDef.DimNames.SETH; +import static galacticgreg.api.enums.DimensionDef.DimNames.TCETIE; +import static galacticgreg.api.enums.DimensionDef.DimNames.TITAN; +import static galacticgreg.api.enums.DimensionDef.DimNames.TRITON; +import static galacticgreg.api.enums.DimensionDef.DimNames.VEGAB; +import static galacticgreg.api.enums.DimensionDef.DimNames.VENUS; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.util.StatCollector; + +import gregtech.common.OreMixBuilder; +import gtneioreplugin.Config; + +public class DimensionHelper { + + public static final String[] DimName = { + // Non GC dimensions in progression order instead of alphabetical + "Overworld", "Nether", "Twilight", "TheEnd", "EndAsteroid", + // T1 + "GalacticraftCore_Moon", + // T2 + "GalaxySpace_Deimos", "GalacticraftMars_Mars", "GalaxySpace_Phobos", + // T3 + "GalacticraftMars_Asteroids", "GalaxySpace_Callisto", "GalaxySpace_Ceres", "GalaxySpace_Europa", + "GalaxySpace_Ganymede", "Ross128b", + // T4 + "GalaxySpace_Io", "GalaxySpace_Mercury", "GalaxySpace_Venus", + // T5 + "GalaxySpace_Enceladus", "GalaxySpace_Miranda", "GalaxySpace_Oberon", "GalaxySpace_Titan", "Ross128ba", + // T6 + "GalaxySpace_Proteus", "GalaxySpace_Triton", + // T7 + "GalaxySpace_Haumea", "GalaxySpace_Kuiperbelt", "GalaxySpace_MakeMake", "GalaxySpace_Pluto", + // T8 + "GalaxySpace_BarnardC", "GalaxySpace_BarnardE", "GalaxySpace_BarnardF", "GalaxySpace_CentauriA", + "GalaxySpace_TcetiE", "GalaxySpace_VegaB", + // T9 + "GalacticraftAmunRa_Anubis", "GalacticraftAmunRa_Horus", "GalacticraftAmunRa_Maahes", + "GalacticraftAmunRa_MehenBelt", "GalacticraftAmunRa_Neper", "GalacticraftAmunRa_Seth", + // T10 + "Underdark", }; + + public static final String[] DimNameTrimmed = Arrays.stream(DimName) + .map( + n -> n.replaceAll("GalacticraftCore_", "") + .replaceAll("GalacticraftMars_", "") + .replaceAll("GalaxySpace_", "") + .replaceAll("GalacticraftAmunRa_", "")) + .toArray(String[]::new); + + public static final String[] DimNameDisplayed = { // first 2 letters if one word else 1 letter of every word, except + // capital letter in + // name, then 1rst + capital Moon = Mo, BarnardC = BC, EndAsteroid = EA + // Non GC dimensions in progression order instead of alphabetical + "Ow", // Overworld + "Ne", // Nether + "TF", // Twilight + "ED", // TheEnd because En = Encalus + "EA", // EndAsteroid + // T1 + "Mo", // GalacticraftCore_Moon + // T2 + "De", // GalaxySpace_Deimos + "Ma", // GalacticraftMars_Mars + "Ph", // GalaxySpace_Phobos + // T3 + "As", // GalacticraftMars_Asteroids + "Ca", // GalaxySpace_Callisto + "Ce", // GalaxySpace_Ceres + "Eu", // GalaxySpace_Europa + "Ga", // GalaxySpace_Ganymede + "Rb", // Ross128b + // T4 + "Io", // GalaxySpace_Io + "Me", // GalaxySpace_Mercury + "Ve", // GalaxySpace_Venus + // T5 + "En", // GalaxySpace_Enceladus + "Mi", // GalaxySpace_Miranda + "Ob", // GalaxySpace_Oberon + "Ti", // GalaxySpace_Titan + "Ra", // Ross128ba + // T6 + "Pr", // GalaxySpace_Proteus + "Tr", // GalaxySpace_Triton + // T7 + "Ha", // GalaxySpace_Haumea + "KB", // GalaxySpace_Kuiperbelt + "MM", // GalaxySpace_MakeMake + "Pl", // GalaxySpace_Pluto + // T8 + "BC", // GalaxySpace_BarnardC + "BE", // GalaxySpace_BarnardE + "BF", // GalaxySpace_BarnardF + "CB", // GalaxySpace_CentauriA is actually α Centauri Bb + "TE", // GalaxySpace_TcetiE + "VB", // GalaxySpace_VegaB + // T9 + "An", // GalacticraftAmunRa_Anubis + "Ho", // GalacticraftAmunRa_Horus + "Mh", // GalacticraftAmunRa_Maahes + "MB", // GalacticraftAmunRa_MehenBelt + "Np", // GalacticraftAmunRa_Neper + "Se", // GalacticraftAmunRa_Seth + // T10 + "DD", // Underdark + }; + + private static final HashMap> tooltipBuffer = new HashMap<>(); + + private static List computeString(String line) { + String[] dims = parseDimNames(line); + for (int j = 0; j < dims.length; j++) { + String s = dims[j]; + for (int i = 0; i < DimNameDisplayed.length; i++) { + if (s.equals(DimNameDisplayed[i])) { + String k = DimNameTrimmed[i]; + s = StatCollector.translateToLocal("gtnop.world." + k); + s = switch (k) { + case "Moon" -> "T1: " + s; + case "Deimos", "Mars", "Phobos" -> "T2: " + s; + case "Asteroids", "Callisto", "Ceres", "Europa", "Ganymede", "Ross128b" -> "T3: " + s; + case "Io", "Mercury", "Venus" -> "T4: " + s; + case "Enceladus", "Miranda", "Oberon", "Titan", "Ross128ba" -> "T5: " + s; + case "Proteus", "Triton" -> "T6: " + s; + case "Haumea", "Kuiperbelt", "MakeMake", "Pluto" -> "T7: " + s; + case "BarnardC", "BarnardE", "BarnardF", "CentauriA", "TcetiE", "VegaB" -> "T8: " + s; + case "Anubis", "Horus", "Maahes", "MehenBelt", "Neper", "Seth" -> "T9: " + s; + case "Underdark" -> "T10: " + s; + default -> s; + }; + + dims[j] = s; + } + } + } + + if (dims.length > Config.maxTooltipLines) { + dims = StringPaddingHack.stringsToSpacedColumns( + dims, + dims.length / Config.maxTooltipLines + (dims.length % Config.maxTooltipLines == 0 ? 0 : 1), + 2); + } + + return Arrays.asList(dims); + } + + public static String[] parseDimNames(String line) { + String[] dims = line.split(","); + for (int j = 0; j < dims.length; j++) { + String s = dims[j]; + s = s.replaceAll(",", ""); + s = s.trim(); + dims[j] = s; + } + return dims; + } + + public static Map getDims(GT5OreLayerHelper.OreLayerWrapper oreLayer) { + Map enabledDims = new HashMap<>(); + Map origNames = oreLayer.allowedDimWithOrigNames; + + for (String dimName : origNames.keySet()) { + String abbr = getDimAbbreviatedName(dimName); + if (!origNames.getOrDefault(dimName, false)) { + continue; + } + enabledDims.put(abbr, true); + } + return enabledDims; + } + + public static Map getDims(GT5OreSmallHelper.OreSmallWrapper ore) { + Map enabledDims = new HashMap<>(); + Map origNames = ore.allowedDimWithOrigNames; + + for (String dimName : origNames.keySet()) { + String abbr = getDimAbbreviatedName(dimName); + if (!origNames.getOrDefault(dimName, false)) { + continue; + } + enabledDims.put(abbr, true); + } + return enabledDims; + } + + public static String getDimAbbreviatedName(String dimName) { + String abbreviatedName; + switch (dimName) { + case (OreMixBuilder.OW) -> abbreviatedName = "Ow"; // Overworld + case OreMixBuilder.NETHER -> abbreviatedName = "Ne"; // Nether + case OreMixBuilder.TWILIGHT_FOREST -> abbreviatedName = "TF"; // Twilight + case OreMixBuilder.THE_END -> abbreviatedName = "ED"; // TheEnd because En = Encalus + case ENDASTEROIDS -> abbreviatedName = "EA"; // EndAsteroid + // T1 + case MOON -> abbreviatedName = "Mo"; // GalacticraftCore_Moon + // T2 + case DEIMOS -> abbreviatedName = "De"; // GalaxySpace_Deimos + case MARS -> abbreviatedName = "Ma"; // GalacticraftMars_Mars + case PHOBOS -> abbreviatedName = "Ph"; // GalaxySpace_Phobos + // T3 + case ASTEROIDS -> abbreviatedName = "As"; // GalacticraftMars_Asteroids + case CALLISTO -> abbreviatedName = "Ca"; // GalaxySpace_Callisto + case CERES -> abbreviatedName = "Ce"; // GalaxySpace_Ceres + case EUROPA -> abbreviatedName = "Eu"; // GalaxySpace_Europa + case GANYMEDE -> abbreviatedName = "Ga"; // GalaxySpace_Ganymede + case ROSS128B -> abbreviatedName = "Rb"; // Ross128b + // T4 + case IO -> abbreviatedName = "Io"; // GalaxySpace_Io + case MERCURY -> abbreviatedName = "Me"; // GalaxySpace_Mercury + case VENUS -> abbreviatedName = "Ve"; // GalaxySpace_Venus + // T5 + case ENCELADUS -> abbreviatedName = "En"; // GalaxySpace_Enceladus + case MIRANDA -> abbreviatedName = "Mi"; // GalaxySpace_Miranda + case OBERON -> abbreviatedName = "Ob"; // GalaxySpace_Oberon + case TITAN -> abbreviatedName = "Ti"; // GalaxySpace_Titan + case ROSS128BA -> abbreviatedName = "Ra"; // Ross128ba + // T6 + case PROTEUS -> abbreviatedName = "Pr"; // GalaxySpace_Proteus + case TRITON -> abbreviatedName = "Tr"; // GalaxySpace_Triton + // T7 + case HAUMEA -> abbreviatedName = "Ha"; // GalaxySpace_Haumea + case KUIPERBELT -> abbreviatedName = "KB"; // GalaxySpace_Kuiperbelt + case MAKEMAKE -> abbreviatedName = "MM"; // GalaxySpace_MakeMake + case PLUTO -> abbreviatedName = "Pl"; // GalaxySpace_Pluto + // T8 + case BARNARDC -> abbreviatedName = "BC"; // GalaxySpace_BarnardC + case BARNARDE -> abbreviatedName = "BE"; // GalaxySpace_BarnardE + case BARNARDF -> abbreviatedName = "BF"; // GalaxySpace_BarnardF + case CENTAURIA -> abbreviatedName = "CB"; // GalaxySpace_CentauriA is actually α Centauri Bb + case TCETIE -> abbreviatedName = "TE"; // GalaxySpace_TcetiE + case VEGAB -> abbreviatedName = "VB"; // GalaxySpace_VegaB + // T9 + case ANUBIS -> abbreviatedName = "An"; // GalacticraftAmunRa_Anubis + case HORUS -> abbreviatedName = "Ho"; // GalacticraftAmunRa_Horus + case MAAHES -> abbreviatedName = "Mh"; // GalacticraftAmunRa_Maahes + case MEHENBELT -> abbreviatedName = "MB"; // GalacticraftAmunRa_MehenBelt + case NEPER -> abbreviatedName = "Np"; // GalacticraftAmunRa_Neper + case SETH -> abbreviatedName = "Se"; // GalacticraftAmunRa_Seth + // T10 + case DEEPDARK -> abbreviatedName = "DD"; // Underdark + default -> { + throw new IllegalStateException("String: " + dimName + " has no abbredged name!"); + } + } + return abbreviatedName; + } + + public static String getFullName(String dimName) { + + return switch (dimName) { + case "Ow" -> (OreMixBuilder.OW); // Overworld + case "Ne" -> OreMixBuilder.NETHER; // Nether + case "TF" -> OreMixBuilder.TWILIGHT_FOREST; // Twilight + case "ED" -> OreMixBuilder.THE_END; // TheEnd because En = Encalus + case "EA" -> ENDASTEROIDS; // EndAsteroid + // T1 + case "Mo" -> MOON; // GalacticraftCore_Moon + // T2 + case "De" -> DEIMOS; // GalaxySpace_Deimos + case "Ma" -> MARS; // GalacticraftMars_Mars + case "Ph" -> PHOBOS; // GalaxySpace_Phobos + // T3 + case "As" -> ASTEROIDS; // GalacticraftMars_Asteroids + case "Ca" -> CALLISTO; // GalaxySpace_Callisto + case "Ce" -> CERES; // GalaxySpace_Ceres + case "Eu" -> EUROPA; // GalaxySpace_Europa + case "Ga" -> GANYMEDE; // GalaxySpace_Ganymede + case "Rb" -> ROSS128B; // Ross128b + // T4 + case "Io" -> IO; // GalaxySpace_Io + case "Me" -> MERCURY; // GalaxySpace_Mercury + case "Ve" -> VENUS; // GalaxySpace_Venus + // T5 + case "En" -> ENCELADUS; // GalaxySpace_Enceladus + case "Mi" -> MIRANDA; // GalaxySpace_Miranda + case "Ob" -> OBERON; // GalaxySpace_Oberon + case "Ti" -> TITAN; // GalaxySpace_Titan + case "Ra" -> ROSS128BA; // Ross128ba + // T6 + case "Pr" -> PROTEUS; // GalaxySpace_Proteus + case "Tr" -> TRITON; // GalaxySpace_Triton + // T7 + case "Ha" -> HAUMEA; // GalaxySpace_Haumea + case "KB" -> KUIPERBELT; // GalaxySpace_Kuiperbelt + case "MM" -> MAKEMAKE; // GalaxySpace_MakeMake + case "Pl" -> PLUTO; // GalaxySpace_Pluto + // T8 + case "BC" -> BARNARDC; // GalaxySpace_BarnardC + case "BE" -> BARNARDE; // GalaxySpace_BarnardE + case "BF" -> BARNARDF; // GalaxySpace_BarnardF + case "CB" -> CENTAURIA; // GalaxySpace_CentauriA is actually α Centauri Bb + case "TE" -> TCETIE; // GalaxySpace_TcetiE + case "VB" -> VEGAB; // GalaxySpace_VegaB + // T9 + case "An" -> ANUBIS; // GalacticraftAmunRa_Anubis + case "Ho" -> HORUS; // GalacticraftAmunRa_Horus + case "Mh" -> MAAHES; // GalacticraftAmunRa_Maahes + case "MB" -> MEHENBELT; // GalacticraftAmunRa_MehenBelt + case "Np" -> NEPER; // GalacticraftAmunRa_Neper + case "Se" -> SETH; // GalacticraftAmunRa_Seth + // T10 + case "DD" -> DEEPDARK; // Underdark + default -> { + throw new IllegalStateException("String: " + dimName + " has no abbredged name!"); + } + }; + } + + public static List convertCondensedStringToToolTip(String line) { + return tooltipBuffer.computeIfAbsent(line, (String tmp) -> computeString(line)); + } +} diff --git a/src/main/java/gtneioreplugin/util/GT5OreLayerHelper.java b/src/main/java/gtneioreplugin/util/GT5OreLayerHelper.java new file mode 100644 index 0000000000..ac4d6c4aca --- /dev/null +++ b/src/main/java/gtneioreplugin/util/GT5OreLayerHelper.java @@ -0,0 +1,123 @@ +package gtneioreplugin.util; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OreMixes; +import gregtech.common.OreMixBuilder; + +public class GT5OreLayerHelper { + + public static class NormalOreDimensionWrapper { + + public final ArrayList internalDimOreList = new ArrayList<>(); + public final HashMap oreVeinToProbabilityInDimension = new HashMap<>(); + + // Calculate all weights of ore veins once dimension is initialised. + private void calculateWeights() { + int totalWeight = 0; + for (OreLayerWrapper oreVein : internalDimOreList) { + totalWeight += oreVein.randomWeight; + } + for (OreLayerWrapper oreVein : internalDimOreList) { + oreVeinToProbabilityInDimension.put(oreVein, ((double) oreVein.randomWeight) / ((double) totalWeight)); + } + } + } + + private static final int DIMENSION_COUNT = 33; + public static final Integer[] weightPerWorld = new Integer[DIMENSION_COUNT]; + public static final Integer[] DimIDs = new Integer[DIMENSION_COUNT]; + public static final HashMap mapOreLayerWrapper = new HashMap<>(); + public static final HashMap> bufferedDims = new HashMap<>(); + public static final HashMap dimToOreWrapper = new HashMap<>(); + + public static void init() { + Arrays.fill(weightPerWorld, 0); + Arrays.fill(DimIDs, 0); + for (OreMixes mix : OreMixes.values()) + mapOreLayerWrapper.put(mix.oreMixBuilder.oreMixName, new OreLayerWrapper(mix.oreMixBuilder)); + for (OreLayerWrapper layer : mapOreLayerWrapper.values()) { + bufferedDims.put(layer, DimensionHelper.getDims(layer)); + } + + // --- Handling of dimToOreWrapper --- + + // Get dims as "Ow,Ne,Ma" etc. + bufferedDims.forEach((veinInfo, dims) -> { + + for (String dim : dims.keySet()) { + NormalOreDimensionWrapper dimensionOres = dimToOreWrapper + .getOrDefault(dim, new NormalOreDimensionWrapper()); + dimensionOres.internalDimOreList.add(veinInfo); + dimToOreWrapper.put(dim, dimensionOres); + } + + // Calculate probabilities for each dim. + for (String dim : dimToOreWrapper.keySet()) { + dimToOreWrapper.get(dim) + .calculateWeights(); + } + }); + // --- End of handling for dimToOreWrapper --- + } + + public static class OreLayerWrapper { + + public final String veinName, worldGenHeightRange; + public final short[] Meta = new short[4]; + public final short randomWeight, size, density; + public final Map allowedDimWithOrigNames; + + public final Materials mPrimaryVeinMaterial; + public final Materials mSecondaryMaterial; + public final Materials mBetweenMaterial; + public final Materials mSporadicMaterial; + + public OreLayerWrapper(OreMixBuilder mix) { + this.veinName = mix.oreMixName; + this.Meta[0] = (short) mix.primary.mMetaItemSubID; + this.Meta[1] = (short) mix.secondary.mMetaItemSubID; + this.Meta[2] = (short) mix.between.mMetaItemSubID; + this.Meta[3] = (short) mix.sporadic.mMetaItemSubID; + + this.mPrimaryVeinMaterial = mix.primary; + this.mSecondaryMaterial = mix.secondary; + this.mBetweenMaterial = mix.between; + this.mSporadicMaterial = mix.sporadic; + + this.size = (short) mix.size; + this.density = (short) mix.density; + this.worldGenHeightRange = mix.minY + "-" + mix.maxY; + this.randomWeight = (short) mix.weight; + + this.allowedDimWithOrigNames = mix.dimsEnabled; + } + + public List getVeinLayerOre(int maximumMaterialIndex, int veinLayer) { + List stackList = new ArrayList<>(); + for (int i = 0; i < maximumMaterialIndex; i++) { + stackList.add(getLayerOre(veinLayer, i)); + } + return stackList; + } + + public ItemStack getLayerOre(int veinLayer, int materialIndex) { + return new ItemStack(GregTechAPI.sBlockOres1, 1, Meta[veinLayer] + materialIndex * 1000); + } + + public boolean containsOre(short materialIndex) { + return Meta[OreVeinLayer.VEIN_PRIMARY] == materialIndex + || Meta[OreVeinLayer.VEIN_SECONDARY] == materialIndex + || Meta[OreVeinLayer.VEIN_BETWEEN] == materialIndex + || Meta[OreVeinLayer.VEIN_SPORADIC] == materialIndex; + } + } +} diff --git a/src/main/java/gtneioreplugin/util/GT5OreSmallHelper.java b/src/main/java/gtneioreplugin/util/GT5OreSmallHelper.java new file mode 100644 index 0000000000..92b4312e25 --- /dev/null +++ b/src/main/java/gtneioreplugin/util/GT5OreSmallHelper.java @@ -0,0 +1,197 @@ +package gtneioreplugin.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.SmallOres; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.world.GTWorldgen; +import gregtech.common.SmallOreBuilder; +import gregtech.common.WorldgenGTOreSmallPieces; + +public class GT5OreSmallHelper { + + private static final int SMALL_ORE_BASE_META = 16000; + public static boolean restrictBiomeSupport = false; + public static final List oreSmallList = new ArrayList<>(); + public static final HashMap mapOreSmallWrapper = new HashMap<>(); + public static final HashMap mapOreDropUnlocalizedNameToOreMeta = new HashMap<>(); + public static final HashMap> mapOreMetaToOreDrops = new HashMap<>(); + public static final HashMap> bufferedDims = new HashMap<>(); + public static final HashMap dimToSmallOreWrapper = new HashMap<>(); + + public static class SmallOreDimensionWrapper { + + public final ArrayList internalDimOreList = new ArrayList<>(); + public final HashMap oreVeinToProbabilityInDimension = new HashMap<>(); + + // Calculate all weights of ore veins once dimension is initialised. + private void calculateWeights() { + int totalWeight = 0; + for (OreSmallWrapper oreVein : internalDimOreList) { + totalWeight += oreVein.amountPerChunk; + } + for (OreSmallWrapper oreVein : internalDimOreList) { + oreVeinToProbabilityInDimension + .put(oreVein, ((double) oreVein.amountPerChunk) / ((double) totalWeight)); + } + } + } + + public static void init() { + checkExtraSupport(); + ItemStack stack; + Materials material; + short meta; + Map smallOreDefMap = new HashMap<>(); + + for (SmallOres ore : SmallOres.values()) { + smallOreDefMap.put(ore.smallOreBuilder.smallOreName, ore.smallOreBuilder); + } + + for (GTWorldgen worldGen : GregTechAPI.sWorldgenList) { + if (!worldGen.mWorldGenName.startsWith("ore.small.") || !(worldGen instanceof WorldgenGTOreSmallPieces)) { + continue; + } + + WorldgenGTOreSmallPieces worldGenSmallPieces = (WorldgenGTOreSmallPieces) worldGen; + meta = worldGenSmallPieces.mMeta; + if (meta < 0) break; + material = GregTechAPI.sGeneratedMaterials[meta]; + mapOreSmallWrapper.put( + worldGen.mWorldGenName, + new OreSmallWrapper(smallOreDefMap.get(worldGenSmallPieces.mWorldGenName))); + if (mapOreMetaToOreDrops.containsKey(meta)) { + continue; + } + + List stackList = new ArrayList<>(); + stack = GTOreDictUnificator + .get(OrePrefixes.gemExquisite, material, GTOreDictUnificator.get(OrePrefixes.gem, material, 1L), 1L); + if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { + mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); + stackList.add(stack); + } + stack = GTOreDictUnificator + .get(OrePrefixes.gemFlawless, material, GTOreDictUnificator.get(OrePrefixes.gem, material, 1L), 1L); + if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { + mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); + stackList.add(stack); + } + stack = GTOreDictUnificator.get(OrePrefixes.gem, material, 1L); + if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { + mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); + stackList.add(stack); + } + stack = GTOreDictUnificator + .get(OrePrefixes.gemFlawed, material, GTOreDictUnificator.get(OrePrefixes.crushed, material, 1L), 1L); + if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { + mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); + stackList.add(stack); + } + stack = GTOreDictUnificator.get(OrePrefixes.crushed, material, 1L); + if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { + mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); + stackList.add(stack); + } + stack = GTOreDictUnificator.get( + OrePrefixes.gemChipped, + material, + GTOreDictUnificator.get(OrePrefixes.dustImpure, material, 1L), + 1L); + if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { + mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); + stackList.add(stack); + } + stack = GTOreDictUnificator.get(OrePrefixes.dustImpure, material, 1L); + if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { + mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); + stackList.add(stack); + } + oreSmallList.add(new ItemStack(GregTechAPI.sBlockOres1, 1, meta + SMALL_ORE_BASE_META)); + mapOreMetaToOreDrops.put(meta, stackList); + + } + for (OreSmallWrapper oreSmallWrapper : mapOreSmallWrapper.values()) { + bufferedDims.put(oreSmallWrapper, DimensionHelper.getDims(oreSmallWrapper)); + } + + // --- Handling of dimToOreWrapper --- + + // Get dims as "Ow,Ne,Ma" etc. + bufferedDims.forEach((veinInfo, dims) -> { + for (String dim : dims.keySet()) { + SmallOreDimensionWrapper dimensionSmallOres = dimToSmallOreWrapper + .getOrDefault(dim, new SmallOreDimensionWrapper()); + dimensionSmallOres.internalDimOreList.add(veinInfo); + dimToSmallOreWrapper.put(dim, dimensionSmallOres); + } + + // Calculate probabilities for each dim. + for (String dim : dimToSmallOreWrapper.keySet()) { + dimToSmallOreWrapper.get(dim) + .calculateWeights(); + } + }); + // --- End of handling for dimToOreWrapper --- + } + + private static void checkExtraSupport() { + Class clazzGTOreSmall = null; + try { + clazzGTOreSmall = Class.forName("gregtech.common" + ".GT_Worldgen_GT_Ore_SmallPieces"); + } catch (ClassNotFoundException ignored) {} + if (clazzGTOreSmall != null) { + try { + clazzGTOreSmall.getField("mRestrictBiome"); + restrictBiomeSupport = true; + } catch (Exception ignored) {} + } + } + + public static Materials[] getDroppedDusts() { + return new Materials[] { Materials.Stone, Materials.Netherrack, Materials.Endstone, Materials.GraniteBlack, + Materials.GraniteRed, Materials.Marble, Materials.Basalt, Materials.Stone }; + } + + public static class OreSmallWrapper { + + public final String oreGenName; + public final short oreMeta; + public final String worldGenHeightRange; + public final short amountPerChunk; + + public final Map allowedDimWithOrigNames; + + @SuppressWarnings("unused") + public Materials getOreMaterial() { + return oreMaterial; + } + + private final Materials oreMaterial; + + public OreSmallWrapper(SmallOreBuilder ore) { + this.oreGenName = ore.smallOreName; + this.oreMeta = (short) ore.ore.mMetaItemSubID; + this.worldGenHeightRange = ore.minY + "-" + ore.maxY; + this.amountPerChunk = (short) ore.amount; + this.oreMaterial = ore.ore; + + this.allowedDimWithOrigNames = ore.dimsEnabled; + } + + public List getMaterialDrops(int maximumIndex) { + List stackList = new ArrayList<>(); + for (int i = 0; i < maximumIndex; i++) + stackList.add(new ItemStack(GregTechAPI.sBlockOres1, 1, oreMeta + SMALL_ORE_BASE_META + i * 1000)); + return stackList; + } + } +} diff --git a/src/main/java/gtneioreplugin/util/GT5UndergroundFluidHelper.java b/src/main/java/gtneioreplugin/util/GT5UndergroundFluidHelper.java new file mode 100644 index 0000000000..a7b072ccc9 --- /dev/null +++ b/src/main/java/gtneioreplugin/util/GT5UndergroundFluidHelper.java @@ -0,0 +1,147 @@ +package gtneioreplugin.util; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import com.google.common.collect.BiMap; + +import gregtech.GTMod; +import gregtech.api.objects.GTUODimension; +import gregtech.api.objects.GTUODimensionList; +import gregtech.api.objects.GTUOFluid; +import gtneioreplugin.GTNEIOrePlugin; + +public class GT5UndergroundFluidHelper { + + /** + * Need to store fluid name instead of fluid because fluid instance might be different between gas and liquid + */ + private static final Map> fluidMap = new HashMap<>(); + + @SuppressWarnings("unchecked") + public static void init() { + try { + Field fieldDimensionList = GTUODimensionList.class.getDeclaredField("fDimensionList"); + fieldDimensionList.setAccessible(true); + BiMap dimensionList = (BiMap) fieldDimensionList + .get(GTMod.gregtechproxy.mUndergroundOil); + for (Map.Entry dimensionEntry : dimensionList.entrySet()) { + String rawDimension = dimensionEntry.getKey(); + String dimension; + try { + dimension = getDimensionFromID(Integer.parseInt(rawDimension)); + } catch (NumberFormatException ignored) { + dimension = getDimensionForEdgeCase(rawDimension); + if (dimension == null) { + for (int i = 0; i < DimensionHelper.DimNameTrimmed.length; i++) { + if (DimensionHelper.DimNameTrimmed[i].equalsIgnoreCase(rawDimension)) { + dimension = DimensionHelper.DimNameDisplayed[i]; + break; + } + } + } + } + if (dimension == null) { + GTNEIOrePlugin.LOG.warn("Unknown dimension found in GT5 config: " + rawDimension); + continue; + } + + Field fieldFluids = GTUODimension.class.getDeclaredField("fFluids"); + fieldFluids.setAccessible(true); + BiMap fluids = (BiMap) fieldFluids.get(dimensionEntry.getValue()); + + int maxChance = 0; + for (Map.Entry fluidEntry : fluids.entrySet()) { + maxChance += fluidEntry.getValue().Chance; + } + + for (Map.Entry fluidEntry : fluids.entrySet()) { + Fluid fluid = FluidRegistry.getFluid(fluidEntry.getKey()); + if (fluid != null) { + UndergroundFluidWrapper wrapper = new UndergroundFluidWrapper( + dimension, + fluidEntry.getValue().Chance * 10000 / maxChance, + fluidEntry.getValue().MaxAmount, + fluidEntry.getValue().MinAmount); + if (fluidMap.containsKey(fluid.getName())) { + fluidMap.get(fluid.getName()) + .add(wrapper); + } else { + fluidMap.put(fluid.getName(), new ArrayList<>(Collections.singletonList(wrapper))); + } + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + + for (List wrappers : fluidMap.values()) { + wrappers.sort( + Comparator.comparingInt( + w -> Arrays.asList(DimensionHelper.DimNameDisplayed) + .indexOf(w.dimension))); + } + } + + public static List getEntry(String fluidName) { + return fluidMap.get(fluidName); + } + + public static Map> getAllEntries() { + return fluidMap; + } + + @SuppressWarnings("SwitchStatementWithTooFewBranches") + private static String getDimensionFromID(int id) { + return switch (id) { + case 0 -> "Ow"; + default -> null; + }; + } + + private static String getDimensionForEdgeCase(String rawDimension) { + return switch (rawDimension) { + case "aCentauriBb" -> "CB"; + case "BarnardaC" -> "BC"; + case "BarnardaE" -> "BE"; + case "BarnardaF" -> "BF"; + case "TCetiE" -> "TE"; + default -> { + GTNEIOrePlugin.LOG.warn("Unknown dimension name while parsing: " + rawDimension); + yield null; + } + }; + } + + public static class UndergroundFluidWrapper { + + /** + * Using {@link DimensionHelper#DimNameDisplayed} + */ + public final String dimension; + /** + * Chance of this fluid field being generated. 10000 means 100% of the dimension + */ + public final int chance; + + public final int maxAmount; + public final int minAmount; + + public UndergroundFluidWrapper(String dimension, int chance, int maxAmount, int minAmount) { + this.dimension = dimension; + this.chance = chance; + this.maxAmount = maxAmount; + this.minAmount = minAmount; + } + } +} diff --git a/src/main/java/gtneioreplugin/util/OreVeinLayer.java b/src/main/java/gtneioreplugin/util/OreVeinLayer.java new file mode 100644 index 0000000000..8936562128 --- /dev/null +++ b/src/main/java/gtneioreplugin/util/OreVeinLayer.java @@ -0,0 +1,18 @@ +package gtneioreplugin.util; + +public class OreVeinLayer { + + public static final int VEIN_PRIMARY = 0; + public static final int VEIN_SECONDARY = 1; + public static final int VEIN_BETWEEN = 2; + public static final int VEIN_SPORADIC = 3; + + private static final String[] LAYER_NAMES = { "gtnop.gui.nei.primaryOre", "gtnop.gui.nei.secondaryOre", + "gtnop.gui.nei.betweenOre", "gtnop.gui" + ".nei.sporadicOre" }; + + public static String getOreVeinLayerName(int layerId) { + return LAYER_NAMES[layerId]; + } + + private OreVeinLayer() {} +} diff --git a/src/main/java/gtneioreplugin/util/Oremix.java b/src/main/java/gtneioreplugin/util/Oremix.java new file mode 100644 index 0000000000..f4ab1abb8d --- /dev/null +++ b/src/main/java/gtneioreplugin/util/Oremix.java @@ -0,0 +1,120 @@ +package gtneioreplugin.util; + +import java.util.Map; + +public class Oremix implements Comparable { + + private String oreMixName; + + private String primary = ""; + + private String secondary = ""; + + private String inbetween = ""; + + private String sporadic = ""; + + private String oreMixIDs = ""; + + private String height = ""; + + private int density; + + private int size; + + private int weight; + + private static final int sizeData = 10; // hors dims + + private Map dimensions; + + public void setDims(Map dims) { + this.dimensions = dims; + } + + public String getOreMixName() { + return this.oreMixName; + } + + public void setOreMixName(String s) { + this.oreMixName = s; + } + + public void setPrimary(String s) { + this.primary = s; + } + + public void setSecondary(String s) { + this.secondary = s; + } + + public void setInbetween(String s) { + this.inbetween = s; + } + + public void setSporadic(String s) { + this.sporadic = s; + } + + public void setOreMixIDs(String s) { + this.oreMixIDs = s; + } + + public void setHeight(String s) { + this.height = s; + } + + public void setDensity(int i) { + this.density = i; + } + + public void setSize(int i) { + this.size = i; + } + + public void setWeight(int i) { + this.weight = i; + } + + @Override + public int compareTo(Oremix ore) { + return ore.oreMixName.compareTo(ore.oreMixName); + } + + public static String getCsvHeader() { + String[] headers = new String[sizeData + DimensionHelper.DimNameDisplayed.length]; + headers[0] = "Ore Mix Name"; + headers[1] = "Primary Ore"; + headers[2] = "Secondary Ore"; + headers[3] = "InBetween Ore"; + headers[4] = "Sporadic Ore"; + headers[5] = "Ore Meta IDs"; + headers[6] = "Height"; + headers[7] = "Density"; + headers[8] = "Size"; + headers[9] = "Weight"; + for (int i = 0; i < DimensionHelper.DimNameDisplayed.length; i++) { + headers[sizeData + i] = DimensionHelper.getFullName(DimensionHelper.DimNameDisplayed[i]); + } + return String.join(",", headers); + } + + public String getCsvEntry() { + String[] values = new String[sizeData + DimensionHelper.DimNameDisplayed.length]; + values[0] = oreMixName; + values[1] = primary; + values[2] = secondary; + values[3] = inbetween; + values[4] = sporadic; + values[5] = oreMixIDs; + values[6] = height; + values[7] = Integer.toString(density); + values[8] = Integer.toString(size); + values[9] = Integer.toString(weight); + for (int i = 0; i < DimensionHelper.DimNameDisplayed.length; i++) { + values[sizeData + i] = Boolean + .toString(dimensions.getOrDefault(DimensionHelper.DimNameDisplayed[i], false)); + } + return String.join(",", values); + } +} diff --git a/src/main/java/gtneioreplugin/util/SmallOre.java b/src/main/java/gtneioreplugin/util/SmallOre.java new file mode 100644 index 0000000000..769ce63b3e --- /dev/null +++ b/src/main/java/gtneioreplugin/util/SmallOre.java @@ -0,0 +1,82 @@ +package gtneioreplugin.util; + +import static gtneioreplugin.util.DimensionHelper.DimNameDisplayed; + +import java.util.Map; + +@SuppressWarnings("unused") +public class SmallOre implements Comparable { + + private String oreName; + private int oreMeta; + private int amount; + private String height = ""; + private static final int sizeData = 4; // hors dims + + private Map dimensions; + + public void setDims(Map dims) { + this.dimensions = dims; + } + + public String getOreName() { + return this.oreName; + } + + public void setOreName(String s) { + this.oreName = s; + } + + public int getOreMeta() { + return this.oreMeta; + } + + public void setOreMeta(int meta) { + this.oreMeta = meta; + } + + public String getHeight() { + return this.height; + } + + public void setHeight(String s) { + this.height = s; + } + + public void setAmount(int i) { + this.amount = i; + } + + public int getAmount() { + return this.amount; + } + + public static String getCsvHeader() { + String[] headers = new String[sizeData + DimNameDisplayed.length]; + headers[0] = "Ore Name"; + headers[1] = "Block Meta"; + headers[2] = "Height"; + headers[3] = "Amount Per Chunk"; + for (int i = 0; i < DimNameDisplayed.length; i++) { + headers[sizeData + i] = DimensionHelper.getFullName(DimNameDisplayed[i]); + } + return String.join(",", headers); + } + + public String getCsvEntry() { + String[] values = new String[sizeData + DimNameDisplayed.length]; + values[0] = oreName; + values[1] = Integer.toString(oreMeta); + values[2] = getHeight(); + values[3] = Integer.toString(amount); + for (int i = 0; i < DimNameDisplayed.length; i++) { + values[sizeData + i] = Boolean.toString(dimensions.getOrDefault(DimNameDisplayed[i], false)); + } + return String.join(",", values); + } + + @Override + public int compareTo(SmallOre other) { + return oreName.compareTo(other.oreName); + } +} diff --git a/src/main/java/gtneioreplugin/util/StringPaddingHack.java b/src/main/java/gtneioreplugin/util/StringPaddingHack.java new file mode 100644 index 0000000000..066e8c7570 --- /dev/null +++ b/src/main/java/gtneioreplugin/util/StringPaddingHack.java @@ -0,0 +1,131 @@ +package gtneioreplugin.util; + +import java.util.Arrays; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; + +import com.google.common.base.Strings; + +public class StringPaddingHack { + + private static final int SPACE_WIDTH = 4; + private static final int BOLD_SPACE_WIDTH = 5; + + /** + * Given a list of strings, arrange them into the requested number of columns with the specified spacing. Up to 3 + * additional spaces might be added between columns because this function relies on quirky font behaviors. + * + * @param strings List of strings to wrap into columns + * @param numColumns Number of columns, minimum of 1 + * @param minColumnSpacing Minimum amount of extra spaces between columns. + * @return strings wrapped into columns + */ + public static String[] stringsToSpacedColumns(String[] strings, int numColumns, int minColumnSpacing) { + if (numColumns < 1) { + throw new IllegalArgumentException( + String.format("Argument numColumns must be 1 or higher, got value %d", numColumns)); + } + if (numColumns > 1) { + int sliceSize = strings.length / numColumns; + int remainder = strings.length % numColumns; + String[][] columns = new String[numColumns][]; + int totalExtra = 0; + + // Arrange all strings into their proper columns so that the list of strings wraps through all columns + for (int i = 0; i < numColumns; i++) { + int extra = 0; + if (remainder > 0) { + remainder--; + extra = 1; + } + columns[i] = Arrays + .copyOfRange(strings, (sliceSize * i) + totalExtra, (sliceSize * (i + 1) + totalExtra + extra)); + + totalExtra += extra; + } + + // Add extra padding to all but the last columns to align the text + for (int i = 0; i < numColumns - 1; i++) { + columns[i] = padStrings(columns[i], minColumnSpacing); + } + + // Concatenate all columns into the final result + strings = columns[0]; + for (int i = 0; i < sliceSize; i++) { + for (int j = 1; j < numColumns; j++) { + strings[i] += columns[j][i]; + } + } + } + + return strings; + } + + /** + * Pads strings with spaces so that they are of equal length and adds to that the number of spaces specified and up + * to 3 if minExtraSpaces is below 3. Added spaces might be bold. + *

+ * Relies on the quirk of bold space characters being 1 pixel wider than regular space characters in the default + * font renderer. + * + * @param strings List of strings + * @param minExtraSpaces The minimum number of extra spaces to add + * @return Array of strings padded with spaces to an equal length + */ + public static String[] padStrings(String[] strings, int minExtraSpaces) { + int[] widths = getStringWidths(strings); + int maxUnPaddedStrLength = 0; + int numSpacesAddedToLongestString = 0; + int maxPaddedStrLength = 0; + + // Making string width a multiple of 4 by adding bold spaces of width 5 + for (int i = 0; i < strings.length; i++) { + int mod = widths[i] % SPACE_WIDTH; + int numBoldSpacesToAdd = (SPACE_WIDTH - mod) % SPACE_WIDTH; + + // Keep track of the number of spaces added to the longest string + if (widths[i] > maxUnPaddedStrLength) { + numSpacesAddedToLongestString = numBoldSpacesToAdd; + maxUnPaddedStrLength = widths[i]; + } + + strings[i] += "§l" + Strings.repeat(" ", numBoldSpacesToAdd) + "§r"; + widths[i] += numBoldSpacesToAdd * BOLD_SPACE_WIDTH; + + // Keep track of the current widest string we currently have + if (widths[i] > maxPaddedStrLength) { + maxPaddedStrLength = widths[i]; + } + } + + // Make sure we pad at least up to the desired number of spaces from the longest string + if (numSpacesAddedToLongestString < minExtraSpaces) { + maxPaddedStrLength += (minExtraSpaces - numSpacesAddedToLongestString) * SPACE_WIDTH; + } + + // Add required spaces to equalize length of all strings to at least the target width + for (int i = 0; i < strings.length; i++) { + int numSpacesToAdd = (maxPaddedStrLength - widths[i]) / SPACE_WIDTH; + strings[i] += Strings.repeat(" ", numSpacesToAdd); + widths[i] += numSpacesToAdd * SPACE_WIDTH; + } + + return strings; + } + + /** + * Returns an array of font widths for the given array of strings + * + * @param strList Array of strings + * @return Array of font widths + */ + protected static int[] getStringWidths(String[] strList) { + FontRenderer font = Minecraft.getMinecraft().fontRenderer; + int[] widths = new int[strList.length]; + for (int i = 0; i < strList.length; ++i) { + widths[i] = font.getStringWidth(strList[i]); + } + return widths; + } +} diff --git a/src/main/java/gtnhlanth/GTNHLanthanides.java b/src/main/java/gtnhlanth/GTNHLanthanides.java new file mode 100644 index 0000000000..311b274e86 --- /dev/null +++ b/src/main/java/gtnhlanth/GTNHLanthanides.java @@ -0,0 +1,80 @@ +package gtnhlanth; + +import java.util.logging.Logger; + +import bartworks.API.WerkstoffAdderRegistry; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.EventHandler; +import cpw.mods.fml.common.SidedProxy; +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 gtnhlanth.common.CommonProxy; +import gtnhlanth.common.register.BotWerkstoffMaterialPool; +import gtnhlanth.common.register.LanthItemList; +import gtnhlanth.common.register.WerkstoffMaterialPool; +import gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeLoader; +import gtnhlanth.loader.BotRecipes; +import gtnhlanth.loader.RecipeLoader; + +@Mod( + modid = Tags.MODID, + version = Tags.VERSION, + name = Tags.MODNAME, + dependencies = "required-after:IC2; " + "required-after:gregtech; " + + "required-after:bartworks; " + + "required-after:GoodGenerator; " + + "before:miscutils; ") +public class GTNHLanthanides { + + public static Logger LOG = Logger.getLogger("GTNH:Lanthanides"); + + @Mod.Instance(Tags.MODID) + public static GTNHLanthanides instance; + + @SidedProxy(clientSide = "gtnhlanth.client.ClientProxy", serverSide = "gtnhlanth.common.CommonProxy") + public static CommonProxy proxy; + + @EventHandler + public static void preInit(FMLPreInitializationEvent e) { + + WerkstoffAdderRegistry.addWerkstoffAdder(new WerkstoffMaterialPool()); + WerkstoffAdderRegistry.addWerkstoffAdder(new BotWerkstoffMaterialPool()); + + LanthItemList.registerTypical(); + LanthItemList.registerGTMTE(); + + // GregTechAPI.sAfterGTPostload.add(new ZPMRubberChanges()); + proxy.preInit(e); + } + + @EventHandler + public static void init(FMLInitializationEvent e) { + proxy.init(e); + WerkstoffMaterialPool.runInit(); + } + + @EventHandler + public static void postInit(FMLPostInitializationEvent e) { + + RecipeLoader.loadGeneral(); + RecipeLoader.loadLanthanideRecipes(); + RecipeLoader.addRandomChemCrafting(); + RecipeLoader.loadAccelerator(); + + BeamlineRecipeLoader.load(); + + BotRecipes.addGTRecipe(); + proxy.postInit(e); + + } + + @EventHandler + public static void onModLoadingComplete(FMLLoadCompleteEvent e) { + + BotRecipes.removeRecipes(); + RecipeLoader.removeCeriumSources(); + + } +} diff --git a/src/main/java/gtnhlanth/Tags.java b/src/main/java/gtnhlanth/Tags.java new file mode 100644 index 0000000000..c6e58ede14 --- /dev/null +++ b/src/main/java/gtnhlanth/Tags.java @@ -0,0 +1,11 @@ +package gtnhlanth; + +import gregtech.GT_Version; + +public class Tags { + + public static final String MODID = "gtnhlanth"; + public static final String MODNAME = "GTNH: Lanthanides"; + public static final String VERSION = GT_Version.VERSION; + public static final String GROUPNAME = "gtnhlanth"; +} diff --git a/src/main/java/gtnhlanth/api/recipe/LanthanidesRecipeMaps.java b/src/main/java/gtnhlanth/api/recipe/LanthanidesRecipeMaps.java new file mode 100644 index 0000000000..ae421a4848 --- /dev/null +++ b/src/main/java/gtnhlanth/api/recipe/LanthanidesRecipeMaps.java @@ -0,0 +1,25 @@ +package gtnhlanth.api.recipe; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMapBackend; +import gregtech.api.recipe.RecipeMapBuilder; +import gregtech.nei.formatter.HeatingCoilSpecialValueFormatter; +import gregtech.nei.formatter.SimpleSpecialValueFormatter; + +public class LanthanidesRecipeMaps { + + public static final RecipeMap digesterRecipes = RecipeMapBuilder.of("gtnhlanth.recipe.digester") + .maxIO(1, 1, 1, 1) + .minInputs(1, 1) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) + .neiSpecialInfoFormatter(HeatingCoilSpecialValueFormatter.INSTANCE) + .build(); + public static final RecipeMap dissolutionTankRecipes = RecipeMapBuilder + .of("gtnhlanth.recipe.disstank") + .maxIO(2, 3, 2, 1) + .minInputs(1, 1) + .progressBar(GTUITextures.PROGRESSBAR_ARROW_MULTIPLE) + .neiSpecialInfoFormatter(new SimpleSpecialValueFormatter("value.disstank")) + .build(); +} diff --git a/src/main/java/gtnhlanth/client/ClientProxy.java b/src/main/java/gtnhlanth/client/ClientProxy.java new file mode 100644 index 0000000000..2f1f3eb5d5 --- /dev/null +++ b/src/main/java/gtnhlanth/client/ClientProxy.java @@ -0,0 +1,6 @@ +package gtnhlanth.client; + +import gtnhlanth.common.CommonProxy; + +public class ClientProxy extends CommonProxy { +} diff --git a/src/main/java/gtnhlanth/common/CommonProxy.java b/src/main/java/gtnhlanth/common/CommonProxy.java new file mode 100644 index 0000000000..6613e03a23 --- /dev/null +++ b/src/main/java/gtnhlanth/common/CommonProxy.java @@ -0,0 +1,14 @@ +package gtnhlanth.common; + +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; + +public class CommonProxy { + + public void preInit(FMLPreInitializationEvent e) {} + + public void init(FMLInitializationEvent e) {} + + public void postInit(FMLPostInitializationEvent e) {} +} diff --git a/src/main/java/gtnhlanth/common/beamline/BeamInformation.java b/src/main/java/gtnhlanth/common/beamline/BeamInformation.java new file mode 100644 index 0000000000..3d2ff841c4 --- /dev/null +++ b/src/main/java/gtnhlanth/common/beamline/BeamInformation.java @@ -0,0 +1,51 @@ +package gtnhlanth.common.beamline; + +public class BeamInformation { + + private float energy; // in keV + private int rate; + + private Particle particle; + private int particleId; + + private float focus; + + public BeamInformation(float energy, int rate, int particleId, float focus) { + this.energy = energy; + this.rate = rate; + this.particleId = particleId; + this.particle = Particle.values()[particleId]; + this.focus = focus; + } + + public float getEnergy() { + return this.energy; + } + + public int getRate() { + return this.rate; + } + + public Particle getParticle() { + return this.particle; + } + + public int getParticleId() { + return this.particleId; + } + + public float getFocus() { + return this.focus; + } + + @Override + public String toString() { + return "Energy=" + this.getEnergy() + + ",Rate=" + + this.getRate() + + ",Particle=" + + this.getParticleId() + + ",Focus=" + + this.getFocus(); + } +} diff --git a/src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java b/src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java new file mode 100644 index 0000000000..7137c6ab7d --- /dev/null +++ b/src/main/java/gtnhlanth/common/beamline/BeamLinePacket.java @@ -0,0 +1,51 @@ +package gtnhlanth.common.beamline; + +import net.minecraft.nbt.NBTTagCompound; + +import tectech.mechanics.dataTransport.DataPacket; + +public class BeamLinePacket extends DataPacket { + + public BeamLinePacket(BeamInformation content) { + super(content); + } + + public BeamLinePacket(NBTTagCompound compound) { + super(compound); + } + + @Override + protected BeamInformation contentFromNBT(NBTTagCompound nbt) { + /* + * NBTTagCompound compound = nbt.getCompoundTag("beamline"); + */ + return new BeamInformation( + nbt.getFloat("energy"), + nbt.getInteger("rate"), + nbt.getInteger("particleId"), + nbt.getInteger("focus")); + } + + @Override + protected NBTTagCompound contentToNBT() { + + NBTTagCompound compound = new NBTTagCompound(); + + compound.setFloat("energy", content.getEnergy()); + compound.setInteger("rate", content.getRate()); + compound.setInteger("particleId", content.getParticleId()); + compound.setFloat("focus", content.getFocus()); + + return compound; + } + + @Override + public boolean extraCheck() { + return true; + } + + @Override + protected BeamInformation unifyContentWith(BeamInformation arg0) { + throw new NoSuchMethodError("Unavailable to unify beam info data packet"); + } +} diff --git a/src/main/java/gtnhlanth/common/beamline/IConnectsToBeamline.java b/src/main/java/gtnhlanth/common/beamline/IConnectsToBeamline.java new file mode 100644 index 0000000000..6b9c9785f1 --- /dev/null +++ b/src/main/java/gtnhlanth/common/beamline/IConnectsToBeamline.java @@ -0,0 +1,14 @@ +package gtnhlanth.common.beamline; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; + +public interface IConnectsToBeamline extends IMetaTileEntity { + + boolean canConnect(ForgeDirection side); + + IConnectsToBeamline getNext(IConnectsToBeamline source); + + boolean isDataInputFacing(ForgeDirection side); +} diff --git a/src/main/java/gtnhlanth/common/beamline/MTEBeamlinePipe.java b/src/main/java/gtnhlanth/common/beamline/MTEBeamlinePipe.java new file mode 100644 index 0000000000..fbfb0eb9c6 --- /dev/null +++ b/src/main/java/gtnhlanth/common/beamline/MTEBeamlinePipe.java @@ -0,0 +1,256 @@ +package gtnhlanth.common.beamline; + +import static gregtech.api.enums.Dyes.MACHINE_METAL; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.enums.Dyes; +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.BaseMetaPipeEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.common.GTClient; +import gregtech.common.render.GTTextureBuilder; + +public class MTEBeamlinePipe extends MetaPipeEntity implements IConnectsToBeamline { + + private static Textures.BlockIcons.CustomIcon pipe; + + private byte connectionCount = 0; + + private boolean active; + + public MTEBeamlinePipe(int id, String name, String nameRegional) { + super(id, name, nameRegional, 0); + } + + public MTEBeamlinePipe(String name) { + super(name, 0); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if ((aTick & 31) == 31) { + mConnections = 0; + connectionCount = 0; + + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + ForgeDirection d1 = dir.getOpposite(); + TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(dir); + if (tTileEntity instanceof IConnectsToBeamline) { + if (((IConnectsToBeamline) tTileEntity).canConnect(d1)) { + mConnections |= 1 << dir.ordinal(); + connectionCount++; + } + } else if (tTileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); + if (meta instanceof IConnectsToBeamline) { + if (((IConnectsToBeamline) meta).canConnect(d1)) { + mConnections |= 1 << dir.ordinal(); + connectionCount++; + } + } + } + } + } + } else if (aBaseMetaTileEntity.isClientSide() && GTClient.changeDetected == 4) { + aBaseMetaTileEntity.issueTextureUpdate(); + } + } + + @Override + public byte getTileEntityBaseType() { + return 7; + } + + @Override + public void loadNBTData(NBTTagCompound arg0) {} + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { + return new MTEBeamlinePipe(mName); + } + + @Override + public void saveNBTData(NBTTagCompound arg0) {} + + @Override + public float getThickNess() { + if (GTMod.instance.isClientSide() && GTClient.hideValue == 1) { + return 0.0625F; + } + return 0.5f; + } + + @Override + public boolean renderInside(ForgeDirection arg0) { + return false; + } + + @Override + public boolean canConnect(ForgeDirection side) { + return true; + } + + // Largely taken from Tec's DataPipe + + @Override + public IConnectsToBeamline getNext(IConnectsToBeamline source) { + + for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + + if ((mConnections & 1 << dir.ordinal()) == 0) { + continue; + } + + TileEntity next = this.getBaseMetaTileEntity() + .getTileEntityAtSide(dir); + if (next instanceof IConnectsToBeamline && next != source) { + + if (((IConnectsToBeamline) next).isDataInputFacing(dir.getOpposite())) { + return (IConnectsToBeamline) next; + } + + } else if (next instanceof IGregTechTileEntity) { + + IMetaTileEntity meta = ((IGregTechTileEntity) next).getMetaTileEntity(); + if (meta instanceof IConnectsToBeamline && meta != source) { + + if (meta instanceof MTEBeamlinePipe && (((MTEBeamlinePipe) meta).connectionCount == 2)) { + + ((MTEBeamlinePipe) meta).markUsed(); + return (IConnectsToBeamline) meta; + } + + if (((IConnectsToBeamline) meta).isDataInputFacing(dir.getOpposite())) { + + return (IConnectsToBeamline) meta; + } + } + } + } + + return null; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + pipe = new Textures.BlockIcons.CustomIcon("iconsets/pipe"); + super.registerIcons(aBlockIconRegister); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection aSide, int aConnections, + int aColorIndex, boolean aConnected, boolean aRedstone) { + return new ITexture[] { new GTTextureBuilder().addIcon(pipe) + .build(), + new GTTextureBuilder().addIcon(pipe) + .setRGBA(Dyes.getModulation((byte) aColorIndex, MACHINE_METAL.getRGBA())) + .build() }; + } + + public void markUsed() { + this.active = true; + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return true; + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + float tSpace = (1f - 0.375f) / 2; + float tSide0 = tSpace; + float tSide1 = 1f - tSpace; + float tSide2 = tSpace; + float tSide3 = 1f - tSpace; + float tSide4 = tSpace; + float tSide5 = 1f - tSpace; + + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.DOWN) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) { + tSide2 = tSide4 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide1 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) { + tSide0 = tSide4 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide1 = tSide3 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) { + tSide0 = tSide2 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + + byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; + if ((tConn & 1 << ForgeDirection.DOWN.ordinal()) != 0) { + tSide0 = 0f; + } + if ((tConn & 1 << ForgeDirection.UP.ordinal()) != 0) { + tSide1 = 1f; + } + if ((tConn & 1 << ForgeDirection.NORTH.ordinal()) != 0) { + tSide2 = 0f; + } + if ((tConn & 1 << ForgeDirection.SOUTH.ordinal()) != 0) { + tSide3 = 1f; + } + if ((tConn & 1 << ForgeDirection.WEST.ordinal()) != 0) { + tSide4 = 0f; + } + if ((tConn & 1 << ForgeDirection.EAST.ordinal()) != 0) { + tSide5 = 1f; + } + + return AxisAlignedBB + .getBoundingBox(aX + tSide4, aY + tSide0, aZ + tSide2, aX + tSide5, aY + tSide1, aZ + tSide3); + } + + @Override + public String[] getDescription() { + return new String[] { StatCollector.translateToLocal("beamline.pipe.desc.0"), // Beamline pipe + EnumChatFormatting.AQUA + StatCollector.translateToLocal("beamline.pipe.desc.1"), // Does not cross, split + // or turn + "Added by " + EnumChatFormatting.GREEN + "GTNH: Lanthanides" + + }; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } +} diff --git a/src/main/java/gtnhlanth/common/beamline/Particle.java b/src/main/java/gtnhlanth/common/beamline/Particle.java new file mode 100644 index 0000000000..856bb383db --- /dev/null +++ b/src/main/java/gtnhlanth/common/beamline/Particle.java @@ -0,0 +1,71 @@ +package gtnhlanth.common.beamline; + +import net.minecraft.util.StatCollector; + +public enum Particle { + + ELECTRON(true, 0, 0.511f, 5000, "electron", "e\u207B", -1, null), + PHOTON(false, 1, 0, 0, "photon", "\u03B3", 0, null), + NEUTRON(false, 2, 939.57f, 15000, "neutron", "n\u2070", 0, null), + PROTON(true, 3, 938.27f, 15000, "proton", "p\u207A", 1, null), + ALPHA(true, 4, 3727.38f, 8000, "alpha", "\u03B1", 2, null); + + private boolean canAcc; + + private float restMass; // in MeV + + private float maxSourceEnergy; // in keV + + private String name; + private String shortName; + + private float charge; // in multiples of elemental charge + + private String chargeSpecial; + + private Particle(boolean canAcc, int id, float restMass, float maxSourceEnergy, String name, String shortName, + float charge, String chargeSpecial) { // ID + // is + // symbolic + // only + this.canAcc = canAcc; + this.restMass = restMass; + this.maxSourceEnergy = maxSourceEnergy; + this.name = name; + this.shortName = shortName; + this.charge = charge; + this.chargeSpecial = chargeSpecial; + } + + public float getMass() { + return this.restMass; + } + + public float getCharge() { + return this.charge; + } + + public String getChargeSpecial() { + return this.chargeSpecial; + } + + public boolean canAccelerate() { + return this.canAcc; + } + + public float maxSourceEnergy() { + return this.maxSourceEnergy; + } + + public String getName() { + return this.name; + } + + public String getLocalisedName() { + return StatCollector.translateToLocal("particle." + this.name) + " (" + this.shortName + ")"; + } + + public static Particle getParticleFromId(int id) { + return Particle.values()[id]; + } +} diff --git a/src/main/java/gtnhlanth/common/block/BlockAntennaCasing.java b/src/main/java/gtnhlanth/common/block/BlockAntennaCasing.java new file mode 100644 index 0000000000..d93d6a3494 --- /dev/null +++ b/src/main/java/gtnhlanth/common/block/BlockAntennaCasing.java @@ -0,0 +1,15 @@ +package gtnhlanth.common.block; + +public class BlockAntennaCasing extends BlockCasing { + + private int antennaTier; + + public BlockAntennaCasing(int tier) { + super("antenna_t" + tier); + this.antennaTier = tier; + } + + public int getTier() { + return this.antennaTier; + } +} diff --git a/src/main/java/gtnhlanth/common/block/BlockCasing.java b/src/main/java/gtnhlanth/common/block/BlockCasing.java new file mode 100644 index 0000000000..d51a4e79f5 --- /dev/null +++ b/src/main/java/gtnhlanth/common/block/BlockCasing.java @@ -0,0 +1,79 @@ +package gtnhlanth.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gtnhlanth.Tags; + +public class BlockCasing extends Block { + + @SideOnly(Side.CLIENT) + protected IIcon[] texture; + + private String name; + + public BlockCasing(String name) { + super(Material.iron); + this.name = name; + this.setBlockTextureName(Tags.MODID + ":casing." + name); + GregTechAPI.registerMachineBlock(this, -1); + } + + public BlockCasing(String name, Material material) { + super(material); + this.name = name; + this.setBlockTextureName(Tags.MODID + ":casing." + name); + GregTechAPI.registerMachineBlock(this, -1); + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + public String getHarvestTool(int aMeta) { + return "wrench"; + } + + @Override + public int getHarvestLevel(int aMeta) { + return 2; + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + return Blocks.iron_block.getBlockHardness(aWorld, aX, aY, aZ); + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + super.breakBlock(aWorld, aX, aY, aZ, aBlock, aMetaData); + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + super.onBlockAdded(aWorld, aX, aY, aZ); + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + + @Override + public String getUnlocalizedName() { + return "casing." + this.name; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } + +} diff --git a/src/main/java/gtnhlanth/common/block/BlockShieldedAccGlass.java b/src/main/java/gtnhlanth/common/block/BlockShieldedAccGlass.java new file mode 100644 index 0000000000..e5dba84d52 --- /dev/null +++ b/src/main/java/gtnhlanth/common/block/BlockShieldedAccGlass.java @@ -0,0 +1,73 @@ +package gtnhlanth.common.block; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.init.Blocks; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gtnhlanth.Tags; + +public class BlockShieldedAccGlass extends Block { + + private static final String name = "shielded_accelerator_glass"; + + public BlockShieldedAccGlass() { + super(Material.glass); + this.setBlockName("casing." + name); + this.setBlockTextureName(Tags.MODID + ":casing." + name); + GregTechAPI.registerMachineBlock(this, -1); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTechAPI.isMachineBlock(this, aMetaData)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public float getBlockHardness(World aWorld, int aX, int aY, int aZ) { + return Blocks.glass.getBlockHardness(aWorld, aX, aY, aZ); + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess worldClient, int xCoord, int yCoord, int zCoord, int aSide) { + if (worldClient.getBlock(xCoord, yCoord, zCoord) instanceof BlockShieldedAccGlass) return false; + return super.shouldSideBeRendered(worldClient, xCoord, yCoord, zCoord, aSide); + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } + +} diff --git a/src/main/java/gtnhlanth/common/hatch/MTEBusInputFocus.java b/src/main/java/gtnhlanth/common/hatch/MTEBusInputFocus.java new file mode 100644 index 0000000000..1d8840295b --- /dev/null +++ b/src/main/java/gtnhlanth/common/hatch/MTEBusInputFocus.java @@ -0,0 +1,84 @@ +package gtnhlanth.common.hatch; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gtPlusPlus.api.objects.data.AutoMap; +import gtPlusPlus.xmod.gregtech.api.metatileentity.implementations.nbthandlers.MTEHatchNbtConsumable; +import gtPlusPlus.xmod.gregtech.common.blocks.textures.TexturesGtBlock; +import gtnhlanth.common.item.ICanFocus; +import gtnhlanth.util.Util; + +public class MTEBusInputFocus extends MTEHatchNbtConsumable { + + private static final int INPUT_SLOTS = 4; + + public MTEBusInputFocus(int id, String name, String nameRegional) { + super(id, name, nameRegional, 0, INPUT_SLOTS, "Input Bus for Foci", false); + } + + public MTEBusInputFocus(String name, String[] descriptionArray, ITexture[][][] textures) { + super(name, 0, INPUT_SLOTS, descriptionArray, false, textures); + } + + @Override + public int getInputSlotCount() { + return INPUT_SLOTS; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public AutoMap getItemsValidForUsageSlots() { + return new AutoMap<>(); + } + + @Override + public boolean isItemValidForUsageSlot(ItemStack aStack) { + + if (this.getContentUsageSlots() + .size() == 0) { + return aStack.getItem() instanceof ICanFocus; + } else { + return false; + } + + } + + @Override + public String getNameGUI() { + return "Focus Input Bus"; + } + + public void depleteFocusDurability(int damage) { + + ItemStack stack = this.getContentUsageSlots() + .toArray()[0]; + + Util.depleteDurabilityOfStack(stack, damage); + + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Bus_Catalyst) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TexturesGtBlock.Overlay_Bus_Catalyst) }; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBusInputFocus(mName, mDescriptionArray, mTextures); + } + +} diff --git a/src/main/java/gtnhlanth/common/hatch/MTEHatchBeamlineConnector.java b/src/main/java/gtnhlanth/common/hatch/MTEHatchBeamlineConnector.java new file mode 100644 index 0000000000..9e223ee9a1 --- /dev/null +++ b/src/main/java/gtnhlanth/common/hatch/MTEHatchBeamlineConnector.java @@ -0,0 +1,134 @@ +package gtnhlanth.common.hatch; + +import static net.minecraft.util.StatCollector.translateToLocalFormatted; +import static tectech.util.CommonValues.MOVE_AT; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gtnhlanth.common.beamline.IConnectsToBeamline; +import tectech.mechanics.dataTransport.DataPacket; +import tectech.util.TTUtility; + +public abstract class MTEHatchBeamlineConnector extends MTEHatch implements IConnectsToBeamline { + + private String clientLocale = "en_US"; + + public T q; + + public short id = -1; + + protected MTEHatchBeamlineConnector(int aID, String aName, String aNameRegional, int aTier, String descr) { + super(aID, aName, aNameRegional, aTier, 0, descr); + TTUtility.setTier(aTier, this); + } + + protected MTEHatchBeamlineConnector(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setShort("eID", id); + if (q != null) { + aNBT.setTag("eDATA", q.toNbt()); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + id = aNBT.getShort("eID"); + if (aNBT.hasKey("eDATA")) { + q = loadPacketFromNBT(aNBT.getCompoundTag("eDATA")); + } + } + + protected abstract T loadPacketFromNBT(NBTTagCompound nbt); + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (MOVE_AT == aTick % 20) { + if (q == null) { + getBaseMetaTileEntity().setActive(false); + } else { + getBaseMetaTileEntity().setActive(true); + moveAround(aBaseMetaTileEntity); + } + } + } + } + + public abstract void moveAround(IGregTechTileEntity aBaseMetaTileEntity); + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return false; + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + if (id > 0) { + return new String[] { + translateToLocalFormatted("tt.keyword.ID", clientLocale) + ": " + EnumChatFormatting.AQUA + id, + translateToLocalFormatted("tt.keyword.Content", clientLocale) + ": " + + EnumChatFormatting.AQUA + + (q != null ? q.getContentString() : 0), + translateToLocalFormatted("tt.keyword.PacketHistory", clientLocale) + ": " + + EnumChatFormatting.RED + + (q != null ? q.getTraceSize() : 0), }; + } + return new String[] { + translateToLocalFormatted("tt.keyword.Content", clientLocale) + ": " + + EnumChatFormatting.AQUA + + (q != null ? q.getContentString() : 0), + translateToLocalFormatted("tt.keyword.PacketHistory", clientLocale) + ": " + + EnumChatFormatting.RED + + (q != null ? q.getTraceSize() : 0), }; + } + + @Override + public String[] getDescription() { + return new String[] { "Text description shouldn't be seen, report to Tec", "High speed fibre optics connector.", + EnumChatFormatting.AQUA + "Must be painted to work" }; + } +} diff --git a/src/main/java/gtnhlanth/common/hatch/MTEHatchInputBeamline.java b/src/main/java/gtnhlanth/common/hatch/MTEHatchInputBeamline.java new file mode 100644 index 0000000000..1d13270e31 --- /dev/null +++ b/src/main/java/gtnhlanth/common/hatch/MTEHatchInputBeamline.java @@ -0,0 +1,130 @@ +package gtnhlanth.common.hatch; + +import static gregtech.api.enums.Dyes.MACHINE_METAL; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.objects.GTRenderedTexture; +import gtnhlanth.common.beamline.BeamLinePacket; +import gtnhlanth.common.beamline.IConnectsToBeamline; +import tectech.util.TTUtility; + +public class MTEHatchInputBeamline extends MTEHatchBeamlineConnector { + + private boolean delay = true; + + private static final String activeIconPath = "iconsets/OVERLAY_BI_ACTIVE"; + private static final String sideIconPath = "iconsets/OVERLAY_BI_SIDES"; + private static final String connIconPath = "iconsets/BI_CONN"; + + private static final Textures.BlockIcons.CustomIcon activeIcon = new Textures.BlockIcons.CustomIcon(activeIconPath); + private static final Textures.BlockIcons.CustomIcon sideIcon = new Textures.BlockIcons.CustomIcon(sideIconPath); + private static final Textures.BlockIcons.CustomIcon connIcon = new Textures.BlockIcons.CustomIcon(connIconPath); + + public MTEHatchInputBeamline(int id, String name, String nameRegional, int tier) { + + super(id, name, nameRegional, tier, ""); + TTUtility.setTier(tier, this); + } + + public MTEHatchInputBeamline(String name, int tier, String[] desc, ITexture[][][] textures) { + super(name, tier, desc, textures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + activeIcon, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(connIcon) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + sideIcon, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(connIcon) }; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity tile) { + return new MTEHatchInputBeamline(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + protected BeamLinePacket loadPacketFromNBT(NBTTagCompound tag) { + return new BeamLinePacket(tag); + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return isInputFacing(side); + } + + @Override + public boolean isOutputFacing(ForgeDirection aSide) { + return false; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean canConnect(ForgeDirection side) { + return isInputFacing(side); + } + + @Override + public IConnectsToBeamline getNext(IConnectsToBeamline source) { + return null; + } + + @Override + public String[] getDescription() { + return null; + } + + public void setContents(BeamLinePacket in) { + if (in == null) { + this.q = null; + } else { + if (in.getContent() + .getRate() > 0) { + this.q = in; + delay = true; + } else { + this.q = null; + } + } + } + + @Override + public void moveAround(IGregTechTileEntity tile) { + if (delay) { + delay = false; + } else { + this.setContents(null); + } + } +} diff --git a/src/main/java/gtnhlanth/common/hatch/MTEHatchOutputBeamline.java b/src/main/java/gtnhlanth/common/hatch/MTEHatchOutputBeamline.java new file mode 100644 index 0000000000..dfb210d725 --- /dev/null +++ b/src/main/java/gtnhlanth/common/hatch/MTEHatchOutputBeamline.java @@ -0,0 +1,137 @@ +package gtnhlanth.common.hatch; + +import static gregtech.api.enums.Dyes.MACHINE_METAL; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Dyes; +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.objects.GTRenderedTexture; +import gtnhlanth.common.beamline.BeamLinePacket; +import gtnhlanth.common.beamline.IConnectsToBeamline; +import gtnhlanth.common.beamline.MTEBeamlinePipe; +import tectech.util.TTUtility; + +public class MTEHatchOutputBeamline extends MTEHatchBeamlineConnector implements IConnectsToBeamline { + + private static final String activeIconPath = "iconsets/OVERLAY_BO_ACTIVE"; + private static final String sideIconPath = "iconsets/OVERLAY_BO_SIDES"; + private static final String connIconPath = "iconsets/BO_CONN"; + + private static final Textures.BlockIcons.CustomIcon activeIcon = new Textures.BlockIcons.CustomIcon(activeIconPath); + private static final Textures.BlockIcons.CustomIcon sideIcon = new Textures.BlockIcons.CustomIcon(sideIconPath); + private static final Textures.BlockIcons.CustomIcon connIcon = new Textures.BlockIcons.CustomIcon(connIconPath); + + public MTEHatchOutputBeamline(int id, String name, String nameRegional, int tier) { + super(id, name, nameRegional, tier, ""); + TTUtility.setTier(tier, this); + } + + public MTEHatchOutputBeamline(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + activeIcon, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(connIcon) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + sideIcon, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(connIcon) }; + } + + @Override + public IConnectsToBeamline getNext(IConnectsToBeamline source) { + + IGregTechTileEntity base = this.getBaseMetaTileEntity(); + IGregTechTileEntity next = base.getIGregTechTileEntityAtSide(base.getFrontFacing()); + + if (next == null) { + return null; + } + + IMetaTileEntity meta = next.getMetaTileEntity(); + if (meta instanceof MTEBeamlinePipe) { + + ((MTEBeamlinePipe) meta).markUsed(); + return (IConnectsToBeamline) meta; + + } else if (meta instanceof MTEHatchInputBeamline && ((MTEHatchInputBeamline) meta).canConnect( + base.getFrontFacing() + .getOpposite())) { + + return (IConnectsToBeamline) meta; + } + + return null; + } + + @Override + public void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { + IConnectsToBeamline current = this, source = this, next; + int range = 0; + while ((next = current.getNext(source)) != null && range++ < 100) { + if (next instanceof MTEHatchInputBeamline) { + ((MTEHatchInputBeamline) next).setContents(q); + break; + } + source = current; + current = next; + } + q = null; + } + + @Override + protected BeamLinePacket loadPacketFromNBT(NBTTagCompound nbt) { + return new BeamLinePacket(nbt); + } + + @Override + public boolean canConnect(ForgeDirection side) { + return this.isOutputFacing(side); + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return this.isInputFacing(side); + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection aSide) { + return false; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == this.getBaseMetaTileEntity() + .getFrontFacing(); + } + + @Override + public String[] getDescription() { + return null; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { + return new MTEHatchOutputBeamline(mName, mTier, mDescriptionArray, mTextures); + } +} diff --git a/src/main/java/gtnhlanth/common/item/ICanFocus.java b/src/main/java/gtnhlanth/common/item/ICanFocus.java new file mode 100644 index 0000000000..7b372ee1c9 --- /dev/null +++ b/src/main/java/gtnhlanth/common/item/ICanFocus.java @@ -0,0 +1,5 @@ +package gtnhlanth.common.item; + +public interface ICanFocus { + +} diff --git a/src/main/java/gtnhlanth/common/item/ItemLanth.java b/src/main/java/gtnhlanth/common/item/ItemLanth.java new file mode 100644 index 0000000000..74f863a24a --- /dev/null +++ b/src/main/java/gtnhlanth/common/item/ItemLanth.java @@ -0,0 +1,15 @@ +package gtnhlanth.common.item; + +import net.minecraft.item.Item; + +import gtnhlanth.Tags; + +public class ItemLanth extends Item { + + public ItemLanth(String name) { + super(); + this.setUnlocalizedName(name); + this.setTextureName(Tags.MODID + ":" + name); + } + +} diff --git a/src/main/java/gtnhlanth/common/item/ItemParticle.java b/src/main/java/gtnhlanth/common/item/ItemParticle.java new file mode 100644 index 0000000000..07286e8f45 --- /dev/null +++ b/src/main/java/gtnhlanth/common/item/ItemParticle.java @@ -0,0 +1,123 @@ +package gtnhlanth.common.item; + +import java.util.List; + +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.util.IIcon; +import net.minecraft.util.MathHelper; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gtnhlanth.Tags; +import gtnhlanth.common.beamline.Particle; + +public class ItemParticle extends Item { + + public static final int NUMBER_OF_SUBTYPES = Particle.values().length; + + private static String[] names = new String[NUMBER_OF_SUBTYPES]; + + static { + populateNamesArray(); + } + + @SideOnly(Side.CLIENT) + private IIcon[] iconArray; + + public ItemParticle() { + + this.setHasSubtypes(true); + this.setMaxDamage(0); + + } + + @SideOnly(Side.CLIENT) + @Override + public IIcon getIconFromDamage(int damage) { + int j = MathHelper.clamp_int(damage, 0, NUMBER_OF_SUBTYPES - 1); + return this.iconArray[j]; + } + + public String getUnlocalizedName(ItemStack stack) { + int i = MathHelper.clamp_int(stack.getItemDamage(), 0, NUMBER_OF_SUBTYPES - 1); + return super.getUnlocalizedName() + "." + names[i]; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @SideOnly(Side.CLIENT) + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 0; i < NUMBER_OF_SUBTYPES; ++i) { + list.add(new ItemStack(item, 1, i)); + } + } + + @SideOnly(Side.CLIENT) + @Override + public void registerIcons(IIconRegister register) { + this.iconArray = new IIcon[NUMBER_OF_SUBTYPES]; + + for (int i = 0; i < NUMBER_OF_SUBTYPES; ++i) { + this.iconArray[i] = register.registerIcon(Tags.MODID + ":" + "particle/" + names[i]); + } + } + + @SideOnly(Side.CLIENT) + @Override + public String getItemStackDisplayName(ItemStack stack) { + + int i = MathHelper.clamp_int(stack.getItemDamage(), 0, NUMBER_OF_SUBTYPES - 1); + + Particle particle = Particle.values()[i]; + + return particle.getLocalisedName(); + + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + int i = MathHelper.clamp_int(stack.getItemDamage(), 0, NUMBER_OF_SUBTYPES - 1); + + Particle particle = Particle.values()[i]; + + float restMass = particle.getMass(); + + float charge = particle.getCharge(); + + String chargeSpecial = particle.getChargeSpecial(); + + String chargeStringToAppend; + if (chargeSpecial != null) { + + chargeStringToAppend = chargeSpecial; + + } else { + + if (charge > 0) chargeStringToAppend = "+" + charge; + else chargeStringToAppend = "" + charge; + } + + list.add("Rest Mass: " + restMass + " MeV"); + list.add("Charge: " + chargeStringToAppend + "e"); + + } + + private static void populateNamesArray() { + + for (int i = 0; i < NUMBER_OF_SUBTYPES; i++) { + + Particle particle = Particle.values()[i]; + + names[i] = particle.getName(); + + } + + } + +} diff --git a/src/main/java/gtnhlanth/common/item/ItemPhotolithographicMask.java b/src/main/java/gtnhlanth/common/item/ItemPhotolithographicMask.java new file mode 100644 index 0000000000..d39c74b602 --- /dev/null +++ b/src/main/java/gtnhlanth/common/item/ItemPhotolithographicMask.java @@ -0,0 +1,42 @@ +package gtnhlanth.common.item; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import gtnhlanth.Tags; + +public class ItemPhotolithographicMask extends Item implements ICanFocus { + + private String name; + private String descSpectrum; + + public ItemPhotolithographicMask(String name, int maxDamage, String descSpectrum) { + super(); + this.name = name; + this.descSpectrum = descSpectrum; + this.setUnlocalizedName("photomask." + name); + this.setMaxStackSize(1); + this.setMaxDamage(maxDamage); + this.setTextureName(Tags.MODID + ":photomask/" + name); + } + + /* + * @Override public String getUnlocalizedName() { return "item.photomask." + this.name; } + */ + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + if (!this.descSpectrum.isEmpty()) + list.add("Suitable for the " + this.descSpectrum + " segment of the electromagnetic spectrum and lower"); + + } + + public String getDescSpectrum() { + return descSpectrum; + } + +} diff --git a/src/main/java/gtnhlanth/common/item/MaskList.java b/src/main/java/gtnhlanth/common/item/MaskList.java new file mode 100644 index 0000000000..b41e2cb886 --- /dev/null +++ b/src/main/java/gtnhlanth/common/item/MaskList.java @@ -0,0 +1,162 @@ +package gtnhlanth.common.item; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.TierEU; + +public enum MaskList { + + // There are absolutely better ways of doing this than a GT Materials-esque Enum, some method of automatically + // scraping the wafer types would be preferable in particular + // Use Dyes._NULL to indicate a wafer's lack of a dedicated lens instead of null, if the wafer's mask is to be + // generated + // Ignore last argument if using all wafers + ERROR("error", "ERROR", 0, "", null, null, 0, 0, 0, 0, 0, null), + BLANK1("blank1", "T1 Blank", 0, "VISIBLE", null, null, 0, 0, 0, 0, 0, null), + BLANK2("blank2", "T2 Blank", 0, "UV", null, null, 0, 0, 0, 0, 0, null), + BLANK3("blank3", "T3 Blank", 0, "X-RAY", null, null, 0, 0, 0, 0, 0, null), + ILC("ilc", "Integrated Logic Circuit", 100, "", BLANK1, Dyes.dyeRed, TierEU.RECIPE_MV, 0.5e-3f, 4e-3f, 35, 1, + ItemList.Circuit_Wafer_ILC.get(1)), + RAM("ram", "Random Access Memory", 200, "", BLANK1, Dyes.dyeCyan, TierEU.RECIPE_MV, 2e-3f, 4e-3f, 40, 2, + ItemList.Circuit_Wafer_Ram.get(1), ItemList.Circuit_Silicon_Wafer), + NAND("nand", "NAND", 200, "", BLANK2, Dyes._NULL, TierEU.RECIPE_HV, 7e-3f, 12e-3f, 40, 1, + ItemList.Circuit_Wafer_NAND.get(1), ItemList.Circuit_Silicon_Wafer), // NAND uses only Ender Pearl lens, don't + // ask me why + NOR("nor", "NOR", 100, "", BLANK2, Dyes._NULL, TierEU.RECIPE_LuV, 8e-3f, 10e-3f, 40, 1, + ItemList.Circuit_Wafer_NOR.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2), // Same as + // above, + // but with + // ender + // eye + CPU("cpu", "Central Processing Unit", 10, "", BLANK2, Dyes.dyeWhite, TierEU.RECIPE_MV, 6e-3f, 12e-3f, 45, 2, + ItemList.Circuit_Wafer_CPU.get(1)), + SOC("soc", "SoC", 150, "", BLANK2, Dyes.dyeYellow, TierEU.RECIPE_EV, 3e-3f, 10e-3f, 45, 2, + ItemList.Circuit_Wafer_SoC.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2), + ASOC("asoc", "Advanced SoC", 120, "", BLANK2, Dyes.dyeGreen, TierEU.RECIPE_EV, 100e-3f, 200e-3f, 50, 2, + ItemList.Circuit_Wafer_SoC2.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2), + PIC("pic", "Power IC", 100, "", BLANK2, Dyes.dyeBlue, TierEU.RECIPE_HV, 5e-3f, 10e-3f, 50, 4, + ItemList.Circuit_Wafer_PIC.get(1), ItemList.Circuit_Silicon_Wafer), + HPIC("hpic", "High Power IC", 80, "", BLANK3, null, TierEU.RECIPE_IV, 100e-3f, 200e-3f, 50, 6, + ItemList.Circuit_Wafer_HPIC.get(1), ItemList.Circuit_Silicon_Wafer), // Different, made in chemical reactor. + // Figure out something for + // this later? + NCPU("ncpu", "NanoCPU", 60, "", BLANK2, null, TierEU.RECIPE_EV, 5e-3f, 10e-3f, 50, 4, + ItemList.Circuit_Wafer_NanoCPU.get(1), ItemList.Circuit_Silicon_Wafer), // Same as above + QBIT("qbit", "QBit", 50, "", BLANK2, null, TierEU.RECIPE_EV, 3e-3f, 10e-3f, 50, 4, + ItemList.Circuit_Wafer_QuantumCPU.get(1), ItemList.Circuit_Silicon_Wafer), // ^ + UHPIC("uhpic", "Ultra High Power IC", 60, "", BLANK3, null, TierEU.RECIPE_LuV, 200e-3f, 400e-3f, 50, 8, + ItemList.Circuit_Wafer_UHPIC.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2), // You + // get + // the + // gist + SSOC("ssoc", "Simple SoC", 150, "", BLANK1, Dyes.dyeOrange, TierEU.RECIPE_MV, 2e-3f, 4e-3f, 25, 1, + ItemList.Circuit_Wafer_Simple_SoC.get(1)), + ULPIC("ulpic", "Ultra Low Power IC", 200, "", BLANK1, Dyes.dyeGreen, TierEU.RECIPE_LV, 2e-3f, 4e-3f, 30, 1, + ItemList.Circuit_Wafer_ULPIC.get(1)), // Can use green for this as well as asoc, given + // the latter uses a different base mask + LPIC("lpic", "Low Power IC", 150, "", BLANK1, Dyes.dyeYellow, TierEU.RECIPE_MV, 2e-3f, 4e-3f, 30, 2, + ItemList.Circuit_Wafer_LPIC.get(1)), // Same as above, except for yellow + NPIC("npic", "Nano Power IC", 70, "", BLANK3, Dyes.dyeRed, TierEU.RECIPE_LuV, 1, 100000, 50, 4, + ItemList.Circuit_Wafer_NPIC.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2, + ItemList.Circuit_Silicon_Wafer3), // Same + PPIC("ppic", "PPIC", 50, "", BLANK3, null, TierEU.RECIPE_ZPM, 10, 15, 50, 6, ItemList.Circuit_Wafer_PPIC.get(1), + ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2, ItemList.Circuit_Silicon_Wafer3), // CR + // recipe + QPIC("qpic", "QPIC", 50, "", BLANK3, Dyes.dyeBlue, TierEU.RECIPE_UV, 5, 9, 50, 6, + ItemList.Circuit_Wafer_QPIC.get(1), ItemList.Circuit_Silicon_Wafer, ItemList.Circuit_Silicon_Wafer2, + ItemList.Circuit_Silicon_Wafer3, ItemList.Circuit_Silicon_Wafer4); // Different base mask to PIC + + String name; + String englishName; + String spectrum; + + int maxDamage; + + MaskList precursor; + Dyes lensColour; + + long engraverEUt; + + float minEnergy; + float maxEnergy; + + float minFocus; + int baselineAmount; + + ItemStack producedItem; + + ItemList[] forbiddenWafers; + + MaskList(String name, String englishName, int maxDamage, String spectrum, MaskList precursor, Dyes lensColour, + long engraverEUt, float minEnergy, float maxEnergy, float minFocus, int baselineAmount, ItemStack producedItem, + ItemList... forbiddenWafers) { + this.name = name; + this.englishName = englishName; + this.spectrum = spectrum; + this.maxDamage = maxDamage; + this.precursor = precursor; + this.lensColour = lensColour; + this.engraverEUt = engraverEUt; + this.minFocus = minFocus; + this.minEnergy = minEnergy; + this.maxEnergy = maxEnergy; + this.baselineAmount = baselineAmount; + this.producedItem = producedItem; + this.forbiddenWafers = forbiddenWafers; + } + + public String getName() { + return this.name; + } + + public String getEnglishName() { + return this.englishName; + } + + public String getSpectrum() { + return this.spectrum; + } + + public int getDamage() { + return this.maxDamage; + } + + public MaskList getPrecursor() { + return this.precursor; + } + + public Dyes getLensColour() { + return this.lensColour; + } + + public long getEngraverEUt() { + return this.engraverEUt; + } + + public float getMinEnergy() { + return this.minEnergy; + } + + public float getMaxEnergy() { + return this.maxEnergy; + } + + public float getMinFocus() { + return this.minFocus; + } + + public int getBaselineAmount() { + return this.baselineAmount; + } + + public ItemStack getProducedItem() { + return this.producedItem; + } + + public ItemList[] getForbiddenWafers() { + return this.forbiddenWafers; + } + +} diff --git a/src/main/java/gtnhlanth/common/register/BotWerkstoffMaterialPool.java b/src/main/java/gtnhlanth/common/register/BotWerkstoffMaterialPool.java new file mode 100644 index 0000000000..0172b90655 --- /dev/null +++ b/src/main/java/gtnhlanth/common/register/BotWerkstoffMaterialPool.java @@ -0,0 +1,88 @@ +package gtnhlanth.common.register; + +import static bartworks.system.material.Werkstoff.Types.*; +import static bartworks.util.BWUtil.subscriptNumbers; +import static gregtech.api.enums.Materials.*; +import static gregtech.api.enums.TextureSet.*; + +import bartworks.system.material.Werkstoff; +import bartworks.util.Pair; + +/* + * Originally authored by botn365 under the MIT License. See BotdustriesLICENSE + */ +@SuppressWarnings("unchecked") +public class BotWerkstoffMaterialPool implements Runnable { + + public static final Werkstoff TungsticAcid = new Werkstoff( + new short[] { 0xf5, 0xf1, 0x16 }, + "Tungstic Acid", + new Werkstoff.Stats(), + COMPOUND, + new Werkstoff.GenerationFeatures().onlyDust() + .enforceUnification(), + 29900, + SET_SHINY, + new Pair<>(Hydrogen, 2), + new Pair<>(Tungsten, 1), + new Pair<>(Oxygen, 4)); + public static final Werkstoff TungstenTrioxide = new Werkstoff( + new short[] { 0x0f, 0x5, 0x16 }, + "Tungsten Trioxide", + new Werkstoff.Stats(), + COMPOUND, + new Werkstoff.GenerationFeatures().onlyDust() + .enforceUnification(), + 29901, + SET_SHINY, + new Pair<>(Tungsten, 1), + new Pair<>(Oxygen, 3)); + public static final Werkstoff AmmoniumNitrate = new Werkstoff( + new short[] { 0x81, 0xcc, 0x00 }, + "Ammonium Nitrate", + new Werkstoff.Stats(), + COMPOUND, + new Werkstoff.GenerationFeatures().onlyDust(), + 29903, + SET_FINE, + new Pair<>(Nitrogen, 1), + new Pair<>(Hydrogen, 4), + new Pair<>(Nitrogen, 1), + new Pair<>(Oxygen, 3)); + public static final Werkstoff SodiumTungstate = new Werkstoff( + new short[] { 0xc, 0xed, 0xd7, 0 }, + "Sodium Tungstate", + subscriptNumbers("Na2WO4"), + new Werkstoff.Stats(), + COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 29904, + SET_FINE); + public static final Werkstoff Phosgene = new Werkstoff( + new short[] { 0x15, 0xa1, 0x1a }, + "Phosgene", + subscriptNumbers("COCl2"), + new Werkstoff.Stats(), + COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 29905, + SET_FINE); + public static final Werkstoff Nitromethane = new Werkstoff( + new short[] { 0x87, 0x7d, 0x60 }, + "Nitromethane", + subscriptNumbers("CH3NO2"), + new Werkstoff.Stats(), + COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + 29914, + SET_METALLIC); + + @Override + public void run() { + // TODO Auto-generated method stub + + } +} diff --git a/src/main/java/gtnhlanth/common/register/LanthItemList.java b/src/main/java/gtnhlanth/common/register/LanthItemList.java new file mode 100644 index 0000000000..50069131d6 --- /dev/null +++ b/src/main/java/gtnhlanth/common/register/LanthItemList.java @@ -0,0 +1,174 @@ +package gtnhlanth.common.register; + +import java.util.HashMap; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.util.GTLanguageManager; +import gtnhlanth.common.beamline.MTEBeamlinePipe; +import gtnhlanth.common.block.BlockAntennaCasing; +import gtnhlanth.common.block.BlockCasing; +import gtnhlanth.common.block.BlockShieldedAccGlass; +import gtnhlanth.common.hatch.MTEBusInputFocus; +import gtnhlanth.common.hatch.MTEHatchInputBeamline; +import gtnhlanth.common.hatch.MTEHatchOutputBeamline; +import gtnhlanth.common.item.ItemLanth; +import gtnhlanth.common.item.ItemParticle; +import gtnhlanth.common.item.ItemPhotolithographicMask; +import gtnhlanth.common.item.MaskList; +import gtnhlanth.common.tileentity.MTEDigester; +import gtnhlanth.common.tileentity.MTEDissolutionTank; +import gtnhlanth.common.tileentity.MTELINAC; +import gtnhlanth.common.tileentity.MTESourceChamber; +import gtnhlanth.common.tileentity.MTESynchrotron; +import gtnhlanth.common.tileentity.MTETargetChamber; + +public final class LanthItemList { + + public static ItemStack DIGESTER; + public static ItemStack DISSOLUTION_TANK; + + public static ItemStack LINAC; + public static ItemStack SOURCE_CHAMBER; + + public static ItemStack SYNCHROTRON; + + public static ItemStack TARGET_CHAMBER; + + public static ItemStack BEAMLINE_PIPE; + + public static ItemStack LUV_BEAMLINE_INPUT_HATCH; + public static ItemStack LUV_BEAMLINE_OUTPUT_HATCH; + + public static ItemStack BEAMLINE_FOCUS_INPUT_BUS; + + public static Item CAPILLARY_EXCHANGE = new ItemLanth("capillary_exchange"); + + public static Item MM_LATTICE = new ItemLanth("mm_lattice"); + + public static Item IRON_COATED_QUARTZ = new ItemLanth("iron_quartz_plate"); + + public static Item SUBSTRATE_PRECURSOR = new ItemLanth("substrate_precursor"); + + public static Item MASK_SUBSTRATE = new ItemLanth("mask_substrate"); + + public static Item MASKED_MASK = new ItemLanth("masked_mask_substrate"); + + public static Item ETCHED_MASK_1 = new ItemLanth("etched_mask1"); + + public static Item SILICON_NITRIDE_MEMBRANE = new ItemLanth("nitride_gold_membrane"); + + public static Item PARTICLE_ITEM = new ItemParticle().setUnlocalizedName("particle"); + + public static final Block SHIELDED_ACCELERATOR_CASING = new BlockCasing("shielded_accelerator"); + public static final Block SHIELDED_ACCELERATOR_GLASS = new BlockShieldedAccGlass(); + + public static final Block ELECTRODE_CASING = new BlockCasing("electrode"); + + public static final Block COOLANT_DELIVERY_CASING = new BlockCasing("coolant_delivery"); + + // public static final Block ANTENNA_CASING_T1 = new Casing("antenna_t1"); + public static final Block ANTENNA_CASING_T1 = new BlockAntennaCasing(1); + public static final Block ANTENNA_CASING_T2 = new BlockAntennaCasing(2); + + public static final Block NIOBIUM_CAVITY_CASING = new BlockCasing("niobium_cavity"); + + public static final Block FOCUS_MANIPULATION_CASING = new BlockCasing("focus_manipulator"); + public static final Block FOCUS_HOLDER = new BlockCasing("focus_holder"); + + public static final Block TARGET_RECEPTACLE_CASING = new BlockCasing("target_receptacle"); + public static final Block TARGET_HOLDER = new BlockCasing("target_holder"); + + public static HashMap maskMap = new HashMap<>(); + + public static void registerGTMTE() { + + DIGESTER = new MTEDigester(10500, "Digester", "Digester").getStackForm(1L); + DISSOLUTION_TANK = new MTEDissolutionTank(10501, "Dissolution Tank", "Dissolution Tank").getStackForm(1L); + + BEAMLINE_PIPE = new MTEBeamlinePipe(10502, "Beamline Pipe", "Beamline Pipe").getStackForm(1L); + LUV_BEAMLINE_INPUT_HATCH = new MTEHatchInputBeamline( + 10503, + "LuV Beamline Input Hatch", + "LuV Beamline Input Hatch", + 6).getStackForm(1L); + LUV_BEAMLINE_OUTPUT_HATCH = new MTEHatchOutputBeamline( + 10504, + "LuV Beamline Output Hatch", + "LuV Beamline Output Hatch", + 6).getStackForm(1L); + + BEAMLINE_FOCUS_INPUT_BUS = new MTEBusInputFocus(10509, "Focus Input Bus", "Focus Input Bus").getStackForm(1L); + + LINAC = new MTELINAC(10505, "Linear Accelerator", "Linear Accelerator").getStackForm(1L); + + SOURCE_CHAMBER = new MTESourceChamber(10506, "Source Chamber", "Source Chamber").getStackForm(1L); + + SYNCHROTRON = new MTESynchrotron(10507, "Synchrotron", "Synchrotron").getStackForm(1L); + + TARGET_CHAMBER = new MTETargetChamber(10508, "Target Chamber", "Target Chamber").getStackForm(1L); + } + + public static void registerTypical() { + + GameRegistry.registerItem(CAPILLARY_EXCHANGE, CAPILLARY_EXCHANGE.getUnlocalizedName()); + + GameRegistry.registerItem(MM_LATTICE, MM_LATTICE.getUnlocalizedName()); + + GameRegistry.registerItem(IRON_COATED_QUARTZ, IRON_COATED_QUARTZ.getUnlocalizedName()); + + GameRegistry.registerItem(MASK_SUBSTRATE, MASK_SUBSTRATE.getUnlocalizedName()); + + GameRegistry.registerItem(ETCHED_MASK_1, ETCHED_MASK_1.getUnlocalizedName()); + + GameRegistry.registerItem(SUBSTRATE_PRECURSOR, SUBSTRATE_PRECURSOR.getUnlocalizedName()); + + GameRegistry.registerItem(MASKED_MASK, MASKED_MASK.getUnlocalizedName()); + + GameRegistry.registerItem(PARTICLE_ITEM, "particle"); + + GameRegistry.registerBlock(SHIELDED_ACCELERATOR_CASING, SHIELDED_ACCELERATOR_CASING.getUnlocalizedName()); + + GameRegistry.registerBlock(ELECTRODE_CASING, ELECTRODE_CASING.getUnlocalizedName()); + + GameRegistry.registerBlock(COOLANT_DELIVERY_CASING, COOLANT_DELIVERY_CASING.getUnlocalizedName()); + + GameRegistry.registerBlock(SHIELDED_ACCELERATOR_GLASS, SHIELDED_ACCELERATOR_GLASS.getUnlocalizedName()); + + GameRegistry.registerBlock(ANTENNA_CASING_T1, ANTENNA_CASING_T1.getUnlocalizedName()); + + GameRegistry.registerBlock(ANTENNA_CASING_T2, ANTENNA_CASING_T2.getUnlocalizedName()); + + GameRegistry.registerBlock(NIOBIUM_CAVITY_CASING, NIOBIUM_CAVITY_CASING.getUnlocalizedName()); + + GameRegistry.registerBlock(FOCUS_MANIPULATION_CASING, FOCUS_MANIPULATION_CASING.getUnlocalizedName()); + + GameRegistry.registerBlock(FOCUS_HOLDER, FOCUS_HOLDER.getUnlocalizedName()); + + GameRegistry.registerBlock(TARGET_RECEPTACLE_CASING, TARGET_RECEPTACLE_CASING.getUnlocalizedName()); + + GameRegistry.registerBlock(TARGET_HOLDER, TARGET_HOLDER.getUnlocalizedName()); + + for (MaskList mask : MaskList.values()) { + + String english = mask.getEnglishName(); + + String descSpectrum = mask.getSpectrum(); + + ItemPhotolithographicMask maskItem = new ItemPhotolithographicMask( + mask.getName(), + mask.getDamage(), + descSpectrum); + GameRegistry.registerItem(maskItem, maskItem.getUnlocalizedName()); + + GTLanguageManager.addStringLocalization(maskItem.getUnlocalizedName() + ".name", "Mask (" + english + ")"); + + maskMap.put(mask, maskItem); + + } + + } +} diff --git a/src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java b/src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java new file mode 100644 index 0000000000..70bc2a1cf8 --- /dev/null +++ b/src/main/java/gtnhlanth/common/register/WerkstoffMaterialPool.java @@ -0,0 +1,2032 @@ +package gtnhlanth.common.register; + +import static bartworks.util.BWUtil.subscriptNumbers; +import static bartworks.util.BWUtil.superscriptNumbers; + +import java.util.Arrays; + +import bartworks.system.material.Werkstoff; +import bartworks.util.Pair; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TextureSet; + +@SuppressWarnings({ "unchecked" }) +public class WerkstoffMaterialPool implements Runnable { + + // Current highest ID = 11_499 + + private static final int offsetID = 11_000; + private static final int offsetID2 = 11_100; + private static final int offsetID3 = 11_300; + private static final int offsetID3b = 11_350; + private static final int offsetID4 = 11_400; + private static final int offsetID5 = 11_460; + + /* + * public static final Werkstoff __ = new Werkstoff( new short[] {_, _, _}, "__", new Werkstoff.Stats(), + * Werkstoff.Types.MIXTURE, new Werkstoff.GenerationFeatures().disable(), offsetID_, TextureSet.SET_DULL ); + */ + + // Misc. + public static final Werkstoff Hafnium = new Werkstoff( + new short[] { 232, 224, 219 }, + "Hafnium", + subscriptNumbers("Hf"), + new Werkstoff.Stats(), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMetalItems() + .enforceUnification(), // Perhaps use + // hafnia + // liquid in + // elemental + // hafnium + // synthesis + offsetID, + TextureSet.SET_METALLIC); + + public static final Werkstoff LowPurityHafnium = new Werkstoff( + new short[] { 240, 223, 208 }, + "Low-Purity Hafnium", + subscriptNumbers("??Hf??"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 1, + TextureSet.SET_DULL); + + public static final Werkstoff Hafnia = new Werkstoff( + new short[] { 247, 223, 203 }, + "Hafnia", + subscriptNumbers("HfO2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 2, + TextureSet.SET_DULL); + + public static final Werkstoff HafniumTetrachloride = new Werkstoff( + new short[] { 238, 247, 249 }, + "Hafnium Tetrachloride", + subscriptNumbers("HfCl4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 3, + TextureSet.SET_DULL); + + public static final Werkstoff HafniumTetrachlorideSolution = new Werkstoff( + new short[] { 238, 247, 249 }, + "Hafnium Tetrachloride Solution", + subscriptNumbers("HfCl4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID + 4, + TextureSet.SET_FLUID); + + public static final Werkstoff HafniumIodide = new Werkstoff( + new short[] { 216, 60, 1 }, + "Hafnium Iodide", + subscriptNumbers("HfI4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 5, + TextureSet.SET_DULL); + + public static final Werkstoff HafniumRunoff = new Werkstoff( + new short[] { 74, 65, 42 }, // Literally the statistically ugliest colour + "Hafnium Runoff", + subscriptNumbers("??????"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 6, + TextureSet.SET_DULL); + + public static final Werkstoff Zirconium = new Werkstoff( + new short[] { 225, 230, 225 }, + "Zirconium", + subscriptNumbers("Zr"), + new Werkstoff.Stats().setBlastFurnace(true), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMetalItems(), + // .enforceUnification(), + offsetID + 7, + TextureSet.SET_METALLIC); + + public static final Werkstoff Zirconia = new Werkstoff( + new short[] { 177, 152, 101 }, + "Zirconia", + subscriptNumbers("ZrO2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 8, + TextureSet.SET_SHINY); + + public static final Werkstoff ZirconiumTetrachloride = new Werkstoff( + new short[] { 179, 164, 151 }, + "Zirconium Tetrachloride", + subscriptNumbers("ZrCl4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 9, + TextureSet.SET_DULL); + + public static final Werkstoff ZirconiumTetrachlorideSolution = new Werkstoff( + new short[] { 179, 164, 151 }, + "Zirconium Tetrachloride Solution", + subscriptNumbers("ZrCl4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), // Blast Furnace needs liquid input because it + // can't do 3 item inputs so have a shitty + // material + offsetID + 10, + TextureSet.SET_FLUID); + + public static final Werkstoff HafniaZirconiaBlend = new Werkstoff( + new short[] { 247, 223, 203 }, + "Hafnia-Zirconia Blend", // Maybe Hafnon?? + subscriptNumbers("??HfZr??"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 11, + TextureSet.SET_DULL); + + public static final Werkstoff Iodine = new Werkstoff( + new short[] { 171, 40, 175 }, + "Iodine", + subscriptNumbers("I"), + new Werkstoff.Stats().setProtons(53) + .setMass(127) + .setSublimation(true) + .setBoilingPoint(484) + .setGas(true), + Werkstoff.Types.ELEMENT, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addCells() + .enforceUnification(), + offsetID + 12, + TextureSet.SET_FLUID); + + // Lanthanide Line + public static final Werkstoff MuddyRareEarthMonaziteSolution = new Werkstoff( + new short[] { 111, 78, 55 }, + "Muddy Monazite Rare Earth Solution", + subscriptNumbers("??LaNdZr??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID + 14, + TextureSet.SET_FLUID); + + public static final Werkstoff DilutedRareEarthMonaziteMud = new Werkstoff( + new short[] { 160, 120, 90 }, + "Diluted Monazite Rare Earth Mud", + subscriptNumbers("??LaNdHf??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID + 15, + TextureSet.SET_FLUID); + + public static final Werkstoff DilutedMonaziteSulfate = new Werkstoff( + new short[] { 237, 201, 175 }, + "Diluted Monazite Sulfate", + subscriptNumbers("??LaNd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID + 16, + TextureSet.SET_FLUID); + + public static final Werkstoff NitratedRareEarthMonaziteConcentrate = new Werkstoff( + new short[] { 250, 223, 173 }, + "Nitrogenated Monazite Rare Earth Concentrate", + subscriptNumbers("??LaNd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID + 17, + TextureSet.SET_FLUID); + + public static final Werkstoff NitricMonaziteLeachedConcentrate = new Werkstoff( + new short[] { 244, 202, 22 }, + "Nitric Monazite Leached Concentrate", + subscriptNumbers("??LaNd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID + 18, + TextureSet.SET_FLUID); + + public static final Werkstoff MonaziteSulfate = new Werkstoff( + new short[] { 152, 118, 84 }, + "Monazite Sulfate", + subscriptNumbers("??CeEu??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 19, + TextureSet.SET_DULL); + + public static final Werkstoff AcidicMonazitePowder = new Werkstoff( + new short[] { 50, 23, 77 }, + "Acidic Monazite Powder", + subscriptNumbers("????"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 20, + TextureSet.SET_DULL); + + public static final Werkstoff MonaziteRareEarthFiltrate = new Werkstoff( + new short[] { 72, 60, 50 }, + "Monazite Rare Earth Filtrate", + subscriptNumbers("????"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 21, + TextureSet.SET_DULL); + + public static final Werkstoff NeutralizedMonaziteRareEarthFiltrate = new Werkstoff( + new short[] { 50, 23, 77 }, + "Neutralized Monazite Rare Earth Filtrate", + subscriptNumbers("????"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 22, + TextureSet.SET_DULL); + + public static final Werkstoff MonaziteRareEarthHydroxideConcentrate = new Werkstoff( + new short[] { 193, 154, 107 }, + "Monazite Rare Earth Hydroxide Concentrate", + subscriptNumbers("????"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 23, + TextureSet.SET_DULL); + + public static final Werkstoff DriedMonaziteRareEarthConcentrate = new Werkstoff( + new short[] { 250, 214, 165 }, + "Dried Monazite Rare Earth Concentrate", + subscriptNumbers("????"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 24, + TextureSet.SET_DULL); + + public static final Werkstoff CeriumDioxide = new Werkstoff( + new short[] { 255, 255, 255 }, + "Cerium Dioxide", + subscriptNumbers("CeO2"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .enforceUnification(), + offsetID + 25, + TextureSet.SET_DULL); + + public static final Werkstoff CeriumChloride = new Werkstoff( + new short[] { 255, 255, 255 }, + "Cerium Chloride", + subscriptNumbers("CeCl3"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 26, + TextureSet.SET_DULL); + + public static final Werkstoff CeriumOxalate = new Werkstoff( + new short[] { 255, 255, 224 }, + "Cerium Oxalate", + subscriptNumbers("Ce2(C2O4)3"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 27, + TextureSet.SET_DULL); + + public static final Werkstoff CeriumIIIOxide = new Werkstoff( + new short[] { 255, 255, 102 }, + "Cerium (III) Oxide", + subscriptNumbers("Ce2O3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 28, + TextureSet.SET_DULL, + Arrays.asList(Materials.Cerium, Materials.Oxygen), + new Pair<>(Materials.Cerium, 2), + new Pair<>(Materials.Oxygen, 3)); + + public static final Werkstoff CeriumRichMixture = new Werkstoff( + new short[] { 244, 164, 96 }, + "Cerium-Rich Mixture", + subscriptNumbers("??Ce??"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 29, + TextureSet.SET_DULL); + + public static final Werkstoff CooledMonaziteRareEarthConcentrate = new Werkstoff( + new short[] { 250, 214, 165 }, + "Cooled Monazite Rare Earth Concentrate", + subscriptNumbers("????"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 30, + TextureSet.SET_DULL); + + public static final Werkstoff MonaziteRarerEarthSediment = new Werkstoff( + new short[] { 250, 214, 165 }, + "MonaziteRarer Earth Sediment", + subscriptNumbers("????"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 31, + TextureSet.SET_DULL); + + public static final Werkstoff MonaziteHeterogenousHalogenicRareEarthMixture = new Werkstoff( + new short[] { 250, 214, 165 }, + "Heterogenous Halogenic Monazite Rare Earth Mixture", + subscriptNumbers("????"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 32, + TextureSet.SET_DULL); + + public static final Werkstoff SaturatedMonaziteRareEarthMixture = new Werkstoff( + new short[] { 250, 214, 165 }, + "Saturated Monazite Rare Earth", + subscriptNumbers("????"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 33, + TextureSet.SET_DULL); + + public static final Werkstoff SamaricResidue = new Werkstoff( + new short[] { 248, 243, 231 }, + "Samaric Residue", + subscriptNumbers("??SmGd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 34, + TextureSet.SET_DULL); + + public static final Werkstoff AmmoniumNitrate = new Werkstoff( + new short[] { 255, 255, 255 }, + "Ammonium Nitrate Solution", + subscriptNumbers("NH4NO3"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID + 36, + TextureSet.SET_FLUID); + + public static final Werkstoff ThoriumPhosphateCake = new Werkstoff( + new short[] { 188, 143, 143 }, + "Thorium-Phosphate Cake", + subscriptNumbers("??ThP??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 37, + TextureSet.SET_DULL); + + public static final Werkstoff ThoriumPhosphateConcentrate = new Werkstoff( + new short[] { 217, 144, 88 }, + "Thorium-Phosphate Concentrate", + subscriptNumbers("??ThP??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 38, + TextureSet.SET_DULL); + + public static final Werkstoff UraniumFiltrate = new Werkstoff( + new short[] { 190, 240, 94 }, + "Uranium Filtrate", + subscriptNumbers("??U??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 39, + TextureSet.SET_DULL); + + public static final Werkstoff NeutralizedUraniumFiltrate = new Werkstoff( + new short[] { 217, 120, 88 }, + "Neutralized Uranium Filtrate", + subscriptNumbers("??U??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 40, + TextureSet.SET_DULL); + + public static final Werkstoff SeaweedAsh = new Werkstoff( + new short[] { 70, 75, 71 }, + "Seaweed Ash", + new Werkstoff.Stats(), + Werkstoff.Types.BIOLOGICAL, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 41, + TextureSet.SET_DULL); + + public static final Werkstoff SeaweedConcentrate = new Werkstoff( + new short[] { 70, 100, 71 }, + "Seaweed Concentrate", + subscriptNumbers("??I??"), + new Werkstoff.Stats(), + Werkstoff.Types.BIOLOGICAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID + 42, + TextureSet.SET_FLUID); + + public static final Werkstoff PotassiumPermanganate = new Werkstoff( + new short[] { 165, 50, 138 }, + "Potassium Permanganate", + subscriptNumbers("KMnO4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 43, + TextureSet.SET_DULL); + + public static final Werkstoff PotassiumPermanganateSolution = new Werkstoff( + new short[] { 165, 50, 138 }, + "Potassium Permanganate Solution", + subscriptNumbers("KMnO4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID + 44, + TextureSet.SET_FLUID); + + public static final Werkstoff SeaweedByproducts = new Werkstoff( + new short[] { 125, 50, 138 }, + "Seaweed Byproducts", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID + 45, + TextureSet.SET_FLUID); + + public static final Werkstoff NitricLeachedMonaziteMixture = new Werkstoff( + new short[] { 125, 50, 138 }, + "Nitric-Leached Monazite Mixture", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID + 46, + TextureSet.SET_FLUID); + + public static final Werkstoff EuropiumOxide = new Werkstoff( + new short[] { 255, 255, 255 }, + "Europium Oxide", + subscriptNumbers("EuO"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 47, + TextureSet.SET_DULL); + + public static final Werkstoff EuropiumSulfide = new Werkstoff( + new short[] { 5, 0, 5 }, + "Europium Sulfide", + subscriptNumbers("EuS"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 48, + TextureSet.SET_DULL); + + public static final Werkstoff UnknownBlend = new Werkstoff( + new short[] { 0, 0, 5 }, + "UnknownBlend", + subscriptNumbers("?????"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 49, + TextureSet.SET_DULL); + + public static final Werkstoff EuropiumIIIOxide = new Werkstoff( + new short[] { 255, 230, 255 }, + "Europium III Oxide", + subscriptNumbers("Eu2O3"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID + 50, + TextureSet.SET_DULL); + + // TODO + + // BASTNASITE + public static final Werkstoff MuddyRareEarthBastnasiteSolution = new Werkstoff( + new short[] { 205, 133, 63 }, + "Muddy Bastnasite Rare Earth Solution", + subscriptNumbers("??LaCeY??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID2, + TextureSet.SET_FLUID); + /* + * public static final Werkstoff FluorosilicicAcid = new Werkstoff( new short[] {205, 133, 63}, + * "Hexafluorosilicic Acid", subscriptNumbers("H2SiF6"), new Werkstoff.Stats(), Werkstoff.Types.COMPOUND, new + * Werkstoff.GenerationFeatures().disable().addCells(), offsetID2 + 1, TextureSet.SET_FLUID ); + */ + public static final Werkstoff SodiumFluorosilicate = new Werkstoff( + new short[] { 205, 133, 63 }, + "Sodiumfluorosilicate", + subscriptNumbers("Na2SiF6"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID2 + 2, + TextureSet.SET_FLUID); + + public static final Werkstoff SteamCrackedBasnasiteSolution = new Werkstoff( + new short[] { 205, 133, 63 }, + "Steam-Cracked Bastnasite Mud", + subscriptNumbers("??LaCeY??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID2 + 3, + TextureSet.SET_FLUID); + + public static final Werkstoff ConditionedBastnasiteMud = new Werkstoff( + new short[] { 205, 133, 63 }, + "Conditioned Bastnasite Mud", + subscriptNumbers("??LaCeY??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID2 + 4, + TextureSet.SET_FLUID); + + public static final Werkstoff DiltedRareEarthBastnasiteMud = new Werkstoff( + new short[] { 205, 133, 63 }, + "Diluted Bastnasite Mud", + subscriptNumbers("??LaCeY??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID2 + 5, + TextureSet.SET_FLUID); + + public static final Werkstoff FilteredBastnasiteMud = new Werkstoff( + new short[] { 205, 133, 63 }, + "Filtered Bastnasite Mud", + subscriptNumbers("??LaCeY??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID2 + 6, + TextureSet.SET_FLUID); + + public static final Werkstoff BastnasiteRareEarthOxidePowder = new Werkstoff( + new short[] { 205, 133, 63 }, + "Bastnasite Rare Earth Oxides", + subscriptNumbers("??LaCeY??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 7, + TextureSet.SET_DULL); + + public static final Werkstoff LeachedBastnasiteRareEarthOxides = new Werkstoff( + new short[] { 205, 133, 63 }, + "Acid-Leached Bastnasite Rare Earth Oxides", + subscriptNumbers("??LaCeY??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 8, + TextureSet.SET_DULL); + + public static final Werkstoff Gangue = new Werkstoff( + new short[] { 0, 0, 0 }, + "Gangue", + subscriptNumbers("Useless..."), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addPrefix(OrePrefixes.block) + .removePrefix(OrePrefixes.ingot) + .removePrefix(OrePrefixes.gem), + offsetID2 + 9, + TextureSet.SET_DULL); + // TODO: Deal with colouring + public static final Werkstoff RoastedRareEarthOxides = new Werkstoff( + new short[] { 160, 82, 45 }, + "Roasted Rare Earth Oxides", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 10, + TextureSet.SET_DULL); + + public static final Werkstoff WetRareEarthOxides = new Werkstoff( + new short[] { 160, 82, 49 }, + "Wet Rare Earth Oxides", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 11, + TextureSet.SET_DULL); + + public static final Werkstoff CeriumOxidisedRareEarthOxides = new Werkstoff( + new short[] { 160, 82, 49 }, + "Cerium-Oxidised Rare Earth Oxides", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 12, + TextureSet.SET_DULL); + + public static final Werkstoff BastnasiteRarerEarthOxides = new Werkstoff( + new short[] { 160, 82, 49 }, + "Bastnasite Rarer Earth Oxides", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 13, + TextureSet.SET_DULL); + + public static final Werkstoff NitratedBastnasiteRarerEarthOxides = new Werkstoff( + new short[] { 160, 90, 60 }, + "Nitrogenated Bastnasite Rarer Earth Oxides", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID2 + 14, + TextureSet.SET_DULL); + + public static final Werkstoff SaturatedBastnasiteRarerEarthOxides = new Werkstoff( + new short[] { 170, 90, 60 }, + "Bastnasite Rarer Earth Oxide Suspension", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID2 + 15, + TextureSet.SET_DULL); + + public static final Werkstoff SamaricRareEarthConcentrate = new Werkstoff( + new short[] { 170, 90, 60 }, + "Samaric Rare Earth Concentrate", + subscriptNumbers("??SmHoTb??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 16, + TextureSet.SET_DULL); + + public static final Werkstoff NeodymicRareEarthConcentrate = new Werkstoff( + new short[] { 170, 90, 60 }, + "Neodymium Rare Earth Concentrate", + subscriptNumbers("??LaNdPr??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 17, + TextureSet.SET_DULL); + public static final Werkstoff LanthaniumChloride = new Werkstoff( + new short[] { 82, 112, 102 }, + "Lanthanium Chloride", + subscriptNumbers("LaCl3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 21, + TextureSet.SET_DULL, + Arrays.asList(Materials.Lanthanum, Materials.Chlorine), + new Pair<>(Materials.Lanthanum, 1), + new Pair<>(Materials.Chlorine, 3)); + + public static final Werkstoff NeodymiumOxide = new Werkstoff( + new short[] { 82, 112, 102 }, + "Neodymium Oxide", + subscriptNumbers("Nd2O3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 22, + TextureSet.SET_DULL, + Arrays.asList(Materials.Neodymium, Materials.Oxygen), + new Pair<>(Materials.Neodymium, 2), + new Pair<>(Materials.Oxygen, 3)); + + public static final Werkstoff FluorinatedSamaricConcentrate = new Werkstoff( + new short[] { 255, 182, 193 }, + "Fluorinated Samaric Concentrate", + subscriptNumbers("??SmHo??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 23, + TextureSet.SET_DULL); + + public static final Werkstoff CalciumFluoride = new Werkstoff( + new short[] { 255, 250, 250 }, + "Calcium Fluoride", + subscriptNumbers("CaF2"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addCells(), + offsetID2 + 24, + TextureSet.SET_DULL, + Arrays.asList(Materials.Calcium, Materials.Fluorine), + new Pair<>(Materials.Calcium, 1), + new Pair<>(Materials.Fluorine, 2)); + + public static final Werkstoff SamariumTerbiumMixture = new Werkstoff( + new short[] { 223, 182, 193 }, + "Samarium-Terbium Mixture", + subscriptNumbers("??SmTb??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 25, + TextureSet.SET_DULL); + + public static final Werkstoff NitratedSamariumTerbiumMixture = new Werkstoff( + new short[] { 223, 182, 193 }, + "Nitrogenated Samarium-Terbium Mixture", + subscriptNumbers("??SmTb??NH4NO3"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 26, + TextureSet.SET_DULL); + + public static final Werkstoff TerbiumNitrate = new Werkstoff( + new short[] { 167, 252, 0 }, + "Terbium Nitrate", + subscriptNumbers("TbNO3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 27, + TextureSet.SET_DULL, + Arrays.asList(Materials.Terbium, Materials.Nitrogen, Materials.Oxygen), + new Pair<>(Materials.Terbium, 1), + new Pair<>(Materials.Nitrogen, 1), + new Pair<>(Materials.Oxygen, 3)); + + public static final Werkstoff SamariumOreConcentrate = new Werkstoff( + new short[] { 255, 200, 230 }, + "Samarium Ore Concentrate", + subscriptNumbers("??Sm??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 28, + TextureSet.SET_DULL); + + public static final Werkstoff DephosphatedSamariumConcentrate = new Werkstoff( + new short[] { 255, 170, 220 }, + "Dephosphated Samarium Concentrate", + subscriptNumbers("??Sm??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID2 + 29, + TextureSet.SET_DULL); + + // Weird/Exciting Chemicals + public static final Werkstoff Tetrahydrofuran = new Werkstoff( + new short[] { 222, 165, 164 }, + "Tetrahydrofuran", + subscriptNumbers("(CH2)4O"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3, + TextureSet.SET_FLUID); + + // 1,4-Butanediol + public static final Werkstoff Butanediol = new Werkstoff( + new short[] { 185, 78, 72 }, + "1,4-Butanediol", + subscriptNumbers("HO(CH2)4OH"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3 + 1, + TextureSet.SET_FLUID); + + // Acidicised 1,4-Butanediol + public static final Werkstoff AcidicButanediol = new Werkstoff( + new short[] { 255, 239, 213 }, + "Acidicised 1,4-Butanediol", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3 + 2, + TextureSet.SET_FLUID); + + // Tellurium-Molybdenum-Oxide Catalyst + public static final Werkstoff MoTeOCatalyst = new Werkstoff( + new short[] { 238, 131, 238 }, + "Tellurium-Molybdenum-Oxide Catalyst", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID3 + 3, + TextureSet.SET_DULL); + + // Tellurium Oxide + public static final Werkstoff TelluriumIVOxide = new Werkstoff( + new short[] { 229, 199, 187 }, + "Tellurium (IV) Oxide", + subscriptNumbers("TeO2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID3 + 4, + TextureSet.SET_DULL); + + public static final Werkstoff MolybdenumIVOxide = new Werkstoff( + new short[] { 52, 53, 57 }, + "Molybdenum (IV) Oxide", + subscriptNumbers("MoO2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID3 + 5, + TextureSet.SET_DULL); + + public static final Werkstoff Polytetrahydrofuran = new Werkstoff( + new short[] { 192, 128, 129 }, + "Polytetrahydrofuran", + subscriptNumbers("(C4H8O)OH2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addCells(), + offsetID3 + 6, + TextureSet.SET_DULL); + + public static final Werkstoff TungstophosphoricAcid = new Werkstoff( + new short[] { 223, 255, 0 }, + "Tungstophosphoric Acid", + subscriptNumbers("H3PW12O40"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3 + 7, + TextureSet.SET_FLUID); + + public static final Werkstoff TolueneDiisocyanate = new Werkstoff( + new short[] { 255, 255, 102 }, + "Toluene Diisocyanate", + subscriptNumbers("CH3C6H3(NCO)2"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3 + 8, + TextureSet.SET_FLUID); + + public static final Werkstoff Dinitrotoluene = new Werkstoff( + new short[] { 216, 191, 216 }, + "Dinitrotoluene", + subscriptNumbers("C7H6N2O4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3 + 9, + TextureSet.SET_FLUID); + + public static final Werkstoff Diaminotoluene = new Werkstoff( + new short[] { 227, 218, 201 }, + "Diaminotoluene", + subscriptNumbers("C6H3(NH2)2CH3"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3 + 10, + TextureSet.SET_FLUID); + + public static final Werkstoff TolueneTetramethylDiisocyanate = new Werkstoff( + new short[] { 255, 255, 255 }, + "Toluene Tetramethyl Diisocyanate", + subscriptNumbers("(CONH)2(C6H4)2CH2(C4O)"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3 + 11, + TextureSet.SET_FLUID); + + public static final Werkstoff PTMEGElastomer = new Werkstoff( + new short[] { 248, 248, 255 }, + "PTMEG Elastomer", + new Werkstoff.Stats().setMeltingPoint(600) + .setMeltingVoltage(64), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten() + .addMetalItems(), + offsetID3 + 12, + TextureSet.SET_DULL); + + public static final Werkstoff PotassiumChlorate = new Werkstoff( + new short[] { 240, 255, 255 }, + "Potassium Chlorate", + subscriptNumbers("KClO3"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten(), + offsetID3 + 14, + TextureSet.SET_DULL); + + public static final Werkstoff DilutedAcetone = new Werkstoff( + new short[] { 254, 254, 250 }, + "Diluted Acetone", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3 + 16, + TextureSet.SET_FLUID); + + public static final Werkstoff MolybdenumTrioxide = new Werkstoff( + new short[] { 236, 255, 248 }, + "Molybdenum Trioxide", + subscriptNumbers("MoO3"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID3 + 17, + TextureSet.SET_DULL); + + // TODO Samarium Processing Line Material regist + + public static final Werkstoff MuddySamariumRareEarthSolution = new Werkstoff( + new short[] { 226, 180, 108 }, + "Muddy Samarium Rare Earth Solution", + subscriptNumbers("???Sm???"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID5 + 1, + TextureSet.SET_FLUID); + + public static final Werkstoff SamariumRareEarthMud = new Werkstoff( + new short[] { 226, 180, 128 }, + "Samarium Rare Earth Mud", + subscriptNumbers("??Sm??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID5 + 2, + TextureSet.SET_FLUID); + + public static final Werkstoff DilutedSamariumRareEarthSolution = new Werkstoff( + new short[] { 226, 180, 148 }, + "Diluted Samarium Rare Earth Solution", + subscriptNumbers("?Sm?"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID5 + 3, + TextureSet.SET_FLUID); + + public static final Werkstoff SamariumOxalate = new Werkstoff( + new short[] { 248, 248, 180 }, + "Samarium(III) Oxalate", + subscriptNumbers("?Sm2(C2O4)3"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID5 + 4, + TextureSet.SET_DULL); + + public static final Werkstoff SamariumChloride = new Werkstoff( + new short[] { 248, 248, 120 }, + "Samarium(III)-Chloride", + subscriptNumbers("?SmCl3"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten(), + offsetID5 + 5, + TextureSet.SET_DULL); + + public static final Werkstoff SamariumChlorideSodiumChlorideBlend = new Werkstoff( + new short[] { 255, 200, 230 }, + "Samarium Chloride-Sodium Chloride Blend", + subscriptNumbers("?SmCl3NaCl"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID5 + 6, + TextureSet.SET_DULL); + + public static final Werkstoff ImpureLanthanumChloride = new Werkstoff( + new short[] { 90, 100, 30 }, + "Impure Lanthanum Chloride", + subscriptNumbers("?LaCl3"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID5 + 7, + TextureSet.SET_DULL); + + public static final Werkstoff SamariumOxide = new Werkstoff( + new short[] { 223, 182, 193 }, + "Samarium Oxide", + subscriptNumbers("Sm2O3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID5 + 8, + TextureSet.SET_DULL, + Arrays.asList(Materials.Samarium, Materials.Oxygen), + new Pair<>(Materials.Samarium, 2), + new Pair<>(Materials.Oxygen, 3)); + + public static final Werkstoff ChlorinatedRareEarthConcentrate = new Werkstoff( + new short[] { 130, 80, 60 }, + "Chlorinated Rare Earth Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID5 + 9, + TextureSet.SET_FLUID); + + public static final Werkstoff ChlorinatedRareEarthEnrichedSolution = new Werkstoff( + new short[] { 130, 90, 60 }, + "Chlorinated Rare Earth Enriched Solution", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID5 + 10, + TextureSet.SET_FLUID); + + public static final Werkstoff ChlorinatedRareEarthDilutedSolution = new Werkstoff( + new short[] { 216, 180, 100 }, + "Chlorinated Rare Earth Diluted Solution", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID5 + 11, + TextureSet.SET_FLUID); + + public static final Werkstoff RarestEarthResidue = new Werkstoff( + new short[] { 224, 211, 211 }, + "Rarest Earth Residue", + subscriptNumbers("???"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID5 + 12, + TextureSet.SET_DULL); + + // TODO reg Lanth Ore Concentrate + /** + * Extracted Nano Resin Lanthanum1.2 Praseodymium3.4 Cerium5.6 Neodymium7.8 Promethium9.10 Samarium11.12 √ + * Europium13.14 Gadolinium15.16 Terbium17.18 Dysprosium19.20 Holmium21.22 Erbium23.24 Thulium25.26 Ytterbium27.28 + * Lutetium29.30 + */ + + public static final Werkstoff LanthanumExtractingNanoResin = new Werkstoff( + new short[] { 50, 80, 40 }, + "Lanthanum Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 1, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledLanthanumExtractingNanoResin = new Werkstoff( + new short[] { 128, 128, 80 }, + "Filled Lanthanum Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 2, + TextureSet.SET_FLUID); + + public static final Werkstoff PraseodymiumExtractingNanoResin = new Werkstoff( + new short[] { 80, 192, 130 }, + "Praseodymium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 3, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledPraseodymiumExtractingNanoResin = new Werkstoff( + new short[] { 140, 192, 130 }, + "Filled Praseodymium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 4, + TextureSet.SET_FLUID); + + public static final Werkstoff CeriumExtractingNanoResin = new Werkstoff( + new short[] { 80, 240, 160 }, + "Cerium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 5, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledCeriumExtractingNanoResin = new Werkstoff( + new short[] { 160, 240, 180 }, + "Filled Cerium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 6, + TextureSet.SET_FLUID); + + public static final Werkstoff NeodymiumExtractingNanoResin = new Werkstoff( + new short[] { 128, 140, 128 }, + "Neodymium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 7, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledNeodymiumExtractingNanoResin = new Werkstoff( + new short[] { 150, 150, 150 }, + "Filled Neodymium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 8, + TextureSet.SET_FLUID); + + public static final Werkstoff PromethiumExtractingNanoResin = new Werkstoff( + new short[] { 110, 255, 60 }, + "Promethium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 9, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledPromethiumExtractingNanoResin = new Werkstoff( + new short[] { 150, 255, 140 }, + "Filled Promethium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 10, + TextureSet.SET_FLUID); + + public static final Werkstoff SamariumExtractingNanoResin = new Werkstoff( + new short[] { 255, 240, 100 }, + "Samarium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 11, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledSamariumExtractingNanoResin = new Werkstoff( + new short[] { 255, 240, 196 }, + "Filled Samarium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 12, + TextureSet.SET_FLUID); + + public static final Werkstoff EuropiumExtractingNanoResin = new Werkstoff( + new short[] { 240, 160, 240 }, + "Europium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 13, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledEuropiumExtractingNanoResin = new Werkstoff( + new short[] { 240, 200, 240 }, + "Filled Europium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 14, + TextureSet.SET_FLUID); + + public static final Werkstoff GadoliniumExtractingNanoResin = new Werkstoff( + new short[] { 120, 255, 80 }, + "Gadolinium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 15, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledGadoliniumExtractingNanoResin = new Werkstoff( + new short[] { 160, 255, 140 }, + "Filled Gadolinium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 16, + TextureSet.SET_FLUID); + + public static final Werkstoff TerbiumExtractingNanoResin = new Werkstoff( + new short[] { 200, 200, 200 }, + "Terbium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 17, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledTerbiumExtractingNanoResin = new Werkstoff( + new short[] { 255, 255, 255 }, + "Filled Terbium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 18, + TextureSet.SET_FLUID); + + public static final Werkstoff DysprosiumExtractingNanoResin = new Werkstoff( + new short[] { 110, 240, 180 }, + "Dysprosium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 19, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledDysprosiumExtractingNanoResin = new Werkstoff( + new short[] { 150, 240, 180 }, + "Filled Dysprosium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 20, + TextureSet.SET_FLUID); + + public static final Werkstoff HolmiumExtractingNanoResin = new Werkstoff( + new short[] { 16, 16, 216 }, + "Holmium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 21, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledHolmiumExtractingNanoResin = new Werkstoff( + new short[] { 60, 90, 255 }, + "Filled Holmium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 22, + TextureSet.SET_FLUID); + + public static final Werkstoff ErbiumExtractingNanoResin = new Werkstoff( + new short[] { 200, 160, 80 }, + "Erbium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 23, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledErbiumExtractingNanoResin = new Werkstoff( + new short[] { 233, 170, 100 }, + "Filled Erbium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 24, + TextureSet.SET_FLUID); + + public static final Werkstoff ThuliumExtractingNanoResin = new Werkstoff( + new short[] { 128, 178, 255 }, + "Thulium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 25, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledThuliumExtractingNanoResin = new Werkstoff( + new short[] { 160, 200, 255 }, + "Filled Thulium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 26, + TextureSet.SET_FLUID); + + public static final Werkstoff YtterbiumExtractingNanoResin = new Werkstoff( + new short[] { 0, 255, 0 }, + "Ytterbium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 27, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledYtterbiumExtractingNanoResin = new Werkstoff( + new short[] { 100, 255, 100 }, + "Filled Ytterbium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 28, + TextureSet.SET_FLUID); + + public static final Werkstoff LutetiumExtractingNanoResin = new Werkstoff( + new short[] { 230, 16, 230 }, + "Lutetium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 29, + TextureSet.SET_FLUID); + + public static final Werkstoff FilledLutetiumExtractingNanoResin = new Werkstoff( + new short[] { 240, 100, 240 }, + "Filled Lutetium Extracting Nano Resin", + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 30, + TextureSet.SET_FLUID); + + // Lanthanides Chloride Concentrate + // Lanthanum + public static final Werkstoff LanthanumChlorideConcentrate = new Werkstoff( + new short[] { 128, 128, 80 }, + "Lanthanum Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 31, + TextureSet.SET_FLUID); + + // Praseodymium + public static final Werkstoff PraseodymiumChlorideConcentrate = new Werkstoff( + new short[] { 140, 192, 130 }, + "Praseodymium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 32, + TextureSet.SET_FLUID); + + // Cerium + public static final Werkstoff CeriumChlorideConcentrate = new Werkstoff( + new short[] { 160, 240, 180 }, + "Cerium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 33, + TextureSet.SET_FLUID); + + // Neodymium + public static final Werkstoff NeodymiumChlorideConcentrate = new Werkstoff( + new short[] { 150, 150, 150 }, + "Neodymium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 34, + TextureSet.SET_FLUID); + + // + public static final Werkstoff PromethiumChlorideConcentrate = new Werkstoff( + new short[] { 150, 255, 140 }, + "Promethium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 35, + TextureSet.SET_FLUID); + + // + public static final Werkstoff SamariumChlorideConcentrate = new Werkstoff( + new short[] { 255, 240, 196 }, + "Samarium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 36, + TextureSet.SET_FLUID); + + // + public static final Werkstoff EuropiumChlorideConcentrate = new Werkstoff( + new short[] { 240, 200, 240 }, + "Europium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 37, + TextureSet.SET_FLUID); + + // + public static final Werkstoff GadoliniumChlorideConcentrate = new Werkstoff( + new short[] { 160, 255, 140 }, + "Gadolinium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 38, + TextureSet.SET_FLUID); + + // + public static final Werkstoff TerbiumChlorideConcentrate = new Werkstoff( + new short[] { 255, 255, 255 }, + "Terbium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 39, + TextureSet.SET_FLUID); + + // + public static final Werkstoff DysprosiumChlorideConcentrate = new Werkstoff( + new short[] { 150, 240, 180 }, + "Dysprosium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 40, + TextureSet.SET_FLUID); + + // + public static final Werkstoff HolmiumChlorideConcentrate = new Werkstoff( + new short[] { 60, 90, 255 }, + "Holmium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 41, + TextureSet.SET_FLUID); + + // + public static final Werkstoff ErbiumChlorideConcentrate = new Werkstoff( + new short[] { 233, 170, 100 }, + "Erbium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 42, + TextureSet.SET_FLUID); + + // + public static final Werkstoff ThuliumChlorideConcentrate = new Werkstoff( + new short[] { 160, 200, 255 }, + "Thulium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 43, + TextureSet.SET_FLUID); + + // + public static final Werkstoff YtterbiumChlorideConcentrate = new Werkstoff( + new short[] { 100, 255, 100 }, + "Ytterbium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 44, + TextureSet.SET_FLUID); + + // + public static final Werkstoff LutetiumChlorideConcentrate = new Werkstoff( + new short[] { 240, 100, 240 }, + "Lutetium Chloride Concentrate", + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID4 + 45, + TextureSet.SET_FLUID); + + // Lanthanides Ore Concentrate + + // Lanthanum + public static final Werkstoff LanthanumOreConcentrate = new Werkstoff( + new short[] { 128, 128, 96 }, + "Lanthanum Ore Concentrate", + subscriptNumbers("??La??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 46, + TextureSet.SET_DULL); + + // Praseodymium + public static final Werkstoff PraseodymiumOreConcentrate = new Werkstoff( + new short[] { 140, 192, 130 }, + "Praseodymium Ore Concentrate", + subscriptNumbers("??Pr??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 47, + TextureSet.SET_DULL); + + // Cerium + public static final Werkstoff CeriumOreConcentrate = CeriumRichMixture; + + // Neodymium + public static final Werkstoff NeodymiumOreConcentrate = new Werkstoff( + new short[] { 128, 128, 128 }, + "Neodymium Ore Concentrate", + subscriptNumbers("??Nd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 49, + TextureSet.SET_DULL); + + // Promethium + public static final Werkstoff PromethiumOreConcentrate = new Werkstoff( + new short[] { 150, 255, 140 }, + "Promethium Ore Concentrate", + subscriptNumbers("??Po??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 50, + TextureSet.SET_DULL); + + // Europium + public static final Werkstoff EuropiumOreConcentrate = new Werkstoff( + new short[] { 240, 200, 240 }, + "Europium Ore Concentrate", + subscriptNumbers("??Eu??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 51, + TextureSet.SET_DULL); + + // Gadolinium + public static final Werkstoff GadoliniumOreConcentrate = new Werkstoff( + new short[] { 160, 255, 140 }, + "Gadolinium Ore Concentrate", + subscriptNumbers("??Gd??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 52, + TextureSet.SET_DULL); + + // Terbium + public static final Werkstoff TerbiumOreConcentrate = new Werkstoff( + new short[] { 255, 255, 255 }, + "Terbium Ore Concentrate", + subscriptNumbers("??Tb??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 53, + TextureSet.SET_DULL); + + // Dysprosium + public static final Werkstoff DysprosiumOreConcentrate = new Werkstoff( + new short[] { 150, 240, 180 }, + "Dysprosium Ore Concentrate", + subscriptNumbers("??Dy??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 54, + TextureSet.SET_DULL); + + // Holmium + public static final Werkstoff HolmiumOreConcentrate = new Werkstoff( + new short[] { 60, 90, 255 }, + "Holmium Ore Concentrate", + subscriptNumbers("??Ho??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 55, + TextureSet.SET_DULL); + + // Erbium + public static final Werkstoff ErbiumOreConcentrate = new Werkstoff( + new short[] { 233, 170, 100 }, + "Erbium Ore Concentrate", + subscriptNumbers("??Er??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 56, + TextureSet.SET_DULL); + + // Thulium + public static final Werkstoff ThuliumOreConcentrate = new Werkstoff( + new short[] { 160, 200, 255 }, + "Thulium Ore Concentrate", + subscriptNumbers("??Tm??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 57, + TextureSet.SET_DULL); + + // Ytterbium + public static final Werkstoff YtterbiumOreConcentrate = new Werkstoff( + new short[] { 100, 255, 100 }, + "Ytterbium Ore Concentrate", + subscriptNumbers("??Yb??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 58, + TextureSet.SET_DULL); + + // Lutetium + public static final Werkstoff LutetiumOreConcentrate = new Werkstoff( + new short[] { 240, 100, 240 }, + "Lutetium Ore Concentrate", + subscriptNumbers("??Lu??"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID4 + 59, + TextureSet.SET_DULL); + + // LuAG + public static final Werkstoff CeriumDopedLutetiumAluminiumOxygenBlend = new Werkstoff( + new short[] { 128, 192, 80 }, + "Cerium-doped Lutetium Aluminium Oxygen Blend", + subscriptNumbers("(Ce)Lu3Al5O12"), + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMolten(), + offsetID5 + 38, + TextureSet.SET_DULL); + + public static final Werkstoff CeriumDopedLutetiumAluminiumGarnet = new Werkstoff( + new short[] { 144, 255, 63 }, + "Cerium-doped Lutetium Aluminium Garnet (Ce:LuAG)", + subscriptNumbers("(Ce)Lu3Al5O12"), + new Werkstoff.Stats(), + Werkstoff.Types.MATERIAL, + new Werkstoff.GenerationFeatures().disable() + .addGems(), + offsetID5 + 39, + TextureSet.SET_GEM_VERTICAL); + + public static final Werkstoff Permalloy = new Werkstoff( + new short[] { 195, 230, 225 }, + "Permalloy", + subscriptNumbers("Ni4FeMo"), + new Werkstoff.Stats().setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMetalItems() + .addMixerRecipes((short) 3) + .enforceUnification(), + offsetID3b, + TextureSet.SET_DULL, + new Pair<>(Materials.Nickel, 4), + new Pair<>(Materials.Iron, 1), + new Pair<>(Materials.Molybdenum, 1)); + + public static final Werkstoff MuMetal = new Werkstoff( + new short[] { 210, 230, 225 }, + "Mu-metal", + subscriptNumbers("?NiFeCuCrMo?"), + new Werkstoff.Stats().setBlastFurnace(true) + .setCentrifuge(true) + .setMass(180) + .setSpeedOverride(3), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMetalItems() + .addMultipleIngotMetalWorkingItems() + .addCraftingMetalWorkingItems() + .enforceUnification(), + offsetID3b + 1, + TextureSet.SET_METALLIC, + new Pair<>(WerkstoffMaterialPool.Permalloy, 9), + new Pair<>(Materials.Copper, 1), + new Pair<>(Materials.Chrome, 1)); + + public static final Werkstoff Thorium234 = new Werkstoff( + new short[] { 0, 40, 0 }, + "Thorium 234", + superscriptNumbers("Th234"), + new Werkstoff.Stats().setBlastFurnace(true) + .setRadioactive(true), + Werkstoff.Types.ISOTOPE, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID3b + 2, + TextureSet.SET_DULL); + + public static final Werkstoff SiliconNitride = new Werkstoff( + new short[] { 132, 140, 120 }, + "Silicon Nitride", + subscriptNumbers("Si3N4"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addMetalItems() + .enforceUnification(), + offsetID3b + 3, + TextureSet.SET_DULL); + + public static final Werkstoff Fluoroform = new Werkstoff( + new short[] { 0, 0, 0 }, + "Fluoroform", + subscriptNumbers("CHF3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3b + 4, + TextureSet.SET_FLUID, + new Pair<>(Materials.Carbon, 1), + new Pair<>(Materials.Hydrogen, 1), + new Pair<>(Materials.Fluorine, 3)); + + public static final Werkstoff FluoroformOxygenMix = new Werkstoff( + new short[] { 0, 0, 0 }, + "Reactive-Ion Etching Mixture", + subscriptNumbers("CHF3/O2"), + new Werkstoff.Stats().setCentrifuge(true), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3b + 5, + TextureSet.SET_FLUID); + + public static final Werkstoff BoronTrioxide = new Werkstoff( + new short[] { 238, 222, 209 }, + "Boron Trioxide", + subscriptNumbers("B2O3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID3b + 6, + TextureSet.SET_DULL, + new Pair<>(Materials.Boron, 2), + new Pair<>(Materials.Oxygen, 3)); + + public static final Werkstoff BoronTrichloride = new Werkstoff( + new short[] { 154, 96, 208 }, + "Boron Trichloride", + subscriptNumbers("BCl3"), + new Werkstoff.Stats().setElektrolysis(true), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3b + 7, + TextureSet.SET_FLUID, + new Pair<>(Materials.Boron, 1), + new Pair<>(Materials.Chlorine, 3)); + + public static final Werkstoff LanthanumHexaboride = new Werkstoff( + new short[] { 140, 110, 120 }, + "Lanthanum Hexaboride", + subscriptNumbers("LaB6"), + new Werkstoff.Stats().setMass(200), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust() + .addGems() + .addSimpleMetalWorkingItems(), + offsetID3b + 8, + TextureSet.SET_GEM_HORIZONTAL, + new Pair<>(Materials.Lanthanum, 1), + new Pair<>(Materials.Boron, 6)); + + public static final Werkstoff LanthanumOxide = new Werkstoff( + new short[] { 105, 209, 180 }, + "Lanthanum Oxide", + subscriptNumbers("La2O3"), + new Werkstoff.Stats(), + Werkstoff.Types.COMPOUND, + new Werkstoff.GenerationFeatures().disable() + .onlyDust(), + offsetID3b + 9, + TextureSet.SET_DULL); + + public static final Werkstoff NitrogenPlasmaSilaneMix = new Werkstoff( + new short[] { 140, 125, 220 }, + "Silane-Nitrogen Plasma Mixture", + subscriptNumbers("SiH4/N"), + new Werkstoff.Stats(), + Werkstoff.Types.MIXTURE, + new Werkstoff.GenerationFeatures().disable() + .addCells(), + offsetID3b + 10, + TextureSet.SET_FLUID); + + public static void runInit() { + addSubTags(); + } + + private static void addSubTags() { + + // WerkstoffMaterialPool.PTMEGElastomer.add(SubTag.BOUNCY, SubTag.STRETCHY); + + } + + @Override + public void run() {} +} diff --git a/src/main/java/gtnhlanth/common/tileentity/MTEDigester.java b/src/main/java/gtnhlanth/common/tileentity/MTEDigester.java new file mode 100644 index 0000000000..9e1fc65c1b --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/MTEDigester.java @@ -0,0 +1,240 @@ +package gtnhlanth.common.tileentity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofCoil; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.HeatingCoilLevel; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gtnhlanth.api.recipe.LanthanidesRecipeMaps; +import gtnhlanth.util.DescTextLocalization; + +public class MTEDigester extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { + + protected int casingAmount = 0; + protected int height = 0; + + private HeatingCoilLevel heatLevel; + + private final IStructureDefinition multiDefinition = StructureDefinition.builder() + .addShape( + mName, + transpose( + new String[][] { { " ", " ttttt ", " t---t ", " t---t ", " t---t ", " ttttt ", " " }, + { " ttt ", " t---t ", "t-----t", "t-----t", "t-----t", " t---t ", " ttt " }, + { " tccct ", "tc---ct", "c-----c", "c-----c", "c-----c", "tc---ct", " tccct " }, + { " tt~tt ", "thhhhht", "thsssht", "thsssht", "thsssht", "thhhhht", " ttttt " }, })) + + .addElement( + 't', + buildHatchAdder(MTEDigester.class) + .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy, Muffler) + .casingIndex(47) + .dot(1) + .buildAndChain(GregTechAPI.sBlockCasings4, 0)) + .addElement('h', ofBlock(GregTechAPI.sBlockCasings1, 11)) + .addElement('s', ofBlock(GregTechAPI.sBlockCasings4, 1)) + .addElement('c', ofCoil(MTEDigester::setCoilLevel, MTEDigester::getCoilLevel)) + .build(); + + public MTEDigester(String name) { + super(name); + } + + public MTEDigester(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return checkPiece(mName, 3, 3, 0) && !mMufflerHatches.isEmpty() && mMaintenanceHatches.size() == 1; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + public HeatingCoilLevel getCoilLevel() { + return this.heatLevel; + } + + public void setCoilLevel(HeatingCoilLevel level) { + this.heatLevel = level; + } + + @Override + public RecipeMap getRecipeMap() { + return LanthanidesRecipeMaps.digesterRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).enablePerfectOC(); + } + + @Override + protected @Nonnull CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + return recipe.mSpecialValue <= MTEDigester.this.getCoilLevel() + .getHeat() ? CheckRecipeResultRegistry.SUCCESSFUL + : CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); + } + + }; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack aStack) { + return 20; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { + return new MTEDigester(this.mName); + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + buildPiece(mName, itemStack, b, 3, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 3, 3, 0, elementBudget, env, false, true); + } + + @Override + public String[] getStructureDescription(ItemStack arg0) { + return DescTextLocalization.addText("Digester.hint", 6); + } + + public ITexture[] getTexture(IGregTechTileEntity te, ForgeDirection side, ForgeDirection facing, int colorIndex, + boolean active, boolean redstone) { + + // Oil Cracker textures cuz I'm lazy + + if (side == facing) { + if (active) return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][47] }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Digester") + .addInfo("Controller block for the Digester") + .addInfo("Input ores and fluid, output water.") + .addInfo(DescTextLocalization.BLUEPRINT_INFO) + .addSeparator() + .addController("Front bottom") + .addInputHatch("Hint block with dot 1") + .addInputBus("Hint block with dot 1") + .addOutputHatch("Hint block with dot 1") + .addOutputBus("Hint block with dot 1") + .addMaintenanceHatch("Hint block with dot 1") + .addMufflerHatch("Hint block with dot 1") + .toolTipFinisher("GTNH: Lanthanides"); + return tt; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return multiDefinition; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack arg0) { + // TODO Auto-generated method stub + return false; + } + + @Override + public int getDamageToComponent(ItemStack arg0) { + // TODO Auto-generated method stub + return 0; + } +} diff --git a/src/main/java/gtnhlanth/common/tileentity/MTEDissolutionTank.java b/src/main/java/gtnhlanth/common/tileentity/MTEDissolutionTank.java new file mode 100644 index 0000000000..7d5a64b579 --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/MTEDissolutionTank.java @@ -0,0 +1,264 @@ +package gtnhlanth.common.tileentity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAdder; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.common.loaders.ItemRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ISecondaryDescribable; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtnhlanth.api.recipe.LanthanidesRecipeMaps; +import gtnhlanth.util.DescTextLocalization; + +public class MTEDissolutionTank extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable, ISecondaryDescribable { + + private final IStructureDefinition multiDefinition = StructureDefinition + .builder() + .addShape( + mName, + transpose( + new String[][] { { " sss ", "sssss", "sssss", "sssss", " sss " }, + { "sgggs", "g---g", "g---g", "g---g", "sgggs" }, { "sgggs", "g---g", "g---g", "g---g", "sgggs" }, + { "ss~ss", "shhhs", "shhhs", "shhhs", "sssss" }, { "s s", " ", " ", " ", "s s" } })) + .addElement( + 's', + buildHatchAdder(MTEDissolutionTank.class) + .atLeast(InputHatch, OutputHatch, InputBus, OutputBus, Maintenance, Energy) + .casingIndex(49) + .dot(1) + .buildAndChain(GregTechAPI.sBlockCasings4, 1)) + .addElement('h', ofBlock(GregTechAPI.sBlockCasings1, 11)) + .addElement('g', ofBlockAdder(MTEDissolutionTank::addGlass, ItemRegistry.bw_glasses[0], 1)) + .build(); + + public MTEDissolutionTank(String name) { + super(name); + } + + public MTEDissolutionTank(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return multiDefinition; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return checkPiece(mName, 2, 3, 0) && mMaintenanceHatches.size() == 1; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + private boolean addGlass(Block block, int meta) { + return block == ItemRegistry.bw_glasses[0]; + } + + @Override + public RecipeMap getRecipeMap() { + return LanthanidesRecipeMaps.dissolutionTankRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { + if (!checkRatio(recipe, Arrays.asList(inputFluids))) { + criticalStopMachine(); + return SimpleCheckRecipeResult.ofFailurePersistOnShutdown("dissolution_ratio"); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + }; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + private boolean checkRatio(GTRecipe tRecipe, List tFluidInputs) { + FluidStack majorGenericFluid = tRecipe.mFluidInputs[0]; + FluidStack minorGenericFluid = tRecipe.mFluidInputs[1]; + + int majorAmount; + int minorAmount; + + FluidStack fluidInputOne = tFluidInputs.get(0); + FluidStack fluidInputTwo = tFluidInputs.get(1); + + if (fluidInputOne.getUnlocalizedName() + .equals(majorGenericFluid.getUnlocalizedName())) { + if (fluidInputTwo.getUnlocalizedName() + .equals(minorGenericFluid.getUnlocalizedName())) { + // majorInput = fluidInputOne; + majorAmount = fluidInputOne.amount; + // minorInput = fluidInputTwo; + minorAmount = fluidInputTwo.amount; + // GTLog.out.print("in first IF"); + } else return false; // No valid other input + + } else if (fluidInputTwo.getUnlocalizedName() + .equals(majorGenericFluid.getUnlocalizedName())) { + if (fluidInputOne.getUnlocalizedName() + .equals(minorGenericFluid.getUnlocalizedName())) { + // majorInput = fluidInputTwo; + majorAmount = fluidInputTwo.amount; + // minorInput = fluidInputOne; + minorAmount = fluidInputOne.amount; + // GTLog.out.print("in second if"); + } else return false; + + } else return false; + + return majorAmount / tRecipe.mSpecialValue == minorAmount; + } + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity arg0) { + return new MTEDissolutionTank(this.mName); + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + buildPiece(mName, itemStack, b, 2, 3, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece(mName, stackSize, 2, 3, 0, elementBudget, env, false, true); + } + + @Override + public String[] getStructureDescription(ItemStack arg0) { + return DescTextLocalization.addText("DissolutionTank.hint", 4); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity te, ForgeDirection side, ForgeDirection facing, int colorIndex, + boolean active, boolean redstone) { + + if (side == facing) { + if (active) return new ITexture[] { casingTexturePages[0][49], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][49], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][49] }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Dissolution Tank") + .addInfo("Controller block for the Dissolution Tank") + .addInfo("Input Water and Fluid, output Fluid") + .addInfo("You must input the Fluids at the correct Ratio") + .addInfo(DescTextLocalization.BLUEPRINT_INFO) + .addSeparator() + .addController("Front bottom") + .addInputHatch("Hint block with dot 1") + .addInputBus("Hint block with dot 1") + .addOutputHatch("Hint block with dot 1") + .addOutputBus("Hint block with dot 1") + .addMaintenanceHatch("Hint block with dot 1") + .toolTipFinisher("GTNH: Lanthanides"); + + return tt; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack arg0) { + return false; + } + + @Override + public int getDamageToComponent(ItemStack arg0) { + return 0; + } +} diff --git a/src/main/java/gtnhlanth/common/tileentity/MTELINAC.java b/src/main/java/gtnhlanth/common/tileentity/MTELINAC.java new file mode 100644 index 0000000000..78ea9c7846 --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/MTELINAC.java @@ -0,0 +1,749 @@ +package gtnhlanth.common.tileentity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gtnhlanth.util.DescTextLocalization.addDotText; + +import java.util.ArrayList; +import java.util.Objects; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.StructureLib; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.API.BorosilicateGlass; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.TickTime; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.api.util.shutdown.SimpleShutDownReason; +import gtnhlanth.common.beamline.BeamInformation; +import gtnhlanth.common.beamline.BeamLinePacket; +import gtnhlanth.common.beamline.Particle; +import gtnhlanth.common.hatch.MTEHatchInputBeamline; +import gtnhlanth.common.hatch.MTEHatchOutputBeamline; +import gtnhlanth.common.register.LanthItemList; +import gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeLoader; +import gtnhlanth.util.DescTextLocalization; +import gtnhlanth.util.Util; + +public class MTELINAC extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { + + private static final IStructureDefinition STRUCTURE_DEFINITION; + + protected static final String STRUCTURE_PIECE_BASE = "base"; + protected static final String STRUCTURE_PIECE_LAYER = "layer"; + protected static final String STRUCTURE_PIECE_END = "end"; + + private byte glassTier; + + private boolean onEndInnerLayer = false; + + private int machineTemp = 0; // Coolant temperature + + private ArrayList mInputBeamline = new ArrayList<>(); + private ArrayList mOutputBeamline = new ArrayList<>(); + + private static final int CASING_INDEX = GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings5, 14); + + private static final byte MIN_GLASS_TIER = 6; + + /* + * g: Grate Machine Casing b: Borosilicate glass c: Shielded accelerator casing v: Vacuum k: Shielded glass d: + * Coolant Delivery casing y: Superconducting coil + */ + + static { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_BASE, + new String[][] { { "ggggggg", "gbbbbbg", "gbbbbbg", "gbbibbg", "gbbbbbg", "gbbbbbg", "ggg~ggg" }, + { "ggggggg", "gcccccg", "gcccccg", "gcc-ccg", "gcccccg", "gcccccg", "ggggggg" }, + { "ccccccc", "cvvvvvc", "kvvvvvk", "kvv-vvk", "kvvvvvk", "cvvvvvc", "jcccccj" }, + { "cckkkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "jcccccj" }, + { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "jcccccj" }, + { "cckkkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "jcccccj" }, + { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "jcccccj" }, + { "cckhkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "jcccccj" }, }) + .addShape( + STRUCTURE_PIECE_LAYER, + new String[][] { { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "ccccccc" }, + { "cckkkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "ccccccc" } }) + .addShape( + STRUCTURE_PIECE_END, + new String[][] { { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "ccccccc" }, + { "cckhkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "ccccccc" }, + { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "ccccccc" }, + { "cckkkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "ccccccc" }, + { "cckkkcc", "cdvvvdc", "kvvvvvk", "kdv-vdk", "kvvvvvk", "cdvvvdc", "ccccccc" }, + { "cckkkcc", "cdddddc", "kdyyydk", "kdy-ydk", "kdyyydk", "cdddddc", "ccccccc" }, + { "ccccccc", "cvvvvvc", "kvvvvvk", "kvv-vvk", "kvvvvvk", "cvvvvvc", "ccccccc" }, + { "ccccccc", "ccccccc", "ccccccc", "ccc-ccc", "ccccccc", "ccccccc", "ccccccc" }, + { "ccccccc", "cbbbbbc", "cbbbbbc", "cbbobbc", "cbbbbbc", "cbbbbbc", "ccccccc" } }) + .addElement('c', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0)) + .addElement('g', ofBlock(GregTechAPI.sBlockCasings3, 10)) // Grate Machine Casing + .addElement( + 'b', + BorosilicateGlass.ofBoroGlass( + (byte) 0, + MIN_GLASS_TIER, + Byte.MAX_VALUE, + (te, t) -> te.glassTier = t, + te -> te.glassTier)) + .addElement( + 'i', + buildHatchAdder(MTELINAC.class).hatchClass(MTEHatchInputBeamline.class) + .casingIndex(CASING_INDEX) + .dot(3) + .adder(MTELINAC::addBeamLineInputHatch) + .build()) + .addElement( + 'o', + buildHatchAdder(MTELINAC.class).hatchClass(MTEHatchOutputBeamline.class) + .casingIndex(CASING_INDEX) + .dot(4) + .adder(MTELINAC::addBeamLineOutputHatch) + .build()) + .addElement('v', ofBlock(LanthItemList.ELECTRODE_CASING, 0)) + .addElement('k', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_GLASS, 0)) + .addElement('d', ofBlock(LanthItemList.COOLANT_DELIVERY_CASING, 0)) + .addElement('y', ofBlock(GregTechAPI.sBlockCasings1, 15)) // Superconducting coil + .addElement( + 'h', + buildHatchAdder(MTELINAC.class).atLeast(InputHatch, OutputHatch) + .casingIndex(CASING_INDEX) + .dot(2) + .build()) + + .addElement( + 'j', + buildHatchAdder(MTELINAC.class).atLeast(Maintenance, Energy) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0))) + + .build(); + } + + private float outputEnergy; + private int outputRate; + private int outputParticle; + private float outputFocus; + + private int length; + + public MTELINAC(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public MTELINAC(String name) { + super(name); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity te) { + return new MTELINAC(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Particle Accelerator") + .addInfo("Controller block for the LINAC") + .addInfo("Accelerates charged particles to higher energies") + .addInfo("Increasing length increases output energy, but decreases focus") + .addInfo("Use a lower temperature coolant to improve focus") + // .addInfo("Extendable, with a minimum length of 18 blocks") + .addInfo(DescTextLocalization.BLUEPRINT_INFO) + .addInfo(DescTextLocalization.BEAMLINE_SCANNER_INFO) + .addInfo("Valid Coolants:"); + + // Valid coolant list + for (String fluidName : BeamlineRecipeLoader.coolantMap.keySet()) { + + tt.addInfo( + "- " + FluidRegistry.getFluid(fluidName) + .getLocalizedName(null)); + + } + + tt.addInfo("Requires (length + 1)kL/s of coolant") + .addSeparator() + .beginVariableStructureBlock(7, 7, 7, 7, 19, 83, false) + .addController("Front bottom") + .addCasingInfoRange(LanthItemList.SHIELDED_ACCELERATOR_CASING.getLocalizedName(), 325, 1285, false) + .addCasingInfoRange(LanthItemList.COOLANT_DELIVERY_CASING.getLocalizedName(), 148, 852, false) + .addCasingInfoRange(LanthItemList.SHIELDED_ACCELERATOR_GLASS.getLocalizedName(), 127, 703, false) + .addCasingInfoRange("Superconducting Coil Block", 56, 312, false) + .addCasingInfoRange(LanthItemList.ELECTRODE_CASING.getLocalizedName(), 156, 732, false) + .addCasingInfoExactly("Grate Machine Casing", 47, false) + .addCasingInfoExactly("Borosilicate Glass (LuV+)", 48, false) + .addEnergyHatch(addDotText(1)) + .addMaintenanceHatch(addDotText(1)) + .addInputHatch(addDotText(2)) + .addOutputHatch(addDotText(2)) + .addOtherStructurePart("Beamline Input Hatch", addDotText(3)) + .addOtherStructurePart("Beamline Output Hatch", addDotText(4)) + + .toolTipFinisher("GTNH: Lanthanides");; + return tt; + } + + private boolean addBeamLineInputHatch(IGregTechTileEntity te, int casingIndex) { + + if (te == null) return false; + + IMetaTileEntity mte = te.getMetaTileEntity(); + + if (mte == null) return false; + + if (mte instanceof MTEHatchInputBeamline) { + return this.mInputBeamline.add((MTEHatchInputBeamline) mte); + } + + return false; + } + + private boolean addBeamLineOutputHatch(IGregTechTileEntity te, int casingIndex) { + + if (te == null) return false; + + IMetaTileEntity mte = te.getMetaTileEntity(); + + if (mte == null) return false; + + if (mte instanceof MTEHatchOutputBeamline) { + return this.mOutputBeamline.add((MTEHatchOutputBeamline) mte); + } + + return false; + } + + @Override + public boolean checkRecipe(ItemStack itemStack) { + + float tempFactor = 0; + // Focus as determined by multi properties + float machineFocus = 0; + // Input particle focus + float inputFocus = 0; + + // Output focus to be set + outputFocus = 0; + + float voltageFactor = 0; + float inputEnergy = 0; + + machineTemp = 0; + + // Energy quantity determined by multi + float machineEnergy = 0; + outputEnergy = 0; + + int particleId = 0; + outputParticle = 0; + + int inputRate = 0; + outputRate = 0; + + ArrayList tFluidInputs = this.getStoredFluids(); + if (tFluidInputs.size() == 0) { + this.doRandomMaintenanceDamage(); // Penalise letting coolant run dry + this.stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.nocoolant")); + return false; + } + + // Coolant input + FluidStack primFluid = tFluidInputs.get(0); + + // 1b (1000L)/m/operation + final int fluidConsumed = 1000 * length; + + this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + + if (this.getInputInformation() == null) { + return false; + } + + if (this.getInputInformation() + .getEnergy() == 0) { + return false; + } + + particleId = this.getInputInformation() + .getParticleId(); + Particle inputParticle = Particle.getParticleFromId(particleId); + + if (!inputParticle.canAccelerate()) { + stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.noaccel")); + return false; + } + + mMaxProgresstime = 1 * TickTime.SECOND; + // Consume the input tier's corresponding practical voltage instead of the maximum suggested by the logic + mEUt = (int) -GTValues.VP[(int) this.getInputVoltageTier()]; + + // Particle stays the same with this multiblock + outputParticle = particleId; + + if (primFluid.isFluidEqual(new FluidStack(FluidRegistry.getFluid("ic2coolant"), 1))) { + tempFactor = calculateTemperatureFactor(60); // Default temp of 300 is unreasonable + machineTemp = 60; // Solely for tricorder use + } else { + tempFactor = calculateTemperatureFactor( + primFluid.getFluid() + .getTemperature()); + machineTemp = primFluid.getFluid() + .getTemperature(); // Solely for tricorder use + } + + machineFocus = Math.max(((-0.9f) * this.length * tempFactor) + 110, 5); // Min of 5 + if (machineFocus > 90) { // Max of 90 + machineFocus = 90; + } + + inputFocus = this.getInputInformation() + .getFocus(); + + outputFocus = (inputFocus > machineFocus) ? ((inputFocus + machineFocus) / 2) + : inputFocus * (machineFocus / 100); // If input focus > machine focus, take the average of both, else + // weigh the former by the latter + + long voltage = this.getMaxInputVoltage(); + // voltageFactor = calculateVoltageFactor(voltage); + + // machineEnergy = Math.max(-((60) / this.length) * voltageFactor + 60_000, 2000); // Minimum of 2000keV + + machineEnergy = (float) Math.max(length / 4 * Math.pow(voltage, 1.0 / 3.0), 50); // Minimum of 50keV + + inputEnergy = this.getInputInformation() + .getEnergy(); + /* + * outputEnergy = Math.min( + * (1 + inputEnergy / Particle.getParticleFromId(outputParticle) + * .maxSourceEnergy()) * machineEnergy, + * 120_000); // TODO more complex calculation than just + * // addition + */ + + outputEnergy = (float) Math.pow( + 10, + 1 + inputEnergy / Particle.getParticleFromId(outputParticle) + .maxSourceEnergy()) + * machineEnergy; + + inputRate = this.getInputInformation() + .getRate(); + outputRate = inputRate; // Cannot increase rate with this multiblock + + if (Util.coolantFluidCheck(primFluid, fluidConsumed)) { + + this.stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.inscoolant")); + return false; + + } + + primFluid.amount -= fluidConsumed; + + Fluid fluidOutput = BeamlineRecipeLoader.coolantMap.get( + primFluid.getFluid() + .getName()); + + if (Objects.isNull(fluidOutput)) return false; + + FluidStack fluidOutputStack = new FluidStack(fluidOutput, fluidConsumed); + + if (Objects.isNull(fluidOutputStack)) return false; + + this.addFluidOutputs(new FluidStack[] { fluidOutputStack }); + + outputAfterRecipe(); + + return true; + } + + private void outputAfterRecipe() { + + if (!mOutputBeamline.isEmpty()) { + + BeamLinePacket packet = new BeamLinePacket( + new BeamInformation(outputEnergy, outputRate, outputParticle, outputFocus)); + + for (MTEHatchOutputBeamline o : mOutputBeamline) { + + o.q = packet; + } + } + } + + @Override + public void stopMachine() { + + // GTLog.out.print("Machine stopped"); + outputFocus = 0; + outputEnergy = 0; + outputParticle = 0; + outputRate = 0; + machineTemp = 0; + super.stopMachine(); + } + + @Override + public void stopMachine(ShutDownReason reason) { + + outputFocus = 0; + outputEnergy = 0; + outputParticle = 0; + outputRate = 0; + machineTemp = 0; + super.stopMachine(reason); + + } + + @Override + public String[] getInfoData() { + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchEnergy tHatch : mEnergyHatches) { + if (tHatch.isValid()) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + } + + BeamInformation information = this.getInputInformation(); + + return new String[] { + /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(getActualEnergyUsage()) + + EnumChatFormatting.RESET + + " EU/t", + /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getMaxInputVoltage()) + + EnumChatFormatting.RESET + + " EU/t(*2A) " + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + VN[GTUtility.getTier(getMaxInputVoltage())] + + EnumChatFormatting.RESET, + /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + Float.toString(mEfficiency / 100.0F) + + EnumChatFormatting.RESET + + " %", + + /* 7 */ EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.info") + + ": " + + EnumChatFormatting.RESET, + + StatCollector.translateToLocal("beamline.temperature") + ": " // Temperature: + + EnumChatFormatting.DARK_RED + + machineTemp + + EnumChatFormatting.RESET + + " K", // e.g. "137 K" + + StatCollector.translateToLocal("beamline.coolusage") + ": " // Coolant usage: + + EnumChatFormatting.AQUA + + length + + EnumChatFormatting.RESET + + " kL/s", // e.g. "24 kL/s + + /* 8 */ EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.in_pre") + + ": " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.particle") + ": " // "Multiblock Beamline Input:" + + EnumChatFormatting.GOLD + + Particle.getParticleFromId(information.getParticleId()) + .getLocalisedName() // e.g. "Electron + // (e-)" + + " " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.energy") + ": " // "Energy:" + + EnumChatFormatting.DARK_RED + + information.getEnergy() + + EnumChatFormatting.RESET + + " keV", // e.g. "10240 keV" + StatCollector.translateToLocal("beamline.focus") + ": " // "Focus:" + + EnumChatFormatting.BLUE + + information.getFocus() + + " " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.amount") + ": " // "Amount:" + + EnumChatFormatting.LIGHT_PURPLE + + information.getRate(), + EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.out_pre") // "Multiblock Beamline + // Output:" + + ": " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.particle") + ": " + + EnumChatFormatting.GOLD + + Particle.getParticleFromId(this.outputParticle) + .getLocalisedName() + + " " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.energy") + ": " + + EnumChatFormatting.DARK_RED + + this.outputEnergy + + EnumChatFormatting.RESET + + " keV", + StatCollector.translateToLocal( + "beamline.focus") + ": " + EnumChatFormatting.BLUE + this.outputFocus + " " + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.amount") + ": " + + EnumChatFormatting.LIGHT_PURPLE + + this.outputRate, }; + } + + private BeamInformation getInputInformation() { + + for (MTEHatchInputBeamline in : this.mInputBeamline) { // Easy way to find the desired input. Efficient? No. + // Will it matter? No :boubs_glasses: + + if (in.q == null) return new BeamInformation(0, 0, 0, 0); + // if (in.q == null) return new BeamInformation(10000, 10, 0, 90); // temporary for testing purposes + + return in.q.getContent(); + } + return null; + } + + private static float calculateTemperatureFactor(int fluidTemp) { + + float factor = (float) Math.pow(1.1, 0.2 * fluidTemp); + return factor; + } + + /* + * private static float calculateVoltageFactor(long voltage) { + * float factor = (float) Math.pow(1.00009, -(0.1 * voltage - 114000)); + * return factor; + * } + */ + + @Override + public String[] getStructureDescription(ItemStack arg0) { + return DescTextLocalization.addText("LINAC.hint", 11); + } + + @Override + public boolean checkMachine(IGregTechTileEntity mte, ItemStack stack) { + + mInputBeamline.clear(); + mOutputBeamline.clear(); + + this.outputEnergy = 0; + this.outputRate = 0; + this.outputParticle = 0; + this.outputFocus = 0; + + this.glassTier = 0; + + this.onEndInnerLayer = false; + + length = 8; // Base piece length + + if (!checkPiece(STRUCTURE_PIECE_BASE, 3, 6, 0)) return false; + + while (length < 128) { + + if (!checkPiece(STRUCTURE_PIECE_LAYER, 3, 6, -length)) { + if (!checkPiece(STRUCTURE_PIECE_END, 3, 6, -length)) { + return false; + } + break; + } ; + + length += 2; + } + + // if (!checkPiece(STRUCTURE_PIECE_END, 3, 6, -length)) return false; + + // Likely off by one or two, not visible to player however so doesn't particularly matter + length += 8; + + return this.mInputBeamline.size() == 1 && this.mOutputBeamline.size() == 1 + && this.mMaintenanceHatches.size() == 1 + && this.mEnergyHatches.size() <= 2 + && this.glassTier >= MIN_GLASS_TIER; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + + buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 3, 6, 0); + + int lLength = Math.max(stackSize.stackSize + 7, 8); // !! + + if (!(lLength % 2 == 0)) { + lLength++; // Otherwise you get gaps at the end + } + + for (int i = -8; i > -lLength - 1; i -= 2) { + + // GTLog.out.print("Building inner piece! i = " + i); + + buildPiece(STRUCTURE_PIECE_LAYER, stackSize, hintsOnly, 3, 6, i); + } + + buildPiece(STRUCTURE_PIECE_END, stackSize, hintsOnly, 3, 6, -(lLength + 2)); + + StructureLib.addClientSideChatMessages("Length: " + (11 + lLength) + " blocks."); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + + elementBudget = 200; // Maybe make a config + + if (mMachine) return -1; + + int build = 0; + + build = survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 3, 6, 0, elementBudget, env, false, true); + + if (build >= 0) return build; // Incomplete + + int lLength = Math.max(stackSize.stackSize + 7, 8); // !! + + if (!(lLength % 2 == 0)) { + lLength++; // Otherwise you get gaps at the end + } + + for (int i = -8; i > -lLength - 1; i -= 2) { + + build = survivialBuildPiece(STRUCTURE_PIECE_LAYER, stackSize, 3, 6, i, elementBudget, env, false, true); + + if (build >= 0) return build; + + } + + int finalOutput = survivialBuildPiece( + STRUCTURE_PIECE_END, + stackSize, + 3, + 6, + -(lLength + 2), + elementBudget, + env, + false, + true); + + return finalOutput; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean active, boolean aRedstone) { + + // Placeholder + if (side == facing) { + if (active) return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][47] }; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + public boolean addInputHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + this.onEndInnerLayer = true; + return super.addInputHatchToMachineList(aTileEntity, aBaseCasingIndex); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } +} diff --git a/src/main/java/gtnhlanth/common/tileentity/MTESourceChamber.java b/src/main/java/gtnhlanth/common/tileentity/MTESourceChamber.java new file mode 100644 index 0000000000..68cc750005 --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/MTESourceChamber.java @@ -0,0 +1,409 @@ +package gtnhlanth.common.tileentity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gtnhlanth.util.DescTextLocalization.BLUEPRINT_INFO; +import static gtnhlanth.util.DescTextLocalization.addDotText; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.SimpleShutDownReason; +import gtnhlanth.common.beamline.BeamInformation; +import gtnhlanth.common.beamline.BeamLinePacket; +import gtnhlanth.common.beamline.Particle; +import gtnhlanth.common.hatch.MTEHatchOutputBeamline; +import gtnhlanth.common.register.LanthItemList; +import gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeAdder2; +import gtnhlanth.common.tileentity.recipe.beamline.RecipeSC; +import gtnhlanth.util.DescTextLocalization; + +public class MTESourceChamber extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { + + private static final IStructureDefinition STRUCTURE_DEFINITION; + + private ArrayList mOutputBeamline = new ArrayList<>(); + + private static final int CASING_INDEX = GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings5, 14); + + private float outputEnergy; + private int outputRate; + private int outputParticle; + private float outputFocus; + + static { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + "sc", + new String[][] { { "ccccc", "ckkkc", "ckikc", "ckkkc", "dd~dd" }, + { "ckkkc", "keeek", "ke-ek", "keeek", "ccocc" }, { "ckkkc", "k---k", "k---k", "k---k", "ccccc" }, + { "ckkkc", "k---k", "k---k", "k---k", "ccccc" }, { "ckkkc", "keeek", "ke-ek", "keeek", "ccccc" }, + { "ccccc", "ckkkc", "ckbkc", "ckkkc", "ccccc" } }) + .addElement('c', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0)) + .addElement('k', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_GLASS, 0)) + .addElement('e', ofBlock(LanthItemList.ELECTRODE_CASING, 0)) + .addElement( + 'b', + buildHatchAdder(MTESourceChamber.class).hatchClass(MTEHatchOutputBeamline.class) + .casingIndex(CASING_INDEX) + .dot(4) + .adder(MTESourceChamber::addBeamLineOutputHatch) + .build()) + .addElement( + 'i', + buildHatchAdder(MTESourceChamber.class).atLeast(InputBus) + .casingIndex(CASING_INDEX) + .dot(1) + .build()) + .addElement( + 'o', + buildHatchAdder(MTESourceChamber.class).atLeast(OutputBus) + .casingIndex(CASING_INDEX) + .dot(2) + .build()) + .addElement( + 'd', + buildHatchAdder(MTESourceChamber.class).atLeast(Maintenance, Energy) + .casingIndex(CASING_INDEX) + .dot(3) + .buildAndChain(ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0))) + + .build(); + } + + public MTESourceChamber(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public MTESourceChamber(String name) { + super(name); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece("sc", stackSize, 2, 4, 0, elementBudget, env, false, true); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity te) { + return new MTESourceChamber(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Particle Source") + .addInfo("Controller block for the Source Chamber") + .addInfo(BLUEPRINT_INFO) + .addInfo(DescTextLocalization.BEAMLINE_SCANNER_INFO) + .addSeparator() + .beginStructureBlock(5, 5, 6, true) + .addController("Front bottom") + .addCasingInfoExactly(LanthItemList.SHIELDED_ACCELERATOR_CASING.getLocalizedName(), 56, false) + .addCasingInfoExactly(LanthItemList.SHIELDED_ACCELERATOR_GLASS.getLocalizedName(), 52, false) + .addCasingInfoExactly(LanthItemList.ELECTRODE_CASING.getLocalizedName(), 16, false) + .addOtherStructurePart("Beamline Output Hatch", addDotText(4)) + .addEnergyHatch(addDotText(3)) + .addMaintenanceHatch(addDotText(3)) + .addInputBus(addDotText(1)) + .addOutputBus(addDotText(2)) + .toolTipFinisher("GTNH: Lanthanides"); + return tt; + } + + private boolean addBeamLineOutputHatch(IGregTechTileEntity te, int casingIndex) { + + if (te == null) return false; + + IMetaTileEntity mte = te.getMetaTileEntity(); + + if (mte == null) return false; + + if (mte instanceof MTEHatchOutputBeamline) { + return this.mOutputBeamline.add((MTEHatchOutputBeamline) mte); + } + + return false; + } + /* + * protected OverclockDescriber createOverclockDescriber() { return new EUNoTotalOverclockDescriber((byte) 4, 1); } + */ + + @Override + public boolean checkRecipe(ItemStack itemStack) { + + // GTLog.out.print("In checkRecipe"); + + // No input particle, so no input quantities + + outputFocus = 0; + outputEnergy = 0; + outputParticle = 0; + outputRate = 0; + + ItemStack[] tItems = this.getStoredInputs() + .toArray(new ItemStack[0]); + // GTLog.out.print(Arrays.toString(tItems)); + long tVoltageMaxTier = this.getMaxInputVoltage(); // Used to keep old math the same + long tVoltageActual = GTValues.VP[(int) this.getInputVoltageTier()]; + + RecipeSC tRecipe = (RecipeSC) BeamlineRecipeAdder2.instance.SourceChamberRecipes + .findRecipe(this.getBaseMetaTileEntity(), false, tVoltageActual, new FluidStack[] {}, tItems); + + if (tRecipe == null || !tRecipe.isRecipeInputEqual(true, new FluidStack[] {}, tItems)) return false; // Consumes + // input + // item + + this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + + this.mMaxProgresstime = tRecipe.mDuration; + if (mMaxProgresstime == Integer.MAX_VALUE - 1 && this.mEUt == Integer.MAX_VALUE - 1) return false; + + mEUt = (int) -tVoltageActual; + if (this.mEUt > 0) this.mEUt = (-this.mEUt); + + outputParticle = tRecipe.particleId; + float maxParticleEnergy = Particle.getParticleFromId(outputParticle) + .maxSourceEnergy(); // The maximum energy a + // particle can possess + // when produced by this + // multiblock + float maxMaterialEnergy = tRecipe.maxEnergy; // The maximum energy for the recipe processed + outputEnergy = (float) Math.min( + (-maxMaterialEnergy) * Math.pow(1.001, -(tRecipe.energyRatio) * (tVoltageMaxTier - tRecipe.mEUt)) + + maxMaterialEnergy, + maxParticleEnergy); + + if (outputEnergy <= 0) { + stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.scerror")); + return false; + } + + outputFocus = tRecipe.focus; + outputRate = tRecipe.rate; + + this.mOutputItems = tRecipe.mOutputs; + this.updateSlots(); + + outputAfterRecipe(); + + return true; + } + + @Override + public String[] getStructureDescription(ItemStack arg0) { + return DescTextLocalization.addText("SourceChamber.hint", 7); // Generate 7 localised hint strings in structure + // description + } + + private void outputAfterRecipe() { + + if (!mOutputBeamline.isEmpty()) { + + BeamLinePacket packet = new BeamLinePacket( + new BeamInformation(outputEnergy, outputRate, outputParticle, outputFocus)); + + for (MTEHatchOutputBeamline o : mOutputBeamline) { + + o.q = packet; + } + } + } + + @Override + public void stopMachine() { + outputFocus = 0; + outputEnergy = 0; + outputParticle = 0; + outputRate = 0; + super.stopMachine(); + } + + @Override + public RecipeMap getRecipeMap() { + return BeamlineRecipeAdder2.instance.SourceChamberRecipes; + } + + @Override + public String[] getInfoData() { + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchEnergy tHatch : mEnergyHatches) { + if (tHatch.isValid()) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + } + + return new String[] { + /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(getActualEnergyUsage()) + + EnumChatFormatting.RESET + + " EU/t", + /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getMaxInputVoltage()) + + EnumChatFormatting.RESET + + " EU/t(*2A) " + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + VN[GTUtility.getTier(getMaxInputVoltage())] + + EnumChatFormatting.RESET, + /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + Float.toString(mEfficiency / 100.0F) + + EnumChatFormatting.RESET + + " %", + EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.out_pre") + + ": " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.particle") + ": " + + EnumChatFormatting.GOLD + + Particle.getParticleFromId(this.outputParticle) + .getLocalisedName() + + " " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.energy") + ": " + + EnumChatFormatting.DARK_RED + + this.outputEnergy + + EnumChatFormatting.RESET + + " keV", + StatCollector.translateToLocal( + "beamline.focus") + ": " + EnumChatFormatting.BLUE + this.outputFocus + " " + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.amount") + ": " + + EnumChatFormatting.LIGHT_PURPLE + + this.outputRate, }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece("sc", stackSize, hintsOnly, 2, 4, 0); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + + this.mOutputBeamline.clear(); // Necessary due to the nature of the beamline hatch adder + + return checkPiece("sc", 2, 4, 0) && this.mMaintenanceHatches.size() == 1 + && this.mInputBusses.size() == 1 + && this.mOutputBusses.size() == 1 + && this.mOutputBeamline.size() == 1 + && this.mEnergyHatches.size() == 1; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean active, boolean redstoneLevel) { + + // Placeholder + if (side == facing) { + if (active) return new ITexture[] { casingTexturePages[1][14], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[1][14], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[1][14] }; + } +} diff --git a/src/main/java/gtnhlanth/common/tileentity/MTESynchrotron.java b/src/main/java/gtnhlanth/common/tileentity/MTESynchrotron.java new file mode 100644 index 0000000000..3b67f8e172 --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/MTESynchrotron.java @@ -0,0 +1,1077 @@ +package gtnhlanth.common.tileentity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAdder; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gtnhlanth.util.DescTextLocalization.addDotText; + +import java.util.ArrayList; +import java.util.Objects; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.google.common.collect.ImmutableMap; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.API.BorosilicateGlass; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.TickTime; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.api.util.shutdown.SimpleShutDownReason; +import gtnhlanth.common.beamline.BeamInformation; +import gtnhlanth.common.beamline.BeamLinePacket; +import gtnhlanth.common.beamline.Particle; +import gtnhlanth.common.block.BlockAntennaCasing; +import gtnhlanth.common.hatch.MTEHatchInputBeamline; +import gtnhlanth.common.hatch.MTEHatchOutputBeamline; +import gtnhlanth.common.register.LanthItemList; +import gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeLoader; +import gtnhlanth.util.DescTextLocalization; +import gtnhlanth.util.Util; + +public class MTESynchrotron extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { + + private static final IStructureDefinition STRUCTURE_DEFINITION; + + protected static final String STRUCTURE_PIECE_ENTRANCE = "entrance"; + protected static final String STRUCTURE_PIECE_BASE = "base"; + + public static final int CONSUMED_FLUID = 32_000; // Fluid consumed per processed recipe, maybe increase with EU + public static final int MIN_INPUT_FOCUS = 25; // Inclusive + + private ArrayList mInputBeamline = new ArrayList<>(); + private ArrayList mOutputBeamline = new ArrayList<>(); + + public ArrayList mAntennaCasings = new ArrayList<>(); + + private static final int CASING_INDEX = GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings5, 14); + + private static final byte MIN_GLASS_TIER = 6; + + private int energyHatchTier; + + private int antennaeTier; + + private Byte glassTier; + + /* + * c: Shielded accelerator casing v: Vacuum k: Superconducting coil d: Coolant Delivery casing + */ + + // TODO: E > 1200eV for x-ray lithography + // spotless:off + static { + + STRUCTURE_DEFINITION = StructureDefinition.builder().addShape( + STRUCTURE_PIECE_ENTRANCE, + + + + new String[][] { + { + " ", + " ccc ", + " cgggc ", + " cgvgc ", + " cgggc ", + " ccc " + } + }) + .addShape( + STRUCTURE_PIECE_BASE, + + new String[][] { + { + " ", + " ccc ", + " ccccc cjjjjjc ", + " cc-cc cjjc~cjjc ", + " ccccc cjjjjjc ", + " ccc ", + " " + }, + { + " ", + " ccc ccccccccccc ", + " c---c ccc-------ccc ", + " c---c ccc-------ccc ", + " c---c ccc-------ccc ", + " ccc ccccccccccc ", + " " + }, + { + " ccccccccccc ", + " ccc cc-----------cc ", + " c---c cc-------------cc ", + " c---c cc-------------cc ", + " c---c cc-------------cc ", + " ccc ccc---------ccc ", + " ccccccccccc " + }, + { + " ccccccccccccccc ", + " ccc cc---------------cc ", + " c---ccc-----------------c ", + " c---ccc-----------------cc ", + " c---ccc-----------------c ", + " ccc cc---------------cc ", + " ccccccccccccccc ", + + }, + { + " ccc ccccccccccccccccc ", + " ckkkccc-----------------cc ", + "ck---kc-------------------cc ", + "ck---kc--------------------c ", + "ck---kc-------------------cc ", + " ckkkccc-----------------cc ", + " ccc cccccccccccccccccc " + + }, + { + " cccccccccccc ccccccc ", + " cdddcc-------ccccc-------cc ", + "cd---d----------------------c ", + "cd---d----------------------c ", + "cd---d----------------------c ", + " cdddcc-------ccccc-------cc ", + " cccccccccccc ccccccc ", + }, + { + " ccccccccc ccccc ", + " ckkkc-----cccc cccc-----cc ", + "ck---k-------ccccccc--------c ", + "ck---k-------ccccccc---------c ", + "ck---k-------ccccccc--------c ", + " ckkkc-----cccc cccc-----cc ", + " ccccccccc ccccc " + }, + { + " cccccccc ccccc ", + " c--------cc cc-----cc ", + "c----------cc cc-------c ", + "c----------cc cc-------c ", + "c----------cc cc-------c ", + " c--------cc cc-----cc ", + " cccccccc ccccc " + + }, + { + " ccccccc ccccc ", + " c-------c c-----c ", + "c---------c c-------c ", + "c---------c c-------c ", + "c---------c c-------c ", + " c-------c c-----c ", + " ccccccc ccccc " + + }, + { + " cccccc ccccc ", + " c------c c-----c ", + "c--------c c------c ", + "c--------c c------c ", + "c--------c c------c ", + " c------c c-----c ", + " cccccc ccccc " + + }, + { + " ccccc cccc ", + " c-----c c----c ", + "c-------c c------c ", + "c-------c c------c ", + "c-------c c------c ", + " c-----c c----c ", + " ccccc cccc " + + }, + { + " cccc ccc ", + " c----cc cc---cc ", + "c------c c-----c ", + "c------c c-----c ", + "c------c c-----c ", + " c----cc cc---cc ", + " cccc ccc " + + }, + { + " cccc cccc ", + " c---cc c----c ", + "c------c c-----c ", + "c------c c-----cc ", + "c------c c-----c ", + " c---cc cc---c ", + " cccc cccc " + + }, + { + " cccc cccc ", + " c---cc c----c ", + "c-----c c----cc ", + "c-----c c----cc ", + "c-----c c----cc ", + " c---cc cc---c ", + " cccc cccc " + + }, + { + " ccc ccc ", + " ckkkcc cckkkc ", + "ck---kc ck---kc ", + "ck---kc ck---kc ", + "ck---kc ck---kc ", + " ckkkcc cckkkc ", + " ccc ccc " + + }, + { + " cec cec ", + " cnanc cnanc ", + "cn---nc cn---nc ", + "cn---nc cn---nc ", + "cn---nc cn---nc ", + " cnnnc cnnnc ", + " ccc ccc " + + }, + { + " cic cic ", + " cndnc cndnc ", + "cn---nc cn---nc ", + "cn---nc cn---nc ", + "cn---nc cn---nc ", + " cndnc cndnc ", + " coc coc " + + }, + { + " cec cec ", + " cnanc cnanc ", + "cn---nc cn---nc ", + "cn---nc cn---nc ", + "cn---nc cn---nc ", + " cnnnc cnnnc ", + " ccc ccc " + + }, + { + " ccc ccc ", + " ckkkcc cckkkc ", + "ck---kc ck---kc ", + "ck---kc ck---kc ", + "ck---kc ck---kc ", + " ckkkcc cckkkc ", + " ccc ccc " + + }, + { + " cccc cccc ", + " c----c c----c ", + "cc----c c----cc ", + "cc----c c----cc ", + "cc----c c----cc ", + " c---cc cc---c ", + " cccc cccc " + + }, + { + " cccc cccc ", + " c----c c----c ", + " c-----c c-----c ", + "cc-----c c-----cc ", + " c-----c c-----c ", + " c---cc cc---c ", + " cccc cccc " + + }, + { + " ccc ccc ", + " cc---cc cc---cc ", + " c-----c c-----c ", + " c-----c c-----c ", + " c-----c c-----c ", + " cc---cc cc---cc ", + " ccc ccc " + + }, + { + " cccc cccc ", + " c----c c----c ", + " c------c c------c ", + " c------c c------c ", + " c------c c------c ", + " c----c c----c ", + " cccc cccc " + + }, + { + " ccccc ccccc ", + " c-----c c-----c ", + " c------c c------c ", + " c------c c------c ", + " c------c c------c ", + " c-----c c-----c ", + " ccccc ccccc " + + }, + { + " ccccc ccccc ", + " c-----c c-----c ", + " c-------c c-------c ", + " c-------c c-------c ", + " c-------c c-------c ", + " c-----c c-----c ", + " ccccc ccccc " + + }, + { + " ccccc ccccc ", + " c-----cc cc-----c ", + " c-------cc cc-------cc ", + " c-------cc cc-------cc ", + " c-------cc cc-------cc ", + " c-----cc cc------c ", + " ccccc cccccc " + + }, + { + " ccccc ccccccc ", + " cc-----cccc cccc-----ccc ", + " c--------ccccccc--------cccc ", + " c--------ccccccc--------cccc ", + " c--------ccccccc--------cccc ", + " cc-----cccc cccc------cc ", + " ccccc cccccc " + + }, + { + " ccccccc cccccccccc ", + " cc-------ccccc--------cccc ", + " c---------kdkdk--------ccccccccc", + " c---------kdkdk--------ccccccccc", + " c---------kdkdk--------ccccccccc", + " cc-------ccccc--------cccc ", + " ccccccc cccccccc " + + }, + { + " cccccccccccccccccccc ", + " cc-------------------ccccccccc", + " cc---------------------------cg", + " c----------------------------cg", + " cc---------------------------cg", + " c-------------------ccccccccc", + " ccccccccccccccccccc " + + }, + { + " ccccccccccccccccccc ", + " cc-----------------cccccccccc", + " c--------------------------cg", + " cc---------------------------b", + " c--------------------------cg", + " c-----------------cccccccccc", + " ccccccccccccccccc " + + }, + { + " ccccccccccccccc ", + " ccc-------------ccccccccccc", + " cc------------------------cg", + " cc------------------------cg", + " cc------------------------cg", + " ccc-------------ccccccccccc", + " ccccccccccccc " + + }, + { + " ", + " cccccccccccccccccc ", + " ccc-kdkdk------ccccccccccc", + " cc--kdkdk------ccccccccccc", + " ccc-kdkdk------ccccccccccc", + " cccccccccccccccccc " + + }, + { + " ", + " ", + " cccccccccccccccc ", + " ccccccccccccccccc ", + " cccccccccccccccc ", + " ", + " " + + } + + } + + ).addElement('c', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0)) + .addElement('k', ofBlock(GregTechAPI.sBlockCasings1, 15)) // Superconducting coils + .addElement('d', ofBlock(LanthItemList.COOLANT_DELIVERY_CASING, 0)) + .addElement('e', buildHatchAdder(MTESynchrotron.class).atLeast(ImmutableMap.of(Energy, 4)).dot(6).casingIndex(CASING_INDEX).build()) + .addElement('n', ofBlock(LanthItemList.NIOBIUM_CAVITY_CASING, 0)) + .addElement('a', ofBlockAdder(MTESynchrotron::addAntenna, LanthItemList.ANTENNA_CASING_T1, 0)) //Antenna Casings + .addElement('i', buildHatchAdder(MTESynchrotron.class).atLeast(ImmutableMap.of(InputHatch, 2)).dot(4).casingIndex(CASING_INDEX).build()) + .addElement('o', buildHatchAdder(MTESynchrotron.class).atLeast(ImmutableMap.of(OutputHatch, 2)).dot(5).casingIndex(CASING_INDEX).build()) + .addElement('v', buildHatchAdder(MTESynchrotron.class).hatchClass(MTEHatchInputBeamline.class).casingIndex(CASING_INDEX) + .dot(1).adder(MTESynchrotron::addBeamlineInputHatch).build()) + .addElement('b', buildHatchAdder(MTESynchrotron.class).hatchClass(MTEHatchOutputBeamline.class).casingIndex(CASING_INDEX) + .dot(2).adder(MTESynchrotron::addBeamlineOutputHatch).build()) + .addElement('g', BorosilicateGlass.ofBoroGlass((byte) 0, MIN_GLASS_TIER, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier)) + .addElement('j', + buildHatchAdder(MTESynchrotron.class).atLeast(Maintenance).dot(3).casingIndex(CASING_INDEX) + .buildAndChain(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0)) + + .build(); + + + + } + + // spotless:on + + /* + * v = pi * lorentz^2 * sfreq sfreq = sw / 2pi sw = e * B / mass(e) * c v = (e * B * l^2) / (2 * mass(e) * c) = + * 292.718624222 * l^2 * B + */ + + private float outputEnergy; + private int outputRate; + private int outputParticle; + private float outputFocus; + private float machineFocus; + + private int machineTemp; + + public MTESynchrotron(String aName) { + super(aName); + } + + public MTESynchrotron(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESynchrotron(this.mName); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Particle Accelerator") + .addInfo("Controller block for the Synchrotron") + .addInfo("Torus-shaped, accelerates electrons to produce high-energy electromagnetic radiation") + .addInfo(DescTextLocalization.BLUEPRINT_INFO) + .addInfo(DescTextLocalization.BEAMLINE_SCANNER_INFO) + .addInfo("Valid Coolants:"); + + // Valid coolant list + for (String fluidName : BeamlineRecipeLoader.coolantMap.keySet()) { + + tt.addInfo( + "- " + FluidRegistry.getFluid(fluidName) + .getLocalizedName(null)); + + } + + tt.addInfo("Requires 32 kL/s of coolant") + .addSeparator() + .beginStructureBlock(36, 7, 34, true) + .addController("Front middle") + .addCasingInfoExactly(LanthItemList.SHIELDED_ACCELERATOR_CASING.getLocalizedName(), 676, false) + .addCasingInfoExactly("Superconducting Coil Block", 90, false) + .addCasingInfoExactly("Niobium Cavity Casing", 64, false) + .addCasingInfoExactly(LanthItemList.COOLANT_DELIVERY_CASING.getLocalizedName(), 28, false) + .addCasingInfoExactly("Borosilicate Glass Block (LuV+)", 16, false) + .addCasingInfoExactly("Antenna Casing (must match)", 4, true) + .addOtherStructurePart("Beamline Input Hatch", addDotText(1)) + .addOtherStructurePart("Beamline Output Hatch", addDotText(2)) + .addMaintenanceHatch(addDotText(3)) + .addInputHatch(addDotText(4)) + .addOutputHatch(addDotText(5)) + .addEnergyHatch(addDotText(6)) + + .toolTipFinisher("GTNH: Lanthanides"); + return tt; + } + + private boolean addBeamlineInputHatch(IGregTechTileEntity te, int casingIndex) { + + if (te == null) return false; + + IMetaTileEntity mte = te.getMetaTileEntity(); + + if (mte == null) return false; + + if (mte instanceof MTEHatchInputBeamline) { + return this.mInputBeamline.add((MTEHatchInputBeamline) mte); + } + + return false; + + } + + private boolean addBeamlineOutputHatch(IGregTechTileEntity te, int casingIndex) { + + if (te == null) return false; + + IMetaTileEntity mte = te.getMetaTileEntity(); + + if (mte == null) return false; + + if (mte instanceof MTEHatchOutputBeamline) { + return this.mOutputBeamline.add((MTEHatchOutputBeamline) mte); + } + + return false; + + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int aColorIndex, boolean active, boolean aRedstone) { + // Placeholder + if (side == facing) { + if (active) return new ITexture[] { casingTexturePages[1][14], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[1][14], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[1][14] }; + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + elementBudget = 200; + + if (mMachine) return -1; + + int build = survivialBuildPiece(STRUCTURE_PIECE_ENTRANCE, stackSize, 16, 3, 1, elementBudget, env, false, true); + + if (build >= 0) return build; + + return survivialBuildPiece(STRUCTURE_PIECE_BASE, stackSize, 16, 3, 0, elementBudget, env, false, true); + + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_ENTRANCE, stackSize, hintsOnly, 16, 3, 1); + buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 16, 3, 0); + + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + public boolean addEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) return false; + if (aMetaTileEntity instanceof MTEHatchEnergy) { + + MTEHatchEnergy hatch = (MTEHatchEnergy) aMetaTileEntity; + + // First energy hatch added + if (this.mEnergyHatches.size() == 0) this.energyHatchTier = hatch.mTier; + + // Disallow any hatches that don't match the tier of the first hatch added + if (hatch.mTier != this.energyHatchTier) return false; + + hatch.updateTexture(aBaseCasingIndex); + hatch.updateCraftingIcon(this.getMachineCraftingIcon()); + return mEnergyHatches.add(hatch); + } + return false; + } + + private boolean addAntenna(Block block, int meta) { + + if (block == null) return false; + + if (!(block instanceof BlockAntennaCasing)) return false; + + BlockAntennaCasing antennaBlock = (BlockAntennaCasing) block; + + int antennaTier = antennaBlock.getTier(); + + // First antenna casing added + if (this.mAntennaCasings.size() == 0) this.antennaeTier = antennaTier; + + if (antennaTier != this.antennaeTier) return false; + + return mAntennaCasings.add(antennaBlock); + + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public boolean checkRecipe(ItemStack aStack) { + + float inputEnergy = 0; + float inputFocus = 0; + float inputRate = 0; + int inputParticleId = 0; + + machineFocus = 0; + machineTemp = 0; + + outputEnergy = 0; + outputFocus = 0; + outputRate = 0; + outputParticle = 0; + + float tempFactor = 0; + + float voltageFactor = 0; + + ArrayList fluidList = this.getStoredFluids(); + + if (fluidList.size() == 0) { + + this.stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.nocoolant")); + + return false; + } + + this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + + if (this.getInputInformation() == null) { + return false; + } + + if (this.getInputInformation() + .getEnergy() == 0) { // Only really applies if there's no input + return false; + } + + if (this.getInputInformation() + .getFocus() < MIN_INPUT_FOCUS) { + return false; + } + + inputParticleId = this.getInputInformation() + .getParticleId(); + + Particle inputParticle = Particle.getParticleFromId(inputParticleId); + + if (!inputParticle.canAccelerate()) { + stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.noaccel")); + return false; + } + + mMaxProgresstime = TickTime.SECOND; + + long voltage = this.getMaxInputVoltage(); + mEUt = (int) (-voltage / GTValues.V[(int) this.getInputVoltageTier()] + * GTValues.VP[(int) this.getInputVoltageTier()]); // Multiply VP by amps + + outputParticle = 1; // Photon + + FluidStack primaryFluid = fluidList.get(0); + + int fluidTemperature; + + if (primaryFluid.isFluidEqual(new FluidStack(FluidRegistry.getFluid("ic2coolant"), 1))) { + fluidTemperature = 60; // Default temp of 300 is unreasonable + } else { + fluidTemperature = primaryFluid.getFluid() + .getTemperature(); + } + + machineTemp = fluidTemperature; // Solely for tricorder info + + machineFocus = getMachineFocus(fluidTemperature); + + inputFocus = this.getInputInformation() + .getFocus(); + + outputFocus = (inputFocus > machineFocus) ? ((inputFocus + machineFocus) / 2.5f) + : inputFocus * (machineFocus / 100); // If input focus > machine focus, divide their sum by 2.5, else + // weigh the former by the latter. This punishes having too low a + // machine focus for low values of input focus + // E.g. An input focus of 50 requires a machine focus of 100 to get an + // output focus of 50, + // whereas an input focus of 60 only requires around 80 + // In general, as input focus increases, output scales better with + // machine focus + + voltageFactor = getVoltageFactor(voltage, this.antennaeTier); + + inputEnergy = this.getInputInformation() + .getEnergy(); + float mass = inputParticle.getMass(); + + // Perhaps divide by mass somehow here too + outputEnergy = (float) calculateOutputParticleEnergy(voltage, inputEnergy, this.antennaeTier); // maybe + // adjust + // behaviour here + + inputRate = this.getInputInformation() + .getRate(); + + outputRate = (int) (inputRate * getOutputRatetio(voltageFactor, this.antennaeTier)); + + if (outputRate == 0) { + stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.low_input_rate")); + return false; + } + + if (Util.coolantFluidCheck(primaryFluid, CONSUMED_FLUID)) { + + stopMachine(SimpleShutDownReason.ofCritical("gtnhlanth.inscoolant")); + return false; + + } + + primaryFluid.amount -= CONSUMED_FLUID; + + Fluid fluidOutput = BeamlineRecipeLoader.coolantMap.get( + primaryFluid.getFluid() + .getName()); + + if (Objects.isNull(fluidOutput)) return false; + + FluidStack fluidOutputStack = new FluidStack(fluidOutput, CONSUMED_FLUID); + + if (Objects.isNull(fluidOutputStack)) return false; + + this.addFluidOutputs(new FluidStack[] { fluidOutputStack }); + + outputAfterRecipe(); + + return true; + } + + private void outputAfterRecipe() { + + if (!mOutputBeamline.isEmpty()) { + + BeamLinePacket packet = new BeamLinePacket( + new BeamInformation(outputEnergy, outputRate, outputParticle, outputFocus)); + + for (MTEHatchOutputBeamline o : mOutputBeamline) { + + o.q = packet; + } + } + } + + @Override + public void stopMachine() { + + outputFocus = 0; + outputEnergy = 0; + outputParticle = 0; + outputRate = 0; + machineFocus = 0; + machineTemp = 0; + super.stopMachine(); + + } + + @Override + public void stopMachine(ShutDownReason reason) { + + outputFocus = 0; + outputEnergy = 0; + outputParticle = 0; + outputRate = 0; + machineFocus = 0; + machineTemp = 0; + super.stopMachine(reason); + + } + + private BeamInformation getInputInformation() { + + for (MTEHatchInputBeamline in : this.mInputBeamline) { + + if (in.q == null) return new BeamInformation(0, 0, 0, 0); + // if (in.q == null) return new BeamInformation(10000, 10, 0, 90); // TODO temporary for testing purposes + + return in.q.getContent(); + } + return null; + } + + private static float getVoltageFactor(long mEU, int antennaTier) { + + // float factor = (float) Math.pow(1.00004, -mEU * Math.pow(antennaTier, 1.0/3.0) + 80000); + float factor = (float) -Math.pow(1.1, -mEU / 2000 * Math.pow(antennaTier, 2.0 / 3.0)) + 1; // Strictly improves + // with higher tier + // antenna + return (float) Math.max(1.0, factor); + + } + + /* + * private static float getTemperatureFactor(int temperature) { float factor = (float) Math.pow(1.11, 0.18 * + * temperature); return factor; } + */ + private static double calculateOutputParticleEnergy(long voltage, double inputParticleEnergy, int antennaTier) { + + /* + * Energy in general increases as input energy increases, with the relationship between the machine EUt and + * energy being an negative exponential, with a maximum depending on both input particle energy and antenna + * tier. The extent to which the output depends on the former is determined by the cbrt of the latter, meaning + * that increases in antenna tier result in diminishing returns. In the same way, the curve of the output energy + * vs. machine voltage exponential depends on antenna tier, with an increase in antenna tier resulting in a more + * shallow curve up. The effect of this also increases with the tier. LaTeX: + * -\frac{l^{1.11t^{\frac{1}{3}}}}{40000000}\cdot\left(0.15^{\frac{2}{t^{\frac{3}{2}}}}\right)^{\frac{x}{60768}} + * \ +\ \frac{l^{1.11t^{\frac{1}{3}}}}{40000000} + */ + + double energy = (Math.pow(inputParticleEnergy, 1.13 * Math.pow(antennaTier, 4.0 / 9.0)) / 40_000_000) + * (-Math.pow(Math.pow(0.15, 2.0 / (Math.pow(antennaTier, 5.0 / 2.0))), voltage / 60768.0) + 1); // In + // keV + + return energy; + + } + + private static float getMachineFocus(int temperature) { + + return (float) Math.max(Math.min(Math.pow(1.5, -1.0 / 40.0 * (temperature - 480)), 90), 10); + } + + // Punny, right? + private static float getOutputRatetio(float voltageFactor, int antennaTier) { + return (float) (voltageFactor / (10 / Math.pow(2.5, antennaTier))); // Scale ratio with antenna tier, such a + // high + // exponential should be fine so long as + // there + // are only few antenna tiers + } + + @Override + public String[] getStructureDescription(ItemStack arg0) { + return DescTextLocalization.addText("Synchrotron.hint", 12); + } + + @Override + public String[] getInfoData() { + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchEnergy tHatch : mEnergyHatches) { + if (tHatch.isValid()) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + } + + BeamInformation information = this.getInputInformation(); + + return new String[] { + /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(getActualEnergyUsage()) + + EnumChatFormatting.RESET + + " EU/t", + /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getMaxInputVoltage()) + + EnumChatFormatting.RESET + + " EU/t(*2A) " + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + VN[GTUtility.getTier(getMaxInputVoltage())] + + EnumChatFormatting.RESET, + /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + Float.toString(mEfficiency / 100.0F) + + EnumChatFormatting.RESET + + " %", + + /* 7 */ EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.info") + + ": " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.focus") + ": " // Machine Focus: + + EnumChatFormatting.BLUE + + machineFocus + + " " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.temperature") + ": " // Temperature: + + EnumChatFormatting.DARK_RED + + machineTemp + + EnumChatFormatting.RESET + + " K", // e.g. "137 K" + StatCollector.translateToLocal("beamline.coolusage") + ": " // Coolant Usage: + + EnumChatFormatting.AQUA + + 32_000 + + EnumChatFormatting.RESET + + " kL/s", // 32 kL/s + + /* 8 */ EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.in_pre") + + ": " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.particle") + ": " // "Multiblock Beamline Input:" + + EnumChatFormatting.GOLD + + Particle.getParticleFromId(information.getParticleId()) + .getLocalisedName() // e.g. "Electron + // (e-)" + + " " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.energy") + ": " // "Energy:" + + EnumChatFormatting.DARK_RED + + information.getEnergy() + + EnumChatFormatting.RESET + + " keV", // e.g. "10240 keV" + StatCollector.translateToLocal("beamline.focus") + ": " // "Focus:" + + EnumChatFormatting.BLUE + + information.getFocus() + + " " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.amount") + ": " // "Amount:" + + EnumChatFormatting.LIGHT_PURPLE + + information.getRate(), + EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.out_pre") // "Multiblock Beamline + // Output:" + + ": " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.particle") + ": " + + EnumChatFormatting.GOLD + + Particle.getParticleFromId(this.outputParticle) + .getLocalisedName() + + " " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.energy") + ": " + + EnumChatFormatting.DARK_RED + + this.outputEnergy * 1000 + + EnumChatFormatting.RESET + + " eV", + StatCollector.translateToLocal( + "beamline.focus") + ": " + EnumChatFormatting.BLUE + this.outputFocus + " " + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.amount") + ": " + + EnumChatFormatting.LIGHT_PURPLE + + this.outputRate, }; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + + this.mInputBeamline.clear(); + this.mOutputBeamline.clear(); + + this.mAntennaCasings.clear(); + + this.mEnergyHatches.clear(); + this.energyHatchTier = 0; + this.antennaeTier = 0; + + this.glassTier = 0; + + this.outputEnergy = 0; + this.outputRate = 0; + this.outputFocus = 0; + this.outputParticle = 0; + + if (!checkPiece(STRUCTURE_PIECE_ENTRANCE, 16, 3, 1)) return false; + if (!checkPiece(STRUCTURE_PIECE_BASE, 16, 3, 0)) return false; + + return this.mInputBeamline.size() == 1 && this.mOutputBeamline.size() == 1 + && this.mMaintenanceHatches.size() == 1 + && this.mEnergyHatches.size() == 4 + && this.glassTier >= MIN_GLASS_TIER; + } + + @Override + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + @Override + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + +} diff --git a/src/main/java/gtnhlanth/common/tileentity/MTETargetChamber.java b/src/main/java/gtnhlanth/common/tileentity/MTETargetChamber.java new file mode 100644 index 0000000000..8545d5e23a --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/MTETargetChamber.java @@ -0,0 +1,480 @@ +package gtnhlanth.common.tileentity; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAdder; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_OIL_CRACKER_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gtnhlanth.util.DescTextLocalization.BLUEPRINT_INFO; +import static gtnhlanth.util.DescTextLocalization.addDotText; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import bartworks.common.loaders.ItemRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.TickTime; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gtnhlanth.common.beamline.BeamInformation; +import gtnhlanth.common.beamline.Particle; +import gtnhlanth.common.hatch.MTEBusInputFocus; +import gtnhlanth.common.hatch.MTEHatchInputBeamline; +import gtnhlanth.common.register.LanthItemList; +import gtnhlanth.common.tileentity.recipe.beamline.BeamlineRecipeAdder2; +import gtnhlanth.common.tileentity.recipe.beamline.RecipeTC; +import gtnhlanth.util.DescTextLocalization; + +public class MTETargetChamber extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { + + private static final IStructureDefinition STRUCTURE_DEFINITION; + + private ArrayList mInputBeamline = new ArrayList<>(); + + private ArrayList mInputFocus = new ArrayList<>(); + + private static final int CASING_INDEX_FRONT = GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings3, 10); // Grate + private static final int CASING_INDEX_CENTRE = GTUtility.getCasingTextureIndex(GregTechAPI.sBlockCasings5, 14); // Shielded + // Acc. + + private float inputEnergy; + private float inputRate; + private int inputParticle; + private float inputFocus; + + // spotless:off + static { + STRUCTURE_DEFINITION = StructureDefinition.builder() + .addShape( + "base", + new String[][] { + {"ggggg", "gjjjg", "gjbjg", "gjjjg", "ff~ff"}, + {"cslsc", "s-r-s", "srhrs", "s-r-s", "ccccc"}, + {"csssc", "s---s", "s---s", "s---s", "ccccc"}, + {"csssc", "s---s", "s---s", "s---s", "ccccc"}, + {"cstsc", "s-u-s", "suius", "s-u-s", "ccccc"}, + {"ggggg", "gjjjg", "gjojg", "gjjjg", "ggggg"}}) + + .addElement('g', ofBlock(GregTechAPI.sBlockCasings3, 10)) //Grate casing + .addElement( + 'f', + buildHatchAdder(MTETargetChamber.class).atLeast(Maintenance, Energy) + .casingIndex(CASING_INDEX_FRONT).dot(2).buildAndChain(ofBlock(GregTechAPI.sBlockCasings3, 10))) + + .addElement('j', ofBlockAdder(MTETargetChamber::addGlass, ItemRegistry.bw_glasses[0], 1)) + .addElement('b', buildHatchAdder(MTETargetChamber.class).hatchClass(MTEHatchInputBeamline.class).casingIndex(CASING_INDEX_CENTRE).dot(5).adder(MTETargetChamber::addBeamLineInputHatch).build()) + .addElement('c', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_CASING, 0)) + + .addElement('l', buildHatchAdder(MTETargetChamber.class).hatchClass(MTEBusInputFocus.class).casingIndex(CASING_INDEX_CENTRE).dot(1).adder(MTETargetChamber::addFocusInputHatch).build()) + + .addElement('t', buildHatchAdder(MTETargetChamber.class).atLeast(InputBus).casingIndex(CASING_INDEX_CENTRE).dot(3).build()) + .addElement('s', ofBlock(LanthItemList.SHIELDED_ACCELERATOR_GLASS, 0)) + .addElement('r', ofBlock(LanthItemList.FOCUS_MANIPULATION_CASING, 0)) + .addElement('h', ofBlock(LanthItemList.FOCUS_HOLDER, 0)) + .addElement('u', ofBlock(LanthItemList.TARGET_RECEPTACLE_CASING, 0)) + .addElement('i', ofBlock(LanthItemList.TARGET_HOLDER, 0)) + .addElement('o', buildHatchAdder(MTETargetChamber.class).atLeast(OutputBus).casingIndex(CASING_INDEX_CENTRE).dot(4).build()) + + .build(); + } + //spotless:on + + private boolean addGlass(Block block, int meta) { + return block == ItemRegistry.bw_glasses[0]; + } + + private boolean addBeamLineInputHatch(IGregTechTileEntity te, int casingIndex) { + + if (te == null) return false; + + IMetaTileEntity mte = te.getMetaTileEntity(); + + if (mte == null) return false; + + if (mte instanceof MTEHatchInputBeamline) { + return this.mInputBeamline.add((MTEHatchInputBeamline) mte); + } + + return false; + } + + private boolean addFocusInputHatch(IGregTechTileEntity te, int casingIndex) { + + if (te == null) return false; + + IMetaTileEntity mte = te.getMetaTileEntity(); + + if (mte == null) return false; + + if (mte instanceof MTEBusInputFocus) { + return this.mInputFocus.add((MTEBusInputFocus) mte); + } + + return false; + } + + public MTETargetChamber(int id, String name, String nameRegional) { + super(id, name, nameRegional); + } + + public MTETargetChamber(String name) { + super(name); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity te) { + return new MTETargetChamber(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity baseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean active, boolean redstoneLevel) { + // Placeholder + if (side == facing) { + if (active) return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { casingTexturePages[0][47], TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_OIL_CRACKER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { casingTexturePages[0][47] }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Collision Chamber") + .addInfo("Controller block for the Target Chamber") + .addInfo("Hitting things with other things") + + .addInfo(BLUEPRINT_INFO) + .addInfo(DescTextLocalization.BEAMLINE_SCANNER_INFO) + .addSeparator() + .beginStructureBlock(5, 5, 6, true) + .addController("Front bottom") + .addCasingInfoExactly("Grate Machine Casing", 29, false) + .addCasingInfoExactly("Shielded Accelerator Casing", 28, false) + .addCasingInfoExactly("Borosilicate Glass", 16, true) + .addCasingInfoExactly(LanthItemList.SHIELDED_ACCELERATOR_GLASS.getLocalizedName(), 34, false) + .addCasingInfoExactly(LanthItemList.TARGET_RECEPTACLE_CASING.getLocalizedName(), 4, false) + .addCasingInfoExactly(LanthItemList.FOCUS_MANIPULATION_CASING.getLocalizedName(), 4, false) + .addCasingInfoExactly(LanthItemList.FOCUS_HOLDER.getLocalizedName(), 1, false) + .addCasingInfoExactly(LanthItemList.TARGET_HOLDER.getLocalizedName(), 1, false) + .addOtherStructurePart("Focus Input Bus", addDotText(1)) + .addMaintenanceHatch(addDotText(2)) + .addEnergyHatch(addDotText(2)) + .addInputBus(addDotText(3)) + .addOutputBus(addDotText(4)) + .addOtherStructurePart("Beamline Input Hatch", addDotText(5)) + .toolTipFinisher("GTNH: Lanthanides"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece("base", stackSize, hintsOnly, 2, 4, 0); + + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + return survivialBuildPiece("base", stackSize, 2, 4, 0, elementBudget, env, false, true); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public RecipeMap getRecipeMap() { + return BeamlineRecipeAdder2.instance.TargetChamberRecipes; + } + + @Override + public boolean checkRecipe(ItemStack itemStack) { + + inputEnergy = 0; + inputRate = 0; + inputParticle = 0; + inputFocus = 0; + + ArrayList tItems = this.getStoredInputs(); + ItemStack tFocusItem = this.getFocusItemStack(); + + ItemStack tFocusItemZeroDamage = null; + + if (tFocusItem != null) { + + tFocusItemZeroDamage = tFocusItem.copy(); + tFocusItemZeroDamage.setItemDamage(0); + } + + ArrayList tItemsWithFocusItem = new ArrayList<>(); + tItemsWithFocusItem.add(tFocusItemZeroDamage); + tItemsWithFocusItem.addAll(tItems); + + long tVoltage = this.getMaxInputVoltage(); + + ItemStack[] tItemsArray = tItems.toArray(new ItemStack[0]); + + ItemStack[] tItemsWithFocusItemArray = tItemsWithFocusItem.toArray(new ItemStack[0]); + + RecipeTC tRecipe = (RecipeTC) BeamlineRecipeAdder2.instance.TargetChamberRecipes.findRecipeQuery() + .items(tItemsWithFocusItemArray) + .voltage(tVoltage) + .filter((GTRecipe recipe) -> { + + RecipeTC recipeTc = (RecipeTC) recipe; + + BeamInformation inputInfo = this.getInputInformation(); + + int particle = recipeTc.particleId; + + return (particle == inputInfo.getParticleId() + && !(inputInfo.getEnergy() < recipeTc.minEnergy || inputInfo.getEnergy() > recipeTc.maxEnergy)); + + }) + .find(); + + if (tRecipe == null || !tRecipe.isRecipeInputEqual(true, new FluidStack[] {}, tItemsWithFocusItemArray)) + return false; + + if (tRecipe.focusItem != null) { + if (tRecipe.focusItem.getItem() != tFocusItem.getItem()) return false; + } + + this.mEfficiency = (10000 - (this.getIdealStatus() - this.getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + + BeamInformation inputInfo = this.getInputInformation(); + + if (inputInfo == null) return false; + + inputEnergy = inputInfo.getEnergy(); + inputRate = inputInfo.getRate(); + inputParticle = inputInfo.getParticleId(); + inputFocus = inputInfo.getFocus(); + + if (inputEnergy < tRecipe.minEnergy || inputEnergy > tRecipe.maxEnergy) return false; + + if (inputFocus < tRecipe.minFocus) return false; + + if (inputParticle != tRecipe.particleId) return false; + + this.mMaxProgresstime = Math.max(Math.round((tRecipe.amount / inputRate * 5 * TickTime.SECOND)), 1); // 5 + // seconds + // per + // integer multiple + // over the rate. E.g., 100a, 10r + // would equal 50 seconds + if (this.mMaxProgresstime == Integer.MAX_VALUE - 1 && this.mEUt == Integer.MAX_VALUE - 1) return false; + + mEUt = (int) -tVoltage; + if (this.mEUt > 0) this.mEUt = (-this.mEUt); + + this.mOutputItems = tRecipe.mOutputs; + + if (tRecipe.focusItem != null) // Recipe actually uses the mask, can also assume machine mask item is nonnull + // due to above conditions + mInputFocus.get(0) + .depleteFocusDurability(1); + + this.updateSlots(); + + return true; + } + + private BeamInformation getInputInformation() { + + for (MTEHatchInputBeamline in : this.mInputBeamline) { + + if (in.q == null) return new BeamInformation(0, 0, 0, 0); + // if (in.q == null) return new BeamInformation(10, 10, Particle.PHOTON.ordinal(), 90); // temporary + // for + // testing purposes + + return in.q.getContent(); + } + return null; + } + + private ItemStack getFocusItemStack() { + + for (MTEBusInputFocus hatch : this.mInputFocus) { + return hatch.getContentUsageSlots() + .get(0); + } + + return null; + + } + + @Override + public boolean checkMachine(IGregTechTileEntity arg0, ItemStack arg1) { + + mInputBeamline.clear(); + mInputFocus.clear(); + + if (!checkPiece("base", 2, 4, 0)) return false; + + return this.mInputBeamline.size() == 1 && this.mMaintenanceHatches.size() == 1 + && this.mInputBusses.size() == 1 + && this.mOutputBusses.size() == 1 + && this.mInputFocus.size() == 1; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack arg0) { + return false; + } + + @Override + public int getDamageToComponent(ItemStack arg0) { + return 0; + } + + @Override + public int getMaxEfficiency(ItemStack arg0) { + return 10000; + } + + @Override + public boolean isCorrectMachinePart(ItemStack arg0) { + return true; + } + + @Override + public String[] getStructureDescription(ItemStack arg0) { + return DescTextLocalization.addText("TargetChamber.hint", 13); + } + + @Override + public String[] getInfoData() { + + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchEnergy tHatch : mEnergyHatches) { + if (tHatch.isValid()) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + } + + BeamInformation information = this.getInputInformation(); + + return new String[] { + /* 1 */ StatCollector.translateToLocal("GT5U.multiblock.Progress") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + /* 2 */ StatCollector.translateToLocal("GT5U.multiblock.energy") + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + /* 3 */ StatCollector.translateToLocal("GT5U.multiblock.usage") + ": " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(getActualEnergyUsage()) + + EnumChatFormatting.RESET + + " EU/t", + /* 4 */ StatCollector.translateToLocal("GT5U.multiblock.mei") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getMaxInputVoltage()) + + EnumChatFormatting.RESET + + " EU/t(*2A) " + + StatCollector.translateToLocal("GT5U.machines.tier") + + ": " + + EnumChatFormatting.YELLOW + + VN[GTUtility.getTier(getMaxInputVoltage())] + + EnumChatFormatting.RESET, + /* 5 */ StatCollector.translateToLocal("GT5U.multiblock.problems") + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + StatCollector.translateToLocal("GT5U.multiblock.efficiency") + + ": " + + EnumChatFormatting.YELLOW + + Float.toString(mEfficiency / 100.0F) + + EnumChatFormatting.RESET + + " %", + + /* 6 */ EnumChatFormatting.BOLD + StatCollector.translateToLocal("beamline.in_pre") + + ": " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.particle") + ": " // "Multiblock Beamline Input:" + + EnumChatFormatting.GOLD + + Particle.getParticleFromId(information.getParticleId()) + .getLocalisedName() // e.g. "Electron + // (e-)" + + " " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.energy") + ": " // "Energy:" + + EnumChatFormatting.DARK_RED + + information.getEnergy() * 1000 // In line with the synchrotron's output + + EnumChatFormatting.RESET + + " eV", // e.g. "10240 eV" + StatCollector.translateToLocal("beamline.focus") + ": " // "Focus:" + + EnumChatFormatting.BLUE + + information.getFocus() + + " " + + EnumChatFormatting.RESET, + StatCollector.translateToLocal("beamline.amount") + ": " // "Amount:" + + EnumChatFormatting.LIGHT_PURPLE + + information.getRate(), }; + } + +} diff --git a/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeAdder2.java b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeAdder2.java new file mode 100644 index 0000000000..dad71375c3 --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeAdder2.java @@ -0,0 +1,165 @@ +package gtnhlanth.common.tileentity.recipe.beamline; + +import java.util.Arrays; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMapBackend; +import gregtech.api.recipe.RecipeMapBuilder; +import gregtech.api.util.GTUtility; +import gtnhlanth.common.beamline.Particle; + +public class BeamlineRecipeAdder2 { + + public static final BeamlineRecipeAdder2 instance = new BeamlineRecipeAdder2(); + + public final RecipeMap SourceChamberRecipes = RecipeMapBuilder.of("gtnhlanth.recipe.sc") + .minInputs(0, 0) + .maxIO(1, 2, 0, 0) + .amperage(1) + .frontend(SourceChamberFrontend::new) + .progressBar(GTUITextures.PROGRESSBAR_ASSEMBLY_LINE_1) + .neiSpecialInfoFormatter((recipeInfo) -> { + + RecipeSC recipe = (RecipeSC) recipeInfo.recipe; + + float focus = recipe.focus; + float maxEnergy = recipe.maxEnergy; + + int amount = recipe.rate; + + Particle particle = Particle.getParticleFromId(recipe.particleId); + + return Arrays.asList( + + // StatCollector.translateToLocal("beamline.particle") + ": " + particle.getLocalisedName(), + + StatCollector.translateToLocal("beamline.energy") + ": <=" + + GTUtility.formatNumbers(Math.min(maxEnergy, particle.maxSourceEnergy())) + + " keV", + + StatCollector.translateToLocal("beamline.focus") + ": " + GTUtility.formatNumbers(focus), + + StatCollector.translateToLocal("beamline.rate") + ": " + GTUtility.formatNumbers(amount) + + ); + }) + // .slotOverlays(null) + + .build(); + + public final RecipeMap TargetChamberRecipes = RecipeMapBuilder.of("gtnhlanth.recipe.tc") + .minInputs(0, 0) + .maxIO(3, 4, 0, 0) + .frontend(TargetChamberFrontend::new) + .neiSpecialInfoFormatter(((recipeInfo) -> { + + RecipeTC recipe = (RecipeTC) recipeInfo.recipe; + + float minEnergy = recipe.minEnergy; + float maxEnergy = recipe.maxEnergy; + + float minFocus = recipe.minFocus; + + float amount = recipe.amount; + + Particle particle = Particle.getParticleFromId(recipe.particleId); + + return Arrays.asList( + + // StatCollector.translateToLocal("beamline.particle") + ": " + particle.getLocalisedName(), + + StatCollector.translateToLocal("beamline.energy") + ": " + + GTUtility.formatNumbers(minEnergy * 1000) + + "-" + + GTUtility.formatNumbers(maxEnergy * 1000) + + " eV", // Note the eV unit + + StatCollector.translateToLocal("beamline.focus") + ": >=" + GTUtility.formatNumbers(minFocus), + + StatCollector.translateToLocal("beamline.amount") + ": " + GTUtility.formatNumbers(amount) + + ); + })) + // .slotOverlays(null) + .progressBar(GTUITextures.PROGRESSBAR_ASSEMBLY_LINE_1) + .progressBarPos(108, 22) + .neiTransferRect(100, 22, 28, 18) + .build(); + + /*** + * + * @param itemInputs - duh + * @param itemOutputs - duh + * @param particleId - The ID of the {@link Particle} generated by the recipe. + * It is recommended to use Particle#ordinal() + * @param rate - The rate/amount of particles generated + * @param maxEnergy - The maximum energy particles generated by this recipe can possess (keV). Set this value >= + * max particle energy to limit it to the latter + * @param focus - Focus of the particle generated + * @param energyRatio - Set high for little-to-no EUt energy scaling, low for the opposite + * @param minEUt - Minimum EUt required for the recipe. ! May not output if input energy is equal to minimum ! + */ + public boolean addSourceChamberRecipe(ItemStack[] itemInputs, ItemStack[] itemOutputs, int particleId, int rate, + float maxEnergy, float focus, float energyRatio, int minEUt) { + + return (SourceChamberRecipes.addRecipe( + new RecipeSC( + false, + itemInputs, + itemOutputs, + null, + new int[] {}, + null, + null, + 20, + minEUt, + particleId, + rate, + maxEnergy, + focus, + energyRatio)) + != null); + } + + /*** + * + * @param itemInput - The item to be used as a target. Should have durability + * @param itemOutput - duh + * @param particleId - The ID of the {@link Particle} used by the recipe. It + * is recommended to use Particle#ordinal() + * @param amount - The total amount of particles required for the recipe to come to completion. The duration of + * the recipe will be determined by this and the input particle rate. + * @param minEnergy - The minimum energy amount required by this recipe in keV (inclusive) + * @param maxEnergy - The maximum energy amount allowed by this recipe in keV (inclusive) + * @param minFocus - Minimum focus allowed by the recipe + * @param energyRatio - Set high for little-to-no EUt energy scaling, low for the opposite + * @param minEUt - Minimum EUt required for the recipe to start + */ + + public boolean addTargetChamberRecipe(ItemStack itemInput, ItemStack itemOutput, ItemStack itemFocus, + int particleId, int amount, float minEnergy, float maxEnergy, float minFocus, float energyRatio, int minEUt) { + + return (TargetChamberRecipes.addRecipe( + new RecipeTC( + false, + itemInput, + itemOutput, + itemFocus, + particleId, + amount, + minEnergy, + maxEnergy, + minFocus, + energyRatio, + minEUt), + false, + false, + false) != null); + + } + +} diff --git a/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java new file mode 100644 index 0000000000..d71b9a571e --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/BeamlineRecipeLoader.java @@ -0,0 +1,193 @@ +package gtnhlanth.common.tileentity.recipe.beamline; + +import java.util.Arrays; +import java.util.HashMap; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.material.MaterialsElements; +import gtnhlanth.common.beamline.Particle; +import gtnhlanth.common.item.MaskList; +import gtnhlanth.common.register.LanthItemList; +import gtnhlanth.common.register.WerkstoffMaterialPool; + +public class BeamlineRecipeLoader { + + public static final HashMap coolantMap = new HashMap<>(); + + private static final ItemList[] VIABLE_WAFERS = new ItemList[] { ItemList.Circuit_Silicon_Wafer, + ItemList.Circuit_Silicon_Wafer2, ItemList.Circuit_Silicon_Wafer3, ItemList.Circuit_Silicon_Wafer4, + ItemList.Circuit_Silicon_Wafer5, ItemList.Circuit_Silicon_Wafer6, ItemList.Circuit_Silicon_Wafer7 }; + + public static void load() { + + /* + * Coolant list + */ + + coolantMap.put( + Materials.LiquidNitrogen.getGas(1L) + .getFluid() + .getName(), + Materials.Nitrogen.getGas(1L) + .getFluid()); + coolantMap.put( + Materials.LiquidOxygen.getGas(1L) + .getFluid() + .getName(), + Materials.Oxygen.getGas(1L) + .getFluid()); + coolantMap.put("ic2coolant", FluidRegistry.getFluid("ic2hotcoolant")); + coolantMap.put( + Materials.SuperCoolant.getFluid(1L) + .getFluid() + .getName(), + Materials.Water.getFluid(1L) + .getFluid()); + + /* + * ELECTRON + */ + BeamlineRecipeAdder2.instance.addSourceChamberRecipe( + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.stick, Materials.Tungsten, 1) }, + null, + Particle.ELECTRON.ordinal(), + 20, + 1000, + 98, + 0.1f, + 7680); + + BeamlineRecipeAdder2.instance.addSourceChamberRecipe( + new ItemStack[] { WerkstoffMaterialPool.LanthanumHexaboride.get(OrePrefixes.stickLong, 1) }, + null, + Particle.ELECTRON.ordinal(), + 60, + 5000, + 99, + 0.3f, + 7680); + + /* + * NEUTRON + */ + BeamlineRecipeAdder2.instance.addSourceChamberRecipe( + new ItemStack[] { MaterialsElements.getInstance().CALIFORNIUM.getDust(1) }, + null, + Particle.NEUTRON.ordinal(), + 10, + 9000, + 95, + 999, + 1920); + + /* + * ALPHA + */ + BeamlineRecipeAdder2.instance.addSourceChamberRecipe( + new ItemStack[] { Materials.Uranium.getDust(1) }, + new ItemStack[] { WerkstoffMaterialPool.Thorium234.get(OrePrefixes.dust, 1) }, + Particle.ALPHA.ordinal(), + 1, + 4270, + 90, + 999, + 480); + + /* + * TARGET CHAMBER + */ + + for (MaskList mask : MaskList.values()) { + + if (mask.getProducedItem() == null) // Blank or error + continue; + + int index = 0; + for (ItemList wafer : VIABLE_WAFERS) { + + index++; + + if (!Arrays.asList(mask.getForbiddenWafers()) + .contains(wafer)) { + + BeamlineRecipeAdder2.instance.addTargetChamberRecipe( + wafer.get(1), + GTUtility.copyAmountUnsafe((int) Math.pow(2, index + 2), mask.getProducedItem()), + new ItemStack(LanthItemList.maskMap.get(mask), 0), + 1, + mask.getBaselineAmount() * (int) Math.pow(Math.sqrt(3), index - 1), // 3x recipe amount increase + // per 2 increases in wafer + // tier. This greatly + // incentivises the use of + // higher tier boule wafer + // recipes + mask.getMinEnergy(), + mask.getMaxEnergy(), + mask.getMinFocus(), + 1, + 1920); + + } + + } + + /* + * if (!Arrays.asList(MaskList.CPU.getForbiddenWafers()).contains(wafer)) { + * BeamlineRecipeAdder.instance.addTargetChamberRecipe( wafer.get(1), GT_Utility.copyAmountUnsafe((int) + * Math.pow(2, index + 2), ItemList.Circuit_Wafer_CPU.get(1)), //Varies new + * ItemStack(LanthItemList.maskMap.get(MaskList.CPU), 0), // Varies 0, 10 * (int) Math.pow(2, index - 1), // + * Varies 1, //Varies 10000000, //Varies 50, //Varies 1, 1920 ); } /* PPIC + */ + + /* + * if (!Arrays.asList(MaskList.PPIC.getForbiddenWafers()).contains(wafer)) { + * GTLog.out.print("Adding recipe for PPIC with " + wafer.get(1).getUnlocalizedName() + " amount: " + 40 * + * (int) Math.pow(2, index - 1)); BeamlineRecipeAdder.instance.addTargetChamberRecipe( wafer.get(1), + * ItemList.Circuit_Wafer_PPIC.get((int) Math.pow(2, index + 2)), //Varies new + * ItemStack(LanthItemList.maskMap.get(MaskList.PPIC), 0), // Varies 0, 40 * (int) Math.pow(2, index - 1), + * // Varies 1, //Varies 10000000, //Varies 50, //Varies 1, 1920 ); } + */ + + } + /* + * BeamlineRecipeAdder2.instance.addTargetChamberRecipe( new ItemStack(Items.coal, 1), new + * ItemStack(Items.diamond, 1), null, 1, 20, 100, 1000, 60, 1, 1920); + * BeamlineRecipeAdder2.instance.addTargetChamberRecipe( new ItemStack(Items.coal, 1), new + * ItemStack(Items.cooked_chicken, 1), null, 1, 20, 1, 10, 60, 1, 1920); + */ + + BeamlineRecipeAdder2.instance.addTargetChamberRecipe( + new ItemStack(Items.chicken, 1), + new ItemStack(Items.cooked_chicken), + null, + Particle.PHOTON.ordinal(), + 400, + 5, + 20, + 80, + 1, + 7864320); + + BeamlineRecipeAdder2.instance.addTargetChamberRecipe( + new ItemStack(Items.chicken, 1), + new ItemStack(Items.egg), + null, + Particle.PHOTON.ordinal(), + 400, + 21, + 600, + 80, + 1, + 7864320); + + } +} diff --git a/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/RecipeSC.java b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/RecipeSC.java new file mode 100644 index 0000000000..979cb6a8bb --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/RecipeSC.java @@ -0,0 +1,52 @@ +package gtnhlanth.common.tileentity.recipe.beamline; + +import java.util.ArrayList; +import java.util.Arrays; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gtnhlanth.common.register.LanthItemList; + +public class RecipeSC extends GTRecipe { + + public int particleId; + public int rate; + public float maxEnergy; + public float focus; + public float energyRatio; + + public RecipeSC(boolean aOptimize, ItemStack[] aInputs, ItemStack[] aOutputs, Object aSpecialItems, int[] aChances, + FluidStack[] aFluidInputs, FluidStack[] aFluidOutputs, int aDuration, int aEUt, int particleId, int rate, + float maxEnergy, float focus, float energyRatio) { + + super(aOptimize, aInputs, aOutputs, null, aChances, null, null, aDuration, aEUt, 0); + + this.particleId = particleId; + this.rate = rate; + this.maxEnergy = maxEnergy; + this.focus = focus; + this.energyRatio = energyRatio; + } + + @Override + public ItemStack getRepresentativeOutput(int aIndex) { + + ArrayList mOutputsWithParticle = new ArrayList<>(); + + ItemStack particleStack = new ItemStack(LanthItemList.PARTICLE_ITEM); + + Items.ender_pearl.setDamage(particleStack, this.particleId); + + mOutputsWithParticle.addAll(Arrays.asList(mOutputs)); + mOutputsWithParticle.add(particleStack); + + ItemStack[] mOutputsWithParticleArray = mOutputsWithParticle.toArray(new ItemStack[0]); + + if (aIndex < 0 || aIndex >= mOutputsWithParticleArray.length) return null; + return GTUtility.copyOrNull(mOutputsWithParticleArray[aIndex]); + } +} diff --git a/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/RecipeTC.java b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/RecipeTC.java new file mode 100644 index 0000000000..30be015abb --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/RecipeTC.java @@ -0,0 +1,71 @@ +package gtnhlanth.common.tileentity.recipe.beamline; + +import java.util.ArrayList; +import java.util.Arrays; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; + +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gtnhlanth.common.register.LanthItemList; + +public class RecipeTC extends GTRecipe { + + public int particleId; + public int amount; + + public float minEnergy; + public float maxEnergy; + + public float minFocus; + public float energyRatio; + + public ItemStack focusItem; + + public RecipeTC(boolean aOptimize, ItemStack aInput, ItemStack aOutput, ItemStack aFocusItem, int particleId, + int amount, float minEnergy, float maxEnergy, float minFocus, float energyRatio, int aEUt) { + + super( + aOptimize, + new ItemStack[] { aFocusItem, aInput }, + new ItemStack[] { aOutput }, + null, + null, + null, + null, + 1, + aEUt, + 0); + + this.particleId = particleId; + this.amount = amount; + + this.minEnergy = minEnergy; + this.maxEnergy = maxEnergy; + + this.minFocus = minFocus; + + this.energyRatio = energyRatio; + + this.focusItem = aFocusItem; + } + + @Override + public ItemStack getRepresentativeInput(int aIndex) { + + ArrayList mInputsWithParticle = new ArrayList<>(); + + ItemStack particleStack = new ItemStack(LanthItemList.PARTICLE_ITEM); + Items.ender_pearl.setDamage(particleStack, this.particleId); + + mInputsWithParticle.add(particleStack); + mInputsWithParticle.addAll(Arrays.asList(mInputs)); + + ItemStack[] mInputsWithParticleArray = mInputsWithParticle.toArray(new ItemStack[0]); + + if (aIndex < 0 || aIndex >= mInputsWithParticleArray.length) return null; + return GTUtility.copyOrNull(mInputsWithParticleArray[aIndex]); + } + +} diff --git a/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/SourceChamberFrontend.java b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/SourceChamberFrontend.java new file mode 100644 index 0000000000..3d8a3abfd1 --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/SourceChamberFrontend.java @@ -0,0 +1,24 @@ +package gtnhlanth.common.tileentity.recipe.beamline; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.nei.RecipeDisplayInfo; + +public class SourceChamberFrontend extends RecipeMapFrontend { + + public SourceChamberFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder); + } + + @Override + public void drawDescription(RecipeDisplayInfo recipeInfo) { + drawEnergyInfo(recipeInfo); + // drawDurationInfo(recipeInfo); Unnecessary and misleading + drawSpecialInfo(recipeInfo); + drawMetadataInfo(recipeInfo); + drawRecipeOwnerInfo(recipeInfo); + } + +} diff --git a/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/TargetChamberFrontend.java b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/TargetChamberFrontend.java new file mode 100644 index 0000000000..87852381e6 --- /dev/null +++ b/src/main/java/gtnhlanth/common/tileentity/recipe/beamline/TargetChamberFrontend.java @@ -0,0 +1,109 @@ +package gtnhlanth.common.tileentity.recipe.beamline; + +import static gregtech.api.util.GTUtility.trans; + +import java.util.List; + +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; + +import com.gtnewhorizons.modularui.api.math.Pos2d; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.GTUtility; +import gregtech.api.util.OverclockCalculator; +import gregtech.common.gui.modularui.UIHelper; +import gregtech.nei.GTNEIDefaultHandler; +import gregtech.nei.RecipeDisplayInfo; +import gtnhlanth.util.Util; + +public class TargetChamberFrontend extends RecipeMapFrontend { + + public TargetChamberFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder); + } + + public void drawDescription(RecipeDisplayInfo recipeInfo) { + drawEnergyInfo(recipeInfo); + // drawDurationInfo(recipeInfo); + drawSpecialInfo(recipeInfo); + drawMetadataInfo(recipeInfo); + drawRecipeOwnerInfo(recipeInfo); + } + + @Override + protected void drawNEIOverlayForInput(GTNEIDefaultHandler.FixedPositionedStack stack) { + if (stack.isNotConsumed()) { // The stack actually takes damage, but is technically still not considered to be + // consumed by the code + drawNEIOverlayText("PC", stack); + } + } + + @Override + protected List handleNEIItemInputTooltip(List currentTip, + GTNEIDefaultHandler.FixedPositionedStack pStack) { + if (pStack.isNotConsumed()) { // See above + currentTip.add(EnumChatFormatting.GRAY + StatCollector.translateToLocal("gtnhlanth.tt.pc")); // Partially + // consumed: + // Takes damage + // in the + // process + } + return currentTip; + } + + @Override + public void drawEnergyInfo(RecipeDisplayInfo recipeInfo) { + if (recipeInfo.calculator.getConsumption() <= 0) return; + + // recipeInfo.drawText(trans("152", "Total: ") + getTotalPowerString(recipeInfo.calculator)); + + recipeInfo.drawText(trans("153", "Usage: ") + getEUtDisplay(recipeInfo.calculator)); + recipeInfo.drawText(trans("154", "Voltage: ") + getVoltageString(recipeInfo.calculator)); + recipeInfo.drawText(trans("155", "Amperage: ") + getAmperageString(recipeInfo.calculator)); + + } + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return UIHelper.getGridPositions(itemOutputCount, 128, 24, 1, 3); // Make output items display vertically, not + // in a square + } + + @Override + public List getItemInputPositions(int itemInputCount) { + + /* + * Pos2d posParticle = new Pos2d(8, 28); // Particle item ArrayList posList = new ArrayList<>(); + * posList.add(posParticle); posList.addAll(UIHelper.getGridPositions(itemInputCount - 1, 36, 28, 3)); + */ + + List posList = Util.getGridPositions(itemInputCount, 8, 20, 3, 1, 20); + return posList; + } + + private String getEUtDisplay(OverclockCalculator calculator) { + return getEUtWithoutTier(calculator); + } + + private String getEUtWithoutTier(OverclockCalculator calculator) { + return GTUtility.formatNumbers(calculator.getConsumption()) + " EU/t"; + } + + private String getVoltageString(OverclockCalculator calculator) { + long voltage = computeVoltageForEURate(calculator.getConsumption()); + return GTUtility.formatNumbers(voltage) + " EU/t" + GTUtility.getTierNameWithParentheses(voltage); + } + + private long computeVoltageForEURate(long euPerTick) { + return euPerTick; + } + + private String getAmperageString(OverclockCalculator calculator) { + return GTUtility.formatNumbers(1); + } + +} diff --git a/src/main/java/gtnhlanth/loader/BotRecipes.java b/src/main/java/gtnhlanth/loader/BotRecipes.java new file mode 100644 index 0000000000..fd0d4c4df7 --- /dev/null +++ b/src/main/java/gtnhlanth/loader/BotRecipes.java @@ -0,0 +1,262 @@ +package gtnhlanth.loader; + +import static gregtech.api.enums.OrePrefixes.*; +import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalReactorRecipes; +import static gregtech.api.recipe.RecipeMaps.crackingRecipes; +import static gregtech.api.recipe.RecipeMaps.distilleryRecipes; +import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; +import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; +import static gtnhlanth.common.register.BotWerkstoffMaterialPool.*; + +import java.util.HashSet; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import bartworks.system.material.WerkstoffLoader; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gtnhlanth.common.register.BotWerkstoffMaterialPool; +import ic2.core.Ic2Items; + +/* + * Originally authored by botn365 under the MIT License. See BotdustriesLICENSE + */ + +public class BotRecipes { + + public static void addGTRecipe() { + ItemStack C1 = GTUtility.getIntegratedCircuit(1); + ItemStack C2 = GTUtility.getIntegratedCircuit(2); + ItemStack C24 = GTUtility.getIntegratedCircuit(24); + + // CaCO3 + 2HCl = H2O + CO2 + CaCl2 + GTValues.RA.stdBuilder() + .itemInputs(Materials.Calcite.getDust(5), Materials.Empty.getCells(1)) + .itemOutputs(Materials.CarbonDioxide.getCells(1), WerkstoffLoader.CalciumChloride.get(dust, 3)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(2000)) + .fluidOutputs(Materials.Water.getFluid(1000)) + .duration(4 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(UniversalChemical); + + // tungsten chain + FluidStack sodiumTungsten = SodiumTungstate.getFluidOrGas(1000); + ItemStack scheelite = Materials.Scheelite.getDust(6); + + // Li2WO4 + 2Na = Na2WO4 + 2Li + GTValues.RA.stdBuilder() + .itemInputs(Materials.Tungstate.getDust(7), Materials.Sodium.getDust(2)) + .itemOutputs(Materials.Lithium.getDust(2)) + .fluidInputs(Materials.Water.getFluid(4000)) + .fluidOutputs(sodiumTungsten) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(autoclaveRecipes); + + // MnWO4 + 2Na = Na2WO4 + Mn + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Huebnerit.get(dust, 6), Materials.Sodium.getDust(2)) + .itemOutputs(Materials.Manganese.getDust(1)) + .fluidInputs(Materials.Water.getFluid(4000)) + .fluidOutputs(sodiumTungsten) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(autoclaveRecipes); + + // FeWO4 + 2Na = Na2WO4 + Fe + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffLoader.Ferberite.get(dust, 6), Materials.Sodium.getDust(2)) + .itemOutputs(Materials.Iron.getDust(1)) + .fluidInputs(Materials.Water.getFluid(4000)) + .fluidOutputs(sodiumTungsten) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(autoclaveRecipes); + + // CaCl2 + Na2WO4 = 2NaCl + CaWO4 + ItemStack Ca2Cl = WerkstoffLoader.CalciumChloride.get(dust, 3); + GTValues.RA.stdBuilder() + .itemInputs(Ca2Cl) + .itemOutputs(scheelite, Materials.Salt.getDust(4)) + .fluidInputs(sodiumTungsten) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + ItemStack H2WO4 = TungsticAcid.get(dust, 7); + // CaWO4 + 2HCl = H2WO4 + CaCl2 + GTValues.RA.stdBuilder() + .itemInputs(scheelite) + .itemOutputs(H2WO4, Ca2Cl) + .fluidInputs(Materials.HydrochloricAcid.getFluid(2000)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_EV) + .addTo(UniversalChemical); + + ItemStack WO3 = TungstenTrioxide.get(dust, 4); + // H2WO4 = WO3 + H2O + GTValues.RA.stdBuilder() + .itemInputs(H2WO4) + .itemOutputs(WO3) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 1200) + .addTo(blastFurnaceRecipes); + + // WO3 + 6H = W + 3H2O + GTValues.RA.stdBuilder() + .itemInputs(WO3, C2) + .itemOutputs(Materials.Tungsten.getDust(1)) + .fluidInputs(Materials.Hydrogen.getGas(6000)) + .fluidOutputs(GTModHandler.getSteam(3000)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 1000) + .addTo(blastFurnaceRecipes); + + WO3.stackSize = 8; + // 2WO3 + 3C = 2W + 3CO2 + GTValues.RA.stdBuilder() + .itemInputs(WO3, Materials.Carbon.getDust(3)) + .itemOutputs(GTOreDictUnificator.get(ingotHot, Materials.Tungsten, 2L)) + .fluidOutputs(Materials.CarbonDioxide.getGas(3000)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_EV) + .metadata(COIL_HEAT, 3000) + .addTo(blastFurnaceRecipes); + + // rocket fuels + // LMP103S + // 2Cl + CO = COCl2 + + GTValues.RA.stdBuilder() + .itemInputs(Materials.CarbonMonoxide.getCells(1), GTUtility.getIntegratedCircuit(12)) + .itemOutputs(Phosgene.get(cell, 1)) + .fluidInputs(Materials.Chlorine.getGas(2000)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_HV) + .addTo(chemicalReactorRecipes); + GTValues.RA.stdBuilder() + .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(12)) + .itemOutputs(Phosgene.get(cell, 1), Materials.Empty.getCells(1)) + .fluidInputs(Materials.CarbonMonoxide.getGas(1000)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_HV) + .addTo(chemicalReactorRecipes); + GTValues.RA.stdBuilder() + .itemInputs(Materials.CarbonMonoxide.getCells(1), Materials.Chlorine.getCells(2)) + .itemOutputs(Phosgene.get(cell, 1), Materials.Empty.getCells(2)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_HV) + .addTo(chemicalReactorRecipes); + GTValues.RA.stdBuilder() + .itemInputs(Materials.Chlorine.getCells(2), GTUtility.getIntegratedCircuit(2)) + .itemOutputs(Materials.Empty.getCells(2)) + .fluidInputs(Materials.CarbonMonoxide.getGas(1000)) + .fluidOutputs(BotWerkstoffMaterialPool.Phosgene.getFluidOrGas(1000)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + // H3PO4 = P + H2O + GTValues.RA.stdBuilder() + .itemInputs(C2) + .itemOutputs(Materials.Phosphorus.getDust(1)) + .fluidInputs(Materials.PhosphoricAcid.getFluid(1000)) + .fluidOutputs(Materials.Water.getFluid(500)) + .eut(TierEU.RECIPE_HV) + .duration(1 * SECONDS) + .addTo(distilleryRecipes); + + ItemStack cells = Ic2Items.cell.copy(); + cells.stackSize = 1; + // NH4Cl = HCl + NH3 + GTValues.RA.stdBuilder() + .itemInputs(cells) + .itemOutputs(Materials.Ammonia.getCells(1)) + .fluidInputs(WerkstoffLoader.AmmoniumChloride.getFluidOrGas(1000)) + .fluidOutputs(Materials.HydrochloricAcid.getFluid(1000)) + .eut(TierEU.RECIPE_MV) + .duration(2 * SECONDS + 10 * TICKS) + .addTo(distilleryRecipes); + + // N2H4O3 + NaOH = NaNO3 + NH3 + H2O + GTValues.RA.stdBuilder() + .itemInputs(AmmoniumNitrate.get(dust, 9), Materials.SodiumHydroxide.getDust(3)) + .itemOutputs(WerkstoffLoader.SodiumNitrate.get(dust, 5)) + .fluidOutputs(Materials.Ammonia.getGas(1000)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(chemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(AmmoniumNitrate.get(dust, 9), Materials.SodiumHydroxide.getDust(3), C2) + .itemOutputs(WerkstoffLoader.SodiumNitrate.get(dust, 5)) + .fluidOutputs(Materials.Ammonia.getGas(1000), Materials.Water.getFluid(1000)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(multiblockChemicalReactorRecipes); + + // N2H4O3 + NaOH + H =H2SO4= NH3 + HNO3 + Na + H2O + GTValues.RA.stdBuilder() + .itemInputs(C24, AmmoniumNitrate.get(dust, 9), Materials.SodiumHydroxide.getDust(3)) + .itemOutputs(Materials.Sodium.getDust(1)) + .fluidInputs(Materials.SulfuricAcid.getFluid(1000), Materials.Hydrogen.getGas(1000)) + .fluidOutputs( + Materials.Ammonia.getGas(1000), + Materials.NitricAcid.getFluid(1000), + Materials.DilutedSulfuricAcid.getFluid(1000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(multiblockChemicalReactorRecipes); + + // 2HNO3 + C3H8 = 2CH3NO2 + 2H2O + C + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(2)) + .fluidInputs(Materials.Propane.getGas(1000), Materials.NitricAcid.getFluid(2000)) + .fluidOutputs(Nitromethane.getFluidOrGas(2000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(crackingRecipes); + } + + public static void removeRecipes() { + BotRecipes.removeTungstenElectro(); + } + + public static void removeTungstenElectro() { + HashSet toDel = new HashSet<>(); + ItemStack[] toRemove = { Materials.Scheelite.getDust(1), Materials.Tungstate.getDust(1), + WerkstoffLoader.Ferberite.get(dust, 1), WerkstoffLoader.Huebnerit.get(dust, 1) }; + for (GTRecipe tRecipe : electrolyzerRecipes.getAllRecipes()) { + if (tRecipe.mFakeRecipe) continue; + for (int i = 0; i < tRecipe.mInputs.length; i++) { + ItemStack tItem = tRecipe.mInputs[i]; + if (item == null || !GTUtility.isStackValid(tItem)) continue; + for (ItemStack tStack : toRemove) { + if (GTUtility.areStacksEqual(tItem, tStack)) { + toDel.add(tRecipe); + continue; + } + } + } + } + electrolyzerRecipes.getBackend() + .removeRecipes(toDel); + electrolyzerRecipes.getBackend() + .reInit(); + } +} diff --git a/src/main/java/gtnhlanth/loader/MTELoader.java b/src/main/java/gtnhlanth/loader/MTELoader.java new file mode 100644 index 0000000000..9a2a4e944d --- /dev/null +++ b/src/main/java/gtnhlanth/loader/MTELoader.java @@ -0,0 +1,4 @@ +package gtnhlanth.loader; + +public class MTELoader { +} diff --git a/src/main/java/gtnhlanth/loader/RecipeLoader.java b/src/main/java/gtnhlanth/loader/RecipeLoader.java new file mode 100644 index 0000000000..534c4ca2f8 --- /dev/null +++ b/src/main/java/gtnhlanth/loader/RecipeLoader.java @@ -0,0 +1,4503 @@ +package gtnhlanth.loader; + +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.enums.Mods.PamsHarvestCraft; +import static gregtech.api.enums.OrePrefixes.blockCasingAdvanced; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.recipe.RecipeMaps.autoclaveRecipes; +import static gregtech.api.recipe.RecipeMaps.blastFurnaceRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeNonCellRecipes; +import static gregtech.api.recipe.RecipeMaps.centrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalBathRecipes; +import static gregtech.api.recipe.RecipeMaps.chemicalReactorRecipes; +import static gregtech.api.recipe.RecipeMaps.crackingRecipes; +import static gregtech.api.recipe.RecipeMaps.distillationTowerRecipes; +import static gregtech.api.recipe.RecipeMaps.electroMagneticSeparatorRecipes; +import static gregtech.api.recipe.RecipeMaps.electrolyzerNonCellRecipes; +import static gregtech.api.recipe.RecipeMaps.electrolyzerRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidExtractionRecipes; +import static gregtech.api.recipe.RecipeMaps.fluidSolidifierRecipes; +import static gregtech.api.recipe.RecipeMaps.hammerRecipes; +import static gregtech.api.recipe.RecipeMaps.laserEngraverRecipes; +import static gregtech.api.recipe.RecipeMaps.maceratorRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerNonCellRecipes; +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.recipe.RecipeMaps.multiblockChemicalReactorRecipes; +import static gregtech.api.recipe.RecipeMaps.oreWasherRecipes; +import static gregtech.api.recipe.RecipeMaps.sifterRecipes; +import static gregtech.api.recipe.RecipeMaps.thermalCentrifugeRecipes; +import static gregtech.api.recipe.RecipeMaps.vacuumFreezerRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.AssemblyLine; +import static gregtech.api.util.GTRecipeConstants.COIL_HEAT; +import static gregtech.api.util.GTRecipeConstants.DISSOLUTION_TANK_RATIO; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; +import static gregtech.api.util.GTRecipeConstants.WaferEngravingRecipes; +import static gregtech.common.items.MetaGeneratedItem01.registerCauldronCleaningFor; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.simpleWasherRecipes; +import static gtPlusPlus.api.recipe.GTPPRecipeMaps.vacuumFurnaceRecipes; +import static gtnhlanth.api.recipe.LanthanidesRecipeMaps.digesterRecipes; +import static gtnhlanth.api.recipe.LanthanidesRecipeMaps.dissolutionTankRecipes; +import static gtnhlanth.common.register.WerkstoffMaterialPool.CeriumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.CeriumDioxide; +import static gtnhlanth.common.register.WerkstoffMaterialPool.CeriumDopedLutetiumAluminiumGarnet; +import static gtnhlanth.common.register.WerkstoffMaterialPool.CeriumDopedLutetiumAluminiumOxygenBlend; +import static gtnhlanth.common.register.WerkstoffMaterialPool.CeriumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.CeriumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.ChlorinatedRareEarthConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.ChlorinatedRareEarthDilutedSolution; +import static gtnhlanth.common.register.WerkstoffMaterialPool.ChlorinatedRareEarthEnrichedSolution; +import static gtnhlanth.common.register.WerkstoffMaterialPool.DephosphatedSamariumConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.DilutedSamariumRareEarthSolution; +import static gtnhlanth.common.register.WerkstoffMaterialPool.DysprosiumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.DysprosiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.DysprosiumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.ErbiumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.ErbiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.ErbiumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.EuropiumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.EuropiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.EuropiumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledCeriumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledDysprosiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledErbiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledEuropiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledGadoliniumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledHolmiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledLanthanumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledLutetiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledNeodymiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledPraseodymiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledPromethiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledSamariumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledTerbiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledThuliumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.FilledYtterbiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.GadoliniumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.GadoliniumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.GadoliniumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.Gangue; +import static gtnhlanth.common.register.WerkstoffMaterialPool.HolmiumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.HolmiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.HolmiumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.ImpureLanthanumChloride; +import static gtnhlanth.common.register.WerkstoffMaterialPool.LanthaniumChloride; +import static gtnhlanth.common.register.WerkstoffMaterialPool.LanthanumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.LanthanumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.LanthanumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.LutetiumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.LutetiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.LutetiumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.MuddySamariumRareEarthSolution; +import static gtnhlanth.common.register.WerkstoffMaterialPool.NeodymicRareEarthConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.NeodymiumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.NeodymiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.NeodymiumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.PraseodymiumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.PraseodymiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.PraseodymiumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.PromethiumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.PromethiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.PromethiumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.RarestEarthResidue; +import static gtnhlanth.common.register.WerkstoffMaterialPool.SamariumChloride; +import static gtnhlanth.common.register.WerkstoffMaterialPool.SamariumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.SamariumChlorideSodiumChlorideBlend; +import static gtnhlanth.common.register.WerkstoffMaterialPool.SamariumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.SamariumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.SamariumOxalate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.SamariumOxide; +import static gtnhlanth.common.register.WerkstoffMaterialPool.SamariumRareEarthMud; +import static gtnhlanth.common.register.WerkstoffMaterialPool.TerbiumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.TerbiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.TerbiumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.ThoriumPhosphateConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.ThuliumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.ThuliumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.ThuliumOreConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.YtterbiumChlorideConcentrate; +import static gtnhlanth.common.register.WerkstoffMaterialPool.YtterbiumExtractingNanoResin; +import static gtnhlanth.common.register.WerkstoffMaterialPool.YtterbiumOreConcentrate; + +import java.util.HashSet; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import bartworks.system.material.BWGTMaterialReference; +import bartworks.system.material.WerkstoffLoader; +import bartworks.system.material.gtenhancement.PlatinumSludgeOverHaul; +import cpw.mods.fml.common.registry.GameRegistry; +import goodgenerator.items.GGMaterial; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IRecipeMutableAccess; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipeBuilder; +import gregtech.api.util.GTRecipeConstants; +import gregtech.api.util.GTUtility; +import gtnhlanth.Tags; +import gtnhlanth.common.item.MaskList; +import gtnhlanth.common.register.BotWerkstoffMaterialPool; +import gtnhlanth.common.register.LanthItemList; +import gtnhlanth.common.register.WerkstoffMaterialPool; +import ic2.core.Ic2Items; + +public class RecipeLoader { + + public static void loadAccelerator() { + + /* Actual Beamline Multiblocks */ + + // SC + GTValues.RA.stdBuilder() + .fluidInputs(Materials.SolderingAlloy.getMolten(288)) + .itemInputs( + ItemList.Hull_LuV.get(1), + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 8), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 4), + ItemList.Conveyor_Module_LuV.get(4), + GTUtility.copyAmount(2, LanthItemList.BEAMLINE_PIPE), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.VanadiumGallium, 2), + GTUtility.getIntegratedCircuit(16) + + ) + .itemOutputs(LanthItemList.SOURCE_CHAMBER) + .duration(30 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + // LINAC + GTValues.RA.stdBuilder() + .fluidInputs(Materials.SolderingAlloy.getMolten(288)) + .itemInputs( + ItemList.Hull_LuV.get(1), + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 8), + ItemList.Casing_Coil_Superconductor.get(2), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 8), + ItemList.Electric_Pump_LuV.get(2), + GTUtility.copyAmount(2, LanthItemList.BEAMLINE_PIPE), + GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.VanadiumGallium, 2), + GTUtility.getIntegratedCircuit(16) + + ) + .itemOutputs(LanthItemList.LINAC) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + // TC + GTValues.RA.stdBuilder() + .fluidInputs(Materials.SolderingAlloy.getMolten(288)) + .itemInputs( + ItemList.Hull_LuV.get(1), + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 8), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Lead, 4), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 4), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UV, 2), + GTUtility.copyAmount(2, LanthItemList.BEAMLINE_PIPE), + GTOreDictUnificator.get(OrePrefixes.cableGt02, Materials.VanadiumGallium, 1), + GTUtility.getIntegratedCircuit(16) + + ) + .itemOutputs(LanthItemList.TARGET_CHAMBER) + .duration(30 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + // Synchrotron + GTValues.RA.stdBuilder() + .fluidInputs(Materials.SolderingAlloy.getMolten(6000)) + .itemInputs( + ItemList.Hull_LuV.get(1), + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 8), + ItemList.Casing_Coil_Superconductor.get(12), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 8), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UV, 8), + GTUtility.copyAmount(8, LanthItemList.BEAMLINE_PIPE), + GTOreDictUnificator.get(OrePrefixes.cableGt08, Materials.NiobiumTitanium, 8), + GTUtility.getIntegratedCircuit(16)) + .itemOutputs(LanthItemList.SYNCHROTRON) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + /* + * //Permalloy GT_Values.RA.addMixerRecipe( GT_Utility.getIntegratedCircuit(4), Materials.Nickel.getDust(4), + * Materials.Iron.getDust(1), Materials.Molybdenum.getDust(1), null, null, + * WerkstoffMaterialPool.Permalloy.get(OrePrefixes.dust, 6), 1920, 200 ); + */ + // Mu-metal + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(2), + WerkstoffMaterialPool.Permalloy.get(OrePrefixes.dust, 9), + Materials.Copper.getDust(1), + Materials.Chrome.getDust(1)) + .itemOutputs(WerkstoffMaterialPool.MuMetal.get(OrePrefixes.ingot, 11)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .specialValue(4500) + .addTo(blastFurnaceRecipes); + + // Shielded Accelerator Casing -- Maybe assline recipe + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Casing_RadiationProof.get(1L), + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 6), + GTUtility.getIntegratedCircuit(6)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .itemOutputs(new ItemStack(LanthItemList.SHIELDED_ACCELERATOR_CASING, 1)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + // Accelerator Electrode Casing + GTValues.RA.stdBuilder() + .itemInputs( + BWGTMaterialReference.Silver.get(blockCasingAdvanced, 1), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.Silver, 12), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Gold, 6), + GTUtility.getIntegratedCircuit(6)) + .fluidInputs(Materials.SolderingAlloy.getMolten(288)) + .itemOutputs(new ItemStack(LanthItemList.ELECTRODE_CASING, 1)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + ItemStack insulator = GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorSheet", 1); + + // Coolant Delivery Casing + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1), + Materials.Copper.getPlates(6), + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Naquadah, 2), + ItemList.Electric_Pump_LuV.get(3L), + new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 1), + new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 1), + new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 1), + GTUtility.copyAmount(2, insulator), + GTUtility.copyAmount(2, insulator), + GTUtility.copyAmount(2, insulator), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tungsten, 1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(288), Materials.Lubricant.getFluid(1152)) + .itemOutputs(new ItemStack(LanthItemList.COOLANT_DELIVERY_CASING)) + .metadata(GTRecipeConstants.RESEARCH_ITEM, ItemList.Casing_Pipe_TungstenSteel.get(1L)) + .metadata(GTRecipeConstants.RESEARCH_TIME, 72000) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(AssemblyLine); + + // T1 Antenna Casing + GTValues.RA.stdBuilder() + .fluidInputs( + Materials.SolderingAlloy.getMolten(6000), + Materials.Gold.getMolten(4000), + WerkstoffLoader.Xenon.getFluidOrGas(2000)) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Tungsten, 1), + Materials.Copper.getPlates(4), + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plate, 5), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorLuV, 4), + new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 4 }, + ItemList.Emitter_LuV.get(6), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 32), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Electrum, 6)) + .itemOutputs(new ItemStack(LanthItemList.ANTENNA_CASING_T1)) + + .metadata(GTRecipeConstants.RESEARCH_ITEM, Materials.Niobium.getBlocks(1)) + .metadata(GTRecipeConstants.RESEARCH_TIME, 30 * GTRecipeBuilder.MINUTES) + + .duration(30 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(AssemblyLine); + + // T2 Antenna Casing + GTValues.RA.stdBuilder() + .fluidInputs( + Materials.SolderingAlloy.getMolten(12000), + Materials.Gold.getMolten(6000), + WerkstoffLoader.Xenon.getFluidOrGas(2000)) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenCarbide, 1), + Materials.Copper.getPlates(4), + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plate, 5), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorZPM, 4), + new Object[] { OrePrefixes.circuit.get(Materials.UV), 4 }, + ItemList.Emitter_ZPM.get(6), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 64), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Electrum, 6)) + .itemOutputs(new ItemStack(LanthItemList.ANTENNA_CASING_T2)) + .metadata(GTRecipeConstants.RESEARCH_ITEM, new ItemStack(LanthItemList.ANTENNA_CASING_T1)) + .metadata(GTRecipeConstants.RESEARCH_TIME, 40 * GTRecipeBuilder.MINUTES) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(AssemblyLine); + + // Niobium Cavity Casing + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Niobium, 1), + Materials.Niobium.getPlates(6)) + .fluidInputs(Materials.Helium.getGas(2000)) + .itemOutputs(new ItemStack(LanthItemList.NIOBIUM_CAVITY_CASING, 1)) + .duration(12 * GTRecipeBuilder.SECONDS) + .eut(7680) + .addTo(assemblerRecipes); + + // Focus Manipulator + GTValues.RA.stdBuilder() + .fluidInputs( + Materials.SolderingAlloy.getMolten(8000), + Materials.Gold.getMolten(2000), + Materials.Argon.getGas(1000)) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1), + + new Object[] { OrePrefixes.circuit.get(Materials.IV), 4 }, + ItemList.Robot_Arm_LuV.get(2), + ItemList.Robot_Arm_LuV.get(2), + ItemList.Conveyor_Module_LuV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tungsten, 2)) + .itemOutputs(new ItemStack(LanthItemList.FOCUS_MANIPULATION_CASING)) + .metadata(GTRecipeConstants.RESEARCH_ITEM, new ItemStack(LanthItemList.maskMap.get(MaskList.BLANK1))) + .metadata(GTRecipeConstants.RESEARCH_TIME, 20 * GTRecipeBuilder.MINUTES) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(AssemblyLine); + + // Target Holder + GameRegistry.addShapedRecipe( + new ItemStack(LanthItemList.TARGET_HOLDER), + new Object[] { "MCM", "MHM", "MCM", 'M', WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 1), 'H', + ItemList.Hull_LuV.get(1), 'C', ItemList.Conveyor_Module_LuV.get(1) }); + + GameRegistry.addShapedRecipe( + + new ItemStack(LanthItemList.FOCUS_HOLDER), + new Object[] { "MCM", "R R", "MHM", 'M', WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 1), 'C', + ItemList.Conveyor_Module_LuV.get(1), 'R', ItemList.Robot_Arm_LuV.get(1), 'H', + ItemList.Hull_LuV.get(1) }); + + // Focus Input Bus + GameRegistry.addShapedRecipe( + LanthItemList.BEAMLINE_FOCUS_INPUT_BUS, + "MCM", + "McM", + "RCR", + 'M', + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plateDense, 1), + 'C', + ItemList.Conveyor_Module_HV.get(1), + 'R', + ItemList.Robot_Arm_HV.get(1), + 'c', + new ItemStack(Blocks.chest, 1, 32767)); + + // Target Receptacle, same thing as Focus Manipulator basically + GTValues.RA.stdBuilder() + .fluidInputs( + Materials.SolderingAlloy.getMolten(8000), + Materials.Gold.getMolten(2000), + Materials.Argon.getGas(1000)) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1), + new Object[] { OrePrefixes.circuit.get(Materials.IV), 4 }, + ItemList.Robot_Arm_LuV.get(2), + ItemList.Robot_Arm_LuV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Tungsten, 2)) + .itemOutputs(new ItemStack(LanthItemList.TARGET_RECEPTACLE_CASING)) + .metadata(GTRecipeConstants.RESEARCH_ITEM, ItemList.Circuit_Silicon_Wafer.get(1)) + .metadata(GTRecipeConstants.RESEARCH_TIME, 20 * GTRecipeBuilder.MINUTES) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(AssemblyLine); + + // Capillary Exchange + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.TungstenSteel, 8), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Copper, 2), + Materials.Titanium.getPlates(6), + GTUtility.copyAmount(4, insulator), + ItemList.Electric_Pump_LuV.get(1), + Materials.Silver.getDust(2)) + .fluidInputs(Materials.Silicone.getMolten(288L)) + .itemOutputs(new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + + // Mu-metal lattice + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.wireFine, 12), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.TungstenSteel, 4)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .itemOutputs(new ItemStack(LanthItemList.MM_LATTICE, 1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + // Shielded Accelerator Glass + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(LanthItemList.MM_LATTICE, 4)) + .fluidInputs(Materials.BorosilicateGlass.getMolten(144)) + .itemOutputs(new ItemStack(LanthItemList.SHIELDED_ACCELERATOR_GLASS, 1)) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(fluidSolidifierRecipes); + + // Beamline Pipe + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plate, 4), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenCarbide, 4), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.TungstenCarbide, 8), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Osmiridium, 4), + GTUtility.getIntegratedCircuit(7)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .itemOutputs(LanthItemList.BEAMLINE_PIPE) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + + // Beamline Input Hatch + GTValues.RA.stdBuilder() + .fluidInputs( + Materials.SolderingAlloy.getMolten(6000), + Materials.Argon.getGas(1000), + Materials.Helium.getGas(2000) + + ) + .itemInputs( + ItemList.Hull_LuV.get(1), + new Object[] { OrePrefixes.circuit.get(Materials.LuV), 2 }, + new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 2), + ItemList.Electric_Pump_LuV.get(1), + LanthItemList.BEAMLINE_PIPE, + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plate, 4) + + ) + .itemOutputs(LanthItemList.LUV_BEAMLINE_INPUT_HATCH) + .metadata(GTRecipeConstants.RESEARCH_ITEM, ItemList.Hatch_Input_LuV.get(1)) + .metadata(GTRecipeConstants.RESEARCH_TIME, 30 * GTRecipeBuilder.MINUTES) + .duration(2 * GTRecipeBuilder.MINUTES) + .eut(TierEU.RECIPE_LuV) + .addTo(AssemblyLine); + + // Beamline Output Hatch + GTValues.RA.stdBuilder() + .fluidInputs( + Materials.SolderingAlloy.getMolten(8000), + Materials.Argon.getGas(1000), + Materials.Helium.getGas(6000) + + ) + .itemInputs( + ItemList.Hull_LuV.get(1), + new Object[] { OrePrefixes.circuit.get(Materials.LuV), 6 }, + new ItemStack(LanthItemList.CAPILLARY_EXCHANGE, 4), + ItemList.Electric_Pump_LuV.get(2), + ItemList.Electric_Motor_LuV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 8), + LanthItemList.BEAMLINE_PIPE, + WerkstoffMaterialPool.MuMetal.get(OrePrefixes.plate, 8) + + ) + .itemOutputs(LanthItemList.LUV_BEAMLINE_OUTPUT_HATCH) + .metadata(GTRecipeConstants.RESEARCH_ITEM, ItemList.Hatch_Output_LuV.get(1)) + .metadata(GTRecipeConstants.RESEARCH_TIME, 40 * GTRecipeBuilder.MINUTES) + .duration(4 * GTRecipeBuilder.MINUTES) + .eut(TierEU.RECIPE_LuV) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Chloroform.getFluid(1000), Materials.HydrofluoricAcid.getFluid(3000)) + .fluidOutputs( + WerkstoffMaterialPool.Fluoroform.getFluidOrGas(1000), + Materials.HydrochloricAcid.getFluid(3000)) + .duration(15 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(multiblockChemicalReactorRecipes); + + /* + * GT_Values.RA.stdBuilder() + * .fluidInputs(Materials.Nitrogen.getPlasma(4000), Materials.Silane.getFluid(2000)) + * .fluidOutputs(WerkstoffMaterialPool.NitrogenPlasmaSilaneMix.getFluidOrGas(6000)) + * .duration(20 * GTRecipeBuilder.SECONDS) + * .eut(7680) + * .addTo(mixerNonCellRecipes); + */ + + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Nitrogen.getPlasma(4000)) + .itemInputs(Materials.Silane.getCells(2)) + .fluidOutputs(WerkstoffMaterialPool.NitrogenPlasmaSilaneMix.getFluidOrGas(6000)) + .duration(20 * GTRecipeBuilder.SECONDS) + .eut(7680) + .noOptimize() + .addTo(mixerRecipes); + + // NB: http://www.smfl.rit.edu/pdf/process/process_nitride_etch_paper.pdf + // Reactive Ion Etchant + GTValues.RA.stdBuilder() + .fluidInputs(WerkstoffMaterialPool.Fluoroform.getFluidOrGas(3000)) + .itemInputs(Materials.Oxygen.getCells(4)) + .fluidOutputs(WerkstoffMaterialPool.FluoroformOxygenMix.getFluidOrGas(5000)) + .itemOutputs(Materials.Empty.getCells(4)) + .duration(15 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Iron.getDust(2), Materials.NetherQuartz.getPlates(1)) + .itemOutputs(new ItemStack(LanthItemList.IRON_COATED_QUARTZ)) + .duration(10 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + + // Masks + // Quartz + Fe2O3 T1 + // " + Cr T2 + // + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(LanthItemList.IRON_COATED_QUARTZ)) + .fluidInputs(Materials.Oxygen.getGas(1000)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.BLANK1))) + .outputChances(10000) + .requiresCleanRoom() + .duration(144 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(autoclaveRecipes); + + /* + * Unsure what was intended with this recipe? + * GT_Values.RA.stdBuilder() + * .itemInputs(new ItemStack(LanthItemList.IRON_COATED_QUARTZ), Materials.Chrome.getDust(1)) + * .fluidInputs(Materials.Oxygen.getGas(1000)) + * .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.BLANK2))) + * .outputChances(10000).requiresCleanRoom().duration(12 * SECONDS).eut(7980).addTo(autoclaveRecipes); + */ + + // Grow the first silicon + GTValues.RA.stdBuilder() + .itemInputs(Materials.Glass.getPlates(1)) + .fluidInputs(Materials.Silane.getGas(4000)) + .itemOutputs(new ItemStack(LanthItemList.SUBSTRATE_PRECURSOR)) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_LuV) + .requiresCleanRoom() + .addTo(autoclaveRecipes); + + // Now to deposit nitride + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(LanthItemList.SUBSTRATE_PRECURSOR)) + .fluidInputs(WerkstoffMaterialPool.NitrogenPlasmaSilaneMix.getFluidOrGas(4000)) + .fluidOutputs(Materials.Nitrogen.getGas(3000)) + .itemOutputs(new ItemStack(LanthItemList.MASK_SUBSTRATE), Materials.Empty.getCells(2)) + .duration(30 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_LuV) + .specialValue(3200) + .requiresCleanRoom() + .addTo(blastFurnaceRecipes); + + /* + * GT_Values.RA.stdBuilder().itemInputs(GTOreDictUnificator.get(OrePrefixes.foil, Materials.Silicon, 1)) + * .fluidInputs(Materials.SiliconTetrachloride.getFluid(3000), Materials.Ammonia.getFluid(4000)) + * .fluidOutputs(Materials.HydrochloricAcid.getFluid(12000)) + * .itemOutputs(WerkstoffMaterialPool.SiliconNitride.get(OrePrefixes.plate)) .duration(GTRecipeBuilder.SECONDS + * * 30) .eut(TierEU.EV) .addTo(GTRecipe.GTRecipe_Map.sPlasmaArcFurnaceRecipes); + */ + + for (ItemStack lens : OreDictionary.getOres("craftingLensYellow")) { + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.copyAmount(0, lens), new ItemStack(LanthItemList.MASK_SUBSTRATE)) + .itemOutputs(new ItemStack(LanthItemList.MASKED_MASK)) + .duration(30 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_IV) + .requiresCleanRoom() + .addTo(WaferEngravingRecipes); + + } + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(LanthItemList.MASKED_MASK)) + .fluidInputs(WerkstoffMaterialPool.FluoroformOxygenMix.getFluidOrGas(4000)) + .itemOutputs(new ItemStack(LanthItemList.ETCHED_MASK_1)) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_LuV) + .requiresCleanRoom() + .addTo(autoclaveRecipes); + + // Etch pt. 2 with LiCl + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Argon.getGas(1000)) + .itemInputs( + new ItemStack(LanthItemList.MASKED_MASK), + GGMaterial.lithiumChloride.get(OrePrefixes.dust, 2), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PotassiumHydroxideDust", 4)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.BLANK2))) + .duration(80 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_ZPM) + .specialValue(2400) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(LanthItemList.ETCHED_MASK_1), + Materials.Sodium.getDust(1), + Materials.Chrome.getPlates(1), + Materials.Gold.getPlates(2)) + .fluidInputs(Materials.Hydrogen.getGas(1000)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.BLANK3))) + .duration(2 * GTRecipeBuilder.MINUTES) + .eut(TierEU.RECIPE_ZPM) + .specialValue(3600) + .addTo(blastFurnaceRecipes); + + for (MaskList mask : MaskList.values()) { + + MaskList maskIngredient = mask.getPrecursor(); + Dyes lensColour = mask.getLensColour(); + + if (maskIngredient == null) continue; + + if (mask.getLensColour() == null) { // CR Recipe + + if (mask == MaskList.PPIC) { + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(LanthItemList.maskMap.get(MaskList.NPIC)), + Materials.IndiumGalliumPhosphide.getDust(64)) + .fluidInputs(Materials.Sunnarium.getMolten(1440L)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.PPIC))) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(mask.getEngraverEUt()) + .requiresCleanRoom() + .addTo(UniversalChemical); // This is incredibly boring and doesn't make much sense, fix at some + // point. Maybe engrave again from precursor? + + } else if (mask == MaskList.HPIC) { + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(LanthItemList.maskMap.get(MaskList.PIC)), + Materials.IndiumGalliumPhosphide.getDust(2)) + .fluidInputs(Materials.VanadiumGallium.getMolten(288L)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.HPIC))) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(mask.getEngraverEUt()) + .requiresCleanRoom() + .addTo(UniversalChemical); + + } else if (mask == MaskList.UHPIC) { + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(LanthItemList.maskMap.get(MaskList.HPIC)), + Materials.IndiumGalliumPhosphide.getDust(8)) + .fluidInputs(Materials.Naquadah.getMolten(576L)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.UHPIC))) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(mask.getEngraverEUt()) + .requiresCleanRoom() + .addTo(UniversalChemical); + + } else if (mask == MaskList.NCPU) { + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(LanthItemList.maskMap.get(MaskList.CPU)), + GTUtility.copyAmount(16, Ic2Items.carbonFiber)) + .fluidInputs(Materials.Glowstone.getMolten(576L)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.NCPU))) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(mask.getEngraverEUt()) + .requiresCleanRoom() + .addTo(UniversalChemical); + + } else if (mask == MaskList.QBIT) { + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(LanthItemList.maskMap.get(MaskList.NCPU)), + Materials.IndiumGalliumPhosphide.getDust(1)) + .fluidInputs(Materials.Radon.getGas(50L)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.QBIT))) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(mask.getEngraverEUt()) + .requiresCleanRoom() + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(LanthItemList.maskMap.get(MaskList.NCPU)), ItemList.QuantumEye.get(2)) + .fluidInputs(Materials.GalliumArsenide.getMolten(288L)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(MaskList.QBIT))) + .duration(45 * GTRecipeBuilder.SECONDS) + .eut(mask.getEngraverEUt()) + .requiresCleanRoom() + .addTo(UniversalChemical); + + } + + continue; + + } + + if (mask == MaskList.NAND) { + + // Very copy-paste heavy, could possibly offload most of this into one case and just assign an + // otherIngredient variable or something, wouldn't save much space though. Plus: lazy + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(LanthItemList.maskMap.get(maskIngredient)), + GTUtility.copyAmount(0, GTOreDictUnificator.get(OrePrefixes.lens, Materials.EnderPearl, 1))) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(mask))) + .requiresCleanRoom() + .duration(120 * SECONDS) + .eut(mask.getEngraverEUt()) + .addTo(WaferEngravingRecipes); + + } else if (mask == MaskList.NOR) { + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(LanthItemList.maskMap.get(maskIngredient)), + GTUtility.copyAmount(0, GTOreDictUnificator.get(OrePrefixes.lens, Materials.EnderEye, 1))) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(mask))) + .requiresCleanRoom() + .duration(120 * SECONDS) + .eut(mask.getEngraverEUt()) + .addTo(WaferEngravingRecipes); + + } + + else { + + for (ItemStack lens : OreDictionary.getOres("craftingLens" + lensColour.mName.replace(" ", ""))) { + + if (lens == null) continue; + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(LanthItemList.maskMap.get(maskIngredient)), + GTUtility.copyAmount(0, lens)) + .itemOutputs(new ItemStack(LanthItemList.maskMap.get(mask))) + .requiresCleanRoom() + .duration(120 * SECONDS) + .eut(mask.getEngraverEUt()) + .addTo(WaferEngravingRecipes); + + } + } + } + + } + + public static void loadGeneral() { + + /* ZIRCONIUM */ + // ZrCl4 + // ZrO2 + 4HCl = ZrCl4 + 2H2O + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1), WerkstoffMaterialPool.Zirconia.get(OrePrefixes.dust, 3)) + .itemOutputs(WerkstoffMaterialPool.ZirconiumTetrachloride.get(OrePrefixes.dust, 5)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(4000)) + .fluidOutputs(Materials.Water.getFluid(2000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // ZrCl4-H2O + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(1), + WerkstoffMaterialPool.ZirconiumTetrachloride.get(OrePrefixes.dust, 5)) + .fluidInputs(Materials.Water.getFluid(1000)) + .fluidOutputs(WerkstoffMaterialPool.ZirconiumTetrachlorideSolution.getFluidOrGas(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Zr + // ZrCl4·H2O + 2Mg = Zr + 2MgCl2 + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(2), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2)) + .itemOutputs( + WerkstoffMaterialPool.Zirconium.get(OrePrefixes.ingotHot, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesiumchloride, 6)) + .fluidInputs(WerkstoffMaterialPool.ZirconiumTetrachlorideSolution.getFluidOrGas(1000)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_EV) + .metadata(COIL_HEAT, 4500) + .addTo(blastFurnaceRecipes); + + /* HAFNIUM */ + // HfCl4 + // HfO2 + 4HCl = HfCl4 + 2H2O + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1), WerkstoffMaterialPool.Hafnia.get(OrePrefixes.dust, 3)) + .itemOutputs(WerkstoffMaterialPool.HafniumTetrachloride.get(OrePrefixes.dust, 5)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(4000)) + .fluidOutputs(Materials.Water.getFluid(2000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // HfCl4-H2O + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(1), + WerkstoffMaterialPool.HafniumTetrachloride.get(OrePrefixes.dust, 5)) + .fluidInputs(Materials.Water.getFluid(1000)) + .fluidOutputs(WerkstoffMaterialPool.HafniumTetrachlorideSolution.getFluidOrGas(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // LP-Hf + // HfCl4 + 2Mg = ??Hf?? + 2MgCl2 + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(2), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesium, 2)) + .itemOutputs( + WerkstoffMaterialPool.LowPurityHafnium.get(OrePrefixes.dust, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Magnesiumchloride, 6)) + .fluidInputs(WerkstoffMaterialPool.HafniumTetrachlorideSolution.getFluidOrGas(1000)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_EV) + .metadata(COIL_HEAT, 2700) + .addTo(blastFurnaceRecipes); + + // HfI4 + // ??Hf?? + 4I = HfI4 + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(1), + WerkstoffMaterialPool.LowPurityHafnium.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.HafniumIodide.get(OrePrefixes.dust, 5)) + .fluidInputs(WerkstoffMaterialPool.Iodine.getFluidOrGas(4000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.LowPurityHafnium.get(OrePrefixes.dust, 1), + WerkstoffMaterialPool.Iodine.get(OrePrefixes.dust, 4)) + .itemOutputs(WerkstoffMaterialPool.HafniumIodide.get(OrePrefixes.dust, 5)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Hf + // HfI4 = Hf + 4I + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(12), + WerkstoffMaterialPool.HafniumIodide.get(OrePrefixes.dust, 5)) + .itemOutputs( + WerkstoffMaterialPool.Hafnium.get(OrePrefixes.ingotHot, 1), + WerkstoffMaterialPool.HafniumRunoff.get(OrePrefixes.dustTiny, 1)) + .fluidOutputs(WerkstoffMaterialPool.Iodine.getFluidOrGas(4000)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 3400) + .addTo(blastFurnaceRecipes); + + // Hf * 9 + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(13), + WerkstoffMaterialPool.HafniumIodide.get(OrePrefixes.dust, 45)) + .itemOutputs( + WerkstoffMaterialPool.Hafnium.get(OrePrefixes.ingotHot, 9), + WerkstoffMaterialPool.HafniumRunoff.get(OrePrefixes.dust, 1)) + .fluidOutputs(WerkstoffMaterialPool.Iodine.getFluidOrGas(36000)) + .duration(4 * MINUTES + 30 * TICKS) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 3400) + .addTo(blastFurnaceRecipes); + + // Zirconia-Hafnia + // ??HfZr?? = HfO2 + ZrO2 + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.HafniaZirconiaBlend.get(OrePrefixes.dust, 1)) + .itemOutputs( + WerkstoffMaterialPool.Hafnia.get(OrePrefixes.dust, 3), + WerkstoffMaterialPool.Zirconia.get(OrePrefixes.dust, 3)) + .eut(TierEU.RECIPE_EV) + .duration(30 * SECONDS) + .addTo(centrifugeRecipes); + + // Ammonium Nitrate + // HNO3 + NH3 = NH4NO3 + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(12), Materials.NitricAcid.getCells(1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(Materials.Ammonia.getGas(1000)) + .fluidOutputs(WerkstoffMaterialPool.AmmoniumNitrate.getFluidOrGas(1000)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(400) + .addTo(chemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(12)) + .fluidInputs(Materials.NitricAcid.getFluid(1000), Materials.Ammonia.getGas(1000)) + .fluidOutputs(WerkstoffMaterialPool.AmmoniumNitrate.getFluidOrGas(1000)) + .duration(1 * SECONDS + 10 * TICKS) + .eut(400) + .addTo(multiblockChemicalReactorRecipes); + + // IODINE-START + // SeaweedAsh + GTModHandler.addSmeltingRecipe( + GTModHandler.getModItem(PamsHarvestCraft.ID, "seaweedItem", 1), + WerkstoffMaterialPool.SeaweedAsh.get(OrePrefixes.dustSmall, 1)); + + // SeaweedConcentrate + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.SeaweedAsh.get(OrePrefixes.dust, 2)) + .itemOutputs(Materials.Calcite.getDust(1)) + .fluidInputs(Materials.DilutedSulfuricAcid.getFluid(1200)) + .fluidOutputs(WerkstoffMaterialPool.SeaweedConcentrate.getFluidOrGas(1200)) + .duration(30 * SECONDS) + .eut(240) + .addTo(mixerRecipes); + // SeaweedConcentrate * 4 + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.SeaweedAsh.get(OrePrefixes.dust, 4)) + .itemOutputs(Materials.Calcite.getDust(2)) + .fluidInputs(Materials.DilutedSulfuricAcid.getFluid(2400)) + .fluidOutputs(WerkstoffMaterialPool.SeaweedConcentrate.getFluidOrGas(2400)) + .duration(60 * SECONDS) + .eut(240) + .addTo(mixerRecipes); + + // Iodine + GTValues.RA.stdBuilder() + .itemInputs(Materials.Benzene.getCells(1)) + .fluidInputs(WerkstoffMaterialPool.SeaweedConcentrate.getFluidOrGas(2000)) + .fluidOutputs(WerkstoffMaterialPool.SeaweedByproducts.getFluidOrGas(200)) + .eut(TierEU.RECIPE_HV) + .duration(38 * SECONDS) + .addTo(centrifugeRecipes); + + // IODINE-END + + // 2MnO2 + 2KOH + KClO3 = 2KMnO4 + H2O + KCl + GTValues.RA.stdBuilder() + .itemInputs( + Materials.Pyrolusite.getDust(6), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PotassiumHydroxideDust", 6), + WerkstoffMaterialPool.PotassiumChlorate.get(OrePrefixes.dust, 5)) + .itemOutputs( + WerkstoffMaterialPool.PotassiumPermanganate.get(OrePrefixes.dust, 12), + Materials.RockSalt.getDust(2)) + .fluidOutputs(Materials.Water.getFluid(1000)) + .duration(7 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 1200) + .addTo(blastFurnaceRecipes); + + // Mn + 2O = MnO2 + GTValues.RA.stdBuilder() + .itemInputs(Materials.Manganese.getDust(1), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(Materials.Pyrolusite.getDust(3)) + .fluidInputs(Materials.Oxygen.getGas(2000)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // 6KOH + 6Cl = KClO3 + 5KCl + 3H2O + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PotassiumHydroxideDust", 18), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs( + Materials.RockSalt.getDust(10), + WerkstoffMaterialPool.PotassiumChlorate.get(OrePrefixes.dust, 5)) + .fluidInputs(Materials.Chlorine.getGas(6000)) + .fluidOutputs(Materials.Water.getFluid(3000)) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + // Sodium Fluorosilicate + // 2NaCl + H2SiF6 = 2HCl + Na2SiF6 + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2), Materials.Salt.getDust(4)) + .itemOutputs(Materials.HydrochloricAcid.getCells(2)) + .fluidInputs(WerkstoffLoader.HexafluorosilicicAcid.getFluidOrGas(1000)) + .fluidOutputs(WerkstoffMaterialPool.SodiumFluorosilicate.getFluidOrGas(1000)) + .duration(30 * SECONDS) + .eut(450) + .addTo(UniversalChemical); + + // La + 6HCl = LaCl3 + 3H + GTValues.RA.stdBuilder() + .itemInputs(Materials.Lanthanum.getDust(1), GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(3000)) + .itemOutputs(WerkstoffMaterialPool.LanthaniumChloride.get(OrePrefixes.dust, 4)) + .fluidOutputs(Materials.Hydrogen.getGas(3000)) + .duration(10 * SECONDS) + .eut(480) + .addTo(UniversalChemical); + + // Lanthanum Oxide + GTValues.RA.stdBuilder() + .fluidInputs(Materials.Water.getFluid(3000)) + .fluidOutputs(Materials.HydrochloricAcid.getFluid(6000)) + .itemInputs(WerkstoffMaterialPool.LanthaniumChloride.get(OrePrefixes.dust, 4)) + .itemOutputs(WerkstoffMaterialPool.LanthanumOxide.get(OrePrefixes.dust, 1)) + .duration(10 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + // Boron Trioxide + GTValues.RA.stdBuilder() + .fluidInputs(FluidRegistry.getFluidStack("boricacid", 2000)) + .fluidOutputs(new FluidStack(FluidRegistry.WATER, 3000)) + .itemOutputs(WerkstoffMaterialPool.BoronTrioxide.get(OrePrefixes.dust, 1)) + .duration(15 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(UniversalChemical); + + // Boron Trichloride + GTValues.RA.stdBuilder() + .fluidInputs(BotWerkstoffMaterialPool.Phosgene.getFluidOrGas(3000)) + .fluidOutputs(WerkstoffMaterialPool.BoronTrichloride.getFluidOrGas(2000)) + .itemInputs(WerkstoffMaterialPool.BoronTrioxide.get(OrePrefixes.dust, 1), Materials.Empty.getCells(3)) + .itemOutputs(Materials.CarbonMonoxide.getCells(3)) + .duration(10 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + // Lanthanum Hexaboride + GTValues.RA.stdBuilder() + .fluidInputs(WerkstoffMaterialPool.BoronTrichloride.getFluidOrGas(8000)) + .fluidOutputs(FluidRegistry.getFluidStack("boricacid", 1000)) + .itemInputs(WerkstoffMaterialPool.LanthanumOxide.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.LanthanumHexaboride.get(OrePrefixes.gemFlawless)) + .duration(60 * GTRecipeBuilder.SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(autoclaveRecipes); + } + + public static void loadLanthanideRecipes() { + // Methanol + // CH4O + CO + 3O =V2O5= H2C2O4 + H2O + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.vanadiumPentoxide.get(OrePrefixes.dustTiny, 1)) + .fluidInputs( + Materials.Methanol.getFluid(1000), + Materials.CarbonMonoxide.getGas(1000), + Materials.Oxygen.getGas(3000)) + .fluidOutputs(GGMaterial.oxalate.getFluidOrGas(1000), Materials.Water.getFluid(1000)) + .duration(22 * SECONDS + 10 * TICKS) + .eut(240) + .addTo(multiblockChemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(9), GGMaterial.vanadiumPentoxide.get(OrePrefixes.dust, 1)) + .fluidInputs( + Materials.Methanol.getFluid(9000), + Materials.CarbonMonoxide.getGas(9000), + Materials.Oxygen.getGas(27000)) + .fluidOutputs(GGMaterial.oxalate.getFluidOrGas(9000), Materials.Water.getFluid(9000)) + .duration(3 * MINUTES + 22 * SECONDS + 10 * TICKS) + .eut(240) + .addTo(multiblockChemicalReactorRecipes); + + // Ethanol + // C2H6O + 5O =V2O5= H2C2O4 + 2H2O + GTValues.RA.stdBuilder() + .itemInputs(GGMaterial.vanadiumPentoxide.get(OrePrefixes.dustTiny, 1)) + .itemOutputs() + .fluidInputs(Materials.Ethanol.getFluid(1000), Materials.Oxygen.getGas(5000)) + .fluidOutputs(GGMaterial.oxalate.getFluidOrGas(1000), Materials.Water.getFluid(2000)) + .duration(22 * SECONDS + 10 * TICKS) + .eut(240) + .addTo(multiblockChemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(9), GGMaterial.vanadiumPentoxide.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.Ethanol.getFluid(9000), Materials.Oxygen.getGas(45000)) + .fluidOutputs(GGMaterial.oxalate.getFluidOrGas(9000), Materials.Water.getFluid(18000)) + .duration(3 * MINUTES + 22 * SECONDS + 10 * TICKS) + .eut(240) + .addTo(multiblockChemicalReactorRecipes); + + // Cerium Oxalate + // 2CeCl3 + 3H2C2O4 = 6HCl + Ce2(C2O4)3 + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(1), + WerkstoffMaterialPool.CeriumChloride.get(OrePrefixes.dust, 8)) + .itemOutputs(WerkstoffMaterialPool.CeriumOxalate.get(OrePrefixes.dust, 5)) + .fluidInputs(GGMaterial.oxalate.getFluidOrGas(3000)) + .fluidOutputs(Materials.HydrochloricAcid.getFluid(6000)) + .duration(15 * SECONDS) + .eut(450) + .addTo(UniversalChemical); + + // Cerium + // Ce2O3 = 2Ce + 3O + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.CeriumIIIOxide.get(OrePrefixes.dust, 5)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cerium, 2)) + .fluidOutputs(Materials.Oxygen.getGas(3000)) + .duration(7 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(electrolyzerRecipes); + + // CHAIN BEGIN + // MONAZITE + GTValues.RA.stdBuilder() + .fluidInputs(Materials.NitricAcid.getFluid(700)) + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Monazite, 2)) + .fluidOutputs(WerkstoffMaterialPool.MuddyRareEarthMonaziteSolution.getFluidOrGas(400)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .eut(1920) + .duration(400) + .metadata(COIL_HEAT, 800) + .addTo(digesterRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs( + Materials.Water.getFluid(10000), + WerkstoffMaterialPool.MuddyRareEarthMonaziteSolution.getFluidOrGas(1000)) + .itemInputs(GTUtility.getIntegratedCircuit(1), Materials.Saltpeter.getDust(1)) + .fluidOutputs(WerkstoffMaterialPool.DilutedRareEarthMonaziteMud.getFluidOrGas(11000)) + .itemOutputs( + WerkstoffMaterialPool.HafniaZirconiaBlend.get(OrePrefixes.dustTiny, 4), + WerkstoffLoader.Thorianit.get(OrePrefixes.dust, 1), + Materials.Monazite.getDustTiny(2)) + .eut(TierEU.RECIPE_HV) + .duration(900) + .metadata(DISSOLUTION_TANK_RATIO, 10) + .noOptimize() + .addTo(dissolutionTankRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs( + Materials.Water.getFluid(90000), + WerkstoffMaterialPool.MuddyRareEarthMonaziteSolution.getFluidOrGas(9000)) + .itemInputs(GTUtility.getIntegratedCircuit(9), Materials.Saltpeter.getDust(9)) + .fluidOutputs(WerkstoffMaterialPool.DilutedRareEarthMonaziteMud.getFluidOrGas(99000)) + .itemOutputs( + WerkstoffMaterialPool.HafniaZirconiaBlend.get(OrePrefixes.dust, 4), + WerkstoffLoader.Thorianit.get(OrePrefixes.dust, 9), + Materials.Monazite.getDust(2)) + .eut(TierEU.RECIPE_HV) + .duration(8100) + .metadata(DISSOLUTION_TANK_RATIO, 10) + .noOptimize() + .addTo(dissolutionTankRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(WerkstoffMaterialPool.DilutedRareEarthMonaziteMud.getFluidOrGas(1000)) + .itemOutputs( + WerkstoffMaterialPool.MonaziteSulfate.get(OrePrefixes.dust, 1), + Materials.SiliconDioxide.getDust(1), + Materials.Rutile.getDust(1), + WerkstoffLoader.RedZircon.get(OrePrefixes.dust, 1), + Materials.Ilmenite.getDust(1)) + .outputChances(90_00, 75_00, 20_00, 5_00, 20_00) + .duration(20 * SECONDS) + .eut(240) + .noOptimize() + .addTo(sifterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.MonaziteSulfate.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.Water.getFluid(6000)) + .fluidOutputs(WerkstoffMaterialPool.DilutedMonaziteSulfate.getFluidOrGas(7000)) + .duration(24 * SECONDS) + .eut(400) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(13)) + .itemOutputs(WerkstoffMaterialPool.AcidicMonazitePowder.get(OrePrefixes.dustTiny, 3)) + .fluidInputs( + WerkstoffMaterialPool.DilutedMonaziteSulfate.getFluidOrGas(1000), + WerkstoffMaterialPool.AmmoniumNitrate.getFluidOrGas(200)) + .duration(24 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(multiblockChemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(14)) + .itemOutputs(WerkstoffMaterialPool.AcidicMonazitePowder.get(OrePrefixes.dust, 3)) + .fluidInputs( + WerkstoffMaterialPool.DilutedMonaziteSulfate.getFluidOrGas(9000), + WerkstoffMaterialPool.AmmoniumNitrate.getFluidOrGas(1800)) + .duration(3 * MINUTES + 36 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(multiblockChemicalReactorRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.AcidicMonazitePowder.get(OrePrefixes.dust, 1)) + .itemOutputs( + WerkstoffMaterialPool.MonaziteRareEarthFiltrate.get(OrePrefixes.dust, 1), + WerkstoffMaterialPool.ThoriumPhosphateCake.get(OrePrefixes.dust, 1)) + .outputChances(9000, 7000) + .duration(30 * SECONDS) + .eut(256) + .addTo(sifterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.ThoriumPhosphateCake.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.ThoriumPhosphateConcentrate.get(OrePrefixes.dust, 1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 1500) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.ThoriumPhosphateConcentrate.get(OrePrefixes.dust)) + .itemOutputs(Materials.Thorium.getDust(1), Materials.Phosphate.getDust(1)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(thermalCentrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.MonaziteRareEarthFiltrate.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.NeutralizedMonaziteRareEarthFiltrate.get(OrePrefixes.dust, 1)) + .fluidInputs(WerkstoffMaterialPool.AmmoniumNitrate.getFluidOrGas(320)) + .duration(6 * SECONDS) + .eut(240) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.NeutralizedMonaziteRareEarthFiltrate.get(OrePrefixes.dust, 1)) + .itemOutputs( + WerkstoffMaterialPool.MonaziteRareEarthHydroxideConcentrate.get(OrePrefixes.dust, 1), + WerkstoffMaterialPool.UraniumFiltrate.get(OrePrefixes.dust, 1), + WerkstoffMaterialPool.UraniumFiltrate.get(OrePrefixes.dust, 1)) + .outputChances(9000, 5000, 4000) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(sifterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.UraniumFiltrate.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.NeutralizedUraniumFiltrate.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.HydrofluoricAcid.getFluid(100)) + .duration(18 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.NeutralizedUraniumFiltrate.get(OrePrefixes.dust, 1)) + .itemOutputs( + Materials.Uranium.getDust(1), + Materials.Uranium.getDust(1), + Materials.Uranium.getDust(1), + Materials.Uranium235.getDust(1), + Materials.Uranium235.getDust(1)) + .outputChances(4500, 4000, 3000, 3000, 2000) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(sifterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.MonaziteRareEarthHydroxideConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.DriedMonaziteRareEarthConcentrate.get(OrePrefixes.dust, 1)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 1200) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.DriedMonaziteRareEarthConcentrate.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.NitricAcid.getFluid(500)) + .fluidOutputs(WerkstoffMaterialPool.NitratedRareEarthMonaziteConcentrate.getFluidOrGas(1000)) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Water.getCells(1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(WerkstoffMaterialPool.NitratedRareEarthMonaziteConcentrate.getFluidOrGas(1000)) + .fluidOutputs(WerkstoffMaterialPool.NitricLeachedMonaziteMixture.getFluidOrGas(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 3)) + .fluidInputs(WerkstoffMaterialPool.NitratedRareEarthMonaziteConcentrate.getFluidOrGas(1000)) + .fluidOutputs(WerkstoffMaterialPool.NitricLeachedMonaziteMixture.getFluidOrGas(2000)) + .duration(11 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(WerkstoffMaterialPool.NitricLeachedMonaziteMixture.getFluidOrGas(1000)) + .itemOutputs(WerkstoffMaterialPool.CeriumDioxide.get(OrePrefixes.dust, 1)) + .outputChances(11_11) + .fluidOutputs(WerkstoffMaterialPool.NitricMonaziteLeachedConcentrate.getFluidOrGas(1000)) + .duration(20 * SECONDS) + .eut(240) + .noOptimize() + .addTo(sifterRecipes); + + // BEGIN Cerium + // Cerium-rich mixture + 3HCl = CeCl3 + Monazite (to allow cerium processing without bastnazite/monazite) + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 15)) + .itemOutputs(WerkstoffMaterialPool.CeriumChloride.get(OrePrefixes.dust, 1), Materials.Monazite.getDust(1)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(750)) + .fluidOutputs(Materials.Water.getFluid(750)) + .duration(25 * SECONDS) + .eut(450) + .addTo(UniversalChemical); + + // CeO2 + 3NH4Cl + H = 3NH3 + CeCl3 + 2H2O + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.CeriumDioxide.get(OrePrefixes.dust, 3), + WerkstoffLoader.AmmoniumChloride.get(OrePrefixes.cell, 3)) + .itemOutputs(WerkstoffMaterialPool.CeriumChloride.get(OrePrefixes.dust, 4), Materials.Ammonia.getCells(3)) + .fluidInputs(Materials.Hydrogen.getGas(1000)) + .fluidOutputs(Materials.Water.getGas(2000)) + .duration(15 * SECONDS) + .eut(450) + .addTo(UniversalChemical); + + // Ce2(C2O4)3 + 3C = Ce2O3 + 9CO + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.CeriumOxalate.get(OrePrefixes.dust, 5), Materials.Carbon.getDust(3)) + .itemOutputs(WerkstoffMaterialPool.CeriumIIIOxide.get(OrePrefixes.dust, 5)) + .fluidOutputs(Materials.CarbonMonoxide.getGas(9000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 800) + .addTo(blastFurnaceRecipes); + + // END Cerium (NMLC) + + GTValues.RA.stdBuilder() + .itemOutputs(WerkstoffMaterialPool.CooledMonaziteRareEarthConcentrate.get(OrePrefixes.dust, 1)) + .fluidInputs(WerkstoffMaterialPool.NitricMonaziteLeachedConcentrate.getFluidOrGas(1000)) + .duration(5 * SECONDS) + .eut(240) + .noOptimize() + .addTo(vacuumFreezerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.CooledMonaziteRareEarthConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs( + WerkstoffMaterialPool.MonaziteRarerEarthSediment.get(OrePrefixes.dust, 1), + WerkstoffMaterialPool.EuropiumIIIOxide.get(OrePrefixes.dust, 5)) + .outputChances(9000, 500) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(electroMagneticSeparatorRecipes); + + // 5Eu2O3 + Eu = 4EuO + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.EuropiumIIIOxide.get(OrePrefixes.dust, 5), Materials.Europium.getDust(1)) + .itemOutputs(WerkstoffMaterialPool.EuropiumOxide.get(OrePrefixes.dust, 6)) + .duration(15 * SECONDS) + .eut(8400) + .addTo(UniversalChemical); + + // 4 EuO = 2 Eu + 2O2 + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.EuropiumOxide.get(OrePrefixes.dust, 2)) + .itemOutputs(Materials.Europium.getDust(1)) + .fluidOutputs(Materials.Oxygen.getGas(1000L)) + .duration(15 * SECONDS) + .eut(33_000) + .addTo(electrolyzerRecipes); + + // EuS = Eu + S + // TODO old recipe. for compat only. remove material and recipe half a year later, i.e. after September 2023. + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.EuropiumSulfide.get(OrePrefixes.dust, 2)) + .itemOutputs(Materials.Europium.getDust(1), Materials.Sulfur.getDust(1)) + .duration(30 * SECONDS) + .eut(33_000) + .addTo(electrolyzerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.MonaziteRarerEarthSediment.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.MonaziteHeterogenousHalogenicRareEarthMixture.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.Chlorine.getGas(1000)) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_HV) + .metadata(COIL_HEAT, 1200) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + Materials.Salt.getDust(1), + WerkstoffMaterialPool.MonaziteHeterogenousHalogenicRareEarthMixture.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.SaturatedMonaziteRareEarthMixture.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.Acetone.getFluid(1000)) + .duration(10 * SECONDS) + .eut(240) + .addTo(mixerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.MonaziteHeterogenousHalogenicRareEarthMixture.get(OrePrefixes.dust, 1), + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 2)) + .itemOutputs(WerkstoffMaterialPool.SaturatedMonaziteRareEarthMixture.get(OrePrefixes.dust, 3)) + .fluidInputs(Materials.Acetone.getFluid(1000)) + .duration(20 * SECONDS) + .eut(240) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(4), + WerkstoffMaterialPool.SaturatedMonaziteRareEarthMixture.get(OrePrefixes.dust, 8)) + .itemOutputs(WerkstoffMaterialPool.SamaricResidue.get(OrePrefixes.dust, 6)) + .fluidOutputs(Materials.Chloromethane.getGas(800)) + .eut(TierEU.RECIPE_EV) + .duration(5 * MINUTES + 15 * SECONDS) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.SamaricResidue.get(OrePrefixes.dust, 9)) + .itemOutputs(Materials.Samarium.getDust(6), Materials.Gadolinium.getDust(3)) + .outputChances(10000, 10000) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(sifterRecipes); + + // BASTNASITE (god help me) + GTValues.RA.stdBuilder() + .fluidInputs(Materials.NitricAcid.getFluid(700)) + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Bastnasite, 2)) + .fluidOutputs(WerkstoffMaterialPool.MuddyRareEarthBastnasiteSolution.getFluidOrGas(400)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .eut(TierEU.RECIPE_EV) + .duration(400) + .metadata(COIL_HEAT, 800) + .addTo(digesterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs( + WerkstoffMaterialPool.MuddyRareEarthBastnasiteSolution.getFluidOrGas(1000), + GTModHandler.getSteam(1000)) + .fluidOutputs(WerkstoffMaterialPool.SteamCrackedBasnasiteSolution.getFluidOrGas(2000)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(crackingRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + WerkstoffMaterialPool.SteamCrackedBasnasiteSolution.get(OrePrefixes.cell, 1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(WerkstoffMaterialPool.SodiumFluorosilicate.getFluidOrGas(320)) + .fluidOutputs(WerkstoffMaterialPool.ConditionedBastnasiteMud.getFluidOrGas(1320)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs( + Materials.Water.getFluid(10000), + WerkstoffMaterialPool.ConditionedBastnasiteMud.getFluidOrGas(1000)) + .itemInputs(Materials.Saltpeter.getDust(1)) + .fluidOutputs(WerkstoffMaterialPool.DiltedRareEarthBastnasiteMud.getFluidOrGas(11000)) + .itemOutputs(Gangue.get(OrePrefixes.dust, 1)) + .eut(TierEU.RECIPE_EV) + .duration(1000) + .metadata(DISSOLUTION_TANK_RATIO, 10) + .noOptimize() + .addTo(dissolutionTankRecipes); + + GTValues.RA.stdBuilder() + .itemOutputs( + Materials.SiliconDioxide.getDust(1), + Materials.Rutile.getDust(1), + WerkstoffLoader.RedZircon.get(OrePrefixes.dust, 1), + Materials.Ilmenite.getDust(1)) + .outputChances(90_00, 75_00, 10_00, 5_00) + .fluidInputs(WerkstoffMaterialPool.DiltedRareEarthBastnasiteMud.getFluidOrGas(1000)) + .fluidOutputs(WerkstoffMaterialPool.FilteredBastnasiteMud.getFluidOrGas(400)) + .eut(240) + .duration(20 * SECONDS) + .noOptimize() + .addTo(sifterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .itemOutputs(WerkstoffMaterialPool.BastnasiteRareEarthOxidePowder.get(OrePrefixes.dust, 1)) + .fluidInputs(WerkstoffMaterialPool.FilteredBastnasiteMud.getFluidOrGas(1000)) + .duration(25 * SECONDS) + .eut(600) + .metadata(COIL_HEAT, 1400) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.BastnasiteRareEarthOxidePowder.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.LeachedBastnasiteRareEarthOxides.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(500)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(chemicalBathRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(1), + WerkstoffMaterialPool.LeachedBastnasiteRareEarthOxides.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.RoastedRareEarthOxides.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.Oxygen.getGas(1000)) + .fluidOutputs(Materials.Fluorine.getGas(13)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .metadata(COIL_HEAT, 1200) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(7), + WerkstoffMaterialPool.RoastedRareEarthOxides.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.WetRareEarthOxides.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.Water.getFluid(200)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.WetRareEarthOxides.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.CeriumOxidisedRareEarthOxides.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.Fluorine.getGas(4000)) + .fluidOutputs(Materials.HydrofluoricAcid.getFluid(4000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.CeriumOxidisedRareEarthOxides.get(OrePrefixes.dust, 1)) + .itemOutputs( + WerkstoffMaterialPool.BastnasiteRarerEarthOxides.get(OrePrefixes.dust, 1), + WerkstoffMaterialPool.CeriumDioxide.get(OrePrefixes.dust, 1)) + .outputChances(100_00, 90_00) + .eut(TierEU.RECIPE_HV) + .duration(30 * SECONDS) + .addTo(centrifugeRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.BastnasiteRarerEarthOxides.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.NitricAcid.getFluid(400)) + .fluidOutputs(WerkstoffMaterialPool.NitratedBastnasiteRarerEarthOxides.getFluidOrGas(1000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(mixerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.NitratedBastnasiteRarerEarthOxides.get(OrePrefixes.cell, 1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(Materials.Acetone.getFluid(1000)) + .fluidOutputs(WerkstoffMaterialPool.SaturatedBastnasiteRarerEarthOxides.getFluidOrGas(1000)) + .duration(35 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemOutputs( + WerkstoffMaterialPool.NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 1), + WerkstoffMaterialPool.SamaricRareEarthConcentrate.get(OrePrefixes.dust, 1)) + .outputChances(80_00, 50_00) + .fluidInputs(WerkstoffMaterialPool.SaturatedBastnasiteRarerEarthOxides.getFluidOrGas(1000)) + .fluidOutputs(WerkstoffMaterialPool.DilutedAcetone.getFluidOrGas(750)) + .eut(TierEU.RECIPE_HV) + .duration(45 * SECONDS) + .addTo(centrifugeRecipes); + + // Nd RE + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 2)) + .itemOutputs( + WerkstoffMaterialPool.LanthaniumChloride.get(OrePrefixes.dust, 1), + WerkstoffMaterialPool.NeodymiumOxide.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(2000)) + .duration(45 * SECONDS) + .eut(800) + .addTo(UniversalChemical); + + // Sm RE + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.SamaricRareEarthConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.FluorinatedSamaricConcentrate.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.HydrofluoricAcid.getFluid(2000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.SamaricRareEarthConcentrate.get(OrePrefixes.dust, 1), + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.FluorinatedSamaricConcentrate.get(OrePrefixes.dust, 2)) + .fluidInputs(Materials.HydrofluoricAcid.getFluid(2000)) + .duration(17 * SECONDS + 10 * TICKS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.FluorinatedSamaricConcentrate.get(OrePrefixes.dust, 8), + Materials.Calcium.getDust(4)) + .itemOutputs( + Materials.Holmium.getDust(1), + WerkstoffMaterialPool.SamariumTerbiumMixture.get(OrePrefixes.dust, 4)) + .fluidOutputs(WerkstoffMaterialPool.CalciumFluoride.getFluidOrGas(12000)) + .duration(1 * MINUTES + 20 * TICKS) + .eut(TierEU.RECIPE_EV) + .metadata(COIL_HEAT, 1200) + .addTo(blastFurnaceRecipes); + + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.SamariumTerbiumMixture.get(OrePrefixes.dust, 1), + BotWerkstoffMaterialPool.AmmoniumNitrate.get(OrePrefixes.dust, 9)) + .itemOutputs(WerkstoffMaterialPool.NitratedSamariumTerbiumMixture.get(OrePrefixes.dust, 1)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.NitratedSamariumTerbiumMixture.get(OrePrefixes.dust, 4), + Materials.Copper.getDust(1)) + .itemOutputs( + WerkstoffMaterialPool.TerbiumNitrate.get(OrePrefixes.dust, 2), + WerkstoffMaterialPool.SamaricResidue.get(OrePrefixes.dust, 2) // Potentially make only Samarium + ) + .duration(2 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 2), + Materials.Calcium.getDust(3)) + .itemOutputs( + WerkstoffMaterialPool.DephosphatedSamariumConcentrate.get(OrePrefixes.dust, 1), + Materials.TricalciumPhosphate.getDust(5)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.DephosphatedSamariumConcentrate.get(OrePrefixes.dust, 6)) + .itemOutputs(Materials.Samarium.getDust(1), WerkstoffLoader.Thorianit.get(OrePrefixes.dust, 2)) + .outputChances(90_00, 80_00) + .eut(TierEU.RECIPE_EV) + .duration(10 * SECONDS) + .addTo(centrifugeRecipes); + + // TODO UV Tier Ion Extracting Method + + // Lanthanum Part + // Digester to produce Lanthanum Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Lanthanum, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(LanthanumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(LanthanumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(LanthanumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + LanthanumExtractingNanoResin.getFluidOrGas(1000), + LanthanumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledLanthanumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Praseodymium Part + // Digester to produce Praseodymium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Praseodymium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(PraseodymiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(PraseodymiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(PraseodymiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + PraseodymiumExtractingNanoResin.getFluidOrGas(1000), + PraseodymiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledPraseodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Cerium Part + // Digester to produce Cerium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Cerium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(CeriumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(CeriumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(CeriumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs(CeriumExtractingNanoResin.getFluidOrGas(1000), CeriumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledCeriumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Neodymium Part + // Digester to produce Neodymium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Neodymium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(NeodymiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(NeodymiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(NeodymiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + NeodymiumExtractingNanoResin.getFluidOrGas(1000), + NeodymiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Neodymium Part + // Digester to produce Neodymium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Neodymium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(NeodymiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(NeodymiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(NeodymiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + NeodymiumExtractingNanoResin.getFluidOrGas(1000), + NeodymiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Promethium Part + // Digester to produce Neodymium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Promethium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(PromethiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(PromethiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(PromethiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + PromethiumExtractingNanoResin.getFluidOrGas(1000), + PromethiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledPromethiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Promethium Part + // Digester to produce Promethium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Promethium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(PromethiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(PromethiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(PromethiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + PromethiumExtractingNanoResin.getFluidOrGas(1000), + PromethiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledPromethiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Samarium Part + // Digester to produce Samarium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Samarium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(SamariumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(SamariumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(SamariumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + SamariumExtractingNanoResin.getFluidOrGas(1000), + SamariumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledSamariumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Europium Part + // Digester to produce Europium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Europium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(EuropiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(EuropiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(EuropiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + EuropiumExtractingNanoResin.getFluidOrGas(1000), + EuropiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledEuropiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Gadolinium Part + // Digester to produce Gadolinium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Gadolinium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(GadoliniumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GadoliniumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(GadoliniumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + GadoliniumExtractingNanoResin.getFluidOrGas(1000), + GadoliniumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledGadoliniumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Terbium Part + // Digester to produce Terbium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Terbium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(TerbiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(TerbiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(TerbiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs(TerbiumExtractingNanoResin.getFluidOrGas(1000), TerbiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledTerbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Dysprosium Part + // Digester to produce Dysprosium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Dysprosium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(DysprosiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(DysprosiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(DysprosiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + DysprosiumExtractingNanoResin.getFluidOrGas(1000), + DysprosiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledDysprosiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Holmium Part + // Digester to produce Holmium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Holmium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(HolmiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(HolmiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(HolmiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs(HolmiumExtractingNanoResin.getFluidOrGas(1000), HolmiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledHolmiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Erbium Part + // Digester to produce Erbium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Erbium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(ErbiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ErbiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(ErbiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs(ErbiumExtractingNanoResin.getFluidOrGas(1000), ErbiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledErbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Thulium Part + // Digester to produce Thulium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Thulium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(ThuliumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ThuliumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(ThuliumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs(ThuliumExtractingNanoResin.getFluidOrGas(1000), ThuliumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledThuliumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Ytterbium Part + // Digester to produce Ytterbium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Ytterbium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(YtterbiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(YtterbiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(YtterbiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + YtterbiumExtractingNanoResin.getFluidOrGas(1000), + YtterbiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledYtterbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Lutetium Part + // Digester to produce Lutetium Chloride Concentrate + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Lutetium, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(3)) + .fluidInputs(Materials.Chlorine.getGas(36000)) + .fluidOutputs(LutetiumChlorideConcentrate.getFluidOrGas(3000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + GTValues.RA.stdBuilder() + .itemInputs(LutetiumOreConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(Materials.SiliconDioxide.getDust(1)) + .fluidInputs(Materials.Chlorine.getGas(12000)) + .fluidOutputs(LutetiumChlorideConcentrate.getFluidOrGas(1000)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_ZPM) + .duration(2 * SECONDS) + .addTo(digesterRecipes); + // 1B oreChlorideConcentrate = 1 ore's rare earth metal + 3 any rare earth metal + GTValues.RA.stdBuilder() + .fluidInputs( + LutetiumExtractingNanoResin.getFluidOrGas(1000), + LutetiumChlorideConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledLutetiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Ion Extracting Process to produce Rare Earth Element (example Samarium) by Nano Resin + // Get Extracting Nano Resin + + // Lanthanum + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Lanthanum.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(LanthanumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Praseodymium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Praseodymium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(PraseodymiumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Cerium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Cerium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(CeriumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Neodymium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Neodymium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(NeodymiumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Promethium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Promethium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(PromethiumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Sm + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Samarium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(SamariumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Europium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Europium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(EuropiumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Gadolinium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Gadolinium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(GadoliniumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Terbium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Terbium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(TerbiumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Dysprosium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Dysprosium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(DysprosiumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Holmium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Holmium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(HolmiumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Erbium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Erbium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(ErbiumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Thulium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Thulium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(ThuliumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Ytterbium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Ytterbium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(YtterbiumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // Lutetium + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.MysteriousCrystalLens", 0), + Materials.Lutetium.getDust(1), + Materials.Carbon.getNanite(1)) + .fluidInputs(GGMaterial.P507.getFluidOrGas(4000)) + .fluidOutputs(LutetiumExtractingNanoResin.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(10 * SECONDS) + .addTo(laserEngraverRecipes); + + // TODO Electrolyzer recycle Nano Resin and produce molten rare earth metal, + + // La + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledLanthanumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + LanthanumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Lanthanum, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Pr + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledPraseodymiumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + PraseodymiumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Praseodymium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Ce + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledCeriumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + CeriumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Cerium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Nd + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + NeodymiumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Neodymium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Po + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledPromethiumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + PromethiumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Promethium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Sm + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledSamariumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + SamariumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Samarium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Eu + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledEuropiumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + EuropiumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Europium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Ga + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledGadoliniumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + GadoliniumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Gadolinium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Tb + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledTerbiumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + TerbiumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Terbium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Dy + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledDysprosiumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + DysprosiumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Dysprosium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Ho + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledHolmiumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + HolmiumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Holmium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Er + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledErbiumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + ErbiumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Erbium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Tm + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledThuliumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + ThuliumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Thulium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Yb + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledYtterbiumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + YtterbiumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Ytterbium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // Lu + GTValues.RA.stdBuilder() + .itemInputs(Materials.Empty.getCells(2)) + .fluidInputs(FilledLutetiumExtractingNanoResin.getFluidOrGas(1000)) + .itemOutputs( + LutetiumExtractingNanoResin.get(OrePrefixes.cell, 1), + GTOreDictUnificator.get(OrePrefixes.cellMolten, Materials.Lutetium, 1)) + .fluidOutputs(Materials.Chlorine.getGas(3000)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(electrolyzerRecipes); + + // TODO ChlorinitedRareEarthConcentrate process with every 15 Rare Earth Extracting Nano Resin + + // La + GTValues.RA.stdBuilder() + .fluidInputs( + LanthanumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledLanthanumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + LanthanumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledLanthanumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + LanthanumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledLanthanumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Pr + GTValues.RA.stdBuilder() + .fluidInputs( + PraseodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledPraseodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + PraseodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledPraseodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + PraseodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledPraseodymiumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Ce + GTValues.RA.stdBuilder() + .fluidInputs( + CeriumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledCeriumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + CeriumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledCeriumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + CeriumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledCeriumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Nd + GTValues.RA.stdBuilder() + .fluidInputs( + NeodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + NeodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + NeodymiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledNeodymiumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Pm + GTValues.RA.stdBuilder() + .fluidInputs( + PromethiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledPromethiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + PromethiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledPromethiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + PromethiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledPromethiumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Sm + GTValues.RA.stdBuilder() + .fluidInputs( + SamariumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledSamariumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + SamariumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledSamariumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + SamariumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledSamariumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Eu + GTValues.RA.stdBuilder() + .fluidInputs( + EuropiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledEuropiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + EuropiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledEuropiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + EuropiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledEuropiumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Ga + GTValues.RA.stdBuilder() + .fluidInputs( + GadoliniumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledGadoliniumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + GadoliniumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledGadoliniumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + GadoliniumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledGadoliniumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Tb + GTValues.RA.stdBuilder() + .fluidInputs( + TerbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledTerbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + TerbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledTerbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + TerbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledTerbiumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Dy + GTValues.RA.stdBuilder() + .fluidInputs( + DysprosiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledDysprosiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + DysprosiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledDysprosiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + DysprosiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledDysprosiumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Ho + GTValues.RA.stdBuilder() + .fluidInputs( + HolmiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledHolmiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + HolmiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledHolmiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + HolmiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledHolmiumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Er + GTValues.RA.stdBuilder() + .fluidInputs( + ErbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledErbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + ErbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledErbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + ErbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledErbiumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Tm + GTValues.RA.stdBuilder() + .fluidInputs( + ThuliumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledThuliumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + ThuliumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledThuliumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + ThuliumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledThuliumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Yb + GTValues.RA.stdBuilder() + .fluidInputs( + YtterbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledYtterbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + YtterbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledYtterbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + YtterbiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledYtterbiumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // Lu + GTValues.RA.stdBuilder() + .fluidInputs( + LutetiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthConcentrate.getFluidOrGas(1000)) + .fluidOutputs( + FilledLutetiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + LutetiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthEnrichedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledLutetiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + GTValues.RA.stdBuilder() + .fluidInputs( + LutetiumExtractingNanoResin.getFluidOrGas(1000), + ChlorinatedRareEarthDilutedSolution.getFluidOrGas(1000)) + .fluidOutputs( + FilledLutetiumExtractingNanoResin.getFluidOrGas(1000), + GGMaterial.wasteLiquid.getFluidOrGas(1000)) + .eut(TierEU.RECIPE_UV) + .duration(1 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // TODO Samarium Ore Concentrate Dust Processing Line Start + + // 16 SmOreDust + 200L NitricAcid =EV@10s= 800L MuddySamariumRareEarthSolution + 1 ?ThP?ConcentrateDust + GTValues.RA.stdBuilder() + .itemInputs(SamariumOreConcentrate.get(OrePrefixes.dust, 16)) + .fluidInputs(Materials.NitricAcid.getFluid(200)) + .itemOutputs(ThoriumPhosphateConcentrate.get(OrePrefixes.dust, 1)) + .fluidOutputs(MuddySamariumRareEarthSolution.getFluidOrGas(800)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_EV) + .duration(10 * SECONDS) + .addTo(digesterRecipes); + + // 1 CrushedSamariumOre = 3 SamariumOreConcentrate in process + GTValues.RA.stdBuilder() + .itemInputs(GTOreDictUnificator.get(OrePrefixes.crushed, Materials.Samarium, 8)) + .fluidInputs(Materials.NitricAcid.getFluid(300)) + .itemOutputs(ThoriumPhosphateConcentrate.get(OrePrefixes.dust, 3)) + .fluidOutputs(MuddySamariumRareEarthSolution.getFluidOrGas(1200)) + .metadata(COIL_HEAT, 800) + .eut(TierEU.RECIPE_EV) + .duration(10 * SECONDS) + .addTo(digesterRecipes); + + // 1B MuddySmSolution + 1B NitricAcid =EV@10s= 2B SamariumRareEarthMud + 0.8 CeriumDioxide + 0.6 + // CeriumRichMixture(CeriumOreConcentrate) + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.NitricAcid.getFluid(1000), MuddySamariumRareEarthSolution.getFluidOrGas(1000)) + .itemOutputs(CeriumDioxide.get(OrePrefixes.dust, 1), CeriumOreConcentrate.get(OrePrefixes.dust, 1)) + .fluidOutputs(SamariumRareEarthMud.getFluidOrGas(2000)) + .metadata(DISSOLUTION_TANK_RATIO, 1) + .outputChances(8000, 6000) + .noOptimize() + .eut(TierEU.RECIPE_EV) + .duration(10 * SECONDS) + .addTo(dissolutionTankRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(9)) + .fluidInputs(Materials.NitricAcid.getFluid(9000), MuddySamariumRareEarthSolution.getFluidOrGas(9000)) + .itemOutputs(CeriumDioxide.get(OrePrefixes.dust, 9), CeriumOreConcentrate.get(OrePrefixes.dust, 9)) + .fluidOutputs(SamariumRareEarthMud.getFluidOrGas(18000)) + .metadata(DISSOLUTION_TANK_RATIO, 1) + .outputChances(8000, 6000) + .noOptimize() + .eut(TierEU.RECIPE_IV) + .duration(300) + .addTo(dissolutionTankRecipes); + // Low Efficiency method in LCR + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.NitricAcid.getFluid(1000), MuddySamariumRareEarthSolution.getFluidOrGas(1000)) + .itemOutputs(CeriumDioxide.get(OrePrefixes.dust, 1)) + .fluidOutputs(SamariumRareEarthMud.getFluidOrGas(1000)) + .outputChances(5000) + .eut(TierEU.RECIPE_EV) + .duration(300) + .addTo(multiblockChemicalReactorRecipes); + + // 1B SamariumRareEarthMud + 9B water =EV@30s= 10B DilutedSamariumRareEarthSolution + // + (90% + 60%) NeodymiumREConcentrate + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(Materials.Water.getFluid(9000), SamariumRareEarthMud.getFluidOrGas(1000)) + .itemOutputs( + NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 1), + NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 1)) + .fluidOutputs(DilutedSamariumRareEarthSolution.getFluidOrGas(10000)) + .metadata(DISSOLUTION_TANK_RATIO, 9) + .outputChances(9000, 6000) + .noOptimize() + .eut(TierEU.RECIPE_EV) + .duration(600) + .addTo(dissolutionTankRecipes); + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(9)) + .fluidInputs(Materials.Water.getFluid(81000), SamariumRareEarthMud.getFluidOrGas(9000)) + .itemOutputs( + NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 9), + NeodymicRareEarthConcentrate.get(OrePrefixes.dust, 9)) + .fluidOutputs(DilutedSamariumRareEarthSolution.getFluidOrGas(90000)) + .metadata(DISSOLUTION_TANK_RATIO, 9) + .outputChances(9000, 6000) + .noOptimize() + .eut(TierEU.RECIPE_IV) + .duration(900) + .addTo(dissolutionTankRecipes); + // Low Efficiency method in LCR + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1)) + .fluidInputs(SamariumRareEarthMud.getFluidOrGas(1000), Materials.Water.getFluid(16000)) + .fluidOutputs(DilutedSamariumRareEarthSolution.getFluidOrGas(8000)) + .eut(TierEU.RECIPE_EV) + .duration(1200) + .addTo(multiblockChemicalReactorRecipes); + + // 2B DilutedSamariumRareEarthSolution + 3B Oxalate + // =EV@10s= + // 5 ImpureSamariumOxalate + 50L MuddySamariumRareEarthSolution + 0.1*2 LepersonniteDust + // LepersonniteDust -> DephosphatedSamariumConcentrate + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(13)) + .fluidInputs(DilutedSamariumRareEarthSolution.getFluidOrGas(2000), GGMaterial.oxalate.getFluidOrGas(3000)) + .itemOutputs( + SamariumOxalate.get(OrePrefixes.dust, 5), + DephosphatedSamariumConcentrate.get(OrePrefixes.dust, 3)) + .fluidOutputs(MuddySamariumRareEarthSolution.getFluidOrGas(50)) + .outputChances(10000, 1000) + .eut(TierEU.RECIPE_EV) + .duration(10 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + // 5 ImpureSamariumOxalate + 6B HCL = 8 ImpureSamariumChloride + 6B CO + GTValues.RA.stdBuilder() + .itemInputs(SamariumOxalate.get(OrePrefixes.dust, 5)) + .fluidInputs(Materials.HydrochloricAcid.getFluid(6000)) + .itemOutputs(SamariumChloride.get(OrePrefixes.dust, 8)) + .fluidOutputs(Materials.CarbonMonoxide.getGas(6000)) + .eut(960) + .duration(10 * SECONDS) + .addTo(multiblockChemicalReactorRecipes); + + /** + * ImpureSamariumChloride has 2 method to process 1. In IV-LuV, fix with NcCL then use electrolyzer to process + * the mixture, get Samarium dust & Chlorine & Sodium. 2. In ZPM, put molten ImpureSamariumChloride and + * LanthanumDust in Distillation Tower to get molten Samarium and impure Lanthanum Chloride. + */ + + // 2 ImpureSamariumChloride + 1 NaCl =LV@5s= 3 SamariumChlorideSodiumChlorideBlend + GTValues.RA.stdBuilder() + .itemInputs(SamariumChloride.get(OrePrefixes.dust, 2), Materials.Salt.getDust(1)) + .itemOutputs(SamariumChlorideSodiumChlorideBlend.get(OrePrefixes.dust, 3)) + .eut(TierEU.RECIPE_LV) + .duration(5 * SECONDS) + .addTo(mixerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(SamariumChloride.get(OrePrefixes.dust, 2), Materials.Sodium.getDust(1)) + .itemOutputs(SamariumChlorideSodiumChlorideBlend.get(OrePrefixes.dust, 3)) + .eut(TierEU.RECIPE_LV) + .duration(5 * SECONDS) + .addTo(mixerNonCellRecipes); + + // 6 SamariumChlorideSodiumChlorideBlend =IV@1s= 1 SamariumDust + 1 SodiumDust + 2/9 RarestEarthResidue + 4B + // Chlorine + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(1), SamariumChlorideSodiumChlorideBlend.get(OrePrefixes.dust, 6)) + .itemOutputs( + Materials.Samarium.getDust(1), + Materials.Sodium.getDust(1), + RarestEarthResidue.get(OrePrefixes.dustTiny, 2)) + .fluidOutputs(Materials.Chlorine.getGas(4000)) + .eut(TierEU.RECIPE_IV) + .duration(1 * SECONDS) + .addTo(electrolyzerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(9), + SamariumChlorideSodiumChlorideBlend.get(OrePrefixes.dust, 54)) + .itemOutputs( + Materials.Samarium.getDust(9), + Materials.Sodium.getDust(9), + RarestEarthResidue.get(OrePrefixes.dust, 2)) + .fluidOutputs(Materials.Chlorine.getGas(36000)) + .eut(TierEU.RECIPE_LuV) + .duration(2 * SECONDS) + .addTo(electrolyzerRecipes); + + // ZPM molten distilling method + + // melt ImpureSamariumChloride + GTValues.RA.stdBuilder() + .itemInputs(SamariumChloride.get(OrePrefixes.dust, 1)) + .fluidOutputs(SamariumChloride.getMolten(144)) + .eut(TierEU.RECIPE_EV) + .duration(24) + .addTo(fluidExtractionRecipes); + + // distill with LanthanumDust 36*144L moltenSmCl3 = 16*144L moltenSm + 27B Cl + GTValues.RA.stdBuilder() + .itemInputs(Materials.Lanthanum.getDust(9)) + .itemOutputs(ImpureLanthanumChloride.get(OrePrefixes.dust, 36)) + .fluidInputs(SamariumChloride.getMolten(5184)) + .fluidOutputs(Materials.Samarium.getMolten(2304)) + .eut(TierEU.RECIPE_ZPM) + .duration(5 * SECONDS) + .noOptimize() + .addTo(distillationTowerRecipes); + + // Centrifuge ImpureLanthanumChlorideDust + GTValues.RA.stdBuilder() + .itemInputs(ImpureLanthanumChloride.get(OrePrefixes.dust, 36)) + .itemOutputs(LanthaniumChloride.get(OrePrefixes.dust, 36), RarestEarthResidue.get(OrePrefixes.dust, 5)) + .eut(TierEU.RECIPE_EV) + .duration(5 * SECONDS) + .addTo(centrifugeRecipes); + + /** + * DephosphatedSamariumConcentrate has a simple and not shit process. Just burn in furnace, then use + * electolyzer. + */ + GameRegistry.addSmelting( + DephosphatedSamariumConcentrate.get(OrePrefixes.dust, 1), + SamariumOxide.get(OrePrefixes.dustTiny, 2), + 114); + GTValues.RA.stdBuilder() + .itemInputs(DephosphatedSamariumConcentrate.get(OrePrefixes.dust, 1)) + .itemOutputs(SamariumOxide.get(OrePrefixes.dust, 1)) + .metadata(COIL_HEAT, 1200) + .eut(514) + .duration(2 * SECONDS) + .addTo(blastFurnaceRecipes); + + } + + public static void addRandomChemCrafting() { + + // PTMEG Elastomer + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.Butanediol.get(OrePrefixes.cell, 1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(WerkstoffMaterialPool.TolueneTetramethylDiisocyanate.getFluidOrGas(4000)) + .fluidOutputs(WerkstoffMaterialPool.PTMEGElastomer.getMolten(4000)) + .duration(1 * MINUTES + 15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + // Toluene Tetramethyl Diisocyanate + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.TolueneDiisocyanate.get(OrePrefixes.cell, 3), + Materials.Hydrogen.getCells(2)) + .itemOutputs(Materials.Empty.getCells(5)) + .fluidInputs(WerkstoffMaterialPool.Polytetrahydrofuran.getFluidOrGas(1000)) + .fluidOutputs(WerkstoffMaterialPool.TolueneTetramethylDiisocyanate.getFluidOrGas(2000)) + .duration(1 * MINUTES) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + // PTHF + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.TungstophosphoricAcid.get(OrePrefixes.cell, 1), + Materials.Oxygen.getCells(1)) + .itemOutputs(Materials.Empty.getCells(2)) + .fluidInputs(WerkstoffMaterialPool.Tetrahydrofuran.getFluidOrGas(144)) + .fluidOutputs(WerkstoffMaterialPool.Polytetrahydrofuran.getFluidOrGas(432)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(UniversalChemical); + + // THF + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.AcidicButanediol.get(OrePrefixes.cell, 1)) + .itemOutputs(Materials.Empty.getCells(1)) + .fluidInputs(Materials.Ethanol.getFluid(1000)) + .fluidOutputs(WerkstoffMaterialPool.Tetrahydrofuran.getFluidOrGas(1000)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + // Acidicised Butanediol + GTValues.RA.stdBuilder() + .itemInputs(Materials.SulfuricAcid.getCells(1)) + .itemOutputs(Materials.Water.getCells(1)) + .fluidInputs(WerkstoffMaterialPool.Butanediol.getFluidOrGas(1000)) + .fluidOutputs(WerkstoffMaterialPool.AcidicButanediol.getFluidOrGas(1000)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(mixerRecipes); + + // Butanediol + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.MoTeOCatalyst.get(OrePrefixes.dustTiny, 1)) + .fluidInputs(Materials.Butane.getGas(1000)) + .fluidOutputs(WerkstoffMaterialPool.Butanediol.getFluidOrGas(1000)) + .duration(45 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(UniversalChemical); + + GTValues.RA.stdBuilder() + .itemInputs(GTUtility.getIntegratedCircuit(9), WerkstoffMaterialPool.MoTeOCatalyst.get(OrePrefixes.dust, 1)) + .fluidInputs(Materials.Butane.getGas(9000)) + .fluidOutputs(WerkstoffMaterialPool.Butanediol.getFluidOrGas(9000)) + .duration(6 * MINUTES + 45 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(multiblockChemicalReactorRecipes); + + // Moly-Te-Oxide Catalyst + GTValues.RA.stdBuilder() + .itemInputs( + WerkstoffMaterialPool.MolybdenumIVOxide.get(OrePrefixes.dust, 1), + WerkstoffMaterialPool.TelluriumIVOxide.get(OrePrefixes.dust, 1)) + .itemOutputs(WerkstoffMaterialPool.MoTeOCatalyst.get(OrePrefixes.dust, 2)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(mixerRecipes); + + // Tungstophosphoric Acid + GTValues.RA.stdBuilder() + .itemInputs(Materials.PhosphoricAcid.getCells(1), Materials.HydrochloricAcid.getCells(24)) + .itemOutputs(Materials.Salt.getDust(24), Materials.Empty.getCells(25)) + .fluidInputs(BotWerkstoffMaterialPool.SodiumTungstate.getFluidOrGas(12000)) + .fluidOutputs(WerkstoffMaterialPool.TungstophosphoricAcid.getFluidOrGas(1000)) + .duration(25 * SECONDS) + .eut(1024) + .addTo(UniversalChemical); + + // Toluene Diisocyanate + GTValues.RA.stdBuilder() + .itemInputs(WerkstoffMaterialPool.Diaminotoluene.get(OrePrefixes.cell, 1), Materials.Empty.getCells(3)) + .itemOutputs() + .fluidInputs(BotWerkstoffMaterialPool.Phosgene.getFluidOrGas(2000)) + .fluidOutputs(WerkstoffMaterialPool.TolueneDiisocyanate.getFluidOrGas(1000)) + .duration(45 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + // Diaminotoluene + GTValues.RA.stdBuilder() + .itemInputs(Materials.Hydrogen.getCells(4)) + .itemOutputs() + .fluidInputs(WerkstoffMaterialPool.Dinitrotoluene.getFluidOrGas(1000)) + .fluidOutputs(WerkstoffMaterialPool.Diaminotoluene.getFluidOrGas(1000)) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + // Dinitrotoluene + GTValues.RA.stdBuilder() + .itemInputs(Materials.NitricAcid.getCells(2)) + .itemOutputs(Materials.Empty.getCells(2)) + .fluidInputs(Materials.Toluene.getFluid(1000)) + .fluidOutputs(WerkstoffMaterialPool.Dinitrotoluene.getFluidOrGas(1000)) + .duration(45 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(UniversalChemical); + + // Digester Control Block + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_IV.get(1L), + ItemList.Super_Tank_EV.get(2L), + ItemList.Electric_Motor_IV.get(4L), + ItemList.Electric_Pump_IV.get(4L), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Desh, 4L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 4L), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(LanthItemList.DIGESTER) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(1440)) + .duration(30 * SECONDS) + .eut(4096) + .addTo(assemblerRecipes); + // Dissolution Tank + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_EV.get(1L), + ItemList.Super_Tank_HV.get(2L), + ItemList.Electric_Motor_EV.get(4L), + ItemList.Electric_Pump_EV.get(2L), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.VibrantAlloy, 4L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.EV, 4L), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(LanthItemList.DISSOLUTION_TANK) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(720)) + .duration(20 * SECONDS) + .eut(960) + .addTo(assemblerRecipes); + + GTValues.RA.stdBuilder() + .fluidInputs(WerkstoffMaterialPool.DilutedAcetone.getFluidOrGas(250)) + .fluidOutputs(Materials.Acetone.getFluid(150)) + .duration(6 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(vacuumFreezerRecipes); + + // PTMEG Manipulation + + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Ingot.get(0L)) + .itemOutputs(WerkstoffMaterialPool.PTMEGElastomer.get(OrePrefixes.ingot, 1)) + .fluidInputs(WerkstoffMaterialPool.PTMEGElastomer.getMolten(144)) + .duration(2 * SECONDS) + .eut(64) + .addTo(fluidSolidifierRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Shape_Mold_Plate.get(0L)) + .itemOutputs(WerkstoffMaterialPool.PTMEGElastomer.get(OrePrefixes.plate, 1)) + .fluidInputs(WerkstoffMaterialPool.PTMEGElastomer.getMolten(144)) + .duration(2 * SECONDS) + .eut(64) + .addTo(fluidSolidifierRecipes); + + // TODO Cerium-doped Lutetium Aluminium Garnet (Ce:LuAG) + /** + * 1/9 Ce + 3 Lu + 5 Sapphire = 8 LuAG Blend 1/9 Ce + 3 Lu + 10 Green Sapphire = 8 LuAG Blend 2/9 Ce + 6 Lu + 25 + * Alumina + 9 Oxygen = 12 LuAG Blend + * + * 1 Ce + 60 Lu + 100 Sapphire = 160 LuAG Blend 1 Ce + 60 Lu +200 Green Sapphire = 160 LuAG Blend + * + */ + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(4), + Materials.Cerium.getDustTiny(1), + Materials.Lutetium.getDust(3), + Materials.Sapphire.getDust(5)) + .itemOutputs(CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 8)) + .eut(TierEU.RECIPE_UV) + .duration(5 * SECONDS) + .addTo(mixerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(4), + Materials.Cerium.getDustTiny(1), + Materials.Lutetium.getDust(3), + Materials.GreenSapphire.getDust(10)) + .itemOutputs(CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 8)) + .eut(TierEU.RECIPE_UV) + .duration(5 * SECONDS) + .addTo(mixerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(4), + Materials.Cerium.getDustTiny(2), + Materials.Lutetium.getDust(6), + Materials.Aluminiumoxide.getDust(25)) + .itemOutputs(CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 12)) + .fluidInputs(Materials.Oxygen.getGas(9000)) + .eut(TierEU.RECIPE_UV) + .duration(400) + .addTo(mixerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(5), + Materials.Cerium.getDust(1), + Materials.Lutetium.getDust(60), + Materials.Sapphire.getDust(64), + Materials.Sapphire.getDust(36)) + .itemOutputs( + CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 64), + CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 64), + CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 32)) + .eut(TierEU.RECIPE_UV) + .duration(1800) + .addTo(mixerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(5), + Materials.Cerium.getDust(1), + Materials.Lutetium.getDust(60), + Materials.GreenSapphire.getDust(64), + Materials.GreenSapphire.getDust(64), + Materials.GreenSapphire.getDust(64), + Materials.GreenSapphire.getDust(8)) + .itemOutputs( + CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 64), + CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 64), + CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 32)) + .eut(TierEU.RECIPE_UV) + .duration(1800) + .addTo(mixerRecipes); + + // Get LuAG Crystal seed + GTValues.RA.stdBuilder() + .itemInputs(CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1)) + .itemOutputs(CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gem, 1)) + .fluidInputs(Materials.Lutetium.getMolten(144 * 8)) + .outputChances(514) + .eut(TierEU.RECIPE_UV) + .duration(500) + .addTo(autoclaveRecipes); + + // 1 LuAG Blend = 1.1(Og) 1.0(Xe) 0.99(Kr) LuAG in Autoclave + GTValues.RA.stdBuilder() + .itemInputs( + CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1), + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gem, 1)) + .itemOutputs( + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1), + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) + .fluidInputs(WerkstoffLoader.Krypton.getFluidOrGas(40)) + .outputChances(8000, 1900) + .eut(TierEU.RECIPE_UHV) + .duration(512) + .addTo(autoclaveRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1), + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gem, 1)) + .itemOutputs( + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1), + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) + .fluidInputs(WerkstoffLoader.Xenon.getFluidOrGas(25)) + .outputChances(9000, 1000) + .eut(TierEU.RECIPE_UHV) + .duration(256) + .addTo(autoclaveRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(1), + CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1)) + .itemOutputs( + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1), + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) + .fluidInputs(WerkstoffLoader.Oganesson.getFluidOrGas(10)) + .outputChances(10000, 100) + .eut(TierEU.RECIPE_UHV) + .duration(128) + .addTo(autoclaveRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1), + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gem, 1)) + .itemOutputs( + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1), + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 2)) + .fluidInputs(WerkstoffLoader.Oganesson.getFluidOrGas(10)) + .outputChances(10000, 2000) + .eut(TierEU.RECIPE_UHV) + .duration(128) + .addTo(autoclaveRecipes); + + // 1 LuAG Blend = 1 LuAG in Vacuum Furnace + GTValues.RA.stdBuilder() + .itemInputs(CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.dust, 1)) + .itemOutputs(CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) + .fluidInputs(CeriumDopedLutetiumAluminiumOxygenBlend.getMolten(108)) + .metadata(COIL_HEAT, 9100) + .eut(TierEU.RECIPE_UHV) + .duration(5 * SECONDS) + .addTo(vacuumFurnaceRecipes); + GTValues.RA.stdBuilder() + .itemInputs(CeriumDopedLutetiumAluminiumOxygenBlend.get(OrePrefixes.dust, 1)) + .fluidOutputs(CeriumDopedLutetiumAluminiumOxygenBlend.getMolten(144)) + .eut(TierEU.RECIPE_LuV) + .duration(1 * SECONDS) + .addTo(fluidExtractionRecipes); + + // 16 Adv Crystal SoC + for (ItemStack itemStack : OreDictionary.getOres("craftingLensBlue")) { + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.copyAmount(0, itemStack), + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) + .itemOutputs(ItemList.Circuit_Chip_CrystalSoC2.get(16)) + .requiresCleanRoom() + .eut(160000) + .duration(40 * SECONDS) + .addTo(laserEngraverRecipes); + } + + // 16 Crystal SoC + for (ItemStack itemStack : OreDictionary.getOres("craftingLensGreen")) { + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.copyAmount(0, itemStack), + CeriumDopedLutetiumAluminiumGarnet.get(OrePrefixes.gemExquisite, 1)) + .itemOutputs(ItemList.Circuit_Chip_CrystalSoC.get(16)) + .requiresCleanRoom() + .eut(160000) + .duration(40 * SECONDS) + .addTo(laserEngraverRecipes); + } + + } + + public static void removeCeriumMacerator() { + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); + + GTLog.out.print(Tags.MODID + ": processing macerator recipes"); + for (GTRecipe recipe : maceratorRecipes.getAllRecipes()) { + ItemStack input = recipe.mInputs[0]; + if (!GTUtility.isStackValid(input)) { + continue; + } + + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + final String oreName = OreDictionary.getOreName(oreDictID); + if (!(oreName.startsWith("ore") || oreName.startsWith("rawOre") || oreName.startsWith("crushed"))) { + continue; + } + + GTRecipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; + + if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); + modified = true; + GTLog.out.println( + "in the recipe of '" + recipe.mInputs[0].getDisplayName() + + "', replacing Cerium dust by Cerium Rich Mixture dust"); + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); + modified = true; + GTLog.out.println( + "in the recipe of '" + recipe.mInputs[0].getDisplayName() + + "', replacing Samarium dust by Samarium Ore Concentrate dust"); + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + + } + + } + maceratorRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(maceratorRecipes::add); + maceratorRecipes.getBackend() + .reInit(); + + remove.clear(); + reAdd.clear(); + + GTLog.out.print(Tags.MODID + ": macerator recipes done!"); + } + + public static void removeCeriumWasher() { + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); + + GTLog.out.println(Tags.MODID + ": processing orewasher recipes"); + for (GTRecipe recipe : oreWasherRecipes.getAllRecipes()) { + ItemStack input = recipe.mInputs[0]; + if (!GTUtility.isStackValid(input)) { + continue; + } + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + if (!OreDictionary.getOreName(oreDictID) + .startsWith("crushed")) { + continue; + } + + GTRecipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input: " + + input.getDisplayName() + + " get Cerium dust turned into Cerium Rich Mixture dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input: " + + input.getDisplayName() + + " get Samarium dust turned into Samarium Ore Concentrate dust."); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + + GTLog.out.println(Tags.MODID + ": regenerating ore washer recipes"); + oreWasherRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(oreWasherRecipes::add); + oreWasherRecipes.getBackend() + .reInit(); + + remove.clear(); + reAdd.clear(); + + GTLog.out.println(Tags.MODID + ": ore washer recipes done!"); + } + + public static void removeCeriumThermalCentrifuge() { + + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); + + GTLog.out.println(Tags.MODID + ": processing thermal centrifuge recipes"); + for (GTRecipe recipe : thermalCentrifugeRecipes.getAllRecipes()) { + ItemStack input = recipe.mInputs[0]; + if (!GTUtility.isStackValid(input)) { + continue; + } + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + if (!(OreDictionary.getOreName(oreDictID) + .startsWith("crushed") + || OreDictionary.getOreName(oreDictID) + .startsWith("purified"))) { + continue; + } + + GTRecipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input " + + input.getDisplayName() + + " get Cerium dust turned into Cerium Rich Mixture dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input " + + input.getDisplayName() + + " get Samarium dust turned into Samarium Ore Concentrate dust."); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + + GTLog.out.println(Tags.MODID + ": regenerating thermal centrifuge recipes"); + thermalCentrifugeRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(thermalCentrifugeRecipes::add); + thermalCentrifugeRecipes.getBackend() + .reInit(); + + remove.clear(); + reAdd.clear(); + + GTLog.out.println(Tags.MODID + ": thermal centrifuge recipes done!"); + } + + public static void removeCeriumCentrifuge() { + + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); + GTLog.out.println(Tags.MODID + ": processing centrifuge recipes"); + for (GTRecipe recipe : centrifugeRecipes.getAllRecipes()) { + ItemStack input = null; + if (recipe.mInputs.length > 0) input = recipe.mInputs[0]; + if (!GTUtility.isStackValid(input)) { + continue; + } + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + final String oreName = OreDictionary.getOreName(oreDictID); + if (!(oreName.startsWith("dust") && (!oreName.contains("Dephosphated")))) { + continue; + } + GTRecipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDustTiny(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dustTiny, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Cerium tiny dust turned into Cerium Rich Mixture tiny dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Cerium dust turned into Cerium Rich Mixture dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDustSmall(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dustSmall, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Cerium small dust turned into Cerium Rich Mixture small dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDustTiny(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dustTiny, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Samarium dust turned into Samarium Ore Concentrate tiny dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Samarium dust turned into Samarium Ore Concentrate dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDustSmall(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dustSmall, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Samarium dust turned into Samarium Ore Concentrate small dust."); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + + GTLog.out.println(Tags.MODID + ": regenerating centrifuge recipes"); + centrifugeRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(centrifugeRecipes::add); + centrifugeRecipes.getBackend() + .reInit(); + + remove.clear(); + reAdd.clear(); + + GTLog.out.println(Tags.MODID + ": centrifuge recipes done!"); + } + + public static void removeCeriumCentrifugeNonCell() { + + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); + GTLog.out.println(Tags.MODID + ": processing centrifuge non cell recipes"); + + for (GTRecipe recipe : centrifugeNonCellRecipes.getAllRecipes()) { + ItemStack input = null; + if (recipe.mInputs.length > 0) input = recipe.mInputs[0]; + if (!GTUtility.isStackValid(input)) { + continue; + } + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + final String oreName = OreDictionary.getOreName(oreDictID); + if (!((oreName.startsWith("dust") && (!oreName.contains("Dephosphated"))))) { + continue; + } + GTRecipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDustTiny(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dustTiny, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Cerium tiny dust turned into Cerium Rich Mixture tiny dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Cerium dust turned into Cerium Rich Mixture dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDustSmall(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dustSmall, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Cerium small dust turned into Cerium Rich Mixture small dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDustTiny(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dustTiny, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Samarium tiny dust turned into Samarium Ore Concentrate tiny dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Samarium dust turned into Samarium Ore Concentrate dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDustSmall(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dustSmall, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Samarium small dust turned into Samarium Ore Concentrate small dust."); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + + GTLog.out.println(Tags.MODID + ": regenerating centrifuge non cell recipes"); + centrifugeNonCellRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(centrifugeNonCellRecipes::add); + centrifugeNonCellRecipes.getBackend() + .reInit(); + + remove.clear(); + reAdd.clear(); + + GTLog.out.println(Tags.MODID + ": centrifuge non cell recipes done!"); + } + + public static void removeCeriumHammer() { + + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); + + GTLog.out.println(Tags.MODID + ": processing forge hammer recipes"); + + for (GTRecipe recipe : hammerRecipes.getAllRecipes()) { + ItemStack input = recipe.mInputs[0]; + if (!GTUtility.isStackValid(input)) { + continue; + } + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + final String oreName = OreDictionary.getOreName(oreDictID); + if (!oreName.startsWith("crushed")) { + continue; + } + + GTRecipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Cerium dust turned into Cerium Rich Mixture dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize * 2, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Samarium dust turned into Samarium Ore Concentrate dust."); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + + GTLog.out.println(Tags.MODID + ": regenerating forge hammer recipes"); + hammerRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(hammerRecipes::add); + hammerRecipes.getBackend() + .reInit(); + + remove.clear(); + reAdd.clear(); + + GTLog.out.println(Tags.MODID + ": forge hammer recipes done!"); + } + + public static void removeCeriumElectrolyzer() { + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); + GTLog.out.println(Tags.MODID + ": Processing electrolyzer recipes"); + for (GTRecipe recipe : electrolyzerRecipes.getAllRecipes()) { + for (ItemStack input : recipe.mInputs) { + if (!GTUtility.isStackValid(input)) { + continue; + } + + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + final String oreName = OreDictionary.getOreName(oreDictID); + if (!(oreName.startsWith("dust") + && (oreName.equals("dustHibonite") || oreName.equals("dustLanthaniteCe") + || oreName.equals("dustZirconolite") + || oreName.equals("dustYttrocerite") + || oreName.equals("dustXenotime") + || oreName.equals("dustBastnasite") + || oreName.equals("dustFlorencite")))) { + continue; + } + + GTRecipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Cerium dust turned into Cerium Rich Mixture dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Samarium dust turned into Samarium Ore Concentrate dust."); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + } + + GTLog.out.println(Tags.MODID + ": regenerating electrolyzer recipes"); + electrolyzerRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(electrolyzerRecipes::add); + electrolyzerRecipes.getBackend() + .reInit(); + + remove.clear(); + reAdd.clear(); + + GTLog.out.println(Tags.MODID + ": Electrolyzer recipe done!"); + } + + public static void removeCeriumElectrolyzerNonCell() { + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); + GTLog.out.println(Tags.MODID + ": processing electrolyzer non cell recipes"); + for (GTRecipe recipe : electrolyzerNonCellRecipes.getAllRecipes()) { + for (ItemStack input : recipe.mInputs) { + if (!GTUtility.isStackValid(input)) { + continue; + } + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + final String oreName = OreDictionary.getOreName(oreDictID); + if (!(oreName.startsWith("dust") + && (oreName.equals("dustHibonite") || oreName.equals("dustLanthaniteCe") + || oreName.equals("dustZirconolite") + || oreName.equals("dustYttrocerite") + || oreName.equals("dustXenotime") + || oreName.equals("dustBastnasite") + || oreName.equals("dustFlorencite")))) { + continue; + } + + GTRecipe tRecipe = recipe.copy(); + boolean modified = false; + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Cerium dust turned into Cerium Rich Mixture dust."); + modified = true; + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Samarium dust turned into Samarium Ore Concentrate dust."); + modified = true; + } + } + if (modified) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + } + + GTLog.out.println(Tags.MODID + ": regenerating electrolyzer non cell recipes"); + electrolyzerNonCellRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(electrolyzerNonCellRecipes::add); + electrolyzerNonCellRecipes.getBackend() + .reInit(); + + remove.clear(); + reAdd.clear(); + + GTLog.out.println(Tags.MODID + ": Electrolyzer non cell recipes done!"); + } + + public static void removeCeriumSimpleWasher() { + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); + GTLog.out.println(Tags.MODID + ": processing simple washer recipes."); + for (GTRecipe recipe : simpleWasherRecipes.getAllRecipes()) { + ItemStack input = recipe.mInputs[0]; + if (!GTUtility.isStackValid(input)) { + continue; + } + + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + final String oreName = OreDictionary.getOreName(oreDictID); + + if (!(oreName.startsWith("dustImpureCerium") || oreName.startsWith("dustImpureSamarium") + || oreName.startsWith("dustPureSamarium") + || oreName.startsWith("dustPureCerium"))) { + continue; + } + + GTRecipe tRecipe = recipe.copy(); + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; + if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize, + WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Cerium dust turned into Cerium Rich Mixture dust."); + } else if (tRecipe.mOutputs[i].isItemEqual(Materials.Samarium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize, + WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 1)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Samarium dust turned into Samarium Ore Concentrate dust."); + } + } + if (!tRecipe.equals(recipe)) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + } + } + + GTLog.out.println(Tags.MODID + ": regenerating simple washer recipes"); + simpleWasherRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(simpleWasherRecipes::add); + simpleWasherRecipes.getBackend() + .reInit(); + + remove.clear(); + reAdd.clear(); + + GTLog.out.println(Tags.MODID + ": Simple washer recipes done!"); + } + + public static void removeCeriumDehydrator() { + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); + GTLog.out.println(Tags.MODID + ": processing chemical dehydrator recipes."); + + for (GTRecipe recipe : chemicalDehydratorRecipes.getAllRecipes()) { + if (recipe.mInputs.length == 0) { + continue; + } + ItemStack input = recipe.mInputs[0]; + + if (!GTUtility.isStackValid(input)) { + continue; + } + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + final String oreName = OreDictionary.getOreName(oreDictID); + if (!oreName.startsWith("dust")) { + continue; + } + if (!(oreName.equals("dustCerite") || oreName.equals("dustFluorcaphite") + || oreName.equals("dustZirkelite") + || oreName.equals("dustGadoliniteCe") + || oreName.equals("dustGadoliniteY") + || oreName.equals("dustPolycrase") + || oreName.equals("dustBastnasite"))) { + continue; + } + + GTRecipe tRecipe = recipe.copy(); + for (int i = 0; i < tRecipe.mOutputs.length; i++) { + if (!GTUtility.isStackValid(tRecipe.mOutputs[i])) continue; + + if (tRecipe.mOutputs[i].isItemEqual(Materials.Cerium.getDust(1))) { + tRecipe.mOutputs[i] = GTUtility.copyAmount( + tRecipe.mOutputs[i].stackSize, + WerkstoffMaterialPool.CeriumRichMixture + .get(OrePrefixes.dust, tRecipe.mOutputs[i].stackSize)); + GTLog.out.println( + Tags.MODID + ": recipe with input oredict: " + + oreName + + " get Cerium dust turned into Cerium Rich Mixture dust."); + } + } + if (!tRecipe.equals(recipe)) { + reAdd.add(tRecipe); + remove.add(recipe); + } + break; + + } + + } + + GTLog.out.println(Tags.MODID + ": regenerating chemical dehydrator recipes"); + chemicalDehydratorRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(chemicalDehydratorRecipes::add); + chemicalDehydratorRecipes.getBackend() + .reInit(); + + GTLog.out.print(Tags.MODID + ": Replace " + remove.size() + "! "); + + remove.clear(); + reAdd.clear(); + + GTLog.out.println(Tags.MODID + ": chemical dehydrator recipes done!"); + + } + + public static void removeCeriumChemicalBath() { + HashSet remove = new HashSet<>(5000); + HashSet reAdd = new HashSet<>(5000); + + GTLog.out.println(Tags.MODID + ": marking recipes in chem bath for removal!"); + for (GTRecipe recipe : chemicalBathRecipes.getAllRecipes()) { + for (ItemStack input : recipe.mInputs) { + if (!GTUtility.isStackValid(input)) { + continue; + } + int[] oreDict = OreDictionary.getOreIDs(input); + for (int oreDictID : oreDict) { + String oreName = OreDictionary.getOreName(oreDictID); + if (oreName.equals("dustTin")) { + GTLog.out.println(Tags.MODID + ": chem bath recipe with tin dust detected, removing it."); + remove.add(recipe); + break; + } + if (oreName.equals("dustRutile")) { + GTLog.out.println(Tags.MODID + ": chem bath recipe with rutile dust detected, removing it."); + remove.add(recipe); + break; + } + } + } + } + + GTLog.out.println(Tags.MODID + ": regenerating chem bath recipes"); + chemicalBathRecipes.getBackend() + .removeRecipes(remove); + reAdd.forEach(chemicalBathRecipes::add); + chemicalBathRecipes.getBackend() + .reInit(); + + remove.clear(); + reAdd.clear(); + + GTLog.out.println("Chemical Bath done!"); + } + + public static void removeCeriumSources() { + + removeCeriumMacerator(); + removeCeriumWasher(); + removeCeriumThermalCentrifuge(); + removeCeriumCentrifuge(); + removeCeriumCentrifugeNonCell(); + removeCeriumHammer(); + removeCeriumElectrolyzer(); + removeCeriumElectrolyzerNonCell(); + removeCeriumSimpleWasher(); + removeCeriumDehydrator(); + removeCeriumChemicalBath(); + + // For Cauldron Wash + GTLog.out.println(Tags.MODID + ": processing cauldron washing recipes to replace cerium sources"); + registerCauldronCleaningFor(Materials.Cerium, WerkstoffMaterialPool.CeriumRichMixture.getBridgeMaterial()); + registerCauldronCleaningFor( + Materials.Samarium, + WerkstoffMaterialPool.SamariumOreConcentrate.getBridgeMaterial()); + GTLog.out.println(Tags.MODID + ": processing cauldron washing recipes done!"); + + // For Crafting Table + GTLog.out.println(Tags.MODID + ": processing crafting recipes to replace cerium sources"); + CraftingManager.getInstance() + .getRecipeList() + .forEach(RecipeLoader::replaceInCraftTable); + GTLog.out.println(Tags.MODID + ": processing crafting recipes done!"); + } + + public static void replaceInCraftTable(Object obj) { + IRecipe recipe = (IRecipe) obj; + ItemStack result = recipe.getRecipeOutput(); + if (!(recipe instanceof IRecipeMutableAccess mutableRecipe)) { + return; + } + + Object input = mutableRecipe.gt5u$getRecipeInputs(); + + if (GTUtility.areStacksEqual(result, Materials.Cerium.getDust(1), true)) { + if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Cerium)) { + return; + } + GTLog.out.println("replacing crafting recipe of Cerium dust by Cerium Rich Mixture"); + mutableRecipe.gt5u$setRecipeOutputItem(WerkstoffMaterialPool.CeriumRichMixture.get(OrePrefixes.dust, 2)); + } else if (GTUtility.areStacksEqual(result, Materials.Samarium.getDust(1), true)) { + if (PlatinumSludgeOverHaul.checkRecipe(input, Materials.Samarium)) { + return; + } + mutableRecipe + .gt5u$setRecipeOutputItem(WerkstoffMaterialPool.SamariumOreConcentrate.get(OrePrefixes.dust, 2)); + GTLog.out.println("replacing crafting recipe of Samarium dust by Samarium Ore Concentrate"); + } + } + +} diff --git a/src/main/java/gtnhlanth/loader/ZPMRubberChanges.java b/src/main/java/gtnhlanth/loader/ZPMRubberChanges.java new file mode 100644 index 0000000000..a5cba15f63 --- /dev/null +++ b/src/main/java/gtnhlanth/loader/ZPMRubberChanges.java @@ -0,0 +1,408 @@ +package gtnhlanth.loader; + +import static gregtech.api.enums.OrePrefixes.*; + +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Predicate; + +import net.minecraft.item.ItemStack; +import net.minecraft.item.crafting.CraftingManager; +import net.minecraft.item.crafting.IRecipe; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.reflect.FieldUtils; +import org.apache.commons.lang3.reflect.MethodUtils; + +import bartworks.system.material.Werkstoff; +import bartworks.util.BWUtil; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Mods; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.util.GTLog; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipe.RecipeAssemblyLine; +import gregtech.api.util.GTShapedRecipe; +import gregtech.api.util.GTUtility; +import gtnhlanth.common.register.WerkstoffMaterialPool; + +public class ZPMRubberChanges implements Runnable { + + @SuppressWarnings("unchecked") + public void run() { + + List bufferedRecipeList = null; + + try { + bufferedRecipeList = (List) FieldUtils + .getDeclaredField(GTModHandler.class, "sBufferRecipeList", true) + .get(null); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + + HashSet ZPMPlusComponents = new HashSet<>(); + OrePrefixes[] RubberGenerated = { plate }; + + Arrays.stream(ItemList.values()) + .filter( + item -> (item.toString() + .contains("ZPM") + || item.toString() + .contains("UV") + || item.toString() + .contains("UHV") + || item.toString() + .contains("UEV")) + && item.hasBeenSet()) + .forEach(item -> ZPMPlusComponents.add(item.get(1))); + + if (Mods.NewHorizonsCoreMod.isModLoaded()) { + addDreamcraftItemListItems(ZPMPlusComponents); + } + + for (ItemStack component : ZPMPlusComponents) { + GTLog.out.print(component.getDisplayName() + " "); + } + + replaceAllRecipes(ZPMPlusComponents, RubberGenerated, bufferedRecipeList); + } + + private static void replaceAllRecipes(Collection ZPMPlusComponents, OrePrefixes[] RubberGenerated, + List bufferedRecipeList) { + + for (RecipeAssemblyLine sAssemblylineRecipe : RecipeAssemblyLine.sAssemblylineRecipes) { + for (ItemStack stack : ZPMPlusComponents) { + rewriteAsslineRecipes(stack, RubberGenerated, sAssemblylineRecipe); + } + } + + for (RecipeMap map : RecipeMap.ALL_RECIPE_MAPS.values()) { + for (GTRecipe recipe : map.getAllRecipes()) { + for (ItemStack stack : ZPMPlusComponents) { + rewriteMachineRecipes(stack, RubberGenerated, recipe); + } + } + } + + for (ItemStack stack : ZPMPlusComponents) { + Predicate recipeFilter = obj -> obj instanceof GTShapedRecipe + && GTUtility.areStacksEqual(((GTShapedRecipe) obj).getRecipeOutput(), stack, true); + rewriteCraftingRecipes(bufferedRecipeList, RubberGenerated, recipeFilter); + } + /* + * for (ItemStack stack : LuVMachines) { Predicate recipeFilter = obj -> obj instanceof GT_Shaped_Recipe && + * GT_Utility.areStacksEqual(((GT_Shaped_Recipe) obj).getRecipeOutput(), stack, true); + * rewriteCraftingRecipes(bufferedRecipeList, LuVMaterialsGenerated, recipeFilter); } + */ + } + + private static void addDreamcraftItemListItems(Collection ZPMPlusComponents) { + try { + Class customItemListClass = Class.forName("com.dreammaster.gthandler.CustomItemList"); + Method hasnotBeenSet = MethodUtils.getAccessibleMethod(customItemListClass, "hasBeenSet"); + Method get = MethodUtils.getAccessibleMethod(customItemListClass, "get", long.class, Object[].class); + for (Enum customItemList : (Enum[]) FieldUtils.getField(customItemListClass, "$VALUES", true) + .get(null)) { + if ((customItemList.toString() + .contains("ZPM") + || customItemList.toString() + .contains("UV") + || customItemList.toString() + .contains("UHV") + || customItemList.toString() + .contains("UEV")) + && (boolean) hasnotBeenSet.invoke(customItemList)) + ZPMPlusComponents.add((ItemStack) get.invoke(customItemList, 1, new Object[0])); + } + } catch (IllegalAccessException | ClassNotFoundException | InvocationTargetException e) { + e.printStackTrace(); + } + } + + private static void rewriteCraftingRecipes(List bufferedRecipeList, OrePrefixes[] RubberGenerated, + Predicate recipeFilter) { + for (OrePrefixes prefixes : RubberGenerated) { + + Consumer recipeAction = (obj) -> { + ZPMRubberChanges.doStacksCointainAndReplace( + ((GTShapedRecipe) obj).getInput(), + GTOreDictUnificator.get(prefixes, Materials.Silicone, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + ZPMRubberChanges.doStacksCointainAndReplace( + ((GTShapedRecipe) obj).getInput(), + GTOreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + }; + + /* + * || ZPMRubberChanges.doStacksCointainAndReplace(((GT_Shaped_Recipe) obj).getInput(), + * GTOreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), true, + * WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + */ + + CraftingManager.getInstance() + .getRecipeList() + .stream() + .filter(recipeFilter) + .forEach(recipeAction); + bufferedRecipeList.stream() + .filter(recipeFilter) + .forEach(recipeAction); + } + } + + private static void rewriteMachineRecipes(ItemStack stack, OrePrefixes[] RubberGenerated, GTRecipe recipe) { + if (ZPMRubberChanges.doStacksCointainAndReplace(recipe.mInputs, stack, false)) { + for (OrePrefixes prefixes : RubberGenerated) { + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mInputs, + GTOreDictUnificator.get(prefixes, Materials.Silicone, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mOutputs, + GTOreDictUnificator.get(prefixes, Materials.Silicon, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mInputs, + GTOreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mOutputs, + GTOreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + } + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mFluidInputs, + Materials.Silicone.getMolten(1), + true, + WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) + .getFluid()); + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mFluidOutputs, + Materials.Silicone.getMolten(1), + true, + WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) + .getFluid()); + + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mFluidInputs, + Materials.StyreneButadieneRubber.getMolten(1), + true, + WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) + .getFluid()); + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mFluidOutputs, + Materials.StyreneButadieneRubber.getMolten(1), + true, + WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) + .getFluid()); + } + if (ZPMRubberChanges.doStacksCointainAndReplace(recipe.mOutputs, stack, false)) { + for (OrePrefixes prefixes : RubberGenerated) { + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mInputs, + GTOreDictUnificator.get(prefixes, Materials.Silicone, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mOutputs, + GTOreDictUnificator.get(prefixes, Materials.Silicone, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mInputs, + GTOreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mOutputs, + GTOreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + } + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mFluidInputs, + Materials.Silicone.getMolten(1), + true, + WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) + .getFluid()); + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mFluidOutputs, + Materials.Silicone.getMolten(1), + true, + WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) + .getFluid()); + + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mFluidInputs, + Materials.StyreneButadieneRubber.getMolten(1), + true, + WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) + .getFluid()); + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mFluidOutputs, + Materials.StyreneButadieneRubber.getMolten(1), + true, + WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) + .getFluid()); + } + } + + private static void rewriteAsslineRecipes(ItemStack stack, OrePrefixes[] RubberGenerated, + RecipeAssemblyLine recipe) { + for (OrePrefixes prefixes : RubberGenerated) { + if (ZPMRubberChanges.doStacksCointainAndReplace(recipe.mInputs, stack, false)) { + + GTLog.out.print(Arrays.toString(recipe.mInputs)); + + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mInputs, + GTOreDictUnificator.get(prefixes, Materials.Silicone, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + ZPMRubberChanges.doStacksCointainAndReplace( + new Object[] { recipe.mOutput }, + GTOreDictUnificator.get(prefixes, Materials.Silicone, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mInputs, + GTOreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + ZPMRubberChanges.doStacksCointainAndReplace( + new Object[] { recipe.mOutput }, + GTOreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + } + if (ZPMRubberChanges.doStacksCointainAndReplace(new Object[] { recipe.mOutput }, stack, false)) { + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mInputs, + GTOreDictUnificator.get(prefixes, Materials.Silicone, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + ZPMRubberChanges.doStacksCointainAndReplace( + new Object[] { recipe.mOutput }, + GTOreDictUnificator.get(prefixes, Materials.Silicone, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mInputs, + GTOreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + ZPMRubberChanges.doStacksCointainAndReplace( + new Object[] { recipe.mOutput }, + GTOreDictUnificator.get(prefixes, Materials.StyreneButadieneRubber, 1), + true, + WerkstoffMaterialPool.PTMEGElastomer.get(prefixes)); + } + } + if (ZPMRubberChanges.doStacksCointainAndReplace(recipe.mInputs, stack, false)) { + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mFluidInputs, + Materials.Silicone.getMolten(1), + true, + WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) + .getFluid()); + + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mFluidInputs, + Materials.StyreneButadieneRubber.getMolten(1), + true, + WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) + .getFluid()); + } + if (ZPMRubberChanges.doStacksCointainAndReplace(new Object[] { recipe.mOutput }, stack, false)) { + ZPMRubberChanges.doStacksCointainAndReplace( + recipe.mFluidInputs, + Materials.StyreneButadieneRubber.getMolten(1), + true, + WerkstoffMaterialPool.PTMEGElastomer.getMolten(1) + .getFluid()); + } + } + + private static ItemStack[] replaceArrayWith(ItemStack[] stackArray, Materials source, Werkstoff target) { + for (int i = 0; i < stackArray.length; i++) { + ItemStack stack = stackArray[i]; + if (!BWUtil.checkStackAndPrefix(stack)) continue; + stackArray[i] = replaceStackWith(stack, source, target); + } + return stackArray; + } + + private static ItemStack replaceStackWith(ItemStack stack, Materials source, Werkstoff target) { + ItemData ass = GTOreDictUnificator.getAssociation(stack); + if (ass.mMaterial.mMaterial.equals(source)) + if (target.hasItemType(ass.mPrefix)) stack = target.get(ass.mPrefix, stack.stackSize); + return stack; + } + + private static boolean doStacksCointainAndReplace(FluidStack[] stacks, FluidStack stack, boolean replace, + Fluid... replacement) { + boolean replaced = false; + for (int i = 0; i < stacks.length; i++) { + if (GTUtility.areFluidsEqual(stack, stacks[i])) if (!replace) return true; + else { + int amount = stacks[i].amount; + stacks[i] = new FluidStack(replacement[0], amount); + replaced = true; + } + } + return replaced; + } + + private static boolean doStacksCointainAndReplace(Object[] stacks, ItemStack stack, boolean replace, + ItemStack... replacement) { + // GTLog.out.print("In doStacksCointainAndReplace!\n"); + boolean replaced = false; + for (int i = 0; i < stacks.length; i++) { + if (!GTUtility.isStackValid(stacks[i])) { + if (stacks[i] instanceof ArrayList && ((ArrayList) stacks[i]).size() > 0) { + if (GTUtility.areStacksEqual(stack, (ItemStack) ((ArrayList) stacks[i]).get(0), true)) + if (!replace) return true; + else { + int amount = ((ItemStack) ((ArrayList) stacks[i]).get(0)).stackSize; + stacks[i] = new ArrayList<>(); + ((ArrayList) stacks[i]).add(BWUtil.setStackSize(replacement[0], amount)); + replaced = true; + + GTLog.out.print("Replaced recipe!: " + stack.getDisplayName() + " "); + } + + } else continue; + } else if (GTUtility.areStacksEqual(stack, (ItemStack) stacks[i], true)) if (!replace) return true; + else { + int amount = ((ItemStack) stacks[i]).stackSize; + stacks[i] = BWUtil.setStackSize(replacement[0], amount); + replaced = true; + } + } + return replaced; + } +} diff --git a/src/main/java/gtnhlanth/util/DescTextLocalization.java b/src/main/java/gtnhlanth/util/DescTextLocalization.java new file mode 100644 index 0000000000..f736e466e0 --- /dev/null +++ b/src/main/java/gtnhlanth/util/DescTextLocalization.java @@ -0,0 +1,24 @@ +package gtnhlanth.util; + +import net.minecraft.util.StatCollector; + +public class DescTextLocalization { + + public static final String BLUEPRINT_INFO = StatCollector.translateToLocal("gtnhlanth.tt.blueprint"); + + public static final String BEAMLINE_SCANNER_INFO = StatCollector.translateToLocal("gtnhlanth.tt.beaminfo"); + + public static String[] addText(String preFix, int length) { + String[] text = new String[length]; + for (int i = 0; i < length; i++) { + text[i] = StatCollector.translateToLocal(preFix + "." + i); + } + return text; + } + + public static String addDotText(int dotNum) { + + return StatCollector.translateToLocalFormatted("gtnhlanth.tt.hintdot", dotNum + ""); + + } +} diff --git a/src/main/java/gtnhlanth/util/Util.java b/src/main/java/gtnhlanth/util/Util.java new file mode 100644 index 0000000000..e325965966 --- /dev/null +++ b/src/main/java/gtnhlanth/util/Util.java @@ -0,0 +1,55 @@ +package gtnhlanth.util; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizons.modularui.api.math.Pos2d; + +public class Util { + + public static void depleteDurabilityOfStack(ItemStack stack, int damage) { + + if (stack == null) return; + + if (stack.stackSize == 0) // Might happen, who knows + return; + + if (damage + stack.getItemDamage() > stack.getMaxDamage()) { + stack.stackSize--; + } else { + + stack.setItemDamage(stack.getItemDamage() + damage); + + } + + } + + public static List getGridPositions(int totalCount, int xOrigin, int yOrigin, int xDirMaxCount, + int yDirMaxCount, int distanceBetweenSlots) { + // 18 pixels to get to a new grid for placing an item tile since they are 16x16 and have 1 pixel buffers + // around them. + + int distance = 18 + distanceBetweenSlots; + + List results = new ArrayList<>(); + int count = 0; + loop: for (int j = 0; j < yDirMaxCount; j++) { + for (int i = 0; i < xDirMaxCount; i++) { + if (count >= totalCount) break loop; + results.add(new Pos2d(xOrigin + i * distance, yOrigin + j * distance)); + count++; + } + } + return results; + } + + public static boolean coolantFluidCheck(FluidStack inStack, int fluidToConsume) { + return (inStack.amount < fluidToConsume + || (!inStack.isFluidEqual(FluidRegistry.getFluidStack("ic2coolant", 1)) && inStack.getFluid() + .getTemperature() > 200)); + } +} diff --git a/src/main/java/gtnhlanth/xmod/nei/NEIConfig.java b/src/main/java/gtnhlanth/xmod/nei/NEIConfig.java new file mode 100644 index 0000000000..839fa4fab2 --- /dev/null +++ b/src/main/java/gtnhlanth/xmod/nei/NEIConfig.java @@ -0,0 +1,26 @@ +package gtnhlanth.xmod.nei; + +import codechicken.nei.api.IConfigureNEI; +import gtnhlanth.Tags; + +public class NEIConfig implements IConfigureNEI { + + public static boolean isAdded = true; + + @Override + public String getName() { + return "GTNH: Lanthanides NEI"; + } + + @Override + public String getVersion() { + return Tags.VERSION; + } + + @Override + public void loadConfig() { + isAdded = false; + + isAdded = true; + } +} diff --git a/src/main/java/kekztech/Items.java b/src/main/java/kekztech/Items.java index 426dfb7f58..800f69c77e 100644 --- a/src/main/java/kekztech/Items.java +++ b/src/main/java/kekztech/Items.java @@ -5,9 +5,8 @@ import java.util.Arrays; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; -import common.items.MetaItem_CraftingComponent; - -import util.Util; +import kekztech.common.items.MetaItemCraftingComponent; +import kekztech.util.Util; public enum Items { @@ -52,12 +51,12 @@ public enum Items { } public ItemStack getNonOreDictedItemStack(int amount) { - return new ItemStack(MetaItem_CraftingComponent.getInstance(), amount, this.getMetaID()); + return new ItemStack(MetaItemCraftingComponent.getInstance(), amount, this.getMetaID()); } public ItemStack getOreDictedItemStack(int amount) { return this.getOreDictName() != null ? Util.getStackofAmountFromOreDict(this.getOreDictName(), amount) - : new ItemStack(MetaItem_CraftingComponent.getInstance(), amount, this.getMetaID()); + : new ItemStack(MetaItemCraftingComponent.getInstance(), amount, this.getMetaID()); } public String getOreDictName() { diff --git a/src/main/java/kekztech/KekzCore.java b/src/main/java/kekztech/KekzCore.java index 3962faccf2..02ed1febd9 100644 --- a/src/main/java/kekztech/KekzCore.java +++ b/src/main/java/kekztech/KekzCore.java @@ -7,7 +7,6 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import com.google.common.collect.ImmutableSet; -import common.CommonProxy; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.SidedProxy; @@ -17,6 +16,7 @@ import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import gregtech.GT_Version; import gregtech.api.enums.Mods; +import kekztech.common.CommonProxy; /** * My GT-Meta-IDs are: 13101 - 13500 @@ -47,7 +47,7 @@ public class KekzCore { @Mod.Instance(Mods.Names.KEKZ_TECH) public static KekzCore instance; - @SidedProxy(clientSide = "client.ClientProxy", serverSide = "kekztech.ServerProxy") + @SidedProxy(clientSide = "kekztech.client.ClientProxy", serverSide = "kekztech.ServerProxy") public static CommonProxy proxy; @Mod.EventHandler diff --git a/src/main/java/kekztech/ServerProxy.java b/src/main/java/kekztech/ServerProxy.java index e509ab1722..7453b44b3f 100644 --- a/src/main/java/kekztech/ServerProxy.java +++ b/src/main/java/kekztech/ServerProxy.java @@ -1,6 +1,6 @@ package kekztech; -import common.CommonProxy; +import kekztech.common.CommonProxy; public class ServerProxy extends CommonProxy { } diff --git a/src/main/java/kekztech/client/ClientProxy.java b/src/main/java/kekztech/client/ClientProxy.java new file mode 100644 index 0000000000..8ac8bbd710 --- /dev/null +++ b/src/main/java/kekztech/client/ClientProxy.java @@ -0,0 +1,18 @@ +package kekztech.client; + +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import kekztech.common.CommonProxy; + +public class ClientProxy extends CommonProxy { + + @Override + public void preInit(final FMLPreInitializationEvent e) { + super.preInit(e); + } + + @Override + public void init(final FMLInitializationEvent e) { + super.init(e); + } +} diff --git a/src/main/java/kekztech/client/gui/KTUITextures.java b/src/main/java/kekztech/client/gui/KTUITextures.java new file mode 100644 index 0000000000..c502646b5a --- /dev/null +++ b/src/main/java/kekztech/client/gui/KTUITextures.java @@ -0,0 +1,21 @@ +package kekztech.client.gui; + +import com.gtnewhorizons.modularui.api.drawable.UITexture; + +import kekztech.KekzCore; + +public class KTUITextures { + + public static final UITexture OVERLAY_BUTTON_WIRELESS_ON = UITexture + .fullImage(KekzCore.MODID, "gui/overlay_button/wireless_on"); + + public static final UITexture OVERLAY_BUTTON_WIRELESS_OFF = UITexture + .fullImage(KekzCore.MODID, "gui/overlay_button/wireless_off"); + + public static final UITexture OVERLAY_BUTTON_WIRELESS_OFF_DISABLED = UITexture + .fullImage(KekzCore.MODID, "gui/overlay_button/wireless_off_disabled"); + + public static final UITexture OVERLAY_BUTTON_WIRELESS_REBALANCE = UITexture + .fullImage(KekzCore.MODID, "gui/overlay_button/wireless_rebalance"); + +} diff --git a/src/main/java/kekztech/common/Blocks.java b/src/main/java/kekztech/common/Blocks.java new file mode 100644 index 0000000000..013bcf54d5 --- /dev/null +++ b/src/main/java/kekztech/common/Blocks.java @@ -0,0 +1,61 @@ +package kekztech.common; + +import net.minecraft.block.Block; + +import gregtech.api.enums.Mods; +import kekztech.KekzCore; +import kekztech.common.blocks.BlockGDCUnit; +import kekztech.common.blocks.BlockIchorJar; +import kekztech.common.blocks.BlockLapotronicEnergyUnit; +import kekztech.common.blocks.BlockLargeHexPlate; +import kekztech.common.blocks.BlockTFFTStorageField; +import kekztech.common.blocks.BlockThaumiumReinforcedJar; +import kekztech.common.blocks.BlockYSZUnit; + +public class Blocks { + + public static Block yszUnit; + public static Block gdcUnit; + public static Block tfftStorageField; + public static Block jarThaumiumReinforced; + public static Block jarIchor; + public static Block lscLapotronicEnergyUnit; + + public static Block largeHexPlate; + + public static void preInit() { + KekzCore.LOGGER.info("Registering blocks..."); + + registerBlocks_SOFC(); + registerBlocks_TFFT(); + if (Mods.Thaumcraft.isModLoaded()) { + registerBlocks_Jars(); + } + registerBlocks_LSC(); + registerBlocks_Cosmetics(); + + KekzCore.LOGGER.info("Finished registering blocks"); + } + + private static void registerBlocks_SOFC() { + yszUnit = BlockYSZUnit.registerBlock(); + gdcUnit = BlockGDCUnit.registerBlock(); + } + + private static void registerBlocks_TFFT() { + tfftStorageField = BlockTFFTStorageField.registerBlock(); + } + + private static void registerBlocks_Jars() { + jarThaumiumReinforced = BlockThaumiumReinforcedJar.registerBlock(); + jarIchor = BlockIchorJar.registerBlock(); + } + + private static void registerBlocks_LSC() { + lscLapotronicEnergyUnit = BlockLapotronicEnergyUnit.registerBlock(); + } + + private static void registerBlocks_Cosmetics() { + largeHexPlate = BlockLargeHexPlate.registerBlock(); + } +} diff --git a/src/main/java/kekztech/common/CommonProxy.java b/src/main/java/kekztech/common/CommonProxy.java new file mode 100644 index 0000000000..1baa4e5c69 --- /dev/null +++ b/src/main/java/kekztech/common/CommonProxy.java @@ -0,0 +1,46 @@ +package kekztech.common; + +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPostInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import gregtech.api.enums.Mods; +import kekztech.Items; +import kekztech.common.items.ErrorItem; +import kekztech.common.items.MetaItemCraftingComponent; +import kekztech.common.tileentities.MTEHatchTFFT; + +public class CommonProxy { + + public void preInit(final FMLPreInitializationEvent e) { + // Items + ErrorItem.getInstance() + .registerItem(); + MetaItemCraftingComponent.getInstance() + .registerItem(); + Items.registerOreDictNames(); + // Blocks + Blocks.preInit(); + // TileEntities + TileEntities.preInit(); + if (Mods.Thaumcraft.isModLoaded() && Mods.ThaumicTinkerer.isModLoaded()) { + // TC Research + Researches.preInit(); + } + } + + public void init(final FMLInitializationEvent e) { + // GregTech Meta TileEntities + TileEntities.init(); + } + + public void postInit(final FMLPostInitializationEvent e) { + // Recipes + Recipes.postInit(); + if (Mods.Thaumcraft.isModLoaded() && Mods.ThaumicTinkerer.isModLoaded()) { + // Research + Researches.postInit(); + } + + MTEHatchTFFT.registerAEIntegration(); + } +} diff --git a/src/main/java/kekztech/common/Recipes.java b/src/main/java/kekztech/common/Recipes.java new file mode 100644 index 0000000000..e6472c23a3 --- /dev/null +++ b/src/main/java/kekztech/common/Recipes.java @@ -0,0 +1,143 @@ +package kekztech.common; + +import static gregtech.api.enums.Mods.ThaumicTinkerer; + +import java.util.HashMap; + +import net.minecraft.item.ItemStack; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Mods; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import kekztech.KekzCore; +import kekztech.common.recipeLoaders.AlloySmelter; +import kekztech.common.recipeLoaders.Assembler; +import kekztech.common.recipeLoaders.AssemblyLine; +import kekztech.common.recipeLoaders.ChemicalReactor; +import kekztech.common.recipeLoaders.Crafting; +import kekztech.common.recipeLoaders.FormingPress; +import kekztech.common.recipeLoaders.Mixer; +import kekztech.common.recipeLoaders.ResearchableAssemblyLine; +import kekztech.common.recipeLoaders.Unpackager; +import thaumcraft.api.ItemApi; +import thaumcraft.api.ThaumcraftApi; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.crafting.InfusionRecipe; + +public class Recipes { + + public static final HashMap infusionRecipes = new HashMap<>(); + + public static void postInit() { + KekzCore.LOGGER.info("Registering recipes..."); + + new AlloySmelter().run(); + new Assembler().run(); + new AssemblyLine().run(); + new ChemicalReactor().run(); + new Crafting().run(); + new FormingPress().run(); + new Mixer().run(); + new ResearchableAssemblyLine().run(); + new Unpackager().run(); + + if (Mods.Thaumcraft.isModLoaded()) { + registerRecipes_Jars(); + } + + KekzCore.LOGGER.info("Finished registering recipes"); + } + + private static void registerRecipes_Jars() { + + // Thaumium Reinforced Jar + final ItemStack[] recipe_jarthaumiumreinforced = { + GameRegistry.makeItemStack("Thaumcraft:ItemResource", 15, 1, null), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1), + new ItemStack(net.minecraft.init.Blocks.glass_pane), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1), + new ItemStack(net.minecraft.init.Blocks.glass_pane), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Titanium, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1), + new ItemStack(net.minecraft.init.Blocks.glass_pane), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Thaumium, 1), + new ItemStack(net.minecraft.init.Blocks.glass_pane), }; + final AspectList aspects_jarthaumiumreinforced = new AspectList().add(Aspect.ARMOR, 64) + .add(Aspect.ORDER, 32) + .add(Aspect.WATER, 32) + .add(Aspect.GREED, 16) + .add(Aspect.VOID, 16) + .add(Aspect.AIR, 8); + infusionRecipes.put( + "THAUMIUMREINFORCEDJAR", + ThaumcraftApi.addInfusionCraftingRecipe( + "THAUMIUMREINFORCEDJAR", + new ItemStack(Blocks.jarThaumiumReinforced, 1, 0), + 5, + aspects_jarthaumiumreinforced, + ItemApi.getBlock("blockJar", 0), + recipe_jarthaumiumreinforced)); + // Thaumium Reinforced Void Jar + final ItemStack[] recipe_voidjarupgrade = { + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Obsidian, 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Blaze, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.EnderEye, 1), ItemApi.getItem("itemNugget", 5) }; + final AspectList aspects_voidjarupgrade = new AspectList().add(Aspect.VOID, 14) + .add(Aspect.MAGIC, 14) + .add(Aspect.ENTROPY, 14) + .add(Aspect.WATER, 14); + infusionRecipes.put( + "THAUMIUMREINFORCEDVOIDJAR", + ThaumcraftApi.addInfusionCraftingRecipe( + "THAUMIUMREINFORCEDJAR", + new ItemStack(Blocks.jarThaumiumReinforced, 1, 3), + 2, + aspects_voidjarupgrade, + new ItemStack(Blocks.jarThaumiumReinforced, 1, 0), + recipe_voidjarupgrade)); + + final ItemStack[] recipe_jarichor = { GTModHandler.getModItem(ThaumicTinkerer.ID, "kamiResource", 1, 0), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1), + new ItemStack(net.minecraft.init.Blocks.glass_pane), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Osmiridium, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1), + new ItemStack(net.minecraft.init.Blocks.glass_pane), + GTOreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Diamond, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1), + new ItemStack(net.minecraft.init.Blocks.glass_pane), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Osmiridium, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Diamond, 1), + new ItemStack(net.minecraft.init.Blocks.glass_pane), }; + final AspectList aspects_jarichor = new AspectList().add(Aspect.ARMOR, 256) + .add(Aspect.ELDRITCH, 128) + .add(Aspect.ORDER, 128) + .add(Aspect.WATER, 128) + .add(Aspect.GREED, 64) + .add(Aspect.VOID, 64) + .add(Aspect.AIR, 32); + infusionRecipes.put( + "ICHORJAR", + ThaumcraftApi.addInfusionCraftingRecipe( + "ICHORJAR", + new ItemStack(Blocks.jarIchor, 1, 0), + 15, + aspects_jarichor, + ItemApi.getBlock("blockJar", 0), + recipe_jarichor)); + // Ichor Void Jar + infusionRecipes.put( + "ICHORVOIDJAR", + ThaumcraftApi.addInfusionCraftingRecipe( + "ICHORJAR", + new ItemStack(Blocks.jarIchor, 1, 3), + 5, + aspects_voidjarupgrade, + new ItemStack(Blocks.jarIchor, 1, 0), + recipe_voidjarupgrade)); + } + +} diff --git a/src/main/java/kekztech/common/Researches.java b/src/main/java/kekztech/common/Researches.java new file mode 100644 index 0000000000..8944f7a486 --- /dev/null +++ b/src/main/java/kekztech/common/Researches.java @@ -0,0 +1,71 @@ +package kekztech.common; + +import net.minecraft.item.ItemStack; + +import kekztech.KekzCore; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.api.research.ResearchItem; +import thaumcraft.api.research.ResearchPage; +import thaumic.tinkerer.common.research.KamiResearchItem; + +public class Researches { + + public static final String THAUMIUMREINFORCEDJAR = "THAUMIUMREINFORCEDJAR"; + public static final String ICHORJAR = "ICHORJAR"; + + public static void preInit() { + // Blacklist these researches from being a requirement to unlock TTKami + KekzCore.LOGGER.info("Blacklisting research " + THAUMIUMREINFORCEDJAR + " from /iskamiunlocked"); + KamiResearchItem.Blacklist.add(ICHORJAR); + KekzCore.LOGGER.info("Blacklisting research" + ICHORJAR + "from /iskamiunlocked"); + KamiResearchItem.Blacklist.add(ICHORJAR); + } + + public static void postInit() { + final AspectList aspects_jarthaumiumreinforced = new AspectList().add(Aspect.ARMOR, 3) + .add(Aspect.WATER, 3) + .add(Aspect.GREED, 3) + .add(Aspect.VOID, 3); + @SuppressWarnings("unused") + final ResearchItem jar_thaumiumreinforced = new ResearchItem( + "THAUMIUMREINFORCEDJAR", + "ALCHEMY", + aspects_jarthaumiumreinforced, + 3, + -4, + 2, + new ItemStack(Blocks.jarThaumiumReinforced, 1)) + .setPages( + new ResearchPage("kekztech.research_page.THAUMIUMREINFORCEDJAR.0"), + new ResearchPage(Recipes.infusionRecipes.get("THAUMIUMREINFORCEDJAR")), + new ResearchPage(Recipes.infusionRecipes.get("THAUMIUMREINFORCEDVOIDJAR")), + new ResearchPage("kekztech.research_page.THAUMIUMREINFORCEDJAR.1")) + .setConcealed() + .setParents("JARLABEL") + .registerResearchItem(); + + final AspectList aspects_jarichor = new AspectList().add(Aspect.ARMOR, 3) + .add(Aspect.ELDRITCH, 3) + .add(Aspect.WATER, 3) + .add(Aspect.GREED, 5) + .add(Aspect.VOID, 5); + @SuppressWarnings("unused") + final ResearchItem jar_ichor = new ResearchItem( + "ICHORJAR", + "ALCHEMY", + aspects_jarichor, + 2, + -5, + 3, + new ItemStack(Blocks.jarIchor, 1)) + .setPages( + new ResearchPage("kekztech.research_page.ICHORJAR.0"), + new ResearchPage(Recipes.infusionRecipes.get("ICHORJAR")), + new ResearchPage(Recipes.infusionRecipes.get("ICHORVOIDJAR"))) + .setConcealed() + .setParents("THAUMIUMREINFORCEDJAR") + .setParentsHidden("ICHOR") + .registerResearchItem(); + } +} diff --git a/src/main/java/kekztech/common/TileEntities.java b/src/main/java/kekztech/common/TileEntities.java new file mode 100644 index 0000000000..f510b481f9 --- /dev/null +++ b/src/main/java/kekztech/common/TileEntities.java @@ -0,0 +1,56 @@ +package kekztech.common; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.MetaTileEntityIDs; +import gregtech.api.enums.Mods; +import kekztech.common.tileentities.MTEHatchTFFT; +import kekztech.common.tileentities.MTELapotronicSuperCapacitor; +import kekztech.common.tileentities.MTESOFuelCellMK1; +import kekztech.common.tileentities.MTESOFuelCellMK2; +import kekztech.common.tileentities.MTETankTFFT; +import kekztech.common.tileentities.TileEntityIchorJar; +import kekztech.common.tileentities.TileEntityIchorVoidJar; +import kekztech.common.tileentities.TileEntityThaumiumReinforcedJar; +import kekztech.common.tileentities.TileEntityThaumiumReinforcedVoidJar; + +public class TileEntities { + + // Multiblock controllers + public static MTESOFuelCellMK1 sofc1; + public static MTESOFuelCellMK2 sofc2; + public static MTETankTFFT tfft; + public static MTELapotronicSuperCapacitor lsc; + + // Singleblocks + public static MTEHatchTFFT tfftHatch; + + public static void preInit() { + if (Mods.Thaumcraft.isModLoaded()) { + GameRegistry.registerTileEntity(TileEntityThaumiumReinforcedJar.class, "kekztech_thaumiumreinforcedjar"); + GameRegistry + .registerTileEntity(TileEntityThaumiumReinforcedVoidJar.class, "kekztech_thaumiumreinforcedvoidjar"); + GameRegistry.registerTileEntity(TileEntityIchorJar.class, "kekztech_ichorjar"); + GameRegistry.registerTileEntity(TileEntityIchorVoidJar.class, "kekztech_ichorvoidjar"); + } + } + + public static void init() { + // Multiblock controllers + sofc1 = new MTESOFuelCellMK1( + MetaTileEntityIDs.sofc1.ID, + "multimachine.fuelcellmk1", + "Solid-Oxide Fuel Cell Mk I"); + sofc2 = new MTESOFuelCellMK2( + MetaTileEntityIDs.sofc2.ID, + "multimachine.fuelcellmk2", + "Solid-Oxide Fuel Cell Mk II"); + tfft = new MTETankTFFT(MetaTileEntityIDs.tfft.ID, "multimachine.tfft", "T.F.F.T"); + lsc = new MTELapotronicSuperCapacitor( + MetaTileEntityIDs.lsc.ID, + "multimachine.supercapacitor", + "Lapotronic Supercapacitor"); + + // Singleblocks + tfftHatch = new MTEHatchTFFT(MetaTileEntityIDs.tfftHatch.ID, "machine.tffthatch", "T.F.F.T Multi I/O Hatch"); + } +} diff --git a/src/main/java/kekztech/common/blocks/BaseGTUpdateableBlock.java b/src/main/java/kekztech/common/blocks/BaseGTUpdateableBlock.java new file mode 100644 index 0000000000..6c81807a82 --- /dev/null +++ b/src/main/java/kekztech/common/blocks/BaseGTUpdateableBlock.java @@ -0,0 +1,57 @@ +package kekztech.common.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EnumCreatureType; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import gregtech.api.GregTechAPI; + +/** + * Any blocks that are used as structure parts for GregTech multi machines have to inherit from this class. Otherwise + * the checkMachine() method that verifies a machine's structure won't be called correctly. + */ +public abstract class BaseGTUpdateableBlock extends Block { + + protected BaseGTUpdateableBlock(Material material) { + super(material); + GregTechAPI.registerMachineBlock(this, -1); + super.setHarvestLevel("wrench", 2); + } + + @Override + public int damageDropped(int meta) { + return meta; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public boolean canEntityDestroy(IBlockAccess world, int x, int y, int z, Entity entity) { + return false; + } + + @Override + public boolean canCreatureSpawn(EnumCreatureType type, IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMetaData) { + if (GregTechAPI.isMachineBlock(this, aMetaData)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } +} diff --git a/src/main/java/kekztech/common/blocks/BlockGDCUnit.java b/src/main/java/kekztech/common/blocks/BlockGDCUnit.java new file mode 100644 index 0000000000..515c5127c6 --- /dev/null +++ b/src/main/java/kekztech/common/blocks/BlockGDCUnit.java @@ -0,0 +1,29 @@ +package kekztech.common.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; + +import cpw.mods.fml.common.registry.GameRegistry; +import kekztech.KekzCore; + +public class BlockGDCUnit extends BaseGTUpdateableBlock { + + private static final BlockGDCUnit instance = new BlockGDCUnit(); + + private BlockGDCUnit() { + super(Material.iron); + } + + public static Block registerBlock() { + final String blockName = "kekztech_gdcceramicelectrolyteunit_block"; + instance.setBlockName(blockName); + instance.setCreativeTab(CreativeTabs.tabMisc); + instance.setBlockTextureName(KekzCore.MODID + ":" + "GDCCeramicElectrolyteUnit"); + instance.setHardness(5.0f); + instance.setResistance(6.0f); + GameRegistry.registerBlock(instance, blockName); + + return instance; + } +} diff --git a/src/main/java/kekztech/common/blocks/BlockIchorJar.java b/src/main/java/kekztech/common/blocks/BlockIchorJar.java new file mode 100644 index 0000000000..68ebbc2a43 --- /dev/null +++ b/src/main/java/kekztech/common/blocks/BlockIchorJar.java @@ -0,0 +1,229 @@ +package kekztech.common.blocks; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kekztech.common.itemBlocks.ItemBlockIchorJar; +import kekztech.common.tileentities.TileEntityIchorJar; +import kekztech.common.tileentities.TileEntityIchorVoidJar; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.common.blocks.BlockJar; +import thaumcraft.common.config.ConfigBlocks; +import thaumcraft.common.config.ConfigItems; +import thaumcraft.common.items.ItemEssence; +import thaumcraft.common.tiles.TileJarFillable; + +public class BlockIchorJar extends BlockJar { + + private static final BlockIchorJar INSTANCE = new BlockIchorJar(); + + private BlockIchorJar() { + super(); + + super.setHardness(12.0F); + super.setResistance(3.0f); + } + + public static Block registerBlock() { + final String blockName = "kekztech_ichorjar_block"; + INSTANCE.setBlockName(blockName); + INSTANCE.setHarvestLevel("pickaxe", 3); + GameRegistry.registerBlock(INSTANCE, ItemBlockIchorJar.class, blockName); + + return INSTANCE; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister ir) { + super.iconLiquid = ir.registerIcon("thaumcraft:animatedglow"); + super.iconJarSide = ir.registerIcon("kekztech:ichor_jar_side"); + super.iconJarTop = ir.registerIcon("kekztech:ichor_jar_top"); + super.iconJarTopVoid = ir.registerIcon("kekztech:ichor_jar_top_void"); + super.iconJarSideVoid = ir.registerIcon("kekztech:ichor_jar_side_void"); + super.iconJarBottom = ir.registerIcon("kekztech:ichor_jar_bottom"); + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings({ "unchecked" }) + public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) { + par3List.add(new ItemStack(par1, 1, 0)); // Normal jar + par3List.add(new ItemStack(par1, 1, 3)); // Void jar + } + + @Override + public TileEntity createTileEntity(World world, int meta) { + if (meta == 3) { + return new TileEntityIchorVoidJar(); + } else { + return new TileEntityIchorJar(); + } + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float f1, float f2, + float f3) { + // Call parent method to handle jar emptying, labels stuff etc + super.onBlockActivated(world, x, y, z, player, side, f1, f2, f3); + // Interact with Essentia Phials if the player holds one + final ItemStack heldItem = player.getHeldItem(); + if (heldItem != null && heldItem.getItem() == ConfigItems.itemEssence) { + final TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof TileEntityIchorJar) { + return dealWithPhial(world, player, x, y, z); + } else if (te instanceof TileEntityIchorVoidJar) { + return dealWithPhial(world, player, x, y, z); + } + } + + return true; + } + + /** + * Handle compatibility with Essentia Phials + * + * @param world Pass through from onBlockActivated() + * @param player Pass through from onBlockActivated() + * @param x Pass through from onBlockActivated() + * @param y Pass through from onBlockActivated() + * @param z Pass through from onBlockActivated() + * @return Not sure tbh + */ + private boolean dealWithPhial(World world, EntityPlayer player, int x, int y, int z) { + final TileJarFillable jarTE = (TileJarFillable) world.getTileEntity(x, y, z); + final ItemStack heldItem = player.getHeldItem(); + // Check whether to fill or to drain the phial + if (heldItem.getItemDamage() == 0) { + if (jarTE.amount >= 8) { + if (world.isRemote) { + player.swingItem(); + return false; + } + + final Aspect jarAspect = Aspect.getAspect(jarTE.aspect.getTag()); + if (jarTE.takeFromContainer(jarAspect, 8)) { + // Take an empty phial from the player's inventory + heldItem.stackSize--; + // Fill a new phial + final ItemStack filledPhial = new ItemStack(ConfigItems.itemEssence, 1, 1); + final AspectList phialContent = new AspectList().add(jarAspect, 8); + ((ItemEssence) ConfigItems.itemEssence).setAspects(filledPhial, phialContent); + // Drop on ground if there's no inventory space + if (!player.inventory.addItemStackToInventory(filledPhial)) { + world.spawnEntityInWorld( + new EntityItem(world, (float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F, filledPhial)); + } + + world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); + player.inventoryContainer.detectAndSendChanges(); + return true; + } + } + } else { + final AspectList phialContent = ((ItemEssence) ConfigItems.itemEssence).getAspects(heldItem); + if (phialContent != null && phialContent.size() == 1) { + final Aspect phialAspect = phialContent.getAspects()[0]; + if (jarTE.amount + 8 <= jarTE.maxAmount && jarTE.doesContainerAccept(phialAspect)) { + if (world.isRemote) { + player.swingItem(); + return false; + } + + if (jarTE.addToContainer(phialAspect, 8) == 0) { + world.markBlockForUpdate(x, y, z); + jarTE.markDirty(); + heldItem.stackSize--; + // Drop on ground if there's no inventory space + if (!player.inventory.addItemStackToInventory(new ItemStack(ConfigItems.itemEssence, 1, 0))) { + world.spawnEntityInWorld( + new EntityItem( + world, + (float) x + 0.5F, + (float) y + 0.5F, + (float) z + 0.5F, + new ItemStack(ConfigItems.itemEssence, 1, 0))); + } + + world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); + player.inventoryContainer.detectAndSendChanges(); + return true; + } + } + } + } + + return true; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block par5, int par6) { + final TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof TileEntityIchorJar) { + final TileEntityIchorJar ite = (TileEntityIchorJar) te; + breakBlockWarpy(world, x, y, z, ite.amount, 200, 6.0F); + } else if (te instanceof TileEntityIchorVoidJar) { + final TileEntityIchorVoidJar ite = (TileEntityIchorVoidJar) te; + breakBlockWarpy(world, x, y, z, ite.amount, 200, 6.0F); + } + super.breakBlock(world, x, y, z, par5, par6); + } + + private void breakBlockWarpy(World world, int x, int y, int z, int fillAmount, int iterations, + float explosionStrength) { + if (fillAmount > 0) { + // Create a decent explosion in the center of the block (TNT has strength 4.0F) + world.createExplosion(null, x + 0.5D, y + 0.5D, z + 0.5D, explosionStrength, false); + + // Place a lot of Flux in the area + final int limit = fillAmount / 16; + int created = 0; + for (int i = 0; i < iterations; i++) { + final int xf = x + world.rand.nextInt(7) - world.rand.nextInt(7); + final int yf = x + world.rand.nextInt(7) - world.rand.nextInt(7); + final int zf = x + world.rand.nextInt(7) - world.rand.nextInt(7); + if (world.isAirBlock(xf, yf, zf)) { + if (yf > y) { + world.setBlock(xf, yf, zf, ConfigBlocks.blockFluxGas, 8, 3); + } else { + world.setBlock(xf, yf, zf, ConfigBlocks.blockFluxGoo, 8, 3); + } + + if (created++ > limit) { + break; + } + } + } + } + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { + return new ArrayList<>(Collections.singleton(new ItemStack(this, 1, (meta == 3) ? 3 : 0))); + } + + @Override + public void onBlockHarvested(World par1World, int par2, int par3, int par4, int par5, + EntityPlayer par6EntityPlayer) {} + + @Override + public boolean canDropFromExplosion(Explosion e) { + return false; + } +} diff --git a/src/main/java/kekztech/common/blocks/BlockLapotronicEnergyUnit.java b/src/main/java/kekztech/common/blocks/BlockLapotronicEnergyUnit.java new file mode 100644 index 0000000000..dcea8e7373 --- /dev/null +++ b/src/main/java/kekztech/common/blocks/BlockLapotronicEnergyUnit.java @@ -0,0 +1,172 @@ +package kekztech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import kekztech.common.itemBlocks.ItemBlockLapotronicEnergyUnit; + +public class BlockLapotronicEnergyUnit extends BaseGTUpdateableBlock { + + private static final BlockLapotronicEnergyUnit INSTANCE = new BlockLapotronicEnergyUnit(); + + public enum IconBaseSide implements IIconContainer { + + INSTANCE; + + @Override + public IIcon getIcon() { + return BlockLapotronicEnergyUnit.INSTANCE.iconBaseSide; + } + + @Override + public IIcon getOverlayIcon() { + return null; + } + + @Override + public ResourceLocation getTextureFile() { + return TextureMap.locationBlocksTexture; + } + } + + static { + // technically, this page is owned by me, glee8e, however, I'm kind enough to spare 1 for kekztech since + // this is basically abandon ware by now. + GTUtility.addTexturePage((byte) 42); + Textures.BlockIcons.setCasingTexture((byte) 42, (byte) 127, TextureFactory.of(IconBaseSide.INSTANCE)); + } + + private IIcon iconBaseSide; + private IIcon iconBaseTop; + + private IIcon iconLapoEmptySide; + private IIcon iconLapoEmptyTop; + private IIcon iconLapoEVSide; + private IIcon iconLapoEVTop; + private IIcon iconLapoIVSide; + private IIcon iconLapoIVTop; + private IIcon iconLapoLuVSide; + private IIcon iconLapoLuVTop; + private IIcon iconLapoZPMSide; + private IIcon iconLapoZPMTop; + private IIcon iconLapoUVSide; + private IIcon iconLapoUVTop; + private IIcon iconUltimateSide; + private IIcon iconUltimateTop; + private IIcon iconUltimateExtremeSide; + private IIcon iconUltimateExtremeTop; + private IIcon iconUltimateInsaneSide; + private IIcon iconUltimateInsaneTop; + private IIcon iconUltimateMegaSide; + private IIcon iconUltimateMegaTop; + + private BlockLapotronicEnergyUnit() { + super(Material.iron); + } + + public static Block registerBlock() { + final String blockName = "kekztech_lapotronicenergyunit_block"; + INSTANCE.setBlockName(blockName); + INSTANCE.setCreativeTab(CreativeTabs.tabMisc); + INSTANCE.setHardness(5.0f); + INSTANCE.setResistance(6.0f); + GameRegistry.registerBlock(INSTANCE, ItemBlockLapotronicEnergyUnit.class, blockName); + + return INSTANCE; + } + + @Override + public void registerBlockIcons(IIconRegister ir) { + iconBaseSide = ir.registerIcon("kekztech:LSCBase_side"); + iconBaseTop = ir.registerIcon("kekztech:LSCBase_top"); + + iconLapoEmptySide = ir.registerIcon("kekztech:LapotronicEnergyUnit6_side"); + iconLapoEmptyTop = ir.registerIcon("kekztech:LapotronicEnergyUnit6_top"); + iconLapoEVSide = ir.registerIcon("kekztech:LapotronicEnergyUnit7_side"); + iconLapoEVTop = ir.registerIcon("kekztech:LapotronicEnergyUnit7_top"); + iconLapoIVSide = ir.registerIcon("kekztech:LapotronicEnergyUnit1_side"); + iconLapoIVTop = ir.registerIcon("kekztech:LapotronicEnergyUnit1_top"); + iconLapoLuVSide = ir.registerIcon("kekztech:LapotronicEnergyUnit2_side"); + iconLapoLuVTop = ir.registerIcon("kekztech:LapotronicEnergyUnit2_top"); + iconLapoZPMSide = ir.registerIcon("kekztech:LapotronicEnergyUnit3_side"); + iconLapoZPMTop = ir.registerIcon("kekztech:LapotronicEnergyUnit3_top"); + iconLapoUVSide = ir.registerIcon("kekztech:LapotronicEnergyUnit4_side"); + iconLapoUVTop = ir.registerIcon("kekztech:LapotronicEnergyUnit4_top"); + + iconUltimateSide = ir.registerIcon("kekztech:UltimateEnergyUnit_side"); + iconUltimateTop = ir.registerIcon("kekztech:UltimateEnergyUnit_top"); + iconUltimateExtremeSide = ir.registerIcon("kekztech:ReallyUltimateEnergyUnit_side"); + iconUltimateExtremeTop = ir.registerIcon("kekztech:ReallyUltimateEnergyUnit_top"); + iconUltimateInsaneSide = ir.registerIcon("kekztech:InsanelyUltimateEnergyUnit_side"); + iconUltimateInsaneTop = ir.registerIcon("kekztech:InsanelyUltimateEnergyUnit_top"); + iconUltimateMegaSide = ir.registerIcon("kekztech:MegaUltimateEnergyUnit_side"); + iconUltimateMegaTop = ir.registerIcon("kekztech:MegaUltimateEnergyUnit_top"); + } + + @Override + @SuppressWarnings({ "unchecked" }) + public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) { + // Multi casing + par3List.add(new ItemStack(par1, 1, 0)); + // Empty capacitor + par3List.add(new ItemStack(par1, 1, 6)); + // Lapo capacitors EV - UV + par3List.add(new ItemStack(par1, 1, 7)); + par3List.add(new ItemStack(par1, 1, 1)); + par3List.add(new ItemStack(par1, 1, 2)); + par3List.add(new ItemStack(par1, 1, 3)); + par3List.add(new ItemStack(par1, 1, 4)); + // Ultimate battery + par3List.add(new ItemStack(par1, 1, 5)); + // UEV Cap + par3List.add(new ItemStack(par1, 1, 8)); + // UIV Cap + par3List.add(new ItemStack(par1, 1, 9)); + // UMV Cap + par3List.add(new ItemStack(par1, 1, 10)); + } + + @Override + public IIcon getIcon(int side, int meta) { + switch (meta) { + case 0: + return (side < 2) ? iconBaseTop : iconBaseSide; + case 1: + return (side < 2) ? iconLapoIVTop : iconLapoIVSide; + case 2: + return (side < 2) ? iconLapoLuVTop : iconLapoLuVSide; + case 3: + return (side < 2) ? iconLapoZPMTop : iconLapoZPMSide; + case 4: + return (side < 2) ? iconLapoUVTop : iconLapoUVSide; + case 5: + return (side < 2) ? iconUltimateTop : iconUltimateSide; + case 6: + return (side < 2) ? iconLapoEmptyTop : iconLapoEmptySide; + case 7: + return (side < 2) ? iconLapoEVTop : iconLapoEVSide; + case 8: + return (side < 2) ? iconUltimateExtremeTop : iconUltimateExtremeSide; + case 9: + return (side < 2) ? iconUltimateInsaneTop : iconUltimateInsaneSide; + case 10: + return (side < 2) ? iconUltimateMegaTop : iconUltimateMegaSide; + default: + return iconUltimateTop; + } + } +} diff --git a/src/main/java/kekztech/common/blocks/BlockLargeHexPlate.java b/src/main/java/kekztech/common/blocks/BlockLargeHexPlate.java new file mode 100644 index 0000000000..46750d6a52 --- /dev/null +++ b/src/main/java/kekztech/common/blocks/BlockLargeHexPlate.java @@ -0,0 +1,65 @@ +package kekztech.common.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.common.registry.GameRegistry; + +public class BlockLargeHexPlate extends Block { + + private static final BlockLargeHexPlate INSTANCE = new BlockLargeHexPlate(); + private static final int BATCH_SIZE = 4; + + private final IIcon[][] parts = new IIcon[BATCH_SIZE][BATCH_SIZE]; + + private BlockLargeHexPlate() { + super(Material.rock); + } + + public static Block registerBlock() { + final String blockName = "kekztech_largehextile_block"; + INSTANCE.setBlockName(blockName); + INSTANCE.setCreativeTab(CreativeTabs.tabMisc); + INSTANCE.setHardness(6.0f); + INSTANCE.setResistance(10.0f); + GameRegistry.registerBlock(INSTANCE, blockName); + + return INSTANCE; + } + + @Override + public void registerBlockIcons(IIconRegister ir) { + for (int x = 0; x < BATCH_SIZE; x++) { + for (int z = 0; z < BATCH_SIZE; z++) { + parts[x][z] = ir.registerIcon("kekztech:LargeHexTile_" + x + "_" + z); + } + } + } + + @Override + public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { + final int xMod = x >= 0 ? Math.abs(x % BATCH_SIZE) + : Math.abs((Math.abs(x) % BATCH_SIZE) - BATCH_SIZE) % BATCH_SIZE; + final int yMod = y >= 0 ? Math.abs(y % BATCH_SIZE) + : Math.abs((Math.abs(y) % BATCH_SIZE) - BATCH_SIZE) % BATCH_SIZE; + final int zMod = z >= 0 ? Math.abs(z % BATCH_SIZE) + : Math.abs((Math.abs(z) % BATCH_SIZE) - BATCH_SIZE) % BATCH_SIZE; + + if (side == 0 || side == 1) { + return parts[xMod][zMod]; + } else if (side == 2 || side == 3) { + return parts[xMod][yMod]; + } else { + return parts[zMod][yMod]; + } + } + + @Override + public IIcon getIcon(int side, int meta) { + return parts[(int) Math.ceil(BATCH_SIZE / 2)][(int) Math.ceil(BATCH_SIZE / 2)]; + } +} diff --git a/src/main/java/kekztech/common/blocks/BlockTFFTStorageField.java b/src/main/java/kekztech/common/blocks/BlockTFFTStorageField.java new file mode 100644 index 0000000000..47e4cf57c6 --- /dev/null +++ b/src/main/java/kekztech/common/blocks/BlockTFFTStorageField.java @@ -0,0 +1,91 @@ +package kekztech.common.blocks; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import kekztech.KekzCore; +import kekztech.common.itemBlocks.ItemBlockTFFTStorageField; +import kekztech.common.tileentities.MTETankTFFT; + +public class BlockTFFTStorageField extends BaseGTUpdateableBlock { + + private static final BlockTFFTStorageField INSTANCE = new BlockTFFTStorageField(); + private static final int SUB_BLOCK_COUNT = MTETankTFFT.Field.VALUES.length + 1; + private static final IIcon[] textures = new IIcon[SUB_BLOCK_COUNT]; + + public enum TFFTCasingIcon implements IIconContainer { + + INSTANCE; + + @Override + public IIcon getIcon() { + return textures[0]; + } + + @Override + public IIcon getOverlayIcon() { + return null; + } + + @Override + public ResourceLocation getTextureFile() { + return TextureMap.locationBlocksTexture; + } + } + + // I guess glodblock won't mind + static { + GTUtility.addTexturePage((byte) 12); + Textures.BlockIcons + .setCasingTexture((byte) 12, (byte) 127, TextureFactory.of(BlockTFFTStorageField.TFFTCasingIcon.INSTANCE)); + } + + private BlockTFFTStorageField() { + super(Material.iron); + } + + public static Block registerBlock() { + final String blockName = "kekztech_tfftstoragefield_block"; + INSTANCE.setBlockName(blockName); + INSTANCE.setCreativeTab(CreativeTabs.tabMisc); + INSTANCE.setHardness(5.0f); + INSTANCE.setResistance(6.0f); + GameRegistry.registerBlock(INSTANCE, ItemBlockTFFTStorageField.class, blockName); + + return INSTANCE; + } + + @Override + public void registerBlockIcons(IIconRegister ir) { + textures[0] = ir.registerIcon(KekzCore.MODID + ":" + "TFFTCasing"); + for (int i = 1; i < SUB_BLOCK_COUNT; i++) { + textures[i] = ir.registerIcon(KekzCore.MODID + ":" + "TFFTStorageFieldBlock" + i); + } + } + + @Override + public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) { + for (int i = 0; i < SUB_BLOCK_COUNT; i++) { + par3List.add(new ItemStack(par1, 1, i)); + } + } + + @Override + public IIcon getIcon(int side, int meta) { + return textures[meta]; + } +} diff --git a/src/main/java/kekztech/common/blocks/BlockThaumiumReinforcedJar.java b/src/main/java/kekztech/common/blocks/BlockThaumiumReinforcedJar.java new file mode 100644 index 0000000000..ebeb66f108 --- /dev/null +++ b/src/main/java/kekztech/common/blocks/BlockThaumiumReinforcedJar.java @@ -0,0 +1,251 @@ +package kekztech.common.blocks; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.Explosion; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import kekztech.common.itemBlocks.ItemBlockThaumiumReinforcedJar; +import kekztech.common.tileentities.TileEntityThaumiumReinforcedJar; +import kekztech.common.tileentities.TileEntityThaumiumReinforcedVoidJar; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.common.blocks.BlockJar; +import thaumcraft.common.config.ConfigBlocks; +import thaumcraft.common.config.ConfigItems; +import thaumcraft.common.items.ItemEssence; +import thaumcraft.common.tiles.TileJarFillable; + +public class BlockThaumiumReinforcedJar extends BlockJar { + + private static final BlockThaumiumReinforcedJar INSTANCE = new BlockThaumiumReinforcedJar(); + + private BlockThaumiumReinforcedJar() { + super(); + + super.setHardness(6.0F); + super.setResistance(6.0F); + } + + public static Block registerBlock() { + final String blockName = "kekztech_thaumiumreinforcedjar_block"; + INSTANCE.setBlockName(blockName); + INSTANCE.setHarvestLevel("pickaxe", 2); + GameRegistry.registerBlock(INSTANCE, ItemBlockThaumiumReinforcedJar.class, blockName); + + return INSTANCE; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister ir) { + super.iconLiquid = ir.registerIcon("thaumcraft:animatedglow"); + super.iconJarSide = ir.registerIcon("kekztech:thaumreinforced_jar_side"); + super.iconJarTop = ir.registerIcon("kekztech:thaumreinforced_jar_top"); + super.iconJarTopVoid = ir.registerIcon("kekztech:thaumreinforced_jar_top_void"); + super.iconJarSideVoid = ir.registerIcon("kekztech:thaumreinforced_jar_side_void"); + super.iconJarBottom = ir.registerIcon("kekztech:thaumreinforced_jar_bottom"); + } + + @Override + @SideOnly(Side.CLIENT) + @SuppressWarnings({ "unchecked" }) + public void getSubBlocks(Item par1, CreativeTabs par2CreativeTabs, List par3List) { + par3List.add(new ItemStack(par1, 1, 0)); // Normal jar + par3List.add(new ItemStack(par1, 1, 3)); // Void jar + } + + @Override + public TileEntity createTileEntity(World world, int meta) { + if (meta == 3) { + return new TileEntityThaumiumReinforcedVoidJar(); + } else { + return new TileEntityThaumiumReinforcedJar(); + } + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block par5, int par6) { + final TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof TileEntityThaumiumReinforcedJar) { + final TileEntityThaumiumReinforcedJar ite = (TileEntityThaumiumReinforcedJar) te; + breakBlockWarpy(world, x, y, z, ite.amount, 50, 1.0F); + } else if (te instanceof TileEntityThaumiumReinforcedVoidJar) { + final TileEntityThaumiumReinforcedVoidJar ite = (TileEntityThaumiumReinforcedVoidJar) te; + breakBlockWarpy(world, x, y, z, ite.amount, 50, 1.0F); + } + super.breakBlock(world, x, y, z, par5, par6); + } + + private void breakBlockWarpy(World world, int x, int y, int z, int fillAmount, int iterations, + float explosionStrength) { + if (fillAmount > 0) { + // Create a decent explosion in the center of the block (TNT has strength 4.0F) + world.createExplosion(null, x + 0.5D, y + 0.5D, z + 0.5D, explosionStrength, false); + + // Place a lot of Flux in the area + final int limit = fillAmount / 16; + int created = 0; + for (int i = 0; i < iterations; i++) { + final int xf = x + world.rand.nextInt(7) - world.rand.nextInt(7); + final int yf = x + world.rand.nextInt(7) - world.rand.nextInt(7); + final int zf = x + world.rand.nextInt(7) - world.rand.nextInt(7); + if (world.isAirBlock(xf, yf, zf)) { + if (yf > y) { + world.setBlock(xf, yf, zf, ConfigBlocks.blockFluxGas, 8, 3); + } else { + world.setBlock(xf, yf, zf, ConfigBlocks.blockFluxGoo, 8, 3); + } + + if (created++ > limit) { + break; + } + } + } + } + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float f1, float f2, + float f3) { + // Call parent method to handle jar emptying, labels stuff etc + super.onBlockActivated(world, x, y, z, player, side, f1, f2, f3); + // Interact with Essentia Phials if the player holds one + final ItemStack heldItem = player.getHeldItem(); + if (heldItem != null && heldItem.getItem() == ConfigItems.itemEssence) { + final TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof TileEntityThaumiumReinforcedJar) { + return dealWithPhial(world, player, x, y, z); + } else if (te instanceof TileEntityThaumiumReinforcedVoidJar) { + return dealWithPhial(world, player, x, y, z); + } + } + + return true; + } + + /** + * Handle compatibility with Essentia Phials + * + * @param world Pass through from onBlockActivated() + * @param player Pass through from onBlockActivated() + * @param x Pass through from onBlockActivated() + * @param y Pass through from onBlockActivated() + * @param z Pass through from onBlockActivated() + * @return Not sure tbh + */ + private boolean dealWithPhial(World world, EntityPlayer player, int x, int y, int z) { + final TileJarFillable kte = (TileJarFillable) world.getTileEntity(x, y, z); + final ItemStack heldItem = player.getHeldItem(); + // Check whether to fill or to drain the phial + if (heldItem.getItemDamage() == 0) { + if (kte.amount >= 8) { + if (world.isRemote) { + player.swingItem(); + return false; + } + + final Aspect jarAspect = Aspect.getAspect(kte.aspect.getTag()); + if (kte.takeFromContainer(jarAspect, 8)) { + // Take an empty phial from the player's inventory + heldItem.stackSize--; + // Fill a new phial + final ItemStack filledPhial = new ItemStack(ConfigItems.itemEssence, 1, 1); + final AspectList phialContent = new AspectList().add(jarAspect, 8); + ((ItemEssence) ConfigItems.itemEssence).setAspects(filledPhial, phialContent); + // Drop on ground if there's no inventory space + if (!player.inventory.addItemStackToInventory(filledPhial)) { + world.spawnEntityInWorld( + new EntityItem(world, (float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F, filledPhial)); + } + + world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); + player.inventoryContainer.detectAndSendChanges(); + return true; + } + } + } else { + final AspectList phialContent = ((ItemEssence) ConfigItems.itemEssence).getAspects(heldItem); + if (phialContent != null && phialContent.size() == 1) { + final Aspect phialAspect = phialContent.getAspects()[0]; + if (kte.amount + 8 <= kte.maxAmount && kte.doesContainerAccept(phialAspect)) { + if (world.isRemote) { + player.swingItem(); + return false; + } + + if (kte.addToContainer(phialAspect, 8) == 0) { + world.markBlockForUpdate(x, y, z); + kte.markDirty(); + heldItem.stackSize--; + // Drop on ground if there's no inventory space + if (!player.inventory.addItemStackToInventory(new ItemStack(ConfigItems.itemEssence, 1, 0))) { + world.spawnEntityInWorld( + new EntityItem( + world, + (float) x + 0.5F, + (float) y + 0.5F, + (float) z + 0.5F, + new ItemStack(ConfigItems.itemEssence, 1, 0))); + } + + world.playSoundAtEntity(player, "game.neutral.swim", 0.25F, 1.0F); + player.inventoryContainer.detectAndSendChanges(); + return true; + } + } + } + } + + return true; + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { + final ArrayList drops = new ArrayList<>(); + drops.add(new ItemStack(this, 1, (meta == 3) ? 3 : 0)); + final TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof TileEntityThaumiumReinforcedJar) { + final TileEntityThaumiumReinforcedJar ite = (TileEntityThaumiumReinforcedJar) te; + if (ite.aspectFilter != null) { + final ItemStack droppedLabel = new ItemStack(ConfigItems.itemResource, 1, 13); + droppedLabel.setTagCompound(new NBTTagCompound()); + final AspectList aspect = new AspectList().add(ite.aspectFilter, 0); + aspect.writeToNBT(droppedLabel.getTagCompound()); + drops.add(droppedLabel); + } + } else if (te instanceof TileEntityThaumiumReinforcedVoidJar) { + final TileEntityThaumiumReinforcedVoidJar ite = (TileEntityThaumiumReinforcedVoidJar) te; + if (ite.aspectFilter != null) { + final ItemStack droppedLabel = new ItemStack(ConfigItems.itemResource, 1, 13); + droppedLabel.setTagCompound(new NBTTagCompound()); + final AspectList aspect = new AspectList().add(ite.aspectFilter, 0); + aspect.writeToNBT(droppedLabel.getTagCompound()); + drops.add(droppedLabel); + } + } + return drops; + } + + @Override + public void onBlockHarvested(World par1World, int par2, int par3, int par4, int par5, + EntityPlayer par6EntityPlayer) {} + + @Override + public boolean canDropFromExplosion(Explosion e) { + return false; + } +} diff --git a/src/main/java/kekztech/common/blocks/BlockYSZUnit.java b/src/main/java/kekztech/common/blocks/BlockYSZUnit.java new file mode 100644 index 0000000000..b4624b579b --- /dev/null +++ b/src/main/java/kekztech/common/blocks/BlockYSZUnit.java @@ -0,0 +1,29 @@ +package kekztech.common.blocks; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.creativetab.CreativeTabs; + +import cpw.mods.fml.common.registry.GameRegistry; +import kekztech.KekzCore; + +public class BlockYSZUnit extends BaseGTUpdateableBlock { + + private static final BlockYSZUnit instance = new BlockYSZUnit(); + + private BlockYSZUnit() { + super(Material.iron); + } + + public static Block registerBlock() { + final String blockName = "kekztech_yszceramicelectrolyteunit_block"; + instance.setBlockName(blockName); + instance.setCreativeTab(CreativeTabs.tabMisc); + instance.setBlockTextureName(KekzCore.MODID + ":" + "YSZCeramicElectrolyteUnit"); + instance.setHardness(5.0f); + instance.setResistance(6.0f); + GameRegistry.registerBlock(instance, blockName); + + return instance; + } +} diff --git a/src/main/java/kekztech/common/itemBlocks/ItemBlockIchorJar.java b/src/main/java/kekztech/common/itemBlocks/ItemBlockIchorJar.java new file mode 100644 index 0000000000..96faec380b --- /dev/null +++ b/src/main/java/kekztech/common/itemBlocks/ItemBlockIchorJar.java @@ -0,0 +1,27 @@ +package kekztech.common.itemBlocks; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemBlockIchorJar extends ItemBlock { + + public ItemBlockIchorJar(Block block) { + super(block); + } + + @Override + public int getMetadata(int meta) { + return meta; + } + + @Override + public boolean getHasSubtypes() { + return true; + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName() + "." + stack.getItemDamage(); + } +} diff --git a/src/main/java/kekztech/common/itemBlocks/ItemBlockLapotronicEnergyUnit.java b/src/main/java/kekztech/common/itemBlocks/ItemBlockLapotronicEnergyUnit.java new file mode 100644 index 0000000000..e0f016afae --- /dev/null +++ b/src/main/java/kekztech/common/itemBlocks/ItemBlockLapotronicEnergyUnit.java @@ -0,0 +1,190 @@ +package kekztech.common.itemBlocks; + +import static com.google.common.math.LongMath.pow; + +import java.math.BigInteger; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; + +import gregtech.api.enums.GTValues; +import gregtech.api.util.GTUtility; + +public class ItemBlockLapotronicEnergyUnit extends ItemBlock { + + public ItemBlockLapotronicEnergyUnit(Block block) { + super(block); + } + + @Override + public int getMetadata(int meta) { + return meta; + } + + @Override + public boolean getHasSubtypes() { + return true; + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName() + "." + stack.getItemDamage(); + } + + // 5 Minutes, 5 mins * 60s * 20 ticks. + public static long LSC_time_between_wireless_rebalance_in_ticks = 5L * 60L * 20L; + + // 60 Trillion EU. + public static BigInteger LSC_wireless_eu_cap = BigInteger.valueOf(60 * pow(10, 12)); + + // 10 Billion EU/t + private static final BigInteger UHV_cap_eu_per_tick = LSC_wireless_eu_cap + .divide(BigInteger.valueOf(LSC_time_between_wireless_rebalance_in_ticks)); + + // 6 Quadrillion EU. + public static BigInteger UEV_wireless_eu_cap = BigInteger.valueOf(100 * 60 * pow(10, 12)); + + // 1 Trillion EU/t + private static final BigInteger UEV_cap_eu_per_tick = UEV_wireless_eu_cap + .divide(BigInteger.valueOf(LSC_time_between_wireless_rebalance_in_ticks)); + + // 600 Quadrillion EU. + public static BigInteger UIV_wireless_eu_cap = BigInteger.valueOf(60 * pow(10, 16)); + + // 100 Trillion EU/t + private static final BigInteger UIV_cap_eu_per_tick = UIV_wireless_eu_cap + .divide(BigInteger.valueOf(LSC_time_between_wireless_rebalance_in_ticks)); + + // 60 Quintillion EU. + public static BigInteger UMV_wireless_eu_cap = UIV_wireless_eu_cap.multiply(BigInteger.valueOf(100)); + + // 10 Quadrillion EU/t + private static final BigInteger UMV_cap_eu_per_tick = UMV_wireless_eu_cap + .divide(BigInteger.valueOf(LSC_time_between_wireless_rebalance_in_ticks)); + + public static long EV_cap_storage = 60_000_000L; + public static long IV_cap_storage = 600_000_000L; + public static long LuV_cap_storage = 6_000_000_000L; + public static long ZPM_cap_storage = 60_000_000_000L; + public static long UV_cap_storage = 600_000_000_000L; + public static long UHV_cap_storage = Long.MAX_VALUE; + public static long UEV_cap_storage = Long.MAX_VALUE; + public static long UIV_cap_storage = Long.MAX_VALUE; + public static BigInteger UMV_cap_storage = BigInteger.valueOf(UIV_cap_storage) + .pow(2); + + @SuppressWarnings("unchecked") + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List lines, boolean advancedTooltips) { + lines.add(StatCollector.translateToLocal("tile.kekztech_lapotronicenergyunit_block.desc")); + switch (stack.getItemDamage()) { + case 1: + lines.add( + "Capacity: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(IV_cap_storage) + + EnumChatFormatting.GRAY + + "EU"); + break; + case 2: + lines.add( + "Capacity: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(LuV_cap_storage) + + EnumChatFormatting.GRAY + + "EU"); + break; + case 3: + lines.add( + "Capacity: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(ZPM_cap_storage) + + EnumChatFormatting.GRAY + + "EU"); + break; + case 4: + lines.add( + "Capacity: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(UV_cap_storage) + + EnumChatFormatting.GRAY + + "EU"); + break; + case 5: + lines.add( + "Capacity: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(UHV_cap_storage) + + EnumChatFormatting.GRAY + + "EU"); + lines.add( + "Supports up to " + EnumChatFormatting.RED + + GTUtility.formatNumbers(UHV_cap_eu_per_tick) + + EnumChatFormatting.GRAY + + "EU/t of wireless transfer per " + + GTValues.TIER_COLORS[9] + + GTValues.VN[9] + + EnumChatFormatting.GRAY + + " capacitor."); + break; + case 6: + lines.add("Capacity: None"); + break; + case 7: + lines.add( + "Capacity: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(EV_cap_storage) + + EnumChatFormatting.GRAY + + " EU"); + break; + case 8: + lines.add( + "Capacity: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(UEV_cap_storage) + + EnumChatFormatting.GRAY + + "EU"); + lines.add( + "Supports up to " + EnumChatFormatting.RED + + GTUtility.formatNumbers(UEV_cap_eu_per_tick) + + EnumChatFormatting.GRAY + + "EU/t of wireless transfer per " + + GTValues.TIER_COLORS[10] + + GTValues.VN[10] + + EnumChatFormatting.GRAY + + " capacitor."); + break; + case 9: + lines.add( + "Capacity: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(UIV_cap_storage) + + EnumChatFormatting.GRAY + + "EU"); + lines.add( + "Supports up to " + EnumChatFormatting.RED + + GTUtility.formatNumbers(UIV_cap_eu_per_tick) + + EnumChatFormatting.GRAY + + "EU/t of wireless transfer per " + + GTValues.TIER_COLORS[11] + + GTValues.VN[11] + + EnumChatFormatting.GRAY + + " capacitor."); + break; + case 10: + lines.add( + "Capacity: " + EnumChatFormatting.RED + + GTUtility.formatNumbers(UMV_cap_storage) + + EnumChatFormatting.GRAY + + "EU"); + lines.add( + "Supports up to " + EnumChatFormatting.RED + + GTUtility.formatNumbers(UMV_cap_eu_per_tick) + + EnumChatFormatting.GRAY + + "EU/t of wireless transfer per " + + GTValues.TIER_COLORS[12] + + GTValues.VN[12] + + EnumChatFormatting.GRAY + + " capacitor."); + break; + } + } +} diff --git a/src/main/java/kekztech/common/itemBlocks/ItemBlockTFFTStorageField.java b/src/main/java/kekztech/common/itemBlocks/ItemBlockTFFTStorageField.java new file mode 100644 index 0000000000..f032153f47 --- /dev/null +++ b/src/main/java/kekztech/common/itemBlocks/ItemBlockTFFTStorageField.java @@ -0,0 +1,63 @@ +package kekztech.common.itemBlocks; + +import java.text.NumberFormat; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; + +import kekztech.common.tileentities.MTETankTFFT; + +public class ItemBlockTFFTStorageField extends ItemBlock { + + private static final int UNIQUE_FLUIDS_PER_CELL = 25; + + public ItemBlockTFFTStorageField(Block block) { + super(block); + } + + @Override + public int getMetadata(int meta) { + return meta; + } + + @Override + public boolean getHasSubtypes() { + return true; + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName() + "." + stack.getItemDamage(); + } + + @SuppressWarnings("unchecked") + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List lines, boolean advancedTooltips) { + int meta = stack.getItemDamage(); + if (meta > 0) { + lines.add(StatCollector.translateToLocal("tile.kekztech_tfftstoragefield_block.desc")); + lines.add( + "Capacity: " + EnumChatFormatting.BLUE + + NumberFormat.getNumberInstance() + .format(MTETankTFFT.Field.VALUES[meta - 1].getCapacity()) + + EnumChatFormatting.GRAY + + " L"); + lines.add( + "Per Fluid Capacity: " + EnumChatFormatting.BLUE + + NumberFormat.getNumberInstance() + .format(MTETankTFFT.Field.VALUES[meta - 1].getCapacity() / UNIQUE_FLUIDS_PER_CELL) + + EnumChatFormatting.GRAY + + " L"); + lines.add( + "Power Draw: " + EnumChatFormatting.BLUE + + MTETankTFFT.Field.VALUES[meta - 1].getCost() + + EnumChatFormatting.GRAY + + " EU/t"); + } + } +} diff --git a/src/main/java/kekztech/common/itemBlocks/ItemBlockThaumiumReinforcedJar.java b/src/main/java/kekztech/common/itemBlocks/ItemBlockThaumiumReinforcedJar.java new file mode 100644 index 0000000000..b2e6a434af --- /dev/null +++ b/src/main/java/kekztech/common/itemBlocks/ItemBlockThaumiumReinforcedJar.java @@ -0,0 +1,27 @@ +package kekztech.common.itemBlocks; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; + +public class ItemBlockThaumiumReinforcedJar extends ItemBlock { + + public ItemBlockThaumiumReinforcedJar(Block block) { + super(block); + } + + @Override + public int getMetadata(int meta) { + return meta; + } + + @Override + public boolean getHasSubtypes() { + return true; + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName() + "." + stack.getItemDamage(); + } +} diff --git a/src/main/java/kekztech/common/items/ErrorItem.java b/src/main/java/kekztech/common/items/ErrorItem.java new file mode 100644 index 0000000000..902ca556d0 --- /dev/null +++ b/src/main/java/kekztech/common/items/ErrorItem.java @@ -0,0 +1,48 @@ +package kekztech.common.items; + +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import kekztech.KekzCore; + +public class ErrorItem extends Item { + + private static final ErrorItem INSTANCE = new ErrorItem(); + + private ErrorItem() {} + + public static ErrorItem getInstance() { + return INSTANCE; + } + + public void registerItem() { + super.setHasSubtypes(false); + final String unlocalizedName = "kekztech_error_item"; + super.setUnlocalizedName(unlocalizedName); + super.setCreativeTab(CreativeTabs.tabMisc); + super.setMaxStackSize(64); + super.setTextureName(KekzCore.MODID + ":" + "Error"); + GameRegistry.registerItem(getInstance(), unlocalizedName); + } + + @SuppressWarnings({ "unchecked" }) + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { + list.add("REMINDER: KekzTech recipes are only tested to work in GTNH!"); + list.add("Placeholder item in case something went wrong"); + list.add("If this item shows up in GTNH, you may report it to:"); + list.add("https://github.com/kekzdealer/KekzTech"); + } + + @Override + public ItemStack onItemRightClick(ItemStack item, World world, EntityPlayer player) { + player.swingItem(); + return item; + } +} diff --git a/src/main/java/kekztech/common/items/MetaItemCraftingComponent.java b/src/main/java/kekztech/common/items/MetaItemCraftingComponent.java new file mode 100644 index 0000000000..cb62d4511e --- /dev/null +++ b/src/main/java/kekztech/common/items/MetaItemCraftingComponent.java @@ -0,0 +1,89 @@ +package kekztech.common.items; + +import java.util.List; + +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.util.IIcon; + +import cpw.mods.fml.common.registry.GameRegistry; +import kekztech.KekzCore; + +public class MetaItemCraftingComponent extends Item { + + private static final MetaItemCraftingComponent INSTANCE = new MetaItemCraftingComponent(); + private final IIcon[] icons = new IIcon[16]; + + private MetaItemCraftingComponent() {} + + public static MetaItemCraftingComponent getInstance() { + return INSTANCE; + } + + public void registerItem() { + super.setHasSubtypes(true); + final String unlocalizedName = "kekztech_crafting_item"; + super.setUnlocalizedName(unlocalizedName); + super.setCreativeTab(CreativeTabs.tabMisc); + super.setMaxStackSize(64); + GameRegistry.registerItem(getInstance(), unlocalizedName); + } + + @Override + public void registerIcons(IIconRegister reg) { + int counter = 9; + // Ceramics + icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YSZCeramicDust"); + icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "GDCCeramicDust"); + icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YttriaDust"); + icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "ZirconiaDust"); + icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "CeriaDust"); + icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "YSZCeramicPlate"); + icons[counter++] = reg.registerIcon(KekzCore.MODID + ":" + "GDCCeramicPlate"); + } + + @Override + public IIcon getIconFromDamage(int meta) { + return icons[meta]; + } + + @SuppressWarnings({ "unchecked" }) + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + for (int i = 9; i < icons.length; i++) { + list.add(new ItemStack(item, 1, i)); + } + } + + @Override + public String getUnlocalizedName(ItemStack stack) { + return super.getUnlocalizedName() + "." + stack.getItemDamage(); + } + + @SuppressWarnings({ "unchecked" }) + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean b) { + list.add("Crafting component for KekzTech things"); + } + + @Override + public double getDurabilityForDisplay(ItemStack stack) { + return 0.0d; + } + + @Override + public boolean showDurabilityBar(ItemStack stack) { + return false; + } + + public ItemStack getStackFromDamage(int meta) { + return new ItemStack(getInstance(), 1, meta); + } + + public ItemStack getStackOfAmountFromDamage(int meta, int amount) { + return new ItemStack(getInstance(), amount, meta); + } +} diff --git a/src/main/java/kekztech/common/recipeLoaders/AlloySmelter.java b/src/main/java/kekztech/common/recipeLoaders/AlloySmelter.java new file mode 100644 index 0000000000..86c03cc43f --- /dev/null +++ b/src/main/java/kekztech/common/recipeLoaders/AlloySmelter.java @@ -0,0 +1,28 @@ +package kekztech.common.recipeLoaders; + +import static gregtech.api.recipe.RecipeMaps.alloySmelterRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.TierEU; +import kekztech.Items; +import kekztech.common.items.MetaItemCraftingComponent; + +public class AlloySmelter implements Runnable { + + @Override + public void run() { + final MetaItemCraftingComponent craftingItem = MetaItemCraftingComponent.getInstance(); + + // YSZ Cermic Plate + GTValues.RA.stdBuilder() + .itemInputs( + craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicDust.getMetaID(), 3), + ItemList.Shape_Mold_Plate.get(0)) + .itemOutputs(craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicPlate.getMetaID(), 1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(alloySmelterRecipes); + } +} diff --git a/src/main/java/kekztech/common/recipeLoaders/Assembler.java b/src/main/java/kekztech/common/recipeLoaders/Assembler.java new file mode 100644 index 0000000000..07e1fdac1c --- /dev/null +++ b/src/main/java/kekztech/common/recipeLoaders/Assembler.java @@ -0,0 +1,294 @@ +package kekztech.common.recipeLoaders; + +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import kekztech.Items; +import kekztech.common.Blocks; +import kekztech.common.TileEntities; +import kekztech.common.items.ErrorItem; +import kekztech.common.items.MetaItemCraftingComponent; + +public class Assembler implements Runnable { + + @Override + public void run() { + // TFFT Casing + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.DarkSteel, 3), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.EnderPearl, 3)) + .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(144)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // TFFT Multi Hatch + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_HV.get(1), + ItemList.Cover_FluidStorageMonitor.get(1), + ItemList.Field_Generator_LV.get(4), + GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.Polytetrafluoroethylene, 25)) + .itemOutputs(TileEntities.tfftHatch.getStackForm(1)) + .fluidInputs(Materials.Plastic.getMolten(432)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // TFFTStorageField1 + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.CrudeSteel, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.CrudeSteel, 6), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Steel, 3), + ItemList.FluidRegulator_LV.get(1)) + .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 1)) + .fluidInputs(Materials.Glass.getMolten(144)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // TFFTStorageField2 + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + ItemList.Casing_Tank_1.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.EnergeticSilver, 6), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Plastic, 3), + ItemList.FluidRegulator_MV.get(1)) + .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 2)) + .fluidInputs(Materials.Plastic.getMolten(288)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // TFFTStorageField3 + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + ItemList.Casing_Tank_3.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.VividAlloy, 6), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.StainlessSteel, 3), + ItemList.Field_Generator_LV.get(1), + ItemList.FluidRegulator_HV.get(1)) + .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 3)) + .fluidInputs(Materials.Plastic.getMolten(432)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // TFFTStorageField4 + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + ItemList.Casing_Tank_5.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Enderium, 6), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Polytetrafluoroethylene, 3), + ItemList.Field_Generator_MV.get(2), + ItemList.FluidRegulator_EV.get(1)) + .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 4)) + .fluidInputs(Materials.Epoxid.getMolten(864)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // TFFTStorageField5 + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + ItemList.Casing_Tank_7.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.CrystallineAlloy, 6), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Enderium, 3), + ItemList.Field_Generator_HV.get(4), + ItemList.FluidRegulator_IV.get(1)) + .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 5)) + .fluidInputs(Materials.Epoxid.getMolten(1152)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // LSC Casing + + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Tantalum, 4), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.TungstenSteel, 2), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.TungstenSteel, 2), + GTOreDictUnificator.get(OrePrefixes.block, Materials.Lapis, 1)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 0)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // EV Capacitor alt recipe + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 6), + GTModHandler.getIC2Item("lapotronCrystal", 1L, GTValues.W), + GTUtility.getIntegratedCircuit(7)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 7)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // IV Capacitor alt recipe + + GTValues.RA.stdBuilder() + .itemInputs( + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 6), + ItemList.Energy_LapotronicOrb.get(1L), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 1)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // LuV Capacitor alt recipe + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Energy_LapotronicOrb2.get(1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmiridium, 4), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Osmiridium, 24), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 2)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // ZPM Capacitor alt recipe + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Energy_Module.get(1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 4), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.NaquadahAlloy, 24), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 3)) + .duration(1 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // UV Capacitor alt recipe + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Energy_Cluster.get(1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 4), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 24), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 4)) + .duration(2 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // UHV Capacitor alt recipe + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.ZPM3.get(1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 4), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.CosmicNeutronium, 24), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 5)) + .duration(5 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + // UEV Capacitor alt recipe + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.ZPM4.get(1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 4), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Infinity, 24), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 8)) + .duration(10 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + // UIV Capacitor alt recipe + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.ZPM5.get(1), + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 4), + GTOreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.TranscendentMetal, 24), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 9)) + .duration(10 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + // UMV Capacitor alt recipe + + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.ZPM6.get(1), + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 4), + GTOreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SpaceTime, 24), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 10)) + .duration(10 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + + final MetaItemCraftingComponent craftingItem = MetaItemCraftingComponent.getInstance(); + + // YSZ Unit + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicPlate.getMetaID(), 4), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Yttrium, 1), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 1), + ItemList.Electric_Motor_HV.get(1L)) + .itemOutputs(new ItemStack(Blocks.yszUnit, 1)) + .fluidInputs(Materials.Hydrogen.getGas(4000)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // GDC Unit + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicPlate.getMetaID(), 8), + GTOreDictUnificator + .get(OrePrefixes.frameGt, Materials.Gadolinium, new ItemStack(ErrorItem.getInstance(), 1), 1), + GTOreDictUnificator + .get(OrePrefixes.rotor, Materials.Desh, new ItemStack(ErrorItem.getInstance(), 1), 1), + ItemList.Electric_Motor_IV.get(1L)) + .itemOutputs(new ItemStack(Blocks.gdcUnit, 1)) + .fluidInputs(Materials.Hydrogen.getGas(16000)) + .duration(2 * MINUTES) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Hex Tiles + + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(6), + GTOreDictUnificator.get(OrePrefixes.stone, Materials.Concrete, 1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Steel, 1), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.DarkSteel, 2)) + .itemOutputs(new ItemStack(Blocks.largeHexPlate, 2)) + .fluidInputs(FluidRegistry.getFluidStack("molten.plastic", 36)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + + } +} diff --git a/src/main/java/kekztech/common/recipeLoaders/AssemblyLine.java b/src/main/java/kekztech/common/recipeLoaders/AssemblyLine.java new file mode 100644 index 0000000000..b24863d14e --- /dev/null +++ b/src/main/java/kekztech/common/recipeLoaders/AssemblyLine.java @@ -0,0 +1,226 @@ +package kekztech.common.recipeLoaders; + +import static goodgenerator.loader.Loaders.huiCircuit; +import static gregtech.api.enums.Mods.Avaritia; +import static gregtech.api.enums.Mods.EnderIO; +import static gregtech.api.enums.Mods.EternalSingularity; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.enums.Mods.UniversalSingularities; +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.AssemblyLine; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME; +import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.HYPOGEN; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import kekztech.common.Blocks; + +public class AssemblyLine implements Runnable { + + @Override + public void run() { + final Fluid radoxPoly = FluidRegistry.getFluid("molten.radoxpoly") != null + ? FluidRegistry.getFluid("molten.radoxpoly") + : FluidRegistry.getFluid("molten.polybenzimidazole"); + + final Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null + ? FluidRegistry.getFluid("molten.indalloy140") + : FluidRegistry.getFluid("molten.solderingalloy"); + + // TFFTStorageField6 + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, new ItemStack(Blocks.tfftStorageField, 1, 5)) + .metadata(RESEARCH_TIME, 1 * HOURS + 6 * MINUTES + 40 * SECONDS) + .itemInputs( + ItemList.Casing_Tank_7.get(4), + GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.CrystallinePinkSlime, 6), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Naquadah, 3), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ChromeBars", 6), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Quantium, 6), + ItemList.Field_Generator_EV.get(8), + ItemList.FluidRegulator_LuV.get(1), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngineeringProcessorFluidEmeraldCore", 4)) + .fluidInputs(Materials.Enderium.getMolten(1440), Materials.Polybenzimidazole.getMolten(1584)) + .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 6)) + .eut(TierEU.RECIPE_LuV) + .duration(30 * SECONDS) + .addTo(AssemblyLine); + + // TFFTStorageField7 + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, new ItemStack(Blocks.tfftStorageField, 1, 6)) + .metadata(RESEARCH_TIME, 1 * HOURS + 6 * MINUTES + 40 * SECONDS) + .itemInputs( + ItemList.Casing_Tank_10.get(16), + GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.MelodicAlloy, 6), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.NetherStar, 3), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.OsmiumBars", 6), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.MysteriousCrystal, 6), + ItemList.Field_Generator_IV.get(16), + ItemList.Field_Generator_LuV.get(4), + ItemList.FluidRegulator_UV.get(1), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.EngineeringProcessorFluidEmeraldCore", 16)) + .fluidInputs(Materials.CrystallineAlloy.getMolten(2880), Materials.Polybenzimidazole.getMolten(2016)) + .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 7)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(AssemblyLine); + + // TFFTStorageField8 + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, new ItemStack(Blocks.tfftStorageField, 1, 7)) + .metadata(RESEARCH_TIME, 2 * HOURS + 40 * MINUTES) + .itemInputs( + ItemList.Quantum_Tank_IV.get(1), + GTModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.StellarAlloy, 6), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.StellarAlloy, 6), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.DraconiumAwakened, 3), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.NeutroniumBars", 6), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.InfinityCatalyst, 6), + ItemList.Field_Generator_ZPM.get(16), + ItemList.Field_Generator_UV.get(4), + new ItemStack(huiCircuit, 4, 2), + GTModHandler.getModItem(UniversalSingularities.ID, "universal.tinkersConstruct.singularity", 1, 4)) + .fluidInputs(Materials.CrystallinePinkSlime.getMolten(4320), new FluidStack(radoxPoly, 2880)) + .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 8)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(AssemblyLine); + + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, new ItemStack(Blocks.tfftStorageField, 1, 8)) + .metadata(RESEARCH_TIME, 2 * HOURS + 13 * MINUTES + 20 * SECONDS) + .itemInputs( + ItemList.Quantum_Tank_IV.get(4), + GTModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 2), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 6), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 6), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, Materials.Infinity, 3), + ItemList.EnergisedTesseract.get(1), + HYPOGEN.getRotor(6), + ItemList.Field_Generator_UHV.get(16), + ItemList.Field_Generator_UEV.get(4), + new ItemStack(huiCircuit, 4, 3), + GTModHandler.getModItem(UniversalSingularities.ID, "universal.tinkersConstruct.singularity", 1, 4)) + .fluidInputs(Materials.MelodicAlloy.getMolten(5760), new FluidStack(radoxPoly, 3456)) + .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 9)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(AssemblyLine); + + // TFFTStorageField10 + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, new ItemStack(Blocks.tfftStorageField, 1, 9)) + .metadata(RESEARCH_TIME, 2 * HOURS + 46 * MINUTES + 40 * SECONDS) + .itemInputs( + ItemList.Quantum_Tank_IV.get(16), + GTModHandler.getModItem(Avaritia.ID, "Neutronium_Compressor", 4), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 6), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 6), + GTOreDictUnificator.get(OrePrefixes.pipeNonuple, MaterialsUEVplus.SpaceTime, 3), + ItemList.EnergisedTesseract.get(6), + GTOreDictUnificator.get(OrePrefixes.rotor, MaterialsUEVplus.SpaceTime, 6), + ItemList.Field_Generator_UEV.get(16), + ItemList.Field_Generator_UIV.get(4), + new ItemStack(huiCircuit, 4, 4), + new ItemStack(huiCircuit, 4, 4), + GTModHandler.getModItem(EnderIO.ID, "itemBasicCapacitor", 64, 6), + GTModHandler.getModItem(EternalSingularity.ID, "eternal_singularity", 1)) + .fluidInputs(Materials.StellarAlloy.getMolten(7200), new FluidStack(radoxPoly, 4608)) + .itemOutputs(new ItemStack(Blocks.tfftStorageField, 1, 10)) + .duration(30 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(AssemblyLine); + + // LuV Capacitor + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 1)) + .metadata(RESEARCH_TIME, 4 * HOURS) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Osmiridium, 4), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Osmiridium, 24), + ItemList.Circuit_Board_Elite.get(1), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.NaquadahAlloy, 64), + new Object[] { OrePrefixes.circuit.get(Materials.LuV), 4 }, + ItemList.Circuit_Parts_Crystal_Chip_Master.get(36), + ItemList.Circuit_Parts_Crystal_Chip_Master.get(36), + ItemList.Circuit_Chip_HPIC.get(64), + ItemList.Circuit_Parts_DiodeASMD.get(8), + ItemList.Circuit_Parts_CapacitorASMD.get(8), + ItemList.Circuit_Parts_ResistorASMD.get(8), + ItemList.Circuit_Parts_TransistorASMD.get(8), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Platinum, 64)) + .fluidInputs(new FluidStack(solderIndalloy, 720)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 2)) + .duration(50 * SECONDS) + .eut(80_000) + .addTo(AssemblyLine); + + // ZPM Capacitor + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 2)) + .metadata(RESEARCH_TIME, 4 * HOURS) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 4), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.NaquadahAlloy, 24), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Europium, 16L), + new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1 }, + ItemList.Energy_LapotronicOrb2.get(8L), + ItemList.Field_Generator_LuV.get(2), + ItemList.Circuit_Wafer_SoC2.get(64), + ItemList.Circuit_Wafer_SoC2.get(64), + ItemList.Circuit_Parts_DiodeASMD.get(8), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 32)) + .fluidInputs( + new FluidStack(solderIndalloy, 2880), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 16000)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 3)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(100_000) + .addTo(AssemblyLine); + + // UV Capacitor + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 3)) + .metadata(RESEARCH_TIME, 4 * HOURS) + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 4), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 24), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Americium, 32L), + new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 }, + ItemList.Energy_Module.get(8L), + ItemList.Field_Generator_ZPM.get(2), + ItemList.Circuit_Wafer_HPIC.get(64), + ItemList.Circuit_Wafer_HPIC.get(64), + ItemList.Circuit_Parts_DiodeASMD.get(16), + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.NaquadahAlloy, 32)) + .fluidInputs( + new FluidStack(solderIndalloy, 2880), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 16000)) + .itemOutputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 4)) + .eut(200_000) + .duration(1 * MINUTES + 40 * SECONDS) + .addTo(AssemblyLine); + } +} diff --git a/src/main/java/kekztech/common/recipeLoaders/ChemicalReactor.java b/src/main/java/kekztech/common/recipeLoaders/ChemicalReactor.java new file mode 100644 index 0000000000..ff35caa483 --- /dev/null +++ b/src/main/java/kekztech/common/recipeLoaders/ChemicalReactor.java @@ -0,0 +1,29 @@ +package kekztech.common.recipeLoaders; + +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTUtility; +import kekztech.Items; +import kekztech.common.items.MetaItemCraftingComponent; + +public class ChemicalReactor implements Runnable { + + @Override + public void run() { + final MetaItemCraftingComponent craftingItem = MetaItemCraftingComponent.getInstance(); + + // Ceria Dust + GTValues.RA.stdBuilder() + .itemInputs(Materials.Cerium.getDust(1), GTUtility.getIntegratedCircuit(6)) + .itemOutputs(craftingItem.getStackOfAmountFromDamage(Items.CeriaDust.getMetaID(), 3)) + .fluidInputs(Materials.Oxygen.getGas(2000)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(UniversalChemical); + + } +} diff --git a/src/main/java/kekztech/common/recipeLoaders/Crafting.java b/src/main/java/kekztech/common/recipeLoaders/Crafting.java new file mode 100644 index 0000000000..8ef42ef3e4 --- /dev/null +++ b/src/main/java/kekztech/common/recipeLoaders/Crafting.java @@ -0,0 +1,71 @@ +package kekztech.common.recipeLoaders; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import kekztech.common.Blocks; +import kekztech.common.TileEntities; +import kekztech.util.Util; + +public class Crafting implements Runnable { + + @Override + public void run() { + // TFFT Controller + GTModHandler.addCraftingRecipe( + TileEntities.tfft.getStackForm(1), + new Object[] { "ESE", "FTF", "CVC", 'E', GTOreDictUnificator.get(OrePrefixes.screw, Materials.EnderEye, 1), + 'S', ItemList.Cover_Screen.get(1), 'F', ItemList.Field_Generator_LV.get(1), 'T', + new ItemStack(Blocks.tfftStorageField, 1), 'C', "circuitData", 'V', + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.VibrantAlloy, 1), }); + + // SOFC Controller mk1 + final Object[] mk1_recipe = { "CCC", "PHP", "FBL", 'C', OrePrefixes.circuit.get(Materials.HV), 'P', + ItemList.Electric_Pump_HV.get(1L), 'H', ItemList.Hull_HV.get(1L), 'F', + GTOreDictUnificator.get(OrePrefixes.pipeSmall, Materials.StainlessSteel, 1), 'B', + GTOreDictUnificator.get(OrePrefixes.cableGt02, Materials.Gold, 1), 'L', + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.StainlessSteel, 1) }; + GTModHandler.addCraftingRecipe(TileEntities.sofc1.getStackForm(1), mk1_recipe); + + // SOFC Controller mk2 + final Object[] mk2_recipe = { "CCC", "PHP", "FBL", 'C', OrePrefixes.circuit.get(Materials.LuV), 'P', + ItemList.Electric_Pump_IV.get(1L), 'H', ItemList.Hull_IV.get(1L), 'F', + GTOreDictUnificator.get(OrePrefixes.pipeSmall, Materials.Ultimate, 1), 'B', + Util.getStackofAmountFromOreDict("wireGt04SuperconductorEV", 1), 'L', + GTOreDictUnificator.get(OrePrefixes.pipeMedium, Materials.Ultimate, 1) }; + GTModHandler.addCraftingRecipe(TileEntities.sofc2.getStackForm(1), mk2_recipe); + + // LSC Controller + final Object[] lsc_recipe = { "LPL", "CBC", "LPL", 'L', ItemList.IC2_LapotronCrystal.getWildcard(1L), 'P', + ItemList.Circuit_Chip_PIC.get(1L), 'C', OrePrefixes.circuit.get(Materials.LuV), 'B', + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 0), }; + GTModHandler.addCraftingRecipe(TileEntities.lsc.getStackForm(1), lsc_recipe); + + // LSC casing + final Object[] lcBase_recipe = { "WBW", "RLR", "WBW", 'W', OrePrefixes.plate.get(Materials.Tantalum), 'B', + OrePrefixes.frameGt.get(Materials.TungstenSteel), 'R', OrePrefixes.stickLong.get(Materials.TungstenSteel), + 'L', OrePrefixes.block.get(Materials.Lapis) }; + GTModHandler.addCraftingRecipe(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 0), lcBase_recipe); + + // Empty Capacitor + final Object[] lcEmpty_recipe = { "SLS", "L L", "SLS", 'S', OrePrefixes.screw.get(Materials.Lapis), 'L', + OrePrefixes.plate.get(Materials.Lapis) }; + GTModHandler.addCraftingRecipe(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 6), lcEmpty_recipe); + + // EV Capacitor + final Object[] lcEV_recipe = { "SLS", "LCL", "SLS", 'S', OrePrefixes.screw.get(Materials.Lapis), 'L', + OrePrefixes.plate.get(Materials.Lapis), 'C', GTModHandler.getIC2Item("lapotronCrystal", 1L, GTValues.W) }; + GTModHandler.addCraftingRecipe(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 7), lcEV_recipe); + + // IV Capacitor + final Object[] lcIV_recipe = { "SLS", "LOL", "SLS", 'S', OrePrefixes.screw.get(Materials.Lapis), 'L', + OrePrefixes.plate.get(Materials.Lapis), 'O', ItemList.Energy_LapotronicOrb.get(1L) }; + GTModHandler.addCraftingRecipe(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 1), lcIV_recipe); + + } +} diff --git a/src/main/java/kekztech/common/recipeLoaders/FormingPress.java b/src/main/java/kekztech/common/recipeLoaders/FormingPress.java new file mode 100644 index 0000000000..fee4c44fc1 --- /dev/null +++ b/src/main/java/kekztech/common/recipeLoaders/FormingPress.java @@ -0,0 +1,28 @@ +package kekztech.common.recipeLoaders; + +import static gregtech.api.recipe.RecipeMaps.formingPressRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.TierEU; +import kekztech.Items; +import kekztech.common.items.MetaItemCraftingComponent; + +public class FormingPress implements Runnable { + + @Override + public void run() { + final MetaItemCraftingComponent craftingItem = MetaItemCraftingComponent.getInstance(); + + // YSZ Ceramic Plate + GTValues.RA.stdBuilder() + .itemInputs( + craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicDust.getMetaID(), 10), + ItemList.Shape_Mold_Plate.get(0)) + .itemOutputs(craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicPlate.getMetaID(), 1)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(formingPressRecipes); + } +} diff --git a/src/main/java/kekztech/common/recipeLoaders/Mixer.java b/src/main/java/kekztech/common/recipeLoaders/Mixer.java new file mode 100644 index 0000000000..99d7001113 --- /dev/null +++ b/src/main/java/kekztech/common/recipeLoaders/Mixer.java @@ -0,0 +1,47 @@ +package kekztech.common.recipeLoaders; + +import static gregtech.api.recipe.RecipeMaps.mixerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import kekztech.Items; +import kekztech.common.items.ErrorItem; +import kekztech.common.items.MetaItemCraftingComponent; + +public class Mixer implements Runnable { + + @Override + public void run() { + final MetaItemCraftingComponent craftingItem = MetaItemCraftingComponent.getInstance(); + + // YSZ Ceramic Dust + GTValues.RA.stdBuilder() + .itemInputs( + Items.YttriaDust.getOreDictedItemStack(1), + Items.ZirconiaDust.getOreDictedItemStack(5), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(craftingItem.getStackOfAmountFromDamage(Items.YSZCeramicDust.getMetaID(), 6)) + .duration(20 * SECONDS) + .eut(96) + .addTo(mixerRecipes); + + // GDC Ceramic Dust + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator + .get(OrePrefixes.dust, Materials.Gadolinium, new ItemStack(ErrorItem.getInstance(), 1), 1), + craftingItem.getStackOfAmountFromDamage(Items.CeriaDust.getMetaID(), 9), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(craftingItem.getStackOfAmountFromDamage(Items.GDCCeramicDust.getMetaID(), 10)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(mixerRecipes); + } +} diff --git a/src/main/java/kekztech/common/recipeLoaders/ResearchableAssemblyLine.java b/src/main/java/kekztech/common/recipeLoaders/ResearchableAssemblyLine.java new file mode 100644 index 0000000000..c3fd1740b8 --- /dev/null +++ b/src/main/java/kekztech/common/recipeLoaders/ResearchableAssemblyLine.java @@ -0,0 +1,133 @@ +package kekztech.common.recipeLoaders; + +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.DRAGON_METAL; +import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.HYPOGEN; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import kekztech.common.Blocks; +import tectech.recipe.TTRecipeAdder; + +public class ResearchableAssemblyLine implements Runnable { + + @Override + public void run() { + final Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null + ? FluidRegistry.getFluid("molten.mutatedlivingsolder") + : FluidRegistry.getFluid("molten.solderingalloy"); + + // Extremely Ultimate Capacitor (UEV) + TTRecipeAdder.addResearchableAssemblylineRecipe( + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 5), + 1200000, + 128, + (int) TierEU.RECIPE_UEV, + 16, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 4), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Infinity, 24), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.InfinityCatalyst, 32L), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.InfinityCatalyst, 32L), + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1 }, ItemList.ZPM3.get(8L), + ItemList.Field_Generator_UEV.get(4), ItemList.Circuit_Wafer_PPIC.get(64), + ItemList.Circuit_Wafer_PPIC.get(64), ItemList.Circuit_Wafer_SoC2.get(64), + ItemList.Circuit_Parts_DiodeXSMD.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 64) }, + new FluidStack[] { new FluidStack(solderUEV, 9216), Materials.Quantium.getMolten(18432), + Materials.Naquadria.getMolten(18432), Materials.SuperCoolant.getFluid(64000) }, + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 8), + 250 * 20, + (int) TierEU.RECIPE_UEV); + + // Insanely Ultimate Capacitor (UIV) + TTRecipeAdder.addResearchableAssemblylineRecipe( + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 8), + 24_000_000, + 1_280, + (int) TierEU.RECIPE_UIV, + 32, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 4), + GTOreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.TranscendentMetal, 24), + HYPOGEN.getPlateDouble(32), HYPOGEN.getPlateDouble(32), + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, ItemList.ZPM4.get(8L), + ItemList.Field_Generator_UIV.get(4), ItemList.Circuit_Wafer_QPIC.get(64), + ItemList.Circuit_Wafer_QPIC.get(64), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RawPicoWafer", 64), + ItemList.Circuit_Parts_DiodeXSMD.get(64), ItemList.Circuit_Parts_InductorXSMD.get(32), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUIV, 64) }, + new FluidStack[] { new FluidStack(solderUEV, 18_432), + new FluidStack(FluidRegistry.getFluid("molten.celestialtungsten"), 18432), + Materials.Quantium.getMolten(18_432), Materials.SuperCoolant.getFluid(128_000) }, + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 9), + 300 * 20, + (int) TierEU.RECIPE_UIV); + + // Mega Ultimate Capacitor (UMV) + TTRecipeAdder.addResearchableAssemblylineRecipe( + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 9), + 480_000_000, + 12_288, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 4), + GTOreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SpaceTime, 24), + DRAGON_METAL.getPlateDouble(32), DRAGON_METAL.getPlateDouble(32), + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, ItemList.ZPM5.get(8L), + ItemList.Field_Generator_UMV.get(4), ItemList.Circuit_Wafer_QPIC.get(64), + ItemList.Circuit_Wafer_QPIC.get(64), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 64), + ItemList.Circuit_Parts_DiodeXSMD.get(64), ItemList.Circuit_Parts_InductorXSMD.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 64) }, + new FluidStack[] { new FluidStack(solderUEV, 36_864), + new FluidStack(FluidRegistry.getFluid("molten.astraltitanium"), 36_864), + new FluidStack(FluidRegistry.getFluid("molten.celestialtungsten"), 36_864), + Materials.SuperCoolant.getFluid(256_000) }, + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 10), + 350 * 20, + (int) TierEU.RECIPE_UMV); + + // Ultimate Capacitor (UHV) + TTRecipeAdder.addResearchableAssemblylineRecipe( + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 4), + 12000, + 16, + 300000, + 3, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 4), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.CosmicNeutronium, 24), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 32L), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 32L), + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1 }, ItemList.ZPM2.get(8L), + ItemList.Field_Generator_UHV.get(4), ItemList.Circuit_Wafer_UHPIC.get(64), + ItemList.Circuit_Wafer_UHPIC.get(64), ItemList.Circuit_Wafer_SoC2.get(32), + ItemList.Circuit_Parts_DiodeASMD.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUHV, 64) }, + new FluidStack[] { new FluidStack(solderUEV, 4608), Materials.Naquadria.getMolten(9216), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 32000) }, + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 5), + 4000, + 1600000); + } +} diff --git a/src/main/java/kekztech/common/recipeLoaders/Unpackager.java b/src/main/java/kekztech/common/recipeLoaders/Unpackager.java new file mode 100644 index 0000000000..3d7385ff22 --- /dev/null +++ b/src/main/java/kekztech/common/recipeLoaders/Unpackager.java @@ -0,0 +1,199 @@ +package kekztech.common.recipeLoaders; + +import static gregtech.api.recipe.RecipeMaps.unpackagerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import kekztech.common.Blocks; + +public class Unpackager implements Runnable { + + @Override + public void run() { + + // TFFT Recycling + { + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 1)) + .itemOutputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.CrudeSteel, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.CrudeSteel, 6)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 2)) + .itemOutputs( + ItemList.Casing_Tank_1.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.EnergeticSilver, 6)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 3)) + .itemOutputs( + ItemList.Casing_Tank_3.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.VividAlloy, 6)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 4)) + .itemOutputs( + ItemList.Casing_Tank_5.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Enderium, 6)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 5)) + .itemOutputs( + ItemList.Casing_Tank_7.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.CrystallineAlloy, 6)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 6)) + .itemOutputs( + ItemList.Casing_Tank_7.get(4), + GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.CrystallinePinkSlime, 6)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 7)) + .itemOutputs( + ItemList.Casing_Tank_10.get(16), + GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.MelodicAlloy, 6)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 8)) + .itemOutputs( + ItemList.Quantum_Tank_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.StellarAlloy, 12)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 9)) + .itemOutputs( + ItemList.Quantum_Tank_IV.get(4), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 12)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.tfftStorageField, 1, 10)) + .itemOutputs( + ItemList.Quantum_Tank_IV.get(16), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 12)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(unpackagerRecipes); + + } + + // Capacitor recycling + { + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 7)) + .itemOutputs( + GTModHandler.getIC2Item("lapotronCrystal", 1L, 26), + new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 6)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 1)) + .itemOutputs(ItemList.Energy_LapotronicOrb.get(1L), new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 6)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 2)) + .itemOutputs( + ItemList.Energy_LapotronicOrb2.get(1L), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Osmiridium, 24)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 3)) + .itemOutputs( + ItemList.Energy_Module.get(1L), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.NaquadahAlloy, 24)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 4)) + .itemOutputs( + ItemList.Energy_Cluster.get(1L), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 24)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 5)) + .itemOutputs( + ItemList.ZPM3.get(1L), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.CosmicNeutronium, 24)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 8)) + .itemOutputs(ItemList.ZPM4.get(1L), GTOreDictUnificator.get(OrePrefixes.screw, Materials.Infinity, 24)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 9)) + .itemOutputs( + ItemList.ZPM5.get(1L), + GTOreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.TranscendentMetal, 24)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(unpackagerRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(new ItemStack(Blocks.lscLapotronicEnergyUnit, 1, 10)) + .itemOutputs( + ItemList.ZPM6.get(1L), + GTOreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SpaceTime, 24)) + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(unpackagerRecipes); + + } + } +} diff --git a/src/main/java/kekztech/common/tileentities/MTEHatchTFFT.java b/src/main/java/kekztech/common/tileentities/MTEHatchTFFT.java new file mode 100644 index 0000000000..66e93a7cad --- /dev/null +++ b/src/main/java/kekztech/common/tileentities/MTEHatchTFFT.java @@ -0,0 +1,271 @@ +package kekztech.common.tileentities; + +import java.util.HashMap; + +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +import appeng.api.AEApi; +import appeng.api.config.AccessRestriction; +import appeng.api.config.Actionable; +import appeng.api.networking.security.BaseActionSource; +import appeng.api.storage.IExternalStorageHandler; +import appeng.api.storage.IMEInventory; +import appeng.api.storage.IMEMonitor; +import appeng.api.storage.IMEMonitorHandlerReceiver; +import appeng.api.storage.StorageChannel; +import appeng.api.storage.data.IAEFluidStack; +import appeng.api.storage.data.IItemList; +import appeng.util.item.AEFluidStack; +import appeng.util.item.FluidList; +import cpw.mods.fml.common.Optional; +import gregtech.api.enums.Textures; +import gregtech.api.fluid.GTFluidTank; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.render.TextureFactory; + +@Optional.Interface(iface = "appeng.api.storage.IMEMonitor", modid = "appliedenergistics2", striprefs = true) +public class MTEHatchTFFT extends MTEHatch implements IMEMonitor { + + @Optional.Interface( + iface = "appeng.api.storage.IExternalStorageHandler", + modid = "appliedenergistics2", + striprefs = true) + private static class AE2TFFTHatchHandler implements IExternalStorageHandler { + + @Override + @Optional.Method(modid = "appliedenergistics2") + public boolean canHandle(TileEntity te, ForgeDirection d, StorageChannel channel, BaseActionSource mySrc) { + return channel == StorageChannel.FLUIDS && te instanceof BaseMetaTileEntity + && ((BaseMetaTileEntity) te).getMetaTileEntity() instanceof MTEHatchTFFT; + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public IMEInventory getInventory(TileEntity te, ForgeDirection d, StorageChannel channel, + BaseActionSource src) { + if (channel == StorageChannel.FLUIDS) { + return ((MTEHatchTFFT) (((BaseMetaTileEntity) te).getMetaTileEntity())); + } + return null; + } + } + + private static final Textures.BlockIcons.CustomIcon TEXTURE_TFFT_HATCH = new Textures.BlockIcons.CustomIcon( + "iconsets/TFFT_HATCH"); + + private HashMap, Object> listeners = new HashMap<>(); + private MTETankTFFT controller; + + public MTEHatchTFFT(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 3, 0, "All-in-one access for the T.F.F.T"); + } + + public MTEHatchTFFT(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + return super.getTexture(aBaseMetaTileEntity, side, facing, colorIndex, aActive, aRedstone); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(Textures.BlockIcons.OVERLAY_PIPE_IN), + TextureFactory.builder() + .addIcon(TEXTURE_TFFT_HATCH) + .extFacing() + .build() }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, TextureFactory.of(Textures.BlockIcons.OVERLAY_PIPE_IN), + TextureFactory.builder() + .addIcon(TEXTURE_TFFT_HATCH) + .extFacing() + .build() }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchTFFT(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { + return (controller != null) ? controller.pull(resource, doFill) : 0; + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + if (controller != null) { + final GTFluidTank sFluid = controller.getSelectedFluid(); + if (controller.getFluidSelector() == -1 || (sFluid != null && sFluid.contains(resource))) { + return controller.push(resource, doDrain); + } + } + return null; + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { + if (controller != null) { + final GTFluidTank sFluid = controller.getSelectedFluid(); + if (controller.getFluidSelector() == -1) return controller.push(maxDrain, doDrain); + if (sFluid != null) return controller.push(sFluid.get(maxDrain), doDrain); + } + return null; + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection from) { + return (controller != null) ? controller.getTankInfo() : null; + } + + public void bind(MTETankTFFT controller) { + this.controller = controller; + } + + public void unbind() { + this.controller = null; + } + + @Optional.Method(modid = "appliedenergistics2") + public static void registerAEIntegration() { + AEApi.instance() + .registries() + .externalStorage() + .addExternalStorageInterface(new AE2TFFTHatchHandler()); + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public IItemList getAvailableItems(IItemList out, int iteration) { + if (controller != null) { + for (int i = 0; i < MTETankTFFT.MAX_DISTINCT_FLUIDS; i++) { + if (!controller.STORE[i].isEmpty()) { + IAEFluidStack s = AEFluidStack.create(controller.STORE[i].get()); + s.setStackSize(controller.STORE[i].amount()); + out.add(s); + } + } + } + return out; + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public IItemList getStorageList() { + IItemList fluidList = new FluidList(); + if (controller != null) { + for (int i = 0; i < MTETankTFFT.MAX_DISTINCT_FLUIDS; i++) { + if (!controller.STORE[i].isEmpty()) { + IAEFluidStack s = AEFluidStack.create(controller.STORE[i].get()); + s.setStackSize(controller.STORE[i].amount()); + fluidList.add(s); + } + } + } + return fluidList; + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public void addListener(IMEMonitorHandlerReceiver l, Object verificationToken) { + if (listeners == null) listeners = new HashMap<>(); + listeners.put(l, verificationToken); + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public void removeListener(IMEMonitorHandlerReceiver l) { + if (listeners == null) listeners = new HashMap<>(); + listeners.remove(l); + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public AccessRestriction getAccess() { + return AccessRestriction.READ_WRITE; + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public boolean isPrioritized(IAEFluidStack input) { + if (controller == null || input == null) return false; + return controller.contains(input.getFluidStack()) || controller.fluidCount() < MTETankTFFT.MAX_DISTINCT_FLUIDS; + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public boolean canAccept(IAEFluidStack input) { + if (controller == null || input == null) return false; + return controller.contains(input.getFluidStack()) || controller.fluidCount() < MTETankTFFT.MAX_DISTINCT_FLUIDS; + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public int getPriority() { + return 0; + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public int getSlot() { + return 0; + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public boolean validForPass(int i) { + return true; + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public IAEFluidStack injectItems(IAEFluidStack input, Actionable mode, BaseActionSource src) { + final FluidStack inputStack = input.getFluidStack(); + if (inputStack == null) return null; + if (controller == null || getBaseMetaTileEntity() == null) return input; + if (mode != Actionable.SIMULATE) getBaseMetaTileEntity().markDirty(); + long amount = controller.pull(input.getFluidStack(), input.getStackSize(), mode != Actionable.SIMULATE); + if (amount == 0) return input; + if (amount == input.getStackSize()) return null; + IAEFluidStack result = AEFluidStack.create(input.getFluidStack()); + result.setStackSize(input.getStackSize() - amount); + return result; + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public IAEFluidStack extractItems(IAEFluidStack request, Actionable mode, BaseActionSource src) { + if (controller == null || getBaseMetaTileEntity() == null) return null; + if (mode != Actionable.SIMULATE) getBaseMetaTileEntity().markDirty(); + long amount = controller.push(request.getFluidStack(), request.getStackSize(), mode != Actionable.SIMULATE); + if (amount == 0) return null; + if (amount == request.getStackSize()) return request.copy(); + IAEFluidStack result = AEFluidStack.create(request.getFluidStack()); + result.setStackSize(amount); + return result; + } + + @Override + @Optional.Method(modid = "appliedenergistics2") + public StorageChannel getChannel() { + return StorageChannel.FLUIDS; + } +} diff --git a/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java new file mode 100644 index 0000000000..2672d0e994 --- /dev/null +++ b/src/main/java/kekztech/common/tileentities/MTELapotronicSuperCapacitor.java @@ -0,0 +1,1213 @@ +package kekztech.common.tileentities; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onlyIf; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.filterByMTEClass; +import static java.lang.Math.min; +import static kekztech.util.Util.toPercentageFrom; +import static kekztech.util.Util.toStandardForm; + +import java.math.BigInteger; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Queue; +import java.util.Set; +import java.util.UUID; +import java.util.function.Consumer; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IChatComponent; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.StructureUtility; +import com.gtnewhorizon.structurelib.util.ItemStackPredicate.NBTMode; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; + +import bartworks.API.BorosilicateGlass; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Textures.BlockIcons; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.misc.WirelessNetworkManager; +import kekztech.client.gui.KTUITextures; +import kekztech.common.Blocks; +import kekztech.common.itemBlocks.ItemBlockLapotronicEnergyUnit; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoTunnel; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyTunnel; + +public class MTELapotronicSuperCapacitor extends MTEEnhancedMultiBlockBase + implements ISurvivalConstructable { + + private enum TopState { + MayBeTop, + Top, + NotTop + } + + private boolean canUseWireless = false; + private boolean wireless_mode = false; + private boolean not_processed_lsc = true; + private int counter = 1; + private boolean balanced = false; + + private final Queue energyInputValues = new LinkedList<>(); + private final Queue energyOutputValues = new LinkedList<>(); + + private final long max_passive_drain_eu_per_tick_per_uhv_cap = 1_000_000; + private final long max_passive_drain_eu_per_tick_per_uev_cap = 100_000_000; + private final long max_passive_drain_eu_per_tick_per_uiv_cap = (long) Math.pow(10, 10); + private final long max_passive_drain_eu_per_tick_per_umv_cap = (long) Math.pow(10, 12); + + private enum Capacitor { + + IV(2, BigInteger.valueOf(ItemBlockLapotronicEnergyUnit.IV_cap_storage)), + LuV(3, BigInteger.valueOf(ItemBlockLapotronicEnergyUnit.LuV_cap_storage)), + ZPM(4, BigInteger.valueOf(ItemBlockLapotronicEnergyUnit.ZPM_cap_storage)), + UV(5, BigInteger.valueOf(ItemBlockLapotronicEnergyUnit.UV_cap_storage)), + UHV(6, MAX_LONG), + None(0, BigInteger.ZERO), + EV(1, BigInteger.valueOf(ItemBlockLapotronicEnergyUnit.EV_cap_storage)), + UEV(7, MAX_LONG), + UIV(8, BigInteger.valueOf(ItemBlockLapotronicEnergyUnit.UIV_cap_storage)), + UMV(9, ItemBlockLapotronicEnergyUnit.UMV_cap_storage); + + private final int minimalGlassTier; + private final BigInteger providedCapacity; + static final Capacitor[] VALUES = values(); + static final Capacitor[] VALUES_BY_TIER = Arrays.stream(values()) + .sorted(Comparator.comparingInt(Capacitor::getMinimalGlassTier)) + .toArray(Capacitor[]::new); + + Capacitor(int minimalGlassTier, BigInteger providedCapacity) { + this.minimalGlassTier = minimalGlassTier; + this.providedCapacity = providedCapacity; + } + + public int getMinimalGlassTier() { + return minimalGlassTier; + } + + public BigInteger getProvidedCapacity() { + return providedCapacity; + } + + public static int getIndexFromGlassTier(int glassTier) { + for (int index = 0; index < values().length; index++) { + if (values()[index].getMinimalGlassTier() == glassTier) { + return index; + } + } + return -1; + } + } + + private static final String STRUCTURE_PIECE_BASE = "base"; + private static final String STRUCTURE_PIECE_LAYER = "slice"; + private static final String STRUCTURE_PIECE_TOP = "top"; + private static final String STRUCTURE_PIECE_MID = "mid"; + private static final int GLASS_TIER_UNSET = -2; + + private static final Block LSC_PART = Blocks.lscLapotronicEnergyUnit; + private static final Item LSC_PART_ITEM = Item.getItemFromBlock(LSC_PART); + private static final int CASING_META = 0; + private static final int CASING_TEXTURE_ID = (42 << 7) | 127; + + private static final int DURATION_AVERAGE_TICKS = 100; + + // height channel for height. + // glass channel for glass + // capacitor channel for capacitor, but it really just pick whatever capacitor it can find in survival + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_BASE, + transpose( + new String[][] { { "bbbbb", "bbbbb", "bbbbb", "bbbbb", "bbbbb", }, + { "bb~bb", "bbbbb", "bbbbb", "bbbbb", "bbbbb", }, })) + .addShape( + STRUCTURE_PIECE_LAYER, + transpose(new String[][] { { "ggggg", "gcccg", "gcccg", "gcccg", "ggggg", }, })) + .addShape(STRUCTURE_PIECE_TOP, transpose(new String[][] { { "ggggg", "ggggg", "ggggg", "ggggg", "ggggg", }, })) + .addShape(STRUCTURE_PIECE_MID, transpose(new String[][] { { "ggggg", "gCCCg", "gCCCg", "gCCCg", "ggggg", }, })) + .addElement( + 'b', + buildHatchAdder( + MTELapotronicSuperCapacitor.class).atLeast(LSCHatchElement.Energy, LSCHatchElement.Dynamo, Maintenance) + .hatchItemFilterAnd( + (t, h) -> ChannelDataAccessor.getChannelData(h, "glass") < 6 + ? filterByMTEClass(ImmutableList.of(MTEHatchEnergyTunnel.class, MTEHatchDynamoTunnel.class)) + .negate() + : s -> true) + .casingIndex(CASING_TEXTURE_ID) + .dot(1) + .buildAndChain(onElementPass(te -> te.casingAmount++, ofBlock(LSC_PART, CASING_META)))) + .addElement( + 'g', + withChannel( + "glass", + BorosilicateGlass + .ofBoroGlass((byte) GLASS_TIER_UNSET, (te, t) -> te.glassTier = t, te -> te.glassTier))) + .addElement( + 'c', + ofChain( + onlyIf( + te -> te.topState != TopState.NotTop, + onElementPass( + te -> te.topState = TopState.Top, + withChannel( + "glass", + BorosilicateGlass.ofBoroGlass( + (byte) GLASS_TIER_UNSET, + (te, t) -> te.glassTier = t, + te -> te.glassTier)))), + onlyIf( + te -> te.topState != TopState.Top, + onElementPass( + te -> te.topState = TopState.NotTop, + new IStructureElement() { + + @Override + public boolean check(MTELapotronicSuperCapacitor t, World world, int x, int y, int z) { + Block worldBlock = world.getBlock(x, y, z); + int meta = worldBlock.getDamageValue(world, x, y, z); + if (LSC_PART != worldBlock || meta == 0) return false; + t.capacitors[meta - 1]++; + return true; + } + + private int getHint(ItemStack stack) { + return Capacitor.VALUES_BY_TIER[Math.min( + Capacitor.VALUES_BY_TIER.length, + ChannelDataAccessor.getChannelData(stack, "capacitor")) - 1].getMinimalGlassTier() + + 1; + } + + @Override + public boolean spawnHint(MTELapotronicSuperCapacitor t, World world, int x, int y, int z, + ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, LSC_PART, getHint(trigger)); + return true; + } + + @Override + public boolean placeBlock(MTELapotronicSuperCapacitor t, World world, int x, int y, int z, + ItemStack trigger) { + world.setBlock(x, y, z, LSC_PART, getHint(trigger), 3); + return true; + } + + @Override + public PlaceResult survivalPlaceBlock(MTELapotronicSuperCapacitor t, World world, int x, + int y, int z, ItemStack trigger, IItemSource source, EntityPlayerMP actor, + Consumer chatter) { + if (check(t, world, x, y, z)) return PlaceResult.SKIP; + int glassTier = ChannelDataAccessor.getChannelData(trigger, "glass") + 2; + ItemStack targetStack = source + .takeOne( + s -> s != null && s.stackSize >= 0 + && s.getItem() == LSC_PART_ITEM + && Capacitor.VALUES[Math.min(s.getItemDamage(), Capacitor.VALUES.length) + - 1].getMinimalGlassTier() > glassTier, + true); + if (targetStack == null) return PlaceResult.REJECT; + return StructureUtility.survivalPlaceBlock( + targetStack, + NBTMode.EXACT, + targetStack.stackTagCompound, + true, + world, + x, + y, + z, + source, + actor, + chatter); + } + })))) + .addElement('C', ofBlock(LSC_PART, 1)) + .build(); + + private static final BigInteger MAX_LONG = BigInteger.valueOf(Long.MAX_VALUE); + + private final Set mEnergyHatchesTT = new HashSet<>(); + private final Set mDynamoHatchesTT = new HashSet<>(); + private final Set mEnergyTunnelsTT = new HashSet<>(); + private final Set mDynamoTunnelsTT = new HashSet<>(); + /** + * Count the amount of capacitors of each tier in each slot. Index = meta - 1 + */ + private final int[] capacitors = new int[10]; + + private BigInteger capacity = BigInteger.ZERO; + private BigInteger stored = BigInteger.ZERO; + private long passiveDischargeAmount = 0; + private long inputLastTick = 0; + private long outputLastTick = 0; + private int repairStatusCache = 0; + + private byte glassTier = -1; + private int casingAmount = 0; + private TopState topState = TopState.MayBeTop; + + private long mMaxEUIn = 0; + private long mMaxEUOut = 0; + + public MTELapotronicSuperCapacitor(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTELapotronicSuperCapacitor(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) { + return new MTELapotronicSuperCapacitor(super.mName); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + private void processInputHatch(MTEHatch aHatch, int aBaseCasingIndex) { + mMaxEUIn += aHatch.maxEUInput() * aHatch.maxAmperesIn(); + aHatch.updateTexture(aBaseCasingIndex); + } + + private void processOutputHatch(MTEHatch aHatch, int aBaseCasingIndex) { + mMaxEUOut += aHatch.maxEUOutput() * aHatch.maxAmperesOut(); + aHatch.updateTexture(aBaseCasingIndex); + } + + private boolean addBottomHatches(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null || aTileEntity.isDead()) return false; + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (!(aMetaTileEntity instanceof MTEHatch)) return false; + if (aMetaTileEntity instanceof MTEHatchMaintenance) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return MTELapotronicSuperCapacitor.this.mMaintenanceHatches.add((MTEHatchMaintenance) aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchEnergy) { + // Add GT hatches + final MTEHatchEnergy tHatch = ((MTEHatchEnergy) aMetaTileEntity); + processInputHatch(tHatch, aBaseCasingIndex); + return mEnergyHatches.add(tHatch); + } else if (aMetaTileEntity instanceof MTEHatchEnergyTunnel) { + // Add TT Laser hatches + final MTEHatchEnergyTunnel tHatch = ((MTEHatchEnergyTunnel) aMetaTileEntity); + processInputHatch(tHatch, aBaseCasingIndex); + return mEnergyTunnelsTT.add(tHatch); + } else if (aMetaTileEntity instanceof MTEHatchEnergyMulti) { + // Add TT hatches + final MTEHatchEnergyMulti tHatch = (MTEHatchEnergyMulti) aMetaTileEntity; + processInputHatch(tHatch, aBaseCasingIndex); + return mEnergyHatchesTT.add(tHatch); + } else if (aMetaTileEntity instanceof MTEHatchDynamo) { + // Add GT hatches + final MTEHatchDynamo tDynamo = (MTEHatchDynamo) aMetaTileEntity; + processOutputHatch(tDynamo, aBaseCasingIndex); + return mDynamoHatches.add(tDynamo); + } else if (aMetaTileEntity instanceof MTEHatchDynamoTunnel) { + // Add TT Laser hatches + final MTEHatchDynamoTunnel tDynamo = (MTEHatchDynamoTunnel) aMetaTileEntity; + processOutputHatch(tDynamo, aBaseCasingIndex); + return mDynamoTunnelsTT.add(tDynamo); + } else if (aMetaTileEntity instanceof MTEHatchDynamoMulti) { + // Add TT hatches + final MTEHatchDynamoMulti tDynamo = (MTEHatchDynamoMulti) aMetaTileEntity; + processOutputHatch(tDynamo, aBaseCasingIndex); + return mDynamoHatchesTT.add(tDynamo); + } + return false; + } + + private int getUHVCapacitorCount() { + return capacitors[4]; + } + + private int getUEVCapacitorCount() { + return capacitors[7]; + } + + private int getUIVCapacitorCount() { + return capacitors[8]; + } + + private int getUMVCapacitorCount() { + return capacitors[9]; + } + + private int wirelessCapableCapacitors() { + return capacitors[4] + capacitors[7] + capacitors[8] + capacitors[9]; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Energy Storage") + .addInfo("Loses energy equal to 1% of the total capacity every 24 hours.") + .addInfo( + "Capped at " + EnumChatFormatting.RED + + GTUtility.formatNumbers(max_passive_drain_eu_per_tick_per_uhv_cap) + + EnumChatFormatting.GRAY + + " EU/t passive loss per " + + GTValues.TIER_COLORS[9] + + GTValues.VN[9] + + EnumChatFormatting.GRAY + + " capacitor.") + .addInfo( + "The passive loss increases " + EnumChatFormatting.DARK_RED + + "100" + + EnumChatFormatting.GRAY + + "-fold" + + " for every capacitor tier above.") + .addInfo("Passive loss is multiplied by the number of maintenance issues present.") + .addSeparator() + .addInfo("Glass shell has to be Tier - 3 of the highest capacitor tier.") + .addInfo( + GTValues.TIER_COLORS[8] + GTValues.VN[8] + + EnumChatFormatting.GRAY + + "-tier glass required for " + + EnumChatFormatting.BLUE + + "Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.GRAY + + " Laser Hatches.") + .addInfo("Add more or better capacitors to increase capacity.") + .addSeparator() + .addInfo("Wireless mode can be enabled by right clicking with a screwdriver.") + .addInfo( + "This mode can only be enabled if you have a " + GTValues.TIER_COLORS[9] + + GTValues.VN[9] + + EnumChatFormatting.GRAY + + "+ capacitor in the multiblock.") + .addInfo( + "When enabled every " + EnumChatFormatting.BLUE + + GTUtility + .formatNumbers(ItemBlockLapotronicEnergyUnit.LSC_time_between_wireless_rebalance_in_ticks) + + EnumChatFormatting.GRAY + + " ticks the LSC will attempt to re-balance against your") + .addInfo("wireless EU network.") + .addInfo( + "If there is less than " + EnumChatFormatting.RED + + GTUtility.formatNumbers(ItemBlockLapotronicEnergyUnit.LSC_wireless_eu_cap) + + EnumChatFormatting.GRAY + + "(" + + GTValues.TIER_COLORS[9] + + GTValues.VN[9] + + EnumChatFormatting.GRAY + + ") EU in the LSC") + .addInfo("it will withdraw from the network and add to the LSC.") + .addInfo("If there is more it will add the EU to the network and remove it from the LSC.") + .addInfo( + "The threshold increases " + EnumChatFormatting.DARK_RED + + "100" + + EnumChatFormatting.GRAY + + "-fold" + + " for every capacitor tier above.") + .addSeparator() + .beginVariableStructureBlock(5, 5, 4, 50, 5, 5, false) + .addStructureInfo("Modular height of 4-50 blocks.") + .addController("Front center bottom") + .addOtherStructurePart("Lapotronic Super Capacitor Casing", "5x2x5 base (at least 17x)") + .addOtherStructurePart( + "Lapotronic Capacitor (" + GTValues.TIER_COLORS[4] + + GTValues.VN[4] + + EnumChatFormatting.GRAY + + "-" + + GTValues.TIER_COLORS[8] + + GTValues.VN[8] + + EnumChatFormatting.GRAY + + "), Ultimate Capacitor (" + + GTValues.TIER_COLORS[9] + + GTValues.VN[9] + + EnumChatFormatting.GRAY + + "-" + + GTValues.TIER_COLORS[12] + + GTValues.VN[12] + + EnumChatFormatting.GRAY + + ")", + "Center 3x(1-47)x3 above base (9-423 blocks)") + .addStructureInfo( + "You can also use the Empty Capacitor to save materials if you use it for less than half the blocks") + .addOtherStructurePart("Borosilicate Glass (any)", "41-777x, Encase capacitor pillar") + .addEnergyHatch("Any casing") + .addDynamoHatch("Any casing") + .addOtherStructurePart( + "Laser Target/Source Hatches", + "Any casing, must be using " + GTValues.TIER_COLORS[8] + + GTValues.VN[8] + + EnumChatFormatting.GRAY + + "-tier glass") + .addStructureInfo("You can have several I/O Hatches") + .addSubChannelUsage("glass", "Borosilicate Glass Tier") + .addSubChannelUsage("capacitor", "Maximum Capacitor Tier") + .addSubChannelUsage("height", "Height of structure") + .addMaintenanceHatch("Any casing") + .toolTipFinisher("KekzTech"); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, + ForgeDirection forgeDirectionacing, int colorIndex, boolean aActive, boolean aRedstone) { + ITexture[] sTexture = new ITexture[] { + TextureFactory.of(BlockIcons.MACHINE_CASING_FUSION_GLASS, Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; + if (side == forgeDirectionacing && aActive) { + sTexture = new ITexture[] { TextureFactory + .of(BlockIcons.MACHINE_CASING_FUSION_GLASS_YELLOW, Dyes.getModulation(-1, Dyes._NULL.mRGBa)) }; + } + return sTexture; + } + + private UUID global_energy_user_uuid; + + @Override + public void onPreTick(IGregTechTileEntity tileEntity, long aTick) { + super.onPreTick(tileEntity, aTick); + + // On first tick (aTick restarts from 0 upon world reload). + if (not_processed_lsc && tileEntity.isServerSide()) { + // Add user to wireless network. + WirelessNetworkManager.strongCheckOrAddUser(tileEntity.getOwnerUuid()); + + // Get team UUID. + global_energy_user_uuid = tileEntity.getOwnerUuid(); + + not_processed_lsc = false; + } + } + + @Override + public boolean isCorrectMachinePart(ItemStack stack) { + return true; + } + + @Override + public boolean checkRecipe(ItemStack stack) { + this.mProgresstime = 1; + this.mMaxProgresstime = 1; + this.mEUt = 0; + this.mEfficiencyIncrease = 10000; + return true; + } + + @Override + public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { + WirelessNetworkManager.strongCheckOrAddUser(thisController.getOwnerUuid()); + + // Reset capacitor counts + Arrays.fill(capacitors, 0); + // Clear TT hatches + mEnergyHatchesTT.clear(); + mDynamoHatchesTT.clear(); + mEnergyTunnelsTT.clear(); + mDynamoTunnelsTT.clear(); + + mMaxEUIn = 0; + mMaxEUOut = 0; + + glassTier = GLASS_TIER_UNSET; + casingAmount = 0; + + if (!checkPiece(STRUCTURE_PIECE_BASE, 2, 1, 0)) return false; + + if (casingAmount < 17) return false; + + topState = TopState.NotTop; // need at least one layer of capacitor to form, obviously + int layer = 2; + while (true) { + if (!checkPiece(STRUCTURE_PIECE_LAYER, 2, layer, 0)) return false; + layer++; + if (topState == TopState.Top) break; // top found, break out + topState = TopState.MayBeTop; + if (layer > 50) return false; // too many layers + } + + // Make sure glass tier is T-2 of the highest tier capacitor in the structure + // Count down from the highest tier until an entry is found + // Borosilicate glass after 5 are just recolours of 0 + for (int highestGlassTier = capacitors.length - 1; highestGlassTier >= 0; highestGlassTier--) { + int highestCapacitor = Capacitor.getIndexFromGlassTier(highestGlassTier); + if (capacitors[highestCapacitor] > 0) { + if (Capacitor.VALUES[highestCapacitor].getMinimalGlassTier() > glassTier) return false; + break; + } + } + + // Glass has to be at least UV-tier to allow TT Laser hatches + if (glassTier < 8) { + if (mEnergyTunnelsTT.size() > 0 || mDynamoTunnelsTT.size() > 0) return false; + } + + // Check if enough (more than 50%) non-empty caps + if (capacitors[5] > capacitors[0] + capacitors[1] + + capacitors[2] + + capacitors[3] + + getUHVCapacitorCount() + + capacitors[6] + + getUEVCapacitorCount() + + getUIVCapacitorCount() + + getUMVCapacitorCount()) return false; + + // Calculate total capacity + capacity = BigInteger.ZERO; + for (int i = 0; i < capacitors.length; i++) { + int count = capacitors[i]; + capacity = capacity.add( + Capacitor.VALUES[i].getProvidedCapacity() + .multiply(BigInteger.valueOf(count))); + } + // Calculate how much energy to void each tick + passiveDischargeAmount = recalculateLossWithMaintenance(getRepairStatus()); + return mMaintenanceHatches.size() == 1; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + int layer = min(stackSize.stackSize + 3, 50); + buildPiece(STRUCTURE_PIECE_BASE, stackSize, hintsOnly, 2, 1, 0); + for (int i = 2; i < layer - 1; i++) buildPiece(STRUCTURE_PIECE_MID, stackSize, hintsOnly, 2, i, 0); + buildPiece(STRUCTURE_PIECE_TOP, stackSize, hintsOnly, 2, layer - 1, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (mMachine) return -1; + int layer = Math.min(ChannelDataAccessor.getChannelData(stackSize, "height") + 3, 50); + int built; + built = survivialBuildPiece( + STRUCTURE_PIECE_BASE, + stackSize, + 2, + 1, + 0, + elementBudget, + source, + actor, + false, + true); + if (built >= 0) return built; + for (int i = 2; i < layer - 1; i++) built = survivialBuildPiece( + STRUCTURE_PIECE_MID, + stackSize, + 2, + i, + 0, + elementBudget, + source, + actor, + false, + true); + if (built >= 0) return built; + return survivialBuildPiece( + STRUCTURE_PIECE_TOP, + stackSize, + 2, + layer - 1, + 0, + elementBudget, + source, + actor, + false, + true); + } + + @Override + public boolean onRunningTick(ItemStack stack) { + // Reset I/O cache + inputLastTick = 0; + outputLastTick = 0; + + long temp_stored = 0L; + + // Draw energy from GT hatches + for (MTEHatchEnergy eHatch : super.mEnergyHatches) { + if (eHatch == null || !eHatch.isValid()) { + continue; + } + final long power = getPowerToDraw(eHatch.maxEUInput() * eHatch.maxAmperesIn()); + if (eHatch.getEUVar() >= power) { + eHatch.setEUVar(eHatch.getEUVar() - power); + temp_stored += power; + inputLastTick += power; + } + } + + // Output energy to GT hatches + for (MTEHatchDynamo eDynamo : super.mDynamoHatches) { + if (eDynamo == null || !eDynamo.isValid()) { + continue; + } + final long power = getPowerToPush(eDynamo.maxEUOutput() * eDynamo.maxAmperesOut()); + if (power <= eDynamo.maxEUStore() - eDynamo.getEUVar()) { + eDynamo.setEUVar(eDynamo.getEUVar() + power); + temp_stored -= power; + outputLastTick += power; + } + } + + // Draw energy from TT hatches + for (MTEHatchEnergyMulti eHatch : mEnergyHatchesTT) { + if (eHatch == null || !eHatch.isValid()) { + continue; + } + final long power = getPowerToDraw(eHatch.maxEUInput() * eHatch.maxAmperesIn()); + if (eHatch.getEUVar() >= power) { + eHatch.setEUVar(eHatch.getEUVar() - power); + temp_stored += power; + inputLastTick += power; + } + } + + // Output energy to TT hatches + for (MTEHatchDynamoMulti eDynamo : mDynamoHatchesTT) { + if (eDynamo == null || !eDynamo.isValid()) { + continue; + } + final long power = getPowerToPush(eDynamo.maxEUOutput() * eDynamo.maxAmperesOut()); + if (power <= eDynamo.maxEUStore() - eDynamo.getEUVar()) { + eDynamo.setEUVar(eDynamo.getEUVar() + power); + temp_stored -= power; + outputLastTick += power; + } + } + + // Draw energy from TT Laser hatches + for (MTEHatchEnergyTunnel eHatch : mEnergyTunnelsTT) { + if (eHatch == null || !eHatch.isValid()) { + continue; + } + final long ttLaserWattage = eHatch.maxEUInput() * eHatch.Amperes - (eHatch.Amperes / 20); + final long power = getPowerToDraw(ttLaserWattage); + if (eHatch.getEUVar() >= power) { + eHatch.setEUVar(eHatch.getEUVar() - power); + temp_stored += power; + inputLastTick += power; + } + } + + // Output energy to TT Laser hatches + for (MTEHatchDynamoTunnel eDynamo : mDynamoTunnelsTT) { + if (eDynamo == null || !eDynamo.isValid()) { + continue; + } + final long ttLaserWattage = eDynamo.maxEUOutput() * eDynamo.Amperes - (eDynamo.Amperes / 20); + final long power = getPowerToPush(ttLaserWattage); + if (power <= eDynamo.maxEUStore() - eDynamo.getEUVar()) { + eDynamo.setEUVar(eDynamo.getEUVar() + power); + temp_stored -= power; + outputLastTick += power; + } + } + + if (wirelessCapableCapacitors() <= 0) { + wireless_mode = false; + } + + // Every LSC_time_between_wireless_rebalance_in_ticks check against wireless network for re-balancing. + counter++; + if (wireless_mode && (counter >= ItemBlockLapotronicEnergyUnit.LSC_time_between_wireless_rebalance_in_ticks)) { + + // Reset tick counter. + counter = rebalance(); + } + + // Lose some energy. + // Re-calculate if the repair status changed. + if (super.getRepairStatus() != repairStatusCache) { + passiveDischargeAmount = recalculateLossWithMaintenance(super.getRepairStatus()); + } + + // This will break if you transfer more than 2^63 EU/t, so don't do that. Thanks <3 + temp_stored -= passiveDischargeAmount; + stored = stored.add(BigInteger.valueOf(temp_stored)); + + // Check that the machine has positive EU stored. + stored = (stored.compareTo(BigInteger.ZERO) <= 0) ? BigInteger.ZERO : stored; + + IGregTechTileEntity tBMTE = this.getBaseMetaTileEntity(); + + tBMTE.injectEnergyUnits(ForgeDirection.UNKNOWN, inputLastTick, 1L); + tBMTE.drainEnergyUnits(ForgeDirection.UNKNOWN, outputLastTick, 1L); + + // Add I/O values to Queues + if (energyInputValues.size() > DURATION_AVERAGE_TICKS) { + energyInputValues.remove(); + } + energyInputValues.offer(inputLastTick); + + if (energyOutputValues.size() > DURATION_AVERAGE_TICKS) { + energyOutputValues.remove(); + } + + energyOutputValues.offer(outputLastTick); + + return true; + } + + private int rebalance() { + + balanced = true; + + // Find difference. + BigInteger transferred_eu = stored.subtract( + (ItemBlockLapotronicEnergyUnit.LSC_wireless_eu_cap.multiply(BigInteger.valueOf(getUHVCapacitorCount()))) + .add( + ItemBlockLapotronicEnergyUnit.UEV_wireless_eu_cap + .multiply(BigInteger.valueOf(getUEVCapacitorCount()))) + .add( + ItemBlockLapotronicEnergyUnit.UIV_wireless_eu_cap + .multiply(BigInteger.valueOf(getUIVCapacitorCount()))) + .add( + ItemBlockLapotronicEnergyUnit.UMV_wireless_eu_cap + .multiply(BigInteger.valueOf(getUMVCapacitorCount())))); + + if (transferred_eu.signum() == 1) { + inputLastTick += transferred_eu.longValue(); + } else { + outputLastTick += transferred_eu.longValue(); + } + + // If that difference can be added then do so. + if (WirelessNetworkManager.addEUToGlobalEnergyMap(global_energy_user_uuid, transferred_eu)) { + // If it succeeds there was sufficient energy so set the internal capacity as such. + stored = ItemBlockLapotronicEnergyUnit.LSC_wireless_eu_cap + .multiply(BigInteger.valueOf(getUHVCapacitorCount())) + .add( + ItemBlockLapotronicEnergyUnit.UEV_wireless_eu_cap + .multiply(BigInteger.valueOf(getUEVCapacitorCount())) + .add( + ItemBlockLapotronicEnergyUnit.UIV_wireless_eu_cap + .multiply(BigInteger.valueOf(getUIVCapacitorCount()))) + .add( + ItemBlockLapotronicEnergyUnit.UMV_wireless_eu_cap + .multiply(BigInteger.valueOf(getUMVCapacitorCount())))); + } + + return 1; + } + + /** + * To be called whenever the maintenance status changes or the capacity was recalculated + * + * @param repairStatus This machine's repair status + * @return new BigInteger instance for passiveDischargeAmount + */ + private long recalculateLossWithMaintenance(int repairStatus) { + repairStatusCache = repairStatus; + + long temp_capacity_divided = 0; + + if (wirelessCapableCapacitors() == 0) { + temp_capacity_divided = capacity.divide(BigInteger.valueOf(100L * 86400L * 20L)) + .longValue(); + } + + // Passive loss is multiplied by number of UHV+ caps. Minimum of 1 otherwise loss is 0 for non-UHV+ caps + // calculations. + if (wirelessCapableCapacitors() != 0) { + temp_capacity_divided = getUHVCapacitorCount() * max_passive_drain_eu_per_tick_per_uhv_cap + + getUEVCapacitorCount() * max_passive_drain_eu_per_tick_per_uev_cap + + getUIVCapacitorCount() * max_passive_drain_eu_per_tick_per_uiv_cap + + getUMVCapacitorCount() * max_passive_drain_eu_per_tick_per_umv_cap; + } + + // Passive loss is multiplied by number of maintenance issues. + long total_passive_loss = temp_capacity_divided * (getIdealStatus() - repairStatus + 1); + + // Maximum of 100,000 EU/t drained per UHV cell. The logic is 1% of EU capacity should be drained every 86400 + // seconds (1 day). + return total_passive_loss; + } + + /** + * Calculate how much EU to draw from an Energy Hatch + * + * @param hatchWatts Hatch amperage * voltage + * @return EU amount + */ + private long getPowerToDraw(long hatchWatts) { + final BigInteger remcapActual = capacity.subtract(stored); + final BigInteger recampLimited = (MAX_LONG.compareTo(remcapActual) > 0) ? remcapActual : MAX_LONG; + return min(hatchWatts, recampLimited.longValue()); + } + + /** + * Calculate how much EU to push into a Dynamo Hatch + * + * @param hatchWatts Hatch amperage * voltage + * @return EU amount + */ + private long getPowerToPush(long hatchWatts) { + final BigInteger remStoredLimited = (MAX_LONG.compareTo(stored) > 0) ? stored : MAX_LONG; + return min(hatchWatts, remStoredLimited.longValue()); + } + + private long getAvgIn() { + long sum = 0L; + for (long l : energyInputValues) { + sum += l; + } + return sum / Math.max(energyInputValues.size(), 1); + } + + private long getAvgOut() { + long sum = 0L; + for (long l : energyOutputValues) { + sum += l; + } + return sum / Math.max(energyOutputValues.size(), 1); + } + + @Override + public String[] getInfoData() { + NumberFormat nf = NumberFormat.getNumberInstance(); + int secInterval = DURATION_AVERAGE_TICKS / 20; + + // Caching avgin and avgout + double avgIn = getAvgIn(); + double avgOut = getAvgOut(); + + final ArrayList ll = new ArrayList<>(); + ll.add(EnumChatFormatting.YELLOW + "Operational Data:" + EnumChatFormatting.RESET); + ll.add("EU Stored: " + nf.format(stored) + " EU"); + ll.add("EU Stored: " + toStandardForm(stored) + " EU"); + ll.add("Used Capacity: " + toPercentageFrom(stored, capacity)); + ll.add("Total Capacity: " + nf.format(capacity) + " EU"); + ll.add("Total Capacity: " + toStandardForm(capacity) + " EU"); + ll.add("Passive Loss: " + nf.format(passiveDischargeAmount) + " EU/t"); + ll.add("EU IN: " + GTUtility.formatNumbers(inputLastTick) + " EU/t"); + ll.add("EU OUT: " + GTUtility.formatNumbers(outputLastTick) + " EU/t"); + ll.add("Avg EU IN: " + nf.format(avgIn) + " (last " + secInterval + " seconds)"); + ll.add("Avg EU OUT: " + nf.format(avgOut) + " (last " + secInterval + " seconds)"); + + // Check if the system is charging or discharging + if (avgIn > avgOut) { + // Calculate time to full if charging + if (avgIn != 0) { + double timeToFull = (capacity.longValue() - stored.longValue()) / avgIn / 20; + String timeToFullString = formatTime(timeToFull); + ll.add("Time to Full: " + timeToFullString); + } + } else { + // Calculate time to empty if discharging + if (avgOut != 0) { + double timeToEmpty = stored.longValue() / avgOut / 20; + String timeToEmptyString = formatTime(timeToEmpty); + ll.add("Time to Empty: " + timeToEmptyString); + } + } + ll.add( + "Maintenance Status: " + ((super.getRepairStatus() == super.getIdealStatus()) + ? EnumChatFormatting.GREEN + "Working perfectly" + EnumChatFormatting.RESET + : EnumChatFormatting.RED + "Has Problems" + EnumChatFormatting.RESET)); + ll.add( + "Wireless mode: " + (wireless_mode ? EnumChatFormatting.GREEN + "enabled" + EnumChatFormatting.RESET + : EnumChatFormatting.RED + "disabled" + EnumChatFormatting.RESET)); + ll.add( + GTValues.TIER_COLORS[9] + GTValues.VN[9] + + EnumChatFormatting.RESET + + " Capacitors detected: " + + getUHVCapacitorCount()); + ll.add( + GTValues.TIER_COLORS[10] + GTValues.VN[10] + + EnumChatFormatting.RESET + + " Capacitors detected: " + + getUEVCapacitorCount()); + ll.add( + GTValues.TIER_COLORS[11] + GTValues.VN[11] + + EnumChatFormatting.RESET + + " Capacitors detected: " + + getUIVCapacitorCount()); + ll.add( + GTValues.TIER_COLORS[12] + GTValues.VN[12] + + EnumChatFormatting.RESET + + " Capacitors detected: " + + getUMVCapacitorCount()); + ll.add( + "Total wireless EU: " + EnumChatFormatting.RED + + nf.format(WirelessNetworkManager.getUserEU(global_energy_user_uuid)) + + " EU"); + ll.add( + "Total wireless EU: " + EnumChatFormatting.RED + + toStandardForm(WirelessNetworkManager.getUserEU(global_energy_user_uuid)) + + " EU"); + + final String[] a = new String[ll.size()]; + return ll.toArray(a); + } + + // Method to format time in seconds, minutes, days, and years + private String formatTime(double time) { + if (time < 1) { + return "Completely " + (time < 0 ? "empty" : "full"); + } else if (time < 60) { + return String.format("%.2f seconds", time); + } else if (time < 3600) { + return String.format("%.2f minutes", time / 60); + } else if (time < 86400) { + return String.format("%.2f hours", time / 3600); + } else if (time < 31536000) { + return String.format("%.2f days", time / 86400); + } else { + return String.format("%.2f years", time / 31536000); + } + } + + @Override + public void saveNBTData(NBTTagCompound nbt) { + nbt = (nbt == null) ? new NBTTagCompound() : nbt; + + nbt.setByteArray("capacity", capacity.toByteArray()); + nbt.setByteArray("stored", stored.toByteArray()); + nbt.setBoolean("wireless_mode", wireless_mode); + nbt.setInteger("wireless_mode_cooldown", counter); + + super.saveNBTData(nbt); + } + + @Override + public void loadNBTData(NBTTagCompound nbt) { + nbt = (nbt == null) ? new NBTTagCompound() : nbt; + + capacity = new BigInteger(nbt.getByteArray("capacity")); + stored = new BigInteger(nbt.getByteArray("stored")); + wireless_mode = nbt.getBoolean("wireless_mode"); + counter = nbt.getInteger("wireless_mode_cooldown"); + + super.loadNBTData(nbt); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack stack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack stack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack stack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack stack) { + return false; + } + + // called by the getEUCapacity() function in BaseMetaTileEntity + @Override + public long maxEUStore() { + return capacity.longValue(); + } + + // called by the getEUStored() function in BaseMetaTileEntity + @Override + public long getEUVar() { + return stored.longValue(); + } + + /* + * all of these are needed for the injectEnergyUnits() and drainEnergyUnits() in IGregTechTileEntity + */ + @Override + public long maxEUInput() { + if (wireless_mode) { + return Long.MAX_VALUE; + } else { + return mMaxEUIn; + } + } + + @Override + public long maxAmperesIn() { + return 1L; + } + + @Override + public long maxEUOutput() { + if (wireless_mode) { + return Long.MAX_VALUE; + } else { + return mMaxEUOut; + } + } + + @Override + public long maxAmperesOut() { + return 1L; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + protected boolean canUseWireless() { + return wirelessCapableCapacitors() != 0; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (canUseWireless()) { + wireless_mode = !wireless_mode; + GTUtility.sendChatToPlayer(aPlayer, "Wireless network mode " + (wireless_mode ? "enabled." : "disabled.")); + } else { + GTUtility.sendChatToPlayer( + aPlayer, + "Wireless mode cannot be enabled without at least 1 " + GTValues.TIER_COLORS[9] + + GTValues.VN[9] + + EnumChatFormatting.RESET + + "+ capacitor."); + wireless_mode = false; + } + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + canUseWireless = canUseWireless(); + } + if (canUseWireless) { + wireless_mode = !wireless_mode; + } + }) + .setPlayClickSound(true) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(GTUITextures.BUTTON_STANDARD); + if (canUseWireless) { + if (wireless_mode) { + ret.add(KTUITextures.OVERLAY_BUTTON_WIRELESS_ON); + } else { + ret.add(KTUITextures.OVERLAY_BUTTON_WIRELESS_OFF); + } + } else { + ret.add(KTUITextures.OVERLAY_BUTTON_WIRELESS_OFF_DISABLED); + } + return ret.toArray(new IDrawable[0]); + }) + .setPos(80, 91) + .setSize(16, 16) + .addTooltip(StatCollector.translateToLocal("gui.kekztech_lapotronicenergyunit.wireless")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> wireless_mode, val -> wireless_mode = val)) + .widget(new FakeSyncWidget.BooleanSyncer(this::canUseWireless, val -> canUseWireless = val)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (mMachine && wireless_mode && canUseWireless && !balanced) { + counter = rebalance(); + } + }) + .setPlayClickSound(true) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(GTUITextures.BUTTON_STANDARD); + ret.add(KTUITextures.OVERLAY_BUTTON_WIRELESS_REBALANCE); + return ret.toArray(new IDrawable[0]); + }) + .setPos(98, 91) + .setSize(16, 16) + .setEnabled((widget) -> wireless_mode && canUseWireless && !balanced) + .addTooltip(StatCollector.translateToLocal("gui.kekztech_lapotronicenergyunit.wireless_rebalance")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); + } + + private enum LSCHatchElement implements IHatchElement { + + Energy(MTEHatchEnergyMulti.class, MTEHatchEnergy.class) { + + @Override + public long count(MTELapotronicSuperCapacitor t) { + return t.mEnergyHatches.size() + t.mEnergyHatchesTT.size() + t.mEnergyTunnelsTT.size(); + } + }, + Dynamo(MTEHatchDynamoMulti.class, MTEHatchDynamo.class) { + + @Override + public long count(MTELapotronicSuperCapacitor t) { + return t.mDynamoHatches.size() + t.mDynamoHatchesTT.size() + t.mDynamoTunnelsTT.size(); + } + },; + + private final List> mteClasses; + + @SafeVarargs + LSCHatchElement(Class... mteClasses) { + this.mteClasses = Arrays.asList(mteClasses); + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + @Override + public IGTHatchAdder adder() { + return MTELapotronicSuperCapacitor::addBottomHatches; + } + } +} diff --git a/src/main/java/kekztech/common/tileentities/MTESOFuelCellMK1.java b/src/main/java/kekztech/common/tileentities/MTESOFuelCellMK1.java new file mode 100644 index 0000000000..e70e45f899 --- /dev/null +++ b/src/main/java/kekztech/common/tileentities/MTESOFuelCellMK1.java @@ -0,0 +1,221 @@ +package kekztech.common.tileentities; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_GLOW; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; + +import java.util.ArrayList; +import java.util.Collection; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +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.MTEEnhancedMultiBlockBase; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import kekztech.common.Blocks; + +public class MTESOFuelCellMK1 extends MTEEnhancedMultiBlockBase { + + private final int OXYGEN_PER_SEC = 100; + private final int EU_PER_TICK = 2048; + private final int STEAM_PER_SEC = 20000; + + public MTESOFuelCellMK1(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTESOFuelCellMK1(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) { + return new MTESOFuelCellMK1(super.mName); + } + + private int mCasing = 0; + + private static final int CASING_TEXTURE_ID = 49; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { "ccc", "ccc", "ccc", "ccc", "ccc" }, { "c~c", "geg", "geg", "geg", "cdc" }, + { "ccc", "ccc", "ccc", "ccc", "ccc" } })) + .addElement( + 'c', + ofChain( + onElementPass(te -> te.mCasing++, ofBlock(GregTechAPI.sBlockCasings4, 1)), + ofHatchAdder(MTESOFuelCellMK1::addInputToMachineList, CASING_TEXTURE_ID, 1), + ofHatchAdder(MTESOFuelCellMK1::addMaintenanceToMachineList, CASING_TEXTURE_ID, 1), + ofHatchAdder(MTESOFuelCellMK1::addOutputToMachineList, CASING_TEXTURE_ID, 1))) + .addElement('d', ofHatchAdder(MTESOFuelCellMK1::addDynamoToMachineList, CASING_TEXTURE_ID, 1)) + .addElement('g', ofBlockAnyMeta(GameRegistry.findBlock("IC2", "blockAlloyGlass"))) + .addElement('e', ofBlockAnyMeta(Blocks.yszUnit)) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Gas Turbine") + .addInfo("Oxidizes gas fuels to generate electricity without polluting the environment") + .addInfo( + "Consumes up to " + GTUtility.formatNumbers(EU_PER_TICK * 20) + + "EU worth of fuel with up to 100% efficiency each second") + .addInfo("Steam production requires the SOFC to heat up completely first") + .addInfo("Outputs " + EU_PER_TICK + "EU/t and " + STEAM_PER_SEC + "L/s Steam") + .addInfo("Additionally, requires " + OXYGEN_PER_SEC + "L/s Oxygen gas") + .addSeparator() + .beginStructureBlock(3, 3, 5, false) + .addController("Front center") + .addCasingInfoMin("Clean Stainless Steel Casing", 12, false) + .addOtherStructurePart("YSZ Ceramic Electrolyte Unit", "3x, Center 1x1x3") + .addOtherStructurePart("Reinforced Glass", "6x, touching the electrolyte units on the horizontal sides") + .addDynamoHatch("Back center", 1) + .addMaintenanceHatch("Any casing") + .addInputHatch("Fuel, any casing") + .addInputHatch("Oxygen, any casing") + .addOutputHatch("Steam, any casing") + .toolTipFinisher("KekzTech"); + return tt; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int colorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID) }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack stack) { + return true; + } + + @Nonnull + @Override + public CheckRecipeResult checkProcessing() { + final ArrayList storedFluids = super.getStoredFluids(); + Collection recipeList = RecipeMaps.gasTurbineFuels.getAllRecipes(); + + for (FluidStack hatchFluid : storedFluids) { + for (GTRecipe aFuel : recipeList) { + FluidStack liquid; + if ((liquid = GTUtility.getFluidForFilledItem(aFuel.getRepresentativeInput(0), true)) != null + && hatchFluid.isFluidEqual(liquid)) { + + liquid.amount = (EU_PER_TICK * 20) / aFuel.mSpecialValue; + + if (super.depleteInput(liquid)) { + + if (!super.depleteInput(Materials.Oxygen.getGas(OXYGEN_PER_SEC))) { + super.mEUt = 0; + super.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + super.mEUt = EU_PER_TICK; + super.mMaxProgresstime = 20; + super.mEfficiencyIncrease = 40; + if (super.mEfficiency == getMaxEfficiency(null)) { + super.addOutput(GTModHandler.getSteam(STEAM_PER_SEC)); + } + return CheckRecipeResultRegistry.GENERATING; + } + } + } + } + + super.mEUt = 0; + super.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + @Override + public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { + this.mCasing = 0; + + if (!checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 0)) return false; + + return (this.mCasing >= 12 && this.mMaintenanceHatches.size() == 1 && this.mInputHatches.size() >= 2); + } + + @Override + public int getMaxEfficiency(ItemStack stack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack stack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack stack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack stack) { + return false; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 1, 1, 0); + } +} diff --git a/src/main/java/kekztech/common/tileentities/MTESOFuelCellMK2.java b/src/main/java/kekztech/common/tileentities/MTESOFuelCellMK2.java new file mode 100644 index 0000000000..abf5b9af39 --- /dev/null +++ b/src/main/java/kekztech/common/tileentities/MTESOFuelCellMK2.java @@ -0,0 +1,222 @@ +package kekztech.common.tileentities; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_HEAT_EXCHANGER_GLOW; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; + +import java.util.ArrayList; +import java.util.Collection; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +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.MTEEnhancedMultiBlockBase; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import kekztech.common.Blocks; + +public class MTESOFuelCellMK2 extends MTEEnhancedMultiBlockBase { + + private final int OXYGEN_PER_SEC = 2000; + private final int EU_PER_TICK = 24576; // 100% Efficiency, 3A IV + private final int STEAM_PER_SEC = 96000; // SH Steam (10,800EU/t @ 150% Efficiency) + + public MTESOFuelCellMK2(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTESOFuelCellMK2(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity var1) { + return new MTESOFuelCellMK2(super.mName); + } + + private int mCasing = 0; + + private static final int CASING_TEXTURE_ID = 48; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { { "ccc", "ccc", "ccc", "ccc", "ccc" }, { "c~c", "geg", "geg", "geg", "cdc" }, + { "ccc", "ccc", "ccc", "ccc", "ccc" } })) + .addElement( + 'c', + ofChain( + onElementPass(te -> te.mCasing++, ofBlock(GregTechAPI.sBlockCasings4, 0)), + ofHatchAdder(MTESOFuelCellMK2::addInputToMachineList, CASING_TEXTURE_ID, 1), + ofHatchAdder(MTESOFuelCellMK2::addMaintenanceToMachineList, CASING_TEXTURE_ID, 1), + ofHatchAdder(MTESOFuelCellMK2::addOutputToMachineList, CASING_TEXTURE_ID, 1))) + .addElement('d', ofHatchAdder(MTESOFuelCellMK2::addDynamoToMachineList, CASING_TEXTURE_ID, 1)) + .addElement('g', ofBlockAnyMeta(GameRegistry.findBlock("IC2", "blockAlloyGlass"))) + .addElement('e', ofBlockAnyMeta(Blocks.gdcUnit)) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Gas Turbine") + .addInfo("Oxidizes gas fuels to generate electricity without polluting the environment") + .addInfo( + "Consumes up to " + GTUtility.formatNumbers(EU_PER_TICK * 20) + + "EU worth of fuel with up to 100% efficiency each second") + .addInfo("Nitrobenzene and other gas fuels above 1M EU/bucket are more efficient") + .addInfo("Steam production requires the SOFC to heat up completely first") + .addInfo("Outputs " + EU_PER_TICK + "EU/t and " + STEAM_PER_SEC + "L/s Steam") + .addInfo("Additionally, requires " + OXYGEN_PER_SEC + "L/s Oxygen gas") + .addSeparator() + .beginStructureBlock(3, 3, 5, false) + .addController("Front center") + .addCasingInfoMin("Robust Tungstensteel Machine Casing", 12, false) + .addOtherStructurePart("GDC Ceramic Electrolyte Unit", "3x, Center 1x1x3") + .addOtherStructurePart("Reinforced Glass", "6x, touching the electrolyte units on the horizontal sides") + .addDynamoHatch("Back center", 1) + .addMaintenanceHatch("Any casing") + .addInputHatch("Fuel, any casing") + .addInputHatch("Oxygen, any casing") + .addOutputHatch("Superheated Steam, any casing") + .toolTipFinisher("KekzTech"); + return tt; + } + + @Override + public ITexture[] getTexture(final IGregTechTileEntity aBaseMetaTileEntity, final ForgeDirection side, + final ForgeDirection facing, final int colorIndex, final boolean aActive, final boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_HEAT_EXCHANGER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID) }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack stack) { + return true; + } + + @Nonnull + @Override + public CheckRecipeResult checkProcessing() { + final ArrayList storedFluids = super.getStoredFluids(); + Collection recipeList = RecipeMaps.gasTurbineFuels.getAllRecipes(); + + for (FluidStack hatchFluid : storedFluids) { + for (GTRecipe aFuel : recipeList) { + FluidStack liquid; + if ((liquid = GTUtility.getFluidForFilledItem(aFuel.getRepresentativeInput(0), true)) != null + && hatchFluid.isFluidEqual(liquid)) { + + liquid.amount = (EU_PER_TICK * 20) / aFuel.mSpecialValue / Math.max(1, aFuel.mSpecialValue / 1000); + + if (super.depleteInput(liquid)) { + + if (!super.depleteInput(Materials.Oxygen.getGas(OXYGEN_PER_SEC))) { + super.mEUt = 0; + super.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + super.mEUt = EU_PER_TICK; + super.mMaxProgresstime = 20; + super.mEfficiencyIncrease = 80; + if (super.mEfficiency == getMaxEfficiency(null)) { + super.addOutput(FluidRegistry.getFluidStack("ic2superheatedsteam", STEAM_PER_SEC)); + } + return CheckRecipeResultRegistry.GENERATING; + } + } + } + } + + super.mEUt = 0; + super.mEfficiency = 0; + return CheckRecipeResultRegistry.NO_FUEL_FOUND; + } + + @Override + public boolean checkMachine(IGregTechTileEntity thisController, ItemStack guiSlotItem) { + this.mCasing = 0; + + if (!checkPiece(STRUCTURE_PIECE_MAIN, 1, 1, 0)) return false; + + return (this.mCasing >= 12 && this.mMaintenanceHatches.size() == 1 && this.mInputHatches.size() >= 2); + } + + @Override + public int getMaxEfficiency(ItemStack stack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack stack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack stack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack stack) { + return false; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 1, 1, 0); + } +} diff --git a/src/main/java/kekztech/common/tileentities/MTETankTFFT.java b/src/main/java/kekztech/common/tileentities/MTETankTFFT.java new file mode 100644 index 0000000000..49b195dea8 --- /dev/null +++ b/src/main/java/kekztech/common/tileentities/MTETankTFFT.java @@ -0,0 +1,787 @@ +package kekztech.common.tileentities; + +import static bartworks.util.BWUtil.ofGlassTieredMixed; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockUnlocalizedName; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static java.lang.Math.min; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.math.BigInteger; +import java.text.MessageFormat; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +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.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.constructable.ChannelDataAccessor; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.AutoPlaceEnvironment; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureUtility; +import com.gtnewhorizon.structurelib.util.ItemStackPredicate; + +import gregtech.api.enums.Textures; +import gregtech.api.fluid.GTFluidTank; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEEnhancedMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.items.ItemIntegratedCircuit; +import kekztech.common.Blocks; + +public class MTETankTFFT extends MTEEnhancedMultiBlockBase implements ISurvivalConstructable { + + public enum Field { + + T1(1_000_000L, 1), // LV + T2(4_000_000L, 2), // MV + T3(16_000_000L, 5), // HV + T4(64_000_000L, 14), // EV + T5(256_000_000L, 42), // IV + + T6(2_048_000_000L, 132), // LuV + T7(131_072_000_000L, 429), // UV + T8(8_388_608_000_000L, 1430), // UEV + T9(536_870_912_000_000L, 4862), // UMV + + T10(1_099_511_627_776_000_000L, 0); // UXV + + public static final MTETankTFFT.Field[] VALUES = values(); + private final long capacity; + private final int cost; + + Field(long capacity, int cost) { + this.capacity = capacity; + this.cost = cost; + } + + public long getCapacity() { + return capacity; + } + + public int getCost() { + return cost; + } + } + + private enum TFFTMultiHatch implements IHatchElement { + + INSTANCE; + + private final List> mteClasses; + + @SafeVarargs + TFFTMultiHatch(Class... mteClasses) { + this.mteClasses = Arrays.asList(mteClasses); + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + @Override + public IGTHatchAdder adder() { + return MTETankTFFT::addMultiHatchToMachineList; + } + + @Override + public long count(MTETankTFFT t) { + return t.tfftHatch == null ? 0 : 1; + } + } + + private enum TFFTStorageFieldElement implements IStructureElement { + + INSTANCE; + + @Override + public boolean check(MTETankTFFT t, World world, int x, int y, int z) { + Block worldBlock = world.getBlock(x, y, z); + int meta = worldBlock.getDamageValue(world, x, y, z); + if (TFFT_FIELD != worldBlock || meta == 0) return false; + t.FIELDS[meta - 1]++; + return true; + } + + private int getHint(ItemStack stack) { + return Math.min(Field.VALUES.length, ChannelDataAccessor.getChannelData(stack, "field")); + } + + @Override + public boolean spawnHint(MTETankTFFT t, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, TFFT_FIELD, getHint(trigger)); + return true; + } + + @Override + public boolean placeBlock(MTETankTFFT t, World world, int x, int y, int z, ItemStack trigger) { + world.setBlock(x, y, z, TFFT_FIELD, getHint(trigger), 3); + return true; + } + + @Override + public PlaceResult survivalPlaceBlock(MTETankTFFT t, World world, int x, int y, int z, ItemStack trigger, + AutoPlaceEnvironment env) { + if (check(t, world, x, y, z)) return PlaceResult.SKIP; + int fieldTier = getHint(trigger); + ItemStack result = env.getSource() + .takeOne( + s -> s != null && s.stackSize >= 0 + && s.getItem() == TFFT_FIELD_ITEM + && s.getItemDamage() != CASING_META + && s.getItemDamage() <= fieldTier, + true); + if (result == null) return PlaceResult.REJECT; + + return StructureUtility.survivalPlaceBlock( + result, + ItemStackPredicate.NBTMode.EXACT, + null, + true, + world, + x, + y, + z, + env.getSource(), + env.getActor(), + env.getChatter()); + } + } + + private static final IIconContainer TEXTURE_TFFT = new Textures.BlockIcons.CustomIcon("iconsets/TFFT"); + private static final IIconContainer TEXTURE_TFFT_ACTIVE = new Textures.BlockIcons.CustomIcon( + "iconsets/TFFT_ACTIVE"); + private static final IIconContainer TEXTURE_TFFT_ACTIVE_GLOW = new Textures.BlockIcons.CustomIcon( + "iconsets/TFFT_ACTIVE_GLOW"); + private static final int CASING_TEXTURE_ID_1 = (12 << 7) | 127; + private static final int CASING_TEXTURE_ID_2 = 176; + + private static final Block TFFT_FIELD = Blocks.tfftStorageField; + private static final Item TFFT_FIELD_ITEM = Item.getItemFromBlock(TFFT_FIELD); + public static final int MAX_DISTINCT_FLUIDS = 25; + private static final BigInteger MAX_CAPACITY = BigInteger.valueOf(Long.MAX_VALUE) + .multiply(BigInteger.valueOf(25)); + private static final int CASING_META = 0; + private static final int MIN_CASING_AMOUNT = 20; + private static final int MAX_LAYER_AMOUNT = 13; + private static final int DEFAULT_LAYER_AMOUNT = 3; + + private static final String STRUCTURE_PIECE_TOP = "top"; + private static final String STRUCTURE_PIECE_MID = "mid"; + private static final String STRUCTURE_PIECE_BOTTOM = "bottom"; + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return description; + } + + private static final String[] description = new String[] { + translateToLocal("tile.kekztech_tfftstoragefield_block.hint.1"), // Casing + translateToLocal("tile.kekztech_tfftstoragefield_block.hint.2"), // Casing, Maintenance Hatch, T.F.F.T Multi + // I/O Hatch, Input/Output Hatch, Energy + // Hatch + translateToLocal("tile.kekztech_tfftstoragefield_block.hint.3"), // Glass, T.F.F.T Multi I/O Hatch, + // Input/Output Hatch + translateToLocal("tile.kekztech_tfftstoragefield_block.hint.4"), // Glass + }; + + // height channel for height + // field channel for field + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_TOP, + transpose(new String[][] { { "ccccc" }, { "cCCCc" }, { "cC~Cc" }, { "cCCCc" }, { "ccccc" } })) + .addShape( + STRUCTURE_PIECE_MID, + transpose(new String[][] { { "gGGGg" }, { "GfffG" }, { "GfffG" }, { "GfffG" }, { "gGGGg" } })) + .addShape( + STRUCTURE_PIECE_BOTTOM, + transpose(new String[][] { { "ccccc" }, { "cCCCc" }, { "cCCCc" }, { "cCCCc" }, { "ccccc" } })) + .addElement( + 'c', + buildHatchAdder(MTETankTFFT.class).atLeast(Energy, Maintenance) + .casingIndex(CASING_TEXTURE_ID_1) + .dot(1) + .buildAndChain(onElementPass(te -> te.casingAmount++, ofBlock(TFFT_FIELD, CASING_META)))) + .addElement( + 'C', + buildHatchAdder(MTETankTFFT.class).casingIndex(CASING_TEXTURE_ID_1) + .atLeast( + Energy, + Maintenance, + InputHatch.or(TFFTMultiHatch.INSTANCE), + OutputHatch.or(TFFTMultiHatch.INSTANCE)) + .dot(2) + .buildAndChain(onElementPass(te -> te.casingAmount++, ofBlock(TFFT_FIELD, CASING_META)))) + .addElement( + 'G', + buildHatchAdder(MTETankTFFT.class) + .atLeast(InputHatch.or(TFFTMultiHatch.INSTANCE), OutputHatch.or(TFFTMultiHatch.INSTANCE)) + .casingIndex(CASING_TEXTURE_ID_2) + .dot(3) + .buildAndChain( + ofBlockUnlocalizedName("Thaumcraft", "blockCosmeticOpaque", 2, false), + ofGlassTieredMixed((byte) 4, (byte) 127, 3))) + .addElement( + 'g', + ofChain( + ofBlockUnlocalizedName("Thaumcraft", "blockCosmeticOpaque", 2, false), + ofGlassTieredMixed((byte) 4, (byte) 127, 4))) + .addElement('f', ofChain(TFFTStorageFieldElement.INSTANCE)) + .build(); + + public final GTFluidTank[] STORE = new GTFluidTank[MAX_DISTINCT_FLUIDS]; + + { + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + STORE[i] = new GTFluidTank(0); + } + } + + private final int[] FIELDS = new int[Field.VALUES.length]; + + private BigInteger capacity = BigInteger.ZERO; + private long capacityPerFluid = 0L; + private int casingAmount = 0; + private int runningCost = 0; + + private boolean locked = true; + private boolean doVoidExcess = false; + private byte fluidSelector = -1; + + private MTEHatchTFFT tfftHatch = null; + + public MTETankTFFT(String aName) { + super(aName); + } + + public MTETankTFFT(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTETankTFFT(super.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID_1), + TextureFactory.builder() + .addIcon(TEXTURE_TFFT_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(TEXTURE_TFFT_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID_1), + TextureFactory.builder() + .addIcon(TEXTURE_TFFT) + .extFacing() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_TEXTURE_ID_1) }; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fluid Tank") + .addInfo("High-Tech fluid tank that can hold up to 25 different fluids!") + .addInfo("Has 1/25th of the total capacity as capacity for each fluid.") + .addInfo("Right clicking the controller with a screwdriver will turn on excess voiding.") + .addInfo("Fluid storage amount and running cost depends on the storage field blocks used.") + .addSeparator() + .addInfo("Note on hatch locking:") + .addInfo("Use an Integrated Circuit in the GUI slot to limit which fluid is output.") + .addInfo("The index of a stored fluid can be obtained through the Tricorder.") + .addSeparator() + .beginVariableStructureBlock(5, 5, 5, 15, 5, 5, false) + .addController("Top Center") + .addCasingInfoMin("T.F.F.T Casing", MIN_CASING_AMOUNT, false) + .addOtherStructurePart("Storage Field Blocks (Tier I-X)", "Inner 3xhx3 solid pillar") + .addStructureInfo("Energy hatch is not required when running cost is 0") + .addOtherStructurePart("EV+ Tier Glass/Warded Glass/Reinforced Glass", "Outer 5xhx5 glass shell") + .addMaintenanceHatch("Any top or bottom casing") + .addEnergyHatch("Any top or bottom casing") + .addInputHatch("Instead of any casing or glass, has to touch storage field block") + .addOutputHatch("Instead of any casing or glass, has to touch storage field block") + .addStructureInfo("You can have a bunch of hatches") + .addOtherStructurePart( + "Multi I/O Hatches", + "Instead of any casing or glass, has to touch storage field block") + .addStructureInfo("Use MIOH with conduits or fluid storage busses to see all fluids at once.") + .addSubChannelUsage("field", "Maximum Field Tier") + .addSubChannelUsage("height", "Height of structure") + .toolTipFinisher("KekzTech"); + return tt; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + int layer = min(stackSize.stackSize + DEFAULT_LAYER_AMOUNT, MAX_LAYER_AMOUNT + 1); + buildPiece(STRUCTURE_PIECE_TOP, stackSize, hintsOnly, 2, 2, 0); + for (int i = -1; i >= 1 - layer; i--) buildPiece(STRUCTURE_PIECE_MID, stackSize, hintsOnly, 2, 2, i); + buildPiece(STRUCTURE_PIECE_BOTTOM, stackSize, hintsOnly, 2, 2, -layer); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int build = survivialBuildPiece(STRUCTURE_PIECE_TOP, stackSize, 2, 2, 0, elementBudget, env, false, true); + if (build >= 0) return build; + int layer = min(stackSize.stackSize + DEFAULT_LAYER_AMOUNT, MAX_LAYER_AMOUNT + 1); + for (int i = -1; i >= 1 - layer; i--) { + build = survivialBuildPiece(STRUCTURE_PIECE_MID, stackSize, 2, 2, i, elementBudget, env, false, true); + if (build >= 0) return build; + } + return survivialBuildPiece(STRUCTURE_PIECE_BOTTOM, stackSize, 2, 2, -layer, elementBudget, env, false, true); + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public void clearHatches() { + super.clearHatches(); + if (tfftHatch != null) { + tfftHatch.unbind(); + tfftHatch = null; + } + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + Arrays.fill(FIELDS, 0); + + this.capacity = BigInteger.ZERO; + this.capacityPerFluid = 0L; + this.casingAmount = 0; + this.runningCost = 0; + + if (!checkPiece(STRUCTURE_PIECE_TOP, 2, 2, 0)) return false; + + int layer = 1; + while (checkPiece(STRUCTURE_PIECE_MID, 2, 2, -layer)) layer++; + if (layer - 1 > MAX_LAYER_AMOUNT || layer - 1 < DEFAULT_LAYER_AMOUNT) return false; + if (!checkPiece(STRUCTURE_PIECE_BOTTOM, 2, 2, -layer)) return false; + if (casingAmount >= MIN_CASING_AMOUNT + && (tfftHatch != null || (!mInputHatches.isEmpty() && !mOutputHatches.isEmpty())) + && mInputHatches.size() + mOutputHatches.size() <= MAX_DISTINCT_FLUIDS * 2 + && mMaintenanceHatches.size() == 1) { + BigInteger tempCap = BigInteger.ZERO; + for (int i = 0; i < this.FIELDS.length; i++) { + tempCap = tempCap.add( + BigInteger.valueOf(Field.VALUES[i].getCapacity()) + .multiply(BigInteger.valueOf(this.FIELDS[i]))); + this.runningCost += Field.VALUES[i].getCost() * this.FIELDS[i]; + } + this.setCapacity(tempCap); + + if (tfftHatch != null) tfftHatch.bind(this); + + if (this.runningCost == 0) { + return true; + } + + return !mEnergyHatches.isEmpty(); + } + return false; + } + + @Override + public boolean checkRecipe(ItemStack itemStack) { + mEfficiency = getCurrentEfficiency(null); + mEfficiencyIncrease = 10000; + mEUt = this.runningCost; + mMaxProgresstime = 20; + + this.fluidSelector = (itemStack != null && itemStack.getItem() instanceof ItemIntegratedCircuit) + ? (byte) itemStack.getItemDamage() + : -1; + + // Suck in fluids + final ArrayList inputFluids = getStoredFluids(); + + if (!inputFluids.isEmpty()) { + for (FluidStack aFluid : inputFluids) { + final FluidStack toDeplete = aFluid.copy(); + toDeplete.amount = this.pull(aFluid, true); + depleteInput(toDeplete); + } + } + + // Push out fluids + if (!this.mOutputHatches.isEmpty()) { + final GTFluidTank sFluid = this.getSelectedFluid(); + boolean isFluidSelected = this.fluidSelector != -1; + + if (!isFluidSelected || !sFluid.isEmpty()) { + for (MTEHatchOutput tHatch : this.mOutputHatches) { + int hatchCapacity = tHatch.getCapacity(); + int hatchAmount = tHatch.getFluidAmount(); + int remaining = hatchCapacity - hatchAmount; + + if (remaining <= 0) continue; + + final FluidStack tFluid = tHatch.getFluid(); + + String lockedFluidName = tHatch.getLockedFluidName() == null ? "" : tHatch.getLockedFluidName(); + String tFluidName = tFluid == null ? "" + : tFluid.getFluid() + .getName(); + + boolean isFluidLocked = tHatch.isFluidLocked(); + boolean isFluidEmpty = tFluid == null || tHatch.getFluidAmount() == 0; + + if (isFluidLocked && !this.contains(lockedFluidName)) continue; + if (!isFluidEmpty && !this.contains(tFluid)) continue; + if ((isFluidLocked && !isFluidEmpty) && !lockedFluidName.equals(tFluidName)) continue; + + if (isFluidSelected) { + if (isFluidLocked && !lockedFluidName.equals(sFluid.name())) continue; + if (!isFluidEmpty && !sFluid.contains(tFluid)) continue; + + tHatch.fill(this.push(sFluid.get(remaining), true), true); + } else if (isFluidLocked) { + if (!isFluidEmpty && !lockedFluidName.equals( + tFluid.getFluid() + .getName())) + continue; + + FluidStack aFluid = FluidRegistry.getFluidStack(lockedFluidName, remaining); + tHatch.fill(this.push(aFluid, true), true); + } else if (isFluidEmpty) { + if (this.firstNotNull() != null) tHatch.fill(this.push(hatchCapacity, true), true); + } else { + tHatch.fill(this.push(new FluidStack(tFluid, remaining), true), true); + } + } + } + } + + if (this.mEUt > 0) this.mEUt = -this.mEUt; + + return true; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) this.locked = !aBaseMetaTileEntity.isActive(); + } + + @Override + public String[] getInfoData() { + ArrayList ll = new ArrayList<>(); + NumberFormat nf = NumberFormat.getNumberInstance(); + + ll.add(EnumChatFormatting.YELLOW + "Stored Fluids:" + EnumChatFormatting.RESET); + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + GTFluidTank tank = STORE[i]; + if (tank.isEmpty()) { + ll.add(MessageFormat.format("{0} - {1}: {2}L ({3}%)", i, "NULL", 0, 0)); + } else { + String localizedName = STORE[i].get() + .getLocalizedName(); + String amount = nf.format(STORE[i].amount()); + String percentage = capacityPerFluid > 0 ? String.valueOf(STORE[i].amount() * 100 / capacityPerFluid) + : ""; + + ll.add(MessageFormat.format("{0} - {1}: {2}L ({3}%)", i, localizedName, amount, percentage)); + } + } + ll.add(EnumChatFormatting.YELLOW + "Operational Data:" + EnumChatFormatting.RESET); + ll.add("Used Capacity: " + nf.format(getStoredAmount()) + "L"); + ll.add("Total Capacity: " + nf.format(capacity) + "L"); + ll.add("Per-Fluid Capacity: " + nf.format(capacityPerFluid) + "L"); + ll.add("Running Cost: " + getActualEnergyUsage() + "EU/t"); + ll.add("Auto-voiding: " + doVoidExcess); + ll.add( + "Maintenance Status: " + ((getRepairStatus() == getIdealStatus()) + ? EnumChatFormatting.GREEN + "Working perfectly" + EnumChatFormatting.RESET + : EnumChatFormatting.RED + "Has Problems" + EnumChatFormatting.RESET)); + ll.add("---------------------------------------------"); + + return ll.toArray(new String[0]); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setByteArray("capacity", capacity.toByteArray()); + aNBT.setBoolean("doVoidExcess", doVoidExcess); + aNBT.setInteger("runningCost", runningCost); + aNBT.setBoolean("lockFluid", locked); + aNBT.setByte("fluidSelector", fluidSelector); + + NBTTagCompound fluidNBT = new NBTTagCompound(); + aNBT.setTag("STORE", fluidNBT); + + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + STORE[i].writeToNBT(fluidNBT, String.valueOf(i)); + } + + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + this.setCapacity(new BigInteger(aNBT.getByteArray("capacity"))); + this.setDoVoidExcess(aNBT.getBoolean("doVoidExcess")); + this.runningCost = aNBT.getInteger("runningCost"); + this.locked = aNBT.getBoolean("lockFluid"); + this.fluidSelector = aNBT.getByte("fluidSelector"); + + NBTTagCompound fluidNBT = (NBTTagCompound) aNBT.getTag("STORE"); + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + STORE[i].readFromNBT(fluidNBT, String.valueOf(i)); + } + + super.loadNBTData(aNBT); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public int getMaxEfficiency(ItemStack stack) { + return 10000; + } + + @Override + public int getPollutionPerTick(ItemStack stack) { + return 0; + } + + @Override + public int getDamageToComponent(ItemStack stack) { + return 0; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack stack) { + return false; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + this.setDoVoidExcess(!doVoidExcess); + GTUtility.sendChatToPlayer(aPlayer, "Auto-voiding " + (this.doVoidExcess ? "enabled" : "disabled")); + } + + private boolean addMultiHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity != null) { + final IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity instanceof MTEHatchTFFT) { + if (this.tfftHatch != null) return false; + this.tfftHatch = (MTEHatchTFFT) aMetaTileEntity; + this.tfftHatch.updateTexture(aBaseCasingIndex); + return true; + } + } + return false; + } + + public int pull(FluidStack aFluid, boolean doPull) { + if (locked) return 0; + int index = getFluidPosition(aFluid); + if (index >= 0) { + return STORE[index].fill(aFluid, doPull); + } else if (fluidCount() < MAX_DISTINCT_FLUIDS) { + return STORE[getNullSlot()].setCapacity(capacityPerFluid) + .fill(aFluid, doPull); + } + return 0; + } + + public long pull(FluidStack aFluid, long amount, boolean doPull) { + if (locked) return 0; + int index = getFluidPosition(aFluid); + if (index >= 0) { + GTFluidTank tank = STORE[index]; + if (doPull) return tank.add(amount); + return doVoidExcess ? amount + : tank.amount() + amount > tank.capacity() ? tank.capacity() - tank.amount() : amount; + } else if (fluidCount() < MAX_DISTINCT_FLUIDS) { + GTFluidTank tank = STORE[getNullSlot()]; + if (doPull) return tank.add(amount, aFluid); + return doVoidExcess ? amount : Math.min(amount, tank.capacity()); + } + return 0; + } + + public FluidStack push(FluidStack aFluid, boolean doPush) { + if (locked) return null; + int index = getFluidPosition(aFluid); + if (index < 0) return null; + return STORE[index].drain(aFluid.amount, doPush); + } + + public FluidStack push(int amount, boolean doPush) { + if (locked) return null; + int index = firstNotNullSlot(); + if (index < 0) return null; + return STORE[index].drain(amount, doPush); + } + + public long push(FluidStack aFluid, long amount, boolean doPush) { + if (locked) return 0; + int index = getFluidPosition(aFluid); + if (index < 0) return 0; + if (doPush) return STORE[index].remove(amount); + return STORE[index].amount(amount); + } + + public long getCapacityPerFluid() { + return this.capacityPerFluid; + } + + public void setCapacity(BigInteger capacity) { + if (capacity.compareTo(MAX_CAPACITY) > 0) { + this.capacity = MAX_CAPACITY; + this.capacityPerFluid = Long.MAX_VALUE; + } else { + this.capacity = capacity; + this.capacityPerFluid = capacity.divide(BigInteger.valueOf(MAX_DISTINCT_FLUIDS)) + .longValue(); + } + + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + GTFluidTank tank = STORE[i]; + if (tank.setCapacity(capacityPerFluid) + .amount() > capacityPerFluid) { + STORE[i] = new GTFluidTank(tank.get(), capacityPerFluid, capacityPerFluid); + } + } + } + + public int fluidCount() { + int tCount = 0; + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + if (!STORE[i].isEmpty()) tCount++; + } + return tCount; + } + + public int getFluidPosition(String fluidName) { + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + if (!STORE[i].isEmpty() && STORE[i].name() + .equals(fluidName)) return i; + } + return -1; + } + + public int getFluidPosition(FluidStack aFluid) { + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + if (STORE[i].contains(aFluid)) return i; + } + return -1; + } + + public int getNullSlot() { + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + if (STORE[i].isEmpty()) return i; + } + return -1; + } + + public boolean contains(String fluidName) { + return getFluidPosition(fluidName) >= 0; + } + + public boolean contains(FluidStack aFluid) { + return getFluidPosition(aFluid) >= 0; + } + + public int firstNotNullSlot() { + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + if (!STORE[i].isEmpty()) return i; + } + return -1; + } + + public GTFluidTank firstNotNull() { + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + if (!STORE[i].isEmpty()) return STORE[i]; + } + return null; + } + + public BigInteger getStoredAmount() { + BigInteger amount = BigInteger.ZERO; + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + amount = amount.add(BigInteger.valueOf(STORE[i].amount())); + } + return amount; + } + + public byte getFluidSelector() { + return fluidSelector; + } + + public GTFluidTank getSelectedFluid() { + return fluidSelector != -1 ? STORE[fluidSelector] : null; + } + + public void setDoVoidExcess(boolean doVoidExcess) { + this.doVoidExcess = doVoidExcess; + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + STORE[i].setVoidExcess(doVoidExcess); + } + } + + public FluidTankInfo[] getTankInfo() { + FluidTankInfo[] info = new FluidTankInfo[MAX_DISTINCT_FLUIDS]; + for (int i = 0; i < MAX_DISTINCT_FLUIDS; i++) { + STORE[i].getFluid(); // + info[i] = STORE[i].getInfo(); + } + return info; + } +} diff --git a/src/main/java/kekztech/common/tileentities/TileEntityIchorJar.java b/src/main/java/kekztech/common/tileentities/TileEntityIchorJar.java new file mode 100644 index 0000000000..f213e2eaef --- /dev/null +++ b/src/main/java/kekztech/common/tileentities/TileEntityIchorJar.java @@ -0,0 +1,10 @@ +package kekztech.common.tileentities; + +import thaumcraft.common.tiles.TileJarFillable; + +public class TileEntityIchorJar extends TileJarFillable { + + public TileEntityIchorJar() { + super.maxAmount = 4096; + } +} diff --git a/src/main/java/kekztech/common/tileentities/TileEntityIchorVoidJar.java b/src/main/java/kekztech/common/tileentities/TileEntityIchorVoidJar.java new file mode 100644 index 0000000000..9f9ae8e8d7 --- /dev/null +++ b/src/main/java/kekztech/common/tileentities/TileEntityIchorVoidJar.java @@ -0,0 +1,10 @@ +package kekztech.common.tileentities; + +import thaumcraft.common.tiles.TileJarFillableVoid; + +public class TileEntityIchorVoidJar extends TileJarFillableVoid { + + public TileEntityIchorVoidJar() { + super.maxAmount = 4096; + } +} diff --git a/src/main/java/kekztech/common/tileentities/TileEntityThaumiumReinforcedJar.java b/src/main/java/kekztech/common/tileentities/TileEntityThaumiumReinforcedJar.java new file mode 100644 index 0000000000..6abc8722a7 --- /dev/null +++ b/src/main/java/kekztech/common/tileentities/TileEntityThaumiumReinforcedJar.java @@ -0,0 +1,10 @@ +package kekztech.common.tileentities; + +import thaumcraft.common.tiles.TileJarFillable; + +public class TileEntityThaumiumReinforcedJar extends TileJarFillable { + + public TileEntityThaumiumReinforcedJar() { + super.maxAmount = 256; + } +} diff --git a/src/main/java/kekztech/common/tileentities/TileEntityThaumiumReinforcedVoidJar.java b/src/main/java/kekztech/common/tileentities/TileEntityThaumiumReinforcedVoidJar.java new file mode 100644 index 0000000000..2b3e5ad3f1 --- /dev/null +++ b/src/main/java/kekztech/common/tileentities/TileEntityThaumiumReinforcedVoidJar.java @@ -0,0 +1,10 @@ +package kekztech.common.tileentities; + +import thaumcraft.common.tiles.TileJarFillableVoid; + +public class TileEntityThaumiumReinforcedVoidJar extends TileJarFillableVoid { + + public TileEntityThaumiumReinforcedVoidJar() { + super.maxAmount = 256; + } +} diff --git a/src/main/java/kekztech/util/Util.java b/src/main/java/kekztech/util/Util.java new file mode 100644 index 0000000000..d571150d0b --- /dev/null +++ b/src/main/java/kekztech/util/Util.java @@ -0,0 +1,93 @@ +package kekztech.util; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import kekztech.common.items.ErrorItem; + +public class Util { + + protected static final DecimalFormat percentFormatRound_6 = new DecimalFormat("0.000000%"); + protected static final DecimalFormat percentFormatRound_2 = new DecimalFormat("0.00%"); + protected static final BigDecimal Threshold_1 = BigDecimal.valueOf(0.01); + protected static DecimalFormat standardFormat; + + static { + DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US); + dfs.setExponentSeparator("x10^"); + standardFormat = new DecimalFormat("0.00E0", dfs); + } + + public static ItemStack getStackofAmountFromOreDict(String oredictName, final int amount) { + final ArrayList list = OreDictionary.getOres(oredictName); + if (!list.isEmpty()) { + final ItemStack ret = list.get(0) + .copy(); + ret.stackSize = amount; + return ret; + } + System.err.println("Failed to find " + oredictName + " in OreDict"); + return new ItemStack(ErrorItem.getInstance(), amount); + } + + public static ItemStack[] toItemStackArray(List stacksList) { + if (stacksList.size() == 0) { + return null; + } + + ItemStack[] ret = new ItemStack[stacksList.size()]; + Iterator iterator = stacksList.iterator(); + for (int i = 0; i < ret.length; i++) { + ret[i] = iterator.next(); + } + return ret; + } + + public static FluidStack[] toFluidStackArray(List stacksList) { + if (stacksList.size() == 0) { + return null; + } + + FluidStack[] ret = new FluidStack[stacksList.size()]; + Iterator iterator = stacksList.iterator(); + for (int i = 0; i < ret.length; i++) { + ret[i] = iterator.next(); + } + return ret; + } + + /* If the number is less than 1, we round by the 6, otherwise to 2 */ + public static String toPercentageFrom(BigInteger value, BigInteger maxValue) { + if (BigInteger.ZERO.equals(maxValue)) { + return "0.00%"; + } + BigDecimal result = new BigDecimal(value).setScale(6, RoundingMode.HALF_UP) + .divide(new BigDecimal(maxValue), RoundingMode.HALF_UP); + if (result.compareTo(Threshold_1) < 0) { + return percentFormatRound_6.format(result); + } else { + return percentFormatRound_2.format(result); + } + } + + /* Get a string like this: 4.56*10^25 */ + public static String toStandardForm(BigInteger number) { + if (BigInteger.ZERO.equals(number)) { + return "0"; + } + + return standardFormat.format(number); + } + +} diff --git a/src/main/java/kubatech/api/eig/EIGBucket.java b/src/main/java/kubatech/api/eig/EIGBucket.java index 6a3dbdb642..0ef9630a72 100644 --- a/src/main/java/kubatech/api/eig/EIGBucket.java +++ b/src/main/java/kubatech/api/eig/EIGBucket.java @@ -10,8 +10,8 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.EnumChatFormatting; -import gregtech.api.util.GT_Utility; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; +import gregtech.api.util.GTUtility; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse; public abstract class EIGBucket { @@ -119,14 +119,14 @@ public abstract class EIGBucket { * @return number of seeds consumed, 0 for wrong item, -1 if it missed the support items, -2 if you tried to consume * 0 or less items; */ - public int tryAddSeed(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, ItemStack input, int maxConsume, + public int tryAddSeed(MTEExtremeIndustrialGreenhouse greenhouse, ItemStack input, int maxConsume, boolean simulate) { // Abort is input if empty if (input == null || input.stackSize <= 0) return -2; // Cap max to input count maxConsume = Math.min(maxConsume, input.stackSize); // Abort if item isn't an identical seed. - if (!GT_Utility.areStacksEqual(this.seed, input, false)) return 0; + if (!GTUtility.areStacksEqual(this.seed, input, false)) return 0; // no support items, consume and exit early. if (this.supportItems == null || this.supportItems.length <= 0) { @@ -143,7 +143,7 @@ public abstract class EIGBucket { for (ItemStack otherInput : greenhouse.getStoredInputs()) { // filter usable inputs if (otherInput == null || otherInput.stackSize <= 0) continue; - if (!GT_Utility.areStacksEqual(supportItem, otherInput, false)) continue; + if (!GTUtility.areStacksEqual(supportItem, otherInput, false)) continue; // update max consume again maxConsume = Math.min(maxConsume, otherInput.stackSize); toConsumeFrom.addLast(otherInput); @@ -242,6 +242,6 @@ public abstract class EIGBucket { * @param greenhouse The greenhouse that contains the bucket. * @return True if the bucket was successfully validated. {@link EIGBucket#isValid()} should also return true. */ - public abstract boolean revalidate(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse); + public abstract boolean revalidate(MTEExtremeIndustrialGreenhouse greenhouse); } diff --git a/src/main/java/kubatech/api/eig/EIGMode.java b/src/main/java/kubatech/api/eig/EIGMode.java index 68ad633773..b3ebddff1b 100644 --- a/src/main/java/kubatech/api/eig/EIGMode.java +++ b/src/main/java/kubatech/api/eig/EIGMode.java @@ -10,8 +10,8 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; +import gregtech.api.util.MultiblockTooltipBuilder; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse; public abstract class EIGMode { @@ -37,7 +37,7 @@ public abstract class EIGMode { public abstract double getFertilizerBoost(); - public abstract GT_Multiblock_Tooltip_Builder addTooltipInfo(GT_Multiblock_Tooltip_Builder builder); + public abstract MultiblockTooltipBuilder addTooltipInfo(MultiblockTooltipBuilder builder); /** * Used to resolve factory type to an identifier. @@ -98,15 +98,15 @@ public abstract class EIGMode { /** * Attempts to create a new bucket from a given item. Returns if the item cannot be inserted into the EIG. * - * @see IEIGBucketFactory#tryCreateBucket(GT_MetaTileEntity_ExtremeIndustrialGreenhouse, ItemStack) - * @param greenhouse The {@link GT_MetaTileEntity_ExtremeIndustrialGreenhouse} that will contain the seed. + * @see IEIGBucketFactory#tryCreateBucket(MTEExtremeIndustrialGreenhouse, ItemStack) + * @param greenhouse The {@link MTEExtremeIndustrialGreenhouse} that will contain the seed. * @param input The {@link ItemStack} for the input item. * @param maxConsume The maximum amount of items to consume. * @param simulate Whether to actually consume the seed. * @return Null if no bucket could be created from the item. */ - public EIGBucket tryCreateNewBucket(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, ItemStack input, - int maxConsume, boolean simulate) { + public EIGBucket tryCreateNewBucket(MTEExtremeIndustrialGreenhouse greenhouse, ItemStack input, int maxConsume, + boolean simulate) { // Validate inputs if (input == null) return null; maxConsume = Math.min(input.stackSize, maxConsume); diff --git a/src/main/java/kubatech/api/eig/IEIGBucketFactory.java b/src/main/java/kubatech/api/eig/IEIGBucketFactory.java index 647e544573..5e5ad8f10e 100644 --- a/src/main/java/kubatech/api/eig/IEIGBucketFactory.java +++ b/src/main/java/kubatech/api/eig/IEIGBucketFactory.java @@ -3,13 +3,13 @@ package kubatech.api.eig; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse; public interface IEIGBucketFactory { String getNBTIdentifier(); - EIGBucket tryCreateBucket(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, ItemStack stack); + EIGBucket tryCreateBucket(MTEExtremeIndustrialGreenhouse greenhouse, ItemStack stack); EIGBucket restore(NBTTagCompound nbt); } diff --git a/src/main/java/kubatech/api/enums/EIGModes.java b/src/main/java/kubatech/api/enums/EIGModes.java index a81de2b8c5..ef954ea699 100644 --- a/src/main/java/kubatech/api/enums/EIGModes.java +++ b/src/main/java/kubatech/api/enums/EIGModes.java @@ -2,7 +2,7 @@ package kubatech.api.enums; import java.util.HashMap; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.MultiblockTooltipBuilder; import kubatech.api.eig.EIGMode; import kubatech.tileentity.gregtech.multiblock.eigmodes.EIGIC2Mode; import kubatech.tileentity.gregtech.multiblock.eigmodes.EIGNormalMode; @@ -34,7 +34,7 @@ public class EIGModes { return Normal; } - public static void addTooltipInfo(GT_Multiblock_Tooltip_Builder tt) { + public static void addTooltipInfo(MultiblockTooltipBuilder tt) { // maybe make this use the mods list instead EIGModes.Normal.addTooltipInfo(tt); EIGModes.IC2.addTooltipInfo(tt); diff --git a/src/main/java/kubatech/api/enums/ItemList.java b/src/main/java/kubatech/api/enums/ItemList.java index 02943e3b22..92a5fca22b 100644 --- a/src/main/java/kubatech/api/enums/ItemList.java +++ b/src/main/java/kubatech/api/enums/ItemList.java @@ -1,7 +1,7 @@ package kubatech.api.enums; -import static gregtech.api.enums.GT_Values.NI; -import static gregtech.api.enums.GT_Values.W; +import static gregtech.api.enums.GTValues.NI; +import static gregtech.api.enums.GTValues.W; import java.util.Locale; @@ -10,10 +10,10 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import gregtech.api.interfaces.IItemContainer; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; public enum ItemList implements IItemContainer { @@ -82,14 +82,14 @@ public enum ItemList implements IItemContainer { mHasNotBeenSet = false; if (aItem == null) return this; ItemStack aStack = new ItemStack(aItem, 1, 0); - mStack = GT_Utility.copyAmount(1, aStack); + mStack = GTUtility.copyAmount(1, aStack); return this; } @Override public IItemContainer set(ItemStack aStack) { mHasNotBeenSet = false; - mStack = GT_Utility.copyAmount(1, aStack); + mStack = GTUtility.copyAmount(1, aStack); return this; } @@ -103,7 +103,7 @@ public enum ItemList implements IItemContainer { public Item getItem() { if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(mStack)) return null; + if (GTUtility.isStackInvalid(mStack)) return null; return mStack.getItem(); } @@ -111,7 +111,7 @@ public enum ItemList implements IItemContainer { public Block getBlock() { if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - return GT_Utility.getBlockFromItem(getItem()); + return GTUtility.getBlockFromItem(getItem()); } @Override @@ -126,46 +126,46 @@ public enum ItemList implements IItemContainer { @Override public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT) { - if (GT_Utility.isStackInvalid(aStack)) return false; - return GT_Utility.areUnificationsEqual((ItemStack) aStack, aWildcard ? getWildcard(1) : get(1), aIgnoreNBT); + if (GTUtility.isStackInvalid(aStack)) return false; + return GTUtility.areUnificationsEqual((ItemStack) aStack, aWildcard ? getWildcard(1) : get(1), aIgnoreNBT); } @Override public ItemStack get(long aAmount, Object... aReplacements) { if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmount(aAmount, GT_OreDictUnificator.get(mStack)); + if (GTUtility.isStackInvalid(mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmount(aAmount, GTOreDictUnificator.get(mStack)); } @Override public ItemStack getWildcard(long aAmount, Object... aReplacements) { if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmountAndMetaData(aAmount, W, GT_OreDictUnificator.get(mStack)); + if (GTUtility.isStackInvalid(mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmountAndMetaData(aAmount, W, GTOreDictUnificator.get(mStack)); } @Override public ItemStack getUndamaged(long aAmount, Object... aReplacements) { if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmountAndMetaData(aAmount, 0, GT_OreDictUnificator.get(mStack)); + if (GTUtility.isStackInvalid(mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmountAndMetaData(aAmount, 0, GTOreDictUnificator.get(mStack)); } @Override public ItemStack getAlmostBroken(long aAmount, Object... aReplacements) { if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmountAndMetaData(aAmount, mStack.getMaxDamage() - 1, GT_OreDictUnificator.get(mStack)); + if (GTUtility.isStackInvalid(mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmountAndMetaData(aAmount, mStack.getMaxDamage() - 1, GTOreDictUnificator.get(mStack)); } @Override public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements) { ItemStack rStack = get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) return NI; + if (GTUtility.isStackInvalid(rStack)) return NI; // CamelCase alphanumeric words from aDisplayName StringBuilder tCamelCasedDisplayNameBuilder = new StringBuilder(); @@ -186,31 +186,31 @@ public enum ItemList implements IItemContainer { // Construct a translation key from UnlocalizedName and CamelCased DisplayName final String tKey = rStack.getUnlocalizedName() + ".with." + tCamelCasedDisplayNameBuilder + ".name"; - rStack.setStackDisplayName(GT_LanguageManager.addStringLocalization(tKey, aDisplayName)); - return GT_Utility.copyAmount(aAmount, rStack); + rStack.setStackDisplayName(GTLanguageManager.addStringLocalization(tKey, aDisplayName)); + return GTUtility.copyAmount(aAmount, rStack); } @Override public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements) { ItemStack rStack = get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) return null; - GT_ModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); - return GT_Utility.copyAmount(aAmount, rStack); + if (GTUtility.isStackInvalid(rStack)) return null; + GTModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); + return GTUtility.copyAmount(aAmount, rStack); } @Override public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements) { if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - if (GT_Utility.isStackInvalid(mStack)) return GT_Utility.copyAmount(aAmount, aReplacements); - return GT_Utility.copyAmountAndMetaData(aAmount, aMetaValue, GT_OreDictUnificator.get(mStack)); + if (GTUtility.isStackInvalid(mStack)) return GTUtility.copyAmount(aAmount, aReplacements); + return GTUtility.copyAmountAndMetaData(aAmount, aMetaValue, GTOreDictUnificator.get(mStack)); } @Override public IItemContainer registerOre(Object... aOreNames) { if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - for (Object tOreName : aOreNames) GT_OreDictUnificator.registerOre(tOreName, get(1)); + for (Object tOreName : aOreNames) GTOreDictUnificator.registerOre(tOreName, get(1)); return this; } @@ -218,7 +218,7 @@ public enum ItemList implements IItemContainer { public IItemContainer registerWildcardAsOre(Object... aOreNames) { if (mHasNotBeenSet) throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - for (Object tOreName : aOreNames) GT_OreDictUnificator.registerOre(tOreName, getWildcard(1)); + for (Object tOreName : aOreNames) GTOreDictUnificator.registerOre(tOreName, getWildcard(1)); return this; } diff --git a/src/main/java/kubatech/api/helpers/GTHelper.java b/src/main/java/kubatech/api/helpers/GTHelper.java index 72bbe8cf77..fe6a2a6167 100644 --- a/src/main/java/kubatech/api/helpers/GTHelper.java +++ b/src/main/java/kubatech/api/helpers/GTHelper.java @@ -30,16 +30,16 @@ import net.minecraft.network.PacketBuffer; import com.kuba6000.mobsinfo.api.utils.ItemID; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEMultiBlockBase; import kubatech.api.implementations.KubaTechGTMultiBlockBase; public class GTHelper { - public static long getMaxInputEU(GT_MetaTileEntity_MultiBlockBase mte) { + public static long getMaxInputEU(MTEMultiBlockBase mte) { if (mte instanceof KubaTechGTMultiBlockBase) return ((KubaTechGTMultiBlockBase) mte).getMaxInputEu(); long rEU = 0; - for (GT_MetaTileEntity_Hatch_Energy tHatch : mte.mEnergyHatches) + for (MTEHatchEnergy tHatch : mte.mEnergyHatches) if (tHatch.isValid()) rEU += tHatch.maxEUInput() * tHatch.maxAmperesIn(); return rEU; } @@ -48,7 +48,7 @@ public class GTHelper { return Math.log((double) voltage / 8L) / ln4; } - public static double getVoltageTierD(GT_MetaTileEntity_MultiBlockBase mte) { + public static double getVoltageTierD(MTEMultiBlockBase mte) { return Math.log((double) getMaxInputEU(mte) / 8L) / ln4; } @@ -56,7 +56,7 @@ public class GTHelper { return (int) getVoltageTierD(voltage); } - public static int getVoltageTier(GT_MetaTileEntity_MultiBlockBase mte) { + public static int getVoltageTier(MTEMultiBlockBase mte) { return (int) getVoltageTierD(mte); } diff --git a/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java b/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java index 94b120a3e9..d8f12126c1 100644 --- a/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java +++ b/src/main/java/kubatech/api/implementations/KubaTechGTMultiBlockBase.java @@ -55,17 +55,17 @@ import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import gregtech.api.enums.GT_Values; -import gregtech.api.gui.modularui.GT_UITextures; +import gregtech.api.enums.GTValues; +import gregtech.api.gui.modularui.GTUITextures; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.metatileentity.BaseMetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.common.tileentities.machines.MTEHatchOutputBusME; import kubatech.Tags; -public abstract class KubaTechGTMultiBlockBase> - extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase { +public abstract class KubaTechGTMultiBlockBase> + extends MTEExtendedPowerMultiBlockBase { @Deprecated public final int mEUt = 0; @@ -212,8 +212,8 @@ public abstract class KubaTechGTMultiBlockBase isFixed = widget -> getIdealStatus() == getRepairStatus() && mMachine; protected static final Function toggleButtonTextureGetter = val -> val == 0 - ? GT_UITextures.OVERLAY_BUTTON_CROSS - : GT_UITextures.OVERLAY_BUTTON_CHECKMARK; + ? GTUITextures.OVERLAY_BUTTON_CROSS + : GTUITextures.OVERLAY_BUTTON_CHECKMARK; protected static final Function toggleButtonBackgroundGetter = val -> new IDrawable[] { - val == 0 ? GT_UITextures.BUTTON_STANDARD : GT_UITextures.BUTTON_STANDARD_PRESSED }; + val == 0 ? GTUITextures.BUTTON_STANDARD : GTUITextures.BUTTON_STANDARD_PRESSED }; } diff --git a/src/main/java/kubatech/api/utils/StringUtils.java b/src/main/java/kubatech/api/utils/StringUtils.java index 68f6c8249f..408da2dfc9 100644 --- a/src/main/java/kubatech/api/utils/StringUtils.java +++ b/src/main/java/kubatech/api/utils/StringUtils.java @@ -22,7 +22,7 @@ package kubatech.api.utils; import net.minecraft.util.EnumChatFormatting; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; public class StringUtils { @@ -53,6 +53,6 @@ public class StringUtils { } public static String voltageTooltipFormatted(int tier) { - return GT_Values.TIER_COLORS[tier] + GT_Values.VN[tier] + EnumChatFormatting.GRAY; + return GTValues.TIER_COLORS[tier] + GTValues.VN[tier] + EnumChatFormatting.GRAY; } } diff --git a/src/main/java/kubatech/loaders/BlockLoader.java b/src/main/java/kubatech/loaders/BlockLoader.java index fcb077ff15..e2c94a0e4b 100644 --- a/src/main/java/kubatech/loaders/BlockLoader.java +++ b/src/main/java/kubatech/loaders/BlockLoader.java @@ -25,11 +25,11 @@ import net.minecraft.item.ItemBlock; import cpw.mods.fml.common.registry.GameRegistry; import kubatech.api.enums.ItemList; -import kubatech.loaders.block.defc.DEFCCasingBlock; +import kubatech.loaders.block.defc.BlockDEFCCasing; import kubatech.loaders.block.kubablock.KubaBlock; import kubatech.loaders.block.kubablock.KubaItemBlock; -import kubatech.loaders.block.kubablock.blocks.TeaAcceptor; -import kubatech.loaders.block.kubablock.blocks.TeaStorage; +import kubatech.loaders.block.kubablock.blocks.BlockTeaAcceptor; +import kubatech.loaders.block.kubablock.blocks.BlockTeaStorage; import kubatech.tileentity.TeaAcceptorTile; import kubatech.tileentity.TeaStorageTile; @@ -37,7 +37,7 @@ public class BlockLoader { public static final KubaBlock kubaBlock = new KubaBlock(Material.anvil); public static final ItemBlock kubaItemBlock = new KubaItemBlock(kubaBlock); - public static final DEFCCasingBlock defcCasingBlock = new DEFCCasingBlock(); + public static final BlockDEFCCasing defcCasingBlock = new BlockDEFCCasing(); public static void registerBlocks() { GameRegistry.registerTileEntity(TeaAcceptorTile.class, "KT_TeaAcceptor"); @@ -45,7 +45,7 @@ public class BlockLoader { GameRegistry.registerBlock(kubaBlock, null, "kubablocks"); GameRegistry.registerItem(kubaItemBlock, "kubablocks"); - ItemList.TeaAcceptor.set(kubaBlock.registerProxyBlock(new TeaAcceptor())); - ItemList.TeaStorage.set(kubaBlock.registerProxyBlock(new TeaStorage())); + ItemList.TeaAcceptor.set(kubaBlock.registerProxyBlock(new BlockTeaAcceptor())); + ItemList.TeaStorage.set(kubaBlock.registerProxyBlock(new BlockTeaStorage())); } } diff --git a/src/main/java/kubatech/loaders/DEFCRecipes.java b/src/main/java/kubatech/loaders/DEFCRecipes.java index ebea8d751f..37f13c1298 100644 --- a/src/main/java/kubatech/loaders/DEFCRecipes.java +++ b/src/main/java/kubatech/loaders/DEFCRecipes.java @@ -8,7 +8,7 @@ import static gregtech.api.enums.Mods.SuperSolarPanels; import static gregtech.api.enums.Mods.Witchery; import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.util.GT_RecipeConstants.DEFC_CASING_TIER; +import static gregtech.api.util.GTRecipeConstants.DEFC_CASING_TIER; import java.util.Arrays; @@ -22,7 +22,7 @@ import com.gtnewhorizons.modularui.api.drawable.UITexture; import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.ItemList; import gregtech.api.enums.Materials; import gregtech.api.enums.MaterialsUEVplus; @@ -31,12 +31,12 @@ import gregtech.api.enums.TierEU; import gregtech.api.recipe.RecipeMap; import gregtech.api.recipe.RecipeMapBackend; import gregtech.api.recipe.RecipeMapBuilder; -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.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; import gregtech.nei.formatter.SimpleSpecialValueFormatter; -import gtPlusPlus.xmod.forestry.bees.handler.GTPP_CombType; +import gtPlusPlus.xmod.forestry.bees.handler.GTPPCombType; import kubatech.Tags; public class DEFCRecipes { @@ -54,13 +54,13 @@ public class DEFCRecipes { public static void addRecipes() { // Dragonblood recipe for magics haters - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( new ItemStack(Blocks.dragon_egg, 1), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64L), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64L)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64L), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64L)) .fluidInputs(Materials.Radon.getPlasma(144)) - .itemOutputs(GT_OreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 8L)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.dust, Materials.Ash, 8L)) .fluidOutputs(new FluidStack(FluidRegistry.getFluid("molten.dragonblood"), 288)) .eut(TierEU.RECIPE_UHV) .duration(14_000) @@ -68,59 +68,59 @@ public class DEFCRecipes { // Casings - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 6L), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.NaquadahAlloy, 6L)) + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.NaquadahAlloy, 6L), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.NaquadahAlloy, 6L)) .fluidInputs(Materials.Void.getMolten(1152L)) .itemOutputs(kubatech.api.enums.ItemList.DEFCCasingBase.get(1)) .eut(TierEU.RECIPE_UV) .duration(24000) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "tile.BloodyIchorium", 1, 0), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmiridium, 6L)) + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "tile.BloodyIchorium", 1, 0), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmiridium, 6L)) .fluidInputs(Materials.Void.getMolten(1152L)) .itemOutputs(kubatech.api.enums.ItemList.DEFCCasingT1.get(1)) .eut(TierEU.RECIPE_UV) .duration(24000) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( kubatech.api.enums.ItemList.DEFCCasingT1.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Draconium, 6L), - GT_ModHandler.getModItem(DraconicEvolution.ID, "draconicCore", 1, 0)) + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Draconium, 6L), + GTModHandler.getModItem(DraconicEvolution.ID, "draconicCore", 1, 0)) .fluidInputs(Materials.Void.getMolten(2304L)) .itemOutputs(kubatech.api.enums.ItemList.DEFCCasingT2.get(1)) .eut(TierEU.RECIPE_UV) .duration(24000) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( kubatech.api.enums.ItemList.DEFCCasingT2.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.CosmicNeutronium, 6L), - GT_ModHandler.getModItem(DraconicEvolution.ID, "wyvernCore", 2, 0)) + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.CosmicNeutronium, 6L), + GTModHandler.getModItem(DraconicEvolution.ID, "wyvernCore", 2, 0)) .fluidInputs(Materials.Void.getMolten(4608L)) .itemOutputs(kubatech.api.enums.ItemList.DEFCCasingT3.get(1)) .eut(TierEU.RECIPE_UHV) .duration(12000) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( kubatech.api.enums.ItemList.DEFCCasingT3.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 6L), - GT_ModHandler.getModItem(DraconicEvolution.ID, "awakenedCore", 3, 0)) + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 6L), + GTModHandler.getModItem(DraconicEvolution.ID, "awakenedCore", 3, 0)) .fluidInputs(Materials.Void.getMolten(9216L)) .itemOutputs(kubatech.api.enums.ItemList.DEFCCasingT4.get(1)) .eut(TierEU.RECIPE_UEV) .duration(12000) .addTo(assemblerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( kubatech.api.enums.ItemList.DEFCCasingT4.get(1), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 6L), - GT_ModHandler.getModItem(DraconicEvolution.ID, "chaoticCore", 4, 0)) + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 6L), + GTModHandler.getModItem(DraconicEvolution.ID, "chaoticCore", 4, 0)) .fluidInputs(Materials.Void.getMolten(18432L)) .itemOutputs(kubatech.api.enums.ItemList.DEFCCasingT5.get(1)) .eut(TierEU.RECIPE_UIV) @@ -133,7 +133,7 @@ public class DEFCRecipes { private static final Item EMTItems = GameRegistry.findItem("EMT", "EMTItems"); - private static void addOldHiddenRecipe(GT_Recipe recipe) { + private static void addOldHiddenRecipe(GTRecipe recipe) { if (!ElectroMagicTools.isModLoaded()) return; recipe = recipe.copy(); recipe.mInputs = Arrays.stream(recipe.mInputs) @@ -169,29 +169,29 @@ public class DEFCRecipes { private static void fusionRecipes() { // CORES - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 4), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Ichorium, 1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Ichorium, 1), ItemList.QuantumEye.get(1L), kubatech.api.enums.ItemList.DEFCDraconicSchematic.get(0L)) .fluidInputs(Materials.Sunnarium.getMolten(1440)) - .itemOutputs(GT_ModHandler.getModItem(DraconicEvolution.ID, "draconicCore", 1, 0)) + .itemOutputs(GTModHandler.getModItem(DraconicEvolution.ID, "draconicCore", 1, 0)) .eut(TierEU.RECIPE_UV) .duration(400) .metadata(DEFC_CASING_TIER, 1) .addTo(fusionCraftingRecipes) .forEach(DEFCRecipes::addOldHiddenRecipe); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 8), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 4), - GT_ModHandler.getModItem(DraconicEvolution.ID, "draconicCore", 4, 0), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 8), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 4), + GTModHandler.getModItem(DraconicEvolution.ID, "draconicCore", 4, 0), ItemList.QuantumStar.get(1L), kubatech.api.enums.ItemList.DEFCWyvernSchematic.get(0L)) .fluidInputs(Materials.Neutronium.getMolten(1440)) - .itemOutputs(GT_ModHandler.getModItem(DraconicEvolution.ID, "wyvernCore", 1, 0)) + .itemOutputs(GTModHandler.getModItem(DraconicEvolution.ID, "wyvernCore", 1, 0)) .eut(TierEU.RECIPE_UHV) .duration(800) .metadata(DEFC_CASING_TIER, 2) @@ -199,30 +199,30 @@ public class DEFCRecipes { .forEach(DEFCRecipes::addOldHiddenRecipe); if (Loader.isModLoaded("supersolarpanel")) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 12), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 4), - GT_ModHandler.getModItem(DraconicEvolution.ID, "wyvernCore", 4, 0), - GT_ModHandler.getModItem(SuperSolarPanels.ID, "enderquantumcomponent", 1, 0), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 12), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 4), + GTModHandler.getModItem(DraconicEvolution.ID, "wyvernCore", 4, 0), + GTModHandler.getModItem(SuperSolarPanels.ID, "enderquantumcomponent", 1, 0), kubatech.api.enums.ItemList.DEFCAwakenedSchematic.get(0L)) .fluidInputs(Materials.Infinity.getMolten(1440)) - .itemOutputs(GT_ModHandler.getModItem(DraconicEvolution.ID, "awakenedCore", 1, 0)) + .itemOutputs(GTModHandler.getModItem(DraconicEvolution.ID, "awakenedCore", 1, 0)) .eut(TierEU.RECIPE_UEV) .duration(1600) .metadata(DEFC_CASING_TIER, 3) .addTo(fusionCraftingRecipes) .forEach(DEFCRecipes::addOldHiddenRecipe); } else { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 12), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 4), - GT_ModHandler.getModItem(DraconicEvolution.ID, "wyvernCore", 4, 0), - GT_ModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ManyullynCrystal", 1, 0), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 12), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 4), + GTModHandler.getModItem(DraconicEvolution.ID, "wyvernCore", 4, 0), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.ManyullynCrystal", 1, 0), kubatech.api.enums.ItemList.DEFCAwakenedSchematic.get(0L)) .fluidInputs(Materials.Infinity.getMolten(1440)) - .itemOutputs(GT_ModHandler.getModItem(DraconicEvolution.ID, "awakenedCore", 1, 0)) + .itemOutputs(GTModHandler.getModItem(DraconicEvolution.ID, "awakenedCore", 1, 0)) .eut(TierEU.RECIPE_UEV) .duration(1600) .metadata(DEFC_CASING_TIER, 3) @@ -230,15 +230,15 @@ public class DEFCRecipes { .forEach(DEFCRecipes::addOldHiddenRecipe); } - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 16), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 4), - GT_ModHandler.getModItem(DraconicEvolution.ID, "awakenedCore", 4, 0), - GT_ModHandler.getModItem(DraconicEvolution.ID, "chaosFragment", 2, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 16), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.BlackPlutonium, 4), + GTModHandler.getModItem(DraconicEvolution.ID, "awakenedCore", 4, 0), + GTModHandler.getModItem(DraconicEvolution.ID, "chaosFragment", 2, 2), kubatech.api.enums.ItemList.DEFCChaoticSchematic.get(0L)) .fluidInputs(MaterialsUEVplus.SpaceTime.getMolten(1440)) - .itemOutputs(GT_ModHandler.getModItem(DraconicEvolution.ID, "chaoticCore", 1, 0)) + .itemOutputs(GTModHandler.getModItem(DraconicEvolution.ID, "chaoticCore", 1, 0)) .eut(24_000_000) .duration(3200) .metadata(DEFC_CASING_TIER, 4) @@ -247,28 +247,28 @@ public class DEFCRecipes { // ENERGY CORES - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 8), - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.StellarAlloy, 4), - GT_ModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 4, 1), - GT_ModHandler.getModItem(DraconicEvolution.ID, "draconicCore", 1, 0), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Draconium, 8), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.StellarAlloy, 4), + GTModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 4, 1), + GTModHandler.getModItem(DraconicEvolution.ID, "draconicCore", 1, 0), kubatech.api.enums.ItemList.DEFCWyvernSchematic.get(0L)) - .itemOutputs(GT_ModHandler.getModItem(DraconicEvolution.ID, "draconiumEnergyCore", 1, 0)) + .itemOutputs(GTModHandler.getModItem(DraconicEvolution.ID, "draconiumEnergyCore", 1, 0)) .eut(TierEU.RECIPE_UV) .duration(1000) .metadata(DEFC_CASING_TIER, 2) .addTo(fusionCraftingRecipes) .forEach(DEFCRecipes::addOldHiddenRecipe); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_OreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 8), - GT_ModHandler.getModItem(DraconicEvolution.ID, "draconiumEnergyCore", 4, 0), - GT_ModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 4, 4), - GT_ModHandler.getModItem(DraconicEvolution.ID, "wyvernCore", 1, 0), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.DraconiumAwakened, 8), + GTModHandler.getModItem(DraconicEvolution.ID, "draconiumEnergyCore", 4, 0), + GTModHandler.getModItem(AdvancedSolarPanel.ID, "asp_crafting_items", 4, 4), + GTModHandler.getModItem(DraconicEvolution.ID, "wyvernCore", 1, 0), kubatech.api.enums.ItemList.DEFCAwakenedSchematic.get(0L)) - .itemOutputs(GT_ModHandler.getModItem(DraconicEvolution.ID, "draconiumEnergyCore", 1, 1)) + .itemOutputs(GTModHandler.getModItem(DraconicEvolution.ID, "draconiumEnergyCore", 1, 1)) .eut(TierEU.RECIPE_UHV) .duration(2000) .metadata(DEFC_CASING_TIER, 3) @@ -276,11 +276,11 @@ public class DEFCRecipes { .forEach(DEFCRecipes::addOldHiddenRecipe); // Dragon Blood - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( new ItemStack(Blocks.dragon_egg, 0), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), - GT_Utility.getIntegratedCircuit(1)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), + GTUtility.getIntegratedCircuit(1)) .fluidInputs(Materials.Radon.getPlasma(144)) .fluidOutputs(new FluidStack(FluidRegistry.getFluid("molten.dragonblood"), 288)) .eut(TierEU.RECIPE_UHV) @@ -289,11 +289,11 @@ public class DEFCRecipes { .noOptimize() .addTo(fusionCraftingRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_ModHandler.getModItem(Witchery.ID, "infinityegg", 0), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), - GT_Utility.getIntegratedCircuit(1)) + GTModHandler.getModItem(Witchery.ID, "infinityegg", 0), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), + GTUtility.getIntegratedCircuit(1)) .fluidInputs(Materials.Radon.getPlasma(72)) .fluidOutputs(new FluidStack(FluidRegistry.getFluid("molten.dragonblood"), 432)) .eut(TierEU.RECIPE_UHV) @@ -302,11 +302,11 @@ public class DEFCRecipes { .noOptimize() .addTo(fusionCraftingRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( new ItemStack(Blocks.dragon_egg, 0), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), - GTPP_CombType.DRAGONBLOOD.getStackForType(1)) + GTOreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), + GTPPCombType.DRAGONBLOOD.getStackForType(1)) .fluidInputs(Materials.Radon.getPlasma(216)) .fluidOutputs(new FluidStack(FluidRegistry.getFluid("molten.dragonblood"), 432)) .eut(TierEU.RECIPE_UHV) @@ -315,11 +315,11 @@ public class DEFCRecipes { .noOptimize() .addTo(fusionCraftingRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs( - GT_ModHandler.getModItem(Witchery.ID, "infinityegg", 0), - GT_OreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), - GTPP_CombType.DRAGONBLOOD.getStackForType(1)) + GTModHandler.getModItem(Witchery.ID, "infinityegg", 0), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.DraconiumAwakened, 64), + GTPPCombType.DRAGONBLOOD.getStackForType(1)) .fluidInputs(Materials.Radon.getPlasma(108)) .fluidOutputs(new FluidStack(FluidRegistry.getFluid("molten.dragonblood"), 648)) .eut(TierEU.RECIPE_UHV) diff --git a/src/main/java/kubatech/loaders/ItemLoader.java b/src/main/java/kubatech/loaders/ItemLoader.java index d8218ea873..a7d37da63a 100644 --- a/src/main/java/kubatech/loaders/ItemLoader.java +++ b/src/main/java/kubatech/loaders/ItemLoader.java @@ -73,10 +73,10 @@ import net.minecraft.util.StatCollector; import cpw.mods.fml.common.registry.GameRegistry; import kubatech.loaders.item.ItemProxy; import kubatech.loaders.item.KubaItems; -import kubatech.loaders.item.items.Tea; -import kubatech.loaders.item.items.TeaCollection; -import kubatech.loaders.item.items.TeaIngredient; -import kubatech.loaders.item.items.TeaUltimate; +import kubatech.loaders.item.items.ItemTea; +import kubatech.loaders.item.items.ItemTeaCollection; +import kubatech.loaders.item.items.ItemTeaIngredient; +import kubatech.loaders.item.items.ItemTeaUltimate; public class ItemLoader { @@ -87,45 +87,45 @@ public class ItemLoader { // DON'T EVER CHANGE ORDER IN HERE, ADD NEW ITEMS ON BOTTOM - LegendaryBlackTea.set(kubaitems.registerProxyItem(new TeaCollection("black_tea"))); - LegendaryButterflyTea.set(kubaitems.registerProxyItem(new TeaCollection("butterfly_tea"))); - LegendaryEarlGrayTea.set(kubaitems.registerProxyItem(new TeaCollection("earl_gray_tea"))); - LegendaryGreenTea.set(kubaitems.registerProxyItem(new TeaCollection("green_tea"))); - LegendaryLemonTea.set(kubaitems.registerProxyItem(new TeaCollection("lemon_tea"))); - LegendaryMilkTea.set(kubaitems.registerProxyItem(new TeaCollection("milk_tea"))); - LegendaryOolongTea.set(kubaitems.registerProxyItem(new TeaCollection("oolong_tea"))); - LegendaryPeppermintTea.set(kubaitems.registerProxyItem(new TeaCollection("peppermint_tea"))); - LegendaryPuerhTea.set(kubaitems.registerProxyItem(new TeaCollection("pu-erh_tea"))); - LegendaryRedTea.set(kubaitems.registerProxyItem(new TeaCollection("red_tea"))); - LegendaryWhiteTea.set(kubaitems.registerProxyItem(new TeaCollection("white_tea"))); - LegendaryYellowTea.set(kubaitems.registerProxyItem(new TeaCollection("yellow_tea"))); - LegendaryUltimateTea.set(kubaitems.registerProxyItem(new TeaUltimate())); - - BlackTea.set(kubaitems.registerProxyItem(new Tea("black_tea", 4, 0.3f))); - EarlGrayTea.set(kubaitems.registerProxyItem(new Tea("earl_gray_tea", 4, 0.3f))); - GreenTea.set(kubaitems.registerProxyItem(new Tea("green_tea", 4, 0.3f))); - LemonTea.set(kubaitems.registerProxyItem(new Tea("lemon_tea", 4, 0.3f))); - MilkTea.set(kubaitems.registerProxyItem(new Tea("milk_tea", 4, 0.3f))); - OolongTea.set(kubaitems.registerProxyItem(new Tea("oolong_tea", 4, 0.3f))); - PeppermintTea.set(kubaitems.registerProxyItem(new Tea("peppermint_tea", 4, 0.3f))); - PuerhTea.set(kubaitems.registerProxyItem(new Tea("pu-erh_tea", 4, 0.3f))); - WhiteTea.set(kubaitems.registerProxyItem(new Tea("white_tea", 4, 0.3f))); - YellowTea.set(kubaitems.registerProxyItem(new Tea("yellow_tea", 4, 0.3f))); - - BlackTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("black_tea_leaf"))); - GreenTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("green_tea_leaf"))); - OolongTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("oolong_tea_leaf"))); - PuerhTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("pu-erh_tea_leaf"))); - WhiteTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("white_tea_leaf"))); - YellowTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("yellow_tea_leaf"))); - - TeaLeafDehydrated.set(kubaitems.registerProxyItem(new TeaIngredient("tea_leaf_dehydrated"))); - SteamedTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("steamed_tea_leaf"))); - RolledTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("rolled_tea_leaf"))); - OxidizedTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("oxidized_tea_leaf"))); - FermentedTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("fermented_tea_leaf"))); - BruisedTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("bruised_tea_leaf"))); - PartiallyOxidizedTeaLeaf.set(kubaitems.registerProxyItem(new TeaIngredient("partially_oxidized_tea_leaf"))); + LegendaryBlackTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("black_tea"))); + LegendaryButterflyTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("butterfly_tea"))); + LegendaryEarlGrayTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("earl_gray_tea"))); + LegendaryGreenTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("green_tea"))); + LegendaryLemonTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("lemon_tea"))); + LegendaryMilkTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("milk_tea"))); + LegendaryOolongTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("oolong_tea"))); + LegendaryPeppermintTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("peppermint_tea"))); + LegendaryPuerhTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("pu-erh_tea"))); + LegendaryRedTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("red_tea"))); + LegendaryWhiteTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("white_tea"))); + LegendaryYellowTea.set(kubaitems.registerProxyItem(new ItemTeaCollection("yellow_tea"))); + LegendaryUltimateTea.set(kubaitems.registerProxyItem(new ItemTeaUltimate())); + + BlackTea.set(kubaitems.registerProxyItem(new ItemTea("black_tea", 4, 0.3f))); + EarlGrayTea.set(kubaitems.registerProxyItem(new ItemTea("earl_gray_tea", 4, 0.3f))); + GreenTea.set(kubaitems.registerProxyItem(new ItemTea("green_tea", 4, 0.3f))); + LemonTea.set(kubaitems.registerProxyItem(new ItemTea("lemon_tea", 4, 0.3f))); + MilkTea.set(kubaitems.registerProxyItem(new ItemTea("milk_tea", 4, 0.3f))); + OolongTea.set(kubaitems.registerProxyItem(new ItemTea("oolong_tea", 4, 0.3f))); + PeppermintTea.set(kubaitems.registerProxyItem(new ItemTea("peppermint_tea", 4, 0.3f))); + PuerhTea.set(kubaitems.registerProxyItem(new ItemTea("pu-erh_tea", 4, 0.3f))); + WhiteTea.set(kubaitems.registerProxyItem(new ItemTea("white_tea", 4, 0.3f))); + YellowTea.set(kubaitems.registerProxyItem(new ItemTea("yellow_tea", 4, 0.3f))); + + BlackTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("black_tea_leaf"))); + GreenTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("green_tea_leaf"))); + OolongTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("oolong_tea_leaf"))); + PuerhTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("pu-erh_tea_leaf"))); + WhiteTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("white_tea_leaf"))); + YellowTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("yellow_tea_leaf"))); + + TeaLeafDehydrated.set(kubaitems.registerProxyItem(new ItemTeaIngredient("tea_leaf_dehydrated"))); + SteamedTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("steamed_tea_leaf"))); + RolledTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("rolled_tea_leaf"))); + OxidizedTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("oxidized_tea_leaf"))); + FermentedTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("fermented_tea_leaf"))); + BruisedTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("bruised_tea_leaf"))); + PartiallyOxidizedTeaLeaf.set(kubaitems.registerProxyItem(new ItemTeaIngredient("partially_oxidized_tea_leaf"))); TeaAcceptorResearchNote .set(kubaitems.registerProxyItem(new ItemProxy("tea_acceptor_research_note", "research_note"))); diff --git a/src/main/java/kubatech/loaders/MobHandlerLoader.java b/src/main/java/kubatech/loaders/MobHandlerLoader.java index c7932dd00c..d54edfa260 100644 --- a/src/main/java/kubatech/loaders/MobHandlerLoader.java +++ b/src/main/java/kubatech/loaders/MobHandlerLoader.java @@ -21,8 +21,8 @@ package kubatech.loaders; import static gregtech.api.enums.Mods.InfernalMobs; -import static kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeEntityCrusher.DIAMOND_SPIKES_DAMAGE; -import static kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeEntityCrusher.MOB_SPAWN_INTERVAL; +import static kubatech.tileentity.gregtech.multiblock.MTEExtremeEntityCrusher.DIAMOND_SPIKES_DAMAGE; +import static kubatech.tileentity.gregtech.multiblock.MTEExtremeEntityCrusher.MOB_SPAWN_INTERVAL; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; @@ -50,10 +50,10 @@ import com.kuba6000.mobsinfo.api.event.PreMobsRegistrationEvent; import atomicstryker.infernalmobs.common.InfernalMobsCore; import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTUtility; import kubatech.Tags; import kubatech.config.Config; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeEntityCrusher; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeEntityCrusher; public class MobHandlerLoader { @@ -90,7 +90,7 @@ public class MobHandlerLoader { mDuration = Math.max(MOB_SPAWN_INTERVAL, (int) ((recipe.maxEntityHealth / DIAMOND_SPIKES_DAMAGE) * 10d)); } - public ItemStack[] generateOutputs(Random rnd, GT_MetaTileEntity_ExtremeEntityCrusher MTE, double attackDamage, + public ItemStack[] generateOutputs(Random rnd, MTEExtremeEntityCrusher MTE, double attackDamage, int lootinglevel, boolean preferInfernalDrops, boolean voidAllDamagedAndEnchantedItems) { MTE.lEUt = mEUt; MTE.mMaxProgresstime = Math.max(MOB_SPAWN_INTERVAL, (int) ((recipe.maxEntityHealth / attackDamage) * 10d)); @@ -235,8 +235,8 @@ public class MobHandlerLoader { if (recipe != null) { event.additionalInformation.addAll( Arrays.asList( - GT_Utility.trans("153", "Usage: ") + GT_Utility.formatNumbers(recipe.mEUt) + " EU/t", - GT_Utility.trans("158", "Time: ") + GT_Utility.formatNumbers(recipe.mDuration / 20d) + " secs")); + GTUtility.trans("153", "Usage: ") + GTUtility.formatNumbers(recipe.mEUt) + " EU/t", + GTUtility.trans("158", "Time: ") + GTUtility.formatNumbers(recipe.mDuration / 20d) + " secs")); } } } diff --git a/src/main/java/kubatech/loaders/RecipeLoader.java b/src/main/java/kubatech/loaders/RecipeLoader.java index 94bb9fb8ee..139909851a 100644 --- a/src/main/java/kubatech/loaders/RecipeLoader.java +++ b/src/main/java/kubatech/loaders/RecipeLoader.java @@ -36,13 +36,13 @@ import static gregtech.api.enums.Mods.PamsHarvestCraft; import static gregtech.api.recipe.RecipeMaps.benderRecipes; import static gregtech.api.recipe.RecipeMaps.cutterRecipes; import static gregtech.api.recipe.RecipeMaps.mixerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeBuilder.TICKS; -import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; -import static gregtech.api.util.GT_RecipeConstants.UniversalChemical; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.AssemblyLine; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME; +import static gregtech.api.util.GTRecipeConstants.UniversalChemical; import static gtPlusPlus.api.recipe.GTPPRecipeMaps.chemicalDehydratorRecipes; import static kubatech.api.enums.ItemList.BlackTea; import static kubatech.api.enums.ItemList.BlackTeaLeaf; @@ -82,29 +82,29 @@ import net.minecraftforge.fluids.FluidRegistry; import cpw.mods.fml.common.registry.GameRegistry; import forestry.plugins.PluginCore; -import gregtech.api.enums.GT_Values; +import gregtech.api.enums.GTValues; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.enums.TierEU; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTUtility; import ic2.core.Ic2Items; import kubatech.api.enums.ItemList; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_DEFusionCrafter; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeEntityCrusher; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_MegaIndustrialApiary; +import kubatech.tileentity.gregtech.multiblock.MTEDEFusionCrafter; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeEntityCrusher; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse; +import kubatech.tileentity.gregtech.multiblock.MTEMegaIndustrialApiary; public class RecipeLoader { - protected static final long bitsd = GT_ModHandler.RecipeBits.NOT_REMOVABLE | GT_ModHandler.RecipeBits.REVERSIBLE - | GT_ModHandler.RecipeBits.BUFFERED - | GT_ModHandler.RecipeBits.DISMANTLEABLE; + protected static final long bitsd = GTModHandler.RecipeBits.NOT_REMOVABLE | GTModHandler.RecipeBits.REVERSIBLE + | GTModHandler.RecipeBits.BUFFERED + | GTModHandler.RecipeBits.DISMANTLEABLE; public static void registerMTEs() { if (MobsInfo.isModLoaded() && EnderIO.isModLoaded()) { ExtremeEntityCrusher.set( - new GT_MetaTileEntity_ExtremeEntityCrusher( + new MTEExtremeEntityCrusher( ExtremeEntityCrusherController.ID, "multimachine.entitycrusher", "Extreme Entity Crusher").getStackForm(1)); @@ -112,21 +112,21 @@ public class RecipeLoader { if (Forestry.isModLoaded()) { ExtremeIndustrialApiary.set( - new GT_MetaTileEntity_MegaIndustrialApiary( + new MTEMegaIndustrialApiary( ExtremeIndustrialApiaryController.ID, "multimachine.extremeapiary", "Industrial Apicultural Acclimatiser and Drone Domestication Station").getStackForm(1)); } ExtremeIndustrialGreenhouse.set( - new GT_MetaTileEntity_ExtremeIndustrialGreenhouse( + new MTEExtremeIndustrialGreenhouse( ExtremeIndustrialGreenhouseController.ID, "multimachine.extremegreenhouse", "Extreme Industrial Greenhouse").getStackForm(1)); if (DraconicEvolution.isModLoaded()) { DraconicEvolutionFusionCrafter.set( - new GT_MetaTileEntity_DEFusionCrafter( + new MTEDEFusionCrafter( DraconicEvolutionFusionCrafterController.ID, "multimachine.defusioncrafter", "Draconic Evolution Fusion Crafter").getStackForm(1)); @@ -136,16 +136,16 @@ public class RecipeLoader { public static void addRecipes() { if (MobsInfo.isModLoaded() && EnderIO.isModLoaded()) { - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( ItemList.ExtremeEntityCrusher.get(1), bitsd, new Object[] { "RCR", "CHC", "VVV", 'R', gregtech.api.enums.ItemList.Robot_Arm_EV, 'C', OrePrefixes.circuit.get(Materials.EV), 'H', gregtech.api.enums.ItemList.Hull_EV, 'V', - GT_ModHandler.getModItem(OpenBlocks.ID, "vacuumhopper", 1, new ItemStack(Blocks.hopper)) }); + GTModHandler.getModItem(OpenBlocks.ID, "vacuumhopper", 1, new ItemStack(Blocks.hopper)) }); } if (Forestry.isModLoaded()) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, gregtech.api.enums.ItemList.Machine_IndustrialApiary.get(1)) .metadata(RESEARCH_TIME, 8 * MINUTES + 20 * SECONDS) .itemInputs( @@ -165,21 +165,20 @@ public class RecipeLoader { .duration(5 * MINUTES) .addTo(AssemblyLine); - GT_MetaTileEntity_ExtremeIndustrialGreenhouse - .addFertilizerItem(PluginCore.items.fertilizerCompound.getItemStack(1)); + MTEExtremeIndustrialGreenhouse.addFertilizerItem(PluginCore.items.fertilizerCompound.getItemStack(1)); } - GT_ModHandler.addCraftingRecipe( + GTModHandler.addCraftingRecipe( ExtremeIndustrialGreenhouse.get(1), bitsd, new Object[] { "AZA", "BRB", "AZA", 'B', gregtech.api.enums.ItemList.Casing_CleanStainlessSteel, 'R', - GT_ModHandler.getModItem(EnderIO.ID, "blockFarmStation", 1, new ItemStack(Items.diamond_hoe)), 'A', + GTModHandler.getModItem(EnderIO.ID, "blockFarmStation", 1, new ItemStack(Items.diamond_hoe)), 'A', gregtech.api.enums.ItemList.AcceleratorIV.get(1), 'Z', OrePrefixes.circuit.get(Materials.ZPM) }); // Vanilla should always be loaded - GT_MetaTileEntity_ExtremeIndustrialGreenhouse.addFertilizerItem(new ItemStack(Items.dye, 1, 15)); + MTEExtremeIndustrialGreenhouse.addFertilizerItem(new ItemStack(Items.dye, 1, 15)); // IC2 should always be loaded - GT_MetaTileEntity_ExtremeIndustrialGreenhouse.addFertilizerItem(Ic2Items.fertilizer); + MTEExtremeIndustrialGreenhouse.addFertilizerItem(Ic2Items.fertilizer); if (DraconicEvolution.isModLoaded()) { // Controller recipe added in TecTech @@ -199,21 +198,21 @@ public class RecipeLoader { private static void RegisterTeaLine() { // TEA LINE // if (PamsHarvestCraft.isModLoaded()) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(GameRegistry.findItemStack("harvestcraft", "tealeafItem", 1)) .itemOutputs(TeaLeafDehydrated.get(1)) .eut(TierEU.RECIPE_LV) .duration(5 * SECONDS) .addTo(chemicalDehydratorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(TeaLeafDehydrated.get(1)) .itemOutputs(WhiteTeaLeaf.get(1)) .eut(TierEU.RECIPE_LV) .duration(5 * SECONDS) .addTo(chemicalDehydratorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(TeaLeafDehydrated.get(1)) .itemOutputs(SteamedTeaLeaf.get(1)) .fluidInputs(FluidRegistry.getFluidStack("water", 50)) @@ -221,70 +220,70 @@ public class RecipeLoader { .duration(5 * SECONDS) .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(SteamedTeaLeaf.get(1)) .itemOutputs(YellowTeaLeaf.get(1)) .eut(TierEU.RECIPE_LV) .duration(5 * SECONDS) .addTo(chemicalDehydratorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(TeaLeafDehydrated.get(1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(TeaLeafDehydrated.get(1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(RolledTeaLeaf.get(1)) .eut(TierEU.RECIPE_LV) .duration(5 * SECONDS) .addTo(benderRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(RolledTeaLeaf.get(1)) .itemOutputs(GreenTeaLeaf.get(1)) .eut(TierEU.RECIPE_LV) .duration(5 * SECONDS) .addTo(chemicalDehydratorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(RolledTeaLeaf.get(1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(RolledTeaLeaf.get(1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(OxidizedTeaLeaf.get(1)) .eut(TierEU.RECIPE_LV) .duration(5 * SECONDS) .addTo(UniversalChemical); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(OxidizedTeaLeaf.get(1)) .itemOutputs(BlackTeaLeaf.get(1)) .eut(TierEU.RECIPE_LV) .duration(5 * SECONDS) .addTo(chemicalDehydratorRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(RolledTeaLeaf.get(1), GT_Utility.getIntegratedCircuit(2)) + GTValues.RA.stdBuilder() + .itemInputs(RolledTeaLeaf.get(1), GTUtility.getIntegratedCircuit(2)) .itemOutputs(FermentedTeaLeaf.get(1)) .eut(TierEU.RECIPE_LV) .duration(10 * SECONDS) .addTo(UniversalChemical); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(FermentedTeaLeaf.get(1)) .itemOutputs(PuerhTeaLeaf.get(1)) .eut(TierEU.RECIPE_LV) .duration(5 * SECONDS) .addTo(chemicalDehydratorRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(TeaLeafDehydrated.get(1)) .itemOutputs(BruisedTeaLeaf.get(1)) .eut(TierEU.RECIPE_LV) .duration(5 * SECONDS) .addTo(cutterRecipes); - GT_Values.RA.stdBuilder() - .itemInputs(BruisedTeaLeaf.get(1), GT_Utility.getIntegratedCircuit(1)) + GTValues.RA.stdBuilder() + .itemInputs(BruisedTeaLeaf.get(1), GTUtility.getIntegratedCircuit(1)) .itemOutputs(PartiallyOxidizedTeaLeaf.get(1)) .eut(TierEU.RECIPE_LV) .duration(2 * SECONDS + 10 * TICKS) .addTo(UniversalChemical); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(PartiallyOxidizedTeaLeaf.get(1)) .itemOutputs(OolongTeaLeaf.get(1)) .eut(TierEU.RECIPE_LV) @@ -294,7 +293,7 @@ public class RecipeLoader { // Tea Assembly GameRegistry.addSmelting(BlackTeaLeaf.get(1), BlackTea.get(1), 10); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(BlackTea.get(1), GameRegistry.findItemStack("harvestcraft", "limejuiceItem", 1)) .itemOutputs(EarlGrayTea.get(1)) .eut(TierEU.RECIPE_LV) @@ -303,7 +302,7 @@ public class RecipeLoader { GameRegistry.addSmelting(GreenTeaLeaf.get(1), GreenTea.get(1), 10); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(BlackTea.get(1)) .itemOutputs(LemonTea.get(1)) .fluidInputs(FluidRegistry.getFluidStack("potion.lemonjuice", 1000)) @@ -311,7 +310,7 @@ public class RecipeLoader { .duration(5 * SECONDS) .addTo(mixerRecipes); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(BlackTea.get(1)) .itemOutputs(MilkTea.get(1)) .fluidInputs(FluidRegistry.getFluidStack("milk", 1000)) @@ -321,7 +320,7 @@ public class RecipeLoader { GameRegistry.addSmelting(OolongTeaLeaf.get(1), OolongTea.get(1), 10); - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .itemInputs(GameRegistry.findItemStack("harvestcraft", "peppermintItem", 1)) .itemOutputs(PeppermintTea.get(1)) .fluidInputs(FluidRegistry.getFluidStack("water", 1000)) @@ -334,7 +333,7 @@ public class RecipeLoader { GameRegistry.addSmelting(YellowTeaLeaf.get(1), YellowTea.get(1), 10); } if (Avaritia.isModLoaded() && NewHorizonsCoreMod.isModLoaded()) { - GT_Values.RA.stdBuilder() + GTValues.RA.stdBuilder() .metadata(RESEARCH_ITEM, TeaAcceptorResearchNote.get(1)) .metadata(RESEARCH_TIME, 8 * MINUTES + 20 * SECONDS) .itemInputs( diff --git a/src/main/java/kubatech/loaders/TCLoader.java b/src/main/java/kubatech/loaders/TCLoader.java index f6ff1cac9f..500dab7f3e 100644 --- a/src/main/java/kubatech/loaders/TCLoader.java +++ b/src/main/java/kubatech/loaders/TCLoader.java @@ -36,7 +36,7 @@ import com.kuba6000.mobsinfo.api.utils.ItemID; import cpw.mods.fml.common.registry.GameRegistry; import kubatech.api.enums.ItemList; -import kubatech.loaders.item.items.TeaUltimate; +import kubatech.loaders.item.items.ItemTeaUltimate; import thaumcraft.api.ThaumcraftApi; import thaumcraft.api.ThaumcraftApiHelper; import thaumcraft.api.aspects.Aspect; @@ -135,14 +135,14 @@ public class TCLoader { @Override public String getName() { - return TeaUltimate.getUltimateTeaDisplayName(super.getName()); + return ItemTeaUltimate.getUltimateTeaDisplayName(super.getName()); } }; ultimateTeaResearch.setPages(new ResearchPage("KT.research.ultimatetea") { @Override public String getTranslatedText() { - return TeaUltimate.getUltimateTeaDisplayName(super.getTranslatedText()); + return ItemTeaUltimate.getUltimateTeaDisplayName(super.getTranslatedText()); } }, new ResearchPage(ultimateTeaRecipe)); ultimateTeaResearch.setParents("INFUSION", "DEZILSMARSHMALLOW"); diff --git a/src/main/java/kubatech/loaders/block/defc/BlockDEFCCasing.java b/src/main/java/kubatech/loaders/block/defc/BlockDEFCCasing.java new file mode 100644 index 0000000000..6c57cf8821 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/defc/BlockDEFCCasing.java @@ -0,0 +1,63 @@ +package kubatech.loaders.block.defc; + +import static kubatech.kubatech.KT; + +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.BlockCasingsAbstract; +import kubatech.Tags; +import kubatech.api.enums.ItemList; + +public class BlockDEFCCasing extends BlockCasingsAbstract { + + @SideOnly(Side.CLIENT) + private IIcon[] texture; + + public BlockDEFCCasing() { + super(ItemBlockDEFCCasing.class, "defc.casing", Material.anvil); + this.setHardness(15.0F); + this.setResistance(30.0F); + this.setCreativeTab(KT); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Naquadah Alloy Fusion Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Bloody Ichorium Fusion Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Draconium Fusion Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Wyvern Fusion Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Awakened Draconium Fusion Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Chaotic Fusion Casing"); + + ItemList.DEFCCasingBase.set(new ItemStack(this, 1, 7)); + ItemList.DEFCCasingT1.set(new ItemStack(this, 1, 8)); + ItemList.DEFCCasingT2.set(new ItemStack(this, 1, 9)); + ItemList.DEFCCasingT3.set(new ItemStack(this, 1, 10)); + ItemList.DEFCCasingT4.set(new ItemStack(this, 1, 11)); + ItemList.DEFCCasingT5.set(new ItemStack(this, 1, 12)); + + // Taking one texture slot :P + Textures.BlockIcons.setCasingTexture((byte) 1, (byte) (15 + 48), TextureFactory.of(this, 0)); + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(int side, int meta) { + if (meta < 7 || meta > 12) return texture[0]; + return texture[meta - 7]; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister aIconRegister) { + texture = new IIcon[6]; + for (int i = 0; i < texture.length; i++) { + texture[i] = aIconRegister.registerIcon(Tags.MODID + ":casing/defc_" + i); + } + } +} diff --git a/src/main/java/kubatech/loaders/block/defc/DEFCCasingBlock.java b/src/main/java/kubatech/loaders/block/defc/DEFCCasingBlock.java deleted file mode 100644 index 5a6b95acfe..0000000000 --- a/src/main/java/kubatech/loaders/block/defc/DEFCCasingBlock.java +++ /dev/null @@ -1,63 +0,0 @@ -package kubatech.loaders.block.defc; - -import static kubatech.kubatech.KT; - -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.enums.Textures; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_LanguageManager; -import gregtech.common.blocks.GT_Block_Casings_Abstract; -import kubatech.Tags; -import kubatech.api.enums.ItemList; - -public class DEFCCasingBlock extends GT_Block_Casings_Abstract { - - @SideOnly(Side.CLIENT) - private IIcon[] texture; - - public DEFCCasingBlock() { - super(DEFCCasingItemBlock.class, "defc.casing", Material.anvil); - this.setHardness(15.0F); - this.setResistance(30.0F); - this.setCreativeTab(KT); - - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Naquadah Alloy Fusion Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Bloody Ichorium Fusion Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Draconium Fusion Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Wyvern Fusion Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Awakened Draconium Fusion Casing"); - GT_LanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Chaotic Fusion Casing"); - - ItemList.DEFCCasingBase.set(new ItemStack(this, 1, 7)); - ItemList.DEFCCasingT1.set(new ItemStack(this, 1, 8)); - ItemList.DEFCCasingT2.set(new ItemStack(this, 1, 9)); - ItemList.DEFCCasingT3.set(new ItemStack(this, 1, 10)); - ItemList.DEFCCasingT4.set(new ItemStack(this, 1, 11)); - ItemList.DEFCCasingT5.set(new ItemStack(this, 1, 12)); - - // Taking one texture slot :P - Textures.BlockIcons.setCasingTexture((byte) 1, (byte) (15 + 48), TextureFactory.of(this, 0)); - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - if (meta < 7 || meta > 12) return texture[0]; - return texture[meta - 7]; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister aIconRegister) { - texture = new IIcon[6]; - for (int i = 0; i < texture.length; i++) { - texture[i] = aIconRegister.registerIcon(Tags.MODID + ":casing/defc_" + i); - } - } -} diff --git a/src/main/java/kubatech/loaders/block/defc/DEFCCasingItemBlock.java b/src/main/java/kubatech/loaders/block/defc/DEFCCasingItemBlock.java deleted file mode 100644 index 669e3a6dc8..0000000000 --- a/src/main/java/kubatech/loaders/block/defc/DEFCCasingItemBlock.java +++ /dev/null @@ -1,36 +0,0 @@ -package kubatech.loaders.block.defc; - -import static kubatech.kubatech.KT; - -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; -import net.minecraft.util.StatCollector; - -import gregtech.common.blocks.GT_Item_Casings_Abstract; - -public class DEFCCasingItemBlock extends GT_Item_Casings_Abstract { - - public DEFCCasingItemBlock(Block block) { - super(block); - this.setMaxDamage(0); - this.setHasSubtypes(true); - this.setCreativeTab(KT); - } - - @Override - @SuppressWarnings("unchecked") - public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { - if (getDamage(aStack) > 7) - aList.add(StatCollector.translateToLocalFormatted("defc.casing.tip", getDamage(aStack) - 7)); - super.addInformation(aStack, aPlayer, aList, aF3_H); - } - - @Override - public IIcon getIconFromDamage(int p_77617_1_) { - return this.field_150939_a.getIcon(0, p_77617_1_); - } -} diff --git a/src/main/java/kubatech/loaders/block/defc/ItemBlockDEFCCasing.java b/src/main/java/kubatech/loaders/block/defc/ItemBlockDEFCCasing.java new file mode 100644 index 0000000000..125bb7091f --- /dev/null +++ b/src/main/java/kubatech/loaders/block/defc/ItemBlockDEFCCasing.java @@ -0,0 +1,36 @@ +package kubatech.loaders.block.defc; + +import static kubatech.kubatech.KT; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; + +import gregtech.common.blocks.ItemCasingsAbstract; + +public class ItemBlockDEFCCasing extends ItemCasingsAbstract { + + public ItemBlockDEFCCasing(Block block) { + super(block); + this.setMaxDamage(0); + this.setHasSubtypes(true); + this.setCreativeTab(KT); + } + + @Override + @SuppressWarnings("unchecked") + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + if (getDamage(aStack) > 7) + aList.add(StatCollector.translateToLocalFormatted("defc.casing.tip", getDamage(aStack) - 7)); + super.addInformation(aStack, aPlayer, aList, aF3_H); + } + + @Override + public IIcon getIconFromDamage(int p_77617_1_) { + return this.field_150939_a.getIcon(0, p_77617_1_); + } +} diff --git a/src/main/java/kubatech/loaders/block/kubablock/blocks/BlockTeaAcceptor.java b/src/main/java/kubatech/loaders/block/kubablock/blocks/BlockTeaAcceptor.java new file mode 100644 index 0000000000..2787a2bbb1 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/kubablock/blocks/BlockTeaAcceptor.java @@ -0,0 +1,64 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2024 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.block.kubablock.blocks; + +import java.util.List; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import kubatech.loaders.block.kubablock.BlockProxy; +import kubatech.loaders.block.kubablock.IProxyTileEntityProvider; +import kubatech.tileentity.TeaAcceptorTile; + +public class BlockTeaAcceptor extends BlockProxy implements IProxyTileEntityProvider { + + public BlockTeaAcceptor() { + super("tea_acceptor", "tea_acceptor", "blank"); + } + + @Override + public TileEntity createTileEntity(World world) { + return new TeaAcceptorTile(); + } + + @Override + public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + if (world.isRemote) return; + if (!(player instanceof EntityPlayerMP)) return; + ((TeaAcceptorTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getPersistentID()); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { + tooltipList.add("Accepts Tea items and adds them to your network"); + tooltipList.add("Can accept up to 10 stacks per tick"); + } + + @Override + public float getResistance() { + return 999999999999.f; + } +} diff --git a/src/main/java/kubatech/loaders/block/kubablock/blocks/BlockTeaStorage.java b/src/main/java/kubatech/loaders/block/kubablock/blocks/BlockTeaStorage.java new file mode 100644 index 0000000000..421ceaa0d2 --- /dev/null +++ b/src/main/java/kubatech/loaders/block/kubablock/blocks/BlockTeaStorage.java @@ -0,0 +1,66 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2024 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.block.kubablock.blocks; + +import static kubatech.api.Variables.numberFormat; + +import java.util.List; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import kubatech.loaders.block.kubablock.BlockProxy; +import kubatech.loaders.block.kubablock.IProxyTileEntityProvider; +import kubatech.tileentity.TeaStorageTile; + +public class BlockTeaStorage extends BlockProxy implements IProxyTileEntityProvider { + + public BlockTeaStorage() { + super("tea_storage", "tea_storage"); + } + + @Override + public TileEntity createTileEntity(World world) { + return new TeaStorageTile(); + } + + @Override + public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { + if (world.isRemote) return; + if (!(player instanceof EntityPlayerMP)) return; + ((TeaStorageTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getPersistentID()); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { + tooltipList.add("Extends Tea Storage by " + EnumChatFormatting.RED + numberFormat.format(Long.MAX_VALUE)); + } + + @Override + public float getResistance() { + return 999999999999.f; + } +} diff --git a/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaAcceptor.java b/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaAcceptor.java deleted file mode 100644 index 06ee3490b1..0000000000 --- a/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaAcceptor.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2024 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.block.kubablock.blocks; - -import java.util.List; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; - -import kubatech.loaders.block.kubablock.BlockProxy; -import kubatech.loaders.block.kubablock.IProxyTileEntityProvider; -import kubatech.tileentity.TeaAcceptorTile; - -public class TeaAcceptor extends BlockProxy implements IProxyTileEntityProvider { - - public TeaAcceptor() { - super("tea_acceptor", "tea_acceptor", "blank"); - } - - @Override - public TileEntity createTileEntity(World world) { - return new TeaAcceptorTile(); - } - - @Override - public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { - if (world.isRemote) return; - if (!(player instanceof EntityPlayerMP)) return; - ((TeaAcceptorTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getPersistentID()); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { - tooltipList.add("Accepts Tea items and adds them to your network"); - tooltipList.add("Can accept up to 10 stacks per tick"); - } - - @Override - public float getResistance() { - return 999999999999.f; - } -} diff --git a/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaStorage.java b/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaStorage.java deleted file mode 100644 index 436af9a4e2..0000000000 --- a/src/main/java/kubatech/loaders/block/kubablock/blocks/TeaStorage.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2024 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.block.kubablock.blocks; - -import static kubatech.api.Variables.numberFormat; - -import java.util.List; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; - -import kubatech.loaders.block.kubablock.BlockProxy; -import kubatech.loaders.block.kubablock.IProxyTileEntityProvider; -import kubatech.tileentity.TeaStorageTile; - -public class TeaStorage extends BlockProxy implements IProxyTileEntityProvider { - - public TeaStorage() { - super("tea_storage", "tea_storage"); - } - - @Override - public TileEntity createTileEntity(World world) { - return new TeaStorageTile(); - } - - @Override - public void onBlockPlaced(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { - if (world.isRemote) return; - if (!(player instanceof EntityPlayerMP)) return; - ((TeaStorageTile) world.getTileEntity(x, y, z)).setTeaOwner(player.getPersistentID()); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { - tooltipList.add("Extends Tea Storage by " + EnumChatFormatting.RED + numberFormat.format(Long.MAX_VALUE)); - } - - @Override - public float getResistance() { - return 999999999999.f; - } -} diff --git a/src/main/java/kubatech/loaders/item/items/ItemTea.java b/src/main/java/kubatech/loaders/item/items/ItemTea.java new file mode 100644 index 0000000000..5beb813053 --- /dev/null +++ b/src/main/java/kubatech/loaders/item/items/ItemTea.java @@ -0,0 +1,72 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2024 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.item.items; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import kubatech.loaders.item.ItemProxy; + +public class ItemTea extends ItemProxy { + + private final int heal; + private final float saturation; + + public ItemTea(String unlocalizedName, int heal, float saturation) { + super("tea." + unlocalizedName, "tea/" + unlocalizedName); + this.heal = heal; + this.saturation = saturation; + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { + tooltipList.add("Tea"); + } + + @Override + public EnumAction getItemUseAction(ItemStack stack) { + return EnumAction.drink; + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer entity) { + entity.setItemInUse(stack, getMaxItemUseDuration()); + return stack; + } + + @Override + public ItemStack onEaten(ItemStack stack, World world, EntityPlayer entity) { + if (!entity.capabilities.isCreativeMode) --stack.stackSize; + entity.getFoodStats() + .addStats(heal, saturation); + world.playSoundAtEntity(entity, "random.burp", 0.5F, world.rand.nextFloat() * 0.1F + 0.9F); + return stack; + } + + @Override + public int getMaxItemUseDuration() { + return 32; + } +} diff --git a/src/main/java/kubatech/loaders/item/items/ItemTeaCollection.java b/src/main/java/kubatech/loaders/item/items/ItemTeaCollection.java new file mode 100644 index 0000000000..6b18342462 --- /dev/null +++ b/src/main/java/kubatech/loaders/item/items/ItemTeaCollection.java @@ -0,0 +1,209 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2024 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.item.items; + +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.EnumAction; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagString; +import net.minecraft.stats.Achievement; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.AchievementPage; + +import kubatech.api.utils.ModUtils; +import kubatech.loaders.ItemLoader; +import kubatech.loaders.item.ItemProxy; + +public class ItemTeaCollection extends ItemProxy { + + protected static TeaPage teapage; + protected static LinkedList achievements; + protected Achievement achievement; + private final String achievementname; + + public ItemTeaCollection(String unlocalizedName) { + super("teacollection." + unlocalizedName, "tea/" + unlocalizedName); + achievementname = "teacollection." + unlocalizedName; + } + + private static final int[][] achievement_poses = new int[][] { { 0, 0 }, { 2, 0 }, { 3, 1 }, { 4, 2 }, { 4, 4 }, + { 3, 5 }, { 2, 6 }, { 0, 6 }, { -1, 5 }, { -2, 4 }, { -2, 2 }, { -1, 1 }, { 1, 3 } }; + + boolean checkTeaOwner(ItemStack stack, UUID player) { + NBTTagCompound tag = stack.stackTagCompound; + if (tag == null || !stack.stackTagCompound.hasKey("TeaOwnerUUID")) return true; + return stack.stackTagCompound.getString("TeaOwnerUUID") + .equals(player.toString()); + } + + boolean checkTeaOwner(ItemStack stack, String player) { + NBTTagCompound tag = stack.stackTagCompound; + if (tag == null || !stack.stackTagCompound.hasKey("TeaOwner")) return true; + return stack.stackTagCompound.getString("TeaOwner") + .equals(player); + } + + private boolean checkOrSetTeaOwner(ItemStack stack, EntityPlayer player) { + NBTTagCompound tag = stack.stackTagCompound; + if (tag == null || !stack.stackTagCompound.hasKey("TeaOwnerUUID")) { + stack.setTagInfo( + "TeaOwnerUUID", + new NBTTagString( + player.getPersistentID() + .toString())); + stack.setTagInfo("TeaOwner", new NBTTagString(player.getCommandSenderName())); + return true; + } + if (stack.stackTagCompound.getString("TeaOwnerUUID") + .equals( + player.getPersistentID() + .toString())) { + stack.setTagInfo("TeaOwner", new NBTTagString(player.getCommandSenderName())); + return true; + } else return false; + } + + @Override + public void ItemInit(int index) { + super.ItemInit(index); + if (teapage == null) { + teapage = new TeaPage(); + AchievementPage.registerAchievementPage(teapage); + achievements = teapage.getAchievementsOriginal(); + } + achievements.add( + achievement = new Achievement( + achievementname, + achievementname, + achievement_poses[index][0], + achievement_poses[index][1], + new ItemStack(ItemLoader.kubaitems, 1, index), + null).registerStat()); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { + if (!checkTeaOwner(stack, entity.getCommandSenderName())) { + tooltipList.add( + EnumChatFormatting.GRAY + "" + + EnumChatFormatting.BOLD + + "" + + EnumChatFormatting.ITALIC + + StatCollector.translateToLocal("kubaitem.notyours")); + return; + } + tooltipList.add(EnumChatFormatting.GRAY + StatCollector.translateToLocal("kubaitem.fromcollection")); + tooltipList.add( + EnumChatFormatting.GRAY + "" + + EnumChatFormatting.BOLD + + "" + + EnumChatFormatting.ITALIC + + "" + + EnumChatFormatting.UNDERLINE + + StatCollector.translateToLocal("kubaitem.teacollection")); + } + + @Override + public EnumAction getItemUseAction(ItemStack stack) { + return EnumAction.drink; + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer entity) { + if (!checkTeaOwner(stack, entity.getCommandSenderName())) return stack; + entity.setItemInUse(stack, 32); + return stack; + } + + @Override + public ItemStack onEaten(ItemStack stack, World world, EntityPlayer entity) { + if (world.isRemote) return stack; + if (!(entity instanceof EntityPlayerMP)) return stack; + entity.addChatComponentMessage( + new ChatComponentText( + EnumChatFormatting.GREEN + StatCollector.translateToLocal("kubaitem.teacollection.mmm"))); + entity.triggerAchievement(achievement); + return stack; + } + + @Override + public int getMaxItemUseDuration() { + return 32; + } + + @Override + public String getDisplayName(ItemStack stack) { + if (!ModUtils.isClientSided || Minecraft.getMinecraft().thePlayer == null) { + return super.getDisplayName(stack); + } + // UUID is different on client if in offline mode I think + if (checkTeaOwner(stack, Minecraft.getMinecraft().thePlayer.getCommandSenderName())) { + return super.getDisplayName(stack); + } + return EnumChatFormatting.GOLD + "" + EnumChatFormatting.BOLD + "" + EnumChatFormatting.ITALIC + "???????"; + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isCurrentItem) { + if (world.isRemote) return; + if (!(entity instanceof EntityPlayerMP)) return; + checkOrSetTeaOwner(stack, (EntityPlayer) entity); + NBTTagCompound tag = stack.stackTagCompound; + if (tag.hasKey("display")) tag.removeTag("display"); + } + + private static class TeaPage extends AchievementPage { + + public TeaPage() { + super("Tea"); + } + + final LinkedList unlockedAchievements = new LinkedList<>(); + + @Override + public List getAchievements() { + if (!ModUtils.isClientSided) return super.getAchievements(); + + if (new Throwable().getStackTrace()[1].getMethodName() + .equals("isAchievementInPages")) return super.getAchievements(); // 5HEAD FIX + + unlockedAchievements.clear(); + for (Achievement achievement : achievements) if (Minecraft.getMinecraft().thePlayer.getStatFileWriter() + .hasAchievementUnlocked(achievement)) unlockedAchievements.add(achievement); + return unlockedAchievements; + } + + private LinkedList getAchievementsOriginal() { + return (LinkedList) super.getAchievements(); + } + } +} diff --git a/src/main/java/kubatech/loaders/item/items/ItemTeaIngredient.java b/src/main/java/kubatech/loaders/item/items/ItemTeaIngredient.java new file mode 100644 index 0000000000..08dc460d30 --- /dev/null +++ b/src/main/java/kubatech/loaders/item/items/ItemTeaIngredient.java @@ -0,0 +1,41 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2024 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.item.items; + +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import kubatech.loaders.item.ItemProxy; + +public class ItemTeaIngredient extends ItemProxy { + + public ItemTeaIngredient(String unlocalizedName) { + super("teaingredient." + unlocalizedName, "teaingredient/" + unlocalizedName); + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { + tooltipList.add(EnumChatFormatting.GRAY + "This is Tea ingredient"); + } +} diff --git a/src/main/java/kubatech/loaders/item/items/ItemTeaUltimate.java b/src/main/java/kubatech/loaders/item/items/ItemTeaUltimate.java new file mode 100644 index 0000000000..d6df893cd6 --- /dev/null +++ b/src/main/java/kubatech/loaders/item/items/ItemTeaUltimate.java @@ -0,0 +1,216 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2024 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.loaders.item.items; + +import static kubatech.api.Variables.numberFormat; +import static kubatech.api.Variables.numberFormatScientific; + +import java.math.BigInteger; +import java.text.NumberFormat; +import java.util.concurrent.atomic.AtomicReference; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicTextWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; +import com.gtnewhorizons.modularui.common.widget.TabButton; +import com.gtnewhorizons.modularui.common.widget.TabContainer; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import codechicken.nei.NEIClientUtils; +import kubatech.api.enums.ItemList; +import kubatech.api.tea.TeaNetwork; +import kubatech.api.utils.ModUtils; +import kubatech.api.utils.StringUtils; +import kubatech.loaders.item.IItemProxyGUI; + +public class ItemTeaUltimate extends ItemTeaCollection implements IItemProxyGUI { + + public ItemTeaUltimate() { + super("ultimate_tea"); + } + + private static String name = ""; + private static long timeCounter = 0; + private static int colorCounter = 0; + + public static String getUltimateTeaDisplayName(String displayName) { + long current = System.currentTimeMillis(); + if (current - timeCounter > 100) { + timeCounter = current; + name = StringUtils.applyRainbow( + "ULTIMATE", + colorCounter++, + EnumChatFormatting.BOLD.toString() + EnumChatFormatting.OBFUSCATED); + } + return String.format(displayName, name + EnumChatFormatting.RESET); + } + + @Override + public String getDisplayName(ItemStack stack) { + if (!ModUtils.isClientSided || Minecraft.getMinecraft().thePlayer == null) return super.getDisplayName(stack); + if (checkTeaOwner(stack, Minecraft.getMinecraft().thePlayer.getCommandSenderName())) { + return getUltimateTeaDisplayName(super.getDisplayName(stack)); + } + return EnumChatFormatting.GOLD + "" + EnumChatFormatting.BOLD + "" + EnumChatFormatting.ITALIC + "???????"; + } + + @Override + public ModularWindow createWindow(ItemStack stack, EntityPlayer player) { + ModularWindow.Builder builder = ModularWindow.builder(200, 150); + builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); + final TeaNetwork teaNetwork = TeaNetwork.getNetwork(player.getPersistentID()); + IDrawable tab1 = new ItemDrawable(ItemList.LegendaryUltimateTea.get(1)).withFixedSize(18, 18, 4, 6); + IDrawable tab2 = new ItemDrawable(new ItemStack(Blocks.crafting_table)).withFixedSize(18, 18, 4, 6); + IDrawable tab3 = new ItemDrawable(new ItemStack(Items.golden_apple)).withFixedSize(18, 18, 4, 6); + AtomicReference teaAmount = new AtomicReference<>(BigInteger.ZERO); + AtomicReference teaLimit = new AtomicReference<>(BigInteger.ZERO); + builder.widget( + new TabContainer().setButtonSize(28, 32) + .addTabButton( + new TabButton(0) + .setBackground(false, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0, 1f, 0.5f), tab1) + .setBackground(true, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0.5f, 1f, 1f), tab1) + .setPos(0, -28)) + .addTabButton( + new TabButton(1) + .setBackground(false, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0, 1f, 0.5f), tab2) + .setBackground(true, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0.5f, 1f, 1f), tab2) + .setPos(28, -28)) + .addTabButton( + new TabButton(2) + .setBackground(false, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0, 1f, 0.5f), tab3) + .setBackground(true, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0.5f, 1f, 1f), tab3) + .setPos(56, -28)) + .addPage( + new MultiChildWidget().addChild( + new TextWidget( + new Text("STATUS").format(EnumChatFormatting.BOLD) + .format(EnumChatFormatting.GOLD) + .shadow()).setPos(10, 5)) + .addChild( + new DynamicTextWidget( + () -> new Text( + "Tea: " + (NEIClientUtils.shiftKey() ? numberFormat.format(teaAmount.get()) + : numberFormatScientific.format(teaAmount.get()))).color(Color.GREEN.dark(3))) + .setSynced(false) + .setPos(20, 20) + .attachSyncer( + new FakeSyncWidget.BigIntegerSyncer( + () -> teaNetwork.teaAmount, + teaAmount::set), + builder)) + .addChild( + new DynamicTextWidget( + () -> new Text( + "Tea limit: " + (NEIClientUtils.shiftKey() ? numberFormat.format(teaLimit.get()) + : numberFormatScientific.format(teaLimit.get()))).color(Color.GREEN.dark(3))) + .setSynced(false) + .setPos(20, 30) + .attachSyncer( + new FakeSyncWidget.BigIntegerSyncer( + () -> teaNetwork.teaLimit, + teaLimit::set), + builder))) + .addPage( + new MultiChildWidget().addChild( + new TextWidget( + new Text("EXCHANGE").format(EnumChatFormatting.BOLD) + .format(EnumChatFormatting.GOLD) + .shadow()).setPos(10, 5)) + .addChild(new ButtonWidget().setOnClick((Widget.ClickData clickData, Widget widget) -> { + if (!(player instanceof EntityPlayerMP)) return; + if (!teaNetwork.canAfford(50_000, true)) return; + if (player.inventory.addItemStackToInventory(ItemList.TeaAcceptorResearchNote.get(1))) + return; + player.entityDropItem(ItemList.TeaAcceptorResearchNote.get(1), 0.5f); + }) + .setBackground(new ItemDrawable().setItem(ItemList.TeaAcceptorResearchNote.get(1))) + .addTooltip("Tea Acceptor Research Note") + .addTooltip( + new Text( + "Cost: " + NumberFormat.getInstance() + .format(50_000) + " Tea").color(Color.GRAY.normal)) + .setPos(20, 20))) + .addPage( + new MultiChildWidget().addChild( + new TextWidget( + new Text("BENEFITS").format(EnumChatFormatting.BOLD) + .format(EnumChatFormatting.GOLD) + .shadow()).setPos(10, 5)) + /* + * .addChild(new ButtonWidget() .setOnClick((Widget.ClickData clickData, Widget widget) -> { if + * (!(player instanceof EntityPlayerMP)) return; if (playerData == null) return; + * playerData.autoRegen = !playerData.autoRegen; playerData.markDirty(); }) .setBackground(new + * ItemDrawable().setItem(new ItemStack(Items.potionitem, 1, 8193))) + * .addTooltip("Regeneration I") .addTooltip("For 1 minute") .addTooltip(new Text("Cost: " + + * NumberFormat.getInstance().format(75_000) + " Tea") .color(Color.GRAY.normal)) // + * .addTooltip( //Find a way to run that on server, or different approach // new + * Text("Autobuy: " + (playerData == null ? "ERROR" : playerData.autoRegen)) // + * .color(Color.GREY.normal)) .setPos(20, 20)) + */ )); + return builder.build(); + } + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer entity) { + if (world.isRemote) return stack; + if (!(entity instanceof EntityPlayerMP)) return stack; + if (!checkTeaOwner(stack, entity.getPersistentID())) return stack; + openHeldItemGUI(entity); + return stack; + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isCurrentItem) { + if (world.isRemote) return; + if (!(entity instanceof EntityPlayerMP)) return; + super.onUpdate(stack, world, entity, slot, isCurrentItem); + if (checkTeaOwner(stack, entity.getPersistentID())) { + TeaNetwork teaNetwork = TeaNetwork.getNetwork(entity.getPersistentID()); + teaNetwork.addTea(1); + + /* + * if (playerData.autoRegen && playerData.teaAmount > 75_000) { if (((EntityPlayerMP) + * entity).getActivePotionEffect(Potion.regeneration) == null) { ((EntityPlayerMP) + * entity).addPotionEffect(new PotionEffect(Potion.regeneration.id, 1200, 0, true)); playerData.teaAmount -= + * 75_000; } } + */ + } + } +} diff --git a/src/main/java/kubatech/loaders/item/items/Tea.java b/src/main/java/kubatech/loaders/item/items/Tea.java deleted file mode 100644 index f1b3ae3d0b..0000000000 --- a/src/main/java/kubatech/loaders/item/items/Tea.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2024 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.item.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; - -import kubatech.loaders.item.ItemProxy; - -public class Tea extends ItemProxy { - - private final int heal; - private final float saturation; - - public Tea(String unlocalizedName, int heal, float saturation) { - super("tea." + unlocalizedName, "tea/" + unlocalizedName); - this.heal = heal; - this.saturation = saturation; - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { - tooltipList.add("Tea"); - } - - @Override - public EnumAction getItemUseAction(ItemStack stack) { - return EnumAction.drink; - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer entity) { - entity.setItemInUse(stack, getMaxItemUseDuration()); - return stack; - } - - @Override - public ItemStack onEaten(ItemStack stack, World world, EntityPlayer entity) { - if (!entity.capabilities.isCreativeMode) --stack.stackSize; - entity.getFoodStats() - .addStats(heal, saturation); - world.playSoundAtEntity(entity, "random.burp", 0.5F, world.rand.nextFloat() * 0.1F + 0.9F); - return stack; - } - - @Override - public int getMaxItemUseDuration() { - return 32; - } -} diff --git a/src/main/java/kubatech/loaders/item/items/TeaCollection.java b/src/main/java/kubatech/loaders/item/items/TeaCollection.java deleted file mode 100644 index efa390c517..0000000000 --- a/src/main/java/kubatech/loaders/item/items/TeaCollection.java +++ /dev/null @@ -1,209 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2024 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.item.items; - -import java.util.LinkedList; -import java.util.List; -import java.util.UUID; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.EnumAction; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagString; -import net.minecraft.stats.Achievement; -import net.minecraft.util.ChatComponentText; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.StatCollector; -import net.minecraft.world.World; -import net.minecraftforge.common.AchievementPage; - -import kubatech.api.utils.ModUtils; -import kubatech.loaders.ItemLoader; -import kubatech.loaders.item.ItemProxy; - -public class TeaCollection extends ItemProxy { - - protected static TeaPage teapage; - protected static LinkedList achievements; - protected Achievement achievement; - private final String achievementname; - - public TeaCollection(String unlocalizedName) { - super("teacollection." + unlocalizedName, "tea/" + unlocalizedName); - achievementname = "teacollection." + unlocalizedName; - } - - private static final int[][] achievement_poses = new int[][] { { 0, 0 }, { 2, 0 }, { 3, 1 }, { 4, 2 }, { 4, 4 }, - { 3, 5 }, { 2, 6 }, { 0, 6 }, { -1, 5 }, { -2, 4 }, { -2, 2 }, { -1, 1 }, { 1, 3 } }; - - boolean checkTeaOwner(ItemStack stack, UUID player) { - NBTTagCompound tag = stack.stackTagCompound; - if (tag == null || !stack.stackTagCompound.hasKey("TeaOwnerUUID")) return true; - return stack.stackTagCompound.getString("TeaOwnerUUID") - .equals(player.toString()); - } - - boolean checkTeaOwner(ItemStack stack, String player) { - NBTTagCompound tag = stack.stackTagCompound; - if (tag == null || !stack.stackTagCompound.hasKey("TeaOwner")) return true; - return stack.stackTagCompound.getString("TeaOwner") - .equals(player); - } - - private boolean checkOrSetTeaOwner(ItemStack stack, EntityPlayer player) { - NBTTagCompound tag = stack.stackTagCompound; - if (tag == null || !stack.stackTagCompound.hasKey("TeaOwnerUUID")) { - stack.setTagInfo( - "TeaOwnerUUID", - new NBTTagString( - player.getPersistentID() - .toString())); - stack.setTagInfo("TeaOwner", new NBTTagString(player.getCommandSenderName())); - return true; - } - if (stack.stackTagCompound.getString("TeaOwnerUUID") - .equals( - player.getPersistentID() - .toString())) { - stack.setTagInfo("TeaOwner", new NBTTagString(player.getCommandSenderName())); - return true; - } else return false; - } - - @Override - public void ItemInit(int index) { - super.ItemInit(index); - if (teapage == null) { - teapage = new TeaPage(); - AchievementPage.registerAchievementPage(teapage); - achievements = teapage.getAchievementsOriginal(); - } - achievements.add( - achievement = new Achievement( - achievementname, - achievementname, - achievement_poses[index][0], - achievement_poses[index][1], - new ItemStack(ItemLoader.kubaitems, 1, index), - null).registerStat()); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { - if (!checkTeaOwner(stack, entity.getCommandSenderName())) { - tooltipList.add( - EnumChatFormatting.GRAY + "" - + EnumChatFormatting.BOLD - + "" - + EnumChatFormatting.ITALIC - + StatCollector.translateToLocal("kubaitem.notyours")); - return; - } - tooltipList.add(EnumChatFormatting.GRAY + StatCollector.translateToLocal("kubaitem.fromcollection")); - tooltipList.add( - EnumChatFormatting.GRAY + "" - + EnumChatFormatting.BOLD - + "" - + EnumChatFormatting.ITALIC - + "" - + EnumChatFormatting.UNDERLINE - + StatCollector.translateToLocal("kubaitem.teacollection")); - } - - @Override - public EnumAction getItemUseAction(ItemStack stack) { - return EnumAction.drink; - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer entity) { - if (!checkTeaOwner(stack, entity.getCommandSenderName())) return stack; - entity.setItemInUse(stack, 32); - return stack; - } - - @Override - public ItemStack onEaten(ItemStack stack, World world, EntityPlayer entity) { - if (world.isRemote) return stack; - if (!(entity instanceof EntityPlayerMP)) return stack; - entity.addChatComponentMessage( - new ChatComponentText( - EnumChatFormatting.GREEN + StatCollector.translateToLocal("kubaitem.teacollection.mmm"))); - entity.triggerAchievement(achievement); - return stack; - } - - @Override - public int getMaxItemUseDuration() { - return 32; - } - - @Override - public String getDisplayName(ItemStack stack) { - if (!ModUtils.isClientSided || Minecraft.getMinecraft().thePlayer == null) { - return super.getDisplayName(stack); - } - // UUID is different on client if in offline mode I think - if (checkTeaOwner(stack, Minecraft.getMinecraft().thePlayer.getCommandSenderName())) { - return super.getDisplayName(stack); - } - return EnumChatFormatting.GOLD + "" + EnumChatFormatting.BOLD + "" + EnumChatFormatting.ITALIC + "???????"; - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isCurrentItem) { - if (world.isRemote) return; - if (!(entity instanceof EntityPlayerMP)) return; - checkOrSetTeaOwner(stack, (EntityPlayer) entity); - NBTTagCompound tag = stack.stackTagCompound; - if (tag.hasKey("display")) tag.removeTag("display"); - } - - private static class TeaPage extends AchievementPage { - - public TeaPage() { - super("Tea"); - } - - final LinkedList unlockedAchievements = new LinkedList<>(); - - @Override - public List getAchievements() { - if (!ModUtils.isClientSided) return super.getAchievements(); - - if (new Throwable().getStackTrace()[1].getMethodName() - .equals("isAchievementInPages")) return super.getAchievements(); // 5HEAD FIX - - unlockedAchievements.clear(); - for (Achievement achievement : achievements) if (Minecraft.getMinecraft().thePlayer.getStatFileWriter() - .hasAchievementUnlocked(achievement)) unlockedAchievements.add(achievement); - return unlockedAchievements; - } - - private LinkedList getAchievementsOriginal() { - return (LinkedList) super.getAchievements(); - } - } -} diff --git a/src/main/java/kubatech/loaders/item/items/TeaIngredient.java b/src/main/java/kubatech/loaders/item/items/TeaIngredient.java deleted file mode 100644 index 4ff248ea37..0000000000 --- a/src/main/java/kubatech/loaders/item/items/TeaIngredient.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2024 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.item.items; - -import java.util.List; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; - -import kubatech.loaders.item.ItemProxy; - -public class TeaIngredient extends ItemProxy { - - public TeaIngredient(String unlocalizedName) { - super("teaingredient." + unlocalizedName, "teaingredient/" + unlocalizedName); - } - - @Override - public void addInformation(ItemStack stack, EntityPlayer entity, List tooltipList, boolean showDebugInfo) { - tooltipList.add(EnumChatFormatting.GRAY + "This is Tea ingredient"); - } -} diff --git a/src/main/java/kubatech/loaders/item/items/TeaUltimate.java b/src/main/java/kubatech/loaders/item/items/TeaUltimate.java deleted file mode 100644 index cee7eba132..0000000000 --- a/src/main/java/kubatech/loaders/item/items/TeaUltimate.java +++ /dev/null @@ -1,216 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2024 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.loaders.item.items; - -import static kubatech.api.Variables.numberFormat; -import static kubatech.api.Variables.numberFormatScientific; - -import java.math.BigInteger; -import java.text.NumberFormat; -import java.util.concurrent.atomic.AtomicReference; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.ItemStack; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; - -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicTextWidget; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; -import com.gtnewhorizons.modularui.common.widget.TabButton; -import com.gtnewhorizons.modularui.common.widget.TabContainer; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import codechicken.nei.NEIClientUtils; -import kubatech.api.enums.ItemList; -import kubatech.api.tea.TeaNetwork; -import kubatech.api.utils.ModUtils; -import kubatech.api.utils.StringUtils; -import kubatech.loaders.item.IItemProxyGUI; - -public class TeaUltimate extends TeaCollection implements IItemProxyGUI { - - public TeaUltimate() { - super("ultimate_tea"); - } - - private static String name = ""; - private static long timeCounter = 0; - private static int colorCounter = 0; - - public static String getUltimateTeaDisplayName(String displayName) { - long current = System.currentTimeMillis(); - if (current - timeCounter > 100) { - timeCounter = current; - name = StringUtils.applyRainbow( - "ULTIMATE", - colorCounter++, - EnumChatFormatting.BOLD.toString() + EnumChatFormatting.OBFUSCATED); - } - return String.format(displayName, name + EnumChatFormatting.RESET); - } - - @Override - public String getDisplayName(ItemStack stack) { - if (!ModUtils.isClientSided || Minecraft.getMinecraft().thePlayer == null) return super.getDisplayName(stack); - if (checkTeaOwner(stack, Minecraft.getMinecraft().thePlayer.getCommandSenderName())) { - return getUltimateTeaDisplayName(super.getDisplayName(stack)); - } - return EnumChatFormatting.GOLD + "" + EnumChatFormatting.BOLD + "" + EnumChatFormatting.ITALIC + "???????"; - } - - @Override - public ModularWindow createWindow(ItemStack stack, EntityPlayer player) { - ModularWindow.Builder builder = ModularWindow.builder(200, 150); - builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); - final TeaNetwork teaNetwork = TeaNetwork.getNetwork(player.getPersistentID()); - IDrawable tab1 = new ItemDrawable(ItemList.LegendaryUltimateTea.get(1)).withFixedSize(18, 18, 4, 6); - IDrawable tab2 = new ItemDrawable(new ItemStack(Blocks.crafting_table)).withFixedSize(18, 18, 4, 6); - IDrawable tab3 = new ItemDrawable(new ItemStack(Items.golden_apple)).withFixedSize(18, 18, 4, 6); - AtomicReference teaAmount = new AtomicReference<>(BigInteger.ZERO); - AtomicReference teaLimit = new AtomicReference<>(BigInteger.ZERO); - builder.widget( - new TabContainer().setButtonSize(28, 32) - .addTabButton( - new TabButton(0) - .setBackground(false, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0, 1f, 0.5f), tab1) - .setBackground(true, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0.5f, 1f, 1f), tab1) - .setPos(0, -28)) - .addTabButton( - new TabButton(1) - .setBackground(false, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0, 1f, 0.5f), tab2) - .setBackground(true, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0.5f, 1f, 1f), tab2) - .setPos(28, -28)) - .addTabButton( - new TabButton(2) - .setBackground(false, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0, 1f, 0.5f), tab3) - .setBackground(true, ModularUITextures.VANILLA_TAB_TOP_MIDDLE.getSubArea(0, 0.5f, 1f, 1f), tab3) - .setPos(56, -28)) - .addPage( - new MultiChildWidget().addChild( - new TextWidget( - new Text("STATUS").format(EnumChatFormatting.BOLD) - .format(EnumChatFormatting.GOLD) - .shadow()).setPos(10, 5)) - .addChild( - new DynamicTextWidget( - () -> new Text( - "Tea: " + (NEIClientUtils.shiftKey() ? numberFormat.format(teaAmount.get()) - : numberFormatScientific.format(teaAmount.get()))).color(Color.GREEN.dark(3))) - .setSynced(false) - .setPos(20, 20) - .attachSyncer( - new FakeSyncWidget.BigIntegerSyncer( - () -> teaNetwork.teaAmount, - teaAmount::set), - builder)) - .addChild( - new DynamicTextWidget( - () -> new Text( - "Tea limit: " + (NEIClientUtils.shiftKey() ? numberFormat.format(teaLimit.get()) - : numberFormatScientific.format(teaLimit.get()))).color(Color.GREEN.dark(3))) - .setSynced(false) - .setPos(20, 30) - .attachSyncer( - new FakeSyncWidget.BigIntegerSyncer( - () -> teaNetwork.teaLimit, - teaLimit::set), - builder))) - .addPage( - new MultiChildWidget().addChild( - new TextWidget( - new Text("EXCHANGE").format(EnumChatFormatting.BOLD) - .format(EnumChatFormatting.GOLD) - .shadow()).setPos(10, 5)) - .addChild(new ButtonWidget().setOnClick((Widget.ClickData clickData, Widget widget) -> { - if (!(player instanceof EntityPlayerMP)) return; - if (!teaNetwork.canAfford(50_000, true)) return; - if (player.inventory.addItemStackToInventory(ItemList.TeaAcceptorResearchNote.get(1))) - return; - player.entityDropItem(ItemList.TeaAcceptorResearchNote.get(1), 0.5f); - }) - .setBackground(new ItemDrawable().setItem(ItemList.TeaAcceptorResearchNote.get(1))) - .addTooltip("Tea Acceptor Research Note") - .addTooltip( - new Text( - "Cost: " + NumberFormat.getInstance() - .format(50_000) + " Tea").color(Color.GRAY.normal)) - .setPos(20, 20))) - .addPage( - new MultiChildWidget().addChild( - new TextWidget( - new Text("BENEFITS").format(EnumChatFormatting.BOLD) - .format(EnumChatFormatting.GOLD) - .shadow()).setPos(10, 5)) - /* - * .addChild(new ButtonWidget() .setOnClick((Widget.ClickData clickData, Widget widget) -> { if - * (!(player instanceof EntityPlayerMP)) return; if (playerData == null) return; - * playerData.autoRegen = !playerData.autoRegen; playerData.markDirty(); }) .setBackground(new - * ItemDrawable().setItem(new ItemStack(Items.potionitem, 1, 8193))) - * .addTooltip("Regeneration I") .addTooltip("For 1 minute") .addTooltip(new Text("Cost: " + - * NumberFormat.getInstance().format(75_000) + " Tea") .color(Color.GRAY.normal)) // - * .addTooltip( //Find a way to run that on server, or different approach // new - * Text("Autobuy: " + (playerData == null ? "ERROR" : playerData.autoRegen)) // - * .color(Color.GREY.normal)) .setPos(20, 20)) - */ )); - return builder.build(); - } - - @Override - public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer entity) { - if (world.isRemote) return stack; - if (!(entity instanceof EntityPlayerMP)) return stack; - if (!checkTeaOwner(stack, entity.getPersistentID())) return stack; - openHeldItemGUI(entity); - return stack; - } - - @Override - public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isCurrentItem) { - if (world.isRemote) return; - if (!(entity instanceof EntityPlayerMP)) return; - super.onUpdate(stack, world, entity, slot, isCurrentItem); - if (checkTeaOwner(stack, entity.getPersistentID())) { - TeaNetwork teaNetwork = TeaNetwork.getNetwork(entity.getPersistentID()); - teaNetwork.addTea(1); - - /* - * if (playerData.autoRegen && playerData.teaAmount > 75_000) { if (((EntityPlayerMP) - * entity).getActivePotionEffect(Potion.regeneration) == null) { ((EntityPlayerMP) - * entity).addPotionEffect(new PotionEffect(Potion.regeneration.id, 1200, 0, true)); playerData.teaAmount -= - * 75_000; } } - */ - } - } -} diff --git a/src/main/java/kubatech/nei/NEIConfig.java b/src/main/java/kubatech/nei/NEIConfig.java new file mode 100644 index 0000000000..2d1927f5c2 --- /dev/null +++ b/src/main/java/kubatech/nei/NEIConfig.java @@ -0,0 +1,69 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2024 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.nei; + +import static kubatech.api.enums.ItemList.LegendaryBlackTea; +import static kubatech.api.enums.ItemList.LegendaryButterflyTea; +import static kubatech.api.enums.ItemList.LegendaryEarlGrayTea; +import static kubatech.api.enums.ItemList.LegendaryGreenTea; +import static kubatech.api.enums.ItemList.LegendaryLemonTea; +import static kubatech.api.enums.ItemList.LegendaryMilkTea; +import static kubatech.api.enums.ItemList.LegendaryOolongTea; +import static kubatech.api.enums.ItemList.LegendaryPeppermintTea; +import static kubatech.api.enums.ItemList.LegendaryPuerhTea; +import static kubatech.api.enums.ItemList.LegendaryRedTea; +import static kubatech.api.enums.ItemList.LegendaryUltimateTea; +import static kubatech.api.enums.ItemList.LegendaryWhiteTea; +import static kubatech.api.enums.ItemList.LegendaryYellowTea; + +import codechicken.nei.api.API; +import codechicken.nei.api.IConfigureNEI; +import kubatech.Tags; + +public class NEIConfig implements IConfigureNEI { + + @Override + public void loadConfig() { + API.hideItem(LegendaryBlackTea.get(1)); + API.hideItem(LegendaryButterflyTea.get(1)); + API.hideItem(LegendaryEarlGrayTea.get(1)); + API.hideItem(LegendaryGreenTea.get(1)); + API.hideItem(LegendaryLemonTea.get(1)); + API.hideItem(LegendaryMilkTea.get(1)); + API.hideItem(LegendaryOolongTea.get(1)); + API.hideItem(LegendaryPeppermintTea.get(1)); + API.hideItem(LegendaryPuerhTea.get(1)); + API.hideItem(LegendaryRedTea.get(1)); + API.hideItem(LegendaryWhiteTea.get(1)); + API.hideItem(LegendaryYellowTea.get(1)); + API.hideItem(LegendaryUltimateTea.get(1)); + } + + @Override + public String getName() { + return Tags.MODNAME + " NEI Plugin"; + } + + @Override + public String getVersion() { + return Tags.VERSION; + } +} diff --git a/src/main/java/kubatech/nei/NEI_Config.java b/src/main/java/kubatech/nei/NEI_Config.java deleted file mode 100644 index 66dadbb08c..0000000000 --- a/src/main/java/kubatech/nei/NEI_Config.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2024 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.nei; - -import static kubatech.api.enums.ItemList.LegendaryBlackTea; -import static kubatech.api.enums.ItemList.LegendaryButterflyTea; -import static kubatech.api.enums.ItemList.LegendaryEarlGrayTea; -import static kubatech.api.enums.ItemList.LegendaryGreenTea; -import static kubatech.api.enums.ItemList.LegendaryLemonTea; -import static kubatech.api.enums.ItemList.LegendaryMilkTea; -import static kubatech.api.enums.ItemList.LegendaryOolongTea; -import static kubatech.api.enums.ItemList.LegendaryPeppermintTea; -import static kubatech.api.enums.ItemList.LegendaryPuerhTea; -import static kubatech.api.enums.ItemList.LegendaryRedTea; -import static kubatech.api.enums.ItemList.LegendaryUltimateTea; -import static kubatech.api.enums.ItemList.LegendaryWhiteTea; -import static kubatech.api.enums.ItemList.LegendaryYellowTea; - -import codechicken.nei.api.API; -import codechicken.nei.api.IConfigureNEI; -import kubatech.Tags; - -public class NEI_Config implements IConfigureNEI { - - @Override - public void loadConfig() { - API.hideItem(LegendaryBlackTea.get(1)); - API.hideItem(LegendaryButterflyTea.get(1)); - API.hideItem(LegendaryEarlGrayTea.get(1)); - API.hideItem(LegendaryGreenTea.get(1)); - API.hideItem(LegendaryLemonTea.get(1)); - API.hideItem(LegendaryMilkTea.get(1)); - API.hideItem(LegendaryOolongTea.get(1)); - API.hideItem(LegendaryPeppermintTea.get(1)); - API.hideItem(LegendaryPuerhTea.get(1)); - API.hideItem(LegendaryRedTea.get(1)); - API.hideItem(LegendaryWhiteTea.get(1)); - API.hideItem(LegendaryYellowTea.get(1)); - API.hideItem(LegendaryUltimateTea.get(1)); - } - - @Override - public String getName() { - return Tags.MODNAME + " NEI Plugin"; - } - - @Override - public String getVersion() { - return Tags.VERSION; - } -} diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java deleted file mode 100644 index f0579bf054..0000000000 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_DEFusionCrafter.java +++ /dev/null @@ -1,281 +0,0 @@ -package kubatech.tileentity.gregtech.multiblock; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static kubatech.api.Variables.StructureHologram; -import static kubatech.api.Variables.buildAuthorList; - -import java.util.Arrays; -import java.util.List; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemStack; -import net.minecraftforge.common.util.ForgeDirection; - -import org.apache.commons.lang3.tuple.Pair; -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.logic.ProcessingLogic; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import kubatech.Tags; -import kubatech.api.implementations.KubaTechGTMultiBlockBase; -import kubatech.loaders.BlockLoader; -import kubatech.loaders.DEFCRecipes; - -public class GT_MetaTileEntity_DEFusionCrafter extends KubaTechGTMultiBlockBase - implements ISurvivalConstructable { - - private static final int CASING_INDEX = (1 << 7) + (15 + 48); - private int mTierCasing = 0; - private int mFusionTierCasing = 0; - private int mCasing = 0; - - @SuppressWarnings("unused") - public GT_MetaTileEntity_DEFusionCrafter(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_DEFusionCrafter(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_DEFusionCrafter(mName); - } - - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final List> fusionCasingTiers = Arrays - .asList(Pair.of(GregTech_API.sBlockCasings4, 6), Pair.of(GregTech_API.sBlockCasings4, 8)); - private static final List> coreTiers = Arrays.asList( - Pair.of(BlockLoader.defcCasingBlock, 8), - Pair.of(BlockLoader.defcCasingBlock, 9), - Pair.of(BlockLoader.defcCasingBlock, 10), - Pair.of(BlockLoader.defcCasingBlock, 11), - Pair.of(BlockLoader.defcCasingBlock, 12)); - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { // spotless:off - { "nnnnn", "nnnnn", "nnnnn", "nnnnn", "nnnnn" }, - { " ", " F ", " FfF ", " F ", " " }, - { " ", " F ", " FfF ", " F ", " " }, - { "RRRRR", "R F R", "RFfFR", "R F R", "RRRRR" }, - { " ", " F ", " FfF ", " F ", " " }, - { " ", " F ", " FfF ", " F ", " " }, - { "RRRRR", "R F R", "RFfFR", "R F R", "RRRRR" }, - { " ", " F ", " FfF ", " F ", " " }, - { " ", " F ", " FfF ", " F ", " " }, - { "NN~NN", "NNNNN", "NNNNN", "NNNNN", "NNNNN" } - })) // spotless:on - .addElement( - 'N', - buildHatchAdder(GT_MetaTileEntity_DEFusionCrafter.class) - .atLeast(InputBus, InputHatch, OutputBus, OutputHatch, Energy, Maintenance) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(onElementPass(e -> e.mCasing++, ofBlock(BlockLoader.defcCasingBlock, 7)))) - .addElement('n', onElementPass(e -> e.mCasing++, ofBlock(BlockLoader.defcCasingBlock, 7))) - .addElement('f', ofBlock(GregTech_API.sBlockCasings4, 7)) - .addElement('F', ofBlocksTiered((Block b, int m) -> { - if (b != GregTech_API.sBlockCasings4 || (m != 6 && m != 8)) return -2; - return m == 6 ? 1 : 2; - }, fusionCasingTiers, -1, (e, i) -> e.mFusionTierCasing = i, e -> e.mFusionTierCasing)) - .addElement('R', ofBlocksTiered((Block b, int m) -> { - if (b != BlockLoader.defcCasingBlock || m < 8 || m > 12) return -2; - return m - 7; - }, coreTiers, -1, (e, i) -> e.mTierCasing = i, e -> e.mTierCasing)) - .build(); - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mCasing = 0; - mTierCasing = -1; - mFusionTierCasing = -1; - if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 9, 0)) return false; - if (mCasing < 19) return false; - if (mTierCasing == -2 || mFusionTierCasing == -2) return false; - if (mTierCasing > 3 && mFusionTierCasing < 2) return false; - return mMaintenanceHatches.size() == 1; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Fusion Crafter") - .addInfo("Controller Block for the Draconic Evolution Fusion Crafter") - .addInfo(buildAuthorList("kuba6000", "Prometheus0000")) - .addInfo("Machine can be overclocked by using casings above the recipe tier:") - .addInfo("Recipe time is divided by number of tiers above the recipe") - .addInfo("Normal EU OC still applies !") - .addInfo(StructureHologram) - .addSeparator() - .beginStructureBlock(5, 10, 5, false) - .addController("Front bottom center") - .addCasingInfoMin("Naquadah Alloy Fusion Casing", 19, false) - .addOtherStructurePart("Fusion Coil Block", "Center pillar") - .addOtherStructurePart("Fusion Machine Casing", "Touching Fusion Coil Block at every side") - .addOtherStructurePart("Tiered Fusion Casing", "Rings (5x5 hollow) at layer 4 and 7") - .addStructureInfo("Bloody Ichorium for tier 1, Draconium for tier 2, etc") - .addStructureInfo("To use tier 3 + you have to use fusion casing MK II") - .addInputBus("Any bottom casing", 1) - .addInputHatch("Any bottom casing", 1) - .addOutputBus("Any bottom casing", 1) - .addOutputHatch("Any bottom casing", 1) - .addEnergyHatch("Any bottom casing", 1) - .addMaintenanceHatch("Any bottom casing", 1) - .toolTipFinisher(Tags.MODNAME); - return tt; - } - - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() - .addIcon(OVERLAY_TELEPORTER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_TELEPORTER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() - .addIcon(OVERLAY_TELEPORTER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_TELEPORTER_GLOW) - .extFacing() - .glow() - .build() }; - } - if (aActive) return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(MACHINE_CASING_MAGIC_GLOW) - .extFacing() - .glow() - .build() }; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public RecipeMap getRecipeMap() { - return DEFCRecipes.fusionCraftingRecipes; - } - - @Override - protected ProcessingLogic createProcessingLogic() { - return new ProcessingLogic() { - - @NotNull - @Override - protected CheckRecipeResult validateRecipe(@NotNull GT_Recipe recipe) { - return recipe.mSpecialValue <= mTierCasing ? CheckRecipeResultRegistry.SUCCESSFUL - : CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); - } - - @NotNull - @Override - protected GT_OverclockCalculator createOverclockCalculator(@NotNull GT_Recipe recipe) { - return super.createOverclockCalculator(recipe) - .setSpeedBoost(1f / (mTierCasing - recipe.mSpecialValue + 1)); - } - }; - } - - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - public int getPollutionPerTick(ItemStack aStack) { - return 0; - } - - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 2, 9, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 9, 0, elementBudget, env, true, true); - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public boolean supportsInputSeparation() { - return true; - } - - @Override - public boolean supportsBatchMode() { - return true; - } -} diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeEntityCrusher.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeEntityCrusher.java deleted file mode 100644 index e6d7e28b4d..0000000000 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeEntityCrusher.java +++ /dev/null @@ -1,820 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2024 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.tileentity.gregtech.multiblock; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_HatchElement.OutputHatch; -import static gregtech.api.enums.Mods.BloodMagic; -import static gregtech.api.enums.Mods.ExtraUtilities; -import static gregtech.api.enums.Mods.InfernalMobs; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; -import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofFrame; -import static kubatech.api.Variables.Author; -import static kubatech.api.Variables.StructureHologram; - -import java.nio.charset.StandardCharsets; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Random; -import java.util.UUID; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.EnumCreatureAttribute; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.ChunkCoordinates; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.EnumDifficulty; -import net.minecraft.world.World; -import net.minecraft.world.WorldProviderHell; -import net.minecraft.world.WorldServer; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.common.util.FakePlayer; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.google.common.collect.Multimap; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.drawable.UITexture; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.kuba6000.mobsinfo.api.utils.FastRandom; -import com.mojang.authlib.GameProfile; - -import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; -import WayofTime.alchemicalWizardry.api.event.RitualRunEvent; -import WayofTime.alchemicalWizardry.api.rituals.Rituals; -import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; -import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; -import WayofTime.alchemicalWizardry.common.rituals.RitualEffectWellOfSuffering; -import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; -import cpw.mods.fml.common.eventhandler.EventPriority; -import cpw.mods.fml.common.eventhandler.SubscribeEvent; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import crazypants.enderio.EnderIO; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Mods; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import kubatech.Tags; -import kubatech.api.helpers.ReflectionHelper; -import kubatech.api.implementations.KubaTechGTMultiBlockBase; -import kubatech.api.tileentity.CustomTileEntityPacketHandler; -import kubatech.api.utils.ModUtils; -import kubatech.client.effect.EntityRenderer; -import kubatech.loaders.MobHandlerLoader; -import kubatech.network.CustomTileEntityPacket; - -public class GT_MetaTileEntity_ExtremeEntityCrusher - extends KubaTechGTMultiBlockBase - implements CustomTileEntityPacketHandler, ISurvivalConstructable { - - public static final double DIAMOND_SPIKES_DAMAGE = 9d; - // Powered spawner with octadic capacitor spawns ~22/min ~= 0.366/sec ~= 2.72s/spawn ~= 54.54t/spawn - public static final int MOB_SPAWN_INTERVAL = 55; - public final Random rand = new FastRandom(); - private final WeaponCache weaponCache; - - @SuppressWarnings("unused") - public GT_MetaTileEntity_ExtremeEntityCrusher(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - weaponCache = new WeaponCache(mInventory); - } - - public GT_MetaTileEntity_ExtremeEntityCrusher(String aName) { - super(aName); - weaponCache = new WeaponCache(mInventory); - if (BloodMagic.isModLoaded()) MinecraftForge.EVENT_BUS.register(this); - } - - @Override - public void onRemoval() { - if (BloodMagic.isModLoaded()) MinecraftForge.EVENT_BUS.unregister(this); - if (getBaseMetaTileEntity().isClientSide() && entityRenderer != null) { - entityRenderer.setDead(); - } - } - - @Override - public void onUnload() { - if (BloodMagic.isModLoaded()) MinecraftForge.EVENT_BUS.unregister(this); - } - - private static final String WellOfSufferingRitualName = "AW013Suffering"; - - private static final Item poweredSpawnerItem = Item.getItemFromBlock(EnderIO.blockPoweredSpawner); - private static final int CASING_INDEX = 16; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { // spotless:off - { "ccccc", "ccccc", "ccccc", "ccccc", "ccccc" }, - { "fgggf", "g---g", "g---g", "g---g", "fgggf" }, - { "fgggf", "g---g", "g---g", "g---g", "fgggf" }, - { "fgggf", "g---g", "g---g", "g---g", "fgggf" }, - { "fgggf", "g---g", "g---g", "g---g", "fgggf" }, - { "fgggf", "gsssg", "gsssg", "gsssg", "fgggf" }, - { "CC~CC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, - })) // spotless:on - .addElement('c', onElementPass(t -> t.mCasing++, ofBlock(GregTech_API.sBlockCasings2, 0))) - .addElement( - 'C', - buildHatchAdder(GT_MetaTileEntity_ExtremeEntityCrusher.class) - .atLeast(InputBus, OutputBus, OutputHatch, Energy, Maintenance) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(onElementPass(t -> t.mCasing++, ofBlock(GregTech_API.sBlockCasings2, 0)))) - .addElement('g', BorosilicateGlass.ofBoroGlass((byte) 0, (t, v) -> t.mGlassTier = v, t -> t.mGlassTier)) - .addElement('f', ofFrame(Materials.Steel)) - .addElement( - 's', - ExtraUtilities.isModLoaded() ? ofBlock(Block.getBlockFromName("ExtraUtilities:spike_base_diamond"), 0) - : isAir()) - .build(); - - private TileEntity masterStoneRitual = null; - private TileEntity tileAltar = null; - private boolean isInRitualMode = false; - private int mCasing = 0; - private byte mGlassTier = 0; - private boolean mAnimationEnabled = true; - private boolean mIsProducingInfernalDrops = true; - private boolean voidAllDamagedAndEnchantedItems = false; - - private EntityRenderer entityRenderer = null; - private boolean renderEntity = false; - public EECFakePlayer EECPlayer = null; - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setBoolean("isInRitualMode", isInRitualMode); - aNBT.setBoolean("mAnimationEnabled", mAnimationEnabled); - aNBT.setByte("mGlassTier", mGlassTier); - aNBT.setBoolean("mIsProducingInfernalDrops", mIsProducingInfernalDrops); - aNBT.setBoolean("voidAllDamagedAndEnchantedItems", voidAllDamagedAndEnchantedItems); - if (weaponCache.getStackInSlot(0) != null) aNBT.setTag( - "weaponCache", - weaponCache.getStackInSlot(0) - .writeToNBT(new NBTTagCompound())); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - isInRitualMode = aNBT.getBoolean("isInRitualMode"); - mAnimationEnabled = !aNBT.hasKey("mAnimationEnabled") || aNBT.getBoolean("mAnimationEnabled"); - mGlassTier = aNBT.getByte("mGlassTier"); - mIsProducingInfernalDrops = !aNBT.hasKey("mIsProducingInfernalDrops") - || aNBT.getBoolean("mIsProducingInfernalDrops"); - voidAllDamagedAndEnchantedItems = aNBT.getBoolean("voidAllDamagedAndEnchantedItems"); - if (aNBT.hasKey("weaponCache")) - weaponCache.setStackInSlot(0, ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("weaponCache"))); - } - - @Override - public boolean isOverclockingInfinite() { - return true; - } - - @Override - protected int getOverclockTimeLimit() { - return 20; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated(); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Powered Spawner, EEC") - .addInfo("Controller block for the Extreme Entity Crusher") - .addInfo(Author) - .addInfo("Spawns and kills monsters for you.") - .addInfo("You have to insert the powered spawner in the controller.") - .addInfo("Base energy usage: 2,000 EU/t") - .addInfo("Supports perfect OC, minimum time: 20 ticks, after that multiplies the outputs.") - .addInfo("Recipe time is based on mob health.") - .addInfo("You can additionally put a weapon inside the GUI.") - .addInfo("It will speed up the process and apply the looting level from the weapon (maximum 4 levels).") - .addInfo(EnumChatFormatting.RED + "Enchanting the spikes inside the structure does nothing!") - .addInfo("Also produces 120 Liquid XP per operation.") - .addInfo("If the mob spawns infernal, it will drain 8 times more power.") - .addInfo("You can prevent infernal spawns by shift clicking with a screwdriver.") - .addInfo("Note: If the mob has forced infernal spawn, it will do it anyway.") - .addInfo("You can enable ritual mode with a screwdriver.") - .addInfo("When in ritual mode and the Well Of Suffering ritual is built directly centered on the machine,") - .addInfo("the mobs will start to buffer and die very slowly by the ritual.") - .addInfo("You can disable mob animation with a soldering iron.") - .addInfo(StructureHologram) - .addSeparator() - .beginStructureBlock(5, 7, 5, true) - .addController("Front Bottom Center") - .addCasingInfoMin("Solid Steel Machine Casing", 35, false) - .addOtherStructurePart("Tiered (HV+) Glass", "Side walls without edges or corners") - .addStructureInfo("The glass tier limits the Energy Hatch tier") - .addOtherStructurePart("Steel Frame Box", "All vertical edges without corners") - .addOtherStructurePart("Diamond spikes", "Inside second layer") - .addOutputBus("Any bottom casing", 1) - .addOutputHatch("Any bottom casing", 1) - .addEnergyHatch("Any bottom casing", 1) - .addMaintenanceHatch("Any bottom casing", 1) - .toolTipFinisher(Tags.MODNAME); - return tt; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 2, 6, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 6, 0, elementBudget, env, true, true); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_ExtremeEntityCrusher(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; - } - - @SideOnly(Side.CLIENT) - private void setupEntityRenderer(IGregTechTileEntity aBaseMetaTileEntity, int time) { - if (entityRenderer == null) { - ChunkCoordinates coords = this.getBaseMetaTileEntity() - .getCoords(); - int[] abc = new int[] { 0, -2, 2 }; - int[] xyz = new int[] { 0, 0, 0 }; - this.getExtendedFacing() - .getWorldOffset(abc, xyz); - xyz[0] += coords.posX; - xyz[1] += coords.posY; - xyz[2] += coords.posZ; - entityRenderer = new EntityRenderer(aBaseMetaTileEntity.getWorld(), xyz[0], xyz[1], xyz[2], time); - } else { - entityRenderer.setDead(); - entityRenderer = new EntityRenderer(entityRenderer, time); - } - Minecraft.getMinecraft().effectRenderer.addEffect(entityRenderer); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isClientSide()) { - if (renderEntity && aBaseMetaTileEntity.isActive() && aTick % 40 == 0) { - setupEntityRenderer(aBaseMetaTileEntity, 40); - } - } - } - - @SideOnly(Side.CLIENT) - @Override - public void HandleCustomPacket(CustomTileEntityPacket message) { - if (message.getDataBoolean() && Mods.MobsInfo.isModLoaded()) { - renderEntity = true; - String mobType = message.getDataString(); - MobHandlerLoader.MobEECRecipe r = MobHandlerLoader.recipeMap.get(mobType); - if (r != null) { - if (entityRenderer == null) setupEntityRenderer(getBaseMetaTileEntity(), 40); - entityRenderer.setEntity(r.entityCopy); - } else entityRenderer.setEntity(null); - } else { - renderEntity = false; - if (entityRenderer != null) { - entityRenderer.setDead(); - entityRenderer = null; - } - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (this.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(aPlayer, "Can't change mode when running !"); - return; - } - if (aPlayer.isSneaking()) { - if (!InfernalMobs.isModLoaded()) return; - mIsProducingInfernalDrops = !mIsProducingInfernalDrops; - if (!mIsProducingInfernalDrops) - GT_Utility.sendChatToPlayer(aPlayer, "Mobs will now be prevented from spawning infernal"); - else GT_Utility.sendChatToPlayer(aPlayer, "Mobs can spawn infernal now"); - } else { - if (!BloodMagic.isModLoaded()) return; - isInRitualMode = !isInRitualMode; - if (!isInRitualMode) { - GT_Utility.sendChatToPlayer(aPlayer, "Ritual mode disabled"); - } else { - GT_Utility.sendChatToPlayer(aPlayer, "Ritual mode enabled"); - if (connectToRitual()) GT_Utility.sendChatToPlayer(aPlayer, "Successfully connected to the ritual"); - else GT_Utility.sendChatToPlayer(aPlayer, "Can't connect to the ritual"); - } - } - } - - @Override - public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (wrenchingSide == getBaseMetaTileEntity().getFrontFacing()) { - mAnimationEnabled = !mAnimationEnabled; - GT_Utility.sendChatToPlayer(aPlayer, "Animations are " + (mAnimationEnabled ? "enabled" : "disabled")); - return true; - } else return super.onSolderingToolRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ); - } - - @SuppressWarnings("unused") - @SubscribeEvent(priority = EventPriority.LOWEST) - public void onRitualPerform(RitualRunEvent event) { - if (!isInRitualMode) return; - if (masterStoneRitual == null) return; - if (this.mMaxProgresstime == 0) return; - if (event.mrs.equals(masterStoneRitual) && event.ritualKey.equals(WellOfSufferingRitualName)) { - Rituals ritual = Rituals.ritualMap.get(WellOfSufferingRitualName); - if (ritual != null && ritual.effect instanceof RitualEffectWellOfSuffering) { - RitualEffectWellOfSuffering effect = (RitualEffectWellOfSuffering) ritual.effect; - event.setCanceled(true); // we will handle that - String owner = event.mrs.getOwner(); - int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); - World world = event.mrs.getWorld(); - int x = event.mrs.getXCoord(); - int y = event.mrs.getYCoord(); - int z = event.mrs.getZCoord(); - - if (world.getWorldTime() % RitualEffectWellOfSuffering.timeDelay != 0) return; - - if (tileAltar == null || tileAltar.isInvalid()) { - tileAltar = null; - for (int i = -5; i <= 5; i++) for (int j = -5; j <= 5; j++) for (int k = -10; k <= 10; k++) - if (world.getTileEntity(x + i, y + k, z + j) instanceof IBloodAltar) - tileAltar = world.getTileEntity(x + i, y + k, z + j); - } - if (tileAltar == null) return; - - if (currentEssence < effect.getCostPerRefresh() * 100) { - SoulNetworkHandler.causeNauseaToPlayer(owner); - return; - } - - ((IBloodAltar) tileAltar).sacrificialDaggerCall( - 100 * RitualEffectWellOfSuffering.amount - * (effect.canDrainReagent( - event.mrs, - ReagentRegistry.offensaReagent, - ReflectionHelper.getField(effect, "offensaDrain", 3), - true) ? 2 : 1) - * (effect.canDrainReagent( - event.mrs, - ReagentRegistry.tenebraeReagent, - ReflectionHelper.getField(effect, "tennebraeDrain", 5), - true) ? 2 : 1), - true); - - SoulNetworkHandler.syphonFromNetwork(owner, effect.getCostPerRefresh() * 100); - } - } - } - - private CustomTileEntityPacket mobPacket = null; - - private static class WeaponCache extends ItemStackHandler { - - boolean isValid = false; - int looting = 0; - double attackDamage = 0; - - public WeaponCache(ItemStack[] inventory) { - super(inventory); - } - - @Override - protected void onContentsChanged(int slot) { - if (slot != 0) return; - if (ModUtils.isClientThreaded()) return; - ItemStack stack = getStackInSlot(0); - if (stack == null) { - isValid = false; - return; - } - // noinspection unchecked - attackDamage = ((Multimap) stack.getAttributeModifiers()) - .get(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName()) - .stream() - .mapToDouble( - attr -> attr.getAmount() - + (double) EnchantmentHelper.func_152377_a(stack, EnumCreatureAttribute.UNDEFINED)) - .sum(); - looting = Math.min(4, EnchantmentHelper.getEnchantmentLevel(Enchantment.looting.effectId, stack)); - isValid = true; - } - - @Override - public boolean isItemValid(int slot, ItemStack stack) { - return Enchantment.looting.canApply(stack); - } - } - - @Override - public boolean isValidSlot(int aIndex) { - return aIndex >= 0; - } - - @SuppressWarnings("unlikely-arg-type") - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - if (getBaseMetaTileEntity().isClientSide()) return CheckRecipeResultRegistry.NO_RECIPE; - ItemStack aStack = mInventory[1]; - if (aStack == null) return SimpleCheckRecipeResult.ofFailure("EEC_nospawner"); - - if (aStack.getItem() != poweredSpawnerItem) return SimpleCheckRecipeResult.ofFailure("EEC_nospawner"); - - if (aStack.getTagCompound() == null) return SimpleCheckRecipeResult.ofFailure("EEC_invalidspawner"); - String mobType = aStack.getTagCompound() - .getString("mobType"); - if (mobType.isEmpty()) return SimpleCheckRecipeResult.ofFailure("EEC_invalidspawner"); - - if (mobType.equals("Skeleton") && getBaseMetaTileEntity().getWorld().provider instanceof WorldProviderHell - && rand.nextInt(5) > 0) mobType = "witherSkeleton"; - - MobHandlerLoader.MobEECRecipe recipe = MobHandlerLoader.recipeMap.get(mobType); - - if (recipe == null) return CheckRecipeResultRegistry.NO_RECIPE; - if (!recipe.recipe.isPeacefulAllowed && this.getBaseMetaTileEntity() - .getWorld().difficultySetting == EnumDifficulty.PEACEFUL) - return SimpleCheckRecipeResult.ofFailure("EEC_peaceful"); - - if (isInRitualMode && isRitualValid()) { - if (getMaxInputEu() < recipe.mEUt / 4) return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt / 4); - this.mOutputFluids = new FluidStack[] { FluidRegistry.getFluidStack("xpjuice", 5000) }; - this.mOutputItems = recipe - .generateOutputs(rand, this, 3, 0, mIsProducingInfernalDrops, voidAllDamagedAndEnchantedItems); - this.lEUt /= 4L; - this.mMaxProgresstime = 400; - } else { - if (getMaxInputEu() < recipe.mEUt) return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - if (recipe.recipe.alwaysinfernal && getMaxInputEu() < recipe.mEUt * 8) - return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt * 8); - - double attackDamage = DIAMOND_SPIKES_DAMAGE; // damage from spikes - weaponCheck: { - GT_MetaTileEntity_Hatch_InputBus inputbus = this.mInputBusses.size() == 0 ? null - : this.mInputBusses.get(0); - if (inputbus != null && !inputbus.isValid()) inputbus = null; - ItemStack lootingHolder = inputbus == null ? null : inputbus.getStackInSlot(0); - if (lootingHolder == null) break weaponCheck; - if (weaponCache.getStackInSlot(0) != null) break weaponCheck; - if (weaponCache.isItemValid(0, lootingHolder)) { - weaponCache.setStackInSlot(0, lootingHolder); - inputbus.setInventorySlotContents(0, null); - updateSlots(); - } - } - if (weaponCache.isValid) attackDamage += weaponCache.attackDamage; - - if (EECPlayer == null) EECPlayer = new EECFakePlayer(this); - EECPlayer.currentWeapon = weaponCache.getStackInSlot(0); - - this.mOutputItems = recipe.generateOutputs( - rand, - this, - attackDamage, - weaponCache.isValid ? weaponCache.looting : 0, - mIsProducingInfernalDrops, - voidAllDamagedAndEnchantedItems); - - EECPlayer.currentWeapon = null; - - this.mOutputFluids = new FluidStack[] { FluidRegistry.getFluidStack("xpjuice", 120) }; - ItemStack weapon = weaponCache.getStackInSlot(0); - int times = this.calculatePerfectOverclock(this.lEUt, this.mMaxProgresstime); - if (weaponCache.isValid && weapon.isItemStackDamageable()) { - EECPlayer.currentWeapon = weapon; - Item lootingHolderItem = weapon.getItem(); - for (int i = 0; i < times + 1; i++) { - // noinspection ConstantConditions - if (!lootingHolderItem.hitEntity(weapon, recipe.recipe.entity, EECPlayer)) break; - if (weapon.stackSize == 0) { - weaponCache.setStackInSlot(0, null); - break; - } - } - EECPlayer.currentWeapon = null; - } - } - if (this.lEUt > 0) this.lEUt = -this.lEUt; - this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - - if (mobPacket == null) mobPacket = new CustomTileEntityPacket((TileEntity) this.getBaseMetaTileEntity(), null); - mobPacket.resetHelperData(); - mobPacket.addData(mAnimationEnabled); - if (mAnimationEnabled) mobPacket.addData(mobType); - mobPacket.sendToAllAround(16); - - this.updateSlots(); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - private boolean isRitualValid() { - if (!isInRitualMode) return false; - if (masterStoneRitual == null) return false; - if (masterStoneRitual.isInvalid() || !(((TEMasterStone) masterStoneRitual).getCurrentRitual() - .equals(WellOfSufferingRitualName))) { - masterStoneRitual = null; - return false; - } - return true; - } - - private boolean connectToRitual() { - if (!BloodMagic.isModLoaded()) return false; - ChunkCoordinates coords = this.getBaseMetaTileEntity() - .getCoords(); - int[] abc = new int[] { 0, -8, 2 }; - int[] xyz = new int[] { 0, 0, 0 }; - this.getExtendedFacing() - .getWorldOffset(abc, xyz); - xyz[0] += coords.posX; - xyz[1] += coords.posY; - xyz[2] += coords.posZ; - TileEntity te = this.getBaseMetaTileEntity() - .getTileEntity(xyz[0], xyz[1], xyz[2]); - if (te instanceof TEMasterStone) { - if (((TEMasterStone) te).getCurrentRitual() - .equals(WellOfSufferingRitualName)) { - masterStoneRitual = te; - return true; - } - } - return false; - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mGlassTier = 0; - mCasing = 0; - if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 6, 0)) return false; - if (mCasing < 35 || mMaintenanceHatches.size() != 1 - || mEnergyHatches.size() == 0 - || !(mInputBusses.size() == 0 || (mInputBusses.size() == 1 && mInputBusses.get(0).mTier == 0))) - return false; - if (mGlassTier < 8) - for (GT_MetaTileEntity_Hatch_Energy hatch : mEnergyHatches) if (hatch.mTier > mGlassTier) return false; - if (isInRitualMode) connectToRitual(); - return true; - } - - @Override - public String[] getInfoData() { - ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add("Animations: " + EnumChatFormatting.YELLOW + (mAnimationEnabled ? "Enabled" : "Disabled")); - info.add( - "Is allowed to produce infernal drops: " + EnumChatFormatting.YELLOW - + (mIsProducingInfernalDrops ? "Yes" : "No")); - info.add( - "Void all damaged and enchanted items: " + EnumChatFormatting.YELLOW - + (voidAllDamagedAndEnchantedItems ? "Yes" : "No")); - info.add("Is in ritual mode: " + EnumChatFormatting.YELLOW + (isInRitualMode ? "Yes" : "No")); - if (isInRitualMode) info.add( - "Is connected to ritual: " - + (isRitualValid() ? EnumChatFormatting.GREEN + "Yes" : EnumChatFormatting.RED + "No")); - else { - info.add("Inserted weapon: " + EnumChatFormatting.YELLOW + (weaponCache.isValid ? "Yes" : "No")); - if (weaponCache.isValid) { - info.add("Weapon attack damage: " + EnumChatFormatting.YELLOW + weaponCache.attackDamage); - info.add("Weapon looting level: " + EnumChatFormatting.YELLOW + weaponCache.looting); - info.add( - "Total attack damage: " + EnumChatFormatting.YELLOW - + (DIAMOND_SPIKES_DAMAGE + weaponCache.attackDamage)); - } else info.add("Total attack damage: " + EnumChatFormatting.YELLOW + DIAMOND_SPIKES_DAMAGE); - } - return info.toArray(new String[0]); - } - - @Override - protected void addConfigurationWidgets(DynamicPositionedRow configurationElements, UIBuildContext buildContext) { - configurationElements.setSynced(true); - configurationElements.widget(new CycleButtonWidget().setToggle(() -> isInRitualMode, v -> { - if (this.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Can't change mode when running !"); - return; - } - - isInRitualMode = v; - - if (!(buildContext.getPlayer() instanceof EntityPlayerMP)) return; - if (!isInRitualMode) { - GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Ritual mode disabled"); - } else { - GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Ritual mode enabled"); - if (connectToRitual()) - GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Successfully connected to the ritual"); - else GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Can't connect to the ritual"); - } - }) - .setTextureGetter(toggleButtonTextureGetter) - .setVariableBackgroundGetter(toggleButtonBackgroundGetter) - .setSize(16, 16) - .addTooltip("Ritual mode") - .setTooltipShowUpDelay(TOOLTIP_DELAY)); - configurationElements.widget(new CycleButtonWidget().setToggle(() -> mIsProducingInfernalDrops, v -> { - if (this.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Can't change mode when running !"); - return; - } - - mIsProducingInfernalDrops = v; - - if (!(buildContext.getPlayer() instanceof EntityPlayerMP)) return; - if (!mIsProducingInfernalDrops) GT_Utility - .sendChatToPlayer(buildContext.getPlayer(), "Mobs will now be prevented from spawning infernal"); - else GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Mobs can spawn infernal now"); - }) - .setTextureGetter(toggleButtonTextureGetter) - .setVariableBackgroundGetter(toggleButtonBackgroundGetter) - .setSize(16, 16) - .addTooltip("Is allowed to spawn infernal mobs") - .addTooltip(new Text("Does not affect mobs that are always infernal !").color(Color.GRAY.normal)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)); - configurationElements.widget(new CycleButtonWidget().setToggle(() -> voidAllDamagedAndEnchantedItems, v -> { - if (this.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Can't change mode when running !"); - return; - } - - voidAllDamagedAndEnchantedItems = v; - - if (!(buildContext.getPlayer() instanceof EntityPlayerMP)) return; - if (!voidAllDamagedAndEnchantedItems) GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Void nothing"); - else GT_Utility.sendChatToPlayer(buildContext.getPlayer(), "Void all damaged and enchanted items"); - }) - .setTextureGetter(toggleButtonTextureGetter) - .setVariableBackgroundGetter(toggleButtonBackgroundGetter) - .setSize(16, 16) - .addTooltip("Void all damaged and enchanted items") - .addTooltip( - new Text("Does not affect infernal drops and some special drops like Sticky Sword!") - .color(Color.GRAY.normal)) - .setTooltipShowUpDelay(TOOLTIP_DELAY)); - } - - @Override - public void createInventorySlots() { - final SlotWidget spawnerSlot = new SlotWidget(inventoryHandler, 1); - spawnerSlot.setBackground( - GT_UITextures.SLOT_DARK_GRAY, - UITexture.fullImage(Tags.MODID, "gui/slot/gray_spawner") - .withFixedSize(16, 16) - .withOffset(1, 1)); - spawnerSlot.setFilter(stack -> stack.getItem() == poweredSpawnerItem); - slotWidgets.add(spawnerSlot); - final SlotWidget weaponSlot = new SlotWidget(weaponCache, 0); - weaponSlot.setBackground( - GT_UITextures.SLOT_DARK_GRAY, - UITexture.fullImage(Tags.MODID, "gui/slot/gray_sword") - .withFixedSize(16, 16) - .withOffset(1, 1)); - slotWidgets.add(weaponSlot); - } - - private static class EECFakePlayer extends FakePlayer { - - GT_MetaTileEntity_ExtremeEntityCrusher mte; - ItemStack currentWeapon; - - public EECFakePlayer(GT_MetaTileEntity_ExtremeEntityCrusher mte) { - super( - (WorldServer) mte.getBaseMetaTileEntity() - .getWorld(), - new GameProfile( - UUID.nameUUIDFromBytes("[EEC Fake Player]".getBytes(StandardCharsets.UTF_8)), - "[EEC Fake Player]")); - this.mte = mte; - } - - @Override - public void renderBrokenItemStack(ItemStack p_70669_1_) {} - - @Override - public Random getRNG() { - return mte.rand; - } - - @Override - public void destroyCurrentEquippedItem() {} - - @Override - public ItemStack getCurrentEquippedItem() { - return currentWeapon; - } - - @Override - public ItemStack getHeldItem() { - return currentWeapon; - } - } -} diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java deleted file mode 100644 index 19a1a28deb..0000000000 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_ExtremeIndustrialGreenhouse.java +++ /dev/null @@ -1,1282 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2024 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.tileentity.gregtech.multiblock; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.api.enums.Mods.ProjectRedIllumination; -import static gregtech.api.enums.Mods.RandomThings; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static kubatech.api.Variables.Author; -import static kubatech.api.Variables.StructureHologram; -import static kubatech.api.utils.ItemUtils.readItemStackFromNBT; - -import java.io.IOException; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Comparator; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import net.minecraft.block.Block; -import net.minecraft.client.Minecraft; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.MainAxisAlignment; -import com.gtnewhorizons.modularui.api.screen.ModularUIContext; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.builder.UIInfo; -import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.Column; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GTVoltageIndex; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Materials; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_OutputBus; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.VoidProtectionHelper; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; -import ic2.core.init.BlocksItems; -import ic2.core.init.InternalName; -import kubatech.Tags; -import kubatech.api.EIGDynamicInventory; -import kubatech.api.eig.EIGBucket; -import kubatech.api.eig.EIGDropTable; -import kubatech.api.eig.EIGMode; -import kubatech.api.enums.EIGModes; -import kubatech.api.implementations.KubaTechGTMultiBlockBase; -import kubatech.client.effect.CropRenderer; -import kubatech.tileentity.gregtech.multiblock.eigbuckets.EIGIC2Bucket; - -@SuppressWarnings("unused") -public class GT_MetaTileEntity_ExtremeIndustrialGreenhouse - extends KubaTechGTMultiBlockBase { - - /*** - * BALANCE OF THE IC2 MODE: - * (let T = EIG_BALANCE_IC2_ACCELERATOR_TIER) - * All IC2 crops are simulated and all drops are generated based on the real crop drops. - * T is a tick accelerator tier for the IC2 crops, - * Each crop in the EIG is accelerated using T tier accelerator - * (Accelerators in the game are defined as 2^T acceleration, 8*(4^T) voltage, 6 amps) - * IC2 mode is unlocked at T+1 tier (glass and power) - * And each amp of T gives one crop slot, EIG only consumes 1 AMP of a tier that it is at - * (EIG starts at 4 crops (T+1 tier) and each tier quadruples the amount of slots) - * Each crop is accelerated 2^T times - * Summary: - * Accelerators in EIG are a bit cheaper than on the crop field (4 amps instead of 6 amps) - * There are 4 crops touching the accelerator (1 AMP for 1 accelerated crop) - * - * Changing T one number down will buff the EIG twice, as well as changing it up will nerf the EIG twice - * (That is because accelerators are imperfectly scaled in game LV = 2x, MV = 4x, ...) - */ - public static final int EIG_BALANCE_IC2_ACCELERATOR_TIER = GTVoltageIndex.IV; - public static final int EIG_BALANCE_REGULAR_MODE_MIN_TIER = GTVoltageIndex.EV; - public static final int EIG_BALANCE_IC2_MODE_MIN_TIER = EIG_BALANCE_IC2_ACCELERATOR_TIER + 1; - public static final double EIG_BALANCE_MAX_FERTILIZER_BOOST = 4.0d; - public static final int EIG_BALANCE_WEED_EX_USAGE_BEGINS_AT = 1000; - public static final int EIG_BALANCE_WATER_USAGE_PER_SEED = 1000; - - private static final Fluid WEEDEX_FLUID = Materials.WeedEX9000.mFluid; - private static final LinkedList FERTILIZER_ITEM_LIST = new LinkedList<>(); - - public static void addFertilizerItem(ItemStack fertilizer) { - FERTILIZER_ITEM_LIST.addLast(fertilizer); - } - - private static final boolean debug = false; - - /*** - * Changing this variable will cause ALL EIGs in the world to regenerate their drop tables. - */ - private static final int NBT_REVISION = 1; - private static final int CONFIGURATION_WINDOW_ID = 999; - - public final List buckets = new LinkedList<>(); - public final EIGDropTable dropTracker = new EIGDropTable(); - public Collection toMigrate; - public EIGDropTable guiDropTracker = new EIGDropTable(); - private HashMap synchedGUIDropTracker = new HashMap<>(); - private int maxSeedTypes = 0; - private int maxSeedCount = 0; - /** - * The setup phase of the EIG. 0 operation. 1 input. 2 output. - */ - private int setupPhase = 1; - /** - * The amount of water used per cycle. - */ - private int waterUsage = 0; - /** - * The tier of the glass on the EIG. - */ - private byte glassTier = 0; - /** - * The Amount of Weed-EX used per cycle. - */ - private int weedEXUsage = 0; - /** - * The mode that the EIG is in. - */ - private EIGMode mode = EIGModes.Normal; - /** - * Determines whether new IC2 buckets will use no humidity for their growth speed calculation. - */ - private boolean useNoHumidity = false; - - public boolean isInNoHumidityMode() { - return this.useNoHumidity; - } - - // region structure stuff - - private int mCasing = 0; - private static final int CASING_INDEX = 49; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape( - STRUCTURE_PIECE_MAIN, - transpose( - new String[][] { // spotless:off - { "ccccc", "ccccc", "ccccc", "ccccc", "ccccc" }, - { "ccccc", "clllc", "clllc", "clllc", "ccccc" }, - { "ggggg", "g---g", "g---g", "g---g", "ggggg" }, - { "ggggg", "g---g", "g---g", "g---g", "ggggg" }, - { "ccccc", "cdddc", "cdwdc", "cdddc", "ccccc" }, - { "cc~cc", "cCCCc", "cCCCc", "cCCCc", "ccccc" }, - })) // spotless:on - .addElement( - 'c', - ofChain( - onElementPass(t -> t.mCasing++, ofBlock(GregTech_API.sBlockCasings4, 1)), - ofHatchAdder( - GT_MetaTileEntity_ExtremeIndustrialGreenhouse::addEnergyInputToMachineList, - CASING_INDEX, - 1), - ofHatchAdder( - GT_MetaTileEntity_ExtremeIndustrialGreenhouse::addMaintenanceToMachineList, - CASING_INDEX, - 1), - ofHatchAdder(GT_MetaTileEntity_ExtremeIndustrialGreenhouse::addInputToMachineList, CASING_INDEX, 1), - ofHatchAdder(GT_MetaTileEntity_ExtremeIndustrialGreenhouse::addOutputToMachineList, CASING_INDEX, 1))) - .addElement('C', onElementPass(t -> t.mCasing++, ofBlock(GregTech_API.sBlockCasings4, 1))) - .addElement( - 'l', - ProjectRedIllumination.isModLoaded() - ? ofChain( - ofBlock(Block.getBlockFromName("ProjRed|Illumination:projectred.illumination.lamp"), 10), - ofBlock(Block.getBlockFromName("ProjRed|Illumination:projectred.illumination.lamp"), 26)) - : ofChain(ofBlock(Blocks.redstone_lamp, 0), ofBlock(Blocks.lit_redstone_lamp, 0))) - .addElement( - 'g', - BorosilicateGlass - .ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier)) - .addElement( - 'd', - ofBlock( - RandomThings.isModLoaded() ? Block.getBlockFromName("RandomThings:fertilizedDirt_tilled") - : Blocks.farmland, - 0)) - .addElement( - 'w', - ofChain(ofBlock(Blocks.water, 0), ofBlock(BlocksItems.getFluidBlock(InternalName.fluidDistilledWater), 0))) - .build(); - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public boolean checkMachine(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { - mCasing = 0; - glassTier = 0; - if (debug) glassTier = 8; - - if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 5, 0)) return false; - - if (this.glassTier < 8 && !this.mEnergyHatches.isEmpty()) - for (GT_MetaTileEntity_Hatch_Energy hatchEnergy : this.mEnergyHatches) - if (this.glassTier < hatchEnergy.mTier) return false; - - boolean valid = this.mMaintenanceHatches.size() == 1 && !this.mEnergyHatches.isEmpty() && this.mCasing >= 70; - - if (valid) this.updateSeedLimits(); - - return valid; - } - - @Override - public void construct(ItemStack itemStack, boolean b) { - buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 2, 5, 0); - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); - } - - // endregion structure stuff - - // region tooltip - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - String fertilizerBoostMax = String.format("%.0f", EIG_BALANCE_MAX_FERTILIZER_BOOST * 100); - tt.addMachineType("Crop Farm") - .addInfo("Controller block for the Extreme Industrial Greenhouse") - .addInfo(Author) - .addInfo("Grow your crops like a chad!") - .addInfo("Use screwdriver to enable/change/disable setup mode") - .addInfo("Use screwdriver while sneaking to enable/disable IC2 mode") - .addInfo("Use wire cutters to give incoming IC2 seeds 0 humidity") - .addInfo("Uses " + EIG_BALANCE_WATER_USAGE_PER_SEED + "L of water per seed per operation") - .addInfo( - "Uses 1L of " + new FluidStack(WEEDEX_FLUID, 1).getLocalizedName() - + " per operation per seed if it contains more than " - + EIG_BALANCE_WEED_EX_USAGE_BEGINS_AT - + " seeds") - .addInfo("Otherwise, around 1% of seeds will be voided each operation") - .addInfo("You can insert fertilizer each operation to get more drops (max + " + fertilizerBoostMax + ")") - .addInfo("--------------------- SETUP MODE ---------------------") - .addInfo("Does not take power") - .addInfo("There are two modes: input / output") - .addInfo("Input mode: machine will take seeds from input bus and plant them") - .addInfo("[IC2] You need to also input block that is required under the crop") - .addInfo("Output mode: machine will take planted seeds and output them"); - EIGModes.addTooltipInfo(tt); - tt.addInfo(StructureHologram) - .addSeparator() - .beginStructureBlock(5, 6, 5, false) - .addController("Front bottom center") - .addCasingInfoMin("Clean Stainless Steel Casings", 70, false) - .addOtherStructurePart("Borosilicate Glass", "Hollow two middle layers") - .addStructureInfo("The glass tier limits the Energy Input tier") - .addStructureInfo("The dirt is from RandomThings, must be tilled") - .addStructureInfo("Regular water and IC2 Distilled Water are accepted") - .addStructureInfo("Purple lamps are from ProjectRedIllumination. They can be powered and/or inverted") - .addMaintenanceHatch("Any casing (Except inner bottom ones)", 1) - .addInputBus("Any casing (Except inner bottom ones)", 1) - .addOutputBus("Any casing (Except inner bottom ones)", 1) - .addInputHatch("Any casing (Except inner bottom ones)", 1) - .addEnergyHatch("Any casing (Except inner bottom ones)", 1) - .toolTipFinisher(Tags.MODNAME); - return tt; - } - - @Override - public String[] getStructureDescription(ItemStack stackSize) { - List info = new ArrayList<>(Arrays.asList(super.getStructureDescription(stackSize))); - info.add("The dirt is from RandomThings, must be tilled"); - info.add("Purple lamps are from ProjectRedIllumination. They can be powered and/or inverted"); - return info.toArray(new String[] {}); - } - - // endregion tooltip - - // region (de)constructor - - public GT_MetaTileEntity_ExtremeIndustrialGreenhouse(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_ExtremeIndustrialGreenhouse(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { - return new GT_MetaTileEntity_ExtremeIndustrialGreenhouse(this.mName); - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - if (this.toMigrate != null) { - // Create the new buckets respectively. - if (this.mode == EIGModes.IC2) { - for (EIGMigrationHolder holder : toMigrate) { - // We will have to revalidate the seeds on the next cycle. - this.buckets - .add(new EIGIC2Bucket(holder.seed, holder.count, holder.supportBlock, holder.useNoHumidity)); - } - } else { - this.mode = EIGModes.Normal; - for (EIGMigrationHolder holder : toMigrate) { - holder.seed.stackSize = holder.count; - EIGBucket bucket = this.mode.tryCreateNewBucket(this, holder.seed, Integer.MAX_VALUE, false); - if (bucket == null) { - // if we somehow can't grow the seed, try ejecting it at least. - holder.seed.stackSize = holder.count; - this.addOutput(holder.seed); - continue; - } - this.buckets.add(bucket); - } - } - } - } - - /** - * Ejects all the seeds when the controller is broken. - */ - @Override - public void onRemoval() { - super.onRemoval(); - - // attempt to empty all buckets - buckets.removeIf(this::tryEmptyBucket); - if (buckets.isEmpty()) return; - - // attempt to drop non outputted items into the world. - IGregTechTileEntity mte = this.getBaseMetaTileEntity(); - for (EIGBucket bucket : this.buckets) { - for (ItemStack stack : bucket.tryRemoveSeed(bucket.getSeedCount(), false)) { - EntityItem entityitem = new EntityItem( - mte.getWorld(), - mte.getXCoord(), - mte.getYCoord(), - mte.getZCoord(), - stack); - entityitem.delayBeforeCanPickup = 10; - mte.getWorld() - .spawnEntityInWorld(entityitem); - } - } - } - - // endregion - - // region tool interactions - - /** - * Right click = change setup phase - * Shift+Right Click = change EIG Mode - */ - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ, - ItemStack aTool) { - if (aPlayer.isSneaking()) { - tryChangeMode(aPlayer); - } else { - tryChangeSetupPhase(aPlayer); - } - } - - /** - * Right-Clicking with wire cutters toggle no hydration mode. - */ - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ, ItemStack aTool) { - this.tryChangeHumidityMode(aPlayer); - return true; - } - - // endregion tool interactions - - // region mode change standardisation - - /** - * Attempts to change the setup phase of the EIG to the next mode - * - * @param aPlayer The player to notify for success and errors - */ - private void tryChangeSetupPhase(EntityPlayer aPlayer) { - // TODO: Create l10n entries for the setup phase change messages. - if (this.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(aPlayer, "You can't enable/disable setup if the machine is working!"); - return; - } - this.setupPhase++; - if (this.setupPhase == 3) this.setupPhase = 0; - String phaseChangeMessage = "EIG is now running in "; - switch (this.setupPhase) { - case 0: - phaseChangeMessage += "operational mode."; - break; - case 1: - phaseChangeMessage += "seed input mode."; - break; - case 2: - phaseChangeMessage += "seed output mode."; - break; - default: - phaseChangeMessage += "an invalid mode please send us a ticket!"; - break; - } - this.updateSeedLimits(); - GT_Utility.sendChatToPlayer(aPlayer, phaseChangeMessage); - } - - /** - * Attempts to change the mode of the EIG to the next mode. - * - * @param aPlayer The player to notify of success and errors - */ - private void tryChangeMode(EntityPlayer aPlayer) { - // TODO: Create l10n entries for the mode change messages. - if (this.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(aPlayer, "You can't change mode if the machine is working!"); - return; - } - if (!this.buckets.isEmpty()) { - GT_Utility.sendChatToPlayer(aPlayer, "You can't change mode if there are seeds inside!"); - return; - } - this.mode = EIGModes.getNextMode(this.mode); - this.updateSeedLimits(); - GT_Utility.sendChatToPlayer(aPlayer, "Changed mode to: " + this.mode.getName()); - } - - /** - * Attempts to toggle the hydration mode of the EIG. - * - * @param aPlayer The player to notify for success and errors - */ - private void tryChangeHumidityMode(EntityPlayer aPlayer) { - // TODO: Create l10n entries for the humidity status interactions. - this.useNoHumidity = !this.useNoHumidity; - if (this.useNoHumidity) { - GT_Utility.sendChatToPlayer(aPlayer, "No Humidity mode enabled."); - } else { - GT_Utility.sendChatToPlayer(aPlayer, "No Humidity mode disabled."); - } - } - - // endregion mode change standardisation - - // region (de)serialisations - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setInteger("version", NBT_REVISION); - aNBT.setByte("glassTier", this.glassTier); - aNBT.setInteger("setupPhase", this.setupPhase); - aNBT.setString("mode", this.mode.getName()); - aNBT.setBoolean("isNoHumidity", this.useNoHumidity); - NBTTagList bucketListNBT = new NBTTagList(); - for (EIGBucket b : this.buckets) { - bucketListNBT.appendTag(b.save()); - } - aNBT.setTag( - "progress", - this.dropTracker.intersect(this.guiDropTracker) - .save()); - aNBT.setTag("buckets", bucketListNBT); - } - - private static class EIGMigrationHolder { - - public final ItemStack seed; - public final ItemStack supportBlock; - public final boolean useNoHumidity; - public int count; - public boolean isValid = false; - - public EIGMigrationHolder(NBTTagCompound nbt) { - this.seed = readItemStackFromNBT(nbt.getCompoundTag("input")); - this.count = this.seed.stackSize; - this.seed.stackSize = 1; - this.supportBlock = nbt.hasKey("undercrop", 10) ? readItemStackFromNBT(nbt.getCompoundTag("undercrop")) - : null; - this.useNoHumidity = nbt.getBoolean("noHumidity"); - this.isValid = true; - } - - public String getKey() { - if (this.supportBlock == null) return seed.toString(); - return "(" + this.seed.toString() + "," + this.supportBlock + ")"; - } - - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - int revision = aNBT.hasKey("version", 3) ? aNBT.getInteger("version") : 0; - if (revision <= 0) { - // migrate old EIG with greenhouse slots to new Bucker mode and fix variable names - this.glassTier = aNBT.getByte("glasTier"); - this.setupPhase = aNBT.getInteger("setupphase"); - this.mode = aNBT.getBoolean("isIC2Mode") ? EIGModes.IC2 : EIGModes.Normal; - this.useNoHumidity = aNBT.getBoolean("isNoHumidity"); - // aggregate all seed types - HashMap toMigrate = new HashMap<>(); - for (int i = 0; i < aNBT.getInteger("mStorageSize"); i++) { - EIGMigrationHolder holder = new EIGMigrationHolder(aNBT.getCompoundTag("mStorage." + i)); - if (toMigrate.containsKey(holder.getKey())) { - toMigrate.get(holder.getKey()).count += holder.count; - } else { - toMigrate.put(holder.getKey(), holder); - } - } - - this.toMigrate = toMigrate.values(); - } else { - this.glassTier = aNBT.getByte("glassTier"); - this.setupPhase = aNBT.getInteger("setupPhase"); - this.mode = EIGModes.getModeFromName(aNBT.getString("mode")); - this.useNoHumidity = aNBT.getBoolean("isNoHumidity"); - this.mode.restoreBuckets(aNBT.getTagList("buckets", 10), this.buckets); - new EIGDropTable(aNBT.getTagList("progress", 10)).addTo(this.dropTracker); - } - } - - // endregion - - // region crop visuals rendering - - @SideOnly(Side.CLIENT) - public void spawnVisualCrops(World world, int x, int y, int z, int age) { - CropRenderer crop = new CropRenderer(world, x, y, z, age); - Minecraft.getMinecraft().effectRenderer.addEffect(crop); - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isClientSide()) { - if (aBaseMetaTileEntity.isActive() && aTick % 40 == 0) { - int[] abc = new int[] { 0, -2, 2 }; - int[] xyz = new int[] { 0, 0, 0 }; - this.getExtendedFacing() - .getWorldOffset(abc, xyz); - xyz[0] += aBaseMetaTileEntity.getXCoord(); - xyz[1] += aBaseMetaTileEntity.getYCoord(); - xyz[2] += aBaseMetaTileEntity.getZCoord(); - spawnVisualCrops(aBaseMetaTileEntity.getWorld(), xyz[0], xyz[1], xyz[2], 40); - } - } - } - - // endregion crop visuals rendering - - /** - * Calculates the total amount of seeds in the EIG - * - * @return The number of seeds in the EIG. - */ - private int getTotalSeedCount() { - // null check is to prevent a occasional weird NPE from MUI - return this.buckets.parallelStream() - .reduce(0, (b, t) -> b + t.getSeedCount(), Integer::sum); - } - - /** - * Updates the max seed counts of the machine - */ - private void updateSeedLimits() { - this.maxSeedTypes = this.mode.getSlotCount(getVoltageTier()); - this.maxSeedCount = this.maxSeedTypes * this.mode.getSeedCapacityPerSlot(); - } - - /** - * Attempts to drain the multi of a given fluid, will only return true if all fluid is consumed. - * - * @param toConsume A fluid stack of the fluid to consume. - * @param drainPartial True to allow partial consumption. - * @return True when all the fluid has been consumed. - */ - private boolean tryDrain(FluidStack toConsume, boolean drainPartial) { - // Nothing to consume = success I guess? - if (toConsume == null || toConsume.amount <= 0) return true; - // TODO: improve fluid draining logic. - List fluids = this.getStoredFluids(); - List fluidsToUse = new ArrayList<>(fluids.size()); - int remaining = toConsume.amount; - for (FluidStack fluid : fluids) { - if (fluid.isFluidEqual(toConsume)) { - remaining -= fluid.amount; - fluidsToUse.add(fluid); - if (remaining <= 0) break; - } - } - if (!drainPartial && remaining > 0 && !debug) return false; - boolean success = remaining <= 0; - remaining = toConsume.amount - Math.max(0, remaining); - for (FluidStack fluid : fluidsToUse) { - int used = Math.min(remaining, fluid.amount); - fluid.amount -= used; - remaining -= used; - } - return success; - } - - /** - * Checks if a stack contains an item that can be used as fertilizer - * - * @param item A stack of item to validate - * @return True if the item can be consumed as fertilizer. - */ - public static boolean isFertilizer(ItemStack item) { - if (item == null || item.stackSize <= 0) return false; - for (ItemStack fert : FERTILIZER_ITEM_LIST) { - if (GT_Utility.areStacksEqual(item, fert)) return true; - } - return false; - } - - private boolean tryEmptyBucket(EIGBucket bucket) { - // check if it's already empty - if (bucket.getSeedCount() <= 0) return true; - - // check if we have an ME output bus to output to. - for (GT_MetaTileEntity_Hatch_OutputBus tHatch : filterValidMTEs(mOutputBusses)) { - if (!(tHatch instanceof GT_MetaTileEntity_Hatch_OutputBus_ME)) continue; - for (ItemStack stack : bucket.tryRemoveSeed(bucket.getSeedCount(), false)) { - ((GT_MetaTileEntity_Hatch_OutputBus_ME) tHatch).store(stack); - } - return true; - } - - // Else attempt to empty the bucket while not voiding anything. - ItemStack[] simulated = bucket.tryRemoveSeed(1, true); - VoidProtectionHelper helper = new VoidProtectionHelper().setMachine(this, true, false) - .setItemOutputs(simulated) - .setMaxParallel(bucket.getSeedCount()) - .build(); - if (helper.getMaxParallel() > 0) { - for (ItemStack toOutput : bucket.tryRemoveSeed(helper.getMaxParallel(), false)) { - for (GT_MetaTileEntity_Hatch_OutputBus tHatch : filterValidMTEs(mOutputBusses)) { - if (tHatch.storeAll(toOutput)) break; - } - } - } - return bucket.getSeedCount() <= 0; - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - int tier = getVoltageTier(); - updateSeedLimits(); - - if (setupPhase > 0) { - if ((buckets.size() >= maxSeedTypes && setupPhase == 1) || (buckets.isEmpty() && setupPhase == 2)) - return CheckRecipeResultRegistry.NO_RECIPE; - - if (setupPhase == 1) { - List inputs = getStoredInputs(); - for (ItemStack input : inputs) { - addCrop(input); - if (buckets.size() >= maxSeedTypes) break; - } - } else if (setupPhase == 2) { - for (Iterator iterator = this.buckets.iterator(); iterator.hasNext();) { - EIGBucket bucket = iterator.next(); - if (tryEmptyBucket(bucket)) { - iterator.remove(); - } else { - this.mMaxProgresstime = 20; - this.lEUt = 0; - return CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; - } - } - } - - this.updateSlots(); - this.mMaxProgresstime = 5; - this.lEUt = 0; - this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - return CheckRecipeResultRegistry.SUCCESSFUL; - } - if (this.maxSeedTypes < this.buckets.size()) { - return SimpleCheckRecipeResult.ofFailure("EIG_slotoverflow"); - } - int seedCount = this.getTotalSeedCount(); - if (this.maxSeedCount < seedCount) { - return SimpleCheckRecipeResult.ofFailure("EIG_seedOverflow"); - } - - // Kick out bad buckets. - for (Iterator iterator = this.buckets.iterator(); iterator.hasNext();) { - EIGBucket bucket = iterator.next(); - if (bucket.isValid() || bucket.revalidate(this)) continue; - // attempt to empty the bucket - tryEmptyBucket(bucket); - // remove empty bucket and attempt to revalidate invalid buckets - if (bucket.getSeedCount() <= 0) { - iterator.remove(); - } - } - - if (this.buckets.isEmpty()) return CheckRecipeResultRegistry.NO_RECIPE; - - // Compute the Weed-EX and water requirements, - // TODO: We only really need to update water usage and WeedEX usage when adding seeds or when loading NBT. - this.waterUsage = seedCount * 1000; - this.weedEXUsage = (seedCount >= EIG_BALANCE_WEED_EX_USAGE_BEGINS_AT ? seedCount : 0) - * this.mode.getWeedEXMultiplier(); - - // Consume water, fail if we don't have enough - if (!this.tryDrain(new FluidStack(FluidRegistry.WATER, this.waterUsage), false)) { - return SimpleCheckRecipeResult.ofFailure("EIG_missingwater"); - } - - // Consume weed ex, if there isn't enough we consume what's there but don't fail - if (weedEXUsage > 0 && !this.tryDrain(new FluidStack(WEEDEX_FLUID, this.weedEXUsage), true)) { - IGregTechTileEntity baseMTE = this.getBaseMetaTileEntity(); - // Cap seed murder to the Weed EX limit, no more senseless murder of bystanders - int killLimit = (seedCount - EIG_BALANCE_WEED_EX_USAGE_BEGINS_AT + 1); - int toKill = Math.min(killLimit, baseMTE.getRandomNumber((int) ((double) seedCount * 0.02d) + 1)); - if (toKill > 0) { - for (Iterator iterator = this.buckets.iterator(); iterator.hasNext();) { - EIGBucket bucket = iterator.next(); - ItemStack[] removed = bucket.tryRemoveSeed(toKill, false); - if (removed == null || removed[0].stackSize <= 0) continue; - toKill -= removed[0].stackSize; - // if bucket is empty, yeet it out. - if (bucket.getSeedCount() <= 0) iterator.remove(); - // if we are out of crops to kill we can just leave - if (toKill <= 0) break; - } - } - } - - // OVERCLOCK - // FERTILIZER IDEA: - // IC2 +10% per fertilizer per crop per operation - // NORMAL +200% per fertilizer per crop per operation - - int consumedFertilizer = 0; - int maxFertilizerToConsume = 0; - for (EIGBucket bucket : this.buckets) - maxFertilizerToConsume += bucket.getSeedCount() * this.mode.getMaxFertilizerUsagePerSeed(); - - ArrayList inputs = getStoredInputs(); - for (ItemStack i : inputs) { - if (isFertilizer(i)) { - int used = Math.min(i.stackSize, maxFertilizerToConsume - consumedFertilizer); - i.stackSize -= used; - consumedFertilizer += used; - } - if (consumedFertilizer == maxFertilizerToConsume) break; - } - double multiplier = 1.d - + (((double) consumedFertilizer / (double) maxFertilizerToConsume) * EIG_BALANCE_MAX_FERTILIZER_BOOST); - - // compute drops based on the drop tracker - this.guiDropTracker = new EIGDropTable(); - if (this.mode == EIGModes.IC2) { - if (glassTier < (EIG_BALANCE_IC2_ACCELERATOR_TIER + 1)) - return SimpleCheckRecipeResult.ofFailure("EIG_ic2glass"); - this.mMaxProgresstime = 100; - // determine the amount of time we are simulating on the seed. - double timeElapsed = ((double) this.mMaxProgresstime * (1 << EIG_BALANCE_IC2_ACCELERATOR_TIER)); - // Add drops to the drop tracker for each seed bucket. - for (EIGBucket bucket : this.buckets) { - bucket.addProgress(timeElapsed * multiplier, this.guiDropTracker); - } - } else if (this.mode == EIGModes.Normal) { - this.mMaxProgresstime = Math.max(20, 100 / (tier - 3)); // Min 1 s - for (EIGBucket bucket : this.buckets) { - bucket.addProgress(multiplier, this.guiDropTracker); - } - } - - this.guiDropTracker.addTo(this.dropTracker, multiplier); - this.mOutputItems = this.dropTracker.getDrops(); - - // consume power - this.lEUt = -(long) ((double) GT_Values.V[tier] * 0.99d); - this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - this.updateSlots(); - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - private ItemStack addCrop(ItemStack input) { - return addCrop(input, false) ? input : null; - } - - /** - * Adds a seed to the EIG - * - * @param input The item to add to the EIG. - * @param simulate Set to true to not actually consume any input. - * @return True if all items were consumed - */ - private boolean addCrop(ItemStack input, boolean simulate) { - // Nothing to add = success since technically nothing should have changed? - if (input == null || input.stackSize <= 0) return true; - - // For safety's sake copy the input if we are simulating to make sure we aren't modifying it - if (simulate) input = input.copy(); - - // Cap input count to current seed max - int addCap = Math.min(input.stackSize, this.maxSeedCount - this.getTotalSeedCount()); - if (addCap <= 0) return false; - - // Attempt to find a compatible bucket that already exists - for (EIGBucket bucket : this.buckets) { - int consumed = bucket.tryAddSeed(this, input, addCap, simulate); - if (consumed <= 0) continue; - return input.stackSize <= 0; - } - - // Check if we have space for a new bucket - if (this.maxSeedTypes <= this.buckets.size()) { - return false; - } - - // try creating a new bucket, this only returns valid buckets. - EIGBucket bucket = this.mode.tryCreateNewBucket(this, input, addCap, simulate); - if (bucket == null) return false; - this.buckets.add(bucket); - return input.stackSize <= 0; - } - - // region ui - - private static final UIInfo GreenhouseUI = createKTMetaTileEntityUI( - KT_ModulaUIContainer_ExtremeIndustrialGreenhouse::new); - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) return true; - GreenhouseUI.open( - aPlayer, - aBaseMetaTileEntity.getWorld(), - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord()); - return true; - } - - private static class KT_ModulaUIContainer_ExtremeIndustrialGreenhouse extends ModularUIContainer { - - final WeakReference parent; - - public KT_ModulaUIContainer_ExtremeIndustrialGreenhouse(ModularUIContext context, ModularWindow mainWindow, - GT_MetaTileEntity_ExtremeIndustrialGreenhouse mte) { - super(context, mainWindow); - parent = new WeakReference<>(mte); - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) { - if (!(aPlayer instanceof EntityPlayerMP)) return super.transferStackInSlot(aPlayer, aSlotIndex); - final Slot s = getSlot(aSlotIndex); - if (s == null) return super.transferStackInSlot(aPlayer, aSlotIndex); - if (aSlotIndex >= 36) return super.transferStackInSlot(aPlayer, aSlotIndex); - final ItemStack aStack = s.getStack(); - if (aStack == null) return super.transferStackInSlot(aPlayer, aSlotIndex); - GT_MetaTileEntity_ExtremeIndustrialGreenhouse mte = parent.get(); - if (mte == null) return super.transferStackInSlot(aPlayer, aSlotIndex); - // if (mte.buckets.size() >= mte.maxSeedTypes) return super.transferStackInSlot(aPlayer, aSlotIndex); - if (mte.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(aPlayer, EnumChatFormatting.RED + "Can't insert while running !"); - return super.transferStackInSlot(aPlayer, aSlotIndex); - } - - mte.addCrop(aStack); - if (aStack.stackSize <= 0) s.putStack(null); - else s.putStack(aStack); - detectAndSendChanges(); - return null; - } - } - - @Override - protected void addConfigurationWidgets(DynamicPositionedRow configurationElements, UIBuildContext buildContext) { - buildContext.addSyncedWindow(CONFIGURATION_WINDOW_ID, this::createConfigurationWindow); - configurationElements.setSynced(false); - configurationElements.widget( - new ButtonWidget().setOnClick( - (clickData, widget) -> { - if (!widget.isClient()) widget.getContext() - .openSyncedWindow(CONFIGURATION_WINDOW_ID); - }) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_CYCLIC) - .addTooltip("Configuration") - .setSize(16, 16)); - } - - EIGDynamicInventory dynamicInventory = new EIGDynamicInventory<>( - 128, - 60, - () -> this.maxSeedTypes, - () -> this.maxSeedCount, - this.buckets::size, - this::getTotalSeedCount, - this.buckets, - EIGBucket::getSeedStack).allowInventoryInjection(this::addCrop) - .allowInventoryExtraction((bucket, player) -> { - if (bucket == null) return null; - int maxRemove = bucket.getSeedStack() - .getMaxStackSize(); - ItemStack[] outputs = bucket.tryRemoveSeed(maxRemove, false); - if (outputs == null || outputs.length <= 0) return null; - ItemStack ret = outputs[0]; - for (int i = 1; i < outputs.length; i++) { - ItemStack suppertItem = outputs[i]; - if (!player.inventory.addItemStackToInventory(suppertItem)) { - player.entityDropItem(suppertItem, 0.f); - } ; - } - if (bucket.getSeedCount() <= 0) this.buckets.remove(bucket); - return ret; - }) - // TODO: re-add allow inventory replace? - .setEnabled(() -> this.mMaxProgresstime == 0); - - @Override - public void createInventorySlots() { - - } - - private boolean isInInventory = true; - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - isInInventory = !getBaseMetaTileEntity().isActive(); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(4, 4) - .setSize(190, 85) - .setEnabled(w -> !isInInventory)); - builder.widget( - dynamicInventory.asWidget(builder, buildContext) - .setPos(10, 16) - .setEnabled(w -> isInInventory)); - - builder.widget( - new CycleButtonWidget().setToggle(() -> isInInventory, i -> isInInventory = i) - .setTextureGetter(i -> i == 0 ? new Text("Inventory") : new Text("Status")) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .setPos(140, 4) - .setSize(55, 16)); - - final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); - drawTexts(screenElements, null); - builder.widget(screenElements.setEnabled(w -> !isInInventory)); - - builder.widget(createPowerSwitchButton(builder)) - .widget(createVoidExcessButton(builder)) - .widget(createInputSeparationButton(builder)) - .widget(createBatchModeButton(builder)) - .widget(createLockToSingleRecipeButton(builder)) - .widget(createStructureUpdateButton(builder)); - - DynamicPositionedRow configurationElements = new DynamicPositionedRow(); - addConfigurationWidgets(configurationElements, buildContext); - - builder.widget( - configurationElements.setSpace(2) - .setAlignment(MainAxisAlignment.SPACE_BETWEEN) - .setPos(getRecipeLockingButtonPos().add(18, 0))); - } - - protected ModularWindow createConfigurationWindow(final EntityPlayer player) { - ModularWindow.Builder builder = ModularWindow.builder(200, 100); - builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.OVERLAY_BUTTON_CYCLIC) - .setPos(5, 5) - .setSize(16, 16)) - .widget(new TextWidget("Configuration").setPos(25, 9)) - .widget( - ButtonWidget.closeWindowButton(true) - .setPos(185, 3)) - .widget( - new Column().widget( - new CycleButtonWidget().setLength(3) - .setGetter(() -> this.setupPhase) - .setSetter(val -> { - if (!(player instanceof EntityPlayerMP)) return; - tryChangeSetupPhase(player); - }) - .addTooltip(0, new Text("Operating").color(Color.GREEN.dark(3))) - .addTooltip(1, new Text("Input").color(Color.YELLOW.dark(3))) - .addTooltip(2, new Text("Output").color(Color.YELLOW.dark(3))) - .setTextureGetter( - i -> i == 0 ? new Text("Operating").color(Color.GREEN.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0) - : i == 1 ? new Text("Input").color(Color.YELLOW.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0) - : new Text("Output").color(Color.YELLOW.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0)) - .setBackground( - ModularUITextures.VANILLA_BACKGROUND, - GT_UITextures.OVERLAY_BUTTON_CYCLIC.withFixedSize(18, 18)) - .setSize(70, 18) - .addTooltip("Setup mode")) - .widget( - new CycleButtonWidget().setLength(2) - .setGetter(() -> this.mode.getUIIndex()) - .setSetter(val -> { - if (!(player instanceof EntityPlayerMP)) return; - tryChangeMode(player); - }) - .addTooltip(0, new Text("Disabled").color(Color.RED.dark(3))) - .addTooltip(1, new Text("Enabled").color(Color.GREEN.dark(3))) - .setTextureGetter( - i -> i == 0 ? new Text("Disabled").color(Color.RED.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0) - : new Text("Enabled").color(Color.GREEN.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0)) - .setBackground( - ModularUITextures.VANILLA_BACKGROUND, - GT_UITextures.OVERLAY_BUTTON_CYCLIC.withFixedSize(18, 18)) - .setSize(70, 18) - .addTooltip("IC2 mode")) - .widget( - new CycleButtonWidget().setLength(2) - .setGetter(() -> useNoHumidity ? 1 : 0) - .setSetter(val -> { - if (!(player instanceof EntityPlayerMP)) return; - this.tryChangeHumidityMode(player); - }) - .addTooltip(0, new Text("Disabled").color(Color.RED.dark(3))) - .addTooltip(1, new Text("Enabled").color(Color.GREEN.dark(3))) - .setTextureGetter( - i -> i == 0 ? new Text("Disabled").color(Color.RED.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0) - : new Text("Enabled").color(Color.GREEN.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0)) - .setBackground( - ModularUITextures.VANILLA_BACKGROUND, - GT_UITextures.OVERLAY_BUTTON_CYCLIC.withFixedSize(18, 18)) - .setSize(70, 18) - .addTooltip("No Humidity mode")) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive()) - .setPos(10, 30)) - .widget( - new Column().widget(new TextWidget("Setup mode").setSize(100, 18)) - .widget(new TextWidget("IC2 mode").setSize(100, 18)) - .widget(new TextWidget("No Humidity mode").setSize(100, 18)) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive()) - .setPos(80, 30)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.OVERLAY_BUTTON_CROSS) - .setSize(18, 18) - .setPos(10, 30) - .addTooltip(new Text("Can't change configuration when running !").color(Color.RED.dark(3))) - .setEnabled(widget -> getBaseMetaTileEntity().isActive())); - return builder.build(); - } - - @Override - protected String generateCurrentRecipeInfoString() { - StringBuilder ret = new StringBuilder(EnumChatFormatting.WHITE + "Progress: ") - .append(String.format("%,.2f", (double) this.mProgresstime / 20)) - .append("s / ") - .append(String.format("%,.2f", (double) this.mMaxProgresstime / 20)) - .append("s (") - .append(String.format("%,.1f", (double) this.mProgresstime / this.mMaxProgresstime * 100)) - .append("%)\n"); - - for (Map.Entry drop : this.synchedGUIDropTracker.entrySet() - .stream() - .sorted( - Comparator.comparing( - a -> a.getKey() - .toString() - .toLowerCase())) - .collect(Collectors.toList())) { - int outputSize = Arrays.stream(this.mOutputItems) - .filter(s -> s.isItemEqual(drop.getKey())) - .mapToInt(i -> i.stackSize) - .sum(); - ret.append(EnumChatFormatting.AQUA) - .append( - drop.getKey() - .getDisplayName()) - .append(EnumChatFormatting.WHITE) - .append(": "); - if (outputSize == 0) { - ret.append(String.format("%.2f", drop.getValue() * 100)) - .append("%\n"); - } else { - ret.append(EnumChatFormatting.GOLD) - .append( - String.format( - "x%d %s(+%.2f/sec)\n", - outputSize, - EnumChatFormatting.WHITE, - (double) outputSize / (mMaxProgresstime / 20))); - } - } - return ret.toString(); - } - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - screenElements.widget( - new FakeSyncWidget.BooleanSyncer( - () -> this.mode == EIGModes.IC2, - b -> this.mode = b ? EIGModes.IC2 : EIGModes.Normal)); - screenElements.widget(new FakeSyncWidget<>(() -> { - HashMap ret = new HashMap<>(); - - for (Map.Entry drop : this.guiDropTracker.entrySet()) { - ret.merge(drop.getKey(), drop.getValue(), Double::sum); - } - - return ret; - }, h -> this.synchedGUIDropTracker = h, (buffer, h) -> { - buffer.writeVarIntToBuffer(h.size()); - for (Map.Entry itemStackDoubleEntry : h.entrySet()) { - try { - buffer.writeItemStackToBuffer(itemStackDoubleEntry.getKey()); - buffer.writeDouble(itemStackDoubleEntry.getValue()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - }, buffer -> { - int len = buffer.readVarIntFromBuffer(); - HashMap ret = new HashMap<>(len); - for (int i = 0; i < len; i++) { - try { - ret.put(buffer.readItemStackFromBuffer(), buffer.readDouble()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - return ret; - })); - super.drawTexts(screenElements, inventorySlot); - } - - @Override - public String[] getInfoData() { - List info = new ArrayList<>( - Arrays.asList( - "Running in mode: " + EnumChatFormatting.GREEN - + (this.setupPhase == 0 ? this.mode.getName() - : ("Setup mode " + (this.setupPhase == 1 ? "(input)" : "(output)"))) - + EnumChatFormatting.RESET, - "Uses " + waterUsage + "L/operation of water", - "Uses " + weedEXUsage + "L/second of Weed-EX 9000", - "Max slots: " + EnumChatFormatting.GREEN + this.maxSeedTypes + EnumChatFormatting.RESET, - "Used slots: " - + ((this.buckets.size() > maxSeedTypes) ? EnumChatFormatting.RED : EnumChatFormatting.GREEN) - + this.buckets.size() - + EnumChatFormatting.RESET)); - for (EIGBucket bucket : buckets) { - info.add(bucket.getInfoData()); - } - if (this.buckets.size() > this.maxSeedTypes) { - info.add( - EnumChatFormatting.DARK_RED + "There are too many seed types inside to run!" - + EnumChatFormatting.RESET); - } - if (this.getTotalSeedCount() > this.maxSeedCount) { - info.add( - EnumChatFormatting.DARK_RED + "There are too many seeds inside to run!" + EnumChatFormatting.RESET); - } - info.addAll(Arrays.asList(super.getInfoData())); - return info.toArray(new String[0]); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; - } - - // endregion ui -} diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java deleted file mode 100644 index aecebe8da9..0000000000 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/GT_MetaTileEntity_MegaIndustrialApiary.java +++ /dev/null @@ -1,1175 +0,0 @@ -/* - * spotless:off - * KubaTech - Gregtech Addon - * Copyright (C) 2022 - 2024 kuba6000 - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this library. If not, see . - * spotless:on - */ - -package kubatech.tileentity.gregtech.multiblock; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksMap; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static forestry.api.apiculture.BeeManager.beeRoot; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; -import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static kubatech.api.Variables.StructureHologram; -import static kubatech.api.Variables.buildAuthorList; -import static kubatech.api.utils.ItemUtils.readItemStackFromNBT; -import static kubatech.api.utils.ItemUtils.writeItemStackToNBT; - -import java.io.IOException; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -import net.minecraft.client.Minecraft; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.inventory.Slot; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; - -import org.jetbrains.annotations.NotNull; - -import com.github.bartimaeusnek.bartworks.API.BorosilicateGlass; -import com.gtnewhorizon.structurelib.StructureLibAPI; -import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.ModularUITextures; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.drawable.shapes.Rectangle; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.math.MainAxisAlignment; -import com.gtnewhorizons.modularui.api.screen.ModularUIContext; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.builder.UIInfo; -import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; -import com.gtnewhorizons.modularui.common.widget.Column; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.DrawableWidget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.kuba6000.mobsinfo.api.utils.ItemID; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import forestry.api.apiculture.EnumBeeType; -import forestry.api.apiculture.FlowerManager; -import forestry.api.apiculture.IAlleleBeeSpecies; -import forestry.api.apiculture.IBee; -import forestry.api.apiculture.IBeeGenome; -import forestry.api.apiculture.IBeeModifier; -import forestry.api.apiculture.IBeekeepingMode; -import forestry.apiculture.blocks.BlockAlveary; -import forestry.apiculture.blocks.BlockApicultureType; -import forestry.apiculture.genetics.Bee; -import forestry.plugins.PluginApiculture; -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.Textures; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Energy; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.recipe.check.SimpleCheckRecipeResult; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_Utility; -import ic2.core.init.BlocksItems; -import ic2.core.init.InternalName; -import kubatech.Tags; -import kubatech.api.DynamicInventory; -import kubatech.api.implementations.KubaTechGTMultiBlockBase; -import kubatech.client.effect.MegaApiaryBeesRenderer; - -public class GT_MetaTileEntity_MegaIndustrialApiary - extends KubaTechGTMultiBlockBase implements ISurvivalConstructable { - - private byte mGlassTier = 0; - private int mCasing = 0; - private int mMaxSlots = 0; - private int mPrimaryMode = 0; - private int mSecondaryMode = 0; - private final ArrayList mStorage = new ArrayList<>(); - - private static final ItemStack royalJelly = PluginApiculture.items.royalJelly.getItemStack(1); - private static final int CASING_INDEX = 10; - private static final String STRUCTURE_PIECE_MAIN = "main"; - private static final String STRUCTURE_PIECE_MAIN_SURVIVAL = "mainsurvival"; - private static final int CONFIGURATION_WINDOW_ID = 999; - private static final int MEGA_APIARY_STORAGE_VERSION = 2; - - private static final String[][] struct = transpose( - new String[][] { // spotless:off - {" "," "," "," HHH "," HHAAAHH "," HAPLPAH "," HAPAAAPAH "," HALAAALAH "," HAPAAAPAH "," HAPLPAH "," HHAAAHH "," HHH "," "," "," "}, - {" "," "," GGG "," GGG GG "," G G "," G G "," G G "," G G "," G G "," G G "," G G "," GG GG "," GGG "," "," "}, - {" "," HHH "," HHH HHH "," H GH "," H H "," H H "," H H "," H H "," H H "," H H "," H H "," HG GH "," HHH HHH "," HHH "," "}, - {" GGG "," GGG GGG "," G G "," G G "," G G "," G G ","G G","G G","G G"," G G "," G G "," G G "," G G "," GGG GGG "," GGG "}, - {" AAA "," OLA ALO "," P P "," O O "," L L "," A A ","A A","A A","A A"," A A "," L L "," O O "," P P "," OLA ALO "," AAA "}, - {" AAAAA "," NA AO "," P P "," N O "," A A ","A A","A III A","A III A","A III A","A A"," A A "," N N "," P P "," NA AN "," AAAAA "}, - {" AAAAA "," NA FFF AO "," PFF FFP "," NF FFO "," AF FA ","A A","AF JJJ FA","AF JKJ FA","AF JJJ FA","A A"," AF FA "," NFF FFN "," PFF FFP "," NA FFF AN "," AAAAA "}, - {" AAA "," OLAFFFALO "," PFFFFFFFFFP "," OFFFF FFFFO "," LFF FFL "," AFF FFFFF FA ","AFF FKKKFF FFA","AFF FFKKKFF FFA","AFF FFKKKF FFA"," AF FFFFF FA "," LFF FF FFL "," OFFFF FFFO "," PFFFFFFFFFP "," OLAFFFALO "," AAA "}, - {" G~G "," GGGBBBGGG "," GBBFFFFFBBG "," GBFFF FFBBG "," GBF FBG "," GFF FFFFF FG ","GBF FKKKFF FBG","GBF FFKJKFF FBG","GBF FFKKKF FBG"," GF FFFFF FG "," GBF FF FBG "," GBBFF FBBG "," GBBFFFFFBBG "," GGGBBBGGG "," GGG "}, - {" HHH "," HHBBBHH "," HHBBBBBBBHH "," HBBBWWWBBBH "," HBBWWWWWWWBBH "," HBBWBBBBBWWBH ","HBBWWBBBBBBWBBH","HBBWBBBBBBBWBBH","HBBWBBBBBBWWBBH"," HBWWBBBBBWWBH "," HBBWWWBBWWBBH "," HBBBWWWWBBH "," HHBBBBBBBHH "," HHBBBHH "," HHH "}, - {" "," GGGGG "," GGGBBBBGG "," GBBBBBBBBBG "," GBBBBBBBBBG "," GBBBBBBBBBBBG "," GBBBBBBBBBBBG "," GBBBBBBBBBBBG "," GBBBBBBBBBBBG "," GBBBBBBBBBBBG "," GBBBBBBBBBG "," GBBBBBBBBBG "," GGBBBBBGG "," GGGGG "," "}, - {" "," HHH "," HHBBBHH "," HBBBBBBBH "," HBBBBBBBBBH "," HBBBBBBBBBH "," HBBBBBBBBBBBH "," HBBBBBBBBBBBH "," HBBBBBBBBBBBH "," HBBBBBBBBBH "," HBBBBBBBBBH "," HBBBBBBBH "," HHBBBHH "," HHH "," "}, - {" "," "," GGG "," GGBBBGG "," GBBBBBBBG "," GBBBBBBBG "," GBBBBBBBBBG "," GBBBBBBBBBG "," GBBBBBBBBBG "," GBBBBBBBG "," GBBBBBBBG "," GGBBBGG "," GGG "," "," "}, - {" "," "," H "," HHBHH "," HBBBBBH "," HBBBBBBBH "," HBBBBBBBH "," HBBBBBBBBBH "," HBBBBBBBH "," HBBBBBBBH "," HBBBBBH "," HHBHH "," H "," "," "}, - {" "," "," "," G "," GGBGG "," GBBBBBG "," GBBBBBG "," GBBBBBBBG "," GBBBBBG "," GBBBBBG "," GGBGG "," G "," "," "," "}, - {" "," "," "," "," HHH "," HHHHH "," HHBBBHH "," HHBBBHH "," HHBBBHH "," HHBHH "," HHH "," "," "," "," "}, - {" "," "," "," "," "," "," GGG "," GHG "," GGG "," "," "," "," "," "," "} - }); // spotless:on - - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - .addShape(STRUCTURE_PIECE_MAIN, struct) - .addShape( - STRUCTURE_PIECE_MAIN_SURVIVAL, - Arrays.stream(struct) - .map( - sa -> Arrays.stream(sa) - .map( - s -> s.replaceAll("W", " ") - .replaceAll("F", " ")) - .toArray(String[]::new)) - .toArray(String[][]::new)) - .addElement('A', BorosilicateGlass.ofBoroGlass((byte) 0, (t, v) -> t.mGlassTier = v, t -> t.mGlassTier)) - .addElement('B', ofChain(ofBlockAnyMeta(Blocks.dirt, 0), ofBlock(Blocks.grass, 0))) - .addElement( - 'G', - buildHatchAdder(GT_MetaTileEntity_MegaIndustrialApiary.class) - .atLeast(InputBus, OutputBus, Energy, Maintenance) - .casingIndex(CASING_INDEX) - .dot(1) - .buildAndChain(onElementPass(t -> t.mCasing++, ofBlock(GregTech_API.sBlockCasings1, 10)))) - .addElement( - 'H', - ofBlocksMap( - Collections.singletonMap( - Blocks.planks, - IntStream.rangeClosed(0, 5) - .boxed() - .collect(Collectors.toList())), - Blocks.planks, - 5)) - .addElement( - 'I', - ofBlocksMap( - Collections.singletonMap( - Blocks.wooden_slab, - IntStream.rangeClosed(0, 5) - .boxed() - .collect(Collectors.toList())), - Blocks.wooden_slab, - 5)) - .addElement('J', ofBlock(PluginApiculture.blocks.apiculture, BlockApicultureType.APIARY.getMeta())) - .addElement('K', ofBlock(PluginApiculture.blocks.alveary, BlockAlveary.Type.PLAIN.ordinal())) - .addElement('L', ofBlock(PluginApiculture.blocks.alveary, BlockAlveary.Type.HYGRO.ordinal())) - .addElement('N', ofBlock(PluginApiculture.blocks.alveary, BlockAlveary.Type.STABILIZER.ordinal())) - .addElement('O', ofBlock(PluginApiculture.blocks.alveary, BlockAlveary.Type.HEATER.ordinal())) - .addElement('P', ofBlock(PluginApiculture.blocks.alveary, BlockAlveary.Type.FAN.ordinal())) - .addElement( - 'W', - ofChain(ofBlock(Blocks.water, 0), ofBlock(BlocksItems.getFluidBlock(InternalName.fluidDistilledWater), 0))) - .addElement('F', new IStructureElementNoPlacement() { - - @Override - public boolean check(GT_MetaTileEntity_MegaIndustrialApiary mte, World world, int x, int y, int z) { - mte.flowerCheck(world, x, y, z); - return true; - } - - @Override - public boolean spawnHint(GT_MetaTileEntity_MegaIndustrialApiary mte, World world, int x, int y, int z, - ItemStack trigger) { - StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 2 - 1); - return true; - } - }) - .build(); - - @SuppressWarnings("unused") - public GT_MetaTileEntity_MegaIndustrialApiary(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public GT_MetaTileEntity_MegaIndustrialApiary(String aName) { - super(aName); - } - - @Override - public void onRemoval() { - super.onRemoval(); - if (getBaseMetaTileEntity().isServerSide()) - tryOutputAll(mStorage, s -> Collections.singletonList(((BeeSimulator) s).queenStack)); - } - - private boolean isCacheDirty = true; - private final HashMap flowersCache = new HashMap<>(); - private final HashSet flowersCheck = new HashSet<>(); - private boolean flowersError = false; - private boolean needsTVarUpdate = false; - private int megaApiaryStorageVersion = 0; - - private void flowerCheck(final World world, final int x, final int y, final int z) { - if (!flowersCheck.isEmpty() && !world.isAirBlock(x, y, z)) - flowersCheck.removeIf(s -> FlowerManager.flowerRegistry.isAcceptedFlower(s, world, x, y, z)); - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 7, 8, 0); - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN_SURVIVAL, stackSize, 7, 8, 0, elementBudget, env, true); - if (built == -1) { - GT_Utility.sendChatToPlayer( - env.getActor(), - EnumChatFormatting.GREEN + "Auto placing done ! Now go place the water and flowers yourself !"); - return 0; - } - return built; - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - protected IAlignmentLimits getInitialAlignmentLimits() { - return (d, r, f) -> d.offsetY == 0 && r.isNotRotated(); - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Mega Apiary") - .addInfo("Controller block for Industrial Apicultural Acclimatiser and Drone Domestication Station") - .addInfo(buildAuthorList("kuba6000", "Runakai")) - .addInfo("The ideal home for your bees") - .addInfo("Use screwdriver to change primary mode (INPUT/OUTPUT/OPERATING)") - .addInfo("Use screwdriver + shift to change operation mode (NORMAL/SWARMER)") - .addInfo("--------------------- INPUT MODE ---------------------") - .addInfo("- Does not take power") - .addInfo("- Put your queens in the input bus to put them in the internal buffer") - .addInfo("-------------------- OUTPUT MODE ---------------------") - .addInfo("- Does not take power") - .addInfo("- Will give your bees back to output bus") - .addInfo("------------------- OPERATING MODE -------------------") - .addInfo("- NORMAL:") - .addInfo(" - For each " + voltageTooltipFormatted(6) + " amp you can insert 1 bee") - .addInfo(" - Processing time: 5 seconds") - .addInfo(" - Uses 1 " + voltageTooltipFormatted(6) + " amp per queen") - .addInfo(" - All bees are accelerated 64 times") - .addInfo(" - 8 production upgrades are applied") - .addInfo(" - Genetic Stabilizer upgrade applied") - .addInfo(" - Simulates perfect environment for your bees") - .addInfo(" - Additionally you can provide royal jelly to increase the outputs:") - .addInfo(" - 1 royal jelly grants 5% bonus per bee") - .addInfo(" - They will be consumed on each start of operation") - .addInfo(" - and be applied to that operation only") - .addInfo(" - Max bonus: 200%") - .addInfo("- SWARMER:") - .addInfo(" - You can only insert 1 queen") - .addInfo(" - It will slowly produce ignoble princesses") - .addInfo(" - Consumes 100 royal jelly per operation") - .addInfo(" - Base processing time: 1 minute") - .addInfo(" - Uses 1 amp " + voltageTooltipFormatted(5)) - .addInfo(" - Can overclock") - .addInfo(StructureHologram) - .addSeparator() - .beginStructureBlock(15, 17, 15, false) - .addController("Front Bottom Center") - .addCasingInfoMin("Bronze Plated Bricks", 190, false) - .addOtherStructurePart("Borosilicate Glass", "Look at the hologram") - .addStructureInfo("The glass tier limits the Energy Input tier") - .addStructureInfo("Regular water and IC2 Distilled Water are accepted") - .addOtherStructurePart("Flowers", "On dirt/grass", 2) - .addInputBus("Any casing", 1) - .addOutputBus("Any casing", 1) - .addEnergyHatch("Any casing", 1) - .addMaintenanceHatch("Any casing", 1) - .toolTipFinisher(Tags.MODNAME); - return tt; - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setByte("mGlassTier", mGlassTier); - aNBT.setInteger("mPrimaryMode", mPrimaryMode); - aNBT.setInteger("mSecondaryMode", mSecondaryMode); - aNBT.setInteger("mStorageSize", mStorage.size()); - for (int i = 0; i < mStorage.size(); i++) aNBT.setTag( - "mStorage." + i, - mStorage.get(i) - .toNBTTagCompound()); - aNBT.setInteger("MEGA_APIARY_STORAGE_VERSION", MEGA_APIARY_STORAGE_VERSION); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - mGlassTier = aNBT.getByte("mGlassTier"); - mPrimaryMode = aNBT.getInteger("mPrimaryMode"); - mSecondaryMode = aNBT.getInteger("mSecondaryMode"); - for (int i = 0, isize = aNBT.getInteger("mStorageSize"); i < isize; i++) - mStorage.add(new BeeSimulator(aNBT.getCompoundTag("mStorage." + i))); - megaApiaryStorageVersion = aNBT.getInteger("MEGA_APIARY_STORAGE_VERSION"); - flowersCache.clear(); - mStorage.forEach(s -> flowersCache.put(s.flowerType, s.flowerTypeDescription)); - flowersCache.remove(""); - isCacheDirty = false; - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (this.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(aPlayer, "Can't change mode when running !"); - return; - } - if (!aPlayer.isSneaking()) { - mPrimaryMode++; - if (mPrimaryMode == 3) mPrimaryMode = 0; - switch (mPrimaryMode) { - case 0: - GT_Utility.sendChatToPlayer(aPlayer, "Changed primary mode to: Input mode"); - break; - case 1: - GT_Utility.sendChatToPlayer(aPlayer, "Changed primary mode to: Output mode"); - break; - case 2: - GT_Utility.sendChatToPlayer(aPlayer, "Changed primary mode to: Operating mode"); - break; - } - } else { - if (!mStorage.isEmpty()) { - GT_Utility.sendChatToPlayer(aPlayer, "Can't change operating mode when the multi is not empty !"); - return; - } - mSecondaryMode++; - if (mSecondaryMode == 2) mSecondaryMode = 0; - switch (mSecondaryMode) { - case 0: - GT_Utility.sendChatToPlayer(aPlayer, "Changed secondary mode to: Normal mode"); - break; - case 1: - GT_Utility.sendChatToPlayer(aPlayer, "Changed secondary mode to: Swarmer mode"); - break; - } - } - } - - private void updateMaxSlots() { - int mOld = mMaxSlots; - long v = this.getMaxInputEu(); - if (v < GT_Values.V[6]) mMaxSlots = 0; - else if (mSecondaryMode == 0) mMaxSlots = (int) (v / GT_Values.V[6]); - else mMaxSlots = 1; - if (mOld != 0 && mOld != mMaxSlots) { - needsTVarUpdate = true; - } - } - - @Override - public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { - super.onPostTick(aBaseMetaTileEntity, aTick); - if (aBaseMetaTileEntity.isServerSide()) { - // TODO: Look for proper fix - if (mUpdate < -550) mUpdate = 50; - } else { - if (aBaseMetaTileEntity.isActive() && aTick % 100 == 0) { - int[] abc = new int[] { 0, -2, 7 }; - int[] xyz = new int[] { 0, 0, 0 }; - this.getExtendedFacing() - .getWorldOffset(abc, xyz); - xyz[0] += aBaseMetaTileEntity.getXCoord(); - xyz[1] += aBaseMetaTileEntity.getYCoord(); - xyz[2] += aBaseMetaTileEntity.getZCoord(); - showBees(aBaseMetaTileEntity.getWorld(), xyz[0], xyz[1], xyz[2], 100); - } - } - } - - @SideOnly(Side.CLIENT) - private void showBees(World world, int x, int y, int z, int age) { - MegaApiaryBeesRenderer bee = new MegaApiaryBeesRenderer(world, x, y, z, age); - Minecraft.getMinecraft().effectRenderer.addEffect(bee); - } - - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - updateMaxSlots(); - if (mPrimaryMode < 2) { - if (mPrimaryMode == 0 && mStorage.size() < mMaxSlots) { - World w = getBaseMetaTileEntity().getWorld(); - float t = (float) getVoltageTierExact(); - ArrayList inputs = getStoredInputs(); - for (ItemStack input : inputs) { - if (beeRoot.getType(input) == EnumBeeType.QUEEN) { - BeeSimulator bs = new BeeSimulator(input, w, t); - if (bs.isValid) { - mStorage.add(bs); - isCacheDirty = true; - } - } - if (mStorage.size() >= mMaxSlots) break; - } - updateSlots(); - } else if (mPrimaryMode == 1 && mStorage.size() > 0) { - if (tryOutputAll(mStorage, s -> Collections.singletonList(((BeeSimulator) s).queenStack))) - isCacheDirty = true; - } else return CheckRecipeResultRegistry.NO_RECIPE; - mMaxProgresstime = 10; - mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - mEfficiencyIncrease = 10000; - lEUt = 0; - return CheckRecipeResultRegistry.SUCCESSFUL; - } else if (mPrimaryMode == 2) { - if (mMaxSlots > 0 && !mStorage.isEmpty()) { - if (mSecondaryMode == 0) { - if (megaApiaryStorageVersion != MEGA_APIARY_STORAGE_VERSION) { - megaApiaryStorageVersion = MEGA_APIARY_STORAGE_VERSION; - World w = getBaseMetaTileEntity().getWorld(); - float t = (float) getVoltageTierExact(); - mStorage.forEach(s -> s.generate(w, t)); - } - - if (mStorage.size() > mMaxSlots) - return SimpleCheckRecipeResult.ofFailure("MegaApiary_slotoverflow"); - - if (flowersError) return SimpleCheckRecipeResult.ofFailure("MegaApiary_noflowers"); - - if (needsTVarUpdate) { - float t = (float) getVoltageTierExact(); - needsTVarUpdate = false; - World w = getBaseMetaTileEntity().getWorld(); - mStorage.forEach(s -> s.updateTVar(w, t)); - } - - int maxConsume = Math.min(mStorage.size(), mMaxSlots) * 40; - int toConsume = maxConsume; - ArrayList inputs = getStoredInputs(); - - for (ItemStack input : inputs) { - if (!input.isItemEqual(royalJelly)) continue; - int consumed = Math.min(input.stackSize, toConsume); - toConsume -= consumed; - input.stackSize -= consumed; - if (toConsume == 0) break; - } - double boosted = 1d; - if (toConsume != maxConsume) { - boosted += (((double) maxConsume - (double) toConsume) / (double) maxConsume) * 2d; - this.updateSlots(); - } - - List stacks = new ArrayList<>(); - for (int i = 0, mStorageSize = Math.min(mStorage.size(), mMaxSlots); i < mStorageSize; i++) { - BeeSimulator beeSimulator = mStorage.get(i); - stacks.addAll(beeSimulator.getDrops(this, 64_00d * boosted)); - } - - this.lEUt = -(int) ((double) GT_Values.V[6] * (double) mMaxSlots * 0.99d); - this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - this.mMaxProgresstime = 100; - this.mOutputItems = stacks.toArray(new ItemStack[0]); - } else { - if (!depleteInput(PluginApiculture.items.royalJelly.getItemStack(64)) - || !depleteInput(PluginApiculture.items.royalJelly.getItemStack(36))) { - this.updateSlots(); - return CheckRecipeResultRegistry.NO_RECIPE; - } - calculateOverclock(GT_Values.V[5] - 2L, 1200); - if (this.lEUt > 0) this.lEUt = -this.lEUt; - this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - this.mOutputItems = new ItemStack[] { this.mStorage.get(0) - .createIgnobleCopy() }; - this.updateSlots(); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - } - - return CheckRecipeResultRegistry.NO_RECIPE; - } - - @Override - public String[] getInfoData() { - ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); - info.add( - "Running in mode: " + EnumChatFormatting.GOLD - + (mPrimaryMode == 0 ? "Input mode" - : (mPrimaryMode == 1 ? "Output mode" - : (mSecondaryMode == 0 ? "Operating mode (NORMAL)" : "Operating mode (SWARMER)")))); - info.add( - "Bee storage (" + EnumChatFormatting.GOLD - + mStorage.size() - + EnumChatFormatting.RESET - + "/" - + (mStorage.size() > mMaxSlots ? EnumChatFormatting.DARK_RED.toString() - : EnumChatFormatting.GOLD.toString()) - + mMaxSlots - + EnumChatFormatting.RESET - + "):"); - HashMap infos = new HashMap<>(); - for (int i = 0; i < mStorage.size(); i++) { - StringBuilder builder = new StringBuilder(); - if (i > mMaxSlots) builder.append(EnumChatFormatting.DARK_RED); - builder.append(EnumChatFormatting.GOLD); - builder.append(mStorage.get(i).queenStack.getDisplayName()); - infos.merge(builder.toString(), 1, Integer::sum); - } - infos.forEach((key, value) -> info.add("x" + value + ": " + key)); - - return info.toArray(new String[0]); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - mGlassTier = 0; - mCasing = 0; - if (isCacheDirty) { - flowersCache.clear(); - mStorage.forEach(s -> flowersCache.put(s.flowerType, s.flowerTypeDescription)); - flowersCache.remove(""); - isCacheDirty = false; - } - flowersCheck.clear(); - flowersCheck.addAll(flowersCache.keySet()); - if (!checkPiece(STRUCTURE_PIECE_MAIN, 7, 8, 0)) return false; - if (this.mGlassTier < 10 && !this.mEnergyHatches.isEmpty()) - for (GT_MetaTileEntity_Hatch_Energy hatchEnergy : this.mEnergyHatches) - if (this.mGlassTier < hatchEnergy.mTier) return false; - boolean valid = this.mMaintenanceHatches.size() == 1 && this.mEnergyHatches.size() >= 1 && this.mCasing >= 190; - flowersError = valid && !this.flowersCheck.isEmpty(); - if (valid) updateMaxSlots(); - return valid; - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new GT_MetaTileEntity_MegaIndustrialApiary(this.mName); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; - } - - private static final UIInfo MegaApiaryUI = createKTMetaTileEntityUI( - KT_ModulaUIContainer_MegaIndustrialApiary::new); - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (aBaseMetaTileEntity.isClientSide()) return true; - MegaApiaryUI.open( - aPlayer, - aBaseMetaTileEntity.getWorld(), - aBaseMetaTileEntity.getXCoord(), - aBaseMetaTileEntity.getYCoord(), - aBaseMetaTileEntity.getZCoord()); - return true; - } - - private static class KT_ModulaUIContainer_MegaIndustrialApiary extends ModularUIContainer { - - final WeakReference parent; - - public KT_ModulaUIContainer_MegaIndustrialApiary(ModularUIContext context, ModularWindow mainWindow, - GT_MetaTileEntity_MegaIndustrialApiary mte) { - super(context, mainWindow); - parent = new WeakReference<>(mte); - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) { - if (!(aPlayer instanceof EntityPlayerMP)) return super.transferStackInSlot(aPlayer, aSlotIndex); - final Slot s = getSlot(aSlotIndex); - if (s == null) return super.transferStackInSlot(aPlayer, aSlotIndex); - if (aSlotIndex >= 36) return super.transferStackInSlot(aPlayer, aSlotIndex); - final ItemStack aStack = s.getStack(); - if (aStack == null) return super.transferStackInSlot(aPlayer, aSlotIndex); - GT_MetaTileEntity_MegaIndustrialApiary mte = parent.get(); - if (mte == null) return super.transferStackInSlot(aPlayer, aSlotIndex); - if (mte.mStorage.size() >= mte.mMaxSlots) return super.transferStackInSlot(aPlayer, aSlotIndex); - if (beeRoot.getType(aStack) == EnumBeeType.QUEEN) { - if (mte.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(aPlayer, EnumChatFormatting.RED + "Can't insert while running !"); - return super.transferStackInSlot(aPlayer, aSlotIndex); - } - World w = mte.getBaseMetaTileEntity() - .getWorld(); - float t = (float) mte.getVoltageTierExact(); - BeeSimulator bs = new BeeSimulator(aStack, w, t); - if (bs.isValid) { - mte.mStorage.add(bs); - s.putStack(null); - detectAndSendChanges(); - mte.isCacheDirty = true; - return null; - } - } - return super.transferStackInSlot(aPlayer, aSlotIndex); - } - } - - DynamicInventory dynamicInventory = new DynamicInventory<>( - 128, - 60, - () -> mMaxSlots, - mStorage, - s -> s.queenStack).allowInventoryInjection(input -> { - World w = getBaseMetaTileEntity().getWorld(); - float t = (float) getVoltageTierExact(); - BeeSimulator bs = new BeeSimulator(input, w, t); - if (bs.isValid) { - mStorage.add(bs); - return input; - } - return null; - }) - .allowInventoryExtraction(mStorage::remove) - .allowInventoryReplace((i, stack) -> { - if (stack.stackSize != 1) return null; - World w = getBaseMetaTileEntity().getWorld(); - float t = (float) getVoltageTierExact(); - BeeSimulator bs = new BeeSimulator(stack, w, t); - if (bs.isValid) { - BeeSimulator removed = mStorage.remove(i); - mStorage.add(i, bs); - return removed.queenStack; - } - return null; - }) - .setEnabled(() -> this.mMaxProgresstime == 0); - - @Override - public void createInventorySlots() { - - } - - private boolean isInInventory = true; - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - isInInventory = !getBaseMetaTileEntity().isActive(); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK) - .setPos(4, 4) - .setSize(190, 85) - .setEnabled(w -> !isInInventory)); - builder.widget( - dynamicInventory.asWidget(builder, buildContext) - .setPos(10, 16) - .setBackground(new Rectangle().setColor(Color.rgb(163, 163, 198))) - .setEnabled(w -> isInInventory)); - builder.widget( - new CycleButtonWidget().setToggle(() -> isInInventory, i -> isInInventory = i) - .setTextureGetter(i -> i == 0 ? new Text("Inventory") : new Text("Status")) - .setBackground(GT_UITextures.BUTTON_STANDARD) - .setPos(140, 4) - .setSize(55, 16)); - - final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); - drawTexts(screenElements, null); - builder.widget(screenElements.setEnabled(w -> !isInInventory)); - - builder.widget(createPowerSwitchButton(builder)) - .widget(createVoidExcessButton(builder)) - .widget(createInputSeparationButton(builder)) - .widget(createBatchModeButton(builder)) - .widget(createLockToSingleRecipeButton(builder)) - .widget(createStructureUpdateButton(builder)); - - DynamicPositionedRow configurationElements = new DynamicPositionedRow(); - addConfigurationWidgets(configurationElements, buildContext); - - builder.widget( - configurationElements.setSpace(2) - .setAlignment(MainAxisAlignment.SPACE_BETWEEN) - .setPos(getRecipeLockingButtonPos().add(18, 0))); - } - - @Override - protected void addConfigurationWidgets(DynamicPositionedRow configurationElements, UIBuildContext buildContext) { - buildContext.addSyncedWindow(CONFIGURATION_WINDOW_ID, this::createConfigurationWindow); - configurationElements.setSynced(false); - configurationElements.widget( - new ButtonWidget().setOnClick( - (clickData, widget) -> { - if (!widget.isClient()) widget.getContext() - .openSyncedWindow(CONFIGURATION_WINDOW_ID); - }) - .setBackground(GT_UITextures.BUTTON_STANDARD, GT_UITextures.OVERLAY_BUTTON_CYCLIC) - .addTooltip("Configuration") - .setSize(16, 16)); - } - - protected ModularWindow createConfigurationWindow(final EntityPlayer player) { - ModularWindow.Builder builder = ModularWindow.builder(200, 100); - builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); - builder.widget( - new DrawableWidget().setDrawable(GT_UITextures.OVERLAY_BUTTON_CYCLIC) - .setPos(5, 5) - .setSize(16, 16)) - .widget(new TextWidget("Configuration").setPos(25, 9)) - .widget( - ButtonWidget.closeWindowButton(true) - .setPos(185, 3)) - .widget( - new Column().widget( - new CycleButtonWidget().setLength(3) - .setGetter(() -> mPrimaryMode) - .setSetter(val -> { - if (this.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(player, "Can't change mode when running !"); - return; - } - mPrimaryMode = val; - - if (!(player instanceof EntityPlayerMP)) return; - switch (mPrimaryMode) { - case 0: - GT_Utility.sendChatToPlayer(player, "Changed primary mode to: Input mode"); - break; - case 1: - GT_Utility.sendChatToPlayer(player, "Changed primary mode to: Output mode"); - break; - case 2: - GT_Utility.sendChatToPlayer(player, "Changed primary mode to: Operating mode"); - break; - } - }) - .addTooltip(0, new Text("Input").color(Color.YELLOW.dark(3))) - .addTooltip(1, new Text("Output").color(Color.YELLOW.dark(3))) - .addTooltip(2, new Text("Operating").color(Color.GREEN.dark(3))) - .setTextureGetter( - i -> i == 0 ? new Text("Input").color(Color.YELLOW.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0) - : i == 1 ? new Text("Output").color(Color.YELLOW.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0) - : new Text("Operating").color(Color.GREEN.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0)) - .setBackground( - ModularUITextures.VANILLA_BACKGROUND, - GT_UITextures.OVERLAY_BUTTON_CYCLIC.withFixedSize(18, 18)) - .setSize(70, 18) - .addTooltip("Primary mode")) - .widget( - new CycleButtonWidget().setLength(2) - .setGetter(() -> mSecondaryMode) - .setSetter(val -> { - if (this.mMaxProgresstime > 0) { - GT_Utility.sendChatToPlayer(player, "Can't change mode when running !"); - return; - } - - mSecondaryMode = val; - - if (!(player instanceof EntityPlayerMP)) return; - switch (mSecondaryMode) { - case 0: - GT_Utility.sendChatToPlayer(player, "Changed secondary mode to: Normal mode"); - break; - case 1: - GT_Utility.sendChatToPlayer(player, "Changed secondary mode to: Swarmer mode"); - break; - } - }) - .addTooltip(0, new Text("Normal").color(Color.GREEN.dark(3))) - .addTooltip(1, new Text("Swarmer").color(Color.YELLOW.dark(3))) - .setTextureGetter( - i -> i == 0 ? new Text("Normal").color(Color.GREEN.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0) - : new Text("Swarmer").color(Color.YELLOW.dark(3)) - .withFixedSize(70 - 18, 18, 15, 0)) - .setBackground( - ModularUITextures.VANILLA_BACKGROUND, - GT_UITextures.OVERLAY_BUTTON_CYCLIC.withFixedSize(18, 18)) - .setSize(70, 18) - .addTooltip("Secondary mode")) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive()) - .setPos(10, 30)) - .widget( - new Column().widget(new TextWidget("Primary mode").setSize(100, 18)) - .widget(new TextWidget("Secondary mode").setSize(100, 18)) - .setEnabled(widget -> !getBaseMetaTileEntity().isActive()) - .setPos(80, 30)) - .widget( - new DrawableWidget().setDrawable(GT_UITextures.OVERLAY_BUTTON_CROSS) - .setSize(18, 18) - .setPos(10, 30) - .addTooltip(new Text("Can't change configuration when running !").color(Color.RED.dark(3))) - .setEnabled(widget -> getBaseMetaTileEntity().isActive())); - return builder.build(); - } - - // private List flowersGUI = Collections.emptyList(); - - private HashMap GUIDropProgress = new HashMap<>(); - - @Override - protected String generateCurrentRecipeInfoString() { - if (mSecondaryMode == 1) return super.generateCurrentRecipeInfoString(); - StringBuilder ret = new StringBuilder(EnumChatFormatting.WHITE + "Progress: ") - .append(String.format("%,.2f", (double) mProgresstime / 20)) - .append("s / ") - .append(String.format("%,.2f", (double) mMaxProgresstime / 20)) - .append("s (") - .append(String.format("%,.1f", (double) mProgresstime / mMaxProgresstime * 100)) - .append("%)\n"); - - for (Map.Entry drop : GUIDropProgress.entrySet()) { - int outputSize = Arrays.stream(mOutputItems) - .filter(s -> s.isItemEqual(drop.getKey())) - .mapToInt(i -> i.stackSize) - .sum(); - ret.append(EnumChatFormatting.AQUA) - .append( - drop.getKey() - .getDisplayName()) - .append(EnumChatFormatting.WHITE) - .append(": "); - if (outputSize == 0) { - ret.append(String.format("%.2f", drop.getValue() * 100)) - .append("%\n"); - } else { - ret.append(EnumChatFormatting.GOLD) - .append( - String.format( - "x%d %s(+%.2f/sec)\n", - outputSize, - EnumChatFormatting.WHITE, - (double) outputSize / (mMaxProgresstime / 20))); - } - } - - return ret.toString(); - } - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - - screenElements.widget(new FakeSyncWidget.IntegerSyncer(() -> mSecondaryMode, b -> mSecondaryMode = b)); - screenElements.widget(new FakeSyncWidget<>(() -> { - HashMap ret = new HashMap<>(); - HashMap dropProgress = new HashMap<>(); - - for (Map.Entry drop : this.dropProgress.entrySet()) { - dropProgress.merge(drop.getKey(), drop.getValue(), Double::sum); - } - - for (Map.Entry drop : dropProgress.entrySet()) { - ret.put(BeeSimulator.dropstacks.get(drop.getKey()), drop.getValue()); - } - return ret; - }, h -> GUIDropProgress = h, (buffer, h) -> { - buffer.writeVarIntToBuffer(h.size()); - for (Map.Entry itemStackDoubleEntry : h.entrySet()) { - try { - buffer.writeItemStackToBuffer(itemStackDoubleEntry.getKey()); - buffer.writeDouble(itemStackDoubleEntry.getValue()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - }, buffer -> { - int len = buffer.readVarIntFromBuffer(); - HashMap ret = new HashMap<>(len); - for (int i = 0; i < len; i++) { - try { - ret.put(buffer.readItemStackFromBuffer(), buffer.readDouble()); - } catch (IOException e) { - throw new RuntimeException(e); - } - } - return ret; - })); - super.drawTexts(screenElements, inventorySlot); - } - - final HashMap dropProgress = new HashMap<>(); - - private static class BeeSimulator { - - final ItemStack queenStack; - boolean isValid; - List drops = new ArrayList<>(); - List specialDrops = new ArrayList<>(); - float beeSpeed; - - float maxBeeCycles; - String flowerType; - String flowerTypeDescription; - private static IBeekeepingMode mode; - - public BeeSimulator(ItemStack queenStack, World world, float t) { - isValid = false; - this.queenStack = queenStack.copy(); - this.queenStack.stackSize = 1; - generate(world, t); - isValid = true; - queenStack.stackSize--; - } - - public void generate(World world, float t) { - if (mode == null) mode = beeRoot.getBeekeepingMode(world); - drops.clear(); - specialDrops.clear(); - if (beeRoot.getType(this.queenStack) != EnumBeeType.QUEEN) return; - IBee queen = beeRoot.getMember(this.queenStack); - IBeeModifier beeModifier = mode.getBeeModifier(); - float mod = beeModifier.getLifespanModifier(null, null, 1.f); - int h = queen.getMaxHealth(); - maxBeeCycles = (float) h / (1.f / mod); - IBeeGenome genome = queen.getGenome(); - this.flowerType = genome.getFlowerProvider() - .getFlowerType(); - this.flowerTypeDescription = genome.getFlowerProvider() - .getDescription(); - IAlleleBeeSpecies primary = genome.getPrimary(); - beeSpeed = genome.getSpeed(); - genome.getPrimary() - .getProductChances() - .forEach((key, value) -> drops.add(new BeeDrop(key, value, beeSpeed, t))); - genome.getSecondary() - .getProductChances() - .forEach((key, value) -> drops.add(new BeeDrop(key, value / 2.f, beeSpeed, t))); - primary.getSpecialtyChances() - .forEach((key, value) -> specialDrops.add(new BeeDrop(key, value, beeSpeed, t))); - } - - public BeeSimulator(NBTTagCompound tag) { - queenStack = readItemStackFromNBT(tag.getCompoundTag("queenStack")); - isValid = tag.getBoolean("isValid"); - drops = new ArrayList<>(); - specialDrops = new ArrayList<>(); - for (int i = 0, isize = tag.getInteger("dropssize"); i < isize; i++) - drops.add(new BeeDrop(tag.getCompoundTag("drops" + i))); - for (int i = 0, isize = tag.getInteger("specialDropssize"); i < isize; i++) - specialDrops.add(new BeeDrop(tag.getCompoundTag("specialDrops" + i))); - beeSpeed = tag.getFloat("beeSpeed"); - maxBeeCycles = tag.getFloat("maxBeeCycles"); - if (tag.hasKey("flowerType") && tag.hasKey("flowerTypeDescription")) { - flowerType = tag.getString("flowerType"); - flowerTypeDescription = tag.getString("flowerTypeDescription"); - } else { - IBee queen = beeRoot.getMember(this.queenStack); - IBeeGenome genome = queen.getGenome(); - this.flowerType = genome.getFlowerProvider() - .getFlowerType(); - this.flowerTypeDescription = genome.getFlowerProvider() - .getDescription(); - } - } - - public NBTTagCompound toNBTTagCompound() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setTag("queenStack", writeItemStackToNBT(queenStack)); - tag.setBoolean("isValid", isValid); - tag.setInteger("dropssize", drops.size()); - for (int i = 0; i < drops.size(); i++) tag.setTag( - "drops" + i, - drops.get(i) - .toNBTTagCompound()); - tag.setInteger("specialDropssize", specialDrops.size()); - for (int i = 0; i < specialDrops.size(); i++) tag.setTag( - "specialDrops" + i, - specialDrops.get(i) - .toNBTTagCompound()); - tag.setFloat("beeSpeed", beeSpeed); - tag.setFloat("maxBeeCycles", maxBeeCycles); - tag.setString("flowerType", flowerType); - tag.setString("flowerTypeDescription", flowerTypeDescription); - return tag; - } - - static final Map dropstacks = new HashMap<>(); - - public List getDrops(final GT_MetaTileEntity_MegaIndustrialApiary MTE, final double timePassed) { - drops.forEach(d -> { - MTE.dropProgress.merge(d.id, d.getAmount(timePassed / 550d), Double::sum); - if (!dropstacks.containsKey(d.id)) dropstacks.put(d.id, d.stack); - }); - specialDrops.forEach(d -> { - MTE.dropProgress.merge(d.id, d.getAmount(timePassed / 550d), Double::sum); - if (!dropstacks.containsKey(d.id)) dropstacks.put(d.id, d.stack); - }); - List currentDrops = new ArrayList<>(); - MTE.dropProgress.entrySet() - .forEach(e -> { - double v = e.getValue(); - while (v > 1.f) { - int size = Math.min((int) v, 64); - ItemStack stack = dropstacks.get(e.getKey()) - .copy(); - stack.stackSize = size; - currentDrops.add(stack); - v -= size; - e.setValue(v); - } - }); - return currentDrops; - } - - public ItemStack createIgnobleCopy() { - IBee princess = beeRoot.getMember(queenStack); - princess.setIsNatural(false); - return beeRoot.getMemberStack(princess, EnumBeeType.PRINCESS.ordinal()); - } - - public void updateTVar(World world, float t) { - if (mode == null) mode = beeRoot.getBeekeepingMode(world); - drops.forEach(d -> d.updateTVar(t)); - specialDrops.forEach(d -> d.updateTVar(t)); - } - - private static class BeeDrop { - - private static final float MAX_PRODUCTION_MODIFIER_FROM_UPGRADES = 17.19926784f; // 4*1.2^8 - final ItemStack stack; - double amount; - final ItemID id; - - final float chance; - final float beeSpeed; - float t; - - public BeeDrop(ItemStack stack, float chance, float beeSpeed, float t) { - this.stack = stack; - this.chance = chance; - this.beeSpeed = beeSpeed; - this.t = t; - id = ItemID.createNoCopy(this.stack); - evaluate(); - } - - public void updateTVar(float t) { - if (this.t != t) { - this.t = t; - evaluate(); - } - } - - public void evaluate() { - this.amount = Bee.getFinalChance( - chance, - beeSpeed, - MAX_PRODUCTION_MODIFIER_FROM_UPGRADES + mode.getBeeModifier() - .getProductionModifier(null, MAX_PRODUCTION_MODIFIER_FROM_UPGRADES), - t); - } - - public double getAmount(double speedModifier) { - return amount * speedModifier; - } - - public ItemStack get(int amount) { - ItemStack r = stack.copy(); - r.stackSize = amount; - return r; - } - - public BeeDrop(NBTTagCompound tag) { - stack = readItemStackFromNBT(tag.getCompoundTag("stack")); - chance = tag.getFloat("chance"); - beeSpeed = tag.getFloat("beeSpeed"); - t = tag.getFloat("t"); - amount = tag.getDouble("amount"); - id = ItemID.createNoCopy(stack); - } - - public NBTTagCompound toNBTTagCompound() { - NBTTagCompound tag = new NBTTagCompound(); - tag.setTag("stack", writeItemStackToNBT(stack)); - tag.setFloat("chance", chance); - tag.setFloat("beeSpeed", beeSpeed); - tag.setFloat("t", t); - tag.setDouble("amount", amount); - return tag; - } - - @Override - public int hashCode() { - return id.hashCode(); - } - } - } - -} diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEDEFusionCrafter.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEDEFusionCrafter.java new file mode 100644 index 0000000000..9e783049ed --- /dev/null +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEDEFusionCrafter.java @@ -0,0 +1,280 @@ +package kubatech.tileentity.gregtech.multiblock; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASING_MAGIC_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_TELEPORTER_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static kubatech.api.Variables.StructureHologram; +import static kubatech.api.Variables.buildAuthorList; + +import java.util.Arrays; +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; + +import gregtech.api.GregTechAPI; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import kubatech.Tags; +import kubatech.api.implementations.KubaTechGTMultiBlockBase; +import kubatech.loaders.BlockLoader; +import kubatech.loaders.DEFCRecipes; + +public class MTEDEFusionCrafter extends KubaTechGTMultiBlockBase implements ISurvivalConstructable { + + private static final int CASING_INDEX = (1 << 7) + (15 + 48); + private int mTierCasing = 0; + private int mFusionTierCasing = 0; + private int mCasing = 0; + + @SuppressWarnings("unused") + public MTEDEFusionCrafter(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEDEFusionCrafter(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEDEFusionCrafter(mName); + } + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final List> fusionCasingTiers = Arrays + .asList(Pair.of(GregTechAPI.sBlockCasings4, 6), Pair.of(GregTechAPI.sBlockCasings4, 8)); + private static final List> coreTiers = Arrays.asList( + Pair.of(BlockLoader.defcCasingBlock, 8), + Pair.of(BlockLoader.defcCasingBlock, 9), + Pair.of(BlockLoader.defcCasingBlock, 10), + Pair.of(BlockLoader.defcCasingBlock, 11), + Pair.of(BlockLoader.defcCasingBlock, 12)); + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { // spotless:off + { "nnnnn", "nnnnn", "nnnnn", "nnnnn", "nnnnn" }, + { " ", " F ", " FfF ", " F ", " " }, + { " ", " F ", " FfF ", " F ", " " }, + { "RRRRR", "R F R", "RFfFR", "R F R", "RRRRR" }, + { " ", " F ", " FfF ", " F ", " " }, + { " ", " F ", " FfF ", " F ", " " }, + { "RRRRR", "R F R", "RFfFR", "R F R", "RRRRR" }, + { " ", " F ", " FfF ", " F ", " " }, + { " ", " F ", " FfF ", " F ", " " }, + { "NN~NN", "NNNNN", "NNNNN", "NNNNN", "NNNNN" } + })) // spotless:on + .addElement( + 'N', + buildHatchAdder(MTEDEFusionCrafter.class) + .atLeast(InputBus, InputHatch, OutputBus, OutputHatch, Energy, Maintenance) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(onElementPass(e -> e.mCasing++, ofBlock(BlockLoader.defcCasingBlock, 7)))) + .addElement('n', onElementPass(e -> e.mCasing++, ofBlock(BlockLoader.defcCasingBlock, 7))) + .addElement('f', ofBlock(GregTechAPI.sBlockCasings4, 7)) + .addElement('F', ofBlocksTiered((Block b, int m) -> { + if (b != GregTechAPI.sBlockCasings4 || (m != 6 && m != 8)) return -2; + return m == 6 ? 1 : 2; + }, fusionCasingTiers, -1, (e, i) -> e.mFusionTierCasing = i, e -> e.mFusionTierCasing)) + .addElement('R', ofBlocksTiered((Block b, int m) -> { + if (b != BlockLoader.defcCasingBlock || m < 8 || m > 12) return -2; + return m - 7; + }, coreTiers, -1, (e, i) -> e.mTierCasing = i, e -> e.mTierCasing)) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mCasing = 0; + mTierCasing = -1; + mFusionTierCasing = -1; + if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 9, 0)) return false; + if (mCasing < 19) return false; + if (mTierCasing == -2 || mFusionTierCasing == -2) return false; + if (mTierCasing > 3 && mFusionTierCasing < 2) return false; + return mMaintenanceHatches.size() == 1; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Fusion Crafter") + .addInfo("Controller Block for the Draconic Evolution Fusion Crafter") + .addInfo(buildAuthorList("kuba6000", "Prometheus0000")) + .addInfo("Machine can be overclocked by using casings above the recipe tier:") + .addInfo("Recipe time is divided by number of tiers above the recipe") + .addInfo("Normal EU OC still applies !") + .addInfo(StructureHologram) + .addSeparator() + .beginStructureBlock(5, 10, 5, false) + .addController("Front bottom center") + .addCasingInfoMin("Naquadah Alloy Fusion Casing", 19, false) + .addOtherStructurePart("Fusion Coil Block", "Center pillar") + .addOtherStructurePart("Fusion Machine Casing", "Touching Fusion Coil Block at every side") + .addOtherStructurePart("Tiered Fusion Casing", "Rings (5x5 hollow) at layer 4 and 7") + .addStructureInfo("Bloody Ichorium for tier 1, Draconium for tier 2, etc") + .addStructureInfo("To use tier 3 + you have to use fusion casing MK II") + .addInputBus("Any bottom casing", 1) + .addInputHatch("Any bottom casing", 1) + .addOutputBus("Any bottom casing", 1) + .addOutputHatch("Any bottom casing", 1) + .addEnergyHatch("Any bottom casing", 1) + .addMaintenanceHatch("Any bottom casing", 1) + .toolTipFinisher(Tags.MODNAME); + return tt; + } + + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_TELEPORTER_GLOW) + .extFacing() + .glow() + .build() }; + } + if (aActive) return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { TextureFactory.of(MACHINE_CASING_MAGIC), TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(MACHINE_CASING_MAGIC_GLOW) + .extFacing() + .glow() + .build() }; + } + + @Override + public boolean isCorrectMachinePart(ItemStack aStack) { + return true; + } + + @Override + public RecipeMap getRecipeMap() { + return DEFCRecipes.fusionCraftingRecipes; + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@NotNull GTRecipe recipe) { + return recipe.mSpecialValue <= mTierCasing ? CheckRecipeResultRegistry.SUCCESSFUL + : CheckRecipeResultRegistry.insufficientMachineTier(recipe.mSpecialValue); + } + + @NotNull + @Override + protected OverclockCalculator createOverclockCalculator(@NotNull GTRecipe recipe) { + return super.createOverclockCalculator(recipe) + .setSpeedBoost(1f / (mTierCasing - recipe.mSpecialValue + 1)); + } + }; + } + + public int getMaxEfficiency(ItemStack aStack) { + return 10000; + } + + public int getPollutionPerTick(ItemStack aStack) { + return 0; + } + + public int getDamageToComponent(ItemStack aStack) { + return 0; + } + + public boolean explodesOnComponentBreak(ItemStack aStack) { + return false; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 2, 9, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 9, 0, elementBudget, env, true, true); + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } +} diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeEntityCrusher.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeEntityCrusher.java new file mode 100644 index 0000000000..07a3c3deb1 --- /dev/null +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeEntityCrusher.java @@ -0,0 +1,817 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2024 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.tileentity.gregtech.multiblock; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.isAir; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.enums.Mods.BloodMagic; +import static gregtech.api.enums.Mods.ExtraUtilities; +import static gregtech.api.enums.Mods.InfernalMobs; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; +import static kubatech.api.Variables.Author; +import static kubatech.api.Variables.StructureHologram; + +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Random; +import java.util.UUID; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.EnumCreatureAttribute; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; +import net.minecraft.world.WorldProviderHell; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.Multimap; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.kuba6000.mobsinfo.api.utils.FastRandom; +import com.mojang.authlib.GameProfile; + +import WayofTime.alchemicalWizardry.api.alchemy.energy.ReagentRegistry; +import WayofTime.alchemicalWizardry.api.event.RitualRunEvent; +import WayofTime.alchemicalWizardry.api.rituals.Rituals; +import WayofTime.alchemicalWizardry.api.soulNetwork.SoulNetworkHandler; +import WayofTime.alchemicalWizardry.api.tile.IBloodAltar; +import WayofTime.alchemicalWizardry.common.rituals.RitualEffectWellOfSuffering; +import WayofTime.alchemicalWizardry.common.tileEntity.TEMasterStone; +import bartworks.API.BorosilicateGlass; +import cpw.mods.fml.common.eventhandler.EventPriority; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import crazypants.enderio.EnderIO; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Mods; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import kubatech.Tags; +import kubatech.api.helpers.ReflectionHelper; +import kubatech.api.implementations.KubaTechGTMultiBlockBase; +import kubatech.api.tileentity.CustomTileEntityPacketHandler; +import kubatech.api.utils.ModUtils; +import kubatech.client.effect.EntityRenderer; +import kubatech.loaders.MobHandlerLoader; +import kubatech.network.CustomTileEntityPacket; + +public class MTEExtremeEntityCrusher extends KubaTechGTMultiBlockBase + implements CustomTileEntityPacketHandler, ISurvivalConstructable { + + public static final double DIAMOND_SPIKES_DAMAGE = 9d; + // Powered spawner with octadic capacitor spawns ~22/min ~= 0.366/sec ~= 2.72s/spawn ~= 54.54t/spawn + public static final int MOB_SPAWN_INTERVAL = 55; + public final Random rand = new FastRandom(); + private final WeaponCache weaponCache; + + @SuppressWarnings("unused") + public MTEExtremeEntityCrusher(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + weaponCache = new WeaponCache(mInventory); + } + + public MTEExtremeEntityCrusher(String aName) { + super(aName); + weaponCache = new WeaponCache(mInventory); + if (BloodMagic.isModLoaded()) MinecraftForge.EVENT_BUS.register(this); + } + + @Override + public void onRemoval() { + if (BloodMagic.isModLoaded()) MinecraftForge.EVENT_BUS.unregister(this); + if (getBaseMetaTileEntity().isClientSide() && entityRenderer != null) { + entityRenderer.setDead(); + } + } + + @Override + public void onUnload() { + if (BloodMagic.isModLoaded()) MinecraftForge.EVENT_BUS.unregister(this); + } + + private static final String WellOfSufferingRitualName = "AW013Suffering"; + + private static final Item poweredSpawnerItem = Item.getItemFromBlock(EnderIO.blockPoweredSpawner); + private static final int CASING_INDEX = 16; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { // spotless:off + { "ccccc", "ccccc", "ccccc", "ccccc", "ccccc" }, + { "fgggf", "g---g", "g---g", "g---g", "fgggf" }, + { "fgggf", "g---g", "g---g", "g---g", "fgggf" }, + { "fgggf", "g---g", "g---g", "g---g", "fgggf" }, + { "fgggf", "g---g", "g---g", "g---g", "fgggf" }, + { "fgggf", "gsssg", "gsssg", "gsssg", "fgggf" }, + { "CC~CC", "CCCCC", "CCCCC", "CCCCC", "CCCCC" }, + })) // spotless:on + .addElement('c', onElementPass(t -> t.mCasing++, ofBlock(GregTechAPI.sBlockCasings2, 0))) + .addElement( + 'C', + buildHatchAdder(MTEExtremeEntityCrusher.class) + .atLeast(InputBus, OutputBus, OutputHatch, Energy, Maintenance) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(onElementPass(t -> t.mCasing++, ofBlock(GregTechAPI.sBlockCasings2, 0)))) + .addElement('g', BorosilicateGlass.ofBoroGlass((byte) 0, (t, v) -> t.mGlassTier = v, t -> t.mGlassTier)) + .addElement('f', ofFrame(Materials.Steel)) + .addElement( + 's', + ExtraUtilities.isModLoaded() ? ofBlock(Block.getBlockFromName("ExtraUtilities:spike_base_diamond"), 0) + : isAir()) + .build(); + + private TileEntity masterStoneRitual = null; + private TileEntity tileAltar = null; + private boolean isInRitualMode = false; + private int mCasing = 0; + private byte mGlassTier = 0; + private boolean mAnimationEnabled = true; + private boolean mIsProducingInfernalDrops = true; + private boolean voidAllDamagedAndEnchantedItems = false; + + private EntityRenderer entityRenderer = null; + private boolean renderEntity = false; + public EECFakePlayer EECPlayer = null; + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("isInRitualMode", isInRitualMode); + aNBT.setBoolean("mAnimationEnabled", mAnimationEnabled); + aNBT.setByte("mGlassTier", mGlassTier); + aNBT.setBoolean("mIsProducingInfernalDrops", mIsProducingInfernalDrops); + aNBT.setBoolean("voidAllDamagedAndEnchantedItems", voidAllDamagedAndEnchantedItems); + if (weaponCache.getStackInSlot(0) != null) aNBT.setTag( + "weaponCache", + weaponCache.getStackInSlot(0) + .writeToNBT(new NBTTagCompound())); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + isInRitualMode = aNBT.getBoolean("isInRitualMode"); + mAnimationEnabled = !aNBT.hasKey("mAnimationEnabled") || aNBT.getBoolean("mAnimationEnabled"); + mGlassTier = aNBT.getByte("mGlassTier"); + mIsProducingInfernalDrops = !aNBT.hasKey("mIsProducingInfernalDrops") + || aNBT.getBoolean("mIsProducingInfernalDrops"); + voidAllDamagedAndEnchantedItems = aNBT.getBoolean("voidAllDamagedAndEnchantedItems"); + if (aNBT.hasKey("weaponCache")) + weaponCache.setStackInSlot(0, ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("weaponCache"))); + } + + @Override + public boolean isOverclockingInfinite() { + return true; + } + + @Override + protected int getOverclockTimeLimit() { + return 20; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated(); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Powered Spawner, EEC") + .addInfo("Controller block for the Extreme Entity Crusher") + .addInfo(Author) + .addInfo("Spawns and kills monsters for you.") + .addInfo("You have to insert the powered spawner in the controller.") + .addInfo("Base energy usage: 2,000 EU/t") + .addInfo("Supports perfect OC, minimum time: 20 ticks, after that multiplies the outputs.") + .addInfo("Recipe time is based on mob health.") + .addInfo("You can additionally put a weapon inside the GUI.") + .addInfo("It will speed up the process and apply the looting level from the weapon (maximum 4 levels).") + .addInfo(EnumChatFormatting.RED + "Enchanting the spikes inside the structure does nothing!") + .addInfo("Also produces 120 Liquid XP per operation.") + .addInfo("If the mob spawns infernal, it will drain 8 times more power.") + .addInfo("You can prevent infernal spawns by shift clicking with a screwdriver.") + .addInfo("Note: If the mob has forced infernal spawn, it will do it anyway.") + .addInfo("You can enable ritual mode with a screwdriver.") + .addInfo("When in ritual mode and the Well Of Suffering ritual is built directly centered on the machine,") + .addInfo("the mobs will start to buffer and die very slowly by the ritual.") + .addInfo("You can disable mob animation with a soldering iron.") + .addInfo(StructureHologram) + .addSeparator() + .beginStructureBlock(5, 7, 5, true) + .addController("Front Bottom Center") + .addCasingInfoMin("Solid Steel Machine Casing", 35, false) + .addOtherStructurePart("Tiered (HV+) Glass", "Side walls without edges or corners") + .addStructureInfo("The glass tier limits the Energy Hatch tier") + .addOtherStructurePart("Steel Frame Box", "All vertical edges without corners") + .addOtherStructurePart("Diamond spikes", "Inside second layer") + .addOutputBus("Any bottom casing", 1) + .addOutputHatch("Any bottom casing", 1) + .addEnergyHatch("Any bottom casing", 1) + .addMaintenanceHatch("Any bottom casing", 1) + .toolTipFinisher(Tags.MODNAME); + return tt; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 2, 6, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 2, 6, 0, elementBudget, env, true, true); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEExtremeEntityCrusher(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + @SideOnly(Side.CLIENT) + private void setupEntityRenderer(IGregTechTileEntity aBaseMetaTileEntity, int time) { + if (entityRenderer == null) { + ChunkCoordinates coords = this.getBaseMetaTileEntity() + .getCoords(); + int[] abc = new int[] { 0, -2, 2 }; + int[] xyz = new int[] { 0, 0, 0 }; + this.getExtendedFacing() + .getWorldOffset(abc, xyz); + xyz[0] += coords.posX; + xyz[1] += coords.posY; + xyz[2] += coords.posZ; + entityRenderer = new EntityRenderer(aBaseMetaTileEntity.getWorld(), xyz[0], xyz[1], xyz[2], time); + } else { + entityRenderer.setDead(); + entityRenderer = new EntityRenderer(entityRenderer, time); + } + Minecraft.getMinecraft().effectRenderer.addEffect(entityRenderer); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isClientSide()) { + if (renderEntity && aBaseMetaTileEntity.isActive() && aTick % 40 == 0) { + setupEntityRenderer(aBaseMetaTileEntity, 40); + } + } + } + + @SideOnly(Side.CLIENT) + @Override + public void HandleCustomPacket(CustomTileEntityPacket message) { + if (message.getDataBoolean() && Mods.MobsInfo.isModLoaded()) { + renderEntity = true; + String mobType = message.getDataString(); + MobHandlerLoader.MobEECRecipe r = MobHandlerLoader.recipeMap.get(mobType); + if (r != null) { + if (entityRenderer == null) setupEntityRenderer(getBaseMetaTileEntity(), 40); + entityRenderer.setEntity(r.entityCopy); + } else entityRenderer.setEntity(null); + } else { + renderEntity = false; + if (entityRenderer != null) { + entityRenderer.setDead(); + entityRenderer = null; + } + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (this.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(aPlayer, "Can't change mode when running !"); + return; + } + if (aPlayer.isSneaking()) { + if (!InfernalMobs.isModLoaded()) return; + mIsProducingInfernalDrops = !mIsProducingInfernalDrops; + if (!mIsProducingInfernalDrops) + GTUtility.sendChatToPlayer(aPlayer, "Mobs will now be prevented from spawning infernal"); + else GTUtility.sendChatToPlayer(aPlayer, "Mobs can spawn infernal now"); + } else { + if (!BloodMagic.isModLoaded()) return; + isInRitualMode = !isInRitualMode; + if (!isInRitualMode) { + GTUtility.sendChatToPlayer(aPlayer, "Ritual mode disabled"); + } else { + GTUtility.sendChatToPlayer(aPlayer, "Ritual mode enabled"); + if (connectToRitual()) GTUtility.sendChatToPlayer(aPlayer, "Successfully connected to the ritual"); + else GTUtility.sendChatToPlayer(aPlayer, "Can't connect to the ritual"); + } + } + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (wrenchingSide == getBaseMetaTileEntity().getFrontFacing()) { + mAnimationEnabled = !mAnimationEnabled; + GTUtility.sendChatToPlayer(aPlayer, "Animations are " + (mAnimationEnabled ? "enabled" : "disabled")); + return true; + } else return super.onSolderingToolRightClick(side, wrenchingSide, aPlayer, aX, aY, aZ); + } + + @SuppressWarnings("unused") + @SubscribeEvent(priority = EventPriority.LOWEST) + public void onRitualPerform(RitualRunEvent event) { + if (!isInRitualMode) return; + if (masterStoneRitual == null) return; + if (this.mMaxProgresstime == 0) return; + if (event.mrs.equals(masterStoneRitual) && event.ritualKey.equals(WellOfSufferingRitualName)) { + Rituals ritual = Rituals.ritualMap.get(WellOfSufferingRitualName); + if (ritual != null && ritual.effect instanceof RitualEffectWellOfSuffering) { + RitualEffectWellOfSuffering effect = (RitualEffectWellOfSuffering) ritual.effect; + event.setCanceled(true); // we will handle that + String owner = event.mrs.getOwner(); + int currentEssence = SoulNetworkHandler.getCurrentEssence(owner); + World world = event.mrs.getWorld(); + int x = event.mrs.getXCoord(); + int y = event.mrs.getYCoord(); + int z = event.mrs.getZCoord(); + + if (world.getWorldTime() % RitualEffectWellOfSuffering.timeDelay != 0) return; + + if (tileAltar == null || tileAltar.isInvalid()) { + tileAltar = null; + for (int i = -5; i <= 5; i++) for (int j = -5; j <= 5; j++) for (int k = -10; k <= 10; k++) + if (world.getTileEntity(x + i, y + k, z + j) instanceof IBloodAltar) + tileAltar = world.getTileEntity(x + i, y + k, z + j); + } + if (tileAltar == null) return; + + if (currentEssence < effect.getCostPerRefresh() * 100) { + SoulNetworkHandler.causeNauseaToPlayer(owner); + return; + } + + ((IBloodAltar) tileAltar).sacrificialDaggerCall( + 100 * RitualEffectWellOfSuffering.amount + * (effect.canDrainReagent( + event.mrs, + ReagentRegistry.offensaReagent, + ReflectionHelper.getField(effect, "offensaDrain", 3), + true) ? 2 : 1) + * (effect.canDrainReagent( + event.mrs, + ReagentRegistry.tenebraeReagent, + ReflectionHelper.getField(effect, "tennebraeDrain", 5), + true) ? 2 : 1), + true); + + SoulNetworkHandler.syphonFromNetwork(owner, effect.getCostPerRefresh() * 100); + } + } + } + + private CustomTileEntityPacket mobPacket = null; + + private static class WeaponCache extends ItemStackHandler { + + boolean isValid = false; + int looting = 0; + double attackDamage = 0; + + public WeaponCache(ItemStack[] inventory) { + super(inventory); + } + + @Override + protected void onContentsChanged(int slot) { + if (slot != 0) return; + if (ModUtils.isClientThreaded()) return; + ItemStack stack = getStackInSlot(0); + if (stack == null) { + isValid = false; + return; + } + // noinspection unchecked + attackDamage = ((Multimap) stack.getAttributeModifiers()) + .get(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName()) + .stream() + .mapToDouble( + attr -> attr.getAmount() + + (double) EnchantmentHelper.func_152377_a(stack, EnumCreatureAttribute.UNDEFINED)) + .sum(); + looting = Math.min(4, EnchantmentHelper.getEnchantmentLevel(Enchantment.looting.effectId, stack)); + isValid = true; + } + + @Override + public boolean isItemValid(int slot, ItemStack stack) { + return Enchantment.looting.canApply(stack); + } + } + + @Override + public boolean isValidSlot(int aIndex) { + return aIndex >= 0; + } + + @SuppressWarnings("unlikely-arg-type") + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + if (getBaseMetaTileEntity().isClientSide()) return CheckRecipeResultRegistry.NO_RECIPE; + ItemStack aStack = mInventory[1]; + if (aStack == null) return SimpleCheckRecipeResult.ofFailure("EEC_nospawner"); + + if (aStack.getItem() != poweredSpawnerItem) return SimpleCheckRecipeResult.ofFailure("EEC_nospawner"); + + if (aStack.getTagCompound() == null) return SimpleCheckRecipeResult.ofFailure("EEC_invalidspawner"); + String mobType = aStack.getTagCompound() + .getString("mobType"); + if (mobType.isEmpty()) return SimpleCheckRecipeResult.ofFailure("EEC_invalidspawner"); + + if (mobType.equals("Skeleton") && getBaseMetaTileEntity().getWorld().provider instanceof WorldProviderHell + && rand.nextInt(5) > 0) mobType = "witherSkeleton"; + + MobHandlerLoader.MobEECRecipe recipe = MobHandlerLoader.recipeMap.get(mobType); + + if (recipe == null) return CheckRecipeResultRegistry.NO_RECIPE; + if (!recipe.recipe.isPeacefulAllowed && this.getBaseMetaTileEntity() + .getWorld().difficultySetting == EnumDifficulty.PEACEFUL) + return SimpleCheckRecipeResult.ofFailure("EEC_peaceful"); + + if (isInRitualMode && isRitualValid()) { + if (getMaxInputEu() < recipe.mEUt / 4) return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt / 4); + this.mOutputFluids = new FluidStack[] { FluidRegistry.getFluidStack("xpjuice", 5000) }; + this.mOutputItems = recipe + .generateOutputs(rand, this, 3, 0, mIsProducingInfernalDrops, voidAllDamagedAndEnchantedItems); + this.lEUt /= 4L; + this.mMaxProgresstime = 400; + } else { + if (getMaxInputEu() < recipe.mEUt) return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); + if (recipe.recipe.alwaysinfernal && getMaxInputEu() < recipe.mEUt * 8) + return CheckRecipeResultRegistry.insufficientPower(recipe.mEUt * 8); + + double attackDamage = DIAMOND_SPIKES_DAMAGE; // damage from spikes + weaponCheck: { + MTEHatchInputBus inputbus = this.mInputBusses.size() == 0 ? null : this.mInputBusses.get(0); + if (inputbus != null && !inputbus.isValid()) inputbus = null; + ItemStack lootingHolder = inputbus == null ? null : inputbus.getStackInSlot(0); + if (lootingHolder == null) break weaponCheck; + if (weaponCache.getStackInSlot(0) != null) break weaponCheck; + if (weaponCache.isItemValid(0, lootingHolder)) { + weaponCache.setStackInSlot(0, lootingHolder); + inputbus.setInventorySlotContents(0, null); + updateSlots(); + } + } + if (weaponCache.isValid) attackDamage += weaponCache.attackDamage; + + if (EECPlayer == null) EECPlayer = new EECFakePlayer(this); + EECPlayer.currentWeapon = weaponCache.getStackInSlot(0); + + this.mOutputItems = recipe.generateOutputs( + rand, + this, + attackDamage, + weaponCache.isValid ? weaponCache.looting : 0, + mIsProducingInfernalDrops, + voidAllDamagedAndEnchantedItems); + + EECPlayer.currentWeapon = null; + + this.mOutputFluids = new FluidStack[] { FluidRegistry.getFluidStack("xpjuice", 120) }; + ItemStack weapon = weaponCache.getStackInSlot(0); + int times = this.calculatePerfectOverclock(this.lEUt, this.mMaxProgresstime); + if (weaponCache.isValid && weapon.isItemStackDamageable()) { + EECPlayer.currentWeapon = weapon; + Item lootingHolderItem = weapon.getItem(); + for (int i = 0; i < times + 1; i++) { + // noinspection ConstantConditions + if (!lootingHolderItem.hitEntity(weapon, recipe.recipe.entity, EECPlayer)) break; + if (weapon.stackSize == 0) { + weaponCache.setStackInSlot(0, null); + break; + } + } + EECPlayer.currentWeapon = null; + } + } + if (this.lEUt > 0) this.lEUt = -this.lEUt; + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + + if (mobPacket == null) mobPacket = new CustomTileEntityPacket((TileEntity) this.getBaseMetaTileEntity(), null); + mobPacket.resetHelperData(); + mobPacket.addData(mAnimationEnabled); + if (mAnimationEnabled) mobPacket.addData(mobType); + mobPacket.sendToAllAround(16); + + this.updateSlots(); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + private boolean isRitualValid() { + if (!isInRitualMode) return false; + if (masterStoneRitual == null) return false; + if (masterStoneRitual.isInvalid() || !(((TEMasterStone) masterStoneRitual).getCurrentRitual() + .equals(WellOfSufferingRitualName))) { + masterStoneRitual = null; + return false; + } + return true; + } + + private boolean connectToRitual() { + if (!BloodMagic.isModLoaded()) return false; + ChunkCoordinates coords = this.getBaseMetaTileEntity() + .getCoords(); + int[] abc = new int[] { 0, -8, 2 }; + int[] xyz = new int[] { 0, 0, 0 }; + this.getExtendedFacing() + .getWorldOffset(abc, xyz); + xyz[0] += coords.posX; + xyz[1] += coords.posY; + xyz[2] += coords.posZ; + TileEntity te = this.getBaseMetaTileEntity() + .getTileEntity(xyz[0], xyz[1], xyz[2]); + if (te instanceof TEMasterStone) { + if (((TEMasterStone) te).getCurrentRitual() + .equals(WellOfSufferingRitualName)) { + masterStoneRitual = te; + return true; + } + } + return false; + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mGlassTier = 0; + mCasing = 0; + if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 6, 0)) return false; + if (mCasing < 35 || mMaintenanceHatches.size() != 1 + || mEnergyHatches.size() == 0 + || !(mInputBusses.size() == 0 || (mInputBusses.size() == 1 && mInputBusses.get(0).mTier == 0))) + return false; + if (mGlassTier < 8) for (MTEHatchEnergy hatch : mEnergyHatches) if (hatch.mTier > mGlassTier) return false; + if (isInRitualMode) connectToRitual(); + return true; + } + + @Override + public String[] getInfoData() { + ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); + info.add("Animations: " + EnumChatFormatting.YELLOW + (mAnimationEnabled ? "Enabled" : "Disabled")); + info.add( + "Is allowed to produce infernal drops: " + EnumChatFormatting.YELLOW + + (mIsProducingInfernalDrops ? "Yes" : "No")); + info.add( + "Void all damaged and enchanted items: " + EnumChatFormatting.YELLOW + + (voidAllDamagedAndEnchantedItems ? "Yes" : "No")); + info.add("Is in ritual mode: " + EnumChatFormatting.YELLOW + (isInRitualMode ? "Yes" : "No")); + if (isInRitualMode) info.add( + "Is connected to ritual: " + + (isRitualValid() ? EnumChatFormatting.GREEN + "Yes" : EnumChatFormatting.RED + "No")); + else { + info.add("Inserted weapon: " + EnumChatFormatting.YELLOW + (weaponCache.isValid ? "Yes" : "No")); + if (weaponCache.isValid) { + info.add("Weapon attack damage: " + EnumChatFormatting.YELLOW + weaponCache.attackDamage); + info.add("Weapon looting level: " + EnumChatFormatting.YELLOW + weaponCache.looting); + info.add( + "Total attack damage: " + EnumChatFormatting.YELLOW + + (DIAMOND_SPIKES_DAMAGE + weaponCache.attackDamage)); + } else info.add("Total attack damage: " + EnumChatFormatting.YELLOW + DIAMOND_SPIKES_DAMAGE); + } + return info.toArray(new String[0]); + } + + @Override + protected void addConfigurationWidgets(DynamicPositionedRow configurationElements, UIBuildContext buildContext) { + configurationElements.setSynced(true); + configurationElements.widget(new CycleButtonWidget().setToggle(() -> isInRitualMode, v -> { + if (this.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(buildContext.getPlayer(), "Can't change mode when running !"); + return; + } + + isInRitualMode = v; + + if (!(buildContext.getPlayer() instanceof EntityPlayerMP)) return; + if (!isInRitualMode) { + GTUtility.sendChatToPlayer(buildContext.getPlayer(), "Ritual mode disabled"); + } else { + GTUtility.sendChatToPlayer(buildContext.getPlayer(), "Ritual mode enabled"); + if (connectToRitual()) + GTUtility.sendChatToPlayer(buildContext.getPlayer(), "Successfully connected to the ritual"); + else GTUtility.sendChatToPlayer(buildContext.getPlayer(), "Can't connect to the ritual"); + } + }) + .setTextureGetter(toggleButtonTextureGetter) + .setVariableBackgroundGetter(toggleButtonBackgroundGetter) + .setSize(16, 16) + .addTooltip("Ritual mode") + .setTooltipShowUpDelay(TOOLTIP_DELAY)); + configurationElements.widget(new CycleButtonWidget().setToggle(() -> mIsProducingInfernalDrops, v -> { + if (this.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(buildContext.getPlayer(), "Can't change mode when running !"); + return; + } + + mIsProducingInfernalDrops = v; + + if (!(buildContext.getPlayer() instanceof EntityPlayerMP)) return; + if (!mIsProducingInfernalDrops) GTUtility + .sendChatToPlayer(buildContext.getPlayer(), "Mobs will now be prevented from spawning infernal"); + else GTUtility.sendChatToPlayer(buildContext.getPlayer(), "Mobs can spawn infernal now"); + }) + .setTextureGetter(toggleButtonTextureGetter) + .setVariableBackgroundGetter(toggleButtonBackgroundGetter) + .setSize(16, 16) + .addTooltip("Is allowed to spawn infernal mobs") + .addTooltip(new Text("Does not affect mobs that are always infernal !").color(Color.GRAY.normal)) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); + configurationElements.widget(new CycleButtonWidget().setToggle(() -> voidAllDamagedAndEnchantedItems, v -> { + if (this.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(buildContext.getPlayer(), "Can't change mode when running !"); + return; + } + + voidAllDamagedAndEnchantedItems = v; + + if (!(buildContext.getPlayer() instanceof EntityPlayerMP)) return; + if (!voidAllDamagedAndEnchantedItems) GTUtility.sendChatToPlayer(buildContext.getPlayer(), "Void nothing"); + else GTUtility.sendChatToPlayer(buildContext.getPlayer(), "Void all damaged and enchanted items"); + }) + .setTextureGetter(toggleButtonTextureGetter) + .setVariableBackgroundGetter(toggleButtonBackgroundGetter) + .setSize(16, 16) + .addTooltip("Void all damaged and enchanted items") + .addTooltip( + new Text("Does not affect infernal drops and some special drops like Sticky Sword!") + .color(Color.GRAY.normal)) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); + } + + @Override + public void createInventorySlots() { + final SlotWidget spawnerSlot = new SlotWidget(inventoryHandler, 1); + spawnerSlot.setBackground( + GTUITextures.SLOT_DARK_GRAY, + UITexture.fullImage(Tags.MODID, "gui/slot/gray_spawner") + .withFixedSize(16, 16) + .withOffset(1, 1)); + spawnerSlot.setFilter(stack -> stack.getItem() == poweredSpawnerItem); + slotWidgets.add(spawnerSlot); + final SlotWidget weaponSlot = new SlotWidget(weaponCache, 0); + weaponSlot.setBackground( + GTUITextures.SLOT_DARK_GRAY, + UITexture.fullImage(Tags.MODID, "gui/slot/gray_sword") + .withFixedSize(16, 16) + .withOffset(1, 1)); + slotWidgets.add(weaponSlot); + } + + private static class EECFakePlayer extends FakePlayer { + + MTEExtremeEntityCrusher mte; + ItemStack currentWeapon; + + public EECFakePlayer(MTEExtremeEntityCrusher mte) { + super( + (WorldServer) mte.getBaseMetaTileEntity() + .getWorld(), + new GameProfile( + UUID.nameUUIDFromBytes("[EEC Fake Player]".getBytes(StandardCharsets.UTF_8)), + "[EEC Fake Player]")); + this.mte = mte; + } + + @Override + public void renderBrokenItemStack(ItemStack p_70669_1_) {} + + @Override + public Random getRNG() { + return mte.rand; + } + + @Override + public void destroyCurrentEquippedItem() {} + + @Override + public ItemStack getCurrentEquippedItem() { + return currentWeapon; + } + + @Override + public ItemStack getHeldItem() { + return currentWeapon; + } + } +} diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java new file mode 100644 index 0000000000..03ddadd269 --- /dev/null +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEExtremeIndustrialGreenhouse.java @@ -0,0 +1,1274 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2024 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.tileentity.gregtech.multiblock; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.Mods.ProjectRedIllumination; +import static gregtech.api.enums.Mods.RandomThings; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; +import static gregtech.api.util.GTStructureUtility.ofHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static kubatech.api.Variables.Author; +import static kubatech.api.Variables.StructureHologram; +import static kubatech.api.utils.ItemUtils.readItemStackFromNBT; + +import java.io.IOException; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Comparator; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.MainAxisAlignment; +import com.gtnewhorizons.modularui.api.screen.ModularUIContext; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.builder.UIInfo; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.Column; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import bartworks.API.BorosilicateGlass; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.enums.VoltageIndex; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.VoidProtectionHelper; +import gregtech.common.tileentities.machines.MTEHatchOutputBusME; +import ic2.core.init.BlocksItems; +import ic2.core.init.InternalName; +import kubatech.Tags; +import kubatech.api.EIGDynamicInventory; +import kubatech.api.eig.EIGBucket; +import kubatech.api.eig.EIGDropTable; +import kubatech.api.eig.EIGMode; +import kubatech.api.enums.EIGModes; +import kubatech.api.implementations.KubaTechGTMultiBlockBase; +import kubatech.client.effect.CropRenderer; +import kubatech.tileentity.gregtech.multiblock.eigbuckets.EIGIC2Bucket; + +@SuppressWarnings("unused") +public class MTEExtremeIndustrialGreenhouse extends KubaTechGTMultiBlockBase { + + /*** + * BALANCE OF THE IC2 MODE: + * (let T = EIG_BALANCE_IC2_ACCELERATOR_TIER) + * All IC2 crops are simulated and all drops are generated based on the real crop drops. + * T is a tick accelerator tier for the IC2 crops, + * Each crop in the EIG is accelerated using T tier accelerator + * (Accelerators in the game are defined as 2^T acceleration, 8*(4^T) voltage, 6 amps) + * IC2 mode is unlocked at T+1 tier (glass and power) + * And each amp of T gives one crop slot, EIG only consumes 1 AMP of a tier that it is at + * (EIG starts at 4 crops (T+1 tier) and each tier quadruples the amount of slots) + * Each crop is accelerated 2^T times + * Summary: + * Accelerators in EIG are a bit cheaper than on the crop field (4 amps instead of 6 amps) + * There are 4 crops touching the accelerator (1 AMP for 1 accelerated crop) + * + * Changing T one number down will buff the EIG twice, as well as changing it up will nerf the EIG twice + * (That is because accelerators are imperfectly scaled in game LV = 2x, MV = 4x, ...) + */ + public static final int EIG_BALANCE_IC2_ACCELERATOR_TIER = VoltageIndex.IV; + public static final int EIG_BALANCE_REGULAR_MODE_MIN_TIER = VoltageIndex.EV; + public static final int EIG_BALANCE_IC2_MODE_MIN_TIER = EIG_BALANCE_IC2_ACCELERATOR_TIER + 1; + public static final double EIG_BALANCE_MAX_FERTILIZER_BOOST = 4.0d; + public static final int EIG_BALANCE_WEED_EX_USAGE_BEGINS_AT = 1000; + public static final int EIG_BALANCE_WATER_USAGE_PER_SEED = 1000; + + private static final Fluid WEEDEX_FLUID = Materials.WeedEX9000.mFluid; + private static final LinkedList FERTILIZER_ITEM_LIST = new LinkedList<>(); + + public static void addFertilizerItem(ItemStack fertilizer) { + FERTILIZER_ITEM_LIST.addLast(fertilizer); + } + + private static final boolean debug = false; + + /*** + * Changing this variable will cause ALL EIGs in the world to regenerate their drop tables. + */ + private static final int NBT_REVISION = 1; + private static final int CONFIGURATION_WINDOW_ID = 999; + + public final List buckets = new LinkedList<>(); + public final EIGDropTable dropTracker = new EIGDropTable(); + public Collection toMigrate; + public EIGDropTable guiDropTracker = new EIGDropTable(); + private HashMap synchedGUIDropTracker = new HashMap<>(); + private int maxSeedTypes = 0; + private int maxSeedCount = 0; + /** + * The setup phase of the EIG. 0 operation. 1 input. 2 output. + */ + private int setupPhase = 1; + /** + * The amount of water used per cycle. + */ + private int waterUsage = 0; + /** + * The tier of the glass on the EIG. + */ + private byte glassTier = 0; + /** + * The Amount of Weed-EX used per cycle. + */ + private int weedEXUsage = 0; + /** + * The mode that the EIG is in. + */ + private EIGMode mode = EIGModes.Normal; + /** + * Determines whether new IC2 buckets will use no humidity for their growth speed calculation. + */ + private boolean useNoHumidity = false; + + public boolean isInNoHumidityMode() { + return this.useNoHumidity; + } + + // region structure stuff + + private int mCasing = 0; + private static final int CASING_INDEX = 49; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { // spotless:off + { "ccccc", "ccccc", "ccccc", "ccccc", "ccccc" }, + { "ccccc", "clllc", "clllc", "clllc", "ccccc" }, + { "ggggg", "g---g", "g---g", "g---g", "ggggg" }, + { "ggggg", "g---g", "g---g", "g---g", "ggggg" }, + { "ccccc", "cdddc", "cdwdc", "cdddc", "ccccc" }, + { "cc~cc", "cCCCc", "cCCCc", "cCCCc", "ccccc" }, + })) // spotless:on + .addElement( + 'c', + ofChain( + onElementPass(t -> t.mCasing++, ofBlock(GregTechAPI.sBlockCasings4, 1)), + ofHatchAdder(MTEExtremeIndustrialGreenhouse::addEnergyInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEExtremeIndustrialGreenhouse::addMaintenanceToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEExtremeIndustrialGreenhouse::addInputToMachineList, CASING_INDEX, 1), + ofHatchAdder(MTEExtremeIndustrialGreenhouse::addOutputToMachineList, CASING_INDEX, 1))) + .addElement('C', onElementPass(t -> t.mCasing++, ofBlock(GregTechAPI.sBlockCasings4, 1))) + .addElement( + 'l', + ProjectRedIllumination.isModLoaded() + ? ofChain( + ofBlock(Block.getBlockFromName("ProjRed|Illumination:projectred.illumination.lamp"), 10), + ofBlock(Block.getBlockFromName("ProjRed|Illumination:projectred.illumination.lamp"), 26)) + : ofChain(ofBlock(Blocks.redstone_lamp, 0), ofBlock(Blocks.lit_redstone_lamp, 0))) + .addElement( + 'g', + BorosilicateGlass + .ofBoroGlass((byte) 0, (byte) 1, Byte.MAX_VALUE, (te, t) -> te.glassTier = t, te -> te.glassTier)) + .addElement( + 'd', + ofBlock( + RandomThings.isModLoaded() ? Block.getBlockFromName("RandomThings:fertilizedDirt_tilled") + : Blocks.farmland, + 0)) + .addElement( + 'w', + ofChain(ofBlock(Blocks.water, 0), ofBlock(BlocksItems.getFluidBlock(InternalName.fluidDistilledWater), 0))) + .build(); + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + public boolean checkMachine(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + mCasing = 0; + glassTier = 0; + if (debug) glassTier = 8; + + if (!checkPiece(STRUCTURE_PIECE_MAIN, 2, 5, 0)) return false; + + if (this.glassTier < 8 && !this.mEnergyHatches.isEmpty()) + for (MTEHatchEnergy hatchEnergy : this.mEnergyHatches) if (this.glassTier < hatchEnergy.mTier) return false; + + boolean valid = this.mMaintenanceHatches.size() == 1 && !this.mEnergyHatches.isEmpty() && this.mCasing >= 70; + + if (valid) this.updateSeedLimits(); + + return valid; + } + + @Override + public void construct(ItemStack itemStack, boolean b) { + buildPiece(STRUCTURE_PIECE_MAIN, itemStack, b, 2, 5, 0); + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated() && f.isNotFlipped(); + } + + // endregion structure stuff + + // region tooltip + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + String fertilizerBoostMax = String.format("%.0f", EIG_BALANCE_MAX_FERTILIZER_BOOST * 100); + tt.addMachineType("Crop Farm") + .addInfo("Controller block for the Extreme Industrial Greenhouse") + .addInfo(Author) + .addInfo("Grow your crops like a chad!") + .addInfo("Use screwdriver to enable/change/disable setup mode") + .addInfo("Use screwdriver while sneaking to enable/disable IC2 mode") + .addInfo("Use wire cutters to give incoming IC2 seeds 0 humidity") + .addInfo("Uses " + EIG_BALANCE_WATER_USAGE_PER_SEED + "L of water per seed per operation") + .addInfo( + "Uses 1L of " + new FluidStack(WEEDEX_FLUID, 1).getLocalizedName() + + " per operation per seed if it contains more than " + + EIG_BALANCE_WEED_EX_USAGE_BEGINS_AT + + " seeds") + .addInfo("Otherwise, around 1% of seeds will be voided each operation") + .addInfo("You can insert fertilizer each operation to get more drops (max + " + fertilizerBoostMax + ")") + .addInfo("--------------------- SETUP MODE ---------------------") + .addInfo("Does not take power") + .addInfo("There are two modes: input / output") + .addInfo("Input mode: machine will take seeds from input bus and plant them") + .addInfo("[IC2] You need to also input block that is required under the crop") + .addInfo("Output mode: machine will take planted seeds and output them"); + EIGModes.addTooltipInfo(tt); + tt.addInfo(StructureHologram) + .addSeparator() + .beginStructureBlock(5, 6, 5, false) + .addController("Front bottom center") + .addCasingInfoMin("Clean Stainless Steel Casings", 70, false) + .addOtherStructurePart("Borosilicate Glass", "Hollow two middle layers") + .addStructureInfo("The glass tier limits the Energy Input tier") + .addStructureInfo("The dirt is from RandomThings, must be tilled") + .addStructureInfo("Regular water and IC2 Distilled Water are accepted") + .addStructureInfo("Purple lamps are from ProjectRedIllumination. They can be powered and/or inverted") + .addMaintenanceHatch("Any casing (Except inner bottom ones)", 1) + .addInputBus("Any casing (Except inner bottom ones)", 1) + .addOutputBus("Any casing (Except inner bottom ones)", 1) + .addInputHatch("Any casing (Except inner bottom ones)", 1) + .addEnergyHatch("Any casing (Except inner bottom ones)", 1) + .toolTipFinisher(Tags.MODNAME); + return tt; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + List info = new ArrayList<>(Arrays.asList(super.getStructureDescription(stackSize))); + info.add("The dirt is from RandomThings, must be tilled"); + info.add("Purple lamps are from ProjectRedIllumination. They can be powered and/or inverted"); + return info.toArray(new String[] {}); + } + + // endregion tooltip + + // region (de)constructor + + public MTEExtremeIndustrialGreenhouse(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEExtremeIndustrialGreenhouse(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEExtremeIndustrialGreenhouse(this.mName); + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + if (this.toMigrate != null) { + // Create the new buckets respectively. + if (this.mode == EIGModes.IC2) { + for (EIGMigrationHolder holder : toMigrate) { + // We will have to revalidate the seeds on the next cycle. + this.buckets + .add(new EIGIC2Bucket(holder.seed, holder.count, holder.supportBlock, holder.useNoHumidity)); + } + } else { + this.mode = EIGModes.Normal; + for (EIGMigrationHolder holder : toMigrate) { + holder.seed.stackSize = holder.count; + EIGBucket bucket = this.mode.tryCreateNewBucket(this, holder.seed, Integer.MAX_VALUE, false); + if (bucket == null) { + // if we somehow can't grow the seed, try ejecting it at least. + holder.seed.stackSize = holder.count; + this.addOutput(holder.seed); + continue; + } + this.buckets.add(bucket); + } + } + } + } + + /** + * Ejects all the seeds when the controller is broken. + */ + @Override + public void onRemoval() { + super.onRemoval(); + + // attempt to empty all buckets + buckets.removeIf(this::tryEmptyBucket); + if (buckets.isEmpty()) return; + + // attempt to drop non outputted items into the world. + IGregTechTileEntity mte = this.getBaseMetaTileEntity(); + for (EIGBucket bucket : this.buckets) { + for (ItemStack stack : bucket.tryRemoveSeed(bucket.getSeedCount(), false)) { + EntityItem entityitem = new EntityItem( + mte.getWorld(), + mte.getXCoord(), + mte.getYCoord(), + mte.getZCoord(), + stack); + entityitem.delayBeforeCanPickup = 10; + mte.getWorld() + .spawnEntityInWorld(entityitem); + } + } + } + + // endregion + + // region tool interactions + + /** + * Right click = change setup phase + * Shift+Right Click = change EIG Mode + */ + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ, + ItemStack aTool) { + if (aPlayer.isSneaking()) { + tryChangeMode(aPlayer); + } else { + tryChangeSetupPhase(aPlayer); + } + } + + /** + * Right-Clicking with wire cutters toggle no hydration mode. + */ + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack aTool) { + this.tryChangeHumidityMode(aPlayer); + return true; + } + + // endregion tool interactions + + // region mode change standardisation + + /** + * Attempts to change the setup phase of the EIG to the next mode + * + * @param aPlayer The player to notify for success and errors + */ + private void tryChangeSetupPhase(EntityPlayer aPlayer) { + // TODO: Create l10n entries for the setup phase change messages. + if (this.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(aPlayer, "You can't enable/disable setup if the machine is working!"); + return; + } + this.setupPhase++; + if (this.setupPhase == 3) this.setupPhase = 0; + String phaseChangeMessage = "EIG is now running in "; + switch (this.setupPhase) { + case 0: + phaseChangeMessage += "operational mode."; + break; + case 1: + phaseChangeMessage += "seed input mode."; + break; + case 2: + phaseChangeMessage += "seed output mode."; + break; + default: + phaseChangeMessage += "an invalid mode please send us a ticket!"; + break; + } + this.updateSeedLimits(); + GTUtility.sendChatToPlayer(aPlayer, phaseChangeMessage); + } + + /** + * Attempts to change the mode of the EIG to the next mode. + * + * @param aPlayer The player to notify of success and errors + */ + private void tryChangeMode(EntityPlayer aPlayer) { + // TODO: Create l10n entries for the mode change messages. + if (this.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(aPlayer, "You can't change mode if the machine is working!"); + return; + } + if (!this.buckets.isEmpty()) { + GTUtility.sendChatToPlayer(aPlayer, "You can't change mode if there are seeds inside!"); + return; + } + this.mode = EIGModes.getNextMode(this.mode); + this.updateSeedLimits(); + GTUtility.sendChatToPlayer(aPlayer, "Changed mode to: " + this.mode.getName()); + } + + /** + * Attempts to toggle the hydration mode of the EIG. + * + * @param aPlayer The player to notify for success and errors + */ + private void tryChangeHumidityMode(EntityPlayer aPlayer) { + // TODO: Create l10n entries for the humidity status interactions. + this.useNoHumidity = !this.useNoHumidity; + if (this.useNoHumidity) { + GTUtility.sendChatToPlayer(aPlayer, "No Humidity mode enabled."); + } else { + GTUtility.sendChatToPlayer(aPlayer, "No Humidity mode disabled."); + } + } + + // endregion mode change standardisation + + // region (de)serialisations + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("version", NBT_REVISION); + aNBT.setByte("glassTier", this.glassTier); + aNBT.setInteger("setupPhase", this.setupPhase); + aNBT.setString("mode", this.mode.getName()); + aNBT.setBoolean("isNoHumidity", this.useNoHumidity); + NBTTagList bucketListNBT = new NBTTagList(); + for (EIGBucket b : this.buckets) { + bucketListNBT.appendTag(b.save()); + } + aNBT.setTag( + "progress", + this.dropTracker.intersect(this.guiDropTracker) + .save()); + aNBT.setTag("buckets", bucketListNBT); + } + + private static class EIGMigrationHolder { + + public final ItemStack seed; + public final ItemStack supportBlock; + public final boolean useNoHumidity; + public int count; + public boolean isValid = false; + + public EIGMigrationHolder(NBTTagCompound nbt) { + this.seed = readItemStackFromNBT(nbt.getCompoundTag("input")); + this.count = this.seed.stackSize; + this.seed.stackSize = 1; + this.supportBlock = nbt.hasKey("undercrop", 10) ? readItemStackFromNBT(nbt.getCompoundTag("undercrop")) + : null; + this.useNoHumidity = nbt.getBoolean("noHumidity"); + this.isValid = true; + } + + public String getKey() { + if (this.supportBlock == null) return seed.toString(); + return "(" + this.seed.toString() + "," + this.supportBlock + ")"; + } + + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + int revision = aNBT.hasKey("version", 3) ? aNBT.getInteger("version") : 0; + if (revision <= 0) { + // migrate old EIG with greenhouse slots to new Bucker mode and fix variable names + this.glassTier = aNBT.getByte("glasTier"); + this.setupPhase = aNBT.getInteger("setupphase"); + this.mode = aNBT.getBoolean("isIC2Mode") ? EIGModes.IC2 : EIGModes.Normal; + this.useNoHumidity = aNBT.getBoolean("isNoHumidity"); + // aggregate all seed types + HashMap toMigrate = new HashMap<>(); + for (int i = 0; i < aNBT.getInteger("mStorageSize"); i++) { + EIGMigrationHolder holder = new EIGMigrationHolder(aNBT.getCompoundTag("mStorage." + i)); + if (toMigrate.containsKey(holder.getKey())) { + toMigrate.get(holder.getKey()).count += holder.count; + } else { + toMigrate.put(holder.getKey(), holder); + } + } + + this.toMigrate = toMigrate.values(); + } else { + this.glassTier = aNBT.getByte("glassTier"); + this.setupPhase = aNBT.getInteger("setupPhase"); + this.mode = EIGModes.getModeFromName(aNBT.getString("mode")); + this.useNoHumidity = aNBT.getBoolean("isNoHumidity"); + this.mode.restoreBuckets(aNBT.getTagList("buckets", 10), this.buckets); + new EIGDropTable(aNBT.getTagList("progress", 10)).addTo(this.dropTracker); + } + } + + // endregion + + // region crop visuals rendering + + @SideOnly(Side.CLIENT) + public void spawnVisualCrops(World world, int x, int y, int z, int age) { + CropRenderer crop = new CropRenderer(world, x, y, z, age); + Minecraft.getMinecraft().effectRenderer.addEffect(crop); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isClientSide()) { + if (aBaseMetaTileEntity.isActive() && aTick % 40 == 0) { + int[] abc = new int[] { 0, -2, 2 }; + int[] xyz = new int[] { 0, 0, 0 }; + this.getExtendedFacing() + .getWorldOffset(abc, xyz); + xyz[0] += aBaseMetaTileEntity.getXCoord(); + xyz[1] += aBaseMetaTileEntity.getYCoord(); + xyz[2] += aBaseMetaTileEntity.getZCoord(); + spawnVisualCrops(aBaseMetaTileEntity.getWorld(), xyz[0], xyz[1], xyz[2], 40); + } + } + } + + // endregion crop visuals rendering + + /** + * Calculates the total amount of seeds in the EIG + * + * @return The number of seeds in the EIG. + */ + private int getTotalSeedCount() { + // null check is to prevent a occasional weird NPE from MUI + return this.buckets.parallelStream() + .reduce(0, (b, t) -> b + t.getSeedCount(), Integer::sum); + } + + /** + * Updates the max seed counts of the machine + */ + private void updateSeedLimits() { + this.maxSeedTypes = this.mode.getSlotCount(getVoltageTier()); + this.maxSeedCount = this.maxSeedTypes * this.mode.getSeedCapacityPerSlot(); + } + + /** + * Attempts to drain the multi of a given fluid, will only return true if all fluid is consumed. + * + * @param toConsume A fluid stack of the fluid to consume. + * @param drainPartial True to allow partial consumption. + * @return True when all the fluid has been consumed. + */ + private boolean tryDrain(FluidStack toConsume, boolean drainPartial) { + // Nothing to consume = success I guess? + if (toConsume == null || toConsume.amount <= 0) return true; + // TODO: improve fluid draining logic. + List fluids = this.getStoredFluids(); + List fluidsToUse = new ArrayList<>(fluids.size()); + int remaining = toConsume.amount; + for (FluidStack fluid : fluids) { + if (fluid.isFluidEqual(toConsume)) { + remaining -= fluid.amount; + fluidsToUse.add(fluid); + if (remaining <= 0) break; + } + } + if (!drainPartial && remaining > 0 && !debug) return false; + boolean success = remaining <= 0; + remaining = toConsume.amount - Math.max(0, remaining); + for (FluidStack fluid : fluidsToUse) { + int used = Math.min(remaining, fluid.amount); + fluid.amount -= used; + remaining -= used; + } + return success; + } + + /** + * Checks if a stack contains an item that can be used as fertilizer + * + * @param item A stack of item to validate + * @return True if the item can be consumed as fertilizer. + */ + public static boolean isFertilizer(ItemStack item) { + if (item == null || item.stackSize <= 0) return false; + for (ItemStack fert : FERTILIZER_ITEM_LIST) { + if (GTUtility.areStacksEqual(item, fert)) return true; + } + return false; + } + + private boolean tryEmptyBucket(EIGBucket bucket) { + // check if it's already empty + if (bucket.getSeedCount() <= 0) return true; + + // check if we have an ME output bus to output to. + for (MTEHatchOutputBus tHatch : filterValidMTEs(mOutputBusses)) { + if (!(tHatch instanceof MTEHatchOutputBusME)) continue; + for (ItemStack stack : bucket.tryRemoveSeed(bucket.getSeedCount(), false)) { + ((MTEHatchOutputBusME) tHatch).store(stack); + } + return true; + } + + // Else attempt to empty the bucket while not voiding anything. + ItemStack[] simulated = bucket.tryRemoveSeed(1, true); + VoidProtectionHelper helper = new VoidProtectionHelper().setMachine(this, true, false) + .setItemOutputs(simulated) + .setMaxParallel(bucket.getSeedCount()) + .build(); + if (helper.getMaxParallel() > 0) { + for (ItemStack toOutput : bucket.tryRemoveSeed(helper.getMaxParallel(), false)) { + for (MTEHatchOutputBus tHatch : filterValidMTEs(mOutputBusses)) { + if (tHatch.storeAll(toOutput)) break; + } + } + } + return bucket.getSeedCount() <= 0; + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + int tier = getVoltageTier(); + updateSeedLimits(); + + if (setupPhase > 0) { + if ((buckets.size() >= maxSeedTypes && setupPhase == 1) || (buckets.isEmpty() && setupPhase == 2)) + return CheckRecipeResultRegistry.NO_RECIPE; + + if (setupPhase == 1) { + List inputs = getStoredInputs(); + for (ItemStack input : inputs) { + addCrop(input); + if (buckets.size() >= maxSeedTypes) break; + } + } else if (setupPhase == 2) { + for (Iterator iterator = this.buckets.iterator(); iterator.hasNext();) { + EIGBucket bucket = iterator.next(); + if (tryEmptyBucket(bucket)) { + iterator.remove(); + } else { + this.mMaxProgresstime = 20; + this.lEUt = 0; + return CheckRecipeResultRegistry.ITEM_OUTPUT_FULL; + } + } + } + + this.updateSlots(); + this.mMaxProgresstime = 5; + this.lEUt = 0; + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + return CheckRecipeResultRegistry.SUCCESSFUL; + } + if (this.maxSeedTypes < this.buckets.size()) { + return SimpleCheckRecipeResult.ofFailure("EIG_slotoverflow"); + } + int seedCount = this.getTotalSeedCount(); + if (this.maxSeedCount < seedCount) { + return SimpleCheckRecipeResult.ofFailure("EIG_seedOverflow"); + } + + // Kick out bad buckets. + for (Iterator iterator = this.buckets.iterator(); iterator.hasNext();) { + EIGBucket bucket = iterator.next(); + if (bucket.isValid() || bucket.revalidate(this)) continue; + // attempt to empty the bucket + tryEmptyBucket(bucket); + // remove empty bucket and attempt to revalidate invalid buckets + if (bucket.getSeedCount() <= 0) { + iterator.remove(); + } + } + + if (this.buckets.isEmpty()) return CheckRecipeResultRegistry.NO_RECIPE; + + // Compute the Weed-EX and water requirements, + // TODO: We only really need to update water usage and WeedEX usage when adding seeds or when loading NBT. + this.waterUsage = seedCount * 1000; + this.weedEXUsage = (seedCount >= EIG_BALANCE_WEED_EX_USAGE_BEGINS_AT ? seedCount : 0) + * this.mode.getWeedEXMultiplier(); + + // Consume water, fail if we don't have enough + if (!this.tryDrain(new FluidStack(FluidRegistry.WATER, this.waterUsage), false)) { + return SimpleCheckRecipeResult.ofFailure("EIG_missingwater"); + } + + // Consume weed ex, if there isn't enough we consume what's there but don't fail + if (weedEXUsage > 0 && !this.tryDrain(new FluidStack(WEEDEX_FLUID, this.weedEXUsage), true)) { + IGregTechTileEntity baseMTE = this.getBaseMetaTileEntity(); + // Cap seed murder to the Weed EX limit, no more senseless murder of bystanders + int killLimit = (seedCount - EIG_BALANCE_WEED_EX_USAGE_BEGINS_AT + 1); + int toKill = Math.min(killLimit, baseMTE.getRandomNumber((int) ((double) seedCount * 0.02d) + 1)); + if (toKill > 0) { + for (Iterator iterator = this.buckets.iterator(); iterator.hasNext();) { + EIGBucket bucket = iterator.next(); + ItemStack[] removed = bucket.tryRemoveSeed(toKill, false); + if (removed == null || removed[0].stackSize <= 0) continue; + toKill -= removed[0].stackSize; + // if bucket is empty, yeet it out. + if (bucket.getSeedCount() <= 0) iterator.remove(); + // if we are out of crops to kill we can just leave + if (toKill <= 0) break; + } + } + } + + // OVERCLOCK + // FERTILIZER IDEA: + // IC2 +10% per fertilizer per crop per operation + // NORMAL +200% per fertilizer per crop per operation + + int consumedFertilizer = 0; + int maxFertilizerToConsume = 0; + for (EIGBucket bucket : this.buckets) + maxFertilizerToConsume += bucket.getSeedCount() * this.mode.getMaxFertilizerUsagePerSeed(); + + ArrayList inputs = getStoredInputs(); + for (ItemStack i : inputs) { + if (isFertilizer(i)) { + int used = Math.min(i.stackSize, maxFertilizerToConsume - consumedFertilizer); + i.stackSize -= used; + consumedFertilizer += used; + } + if (consumedFertilizer == maxFertilizerToConsume) break; + } + double multiplier = 1.d + + (((double) consumedFertilizer / (double) maxFertilizerToConsume) * EIG_BALANCE_MAX_FERTILIZER_BOOST); + + // compute drops based on the drop tracker + this.guiDropTracker = new EIGDropTable(); + if (this.mode == EIGModes.IC2) { + if (glassTier < (EIG_BALANCE_IC2_ACCELERATOR_TIER + 1)) + return SimpleCheckRecipeResult.ofFailure("EIG_ic2glass"); + this.mMaxProgresstime = 100; + // determine the amount of time we are simulating on the seed. + double timeElapsed = ((double) this.mMaxProgresstime * (1 << EIG_BALANCE_IC2_ACCELERATOR_TIER)); + // Add drops to the drop tracker for each seed bucket. + for (EIGBucket bucket : this.buckets) { + bucket.addProgress(timeElapsed * multiplier, this.guiDropTracker); + } + } else if (this.mode == EIGModes.Normal) { + this.mMaxProgresstime = Math.max(20, 100 / (tier - 3)); // Min 1 s + for (EIGBucket bucket : this.buckets) { + bucket.addProgress(multiplier, this.guiDropTracker); + } + } + + this.guiDropTracker.addTo(this.dropTracker, multiplier); + this.mOutputItems = this.dropTracker.getDrops(); + + // consume power + this.lEUt = -(long) ((double) GTValues.V[tier] * 0.99d); + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + this.updateSlots(); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + private ItemStack addCrop(ItemStack input) { + return addCrop(input, false) ? input : null; + } + + /** + * Adds a seed to the EIG + * + * @param input The item to add to the EIG. + * @param simulate Set to true to not actually consume any input. + * @return True if all items were consumed + */ + private boolean addCrop(ItemStack input, boolean simulate) { + // Nothing to add = success since technically nothing should have changed? + if (input == null || input.stackSize <= 0) return true; + + // For safety's sake copy the input if we are simulating to make sure we aren't modifying it + if (simulate) input = input.copy(); + + // Cap input count to current seed max + int addCap = Math.min(input.stackSize, this.maxSeedCount - this.getTotalSeedCount()); + if (addCap <= 0) return false; + + // Attempt to find a compatible bucket that already exists + for (EIGBucket bucket : this.buckets) { + int consumed = bucket.tryAddSeed(this, input, addCap, simulate); + if (consumed <= 0) continue; + return input.stackSize <= 0; + } + + // Check if we have space for a new bucket + if (this.maxSeedTypes <= this.buckets.size()) { + return false; + } + + // try creating a new bucket, this only returns valid buckets. + EIGBucket bucket = this.mode.tryCreateNewBucket(this, input, addCap, simulate); + if (bucket == null) return false; + this.buckets.add(bucket); + return input.stackSize <= 0; + } + + // region ui + + private static final UIInfo GreenhouseUI = createKTMetaTileEntityUI( + KT_ModulaUIContainer_ExtremeIndustrialGreenhouse::new); + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) return true; + GreenhouseUI.open( + aPlayer, + aBaseMetaTileEntity.getWorld(), + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord()); + return true; + } + + private static class KT_ModulaUIContainer_ExtremeIndustrialGreenhouse extends ModularUIContainer { + + final WeakReference parent; + + public KT_ModulaUIContainer_ExtremeIndustrialGreenhouse(ModularUIContext context, ModularWindow mainWindow, + MTEExtremeIndustrialGreenhouse mte) { + super(context, mainWindow); + parent = new WeakReference<>(mte); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) { + if (!(aPlayer instanceof EntityPlayerMP)) return super.transferStackInSlot(aPlayer, aSlotIndex); + final Slot s = getSlot(aSlotIndex); + if (s == null) return super.transferStackInSlot(aPlayer, aSlotIndex); + if (aSlotIndex >= 36) return super.transferStackInSlot(aPlayer, aSlotIndex); + final ItemStack aStack = s.getStack(); + if (aStack == null) return super.transferStackInSlot(aPlayer, aSlotIndex); + MTEExtremeIndustrialGreenhouse mte = parent.get(); + if (mte == null) return super.transferStackInSlot(aPlayer, aSlotIndex); + // if (mte.buckets.size() >= mte.maxSeedTypes) return super.transferStackInSlot(aPlayer, aSlotIndex); + if (mte.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(aPlayer, EnumChatFormatting.RED + "Can't insert while running !"); + return super.transferStackInSlot(aPlayer, aSlotIndex); + } + + mte.addCrop(aStack); + if (aStack.stackSize <= 0) s.putStack(null); + else s.putStack(aStack); + detectAndSendChanges(); + return null; + } + } + + @Override + protected void addConfigurationWidgets(DynamicPositionedRow configurationElements, UIBuildContext buildContext) { + buildContext.addSyncedWindow(CONFIGURATION_WINDOW_ID, this::createConfigurationWindow); + configurationElements.setSynced(false); + configurationElements.widget( + new ButtonWidget().setOnClick( + (clickData, widget) -> { + if (!widget.isClient()) widget.getContext() + .openSyncedWindow(CONFIGURATION_WINDOW_ID); + }) + .setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_CYCLIC) + .addTooltip("Configuration") + .setSize(16, 16)); + } + + EIGDynamicInventory dynamicInventory = new EIGDynamicInventory<>( + 128, + 60, + () -> this.maxSeedTypes, + () -> this.maxSeedCount, + this.buckets::size, + this::getTotalSeedCount, + this.buckets, + EIGBucket::getSeedStack).allowInventoryInjection(this::addCrop) + .allowInventoryExtraction((bucket, player) -> { + if (bucket == null) return null; + int maxRemove = bucket.getSeedStack() + .getMaxStackSize(); + ItemStack[] outputs = bucket.tryRemoveSeed(maxRemove, false); + if (outputs == null || outputs.length <= 0) return null; + ItemStack ret = outputs[0]; + for (int i = 1; i < outputs.length; i++) { + ItemStack suppertItem = outputs[i]; + if (!player.inventory.addItemStackToInventory(suppertItem)) { + player.entityDropItem(suppertItem, 0.f); + } ; + } + if (bucket.getSeedCount() <= 0) this.buckets.remove(bucket); + return ret; + }) + // TODO: re-add allow inventory replace? + .setEnabled(() -> this.mMaxProgresstime == 0); + + @Override + public void createInventorySlots() { + + } + + private boolean isInInventory = true; + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + isInInventory = !getBaseMetaTileEntity().isActive(); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(4, 4) + .setSize(190, 85) + .setEnabled(w -> !isInInventory)); + builder.widget( + dynamicInventory.asWidget(builder, buildContext) + .setPos(10, 16) + .setEnabled(w -> isInInventory)); + + builder.widget( + new CycleButtonWidget().setToggle(() -> isInInventory, i -> isInInventory = i) + .setTextureGetter(i -> i == 0 ? new Text("Inventory") : new Text("Status")) + .setBackground(GTUITextures.BUTTON_STANDARD) + .setPos(140, 4) + .setSize(55, 16)); + + final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); + drawTexts(screenElements, null); + builder.widget(screenElements.setEnabled(w -> !isInInventory)); + + builder.widget(createPowerSwitchButton(builder)) + .widget(createVoidExcessButton(builder)) + .widget(createInputSeparationButton(builder)) + .widget(createBatchModeButton(builder)) + .widget(createLockToSingleRecipeButton(builder)) + .widget(createStructureUpdateButton(builder)); + + DynamicPositionedRow configurationElements = new DynamicPositionedRow(); + addConfigurationWidgets(configurationElements, buildContext); + + builder.widget( + configurationElements.setSpace(2) + .setAlignment(MainAxisAlignment.SPACE_BETWEEN) + .setPos(getRecipeLockingButtonPos().add(18, 0))); + } + + protected ModularWindow createConfigurationWindow(final EntityPlayer player) { + ModularWindow.Builder builder = ModularWindow.builder(200, 100); + builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.OVERLAY_BUTTON_CYCLIC) + .setPos(5, 5) + .setSize(16, 16)) + .widget(new TextWidget("Configuration").setPos(25, 9)) + .widget( + ButtonWidget.closeWindowButton(true) + .setPos(185, 3)) + .widget( + new Column().widget( + new CycleButtonWidget().setLength(3) + .setGetter(() -> this.setupPhase) + .setSetter(val -> { + if (!(player instanceof EntityPlayerMP)) return; + tryChangeSetupPhase(player); + }) + .addTooltip(0, new Text("Operating").color(Color.GREEN.dark(3))) + .addTooltip(1, new Text("Input").color(Color.YELLOW.dark(3))) + .addTooltip(2, new Text("Output").color(Color.YELLOW.dark(3))) + .setTextureGetter( + i -> i == 0 ? new Text("Operating").color(Color.GREEN.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0) + : i == 1 ? new Text("Input").color(Color.YELLOW.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0) + : new Text("Output").color(Color.YELLOW.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0)) + .setBackground( + ModularUITextures.VANILLA_BACKGROUND, + GTUITextures.OVERLAY_BUTTON_CYCLIC.withFixedSize(18, 18)) + .setSize(70, 18) + .addTooltip("Setup mode")) + .widget( + new CycleButtonWidget().setLength(2) + .setGetter(() -> this.mode.getUIIndex()) + .setSetter(val -> { + if (!(player instanceof EntityPlayerMP)) return; + tryChangeMode(player); + }) + .addTooltip(0, new Text("Disabled").color(Color.RED.dark(3))) + .addTooltip(1, new Text("Enabled").color(Color.GREEN.dark(3))) + .setTextureGetter( + i -> i == 0 ? new Text("Disabled").color(Color.RED.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0) + : new Text("Enabled").color(Color.GREEN.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0)) + .setBackground( + ModularUITextures.VANILLA_BACKGROUND, + GTUITextures.OVERLAY_BUTTON_CYCLIC.withFixedSize(18, 18)) + .setSize(70, 18) + .addTooltip("IC2 mode")) + .widget( + new CycleButtonWidget().setLength(2) + .setGetter(() -> useNoHumidity ? 1 : 0) + .setSetter(val -> { + if (!(player instanceof EntityPlayerMP)) return; + this.tryChangeHumidityMode(player); + }) + .addTooltip(0, new Text("Disabled").color(Color.RED.dark(3))) + .addTooltip(1, new Text("Enabled").color(Color.GREEN.dark(3))) + .setTextureGetter( + i -> i == 0 ? new Text("Disabled").color(Color.RED.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0) + : new Text("Enabled").color(Color.GREEN.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0)) + .setBackground( + ModularUITextures.VANILLA_BACKGROUND, + GTUITextures.OVERLAY_BUTTON_CYCLIC.withFixedSize(18, 18)) + .setSize(70, 18) + .addTooltip("No Humidity mode")) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive()) + .setPos(10, 30)) + .widget( + new Column().widget(new TextWidget("Setup mode").setSize(100, 18)) + .widget(new TextWidget("IC2 mode").setSize(100, 18)) + .widget(new TextWidget("No Humidity mode").setSize(100, 18)) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive()) + .setPos(80, 30)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.OVERLAY_BUTTON_CROSS) + .setSize(18, 18) + .setPos(10, 30) + .addTooltip(new Text("Can't change configuration when running !").color(Color.RED.dark(3))) + .setEnabled(widget -> getBaseMetaTileEntity().isActive())); + return builder.build(); + } + + @Override + protected String generateCurrentRecipeInfoString() { + StringBuilder ret = new StringBuilder(EnumChatFormatting.WHITE + "Progress: ") + .append(String.format("%,.2f", (double) this.mProgresstime / 20)) + .append("s / ") + .append(String.format("%,.2f", (double) this.mMaxProgresstime / 20)) + .append("s (") + .append(String.format("%,.1f", (double) this.mProgresstime / this.mMaxProgresstime * 100)) + .append("%)\n"); + + for (Map.Entry drop : this.synchedGUIDropTracker.entrySet() + .stream() + .sorted( + Comparator.comparing( + a -> a.getKey() + .toString() + .toLowerCase())) + .collect(Collectors.toList())) { + int outputSize = Arrays.stream(this.mOutputItems) + .filter(s -> s.isItemEqual(drop.getKey())) + .mapToInt(i -> i.stackSize) + .sum(); + ret.append(EnumChatFormatting.AQUA) + .append( + drop.getKey() + .getDisplayName()) + .append(EnumChatFormatting.WHITE) + .append(": "); + if (outputSize == 0) { + ret.append(String.format("%.2f", drop.getValue() * 100)) + .append("%\n"); + } else { + ret.append(EnumChatFormatting.GOLD) + .append( + String.format( + "x%d %s(+%.2f/sec)\n", + outputSize, + EnumChatFormatting.WHITE, + (double) outputSize / (mMaxProgresstime / 20))); + } + } + return ret.toString(); + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + screenElements.widget( + new FakeSyncWidget.BooleanSyncer( + () -> this.mode == EIGModes.IC2, + b -> this.mode = b ? EIGModes.IC2 : EIGModes.Normal)); + screenElements.widget(new FakeSyncWidget<>(() -> { + HashMap ret = new HashMap<>(); + + for (Map.Entry drop : this.guiDropTracker.entrySet()) { + ret.merge(drop.getKey(), drop.getValue(), Double::sum); + } + + return ret; + }, h -> this.synchedGUIDropTracker = h, (buffer, h) -> { + buffer.writeVarIntToBuffer(h.size()); + for (Map.Entry itemStackDoubleEntry : h.entrySet()) { + try { + buffer.writeItemStackToBuffer(itemStackDoubleEntry.getKey()); + buffer.writeDouble(itemStackDoubleEntry.getValue()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }, buffer -> { + int len = buffer.readVarIntFromBuffer(); + HashMap ret = new HashMap<>(len); + for (int i = 0; i < len; i++) { + try { + ret.put(buffer.readItemStackFromBuffer(), buffer.readDouble()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return ret; + })); + super.drawTexts(screenElements, inventorySlot); + } + + @Override + public String[] getInfoData() { + List info = new ArrayList<>( + Arrays.asList( + "Running in mode: " + EnumChatFormatting.GREEN + + (this.setupPhase == 0 ? this.mode.getName() + : ("Setup mode " + (this.setupPhase == 1 ? "(input)" : "(output)"))) + + EnumChatFormatting.RESET, + "Uses " + waterUsage + "L/operation of water", + "Uses " + weedEXUsage + "L/second of Weed-EX 9000", + "Max slots: " + EnumChatFormatting.GREEN + this.maxSeedTypes + EnumChatFormatting.RESET, + "Used slots: " + + ((this.buckets.size() > maxSeedTypes) ? EnumChatFormatting.RED : EnumChatFormatting.GREEN) + + this.buckets.size() + + EnumChatFormatting.RESET)); + for (EIGBucket bucket : buckets) { + info.add(bucket.getInfoData()); + } + if (this.buckets.size() > this.maxSeedTypes) { + info.add( + EnumChatFormatting.DARK_RED + "There are too many seed types inside to run!" + + EnumChatFormatting.RESET); + } + if (this.getTotalSeedCount() > this.maxSeedCount) { + info.add( + EnumChatFormatting.DARK_RED + "There are too many seeds inside to run!" + EnumChatFormatting.RESET); + } + info.addAll(Arrays.asList(super.getInfoData())); + return info.toArray(new String[0]); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + // endregion ui +} diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java new file mode 100644 index 0000000000..0ea03b9407 --- /dev/null +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/MTEMegaIndustrialApiary.java @@ -0,0 +1,1173 @@ +/* + * spotless:off + * KubaTech - Gregtech Addon + * Copyright (C) 2022 - 2024 kuba6000 + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this library. If not, see . + * spotless:on + */ + +package kubatech.tileentity.gregtech.multiblock; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockAnyMeta; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksMap; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static forestry.api.apiculture.BeeManager.beeRoot; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_FRONT_DISTILLATION_TOWER_GLOW; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static kubatech.api.Variables.StructureHologram; +import static kubatech.api.Variables.buildAuthorList; +import static kubatech.api.utils.ItemUtils.readItemStackFromNBT; +import static kubatech.api.utils.ItemUtils.writeItemStackToNBT; + +import java.io.IOException; +import java.lang.ref.WeakReference; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.IAlignmentLimits; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElementNoPlacement; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.drawable.shapes.Rectangle; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.MainAxisAlignment; +import com.gtnewhorizons.modularui.api.screen.ModularUIContext; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.builder.UIInfo; +import com.gtnewhorizons.modularui.common.internal.wrapper.ModularUIContainer; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.Column; +import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedRow; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.kuba6000.mobsinfo.api.utils.ItemID; + +import bartworks.API.BorosilicateGlass; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import forestry.api.apiculture.EnumBeeType; +import forestry.api.apiculture.FlowerManager; +import forestry.api.apiculture.IAlleleBeeSpecies; +import forestry.api.apiculture.IBee; +import forestry.api.apiculture.IBeeGenome; +import forestry.api.apiculture.IBeeModifier; +import forestry.api.apiculture.IBeekeepingMode; +import forestry.apiculture.blocks.BlockAlveary; +import forestry.apiculture.blocks.BlockApicultureType; +import forestry.apiculture.genetics.Bee; +import forestry.plugins.PluginApiculture; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import ic2.core.init.BlocksItems; +import ic2.core.init.InternalName; +import kubatech.Tags; +import kubatech.api.DynamicInventory; +import kubatech.api.implementations.KubaTechGTMultiBlockBase; +import kubatech.client.effect.MegaApiaryBeesRenderer; + +public class MTEMegaIndustrialApiary extends KubaTechGTMultiBlockBase + implements ISurvivalConstructable { + + private byte mGlassTier = 0; + private int mCasing = 0; + private int mMaxSlots = 0; + private int mPrimaryMode = 0; + private int mSecondaryMode = 0; + private final ArrayList mStorage = new ArrayList<>(); + + private static final ItemStack royalJelly = PluginApiculture.items.royalJelly.getItemStack(1); + private static final int CASING_INDEX = 10; + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final String STRUCTURE_PIECE_MAIN_SURVIVAL = "mainsurvival"; + private static final int CONFIGURATION_WINDOW_ID = 999; + private static final int MEGA_APIARY_STORAGE_VERSION = 2; + + private static final String[][] struct = transpose( + new String[][] { // spotless:off + {" "," "," "," HHH "," HHAAAHH "," HAPLPAH "," HAPAAAPAH "," HALAAALAH "," HAPAAAPAH "," HAPLPAH "," HHAAAHH "," HHH "," "," "," "}, + {" "," "," GGG "," GGG GG "," G G "," G G "," G G "," G G "," G G "," G G "," G G "," GG GG "," GGG "," "," "}, + {" "," HHH "," HHH HHH "," H GH "," H H "," H H "," H H "," H H "," H H "," H H "," H H "," HG GH "," HHH HHH "," HHH "," "}, + {" GGG "," GGG GGG "," G G "," G G "," G G "," G G ","G G","G G","G G"," G G "," G G "," G G "," G G "," GGG GGG "," GGG "}, + {" AAA "," OLA ALO "," P P "," O O "," L L "," A A ","A A","A A","A A"," A A "," L L "," O O "," P P "," OLA ALO "," AAA "}, + {" AAAAA "," NA AO "," P P "," N O "," A A ","A A","A III A","A III A","A III A","A A"," A A "," N N "," P P "," NA AN "," AAAAA "}, + {" AAAAA "," NA FFF AO "," PFF FFP "," NF FFO "," AF FA ","A A","AF JJJ FA","AF JKJ FA","AF JJJ FA","A A"," AF FA "," NFF FFN "," PFF FFP "," NA FFF AN "," AAAAA "}, + {" AAA "," OLAFFFALO "," PFFFFFFFFFP "," OFFFF FFFFO "," LFF FFL "," AFF FFFFF FA ","AFF FKKKFF FFA","AFF FFKKKFF FFA","AFF FFKKKF FFA"," AF FFFFF FA "," LFF FF FFL "," OFFFF FFFO "," PFFFFFFFFFP "," OLAFFFALO "," AAA "}, + {" G~G "," GGGBBBGGG "," GBBFFFFFBBG "," GBFFF FFBBG "," GBF FBG "," GFF FFFFF FG ","GBF FKKKFF FBG","GBF FFKJKFF FBG","GBF FFKKKF FBG"," GF FFFFF FG "," GBF FF FBG "," GBBFF FBBG "," GBBFFFFFBBG "," GGGBBBGGG "," GGG "}, + {" HHH "," HHBBBHH "," HHBBBBBBBHH "," HBBBWWWBBBH "," HBBWWWWWWWBBH "," HBBWBBBBBWWBH ","HBBWWBBBBBBWBBH","HBBWBBBBBBBWBBH","HBBWBBBBBBWWBBH"," HBWWBBBBBWWBH "," HBBWWWBBWWBBH "," HBBBWWWWBBH "," HHBBBBBBBHH "," HHBBBHH "," HHH "}, + {" "," GGGGG "," GGGBBBBGG "," GBBBBBBBBBG "," GBBBBBBBBBG "," GBBBBBBBBBBBG "," GBBBBBBBBBBBG "," GBBBBBBBBBBBG "," GBBBBBBBBBBBG "," GBBBBBBBBBBBG "," GBBBBBBBBBG "," GBBBBBBBBBG "," GGBBBBBGG "," GGGGG "," "}, + {" "," HHH "," HHBBBHH "," HBBBBBBBH "," HBBBBBBBBBH "," HBBBBBBBBBH "," HBBBBBBBBBBBH "," HBBBBBBBBBBBH "," HBBBBBBBBBBBH "," HBBBBBBBBBH "," HBBBBBBBBBH "," HBBBBBBBH "," HHBBBHH "," HHH "," "}, + {" "," "," GGG "," GGBBBGG "," GBBBBBBBG "," GBBBBBBBG "," GBBBBBBBBBG "," GBBBBBBBBBG "," GBBBBBBBBBG "," GBBBBBBBG "," GBBBBBBBG "," GGBBBGG "," GGG "," "," "}, + {" "," "," H "," HHBHH "," HBBBBBH "," HBBBBBBBH "," HBBBBBBBH "," HBBBBBBBBBH "," HBBBBBBBH "," HBBBBBBBH "," HBBBBBH "," HHBHH "," H "," "," "}, + {" "," "," "," G "," GGBGG "," GBBBBBG "," GBBBBBG "," GBBBBBBBG "," GBBBBBG "," GBBBBBG "," GGBGG "," G "," "," "," "}, + {" "," "," "," "," HHH "," HHHHH "," HHBBBHH "," HHBBBHH "," HHBBBHH "," HHBHH "," HHH "," "," "," "," "}, + {" "," "," "," "," "," "," GGG "," GHG "," GGG "," "," "," "," "," "," "} + }); // spotless:on + + private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, struct) + .addShape( + STRUCTURE_PIECE_MAIN_SURVIVAL, + Arrays.stream(struct) + .map( + sa -> Arrays.stream(sa) + .map( + s -> s.replaceAll("W", " ") + .replaceAll("F", " ")) + .toArray(String[]::new)) + .toArray(String[][]::new)) + .addElement('A', BorosilicateGlass.ofBoroGlass((byte) 0, (t, v) -> t.mGlassTier = v, t -> t.mGlassTier)) + .addElement('B', ofChain(ofBlockAnyMeta(Blocks.dirt, 0), ofBlock(Blocks.grass, 0))) + .addElement( + 'G', + buildHatchAdder(MTEMegaIndustrialApiary.class).atLeast(InputBus, OutputBus, Energy, Maintenance) + .casingIndex(CASING_INDEX) + .dot(1) + .buildAndChain(onElementPass(t -> t.mCasing++, ofBlock(GregTechAPI.sBlockCasings1, 10)))) + .addElement( + 'H', + ofBlocksMap( + Collections.singletonMap( + Blocks.planks, + IntStream.rangeClosed(0, 5) + .boxed() + .collect(Collectors.toList())), + Blocks.planks, + 5)) + .addElement( + 'I', + ofBlocksMap( + Collections.singletonMap( + Blocks.wooden_slab, + IntStream.rangeClosed(0, 5) + .boxed() + .collect(Collectors.toList())), + Blocks.wooden_slab, + 5)) + .addElement('J', ofBlock(PluginApiculture.blocks.apiculture, BlockApicultureType.APIARY.getMeta())) + .addElement('K', ofBlock(PluginApiculture.blocks.alveary, BlockAlveary.Type.PLAIN.ordinal())) + .addElement('L', ofBlock(PluginApiculture.blocks.alveary, BlockAlveary.Type.HYGRO.ordinal())) + .addElement('N', ofBlock(PluginApiculture.blocks.alveary, BlockAlveary.Type.STABILIZER.ordinal())) + .addElement('O', ofBlock(PluginApiculture.blocks.alveary, BlockAlveary.Type.HEATER.ordinal())) + .addElement('P', ofBlock(PluginApiculture.blocks.alveary, BlockAlveary.Type.FAN.ordinal())) + .addElement( + 'W', + ofChain(ofBlock(Blocks.water, 0), ofBlock(BlocksItems.getFluidBlock(InternalName.fluidDistilledWater), 0))) + .addElement('F', new IStructureElementNoPlacement() { + + @Override + public boolean check(MTEMegaIndustrialApiary mte, World world, int x, int y, int z) { + mte.flowerCheck(world, x, y, z); + return true; + } + + @Override + public boolean spawnHint(MTEMegaIndustrialApiary mte, World world, int x, int y, int z, ItemStack trigger) { + StructureLibAPI.hintParticle(world, x, y, z, StructureLibAPI.getBlockHint(), 2 - 1); + return true; + } + }) + .build(); + + @SuppressWarnings("unused") + public MTEMegaIndustrialApiary(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMegaIndustrialApiary(String aName) { + super(aName); + } + + @Override + public void onRemoval() { + super.onRemoval(); + if (getBaseMetaTileEntity().isServerSide()) + tryOutputAll(mStorage, s -> Collections.singletonList(((BeeSimulator) s).queenStack)); + } + + private boolean isCacheDirty = true; + private final HashMap flowersCache = new HashMap<>(); + private final HashSet flowersCheck = new HashSet<>(); + private boolean flowersError = false; + private boolean needsTVarUpdate = false; + private int megaApiaryStorageVersion = 0; + + private void flowerCheck(final World world, final int x, final int y, final int z) { + if (!flowersCheck.isEmpty() && !world.isAirBlock(x, y, z)) + flowersCheck.removeIf(s -> FlowerManager.flowerRegistry.isAcceptedFlower(s, world, x, y, z)); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + buildPiece(STRUCTURE_PIECE_MAIN, stackSize, hintsOnly, 7, 8, 0); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN_SURVIVAL, stackSize, 7, 8, 0, elementBudget, env, true); + if (built == -1) { + GTUtility.sendChatToPlayer( + env.getActor(), + EnumChatFormatting.GREEN + "Auto placing done ! Now go place the water and flowers yourself !"); + return 0; + } + return built; + } + + @Override + public IStructureDefinition getStructureDefinition() { + return STRUCTURE_DEFINITION; + } + + @Override + protected IAlignmentLimits getInitialAlignmentLimits() { + return (d, r, f) -> d.offsetY == 0 && r.isNotRotated(); + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Mega Apiary") + .addInfo("Controller block for Industrial Apicultural Acclimatiser and Drone Domestication Station") + .addInfo(buildAuthorList("kuba6000", "Runakai")) + .addInfo("The ideal home for your bees") + .addInfo("Use screwdriver to change primary mode (INPUT/OUTPUT/OPERATING)") + .addInfo("Use screwdriver + shift to change operation mode (NORMAL/SWARMER)") + .addInfo("--------------------- INPUT MODE ---------------------") + .addInfo("- Does not take power") + .addInfo("- Put your queens in the input bus to put them in the internal buffer") + .addInfo("-------------------- OUTPUT MODE ---------------------") + .addInfo("- Does not take power") + .addInfo("- Will give your bees back to output bus") + .addInfo("------------------- OPERATING MODE -------------------") + .addInfo("- NORMAL:") + .addInfo(" - For each " + voltageTooltipFormatted(6) + " amp you can insert 1 bee") + .addInfo(" - Processing time: 5 seconds") + .addInfo(" - Uses 1 " + voltageTooltipFormatted(6) + " amp per queen") + .addInfo(" - All bees are accelerated 64 times") + .addInfo(" - 8 production upgrades are applied") + .addInfo(" - Genetic Stabilizer upgrade applied") + .addInfo(" - Simulates perfect environment for your bees") + .addInfo(" - Additionally you can provide royal jelly to increase the outputs:") + .addInfo(" - 1 royal jelly grants 5% bonus per bee") + .addInfo(" - They will be consumed on each start of operation") + .addInfo(" - and be applied to that operation only") + .addInfo(" - Max bonus: 200%") + .addInfo("- SWARMER:") + .addInfo(" - You can only insert 1 queen") + .addInfo(" - It will slowly produce ignoble princesses") + .addInfo(" - Consumes 100 royal jelly per operation") + .addInfo(" - Base processing time: 1 minute") + .addInfo(" - Uses 1 amp " + voltageTooltipFormatted(5)) + .addInfo(" - Can overclock") + .addInfo(StructureHologram) + .addSeparator() + .beginStructureBlock(15, 17, 15, false) + .addController("Front Bottom Center") + .addCasingInfoMin("Bronze Plated Bricks", 190, false) + .addOtherStructurePart("Borosilicate Glass", "Look at the hologram") + .addStructureInfo("The glass tier limits the Energy Input tier") + .addStructureInfo("Regular water and IC2 Distilled Water are accepted") + .addOtherStructurePart("Flowers", "On dirt/grass", 2) + .addInputBus("Any casing", 1) + .addOutputBus("Any casing", 1) + .addEnergyHatch("Any casing", 1) + .addMaintenanceHatch("Any casing", 1) + .toolTipFinisher(Tags.MODNAME); + return tt; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByte("mGlassTier", mGlassTier); + aNBT.setInteger("mPrimaryMode", mPrimaryMode); + aNBT.setInteger("mSecondaryMode", mSecondaryMode); + aNBT.setInteger("mStorageSize", mStorage.size()); + for (int i = 0; i < mStorage.size(); i++) aNBT.setTag( + "mStorage." + i, + mStorage.get(i) + .toNBTTagCompound()); + aNBT.setInteger("MEGA_APIARY_STORAGE_VERSION", MEGA_APIARY_STORAGE_VERSION); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + mGlassTier = aNBT.getByte("mGlassTier"); + mPrimaryMode = aNBT.getInteger("mPrimaryMode"); + mSecondaryMode = aNBT.getInteger("mSecondaryMode"); + for (int i = 0, isize = aNBT.getInteger("mStorageSize"); i < isize; i++) + mStorage.add(new BeeSimulator(aNBT.getCompoundTag("mStorage." + i))); + megaApiaryStorageVersion = aNBT.getInteger("MEGA_APIARY_STORAGE_VERSION"); + flowersCache.clear(); + mStorage.forEach(s -> flowersCache.put(s.flowerType, s.flowerTypeDescription)); + flowersCache.remove(""); + isCacheDirty = false; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (this.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(aPlayer, "Can't change mode when running !"); + return; + } + if (!aPlayer.isSneaking()) { + mPrimaryMode++; + if (mPrimaryMode == 3) mPrimaryMode = 0; + switch (mPrimaryMode) { + case 0: + GTUtility.sendChatToPlayer(aPlayer, "Changed primary mode to: Input mode"); + break; + case 1: + GTUtility.sendChatToPlayer(aPlayer, "Changed primary mode to: Output mode"); + break; + case 2: + GTUtility.sendChatToPlayer(aPlayer, "Changed primary mode to: Operating mode"); + break; + } + } else { + if (!mStorage.isEmpty()) { + GTUtility.sendChatToPlayer(aPlayer, "Can't change operating mode when the multi is not empty !"); + return; + } + mSecondaryMode++; + if (mSecondaryMode == 2) mSecondaryMode = 0; + switch (mSecondaryMode) { + case 0: + GTUtility.sendChatToPlayer(aPlayer, "Changed secondary mode to: Normal mode"); + break; + case 1: + GTUtility.sendChatToPlayer(aPlayer, "Changed secondary mode to: Swarmer mode"); + break; + } + } + } + + private void updateMaxSlots() { + int mOld = mMaxSlots; + long v = this.getMaxInputEu(); + if (v < GTValues.V[6]) mMaxSlots = 0; + else if (mSecondaryMode == 0) mMaxSlots = (int) (v / GTValues.V[6]); + else mMaxSlots = 1; + if (mOld != 0 && mOld != mMaxSlots) { + needsTVarUpdate = true; + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + // TODO: Look for proper fix + if (mUpdate < -550) mUpdate = 50; + } else { + if (aBaseMetaTileEntity.isActive() && aTick % 100 == 0) { + int[] abc = new int[] { 0, -2, 7 }; + int[] xyz = new int[] { 0, 0, 0 }; + this.getExtendedFacing() + .getWorldOffset(abc, xyz); + xyz[0] += aBaseMetaTileEntity.getXCoord(); + xyz[1] += aBaseMetaTileEntity.getYCoord(); + xyz[2] += aBaseMetaTileEntity.getZCoord(); + showBees(aBaseMetaTileEntity.getWorld(), xyz[0], xyz[1], xyz[2], 100); + } + } + } + + @SideOnly(Side.CLIENT) + private void showBees(World world, int x, int y, int z, int age) { + MegaApiaryBeesRenderer bee = new MegaApiaryBeesRenderer(world, x, y, z, age); + Minecraft.getMinecraft().effectRenderer.addEffect(bee); + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing() { + updateMaxSlots(); + if (mPrimaryMode < 2) { + if (mPrimaryMode == 0 && mStorage.size() < mMaxSlots) { + World w = getBaseMetaTileEntity().getWorld(); + float t = (float) getVoltageTierExact(); + ArrayList inputs = getStoredInputs(); + for (ItemStack input : inputs) { + if (beeRoot.getType(input) == EnumBeeType.QUEEN) { + BeeSimulator bs = new BeeSimulator(input, w, t); + if (bs.isValid) { + mStorage.add(bs); + isCacheDirty = true; + } + } + if (mStorage.size() >= mMaxSlots) break; + } + updateSlots(); + } else if (mPrimaryMode == 1 && mStorage.size() > 0) { + if (tryOutputAll(mStorage, s -> Collections.singletonList(((BeeSimulator) s).queenStack))) + isCacheDirty = true; + } else return CheckRecipeResultRegistry.NO_RECIPE; + mMaxProgresstime = 10; + mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + mEfficiencyIncrease = 10000; + lEUt = 0; + return CheckRecipeResultRegistry.SUCCESSFUL; + } else if (mPrimaryMode == 2) { + if (mMaxSlots > 0 && !mStorage.isEmpty()) { + if (mSecondaryMode == 0) { + if (megaApiaryStorageVersion != MEGA_APIARY_STORAGE_VERSION) { + megaApiaryStorageVersion = MEGA_APIARY_STORAGE_VERSION; + World w = getBaseMetaTileEntity().getWorld(); + float t = (float) getVoltageTierExact(); + mStorage.forEach(s -> s.generate(w, t)); + } + + if (mStorage.size() > mMaxSlots) + return SimpleCheckRecipeResult.ofFailure("MegaApiary_slotoverflow"); + + if (flowersError) return SimpleCheckRecipeResult.ofFailure("MegaApiary_noflowers"); + + if (needsTVarUpdate) { + float t = (float) getVoltageTierExact(); + needsTVarUpdate = false; + World w = getBaseMetaTileEntity().getWorld(); + mStorage.forEach(s -> s.updateTVar(w, t)); + } + + int maxConsume = Math.min(mStorage.size(), mMaxSlots) * 40; + int toConsume = maxConsume; + ArrayList inputs = getStoredInputs(); + + for (ItemStack input : inputs) { + if (!input.isItemEqual(royalJelly)) continue; + int consumed = Math.min(input.stackSize, toConsume); + toConsume -= consumed; + input.stackSize -= consumed; + if (toConsume == 0) break; + } + double boosted = 1d; + if (toConsume != maxConsume) { + boosted += (((double) maxConsume - (double) toConsume) / (double) maxConsume) * 2d; + this.updateSlots(); + } + + List stacks = new ArrayList<>(); + for (int i = 0, mStorageSize = Math.min(mStorage.size(), mMaxSlots); i < mStorageSize; i++) { + BeeSimulator beeSimulator = mStorage.get(i); + stacks.addAll(beeSimulator.getDrops(this, 64_00d * boosted)); + } + + this.lEUt = -(int) ((double) GTValues.V[6] * (double) mMaxSlots * 0.99d); + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + this.mMaxProgresstime = 100; + this.mOutputItems = stacks.toArray(new ItemStack[0]); + } else { + if (!depleteInput(PluginApiculture.items.royalJelly.getItemStack(64)) + || !depleteInput(PluginApiculture.items.royalJelly.getItemStack(36))) { + this.updateSlots(); + return CheckRecipeResultRegistry.NO_RECIPE; + } + calculateOverclock(GTValues.V[5] - 2L, 1200); + if (this.lEUt > 0) this.lEUt = -this.lEUt; + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + this.mOutputItems = new ItemStack[] { this.mStorage.get(0) + .createIgnobleCopy() }; + this.updateSlots(); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + } + + return CheckRecipeResultRegistry.NO_RECIPE; + } + + @Override + public String[] getInfoData() { + ArrayList info = new ArrayList<>(Arrays.asList(super.getInfoData())); + info.add( + "Running in mode: " + EnumChatFormatting.GOLD + + (mPrimaryMode == 0 ? "Input mode" + : (mPrimaryMode == 1 ? "Output mode" + : (mSecondaryMode == 0 ? "Operating mode (NORMAL)" : "Operating mode (SWARMER)")))); + info.add( + "Bee storage (" + EnumChatFormatting.GOLD + + mStorage.size() + + EnumChatFormatting.RESET + + "/" + + (mStorage.size() > mMaxSlots ? EnumChatFormatting.DARK_RED.toString() + : EnumChatFormatting.GOLD.toString()) + + mMaxSlots + + EnumChatFormatting.RESET + + "):"); + HashMap infos = new HashMap<>(); + for (int i = 0; i < mStorage.size(); i++) { + StringBuilder builder = new StringBuilder(); + if (i > mMaxSlots) builder.append(EnumChatFormatting.DARK_RED); + builder.append(EnumChatFormatting.GOLD); + builder.append(mStorage.get(i).queenStack.getDisplayName()); + infos.merge(builder.toString(), 1, Integer::sum); + } + infos.forEach((key, value) -> info.add("x" + value + ": " + key)); + + return info.toArray(new String[0]); + } + + @Override + public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + mGlassTier = 0; + mCasing = 0; + if (isCacheDirty) { + flowersCache.clear(); + mStorage.forEach(s -> flowersCache.put(s.flowerType, s.flowerTypeDescription)); + flowersCache.remove(""); + isCacheDirty = false; + } + flowersCheck.clear(); + flowersCheck.addAll(flowersCache.keySet()); + if (!checkPiece(STRUCTURE_PIECE_MAIN, 7, 8, 0)) return false; + if (this.mGlassTier < 10 && !this.mEnergyHatches.isEmpty()) + for (MTEHatchEnergy hatchEnergy : this.mEnergyHatches) + if (this.mGlassTier < hatchEnergy.mTier) return false; + boolean valid = this.mMaintenanceHatches.size() == 1 && this.mEnergyHatches.size() >= 1 && this.mCasing >= 190; + flowersError = valid && !this.flowersCheck.isEmpty(); + if (valid) updateMaxSlots(); + return valid; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMegaIndustrialApiary(this.mName); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_ACTIVE_GLOW) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX), TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(OVERLAY_FRONT_DISTILLATION_TOWER_GLOW) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(CASING_INDEX) }; + } + + private static final UIInfo MegaApiaryUI = createKTMetaTileEntityUI( + KT_ModulaUIContainer_MegaIndustrialApiary::new); + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) return true; + MegaApiaryUI.open( + aPlayer, + aBaseMetaTileEntity.getWorld(), + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord()); + return true; + } + + private static class KT_ModulaUIContainer_MegaIndustrialApiary extends ModularUIContainer { + + final WeakReference parent; + + public KT_ModulaUIContainer_MegaIndustrialApiary(ModularUIContext context, ModularWindow mainWindow, + MTEMegaIndustrialApiary mte) { + super(context, mainWindow); + parent = new WeakReference<>(mte); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) { + if (!(aPlayer instanceof EntityPlayerMP)) return super.transferStackInSlot(aPlayer, aSlotIndex); + final Slot s = getSlot(aSlotIndex); + if (s == null) return super.transferStackInSlot(aPlayer, aSlotIndex); + if (aSlotIndex >= 36) return super.transferStackInSlot(aPlayer, aSlotIndex); + final ItemStack aStack = s.getStack(); + if (aStack == null) return super.transferStackInSlot(aPlayer, aSlotIndex); + MTEMegaIndustrialApiary mte = parent.get(); + if (mte == null) return super.transferStackInSlot(aPlayer, aSlotIndex); + if (mte.mStorage.size() >= mte.mMaxSlots) return super.transferStackInSlot(aPlayer, aSlotIndex); + if (beeRoot.getType(aStack) == EnumBeeType.QUEEN) { + if (mte.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(aPlayer, EnumChatFormatting.RED + "Can't insert while running !"); + return super.transferStackInSlot(aPlayer, aSlotIndex); + } + World w = mte.getBaseMetaTileEntity() + .getWorld(); + float t = (float) mte.getVoltageTierExact(); + BeeSimulator bs = new BeeSimulator(aStack, w, t); + if (bs.isValid) { + mte.mStorage.add(bs); + s.putStack(null); + detectAndSendChanges(); + mte.isCacheDirty = true; + return null; + } + } + return super.transferStackInSlot(aPlayer, aSlotIndex); + } + } + + DynamicInventory dynamicInventory = new DynamicInventory<>( + 128, + 60, + () -> mMaxSlots, + mStorage, + s -> s.queenStack).allowInventoryInjection(input -> { + World w = getBaseMetaTileEntity().getWorld(); + float t = (float) getVoltageTierExact(); + BeeSimulator bs = new BeeSimulator(input, w, t); + if (bs.isValid) { + mStorage.add(bs); + return input; + } + return null; + }) + .allowInventoryExtraction(mStorage::remove) + .allowInventoryReplace((i, stack) -> { + if (stack.stackSize != 1) return null; + World w = getBaseMetaTileEntity().getWorld(); + float t = (float) getVoltageTierExact(); + BeeSimulator bs = new BeeSimulator(stack, w, t); + if (bs.isValid) { + BeeSimulator removed = mStorage.remove(i); + mStorage.add(i, bs); + return removed.queenStack; + } + return null; + }) + .setEnabled(() -> this.mMaxProgresstime == 0); + + @Override + public void createInventorySlots() { + + } + + private boolean isInInventory = true; + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + isInInventory = !getBaseMetaTileEntity().isActive(); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(4, 4) + .setSize(190, 85) + .setEnabled(w -> !isInInventory)); + builder.widget( + dynamicInventory.asWidget(builder, buildContext) + .setPos(10, 16) + .setBackground(new Rectangle().setColor(Color.rgb(163, 163, 198))) + .setEnabled(w -> isInInventory)); + builder.widget( + new CycleButtonWidget().setToggle(() -> isInInventory, i -> isInInventory = i) + .setTextureGetter(i -> i == 0 ? new Text("Inventory") : new Text("Status")) + .setBackground(GTUITextures.BUTTON_STANDARD) + .setPos(140, 4) + .setSize(55, 16)); + + final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); + drawTexts(screenElements, null); + builder.widget(screenElements.setEnabled(w -> !isInInventory)); + + builder.widget(createPowerSwitchButton(builder)) + .widget(createVoidExcessButton(builder)) + .widget(createInputSeparationButton(builder)) + .widget(createBatchModeButton(builder)) + .widget(createLockToSingleRecipeButton(builder)) + .widget(createStructureUpdateButton(builder)); + + DynamicPositionedRow configurationElements = new DynamicPositionedRow(); + addConfigurationWidgets(configurationElements, buildContext); + + builder.widget( + configurationElements.setSpace(2) + .setAlignment(MainAxisAlignment.SPACE_BETWEEN) + .setPos(getRecipeLockingButtonPos().add(18, 0))); + } + + @Override + protected void addConfigurationWidgets(DynamicPositionedRow configurationElements, UIBuildContext buildContext) { + buildContext.addSyncedWindow(CONFIGURATION_WINDOW_ID, this::createConfigurationWindow); + configurationElements.setSynced(false); + configurationElements.widget( + new ButtonWidget().setOnClick( + (clickData, widget) -> { + if (!widget.isClient()) widget.getContext() + .openSyncedWindow(CONFIGURATION_WINDOW_ID); + }) + .setBackground(GTUITextures.BUTTON_STANDARD, GTUITextures.OVERLAY_BUTTON_CYCLIC) + .addTooltip("Configuration") + .setSize(16, 16)); + } + + protected ModularWindow createConfigurationWindow(final EntityPlayer player) { + ModularWindow.Builder builder = ModularWindow.builder(200, 100); + builder.setBackground(ModularUITextures.VANILLA_BACKGROUND); + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.OVERLAY_BUTTON_CYCLIC) + .setPos(5, 5) + .setSize(16, 16)) + .widget(new TextWidget("Configuration").setPos(25, 9)) + .widget( + ButtonWidget.closeWindowButton(true) + .setPos(185, 3)) + .widget( + new Column().widget( + new CycleButtonWidget().setLength(3) + .setGetter(() -> mPrimaryMode) + .setSetter(val -> { + if (this.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(player, "Can't change mode when running !"); + return; + } + mPrimaryMode = val; + + if (!(player instanceof EntityPlayerMP)) return; + switch (mPrimaryMode) { + case 0: + GTUtility.sendChatToPlayer(player, "Changed primary mode to: Input mode"); + break; + case 1: + GTUtility.sendChatToPlayer(player, "Changed primary mode to: Output mode"); + break; + case 2: + GTUtility.sendChatToPlayer(player, "Changed primary mode to: Operating mode"); + break; + } + }) + .addTooltip(0, new Text("Input").color(Color.YELLOW.dark(3))) + .addTooltip(1, new Text("Output").color(Color.YELLOW.dark(3))) + .addTooltip(2, new Text("Operating").color(Color.GREEN.dark(3))) + .setTextureGetter( + i -> i == 0 ? new Text("Input").color(Color.YELLOW.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0) + : i == 1 ? new Text("Output").color(Color.YELLOW.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0) + : new Text("Operating").color(Color.GREEN.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0)) + .setBackground( + ModularUITextures.VANILLA_BACKGROUND, + GTUITextures.OVERLAY_BUTTON_CYCLIC.withFixedSize(18, 18)) + .setSize(70, 18) + .addTooltip("Primary mode")) + .widget( + new CycleButtonWidget().setLength(2) + .setGetter(() -> mSecondaryMode) + .setSetter(val -> { + if (this.mMaxProgresstime > 0) { + GTUtility.sendChatToPlayer(player, "Can't change mode when running !"); + return; + } + + mSecondaryMode = val; + + if (!(player instanceof EntityPlayerMP)) return; + switch (mSecondaryMode) { + case 0: + GTUtility.sendChatToPlayer(player, "Changed secondary mode to: Normal mode"); + break; + case 1: + GTUtility.sendChatToPlayer(player, "Changed secondary mode to: Swarmer mode"); + break; + } + }) + .addTooltip(0, new Text("Normal").color(Color.GREEN.dark(3))) + .addTooltip(1, new Text("Swarmer").color(Color.YELLOW.dark(3))) + .setTextureGetter( + i -> i == 0 ? new Text("Normal").color(Color.GREEN.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0) + : new Text("Swarmer").color(Color.YELLOW.dark(3)) + .withFixedSize(70 - 18, 18, 15, 0)) + .setBackground( + ModularUITextures.VANILLA_BACKGROUND, + GTUITextures.OVERLAY_BUTTON_CYCLIC.withFixedSize(18, 18)) + .setSize(70, 18) + .addTooltip("Secondary mode")) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive()) + .setPos(10, 30)) + .widget( + new Column().widget(new TextWidget("Primary mode").setSize(100, 18)) + .widget(new TextWidget("Secondary mode").setSize(100, 18)) + .setEnabled(widget -> !getBaseMetaTileEntity().isActive()) + .setPos(80, 30)) + .widget( + new DrawableWidget().setDrawable(GTUITextures.OVERLAY_BUTTON_CROSS) + .setSize(18, 18) + .setPos(10, 30) + .addTooltip(new Text("Can't change configuration when running !").color(Color.RED.dark(3))) + .setEnabled(widget -> getBaseMetaTileEntity().isActive())); + return builder.build(); + } + + // private List flowersGUI = Collections.emptyList(); + + private HashMap GUIDropProgress = new HashMap<>(); + + @Override + protected String generateCurrentRecipeInfoString() { + if (mSecondaryMode == 1) return super.generateCurrentRecipeInfoString(); + StringBuilder ret = new StringBuilder(EnumChatFormatting.WHITE + "Progress: ") + .append(String.format("%,.2f", (double) mProgresstime / 20)) + .append("s / ") + .append(String.format("%,.2f", (double) mMaxProgresstime / 20)) + .append("s (") + .append(String.format("%,.1f", (double) mProgresstime / mMaxProgresstime * 100)) + .append("%)\n"); + + for (Map.Entry drop : GUIDropProgress.entrySet()) { + int outputSize = Arrays.stream(mOutputItems) + .filter(s -> s.isItemEqual(drop.getKey())) + .mapToInt(i -> i.stackSize) + .sum(); + ret.append(EnumChatFormatting.AQUA) + .append( + drop.getKey() + .getDisplayName()) + .append(EnumChatFormatting.WHITE) + .append(": "); + if (outputSize == 0) { + ret.append(String.format("%.2f", drop.getValue() * 100)) + .append("%\n"); + } else { + ret.append(EnumChatFormatting.GOLD) + .append( + String.format( + "x%d %s(+%.2f/sec)\n", + outputSize, + EnumChatFormatting.WHITE, + (double) outputSize / (mMaxProgresstime / 20))); + } + } + + return ret.toString(); + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + + screenElements.widget(new FakeSyncWidget.IntegerSyncer(() -> mSecondaryMode, b -> mSecondaryMode = b)); + screenElements.widget(new FakeSyncWidget<>(() -> { + HashMap ret = new HashMap<>(); + HashMap dropProgress = new HashMap<>(); + + for (Map.Entry drop : this.dropProgress.entrySet()) { + dropProgress.merge(drop.getKey(), drop.getValue(), Double::sum); + } + + for (Map.Entry drop : dropProgress.entrySet()) { + ret.put(BeeSimulator.dropstacks.get(drop.getKey()), drop.getValue()); + } + return ret; + }, h -> GUIDropProgress = h, (buffer, h) -> { + buffer.writeVarIntToBuffer(h.size()); + for (Map.Entry itemStackDoubleEntry : h.entrySet()) { + try { + buffer.writeItemStackToBuffer(itemStackDoubleEntry.getKey()); + buffer.writeDouble(itemStackDoubleEntry.getValue()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + }, buffer -> { + int len = buffer.readVarIntFromBuffer(); + HashMap ret = new HashMap<>(len); + for (int i = 0; i < len; i++) { + try { + ret.put(buffer.readItemStackFromBuffer(), buffer.readDouble()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + return ret; + })); + super.drawTexts(screenElements, inventorySlot); + } + + final HashMap dropProgress = new HashMap<>(); + + private static class BeeSimulator { + + final ItemStack queenStack; + boolean isValid; + List drops = new ArrayList<>(); + List specialDrops = new ArrayList<>(); + float beeSpeed; + + float maxBeeCycles; + String flowerType; + String flowerTypeDescription; + private static IBeekeepingMode mode; + + public BeeSimulator(ItemStack queenStack, World world, float t) { + isValid = false; + this.queenStack = queenStack.copy(); + this.queenStack.stackSize = 1; + generate(world, t); + isValid = true; + queenStack.stackSize--; + } + + public void generate(World world, float t) { + if (mode == null) mode = beeRoot.getBeekeepingMode(world); + drops.clear(); + specialDrops.clear(); + if (beeRoot.getType(this.queenStack) != EnumBeeType.QUEEN) return; + IBee queen = beeRoot.getMember(this.queenStack); + IBeeModifier beeModifier = mode.getBeeModifier(); + float mod = beeModifier.getLifespanModifier(null, null, 1.f); + int h = queen.getMaxHealth(); + maxBeeCycles = (float) h / (1.f / mod); + IBeeGenome genome = queen.getGenome(); + this.flowerType = genome.getFlowerProvider() + .getFlowerType(); + this.flowerTypeDescription = genome.getFlowerProvider() + .getDescription(); + IAlleleBeeSpecies primary = genome.getPrimary(); + beeSpeed = genome.getSpeed(); + genome.getPrimary() + .getProductChances() + .forEach((key, value) -> drops.add(new BeeDrop(key, value, beeSpeed, t))); + genome.getSecondary() + .getProductChances() + .forEach((key, value) -> drops.add(new BeeDrop(key, value / 2.f, beeSpeed, t))); + primary.getSpecialtyChances() + .forEach((key, value) -> specialDrops.add(new BeeDrop(key, value, beeSpeed, t))); + } + + public BeeSimulator(NBTTagCompound tag) { + queenStack = readItemStackFromNBT(tag.getCompoundTag("queenStack")); + isValid = tag.getBoolean("isValid"); + drops = new ArrayList<>(); + specialDrops = new ArrayList<>(); + for (int i = 0, isize = tag.getInteger("dropssize"); i < isize; i++) + drops.add(new BeeDrop(tag.getCompoundTag("drops" + i))); + for (int i = 0, isize = tag.getInteger("specialDropssize"); i < isize; i++) + specialDrops.add(new BeeDrop(tag.getCompoundTag("specialDrops" + i))); + beeSpeed = tag.getFloat("beeSpeed"); + maxBeeCycles = tag.getFloat("maxBeeCycles"); + if (tag.hasKey("flowerType") && tag.hasKey("flowerTypeDescription")) { + flowerType = tag.getString("flowerType"); + flowerTypeDescription = tag.getString("flowerTypeDescription"); + } else { + IBee queen = beeRoot.getMember(this.queenStack); + IBeeGenome genome = queen.getGenome(); + this.flowerType = genome.getFlowerProvider() + .getFlowerType(); + this.flowerTypeDescription = genome.getFlowerProvider() + .getDescription(); + } + } + + public NBTTagCompound toNBTTagCompound() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setTag("queenStack", writeItemStackToNBT(queenStack)); + tag.setBoolean("isValid", isValid); + tag.setInteger("dropssize", drops.size()); + for (int i = 0; i < drops.size(); i++) tag.setTag( + "drops" + i, + drops.get(i) + .toNBTTagCompound()); + tag.setInteger("specialDropssize", specialDrops.size()); + for (int i = 0; i < specialDrops.size(); i++) tag.setTag( + "specialDrops" + i, + specialDrops.get(i) + .toNBTTagCompound()); + tag.setFloat("beeSpeed", beeSpeed); + tag.setFloat("maxBeeCycles", maxBeeCycles); + tag.setString("flowerType", flowerType); + tag.setString("flowerTypeDescription", flowerTypeDescription); + return tag; + } + + static final Map dropstacks = new HashMap<>(); + + public List getDrops(final MTEMegaIndustrialApiary MTE, final double timePassed) { + drops.forEach(d -> { + MTE.dropProgress.merge(d.id, d.getAmount(timePassed / 550d), Double::sum); + if (!dropstacks.containsKey(d.id)) dropstacks.put(d.id, d.stack); + }); + specialDrops.forEach(d -> { + MTE.dropProgress.merge(d.id, d.getAmount(timePassed / 550d), Double::sum); + if (!dropstacks.containsKey(d.id)) dropstacks.put(d.id, d.stack); + }); + List currentDrops = new ArrayList<>(); + MTE.dropProgress.entrySet() + .forEach(e -> { + double v = e.getValue(); + while (v > 1.f) { + int size = Math.min((int) v, 64); + ItemStack stack = dropstacks.get(e.getKey()) + .copy(); + stack.stackSize = size; + currentDrops.add(stack); + v -= size; + e.setValue(v); + } + }); + return currentDrops; + } + + public ItemStack createIgnobleCopy() { + IBee princess = beeRoot.getMember(queenStack); + princess.setIsNatural(false); + return beeRoot.getMemberStack(princess, EnumBeeType.PRINCESS.ordinal()); + } + + public void updateTVar(World world, float t) { + if (mode == null) mode = beeRoot.getBeekeepingMode(world); + drops.forEach(d -> d.updateTVar(t)); + specialDrops.forEach(d -> d.updateTVar(t)); + } + + private static class BeeDrop { + + private static final float MAX_PRODUCTION_MODIFIER_FROM_UPGRADES = 17.19926784f; // 4*1.2^8 + final ItemStack stack; + double amount; + final ItemID id; + + final float chance; + final float beeSpeed; + float t; + + public BeeDrop(ItemStack stack, float chance, float beeSpeed, float t) { + this.stack = stack; + this.chance = chance; + this.beeSpeed = beeSpeed; + this.t = t; + id = ItemID.createNoCopy(this.stack); + evaluate(); + } + + public void updateTVar(float t) { + if (this.t != t) { + this.t = t; + evaluate(); + } + } + + public void evaluate() { + this.amount = Bee.getFinalChance( + chance, + beeSpeed, + MAX_PRODUCTION_MODIFIER_FROM_UPGRADES + mode.getBeeModifier() + .getProductionModifier(null, MAX_PRODUCTION_MODIFIER_FROM_UPGRADES), + t); + } + + public double getAmount(double speedModifier) { + return amount * speedModifier; + } + + public ItemStack get(int amount) { + ItemStack r = stack.copy(); + r.stackSize = amount; + return r; + } + + public BeeDrop(NBTTagCompound tag) { + stack = readItemStackFromNBT(tag.getCompoundTag("stack")); + chance = tag.getFloat("chance"); + beeSpeed = tag.getFloat("beeSpeed"); + t = tag.getFloat("t"); + amount = tag.getDouble("amount"); + id = ItemID.createNoCopy(stack); + } + + public NBTTagCompound toNBTTagCompound() { + NBTTagCompound tag = new NBTTagCompound(); + tag.setTag("stack", writeItemStackToNBT(stack)); + tag.setFloat("chance", chance); + tag.setFloat("beeSpeed", beeSpeed); + tag.setFloat("t", t); + tag.setDouble("amount", amount); + return tag; + } + + @Override + public int hashCode() { + return id.hashCode(); + } + } + } + +} diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGFlowerBucket.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGFlowerBucket.java index 1c5588c335..9b96317f00 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGFlowerBucket.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGFlowerBucket.java @@ -11,7 +11,7 @@ import net.minecraft.nbt.NBTTagCompound; import kubatech.api.eig.EIGBucket; import kubatech.api.eig.EIGDropTable; import kubatech.api.eig.IEIGBucketFactory; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse; public class EIGFlowerBucket extends EIGBucket { @@ -27,7 +27,7 @@ public class EIGFlowerBucket extends EIGBucket { } @Override - public EIGBucket tryCreateBucket(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, ItemStack input) { + public EIGBucket tryCreateBucket(MTEExtremeIndustrialGreenhouse greenhouse, ItemStack input) { // Check if input is a flower, reed or cacti. They all drop their source item multiplied by their seed count Item item = input.getItem(); Block block = Block.getBlockFromItem(item); @@ -67,7 +67,7 @@ public class EIGFlowerBucket extends EIGBucket { } @Override - public boolean revalidate(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse) { + public boolean revalidate(MTEExtremeIndustrialGreenhouse greenhouse) { return this.isValid(); } } diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGIC2Bucket.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGIC2Bucket.java index 7daa524d5d..8c58f911c5 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGIC2Bucket.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGIC2Bucket.java @@ -17,11 +17,11 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.world.World; import net.minecraftforge.oredict.OreDictionary; -import gregtech.api.GregTech_API; +import gregtech.api.GregTechAPI; import gregtech.api.enums.ItemList; -import gregtech.common.blocks.GT_Block_Ores_Abstract; -import gregtech.common.blocks.GT_Item_Ores; -import gregtech.common.blocks.GT_TileEntity_Ores; +import gregtech.common.blocks.BlockOresAbstract; +import gregtech.common.blocks.ItemOres; +import gregtech.common.blocks.TileEntityOres; import ic2.api.crops.CropCard; import ic2.api.crops.Crops; import ic2.core.Ic2Items; @@ -31,7 +31,7 @@ import ic2.core.crop.TileEntityCrop; import kubatech.api.eig.EIGBucket; import kubatech.api.eig.EIGDropTable; import kubatech.api.eig.IEIGBucketFactory; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse; public class EIGIC2Bucket extends EIGBucket { @@ -85,7 +85,7 @@ public class EIGIC2Bucket extends EIGBucket { } @Override - public EIGBucket tryCreateBucket(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, ItemStack input) { + public EIGBucket tryCreateBucket(MTEExtremeIndustrialGreenhouse greenhouse, ItemStack input) { // Check if input is a seed. if (!ItemList.IC2_Crop_Seeds.isStackEqual(input, true, true)) return null; if (!input.hasTagCompound()) return null; @@ -130,7 +130,7 @@ public class EIGIC2Bucket extends EIGBucket { this.isValid = false; } - private EIGIC2Bucket(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, ItemStack seed) { + private EIGIC2Bucket(MTEExtremeIndustrialGreenhouse greenhouse, ItemStack seed) { super(seed, 1, null); this.useNoHumidity = greenhouse.isInNoHumidityMode(); this.recalculateDrops(greenhouse); @@ -184,7 +184,7 @@ public class EIGIC2Bucket extends EIGBucket { } @Override - public boolean revalidate(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse) { + public boolean revalidate(MTEExtremeIndustrialGreenhouse greenhouse) { this.recalculateDrops(greenhouse); return this.isValid(); } @@ -197,9 +197,9 @@ public class EIGIC2Bucket extends EIGBucket { /** * (Re-)calculates the pre-generated drop table for this bucket. * - * @param greenhouse The {@link GT_MetaTileEntity_ExtremeIndustrialGreenhouse} that contains this bucket. + * @param greenhouse The {@link MTEExtremeIndustrialGreenhouse} that contains this bucket. */ - public void recalculateDrops(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse) { + public void recalculateDrops(MTEExtremeIndustrialGreenhouse greenhouse) { this.isValid = false; World world = greenhouse.getBaseMetaTileEntity() .getWorld(); @@ -216,7 +216,7 @@ public class EIGIC2Bucket extends EIGBucket { boolean cheating = false; FakeTileEntityCrop crop; try { - if (world.getBlock(xyz[0], xyz[1] - 2, xyz[2]) != GregTech_API.sBlockCasings4 + if (world.getBlock(xyz[0], xyz[1] - 2, xyz[2]) != GregTechAPI.sBlockCasings4 || world.getBlockMetadata(xyz[0], xyz[1] - 2, xyz[2]) != 1) { // no cheating = true; @@ -376,7 +376,7 @@ public class EIGIC2Bucket extends EIGBucket { e.printStackTrace(System.err); } finally { // always reset the world to it's original state - if (!cheating) world.setBlock(xyz[0], xyz[1] - 2, xyz[2], GregTech_API.sBlockCasings4, 1, 0); + if (!cheating) world.setBlock(xyz[0], xyz[1] - 2, xyz[2], GregTechAPI.sBlockCasings4, 1, 0); // world.setBlockToAir(xyz[0], xyz[1], xyz[2]); } } @@ -396,19 +396,18 @@ public class EIGIC2Bucket extends EIGBucket { Block b = Block.getBlockFromItem(item); if (b == Blocks.air || !(item instanceof ItemBlock)) return false; short tDamage = (short) item.getDamage(stack); - if (item instanceof GT_Item_Ores && tDamage > 0) { + if (item instanceof ItemOres && tDamage > 0) { if (!world.setBlock( x, y, z, b, - GT_TileEntity_Ores.getHarvestData( - tDamage, - ((GT_Block_Ores_Abstract) b).getBaseBlockHarvestLevel(tDamage % 16000 / 1000)), + TileEntityOres + .getHarvestData(tDamage, ((BlockOresAbstract) b).getBaseBlockHarvestLevel(tDamage % 16000 / 1000)), 0)) { return false; } - GT_TileEntity_Ores tTileEntity = (GT_TileEntity_Ores) world.getTileEntity(x, y, z); + TileEntityOres tTileEntity = (TileEntityOres) world.getTileEntity(x, y, z); tTileEntity.mMetaData = tDamage; tTileEntity.mNatural = false; } else world.setBlock(x, y, z, b, tDamage, 0); @@ -716,10 +715,10 @@ public class EIGIC2Bucket extends EIGBucket { * @see EIGIC2Bucket#IS_ON_WET_FARMLAND * @see EIGIC2Bucket#WATER_STORAGE_VALUE * @see TileEntityCrop#updateHumidity() - * @param greenhouse The {@link GT_MetaTileEntity_ExtremeIndustrialGreenhouse} that holds the seed. + * @param greenhouse The {@link MTEExtremeIndustrialGreenhouse} that holds the seed. * @return The humidity environmental value at the controller's location. */ - public static byte getHumidity(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, boolean useNoHumidity) { + public static byte getHumidity(MTEExtremeIndustrialGreenhouse greenhouse, boolean useNoHumidity) { if (useNoHumidity) return 0; int value = Crops.instance.getHumidityBiomeBonus( greenhouse.getBaseMetaTileEntity() @@ -738,10 +737,10 @@ public class EIGIC2Bucket extends EIGBucket { * @see EIGIC2Bucket#NUMBER_OF_DIRT_BLOCKS_UNDER * @see EIGIC2Bucket#FERTILIZER_STORAGE_VALUE * @see TileEntityCrop#updateNutrients() - * @param greenhouse The {@link GT_MetaTileEntity_ExtremeIndustrialGreenhouse} that holds the seed. + * @param greenhouse The {@link MTEExtremeIndustrialGreenhouse} that holds the seed. * @return The nutrient environmental value at the controller's location. */ - public static byte getNutrients(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse) { + public static byte getNutrients(MTEExtremeIndustrialGreenhouse greenhouse) { int value = Crops.instance.getNutrientBiomeBonus( greenhouse.getBaseMetaTileEntity() .getBiome()); @@ -756,10 +755,10 @@ public class EIGIC2Bucket extends EIGBucket { * @see EIGIC2Bucket#CROP_OBSTRUCTION_VALUE * @see EIGIC2Bucket#CROP_CAN_SEE_SKY * @see TileEntityCrop#updateAirQuality() - * @param greenhouse The {@link GT_MetaTileEntity_ExtremeIndustrialGreenhouse} that holds the seed. + * @param greenhouse The {@link MTEExtremeIndustrialGreenhouse} that holds the seed. * @return The air quality environmental value at the controller's location. */ - public static byte getAirQuality(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse) { + public static byte getAirQuality(MTEExtremeIndustrialGreenhouse greenhouse) { // clamp height bonus to 0-4, use the height of the crop itself // TODO: check if we want to add the extra +2 for the actual height of the crop stick in the EIG. int value = Math.max( @@ -784,8 +783,7 @@ public class EIGIC2Bucket extends EIGBucket { public Set reqBlockOreDict = new HashSet<>(); private int lightLevel = 15; - public FakeTileEntityCrop(EIGIC2Bucket bucket, GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, - int[] xyz) { + public FakeTileEntityCrop(EIGIC2Bucket bucket, MTEExtremeIndustrialGreenhouse greenhouse, int[] xyz) { super(); this.isValid = false; this.ticker = 1; diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGRainbowCactusBucket.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGRainbowCactusBucket.java index 6342080722..b3ad861551 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGRainbowCactusBucket.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGRainbowCactusBucket.java @@ -10,7 +10,7 @@ import net.minecraft.nbt.NBTTagCompound; import kubatech.api.eig.EIGBucket; import kubatech.api.eig.EIGDropTable; import kubatech.api.eig.IEIGBucketFactory; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse; import tb.common.block.BlockRainbowCactus; import tb.init.TBBlocks; @@ -30,7 +30,7 @@ public class EIGRainbowCactusBucket extends EIGBucket { } @Override - public EIGBucket tryCreateBucket(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, ItemStack input) { + public EIGBucket tryCreateBucket(MTEExtremeIndustrialGreenhouse greenhouse, ItemStack input) { // check if input is rainbow cacti; if (!(Block.getBlockFromItem(input.getItem()) instanceof BlockRainbowCactus)) return null; return new EIGRainbowCactusBucket(input, 1); @@ -54,7 +54,7 @@ public class EIGRainbowCactusBucket extends EIGBucket { } @Override - public boolean revalidate(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse) { + public boolean revalidate(MTEExtremeIndustrialGreenhouse greenhouse) { return this.isValid(); } diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGSeedBucket.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGSeedBucket.java index 51b4a7162a..831569a4ae 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGSeedBucket.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGSeedBucket.java @@ -20,12 +20,12 @@ import net.minecraft.world.World; import net.minecraftforge.common.IPlantable; import cpw.mods.fml.common.registry.GameRegistry; -import gregtech.api.util.GT_Utility; -import gregtech.common.GT_DummyWorld; +import gregtech.api.util.GTUtility; +import gregtech.common.GTDummyWorld; import kubatech.api.eig.EIGBucket; import kubatech.api.eig.EIGDropTable; import kubatech.api.eig.IEIGBucketFactory; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse; public class EIGSeedBucket extends EIGBucket { @@ -44,7 +44,7 @@ public class EIGSeedBucket extends EIGBucket { } @Override - public EIGBucket tryCreateBucket(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, ItemStack input) { + public EIGBucket tryCreateBucket(MTEExtremeIndustrialGreenhouse greenhouse, ItemStack input) { return new EIGSeedBucket(greenhouse, input); } @@ -58,7 +58,7 @@ public class EIGSeedBucket extends EIGBucket { private boolean isValid = false; private EIGDropTable drops = new EIGDropTable(); - private EIGSeedBucket(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, ItemStack seed) { + private EIGSeedBucket(MTEExtremeIndustrialGreenhouse greenhouse, ItemStack seed) { super(seed, 1, null); this.recalculateDrops(greenhouse); } @@ -94,12 +94,12 @@ public class EIGSeedBucket extends EIGBucket { } @Override - public boolean revalidate(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse) { + public boolean revalidate(MTEExtremeIndustrialGreenhouse greenhouse) { this.recalculateDrops(greenhouse); return this.isValid(); } - public void recalculateDrops(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse) { + public void recalculateDrops(MTEExtremeIndustrialGreenhouse greenhouse) { this.isValid = false; int optimalGrowthMetadata = 7; // Get the relevant item and block for this item. @@ -164,7 +164,7 @@ public class EIGSeedBucket extends EIGBucket { IRecipe[] validRecipes = CraftingManager.getInstance() .getRecipeList() .parallelStream() - .filter(recipe -> GT_Utility.areStacksEqual(recipe.getRecipeOutput(), seed)) + .filter(recipe -> GTUtility.areStacksEqual(recipe.getRecipeOutput(), seed)) .toArray(IRecipe[]::new); // if no recipes outputs the input seed, abort. @@ -233,7 +233,7 @@ public class EIGSeedBucket extends EIGBucket { public void setInventorySlotContents(int par1, ItemStack par2ItemStack) {} } - private static class GreenHouseWorld extends GT_DummyWorld { + private static class GreenHouseWorld extends GTDummyWorld { public int x, y, z, meta = 0; public Block block; diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGStemBucket.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGStemBucket.java index e0ebcf8652..b132243a66 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGStemBucket.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigbuckets/EIGStemBucket.java @@ -14,7 +14,7 @@ import kubatech.api.IBlockStemAccesor; import kubatech.api.eig.EIGBucket; import kubatech.api.eig.EIGDropTable; import kubatech.api.eig.IEIGBucketFactory; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse; public class EIGStemBucket extends EIGBucket { @@ -31,7 +31,7 @@ public class EIGStemBucket extends EIGBucket { } @Override - public EIGBucket tryCreateBucket(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, ItemStack input) { + public EIGBucket tryCreateBucket(MTEExtremeIndustrialGreenhouse greenhouse, ItemStack input) { // Check if input is a flower, reed or cacti. They all drop their source item multiplied by their seed count Item item = input.getItem(); if (!(item instanceof IPlantable)) return null; @@ -54,7 +54,7 @@ public class EIGStemBucket extends EIGBucket { private boolean isValid = false; private EIGDropTable drops = new EIGDropTable(); - private EIGStemBucket(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse, ItemStack input) { + private EIGStemBucket(MTEExtremeIndustrialGreenhouse greenhouse, ItemStack input) { super(input, 1, null); recalculateDrops(greenhouse); } @@ -92,7 +92,7 @@ public class EIGStemBucket extends EIGBucket { } @Override - public boolean revalidate(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse) { + public boolean revalidate(MTEExtremeIndustrialGreenhouse greenhouse) { recalculateDrops(greenhouse); return this.isValid(); } @@ -102,7 +102,7 @@ public class EIGStemBucket extends EIGBucket { * * @param greenhouse The greenhouse that houses this bucket. */ - public void recalculateDrops(GT_MetaTileEntity_ExtremeIndustrialGreenhouse greenhouse) { + public void recalculateDrops(MTEExtremeIndustrialGreenhouse greenhouse) { this.isValid = false; Item item = this.seed.getItem(); if (!(item instanceof IPlantable)) return; diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigmodes/EIGIC2Mode.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigmodes/EIGIC2Mode.java index 6c12373779..1d10a2aa92 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigmodes/EIGIC2Mode.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigmodes/EIGIC2Mode.java @@ -1,11 +1,11 @@ package kubatech.tileentity.gregtech.multiblock.eigmodes; import static kubatech.api.utils.StringUtils.voltageTooltipFormatted; -import static kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse.EIG_BALANCE_IC2_ACCELERATOR_TIER; +import static kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse.EIG_BALANCE_IC2_ACCELERATOR_TIER; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.MultiblockTooltipBuilder; import kubatech.api.eig.EIGMode; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse; public class EIGIC2Mode extends EIGMode { @@ -23,12 +23,12 @@ public class EIGIC2Mode extends EIGMode { @Override public int getMinVoltageTier() { - return GT_MetaTileEntity_ExtremeIndustrialGreenhouse.EIG_BALANCE_IC2_MODE_MIN_TIER; + return MTEExtremeIndustrialGreenhouse.EIG_BALANCE_IC2_MODE_MIN_TIER; } @Override public int getMinGlassTier() { - return GT_MetaTileEntity_ExtremeIndustrialGreenhouse.EIG_BALANCE_IC2_MODE_MIN_TIER; + return MTEExtremeIndustrialGreenhouse.EIG_BALANCE_IC2_MODE_MIN_TIER; } @Override @@ -62,7 +62,7 @@ public class EIGIC2Mode extends EIGMode { } @Override - public GT_Multiblock_Tooltip_Builder addTooltipInfo(GT_Multiblock_Tooltip_Builder builder) { + public MultiblockTooltipBuilder addTooltipInfo(MultiblockTooltipBuilder builder) { String minVoltageTier = voltageTooltipFormatted(this.getMinVoltageTier()); String minGlassTier = voltageTooltipFormatted(this.getMinGlassTier()); diff --git a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigmodes/EIGNormalMode.java b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigmodes/EIGNormalMode.java index a1c5fcf393..c639b9750d 100644 --- a/src/main/java/kubatech/tileentity/gregtech/multiblock/eigmodes/EIGNormalMode.java +++ b/src/main/java/kubatech/tileentity/gregtech/multiblock/eigmodes/EIGNormalMode.java @@ -2,9 +2,9 @@ package kubatech.tileentity.gregtech.multiblock.eigmodes; import static kubatech.api.utils.StringUtils.voltageTooltipFormatted; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; +import gregtech.api.util.MultiblockTooltipBuilder; import kubatech.api.eig.EIGMode; -import kubatech.tileentity.gregtech.multiblock.GT_MetaTileEntity_ExtremeIndustrialGreenhouse; +import kubatech.tileentity.gregtech.multiblock.MTEExtremeIndustrialGreenhouse; public class EIGNormalMode extends EIGMode { @@ -22,7 +22,7 @@ public class EIGNormalMode extends EIGMode { @Override public int getMinVoltageTier() { - return GT_MetaTileEntity_ExtremeIndustrialGreenhouse.EIG_BALANCE_REGULAR_MODE_MIN_TIER; + return MTEExtremeIndustrialGreenhouse.EIG_BALANCE_REGULAR_MODE_MIN_TIER; } @Override @@ -61,7 +61,7 @@ public class EIGNormalMode extends EIGMode { } @Override - public GT_Multiblock_Tooltip_Builder addTooltipInfo(GT_Multiblock_Tooltip_Builder builder) { + public MultiblockTooltipBuilder addTooltipInfo(MultiblockTooltipBuilder builder) { String minVoltageTier = voltageTooltipFormatted(this.getMinVoltageTier()); String minVoltageTierMinus1 = voltageTooltipFormatted(this.getMinVoltageTier() - 1); diff --git a/src/main/java/net/glease/ggfab/BlockIcons.java b/src/main/java/net/glease/ggfab/BlockIcons.java deleted file mode 100644 index 638b206f44..0000000000 --- a/src/main/java/net/glease/ggfab/BlockIcons.java +++ /dev/null @@ -1,45 +0,0 @@ -package net.glease.ggfab; - -import net.minecraft.client.renderer.texture.TextureMap; -import net.minecraft.util.IIcon; -import net.minecraft.util.ResourceLocation; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.IIconContainer; - -public enum BlockIcons implements IIconContainer, Runnable { - - OVERLAY_FRONT_ADV_ASSLINE_ACTIVE, - OVERLAY_FRONT_ADV_ASSLINE_ACTIVE_GLOW, - OVERLAY_FRONT_ADV_ASSLINE_STUCK, - OVERLAY_FRONT_ADV_ASSLINE_STUCK_GLOW, - OVERLAY_FRONT_ADV_ASSLINE, - OVERLAY_FRONT_ADV_ASSLINE_GLOW,; - - public static final String RES_PATH = GGConstants.MODID + ":"; - private IIcon mIcon; - - BlockIcons() { - GregTech_API.sGTBlockIconload.add(this); - } - - @Override - public IIcon getIcon() { - return mIcon; - } - - @Override - public IIcon getOverlayIcon() { - return null; - } - - @Override - public ResourceLocation getTextureFile() { - return TextureMap.locationBlocksTexture; - } - - @Override - public void run() { - mIcon = GregTech_API.sBlockIcons.registerIcon(RES_PATH + "iconsets/" + this); - } -} diff --git a/src/main/java/net/glease/ggfab/ComponentRecipeLoader.java b/src/main/java/net/glease/ggfab/ComponentRecipeLoader.java deleted file mode 100644 index 5c121b205e..0000000000 --- a/src/main/java/net/glease/ggfab/ComponentRecipeLoader.java +++ /dev/null @@ -1,57 +0,0 @@ -package net.glease.ggfab; - -import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; -import static gregtech.api.util.GT_RecipeBuilder.HOURS; -import static gregtech.api.util.GT_RecipeBuilder.MINUTES; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; -import static gregtech.api.util.GT_RecipeConstants.AssemblyLine; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_ITEM; -import static gregtech.api.util.GT_RecipeConstants.RESEARCH_TIME; - -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -class ComponentRecipeLoader implements Runnable { - - @Override - public void run() { - Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140"); - - GT_Values.RA.stdBuilder() - .metadata(RESEARCH_ITEM, ItemList.Machine_Multi_Assemblyline.get(1L)) - .metadata(RESEARCH_TIME, 1 * HOURS + 6 * MINUTES) - .itemInputs( - ItemList.Machine_Multi_Assemblyline.get(1L), - new Object[] { OrePrefixes.circuit.get(Materials.LuV), 2 }, - new Object[] { OrePrefixes.circuit.get(Materials.IV), 4 }, - new Object[] { OrePrefixes.circuit.get(Materials.EV), 8 }, - ItemList.Automation_ChestBuffer_LuV.get(1L)) - .fluidInputs(new FluidStack(solderIndalloy, 1296), Materials.Lubricant.getFluid(2000)) - .itemOutputs(GGItemList.AdvAssLine.get(1L)) - .eut(6_000) - .duration(10 * MINUTES) - .addTo(AssemblyLine); - - GT_Values.RA.stdBuilder() - .itemInputs( - ItemList.Hatch_Input_Bus_IV.get(1L), - ItemList.Emitter_IV.get(1L), - ItemList.Sensor_IV.get(1L), - GT_OreDictUnificator.get(OrePrefixes.plateDense, Materials.Enderium, 1L), - GT_Utility.getIntegratedCircuit(12)) - .itemOutputs(GGItemList.LinkedInputBus.get(1L)) - .fluidInputs(Materials.Polybenzimidazole.getMolten(144L)) - .duration(30 * SECONDS) - .eut(GT_Values.VP[5]) - .addTo(assemblerRecipes); - - } -} diff --git a/src/main/java/net/glease/ggfab/ConfigurationHandler.java b/src/main/java/net/glease/ggfab/ConfigurationHandler.java deleted file mode 100644 index 5364b00941..0000000000 --- a/src/main/java/net/glease/ggfab/ConfigurationHandler.java +++ /dev/null @@ -1,52 +0,0 @@ -package net.glease.ggfab; - -import java.io.File; -import java.util.Map; - -import net.minecraftforge.common.config.ConfigCategory; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.common.config.Property; - -public enum ConfigurationHandler { - - INSTANCE; - - private Configuration config; - private float laserOCPenaltyFactor; - - void init(File f) { - config = new Configuration(f); - loadConfig(); - setLanguageKeys(); - } - - private void setLanguageKeys() { - for (String categoryName : config.getCategoryNames()) { - ConfigCategory category = config.getCategory(categoryName); - category.setLanguageKey("ggfab.config." + categoryName); - for (Map.Entry entry : category.entrySet()) { - entry.getValue() - .setLanguageKey(String.format("%s.%s", category.getLanguagekey(), entry.getKey())); - } - } - } - - private void loadConfig() { - laserOCPenaltyFactor = config.getFloat( - "advasslinePenaltyFactor", - "common.balancing", - 0.3f, - 0f, - 10f, - "Laser overclock penalty factor. This will incredibly change the game balance. Even a small step from 0.2 to 0.3 can have very significant impact. Tweak with caution!"); - config.save(); - } - - public Configuration getConfig() { - return config; - } - - public float getLaserOCPenaltyFactor() { - return laserOCPenaltyFactor; - } -} diff --git a/src/main/java/net/glease/ggfab/GGConstants.java b/src/main/java/net/glease/ggfab/GGConstants.java deleted file mode 100644 index 8547dfc857..0000000000 --- a/src/main/java/net/glease/ggfab/GGConstants.java +++ /dev/null @@ -1,16 +0,0 @@ -package net.glease.ggfab; - -import net.minecraft.util.EnumChatFormatting; - -import gregtech.GT_Version; - -public class GGConstants { - - public static final String MODID = "ggfab"; - public static final String RES_PATH_ITEM = MODID + ":"; - public static final String MODNAME = "GigaGramFab"; - public static final String VERSION = GT_Version.VERSION; - - public static final String GGMARK = EnumChatFormatting.GOLD + "GigaGram" + EnumChatFormatting.RESET + "Fab"; - public static final String GGMARK_TOOLTIP = "Added by " + GGMARK; -} diff --git a/src/main/java/net/glease/ggfab/GGItemList.java b/src/main/java/net/glease/ggfab/GGItemList.java deleted file mode 100644 index af5e610036..0000000000 --- a/src/main/java/net/glease/ggfab/GGItemList.java +++ /dev/null @@ -1,205 +0,0 @@ -package net.glease.ggfab; - -import static gregtech.api.enums.GT_Values.W; - -import net.minecraft.block.Block; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; - -import gregtech.api.interfaces.IItemContainer; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -public enum GGItemList implements IItemContainer { - - LinkedInputBus, - AdvAssLine, - // region single use tool - ToolCast_MV, - ToolCast_HV, - ToolCast_EV, - // order matters, do not insert randomly like a n00b - One_Use_craftingToolFile, - One_Use_craftingToolWrench, - One_Use_craftingToolCrowbar, - One_Use_craftingToolWireCutter, - One_Use_craftingToolHardHammer, - One_Use_craftingToolSoftHammer, - One_Use_craftingToolScrewdriver, - One_Use_craftingToolSaw, - Shape_One_Use_craftingToolFile, - Shape_One_Use_craftingToolWrench, - Shape_One_Use_craftingToolCrowbar, - Shape_One_Use_craftingToolWireCutter, - Shape_One_Use_craftingToolHardHammer, - Shape_One_Use_craftingToolSoftHammer, - Shape_One_Use_craftingToolScrewdriver, - Shape_One_Use_craftingToolSaw, - // ordered section ends - // endregion - // - ; - - private ItemStack mStack; - private boolean mHasNotBeenSet = true; - - @Override - public IItemContainer set(Item aItem) { - mHasNotBeenSet = false; - if (aItem == null) { - return this; - } - ItemStack aStack = new ItemStack(aItem, 1, 0); - mStack = GT_Utility.copyAmount(1, aStack); - return this; - } - - @Override - public IItemContainer hidden() { - codechicken.nei.api.API.hideItem(get(1L)); - return this; - } - - @Override - public IItemContainer set(ItemStack aStack) { - mHasNotBeenSet = false; - mStack = GT_Utility.copyAmount(1, aStack); - return this; - } - - @Override - public Item getItem() { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return null; - } - return mStack.getItem(); - } - - @Override - public Block getBlock() { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - return GT_Utility.getBlockFromStack(new ItemStack(getItem())); - } - - @Override - public final boolean hasBeenSet() { - return !mHasNotBeenSet; - } - - @Override - public boolean isStackEqual(Object aStack) { - return isStackEqual(aStack, false, false); - } - - @Override - public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT) { - if (GT_Utility.isStackInvalid(aStack)) { - return false; - } - return GT_Utility.areUnificationsEqual((ItemStack) aStack, aWildcard ? getWildcard(1) : get(1), aIgnoreNBT); - } - - @Override - public ItemStack get(long aAmount, Object... aReplacements) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); - } - return GT_Utility.copyAmount(aAmount, GT_OreDictUnificator.get(mStack)); - } - - @Override - public ItemStack getWildcard(long aAmount, Object... aReplacements) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); - } - return GT_Utility.copyAmountAndMetaData(aAmount, W, GT_OreDictUnificator.get(mStack)); - } - - @Override - public ItemStack getUndamaged(long aAmount, Object... aReplacements) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); - } - return GT_Utility.copyAmountAndMetaData(aAmount, 0, GT_OreDictUnificator.get(mStack)); - } - - @Override - public ItemStack getAlmostBroken(long aAmount, Object... aReplacements) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); - } - return GT_Utility.copyAmountAndMetaData(aAmount, mStack.getMaxDamage() - 1, GT_OreDictUnificator.get(mStack)); - } - - @Override - public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements) { - ItemStack rStack = get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) { - return null; - } - rStack.setStackDisplayName(aDisplayName); - return GT_Utility.copyAmount(aAmount, rStack); - } - - @Override - public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements) { - ItemStack rStack = get(1, aReplacements); - if (GT_Utility.isStackInvalid(rStack)) { - return null; - } - GT_ModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); - return GT_Utility.copyAmount(aAmount, rStack); - } - - @Override - public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - if (GT_Utility.isStackInvalid(mStack)) { - return GT_Utility.copyAmount(aAmount, aReplacements); - } - return GT_Utility.copyAmountAndMetaData(aAmount, aMetaValue, GT_OreDictUnificator.get(mStack)); - } - - @Override - public IItemContainer registerOre(Object... aOreNames) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - for (Object tOreName : aOreNames) { - GT_OreDictUnificator.registerOre(tOreName, get(1)); - } - return this; - } - - @Override - public IItemContainer registerWildcardAsOre(Object... aOreNames) { - if (mHasNotBeenSet) { - throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); - } - for (Object tOreName : aOreNames) { - GT_OreDictUnificator.registerOre(tOreName, getWildcard(1)); - } - return this; - } - -} diff --git a/src/main/java/net/glease/ggfab/GigaGramFab.java b/src/main/java/net/glease/ggfab/GigaGramFab.java deleted file mode 100644 index 412e1cd647..0000000000 --- a/src/main/java/net/glease/ggfab/GigaGramFab.java +++ /dev/null @@ -1,191 +0,0 @@ -package net.glease.ggfab; - -import static gregtech.api.enums.ToolDictNames.*; -import static gregtech.common.items.GT_MetaGenerated_Tool_01.*; -import static gregtech.common.items.ID_MetaTool_01.*; -import static net.glease.ggfab.api.GGFabRecipeMaps.toolCastRecipes; - -import net.glease.ggfab.api.GigaGramFabAPI; -import net.glease.ggfab.items.GGMetaItem_DumbItems; -import net.glease.ggfab.mte.MTE_AdvAssLine; -import net.glease.ggfab.mte.MTE_LinkedInputBus; -import net.glease.ggfab.util.GGUtils; -import net.minecraft.item.ItemStack; - -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLPostInitializationEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import gregtech.api.GregTech_API; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SoundResource; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine_GT_Recipe; -import gregtech.api.util.GT_ProcessingArray_Manager; - -@Mod( - modid = GGConstants.MODID, - version = GGConstants.VERSION, - name = GGConstants.MODNAME, - acceptedMinecraftVersions = "[1.7.10]", - dependencies = "required-after:IC2;required-before:gregtech") -public class GigaGramFab { - - public GigaGramFab() { - // initialize the textures - // noinspection ResultOfMethodCallIgnored - BlockIcons.OVERLAY_FRONT_ADV_ASSLINE.name(); - } - - @Mod.EventHandler - public void preInit(FMLPreInitializationEvent event) { - GregTech_API.sAfterGTPreload.add(() -> { - GGItemList.AdvAssLine - .set(new MTE_AdvAssLine(13532, "ggfab.machine.adv_assline", "Advanced Assembly Line").getStackForm(1)); - GGItemList.LinkedInputBus.set( - new MTE_LinkedInputBus(13533, "ggfab.machine.linked_input_bus", "Linked Input Bus", 5).getStackForm(1)); - GGItemList.ToolCast_MV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - 13534, - "ggfab.toolcast.tier.mv", - "Basic Tool Casting Machine", - 2, - "Cheap Crafting Tool for you!", - toolCastRecipes, - 1, - 4, - 32000, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.MAIN_RANDOM_SPARKS, - "TOOL_CAST", - new Object[] { "PGP", "WMW", "CBC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, 'B', ItemList.Shape_Empty.get(1L) }) - .getStackForm(1L)); - GGItemList.ToolCast_HV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - 13535, - "ggfab.toolcast.tier.hv", - "Advanced Tool Casting Machine", - 3, - "Cheap Crafting Tool for you!", - toolCastRecipes, - 1, - 4, - 64000, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.MAIN_RANDOM_SPARKS, - "TOOL_CAST", - new Object[] { "PGP", "WMW", "CBC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, 'B', ItemList.Shape_Empty.get(1L) }) - .getStackForm(1L)); - GGItemList.ToolCast_EV.set( - new GT_MetaTileEntity_BasicMachine_GT_Recipe( - 13536, - "ggfab.toolcast.tier.ev", - "Master Tool Casting Machine", - 4, - "Cheap Crafting Tool for you!", - toolCastRecipes, - 1, - 4, - 128000, - SoundResource.NONE, - GT_MetaTileEntity_BasicMachine_GT_Recipe.SpecialEffects.MAIN_RANDOM_SPARKS, - "TOOL_CAST", - new Object[] { "PGP", "WMW", "CBC", 'M', GT_MetaTileEntity_BasicMachine_GT_Recipe.X.HULL, 'P', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.PUMP, 'C', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.CIRCUIT, 'W', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.WIRE, 'G', - GT_MetaTileEntity_BasicMachine_GT_Recipe.X.GLASS, 'B', ItemList.Shape_Empty.get(1L) }) - .getStackForm(1L)); - long plate = OrePrefixes.plate.mMaterialAmount, ingot = OrePrefixes.ingot.mMaterialAmount, - screw = OrePrefixes.screw.mMaterialAmount, rod = OrePrefixes.stick.mMaterialAmount; - GigaGramFabAPI.addSingleUseToolType(craftingToolFile, INSTANCE.mToolStats.get((short) FILE.ID), 2 * plate); - GigaGramFabAPI - .addSingleUseToolType(craftingToolWrench, INSTANCE.mToolStats.get((short) WRENCH.ID), 6 * ingot); - GigaGramFabAPI - .addSingleUseToolType(craftingToolCrowbar, INSTANCE.mToolStats.get((short) CROWBAR.ID), 3 * rod); - GigaGramFabAPI.addSingleUseToolType( - craftingToolWireCutter, - INSTANCE.mToolStats.get((short) WIRECUTTER.ID), - 3 * plate + 2 * rod + screw); - GigaGramFabAPI.addSingleUseToolType( - craftingToolHardHammer, - INSTANCE.mToolStats.get((short) HARDHAMMER.ID), - 6 * ingot); - GigaGramFabAPI.addSingleUseToolType( - craftingToolSoftHammer, - INSTANCE.mToolStats.get((short) SOFTMALLET.ID), - 6 * ingot); - GigaGramFabAPI.addSingleUseToolType( - craftingToolScrewdriver, - INSTANCE.mToolStats.get((short) SCREWDRIVER.ID), - 2 * rod); - GigaGramFabAPI.addSingleUseToolType(craftingToolSaw, INSTANCE.mToolStats.get((short) SAW.ID), 2 * plate); - GT_ProcessingArray_Manager.addRecipeMapToPA("ggfab.toolcast", toolCastRecipes); - }); - GregTech_API.sBeforeGTPostload.add(new ComponentRecipeLoader()); - GregTech_API.sBeforeGTPostload.add(new SingleUseToolRecipeLoader()); - ConfigurationHandler.INSTANCE.init(event.getSuggestedConfigurationFile()); - - initDumbItem1(); - } - - @Mod.EventHandler - public void init(FMLInitializationEvent event) {} - - @Mod.EventHandler - public void postInit(FMLPostInitializationEvent event) {} - - private void initDumbItem1() { - GGMetaItem_DumbItems i1 = new GGMetaItem_DumbItems("ggfab.d1"); - int id = 0; - { - int idShape = 30; - final int budget = idShape; - String prefix = "One_Use_craftingTool"; - String prefix2 = "Shape_One_Use_craftingTool"; - for (GGItemList i : GGItemList.values()) { - ItemStack stack = null; - if (i.name() - .startsWith(prefix)) { - stack = i1.addItem( - id++, - "Single Use " + GGUtils.processSentence( - i.name() - .substring(prefix.length()), - ' ', - true, - true), - null, - i, - i.name() - .substring("One_Use_".length())); - } else if (i.name() - .startsWith(prefix2)) { - stack = i1.addItem( - idShape++, - "Tool Casting Mold (" + GGUtils.processSentence( - i.name() - .substring(prefix2.length()), - ' ', - true, - true) + ")", - null, - i); - } - if (stack != null) { - i.set(stack); - } - } - if (id >= budget || idShape >= 2 * budget || idShape - id != budget) throw new AssertionError(); - id = budget * 2; - } - } -} diff --git a/src/main/java/net/glease/ggfab/SingleUseToolRecipeLoader.java b/src/main/java/net/glease/ggfab/SingleUseToolRecipeLoader.java deleted file mode 100644 index aa2a72f71c..0000000000 --- a/src/main/java/net/glease/ggfab/SingleUseToolRecipeLoader.java +++ /dev/null @@ -1,103 +0,0 @@ -package net.glease.ggfab; - -import static gregtech.api.enums.ToolDictNames.*; -import static gregtech.api.util.GT_RecipeBuilder.SECONDS; - -import net.glease.ggfab.api.GGFabRecipeMaps; -import net.glease.ggfab.api.GigaGramFabAPI; - -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.Materials; -import gregtech.api.enums.TierEU; -import gregtech.api.enums.ToolDictNames; -import gregtech.api.interfaces.IToolStats; -import gregtech.api.util.GT_ModHandler; -import gregtech.api.util.GT_Utility; - -class SingleUseToolRecipeLoader implements Runnable { - - @Override - public void run() { - ToolDictNames[] hardTools = new ToolDictNames[] { craftingToolHardHammer, craftingToolScrewdriver, - craftingToolWrench, craftingToolCrowbar, craftingToolWireCutter, craftingToolFile, craftingToolSaw }; - ToolDictNames[] softTools = new ToolDictNames[] { craftingToolSoftHammer }; - addSingleUseToolRecipe(Materials.Steel, hardTools); - addSingleUseToolRecipe(Materials.Silver, 5000, hardTools); - addSingleUseToolRecipe(Materials.VanadiumSteel, hardTools); - addSingleUseToolRecipe(Materials.TungstenSteel, hardTools); - addSingleUseToolRecipe(Materials.HSSG, hardTools); - addSingleUseToolRecipe(Materials.Rubber, softTools); - addSingleUseToolRecipe(Materials.StyreneButadieneRubber, softTools); - addSingleUseToolRecipe(Materials.Polybenzimidazole, softTools); - - String prefix = "Shape_One_Use_"; - for (GGItemList value : GGItemList.values()) { - if (!value.name() - .startsWith(prefix)) { - continue; - } - ToolDictNames type = ToolDictNames.valueOf( - value.name() - .substring(prefix.length())); - GT_ModHandler - .addCraftingRecipe(value.get(1L), new Object[] { "h", "P", "I", 'P', ItemList.Shape_Empty, 'I', type }); - } - } - - private void addSingleUseToolRecipe(Materials material, ToolDictNames... types) { - addSingleUseToolRecipe(material, 10000, types); - } - - private static long findNiceFactor(long fluids, long count) { - long end = Math.min(fluids, count); - for (long i = count / 256; i < end; i++) { - if (fluids % i == 0 && count % i == 0 && count / i < 256) return i; - } - return -1; - } - - private void addSingleUseToolRecipe(Materials material, int outputModifier, ToolDictNames... types) { - if (material.mStandardMoltenFluid == null) { - throw new IllegalArgumentException("material does not have molten fluid form"); - } - for (ToolDictNames type : types) { - IToolStats stats = GigaGramFabAPI.SINGLE_USE_TOOLS.get(type); - Long cost = GigaGramFabAPI.COST_SINGLE_USE_TOOLS.get(type); - if (stats == null || cost == null) { - throw new IllegalArgumentException(type + " not registered"); - } - long fluids = cost * GT_Values.L / GT_Values.M, duration = 6 * SECONDS; - long count = (long) (material.mDurability * stats.getMaxDurabilityMultiplier() - * outputModifier - * 100 - / stats.getToolDamagePerContainerCraft() - / 10000); - if (count > 64 * 4) { - long niceFactor = findNiceFactor(fluids, count); - if (niceFactor < 0) { - double mod = (double) count / (64 * 4L); - fluids = Math.max((long) (fluids / mod), 1L); - duration = Math.max((long) (duration / mod), 1L); - count = 64 * 4; - } else { - fluids /= niceFactor; - duration = Math.max(duration / niceFactor, 1); - count /= niceFactor; - } - } else if (count < 128) { - long mod = GT_Utility.ceilDiv(128, count); - fluids *= mod; - duration *= mod; - count *= mod; - } - GT_Values.RA.stdBuilder() - .fluidInputs(material.getMolten(fluids)) // - .metadata(GGFabRecipeMaps.OUTPUT_TYPE, type) // - .metadata(GGFabRecipeMaps.OUTPUT_COUNT, (int) count) // - .eut(TierEU.RECIPE_MV) - .duration(duration) // - .addTo(GGFabRecipeMaps.toolCastRecipes); - } - } -} diff --git a/src/main/java/net/glease/ggfab/api/GGFabRecipeMaps.java b/src/main/java/net/glease/ggfab/api/GGFabRecipeMaps.java deleted file mode 100644 index 039b9d2b58..0000000000 --- a/src/main/java/net/glease/ggfab/api/GGFabRecipeMaps.java +++ /dev/null @@ -1,64 +0,0 @@ -package net.glease.ggfab.api; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import net.glease.ggfab.GGItemList; -import net.minecraft.item.ItemStack; - -import com.gtnewhorizons.modularui.common.widget.ProgressBar; - -import gregtech.api.enums.ToolDictNames; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMapBackend; -import gregtech.api.recipe.RecipeMapBuilder; -import gregtech.api.recipe.RecipeMetadataKey; -import gregtech.api.recipe.metadata.SimpleRecipeMetadataKey; -import gregtech.api.util.GT_Recipe; - -public class GGFabRecipeMaps { - - public static final RecipeMetadataKey OUTPUT_TYPE = SimpleRecipeMetadataKey - .create(ToolDictNames.class, "output_type"); - public static final RecipeMetadataKey OUTPUT_COUNT = SimpleRecipeMetadataKey - .create(Integer.class, "output_count"); - public static final RecipeMap toolCastRecipes = RecipeMapBuilder.of("ggfab.recipe.toolcast") - .maxIO(1, 4, 1, 0) - .minInputs(1, 1) - .progressBar(GT_UITextures.PROGRESSBAR_ARROW, ProgressBar.Direction.RIGHT) - .recipeEmitter(b -> { - Optional rr = b.noOptimize() - .validateNoInput() - .validateInputFluidCount(0, 1) - .validateNoOutput() - .validateNoOutputFluid() - .build(); - if (!rr.isPresent()) return Collections.emptyList(); - ToolDictNames outputType = b.getMetadata(OUTPUT_TYPE); - GT_Recipe r = rr.get(); - int outputSize = b.getMetadataOrDefault(OUTPUT_COUNT, 0); - if (outputSize > 64 * 4 || outputSize <= 0) return Collections.emptyList(); - ItemStack shape, output; - try { - shape = GGItemList.valueOf("Shape_One_Use_" + outputType) - .get(0L); - output = GGItemList.valueOf("One_Use_" + outputType) - .get(outputSize); - } catch (IllegalArgumentException ex) { - // this looks like python not java, but I don't have better way around this - return Collections.emptyList(); - } - output.stackSize = outputSize; - List outputs = new ArrayList<>(); - int maxStackSize = output.getMaxStackSize(); - while (output.stackSize > maxStackSize) outputs.add(output.splitStack(maxStackSize)); - outputs.add(output); - r.mInputs = new ItemStack[] { shape }; - r.mOutputs = outputs.toArray(new ItemStack[0]); - return Collections.singletonList(r); - }) - .build(); -} diff --git a/src/main/java/net/glease/ggfab/api/GigaGramFabAPI.java b/src/main/java/net/glease/ggfab/api/GigaGramFabAPI.java deleted file mode 100644 index 6b35b26486..0000000000 --- a/src/main/java/net/glease/ggfab/api/GigaGramFabAPI.java +++ /dev/null @@ -1,30 +0,0 @@ -package net.glease.ggfab.api; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import gregtech.api.enums.ToolDictNames; -import gregtech.api.interfaces.IToolStats; - -public class GigaGramFabAPI { - - private static final Logger apiLogger = LogManager.getLogger("GigaGramFabAPI"); - - private static final Map SINGLE_USE_TOOLS_STORE = new HashMap<>(); - public static final Map SINGLE_USE_TOOLS = Collections - .unmodifiableMap(SINGLE_USE_TOOLS_STORE); - - private static final Map COST_SINGLE_USE_TOOLS_STORE = new HashMap<>(); - public static final Map COST_SINGLE_USE_TOOLS = Collections - .unmodifiableMap(COST_SINGLE_USE_TOOLS_STORE); - - public static void addSingleUseToolType(ToolDictNames type, IToolStats stat, long materialCost) { - if (SINGLE_USE_TOOLS_STORE.put(type, stat) != null) - apiLogger.warn("Replacing stat of single use tool {}", type); - COST_SINGLE_USE_TOOLS_STORE.put(type, materialCost); - } -} diff --git a/src/main/java/net/glease/ggfab/items/GGMetaItem_DumbItems.java b/src/main/java/net/glease/ggfab/items/GGMetaItem_DumbItems.java deleted file mode 100644 index 20a81a5abb..0000000000 --- a/src/main/java/net/glease/ggfab/items/GGMetaItem_DumbItems.java +++ /dev/null @@ -1,153 +0,0 @@ -package net.glease.ggfab.items; - -import static gregtech.api.enums.GT_Values.D1; - -import java.util.ArrayList; -import java.util.BitSet; -import java.util.List; - -import net.glease.ggfab.GGConstants; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.IIcon; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import gnu.trove.map.TIntObjectMap; -import gnu.trove.map.hash.TIntObjectHashMap; -import gregtech.api.GregTech_API; -import gregtech.api.enums.SubTag; -import gregtech.api.enums.TC_Aspects; -import gregtech.api.interfaces.IItemBehaviour; -import gregtech.api.interfaces.IItemContainer; -import gregtech.api.items.GT_MetaBase_Item; -import gregtech.api.objects.ItemData; -import gregtech.api.util.GT_LanguageManager; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; - -// mostly stolen from gt5 itself. -public class GGMetaItem_DumbItems extends GT_MetaBase_Item { - - public static final int MAX_ID = 32766; - private final BitSet mEnabledItems = new BitSet(); - private final BitSet mVisibleItems = new BitSet(); - private final ArrayList mIconList = new ArrayList<>(); - private final TIntObjectMap mIconOverride = new TIntObjectHashMap<>(); - - public GGMetaItem_DumbItems(String aUnlocalized) { - super(aUnlocalized); - } - - /** - * This adds a Custom Item to the ending Range. - * - * @param aID The Id of the assigned Item [0 - mItemAmount] (The MetaData gets auto-shifted by +mOffset) - * @param aEnglish The Default Localized Name of the created Item - * @param aToolTip The Default ToolTip of the created Item, you can also insert null for having no ToolTip - * @param aRandomData The OreDict Names you want to give the Item. Also used for TC Aspects and some other things. - * @return An ItemStack containing the newly created Item. - */ - public final ItemStack addItem(int aID, String aEnglish, String aToolTip, Object... aRandomData) { - if (aID < 0 || aID > MAX_ID) return null; - - if (aToolTip == null) aToolTip = ""; - ItemStack rStack = new ItemStack(this, 1, aID); - mEnabledItems.set(aID); - mVisibleItems.set(aID); - GT_LanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".name", aEnglish); - GT_LanguageManager.addStringLocalization(getUnlocalizedName(rStack) + ".tooltip", aToolTip); - List tAspects = new ArrayList<>(); - // Important Stuff to do first - for (Object tRandomData : aRandomData) if (tRandomData instanceof SubTag) { - if (tRandomData == SubTag.INVISIBLE) { - mVisibleItems.set(aID, false); - continue; - } - if (tRandomData == SubTag.NO_UNIFICATION) { - GT_OreDictUnificator.addToBlacklist(rStack); - } - } - // now check for the rest - for (Object tRandomData : aRandomData) if (tRandomData != null) { - boolean tUseOreDict = true; - if (tRandomData instanceof IItemBehaviour) { - @SuppressWarnings("unchecked") - IItemBehaviour behavior = (IItemBehaviour) tRandomData; - addItemBehavior(aID, behavior); - tUseOreDict = false; - } - if (tRandomData instanceof IItemContainer) { - ((IItemContainer) tRandomData).set(rStack); - tUseOreDict = false; - } - if (tRandomData instanceof SubTag) { - continue; - } - if (tRandomData instanceof IItemContainer) { - mIconOverride.put(aID, (IItemContainer) tRandomData); - } else if (tRandomData instanceof TC_Aspects.TC_AspectStack) { - ((TC_Aspects.TC_AspectStack) tRandomData).addToAspectList(tAspects); - } else if (tRandomData instanceof ItemData) { - if (GT_Utility.isStringValid(tRandomData)) { - GT_OreDictUnificator.registerOre(tRandomData, rStack); - } else { - GT_OreDictUnificator.addItemData(rStack, (ItemData) tRandomData); - } - } else if (tUseOreDict) { - GT_OreDictUnificator.registerOre(tRandomData, rStack); - } - } - if (GregTech_API.sThaumcraftCompat != null) - GregTech_API.sThaumcraftCompat.registerThaumcraftAspectsToItem(rStack, tAspects, false); - return rStack; - } - - @Override - @SideOnly(Side.CLIENT) - public final void registerIcons(IIconRegister aIconRegister) { - short j = (short) mEnabledItems.length(); - mIconList.clear(); - mIconList.ensureCapacity(j); - for (short i = 0; i < j; i++) { - if (mEnabledItems.get(i)) { - mIconList.add(aIconRegister.registerIcon(GGConstants.RES_PATH_ITEM + getUnlocalizedName() + "/" + i)); - } else { - mIconList.add(null); - } - } - } - - @Override - public IIcon getIconFromDamage(int aMetaData) { - if (aMetaData < 0 || aMetaData >= mIconList.size() || mIconList.get(aMetaData) == null) - return super.getIconFromDamage(aMetaData); - return mIconList.get(aMetaData); - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - @Override - @SideOnly(Side.CLIENT) - public void getSubItems(Item aItem, CreativeTabs aCreativeTab, List aList) { - int j = mEnabledItems.length(); - for (int i = 0; i < j; i++) { - if (mVisibleItems.get(i) || (D1 && mEnabledItems.get(i))) { - ItemStack tStack = new ItemStack(this, 1, i); - isItemStackUsable(tStack); - aList.add(tStack); - } - } - } - - @Override - public Long[] getElectricStats(ItemStack aStack) { - return null; - } - - @Override - public Long[] getFluidContainerStats(ItemStack aStack) { - return null; - } -} diff --git a/src/main/java/net/glease/ggfab/mte/MTE_AdvAssLine.java b/src/main/java/net/glease/ggfab/mte/MTE_AdvAssLine.java deleted file mode 100644 index 8dd6652994..0000000000 --- a/src/main/java/net/glease/ggfab/mte/MTE_AdvAssLine.java +++ /dev/null @@ -1,1107 +0,0 @@ -package net.glease.ggfab.mte; - -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlockUnlocalizedName; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofChain; -import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.GT_HatchElement.Energy; -import static gregtech.api.enums.GT_HatchElement.ExoticEnergy; -import static gregtech.api.enums.GT_HatchElement.InputBus; -import static gregtech.api.enums.GT_HatchElement.InputHatch; -import static gregtech.api.enums.GT_HatchElement.Maintenance; -import static gregtech.api.enums.GT_HatchElement.OutputBus; -import static gregtech.api.enums.GT_Values.V; -import static gregtech.api.enums.Textures.BlockIcons.casingTexturePages; -import static gregtech.api.util.GT_StructureUtility.buildHatchAdder; -import static gregtech.api.util.GT_StructureUtility.ofHatchAdder; -import static gregtech.api.util.GT_Utility.filterValidMTEs; -import static net.glease.ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE; -import static net.glease.ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE_ACTIVE; -import static net.glease.ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE_ACTIVE_GLOW; -import static net.glease.ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE_GLOW; -import static net.glease.ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE_STUCK; -import static net.glease.ggfab.BlockIcons.OVERLAY_FRONT_ADV_ASSLINE_STUCK_GLOW; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.IntStream; - -import net.glease.ggfab.ConfigurationHandler; -import net.glease.ggfab.GGConstants; -import net.glease.ggfab.mui.ClickableTextWidget; -import net.glease.ggfab.util.OverclockHelper; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.init.Blocks; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagInt; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.StringUtils; -import net.minecraft.world.World; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidStack; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; -import com.gtnewhorizon.structurelib.structure.IStructureDefinition; -import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; -import com.gtnewhorizon.structurelib.structure.StructureDefinition; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.widget.ISyncedWidget; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; -import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; -import com.gtnewhorizons.modularui.common.widget.SlotWidget; -import com.gtnewhorizons.modularui.common.widget.TextWidget; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.GT_Values; -import gregtech.api.enums.ItemList; -import gregtech.api.enums.VoidingMode; -import gregtech.api.interfaces.IHatchElement; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_ExtendedPowerMultiBlockBase; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_DataAccess; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_MultiInput; -import gregtech.api.recipe.RecipeMap; -import gregtech.api.recipe.RecipeMaps; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.render.TextureFactory; -import gregtech.api.util.GT_AssemblyLineUtils; -import gregtech.api.util.GT_Multiblock_Tooltip_Builder; -import gregtech.api.util.GT_OverclockCalculator; -import gregtech.api.util.GT_Recipe; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.GT_Waila; -import gregtech.api.util.IGT_HatchAdder; -import gregtech.api.util.shutdown.ShutDownReason; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_InputBus_ME; -import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Input_ME; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; - -/* - * Dev note: 1. This multi will be an assline but with greater throughput. it will take one input every 2. - */ -public class MTE_AdvAssLine extends GT_MetaTileEntity_ExtendedPowerMultiBlockBase - implements ISurvivalConstructable { - - private static final ItemStack NOT_CHECKED = new ItemStack(Blocks.dirt); - private static final String STRUCTURE_PIECE_FIRST = "first"; - private static final String STRUCTURE_PIECE_LATER = "later"; - private static final String STRUCTURE_PIECE_LAST = "last"; - public static final String TAG_KEY_CURRENT_STICK = "mCurrentStick"; - public static final String TAG_KEY_PROGRESS_TIMES = "mProgressTimeArray"; - private static final IStructureDefinition STRUCTURE_DEFINITION = StructureDefinition - .builder() - // @formatter:off - .addShape( - STRUCTURE_PIECE_FIRST, - transpose(new String[][] { - { " ", "e", " " }, - { "~", "l", "G" }, - { "g", "m", "g" }, - { "b", "i", "b" }, - })) - .addShape( - STRUCTURE_PIECE_LATER, - transpose(new String[][] { - { " ", "e", " " }, - { "d", "l", "d" }, - { "g", "m", "g" }, - { "b", "I", "b" }, - })) - .addShape( - STRUCTURE_PIECE_LAST, - transpose(new String[][] { - { " ", "e", " " }, - { "d", "l", "d" }, - { "g", "m", "g" }, - { "o", "i", "b" }, - })) - // @formatter:on - .addElement('G', ofBlock(GregTech_API.sBlockCasings3, 10)) // grate machine casing - .addElement('l', ofBlock(GregTech_API.sBlockCasings2, 9)) // assembler machine casing - .addElement('m', ofBlock(GregTech_API.sBlockCasings2, 5)) // assembling line casing - .addElement( - 'g', - ofChain( - ofBlockUnlocalizedName("IC2", "blockAlloyGlass", 0, true), - ofBlockUnlocalizedName("bartworks", "BW_GlasBlocks", 0, true), - // warded glass - ofBlockUnlocalizedName("Thaumcraft", "blockCosmeticOpaque", 2, false))) - .addElement( - 'e', - ofChain( - Energy.or(ExoticEnergy) - .newAny(16, 1, ForgeDirection.UP, ForgeDirection.NORTH, ForgeDirection.SOUTH), - ofBlock(GregTech_API.sBlockCasings2, 0))) - .addElement( - 'd', - buildHatchAdder(MTE_AdvAssLine.class).atLeast(DataHatchElement.DataAccess) - .dot(2) - .casingIndex(42) - .allowOnly(ForgeDirection.NORTH) - .buildAndChain(GregTech_API.sBlockCasings3, 10)) - .addElement( - 'b', - buildHatchAdder(MTE_AdvAssLine.class).atLeast(InputHatch, InputHatch, InputHatch, InputHatch, Maintenance) - .casingIndex(16) - .dot(3) - .allowOnly(ForgeDirection.DOWN) - .buildAndChain( - ofBlock(GregTech_API.sBlockCasings2, 0), - ofHatchAdder(MTE_AdvAssLine::addOutputToMachineList, 16, 4))) - .addElement( - 'I', - ofChain( - // all blocks nearby use solid steel casing, so let's use the texture of that - InputBus.newAny(16, 5, ForgeDirection.DOWN), - ofHatchAdder(MTE_AdvAssLine::addOutputToMachineList, 16, 4))) - .addElement('i', InputBus.newAny(16, 5, ForgeDirection.DOWN)) - .addElement('o', OutputBus.newAny(16, 4, ForgeDirection.DOWN)) - .build(); - private ItemStack currentStick; - private GT_Recipe.GT_Recipe_AssemblyLine currentRecipe; - private final Slice[] slices = IntStream.range(0, 16) - .mapToObj(Slice::new) - .toArray(Slice[]::new); - private boolean processing; - private long inputVoltage; - // surely no one is using more EUt than this, no? - private long inputEUt; - private long baseEUt; - private boolean stuck; - - private final List mDataAccessHatches = new ArrayList<>(); - private Map curBatchItemsFromME; - private Map curBatchFluidsFromME; - private int currentInputLength; - private String lastStopReason = ""; - private int currentRecipeParallel = 1; - // Batch mode will increase parallel per slice to try to get as close as possible to this amount of ticks - // per slice, but will never go over this amount. - private static final int BATCH_MODE_DESIRED_TICKS_PER_SLICE = 128; - - public MTE_AdvAssLine(int aID, String aName, String aNameRegional) { - super(aID, aName, aNameRegional); - } - - public MTE_AdvAssLine(String aName) { - super(aName); - } - - @Override - public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new MTE_AdvAssLine(mName); - } - - public boolean addDataAccessToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { - if (aTileEntity == null) return false; - IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); - if (aMetaTileEntity == null) return false; - if (aMetaTileEntity instanceof GT_MetaTileEntity_Hatch_DataAccess) { - ((GT_MetaTileEntity_Hatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); - return mDataAccessHatches.add((GT_MetaTileEntity_Hatch_DataAccess) aMetaTileEntity); - } - return false; - } - - private boolean checkMachine() { - return checkMachine(true) || checkMachine(false); - } - - private boolean checkMachine(boolean leftToRight) { - clearHatches(); - if (!checkPiece(STRUCTURE_PIECE_FIRST, 0, 1, 0)) return false; - for (int i = 1; i < 16; i++) { - if (!checkPiece(STRUCTURE_PIECE_LATER, leftToRight ? -i : i, 1, 0)) return false; - if (!mOutputBusses.isEmpty()) - return (!mEnergyHatches.isEmpty() || !mExoticEnergyHatches.isEmpty()) && mMaintenanceHatches.size() == 1 - && mDataAccessHatches.size() <= 1; - } - return false; - } - - @Override - public void construct(ItemStack stackSize, boolean hintsOnly) { - buildPiece(STRUCTURE_PIECE_FIRST, stackSize, hintsOnly, 0, 1, 0); - int tLength = Math.min(stackSize.stackSize + 3, 16); // render 4 slices at minimal - for (int i = 1; i < tLength; i++) { - buildPiece(STRUCTURE_PIECE_LATER, stackSize, hintsOnly, -i, 1, 0); - } - } - - @Override - public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { - if (mMachine) return -1; - int build = survivialBuildPiece(STRUCTURE_PIECE_FIRST, stackSize, 0, 1, 0, elementBudget, env, false, true); - if (build >= 0) return build; - int tLength = Math.min(stackSize.stackSize + 3, 16); // render 4 slices at minimal - for (int i = 1; i < tLength - 1; i++) { - build = survivialBuildPiece(STRUCTURE_PIECE_LATER, stackSize, -i, 1, 0, elementBudget, env, false, true); - if (build >= 0) return build; - } - return survivialBuildPiece(STRUCTURE_PIECE_LAST, stackSize, 1 - tLength, 1, 0, elementBudget, env, false, true); - } - - @Override - public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, - int colorIndex, boolean aActive, boolean aRedstone) { - if (side == facing) { - if (stuck) { - return new ITexture[] { casingTexturePages[0][16], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ADV_ASSLINE_STUCK) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ADV_ASSLINE_STUCK_GLOW) - .extFacing() - .glow() - .build() }; - } - if (aActive) return new ITexture[] { casingTexturePages[0][16], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ADV_ASSLINE_ACTIVE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ADV_ASSLINE_ACTIVE_GLOW) - .extFacing() - .glow() - .build() }; - return new ITexture[] { casingTexturePages[0][16], TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ADV_ASSLINE) - .extFacing() - .build(), - TextureFactory.builder() - .addIcon(OVERLAY_FRONT_ADV_ASSLINE_GLOW) - .extFacing() - .glow() - .build() }; - } - return new ITexture[] { casingTexturePages[0][16] }; - } - - @Override - protected GT_Multiblock_Tooltip_Builder createTooltip() { - final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder(); - tt.addMachineType("Assembling Line") - .addInfo("Controller block for the Advanced Assembling Line") - .addInfo("Built exactly the same as standard Assembling Line") - .addInfo("Place in world to get more info. It will be a lengthy read.") - .addInfo("Assembling Line with item pipelining") - .addInfo("All fluids are however consumed at start") - .addInfo("Use voltage of worst energy hatch for overclocking") - .addInfo("EU/t is (number of slices working) * (overclocked EU/t)") - .addSeparator() - .beginVariableStructureBlock(5, 16, 4, 4, 3, 3, false) - .addStructureInfo("From Bottom to Top, Left to Right") - .addStructureInfo( - "Layer 1 - Solid Steel Machine Casing, Input Bus (last can be Output Bus), Solid Steel Machine Casing") - .addStructureInfo( - "Layer 2 - Borosilicate Glass(any)/Warded Glass/Reinforced Glass, Assembling Line Casing, Reinforced Glass") - .addStructureInfo("Layer 3 - Grate Machine Casing, Assembler Machine Casing, Grate Machine Casing") - .addStructureInfo("Layer 4 - Empty, Solid Steel Machine Casing, Empty") - .addStructureInfo("Up to 16 repeating slices, each one allows for 1 more item in recipes") - .addController("Either Grate on layer 3 of the first slice") - .addEnergyHatch("Any layer 4 casing", 1) - .addMaintenanceHatch("Any layer 1 casing", 3) - .addInputBus("As specified on layer 1", 4, 5) - .addInputHatch("Any layer 1 casing", 3) - .addOutputBus("Replaces Input Bus on final slice or on any solid steel casing on layer 1", 4) - .addOtherStructurePart("Data Access Hatch", "Optional, next to controller", 2) - .toolTipFinisher(GGConstants.GGMARK); - return tt; - } - - private void setCurrentRecipe(ItemStack stick, GT_Recipe.GT_Recipe_AssemblyLine recipe) { - currentRecipe = recipe; - currentStick = stick; - currentInputLength = recipe.mInputs.length; - } - - private void clearCurrentRecipe() { - currentRecipe = null; - currentStick = null; - currentInputLength = -1; - currentRecipeParallel = 1; - stuck = false; - baseEUt = 0; - for (Slice slice : slices) { - slice.reset(); - } - mMaxProgresstime = 0; - getBaseMetaTileEntity().issueClientUpdate(); - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - aNBT.setString("lastStop", lastStopReason); - // we need to check for active here. - // if machine was turned off via soft mallet it will not call checkRecipe() on recipe end - // in that case we don't have a current recipe, so this should be ignored - if (getBaseMetaTileEntity().isActive() && GT_Utility.isStackValid(currentStick)) { - aNBT.setTag(TAG_KEY_CURRENT_STICK, currentStick.writeToNBT(new NBTTagCompound())); - aNBT.setInteger("mRecipeHash", currentRecipe.getPersistentHash()); - aNBT.setIntArray( - TAG_KEY_PROGRESS_TIMES, - Arrays.stream(slices) - .limit(currentInputLength) - .mapToInt(s -> s.progress) - .toArray()); - aNBT.setBoolean("stuck", stuck); - aNBT.setLong("inputV", inputVoltage); - aNBT.setLong("inputEU", inputEUt); - aNBT.setLong("baseEU", baseEUt); - aNBT.setInteger("currentParallel", currentRecipeParallel); - } - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - lastStopReason = aNBT.getString("lastStop"); - ItemStack loadedStack = null; - GT_Recipe.GT_Recipe_AssemblyLine recipe = null; - if (aNBT.hasKey(TAG_KEY_PROGRESS_TIMES, Constants.NBT.TAG_INT_ARRAY)) { - int[] arr = aNBT.getIntArray(TAG_KEY_PROGRESS_TIMES); - for (int i = 0; i < slices.length; i++) { - if (i < arr.length) { - slices[i].progress = arr[i]; - if (arr[i] == 0) - // this will be synced to client by first MTE packet to client - stuck = true; - } else slices[i].reset(); - } - } - if (aNBT.hasKey(TAG_KEY_CURRENT_STICK, Constants.NBT.TAG_COMPOUND)) { - loadedStack = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag(TAG_KEY_CURRENT_STICK)); - GT_AssemblyLineUtils.LookupResult lookupResult = GT_AssemblyLineUtils - .findAssemblyLineRecipeFromDataStick(loadedStack, false); - switch (lookupResult.getType()) { - case VALID_STACK_AND_VALID_HASH: - recipe = lookupResult.getRecipe(); - stuck = aNBT.getBoolean("stuck"); - inputVoltage = aNBT.getLong("inputV"); - inputEUt = aNBT.getLong("inputEU"); - baseEUt = aNBT.getLong("baseEU"); - currentRecipeParallel = aNBT.getInteger("currentParallel"); - if (inputVoltage <= 0 || inputEUt <= 0 || baseEUt >= 0) { - criticalStopMachine("ggfab.gui.advassline.shutdown.load.energy"); - loadedStack = null; - recipe = null; - } - break; - case VALID_STACK_AND_VALID_RECIPE: - // recipe is there, but it has been changed. to prevent issues, abort the current recipe - // TODO finish the last recipe instead of aborting - default: - // recipe is gone. to prevent issues, abort the current recipe - criticalStopMachine("ggfab.gui.advassline.shutdown.load.recipe"); - loadedStack = null; - break; - } - } - if (loadedStack == null || recipe == null) clearCurrentRecipe(); - else setCurrentRecipe(loadedStack, recipe); - } - - /** - * roughly the same as {@link #criticalStopMachine()}, but does not attempt to send a halting sound if world is not - * loaded. also supports setting a stop reason - */ - private void criticalStopMachine(String reason) { - int oMaxProgresstime = mMaxProgresstime; - stopMachine(); - // don't do these at all if the machine wasn't working before anyway - if (oMaxProgresstime > 0) { - if (getBaseMetaTileEntity().getWorld() != null) sendSound(INTERRUPT_SOUND_INDEX); - getBaseMetaTileEntity().setShutdownStatus(true); - lastStopReason = reason; - } - } - - @Override - public IStructureDefinition getStructureDefinition() { - return STRUCTURE_DEFINITION; - } - - @Override - public void clearHatches() { - super.clearHatches(); - mExoticEnergyHatches.clear(); - mDataAccessHatches.clear(); - } - - @Override - public boolean checkMachine(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { - if (checkMachine() && (mEnergyHatches.size() > 0 || mExoticEnergyHatches.size() > 0)) { - long oV = inputVoltage, oEut = inputEUt; - inputVoltage = Integer.MAX_VALUE; - inputEUt = 0; - mEnergyHatches.forEach(this::recordEnergySupplier); - mExoticEnergyHatches.forEach(this::recordEnergySupplier); - if (mMaxProgresstime > 0 && (oV != inputVoltage || oEut != inputEUt)) { - criticalStopMachine("ggfab.gui.advassline.shutdown.structure"); - } - return true; - } else { - inputVoltage = V[0]; - return false; - } - } - - private void recordEnergySupplier(GT_MetaTileEntity_Hatch hatch) { - if (!hatch.isValid()) return; - inputEUt += hatch.maxEUInput() * hatch.maxWorkingAmperesIn(); - inputVoltage = Math.min(inputVoltage, hatch.maxEUInput()); - if (inputEUt < 0) inputEUt = Long.MAX_VALUE; - } - - @Override - protected void startRecipeProcessing() { - if (!processing) { - super.startRecipeProcessing(); - curBatchItemsFromME = getStoredInputsFromME(); - curBatchFluidsFromME = getStoredFluidsFromME(); - processing = true; - } - } - - @Override - protected void endRecipeProcessing() { - if (!processing) return; - super.endRecipeProcessing(); - processing = false; - } - - @Override - public void onValueUpdate(byte aValue) { - boolean oStuck = stuck; - stuck = (aValue & 1) == 1; - if (oStuck != stuck) getBaseMetaTileEntity().issueTextureUpdate(); - } - - @Override - public byte getUpdateData() { - return (byte) (stuck ? 1 : 0); - } - - @Override - protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { - super.drawTexts(screenElements, inventorySlot); - /* - * SliceStatusWidget[] arr = - * Arrays.stream(slices).map(SliceStatusWidget::new).toArray(SliceStatusWidget[]::new); - * screenElements.widgets(arr); screenElements.widget(new FakeSyncWidget.IntegerSyncer(() -> currentInputLength, - * l -> { currentInputLength = l; for (SliceStatusWidget w : arr) { w.updateText(); } })); - */ - screenElements.widget( - new TextWidget(Text.localised("ggfab.gui.advassline.shutdown")).setEnabled(this::hasAbnormalStopReason)); - screenElements.widget( - new TextWidget().setTextSupplier(() -> Text.localised(lastStopReason)) - .attachSyncer( - new FakeSyncWidget.StringSyncer(() -> lastStopReason, r -> this.lastStopReason = r), - screenElements) - .setEnabled(this::hasAbnormalStopReason)); - screenElements.widget( - new ClickableTextWidget( - Text.localised("ggfab.gui.advassline.shutdown_clear") - .alignment(Alignment.CenterLeft)).setMarginInLines(0) - .setOnClick((d, w) -> lastStopReason = "") - .setSize(36, 20) - .setEnabled(this::hasAbnormalStopReason)); - } - - private Boolean hasAbnormalStopReason(Widget w) { - return !StringUtils.isNullOrEmpty(lastStopReason); - } - - @Override - public RecipeMap getRecipeMap() { - return RecipeMaps.assemblylineVisualRecipes; - } - - @Override - public boolean onRunningTick(ItemStack aStack) { - if (currentRecipe == null) { - criticalStopMachine("ggfab.gui.advassline.shutdown.recipe_null"); - return false; - } - for (GT_MetaTileEntity_Hatch_DataAccess hatch_dataAccess : mDataAccessHatches) { - hatch_dataAccess.setActive(true); - } - - if (mInputBusses.size() < currentInputLength) { - criticalStopMachine("ggfab.gui.advassline.shutdown.input_busses"); - return false; - } - boolean oStuck = stuck; - stuck = false; - - for (int i = slices.length - 1; i >= 0; i--) { - slices[i].tick(); - } - - if (oStuck != stuck) - // send the status as it has changed - getBaseMetaTileEntity().issueClientUpdate(); - - if (getBaseMetaTileEntity().isAllowedToWork() && slices[0].progress < 0) { - startRecipeProcessing(); - if (hasAllItems(currentRecipe, this.currentRecipeParallel) - && hasAllFluids(currentRecipe, this.currentRecipeParallel) - && slices[0].start()) { - drainAllFluids(currentRecipe, this.currentRecipeParallel); - mProgresstime = 0; - } - } - - boolean foundWorking = false; - int working = 0; - for (Slice slice : slices) { - if (slice.progress >= 0) { - if (!foundWorking) { - foundWorking = true; - mProgresstime = (slice.id + 1) * (mMaxProgresstime / currentInputLength) - slice.progress; - } - } - if (slice.progress > 0) working++; - } - lEUt = working * baseEUt; - - if (lEUt > 0) { - // overflow again :( - lEUt = Long.MIN_VALUE; - for (int i = 0; i < working; i++) { - if (!drainEnergyInput(-baseEUt)) { - criticalStopMachine("ggfab.gui.advassline.shutdown.energy"); - return false; - } - } - } else { - if (!super.onRunningTick(aStack)) return false; - } - - endRecipeProcessing(); - return true; - } - - private ItemStack getInputBusContent(int index) { - if (index < 0 || index >= mInputBusses.size()) return null; - GT_MetaTileEntity_Hatch_InputBus inputBus = mInputBusses.get(index); - if (!inputBus.isValid()) return null; - if (inputBus instanceof GT_MetaTileEntity_Hatch_InputBus_ME meBus) { - ItemStack item = meBus.getShadowItemStack(0); - if (item == null) return null; - GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(item); - if (!curBatchItemsFromME.containsKey(id)) return null; - return curBatchItemsFromME.get(id); - } - return inputBus.getStackInSlot(0); - - } - - private FluidStack getInputHatchContent(int index) { - if (index < 0 || index >= mInputHatches.size()) return null; - GT_MetaTileEntity_Hatch_Input inputHatch = mInputHatches.get(index); - if (!inputHatch.isValid()) return null; - if (inputHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) { - FluidStack fluid = meHatch.getShadowFluidStack(0); - if (fluid == null) return null; - if (!curBatchFluidsFromME.containsKey(fluid.getFluid())) return null; - return curBatchFluidsFromME.get(fluid.getFluid()); - } - if (inputHatch instanceof GT_MetaTileEntity_Hatch_MultiInput multiHatch) { - return multiHatch.getFluid(0); - } - return inputHatch.getFillableStack(); - } - - private GT_Recipe.GT_Recipe_AssemblyLine findRecipe(ItemStack tDataStick) { - GT_AssemblyLineUtils.LookupResult tLookupResult = GT_AssemblyLineUtils - .findAssemblyLineRecipeFromDataStick(tDataStick, false); - - if (tLookupResult.getType() == GT_AssemblyLineUtils.LookupResultType.INVALID_STICK) return null; - - GT_Recipe.GT_Recipe_AssemblyLine tRecipe = tLookupResult.getRecipe(); - // Check if the recipe on the data stick is the current recipe for it's given output, if not we update it - // and continue to next. - if (tLookupResult.getType() != GT_AssemblyLineUtils.LookupResultType.VALID_STACK_AND_VALID_HASH) { - tRecipe = GT_AssemblyLineUtils.processDataStick(tDataStick); - if (tRecipe == null) { - return null; - } - } - - // So here we check against the recipe found on the data stick. - // If we run into missing buses/hatches or bad inputs, we go to the next data stick. - // This check only happens if we have a valid up-to-date data stick. - - // Check item Inputs align. For this we do not need to consider batch mode parallels yet, this will be done - // later on during recipe start. - if (!hasAllItems(tRecipe, 1)) return null; - - // Check Fluid Inputs align. Again, do not consider parallels - if (!hasAllFluids(tRecipe, 1)) return null; - - if (GT_Values.D1) { - GT_FML_LOGGER.info("Check overclock"); - } - if (GT_Values.D1) { - GT_FML_LOGGER.info("Find available recipe"); - } - return tRecipe; - } - - private boolean hasAllItems(GT_Recipe.GT_Recipe_AssemblyLine tRecipe, int parallel) { - int aItemCount = tRecipe.mInputs.length; - if (mInputBusses.size() < aItemCount) return false; - int[] itemConsumptions = GT_Recipe.GT_Recipe_AssemblyLine.getItemConsumptionAmountArray(mInputBusses, tRecipe); - if (itemConsumptions == null || itemConsumptions.length == 0) { - return false; - } - int maxParallel = (int) GT_Recipe.GT_Recipe_AssemblyLine - .maxParallelCalculatedByInputItems(mInputBusses, parallel, itemConsumptions, curBatchItemsFromME); - return maxParallel >= parallel; - } - - private boolean hasAllFluids(GT_Recipe.GT_Recipe_AssemblyLine tRecipe, int parallel) { - int aFluidCount = tRecipe.mFluidInputs.length; - if (mInputHatches.size() < aFluidCount) return false; - int maxParallel = (int) GT_Recipe.GT_Recipe_AssemblyLine - .maxParallelCalculatedByInputFluids(mInputHatches, parallel, tRecipe.mFluidInputs, curBatchFluidsFromME); - return maxParallel >= parallel; - } - - /** - * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb - */ - private boolean isCorrectDataItem(ItemStack aStack, int state) { - if ((state & 1) != 0 && ItemList.Circuit_Integrated.isStackEqual(aStack, true, true)) return true; - if ((state & 2) != 0 && ItemList.Tool_DataStick.isStackEqual(aStack, false, true)) return true; - return (state & 4) != 0 && ItemList.Tool_DataOrb.isStackEqual(aStack, false, true); - } - - /** - * @param state using bitmask, 1 for IntegratedCircuit, 2 for DataStick, 4 for DataOrb - */ - public ArrayList getDataItems(int state) { - ArrayList rList = new ArrayList<>(); - if (GT_Utility.isStackValid(mInventory[1]) && isCorrectDataItem(mInventory[1], state)) { - rList.add(mInventory[1]); - } - for (GT_MetaTileEntity_Hatch_DataAccess tHatch : mDataAccessHatches) { - if (tHatch.isValid()) { - for (int i = 0; i < tHatch.getBaseMetaTileEntity() - .getSizeInventory(); i++) { - if (tHatch.getBaseMetaTileEntity() - .getStackInSlot(i) != null && isCorrectDataItem( - tHatch.getBaseMetaTileEntity() - .getStackInSlot(i), - state)) - rList.add( - tHatch.getBaseMetaTileEntity() - .getStackInSlot(i)); - } - } - } - return rList; - } - - // this is only called when all slices have finished their work - // and the first slice cannot find a input/fluid cannot be found - // so we are safe to assume the old recipe no longer works - @Override - @NotNull - public CheckRecipeResult checkProcessing() { - if (GT_Values.D1) { - GT_FML_LOGGER.info("Start Adv ALine recipe check"); - } - clearCurrentRecipe(); - CheckRecipeResult result = CheckRecipeResultRegistry.NO_DATA_STICKS; - ArrayList tDataStickList = getDataItems(2); - if (tDataStickList.isEmpty()) { - return result; - } - if (GT_Values.D1) { - GT_FML_LOGGER.info("Stick accepted, " + tDataStickList.size() + " Data Sticks found"); - } - - GT_Recipe.GT_Recipe_AssemblyLine recipe = null; - - for (ItemStack stack : tDataStickList) { - recipe = findRecipe(stack); - if (recipe == null) { - result = CheckRecipeResultRegistry.NO_RECIPE; - continue; - } - if (recipe.mEUt > inputVoltage) { - result = CheckRecipeResultRegistry.insufficientPower(recipe.mEUt); - continue; - } - - setCurrentRecipe(stack, recipe); - // first overclock normally - // we use the new oc calculator instead - // calculateOverclockedNessMulti from super class has a mysterious 5% cable loss thing at the moment - // of writing - GT_OverclockCalculator ocCalc = new GT_OverclockCalculator().setRecipeEUt(currentRecipe.mEUt) - .setDuration(Math.max(recipe.mDuration / recipe.mInputs.length, 1)) - .setEUt(inputVoltage) - .calculate(); - // since we already checked mEUt <= inputVoltage, no need to check if recipe is too OP - lEUt = ocCalc.getConsumption(); - mMaxProgresstime = ocCalc.getDuration(); - // then laser overclock if needed - if (!mExoticEnergyHatches.isEmpty()) { - OverclockHelper.OverclockOutput laserOverclock = OverclockHelper.laserOverclock( - lEUt, - mMaxProgresstime, - inputEUt / recipe.mInputs.length, - ConfigurationHandler.INSTANCE.getLaserOCPenaltyFactor()); - if (laserOverclock != null) { - lEUt = laserOverclock.getEUt(); - mMaxProgresstime = laserOverclock.getDuration(); - } - } - // Save this for batch mode parallel calculations - int timePerSlice = mMaxProgresstime; - // correct the recipe duration - mMaxProgresstime *= recipe.mInputs.length; - - // Finally apply batch mode parallels if possible. - // For this we need to verify the first item slot and all fluids slots have enough resources - // to execute parallels. - // Note that we skip this entirely if the time for each slice is more than - // BATCH_MODE_DESIRED_TICKS_PER_SLICE ticks, since in this case the amount of batches will always be 1 - if (super.isBatchModeEnabled() && timePerSlice < BATCH_MODE_DESIRED_TICKS_PER_SLICE) { - // Calculate parallel based on time per slice, and the amount of fluid in the first fluid slot. - // We use fluid, since this way players can limit parallel by controlling how much fluid - // ends up in each AAL. This way, batch mode will not slow down setups where multiple AAL - // are connected to the same set of input items. Note that this will still suffer from the same - // issue if using stocking hatch, but in this case increasing pattern size can help. - - // Note that every assline recipe has a fluid ingredient. - FluidStack firstFluidSlot = getInputHatchContent(0); - if (firstFluidSlot == null) { - result = CheckRecipeResultRegistry.INTERNAL_ERROR; - break; - } - int recipesAvailable = Math.floorDiv(firstFluidSlot.amount, recipe.mFluidInputs[0].amount); - // Divide recipes available by the amount of slices in the recipe. This will prevent the AAL from - // batching instead of parallelizing, which would make it effectively slower. - recipesAvailable = Math.floorDiv(recipesAvailable, recipe.mInputs.length); - // Sanity check to avoid this being zero when there is only one recipe available. - recipesAvailable = Math.max(recipesAvailable, 1); - int desiredBatches = Math.floorDiv(BATCH_MODE_DESIRED_TICKS_PER_SLICE, timePerSlice); - // Limit the amount of parallel to both the amount of recipes available and the maximum number - // of batches we want to run. The latter is done to prevent batch mode from ever going above - // BATCH_MODE_DESIRED_TICKS_PER_SLICE ticks per slice (see also where it is defined above). - int parallel = Math.min(recipesAvailable, desiredBatches); - if (hasAllFluids(recipe, parallel) && hasAllItems(recipe, parallel)) { - this.currentRecipeParallel = parallel; - // Update recipe duration with final batch mode multiplier - mMaxProgresstime *= this.currentRecipeParallel; - } - } - result = CheckRecipeResultRegistry.SUCCESSFUL; - break; - } - if (!result.wasSuccessful()) { - clearCurrentRecipe(); - return result; - } - if (recipe == null || !slices[0].start() || currentRecipeParallel <= 0) { - clearCurrentRecipe(); - // something very very wrong... - return CheckRecipeResultRegistry.INTERNAL_ERROR; - } - - if (GT_Values.D1) { - GT_FML_LOGGER.info("All checked start consuming inputs"); - } - drainAllFluids(recipe, this.currentRecipeParallel); - - // Apply parallel - mOutputItems = new ItemStack[] { recipe.mOutput.copy() }; - mOutputItems[0].stackSize *= this.currentRecipeParallel; - - if (this.lEUt > 0) { - this.lEUt = -this.lEUt; - } - baseEUt = lEUt; - this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - - if (GT_Values.D1) { - GT_FML_LOGGER.info("Recipe successful"); - } - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Override - public boolean supportsVoidProtection() { - return true; - } - - @Override - public Set getAllowedVoidingModes() { - return VoidingMode.ITEM_ONLY_MODES; - } - - @Override - public boolean isCorrectMachinePart(ItemStack aStack) { - return true; - } - - @Override - public int getMaxEfficiency(ItemStack aStack) { - return 10000; - } - - @Override - public int getDamageToComponent(ItemStack aStack) { - return 0; - } - - @Override - public boolean explodesOnComponentBreak(ItemStack aStack) { - return false; - } - - @Override - protected boolean supportsSlotAutomation(int aSlot) { - return aSlot == getControllerSlotIndex(); - } - - @Override - public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, - IWailaConfigHandler config) { - super.getWailaBody(itemStack, currentTip, accessor, config); - NBTTagCompound tag = accessor.getNBTData(); - String machineProgressString = GT_Waila.getMachineProgressString( - tag.getBoolean("isActive"), - tag.getInteger("maxProgress"), - tag.getInteger("progress")); - currentTip.remove(machineProgressString); - - int duration = tag.getInteger("mDuration"); - if (tag.hasKey(TAG_KEY_PROGRESS_TIMES, Constants.NBT.TAG_LIST)) { - NBTTagList tl = tag.getTagList(TAG_KEY_PROGRESS_TIMES, Constants.NBT.TAG_INT); - @SuppressWarnings("unchecked") - List list = tl.tagList; - for (int i = 0, listSize = list.size(); i < listSize; i++) { - NBTTagInt t = list.get(i); - int progress = t.func_150287_d(); - if (progress == 0) { - currentTip.add(I18n.format("ggfab.waila.advassline.slice.stuck", i + 1)); - } else if (progress < 0) { - currentTip.add(I18n.format("ggfab.waila.advassline.slice.idle", i + 1)); - } else if (duration > 40) { - currentTip.add( - I18n.format("ggfab.waila.advassline.slice", i + 1, (duration - progress) / 20, duration / 20)); - } else { - currentTip - .add(I18n.format("ggfab.waila.advassline.slice.small", i + 1, duration - progress, duration)); - } - } - } - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, - int z) { - super.getWailaNBTData(player, tile, tag, world, x, y, z); - if (currentRecipe == null || !getBaseMetaTileEntity().isActive()) return; - NBTTagList l = new NBTTagList(); - for (int i = 0; i < currentInputLength; i++) { - l.appendTag(new NBTTagInt(slices[i].progress)); - } - tag.setTag(TAG_KEY_PROGRESS_TIMES, l); - tag.setInteger("mDuration", mMaxProgresstime / currentInputLength); - } - - /** - * Caller is responsible to check and ensure the hatches are there and has all the fluid needed. You will usually - * want to ensure hasAllFluid was called right before calling this, otherwise very bad things can happen. - */ - private void drainAllFluids(GT_Recipe.GT_Recipe_AssemblyLine recipe, int parallel) { - GT_Recipe.GT_Recipe_AssemblyLine - .consumeInputFluids(mInputHatches, parallel, recipe.mFluidInputs, curBatchFluidsFromME); - for (GT_MetaTileEntity_Hatch_Input tHatch : filterValidMTEs(mInputHatches)) tHatch.updateSlots(); - } - - @Override - public void stopMachine(@NotNull ShutDownReason reason) { - clearCurrentRecipe(); - super.stopMachine(reason); - } - - @Override - public boolean supportsBatchMode() { - return true; - } - - @Override - public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, - float aX, float aY, float aZ) { - if (aPlayer.isSneaking()) { - batchMode = !batchMode; - if (batchMode) { - GT_Utility.sendChatToPlayer(aPlayer, "Batch mode enabled"); - } else { - GT_Utility.sendChatToPlayer(aPlayer, "Batch mode disabled"); - } - } - return true; - } - - private class SliceStatusWidget extends TextWidget implements ISyncedWidget { - - private final Slice slice; - private int lastProgress = -2; - private Text text; - - private SliceStatusWidget(Slice slice) { - this.slice = slice; - updateText(); - setEnabled(w -> slice.progress == 0 && currentInputLength > slice.id); - } - - @Override - public Text getText() { - return text; - } - - @Override - public void readOnClient(int id, PacketBuffer buf) { - if (id == 0) { - slice.progress = buf.readVarIntFromBuffer(); - updateText(); - checkNeedsRebuild(); - } - } - - public void updateText() { - String type = "unknown"; - if (slice.progress == 0) type = "stuck"; - else if (slice.progress < 0) type = "idle"; - text = Text.localised("ggfab.gui.advassline.slice." + type, slice.id); - } - - @Override - public void readOnServer(int id, PacketBuffer buf) {} - - @Override - public void detectAndSendChanges(boolean init) { - if (slice.progress != lastProgress) { - // suppress small normal progress update - if (slice.progress > 0 && lastProgress > 0 && lastProgress - slice.progress < 10) return; - lastProgress = slice.progress; - syncToClient(0, b -> b.writeVarIntToBuffer(slice.progress)); - } - } - - @Override - public void markForUpdate() {} - - @Override - public void unMarkForUpdate() {} - - @Override - public boolean isMarkedForUpdate() { - return false; - } - } - - private class Slice { - - private final int id; - private int progress = -1; - - public Slice(int id) { - this.id = id; - } - - public void reset() { - progress = -1; - } - - public void tick() { - if (progress < 0) return; - if (progress == 0 || --progress == 0) { - // id==0 will be end of chain if 1 input, so we need a +1 here - if (id + 1 >= currentInputLength) { - // use previously calculated parallel output - ItemStack output = mOutputItems[0]; - if (addOutput(output) || !voidingMode.protectItem) reset(); - else stuck = true; - } else { - if (slices[id + 1].start()) reset(); - else stuck = true; - } - } - } - - public boolean start() { - if (progress >= 0) return false; - startRecipeProcessing(); - ItemStack stack = getInputBusContent(id); - if (stack == null) return false; - int size = GT_Recipe.GT_Recipe_AssemblyLine - .getMatchedIngredientAmount(stack, currentRecipe.mInputs[id], currentRecipe.mOreDictAlt[id]); - if (size < 0 || stack.stackSize < size * currentRecipeParallel) return false; - progress = mMaxProgresstime / currentInputLength; - stack.stackSize -= size * currentRecipeParallel; - mInputBusses.get(id) - .updateSlots(); - return true; - } - - @Override - public String toString() { - return "Slice{" + "id=" + id + ", progress=" + progress + '}'; - } - } - - private enum DataHatchElement implements IHatchElement { - - DataAccess; - - @Override - public List> mteClasses() { - return Collections.singletonList(GT_MetaTileEntity_Hatch_DataAccess.class); - } - - @Override - public IGT_HatchAdder adder() { - return MTE_AdvAssLine::addDataAccessToMachineList; - } - - @Override - public long count(MTE_AdvAssLine t) { - return t.mDataAccessHatches.size(); - } - } -} diff --git a/src/main/java/net/glease/ggfab/mte/MTE_LinkedInputBus.java b/src/main/java/net/glease/ggfab/mte/MTE_LinkedInputBus.java deleted file mode 100644 index 7eb625f774..0000000000 --- a/src/main/java/net/glease/ggfab/mte/MTE_LinkedInputBus.java +++ /dev/null @@ -1,684 +0,0 @@ -package net.glease.ggfab.mte; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.UUID; - -import net.glease.ggfab.GGConstants; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTBase; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.StatCollector; -import net.minecraft.world.WorldSavedData; -import net.minecraftforge.common.util.Constants; -import net.minecraftforge.common.util.ForgeDirection; - -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; -import com.gtnewhorizons.modularui.api.math.Alignment; -import com.gtnewhorizons.modularui.api.math.Color; -import com.gtnewhorizons.modularui.api.screen.ModularWindow; -import com.gtnewhorizons.modularui.api.screen.UIBuildContext; -import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; -import com.gtnewhorizons.modularui.common.widget.CycleButtonWidget; -import com.gtnewhorizons.modularui.common.widget.SlotGroup; -import com.gtnewhorizons.modularui.common.widget.TextWidget; -import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; - -import gregtech.api.enums.ItemList; -import gregtech.api.gui.modularui.GT_UITextures; -import gregtech.api.interfaces.IDataCopyable; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.MetaTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_InputBus; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; -import gregtech.api.recipe.check.CheckRecipeResult; -import gregtech.api.recipe.check.CheckRecipeResultRegistry; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.util.GT_Utility; -import gregtech.common.tileentities.machines.IRecipeProcessingAwareHatch; - -public class MTE_LinkedInputBus extends GT_MetaTileEntity_Hatch_InputBus - implements IRecipeProcessingAwareHatch, IDataCopyable { - - public static final int SIZE_INVENTORY = 18; - public static final String COPIED_DATA_IDENTIFIER = "linkedinputbus"; - private SharedInventory mRealInventory; - private final ItemStackHandlerProxy handler = new ItemStackHandlerProxy(); - private String mChannel; - private boolean mPrivate; - private State mState; - private WorldSave save; - - public MTE_LinkedInputBus(int id, String name, String nameRegional, int tier) { - super( - id, - name, - nameRegional, - tier, - 1, - new String[] { SIZE_INVENTORY + " slot input bus linked together wirelessly", - "Link does not cross world boundary", "Left/right click with data stick to copy/paste configuration", - GGConstants.GGMARK_TOOLTIP, }); - } - - public MTE_LinkedInputBus(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - super(aName, aTier, 1, aDescription, aTextures); - } - - @Override - public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { - return new MTE_LinkedInputBus(mName, mTier, mDescriptionArray, mTextures); - } - - @Override - public int getCircuitSlot() { - return 0; - } - - @Override - public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { - builder.widget( - new TextFieldWidget().setSynced(true, true) - .setGetter(() -> mChannel == null ? "" : mChannel) - .setSetter(this::setChannel) - .setTextColor(Color.WHITE.dark(1)) - .setTextAlignment(Alignment.CenterLeft) - .setBackground(GT_UITextures.BACKGROUND_TEXT_FIELD) - .setGTTooltip(() -> mTooltipCache.getData("ggfab.tooltip.linked_input_bus.change_freq_warn")) - .setSize(60, 18) - .setPos(48, 3)) - .widget( - new CycleButtonWidget().setToggle(this::isPrivate, this::setPrivate) - .setTextureGetter( - i -> i == 1 ? GT_UITextures.OVERLAY_BUTTON_CHECKMARK : GT_UITextures.OVERLAY_BUTTON_CROSS) - .setVariableBackground(GT_UITextures.BUTTON_STANDARD_TOGGLE) - .setSynced(true, true) - .setGTTooltip(() -> mTooltipCache.getData("ggfab.tooltip.linked_input_bus.private")) - .setSize(18, 18) - .setPos(150, 3)) - .widget( - SlotGroup.ofItemHandler(handler, 9) - .startFromSlot(0) - .endAtSlot(SIZE_INVENTORY - 1) - .background(getGUITextureSet().getItemSlot()) - .slotCreator(i -> new BaseSlot(handler, i, false) { - - @Override - public ItemStack getStack() { - return isEnabled() ? super.getStack() : null; - } - - @Override - public boolean isEnabled() { - return mChannel != null; - } - }) - .build() - .setPos(7, 24)) - .widget( - new TextWidget(new Text("Private")).setPos(110, 3) - .setSize(43, 20)) - .widget( - new TextWidget(new Text("Channel")).setPos(5, 3) - .setSize(43, 20)); - } - - @Override - public int getCircuitSlotX() { - return 152; - } - - @Override - public ItemStack getStackInSlot(int aIndex) { - if (aIndex == getCircuitSlot()) return super.getStackInSlot(aIndex); - if (mState != State.Blocked && mChannel != null && mRealInventory != null) { - if (aIndex > 0 && aIndex <= SIZE_INVENTORY) return mRealInventory.stacks[aIndex - 1]; - } - return null; - } - - @Override - public void setInventorySlotContents(int aIndex, ItemStack aStack) { - if (aIndex == getCircuitSlot()) { - mInventory[0] = GT_Utility.copyAmount(0, aStack); - markDirty(); - } else if (mState != State.Blocked && mChannel != null && mRealInventory != null) { - if (aIndex > 0 && aIndex <= SIZE_INVENTORY) { - mRealInventory.stacks[aIndex - 1] = aStack; - getWorldSave().markDirty(); - } - } - } - - @Override - public ITexture[] getTexturesActive(ITexture aBaseTexture) { - return super.getTexturesActive(aBaseTexture); - } - - @Override - public ITexture[] getTexturesInactive(ITexture aBaseTexture) { - return super.getTexturesInactive(aBaseTexture); - } - - @Override - public boolean canInsertItem(int aIndex, ItemStack aStack, int ordinalSide) { - return isValidSlot(aIndex) && aStack != null - && mChannel != null - && mRealInventory != null - && aIndex > getCircuitSlot() - && aIndex < SIZE_INVENTORY + 1 - && (mRealInventory.stacks[aIndex - 1] == null - || GT_Utility.areStacksEqual(aStack, mRealInventory.stacks[aIndex - 1])) - && allowPutStack(getBaseMetaTileEntity(), aIndex, ForgeDirection.getOrientation(ordinalSide), aStack); - } - - @Override - public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, - ItemStack aStack) { - return side == getBaseMetaTileEntity().getFrontFacing() && aIndex != getCircuitSlot() - && (mRecipeMap == null || disableFilter || mRecipeMap.containsInput(aStack)) - && (mRealInventory.disableLimited || limitedAllowPutStack(aIndex, aStack)); - } - - @Override - protected boolean limitedAllowPutStack(int aIndex, ItemStack aStack) { - for (int i = 0; i < SIZE_INVENTORY; i++) - if (GT_Utility.areStacksEqual(GT_OreDictUnificator.get_nocopy(aStack), mRealInventory.stacks[i])) - return i == aIndex - 1; - return mRealInventory.stacks[aIndex - 1] == null; - } - - @Override - public boolean canExtractItem(int aIndex, ItemStack aStack, int aSide) { - return false; - } - - @Override - public int getSizeInventory() { - if (mState != State.Blocked && mChannel != null && mRealInventory != null) return SIZE_INVENTORY + 1; - return 1; - } - - @Override - public void startRecipeProcessing() { - if (mRealInventory == null) return; - if (mRealInventory.used) { - mState = State.Blocked; - } else { - mRealInventory.used = true; - mState = State.Activated; - } - } - - @Override - public CheckRecipeResult endRecipeProcessing(GT_MetaTileEntity_MultiBlockBase controller) { - if (mState == State.Activated) { - assert mRealInventory != null; - mRealInventory.used = false; - } - mState = State.Default; - return CheckRecipeResultRegistry.SUCCESSFUL; - } - - @Override - public void updateSlots() { - if (mChannel == null || mRealInventory == null) return; - for (int i = 0; i < mRealInventory.stacks.length; i++) { - if (mRealInventory.stacks[i] != null - && (mRealInventory.stacks[i].getItem() == null || mRealInventory.stacks[i].stackSize <= 0)) - mRealInventory.stacks[i] = null; - } - if (!mRealInventory.disableSort) fillStacksIntoFirstSlots(); - markDirty(); - getWorldSave().markDirty(); - } - - @Override - protected void fillStacksIntoFirstSlots() { - // sanity check - if (mRealInventory == null) return; - final int L = SIZE_INVENTORY; - HashMap slots = new HashMap<>(L); - HashMap stacks = new HashMap<>(L); - List order = new ArrayList<>(L); - List validSlots = new ArrayList<>(L); - for (int i = 0; i < L; i++) { - validSlots.add(i); - ItemStack s = mRealInventory.stacks[i]; - if (s == null) continue; - GT_Utility.ItemId sID = GT_Utility.ItemId.createNoCopy(s); - slots.merge(sID, s.stackSize, Integer::sum); - if (!stacks.containsKey(sID)) stacks.put(sID, s); - order.add(sID); - mRealInventory.stacks[i] = null; - } - int slotindex = 0; - for (GT_Utility.ItemId sID : order) { - int toSet = slots.get(sID); - if (toSet == 0) continue; - int slot = validSlots.get(slotindex); - slotindex++; - mRealInventory.stacks[slot] = stacks.get(sID) - .copy(); - toSet = Math.min(toSet, mRealInventory.stacks[slot].getMaxStackSize()); - mRealInventory.stacks[slot].stackSize = toSet; - slots.merge(sID, toSet, (a, b) -> a - b); - } - } - - private void dropItems(ItemStack[] aStacks) { - for (ItemStack stack : aStacks) { - if (!GT_Utility.isStackValid(stack)) continue; - EntityItem ei = new EntityItem( - getBaseMetaTileEntity().getWorld(), - getBaseMetaTileEntity().getOffsetX(getBaseMetaTileEntity().getFrontFacing(), 1) + 0.5, - getBaseMetaTileEntity().getOffsetY(getBaseMetaTileEntity().getFrontFacing(), 1) + 0.5, - getBaseMetaTileEntity().getOffsetZ(getBaseMetaTileEntity().getFrontFacing(), 1) + 0.5, - stack); - ei.motionX = ei.motionY = ei.motionZ = 0; - getBaseMetaTileEntity().getWorld() - .spawnEntityInWorld(ei); - } - } - - @Override - public boolean shouldDropItemAt(int index) { - // NOTE by this time onBlockDestroyed has already been called, i.e. so ref has already been decremented. - // so we really should check for ref <= 0 instead of ref <= 1 - return mRealInventory != null && mRealInventory.ref <= 0; - } - - @Override - public void onBlockDestroyed() { - super.onBlockDestroyed(); - if (mRealInventory != null) { - if (--mRealInventory.ref <= 0) getWorldSave().remove(mChannel); - } - } - - @Override - public void saveNBTData(NBTTagCompound aNBT) { - super.saveNBTData(aNBT); - if (mChannel != null) aNBT.setString("channel", mChannel); - aNBT.setBoolean("private", mPrivate); - } - - @Override - public void loadNBTData(NBTTagCompound aNBT) { - super.loadNBTData(aNBT); - String channel = aNBT.getString("channel"); - if ("".equals(channel)) channel = null; - this.mChannel = channel; - mPrivate = aNBT.getBoolean("private"); - } - - public String getChannel() { - return mChannel; - } - - @Override - public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { - super.onFirstTick(aBaseMetaTileEntity); - if (mChannel != null) { - mRealInventory = getWorldSave().get(getRealChannel()); - handler.set(mRealInventory.stacks); - } - } - - @Override - public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { - if (!getBaseMetaTileEntity().getCoverBehaviorAtSideNew(side) - .isGUIClickable( - side, - getBaseMetaTileEntity().getCoverIDAtSide(side), - getBaseMetaTileEntity().getComplexCoverDataAtSide(side), - getBaseMetaTileEntity())) - return; - if (aPlayer.isSneaking()) { - if (this.mRealInventory == null) { - aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.no_channel")); - return; - } - if (mRealInventory.disableSort) { - mRealInventory.disableSort = false; - } else { - if (mRealInventory.disableLimited) { - mRealInventory.disableLimited = false; - } else { - mRealInventory.disableSort = true; - mRealInventory.disableLimited = true; - } - } - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.hatch.disableSort." + mRealInventory.disableSort) + " " - + StatCollector.translateToLocal("GT5U.hatch.disableLimited." + mRealInventory.disableLimited)); - } else { - this.disableFilter = !this.disableFilter; - GT_Utility.sendChatToPlayer( - aPlayer, - StatCollector.translateToLocal("GT5U.hatch.disableFilter." + this.disableFilter)); - } - } - - @Override - public NBTTagCompound getCopiedData(EntityPlayer player) { - if (getChannel() == null) { - return null; - } - NBTTagCompound tag = new NBTTagCompound(); - tag.setString("type", COPIED_DATA_IDENTIFIER); - tag.setString("channel", getChannel()); - tag.setTag("circuit", GT_Utility.saveItem(getStackInSlot(getCircuitSlot()))); - if (isPrivate()) { - tag.setLong( - "owner1", - getBaseMetaTileEntity().getOwnerUuid() - .getMostSignificantBits()); - tag.setLong( - "owner2", - getBaseMetaTileEntity().getOwnerUuid() - .getLeastSignificantBits()); - } - return tag; - } - - @Override - public boolean pasteCopiedData(EntityPlayer player, NBTTagCompound nbt) { - // backwards compat - if (nbt == null || (!COPIED_DATA_IDENTIFIER.equals(nbt.getString("ggfab.type")) - && !COPIED_DATA_IDENTIFIER.equals(nbt.getString("type")))) { - return false; - } - ItemStack circuit = GT_Utility.loadItem(nbt, "circuit"); - String channel = nbt.getString("channel"); - if (GT_Utility.isStackInvalid(circuit)) circuit = null; - if ("".equals(channel)) { - return false; - } else if (circuit != null && getConfigurationCircuits().stream() - .noneMatch(circuit::isItemEqual)) { - return false; - } - UUID owner = nbt.hasKey("owner1") ? new UUID(nbt.getLong("owner1"), nbt.getLong("owner2")) : null; - if (owner != null && !owner.equals(getBaseMetaTileEntity().getOwnerUuid())) { - return false; - } - setPrivate(owner != null); - setChannel(channel); - setInventorySlotContents(getCircuitSlot(), circuit); - return true; - } - - @Override - public String getCopiedDataIdentifier(EntityPlayer player) { - return COPIED_DATA_IDENTIFIER; - } - - @Override - public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, - float aX, float aY, float aZ) { - if (!(aPlayer instanceof EntityPlayerMP)) - return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - ItemStack stick = aPlayer.inventory.getCurrentItem(); - if (!ItemList.Tool_DataStick.isStackEqual(stick, false, true)) - return super.onRightclick(aBaseMetaTileEntity, aPlayer, side, aX, aY, aZ); - if (!stick.hasTagCompound() || !COPIED_DATA_IDENTIFIER.equals(stick.stackTagCompound.getString("ggfab.type"))) { - aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.no_data")); - return true; - } - ItemStack circuit = GT_Utility.loadItem(stick.stackTagCompound, "circuit"); - String channel = stick.stackTagCompound.getString("channel"); - if (GT_Utility.isStackInvalid(circuit)) circuit = null; - if ("".equals(channel)) { - aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.no_data")); - return true; - } else if (circuit != null && getConfigurationCircuits().stream() - .noneMatch(circuit::isItemEqual)) { - aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.invalid_circuit")); - return true; - } - UUID owner = stick.stackTagCompound.hasKey("owner1") - ? new UUID(stick.stackTagCompound.getLong("owner1"), stick.stackTagCompound.getLong("owner2")) - : null; - if (owner != null && !owner.equals(getBaseMetaTileEntity().getOwnerUuid())) { - aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.not_owned")); - return true; - } - setPrivate(owner != null); - setChannel(channel); - setInventorySlotContents(getCircuitSlot(), circuit); - aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.data_pasted", channel)); - return true; - } - - @Override - public void onLeftclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { - if (!(aPlayer instanceof EntityPlayerMP)) return; - ItemStack stick = aPlayer.inventory.getCurrentItem(); - if (!ItemList.Tool_DataStick.isStackEqual(stick, false, true)) return; - if (getChannel() == null) { - aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.no_channel")); - return; - } - aPlayer.addChatMessage(new ChatComponentTranslation("ggfab.info.linked_input_bus.data_copied", getChannel())); - stick.stackTagCompound = getCopiedData(aPlayer); - stick.setStackDisplayName("Linked Input Bus configuration"); - // abuse the title mechanism here. I assure you it will be fine (tm). - GT_Utility.ItemNBT.setBookTitle(stick, "Channel: " + getChannel()); - if (getBaseMetaTileEntity().getOwnerName() != null) - GT_Utility.ItemNBT.setBookAuthor(stick, getBaseMetaTileEntity().getOwnerName()); - } - - private String getRealChannel() { - if (mChannel == null) return null; - if (mPrivate) return getBaseMetaTileEntity().getOwnerUuid() + mChannel; - return new UUID(0, 0) + mChannel; - } - - public boolean isPrivate() { - return mPrivate; - } - - public void setPrivate(boolean aPrivate) { - if (aPrivate == mPrivate) return; - if (getBaseMetaTileEntity().isClientSide()) { - mPrivate = aPrivate; - return; - } - if (this.mChannel == null) { - mPrivate = aPrivate; - return; - } - getWorldSave().markDirty(); - if (--this.mRealInventory.ref <= 0) { - // last referrer, drop inventory - dropItems(mRealInventory.stacks); - getWorldSave().remove(getRealChannel()); - } - mPrivate = aPrivate; - mRealInventory = getWorldSave().get(getRealChannel()); - this.handler.set(mRealInventory.stacks); - mRealInventory.ref++; - getWorldSave().markDirty(); - } - - public void setChannel(String aChannel) { - if ("".equals(aChannel)) aChannel = null; - if (getBaseMetaTileEntity().isClientSide()) { - mChannel = aChannel; - return; - } - if (Objects.equals(this.mChannel, aChannel)) return; // noop - if (this.mChannel != null) { - if (--this.mRealInventory.ref <= 0) { - // last referrer, drop inventory - dropItems(mRealInventory.stacks); - getWorldSave().remove(getRealChannel()); - } - } - if (aChannel == null) { - this.mChannel = null; - this.mRealInventory = null; - this.handler.setFake(); - } else { - this.mChannel = aChannel; - this.mRealInventory = getWorldSave().get(getRealChannel()); - this.handler.set(mRealInventory.stacks); - mRealInventory.ref++; - } - getWorldSave().markDirty(); - } - - private WorldSave getWorldSave() { - if (save == null) { - WorldSave save = (WorldSave) getBaseMetaTileEntity().getWorld() - .loadItemData(WorldSave.class, "LinkedInputBusses"); - if (save == null) { - save = new WorldSave("LinkedInputBusses"); - getBaseMetaTileEntity().getWorld() - .setItemData(save.mapName, save); - } - this.save = save; - } - return save; - } - - private enum State { - Activated, - Blocked, - Default, - } - - private static class SharedInventory { - - private final ItemStack[] stacks; - /** - * Inventory wrapper for ModularUI - */ - private final ItemStackHandler inventoryHandler; - public boolean disableLimited = true; - public boolean disableSort; - private boolean used; - private int ref; - - public SharedInventory() { - this.stacks = new ItemStack[SIZE_INVENTORY]; - inventoryHandler = new ItemStackHandler(stacks); - } - - public SharedInventory(NBTTagCompound tag) { - this.stacks = new ItemStack[SIZE_INVENTORY]; - inventoryHandler = new ItemStackHandler(stacks); - - for (int i = 0; i < SIZE_INVENTORY; i++) { - String key = "" + i; - if (!tag.hasKey(key, Constants.NBT.TAG_COMPOUND)) continue; - stacks[i] = ItemStack.loadItemStackFromNBT(tag.getCompoundTag(key)); - } - - ref = tag.getInteger("ref"); - disableLimited = tag.getBoolean("dl"); - disableSort = tag.getBoolean("ds"); - } - - public NBTTagCompound save() { - NBTTagCompound tag = new NBTTagCompound(); - for (int i = 0; i < SIZE_INVENTORY; i++) { - ItemStack stack = stacks[i]; - if (stack == null) continue; - tag.setTag("" + i, stack.writeToNBT(new NBTTagCompound())); - } - tag.setInteger("ref", ref); - tag.setBoolean("ds", disableSort); - tag.setBoolean("dl", disableLimited); - return tag; - } - } - - public static class WorldSave extends WorldSavedData { - - private final Map data = new HashMap<>(); - - public WorldSave(String p_i2141_1_) { - super(p_i2141_1_); - } - - @Override - public void readFromNBT(NBTTagCompound tag) { - data.clear(); - @SuppressWarnings("unchecked") - Set> set = tag.tagMap.entrySet(); - for (Map.Entry e : set) { - data.put(e.getKey(), new SharedInventory((NBTTagCompound) e.getValue())); - } - } - - @Override - public void writeToNBT(NBTTagCompound tag) { - for (Map.Entry e : data.entrySet()) { - if (e.getValue().ref > 0) tag.setTag( - e.getKey(), - e.getValue() - .save()); - } - } - - public SharedInventory get(Object channel) { - return data.computeIfAbsent(channel.toString(), k -> new SharedInventory()); - } - - public void remove(Object channel) { - data.remove(channel.toString()); - markDirty(); - } - } - - private static class ItemStackHandlerProxy extends ItemStackHandler { - - private static final ItemStack[] EMPTY = new ItemStack[SIZE_INVENTORY]; - private boolean fake; - - public ItemStackHandlerProxy() { - super(EMPTY); - fake = true; - } - - public void setFake() { - set(EMPTY); - fake = true; - } - - public boolean isFake() { - return fake; - } - - public void set(ItemStack[] stacks) { - this.stacks = Arrays.asList(stacks); - fake = false; - } - - @Override - public NBTTagCompound serializeNBT() { - NBTTagCompound tag = super.serializeNBT(); - tag.setBoolean("fake", fake); - return tag; - } - - @Override - public void deserializeNBT(NBTTagCompound nbt) { - super.deserializeNBT(nbt); - fake = nbt.getBoolean("fake"); - } - } -} diff --git a/src/main/java/net/glease/ggfab/mui/ClickableTextWidget.java b/src/main/java/net/glease/ggfab/mui/ClickableTextWidget.java deleted file mode 100644 index 679f32da37..0000000000 --- a/src/main/java/net/glease/ggfab/mui/ClickableTextWidget.java +++ /dev/null @@ -1,58 +0,0 @@ -package net.glease.ggfab.mui; - -import java.util.Arrays; - -import org.jetbrains.annotations.NotNull; - -import com.gtnewhorizons.modularui.api.drawable.IDrawable; -import com.gtnewhorizons.modularui.api.drawable.Text; -import com.gtnewhorizons.modularui.api.drawable.TextRenderer; -import com.gtnewhorizons.modularui.api.math.Size; -import com.gtnewhorizons.modularui.api.widget.Widget; -import com.gtnewhorizons.modularui.common.widget.ButtonWidget; - -public class ClickableTextWidget extends ButtonWidget { - - private Text caption; - private int maxLines = 1; - private int marginInLines = 1; - - public ClickableTextWidget(Text caption) { - super(); - this.caption = caption; - super.setBackground(caption); - } - - public ClickableTextWidget setText(Text caption) { - this.caption = caption; - return this; - } - - public ClickableTextWidget setMaxLines(int maxLines) { - this.maxLines = maxLines; - return this; - } - - public ClickableTextWidget setMarginInLines(int margin) { - this.marginInLines = margin; - return this; - } - - @Override - public Widget setBackground(IDrawable... drawables) { - IDrawable[] all = Arrays.copyOf(drawables, drawables.length + 1); - all[drawables.length] = caption; - return super.setBackground(all); - } - - @Override - protected @NotNull Size determineSize(int maxWidth, int maxHeight) { - if (caption == null) return super.determineSize(maxWidth, maxHeight); - return new Size( - Math.min( - maxWidth, - TextRenderer.getFontRenderer() - .getStringWidth(caption.getFormatted())), - (maxLines + marginInLines) * TextRenderer.getFontRenderer().FONT_HEIGHT); - } -} diff --git a/src/main/java/net/glease/ggfab/util/GGUtils.java b/src/main/java/net/glease/ggfab/util/GGUtils.java deleted file mode 100644 index 20181f9ba8..0000000000 --- a/src/main/java/net/glease/ggfab/util/GGUtils.java +++ /dev/null @@ -1,78 +0,0 @@ -package net.glease.ggfab.util; - -import java.util.StringJoiner; - -import net.minecraft.util.ChunkCoordinates; -import net.minecraftforge.common.util.ForgeDirection; - -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; - -public class GGUtils { - - public static boolean isValidTile(IGregTechTileEntity tile) { - return tile != null && !tile.isDead() - && tile.getMetaTileEntity() != null - && tile.getMetaTileEntity() - .getBaseMetaTileEntity() == tile; - } - - public static boolean isValidTile(IMetaTileEntity mte) { - return mte != null && mte.getBaseMetaTileEntity() != null - && mte.getBaseMetaTileEntity() - .getMetaTileEntity() == mte - && !mte.getBaseMetaTileEntity() - .isDead(); - } - - public static ChunkCoordinates translate(ChunkCoordinates origin, ForgeDirection direction) { - return new ChunkCoordinates( - origin.posX + direction.offsetX, - origin.posY + direction.offsetY, - origin.posZ + direction.offsetZ); - } - - public static String formatTileInfo(String prefix, IMetaTileEntity mte, String delimiter, String suffix) { - if (!isValidTile(mte)) return prefix + "N/A" + suffix; - StringJoiner sj = new StringJoiner(delimiter, prefix, suffix); - IGregTechTileEntity til = mte.getBaseMetaTileEntity(); - sj.add(String.valueOf(til.getXCoord())); - sj.add(String.valueOf(til.getYCoord())); - sj.add(String.valueOf(til.getZCoord())); - return sj.toString(); - } - - public static String formatTileInfo(String prefix, IGregTechTileEntity tile, String delimiter, String suffix) { - if (!isValidTile(tile)) return prefix + "N/A" + suffix; - StringJoiner sj = new StringJoiner(delimiter, prefix, suffix); - sj.add(String.valueOf(tile.getXCoord())); - sj.add(String.valueOf(tile.getYCoord())); - sj.add(String.valueOf(tile.getZCoord())); - return sj.toString(); - } - - /** - * convert lowerCamelCase to any of snake case or normal sentence - */ - public static String processSentence(String src, Character separator, boolean capitalize, boolean firstCapitalize) { - if (src == null) throw new IllegalArgumentException(); - if (src.isEmpty()) return ""; - StringBuilder out = new StringBuilder(src.length()); - if (firstCapitalize) out.append(Character.toUpperCase(src.charAt(0))); - else out.append(src.charAt(0)); - for (int i = 1; i < src.length(); i++) { - char ch = src.charAt(i); - if (Character.isUpperCase(ch)) { - if (separator != null) out.append(separator.charValue()); - if (capitalize) { - out.append(ch); - } else { - out.append(Character.toLowerCase(ch)); - } - } else { - out.append(ch); - } - } - return out.toString(); - } -} diff --git a/src/main/java/net/glease/ggfab/util/OverclockHelper.java b/src/main/java/net/glease/ggfab/util/OverclockHelper.java deleted file mode 100644 index c47103f253..0000000000 --- a/src/main/java/net/glease/ggfab/util/OverclockHelper.java +++ /dev/null @@ -1,75 +0,0 @@ -package net.glease.ggfab.util; - -import gregtech.api.util.GT_Utility; - -public class OverclockHelper { - - public static OverclockOutput normalOverclock(long recipeEUt, int duration, long inputVoltage, boolean perfectOC) { - if (recipeEUt > inputVoltage) return null; - int recipeTier = Math.max(1, GT_Utility.getTier(recipeEUt)); // ULV no overclock - int machineTier = GT_Utility.getTier(inputVoltage); - int shift = perfectOC ? 2 : 1; - while (recipeTier < machineTier && duration > 1) { - duration >>= shift; - recipeEUt <<= 2; - recipeTier++; - } - return new OverclockOutput(recipeEUt, duration); - } - - public static OverclockOutput laserOverclock(long recipeEUt, int duration, long inputEUt, - float penaltyIncreaseFactor) { - if (recipeEUt > inputEUt) return null; - float currentPenalty = 4 + penaltyIncreaseFactor; - // 2/(n+k) overclock until energy hatch is crying - // must ensure it doesn't go to negative after overclock - while (recipeEUt * currentPenalty > 0 && recipeEUt * currentPenalty < inputEUt && duration > 1) { - duration >>= 1; - recipeEUt *= currentPenalty; - currentPenalty += penaltyIncreaseFactor; - } - return new OverclockOutput(recipeEUt, duration); - } - - public static final class OverclockOutput { - - private final long mEUt; - private final int mDuration; - - public OverclockOutput(long aEUt, int aDuration) { - this.mEUt = aEUt; - this.mDuration = aDuration; - } - - public long getEUt() { - return mEUt; - } - - public int getDuration() { - return mDuration; - } - - @Override - public String toString() { - return mEUt + "@" + mDuration + "ticks"; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof OverclockOutput)) return false; - - OverclockOutput that = (OverclockOutput) o; - - if (mEUt != that.mEUt) return false; - return mDuration == that.mDuration; - } - - @Override - public int hashCode() { - int result = (int) (mEUt ^ (mEUt >>> 32)); - result = 31 * result + mDuration; - return result; - } - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/Config.java b/src/main/java/pers/gwyog/gtneioreplugin/Config.java deleted file mode 100644 index ceced6a78e..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/Config.java +++ /dev/null @@ -1,28 +0,0 @@ -package pers.gwyog.gtneioreplugin; - -@com.gtnewhorizon.gtnhlib.config.Config( - modid = GTNEIOrePlugin.MODID, - category = "general", - filename = GTNEIOrePlugin.MODID) -public class Config { - - @com.gtnewhorizon.gtnhlib.config.Config.Comment("if true, generate both csv files.") - @com.gtnewhorizon.gtnhlib.config.Config.DefaultBoolean(false) - @com.gtnewhorizon.gtnhlib.config.Config.RequiresMcRestart - public static boolean printCsv; - - @com.gtnewhorizon.gtnhlib.config.Config.Comment("the name of the file you want for the ore sheet, it'll appear at the root of your instance.") - @com.gtnewhorizon.gtnhlib.config.Config.DefaultString("GTNH-Oresheet.csv") - @com.gtnewhorizon.gtnhlib.config.Config.RequiresMcRestart - public static String CSVName; - - @com.gtnewhorizon.gtnhlib.config.Config.Comment("the name of the file you want for the small ore sheet, it'll appear at the root of your instance.") - @com.gtnewhorizon.gtnhlib.config.Config.DefaultString("GTNH-Small-Ores-Sheet.csv") - @com.gtnewhorizon.gtnhlib.config.Config.RequiresMcRestart - public static String CSVnameSmall; - - @com.gtnewhorizon.gtnhlib.config.Config.Comment("Maximum number of lines the dimension names tooltip can have before it wraps around.") - @com.gtnewhorizon.gtnhlib.config.Config.DefaultInt(11) - @com.gtnewhorizon.gtnhlib.config.Config.RequiresMcRestart - public static int maxTooltipLines; -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/GTNEIOrePlugin.java b/src/main/java/pers/gwyog/gtneioreplugin/GTNEIOrePlugin.java deleted file mode 100644 index 7ae7b0bc1c..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/GTNEIOrePlugin.java +++ /dev/null @@ -1,84 +0,0 @@ -package pers.gwyog.gtneioreplugin; - -import java.io.File; - -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.item.Item; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import com.gtnewhorizon.gtnhlib.config.ConfigException; -import com.gtnewhorizon.gtnhlib.config.ConfigurationManager; - -import cpw.mods.fml.common.Mod; -import cpw.mods.fml.common.Mod.EventHandler; -import cpw.mods.fml.common.event.FMLInitializationEvent; -import cpw.mods.fml.common.event.FMLLoadCompleteEvent; -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import cpw.mods.fml.common.registry.GameRegistry; -import cpw.mods.fml.relauncher.Side; -import gregtech.GT_Version; -import pers.gwyog.gtneioreplugin.plugin.IMCForNEI; -import pers.gwyog.gtneioreplugin.plugin.block.ModBlocks; -import pers.gwyog.gtneioreplugin.util.CSVMaker; -import pers.gwyog.gtneioreplugin.util.GT5OreLayerHelper; -import pers.gwyog.gtneioreplugin.util.GT5OreSmallHelper; -import pers.gwyog.gtneioreplugin.util.GT5UndergroundFluidHelper; - -@Mod( - modid = GTNEIOrePlugin.MODID, - name = GTNEIOrePlugin.NAME, - version = GTNEIOrePlugin.VERSION, - dependencies = "required-after:gregtech;required-after:NotEnoughItems") -public class GTNEIOrePlugin { - - static { - try { - ConfigurationManager.registerConfig(Config.class); - } catch (ConfigException e) { - throw new RuntimeException(e); - } - } - - public static final String MODID = "gtneioreplugin"; - public static final String NAME = "GT NEI Ore Plugin GT:NH Mod"; - public static final String VERSION = GT_Version.VERSION; - public static final Logger LOG = LogManager.getLogger(NAME); - public static File instanceDir; - public static final CreativeTabs creativeTab = new CreativeTabs(MODID) { - - @Override - public Item getTabIconItem() { - return GameRegistry.makeItemStack("gregtech:gt.blockores", 386, 1, null) - .getItem(); - } - }; - - @Mod.Instance(MODID) - public static GTNEIOrePlugin instance; - - @EventHandler - public void preinit(FMLPreInitializationEvent event) { - instanceDir = event.getModConfigurationDirectory() - .getParentFile(); - } - - @EventHandler - public void init(FMLInitializationEvent event) { - ModBlocks.init(); - IMCForNEI.IMCSender(); - } - - @EventHandler - public void onLoadComplete(FMLLoadCompleteEvent event) { - GT5OreLayerHelper.init(); - GT5OreSmallHelper.init(); - GT5UndergroundFluidHelper.init(); - if (event.getSide() == Side.CLIENT) { - if (Config.printCsv) { - new CSVMaker().run(); - } - } - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/plugin/IMCForNEI.java b/src/main/java/pers/gwyog/gtneioreplugin/plugin/IMCForNEI.java deleted file mode 100644 index bf59fa292c..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/plugin/IMCForNEI.java +++ /dev/null @@ -1,64 +0,0 @@ -package pers.gwyog.gtneioreplugin.plugin; - -import net.minecraft.nbt.NBTTagCompound; - -import cpw.mods.fml.common.event.FMLInterModComms; -import pers.gwyog.gtneioreplugin.GTNEIOrePlugin; - -public class IMCForNEI { - - public static void IMCSender() { - // Though these 2 are already registered in NEI jar, we need to re-register - // because new DimensionDisplayItems made tabs a bit taller. - sendHandler("pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5VeinStat", "gregtech:gt.blockores:386"); - - sendHandler("pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5SmallOreStat", "gregtech:gt.blockores:85"); - - sendHandler( - "pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5UndergroundFluid", - "gregtech:gt.metaitem.01:32619"); - sendCatalyst( - "pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5UndergroundFluid", - "gregtech:gt.blockmachines:1157"); - sendCatalyst( - "pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5UndergroundFluid", - "gregtech:gt.blockmachines:141"); - sendCatalyst( - "pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5UndergroundFluid", - "gregtech:gt.blockmachines:142"); - sendCatalyst( - "pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5UndergroundFluid", - "gregtech:gt.blockmachines:149"); - sendCatalyst( - "pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5UndergroundFluid", - "gregtech:gt.blockmachines:148"); - } - - private static void sendHandler(String name, String itemStack) { - NBTTagCompound aNBT = new NBTTagCompound(); - aNBT.setString("handler", name); - aNBT.setString("modName", GTNEIOrePlugin.NAME); - aNBT.setString("modId", GTNEIOrePlugin.MODID); - aNBT.setBoolean("modRequired", true); - aNBT.setString("itemName", itemStack); - aNBT.setInteger("handlerHeight", 160); - aNBT.setInteger("handlerWidth", 166); - aNBT.setInteger("maxRecipesPerPage", 2); - aNBT.setInteger("yShift", 0); - FMLInterModComms.sendMessage("NotEnoughItems", "registerHandlerInfo", aNBT); - } - - @SuppressWarnings("SameParameterValue") - private static void sendCatalyst(String name, String itemStack, int priority) { - NBTTagCompound aNBT = new NBTTagCompound(); - aNBT.setString("handlerID", name); - aNBT.setString("itemName", itemStack); - aNBT.setInteger("priority", priority); - FMLInterModComms.sendMessage("NotEnoughItems", "registerCatalystInfo", aNBT); - } - - @SuppressWarnings("SameParameterValue") - private static void sendCatalyst(String name, String itemStack) { - sendCatalyst(name, itemStack, 0); - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/plugin/NEIPluginConfig.java b/src/main/java/pers/gwyog/gtneioreplugin/plugin/NEIPluginConfig.java deleted file mode 100644 index 6996cba220..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/plugin/NEIPluginConfig.java +++ /dev/null @@ -1,35 +0,0 @@ -package pers.gwyog.gtneioreplugin.plugin; - -import codechicken.nei.api.API; -import codechicken.nei.api.IConfigureNEI; -import pers.gwyog.gtneioreplugin.GTNEIOrePlugin; -import pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5SmallOreStat; -import pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5UndergroundFluid; -import pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5VeinStat; - -@SuppressWarnings("unused") -public class NEIPluginConfig implements IConfigureNEI { - - @Override - public String getName() { - return "GregTech Ore Plugin"; - } - - @Override - public String getVersion() { - return GTNEIOrePlugin.VERSION; - } - - @Override - public void loadConfig() { - PluginGT5VeinStat pluginVeinStat = new PluginGT5VeinStat(); - PluginGT5SmallOreStat pluginSmallOreStat = new PluginGT5SmallOreStat(); - PluginGT5UndergroundFluid pluginGT5UndergroundFluid = new PluginGT5UndergroundFluid(); - API.registerRecipeHandler(pluginVeinStat); - API.registerUsageHandler(pluginVeinStat); - API.registerRecipeHandler(pluginSmallOreStat); - API.registerUsageHandler(pluginSmallOreStat); - API.registerRecipeHandler(pluginGT5UndergroundFluid); - API.registerUsageHandler(pluginGT5UndergroundFluid); - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/plugin/PluginBase.java b/src/main/java/pers/gwyog/gtneioreplugin/plugin/PluginBase.java deleted file mode 100644 index 0db39c8e28..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/plugin/PluginBase.java +++ /dev/null @@ -1,52 +0,0 @@ -package pers.gwyog.gtneioreplugin.plugin; - -import java.awt.Rectangle; - -import net.minecraft.client.resources.I18n; -import net.minecraft.util.EnumChatFormatting; - -import codechicken.lib.gui.GuiDraw; -import codechicken.nei.recipe.TemplateRecipeHandler; - -public abstract class PluginBase extends TemplateRecipeHandler { - - @Override - public int recipiesPerPage() { - return 1; - } - - @Override - public String getRecipeName() { - return null; - } - - @Override - public String getGuiTexture() { - return "gtneioreplugin:textures/gui/nei/guiBase.png"; - } - - @Override - public void loadTransferRects() { - int stringLength = GuiDraw.getStringWidth(EnumChatFormatting.BOLD + I18n.format("gtnop.gui.nei.seeAll")); - transferRects.add( - new RecipeTransferRect(new Rectangle(getGuiWidth() - stringLength - 3, 5, stringLength, 9), getOutputId())); - } - - public abstract String getOutputId(); - - public int getGuiWidth() { - return 166; - } - - /** - * Draw the "see all recipes" transfer label - */ - protected void drawSeeAllRecipesLabel() { - GuiDraw.drawStringR( - EnumChatFormatting.BOLD + I18n.format("gtnop.gui.nei.seeAll"), - getGuiWidth() - 3, - 5, - 0x404040, - false); - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/plugin/block/BlockDimensionDisplay.java b/src/main/java/pers/gwyog/gtneioreplugin/plugin/block/BlockDimensionDisplay.java deleted file mode 100644 index 7d3b1eb5bc..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/plugin/block/BlockDimensionDisplay.java +++ /dev/null @@ -1,47 +0,0 @@ -package pers.gwyog.gtneioreplugin.plugin.block; - -import net.minecraft.block.Block; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.util.IIcon; -import net.minecraft.util.MathHelper; - -import pers.gwyog.gtneioreplugin.plugin.renderer.ItemDimensionDisplayRenderer; - -public class BlockDimensionDisplay extends Block { - - private final String dimension; - - @SuppressWarnings("unused") - public long getDimensionRocketTier() { - return this.dimensionRocketTier; - } - - private final long dimensionRocketTier; - private final IIcon[] icons = new IIcon[6]; - - public BlockDimensionDisplay(String dimension) { - super(Material.rock); - this.dimension = dimension; - this.dimensionRocketTier = ItemDimensionDisplayRenderer.getPrefix(dimension); - } - - @Override - public IIcon getIcon(int side, int meta) { - return this.icons[MathHelper.clamp_int(side, 0, 5)]; - } - - @Override - public void registerBlockIcons(IIconRegister iconRegister) { - this.icons[0] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_bottom"); - this.icons[1] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_top"); - this.icons[2] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_back"); - this.icons[3] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_front"); - this.icons[4] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_left"); - this.icons[5] = iconRegister.registerIcon("gtneioreplugin:" + dimension + "_right"); - } - - public String getDimension() { - return this.dimension; - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/plugin/block/ModBlocks.java b/src/main/java/pers/gwyog/gtneioreplugin/plugin/block/ModBlocks.java deleted file mode 100644 index db953c7112..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/plugin/block/ModBlocks.java +++ /dev/null @@ -1,27 +0,0 @@ -package pers.gwyog.gtneioreplugin.plugin.block; - -import java.util.HashMap; -import java.util.Map; - -import net.minecraft.block.Block; - -import cpw.mods.fml.common.registry.GameRegistry; -import pers.gwyog.gtneioreplugin.plugin.item.ItemDimensionDisplay; -import pers.gwyog.gtneioreplugin.util.DimensionHelper; - -public class ModBlocks { - - public static final Map blocks = new HashMap<>(); - - public static void init() { - for (String dimension : DimensionHelper.DimNameDisplayed) { - Block block = new BlockDimensionDisplay(dimension); - GameRegistry.registerBlock(block, ItemDimensionDisplay.class, "blockDimensionDisplay_" + dimension); - blocks.put(dimension, block); - } - } - - public static Block getBlock(String dimension) { - return blocks.get(dimension); - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5Base.java b/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5Base.java deleted file mode 100644 index 895a23ddb1..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5Base.java +++ /dev/null @@ -1,65 +0,0 @@ -package pers.gwyog.gtneioreplugin.plugin.gregtech5; - -import net.minecraft.client.resources.I18n; - -import codechicken.lib.gui.GuiDraw; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.util.GT_LanguageManager; -import pers.gwyog.gtneioreplugin.plugin.PluginBase; - -public abstract class PluginGT5Base extends PluginBase { - - protected static String getLocalizedNameForItem(Materials aMaterial, String aFormat) { - return String.format( - aFormat.replace("%s", "%temp") - .replace("%material", "%s"), - aMaterial.mLocalizedName) - .replace("%temp", "%s"); - } - - protected static String getLocalizedNameForItem(String aFormat, int aMaterialID) { - if (aMaterialID >= 0 && aMaterialID < 1000) { - Materials aMaterial = GregTech_API.sGeneratedMaterials[aMaterialID]; - if (aMaterial != null) { - return getLocalizedNameForItem(aMaterial, aFormat); - } - } - return aFormat; - } - - public static String getGTOreLocalizedName(short index) { - - if (!getLocalizedNameForItem(GT_LanguageManager.getTranslation(getGTOreUnlocalizedName(index)), index % 1000) - .contains("Awakened")) - return getLocalizedNameForItem( - GT_LanguageManager.getTranslation(getGTOreUnlocalizedName(index)), - index % 1000); - else return "Aw. Draconium Ore"; - } - - protected static String getGTOreUnlocalizedName(short index) { - return "gt.blockores." + index + ".name"; - } - - static void drawLine(String lineKey, String value, int x, int y) { - GuiDraw.drawString(I18n.format(lineKey) + ": " + value, x, y, 0x404040, false); - } - - protected int getMaximumMaterialIndex(short meta, boolean smallOre) { - int offset = smallOre ? 16000 : 0; - if (!getGTOreLocalizedName((short) (meta + offset + 5000)) - .equals(getGTOreUnlocalizedName((short) (meta + offset + 5000)))) return 7; - else if (!getGTOreLocalizedName((short) (meta + offset + 5000)) - .equals(getGTOreUnlocalizedName((short) (meta + offset + 5000)))) return 6; - else return 5; - } - - /** - * Draw the dimension header and the dimension names over up to 3 lines - * - */ - protected void drawDimNames() { - GuiDraw.drawString(I18n.format("gtnop.gui.nei.worldNames") + ": ", 2, 100, 0x404040, false); - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5SmallOreStat.java b/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5SmallOreStat.java deleted file mode 100644 index 7e42f912a7..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5SmallOreStat.java +++ /dev/null @@ -1,208 +0,0 @@ -package pers.gwyog.gtneioreplugin.plugin.gregtech5; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; - -import net.minecraft.client.resources.I18n; -import net.minecraft.item.ItemStack; - -import codechicken.nei.PositionedStack; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.util.GT_OreDictUnificator; -import pers.gwyog.gtneioreplugin.plugin.item.ItemDimensionDisplay; -import pers.gwyog.gtneioreplugin.util.DimensionHelper; -import pers.gwyog.gtneioreplugin.util.GT5OreSmallHelper; -import pers.gwyog.gtneioreplugin.util.GT5OreSmallHelper.OreSmallWrapper; - -public class PluginGT5SmallOreStat extends PluginGT5Base { - - private static final int SMALL_ORE_BASE_META = 16000; - - @Override - public void drawExtras(int recipe) { - OreSmallWrapper oreSmall = getSmallOre(recipe); - - drawSmallOreName(oreSmall); - drawSmallOreInfo(oreSmall); - - drawDimNames(); - - drawSeeAllRecipesLabel(); - } - - private void drawSmallOreName(OreSmallWrapper oreSmall) { - String oreName = getGTOreLocalizedName((short) (oreSmall.oreMeta + SMALL_ORE_BASE_META)); - drawLine("gtnop.gui.nei.oreName", oreName, 2, 18); - } - - private void drawSmallOreInfo(OreSmallWrapper oreSmall) { - drawLine("gtnop.gui.nei.genHeight", oreSmall.worldGenHeightRange, 2, 31); - drawLine("gtnop.gui.nei.amount", String.valueOf(oreSmall.amountPerChunk), 2, 44); - drawLine("gtnop.gui.nei.chanceDrops", "", 2, 83 + getRestrictBiomeOffset()); - drawLine("gtnop.gui.nei.worldNames", "", 2, 100); - } - - private OreSmallWrapper getSmallOre(int recipe) { - CachedOreSmallRecipe crecipe = (CachedOreSmallRecipe) this.arecipes.get(recipe); - return GT5OreSmallHelper.mapOreSmallWrapper.get(crecipe.oreGenName); - } - - public int getRestrictBiomeOffset() { - return GT5OreSmallHelper.restrictBiomeSupport ? 0 : -13; - } - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals(getOutputId())) - for (ItemStack stack : GT5OreSmallHelper.oreSmallList) loadCraftingRecipes(stack); - else super.loadCraftingRecipes(outputId, results); - } - - @Override - public void loadCraftingRecipes(ItemStack stack) { - if (stack.getUnlocalizedName() - .startsWith("gt.blockores")) { - short oreMeta = (short) (stack.getItemDamage() % 1000); - loadSmallOre(oreMeta, getMaximumMaterialIndex(oreMeta, true)); - } else if (GT5OreSmallHelper.mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { - short oreMeta = GT5OreSmallHelper.mapOreDropUnlocalizedNameToOreMeta.get(stack.getUnlocalizedName()); - loadSmallOre(oreMeta, 7); - } else super.loadCraftingRecipes(stack); - } - - @Override - public void loadUsageRecipes(ItemStack stack) { - String dimension = ItemDimensionDisplay.getDimension(stack); - if (dimension == null) { - return; - } - - for (OreSmallWrapper oreVein : GT5OreSmallHelper.mapOreSmallWrapper.values()) { - if (Arrays.asList(getDimNameArrayFromVeinName(oreVein.oreGenName)) - .contains(dimension)) { - addSmallOre(oreVein, 7); - } - } - } - - private void loadSmallOre(short oreMeta, int maximumIndex) { - OreSmallWrapper smallOre = getSmallOre(oreMeta); - if (smallOre != null) { - addSmallOre(smallOre, maximumIndex); - } - } - - private OreSmallWrapper getSmallOre(short oreMeta) { - for (OreSmallWrapper oreSmallWorldGen : GT5OreSmallHelper.mapOreSmallWrapper.values()) { - if (oreSmallWorldGen.oreMeta == oreMeta) { - return oreSmallWorldGen; - } - } - return null; - } - - private void addSmallOre(OreSmallWrapper smallOre, int maximumIndex) { - this.arecipes.add( - new CachedOreSmallRecipe( - smallOre.oreGenName, - smallOre.getMaterialDrops(maximumIndex), - getStoneDusts(maximumIndex), - GT5OreSmallHelper.mapOreMetaToOreDrops.get(smallOre.oreMeta))); - } - - private List getStoneDusts(int maximumIndex) { - List materialDustStackList = new ArrayList<>(); - for (int i = 0; i < maximumIndex; i++) materialDustStackList - .add(GT_OreDictUnificator.get(OrePrefixes.dust, GT5OreSmallHelper.getDroppedDusts()[i], 1L)); - return materialDustStackList; - } - - @Override - public String getOutputId() { - return "GTOrePluginOreSmall"; - } - - @Override - public String getRecipeName() { - return I18n.format("gtnop.gui.smallOreStat.name"); - } - - private String[] getDimNameArrayFromVeinName(String veinName) { - OreSmallWrapper oreSmall = GT5OreSmallHelper.mapOreSmallWrapper.get(veinName); - String[] dims = GT5OreSmallHelper.bufferedDims.get(oreSmall) - .keySet() - .toArray(new String[0]); - Arrays.sort( - dims, - Comparator.comparingInt( - s -> Arrays.asList(DimensionHelper.DimNameDisplayed) - .indexOf(s))); - return dims; - } - - public class CachedOreSmallRecipe extends CachedRecipe { - - public final String oreGenName; - public final PositionedStack positionedStackOreSmall; - public final PositionedStack positionedStackMaterialDust; - public final List positionedDropStackList; - private final List dimensionDisplayItems = new ArrayList<>(); - - public CachedOreSmallRecipe(String oreGenName, List stackList, List materialDustStackList, - List dropStackList) { - this.oreGenName = oreGenName; - this.positionedStackOreSmall = new PositionedStack(stackList, 2, 0); - this.positionedStackMaterialDust = new PositionedStack( - materialDustStackList, - 43, - 79 + getRestrictBiomeOffset()); - List positionedDropStackList = new ArrayList<>(); - int i = 1; - for (ItemStack stackDrop : dropStackList) positionedDropStackList.add( - new PositionedStack(stackDrop, 43 + 20 * (i % 4), 79 + 16 * ((i++) / 4) + getRestrictBiomeOffset())); - this.positionedDropStackList = positionedDropStackList; - setDimensionDisplayItems(); - } - - private void setDimensionDisplayItems() { - int x = 2; - int y = 110; - int count = 0; - int itemsPerLine = 9; - int itemSize = 18; - for (String dim : getDimNameArrayFromVeinName(this.oreGenName)) { - ItemStack item = ItemDimensionDisplay.getItem(dim); - if (item != null) { - int xPos = x + itemSize * (count % itemsPerLine); - int yPos = y + itemSize * (count / itemsPerLine); - dimensionDisplayItems.add(new PositionedStack(item, xPos, yPos, false)); - count++; - } - } - } - - @Override - public List getIngredients() { - return dimensionDisplayItems; - } - - @Override - public PositionedStack getResult() { - return null; - } - - @Override - public List getOtherStacks() { - List outputs = new ArrayList<>(); - positionedStackOreSmall.setPermutationToRender((cycleticks / 20) % positionedStackOreSmall.items.length); - positionedStackMaterialDust - .setPermutationToRender((cycleticks / 20) % positionedStackMaterialDust.items.length); - outputs.add(positionedStackOreSmall); - outputs.add(positionedStackMaterialDust); - outputs.addAll(positionedDropStackList); - return outputs; - } - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5UndergroundFluid.java b/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5UndergroundFluid.java deleted file mode 100644 index 5530f5b145..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5UndergroundFluid.java +++ /dev/null @@ -1,168 +0,0 @@ -package pers.gwyog.gtneioreplugin.plugin.gregtech5; - -import java.text.DecimalFormat; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - -import net.minecraft.client.resources.I18n; -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; -import net.minecraftforge.fluids.FluidStack; - -import codechicken.lib.gui.GuiDraw; -import codechicken.nei.PositionedStack; -import gregtech.api.util.GT_Utility; -import pers.gwyog.gtneioreplugin.plugin.PluginBase; -import pers.gwyog.gtneioreplugin.plugin.item.ItemDimensionDisplay; -import pers.gwyog.gtneioreplugin.util.GT5UndergroundFluidHelper; -import pers.gwyog.gtneioreplugin.util.GT5UndergroundFluidHelper.UndergroundFluidWrapper; - -public class PluginGT5UndergroundFluid extends PluginBase { - - private static final int lineSpace = 20; - private static final int xDimensionDisplay = 30; - private static final int halfItemLength = 16 / 2; - private static final DecimalFormat format = new DecimalFormat("0.#"); - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals(getOutputId())) { - for (Map.Entry> entry : GT5UndergroundFluidHelper.getAllEntries() - .entrySet()) { - Fluid fluid = FluidRegistry.getFluid(entry.getKey()); - if (fluid != null) { - this.arecipes.add(new CachedUndergroundFluidRecipe(fluid, entry.getValue())); - } - } - } else { - super.loadCraftingRecipes(outputId, results); - } - } - - @Override - public void loadCraftingRecipes(ItemStack result) { - Fluid fluid = null; - FluidStack containerFluid = GT_Utility.getFluidForFilledItem(result, true); - if (containerFluid != null) { - fluid = containerFluid.getFluid(); - } - if (fluid == null) { - FluidStack displayFluid = GT_Utility.getFluidFromDisplayStack(result); - if (displayFluid != null) { - fluid = displayFluid.getFluid(); - } - } - if (fluid == null) return; - - List wrappers = GT5UndergroundFluidHelper.getEntry(fluid.getName()); - if (wrappers != null) { - this.arecipes.add(new CachedUndergroundFluidRecipe(fluid, wrappers)); - } - } - - @Override - public void loadUsageRecipes(ItemStack ingredient) { - String dimension = ItemDimensionDisplay.getDimension(ingredient); - if (dimension != null) { - for (Map.Entry> entry : GT5UndergroundFluidHelper.getAllEntries() - .entrySet()) { - boolean found = false; - for (UndergroundFluidWrapper wrapper : entry.getValue()) { - if (wrapper.dimension.equals(dimension)) { - found = true; - break; - } - } - if (found) { - Fluid fluid = FluidRegistry.getFluid(entry.getKey()); - if (fluid != null) { - this.arecipes.add(new CachedUndergroundFluidRecipe(fluid, entry.getValue())); - } - } - } - } - } - - @Override - public void drawExtras(int recipeIndex) { - drawSeeAllRecipesLabel(); - - int xChance = 85; - int xAmount = 140; - int yHeader = 30; - int black = 0x404040; - - GuiDraw.drawStringC(I18n.format("gtnop.gui.nei.dimension") + ":", xDimensionDisplay, yHeader, black, false); - GuiDraw.drawStringC(I18n.format("gtnop.gui.nei.chance") + ":", xChance, yHeader, black, false); - GuiDraw.drawStringC(I18n.format("gtnop.gui.nei.fluidAmount") + ":", xAmount, yHeader, black, false); - - int y = 50; - CachedUndergroundFluidRecipe recipe = (CachedUndergroundFluidRecipe) this.arecipes.get(recipeIndex); - for (int i = 0; i < recipe.dimensionDisplayItems.size(); i++) { - GuiDraw.drawStringC(format.format((double) recipe.chances.get(i) / 100) + "%", xChance, y, black, false); - GuiDraw.drawStringC( - recipe.minAmounts.get(i) - .toString() + "-" - + recipe.maxAmounts.get(i) - .toString(), - xAmount, - y, - black, - false); - y += lineSpace; - } - } - - @Override - public String getOutputId() { - return "GTOrePluginUndergroundFluid"; - } - - @Override - public String getRecipeName() { - return I18n.format("gtnop.gui.undergroundFluid.name"); - } - - private class CachedUndergroundFluidRecipe extends CachedRecipe { - - private final PositionedStack targetFluidDisplay; - private final List dimensionDisplayItems = new ArrayList<>(); - private final List chances = new ArrayList<>(); - private final List maxAmounts = new ArrayList<>(); - private final List minAmounts = new ArrayList<>(); - - private CachedUndergroundFluidRecipe(Fluid fluid, List wrappers) { - targetFluidDisplay = new PositionedStack( - GT_Utility.getFluidDisplayStack(fluid), - getGuiWidth() / 2 - halfItemLength, - 3); - int y = 50 - halfItemLength; - for (UndergroundFluidWrapper wrapper : wrappers) { - ItemStack dimensionDisplay = ItemDimensionDisplay.getItem(wrapper.dimension); - if (dimensionDisplay != null) { - dimensionDisplayItems.add( - new PositionedStack( - dimensionDisplay, - xDimensionDisplay - halfItemLength, - y + GuiDraw.fontRenderer.FONT_HEIGHT / 2)); - y += lineSpace; - chances.add(wrapper.chance); - maxAmounts.add(wrapper.maxAmount); - minAmounts.add(wrapper.minAmount); - } - } - } - - @Override - public PositionedStack getResult() { - return targetFluidDisplay; - } - - @Override - public List getIngredients() { - return dimensionDisplayItems; - } - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5VeinStat.java b/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5VeinStat.java deleted file mode 100644 index 81aff90ba9..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/plugin/gregtech5/PluginGT5VeinStat.java +++ /dev/null @@ -1,209 +0,0 @@ -package pers.gwyog.gtneioreplugin.plugin.gregtech5; - -import static pers.gwyog.gtneioreplugin.util.OreVeinLayer.*; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Comparator; -import java.util.List; - -import net.minecraft.client.resources.I18n; -import net.minecraft.item.ItemStack; - -import codechicken.nei.PositionedStack; -import cpw.mods.fml.common.Loader; -import pers.gwyog.gtneioreplugin.plugin.item.ItemDimensionDisplay; -import pers.gwyog.gtneioreplugin.util.DimensionHelper; -import pers.gwyog.gtneioreplugin.util.GT5OreLayerHelper; -import pers.gwyog.gtneioreplugin.util.GT5OreLayerHelper.OreLayerWrapper; - -public class PluginGT5VeinStat extends PluginGT5Base { - - @Override - public void loadCraftingRecipes(String outputId, Object... results) { - if (outputId.equals(getOutputId())) { - for (OreLayerWrapper oreVein : getAllVeins()) { - addVeinWithLayers(oreVein, 7); - } - } else super.loadCraftingRecipes(outputId, results); - } - - @Override - public void loadCraftingRecipes(ItemStack stack) { - if (stack.getUnlocalizedName() - .startsWith("gt.blockores")) { - loadMatchingVeins((short) (stack.getItemDamage() % 1000)); - } else super.loadCraftingRecipes(stack); - } - - private void loadMatchingVeins(short oreId) { - for (OreLayerWrapper oreVein : getAllVeins()) { - if (oreVein.containsOre(oreId)) { - addVeinWithLayers(oreVein, getMaximumMaterialIndex(oreId, false)); - } - } - } - - @Override - public void loadUsageRecipes(ItemStack stack) { - String dimension = ItemDimensionDisplay.getDimension(stack); - if (dimension == null) { - return; - } - - for (OreLayerWrapper oreVein : getAllVeins()) { - if (Arrays.asList(getDimNameArrayFromVeinName(oreVein.veinName)) - .contains(dimension)) { - addVeinWithLayers(oreVein, getMaximumMaterialIndex((short) (stack.getItemDamage() % 1000), false)); - } - } - } - - private void addVeinWithLayers(OreLayerWrapper oreVein, int maximumMaterialIndex) { - this.arecipes.add( - new CachedVeinStatRecipe( - oreVein.veinName, - oreVein.getVeinLayerOre(maximumMaterialIndex, VEIN_PRIMARY), - oreVein.getVeinLayerOre(maximumMaterialIndex, VEIN_SECONDARY), - oreVein.getVeinLayerOre(maximumMaterialIndex, VEIN_BETWEEN), - oreVein.getVeinLayerOre(maximumMaterialIndex, VEIN_SPORADIC))); - } - - private Collection getAllVeins() { - return GT5OreLayerHelper.mapOreLayerWrapper.values(); - } - - @Override - public void drawExtras(int recipe) { - OreLayerWrapper oreLayer = getOreLayer(recipe); - - drawVeinName(oreLayer); - drawVeinLayerNames(oreLayer); - drawVeinInfo(oreLayer); - - drawDimNames(); - - drawSeeAllRecipesLabel(); - } - - private OreLayerWrapper getOreLayer(int recipe) { - CachedVeinStatRecipe crecipe = (CachedVeinStatRecipe) this.arecipes.get(recipe); - return GT5OreLayerHelper.mapOreLayerWrapper.get(crecipe.veinName); - } - - private static void drawVeinName(OreLayerWrapper oreLayer) { - if (Loader.isModLoaded("visualprospecting")) { - drawVeinNameLine(I18n.format(oreLayer.veinName) + " "); - } else { - String veinName = getGTOreLocalizedName(oreLayer.Meta[VEIN_PRIMARY]); - if (veinName.contains("Ore")) drawVeinNameLine(veinName.split("Ore")[0]); - else if (veinName.contains("Sand")) drawVeinNameLine(veinName.split("Sand")[0]); - else drawVeinNameLine(veinName + " "); - } - } - - private static void drawVeinNameLine(String veinName) { - drawLine("gtnop.gui.nei.veinName", veinName + I18n.format("gtnop.gui" + ".nei.vein"), 2, 20); - } - - private static void drawVeinLayerNames(OreLayerWrapper oreLayer) { - drawVeinLayerNameLine(oreLayer, VEIN_PRIMARY, 50); - drawVeinLayerNameLine(oreLayer, VEIN_SECONDARY, 60); - drawVeinLayerNameLine(oreLayer, VEIN_BETWEEN, 70); - drawVeinLayerNameLine(oreLayer, VEIN_SPORADIC, 80); - } - - private static void drawVeinLayerNameLine(OreLayerWrapper oreLayer, int veinLayer, int height) { - drawLine(getOreVeinLayerName(veinLayer), getGTOreLocalizedName(oreLayer.Meta[veinLayer]), 2, height); - } - - private static void drawVeinInfo(OreLayerWrapper oreLayer) { - drawLine("gtnop.gui.nei.genHeight", oreLayer.worldGenHeightRange, 2, 90); - drawLine("gtnop.gui.nei.weightedChance", Integer.toString(oreLayer.randomWeight), 100, 90); - } - - @Override - public String getOutputId() { - return "GTOrePluginVein"; - } - - @Override - public String getRecipeName() { - return I18n.format("gtnop.gui.veinStat.name"); - } - - private String[] getDimNameArrayFromVeinName(String veinName) { - OreLayerWrapper oreLayer = GT5OreLayerHelper.mapOreLayerWrapper.get(veinName); - String[] dims = (GT5OreLayerHelper.bufferedDims.get(oreLayer) - .keySet() - .toArray(new String[0])); - Arrays.sort( - dims, - Comparator.comparingInt( - s -> Arrays.asList(DimensionHelper.DimNameDisplayed) - .indexOf(s))); - return dims; - } - - public class CachedVeinStatRecipe extends CachedRecipe { - - public final String veinName; - public final PositionedStack positionedStackPrimary; - public final PositionedStack positionedStackSecondary; - public final PositionedStack positionedStackBetween; - public final PositionedStack positionedStackSporadic; - private final List dimensionDisplayItems = new ArrayList<>(); - - public CachedVeinStatRecipe(String veinName, List stackListPrimary, - List stackListSecondary, List stackListBetween, List stackListSporadic) { - this.veinName = veinName; - positionedStackPrimary = new PositionedStack(stackListPrimary, 2, 0); - positionedStackSecondary = new PositionedStack(stackListSecondary, 22, 0); - positionedStackBetween = new PositionedStack(stackListBetween, 42, 0); - positionedStackSporadic = new PositionedStack(stackListSporadic, 62, 0); - setDimensionDisplayItems(); - } - - private void setDimensionDisplayItems() { - int x = 2; - int y = 110; - int count = 0; - int itemsPerLine = 9; - int itemSize = 18; - for (String dim : getDimNameArrayFromVeinName(this.veinName)) { - ItemStack item = ItemDimensionDisplay.getItem(dim); - if (item != null) { - int xPos = x + itemSize * (count % itemsPerLine); - int yPos = y + itemSize * (count / itemsPerLine); - dimensionDisplayItems.add(new PositionedStack(item, xPos, yPos, false)); - count++; - } - } - } - - @Override - public List getIngredients() { - return dimensionDisplayItems; - } - - @Override - public PositionedStack getResult() { - return null; - } - - @Override - public List getOtherStacks() { - List outputs = new ArrayList<>(); - positionedStackPrimary.setPermutationToRender((cycleticks / 20) % positionedStackPrimary.items.length); - positionedStackSecondary.setPermutationToRender((cycleticks / 20) % positionedStackPrimary.items.length); - positionedStackBetween.setPermutationToRender((cycleticks / 20) % positionedStackPrimary.items.length); - positionedStackSporadic.setPermutationToRender((cycleticks / 20) % positionedStackPrimary.items.length); - outputs.add(positionedStackPrimary); - outputs.add(positionedStackSecondary); - outputs.add(positionedStackBetween); - outputs.add(positionedStackSporadic); - return outputs; - } - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/plugin/item/ItemDimensionDisplay.java b/src/main/java/pers/gwyog/gtneioreplugin/plugin/item/ItemDimensionDisplay.java deleted file mode 100644 index 01a0b4bebb..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/plugin/item/ItemDimensionDisplay.java +++ /dev/null @@ -1,57 +0,0 @@ -package pers.gwyog.gtneioreplugin.plugin.item; - -import static pers.gwyog.gtneioreplugin.GTNEIOrePlugin.LOG; - -import net.minecraft.block.Block; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraftforge.client.MinecraftForgeClient; - -import cpw.mods.fml.common.FMLCommonHandler; -import cpw.mods.fml.relauncher.Side; -import pers.gwyog.gtneioreplugin.GTNEIOrePlugin; -import pers.gwyog.gtneioreplugin.plugin.block.BlockDimensionDisplay; -import pers.gwyog.gtneioreplugin.plugin.block.ModBlocks; -import pers.gwyog.gtneioreplugin.plugin.renderer.ItemDimensionDisplayRenderer; -import pers.gwyog.gtneioreplugin.util.DimensionHelper; - -public class ItemDimensionDisplay extends ItemBlock { - - public ItemDimensionDisplay(Block block) { - super(block); - setCreativeTab(GTNEIOrePlugin.creativeTab); - - if (FMLCommonHandler.instance() - .getEffectiveSide() == Side.CLIENT) { - MinecraftForgeClient.registerItemRenderer(this, new ItemDimensionDisplayRenderer()); - } - } - - public static ItemStack getItem(String dimension) { - Block block = ModBlocks.getBlock(dimension); - if (block != null) { - return new ItemStack(block); - } - if (dimension != null) { - LOG.warn("Unknown dimension queried for ItemDimensionDisplay: " + dimension); - } - return null; - } - - public static String getDimension(ItemStack stack) { - if (stack.getItem() instanceof ItemDimensionDisplay) { - return ((BlockDimensionDisplay) Block.getBlockFromItem(stack.getItem())).getDimension(); - } - return null; - } - - @Override - public String getItemStackDisplayName(ItemStack stack) { - String dimension = getDimension(stack); - if (dimension != null) { - return DimensionHelper.convertCondensedStringToToolTip(dimension) - .get(0); - } - return super.getItemStackDisplayName(stack); - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/plugin/renderer/ItemDimensionDisplayRenderer.java b/src/main/java/pers/gwyog/gtneioreplugin/plugin/renderer/ItemDimensionDisplayRenderer.java deleted file mode 100644 index 12c62c9830..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/plugin/renderer/ItemDimensionDisplayRenderer.java +++ /dev/null @@ -1,78 +0,0 @@ -package pers.gwyog.gtneioreplugin.plugin.renderer; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.entity.RenderItem; -import net.minecraft.item.ItemStack; -import net.minecraftforge.client.IItemRenderer; - -import org.lwjgl.opengl.GL11; - -import pers.gwyog.gtneioreplugin.plugin.item.ItemDimensionDisplay; - -public class ItemDimensionDisplayRenderer implements IItemRenderer { - - private final RenderItem renderItem = new RenderItem(); - - @Override - public boolean handleRenderType(ItemStack item, ItemRenderType type) { - return type == ItemRenderType.INVENTORY; - } - - @Override - public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return false; - } - - // Renders the actual text on top of planet items. - @Override - public void renderItem(ItemRenderType type, ItemStack stack, Object... data) { - String dimension = ItemDimensionDisplay.getDimension(stack); - if (dimension == null) { - return; - } - - renderItem.renderItemIntoGUI( - Minecraft.getMinecraft().fontRenderer, - Minecraft.getMinecraft().renderEngine, - stack, - 0, - 0, - false); - - FontRenderer fontRender = Minecraft.getMinecraft().fontRenderer; - float smallTextScale = 3F / 4F; - - GL11.glPushMatrix(); - GL11.glTranslatef(0, 0, 300); - GL11.glScalef(smallTextScale, smallTextScale, 1.0f); - - long prefix = getPrefix(dimension); - String tooltipPrefix = prefix != -1 ? "T" + prefix : "INVALID. Please, report this to the GTNH team"; - - fontRender - .drawString(tooltipPrefix, 0, (int) (16 / smallTextScale) - fontRender.FONT_HEIGHT + 1, 0xFFFFFF, true); - - GL11.glPopMatrix(); - - GL11.glDisable(GL11.GL_ALPHA_TEST); - } - - // See DimensionHelper.DimNameDisplayed for real names of these. - public static long getPrefix(String dimName) { - return switch (dimName) { - case "Ow", "Ne", "TF", "ED", "VA", "EA" -> 0L; - case "Mo" -> 1L; - case "De", "Ma", "Ph" -> 2L; - case "As", "Ca", "Ce", "Eu", "Ga", "Rb" -> 3L; - case "Io", "Me", "Ve" -> 4L; - case "En", "Mi", "Ob", "Ti", "Ra" -> 5L; - case "Pr", "Tr" -> 6L; - case "Ha", "KB", "MM", "Pl" -> 7L; - case "BC", "BE", "BF", "CB", "TE", "VB" -> 8L; - case "An", "Ho", "Np", "Mh", "MB", "Se" -> 9L; - case "DD" -> 10L; - default -> -1L; - }; - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/util/CSVMaker.java b/src/main/java/pers/gwyog/gtneioreplugin/util/CSVMaker.java deleted file mode 100644 index 61fdff46a2..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/util/CSVMaker.java +++ /dev/null @@ -1,121 +0,0 @@ -package pers.gwyog.gtneioreplugin.util; - -import static pers.gwyog.gtneioreplugin.Config.CSVName; -import static pers.gwyog.gtneioreplugin.Config.CSVnameSmall; -import static pers.gwyog.gtneioreplugin.GTNEIOrePlugin.instanceDir; - -import java.io.BufferedWriter; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -import pers.gwyog.gtneioreplugin.plugin.gregtech5.PluginGT5VeinStat; -import pers.gwyog.gtneioreplugin.util.GT5OreLayerHelper.OreLayerWrapper; - -// todo: yeet any opencsv usage. -public class CSVMaker implements Runnable { - - public void runSmallOres() { - try { - Iterator> it = GT5OreSmallHelper.mapOreSmallWrapper - .entrySet() - .iterator(); - List SmallOreVeins = new ArrayList<>(); - while (it.hasNext()) { - SmallOre oremix = new SmallOre(); - - Map.Entry pair = it.next(); - GT5OreSmallHelper.OreSmallWrapper oreLayer = pair.getValue(); - - Map Dims = GT5OreSmallHelper.bufferedDims.get(oreLayer); - - oremix.setOreName(oreLayer.oreGenName); - oremix.setOreMeta(oreLayer.oreMeta); - oremix.setHeight(oreLayer.worldGenHeightRange); - oremix.setAmount(oreLayer.amountPerChunk); - oremix.setDims(Dims); - - SmallOreVeins.add(oremix); - - it.remove(); // avoids a ConcurrentModificationException - } - - BufferedWriter one = Files.newBufferedWriter( - instanceDir.toPath() - .resolve(CSVnameSmall)); - Collections.sort(SmallOreVeins); - - // header first - one.write(SmallOre.getCsvHeader()); - one.newLine(); - for (SmallOre ore : SmallOreVeins) { - one.write(ore.getCsvEntry()); - one.newLine(); - } - one.flush(); - one.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - - @Override - public void run() { - runVeins(); - runSmallOres(); - } - - public void runVeins() { - try { - Iterator> it = GT5OreLayerHelper.mapOreLayerWrapper.entrySet() - .iterator(); - List OreVeins = new ArrayList<>(); - while (it.hasNext()) { - Oremix oremix = new Oremix(); - - Map.Entry pair = it.next(); - Map Dims = GT5OreLayerHelper.bufferedDims.get(pair.getValue()); - OreLayerWrapper oreLayer = pair.getValue(); - oremix.setOreMixName(oreLayer.veinName); - oremix.setPrimary(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[0])); - oremix.setSecondary(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[1])); - oremix.setInbetween(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[2])); - oremix.setSporadic(PluginGT5VeinStat.getGTOreLocalizedName(oreLayer.Meta[3])); - oremix.setSize(oreLayer.size); - oremix.setHeight(oreLayer.worldGenHeightRange); - oremix.setDensity(oreLayer.density); - oremix.setWeight(oreLayer.randomWeight); - oremix.setOreMixIDs( - Integer.toString(oreLayer.Meta[0]) + "|" - + Integer.toString(oreLayer.Meta[1]) - + "|" - + Integer.toString(oreLayer.Meta[2]) - + "|" - + Integer.toString(oreLayer.Meta[3])); - oremix.setDims(Dims); - OreVeins.add(oremix); - - it.remove(); // avoids a ConcurrentModificationException - } - BufferedWriter one = Files.newBufferedWriter( - instanceDir.toPath() - .resolve(CSVName)); - Collections.sort(OreVeins); - - // header first - one.write(Oremix.getCsvHeader()); - one.newLine(); - for (Oremix ore : OreVeins) { - one.write(ore.getCsvEntry()); - one.newLine(); - } - one.flush(); - one.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/util/DimensionHelper.java b/src/main/java/pers/gwyog/gtneioreplugin/util/DimensionHelper.java deleted file mode 100644 index db7201323b..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/util/DimensionHelper.java +++ /dev/null @@ -1,351 +0,0 @@ -package pers.gwyog.gtneioreplugin.util; - -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.ANUBIS; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.ASTEROIDS; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.BARNARDC; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.BARNARDE; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.BARNARDF; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.CALLISTO; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.CENTAURIA; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.CERES; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.DEEPDARK; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.DEIMOS; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.ENCELADUS; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.ENDASTEROIDS; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.EUROPA; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.GANYMEDE; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.HAUMEA; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.HORUS; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.IO; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.KUIPERBELT; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.MAAHES; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.MAKEMAKE; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.MARS; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.MEHENBELT; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.MERCURY; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.MIRANDA; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.MOON; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.NEPER; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.OBERON; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.PHOBOS; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.PLUTO; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.PROTEUS; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.ROSS128B; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.ROSS128BA; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.SETH; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.TCETIE; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.TITAN; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.TRITON; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.VEGAB; -import static bloodasp.galacticgreg.api.enums.DimensionDef.DimNames.VENUS; -import static pers.gwyog.gtneioreplugin.Config.maxTooltipLines; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.util.StatCollector; - -import gregtech.common.OreMixBuilder; - -public class DimensionHelper { - - public static final String[] DimName = { - // Non GC dimensions in progression order instead of alphabetical - "Overworld", "Nether", "Twilight", "TheEnd", "EndAsteroid", - // T1 - "GalacticraftCore_Moon", - // T2 - "GalaxySpace_Deimos", "GalacticraftMars_Mars", "GalaxySpace_Phobos", - // T3 - "GalacticraftMars_Asteroids", "GalaxySpace_Callisto", "GalaxySpace_Ceres", "GalaxySpace_Europa", - "GalaxySpace_Ganymede", "Ross128b", - // T4 - "GalaxySpace_Io", "GalaxySpace_Mercury", "GalaxySpace_Venus", - // T5 - "GalaxySpace_Enceladus", "GalaxySpace_Miranda", "GalaxySpace_Oberon", "GalaxySpace_Titan", "Ross128ba", - // T6 - "GalaxySpace_Proteus", "GalaxySpace_Triton", - // T7 - "GalaxySpace_Haumea", "GalaxySpace_Kuiperbelt", "GalaxySpace_MakeMake", "GalaxySpace_Pluto", - // T8 - "GalaxySpace_BarnardC", "GalaxySpace_BarnardE", "GalaxySpace_BarnardF", "GalaxySpace_CentauriA", - "GalaxySpace_TcetiE", "GalaxySpace_VegaB", - // T9 - "GalacticraftAmunRa_Anubis", "GalacticraftAmunRa_Horus", "GalacticraftAmunRa_Maahes", - "GalacticraftAmunRa_MehenBelt", "GalacticraftAmunRa_Neper", "GalacticraftAmunRa_Seth", - // T10 - "Underdark", }; - - public static final String[] DimNameTrimmed = Arrays.stream(DimName) - .map( - n -> n.replaceAll("GalacticraftCore_", "") - .replaceAll("GalacticraftMars_", "") - .replaceAll("GalaxySpace_", "") - .replaceAll("GalacticraftAmunRa_", "")) - .toArray(String[]::new); - - public static final String[] DimNameDisplayed = { // first 2 letters if one word else 1 letter of every word, except - // capital letter in - // name, then 1rst + capital Moon = Mo, BarnardC = BC, EndAsteroid = EA - // Non GC dimensions in progression order instead of alphabetical - "Ow", // Overworld - "Ne", // Nether - "TF", // Twilight - "ED", // TheEnd because En = Encalus - "EA", // EndAsteroid - // T1 - "Mo", // GalacticraftCore_Moon - // T2 - "De", // GalaxySpace_Deimos - "Ma", // GalacticraftMars_Mars - "Ph", // GalaxySpace_Phobos - // T3 - "As", // GalacticraftMars_Asteroids - "Ca", // GalaxySpace_Callisto - "Ce", // GalaxySpace_Ceres - "Eu", // GalaxySpace_Europa - "Ga", // GalaxySpace_Ganymede - "Rb", // Ross128b - // T4 - "Io", // GalaxySpace_Io - "Me", // GalaxySpace_Mercury - "Ve", // GalaxySpace_Venus - // T5 - "En", // GalaxySpace_Enceladus - "Mi", // GalaxySpace_Miranda - "Ob", // GalaxySpace_Oberon - "Ti", // GalaxySpace_Titan - "Ra", // Ross128ba - // T6 - "Pr", // GalaxySpace_Proteus - "Tr", // GalaxySpace_Triton - // T7 - "Ha", // GalaxySpace_Haumea - "KB", // GalaxySpace_Kuiperbelt - "MM", // GalaxySpace_MakeMake - "Pl", // GalaxySpace_Pluto - // T8 - "BC", // GalaxySpace_BarnardC - "BE", // GalaxySpace_BarnardE - "BF", // GalaxySpace_BarnardF - "CB", // GalaxySpace_CentauriA is actually α Centauri Bb - "TE", // GalaxySpace_TcetiE - "VB", // GalaxySpace_VegaB - // T9 - "An", // GalacticraftAmunRa_Anubis - "Ho", // GalacticraftAmunRa_Horus - "Mh", // GalacticraftAmunRa_Maahes - "MB", // GalacticraftAmunRa_MehenBelt - "Np", // GalacticraftAmunRa_Neper - "Se", // GalacticraftAmunRa_Seth - // T10 - "DD", // Underdark - }; - - private static final HashMap> tooltipBuffer = new HashMap<>(); - - private static List computeString(String line) { - String[] dims = parseDimNames(line); - for (int j = 0; j < dims.length; j++) { - String s = dims[j]; - for (int i = 0; i < DimNameDisplayed.length; i++) { - if (s.equals(DimNameDisplayed[i])) { - String k = DimNameTrimmed[i]; - s = StatCollector.translateToLocal("gtnop.world." + k); - s = switch (k) { - case "Moon" -> "T1: " + s; - case "Deimos", "Mars", "Phobos" -> "T2: " + s; - case "Asteroids", "Callisto", "Ceres", "Europa", "Ganymede", "Ross128b" -> "T3: " + s; - case "Io", "Mercury", "Venus" -> "T4: " + s; - case "Enceladus", "Miranda", "Oberon", "Titan", "Ross128ba" -> "T5: " + s; - case "Proteus", "Triton" -> "T6: " + s; - case "Haumea", "Kuiperbelt", "MakeMake", "Pluto" -> "T7: " + s; - case "BarnardC", "BarnardE", "BarnardF", "CentauriA", "TcetiE", "VegaB" -> "T8: " + s; - case "Anubis", "Horus", "Maahes", "MehenBelt", "Neper", "Seth" -> "T9: " + s; - case "Underdark" -> "T10: " + s; - default -> s; - }; - - dims[j] = s; - } - } - } - - if (dims.length > maxTooltipLines) { - dims = StringPaddingHack.stringsToSpacedColumns( - dims, - dims.length / maxTooltipLines + (dims.length % maxTooltipLines == 0 ? 0 : 1), - 2); - } - - return Arrays.asList(dims); - } - - public static String[] parseDimNames(String line) { - String[] dims = line.split(","); - for (int j = 0; j < dims.length; j++) { - String s = dims[j]; - s = s.replaceAll(",", ""); - s = s.trim(); - dims[j] = s; - } - return dims; - } - - public static Map getDims(GT5OreLayerHelper.OreLayerWrapper oreLayer) { - Map enabledDims = new HashMap<>(); - Map origNames = oreLayer.allowedDimWithOrigNames; - - for (String dimName : origNames.keySet()) { - String abbr = getDimAbbreviatedName(dimName); - if (!origNames.getOrDefault(dimName, false)) { - continue; - } - enabledDims.put(abbr, true); - } - return enabledDims; - } - - public static Map getDims(GT5OreSmallHelper.OreSmallWrapper ore) { - Map enabledDims = new HashMap<>(); - Map origNames = ore.allowedDimWithOrigNames; - - for (String dimName : origNames.keySet()) { - String abbr = getDimAbbreviatedName(dimName); - if (!origNames.getOrDefault(dimName, false)) { - continue; - } - enabledDims.put(abbr, true); - } - return enabledDims; - } - - public static String getDimAbbreviatedName(String dimName) { - String abbreviatedName; - switch (dimName) { - case (OreMixBuilder.OW) -> abbreviatedName = "Ow"; // Overworld - case OreMixBuilder.NETHER -> abbreviatedName = "Ne"; // Nether - case OreMixBuilder.TWILIGHT_FOREST -> abbreviatedName = "TF"; // Twilight - case OreMixBuilder.THE_END -> abbreviatedName = "ED"; // TheEnd because En = Encalus - case ENDASTEROIDS -> abbreviatedName = "EA"; // EndAsteroid - // T1 - case MOON -> abbreviatedName = "Mo"; // GalacticraftCore_Moon - // T2 - case DEIMOS -> abbreviatedName = "De"; // GalaxySpace_Deimos - case MARS -> abbreviatedName = "Ma"; // GalacticraftMars_Mars - case PHOBOS -> abbreviatedName = "Ph"; // GalaxySpace_Phobos - // T3 - case ASTEROIDS -> abbreviatedName = "As"; // GalacticraftMars_Asteroids - case CALLISTO -> abbreviatedName = "Ca"; // GalaxySpace_Callisto - case CERES -> abbreviatedName = "Ce"; // GalaxySpace_Ceres - case EUROPA -> abbreviatedName = "Eu"; // GalaxySpace_Europa - case GANYMEDE -> abbreviatedName = "Ga"; // GalaxySpace_Ganymede - case ROSS128B -> abbreviatedName = "Rb"; // Ross128b - // T4 - case IO -> abbreviatedName = "Io"; // GalaxySpace_Io - case MERCURY -> abbreviatedName = "Me"; // GalaxySpace_Mercury - case VENUS -> abbreviatedName = "Ve"; // GalaxySpace_Venus - // T5 - case ENCELADUS -> abbreviatedName = "En"; // GalaxySpace_Enceladus - case MIRANDA -> abbreviatedName = "Mi"; // GalaxySpace_Miranda - case OBERON -> abbreviatedName = "Ob"; // GalaxySpace_Oberon - case TITAN -> abbreviatedName = "Ti"; // GalaxySpace_Titan - case ROSS128BA -> abbreviatedName = "Ra"; // Ross128ba - // T6 - case PROTEUS -> abbreviatedName = "Pr"; // GalaxySpace_Proteus - case TRITON -> abbreviatedName = "Tr"; // GalaxySpace_Triton - // T7 - case HAUMEA -> abbreviatedName = "Ha"; // GalaxySpace_Haumea - case KUIPERBELT -> abbreviatedName = "KB"; // GalaxySpace_Kuiperbelt - case MAKEMAKE -> abbreviatedName = "MM"; // GalaxySpace_MakeMake - case PLUTO -> abbreviatedName = "Pl"; // GalaxySpace_Pluto - // T8 - case BARNARDC -> abbreviatedName = "BC"; // GalaxySpace_BarnardC - case BARNARDE -> abbreviatedName = "BE"; // GalaxySpace_BarnardE - case BARNARDF -> abbreviatedName = "BF"; // GalaxySpace_BarnardF - case CENTAURIA -> abbreviatedName = "CB"; // GalaxySpace_CentauriA is actually α Centauri Bb - case TCETIE -> abbreviatedName = "TE"; // GalaxySpace_TcetiE - case VEGAB -> abbreviatedName = "VB"; // GalaxySpace_VegaB - // T9 - case ANUBIS -> abbreviatedName = "An"; // GalacticraftAmunRa_Anubis - case HORUS -> abbreviatedName = "Ho"; // GalacticraftAmunRa_Horus - case MAAHES -> abbreviatedName = "Mh"; // GalacticraftAmunRa_Maahes - case MEHENBELT -> abbreviatedName = "MB"; // GalacticraftAmunRa_MehenBelt - case NEPER -> abbreviatedName = "Np"; // GalacticraftAmunRa_Neper - case SETH -> abbreviatedName = "Se"; // GalacticraftAmunRa_Seth - // T10 - case DEEPDARK -> abbreviatedName = "DD"; // Underdark - default -> { - throw new IllegalStateException("String: " + dimName + " has no abbredged name!"); - } - } - return abbreviatedName; - } - - public static String getFullName(String dimName) { - - return switch (dimName) { - case "Ow" -> (OreMixBuilder.OW); // Overworld - case "Ne" -> OreMixBuilder.NETHER; // Nether - case "TF" -> OreMixBuilder.TWILIGHT_FOREST; // Twilight - case "ED" -> OreMixBuilder.THE_END; // TheEnd because En = Encalus - case "EA" -> ENDASTEROIDS; // EndAsteroid - // T1 - case "Mo" -> MOON; // GalacticraftCore_Moon - // T2 - case "De" -> DEIMOS; // GalaxySpace_Deimos - case "Ma" -> MARS; // GalacticraftMars_Mars - case "Ph" -> PHOBOS; // GalaxySpace_Phobos - // T3 - case "As" -> ASTEROIDS; // GalacticraftMars_Asteroids - case "Ca" -> CALLISTO; // GalaxySpace_Callisto - case "Ce" -> CERES; // GalaxySpace_Ceres - case "Eu" -> EUROPA; // GalaxySpace_Europa - case "Ga" -> GANYMEDE; // GalaxySpace_Ganymede - case "Rb" -> ROSS128B; // Ross128b - // T4 - case "Io" -> IO; // GalaxySpace_Io - case "Me" -> MERCURY; // GalaxySpace_Mercury - case "Ve" -> VENUS; // GalaxySpace_Venus - // T5 - case "En" -> ENCELADUS; // GalaxySpace_Enceladus - case "Mi" -> MIRANDA; // GalaxySpace_Miranda - case "Ob" -> OBERON; // GalaxySpace_Oberon - case "Ti" -> TITAN; // GalaxySpace_Titan - case "Ra" -> ROSS128BA; // Ross128ba - // T6 - case "Pr" -> PROTEUS; // GalaxySpace_Proteus - case "Tr" -> TRITON; // GalaxySpace_Triton - // T7 - case "Ha" -> HAUMEA; // GalaxySpace_Haumea - case "KB" -> KUIPERBELT; // GalaxySpace_Kuiperbelt - case "MM" -> MAKEMAKE; // GalaxySpace_MakeMake - case "Pl" -> PLUTO; // GalaxySpace_Pluto - // T8 - case "BC" -> BARNARDC; // GalaxySpace_BarnardC - case "BE" -> BARNARDE; // GalaxySpace_BarnardE - case "BF" -> BARNARDF; // GalaxySpace_BarnardF - case "CB" -> CENTAURIA; // GalaxySpace_CentauriA is actually α Centauri Bb - case "TE" -> TCETIE; // GalaxySpace_TcetiE - case "VB" -> VEGAB; // GalaxySpace_VegaB - // T9 - case "An" -> ANUBIS; // GalacticraftAmunRa_Anubis - case "Ho" -> HORUS; // GalacticraftAmunRa_Horus - case "Mh" -> MAAHES; // GalacticraftAmunRa_Maahes - case "MB" -> MEHENBELT; // GalacticraftAmunRa_MehenBelt - case "Np" -> NEPER; // GalacticraftAmunRa_Neper - case "Se" -> SETH; // GalacticraftAmunRa_Seth - // T10 - case "DD" -> DEEPDARK; // Underdark - default -> { - throw new IllegalStateException("String: " + dimName + " has no abbredged name!"); - } - }; - } - - public static List convertCondensedStringToToolTip(String line) { - return tooltipBuffer.computeIfAbsent(line, (String tmp) -> computeString(line)); - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/util/GT5OreLayerHelper.java b/src/main/java/pers/gwyog/gtneioreplugin/util/GT5OreLayerHelper.java deleted file mode 100644 index 246ace7fda..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/util/GT5OreLayerHelper.java +++ /dev/null @@ -1,125 +0,0 @@ -package pers.gwyog.gtneioreplugin.util; - -import static pers.gwyog.gtneioreplugin.util.DimensionHelper.getDims; -import static pers.gwyog.gtneioreplugin.util.OreVeinLayer.*; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.item.ItemStack; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OreMixes; -import gregtech.common.OreMixBuilder; - -public class GT5OreLayerHelper { - - public static class NormalOreDimensionWrapper { - - public final ArrayList internalDimOreList = new ArrayList<>(); - public final HashMap oreVeinToProbabilityInDimension = new HashMap<>(); - - // Calculate all weights of ore veins once dimension is initialised. - private void calculateWeights() { - int totalWeight = 0; - for (OreLayerWrapper oreVein : internalDimOreList) { - totalWeight += oreVein.randomWeight; - } - for (OreLayerWrapper oreVein : internalDimOreList) { - oreVeinToProbabilityInDimension.put(oreVein, ((double) oreVein.randomWeight) / ((double) totalWeight)); - } - } - } - - private static final int DIMENSION_COUNT = 33; - public static final Integer[] weightPerWorld = new Integer[DIMENSION_COUNT]; - public static final Integer[] DimIDs = new Integer[DIMENSION_COUNT]; - public static final HashMap mapOreLayerWrapper = new HashMap<>(); - public static final HashMap> bufferedDims = new HashMap<>(); - public static final HashMap dimToOreWrapper = new HashMap<>(); - - public static void init() { - Arrays.fill(weightPerWorld, 0); - Arrays.fill(DimIDs, 0); - for (OreMixes mix : OreMixes.values()) - mapOreLayerWrapper.put(mix.oreMixBuilder.oreMixName, new OreLayerWrapper(mix.oreMixBuilder)); - for (OreLayerWrapper layer : mapOreLayerWrapper.values()) { - bufferedDims.put(layer, getDims(layer)); - } - - // --- Handling of dimToOreWrapper --- - - // Get dims as "Ow,Ne,Ma" etc. - bufferedDims.forEach((veinInfo, dims) -> { - - for (String dim : dims.keySet()) { - NormalOreDimensionWrapper dimensionOres = dimToOreWrapper - .getOrDefault(dim, new NormalOreDimensionWrapper()); - dimensionOres.internalDimOreList.add(veinInfo); - dimToOreWrapper.put(dim, dimensionOres); - } - - // Calculate probabilities for each dim. - for (String dim : dimToOreWrapper.keySet()) { - dimToOreWrapper.get(dim) - .calculateWeights(); - } - }); - // --- End of handling for dimToOreWrapper --- - } - - public static class OreLayerWrapper { - - public final String veinName, worldGenHeightRange; - public final short[] Meta = new short[4]; - public final short randomWeight, size, density; - public final Map allowedDimWithOrigNames; - - public final Materials mPrimaryVeinMaterial; - public final Materials mSecondaryMaterial; - public final Materials mBetweenMaterial; - public final Materials mSporadicMaterial; - - public OreLayerWrapper(OreMixBuilder mix) { - this.veinName = mix.oreMixName; - this.Meta[0] = (short) mix.primary.mMetaItemSubID; - this.Meta[1] = (short) mix.secondary.mMetaItemSubID; - this.Meta[2] = (short) mix.between.mMetaItemSubID; - this.Meta[3] = (short) mix.sporadic.mMetaItemSubID; - - this.mPrimaryVeinMaterial = mix.primary; - this.mSecondaryMaterial = mix.secondary; - this.mBetweenMaterial = mix.between; - this.mSporadicMaterial = mix.sporadic; - - this.size = (short) mix.size; - this.density = (short) mix.density; - this.worldGenHeightRange = mix.minY + "-" + mix.maxY; - this.randomWeight = (short) mix.weight; - - this.allowedDimWithOrigNames = mix.dimsEnabled; - } - - public List getVeinLayerOre(int maximumMaterialIndex, int veinLayer) { - List stackList = new ArrayList<>(); - for (int i = 0; i < maximumMaterialIndex; i++) { - stackList.add(getLayerOre(veinLayer, i)); - } - return stackList; - } - - public ItemStack getLayerOre(int veinLayer, int materialIndex) { - return new ItemStack(GregTech_API.sBlockOres1, 1, Meta[veinLayer] + materialIndex * 1000); - } - - public boolean containsOre(short materialIndex) { - return Meta[VEIN_PRIMARY] == materialIndex || Meta[VEIN_SECONDARY] == materialIndex - || Meta[VEIN_BETWEEN] == materialIndex - || Meta[VEIN_SPORADIC] == materialIndex; - } - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/util/GT5OreSmallHelper.java b/src/main/java/pers/gwyog/gtneioreplugin/util/GT5OreSmallHelper.java deleted file mode 100644 index bed47193b9..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/util/GT5OreSmallHelper.java +++ /dev/null @@ -1,200 +0,0 @@ -package pers.gwyog.gtneioreplugin.util; - -import static pers.gwyog.gtneioreplugin.util.DimensionHelper.getDims; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import net.minecraft.item.ItemStack; - -import gregtech.api.GregTech_API; -import gregtech.api.enums.Materials; -import gregtech.api.enums.OrePrefixes; -import gregtech.api.enums.SmallOres; -import gregtech.api.util.GT_OreDictUnificator; -import gregtech.api.world.GT_Worldgen; -import gregtech.common.GT_Worldgen_GT_Ore_SmallPieces; -import gregtech.common.SmallOreBuilder; - -public class GT5OreSmallHelper { - - private static final int SMALL_ORE_BASE_META = 16000; - public static boolean restrictBiomeSupport = false; - public static final List oreSmallList = new ArrayList<>(); - public static final HashMap mapOreSmallWrapper = new HashMap<>(); - public static final HashMap mapOreDropUnlocalizedNameToOreMeta = new HashMap<>(); - public static final HashMap> mapOreMetaToOreDrops = new HashMap<>(); - public static final HashMap> bufferedDims = new HashMap<>(); - public static final HashMap dimToSmallOreWrapper = new HashMap<>(); - - public static class SmallOreDimensionWrapper { - - public final ArrayList internalDimOreList = new ArrayList<>(); - public final HashMap oreVeinToProbabilityInDimension = new HashMap<>(); - - // Calculate all weights of ore veins once dimension is initialised. - private void calculateWeights() { - int totalWeight = 0; - for (OreSmallWrapper oreVein : internalDimOreList) { - totalWeight += oreVein.amountPerChunk; - } - for (OreSmallWrapper oreVein : internalDimOreList) { - oreVeinToProbabilityInDimension - .put(oreVein, ((double) oreVein.amountPerChunk) / ((double) totalWeight)); - } - } - } - - public static void init() { - checkExtraSupport(); - ItemStack stack; - Materials material; - short meta; - Map smallOreDefMap = new HashMap<>(); - - for (SmallOres ore : SmallOres.values()) { - smallOreDefMap.put(ore.smallOreBuilder.smallOreName, ore.smallOreBuilder); - } - - for (GT_Worldgen worldGen : GregTech_API.sWorldgenList) { - if (!worldGen.mWorldGenName.startsWith("ore.small.") - || !(worldGen instanceof GT_Worldgen_GT_Ore_SmallPieces)) { - continue; - } - - GT_Worldgen_GT_Ore_SmallPieces worldGenSmallPieces = (GT_Worldgen_GT_Ore_SmallPieces) worldGen; - meta = worldGenSmallPieces.mMeta; - if (meta < 0) break; - material = GregTech_API.sGeneratedMaterials[meta]; - mapOreSmallWrapper.put( - worldGen.mWorldGenName, - new OreSmallWrapper(smallOreDefMap.get(worldGenSmallPieces.mWorldGenName))); - if (mapOreMetaToOreDrops.containsKey(meta)) { - continue; - } - - List stackList = new ArrayList<>(); - stack = GT_OreDictUnificator - .get(OrePrefixes.gemExquisite, material, GT_OreDictUnificator.get(OrePrefixes.gem, material, 1L), 1L); - if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { - mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); - stackList.add(stack); - } - stack = GT_OreDictUnificator - .get(OrePrefixes.gemFlawless, material, GT_OreDictUnificator.get(OrePrefixes.gem, material, 1L), 1L); - if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { - mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); - stackList.add(stack); - } - stack = GT_OreDictUnificator.get(OrePrefixes.gem, material, 1L); - if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { - mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); - stackList.add(stack); - } - stack = GT_OreDictUnificator - .get(OrePrefixes.gemFlawed, material, GT_OreDictUnificator.get(OrePrefixes.crushed, material, 1L), 1L); - if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { - mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); - stackList.add(stack); - } - stack = GT_OreDictUnificator.get(OrePrefixes.crushed, material, 1L); - if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { - mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); - stackList.add(stack); - } - stack = GT_OreDictUnificator.get( - OrePrefixes.gemChipped, - material, - GT_OreDictUnificator.get(OrePrefixes.dustImpure, material, 1L), - 1L); - if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { - mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); - stackList.add(stack); - } - stack = GT_OreDictUnificator.get(OrePrefixes.dustImpure, material, 1L); - if (stack != null && !mapOreDropUnlocalizedNameToOreMeta.containsKey(stack.getUnlocalizedName())) { - mapOreDropUnlocalizedNameToOreMeta.put(stack.getUnlocalizedName(), meta); - stackList.add(stack); - } - oreSmallList.add(new ItemStack(GregTech_API.sBlockOres1, 1, meta + SMALL_ORE_BASE_META)); - mapOreMetaToOreDrops.put(meta, stackList); - - } - for (OreSmallWrapper oreSmallWrapper : mapOreSmallWrapper.values()) { - bufferedDims.put(oreSmallWrapper, getDims(oreSmallWrapper)); - } - - // --- Handling of dimToOreWrapper --- - - // Get dims as "Ow,Ne,Ma" etc. - bufferedDims.forEach((veinInfo, dims) -> { - for (String dim : dims.keySet()) { - SmallOreDimensionWrapper dimensionSmallOres = dimToSmallOreWrapper - .getOrDefault(dim, new SmallOreDimensionWrapper()); - dimensionSmallOres.internalDimOreList.add(veinInfo); - dimToSmallOreWrapper.put(dim, dimensionSmallOres); - } - - // Calculate probabilities for each dim. - for (String dim : dimToSmallOreWrapper.keySet()) { - dimToSmallOreWrapper.get(dim) - .calculateWeights(); - } - }); - // --- End of handling for dimToOreWrapper --- - } - - private static void checkExtraSupport() { - Class clazzGTOreSmall = null; - try { - clazzGTOreSmall = Class.forName("gregtech.common" + ".GT_Worldgen_GT_Ore_SmallPieces"); - } catch (ClassNotFoundException ignored) {} - if (clazzGTOreSmall != null) { - try { - clazzGTOreSmall.getField("mRestrictBiome"); - restrictBiomeSupport = true; - } catch (Exception ignored) {} - } - } - - public static Materials[] getDroppedDusts() { - return new Materials[] { Materials.Stone, Materials.Netherrack, Materials.Endstone, Materials.GraniteBlack, - Materials.GraniteRed, Materials.Marble, Materials.Basalt, Materials.Stone }; - } - - public static class OreSmallWrapper { - - public final String oreGenName; - public final short oreMeta; - public final String worldGenHeightRange; - public final short amountPerChunk; - - public final Map allowedDimWithOrigNames; - - @SuppressWarnings("unused") - public Materials getOreMaterial() { - return oreMaterial; - } - - private final Materials oreMaterial; - - public OreSmallWrapper(SmallOreBuilder ore) { - this.oreGenName = ore.smallOreName; - this.oreMeta = (short) ore.ore.mMetaItemSubID; - this.worldGenHeightRange = ore.minY + "-" + ore.maxY; - this.amountPerChunk = (short) ore.amount; - this.oreMaterial = ore.ore; - - this.allowedDimWithOrigNames = ore.dimsEnabled; - } - - public List getMaterialDrops(int maximumIndex) { - List stackList = new ArrayList<>(); - for (int i = 0; i < maximumIndex; i++) - stackList.add(new ItemStack(GregTech_API.sBlockOres1, 1, oreMeta + SMALL_ORE_BASE_META + i * 1000)); - return stackList; - } - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/util/GT5UndergroundFluidHelper.java b/src/main/java/pers/gwyog/gtneioreplugin/util/GT5UndergroundFluidHelper.java deleted file mode 100644 index d08709d775..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/util/GT5UndergroundFluidHelper.java +++ /dev/null @@ -1,149 +0,0 @@ -package pers.gwyog.gtneioreplugin.util; - -import static pers.gwyog.gtneioreplugin.GTNEIOrePlugin.LOG; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import net.minecraftforge.fluids.Fluid; -import net.minecraftforge.fluids.FluidRegistry; - -import com.google.common.collect.BiMap; - -import gregtech.GT_Mod; -import gregtech.api.objects.GT_UO_Dimension; -import gregtech.api.objects.GT_UO_DimensionList; -import gregtech.api.objects.GT_UO_Fluid; - -public class GT5UndergroundFluidHelper { - - /** - * Need to store fluid name instead of fluid because fluid instance might be different between gas and liquid - */ - private static final Map> fluidMap = new HashMap<>(); - - @SuppressWarnings("unchecked") - public static void init() { - try { - Field fieldDimensionList = GT_UO_DimensionList.class.getDeclaredField("fDimensionList"); - fieldDimensionList.setAccessible(true); - BiMap dimensionList = (BiMap) fieldDimensionList - .get(GT_Mod.gregtechproxy.mUndergroundOil); - for (Map.Entry dimensionEntry : dimensionList.entrySet()) { - String rawDimension = dimensionEntry.getKey(); - String dimension; - try { - dimension = getDimensionFromID(Integer.parseInt(rawDimension)); - } catch (NumberFormatException ignored) { - dimension = getDimensionForEdgeCase(rawDimension); - if (dimension == null) { - for (int i = 0; i < DimensionHelper.DimNameTrimmed.length; i++) { - if (DimensionHelper.DimNameTrimmed[i].equalsIgnoreCase(rawDimension)) { - dimension = DimensionHelper.DimNameDisplayed[i]; - break; - } - } - } - } - if (dimension == null) { - LOG.warn("Unknown dimension found in GT5 config: " + rawDimension); - continue; - } - - Field fieldFluids = GT_UO_Dimension.class.getDeclaredField("fFluids"); - fieldFluids.setAccessible(true); - BiMap fluids = (BiMap) fieldFluids - .get(dimensionEntry.getValue()); - - int maxChance = 0; - for (Map.Entry fluidEntry : fluids.entrySet()) { - maxChance += fluidEntry.getValue().Chance; - } - - for (Map.Entry fluidEntry : fluids.entrySet()) { - Fluid fluid = FluidRegistry.getFluid(fluidEntry.getKey()); - if (fluid != null) { - UndergroundFluidWrapper wrapper = new UndergroundFluidWrapper( - dimension, - fluidEntry.getValue().Chance * 10000 / maxChance, - fluidEntry.getValue().MaxAmount, - fluidEntry.getValue().MinAmount); - if (fluidMap.containsKey(fluid.getName())) { - fluidMap.get(fluid.getName()) - .add(wrapper); - } else { - fluidMap.put(fluid.getName(), new ArrayList<>(Collections.singletonList(wrapper))); - } - } - } - } - } catch (Exception e) { - e.printStackTrace(); - } - - for (List wrappers : fluidMap.values()) { - wrappers.sort( - Comparator.comparingInt( - w -> Arrays.asList(DimensionHelper.DimNameDisplayed) - .indexOf(w.dimension))); - } - } - - public static List getEntry(String fluidName) { - return fluidMap.get(fluidName); - } - - public static Map> getAllEntries() { - return fluidMap; - } - - @SuppressWarnings("SwitchStatementWithTooFewBranches") - private static String getDimensionFromID(int id) { - return switch (id) { - case 0 -> "Ow"; - default -> null; - }; - } - - private static String getDimensionForEdgeCase(String rawDimension) { - return switch (rawDimension) { - case "aCentauriBb" -> "CB"; - case "BarnardaC" -> "BC"; - case "BarnardaE" -> "BE"; - case "BarnardaF" -> "BF"; - case "TCetiE" -> "TE"; - default -> { - LOG.warn("Unknown dimension name while parsing: " + rawDimension); - yield null; - } - }; - } - - public static class UndergroundFluidWrapper { - - /** - * Using {@link DimensionHelper#DimNameDisplayed} - */ - public final String dimension; - /** - * Chance of this fluid field being generated. 10000 means 100% of the dimension - */ - public final int chance; - - public final int maxAmount; - public final int minAmount; - - public UndergroundFluidWrapper(String dimension, int chance, int maxAmount, int minAmount) { - this.dimension = dimension; - this.chance = chance; - this.maxAmount = maxAmount; - this.minAmount = minAmount; - } - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/util/OreVeinLayer.java b/src/main/java/pers/gwyog/gtneioreplugin/util/OreVeinLayer.java deleted file mode 100644 index 3aaba2d1e4..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/util/OreVeinLayer.java +++ /dev/null @@ -1,18 +0,0 @@ -package pers.gwyog.gtneioreplugin.util; - -public class OreVeinLayer { - - public static final int VEIN_PRIMARY = 0; - public static final int VEIN_SECONDARY = 1; - public static final int VEIN_BETWEEN = 2; - public static final int VEIN_SPORADIC = 3; - - private static final String[] LAYER_NAMES = { "gtnop.gui.nei.primaryOre", "gtnop.gui.nei.secondaryOre", - "gtnop.gui.nei.betweenOre", "gtnop.gui" + ".nei.sporadicOre" }; - - public static String getOreVeinLayerName(int layerId) { - return LAYER_NAMES[layerId]; - } - - private OreVeinLayer() {} -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/util/Oremix.java b/src/main/java/pers/gwyog/gtneioreplugin/util/Oremix.java deleted file mode 100644 index aba9497dbe..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/util/Oremix.java +++ /dev/null @@ -1,121 +0,0 @@ -package pers.gwyog.gtneioreplugin.util; - -import static pers.gwyog.gtneioreplugin.util.DimensionHelper.DimNameDisplayed; - -import java.util.Map; - -public class Oremix implements Comparable { - - private String oreMixName; - - private String primary = ""; - - private String secondary = ""; - - private String inbetween = ""; - - private String sporadic = ""; - - private String oreMixIDs = ""; - - private String height = ""; - - private int density; - - private int size; - - private int weight; - - private static final int sizeData = 10; // hors dims - - private Map dimensions; - - public void setDims(Map dims) { - this.dimensions = dims; - } - - public String getOreMixName() { - return this.oreMixName; - } - - public void setOreMixName(String s) { - this.oreMixName = s; - } - - public void setPrimary(String s) { - this.primary = s; - } - - public void setSecondary(String s) { - this.secondary = s; - } - - public void setInbetween(String s) { - this.inbetween = s; - } - - public void setSporadic(String s) { - this.sporadic = s; - } - - public void setOreMixIDs(String s) { - this.oreMixIDs = s; - } - - public void setHeight(String s) { - this.height = s; - } - - public void setDensity(int i) { - this.density = i; - } - - public void setSize(int i) { - this.size = i; - } - - public void setWeight(int i) { - this.weight = i; - } - - @Override - public int compareTo(Oremix ore) { - return ore.oreMixName.compareTo(ore.oreMixName); - } - - public static String getCsvHeader() { - String[] headers = new String[sizeData + DimNameDisplayed.length]; - headers[0] = "Ore Mix Name"; - headers[1] = "Primary Ore"; - headers[2] = "Secondary Ore"; - headers[3] = "InBetween Ore"; - headers[4] = "Sporadic Ore"; - headers[5] = "Ore Meta IDs"; - headers[6] = "Height"; - headers[7] = "Density"; - headers[8] = "Size"; - headers[9] = "Weight"; - for (int i = 0; i < DimNameDisplayed.length; i++) { - headers[sizeData + i] = DimensionHelper.getFullName(DimNameDisplayed[i]); - } - return String.join(",", headers); - } - - public String getCsvEntry() { - String[] values = new String[sizeData + DimNameDisplayed.length]; - values[0] = oreMixName; - values[1] = primary; - values[2] = secondary; - values[3] = inbetween; - values[4] = sporadic; - values[5] = oreMixIDs; - values[6] = height; - values[7] = Integer.toString(density); - values[8] = Integer.toString(size); - values[9] = Integer.toString(weight); - for (int i = 0; i < DimNameDisplayed.length; i++) { - values[sizeData + i] = Boolean.toString(dimensions.getOrDefault(DimNameDisplayed[i], false)); - } - return String.join(",", values); - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/util/SmallOre.java b/src/main/java/pers/gwyog/gtneioreplugin/util/SmallOre.java deleted file mode 100644 index 75a691ad1c..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/util/SmallOre.java +++ /dev/null @@ -1,82 +0,0 @@ -package pers.gwyog.gtneioreplugin.util; - -import static pers.gwyog.gtneioreplugin.util.DimensionHelper.DimNameDisplayed; - -import java.util.Map; - -@SuppressWarnings("unused") -public class SmallOre implements Comparable { - - private String oreName; - private int oreMeta; - private int amount; - private String height = ""; - private static final int sizeData = 4; // hors dims - - private Map dimensions; - - public void setDims(Map dims) { - this.dimensions = dims; - } - - public String getOreName() { - return this.oreName; - } - - public void setOreName(String s) { - this.oreName = s; - } - - public int getOreMeta() { - return this.oreMeta; - } - - public void setOreMeta(int meta) { - this.oreMeta = meta; - } - - public String getHeight() { - return this.height; - } - - public void setHeight(String s) { - this.height = s; - } - - public void setAmount(int i) { - this.amount = i; - } - - public int getAmount() { - return this.amount; - } - - public static String getCsvHeader() { - String[] headers = new String[sizeData + DimNameDisplayed.length]; - headers[0] = "Ore Name"; - headers[1] = "Block Meta"; - headers[2] = "Height"; - headers[3] = "Amount Per Chunk"; - for (int i = 0; i < DimNameDisplayed.length; i++) { - headers[sizeData + i] = DimensionHelper.getFullName(DimNameDisplayed[i]); - } - return String.join(",", headers); - } - - public String getCsvEntry() { - String[] values = new String[sizeData + DimNameDisplayed.length]; - values[0] = oreName; - values[1] = Integer.toString(oreMeta); - values[2] = getHeight(); - values[3] = Integer.toString(amount); - for (int i = 0; i < DimNameDisplayed.length; i++) { - values[sizeData + i] = Boolean.toString(dimensions.getOrDefault(DimNameDisplayed[i], false)); - } - return String.join(",", values); - } - - @Override - public int compareTo(SmallOre other) { - return oreName.compareTo(other.oreName); - } -} diff --git a/src/main/java/pers/gwyog/gtneioreplugin/util/StringPaddingHack.java b/src/main/java/pers/gwyog/gtneioreplugin/util/StringPaddingHack.java deleted file mode 100644 index 3f6d3fa387..0000000000 --- a/src/main/java/pers/gwyog/gtneioreplugin/util/StringPaddingHack.java +++ /dev/null @@ -1,131 +0,0 @@ -package pers.gwyog.gtneioreplugin.util; - -import java.util.Arrays; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; - -import com.google.common.base.Strings; - -public class StringPaddingHack { - - private static final int SPACE_WIDTH = 4; - private static final int BOLD_SPACE_WIDTH = 5; - - /** - * Given a list of strings, arrange them into the requested number of columns with the specified spacing. Up to 3 - * additional spaces might be added between columns because this function relies on quirky font behaviors. - * - * @param strings List of strings to wrap into columns - * @param numColumns Number of columns, minimum of 1 - * @param minColumnSpacing Minimum amount of extra spaces between columns. - * @return strings wrapped into columns - */ - public static String[] stringsToSpacedColumns(String[] strings, int numColumns, int minColumnSpacing) { - if (numColumns < 1) { - throw new IllegalArgumentException( - String.format("Argument numColumns must be 1 or higher, got value %d", numColumns)); - } - if (numColumns > 1) { - int sliceSize = strings.length / numColumns; - int remainder = strings.length % numColumns; - String[][] columns = new String[numColumns][]; - int totalExtra = 0; - - // Arrange all strings into their proper columns so that the list of strings wraps through all columns - for (int i = 0; i < numColumns; i++) { - int extra = 0; - if (remainder > 0) { - remainder--; - extra = 1; - } - columns[i] = Arrays - .copyOfRange(strings, (sliceSize * i) + totalExtra, (sliceSize * (i + 1) + totalExtra + extra)); - - totalExtra += extra; - } - - // Add extra padding to all but the last columns to align the text - for (int i = 0; i < numColumns - 1; i++) { - columns[i] = padStrings(columns[i], minColumnSpacing); - } - - // Concatenate all columns into the final result - strings = columns[0]; - for (int i = 0; i < sliceSize; i++) { - for (int j = 1; j < numColumns; j++) { - strings[i] += columns[j][i]; - } - } - } - - return strings; - } - - /** - * Pads strings with spaces so that they are of equal length and adds to that the number of spaces specified and up - * to 3 if minExtraSpaces is below 3. Added spaces might be bold. - *

- * Relies on the quirk of bold space characters being 1 pixel wider than regular space characters in the default - * font renderer. - * - * @param strings List of strings - * @param minExtraSpaces The minimum number of extra spaces to add - * @return Array of strings padded with spaces to an equal length - */ - public static String[] padStrings(String[] strings, int minExtraSpaces) { - int[] widths = getStringWidths(strings); - int maxUnPaddedStrLength = 0; - int numSpacesAddedToLongestString = 0; - int maxPaddedStrLength = 0; - - // Making string width a multiple of 4 by adding bold spaces of width 5 - for (int i = 0; i < strings.length; i++) { - int mod = widths[i] % SPACE_WIDTH; - int numBoldSpacesToAdd = (SPACE_WIDTH - mod) % SPACE_WIDTH; - - // Keep track of the number of spaces added to the longest string - if (widths[i] > maxUnPaddedStrLength) { - numSpacesAddedToLongestString = numBoldSpacesToAdd; - maxUnPaddedStrLength = widths[i]; - } - - strings[i] += "§l" + Strings.repeat(" ", numBoldSpacesToAdd) + "§r"; - widths[i] += numBoldSpacesToAdd * BOLD_SPACE_WIDTH; - - // Keep track of the current widest string we currently have - if (widths[i] > maxPaddedStrLength) { - maxPaddedStrLength = widths[i]; - } - } - - // Make sure we pad at least up to the desired number of spaces from the longest string - if (numSpacesAddedToLongestString < minExtraSpaces) { - maxPaddedStrLength += (minExtraSpaces - numSpacesAddedToLongestString) * SPACE_WIDTH; - } - - // Add required spaces to equalize length of all strings to at least the target width - for (int i = 0; i < strings.length; i++) { - int numSpacesToAdd = (maxPaddedStrLength - widths[i]) / SPACE_WIDTH; - strings[i] += Strings.repeat(" ", numSpacesToAdd); - widths[i] += numSpacesToAdd * SPACE_WIDTH; - } - - return strings; - } - - /** - * Returns an array of font widths for the given array of strings - * - * @param strList Array of strings - * @return Array of font widths - */ - protected static int[] getStringWidths(String[] strList) { - FontRenderer font = Minecraft.getMinecraft().fontRenderer; - int[] widths = new int[strList.length]; - for (int i = 0; i < strList.length; ++i) { - widths[i] = font.getStringWidth(strList[i]); - } - return widths; - } -} diff --git a/src/main/java/tectech/Reference.java b/src/main/java/tectech/Reference.java new file mode 100644 index 0000000000..a0ac472954 --- /dev/null +++ b/src/main/java/tectech/Reference.java @@ -0,0 +1,16 @@ +package tectech; + +import gregtech.GT_Version; +import gregtech.api.enums.Mods; + +public final class Reference { + + public static final String MODID = Mods.Names.TECTECH; + public static final String NAME = "TecTech - Tec Technology!"; + public static final String VERSION = GT_Version.VERSION; + public static final String COLLECTIONNAME = "TecTech"; + public static final String CLIENTSIDE = "tectech.proxy.ClientProxy"; + public static final String SERVERSIDE = "tectech.proxy.CommonProxy"; + + private Reference() {} +} diff --git a/src/main/java/tectech/TecTech.java b/src/main/java/tectech/TecTech.java new file mode 100644 index 0000000000..503f6ff35c --- /dev/null +++ b/src/main/java/tectech/TecTech.java @@ -0,0 +1,119 @@ +package tectech; + +import static gregtech.api.enums.Mods.COFHCore; + +import net.minecraftforge.common.MinecraftForge; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.SidedProxy; +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 eu.usrv.yamcore.auxiliary.IngameErrorLog; +import eu.usrv.yamcore.auxiliary.LogHelper; +import gregtech.api.objects.XSTR; +import tectech.loader.MainLoader; +import tectech.loader.TecTechConfig; +import tectech.loader.gui.CreativeTabTecTech; +import tectech.loader.thing.MuTeLoader; +import tectech.mechanics.enderStorage.EnderWorldSavedData; +import tectech.proxy.CommonProxy; +import tectech.recipe.EyeOfHarmonyRecipeStorage; +import tectech.recipe.TecTechRecipeMaps; + +@Mod( + modid = Reference.MODID, + name = Reference.NAME, + version = Reference.VERSION, + dependencies = "required-after:Forge@[10.13.4.1614,);" + "required-after:YAMCore@[0.5.70,);" + + "required-after:structurelib;" + + "after:ComputerCraft;" + + "after:OpenComputers;" + + "required-after:gtneioreplugin;" + + "required-after:gregtech;" + + "after:dreamcraft;" + + "after:appliedenergistics2;" + + "after:CoFHCore;" + + "after:Thaumcraft;") +public class TecTech { + + @SidedProxy(clientSide = Reference.CLIENTSIDE, serverSide = Reference.SERVERSIDE) + public static CommonProxy proxy; + + @Mod.Instance(Reference.MODID) + public static TecTech instance; + + public static final XSTR RANDOM = XSTR.XSTR_INSTANCE; + public static final LogHelper LOGGER = new LogHelper(Reference.MODID); + public static CreativeTabTecTech creativeTabTecTech; + + public static TecTechConfig configTecTech; + + public static EnderWorldSavedData enderWorldSavedData; + + /** + * For Loader.isModLoaded checks during the runtime + */ + public static boolean hasCOFH = false; + + public static final byte tectechTexturePage1 = 8; + + @Mod.EventHandler + @SuppressWarnings("unused") + public void PreLoad(FMLPreInitializationEvent PreEvent) { + LOGGER.setDebugOutput(true); + + configTecTech = new TecTechConfig( + PreEvent.getModConfigurationDirectory(), + Reference.COLLECTIONNAME, + Reference.MODID); + + if (!configTecTech.LoadConfig()) { + LOGGER.error(Reference.MODID + " could not load its config file. Things are going to be weird!"); + } + + if (configTecTech.MOD_ADMIN_ERROR_LOGS) { + LOGGER.setDebugOutput(TecTechConfig.DEBUG_MODE); + LOGGER.debug("moduleAdminErrorLogs is enabled"); + IngameErrorLog moduleAdminErrorLogs = new IngameErrorLog(); + } + + enderWorldSavedData = new EnderWorldSavedData(); + FMLCommonHandler.instance() + .bus() + .register(enderWorldSavedData); + MinecraftForge.EVENT_BUS.register(enderWorldSavedData); + TecTechEventHandlers.init(); + + TecTechRecipeMaps.init(); + MainLoader.preLoad(); + new MuTeLoader().run(); + } + + @Mod.EventHandler + @SuppressWarnings("unused") + public void Load(FMLInitializationEvent event) { + hasCOFH = COFHCore.isModLoaded(); + + MainLoader.load(); + MainLoader.addAfterGregTechPostLoadRunner(); + } + + @Mod.EventHandler + @SuppressWarnings("unused") + public void PostLoad(FMLPostInitializationEvent PostEvent) { + MainLoader.postLoad(); + } + + @Mod.EventHandler + @SuppressWarnings("unused") + public void onLoadCompleted(FMLLoadCompleteEvent event) { + eyeOfHarmonyRecipeStorage = new EyeOfHarmonyRecipeStorage(); + MainLoader.onLoadCompleted(); + } + + public static EyeOfHarmonyRecipeStorage eyeOfHarmonyRecipeStorage = null; + +} diff --git a/src/main/java/tectech/TecTechEventHandlers.java b/src/main/java/tectech/TecTechEventHandlers.java new file mode 100644 index 0000000000..97808e1b93 --- /dev/null +++ b/src/main/java/tectech/TecTechEventHandlers.java @@ -0,0 +1,23 @@ +package tectech; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import cpw.mods.fml.common.gameevent.TickEvent.Phase; +import cpw.mods.fml.common.gameevent.TickEvent.ServerTickEvent; +import tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil; + +public class TecTechEventHandlers { + + public static void init() { + FMLCommonHandler.instance() + .bus() + .register(new TecTechEventHandlers()); + } + + @SubscribeEvent + public void onServerTickEnd(ServerTickEvent event) { + if (event.phase == Phase.END) { + TeslaUtil.housekeep(); + } + } +} diff --git a/src/main/java/tectech/compatibility/openComputers/AvrArchitecture.java b/src/main/java/tectech/compatibility/openComputers/AvrArchitecture.java new file mode 100644 index 0000000000..c12ac0e754 --- /dev/null +++ b/src/main/java/tectech/compatibility/openComputers/AvrArchitecture.java @@ -0,0 +1,307 @@ +package tectech.compatibility.openComputers; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +import org.apache.commons.compress.utils.IOUtils; + +import com.github.technus.avrClone.AvrCore; +import com.github.technus.avrClone.instructions.ExecutionEvent; +import com.github.technus.avrClone.instructions.InstructionRegistry; +import com.github.technus.avrClone.instructions.exceptions.DebugEvent; +import com.github.technus.avrClone.instructions.exceptions.DelayEvent; +import com.github.technus.avrClone.memory.EepromMemory; +import com.github.technus.avrClone.memory.RemovableMemory; +import com.github.technus.avrClone.memory.program.ProgramMemory; + +import li.cil.oc.Settings; +import li.cil.oc.api.Driver; +import li.cil.oc.api.driver.Item; +import li.cil.oc.api.driver.item.Memory; +import li.cil.oc.api.machine.Architecture; +import li.cil.oc.api.machine.ExecutionResult; +import li.cil.oc.api.machine.Machine; +import li.cil.oc.api.machine.Signal; +import li.cil.oc.common.SaveHandler; +import tectech.TecTech; +import tectech.util.Converter; + +@Architecture.Name("AVR 32Bit Clone") +@Architecture.NoMemoryRequirements +public class AvrArchitecture implements Architecture { + + private final Machine machine; + private AvrCore core; + private boolean debugRun; + private int delay; + private int[] tempData; + private int memSize; + + public AvrArchitecture(Machine machine) { + this.machine = machine; + } + + @Override + public boolean isInitialized() { + return core != null && core.checkValid(); + } + + @Override + public boolean recomputeMemory(Iterable components) { + computeMemory(components); + return true; + } + + private void computeMemory(Iterable components) { + int memory = 0; + for (ItemStack component : components) { + Item driver = Driver.driverFor(component); + if (driver instanceof Memory memoryDriver) { + memory += memoryDriver.amount(component) * 256; // in integers + } // else if (driver instanceof DriverEEPROM$) { + + // } + } + memory = Math.min( + Math.max(memory, 0), + Settings.get() + .maxTotalRam()); + if (memory != memSize) {} + } + + @Override + public boolean initialize() { + core = new AvrCore(); + + computeMemory( + this.machine.host() + .internalComponents()); + + if (isInitialized()) { + machine.beep("."); + return true; + } + return false; + } + + @Override + public void close() { + core = null; + tempData = null; + delay = 0; + } + + @Override + public void runSynchronized() { + core.cycle(); + } + + @Override + public ExecutionResult runThreaded(boolean isSynchronizedReturn) { + if (core.awoken) { + delay = 0; + for (int load = 0; load < 512;) { + load += core.getInstruction() + .getCost(core); + ExecutionEvent executionEvent = core.cpuCycleForce(); + if (executionEvent != null) { + if (executionEvent.throwable instanceof DelayEvent) { + delay = executionEvent.data[0]; + break; + } else if (executionEvent.throwable instanceof DebugEvent) { + if (debugRun) { + // aBaseMetaTileEntity.setActive(false); + break; + } + } + } + } + } else if (delay > 0) { + delay--; + if (delay == 0) { + core.awoken = true; + } + } + return null; + } + + @Override + public void onSignal() { + Signal signal = machine.popSignal(); + + core.interruptsHandle(); + } + + @Override + public void onConnect() { + // init network components, in case init was called from load logic (pre first tick?) + } + + @Override + public void load(NBTTagCompound avr) { + debugRun = avr.getBoolean("debugRun"); + delay = avr.getInteger("delay"); + core.active = avr.getBoolean("active"); + core.awoken = (avr.getBoolean("awoken")); + core.programCounter = avr.getInteger("programCounter"); + InstructionRegistry registry = InstructionRegistry.REGISTRIES.get(avr.getString("instructionRegistry")); + if (registry != null) { + byte[] instructions = SaveHandler.load( + avr, + this.machine.node() + .address() + "_instructionsMemory"); + byte[] param0 = SaveHandler.load( + avr, + this.machine.node() + .address() + "_param0Memory"); + byte[] param1 = SaveHandler.load( + avr, + this.machine.node() + .address() + "_param1Memory"); + if (instructions != null && param0 != null + && param1 != null + && instructions.length > 0 + && param0.length > 0 + && param1.length > 0) { + int[] instr = null, par0 = null, par1 = null; + try { + GZIPInputStream gzis = new GZIPInputStream(new ByteArrayInputStream(instructions)); + instr = Converter.readInts(IOUtils.toByteArray(gzis)); + IOUtils.closeQuietly(gzis); + } catch (IOException e) { + TecTech.LOGGER.error("Failed to decompress instructions memory from disk."); + e.printStackTrace(); + } + try { + GZIPInputStream gzis = new GZIPInputStream(new ByteArrayInputStream(param0)); + par0 = Converter.readInts(IOUtils.toByteArray(gzis)); + IOUtils.closeQuietly(gzis); + } catch (IOException e) { + TecTech.LOGGER.error("Failed to decompress param0 memory from disk."); + e.printStackTrace(); + } + try { + GZIPInputStream gzis = new GZIPInputStream(new ByteArrayInputStream(param1)); + par1 = Converter.readInts(IOUtils.toByteArray(gzis)); + IOUtils.closeQuietly(gzis); + } catch (IOException e) { + TecTech.LOGGER.error("Failed to decompress param1 memory from disk."); + e.printStackTrace(); + } + if (instr != null && par0 != null + && par1 != null + && instr.length == par0.length + && instr.length == par1.length) { + core.setProgramMemory(new ProgramMemory(registry, avr.getBoolean("immersive"), instr, par0, par1)); + } + } + } + if (avr.hasKey("eepromSize")) { + core.restoreEepromDefinition(EepromMemory.make(avr.getInteger("eepromSize"))); + } + byte[] data = SaveHandler.load( + avr, + this.machine.node() + .address() + "_dataMemory"); + if (data != null && data.length > 0) { + try { + GZIPInputStream gzis = new GZIPInputStream(new ByteArrayInputStream(data)); + tempData = Converter.readInts(IOUtils.toByteArray(gzis)); + IOUtils.closeQuietly(gzis); + } catch (IOException e) { + TecTech.LOGGER.error("Failed to decompress data memory from disk."); + e.printStackTrace(); + } + } + core.checkValid(); + } + + @Override + public void save(NBTTagCompound avr) { + avr.setBoolean("debugRun", debugRun); + avr.setInteger("delay", delay); + avr.setBoolean("active", core.active); + avr.setBoolean("awoken", core.awoken); + avr.setInteger("programCounter", core.programCounter); + ProgramMemory programMemory = core.getProgramMemory(); + if (programMemory != null) { + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + GZIPOutputStream gzos = new GZIPOutputStream(baos); + gzos.write(Converter.writeInts(programMemory.instructions)); + gzos.close(); + SaveHandler.scheduleSave( + machine.host(), + avr, + machine.node() + .address() + "_instructionsMemory", + baos.toByteArray()); + } catch (IOException e) { + TecTech.LOGGER.error("Failed to compress instructions memory to disk"); + e.printStackTrace(); + } + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + GZIPOutputStream gzos = new GZIPOutputStream(baos); + gzos.write(Converter.writeInts(programMemory.param0)); + gzos.close(); + SaveHandler.scheduleSave( + machine.host(), + avr, + machine.node() + .address() + "_param0Memory", + baos.toByteArray()); + } catch (IOException e) { + TecTech.LOGGER.error("Failed to compress param0 memory to disk"); + e.printStackTrace(); + } + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + GZIPOutputStream gzos = new GZIPOutputStream(baos); + gzos.write(Converter.writeInts(programMemory.param1)); + gzos.close(); + SaveHandler.scheduleSave( + machine.host(), + avr, + machine.node() + .address() + "_param1Memory", + baos.toByteArray()); + } catch (IOException e) { + TecTech.LOGGER.error("Failed to compress param1 memory to disk"); + e.printStackTrace(); + } + avr.setBoolean("immersive", programMemory.immersiveOperands); + avr.setString("instructionRegistry", programMemory.registry.toString()); + } + RemovableMemory eeprom = core.getEepromMemory(); + if (eeprom != null) { + avr.setInteger( + "eepromSize", + eeprom.getDefinition() + .getSize()); + } + if (core.dataMemory != null) { + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + GZIPOutputStream gzos = new GZIPOutputStream(baos); + gzos.write(Converter.writeInts(core.dataMemory)); + gzos.close(); + SaveHandler.scheduleSave( + machine.host(), + avr, + machine.node() + .address() + "_dataMemory", + baos.toByteArray()); + } catch (IOException e) { + TecTech.LOGGER.error("Failed to compress data memory to disk"); + e.printStackTrace(); + } + } + } +} diff --git a/src/main/java/tectech/loader/MainLoader.java b/src/main/java/tectech/loader/MainLoader.java new file mode 100644 index 0000000000..801653ca4b --- /dev/null +++ b/src/main/java/tectech/loader/MainLoader.java @@ -0,0 +1,206 @@ +package tectech.loader; + +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.enums.Mods.TwilightForest; +import static tectech.TecTech.LOGGER; +import static tectech.TecTech.configTecTech; +import static tectech.TecTech.creativeTabTecTech; +import static tectech.TecTech.proxy; +import static tectech.loader.TecTechConfig.DEBUG_MODE; + +import java.util.HashMap; + +import net.minecraft.block.Block; +import net.minecraft.util.DamageSource; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import cpw.mods.fml.common.ProgressManager; +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Materials; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.util.GTRecipe; +import tectech.TecTech; +import tectech.loader.gui.CreativeTabTecTech; +import tectech.loader.recipe.BaseRecipeLoader; +import tectech.loader.recipe.ResearchStationAssemblyLine; +import tectech.loader.thing.CoverLoader; +import tectech.loader.thing.MachineLoader; +import tectech.loader.thing.ThingsLoader; +import tectech.thing.casing.TTCasingsContainer; +import tectech.thing.metaTileEntity.Textures; + +@SuppressWarnings("deprecation") +public final class MainLoader { + + public static DamageSource microwaving; + + private MainLoader() {} + + public static void preLoad() { + creativeTabTecTech = new CreativeTabTecTech("TecTech"); + + // set expanded texture arrays for tiers + try { + Textures.run(); + } catch (Throwable t) { + LOGGER.error("Loading textures...", t); + } + } + + public static void load() { + ProgressManager.ProgressBar progressBarLoad = ProgressManager.push("TecTech Loader", 6); + + progressBarLoad.step("Regular Things"); + new ThingsLoader().run(); + LOGGER.info("Block/Item Init Done"); + + progressBarLoad.step("Machine Things"); + new MachineLoader().run(); + LOGGER.info("Machine Init Done"); + + progressBarLoad.step("Cover Things"); + new CoverLoader().run(); + LOGGER.info("Cover Init Done"); + + progressBarLoad.step("Add damage types"); + microwaving = new DamageSource("microwaving").setDamageBypassesArmor(); + LOGGER.info("Damage types addition Done"); + + progressBarLoad.step("Register Packet Dispatcher"); + new NetworkDispatcher(); + LOGGER.info("Packet Dispatcher registered"); + + progressBarLoad.step("Register GUI Handler"); + proxy.registerRenderInfo(); + LOGGER.info("GUI Handler registered"); + + ProgressManager.pop(progressBarLoad); + } + + public static void postLoad() { + ProgressManager.ProgressBar progressBarPostLoad = ProgressManager.push("TecTech Post Loader", 4); + + progressBarPostLoad.step("Dreamcraft Compatibility"); + if (NewHorizonsCoreMod.isModLoaded()) { + try { + Class clazz = Class.forName("com.dreammaster.gthandler.casings.GT_Container_CasingsNH"); + TTCasingsContainer.sBlockCasingsNH = (Block) clazz.getField("sBlockCasingsNH") + .get(null); + + if (TTCasingsContainer.sBlockCasingsNH == null) { + throw new NullPointerException("sBlockCasingsNH Is not set at this time"); + } + } catch (Exception e) { + throw new Error("Unable to get NH casings", e); + } + } + + progressBarPostLoad.step("Recipes"); + new BaseRecipeLoader().run(); + TecTech.LOGGER.info("Recipe Init Done"); + + if (!configTecTech.DISABLE_BLOCK_HARDNESS_NERF) { + progressBarPostLoad.step("Nerf blocks blast resistance"); + adjustTwilightBlockResistance(); + TecTech.LOGGER.info("Blocks nerf done"); + } else { + progressBarPostLoad.step("Do not nerf blocks blast resistance"); + TecTech.LOGGER.info("Blocks were not nerfed"); + } + + // ProgressManager.pop(progressBarPostLoad); + } + + public static void addAfterGregTechPostLoadRunner() { + GregTechAPI.sAfterGTPostload.add(() -> { + if (TecTech.configTecTech.NERF_FUSION) { + FixBrokenFusionRecipes(); + } + }); + } + + private static void FixBrokenFusionRecipes() { + HashMap binds = new HashMap<>(); + for (Materials material : Materials.values()) { + FluidStack p = material.getPlasma(1); + if (p != null) { + if (DEBUG_MODE) { + LOGGER.info("Found Plasma of " + material.mName); + } + if (material.mElement != null && (material.mElement.mProtons >= Materials.Iron.mElement.mProtons + || -material.mElement.mProtons >= Materials.Iron.mElement.mProtons + || material.mElement.mNeutrons >= Materials.Iron.mElement.mNeutrons + || -material.mElement.mNeutrons >= Materials.Iron.mElement.mNeutrons)) { + if (DEBUG_MODE) { + LOGGER.info("Attempting to bind " + material.mName); + } + if (material.getMolten(1) != null) { + binds.put( + p.getFluid(), + material.getMolten(1) + .getFluid()); + } else if (material.getGas(1) != null) { + binds.put( + p.getFluid(), + material.getGas(1) + .getFluid()); + } else if (material.getFluid(1) != null) { + binds.put( + p.getFluid(), + material.getFluid(1) + .getFluid()); + } else { + binds.put( + p.getFluid(), + Materials.Iron.getMolten(1) + .getFluid()); + } + } + } + } + for (GTRecipe r : RecipeMaps.fusionRecipes.getAllRecipes()) { + Fluid fluid = binds.get(r.mFluidOutputs[0].getFluid()); + if (fluid != null) { + if (DEBUG_MODE) { + LOGGER.info("Nerfing Recipe " + r.mFluidOutputs[0].getUnlocalizedName()); + } + r.mFluidOutputs[0] = new FluidStack(fluid, r.mFluidOutputs[0].amount); + } + fluid = binds.get(r.mFluidInputs[0].getFluid()); + if (fluid != null) { + if (DEBUG_MODE) { + LOGGER.info("Fixing plasma use in Recipe " + r.mFluidInputs[0].getUnlocalizedName()); + } + r.mFluidInputs[0] = new FluidStack(fluid, r.mFluidInputs[0].amount); + } + fluid = binds.get(r.mFluidInputs[1].getFluid()); + if (fluid != null) { + if (DEBUG_MODE) { + LOGGER.info("Fixing plasma use in Recipe " + r.mFluidInputs[1].getUnlocalizedName()); + } + r.mFluidInputs[1] = new FluidStack(fluid, r.mFluidInputs[1].amount); + } + } + } + + private static void safeSetResistance(Block block, float resistance) { + if (block != null) { + block.setResistance(resistance); + } + } + + private static void adjustTwilightBlockResistance() { + if (TwilightForest.isModLoaded()) { + safeSetResistance(GameRegistry.findBlock("TwilightForest", "tile.TFShield"), 30); + safeSetResistance(GameRegistry.findBlock("TwilightForest", "tile.TFThorns"), 10); + safeSetResistance(GameRegistry.findBlock("TwilightForest", "tile.TFTowerTranslucent"), 30); + safeSetResistance(GameRegistry.findBlock("TwilightForest", "tile.TFDeadrock"), 5); + } + } + + public static void onLoadCompleted() { + new ResearchStationAssemblyLine().runLateRecipes(); + } +} diff --git a/src/main/java/tectech/loader/NetworkDispatcher.java b/src/main/java/tectech/loader/NetworkDispatcher.java new file mode 100644 index 0000000000..dd46715450 --- /dev/null +++ b/src/main/java/tectech/loader/NetworkDispatcher.java @@ -0,0 +1,25 @@ +package tectech.loader; + +import static tectech.Reference.MODID; + +import tectech.mechanics.pipe.PipeActivityMessage; +import tectech.mechanics.spark.RendererMessage; + +public class NetworkDispatcher extends eu.usrv.yamcore.network.PacketDispatcher { + + public static NetworkDispatcher INSTANCE; + + public NetworkDispatcher() { + super(MODID); + INSTANCE = this; + registerPackets(); + } + + @Override + public void registerPackets() { + registerMessage(PipeActivityMessage.ServerHandler.class, PipeActivityMessage.PipeActivityQuery.class); + registerMessage(PipeActivityMessage.ClientHandler.class, PipeActivityMessage.PipeActivityData.class); + + registerMessage(RendererMessage.ClientHandler.class, RendererMessage.RendererData.class); + } +} diff --git a/src/main/java/tectech/loader/TecTechConfig.java b/src/main/java/tectech/loader/TecTechConfig.java new file mode 100644 index 0000000000..06ded34e01 --- /dev/null +++ b/src/main/java/tectech/loader/TecTechConfig.java @@ -0,0 +1,271 @@ +package tectech.loader; + +import java.io.File; + +import net.minecraft.launchwrapper.Launch; + +import eu.usrv.yamcore.config.ConfigManager; + +public class TecTechConfig extends ConfigManager { + + public TecTechConfig(File pConfigBaseDirectory, String pModCollectionDirectory, String pModID) { + super(pConfigBaseDirectory, pModCollectionDirectory, pModID); + } + + // final static to allow compiler to remove the debug code when this is false + public static boolean DEBUG_MODE = false; + public static boolean POWERLESS_MODE = false; + /** + * Not complete; enabled by default only in dev env + */ + public boolean ENABLE_GOD_FORGE; + + public boolean BOOM_ENABLE; + public boolean DISABLE_BLOCK_HARDNESS_NERF; + public boolean EASY_SCAN; + public boolean NERF_FUSION; + public boolean ENABLE_TURRET_EXPLOSIONS; + public float TURRET_DAMAGE_FACTOR; + public float TURRET_EXPLOSION_FACTOR; + + public boolean MOD_ADMIN_ERROR_LOGS; + + public boolean TESLA_MULTI_GAS_OUTPUT; + public float TESLA_MULTI_LOSS_FACTOR_OVERDRIVE; + public int TESLA_MULTI_LOSS_PER_BLOCK_T0; + public int TESLA_MULTI_LOSS_PER_BLOCK_T1; + public int TESLA_MULTI_LOSS_PER_BLOCK_T2; + public int TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM; + public int TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN; + public int TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON; + public int TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1; + public int TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2; + public int TESLA_MULTI_RANGE_COVER; + public int TESLA_MULTI_RANGE_TOWER; + public int TESLA_MULTI_RANGE_TRANSCEIVER; + public float TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE; + public int TESLA_SINGLE_LOSS_PER_BLOCK; + public int TESLA_SINGLE_RANGE; + public boolean TESLA_VISUAL_EFFECT; + + /** + * This loading phases do not correspond to mod loading phases! + */ + @Override + protected void PreInit() { + + BOOM_ENABLE = true; + DISABLE_BLOCK_HARDNESS_NERF = false; + EASY_SCAN = false; + NERF_FUSION = false; + ENABLE_TURRET_EXPLOSIONS = true; + TURRET_DAMAGE_FACTOR = 10; + TURRET_EXPLOSION_FACTOR = 1; + + MOD_ADMIN_ERROR_LOGS = false; + + TESLA_MULTI_GAS_OUTPUT = false; + TESLA_MULTI_LOSS_FACTOR_OVERDRIVE = 0.25F; + TESLA_MULTI_LOSS_PER_BLOCK_T0 = 1; + TESLA_MULTI_LOSS_PER_BLOCK_T1 = 1; + TESLA_MULTI_LOSS_PER_BLOCK_T2 = 1; + TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM = 100; + TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN = 50; + TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON = 50; + TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1 = 2; + TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2 = 4; + TESLA_MULTI_RANGE_COVER = 16; + TESLA_MULTI_RANGE_TOWER = 32; + TESLA_MULTI_RANGE_TRANSCEIVER = 16; + TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE = 0.25F; + TESLA_SINGLE_LOSS_PER_BLOCK = 1; + TESLA_SINGLE_RANGE = 20; + TESLA_VISUAL_EFFECT = true; + + ENABLE_GOD_FORGE = (boolean) Launch.blackboard.get("fml.deobfuscatedEnvironment"); + } + + /** + * This loading phases do not correspond to mod loading phases! + */ + @Override + protected void Init() { + DEBUG_MODE = _mainConfig + .getBoolean("DebugMode", "debug", DEBUG_MODE, "Enables logging and other purely debug features"); + POWERLESS_MODE = _mainConfig + .getBoolean("PowerlessMode", "debug", POWERLESS_MODE, "Enables 0EU/t multi block machinery"); + ENABLE_GOD_FORGE = _mainConfig.getBoolean( + "EnableGodForge", + "debug", + ENABLE_GOD_FORGE, + "Enables the in progress God Forge; enabled automatically in dev env"); + + BOOM_ENABLE = _mainConfig.getBoolean( + "BoomEnable", + "features", + BOOM_ENABLE, + "Set to false to disable explosions on everything bad that you can do"); + DISABLE_BLOCK_HARDNESS_NERF = _mainConfig.getBoolean( + "DisableBlockHardnessNerf", + "features", + DISABLE_BLOCK_HARDNESS_NERF, + "Set to true to disable the block hardness nerf"); + EASY_SCAN = _mainConfig.getBoolean( + "EasyScan", + "features", + EASY_SCAN, + "Enables tricorder to scan EM i/o hatches directly, too CHEEKY"); + NERF_FUSION = _mainConfig.getBoolean( + "NerfFusion", + "features", + NERF_FUSION, + "Set to true to enable removal of plasmas heavier than Fe and other weird ones"); + ENABLE_TURRET_EXPLOSIONS = _mainConfig.getBoolean( + "TurretBoomEnable", + "features", + ENABLE_TURRET_EXPLOSIONS, + "Set to false to disable explosions caused by EM turrets"); + TURRET_DAMAGE_FACTOR = _mainConfig.getFloat( + "TurretDamageFactor", + "features", + TURRET_DAMAGE_FACTOR, + 0, + Short.MAX_VALUE, + "Damage is multiplied by this number"); + TURRET_EXPLOSION_FACTOR = _mainConfig.getFloat( + "TurretExplosionFactor", + "features", + TURRET_EXPLOSION_FACTOR, + 0, + Short.MAX_VALUE, + "Explosion strength is multiplied by this number"); + + MOD_ADMIN_ERROR_LOGS = _mainConfig.getBoolean( + "AdminErrorLog", + "modules", + MOD_ADMIN_ERROR_LOGS, + "If set to true, every op/admin will receive all errors occurred during the startup phase as in game message on join"); + + TESLA_MULTI_GAS_OUTPUT = _mainConfig.getBoolean( + "TeslaMultiGasOutput", + "tesla_tweaks", + TESLA_MULTI_GAS_OUTPUT, + "Set to true to enable outputting plasmas as gasses from the tesla tower with a 1:1 ratio"); + TESLA_MULTI_LOSS_FACTOR_OVERDRIVE = _mainConfig.getFloat( + "TeslaMultiLossFactorOverdrive", + "tesla_tweaks", + TESLA_MULTI_LOSS_FACTOR_OVERDRIVE, + 0, + 1, + "Additional Tesla Tower power loss per amp as a factor of the tier voltage"); + TESLA_MULTI_LOSS_PER_BLOCK_T0 = _mainConfig.getInt( + "TeslaMultiLossPerBlockT0", + "tesla_tweaks", + TESLA_MULTI_LOSS_PER_BLOCK_T0, + 0, + Integer.MAX_VALUE, + "Tesla Tower power transmission loss per block per amp using no plasmas"); + TESLA_MULTI_LOSS_PER_BLOCK_T1 = _mainConfig.getInt( + "TeslaMultiLossPerBlockT1", + "tesla_tweaks", + TESLA_MULTI_LOSS_PER_BLOCK_T1, + 0, + Integer.MAX_VALUE, + "Tesla Tower power transmission loss per block per amp using helium or nitrogen plasma"); + TESLA_MULTI_LOSS_PER_BLOCK_T2 = _mainConfig.getInt( + "TeslaMultiLossPerBlockT2", + "tesla_tweaks", + TESLA_MULTI_LOSS_PER_BLOCK_T2, + 0, + Integer.MAX_VALUE, + "Tesla Tower power transmission loss per block per amp using radon plasma"); + TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM = _mainConfig.getInt( + "TeslaMultiPlasmaPerSecondT1Helium", + "tesla_tweaks", + TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM, + 0, + Integer.MAX_VALUE, + "Tesla Tower helium plasma consumed each second the tesla tower is active"); + TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN = _mainConfig.getInt( + "TeslaMultiPlasmaPerSecondT1Nitrogen", + "tesla_tweaks", + TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN, + 0, + Integer.MAX_VALUE, + "Tesla Tower nitrogen plasma consumed each second the tesla tower is active"); + TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON = _mainConfig.getInt( + "TeslaMultiPlasmaPerSecondT2Radon", + "tesla_tweaks", + TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON, + 0, + Integer.MAX_VALUE, + "Tesla Tower radon plasma consumed each second the tesla tower is active"); + TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1 = _mainConfig.getInt( + "TeslaMultiRangeCoefficientPlasmaT1", + "tesla_tweaks", + TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1, + 0, + Integer.MAX_VALUE, + "Tesla Tower T1 Plasmas Range Multiplier"); + TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2 = _mainConfig.getInt( + "TeslaMultiRangeCoefficientPlasmaT2", + "tesla_tweaks", + TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2, + 0, + Integer.MAX_VALUE, + "Tesla Tower T2 Plasmas Range Multiplier"); + TESLA_MULTI_RANGE_COVER = _mainConfig.getInt( + "TeslaMultiRangeCover", + "tesla_tweaks", + TESLA_MULTI_RANGE_COVER, + 0, + Integer.MAX_VALUE, + "Tesla Tower to Tesla Coil Rich Edition Cover max range"); + TESLA_MULTI_RANGE_TOWER = _mainConfig.getInt( + "TeslaMultiRangeTower", + "tesla_tweaks", + TESLA_MULTI_RANGE_TOWER, + 0, + Integer.MAX_VALUE, + "Tesla Tower to Tower max range"); + TESLA_MULTI_RANGE_TRANSCEIVER = _mainConfig.getInt( + "TeslaMultiRangeTransceiver", + "tesla_tweaks", + TESLA_MULTI_RANGE_TRANSCEIVER, + 0, + Integer.MAX_VALUE, + "Tesla Tower to Transceiver max range"); + TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE = _mainConfig.getFloat( + "TeslaSingleLossFactorOverdrive", + "tesla_tweaks", + TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE, + 0, + 1, + "Additional Tesla Transceiver power loss per amp as a factor of the tier voltage"); + TESLA_SINGLE_LOSS_PER_BLOCK = _mainConfig.getInt( + "TeslaSingleLossPerBlock", + "tesla_tweaks", + TESLA_SINGLE_LOSS_PER_BLOCK, + 0, + Integer.MAX_VALUE, + "Tesla Transceiver power transmission loss per block per amp"); + TESLA_SINGLE_RANGE = _mainConfig.getInt( + "TeslaSingleRange", + "tesla_tweaks", + TESLA_SINGLE_RANGE, + 0, + Integer.MAX_VALUE, + "Tesla Transceiver to max range"); + TESLA_VISUAL_EFFECT = _mainConfig.getBoolean( + "EnableTeslaVisualEffect", + "tesla_tweaks", + TESLA_VISUAL_EFFECT, + "Set true to enable the cool visual effect when tesla tower running."); + } + + /** + * This loading phases do not correspond to mod loading phases! + */ + @Override + protected void PostInit() {} +} diff --git a/src/main/java/tectech/loader/gui/CreativeTabTecTech.java b/src/main/java/tectech/loader/gui/CreativeTabTecTech.java new file mode 100644 index 0000000000..d098d375c4 --- /dev/null +++ b/src/main/java/tectech/loader/gui/CreativeTabTecTech.java @@ -0,0 +1,36 @@ +package tectech.loader.gui; + +import java.util.List; + +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import tectech.thing.CustomItemList; +import tectech.thing.casing.TTCasingsContainer; + +public class CreativeTabTecTech extends CreativeTabs { + + public CreativeTabTecTech(String name) { + super(name); + } + + @SideOnly(Side.CLIENT) + @Override + public Item getTabIconItem() { + return Item.getItemFromBlock(TTCasingsContainer.sBlockCasingsTT); // High power casing + } + + @Override + public void displayAllReleventItems(List stuffToShow) { + for (CustomItemList item : CustomItemList.values()) { + if (item.hasBeenSet() && item.getBlock() == GregTechAPI.sBlockMachines) { + stuffToShow.add(item.get(1)); + } + } + super.displayAllReleventItems(stuffToShow); + } +} diff --git a/src/main/java/tectech/loader/recipe/Assembler.java b/src/main/java/tectech/loader/recipe/Assembler.java new file mode 100644 index 0000000000..eee8182184 --- /dev/null +++ b/src/main/java/tectech/loader/recipe/Assembler.java @@ -0,0 +1,3091 @@ +package tectech.loader.recipe; + +import static bartworks.common.loaders.ItemRegistry.bw_realglas; +import static gregtech.api.recipe.RecipeMaps.assemblerRecipes; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.gtnewhorizon.structurelib.StructureLibAPI; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import tectech.thing.CustomItemList; +import tectech.thing.block.BlockQuantumGlass; + +public class Assembler implements Runnable { + + @Override + public void run() { + + cleanroomRecipes(); + + for (int i = 0; i <= 15; i++) { + GTValues.RA.stdBuilder() + .itemInputs( + GTUtility.getIntegratedCircuit(i + 1), + GTOreDictUnificator.get(OrePrefixes.dust, Materials.Cobalt, 1)) + .itemOutputs(new ItemStack(StructureLibAPI.getBlockHint(), 1, i)) + .fluidInputs(Materials.Aluminium.getMolten(864)) + .duration(1 * SECONDS + 12 * TICKS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + } + + // Quantum Glass + GTValues.RA.stdBuilder() + .itemInputs(CustomItemList.eM_Containment.get(1), GTModHandler.getIC2Item("reinforcedGlass", 1L)) + .itemOutputs(new ItemStack(BlockQuantumGlass.INSTANCE, 1)) + .fluidInputs( + BaseRecipeLoader.getOrDefault("Trinium", Materials.Osmium) + .getMolten(576)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + + // recipe for assline data hatches + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Hatch_DataAccess_EV.get(1), CustomItemList.dataIn_Hatch.get(1)) + .itemOutputs(CustomItemList.dataInAss_Hatch.get(1)) + .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS) + .eut(12000) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Hatch_DataAccess_EV.get(1), CustomItemList.dataOut_Hatch.get(1)) + .itemOutputs(CustomItemList.dataOutAss_Hatch.get(1)) + .duration(1 * MINUTES + 42 * SECONDS + 8 * TICKS) + .eut(12000) + .addTo(assemblerRecipes); + + // High Power Casing + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Iridium, 1), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Iridium, 6), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 1), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Cobalt, 16), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 16), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.NiobiumTitanium, 2)) + .itemOutputs(CustomItemList.eM_Power.get(1)) + .fluidInputs(Materials.TungstenSteel.getMolten(576)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Computer Casing + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.eM_Power.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 8), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 1), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.NiobiumTitanium, 2)) + .itemOutputs(CustomItemList.eM_Computer_Casing.get(1)) + .fluidInputs(Materials.Aluminium.getMolten(1296)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Computer Vent Casing + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.StainlessSteel, 1), + ItemList.Electric_Motor_IV.get(2), + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.StainlessSteel, 2), + GTOreDictUnificator.get(OrePrefixes.pipeTiny, Materials.StainlessSteel, 16), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Copper, 16), + GTOreDictUnificator.get( + OrePrefixes.wireGt01, + BaseRecipeLoader.getOrDefault("SuperconductorIV", Materials.SuperconductorUHV), + 1)) + .itemOutputs(CustomItemList.eM_Computer_Vent.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(1296)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Molecular Casing + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.eM_Power.get(1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Osmiridium, 6), + GTOreDictUnificator + .get(OrePrefixes.foil, BaseRecipeLoader.getOrDefault("Trinium", Materials.Osmium), 12), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.TungstenSteel, 24), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.TungstenSteel, 24), + ItemList.Field_Generator_IV.get(1)) + .itemOutputs(CustomItemList.eM_Containment.get(1)) + .fluidInputs(Materials.Osmium.getMolten(1296)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + // Tesla Base + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 6), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.NickelZincFerrite, 1)) + .itemOutputs(CustomItemList.tM_TeslaBase.get(1)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + // Tesla Toroid + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 6), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Aluminium, 1)) + .itemOutputs(CustomItemList.tM_TeslaToroid.get(1)) + .duration(2 * SECONDS + 10 * TICKS) + .eut(16) + .addTo(assemblerRecipes); + // Tesla Secondary Windings + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.teslaComponent.getWithDamage(8, 0), + BaseRecipeLoader.getItemContainer("MicaInsulatorFoil") + .get(12)) + .itemOutputs(CustomItemList.tM_TeslaSecondary.get(1)) + .fluidInputs(Materials.Silver.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + // Tesla Primary Coils T0 + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.RedstoneAlloy, 8), + BaseRecipeLoader.getItemContainer("MicaInsulatorFoil") + .get(8)) + .itemOutputs(CustomItemList.tM_TeslaPrimary_0.get(1)) + .fluidInputs(Materials.RedAlloy.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + // Tesla Primary Coils T1 + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorMV, 8), + BaseRecipeLoader.getItemContainer("MicaInsulatorFoil") + .get(12)) + .itemOutputs(CustomItemList.tM_TeslaPrimary_1.get(1)) + .fluidInputs(Materials.Magnesium.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + // Tesla Primary Coils T2 + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorHV, 8), + BaseRecipeLoader.getItemContainer("MicaInsulatorFoil") + .get(16)) + .itemOutputs(CustomItemList.tM_TeslaPrimary_2.get(1)) + .fluidInputs(Materials.Barium.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Tesla Primary Coils T3 + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorEV, 8), + BaseRecipeLoader.getItemContainer("MicaInsulatorFoil") + .get(20)) + .itemOutputs(CustomItemList.tM_TeslaPrimary_3.get(1)) + .fluidInputs(Materials.Platinum.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Tesla Primary Coils T4 + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorIV, 8), + BaseRecipeLoader.getItemContainer("MicaInsulatorFoil") + .get(24)) + .itemOutputs(CustomItemList.tM_TeslaPrimary_4.get(1)) + .fluidInputs(Materials.Vanadium.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Tesla Primary Coils T5 + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorLuV, 8), + BaseRecipeLoader.getItemContainer("MicaInsulatorFoil") + .get(28)) + .itemOutputs(CustomItemList.tM_TeslaPrimary_5.get(1)) + .fluidInputs(Materials.Indium.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Tesla Primary Coils T6 + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorZPM, 8), + BaseRecipeLoader.getItemContainer("MicaInsulatorFoil") + .get(32)) + .itemOutputs(CustomItemList.tM_TeslaPrimary_6.get(1)) + .fluidInputs(Materials.Naquadah.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + + // Dynamo Hatches + { + // Dynamo Hatches 4A + { + // Dynamo EV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Dynamo_EV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Aluminium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 2)) + .itemOutputs(CustomItemList.eM_dynamoMulti4_EV.get(1)) + .fluidInputs(Materials.Silver.getMolten(144)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Dynamo IV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Dynamo_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2)) + .itemOutputs(CustomItemList.eM_dynamoMulti4_IV.get(1)) + .fluidInputs(Materials.Silver.getMolten(144)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Dynamo LuV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Dynamo_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.VanadiumGallium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), + 2)) + .itemOutputs(CustomItemList.eM_dynamoMulti4_LuV.get(1)) + .fluidInputs(Materials.Silver.getMolten(288)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Dynamo ZPM 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Dynamo_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2)) + .itemOutputs(CustomItemList.eM_dynamoMulti4_ZPM.get(1)) + .fluidInputs(Materials.Silver.getMolten(576)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Dynamo UV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Dynamo_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2)) + .itemOutputs(CustomItemList.eM_dynamoMulti4_UV.get(1)) + .fluidInputs(Materials.Silver.getMolten(1152)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Dynamo UHV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Dynamo_UHV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2)) + .itemOutputs(CustomItemList.eM_dynamoMulti4_UHV.get(1)) + .fluidInputs(Materials.Silver.getMolten(2304)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + // Dynamo UEV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Dynamo_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Bedrockium", Materials.Neutronium), + 2)) + .itemOutputs(CustomItemList.eM_dynamoMulti4_UEV.get(1)) + .fluidInputs(Materials.Silver.getMolten(4608)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + // Dynamo UIV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Dynamo_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("BlackPlutonium", Materials.Neutronium), + 2)) + .itemOutputs(CustomItemList.eM_dynamoMulti4_UIV.get(1)) + .fluidInputs(Materials.Silver.getMolten(9216)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + // Dynamo UMV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Dynamo_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 2)) + .itemOutputs(CustomItemList.eM_dynamoMulti4_UMV.get(1)) + .fluidInputs(Materials.Silver.getMolten(9216)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + // Dynamo UXV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Dynamo_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 2), + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1), + GTOreDictUnificator.get("plateShirabon", 1L)) + .itemOutputs(CustomItemList.eM_dynamoMulti4_UXV.get(1)) + .fluidInputs(Materials.Silver.getMolten(9216)) + .duration(5 * SECONDS) + .eut((int) TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + + } + + // Dynamo Hatches 16A + { + // Dynamo EV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_IV_EV.get(1), + CustomItemList.eM_dynamoMulti4_EV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Aluminium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 4)) + .itemOutputs(CustomItemList.eM_dynamoMulti16_EV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Dynamo IV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_LuV_IV.get(1), + CustomItemList.eM_dynamoMulti4_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Tungsten, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 4)) + .itemOutputs(CustomItemList.eM_dynamoMulti16_IV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Dynamo LuV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_ZPM_LuV.get(1), + CustomItemList.eM_dynamoMulti4_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.VanadiumGallium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), + 4)) + .itemOutputs(CustomItemList.eM_dynamoMulti16_LuV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(288)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Dynamo ZPM 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UV_ZPM.get(1), + CustomItemList.eM_dynamoMulti4_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Naquadah, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4)) + .itemOutputs(CustomItemList.eM_dynamoMulti16_ZPM.get(1)) + .fluidInputs(Materials.Electrum.getMolten(576)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Dynamo UV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_MAX_UV.get(1), + CustomItemList.eM_dynamoMulti4_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.NaquadahAlloy, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 4)) + .itemOutputs(CustomItemList.eM_dynamoMulti16_UV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(1152)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Dynamo UHV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UEV_UHV.get(1), + CustomItemList.eM_dynamoMulti4_UHV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUHV, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 4)) + .itemOutputs(CustomItemList.eM_dynamoMulti16_UHV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(2304)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + // Dynamo UEV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UIV_UEV.get(1), + CustomItemList.eM_dynamoMulti4_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Bedrockium", Materials.Neutronium), + 4)) + .itemOutputs(CustomItemList.eM_dynamoMulti16_UEV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(4608)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + // Dynamo UIV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UMV_UIV.get(1), + CustomItemList.eM_dynamoMulti4_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("BlackPlutonium", Materials.Neutronium), + 4)) + .itemOutputs(CustomItemList.eM_dynamoMulti16_UIV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(9216)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + // Dynamo UMV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UXV_UMV.get(1), + CustomItemList.eM_dynamoMulti4_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 4)) + .itemOutputs(CustomItemList.eM_dynamoMulti16_UMV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(9216)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + // Dynamo UXV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_MAX_UXV.get(1), + CustomItemList.eM_dynamoMulti4_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 2), + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2), + GTOreDictUnificator.get("plateShirabon", 2L)) + .itemOutputs(CustomItemList.eM_dynamoMulti16_UXV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(9216)) + .duration(10 * SECONDS) + .eut((int) TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + + } + + // Dynamo Hatches 64A + { + // Dynamo EV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_IV_EV.get(1), + CustomItemList.eM_dynamoMulti16_EV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.Aluminium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6)) + .itemOutputs(CustomItemList.eM_dynamoMulti64_EV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Dynamo IV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_LuV_IV.get(1), + CustomItemList.eM_dynamoMulti16_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.Tungsten, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6)) + .itemOutputs(CustomItemList.eM_dynamoMulti64_IV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Dynamo LuV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_ZPM_LuV.get(1), + CustomItemList.eM_dynamoMulti16_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.VanadiumGallium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), + 6)) + .itemOutputs(CustomItemList.eM_dynamoMulti64_LuV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Dynamo ZPM 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UV_ZPM.get(1), + CustomItemList.eM_dynamoMulti16_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.Naquadah, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 6)) + .itemOutputs(CustomItemList.eM_dynamoMulti64_ZPM.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Dynamo UV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UHV_UV.get(1), + CustomItemList.eM_dynamoMulti16_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.NaquadahAlloy, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 6)) + .itemOutputs(CustomItemList.eM_dynamoMulti64_UV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(1152)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Dynamo UHV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UEV_UHV.get(1), + CustomItemList.eM_dynamoMulti16_UHV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.SuperconductorUHV, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 6)) + .itemOutputs(CustomItemList.eM_dynamoMulti64_UHV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(2304)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + // Dynamo UEV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UIV_UEV.get(1), + CustomItemList.eM_dynamoMulti16_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.Draconium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Bedrockium", Materials.Neutronium), + 6)) + .itemOutputs(CustomItemList.eM_dynamoMulti64_UEV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(4608)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + // Dynamo UIV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UMV_UIV.get(1), + CustomItemList.eM_dynamoMulti16_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("BlackPlutonium", Materials.Neutronium), + 6)) + .itemOutputs(CustomItemList.eM_dynamoMulti64_UIV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(9216)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + // Dynamo UMV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UXV_UMV.get(1), + CustomItemList.eM_dynamoMulti16_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.Quantium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 6)) + .itemOutputs(CustomItemList.eM_dynamoMulti64_UMV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(9216)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + // Dynamo UXV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_MAX_UXV.get(1), + CustomItemList.eM_dynamoMulti16_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.BlackPlutonium, 2), + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 3), + GTOreDictUnificator.get("plateShirabon", 3L)) + .itemOutputs(CustomItemList.eM_dynamoMulti64_UXV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(9216)) + .duration(20 * SECONDS) + .eut((int) TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + + } + } + + // Energy Hatches + { + // Energy Hatches 4A + { + // Energy Hatch EV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Energy_EV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Aluminium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 2)) + .itemOutputs(CustomItemList.eM_energyMulti4_EV.get(1)) + .fluidInputs(Materials.Silver.getMolten(144)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Energy Hatch IV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Energy_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Tungsten, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2)) + .itemOutputs(CustomItemList.eM_energyMulti4_IV.get(1)) + .fluidInputs(Materials.Silver.getMolten(144)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Energy Hatch LuV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Energy_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.VanadiumGallium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), + 2)) + .itemOutputs(CustomItemList.eM_energyMulti4_LuV.get(1)) + .fluidInputs(Materials.Silver.getMolten(288)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Energy Hatch ZPM 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Energy_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2)) + .itemOutputs(CustomItemList.eM_energyMulti4_ZPM.get(1)) + .fluidInputs(Materials.Silver.getMolten(576)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Energy Hatch UV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Energy_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2)) + .itemOutputs(CustomItemList.eM_energyMulti4_UV.get(1)) + .fluidInputs(Materials.Silver.getMolten(1152)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Energy Hatch UHV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Energy_UHV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2)) + .itemOutputs(CustomItemList.eM_energyMulti4_UHV.get(1)) + .fluidInputs(Materials.Silver.getMolten(2304)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + // Energy Hatch UEV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Energy_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Bedrockium", Materials.Neutronium), + 2)) + .itemOutputs(CustomItemList.eM_energyMulti4_UEV.get(1)) + .fluidInputs(Materials.Silver.getMolten(4608)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + // Energy Hatch UIV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Energy_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("BlackPlutonium", Materials.Neutronium), + 2)) + .itemOutputs(CustomItemList.eM_energyMulti4_UIV.get(1)) + .fluidInputs(Materials.Silver.getMolten(9216)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + // Energy Hatch UMV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Energy_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 2)) + .itemOutputs(CustomItemList.eM_energyMulti4_UMV.get(1)) + .fluidInputs(Materials.Silver.getMolten(9216)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + // Energy Hatch UXV 4A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Energy_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 2), + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1), + GTOreDictUnificator.get("plateShirabon", 1L)) + .itemOutputs(CustomItemList.eM_energyMulti4_UXV.get(1)) + .fluidInputs(Materials.Silver.getMolten(9216)) + .duration(5 * SECONDS) + .eut((int) TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + + } + + // Energy Hatches 16A + { + // Energy Hatch EV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_IV_EV.get(1), + CustomItemList.eM_energyMulti4_EV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Aluminium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 4)) + .itemOutputs(CustomItemList.eM_energyMulti16_EV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Energy Hatch IV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_LuV_IV.get(1), + CustomItemList.eM_energyMulti4_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Tungsten, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 4)) + .itemOutputs(CustomItemList.eM_energyMulti16_IV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Energy Hatch LuV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_ZPM_LuV.get(1), + CustomItemList.eM_energyMulti4_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.VanadiumGallium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), + 4)) + .itemOutputs(CustomItemList.eM_energyMulti16_LuV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(288)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Energy Hatch ZPM 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UV_ZPM.get(1), + CustomItemList.eM_energyMulti4_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Naquadah, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 4)) + .itemOutputs(CustomItemList.eM_energyMulti16_ZPM.get(1)) + .fluidInputs(Materials.Electrum.getMolten(576)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Energy Hatch UV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_MAX_UV.get(1), + CustomItemList.eM_energyMulti4_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.NaquadahAlloy, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 4)) + .itemOutputs(CustomItemList.eM_energyMulti16_UV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(1152)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Energy Hatch UHV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UEV_UHV.get(1), + CustomItemList.eM_energyMulti4_UHV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUHV, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 4)) + .itemOutputs(CustomItemList.eM_energyMulti16_UHV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(2304)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + // Energy Hatch UEV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UIV_UEV.get(1), + CustomItemList.eM_energyMulti4_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Bedrockium", Materials.Neutronium), + 4)) + .itemOutputs(CustomItemList.eM_energyMulti16_UEV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(4608)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + // Energy Hatch UIV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UMV_UIV.get(1), + CustomItemList.eM_energyMulti4_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("BlackPlutonium", Materials.Neutronium), + 4)) + .itemOutputs(CustomItemList.eM_energyMulti16_UIV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(9216)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + // Energy Hatch UMV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UXV_UMV.get(1), + CustomItemList.eM_energyMulti4_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 4)) + .itemOutputs(CustomItemList.eM_energyMulti16_UMV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(9216)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + // Energy Hatch UXV 16A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_MAX_UXV.get(1), + CustomItemList.eM_energyMulti4_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 2), + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2), + GTOreDictUnificator.get("plateShirabon", 2L)) + .itemOutputs(CustomItemList.eM_energyMulti16_UXV.get(1)) + .fluidInputs(Materials.Electrum.getMolten(9216)) + .duration(10 * SECONDS) + .eut((int) TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + + } + + // Energy Hatches 64A + { + // Energy Hatch EV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_IV_EV.get(1), + CustomItemList.eM_energyMulti16_EV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.Aluminium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Titanium, 6)) + .itemOutputs(CustomItemList.eM_energyMulti64_EV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Energy Hatch IV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_LuV_IV.get(1), + CustomItemList.eM_energyMulti16_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.Tungsten, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 6)) + .itemOutputs(CustomItemList.eM_energyMulti64_IV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Energy Hatch LuV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_ZPM_LuV.get(1), + CustomItemList.eM_energyMulti16_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.VanadiumGallium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), + 6)) + .itemOutputs(CustomItemList.eM_energyMulti64_LuV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Energy Hatch ZPM 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UV_ZPM.get(1), + CustomItemList.eM_energyMulti16_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.Naquadah, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 6)) + .itemOutputs(CustomItemList.eM_energyMulti64_ZPM.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Energy Hatch UV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UHV_UV.get(1), + CustomItemList.eM_energyMulti16_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.NaquadahAlloy, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 6)) + .itemOutputs(CustomItemList.eM_energyMulti64_UV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(1152)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Energy Hatch UHV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UEV_UHV.get(1), + CustomItemList.eM_energyMulti16_UHV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.SuperconductorUHV, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 6)) + .itemOutputs(CustomItemList.eM_energyMulti64_UHV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(2304)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + // Energy Hatch UEV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UIV_UEV.get(1), + CustomItemList.eM_energyMulti16_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.Draconium, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Bedrockium", Materials.Neutronium), + 6)) + .itemOutputs(CustomItemList.eM_energyMulti64_UEV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(4608)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + // Energy Hatch UIV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UMV_UIV.get(1), + CustomItemList.eM_energyMulti16_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.NetherStar, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("BlackPlutonium", Materials.Neutronium), + 6)) + .itemOutputs(CustomItemList.eM_energyMulti64_UIV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(9216)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + // Energy Hatch UMV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_UXV_UMV.get(1), + CustomItemList.eM_energyMulti16_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.Quantium, 2), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 6)) + .itemOutputs(CustomItemList.eM_energyMulti64_UMV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(9216)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + // Energy Hatch UXV 64A + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_MAX_UXV.get(1), + CustomItemList.eM_energyMulti16_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt12, Materials.BlackPlutonium, 2), + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 3), + GTOreDictUnificator.get("plateShirabon", 3L)) + .itemOutputs(CustomItemList.eM_energyMulti64_UXV.get(1)) + .fluidInputs(Materials.Tungsten.getMolten(9216)) + .duration(20 * SECONDS) + .eut((int) TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + + } + } + + // Buck Converter IV-UIV + // Buck Converter IV + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_LuV_IV.get(1), + BaseRecipeLoader.getItemContainer("Display") + .get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.IV, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.TungstenSteel, 2), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), + new ItemStack(bw_realglas, 2, 2)) + .itemOutputs(CustomItemList.Machine_BuckConverter_IV.get(1)) + .fluidInputs(Materials.TungstenSteel.getMolten(288)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Buck Converter LuV + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_ZPM_LuV.get(1), + BaseRecipeLoader.getItemContainer("Display") + .get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), + GTOreDictUnificator.get( + OrePrefixes.plate, + BaseRecipeLoader.getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome), + 2), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.NiobiumTitanium, 4), + new ItemStack(bw_realglas, 2, 3)) + .itemOutputs(CustomItemList.Machine_BuckConverter_LuV.get(1)) + .fluidInputs(new FluidStack(FluidRegistry.getFluid("molten.rhodium-plated palladium"), 288)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Buck Converter ZPM + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UV_ZPM.get(1), + BaseRecipeLoader.getItemContainer("Display") + .get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Iridium, 2), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.TungstenSteel, 4), + new ItemStack(bw_realglas, 2, 4)) + .itemOutputs(CustomItemList.Machine_BuckConverter_ZPM.get(1)) + .fluidInputs(Materials.Iridium.getMolten(288)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Buck Converter UV + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_MAX_UV.get(1), + BaseRecipeLoader.getItemContainer("Display") + .get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UV, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmium, 2), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.Naquadah, 4), + new ItemStack(bw_realglas, 2, 5)) + .itemOutputs(CustomItemList.Machine_BuckConverter_UV.get(1)) + .fluidInputs(Materials.Osmium.getMolten(288)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + // Buck Converter UHV + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UEV_UHV.get(1), + BaseRecipeLoader.getItemContainer("Display") + .get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UHV, 2), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 2), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.ElectrumFlux, 4), + new ItemStack(bw_realglas, 4, 5)) + .itemOutputs(CustomItemList.Machine_BuckConverter_UHV.get(1)) + .fluidInputs(Materials.Neutronium.getMolten(288)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + // Buck Converter UEV + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UIV_UEV.get(1), + BaseRecipeLoader.getItemContainer("Display") + .get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 2), + GTOreDictUnificator + .get(OrePrefixes.plate, BaseRecipeLoader.getOrDefault("Bedrockium", Materials.Neutronium), 2), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.Bedrockium, 4), + new ItemStack(bw_realglas, 8, 5)) + .itemOutputs(CustomItemList.Machine_BuckConverter_UEV.get(1)) + .fluidInputs( + BaseRecipeLoader.getOrDefault("Bedrockium", Materials.Neutronium) + .getMolten(288)) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + // Buck Converter UIV + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Transformer_UMV_UIV.get(1), + BaseRecipeLoader.getItemContainer("Display") + .get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 2), + GTOreDictUnificator + .get(OrePrefixes.plate, BaseRecipeLoader.getOrDefault("BlackPlutonium", Materials.Neutronium), 2), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.Draconium, 4), + new ItemStack(bw_realglas, 16, 5)) + .itemOutputs(CustomItemList.Machine_BuckConverter_UIV.get(1)) + .fluidInputs( + BaseRecipeLoader.getOrDefault("BlackPlutonium", Materials.Neutronium) + .getMolten(288)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + + // Laser Dynamo + { + // Laser Dynamo IV-UXV 256/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Emitter_IV.get(1), + ItemList.Electric_Pump_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_dynamoTunnel1_IV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Emitter_LuV.get(1), + ItemList.Electric_Pump_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.VanadiumGallium, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_dynamoTunnel1_LuV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Emitter_ZPM.get(1), + ItemList.Electric_Pump_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Naquadah, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_dynamoTunnel1_ZPM.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Emitter_UV.get(1), + ItemList.Electric_Pump_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.NaquadahAlloy, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_dynamoTunnel1_UV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_MAX.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Emitter_UHV.get(1), + ItemList.Electric_Pump_UHV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Bedrockium, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_dynamoTunnel1_UHV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Emitter_UEV.get(1), + ItemList.Electric_Pump_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Draconium, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_dynamoTunnel1_UEV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Emitter_UIV.get(1), + ItemList.Electric_Pump_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.NetherStar, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_dynamoTunnel1_UIV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Emitter_UMV.get(1), + ItemList.Electric_Pump_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Quantium, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_dynamoTunnel1_UMV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Emitter_UXV.get(1), + ItemList.Electric_Pump_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.BlackPlutonium, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_dynamoTunnel1_UXV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Dynamo LuV-UXV 1024/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Emitter_LuV.get(2), + ItemList.Electric_Pump_LuV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.VanadiumGallium, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_dynamoTunnel2_LuV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Emitter_ZPM.get(2), + ItemList.Electric_Pump_ZPM.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.Naquadah, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_dynamoTunnel2_ZPM.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Emitter_UV.get(2), + ItemList.Electric_Pump_UV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.NaquadahAlloy, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_dynamoTunnel2_UV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_MAX.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Emitter_UHV.get(2), + ItemList.Electric_Pump_UHV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.Bedrockium, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_dynamoTunnel2_UHV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Emitter_UEV.get(2), + ItemList.Electric_Pump_UEV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.Draconium, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_dynamoTunnel2_UEV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Emitter_UIV.get(2), + ItemList.Electric_Pump_UIV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.NetherStar, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_dynamoTunnel2_UIV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Emitter_UMV.get(2), + ItemList.Electric_Pump_UMV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.Quantium, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_dynamoTunnel2_UMV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Emitter_UXV.get(2), + ItemList.Electric_Pump_UXV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.BlackPlutonium, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_dynamoTunnel2_UXV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Dynamo ZPM-UXV 4096/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Emitter_ZPM.get(4), + ItemList.Electric_Pump_ZPM.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_dynamoTunnel3_ZPM.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Emitter_UV.get(4), + ItemList.Electric_Pump_UV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_dynamoTunnel3_UV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_MAX.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Emitter_UHV.get(4), + ItemList.Electric_Pump_UHV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Bedrockium, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_dynamoTunnel3_UHV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Emitter_UEV.get(4), + ItemList.Electric_Pump_UEV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_dynamoTunnel3_UEV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Emitter_UIV.get(4), + ItemList.Electric_Pump_UIV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_dynamoTunnel3_UIV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Emitter_UMV.get(4), + ItemList.Electric_Pump_UMV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_dynamoTunnel3_UMV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Emitter_UXV.get(4), + ItemList.Electric_Pump_UXV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_dynamoTunnel3_UXV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Dynamo UV-UXV 16384/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), + ItemList.Emitter_UV.get(8), + ItemList.Electric_Pump_UV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_dynamoTunnel4_UV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_MAX.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), + ItemList.Emitter_UHV.get(8), + ItemList.Electric_Pump_UHV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Bedrockium, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_dynamoTunnel4_UHV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), + ItemList.Emitter_UEV.get(8), + ItemList.Electric_Pump_UEV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_dynamoTunnel4_UEV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), + ItemList.Emitter_UIV.get(8), + ItemList.Electric_Pump_UIV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_dynamoTunnel4_UIV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Emitter_UMV.get(8), + ItemList.Electric_Pump_UMV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_dynamoTunnel4_UMV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Emitter_UXV.get(8), + ItemList.Electric_Pump_UXV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_dynamoTunnel4_UXV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Dynamo UHV-UXV 65536/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_MAX.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), + ItemList.Emitter_UHV.get(16), + ItemList.Electric_Pump_UHV.get(16), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Bedrockium, 8), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(CustomItemList.eM_dynamoTunnel5_UHV.get(1)) + .duration(13 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), + ItemList.Emitter_UEV.get(16), + ItemList.Electric_Pump_UEV.get(16), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 8), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(CustomItemList.eM_dynamoTunnel5_UEV.get(1)) + .duration(13 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), + ItemList.Emitter_UIV.get(16), + ItemList.Electric_Pump_UIV.get(16), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 8), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(CustomItemList.eM_dynamoTunnel5_UIV.get(1)) + .duration(13 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), + ItemList.Emitter_UMV.get(16), + ItemList.Electric_Pump_UMV.get(16), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 8), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(CustomItemList.eM_dynamoTunnel5_UMV.get(1)) + .duration(13 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), + ItemList.Emitter_UXV.get(16), + ItemList.Electric_Pump_UXV.get(16), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 8), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(CustomItemList.eM_dynamoTunnel5_UXV.get(1)) + .duration(13 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Dynamo UEV-UXV 262144/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), + ItemList.Emitter_UEV.get(32), + ItemList.Electric_Pump_UEV.get(32), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 16), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(CustomItemList.eM_dynamoTunnel6_UEV.get(1)) + .duration(26 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), + ItemList.Emitter_UIV.get(32), + ItemList.Electric_Pump_UIV.get(32), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 16), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(CustomItemList.eM_dynamoTunnel6_UIV.get(1)) + .duration(26 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), + ItemList.Emitter_UMV.get(32), + ItemList.Electric_Pump_UMV.get(32), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 16), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(CustomItemList.eM_dynamoTunnel6_UMV.get(1)) + .duration(26 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), + ItemList.Emitter_UXV.get(32), + ItemList.Electric_Pump_UXV.get(32), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 16), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(CustomItemList.eM_dynamoTunnel6_UXV.get(1)) + .duration(26 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Dynamo UIV-UXV 1048576/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + ItemList.Emitter_UIV.get(64), + ItemList.Electric_Pump_UIV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.NetherStar, 16), + GTUtility.getIntegratedCircuit(7)) + .itemOutputs(CustomItemList.eM_dynamoTunnel7_UIV.get(1)) + .duration(53 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + ItemList.Emitter_UMV.get(64), + ItemList.Electric_Pump_UMV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.Quantium, 16), + GTUtility.getIntegratedCircuit(7)) + .itemOutputs(CustomItemList.eM_dynamoTunnel7_UMV.get(1)) + .duration(53 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + ItemList.Emitter_UXV.get(64), + ItemList.Electric_Pump_UXV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 16), + GTUtility.getIntegratedCircuit(7)) + .itemOutputs(CustomItemList.eM_dynamoTunnel7_UXV.get(1)) + .duration(53 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + } + + // Laser Target + { + // Laser Target IV-UXV 256/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Sensor_IV.get(1), + ItemList.Electric_Pump_IV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.TungstenSteel, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_energyTunnel1_IV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Sensor_LuV.get(1), + ItemList.Electric_Pump_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.VanadiumGallium, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_energyTunnel1_LuV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Sensor_ZPM.get(1), + ItemList.Electric_Pump_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Naquadah, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_energyTunnel1_ZPM.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Sensor_UV.get(1), + ItemList.Electric_Pump_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.NaquadahAlloy, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_energyTunnel1_UV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_MAX.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Sensor_UHV.get(1), + ItemList.Electric_Pump_UHV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Bedrockium, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_energyTunnel1_UHV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Sensor_UEV.get(1), + ItemList.Electric_Pump_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Draconium, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_energyTunnel1_UEV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Sensor_UIV.get(1), + ItemList.Electric_Pump_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.NetherStar, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_energyTunnel1_UIV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Sensor_UMV.get(1), + ItemList.Electric_Pump_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.Quantium, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_energyTunnel1_UMV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Sensor_UXV.get(1), + ItemList.Electric_Pump_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.BlackPlutonium, 2), + GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.eM_energyTunnel1_UXV.get(1)) + .duration(50 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Target LuV-UXV 1024/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Sensor_LuV.get(2), + ItemList.Electric_Pump_LuV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.VanadiumGallium, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_energyTunnel2_LuV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Sensor_ZPM.get(2), + ItemList.Electric_Pump_ZPM.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.Naquadah, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_energyTunnel2_ZPM.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Sensor_UV.get(2), + ItemList.Electric_Pump_UV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.NaquadahAlloy, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_energyTunnel2_UV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_MAX.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Sensor_UHV.get(2), + ItemList.Electric_Pump_UHV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.Bedrockium, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_energyTunnel2_UHV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Sensor_UEV.get(2), + ItemList.Electric_Pump_UEV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.Draconium, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_energyTunnel2_UEV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Sensor_UIV.get(2), + ItemList.Electric_Pump_UIV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.NetherStar, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_energyTunnel2_UIV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Sensor_UMV.get(2), + ItemList.Electric_Pump_UMV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.Quantium, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_energyTunnel2_UMV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 2), + ItemList.Sensor_UXV.get(2), + ItemList.Electric_Pump_UXV.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.BlackPlutonium, 4), + GTUtility.getIntegratedCircuit(2)) + .itemOutputs(CustomItemList.eM_energyTunnel2_UXV.get(1)) + .duration(1 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Target ZPM-UXV 4096/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Sensor_ZPM.get(4), + ItemList.Electric_Pump_ZPM.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Naquadah, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_energyTunnel3_ZPM.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Sensor_UV.get(4), + ItemList.Electric_Pump_UV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_energyTunnel3_UV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_MAX.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Sensor_UHV.get(4), + ItemList.Electric_Pump_UHV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Bedrockium, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_energyTunnel3_UHV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Sensor_UEV.get(4), + ItemList.Electric_Pump_UEV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_energyTunnel3_UEV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 4), + ItemList.Sensor_UIV.get(4), + ItemList.Electric_Pump_UIV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_energyTunnel3_UIV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Sensor_UMV.get(4), + ItemList.Electric_Pump_UMV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_energyTunnel3_UMV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 1), + ItemList.Sensor_UXV.get(4), + ItemList.Electric_Pump_UXV.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 4), + GTUtility.getIntegratedCircuit(3)) + .itemOutputs(CustomItemList.eM_energyTunnel3_UXV.get(1)) + .duration(3 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Target UV-UXV 16384/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), + ItemList.Sensor_UV.get(8), + ItemList.Electric_Pump_UV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NaquadahAlloy, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_energyTunnel4_UV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_MAX.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), + ItemList.Sensor_UHV.get(8), + ItemList.Electric_Pump_UHV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Bedrockium, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_energyTunnel4_UHV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), + ItemList.Sensor_UEV.get(8), + ItemList.Electric_Pump_UEV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Draconium, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_energyTunnel4_UEV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), + ItemList.Sensor_UIV.get(8), + ItemList.Electric_Pump_UIV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.NetherStar, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_energyTunnel4_UIV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), + ItemList.Sensor_UMV.get(8), + ItemList.Electric_Pump_UMV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Quantium, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_energyTunnel4_UMV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 8), + ItemList.Sensor_UXV.get(8), + ItemList.Electric_Pump_UXV.get(8), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.BlackPlutonium, 8), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.eM_energyTunnel4_UXV.get(1)) + .duration(6 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Target UHV-UXV 65536/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_MAX.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), + ItemList.Sensor_UHV.get(16), + ItemList.Electric_Pump_UHV.get(16), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Bedrockium, 8), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(CustomItemList.eM_energyTunnel5_UHV.get(1)) + .duration(13 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UHV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), + ItemList.Sensor_UEV.get(16), + ItemList.Electric_Pump_UEV.get(16), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 8), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(CustomItemList.eM_energyTunnel5_UEV.get(1)) + .duration(13 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), + ItemList.Sensor_UIV.get(16), + ItemList.Electric_Pump_UIV.get(16), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 8), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(CustomItemList.eM_energyTunnel5_UIV.get(1)) + .duration(13 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), + ItemList.Sensor_UMV.get(16), + ItemList.Electric_Pump_UMV.get(16), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 8), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(CustomItemList.eM_energyTunnel5_UMV.get(1)) + .duration(13 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 16), + ItemList.Sensor_UXV.get(16), + ItemList.Electric_Pump_UXV.get(16), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 8), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(CustomItemList.eM_energyTunnel5_UXV.get(1)) + .duration(13 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Target UEV-UXV 262144/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UEV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), + ItemList.Sensor_UEV.get(32), + ItemList.Electric_Pump_UEV.get(32), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Draconium, 16), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(CustomItemList.eM_energyTunnel6_UEV.get(1)) + .duration(26 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UEV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), + ItemList.Sensor_UIV.get(32), + ItemList.Electric_Pump_UIV.get(32), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.NetherStar, 16), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(CustomItemList.eM_energyTunnel6_UIV.get(1)) + .duration(26 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), + ItemList.Sensor_UMV.get(32), + ItemList.Electric_Pump_UMV.get(32), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.Quantium, 16), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(CustomItemList.eM_energyTunnel6_UMV.get(1)) + .duration(26 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 32), + ItemList.Sensor_UXV.get(32), + ItemList.Electric_Pump_UXV.get(32), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.BlackPlutonium, 16), + GTUtility.getIntegratedCircuit(6)) + .itemOutputs(CustomItemList.eM_energyTunnel6_UXV.get(1)) + .duration(26 * MINUTES + 40 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + + // Laser Target UIV-UXV 1048576/t + { + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + ItemList.Sensor_UIV.get(64), + ItemList.Electric_Pump_UIV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.NetherStar, 16), + GTUtility.getIntegratedCircuit(7)) + .itemOutputs(CustomItemList.eM_energyTunnel7_UIV.get(1)) + .duration(53 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UIV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + ItemList.Sensor_UMV.get(64), + ItemList.Electric_Pump_UMV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.Quantium, 16), + GTUtility.getIntegratedCircuit(7)) + .itemOutputs(CustomItemList.eM_energyTunnel7_UMV.get(1)) + .duration(53 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UMV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hull_UXV.get(1), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + ItemList.Sensor_UXV.get(64), + ItemList.Electric_Pump_UXV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 16), + GTUtility.getIntegratedCircuit(7)) + .itemOutputs(CustomItemList.eM_energyTunnel7_UXV.get(1)) + .duration(53 * MINUTES + 20 * SECONDS) + .eut(TierEU.RECIPE_UXV) + .addTo(assemblerRecipes); + + } + } + + // Tesla Capacitor + { + // LV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tin, 4), + GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 4), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 8)) + .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 0)) + .fluidInputs(Materials.Epoxid.getMolten(72)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + // MV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Copper, 4), + GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 6), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 12), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 12)) + .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 1)) + .fluidInputs(Materials.Epoxid.getMolten(144)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + // HV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Gold, 4), + GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 8), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 16), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 16)) + .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 2)) + .fluidInputs(Materials.Epoxid.getMolten(216)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // EV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Aluminium, 4), + GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 10), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 20), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 20)) + .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 3)) + .fluidInputs(Materials.Epoxid.getMolten(288)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // IV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Tungsten, 4), + GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 12), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 24), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 24)) + .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 4)) + .fluidInputs(Materials.Epoxid.getMolten(360)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // LuV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.HSSG, 4), + GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 14), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 28), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 28)) + .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 5)) + .fluidInputs(Materials.Epoxid.getMolten(432)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // ZPM Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.cableGt01, Materials.Naquadah, 4), + GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 16), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 32), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Silicone, 32)) + .itemOutputs(CustomItemList.teslaCapacitor.getWithDamage(1, 6)) + .fluidInputs(Materials.Epoxid.getMolten(504)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + + } + + // Tesla Cover + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.teslaComponent.getWithDamage(4, 0), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) + .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 0)) + .fluidInputs(Materials.Lead.getMolten(288)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.teslaComponent.getWithDamage(4, 0), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) + .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 0)) + .fluidInputs(Materials.Tin.getMolten(144)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.teslaComponent.getWithDamage(4, 0), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 2), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Gold, 16), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) + .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 0)) + .fluidInputs(Materials.SolderingAlloy.getMolten(72)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Ultimate Tesla Cover + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.teslaComponent.getWithDamage(4, 1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tungsten, 16), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) + .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 1)) + .fluidInputs(Materials.Lead.getMolten(288)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.teslaComponent.getWithDamage(4, 1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tungsten, 16), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) + .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 1)) + .fluidInputs(Materials.Tin.getMolten(144)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.teslaComponent.getWithDamage(4, 1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tungsten, 16), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 2), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Aluminium, 8)) + .itemOutputs(CustomItemList.teslaCover.getWithDamage(1, 1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(72)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Ender Fluid Link Cover + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Enderium, 4), + ItemList.Sensor_LuV.get(1), + ItemList.Emitter_LuV.get(1), + ItemList.Electric_Pump_LuV.get(1)) + .itemOutputs(CustomItemList.enderLinkFluidCover.getWithDamage(1, 0)) + .fluidInputs( + BaseRecipeLoader.getOrDefault("Rhodium-PlatedPalladium", Materials.Chrome) + .getMolten(288)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Power Pass Upgrade Cover + GTValues.RA.stdBuilder() + .itemInputs(CustomItemList.Machine_Multi_Transformer.get(1), GTUtility.getIntegratedCircuit(1)) + .itemOutputs(CustomItemList.powerPassUpgradeCover.getWithDamage(1, 0)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Tesla Winding Components + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Electrum, 32), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.NickelZincFerrite, 8)) + .itemOutputs(CustomItemList.teslaComponent.getWithDamage(1, 0)) + .fluidInputs(Materials.Epoxid.getMolten(288)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + // Tesla Winding Components Ultimate (ADD BLOOD VARIANT) + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorLuV, 4), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.NickelZincFerrite, 8)) + .itemOutputs(CustomItemList.teslaComponent.getWithDamage(1, 1)) + .fluidInputs(Materials.Epoxid.getMolten(576)) + .duration(16 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Tesla Transceiver LV 1A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_LV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_LV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_LV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + // Tesla Transceiver MV 1A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_MV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_MV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_MV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + // Tesla Transceiver HV 1A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_HV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_HV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_HV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Tesla Transceiver EV 1A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_EV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_EV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_EV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Tesla Transceiver IV 1A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_IV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_IV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_1by1_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_1by1_IV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Tesla Transceiver LV 4A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_LV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_LV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_LV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + // Tesla Transceiver MV 4A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_MV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_MV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_MV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + // Tesla Transceiver HV 4A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_HV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_HV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_HV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Tesla Transceiver EV 4A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_EV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_EV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_EV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Tesla Transceiver IV 4A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_IV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_IV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_2by2_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_2by2_IV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Tesla Transceiver LV 9A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_LV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_LV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_LV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + // Tesla Transceiver MV 9A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_MV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_MV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_MV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + // Tesla Transceiver HV 9A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_HV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_HV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_HV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Tesla Transceiver EV 9A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_EV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_EV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_EV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Tesla Transceiver IV 9A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_IV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_IV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_3by3_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_3by3_IV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Tesla Transceiver LV 16A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_LV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_LV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_LV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_LV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LV) + .addTo(assemblerRecipes); + // Tesla Transceiver MV 16A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_MV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_MV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_MV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_MV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_MV) + .addTo(assemblerRecipes); + // Tesla Transceiver HV 16A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_HV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_HV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_HV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_HV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Tesla Transceiver EV 16A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_EV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_EV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_EV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_EV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_EV) + .addTo(assemblerRecipes); + // Tesla Transceiver IV 16A + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_IV.get(1)) + .fluidInputs(Materials.Lead.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_IV.get(1)) + .fluidInputs(Materials.Tin.getMolten(288)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs(ItemList.Battery_Buffer_4by4_IV.get(1), CustomItemList.teslaCover.getWithDamage(1, 0)) + .itemOutputs(CustomItemList.Machine_TeslaCoil_4by4_IV.get(1)) + .fluidInputs(Materials.SolderingAlloy.getMolten(144)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_IV) + .addTo(assemblerRecipes); + // Tesla Tower + GTValues.RA.stdBuilder() + .itemInputs( + GTModHandler.getIC2Item("teslaCoil", 1), + CustomItemList.tM_TeslaSecondary.get(4), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 4), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 4), + ItemList.Upgrade_Overclocker.get(4)) + .itemOutputs(CustomItemList.Machine_Multi_TeslaCoil.get(1)) + .fluidInputs(Materials.Silver.getMolten(576)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Microwave Grinder + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Machine_HV_Microwave.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.StainlessSteel, 4), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.HV, 4), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.AnnealedCopper, 16), + ItemList.Upgrade_Overclocker.get(4)) + .itemOutputs(CustomItemList.Machine_Multi_Microwave.get(1)) + .fluidInputs(Materials.Copper.getMolten(576)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + // Active Transformer + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.WetTransformer_ZPM_LuV.get(1), + BaseRecipeLoader.getItemContainer("HighEnergyFlowCircuit") + .get(1), + GTOreDictUnificator.get( + OrePrefixes.wireGt01, + BaseRecipeLoader.getOrDefault("SuperconductorLuV", Materials.SuperconductorUHV), + 16), + ItemList.valueOf("Circuit_Chip_UHPIC") + .get(2)) + .itemOutputs(CustomItemList.Machine_Multi_Transformer.get(1)) + .fluidInputs(Materials.TungstenSteel.getMolten(576)) + .duration(20 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Network Switch + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.Machine_Multi_Transformer.get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 4), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Cobalt, 64), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Copper, 64), + CustomItemList.DATApipe.get(4)) + .itemOutputs(CustomItemList.Machine_Multi_Switch.get(1)) + .fluidInputs(Materials.Iridium.getMolten(1296)) + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + + } + + public void cleanroomRecipes() { + // Data + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Circuit_Parts_GlassFiber.get(8), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Silver, 8)) + .itemOutputs(CustomItemList.DATApipe.get(1)) + .fluidInputs(Materials.Polytetrafluoroethylene.getMolten(144)) + .requiresCleanRoom() + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Data Casing + GTValues.RA.stdBuilder() + .itemInputs(CustomItemList.DATApipe.get(1), ItemList.Casing_LuV.get(1)) + .itemOutputs(CustomItemList.DATApipeBlock.get(1)) + .requiresCleanRoom() + .duration(20 * TICKS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Laser + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.DATApipe.get(1), + GTModHandler.getIC2Item("reinforcedGlass", 1L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Osmiridium, 2)) + .itemOutputs(CustomItemList.LASERpipe.get(1)) + .requiresCleanRoom() + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_UV) + .addTo(assemblerRecipes); + // Laser Casing + GTValues.RA.stdBuilder() + .itemInputs(CustomItemList.LASERpipe.get(1), ItemList.Casing_LuV.get(1)) + .itemOutputs(CustomItemList.LASERpipeBlock.get(1)) + .requiresCleanRoom() + .duration(20 * TICKS) + .eut(TierEU.RECIPE_LuV) + .addTo(assemblerRecipes); + // Advanced Computer Casing + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.eM_Computer_Casing.get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 1), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Cobalt, 64), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Electrum, 64), + GTOreDictUnificator.get( + OrePrefixes.wireGt02, + BaseRecipeLoader.getOrDefault("SuperconductorLuV", Materials.SuperconductorUHV), + 4)) + .itemOutputs(CustomItemList.eM_Computer_Bus.get(1)) + .fluidInputs(Materials.Iridium.getMolten(1296)) + .requiresCleanRoom() + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Data Input + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.eM_Computer_Casing.get(1), + ItemList.Hatch_Input_Bus_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 1), + CustomItemList.DATApipe.get(2)) + .itemOutputs(CustomItemList.dataIn_Hatch.get(1)) + .fluidInputs(Materials.Iridium.getMolten(1296)) + .requiresCleanRoom() + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Data Output + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.eM_Computer_Casing.get(1), + ItemList.Hatch_Output_Bus_LuV.get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 1), + CustomItemList.DATApipe.get(2)) + .itemOutputs(CustomItemList.dataOut_Hatch.get(1)) + .fluidInputs(Materials.Iridium.getMolten(1296)) + .requiresCleanRoom() + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Rack + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.eM_Computer_Bus.get(1), + ItemList.Hatch_Input_Bus_ZPM.get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LuV, 2), + CustomItemList.DATApipe.get(4)) + .itemOutputs(CustomItemList.rack_Hatch.get(1)) + .fluidInputs(Materials.Iridium.getMolten(1296)) + .requiresCleanRoom() + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Uncertainty + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.eM_Computer_Casing.get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.ZPM, 1), + CustomItemList.DATApipe.get(16), + ItemList.Cover_Screen.get(1), + new ItemStack(Blocks.stone_button, 16), + GTUtility.getIntegratedCircuit(4)) + .itemOutputs(CustomItemList.Uncertainty_Hatch.get(1)) + .fluidInputs(Materials.Iridium.getMolten(2592)) + .requiresCleanRoom() + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Uncertainty X + GTValues.RA.stdBuilder() + .itemInputs( + CustomItemList.eM_Computer_Casing.get(1), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 1), + CustomItemList.DATApipe.get(32), + ItemList.Cover_Screen.get(1), + new ItemStack(Blocks.stone_button, 16), + GTUtility.getIntegratedCircuit(5)) + .itemOutputs(CustomItemList.UncertaintyX_Hatch.get(1)) + .fluidInputs(Materials.Iridium.getMolten(2592)) + .requiresCleanRoom() + .duration(60 * SECONDS) + .eut(TierEU.RECIPE_ZPM) + .addTo(assemblerRecipes); + // Capacitor Hatch + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Input_Bus_HV.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 4), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.Gold, 4)) + .itemOutputs(CustomItemList.capacitor_Hatch.get(1)) + .fluidInputs(Materials.Silver.getMolten(576)) + .requiresCleanRoom() + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Hatch_Output_Bus_HV.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.NickelZincFerrite, 4), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.Gold, 4)) + .itemOutputs(CustomItemList.capacitor_Hatch.get(1)) + .fluidInputs(Materials.Silver.getMolten(576)) + .requiresCleanRoom() + .duration(40 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(assemblerRecipes); + } +} diff --git a/src/main/java/tectech/loader/recipe/AssemblyLine.java b/src/main/java/tectech/loader/recipe/AssemblyLine.java new file mode 100644 index 0000000000..ec619df163 --- /dev/null +++ b/src/main/java/tectech/loader/recipe/AssemblyLine.java @@ -0,0 +1,169 @@ +package tectech.loader.recipe; + +import static gregtech.api.util.GTRecipeBuilder.HOURS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeConstants.AssemblyLine; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_ITEM; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_TIME; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; +import tectech.thing.CustomItemList; + +public class AssemblyLine implements Runnable { + + @Override + public void run() { + // Data Bank + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemList.Hatch_DataAccess_EV.get(1)) + .metadata(RESEARCH_TIME, 16 * MINUTES + 20 * SECONDS) + .itemInputs( + CustomItemList.Machine_Multi_Switch.get(1), + new Object[] { OrePrefixes.circuit.get(Materials.LuV), 2 }, + ItemList.Tool_DataOrb.get(1), + ItemList.Cover_Screen.get(1)) + .fluidInputs(new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000), Materials.Hydrogen.getGas(1000)) + .itemOutputs(CustomItemList.Machine_Multi_DataBank.get(1)) + .eut(14_000) + .duration(10 * MINUTES) + .addTo(AssemblyLine); + + // Hollow Casing + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, CustomItemList.eM_Containment.get(1)) + .metadata(RESEARCH_TIME, 6 * MINUTES + 15 * SECONDS) + .itemInputs( + CustomItemList.eM_Containment.get(1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Europium, 2), + GTOreDictUnificator.get(OrePrefixes.plateQuadruple, Materials.Plutonium, 4), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Lead, 8), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Uranium, 16), + GTOreDictUnificator + .get(OrePrefixes.screw, BaseRecipeLoader.getOrDefault("Quantium", Materials.Europium), 16)) + .fluidInputs( + BaseRecipeLoader.getOrDefault("Trinium", Materials.Osmium) + .getMolten(1296), + Materials.Osmium.getMolten(1296), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000), + Materials.Argon.getGas(1000)) + .itemOutputs(CustomItemList.eM_Hollow.get(2)) + .eut(200_000) + .duration(10 * SECONDS) + .addTo(AssemblyLine); + + // EM Coil + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, CustomItemList.eM_Hollow.get(1)) + .metadata(RESEARCH_TIME, 6 * MINUTES + 15 * SECONDS) + .itemInputs( + CustomItemList.eM_Hollow.get(1), + ItemList.Casing_Fusion_Coil.get(2), + ItemList.Casing_Coil_NaquadahAlloy.get(2), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Europium, 64), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Europium, 64)) + .fluidInputs( + Materials.Glass.getMolten(2304), + Materials.Silicone.getMolten(1872), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000), + BaseRecipeLoader.getOrDefault("Trinium", Materials.Osmium) + .getMolten(1296)) + .itemOutputs(CustomItemList.eM_Coil.get(4)) + .eut(200_000) + .duration(40 * SECONDS) + .addTo(AssemblyLine); + + // Object Holder + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemList.Hatch_Input_Bus_ZPM.get(1)) + .metadata(RESEARCH_TIME, 8 * MINUTES + 20 * SECONDS) + .itemInputs( + ItemList.Hatch_Input_Bus_ZPM.get(1), + CustomItemList.eM_Computer_Bus.get(1), + ItemList.Emitter_ZPM.get(8), + ItemList.Robot_Arm_ZPM.get(1), + ItemList.Electric_Motor_ZPM.get(2), + new Object[] { OrePrefixes.circuit.get(Materials.UV), 1 }, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.cableGt02, Materials.Naquadah, 2) }, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Naquadah, 16) }, + CustomItemList.DATApipe.get(2)) + .fluidInputs( + Materials.UUMatter.getFluid(500), + Materials.Iridium.getMolten(1296), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 1000)) + .itemOutputs(CustomItemList.holder_Hatch.get(1)) + .eut(100_000) + .duration(10 * MINUTES) + .addTo(AssemblyLine); + + // Quantum Computer + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemList.Tool_DataOrb.get(1)) + .metadata(RESEARCH_TIME, 16 * MINUTES + 40 * SECONDS) + .itemInputs( + CustomItemList.Machine_Multi_Switch.get(1), + new Object[] { OrePrefixes.circuit.get(Materials.UV), 2 }, + ItemList.Tool_DataOrb.get(1), + ItemList.Cover_Screen.get(1), + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUV, 8) }, + CustomItemList.DATApipe.get(8)) + .fluidInputs( + Materials.UUMatter.getFluid(1000), + Materials.Iridium.getMolten(1296), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000), + Materials.Hydrogen.getGas(1000)) + .itemOutputs(CustomItemList.Machine_Multi_Computer.get(1)) + .eut(100_000) + .duration(10 * MINUTES) + .addTo(AssemblyLine); + + // Research Station + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, ItemList.ScannerZPM.get(1)) + .metadata(RESEARCH_TIME, 1 * HOURS + 6 * MINUTES + 40 * SECONDS) + .itemInputs( + CustomItemList.Machine_Multi_Switch.get(1), + ItemList.Sensor_ZPM.get(8), + new Object[] { OrePrefixes.circuit.get(Materials.UV), 4 }, + ItemList.Field_Generator_ZPM.get(1), + ItemList.Electric_Motor_ZPM.get(2), + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.cableGt02, Materials.Naquadah, 4) }, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Naquadah, 32) }, + CustomItemList.DATApipe.get(16)) + .fluidInputs( + Materials.UUMatter.getFluid(1000), + Materials.Iridium.getMolten(1296), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000), + Materials.Osmium.getMolten(1296)) + .itemOutputs(CustomItemList.Machine_Multi_Research.get(1)) + .eut(100_000) + .duration(10 * MINUTES) + .addTo(AssemblyLine); + + // Multi Infuser + GTValues.RA.stdBuilder() + .metadata(RESEARCH_ITEM, CustomItemList.Machine_Multi_Transformer.get(1)) + .metadata(RESEARCH_TIME, 6 * MINUTES + 15 * SECONDS) + .itemInputs( + CustomItemList.Machine_Multi_Transformer.get(1), + CustomItemList.eM_Coil.get(8), + CustomItemList.eM_Power.get(8), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.NeodymiumMagnetic, 16)) + .fluidInputs( + Materials.Electrum.getMolten(2592), + Materials.Europium.getMolten(1872), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 2000)) + .itemOutputs(CustomItemList.Machine_Multi_Infuser.get(1)) + .eut(200_000) + .duration(6 * MINUTES + 40 * SECONDS) + .addTo(AssemblyLine); + } +} diff --git a/src/main/java/tectech/loader/recipe/BaseRecipeLoader.java b/src/main/java/tectech/loader/recipe/BaseRecipeLoader.java new file mode 100644 index 0000000000..91e8f01ae6 --- /dev/null +++ b/src/main/java/tectech/loader/recipe/BaseRecipeLoader.java @@ -0,0 +1,49 @@ +package tectech.loader.recipe; + +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; + +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.IItemContainer; +import tectech.TecTech; + +/** + * Created by danie_000 on 16.11.2016. + */ +public class BaseRecipeLoader { + + @SuppressWarnings("rawtypes") + private static Class CUSTOM_ITEM_LIST; + + static { + try { + CUSTOM_ITEM_LIST = Class.forName("com.dreammaster.gthandler.CustomItemList"); + } catch (Exception e) { + TecTech.LOGGER.error("NHCoreMod not present. Disabling all the recipes"); + } + } + + @SuppressWarnings("unchecked") + public static IItemContainer getItemContainer(String name) { + // must never be called before the try catch block is ran + return (IItemContainer) Enum.valueOf(CUSTOM_ITEM_LIST, name); + } + + public static Materials getOrDefault(String name, Materials def) { + Materials mat = Materials.get(name); + return mat == Materials._NULL || mat == null ? def : mat; + } + + public void run() { + // todo: Move those recipes in NHCore + if (NewHorizonsCoreMod.isModLoaded()) { + new Assembler().run(); + new AssemblyLine().run(); + new CircuitAssembler().run(); + new Crafting().run(); + new Extractor().run(); + new ResearchStationAssemblyLine().run(); + } else { + new Godforge().run(); + } + } +} diff --git a/src/main/java/tectech/loader/recipe/CircuitAssembler.java b/src/main/java/tectech/loader/recipe/CircuitAssembler.java new file mode 100644 index 0000000000..2f1ddb59c1 --- /dev/null +++ b/src/main/java/tectech/loader/recipe/CircuitAssembler.java @@ -0,0 +1,54 @@ +package tectech.loader.recipe; + +import static gregtech.api.recipe.RecipeMaps.circuitAssemblerRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; +import tectech.thing.CustomItemList; + +public class CircuitAssembler implements Runnable { + + @Override + public void run() { + Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null + ? FluidRegistry.getFluid("molten.mutatedlivingsolder") + : FluidRegistry.getFluid("molten.solderingalloy"); + + // Optical Processor + GTValues.RA.stdBuilder() + .itemInputs( + ItemList.Optically_Perfected_CPU.get(1L), + ItemList.Optically_Compatible_Memory.get(2L), + ItemList.Circuit_Parts_CapacitorXSMD.get(16L), + ItemList.Circuit_Parts_DiodeXSMD.get(16L), + CustomItemList.DATApipe.get(4L), + GTOreDictUnificator.get(OrePrefixes.bolt, Materials.EnrichedHolmium, 16)) + .itemOutputs(ItemList.Circuit_OpticalProcessor.get(1L)) + .fluidInputs(new FluidStack(solderUEV, 288)) + .requiresCleanRoom() + .duration(20 * SECONDS) + .eut(614400) + .addTo(circuitAssemblerRecipes); + + // Parametrizer Memory Card + GTValues.RA.stdBuilder() + .itemInputs( + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.LV, 2), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Gold, 4)) + .itemOutputs(CustomItemList.parametrizerMemory.get(1)) + .fluidInputs(Materials.Plastic.getMolten(72)) + .requiresCleanRoom() + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_HV) + .addTo(circuitAssemblerRecipes); + } +} diff --git a/src/main/java/tectech/loader/recipe/Crafting.java b/src/main/java/tectech/loader/recipe/Crafting.java new file mode 100644 index 0000000000..03f891b235 --- /dev/null +++ b/src/main/java/tectech/loader/recipe/Crafting.java @@ -0,0 +1,57 @@ +package tectech.loader.recipe; + +import net.minecraft.item.ItemStack; + +import com.gtnewhorizon.structurelib.StructureLibAPI; + +import gregtech.api.enums.Dyes; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTModHandler; +import tectech.thing.CustomItemList; +import tectech.thing.item.ItemEuMeterGT; + +public class Crafting implements Runnable { + + @Override + public void run() { + + // Front Rotation Tool + GTModHandler.addCraftingRecipe( + GTModHandler.getModItem(StructureLibAPI.MOD_ID, "item.structurelib.frontRotationTool", 1L, 0), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "fPR", " RP", "S h", 'P', OrePrefixes.plate.get(Materials.Cobalt), 'R', + OrePrefixes.stick.get(Materials.Cobalt), 'S', OrePrefixes.stick.get(Materials.Wood), }); + + // GT EU reader + GTModHandler.addCraftingRecipe( + new ItemStack(ItemEuMeterGT.INSTANCE, 1), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "PGW", "SCW", "BRN", 'P', OrePrefixes.plateDouble.get(Materials.Steel), 'G', + OrePrefixes.plate.get(Materials.Glass), 'W', OrePrefixes.cableGt01.get(Materials.Copper), 'S', + OrePrefixes.stick.get(Materials.Brass), 'C', ItemList.Casing_Coil_Cupronickel.get(1), 'B', Dyes.dyeBlue, + 'R', Dyes.dyeRed, 'N', Dyes.dyeBlack, }); + + // Owner detector + GTModHandler.addCraftingRecipe( + CustomItemList.Machine_OwnerDetector.get(1), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "PPP", "GEG", "PPP", 'P', OrePrefixes.plate.get(Materials.IronMagnetic), 'G', + OrePrefixes.plate.get(Materials.Glass), 'E', OrePrefixes.gem.get(Materials.EnderPearl) }); + + // Tesla Base + GTModHandler.addCraftingRecipe( + CustomItemList.tM_TeslaBase.get(1), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "PhP", "PFP", "PwP", 'P', OrePrefixes.plate.get(Materials.NickelZincFerrite), 'F', + OrePrefixes.frameGt.get(Materials.NickelZincFerrite) }); + + // Tesla Toroid + GTModHandler.addCraftingRecipe( + CustomItemList.tM_TeslaToroid.get(1), + GTModHandler.RecipeBits.BUFFERED | GTModHandler.RecipeBits.NOT_REMOVABLE, + new Object[] { "PhP", "PFP", "PwP", 'P', OrePrefixes.foil.get(Materials.Aluminium), 'F', + OrePrefixes.frameGt.get(Materials.Aluminium) }); + } +} diff --git a/src/main/java/tectech/loader/recipe/Extractor.java b/src/main/java/tectech/loader/recipe/Extractor.java new file mode 100644 index 0000000000..690cf4585f --- /dev/null +++ b/src/main/java/tectech/loader/recipe/Extractor.java @@ -0,0 +1,67 @@ +package tectech.loader.recipe; + +import static gregtech.api.recipe.RecipeMaps.extractorRecipes; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; +import tectech.thing.CustomItemList; + +public class Extractor implements Runnable { + + @Override + public void run() { + // LV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 0)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 4)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + // MV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 1)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 6)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + // HV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 2)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 8)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + // EV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 3)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 10)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + // IV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 4)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 12)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + // LuV Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 5)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 14)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + // ZPM Tesla Capacitor + GTValues.RA.stdBuilder() + .itemInputs(CustomItemList.teslaCapacitor.getWithDamage(1, 6)) + .itemOutputs(GTOreDictUnificator.get(OrePrefixes.itemCasing, Materials.BatteryAlloy, 16)) + .duration(15 * SECONDS) + .eut(2) + .addTo(extractorRecipes); + + } +} diff --git a/src/main/java/tectech/loader/recipe/Godforge.java b/src/main/java/tectech/loader/recipe/Godforge.java new file mode 100644 index 0000000000..20db967ec4 --- /dev/null +++ b/src/main/java/tectech/loader/recipe/Godforge.java @@ -0,0 +1,675 @@ +package tectech.loader.recipe; + +import static gregtech.api.enums.Mods.EternalSingularity; +import static gregtech.api.enums.Mods.GalaxySpace; +import static gregtech.api.util.GTModHandler.getModItem; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTRecipeBuilder.TICKS; +import static gregtech.api.util.GTRecipeConstants.FOG_EXOTIC_TIER; +import static gregtech.api.util.GTRecipeConstants.FOG_PLASMA_TIER; +import static tectech.recipe.TecTechRecipeMaps.godforgeExoticMatterRecipes; +import static tectech.recipe.TecTechRecipeMaps.godforgePlasmaRecipes; +import static tectech.util.GodforgeMath.getRandomIntInRange; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import goodgenerator.items.GGMaterial; +import goodgenerator.util.ItemRefer; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import tectech.thing.CustomItemList; + +public class Godforge implements Runnable { + + public static final ArrayList plasmaGTMaterialList = new ArrayList<>(); + public static final ArrayList plasmaGTWeightList = new ArrayList<>(); + public static final HashMap exoticModulePlasmaItemMap = new HashMap<>(); + public static final HashMap exoticModulePlasmaFluidMap = new HashMap<>(); + public static final HashMap exoticModuleMagmatterItemMap = new HashMap<>(); + public static final HashMap godforgeUpgradeMats = new HashMap<>(); + public static final List quarkGluonFluidItemsForNEI = new ArrayList<>(); + public static final List quarkGluonItemsForNEI = new ArrayList<>(); + public static final List magmatterTimeFluidItemsForNEI = new ArrayList<>(); + public static final List magmatterSpaceFluidItemsForNEI = new ArrayList<>(); + public static final List magmatterItemsForNEI = new ArrayList<>(); + + @Override + public void run() { + if (!tectech.TecTech.configTecTech.ENABLE_GOD_FORGE) return; + // Solid to plasma recipes + { + // Fusion tier 1-3 + { + // Single step + ItemStack[] solids_t0_1step = { Materials.Aluminium.getDust(1), Materials.Iron.getDust(1), + Materials.Calcium.getDust(1), Materials.Sulfur.getDust(1), Materials.Zinc.getDust(1), + Materials.Niobium.getDust(1), Materials.Tin.getDust(1), Materials.Titanium.getDust(1), + Materials.Nickel.getDust(1), Materials.Silver.getDust(1), Materials.Americium.getDust(1), + Materials.Antimony.getDust(1), Materials.Ardite.getDust(1), Materials.Arsenic.getDust(1), + Materials.Barium.getDust(1), Materials.Beryllium.getDust(1), Materials.Caesium.getDust(1), + Materials.Cadmium.getDust(1), Materials.Carbon.getDust(1), Materials.Cerium.getDust(1), + Materials.Cobalt.getDust(1), Materials.Copper.getDust(1), Materials.Desh.getDust(1), + Materials.Dysprosium.getDust(1), Materials.Erbium.getDust(1), Materials.Europium.getDust(1), + Materials.Gadolinium.getDust(1), Materials.Gallium.getDust(1), Materials.Gold.getDust(1), + Materials.Holmium.getDust(1), Materials.Indium.getDust(1), Materials.Lanthanum.getDust(1), + Materials.Lithium.getDust(1), Materials.Lutetium.getDust(1), Materials.Magnesium.getDust(1), + Materials.Manganese.getDust(1), Materials.MeteoricIron.getDust(1), Materials.Molybdenum.getDust(1), + Materials.Neodymium.getDust(1), Materials.Oriharukon.getDust(1), Materials.Palladium.getDust(1), + Materials.Phosphorus.getDust(1), Materials.Potassium.getDust(1), Materials.Praseodymium.getDust(1), + Materials.Promethium.getDust(1), Materials.Rubidium.getDust(1), Materials.Samarium.getDust(1), + Materials.Silicon.getDust(1), Materials.Sodium.getDust(1), Materials.Strontium.getDust(1), + Materials.Tantalum.getDust(1), Materials.Tellurium.getDust(1), Materials.Terbium.getDust(1), + Materials.Thulium.getDust(1), Materials.Tungsten.getDust(1), Materials.Uranium.getDust(1), + Materials.Uranium235.getDust(1), Materials.Vanadium.getDust(1), Materials.Ytterbium.getDust(1), + Materials.Yttrium.getDust(1), MaterialsElements.getInstance().ZIRCONIUM.getDust(1), + MaterialsElements.getInstance().THORIUM232.getDust(1), + MaterialsElements.getInstance().GERMANIUM.getDust(1), + MaterialsElements.getInstance().THALLIUM.getDust(1), + MaterialsElements.getInstance().RUTHENIUM.getDust(1), + MaterialsElements.getInstance().RHENIUM.getDust(1), + MaterialsElements.getInstance().RHODIUM.getDust(1), + MaterialsElements.getInstance().IODINE.getDust(1), + MaterialsElements.getInstance().HAFNIUM.getDust(1), + MaterialsElements.getInstance().CURIUM.getDust(1) }; + FluidStack[] solid_plasmas_t0_1step = { Materials.Aluminium.getPlasma(144), + Materials.Iron.getPlasma(144), Materials.Calcium.getPlasma(144), Materials.Sulfur.getPlasma(144), + Materials.Zinc.getPlasma(144), Materials.Niobium.getPlasma(144), Materials.Tin.getPlasma(144), + Materials.Titanium.getPlasma(144), Materials.Nickel.getPlasma(144), Materials.Silver.getPlasma(144), + Materials.Americium.getPlasma(144), Materials.Antimony.getPlasma(144), + Materials.Ardite.getPlasma(144), Materials.Arsenic.getPlasma(144), Materials.Barium.getPlasma(144), + Materials.Beryllium.getPlasma(144), Materials.Caesium.getPlasma(144), + Materials.Cadmium.getPlasma(144), Materials.Carbon.getPlasma(144), Materials.Cerium.getPlasma(144), + Materials.Cobalt.getPlasma(144), Materials.Copper.getPlasma(144), Materials.Desh.getPlasma(144), + Materials.Dysprosium.getPlasma(144), Materials.Erbium.getPlasma(144), + Materials.Europium.getPlasma(144), Materials.Gadolinium.getPlasma(144), + Materials.Gallium.getPlasma(144), Materials.Gold.getPlasma(144), Materials.Holmium.getPlasma(144), + Materials.Indium.getPlasma(144), Materials.Lanthanum.getPlasma(144), + Materials.Lithium.getPlasma(144), Materials.Lutetium.getPlasma(144), + Materials.Magnesium.getPlasma(144), Materials.Manganese.getPlasma(144), + Materials.MeteoricIron.getPlasma(144), Materials.Molybdenum.getPlasma(144), + Materials.Neodymium.getPlasma(144), Materials.Oriharukon.getPlasma(144), + Materials.Palladium.getPlasma(144), Materials.Phosphorus.getPlasma(144), + Materials.Potassium.getPlasma(144), Materials.Praseodymium.getPlasma(144), + Materials.Promethium.getPlasma(144), Materials.Rubidium.getPlasma(144), + Materials.Samarium.getPlasma(144), Materials.Silicon.getPlasma(144), + Materials.Sodium.getPlasma(144), Materials.Strontium.getPlasma(144), + Materials.Tantalum.getPlasma(144), Materials.Tellurium.getPlasma(144), + Materials.Terbium.getPlasma(144), Materials.Thulium.getPlasma(144), + Materials.Tungsten.getPlasma(144), Materials.Uranium.getPlasma(144), + Materials.Uranium235.getPlasma(144), Materials.Vanadium.getPlasma(144), + Materials.Ytterbium.getPlasma(144), Materials.Yttrium.getPlasma(144), + new FluidStack(MaterialsElements.getInstance().ZIRCONIUM.getPlasma(), 144), + new FluidStack(MaterialsElements.getInstance().THORIUM232.getPlasma(), 144), + new FluidStack(MaterialsElements.getInstance().GERMANIUM.getPlasma(), 144), + new FluidStack(MaterialsElements.getInstance().THALLIUM.getPlasma(), 144), + new FluidStack(MaterialsElements.getInstance().RUTHENIUM.getPlasma(), 144), + new FluidStack(MaterialsElements.getInstance().RHENIUM.getPlasma(), 144), + new FluidStack(MaterialsElements.getInstance().RHODIUM.getPlasma(), 144), + new FluidStack(MaterialsElements.getInstance().IODINE.getPlasma(), 144), + new FluidStack(MaterialsElements.getInstance().HAFNIUM.getPlasma(), 144), + new FluidStack(MaterialsElements.getInstance().CURIUM.getPlasma(), 144) }; + + for (int i = 0; i < solids_t0_1step.length; i++) { + boolean multistep = false; + GTValues.RA.stdBuilder() + .itemInputs(solids_t0_1step[i]) + .fluidOutputs(solid_plasmas_t0_1step[i]) + .duration(10 * TICKS) + .eut(TierEU.RECIPE_MAX) + .special(multistep) + .metadata(FOG_PLASMA_TIER, 0) + .noOptimize() + .addTo(godforgePlasmaRecipes); + } + + // Multi-step + ItemStack[] solids_t0_xstep = { Materials.Force.getDust(1), Materials.Bismuth.getDust(1), + MaterialsElements.STANDALONE.ADVANCED_NITINOL.getDust(1), Materials.Boron.getDust(1), + MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getDust(1), + MaterialsElements.STANDALONE.RUNITE.getDust(1), + MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getDust(1), Materials.Iridium.getDust(1), + Materials.Naquadah.getDust(1), Materials.Osmium.getDust(1), Materials.Platinum.getDust(1), + Materials.Plutonium.getDust(1), MaterialsElements.getInstance().CALIFORNIUM.getDust(1), + Materials.Chrome.getDust(1) }; + FluidStack[] solid_plasmas_t0_xstep = { + new FluidStack(MaterialsElements.STANDALONE.FORCE.getPlasma(), 144), + Materials.Bismuth.getPlasma(144), + new FluidStack(MaterialsElements.STANDALONE.ADVANCED_NITINOL.getPlasma(), 144), + Materials.Boron.getPlasma(144), + new FluidStack(MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getPlasma(), 144), + new FluidStack(MaterialsElements.STANDALONE.RUNITE.getPlasma(), 144), + new FluidStack(MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getPlasma(), 144), + Materials.Iridium.getPlasma(144), Materials.Naquadah.getPlasma(144), + Materials.Osmium.getPlasma(144), Materials.Platinum.getPlasma(144), + Materials.Plutonium.getPlasma(144), + new FluidStack(MaterialsElements.getInstance().CALIFORNIUM.getPlasma(), 144), + Materials.Chrome.getPlasma(144), }; + + for (int i = 0; i < solids_t0_xstep.length; i++) { + boolean multistep = true; + GTValues.RA.stdBuilder() + .itemInputs(solids_t0_xstep[i]) + .fluidOutputs(solid_plasmas_t0_xstep[i]) + .duration(2 * SECONDS) + .eut(TierEU.RECIPE_MAX) + .special(multistep) + .metadata(FOG_PLASMA_TIER, 0) + .noOptimize() + .addTo(godforgePlasmaRecipes); + } + } + // Fusion tier 4-5 + { + // Single step + ItemStack[] solids_t1_1step = { Materials.Lead.getDust(1), Materials.Plutonium241.getDust(1), + Materials.Thorium.getDust(1) }; + FluidStack[] solid_plasmas_t1_1step = { Materials.Lead.getPlasma(144), + Materials.Plutonium241.getPlasma(144), Materials.Thorium.getPlasma(144) }; + + for (int i = 0; i < solids_t1_1step.length; i++) { + boolean multistep = false; + GTValues.RA.stdBuilder() + .itemInputs(solids_t1_1step[i]) + .fluidOutputs(solid_plasmas_t1_1step[i]) + .duration(5 * SECONDS) + .eut(TierEU.RECIPE_MAX) + .special(multistep) + .metadata(FOG_PLASMA_TIER, 1) + .noOptimize() + .addTo(godforgePlasmaRecipes); + } + + // Multi-step + ItemStack[] solids_t1_xstep = { MaterialsElements.getInstance().NEPTUNIUM.getDust(1), + MaterialsElements.getInstance().FERMIUM.getDust(1) }; + FluidStack[] solid_plasmas_t1_xstep = { + new FluidStack(MaterialsElements.getInstance().NEPTUNIUM.getPlasma(), 144), + new FluidStack(MaterialsElements.getInstance().FERMIUM.getPlasma(), 144) }; + + for (int i = 0; i < solids_t1_xstep.length; i++) { + boolean multistep = true; + GTValues.RA.stdBuilder() + .itemInputs(solids_t1_xstep[i]) + .fluidOutputs(solid_plasmas_t1_xstep[i]) + .duration(7 * SECONDS) + .eut(TierEU.RECIPE_MAX) + .special(multistep) + .metadata(FOG_PLASMA_TIER, 1) + .noOptimize() + .addTo(godforgePlasmaRecipes); + } + } + // Exotic Plasmas + { + // Single step + ItemStack[] solids_t2_1step = { MaterialsElements.STANDALONE.RHUGNOR.getDust(1), + MaterialsElements.STANDALONE.DRAGON_METAL.getDust(1), + MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getDust(1), Materials.CosmicNeutronium.getDust(1), + Materials.Draconium.getDust(1), Materials.DraconiumAwakened.getDust(1), + Materials.Ichorium.getDust(1) }; + FluidStack[] solid_plasmas_t2_1step = { + new FluidStack(MaterialsElements.STANDALONE.RHUGNOR.getPlasma(), 144), + new FluidStack(MaterialsElements.STANDALONE.DRAGON_METAL.getPlasma(), 144), + new FluidStack(MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getPlasma(), 144), + Materials.CosmicNeutronium.getPlasma(144), Materials.Draconium.getPlasma(144), + Materials.DraconiumAwakened.getPlasma(144), Materials.Ichorium.getPlasma(144) }; + + for (int i = 0; i < solids_t2_1step.length; i++) { + boolean multistep = false; + GTValues.RA.stdBuilder() + .itemInputs(solids_t2_1step[i]) + .fluidOutputs(solid_plasmas_t2_1step[i]) + .duration(15 * SECONDS) + .eut(TierEU.RECIPE_MAX) + .special(multistep) + .metadata(FOG_PLASMA_TIER, 2) + .noOptimize() + .addTo(godforgePlasmaRecipes); + } + + // Multi-step + ItemStack[] solids_t2_xstep = { MaterialsElements.STANDALONE.HYPOGEN.getDust(1), + Materials.Tritanium.getDust(1), Materials.Flerovium.getDust(1), Materials.Neutronium.getDust(1), }; + FluidStack[] solid_plasmas_t2_xstep = { + new FluidStack(MaterialsElements.STANDALONE.HYPOGEN.getPlasma(), 144), + Materials.Tritanium.getPlasma(144), Materials.Flerovium.getPlasma(144), + Materials.Neutronium.getPlasma(144), }; + + for (int i = 0; i < solids_t2_xstep.length; i++) { + boolean multistep = true; + GTValues.RA.stdBuilder() + .itemInputs(solids_t2_xstep[i]) + .fluidOutputs(solid_plasmas_t2_xstep[i]) + .duration(25 * SECONDS) + .eut(TierEU.RECIPE_MAX) + .special(multistep) + .metadata(FOG_PLASMA_TIER, 2) + .noOptimize() + .addTo(godforgePlasmaRecipes); + } + + } + + } + + // Fluid to plasma recipes + { + // Fusion tier 1-3 + { + // Single step + FluidStack[] fluids_t0_1step = { Materials.Helium.getGas(500), Materials.Nitrogen.getGas(500), + Materials.Argon.getGas(500), Materials.Chlorine.getGas(500), Materials.Deuterium.getGas(500), + Materials.Fluorine.getGas(500), Materials.Hydrogen.getGas(500), Materials.Radon.getGas(500), + Materials.Tritium.getGas(500), Materials.Mercury.getFluid(500) }; + FluidStack[] fluid_plasmas_t0_1step = { Materials.Helium.getPlasma(500), + Materials.Nitrogen.getPlasma(500), Materials.Argon.getPlasma(500), + Materials.Chlorine.getPlasma(500), Materials.Deuterium.getPlasma(500), + Materials.Fluorine.getPlasma(500), Materials.Hydrogen.getPlasma(500), + Materials.Radon.getPlasma(500), Materials.Tritium.getPlasma(500), + Materials.Mercury.getPlasma(500) }; + + for (int i = 0; i < fluids_t0_1step.length; i++) { + boolean multistep = false; + GTValues.RA.stdBuilder() + .fluidInputs(fluids_t0_1step[i]) + .fluidOutputs(fluid_plasmas_t0_1step[i]) + .duration(1 * SECONDS) + .eut(TierEU.RECIPE_MAX) + .special(multistep) + .metadata(FOG_PLASMA_TIER, 0) + .noOptimize() + .addTo(godforgePlasmaRecipes); + } + + // Multi-step + FluidStack[] fluids_t0_xstep = { MaterialsElements.getInstance().NEON.getFluidStack(500), + Materials.Oxygen.getGas(500), MaterialsElements.getInstance().KRYPTON.getFluidStack(500), + MaterialsElements.getInstance().XENON.getFluidStack(500) }; + FluidStack[] fluid_plasmas_t0_xstep = { + new FluidStack(MaterialsElements.getInstance().NEON.getPlasma(), 500), + Materials.Oxygen.getPlasma(500), + new FluidStack(MaterialsElements.getInstance().KRYPTON.getPlasma(), 500), + new FluidStack(MaterialsElements.getInstance().XENON.getPlasma(), 500) }; + + for (int i = 0; i < fluids_t0_xstep.length; i++) { + boolean multistep = true; + GTValues.RA.stdBuilder() + .fluidInputs(fluids_t0_xstep[i]) + .fluidOutputs(fluid_plasmas_t0_xstep[i]) + .duration(3 * SECONDS) + .eut(TierEU.RECIPE_MAX) + .special(multistep) + .metadata(FOG_PLASMA_TIER, 0) + .noOptimize() + .addTo(godforgePlasmaRecipes); + } + } + // Fusion tier 4-5 + { + // Single step + // None yet + + // Multi-step + // None yet + } + // Exotic + { + // None yet + } + } + + // Exotic module fake recipes + { + GTValues.RA.stdBuilder() + .itemInputs(Materials.Iron.getDust(1)) + .fluidInputs(Materials.Iron.getMolten(1)) + .fluidOutputs(MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MAX) + .metadata(FOG_EXOTIC_TIER, 1) + .ignoreCollision() + .fake() + .addTo(godforgeExoticMatterRecipes); + + GTValues.RA.stdBuilder() + .itemInputs(Materials.Iron.getDust(1)) + .fluidInputs(Materials.Iron.getMolten(1), Materials.Bismuth.getMolten(1)) + .fluidOutputs(MaterialsUEVplus.MagMatter.getMolten(144)) + .duration(10 * SECONDS) + .eut(TierEU.RECIPE_MAX) + .metadata(FOG_EXOTIC_TIER, 1) + .ignoreCollision() + .fake() + .addTo(godforgeExoticMatterRecipes); + } + + // Exotic module plasma material maps + // GT materials + plasmaGTMaterialList.addAll( + Arrays.asList( + Materials.Aluminium, + Materials.Americium, + Materials.Antimony, + Materials.Ardite, + Materials.Argon, + Materials.Arsenic, + Materials.Barium, + Materials.Beryllium, + Materials.Bismuth, + Materials.Boron, + Materials.Caesium, + Materials.Calcium, + Materials.Cadmium, + Materials.Carbon, + Materials.Cerium, + Materials.Chlorine, + Materials.Chrome, + Materials.Cobalt, + Materials.Copper, + Materials.Desh, + Materials.Deuterium, + Materials.Dysprosium, + Materials.Erbium, + Materials.Europium, + Materials.Fluorine, + Materials.Gadolinium, + Materials.Gallium, + Materials.Gold, + Materials.Helium, + Materials.Holmium, + Materials.Hydrogen, + Materials.Indium, + Materials.Iridium, + Materials.Iron, + Materials.Lanthanum, + Materials.Lead, + Materials.Lithium, + Materials.Lutetium, + Materials.Magnesium, + Materials.Manganese, + Materials.MeteoricIron, + Materials.Molybdenum, + Materials.Naquadah, + Materials.Neodymium, + Materials.Nickel, + Materials.Niobium, + Materials.Nitrogen, + Materials.Oriharukon, + Materials.Osmium, + Materials.Oxygen, + Materials.Palladium, + Materials.Phosphorus, + Materials.Platinum, + Materials.Plutonium, + Materials.Plutonium241, + Materials.Potassium, + Materials.Praseodymium, + Materials.Promethium, + Materials.Radon, + Materials.Rubidium, + Materials.Samarium, + Materials.Silicon, + Materials.Silver, + Materials.Sodium, + Materials.Strontium, + Materials.Sulfur, + Materials.Tantalum, + Materials.Tellurium, + Materials.Terbium, + Materials.Thorium, + Materials.Thulium, + Materials.Tin, + Materials.Titanium, + Materials.Tritium, + Materials.Tungsten, + Materials.Uranium235, + Materials.Uranium, + Materials.Vanadium, + Materials.Ytterbium, + Materials.Yttrium, + Materials.Zinc)); + + plasmaGTWeightList.addAll( + Arrays.asList( + 6000 /* Aluminium */, + 10000 /* Americium */, + 6000 /* Antimony */, + 6000 /* Ardite */, + 6000 /* Argon */, + 6000 /* Arsenic */, + 6000 /* Barium */, + 6000 /* Beryllium */, + 8000 /* Bismuth */, + 8000 /* Boron */, + 6000 /* Caesium */, + 10000 /* Calcium */, + 6000 /* Cadmium */, + 6000 /* Carbon */, + 6000 /* Cerium */, + 6000 /* Chlorine */, + 6000 /* Chrome */, + 6000 /* Cobalt */, + 6000 /* Copper */, + 6000 /* Desh */, + 6000 /* Deuterium */, + 2000 /* Dysprosium */, + 2000 /* Erbium */, + 6000 /* Europium */, + 6000 /* Fluorine */, + 2000 /* Gadolinium */, + 6000 /* Gallium */, + 6000 /* Gold */, + 10000 /* Helium */, + 6000 /* Holmium */, + 10000 /* Hydrogen */, + 6000 /* Indium */, + 6000 /* Iridium */, + 10000 /* Iron */, + 6000 /* Lanthanum */, + 500 /* Lead */, + 6000 /* Lithium */, + 6000 /* Lutetium */, + 6000 /* Magnesium */, + 6000 /* Manganese */, + 6000 /* Meteoric Iron */, + 6000 /* Molybdenum */, + 6000 /* Naquadah */, + 6000 /* Neodymium */, + 10000 /* Nickel */, + 10000 /* Niobium */, + 10000 /* Nitrogen */, + 6000 /* Oriharukon */, + 6000 /* Osmium */, + 8000 /* Oxygen */, + 6000 /* Palladium */, + 6000 /* Phosphorus */, + 6000 /* Platinum */, + 6000 /* Plutonium 239 */, + 500 /* Plutonium 241 */, + 6000 /* Potassium */, + 6000 /* Praseodymium */, + 2000 /* Promethium */, + 10000 /* Radon */, + 2000 /* Rubidium */, + 6000 /* Samarium */, + 6000 /* Raw Silicon */, + 10000 /* Silver */, + 6000 /* Sodium */, + 2000 /* Strontium */, + 10000 /* Sulfur */, + 6000 /* Tantalum */, + 2000 /* Tellurium */, + 1000 /* Terbium */, + 500 /* Thorium */, + 6000 /* Thulium */, + 10000 /* Tin */, + 10000 /* Titanium */, + 6000 /* Tritium */, + 6000 /* Tungsten */, + 6000 /* Uranium 235 */, + 6000 /* Uranium 238 */, + 6000 /* Vanadium */, + 2000 /* Ytterbium */, + 6000 /* Yttrium */, + 6000 /* Zinc */)); + + // GT++ materials + exoticModulePlasmaItemMap.put(MaterialsElements.getInstance().ZIRCONIUM.getTinyDust(1), 6000); + exoticModulePlasmaItemMap.put(MaterialsElements.getInstance().THORIUM232.getTinyDust(1), 6000); + exoticModulePlasmaItemMap.put(MaterialsElements.getInstance().GERMANIUM.getTinyDust(1), 2000); + exoticModulePlasmaItemMap.put(MaterialsElements.getInstance().THALLIUM.getTinyDust(1), 2000); + exoticModulePlasmaItemMap.put(MaterialsElements.getInstance().RUTHENIUM.getTinyDust(1), 6000); + exoticModulePlasmaItemMap.put(MaterialsElements.getInstance().RHENIUM.getTinyDust(1), 2000); + exoticModulePlasmaItemMap.put(MaterialsElements.getInstance().RHODIUM.getTinyDust(1), 6000); + exoticModulePlasmaItemMap.put(MaterialsElements.getInstance().IODINE.getTinyDust(1), 6000); + exoticModulePlasmaItemMap.put(MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getTinyDust(1), 8000); + exoticModulePlasmaItemMap.put(MaterialsElements.STANDALONE.ADVANCED_NITINOL.getTinyDust(1), 8000); + exoticModulePlasmaItemMap.put(MaterialsElements.STANDALONE.FORCE.getTinyDust(1), 8000); + exoticModulePlasmaItemMap.put(MaterialsElements.getInstance().HAFNIUM.getTinyDust(1), 6000); + exoticModulePlasmaItemMap.put(MaterialsElements.getInstance().CALIFORNIUM.getTinyDust(1), 1000); + exoticModulePlasmaItemMap.put(MaterialsElements.STANDALONE.RUNITE.getTinyDust(1), 8000); + + exoticModulePlasmaFluidMap.put(new FluidStack(MaterialsElements.getInstance().XENON.getFluid(), 1), 8000); + exoticModulePlasmaFluidMap.put(new FluidStack(MaterialsElements.getInstance().KRYPTON.getFluid(), 1), 8000); + exoticModulePlasmaFluidMap.put(new FluidStack(MaterialsElements.getInstance().NEON.getFluid(), 1), 8000); + // These are here because they cant be solidified + exoticModulePlasmaFluidMap.put(new FluidStack(MaterialsElements.getInstance().CURIUM.getFluid(), 1), 10000); + exoticModulePlasmaFluidMap.put(new FluidStack(MaterialsElements.getInstance().NEPTUNIUM.getFluid(), 1), 800); + exoticModulePlasmaFluidMap.put(new FluidStack(MaterialsElements.getInstance().FERMIUM.getFluid(), 1), 800); + // Mercury is weird, it has neither dust nor gas, so it needs to be added separately + exoticModulePlasmaFluidMap.put(Materials.Mercury.getFluid(1), 6000); + + // Loop for adding all GT plasma materials + for (int i = 0; i < plasmaGTMaterialList.size(); i++) { + if (plasmaGTMaterialList.get(i) + .getDustTiny(1) != null) { + exoticModulePlasmaItemMap.put( + plasmaGTMaterialList.get(i) + .getDustTiny(1), + plasmaGTWeightList.get(i)); + } else { + exoticModulePlasmaFluidMap.put( + plasmaGTMaterialList.get(i) + .getGas(1), + plasmaGTWeightList.get(i)); + } + } + + // Magmatter map + // GT materials + exoticModuleMagmatterItemMap.put(Materials.CosmicNeutronium.getDustTiny(1), 100000); + exoticModuleMagmatterItemMap.put(Materials.Draconium.getDustTiny(1), 100000); + exoticModuleMagmatterItemMap.put(Materials.DraconiumAwakened.getDustTiny(1), 100000); + exoticModuleMagmatterItemMap.put(Materials.Ichorium.getDustTiny(1), 100000); + exoticModuleMagmatterItemMap.put(Materials.Neutronium.getDustTiny(1), 100000); + exoticModuleMagmatterItemMap.put(Materials.Flerovium.getDustTiny(1), 100000); + + // GT++ materials + exoticModuleMagmatterItemMap.put(MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getTinyDust(1), 100000); + exoticModuleMagmatterItemMap.put(MaterialsElements.STANDALONE.HYPOGEN.getTinyDust(1), 100000); + exoticModuleMagmatterItemMap.put(MaterialsElements.STANDALONE.RHUGNOR.getTinyDust(1), 100000); + exoticModuleMagmatterItemMap.put(MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getTinyDust(1), 100000); + exoticModuleMagmatterItemMap.put(MaterialsElements.STANDALONE.DRAGON_METAL.getTinyDust(1), 100000); + + // For NEI + for (FluidStack fluid : exoticModulePlasmaFluidMap.keySet()) { + fluid.amount = getRandomIntInRange(1, 64); + quarkGluonFluidItemsForNEI.add(GTUtility.getFluidDisplayStack(fluid, true)); + } + for (ItemStack item : exoticModulePlasmaItemMap.keySet()) { + item.stackSize = getRandomIntInRange(1, 64); + quarkGluonItemsForNEI.add(item); + } + for (int i = 0; i < 21; i++) { + magmatterTimeFluidItemsForNEI + .add(GTUtility.getFluidDisplayStack(MaterialsUEVplus.Time.getMolten(getRandomIntInRange(1, 50)), true)); + magmatterSpaceFluidItemsForNEI.add( + GTUtility.getFluidDisplayStack(MaterialsUEVplus.Space.getMolten(getRandomIntInRange(51, 100)), true)); + } + magmatterItemsForNEI.addAll(exoticModuleMagmatterItemMap.keySet()); + + // Godforge upgrade materials + if (EternalSingularity.isModLoaded() && GalaxySpace.isModLoaded()) { + godforgeUpgradeMats.put( + 0, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUIVBase, 64), + ItemList.SuperconductorComposite.get(32), + GGMaterial.metastableOganesson.get(OrePrefixes.gearGt, 16), + getModItem(EternalSingularity.ID, "eternal_singularity", 8L), ItemList.Robot_Arm_UIV.get(64L), + ItemList.Field_Generator_UEV.get(64L) }); + + godforgeUpgradeMats.put( + 5, + new ItemStack[] { GregtechItemList.Mega_AlloyBlastSmelter.get(16L), + ItemList.Casing_Coil_Hypogen.get(64L), + CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(32L), + getModItem(EternalSingularity.ID, "eternal_singularity", 16L), + ItemRefer.Field_Restriction_Coil_T3.get(48), ItemList.Robot_Arm_UIV.get(64L), + ItemList.Field_Generator_UEV.get(64L) }); + + godforgeUpgradeMats.put( + 7, + new ItemStack[] { CustomItemList.Godforge_StellarEnergySiphonCasing.get(8), + GregtechItemList.FusionComputer_UV3.get(8), GregtechItemList.Casing_Fusion_Internal2.get(64), + getModItem(GalaxySpace.ID, "item.DysonSwarmParts", 64, 3), MaterialsAlloy.QUANTUM.getPlateDense(48), + MaterialsElements.STANDALONE.RHUGNOR.getGear(32), + getModItem(EternalSingularity.ID, "eternal_singularity", 16L), ItemList.Robot_Arm_UIV.get(64L), + ItemList.Field_Generator_UEV.get(64L) }); + + godforgeUpgradeMats.put( + 11, + new ItemStack[] { CustomItemList.Godforge_StellarEnergySiphonCasing.get(16), + ItemRefer.Compact_Fusion_MK5.get(2), ItemRefer.Compact_Fusion_Coil_T4.get(64), + CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(16), + ItemList.Machine_Multi_TranscendentPlasmaMixer.get(4), + MaterialsElements.STANDALONE.RHUGNOR.getGear(64), + GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Ichorium, 64), + getModItem(EternalSingularity.ID, "eternal_singularity", 32L), ItemList.Robot_Arm_UIV.get(64L), + ItemList.Field_Generator_UEV.get(64L) }); + + godforgeUpgradeMats.put( + 26, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 64), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUMVBase, 64), + MaterialsElements.STANDALONE.HYPOGEN.getFrameBox(64), + MaterialsElements.STANDALONE.DRAGON_METAL.getFrameBox(64), + CustomItemList.EOH_Reinforced_Spatial_Casing.get(64), + CustomItemList.EOH_Infinite_Energy_Casing.get(8), ItemList.ZPM6.get(4), + ItemList.Field_Generator_UMV.get(32) }); + + godforgeUpgradeMats.put( + 29, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.WhiteDwarfMatter, 64), + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.BlackDwarfMatter, 64), + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.Eternity, 16), + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.Universium, 4), + CustomItemList.EOH_Infinite_Energy_Casing.get(64), + CustomItemList.StabilisationFieldGeneratorTier5.get(16), ItemList.ZPM6.get(16), + ItemList.Field_Generator_UMV.get(64) }); + + godforgeUpgradeMats.put( + 30, + new ItemStack[] { CustomItemList.Machine_Multi_QuarkGluonPlasmaModule.get(32), + CustomItemList.Godforge_StellarEnergySiphonCasing.get(64), + CustomItemList.StabilisationFieldGeneratorTier6.get(48), + ItemList.Transdimensional_Alignment_Matrix.get(8), ItemList.ZPM6.get(16), + ItemList.Robot_Arm_UMV.get(64), ItemList.Conveyor_Module_UMV.get(64) }); + } + + } +} diff --git a/src/main/java/tectech/loader/recipe/ResearchStationAssemblyLine.java b/src/main/java/tectech/loader/recipe/ResearchStationAssemblyLine.java new file mode 100644 index 0000000000..7a8cad71b9 --- /dev/null +++ b/src/main/java/tectech/loader/recipe/ResearchStationAssemblyLine.java @@ -0,0 +1,3709 @@ +package tectech.loader.recipe; + +import static com.google.common.math.LongMath.pow; +import static goodgenerator.loader.Loaders.compactFusionCoil; +import static goodgenerator.loader.Loaders.yottaFluidTankCell; +import static gregtech.api.enums.Mods.*; +import static gregtech.api.enums.Mods.Avaritia; +import static gregtech.api.enums.Mods.AvaritiaAddons; +import static gregtech.api.enums.Mods.BloodMagic; +import static gregtech.api.enums.Mods.DraconicEvolution; +import static gregtech.api.enums.Mods.EternalSingularity; +import static gregtech.api.enums.Mods.ExtraUtilities; +import static gregtech.api.enums.Mods.GTNHIntergalactic; +import static gregtech.api.enums.Mods.GTPlusPlusEverglades; +import static gregtech.api.enums.Mods.GalacticraftAmunRa; +import static gregtech.api.enums.Mods.GalaxySpace; +import static gregtech.api.enums.Mods.GraviSuite; +import static gregtech.api.enums.Mods.IndustrialCraft2; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.enums.Mods.SGCraft; +import static gregtech.api.enums.Mods.SuperSolarPanels; +import static gregtech.api.enums.Mods.Thaumcraft; +import static gregtech.api.enums.Mods.TinkersGregworks; +import static gregtech.api.util.GTModHandler.getModItem; +import static gregtech.api.util.GTRecipeBuilder.INGOTS; +import static gregtech.api.util.GTRecipeBuilder.MINUTES; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gtPlusPlus.core.material.MaterialsAlloy.ABYSSAL; +import static gtPlusPlus.core.material.MaterialsAlloy.CINOBITE; +import static gtPlusPlus.core.material.MaterialsAlloy.LAFIUM; +import static gtPlusPlus.core.material.MaterialsAlloy.LAURENIUM; +import static gtPlusPlus.core.material.MaterialsAlloy.PIKYONIUM; +import static gtPlusPlus.core.material.MaterialsAlloy.QUANTUM; +import static gtPlusPlus.core.material.MaterialsAlloy.TITANSTEEL; +import static gtPlusPlus.core.material.MaterialsAlloy.TRINIUM_REINFORCED_STEEL; +import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.ASTRAL_TITANIUM; +import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN; +import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.CHRONOMATIC_GLASS; +import static gtPlusPlus.core.material.MaterialsElements.STANDALONE.HYPOGEN; +import static kekztech.common.Blocks.lscLapotronicEnergyUnit; +import static kubatech.api.enums.ItemList.DEFCAwakenedSchematic; +import static kubatech.api.enums.ItemList.DEFCChaoticSchematic; +import static kubatech.api.enums.ItemList.DEFCDraconicSchematic; +import static kubatech.api.enums.ItemList.DEFCWyvernSchematic; +import static kubatech.api.enums.ItemList.DraconicEvolutionFusionCrafter; +import static kubatech.loaders.BlockLoader.defcCasingBlock; +import static tectech.loader.recipe.BaseRecipeLoader.getItemContainer; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; + +import com.rwtema.extrautils.ExtraUtils; + +import bartworks.common.loaders.ItemRegistry; +import bartworks.system.material.WerkstoffLoader; +import fox.spiteful.avaritia.compat.ticon.Tonkers; +import goodgenerator.items.GGMaterial; +import goodgenerator.util.ItemRefer; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsBotania; +import gregtech.api.enums.MaterialsKevlar; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.TierEU; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; +import gtPlusPlus.core.material.MaterialMisc; +import gtPlusPlus.core.material.MaterialsAlloy; +import gtPlusPlus.core.material.MaterialsElements; +import gtPlusPlus.core.material.Particle; +import gtPlusPlus.core.util.minecraft.FluidUtils; +import gtPlusPlus.xmod.gregtech.api.enums.GregtechItemList; +import kekztech.common.Blocks; +import kekztech.common.TileEntities; +import tconstruct.tools.TinkerTools; +import tectech.recipe.TTRecipeAdder; +import tectech.thing.CustomItemList; +import tectech.thing.block.BlockGodforgeGlass; +import tectech.thing.block.BlockQuantumGlass; +import vexatos.tgregworks.reference.PartTypes; +import vexatos.tgregworks.util.TGregUtils; + +public class ResearchStationAssemblyLine implements Runnable { + + @Override + public void run() { + itemPartsUHVAsslineRecipes(); + itemPartsUEVAsslineRecipes(); + itemPartsUIVAsslineRecipes(); + itemPartsUMVAsslineRecipes(); + itemPartsUXVAsslineRecipes(); + addWirelessEnergyRecipes(); + addGodforgeRecipes(); + + if (TinkersGregworks.isModLoaded() && Avaritia.isModLoaded() // Infinity, Cosmic Neutronium + && ExtraUtilities.isModLoaded() // Bedrockium + ) { + addEOHRecipes(); + } + + Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null + ? FluidRegistry.getFluid("molten.mutatedlivingsolder") + : FluidRegistry.getFluid("molten.solderingalloy"); + + Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null + ? FluidRegistry.getFluid("molten.indalloy140") + : FluidRegistry.getFluid("molten.solderingalloy"); + + // Infinite Oil Rig + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.OilDrill4.get(1), + 16777216, + 2048, + (int) TierEU.RECIPE_UHV, + 4, + new Object[] { ItemList.OilDrill4.get(1), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Neutronium, 4), + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 4L }, ItemList.Electric_Motor_UHV.get(4), + ItemList.Electric_Pump_UHV.get(4), GTOreDictUnificator.get(OrePrefixes.gearGt, Materials.Neutronium, 4), + ItemList.Sensor_UHV.get(3), ItemList.Field_Generator_UHV.get(3), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Neutronium, 12) }, + new FluidStack[] { new FluidStack(solderUEV, 1296), Materials.Neutronium.getMolten(576) }, + ItemList.OilDrillInfinite.get(1), + 6000, + (int) TierEU.RECIPE_UHV); + + // Infinity Coil + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Casing_Coil_AwakenedDraconium.get(1), + 16_777_216, + 2048, + (int) TierEU.RECIPE_UEV, + 1, + new Object[] { new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.Infinity, 8), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Infinity, 8), + getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), + getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 32, 0) }, + new FluidStack[] { Materials.DraconiumAwakened.getMolten(576), }, + ItemList.Casing_Coil_Infinity.get(1), + 60 * 20, + (int) TierEU.RECIPE_UEV); + + // Hypogen Coil + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Casing_Coil_Infinity.get(1), + 16_777_216 * 2, + 2048 * 2, + (int) TierEU.RECIPE_UIV, + 1, + new Object[] { new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, + GTOreDictUnificator.get("wireGt02Hypogen", 8L), HYPOGEN.getScrew(8), + getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), + getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), + getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), }, + new FluidStack[] { Materials.Infinity.getMolten(576), }, + ItemList.Casing_Coil_Hypogen.get(1), + 60 * 20, + (int) TierEU.RECIPE_UIV); + + // Eternal coil + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Casing_Coil_Hypogen.get(1), + 16_777_216 * 4, + 8_192, + (int) TierEU.RECIPE_UMV, + 1, + new Object[] { new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, + GTOreDictUnificator.get(OrePrefixes.wireGt02, MaterialsUEVplus.SpaceTime, 8), + GTOreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SpaceTime, 8), + getModItem(EternalSingularity.ID, "eternal_singularity", 1L), + getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), + getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), + getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), + getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), + getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), + getModItem(NewHorizonsCoreMod.ID, "item.MicaInsulatorFoil", 64, 0), }, + new FluidStack[] { new FluidStack(FluidRegistry.getFluid("molten.hypogen"), 576), }, + ItemList.Casing_Coil_Eternal.get(1), + 60 * 20, + (int) TierEU.RECIPE_UMV); + + // UHV-UMV Energy Hatch & Dynamo + { + // Energy Hatches + { + // Energy Hatch UHV + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Hatch_Energy_UV.get(1L), + 24000, + 16, + 50000, + 2, + new Object[] { ItemList.Hull_MAX.get(1L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 2L), + ItemList.Circuit_Chip_QPIC.get(2L), new Object[] { OrePrefixes.circuit.get(Materials.UHV), 2L }, + ItemList.UHV_Coil.get(2L), + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + ItemList.Electric_Pump_UHV.get(1L) }, + new FluidStack[] { new FluidStack(FluidRegistry.getFluid("ic2coolant"), 16000), + new FluidStack(solderIndalloy, 40 * 144) }, + ItemList.Hatch_Energy_UHV.get(1L), + 1000, + (int) TierEU.RECIPE_UHV); + + // Energy Hatch UEV + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Hatch_Energy_UHV.get(1L), + 48000, + 32, + 100000, + 4, + new Object[] { ItemList.Hull_UEV.get(1L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 2L), + ItemList.Circuit_Chip_QPIC.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UEV), 2L }, + ItemList.UHV_Coil.get(4L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Electric_Pump_UEV.get(1L) }, + new FluidStack[] { new FluidStack(FluidRegistry.getFluid("ic2coolant"), 32000), + new FluidStack(solderUEV, 20 * 144), Materials.UUMatter.getFluid(8000L) }, + ItemList.Hatch_Energy_UEV.get(1L), + 1000, + (int) TierEU.RECIPE_UEV); + + // Energy Hatch UIV + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Hatch_Energy_UEV.get(1L), + 96_000, + 64, + 200_000, + 8, + new Object[] { ItemList.Hull_UIV.get(1L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUIV, 2L), + ItemList.Circuit_Chip_QPIC.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UIV), 2L }, + ItemList.UHV_Coil.get(8L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Electric_Pump_UIV.get(1L) }, + new FluidStack[] { Materials.SuperCoolant.getFluid(16_000L), new FluidStack(solderUEV, 20 * 144), + Materials.UUMatter.getFluid(16_000L) }, + ItemList.Hatch_Energy_UIV.get(1L), + 1000, + (int) TierEU.RECIPE_UIV); + + // Energy Hatch UMV + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Hatch_Energy_UIV.get(1L), + 192000, + 128, + 400000, + 16, + new Object[] { ItemList.Hull_UMV.get(1L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUMV, 2L), + ItemList.Circuit_Chip_QPIC.get(4L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UMV, 2), ItemList.UHV_Coil.get(16L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Electric_Pump_UMV.get(1L) }, + new FluidStack[] { Materials.SuperCoolant.getFluid(32_000L), new FluidStack(solderUEV, 40 * 144), + Materials.UUMatter.getFluid(32000L) }, + ItemList.Hatch_Energy_UMV.get(1L), + 1000, + (int) TierEU.RECIPE_UMV); + + // Energy Hatch UXV + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Hatch_Energy_UMV.get(1L), + 384000, + 256, + 800000, + 32, + new Object[] { ItemList.Hull_UXV.get(1L), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUMV, 4L), + ItemList.Circuit_Chip_QPIC.get(16L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 2), ItemList.UHV_Coil.get(32L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Electric_Pump_UXV.get(1L) }, + new FluidStack[] { Materials.SuperCoolant.getFluid(64_000L), new FluidStack(solderUEV, 80 * 144), + Materials.UUMatter.getFluid(64000L) }, + ItemList.Hatch_Energy_UXV.get(1L), + 1000, + (int) TierEU.RECIPE_UXV); + } + + // Dynamo Hatch + { + // Dynamo Hatch UHV + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Hatch_Dynamo_UV.get(1L), + 48000, + 32, + 100000, + 4, + new Object[] { ItemList.Hull_MAX.get(1L), + GTOreDictUnificator.get(OrePrefixes.spring, Materials.Longasssuperconductornameforuhvwire, 8L), + ItemList.Circuit_Chip_QPIC.get(2L), new Object[] { OrePrefixes.circuit.get(Materials.UHV), 2L }, + ItemList.UHV_Coil.get(2L), + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + new ItemStack[] { ItemList.Reactor_Coolant_He_6.get(1L), ItemList.Reactor_Coolant_NaK_6.get(1L), + ItemList.Reactor_Coolant_Sp_2.get(1L) }, + ItemList.Electric_Pump_UHV.get(1L) }, + new FluidStack[] { new FluidStack(FluidRegistry.getFluid("ic2coolant"), 16000), + new FluidStack(solderIndalloy, 40 * 144) }, + ItemList.Hatch_Dynamo_UHV.get(1L), + 1000, + (int) TierEU.RECIPE_UHV); + + // Dynamo Hatch UEV + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Hatch_Dynamo_UHV.get(1L), + 96000, + 64, + 200000, + 8, + new Object[] { ItemList.Hull_UEV.get(1L), + GTOreDictUnificator.get(OrePrefixes.spring, Materials.SuperconductorUEVBase, 8L), + ItemList.Circuit_Chip_QPIC.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UEV), 2L }, + ItemList.UHV_Coil.get(4L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Electric_Pump_UEV.get(1L) }, + new FluidStack[] { new FluidStack(FluidRegistry.getFluid("ic2coolant"), 32000), + new FluidStack(solderUEV, 20 * 144), Materials.UUMatter.getFluid(8000L) }, + ItemList.Hatch_Dynamo_UEV.get(1L), + 1000, + (int) TierEU.RECIPE_UEV); + + // Dynamo Hatch UIV + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Hatch_Dynamo_UEV.get(1L), + 192_000, + 128, + 400_000, + 16, + new Object[] { ItemList.Hull_UIV.get(1L), + GTOreDictUnificator.get(OrePrefixes.spring, Materials.SuperconductorUIVBase, 8L), + ItemList.Circuit_Chip_QPIC.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UIV), 2L }, + ItemList.UHV_Coil.get(8L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Electric_Pump_UIV.get(1L) }, + new FluidStack[] { Materials.SuperCoolant.getFluid(16_000L), new FluidStack(solderUEV, 20 * 144), + Materials.UUMatter.getFluid(16_000L) }, + ItemList.Hatch_Dynamo_UIV.get(1L), + 1000, + (int) TierEU.RECIPE_UIV); + + // Dynamo Hatch UMV + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Hatch_Dynamo_UIV.get(1L), + 384000, + 256, + 800000, + 32, + new Object[] { ItemList.Hull_UMV.get(1L), + GTOreDictUnificator.get(OrePrefixes.spring, Materials.SuperconductorUMVBase, 8L), + ItemList.Circuit_Chip_QPIC.get(4L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UMV, 2), ItemList.UHV_Coil.get(16L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Electric_Pump_UMV.get(1L) }, + new FluidStack[] { Materials.SuperCoolant.getFluid(32_000L), new FluidStack(solderUEV, 40 * 144), + Materials.UUMatter.getFluid(32000L) }, + ItemList.Hatch_Dynamo_UMV.get(1L), + 1000, + (int) TierEU.RECIPE_UMV); + + // Dynamo Hatch UXV + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Hatch_Dynamo_UMV.get(1L), + 384000, + 256, + 800000, + 32, + new Object[] { ItemList.Hull_UXV.get(1L), + GTOreDictUnificator.get(OrePrefixes.spring, Materials.SuperconductorUMVBase, 16L), + ItemList.Circuit_Chip_QPIC.get(16L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 2), ItemList.UHV_Coil.get(32L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Electric_Pump_UXV.get(1L) }, + new FluidStack[] { Materials.SuperCoolant.getFluid(64_000L), new FluidStack(solderUEV, 80 * 144), + Materials.UUMatter.getFluid(64000L) }, + ItemList.Hatch_Dynamo_UXV.get(1L), + 1000, + (int) TierEU.RECIPE_UXV); + } + } + + // UHV Circuit Wetwaremainframe + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Circuit_Wetwaresupercomputer.get(1L), + 24000, + 64, + 50000, + 4, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Tritanium, 2), + ItemList.Circuit_Wetwaresupercomputer.get(2L), + new ItemStack[] { ItemList.Circuit_Parts_InductorASMD.get(16L), + ItemList.Circuit_Parts_InductorXSMD.get(4L) }, + new ItemStack[] { ItemList.Circuit_Parts_CapacitorASMD.get(16L), + ItemList.Circuit_Parts_CapacitorXSMD.get(4L) }, + new ItemStack[] { ItemList.Circuit_Parts_ResistorASMD.get(16L), + ItemList.Circuit_Parts_ResistorXSMD.get(4L) }, + new ItemStack[] { ItemList.Circuit_Parts_TransistorASMD.get(16L), + ItemList.Circuit_Parts_TransistorXSMD.get(4L) }, + new ItemStack[] { ItemList.Circuit_Parts_DiodeASMD.get(16L), ItemList.Circuit_Parts_DiodeXSMD.get(4L) }, + ItemList.Circuit_Chip_Ram.get(48L), + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorZPM, 64L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUV, 32L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 16L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEV, 8L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUIV, 4L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, 2L) }, + new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, }, + new FluidStack[] { new FluidStack(solderIndalloy, 2880), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 10000), Materials.Radon.getGas(2500L), }, + ItemList.Circuit_Wetwaremainframe.get(1L), + 2000, + 300000); + + // Bioware SuperComputer + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Circuit_Biowarecomputer.get(1L), + 48000, + 128, + (int) TierEU.RECIPE_UV, + 8, + new Object[] { ItemList.Circuit_Board_Bio_Ultra.get(2L), ItemList.Circuit_Biowarecomputer.get(2L), + new ItemStack[] { ItemList.Circuit_Parts_TransistorASMD.get(16L), + ItemList.Circuit_Parts_TransistorXSMD.get(4L) }, + new ItemStack[] { ItemList.Circuit_Parts_ResistorASMD.get(16L), + ItemList.Circuit_Parts_ResistorXSMD.get(4L) }, + new ItemStack[] { ItemList.Circuit_Parts_CapacitorASMD.get(16L), + ItemList.Circuit_Parts_CapacitorXSMD.get(4L) }, + new ItemStack[] { ItemList.Circuit_Parts_DiodeASMD.get(16L), ItemList.Circuit_Parts_DiodeXSMD.get(4L) }, + ItemList.Circuit_Chip_NOR.get(32L), ItemList.Circuit_Chip_Ram.get(64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.NiobiumTitanium, 32L), + new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, }, + new FluidStack[] { new FluidStack(solderUEV, 1440), Materials.BioMediumSterilized.getFluid(1440L), + Materials.SuperCoolant.getFluid(10_000L), }, + ItemList.Circuit_Biowaresupercomputer.get(1L), + 4000, + (int) TierEU.RECIPE_UV); + + // Bio Mainframe + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Circuit_Biowaresupercomputer.get(1L), + 96000, + 256, + 1000000, + 16, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Tritanium, 4L), + ItemList.Circuit_Biowaresupercomputer.get(2L), + new ItemStack[] { ItemList.Circuit_Parts_InductorASMD.get(24L), + ItemList.Circuit_Parts_InductorXSMD.get(6L) }, + new ItemStack[] { ItemList.Circuit_Parts_TransistorASMD.get(24L), + ItemList.Circuit_Parts_TransistorXSMD.get(6L) }, + new ItemStack[] { ItemList.Circuit_Parts_ResistorASMD.get(24L), + ItemList.Circuit_Parts_ResistorXSMD.get(6L) }, + new ItemStack[] { ItemList.Circuit_Parts_CapacitorASMD.get(24L), + ItemList.Circuit_Parts_CapacitorXSMD.get(6L) }, + new ItemStack[] { ItemList.Circuit_Parts_DiodeASMD.get(24L), ItemList.Circuit_Parts_DiodeXSMD.get(6L) }, + ItemList.Circuit_Chip_Ram.get(64L), + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 64L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEV, 32L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUIV, 16L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, 8L) }, + new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64) }, + new FluidStack[] { new FluidStack(solderUEV, 2880), Materials.BioMediumSterilized.getFluid(2880L), + Materials.SuperCoolant.getFluid(20_000L), }, + ItemList.Circuit_Biomainframe.get(1L), + 6000, + (int) TierEU.RECIPE_UHV); + + // Optical Assembly + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Circuit_OpticalProcessor.get(1L), + 192_000, + 256, + (int) TierEU.RECIPE_UHV, + 16, + new Object[] { ItemList.Circuit_Board_Optical.get(1L), ItemList.Circuit_OpticalProcessor.get(2L), + ItemList.Circuit_Parts_InductorXSMD.get(16L), ItemList.Circuit_Parts_CapacitorXSMD.get(20L), + ItemList.Circuit_Parts_ResistorXSMD.get(20L), ItemList.Circuit_Chip_NOR.get(32L), + ItemList.Circuit_Chip_Ram.get(64L), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.wireFine), 24, 10101), // Fine + // Lumiium + // Wire + new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, }, + new FluidStack[] { new FluidStack(solderUEV, 1440), Materials.Radon.getPlasma(1440L), + Materials.SuperCoolant.getFluid(10_000L), new FluidStack(FluidRegistry.getFluid("oganesson"), 500) }, + ItemList.Circuit_OpticalAssembly.get(1L), + 20 * 20, + (int) TierEU.RECIPE_UHV); + + // Optical Computer + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Circuit_OpticalAssembly.get(1L), + 384_000, + 512, + 4_000_000, + 32, + new Object[] { ItemList.Circuit_Board_Optical.get(2L), ItemList.Circuit_OpticalAssembly.get(2L), + ItemList.Circuit_Parts_TransistorXSMD.get(24L), ItemList.Circuit_Parts_ResistorXSMD.get(24L), + ItemList.Circuit_Parts_CapacitorXSMD.get(24L), ItemList.Circuit_Parts_DiodeXSMD.get(24L), + ItemList.Circuit_Chip_NOR.get(64L), ItemList.Circuit_Chip_SoC2.get(32L), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.wireFine), 32, 10101), // Fine + // Lumiium + // Wire + new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64), }, + new FluidStack[] { new FluidStack(solderUEV, 1440 * 2), Materials.Radon.getPlasma(1440L * 2), + Materials.SuperCoolant.getFluid(10_000L * 2), + new FluidStack(FluidRegistry.getFluid("oganesson"), 500 * 2) }, + ItemList.Circuit_OpticalComputer.get(1L), + 200 * 20, + (int) TierEU.RECIPE_UHV); + + // Optical Mainframe + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Circuit_OpticalComputer.get(1L), + 768_000, + 1024, + (int) TierEU.RECIPE_UEV, + 64, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Tritanium, 8), + ItemList.Circuit_OpticalComputer.get(2L), ItemList.Circuit_Parts_InductorXSMD.get(32L), + ItemList.Circuit_Parts_TransistorXSMD.get(32L), ItemList.Circuit_Parts_ResistorXSMD.get(32L), + ItemList.Circuit_Parts_CapacitorXSMD.get(32L), ItemList.Circuit_Parts_DiodeXSMD.get(32L), + ItemList.Circuit_Chip_SoC2.get(64L), + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUEV, 64L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUIV, 32L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, 16L) }, + new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, + new Object[] { OrePrefixes.foil.get(Materials.AnySyntheticRubber), 64L }, + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.Polybenzimidazole, 64) }, + new FluidStack[] { new FluidStack(solderUEV, 1440 * 4), Materials.Radon.getPlasma(1440L * 4), + Materials.SuperCoolant.getFluid(10_000L * 4), + new FluidStack(FluidRegistry.getFluid("oganesson"), 500 * 4) }, + ItemList.Circuit_OpticalMainframe.get(1L), + 300 * 20, + (int) TierEU.RECIPE_UEV); + + // Laser Vacuum Mirror + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.LASERpipe.get(1L), + 20_000, + 16, + 40_000, + 2, + new Object[] { CustomItemList.eM_Power.get(1L), CustomItemList.LASERpipe.get(4L), + CHRONOMATIC_GLASS.getPlateDense(1), ItemList.Circuit_Chip_QPIC.get(2L), + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L } }, + new FluidStack[] { Materials.Grade4PurifiedWater.getFluid(4000L) }, + CustomItemList.LASERpipeSmart.get(1L), + 10 * 20, + (int) TierEU.RECIPE_UHV); + + // Transcendent Plasma Mixer - TPM. + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.eM_energyTunnel6_UEV.get(1), + 32_000_000, + 4096, + (int) TierEU.RECIPE_UIV, + 1, + new Object[] { CustomItemList.eM_energyTunnel6_UEV.get(4), + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 32L }, ItemList.Electric_Pump_UIV.get(16), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 64), + + GTOreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.TranscendentMetal, 16), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.TranscendentMetal, 64), + GTOreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.TranscendentMetal, 64), + ItemList.EnergisedTesseract.get(32), + + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), }, + new FluidStack[] { MaterialsUEVplus.ExcitedDTCC.getFluid(2_048_000), + MaterialsUEVplus.ExcitedDTPC.getFluid(2_048_000), MaterialsUEVplus.ExcitedDTRC.getFluid(2_048_000), + MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), }, + ItemList.Machine_Multi_TranscendentPlasmaMixer.get(1), + 5 * MINUTES, + (int) TierEU.RECIPE_UIV); + + // Stargate Recipes + if (EternalSingularity.isModLoaded() && SGCraft.isModLoaded()) { + + final int baseStargateTime = 125_000 * 20; + + // Stargate shield foil + TTRecipeAdder.addResearchableAssemblylineRecipe( + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1L), + (int) TierEU.RECIPE_MAX, + 32768, + (int) TierEU.RECIPE_UXV, + 64, + new ItemStack[] { ItemList.Casing_Dim_Bridge.get(64), + CustomItemList.StabilisationFieldGeneratorTier8.get(64), + GTOreDictUnificator.get("blockShirabon", 64L), GTOreDictUnificator.get("blockShirabon", 64L), + GTOreDictUnificator.get(OrePrefixes.block, MaterialsUEVplus.SpaceTime, 64L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 16L), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SpaceTime, 8L), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Universium, 8L), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 8L), + GTOreDictUnificator.get("plateDenseShirabon", 8L), ItemList.Sensor_UXV.get(16L), + ItemList.Emitter_UXV.get(16L), getModItem(EternalSingularity.ID, "eternal_singularity", 16L), + MaterialsUEVplus.Universium.getNanite(16), MaterialsUEVplus.BlackDwarfMatter.getNanite(16), + MaterialsUEVplus.WhiteDwarfMatter.getNanite(16) }, + new FluidStack[] { Materials.Neutronium.getMolten(32_768_000L), + MaterialsUEVplus.SpaceTime.getMolten(4 * 36864L), + Materials.SuperconductorUMVBase.getMolten(4 * 36864L), + MaterialsUEVplus.ExcitedDTEC.getFluid(4 * 36864L) }, + getItemContainer("StargateShieldingFoil").get(1L), + baseStargateTime, + (int) TierEU.RECIPE_UMV); + + // Stargate chevron + TTRecipeAdder.addResearchableAssemblylineRecipe( + getItemContainer("StargateShieldingFoil").get(1L), + (int) TierEU.RECIPE_MAX, + 32_768, + (int) TierEU.RECIPE_UXV, + 64, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.block, MaterialsUEVplus.TranscendentMetal, 64L), + GTOreDictUnificator.get("blockShirabon", 64), CustomItemList.EOH_Reinforced_Spatial_Casing.get(64), + CustomItemList.EOH_Reinforced_Spatial_Casing.get(64), + + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 16L), + GTOreDictUnificator + .get(OrePrefixes.frameGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 16L), + GTOreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Ruby, 16L), + GTOreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Jasper, 16L), + + GTOreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Opal, 16L), + GTOreDictUnificator.get(OrePrefixes.gemExquisite, Materials.Sapphire, 16L), + GTOreDictUnificator + .get(OrePrefixes.plateDense, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), + GTOreDictUnificator.get("plateDenseShirabon", 8), + + ItemList.Electric_Motor_UXV.get(64L), ItemList.Electric_Piston_UXV.get(64L), + ItemList.Field_Generator_UXV.get(16L), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 1L) + .splitStack(32) }, + new FluidStack[] { Materials.Neutronium.getMolten(32_768_000L), + MaterialsUEVplus.SpaceTime.getMolten(4 * 36864L), + MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(36864L), + MaterialsUEVplus.ExcitedDTEC.getFluid(4 * 36864L) }, + getItemContainer("StargateChevron").get(1L), + baseStargateTime, + (int) TierEU.RECIPE_UMV); + + // Stargate Frame Part + TTRecipeAdder.addResearchableAssemblylineRecipe( + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1L), + (int) TierEU.RECIPE_MAX, + 32_768, + (int) TierEU.RECIPE_UXV, + 64, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.SpaceTime, 64L), + GTOreDictUnificator + .get(OrePrefixes.stickLong, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Neutronium, 64L), + + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Osmiridium, 64L), + GTOreDictUnificator.get("stickLongShirabon", 64), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.stickLong), 64, 39), QUANTUM.getLongRod(64), + HYPOGEN.getLongRod(64), CELESTIAL_TUNGSTEN.getLongRod(64), + new ItemStack(WerkstoffLoader.items.get(OrePrefixes.stickLong), 64, 10106), + ASTRAL_TITANIUM.getLongRod(64), + + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.SuperconductorUMVBase, 64L), + GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Universium, 64L), + ABYSSAL.getLongRod(64), + GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.TranscendentMetal, 64L), }, + new FluidStack[] { Materials.Neutronium.getMolten(32_768_000L), + MaterialsUEVplus.SpaceTime.getMolten(4 * 36864L), MaterialsUEVplus.Universium.getMolten(4 * 36864L), + MaterialsUEVplus.ExcitedDTEC.getFluid(4 * 36864L) }, + getItemContainer("StargateFramePart").get(1L), + baseStargateTime, + (int) TierEU.RECIPE_UMV); + } + + // Dimensionally Transcendent Plasma Forge (DTPF) + if (EternalSingularity.isModLoaded()) { + + // DTPF Controller. + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Casing_Dim_Bridge.get(1), + 32_000_000, + 4096, + (int) TierEU.RECIPE_UIV, + 1, + new Object[] { ItemList.Casing_Dim_Bridge.get(4), + GTUtility.copyAmount(16, ItemRegistry.megaMachines[0]), ItemList.Hatch_Energy_UEV.get(4L), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUEV, 6), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 20L }, ItemList.Field_Generator_UEV.get(4), + getModItem(EternalSingularity.ID, "eternal_singularity", 4L), + GregtechItemList.Laser_Lens_Special.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 64L), + ItemList.Electric_Pump_UEV.get(4), ItemList.ZPM3.get(1), + getModItem(IndustrialCraft2.ID, "blockMachine2", 1, 0) }, + new FluidStack[] { new FluidStack(FluidRegistry.getFluid("oganesson"), 128000), + new FluidStack(solderUEV, 36864 * 2), + new FluidStack(FluidRegistry.getFluid("molten.californium"), 36864), + Materials.NaquadahEnriched.getMolten(36864L) }, + ItemList.Machine_Multi_PlasmaForge.get(1), + 5 * MINUTES, + (int) TierEU.RECIPE_UIV); + + // Dimensional bridge. + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Casing_Dim_Injector.get(1), + 8_000_000, + 4096, + (int) TierEU.RECIPE_UIV, + 1, + new Object[] { ItemList.Casing_Dim_Trans.get(1), ItemList.MicroTransmitter_UV.get(1), + new Object[] { OrePrefixes.circuit.get(Materials.UV), 2L }, + getModItem(Avaritia.ID, "Singularity", 2L, 0), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 6), + getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 2, 0), ItemList.Field_Generator_UHV.get(1L) }, + new FluidStack[] { new FluidStack(FluidRegistry.getFluid("oganesson"), 8000), + new FluidStack(solderUEV, 1152 * 8), Materials.NaquadahEnriched.getMolten(1296L) }, + ItemList.Casing_Dim_Bridge.get(1), + 240 * 20, + (int) TierEU.RECIPE_UIV); + + // Dimensional injection casing. + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Casing_Dim_Trans.get(1), + 2_000_000, + 2048, + (int) TierEU.RECIPE_UIV, + 1, + new Object[] { GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 4), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Ledox, 1), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.CallistoIce, 1), + ItemList.Reactor_Coolant_Sp_6.get(1L), LAURENIUM.getScrew(12), + new Object[] { OrePrefixes.circuit.get(Materials.IV), 2L }, + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 2), + ItemList.Super_Chest_IV.get(1), ItemList.Super_Tank_IV.get(1), + getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 1, 0), }, + new FluidStack[] { new FluidStack(FluidRegistry.getFluid("oganesson"), 1000), + new FluidStack(solderUEV, 576), Materials.NaquadahEnriched.getMolten(288L) }, + ItemList.Casing_Dim_Injector.get(1), + 20 * 20, + (int) TierEU.RECIPE_UIV); + + // Dimensionally Transcendent Casing. + TTRecipeAdder.addResearchableAssemblylineRecipe( + getModItem(Avaritia.ID, "Singularity", 1L, 0), + 2_000_000, + 2048, + (int) TierEU.RECIPE_UIV, + 1, + new Object[] { GTOreDictUnificator.get(OrePrefixes.plate, Materials.Osmiridium, 6), + LAURENIUM.getScrew(12), ItemList.Reactor_Coolant_Sp_6.get(1L), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 1), }, + new FluidStack[] { new FluidStack(FluidRegistry.getFluid("oganesson"), 500), + new FluidStack(solderUEV, 288), Materials.NaquadahEnriched.getMolten(144L) }, + ItemList.Casing_Dim_Trans.get(1), + 20 * 20, + (int) TierEU.RECIPE_UIV); + + // Transdimensional Alignment Matrix + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.MicroTransmitter_UV.get(1), + 32_000_000, + 8192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.EOH_Infinite_Energy_Casing.get(1), + GregtechItemList.SpaceTimeContinuumRipper.get(4), ItemList.Robot_Arm_UMV.get(64), + ItemList.Sensor_UMV.get(16), ItemList.Field_Generator_UMV.get(4), ItemList.ZPM5.get(1), + ItemList.EnergisedTesseract.get(32), + GTOreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.TranscendentMetal, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Flerovium, 64), + GGMaterial.metastableOganesson.get(OrePrefixes.plateDense, 32) }, + new FluidStack[] { new FluidStack(solderUEV, 1024 * 144), Materials.Lead.getPlasma(64 * 144), + MaterialsUEVplus.Space.getMolten(64 * 144) }, + ItemList.Transdimensional_Alignment_Matrix.get(1), + 50 * SECONDS, + (int) TierEU.RECIPE_UMV); + } + + // Deep Dark Portal + TTRecipeAdder.addResearchableAssemblylineRecipe( + getModItem(NewHorizonsCoreMod.ID, "item.HeavyDutyPlateTier8", 1, 0), + 16_777_216, + 2048, + (int) TierEU.RECIPE_UHV, + 64, + new Object[] { getModItem(ExtraUtilities.ID, "cobblestone_compressed", 1, 7), + getModItem(IndustrialCraft2.ID, "blockMachine2", 1, 0), + GTOreDictUnificator.get(OrePrefixes.block, Materials.Infinity, 4L), + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, + getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 32, 0), ItemList.Robot_Arm_UMV.get(4), + ItemList.Emitter_UMV.get(4), ItemList.Sensor_UMV.get(4), }, + new FluidStack[] { new FluidStack(FluidRegistry.getFluid("oganesson"), 50000), + Materials.Infinity.getMolten(144L * 512), Materials.Cheese.getMolten(232000L), }, + ItemList.Block_BedrockiumCompressed.get(1), + 10000, + 5000000); + + // Batteries + { + + // Ultimate Battery + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Energy_Cluster.get(1L), + 12000, + 16, + 100000, + 3, + new Object[] { GTOreDictUnificator.get(OrePrefixes.plate, Materials.Tritanium, 64L), + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, ItemList.Energy_Cluster.get(8L), + ItemList.Field_Generator_UV.get(2), ItemList.Circuit_Wafer_HPIC.get(64), + ItemList.Circuit_Wafer_HPIC.get(64), ItemList.Circuit_Parts_DiodeASMD.get(32), + GTOreDictUnificator.get(OrePrefixes.wireGt01, Materials.SuperconductorUHV, 32), }, + new FluidStack[] { new FluidStack(solderIndalloy, 2880), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 16000) }, + ItemList.ZPM2.get(1), + 3000, + 400000); + + // Really Ultimate Battery + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.ZPM2.get(1L), + 24000, + 64, + 200000, + 6, + new Object[] { GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 32L), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.Neutronium, 32L), + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, ItemList.ZPM2.get(8), + ItemList.Field_Generator_UHV.get(4), ItemList.Circuit_Wafer_UHPIC.get(64), + ItemList.Circuit_Wafer_UHPIC.get(64), ItemList.Circuit_Wafer_SoC2.get(32), + ItemList.Circuit_Parts_DiodeASMD.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt02, Materials.SuperconductorUHV, 64), }, + new FluidStack[] { new FluidStack(solderUEV, 4608), Materials.Naquadria.getMolten(9216), + new FluidStack(FluidRegistry.getFluid("ic2coolant"), 32000) }, + ItemList.ZPM3.get(1), + 4000, + 1600000); + + // Extremely Ultimate Battery + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.ZPM3.get(1L), + 1_200_000, + 128, + (int) TierEU.RECIPE_UEV, + 16, + new Object[] { GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.InfinityCatalyst, 32L), + GTOreDictUnificator.get(OrePrefixes.plateDouble, Materials.InfinityCatalyst, 32L), + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, ItemList.ZPM3.get(8), + ItemList.Field_Generator_UEV.get(4), ItemList.Circuit_Wafer_PPIC.get(64), + ItemList.Circuit_Wafer_PPIC.get(64), ItemList.Circuit_Wafer_SoC2.get(64), + ItemList.Circuit_Parts_DiodeXSMD.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 64), }, + new FluidStack[] { new FluidStack(solderUEV, 9216), Materials.Quantium.getMolten(18_432), + Materials.Naquadria.getMolten(9_216 * 2), Materials.SuperCoolant.getFluid(64_000) }, + ItemList.ZPM4.get(1), + 250 * 20, + 6_400_000); + + if (GTPlusPlusEverglades.isModLoaded()) { + // Insanely Ultimate Battery + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.ZPM4.get(1), + 24_000_000, + 1_280, + (int) TierEU.RECIPE_UIV, + 32, + new Object[] { HYPOGEN.getPlateDouble(32), HYPOGEN.getPlateDouble(32), + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, ItemList.ZPM4.get(8L), + ItemList.Field_Generator_UIV.get(4), ItemList.Circuit_Wafer_QPIC.get(64), + ItemList.Circuit_Wafer_QPIC.get(64), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.RawPicoWafer", 64), + ItemList.Circuit_Parts_DiodeXSMD.get(64), ItemList.Circuit_Parts_InductorXSMD.get(32), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUIV, 64) }, + new FluidStack[] { new FluidStack(solderUEV, 18_432), + MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getFluidStack(18_432), + Materials.Quantium.getMolten(18_432), Materials.SuperCoolant.getFluid(128_000) }, + ItemList.ZPM5.get(1), + 300 * 20, + (int) TierEU.RECIPE_UIV); + + // Mega Ultimate Battery + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.ZPM5.get(1L), + 480_000_000, + 12_288, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { MaterialsElements.STANDALONE.DRAGON_METAL.getPlateDouble(32), + MaterialsElements.STANDALONE.DRAGON_METAL.getPlateDouble(32), + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1 }, ItemList.ZPM5.get(8L), + ItemList.Field_Generator_UMV.get(4), ItemList.Circuit_Wafer_QPIC.get(64), + ItemList.Circuit_Wafer_QPIC.get(64), + GTModHandler.getModItem(NewHorizonsCoreMod.ID, "item.PicoWafer", 64), + ItemList.Circuit_Parts_DiodeXSMD.get(64), ItemList.Circuit_Parts_InductorXSMD.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 64) }, + new FluidStack[] { new FluidStack(solderUEV, 36_864), + MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getFluidStack(36_864), + MaterialsElements.STANDALONE.CELESTIAL_TUNGSTEN.getFluidStack(36_864), + Materials.SuperCoolant.getFluid(256_000) }, + ItemList.ZPM6.get(1), + 350 * 20, + (int) TierEU.RECIPE_UMV); + } + } + + // MK4 Computer + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.Compressed_Fusion_Reactor.get(1), + 320000, + 512, + (int) TierEU.RECIPE_UHV, + 1, + new Object[] { GregtechItemList.Casing_Fusion_Internal.get(1), + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Neutronium, 4), + ItemList.Field_Generator_UHV.get(2), ItemList.Circuit_Wafer_QPIC.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUHV, 32) }, + new FluidStack[] { Materials.UUMatter.getFluid(50000), CINOBITE.getFluidStack(9216), + MaterialsAlloy.OCTIRON.getFluidStack(9216), + MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getFluidStack(9216), }, + GregtechItemList.FusionComputer_UV2.get(1), + 6000, + (int) TierEU.RECIPE_UHV); + + // MK4 Coils + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Casing_Fusion_Coil.get(1L), + 160000, + 512, + (int) TierEU.RECIPE_UHV, + 1, + new Object[] { ItemList.Energy_LapotronicOrb2.get(16L), + new Object[] { OrePrefixes.circuit.get(Materials.LuV), 16L }, + new Object[] { OrePrefixes.circuit.get(Materials.UV), 8L }, + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 8), ItemList.Emitter_UHV.get(1), + ItemList.Sensor_UHV.get(1), ItemList.Casing_Fusion_Coil.get(1L), }, + new FluidStack[] { Materials.UUMatter.getFluid(8000L), CINOBITE.getFluidStack(2304), + MaterialsAlloy.OCTIRON.getFluidStack(2304), + MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getFluidStack(2304), }, + GregtechItemList.Casing_Fusion_Internal.get(1), + 1200, + (int) TierEU.RECIPE_UHV); + + // MK4 Casing + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Casing_Fusion2.get(1L), + 80000, + 512, + (int) TierEU.RECIPE_UHV, + 1, + new Object[] { new Object[] { OrePrefixes.circuit.get(Materials.EV), 16L }, + new Object[] { OrePrefixes.circuit.get(Materials.IV), 8L }, + GTOreDictUnificator.get(OrePrefixes.block, Materials.TungstenCarbide, 8), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 8), ItemList.Electric_Motor_UHV.get(2), + ItemList.Electric_Piston_UHV.get(1), ItemList.Casing_Fusion2.get(1L), }, + new FluidStack[] { Materials.UUMatter.getFluid(1000L), CINOBITE.getFluidStack(576), + MaterialsAlloy.OCTIRON.getFluidStack(576), + MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getFluidStack(576), }, + GregtechItemList.Casing_Fusion_External.get(1), + 300, + (int) TierEU.RECIPE_UHV); + + // MK5 Computer + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.FusionComputer_UV2.get(1), + 2560000, + 4096, + (int) TierEU.RECIPE_UEV, + 8, + new Object[] { GregtechItemList.Casing_Fusion_Internal2.get(1), + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, + GTOreDictUnificator.get("plateDenseMetastableOganesson", 4), ItemList.Field_Generator_UEV.get(2), + getItemContainer("PicoWafer").get(64L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.SuperconductorUEV, 32) }, + new FluidStack[] { MaterialsElements.getInstance().CURIUM.getFluidStack(9216), + MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getFluidStack(9216), + MaterialsAlloy.ABYSSAL.getFluidStack(9216), + MaterialsElements.STANDALONE.DRAGON_METAL.getFluidStack(9216) }, + GregtechItemList.FusionComputer_UV3.get(1), + 6000, + (int) TierEU.RECIPE_UEV); + + // MK5 Coils + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.Casing_Fusion_Internal.get(1), + 2560000, + 4096, + (int) TierEU.RECIPE_UEV, + 8, + new Object[] { ItemList.Energy_Module.get(16), new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 16L }, + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 8L }, + MaterialsElements.STANDALONE.RHUGNOR.getPlate(8), ItemList.Emitter_UEV.get(1), + ItemList.Sensor_UEV.get(1), new ItemStack(compactFusionCoil, 1, 2) }, + new FluidStack[] { MaterialsElements.getInstance().NEPTUNIUM.getFluidStack(2304), + MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getFluidStack(2304), + MaterialsAlloy.ABYSSAL.getFluidStack(2304), + MaterialsElements.STANDALONE.DRAGON_METAL.getFluidStack(2304) }, + GregtechItemList.Casing_Fusion_Internal2.get(1), + 1200, + (int) TierEU.RECIPE_UEV); + + // MK5 Casing + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.Casing_Fusion_External.get(1L), + 2560000, + 4096, + (int) TierEU.RECIPE_UEV, + 8, + new Object[] { new Object[] { OrePrefixes.circuit.get(Materials.IV), 16L }, + new Object[] { OrePrefixes.circuit.get(Materials.LuV), 8L }, + GTOreDictUnificator.get(OrePrefixes.block, Materials.NaquadahAlloy, 8), + MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getPlate(8), ItemList.Electric_Motor_UEV.get(2), + ItemList.Electric_Piston_UEV.get(1), GregtechItemList.Casing_Fusion_External.get(1L) }, + new FluidStack[] { MaterialsElements.getInstance().FERMIUM.getFluidStack(1152), + MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getFluidStack(1152), + MaterialsAlloy.ABYSSAL.getFluidStack(1152), + MaterialsElements.STANDALONE.DRAGON_METAL.getFluidStack(1152) }, + GregtechItemList.Casing_Fusion_External2.get(1), + 300, + (int) TierEU.RECIPE_UEV); + + if (BloodMagic.isModLoaded() && DraconicEvolution.isModLoaded()) { + // Draconic Evolution Fusion Crafter Controller + TTRecipeAdder.addResearchableAssemblylineRecipe( + new ItemStack(defcCasingBlock, 1, 8), + 16_777_216, + 1024, + (int) TierEU.RECIPE_UHV, + 8, + new Object[] { ItemList.AssemblingMachineUHV.get(1), new ItemStack(defcCasingBlock, 1, 8), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsBotania.GaiaSpirit, 1L), + ItemList.Casing_Coil_AwakenedDraconium.get(8L), ItemList.Electric_Motor_UHV.get(8L), + ItemList.Robot_Arm_UHV.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UHV), 4 }, + ItemList.Gravistar.get(4, new Object() {}), getModItem(Thaumcraft.ID, "ItemEldritchObject", 1, 3), + getModItem(BloodMagic.ID, "bloodMagicBaseItems", 8, 29), + getModItem(BloodMagic.ID, "bloodMagicBaseItems", 8, 28), }, + new FluidStack[] { new FluidStack(solderIndalloy, 2880), Materials.Void.getMolten(2880L), + Materials.DraconiumAwakened.getMolten(1440), }, + DraconicEvolutionFusionCrafter.get(1), + 1500, + (int) TierEU.RECIPE_UEV); + // DE Schematics Cores Tier 1 + TTRecipeAdder.addResearchableAssemblylineRecipe( + new ItemStack(defcCasingBlock, 1, 9), + 5_000_000, + 512, + 1_000_000, + 4, + new Object[] { getModItem(DraconicEvolution.ID, "draconicCore", 1, 0), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Draconium, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Ichorium, 1L), + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1 }, }, + new FluidStack[] { Materials.Sunnarium.getMolten(14400L), Materials.Void.getMolten(28800L), }, + DEFCDraconicSchematic.get(1), + 6000, + (int) TierEU.RECIPE_UV); + + // DE Schematics Cores Tier 2 + TTRecipeAdder.addResearchableAssemblylineRecipe( + getModItem(DraconicEvolution.ID, "draconicCore", 1, 0), + 10_000_000, + 1024, + 4_000_000, + 8, + new Object[] { getModItem(DraconicEvolution.ID, "draconicCore", 4, 0), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Draconium, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Neutronium, 1L), + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1 }, }, + new FluidStack[] { Materials.Neutronium.getMolten(14400L), Materials.Void.getMolten(57600L), }, + DEFCWyvernSchematic.get(1), + 12000, + (int) TierEU.RECIPE_UHV); + + // DE Schematics Cores Tier 3 + TTRecipeAdder.addResearchableAssemblylineRecipe( + getModItem(DraconicEvolution.ID, "wyvernCore", 1, 0), + 20_000_000, + 2048, + 16_000_000, + 16, + new Object[] { getModItem(DraconicEvolution.ID, "wyvernCore", 4, 0), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 1L), + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L } }, + new FluidStack[] { Materials.Infinity.getMolten(14400L), Materials.Void.getMolten(115200L), }, + DEFCAwakenedSchematic.get(1), + 24000, + (int) TierEU.RECIPE_UEV); + + // DE Schematics Cores Tier 4 + TTRecipeAdder.addResearchableAssemblylineRecipe( + getModItem(DraconicEvolution.ID, "awakenedCore", 1, 0), + 40_000_000, + 4096, + 64_000_000, + 64, + new Object[] { getModItem(DraconicEvolution.ID, "awakenedCore", 8, 0), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.DraconiumAwakened, 4L), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 1L), + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1 }, }, + new FluidStack[] { MaterialsUEVplus.SpaceTime.getMolten(14400L), Materials.Void.getMolten(230400L), }, + DEFCChaoticSchematic.get(1), + 36000, + (int) TierEU.RECIPE_UIV); + } + + // Debug maintenance hatch + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Hatch_AutoMaintenance.get(1L), + 2764800, + 128, + (int) TierEU.RECIPE_UV, + 6, + new Object[] { ItemList.Hatch_AutoMaintenance.get(1L), ItemList.Robot_Arm_UV.get(1L), + ItemList.Electric_Pump_UV.get(1L), ItemList.Conveyor_Module_UV.get(1L), + new Object[] { OrePrefixes.circuit.get(Materials.UV), 4L }, ItemList.Energy_LapotronicOrb2.get(1L), + ItemList.Duct_Tape.get(64L), ItemList.Duct_Tape.get(64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Americium, 64L), }, + new FluidStack[] { Materials.Lubricant.getFluid(256000), new FluidStack(solderIndalloy, 1296), }, + CustomItemList.hatch_CreativeMaintenance.get(1), + 6000, + (int) TierEU.RECIPE_UV); + + // Debug uncertainty resolver + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.UncertaintyX_Hatch.get(1L), + 72_000_000, + 5_120, + 16_000_000, + 6, + new Object[] { CustomItemList.eM_Computer_Bus.get(1), CustomItemList.hatch_CreativeMaintenance.get(1), + ItemList.Field_Generator_UIV.get(1L), GregtechItemList.Laser_Lens_Special.get(4), + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 2 }, CustomItemList.DATApipe.get(64), + CustomItemList.DATApipe.get(64), ItemList.Cover_Screen.get(1) }, + new FluidStack[] { Materials.Iridium.getMolten(INGOTS * 100), new FluidStack(solderUEV, 2592), + new FluidStack(MaterialsElements.getInstance().NEPTUNIUM.getPlasma(), 20000), + new FluidStack(MaterialsElements.getInstance().FERMIUM.getPlasma(), 20000) }, + CustomItemList.hatch_CreativeUncertainty.get(1), + 200 * 20, + (int) TierEU.RECIPE_UIV); + } + + private void itemPartsUHVAsslineRecipes() { + + // ---------------------------------------------------------------------- + // ------------------------- Set up information ------------------------- + // ---------------------------------------------------------------------- + + Fluid solderIndalloy = FluidRegistry.getFluid("molten.indalloy140") != null + ? FluidRegistry.getFluid("molten.indalloy140") + : FluidRegistry.getFluid("molten.solderingalloy"); + + int total_computation = 24000; + int comp_per_second = 32; + int research_eu_per_tick = (int) TierEU.RECIPE_UV; + int research_amperage = 1; + + FluidStack fluid_0 = Materials.Naquadria.getMolten(2592); + FluidStack fluid_1 = new FluidStack(solderIndalloy, 2592); + FluidStack fluid_2 = Materials.Lubricant.getFluid(4000); + + int crafting_time_in_ticks = 1000; + int crafting_eu_per_tick = (int) TierEU.RECIPE_UV; + + // ------------------------------------------------------------- + + // ------------------------- UHV Motor ------------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Motor_UV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.SamariumMagnetic, 4L), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.CosmicNeutronium, 8L), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.CosmicNeutronium, 8L), + GTOreDictUnificator.get(OrePrefixes.round, Materials.CosmicNeutronium, 32L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 2L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Electric_Motor_UHV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // --------------------- UHV Electric Pump --------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Pump_UV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { ItemList.Electric_Motor_UHV.get(1L), + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Neutronium, 2L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 4L), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.CosmicNeutronium, 16L), + new Object[] { OrePrefixes.ring.get(Materials.AnySyntheticRubber), 32L }, + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.CosmicNeutronium, 4L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 2L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Electric_Pump_UHV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ----------------------- UHV Conveyor ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Conveyor_Module_UV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { ItemList.Electric_Motor_UHV.get(2L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 2L), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.CosmicNeutronium, 8L), + GTOreDictUnificator.get(OrePrefixes.round, Materials.CosmicNeutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 2L), + new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 40L } }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Conveyor_Module_UHV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // -------------------- UHV Robot Arm -------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Robot_Arm_UV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.CosmicNeutronium, 8L), + GTOreDictUnificator.get(OrePrefixes.gear, Materials.CosmicNeutronium, 2L), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.CosmicNeutronium, 6L), + ItemList.Electric_Motor_UHV.get(2L), ItemList.Electric_Piston_UHV.get(1L), + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 2L }, + new Object[] { OrePrefixes.circuit.get(Materials.UV), 4L }, + new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 8L }, + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 6L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Robot_Arm_UHV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // -------------------- UHV Electric Piston -------------------- + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Piston_UV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new ItemStack[] { ItemList.Electric_Motor_UHV.get(1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 6L), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.CosmicNeutronium, 8L), + GTOreDictUnificator.get(OrePrefixes.round, Materials.CosmicNeutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.CosmicNeutronium, 8L), + GTOreDictUnificator.get(OrePrefixes.gear, Materials.CosmicNeutronium, 2L), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.CosmicNeutronium, 4L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 4L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Electric_Piston_UHV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ------------------------ UHV Emitter ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Emitter_UV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1L), + ItemList.Electric_Motor_UHV.get(1L), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.CosmicNeutronium, 8L), ItemList.Gravistar.get(8L), + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 4L }, + GTOreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 7L) }, + new FluidStack[] { fluid_0, fluid_1 }, + ItemList.Emitter_UHV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ------------------------ UHV Sensor ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Sensor_UV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1L), + ItemList.Electric_Motor_UHV.get(1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 8L), ItemList.Gravistar.get(8L), + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 4L }, + GTOreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.ElectrumFlux, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 7L) }, + new FluidStack[] { fluid_0, fluid_1 }, + ItemList.Sensor_UHV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // --------------------------------------------------------------------- + + // ------------------------ UHV Field Generator ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Field_Generator_UV.get(1), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.CosmicNeutronium, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.CosmicNeutronium, 6L), ItemList.Gravistar.get(4L), + ItemList.Emitter_UHV.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UEV), 4L }, + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Neutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Bedrockium, 8L) }, + new FluidStack[] { fluid_0, fluid_1 }, + ItemList.Field_Generator_UHV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + } + + private void itemPartsUEVAsslineRecipes() { + + // ---------------------------------------------------------------------- + // ------------------------- Set up information ------------------------- + // ---------------------------------------------------------------------- + + Fluid mutated_living_solder = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null + ? FluidRegistry.getFluid("molten.mutatedlivingsolder") + : FluidRegistry.getFluid("molten.solderingalloy"); + + int total_computation = 48_000; + int comp_per_second = 64; + int research_eu_per_tick = (int) TierEU.RECIPE_UHV; + int research_amperage = 1; + + FluidStack fluid_0 = Materials.Quantium.getMolten(2592); + FluidStack fluid_1 = new FluidStack(mutated_living_solder, 2592); + FluidStack fluid_2 = Materials.Lubricant.getFluid(4000); + + int crafting_time_in_ticks = 1000; + int crafting_eu_per_tick = (int) TierEU.RECIPE_UHV; + + // ------------------------------------------------------------- + + // ------------------------- UEV Motor ------------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Motor_UHV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.TengamAttuned, 8L), + GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Infinity, 16L), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.Infinity, 8L), + GTOreDictUnificator.get(OrePrefixes.round, Materials.Infinity, 32L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.CosmicNeutronium, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 2L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Electric_Motor_UEV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // --------------------- UEV Electric Pump --------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Pump_UHV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { ItemList.Electric_Motor_UEV.get(1L), + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.NetherStar, 2L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 4L), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Infinity, 16L), + new Object[] { OrePrefixes.ring.get(Materials.AnySyntheticRubber), 64L }, + GTOreDictUnificator.get(OrePrefixes.rotor, Materials.Infinity, 4L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 2L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Electric_Pump_UEV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ----------------------- UEV Conveyor ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Conveyor_Module_UHV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { ItemList.Electric_Motor_UEV.get(2L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 2L), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.Infinity, 8L), + GTOreDictUnificator.get(OrePrefixes.round, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 2L), + new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 64L }, + new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 16L } }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Conveyor_Module_UEV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // -------------------- UEV Robot Arm -------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Robot_Arm_UHV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.Infinity, 8L), + GTOreDictUnificator.get(OrePrefixes.gear, Materials.Infinity, 2L), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Infinity, 6L), + ItemList.Electric_Motor_UEV.get(2L), ItemList.Electric_Piston_UEV.get(1L), + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 2L }, + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 4L }, + new Object[] { OrePrefixes.circuit.get(Materials.UV), 8L }, + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 6L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Robot_Arm_UEV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // -------------------- UEV Electric Piston -------------------- + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Piston_UHV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new ItemStack[] { ItemList.Electric_Motor_UEV.get(1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 6L), + GTOreDictUnificator.get(OrePrefixes.ring, Materials.Infinity, 8L), + GTOreDictUnificator.get(OrePrefixes.round, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.Infinity, 8L), + GTOreDictUnificator.get(OrePrefixes.gear, Materials.Infinity, 2L), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, Materials.Infinity, 4L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 4L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Electric_Piston_UEV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ------------------------ UEV Emitter ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Emitter_UHV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1L), + ItemList.Electric_Motor_UEV.get(1L), + GTOreDictUnificator.get(OrePrefixes.stick, Materials.Infinity, 16L), ItemList.Gravistar.get(16L), + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 4L }, + GTOreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 7L) }, + new FluidStack[] { fluid_0, fluid_1 }, + ItemList.Emitter_UEV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ------------------------ UEV Sensor ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Sensor_UHV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1L), + ItemList.Electric_Motor_UEV.get(1), GTOreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 8L), + ItemList.Gravistar.get(16), new Object[] { OrePrefixes.circuit.get(Materials.UEV), 4L }, + GTOreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), + GTOreDictUnificator.get(OrePrefixes.foil, Materials.InfinityCatalyst, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 7L) }, + new FluidStack[] { fluid_0, fluid_1 }, + ItemList.Sensor_UEV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // --------------------------------------------------------------------- + + // ------------------------ UEV Field Generator ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Field_Generator_UHV.get(1), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Infinity, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Infinity, 6L), ItemList.Gravistar.get(8L), + ItemList.Emitter_UEV.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UIV), 4L }, + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Tritanium, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Draconium, 8L) }, + new FluidStack[] { fluid_0, fluid_1 }, + ItemList.Field_Generator_UEV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + } + + private void itemPartsUIVAsslineRecipes() { + + // ---------------------------------------------------------------------- + // ------------------------- Set up information ------------------------- + // ---------------------------------------------------------------------- + + Fluid mutated_living_solder = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null + ? FluidRegistry.getFluid("molten.mutatedlivingsolder") + : FluidRegistry.getFluid("molten.solderingalloy"); + Fluid celestialTungsten = FluidRegistry.getFluid("molten.celestialtungsten"); + + int total_computation = 96_000; + int comp_per_second = 128; + int research_eu_per_tick = (int) TierEU.RECIPE_UEV; + int research_amperage = 1; + + FluidStack fluid_0 = celestialTungsten != null ? new FluidStack(celestialTungsten, 576) : null; + FluidStack fluid_1 = new FluidStack(mutated_living_solder, 2592); + FluidStack fluid_2 = Materials.Lubricant.getFluid(4000); + + int crafting_time_in_ticks = 1000; + int crafting_eu_per_tick = (int) TierEU.RECIPE_UEV; + + // ------------------------------------------------------------- + + // ------------------------- UIV Motor ------------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Motor_UEV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.TengamAttuned, 16L), + GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.TranscendentMetal, 16L), + GTOreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.TranscendentMetal, 8L), + GTOreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.TranscendentMetal, 32L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 2L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Electric_Motor_UIV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // --------------------- UIV Electric Pump --------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Pump_UEV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { ItemList.Electric_Motor_UIV.get(1L), + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.DraconiumAwakened, 2L), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 4L), + GTOreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.TranscendentMetal, 16L), + new Object[] { OrePrefixes.ring.get(Materials.AnySyntheticRubber), 64L }, + GTOreDictUnificator.get(OrePrefixes.rotor, MaterialsUEVplus.TranscendentMetal, 4L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 2L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Electric_Pump_UIV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ----------------------- UIV Conveyor ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Conveyor_Module_UEV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { ItemList.Electric_Motor_UIV.get(2L), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 2L), + GTOreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.TranscendentMetal, 8L), + GTOreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.TranscendentMetal, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 2L), + new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 64L }, + new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 16L } }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Conveyor_Module_UIV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // -------------------- UIV Robot Arm -------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Robot_Arm_UEV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.TranscendentMetal, 8L), + GTOreDictUnificator.get(OrePrefixes.gear, MaterialsUEVplus.TranscendentMetal, 2L), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.TranscendentMetal, 6L), + ItemList.Electric_Motor_UIV.get(2L), ItemList.Electric_Piston_UIV.get(1L), + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 2L }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 4L }, + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 8L }, + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 6L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Robot_Arm_UIV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // -------------------- UIV Electric Piston -------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Piston_UEV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new ItemStack[] { ItemList.Electric_Motor_UIV.get(1L), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 6L), + GTOreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.TranscendentMetal, 8L), + GTOreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.TranscendentMetal, 64L), + GTOreDictUnificator.get(OrePrefixes.stick, MaterialsUEVplus.TranscendentMetal, 8L), + GTOreDictUnificator.get(OrePrefixes.gear, MaterialsUEVplus.TranscendentMetal, 2L), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.TranscendentMetal, 4L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 4L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Electric_Piston_UIV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ------------------------ UIV Emitter ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Emitter_UEV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1L), + ItemList.Electric_Motor_UIV.get(1L), + GTOreDictUnificator.get(OrePrefixes.stick, MaterialsUEVplus.TranscendentMetal, 16L), + ItemList.Gravistar.get(32L), new Object[] { OrePrefixes.circuit.get(Materials.UIV), 4L }, + TRINIUM_REINFORCED_STEEL.getFoil(64), LAFIUM.getFoil(64), CINOBITE.getFoil(64), PIKYONIUM.getFoil(64), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 7L) }, + new FluidStack[] { fluid_0, fluid_1 }, + ItemList.Emitter_UIV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ------------------------ UIV Sensor ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Sensor_UEV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1L), + ItemList.Electric_Motor_UIV.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 8L), + ItemList.Gravistar.get(32), new Object[] { OrePrefixes.circuit.get(Materials.UIV), 4L }, + TRINIUM_REINFORCED_STEEL.getFoil(64), LAFIUM.getFoil(64), CINOBITE.getFoil(64), PIKYONIUM.getFoil(64), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 7L) }, + new FluidStack[] { fluid_0, fluid_1 }, + ItemList.Sensor_UIV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // --------------------------------------------------------------------- + + // ------------------------ UIV Field Generator ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Field_Generator_UEV.get(1), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.TranscendentMetal, 6L), + ItemList.Gravistar.get(16L), ItemList.Emitter_UIV.get(4L), + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 4 }, + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.Infinity, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.NetherStar, 8L) }, + new FluidStack[] { fluid_0, fluid_1 }, + ItemList.Field_Generator_UIV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // --------------------------------------------------------------------- + + } + + private void itemPartsUMVAsslineRecipes() { + + // ---------------------------------------------------------------------- + // ------------------------- Set up information ------------------------- + // ---------------------------------------------------------------------- + + Fluid mutated_living_solder = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null + ? FluidRegistry.getFluid("molten.mutatedlivingsolder") + : FluidRegistry.getFluid("molten.solderingalloy"); + Fluid hypogen = FluidRegistry.getFluid("molten.hypogen"); + Fluid celestialTungsten = FluidRegistry.getFluid("molten.celestialtungsten"); + + int total_computation = 192_000; + int comp_per_second = 256; + int research_eu_per_tick = (int) TierEU.RECIPE_UIV; + int research_amperage = 1; + + FluidStack fluid_0 = hypogen != null ? new FluidStack(hypogen, 576) : null; + FluidStack fluid_1 = celestialTungsten != null ? new FluidStack(celestialTungsten, 576) : null; + FluidStack fluid_2 = new FluidStack(mutated_living_solder, 2592); + FluidStack fluid_3 = Materials.Lubricant.getFluid(4000); + + int crafting_time_in_ticks = 1000; + int crafting_eu_per_tick = (int) TierEU.RECIPE_UIV; + + // ------------------------------------------------------------- + + // ------------------------- UMV Motor ------------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Motor_UIV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new ItemStack[] { GTOreDictUnificator.get(OrePrefixes.stickLong, Materials.TengamAttuned, 32L), + GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.SpaceTime, 16L), + GTOreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.SpaceTime, 8L), + GTOreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.SpaceTime, 32L), HYPOGEN.getFineWire(64), + HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), + HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 2L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2, fluid_3 }, + ItemList.Electric_Motor_UMV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // --------------------- UMV Electric Pump --------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Pump_UIV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { ItemList.Electric_Motor_UMV.get(1L), + GTOreDictUnificator.get(OrePrefixes.pipeLarge, Materials.Infinity, 2L), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 4L), + GTOreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SpaceTime, 16L), + new Object[] { OrePrefixes.ring.get(Materials.AnySyntheticRubber), 64L }, + GTOreDictUnificator.get(OrePrefixes.rotor, MaterialsUEVplus.SpaceTime, 4L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 2L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2, fluid_3 }, + ItemList.Electric_Pump_UMV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ----------------------- UMV Conveyor ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Conveyor_Module_UIV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { ItemList.Electric_Motor_UMV.get(2L), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 2L), + GTOreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.SpaceTime, 8L), + GTOreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.SpaceTime, 64L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 2L), + new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 64L }, + new Object[] { OrePrefixes.plate.get(Materials.AnySyntheticRubber), 16L } }, + new FluidStack[] { fluid_0, fluid_1, fluid_2, fluid_3 }, + ItemList.Conveyor_Module_UMV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // -------------------- UMV Robot Arm -------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Robot_Arm_UIV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.SpaceTime, 8L), + GTOreDictUnificator.get(OrePrefixes.gear, MaterialsUEVplus.SpaceTime, 2L), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.SpaceTime, 6L), + ItemList.Electric_Motor_UMV.get(2L), ItemList.Electric_Piston_UMV.get(1L), + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 2L }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 4L }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 8L }, + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 6L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2, fluid_3 }, + ItemList.Robot_Arm_UMV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // -------------------- UMV Electric Piston -------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Piston_UIV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new ItemStack[] { ItemList.Electric_Motor_UMV.get(1L), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 6L), + GTOreDictUnificator.get(OrePrefixes.ring, MaterialsUEVplus.SpaceTime, 8L), + GTOreDictUnificator.get(OrePrefixes.round, MaterialsUEVplus.SpaceTime, 64L), + GTOreDictUnificator.get(OrePrefixes.stick, MaterialsUEVplus.SpaceTime, 8L), + GTOreDictUnificator.get(OrePrefixes.gear, MaterialsUEVplus.SpaceTime, 2L), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.SpaceTime, 4L), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 4L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2, fluid_3 }, + ItemList.Electric_Piston_UMV.get(1), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ------------------------ UMV Emitter ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Emitter_UIV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1L), + ItemList.Electric_Motor_UMV.get(1L), + GTOreDictUnificator.get(OrePrefixes.stick, MaterialsUEVplus.SpaceTime, 16L), ItemList.Gravistar.get(64), + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 4L }, CELESTIAL_TUNGSTEN.getFoil(64), + QUANTUM.getFoil(64), ASTRAL_TITANIUM.getFoil(64), TITANSTEEL.getFoil(64), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 7L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Emitter_UMV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // ------------------------------------------------------------- + + // ------------------------ UMV Sensor ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Sensor_UIV.get(1L), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1L), + ItemList.Electric_Motor_UMV.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 8L), ItemList.Gravistar.get(64), + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 4L }, CELESTIAL_TUNGSTEN.getFoil(64), + QUANTUM.getFoil(64), ASTRAL_TITANIUM.getFoil(64), TITANSTEEL.getFoil(64), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 7L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Sensor_UMV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // --------------------------------------------------------------------- + + // ------------------------ UMV Field Generator ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Field_Generator_UIV.get(1), + total_computation, + comp_per_second, + research_eu_per_tick, + research_amperage, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SpaceTime, 1L), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.SpaceTime, 6L), ItemList.Gravistar.get(32L), + ItemList.Emitter_UMV.get(4L), new Object[] { OrePrefixes.circuit.get(Materials.UXV), 4 }, + HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), + HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), HYPOGEN.getFineWire(64), + GTOreDictUnificator.get(OrePrefixes.cableGt04, Materials.Quantium, 8L) }, + new FluidStack[] { fluid_0, fluid_1, fluid_2 }, + ItemList.Field_Generator_UMV.get(1L), + crafting_time_in_ticks, + crafting_eu_per_tick); + + // --------------------------------------------------------------------- + + } + + private void itemPartsUXVAsslineRecipes() { + + // ---------------------------------------------------------------------- + // ------------------------- Set up information ------------------------- + // ---------------------------------------------------------------------- + + Fluid mutatedLivingSolder = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null + ? FluidRegistry.getFluid("molten.mutatedlivingsolder") + : FluidRegistry.getFluid("molten.solderingalloy"); + + FluidStack moltenMHDCSM_576 = MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(576); + FluidStack moltenSpaceTime_576 = MaterialsUEVplus.SpaceTime.getMolten(576); + FluidStack moltenUniversium_576 = MaterialsUEVplus.Universium.getMolten(576); + FluidStack lubricantFluid_8000 = Materials.Lubricant.getFluid(8000); + FluidStack solderingAlloy_14_400 = new FluidStack(mutatedLivingSolder, 14_400); + + int totalComputation = 384_000; + int compPerSecond = 512; + int researchEuPerTick = 64_000_000; + int researchAmperage = 2; + + int craftingTimeInTicks = 1000; + int craftingEuPerTick = (int) TierEU.RECIPE_UMV; + + // ------------------------------------------------------------- + + // ------------------------- UXV Motor ------------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Motor_UMV.get(1L), + totalComputation, + compPerSecond, + researchEuPerTick, + researchAmperage, + new ItemStack[] { ItemList.EnergisedTesseract.get(1), + GTOreDictUnificator + .get(OrePrefixes.stickLong, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 16L), + GTOreDictUnificator + .get(OrePrefixes.ring, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), + GTOreDictUnificator + .get(OrePrefixes.round, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 32L), + + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.SuperconductorUMVBase, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.SuperconductorUMVBase, 64L), + + GTOreDictUnificator + .get(OrePrefixes.wireFine, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), + GTOreDictUnificator + .get(OrePrefixes.wireFine, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), + + GTOreDictUnificator.get(OrePrefixes.wireFine, MaterialsUEVplus.Universium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, MaterialsUEVplus.Universium, 64L), + + GTOreDictUnificator.get("wireFineShirabon", 64L), GTOreDictUnificator.get("wireFineShirabon", 64L), + + GTOreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 2L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 2L), + Materials.Neutronium.getNanite(4) }, + new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, lubricantFluid_8000 }, + ItemList.Electric_Motor_UXV.get(1L), + craftingTimeInTicks, + craftingEuPerTick); + + // ------------------------------------------------------------- + + // --------------------- UXV Electric Pump --------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Pump_UMV.get(1L), + totalComputation, + compPerSecond, + researchEuPerTick, + researchAmperage, + new Object[] { ItemList.Electric_Motor_UXV.get(1L), + GTOreDictUnificator.get(OrePrefixes.pipeLarge, MaterialsUEVplus.SpaceTime, 2L), + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 4L), + GTOreDictUnificator + .get(OrePrefixes.screw, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 16L), + GTOreDictUnificator.get(OrePrefixes.ring, MaterialsKevlar.Kevlar, 64L), + GTOreDictUnificator.get("ringRadoxPoly", 64L), + GTOreDictUnificator + .get(OrePrefixes.rotor, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 4L), + GTOreDictUnificator.get("rotorShirabon", 4), + GTOreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 2L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 2L), + Materials.Neutronium.getNanite(4) }, + new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, lubricantFluid_8000 }, + ItemList.Electric_Pump_UXV.get(1), + craftingTimeInTicks, + craftingEuPerTick); + + // ------------------------------------------------------------- + + // ----------------------- UXV Conveyor ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Conveyor_Module_UMV.get(1L), + totalComputation, + compPerSecond, + researchEuPerTick, + researchAmperage, + new Object[] { ItemList.Electric_Motor_UXV.get(2L), + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2L), + GTOreDictUnificator + .get(OrePrefixes.ring, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), + GTOreDictUnificator + .get(OrePrefixes.round, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 2L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 2L), + MaterialsKevlar.Kevlar.getPlates(64), MaterialsKevlar.Kevlar.getPlates(16), + GTOreDictUnificator.get("plateRadoxPoly", 64L), GTOreDictUnificator.get("plateRadoxPoly", 16L), + Materials.Neutronium.getNanite(4) }, + new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, lubricantFluid_8000 }, + ItemList.Conveyor_Module_UXV.get(1), + craftingTimeInTicks, + craftingEuPerTick); + + // ------------------------------------------------------------- + + // -------------------- UXV Robot Arm -------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Robot_Arm_UMV.get(1L), + totalComputation, + compPerSecond, + researchEuPerTick, + researchAmperage, + new Object[] { + GTOreDictUnificator + .get(OrePrefixes.stickLong, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), + GTOreDictUnificator + .get(OrePrefixes.gear, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2L), + GTOreDictUnificator.get("gearGtShirabon", 2L), + GTOreDictUnificator + .get(OrePrefixes.gearGtSmall, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 6L), + GTOreDictUnificator.get("gearGtSmallShirabon", 6L), ItemList.Electric_Motor_UXV.get(2L), + ItemList.Electric_Piston_UXV.get(1L), new Object[] { OrePrefixes.circuit.get(Materials.UXV), 2L }, + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 4L }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 8L }, + GTOreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 6L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 6L), + Materials.Neutronium.getNanite(8) }, + new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, lubricantFluid_8000 }, + ItemList.Robot_Arm_UXV.get(1L), + craftingTimeInTicks, + craftingEuPerTick); + + // ------------------------------------------------------------- + + // -------------------- UXV Electric Piston -------------------- + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Electric_Piston_UMV.get(1L), + totalComputation, + compPerSecond, + researchEuPerTick, + researchAmperage, + new ItemStack[] { ItemList.Electric_Motor_UXV.get(1L), + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 6L), + GTOreDictUnificator + .get(OrePrefixes.ring, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), + GTOreDictUnificator + .get(OrePrefixes.round, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), + GTOreDictUnificator + .get(OrePrefixes.stick, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), + GTOreDictUnificator + .get(OrePrefixes.gear, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2L), + GTOreDictUnificator.get("gearGtShirabon", 2L), + GTOreDictUnificator + .get(OrePrefixes.gearGtSmall, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 4L), + GTOreDictUnificator.get("gearGtSmallShirabon", 4L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 4L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 4L), + Materials.Neutronium.getNanite(4) }, + new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, lubricantFluid_8000 }, + ItemList.Electric_Piston_UXV.get(1), + craftingTimeInTicks, + craftingEuPerTick); + + // ------------------------------------------------------------- + + // ------------------------ UXV Emitter ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Emitter_UMV.get(1L), + totalComputation, + compPerSecond, + researchEuPerTick, + researchAmperage, + new Object[] { + GTOreDictUnificator + .get(OrePrefixes.frameGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1L), + ItemList.Electric_Motor_UXV.get(1L), + GTOreDictUnificator + .get(OrePrefixes.stick, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 16L), + ItemList.NuclearStar.get(16), new Object[] { OrePrefixes.circuit.get(Materials.UXV), 4L }, + GTOreDictUnificator + .get(OrePrefixes.foil, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64), + GTOreDictUnificator.get("foilShirabon", 64), + GTOreDictUnificator.get(OrePrefixes.foil, MaterialsUEVplus.SpaceTime, 64), + GTOreDictUnificator.get(OrePrefixes.foil, MaterialsUEVplus.Universium, 64), + GTOreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 7L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 7L), Materials.Neutronium.getNanite(8) + + }, + new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, solderingAlloy_14_400 }, + ItemList.Emitter_UXV.get(1L), + craftingTimeInTicks, + craftingEuPerTick); + + // ------------------------------------------------------------- + + // ------------------------ UXV Sensor ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Sensor_UMV.get(1L), + totalComputation, + compPerSecond, + researchEuPerTick, + researchAmperage, + new Object[] { + GTOreDictUnificator + .get(OrePrefixes.frameGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1L), + ItemList.Electric_Motor_UXV.get(1L), + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8L), + ItemList.NuclearStar.get(16), new Object[] { OrePrefixes.circuit.get(Materials.UXV), 4L }, + GTOreDictUnificator + .get(OrePrefixes.foil, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64), + GTOreDictUnificator.get("foilShirabon", 64), + GTOreDictUnificator.get(OrePrefixes.foil, MaterialsUEVplus.SpaceTime, 64), + GTOreDictUnificator.get(OrePrefixes.foil, MaterialsUEVplus.Universium, 64), + GTOreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 7L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 7L), + Materials.Neutronium.getNanite(8) }, + new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, solderingAlloy_14_400 }, + ItemList.Sensor_UXV.get(1L), + craftingTimeInTicks, + craftingEuPerTick); + + // --------------------------------------------------------------------- + + // ------------------------ UXV Field Generator ------------------------ + + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Field_Generator_UMV.get(1), + totalComputation, + compPerSecond, + researchEuPerTick, + researchAmperage, + new Object[] { + GTOreDictUnificator + .get(OrePrefixes.frameGt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 1L), + GTOreDictUnificator + .get(OrePrefixes.plate, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 6L), + ItemList.NuclearStar.get(64L), ItemList.Emitter_UXV.get(4L), + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 8 }, + + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.SuperconductorUMVBase, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, Materials.SuperconductorUMVBase, 64L), + GTOreDictUnificator + .get(OrePrefixes.wireFine, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), + GTOreDictUnificator + .get(OrePrefixes.wireFine, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, MaterialsUEVplus.Universium, 64L), + GTOreDictUnificator.get(OrePrefixes.wireFine, MaterialsUEVplus.Universium, 64L), + GTOreDictUnificator.get("wireFineShirabon", 64L), GTOreDictUnificator.get("wireFineShirabon", 64L), + + GTOreDictUnificator.get(OrePrefixes.wireGt04, MaterialsUEVplus.SpaceTime, 8L), + GTOreDictUnificator.get(OrePrefixes.wireGt04, Materials.Infinity, 8L), + Materials.Neutronium.getNanite(12) }, + new FluidStack[] { moltenMHDCSM_576, moltenSpaceTime_576, moltenUniversium_576, solderingAlloy_14_400 }, + ItemList.Field_Generator_UXV.get(1L), + craftingTimeInTicks, + craftingEuPerTick); + + // --------------------------------------------------------------------- + + } + + private void addEOHRecipes() { + Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null + ? FluidRegistry.getFluid("molten.mutatedlivingsolder") + : FluidRegistry.getFluid("molten.solderingalloy"); + ItemStack largeShirabonPlate = TGregUtils.newItemStack(Materials.get("Shirabon"), PartTypes.LargePlate, 1); + ItemStack largeInfinityPlate = new ItemStack(TinkerTools.largePlate, 1, Tonkers.infinityMetalId); + ItemStack largeBedrockiumPlate = new ItemStack(TinkerTools.largePlate, 1, ExtraUtils.tcon_bedrock_material_id); + ItemStack largeCosmicNeutroniumPlate = new ItemStack(TinkerTools.largePlate, 1, Tonkers.neutroniumId); + + final FluidStack[] specialFluid = new FluidStack[] { MaterialsUEVplus.SpaceTime.getMolten(1_440), + MaterialsUEVplus.SpaceTime.getMolten(1_440), MaterialsUEVplus.SpaceTime.getMolten(1_440), + MaterialsUEVplus.SpaceTime.getMolten(1_440), MaterialsUEVplus.SpaceTime.getMolten(1_440), + MaterialsUEVplus.SpaceTime.getMolten(1_440), MaterialsUEVplus.SpaceTime.getMolten(1_440), + MaterialsUEVplus.SpaceTime.getMolten(1_440), MaterialsUEVplus.SpaceTime.getMolten(1_440) }; + + final ItemStack[] plateList = new ItemStack[] { + // Dense Shirabon plate. + GTOreDictUnificator.get("boltShirabon", 2), + GTOreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.WhiteDwarfMatter, 2), + GTOreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.WhiteDwarfMatter, 8), + GTOreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.WhiteDwarfMatter, 32), + GTOreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.BlackDwarfMatter, 2), + GTOreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.BlackDwarfMatter, 8), + GTOreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.BlackDwarfMatter, 32), + GTOreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 2), + GTOreDictUnificator + .get(OrePrefixes.bolt, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 8) }; + + // EOH Controller Recipe. + { + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Machine_Multi_PlasmaForge.get(1), + 512_000_000, // total comp + 2 * 16_384, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + 64, // amperage + new Object[] { + // Space elevator controller. + ItemList.SpaceElevatorController.get(16), ItemList.Machine_Multi_PlasmaForge.get(4), + + CustomItemList.EOH_Infinite_Energy_Casing.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier0.get(1), + CustomItemList.SpacetimeCompressionFieldGeneratorTier0.get(1), + CustomItemList.StabilisationFieldGeneratorTier0.get(1), + + CustomItemList.Machine_Multi_Computer.get(64), ItemList.AcceleratorUV.get(1), + ItemList.Quantum_Chest_IV.get(64), + // Void miner III. + GTUtility.copyAmount(64, ItemRegistry.voidminer[2]), + + ItemList.Field_Generator_UMV.get(16), ItemList.Robot_Arm_UMV.get(16), ItemList.ZPM4.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 64) }, + new FluidStack[] { MaterialsUEVplus.Time.getMolten(144_000), MaterialsUEVplus.Space.getMolten(144_000), + FluidUtils.getFluidStack("molten.metastable oganesson", 144 * 256 * 4), + FluidUtils.getFluidStack("molten.shirabon", 144 * 256 * 4), }, + CustomItemList.Machine_Multi_EyeOfHarmony.get(1), + 400 * MINUTES, + (int) TierEU.RECIPE_UMV); + } + + // EOH Spatial Individual Casing + { + TTRecipeAdder.addResearchableAssemblylineRecipe( + // Dyson Swarm Module Deployment Unit Base Casing + getModItem(GalaxySpace.ID, "dysonswarmparts", 1, 2), + 256_000_000, // total comp + 16_384, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + 32, // amperage + new Object[] { + // Space elevator blocks. + getModItem(GTNHIntergalactic.ID, "gt.blockcasingsSE", 64, 0), + // Cosmic neutronium block. + getModItem(Avaritia.ID, "Resource_Block", 64, 0), + GTOreDictUnificator.get(OrePrefixes.block, Materials.Neutronium, 64), + GTOreDictUnificator.get(OrePrefixes.nanite, Materials.Neutronium, 48), largeBedrockiumPlate, + largeCosmicNeutroniumPlate, largeShirabonPlate, largeInfinityPlate, + // UV Solar panel + getModItem(SuperSolarPanels.ID, "PhotonicSolarPanel", 1, 0), ItemList.Quantum_Chest_IV.get(1), + // Gravitation Engine + getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), ItemList.EnergisedTesseract.get(1) }, + + new FluidStack[] { Materials.Neutronium.getMolten(144 * 256 * 4), + Materials.CosmicNeutronium.getMolten(144 * 256 * 4), new FluidStack(solderUEV, 144 * 256 * 2), + MaterialsUEVplus.Space.getMolten(1_440) }, + CustomItemList.EOH_Reinforced_Spatial_Casing.get(4), + 10_000, + (int) TierEU.RECIPE_UMV); + } + + // EOH Spacetime Compression + { + // ME Digital singularity. + final ItemStack ME_Singularity = getModItem( + "appliedenergistics2", + "item.ItemExtremeStorageCell.Singularity", + 1); + final ItemStack baseCasing = CustomItemList.EOH_Reinforced_Spatial_Casing.get(1); + + int baseCompPerSec = 16_384; + + int set; + int tier; + int absoluteTier; + + // T0 - Shirabon + // T1 - White Dwarf Matter + // T2 - White Dwarf Matter + // T3 - White Dwarf Matter + // T4 - Black Dwarf Matter + // T5 - Black Dwarf Matter + // T6 - Black Dwarf Matter + // T7 - Black Dwarf Matter + // T8 - MHDCSM. + + { + tier = 1; + set = 1; + + absoluteTier = 0; + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.EOH_Reinforced_Spatial_Casing.get(1), + (absoluteTier + 1) * 48_000_000, // total comp + (absoluteTier + 1) * baseCompPerSec, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + (absoluteTier + 1) * 8, // amperage + new Object[] { baseCasing, + // T7 Yotta cell. + new ItemStack(yottaFluidTankCell, tier, (5 + set)), + // quantum tank V (max tier) + ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), + // Inf chest + getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), + // Cosmic fabric manipulator + GregtechItemList.CosmicFabricManipulator.get(tier), ME_Singularity, plateList[absoluteTier], + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, + new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), + MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier] }, + CustomItemList.SpacetimeCompressionFieldGeneratorTier0.get(1), + (absoluteTier + 1) * 4_000 * 20, + (int) TierEU.RECIPE_UMV); + + tier++; + absoluteTier = 1; + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.SpacetimeCompressionFieldGeneratorTier0.get(1), + (absoluteTier + 1) * 48_000_000, // total comp + (absoluteTier + 1) * baseCompPerSec, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + (absoluteTier + 1) * 8, // amperage + new Object[] { baseCasing, + // T7 Yotta cell. + new ItemStack(yottaFluidTankCell, tier, (5 + set)), + // quantum tank V (max tier) + ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), + // Inf chest + getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), + // Cosmic fabric manipulator + GregtechItemList.CosmicFabricManipulator.get(tier), ME_Singularity, ME_Singularity, + plateList[absoluteTier], GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, + new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), + MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier] }, + CustomItemList.SpacetimeCompressionFieldGeneratorTier1.get(1), + (absoluteTier + 1) * 4_000 * 20, + (int) TierEU.RECIPE_UMV); + + tier++; + absoluteTier = 2; + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.SpacetimeCompressionFieldGeneratorTier1.get(1), + (absoluteTier + 1) * 48_000_000, // total comp + (absoluteTier + 1) * baseCompPerSec, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + (absoluteTier + 1) * 8, // amperage + new Object[] { baseCasing, + // T7 Yotta cell. + new ItemStack(yottaFluidTankCell, tier, (5 + set)), + // quantum tank V (max tier) + ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), + // Inf chest + getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), + // Cosmic fabric manipulator + GregtechItemList.CosmicFabricManipulator.get(tier), ME_Singularity, ME_Singularity, + ME_Singularity, plateList[absoluteTier], + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, + new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), + MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, + CustomItemList.SpacetimeCompressionFieldGeneratorTier2.get(1), + (absoluteTier + 1) * 4_000 * 20, + (int) TierEU.RECIPE_UMV); + } + + { + tier = 1; + set = 2; + absoluteTier = 3; + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.SpacetimeCompressionFieldGeneratorTier2.get(1), + (absoluteTier + 1) * 48_000_000, // total comp + (absoluteTier + 1) * baseCompPerSec, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + (absoluteTier + 1) * 8, // amperage + new Object[] { baseCasing, + // T8 Yotta cell. + new ItemStack(yottaFluidTankCell, tier, (5 + set)), + // quantum tank V (max tier) + ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), + // Inf chest + getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), + // Infinity infused manipulator + GregtechItemList.InfinityInfusedManipulator.get(tier), ME_Singularity, ME_Singularity, + ME_Singularity, ME_Singularity, plateList[absoluteTier], + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, + new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), + MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, + CustomItemList.SpacetimeCompressionFieldGeneratorTier3.get(1), + (absoluteTier + 1) * 4_000 * 20, + (int) TierEU.RECIPE_UMV); + + tier++; + absoluteTier = 4; + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.SpacetimeCompressionFieldGeneratorTier3.get(1), + (absoluteTier + 1) * 48_000_000, // total comp + (absoluteTier + 1) * baseCompPerSec, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + (absoluteTier + 1) * 8, // amperage + new Object[] { baseCasing, + // T8 Yotta cell. + new ItemStack(yottaFluidTankCell, tier, (5 + set)), + // quantum tank V (max tier) + ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), + // Inf chest + getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), + // Infinity infused manipulator + GregtechItemList.InfinityInfusedManipulator.get(tier), ME_Singularity, ME_Singularity, + ME_Singularity, ME_Singularity, ME_Singularity, plateList[absoluteTier], + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, + new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), + MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, + CustomItemList.SpacetimeCompressionFieldGeneratorTier4.get(1), + (absoluteTier + 1) * 4_000 * 20, + (int) TierEU.RECIPE_UMV); + + tier++; + absoluteTier = 5; + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.SpacetimeCompressionFieldGeneratorTier4.get(1), + (absoluteTier + 1) * 48_000_000, // total comp + (absoluteTier + 1) * baseCompPerSec, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + (absoluteTier + 1) * 8, // amperage + new Object[] { baseCasing, + // T8 Yotta cell. + new ItemStack(yottaFluidTankCell, tier, (5 + set)), + // quantum tank V (max tier) + ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), + // Inf chest + getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), + // Infinity infused manipulator + GregtechItemList.InfinityInfusedManipulator.get(tier), ME_Singularity, ME_Singularity, + ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, plateList[absoluteTier], + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, + new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), + MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, + CustomItemList.SpacetimeCompressionFieldGeneratorTier5.get(1), + (absoluteTier + 1) * 4_000 * 20, + (int) TierEU.RECIPE_UMV); + } + + { + tier = 1; + set = 3; + absoluteTier = 6; + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.SpacetimeCompressionFieldGeneratorTier5.get(1), + (absoluteTier + 1) * 48_000_000, // total comp + (absoluteTier + 1) * baseCompPerSec, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + (absoluteTier + 1) * 8, // amperage + new Object[] { baseCasing, + // T9 Yotta cell. + new ItemStack(yottaFluidTankCell, tier, (5 + set)), + // quantum tank V (max tier) + ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), + // Inf chest + getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), + // Spacetime continuum ripper + GregtechItemList.SpaceTimeContinuumRipper.get(tier), ME_Singularity, ME_Singularity, + ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, + plateList[absoluteTier], GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, + new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), + MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, + CustomItemList.SpacetimeCompressionFieldGeneratorTier6.get(1), + (absoluteTier + 1) * 4_000 * 20, + (int) TierEU.RECIPE_UMV); + + tier++; + absoluteTier = 7; + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.SpacetimeCompressionFieldGeneratorTier6.get(1), + (absoluteTier + 1) * 48_000_000, // total comp + (absoluteTier + 1) * baseCompPerSec, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + (absoluteTier + 1) * 8, // amperage + new Object[] { baseCasing, + // T9 Yotta cell. + new ItemStack(yottaFluidTankCell, tier, (5 + set)), + // quantum tank V (max tier) + ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), + // Inf chest + getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), + // Spacetime continuum ripper + GregtechItemList.SpaceTimeContinuumRipper.get(tier), ME_Singularity, ME_Singularity, + ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, + plateList[absoluteTier], GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, + new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), + MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, + CustomItemList.SpacetimeCompressionFieldGeneratorTier7.get(1), + (absoluteTier + 1) * 4_000 * 20, + (int) TierEU.RECIPE_UMV); + + tier++; + absoluteTier = 8; + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.SpacetimeCompressionFieldGeneratorTier7.get(1), + (absoluteTier + 1) * 48_000_000, // total comp + (absoluteTier + 1) * baseCompPerSec, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + (absoluteTier + 1) * 8, // amperage + new Object[] { baseCasing, + // T9 Yotta cell. + new ItemStack(yottaFluidTankCell, tier, (5 + set)), + // quantum tank V (max tier) + ItemList.Quantum_Tank_IV.get(4 * (1 + absoluteTier)), + // Inf chest + getModItem(AvaritiaAddons.ID, "InfinityChest", absoluteTier + 1), + // Spacetime continuum ripper + GregtechItemList.SpaceTimeContinuumRipper.get(tier), ME_Singularity, ME_Singularity, + ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, ME_Singularity, + ME_Singularity, plateList[absoluteTier], + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, set) }, + new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), + MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier], }, + CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(1), + (absoluteTier + 1) * 4_000 * 20, + (int) TierEU.RECIPE_UMV); + } + } + + // EOH Time Dilation Field Generators. + { + final ItemStack baseCasing = CustomItemList.EOH_Reinforced_Temporal_Casing.get(1); + + int baseCompPerSec = 16_384; + + // T0 - Shirabon + // T1 - White Dwarf Matter + // T2 - White Dwarf Matter + // T3 - White Dwarf Matter + // T4 - Black Dwarf Matter + // T5 - Black Dwarf Matter + // T6 - Black Dwarf Matter + // T7 - Black Dwarf Matter + // T8 - MHDCSM. + + final ItemStack[] fusionReactors = new ItemStack[] { ItemList.FusionComputer_ZPMV.get(1), + ItemList.FusionComputer_ZPMV.get(2), ItemList.FusionComputer_ZPMV.get(3), + ItemList.FusionComputer_UV.get(1), ItemList.FusionComputer_UV.get(2), ItemList.FusionComputer_UV.get(3), + // MK4 Fusion Computer. + GregtechItemList.FusionComputer_UV2.get(1), GregtechItemList.FusionComputer_UV2.get(2), + GregtechItemList.FusionComputer_UV2.get(3) }; + + final ItemStack[] fusionCoils = new ItemStack[] { new ItemStack(compactFusionCoil, 1, 1), + new ItemStack(compactFusionCoil, 2, 1), new ItemStack(compactFusionCoil, 3, 1), + new ItemStack(compactFusionCoil, 1, 2), new ItemStack(compactFusionCoil, 2, 2), + new ItemStack(compactFusionCoil, 3, 2), new ItemStack(compactFusionCoil, 1, 3), + new ItemStack(compactFusionCoil, 2, 3), new ItemStack(compactFusionCoil, 3, 3) }; + + final ItemStack[] researchStuff = new ItemStack[] { baseCasing, + CustomItemList.TimeAccelerationFieldGeneratorTier0.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier1.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier2.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier3.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier4.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier5.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier6.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier7.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier8.get(1) }; + + // Spectral Components + // Cycling should fix issues with conflicting recipes for T1-T2, T4-T5 & T7-T8 + final ItemStack[] spectralComponents = new ItemStack[] { + // Red Spectral Component + getModItem(SuperSolarPanels.ID, "redcomponent", 64), + // Green Spectral Component + getModItem(SuperSolarPanels.ID, "greencomponent", 64), + // Blue Spectral Component + getModItem(SuperSolarPanels.ID, "bluecomponent", 64) }; + + for (int absoluteTier = 0; absoluteTier < 9; absoluteTier++) { + + TTRecipeAdder.addResearchableAssemblylineRecipe( + researchStuff[absoluteTier], + (absoluteTier + 1) * 48_000_000, // total comp + (absoluteTier + 1) * baseCompPerSec, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + (absoluteTier + 1) * 8, // amperage + new Object[] { baseCasing, fusionReactors[absoluteTier], fusionCoils[absoluteTier], + // UV Solar panel + getModItem(SuperSolarPanels.ID, "PhotonicSolarPanel", absoluteTier + 1, 0), + + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, absoluteTier + 1), + // Red Spectral Component + spectralComponents[absoluteTier % spectralComponents.length], + // Green Spectral Component + spectralComponents[(absoluteTier + 1) % spectralComponents.length], + // Blue Spectral Component + spectralComponents[(absoluteTier + 2) % spectralComponents.length], + + plateList[absoluteTier], + // Dyson Swarm Module Deployment Unit Base Casing + getModItem(GalaxySpace.ID, "dysonswarmparts", (absoluteTier + 1) * 4, 2), + // Dyson Swarm Energy Receiver Dish Block + getModItem(GalaxySpace.ID, "dysonswarmparts", (absoluteTier + 1) * 4, 1), + ItemList.AcceleratorUV.get((absoluteTier + 1) * 4), + + ItemList.Energy_Module.get(absoluteTier + 1), GTOreDictUnificator + .get(OrePrefixes.wireGt01, Materials.SuperconductorUMV, (absoluteTier + 1) * 4), + + }, + new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), + MaterialsUEVplus.Time.getMolten(1_440 * (absoluteTier + 1)), specialFluid[absoluteTier] }, + researchStuff[absoluteTier + 1], + (absoluteTier + 1) * 4_000 * 20, + (int) TierEU.RECIPE_UMV); + } + + } + + // EOH Stabilisation Field Generators. + { + final ItemStack baseCasing = CustomItemList.EOH_Infinite_Energy_Casing.get(1); + + int baseCompPerSec = 16_384; + + // T0 - Shirabon + // T1 - White Dwarf Matter + // T2 - White Dwarf Matter + // T3 - White Dwarf Matter + // T4 - Black Dwarf Matter + // T5 - Black Dwarf Matter + // T6 - Black Dwarf Matter + // T7 - Black Dwarf Matter + // T8 - MHDCSM. + + final ItemStack[] researchStuff = new ItemStack[] { baseCasing, + CustomItemList.StabilisationFieldGeneratorTier0.get(1), + CustomItemList.StabilisationFieldGeneratorTier1.get(1), + CustomItemList.StabilisationFieldGeneratorTier2.get(1), + CustomItemList.StabilisationFieldGeneratorTier3.get(1), + CustomItemList.StabilisationFieldGeneratorTier4.get(1), + CustomItemList.StabilisationFieldGeneratorTier5.get(1), + CustomItemList.StabilisationFieldGeneratorTier6.get(1), + CustomItemList.StabilisationFieldGeneratorTier7.get(1), + CustomItemList.StabilisationFieldGeneratorTier8.get(1) }; + + final ItemStack[] timeCasings = new ItemStack[] { CustomItemList.TimeAccelerationFieldGeneratorTier0.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier1.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier2.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier3.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier4.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier5.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier6.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier7.get(1), + CustomItemList.TimeAccelerationFieldGeneratorTier8.get(1) }; + + final ItemStack[] spatialCasings = new ItemStack[] { + CustomItemList.SpacetimeCompressionFieldGeneratorTier0.get(1), + CustomItemList.SpacetimeCompressionFieldGeneratorTier1.get(1), + CustomItemList.SpacetimeCompressionFieldGeneratorTier2.get(1), + CustomItemList.SpacetimeCompressionFieldGeneratorTier3.get(1), + CustomItemList.SpacetimeCompressionFieldGeneratorTier4.get(1), + CustomItemList.SpacetimeCompressionFieldGeneratorTier5.get(1), + CustomItemList.SpacetimeCompressionFieldGeneratorTier6.get(1), + CustomItemList.SpacetimeCompressionFieldGeneratorTier7.get(1), + CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(1) }; + + for (int absoluteTier = 0; absoluteTier < 9; absoluteTier++) { + + // spotless:off + TTRecipeAdder.addResearchableAssemblylineRecipe( + researchStuff[absoluteTier], + (absoluteTier + 1) * 48_000_000, // total comp + (absoluteTier + 1) * baseCompPerSec, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + (absoluteTier + 1) * 8, // amperage + new Object[] { + timeCasings[absoluteTier], + spatialCasings[absoluteTier], + baseCasing, + // Dyson Swarm Module. + getModItem(GalaxySpace.ID, "item.DysonSwarmParts", 4 * (absoluteTier + 1), 0), + + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUMVBase, 4 * (absoluteTier + 1)), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUIVBase, 4 * (absoluteTier + 1)), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.SuperconductorUEVBase, 4 * (absoluteTier + 1)), + GTOreDictUnificator.get(OrePrefixes.frameGt, Materials.Longasssuperconductornameforuhvwire, 4 * (absoluteTier + 1)), + + // Gravitation Engine + getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), + getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), + getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), + getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), + + plateList[absoluteTier], + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 2 * (absoluteTier + 1)), + GTOreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.SpaceTime, absoluteTier + 1), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.SpaceTime, absoluteTier + 1) + + + }, + new FluidStack[] { new FluidStack(solderUEV, (int) (2_880 * pow(2L, absoluteTier))), + MaterialsUEVplus.Time.getMolten(1_440 * (absoluteTier + 1)), + MaterialsUEVplus.Space.getMolten(1_440 * (absoluteTier + 1)), + specialFluid[absoluteTier] }, + researchStuff[absoluteTier + 1], + (absoluteTier + 1) * 4_000 * 20, + (int) TierEU.RECIPE_UMV); + // spotless:on + } + + } + + // EOH Reinforced Temporal casings + { + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.AcceleratorUV.get(1), + 256_000_000, // total comp + 16_384, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + 32, // amperage + new Object[] { + // Space elevator blocks. + getModItem(GTNHIntergalactic.ID, "gt.blockcasingsSE", 64, 0), + // Cosmic neutronium block. + getModItem(Avaritia.ID, "Resource_Block", 64, 0), + GTOreDictUnificator.get(OrePrefixes.block, Materials.Neutronium, 64), + GTOreDictUnificator.get(OrePrefixes.nanite, Materials.Neutronium, 48), + // Large Bedrockium Plate + largeBedrockiumPlate, largeCosmicNeutroniumPlate, largeShirabonPlate, largeInfinityPlate, + // UV Solar panel + getModItem(SuperSolarPanels.ID, "PhotonicSolarPanel", 1, 0), + // Ultimate Time Anomaly. + ItemList.AcceleratorUV.get(4), + // Gravitation Engine. + getModItem(GraviSuite.ID, "itemSimpleItem", 64, 3), ItemList.EnergisedTesseract.get(1) }, + + new FluidStack[] { Materials.Neutronium.getMolten(144 * 256 * 4), + Materials.CosmicNeutronium.getMolten(144 * 256 * 4), new FluidStack(solderUEV, 144 * 256 * 2), + MaterialsUEVplus.Time.getMolten(1_440) }, + CustomItemList.EOH_Reinforced_Temporal_Casing.get(4), + 10_000, + (int) TierEU.RECIPE_UMV); + } + + // EOH Infinite Spacetime Energy Boundary Casing + { + TTRecipeAdder.addResearchableAssemblylineRecipe( + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 1), + 256_000_000, // total comp + 16_384, // comp/s + (int) TierEU.RECIPE_MAX, // eu/t + 32, // amperage + new Object[] { TileEntities.lsc.getStackForm(1), + // UV Solar panel + getModItem(SuperSolarPanels.ID, "PhotonicSolarPanel", 1, 0), + // UHV Capacitor block + new ItemStack(lscLapotronicEnergyUnit, 1, 5), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUMV, 4), + + CustomItemList.Machine_Multi_Transformer.get(16), ItemList.Wireless_Hatch_Energy_UMV.get(4), + CustomItemList.eM_energyTunnel5_UMV.get(1), + // High Energy Flow Circuit. + getModItem(NewHorizonsCoreMod.ID, "item.HighEnergyFlowCircuit", 64, 0), + + // Metastable Oganesson Plate. + GTOreDictUnificator.get("plateMetastableOganesson", 6), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.BlueTopaz, 6), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.CallistoIce, 6), + GTOreDictUnificator.get(OrePrefixes.plate, Materials.Ledox, 6), + + // Metastable Oganesson Screw. + GTOreDictUnificator.get("screwMetastableOganesson", 6), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.BlueTopaz, 6), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.CallistoIce, 6), + GTOreDictUnificator.get(OrePrefixes.screw, Materials.Ledox, 6), }, + + new FluidStack[] { Materials.Neutronium.getMolten(144 * 256 * 16), + Materials.CosmicNeutronium.getMolten(144 * 256 * 16), new FluidStack(solderUEV, 144 * 256 * 8), + MaterialsUEVplus.SpaceTime.getMolten(16_000) }, + CustomItemList.EOH_Infinite_Energy_Casing.get(1), + 10_000, + (int) TierEU.RECIPE_UMV); + } + + // Astral Array Fabricator + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(1), + 480_000_000, + 32_768, + (int) TierEU.RECIPE_MAX, + 64, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.WhiteDwarfMatter, 8), + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.BlackDwarfMatter, 8), + ItemList.EnergisedTesseract.get(32), + GTOreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.Eternity, 16), + CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(64), + CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(64), + CustomItemList.SpacetimeCompressionFieldGeneratorTier8.get(10), + CustomItemList.TimeAccelerationFieldGeneratorTier8.get(64), + CustomItemList.TimeAccelerationFieldGeneratorTier8.get(64), + CustomItemList.TimeAccelerationFieldGeneratorTier8.get(40), + CustomItemList.StabilisationFieldGeneratorTier8.get(48), + CustomItemList.EOH_Infinite_Energy_Casing.get(32), + CustomItemList.EOH_Reinforced_Temporal_Casing.get(64), + CustomItemList.EOH_Reinforced_Spatial_Casing.get(64), ItemList.Field_Generator_UMV.get(16) }, + new FluidStack[] { MaterialsUEVplus.Space.getMolten(32_768L * 64), + MaterialsUEVplus.Eternity.getMolten(16_384L * 64), MaterialsUEVplus.ExcitedDTSC.getFluid(8_192L * 64) }, + CustomItemList.astralArrayFabricator.get(1), + 300 * SECONDS, + (int) TierEU.RECIPE_UXV); + } + + private void addGodforgeRecipes() { + if (!tectech.TecTech.configTecTech.ENABLE_GOD_FORGE) return; + + if (EternalSingularity.isModLoaded()) { + // Controller + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_StellarEnergySiphonCasing.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_StellarEnergySiphonCasing.get(4), ItemList.ZPM4.get(2), + ItemList.Casing_Dim_Bridge.get(64), getModItem(EternalSingularity.ID, "eternal_singularity", 32L), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 16), + GGMaterial.metastableOganesson.get(OrePrefixes.plateDense, 16), + new ItemStack( + Particle.getBaseParticle(Particle.GRAVITON) + .getItem(), + 64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 16), + ItemList.Sensor_UIV.get(32), GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 64), + CustomItemList.eM_energyTunnel7_UIV.get(1), ItemRegistry.energyDistributor[11] }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(2048 * 144), + MaterialsUEVplus.ExcitedDTEC.getFluid(8_192_000), Materials.Thorium.getPlasma(256 * 144), + MaterialsUEVplus.TranscendentMetal.getMolten(2048 * 144) }, + CustomItemList.Machine_Multi_ForgeOfGods.get(1), + 300 * SECONDS, + (int) TierEU.RECIPE_UMV); + + } + + // Magnetic Confinement Casing + TTRecipeAdder.addResearchableAssemblylineRecipe( + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 8), + WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.block, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.TengamAttuned, 32), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 16), + MaterialsElements.STANDALONE.HYPOGEN.getScrew(8), + GTOreDictUnificator.get(OrePrefixes.screw, MaterialsUEVplus.SixPhasedCopper, 8), + ItemList.SuperconductorComposite.get(1), ItemList.Emitter_UIV.get(2), + ItemList.Electromagnet_Tengam.get(1) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), + Materials.Plutonium241.getPlasma(16 * 144) }, + CustomItemList.Godforge_MagneticConfinementCasing.get(8), + 50 * SECONDS, + (int) TierEU.RECIPE_UIV); + + if (GalacticraftAmunRa.isModLoaded()) { + // Structure Casing + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_MagneticConfinementCasing.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.Mellion, 16), + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SixPhasedCopper, 16), + GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 8), + MaterialsElements.STANDALONE.ASTRAL_TITANIUM.getFrameBox(8), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 6), + new ItemStack( + Particle.getBaseParticle(Particle.GRAVITON) + .getItem(), + 8), + ItemList.Field_Generator_UEV.get(2), + // Artificial Gravity Generator + getModItem(GalacticraftAmunRa.ID, "tile.machines3", 4L, 1) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), + Materials.Lead.getPlasma(2 * 144) }, + CustomItemList.Godforge_BoundlessStructureCasing.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + } + + // Guidance Casing + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_BoundlessStructureCasing.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_BoundlessStructureCasing.get(1), ItemList.ZPM2.get(1), + GregtechItemList.CosmicFabricManipulator.get(1), ItemList.Field_Generator_UEV.get(2), + ItemList.Emitter_UIV.get(3), GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 6), + GTOreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.Creon, 8), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.Mellion, 8) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), + Materials.Thorium.getPlasma(2 * 144) }, + CustomItemList.Godforge_GuidanceCasing.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + + // Energy Siphon Casing + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_GuidanceCasing.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_BoundlessStructureCasing.get(1), + ItemList.Casing_Coil_Hypogen.get(64), ItemList.Casing_Coil_Hypogen.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt08, Materials.SuperconductorUIV, 32), + ItemList.neutroniumHeatCapacitor.get(1L), ItemList.neutroniumHeatCapacitor.get(1L), + ItemList.Reactor_Coolant_Sp_6.get(1L), ItemList.Reactor_Coolant_Sp_6.get(1L), + CustomItemList.eM_energyTunnel7_UIV.get(1), ItemList.Generator_Plasma_UV.get(64), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 6), + MaterialsElements.STANDALONE.HYPOGEN.getPlate(6) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(16 * 144), + Materials.SuperconductorUIVBase.getMolten(32 * 144L), MaterialsUEVplus.ExcitedDTEC.getFluid(128_000L) }, + CustomItemList.Godforge_StellarEnergySiphonCasing.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + + // Gravitational Lens + TTRecipeAdder.addResearchableAssemblylineRecipe( + new ItemStack(BlockQuantumGlass.INSTANCE, 1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { new ItemStack(BlockQuantumGlass.INSTANCE, 8), + new ItemStack(ItemRegistry.bw_glasses[1], 8, 0), GregtechItemList.ForceFieldGlass.get(8), + new ItemStack( + Particle.getBaseParticle(Particle.GRAVITON) + .getItem(), + 32), + getItemContainer("RadoxPolymerLens").get(6), getItemContainer("ChromaticLens").get(6), + getItemContainer("MysteriousCrystalLens").get(6), + WerkstoffLoader.MagnetoResonaticDust.get(OrePrefixes.lens, 6), + MaterialsElements.STANDALONE.CHRONOMATIC_GLASS.getPlateDense(36), + GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Creon, 6), + GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Mellion, 6), + GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.SixPhasedCopper, 6) }, + new FluidStack[] { MaterialsElements.STANDALONE.RHUGNOR.getFluidStack(16 * 144), + MaterialsUEVplus.Creon.getMolten(16 * 144), + MaterialsElements.STANDALONE.ADVANCED_NITINOL.getFluidStack(1024 * 144) }, + new ItemStack(BlockGodforgeGlass.INSTANCE, 1), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + + // Graviton Modulator 1 + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.Battery_Gem_4.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_MagneticConfinementCasing.get(2), + ItemRefer.Field_Restriction_Coil_T3.get(1), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 16), + GTOreDictUnificator.get(OrePrefixes.gearGtSmall, MaterialsUEVplus.Mellion, 8), + GregtechItemList.Battery_Gem_4.get(2), GregtechItemList.Laser_Lens_Special.get(4), + ItemList.Emitter_UIV.get(4), GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UEV, 16), + GTOreDictUnificator.get(OrePrefixes.nanite, Materials.Silver, 2) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(32 * 144), + Materials.SuperconductorUIVBase.getMolten(32 * 144), Materials.Infinity.getMolten(32 * 144) }, + CustomItemList.Godforge_GravitonFlowModulatorTier1.get(2), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + + // Graviton Modulator 2 + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_GravitonFlowModulatorTier1.get(1), + 96_000_000, + 16_384, + (int) TierEU.RECIPE_UXV, + 128, + new Object[] { CustomItemList.Godforge_MagneticConfinementCasing.get(1), + ItemRefer.Field_Restriction_Coil_T4.get(1), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), + GTOreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.Mellion, 4), + GregtechItemList.Battery_Gem_4.get(4), GregtechItemList.Laser_Lens_Special.get(8), + ItemList.Emitter_UMV.get(4), GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UMV, 8), + GTOreDictUnificator.get(OrePrefixes.nanite, Materials.Silver, 2), + GTOreDictUnificator.get(OrePrefixes.nanite, Materials.Gold, 2) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(64 * 144), + Materials.SuperconductorUMVBase.getMolten(64 * 144), MaterialsUEVplus.SpaceTime.getMolten(64 * 144) }, + CustomItemList.Godforge_GravitonFlowModulatorTier2.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UMV); + + // Graviton Modulator 3 + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.Godforge_GravitonFlowModulatorTier2.get(1), + 192_000_000, + 32_768, + (int) TierEU.RECIPE_MAX, + 256, + new Object[] { CustomItemList.Godforge_MagneticConfinementCasing.get(1), + ItemRefer.Field_Restriction_Coil_T4.get(4), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 64), + GTOreDictUnificator.get(OrePrefixes.gearGt, MaterialsUEVplus.Mellion, 64), + GregtechItemList.SpaceTimeContinuumRipper.get(8), GregtechItemList.Battery_Gem_4.get(8), + GregtechItemList.Laser_Lens_Special.get(8), ItemList.Emitter_UXV.get(4), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 8), + GTOreDictUnificator.get(OrePrefixes.nanite, Materials.Silver, 8), + GTOreDictUnificator.get(OrePrefixes.nanite, Materials.Gold, 8), + GTOreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.SixPhasedCopper, 8), + GTOreDictUnificator.get(OrePrefixes.nanite, MaterialsUEVplus.Universium, 8) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(256 * 144), + Materials.SuperconductorUMVBase.getMolten(256 * 144), + MaterialsUEVplus.WhiteDwarfMatter.getMolten(256 * 144), + MaterialsUEVplus.Eternity.getMolten(256 * 144) }, + CustomItemList.Godforge_GravitonFlowModulatorTier3.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UXV); + + // Phonon Transmission Conduit + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Relativistic_Heat_Capacitor.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.TranscendentMetal, 1), + GTOreDictUnificator.get(OrePrefixes.stickLong, MaterialsUEVplus.Creon, 12), + new ItemStack(Blocks.tfftStorageField, 1, 9), ItemList.Tesseract.get(8), + ItemList.Relativistic_Heat_Capacitor.get(4), ItemList.Thermal_Superconductor.get(6), + ItemList.Field_Generator_UEV.get(4), + GTOreDictUnificator.get(OrePrefixes.bolt, MaterialsUEVplus.SixPhasedCopper, 24) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(64 * 144), + MaterialsUEVplus.PhononMedium.getFluid(1000), Materials.Plutonium241.getPlasma(16 * 144) }, + CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(1), + 10 * SECONDS, + (int) TierEU.RECIPE_UIV); + + ItemStack megaEBF = GTUtility.copyAmount(64, ItemRegistry.megaMachines[0]); + + // Smelting Module Controller + TTRecipeAdder.addResearchableAssemblylineRecipe( + // mega ebf controller + ItemRegistry.megaMachines[0], + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), megaEBF, + ItemList.Machine_Multi_Furnace.get(64), ItemList.ZPM4.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 16), + ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 8), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 32) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), + MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), Materials.Lead.getPlasma(256 * 144), + MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, + CustomItemList.Machine_Multi_SmeltingModule.get(1), + 300 * SECONDS, + (int) TierEU.RECIPE_UMV); + + // Molten Module Controller + TTRecipeAdder.addResearchableAssemblylineRecipe( + GregtechItemList.Mega_AlloyBlastSmelter.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), megaEBF, + GregtechItemList.Mega_AlloyBlastSmelter.get(64), ItemList.ZPM4.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 32), + ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), + ItemList.Electric_Pump_UIV.get(64), ItemList.Relativistic_Heat_Capacitor.get(8), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 8), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 32) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), + MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), MaterialsUEVplus.PhononMedium.getFluid(32000), + MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, + CustomItemList.Machine_Multi_MoltenModule.get(1), + 300 * SECONDS, + (int) TierEU.RECIPE_UMV); + + // Plasma Module Controller + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.FluidHeaterUIV.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), ItemList.FluidHeaterUIV.get(64), + GregtechItemList.FusionComputer_UV3.get(8), ItemList.ZPM4.get(1), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 32), + ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), + ItemList.Electric_Pump_UIV.get(64), ItemList.Relativistic_Heat_Capacitor.get(8), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 8), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 8), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 32) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), + MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), MaterialsUEVplus.PhononMedium.getFluid(32000), + MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, + CustomItemList.Machine_Multi_PlasmaModule.get(1), + 300 * SECONDS, + (int) TierEU.RECIPE_UMV); + + // Exotic Module Controller + TTRecipeAdder.addResearchableAssemblylineRecipe( + ItemList.Machine_Multi_TranscendentPlasmaMixer.get(1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { CustomItemList.Godforge_SingularityShieldingCasing.get(4), + ItemList.Machine_Multi_TranscendentPlasmaMixer.get(4), ItemRefer.Compact_Fusion_MK5.get(1), + ItemList.ZPM4.get(4), GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.SuperconductorUIV, 64), + ItemList.Robot_Arm_UIV.get(16), ItemList.Conveyor_Module_UIV.get(32), + ItemList.Electric_Pump_UIV.get(64), CustomItemList.Godforge_HarmonicPhononTransmissionConduit.get(8), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.SixPhasedCopper, 32), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Creon, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Mellion, 16), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UIV, 64) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(1024 * 144), + MaterialsUEVplus.ExcitedDTEC.getFluid(2_048_000), MaterialsUEVplus.PhononMedium.getFluid(64000), + MaterialsUEVplus.TranscendentMetal.getMolten(1024 * 144) }, + CustomItemList.Machine_Multi_QuarkGluonPlasmaModule.get(1), + 300 * SECONDS, + (int) TierEU.RECIPE_UMV); + } + + private void addWirelessEnergyRecipes() { + + Fluid solderUEV = FluidRegistry.getFluid("molten.mutatedlivingsolder") != null + ? FluidRegistry.getFluid("molten.mutatedlivingsolder") + : FluidRegistry.getFluid("molten.solderingalloy"); + + int recipeDurationTicks = 20 * 20; + int recipeEuPerTick = (int) TierEU.RECIPE_UMV; + + int researchEuPerTick = (int) TierEU.RECIPE_UMV; + int researchAmperage = 4; + int compPerSecond = 2000; + int totalComputation = 500_000; + + ItemStack[] energyHatches = { ItemList.Hatch_Energy_ULV.get(1), ItemList.Hatch_Energy_LV.get(1), + ItemList.Hatch_Energy_MV.get(1), ItemList.Hatch_Energy_HV.get(1), ItemList.Hatch_Energy_EV.get(1), + ItemList.Hatch_Energy_IV.get(1), ItemList.Hatch_Energy_LuV.get(1), ItemList.Hatch_Energy_ZPM.get(1), + ItemList.Hatch_Energy_UV.get(1), ItemList.Hatch_Energy_UHV.get(1), ItemList.Hatch_Energy_UEV.get(1L), + ItemList.Hatch_Energy_UIV.get(1L), ItemList.Hatch_Energy_UMV.get(1L), ItemList.Hatch_Energy_UXV.get(1L) }; + + ItemStack[] energyHatches_4A = { CustomItemList.eM_energyMulti4_EV.get(1), + CustomItemList.eM_energyMulti4_IV.get(1), CustomItemList.eM_energyMulti4_LuV.get(1), + CustomItemList.eM_energyMulti4_ZPM.get(1), CustomItemList.eM_energyMulti4_UV.get(1), + CustomItemList.eM_energyMulti4_UHV.get(1), CustomItemList.eM_energyMulti4_UEV.get(1), + CustomItemList.eM_energyMulti4_UIV.get(1), CustomItemList.eM_energyMulti4_UMV.get(1), + CustomItemList.eM_energyMulti4_UXV.get(1) }; + + ItemStack[] energyHatches_16A = { CustomItemList.eM_energyMulti16_EV.get(1), + CustomItemList.eM_energyMulti16_IV.get(1), CustomItemList.eM_energyMulti16_LuV.get(1), + CustomItemList.eM_energyMulti16_ZPM.get(1), CustomItemList.eM_energyMulti16_UV.get(1), + CustomItemList.eM_energyMulti16_UHV.get(1), CustomItemList.eM_energyMulti16_UEV.get(1), + CustomItemList.eM_energyMulti16_UIV.get(1), CustomItemList.eM_energyMulti16_UMV.get(1), + CustomItemList.eM_energyMulti16_UXV.get(1) }; + + ItemStack[] energyHatches_64A = { CustomItemList.eM_energyMulti64_EV.get(1), + CustomItemList.eM_energyMulti64_IV.get(1), CustomItemList.eM_energyMulti64_LuV.get(1), + CustomItemList.eM_energyMulti64_ZPM.get(1), CustomItemList.eM_energyMulti64_UV.get(1), + CustomItemList.eM_energyMulti64_UHV.get(1), CustomItemList.eM_energyMulti64_UEV.get(1), + CustomItemList.eM_energyMulti64_UIV.get(1), CustomItemList.eM_energyMulti64_UMV.get(1), + CustomItemList.eM_energyMulti64_UXV.get(1) }; + + ItemStack[] laserTargets_UXV = { CustomItemList.eM_energyTunnel1_UXV.get(1), + CustomItemList.eM_energyTunnel2_UXV.get(1), CustomItemList.eM_energyTunnel3_UXV.get(1), + CustomItemList.eM_energyTunnel4_UXV.get(1), CustomItemList.eM_energyTunnel5_UXV.get(1), + CustomItemList.eM_energyTunnel6_UXV.get(1), CustomItemList.eM_energyTunnel7_UXV.get(1), + CustomItemList.eM_energyTunnel8_UXV.get(1), CustomItemList.eM_energyTunnel9_UXV.get(1) }; + + ItemStack[] dynamoHatches = { ItemList.Hatch_Dynamo_ULV.get(1), ItemList.Hatch_Dynamo_LV.get(1), + ItemList.Hatch_Dynamo_MV.get(1), ItemList.Hatch_Dynamo_HV.get(1), ItemList.Hatch_Dynamo_EV.get(1), + ItemList.Hatch_Dynamo_IV.get(1), ItemList.Hatch_Dynamo_LuV.get(1), ItemList.Hatch_Dynamo_ZPM.get(1), + ItemList.Hatch_Dynamo_UV.get(1), ItemList.Hatch_Dynamo_UHV.get(1), ItemList.Hatch_Dynamo_UEV.get(1L), + ItemList.Hatch_Dynamo_UIV.get(1L), ItemList.Hatch_Dynamo_UMV.get(1L), ItemList.Hatch_Dynamo_UXV.get(1L) }; + + Object[] circuitsTierPlusTwo = { new Object[] { OrePrefixes.circuit.get(Materials.MV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.HV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.EV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.IV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.LuV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.ZPM), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UHV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UEV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UIV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UMV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 1L }, + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 4L }, // MAX (Technically not MAX, can be + // changed once MAX circuits become + // craftable) + new Object[] { OrePrefixes.circuit.get(Materials.UXV), 16L } // MAX (Technically not MAX, can be + // changed once MAX circuits become + // craftable) + }; + + ItemStack[] wirelessHatches = { ItemList.Wireless_Hatch_Energy_ULV.get(1), + ItemList.Wireless_Hatch_Energy_LV.get(1), ItemList.Wireless_Hatch_Energy_MV.get(1), + ItemList.Wireless_Hatch_Energy_HV.get(1), ItemList.Wireless_Hatch_Energy_EV.get(1), + ItemList.Wireless_Hatch_Energy_IV.get(1), ItemList.Wireless_Hatch_Energy_LuV.get(1), + ItemList.Wireless_Hatch_Energy_ZPM.get(1), ItemList.Wireless_Hatch_Energy_UV.get(1), + ItemList.Wireless_Hatch_Energy_UHV.get(1), ItemList.Wireless_Hatch_Energy_UEV.get(1), + ItemList.Wireless_Hatch_Energy_UIV.get(1), ItemList.Wireless_Hatch_Energy_UMV.get(1), + ItemList.Wireless_Hatch_Energy_UXV.get(1) }; + + ItemStack[] wirelessHatches_4A = { CustomItemList.eM_energyWirelessMulti4_EV.get(1), + CustomItemList.eM_energyWirelessMulti4_IV.get(1), CustomItemList.eM_energyWirelessMulti4_LuV.get(1), + CustomItemList.eM_energyWirelessMulti4_ZPM.get(1), CustomItemList.eM_energyWirelessMulti4_UV.get(1), + CustomItemList.eM_energyWirelessMulti4_UHV.get(1), CustomItemList.eM_energyWirelessMulti4_UEV.get(1), + CustomItemList.eM_energyWirelessMulti4_UIV.get(1), CustomItemList.eM_energyWirelessMulti4_UMV.get(1), + CustomItemList.eM_energyWirelessMulti4_UXV.get(1) }; + + ItemStack[] wirelessHatches_16A = { CustomItemList.eM_energyWirelessMulti16_EV.get(1), + CustomItemList.eM_energyWirelessMulti16_IV.get(1), CustomItemList.eM_energyWirelessMulti16_LuV.get(1), + CustomItemList.eM_energyWirelessMulti16_ZPM.get(1), CustomItemList.eM_energyWirelessMulti16_UV.get(1), + CustomItemList.eM_energyWirelessMulti16_UHV.get(1), CustomItemList.eM_energyWirelessMulti16_UEV.get(1), + CustomItemList.eM_energyWirelessMulti16_UIV.get(1), CustomItemList.eM_energyWirelessMulti16_UMV.get(1), + CustomItemList.eM_energyWirelessMulti16_UXV.get(1) }; + + ItemStack[] wirelessHatches_64A = { CustomItemList.eM_energyWirelessMulti64_EV.get(1), + CustomItemList.eM_energyWirelessMulti64_IV.get(1), CustomItemList.eM_energyWirelessMulti64_LuV.get(1), + CustomItemList.eM_energyWirelessMulti64_ZPM.get(1), CustomItemList.eM_energyWirelessMulti64_UV.get(1), + CustomItemList.eM_energyWirelessMulti64_UHV.get(1), CustomItemList.eM_energyWirelessMulti64_UEV.get(1), + CustomItemList.eM_energyWirelessMulti64_UIV.get(1), CustomItemList.eM_energyWirelessMulti64_UMV.get(1), + CustomItemList.eM_energyWirelessMulti64_UXV.get(1) }; + + ItemStack[] wirelessLasers = { CustomItemList.eM_energyWirelessTunnel1_UXV.get(1), + CustomItemList.eM_energyWirelessTunnel2_UXV.get(1), CustomItemList.eM_energyWirelessTunnel3_UXV.get(1), + CustomItemList.eM_energyWirelessTunnel4_UXV.get(1), CustomItemList.eM_energyWirelessTunnel5_UXV.get(1), + CustomItemList.eM_energyWirelessTunnel6_UXV.get(1), CustomItemList.eM_energyWirelessTunnel7_UXV.get(1), + CustomItemList.eM_energyWirelessTunnel8_UXV.get(1), CustomItemList.eM_energyWirelessTunnel9_UXV.get(1) }; + + ItemStack[] wirelessDynamos = { ItemList.Wireless_Dynamo_Energy_ULV.get(1), + ItemList.Wireless_Dynamo_Energy_LV.get(1), ItemList.Wireless_Dynamo_Energy_MV.get(1), + ItemList.Wireless_Dynamo_Energy_HV.get(1), ItemList.Wireless_Dynamo_Energy_EV.get(1), + ItemList.Wireless_Dynamo_Energy_IV.get(1), ItemList.Wireless_Dynamo_Energy_LuV.get(1), + ItemList.Wireless_Dynamo_Energy_ZPM.get(1), ItemList.Wireless_Dynamo_Energy_UV.get(1), + ItemList.Wireless_Dynamo_Energy_UHV.get(1), ItemList.Wireless_Dynamo_Energy_UEV.get(1), + ItemList.Wireless_Dynamo_Energy_UIV.get(1), ItemList.Wireless_Dynamo_Energy_UMV.get(1), + ItemList.Wireless_Dynamo_Energy_UXV.get(1) }; + + // ------------------------ Wireless EU hatches ------------------------ + + for (int i = 0; i < wirelessHatches.length; i++) { + + TTRecipeAdder.addResearchableAssemblylineRecipe( + (i == 0) ? ItemList.Tesseract.get(1) : wirelessHatches[i - 1], + totalComputation, + compPerSecond, + researchEuPerTick, + researchAmperage, + new Object[] { energyHatches[i], new ItemStack(compactFusionCoil, 1), + ItemList.Casing_Coil_Superconductor.get(1), CustomItemList.Machine_Multi_Transformer.get(1), + CustomItemList.eM_Power.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt01, MaterialsUEVplus.SpaceTime, 2), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 1), circuitsTierPlusTwo[i], + ItemList.EnergisedTesseract.get(1) }, + new FluidStack[] { new FluidStack(solderUEV, 1296), MaterialsUEVplus.ExcitedDTEC.getFluid(500L) }, + wirelessHatches[i], + recipeDurationTicks, + recipeEuPerTick); + } + + // ------------------------ 4A Wireless EU hatches ------------------------ + + for (int i = 0; i < wirelessHatches_4A.length; i++) { + + TTRecipeAdder.addResearchableAssemblylineRecipe( + energyHatches_4A[i], + totalComputation * 4, + compPerSecond * 4, + researchEuPerTick, + researchAmperage * 2, + new Object[] { energyHatches_4A[i], new ItemStack(compactFusionCoil, 1, 1), + ItemList.Casing_Coil_Superconductor.get(1), CustomItemList.Machine_Multi_Transformer.get(1), + CustomItemList.eM_Power.get(4), + GTOreDictUnificator.get(OrePrefixes.wireGt01, MaterialsUEVplus.SpaceTime, 4), + GTOreDictUnificator.get("plateTripleShirabon", 4L), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Flerovium, 4), circuitsTierPlusTwo[i + 4], + ItemList.EnergisedTesseract.get(1) }, + new FluidStack[] { new FluidStack(solderUEV, 1_296 * 4), + MaterialsUEVplus.ExcitedDTEC.getFluid(500L * 4) }, + wirelessHatches_4A[i], + recipeDurationTicks, + recipeEuPerTick); + } + + // ------------------------ 16A Wireless EU hatches ------------------------ + + for (int i = 0; i < wirelessHatches_16A.length; i++) { + + TTRecipeAdder.addResearchableAssemblylineRecipe( + energyHatches_16A[i], + totalComputation * 16, + compPerSecond * 16, + researchEuPerTick, + researchAmperage * 4, + new Object[] { energyHatches_16A[i], new ItemStack(compactFusionCoil, 1, 2), + ItemList.Casing_Coil_Superconductor.get(1), CustomItemList.Machine_Multi_Transformer.get(1), + CustomItemList.eM_Power.get(16), + GTOreDictUnificator.get(OrePrefixes.wireGt01, MaterialsUEVplus.SpaceTime, 16), + GTOreDictUnificator.get("plateTripleShirabon", 16L), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 4), + circuitsTierPlusTwo[i + 4], ItemList.EnergisedTesseract.get(1) }, + new FluidStack[] { new FluidStack(solderUEV, 1_296 * 16), + MaterialsUEVplus.ExcitedDTEC.getFluid(500L * 16) }, + wirelessHatches_16A[i], + recipeDurationTicks, + recipeEuPerTick); + } + + // ------------------------ 64A Wireless EU hatches ------------------------ + + for (int i = 0; i < wirelessHatches_64A.length; i++) { + + TTRecipeAdder.addResearchableAssemblylineRecipe( + energyHatches_64A[i], + totalComputation * 64, + compPerSecond * 64, + researchEuPerTick, + researchAmperage * 8, + new Object[] { energyHatches_64A[i], new ItemStack(compactFusionCoil, 1, 3), + ItemList.Casing_Coil_Superconductor.get(1), CustomItemList.Machine_Multi_Transformer.get(1), + CustomItemList.eM_Power.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt01, MaterialsUEVplus.SpaceTime, 64), + GTOreDictUnificator.get("plateTripleShirabon", 64L), + GTOreDictUnificator.get("plateDenseMetastableOganesson", 4), circuitsTierPlusTwo[i + 4], + ItemList.EnergisedTesseract.get(1) }, + new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64), + MaterialsUEVplus.ExcitedDTEC.getFluid(500L * 64) }, + wirelessHatches_64A[i], + recipeDurationTicks, + recipeEuPerTick); + } + + // ------------------------ Wireless UXV Lasers ------------------------ + + for (int i = 0; i < wirelessLasers.length; i++) { + + TTRecipeAdder.addResearchableAssemblylineRecipe( + laserTargets_UXV[i], + totalComputation * 64, + compPerSecond * 64, + researchEuPerTick * 4, + researchAmperage * 16, + new Object[] { laserTargets_UXV[i], new ItemStack(compactFusionCoil, 1, 4), + // Dyson Swarm Module Deployment Unit Superconducting Magnet + getModItem(GalaxySpace.ID, "dysonswarmparts", 1, 4), + CustomItemList.Machine_Multi_Transformer.get(1), CustomItemList.eM_Power.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, MaterialsUEVplus.SpaceTime, 64), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.Eternity, 32), + GTOreDictUnificator + .get(OrePrefixes.plateDense, MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter, 16), + GTOreDictUnificator.get(OrePrefixes.circuit, Materials.UXV, 16L), + ItemList.EnergisedTesseract.get(1) }, + new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64 * 4), + MaterialsUEVplus.ExcitedDTSC.getFluid(500L * 64) }, + wirelessLasers[i], + recipeDurationTicks, + recipeEuPerTick); + } + + // ------------------------ 4MA+ Lasers ------------------------ + + // 4M UMV Target + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.eM_energyTunnel7_UMV.get(1), + totalComputation * 48, + compPerSecond * 48, + researchEuPerTick * 3, + researchAmperage * 16, + new Object[] { ItemList.Hull_UMV.get(1), GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Emitter_UMV.get(64), + ItemList.Emitter_UMV.get(64), ItemList.Electric_Pump_UMV.get(64), ItemList.Electric_Pump_UMV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.Quantium, 32) }, + new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64 * 4) }, + CustomItemList.eM_energyTunnel8_UMV.get(1), + 53 * MINUTES + 20 * SECONDS, + (int) TierEU.RECIPE_UMV); + + // 4M UXV Target + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.eM_energyTunnel8_UMV.get(1), + totalComputation * 64, + compPerSecond * 64, + researchEuPerTick * 4, + researchAmperage * 16, + new Object[] { ItemList.Hull_UXV.get(1), GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Sensor_UXV.get(64), + ItemList.Sensor_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 32) }, + new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64 * 4) }, + CustomItemList.eM_energyTunnel8_UXV.get(1), + 106 * MINUTES + 40 * SECONDS, + (int) TierEU.RECIPE_UXV); + + // 16M UXV Target + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.eM_energyTunnel8_UXV.get(1), + totalComputation * 64, + compPerSecond * 64, + researchEuPerTick * 4, + researchAmperage * 16, + new Object[] { ItemList.Hull_UXV.get(1), GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Sensor_UXV.get(64), + ItemList.Sensor_UXV.get(64), ItemList.Sensor_UXV.get(64), ItemList.Sensor_UXV.get(64), + ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), + ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 64) }, + new FluidStack[] { new FluidStack(solderUEV, 1_296 * 128 * 4) }, + CustomItemList.eM_energyTunnel9_UXV.get(1), + 213 * MINUTES + 20 * SECONDS, + (int) TierEU.RECIPE_UXV); + + // 4M UMV Source + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.eM_dynamoTunnel7_UMV.get(1), + totalComputation * 48, + compPerSecond * 48, + researchEuPerTick * 3, + researchAmperage * 16, + new Object[] { ItemList.Hull_UMV.get(1), GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Sensor_UMV.get(64), + ItemList.Sensor_UMV.get(64), ItemList.Electric_Pump_UMV.get(64), ItemList.Electric_Pump_UMV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.Quantium, 32) }, + new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64 * 4) }, + CustomItemList.eM_dynamoTunnel8_UMV.get(1), + 53 * MINUTES + 20 * SECONDS, + (int) TierEU.RECIPE_UMV); + + // 4M UXV Source + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.eM_dynamoTunnel7_UXV.get(1), + totalComputation * 64, + compPerSecond * 64, + researchEuPerTick * 4, + researchAmperage * 16, + new Object[] { ItemList.Hull_UXV.get(1), GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Sensor_UXV.get(64), + ItemList.Sensor_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 32) }, + new FluidStack[] { new FluidStack(solderUEV, 1_296 * 64 * 4) }, + CustomItemList.eM_dynamoTunnel8_UXV.get(1), + 106 * MINUTES + 40 * SECONDS, + (int) TierEU.RECIPE_UXV); + + // 16M UXV Source + TTRecipeAdder.addResearchableAssemblylineRecipe( + CustomItemList.eM_dynamoTunnel8_UXV.get(1), + totalComputation * 64, + compPerSecond * 64, + researchEuPerTick * 4, + researchAmperage * 16, + new Object[] { ItemList.Hull_UXV.get(1), GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), + GTOreDictUnificator.get(OrePrefixes.lens, Materials.Diamond, 64), ItemList.Emitter_UXV.get(64), + ItemList.Emitter_UXV.get(64), ItemList.Emitter_UXV.get(64), ItemList.Emitter_UXV.get(64), + ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), + ItemList.Electric_Pump_UXV.get(64), ItemList.Electric_Pump_UXV.get(64), + GTOreDictUnificator.get(OrePrefixes.wireGt16, Materials.BlackPlutonium, 64) }, + new FluidStack[] { new FluidStack(solderUEV, 1_296 * 128 * 4) }, + CustomItemList.eM_dynamoTunnel9_UXV.get(1), + 213 * MINUTES + 20 * SECONDS, + (int) TierEU.RECIPE_UXV); + + // ------------------------ Wireless EU dynamos ------------------------ + + for (int i = 0; i < wirelessHatches.length; i++) { + + TTRecipeAdder.addResearchableAssemblylineRecipe( + (i == 0) ? ItemList.EnergisedTesseract.get(1) : wirelessDynamos[i - 1], + totalComputation, + compPerSecond, + researchEuPerTick, + researchAmperage, + new Object[] { dynamoHatches[i], new ItemStack(compactFusionCoil, 1), + ItemList.Casing_Coil_Superconductor.get(1), CustomItemList.Machine_Multi_Transformer.get(1), + CustomItemList.eM_Power.get(2), + GTOreDictUnificator.get(OrePrefixes.wireGt01, MaterialsUEVplus.SpaceTime, 2), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 1), circuitsTierPlusTwo[i], + ItemList.EnergisedTesseract.get(1) }, + new FluidStack[] { new FluidStack(solderUEV, 1296), MaterialsUEVplus.ExcitedDTEC.getFluid(500L) }, + wirelessDynamos[i], + recipeDurationTicks, + recipeEuPerTick); + } + } + + public void runLateRecipes() { + if (tectech.TecTech.configTecTech.ENABLE_GOD_FORGE && EternalSingularity.isModLoaded()) { + // Shielding Casing + TTRecipeAdder.addResearchableAssemblylineRecipe( + GTOreDictUnificator.get(OrePrefixes.block, MaterialsUEVplus.TranscendentMetal, 1), + 48_000_000, + 8_192, + (int) TierEU.RECIPE_UMV, + 64, + new Object[] { GTOreDictUnificator.get(OrePrefixes.frameGt, MaterialsUEVplus.SixPhasedCopper, 4), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.CosmicNeutronium, 16), + GGMaterial.tairitsu.get(OrePrefixes.plateDense, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, Materials.Infinity, 16), + GTOreDictUnificator.get(OrePrefixes.plateDense, MaterialsUEVplus.TranscendentMetal, 8), + getModItem(EternalSingularity.ID, "combined_singularity", 1L, 2), + getModItem(EternalSingularity.ID, "combined_singularity", 1L, 4), + ItemRefer.Advanced_Radiation_Protection_Plate.get(64), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Mellion, 16), + GTOreDictUnificator.get(OrePrefixes.plate, MaterialsUEVplus.Creon, 16), + MaterialsAlloy.QUANTUM.getPlate(16), MaterialsAlloy.ABYSSAL.getFrameBox(4) }, + new FluidStack[] { MaterialMisc.MUTATED_LIVING_SOLDER.getFluidStack(128 * 144), + Materials.Bedrockium.getMolten(16_384 * 144), Materials.Neutronium.getMolten(2_048 * 144) }, + CustomItemList.Godforge_SingularityShieldingCasing.get(4), + 30 * SECONDS, + (int) TierEU.RECIPE_UIV); + } + } +} diff --git a/src/main/java/tectech/loader/thing/CoverLoader.java b/src/main/java/tectech/loader/thing/CoverLoader.java new file mode 100644 index 0000000000..d5c203e91d --- /dev/null +++ b/src/main/java/tectech/loader/thing/CoverLoader.java @@ -0,0 +1,47 @@ +package tectech.loader.thing; + +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTechAPI; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.objects.GTRenderedTexture; +import tectech.TecTech; +import tectech.thing.cover.CoverEnderFluidLink; +import tectech.thing.cover.CoverPowerPassUpgrade; +import tectech.thing.cover.CoverTeslaCoil; +import tectech.thing.cover.CoverTeslaCoilUltimate; +import tectech.thing.item.ItemEnderFluidLinkCover; +import tectech.thing.item.ItemPowerPassUpgradeCover; +import tectech.thing.item.ItemTeslaCoilCover; + +public class CoverLoader implements Runnable { + + public void run() { + final IIconContainer TESLA_OVERLAY = new Textures.BlockIcons.CustomIcon("iconsets/TESLA_OVERLAY"); + final IIconContainer TESLA_OVERLAY_ULTIMATE = new Textures.BlockIcons.CustomIcon( + "iconsets/TESLA_OVERLAY_ULTIMATE"); + final IIconContainer ENDERFLUIDLINK_OVERLAY = new Textures.BlockIcons.CustomIcon( + "iconsets/ENDERFLUIDLINK_OVERLAY"); + final IIconContainer POWERPASSUPGRADE_OVERLAY = new Textures.BlockIcons.CustomIcon( + "iconsets/POWERPASSUPGRADE_OVERLAY"); + + GregTechAPI.registerCover( + new ItemStack(ItemTeslaCoilCover.INSTANCE, 1, 0), + new GTRenderedTexture(TESLA_OVERLAY), + new CoverTeslaCoil()); + GregTechAPI.registerCover( + new ItemStack(ItemTeslaCoilCover.INSTANCE, 1, 1), + new GTRenderedTexture(TESLA_OVERLAY_ULTIMATE), + new CoverTeslaCoilUltimate()); + GregTechAPI.registerCover( + new ItemStack(ItemEnderFluidLinkCover.INSTANCE, 1, 0), + new GTRenderedTexture(ENDERFLUIDLINK_OVERLAY), + new CoverEnderFluidLink()); + GregTechAPI.registerCover( + new ItemStack(ItemPowerPassUpgradeCover.INSTANCE, 1, 0), + new GTRenderedTexture(POWERPASSUPGRADE_OVERLAY), + new CoverPowerPassUpgrade()); + TecTech.LOGGER.info("Cover functionality registered"); + } +} diff --git a/src/main/java/tectech/loader/thing/MachineLoader.java b/src/main/java/tectech/loader/thing/MachineLoader.java new file mode 100644 index 0000000000..237ab8a849 --- /dev/null +++ b/src/main/java/tectech/loader/thing/MachineLoader.java @@ -0,0 +1,2532 @@ +package tectech.loader.thing; + +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.addItemTooltip; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.MetaTileEntityIDs.ActiveTransformer; +import static gregtech.api.enums.MetaTileEntityIDs.AdvancedTeslaTransceiver1by1; +import static gregtech.api.enums.MetaTileEntityIDs.AdvancedTeslaTransceiver2by2; +import static gregtech.api.enums.MetaTileEntityIDs.AdvancedTeslaTransceiver3by3; +import static gregtech.api.enums.MetaTileEntityIDs.AdvancedTeslaTransceiver4by4; +import static gregtech.api.enums.MetaTileEntityIDs.AssemblylineSlaveConnector; +import static gregtech.api.enums.MetaTileEntityIDs.AutoTapingMaintenanceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.BasicTeslaTransceiver1by1; +import static gregtech.api.enums.MetaTileEntityIDs.BasicTeslaTransceiver2by2; +import static gregtech.api.enums.MetaTileEntityIDs.BasicTeslaTransceiver3by3; +import static gregtech.api.enums.MetaTileEntityIDs.BasicTeslaTransceiver4by4; +import static gregtech.api.enums.MetaTileEntityIDs.CapacitorHatch; +import static gregtech.api.enums.MetaTileEntityIDs.CloudComputationClientHatch; +import static gregtech.api.enums.MetaTileEntityIDs.CloudComputationServerHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ComputerRack; +import static gregtech.api.enums.MetaTileEntityIDs.DataBank; +import static gregtech.api.enums.MetaTileEntityIDs.DataBankMasterConnector; +import static gregtech.api.enums.MetaTileEntityIDs.DebugDataHatch; +import static gregtech.api.enums.MetaTileEntityIDs.DebugPollutionGenerator; +import static gregtech.api.enums.MetaTileEntityIDs.DebugPowerGenerator; +import static gregtech.api.enums.MetaTileEntityIDs.DebugStructureWriter; +import static gregtech.api.enums.MetaTileEntityIDs.EV16ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.EV16AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.EV16AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.EV4ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.EV4AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.EV4AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.EV64ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.EV64AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.EV64AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.EnergyInfuser; +import static gregtech.api.enums.MetaTileEntityIDs.EpycTeslaTransceiver1by1; +import static gregtech.api.enums.MetaTileEntityIDs.EpycTeslaTransceiver2by2; +import static gregtech.api.enums.MetaTileEntityIDs.EpycTeslaTransceiver3by3; +import static gregtech.api.enums.MetaTileEntityIDs.EpycTeslaTransceiver4by4; +import static gregtech.api.enums.MetaTileEntityIDs.ExtendedMegaUltimateBuckConverter; +import static gregtech.api.enums.MetaTileEntityIDs.ExtremelyUltimateBuckConverter; +import static gregtech.api.enums.MetaTileEntityIDs.EyeofHarmony; +import static gregtech.api.enums.MetaTileEntityIDs.ForgeoftheGods; +import static gregtech.api.enums.MetaTileEntityIDs.HelioflarePowerForge; +import static gregtech.api.enums.MetaTileEntityIDs.HeliofluxMeltingCore; +import static gregtech.api.enums.MetaTileEntityIDs.HeliofusionExoticizer; +import static gregtech.api.enums.MetaTileEntityIDs.HeliothermalPlasmaFabricator; +import static gregtech.api.enums.MetaTileEntityIDs.HighlyUltimateBuckConverter; +import static gregtech.api.enums.MetaTileEntityIDs.IV1024AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV1024AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV1048576AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV1048576AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV16384AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV16384AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV16ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV16AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV16AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV256AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV256AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV262144AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV262144AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV4096AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV4096AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV4ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV4AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV4AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV64ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV64AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV64AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV65536AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.IV65536AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.InsaneBuckConverter; +import static gregtech.api.enums.MetaTileEntityIDs.InsaneTeslaTransceiver1by1; +import static gregtech.api.enums.MetaTileEntityIDs.InsaneTeslaTransceiver2by2; +import static gregtech.api.enums.MetaTileEntityIDs.InsaneTeslaTransceiver3by3; +import static gregtech.api.enums.MetaTileEntityIDs.InsaneTeslaTransceiver4by4; +import static gregtech.api.enums.MetaTileEntityIDs.InsanelyUltimateBuckConverter; +import static gregtech.api.enums.MetaTileEntityIDs.LaserVacuumMirror; +import static gregtech.api.enums.MetaTileEntityIDs.LaserVacuumPipe; +import static gregtech.api.enums.MetaTileEntityIDs.LaserVacuumPipeCasing; +import static gregtech.api.enums.MetaTileEntityIDs.LegendaryLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LegendaryLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV1024AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV1024AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV1048576AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV1048576AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV16384AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV16384AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV16ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV16AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV16AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV256AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV256AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV262144AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV262144AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV4096AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV4096AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV4ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV4AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV4AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV64ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV64AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV64AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV65536AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LuV65536AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.LudicrousBuckConverter; +import static gregtech.api.enums.MetaTileEntityIDs.MAX16AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.MAX4AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.MAX64AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.MegaUltimateBuckConverter; +import static gregtech.api.enums.MetaTileEntityIDs.MicrowaveGrinder; +import static gregtech.api.enums.MetaTileEntityIDs.NetworkSwitchWithQoS; +import static gregtech.api.enums.MetaTileEntityIDs.ObjectHolder; +import static gregtech.api.enums.MetaTileEntityIDs.OpticalFiberCable; +import static gregtech.api.enums.MetaTileEntityIDs.OpticalFiberCableCasing; +import static gregtech.api.enums.MetaTileEntityIDs.OpticalMasterConnector; +import static gregtech.api.enums.MetaTileEntityIDs.OpticalSlaveConnector; +import static gregtech.api.enums.MetaTileEntityIDs.Ownerdetector; +import static gregtech.api.enums.MetaTileEntityIDs.Parametrizer; +import static gregtech.api.enums.MetaTileEntityIDs.ParametrizerX; +import static gregtech.api.enums.MetaTileEntityIDs.ParametrizertXt; +import static gregtech.api.enums.MetaTileEntityIDs.QuantumComputer; +import static gregtech.api.enums.MetaTileEntityIDs.Researchstation; +import static gregtech.api.enums.MetaTileEntityIDs.TeslaTower; +import static gregtech.api.enums.MetaTileEntityIDs.UEV1024AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV1024AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV1048576AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV1048576AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV16384AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV16384AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV16ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV16AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV16AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV256AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV256AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV262144AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV262144AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV4096AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV4096AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV4ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV4AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV4AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV64ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV64AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV64AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV65536AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UEV65536AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV1024AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV1024AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV1048576AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV1048576AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV16384AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV16384AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV16ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV16AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV16AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV256AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV256AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV262144AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV262144AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV4096AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV4096AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV4ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV4AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV4AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV64ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV64AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV64AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV65536AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UHV65536AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV1024AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV1024AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV1048576AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV1048576AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV16384AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV16384AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV16ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV16AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV16AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV256AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV256AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV262144AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV262144AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV4096AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV4096AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV4ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV4AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV4AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV64ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV64AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV64AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV65536AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UIV65536AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV1024AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV1024AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV1048576AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV1048576AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV16384AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV16384AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV16ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV16AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV16AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV256AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV256AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV262144AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV262144AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV4096AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV4096AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV4ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV4AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV4AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV64ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV64AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV64AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV65536AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UMV65536AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV1024AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV1024AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV1048576AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV1048576AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV16384AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV16384AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV16ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV16AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV16AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV256AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV256AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV262144AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV262144AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV4096AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV4096AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV4ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV4AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV4AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV64ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV64AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV64AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV65536AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UV65536AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV1024AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV1024AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV1024AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV1048576AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV1048576AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV1048576AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV16384AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV16384AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV16384AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV16ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV16AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV16AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV256AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV256AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV256AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV262144AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV262144AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV262144AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV4096AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV4096AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV4096AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV4ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV4AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV4AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV64ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV64AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV64AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV65536AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV65536AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UXV65536AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.UltimatePowerBuckConverter; +import static gregtech.api.enums.MetaTileEntityIDs.UltimatePowerTeslaTransceiver1by1; +import static gregtech.api.enums.MetaTileEntityIDs.UltimatePowerTeslaTransceiver2by2; +import static gregtech.api.enums.MetaTileEntityIDs.UltimatePowerTeslaTransceiver3by3; +import static gregtech.api.enums.MetaTileEntityIDs.UltimatePowerTeslaTransceiver4by4; +import static gregtech.api.enums.MetaTileEntityIDs.UncertaintyResolution; +import static gregtech.api.enums.MetaTileEntityIDs.UncertaintyResolver; +import static gregtech.api.enums.MetaTileEntityIDs.UncertaintyResolverX; +import static gregtech.api.enums.MetaTileEntityIDs.WirelessAssemblylineSlaveConnector; +import static gregtech.api.enums.MetaTileEntityIDs.WirelessDataBankMasterConnector; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM1024AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM1024AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM1048576AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM1048576AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM16384AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM16384AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM16ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM16AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM16AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM256AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM256AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM262144AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM262144AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM4096AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM4096AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM4ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM4AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM4AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM64ADynamoHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM64AEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM64AWirelessEnergyHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM65536AtLaserSourceHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPM65536AtLaserTargetHatch; +import static gregtech.api.enums.MetaTileEntityIDs.ZPMVoltageBuckConverter; +import static tectech.thing.CustomItemList.DATApipe; +import static tectech.thing.CustomItemList.DATApipeBlock; +import static tectech.thing.CustomItemList.LASERpipe; +import static tectech.thing.CustomItemList.LASERpipeBlock; +import static tectech.thing.CustomItemList.LASERpipeSmart; +import static tectech.thing.CustomItemList.Machine_BuckConverter_IV; +import static tectech.thing.CustomItemList.Machine_BuckConverter_LuV; +import static tectech.thing.CustomItemList.Machine_BuckConverter_UEV; +import static tectech.thing.CustomItemList.Machine_BuckConverter_UHV; +import static tectech.thing.CustomItemList.Machine_BuckConverter_UIV; +import static tectech.thing.CustomItemList.Machine_BuckConverter_UMV; +import static tectech.thing.CustomItemList.Machine_BuckConverter_UV; +import static tectech.thing.CustomItemList.Machine_BuckConverter_UXV; +import static tectech.thing.CustomItemList.Machine_BuckConverter_ZPM; +import static tectech.thing.CustomItemList.Machine_DebugGenny; +import static tectech.thing.CustomItemList.Machine_DebugPollutor; +import static tectech.thing.CustomItemList.Machine_DebugWriter; +import static tectech.thing.CustomItemList.Machine_Multi_Computer; +import static tectech.thing.CustomItemList.Machine_Multi_DataBank; +import static tectech.thing.CustomItemList.Machine_Multi_EyeOfHarmony; +import static tectech.thing.CustomItemList.Machine_Multi_ForgeOfGods; +import static tectech.thing.CustomItemList.Machine_Multi_Infuser; +import static tectech.thing.CustomItemList.Machine_Multi_Microwave; +import static tectech.thing.CustomItemList.Machine_Multi_MoltenModule; +import static tectech.thing.CustomItemList.Machine_Multi_PlasmaModule; +import static tectech.thing.CustomItemList.Machine_Multi_QuarkGluonPlasmaModule; +import static tectech.thing.CustomItemList.Machine_Multi_Research; +import static tectech.thing.CustomItemList.Machine_Multi_SmeltingModule; +import static tectech.thing.CustomItemList.Machine_Multi_Switch; +import static tectech.thing.CustomItemList.Machine_Multi_TeslaCoil; +import static tectech.thing.CustomItemList.Machine_Multi_Transformer; +import static tectech.thing.CustomItemList.Machine_OwnerDetector; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_1by1_EV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_1by1_HV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_1by1_IV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_1by1_LV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_1by1_MV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_2by2_EV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_2by2_HV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_2by2_IV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_2by2_LV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_2by2_MV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_3by3_EV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_3by3_HV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_3by3_IV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_3by3_LV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_3by3_MV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_4by4_EV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_4by4_HV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_4by4_IV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_4by4_LV; +import static tectech.thing.CustomItemList.Machine_TeslaCoil_4by4_MV; +import static tectech.thing.CustomItemList.ParametrizerTXT_Hatch; +import static tectech.thing.CustomItemList.ParametrizerX_Hatch; +import static tectech.thing.CustomItemList.Parametrizer_Hatch; +import static tectech.thing.CustomItemList.UncertaintyX_Hatch; +import static tectech.thing.CustomItemList.Uncertainty_Hatch; +import static tectech.thing.CustomItemList.UnusedStuff; +import static tectech.thing.CustomItemList.capacitor_Hatch; +import static tectech.thing.CustomItemList.dataInAss_Hatch; +import static tectech.thing.CustomItemList.dataInAss_Wireless_Hatch; +import static tectech.thing.CustomItemList.dataIn_Hatch; +import static tectech.thing.CustomItemList.dataIn_Wireless_Hatch; +import static tectech.thing.CustomItemList.dataOutAss_Hatch; +import static tectech.thing.CustomItemList.dataOutAss_Wireless_Hatch; +import static tectech.thing.CustomItemList.dataOut_Hatch; +import static tectech.thing.CustomItemList.dataOut_Wireless_Hatch; +import static tectech.thing.CustomItemList.eM_dynamoMulti16_EV; +import static tectech.thing.CustomItemList.eM_dynamoMulti16_IV; +import static tectech.thing.CustomItemList.eM_dynamoMulti16_LuV; +import static tectech.thing.CustomItemList.eM_dynamoMulti16_UEV; +import static tectech.thing.CustomItemList.eM_dynamoMulti16_UHV; +import static tectech.thing.CustomItemList.eM_dynamoMulti16_UIV; +import static tectech.thing.CustomItemList.eM_dynamoMulti16_UMV; +import static tectech.thing.CustomItemList.eM_dynamoMulti16_UV; +import static tectech.thing.CustomItemList.eM_dynamoMulti16_UXV; +import static tectech.thing.CustomItemList.eM_dynamoMulti16_ZPM; +import static tectech.thing.CustomItemList.eM_dynamoMulti4_EV; +import static tectech.thing.CustomItemList.eM_dynamoMulti4_IV; +import static tectech.thing.CustomItemList.eM_dynamoMulti4_LuV; +import static tectech.thing.CustomItemList.eM_dynamoMulti4_UEV; +import static tectech.thing.CustomItemList.eM_dynamoMulti4_UHV; +import static tectech.thing.CustomItemList.eM_dynamoMulti4_UIV; +import static tectech.thing.CustomItemList.eM_dynamoMulti4_UMV; +import static tectech.thing.CustomItemList.eM_dynamoMulti4_UV; +import static tectech.thing.CustomItemList.eM_dynamoMulti4_UXV; +import static tectech.thing.CustomItemList.eM_dynamoMulti4_ZPM; +import static tectech.thing.CustomItemList.eM_dynamoMulti64_EV; +import static tectech.thing.CustomItemList.eM_dynamoMulti64_IV; +import static tectech.thing.CustomItemList.eM_dynamoMulti64_LuV; +import static tectech.thing.CustomItemList.eM_dynamoMulti64_UEV; +import static tectech.thing.CustomItemList.eM_dynamoMulti64_UHV; +import static tectech.thing.CustomItemList.eM_dynamoMulti64_UIV; +import static tectech.thing.CustomItemList.eM_dynamoMulti64_UMV; +import static tectech.thing.CustomItemList.eM_dynamoMulti64_UV; +import static tectech.thing.CustomItemList.eM_dynamoMulti64_UXV; +import static tectech.thing.CustomItemList.eM_dynamoMulti64_ZPM; +import static tectech.thing.CustomItemList.eM_dynamoTunnel1_IV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel1_LuV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel1_UEV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel1_UHV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel1_UIV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel1_UMV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel1_UV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel1_UXV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel1_ZPM; +import static tectech.thing.CustomItemList.eM_dynamoTunnel2_IV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel2_LuV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel2_UEV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel2_UHV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel2_UIV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel2_UMV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel2_UV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel2_UXV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel2_ZPM; +import static tectech.thing.CustomItemList.eM_dynamoTunnel3_IV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel3_LuV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel3_UEV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel3_UHV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel3_UIV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel3_UMV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel3_UV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel3_UXV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel3_ZPM; +import static tectech.thing.CustomItemList.eM_dynamoTunnel4_IV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel4_LuV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel4_UEV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel4_UHV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel4_UIV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel4_UMV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel4_UV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel4_UXV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel4_ZPM; +import static tectech.thing.CustomItemList.eM_dynamoTunnel5_IV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel5_LuV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel5_UEV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel5_UHV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel5_UIV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel5_UMV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel5_UV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel5_UXV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel5_ZPM; +import static tectech.thing.CustomItemList.eM_dynamoTunnel6_IV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel6_LuV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel6_UEV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel6_UHV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel6_UIV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel6_UMV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel6_UV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel6_UXV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel6_ZPM; +import static tectech.thing.CustomItemList.eM_dynamoTunnel7_IV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel7_LuV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel7_UEV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel7_UHV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel7_UIV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel7_UMV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel7_UV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel7_UXV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel7_ZPM; +import static tectech.thing.CustomItemList.eM_dynamoTunnel8_UMV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel8_UXV; +import static tectech.thing.CustomItemList.eM_dynamoTunnel9001; +import static tectech.thing.CustomItemList.eM_dynamoTunnel9_UXV; +import static tectech.thing.CustomItemList.eM_energyMulti16_EV; +import static tectech.thing.CustomItemList.eM_energyMulti16_IV; +import static tectech.thing.CustomItemList.eM_energyMulti16_LuV; +import static tectech.thing.CustomItemList.eM_energyMulti16_UEV; +import static tectech.thing.CustomItemList.eM_energyMulti16_UHV; +import static tectech.thing.CustomItemList.eM_energyMulti16_UIV; +import static tectech.thing.CustomItemList.eM_energyMulti16_UMV; +import static tectech.thing.CustomItemList.eM_energyMulti16_UV; +import static tectech.thing.CustomItemList.eM_energyMulti16_UXV; +import static tectech.thing.CustomItemList.eM_energyMulti16_ZPM; +import static tectech.thing.CustomItemList.eM_energyMulti4_EV; +import static tectech.thing.CustomItemList.eM_energyMulti4_IV; +import static tectech.thing.CustomItemList.eM_energyMulti4_LuV; +import static tectech.thing.CustomItemList.eM_energyMulti4_UEV; +import static tectech.thing.CustomItemList.eM_energyMulti4_UHV; +import static tectech.thing.CustomItemList.eM_energyMulti4_UIV; +import static tectech.thing.CustomItemList.eM_energyMulti4_UMV; +import static tectech.thing.CustomItemList.eM_energyMulti4_UV; +import static tectech.thing.CustomItemList.eM_energyMulti4_UXV; +import static tectech.thing.CustomItemList.eM_energyMulti4_ZPM; +import static tectech.thing.CustomItemList.eM_energyMulti64_EV; +import static tectech.thing.CustomItemList.eM_energyMulti64_IV; +import static tectech.thing.CustomItemList.eM_energyMulti64_LuV; +import static tectech.thing.CustomItemList.eM_energyMulti64_UEV; +import static tectech.thing.CustomItemList.eM_energyMulti64_UHV; +import static tectech.thing.CustomItemList.eM_energyMulti64_UIV; +import static tectech.thing.CustomItemList.eM_energyMulti64_UMV; +import static tectech.thing.CustomItemList.eM_energyMulti64_UV; +import static tectech.thing.CustomItemList.eM_energyMulti64_UXV; +import static tectech.thing.CustomItemList.eM_energyMulti64_ZPM; +import static tectech.thing.CustomItemList.eM_energyTunnel1_IV; +import static tectech.thing.CustomItemList.eM_energyTunnel1_LuV; +import static tectech.thing.CustomItemList.eM_energyTunnel1_UEV; +import static tectech.thing.CustomItemList.eM_energyTunnel1_UHV; +import static tectech.thing.CustomItemList.eM_energyTunnel1_UIV; +import static tectech.thing.CustomItemList.eM_energyTunnel1_UMV; +import static tectech.thing.CustomItemList.eM_energyTunnel1_UV; +import static tectech.thing.CustomItemList.eM_energyTunnel1_UXV; +import static tectech.thing.CustomItemList.eM_energyTunnel1_ZPM; +import static tectech.thing.CustomItemList.eM_energyTunnel2_IV; +import static tectech.thing.CustomItemList.eM_energyTunnel2_LuV; +import static tectech.thing.CustomItemList.eM_energyTunnel2_UEV; +import static tectech.thing.CustomItemList.eM_energyTunnel2_UHV; +import static tectech.thing.CustomItemList.eM_energyTunnel2_UIV; +import static tectech.thing.CustomItemList.eM_energyTunnel2_UMV; +import static tectech.thing.CustomItemList.eM_energyTunnel2_UV; +import static tectech.thing.CustomItemList.eM_energyTunnel2_UXV; +import static tectech.thing.CustomItemList.eM_energyTunnel2_ZPM; +import static tectech.thing.CustomItemList.eM_energyTunnel3_IV; +import static tectech.thing.CustomItemList.eM_energyTunnel3_LuV; +import static tectech.thing.CustomItemList.eM_energyTunnel3_UEV; +import static tectech.thing.CustomItemList.eM_energyTunnel3_UHV; +import static tectech.thing.CustomItemList.eM_energyTunnel3_UIV; +import static tectech.thing.CustomItemList.eM_energyTunnel3_UMV; +import static tectech.thing.CustomItemList.eM_energyTunnel3_UV; +import static tectech.thing.CustomItemList.eM_energyTunnel3_UXV; +import static tectech.thing.CustomItemList.eM_energyTunnel3_ZPM; +import static tectech.thing.CustomItemList.eM_energyTunnel4_IV; +import static tectech.thing.CustomItemList.eM_energyTunnel4_LuV; +import static tectech.thing.CustomItemList.eM_energyTunnel4_UEV; +import static tectech.thing.CustomItemList.eM_energyTunnel4_UHV; +import static tectech.thing.CustomItemList.eM_energyTunnel4_UIV; +import static tectech.thing.CustomItemList.eM_energyTunnel4_UMV; +import static tectech.thing.CustomItemList.eM_energyTunnel4_UV; +import static tectech.thing.CustomItemList.eM_energyTunnel4_UXV; +import static tectech.thing.CustomItemList.eM_energyTunnel4_ZPM; +import static tectech.thing.CustomItemList.eM_energyTunnel5_IV; +import static tectech.thing.CustomItemList.eM_energyTunnel5_LuV; +import static tectech.thing.CustomItemList.eM_energyTunnel5_UEV; +import static tectech.thing.CustomItemList.eM_energyTunnel5_UHV; +import static tectech.thing.CustomItemList.eM_energyTunnel5_UIV; +import static tectech.thing.CustomItemList.eM_energyTunnel5_UMV; +import static tectech.thing.CustomItemList.eM_energyTunnel5_UV; +import static tectech.thing.CustomItemList.eM_energyTunnel5_UXV; +import static tectech.thing.CustomItemList.eM_energyTunnel5_ZPM; +import static tectech.thing.CustomItemList.eM_energyTunnel6_IV; +import static tectech.thing.CustomItemList.eM_energyTunnel6_LuV; +import static tectech.thing.CustomItemList.eM_energyTunnel6_UEV; +import static tectech.thing.CustomItemList.eM_energyTunnel6_UHV; +import static tectech.thing.CustomItemList.eM_energyTunnel6_UIV; +import static tectech.thing.CustomItemList.eM_energyTunnel6_UMV; +import static tectech.thing.CustomItemList.eM_energyTunnel6_UV; +import static tectech.thing.CustomItemList.eM_energyTunnel6_UXV; +import static tectech.thing.CustomItemList.eM_energyTunnel6_ZPM; +import static tectech.thing.CustomItemList.eM_energyTunnel7_IV; +import static tectech.thing.CustomItemList.eM_energyTunnel7_LuV; +import static tectech.thing.CustomItemList.eM_energyTunnel7_UEV; +import static tectech.thing.CustomItemList.eM_energyTunnel7_UHV; +import static tectech.thing.CustomItemList.eM_energyTunnel7_UIV; +import static tectech.thing.CustomItemList.eM_energyTunnel7_UMV; +import static tectech.thing.CustomItemList.eM_energyTunnel7_UV; +import static tectech.thing.CustomItemList.eM_energyTunnel7_UXV; +import static tectech.thing.CustomItemList.eM_energyTunnel7_ZPM; +import static tectech.thing.CustomItemList.eM_energyTunnel8_UMV; +import static tectech.thing.CustomItemList.eM_energyTunnel8_UXV; +import static tectech.thing.CustomItemList.eM_energyTunnel9001; +import static tectech.thing.CustomItemList.eM_energyTunnel9_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti16_EV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti16_IV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti16_LuV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti16_MAX; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti16_UEV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti16_UHV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti16_UIV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti16_UMV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti16_UV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti16_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti16_ZPM; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti4_EV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti4_IV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti4_LuV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti4_MAX; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti4_UEV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti4_UHV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti4_UIV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti4_UMV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti4_UV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti4_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti4_ZPM; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti64_EV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti64_IV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti64_LuV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti64_MAX; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti64_UEV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti64_UHV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti64_UIV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti64_UMV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti64_UV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti64_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessMulti64_ZPM; +import static tectech.thing.CustomItemList.eM_energyWirelessTunnel1_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessTunnel2_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessTunnel3_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessTunnel4_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessTunnel5_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessTunnel6_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessTunnel7_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessTunnel8_UXV; +import static tectech.thing.CustomItemList.eM_energyWirelessTunnel9_UXV; +import static tectech.thing.CustomItemList.hatch_CreativeData; +import static tectech.thing.CustomItemList.hatch_CreativeMaintenance; +import static tectech.thing.CustomItemList.hatch_CreativeUncertainty; +import static tectech.thing.CustomItemList.holder_Hatch; +import static tectech.thing.CustomItemList.rack_Hatch; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.MetaTileEntityIDs; +import tectech.thing.metaTileEntity.hatch.MTEHatchCapacitor; +import tectech.thing.metaTileEntity.hatch.MTEHatchCreativeData; +import tectech.thing.metaTileEntity.hatch.MTEHatchCreativeMaintenance; +import tectech.thing.metaTileEntity.hatch.MTEHatchCreativeUncertainty; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataInput; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataItemsInput; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataItemsOutput; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataOutput; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoTunnel; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyTunnel; +import tectech.thing.metaTileEntity.hatch.MTEHatchObjectHolder; +import tectech.thing.metaTileEntity.hatch.MTEHatchParam; +import tectech.thing.metaTileEntity.hatch.MTEHatchParamText; +import tectech.thing.metaTileEntity.hatch.MTEHatchRack; +import tectech.thing.metaTileEntity.hatch.MTEHatchUncertainty; +import tectech.thing.metaTileEntity.hatch.MTEHatchWirelessComputationInput; +import tectech.thing.metaTileEntity.hatch.MTEHatchWirelessComputationOutput; +import tectech.thing.metaTileEntity.hatch.MTEHatchWirelessDataItemsInput; +import tectech.thing.metaTileEntity.hatch.MTEHatchWirelessDataItemsOutput; +import tectech.thing.metaTileEntity.hatch.MTEHatchWirelessMulti; +import tectech.thing.metaTileEntity.multi.MTEActiveTransformer; +import tectech.thing.metaTileEntity.multi.MTEDataBank; +import tectech.thing.metaTileEntity.multi.MTEEnergyInfuser; +import tectech.thing.metaTileEntity.multi.MTEEyeOfHarmony; +import tectech.thing.metaTileEntity.multi.MTEForgeOfGods; +import tectech.thing.metaTileEntity.multi.MTEMicrowave; +import tectech.thing.metaTileEntity.multi.MTENetworkSwitch; +import tectech.thing.metaTileEntity.multi.MTEQuantumComputer; +import tectech.thing.metaTileEntity.multi.MTEResearchStation; +import tectech.thing.metaTileEntity.multi.MTETeslaTower; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTEExoticModule; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTEMoltenModule; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTEPlasmaModule; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTESmeltingModule; +import tectech.thing.metaTileEntity.pipe.MTEPipeBlockData; +import tectech.thing.metaTileEntity.pipe.MTEPipeBlockEnergy; +import tectech.thing.metaTileEntity.pipe.MTEPipeData; +import tectech.thing.metaTileEntity.pipe.MTEPipeEnergy; +import tectech.thing.metaTileEntity.pipe.MTEPipeEnergyMirror; +import tectech.thing.metaTileEntity.single.MTEBuckConverter; +import tectech.thing.metaTileEntity.single.MTEDebugPollutor; +import tectech.thing.metaTileEntity.single.MTEDebugPowerGenerator; +import tectech.thing.metaTileEntity.single.MTEDebugStructureWriter; +import tectech.thing.metaTileEntity.single.MTEOwnerDetector; +import tectech.thing.metaTileEntity.single.MTETeslaCoil; + +/** + * Created by danie_000 on 16.11.2016. + */ +public class MachineLoader implements Runnable { + + @Override + public void run() { + + // =================================================================================================== + // Multi AMP Power INPUTS + // =================================================================================================== + eM_energyMulti4_EV.set( + new MTEHatchEnergyMulti(EV4AEnergyHatch.ID, "hatch.energymulti04.tier.04", "EV 4A Energy Hatch", 4, 4) + .getStackForm(1L)); + eM_energyMulti16_EV.set( + new MTEHatchEnergyMulti(EV16AEnergyHatch.ID, "hatch.energymulti16.tier.04", "EV 16A Energy Hatch", 4, 16) + .getStackForm(1L)); + eM_energyMulti64_EV.set( + new MTEHatchEnergyMulti(EV64AEnergyHatch.ID, "hatch.energymulti64.tier.04", "EV 64A Energy Hatch", 4, 64) + .getStackForm(1L)); + + eM_energyMulti4_IV.set( + new MTEHatchEnergyMulti(IV4AEnergyHatch.ID, "hatch.energymulti04.tier.05", "IV 4A Energy Hatch", 5, 4) + .getStackForm(1L)); + eM_energyMulti16_IV.set( + new MTEHatchEnergyMulti(IV16AEnergyHatch.ID, "hatch.energymulti16.tier.05", "IV 16A Energy Hatch", 5, 16) + .getStackForm(1L)); + eM_energyMulti64_IV.set( + new MTEHatchEnergyMulti(IV64AEnergyHatch.ID, "hatch.energymulti64.tier.05", "IV 64A Energy Hatch", 5, 64) + .getStackForm(1L)); + + eM_energyMulti4_LuV.set( + new MTEHatchEnergyMulti(LuV4AEnergyHatch.ID, "hatch.energymulti04.tier.06", "LuV 4A Energy Hatch", 6, 4) + .getStackForm(1L)); + eM_energyMulti16_LuV.set( + new MTEHatchEnergyMulti(LuV16AEnergyHatch.ID, "hatch.energymulti16.tier.06", "LuV 16A Energy Hatch", 6, 16) + .getStackForm(1L)); + eM_energyMulti64_LuV.set( + new MTEHatchEnergyMulti(LuV64AEnergyHatch.ID, "hatch.energymulti64.tier.06", "LuV 64A Energy Hatch", 6, 64) + .getStackForm(1L)); + + eM_energyMulti4_ZPM.set( + new MTEHatchEnergyMulti(ZPM4AEnergyHatch.ID, "hatch.energymulti04.tier.07", "ZPM 4A Energy Hatch", 7, 4) + .getStackForm(1L)); + eM_energyMulti16_ZPM.set( + new MTEHatchEnergyMulti(ZPM16AEnergyHatch.ID, "hatch.energymulti16.tier.07", "ZPM 16A Energy Hatch", 7, 16) + .getStackForm(1L)); + eM_energyMulti64_ZPM.set( + new MTEHatchEnergyMulti(ZPM64AEnergyHatch.ID, "hatch.energymulti64.tier.07", "ZPM 64A Energy Hatch", 7, 64) + .getStackForm(1L)); + + eM_energyMulti4_UV.set( + new MTEHatchEnergyMulti(UV4AEnergyHatch.ID, "hatch.energymulti04.tier.08", "UV 4A Energy Hatch", 8, 4) + .getStackForm(1L)); + eM_energyMulti16_UV.set( + new MTEHatchEnergyMulti(UV16AEnergyHatch.ID, "hatch.energymulti16.tier.08", "UV 16A Energy Hatch", 8, 16) + .getStackForm(1L)); + eM_energyMulti64_UV.set( + new MTEHatchEnergyMulti(UV64AEnergyHatch.ID, "hatch.energymulti64.tier.08", "UV 64A Energy Hatch", 8, 64) + .getStackForm(1L)); + + eM_energyMulti4_UHV.set( + new MTEHatchEnergyMulti(UHV4AEnergyHatch.ID, "hatch.energymulti04.tier.09", "UHV 4A Energy Hatch", 9, 4) + .getStackForm(1L)); + eM_energyMulti16_UHV.set( + new MTEHatchEnergyMulti(UHV16AEnergyHatch.ID, "hatch.energymulti16.tier.09", "UHV 16A Energy Hatch", 9, 16) + .getStackForm(1L)); + eM_energyMulti64_UHV.set( + new MTEHatchEnergyMulti(UHV64AEnergyHatch.ID, "hatch.energymulti64.tier.09", "UHV 64A Energy Hatch", 9, 64) + .getStackForm(1L)); + + eM_energyMulti4_UEV.set( + new MTEHatchEnergyMulti(UEV4AEnergyHatch.ID, "hatch.energymulti04.tier.10", "UEV 4A Energy Hatch", 10, 4) + .getStackForm(1L)); + eM_energyMulti16_UEV.set( + new MTEHatchEnergyMulti(UEV16AEnergyHatch.ID, "hatch.energymulti16.tier.10", "UEV 16A Energy Hatch", 10, 16) + .getStackForm(1L)); + eM_energyMulti64_UEV.set( + new MTEHatchEnergyMulti(UEV64AEnergyHatch.ID, "hatch.energymulti64.tier.10", "UEV 64A Energy Hatch", 10, 64) + .getStackForm(1L)); + + eM_energyMulti4_UIV.set( + new MTEHatchEnergyMulti(UIV4AEnergyHatch.ID, "hatch.energymulti04.tier.11", "UIV 4A Energy Hatch", 11, 4) + .getStackForm(1L)); + eM_energyMulti16_UIV.set( + new MTEHatchEnergyMulti(UIV16AEnergyHatch.ID, "hatch.energymulti16.tier.11", "UIV 16A Energy Hatch", 11, 16) + .getStackForm(1L)); + eM_energyMulti64_UIV.set( + new MTEHatchEnergyMulti(UIV64AEnergyHatch.ID, "hatch.energymulti64.tier.11", "UIV 64A Energy Hatch", 11, 64) + .getStackForm(1L)); + + eM_energyMulti4_UMV.set( + new MTEHatchEnergyMulti(UMV4AEnergyHatch.ID, "hatch.energymulti04.tier.12", "UMV 4A Energy Hatch", 12, 4) + .getStackForm(1L)); + eM_energyMulti16_UMV.set( + new MTEHatchEnergyMulti(UMV16AEnergyHatch.ID, "hatch.energymulti16.tier.12", "UMV 16A Energy Hatch", 12, 16) + .getStackForm(1L)); + eM_energyMulti64_UMV.set( + new MTEHatchEnergyMulti(UMV64AEnergyHatch.ID, "hatch.energymulti64.tier.12", "UMV 64A Energy Hatch", 12, 64) + .getStackForm(1L)); + + eM_energyMulti4_UXV.set( + new MTEHatchEnergyMulti(UXV4AEnergyHatch.ID, "hatch.energymulti04.tier.13", "UXV 4A Energy Hatch", 13, 4) + .getStackForm(1L)); + eM_energyMulti16_UXV.set( + new MTEHatchEnergyMulti(UXV16AEnergyHatch.ID, "hatch.energymulti16.tier.13", "UXV 16A Energy Hatch", 13, 16) + .getStackForm(1L)); + eM_energyMulti64_UXV.set( + new MTEHatchEnergyMulti(UXV64AEnergyHatch.ID, "hatch.energymulti64.tier.13", "UXV 64A Energy Hatch", 13, 64) + .getStackForm(1L)); + // =================================================================================================== + // Multi AMP Wireless INPUTS + // =================================================================================================== + eM_energyWirelessMulti4_EV.set( + new MTEHatchWirelessMulti( + EV4AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti04.tier.04", + "EV 4A Wireless Energy Hatch", + 4, + 4).getStackForm(1L)); + eM_energyWirelessMulti16_EV.set( + new MTEHatchWirelessMulti( + EV16AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti16.tier.04", + "EV 16A Wireless Energy Hatch", + 4, + 16).getStackForm(1L)); + eM_energyWirelessMulti64_EV.set( + new MTEHatchWirelessMulti( + EV64AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti64.tier.04", + "EV 64A Wireless Energy Hatch", + 4, + 64).getStackForm(1L)); + eM_energyWirelessMulti4_IV.set( + new MTEHatchWirelessMulti( + IV4AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti04.tier.05", + "IV 4A Wireless Energy Hatch", + 5, + 4).getStackForm(1L)); + eM_energyWirelessMulti16_IV.set( + new MTEHatchWirelessMulti( + IV16AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti16.tier.05", + "IV 16A Wireless Energy Hatch", + 5, + 16).getStackForm(1L)); + eM_energyWirelessMulti64_IV.set( + new MTEHatchWirelessMulti( + IV64AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti64.tier.05", + "IV 64A Wireless Energy Hatch", + 5, + 64).getStackForm(1L)); + eM_energyWirelessMulti4_LuV.set( + new MTEHatchWirelessMulti( + LuV4AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti04.tier.06", + "LuV 4A Wireless Energy Hatch", + 6, + 4).getStackForm(1L)); + eM_energyWirelessMulti16_LuV.set( + new MTEHatchWirelessMulti( + LuV16AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti16.tier.06", + "LuV 16A Wireless Energy Hatch", + 6, + 16).getStackForm(1L)); + eM_energyWirelessMulti64_LuV.set( + new MTEHatchWirelessMulti( + LuV64AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti64.tier.06", + "LuV 64A Wireless Energy Hatch", + 6, + 64).getStackForm(1L)); + eM_energyWirelessMulti4_ZPM.set( + new MTEHatchWirelessMulti( + ZPM4AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti04.tier.07", + "ZPM 4A Wireless Energy Hatch", + 7, + 4).getStackForm(1L)); + eM_energyWirelessMulti16_ZPM.set( + new MTEHatchWirelessMulti( + ZPM16AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti16.tier.07", + "ZPM 16A Wireless Energy Hatch", + 7, + 16).getStackForm(1L)); + eM_energyWirelessMulti64_ZPM.set( + new MTEHatchWirelessMulti( + ZPM64AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti64.tier.07", + "ZPM 64A Wireless Energy Hatch", + 7, + 64).getStackForm(1L)); + eM_energyWirelessMulti4_UV.set( + new MTEHatchWirelessMulti( + UV4AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti04.tier.08", + "UV 4A Wireless Energy Hatch", + 8, + 4).getStackForm(1L)); + eM_energyWirelessMulti16_UV.set( + new MTEHatchWirelessMulti( + UV16AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti16.tier.08", + "UV 16A Wireless Energy Hatch", + 8, + 16).getStackForm(1L)); + eM_energyWirelessMulti64_UV.set( + new MTEHatchWirelessMulti( + UV64AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti64.tier.08", + "UV 64A Wireless Energy Hatch", + 8, + 64).getStackForm(1L)); + eM_energyWirelessMulti4_UHV.set( + new MTEHatchWirelessMulti( + UHV4AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti04.tier.09", + "UHV 4A Wireless Energy Hatch", + 9, + 4).getStackForm(1L)); + eM_energyWirelessMulti16_UHV.set( + new MTEHatchWirelessMulti( + UHV16AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti16.tier.09", + "UHV 16A Wireless Energy Hatch", + 9, + 16).getStackForm(1L)); + eM_energyWirelessMulti64_UHV.set( + new MTEHatchWirelessMulti( + UHV64AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti64.tier.09", + "UHV 64A Wireless Energy Hatch", + 9, + 64).getStackForm(1L)); + eM_energyWirelessMulti4_UEV.set( + new MTEHatchWirelessMulti( + UEV4AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti04.tier.10", + "UEV 4A Wireless Energy Hatch", + 10, + 4).getStackForm(1L)); + eM_energyWirelessMulti16_UEV.set( + new MTEHatchWirelessMulti( + UEV16AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti16.tier.10", + "UEV 16A Wireless Energy Hatch", + 10, + 16).getStackForm(1L)); + eM_energyWirelessMulti64_UEV.set( + new MTEHatchWirelessMulti( + UEV64AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti64.tier.10", + "UEV 64A Wireless Energy Hatch", + 10, + 64).getStackForm(1L)); + eM_energyWirelessMulti4_UIV.set( + new MTEHatchWirelessMulti( + UIV4AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti04.tier.11", + "UIV 4A Wireless Energy Hatch", + 11, + 4).getStackForm(1L)); + eM_energyWirelessMulti16_UIV.set( + new MTEHatchWirelessMulti( + UIV16AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti16.tier.11", + "UIV 16A Wireless Energy Hatch", + 11, + 16).getStackForm(1L)); + eM_energyWirelessMulti64_UIV.set( + new MTEHatchWirelessMulti( + UIV64AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti64.tier.11", + "UIV 64A Wireless Energy Hatch", + 11, + 64).getStackForm(1L)); + eM_energyWirelessMulti4_UMV.set( + new MTEHatchWirelessMulti( + UMV4AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti04.tier.12", + "UMV 4A Wireless Energy Hatch", + 12, + 4).getStackForm(1L)); + eM_energyWirelessMulti16_UMV.set( + new MTEHatchWirelessMulti( + UMV16AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti16.tier.12", + "UMV 16A Wireless Energy Hatch", + 12, + 16).getStackForm(1L)); + eM_energyWirelessMulti64_UMV.set( + new MTEHatchWirelessMulti( + UMV64AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti64.tier.12", + "UMV 64A Wireless Energy Hatch", + 12, + 64).getStackForm(1L)); + eM_energyWirelessMulti4_UXV.set( + new MTEHatchWirelessMulti( + UXV4AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti04.tier.13", + "UXV 4A Wireless Energy Hatch", + 13, + 4).getStackForm(1L)); + eM_energyWirelessMulti16_UXV.set( + new MTEHatchWirelessMulti( + UXV16AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti16.tier.13", + "UXV 16A Wireless Energy Hatch", + 13, + 16).getStackForm(1L)); + eM_energyWirelessMulti64_UXV.set( + new MTEHatchWirelessMulti( + UXV64AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti64.tier.13", + "UXV 64A Wireless Energy Hatch", + 13, + 64).getStackForm(1L)); + eM_energyWirelessMulti4_MAX.set( + new MTEHatchWirelessMulti( + MAX4AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti04.tier.14", + "MAX 4A Wireless Energy Hatch", + 14, + 4).getStackForm(1L)); + eM_energyWirelessMulti16_MAX.set( + new MTEHatchWirelessMulti( + MAX16AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti16.tier.14", + "MAX 16A Wireless Energy Hatch", + 14, + 16).getStackForm(1L)); + eM_energyWirelessMulti64_MAX.set( + new MTEHatchWirelessMulti( + MAX64AWirelessEnergyHatch.ID, + "hatch.energywirelessmulti64.tier.14", + "MAX 64A Wireless Energy Hatch", + 14, + 64).getStackForm(1L)); + eM_energyWirelessTunnel1_UXV.set( + new MTEHatchWirelessMulti( + UXV256AWirelessEnergyHatch.ID, + "hatch.energywirelesstunnel1.tier.13", + "UXV 256A Wireless Energy Hatch", + 13, + 256).getStackForm(1L)); + eM_energyWirelessTunnel2_UXV.set( + new MTEHatchWirelessMulti( + UXV1024AWirelessEnergyHatch.ID, + "hatch.energywirelesstunnel2.tier.13", + "UXV 1,024A Wireless Energy Hatch", + 13, + 1024).getStackForm(1L)); + eM_energyWirelessTunnel3_UXV.set( + new MTEHatchWirelessMulti( + UXV4096AWirelessEnergyHatch.ID, + "hatch.energywirelesstunnel3.tier.13", + "UXV 4,096A Wireless Energy Hatch", + 13, + 4096).getStackForm(1L)); + eM_energyWirelessTunnel4_UXV.set( + new MTEHatchWirelessMulti( + UXV16384AWirelessEnergyHatch.ID, + "hatch.energywirelesstunnel4.tier.13", + "UXV 16,384A Wireless Energy Hatch", + 13, + 16384).getStackForm(1L)); + eM_energyWirelessTunnel5_UXV.set( + new MTEHatchWirelessMulti( + UXV65536AWirelessEnergyHatch.ID, + "hatch.energywirelesstunnel5.tier.13", + "UXV 65,536A Wireless Energy Hatch", + 13, + 65536).getStackForm(1L)); + eM_energyWirelessTunnel6_UXV.set( + new MTEHatchWirelessMulti( + UXV262144AWirelessEnergyHatch.ID, + "hatch.energywirelesstunnel6.tier.13", + "UXV 262,144A Wireless Energy Hatch", + 13, + 262144).getStackForm(1L)); + eM_energyWirelessTunnel7_UXV.set( + new MTEHatchWirelessMulti( + UXV1048576AWirelessEnergyHatch.ID, + "hatch.energywirelesstunnel7.tier.13", + "UXV 1,048,576A Wireless Energy Hatch", + 13, + 1048576).getStackForm(1L)); + eM_energyWirelessTunnel8_UXV.set( + new MTEHatchWirelessMulti( + MetaTileEntityIDs.WIRELESS_LASER_UXV8.ID, + "hatch.energywirelesstunnel8.tier.13", + "UXV 4,194,304A Wireless Energy Hatch", + 13, + 4194304).getStackForm(1L)); + eM_energyWirelessTunnel9_UXV.set( + new MTEHatchWirelessMulti( + MetaTileEntityIDs.WIRELESS_LASER_UXV9.ID, + "hatch.energywirelesstunnel9.tier.13", + "UXV 16,777,216A Wireless Energy Hatch", + 13, + 16777216).getStackForm(1L)); + // =================================================================================================== + // Multi AMP Laser INPUTS + // =================================================================================================== + + eM_energyTunnel1_IV.set( + new MTEHatchEnergyTunnel( + IV256AtLaserTargetHatch.ID, + "hatch.energytunnel1.tier.05", + "IV 256A/t Laser Target Hatch", + 5, + 256).getStackForm(1L)); + eM_energyTunnel2_IV + .set( + new MTEHatchEnergyTunnel( + IV1024AtLaserTargetHatch.ID, + "hatch.energytunnel2.tier.05", + "IV 1,024A/t Laser Target Hatch", + 5, + 1024).getStackForm(1L)) + .hidden(); + eM_energyTunnel3_IV + .set( + new MTEHatchEnergyTunnel( + IV4096AtLaserTargetHatch.ID, + "hatch.energytunnel3.tier.05", + "IV 4,096A/t Laser Target Hatch", + 5, + 4096).getStackForm(1L)) + .hidden(); + eM_energyTunnel4_IV + .set( + new MTEHatchEnergyTunnel( + IV16384AtLaserTargetHatch.ID, + "hatch.energytunnel4.tier.05", + "IV 16,384A/t Laser Target Hatch", + 5, + 16384).getStackForm(1L)) + .hidden(); + eM_energyTunnel5_IV + .set( + new MTEHatchEnergyTunnel( + IV65536AtLaserTargetHatch.ID, + "hatch.energytunnel5.tier.05", + "IV 65,536A/t Laser Target Hatch", + 5, + 65536).getStackForm(1L)) + .hidden(); + eM_energyTunnel6_IV + .set( + new MTEHatchEnergyTunnel( + IV262144AtLaserTargetHatch.ID, + "hatch.energytunnel6.tier.05", + "IV 262,144A/t Laser Target Hatch", + 5, + 262144).getStackForm(1L)) + .hidden(); + eM_energyTunnel7_IV + .set( + new MTEHatchEnergyTunnel( + IV1048576AtLaserTargetHatch.ID, + "hatch.energytunnel7.tier.05", + "IV 1,048,576A/t Laser Target Hatch", + 5, + 1048576).getStackForm(1L)) + .hidden(); + + eM_energyTunnel1_LuV.set( + new MTEHatchEnergyTunnel( + LuV256AtLaserTargetHatch.ID, + "hatch.energytunnel1.tier.06", + "LuV 256A/t Laser Target Hatch", + 6, + 256).getStackForm(1L)); + eM_energyTunnel2_LuV.set( + new MTEHatchEnergyTunnel( + LuV1024AtLaserTargetHatch.ID, + "hatch.energytunnel2.tier.06", + "LuV 1,024A/t Laser Target Hatch", + 6, + 1024).getStackForm(1L)); + eM_energyTunnel3_LuV + .set( + new MTEHatchEnergyTunnel( + LuV4096AtLaserTargetHatch.ID, + "hatch.energytunnel3.tier.06", + "LuV 4,096A/t Laser Target Hatch", + 6, + 4096).getStackForm(1L)) + .hidden(); + eM_energyTunnel4_LuV + .set( + new MTEHatchEnergyTunnel( + LuV16384AtLaserTargetHatch.ID, + "hatch.energytunnel4.tier.06", + "LuV 16,384A/t Laser Target Hatch", + 6, + 16384).getStackForm(1L)) + .hidden(); + eM_energyTunnel5_LuV + .set( + new MTEHatchEnergyTunnel( + LuV65536AtLaserTargetHatch.ID, + "hatch.energytunnel5.tier.06", + "LuV 65,536A/t Laser Target Hatch", + 6, + 65536).getStackForm(1L)) + .hidden(); + eM_energyTunnel6_LuV + .set( + new MTEHatchEnergyTunnel( + LuV262144AtLaserTargetHatch.ID, + "hatch.energytunnel6.tier.06", + "LuV 262,144A/t Laser Target Hatch", + 6, + 262144).getStackForm(1L)) + .hidden(); + eM_energyTunnel7_LuV + .set( + new MTEHatchEnergyTunnel( + LuV1048576AtLaserTargetHatch.ID, + "hatch.energytunnel7.tier.06", + "LuV 1,048,576A/t Laser Target Hatch", + 6, + 1048576).getStackForm(1L)) + .hidden(); + eM_energyTunnel1_ZPM.set( + new MTEHatchEnergyTunnel( + ZPM256AtLaserTargetHatch.ID, + "hatch.energytunnel1.tier.07", + "ZPM 256A/t Laser Target Hatch", + 7, + 256).getStackForm(1L)); + eM_energyTunnel2_ZPM.set( + new MTEHatchEnergyTunnel( + ZPM1024AtLaserTargetHatch.ID, + "hatch.energytunnel2.tier.07", + "ZPM 1,024A/t Laser Target Hatch", + 7, + 1024).getStackForm(1L)); + eM_energyTunnel3_ZPM.set( + new MTEHatchEnergyTunnel( + ZPM4096AtLaserTargetHatch.ID, + "hatch.energytunnel3.tier.07", + "ZPM 4,096A/t Laser Target Hatch", + 7, + 4096).getStackForm(1L)); + eM_energyTunnel4_ZPM + .set( + new MTEHatchEnergyTunnel( + ZPM16384AtLaserTargetHatch.ID, + "hatch.energytunnel4.tier.07", + "ZPM 16,384A/t Laser Target Hatch", + 7, + 16384).getStackForm(1L)) + .hidden(); + eM_energyTunnel5_ZPM + .set( + new MTEHatchEnergyTunnel( + ZPM65536AtLaserTargetHatch.ID, + "hatch.energytunnel5.tier.07", + "ZPM 65,536A/t Laser Target Hatch", + 7, + 65536).getStackForm(1L)) + .hidden(); + eM_energyTunnel6_ZPM + .set( + new MTEHatchEnergyTunnel( + ZPM262144AtLaserTargetHatch.ID, + "hatch.energytunnel6.tier.07", + "ZPM 262,144A/t Laser Target Hatch", + 7, + 262144).getStackForm(1L)) + .hidden(); + eM_energyTunnel7_ZPM + .set( + new MTEHatchEnergyTunnel( + ZPM1048576AtLaserTargetHatch.ID, + "hatch.energytunnel7.tier.07", + "ZPM 1,048,576A/t Laser Target Hatch", + 7, + 1048576).getStackForm(1L)) + .hidden(); + eM_energyTunnel1_UV.set( + new MTEHatchEnergyTunnel( + UV256AtLaserTargetHatch.ID, + "hatch.energytunnel1.tier.08", + "UV 256A/t Laser Target Hatch", + 8, + 256).getStackForm(1L)); + eM_energyTunnel2_UV.set( + new MTEHatchEnergyTunnel( + UV1024AtLaserTargetHatch.ID, + "hatch.energytunnel2.tier.08", + "UV 1,024A/t Laser Target Hatch", + 8, + 1024).getStackForm(1L)); + eM_energyTunnel3_UV.set( + new MTEHatchEnergyTunnel( + UV4096AtLaserTargetHatch.ID, + "hatch.energytunnel3.tier.08", + "UV 4,096A/t Laser Target Hatch", + 8, + 4096).getStackForm(1L)); + eM_energyTunnel4_UV.set( + new MTEHatchEnergyTunnel( + UV16384AtLaserTargetHatch.ID, + "hatch.energytunnel4.tier.08", + "UV 16,384A/t Laser Target Hatch", + 8, + 16384).getStackForm(1L)); + eM_energyTunnel5_UV + .set( + new MTEHatchEnergyTunnel( + UV65536AtLaserTargetHatch.ID, + "hatch.energytunnel5.tier.08", + "UV 65,536A/t Laser Target Hatch", + 8, + 65536).getStackForm(1L)) + .hidden(); + eM_energyTunnel6_UV + .set( + new MTEHatchEnergyTunnel( + UV262144AtLaserTargetHatch.ID, + "hatch.energytunnel6.tier.08", + "UV 262,144A/t Laser Target Hatch", + 8, + 262144).getStackForm(1L)) + .hidden(); + eM_energyTunnel7_UV + .set( + new MTEHatchEnergyTunnel( + UV1048576AtLaserTargetHatch.ID, + "hatch.energytunnel7.tier.08", + "UV 1,048,576A/t Laser Target Hatch", + 8, + 1048576).getStackForm(1L)) + .hidden(); + eM_energyTunnel1_UHV.set( + new MTEHatchEnergyTunnel( + UHV256AtLaserTargetHatch.ID, + "hatch.energytunnel1.tier.09", + "UHV 256A/t Laser Target Hatch", + 9, + 256).getStackForm(1L)); + eM_energyTunnel2_UHV.set( + new MTEHatchEnergyTunnel( + UHV1024AtLaserTargetHatch.ID, + "hatch.energytunnel2.tier.09", + "UHV 1,024A/t Laser Target Hatch", + 9, + 1024).getStackForm(1L)); + eM_energyTunnel3_UHV.set( + new MTEHatchEnergyTunnel( + UHV4096AtLaserTargetHatch.ID, + "hatch.energytunnel3.tier.09", + "UHV 4,096A/t Laser Target Hatch", + 9, + 4096).getStackForm(1L)); + eM_energyTunnel4_UHV.set( + new MTEHatchEnergyTunnel( + UHV16384AtLaserTargetHatch.ID, + "hatch.energytunnel4.tier.09", + "UHV 16,384A/t Laser Target Hatch", + 9, + 16384).getStackForm(1L)); + eM_energyTunnel5_UHV.set( + new MTEHatchEnergyTunnel( + UHV65536AtLaserTargetHatch.ID, + "hatch.energytunnel5.tier.09", + "UHV 65,536A/t Laser Target Hatch", + 9, + 65536).getStackForm(1L)); + eM_energyTunnel6_UHV + .set( + new MTEHatchEnergyTunnel( + UHV262144AtLaserTargetHatch.ID, + "hatch.energytunnel6.tier.09", + "UHV 262,144A/t Laser Target Hatch", + 9, + 262144).getStackForm(1L)) + .hidden(); + eM_energyTunnel7_UHV + .set( + new MTEHatchEnergyTunnel( + UHV1048576AtLaserTargetHatch.ID, + "hatch.energytunnel7.tier.09", + "UHV 1,048,576A/t Laser Target Hatch", + 9, + 1048576).getStackForm(1L)) + .hidden(); + + eM_energyTunnel1_UEV.set( + new MTEHatchEnergyTunnel( + UEV256AtLaserTargetHatch.ID, + "hatch.energytunnel1.tier.10", + "UEV 256A/t Laser Target Hatch", + 10, + 256).getStackForm(1L)); + eM_energyTunnel2_UEV.set( + new MTEHatchEnergyTunnel( + UEV1024AtLaserTargetHatch.ID, + "hatch.energytunnel2.tier.10", + "UEV 1,024A/t Laser Target Hatch", + 10, + 1024).getStackForm(1L)); + eM_energyTunnel3_UEV.set( + new MTEHatchEnergyTunnel( + UEV4096AtLaserTargetHatch.ID, + "hatch.energytunnel3.tier.10", + "UEV 4,096A/t Laser Target Hatch", + 10, + 4096).getStackForm(1L)); + eM_energyTunnel4_UEV.set( + new MTEHatchEnergyTunnel( + UEV16384AtLaserTargetHatch.ID, + "hatch.energytunnel4.tier.10", + "UEV 16,384A/t Laser Target Hatch", + 10, + 16384).getStackForm(1L)); + eM_energyTunnel5_UEV.set( + new MTEHatchEnergyTunnel( + UEV65536AtLaserTargetHatch.ID, + "hatch.energytunnel5.tier.10", + "UEV 65,536A/t Laser Target Hatch", + 10, + 65536).getStackForm(1L)); + eM_energyTunnel6_UEV.set( + new MTEHatchEnergyTunnel( + UEV262144AtLaserTargetHatch.ID, + "hatch.energytunnel6.tier.10", + "UEV 262,144A/t Laser Target Hatch", + 10, + 262144).getStackForm(1L)); + eM_energyTunnel7_UEV + .set( + new MTEHatchEnergyTunnel( + UEV1048576AtLaserTargetHatch.ID, + "hatch.energytunnel7.tier.10", + "UEV 1,048,576A/t Laser Target Hatch", + 10, + 1048576).getStackForm(1L)) + .hidden(); + eM_energyTunnel1_UIV.set( + new MTEHatchEnergyTunnel( + UIV256AtLaserTargetHatch.ID, + "hatch.energytunnel1.tier.11", + "UIV 256A/t Laser Target Hatch", + 11, + 256).getStackForm(1L)); + eM_energyTunnel2_UIV.set( + new MTEHatchEnergyTunnel( + UIV1024AtLaserTargetHatch.ID, + "hatch.energytunnel2.tier.11", + "UIV 1,024A/t Laser Target Hatch", + 11, + 1024).getStackForm(1L)); + eM_energyTunnel3_UIV.set( + new MTEHatchEnergyTunnel( + UIV4096AtLaserTargetHatch.ID, + "hatch.energytunnel3.tier.11", + "UIV 4,096A/t Laser Target Hatch", + 11, + 4096).getStackForm(1L)); + eM_energyTunnel4_UIV.set( + new MTEHatchEnergyTunnel( + UIV16384AtLaserTargetHatch.ID, + "hatch.energytunnel4.tier.11", + "UIV 16,384A/t Laser Target Hatch", + 11, + 16384).getStackForm(1L)); + eM_energyTunnel5_UIV.set( + new MTEHatchEnergyTunnel( + UIV65536AtLaserTargetHatch.ID, + "hatch.energytunnel5.tier.11", + "UIV 65,536A/t Laser Target Hatch", + 11, + 65536).getStackForm(1L)); + eM_energyTunnel6_UIV.set( + new MTEHatchEnergyTunnel( + UIV262144AtLaserTargetHatch.ID, + "hatch.energytunnel6.tier.11", + "UIV 262,144A/t Laser Target Hatch", + 11, + 262144).getStackForm(1L)); + eM_energyTunnel7_UIV.set( + new MTEHatchEnergyTunnel( + UIV1048576AtLaserTargetHatch.ID, + "hatch.energytunnel7.tier.11", + "UIV 1,048,576A/t Laser Target Hatch", + 11, + 1048576).getStackForm(1L)); + eM_energyTunnel1_UMV.set( + new MTEHatchEnergyTunnel( + UMV256AtLaserTargetHatch.ID, + "hatch.energytunnel1.tier.12", + "UMV 256A/t Laser Target Hatch", + 12, + 256).getStackForm(1L)); + eM_energyTunnel2_UMV.set( + new MTEHatchEnergyTunnel( + UMV1024AtLaserTargetHatch.ID, + "hatch.energytunnel2.tier.12", + "UMV 1,024A/t Laser Target Hatch", + 12, + 1024).getStackForm(1L)); + eM_energyTunnel3_UMV.set( + new MTEHatchEnergyTunnel( + UMV4096AtLaserTargetHatch.ID, + "hatch.energytunnel3.tier.12", + "UMV 4,096A/t Laser Target Hatch", + 12, + 4096).getStackForm(1L)); + eM_energyTunnel4_UMV.set( + new MTEHatchEnergyTunnel( + UMV16384AtLaserTargetHatch.ID, + "hatch.energytunnel4.tier.12", + "UMV 16,384A/t Laser Target Hatch", + 12, + 16384).getStackForm(1L)); + eM_energyTunnel5_UMV.set( + new MTEHatchEnergyTunnel( + UMV65536AtLaserTargetHatch.ID, + "hatch.energytunnel5.tier.12", + "UMV 65,536A/t Laser Target Hatch", + 12, + 65536).getStackForm(1L)); + eM_energyTunnel6_UMV.set( + new MTEHatchEnergyTunnel( + UMV262144AtLaserTargetHatch.ID, + "hatch.energytunnel6.tier.12", + "UMV 262,144A/t Laser Target Hatch", + 12, + 262144).getStackForm(1L)); + eM_energyTunnel7_UMV.set( + new MTEHatchEnergyTunnel( + UMV1048576AtLaserTargetHatch.ID, + "hatch.energytunnel7.tier.12", + "UMV 1,048,576A/t Laser Target Hatch", + 12, + 1048576).getStackForm(1L)); + eM_energyTunnel8_UMV.set( + new MTEHatchEnergyTunnel( + MetaTileEntityIDs.LASER_TARGET_UMV8.ID, + "hatch.energytunnel8.tier.12", + "UMV 4,194,304A/t Laser Target Hatch", + 12, + 4194304).getStackForm(1L)); + eM_energyTunnel1_UXV.set( + new MTEHatchEnergyTunnel( + UXV256AtLaserTargetHatch.ID, + "hatch.energytunnel1.tier.13", + "UXV 256A/t Laser Target Hatch", + 13, + 256).getStackForm(1L)); + eM_energyTunnel2_UXV.set( + new MTEHatchEnergyTunnel( + UXV1024AtLaserTargetHatch.ID, + "hatch.energytunnel2.tier.13", + "UXV 1,024A/t Laser Target Hatch", + 13, + 1024).getStackForm(1L)); + eM_energyTunnel3_UXV.set( + new MTEHatchEnergyTunnel( + UXV4096AtLaserTargetHatch.ID, + "hatch.energytunnel3.tier.13", + "UXV 4,096A/t Laser Target Hatch", + 13, + 4096).getStackForm(1L)); + eM_energyTunnel4_UXV.set( + new MTEHatchEnergyTunnel( + UXV16384AtLaserTargetHatch.ID, + "hatch.energytunnel4.tier.13", + "UXV 16,384A/t Laser Target Hatch", + 13, + 16384).getStackForm(1L)); + eM_energyTunnel5_UXV.set( + new MTEHatchEnergyTunnel( + UXV65536AtLaserTargetHatch.ID, + "hatch.energytunnel5.tier.13", + "UXV 65,536A/t Laser Target Hatch", + 13, + 65536).getStackForm(1L)); + eM_energyTunnel6_UXV.set( + new MTEHatchEnergyTunnel( + UXV262144AtLaserTargetHatch.ID, + "hatch.energytunnel6.tier.13", + "UXV 262,144A/t Laser Target Hatch", + 13, + 262144).getStackForm(1L)); + eM_energyTunnel7_UXV.set( + new MTEHatchEnergyTunnel( + UXV1048576AtLaserTargetHatch.ID, + "hatch.energytunnel7.tier.13", + "UXV 1,048,576A/t Laser Target Hatch", + 13, + 1048576).getStackForm(1L)); + eM_energyTunnel8_UXV.set( + new MTEHatchEnergyTunnel( + MetaTileEntityIDs.LASER_TARGET_UXV8.ID, + "hatch.energytunnel8.tier.13", + "UXV 4,194,304A/t Laser Target Hatch", + 13, + 4194304).getStackForm(1L)); + eM_energyTunnel9_UXV.set( + new MTEHatchEnergyTunnel( + MetaTileEntityIDs.LASER_TARGET_UXV9.ID, + "hatch.energytunnel9.tier.13", + "UXV 16,777,216A/t Laser Target Hatch", + 13, + 16777216).getStackForm(1L)); + eM_energyTunnel9001.set( + new MTEHatchEnergyTunnel( + LegendaryLaserTargetHatch.ID, + "hatch.energytunnel.tier.14", + "Legendary Laser Target Hatch", + 13, + (int) V[13]).getStackForm(1L)); + + // =================================================================================================== + // Multi AMP Power OUTPUTS + // =================================================================================================== + eM_dynamoMulti4_EV.set( + new MTEHatchDynamoMulti(EV4ADynamoHatch.ID, "hatch.dynamomulti04.tier.04", "EV 4A Dynamo Hatch", 4, 4) + .getStackForm(1L)); + eM_dynamoMulti16_EV.set( + new MTEHatchDynamoMulti(EV16ADynamoHatch.ID, "hatch.dynamomulti16.tier.04", "EV 16A Dynamo Hatch", 4, 16) + .getStackForm(1L)); + eM_dynamoMulti64_EV.set( + new MTEHatchDynamoMulti(EV64ADynamoHatch.ID, "hatch.dynamomulti64.tier.04", "EV 64A Dynamo Hatch", 4, 64) + .getStackForm(1L)); + eM_dynamoMulti4_IV.set( + new MTEHatchDynamoMulti(IV4ADynamoHatch.ID, "hatch.dynamomulti04.tier.05", "IV 4A Dynamo Hatch", 5, 4) + .getStackForm(1L)); + eM_dynamoMulti16_IV.set( + new MTEHatchDynamoMulti(IV16ADynamoHatch.ID, "hatch.dynamomulti16.tier.05", "IV 16A Dynamo Hatch", 5, 16) + .getStackForm(1L)); + eM_dynamoMulti64_IV.set( + new MTEHatchDynamoMulti(IV64ADynamoHatch.ID, "hatch.dynamomulti64.tier.05", "IV 64A Dynamo Hatch", 5, 64) + .getStackForm(1L)); + eM_dynamoMulti4_LuV.set( + new MTEHatchDynamoMulti(LuV4ADynamoHatch.ID, "hatch.dynamomulti04.tier.06", "LuV 4A Dynamo Hatch", 6, 4) + .getStackForm(1L)); + eM_dynamoMulti16_LuV.set( + new MTEHatchDynamoMulti(LuV16ADynamoHatch.ID, "hatch.dynamomulti16.tier.06", "LuV 16A Dynamo Hatch", 6, 16) + .getStackForm(1L)); + eM_dynamoMulti64_LuV.set( + new MTEHatchDynamoMulti(LuV64ADynamoHatch.ID, "hatch.dynamomulti64.tier.06", "LuV 64A Dynamo Hatch", 6, 64) + .getStackForm(1L)); + eM_dynamoMulti4_ZPM.set( + new MTEHatchDynamoMulti(ZPM4ADynamoHatch.ID, "hatch.dynamomulti04.tier.07", "ZPM 4A Dynamo Hatch", 7, 4) + .getStackForm(1L)); + eM_dynamoMulti16_ZPM.set( + new MTEHatchDynamoMulti(ZPM16ADynamoHatch.ID, "hatch.dynamomulti16.tier.07", "ZPM 16A Dynamo Hatch", 7, 16) + .getStackForm(1L)); + eM_dynamoMulti64_ZPM.set( + new MTEHatchDynamoMulti(ZPM64ADynamoHatch.ID, "hatch.dynamomulti64.tier.07", "ZPM 64A Dynamo Hatch", 7, 64) + .getStackForm(1L)); + eM_dynamoMulti4_UV.set( + new MTEHatchDynamoMulti(UV4ADynamoHatch.ID, "hatch.dynamomulti04.tier.08", "UV 4A Dynamo Hatch", 8, 4) + .getStackForm(1L)); + eM_dynamoMulti16_UV.set( + new MTEHatchDynamoMulti(UV16ADynamoHatch.ID, "hatch.dynamomulti16.tier.08", "UV 16A Dynamo Hatch", 8, 16) + .getStackForm(1L)); + eM_dynamoMulti64_UV.set( + new MTEHatchDynamoMulti(UV64ADynamoHatch.ID, "hatch.dynamomulti64.tier.08", "UV 64A Dynamo Hatch", 8, 64) + .getStackForm(1L)); + eM_dynamoMulti4_UHV.set( + new MTEHatchDynamoMulti(UHV4ADynamoHatch.ID, "hatch.dynamomulti04.tier.09", "UHV 4A Dynamo Hatch", 9, 4) + .getStackForm(1L)); + eM_dynamoMulti16_UHV.set( + new MTEHatchDynamoMulti(UHV16ADynamoHatch.ID, "hatch.dynamomulti16.tier.09", "UHV 16A Dynamo Hatch", 9, 16) + .getStackForm(1L)); + eM_dynamoMulti64_UHV.set( + new MTEHatchDynamoMulti(UHV64ADynamoHatch.ID, "hatch.dynamomulti64.tier.09", "UHV 64A Dynamo Hatch", 9, 64) + .getStackForm(1L)); + eM_dynamoMulti4_UEV.set( + new MTEHatchDynamoMulti(UEV4ADynamoHatch.ID, "hatch.dynamomulti04.tier.10", "UEV 4A Dynamo Hatch", 10, 4) + .getStackForm(1L)); + eM_dynamoMulti16_UEV.set( + new MTEHatchDynamoMulti(UEV16ADynamoHatch.ID, "hatch.dynamomulti16.tier.10", "UEV 16A Dynamo Hatch", 10, 16) + .getStackForm(1L)); + eM_dynamoMulti64_UEV.set( + new MTEHatchDynamoMulti(UEV64ADynamoHatch.ID, "hatch.dynamomulti64.tier.10", "UEV 64A Dynamo Hatch", 10, 64) + .getStackForm(1L)); + eM_dynamoMulti4_UIV.set( + new MTEHatchDynamoMulti(UIV4ADynamoHatch.ID, "hatch.dynamomulti04.tier.11", "UIV 4A Dynamo Hatch", 11, 4) + .getStackForm(1L)); + eM_dynamoMulti16_UIV.set( + new MTEHatchDynamoMulti(UIV16ADynamoHatch.ID, "hatch.dynamomulti16.tier.11", "UIV 16A Dynamo Hatch", 11, 16) + .getStackForm(1L)); + eM_dynamoMulti64_UIV.set( + new MTEHatchDynamoMulti(UIV64ADynamoHatch.ID, "hatch.dynamomulti64.tier.11", "UIV 64A Dynamo Hatch", 11, 64) + .getStackForm(1L)); + eM_dynamoMulti4_UMV.set( + new MTEHatchDynamoMulti(UMV4ADynamoHatch.ID, "hatch.dynamomulti04.tier.12", "UMV 4A Dynamo Hatch", 12, 4) + .getStackForm(1L)); + eM_dynamoMulti16_UMV.set( + new MTEHatchDynamoMulti(UMV16ADynamoHatch.ID, "hatch.dynamomulti16.tier.12", "UMV 16A Dynamo Hatch", 12, 16) + .getStackForm(1L)); + eM_dynamoMulti64_UMV.set( + new MTEHatchDynamoMulti(UMV64ADynamoHatch.ID, "hatch.dynamomulti64.tier.12", "UMV 64A Dynamo Hatch", 12, 64) + .getStackForm(1L)); + eM_dynamoMulti4_UXV.set( + new MTEHatchDynamoMulti(UXV4ADynamoHatch.ID, "hatch.dynamomulti04.tier.13", "UXV 4A Dynamo Hatch", 13, 4) + .getStackForm(1L)); + eM_dynamoMulti16_UXV.set( + new MTEHatchDynamoMulti(UXV16ADynamoHatch.ID, "hatch.dynamomulti16.tier.13", "UXV 16A Dynamo Hatch", 13, 16) + .getStackForm(1L)); + eM_dynamoMulti64_UXV.set( + new MTEHatchDynamoMulti(UXV64ADynamoHatch.ID, "hatch.dynamomulti64.tier.13", "UXV 64A Dynamo Hatch", 13, 64) + .getStackForm(1L)); + + // =================================================================================================== + // Multi AMP Laser OUTPUTS + // =================================================================================================== + + eM_dynamoTunnel1_IV.set( + new MTEHatchDynamoTunnel( + IV256AtLaserSourceHatch.ID, + "hatch.dynamotunnel1.tier.05", + "IV 256A/t Laser Source Hatch", + 5, + 256).getStackForm(1L)); + eM_dynamoTunnel2_IV + .set( + new MTEHatchDynamoTunnel( + IV1024AtLaserSourceHatch.ID, + "hatch.dynamotunnel2.tier.05", + "IV 1,024A/t Laser Source Hatch", + 5, + 1024).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel3_IV + .set( + new MTEHatchDynamoTunnel( + IV4096AtLaserSourceHatch.ID, + "hatch.dynamotunnel3.tier.05", + "IV 4,096A/t Laser Source Hatch", + 5, + 4096).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel4_IV + .set( + new MTEHatchDynamoTunnel( + IV16384AtLaserSourceHatch.ID, + "hatch.dynamotunnel4.tier.05", + "IV 16,384A/t Laser Source Hatch", + 5, + 16384).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel5_IV + .set( + new MTEHatchDynamoTunnel( + IV65536AtLaserSourceHatch.ID, + "hatch.dynamotunnel5.tier.05", + "IV 65,536A/t Laser Source Hatch", + 5, + 65536).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel6_IV + .set( + new MTEHatchDynamoTunnel( + IV262144AtLaserSourceHatch.ID, + "hatch.dynamotunnel6.tier.05", + "IV 262,144A/t Laser Source Hatch", + 5, + 262144).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel7_IV + .set( + new MTEHatchDynamoTunnel( + IV1048576AtLaserSourceHatch.ID, + "hatch.dynamotunnel7.tier.05", + "IV 1,048,576A/t Laser Source Hatch", + 5, + 1048576).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel1_LuV.set( + new MTEHatchDynamoTunnel( + LuV256AtLaserSourceHatch.ID, + "hatch.dynamotunnel1.tier.06", + "LuV 256A/t Laser Source Hatch", + 6, + 256).getStackForm(1L)); + eM_dynamoTunnel2_LuV.set( + new MTEHatchDynamoTunnel( + LuV1024AtLaserSourceHatch.ID, + "hatch.dynamotunnel2.tier.06", + "LuV 1,024A/t Laser Source Hatch", + 6, + 1024).getStackForm(1L)); + eM_dynamoTunnel3_LuV + .set( + new MTEHatchDynamoTunnel( + LuV4096AtLaserSourceHatch.ID, + "hatch.dynamotunnel3.tier.06", + "LuV 4,096A/t Laser Source Hatch", + 6, + 4096).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel4_LuV + .set( + new MTEHatchDynamoTunnel( + LuV16384AtLaserSourceHatch.ID, + "hatch.dynamotunnel4.tier.06", + "LuV 16,384A/t Laser Source Hatch", + 6, + 16384).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel5_LuV + .set( + new MTEHatchDynamoTunnel( + LuV65536AtLaserSourceHatch.ID, + "hatch.dynamotunnel5.tier.06", + "LuV 65,536A/t Laser Source Hatch", + 6, + 65536).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel6_LuV + .set( + new MTEHatchDynamoTunnel( + LuV262144AtLaserSourceHatch.ID, + "hatch.dynamotunnel6.tier.06", + "LuV 262,144A/t Laser Source Hatch", + 6, + 262144).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel7_LuV + .set( + new MTEHatchDynamoTunnel( + LuV1048576AtLaserSourceHatch.ID, + "hatch.dynamotunnel7.tier.06", + "LuV 1,048,576A/t Laser Source Hatch", + 6, + 1048576).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel1_ZPM.set( + new MTEHatchDynamoTunnel( + ZPM256AtLaserSourceHatch.ID, + "hatch.dynamotunnel1.tier.07", + "ZPM 256A/t Laser Source Hatch", + 7, + 256).getStackForm(1L)); + eM_dynamoTunnel2_ZPM.set( + new MTEHatchDynamoTunnel( + ZPM1024AtLaserSourceHatch.ID, + "hatch.dynamotunnel2.tier.07", + "ZPM 1,024A/t Laser Source Hatch", + 7, + 1024).getStackForm(1L)); + eM_dynamoTunnel3_ZPM.set( + new MTEHatchDynamoTunnel( + ZPM4096AtLaserSourceHatch.ID, + "hatch.dynamotunnel3.tier.07", + "ZPM 4,096A/t Laser Source Hatch", + 7, + 4096).getStackForm(1L)); + eM_dynamoTunnel4_ZPM + .set( + new MTEHatchDynamoTunnel( + ZPM16384AtLaserSourceHatch.ID, + "hatch.dynamotunnel4.tier.07", + "ZPM 16,384A/t Laser Source Hatch", + 7, + 16384).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel5_ZPM + .set( + new MTEHatchDynamoTunnel( + ZPM65536AtLaserSourceHatch.ID, + "hatch.dynamotunnel5.tier.07", + "ZPM 65,536A/t Laser Source Hatch", + 7, + 65536).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel6_ZPM + .set( + new MTEHatchDynamoTunnel( + ZPM262144AtLaserSourceHatch.ID, + "hatch.dynamotunnel6.tier.07", + "ZPM 262,144A/t Laser Source Hatch", + 7, + 262144).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel7_ZPM + .set( + new MTEHatchDynamoTunnel( + ZPM1048576AtLaserSourceHatch.ID, + "hatch.dynamotunnel7.tier.07", + "ZPM 1,048,576A/t Laser Source Hatch", + 7, + 1048576).getStackForm(1L)) + .hidden(); + + eM_dynamoTunnel1_UV.set( + new MTEHatchDynamoTunnel( + UV256AtLaserSourceHatch.ID, + "hatch.dynamotunnel1.tier.08", + "UV 256A/t Laser Source Hatch", + 8, + 256).getStackForm(1L)); + eM_dynamoTunnel2_UV.set( + new MTEHatchDynamoTunnel( + UV1024AtLaserSourceHatch.ID, + "hatch.dynamotunnel2.tier.08", + "UV 1,024A/t Laser Source Hatch", + 8, + 1024).getStackForm(1L)); + eM_dynamoTunnel3_UV.set( + new MTEHatchDynamoTunnel( + UV4096AtLaserSourceHatch.ID, + "hatch.dynamotunnel3.tier.08", + "UV 4,096A/t Laser Source Hatch", + 8, + 4096).getStackForm(1L)); + eM_dynamoTunnel4_UV.set( + new MTEHatchDynamoTunnel( + UV16384AtLaserSourceHatch.ID, + "hatch.dynamotunnel4.tier.08", + "UV 16,384A/t Laser Source Hatch", + 8, + 16384).getStackForm(1L)); + eM_dynamoTunnel5_UV + .set( + new MTEHatchDynamoTunnel( + UV65536AtLaserSourceHatch.ID, + "hatch.dynamotunnel5.tier.08", + "UV 65,536A/t Laser Source Hatch", + 8, + 65536).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel6_UV + .set( + new MTEHatchDynamoTunnel( + UV262144AtLaserSourceHatch.ID, + "hatch.dynamotunnel6.tier.08", + "UV 262,144A/t Laser Source Hatch", + 8, + 262144).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel7_UV + .set( + new MTEHatchDynamoTunnel( + UV1048576AtLaserSourceHatch.ID, + "hatch.dynamotunnel7.tier.08", + "UV 1,048,576A/t Laser Source Hatch", + 8, + 1048576).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel1_UHV.set( + new MTEHatchDynamoTunnel( + UHV256AtLaserSourceHatch.ID, + "hatch.dynamotunnel1.tier.09", + "UHV 256A/t Laser Source Hatch", + 9, + 256).getStackForm(1L)); + eM_dynamoTunnel2_UHV.set( + new MTEHatchDynamoTunnel( + UHV1024AtLaserSourceHatch.ID, + "hatch.dynamotunnel2.tier.09", + "UHV 1,024A/t Laser Source Hatch", + 9, + 1024).getStackForm(1L)); + eM_dynamoTunnel3_UHV.set( + new MTEHatchDynamoTunnel( + UHV4096AtLaserSourceHatch.ID, + "hatch.dynamotunnel3.tier.09", + "UHV 4,096A/t Laser Source Hatch", + 9, + 4096).getStackForm(1L)); + eM_dynamoTunnel4_UHV.set( + new MTEHatchDynamoTunnel( + UHV16384AtLaserSourceHatch.ID, + "hatch.dynamotunnel4.tier.09", + "UHV 16,384A/t Laser Source Hatch", + 9, + 16384).getStackForm(1L)); + eM_dynamoTunnel5_UHV.set( + new MTEHatchDynamoTunnel( + UHV65536AtLaserSourceHatch.ID, + "hatch.dynamotunnel5.tier.09", + "UHV 65,536A/t Laser Source Hatch", + 9, + 65536).getStackForm(1L)); + eM_dynamoTunnel6_UHV + .set( + new MTEHatchDynamoTunnel( + UHV262144AtLaserSourceHatch.ID, + "hatch.dynamotunnel6.tier.09", + "UHV 262,144A/t Laser Source Hatch", + 9, + 262144).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel7_UHV + .set( + new MTEHatchDynamoTunnel( + UHV1048576AtLaserSourceHatch.ID, + "hatch.dynamotunnel7.tier.09", + "UHV 1,048,576A/t Laser Source Hatch", + 9, + 1048576).getStackForm(1L)) + .hidden(); + eM_dynamoTunnel1_UEV.set( + new MTEHatchDynamoTunnel( + UEV256AtLaserSourceHatch.ID, + "hatch.dynamotunnel1.tier.10", + "UEV 256A/t Laser Source Hatch", + 10, + 256).getStackForm(1L)); + eM_dynamoTunnel2_UEV.set( + new MTEHatchDynamoTunnel( + UEV1024AtLaserSourceHatch.ID, + "hatch.dynamotunnel2.tier.10", + "UEV 1,024A/t Laser Source Hatch", + 10, + 1024).getStackForm(1L)); + eM_dynamoTunnel3_UEV.set( + new MTEHatchDynamoTunnel( + UEV4096AtLaserSourceHatch.ID, + "hatch.dynamotunnel3.tier.10", + "UEV 4,096A/t Laser Source Hatch", + 10, + 4096).getStackForm(1L)); + eM_dynamoTunnel4_UEV.set( + new MTEHatchDynamoTunnel( + UEV16384AtLaserSourceHatch.ID, + "hatch.dynamotunnel4.tier.10", + "UEV 16,384A/t Laser Source Hatch", + 10, + 16384).getStackForm(1L)); + eM_dynamoTunnel5_UEV.set( + new MTEHatchDynamoTunnel( + UEV65536AtLaserSourceHatch.ID, + "hatch.dynamotunnel5.tier.10", + "UEV 65,536A/t Laser Source Hatch", + 10, + 65536).getStackForm(1L)); + eM_dynamoTunnel6_UEV.set( + new MTEHatchDynamoTunnel( + UEV262144AtLaserSourceHatch.ID, + "hatch.dynamotunnel6.tier.10", + "UEV 262,144A/t Laser Source Hatch", + 10, + 262144).getStackForm(1L)); + eM_dynamoTunnel7_UEV + .set( + new MTEHatchDynamoTunnel( + UEV1048576AtLaserSourceHatch.ID, + "hatch.dynamotunnel7.tier.10", + "UEV 1,048,576A/t Laser Source Hatch", + 10, + 1048576).getStackForm(1L)) + .hidden(); + + eM_dynamoTunnel1_UIV.set( + new MTEHatchDynamoTunnel( + UIV256AtLaserSourceHatch.ID, + "hatch.dynamotunnel1.tier.11", + "UIV 256A/t Laser Source Hatch", + 11, + 256).getStackForm(1L)); + eM_dynamoTunnel2_UIV.set( + new MTEHatchDynamoTunnel( + UIV1024AtLaserSourceHatch.ID, + "hatch.dynamotunnel2.tier.11", + "UIV 1,024A/t Laser Source Hatch", + 11, + 1024).getStackForm(1L)); + eM_dynamoTunnel3_UIV.set( + new MTEHatchDynamoTunnel( + UIV4096AtLaserSourceHatch.ID, + "hatch.dynamotunnel3.tier.11", + "UIV 4,096A/t Laser Source Hatch", + 11, + 4096).getStackForm(1L)); + eM_dynamoTunnel4_UIV.set( + new MTEHatchDynamoTunnel( + UIV16384AtLaserSourceHatch.ID, + "hatch.dynamotunnel4.tier.11", + "UIV 16,384A/t Laser Source Hatch", + 11, + 16384).getStackForm(1L)); + eM_dynamoTunnel5_UIV.set( + new MTEHatchDynamoTunnel( + UIV65536AtLaserSourceHatch.ID, + "hatch.dynamotunnel5.tier.11", + "UIV 65,536A/t Laser Source Hatch", + 11, + 65536).getStackForm(1L)); + eM_dynamoTunnel6_UIV.set( + new MTEHatchDynamoTunnel( + UIV262144AtLaserSourceHatch.ID, + "hatch.dynamotunnel6.tier.11", + "UIV 262,144A/t Laser Source Hatch", + 11, + 262144).getStackForm(1L)); + eM_dynamoTunnel7_UIV.set( + new MTEHatchDynamoTunnel( + UIV1048576AtLaserSourceHatch.ID, + "hatch.dynamotunnel7.tier.11", + "UIV 1,048,576A/t Laser Source Hatch", + 11, + 1048576).getStackForm(1L)); + + eM_dynamoTunnel1_UMV.set( + new MTEHatchDynamoTunnel( + UMV256AtLaserSourceHatch.ID, + "hatch.dynamotunnel1.tier.12", + "UMV 256A/t Laser Source Hatch", + 12, + 256).getStackForm(1L)); + eM_dynamoTunnel2_UMV.set( + new MTEHatchDynamoTunnel( + UMV1024AtLaserSourceHatch.ID, + "hatch.dynamotunnel2.tier.12", + "UMV 1,024A/t Laser Source Hatch", + 12, + 1024).getStackForm(1L)); + eM_dynamoTunnel3_UMV.set( + new MTEHatchDynamoTunnel( + UMV4096AtLaserSourceHatch.ID, + "hatch.dynamotunnel3.tier.12", + "UMV 4,096A/t Laser Source Hatch", + 12, + 4096).getStackForm(1L)); + eM_dynamoTunnel4_UMV.set( + new MTEHatchDynamoTunnel( + UMV16384AtLaserSourceHatch.ID, + "hatch.dynamotunnel4.tier.12", + "UMV 16,384A/t Laser Source Hatch", + 12, + 16384).getStackForm(1L)); + eM_dynamoTunnel5_UMV.set( + new MTEHatchDynamoTunnel( + UMV65536AtLaserSourceHatch.ID, + "hatch.dynamotunnel5.tier.12", + "UMV 65,536A/t Laser Source Hatch", + 12, + 65536).getStackForm(1L)); + eM_dynamoTunnel6_UMV.set( + new MTEHatchDynamoTunnel( + UMV262144AtLaserSourceHatch.ID, + "hatch.dynamotunnel6.tier.12", + "UMV 262,144A/t Laser Source Hatch", + 12, + 262144).getStackForm(1L)); + eM_dynamoTunnel7_UMV.set( + new MTEHatchDynamoTunnel( + UMV1048576AtLaserSourceHatch.ID, + "hatch.dynamotunnel7.tier.12", + "UMV 1,048,576A/t Laser Source Hatch", + 12, + 1048576).getStackForm(1L)); + eM_dynamoTunnel8_UMV.set( + new MTEHatchDynamoTunnel( + MetaTileEntityIDs.LASER_SOURCE_UMV8.ID, + "hatch.dynamotunnel8.tier.12", + "UMV 4,194,304A/t Laser Source Hatch", + 12, + 4194304).getStackForm(1L)); + + eM_dynamoTunnel1_UXV.set( + new MTEHatchDynamoTunnel( + UXV256AtLaserSourceHatch.ID, + "hatch.dynamotunnel1.tier.13", + "UXV 256A/t Laser Source Hatch", + 13, + 256).getStackForm(1L)); + eM_dynamoTunnel2_UXV.set( + new MTEHatchDynamoTunnel( + UXV1024AtLaserSourceHatch.ID, + "hatch.dynamotunnel2.tier.13", + "UXV 1,024A/t Laser Source Hatch", + 13, + 1024).getStackForm(1L)); + eM_dynamoTunnel3_UXV.set( + new MTEHatchDynamoTunnel( + UXV4096AtLaserSourceHatch.ID, + "hatch.dynamotunnel3.tier.13", + "UXV 4,096A/t Laser Source Hatch", + 13, + 4096).getStackForm(1L)); + eM_dynamoTunnel4_UXV.set( + new MTEHatchDynamoTunnel( + UXV16384AtLaserSourceHatch.ID, + "hatch.dynamotunnel4.tier.13", + "UXV 16,384A/t Laser Source Hatch", + 13, + 16384).getStackForm(1L)); + eM_dynamoTunnel5_UXV.set( + new MTEHatchDynamoTunnel( + UXV65536AtLaserSourceHatch.ID, + "hatch.dynamotunnel5.tier.13", + "UXV 65,536A/t Laser Source Hatch", + 13, + 65536).getStackForm(1L)); + eM_dynamoTunnel6_UXV.set( + new MTEHatchDynamoTunnel( + UXV262144AtLaserSourceHatch.ID, + "hatch.dynamotunnel6.tier.13", + "UXV 262,144A/t Laser Source Hatch", + 13, + 262144).getStackForm(1L)); + eM_dynamoTunnel7_UXV.set( + new MTEHatchDynamoTunnel( + UXV1048576AtLaserSourceHatch.ID, + "hatch.dynamotunnel7.tier.13", + "UXV 1,048,576A/t Laser Source Hatch", + 13, + 1048576).getStackForm(1L)); + eM_dynamoTunnel8_UXV.set( + new MTEHatchDynamoTunnel( + MetaTileEntityIDs.LASER_SOURCE_UXV8.ID, + "hatch.dynamotunnel8.tier.13", + "UXV 4,194,304A/t Laser Source Hatch", + 13, + 4194304).getStackForm(1L)); + eM_dynamoTunnel9_UXV.set( + new MTEHatchDynamoTunnel( + MetaTileEntityIDs.LASER_SOURCE_UXV9.ID, + "hatch.dynamotunnel9.tier.13", + "UXV 16,777,216A/t Laser Source Hatch", + 13, + 16777216).getStackForm(1L)); + eM_dynamoTunnel9001.set( + new MTEHatchDynamoTunnel( + LegendaryLaserSourceHatch.ID, + "hatch.dynamotunnel.tier.14", + "Legendary Laser Source Hatch", + 13, + (int) V[13]).getStackForm(1L)); + + // =================================================================================================== + // MULTIBLOCKS + // =================================================================================================== + + Machine_Multi_Transformer.set( + new MTEActiveTransformer(ActiveTransformer.ID, "multimachine.em.transformer", "Active Transformer") + .getStackForm(1L)); + Machine_Multi_Microwave.set( + new MTEMicrowave(MicrowaveGrinder.ID, "multimachine.tm.microwave", "Microwave Grinder").getStackForm(1L)); + Machine_Multi_TeslaCoil + .set(new MTETeslaTower(TeslaTower.ID, "multimachine.tm.teslaCoil", "Tesla Tower").getStackForm(1L)); + Machine_Multi_Switch.set( + new MTENetworkSwitch(NetworkSwitchWithQoS.ID, "multimachine.em.switch", "Network Switch With QoS") + .getStackForm(1L)); + Machine_Multi_Computer.set( + new MTEQuantumComputer(QuantumComputer.ID, "multimachine.em.computer", "Quantum Computer") + .getStackForm(1L)); + Machine_Multi_DataBank + .set(new MTEDataBank(DataBank.ID, "multimachine.em.databank", "Data Bank").getStackForm(1L)); + Machine_Multi_Research.set( + new MTEResearchStation(Researchstation.ID, "multimachine.em.research", "Research station") + .getStackForm(1L)); + Machine_Multi_Infuser + .set(new MTEEnergyInfuser(EnergyInfuser.ID, "multimachine.em.infuser", "Energy Infuser").getStackForm(1)); + Machine_Multi_EyeOfHarmony.set( + new MTEEyeOfHarmony(EyeofHarmony.ID, "multimachine.em.eye_of_harmony", "Eye of Harmony").getStackForm(1L)); + if (tectech.TecTech.configTecTech.ENABLE_GOD_FORGE) { + Machine_Multi_ForgeOfGods.set( + new MTEForgeOfGods(ForgeoftheGods.ID, "multimachine.em.forge_of_gods", "Forge of the Gods") + .getStackForm(1L)); + addItemTooltip(Machine_Multi_ForgeOfGods.get(1), GTValues.AuthorCloud); + Machine_Multi_SmeltingModule.set( + new MTESmeltingModule( + HelioflarePowerForge.ID, + "multimachine.em.smelting_module", + "Helioflare Power Forge").getStackForm(1L)); + addItemTooltip(Machine_Multi_SmeltingModule.get(1), GTValues.AuthorCloud); + Machine_Multi_MoltenModule.set( + new MTEMoltenModule(HeliofluxMeltingCore.ID, "multimachine.em.molten_module", "Helioflux Melting Core") + .getStackForm(1L)); + addItemTooltip(Machine_Multi_MoltenModule.get(1), GTValues.AuthorCloud); + Machine_Multi_PlasmaModule.set( + new MTEPlasmaModule( + HeliothermalPlasmaFabricator.ID, + "multimachine.em.plasma_module", + "Heliothermal Plasma Fabricator").getStackForm(1L)); + addItemTooltip(Machine_Multi_PlasmaModule.get(1), GTValues.AuthorCloud); + Machine_Multi_QuarkGluonPlasmaModule.set( + new MTEExoticModule(HeliofusionExoticizer.ID, "multimachine.em.exotic_module", "Heliofusion Exoticizer") + .getStackForm(1L)); + addItemTooltip(Machine_Multi_QuarkGluonPlasmaModule.get(1), GTValues.AuthorCloud); + } + + // =================================================================================================== + // Hatches + // =================================================================================================== + + Parametrizer_Hatch + .set(new MTEHatchParam(Parametrizer.ID, "hatch.param.tier.05", "Parametrizer", 5).getStackForm(1L)); // TODO + // refactor + // aName + // to + // hatch.param.tier.04 + // and + // aTier + // to + // 4, + // check + // recipe + // for + // NH + ParametrizerX_Hatch + .set(new MTEHatchParam(ParametrizerX.ID, "hatch.param.tier.07", "Parametrizer X", 7).getStackForm(1L)); + ParametrizerTXT_Hatch.set( + new MTEHatchParamText(ParametrizertXt.ID, "hatch.param.tier.10", "Parametrizer tXt", 10).getStackForm(1L)); // TODO + // check + // recipe + // for + // NH + Uncertainty_Hatch.set( + new MTEHatchUncertainty(UncertaintyResolver.ID, "hatch.certain.tier.07", "Uncertainty Resolver", 7) + .getStackForm(1L)); + UncertaintyX_Hatch.set( + new MTEHatchUncertainty(UncertaintyResolverX.ID, "hatch.certain.tier.10", "Uncertainty Resolver X", 10) + .getStackForm(1L)); + dataIn_Hatch.set( + new MTEHatchDataInput(OpticalSlaveConnector.ID, "hatch.datain.tier.07", "Optical Reception Connector", 7) + .getStackForm(1L)); + dataOut_Hatch.set( + new MTEHatchDataOutput( + OpticalMasterConnector.ID, + "hatch.dataout.tier.07", + "Optical Transmission Connector", + 7).getStackForm(1L)); + dataInAss_Hatch.set( + new MTEHatchDataItemsInput( + AssemblylineSlaveConnector.ID, + "hatch.datainass.tier.07", + "Assembly line Reception Connector", + 7).getStackForm(1L)); + dataOutAss_Hatch.set( + new MTEHatchDataItemsOutput( + DataBankMasterConnector.ID, + "hatch.dataoutass.tier.07", + "Data Bank Transmission Connector", + 7).getStackForm(1L)); + dataOut_Wireless_Hatch.set( + new MTEHatchWirelessComputationOutput( + CloudComputationServerHatch.ID, + "hatch.dataout.wireless.tier.12", + "Cloud Computation Server Hatch", + 12).getStackForm(1L)); + dataIn_Wireless_Hatch.set( + new MTEHatchWirelessComputationInput( + CloudComputationClientHatch.ID, + "hatch.datain.wireless.tier.12", + "Cloud Computation Client Hatch", + 12).getStackForm(1L)); + dataInAss_Wireless_Hatch.set( + new MTEHatchWirelessDataItemsInput( + WirelessAssemblylineSlaveConnector.ID, + "hatch.datainass.wireless.tier.12", + "Wireless Assembly line Reception Connector", + 12).getStackForm(1L)); + dataOutAss_Wireless_Hatch.set( + new MTEHatchWirelessDataItemsOutput( + WirelessDataBankMasterConnector.ID, + "hatch.dataoutass.wireless.tier.12", + "Wireless Data Bank Transmission Connector", + 12).getStackForm(1L)); + rack_Hatch.set(new MTEHatchRack(ComputerRack.ID, "hatch.rack.tier.08", "Computer Rack", 8).getStackForm(1L)); + holder_Hatch.set( + new MTEHatchObjectHolder(ObjectHolder.ID, "hatch.holder.tier.09", "Object Holder", 8).getStackForm(1L)); + capacitor_Hatch.set( + new MTEHatchCapacitor(CapacitorHatch.ID, "hatch.capacitor.tier.03", "Capacitor Hatch", 3).getStackForm(1L)); + + // =================================================================================================== + // Pipes + // =================================================================================================== + + LASERpipe.set(new MTEPipeEnergy(LaserVacuumPipe.ID, "pipe.energystream", "Laser Vacuum Pipe").getStackForm(1L)); + LASERpipeSmart.set( + new MTEPipeEnergyMirror(LaserVacuumMirror.ID, "pipe.energymirror", "Laser Vacuum Mirror").getStackForm(1L)); + DATApipe.set(new MTEPipeData(OpticalFiberCable.ID, "pipe.datastream", "Optical Fiber Cable").getStackForm(1L)); + + LASERpipeBlock.set( + new MTEPipeBlockEnergy(LaserVacuumPipeCasing.ID, "pipe.energystream.block", "Laser Vacuum Pipe Casing") + .getStackForm(1L)); + DATApipeBlock.set( + new MTEPipeBlockData(OpticalFiberCableCasing.ID, "pipe.datastream.block", "Optical Fiber Cable Casing") + .getStackForm(1L)); + + // =================================================================================================== + // Single Blocks + // =================================================================================================== + + Machine_OwnerDetector.set( + new MTEOwnerDetector(Ownerdetector.ID, "machine.tt.ownerdetector", "Owner detector", 3).getStackForm(1L)); + + // =================================================================================================== + // Buck Converters + // =================================================================================================== + + Machine_BuckConverter_IV.set( + new MTEBuckConverter(InsaneBuckConverter.ID, "machine.tt.buck.05", "Insane Buck Converter", 5) + .getStackForm(1L)); + Machine_BuckConverter_LuV.set( + new MTEBuckConverter(LudicrousBuckConverter.ID, "machine.tt.buck.06", "Ludicrous Buck Converter", 6) + .getStackForm(1L)); + Machine_BuckConverter_ZPM.set( + new MTEBuckConverter(ZPMVoltageBuckConverter.ID, "machine.tt.buck.07", "ZPM Voltage Buck Converter", 7) + .getStackForm(1L)); + Machine_BuckConverter_UV.set( + new MTEBuckConverter( + UltimatePowerBuckConverter.ID, + "machine.tt.buck.08", + "Ultimate Power Buck Converter", + 8).getStackForm(1L)); + Machine_BuckConverter_UHV.set( + new MTEBuckConverter( + HighlyUltimateBuckConverter.ID, + "machine.tt.buck.09", + "Highly Ultimate Buck Converter", + 9).getStackForm(1L)); + Machine_BuckConverter_UEV.set( + new MTEBuckConverter( + ExtremelyUltimateBuckConverter.ID, + "machine.tt.buck.10", + "Extremely Ultimate Buck Converter", + 10).getStackForm(1L)); + Machine_BuckConverter_UIV.set( + new MTEBuckConverter( + InsanelyUltimateBuckConverter.ID, + "machine.tt.buck.11", + "Insanely Ultimate Buck Converter", + 11).getStackForm(1L)); + Machine_BuckConverter_UMV.set( + new MTEBuckConverter(MegaUltimateBuckConverter.ID, "machine.tt.buck.12", "Mega Ultimate Buck Converter", 12) + .getStackForm(1L)); + Machine_BuckConverter_UXV.set( + new MTEBuckConverter( + ExtendedMegaUltimateBuckConverter.ID, + "machine.tt.buck.13", + "Extended Mega Ultimate Buck Converter", + 13).getStackForm(1L)); + + // =================================================================================================== + // Tesla Transceiver + // =================================================================================================== + + Machine_TeslaCoil_1by1_LV.set( + new MTETeslaCoil(BasicTeslaTransceiver1by1.ID, "machine.tt.tesla.01", "Basic Tesla Transceiver", 1, 1) + .getStackForm(1L)); + Machine_TeslaCoil_1by1_MV.set( + new MTETeslaCoil(AdvancedTeslaTransceiver1by1.ID, "machine.tt.tesla.02", "Advanced Tesla Transceiver", 2, 1) + .getStackForm(1L)); + Machine_TeslaCoil_1by1_HV.set( + new MTETeslaCoil(EpycTeslaTransceiver1by1.ID, "machine.tt.tesla.03", "Epyc Tesla Transceiver", 3, 1) + .getStackForm(1L)); + Machine_TeslaCoil_1by1_EV.set( + new MTETeslaCoil( + UltimatePowerTeslaTransceiver1by1.ID, + "machine.tt.tesla.04", + "Ultimate Power Tesla Transceiver", + 4, + 1).getStackForm(1L)); + Machine_TeslaCoil_1by1_IV.set( + new MTETeslaCoil(InsaneTeslaTransceiver1by1.ID, "machine.tt.tesla.05", "Insane Tesla Transceiver", 5, 1) + .getStackForm(1L)); + + Machine_TeslaCoil_2by2_LV.set( + new MTETeslaCoil(BasicTeslaTransceiver2by2.ID, "machine.tt.tesla.01", "Basic Tesla Transceiver", 1, 4) + .getStackForm(1L)); + Machine_TeslaCoil_2by2_MV.set( + new MTETeslaCoil(AdvancedTeslaTransceiver2by2.ID, "machine.tt.tesla.02", "Advanced Tesla Transceiver", 2, 4) + .getStackForm(1L)); + Machine_TeslaCoil_2by2_HV.set( + new MTETeslaCoil(EpycTeslaTransceiver2by2.ID, "machine.tt.tesla.03", "Epyc Tesla Transceiver", 3, 4) + .getStackForm(1L)); + Machine_TeslaCoil_2by2_EV.set( + new MTETeslaCoil( + UltimatePowerTeslaTransceiver2by2.ID, + "machine.tt.tesla.04", + "Ultimate Power Tesla Transceiver", + 4, + 4).getStackForm(1L)); + Machine_TeslaCoil_2by2_IV.set( + new MTETeslaCoil(InsaneTeslaTransceiver2by2.ID, "machine.tt.tesla.05", "Insane Tesla Transceiver", 5, 4) + .getStackForm(1L)); + + Machine_TeslaCoil_3by3_LV.set( + new MTETeslaCoil(BasicTeslaTransceiver3by3.ID, "machine.tt.tesla.01", "Basic Tesla Transceiver", 1, 9) + .getStackForm(1L)); + Machine_TeslaCoil_3by3_MV.set( + new MTETeslaCoil(AdvancedTeslaTransceiver3by3.ID, "machine.tt.tesla.02", "Advanced Tesla Transceiver", 2, 9) + .getStackForm(1L)); + Machine_TeslaCoil_3by3_HV.set( + new MTETeslaCoil(EpycTeslaTransceiver3by3.ID, "machine.tt.tesla.03", "Epyc Tesla Transceiver", 3, 9) + .getStackForm(1L)); + Machine_TeslaCoil_3by3_EV.set( + new MTETeslaCoil( + UltimatePowerTeslaTransceiver3by3.ID, + "machine.tt.tesla.04", + "Ultimate Power Tesla Transceiver", + 4, + 9).getStackForm(1L)); + Machine_TeslaCoil_3by3_IV.set( + new MTETeslaCoil(InsaneTeslaTransceiver3by3.ID, "machine.tt.tesla.05", "Insane Tesla Transceiver", 5, 9) + .getStackForm(1L)); + + Machine_TeslaCoil_4by4_LV.set( + new MTETeslaCoil(BasicTeslaTransceiver4by4.ID, "machine.tt.tesla.01", "Basic Tesla Transceiver", 1, 16) + .getStackForm(1L)); + Machine_TeslaCoil_4by4_MV.set( + new MTETeslaCoil( + AdvancedTeslaTransceiver4by4.ID, + "machine.tt.tesla.02", + "Advanced Tesla Transceiver", + 2, + 16).getStackForm(1L)); + Machine_TeslaCoil_4by4_HV.set( + new MTETeslaCoil(EpycTeslaTransceiver4by4.ID, "machine.tt.tesla.03", "Epyc Tesla Transceiver", 3, 16) + .getStackForm(1L)); + Machine_TeslaCoil_4by4_EV.set( + new MTETeslaCoil( + UltimatePowerTeslaTransceiver4by4.ID, + "machine.tt.tesla.04", + "Ultimate Power Tesla Transceiver", + 4, + 16).getStackForm(1L)); + Machine_TeslaCoil_4by4_IV.set( + new MTETeslaCoil(InsaneTeslaTransceiver4by4.ID, "machine.tt.tesla.05", "Insane Tesla Transceiver", 5, 16) + .getStackForm(1L)); + + // =================================================================================================== + // Debug Stuff + // =================================================================================================== + Machine_DebugPollutor.set( + new MTEDebugPollutor(DebugPollutionGenerator.ID, "debug.tt.pollutor", "Debug Pollution Generator", 14) + .getStackForm(1)); + hatch_CreativeData + .set(new MTEHatchCreativeData(DebugDataHatch.ID, "debug.tt.data", "Debug Data Hatch", 14).getStackForm(1)); + hatch_CreativeMaintenance.set( + new MTEHatchCreativeMaintenance( + AutoTapingMaintenanceHatch.ID, + "debug.tt.maintenance", + "Auto-Taping Maintenance Hatch", + 14).getStackForm(1L)); + Machine_DebugGenny.set( + new MTEDebugPowerGenerator(DebugPowerGenerator.ID, "debug.tt.genny", "Debug Power Generator", 14) + .getStackForm(1L)); + Machine_DebugWriter.set( + new MTEDebugStructureWriter(DebugStructureWriter.ID, "debug.tt.writer", "Debug Structure Writer", 14) + .getStackForm(1L)); + UnusedStuff.set(new ItemStack(Blocks.air)); + hatch_CreativeUncertainty.set( + new MTEHatchCreativeUncertainty(UncertaintyResolution.ID, "debug.tt.certain", "Uncertainty Resolution", 14) + .getStackForm(1)); + + // =================================================================================================== + // MetaTE init + // =================================================================================================== + + MTEHatchRack.run(); + + MTEHatchCapacitor.run(); + } +} diff --git a/src/main/java/tectech/loader/thing/MuTeLoader.java b/src/main/java/tectech/loader/thing/MuTeLoader.java new file mode 100644 index 0000000000..74c51f1bf1 --- /dev/null +++ b/src/main/java/tectech/loader/thing/MuTeLoader.java @@ -0,0 +1,21 @@ +package tectech.loader.thing; + +import tectech.TecTech; + +public class MuTeLoader implements Runnable { + + @Override + public void run() { + TecTech.LOGGER.info("TecTech: Registering MultiTileEntities"); + registerMachines(); + registerCasings(); + } + + private static void registerMachines() { + + } + + private static void registerCasings() { + + } +} diff --git a/src/main/java/tectech/loader/thing/ThingsLoader.java b/src/main/java/tectech/loader/thing/ThingsLoader.java new file mode 100644 index 0000000000..35f3454ce2 --- /dev/null +++ b/src/main/java/tectech/loader/thing/ThingsLoader.java @@ -0,0 +1,93 @@ +package tectech.loader.thing; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import tectech.Reference; +import tectech.TecTech; +import tectech.thing.block.BlockGodforgeGlass; +import tectech.thing.block.BlockQuantumGlass; +import tectech.thing.block.BlockReactorSim; +import tectech.thing.block.TileEntityEyeOfHarmony; +import tectech.thing.block.TileEntityForgeOfGods; +import tectech.thing.casing.BlockGTCasingsBA0; +import tectech.thing.casing.BlockGTCasingsTT; +import tectech.thing.casing.BlockGodforgeCasings; +import tectech.thing.casing.SpacetimeCompressionFieldCasing; +import tectech.thing.casing.StabilisationFieldCasing; +import tectech.thing.casing.TTCasingsContainer; +import tectech.thing.casing.TimeAccelerationFieldCasing; +import tectech.thing.item.ItemAstralArrayFabricator; +import tectech.thing.item.ItemEnderFluidLinkCover; +import tectech.thing.item.ItemEuMeterGT; +import tectech.thing.item.ItemParametrizerMemoryCard; +import tectech.thing.item.ItemPowerPassUpgradeCover; +import tectech.thing.item.ItemTeslaCoilCapacitor; +import tectech.thing.item.ItemTeslaCoilComponent; +import tectech.thing.item.ItemTeslaCoilCover; +import tectech.thing.item.ItemTeslaStaff; + +/** + * Created by danie_000 on 16.11.2016. + */ +public class ThingsLoader implements Runnable { + + @Override + public void run() { + + GameRegistry.registerTileEntity(TileEntityEyeOfHarmony.class, Reference.MODID + ":EyeOfHarmonyRenderBlock"); + GameRegistry.registerTileEntity(TileEntityForgeOfGods.class, Reference.MODID + ":ForgeOfGodsRenderBlock"); + + if (Textures.BlockIcons.casingTexturePages[TecTech.tectechTexturePage1] == null) { + Textures.BlockIcons.casingTexturePages[TecTech.tectechTexturePage1] = new ITexture[128]; + } + + if (Textures.BlockIcons.casingTexturePages[7] == null) { + Textures.BlockIcons.casingTexturePages[7] = new ITexture[128]; + } + + TecTech.LOGGER.info("Added texture page if was null"); + + TTCasingsContainer.sBlockCasingsTT = new BlockGTCasingsTT(); + TecTech.LOGGER.info("Elemental Casing registered"); + TTCasingsContainer.sBlockCasingsBA0 = new BlockGTCasingsBA0(); + TecTech.LOGGER.info("Nikolai's Casing registered"); + + TTCasingsContainer.SpacetimeCompressionFieldGenerators = new SpacetimeCompressionFieldCasing(); + TecTech.LOGGER.info("Spacetime Compression Field Casings registered."); + + TTCasingsContainer.TimeAccelerationFieldGenerator = new TimeAccelerationFieldCasing(); + TecTech.LOGGER.info("Time Acceleration Field Casings registered."); + + TTCasingsContainer.StabilisationFieldGenerators = new StabilisationFieldCasing(); + + if (tectech.TecTech.configTecTech.ENABLE_GOD_FORGE) { + TTCasingsContainer.GodforgeCasings = new BlockGodforgeCasings(); + TecTech.LOGGER.info("Godforge blocks registered."); + + BlockGodforgeGlass.run(); + TecTech.LOGGER.info("Godforge Glass registered"); + } + + BlockQuantumGlass.run(); + TecTech.LOGGER.info("Quantum Glass registered"); + + BlockReactorSim.run(); + TecTech.LOGGER.info("Reactor Simulator registered"); + + ItemParametrizerMemoryCard.run(); + ItemEuMeterGT.run(); + ItemTeslaStaff.run(); + ItemTeslaCoilCover.run(); + ItemTeslaCoilCapacitor.run(); + ItemEnderFluidLinkCover.run(); + ItemPowerPassUpgradeCover.run(); + TecTech.LOGGER.info("Useful Items registered"); + + ItemTeslaCoilComponent.run(); + ItemAstralArrayFabricator.run(); + TecTech.LOGGER.info("Crafting Components registered"); + + TecTech.LOGGER.info("Debug Items registered"); + } +} diff --git a/src/main/java/tectech/mechanics/dataTransport/DataPacket.java b/src/main/java/tectech/mechanics/dataTransport/DataPacket.java new file mode 100644 index 0000000000..96af1f1afb --- /dev/null +++ b/src/main/java/tectech/mechanics/dataTransport/DataPacket.java @@ -0,0 +1,104 @@ +package tectech.mechanics.dataTransport; + +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.Set; + +import net.minecraft.nbt.NBTTagCompound; + +import com.gtnewhorizon.structurelib.util.Vec3Impl; + +/** + * Created by Tec on 05.04.2017. + */ +public abstract class DataPacket { + + private static final byte MAX_HISTORY = 64; + private final Set trace = new LinkedHashSet<>(); + + protected T content; + + protected DataPacket(T content) { + this.content = content; + } + + protected DataPacket(NBTTagCompound nbt) { + content = contentFromNBT(nbt.getCompoundTag("qContent")); + for (int i = 0; i < nbt.getByte("qHistory"); i++) { + trace.add(new Vec3Impl(nbt.getInteger("qX" + i), nbt.getInteger("qY" + i), nbt.getInteger("qZ" + i))); + } + } + + public final NBTTagCompound toNbt() { + NBTTagCompound nbt = new NBTTagCompound(); + NBTTagCompound contentTag = contentToNBT(); + if (contentTag != null) { + nbt.setTag("qContent", contentTag); + } + nbt.setByte("qHistory", (byte) trace.size()); + int i = 0; + for (Vec3Impl v : trace) { + nbt.setInteger("qX" + i, v.get0()); + nbt.setInteger("qY" + i, v.get1()); + nbt.setInteger("qZ" + i, v.get2()); + i++; + } + return nbt; + } + + protected abstract NBTTagCompound contentToNBT(); + + protected abstract T contentFromNBT(NBTTagCompound nbt); + + protected abstract T unifyContentWith(T content); + + public final boolean contains(Vec3Impl v) { + return trace.contains(v); + } + + public final boolean check() { + return trace.size() <= MAX_HISTORY; + } + + public abstract boolean extraCheck(); + + protected final DataPacket unifyTrace(Vec3Impl... positions) { + Collections.addAll(trace, positions); + return (check() && extraCheck()) ? this : null; + } + + protected final DataPacket unifyTrace(DataPacket p) { + if (p == null) return this; + trace.addAll(p.trace); + return (check() && extraCheck()) ? this : null; + } + + protected final DataPacket unifyWith(DataPacket p) { + if (p == null) return this; + trace.addAll(p.trace); + if (check() && extraCheck()) { + content = unifyContentWith(p.content); + return this; + } + return null; + } + + public final T contentIfNotInTrace(Vec3Impl pos) { + if (trace.contains(pos)) { + return null; + } + return getContent(); + } + + public T getContent() { + return content; + } + + public String getContentString() { + return content.toString(); + } + + public final int getTraceSize() { + return trace.size(); + } +} diff --git a/src/main/java/tectech/mechanics/dataTransport/InventoryDataPacket.java b/src/main/java/tectech/mechanics/dataTransport/InventoryDataPacket.java new file mode 100644 index 0000000000..b779a2c897 --- /dev/null +++ b/src/main/java/tectech/mechanics/dataTransport/InventoryDataPacket.java @@ -0,0 +1,62 @@ +package tectech.mechanics.dataTransport; + +import java.util.ArrayList; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +import tectech.recipe.TTRecipeAdder; + +public class InventoryDataPacket extends DataPacket { + + public InventoryDataPacket(ItemStack[] content) { + super(content); + } + + public InventoryDataPacket(NBTTagCompound compound) { + super(compound); + } + + @Override + protected ItemStack[] contentFromNBT(NBTTagCompound nbt) { + int count = nbt.getInteger("count"); + if (count > 0) { + ArrayList stacks = new ArrayList<>(); + for (int i = 0; i < count; i++) { + ItemStack stack = ItemStack.loadItemStackFromNBT(nbt.getCompoundTag(Integer.toString(i))); + if (stack != null) { + stacks.add(stack); + } + } + return stacks.size() > 0 ? stacks.toArray(TTRecipeAdder.nullItem) : null; + } + return null; + } + + @Override + protected NBTTagCompound contentToNBT() { + NBTTagCompound compound = new NBTTagCompound(); + if (content != null && content.length > 0) { + compound.setInteger("count", content.length); + for (int i = 0; i < content.length; i++) { + compound.setTag(Integer.toString(i), content[i].writeToNBT(new NBTTagCompound())); + } + } + return compound; + } + + @Override + public boolean extraCheck() { + return true; + } + + @Override + protected ItemStack[] unifyContentWith(ItemStack[] content) { + throw new NoSuchMethodError("Unavailable to unify item stack data packet"); + } + + @Override + public String getContentString() { + return "Stack Count: " + (content == null ? 0 : content.length); + } +} diff --git a/src/main/java/tectech/mechanics/dataTransport/QuantumDataPacket.java b/src/main/java/tectech/mechanics/dataTransport/QuantumDataPacket.java new file mode 100644 index 0000000000..974831df07 --- /dev/null +++ b/src/main/java/tectech/mechanics/dataTransport/QuantumDataPacket.java @@ -0,0 +1,50 @@ +package tectech.mechanics.dataTransport; + +import net.minecraft.nbt.NBTTagCompound; + +import com.gtnewhorizon.structurelib.util.Vec3Impl; + +public class QuantumDataPacket extends DataPacket { + + public QuantumDataPacket(Long content) { + super(content); + } + + public QuantumDataPacket(NBTTagCompound compound) { + super(compound); + } + + @Override + protected Long contentFromNBT(NBTTagCompound nbt) { + return nbt.getLong("computation"); + } + + @Override + protected NBTTagCompound contentToNBT() { + NBTTagCompound compound = new NBTTagCompound(); + compound.setLong("computation", content); + return compound; + } + + @Override + public boolean extraCheck() { + return true; + } + + @Override + protected Long unifyContentWith(Long content) { + return this.content + content; + } + + public QuantumDataPacket unifyTraceWith(Vec3Impl... positions) { + return (QuantumDataPacket) super.unifyTrace(positions); + } + + public QuantumDataPacket unifyTraceWith(QuantumDataPacket p) { + return (QuantumDataPacket) super.unifyTrace(p); + } + + public QuantumDataPacket unifyPacketWith(QuantumDataPacket p) { + return (QuantumDataPacket) super.unifyWith(p); + } +} diff --git a/src/main/java/tectech/mechanics/enderStorage/EnderFluidContainer.java b/src/main/java/tectech/mechanics/enderStorage/EnderFluidContainer.java new file mode 100644 index 0000000000..f77a5a1b51 --- /dev/null +++ b/src/main/java/tectech/mechanics/enderStorage/EnderFluidContainer.java @@ -0,0 +1,134 @@ +package tectech.mechanics.enderStorage; + +import java.io.DataInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +import net.minecraft.nbt.CompressedStreamTools; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.FluidTankInfo; +import net.minecraftforge.fluids.IFluidHandler; + +import tectech.TecTech; + +public class EnderFluidContainer implements IFluidHandler, Serializable { + + private static final long serialVersionUID = 2L; + private static final int SERIALIZE_TYPE_WITH_NBT = 0; + private static final int SERIALIZE_TYPE_WITHOUT_NBT = 1; + private static final int SERIALIZE_TYPE_NULL = 2; + + private static final int CAPACITY = 64000; + private transient FluidStack fluidStack; + + public EnderFluidContainer() {} + + private FluidStack getFluidStack() { + return fluidStack; + } + + private void setFluidStack(FluidStack fluidStack) { + this.fluidStack = fluidStack; + } + + @Override + public int fill(ForgeDirection side, FluidStack fluidStackIn, boolean doFill) { + int filledFluid = 0; + FluidStack fluidStackStored = getFluidStack(); + if (fluidStackIn != null) { + if (fluidStackStored == null) { + fluidStackStored = fluidStackIn.copy(); + fluidStackStored.amount = 0; + } + if (fluidStackStored.amount < CAPACITY && fluidStackIn.isFluidEqual(fluidStackStored)) { + filledFluid = Math.min(CAPACITY - fluidStackStored.amount, fluidStackIn.amount); + if (doFill) { + fluidStackStored.amount += filledFluid; + setFluidStack(fluidStackStored); + } + } + } + return filledFluid; + } + + @Override + public FluidStack drain(ForgeDirection side, FluidStack fluidStack, boolean doDrain) { + FluidStack fluidStackOutput = null; + if (fluidStack != null && fluidStack.isFluidEqual(getFluidStack())) { + fluidStackOutput = drain(side, fluidStack.amount, doDrain); + } + return fluidStackOutput; + } + + @Override + public FluidStack drain(ForgeDirection side, int amount, boolean doDrain) { + FluidStack fluidStackOutput = null; + FluidStack fluidStackStored = getFluidStack(); + if (fluidStackStored != null && fluidStackStored.amount > 0) { + int drainedFluid = Math.min(fluidStackStored.amount, amount); + fluidStackOutput = fluidStackStored.copy(); + fluidStackOutput.amount = drainedFluid; + if (doDrain) { + fluidStackStored.amount -= drainedFluid; + if (fluidStackStored.amount == 0) { + fluidStackStored = null; + } + setFluidStack(fluidStackStored); + } + } + return fluidStackOutput; + } + + @Override + public boolean canFill(ForgeDirection forgeDirection, Fluid fluid) { + return true; + } + + @Override + public boolean canDrain(ForgeDirection forgeDirection, Fluid fluid) { + return true; + } + + @Override + public FluidTankInfo[] getTankInfo(ForgeDirection forgeDirection) { + return new FluidTankInfo[] { new FluidTankInfo(getFluidStack(), CAPACITY) }; + } + + private void writeObject(ObjectOutputStream out) throws IOException { + if (fluidStack != null) { + out.writeByte(fluidStack.tag != null ? SERIALIZE_TYPE_WITH_NBT : SERIALIZE_TYPE_WITHOUT_NBT); + if (fluidStack.tag != null) CompressedStreamTools.write(fluidStack.tag, out); + out.writeUTF( + fluidStack.getFluid() + .getName()); + out.writeInt(fluidStack.amount); + } else { + out.writeByte(SERIALIZE_TYPE_NULL); + } + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + byte type = in.readByte(); + NBTTagCompound tag = null; + switch (type) { + case SERIALIZE_TYPE_WITH_NBT: + tag = CompressedStreamTools.read(new DataInputStream(in)); + case SERIALIZE_TYPE_WITHOUT_NBT: + fluidStack = FluidRegistry.getFluidStack(in.readUTF(), in.readInt()); + break; + case SERIALIZE_TYPE_NULL: + fluidStack = null; + break; + default: + TecTech.LOGGER.error("Something very wrong... got a fluid container with state " + type); + fluidStack = null; + } + if (fluidStack != null) fluidStack.tag = tag; + } +} diff --git a/src/main/java/tectech/mechanics/enderStorage/EnderLinkTag.java b/src/main/java/tectech/mechanics/enderStorage/EnderLinkTag.java new file mode 100644 index 0000000000..516b7fd637 --- /dev/null +++ b/src/main/java/tectech/mechanics/enderStorage/EnderLinkTag.java @@ -0,0 +1,39 @@ +package tectech.mechanics.enderStorage; + +import java.io.Serializable; +import java.util.UUID; + +import com.google.common.base.Objects; + +public class EnderLinkTag implements Serializable { + + private static final long serialVersionUID = 6884008436570077863L; + private final String frequency; + private final UUID player; + + public EnderLinkTag(String frequency, UUID player) { + this.frequency = frequency; + this.player = player; + } + + public String getFrequency() { + return frequency; + } + + public UUID getUUID() { + return player; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + EnderLinkTag that = (EnderLinkTag) o; + return Objects.equal(frequency, that.frequency) && Objects.equal(player, that.player); + } + + @Override + public int hashCode() { + return Objects.hashCode(frequency, player); + } +} diff --git a/src/main/java/tectech/mechanics/enderStorage/EnderLinkTank.java b/src/main/java/tectech/mechanics/enderStorage/EnderLinkTank.java new file mode 100644 index 0000000000..1b14c1371a --- /dev/null +++ b/src/main/java/tectech/mechanics/enderStorage/EnderLinkTank.java @@ -0,0 +1,47 @@ +package tectech.mechanics.enderStorage; + +import java.io.Serializable; + +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.fluids.IFluidHandler; + +import com.google.common.base.Objects; + +public class EnderLinkTank implements Serializable { + + private static final long serialVersionUID = 1030297456736434221L; + private final int X; + private final int Y; + private final int Z; + private final int D; + + public EnderLinkTank(IFluidHandler fluidHandler) { + TileEntity tile = (TileEntity) fluidHandler; + X = tile.xCoord; + Y = tile.yCoord; + Z = tile.zCoord; + D = tile.getWorldObj().provider.dimensionId; + } + + public IFluidHandler getFluidHandler() { + IFluidHandler fluidHandler = null; + TileEntity tile = DimensionManager.getWorld(D) + .getTileEntity(X, Y, Z); + if (tile instanceof IFluidHandler) fluidHandler = (IFluidHandler) tile; + return fluidHandler; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + EnderLinkTank that = (EnderLinkTank) o; + return X == that.X && Y == that.Y && Z == that.Z && D == that.D; + } + + @Override + public int hashCode() { + return Objects.hashCode(X, Y, Z, D); + } +} diff --git a/src/main/java/tectech/mechanics/enderStorage/EnderWorldSavedData.java b/src/main/java/tectech/mechanics/enderStorage/EnderWorldSavedData.java new file mode 100644 index 0000000000..d6182794b7 --- /dev/null +++ b/src/main/java/tectech/mechanics/enderStorage/EnderWorldSavedData.java @@ -0,0 +1,144 @@ +package tectech.mechanics.enderStorage; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.WorldSavedData; +import net.minecraft.world.storage.MapStorage; +import net.minecraftforge.common.DimensionManager; +import net.minecraftforge.event.world.WorldEvent; +import net.minecraftforge.fluids.IFluidHandler; + +import cpw.mods.fml.common.eventhandler.SubscribeEvent; +import tectech.Reference; + +public class EnderWorldSavedData extends WorldSavedData { + + private static EnderWorldSavedData INSTANCE; + + private static final String DATA_NAME = Reference.MODID + "_EnderWorldSavedData"; + private static final String ENDER_LIQUID_TAG_LINK = DATA_NAME + "_EnderLiquidTagLink"; + private static final String ENDER_LIQUID_TANK_LINK = DATA_NAME + "_EnderLiquidTankLink"; + private static final EnderLinkTag DEFAULT_LINK_TAG = new EnderLinkTag("", null); + + private Map EnderLiquidTagLink = new HashMap<>(); + private Map EnderLiquidTankLink = new HashMap<>(); + + public EnderWorldSavedData() { + super(DATA_NAME); + } + + public EnderWorldSavedData(String s) { + super(s); + } + + @SuppressWarnings("unchecked") + @Override + public void readFromNBT(NBTTagCompound nbtTagCompound) { + try { + byte[] ba = nbtTagCompound.getByteArray(ENDER_LIQUID_TAG_LINK); + InputStream is = new ByteArrayInputStream(ba); + ObjectInputStream ois = new ObjectInputStream(is); + Object data = ois.readObject(); + EnderLiquidTagLink = (Map) data; + } catch (IOException | ClassNotFoundException ignored) { + System.out.println("ENDER_LIQUID_TAG_LINK LOAD FAILED"); + System.out.println(ignored); + } + + try { + byte[] ba = nbtTagCompound.getByteArray(ENDER_LIQUID_TANK_LINK); + InputStream is = new ByteArrayInputStream(ba); + ObjectInputStream ois = new ObjectInputStream(is); + Object data = ois.readObject(); + EnderLiquidTankLink = (Map) data; + } catch (IOException | ClassNotFoundException ignored) { + System.out.println("ENDER_LIQUID_TANK_LINK LOAD FAILED"); + System.out.println(ignored); + } + } + + @Override + public void writeToNBT(NBTTagCompound nbtTagCompound) { + try { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(bos); + oos.writeObject(EnderLiquidTagLink); + oos.flush(); + byte[] data = bos.toByteArray(); + nbtTagCompound.setByteArray(ENDER_LIQUID_TAG_LINK, data); + } catch (IOException ignored) { + System.out.println("ENDER_LIQUID_TAG_LINK SAVE FAILED"); + System.out.println(ignored); + } + + try { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(bos); + oos.writeObject(EnderLiquidTankLink); + oos.flush(); + byte[] data = bos.toByteArray(); + nbtTagCompound.setByteArray(ENDER_LIQUID_TANK_LINK, data); + } catch (IOException ignored) { + System.out.println("ENDER_LIQUID_TANK_LINK SAVE FAILED"); + System.out.println(ignored); + } + } + + private static void loadInstance() { + if (INSTANCE == null) { + MapStorage storage = DimensionManager.getWorld(0).mapStorage; + INSTANCE = (EnderWorldSavedData) storage.loadData(EnderWorldSavedData.class, DATA_NAME); + if (INSTANCE == null) { + INSTANCE = new EnderWorldSavedData(); + storage.setData(DATA_NAME, INSTANCE); + } + } + INSTANCE.markDirty(); + } + + private static Map getEnderLiquidLink() { + loadInstance(); + return INSTANCE.EnderLiquidTagLink; + } + + private static Map getEnderLiquidTankLink() { + loadInstance(); + return INSTANCE.EnderLiquidTankLink; + } + + public static EnderFluidContainer getEnderFluidContainer(EnderLinkTag tag) { + if (!getEnderLiquidLink().containsKey(tag)) { + getEnderLiquidLink().put(tag, new EnderFluidContainer()); + } + return getEnderLiquidLink().get(tag); + } + + public static EnderLinkTag getEnderLinkTag(IFluidHandler handler) { + EnderLinkTank tank = new EnderLinkTank(handler); + if (!getEnderLiquidTankLink().containsKey(tank)) { + getEnderLiquidTankLink().put(tank, DEFAULT_LINK_TAG); + } + return getEnderLiquidTankLink().get(tank); + } + + public static void bindEnderLinkTag(IFluidHandler handler, EnderLinkTag tag) { + EnderLinkTank tank = new EnderLinkTank(handler); + getEnderLiquidTankLink().remove(tank); + getEnderLiquidTankLink().put(tank, tag); + } + + @SubscribeEvent + public void onWorldUnload(WorldEvent.Unload event) { + if (event.world.provider.dimensionId == 0) { + INSTANCE = null; + } + } +} diff --git a/src/main/java/tectech/mechanics/pipe/IActivePipe.java b/src/main/java/tectech/mechanics/pipe/IActivePipe.java new file mode 100644 index 0000000000..e6f981d627 --- /dev/null +++ b/src/main/java/tectech/mechanics/pipe/IActivePipe.java @@ -0,0 +1,12 @@ +package tectech.mechanics.pipe; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; + +public interface IActivePipe extends IMetaTileEntity { + + void setActive(boolean active); + + boolean getActive(); + + void markUsed(); +} diff --git a/src/main/java/tectech/mechanics/pipe/IConnectsToDataPipe.java b/src/main/java/tectech/mechanics/pipe/IConnectsToDataPipe.java new file mode 100644 index 0000000000..b186840a42 --- /dev/null +++ b/src/main/java/tectech/mechanics/pipe/IConnectsToDataPipe.java @@ -0,0 +1,17 @@ +package tectech.mechanics.pipe; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Created by Tec on 26.02.2017. + */ +public interface IConnectsToDataPipe { + + boolean canConnectData(ForgeDirection side); + + IConnectsToDataPipe getNext(IConnectsToDataPipe source); + + boolean isDataInputFacing(ForgeDirection side); + + byte getColorization(); +} diff --git a/src/main/java/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java b/src/main/java/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java new file mode 100644 index 0000000000..b2381b2b69 --- /dev/null +++ b/src/main/java/tectech/mechanics/pipe/IConnectsToEnergyTunnel.java @@ -0,0 +1,11 @@ +package tectech.mechanics.pipe; + +import net.minecraftforge.common.util.ForgeDirection; + +/** + * Created by Tec on 26.02.2017. + */ +public interface IConnectsToEnergyTunnel { + + boolean canConnect(ForgeDirection side); +} diff --git a/src/main/java/tectech/mechanics/pipe/PipeActivityMessage.java b/src/main/java/tectech/mechanics/pipe/PipeActivityMessage.java new file mode 100644 index 0000000000..d6b3717eb5 --- /dev/null +++ b/src/main/java/tectech/mechanics/pipe/PipeActivityMessage.java @@ -0,0 +1,136 @@ +package tectech.mechanics.pipe; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.DimensionManager; + +import cpw.mods.fml.common.network.ByteBufUtils; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; +import eu.usrv.yamcore.network.server.AbstractServerMessageHandler; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import io.netty.buffer.ByteBuf; + +public class PipeActivityMessage implements IMessage { + + int mPosX; + int mPosY; + int mPosZ; + int mPosD; + int mActive; + + public PipeActivityMessage() {} + + private PipeActivityMessage(IActivePipe metaTile) { + IGregTechTileEntity base = metaTile.getBaseMetaTileEntity(); + mPosX = base.getXCoord(); + mPosY = base.getYCoord(); + mPosZ = base.getZCoord(); + mPosD = base.getWorld().provider.dimensionId; + mActive = metaTile.getActive() ? 1 : 0; + } + + private PipeActivityMessage(World world, int x, int y, int z, boolean active) { + mPosX = x; + mPosY = y; + mPosZ = z; + mPosD = world.provider.dimensionId; + mActive = active ? 1 : 0; + } + + @Override + public void fromBytes(ByteBuf pBuffer) { + NBTTagCompound tTag = ByteBufUtils.readTag(pBuffer); + mPosX = tTag.getInteger("posx"); + mPosY = tTag.getInteger("posy"); + mPosZ = tTag.getInteger("posz"); + mPosD = tTag.getInteger("posd"); + mActive = tTag.getInteger("active"); + } + + @Override + public void toBytes(ByteBuf pBuffer) { + NBTTagCompound tFXTag = new NBTTagCompound(); + tFXTag.setInteger("posx", mPosX); + tFXTag.setInteger("posy", mPosY); + tFXTag.setInteger("posz", mPosZ); + tFXTag.setInteger("posd", mPosD); + tFXTag.setInteger("active", mActive); + + ByteBufUtils.writeTag(pBuffer, tFXTag); + } + + public static class PipeActivityQuery extends PipeActivityMessage { + + public PipeActivityQuery() {} + + public PipeActivityQuery(IActivePipe metaTile) { + super(metaTile); + } + + public PipeActivityQuery(World world, int x, int y, int z, boolean active) { + super(world, x, y, z, active); + } + } + + public static class PipeActivityData extends PipeActivityMessage { + + public PipeActivityData() {} + + private PipeActivityData(PipeActivityQuery query) { + mPosX = query.mPosX; + mPosY = query.mPosY; + mPosZ = query.mPosZ; + mPosD = query.mPosD; + mActive = query.mActive; + } + + public PipeActivityData(IActivePipe metaTile) { + super(metaTile); + } + + public PipeActivityData(World world, int x, int y, int z, boolean active) { + super(world, x, y, z, active); + } + } + + public static class ClientHandler extends AbstractClientMessageHandler { + + @Override + public IMessage handleClientMessage(EntityPlayer pPlayer, PipeActivityData pMessage, MessageContext pCtx) { + if (pPlayer.worldObj.provider.dimensionId == pMessage.mPosD) { + TileEntity te = pPlayer.worldObj.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (meta instanceof IActivePipe) { + ((IActivePipe) meta).setActive(pMessage.mActive == 1); + } + } + } + return null; + } + } + + public static class ServerHandler extends AbstractServerMessageHandler { + + @Override + public IMessage handleServerMessage(EntityPlayer pPlayer, PipeActivityQuery pMessage, MessageContext pCtx) { + World world = DimensionManager.getWorld(pMessage.mPosD); + if (world != null) { + TileEntity te = world.getTileEntity(pMessage.mPosX, pMessage.mPosY, pMessage.mPosZ); + if (te instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) te).getMetaTileEntity(); + if (meta instanceof IActivePipe) { + pMessage.mActive = ((IActivePipe) meta).getActive() ? 1 : 0; + return new PipeActivityData(pMessage); + } + } + } + return null; + } + } +} diff --git a/src/main/java/tectech/mechanics/spark/RendererMessage.java b/src/main/java/tectech/mechanics/spark/RendererMessage.java new file mode 100644 index 0000000000..6c52e43b0d --- /dev/null +++ b/src/main/java/tectech/mechanics/spark/RendererMessage.java @@ -0,0 +1,148 @@ +package tectech.mechanics.spark; + +import static gregtech.api.enums.Mods.Thaumcraft; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.ObjectStreamClass; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Random; + +import net.minecraft.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.world.World; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.Marker; +import org.apache.logging.log4j.MarkerManager; + +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.common.network.simpleimpl.IMessage; +import cpw.mods.fml.common.network.simpleimpl.MessageContext; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import eu.usrv.yamcore.network.client.AbstractClientMessageHandler; +import io.netty.buffer.ByteBuf; +import thaumcraft.client.fx.bolt.FXLightningBolt; + +// TODO Re-work how sparks are distributed +public class RendererMessage implements IMessage { + + HashSet sparkList; + + public RendererMessage() {} + + @SuppressWarnings("unchecked") + @Override + public void fromBytes(ByteBuf pBuffer) { + if (FMLCommonHandler.instance() + .getSide() + .isServer()) return; + try { + // I'd love to know why I need to offset by one byte for this to work + byte[] boop = pBuffer.array(); + boop = Arrays.copyOfRange(boop, 1, boop.length); + InputStream is = new ByteArrayInputStream(boop); + ObjectInputStream ois = new ValidatingObjectInputStream(is); + Object data = ois.readObject(); + sparkList = (HashSet) data; + } catch (IOException | ClassNotFoundException ignored) {} + } + + @Override + public void toBytes(ByteBuf pBuffer) { + try { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ObjectOutputStream oos = new ObjectOutputStream(baos); + oos.writeObject(sparkList); + oos.flush(); + InputStream is = new ByteArrayInputStream(baos.toByteArray()); + pBuffer.writeBytes(is, baos.toByteArray().length); + } catch (IOException ignore) {} + } + + public static class RendererData extends RendererMessage { + + public RendererData() {} + + public RendererData(HashSet eSparkList) { + sparkList = eSparkList; + } + } + + public static class ClientHandler extends AbstractClientMessageHandler { + + @Override + public IMessage handleClientMessage(EntityPlayer pPlayer, RendererData pMessage, MessageContext pCtx) { + // disgusting + Random localRand = Minecraft.getMinecraft().theWorld.rand; + int[] zapsToUse = new int[4]; + for (int i = 0; i < 3; i++) { + zapsToUse[i] = localRand.nextInt(pMessage.sparkList.size()); + } + int i = 0; + for (ThaumSpark sp : pMessage.sparkList) { + for (int j : zapsToUse) { + if (i == j) { + thaumLightning(sp.x, sp.y, sp.z, sp.xR, sp.yR, sp.zR, sp.wID); + } + } + i++; + } + pMessage.sparkList.clear(); + return null; + } + } + + @SideOnly(Side.CLIENT) + private static void thaumLightning(int tX, int tY, int tZ, int tXN, int tYN, int tZN, int wID) { + // This is enough to check for thaum, since it only ever matters for client side effects (Tested not to crash) + if (Thaumcraft.isModLoaded()) { + World world = Minecraft.getMinecraft().theWorld; + if (world.provider.dimensionId == wID) { + FXLightningBolt bolt = new FXLightningBolt( + world, + tX + 0.5F, + tY + 0.5F, + tZ + 0.5F, + tX + tXN + 0.5F, + tY + tYN + 0.5F, + tZ + tZN + 0.5F, + world.rand.nextLong(), + 6, + 0.5F, + 8); + bolt.defaultFractal(); + bolt.setType(2); + bolt.setWidth(0.125F); + bolt.finalizeBolt(); + } + } + } + + private static class ValidatingObjectInputStream extends ObjectInputStream { + + private static final Logger logger = LogManager.getLogger(); + private static final Marker securityMarker = MarkerManager.getMarker("SuspiciousPackets"); + + private ValidatingObjectInputStream(InputStream in) throws IOException { + super(in); + } + + @Override + protected Class resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { + String name = desc.getName(); + if (!name.equals("java.util.HashSet") && !name.equals("tectech.mechanics.spark.ThaumSpark")) { + logger.warn(securityMarker, "Received packet containing disallowed class: " + name); + throw new RuntimeException(); + } + return super.resolveClass(desc); + } + } +} diff --git a/src/main/java/tectech/mechanics/spark/ThaumSpark.java b/src/main/java/tectech/mechanics/spark/ThaumSpark.java new file mode 100644 index 0000000000..12c04f2cfe --- /dev/null +++ b/src/main/java/tectech/mechanics/spark/ThaumSpark.java @@ -0,0 +1,57 @@ +package tectech.mechanics.spark; + +import java.io.Serializable; +import java.util.Objects; + +import com.gtnewhorizon.structurelib.util.Vec3Impl; + +public class ThaumSpark implements Serializable { + + // This works regardless of if TC is loaded + private static final long serialVersionUID = -7037856938316679566L; + public int x, y, z, wID; + public byte xR, yR, zR; + + public ThaumSpark(int x, int y, int z, byte xR, byte yR, byte zR, int wID) { + this.x = x; + this.y = y; + this.z = z; + + this.xR = xR; + this.yR = yR; + this.zR = zR; + + this.wID = wID; + } + + public ThaumSpark(Vec3Impl origin, Vec3Impl target, int wID) { + this.x = origin.get0(); + this.y = origin.get1(); + this.z = origin.get2(); + + Vec3Impl offset = target.sub(origin); + this.xR = (byte) offset.get0(); + this.yR = (byte) offset.get1(); + this.zR = (byte) offset.get2(); + + this.wID = wID; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ThaumSpark that = (ThaumSpark) o; + return x == that.x && y == that.y + && z == that.z + && wID == that.wID + && xR == that.xR + && yR == that.yR + && zR == that.zR; + } + + @Override + public int hashCode() { + return Objects.hash(x, y, z, wID, xR, yR, zR); + } +} diff --git a/src/main/java/tectech/mechanics/tesla/ITeslaConnectable.java b/src/main/java/tectech/mechanics/tesla/ITeslaConnectable.java new file mode 100644 index 0000000000..27fa829bad --- /dev/null +++ b/src/main/java/tectech/mechanics/tesla/ITeslaConnectable.java @@ -0,0 +1,184 @@ +package tectech.mechanics.tesla; + +import static java.lang.Math.sqrt; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; + +import com.google.common.collect.Multimap; + +import tectech.mechanics.spark.ThaumSpark; + +public interface ITeslaConnectable extends ITeslaConnectableSimple { + + // Map with all Teslas in the same dimension and the distance to them //TODO Range + Multimap getTeslaNodeMap(); + + // ThaumCraft lighting coordinate pairs, so we can send them in bursts and save on lag + HashSet getSparkList(); + + // -128 to -1 disables capability + // 0 means any source or target + // 1 to 127 must match on source and target or source/target must be 0 + byte getTeslaTransmissionCapability(); + + // Transmission Range is typically 16+ in blocks + int getTeslaTransmissionRange(); + + boolean isOverdriveEnabled(); + + int getTeslaEnergyLossPerBlock(); + + float getTeslaOverdriveLossCoefficient(); + + long getTeslaOutputVoltage(); + + long getTeslaOutputCurrent(); + + boolean teslaDrainEnergy(long teslaVoltageDrained); + + class TeslaUtil { + + private static final HashSet teslaSimpleNodeSet = new HashSet<>(); // Targets for power + // transmission + private static final HashSet teslaNodeSet = new HashSet<>(); // Sources of power transmission + private static final List scheduledRemove = new ArrayList<>(); + + public static void teslaSimpleNodeSetAdd(ITeslaConnectableSimple target) { + if (!teslaSimpleNodeSet.contains(target)) { + teslaSimpleNodeSet.add(target); + teslaNodeSet.forEach(origin -> addTargetToTeslaOrigin(target, origin)); + } + } + + public static void teslaSimpleNodeSetRemove(ITeslaConnectableSimple target) { + teslaSimpleNodeSet.remove(target); + if (target instanceof ITeslaConnectable) teslaNodeSet.remove(target); + teslaNodeSet.forEach(origin -> removeTargetFromTeslaOrigin(target, origin)); + } + + public static void teslaSimpleNodeSetRemoveScheduled(ITeslaConnectableSimple target) { + scheduledRemove.add(target); + } + + public static void housekeep() { + for (ITeslaConnectableSimple e : scheduledRemove) { + teslaSimpleNodeSet.remove(e); + } + scheduledRemove.clear(); + } + + private static void addTargetToTeslaOrigin(ITeslaConnectableSimple target, ITeslaConnectable origin) { + if (origin.equals(target) || !origin.getTeslaDimension() + .equals(target.getTeslaDimension())) { + // Skip if looking at myself and skip if not in the same dimension + // TODO, INTERDIM? + return; + } else if (origin.getTeslaTransmissionCapability() != 0 && origin.getTeslaReceptionCapability() != 0 + && origin.getTeslaTransmissionCapability() != origin.getTeslaReceptionCapability()) { + // Skip if incompatible + return; + } + // Range calc + int distance = (int) sqrt( + origin.getTeslaPosition() + .distanceSq(target.getTeslaPosition())); + if (distance > origin.getTeslaTransmissionRange() * target.getTeslaReceptionCoefficient()) { + // Skip if the range is too vast + return; + } + origin.getTeslaNodeMap() + .put(distance, target); + } + + private static void removeTargetFromTeslaOrigin(ITeslaConnectableSimple target, ITeslaConnectable origin) { + // Range calc TODO Remove duplicate? + int distance = (int) sqrt( + origin.getTeslaPosition() + .distanceSq(target.getTeslaPosition())); + origin.getTeslaNodeMap() + .remove(distance, target); + } + + public static void generateTeslaNodeMap(ITeslaConnectable origin) { + origin.getTeslaNodeMap() + .clear(); + for (ITeslaConnectableSimple target : teslaSimpleNodeSet) { + // Sanity checks + if (target == null) { + // The Tesla Covers do not remove themselves from the list and this is the code that does + teslaSimpleNodeSet.remove(null); + continue; + } + addTargetToTeslaOrigin(target, origin); + } + teslaNodeSet.add(origin); + } + + public static long powerTeslaNodeMap(ITeslaConnectable origin) { + long remainingAmperes = origin.getTeslaOutputCurrent(); + boolean canSendPower = !origin.isTeslaReadyToReceive() && remainingAmperes > 0; + + if (canSendPower) { + for (Map.Entry Rx : origin.getTeslaNodeMap() + .entries()) { + // Do we still have power left to send kind of check + if (origin.getTeslaStoredEnergy() + < (origin.isOverdriveEnabled() ? origin.getTeslaOutputVoltage() * 2 + : origin.getTeslaOutputVoltage())) + break; + // Explicit words for the important fields + ITeslaConnectableSimple target = Rx.getValue(); + int distance = Rx.getKey(); + // Can our target receive energy? + if (!target.isTeslaReadyToReceive()) continue; + + // Calculate the voltage output + long outputVoltageInjectable; + long outputVoltageConsumption; + if (origin.isOverdriveEnabled()) { + outputVoltageInjectable = origin.getTeslaOutputVoltage(); + outputVoltageConsumption = origin.getTeslaOutputVoltage() + + ((long) distance * origin.getTeslaEnergyLossPerBlock()) + + (long) Math + .round(origin.getTeslaOutputVoltage() * origin.getTeslaOverdriveLossCoefficient()); + } else { + outputVoltageInjectable = origin.getTeslaOutputVoltage() + - ((long) distance * origin.getTeslaEnergyLossPerBlock()); + outputVoltageConsumption = origin.getTeslaOutputVoltage(); + } + + // Break out of the loop if the cost is too high + // Since the next target will have an even higher cost, just quit now. + if (origin.getTeslaStoredEnergy() < outputVoltageConsumption) break; + + // Now shove in as many packets as will fit~ + while (canSendPower) { + if (target.teslaInjectEnergy(outputVoltageInjectable)) { + origin.teslaDrainEnergy(outputVoltageConsumption); + origin.getSparkList() + .add( + new ThaumSpark( + origin.getTeslaPosition(), + target.getTeslaPosition(), + origin.getTeslaDimension())); + remainingAmperes--; + // Update the can send power flag each time we send power + canSendPower = (origin.getTeslaStoredEnergy() < outputVoltageConsumption + || remainingAmperes > 0); + } else { + // Breaks out when I can't send anymore power + break; + } + } + + // Break out if we can't send power anymore + if (!canSendPower) break; + } + } + return origin.getTeslaOutputCurrent() - remainingAmperes; + } + } +} diff --git a/src/main/java/tectech/mechanics/tesla/ITeslaConnectableSimple.java b/src/main/java/tectech/mechanics/tesla/ITeslaConnectableSimple.java new file mode 100644 index 0000000000..8cbbd75ca0 --- /dev/null +++ b/src/main/java/tectech/mechanics/tesla/ITeslaConnectableSimple.java @@ -0,0 +1,24 @@ +package tectech.mechanics.tesla; + +import com.gtnewhorizon.structurelib.util.Vec3Impl; + +public interface ITeslaConnectableSimple { + + // -128 to -1 disables capability + // 0 means any source or target + // 1 to 127 must match on source and target or source/target must be 0 + byte getTeslaReceptionCapability(); + + // Reception Coefficient is a range extension, typical is 1 + float getTeslaReceptionCoefficient(); + + boolean isTeslaReadyToReceive(); + + long getTeslaStoredEnergy(); + + boolean teslaInjectEnergy(long teslaVoltageInjected); + + Vec3Impl getTeslaPosition(); + + Integer getTeslaDimension(); +} diff --git a/src/main/java/tectech/mechanics/tesla/TeslaCoverConnection.java b/src/main/java/tectech/mechanics/tesla/TeslaCoverConnection.java new file mode 100644 index 0000000000..0ab421361f --- /dev/null +++ b/src/main/java/tectech/mechanics/tesla/TeslaCoverConnection.java @@ -0,0 +1,81 @@ +package tectech.mechanics.tesla; + +import static tectech.mechanics.tesla.ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetRemoveScheduled; + +import net.minecraftforge.common.util.ForgeDirection; + +import com.google.common.base.Objects; +import com.gtnewhorizon.structurelib.util.Vec3Impl; + +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class TeslaCoverConnection implements ITeslaConnectableSimple { + + private final IGregTechTileEntity IGT; + private final Vec3Impl pos; + private final byte teslaReceptionCapability; + + public TeslaCoverConnection(IGregTechTileEntity IGT, byte teslaReceptionCapability) { + this.IGT = IGT; + this.pos = new Vec3Impl(IGT.getXCoord(), IGT.getYCoord(), IGT.getZCoord()); + + this.teslaReceptionCapability = teslaReceptionCapability; + } + + @Override + public byte getTeslaReceptionCapability() { + return teslaReceptionCapability; + } + + @Override + public float getTeslaReceptionCoefficient() { + return 1; + } + + @Override + public boolean isTeslaReadyToReceive() { + return true; + } + + @Override + public long getTeslaStoredEnergy() { + return IGT.getStoredEU(); + } + + @Override + public Vec3Impl getTeslaPosition() { + return pos; + } + + @Override + public Integer getTeslaDimension() { + return IGT.getWorld().provider.dimensionId; + } + + @Override + public boolean teslaInjectEnergy(long teslaVoltageInjected) { + // Same as in the microwave transmitters, this does not account for amp limits + boolean output = false; + + if (!IGT.isDead()) { + output = IGT.injectEnergyUnits(ForgeDirection.UP, teslaVoltageInjected, 1L) > 0L; + } else { + teslaSimpleNodeSetRemoveScheduled(this); + } + + return output; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TeslaCoverConnection that = (TeslaCoverConnection) o; + return Objects.equal(IGT, that.IGT); + } + + @Override + public int hashCode() { + return Objects.hashCode(IGT); + } +} diff --git a/src/main/java/tectech/proxy/ClientProxy.java b/src/main/java/tectech/proxy/ClientProxy.java new file mode 100644 index 0000000000..145ff7c5b3 --- /dev/null +++ b/src/main/java/tectech/proxy/ClientProxy.java @@ -0,0 +1,185 @@ +package tectech.proxy; + +import static tectech.TecTech.RANDOM; +import static tectech.thing.casing.TTCasingsContainer.eyeOfHarmonyRenderBlock; +import static tectech.thing.casing.TTCasingsContainer.forgeOfGodsRenderBlock; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiNewChat; +import net.minecraft.client.particle.EntityFX; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; +import net.minecraft.world.World; +import net.minecraftforge.client.MinecraftForgeClient; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.entity.fx.WeightlessParticleFX; + +import cpw.mods.fml.client.FMLClientHandler; +import cpw.mods.fml.client.registry.ClientRegistry; +import cpw.mods.fml.client.registry.RenderingRegistry; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import tectech.Reference; +import tectech.rendering.EOH.EOHItemRenderer; +import tectech.rendering.EOH.EOHTileEntitySR; +import tectech.thing.block.BlockGodforgeGlass; +import tectech.thing.block.BlockQuantumGlass; +import tectech.thing.block.RenderForgeOfGods; +import tectech.thing.block.RenderGodforgeGlass; +import tectech.thing.block.RenderQuantumGlass; +import tectech.thing.block.TileEntityEyeOfHarmony; +import tectech.thing.block.TileEntityForgeOfGods; +import tectech.thing.item.ItemRenderForgeOfGods; + +public class ClientProxy extends CommonProxy { + + @Override + public void registerRenderInfo() { + BlockQuantumGlass.renderID = RenderingRegistry.getNextAvailableRenderId(); + RenderingRegistry.registerBlockHandler(BlockQuantumGlass.renderID, new RenderQuantumGlass()); + + MinecraftForgeClient + .registerItemRenderer(Item.getItemFromBlock(eyeOfHarmonyRenderBlock), new EOHItemRenderer()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEyeOfHarmony.class, new EOHTileEntitySR()); + + if (tectech.TecTech.configTecTech.ENABLE_GOD_FORGE) { + BlockGodforgeGlass.renderID = RenderingRegistry.getNextAvailableRenderId(); + RenderingRegistry.registerBlockHandler(BlockGodforgeGlass.renderID, new RenderGodforgeGlass()); + + MinecraftForgeClient + .registerItemRenderer(Item.getItemFromBlock(forgeOfGodsRenderBlock), new ItemRenderForgeOfGods()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityForgeOfGods.class, new RenderForgeOfGods()); + } + } + + @Override + public void em_particle(IGregTechTileEntity aMuffler, ForgeDirection facing) { // CUTE! + float xPos = facing.offsetX * 0.76F + aMuffler.getXCoord() + 0.25F; + float yPos = facing.offsetY * 0.76F + aMuffler.getYCoord() + 0.25F; + float zPos = facing.offsetZ * 0.76F + aMuffler.getZCoord() + 0.25F; + + EntityFX particle = new WeightlessParticleFX( + aMuffler.getWorld(), + xPos + RANDOM.nextFloat() * 0.5F, + yPos + RANDOM.nextFloat() * 0.5F, + zPos + RANDOM.nextFloat() * 0.5F, + 0, + 0, + 0); + particle.setRBGColorF(0, 0.6F * RANDOM.nextFloat(), 0.8f); + Minecraft.getMinecraft().effectRenderer.addEffect(particle); + } + + @Override + public void pollutor_particle(IGregTechTileEntity aMuffler, ForgeDirection facing) { + float xPos = facing.offsetX * 0.76F + aMuffler.getXCoord() + 0.25F; + float yPos = facing.offsetY * 0.76F + aMuffler.getYCoord() + 0.25F; + float zPos = facing.offsetZ * 0.76F + aMuffler.getZCoord() + 0.25F; + + float ySpd = facing.offsetY * 0.1F + 0.2F + 0.1F * (float) RANDOM.nextGaussian(); + float xSpd; + float zSpd; + + if (facing.offsetY == -1) { + float temp = RANDOM.nextFloat() * 2 * (float) Math.PI; + xSpd = (float) Math.sin(temp) * 0.1F * (float) RANDOM.nextGaussian(); + zSpd = (float) Math.cos(temp) * 0.1F * (float) RANDOM.nextGaussian(); + } else { + xSpd = facing.offsetX * (0.1F + 0.2F * (float) RANDOM.nextGaussian()); + zSpd = facing.offsetZ * (0.1F + 0.2F * (float) RANDOM.nextGaussian()); + } + aMuffler.getWorld() + .spawnParticle( + "largesmoke", + xPos + RANDOM.nextFloat() * 0.5F, + yPos + RANDOM.nextFloat() * 0.5F, + zPos + RANDOM.nextFloat() * 0.5F, + xSpd, + ySpd, + zSpd); + aMuffler.getWorld() + .spawnParticle( + "largesmoke", + xPos + RANDOM.nextFloat() * 0.5F, + yPos + RANDOM.nextFloat() * 0.5F, + zPos + RANDOM.nextFloat() * 0.5F, + xSpd, + ySpd, + zSpd); + aMuffler.getWorld() + .spawnParticle( + "largesmoke", + xPos + RANDOM.nextFloat() * 0.5F, + yPos + RANDOM.nextFloat() * 0.5F, + zPos + RANDOM.nextFloat() * 0.5F, + xSpd, + ySpd, + zSpd); + } + + @Override + public void em_particle(World w, double x, double y, double z) { // CUTE! + EntityFX particle = new WeightlessParticleFX( + w, + x + RANDOM.nextFloat() * 0.5F, + y + RANDOM.nextFloat() * 0.5F, + z + RANDOM.nextFloat() * 0.5F, + 0, + 0, + 0); + particle.setRBGColorF(0, 0.6F * RANDOM.nextFloat(), 0.8f); + Minecraft.getMinecraft().effectRenderer.addEffect(particle); + } + + @Override + public void pollutor_particle(World w, double x, double y, double z) { + w.spawnParticle( + "largesmoke", + x + RANDOM.nextFloat() * 0.5F, + y + RANDOM.nextFloat() * 0.5F, + z + RANDOM.nextFloat() * 0.5F, + 0, + 0, + 0); + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + return null; + } + + @Override + public World getClientWorld() { + return FMLClientHandler.instance() + .getClient().theWorld; + } + + @Override + public void printInchat(String... strings) { + GuiNewChat chat = Minecraft.getMinecraft().ingameGUI.getChatGUI(); + for (String s : strings) { + chat.printChatMessage(new ChatComponentText(s)); + } + } + + @Override + public void playSound(IGregTechTileEntity base, String name) { + base.getWorld() + .playSoundEffect(base.getXCoord(), base.getYCoord(), base.getZCoord(), Reference.MODID + ':' + name, 1, 1); + } + + @Override + public void renderAABB(World w, AxisAlignedBB box) { + em_particle(w, box.minX, box.minY, box.minZ); + em_particle(w, box.minX, box.minY, box.maxZ); + em_particle(w, box.minX, box.maxY, box.maxZ); + em_particle(w, box.minX, box.maxY, box.minZ); + em_particle(w, box.maxX, box.maxY, box.minZ); + em_particle(w, box.maxX, box.maxY, box.maxZ); + em_particle(w, box.maxX, box.minY, box.maxZ); + em_particle(w, box.maxX, box.minY, box.minZ); + } + +} diff --git a/src/main/java/tectech/proxy/CommonProxy.java b/src/main/java/tectech/proxy/CommonProxy.java new file mode 100644 index 0000000000..209e1e4181 --- /dev/null +++ b/src/main/java/tectech/proxy/CommonProxy.java @@ -0,0 +1,94 @@ +package tectech.proxy; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.server.MinecraftServer; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.ChatComponentText; +import net.minecraft.world.World; +import net.minecraft.world.WorldServer; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.common.network.IGuiHandler; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class CommonProxy implements IGuiHandler { + + public void registerRenderInfo() {} + + public void em_particle(IGregTechTileEntity aMuffler, ForgeDirection facing) {} // CUTE! + + public void pollutor_particle(IGregTechTileEntity aPollutor, ForgeDirection facing) {} // CUTE! + + public void em_particle(World w, double x, double y, double z) {} + + public void pollutor_particle(World w, double x, double y, double z) {} + + public void renderAABB(World w, AxisAlignedBB box) {} + + @Override + public Object getServerGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + return null; + } + + @Override + public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) { + return null; + } + + public World getClientWorld() { + return null; + } + + public void broadcast(String str) { + MinecraftServer.getServer() + .getConfigurationManager() + .sendChatMsg(new ChatComponentText(str)); + } + + public void printInchat(String... strings) {} + + public void playSound(IGregTechTileEntity base, String name) {} + + public String getUUID(String name) { + for (WorldServer worldServer : MinecraftServer.getServer().worldServers) { + for (Object o : worldServer.playerEntities) { + if (o instanceof EntityPlayer && ((EntityPlayer) o).getGameProfile() + .getName() + .equals(name)) { + return ((EntityPlayer) o).getGameProfile() + .getId() + .toString(); + } + } + } + return null; + } + + public boolean isOnlineName(String name) { + for (WorldServer worldServer : MinecraftServer.getServer().worldServers) { + for (Object o : worldServer.playerEntities) { + if (o instanceof EntityPlayer && ((EntityPlayer) o).getGameProfile() + .getName() + .equals(name)) { + return true; + } + } + } + return false; + } + + public boolean isOnlineUUID(String uuid) { + for (WorldServer worldServer : MinecraftServer.getServer().worldServers) { + for (Object o : worldServer.playerEntities) { + if (o instanceof EntityPlayer && ((EntityPlayer) o).getGameProfile() + .getId() + .toString() + .equals(uuid)) { + return true; + } + } + } + return false; + } + +} diff --git a/src/main/java/tectech/recipe/EyeOfHarmonyFrontend.java b/src/main/java/tectech/recipe/EyeOfHarmonyFrontend.java new file mode 100644 index 0000000000..4e1c40eb41 --- /dev/null +++ b/src/main/java/tectech/recipe/EyeOfHarmonyFrontend.java @@ -0,0 +1,206 @@ +package tectech.recipe; + +import static com.google.common.math.LongMath.pow; +import static gregtech.api.util.GTUtility.formatNumbers; +import static java.lang.Math.min; +import static net.minecraft.util.EnumChatFormatting.BOLD; +import static net.minecraft.util.EnumChatFormatting.DARK_RED; +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; +import static tectech.util.CommonValues.EOH_TIER_FANCY_NAMES; + +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.math.Size; + +import appeng.util.ReadableNumberConverter; +import codechicken.nei.PositionedStack; +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.common.gui.modularui.UIHelper; +import gregtech.nei.GTNEIDefaultHandler; +import gregtech.nei.RecipeDisplayInfo; +import gregtech.nei.formatter.INEISpecialInfoFormatter; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class EyeOfHarmonyFrontend extends RecipeMapFrontend { + + private static final int xDirMaxCount = 9; + private static final int itemRows = 9, fluidRows = 2; + public static final int maxItemInputs = 1, maxItemOutputs = xDirMaxCount * itemRows, maxFluidInputs = 0, + maxFluidOutputs = xDirMaxCount * fluidRows; + private static final int yOrigin = 8; + private static final long TRILLION = pow(10, 12); + + public EyeOfHarmonyFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super( + uiPropertiesBuilder.logoPos(new Pos2d(8, yOrigin)), + neiPropertiesBuilder.recipeBackgroundSize(new Size(170, 117 + (itemRows + fluidRows - 4) * 18)) + .neiSpecialInfoFormatter(new EyeOfHarmonySpecialValueFormatter())); + } + + @Override + public List getItemInputPositions(int itemInputCount) { + return UIHelper.getGridPositions(itemInputCount, 79, yOrigin, 1, 1); + } + + public static final int maxItemsToRender = 80; + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return UIHelper.getGridPositions(min(itemOutputCount, maxItemsToRender + 1), 7, yOrigin + 36, xDirMaxCount, 12); + } + + @Override + public List getFluidInputPositions(int fluidInputCount) { + return UIHelper.getGridPositions(fluidInputCount, 0, 0, 0, 0); + } + + @Override + public List getFluidOutputPositions(int fluidOutputCount) { + return UIHelper.getGridPositions(fluidOutputCount, 7, yOrigin + 13 * 17 - 7 - 16, xDirMaxCount, 3); + } + + @Override + public List handleNEIItemTooltip(ItemStack stack, List currentTip, + GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + super.handleNEIItemTooltip(stack, currentTip, neiCachedRecipe); + EyeOfHarmonyRecipe currentRecipe = (EyeOfHarmonyRecipe) neiCachedRecipe.mRecipe.mSpecialItems; + + // Draw tooltip on planet item. + if (stack.isItemEqual(currentRecipe.getRecipeTriggerItem())) { + currentTip.add( + EnumChatFormatting.GRAY + translateToLocalFormatted( + "tt.nei.eoh.total_items", + formatNumbers(currentRecipe.getSumOfItems()))); + return currentTip; + } + + // Draw tooltip on other items. + double percentage = currentRecipe.getItemStackToProbabilityMap() + .getOrDefault(stack, -1.0); + + if (percentage != -1.0) { + currentTip.add(EnumChatFormatting.GRAY + translateToLocalFormatted("tt.nei.eoh.solid_mass", percentage)); + currentTip.add( + EnumChatFormatting.GRAY + translateToLocalFormatted( + "tt.nei.eoh.item_count", + formatNumbers( + currentRecipe.getItemStackToTrueStackSizeMap() + .get(stack)))); + } + + return currentTip; + } + + @Override + public void drawNEIOverlays(GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + EyeOfHarmonyRecipe EOHRecipe = (EyeOfHarmonyRecipe) neiCachedRecipe.mRecipe.mSpecialItems; + for (PositionedStack stack : neiCachedRecipe.mInputs) { + if (stack instanceof GTNEIDefaultHandler.FixedPositionedStack) { + if (stack.item.isItemEqual(EOHRecipe.getRecipeTriggerItem())) { + drawNEIOverlayText(translateToLocal("NC"), stack); + } + } + } + for (PositionedStack stack : neiCachedRecipe.mOutputs) { + if (stack instanceof GTNEIDefaultHandler.FixedPositionedStack) { + if (EOHRecipe.getItemStackToTrueStackSizeMap() + .containsKey(stack.item)) { + long stackSize = EOHRecipe.getItemStackToTrueStackSizeMap() + .get(stack.item); + String displayString; + if (stackSize > 9999) { + displayString = ReadableNumberConverter.INSTANCE.toWideReadableForm(stackSize); + } else { + displayString = String.valueOf(stackSize); + } + + drawNEIOverlayText(displayString, stack, 0xffffff, 0.5f, true, Alignment.BottomRight); + } + } + } + } + + private static class EyeOfHarmonySpecialValueFormatter implements INEISpecialInfoFormatter { + + @Override + public List format(RecipeDisplayInfo recipeInfo) { + EyeOfHarmonyRecipe recipe = (EyeOfHarmonyRecipe) recipeInfo.recipe.mSpecialItems; + List result = new ArrayList<>(); + + result.add( + GTLanguageManager.addStringLocalization("EOH.Recipe.Hydrogen.In", "Hydrogen") + ": " + + formatNumbers(recipe.getHydrogenRequirement()) + + " L"); + result.add( + GTLanguageManager.addStringLocalization("EOH.Recipe.Helium.In", "Helium") + ": " + + formatNumbers(recipe.getHydrogenRequirement()) + + " L"); + result.add( + GTLanguageManager.addStringLocalization("EOH.Recipe.SpacetimeTier", "Spacetime Tier") + ": " + + EOH_TIER_FANCY_NAMES[(int) recipe.getSpacetimeCasingTierRequired()]); + + if (recipe.getEUOutput() < TRILLION) { + result.add( + GTLanguageManager.addStringLocalization("EOH.Recipe.EU.Out", "EU Output") + ": " + + formatNumbers(recipe.getEUOutput()) + + " EU"); + } else { + result.add( + GTLanguageManager.addStringLocalization("EOH.Recipe.EU.Out", "EU Output") + ": " + + ReadableNumberConverter.INSTANCE.toWideReadableForm(recipe.getEUOutput()) + + " EU"); + } + + if (recipe.getEUOutput() < TRILLION) { + result.add( + GTLanguageManager.addStringLocalization("EOH.Recipe.EU.In", "EU Input") + ": " + + formatNumbers(recipe.getEUStartCost()) + + " EU"); + } else { + result.add( + GTLanguageManager.addStringLocalization("EOH.Recipe.EU.In", "EU Input") + ": " + + ReadableNumberConverter.INSTANCE.toWideReadableForm(recipe.getEUStartCost()) + + " EU"); + } + + result.add( + GTLanguageManager.addStringLocalization("EOH.Recipe.BaseRecipeChance", "Base Recipe Chance") + ": " + + formatNumbers(100 * recipe.getBaseRecipeSuccessChance()) + + "%"); + result.add( + GTLanguageManager.addStringLocalization("EOH.Recipe.RecipeEnergyEfficiency", "Recipe Energy Efficiency") + + ": " + + formatNumbers(100 * recipe.getRecipeEnergyEfficiency()) + + "%"); + + if (recipe.getOutputItems() + .size() > maxItemsToRender) { + result.add( + "" + DARK_RED + + BOLD + + GTLanguageManager.addStringLocalization("EOH.Recipe.Warning.0", "Warning") + + RESET + + ": " + + GTLanguageManager.addStringLocalization("EOH.Recipe.Warning.1", "Not all items displayed.")); + } + + return result; + } + } +} diff --git a/src/main/java/tectech/recipe/EyeOfHarmonyRecipe.java b/src/main/java/tectech/recipe/EyeOfHarmonyRecipe.java new file mode 100644 index 0000000000..90acd63048 --- /dev/null +++ b/src/main/java/tectech/recipe/EyeOfHarmonyRecipe.java @@ -0,0 +1,465 @@ +package tectech.recipe; + +import static com.google.common.math.IntMath.pow; +import static gregtech.api.GregTechAPI.getUnificatedOreDictStack; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.util.GTModHandler.getModItem; +import static gregtech.api.util.GTUtility.getPlasmaFuelValueInEUPerLiterFromMaterial; +import static java.lang.Math.min; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.tuple.Pair; + +import gnu.trove.map.TMap; +import gnu.trove.map.hash.TCustomHashMap; +import gnu.trove.strategy.HashingStrategy; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; +import gtneioreplugin.plugin.block.BlockDimensionDisplay; +import gtneioreplugin.util.GT5OreLayerHelper; +import gtneioreplugin.util.GT5OreSmallHelper; +import tectech.util.FluidStackLong; +import tectech.util.ItemStackLong; + +@SuppressWarnings("SpellCheckingInspection") +public class EyeOfHarmonyRecipe { + + static final FluidStackLong[] SPECIAL_FLUIDS = new FluidStackLong[] { + new FluidStackLong(MaterialsUEVplus.WhiteDwarfMatter.getMolten(1_152), 1_152), + new FluidStackLong(MaterialsUEVplus.WhiteDwarfMatter.getMolten(1_152), 1_152), + new FluidStackLong(MaterialsUEVplus.WhiteDwarfMatter.getMolten(4_608), 4_608), + new FluidStackLong(MaterialsUEVplus.WhiteDwarfMatter.getMolten(18_432), 18_432), + new FluidStackLong(MaterialsUEVplus.BlackDwarfMatter.getMolten(1_152), 1_152), + new FluidStackLong(MaterialsUEVplus.BlackDwarfMatter.getMolten(4_608), 4_608), + new FluidStackLong(MaterialsUEVplus.BlackDwarfMatter.getMolten(18_432), 18_432), + new FluidStackLong(MaterialsUEVplus.Universium.getMolten(1_152), 1_152), + new FluidStackLong(MaterialsUEVplus.Universium.getMolten(4_608), 4_608), + new FluidStackLong(MaterialsUEVplus.Universium.getMolten(18_432), 18_432) }; + + HashingStrategy itemStackHashingStrategy = new HashingStrategy<>() { + + private static final long serialVersionUID = -3966004160368229212L; + + @Override + public int computeHashCode(ItemStack stack) { + // Not really sure how this works or if it is "unique enough". + int result = stack.getItem() + .hashCode(); + result = 31 * result + stack.getItemDamage(); + return result; + } + + @Override + public boolean equals(ItemStack item1, ItemStack item2) { + return item1.getUnlocalizedName() + .equals(item2.getUnlocalizedName()); + } + }; + + private final TMap itemStackToProbabilityMap = new TCustomHashMap<>(itemStackHashingStrategy); + private final TMap itemStackToTrueStackSizeMap = new TCustomHashMap<>(itemStackHashingStrategy); + + private final ArrayList outputItems; + private final ArrayList outputFluids; + + private final long hydrogenRequirement; + private final long heliumRequirement; + + private final long euOutput; + private final long euStartCost; + + private final double baseSuccessChance; + + private final long spacetimeCasingTierRequired; + + private final long miningTimeSeconds; + + private final double recipeEnergyEfficiency; + + private final ItemStack recipeTriggerItem; + + private final long sumOfItems; + private final long rocketTier; + + public TMap getItemStackToProbabilityMap() { + return itemStackToProbabilityMap; + } + + public TMap getItemStackToTrueStackSizeMap() { + return itemStackToTrueStackSizeMap; + } + + public double getRecipeEnergyEfficiency() { + return recipeEnergyEfficiency; + } + + @SuppressWarnings("FieldCanBeLocal") + private final long standardRecipeEUOutPerTick = 100 * EyeOfHarmonyRecipeStorage.BILLION; + + public long getSumOfItems() { + return sumOfItems; + } + + public long getRocketTier() { + return rocketTier; + } + + public EyeOfHarmonyRecipe(final ArrayList> materialList, final BlockDimensionDisplay block, + final double recipeEnergyEfficiency, final long hydrogenRequirement, final long heliumRequirement, + final long miningTimeSeconds, final long rocketTierOfRecipe, final double baseSuccessChance) { + + this.rocketTier = rocketTierOfRecipe; + this.spacetimeCasingTierRequired = min(8, rocketTierOfRecipe); + + this.recipeTriggerItem = new ItemStack(block); + + this.outputItems = validDustGenerator(materialList); + + this.sumOfItems = this.outputItems.stream() + .map(ItemStackLong::getStackSize) + .reduce(0L, Long::sum); + + this.outputItems.add(new ItemStackLong(getStoneDustType(block.getDimension()), this.sumOfItems * 3L)); + this.outputItems.sort(Comparator.comparingLong(ItemStackLong::getStackSize)); + Collections.reverse(this.outputItems); + + for (ItemStackLong itemStackLong : outputItems) { + double stackSize = (double) itemStackLong.getStackSize(); + double probability = Math.round(100_000 * stackSize / sumOfItems) / 1000.0; + + itemStackToProbabilityMap.put(itemStackLong.itemStack, probability); + itemStackToTrueStackSizeMap.put(itemStackLong.itemStack, itemStackLong.stackSize); + } + // End item processing. + + // --- Fluid handling --- + ArrayList fluidStackLongArrayList = new ArrayList<>(); + + int plasmaAmount = (int) ((this.spacetimeCasingTierRequired + 1) * 8_000_000L); + + // If DeepDark then it should output all plasmas involved in making exotic catalyst. + if (rocketTier == 9) { + for (Materials material : VALID_PLASMAS) { + fluidStackLongArrayList.add(new FluidStackLong(material.getPlasma(plasmaAmount), plasmaAmount)); + } + } else { + // --- Output and process fluids of the recipe. + ArrayList fluidStackArrayList = new ArrayList<>(validPlasmaGenerator(materialList)); + for (FluidStack fluidStack : fluidStackArrayList) { + fluidStack = new FluidStack(fluidStack, plasmaAmount); + fluidStackLongArrayList.add(new FluidStackLong(fluidStack, plasmaAmount)); + } + } + + // Add a bonus fluid of compressed star matter. + fluidStackLongArrayList.add( + new FluidStackLong( + MaterialsUEVplus.RawStarMatter.getFluid((this.spacetimeCasingTierRequired + 1) * 100_000), + (this.spacetimeCasingTierRequired + 1) * 100_000)); + + // Tier 0 & 1 - 576 White + // Tier 2 - 2304 White + // Tier 3 - 9216 White + + // Tier 4 - 576 Black + // Tier 5 - 2304 Black + // Tier 6 - 9216 Black + + // Tier 7 - 576 Universium + // Tier 8 - 2304 Universium + // Tier 9 - 9216 Universium + int spacetimeTier = (int) rocketTierOfRecipe; + if (spacetimeTier == 0 || spacetimeTier == 9) { + spacetimeTier -= 1; + } + fluidStackLongArrayList.add(SPECIAL_FLUIDS[spacetimeTier + 1]); + + outputFluids = fluidStackLongArrayList; + // --- End fluid handling ---. + + this.hydrogenRequirement = hydrogenRequirement; + this.heliumRequirement = heliumRequirement; + + this.baseSuccessChance = baseSuccessChance; + + this.miningTimeSeconds = miningTimeSeconds; + this.recipeEnergyEfficiency = recipeEnergyEfficiency; + + long plasmaEU = plasmaCostCalculator(outputFluids); + long VM3EU = miningTimeSeconds * pow(2, 19) * 20; + this.euStartCost = (plasmaEU + VM3EU + standardRecipeEUOutPerTick * 20 * miningTimeSeconds); + this.euOutput = (long) (euStartCost * recipeEnergyEfficiency); + } + + private ItemStack getStoneDustType(String key) { + ItemStack placeholder = GTOreDictUnificator.get(OrePrefixes.dust, Materials.Stone, 1); + return switch (key) { + case "Ne" -> GTOreDictUnificator.get(OrePrefixes.dust, Materials.Netherrack, 1); + case "ED", "VA", "EA" -> GTOreDictUnificator.get(OrePrefixes.dust, Materials.Endstone, 1); + case "Mo" -> getModItem(NewHorizonsCoreMod.ID, "item.MoonStoneDust", 1, placeholder); + case "De" -> getModItem(NewHorizonsCoreMod.ID, "item.DeimosStoneDust", 1, placeholder); + case "Ma" -> getModItem(NewHorizonsCoreMod.ID, "item.MarsStoneDust", 1, placeholder); + case "Ph" -> getModItem(NewHorizonsCoreMod.ID, "item.PhobosStoneDust", 1, placeholder); + case "As", "KB" -> getModItem(NewHorizonsCoreMod.ID, "item.AsteroidsStoneDust", 1, placeholder); + case "Ca" -> getModItem(NewHorizonsCoreMod.ID, "item.CallistoStoneDust", 1, placeholder); + case "Ce" -> getModItem(NewHorizonsCoreMod.ID, "item.CeresStoneDust", 1, placeholder); + case "Eu" -> getModItem(NewHorizonsCoreMod.ID, "item.EuropaStoneDust", 1, placeholder); + case "Ga" -> getModItem(NewHorizonsCoreMod.ID, "item.GanymedeStoneDust", 1, placeholder); + case "Io" -> getModItem(NewHorizonsCoreMod.ID, "item.IoStoneDust", 1, placeholder); + case "Me" -> getModItem(NewHorizonsCoreMod.ID, "item.MercuryStoneDust", 1, placeholder); + case "Ve" -> getModItem(NewHorizonsCoreMod.ID, "item.VenusStoneDust", 1, placeholder); + case "En" -> getModItem(NewHorizonsCoreMod.ID, "item.EnceladusStoneDust", 1, placeholder); + case "Mi" -> getModItem(NewHorizonsCoreMod.ID, "item.MirandaStoneDust", 1, placeholder); + case "Ob" -> getModItem(NewHorizonsCoreMod.ID, "item.OberonStoneDust", 1, placeholder); + case "Ti" -> getModItem(NewHorizonsCoreMod.ID, "item.TitanStoneDust", 1, placeholder); + case "Pr" -> getModItem(NewHorizonsCoreMod.ID, "item.ProteusStoneDust", 1, placeholder); + case "Tr" -> getModItem(NewHorizonsCoreMod.ID, "item.TritonStoneDust", 1, placeholder); + case "Ha" -> getModItem(NewHorizonsCoreMod.ID, "item.HaumeaStoneDust", 1, placeholder); + case "MM" -> getModItem(NewHorizonsCoreMod.ID, "item.MakeMakeStoneDust", 1, placeholder); + case "Pl" -> getModItem(NewHorizonsCoreMod.ID, "item.PlutoStoneDust", 1, placeholder); + case "BE" -> getModItem(NewHorizonsCoreMod.ID, "item.BarnardaEStoneDust", 1, placeholder); + case "BF" -> getModItem(NewHorizonsCoreMod.ID, "item.BarnardaFStoneDust", 1, placeholder); + case "CB" -> getModItem(NewHorizonsCoreMod.ID, "item.CentauriAStoneDust", 1, placeholder); + case "TE" -> getModItem(NewHorizonsCoreMod.ID, "item.TCetiEStoneDust", 1, placeholder); + case "VB" -> getModItem(NewHorizonsCoreMod.ID, "item.VegaBStoneDust", 1, placeholder); + default -> placeholder; + }; + } + + public EyeOfHarmonyRecipe(final GT5OreLayerHelper.NormalOreDimensionWrapper normalOreDimensionWrapper, + final GT5OreSmallHelper.SmallOreDimensionWrapper smallOreDimensionWrapper, final BlockDimensionDisplay block, + final double recipeEnergyEfficiency, final long hydrogenRequirement, final long heliumRequirement, + final long miningTimeSeconds, final long spacetimeCasingTierRequired, final double baseSuccessChance) { + + // Process recipes output items. + // 6 * 64 = 6 stacks/second for VM tier 3 + Og gas. + this( + processDimension(normalOreDimensionWrapper, smallOreDimensionWrapper, miningTimeSeconds), + block, + recipeEnergyEfficiency, + hydrogenRequirement, + heliumRequirement, + miningTimeSeconds, + spacetimeCasingTierRequired, + baseSuccessChance); + } + + // Return clone of list. Deep copy. Maybe a better way to do this? + public ArrayList getOutputItems() { + ArrayList copyOutputList = new ArrayList<>(); + for (ItemStackLong itemStackLong : outputItems) { + copyOutputList.add(new ItemStackLong(itemStackLong)); + } + + return copyOutputList; + } + + // Deep copy. + public ArrayList getOutputFluids() { + ArrayList copyOutputList = new ArrayList<>(); + + for (FluidStackLong fluidStackLong : outputFluids) { + copyOutputList.add(new FluidStackLong(fluidStackLong)); + } + + return copyOutputList; + } + + public long getHydrogenRequirement() { + return hydrogenRequirement; + } + + public long getHeliumRequirement() { + return heliumRequirement; + } + + public long getEUOutput() { + return euOutput; + } + + public long getEUStartCost() { + return euStartCost; + } + + public long getRecipeTimeInTicks() { + return miningTimeSeconds * 20; + } + + public double getBaseRecipeSuccessChance() { + return baseSuccessChance; + } + + public long getSpacetimeCasingTierRequired() { + return spacetimeCasingTierRequired; + } + + public ItemStack getRecipeTriggerItem() { + return recipeTriggerItem; + } + + private static final double PRIMARY_MULTIPLIER = (0.1 + 1.0 / 9.0); // Byproduct from macerating/washing chance. + private static final double SECONDARY_MULTIPLIER = (1.0 / 9.0); // Thermal centrifuge byproduct chance. + private static final double TERTIARY_MULTIPLIER = (0.1); // Macerating thermal centrifuged byproduct chance. + private static final double QUATERNARY_MULTIPLIER = (0.7); // Mercury/chem bath processing chance. + + private static final double[] ORE_MULTIPLIER = { PRIMARY_MULTIPLIER, SECONDARY_MULTIPLIER, TERTIARY_MULTIPLIER, + QUATERNARY_MULTIPLIER }; + + public static class HashMapHelper extends HashMap { + + private static final long serialVersionUID = 2297018142561480614L; + + void add(Materials material, double value) { + + // If key already exists. + if (this.containsKey(material)) { + this.put(material, value + this.get(material)); + return; + } + + // Otherwise, add value to hashmap entry. + this.put(material, value); + } + } + + public static void processHelper(HashMapHelper outputMap, Materials material, double mainMultiplier, + double probability) { + if (material == null) return; + outputMap.add(material.mDirectSmelting, (material.mOreMultiplier * 2) * mainMultiplier * probability); + + int index = 0; + for (Materials byProductMaterial : material.mOreByProducts) { + outputMap + .add(byProductMaterial.mDirectSmelting, mainMultiplier * (ORE_MULTIPLIER[index++] * 2) * probability); + } + } + + private static ArrayList> processDimension( + GT5OreLayerHelper.NormalOreDimensionWrapper normalOreDimWrapper, + GT5OreSmallHelper.SmallOreDimensionWrapper smallOreDimWrapper, long timeInSeconds) { + HashMapHelper outputMap = new HashMapHelper(); + + double mainMultiplier = timeInSeconds * 384.0; + + if (normalOreDimWrapper != null) { + normalOreDimWrapper.oreVeinToProbabilityInDimension.forEach((veinInfo, probability) -> { + processHelper(outputMap, veinInfo.mPrimaryVeinMaterial, mainMultiplier, probability); + processHelper(outputMap, veinInfo.mSecondaryMaterial, mainMultiplier, probability); + // 8.0 to replicate void miner getDropsVanillaVeins method yields. + processHelper(outputMap, veinInfo.mBetweenMaterial, mainMultiplier / 8.0, probability); + processHelper(outputMap, veinInfo.mSporadicMaterial, mainMultiplier / 8.0, probability); + }); + } + + // Iterate over small ores in dimension and add them, kinda hacky but works and is close enough. + if (smallOreDimWrapper != null) { + smallOreDimWrapper.oreVeinToProbabilityInDimension.forEach( + (veinInfo, + probability) -> processHelper(outputMap, veinInfo.getOreMaterial(), mainMultiplier, probability)); + } + + ArrayList> outputList = new ArrayList<>(); + + outputMap.forEach((material, quantity) -> outputList.add(Pair.of(material, (long) Math.floor(quantity)))); + + return outputList; + } + + private static ArrayList validPlasmaGenerator(final List> planetList) { + + ArrayList plasmaList = new ArrayList<>(); + + for (Pair pair : planetList) { + if (VALID_PLASMAS.contains(pair.getLeft())) { + plasmaList.add( + pair.getLeft() + .getPlasma(1)); + } + } + + return plasmaList; + } + + private static ArrayList validDustGenerator(final ArrayList> planetList) { + + ArrayList dustList = new ArrayList<>(); + + for (Pair pair : planetList) { + ItemStack dust = getUnificatedOreDictStack( + pair.getLeft() + .getDust(1)); + if (dust != null) { + dustList.add(new ItemStackLong(dust, pair.getRight())); + } + } + return dustList; + } + + private static long plasmaCostCalculator(ArrayList plasmas) { + long total = 0; + + for (FluidStackLong plasma : plasmas) { + FluidStack plasmaFluid = plasma.getRegularFluidStack(plasma, 1); + try { + String plasmaName = plasmaFluid.getFluid() + .getUnlocalizedName(); + total += plasmaEnergyMap.getOrDefault(plasmaName, 0L) * plasma.amount; + } catch (Exception e) { + e.printStackTrace(); + } + } + + return (long) (total * getMaxPlasmaTurbineEfficiency()); + } + + private static double getMaxPlasmaTurbineEfficiency() { + // I hate Shirabon. + return 3.85; + } + + private static final List VALID_PLASMAS = Stream + .of( + Materials.Helium, + Materials.Iron, + Materials.Calcium, + Materials.Niobium, + Materials.Nitrogen, + Materials.Zinc, + Materials.Silver, + Materials.Titanium, + Materials.Radon, + Materials.Nickel, + Materials.Boron, + Materials.Sulfur, + Materials.Americium, + Materials.Bismuth, + Materials.Oxygen, + Materials.Tin) + .collect(Collectors.toList()); + + private static final HashMap plasmaEnergyMap = new HashMap<>() { + + private static final long serialVersionUID = 7933945171103801933L; + + { + VALID_PLASMAS.forEach( + (material -> put( + material.getPlasma(1) + .getFluid() + .getUnlocalizedName(), + (long) (getPlasmaFuelValueInEUPerLiterFromMaterial(material) * getMaxPlasmaTurbineEfficiency())))); + } + }; +} diff --git a/src/main/java/tectech/recipe/EyeOfHarmonyRecipeStorage.java b/src/main/java/tectech/recipe/EyeOfHarmonyRecipeStorage.java new file mode 100644 index 0000000000..30671dc919 --- /dev/null +++ b/src/main/java/tectech/recipe/EyeOfHarmonyRecipeStorage.java @@ -0,0 +1,186 @@ +package tectech.recipe; + +import static java.lang.Math.pow; +import static tectech.recipe.EyeOfHarmonyRecipe.processHelper; +import static tectech.recipe.TecTechRecipeMaps.eyeOfHarmonyRecipes; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.tuple.Pair; + +import com.google.common.math.LongMath; + +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.util.GTOreDictUnificator; +import gtneioreplugin.plugin.block.BlockDimensionDisplay; +import gtneioreplugin.plugin.block.ModBlocks; +import gtneioreplugin.util.DimensionHelper; +import gtneioreplugin.util.GT5OreLayerHelper; +import gtneioreplugin.util.GT5OreSmallHelper; +import tectech.util.FluidStackLong; +import tectech.util.ItemStackLong; + +public class EyeOfHarmonyRecipeStorage { + + public static final long BILLION = LongMath.pow(10, 9); + private static final double CHANCE_DECREASE_PER_DIMENSION = 0.05; + + // Map is unique so this is fine. + HashMap blocksMapInverted = new HashMap<>() { + + private static final long serialVersionUID = -1634011860327553337L; + + { + ModBlocks.blocks.forEach((dimString, dimBlock) -> { put(dimBlock, dimString); }); + } + }; + + private final HashMap recipeHashMap = new HashMap() { + + private static final long serialVersionUID = -3501819612517400500L; + + { + for (String dimAbbreviation : DimensionHelper.DimNameDisplayed) { + BlockDimensionDisplay blockDimensionDisplay = (BlockDimensionDisplay) ModBlocks.blocks + .get(dimAbbreviation); + + if (dimAbbreviation.equals("DD")) { + specialDeepDarkRecipe(this, blockDimensionDisplay); + } else { + + GT5OreLayerHelper.NormalOreDimensionWrapper normalOre = GT5OreLayerHelper.dimToOreWrapper + .getOrDefault(dimAbbreviation, null); + GT5OreSmallHelper.SmallOreDimensionWrapper smallOre = GT5OreSmallHelper.dimToSmallOreWrapper + .getOrDefault(dimAbbreviation, null); + if (normalOre == null && smallOre == null) { + // No ores are generated in this dimension. Fail silently. + continue; + } + + long spacetimeTier = blockDimensionDisplay.getDimensionRocketTier(); + if (spacetimeTier == 0) { + spacetimeTier += 1; + } + + put( + dimAbbreviation, + new EyeOfHarmonyRecipe( + normalOre, + smallOre, + blockDimensionDisplay, + 0.6 + blockDimensionDisplay.getDimensionRocketTier() / 10.0, + BILLION * (blockDimensionDisplay.getDimensionRocketTier() + 1), + BILLION * (blockDimensionDisplay.getDimensionRocketTier() + 1), + timeCalculator(blockDimensionDisplay.getDimensionRocketTier()), + spacetimeTier - 1, + 1.0 - CHANCE_DECREASE_PER_DIMENSION * blockDimensionDisplay.getDimensionRocketTier())); + } + } + } + }; + + public EyeOfHarmonyRecipe recipeLookUp(final ItemStack aStack) { + String dimAbbreviation = blocksMapInverted.get(Block.getBlockFromItem(aStack.getItem())); + return recipeHashMap.get(dimAbbreviation); + } + + public EyeOfHarmonyRecipeStorage() { + + for (EyeOfHarmonyRecipe recipe : recipeHashMap.values()) { + + ArrayList outputItems = new ArrayList<>(); + for (ItemStackLong itemStackLong : recipe.getOutputItems()) { + outputItems.add(itemStackLong.itemStack); + } + + ArrayList outputFluids = new ArrayList<>(); + for (FluidStackLong fluidStackLong : recipe.getOutputFluids()) { + outputFluids.add(fluidStackLong.fluidStack); + } + + ItemStack planetItem = recipe.getRecipeTriggerItem() + .copy(); + planetItem.stackSize = 0; + + GTValues.RA.stdBuilder() + .itemInputs(planetItem) + .itemOutputs(outputItems.toArray(new ItemStack[0])) + .fluidInputs( + Materials.Hydrogen.getGas(0), + Materials.Helium.getGas(0), + MaterialsUEVplus.RawStarMatter.getFluid(0)) + .fluidOutputs(outputFluids.toArray(new FluidStack[0])) + .duration(recipe.getRecipeTimeInTicks()) + .eut(0) + .special(recipe) + .noOptimize() + .addTo(eyeOfHarmonyRecipes); + } + } + + private void specialDeepDarkRecipe(final HashMap hashMap, + final BlockDimensionDisplay planetItem) { + + HashSet validMaterialSet = new HashSet<>(); + + for (Materials material : Materials.values()) { + + ItemStack normalOre = GTOreDictUnificator.get(OrePrefixes.ore, material, 1); + + if ((normalOre != null)) { + validMaterialSet.add(material); + } + + ItemStack smallOre = GTOreDictUnificator.get(OrePrefixes.oreSmall, material, 1); + + if ((smallOre != null)) { + validMaterialSet.add(material); + } + } + + ArrayList validMaterialList = new ArrayList<>(validMaterialSet); + + long rocketTier = 9; + + hashMap.put( + "DD", + new EyeOfHarmonyRecipe( + processDD(validMaterialList), + planetItem, + 0.6 + rocketTier / 10.0, + BILLION * (rocketTier + 1), + BILLION * (rocketTier + 1), + timeCalculator(rocketTier), + rocketTier, // -1 so that we avoid out of bounds exception on NEI render. + 1.0 - rocketTier * CHANCE_DECREASE_PER_DIMENSION)); + } + + private static long timeCalculator(final long rocketTier) { + return (long) (18_000L * pow(1.4, rocketTier)); + } + + private ArrayList> processDD(final ArrayList validMaterialList) { + EyeOfHarmonyRecipe.HashMapHelper outputMap = new EyeOfHarmonyRecipe.HashMapHelper(); + + // 10 from rocketTier + 1, 6 * 64 = VM3 + Og, 1.4 = time increase per tier. + double mainMultiplier = (timeCalculator(10) * (6 * 64)); + double probability = 1.0 / validMaterialList.size(); + + validMaterialList.forEach((material) -> { processHelper(outputMap, material, mainMultiplier, probability); }); + + ArrayList> outputList = new ArrayList<>(); + + outputMap.forEach((material, quantity) -> outputList.add(Pair.of(material, (long) Math.floor(quantity)))); + + return outputList; + } +} diff --git a/src/main/java/tectech/recipe/GodforgeExoticFrontend.java b/src/main/java/tectech/recipe/GodforgeExoticFrontend.java new file mode 100644 index 0000000000..cb19f8862d --- /dev/null +++ b/src/main/java/tectech/recipe/GodforgeExoticFrontend.java @@ -0,0 +1,82 @@ +package tectech.recipe; + +import static gregtech.api.util.GTUtility.trans; +import static tectech.loader.recipe.Godforge.magmatterItemsForNEI; +import static tectech.loader.recipe.Godforge.magmatterSpaceFluidItemsForNEI; +import static tectech.loader.recipe.Godforge.magmatterTimeFluidItemsForNEI; +import static tectech.loader.recipe.Godforge.quarkGluonFluidItemsForNEI; +import static tectech.loader.recipe.Godforge.quarkGluonItemsForNEI; + +import java.util.Collections; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; + +import codechicken.nei.PositionedStack; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.nei.GTNEIDefaultHandler; +import gregtech.nei.RecipeDisplayInfo; +import tectech.thing.gui.TecTechUITextures; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class GodforgeExoticFrontend extends RecipeMapFrontend { + + public GodforgeExoticFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder, Pos2d windowOffset) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO) + .setSize(18, 18) + .setPos(new Pos2d(151, 63).add(windowOffset))); + } + + @Override + public void drawNEIOverlays(GTNEIDefaultHandler.CachedDefaultRecipe neiCachedRecipe) { + if (neiCachedRecipe.mRecipe.mFluidOutputs[0].equals(MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000))) { + neiCachedRecipe.mInputs.set(0, new PositionedStack(quarkGluonItemsForNEI, 48, 23, true)); + neiCachedRecipe.mInputs.set(1, new PositionedStack(quarkGluonFluidItemsForNEI, 48, 52, true)); + } else { + neiCachedRecipe.mInputs.set(0, new PositionedStack(magmatterItemsForNEI, 48, 23, true)); + neiCachedRecipe.mInputs.set(1, new PositionedStack(magmatterSpaceFluidItemsForNEI, 30, 52, true)); + neiCachedRecipe.mInputs.set(2, new PositionedStack(magmatterTimeFluidItemsForNEI, 48, 52, true)); + } + } + + @Override + public List getItemInputPositions(int itemInputCount) { + return Collections.singletonList(new Pos2d(52, 33)); + } + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return Collections.singletonList(new Pos2d(106, 33)); + } + + @Override + protected void drawEnergyInfo(RecipeDisplayInfo recipeInfo) { + long eut = recipeInfo.recipe.mEUt; + long duration = recipeInfo.recipe.mDuration; + recipeInfo.drawText(trans("152", "Total: ") + GTUtility.formatNumbers(eut * duration) + " EU"); + recipeInfo.drawText(trans("153", "Usage: ") + GTUtility.formatNumbers(eut) + " EU/t"); + recipeInfo.drawText(trans("158", "Time: ") + GTUtility.formatNumbers(duration / 20) + " secs"); + + } + + @Override + protected void drawDurationInfo(RecipeDisplayInfo recipeInfo) {} + +} diff --git a/src/main/java/tectech/recipe/GodforgePlasmaFrontend.java b/src/main/java/tectech/recipe/GodforgePlasmaFrontend.java new file mode 100644 index 0000000000..5dfc46b1cf --- /dev/null +++ b/src/main/java/tectech/recipe/GodforgePlasmaFrontend.java @@ -0,0 +1,79 @@ +package tectech.recipe; + +import static gregtech.api.util.GTUtility.trans; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.Collections; +import java.util.List; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.nei.RecipeDisplayInfo; +import tectech.thing.gui.TecTechUITextures; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class GodforgePlasmaFrontend extends RecipeMapFrontend { + + public GodforgePlasmaFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder, Pos2d windowOffset) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO) + .setSize(18, 18) + .setPos(new Pos2d(151, 63).add(windowOffset))); + } + + @Override + public List getItemInputPositions(int itemInputCount) { + return Collections.singletonList(new Pos2d(52, 33)); + } + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return Collections.singletonList(new Pos2d(106, 33)); + } + + @Override + protected void drawEnergyInfo(RecipeDisplayInfo recipeInfo) { + long eut = recipeInfo.recipe.mEUt; + long duration = recipeInfo.recipe.mDuration; + String multistep = "No"; + if (recipeInfo.recipe.mSpecialItems.toString() + .equals("true")) { + multistep = "Yes"; + } + String requiredUpgrade = switch (recipeInfo.recipe.mSpecialValue) { + case 1 -> "T4-T5"; + case 2 -> "Exotic"; + default -> "T1-T3"; + }; + + recipeInfo.drawText(trans("152", "Total: ") + GTUtility.formatNumbers(eut * duration) + " EU"); + recipeInfo.drawText(trans("153", "Usage: ") + GTUtility.formatNumbers(eut) + " EU/t"); + recipeInfo.drawText( + trans("158", "Time: ") + GTUtility.formatNumbers(duration / 20d) + + " secs" + + (duration < 20 ? " (" + duration + " ticks)" : "")); + recipeInfo.drawText(translateToLocal("gt.blockmachines.multimachine.FOG.plasmamultistep") + ": " + multistep); + recipeInfo + .drawText(translateToLocal("gt.blockmachines.multimachine.FOG.plasmarecipetier") + ": " + requiredUpgrade); + } + + @Override + protected void drawDurationInfo(RecipeDisplayInfo recipeInfo) {} + +} diff --git a/src/main/java/tectech/recipe/ResearchStationFrontend.java b/src/main/java/tectech/recipe/ResearchStationFrontend.java new file mode 100644 index 0000000000..ce26215fbb --- /dev/null +++ b/src/main/java/tectech/recipe/ResearchStationFrontend.java @@ -0,0 +1,101 @@ +package tectech.recipe; + +import static gregtech.api.util.GTUtility.trans; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import java.util.Collections; +import java.util.List; +import java.util.function.Supplier; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; + +import gregtech.api.recipe.BasicUIPropertiesBuilder; +import gregtech.api.recipe.NEIRecipePropertiesBuilder; +import gregtech.api.recipe.RecipeMapFrontend; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MethodsReturnNonnullByDefault; +import gregtech.nei.RecipeDisplayInfo; +import tectech.thing.gui.TecTechUITextures; + +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +public class ResearchStationFrontend extends RecipeMapFrontend { + + public ResearchStationFrontend(BasicUIPropertiesBuilder uiPropertiesBuilder, + NEIRecipePropertiesBuilder neiPropertiesBuilder) { + super(uiPropertiesBuilder, neiPropertiesBuilder); + } + + @Override + public List getItemInputPositions(int itemInputCount) { + return Collections.singletonList(new Pos2d(52, 33)); + } + + @Override + public List getItemOutputPositions(int itemOutputCount) { + return Collections.singletonList(new Pos2d(106, 33)); + } + + @Override + public Pos2d getSpecialItemPosition() { + return new Pos2d(124, 62); + } + + @Override + protected void drawEnergyInfo(RecipeDisplayInfo recipeInfo) { + long eut = recipeInfo.recipe.mEUt; + int computation = recipeInfo.recipe.mDuration; + short ampere = (short) (recipeInfo.recipe.mSpecialValue & 0xFFFF); + short minComputationPerSec = (short) (recipeInfo.recipe.mSpecialValue >>> 16); + recipeInfo.drawText( + translateToLocalFormatted( + "tt.nei.research.max_eu", + GTUtility.formatNumbers( + (1 + (computation - minComputationPerSec) / minComputationPerSec) * eut * ampere * 20))); + recipeInfo.drawText(trans("153", "Usage: ") + GTUtility.formatNumbers(eut * ampere) + " EU/t"); + recipeInfo.drawText(trans("154", "Voltage: ") + GTUtility.formatNumbers(eut) + " EU/t"); + recipeInfo.drawText(trans("155", "Amperage: ") + GTUtility.formatNumbers(ampere)); + recipeInfo + .drawText(translateToLocalFormatted("tt.nei.research.computation", GTUtility.formatNumbers(computation))); + recipeInfo.drawText( + translateToLocalFormatted( + "tt.nei.research.min_computation", + GTUtility.formatNumbers(minComputationPerSec))); + } + + @Override + protected void drawDurationInfo(RecipeDisplayInfo recipeInfo) {} + + @Override + public void addProgressBar(ModularWindow.Builder builder, Supplier progressSupplier, Pos2d windowOffset) { + int bar1Width = 25; + int bar2Width = 11; + int bar3Height = 18; + List> splitProgress = splitProgress(progressSupplier, bar1Width, bar2Width, bar3Height); + builder.widget( + new ProgressBar().setTexture(TecTechUITextures.PROGRESSBAR_RESEARCH_STATION_1, bar1Width) + .setDirection(ProgressBar.Direction.RIGHT) + .setProgress(splitProgress.get(0)) + .setSynced(false, false) + .setPos(new Pos2d(81, 40).add(windowOffset)) + .setSize(bar1Width, 5)); + builder.widget( + new ProgressBar().setTexture(TecTechUITextures.PROGRESSBAR_RESEARCH_STATION_2, bar2Width) + .setDirection(ProgressBar.Direction.RIGHT) + .setProgress(splitProgress.get(1)) + .setSynced(false, false) + .setPos(new Pos2d(124, 40).add(windowOffset)) + .setSize(bar2Width, 5)); + builder.widget( + new ProgressBar().setTexture(TecTechUITextures.PROGRESSBAR_RESEARCH_STATION_3, bar3Height) + .setDirection(ProgressBar.Direction.DOWN) + .setProgress(splitProgress.get(2)) + .setSynced(false, false) + .setPos(new Pos2d(128, 44).add(windowOffset)) + .setSize(10, bar3Height)); + } +} diff --git a/src/main/java/tectech/recipe/TTRecipeAdder.java b/src/main/java/tectech/recipe/TTRecipeAdder.java new file mode 100644 index 0000000000..69068afce0 --- /dev/null +++ b/src/main/java/tectech/recipe/TTRecipeAdder.java @@ -0,0 +1,251 @@ +package tectech.recipe; + +import static gregtech.api.recipe.RecipeMaps.assemblylineVisualRecipes; +import static gregtech.api.util.GTRecipeConstants.RESEARCH_STATION_DATA; +import static tectech.recipe.TecTechRecipeMaps.researchStationFakeRecipes; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; + +import net.minecraft.init.Items; +import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.ItemList; +import gregtech.api.util.AssemblyLineUtils; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTRecipe.RecipeAssemblyLine; +import gregtech.api.util.GTUtility; +import gregtech.common.RecipeAdder; +import tectech.TecTech; +import tectech.thing.CustomItemList; + +public class TTRecipeAdder extends RecipeAdder { + + public static final ItemStack[] nullItem = new ItemStack[0]; + public static final FluidStack[] nullFluid = new FluidStack[0]; + + @Deprecated + public static boolean addResearchableAssemblylineRecipe(ItemStack aResearchItem, int totalComputationRequired, + int computationRequiredPerSec, int researchEUt, int researchAmperage, ItemStack[] aInputs, + FluidStack[] aFluidInputs, ItemStack aOutput, int assDuration, int assEUt) { + if (aInputs == null) { + aInputs = nullItem; + } + if (aFluidInputs == null) { + aFluidInputs = nullFluid; + } + if (aResearchItem == null || totalComputationRequired <= 0 || aOutput == null || aInputs.length > 16) { + return false; + } + for (ItemStack tItem : aInputs) { + if (tItem == null) { + TecTech.LOGGER.error( + "addResearchableAssemblingLineRecipe " + aResearchItem.getDisplayName() + + " --> " + + aOutput.getUnlocalizedName() + + " there is some null item in that recipe"); + } + } + researchAmperage = GTUtility.clamp(researchAmperage, 1, Short.MAX_VALUE); + computationRequiredPerSec = GTUtility.clamp(computationRequiredPerSec, 1, Short.MAX_VALUE); + + GTRecipe.RecipeAssemblyLine recipeGT = new GTRecipe.RecipeAssemblyLine( + CustomItemList.UnusedStuff.get(1), + totalComputationRequired / computationRequiredPerSec, + aInputs, + aFluidInputs, + aOutput, + assDuration, + assEUt); + RecipeAssemblyLine recipeTT = new GTRecipe.RecipeAssemblyLine( + aResearchItem, + totalComputationRequired / computationRequiredPerSec, + aInputs, + aFluidInputs, + aOutput, + assDuration, + assEUt); + GTRecipe.RecipeAssemblyLine.sAssemblylineRecipes.add(recipeGT); + TecTechRecipeMaps.researchableALRecipeList.add(recipeTT); + + ItemStack writesDataStick = ItemList.Tool_DataStick.getWithName(1L, "Writes Research result"); + AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(writesDataStick, recipeTT, false); + GTValues.RA.stdBuilder() + .itemInputs(aResearchItem) + .itemOutputs(aOutput) + .special(writesDataStick) + .duration(totalComputationRequired) + .eut(researchEUt) + .metadata(RESEARCH_STATION_DATA, researchAmperage | computationRequiredPerSec << 16) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(researchStationFakeRecipes); + + ItemStack readsDataStick = ItemList.Tool_DataStick.getWithName(1L, "Reads Research result"); + AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(readsDataStick, recipeTT, false); + GTValues.RA.stdBuilder() + .itemInputs(aInputs) + .itemOutputs(aOutput) + .fluidInputs(aFluidInputs) + .special(readsDataStick) + .duration(assDuration) + .eut(assEUt) + .ignoreCollision() + .fake() + .addTo(assemblylineVisualRecipes); + return true; + } + + @Deprecated + public static boolean addResearchableAssemblylineRecipe(ItemStack aResearchItem, int totalComputationRequired, + int computationRequiredPerSec, int researchEUt, int researchAmperage, Object[] aInputs, + FluidStack[] aFluidInputs, ItemStack aOutput, int assDuration, int assEUt) { + if (aInputs == null) { + aInputs = nullItem; + } + if (aFluidInputs == null) { + aFluidInputs = nullFluid; + } + if (aResearchItem == null || totalComputationRequired <= 0 + || aOutput == null + || aInputs.length > 16 + || aFluidInputs.length > 4 + || assDuration <= 0 + || assEUt <= 0) { + return false; + } + + ItemStack[] tInputs = new ItemStack[aInputs.length]; + ItemStack[][] tAlts = new ItemStack[aInputs.length][]; + int tPersistentHash = 1; + for (int i = 0; i < aInputs.length; i++) { + Object obj = aInputs[i]; + if (obj instanceof ItemStack) { + tInputs[i] = (ItemStack) obj; + tAlts[i] = null; + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(tInputs[i], true, false); + continue; + } else if (obj instanceof ItemStack[]aStacks) { + if (aStacks.length > 0) { + tInputs[i] = aStacks[0]; + tAlts[i] = Arrays.copyOf(aStacks, aStacks.length); + for (ItemStack tAlt : tAlts[i]) { + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(tAlt, true, false); + } + tPersistentHash *= 31; + continue; + } + } else if (obj instanceof Object[]objs) { + List tList; + if (objs.length >= 2 && !(tList = GTOreDictUnificator.getOres(objs[0])).isEmpty()) { + try { + // sort the output, so the hash code is stable across launches + tList.sort( + Comparator + .comparing( + s -> GameRegistry.findUniqueIdentifierFor(s.getItem()).modId) + .thenComparing(s -> GameRegistry.findUniqueIdentifierFor(s.getItem()).modId) + .thenComparingInt(Items.feather::getDamage) + .thenComparingInt(s -> s.stackSize)); + int tAmount = ((Number) objs[1]).intValue(); + List uList = new ArrayList<>(); + for (ItemStack tStack : tList) { + ItemStack uStack = GTUtility.copyAmount(tAmount, tStack); + if (GTUtility.isStackValid(uStack)) { + uList.add(uStack); + if (tInputs[i] == null) tInputs[i] = uStack; + } + } + tAlts[i] = uList.toArray(new ItemStack[0]); + tPersistentHash = tPersistentHash * 31 + (objs[0] == null ? "" : objs[0].toString()).hashCode(); + tPersistentHash = tPersistentHash * 31 + tAmount; + continue; + } catch (Exception t) { + TecTech.LOGGER.error( + "addAssemblingLineRecipe " + aResearchItem.getDisplayName() + + " --> there is some ... in that recipe"); + } + } + } + TecTech.LOGGER.error( + "addAssemblingLineRecipe " + aResearchItem.getDisplayName() + + " --> " + + aOutput.getUnlocalizedName() + + " there is some null item in that recipe"); + } + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(aResearchItem, true, false); + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(aOutput, true, false); + for (FluidStack tFluidInput : aFluidInputs) { + if (tFluidInput == null) continue; + tPersistentHash = tPersistentHash * 31 + GTUtility.persistentHash(tFluidInput, true, false); + } + researchAmperage = GTUtility.clamp(researchAmperage, 1, Short.MAX_VALUE); + computationRequiredPerSec = GTUtility.clamp(computationRequiredPerSec, 1, Short.MAX_VALUE); + tPersistentHash = tPersistentHash * 31 + totalComputationRequired; + tPersistentHash = tPersistentHash * 31 + computationRequiredPerSec; + tPersistentHash = tPersistentHash * 31 + researchAmperage; + tPersistentHash = tPersistentHash * 31 + researchEUt; + tPersistentHash = tPersistentHash * 31 + assDuration; + tPersistentHash = tPersistentHash * 31 + assEUt; + + GTRecipe.RecipeAssemblyLine recipeGT = new GTRecipe.RecipeAssemblyLine( + CustomItemList.UnusedStuff.get(1), + totalComputationRequired / computationRequiredPerSec, + tInputs, + aFluidInputs, + aOutput, + assDuration, + assEUt, + tAlts); + recipeGT.setPersistentHash(tPersistentHash); + GTRecipe.RecipeAssemblyLine.sAssemblylineRecipes.add(recipeGT); + GTRecipe.RecipeAssemblyLine recipeTT = new GTRecipe.RecipeAssemblyLine( + aResearchItem, + totalComputationRequired / computationRequiredPerSec, + tInputs, + aFluidInputs, + aOutput, + assDuration, + assEUt, + tAlts); + recipeTT.setPersistentHash(tPersistentHash); + TecTechRecipeMaps.researchableALRecipeList.add(recipeTT); + + ItemStack writesDataStick = ItemList.Tool_DataStick.getWithName(1L, "Writes Research result"); + AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(writesDataStick, recipeTT, false); + GTValues.RA.stdBuilder() + .itemInputs(aResearchItem) + .itemOutputs(aOutput) + .special(writesDataStick) + .duration(totalComputationRequired) + .eut(researchEUt) + .metadata(RESEARCH_STATION_DATA, researchAmperage | computationRequiredPerSec << 16) + .noOptimize() + .ignoreCollision() + .fake() + .addTo(researchStationFakeRecipes); + + ItemStack readsDataStick = ItemList.Tool_DataStick.getWithName(1L, "Reads Research result"); + AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(readsDataStick, recipeTT, false); + assemblylineVisualRecipes.addFakeRecipe( + false, + tInputs, + new ItemStack[] { aOutput }, + new ItemStack[] { readsDataStick }, + aFluidInputs, + null, + assDuration, + assEUt, + 0, + tAlts, + false); + return true; + } +} diff --git a/src/main/java/tectech/recipe/TecTechRecipeMaps.java b/src/main/java/tectech/recipe/TecTechRecipeMaps.java new file mode 100644 index 0000000000..b1c3608f45 --- /dev/null +++ b/src/main/java/tectech/recipe/TecTechRecipeMaps.java @@ -0,0 +1,78 @@ +package tectech.recipe; + +import java.util.ArrayList; +import java.util.List; + +import com.gtnewhorizons.modularui.common.widget.ProgressBar; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMapBackend; +import gregtech.api.recipe.RecipeMapBuilder; +import gregtech.api.util.GTRecipe; +import tectech.thing.CustomItemList; +import tectech.thing.gui.TecTechUITextures; + +public class TecTechRecipeMaps { + + public static void init() {} + + public static final List researchableALRecipeList = new ArrayList<>(); + + public static final RecipeMap eyeOfHarmonyRecipes = RecipeMapBuilder.of("gt.recipe.eyeofharmony") + .maxIO( + EyeOfHarmonyFrontend.maxItemInputs, + EyeOfHarmonyFrontend.maxItemOutputs, + EyeOfHarmonyFrontend.maxFluidInputs, + EyeOfHarmonyFrontend.maxFluidOutputs) + .minInputs(1, 0) + .progressBar(GTUITextures.PROGRESSBAR_HAMMER, ProgressBar.Direction.DOWN) + .progressBarPos(78, 24 + 2) + .logoPos(10, 10) + .neiHandlerInfo( + builder -> builder.setDisplayStack(CustomItemList.Machine_Multi_EyeOfHarmony.get(1)) + .setHeight(314) + .setMaxRecipesPerPage(1)) + .frontend(EyeOfHarmonyFrontend::new) + .build(); + public static final RecipeMap researchStationFakeRecipes = RecipeMapBuilder + .of("gt.recipe.researchStation") + .maxIO(1, 1, 0, 0) + .useSpecialSlot() + .slotOverlays((index, isFluid, isOutput, isSpecial) -> { + if (isSpecial) { + return GTUITextures.OVERLAY_SLOT_DATA_ORB; + } + if (isOutput) { + return TecTechUITextures.OVERLAY_SLOT_MESH; + } + return GTUITextures.OVERLAY_SLOT_MICROSCOPE; + }) + .addSpecialTexture(19, 12, 84, 60, TecTechUITextures.PICTURE_HEAT_SINK) + .addSpecialTexture(41, 22, 40, 40, TecTechUITextures.PICTURE_RACK_LARGE) + .logo(TecTechUITextures.PICTURE_TECTECH_LOGO) + .logoSize(18, 18) + .logoPos(151, 63) + .neiTransferRect(81, 33, 25, 18) + .neiTransferRect(124, 33, 18, 29) + .frontend(ResearchStationFrontend::new) + .neiHandlerInfo(builder -> builder.setDisplayStack(CustomItemList.Machine_Multi_Research.get(1))) + .build(); + + public static final RecipeMap godforgePlasmaRecipes = RecipeMapBuilder.of("gt.recipe.fog_plasma") + .maxIO(1, 1, 1, 1) + .progressBar(TecTechUITextures.PROGRESSBAR_GODFORGE_PLASMA, ProgressBar.Direction.RIGHT) + .progressBarPos(78, 33) + .neiTransferRect(78, 33, 20, 20) + .frontend(GodforgePlasmaFrontend::new) + .build(); + public static final RecipeMap godforgeExoticMatterRecipes = RecipeMapBuilder + .of("gt.recipe.fog_exotic") + .maxIO(1, 1, 2, 1) + .progressBar(TecTechUITextures.PROGRESSBAR_GODFORGE_PLASMA, ProgressBar.Direction.RIGHT) + .progressBarPos(78, 33) + .neiTransferRect(78, 33, 20, 20) + .frontend(GodforgeExoticFrontend::new) + .build(); + +} diff --git a/src/main/java/tectech/rendering/EOH/EOHItemRenderer.java b/src/main/java/tectech/rendering/EOH/EOHItemRenderer.java new file mode 100644 index 0000000000..b8650eb4c4 --- /dev/null +++ b/src/main/java/tectech/rendering/EOH/EOHItemRenderer.java @@ -0,0 +1,94 @@ +package tectech.rendering.EOH; + +import static java.lang.Math.pow; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.FMLClientHandler; + +public class EOHItemRenderer implements IItemRenderer { + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + return true; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + return true; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + GL11.glPushMatrix(); + + if (type == ItemRenderType.INVENTORY) GL11.glRotated(180, 0, 1, 0); + else if (type == ItemRenderType.EQUIPPED || type == ItemRenderType.EQUIPPED_FIRST_PERSON) { + GL11.glTranslated(0.5, 0.5, 0.5); + if (type == ItemRenderType.EQUIPPED) GL11.glRotated(90, 0, 1, 0); + } + + // Render star stuff. + renderStarLayer(0, EOHTileEntitySR.STAR_LAYER_0, 1.0f); + renderStarLayer(1, EOHTileEntitySR.STAR_LAYER_1, 0.4f); + renderStarLayer(2, EOHTileEntitySR.STAR_LAYER_2, 0.2f); + + GL11.glPopMatrix(); + } + + private void renderStarLayer(int layer, ResourceLocation texture, float alpha) { + + // Begin animation. + GL11.glPushMatrix(); + + // OpenGL settings, not sure exactly what these do. + + // Disables lighting, so star is always lit (I think). + GL11.glDisable(GL11.GL_LIGHTING); + // Culls things out of line of sight? + GL11.glEnable(GL11.GL_CULL_FACE); + // Merges colours of the various layers of the star? + GL11.glEnable(GL11.GL_BLEND); + // ??? + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + + // Bind animation to layer of star. + FMLClientHandler.instance() + .getClient() + .getTextureManager() + .bindTexture(texture); + + // 0.01f magic number to shrink sphere obj down. + // Size obtained from the multis current recipe. + float scale = 0.01f; + + // Put each subsequent layer further out. + scale *= pow(1.04f, layer); + + // Scale the star up in the x, y and z directions. + GL11.glScalef(scale, scale, scale); + + switch (layer) { + case 0 -> GL11.glRotatef(130 + (System.currentTimeMillis() / 64) % 360, 0F, 1F, 1F); + case 1 -> GL11.glRotatef(-49 + (System.currentTimeMillis() / 64) % 360, 1F, 1F, 0F); + case 2 -> GL11.glRotatef(67 + (System.currentTimeMillis() / 64) % 360, 1F, 0F, 1F); + } + + // Set colour and alpha (transparency) of the star layer. + GL11.glColor4f(1, 1, 1, alpha); + + EOHTileEntitySR.starModel.renderAll(); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + // Finish animation. + GL11.glPopMatrix(); + } + +} diff --git a/src/main/java/tectech/rendering/EOH/EOHRenderingUtils.java b/src/main/java/tectech/rendering/EOH/EOHRenderingUtils.java new file mode 100644 index 0000000000..7dec8ac62f --- /dev/null +++ b/src/main/java/tectech/rendering/EOH/EOHRenderingUtils.java @@ -0,0 +1,270 @@ +package tectech.rendering.EOH; + +import static java.lang.Math.pow; +import static tectech.Reference.MODID; +import static tectech.rendering.EOH.EOHTileEntitySR.STAR_LAYER_0; +import static tectech.rendering.EOH.EOHTileEntitySR.STAR_LAYER_1; +import static tectech.rendering.EOH.EOHTileEntitySR.STAR_LAYER_2; +import static tectech.rendering.EOH.EOHTileEntitySR.spaceModel; +import static tectech.rendering.EOH.EOHTileEntitySR.starModel; + +import java.awt.Color; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.FMLClientHandler; + +public abstract class EOHRenderingUtils { + + public static void renderStar(IItemRenderer.ItemRenderType type, Color color, int size) { + GL11.glPushMatrix(); + + if (type == IItemRenderer.ItemRenderType.INVENTORY) GL11.glRotated(180, 0, 1, 0); + else if (type == IItemRenderer.ItemRenderType.EQUIPPED + || type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) { + GL11.glTranslated(0.5, 0.5, 0.5); + if (type == IItemRenderer.ItemRenderType.EQUIPPED) GL11.glRotated(90, 0, 1, 0); + } + + // Render star stuff. + renderStarLayer(0, STAR_LAYER_0, color, 1.0f, size); + renderStarLayer(1, STAR_LAYER_1, color, 0.4f, size); + renderStarLayer(2, STAR_LAYER_2, color, 0.2f, size); + + GL11.glPopMatrix(); + } + + public static void renderStar(IItemRenderer.ItemRenderType type, int size) { + renderStar(type, new Color(1.0f, 0.4f, 0.05f, 1.0f), size); + } + + public static void renderStarLayer(int layer, ResourceLocation texture, Color color, float alpha, int size) { + + // Begin animation. + GL11.glPushMatrix(); + + // OpenGL settings, not sure exactly what these do. + + // Disables lighting, so star is always lit (I think). + GL11.glDisable(GL11.GL_LIGHTING); + // Culls triangles/quads facing away from the camera + GL11.glEnable(GL11.GL_CULL_FACE); + // Allows alpha blending to occur (transparency-based color mixing) + GL11.glEnable(GL11.GL_BLEND); + // ??? + if (alpha < 1.0f) { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + } else { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + } + + // Bind image to layer of star. + FMLClientHandler.instance() + .getClient() + .getTextureManager() + .bindTexture(texture); + + // 0.01f magic number to shrink sphere obj down. + // Size obtained from the multis current recipe. + float scale = 0.01f * size; + + // Put each subsequent layer further out. + scale *= pow(1.04f, layer); + + // Scale the star up in the x, y and z directions. + GL11.glScalef(scale, scale, scale); + + switch (layer) { + case 0 -> GL11.glRotatef(130 + (System.currentTimeMillis() / 64) % 360, 0F, 1F, 1F); + case 1 -> GL11.glRotatef(-49 + (System.currentTimeMillis() / 64) % 360, 1F, 1F, 0F); + case 2 -> GL11.glRotatef(67 + (System.currentTimeMillis() / 64) % 360, 1F, 0F, 1F); + } + + // Set colour and alpha (transparency) of the star layer. + final float red = color.getRed() / 255.0f; + final float green = color.getGreen() / 255.0f; + final float blue = color.getBlue() / 255.0f; + + GL11.glColor4f(red, green, blue, alpha); + + starModel.renderAll(); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + // Finish animation. + GL11.glPopMatrix(); + } + + public static void beginRenderingBlocksInWorld(final float blockSize) { + final Tessellator tes = Tessellator.instance; + + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + + GL11.glDisable(GL11.GL_LIGHTING); + + tes.setColorOpaque_F(1f, 1f, 1f); + tes.startDrawingQuads(); + + GL11.glScalef(blockSize, blockSize, blockSize); + } + + public static void endRenderingBlocksInWorld() { + Tessellator.instance.draw(); + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } + + static final double[] BLOCK_X = { -0.5, -0.5, +0.5, +0.5, +0.5, +0.5, -0.5, -0.5 }; + static final double[] BLOCK_Y = { +0.5, -0.5, -0.5, +0.5, +0.5, -0.5, -0.5, +0.5 }; + static final double[] BLOCK_Z = { +0.5, +0.5, +0.5, +0.5, -0.5, -0.5, -0.5, -0.5 }; + + public static void addRenderedBlockInWorld(final Block block, final int meta, final double x, final double y, + final double z) { + final Tessellator tes = Tessellator.instance; + + IIcon texture; + + double minU; + double maxU; + double minV; + double maxV; + + { + texture = block.getIcon(4, meta); + + minU = texture.getMinU(); + maxU = texture.getMaxU(); + minV = texture.getMinV(); + maxV = texture.getMaxV(); + + tes.addVertexWithUV(x + BLOCK_X[1], y + BLOCK_Y[1], z + BLOCK_Z[1], maxU, maxV); + tes.addVertexWithUV(x + BLOCK_X[0], y + BLOCK_Y[0], z + BLOCK_Z[0], maxU, minV); + tes.addVertexWithUV(x + BLOCK_X[7], y + BLOCK_Y[7], z + BLOCK_Z[7], minU, minV); + tes.addVertexWithUV(x + BLOCK_X[6], y + BLOCK_Y[6], z + BLOCK_Z[6], minU, maxV); + } + + { + // Bottom face. + texture = block.getIcon(0, meta); + + minU = texture.getMinU(); + maxU = texture.getMaxU(); + minV = texture.getMinV(); + maxV = texture.getMaxV(); + + tes.addVertexWithUV(x + BLOCK_X[5], y + BLOCK_Y[5], z + BLOCK_Z[5], maxU, minV); + tes.addVertexWithUV(x + BLOCK_X[2], y + BLOCK_Y[2], z + BLOCK_Z[2], maxU, maxV); + tes.addVertexWithUV(x + BLOCK_X[1], y + BLOCK_Y[1], z + BLOCK_Z[1], minU, maxV); + tes.addVertexWithUV(x + BLOCK_X[6], y + BLOCK_Y[6], z + BLOCK_Z[6], minU, minV); + } + + { + texture = block.getIcon(2, meta); + + minU = texture.getMinU(); + maxU = texture.getMaxU(); + minV = texture.getMinV(); + maxV = texture.getMaxV(); + + tes.addVertexWithUV(x + BLOCK_X[6], y + BLOCK_Y[6], z + BLOCK_Z[6], maxU, maxV); + tes.addVertexWithUV(x + BLOCK_X[7], y + BLOCK_Y[7], z + BLOCK_Z[7], maxU, minV); + tes.addVertexWithUV(x + BLOCK_X[4], y + BLOCK_Y[4], z + BLOCK_Z[4], minU, minV); + tes.addVertexWithUV(x + BLOCK_X[5], y + BLOCK_Y[5], z + BLOCK_Z[5], minU, maxV); + } + + { + texture = block.getIcon(5, meta); + + minU = texture.getMinU(); + maxU = texture.getMaxU(); + minV = texture.getMinV(); + maxV = texture.getMaxV(); + + tes.addVertexWithUV(x + BLOCK_X[5], y + BLOCK_Y[5], z + BLOCK_Z[5], maxU, maxV); + tes.addVertexWithUV(x + BLOCK_X[4], y + BLOCK_Y[4], z + BLOCK_Z[4], maxU, minV); + tes.addVertexWithUV(x + BLOCK_X[3], y + BLOCK_Y[3], z + BLOCK_Z[3], minU, minV); + tes.addVertexWithUV(x + BLOCK_X[2], y + BLOCK_Y[2], z + BLOCK_Z[2], minU, maxV); + } + + { + texture = block.getIcon(1, meta); + + minU = texture.getMinU(); + maxU = texture.getMaxU(); + minV = texture.getMinV(); + maxV = texture.getMaxV(); + + tes.addVertexWithUV(x + BLOCK_X[3], y + BLOCK_Y[3], z + BLOCK_Z[3], maxU, maxV); + tes.addVertexWithUV(x + BLOCK_X[4], y + BLOCK_Y[4], z + BLOCK_Z[4], maxU, minV); + tes.addVertexWithUV(x + BLOCK_X[7], y + BLOCK_Y[7], z + BLOCK_Z[7], minU, minV); + tes.addVertexWithUV(x + BLOCK_X[0], y + BLOCK_Y[0], z + BLOCK_Z[0], minU, maxV); + } + + { + texture = block.getIcon(3, meta); + + minU = texture.getMinU(); + maxU = texture.getMaxU(); + minV = texture.getMinV(); + maxV = texture.getMaxV(); + + tes.addVertexWithUV(x + BLOCK_X[2], y + BLOCK_Y[2], z + BLOCK_Z[2], maxU, maxV); + tes.addVertexWithUV(x + BLOCK_X[3], y + BLOCK_Y[3], z + BLOCK_Z[3], maxU, minV); + tes.addVertexWithUV(x + BLOCK_X[0], y + BLOCK_Y[0], z + BLOCK_Z[0], minU, minV); + tes.addVertexWithUV(x + BLOCK_X[1], y + BLOCK_Y[1], z + BLOCK_Z[1], minU, maxV); + } + } + + public static void renderBlockInWorld(final Block block, final int meta, final float blockSize) { + beginRenderingBlocksInWorld(blockSize); + + addRenderedBlockInWorld(block, meta, 0, 0, 0); + + endRenderingBlocksInWorld(); + } + + public static void renderOuterSpaceShell() { + + // Save current OpenGL state. + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + + // Begin animation. + GL11.glPushMatrix(); + + // Disables lighting, so star is always lit. + GL11.glDisable(GL11.GL_LIGHTING); + // Merges colors of the various layers of the star. + // GL11.glEnable(GL11.GL_BLEND); + + // Bind animation to layer of star. + FMLClientHandler.instance() + .getClient() + .getTextureManager() + .bindTexture(new ResourceLocation(MODID, "models/spaceLayer.png")); + + final float scale = 0.01f * 17.5f; + // Scale the star up in the x, y and z directions. + GL11.glScalef(scale, scale, scale); + + GL11.glColor4f(1, 1, 1, 1); + + spaceModel.renderAll(); + + // Finish animation. + GL11.glPopMatrix(); + + // Restore previous OpenGL state. + GL11.glPopAttrib(); + } + +} diff --git a/src/main/java/tectech/rendering/EOH/EOHTileEntitySR.java b/src/main/java/tectech/rendering/EOH/EOHTileEntitySR.java new file mode 100644 index 0000000000..5c8b4f6d94 --- /dev/null +++ b/src/main/java/tectech/rendering/EOH/EOHTileEntitySR.java @@ -0,0 +1,92 @@ +package tectech.rendering.EOH; + +import static tectech.rendering.EOH.EOHRenderingUtils.renderBlockInWorld; +import static tectech.rendering.EOH.EOHRenderingUtils.renderOuterSpaceShell; +import static tectech.rendering.EOH.EOHRenderingUtils.renderStar; + +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; + +import org.lwjgl.opengl.GL11; + +import tectech.Reference; +import tectech.thing.block.TileEntityEyeOfHarmony; + +public class EOHTileEntitySR extends TileEntitySpecialRenderer { + + public static final ResourceLocation STAR_LAYER_0 = new ResourceLocation(Reference.MODID, "models/StarLayer0.png"); + public static final ResourceLocation STAR_LAYER_1 = new ResourceLocation(Reference.MODID, "models/StarLayer1.png"); + public static final ResourceLocation STAR_LAYER_2 = new ResourceLocation(Reference.MODID, "models/StarLayer2.png"); + public static IModelCustom starModel; + public static IModelCustom spaceModel; + + public EOHTileEntitySR() { + starModel = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.MODID, "models/Star.obj")); + spaceModel = AdvancedModelLoader.loadModel(new ResourceLocation(Reference.MODID, "models/Space.obj")); + } + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { + if (!(tile instanceof TileEntityEyeOfHarmony EOHRenderTile)) return; + + GL11.glPushMatrix(); + // Required to centre the render to the middle of the block. + GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); + + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + + // Space shell. + renderOuterSpaceShell(); + + // Render the planets. + renderOrbitObjects(EOHRenderTile); + + // Render the star itself. + renderStar(IItemRenderer.ItemRenderType.INVENTORY, 1); + GL11.glPopAttrib(); + + GL11.glPopMatrix(); + } + + private void renderOrbitObjects(final TileEntityEyeOfHarmony EOHRenderTile) { + + if (EOHRenderTile.getOrbitingObjects() != null) { + + if (EOHRenderTile.getOrbitingObjects() + .size() == 0) { + EOHRenderTile.generateImportantInfo(); + } + + for (TileEntityEyeOfHarmony.OrbitingObject t : EOHRenderTile.getOrbitingObjects()) { + renderOrbit(EOHRenderTile, t); + } + } + } + + void renderOrbit(final TileEntityEyeOfHarmony EOHRenderTile, + final TileEntityEyeOfHarmony.OrbitingObject orbitingObject) { + // Render orbiting body. + GL11.glPushMatrix(); + + GL11.glRotatef(orbitingObject.zAngle, 0, 0, 1); + GL11.glRotatef(orbitingObject.xAngle, 1, 0, 0); + GL11.glRotatef((orbitingObject.rotationSpeed * 0.1f * EOHRenderTile.angle) % 360.0f, 0F, 1F, 0F); + GL11.glTranslated(-0.2 - orbitingObject.distance - STAR_RESCALE * EOHRenderTile.getSize(), 0, 0); + GL11.glRotatef((orbitingObject.orbitSpeed * 0.1f * EOHRenderTile.angle) % 360.0f, 0F, 1F, 0F); + + this.bindTexture(TextureMap.locationBlocksTexture); + renderBlockInWorld(orbitingObject.block, 0, orbitingObject.scale); + + GL11.glPopMatrix(); + } + + private static final float STAR_RESCALE = 0.2f; + +} diff --git a/src/main/java/tectech/thing/CustomItemList.java b/src/main/java/tectech/thing/CustomItemList.java new file mode 100644 index 0000000000..2c4b4c895b --- /dev/null +++ b/src/main/java/tectech/thing/CustomItemList.java @@ -0,0 +1,629 @@ +package tectech.thing; + +import static gregtech.api.enums.GTValues.W; + +import net.minecraft.block.Block; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; + +import gregtech.api.interfaces.IItemContainer; +import gregtech.api.util.GTModHandler; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.GTUtility; + +public enum CustomItemList implements IItemContainer { + + Casing_UEV, + Casing_UIV, + Casing_UMV, + Casing_UXV, + Casing_MAXV, + Hull_UEV, + Hull_UIV, + Hull_UMV, + Hull_UXV, + Hull_MAXV, + Transformer_UEV_UHV, + Transformer_UIV_UEV, + Transformer_UMV_UIV, + Transformer_UXV_UMV, + Transformer_MAXV_UXV, + WetTransformer_LV_ULV, + WetTransformer_MV_LV, + WetTransformer_HV_MV, + WetTransformer_EV_HV, + WetTransformer_IV_EV, + WetTransformer_LuV_IV, + WetTransformer_ZPM_LuV, + WetTransformer_UV_ZPM, + WetTransformer_UHV_UV, + WetTransformer_UEV_UHV, + WetTransformer_UIV_UEV, + WetTransformer_UMV_UIV, + WetTransformer_UXV_UMV, + WetTransformer_MAXV_UXV, + + Transformer_HA_UEV_UHV, + Transformer_HA_UIV_UEV, + Transformer_HA_UMV_UIV, + Transformer_HA_UXV_UMV, + Transformer_HA_MAXV_UXV, + + hatch_CreativeMaintenance, + hatch_CreativeData, + hatch_CreativeUncertainty, + Machine_OwnerDetector, + Machine_BuckConverter_IV, + Machine_BuckConverter_LuV, + Machine_BuckConverter_ZPM, + Machine_BuckConverter_UV, + Machine_BuckConverter_UHV, + Machine_BuckConverter_UEV, + Machine_BuckConverter_UIV, + Machine_BuckConverter_UMV, + Machine_BuckConverter_UXV, + Machine_DebugWriter, + Machine_DebugGenny, + UnusedStuff, + Machine_DebugPollutor, + DATApipe, + LASERpipe, + rack_Hatch, + holder_Hatch, + capacitor_Hatch, + + eM_dynamoMulti4_EV, + eM_dynamoMulti16_EV, + eM_dynamoMulti64_EV, + eM_dynamoMulti4_IV, + eM_dynamoMulti16_IV, + eM_dynamoMulti64_IV, + eM_dynamoMulti4_LuV, + eM_dynamoMulti16_LuV, + eM_dynamoMulti64_LuV, + eM_dynamoMulti4_ZPM, + eM_dynamoMulti16_ZPM, + eM_dynamoMulti64_ZPM, + eM_dynamoMulti4_UV, + eM_dynamoMulti16_UV, + eM_dynamoMulti64_UV, + eM_dynamoMulti4_UHV, + eM_dynamoMulti16_UHV, + eM_dynamoMulti64_UHV, + eM_dynamoMulti4_UEV, + eM_dynamoMulti16_UEV, + eM_dynamoMulti64_UEV, + eM_dynamoMulti4_UIV, + eM_dynamoMulti16_UIV, + eM_dynamoMulti64_UIV, + eM_dynamoMulti4_UMV, + eM_dynamoMulti16_UMV, + eM_dynamoMulti64_UMV, + eM_dynamoMulti4_UXV, + eM_dynamoMulti16_UXV, + eM_dynamoMulti64_UXV, + eM_dynamoTunnel1_IV, + eM_dynamoTunnel2_IV, + eM_dynamoTunnel3_IV, + eM_dynamoTunnel4_IV, + eM_dynamoTunnel5_IV, + eM_dynamoTunnel6_IV, + eM_dynamoTunnel7_IV, + eM_dynamoTunnel1_LuV, + eM_dynamoTunnel2_LuV, + eM_dynamoTunnel3_LuV, + eM_dynamoTunnel4_LuV, + eM_dynamoTunnel5_LuV, + eM_dynamoTunnel6_LuV, + eM_dynamoTunnel7_LuV, + eM_dynamoTunnel1_ZPM, + eM_dynamoTunnel2_ZPM, + eM_dynamoTunnel3_ZPM, + eM_dynamoTunnel4_ZPM, + eM_dynamoTunnel5_ZPM, + eM_dynamoTunnel6_ZPM, + eM_dynamoTunnel7_ZPM, + eM_dynamoTunnel1_UV, + eM_dynamoTunnel2_UV, + eM_dynamoTunnel3_UV, + eM_dynamoTunnel4_UV, + eM_dynamoTunnel5_UV, + eM_dynamoTunnel6_UV, + eM_dynamoTunnel7_UV, + eM_dynamoTunnel1_UHV, + eM_dynamoTunnel2_UHV, + eM_dynamoTunnel3_UHV, + eM_dynamoTunnel4_UHV, + eM_dynamoTunnel5_UHV, + eM_dynamoTunnel6_UHV, + eM_dynamoTunnel7_UHV, + eM_dynamoTunnel1_UEV, + eM_dynamoTunnel2_UEV, + eM_dynamoTunnel3_UEV, + eM_dynamoTunnel4_UEV, + eM_dynamoTunnel5_UEV, + eM_dynamoTunnel6_UEV, + eM_dynamoTunnel7_UEV, + eM_dynamoTunnel1_UIV, + eM_dynamoTunnel2_UIV, + eM_dynamoTunnel3_UIV, + eM_dynamoTunnel4_UIV, + eM_dynamoTunnel5_UIV, + eM_dynamoTunnel6_UIV, + eM_dynamoTunnel7_UIV, + eM_dynamoTunnel1_UMV, + eM_dynamoTunnel2_UMV, + eM_dynamoTunnel3_UMV, + eM_dynamoTunnel4_UMV, + eM_dynamoTunnel5_UMV, + eM_dynamoTunnel6_UMV, + eM_dynamoTunnel7_UMV, + eM_dynamoTunnel8_UMV, + eM_dynamoTunnel1_UXV, + eM_dynamoTunnel2_UXV, + eM_dynamoTunnel3_UXV, + eM_dynamoTunnel4_UXV, + eM_dynamoTunnel5_UXV, + eM_dynamoTunnel6_UXV, + eM_dynamoTunnel7_UXV, + eM_dynamoTunnel8_UXV, + eM_dynamoTunnel9_UXV, + eM_dynamoTunnel9001, + + eM_energyMulti4_EV, + eM_energyMulti16_EV, + eM_energyMulti64_EV, + eM_energyMulti4_IV, + eM_energyMulti16_IV, + eM_energyMulti64_IV, + eM_energyMulti4_LuV, + eM_energyMulti16_LuV, + eM_energyMulti64_LuV, + eM_energyMulti4_ZPM, + eM_energyMulti16_ZPM, + eM_energyMulti64_ZPM, + eM_energyMulti4_UV, + eM_energyMulti16_UV, + eM_energyMulti64_UV, + eM_energyMulti4_UHV, + eM_energyMulti16_UHV, + eM_energyMulti64_UHV, + eM_energyMulti4_UEV, + eM_energyMulti16_UEV, + eM_energyMulti64_UEV, + eM_energyMulti4_UIV, + eM_energyMulti16_UIV, + eM_energyMulti64_UIV, + eM_energyMulti4_UMV, + eM_energyMulti16_UMV, + eM_energyMulti64_UMV, + eM_energyMulti4_UXV, + eM_energyMulti16_UXV, + eM_energyMulti64_UXV, + eM_energyWirelessMulti4_EV, + eM_energyWirelessMulti16_EV, + eM_energyWirelessMulti64_EV, + eM_energyWirelessMulti4_IV, + eM_energyWirelessMulti16_IV, + eM_energyWirelessMulti64_IV, + eM_energyWirelessMulti4_LuV, + eM_energyWirelessMulti16_LuV, + eM_energyWirelessMulti64_LuV, + eM_energyWirelessMulti4_ZPM, + eM_energyWirelessMulti16_ZPM, + eM_energyWirelessMulti64_ZPM, + eM_energyWirelessMulti4_UV, + eM_energyWirelessMulti16_UV, + eM_energyWirelessMulti64_UV, + eM_energyWirelessMulti4_UHV, + eM_energyWirelessMulti16_UHV, + eM_energyWirelessMulti64_UHV, + eM_energyWirelessMulti4_UEV, + eM_energyWirelessMulti16_UEV, + eM_energyWirelessMulti64_UEV, + eM_energyWirelessMulti4_UIV, + eM_energyWirelessMulti16_UIV, + eM_energyWirelessMulti64_UIV, + eM_energyWirelessMulti4_UMV, + eM_energyWirelessMulti16_UMV, + eM_energyWirelessMulti64_UMV, + eM_energyWirelessMulti4_UXV, + eM_energyWirelessMulti16_UXV, + eM_energyWirelessMulti64_UXV, + eM_energyWirelessMulti4_MAX, + eM_energyWirelessMulti16_MAX, + eM_energyWirelessMulti64_MAX, + eM_energyTunnel1_IV, + eM_energyTunnel2_IV, + eM_energyTunnel3_IV, + eM_energyTunnel4_IV, + eM_energyTunnel5_IV, + eM_energyTunnel6_IV, + eM_energyTunnel7_IV, + eM_energyTunnel1_LuV, + eM_energyTunnel2_LuV, + eM_energyTunnel3_LuV, + eM_energyTunnel4_LuV, + eM_energyTunnel5_LuV, + eM_energyTunnel6_LuV, + eM_energyTunnel7_LuV, + eM_energyTunnel1_ZPM, + eM_energyTunnel2_ZPM, + eM_energyTunnel3_ZPM, + eM_energyTunnel4_ZPM, + eM_energyTunnel5_ZPM, + eM_energyTunnel6_ZPM, + eM_energyTunnel7_ZPM, + eM_energyTunnel1_UV, + eM_energyTunnel2_UV, + eM_energyTunnel3_UV, + eM_energyTunnel4_UV, + eM_energyTunnel5_UV, + eM_energyTunnel6_UV, + eM_energyTunnel7_UV, + eM_energyTunnel1_UHV, + eM_energyTunnel2_UHV, + eM_energyTunnel3_UHV, + eM_energyTunnel4_UHV, + eM_energyTunnel5_UHV, + eM_energyTunnel6_UHV, + eM_energyTunnel7_UHV, + eM_energyTunnel1_UEV, + eM_energyTunnel2_UEV, + eM_energyTunnel3_UEV, + eM_energyTunnel4_UEV, + eM_energyTunnel5_UEV, + eM_energyTunnel6_UEV, + eM_energyTunnel7_UEV, + eM_energyTunnel1_UIV, + eM_energyTunnel2_UIV, + eM_energyTunnel3_UIV, + eM_energyTunnel4_UIV, + eM_energyTunnel5_UIV, + eM_energyTunnel6_UIV, + eM_energyTunnel7_UIV, + eM_energyTunnel1_UMV, + eM_energyTunnel2_UMV, + eM_energyTunnel3_UMV, + eM_energyTunnel4_UMV, + eM_energyTunnel5_UMV, + eM_energyTunnel6_UMV, + eM_energyTunnel7_UMV, + eM_energyTunnel8_UMV, + eM_energyTunnel1_UXV, + eM_energyTunnel2_UXV, + eM_energyTunnel3_UXV, + eM_energyTunnel4_UXV, + eM_energyTunnel5_UXV, + eM_energyTunnel6_UXV, + eM_energyTunnel7_UXV, + eM_energyTunnel8_UXV, + eM_energyTunnel9_UXV, + eM_energyTunnel9001, + eM_energyWirelessTunnel1_UXV, + eM_energyWirelessTunnel2_UXV, + eM_energyWirelessTunnel3_UXV, + eM_energyWirelessTunnel4_UXV, + eM_energyWirelessTunnel5_UXV, + eM_energyWirelessTunnel6_UXV, + eM_energyWirelessTunnel7_UXV, + eM_energyWirelessTunnel8_UXV, + eM_energyWirelessTunnel9_UXV, + + Parametrizer_Hatch, + ParametrizerX_Hatch, + ParametrizerTXT_Hatch, + Uncertainty_Hatch, + UncertaintyX_Hatch, + dataIn_Hatch, + dataOut_Hatch, + dataOut_Wireless_Hatch, + dataIn_Wireless_Hatch, + dataInAss_Wireless_Hatch, + dataOutAss_Wireless_Hatch, + dataInAss_Hatch, + dataOutAss_Hatch, + eM_Containment, + eM_Containment_Field, + eM_Containment_Advanced, + eM_Coil, + eM_Teleportation, + eM_Dimensional, + eM_Ultimate_Containment, + eM_Ultimate_Containment_Advanced, + eM_Ultimate_Containment_Field, + eM_Spacetime, + eM_Computer_Casing, + eM_Computer_Bus, + eM_Computer_Vent, + eM_Hollow, + eM_Power, + debugBlock, + + tM_TeslaBase, + tM_TeslaToroid, + EOH_Reinforced_Temporal_Casing, + EOH_Reinforced_Spatial_Casing, + EOH_Infinite_Energy_Casing, + tM_TeslaSecondary, + tM_TeslaPrimary_0, + tM_TeslaPrimary_1, + tM_TeslaPrimary_2, + tM_TeslaPrimary_3, + tM_TeslaPrimary_4, + tM_TeslaPrimary_5, + tM_TeslaPrimary_6, + + Machine_Multi_Microwave, + Machine_Multi_TeslaCoil, + Machine_Multi_Transformer, + Machine_Multi_Computer, + Machine_Multi_Switch, + Machine_Multi_Research, + Machine_Multi_DataBank, + Machine_Multi_Infuser, + Machine_Multi_Decay, + Machine_Multi_Annihilation, + Machine_Multi_EyeOfHarmony, + Machine_Multi_ForgeOfGods, + Machine_Multi_SmeltingModule, + Machine_Multi_MoltenModule, + Machine_Multi_PlasmaModule, + Machine_Multi_QuarkGluonPlasmaModule, + + hint_0, + hint_1, + hint_2, + hint_3, + hint_4, + hint_5, + hint_6, + hint_7, + hint_8, + hint_9, + hint_10, + hint_11, + hint_general, + hint_air, + hint_noAir, + hint_error, + + scanContainer, + parametrizerMemory, + teslaCapacitor, + teslaCover, + teslaComponent, + teslaStaff, + enderLinkFluidCover, + powerPassUpgradeCover, + + Machine_TeslaCoil_1by1_LV, + Machine_TeslaCoil_1by1_MV, + Machine_TeslaCoil_1by1_HV, + Machine_TeslaCoil_1by1_EV, + Machine_TeslaCoil_1by1_IV, + Machine_TeslaCoil_2by2_LV, + Machine_TeslaCoil_2by2_MV, + Machine_TeslaCoil_2by2_HV, + Machine_TeslaCoil_2by2_EV, + Machine_TeslaCoil_2by2_IV, + Machine_TeslaCoil_3by3_LV, + Machine_TeslaCoil_3by3_MV, + Machine_TeslaCoil_3by3_HV, + Machine_TeslaCoil_3by3_EV, + Machine_TeslaCoil_3by3_IV, + Machine_TeslaCoil_4by4_LV, + Machine_TeslaCoil_4by4_MV, + Machine_TeslaCoil_4by4_HV, + Machine_TeslaCoil_4by4_EV, + Machine_TeslaCoil_4by4_IV, + DATApipeBlock, + LASERpipeBlock, + LASERpipeSmart, + + SpacetimeCompressionFieldGeneratorTier0, + SpacetimeCompressionFieldGeneratorTier1, + SpacetimeCompressionFieldGeneratorTier2, + SpacetimeCompressionFieldGeneratorTier3, + SpacetimeCompressionFieldGeneratorTier4, + SpacetimeCompressionFieldGeneratorTier5, + SpacetimeCompressionFieldGeneratorTier6, + SpacetimeCompressionFieldGeneratorTier7, + SpacetimeCompressionFieldGeneratorTier8, + + TimeAccelerationFieldGeneratorTier0, + TimeAccelerationFieldGeneratorTier1, + TimeAccelerationFieldGeneratorTier2, + TimeAccelerationFieldGeneratorTier3, + TimeAccelerationFieldGeneratorTier4, + TimeAccelerationFieldGeneratorTier5, + TimeAccelerationFieldGeneratorTier6, + TimeAccelerationFieldGeneratorTier7, + TimeAccelerationFieldGeneratorTier8, + + StabilisationFieldGeneratorTier0, + StabilisationFieldGeneratorTier1, + StabilisationFieldGeneratorTier2, + StabilisationFieldGeneratorTier3, + StabilisationFieldGeneratorTier4, + StabilisationFieldGeneratorTier5, + StabilisationFieldGeneratorTier6, + StabilisationFieldGeneratorTier7, + StabilisationFieldGeneratorTier8, + + Godforge_GravitationalLens, + Godforge_SingularityShieldingCasing, + Godforge_GuidanceCasing, + Godforge_BoundlessStructureCasing, + Godforge_MagneticConfinementCasing, + Godforge_StellarEnergySiphonCasing, + Godforge_GravitonFlowModulatorTier1, + Godforge_GravitonFlowModulatorTier2, + Godforge_GravitonFlowModulatorTier3, + Godforge_HarmonicPhononTransmissionConduit, + + astralArrayFabricator; + + private ItemStack mStack; + private boolean mHasNotBeenSet = true; + + // public static Fluid sOilExtraHeavy, sOilHeavy, sOilMedium, sOilLight, sNaturalGas; + + @Override + public IItemContainer set(Item aItem) { + mHasNotBeenSet = false; + if (aItem == null) { + return this; + } + ItemStack aStack = new ItemStack(aItem, 1, 0); + mStack = GTUtility.copyAmount(1, aStack); + return this; + } + + @Override + public IItemContainer set(ItemStack aStack) { + mHasNotBeenSet = false; + mStack = GTUtility.copyAmount(1, aStack); + return this; + } + + @Override + public IItemContainer hidden() { + codechicken.nei.api.API.hideItem(get(1L)); + return this; + } + + @Override + public Item getItem() { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return null; + } + return mStack.getItem(); + } + + @Override + public Block getBlock() { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + return GTUtility.getBlockFromStack(new ItemStack(getItem())); + } + + @Override + public final boolean hasBeenSet() { + return !mHasNotBeenSet; + } + + @Override + public boolean isStackEqual(Object aStack) { + return isStackEqual(aStack, false, false); + } + + @Override + public boolean isStackEqual(Object aStack, boolean aWildcard, boolean aIgnoreNBT) { + if (GTUtility.isStackInvalid(aStack)) { + return false; + } + return GTUtility.areUnificationsEqual((ItemStack) aStack, aWildcard ? getWildcard(1) : get(1), aIgnoreNBT); + } + + @Override + public ItemStack get(long aAmount, Object... aReplacements) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); + } + return GTUtility.copyAmount(aAmount, GTOreDictUnificator.get(mStack)); + } + + @Override + public ItemStack getWildcard(long aAmount, Object... aReplacements) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); + } + return GTUtility.copyAmountAndMetaData(aAmount, W, GTOreDictUnificator.get(mStack)); + } + + @Override + public ItemStack getUndamaged(long aAmount, Object... aReplacements) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); + } + return GTUtility.copyAmountAndMetaData(aAmount, 0, GTOreDictUnificator.get(mStack)); + } + + @Override + public ItemStack getAlmostBroken(long aAmount, Object... aReplacements) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); + } + return GTUtility.copyAmountAndMetaData(aAmount, mStack.getMaxDamage() - 1, GTOreDictUnificator.get(mStack)); + } + + @Override + public ItemStack getWithName(long aAmount, String aDisplayName, Object... aReplacements) { + ItemStack rStack = get(1, aReplacements); + if (GTUtility.isStackInvalid(rStack)) { + return null; + } + rStack.setStackDisplayName(aDisplayName); + return GTUtility.copyAmount(aAmount, rStack); + } + + @Override + public ItemStack getWithCharge(long aAmount, int aEnergy, Object... aReplacements) { + ItemStack rStack = get(1, aReplacements); + if (GTUtility.isStackInvalid(rStack)) { + return null; + } + GTModHandler.chargeElectricItem(rStack, aEnergy, Integer.MAX_VALUE, true, false); + return GTUtility.copyAmount(aAmount, rStack); + } + + @Override + public ItemStack getWithDamage(long aAmount, long aMetaValue, Object... aReplacements) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + if (GTUtility.isStackInvalid(mStack)) { + return GTUtility.copyAmount(aAmount, aReplacements); + } + return GTUtility.copyAmountAndMetaData(aAmount, aMetaValue, GTOreDictUnificator.get(mStack)); + } + + @Override + public IItemContainer registerOre(Object... aOreNames) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + for (Object tOreName : aOreNames) { + GTOreDictUnificator.registerOre(tOreName, get(1)); + } + return this; + } + + @Override + public IItemContainer registerWildcardAsOre(Object... aOreNames) { + if (mHasNotBeenSet) { + throw new IllegalAccessError("The Enum '" + name() + "' has not been set to an Item at this time!"); + } + for (Object tOreName : aOreNames) { + GTOreDictUnificator.registerOre(tOreName, getWildcard(1)); + } + return this; + } +} diff --git a/src/main/java/tectech/thing/block/BlockEOHRender.java b/src/main/java/tectech/thing/block/BlockEOHRender.java new file mode 100644 index 0000000000..db70a4a956 --- /dev/null +++ b/src/main/java/tectech/thing/block/BlockEOHRender.java @@ -0,0 +1,78 @@ +package tectech.thing.block; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import tectech.TecTech; + +public class BlockEOHRender extends Block { + + public BlockEOHRender() { + super(Material.iron); + this.setResistance(20f); + this.setHardness(-1.0f); + this.setCreativeTab(TecTech.creativeTabTecTech); + this.setBlockName("Eye of Harmony Renderer"); + this.setLightLevel(100.0f); + registerOther(this); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT"); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean canRenderInPass(int a) { + return true; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public boolean hasTileEntity(int metadata) { + return true; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) { + return new TileEntityEyeOfHarmony(); + } + + public static void registerOther(Block block) { + String name = block.getUnlocalizedName() + .substring( + block.getUnlocalizedName() + .indexOf(".") + 1); + GameRegistry.registerBlock(block, name.substring(name.indexOf(":") + 1)); + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { + return new ArrayList<>(); + } + + @Override + public boolean isCollidable() { + return false; + } + +} diff --git a/src/main/java/tectech/thing/block/BlockForgeOfGods.java b/src/main/java/tectech/thing/block/BlockForgeOfGods.java new file mode 100644 index 0000000000..a53299f229 --- /dev/null +++ b/src/main/java/tectech/thing/block/BlockForgeOfGods.java @@ -0,0 +1,71 @@ +package tectech.thing.block; + +import java.util.ArrayList; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import tectech.TecTech; + +public class BlockForgeOfGods extends Block { + + public BlockForgeOfGods() { + super(Material.iron); + this.setResistance(20f); + this.setHardness(-1.0f); + this.setCreativeTab(TecTech.creativeTabTecTech); + this.setBlockName("Forge of the Gods Renderer"); + this.setLightLevel(100.0f); + if (TecTech.configTecTech.ENABLE_GOD_FORGE) { + registerOther(this); + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + blockIcon = iconRegister.registerIcon("gregtech:iconsets/TRANSPARENT"); + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean canRenderInPass(int a) { + return true; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + public boolean hasTileEntity(int metadata) { + return true; + } + + @Override + public TileEntity createTileEntity(World world, int metadata) { + return new TileEntityForgeOfGods(); + } + + public static void registerOther(Block block) { + GameRegistry.registerBlock(block, "ForgeOfGodsRenderBlock"); + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int meta, int fortune) { + return new ArrayList<>(); + } + +} diff --git a/src/main/java/tectech/thing/block/BlockGodforgeGlass.java b/src/main/java/tectech/thing/block/BlockGodforgeGlass.java new file mode 100644 index 0000000000..e29e815212 --- /dev/null +++ b/src/main/java/tectech/thing/block/BlockGodforgeGlass.java @@ -0,0 +1,106 @@ +package tectech.thing.block; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import eu.usrv.yamcore.blocks.BlockBase; +import gregtech.api.GregTechAPI; +import tectech.Reference; +import tectech.TecTech; + +public class BlockGodforgeGlass extends BlockBase { + + public static IIcon Icon; + public static int renderID; + public static BlockGodforgeGlass INSTANCE; + + public BlockGodforgeGlass() { + super(Material.iron); + setBlockBounds(0, 0, 0, 1, 1, 1); + setBlockName("spatiallyTranscendentGravitationalLens"); + setHarvestLevel("wrench", 3); + setHardness(50); + setResistance(30); + setLightOpacity(0); + setStepSound(Block.soundTypeGlass); + setBlockTextureName(Reference.MODID + ":blockSpatiallyTranscendentGravitationalLens"); + setCreativeTab(TecTech.creativeTabTecTech); + } + + @Override + public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) { + return true; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean getCanBlockGrass() { + return false; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) { + Block block = worldIn.getBlock(x, y, z); + return block != this; + } + + @Override + public int getRenderType() { + return renderID; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + Icon = blockIcon; + } + + public static void run() { + INSTANCE = new BlockGodforgeGlass(); + GameRegistry.registerBlock(INSTANCE, ItemGodForgeGlass.class, INSTANCE.getUnlocalizedName()); + GregTechAPI.registerMachineBlock(INSTANCE, -1); + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMeta) { + if (GregTechAPI.isMachineBlock(this, aMeta)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } +} diff --git a/src/main/java/tectech/thing/block/BlockQuantumGlass.java b/src/main/java/tectech/thing/block/BlockQuantumGlass.java new file mode 100644 index 0000000000..fa0b6c4681 --- /dev/null +++ b/src/main/java/tectech/thing/block/BlockQuantumGlass.java @@ -0,0 +1,110 @@ +package tectech.thing.block; + +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import eu.usrv.yamcore.blocks.BlockBase; +import gregtech.api.GregTechAPI; +import tectech.Reference; +import tectech.TecTech; + +/** + * Created by danie_000 on 17.12.2016. + */ +public final class BlockQuantumGlass extends BlockBase { + + public static IIcon stuff; + public static int renderID; + public static BlockQuantumGlass INSTANCE; + + public BlockQuantumGlass() { + super(Material.iron); + setBlockBounds(0, 0, 0, 1, 1, 1); + setBlockName("quantumGlass"); + setHarvestLevel("wrench", 3); + setHardness(50); + setResistance(30); + setLightOpacity(0); + setStepSound(Block.soundTypeMetal); + setBlockTextureName(Reference.MODID + ":blockQuantumGlass"); + setCreativeTab(TecTech.creativeTabTecTech); + } + + @Override + public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) { + return true; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean getCanBlockGrass() { + return false; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) { + Block block = worldIn.getBlock(x, y, z); + return block != this; // && super.shouldSideBeRendered(worldIn, x, y, z, + // side); + } + + @Override + public int getRenderType() { + return renderID; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + stuff = blockIcon; + } + + public static void run() { + INSTANCE = new BlockQuantumGlass(); + GameRegistry.registerBlock(INSTANCE, ItemQuantumGlass.class, INSTANCE.getUnlocalizedName()); + GregTechAPI.registerMachineBlock(INSTANCE, -1); + } + + @Override + public void breakBlock(World aWorld, int aX, int aY, int aZ, Block aBlock, int aMeta) { + if (GregTechAPI.isMachineBlock(this, aMeta)) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } + + @Override + public void onBlockAdded(World aWorld, int aX, int aY, int aZ) { + if (GregTechAPI.isMachineBlock(this, aWorld.getBlockMetadata(aX, aY, aZ))) { + GregTechAPI.causeMachineUpdate(aWorld, aX, aY, aZ); + } + } +} diff --git a/src/main/java/tectech/thing/block/BlockQuantumStuff.java b/src/main/java/tectech/thing/block/BlockQuantumStuff.java new file mode 100644 index 0000000000..bdbdb35510 --- /dev/null +++ b/src/main/java/tectech/thing/block/BlockQuantumStuff.java @@ -0,0 +1,103 @@ +package tectech.thing.block; + +import java.util.ArrayList; +import java.util.Random; + +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import eu.usrv.yamcore.blocks.BlockBase; +import tectech.Reference; + +/** + * Created by danie_000 on 17.12.2016. + */ +public final class BlockQuantumStuff extends BlockBase { + + public static IIcon stuff; + public static int renderID; + public static BlockQuantumStuff INSTANCE; + + public BlockQuantumStuff() { + super(Material.iron); + setBlockBounds(0, 0, 0, 1, 1, 1); + setBlockName("quantumStuff"); + setHarvestLevel("wrench", 0); + setHardness(500); + setResistance(1); + setLightOpacity(0); + setBlockTextureName(Reference.MODID + ":blockQuantumStuff"); + } + + @Override + public boolean isBeaconBase(IBlockAccess worldObj, int x, int y, int z, int beaconX, int beaconY, int beaconZ) { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + stuff = blockIcon; + } + + @Override + public boolean isOpaqueCube() { + return false; + } + + @Override + public boolean getCanBlockGrass() { + return false; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public int getRenderBlockPass() { + return 1; + } + + @Override + public boolean renderAsNormalBlock() { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public boolean shouldSideBeRendered(IBlockAccess worldIn, int x, int y, int z, int side) { + return false; + } + + @Override + public int getRenderType() { + return renderID; + } + + public static void run() { + INSTANCE = new BlockQuantumStuff(); + GameRegistry.registerBlock(INSTANCE, INSTANCE.getUnlocalizedName()); + } + + @Override + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { + return new ArrayList<>(); + } + + @Override + public Item getItemDropped(int meta, Random random, int fortune) { + return null; + } +} diff --git a/src/main/java/tectech/thing/block/BlockReactorSim.java b/src/main/java/tectech/thing/block/BlockReactorSim.java new file mode 100644 index 0000000000..745db9084f --- /dev/null +++ b/src/main/java/tectech/thing/block/BlockReactorSim.java @@ -0,0 +1,94 @@ +package tectech.thing.block; + +import net.minecraft.block.Block; +import net.minecraft.block.ITileEntityProvider; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ic2.core.IC2; +import ic2.core.IHasGui; +import ic2.core.block.TileEntityBlock; +import tectech.Reference; +import tectech.thing.tileEntity.TileEntityReactorSim; + +/** + * Created by danie_000 on 30.09.2017. + */ +public class BlockReactorSim extends Block implements ITileEntityProvider { + + public static BlockReactorSim INSTANCE; + public static IIcon stuff; + + public BlockReactorSim() { + super(Material.iron); + setBlockBounds(0, 0, 0, 1, 1, 1); + setBlockName("reactorSim"); + setHarvestLevel("wrench", 3); + setHardness(50); + setResistance(30); + setLightOpacity(0); + setStepSound(Block.soundTypeMetal); + setBlockTextureName(Reference.MODID + ":blockReactorSimulator"); + } + + @Override + public boolean isOpaqueCube() { + return true; + } + + @Override + public boolean getCanBlockGrass() { + return true; + } + + @Override + public boolean canBeReplacedByLeaves(IBlockAccess world, int x, int y, int z) { + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister reg) { + super.registerBlockIcons(reg); + stuff = blockIcon; + } + + public static void run() { + INSTANCE = new BlockReactorSim(); + GameRegistry.registerBlock(INSTANCE, ItemReactorSim.class, INSTANCE.getUnlocalizedName()); + GameRegistry.registerTileEntity(TileEntityReactorSim.class, Reference.MODID + "_reactorSim"); + } + + @Override + public TileEntity createNewTileEntity(World worldIn, int meta) { + return new TileEntityReactorSim(); + } + + @Override + public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int side, float a, + float b, float c) { + if (entityPlayer.isSneaking()) { + return false; + } else { + TileEntity te = world.getTileEntity(x, y, z); + return te instanceof IHasGui + && (!IC2.platform.isSimulating() || IC2.platform.launchGui(entityPlayer, (IHasGui) te)); + } + } + + @Override + public void onNeighborBlockChange(World world, int x, int y, int z, Block srcBlock) { + TileEntity te = world.getTileEntity(x, y, z); + if (te instanceof TileEntityBlock) { + ((TileEntityBlock) te).onNeighborUpdate(srcBlock); + } + } +} diff --git a/src/main/java/tectech/thing/block/ItemGodForgeGlass.java b/src/main/java/tectech/thing/block/ItemGodForgeGlass.java new file mode 100644 index 0000000000..c4c355cc19 --- /dev/null +++ b/src/main/java/tectech/thing/block/ItemGodForgeGlass.java @@ -0,0 +1,31 @@ +package tectech.thing.block; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import tectech.util.CommonValues; + +public class ItemGodForgeGlass extends ItemBlock { + + public static ItemGodForgeGlass INSTANCE; + + public ItemGodForgeGlass(Block block) { + super(block); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + aList.add(CommonValues.GODFORGE_MARK); + aList.add(translateToLocal("tile.godforgeGlass.desc.0")); + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("tile.godforgeGlass.desc.1")); + } +} diff --git a/src/main/java/tectech/thing/block/ItemQuantumGlass.java b/src/main/java/tectech/thing/block/ItemQuantumGlass.java new file mode 100644 index 0000000000..441c7363e4 --- /dev/null +++ b/src/main/java/tectech/thing/block/ItemQuantumGlass.java @@ -0,0 +1,34 @@ +package tectech.thing.block; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import tectech.util.CommonValues; + +/** + * Created by Tec on 11.04.2017. + */ +public class ItemQuantumGlass extends ItemBlock { + + public static ItemQuantumGlass INSTANCE; + + public ItemQuantumGlass(Block block) { + super(block); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + aList.add(CommonValues.TEC_MARK_EM); + aList.add(translateToLocal("tile.quantumGlass.desc.0")); // Dense yet transparent + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("tile.quantumGlass.desc.1")); // Glassy & Classy + } +} diff --git a/src/main/java/tectech/thing/block/ItemReactorSim.java b/src/main/java/tectech/thing/block/ItemReactorSim.java new file mode 100644 index 0000000000..bd4bcffde2 --- /dev/null +++ b/src/main/java/tectech/thing/block/ItemReactorSim.java @@ -0,0 +1,37 @@ +package tectech.thing.block; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import tectech.util.CommonValues; + +/** + * Created by danie_000 on 30.09.2017. + */ +public class ItemReactorSim extends ItemBlock { + + public static ItemQuantumGlass INSTANCE; + + public ItemReactorSim(Block block) { + super(block); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + aList.add(CommonValues.TEC_MARK_GENERAL); + aList.add(translateToLocal("tile.reactorSim.desc.0")); // Fission Reaction Uncertainty Resolver 9001 + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("tile.reactorSim.desc.1")); // Explodes, + // but + // not + // as + // much... + } +} diff --git a/src/main/java/tectech/thing/block/RenderForgeOfGods.java b/src/main/java/tectech/thing/block/RenderForgeOfGods.java new file mode 100644 index 0000000000..976dd6da8e --- /dev/null +++ b/src/main/java/tectech/thing/block/RenderForgeOfGods.java @@ -0,0 +1,65 @@ +package tectech.thing.block; + +import static tectech.Reference.MODID; +import static tectech.rendering.EOH.EOHRenderingUtils.renderStarLayer; +import static tectech.rendering.EOH.EOHTileEntitySR.STAR_LAYER_0; +import static tectech.rendering.EOH.EOHTileEntitySR.STAR_LAYER_1; +import static tectech.rendering.EOH.EOHTileEntitySR.STAR_LAYER_2; + +import java.awt.Color; + +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; + +import org.lwjgl.opengl.GL11; + +public class RenderForgeOfGods extends TileEntitySpecialRenderer { + + public static IModelCustom starModel; + + public RenderForgeOfGods() { + starModel = AdvancedModelLoader.loadModel(new ResourceLocation(MODID, "models/Star.obj")); + } + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float timeSinceLastTick) { + if (!(tile instanceof TileEntityForgeOfGods)) return; + + { + GL11.glPushMatrix(); + GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + + // Innermost layer should be opaque + enableOpaqueColorInversion(); + renderStarLayer(0, STAR_LAYER_0, new Color(1.0f, 0.4f, 0.05f, 1.0f), 1.0f, 25); + disableOpaqueColorInversion(); + + enablePseudoTransparentColorInversion(); + renderStarLayer(1, STAR_LAYER_1, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.4f, 25); + renderStarLayer(2, STAR_LAYER_2, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.2f, 25); + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } + } + + public static void enablePseudoTransparentColorInversion() { + GL11.glEnable(GL11.GL_COLOR_LOGIC_OP); + GL11.glLogicOp(GL11.GL_OR_INVERTED); + } + + public static void enableOpaqueColorInversion() { + GL11.glEnable(GL11.GL_COLOR_LOGIC_OP); + GL11.glLogicOp(GL11.GL_COPY_INVERTED); + } + + public static void disableOpaqueColorInversion() { + GL11.glDisable(GL11.GL_COLOR_LOGIC_OP); + } +} diff --git a/src/main/java/tectech/thing/block/RenderGodforgeGlass.java b/src/main/java/tectech/thing/block/RenderGodforgeGlass.java new file mode 100644 index 0000000000..12c0327f65 --- /dev/null +++ b/src/main/java/tectech/thing/block/RenderGodforgeGlass.java @@ -0,0 +1,122 @@ +package tectech.thing.block; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +public class RenderGodforgeGlass implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + Tessellator tessellator = Tessellator.instance; + GL11.glPushMatrix(); + // Get icons from custom register (useful for renderers and fluids) + IIcon side = BlockGodforgeGlass.Icon; + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, -1.0F, 0.0F); + renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 0.0F, -1.0F); + renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 0.0F, 1.0F); + renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(-1.0F, 0.0F, 0.0F); + renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(1.0F, 0.0F, 0.0F); + renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, + RenderBlocks renderer) { + + renderer.renderStandardBlock(block, x, y, z); + Tessellator tes = Tessellator.instance; + tes.setNormal(0F, 1F, 0F); + tes.setBrightness(15728880); + tes.setColorOpaque_F(0F, 1F, 1F); + IIcon side = BlockGodforgeGlass.Icon; + + // South + if (world.getBlock(x, y, z + 1) + .getClass() != BlockGodforgeGlass.class) { + tes.addVertexWithUV(x, y, z + 0.999, side.getMinU(), side.getMaxV()); // 0.999 instead of 1 for fighting + // (textures overlapping) + tes.addVertexWithUV(x, y + 1, z + 0.999, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y + 1, z + 0.999, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y, z + 0.999, side.getMaxU(), side.getMaxV()); + } + // East + if (world.getBlock(x + 1, y, z) + .getClass() != BlockGodforgeGlass.class) { + tes.addVertexWithUV(x + 0.999, y, z + 1, side.getMinU(), side.getMaxV()); + tes.addVertexWithUV(x + 0.999, y + 1, z + 1, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x + 0.999, y + 1, z, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x + 0.999, y, z, side.getMaxU(), side.getMaxV()); + } + // North + if (world.getBlock(x, y, z - 1) + .getClass() != BlockGodforgeGlass.class) { + tes.addVertexWithUV(x + 1, y, z + 0.001, side.getMinU(), side.getMaxV()); + tes.addVertexWithUV(x + 1, y + 1, z + 0.001, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x, y + 1, z + 0.001, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x, y, z + 0.001, side.getMaxU(), side.getMaxV()); + } + // West + if (world.getBlock(x - 1, y, z) + .getClass() != BlockGodforgeGlass.class) { + tes.addVertexWithUV(x + 0.001, y, z, side.getMinU(), side.getMaxV()); + tes.addVertexWithUV(x + 0.001, y + 1, z, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x + 0.001, y + 1, z + 1, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x + 0.001, y, z + 1, side.getMaxU(), side.getMaxV()); + } + // Top + if (world.getBlock(x, y + 1, z) + .getClass() != BlockGodforgeGlass.class) { + tes.addVertexWithUV(x, y + 0.999, z + 1, side.getMinU(), side.getMaxV()); + tes.addVertexWithUV(x, y + 0.999, z, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y + 0.999, z, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y + 0.999, z + 1, side.getMaxU(), side.getMaxV()); + } + // Bottom + if (world.getBlock(x, y - 1, z) + .getClass() != BlockGodforgeGlass.class) { + tes.addVertexWithUV(x, y + 0.001, z, side.getMinU(), side.getMaxV()); + tes.addVertexWithUV(x, y + 0.001, z + 1, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y + 0.001, z + 1, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y + 0.001, z, side.getMaxU(), side.getMaxV()); + } + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return BlockGodforgeGlass.renderID; + } +} diff --git a/src/main/java/tectech/thing/block/RenderQuantumGlass.java b/src/main/java/tectech/thing/block/RenderQuantumGlass.java new file mode 100644 index 0000000000..43b212d44a --- /dev/null +++ b/src/main/java/tectech/thing/block/RenderQuantumGlass.java @@ -0,0 +1,129 @@ +package tectech.thing.block; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; + +/** + * Created by danie_000 on 19.12.2016. + */ +public final class RenderQuantumGlass implements ISimpleBlockRenderingHandler { + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + Tessellator tessellator = Tessellator.instance; + GL11.glPushMatrix(); + // Get icons from custom register (useful for renderers and fluids) + IIcon side = BlockQuantumGlass.stuff; + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, -1.0F, 0.0F); + renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 0.0F, -1.0F); + renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 0.0F, 1.0F); + renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(-1.0F, 0.0F, 0.0F); + renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(1.0F, 0.0F, 0.0F); + renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + tessellator.startDrawingQuads(); + tessellator.setNormal(0.0F, 1.0F, 0.0F); + renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, side); + tessellator.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, + RenderBlocks renderer) { + + renderer.renderStandardBlock(block, x, y, z); + Tessellator tes = Tessellator.instance; + GL11.glPushMatrix(); + tes.setNormal(0F, 1F, 0F); + tes.setBrightness(15728880); + tes.setColorOpaque_F(0F, 1F, 1F); + IIcon side = BlockQuantumGlass.stuff; + GL11.glDisable(GL11.GL_CULL_FACE); + + // South + if (world.getBlock(x, y, z + 1) + .getClass() != BlockQuantumGlass.class) { + tes.addVertexWithUV(x, y, z + 0.999, side.getMinU(), side.getMaxV()); // 0.999 instead of 1 for fighting + // (textures overlapping) + tes.addVertexWithUV(x, y + 1, z + 0.999, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y + 1, z + 0.999, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y, z + 0.999, side.getMaxU(), side.getMaxV()); + } + // East + if (world.getBlock(x + 1, y, z) + .getClass() != BlockQuantumGlass.class) { + tes.addVertexWithUV(x + 0.999, y, z + 1, side.getMinU(), side.getMaxV()); + tes.addVertexWithUV(x + 0.999, y + 1, z + 1, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x + 0.999, y + 1, z, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x + 0.999, y, z, side.getMaxU(), side.getMaxV()); + } + // North + if (world.getBlock(x, y, z - 1) + .getClass() != BlockQuantumGlass.class) { + tes.addVertexWithUV(x + 1, y, z + 0.001, side.getMinU(), side.getMaxV()); + tes.addVertexWithUV(x + 1, y + 1, z + 0.001, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x, y + 1, z + 0.001, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x, y, z + 0.001, side.getMaxU(), side.getMaxV()); + } + // West + if (world.getBlock(x - 1, y, z) + .getClass() != BlockQuantumGlass.class) { + tes.addVertexWithUV(x + 0.001, y, z, side.getMinU(), side.getMaxV()); + tes.addVertexWithUV(x + 0.001, y + 1, z, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x + 0.001, y + 1, z + 1, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x + 0.001, y, z + 1, side.getMaxU(), side.getMaxV()); + } + // Top + if (world.getBlock(x, y + 1, z) + .getClass() != BlockQuantumGlass.class) { + tes.addVertexWithUV(x, y + 0.999, z + 1, side.getMinU(), side.getMaxV()); + tes.addVertexWithUV(x, y + 0.999, z, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y + 0.999, z, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y + 0.999, z + 1, side.getMaxU(), side.getMaxV()); + } + // Bottom + if (world.getBlock(x, y - 1, z) + .getClass() != BlockQuantumGlass.class) { + tes.addVertexWithUV(x, y + 0.001, z, side.getMinU(), side.getMaxV()); + tes.addVertexWithUV(x, y + 0.001, z + 1, side.getMinU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y + 0.001, z + 1, side.getMaxU(), side.getMinV()); + tes.addVertexWithUV(x + 1, y + 0.001, z, side.getMaxU(), side.getMaxV()); + } + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + return true; + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return BlockQuantumGlass.renderID; + } +} diff --git a/src/main/java/tectech/thing/block/RenderQuantumStuff.java b/src/main/java/tectech/thing/block/RenderQuantumStuff.java new file mode 100644 index 0000000000..98a0562b3e --- /dev/null +++ b/src/main/java/tectech/thing/block/RenderQuantumStuff.java @@ -0,0 +1,103 @@ +package tectech.thing.block; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.RenderBlocks; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraft.util.Vec3; +import net.minecraft.world.IBlockAccess; + +import org.lwjgl.opengl.GL11; + +import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; +import tectech.TecTech; + +/** + * Created by danie_000 on 19.12.2016. + */ +public final class RenderQuantumStuff implements ISimpleBlockRenderingHandler { + + private static final Tessellator tes = Tessellator.instance; + + @Override + public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + GL11.glPushMatrix(); + // Get icons from custom register (useful for renderers and fluids) + IIcon side = BlockQuantumStuff.stuff; + tes.startDrawingQuads(); + tes.setNormal(0.0F, -1.0F, 0.0F); + renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + tes.startDrawingQuads(); + tes.setNormal(0.0F, 0.0F, -1.0F); + renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + tes.startDrawingQuads(); + tes.setNormal(0.0F, 0.0F, 1.0F); + renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + tes.startDrawingQuads(); + tes.setNormal(-1.0F, 0.0F, 0.0F); + renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + tes.startDrawingQuads(); + tes.setNormal(1.0F, 0.0F, 0.0F); + renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + tes.startDrawingQuads(); + tes.setNormal(0.0F, 1.0F, 0.0F); + renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, side); + tes.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + GL11.glPopMatrix(); + } + + @Override + public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, + RenderBlocks renderer) { + // renderer.renderStandardBlock(block, x, y, z); + GL11.glPushMatrix(); + tes.setNormal(0F, 1F, 0F); + tes.setBrightness(15728880); + IIcon side = BlockQuantumStuff.stuff; + for (int i = 0; i < 6; i++) { + float f = 1 - TecTech.RANDOM.nextFloat() / 4f, g = f - TecTech.RANDOM.nextFloat() / 4f, + r = g - TecTech.RANDOM.nextFloat() / 4f - 0.25f; + tes.setColorOpaque_F(r, g, f); + float rotX = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI, + rotY = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI, + rotZ = TecTech.RANDOM.nextFloat() * 2 * (float) Math.PI; + tesAbuse(x, y, z, -1.425f, -1.425f, .1f, rotX, rotY, rotZ, side.getMinU(), side.getMaxV()); + tesAbuse(x, y, z, -1.425f, 1.425f, .1f, rotX, rotY, rotZ, side.getMinU(), side.getMinV()); + tesAbuse(x, y, z, 1.425f, 1.425f, .1f, rotX, rotY, rotZ, side.getMaxU(), side.getMinV()); + tesAbuse(x, y, z, 1.425f, -1.425f, .1f, rotX, rotY, rotZ, side.getMaxU(), side.getMaxV()); + + tesAbuse(x, y, z, 1.425f, -1.425f, -.1f, rotX, rotY, rotZ, side.getMaxU(), side.getMaxV()); + tesAbuse(x, y, z, 1.425f, 1.425f, -.1f, rotX, rotY, rotZ, side.getMaxU(), side.getMinV()); + tesAbuse(x, y, z, -1.425f, 1.425f, -.1f, rotX, rotY, rotZ, side.getMinU(), side.getMinV()); + tesAbuse(x, y, z, -1.425f, -1.425f, -.1f, rotX, rotY, rotZ, side.getMinU(), side.getMaxV()); + } + GL11.glPopMatrix(); + return true; + } + + private void tesAbuse(int x, int y, int z, float sx, float sy, float sz, float rotX, float rotY, float rotZ, + float sideU, float sideV) { + Vec3 pos = Vec3.createVectorHelper(sx, sy, sz); + pos.rotateAroundX(rotX); + pos.rotateAroundY(rotY); + pos.rotateAroundZ(rotZ); + tes.addVertexWithUV(pos.xCoord + x + .5f, pos.yCoord + y + .5f, pos.zCoord + z + .5f, sideU, sideV); + } + + @Override + public boolean shouldRender3DInInventory(int modelId) { + return true; + } + + @Override + public int getRenderId() { + return BlockQuantumStuff.renderID; + } +} diff --git a/src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java b/src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java new file mode 100644 index 0000000000..4a46660d0d --- /dev/null +++ b/src/main/java/tectech/thing/block/TileEntityEyeOfHarmony.java @@ -0,0 +1,200 @@ +package tectech.thing.block; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import java.util.stream.IntStream; + +import net.minecraft.block.Block; +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.minecraft.util.AxisAlignedBB; + +import gtneioreplugin.plugin.block.ModBlocks; + +public class TileEntityEyeOfHarmony extends TileEntity { + + private static final double EOH_STAR_FIELD_RADIUS = 13; + + // Prevent culling when block is out of frame so model can remain active. + @Override + public AxisAlignedBB getRenderBoundingBox() { + + // Assuming your block is at (x, y, z) + double x = this.xCoord; + double y = this.yCoord; + double z = this.zCoord; + + // Create a bounding box that extends 'size' blocks in all directions from the block. + return AxisAlignedBB.getBoundingBox( + x - EOH_STAR_FIELD_RADIUS, + y - EOH_STAR_FIELD_RADIUS, + z - EOH_STAR_FIELD_RADIUS, + x + EOH_STAR_FIELD_RADIUS + 1, + y + EOH_STAR_FIELD_RADIUS + 1, + z + EOH_STAR_FIELD_RADIUS + 1); + } + + public void setSize(float size) { + this.size = size; + } + + public void setRotationSpeed(float rotationSpeed) { + this.rotationSpeed = rotationSpeed; + } + + private float size = 10; + private float rotationSpeed = 10; + + // Fun fact, these methods were entirely written by ChatGPT3... Take that as you will. + public static ArrayList selectNRandomElements(Collection inputList, long n) { + ArrayList randomElements = new ArrayList<>((int) n); + ArrayList inputArray = new ArrayList<>(inputList); + Random rand = new Random(); + IntStream.range(0, (int) n) + .forEach(i -> { + int randomIndex = rand.nextInt(inputArray.size()); + randomElements.add(inputArray.get(randomIndex)); + inputArray.remove(randomIndex); + }); + return randomElements; + } + + public static float generateRandomFloat(float a, float b) { + Random rand = new Random(); + return rand.nextFloat() * (b - a) + a; + } + + public long getTier() { + return tier; + } + + public void setTier(long tier) { + this.tier = tier; + } + + private long tier = 9; + + public float getSize() { + return size; + } + + public float getRotationSpeed() { + return rotationSpeed; + } + + @Override + public void updateEntity() { + angle += 10.0f; + } + + public static class OrbitingObject { + + public OrbitingObject(Block block, float distance, float rotationSpeed, float orbitSpeed, float xAngle, + float zAngle, float scale) { + this.block = block; + this.distance = distance; + this.rotationSpeed = rotationSpeed; + this.orbitSpeed = orbitSpeed; + this.xAngle = xAngle; + this.zAngle = zAngle; + this.scale = scale; + } + + public final Block block; + public final float distance; + public final float rotationSpeed; + public final float orbitSpeed; + public final float xAngle; + public final float zAngle; + public final float scale; + } + + public ArrayList getOrbitingObjects() { + return orbitingObjects; + } + + private final ArrayList orbitingObjects = new ArrayList<>(); + private static final Set BLACKLISTED_BLOCKS = Collections + .unmodifiableSet(new HashSet<>(Arrays.asList("Tf", "Ow", "ED", "EA", "VA"))); + // Map of strings to blocks + private static final Map BLOCKS = new HashMap<>(); + + static { + // Initialize the map of blocks + ModBlocks.blocks.forEach((dimString, dimBlock) -> { + if (!BLACKLISTED_BLOCKS.contains(dimString)) { + BLOCKS.put(dimString, dimBlock); + } + }); + } + + private static final float MAX_ANGLE = 30; + + // This must be set last. + public void generateImportantInfo() { + + int index = 0; + for (Block block : selectNRandomElements(BLOCKS.values(), tier + 1)) { + + float xAngle = generateRandomFloat(-MAX_ANGLE, MAX_ANGLE); + float zAngle = generateRandomFloat(-MAX_ANGLE, MAX_ANGLE); + index += 1.0; + float distance = index + generateRandomFloat(-0.2f, 0.2f); + float scale = generateRandomFloat(0.2f, 0.9f); + float rotationSpeed = generateRandomFloat(0.5f, 1.5f); + float orbitSpeed = generateRandomFloat(0.5f, 1.5f); + orbitingObjects.add(new OrbitingObject(block, distance, rotationSpeed, orbitSpeed, xAngle, zAngle, scale)); + } + } + + // Used to track the rotation of the star/planets. + public float angle; + + private static final String EOH_NBT_TAG = "EOH:"; + private static final String ROTATION_SPEED_NBT_TAG = EOH_NBT_TAG + "rotationSpeed"; + private static final String SIZE_NBT_TAG = EOH_NBT_TAG + "size"; + private static final String TIER_NBT_TAG = EOH_NBT_TAG + "tier"; + + @Override + public void writeToNBT(NBTTagCompound compound) { + super.writeToNBT(compound); + + // Save other stats. + compound.setFloat(ROTATION_SPEED_NBT_TAG, rotationSpeed); + compound.setFloat(SIZE_NBT_TAG, size); + compound.setLong(TIER_NBT_TAG, tier); + } + + @Override + public void readFromNBT(NBTTagCompound compound) { + super.readFromNBT(compound); + + // Load other stats. + rotationSpeed = compound.getFloat(ROTATION_SPEED_NBT_TAG); + size = compound.getFloat(SIZE_NBT_TAG); + tier = compound.getLong(TIER_NBT_TAG); + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + writeToNBT(nbttagcompound); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + readFromNBT(pkt.func_148857_g()); + } + +} diff --git a/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java new file mode 100644 index 0000000000..7c671b8a31 --- /dev/null +++ b/src/main/java/tectech/thing/block/TileEntityForgeOfGods.java @@ -0,0 +1,82 @@ +package tectech.thing.block; + +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.minecraft.util.AxisAlignedBB; + +public class TileEntityForgeOfGods extends TileEntity { + + private float size = 10; + private float rotationSpeed = 10; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + return INFINITE_EXTENT_AABB; + } + + @Override + public double getMaxRenderDistanceSquared() { + return 25600; + } + + public void setRenderSize(float size) { + this.size = size; + } + + public void setRenderRotationSpeed(float rotationSpeed) { + this.rotationSpeed = rotationSpeed; + } + + public float getRenderSize() { + return size; + } + + public float getRenderRotationSpeed() { + return rotationSpeed; + } + + @Override + public void updateEntity() { + angle += 10.0f; + } + + // Used to track the rotation of the star + public float angle; + + private static final String FOG_NBT_TAG = "FOG:"; + private static final String ROTATION_SPEED_NBT_TAG = FOG_NBT_TAG + "renderRotationSpeed"; + private static final String SIZE_NBT_TAG = FOG_NBT_TAG + "renderSize"; + + @Override + public void writeToNBT(NBTTagCompound compound) { + super.writeToNBT(compound); + + // Save stats + compound.setFloat(ROTATION_SPEED_NBT_TAG, rotationSpeed); + compound.setFloat(SIZE_NBT_TAG, size); + } + + @Override + public void readFromNBT(NBTTagCompound compound) { + super.readFromNBT(compound); + + // Load stats + rotationSpeed = compound.getFloat(ROTATION_SPEED_NBT_TAG); + size = compound.getFloat(SIZE_NBT_TAG); + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbttagcompound = new NBTTagCompound(); + writeToNBT(nbttagcompound); + return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 1, nbttagcompound); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + readFromNBT(pkt.func_148857_g()); + } +} diff --git a/src/main/java/tectech/thing/casing/BlockGTCasingsBA0.java b/src/main/java/tectech/thing/casing/BlockGTCasingsBA0.java new file mode 100644 index 0000000000..19469a0c70 --- /dev/null +++ b/src/main/java/tectech/thing/casing/BlockGTCasingsBA0.java @@ -0,0 +1,224 @@ +package tectech.thing.casing; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.objects.GTCopiedBlockTexture; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.BlockCasingsAbstract; +import gregtech.common.blocks.MaterialCasings; +import tectech.thing.CustomItemList; + +/** + * Created by danie_000 on 03.10.2016. + */ +// Mostly tesla coils, also 2 eye of harmony casings. +public class BlockGTCasingsBA0 extends BlockCasingsAbstract { + + private static final IIcon[] tM0 = new IIcon[2]; + private static final IIcon[] tM1 = new IIcon[2]; + private static final IIcon[] tM2 = new IIcon[2]; + private static final IIcon[] tM3 = new IIcon[2]; + private static final IIcon[] tM4 = new IIcon[2]; + private static final IIcon[] tM5 = new IIcon[2]; + private static final IIcon[] tM6 = new IIcon[2]; + private static IIcon tM7; + private static final IIcon[] tM8 = new IIcon[2]; + private static final IIcon[] tM9 = new IIcon[2]; + + private static IIcon EOH_INNER; + private static IIcon EOH_OUTER; + private static IIcon EOH_INFINITE; + + private static final byte START_INDEX = 16; + + public BlockGTCasingsBA0() { + super(ItemCasingsBA0.class, "gt.blockcasingsBA0", MaterialCasings.INSTANCE); + for (byte b = 0; b < 16; b = (byte) (b + 1)) { + Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][b + + START_INDEX] = new GTCopiedBlockTexture(this, 6, b); + /* IMPORTANT for block recoloring **/ + } + + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".0.name", "Redstone Alloy Primary Tesla Windings"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".1.name", "MV Superconductor Primary Tesla Windings"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".2.name", "HV Superconductor Primary Tesla Windings"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".3.name", "EV Superconductor Primary Tesla Windings"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".4.name", "IV Superconductor Primary Tesla Windings"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".5.name", "LuV Superconductor Primary Tesla Windings"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".9.name", "ZPM Superconductor Primary Tesla Windings"); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Tesla Base Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Tesla Toroid Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Tesla Secondary Windings"); + + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".10.name", "Reinforced Temporal Structure Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".11.name", "Reinforced Spatial Structure Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".12.name", "Infinite Spacetime Energy Boundary Casing"); + + CustomItemList.tM_TeslaPrimary_0.set(new ItemStack(this, 1, 0)); + CustomItemList.tM_TeslaPrimary_1.set(new ItemStack(this, 1, 1)); + CustomItemList.tM_TeslaPrimary_2.set(new ItemStack(this, 1, 2)); + CustomItemList.tM_TeslaPrimary_3.set(new ItemStack(this, 1, 3)); + CustomItemList.tM_TeslaPrimary_4.set(new ItemStack(this, 1, 4)); + CustomItemList.tM_TeslaPrimary_5.set(new ItemStack(this, 1, 5)); + CustomItemList.tM_TeslaPrimary_6.set(new ItemStack(this, 1, 9)); + + CustomItemList.tM_TeslaBase.set(new ItemStack(this, 1, 6)); + CustomItemList.tM_TeslaToroid.set(new ItemStack(this, 1, 7)); + CustomItemList.tM_TeslaSecondary.set(new ItemStack(this, 1, 8)); + + CustomItemList.EOH_Reinforced_Temporal_Casing.set(new ItemStack(this, 1, 10)); + CustomItemList.EOH_Reinforced_Spatial_Casing.set(new ItemStack(this, 1, 11)); + CustomItemList.EOH_Infinite_Energy_Casing.set(new ItemStack(this, 1, 12)); + } + + @Override + public void registerBlockIcons(IIconRegister aIconRegister) { + tM0[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_0"); + tM0[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_0"); + tM1[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_1"); + tM1[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_1"); + tM2[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_2"); + tM2[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_2"); + tM3[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_3"); + tM3[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_3"); + tM4[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_4"); + tM4[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_4"); + tM5[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_5"); + tM5[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_5"); + tM9[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_TOP_BOTTOM_6"); + tM9[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_PRIMARY_SIDES_6"); + + tM6[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_BASE_TOP_BOTTOM"); + tM6[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_BASE_SIDES"); + tM7 = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_TOROID"); + tM8[0] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_SECONDARY_TOP_BOTTOM"); + tM8[1] = aIconRegister.registerIcon("gregtech:iconsets/TM_TESLA_WINDING_SECONDARY_SIDES"); + + EOH_INNER = aIconRegister.registerIcon("gregtech:iconsets/EM_INNER_SPACETIME_REINFORCED_EOH_CASING"); + EOH_OUTER = aIconRegister.registerIcon("gregtech:iconsets/EM_OUTER_SPACETIME_REINFORCED_EOH_CASING"); + EOH_INFINITE = aIconRegister.registerIcon("gregtech:iconsets/EM_POWER_INFINITE"); + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + switch (aMeta) { + case 0: + switch (ordinalSide) { + case 0: + case 1: + return tM0[0]; + default: + return tM0[1]; + } + case 1: + switch (ordinalSide) { + case 0: + case 1: + return tM1[0]; + default: + return tM1[1]; + } + case 2: + switch (ordinalSide) { + case 0: + case 1: + return tM2[0]; + default: + return tM2[1]; + } + case 3: + switch (ordinalSide) { + case 0: + case 1: + return tM3[0]; + default: + return tM3[1]; + } + case 4: + switch (ordinalSide) { + case 0: + case 1: + return tM4[0]; + default: + return tM4[1]; + } + case 5: + switch (ordinalSide) { + case 0: + case 1: + return tM5[0]; + default: + return tM5[1]; + } + case 6: + switch (ordinalSide) { + case 0: + case 1: + return tM6[0]; + default: + return tM6[1]; + } + case 7: + return tM7; + case 8: + switch (ordinalSide) { + case 0: + case 1: + return tM8[0]; + default: + return tM8[1]; + } + case 9: + switch (ordinalSide) { + case 0: + case 1: + return tM9[0]; + default: + return tM9[1]; + } + case 10: + return EOH_INNER; + case 11: + return EOH_OUTER; + case 12: + return EOH_INFINITE; + default: + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { + int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); + return getIcon(ordinalSide, tMeta); + } + + @Override + public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { + for (int i = 0; i <= 12; i++) { + aList.add(new ItemStack(aItem, 1, i)); + } + } +} diff --git a/src/main/java/tectech/thing/casing/BlockGTCasingsNH.java b/src/main/java/tectech/thing/casing/BlockGTCasingsNH.java new file mode 100644 index 0000000000..26c7097391 --- /dev/null +++ b/src/main/java/tectech/thing/casing/BlockGTCasingsNH.java @@ -0,0 +1,59 @@ +package tectech.thing.casing; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; + +import gregtech.api.enums.Textures; +import gregtech.api.objects.GTCopiedBlockTexture; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.BlockCasingsAbstract; +import gregtech.common.blocks.MaterialCasings; +import tectech.TecTech; +import tectech.thing.CustomItemList; + +/** + * Created by danie_000 on 03.10.2016. + */ +public class BlockGTCasingsNH extends BlockCasingsAbstract { + + public static boolean mConnectedMachineTextures = true; + + public BlockGTCasingsNH() { + super(ItemCasingsNH.class, "gt.blockcasingsNH", MaterialCasings.INSTANCE); + setCreativeTab(TecTech.creativeTabTecTech); + + for (byte b = 0; b < 16; b = (byte) (b + 1)) { + Textures.BlockIcons.casingTexturePages[8][b + 64] = new GTCopiedBlockTexture(this, 6, b); + /* IMPORTANT for block recoloring */ + } + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "UEV Machine Casing"); // adding + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "UIV Machine Casing"); // adding + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "UMV Machine Casing"); // adding + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".13.name", "UXV Machine Casing"); // adding + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".14.name", "MAX Machine Casing"); // adding + + CustomItemList.Casing_UEV.set(new ItemStack(this, 1, 10)); + CustomItemList.Casing_UIV.set(new ItemStack(this, 1, 11)); + CustomItemList.Casing_UMV.set(new ItemStack(this, 1, 12)); + CustomItemList.Casing_UXV.set(new ItemStack(this, 1, 13)); + CustomItemList.Casing_MAXV.set(new ItemStack(this, 1, 14)); + } + + @Override + public void registerBlockIcons(IIconRegister aIconRegister) { + // super.registerBlockIcons(aIconRegister); + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + if (ordinalSide == 0) { + return tectech.thing.metaTileEntity.Textures.MACHINECASINGS_BOTTOM_TT[aMeta].getIcon(); + } + if (ordinalSide == 1) { + return tectech.thing.metaTileEntity.Textures.MACHINECASINGS_TOP_TT[aMeta].getIcon(); + } + return tectech.thing.metaTileEntity.Textures.MACHINECASINGS_SIDE_TT[aMeta].getIcon(); + } +} diff --git a/src/main/java/tectech/thing/casing/BlockGTCasingsTT.java b/src/main/java/tectech/thing/casing/BlockGTCasingsTT.java new file mode 100644 index 0000000000..33ec58d7da --- /dev/null +++ b/src/main/java/tectech/thing/casing/BlockGTCasingsTT.java @@ -0,0 +1,193 @@ +package tectech.thing.casing; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.objects.GTCopiedBlockTexture; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.BlockCasingsAbstract; +import gregtech.common.blocks.MaterialCasings; +import tectech.TecTech; +import tectech.thing.CustomItemList; + +/** + * Created by danie_000 on 03.10.2016. + */ +public class BlockGTCasingsTT extends BlockCasingsAbstract { + + public static final byte texturePage = TecTech.tectechTexturePage1; + public static final short textureOffset = texturePage << 7; // Start of PAGE 8 (which is the 9th page) (8*128) + private static IIcon eM0, eM1, eM1s, eM2, eM2s, eM3, eM3s, eM4, eM5, eM6, eM7, eM7s, eM8, eM9, eM10, eM11, eM12, + eM13, eM14; + private static final IIcon[] debug = new IIcon[6]; + + public BlockGTCasingsTT() { + super(ItemCasingsTT.class, "gt.blockcasingsTT", MaterialCasings.INSTANCE); + setCreativeTab(TecTech.creativeTabTecTech); + + for (byte b = 0; b < 16; b = (byte) (b + 1)) { + Textures.BlockIcons.casingTexturePages[texturePage][b] = new GTCopiedBlockTexture(this, 6, b); + /* IMPORTANT for block recoloring **/ + } + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".0.name", "High Power Casing"); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Computer Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".2.name", "Computer Heat Vent"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".3.name", "Advanced Computer Casing"); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Molecular Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Advanced Molecular Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Containment Field Generator"); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Molecular Coil"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".8.name", "Hollow Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".9.name", "Spacetime Altering Casing"); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".10.name", "Teleportation Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".11.name", "Dimensional Bridge Generator"); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".12.name", "Ultimate Molecular Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".13.name", "Ultimate Advanced Molecular Casing"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".14.name", "Ultimate Containment Field Generator"); + + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".15.name", "Debug Sides"); // NOT REGISTER AS + // TEXTURE FOR + // HATCHES! + + CustomItemList.eM_Power.set(new ItemStack(this, 1, 0)); + + CustomItemList.eM_Computer_Casing.set(new ItemStack(this, 1, 1)); + CustomItemList.eM_Computer_Vent.set(new ItemStack(this, 1, 2)); + CustomItemList.eM_Computer_Bus.set(new ItemStack(this, 1, 3)); + + CustomItemList.eM_Containment.set(new ItemStack(this, 1, 4)); + CustomItemList.eM_Containment_Advanced.set(new ItemStack(this, 1, 5)); + CustomItemList.eM_Containment_Field.set(new ItemStack(this, 1, 6)); + + CustomItemList.eM_Coil.set(new ItemStack(this, 1, 7)); + CustomItemList.eM_Hollow.set(new ItemStack(this, 1, 8)); + CustomItemList.eM_Spacetime.set(new ItemStack(this, 1, 9)); + + CustomItemList.eM_Teleportation.set(new ItemStack(this, 1, 10)); + CustomItemList.eM_Dimensional.set(new ItemStack(this, 1, 11)); + + CustomItemList.eM_Ultimate_Containment.set(new ItemStack(this, 1, 12)); + CustomItemList.eM_Ultimate_Containment_Advanced.set(new ItemStack(this, 1, 13)); + CustomItemList.eM_Ultimate_Containment_Field.set(new ItemStack(this, 1, 14)); + + CustomItemList.debugBlock.set(new ItemStack(this, 1, 15)); + } + + @Override + public void registerBlockIcons(IIconRegister aIconRegister) { + // super.registerBlockIcons(aIconRegister); + eM0 = aIconRegister.registerIcon("gregtech:iconsets/EM_POWER"); + + eM1 = aIconRegister.registerIcon("gregtech:iconsets/EM_PC_NONSIDE"); + eM1s = aIconRegister.registerIcon("gregtech:iconsets/EM_PC"); + eM2 = aIconRegister.registerIcon("gregtech:iconsets/EM_PC_VENT_NONSIDE"); + eM2s = aIconRegister.registerIcon("gregtech:iconsets/EM_PC_VENT"); + eM3 = aIconRegister.registerIcon("gregtech:iconsets/EM_PC_ADV_NONSIDE"); + eM3s = aIconRegister.registerIcon("gregtech:iconsets/EM_PC_ADV"); + + eM4 = aIconRegister.registerIcon("gregtech:iconsets/EM_CASING"); + eM5 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_CASING"); + eM6 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD"); + + eM7 = aIconRegister.registerIcon("gregtech:iconsets/EM_COIL_NONSIDE"); + eM7s = aIconRegister.registerIcon("gregtech:iconsets/EM_COIL"); + eM8 = aIconRegister.registerIcon("gregtech:iconsets/EM_HOLLOW"); + eM9 = aIconRegister.registerIcon("gregtech:iconsets/EM_TIMESPACE"); + + eM10 = aIconRegister.registerIcon("gregtech:iconsets/EM_TELE"); + eM11 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM"); + + eM12 = aIconRegister.registerIcon("gregtech:iconsets/EM_ULTIMATE_CASING"); + eM13 = aIconRegister.registerIcon("gregtech:iconsets/EM_ULTIMATE_FIELD_CASING"); + eM14 = aIconRegister.registerIcon("gregtech:iconsets/EM_ULTIMATE_FIELD"); + + debug[0] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_0"); + debug[1] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_1"); + debug[2] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_2"); + debug[3] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_3"); + debug[4] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_4"); + debug[5] = aIconRegister.registerIcon("gregtech:iconsets/DEBUG_5"); + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + switch (aMeta) { + case 0: + return eM0; + case 1: + if (ordinalSide < 2) { + return eM1; + } + return eM1s; + case 2: + if (ordinalSide < 2) { + return eM2; + } + return eM2s; + case 3: + if (ordinalSide < 2) { + return eM3; + } + return eM3s; + case 4: + return eM4; + case 5: + return eM5; + case 6: + return eM6; + case 7: + if (ordinalSide < 2) { + return eM7; + } + return eM7s; + case 8: + return eM8; + case 9: + return eM9; + case 10: + return eM10; + case 11: + return eM11; + case 12: + return eM12; + case 13: + return eM13; + case 14: + return eM14; + case 15: + return debug[ordinalSide]; + default: + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { + int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); + return getIcon(ordinalSide, tMeta); + } + + @Override + public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { + for (int i = 0; i <= 15; i++) { + aList.add(new ItemStack(aItem, 1, i)); + } + } +} diff --git a/src/main/java/tectech/thing/casing/BlockGodforgeCasings.java b/src/main/java/tectech/thing/casing/BlockGodforgeCasings.java new file mode 100644 index 0000000000..e744cdf9b7 --- /dev/null +++ b/src/main/java/tectech/thing/casing/BlockGodforgeCasings.java @@ -0,0 +1,130 @@ +package tectech.thing.casing; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.objects.GTCopiedBlockTexture; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.BlockCasingsAbstract; +import gregtech.common.blocks.MaterialCasings; +import tectech.thing.CustomItemList; + +public class BlockGodforgeCasings extends BlockCasingsAbstract { + + private static IIcon GodforgeTrim; + private static IIcon GodforgeInner; + private static IIcon GodforgeSupport; + private static IIcon GodforgeOuter; + private static IIcon GodforgeEnergy; + private static IIcon GravitonModulatorT1; + private static IIcon GravitonModulatorT2; + private static IIcon GravitonModulatorT3; + private static IIcon PhononConduit; + + private static final byte START_INDEX = 64; + + public BlockGodforgeCasings() { + super(ItemCasingsGodforge.class, "gt.godforgecasing", MaterialCasings.INSTANCE); + for (byte b = 0; b < 16; b = (byte) (b + 1)) { + Textures.BlockIcons.casingTexturePages[7][b + START_INDEX] = new GTCopiedBlockTexture(this, 6, b); + } + + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".0.name", "Singularity Reinforced Stellar Shielding Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".1.name", "Celestial Matter Guidance Casing"); + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + ".2.name", + "Boundless Gravitationally Severed Structure Casing"); + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + ".3.name", + "Transcendentally Amplified Magnetic Confinement Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".4.name", "Stellar Energy Siphon Casing"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".5.name", "Remote Graviton Flow Modulator"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".6.name", "Medial Graviton Flow Modulator"); + GTLanguageManager.addStringLocalization(getUnlocalizedName() + ".7.name", "Central Graviton Flow Modulator"); + GTLanguageManager + .addStringLocalization(getUnlocalizedName() + ".8.name", "Harmonic Phonon Transmission Conduit"); + + CustomItemList.Godforge_SingularityShieldingCasing.set(new ItemStack(this, 1, 0)); + CustomItemList.Godforge_GuidanceCasing.set(new ItemStack(this, 1, 1)); + CustomItemList.Godforge_BoundlessStructureCasing.set(new ItemStack(this, 1, 2)); + CustomItemList.Godforge_MagneticConfinementCasing.set(new ItemStack(this, 1, 3)); + CustomItemList.Godforge_StellarEnergySiphonCasing.set(new ItemStack(this, 1, 4)); + CustomItemList.Godforge_GravitonFlowModulatorTier1.set(new ItemStack(this, 1, 5)); + CustomItemList.Godforge_GravitonFlowModulatorTier2.set(new ItemStack(this, 1, 6)); + CustomItemList.Godforge_GravitonFlowModulatorTier3.set(new ItemStack(this, 1, 7)); + CustomItemList.Godforge_HarmonicPhononTransmissionConduit.set(new ItemStack(this, 1, 8)); + } + + @Override + public void registerBlockIcons(IIconRegister aIconRegister) { + GodforgeTrim = aIconRegister.registerIcon("gregtech:iconsets/GODFORGE_TRIM"); + GodforgeInner = aIconRegister.registerIcon("gregtech:iconsets/GODFORGE_INNER"); + GodforgeSupport = aIconRegister.registerIcon("gregtech:iconsets/GODFORGE_SUPPORT"); + GodforgeOuter = aIconRegister.registerIcon("gregtech:iconsets/GRAVITON_TOP_BOTTOM"); + GodforgeEnergy = aIconRegister.registerIcon("gregtech:iconsets/GODFORGE_ENERGY"); + GravitonModulatorT1 = aIconRegister.registerIcon("gregtech:iconsets/GRAVITON_CASING_2"); + GravitonModulatorT2 = aIconRegister.registerIcon("gregtech:iconsets/GRAVITON_CASING_1"); + GravitonModulatorT3 = aIconRegister.registerIcon("gregtech:iconsets/GRAVITON_CASING_0"); + PhononConduit = aIconRegister.registerIcon("gregtech:iconsets/PHONON_CONDUIT"); + } + + @Override + public IIcon getIcon(int aSide, int aMeta) { + switch (aMeta) { + case 0: + return GodforgeTrim; + case 1: + return GodforgeInner; + case 2: + return GodforgeSupport; + case 3: + return GodforgeOuter; + case 4: + return GodforgeEnergy; + case 5: + if (aSide < 2) { + return GodforgeOuter; + } + return GravitonModulatorT1; + case 6: + if (aSide < 2) { + return GodforgeOuter; + } + return GravitonModulatorT2; + case 7: + if (aSide < 2) { + return GodforgeOuter; + } + return GravitonModulatorT3; + case 8: + return PhononConduit; + default: + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int aSide) { + int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); + return getIcon(aSide, tMeta); + } + + @SuppressWarnings("unchecked") + @Override + public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { + for (int i = 0; i <= 8; i++) { + aList.add(new ItemStack(aItem, 1, i)); + } + } +} diff --git a/src/main/java/tectech/thing/casing/ItemCasingsBA0.java b/src/main/java/tectech/thing/casing/ItemCasingsBA0.java new file mode 100644 index 0000000000..8d3896d600 --- /dev/null +++ b/src/main/java/tectech/thing/casing/ItemCasingsBA0.java @@ -0,0 +1,110 @@ +package tectech.thing.casing; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.util.GTUtility.formatNumbers; +import static net.minecraft.util.EnumChatFormatting.AQUA; +import static net.minecraft.util.EnumChatFormatting.GRAY; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import gregtech.api.enums.TierEU; +import gregtech.common.blocks.ItemCasingsAbstract; +import tectech.util.CommonValues; + +public class ItemCasingsBA0 extends ItemCasingsAbstract { + + public ItemCasingsBA0(Block par1) { + super(par1); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + if (aStack.getItemDamage() < 15) { + aList.add(CommonValues.THETA_MOVEMENT); + } else { + aList.add(CommonValues.COSMIC_MARK); + } + switch (aStack.getItemDamage()) { + case 0: // "Redstone Alloy Primary Tesla Windings" + case 1: // "MV Superconductor Primary Tesla Windings" + case 2: // "HV Superconductor Primary Tesla Windings" + case 3: // "EV Superconductor Primary Tesla Windings" + case 4: // "IV Superconductor Primary Tesla Windings" + case 5: // "LuV Superconductor Primary Tesla Windings" + aList.add( + translateToLocal("gt.blockcasingsBA0.0.desc.0") + " " + + formatNumbers(V[aStack.getItemDamage() + 1]) + + " EU/t"); // Handles up to + aList.add(AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.0.desc.1")); // What + // one + // man + // calls + // God, + // another + // calls + // the + // laws of physics. + break; + case 6: // "Tesla Base Casing" + aList.add(translateToLocal("gt.blockcasingsBA0.6.desc.0")); // The base of a wondrous contraption + aList.add(AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.6.desc.1")); // it's + // alive, + // IT'S + // ALIVE! + break; + case 7: // "Tesla Toroid Casing" + aList.add(translateToLocal("gt.blockcasingsBA0.7.desc.0")); // Made out of the finest tin foil! + aList.add(AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.7.desc.1")); // Faraday + // suits + // might + // come + // later + break; + case 8: // "Tesla Secondary Windings" + aList.add(translateToLocal("gt.blockcasingsBA0.8.desc.0")); // Picks up power from a primary coil + aList.add(AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.8.desc.1")); // Who + // wouldn't + // want + // a + // 32k + // epoxy + // multi? + break; + case 9: // "ZPM Superconductor Primary Tesla Windings" + aList.add(translateToLocal("gt.blockcasingsBA0.0.desc.0") + " " + formatNumbers(TierEU.ZPM) + " EU/t"); // Handles + // up + // to + aList.add(AQUA.toString() + EnumChatFormatting.BOLD + translateToLocal("gt.blockcasingsBA0.0.desc.1")); // What + // one + // man + // calls + // God, + // another + case 10: // Reinforced Temporal Structure Casing + aList.add(AQUA + translateToLocal("gt.blockcasingsBA0.10.desc.0")); + aList.add(GRAY + translateToLocal("gt.blockcasingsBA0.10.desc.1")); + // Designed to resist spatial shearing from internal volume expansion. + // Can survive at least one big bang, maybe two... + break; + case 11: // Reinforced Temporal Structure Casing + aList.add(AQUA + translateToLocal("gt.blockcasingsBA0.11.desc.0")); + aList.add(GRAY + translateToLocal("gt.blockcasingsBA0.11.desc.1")); + // Resistant to temporal shearing from time dilation differences. + // This block can last an eternity without any decay. + break; + case 12: // Infinite Spacetime Energy Boundary Casing + aList.add(AQUA + translateToLocal("gt.blockcasingsBA0.12.desc.0")); + // Provides a stable bridge between spacetime regions. + break; + default: + aList.add("Damn son where did you get that!?"); + aList.add(EnumChatFormatting.BLUE + "From outer space... I guess..."); + } + } +} diff --git a/src/main/java/tectech/thing/casing/ItemCasingsGodforge.java b/src/main/java/tectech/thing/casing/ItemCasingsGodforge.java new file mode 100644 index 0000000000..52b741ca76 --- /dev/null +++ b/src/main/java/tectech/thing/casing/ItemCasingsGodforge.java @@ -0,0 +1,124 @@ +package tectech.thing.casing; + +import static net.minecraft.util.EnumChatFormatting.AQUA; +import static net.minecraft.util.EnumChatFormatting.BOLD; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.ItemCasingsAbstract; +import tectech.util.CommonValues; + +public class ItemCasingsGodforge extends ItemCasingsAbstract { + + public ItemCasingsGodforge(Block par1) { + super(par1); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + aList.add(CommonValues.GODFORGE_MARK); + switch (aStack.getItemDamage()) { + case 0: + aList.add( + GTLanguageManager.addStringLocalization( + "godforge.casings.0.Tooltip.0", + "Shielded by the event horizon of a singularity")); + aList.add( + AQUA.toString() + BOLD + + GTLanguageManager + .addStringLocalization("godforge.casings.0.Tooltip.1", "Don't get too close...")); + break; + case 1: + aList.add( + GTLanguageManager.addStringLocalization( + "godforge.casings.1.Tooltip.0", + "Designed to route stellar matter using spacetime distortion")); + aList.add( + AQUA.toString() + BOLD + + GTLanguageManager + .addStringLocalization("godforge.casings.1.Tooltip.1", "Reality Distortion")); + break; + case 2: + aList.add( + GTLanguageManager + .addStringLocalization("godforge.casings.2.Tooltip.0", "Unaffected by gravitational forces")); + aList.add( + AQUA.toString() + BOLD + + GTLanguageManager.addStringLocalization( + "godforge.casings.2.Tooltip.1", + "Not even a black hole could tear it apart.")); + break; + case 3: + aList.add( + GTLanguageManager.addStringLocalization( + "godforge.casings.3.Tooltip.0", + "Creates enormous magnetic fields capable of constraining entire stars")); + aList.add( + AQUA.toString() + BOLD + + GTLanguageManager + .addStringLocalization("godforge.casings.3.Tooltip.1", "It's super effective!")); + break; + case 4: + aList.add( + GTLanguageManager.addStringLocalization( + "godforge.casings.4.Tooltip.0", + "Taps into streams of stellar matter to harness their heat energy")); + aList.add( + AQUA.toString() + BOLD + + GTLanguageManager.addStringLocalization("godforge.casings.4.Tooltip.1", "Turn up the heat!")); + break; + case 5: + aList.add( + GTLanguageManager.addStringLocalization( + "godforge.casings.5.Tooltip.0", + "Controls the flow of gravitons to manipulate gravity")); + aList.add( + AQUA.toString() + BOLD + + GTLanguageManager.addStringLocalization( + "godforge.casings.5.Tooltip.1", + "Exponential scaling past 800 Galaxies")); + break; + case 6: + aList.add( + GTLanguageManager.addStringLocalization( + "godforge.casings.6.Tooltip.0", + "Controls the flow of gravitons to manipulate gravity")); + aList.add( + AQUA.toString() + BOLD + + GTLanguageManager.addStringLocalization("godforge.casings.6.Tooltip.1", "Getting closer...")); + break; + case 7: + aList.add( + GTLanguageManager.addStringLocalization( + "godforge.casings.7.Tooltip.0", + "Controls the flow of gravitons to manipulate gravity")); + aList.add( + AQUA.toString() + BOLD + + GTLanguageManager.addStringLocalization("godforge.casings.7.Tooltip.1", "Gravity Central")); + break; + case 8: + aList.add( + GTLanguageManager.addStringLocalization( + "godforge.casings.8.Tooltip.0", + "Transfers and stores extreme amounts of heat without any loss")); + aList.add( + AQUA.toString() + BOLD + + GTLanguageManager.addStringLocalization("godforge.casings.8.Tooltip.1", "<<>>Wave>>>")); + break; + default: + aList.add( + EnumChatFormatting.RED.toString() + BOLD + + GTLanguageManager + .addStringLocalization("godforge.casings.Error.Tooltip", "Error, report to GTNH team")); + } + } +} diff --git a/src/main/java/tectech/thing/casing/ItemCasingsNH.java b/src/main/java/tectech/thing/casing/ItemCasingsNH.java new file mode 100644 index 0000000000..c1f57e018f --- /dev/null +++ b/src/main/java/tectech/thing/casing/ItemCasingsNH.java @@ -0,0 +1,15 @@ +package tectech.thing.casing; + +import net.minecraft.block.Block; + +import gregtech.common.blocks.ItemCasingsAbstract; + +/** + * Created by danie_000 on 03.10.2016. + */ +public class ItemCasingsNH extends ItemCasingsAbstract { + + public ItemCasingsNH(Block par1) { + super(par1); + } +} diff --git a/src/main/java/tectech/thing/casing/ItemCasingsSpacetime.java b/src/main/java/tectech/thing/casing/ItemCasingsSpacetime.java new file mode 100644 index 0000000000..f6cf548d84 --- /dev/null +++ b/src/main/java/tectech/thing/casing/ItemCasingsSpacetime.java @@ -0,0 +1,56 @@ +package tectech.thing.casing; + +import static com.google.common.math.LongMath.pow; +import static gregtech.api.enums.GTValues.AuthorColen; +import static gregtech.api.util.GTUtility.formatNumbers; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.ItemCasingsAbstract; + +public class ItemCasingsSpacetime extends ItemCasingsAbstract { + + public ItemCasingsSpacetime(Block par1) { + super(par1); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + switch (aStack.getItemDamage()) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + aList.add( + GTLanguageManager.addStringLocalization( + "EOH.Spacetime.Standard.Tooltip.0", + "Supports an internal spacetime volume of up to ") + + formatNumbers(pow(10, 5 + aStack.getItemDamage())) + + "km³."); + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + GTLanguageManager.addStringLocalization( + "EOH.Spacetime.Standard.Tooltip.1", + "Capable of running recipes up to tier ") + + (aStack.getItemDamage() + 1)); + break; + default: + aList.add( + EnumChatFormatting.RED.toString() + EnumChatFormatting.BOLD + + GTLanguageManager + .addStringLocalization("EOH.TimeDilation.Error.Tooltip", "Error, report to GTNH team")); + } + aList.add(AuthorColen); + } +} diff --git a/src/main/java/tectech/thing/casing/ItemCasingsStabilisation.java b/src/main/java/tectech/thing/casing/ItemCasingsStabilisation.java new file mode 100644 index 0000000000..9d802c4a93 --- /dev/null +++ b/src/main/java/tectech/thing/casing/ItemCasingsStabilisation.java @@ -0,0 +1,47 @@ +package tectech.thing.casing; + +import static gregtech.api.enums.GTValues.AuthorColen; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.ItemCasingsAbstract; + +public class ItemCasingsStabilisation extends ItemCasingsAbstract { + + public ItemCasingsStabilisation(Block par1) { + super(par1); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + switch (aStack.getItemDamage()) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + GTLanguageManager.addStringLocalization( + "EOH.Stability.Tooltip.0", + "Increases stability of spacetime field.")); + break; + default: + aList.add( + EnumChatFormatting.RED.toString() + EnumChatFormatting.BOLD + + GTLanguageManager + .addStringLocalization("EOH.TimeDilation.Error.Tooltip", "Error, report to GTNH team")); + } + aList.add(AuthorColen); + } +} diff --git a/src/main/java/tectech/thing/casing/ItemCasingsTT.java b/src/main/java/tectech/thing/casing/ItemCasingsTT.java new file mode 100644 index 0000000000..d335729a10 --- /dev/null +++ b/src/main/java/tectech/thing/casing/ItemCasingsTT.java @@ -0,0 +1,132 @@ +package tectech.thing.casing; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import gregtech.common.blocks.ItemCasingsAbstract; +import tectech.util.CommonValues; + +/** + * Created by danie_000 on 03.10.2016. + */ +public class ItemCasingsTT extends ItemCasingsAbstract { + + public ItemCasingsTT(Block par1) { + super(par1); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + if (aStack.getItemDamage() < 15) { + aList.add(CommonValues.TEC_MARK_EM); + } else { + aList.add(CommonValues.COSMIC_MARK); + } + switch (aStack.getItemDamage()) { + case 0: // "High Power Casing" + aList.add(translateToLocal("gt.blockcasingsTT.0.desc.0")); // Well suited for high power applications. + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.0.desc.1")); // The power levels are rising! + break; + case 1: // "Computer Casing" + aList.add(translateToLocal("gt.blockcasingsTT.1.desc.0")); // Nice and clean casing. + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.1.desc.1")); // Dust can break it!? + break; + case 2: // "Computer Heat Vent" + aList.add(translateToLocal("gt.blockcasingsTT.2.desc.0")); // Air vent with a filter. + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.2.desc.1")); // Perfectly muffled sound! + break; + case 3: // "Advanced Computer Casing" + aList.add(translateToLocal("gt.blockcasingsTT.3.desc.0")); // Contains high bandwidth bus + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.3.desc.1")); // couple thousand qubits wide. + break; + case 4: // "Molecular Casing" + aList.add(translateToLocal("gt.blockcasingsTT.4.desc.0")); // Stops elemental things. + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.4.desc.1")); // Radiation and emotions too... + break; + case 5: // "Advanced Molecular Casing" + aList.add(translateToLocal("gt.blockcasingsTT.5.desc.0")); // Cooling and stabilization. + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.5.desc.1")); // A comfortable machine bed. + break; + case 6: // "Containment Field Generator" + aList.add(translateToLocal("gt.blockcasingsTT.6.desc.0")); // Creates a field that... + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.6.desc.1")); // can stop even force carriers. + break; + case 7: // "Molecular Coil" + aList.add(translateToLocal("gt.blockcasingsTT.7.desc.0")); // Well it does things too... + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.7.desc.1")); // [Use this coil!] + break; + case 8: // "Collider Hollow Casing" + aList.add(translateToLocal("gt.blockcasingsTT.8.desc.0")); // Reinforced accelerator tunnel. + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.8.desc.1")); // Most advanced pipe ever. + break; + case 9: // "Spacetime Altering Casing" + aList.add(translateToLocal("gt.blockcasingsTT.9.desc.0")); // c is no longer the limit. + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.9.desc.1")); // Wibbly wobbly timey wimey stuff. + break; + case 10: // "Teleportation Casing" + aList.add(translateToLocal("gt.blockcasingsTT.10.desc.0")); // Remote connection. + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.10.desc.1")); // Better touch with a stick. + break; + case 11: // "Dimensional Bridge Generator" + aList.add(translateToLocal("gt.blockcasingsTT.11.desc.0")); // Interdimensional Operations. + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.11.desc.1")); // Around the universe and other + // places too. + break; + case 12: // "Ultimate Molecular Casing" + aList.add(translateToLocal("gt.blockcasingsTT.12.desc.0")); // Ultimate in every way. + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.12.desc.1")); // I don't know what it can't do. + break; + case 13: // "Ultimate Advanced Molecular Casing" + aList.add(translateToLocal("gt.blockcasingsTT.13.desc.0")); // More Ultimate in every way. + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.13.desc.1")); // I don't know what I am doing! + break; + case 14: // "Ultimate Containment Field Generator" + aList.add(translateToLocal("gt.blockcasingsTT.14.desc.0")); // Black Hole... + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockcasingsTT.14.desc.1")); // Meh... + break; + case 15: // "Debug Sides" + aList.add(translateToLocal("gt.blockcasingsTT.15.desc.0")); // Lazy man way of determining sides. + aList.add(EnumChatFormatting.BLUE + translateToLocal("gt.blockcasingsTT.15.desc.1")); + break; + default: // WTF? + aList.add("Damn son where did you get that!?"); + aList.add(EnumChatFormatting.BLUE + "From outer space... I guess..."); + } + } +} diff --git a/src/main/java/tectech/thing/casing/ItemCasingsTimeAcceleration.java b/src/main/java/tectech/thing/casing/ItemCasingsTimeAcceleration.java new file mode 100644 index 0000000000..a4aac6e5cc --- /dev/null +++ b/src/main/java/tectech/thing/casing/ItemCasingsTimeAcceleration.java @@ -0,0 +1,46 @@ +package tectech.thing.casing; + +import static gregtech.api.enums.GTValues.AuthorColen; + +import java.util.List; + +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.ItemCasingsAbstract; + +public class ItemCasingsTimeAcceleration extends ItemCasingsAbstract { + + public ItemCasingsTimeAcceleration(Block par1) { + super(par1); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean aF3_H) { + switch (aStack.getItemDamage()) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + GTLanguageManager + .addStringLocalization("EOH.TimeDilation.Standard.Tooltip", "Time dilation in a box.")); + break; + default: + aList.add( + EnumChatFormatting.RED.toString() + EnumChatFormatting.BOLD + + GTLanguageManager + .addStringLocalization("EOH.TimeDilation.Error.Tooltip", "Error, report to GTNH team")); + } + aList.add(AuthorColen); + } +} diff --git a/src/main/java/tectech/thing/casing/SpacetimeCompressionFieldCasing.java b/src/main/java/tectech/thing/casing/SpacetimeCompressionFieldCasing.java new file mode 100644 index 0000000000..cc89d83b7d --- /dev/null +++ b/src/main/java/tectech/thing/casing/SpacetimeCompressionFieldCasing.java @@ -0,0 +1,116 @@ +package tectech.thing.casing; + +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.EnumChatFormatting.WHITE; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.objects.GTCopiedBlockTexture; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.BlockCasingsAbstract; +import gregtech.common.blocks.MaterialCasings; +import tectech.thing.CustomItemList; +import tectech.util.CommonValues; + +@SuppressWarnings("SpellCheckingInspection") +public class SpacetimeCompressionFieldCasing extends BlockCasingsAbstract { + + private static IIcon textureTier0; + private static IIcon textureTier1; + private static IIcon textureTier2; + private static IIcon textureTier3; + private static IIcon textureTier4; + private static IIcon textureTier5; + private static IIcon textureTier6; + private static IIcon textureTier7; + private static IIcon textureTier8; + private static final int MAX_BLOCK_TIER = 9; + + private static final byte START_INDEX = 16; + + public SpacetimeCompressionFieldCasing() { + super(ItemCasingsSpacetime.class, "gt.spacetime_compression_field_generator", MaterialCasings.INSTANCE); + for (byte b = 0; b < 16; b = (byte) (b + 1)) { + Textures.BlockIcons.casingTexturePages[7][b + START_INDEX] = new GTCopiedBlockTexture(this, 6, b); + } + + for (int i = 0; i < MAX_BLOCK_TIER; i++) { + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + "." + i + ".name", + WHITE + CommonValues.EOH_TIER_FANCY_NAMES[i] + RESET + " Spacetime Compression Field Generator"); + } + + CustomItemList.SpacetimeCompressionFieldGeneratorTier0.set(new ItemStack(this, 1, 0)); + CustomItemList.SpacetimeCompressionFieldGeneratorTier1.set(new ItemStack(this, 1, 1)); + CustomItemList.SpacetimeCompressionFieldGeneratorTier2.set(new ItemStack(this, 1, 2)); + CustomItemList.SpacetimeCompressionFieldGeneratorTier3.set(new ItemStack(this, 1, 3)); + CustomItemList.SpacetimeCompressionFieldGeneratorTier4.set(new ItemStack(this, 1, 4)); + CustomItemList.SpacetimeCompressionFieldGeneratorTier5.set(new ItemStack(this, 1, 5)); + CustomItemList.SpacetimeCompressionFieldGeneratorTier6.set(new ItemStack(this, 1, 6)); + CustomItemList.SpacetimeCompressionFieldGeneratorTier7.set(new ItemStack(this, 1, 7)); + CustomItemList.SpacetimeCompressionFieldGeneratorTier8.set(new ItemStack(this, 1, 8)); + } + + @Override + public void registerBlockIcons(IIconRegister aIconRegister) { + textureTier0 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_0"); + textureTier1 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_1"); + textureTier2 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_2"); + textureTier3 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_3"); + textureTier4 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_4"); + textureTier5 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_5"); + textureTier6 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_6"); + textureTier7 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_7"); + textureTier8 = aIconRegister.registerIcon("gregtech:iconsets/EM_DIM_8"); + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + switch (aMeta) { + case 0: + return textureTier0; + case 1: + return textureTier1; + case 2: + return textureTier2; + case 3: + return textureTier3; + case 4: + return textureTier4; + case 5: + return textureTier5; + case 6: + return textureTier6; + case 7: + return textureTier7; + case 8: + return textureTier8; + default: + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { + int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); + return getIcon(ordinalSide, tMeta); + } + + @Override + public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { + for (int i = 0; i < MAX_BLOCK_TIER; i++) { + aList.add(new ItemStack(aItem, 1, i)); + } + } +} diff --git a/src/main/java/tectech/thing/casing/StabilisationFieldCasing.java b/src/main/java/tectech/thing/casing/StabilisationFieldCasing.java new file mode 100644 index 0000000000..21fb7acb76 --- /dev/null +++ b/src/main/java/tectech/thing/casing/StabilisationFieldCasing.java @@ -0,0 +1,116 @@ +package tectech.thing.casing; + +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.EnumChatFormatting.WHITE; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.objects.GTCopiedBlockTexture; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.BlockCasingsAbstract; +import gregtech.common.blocks.MaterialCasings; +import tectech.thing.CustomItemList; +import tectech.util.CommonValues; + +@SuppressWarnings("SpellCheckingInspection") +public class StabilisationFieldCasing extends BlockCasingsAbstract { + + private static IIcon textureTier0; + private static IIcon textureTier1; + private static IIcon textureTier2; + private static IIcon textureTier3; + private static IIcon textureTier4; + private static IIcon textureTier5; + private static IIcon textureTier6; + private static IIcon textureTier7; + private static IIcon textureTier8; + private static final int MAX_BLOCK_TIER = 9; + + private static final byte START_INDEX = 32; + + public StabilisationFieldCasing() { + super(ItemCasingsStabilisation.class, "gt.stabilisation_field_generator", MaterialCasings.INSTANCE); + for (byte b = 0; b < 16; b = (byte) (b + 1)) { + Textures.BlockIcons.casingTexturePages[7][b + START_INDEX] = new GTCopiedBlockTexture(this, 6, b); + } + + for (int i = 0; i < MAX_BLOCK_TIER; i++) { + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + "." + i + ".name", + WHITE + CommonValues.EOH_TIER_FANCY_NAMES[i] + RESET + " Stabilisation Field Generator"); + } + + CustomItemList.StabilisationFieldGeneratorTier0.set(new ItemStack(this, 1, 0)); + CustomItemList.StabilisationFieldGeneratorTier1.set(new ItemStack(this, 1, 1)); + CustomItemList.StabilisationFieldGeneratorTier2.set(new ItemStack(this, 1, 2)); + CustomItemList.StabilisationFieldGeneratorTier3.set(new ItemStack(this, 1, 3)); + CustomItemList.StabilisationFieldGeneratorTier4.set(new ItemStack(this, 1, 4)); + CustomItemList.StabilisationFieldGeneratorTier5.set(new ItemStack(this, 1, 5)); + CustomItemList.StabilisationFieldGeneratorTier6.set(new ItemStack(this, 1, 6)); + CustomItemList.StabilisationFieldGeneratorTier7.set(new ItemStack(this, 1, 7)); + CustomItemList.StabilisationFieldGeneratorTier8.set(new ItemStack(this, 1, 8)); + } + + @Override + public void registerBlockIcons(IIconRegister aIconRegister) { + textureTier0 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_0"); + textureTier1 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_1"); + textureTier2 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_2"); + textureTier3 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_3"); + textureTier4 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_4"); + textureTier5 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_5"); + textureTier6 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_6"); + textureTier7 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_7"); + textureTier8 = aIconRegister.registerIcon("gregtech:iconsets/STABILITY_CASING_8"); + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + switch (aMeta) { + case 0: + return textureTier0; + case 1: + return textureTier1; + case 2: + return textureTier2; + case 3: + return textureTier3; + case 4: + return textureTier4; + case 5: + return textureTier5; + case 6: + return textureTier6; + case 7: + return textureTier7; + case 8: + return textureTier8; + default: + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { + int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); + return getIcon(ordinalSide, tMeta); + } + + @Override + public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { + for (int i = 0; i < MAX_BLOCK_TIER; i++) { + aList.add(new ItemStack(aItem, 1, i)); + } + } +} diff --git a/src/main/java/tectech/thing/casing/TTCasingsContainer.java b/src/main/java/tectech/thing/casing/TTCasingsContainer.java new file mode 100644 index 0000000000..170439e2bc --- /dev/null +++ b/src/main/java/tectech/thing/casing/TTCasingsContainer.java @@ -0,0 +1,28 @@ +package tectech.thing.casing; + +import net.minecraft.block.Block; + +import tectech.thing.block.BlockEOHRender; +import tectech.thing.block.BlockForgeOfGods; + +/** + * Created by danie_000 on 03.10.2016. + */ +public final class TTCasingsContainer { + + public static Block sBlockCasingsTT; + + public static Block sBlockCasingsBA0; + + public static Block sBlockCasingsNH; + public static Block TimeAccelerationFieldGenerator; + public static Block SpacetimeCompressionFieldGenerators; + public static Block StabilisationFieldGenerators; + + public static Block eyeOfHarmonyRenderBlock = new BlockEOHRender(); + public static Block forgeOfGodsRenderBlock = new BlockForgeOfGods(); + + public static Block GodforgeCasings; + + private TTCasingsContainer() {} +} diff --git a/src/main/java/tectech/thing/casing/TimeAccelerationFieldCasing.java b/src/main/java/tectech/thing/casing/TimeAccelerationFieldCasing.java new file mode 100644 index 0000000000..47615e7b79 --- /dev/null +++ b/src/main/java/tectech/thing/casing/TimeAccelerationFieldCasing.java @@ -0,0 +1,116 @@ +package tectech.thing.casing; + +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.EnumChatFormatting.WHITE; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.IIcon; +import net.minecraft.world.IBlockAccess; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.objects.GTCopiedBlockTexture; +import gregtech.api.util.GTLanguageManager; +import gregtech.common.blocks.BlockCasingsAbstract; +import gregtech.common.blocks.MaterialCasings; +import tectech.thing.CustomItemList; +import tectech.util.CommonValues; + +@SuppressWarnings("SpellCheckingInspection") +public class TimeAccelerationFieldCasing extends BlockCasingsAbstract { + + private static IIcon textureTier0; + private static IIcon textureTier1; + private static IIcon textureTier2; + private static IIcon textureTier3; + private static IIcon textureTier4; + private static IIcon textureTier5; + private static IIcon textureTier6; + private static IIcon textureTier7; + private static IIcon textureTier8; + private static final int MAX_BLOCK_TIER = 9; + + private static final byte START_INDEX = 48; + + public TimeAccelerationFieldCasing() { + super(ItemCasingsTimeAcceleration.class, "gt.time_acceleration_field_generator", MaterialCasings.INSTANCE); + for (byte b = 0; b < 16; b = (byte) (b + 1)) { + Textures.BlockIcons.casingTexturePages[7][b + START_INDEX] = new GTCopiedBlockTexture(this, 6, b); + } + + for (int i = 0; i < MAX_BLOCK_TIER; i++) { + GTLanguageManager.addStringLocalization( + getUnlocalizedName() + "." + i + ".name", + WHITE + CommonValues.EOH_TIER_FANCY_NAMES[i] + RESET + " Time Dilation Field Generator"); + } + + CustomItemList.TimeAccelerationFieldGeneratorTier0.set(new ItemStack(this, 1, 0)); + CustomItemList.TimeAccelerationFieldGeneratorTier1.set(new ItemStack(this, 1, 1)); + CustomItemList.TimeAccelerationFieldGeneratorTier2.set(new ItemStack(this, 1, 2)); + CustomItemList.TimeAccelerationFieldGeneratorTier3.set(new ItemStack(this, 1, 3)); + CustomItemList.TimeAccelerationFieldGeneratorTier4.set(new ItemStack(this, 1, 4)); + CustomItemList.TimeAccelerationFieldGeneratorTier5.set(new ItemStack(this, 1, 5)); + CustomItemList.TimeAccelerationFieldGeneratorTier6.set(new ItemStack(this, 1, 6)); + CustomItemList.TimeAccelerationFieldGeneratorTier7.set(new ItemStack(this, 1, 7)); + CustomItemList.TimeAccelerationFieldGeneratorTier8.set(new ItemStack(this, 1, 8)); + } + + @Override + public void registerBlockIcons(IIconRegister aIconRegister) { + textureTier0 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_0"); + textureTier1 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_1"); + textureTier2 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_2"); + textureTier3 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_3"); + textureTier4 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_4"); + textureTier5 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_5"); + textureTier6 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_6"); + textureTier7 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_7"); + textureTier8 = aIconRegister.registerIcon("gregtech:iconsets/EM_FIELD_8"); + } + + @Override + public IIcon getIcon(int ordinalSide, int aMeta) { + switch (aMeta) { + case 0: + return textureTier0; + case 1: + return textureTier1; + case 2: + return textureTier2; + case 3: + return textureTier3; + case 4: + return textureTier4; + case 5: + return textureTier5; + case 6: + return textureTier6; + case 7: + return textureTier7; + case 8: + return textureTier8; + default: + return Textures.BlockIcons.MACHINE_CASING_SOLID_STEEL.getIcon(); + } + } + + @Override + @SideOnly(Side.CLIENT) + public IIcon getIcon(IBlockAccess aWorld, int xCoord, int yCoord, int zCoord, int ordinalSide) { + int tMeta = aWorld.getBlockMetadata(xCoord, yCoord, zCoord); + return getIcon(ordinalSide, tMeta); + } + + @Override + public void getSubBlocks(Item aItem, CreativeTabs par2CreativeTabs, List aList) { + for (int i = 0; i < MAX_BLOCK_TIER; i++) { + aList.add(new ItemStack(aItem, 1, i)); + } + } +} diff --git a/src/main/java/tectech/thing/cover/CoverEnderFluidLink.java b/src/main/java/tectech/thing/cover/CoverEnderFluidLink.java new file mode 100644 index 0000000000..bae4e26b6c --- /dev/null +++ b/src/main/java/tectech/thing/cover/CoverEnderFluidLink.java @@ -0,0 +1,245 @@ +package tectech.thing.cover; + +import java.util.UUID; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.fluids.IFluidHandler; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; + +import eu.usrv.yamcore.auxiliary.PlayerChatHelper; +import gregtech.api.gui.modularui.CoverUIBuildContext; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import gregtech.api.util.ISerializableObject; +import gregtech.common.gui.modularui.widget.CoverDataControllerWidget; +import gregtech.common.gui.modularui.widget.CoverDataFollowerToggleButtonWidget; +import tectech.mechanics.enderStorage.EnderLinkTag; +import tectech.mechanics.enderStorage.EnderWorldSavedData; + +public class CoverEnderFluidLink extends CoverBehavior { + + private static final int L_PER_TICK = 8000; + private static final int IMPORT_EXPORT_MASK = 0b0001; + private static final int PUBLIC_PRIVATE_MASK = 0b0010; + + public CoverEnderFluidLink() {} + + private void transferFluid(IFluidHandler source, ForgeDirection side, IFluidHandler target, ForgeDirection tSide, + int amount) { + FluidStack fluidStack = source.drain(side, amount, false); + + if (fluidStack != null) { + int fluidTransferred = target.fill(tSide, fluidStack, true); + source.drain(side, fluidTransferred, true); + } + } + + private boolean testBit(int aCoverVariable, int bitMask) { + return (aCoverVariable & bitMask) != 0; + } + + private int toggleBit(int aCoverVariable, int bitMask) { + return (aCoverVariable ^ bitMask); + } + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + if ((aTileEntity instanceof IFluidHandler fluidHandlerSelf)) { + IFluidHandler fluidHandlerEnder = EnderWorldSavedData + .getEnderFluidContainer(EnderWorldSavedData.getEnderLinkTag((IFluidHandler) aTileEntity)); + + if (testBit(aCoverVariable, IMPORT_EXPORT_MASK)) { + transferFluid(fluidHandlerEnder, ForgeDirection.UNKNOWN, fluidHandlerSelf, side, L_PER_TICK); + } else { + transferFluid(fluidHandlerSelf, side, fluidHandlerEnder, ForgeDirection.UNKNOWN, L_PER_TICK); + } + } + return aCoverVariable; + } + + @Override + public String getDescription(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return ""; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + int newCoverVariable = toggleBit(aCoverVariable, IMPORT_EXPORT_MASK); + + if (testBit(aCoverVariable, IMPORT_EXPORT_MASK)) { + PlayerChatHelper.SendInfo(aPlayer, "Ender Suction Engaged!"); // TODO Translation support + } else { + PlayerChatHelper.SendInfo(aPlayer, "Ender Filling Engaged!"); + } + return newCoverVariable; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + // Runs each tick + return 1; + } + + // region GUI + + @Override + public boolean hasCoverGUI() { + return true; + } + + @Override + public ModularWindow createWindow(CoverUIBuildContext buildContext) { + // Only open gui if we're placed on a fluid tank + if (buildContext.getTile() instanceof IFluidHandler) { + return new EnderFluidLinkUIFactory(buildContext).createWindow(); + } + return null; + } + + private class EnderFluidLinkUIFactory extends UIFactory { + + private static final int START_X = 10; + private static final int START_Y = 25; + private static final int SPACE_X = 18; + private static final int SPACE_Y = 18; + private static final int PUBLIC_BUTTON_ID = 0; + private static final int PRIVATE_BUTTON_ID = 1; + private static final int IMPORT_BUTTON_ID = 2; + private static final int EXPORT_BUTTON_ID = 3; + + public EnderFluidLinkUIFactory(CoverUIBuildContext buildContext) { + super(buildContext); + } + + @SuppressWarnings("PointlessArithmeticExpression") + @Override + protected void addUIWidgets(ModularWindow.Builder builder) { + TextFieldWidget frequencyField = new TextFieldWidget(); + builder.widget(frequencyField.setGetter(() -> { + ICoverable te = getUIBuildContext().getTile(); + if (!frequencyField.isClient() && te instanceof IFluidHandler) { + return EnderWorldSavedData.getEnderLinkTag((IFluidHandler) te) + .getFrequency(); + } + return ""; + }) + .setSetter(val -> { + ICoverable te = getUIBuildContext().getTile(); + if (!frequencyField.isClient() && te instanceof IFluidHandler) { + UUID uuid; + if (testBit(convert(getCoverData()), PUBLIC_PRIVATE_MASK)) { + uuid = getUUID(); + if (!(te instanceof IGregTechTileEntity)) return; + if (!uuid.equals(((IGregTechTileEntity) te).getOwnerUuid())) return; + } else { + uuid = null; + } + EnderWorldSavedData.bindEnderLinkTag((IFluidHandler) te, new EnderLinkTag(val, uuid)); + } + }) + .setTextColor(Color.WHITE.dark(1)) + .setTextAlignment(Alignment.CenterLeft) + .setFocusOnGuiOpen(true) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .setPos(START_X + SPACE_X * 0, START_Y + SPACE_Y * 0) + .setSize(SPACE_X * 5 - 8, 12)) + .widget( + new CoverDataControllerWidget.CoverDataIndexedControllerWidget_ToggleButtons<>( + this::getCoverData, + this::setCoverData, + CoverEnderFluidLink.this, + (id, coverData) -> !getClickable(id, convert(coverData)), + (id, coverData) -> new ISerializableObject.LegacyCoverData( + getNewCoverVariable(id, convert(coverData)))) + .addToggleButton( + PUBLIC_BUTTON_ID, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_WHITELIST) + .addTooltip(GTUtility.trans("326", "Public")) + .setPos(START_X + SPACE_X * 0, START_Y + SPACE_Y * 2)) + .addToggleButton( + PRIVATE_BUTTON_ID, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_BLACKLIST) + .addTooltip(GTUtility.trans("327", "Private")) + .setPos(START_X + SPACE_X * 1, START_Y + SPACE_Y * 2)) + .addToggleButton( + IMPORT_BUTTON_ID, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_IMPORT) + .addTooltip(GTUtility.trans("007", "Import")) + .setPos(START_X + SPACE_X * 0, START_Y + SPACE_Y * 3)) + .addToggleButton( + EXPORT_BUTTON_ID, + CoverDataFollowerToggleButtonWidget.ofDisableable(), + widget -> widget.setStaticTexture(GTUITextures.OVERLAY_BUTTON_EXPORT) + .addTooltip(GTUtility.trans("006", "Export")) + .setPos(START_X + SPACE_X * 1, START_Y + SPACE_Y * 3))) + .widget( + new TextWidget(GTUtility.trans("328", "Channel")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(START_X + SPACE_X * 5, 4 + START_Y + SPACE_Y * 0)) + .widget( + new TextWidget(GTUtility.trans("329", "Public/Private")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(START_X + SPACE_X * 2, 4 + START_Y + SPACE_Y * 2)) + .widget( + new TextWidget(GTUtility.trans("229", "Import/Export")).setDefaultColor(COLOR_TEXT_GRAY.get()) + .setPos(START_X + SPACE_X * 2, 4 + START_Y + SPACE_Y * 3)); + } + + private int getNewCoverVariable(int id, int coverVariable) { + switch (id) { + case PUBLIC_BUTTON_ID: + case PRIVATE_BUTTON_ID: + return toggleBit(coverVariable, PUBLIC_PRIVATE_MASK); + case IMPORT_BUTTON_ID: + case EXPORT_BUTTON_ID: + return toggleBit(coverVariable, IMPORT_EXPORT_MASK); + } + return coverVariable; + } + + private boolean getClickable(int id, int coverVariable) { + switch (id) { + case PUBLIC_BUTTON_ID: + return testBit(coverVariable, PUBLIC_PRIVATE_MASK); + case PRIVATE_BUTTON_ID: + return !testBit(coverVariable, PUBLIC_PRIVATE_MASK); + case IMPORT_BUTTON_ID: + return testBit(coverVariable, IMPORT_EXPORT_MASK); + case EXPORT_BUTTON_ID: + return !testBit(coverVariable, IMPORT_EXPORT_MASK); + } + return false; + } + + private UUID getUUID() { + return getUIBuildContext().getPlayer() + .getUniqueID(); + } + } +} diff --git a/src/main/java/tectech/thing/cover/CoverPowerPassUpgrade.java b/src/main/java/tectech/thing/cover/CoverPowerPassUpgrade.java new file mode 100644 index 0000000000..7666ba132e --- /dev/null +++ b/src/main/java/tectech/thing/cover/CoverPowerPassUpgrade.java @@ -0,0 +1,52 @@ +package tectech.thing.cover; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehavior; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; + +public class CoverPowerPassUpgrade extends CoverBehavior { + + public CoverPowerPassUpgrade() {} + + @Override + public boolean isCoverPlaceable(ForgeDirection side, ItemStack aStack, ICoverable aTileEntity) { + IMetaTileEntity iGregTechTileEntityOffset = aTileEntity.getIGregTechTileEntityOffset(0, 0, 0) + .getMetaTileEntity(); + if (iGregTechTileEntityOffset instanceof TTMultiblockBase multi) { + return !multi.ePowerPassCover; + } + return false; + } + + @Override + public void placeCover(ForgeDirection side, ItemStack aCover, ICoverable aTileEntity) { + IMetaTileEntity iGregTechTileEntityOffset = aTileEntity.getIGregTechTileEntityOffset(0, 0, 0) + .getMetaTileEntity(); + if (iGregTechTileEntityOffset instanceof TTMultiblockBase multi) { + multi.ePowerPassCover = true; + multi.ePowerPass = true; + } + super.placeCover(side, aCover, aTileEntity); + } + + @Override + public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + boolean aForced) { + IMetaTileEntity iGregTechTileEntityOffset = aTileEntity.getIGregTechTileEntityOffset(0, 0, 0) + .getMetaTileEntity(); + if (iGregTechTileEntityOffset instanceof TTMultiblockBase multi) { + multi.ePowerPassCover = false; + multi.ePowerPass = false; + } + return true; + } + + @Deprecated + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return 0; + } +} diff --git a/src/main/java/tectech/thing/cover/CoverTeslaCoil.java b/src/main/java/tectech/thing/cover/CoverTeslaCoil.java new file mode 100644 index 0000000000..a1dba25e03 --- /dev/null +++ b/src/main/java/tectech/thing/cover/CoverTeslaCoil.java @@ -0,0 +1,85 @@ +package tectech.thing.cover; + +import static ic2.api.info.Info.DMG_ELECTRIC; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.util.CoverBehavior; +import gregtech.api.util.GTUtility; +import tectech.mechanics.tesla.ITeslaConnectable; +import tectech.mechanics.tesla.TeslaCoverConnection; + +public class CoverTeslaCoil extends CoverBehavior { + + public CoverTeslaCoil() {} + + @Override + public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable, + ICoverable aTileEntity, long aTimer) { + // Only do stuff if we're on top and have power + if (side == ForgeDirection.UP || aTileEntity.getEUCapacity() > 0) { + // Makes sure we're on the list + ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetAdd( + new TeslaCoverConnection( + aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), + getTeslaReceptionCapability())); + } + return super.doCoverThings(side, aInputRedstone, aCoverID, aCoverVariable, aTileEntity, aTimer); + } + + @Override + public void onCoverUnload(ICoverable aTileEntity) { + if (!aTileEntity.isClientSide()) { + ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetRemove( + new TeslaCoverConnection( + aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), + getTeslaReceptionCapability())); + } + } + + @Override + public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + boolean aForced) { + ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetRemove( + new TeslaCoverConnection(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), getTeslaReceptionCapability())); + return super.onCoverRemoval(side, aCoverID, aCoverVariable, aTileEntity, aForced); + } + + @Override + public void onBaseTEDestroyed(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + ITeslaConnectable.TeslaUtil.teslaSimpleNodeSetRemove( + new TeslaCoverConnection(aTileEntity.getIGregTechTileEntityOffset(0, 0, 0), getTeslaReceptionCapability())); + } + + @Override + public String getDescription(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return "Do not attempt to use screwdriver!"; // TODO Translation support + } + + @Override + public boolean letsEnergyIn(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public int onCoverScrewdriverclick(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity, + EntityPlayer aPlayer, float aX, float aY, float aZ) { + // Shock a non-hazmat player if they dare stuff a screwdriver into one of these + if (aTileEntity.getStoredEU() > 0 && !GTUtility.isWearingFullElectroHazmat(aPlayer)) { + aPlayer.attackEntityFrom(DMG_ELECTRIC, 20); + } + return aCoverVariable; + } + + @Override + public int getTickRate(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + // It updates once every 10 ticks, so once every 0.5 second + return 10; + } + + public byte getTeslaReceptionCapability() { + return 2; + } +} diff --git a/src/main/java/tectech/thing/cover/CoverTeslaCoilUltimate.java b/src/main/java/tectech/thing/cover/CoverTeslaCoilUltimate.java new file mode 100644 index 0000000000..8f7ab28869 --- /dev/null +++ b/src/main/java/tectech/thing/cover/CoverTeslaCoilUltimate.java @@ -0,0 +1,44 @@ +package tectech.thing.cover; + +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; + +import gregtech.api.interfaces.tileentity.ICoverable; + +public class CoverTeslaCoilUltimate extends CoverTeslaCoil { + + public CoverTeslaCoilUltimate() {} + + @Override + public boolean letsEnergyOut(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsIn(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsItemsOut(ForgeDirection side, int aCoverID, int aCoverVariable, int aSlot, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidIn(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + @Override + public boolean letsFluidOut(ForgeDirection side, int aCoverID, int aCoverVariable, Fluid aFluid, + ICoverable aTileEntity) { + return true; + } + + public byte getTeslaReceptionCapability() { + return 1; + } +} diff --git a/src/main/java/tectech/thing/gui/TecTechUITextures.java b/src/main/java/tectech/thing/gui/TecTechUITextures.java new file mode 100644 index 0000000000..d4bc73f8e1 --- /dev/null +++ b/src/main/java/tectech/thing/gui/TecTechUITextures.java @@ -0,0 +1,192 @@ +package tectech.thing.gui; + +import static tectech.Reference.MODID; + +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import com.gtnewhorizons.modularui.api.drawable.AdaptableUITexture; +import com.gtnewhorizons.modularui.api.drawable.UITexture; + +@SuppressWarnings("SimplifyStreamApiCallChains") +public class TecTechUITextures { + + public static final AdaptableUITexture BACKGROUND_SCREEN_BLUE = AdaptableUITexture + .of(MODID, "gui/background/screen_blue", 90, 72, 2); + public static final UITexture BACKGROUND_SCREEN_BLUE_PARAMETRIZER_TXT = UITexture + .fullImage(MODID, "gui/background/screen_blue_parametrizer_txt"); + public static final UITexture BACKGROUND_SCREEN_BLUE_NO_INVENTORY = UITexture + .fullImage(MODID, "gui/background/screen_blue_no_inventory"); + public static final UITexture BACKGROUND_STAR = UITexture.fullImage(MODID, "gui/background/star"); + public static final UITexture BACKGROUND_GLOW_ORANGE = UITexture.fullImage(MODID, "gui/background/orange_glow"); + public static final UITexture BACKGROUND_GLOW_PURPLE = UITexture.fullImage(MODID, "gui/background/purple_glow"); + public static final UITexture BACKGROUND_GLOW_BLUE = UITexture.fullImage(MODID, "gui/background/blue_glow"); + public static final UITexture BACKGROUND_GLOW_GREEN = UITexture.fullImage(MODID, "gui/background/green_glow"); + public static final UITexture BACKGROUND_GLOW_WHITE = UITexture.fullImage(MODID, "gui/background/white_glow"); + public static final UITexture BACKGROUND_SPACE = UITexture.fullImage(MODID, "gui/background/space"); + + public static final UITexture BUTTON_STANDARD_16x16 = UITexture.fullImage(MODID, "gui/button/standard_16x16"); + public static final UITexture BUTTON_STANDARD_LIGHT_16x16 = UITexture + .fullImage(MODID, "gui/button/standard_light_16x16"); + public static final UITexture BUTTON_CELESTIAL_32x32 = UITexture.fullImage(MODID, "gui/button/celestial"); + public static final UITexture BUTTON_SPACE_32x16 = UITexture.fullImage(MODID, "gui/button/purple"); + public static final UITexture BUTTON_SPACE_PRESSED_32x16 = UITexture.fullImage(MODID, "gui/button/purple_pressed"); + public static final UITexture BUTTON_BOXED_CHECKMARK_18x18 = UITexture + .fullImage(MODID, "gui/button/boxed_checkmark"); + public static final UITexture BUTTON_BOXED_EXCLAMATION_POINT_18x18 = UITexture + .fullImage(MODID, "gui/button/boxed_exclamation_point"); + public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_DISABLED = UITexture + .fullImage(MODID, "gui/overlay_button/power_switch_disabled"); + public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_OFF = UITexture + .fullImage(MODID, "gui/overlay_button/power_switch_off"); + public static final UITexture OVERLAY_BUTTON_POWER_SWITCH_ON = UITexture + .fullImage(MODID, "gui/overlay_button/power_switch_on"); + public static final UITexture OVERLAY_BUTTON_HEAT_OFF = UITexture.fullImage(MODID, "gui/overlay_button/heat_off"); + public static final UITexture OVERLAY_BUTTON_HEAT_ON = UITexture.fullImage(MODID, "gui/overlay_button/heat_on"); + public static final UITexture[] OVERLAY_BUTTON_UNCERTAINTY = IntStream.range(0, 16) + .mapToObj(i -> UITexture.fullImage(MODID, "gui/overlay_button/uncertainty/" + i)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + public static final UITexture OVERLAY_BUTTON_SAFE_VOID_DISABLED = UITexture + .fullImage(MODID, "gui/overlay_button/safe_void_disabled"); + public static final UITexture OVERLAY_BUTTON_SAFE_VOID_OFF = UITexture + .fullImage(MODID, "gui/overlay_button/safe_void_off"); + public static final UITexture OVERLAY_BUTTON_SAFE_VOID_ON = UITexture + .fullImage(MODID, "gui/overlay_button/safe_void_on"); + public static final UITexture OVERLAY_BUTTON_POWER_PASS_DISABLED = UITexture + .fullImage(MODID, "gui/overlay_button/power_pass_disabled"); + public static final UITexture OVERLAY_BUTTON_POWER_PASS_OFF = UITexture + .fullImage(MODID, "gui/overlay_button/power_pass_off"); + public static final UITexture OVERLAY_BUTTON_POWER_PASS_ON = UITexture + .fullImage(MODID, "gui/overlay_button/power_pass_on"); + public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_ID = UITexture + .fullImage(MODID, "gui/overlay_button/parametrizer_id"); + public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_0 = UITexture + .fullImage(MODID, "gui/overlay_button/parametrizer_0"); + public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_1 = UITexture + .fullImage(MODID, "gui/overlay_button/parametrizer_1"); + public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_X = UITexture + .fullImage(MODID, "gui/overlay_button/parametrizer_x"); + public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_S = UITexture + .fullImage(MODID, "gui/overlay_button/parametrizer_s"); + public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_T = UITexture + .fullImage(MODID, "gui/overlay_button/parametrizer_t"); + public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_C = UITexture + .fullImage(MODID, "gui/overlay_button/parametrizer_c"); + public static final UITexture OVERLAY_BUTTON_PARAMETRIZER_IF = UITexture + .fullImage(MODID, "gui/overlay_button/parametrizer_if"); + public static final UITexture OVERLAY_BUTTON_ARROW_BLUE_UP = UITexture + .fullImage(MODID, "gui/overlay_button/arrow_blue_up"); + public static final UITexture OVERLAY_BUTTON_BATTERY_ON = UITexture + .fullImage(MODID, "gui/overlay_button/battery_on"); + public static final UITexture OVERLAY_BUTTON_BATTERY_OFF = UITexture + .fullImage(MODID, "gui/overlay_button/battery_off"); + public static final UITexture OVERLAY_BUTTON_FLAG = UITexture.fullImage(MODID, "gui/overlay_button/flag"); + public static final UITexture OVERLAY_CYCLIC_BLUE = UITexture.fullImage(MODID, "gui/overlay_button/cyclic_blue"); + public static final UITexture OVERLAY_EJECTION_LOCKED = UITexture + .fullImage(MODID, "gui/overlay_button/eject_disabled"); + public static final UITexture OVERLAY_EJECTION_ON = UITexture.fullImage(MODID, "gui/overlay_button/eject"); + + public static final UITexture OVERLAY_SLOT_RACK = UITexture.fullImage(MODID, "gui/overlay_slot/rack"); + public static final UITexture OVERLAY_SLOT_MESH = UITexture.fullImage(MODID, "gui/overlay_slot/mesh"); + + public static final UITexture PROGRESSBAR_RESEARCH_STATION_1 = UITexture + .fullImage(MODID, "gui/progressbar/research_station_1"); + public static final UITexture PROGRESSBAR_RESEARCH_STATION_2 = UITexture + .fullImage(MODID, "gui/progressbar/research_station_2"); + public static final UITexture PROGRESSBAR_RESEARCH_STATION_3 = UITexture + .fullImage(MODID, "gui/progressbar/research_station_3"); + public static final UITexture PROGRESSBAR_GODFORGE_PLASMA = UITexture + .fullImage(MODID, "gui/progressbar/godforge_plasma"); + public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND = UITexture + .fullImage(MODID, "gui/progressbar/godforge_progressbar_background"); + public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_BLUE = UITexture + .fullImage(MODID, "gui/progressbar/godforge_progressbar_blue"); + public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RED = UITexture + .fullImage(MODID, "gui/progressbar/godforge_progressbar_red"); + public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_PURPLE = UITexture + .fullImage(MODID, "gui/progressbar/godforge_progressbar_purple"); + public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW = UITexture + .fullImage(MODID, "gui/progressbar/godforge_progressbar_rainbow"); + public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_BLUE_INVERTED = UITexture + .fullImage(MODID, "gui/progressbar/godforge_progressbar_blue_inverted"); + public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RED_INVERTED = UITexture + .fullImage(MODID, "gui/progressbar/godforge_progressbar_red_inverted"); + public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_PURPLE_INVERTED = UITexture + .fullImage(MODID, "gui/progressbar/godforge_progressbar_purple_inverted"); + public static final UITexture PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW_INVERTED = UITexture + .fullImage(MODID, "gui/progressbar/godforge_progressbar_rainbow_inverted"); + + public static final UITexture PICTURE_TECTECH_LOGO = UITexture.fullImage(MODID, "gui/picture/tectech_logo"); + public static final UITexture PICTURE_TECTECH_LOGO_DARK = UITexture + .fullImage(MODID, "gui/picture/tectech_logo_dark"); + public static final UITexture PICTURE_GODFORGE_LOGO = UITexture.fullImage(MODID, "gui/picture/gorge_logo"); + public static final UITexture PICTURE_RACK_LARGE = UITexture.fullImage(MODID, "gui/picture/rack_large"); + public static final UITexture PICTURE_HEAT_SINK = UITexture.fullImage(MODID, "gui/picture/heat_sink"); + public static final UITexture PICTURE_UNCERTAINTY_MONITOR = UITexture + .fullImage(MODID, "gui/picture/uncertainty/monitor"); + public static final UITexture PICTURE_UNCERTAINTY_INDICATOR = UITexture + .fullImage(MODID, "gui/picture/uncertainty/indicator"); + public static final UITexture PICTURE_UNCERTAINTY_SELECTED = UITexture + .fullImage(MODID, "gui/picture/uncertainty/selected"); + public static final UITexture[] PICTURE_UNCERTAINTY_VALID = IntStream.range(0, 9) + .mapToObj(i -> UITexture.fullImage(MODID, "gui/picture/uncertainty/valid_" + i)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + public static final UITexture[] PICTURE_UNCERTAINTY_INVALID = IntStream.range(0, 9) + .mapToObj(i -> UITexture.fullImage(MODID, "gui/picture/uncertainty/invalid_" + i)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + public static final UITexture PICTURE_HEAT_SINK_SMALL = UITexture.fullImage(MODID, "gui/picture/heat_sink_small"); + public static final UITexture PICTURE_PARAMETER_BLANK = UITexture.fullImage(MODID, "gui/picture/parameter_blank"); + public static final UITexture[] PICTURE_PARAMETER_BLUE = IntStream.range(0, 20) + .mapToObj(i -> UITexture.partly(MODID, "gui/picture/parameter_blue", 158, 4, i * 8, 0, i * 8 + 6, 4)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + public static final UITexture[] PICTURE_PARAMETER_CYAN = IntStream.range(0, 20) + .mapToObj(i -> UITexture.partly(MODID, "gui/picture/parameter_cyan", 158, 4, i * 8, 0, i * 8 + 6, 4)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + public static final UITexture[] PICTURE_PARAMETER_GREEN = IntStream.range(0, 20) + .mapToObj(i -> UITexture.partly(MODID, "gui/picture/parameter_green", 158, 4, i * 8, 0, i * 8 + 6, 4)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + public static final UITexture[] PICTURE_PARAMETER_ORANGE = IntStream.range(0, 20) + .mapToObj(i -> UITexture.partly(MODID, "gui/picture/parameter_orange", 158, 4, i * 8, 0, i * 8 + 6, 4)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + public static final UITexture[] PICTURE_PARAMETER_RED = IntStream.range(0, 20) + .mapToObj(i -> UITexture.partly(MODID, "gui/picture/parameter_red", 158, 4, i * 8, 0, i * 8 + 6, 4)) + .collect(Collectors.toList()) + .toArray(new UITexture[0]); + public static final UITexture PICTURE_PARAMETER_GRAY = UITexture.fullImage(MODID, "gui/picture/parameter_gray"); + public static final UITexture PICTURE_UNCERTAINTY_MONITOR_MULTIMACHINE = UITexture + .fullImage(MODID, "gui/picture/uncertainty/monitor_multimachine"); + public static final UITexture PICTURE_UPGRADE_CONNECTOR_FULL = UITexture.fullImage(MODID, "gui/picture/connector"); + public static final UITexture PICTURE_UPGRADE_CONNECTOR_EMPTY = UITexture + .fullImage(MODID, "gui/picture/connector_empty"); + public static final UITexture PICTURE_UPGRADE_CONNECTOR_SWITCH = UITexture + .fullImage(MODID, "gui/picture/connector_switch"); + public static final UITexture SLOT_OUTLINE_GREEN = UITexture.fullImage(MODID, "gui/picture/green_selector"); + public static final UITexture PICTURE_GODFORGE_MILESTONE_CHARGE = UITexture + .fullImage(MODID, "gui/picture/milestone_charge"); + public static final UITexture PICTURE_GODFORGE_MILESTONE_CONVERSION = UITexture + .fullImage(MODID, "gui/picture/milestone_conversion"); + public static final UITexture PICTURE_GODFORGE_MILESTONE_CATALYST = UITexture + .fullImage(MODID, "gui/picture/milestone_catalyst"); + public static final UITexture PICTURE_GODFORGE_MILESTONE_COMPOSITION = UITexture + .fullImage(MODID, "gui/picture/milestone_composition"); + public static final UITexture PICTURE_GODFORGE_MILESTONE_CHARGE_GLOW = UITexture + .fullImage(MODID, "gui/picture/milestone_charge_glow"); + public static final UITexture PICTURE_GODFORGE_MILESTONE_CONVERSION_GLOW = UITexture + .fullImage(MODID, "gui/picture/milestone_conversion_glow"); + public static final UITexture PICTURE_GODFORGE_MILESTONE_CATALYST_GLOW = UITexture + .fullImage(MODID, "gui/picture/milestone_catalyst_glow"); + public static final UITexture PICTURE_GODFORGE_MILESTONE_COMPOSITION_GLOW = UITexture + .fullImage(MODID, "gui/picture/milestone_composition_glow"); + public static final UITexture PICTURE_OVERLAY_BLUE = UITexture.fullImage(MODID, "gui/picture/overlay_blue"); + public static final UITexture PICTURE_OVERLAY_ORANGE = UITexture.fullImage(MODID, "gui/picture/overlay_orange"); + public static final UITexture PICTURE_OVERLAY_GREEN = UITexture.fullImage(MODID, "gui/picture/overlay_green"); + public static final UITexture PICTURE_OVERLAY_PURPLE = UITexture.fullImage(MODID, "gui/picture/overlay_purple"); + +} diff --git a/src/main/java/tectech/thing/item/ItemAstralArrayFabricator.java b/src/main/java/tectech/thing/item/ItemAstralArrayFabricator.java new file mode 100644 index 0000000000..2d09a4b6bd --- /dev/null +++ b/src/main/java/tectech/thing/item/ItemAstralArrayFabricator.java @@ -0,0 +1,53 @@ +package tectech.thing.item; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import tectech.Reference; +import tectech.TecTech; +import tectech.thing.CustomItemList; + +public class ItemAstralArrayFabricator extends Item { + + public static ItemAstralArrayFabricator INSTANCE; + + private ItemAstralArrayFabricator() { + setHasSubtypes(false); + setUnlocalizedName("tm.itemAstralArrayFabricator"); + setTextureName(Reference.MODID + ":itemAstralArray"); + setCreativeTab(TecTech.creativeTabTecTech); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { + aList.add(EnumChatFormatting.GRAY + translateToLocal("item.tm.itemAstralArrayFabricator.desc1")); + aList.add(EnumChatFormatting.GRAY + translateToLocal("item.tm.itemAstralArrayFabricator.desc2")); + aList.add(EnumChatFormatting.GRAY + translateToLocal("item.tm.itemAstralArrayFabricator.desc3")); + aList.add( + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("item.tm.itemAstralArrayFabricator.desc0")); + } + + public static void run() { + INSTANCE = new ItemAstralArrayFabricator(); + GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); + CustomItemList.astralArrayFabricator.set(INSTANCE); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + itemIcon = iconRegister.registerIcon(getIconString()); + } + +} diff --git a/src/main/java/tectech/thing/item/ItemEnderFluidLinkCover.java b/src/main/java/tectech/thing/item/ItemEnderFluidLinkCover.java new file mode 100644 index 0000000000..b1b5c32540 --- /dev/null +++ b/src/main/java/tectech/thing/item/ItemEnderFluidLinkCover.java @@ -0,0 +1,55 @@ +package tectech.thing.item; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import tectech.Reference; +import tectech.thing.CustomItemList; +import tectech.util.CommonValues; + +public final class ItemEnderFluidLinkCover extends Item { + + public static ItemEnderFluidLinkCover INSTANCE; + + private ItemEnderFluidLinkCover() { + setHasSubtypes(true); + setUnlocalizedName("tm.enderfluidlinkcover"); + setTextureName(Reference.MODID + ":itemEnderFluidLinkCover"); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { + aList.add(CommonValues.THETA_MOVEMENT); + aList.add(translateToLocal("item.tm.enderfluidlinkcover.desc.0")); // Ender-Fluid-Enables Machines! + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.enderfluidlinkcover.desc.1")); // Use on any side + // of a fluid tank + // to link it to + // the Ender + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.enderfluidlinkcover.desc.2")); // Ender Tanks so + // are laggy -Bot + // from the Chads + // of NH + } + + public static void run() { + INSTANCE = new ItemEnderFluidLinkCover(); + GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); + CustomItemList.enderLinkFluidCover.set(INSTANCE); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + itemIcon = iconRegister.registerIcon(getIconString()); + } +} diff --git a/src/main/java/tectech/thing/item/ItemEuMeterGT.java b/src/main/java/tectech/thing/item/ItemEuMeterGT.java new file mode 100644 index 0000000000..72928360f3 --- /dev/null +++ b/src/main/java/tectech/thing/item/ItemEuMeterGT.java @@ -0,0 +1,167 @@ +package tectech.thing.item; + +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.common.util.FakePlayer; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.BaseMetaTileEntity; +import gregtech.api.metatileentity.implementations.MTECable; +import gregtech.api.util.GTUtility; +import tectech.Reference; +import tectech.TecTech; +import tectech.util.CommonValues; + +public class ItemEuMeterGT extends Item { + + public static ItemEuMeterGT INSTANCE; + + private ItemEuMeterGT() { + setMaxStackSize(1); + setUnlocalizedName("em.EuMeterGT"); + setTextureName(Reference.MODID + ":itemEuMeterGT"); + setCreativeTab(TecTech.creativeTabTecTech); + } + + @Override + public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, + int ordinalSide, float hitX, float hitY, float hitZ) { + final ForgeDirection side = ForgeDirection.getOrientation(ordinalSide); + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity == null || aPlayer instanceof FakePlayer) { + return aPlayer instanceof EntityPlayerMP; + } + if (aPlayer instanceof EntityPlayerMP && !aPlayer.isSneaking() && tTileEntity instanceof IGregTechTileEntity) { + String clientLocale; + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + + if (tTileEntity instanceof BaseMetaTileEntity) { + GTUtility.sendChatToPlayer( + aPlayer, + EnumChatFormatting.AQUA + "----- X:" + + aX + + " Y:" + + aY + + " Z:" + + aZ + + " D:" + + aWorld.provider.dimensionId + + " S:" + + ordinalSide + + " -----"); + GTUtility.sendChatToPlayer( + aPlayer, + translateToLocalFormatted("tt.keyphrase.Stored_energy", clientLocale) + ": " + + EnumChatFormatting.YELLOW + + (((BaseMetaTileEntity) tTileEntity).getUniversalEnergyStored()) + + EnumChatFormatting.RESET + + '/' + + EnumChatFormatting.GREEN + + (((BaseMetaTileEntity) tTileEntity).getUniversalEnergyCapacity())); + GTUtility.sendChatToPlayer( + aPlayer, + translateToLocalFormatted("tt.keyphrase.Stored_EU", clientLocale) + ": " + + EnumChatFormatting.YELLOW + + (((BaseMetaTileEntity) tTileEntity).getStoredEU()) + + EnumChatFormatting.RESET + + '/' + + EnumChatFormatting.GREEN + + (((BaseMetaTileEntity) tTileEntity).getEUCapacity())); + GTUtility.sendChatToPlayer( + aPlayer, + translateToLocalFormatted("tt.keyphrase.Average_IO", clientLocale) + ": " + + EnumChatFormatting.YELLOW + + (((BaseMetaTileEntity) tTileEntity).getAverageElectricInput()) + + EnumChatFormatting.RESET + + '/' + + EnumChatFormatting.YELLOW + + (((BaseMetaTileEntity) tTileEntity).getAverageElectricOutput())); + GTUtility.sendChatToPlayer( + aPlayer, + translateToLocalFormatted("tt.keyphrase.Average_IO_(max)", clientLocale) + ": " + + EnumChatFormatting.GOLD + + (((BaseMetaTileEntity) tTileEntity).getInputVoltage()) + + EnumChatFormatting.RESET + + '/' + + EnumChatFormatting.GOLD + + (((BaseMetaTileEntity) tTileEntity).getOutputVoltage())); + GTUtility.sendChatToPlayer( + aPlayer, + translateToLocalFormatted("tt.keyphrase.Average_IO_max", clientLocale) + ": " + + EnumChatFormatting.RED + + (((BaseMetaTileEntity) tTileEntity).getMaxSafeInput()) + + EnumChatFormatting.RESET + + '/' + + EnumChatFormatting.RED + + (((BaseMetaTileEntity) tTileEntity).getMaxEnergyOutput())); + GTUtility.sendChatToPlayer( + aPlayer, + translateToLocalFormatted("tt.keyphrase.Amperage_IO_(max)", clientLocale) + ": " + + EnumChatFormatting.GOLD + + (((BaseMetaTileEntity) tTileEntity).getInputAmperage()) + + EnumChatFormatting.RESET + + '/' + + EnumChatFormatting.GOLD + + (((BaseMetaTileEntity) tTileEntity).getOutputAmperage())); + GTUtility.sendChatToPlayer( + aPlayer, + translateToLocalFormatted("tt.keyphrase.Side_capabilities", clientLocale) + ": " + + (((BaseMetaTileEntity) tTileEntity).inputEnergyFrom(side) + ? translateToLocalFormatted("tt.keyword.input", clientLocale) + " " + : "") + + (((BaseMetaTileEntity) tTileEntity).outputsEnergyTo(side) + ? translateToLocalFormatted("tt.keyword.output", clientLocale) + : "")); + return true; + } else if (tTileEntity instanceof BaseMetaPipeEntity) { + if (((BaseMetaPipeEntity) tTileEntity).getMetaTileEntity() instanceof MTECable) { + ArrayList tList = new ArrayList<>(); + GTUtility.getCoordinateScan(tList, aPlayer, aWorld, 1, aX, aY, aZ, side, hitX, hitY, hitZ); + for (String str : tList) { + GTUtility.sendChatToPlayer(aPlayer, str); + } + } + return true; + } + } + if (!(aPlayer instanceof EntityPlayerMP)) { + GTUtility.doSoundAtClient(new ResourceLocation(Reference.MODID, "fx_scan"), 1, 1.0F, aX, aY, aZ); + } + return false; + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { + aList.add(CommonValues.TEC_MARK_GENERAL); + aList.add(translateToLocal("item.em.EuMeterGT.desc.0")); // Measures basic EU related stuff + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.em.EuMeterGT.desc.1")); // Just right click on + // blocks. + } + + public static void run() { + INSTANCE = new ItemEuMeterGT(); + GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); + } +} diff --git a/src/main/java/tectech/thing/item/ItemParametrizerMemoryCard.java b/src/main/java/tectech/thing/item/ItemParametrizerMemoryCard.java new file mode 100644 index 0000000000..5039871764 --- /dev/null +++ b/src/main/java/tectech/thing/item/ItemParametrizerMemoryCard.java @@ -0,0 +1,233 @@ +package tectech.thing.item; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.IIcon; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.Constants; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import tectech.Reference; +import tectech.TecTech; +import tectech.thing.CustomItemList; +import tectech.thing.metaTileEntity.hatch.MTEHatchParam; +import tectech.thing.metaTileEntity.hatch.MTEHatchParamText; +import tectech.thing.metaTileEntity.multi.base.Parameters; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by Tec on 15.03.2017. + */ +public final class ItemParametrizerMemoryCard extends Item { + + public static ItemParametrizerMemoryCard INSTANCE; + private static IIcon locked, unlocked; + + private ItemParametrizerMemoryCard() { + setMaxStackSize(1); + setHasSubtypes(true); + setUnlocalizedName("em.parametrizerMemoryCard"); + setTextureName(Reference.MODID + ":itemParametrizerMemoryCardUnlocked"); + setCreativeTab(TecTech.creativeTabTecTech); + } + + @Override + public boolean onItemUseFirst(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, + int ordinalSide, float hitX, float hitY, float hitZ) { + TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (!(aPlayer instanceof EntityPlayerMP)) return false; + if (!(tTileEntity instanceof IGregTechTileEntity)) return false; + aStack.stackSize = 1; + IMetaTileEntity metaTE = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); + + if (metaTE instanceof MTEHatchParamText parametrizer) { + if (aStack.getTagCompound() == null) { + aStack.setTagCompound(new NBTTagCompound()); + } + NBTTagCompound tNBT = aStack.getTagCompound(); + if (aStack.getItemDamage() == 1) { + // write to parametrizer + parametrizer.param = tNBT.getInteger("param"); + parametrizer.value0D = tNBT.getDouble("value0D"); + parametrizer.value1D = tNBT.getDouble("value1D"); + parametrizer.value0s = tNBT.getString("value0s"); + parametrizer.value1s = tNBT.getString("value1s"); + } else { + // read from parametrizer + NBTTagCompound newTag = new NBTTagCompound(); + newTag.setInteger("param", parametrizer.param); + newTag.setDouble("value0D", parametrizer.value0D); + newTag.setDouble("value1D", parametrizer.value1D); + newTag.setString("value0s", parametrizer.value0s); + newTag.setString("value1s", parametrizer.value1s); + aStack.setTagCompound(newTag); + } + return true; + } else if (metaTE instanceof MTEHatchParam parametrizer) { + if (aStack.getTagCompound() == null) { + aStack.setTagCompound(new NBTTagCompound()); + } + NBTTagCompound tNBT = aStack.getTagCompound(); + if (aStack.getItemDamage() == 1) { + // write to parametrizer + parametrizer.param = tNBT.getInteger("param"); + parametrizer.value0D = tNBT.getDouble("value0D"); + parametrizer.value1D = tNBT.getDouble("value1D"); + } else { + // read from parametrizer + NBTTagCompound newTag = new NBTTagCompound(); + tNBT.setInteger("param", parametrizer.param); + tNBT.setDouble("value0D", parametrizer.value0D); + tNBT.setDouble("value1D", parametrizer.value1D); + aStack.setTagCompound(newTag); + } + return true; + } else if (metaTE instanceof TTMultiblockBase controller) { + if (aStack.getTagCompound() == null) { + aStack.setTagCompound(new NBTTagCompound()); + } + NBTTagCompound tNBT = aStack.getTagCompound(); + if (aStack.getItemDamage() == 1) { + // write to controller + if (tNBT.hasKey("paramList", Constants.NBT.TAG_LIST)) { + // from controller + NBTTagList tagList = tNBT.getTagList("paramList", Constants.NBT.TAG_COMPOUND); + for (int hatch = 0; hatch < 10; hatch++) { + NBTTagCompound tag = tagList.getCompoundTagAt(hatch); + controller.parametrization + .trySetParameters(hatch, tag.getDouble("value0D"), tag.getDouble("value1D")); + } + } else { + // from parametrizer + controller.parametrization.trySetParameters( + tNBT.getInteger("param"), + tNBT.getDouble("value0D"), + tNBT.getDouble("value1D")); + } + } else { + // read from controller + NBTTagCompound newTag = new NBTTagCompound(); + NBTTagList tagList = new NBTTagList(); + for (int hatch = 0; hatch < 10; hatch++) { + NBTTagCompound tagChild = new NBTTagCompound(); + Parameters.Group.ParameterIn[] parameters = controller.parametrization.getGroup(hatch).parameterIn; + if (parameters[0] != null) { + tagChild.setDouble("value0D", parameters[0].get()); + } + if (parameters[1] != null) { + tagChild.setDouble("value1D", parameters[1].get()); + } + tagList.appendTag(tagChild); + } + newTag.setTag("paramList", tagList); + aStack.setTagCompound(newTag); + } + return true; + } + return false; + } + + @Override + public ItemStack onItemRightClick(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { + if (aPlayer instanceof EntityPlayerMP && aPlayer.isSneaking()) { + aStack.stackSize = 1; + if (aStack.getItemDamage() == 1) { + aStack.setItemDamage(0); + } else { + aStack.setItemDamage(1); + } + return aStack; + } + return aStack; + } + + @Override + public String getItemStackDisplayName(ItemStack stack) { + if (stack.getItemDamage() == 1) { + return StatCollector.translateToLocal("item.em.parametrizerMemoryCard.name.paste"); + } else { + return StatCollector.translateToLocal("item.em.parametrizerMemoryCard.name.copy"); + } + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { + NBTTagCompound tNBT = aStack.getTagCompound(); + aList.add(CommonValues.THETA_MOVEMENT); + aList.add(translateToLocal("item.em.parametrizerMemoryCard.desc.0")); // Stores Parameters + + if (aStack.getItemDamage() == 1) { + // Use on Multiblock Controller to configure it + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.em.parametrizerMemoryCard.desc.1")); + } else { + // Use on Multiblock Controller to store parameters + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.em.parametrizerMemoryCard.desc.2")); + } + // Sneak right click to lock/unlock + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.em.parametrizerMemoryCard.desc.3")); + + double temp; + if (tNBT != null && tNBT.hasKey("param")) { + aList.add("Hatch ID: " + EnumChatFormatting.AQUA + tNBT.getInteger("param")); + temp = tNBT.getInteger("value0D"); + aList.add("Value 0D: " + EnumChatFormatting.AQUA + temp); + aList.add( + "Value 0B: " + EnumChatFormatting.AQUA + + TTUtility.longBitsToShortString(Double.doubleToLongBits(temp))); + aList.add("Value 0s: " + EnumChatFormatting.AQUA + tNBT.getString("value0s")); + temp = tNBT.getInteger("value1D"); + aList.add("Value 1D: " + EnumChatFormatting.AQUA + temp); + aList.add( + "Value 1B: " + EnumChatFormatting.AQUA + + TTUtility.longBitsToShortString(Double.doubleToLongBits(temp))); + aList.add("Value 1s: " + EnumChatFormatting.AQUA + tNBT.getString("value1s")); + } + } + + public static void run() { + INSTANCE = new ItemParametrizerMemoryCard(); + GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); + CustomItemList.parametrizerMemory.set(INSTANCE); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + locked = iconRegister.registerIcon(Reference.MODID + ":itemParametrizerMemoryCardLocked"); + unlocked = itemIcon = iconRegister.registerIcon(getIconString()); + } + + @Override + public IIcon getIconFromDamage(int damage) { + if (damage == 1) { + return locked; + } + return unlocked; + } + + @Override + public void getSubItems(Item item, CreativeTabs tab, List list) { + ItemStack that = new ItemStack(this, 1); + that.setTagCompound(new NBTTagCompound()); + list.add(that); + } +} diff --git a/src/main/java/tectech/thing/item/ItemPowerPassUpgradeCover.java b/src/main/java/tectech/thing/item/ItemPowerPassUpgradeCover.java new file mode 100644 index 0000000000..49b5eaf923 --- /dev/null +++ b/src/main/java/tectech/thing/item/ItemPowerPassUpgradeCover.java @@ -0,0 +1,54 @@ +package tectech.thing.item; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import tectech.Reference; +import tectech.thing.CustomItemList; +import tectech.util.CommonValues; + +public final class ItemPowerPassUpgradeCover extends Item { + + public static ItemPowerPassUpgradeCover INSTANCE; + + private ItemPowerPassUpgradeCover() { + setHasSubtypes(true); + setUnlocalizedName("tm.powerpassupgradecover"); + setTextureName(Reference.MODID + ":itemPowerPassUpgradeCover"); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { + aList.add(CommonValues.THETA_MOVEMENT); + aList.add(translateToLocal("item.tm.powerpassupgradecover.desc.0")); // Add power pass functionality to TecTech + // Multiblocks + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.powerpassupgradecover.desc.1")); // Active + // transformer in + // a can?? + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.powerpassupgradecover.desc.2")); // Chain them up + // like Christmas + // lights! + } + + public static void run() { + INSTANCE = new ItemPowerPassUpgradeCover(); + GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); + CustomItemList.powerPassUpgradeCover.set(INSTANCE); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + itemIcon = iconRegister.registerIcon(getIconString()); + } +} diff --git a/src/main/java/tectech/thing/item/ItemRenderForgeOfGods.java b/src/main/java/tectech/thing/item/ItemRenderForgeOfGods.java new file mode 100644 index 0000000000..12248c4844 --- /dev/null +++ b/src/main/java/tectech/thing/item/ItemRenderForgeOfGods.java @@ -0,0 +1,59 @@ +package tectech.thing.item; + +import static tectech.rendering.EOH.EOHRenderingUtils.renderStarLayer; +import static tectech.rendering.EOH.EOHTileEntitySR.*; +import static tectech.thing.block.RenderForgeOfGods.disableOpaqueColorInversion; +import static tectech.thing.block.RenderForgeOfGods.enableOpaqueColorInversion; +import static tectech.thing.block.RenderForgeOfGods.enablePseudoTransparentColorInversion; + +import java.awt.Color; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer; + +import org.lwjgl.opengl.GL11; + +public class ItemRenderForgeOfGods implements IItemRenderer { + + @Override + public boolean handleRenderType(ItemStack item, IItemRenderer.ItemRenderType type) { + return true; + } + + @Override + public boolean shouldUseRenderHelper(IItemRenderer.ItemRenderType type, ItemStack item, + IItemRenderer.ItemRendererHelper helper) { + return true; + } + + @Override + public void renderItem(IItemRenderer.ItemRenderType type, ItemStack item, Object... data) { + GL11.glPushMatrix(); + GL11.glPushAttrib(GL11.GL_ALL_ATTRIB_BITS); + + if (type == IItemRenderer.ItemRenderType.INVENTORY) GL11.glRotated(180, 0, 1, 0); + else if (type == IItemRenderer.ItemRenderType.EQUIPPED + || type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) { + GL11.glTranslated(0.5, 0.5, 0.5); + if (type == IItemRenderer.ItemRenderType.EQUIPPED) GL11.glRotated(90, 0, 1, 0); + } + + { + + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + + // Innermost layer should be opaque + enableOpaqueColorInversion(); + renderStarLayer(0, STAR_LAYER_0, new Color(1.0f, 0.4f, 0.05f, 1.0f), 1.0f, 1); + disableOpaqueColorInversion(); + + enablePseudoTransparentColorInversion(); + renderStarLayer(1, STAR_LAYER_1, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.4f, 1); + renderStarLayer(2, STAR_LAYER_2, new Color(1.0f, 0.4f, 0.05f, 1.0f), 0.2f, 1); + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } + } +} diff --git a/src/main/java/tectech/thing/item/ItemTeslaCoilCapacitor.java b/src/main/java/tectech/thing/item/ItemTeslaCoilCapacitor.java new file mode 100644 index 0000000000..99a2c8556a --- /dev/null +++ b/src/main/java/tectech/thing/item/ItemTeslaCoilCapacitor.java @@ -0,0 +1,107 @@ +package tectech.thing.item; + +import static gregtech.api.enums.GTValues.V; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +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.util.EnumChatFormatting; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import tectech.Reference; +import tectech.thing.CustomItemList; +import tectech.util.CommonValues; + +public final class ItemTeslaCoilCapacitor extends Item { + + public static ItemTeslaCoilCapacitor INSTANCE; + private static IIcon LVicon, MVicon, HVicon, EVicon, IVicon, LuVicon, ZPMicon; + + private ItemTeslaCoilCapacitor() { + setHasSubtypes(true); + setUnlocalizedName("tm.teslaCoilCapacitor"); + setTextureName(Reference.MODID + ":itemCapacitorLV"); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { + aList.add(CommonValues.THETA_MOVEMENT); + if (aStack.getItemDamage() >= 0 && aStack.getItemDamage() <= 6) { + aList.add( + translateToLocal("item.tm.teslaCoilCapacitor.desc.0") + " " + + V[aStack.getItemDamage() + 1] * 512 + + " " + + translateToLocal("item.tm.teslaCoilCapacitor.desc.1") + + " " + + V[aStack.getItemDamage() + 1] + + " EU/t"); // Stores 16384 EU in a tesla tower at 32 EU/t + } else { + aList.add(translateToLocal("item.tm.teslaCoilCapacitor.desc.2")); // Yeet this broken item into some spicy + // water! + } + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.teslaCoilCapacitor.desc.3")); // Insert into a + // Capacitor hatch + // of a Tesla Tower + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.teslaCoilCapacitor.desc.4")); // Capacitors are + // the same thing as + // batteries, right? + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return getUnlocalizedName() + "." + getDamage(aStack); + } + + public static void run() { + INSTANCE = new ItemTeslaCoilCapacitor(); + GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); + CustomItemList.teslaCapacitor.set(INSTANCE); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + LVicon = itemIcon = iconRegister.registerIcon(getIconString()); + MVicon = iconRegister.registerIcon(Reference.MODID + ":itemCapacitorMV"); + HVicon = iconRegister.registerIcon(Reference.MODID + ":itemCapacitorHV"); + EVicon = iconRegister.registerIcon(Reference.MODID + ":itemCapacitorEV"); + IVicon = iconRegister.registerIcon(Reference.MODID + ":itemCapacitorIV"); + LuVicon = iconRegister.registerIcon(Reference.MODID + ":itemCapacitorLuV"); + ZPMicon = iconRegister.registerIcon(Reference.MODID + ":itemCapacitorZPM"); + } + + @Override + public IIcon getIconFromDamage(int damage) { + switch (damage) { + case 1: + return MVicon; + case 2: + return HVicon; + case 3: + return EVicon; + case 4: + return IVicon; + case 5: + return LuVicon; + case 6: + return ZPMicon; + default: + return LVicon; + } + } + + @Override + public void getSubItems(Item aItem, CreativeTabs par2CreativeTabs, List aList) { + for (int i = 0; i <= 6; i++) { + aList.add(new ItemStack(aItem, 1, i)); + } + } +} diff --git a/src/main/java/tectech/thing/item/ItemTeslaCoilComponent.java b/src/main/java/tectech/thing/item/ItemTeslaCoilComponent.java new file mode 100644 index 0000000000..d18acb9d86 --- /dev/null +++ b/src/main/java/tectech/thing/item/ItemTeslaCoilComponent.java @@ -0,0 +1,71 @@ +package tectech.thing.item; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +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.util.EnumChatFormatting; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import tectech.Reference; +import tectech.thing.CustomItemList; +import tectech.util.CommonValues; + +public final class ItemTeslaCoilComponent extends Item { + + public static ItemTeslaCoilComponent INSTANCE; + private static IIcon ultItemIcon; + + private ItemTeslaCoilComponent() { + setHasSubtypes(true); + setUnlocalizedName("tm.itemTeslaComponent"); + setTextureName(Reference.MODID + ":itemTeslaComponent"); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { + aList.add(CommonValues.THETA_MOVEMENT); + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.itemTeslaComponent.desc")); // Tesla bois need + // these! + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return getUnlocalizedName() + "." + getDamage(aStack); + } + + public static void run() { + INSTANCE = new ItemTeslaCoilComponent(); + GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); + CustomItemList.teslaComponent.set(INSTANCE); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + itemIcon = iconRegister.registerIcon(getIconString()); + ultItemIcon = iconRegister.registerIcon(Reference.MODID + ":itemTeslaComponentUltimate"); + } + + @Override + public IIcon getIconFromDamage(int damage) { + if (damage == 1) { + return ultItemIcon; + } + return itemIcon; + } + + @Override + public void getSubItems(Item aItem, CreativeTabs par2CreativeTabs, List aList) { + aList.add(new ItemStack(aItem, 1, 0)); + aList.add(new ItemStack(aItem, 1, 1)); + } +} diff --git a/src/main/java/tectech/thing/item/ItemTeslaCoilCover.java b/src/main/java/tectech/thing/item/ItemTeslaCoilCover.java new file mode 100644 index 0000000000..2cb4390522 --- /dev/null +++ b/src/main/java/tectech/thing/item/ItemTeslaCoilCover.java @@ -0,0 +1,86 @@ +package tectech.thing.item; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +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.util.EnumChatFormatting; +import net.minecraft.util.IIcon; + +import cpw.mods.fml.common.registry.GameRegistry; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import tectech.Reference; +import tectech.thing.CustomItemList; +import tectech.util.CommonValues; + +public final class ItemTeslaCoilCover extends Item { + + public static ItemTeslaCoilCover INSTANCE; + private static IIcon ultItemIcon; + + private ItemTeslaCoilCover() { + setHasSubtypes(true); + setUnlocalizedName("tm.teslaCover"); + setTextureName(Reference.MODID + ":itemTeslaCover"); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { + aList.add(CommonValues.THETA_MOVEMENT); + switch (aStack.getItemDamage()) { + case 0: + aList.add(translateToLocal("item.tm.teslaCover.desc.0")); // Tesla-Enables Machines! + break; + case 1: + aList.add(translateToLocal("item.tm.teslaCover.desc.1")); // Tesla-Enables Machines! (BUT LOUDER!!) + break; + default: + aList.add(translateToLocal("item.tm.teslaCover.desc.2")); // Yeet this broken item into some spicy + // water! + break; + } + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.teslaCover.desc.3")); // Use on top of a machine + // to enable Tesla + // capabilities + aList.add(EnumChatFormatting.BLUE + translateToLocal("item.tm.teslaCover.desc.4")); // Who the hell uses cables + // anyway? + } + + @Override + public String getUnlocalizedName(ItemStack aStack) { + return getUnlocalizedName() + "." + getDamage(aStack); + } + + public static void run() { + INSTANCE = new ItemTeslaCoilCover(); + GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); + CustomItemList.teslaCover.set(INSTANCE); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister iconRegister) { + itemIcon = iconRegister.registerIcon(getIconString()); + ultItemIcon = iconRegister.registerIcon(Reference.MODID + ":itemTeslaCoverUltimate"); + } + + @Override + public IIcon getIconFromDamage(int damage) { + if (damage == 1) { + return ultItemIcon; + } + return itemIcon; + } + + @Override + public void getSubItems(Item aItem, CreativeTabs par2CreativeTabs, List aList) { + aList.add(new ItemStack(aItem, 1, 0)); + aList.add(new ItemStack(aItem, 1, 1)); + } +} diff --git a/src/main/java/tectech/thing/item/ItemTeslaStaff.java b/src/main/java/tectech/thing/item/ItemTeslaStaff.java new file mode 100644 index 0000000000..f1c7045b0a --- /dev/null +++ b/src/main/java/tectech/thing/item/ItemTeslaStaff.java @@ -0,0 +1,52 @@ +package tectech.thing.item; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.List; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.util.GTUtility; +import tectech.Reference; +import tectech.thing.CustomItemList; +import tectech.util.CommonValues; + +public final class ItemTeslaStaff extends Item { + + public static ItemTeslaStaff INSTANCE; + + private ItemTeslaStaff() { + setUnlocalizedName("tm.teslaStaff"); + setTextureName(Reference.MODID + ":itemTeslaStaff"); + } + + @Override + public void addInformation(ItemStack aStack, EntityPlayer ep, List aList, boolean boo) { + aList.add(CommonValues.THETA_MOVEMENT); + aList.add(translateToLocal("item.tm.teslaStaff.desc")); + } + + @Override + public boolean onLeftClickEntity(ItemStack stack, EntityPlayer aPlayer, Entity entity) { + GTUtility.sendChatToPlayer(aPlayer, "Zapperoni!"); + if (!(aPlayer instanceof EntityPlayerMP)) { + double aX = aPlayer.posX; + double aY = aPlayer.posY; + double aZ = aPlayer.posZ; + GTUtility.doSoundAtClient(new ResourceLocation(Reference.MODID, "fx_scan"), 1, 1.0F, aX, aY, aZ); + } + return false; + } + + public static void run() { + INSTANCE = new ItemTeslaStaff(); + GameRegistry.registerItem(INSTANCE, INSTANCE.getUnlocalizedName()); + CustomItemList.teslaStaff.set(INSTANCE); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/Textures.java b/src/main/java/tectech/thing/metaTileEntity/Textures.java new file mode 100644 index 0000000000..d9e6c47a28 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/Textures.java @@ -0,0 +1,318 @@ +package tectech.thing.metaTileEntity; + +import static gregtech.api.enums.Dyes.MACHINE_METAL; +import static gregtech.api.enums.Textures.BlockIcons.CustomIcon; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_8V_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_8V_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_8V_TOP; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_EV_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_EV_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_EV_TOP; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_HV_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_HV_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_HV_TOP; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_IV_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_IV_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_IV_TOP; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LV_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LV_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LV_TOP; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LuV_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LuV_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_LuV_TOP; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MAX_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MAX_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MAX_TOP; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MV_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MV_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_MV_TOP; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_UV_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_UV_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_UV_TOP; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_ZPM_BOTTOM; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_ZPM_SIDE; +import static gregtech.api.enums.Textures.BlockIcons.MACHINE_ZPM_TOP; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_IN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_IN_MULTI; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAYS_ENERGY_OUT_MULTI; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGY_IN; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGY_IN_MULTI; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGY_ON_WIRELESS; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGY_OUT; +import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_ENERGY_OUT_MULTI; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.ITexture; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.objects.GTSidedTexture; +import gregtech.api.render.TextureFactory; + +public class Textures { + + private static final IIconContainer OVERLAY_ENERGY_IN_POWER = new CustomIcon("iconsets/OVERLAY_ENERGY_IN_POWER"); + private static final IIconContainer OVERLAY_ENERGY_OUT_POWER = new CustomIcon("iconsets/OVERLAY_ENERGY_OUT_POWER"); + private static final IIconContainer OVERLAY_ENERGY_IN_LASER = new CustomIcon("iconsets/OVERLAY_ENERGY_IN_LASER"); + private static final IIconContainer OVERLAY_ENERGY_OUT_LASER = new CustomIcon("iconsets/OVERLAY_ENERGY_OUT_LASER"); + private static final IIconContainer OVERLAY_ENERGY_ON_WIRELESS_4A = new CustomIcon( + "iconsets/OVERLAY_ENERGY_ON_WIRELESS_4A"); + private static final IIconContainer OVERLAY_ENERGY_ON_WIRELESS_16A = new CustomIcon( + "iconsets/OVERLAY_ENERGY_ON_WIRELESS_16A"); + private static final IIconContainer OVERLAY_ENERGY_ON_WIRELESS_LASER = new CustomIcon( + "iconsets/OVERLAY_ENERGY_ON_WIRELESS_LASER"); + private static final IIconContainer MACHINE_UEV_SIDE = new CustomIcon("iconsets/MACHINE_UEV_SIDE"); + private static final IIconContainer MACHINE_UIV_SIDE = new CustomIcon("iconsets/MACHINE_UIV_SIDE"); + private static final IIconContainer MACHINE_UMV_SIDE = new CustomIcon("iconsets/MACHINE_UMV_SIDE"); + private static final IIconContainer MACHINE_UXV_SIDE = new CustomIcon("iconsets/MACHINE_UXV_SIDE"); + private static final IIconContainer MACHINE_MAXV_SIDE = new CustomIcon("iconsets/MACHINE_MAXV_SIDE"); + private static final IIconContainer MACHINE_UEV_TOP = new CustomIcon("iconsets/MACHINE_UEV_TOP"); + private static final IIconContainer MACHINE_UIV_TOP = new CustomIcon("iconsets/MACHINE_UIV_TOP"); + private static final IIconContainer MACHINE_UMV_TOP = new CustomIcon("iconsets/MACHINE_UMV_TOP"); + private static final IIconContainer MACHINE_UXV_TOP = new CustomIcon("iconsets/MACHINE_UXV_TOP"); + private static final IIconContainer MACHINE_MAXV_TOP = new CustomIcon("iconsets/MACHINE_MAXV_TOP"); + private static final IIconContainer MACHINE_UEV_BOTTOM = new CustomIcon("iconsets/MACHINE_UEV_BOTTOM"); + private static final IIconContainer MACHINE_UIV_BOTTOM = new CustomIcon("iconsets/MACHINE_UIV_BOTTOM"); + private static final IIconContainer MACHINE_UMV_BOTTOM = new CustomIcon("iconsets/MACHINE_UMV_BOTTOM"); + private static final IIconContainer MACHINE_UXV_BOTTOM = new CustomIcon("iconsets/MACHINE_UXV_BOTTOM"); + private static final IIconContainer MACHINE_MAXV_BOTTOM = new CustomIcon("iconsets/MACHINE_MAXV_BOTTOM"); + + private static final IIconContainer TESLA_TRANSCEIVER_TOP = new CustomIcon("iconsets/TESLA_TRANSCEIVER_TOP"); + + public static IIconContainer[] MACHINECASINGS_SIDE_TT = new IIconContainer[] { MACHINE_8V_SIDE, MACHINE_LV_SIDE, + MACHINE_MV_SIDE, MACHINE_HV_SIDE, MACHINE_EV_SIDE, MACHINE_IV_SIDE, MACHINE_LuV_SIDE, MACHINE_ZPM_SIDE, + MACHINE_UV_SIDE, MACHINE_MAX_SIDE, MACHINE_UEV_SIDE, MACHINE_UIV_SIDE, MACHINE_UMV_SIDE, MACHINE_UXV_SIDE, + MACHINE_MAXV_SIDE, }, + MACHINECASINGS_TOP_TT = new IIconContainer[] { MACHINE_8V_TOP, MACHINE_LV_TOP, MACHINE_MV_TOP, MACHINE_HV_TOP, + MACHINE_EV_TOP, MACHINE_IV_TOP, MACHINE_LuV_TOP, MACHINE_ZPM_TOP, MACHINE_UV_TOP, MACHINE_MAX_TOP, + MACHINE_UEV_TOP, MACHINE_UIV_TOP, MACHINE_UMV_TOP, MACHINE_UXV_TOP, MACHINE_MAXV_TOP, }, + MACHINECASINGS_BOTTOM_TT = new IIconContainer[] { MACHINE_8V_BOTTOM, MACHINE_LV_BOTTOM, MACHINE_MV_BOTTOM, + MACHINE_HV_BOTTOM, MACHINE_EV_BOTTOM, MACHINE_IV_BOTTOM, MACHINE_LuV_BOTTOM, MACHINE_ZPM_BOTTOM, + MACHINE_UV_BOTTOM, MACHINE_MAX_BOTTOM, MACHINE_UEV_BOTTOM, MACHINE_UIV_BOTTOM, MACHINE_UMV_BOTTOM, + MACHINE_UXV_BOTTOM, MACHINE_MAXV_BOTTOM, }; + public static ITexture[] OVERLAYS_ENERGY_IN_TT = new ITexture[] { + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 180, 180, 180, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 220, 220, 220, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 255, 100, 0, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 255, 255, 30, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 128, 128, 128, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 220, 220, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 200, 200, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 180, 180, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 160, 160, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 140, 140, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 120, 120, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 100, 100, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 80, 80, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN, new short[] { 60, 60, 245, 0 }), }, + OVERLAYS_ENERGY_OUT_TT = new ITexture[] { + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 180, 180, 180, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 220, 220, 220, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 255, 100, 0, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 255, 255, 30, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 128, 128, 128, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 220, 220, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 200, 200, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 180, 180, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 160, 160, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 140, 140, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 120, 120, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 100, 100, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 80, 80, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT, new short[] { 60, 60, 245, 0 }), }, + OVERLAYS_ENERGY_IN_MULTI_TT = new ITexture[] { + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 180, 180, 180, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 220, 220, 220, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 255, 100, 0, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 255, 255, 30, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 128, 128, 128, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 220, 220, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 200, 200, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 180, 180, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 160, 160, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 140, 140, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 120, 120, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 100, 100, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 80, 80, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_MULTI, new short[] { 60, 60, 245, 0 }), }, + OVERLAYS_ENERGY_OUT_MULTI_TT = new ITexture[] { + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 180, 180, 180, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 220, 220, 220, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 255, 100, 0, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 255, 255, 30, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 128, 128, 128, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 220, 220, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 200, 200, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 180, 180, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 160, 160, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 140, 140, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 120, 120, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 100, 100, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 80, 80, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_MULTI, new short[] { 60, 60, 245, 0 }), }, + OVERLAYS_ENERGY_IN_POWER_TT = new ITexture[] { + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 180, 180, 180, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 220, 220, 220, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 255, 100, 0, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 255, 255, 30, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 128, 128, 128, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 220, 220, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 200, 200, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 180, 180, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 160, 160, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 140, 140, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 120, 120, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 100, 100, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 80, 80, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_POWER, new short[] { 60, 60, 245, 0 }), }, + OVERLAYS_ENERGY_OUT_POWER_TT = new ITexture[] { + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 180, 180, 180, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 220, 220, 220, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 255, 100, 0, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 255, 255, 30, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 128, 128, 128, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 220, 220, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 200, 200, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 180, 180, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 160, 160, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 140, 140, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 120, 120, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 100, 100, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 80, 80, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_POWER, new short[] { 60, 60, 245, 0 }), }, + OVERLAYS_ENERGY_IN_LASER_TT = new ITexture[] { + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 180, 180, 180, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 220, 220, 220, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 255, 100, 0, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 255, 255, 30, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 128, 128, 128, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 220, 220, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 200, 200, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 180, 180, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 160, 160, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 140, 140, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 120, 120, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 100, 100, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 80, 80, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_IN_LASER, new short[] { 60, 60, 245, 0 }), }, + OVERLAYS_ENERGY_OUT_LASER_TT = new ITexture[] { + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 180, 180, 180, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 220, 220, 220, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 255, 100, 0, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 255, 255, 30, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 128, 128, 128, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 240, 240, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 220, 220, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 200, 200, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 180, 180, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 160, 160, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 140, 140, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 120, 120, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 100, 100, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 80, 80, 245, 0 }), + new GTRenderedTexture(OVERLAY_ENERGY_OUT_LASER, new short[] { 60, 60, 245, 0 }), }; + public static final ITexture[] OVERLAYS_ENERGY_IN_WIRELESS_MULTI_4A = { + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_4A, new short[] { 255, 255, 255, 0 }) }; + + public static final ITexture[] OVERLAYS_ENERGY_IN_WIRELESS_MULTI_16A = { + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_16A, new short[] { 255, 255, 255, 0 }) }; + + public static final ITexture[] OVERLAYS_ENERGY_IN_WIRELESS_MULTI_64A = { + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS, new short[] { 25, 43, 255, 0 }) }; + + public static final ITexture[] OVERLAYS_ENERGY_IN_WIRELESS_LASER = { + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }), + TextureFactory.of(OVERLAY_ENERGY_ON_WIRELESS_LASER, new short[] { 255, 255, 255, 0 }) }; + + public static ITexture[][] MACHINE_CASINGS_TT = new ITexture[15][17]; + + public static ITexture TESLA_TRANSCEIVER_TOP_BA = new GTRenderedTexture(TESLA_TRANSCEIVER_TOP); + + public static void run() { + for (byte i = 0; i < MACHINE_CASINGS_TT.length; i++) { + for (byte j = 0; j < MACHINE_CASINGS_TT[i].length; j++) { + MACHINE_CASINGS_TT[i][j] = new GTSidedTexture( + MACHINECASINGS_BOTTOM_TT[i], + MACHINECASINGS_TOP_TT[i], + MACHINECASINGS_SIDE_TT[i], + Dyes.getModulation(j - 1, MACHINE_METAL.mRGBa)); + } + } + MACHINE_CASINGS = MACHINE_CASINGS_TT; + + // These will throw IndexOutOfBoundsException if one of the arrays are the wrong length + System.arraycopy(OVERLAYS_ENERGY_IN_TT, 0, OVERLAYS_ENERGY_IN, 0, OVERLAYS_ENERGY_IN_TT.length); + System.arraycopy(OVERLAYS_ENERGY_OUT_TT, 0, OVERLAYS_ENERGY_OUT, 0, OVERLAYS_ENERGY_OUT_TT.length); + System + .arraycopy(OVERLAYS_ENERGY_IN_MULTI_TT, 0, OVERLAYS_ENERGY_IN_MULTI, 0, OVERLAYS_ENERGY_IN_MULTI_TT.length); + System.arraycopy( + OVERLAYS_ENERGY_OUT_MULTI_TT, + 0, + OVERLAYS_ENERGY_OUT_MULTI, + 0, + OVERLAYS_ENERGY_OUT_MULTI_TT.length); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCapacitor.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCapacitor.java new file mode 100644 index 0000000000..d3cfb21c29 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCapacitor.java @@ -0,0 +1,241 @@ +package tectech.thing.metaTileEntity.hatch; + +import static gregtech.api.enums.GTValues.V; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import tectech.Reference; +import tectech.TecTech; +import tectech.loader.TecTechConfig; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by Tec on 03.04.2017. + */ +public class MTEHatchCapacitor extends MTEHatch implements IAddUIWidgets { + + private static Textures.BlockIcons.CustomIcon TM_H; + private static Textures.BlockIcons.CustomIcon TM_H_ACTIVE; + private static final Map componentBinds = new HashMap<>(); + + public MTEHatchCapacitor(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 16, + new String[] { CommonValues.THETA_MOVEMENT, translateToLocal("gt.blockmachines.hatch.capacitor.desc.0"), + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.capacitor.desc.1") }); + TTUtility.setTier(aTier, this); + } + + public MTEHatchCapacitor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 16, aDescription, aTextures); + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + TM_H_ACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/TM_TESLA_CAPS_ACTIVE"); + TM_H = new Textures.BlockIcons.CustomIcon("iconsets/TM_TESLA_CAPS"); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TM_H_ACTIVE) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(TM_H) }; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchCapacitor(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing(); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing(); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public int getSizeInventory() { + return getBaseMetaTileEntity().isActive() ? 0 : mInventory.length; + } + + public long[] getCapacitors() { + long tier = -1; + long tCurrent = 0; + long tEnergyMax = 0; + for (int i = 0; i < mInventory.length; i++) { + if (mInventory[i] == null || mInventory[i].stackSize != 1) { + continue; + } + CapacitorComponent cap = componentBinds.get(TTUtility.getUniqueIdentifier(mInventory[i])); + if (cap != null && cap.tier > tier) { + tier = cap.tier; + } + } + if (tier >= 0) { + for (int i = 0; i < mInventory.length; i++) { + if (mInventory[i] == null || mInventory[i].stackSize != 1) { + continue; + } + CapacitorComponent cap = componentBinds.get(TTUtility.getUniqueIdentifier(mInventory[i])); + if (cap == null) { + continue; + } + if (cap.tier < tier) { + if (getBaseMetaTileEntity().isActive()) { + mInventory[i] = null; + getBaseMetaTileEntity().setOnFire(); + } + } else { + tCurrent += cap.current; + tEnergyMax += cap.energyMax; + } + } + } + return new long[] { tier, tCurrent, tEnergyMax }; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + SlotGroup.ofItemHandler(inventoryHandler, 4) + .startFromSlot(0) + .endAtSlot(15) + .slotCreator(index -> new BaseSlot(inventoryHandler, index) { + + @Override + public int getSlotStackLimit() { + return 1; + } + + @Override + public boolean isEnabled() { + return !getBaseMetaTileEntity().isActive(); + } + }) + .background(getGUITextureSet().getItemSlot()) + .build() + .setPos(52, 7)); + } + + public static void run() { + new MTEHatchCapacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.0", 0, 1, V[1] * 512); // LV + // Capacitor + new MTEHatchCapacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.1", 1, 1, V[2] * 512); // MV + // Capacitor + new MTEHatchCapacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.2", 2, 1, V[3] * 512); // HV + // Capacitor + new MTEHatchCapacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.3", 3, 1, V[4] * 512); // EV + // Capacitor + new MTEHatchCapacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.4", 4, 1, V[5] * 512); // IV + // Capacitor + new MTEHatchCapacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.5", 5, 1, V[6] * 512); // LuV + // Capacitor + new MTEHatchCapacitor.CapacitorComponent(Reference.MODID + ":item.tm.teslaCoilCapacitor.6", 6, 1, V[7] * 512); // ZPM + // Capacitor + } + + public static class CapacitorComponent implements Comparable { + + private final String unlocalizedName; + private final long tier, current, energyMax; + + CapacitorComponent(ItemStack is, long tier, long current, long energyMax) { + this(TTUtility.getUniqueIdentifier(is), tier, current, energyMax); + } + + CapacitorComponent(String is, long tier, long current, long energyMax) { + unlocalizedName = is; + this.tier = tier; + this.current = current; + this.energyMax = energyMax; + componentBinds.put(unlocalizedName, this); + if (TecTechConfig.DEBUG_MODE) { + TecTech.LOGGER.info("Tesla Capacitor registered: " + unlocalizedName); + } + } + + @Override + public int compareTo(CapacitorComponent o) { + return unlocalizedName.compareTo(o.unlocalizedName); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof CapacitorComponent) { + return compareTo((CapacitorComponent) obj) == 0; + } + return false; + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeData.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeData.java new file mode 100644 index 0000000000..ed162e59e6 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeData.java @@ -0,0 +1,129 @@ +package tectech.thing.metaTileEntity.hatch; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import tectech.mechanics.dataTransport.QuantumDataPacket; +import tectech.mechanics.pipe.IConnectsToDataPipe; +import tectech.thing.metaTileEntity.pipe.MTEPipeData; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 27.10.2016. + */ +public class MTEHatchCreativeData extends MTEHatchDataConnector { + + public MTEHatchCreativeData(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.debug.tt.data.desc.0"), + translateToLocal("gt.blockmachines.debug.tt.data.desc.1"), + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.debug.tt.data.desc.2") }); + TTUtility.setTier(aTier, this); + } + + public MTEHatchCreativeData(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchCreativeData(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return isInputFacing(side); + } + + @Override + protected QuantumDataPacket loadPacketFromNBT(NBTTagCompound nbt) { + return new QuantumDataPacket(nbt); + } + + @Override + public boolean canConnectData(ForgeDirection side) { + return isOutputFacing(side); + } + + @Override + public void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { + IConnectsToDataPipe current = this, source = this, next; + int range = 0; + while ((next = current.getNext(source)) != null && range++ < 1000) { + if (next instanceof MTEHatchDataInput) { + ((MTEHatchDataInput) next).setContents(q); + break; + } + source = current; + current = next; + } + q = null; + } + + @Override + public IConnectsToDataPipe getNext(IConnectsToDataPipe source /* ==this */) { + IGregTechTileEntity base = getBaseMetaTileEntity(); + byte color = base.getColorization(); + if (color < 0) { + return null; + } + IGregTechTileEntity next = base.getIGregTechTileEntityAtSide(base.getFrontFacing()); + if (next == null) { + return null; + } + IMetaTileEntity meta = next.getMetaTileEntity(); + if (meta instanceof MTEPipeData) { + ((MTEPipeData) meta).markUsed(); + return (IConnectsToDataPipe) meta; + } else if (meta instanceof MTEHatchDataInput && ((MTEHatchDataInput) meta).getColorization() == color + && ((MTEHatchDataInput) meta).canConnectData( + base.getFrontFacing() + .getOpposite())) { + return (IConnectsToDataPipe) meta; + } + return null; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (CommonValues.MOVE_AT == aTick % 20) { + if (aBaseMetaTileEntity.isAllowedToWork()) { + getBaseMetaTileEntity().setActive(true); + if (q == null) q = new QuantumDataPacket(0xFFFFFFFFL); + moveAround(aBaseMetaTileEntity); + } else { + q = null; + getBaseMetaTileEntity().setActive(false); + } + } + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeMaintenance.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeMaintenance.java new file mode 100644 index 0000000000..28d631e606 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeMaintenance.java @@ -0,0 +1,90 @@ +package tectech.thing.metaTileEntity.hatch; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.objects.GTRenderedTexture; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +public class MTEHatchCreativeMaintenance extends MTEHatchMaintenance { + + private static Textures.BlockIcons.CustomIcon face; + + public MTEHatchCreativeMaintenance(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + TTUtility.setTier(aTier, this); + } + + public MTEHatchCreativeMaintenance(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures, false); + } + + @Override + public String[] getDescription() { + return new String[] { CommonValues.THETA_MOVEMENT, + translateToLocal("gt.blockmachines.debug.tt.maintenance.desc.0"), // For automatically maintaining + // Multiblocks + translateToLocal("gt.blockmachines.debug.tt.maintenance.desc.1"), // Does fix everything but itself. + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.debug.tt.maintenance.desc.2") // Fixing is + // for plebs! + }; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + face = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_FULLAUTOMAINTENANCE"); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(face) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(face) }; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchCreativeMaintenance(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + this.mWrench = this.mScrewdriver = this.mSoftHammer = this.mHardHammer = this.mCrowbar = this.mSolderingTool = true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer, ForgeDirection side, + float aX, float aY, float aZ) { + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeUncertainty.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeUncertainty.java new file mode 100644 index 0000000000..953506e4d9 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchCreativeUncertainty.java @@ -0,0 +1,56 @@ +package tectech.thing.metaTileEntity.hatch; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.util.EnumChatFormatting; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import tectech.util.CommonValues; + +public class MTEHatchCreativeUncertainty extends MTEHatchUncertainty { + + public MTEHatchCreativeUncertainty(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEHatchCreativeUncertainty(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEHatchCreativeUncertainty(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public String[] getDescription() { + return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.debug.tt.certain.desc.0"), // Feeling + // certain, + // for + // sure + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.debug.tt.certain.desc.1") // Schrödinger's cat escaped the + // box + }; + } + + @Override + public void regenerate() { + // no-op + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && (aTick % 100) == 0) { + if (mode == 0) { + aBaseMetaTileEntity.setActive(false); + status = -128; + } else { + aBaseMetaTileEntity.setActive(true); + compute(); + } + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataConnector.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataConnector.java new file mode 100644 index 0000000000..484fcdaff1 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataConnector.java @@ -0,0 +1,198 @@ +package tectech.thing.metaTileEntity.hatch; + +import static gregtech.api.enums.Dyes.MACHINE_METAL; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import tectech.mechanics.dataTransport.DataPacket; +import tectech.mechanics.pipe.IConnectsToDataPipe; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 11.12.2016. + */ +public abstract class MTEHatchDataConnector extends MTEHatch implements IConnectsToDataPipe { + + public static Textures.BlockIcons.CustomIcon EM_D_SIDES; + public static Textures.BlockIcons.CustomIcon EM_D_ACTIVE; + public static Textures.BlockIcons.CustomIcon EM_D_CONN; + + private String clientLocale = "en_US"; + + public T q; + + public short id = -1; + + protected MTEHatchDataConnector(int aID, String aName, String aNameRegional, int aTier, String[] descr) { + super(aID, aName, aNameRegional, aTier, 0, descr); + TTUtility.setTier(aTier, this); + } + + protected MTEHatchDataConnector(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + EM_D_ACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_EM_D_ACTIVE"); + EM_D_SIDES = new Textures.BlockIcons.CustomIcon("iconsets/OVERLAY_EM_D_SIDES"); + EM_D_CONN = new Textures.BlockIcons.CustomIcon("iconsets/EM_DATA_CONN"); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + EM_D_ACTIVE, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(EM_D_CONN) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + EM_D_SIDES, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(EM_D_CONN) }; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setShort("eID", id); + if (q != null) { + aNBT.setTag("eDATA", q.toNbt()); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + id = aNBT.getShort("eID"); + if (aNBT.hasKey("eDATA")) { + q = loadPacketFromNBT(aNBT.getCompoundTag("eDATA")); + } + } + + protected abstract T loadPacketFromNBT(NBTTagCompound nbt); + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (CommonValues.MOVE_AT == aTick % 20) { + if (q == null) { + getBaseMetaTileEntity().setActive(false); + } else { + getBaseMetaTileEntity().setActive(true); + moveAround(aBaseMetaTileEntity); + } + } + } + } + + public abstract void moveAround(IGregTechTileEntity aBaseMetaTileEntity); + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isLiquidInput(ForgeDirection side) { + return false; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + if (id > 0) { + return new String[] { + translateToLocalFormatted("tt.keyword.ID", clientLocale) + ": " + EnumChatFormatting.AQUA + id, + translateToLocalFormatted("tt.keyword.Content", clientLocale) + ": " + + EnumChatFormatting.AQUA + + (q != null ? q.getContentString() : 0), + translateToLocalFormatted("tt.keyword.PacketHistory", clientLocale) + ": " + + EnumChatFormatting.RED + + (q != null ? q.getTraceSize() : 0), }; + } + return new String[] { + translateToLocalFormatted("tt.keyword.Content", clientLocale) + ": " + + EnumChatFormatting.AQUA + + (q != null ? q.getContentString() : 0), + translateToLocalFormatted("tt.keyword.PacketHistory", clientLocale) + ": " + + EnumChatFormatting.RED + + (q != null ? q.getTraceSize() : 0), }; + } + + @Override + public byte getColorization() { + return getBaseMetaTileEntity().getColorization(); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataInput.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataInput.java new file mode 100644 index 0000000000..57ecd948b5 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataInput.java @@ -0,0 +1,101 @@ +package tectech.thing.metaTileEntity.hatch; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import tectech.mechanics.dataTransport.QuantumDataPacket; +import tectech.mechanics.pipe.IConnectsToDataPipe; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 27.10.2016. + */ +public class MTEHatchDataInput extends MTEHatchDataConnector { + + private boolean delDelay = true; + + public MTEHatchDataInput(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.datain.desc.0"), + translateToLocal("gt.blockmachines.hatch.datain.desc.1"), + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.datain.desc.2") }); + TTUtility.setTier(aTier, this); + } + + public MTEHatchDataInput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchDataInput(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + protected QuantumDataPacket loadPacketFromNBT(NBTTagCompound nbt) { + return new QuantumDataPacket(nbt); + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return isInputFacing(side); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean canConnectData(ForgeDirection side) { + return isInputFacing(side); + } + + @Override + public IConnectsToDataPipe getNext(IConnectsToDataPipe source) { + return null; + } + + public void setContents(QuantumDataPacket qIn) { + if (qIn == null) { + this.q = null; + } else { + if (qIn.getContent() > 0) { + this.q = qIn; + delDelay = true; + } else { + this.q = null; + } + } + } + + @Override + public void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { + if (delDelay) { + delDelay = false; + } else { + setContents(null); + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataItemsInput.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataItemsInput.java new file mode 100644 index 0000000000..533c9cb695 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataItemsInput.java @@ -0,0 +1,255 @@ +package tectech.thing.metaTileEntity.hatch; + +import static gregtech.api.enums.Dyes.MACHINE_METAL; +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; +import static tectech.thing.metaTileEntity.hatch.MTEHatchDataConnector.EM_D_ACTIVE; +import static tectech.thing.metaTileEntity.hatch.MTEHatchDataConnector.EM_D_CONN; +import static tectech.thing.metaTileEntity.hatch.MTEHatchDataConnector.EM_D_SIDES; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchDataAccess; +import gregtech.api.objects.GTRenderedTexture; +import tectech.mechanics.dataTransport.InventoryDataPacket; +import tectech.mechanics.pipe.IConnectsToDataPipe; +import tectech.recipe.TTRecipeAdder; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +public class MTEHatchDataItemsInput extends MTEHatchDataAccess implements IConnectsToDataPipe { + + public boolean delDelay = true; + private ItemStack[] stacks; + + private String clientLocale = "en_US"; + + public MTEHatchDataItemsInput(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + TTUtility.setTier(aTier, this); + } + + public MTEHatchDataItemsInput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + EM_D_ACTIVE, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(EM_D_CONN) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + EM_D_SIDES, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(EM_D_CONN) }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchDataItemsInput(this.mName, this.mTier, mDescriptionArray, this.mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return isInputFacing(side); + } + + @Override + public boolean canConnectData(ForgeDirection side) { + return isInputFacing(side); + } + + @Override + public IConnectsToDataPipe getNext(IConnectsToDataPipe source) { + return null; + } + + public void setContents(InventoryDataPacket iIn) { + if (iIn == null) { + stacks = null; + } else { + if (iIn.getContent().length > 0) { + stacks = iIn.getContent(); + delDelay = true; + } else { + stacks = null; + } + } + } + + @Override + public void onRemoval() { + stacks = null; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + NBTTagCompound stacksTag = new NBTTagCompound(); + if (stacks != null) { + stacksTag.setInteger("count", stacks.length); + for (int i = 0; i < stacks.length; i++) { + stacksTag.setTag(Integer.toString(i), stacks[i].writeToNBT(new NBTTagCompound())); + } + } + aNBT.setTag("data_stacks", stacksTag); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + NBTTagCompound stacksTag = aNBT.getCompoundTag("data_stacks"); + int count = stacksTag.getInteger("count"); + if (count > 0) { + ArrayList stacks = new ArrayList<>(); + for (int i = 0; i < count; i++) { + ItemStack stack = ItemStack.loadItemStackFromNBT(stacksTag.getCompoundTag(Integer.toString(i))); + if (stack != null) { + stacks.add(stack); + } + } + if (stacks.size() > 0) { + this.stacks = stacks.toArray(TTRecipeAdder.nullItem); + } + } + } + + @Override + public int getSizeInventory() { + return stacks != null ? stacks.length : 0; + } + + @Override + public ItemStack getStackInSlot(int aIndex) { + return stacks != null && aIndex < stacks.length ? stacks[aIndex] : null; + } + + @Override + public List getInventoryItems(Predicate filter) { + if (stacks == null) return Collections.emptyList(); + return Arrays.stream(stacks) + .filter(stack -> stack != null && filter.test(stack)) + .collect(Collectors.toList()); + } + + @Override + public boolean shouldDropItemAt(int index) { + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if (CommonValues.MOVE_AT == aTick % 20) { + if (stacks == null) { + getBaseMetaTileEntity().setActive(false); + } else { + getBaseMetaTileEntity().setActive(true); + if (delDelay) { + delDelay = false; + } else { + setContents(null); + } + } + } + } + + @Override + public String[] getDescription() { + return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.datainass.desc.0"), + translateToLocal("gt.blockmachines.hatch.datainass.desc.1"), + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.datainass.desc.2") }; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { translateToLocalFormatted("tt.keyphrase.Content_Stack_Count", clientLocale) + ": " + + (stacks == null ? 0 : stacks.length) }; + } + + @Override + public byte getColorization() { + return getBaseMetaTileEntity().getColorization(); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataItemsOutput.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataItemsOutput.java new file mode 100644 index 0000000000..8a2c005fec --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataItemsOutput.java @@ -0,0 +1,133 @@ +package tectech.thing.metaTileEntity.hatch; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import tectech.mechanics.dataTransport.InventoryDataPacket; +import tectech.mechanics.pipe.IConnectsToDataPipe; +import tectech.thing.metaTileEntity.pipe.MTEPipeData; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +public class MTEHatchDataItemsOutput extends MTEHatchDataConnector { + + public MTEHatchDataItemsOutput(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.dataoutass.desc.0"), + translateToLocal("gt.blockmachines.hatch.dataoutass.desc.1"), + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.dataoutass.desc.2") }); + TTUtility.setTier(aTier, this); + } + + public MTEHatchDataItemsOutput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchDataItemsOutput(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return false; + } + + @Override + protected InventoryDataPacket loadPacketFromNBT(NBTTagCompound nbt) { + return new InventoryDataPacket(nbt); + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return isInputFacing(side); + } + + @Override + public boolean canConnectData(ForgeDirection side) { + return isOutputFacing(side); + } + + @Override + public void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { + IConnectsToDataPipe current = this, source = this, next; + int range = 0; + while ((next = current.getNext(source)) != null && range++ < 1000) { + if (next instanceof MTEHatchDataItemsInput) { + ((MTEHatchDataItemsInput) next).setContents(q); + break; + } + source = current; + current = next; + } + q = null; + } + + @Override + public IConnectsToDataPipe getNext(IConnectsToDataPipe source /* ==this */) { + IGregTechTileEntity base = getBaseMetaTileEntity(); + byte color = base.getColorization(); + if (color < 0) { + return null; + } + IGregTechTileEntity next = base.getIGregTechTileEntityAtSide(base.getFrontFacing()); + if (next == null) { + return null; + } + IMetaTileEntity meta = next.getMetaTileEntity(); + if (meta instanceof MTEPipeData) { + ((MTEPipeData) meta).markUsed(); + return (IConnectsToDataPipe) meta; + } else if (meta instanceof MTEHatchDataItemsInput && ((MTEHatchDataItemsInput) meta).getColorization() == color + && ((MTEHatchDataItemsInput) meta).canConnectData( + base.getFrontFacing() + .getOpposite())) { + return (IConnectsToDataPipe) meta; + } + return null; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataOutput.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataOutput.java new file mode 100644 index 0000000000..094423cb0a --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDataOutput.java @@ -0,0 +1,113 @@ +package tectech.thing.metaTileEntity.hatch; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import tectech.mechanics.dataTransport.QuantumDataPacket; +import tectech.mechanics.pipe.IConnectsToDataPipe; +import tectech.thing.metaTileEntity.pipe.MTEPipeData; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 27.10.2016. + */ +public class MTEHatchDataOutput extends MTEHatchDataConnector { + + public MTEHatchDataOutput(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.dataout.desc.0"), + translateToLocal("gt.blockmachines.hatch.dataout.desc.1"), + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.dataout.desc.2") }); + TTUtility.setTier(aTier, this); + } + + public MTEHatchDataOutput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchDataOutput(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return isInputFacing(side); + } + + @Override + protected QuantumDataPacket loadPacketFromNBT(NBTTagCompound nbt) { + return new QuantumDataPacket(nbt); + } + + @Override + public boolean canConnectData(ForgeDirection side) { + return isOutputFacing(side); + } + + @Override + public void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { + IConnectsToDataPipe current = this, source = this, next; + int range = 0; + while ((next = current.getNext(source)) != null && range++ < 1000) { + if (next instanceof MTEHatchDataInput) { + ((MTEHatchDataInput) next).setContents(q); + break; + } + source = current; + current = next; + } + q = null; + } + + @Override + public IConnectsToDataPipe getNext(IConnectsToDataPipe source /* ==this */) { + IGregTechTileEntity base = getBaseMetaTileEntity(); + byte color = base.getColorization(); + if (color < 0) { + return null; + } + IGregTechTileEntity next = base.getIGregTechTileEntityAtSide(base.getFrontFacing()); + if (next == null) { + return null; + } + IMetaTileEntity meta = next.getMetaTileEntity(); + if (meta instanceof MTEPipeData) { + ((MTEPipeData) meta).markUsed(); + return (IConnectsToDataPipe) meta; + } else if (meta instanceof MTEHatchDataInput && ((MTEHatchDataInput) meta).getColorization() == color + && ((MTEHatchDataInput) meta).canConnectData( + base.getFrontFacing() + .getOpposite())) { + return (IConnectsToDataPipe) meta; + } + return null; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDynamoMulti.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDynamoMulti.java new file mode 100644 index 0000000000..e5f457ccc2 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDynamoMulti.java @@ -0,0 +1,127 @@ +package tectech.thing.metaTileEntity.hatch; + +import static gregtech.api.enums.GTValues.V; +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import tectech.thing.metaTileEntity.Textures; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 16.12.2016. + */ +public class MTEHatchDynamoMulti extends MTEHatch { + + public final int maxAmperes; + public int Amperes; + + public MTEHatchDynamoMulti(int aID, String aName, String aNameRegional, int aTier, int aAmp) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { CommonValues.TEC_MARK_GENERAL, + translateToLocal("gt.blockmachines.hatch.dynamomulti.desc.0") }); // Multiple Ampere Energy + // Extractor for Multiblocks + Amperes = maxAmperes = aAmp; + TTUtility.setTier(aTier, this); + } + + public MTEHatchDynamoMulti(String aName, int aTier, int aAmp, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + Amperes = maxAmperes = aAmp; + } + + public MTEHatchDynamoMulti(int aID, String aName, String aNameRegional, int aTier, int i, String[] description, + int aAmp) { + super(aID, aName, aNameRegional, aTier, 0, description); + Amperes = maxAmperes = aAmp; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.OVERLAYS_ENERGY_IN_POWER_TT[mTier] }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.OVERLAYS_ENERGY_IN_POWER_TT[mTier] }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 128L * Amperes; + } + + @Override + public long maxEUOutput() { + return V[mTier]; + } + + @Override + public long maxEUStore() { + return 512L + V[mTier] * 4L * Amperes; + } + + @Override + public long maxAmperesOut() { + return Amperes; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchDynamoMulti(mName, mTier, Amperes, mDescriptionArray, mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDynamoTunnel.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDynamoTunnel.java new file mode 100644 index 0000000000..2a72fb31f2 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchDynamoTunnel.java @@ -0,0 +1,286 @@ +package tectech.thing.metaTileEntity.hatch; + +import static gregtech.api.enums.GTValues.V; +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.PowerLogic; +import gregtech.api.logic.interfaces.PowerLogicHost; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.util.GTUtility; +import tectech.mechanics.pipe.IConnectsToEnergyTunnel; +import tectech.thing.metaTileEntity.Textures; +import tectech.thing.metaTileEntity.pipe.MTEPipeEnergy; +import tectech.thing.metaTileEntity.pipe.MTEPipeEnergyMirror; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 16.12.2016. + */ +public class MTEHatchDynamoTunnel extends MTEHatchDynamoMulti implements IConnectsToEnergyTunnel { + + public MTEHatchDynamoTunnel(int ID, String unlocalisedName, String localisedName, int tier, int amps) { + super( + ID, + unlocalisedName, + localisedName, + tier, + 0, + new String[] { CommonValues.TEC_MARK_GENERAL, + translateToLocal("gt.blockmachines.hatch.dynamotunnel.desc.0"), + translateToLocal("gt.blockmachines.hatch.dynamotunnel.desc.1") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(amps * V[tier]) + + EnumChatFormatting.RESET + + " EU/t" }, + amps); + + TTUtility.setTier(tier, this); + } + + public MTEHatchDynamoTunnel(String aName, int aTier, int aAmp, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aAmp, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.OVERLAYS_ENERGY_OUT_LASER_TT[mTier] }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.OVERLAYS_ENERGY_OUT_LASER_TT[mTier] }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return V[mTier]; + } + + @Override + public long maxEUOutput() { + return V[mTier]; + } + + @Override + public long maxEUStore() { + return V[mTier] * 24L * Amperes; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public boolean isEnetInput() { + return false; + } + + @Override + public ConnectionType getConnectionType() { + return ConnectionType.LASER; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchDynamoTunnel(mName, mTier, Amperes, mDescriptionArray, mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + byte Tick = (byte) (aTick % 20); + if (CommonValues.TRANSFER_AT == Tick) { + if (aBaseMetaTileEntity.getStoredEU() > 0) { + setEUVar(aBaseMetaTileEntity.getStoredEU() - Amperes); + if (aBaseMetaTileEntity.getStoredEU() < 0) { + setEUVar(0); + } + } + if (aBaseMetaTileEntity.getStoredEU() > getMinimumStoredEU()) { + moveAround(aBaseMetaTileEntity); + } + } + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (Amperes != maxAmperes) { + aNBT.setInteger("amperes", Amperes); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + int savedAmperes = aNBT.getInteger("amperes"); + if (savedAmperes != 0) { + Amperes = savedAmperes; + } + } + + private void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { + byte color = getBaseMetaTileEntity().getColorization(); + if (color < 0) { + return; + } + final ForgeDirection front = aBaseMetaTileEntity.getFrontFacing(); + ForgeDirection opposite = front.getOpposite(); + for (short dist = 1; dist < 1000; dist++) { + + IGregTechTileEntity tGTTileEntity = aBaseMetaTileEntity + .getIGregTechTileEntityAtSideAndDistance(front, dist); + if (tGTTileEntity != null && tGTTileEntity.getColorization() == color) { + IMetaTileEntity aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); + if (aMetaTileEntity != null) { + // If we hit a mirror, use the mirror's view instead + if (aMetaTileEntity instanceof MTEPipeEnergyMirror tMirror) { + + tGTTileEntity = tMirror.bendAround(opposite); + if (tGTTileEntity == null) { + break; + } else { + aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); + opposite = tMirror.getChainedFrontFacing(); + } + } + + if (aMetaTileEntity instanceof MTEHatchEnergyTunnel && opposite == tGTTileEntity.getFrontFacing()) { + if (maxEUOutput() > ((MTEHatchEnergyTunnel) aMetaTileEntity).maxEUInput()) { + aMetaTileEntity.doExplosion(maxEUOutput()); + setEUVar(aBaseMetaTileEntity.getStoredEU() - maxEUOutput()); + return; + } else if (maxEUOutput() == ((MTEHatchEnergyTunnel) aMetaTileEntity).maxEUInput()) { + long diff = Math.min( + Amperes * 20L * maxEUOutput(), + Math.min( + ((MTEHatchEnergyTunnel) aMetaTileEntity).maxEUStore() + - aMetaTileEntity.getBaseMetaTileEntity() + .getStoredEU(), + aBaseMetaTileEntity.getStoredEU())); + + setEUVar(aBaseMetaTileEntity.getStoredEU() - diff); + + ((MTEHatchEnergyTunnel) aMetaTileEntity).setEUVar( + aMetaTileEntity.getBaseMetaTileEntity() + .getStoredEU() + diff); + } + return; + } else if (aMetaTileEntity instanceof MTEPipeEnergy) { + if (((MTEPipeEnergy) aMetaTileEntity).connectionCount < 2) { + return; + } else { + ((MTEPipeEnergy) aMetaTileEntity).markUsed(); + } + } else { + return; + } + } else { + if (tGTTileEntity instanceof PowerLogicHost) { + PowerLogic logic = ((PowerLogicHost) tGTTileEntity).getPowerLogic(opposite); + if (logic == null || !logic.canUseLaser() || opposite != tGTTileEntity.getFrontFacing()) { + return; + } + + long ampsUsed = logic.injectEnergy(maxEUOutput(), Amperes); + setEUVar(aBaseMetaTileEntity.getStoredEU() - ampsUsed * maxEUOutput()); + } + return; + } + } else { + return; + } + } + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + final int x = getGUIWidth() / 2 - 37; + final int y = getGUIHeight() / 5 - 7; + builder.widget( + TextWidget.localised("GT5U.machines.laser_hatch.amperage") + .setPos(x, y) + .setSize(74, 14)) + .widget( + new NumericWidget().setSetter(val -> Amperes = (int) val) + .setGetter(() -> Amperes) + .setBounds(1, maxAmperes) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(70, 18) + .setPos(x, y + 16) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)); + } + + @Override + public boolean canConnect(ForgeDirection side) { + return isOutputFacing(side); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchEnergyMulti.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchEnergyMulti.java new file mode 100644 index 0000000000..12112b0290 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchEnergyMulti.java @@ -0,0 +1,133 @@ +package tectech.thing.metaTileEntity.hatch; + +import static gregtech.api.enums.GTValues.V; +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import tectech.thing.metaTileEntity.Textures; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 16.12.2016. + */ +public class MTEHatchEnergyMulti extends MTEHatch { + + public final int maxAmperes; + public int Amperes; + + public MTEHatchEnergyMulti(int aID, String aName, String aNameRegional, int aTier, int aAmp) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { CommonValues.TEC_MARK_GENERAL, translateToLocal("gt.blockmachines.hatch.energymulti.desc.0"), + translateToLocalFormatted("gt.blockmachines.hatch.energymulti.desc.2", aAmp + (aAmp >> 2)), + translateToLocalFormatted("gt.blockmachines.hatch.energymulti.desc.3", aAmp) }); + Amperes = maxAmperes = aAmp; + TTUtility.setTier(aTier, this); + } + + public MTEHatchEnergyMulti(String aName, int aTier, int aAmp, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + Amperes = maxAmperes = aAmp; + } + + public MTEHatchEnergyMulti(int aID, String aName, String aNameRegional, int aTier, int i, String[] description, + int aAmp) { + super(aID, aName, aNameRegional, aTier, 0, description); + Amperes = maxAmperes = aAmp; + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.OVERLAYS_ENERGY_IN_POWER_TT[mTier] }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.OVERLAYS_ENERGY_IN_POWER_TT[mTier] }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return 128L * Amperes; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxEUStore() { + return 512L + V[mTier] * 4L * Amperes; + } + + @Override + public long maxAmperesIn() { + return Amperes + (Amperes >> 2); + } + + @Override + public long maxWorkingAmperesIn() { + return Amperes; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchEnergyMulti(mName, mTier, Amperes, mDescriptionArray, mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchEnergyTunnel.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchEnergyTunnel.java new file mode 100644 index 0000000000..f01415606b --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchEnergyTunnel.java @@ -0,0 +1,203 @@ +package tectech.thing.metaTileEntity.hatch; + +import static gregtech.api.enums.GTValues.V; +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.util.GTUtility; +import tectech.mechanics.pipe.IConnectsToEnergyTunnel; +import tectech.thing.metaTileEntity.Textures; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 16.12.2016. + */ +public class MTEHatchEnergyTunnel extends MTEHatchEnergyMulti implements IConnectsToEnergyTunnel { + + public MTEHatchEnergyTunnel(int aID, String aName, String aNameRegional, int aTier, int aAmp) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { CommonValues.TEC_MARK_GENERAL, + translateToLocal("gt.blockmachines.hatch.energytunnel.desc.0"), + translateToLocal("gt.blockmachines.hatch.energytunnel.desc.1") + ": " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(aAmp * V[aTier]) + + EnumChatFormatting.RESET + + " EU/t" }, + aAmp); // Energy injecting terminal for Multiblocks + TTUtility.setTier(aTier, this); + } + + public MTEHatchEnergyTunnel(String aName, int aTier, int aAmp, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aAmp, aDescription, aTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.OVERLAYS_ENERGY_IN_LASER_TT[mTier] }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, Textures.OVERLAYS_ENERGY_IN_LASER_TT[mTier] }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return V[mTier]; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxEUStore() { + return V[mTier] * 24L * Amperes; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public boolean isEnetInput() { + return false; + } + + @Override + public ConnectionType getConnectionType() { + return ConnectionType.LASER; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchEnergyTunnel(mName, mTier, Amperes, mDescriptionArray, mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (Amperes != maxAmperes) { + aNBT.setInteger("amperes", Amperes); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + int savedAmperes = aNBT.getInteger("amperes"); + if (savedAmperes != 0) { + Amperes = savedAmperes; + } + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + final int x = getGUIWidth() / 2 - 37; + final int y = getGUIHeight() / 5 - 7; + builder.widget( + TextWidget.localised("GT5U.machines.laser_hatch.amperage") + .setPos(x, y) + .setSize(74, 14)) + .widget( + new NumericWidget().setSetter(val -> Amperes = (int) val) + .setGetter(() -> Amperes) + .setBounds(1, maxAmperes) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(70, 18) + .setPos(x, y + 16) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)); + } + + @Override + public boolean canConnect(ForgeDirection side) { + return isInputFacing(side); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + byte Tick = (byte) (aTick % 20); + if (CommonValues.TRANSFER_AT == Tick) { + if (aBaseMetaTileEntity.getStoredEU() > 0) { + setEUVar(aBaseMetaTileEntity.getStoredEU() - Amperes); + if (aBaseMetaTileEntity.getStoredEU() < 0) { + setEUVar(0); + } + } + } + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchObjectHolder.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchObjectHolder.java new file mode 100644 index 0000000000..201b54e24c --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchObjectHolder.java @@ -0,0 +1,176 @@ +package tectech.thing.metaTileEntity.hatch; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import tectech.thing.gui.TecTechUITextures; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by Tec on 03.04.2017. + */ +public class MTEHatchObjectHolder extends MTEHatch implements IAddGregtechLogo { + + private static Textures.BlockIcons.CustomIcon EM_H; + private static Textures.BlockIcons.CustomIcon EM_H_ACTIVE; + + public MTEHatchObjectHolder(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 1, + new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.holder.desc.0"), + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.holder.desc.1") }); + TTUtility.setTier(aTier, this); + } + + public MTEHatchObjectHolder(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 1, aDescription, aTextures); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + EM_H_ACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/EM_HOLDER_ACTIVE"); + EM_H = new Textures.BlockIcons.CustomIcon("iconsets/EM_HOLDER"); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(EM_H_ACTIVE) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(EM_H) }; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchObjectHolder(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return facing.offsetY == 0; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing(); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return side == aBaseMetaTileEntity.getFrontFacing(); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + // if(aBaseMetaTileEntity.isActive()) + // aPlayer.addChatComponentMessage(new ChatComponentText("It is still active...")); + // else if(heat>0) + // aPlayer.addChatComponentMessage(new ChatComponentText("It is still warm...")); + // else + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO) + .setSize(18, 18) + .setPos(151, 63)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_HEAT_SINK) + .setPos(46, 17) + .setSize(84, 60)) + .widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_RACK_LARGE) + .setPos(68, 27) + .setSize(40, 40)) + .widget(new SlotWidget(new BaseSlot(inventoryHandler, 0) { + + @Override + public int getSlotStackLimit() { + return 1; + } + + @Override + public boolean isEnabled() { + return !getBaseMetaTileEntity().isActive(); + } + }).setPos(79, 38)) + .widget( + new DrawableWidget().setDrawable(TecTechUITextures.BUTTON_STANDARD_LIGHT_16x16) + .setPos(152, 24) + .setSize(16, 16)) + .widget( + new DrawableWidget() + .setDrawable( + () -> getBaseMetaTileEntity().isActive() ? TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON + : TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_DISABLED) + .setPos(152, 24) + .setSize(16, 16)) + .widget( + new FakeSyncWidget.BooleanSyncer( + () -> getBaseMetaTileEntity().isActive(), + val -> getBaseMetaTileEntity().setActive(val))); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchParam.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchParam.java new file mode 100644 index 0000000000..259bc4d164 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchParam.java @@ -0,0 +1,554 @@ +package tectech.thing.metaTileEntity.hatch; + +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import tectech.TecTech; +import tectech.thing.gui.TecTechUITextures; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 15.12.2016. + */ +public class MTEHatchParam extends MTEHatch implements IAddGregtechLogo, IAddUIWidgets { + + public int pointer = 0; + public int param = -1; + public double value0D = 0; + public double value1D = 0; + public double input0D = 0; + public double input1D = 0; + private static Textures.BlockIcons.CustomIcon ScreenON; + private static Textures.BlockIcons.CustomIcon ScreenOFF; + + private String clientLocale = "en_US"; + + public MTEHatchParam(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { CommonValues.TEC_MARK_GENERAL, + EnumChatFormatting.DARK_RED + + "Deprecated; Now you can set parameter by clicking LED on multiblock GUI.", + EnumChatFormatting.DARK_RED + + "If it doesn't work, try removing Parametrizer from multiblock structure." }); + TTUtility.setTier(aTier, this); + } + + public MTEHatchParam(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/PARAM"); + ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/PARAM_ACTIVE"); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(ScreenON) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(ScreenOFF) }; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEHatchParam(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { + translateToLocalFormatted("tt.keyword.Parametrizer", clientLocale) + " " + + translateToLocalFormatted("tt.keyword.ID", clientLocale) + + ": " + + EnumChatFormatting.GREEN + + param, + translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 0D: " + EnumChatFormatting.AQUA + value0D, + translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 1D: " + EnumChatFormatting.BLUE + value1D, + translateToLocalFormatted("tt.keyword.Input", clientLocale) + " 0D: " + EnumChatFormatting.GOLD + input0D, + translateToLocalFormatted("tt.keyword.Input", clientLocale) + " 1D: " + + EnumChatFormatting.YELLOW + + input1D, }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("ePointer", pointer); + aNBT.setDouble("eValue0D", value0D); + aNBT.setDouble("eValue1D", value1D); + aNBT.setDouble("eInput0D", input0D); + aNBT.setDouble("eInput1D", input1D); + aNBT.setInteger("eParam", param); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + pointer = aNBT.getInteger("ePointer"); + if (aNBT.hasKey("eFloats") || aNBT.hasKey("eValue0i") + || aNBT.hasKey("eValue1i") + || aNBT.hasKey("eInput0i") + || aNBT.hasKey("eInput1i")) { + boolean usesFloat = aNBT.getBoolean("eFloats"); + if (usesFloat) { + value0D = Double.longBitsToDouble(aNBT.getLong("eValue0i")); + value1D = Double.longBitsToDouble(aNBT.getLong("eValue1i")); + input0D = Double.longBitsToDouble(aNBT.getLong("eInput0i")); + input1D = Double.longBitsToDouble(aNBT.getLong("eInput1i")); + } else { + value0D = aNBT.getLong("eValue0i"); + value1D = aNBT.getLong("eValue1i"); + input0D = aNBT.getLong("eInput0i"); + input1D = aNBT.getLong("eInput1i"); + } + } else { + value0D = aNBT.getDouble("eValue0D"); + value1D = aNBT.getDouble("eValue1D"); + input0D = aNBT.getDouble("eInput0D"); + input1D = aNBT.getDouble("eInput1D"); + } + param = aNBT.getInteger("eParam"); + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean isLiquidInput(ForgeDirection side) { + return false; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return false; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO_DARK) + .setSize(18, 18) + .setPos(112, 55)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + final boolean isAdvanced = mTier > 5; + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE) + .setPos(43, 4) + .setSize(90, 72)); + + addChangeParamButton( + builder, + (shift, columnPointer, secondRow) -> param -= shift ? 16 : 4, + 7, + 4, + GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, + TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + if (secondRow.get()) { + secondRow.set(false); + } else { + columnPointer.addAndGet(shift ? -16 : -4); + } + } else { + value0D -= shift ? 4096 : 256; + } + }, 7, 22, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_0); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + if (secondRow.get()) { + columnPointer.addAndGet(shift ? -16 : -4); + } else { + secondRow.set(true); + } + } else { + value1D -= shift ? 4096 : 256; + } + }, 7, 40, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_1); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + if (shift) { + if (secondRow.get()) { + value1D = Double.longBitsToDouble(0xFFFF_FFFF_FFFF_FFFFL); + } else { + value0D = Double.longBitsToDouble(0xFFFF_FFFF_FFFF_FFFFL); + } + } else { + if (secondRow.get()) { + long temp = Double.doubleToLongBits(value1D); + temp |= 1L << (long) columnPointer.get(); + value1D = Double.longBitsToDouble(temp); + } else { + long temp = Double.doubleToLongBits(value0D); + temp |= 1L << (long) columnPointer.get(); + value0D = Double.longBitsToDouble(temp); + } + } + } else { + value0D /= shift ? 4096 : 256; + value1D /= shift ? 4096 : 256; + } + }, + 7, + 58, + isAdvanced ? TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_S : GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, + isAdvanced ? null : TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); + + addChangeParamButton( + builder, + (shift, columnPointer, secondRow) -> param -= shift ? 2 : 1, + 25, + 4, + GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, + TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + if (secondRow.get()) { + secondRow.set(false); + } else { + columnPointer.addAndGet(shift ? -2 : -1); + } + } else { + value0D -= shift ? 16 : 1; + } + }, 25, 22, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_0); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + if (secondRow.get()) { + columnPointer.addAndGet(shift ? -2 : -1); + } else { + secondRow.set(true); + } + } else { + value1D -= shift ? 16 : 1; + } + }, 25, 40, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_1); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + if (shift) { + if (secondRow.get()) { + value1D = Double.longBitsToDouble(0); + } else { + value0D = Double.longBitsToDouble(0); + } + } else { + if (secondRow.get()) { + long temp = Double.doubleToLongBits(value1D); + temp &= ~(1L << (long) columnPointer.get()); + value1D = Double.longBitsToDouble(temp); + } else { + long temp = Double.doubleToLongBits(value0D); + temp &= ~(1L << (long) columnPointer.get()); + value0D = Double.longBitsToDouble(temp); + } + } + } else { + value0D /= shift ? 16 : 2; + value1D /= shift ? 16 : 2; + } + }, + 25, + 58, + isAdvanced ? TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_C : GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, + isAdvanced ? null : TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_X); + + addChangeParamButton( + builder, + (shift, columnPointer, secondRow) -> param += shift ? 2 : 1, + 133, + 4, + GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, + TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + if (secondRow.get()) { + secondRow.set(false); + } else { + columnPointer.addAndGet(shift ? 2 : 1); + } + } else { + value0D += shift ? 16 : 1; + } + }, 133, 22, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_0); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + if (secondRow.get()) { + columnPointer.addAndGet(shift ? 2 : 1); + } else { + secondRow.set(true); + } + } else { + value1D += shift ? 16 : 1; + } + }, 133, 40, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_1); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + if (shift) { + if (secondRow.get()) { + value1D = Double.longBitsToDouble(~Double.doubleToLongBits(value1D)); + } else { + value0D = Double.longBitsToDouble(~Double.doubleToLongBits(value1D)); + } + } else { + if (secondRow.get()) { + long temp = Double.doubleToLongBits(value1D); + temp ^= 1L << (long) columnPointer.get(); + value1D = Double.longBitsToDouble(temp); + } else { + long temp = Double.doubleToLongBits(value0D); + temp ^= 1L << (long) columnPointer.get(); + value0D = Double.longBitsToDouble(temp); + } + } + } else { + value0D *= shift ? 16 : 2; + value1D *= shift ? 16 : 2; + } + }, + 133, + 58, + isAdvanced ? TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_T : GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, + isAdvanced ? null : TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); + + addChangeParamButton( + builder, + (shift, columnPointer, secondRow) -> param += shift ? 16 : 4, + 151, + 4, + GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, + TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + if (secondRow.get()) { + secondRow.set(false); + } else { + columnPointer.addAndGet(shift ? 16 : 4); + } + } else { + value0D += shift ? 4096 : 256; + } + }, 151, 22, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_0); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + if (secondRow.get()) { + columnPointer.addAndGet(shift ? 16 : 4); + } else { + secondRow.set(true); + } + } else { + value1D += shift ? 4096 : 256; + } + }, 151, 40, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_1); + addChangeParamButton(builder, (shift, columnPointer, secondRow) -> { + if (isAdvanced) { + value0D = input0D; + value1D = input1D; + } else { + value0D *= shift ? 4096 : 256; + value1D *= shift ? 4096 : 256; + } + }, + 151, + 58, + isAdvanced ? TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_IF : GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, + isAdvanced ? null : TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID); + + builder.widget(new FakeSyncWidget.IntegerSyncer(() -> pointer, val -> pointer = val)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> param, val -> param = val)) + .widget(new FakeSyncWidget.DoubleSyncer(() -> value0D, val -> value0D = val)) + .widget(new FakeSyncWidget.DoubleSyncer(() -> value1D, val -> value1D = val)) + .widget(new FakeSyncWidget.DoubleSyncer(() -> input0D, val -> input0D = val)) + .widget(new FakeSyncWidget.DoubleSyncer(() -> input1D, val -> input1D = val)); + + final String CIRCLED_0 = "\u24EA"; + final String CIRCLED_1 = "\u2460"; + final String ARROW_DOWN = "\u2b07"; + final String ARROW_UP = "\u2b06"; + builder.widget( + TextWidget.dynamicString(() -> (isAdvanced ? "Parameters X: " : "Parameters: ") + param) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 7)) + .widget( + TextWidget.dynamicString(() -> CIRCLED_0 + ARROW_DOWN + TTUtility.formatNumberExp(input0D)) + .setSynced(false) + .setDefaultColor(0x22ddff) + .setPos(46, 16)) + .widget( + TextWidget.dynamicString(() -> CIRCLED_1 + ARROW_DOWN + TTUtility.formatNumberExp(input1D)) + .setSynced(false) + .setDefaultColor(0x00ffff) + .setPos(46, 24)) + .widget( + TextWidget.dynamicString(() -> CIRCLED_0 + ARROW_UP + TTUtility.formatNumberExp(value0D)) + .setSynced(false) + .setDefaultColor(0x00bbff) + .setPos(46, 33)) + .widget( + TextWidget.dynamicString(() -> CIRCLED_1 + ARROW_UP + TTUtility.formatNumberExp(value1D)) + .setSynced(false) + .setDefaultColor(0x0077ff) + .setPos(46, 41)) + .widget( + TextWidget + .dynamicString( + () -> CIRCLED_0 + ARROW_UP + TTUtility.longBitsToShortString(Double.doubleToLongBits(value0D))) + .setSynced(false) + .setDefaultColor(0x00bbff) + .setScale(.5f) + .setTextAlignment(Alignment.CenterLeft) + .setPos(46, 50)) + .widget( + TextWidget + .dynamicString( + () -> CIRCLED_1 + ARROW_UP + TTUtility.longBitsToShortString(Double.doubleToLongBits(value1D))) + .setSynced(false) + .setDefaultColor(0x0077ff) + .setScale(.5f) + .setTextAlignment(Alignment.CenterLeft) + .setPos(46, 58)); + if (isAdvanced) { + builder.widget( + TextWidget.dynamicString( + () -> "Pointer " + Integer.toHexString(pointer | 0x10000) + .substring(1)) + .setSynced(false) + .setDefaultColor(0x0033ff) + .setPos(46, 66)); + } + } + + private void addChangeParamButton(ModularWindow.Builder builder, OnClick onClick, int xPos, int yPos, + IDrawable overlay1, IDrawable overlay2) { + final boolean isAdvanced = mTier > 5; + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + AtomicInteger columnPointer = new AtomicInteger(pointer & 0xff); + AtomicBoolean secondRow = new AtomicBoolean((pointer & 0x0100) != 0); + onClick.accept(clickData.shift, columnPointer, secondRow); + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + if (isAdvanced) { + if (columnPointer.get() >= 64) { + columnPointer.set(63); + } else if (columnPointer.get() < 0) { + columnPointer.set(0); + } + pointer = secondRow.get() ? columnPointer.get() + 0x100 : columnPointer.get(); + } + if (param > 9) { + param = 9; + } else if (param < -1) { + param = -1; + } + }) + .setPlayClickSound(false) + .setBackground( + overlay2 != null ? new IDrawable[] { GTUITextures.BUTTON_STANDARD, overlay1, overlay2 } + : new IDrawable[] { GTUITextures.BUTTON_STANDARD, overlay1 }) + .setSize(18, 18) + .setPos(xPos, yPos)); + } + + @FunctionalInterface + private interface OnClick { + + void accept(boolean shift, AtomicInteger columnPointer, AtomicBoolean secondRow); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchParamText.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchParamText.java new file mode 100644 index 0000000000..7efe4e1fd0 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchParamText.java @@ -0,0 +1,291 @@ +package tectech.thing.metaTileEntity.hatch; + +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import tectech.TecTech; +import tectech.thing.gui.TecTechUITextures; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 15.12.2016. + */ +public class MTEHatchParamText extends MTEHatchParam { + + public String value0s = ""; + public String value1s = ""; + + private String clientLocale = "en_US"; + + public MTEHatchParamText(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEHatchParamText(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEHatchParamText(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { + translateToLocalFormatted("tt.keyword.Parametrizer", clientLocale) + " " + + translateToLocalFormatted("tt.keyword.ID", clientLocale) + + ": " + + EnumChatFormatting.GREEN + + param, + translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 0S: " + + EnumChatFormatting.DARK_AQUA + + value0s, + translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 1S: " + + EnumChatFormatting.DARK_BLUE + + value1s, + translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 0D: " + EnumChatFormatting.AQUA + value0D, + translateToLocalFormatted("tt.keyword.Value", clientLocale) + " 1D: " + EnumChatFormatting.BLUE + value1D, + translateToLocalFormatted("tt.keyword.Input", clientLocale) + " 0D: " + EnumChatFormatting.GOLD + input0D, + translateToLocalFormatted("tt.keyword.Input", clientLocale) + " 1D: " + + EnumChatFormatting.YELLOW + + input1D, }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setString("eIeValue0S", value0s); + aNBT.setString("eIeValue1S", value1s); + aNBT.removeTag("ePointer"); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + value0s = aNBT.getString("eIeValue0S"); + value1s = aNBT.getString("eIeValue1S"); + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean isLiquidInput(ForgeDirection side) { + return false; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return false; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public String[] getDescription() { + return new String[] { CommonValues.TEC_MARK_GENERAL, + EnumChatFormatting.DARK_RED + "Deprecated; Now you can set parameter by clicking LED on multiblock GUI.", + EnumChatFormatting.DARK_RED + "If it doesn't work, try removing Parametrizer from multiblock structure.", }; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO_DARK) + .setSize(18, 18) + .setPos(148, 55)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE_PARAMETRIZER_TXT) + .setPos(7, 4) + .setSize(162, 72)); + + addChangeNumberButton(builder, -16, -4, 7, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE); + addChangeNumberButton(builder, -2, -1, 25, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL); + addChangeNumberButton(builder, 2, 1, 133, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL); + addChangeNumberButton(builder, 16, 4, 151, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE); + + builder.widget(new FakeSyncWidget.IntegerSyncer(() -> param, val -> param = val)) + .widget(new FakeSyncWidget.DoubleSyncer(() -> value0D, val -> value0D = val)) + .widget(new FakeSyncWidget.DoubleSyncer(() -> value1D, val -> value1D = val)) + .widget(new FakeSyncWidget.DoubleSyncer(() -> input0D, val -> input0D = val)) + .widget(new FakeSyncWidget.DoubleSyncer(() -> input1D, val -> input1D = val)); + // .widget(new FakeSyncWidget.StringSyncer(() -> value0s, val -> value0s = val)) + // .widget(new FakeSyncWidget.StringSyncer(() -> value1s, val -> value1s = val)); + + final String CIRCLED_0 = "\u24EA"; + final String CIRCLED_1 = "\u2460"; + final String ARROW_DOWN = "\u2b07"; + final String ARROW_UP = "\u2b06"; + builder.widget( + TextWidget.dynamicString(() -> "Parameters: " + param) + .setSynced(false) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 7)) + .widget( + new TextWidget(CIRCLED_0 + ARROW_UP).setDefaultColor(0x00bbff) + .setPos(10, 29)) + .widget( + new TextWidget(CIRCLED_1 + ARROW_UP).setDefaultColor(0x0077ff) + .setPos(10, 44)) + .widget( + TextWidget.dynamicString(() -> CIRCLED_0 + ARROW_DOWN + TTUtility.formatNumberExp(input0D)) + .setSynced(false) + .setDefaultColor(0x22ddff) + .setPos(10, 56)) + .widget( + TextWidget.dynamicString(() -> CIRCLED_1 + ARROW_DOWN + TTUtility.formatNumberExp(input1D)) + .setSynced(false) + .setDefaultColor(0x00ffff) + .setPos(10, 65)); + + addTextField(builder, true); + addTextField(builder, false); + } + + private void addChangeNumberButton(ModularWindow.Builder builder, int changeNumberShift, int changeNumber, int xPos, + IDrawable overlay) { + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + param += clickData.shift ? changeNumberShift : changeNumber; + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + if (param > 9) { + param = 9; + } else if (param < -1) { + param = -1; + } + }) + .setPlayClickSound(false) + .setBackground(GTUITextures.BUTTON_STANDARD, overlay, TecTechUITextures.OVERLAY_BUTTON_PARAMETRIZER_ID) + .setSize(18, 18) + .setPos(xPos, 4)); + } + + private void addTextField(ModularWindow.Builder builder, boolean isIndex0) { + TextFieldWidget widget = new TextFieldWidget(); + builder.widget( + widget.setGetter(() -> isIndex0 ? value0s : value1s) + .setSetter(str -> { + double val; + try { + val = parse(str); + } catch (Exception e) { + // This shouldn't happen as long as validator works + str = ""; + val = 0; + } + if (isIndex0) { + value0s = str; + value0D = val; + } else { + value1s = str; + value1D = val; + } + }) + .setValidator(str -> { + try { + parse(str); + return str; + } catch (Exception e) { + return widget.getLastText() + .size() > 0 ? widget.getLastText() + .get(0) : ""; + } + }) + .setTextColor(Color.WHITE.dark(1)) + .setTextAlignment(Alignment.CenterLeft) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .setPos(26, isIndex0 ? 26 : 41) + .setSize(138, 12)); + } + + private double parse(String str) { + double val; + if (str.contains("b")) { + String[] split = str.split("b"); + val = TTUtility.bitStringToInt(split[0].replaceAll("[^-]", "") + split[1].replaceAll("_", "")); + } else if (str.contains("x")) { + String[] split = str.split("x"); + val = TTUtility.hexStringToInt(split[0].replaceAll("[^-]", "") + split[1].replaceAll("_", "")); + } else { + val = TTUtility.stringToDouble(str); + } + return val; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchRack.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchRack.java new file mode 100644 index 0000000000..03e11cc4f1 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchRack.java @@ -0,0 +1,412 @@ +package tectech.thing.metaTileEntity.hatch; + +import static gregtech.api.enums.Mods.GraviSuite; +import static gregtech.api.enums.Mods.NewHorizonsCoreMod; +import static gregtech.api.enums.Mods.OpenComputers; +import static gregtech.api.util.GTModHandler.getModItem; +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import java.util.HashMap; +import java.util.Map; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import tectech.TecTech; +import tectech.loader.TecTechConfig; +import tectech.thing.gui.TecTechUITextures; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by Tec on 03.04.2017. + */ +public class MTEHatchRack extends MTEHatch implements IAddGregtechLogo, IAddUIWidgets { + + private static Textures.BlockIcons.CustomIcon EM_R; + private static Textures.BlockIcons.CustomIcon EM_R_ACTIVE; + public int heat = 0; + private float overClock = 1, overVolt = 1; + private static final Map componentBinds = new HashMap<>(); + + private String clientLocale = "en_US"; + + public MTEHatchRack(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 4, + new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.rack.desc.0"), + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.hatch.rack.desc.1") }); + TTUtility.setTier(aTier, this); + } + + public MTEHatchRack(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 4, aDescription, aTextures); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setInteger("eHeat", heat); + aNBT.setFloat("eOverClock", overClock); + aNBT.setFloat("eOverVolt", overVolt); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + heat = aNBT.getInteger("eHeat"); + overClock = aNBT.getFloat("eOverClock"); + overVolt = aNBT.getFloat("eOverVolt"); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + EM_R_ACTIVE = new Textures.BlockIcons.CustomIcon("iconsets/EM_RACK_ACTIVE"); + EM_R = new Textures.BlockIcons.CustomIcon("iconsets/EM_RACK"); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(EM_R_ACTIVE) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(EM_R) }; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchRack(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return true; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (aBaseMetaTileEntity.isActive() || heat > 2000) { + return false; + } + return side == aBaseMetaTileEntity.getFrontFacing(); + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + if (aBaseMetaTileEntity.isActive() || heat > 2000) { + return false; + } + return side == aBaseMetaTileEntity.getFrontFacing(); + } + + @Override + public int getSizeInventory() { // HACK TO NOT DROP CONTENTS!!! + return heat > 2000 || getBaseMetaTileEntity().isActive() ? 0 : mInventory.length; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + // if(aBaseMetaTileEntity.isActive()) + // aPlayer.addChatComponentMessage(new ChatComponentText("It is still active...")); + // else if(heat>0) + // aPlayer.addChatComponentMessage(new ChatComponentText("It is still warm...")); + // else + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + private int getComputationPower(float overclock, float overvolt, boolean tickingComponents) { + float computation = 0, heat = 0; + for (int i = 0; i < mInventory.length; i++) { + if (mInventory[i] == null || mInventory[i].stackSize != 1) { + continue; + } + RackComponent comp = componentBinds.get(TTUtility.getUniqueIdentifier(mInventory[i])); + if (comp == null) { + continue; + } + if (tickingComponents) { + if (this.heat > comp.maxHeat) { + mInventory[i] = null; + continue; + } else if (comp.subZero || this.heat >= 0) { + heat += (1f + comp.coolConstant * this.heat / 100000f) + * (comp.heatConstant > 0 ? comp.heatConstant * overclock * overvolt * overvolt : -10f); + + if (overvolt > TecTech.RANDOM.nextFloat()) { + computation += comp.computation * (1 + overclock * overclock) + / (1 + (overclock - overvolt) * (overclock - overvolt)); + } + } + } else { + computation += comp.computation * (1 + overclock * overclock) + / (1 + (overclock - overvolt) * (overclock - overvolt)); // For getInfoData() + } + } + if (tickingComponents) { + this.heat += Math.ceil(heat); + } + return (int) Math.floor(computation); + } + + public int tickComponents(float oc, float ov) { + overClock = oc; + overVolt = ov; + return getComputationPower(overClock, overVolt, true); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (aTick % 20 == CommonValues.MULTI_CHECK_AT) { + if (heat > 0) { + float heatC = 0; + for (int i = 0; i < mInventory.length; i++) { + if (mInventory[i] == null || mInventory[i].stackSize != 1) { + continue; + } + RackComponent comp = componentBinds.get(TTUtility.getUniqueIdentifier(mInventory[i])); + if (comp == null) { + continue; + } + if (heat - 20 > comp.maxHeat) { + mInventory[i] = null; + } else if (comp.heatConstant < 0) { + heatC += comp.heatConstant * (heat / 10000f); + } + } + heat += Math.max(-heat, Math.ceil(heatC)); + heat -= Math.max(heat / 1000, 20); + } + } + } + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { + translateToLocalFormatted("tt.keyphrase.Base_computation", clientLocale) + ": " + + EnumChatFormatting.AQUA + + getComputationPower(overClock, overVolt, false), + translateToLocalFormatted("tt.keyphrase.Heat_Accumulated", clientLocale) + ": " + + EnumChatFormatting.RED + + heat + + EnumChatFormatting.RESET }; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO) + .setSize(18, 18) + .setPos(151, 63)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_HEAT_SINK) + .setPos(46, 17) + .setSize(84, 60)); + + Pos2d[] positions = new Pos2d[] { new Pos2d(68, 27), new Pos2d(90, 27), new Pos2d(68, 49), new Pos2d(90, 49), }; + for (int i = 0; i < positions.length; i++) { + builder.widget(new SlotWidget(new BaseSlot(inventoryHandler, i) { + + @Override + public int getSlotStackLimit() { + return 1; + } + + @Override + public boolean isEnabled() { + return !getBaseMetaTileEntity().isActive() && heat <= 0; + } + }).setBackground(getGUITextureSet().getItemSlot(), TecTechUITextures.OVERLAY_SLOT_RACK) + .setPos(positions[i])); + + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BUTTON_STANDARD_LIGHT_16x16) + .setPos(152, 24) + .setSize(16, 16)) + .widget( + new DrawableWidget() + .setDrawable( + () -> getBaseMetaTileEntity().isActive() ? TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON + : TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_DISABLED) + .setPos(152, 24) + .setSize(16, 16)) + .widget( + new FakeSyncWidget.BooleanSyncer( + () -> getBaseMetaTileEntity().isActive(), + val -> getBaseMetaTileEntity().setActive(val))); + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BUTTON_STANDARD_LIGHT_16x16) + .setPos(152, 41) + .setSize(16, 16)) + .widget( + new DrawableWidget() + .setDrawable( + () -> heat > 0 ? TecTechUITextures.OVERLAY_BUTTON_HEAT_ON + : TecTechUITextures.OVERLAY_BUTTON_HEAT_OFF) + .setPos(152, 41) + .setSize(16, 16)) + .widget(new FakeSyncWidget.IntegerSyncer(() -> heat, val -> heat = val)); + } + } + + public static void run() { // 20k heat cap max! + new RackComponent(ItemList.Circuit_Crystalprocessor.get(1), 60, 56, -1f, 2000, true); // IV + new RackComponent(ItemList.Circuit_Crystalcomputer.get(1), 80, 54, -1f, 2000, true); // LuV + new RackComponent(ItemList.Circuit_Ultimatecrystalcomputer.get(1), 100, 52, -1f, 2000, true); // ZPM + new RackComponent(ItemList.Circuit_Crystalmainframe.get(1), 120, 50, -1f, 2000, true); // UV + + new RackComponent(ItemList.Circuit_Neuroprocessor.get(1), 160, 46, -1f, 4000, true); // LuV + new RackComponent(ItemList.Circuit_Wetwarecomputer.get(1), 180, 44, -1f, 4000, true); // ZPM + new RackComponent(ItemList.Circuit_Wetwaresupercomputer.get(1), 200, 42, -1f, 4000, true); // UV + new RackComponent(ItemList.Circuit_Wetwaremainframe.get(1), 220, 40, -1f, 4000, true); // UHV + + new RackComponent("IC2:ic2.reactorVent", 0, -1, 40f, 2000, false); // Heat Vent + new RackComponent("IC2:ic2.reactorVentCore", 0, -1, 80f, 4000, false); // Reactor Heat Vent + new RackComponent("IC2:ic2.reactorVentGold", 0, -1, 120f, 6000, false); // Overclocked Heat Vent + new RackComponent("IC2:ic2.reactorVentDiamond", 0, -1, 160f, 8000, false); // Advanced Heat Vent + + if (NewHorizonsCoreMod.isModLoaded()) { + // GTNH-GT5u circuits (these components causes crashes when used with the original GT5u) + new RackComponent(ItemList.Circuit_Bioprocessor.get(1), 200, 36, -1f, 6000, true); // ZPM + new RackComponent(ItemList.Circuit_Biowarecomputer.get(1), 220, 34, -1f, 6000, true); // UV + new RackComponent(ItemList.Circuit_Biowaresupercomputer.get(1), 240, 32, -1f, 6000, true); // UHV + new RackComponent(ItemList.Circuit_Biomainframe.get(1), 260, 30, -1f, 6000, true); // UEV + + new RackComponent(ItemList.Circuit_OpticalProcessor.get(1), 200, 26, -1f, 8000, true); // UV + new RackComponent(ItemList.Circuit_OpticalAssembly.get(1), 220, 24, -1f, 8000, true); // UHV + new RackComponent(ItemList.Circuit_OpticalComputer.get(1), 240, 22, -1f, 8000, true); // UEV + new RackComponent(ItemList.Circuit_OpticalMainframe.get(1), 260, 20, -1f, 8000, true); // UIV + + new RackComponent("dreamcraft:item.PikoCircuit", 260, 12, -1f, 9500, true); // UMV + new RackComponent("dreamcraft:item.QuantumCircuit", 320, 10, -1f, 10000, true); // UXV + } + + if (OpenComputers.isModLoaded()) { + new RackComponent("OpenComputers:item.oc.CPU2", 80, 46, -1f, 2000, true); // CPU T3 + new RackComponent("OpenComputers:item.oc.GraphicsCard2", 100, 44, -1f, 2000, true); // GPU T3 + new RackComponent("OpenComputers:item.oc.APU1", 120, 42, -1f, 2000, true); // APU T3 + new RackComponent("OpenComputers:item.oc.APU2", 240, 40, -1f, 2000, true); // APU Creative + } + + if (GraviSuite.isModLoaded()) { + new RackComponent(getModItem(GraviSuite.ID, "itemSimpleItem", 1, 2), 0, -1, 200f, 10000, false); // CC + } + } + + public static class RackComponent implements Comparable { + + private final String unlocalizedName; + private final float heatConstant, coolConstant, computation, maxHeat; + private final boolean subZero; + + RackComponent(ItemStack is, float computation, float heatConstant, float coolConstant, float maxHeat, + boolean subZero) { + this(TTUtility.getUniqueIdentifier(is), computation, heatConstant, coolConstant, maxHeat, subZero); + } + + RackComponent(String is, float computation, float heatConstant, float coolConstant, float maxHeat, + boolean subZero) { + unlocalizedName = is; + this.computation = computation; + this.heatConstant = heatConstant; + this.coolConstant = coolConstant; + this.maxHeat = maxHeat; + this.subZero = subZero; + componentBinds.put(unlocalizedName, this); + if (TecTechConfig.DEBUG_MODE) { + TecTech.LOGGER.info("Component registered: " + unlocalizedName); + } + } + + @Override + public int compareTo(RackComponent o) { + return unlocalizedName.compareTo(o.unlocalizedName); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof RackComponent) { + return compareTo((RackComponent) obj) == 0; + } + return false; + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchUncertainty.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchUncertainty.java new file mode 100644 index 0000000000..f8c2587269 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchUncertainty.java @@ -0,0 +1,467 @@ +package tectech.thing.metaTileEntity.hatch; + +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; +import static org.lwjgl.opengl.GL11.GL_BLEND; +import static org.lwjgl.opengl.GL11.GL_ONE_MINUS_SRC_ALPHA; +import static org.lwjgl.opengl.GL11.GL_SRC_ALPHA; +import static org.lwjgl.opengl.GL11.glBlendFunc; +import static org.lwjgl.opengl.GL11.glColor4f; +import static org.lwjgl.opengl.GL11.glDisable; +import static org.lwjgl.opengl.GL11.glEnable; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import com.gtnewhorizons.modularui.api.GlStateManager; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import tectech.TecTech; +import tectech.thing.gui.TecTechUITextures; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 15.12.2016. + */ +public class MTEHatchUncertainty extends MTEHatch implements IAddGregtechLogo, IAddUIWidgets { + + private static Textures.BlockIcons.CustomIcon ScreenON; + private static Textures.BlockIcons.CustomIcon ScreenOFF; + public short[] matrix = new short[] { 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, 500, + 500 }; + public byte selection = -1, mode = 0, status = -128; // all 8 bits set + + private String clientLocale = "en_US"; + + public MTEHatchUncertainty(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, 0, ""); + TTUtility.setTier(aTier, this); + regenerate(); + } + + public MTEHatchUncertainty(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + regenerate(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/UC"); + ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/UC_ACTIVE"); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(ScreenON) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, new GTRenderedTexture(ScreenOFF) }; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && (aTick & 15) == 0) { + if (mode == 0) { + aBaseMetaTileEntity.setActive(false); + status = -128; + } else { + aBaseMetaTileEntity.setActive(true); + shift(); + compute(); + } + } + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEHatchUncertainty(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { + translateToLocalFormatted("tt.keyword.Status", clientLocale) + ": " + EnumChatFormatting.GOLD + status }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setByte("mSel", selection); + aNBT.setByte("mMode", mode); + aNBT.setByte("mStatus", status); + NBTTagCompound mat = new NBTTagCompound(); + for (int i = 0; i < 16; i++) { + mat.setShort(Integer.toString(i), matrix[i]); + } + aNBT.setTag("mMat", mat); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + selection = aNBT.getByte("mSel"); + mode = aNBT.getByte("mMode"); + status = aNBT.getByte("mStatus"); + NBTTagCompound mat = aNBT.getCompoundTag("mMat"); + for (int i = 0; i < 16; i++) { + matrix[i] = mat.getShort(Integer.toString(i)); + } + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public boolean isLiquidInput(ForgeDirection side) { + return false; + } + + @Override + public boolean isFluidInputAllowed(FluidStack aFluid) { + return false; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public String[] getDescription() { + return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.hatch.certain.desc.0"), // Feeling + // certain, + // or + // not? + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.hatch.certain.desc.1") // Schrödinger equation in a box + }; + } + + private boolean balanceCheck(int sideLenY, short... masses) { + float inequality = 0; + for (int i = 0; i < masses.length >> 1; i++) { + inequality += Math.abs(masses[i] - masses[masses.length - i - 1]); + } + return inequality < masses.length << 7; + } + + public void regenerate() { + for (int i = 0; i < matrix.length; i++) { + matrix[i] = (short) TecTech.RANDOM.nextInt(1000); + } + } + + public byte compute() { + int result = 0; + switch (mode) { + case 1: // ooo oxo ooo + result = balanceCheck(4, matrix) ? 0 : 1; + break; + case 2: // ooo xox ooo + result += balanceCheck( + 4, + matrix[0], + matrix[4], + matrix[1], + matrix[5], + matrix[2], + matrix[6], + matrix[3], + matrix[7]) ? 0 : 1; + result += balanceCheck( + 4, + matrix[8], + matrix[12], + matrix[9], + matrix[13], + matrix[10], + matrix[14], + matrix[11], + matrix[15]) ? 0 : 2; + break; + case 3: // oxo xox oxo + result += balanceCheck( + 2, + matrix[0], + matrix[4], + matrix[8], + matrix[12], + matrix[1], + matrix[5], + matrix[9], + matrix[13]) ? 0 : 1; + result += balanceCheck( + 4, + matrix[0], + matrix[4], + matrix[1], + matrix[5], + matrix[2], + matrix[6], + matrix[3], + matrix[7]) ? 0 : 2; + result += balanceCheck( + 4, + matrix[8], + matrix[12], + matrix[9], + matrix[13], + matrix[10], + matrix[14], + matrix[11], + matrix[15]) ? 0 : 4; + result += balanceCheck( + 2, + matrix[2], + matrix[6], + matrix[10], + matrix[14], + matrix[3], + matrix[7], + matrix[11], + matrix[15]) ? 0 : 8; + break; + case 4: // xox ooo xox + result += balanceCheck(2, matrix[0], matrix[4], matrix[1], matrix[5]) ? 0 : 1; + result += balanceCheck(2, matrix[8], matrix[12], matrix[9], matrix[13]) ? 0 : 2; + result += balanceCheck(2, matrix[2], matrix[6], matrix[3], matrix[7]) ? 0 : 4; + result += balanceCheck(2, matrix[10], matrix[14], matrix[11], matrix[15]) ? 0 : 8; + break; + case 5: // xox oxo xox + result += balanceCheck(2, matrix[0], matrix[4], matrix[1], matrix[5]) ? 0 : 1; + result += balanceCheck(2, matrix[8], matrix[12], matrix[9], matrix[13]) ? 0 : 2; + result += balanceCheck(4, matrix) ? 0 : 4; + result += balanceCheck(2, matrix[2], matrix[6], matrix[3], matrix[7]) ? 0 : 8; + result += balanceCheck(2, matrix[10], matrix[14], matrix[11], matrix[15]) ? 0 : 16; + break; + } + return status = (byte) result; + } + + private void shift() { + int i = TecTech.RANDOM.nextInt(16), j = TecTech.RANDOM.nextInt(128); + matrix[i] += ((matrix[i] & 1) == 0 ? 2 : -2) * j >> 5; + matrix[i] += j == 0 ? 1 : 0; + if (matrix[i] < 0) { + matrix[i] = 0; + } else if (matrix[i] > 1000) { + matrix[i] = 999; + } + } + + public byte update(int newMode) { + if (newMode == mode) { + return status; + } + if (newMode < 0 || newMode > 5) { + newMode = 0; + } + mode = (byte) newMode; + regenerate(); + compute(); + return status; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO_DARK) + .setSize(18, 18) + .setPos(112, 55)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + final boolean isAdvanced = mTier > 7; + + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE) + .setPos(43, 4) + .setSize(90, 72)) + .widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_UNCERTAINTY_MONITOR) + .setPos(46, 27) + .setSize(46, 46)); + + int[] xPositions = new int[] { 7, 25, 133, 151 }; + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + final int index = i * 4 + j; + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + if (selection == -1) { + selection = (byte) index; + } else { + short temp = matrix[selection]; + matrix[selection] = matrix[index]; + matrix[index] = temp; + selection = -1; + } + compute(); + }) + .setPlayClickSound(false) + .setBackground(GTUITextures.BUTTON_STANDARD, TecTechUITextures.OVERLAY_BUTTON_UNCERTAINTY[index]) + .setPos(xPositions[i], 4 + j * 18) + .setSize(18, 18)) + .widget(new FakeSyncWidget.ShortSyncer(() -> matrix[index], val -> matrix[index] = val)); + } + } + builder.widget(new FakeSyncWidget.ByteSyncer(() -> selection, val -> selection = val)) + .widget(new FakeSyncWidget.ByteSyncer(() -> mode, val -> mode = val)) + .widget(new FakeSyncWidget.ByteSyncer(() -> status, val -> status = val)); + + builder.widget( + new TextWidget().setStringSupplier(() -> "Status: " + (status == 0 ? "OK" : "NG")) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 7)); + + for (int i = 0; i < 9; i++) { + final int index = i; + builder.widget(new DrawableWidget().setDrawable(() -> { + UITexture valid = TecTechUITextures.PICTURE_UNCERTAINTY_VALID[index]; + UITexture invalid = TecTechUITextures.PICTURE_UNCERTAINTY_INVALID[index]; + switch (mode) { + case 1: // ooo oxo ooo + if (index == 4) return status == 0 ? valid : invalid; + break; + case 2: // ooo xox ooo + if (index == 3) return (status & 1) == 0 ? valid : invalid; + if (index == 5) return (status & 2) == 0 ? valid : invalid; + break; + case 3: // oxo xox oxo + if (index == 1) return (status & 1) == 0 ? valid : invalid; + if (index == 3) return (status & 2) == 0 ? valid : invalid; + if (index == 5) return (status & 4) == 0 ? valid : invalid; + if (index == 7) return (status & 8) == 0 ? valid : invalid; + break; + case 4: // xox ooo xox + if (index == 0) return (status & 1) == 0 ? valid : invalid; + if (index == 2) return (status & 2) == 0 ? valid : invalid; + if (index == 6) return (status & 4) == 0 ? valid : invalid; + if (index == 8) return (status & 8) == 0 ? valid : invalid; + break; + case 5: // xox oxo xox + if (index == 0) return (status & 1) == 0 ? valid : invalid; + if (index == 2) return (status & 2) == 0 ? valid : invalid; + if (index == 4) return (status & 4) == 0 ? valid : invalid; + if (index == 6) return (status & 8) == 0 ? valid : invalid; + if (index == 8) return (status & 16) == 0 ? valid : invalid; + break; + } + return null; + }) + .setPos(55 + (index % 3) * 12, 36 + (index / 3) * 12) + .setSize(4, 4)); + } + + for (int i = 0; i < 16; i++) { + final int index = i; + builder.widget(new DrawableWidget() { + + @Override + public void draw(float partialTicks) { + if (isAdvanced) { + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + glColor4f(1f, 1f, 1f, (float) matrix[index] / 1000f); + + // super.draw but without disabling blend + GlStateManager.pushMatrix(); + getDrawable().draw(Pos2d.ZERO, getSize(), partialTicks); + GlStateManager.popMatrix(); + + glDisable(GL_BLEND); + glColor4f(1f, 1f, 1f, 1f); + } else { + if (TecTech.RANDOM.nextInt(1000) < matrix[index]) { + super.draw(partialTicks); + } + } + } + }.setDrawable(TecTechUITextures.PICTURE_UNCERTAINTY_INDICATOR) + .setPos(47 + (i / 4) * 12, 28 + (i % 4) * 12) + .setSize(8, 8)) + .widget( + new DrawableWidget() + .setDrawable(() -> selection == index ? TecTechUITextures.PICTURE_UNCERTAINTY_SELECTED : null) + .setPos(46 + (i / 4) * 12, 27 + (i % 4) * 12) + .setSize(10, 10)); + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessComputationInput.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessComputationInput.java new file mode 100644 index 0000000000..94f8181566 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessComputationInput.java @@ -0,0 +1,132 @@ +package tectech.thing.metaTileEntity.hatch; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; + +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.common.WirelessComputationPacket; +import tectech.thing.gui.TecTechUITextures; + +public class MTEHatchWirelessComputationInput extends MTEHatchDataInput implements IAddGregtechLogo, IAddUIWidgets { + + public long requiredComputation = 10000; + + private String clientLocale = "en_US"; + + public MTEHatchWirelessComputationInput(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + } + + public MTEHatchWirelessComputationInput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchWirelessComputationInput(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + if (!aPlayer.isUsingItem()) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + } + return super.onRightclick(aBaseMetaTileEntity, aPlayer); + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean canConnectData(ForgeDirection side) { + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && q == null) { + q = WirelessComputationPacket.downloadData(aBaseMetaTileEntity.getOwnerUuid(), requiredComputation, aTick); + } + + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO) + .setSize(18, 18) + .setPos(151, 63)); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + requiredComputation = aNBT.getLong("requiredComputation"); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setLong("requiredComputation", requiredComputation); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + TextWidget.localised("tt.wirelessInputData.config.text") + .setPos(20, 12) + .setSize(140, 14)) + .widget( + new TextFieldWidget().setSetterInt(val -> requiredComputation = val) + .setGetterLong(() -> requiredComputation) + .setNumbers(1, Integer.MAX_VALUE) + .setOnScrollNumbers(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(70, 18) + .setPos(54, 36) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)); + } + + private static String[] tooltips; + + @Override + public String[] getDescription() { + if (tooltips == null) { + tooltips = new String[] { "Wireless Computation Data Input for Multiblocks" }; + } + return tooltips; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessComputationOutput.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessComputationOutput.java new file mode 100644 index 0000000000..8495f95e6f --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessComputationOutput.java @@ -0,0 +1,60 @@ +package tectech.thing.metaTileEntity.hatch; + +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.common.WirelessComputationPacket; + +public class MTEHatchWirelessComputationOutput extends MTEHatchDataOutput { + + public MTEHatchWirelessComputationOutput(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + + } + + public MTEHatchWirelessComputationOutput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchWirelessComputationOutput(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean canConnectData(ForgeDirection side) { + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && q != null) { + WirelessComputationPacket.uploadData(aBaseMetaTileEntity.getOwnerUuid(), q.getContent(), aTick); + q = null; + } + } + + private static String[] tooltips; + + @Override + public String[] getDescription() { + if (tooltips == null) { + tooltips = new String[] { "Wireless Computation Output for Multiblocks" }; + } + return tooltips; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessDataItemsInput.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessDataItemsInput.java new file mode 100644 index 0000000000..e7d604328a --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessDataItemsInput.java @@ -0,0 +1,139 @@ +package tectech.thing.metaTileEntity.hatch; + +import static gregtech.api.enums.Dyes.MACHINE_METAL; +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; +import static tectech.thing.metaTileEntity.hatch.MTEHatchDataConnector.EM_D_ACTIVE; +import static tectech.thing.metaTileEntity.hatch.MTEHatchDataConnector.EM_D_CONN; +import static tectech.thing.metaTileEntity.hatch.MTEHatchDataConnector.EM_D_SIDES; + +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchDataAccess; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.common.WirelessDataStore; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +public class MTEHatchWirelessDataItemsInput extends MTEHatchDataAccess { + + private String clientLocale = "en_US"; + + public MTEHatchWirelessDataItemsInput(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier); + TTUtility.setTier(aTier, this); + } + + public MTEHatchWirelessDataItemsInput(String aName, int aTier, String aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + public MTEHatchWirelessDataItemsInput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchWirelessDataItemsInput(this.mName, this.mTier, mDescriptionArray, this.mTextures); + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + EM_D_ACTIVE, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(EM_D_CONN) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + EM_D_SIDES, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(EM_D_CONN) }; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isClientSide()) { + return true; + } + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + return true; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public String[] getDescription() { + return new String[] { CommonValues.TEC_MARK_EM, + translateToLocal("gt.blockmachines.hatch.datainasswireless.desc.0"), + translateToLocal("gt.blockmachines.hatch.datainasswireless.desc.1"), }; + } + + @Override + public List getInventoryItems(Predicate filter) { + WirelessDataStore wirelessData = WirelessDataStore + .getWirelessDataSticks(getBaseMetaTileEntity().getOwnerUuid()); + return wirelessData.downloadData() + .stream() + .filter(stack -> stack != null && filter.test(stack)) + .collect(Collectors.toList()); + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return new String[] { translateToLocalFormatted("tt.keyphrase.Content_Stack_Count", clientLocale) + ": " + + getInventoryItems(_stack -> true).size() }; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessDataItemsOutput.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessDataItemsOutput.java new file mode 100644 index 0000000000..2765598475 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessDataItemsOutput.java @@ -0,0 +1,142 @@ +package tectech.thing.metaTileEntity.hatch; + +import static gregtech.api.enums.Dyes.MACHINE_METAL; +import static net.minecraft.util.StatCollector.translateToLocal; +import static tectech.thing.metaTileEntity.hatch.MTEHatchDataConnector.EM_D_ACTIVE; +import static tectech.thing.metaTileEntity.hatch.MTEHatchDataConnector.EM_D_CONN; +import static tectech.thing.metaTileEntity.hatch.MTEHatchDataConnector.EM_D_SIDES; + +import java.util.Arrays; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.common.WirelessDataStore; +import tectech.mechanics.dataTransport.InventoryDataPacket; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +public class MTEHatchWirelessDataItemsOutput extends MTEHatch { + + public InventoryDataPacket dataPacket = null; + + public boolean uploadedSinceReset = false; + + public MTEHatchWirelessDataItemsOutput(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { CommonValues.TEC_MARK_EM, + translateToLocal("gt.blockmachines.hatch.wirelessdataoutass.desc.0"), + translateToLocal("gt.blockmachines.hatch.wirelessdataoutass.desc.1"), }); + TTUtility.setTier(aTier, this); + } + + public MTEHatchWirelessDataItemsOutput(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchWirelessDataItemsOutput(this.mName, this.mTier, this.mDescriptionArray, this.mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + if (dataPacket != null) { + aNBT.setTag("eDATA", dataPacket.toNbt()); + } + aNBT.setBoolean("uploadedSinceReset", uploadedSinceReset); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("eDATA")) { + dataPacket = new InventoryDataPacket(aNBT.getCompoundTag("eDATA")); + } + if (aNBT.hasKey("uploadedSinceReset")) { + uploadedSinceReset = aNBT.getBoolean("uploadedSinceReset"); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + // Upload data packet and mark it as uploaded, so it will not be uploaded again + // until the data bank resets the wireless network + if (dataPacket != null && !uploadedSinceReset) { + WirelessDataStore wirelessDataStore = WirelessDataStore + .getWirelessDataSticks(getBaseMetaTileEntity().getOwnerUuid()); + wirelessDataStore.uploadData(Arrays.asList(dataPacket.getContent())); + uploadedSinceReset = true; + } + } + } + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + EM_D_ACTIVE, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(EM_D_CONN) }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + return new ITexture[] { aBaseTexture, + new GTRenderedTexture( + EM_D_SIDES, + Dyes.getModulation(getBaseMetaTileEntity().getColorization(), MACHINE_METAL.getRGBA())), + new GTRenderedTexture(EM_D_CONN) }; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessMulti.java b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessMulti.java new file mode 100644 index 0000000000..09d76c29a1 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/hatch/MTEHatchWirelessMulti.java @@ -0,0 +1,209 @@ +package tectech.thing.metaTileEntity.hatch; + +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.BLUE; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.BOLD; +import static com.gtnewhorizon.gtnhlib.util.AnimatedTooltipHandler.GRAY; +import static gregtech.api.enums.GTValues.AuthorColen; +import static gregtech.api.enums.GTValues.V; +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static gregtech.common.misc.WirelessNetworkManager.strongCheckOrAddUser; +import static java.lang.Long.min; + +import java.math.BigInteger; +import java.util.UUID; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.common.util.ForgeDirection; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.interfaces.tileentity.IWirelessEnergyHatchInformation; +import gregtech.api.metatileentity.MetaTileEntity; +import tectech.thing.metaTileEntity.Textures; +import tectech.util.TTUtility; + +public class MTEHatchWirelessMulti extends MTEHatchEnergyMulti implements IWirelessEnergyHatchInformation { + + private final BigInteger eu_transferred_per_operation = BigInteger + .valueOf(Amperes * V[mTier] * ticks_between_energy_addition); + private final long eu_transferred_per_operation_long = eu_transferred_per_operation.longValue(); + + private UUID owner_uuid; + + public MTEHatchWirelessMulti(int aID, String aName, String aNameRegional, int aTier, int aAmp) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { GRAY + "Stores energy globally in a network, up to 2^(2^31) EU.", + GRAY + "Does not connect to wires. This block withdraws EU from the network.", + AuthorColen + GRAY + BOLD + " & " + BLUE + BOLD + "Cloud" }, + aAmp); + TTUtility.setTier(aTier, this); + } + + public MTEHatchWirelessMulti(String aName, int aTier, int aAmp, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aAmp, aDescription, aTextures); + } + + private ITexture[] TEXTURE_OVERLAY; + + @Override + public ITexture[] getTexturesActive(ITexture aBaseTexture) { + switch (Amperes) { + case 4: + TEXTURE_OVERLAY = Textures.OVERLAYS_ENERGY_IN_WIRELESS_MULTI_4A; + break; + case 16: + TEXTURE_OVERLAY = Textures.OVERLAYS_ENERGY_IN_WIRELESS_MULTI_16A; + break; + case 64: + TEXTURE_OVERLAY = Textures.OVERLAYS_ENERGY_IN_WIRELESS_MULTI_64A; + break; + default: + TEXTURE_OVERLAY = Textures.OVERLAYS_ENERGY_IN_WIRELESS_LASER; + break; + } + return new ITexture[] { aBaseTexture, TEXTURE_OVERLAY[mTier] }; + } + + @Override + public ITexture[] getTexturesInactive(ITexture aBaseTexture) { + switch (Amperes) { + case 4: + TEXTURE_OVERLAY = Textures.OVERLAYS_ENERGY_IN_WIRELESS_MULTI_4A; + break; + case 16: + TEXTURE_OVERLAY = Textures.OVERLAYS_ENERGY_IN_WIRELESS_MULTI_16A; + break; + case 64: + TEXTURE_OVERLAY = Textures.OVERLAYS_ENERGY_IN_WIRELESS_MULTI_64A; + break; + default: + TEXTURE_OVERLAY = Textures.OVERLAYS_ENERGY_IN_WIRELESS_LASER; + break; + } + return new ITexture[] { aBaseTexture, TEXTURE_OVERLAY[mTier] }; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isEnetInput() { + return false; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isValidSlot(int aIndex) { + return false; + } + + @Override + public long getMinimumStoredEU() { + return Amperes * V[mTier]; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxEUStore() { + return totalStorage(V[mTier]) * Amperes / 2; + } + + @Override + public long maxAmperesIn() { + return Amperes; + } + + @Override + public long maxWorkingAmperesIn() { + return Amperes; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEHatchWirelessMulti(mName, mTier, Amperes, mDescriptionArray, mTextures); + } + + @Override + public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, ForgeDirection side, + ItemStack aStack) { + return false; + } + + @Override + public ConnectionType getConnectionType() { + return ConnectionType.WIRELESS; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + if (aBaseMetaTileEntity.isServerSide()) { + // On first tick find the player name and attempt to add them to the map. + + // UUID and username of the owner. + owner_uuid = aBaseMetaTileEntity.getOwnerUuid(); + + strongCheckOrAddUser(owner_uuid); + + tryFetchingEnergy(); + } + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + + super.onPreTick(aBaseMetaTileEntity, aTick); + + if (aBaseMetaTileEntity.isServerSide()) { + + // This is set up in a way to be as optimised as possible. If a user has a relatively plentiful energy + // network + // it should make no difference to them. Minimising the number of operations on BigInteger is essential. + + // Every ticks_between_energy_addition add eu_transferred_per_operation to internal EU storage from network. + if (aTick % ticks_between_energy_addition == 0L) { + tryFetchingEnergy(); + } + } + } + + private void tryFetchingEnergy() { + long currentEU = getBaseMetaTileEntity().getStoredEU(); + long maxEU = maxEUStore(); + long euToTransfer = min(maxEU - currentEU, eu_transferred_per_operation_long); + if (euToTransfer <= 0) return; // nothing to transfer + if (!addEUToGlobalEnergyMap(owner_uuid, -euToTransfer)) return; + setEUVar(currentEU + euToTransfer); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java b/src/main/java/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java new file mode 100644 index 0000000000..56aabb28ec --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/ForgeOfGodsRingsStructureString.java @@ -0,0 +1,5105 @@ +package tectech.thing.metaTileEntity.multi; + +import static tectech.util.TTUtility.replaceLetters; + +public abstract class ForgeOfGodsRingsStructureString { + + public static final String[][] SECOND_RING = { { + + " BBBBBBB ", + " BBCCCCCCCBB ", + " BBCC CCBB ", + " BBEC CEBB ", + " BEEC CEEB ", + " EEC CEE ", + " EC CE ", + " EC CCCCC CE ", + " C C C C ", + " C C C C ", + " C C C C ", + " C C C C ", + " C C C C ", + " C C C C ", + " C C C C ", + " EC CCCCC CE ", + " EC CE ", + " EEC CEE ", + " BEEC CEEB ", + " BBEC CEBB ", + " BBCC CCBB ", + " BBCCCCCCCBB ", + " BBBBBBB " }, + { " BBBBBBB ", + " BBCCCCCCCBB ", + " BBCC D CCBB ", + " BBEC D CEBB ", + " BBBEEC DD CEEBBB ", + " EEEEC D CEEEE ", + " EEEC DD CEEE ", + " EEEC CCCCC CEEE ", + " EEC CHHHHHC CEE ", + " EEC CHHHHHHHC CEE ", + " EEC CHHHHHHHC CEE ", + " EEC CHHHHHHHC CEE ", + " EEC CHHHHHHHC CEE ", + " EEC CHHHHHHHC CEE ", + " EEC CHHHHHC CEE ", + " EEEC CCCCC CEEE ", + " EEEC DD CEEE ", + " EEEEC D CEEEE ", + " BBBEEC DD CEEBBB ", + " BBEC D CEBB ", + " BBCC D CCBB ", + " BBCCCCCCCBB ", + " BBBBBBB " }, + { " BBBBBBB ", + " BBCCCCCCCBB ", + " BBCC CCBB ", + " BBEC CEBB ", + " BBBEEC CEEBBB ", + " BBBBEEEEC CEEEEBBBB ", + " EEEEEEEC CEEEEEEE ", + " EEEEEEEC CCCCC CEEEEEEE ", + " EEEEEEC C C CEEEEEE ", + " EEEEEEC C C CEEEEEE ", + " EEEEEEC C C CEEEEEE ", + " EEEEEEC C C CEEEEEE ", + " EEEEEEC C C CEEEEEE ", + " EEEEEEC C C CEEEEEE ", + " EEEEEEC C C CEEEEEE ", + " EEEEEEEC CCCCC CEEEEEEE ", + " EEEEEEEC CEEEEEEE ", + " BBBBEEEEC CEEEEBBBB ", + " BBBEEC CEEBBB ", + " BBEC CEBB ", + " BBCC CCBB ", + " BBCCCCCCCBB ", + " BBBBBBB " }, + { " ", + " ", + " ", + " ", + " BBB BBB ", + " BBBBEEE EEEBBBB ", + " BBBEEEEEEE EEEEEEEBBB ", + " EEEEEEEEEE EEEEEEEEEE ", + " EEEEEEEEEE EEEEEEEEEE ", + " EEEEEEEKKK KKKEEEEEEE ", + " EEEEEEEKKK KKKEEEEEEE ", + " EEEEEEEKKK KKKEEEEEEE ", + " EEEEEEEKKK KKKEEEEEEE ", + " EEEEEEEKKK KKKEEEEEEE ", + " EEEEEEEEEE EEEEEEEEEE ", + " EEEEEEEEEE EEEEEEEEEE ", + " BBBEEEEEEE EEEEEEEBBB ", + " BBBBEEE EEEBBBB ", + " BBB BBB ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " BBBBBEEEE EEEEBBBBB ", + " EEEEEEEEE EEEEEEEEE ", + " EEEEEEEEE EEEEEEEEE ", + " EEEEEKKKK KKKKEEEEE ", + " EEEEEKKKK KKKKEEEEE ", + " EEEEEKKKK KKKKEEEEE ", + " EEEEEKKKK KKKKEEEEE ", + " EEEEEKKKK KKKKEEEEE ", + " EEEEEEEEE EEEEEEEEE ", + " EEEEEEEEE EEEEEEEEE ", + " BBBBBEEEE EEEEBBBBB ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " BBBEEEEE EEEEEBBB ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEKK KKEEEEEE ", + " EEEEEEKK KKEEEEEE ", + " EEEEEEKK KKEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " BBBEEEEE EEEEEBBB ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " BBBBBEEE EEEBBBBB ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " EEEEEKKK KKKEEEEE ", + " EEEEEKKK KKKEEEEE ", + " EEEEEKKK KKKEEEEE ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " BBBBBEEE EEEBBBBB ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEKK KKEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " BBEEEE EEEEBB ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEKK KKEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " BBEEEE EEEEBB ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BB BB ", + " BBBBEE EEBBBB ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEKK KKEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " BBBBEE EEBBBB ", + " BB BB ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEK KEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEKK KKEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " BEEEE EEEEB ", + " EEEEE EEEEE ", + " EEEEK KEEEE ", + " EEEEE EEEEE ", + " BEEEE EEEEB ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " BBEEE EEEBB ", + " EEEEE EEEEE ", + " EEEEK KEEEE ", + " EEEEE EEEEE ", + " BBEEE EEEBB ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " BBBBE EBBBB ", + " EEEEE EEEEE ", + " EEEKK KKEEE ", + " EEEEE EEEEE ", + " BBBBE EBBBB ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEK KEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEK KEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEK KEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEKK KKEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEK KEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEK KEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEKK KKEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEK KEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEKK KKEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEKK KKEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEKK KKEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBB BBBBBBBB ", + " EEEEEEEE EEEEEEEE ", + " EEEEEKKK KKKEEEEE ", + " EEEEEEEE EEEEEEEE ", + " BBBBBBBB BBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBB BBBBBBBB ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEKK KKEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " BBBBBBBB BBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBB BBBBBBBBB ", + " EEEEEEEEE EEEEEEEEE ", + " EEEEEKKKK KKKKEEEEE ", + " EEEEEEEEE EEEEEEEEE ", + " BBBBBBBBB BBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBBB BBBBBBBBBBBB ", + " EEEEEEEEEEEE EEEEEEEEEEEE ", + " EEEEEEEKKKKK KKKKKEEEEEEE ", + " EEEEEEEEEEEE EEEEEEEEEEEE ", + " BBBBBBBBBBBB BBBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEKKKKKKKKKKKKKKKEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBBBBBBBBBBBBBBBB ", + " EEEEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEEEE ", + " BBBBBBBBBBBBBBBBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBBBBBB ", + " EEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEE ", + " BBBBBBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " } }; + + public static final String[][] THIRD_RING = { + { " BBBBBBB ", + " BBCCCCCCCBB ", + " BBCC CCBB ", + " BBCC CCBB ", + " BBBEC CEBBB ", + " EEEC CEEE ", + " EEC CEE ", + " EEC CCCCC CEE ", + " EC CC CC CE ", + " EC C C CE ", + " C C C C ", + " C C C C ", + " C C C C ", + " C C C C ", + " C C C C ", + " C C C C ", + " C C C C ", + " EC C C CE ", + " EC CC CC CE ", + " EEC CCCCC CEE ", + " EEC CEE ", + " EEEC CEEE ", + " BBBEC CEBBB ", + " BBCC CCBB ", + " BBCC CCBB ", + " BBCCCCCCCBB ", + " BBBBBBB " }, + { " BBBBBBB ", + " BBCCCCCCCBB ", + " BBCC CCBB ", + " BBCCD CCBB ", + " BBBEC DD CEBBB ", + " BBBEEEC D CEEEBBB ", + " EEEEEC DD CEEEEE ", + " EEEEEC DCCCCC CEEEEE ", + " EEEEC CCHHHHHCC CEEEE ", + " EEEEC CHHHHHHHHHC CEEEE ", + " EEEC CHHHHHHHHHC CEEE ", + " EEEC CHHHHHHHHHHHC CEEE ", + " EEEC CHHHHHHHHHHHC CEEE ", + " EEEC CHHHHHHHHHHHC CEEE ", + " EEEC CHHHHHHHHHHHC CEEE ", + " EEEC CHHHHHHHHHHHC CEEE ", + " EEEC CHHHHHHHHHC CEEE ", + " EEEEC CHHHHHHHHHC CEEEE ", + " EEEEC CCHHHHHCC CEEEE ", + " EEEEEC CCCCCD CEEEEE ", + " EEEEEC DD CEEEEE ", + " BBBEEEC D CEEEBBB ", + " BBBEC DD CEBBB ", + " BBCC DCCBB ", + " BBCC CCBB ", + " BBCCCCCCCBB ", + " BBBBBBB " }, + { " BBBBBBB ", + " BBCCCCCCCBB ", + " BBCC CCBB ", + " BBCC CCBB ", + " BBBEC CEBBB ", + " BBBBEEEC CEEEBBBB ", + " BEEEEEEC CEEEEEEB ", + " EEEEEEEC CCCCC CEEEEEEE ", + " EEEEEEC CC CC CEEEEEE ", + " EEEEEEC C C CEEEEEE ", + " EEEEEC C C CEEEEE ", + " EEEEEC C C CEEEEE ", + " EEEEEC C C CEEEEE ", + " EEEEEC C C CEEEEE ", + " EEEEEC C C CEEEEE ", + " EEEEEC C C CEEEEE ", + " EEEEEC C C CEEEEE ", + " EEEEEEC C C CEEEEEE ", + " EEEEEEC CC CC CEEEEEE ", + " EEEEEEEC CCCCC CEEEEEEE ", + " BEEEEEEC CEEEEEEB ", + " BBBBEEEC CEEEBBBB ", + " BBBEC CEBBB ", + " BBCC CCBB ", + " BBCC CCBB ", + " BBCCCCCCCBB ", + " BBBBBBB " }, + { " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " BBBBEEEE EEEEBBBB ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEII IIEEEEEE ", + " EEEEEEII IIEEEEEE ", + " EEEEEEII IIEEEEEE ", + " EEEEEEII IIEEEEEE ", + " EEEEEEII IIEEEEEE ", + " EEEEEEII IIEEEEEE ", + " EEEEEEII IIEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " BBBBEEEE EEEEBBBB ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " BB BB ", + " BBBBBEE EEBBBBB ", + " BEEEEEEE EEEEEEEB ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " EEEEEIII IIIEEEEE ", + " EEEEEIII IIIEEEEE ", + " EEEEEIII IIIEEEEE ", + " EEEEEIII IIIEEEEE ", + " EEEEEIII IIIEEEEE ", + " EEEEEIII IIIEEEEE ", + " EEEEEIII IIIEEEEE ", + " EEEEEEEE EEEEEEEE ", + " EEEEEEEE EEEEEEEE ", + " BEEEEEEE EEEEEEEB ", + " BBBBBEE EEBBBBB ", + " BB BB ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " BBEEEE EEEEBB ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " BBEEEE EEEEBB ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " BBBBBE EBBBBB ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " BBBBBE EBBBBB ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEII IIEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " BBEEE EEEBB ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEII IIEEE ", + " EEEII IIEEE ", + " EEEII IIEEE ", + " EEEII IIEEE ", + " EEEII IIEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " BBEEE EEEBB ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEI IEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEI IEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " BEEE EEEB ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEI IEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " BEEE EEEB ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " BBBE EBBB ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEI IEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " BBBE EBBB ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEI EEEE ", + " EEEI IEEE ", + " EEEI EEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEE EEE ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " EEE EEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEI IEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEI IEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEI IEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEI IEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEI IEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEI IEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEI IEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEII IIEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEI IEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEII IIEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEII IIEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEII IIEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBB BBBBBBBB ", + " EEEEEEEE EEEEEEEE ", + " EEEEEIII IIIEEEEE ", + " EEEEEEEE EEEEEEEE ", + " BBBBBBBB BBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBB BBBBBBBBB ", + " EEEEEEEEE EEEEEEEEE ", + " EEEEEEIII IIIEEEEEE ", + " EEEEEEEEE EEEEEEEEE ", + " BBBBBBBBB BBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBB BBBBBBBBBBB ", + " EEEEEEEEEEE EEEEEEEEEEE ", + " EEEEEEIIIII IIIIIEEEEEE ", + " EEEEEEEEEEE EEEEEEEEEEE ", + " BBBBBBBBBBB BBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEIIIIIIIIIIIIIEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBBBBBBBBBBBBBB ", + " EEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEE ", + " BBBBBBBBBBBBBBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBBBB ", + " EEEEEEEEEEEEE ", + " EEEEEEEEEEEEE ", + " EEEEEEEEEEEEE ", + " BBBBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " } }; + public static final String[][] SECOND_RING_AIR = replaceLetters(SECOND_RING, "L"); + public static final String[][] THIRD_RING_AIR = replaceLetters(THIRD_RING, "L"); + +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java b/src/main/java/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java new file mode 100644 index 0000000000..776689eee5 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/ForgeOfGodsStructureString.java @@ -0,0 +1,5435 @@ +package tectech.thing.metaTileEntity.multi; + +import static tectech.util.TTUtility.appendStringArrays; +import static tectech.util.TTUtility.replaceLetters; + +public abstract class ForgeOfGodsStructureString { + + public static final String[][] BEAM_SHAFT = { { + " ", + " ", + " ", + " ", + " ", + " ", + " BB BB ", + " BB BB ", + " B DDD DDD B ", + " DDFD DFDD ", + " DDADD DDADD ", + " DFDD DDFD ", + " DDD DDD ", + " ", + " ", + " ", + " DDD DDD ", + " DFDD DDFD ", + " DDADD DDADD ", + " DDFD DFDD ", + " B DDD DDD B ", + " BB BB ", + " BB BB ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " BB BB ", + " BEEBBBBB BBBBBEEB ", + " BEEEECCCCBCCCCEEEEB ", + " BEEECEE CFC EECEEEB ", + " BECEEE CFC EEECEB ", + " BCEE CFC EECB ", + " BCEE CCCFC EECB ", + " BC CFFCCFC CB ", + " BCCCCFCCFCFCCCCCB ", + " BFFFCCF~FCCFFFB ", + " BCCCCCFCFCCFCCCCB ", + " BC CFCCFFC CB ", + " BCEE CFCCC EECB ", + " BCEE CFC EECB ", + " BECEEE CFC EEECEB ", + " BEEECEE CFC EECEEEB ", + " BEEEECCCCBCCCCEEEEB ", + " BEEBBBBB BBBBBEEB ", + " BB BB ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " BB BB ", + " BBEEBBB BBBEEBB ", + " BEEEEEEB BEEEEEEB ", + " BEEDDDDDBBBBBDDDDDEEB ", + " BEEDEE EEDEEB ", + " BEDE EDEB ", + " BED DEB ", + " BED DEB ", + " BB BB ", + " B B ", + " B B ", + " B B ", + " BB BB ", + " BED DEB ", + " BED DEB ", + " BEDE EDEB ", + " BEEDEE EEDEEB ", + " BEEDDDDDBBBBBDDDDDEEB ", + " BEEEEEEB BEEEEEEB ", + " BBEEBBB BBBEEBB ", + " BB BB ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " BBBB BBBB ", + " BEEEEB BEEEEB ", + " BEEDDBBB BBBDDEEB ", + " BED DEB ", + " BED DEB ", + " BB BB ", + " B B ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " B B ", + " BB BB ", + " BED DEB ", + " BED DEB ", + " BEEDDBBB BBBDDEEB ", + " BEEEEB BEEEEB ", + " BBBB BBBB ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " BB BB ", + " BEEBB BBEEB ", + " BBB BEB ", + " B B ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " B B ", + " BEB BEB ", + " BEBBB BBEEB ", + " BB BB ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " BB BB ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " BB BB ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " B B ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB ", + " " }, + { " ", + " BEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEB ", + " " }, + { " ", + " BEEEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, + { " J ", + " BEEEEEB ", + " EEE EEE ", + " E E ", + " EE EE ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " E E ", + " E E ", + " JE EJ ", + " E E ", + " E E ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " EE EE ", + " E E ", + " EEE EEE ", + " BEEEEEB ", + " J " }, + { " ", + " BEEEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, + { " ", + " BEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEB ", + " " }, + { " ", + " BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " B B ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " B B ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB ", + " " }, + { " ", + " BEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEB ", + " " }, + { " ", + " BEEEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, + { " J ", + " BEEEEEB ", + " EEE EEE ", + " E E ", + " EE EE ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " E E ", + " E E ", + " JE EJ ", + " E E ", + " E E ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " EE EE ", + " E E ", + " EEE EEE ", + " BEEEEEB ", + " J " }, + { " ", + " BEEEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, + { " ", + " BEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEB ", + " " }, + { " ", + " BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " B B ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " B B ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB ", + " " }, + { " ", + " BEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEB ", + " " }, + { " ", + " BEEEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, + { " J ", + " BEEEEEB ", + " EEE EEE ", + " E E ", + " EE EE ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " E E ", + " E E ", + " JE EJ ", + " E E ", + " E E ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " EE EE ", + " E E ", + " EEE EEE ", + " BEEEEEB ", + " J " }, + { " ", + " BEEEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, + { " ", + " BEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEB ", + " " }, + { " ", + " BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " B B ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " B B ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB ", + " " }, + { " ", + " BEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEB ", + " " }, + { " ", + " BEEEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, + { " J ", + " BEEEEEB ", + " EEE EEE ", + " E E ", + " EE EE ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " E E ", + " E E ", + " JE EJ ", + " E E ", + " E E ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " EE EE ", + " E E ", + " EEE EEE ", + " BEEEEEB ", + " J " }, + { " ", + " BEEEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEEEB ", + " " }, + { " ", + " BEEEB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " E E ", + " E E ", + " E E ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BEEEB ", + " " }, + { " ", + " BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " B B ", + " B B ", + " B B ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " } }; + public static final String[][] FIRST_RING = { { + " ", + " ", + " ", + " ", + " ", + " BBBBB ", + " BBCCCCCBB ", + " BBCC CCBB ", + " BBCC CCBB ", + " EEC CEE ", + " EC CE ", + " EC CE ", + " C CCC C ", + " C C C C ", + " C C C C ", + " C C C C ", + " C CCC C ", + " EC CE ", + " EC CE ", + " EEC CEE ", + " BBCC CCBB ", + " BBCC CCBB ", + " BBCCCCCBB ", + " BBBBB ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " BBBBB ", + " BBCCCCCBB ", + " BBCC CCBB ", + " BBCC CCBB ", + " BBBEEC CEEBBB ", + " BBEEEEC DDCEEEEBB ", + " EEEEEEC DDD CEEEEEE ", + " EEEEEC CCCDD CEEEEE ", + " EEEEEC CHHHC CEEEEE ", + " EEEEEC CHHHC CEEEEE ", + " EEEEEC CHHHC CEEEEE ", + " EEEEEC DDCCC CEEEEE ", + " EEEEEEC DDD CEEEEEE ", + " BBEEEECDD CEEEEBB ", + " BBBEEC CEEBBB ", + " BBCC CCBB ", + " BBCC CCBB ", + " BBCCCCCBB ", + " BBBBB ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " BBBBB ", + " BBCCCCCBB ", + " BBCC CCBB ", + " BBCC CCBB ", + " BBBEEC CEEBBB ", + " BBBBEEEEC CEEEEBBBB ", + " BBEEEEEEEEC CEEEEEEEEBB ", + " EEEEEEEEEC CCC CEEEEEEEEE ", + " EEEEEEEEEC C C CEEEEEEEEE ", + " EEEEEEEEEC C C CEEEEEEEEE ", + " EEEEEEEEEC C C CEEEEEEEEE ", + " EEEEEEEEEC CCC CEEEEEEEEE ", + " BBEEEEEEEEC CEEEEEEEEBB ", + " BBBBEEEEC CEEEEBBBB ", + " BBBEEC CEEBBB ", + " BBCC CCBB ", + " BBCC CCBB ", + " BBCCCCCBB ", + " BBBBB ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " BBBBEEEE EEEEBBBB ", + " BBBBBEEEEEEEE EEEEEEEEBBBBB ", + " EEEEEEEEEEEEE EEEEEEEEEEEEE ", + " EEEEEEEEEGGGG GGGGEEEEEEEEE ", + " EEEEEEEGGGGGG GGGGGGEEEEEEE ", + " EEEEEEEEEGGGG GGGGEEEEEEEEE ", + " EEEEEEEEEEEEE EEEEEEEEEEEEE ", + " BBBBBEEEEEEEE EEEEEEEEBBBBB ", + " BBBBEEEE EEEEBBBB ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BB BB ", + " BBBBBEE EEBBBBB ", + " BBBEEEEEEE EEEEEEEBBB ", + " EEEEEEEEEE EEEEEEEEEE ", + " EEEEEEGGGG GGGGEEEEEE ", + " EEEEEEEEEE EEEEEEEEEE ", + " BBBEEEEEEE EEEEEEEBBB ", + " BBBBBEE EEBBBBB ", + " BB BB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " BBBBBEEE EEEBBBBB ", + " EEEEEEEE EEEEEEEE ", + " EEEEEGGG GGGEEEEE ", + " EEEEEEEE EEEEEEEE ", + " BBBBBEEE EEEBBBBB ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBB BBBBBBB ", + " EEEEEEE EEEEEEE ", + " EEEEEGG GGEEEEE ", + " EEEEEEE EEEEEEE ", + " BBBBBBB BBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBB BBBBBBB ", + " EEEEEEE EEEEEEE ", + " EEEEGGG GGGEEEE ", + " EEEEEEE EEEEEEE ", + " BBBBBBB BBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEGG GGEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEGG GGEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + "BBB BBB", + "EEE EEE", + "EEG GEE", + "EEE EEE", + "BBB BBB", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBB BBB ", + " EEE EEE ", + " EEG GEE ", + " EEE EEE ", + " BBB BBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBB BBBB ", + " EEEE EEEE ", + " EEEG GEEE ", + " EEEE EEEE ", + " BBBB BBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEGG GGEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEGG GGEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBB BBBBB ", + " EEEEE EEEEE ", + " EEEEG GEEEE ", + " EEEEE EEEEE ", + " BBBBB BBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBB BBBBBB ", + " EEEEEE EEEEEE ", + " EEEEGG GGEEEE ", + " EEEEEE EEEEEE ", + " BBBBBB BBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBB BBBBBBB ", + " EEEEEEE EEEEEEE ", + " EEEEGGG GGGEEEE ", + " EEEEEEE EEEEEEE ", + " BBBBBBB BBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBB BBBBBBB ", + " EEEEEEE EEEEEEE ", + " EEEEEGG GGEEEEE ", + " EEEEEEE EEEEEEE ", + " BBBBBBB BBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBB BBBBBBBB ", + " EEEEEEEE EEEEEEEE ", + " EEEEEGGG GGGEEEEE ", + " EEEEEEEE EEEEEEEE ", + " BBBBBBBB BBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBB BBBBBBBBBB ", + " EEEEEEEEEE EEEEEEEEEE ", + " EEEEEEGGGG GGGGEEEEEE ", + " EEEEEEEEEE EEEEEEEEEE ", + " BBBBBBBBBB BBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBBBB BBBBBBBBBBBBB ", + " EEEEEEEEEEEEE EEEEEEEEEEEEE ", + " EEEEEEEGGGGGG GGGGGGEEEEEEE ", + " EEEEEEEEEEEEE EEEEEEEEEEEEE ", + " BBBBBBBBBBBBB BBBBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEEGGGGGGGGGGGGGGGEEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBB ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEEEEEEEEEEEEEE ", + " BBBBBBBBBBBBBBBBBBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " }, + { " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " BBBBBBBBBBBBBBB ", + " EEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEE ", + " EEEEEEEEEEEEEEE ", + " BBBBBBBBBBBBBBB ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " ", + " " } }; + public static final String[][] MAIN_STRUCTURE = appendStringArrays(BEAM_SHAFT, FIRST_RING); + public static final String[][] FIRST_RING_AIR = replaceLetters(FIRST_RING, "L"); +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEActiveTransformer.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEActiveTransformer.java new file mode 100644 index 0000000000..d9cc9080cb --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEActiveTransformer.java @@ -0,0 +1,231 @@ +package tectech.thing.metaTileEntity.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.onElementPass; +import static gregtech.api.GregTechAPI.sBlockCasings1; +import static gregtech.api.enums.HatchElement.Dynamo; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +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.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.MultiblockTooltipBuilder; +import tectech.Reference; +import tectech.thing.casing.BlockGTCasingsTT; +import tectech.thing.casing.TTCasingsContainer; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.thing.metaTileEntity.multi.base.render.TTRenderedExtendedFacingTexture; +import tectech.util.CommonValues; + +/** + * Created by danie_000 on 17.12.2016. + */ +public class MTEActiveTransformer extends TTMultiblockBase implements ISurvivalConstructable { + + // Gives a one-chance grace period for deforming the multi. This is to allow you to hotswap hatches without + // powerfailing due to an unlucky tick timing - this grace period is already a part of base TecTech but the + // tick timer is essentially random, so it was extremely unreliable. Now you are guaranteed the length + // of one structure check to finish your hotswap before it deforms. + private boolean grace = false; + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + casingCount = 0; + if (structureCheck_EM("main", 1, 1, 0) && casingCount >= 5) { + grace = true; + return true; + } else if (grace) { + grace = false; + return true; + } + return false; + } + + @Override + public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { + if (!mMachine) { + aBaseMetaTileEntity.disableWorking(); + } + } + + // region structure + private static final String[] description = new String[] { + EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + translateToLocal("gt.blockmachines.multimachine.em.transformer.hint"), // 1 - Energy IO Hatches or High + // Power Casing + }; + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + "main", + new String[][] { { "111", "1~1", "111", }, { "111", "101", "111", }, { "111", "111", "111", }, }) + .addElement('0', ofBlock(sBlockCasings1, 15)) + .addElement( + '1', + buildHatchAdder(MTEActiveTransformer.class) + .atLeast(Energy, HatchElement.EnergyMulti, Dynamo, HatchElement.DynamoMulti) + .casingIndex(BlockGTCasingsTT.textureOffset) + .dot(1) + .buildAndChain(onElementPass(t -> t.casingCount++, ofBlock(TTCasingsContainer.sBlockCasingsTT, 0)))) + .build(); + private int casingCount = 0; + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + // endregion + + public MTEActiveTransformer(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + eDismantleBoom = false; + } + + public MTEActiveTransformer(String aName) { + super(aName); + eDismantleBoom = false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEActiveTransformer(mName); + } + + @Override + @NotNull + protected CheckRecipeResult checkProcessing_EM() { + if (ePowerPass) { + mEfficiencyIncrease = 10000; + mMaxProgresstime = 20; + } else { + mEfficiencyIncrease = 0; + mMaxProgresstime = 0; + } + eAmpereFlow = 0; + mEUt = 0; + return ePowerPass ? SimpleCheckRecipeResult.ofSuccess("routing") + : SimpleCheckRecipeResult.ofFailure("no_routing"); + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.transformer.name")) // Machine Type: + // Transformer + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.transformer.desc.0")) // Controller block of + // the + // Active Transformer + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.transformer.desc.1")) // Can transform to + // and from any + // voltage + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.transformer.desc.2")) // Only 0.004% power + // loss, HAYO! + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.transformer.desc.3")) // Will explode if + // broken while + // running + .addSeparator() + .beginStructureBlock(3, 3, 3, false) + .addController(translateToLocal("tt.keyword.Structure.FrontCenter")) // Controller: Front center + .addCasingInfoMin(translateToLocal("gt.blockcasingsTT.0.name"), 5, false) // 5x High Power Casing + // (minimum) + .addOtherStructurePart( + translateToLocal("tt.keyword.Structure.SuperconductingCoilBlock"), + translateToLocal("tt.keyword.Structure.Center")) // SuperconductingCoilBlock: Center + .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) // Energy Hatch: Any + // High Power Casing + .addDynamoHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) // Dynamo Hatch: Any + // High Power Casing + .toolTipFinisher(CommonValues.TEC_MARK_GENERAL); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][0], + new TTRenderedExtendedFacingTexture(aActive ? TTMultiblockBase.ScreenON : TTMultiblockBase.ScreenOFF) }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][0] }; + } + + public static final ResourceLocation activitySound = new ResourceLocation(Reference.MODID + ":fx_noise"); + + @Override + @SideOnly(Side.CLIENT) + protected ResourceLocation getActivitySound() { + return activitySound; + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + return true; + } + + @Override + public boolean doRandomMaintenanceDamage() { + return true; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if ((aTick & 31) == 31) { + ePowerPass = aBaseMetaTileEntity.isAllowedToWork(); + } + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM("main", 1, 1, 0, stackSize, hintsOnly); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (mMachine) return -1; + return survivialBuildPiece("main", stackSize, 1, 1, 0, elementBudget, source, actor, false, true); + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return description; + } + + @Override + public boolean isPowerPassButtonEnabled() { + return true; + } + + @Override + public boolean isSafeVoidButtonEnabled() { + return false; + } + + @Override + public boolean isAllowedToWorkButtonEnabled() { + return true; + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEDataBank.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEDataBank.java new file mode 100644 index 0000000000..30a417ae91 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEDataBank.java @@ -0,0 +1,382 @@ +package tectech.thing.metaTileEntity.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDataAccess; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.WirelessComputationPacket; +import gregtech.common.WirelessDataStore; +import tectech.Reference; +import tectech.mechanics.dataTransport.InventoryDataPacket; +import tectech.recipe.TTRecipeAdder; +import tectech.thing.casing.BlockGTCasingsTT; +import tectech.thing.casing.TTCasingsContainer; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataItemsInput; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataItemsOutput; +import tectech.thing.metaTileEntity.hatch.MTEHatchWirelessDataItemsOutput; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.thing.metaTileEntity.multi.base.render.TTRenderedExtendedFacingTexture; +import tectech.util.CommonValues; + +public class MTEDataBank extends TTMultiblockBase implements ISurvivalConstructable { + + // region variables + private final ArrayList eStacksDataOutputs = new ArrayList<>(); + private final ArrayList eWirelessStacksDataOutputs = new ArrayList<>(); + private final ArrayList eDataAccessHatches = new ArrayList<>(); + private boolean slave = false; + private boolean wirelessModeEnabled = false; + // endregion + + // region structure + private static final String[] description = new String[] { + EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + translateToLocal("gt.blockmachines.multimachine.em.databank.hint.0"), // 1 - Classic Hatches or high power + // casing + translateToLocal("gt.blockmachines.multimachine.em.databank.hint.1"), // 2 - Data Access/Data Bank Master + // Hatches or + // computer casing + }; + + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + "main", + transpose( + new String[][] { { "BCCCB", "BDDDB", "BDDDB" }, { "BC~CB", "BAAAB", "BDDDB" }, + { "BCCCB", "BDDDB", "BDDDB" } })) + .addElement('A', ofBlock(TTCasingsContainer.sBlockCasingsTT, 1)) + .addElement('B', ofBlock(TTCasingsContainer.sBlockCasingsTT, 2)) + .addElement('C', classicHatches(BlockGTCasingsTT.textureOffset, 1, TTCasingsContainer.sBlockCasingsTT, 0)) + .addElement( + 'D', + buildHatchAdder(MTEDataBank.class) + .atLeast( + DataBankHatches.OutboundConnector, + DataBankHatches.InboundConnector, + DataBankHatches.WirelessOutboundConnector) + .casingIndex(BlockGTCasingsTT.textureOffset + 1) + .dot(2) + .buildAndChain( + DataBankHatches.DataStick + .newAnyOrCasing(BlockGTCasingsTT.textureOffset + 1, 2, TTCasingsContainer.sBlockCasingsTT, 1))) + .build(); + // endregion + + public MTEDataBank(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEDataBank(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEDataBank(mName); + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.databank.name")) // Machine Type: Data Bank + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.databank.desc.0")) // Controller block of + // the Data Bank + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.databank.desc.1")) // Used to supply + // Assembling Lines + // with more Data Sticks + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.databank.desc.2")) // and give multiple + // Assembling Lines access to + // the same Data + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.databank.desc.3")) // Use screwdriver to toggle + // wireless mode + + // Stick + .addInfo(translateToLocal("tt.keyword.Structure.StructureTooComplex")) // The structure is too complex! + .addSeparator() + .beginStructureBlock(5, 3, 3, false) + .addOtherStructurePart( + translateToLocal("tt.keyword.Structure.DataAccessHatch"), + translateToLocal("tt.keyword.Structure.AnyComputerCasing"), + 2) // Data Access Hatch: Any Computer Casing + .addOtherStructurePart( + translateToLocal("gt.blockmachines.hatch.dataoutass.tier.07.name"), + translateToLocal("tt.keyword.Structure.AnyComputerCasing"), + 2) // Data Bank Master Connector: Any Computer Casing + .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) // Energy Hatch: Any + // High Power Casing + .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) // Maintenance + // Hatch: Any High + // Power Casing + .toolTipFinisher(CommonValues.TEC_MARK_EM); + return tt; + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + eDataAccessHatches.clear(); + eStacksDataOutputs.clear(); + eWirelessStacksDataOutputs.clear(); + slave = false; + return structureCheck_EM("main", 2, 1, 0); + } + + @Override + @NotNull + protected CheckRecipeResult checkProcessing_EM() { + if (eDataAccessHatches.size() > 0 && (eStacksDataOutputs.size() > 0 || eWirelessStacksDataOutputs.size() > 0)) { + mEUt = -(int) V[slave ? 6 : 4]; + eAmpereFlow = 1 + + (long) (eStacksDataOutputs.size() + eWirelessStacksDataOutputs.size()) * eDataAccessHatches.size(); + mMaxProgresstime = 20; + mEfficiencyIncrease = 10000; + return SimpleCheckRecipeResult.ofSuccess("providing_data"); + } + return SimpleCheckRecipeResult.ofFailure("no_data"); + } + + @Override + public void outputAfterRecipe_EM() { + ArrayList stacks = new ArrayList<>(); + for (IInventory dataAccess : eDataAccessHatches) { + int count = dataAccess.getSizeInventory(); + for (int i = 0; i < count; i++) { + ItemStack stack = dataAccess.getStackInSlot(i); + if (stack != null) { + stacks.add(stack); + } + } + } + if (stacks.size() > 0) { + ItemStack[] arr = stacks.toArray(TTRecipeAdder.nullItem); + for (MTEHatchDataItemsOutput hatch : eStacksDataOutputs) { + hatch.q = new InventoryDataPacket(arr); + } + if (wirelessModeEnabled) { + for (MTEHatchWirelessDataItemsOutput hatch : eWirelessStacksDataOutputs) { + hatch.dataPacket = new InventoryDataPacket(arr); + } + } + } else { + for (MTEHatchDataItemsOutput hatch : eStacksDataOutputs) { + hatch.q = null; + } + for (MTEHatchWirelessDataItemsOutput hatch : eWirelessStacksDataOutputs) { + hatch.dataPacket = null; + } + } + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][1], + new TTRenderedExtendedFacingTexture(aActive ? TTMultiblockBase.ScreenON : TTMultiblockBase.ScreenOFF) }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][1] }; + } + + public static final ResourceLocation activitySound = new ResourceLocation(Reference.MODID + ":fx_hi_freq"); + + @Override + @SideOnly(Side.CLIENT) + protected ResourceLocation getActivitySound() { + return activitySound; + } + + public final boolean addDataBankHatchToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchWirelessDataItemsOutput) { + ((MTEHatchWirelessDataItemsOutput) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eWirelessStacksDataOutputs.add((MTEHatchWirelessDataItemsOutput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDataItemsOutput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eStacksDataOutputs.add((MTEHatchDataItemsOutput) aMetaTileEntity); + } else + if (aMetaTileEntity instanceof MTEHatchDataAccess && !(aMetaTileEntity instanceof MTEHatchDataItemsInput)) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eDataAccessHatches.add(aMetaTileEntity); + } else if (aMetaTileEntity instanceof MTEHatchDataItemsInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + slave = true; + return eDataAccessHatches.add(aMetaTileEntity); + } + return false; + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + // Every 200 ticks, clear wireless data store so hatches need to provide their data again in + // their onPostTick() call. This also happens every 200 ticks + if (mMachine && aBaseMetaTileEntity.isActive() && wirelessModeEnabled && aTick % 200 == 0) { + WirelessDataStore wirelessStore = WirelessDataStore + .getWirelessDataSticks(aBaseMetaTileEntity.getOwnerUuid()); + wirelessStore.clearData(); + + // After reset, clear uploadedSinceReset of all connected hatches + for (MTEHatchWirelessDataItemsOutput hatch : eWirelessStacksDataOutputs) { + hatch.uploadedSinceReset = false; + } + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (getBaseMetaTileEntity().isServerSide()) { + wirelessModeEnabled = !wirelessModeEnabled; + if (wirelessModeEnabled) { + GTUtility.sendChatToPlayer(aPlayer, "Wireless mode enabled"); + WirelessComputationPacket.enableWirelessNetWork(getBaseMetaTileEntity()); + } else { + GTUtility.sendChatToPlayer(aPlayer, "Wireless mode disabled"); + WirelessComputationPacket.disableWirelessNetWork(getBaseMetaTileEntity()); + } + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setBoolean("wirelessModeEnabled", wirelessModeEnabled); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (aNBT.hasKey("wirelessModeEnabled")) { + wirelessModeEnabled = aNBT.getBoolean("wirelessModeEnabled"); + } else { + wirelessModeEnabled = false; + } + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM("main", 2, 1, 0, stackSize, hintsOnly); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (mMachine) return -1; + return survivialBuildPiece("main", stackSize, 2, 1, 0, elementBudget, source, actor, false, true); + } + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return description; + } + + private enum DataBankHatches implements IHatchElement { + + DataStick(MTEHatchDataAccess.class) { + + @Override + public long count(MTEDataBank t) { + return t.eDataAccessHatches.size(); + } + }, + OutboundConnector(MTEHatchDataItemsOutput.class) { + + @Override + public long count(MTEDataBank t) { + return t.eStacksDataOutputs.size(); + } + }, + InboundConnector(MTEHatchDataItemsInput.class) { + + @Override + public long count(MTEDataBank t) { + return t.eDataAccessHatches.size(); + } + }, + WirelessOutboundConnector(MTEHatchWirelessDataItemsOutput.class) { + + @Override + public long count(MTEDataBank t) { + return t.eWirelessStacksDataOutputs.size(); + } + }; + + private final List> mteClasses; + + @SafeVarargs + DataBankHatches(Class... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + @Override + public IGTHatchAdder adder() { + return MTEDataBank::addDataBankHatchToMachineList; + } + } + + @Override + public boolean isPowerPassButtonEnabled() { + return true; + } + + @Override + public boolean isSafeVoidButtonEnabled() { + return false; + } + + @Override + public boolean isAllowedToWorkButtonEnabled() { + return true; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEEnergyInfuser.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEEnergyInfuser.java new file mode 100644 index 0000000000..b52069fe96 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEEnergyInfuser.java @@ -0,0 +1,315 @@ +package tectech.thing.metaTileEntity.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.GregTechAPI.mEUtoRF; +import static gregtech.api.util.GTStructureUtility.ofHatchAdderOptional; +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; + +import cofh.api.energy.IEnergyContainerItem; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.MTEHatchInputBusME; +import ic2.api.item.ElectricItem; +import ic2.api.item.IElectricItem; +import tectech.Reference; +import tectech.TecTech; +import tectech.loader.TecTechConfig; +import tectech.thing.casing.BlockGTCasingsTT; +import tectech.thing.casing.TTCasingsContainer; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.util.CommonValues; + +/** + * Created by danie_000 on 17.12.2016. + */ +public class MTEEnergyInfuser extends TTMultiblockBase implements IConstructable { + + private static final int maxRepairedDamagePerOperation = 1000; + private static final long usedEuPerDurability = 1000; + private static final int usedUumPerDurability = 1; + + // region structure + private static final String[] description = new String[] { + EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + // 1 - Classic Hatches or High Power Casing + translateToLocal("gt.blockmachines.multimachine.em.infuser.hint"), }; + + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + "main", + transpose( + new String[][] { { "CCC", "CCC", "CCC" }, { "BBB", "BAB", "BBB" }, { "A~A", "AAA", "AAA" }, + { "BBB", "BAB", "BBB" }, { "CCC", "CCC", "CCC" } })) + .addElement('A', ofBlock(TTCasingsContainer.sBlockCasingsTT, 4)) + .addElement('B', ofBlock(TTCasingsContainer.sBlockCasingsTT, 7)) + .addElement( + 'C', + ofHatchAdderOptional( + MTEEnergyInfuser::addClassicToMachineList, + BlockGTCasingsTT.textureOffset, + 1, + TTCasingsContainer.sBlockCasingsTT, + 0)) + .build(); + // endregion + + public MTEEnergyInfuser(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + minRepairStatus = (byte) getIdealStatus(); + eDismantleBoom = true; + } + + public MTEEnergyInfuser(String aName) { + super(aName); + minRepairStatus = (byte) getIdealStatus(); + eDismantleBoom = true; + } + + private boolean isItemStackFullyCharged(ItemStack stack) { + if (stack == null) { + return true; + } + Item item = stack.getItem(); + if (stack.stackSize == 1) { + if (item instanceof IElectricItem) { + return ElectricItem.manager.getCharge(stack) >= ((IElectricItem) item).getMaxCharge(stack); + } else if (TecTech.hasCOFH && item instanceof IEnergyContainerItem) { + return ((IEnergyContainerItem) item).getEnergyStored(stack) + >= ((IEnergyContainerItem) item).getMaxEnergyStored(stack); + } + } + return true; + } + + private boolean isItemStackFullyRepaired(ItemStack stack) { + if (stack == null) { + return true; + } + Item item = stack.getItem(); + return !item.isRepairable() || item.getMaxDamage(stack) <= 0 || item.getDamage(stack) <= 0; + } + + private long doChargeItemStack(IElectricItem item, ItemStack stack) { + try { + double euDiff = item.getMaxCharge(stack) - ElectricItem.manager.getCharge(stack); + long remove = (long) Math.ceil( + ElectricItem.manager.charge(stack, Math.min(euDiff, getEUVar()), item.getTier(stack), true, false)); + setEUVar(getEUVar() - remove); + if (getEUVar() < 0) { + setEUVar(0); + } + return remove; + } catch (Exception e) { + if (TecTechConfig.DEBUG_MODE) { + e.printStackTrace(); + } + } + return 0; + } + + private long doChargeItemStackRF(IEnergyContainerItem item, ItemStack stack) { + try { + long RF = Math + .min(item.getMaxEnergyStored(stack) - item.getEnergyStored(stack), getEUVar() * mEUtoRF / 100L); + RF = item.receiveEnergy(stack, RF > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) RF, false); + RF = RF * 100L / mEUtoRF; + setEUVar(getEUVar() - RF); + if (getEUVar() < 0) { + setEUVar(0); + } + return RF; + } catch (Exception e) { + if (TecTechConfig.DEBUG_MODE) { + e.printStackTrace(); + } + } + return 0; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEEnergyInfuser(mName); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + return structureCheck_EM("main", 1, 2, 0); + } + + @Override + @NotNull + protected CheckRecipeResult checkProcessing_EM() { + for (MTEHatchInputBus inputBus : mInputBusses) { + if (inputBus instanceof MTEHatchInputBusME) continue; + for (int i = 0; i < inputBus.getSizeInventory(); i++) { + ItemStack itemStackInBus = inputBus.getStackInSlot(i); + if (itemStackInBus == null) continue; + Item item = itemStackInBus.getItem(); + if (itemStackInBus.stackSize != 1 || item == null) continue; + if (isItemStackFullyCharged(itemStackInBus) && isItemStackFullyRepaired(itemStackInBus)) { + if (addOutput(itemStackInBus)) { + this.depleteInput(itemStackInBus); + } + } else { + mEfficiencyIncrease = 10000; + mMaxProgresstime = 20; + return SimpleCheckRecipeResult.ofSuccess("charging"); + } + } + } + return SimpleCheckRecipeResult.ofFailure("no_chargeable_item"); + } + + @Override + public void outputAfterRecipe_EM() { + boolean itemProcessed = false; + startRecipeProcessing(); + for (MTEHatchInputBus inputBus : mInputBusses) { + if (inputBus instanceof MTEHatchInputBusME) continue; + for (int i = 0; i < inputBus.getSizeInventory(); i++) { + ItemStack itemStackInBus = inputBus.getStackInSlot(i); + if (itemStackInBus == null) continue; + Item item = itemStackInBus.getItem(); + if (itemStackInBus.stackSize != 1 || item == null) continue; + if (isItemStackFullyCharged(itemStackInBus) && isItemStackFullyRepaired(itemStackInBus)) { + itemProcessed = true; + if (addOutput(itemStackInBus)) { + this.depleteInput(itemStackInBus); + } + } else { + if (item.isRepairable()) { + FluidStack uum = getStoredFluids().stream() + .filter( + fluid -> Materials.UUMatter.getFluid(1) + .isFluidEqual(fluid)) + .findAny() + .orElse(null); + if (uum != null) { + int repairedDamage = Math + .min(item.getDamage(itemStackInBus), maxRepairedDamagePerOperation); + long euCost = repairedDamage * usedEuPerDurability; + if (getEUVar() >= euCost && depleteInput( + new FluidStack(Materials.UUMatter.mFluid, repairedDamage * usedUumPerDurability))) { + item.setDamage( + itemStackInBus, + Math.max(item.getDamage(itemStackInBus) - repairedDamage, 0)); + setEUVar(Math.min(getEUVar() - euCost, 0)); + } + } + } + if (item instanceof IElectricItem) { + doChargeItemStack((IElectricItem) item, itemStackInBus); + return; + } else if (TecTech.hasCOFH && item instanceof IEnergyContainerItem) { + doChargeItemStackRF((IEnergyContainerItem) item, itemStackInBus); + return; + } + } + } + } + endRecipeProcessing(); + if (!itemProcessed) { + afterRecipeCheckFailed(); + } + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + // Machine Type: Energy Infuser + tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.infuser.name")) + // Controller block of the Energy Infuser + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.infuser.desc.0")) + // Can be used to charge items (lossless) + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.infuser.desc.1")) + // Can be fed with UU-Matter to repair items + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.infuser.desc.2")) + // Stocking Bus is not supported + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.infuser.desc.3")) + .addSeparator() + .beginStructureBlock(3, 5, 3, false) + // Controller: Front 3rd layer center + .addController(translateToLocal("tt.keyword.Structure.FrontCenter3rd")) + .addOtherStructurePart( + // High Power + translateToLocal("gt.blockcasingsTT.0.name"), + translateToLocal("gt.blockmachines.multimachine.em.infuser.Structure.HighPowerCasing")) + // Casing: Layer + // 1 and 5 + .addOtherStructurePart( + // Molecular Coil + translateToLocal("gt.blockcasingsTT.7.name"), + translateToLocal("gt.blockmachines.multimachine.em.infuser.Structure.MolecularCoil")) + // Layer 2 and 4 + .addOtherStructurePart( + // Molecular + translateToLocal("gt.blockcasingsTT.4.name"), + translateToLocal("gt.blockmachines.multimachine.em.infuser.Structure.MolecularCasing")) + // Casing: Layer + // 3 (hollow) + // Energy Hatch: Any High Power Casing + .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) + // Maintenance Hatch: Any High Power Casing + .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyHighPowerCasing"), 1) + .toolTipFinisher(CommonValues.TEC_MARK_GENERAL); + return tt; + } + + public static final ResourceLocation activitySound = new ResourceLocation(Reference.MODID + ":fx_whooum"); + + @Override + @SideOnly(Side.CLIENT) + protected ResourceLocation getActivitySound() { + return activitySound; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM("main", 1, 2, 0, stackSize, hintsOnly); + } + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return description; + } + + @Override + public boolean isPowerPassButtonEnabled() { + return true; + } + + @Override + public boolean isSafeVoidButtonEnabled() { + return false; + } + + @Override + public boolean isAllowedToWorkButtonEnabled() { + return true; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEEyeOfHarmony.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEEyeOfHarmony.java new file mode 100644 index 0000000000..0104723c3c --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEEyeOfHarmony.java @@ -0,0 +1,1845 @@ +package tectech.thing.metaTileEntity.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.withChannel; +import static gregtech.api.enums.GTValues.AuthorColen; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.formatNumbers; +import static gregtech.api.util.ParallelHelper.calculateChancedOutputMultiplier; +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static gregtech.common.misc.WirelessNetworkManager.strongCheckOrAddUser; +import static java.lang.Math.exp; +import static java.lang.Math.max; +import static java.lang.Math.pow; +import static kekztech.util.Util.toStandardForm; +import static net.minecraft.util.EnumChatFormatting.AQUA; +import static net.minecraft.util.EnumChatFormatting.BLUE; +import static net.minecraft.util.EnumChatFormatting.GOLD; +import static net.minecraft.util.EnumChatFormatting.GRAY; +import static net.minecraft.util.EnumChatFormatting.GREEN; +import static net.minecraft.util.EnumChatFormatting.RED; +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.EnumChatFormatting.YELLOW; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + +import javax.annotation.Nonnull; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.MathHelper; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.ImmutableList; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +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.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTLanguageManager; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.common.tileentities.machines.MTEHatchInputBusME; +import gregtech.common.tileentities.machines.MTEHatchOutputBusME; +import gregtech.common.tileentities.machines.MTEHatchOutputME; +import gtPlusPlus.core.util.minecraft.ItemUtils; +import gtneioreplugin.plugin.block.BlockDimensionDisplay; +import gtneioreplugin.plugin.block.ModBlocks; +import tectech.TecTech; +import tectech.recipe.EyeOfHarmonyRecipe; +import tectech.recipe.TecTechRecipeMaps; +import tectech.thing.CustomItemList; +import tectech.thing.block.TileEntityEyeOfHarmony; +import tectech.thing.casing.BlockGTCasingsTT; +import tectech.thing.casing.TTCasingsContainer; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.thing.metaTileEntity.multi.base.render.TTRenderedExtendedFacingTexture; +import tectech.util.CommonValues; +import tectech.util.FluidStackLong; +import tectech.util.ItemStackLong; + +@SuppressWarnings("SpellCheckingInspection") +public class MTEEyeOfHarmony extends TTMultiblockBase implements IConstructable, ISurvivalConstructable { + + public static final boolean EOH_DEBUG_MODE = false; + private static final long MOLTEN_SPACETIME_PER_FAILURE_TIER = 14_400L; + private static final double SPACETIME_FAILURE_BASE = 2; + private static final String TOOLTIP_BAR = GOLD + + "---------------------------------------------------------------------------------------"; + + // Region variables. + private static Textures.BlockIcons.CustomIcon ScreenOFF; + private static Textures.BlockIcons.CustomIcon ScreenON; + + private int spacetimeCompressionFieldMetadata = -1; + private int timeAccelerationFieldMetadata = -1; + private int stabilisationFieldMetadata = -1; + + private static final double SPACETIME_CASING_DIFFERENCE_DISCOUNT_PERCENTAGE = 0.03; + private static final double TIME_ACCEL_DECREASE_CHANCE_PER_TIER = 0.0925; + // % Increase in recipe chance and % decrease in yield per tier. + private static final double STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER = 0.05; + private static final double PARALLEL_FOR_FIRST_ASTRAL_ARRAY = 8; + private static final double CONSTANT_FOR_LOG = 1.7; + private static final double LOG_CONSTANT = Math.log(CONSTANT_FOR_LOG); + private static final double PARALLEL_MULTIPLIER_CONSTANT = 1.63; + private static final double POWER_DIVISION_CONSTANT = 20.7; + private static final double POWER_INCREASE_CONSTANT = 2.3; + private static final int TOTAL_CASING_TIERS_WITH_POWER_PENALTY = 8; + private static final long PRECISION_MULTIPLIER = 1_000_000; + // Exact value to get 2^21 parallels. + private static final long ASTRAL_ARRAY_LIMIT = 8637; + + private UUID userUUID; + private BigInteger outputEU_BigInt = BigInteger.ZERO; + private long startEU = 0; + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (mMachine) return -1; + int realBudget = elementBudget >= 200 ? elementBudget : Math.min(200, elementBudget * 5); // 200 blocks max per + // placement. + return survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 16, 16, 0, realBudget, source, actor, false, true); + } + + protected static final String STRUCTURE_PIECE_MAIN = "main"; + + // Multiblock structure. + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + STRUCTURE_PIECE_MAIN, + transpose( + new String[][] { + { " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " C C ", " C C ", + " C C ", " CCCCCCCCC ", + " C C ", " CCCCCCCCC ", + " C C ", " C C ", + " C C ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " " }, + { " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " C C ", + " C C ", " C C ", + " C C ", " DDDDD ", + " DDCDCDD ", " CCCCDCCDCCDCCCC ", + " DDDDDDD ", " CCCCDCCDCCDCCCC ", + " DDCDCDD ", " DDDDD ", + " C C ", " C C ", + " C C ", " C C ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " " }, + { " ", " ", + " ", " ", + " ", " ", + " ", " C C ", + " C C ", " C C ", + " D ", " D ", + " DDDDDDD ", " DD DD ", + " D EEE D ", " CCC D EAAAE D CCC ", + " DDD EAAAE DDD ", " CCC D EAAAE D CCC ", + " D EEE D ", " DD DD ", + " DDDDDDD ", " D ", + " D ", " C C ", + " C C ", " C C ", + " ", " ", + " ", " ", + " ", " ", + " " }, + { " ", " ", + " ", " ", + " ", " ", + " C C ", " C C ", + " D ", " D ", + " ", " ", + " ", " ", + " ", " CC CC ", + " DD DD ", " CC CC ", + " ", " ", + " ", " ", + " ", " D ", + " D ", " C C ", + " C C ", " ", + " ", " ", + " ", " ", + " " }, + { " ", " ", + " ", " ", + " ", " C C ", + " CCCCC ", " D ", + " A ", " A ", + " ", " ", + " ", " ", + " C C ", " CC CC ", + " CDAA AADC ", " CC CC ", + " C C ", " ", + " ", " ", + " ", " A ", + " A ", " D ", + " CCCCC ", " C C ", + " ", " ", + " ", " ", + " " }, + { " ", " ", + " ", " ", + " C C ", " C C ", + " D ", " SEEAEES ", + " ", " ", + " ", " ", + " ", " S S ", + " E E ", " CC E E CC ", + " DA AD ", " CC E E CC ", + " E E ", " S S ", + " ", " ", + " ", " ", + " ", " SEEAEES ", + " D ", " C C ", + " C C ", " ", + " ", " ", + " " }, + { " ", " ", + " ", " C C ", + " CCCCC ", " D ", + " A ", " ", + " ", " ", + " ", " ", + " ", " ", + " C C ", " CC CC ", + " CDA ADC ", " CC CC ", + " C C ", " ", + " ", " ", + " ", " ", + " ", " ", + " A ", " D ", + " CCCCC ", " C C ", + " ", " ", + " " }, + { " ", " ", + " C C ", " C C ", + " D ", " SEEAEES ", + " ", " ", + " ", " ", + " ", " ", + " ", " S S ", + " E E ", " CC E E CC ", + " DA AD ", " CC E E CC ", + " E E ", " S S ", + " ", " ", + " ", " ", + " ", " ", + " ", " SEEAEES ", + " D ", " C C ", + " C C ", " ", + " " }, + { " ", " ", + " C C ", " D ", + " A ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " C C ", + " DA AD ", " C C ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " A ", " D ", + " C C ", " ", + " " }, + { " ", " C C ", + " C C ", " D ", + " A ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " CC CC ", + " DA AD ", " CC CC ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " A ", " D ", + " C C ", " C C ", + " " }, + { " ", " C C ", + " D ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " C C ", + " D D ", " C C ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " D ", " C C ", + " " }, + { " ", " C C ", + " D ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " C C ", + " D D ", " C C ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " D ", " C C ", + " " }, + { " CCCCCCC ", " C C ", + " DDDDDDD ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " D D ", + " D D ", "CCD DCC", + " D D ", "CCD DCC", + " D D ", " D D ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " DDDDDDD ", " C C ", + " C C " }, + { " CCHHHHHCC ", " DDDDD ", + " DD DD ", " ", + " ", " S S ", + " ", " S S ", + " ", " ", + " ", " ", + " D D ", " D D ", + " D D ", "CD DC", + " D D ", "CD DC", + " D D ", " D D ", + " D D ", " ", + " ", " ", + " ", " S S ", + " ", " S S ", + " ", " ", + " DD DD ", " DDDDD ", + " C C " }, + { " CHHHHHHHC ", " DDCDCDD ", + " D EEE D ", " ", + " C C ", " E E ", + " C C ", " E E ", + " ", " ", + " ", " ", + " D D ", " D D ", + " D D ", "CCE ECC", + " DE ED ", "CCE ECC", + " D D ", " D D ", + " D D ", " ", + " ", " ", + " ", " E E ", + " C C ", " E E ", + " C C ", " ", + " D EEE D ", " DDCDCDD ", + " C C " }, + { " CHHCCCHHC ", " CCCCDCCDCCDCCCC ", + " CCC D EAAAE D CCC ", " CC CC ", + " CC CC ", " CC E E CC ", + " CC CC ", " CC E E CC ", + " C C ", " CC CC ", + " C C ", " C C ", + "CCD DCC", "CD DC", + "CCE ECC", "CCA ACC", + "CDA ADC", "CCA ACC", + "CCE ECC", "CD DC", + "CCD DCC", " C C ", + " C C ", " CC CC ", + " C C ", " CC E E CC ", + " CC CC ", " CC E E CC ", + " CC CC ", " CC CC ", + " CCC D EAAAE D CCC ", " CCCCDCCDCCDCCCC ", + " CCCCCCCCC " }, + { " CHHC~CHHC ", " DDDDDDD ", + " DDD EAAAE DDD ", " DD DD ", + " CDAA AADC ", " DA AD ", + " CDA ADC ", " DA AD ", + " DA AD ", " DA AD ", + " D D ", " D D ", + " D D ", " D D ", + " DE ED ", "CDA ADC", + " DA AD ", "CDA ADC", + " DE ED ", " D D ", + " D D ", " D D ", + " D D ", " DA AD ", + " DA AD ", " DA AD ", + " CDA ADC ", " DA AD ", + " CDAA AADC ", " DD DD ", + " DDD EAAAE DDD ", " DDDDDDD ", + " C C " }, + { " CHHCCCHHC ", " CCCCDCCDCCDCCCC ", + " CCC D EAAAE D CCC ", " CC CC ", + " CC CC ", " CC E E CC ", + " CC CC ", " CC E E CC ", + " C C ", " CC CC ", + " C C ", " C C ", + "CCD DCC", "CD DC", + "CCE ECC", "CCA ACC", + "CDA ADC", "CCA ACC", + "CCE ECC", "CD DC", + "CCD DCC", " C C ", + " C C ", " CC CC ", + " C C ", " CC E E CC ", + " CC CC ", " CC E E CC ", + " CC CC ", " CC CC ", + " CCC D EAAAE D CCC ", " CCCCDCCDCCDCCCC ", + " CCCCCCCCC " }, + { " CHHHHHHHC ", " DDCDCDD ", + " D EEE D ", " ", + " C C ", " E E ", + " C C ", " E E ", + " ", " ", + " ", " ", + " D D ", " D D ", + " D D ", "CCE ECC", + " DE ED ", "CCE ECC", + " D D ", " D D ", + " D D ", " ", + " ", " ", + " ", " E E ", + " C C ", " E E ", + " C C ", " ", + " D EEE D ", " DDCDCDD ", + " C C " }, + { " CCHHHHHCC ", " DDDDD ", + " DD DD ", " ", + " ", " S S ", + " ", " S S ", + " ", " ", + " ", " ", + " D D ", " D D ", + " D D ", "CD DC", + " D D ", "CD DC", + " D D ", " D D ", + " D D ", " ", + " ", " ", + " ", " S S ", + " ", " S S ", + " ", " ", + " DD DD ", " DDDDD ", + " C C " }, + { " CCCCCCC ", " C C ", + " DDDDDDD ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " D D ", + " D D ", "CCD DCC", + " D D ", "CCD DCC", + " D D ", " D D ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " DDDDDDD ", " C C ", + " C C " }, + { " ", " C C ", + " D ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " C C ", + " D D ", " C C ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " D ", " C C ", + " " }, + { " ", " C C ", + " D ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " C C ", + " D D ", " C C ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " D ", " C C ", + " " }, + { " ", " C C ", + " C C ", " D ", + " A ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " CC CC ", + " DA AD ", " CC CC ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " A ", " D ", + " C C ", " C C ", + " " }, + { " ", " ", + " C C ", " D ", + " A ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " C C ", + " DA AD ", " C C ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " A ", " D ", + " C C ", " ", + " " }, + { " ", " ", + " C C ", " C C ", + " D ", " SEEAEES ", + " ", " ", + " ", " ", + " ", " ", + " ", " S S ", + " E E ", " CC E E CC ", + " DA AD ", " CC E E CC ", + " E E ", " S S ", + " ", " ", + " ", " ", + " ", " ", + " ", " SEEAEES ", + " D ", " C C ", + " C C ", " ", + " " }, + { " ", " ", + " ", " C C ", + " CCCCC ", " D ", + " A ", " ", + " ", " ", + " ", " ", + " ", " ", + " C C ", " CC CC ", + " CDA ADC ", " CC CC ", + " C C ", " ", + " ", " ", + " ", " ", + " ", " ", + " A ", " D ", + " CCCCC ", " C C ", + " ", " ", + " " }, + { " ", " ", + " ", " ", + " C C ", " C C ", + " D ", " SEEAEES ", + " ", " ", + " ", " ", + " ", " S S ", + " E E ", " CC E E CC ", + " DA AD ", " CC E E CC ", + " E E ", " S S ", + " ", " ", + " ", " ", + " ", " SEEAEES ", + " D ", " C C ", + " C C ", " ", + " ", " ", + " " }, + { " ", " ", + " ", " ", + " ", " C C ", + " CCCCC ", " D ", + " A ", " A ", + " ", " ", + " ", " ", + " C C ", " CC CC ", + " CDAA AADC ", " CC CC ", + " C C ", " ", + " ", " ", + " ", " A ", + " A ", " D ", + " CCCCC ", " C C ", + " ", " ", + " ", " ", + " " }, + { " ", " ", + " ", " ", + " ", " ", + " C C ", " C C ", + " D ", " D ", + " ", " ", + " ", " ", + " ", " CC CC ", + " DD DD ", " CC CC ", + " ", " ", + " ", " ", + " ", " D ", + " D ", " C C ", + " C C ", " ", + " ", " ", + " ", " ", + " " }, + { " ", " ", + " ", " ", + " ", " ", + " ", " C C ", + " C C ", " C C ", + " D ", " D ", + " DDDDDDD ", " DD DD ", + " D EEE D ", " CCC D EAAAE D CCC ", + " DDD EAAAE DDD ", " CCC D EAAAE D CCC ", + " D EEE D ", " DD DD ", + " DDDDDDD ", " D ", + " D ", " C C ", + " C C ", " C C ", + " ", " ", + " ", " ", + " ", " ", + " " }, + { " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " C C ", + " C C ", " C C ", + " C C ", " DDDDD ", + " DDCDCDD ", " CCCCDCCDCCDCCCC ", + " DDDDDDD ", " CCCCDCCDCCDCCCC ", + " DDCDCDD ", " DDDDD ", + " C C ", " C C ", + " C C ", " C C ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " " }, + { " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " C C ", " C C ", + " C C ", " CCCCCCCCC ", + " C C ", " CCCCCCCCC ", + " C C ", " C C ", + " C C ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " ", " ", + " " } })) + .addElement( + 'A', + withChannel( + "spacetime compression", + ofBlocksTiered( + (block, meta) -> block == TTCasingsContainer.SpacetimeCompressionFieldGenerators ? meta : null, + ImmutableList.of( + Pair.of(TTCasingsContainer.SpacetimeCompressionFieldGenerators, 0), + Pair.of(TTCasingsContainer.SpacetimeCompressionFieldGenerators, 1), + Pair.of(TTCasingsContainer.SpacetimeCompressionFieldGenerators, 2), + Pair.of(TTCasingsContainer.SpacetimeCompressionFieldGenerators, 3), + Pair.of(TTCasingsContainer.SpacetimeCompressionFieldGenerators, 4), + Pair.of(TTCasingsContainer.SpacetimeCompressionFieldGenerators, 5), + Pair.of(TTCasingsContainer.SpacetimeCompressionFieldGenerators, 6), + Pair.of(TTCasingsContainer.SpacetimeCompressionFieldGenerators, 7), + Pair.of(TTCasingsContainer.SpacetimeCompressionFieldGenerators, 8)), + -1, + (t, meta) -> t.spacetimeCompressionFieldMetadata = meta, + t -> t.spacetimeCompressionFieldMetadata))) + .addElement( + 'S', + withChannel( + "stabilisation", + ofBlocksTiered( + (block, meta) -> block == TTCasingsContainer.StabilisationFieldGenerators ? meta : null, + ImmutableList.of( + Pair.of(TTCasingsContainer.StabilisationFieldGenerators, 0), + Pair.of(TTCasingsContainer.StabilisationFieldGenerators, 1), + Pair.of(TTCasingsContainer.StabilisationFieldGenerators, 2), + Pair.of(TTCasingsContainer.StabilisationFieldGenerators, 3), + Pair.of(TTCasingsContainer.StabilisationFieldGenerators, 4), + Pair.of(TTCasingsContainer.StabilisationFieldGenerators, 5), + Pair.of(TTCasingsContainer.StabilisationFieldGenerators, 6), + Pair.of(TTCasingsContainer.StabilisationFieldGenerators, 7), + Pair.of(TTCasingsContainer.StabilisationFieldGenerators, 8)), + -1, + (t, meta) -> t.stabilisationFieldMetadata = meta, + t -> t.stabilisationFieldMetadata))) + .addElement('C', ofBlock(TTCasingsContainer.sBlockCasingsBA0, 11)) + .addElement('D', ofBlock(TTCasingsContainer.sBlockCasingsBA0, 10)) + .addElement( + 'H', + buildHatchAdder(MTEEyeOfHarmony.class).atLeast(InputHatch, OutputHatch, InputBus, OutputBus) + .casingIndex(BlockGTCasingsTT.texturePage << 7) + .dot(1) + .buildAndChain(TTCasingsContainer.sBlockCasingsBA0, 12)) + .addElement( + 'E', + withChannel( + "time dilation", + ofBlocksTiered( + (block, meta) -> block == TTCasingsContainer.TimeAccelerationFieldGenerator ? meta : null, + ImmutableList.of( + Pair.of(TTCasingsContainer.TimeAccelerationFieldGenerator, 0), + Pair.of(TTCasingsContainer.TimeAccelerationFieldGenerator, 1), + Pair.of(TTCasingsContainer.TimeAccelerationFieldGenerator, 2), + Pair.of(TTCasingsContainer.TimeAccelerationFieldGenerator, 3), + Pair.of(TTCasingsContainer.TimeAccelerationFieldGenerator, 4), + Pair.of(TTCasingsContainer.TimeAccelerationFieldGenerator, 5), + Pair.of(TTCasingsContainer.TimeAccelerationFieldGenerator, 6), + Pair.of(TTCasingsContainer.TimeAccelerationFieldGenerator, 7), + Pair.of(TTCasingsContainer.TimeAccelerationFieldGenerator, 8)), + -1, + (t, meta) -> t.timeAccelerationFieldMetadata = meta, + t -> t.timeAccelerationFieldMetadata))) + .build(); + + private double hydrogenOverflowProbabilityAdjustment; + private double heliumOverflowProbabilityAdjustment; + private double stellarPlasmaOverflowProbabilityAdjustment; + private static final long TICKS_BETWEEN_HATCH_DRAIN = EOH_DEBUG_MODE ? 10 : 20; + + private List outputItems = new ArrayList<>(); + private List outputFluids = new ArrayList<>(); + + private void calculateInputFluidExcessValues(final long hydrogenRecipeRequirement, + final long heliumRecipeRequirement) { + + double hydrogenStored = getHydrogenStored(); + double heliumStored = getHeliumStored(); + double stellarPlasmaStored = getStellarPlasmaStored(); + + double hydrogenExcessPercentage = hydrogenStored / hydrogenRecipeRequirement - 1; + double heliumExcessPercentage = heliumStored / heliumRecipeRequirement - 1; + double stellarPlasmaExcessPercentage = stellarPlasmaStored + / (heliumRecipeRequirement * (12.4 / 1_000_000f) * parallelAmount) - 1; + + hydrogenOverflowProbabilityAdjustment = 1 - exp(-pow(30 * hydrogenExcessPercentage, 2)); + heliumOverflowProbabilityAdjustment = 1 - exp(-pow(30 * heliumExcessPercentage, 2)); + stellarPlasmaOverflowProbabilityAdjustment = 1 - exp(-pow(30 * stellarPlasmaExcessPercentage, 2)); + } + + private double recipeChanceCalculator() { + double chance = currentRecipe.getBaseRecipeSuccessChance() + - timeAccelerationFieldMetadata * TIME_ACCEL_DECREASE_CHANCE_PER_TIER + + stabilisationFieldMetadata * STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER; + + if (parallelAmount > 1) { + chance -= stellarPlasmaOverflowProbabilityAdjustment; + } else { + chance -= (hydrogenOverflowProbabilityAdjustment + heliumOverflowProbabilityAdjustment); + } + + return MathHelper.clamp_double(chance, 0.0, 1.0); + } + + private double recipeYieldCalculator() { + double yield = 1.0 - stabilisationFieldMetadata * STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER; + + if (parallelAmount > 1) { + yield -= stellarPlasmaOverflowProbabilityAdjustment; + } else { + yield -= (hydrogenOverflowProbabilityAdjustment + heliumOverflowProbabilityAdjustment); + } + return MathHelper.clamp_double(yield, 0.0, 1.0); + } + + private int recipeProcessTimeCalculator(final long recipeTime, final long recipeSpacetimeCasingRequired) { + + // Tier 1 recipe. + // Tier 2 spacetime blocks. + // = 3% discount. + + // Tier 1 recipe. + // Tier 3 spacetime blocks. + // = 3%*3% = 5.91% discount. + + final long spacetimeCasingDifference = (recipeSpacetimeCasingRequired - spacetimeCompressionFieldMetadata); + final double recipeTimeDiscounted = recipeTime * pow(2.0, -timeAccelerationFieldMetadata) + * pow(1 - SPACETIME_CASING_DIFFERENCE_DISCOUNT_PERCENTAGE, -spacetimeCasingDifference) + / max(1, pow(2, currentCircuitMultiplier)); + return (int) Math.max(recipeTimeDiscounted, 1.0); + } + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + + public MTEEyeOfHarmony(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEEyeOfHarmony(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEEyeOfHarmony(mName); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + + spacetimeCompressionFieldMetadata = -1; + timeAccelerationFieldMetadata = -1; + stabilisationFieldMetadata = -1; + + // Check structure of multi. + if (!structureCheck_EM(STRUCTURE_PIECE_MAIN, 16, 16, 0)) { + return false; + } + + // Make sure there are no Crafting Input Buffers/Buses/Slaves. + if (!mDualInputHatches.isEmpty()) { + return false; + } + + // Check if there is 1 output bus, and it is a ME output bus. + { + if (mOutputBusses.size() != 1) { + return false; + } + + if (!(mOutputBusses.get(0) instanceof MTEHatchOutputBusME)) { + return false; + } + } + + // Check if there is 1 output hatch, and they are ME output hatches. + { + if (mOutputHatches.size() != 1) { + return false; + } + + if (!(mOutputHatches.get(0) instanceof MTEHatchOutputME)) { + return false; + } + } + + // Check there is 1 input bus, and it is not a stocking input bus. + { + if (mInputBusses.size() != 1) { + return false; + } + + if (mInputBusses.get(0) instanceof MTEHatchInputBusME) { + return false; + } + } + + // Make sure there are no energy hatches. + { + if (mEnergyHatches.size() > 0) { + return false; + } + + if (mExoticEnergyHatches.size() > 0) { + return false; + } + } + + // Make sure there are 2 input hatches. + if (mInputHatches.size() != 2) { + return false; + } + + return true; + } + + private boolean animationsEnabled = true; + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + animationsEnabled = !animationsEnabled; + aPlayer.addChatMessage( + new ChatComponentText("Animations are now " + (animationsEnabled ? "enabled" : "disabled") + ".")); + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ, ItemStack aTool) { + if (astralArrayAmount != 0) { + while (astralArrayAmount >= 64) { + if (aPlayer.inventory.getFirstEmptyStack() != -1) { + aPlayer.inventory.addItemStackToInventory(CustomItemList.astralArrayFabricator.get(64)); + astralArrayAmount -= 64; + } else { + break; + } + } + if (aPlayer.inventory.getFirstEmptyStack() != -1) { + aPlayer.inventory.addItemStackToInventory(CustomItemList.astralArrayFabricator.get(astralArrayAmount)); + astralArrayAmount = 0; + } + } + return true; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (getControllerSlot() == null) { + ItemStack heldItem = aPlayer.getHeldItem(); + if (GTUtility.getBlockFromStack(heldItem) instanceof BlockDimensionDisplay) { + mInventory[getControllerSlotIndex()] = heldItem.copy(); + mInventory[getControllerSlotIndex()].stackSize = 1; + aPlayer.setCurrentItemOrArmor(0, ItemUtils.depleteStack(heldItem)); + return true; + } + } + return super.onRightclick(aBaseMetaTileEntity, aPlayer); + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Spacetime Manipulator, EOH") + .addInfo(TOOLTIP_BAR) + .addInfo("Creates a pocket of spacetime that is bigger on the inside using transdimensional") + .addInfo("engineering. Certified Time Lord regulation compliant. This multi uses too much EU") + .addInfo("to be handled with conventional means. All EU requirements are handled directly by") + .addInfo("your wireless EU network.") + .addInfo(TOOLTIP_BAR) + .addInfo("This multiblock will constantly consume hydrogen and helium when it is not running a") + .addInfo("recipe once per second. It will store this internally, you can see the totals by") + .addInfo("using a scanner. This multi also has three tiered blocks with " + RED + 9 + GRAY + " tiers") + .addInfo("each. They are as follows and have the associated effects on the multi.") + .addInfo(BLUE + "Spacetime Compression Field Generator:") + .addInfo("- The tier of this block determines what recipes can be run. If the multiblocks") + .addInfo(" spacetime compression field block exceeds the requirements of the recipe it") + .addInfo( + " will decrease the processing time by " + RED + + formatNumbers(SPACETIME_CASING_DIFFERENCE_DISCOUNT_PERCENTAGE * 100) + + "%" + + GRAY + + " per tier over the requirement (multiplicative).") + .addInfo(BLUE + "Time Dilation Field Generator:") + .addInfo( + "- Decreases the time required for a recipe by " + RED + + "50%" + + GRAY + + " per tier of block (multiplicative).") + .addInfo( + " Decreases the probability of a recipe succeeding by " + RED + + formatNumbers(TIME_ACCEL_DECREASE_CHANCE_PER_TIER * 100) + + "%" + + GRAY + + " per tier (additive)") + .addInfo(BLUE + "Stabilisation Field Generator:") + .addInfo( + "- Increases the probability of a recipe succeeding by " + RED + + formatNumbers(STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER * 100) + + "%" + + GRAY + + " per tier (additive).") + .addInfo( + " Decreases the yield of a recipe by " + RED + + formatNumbers(STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER * 100) + + "%" + + GRAY + + " per tier (additive). ") + .addInfo(" > Low tier stabilisation field generators have a power output penalty.") + .addInfo( + " The power output penalty for using Crude Stabilisation Field Generators is " + RED + + formatNumbers( + STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER * TOTAL_CASING_TIERS_WITH_POWER_PENALTY + * 100) + + "%" + + GRAY + + ".") + .addInfo( + " This penalty decreases by " + RED + + formatNumbers(STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER * 100) + + "%" + + GRAY + + " per tier (additive).") + .addInfo(TOOLTIP_BAR) + .addInfo("Going over a recipe requirement on hydrogen or helium has a penalty on yield and recipe chance.") + .addInfo("All stored hydrogen and helium is consumed during a craft. The associated formulas are:") + .addInfo(GREEN + "Overflow ratio = (Stored fluid / Recipe requirement) - 1") + .addInfo(GREEN + "Adjustment value = 1 - exp(-(30 * Overflow ratio)^2)") + .addInfo("The Adjustment value is then subtracted from the total yield and recipe chance.") + .addInfo(TOOLTIP_BAR) + .addInfo("It should be noted that base recipe chance is determined per recipe and yield always starts") + .addInfo("at 1 and subtracts depending on penalties. All fluid/item outputs are multiplied by the") + .addInfo("yield. Failure fluid is exempt.") + .addInfo(TOOLTIP_BAR) + .addInfo("This multiblock can only output to ME output buses/hatches.") + .addInfo(TOOLTIP_BAR) + .addInfo("This multiblock can be overclocked by placing a programmed circuit into the input bus.") + .addInfo( + "E.g. A circuit of 2 will provide 2 OCs, 16x EU input and 0.25x the time. EU output is unaffected.") + .addInfo("All outputs are equal. All item and fluid output chances & amounts per recipe are unaffected.") + .addInfo(TOOLTIP_BAR) + .addInfo( + "If a recipe fails the EOH will output " + GREEN + + "Success chance * " + + formatNumbers(MOLTEN_SPACETIME_PER_FAILURE_TIER) + + " * (" + + SPACETIME_FAILURE_BASE + + ")^(Recipe tier)" + + GRAY + + "L of molten") + .addInfo( + MaterialsUEVplus.SpaceTime.getLocalizedNameForItem("%material") + + " instead of fluid/item outputs and output as much EU as a successful recipe.") + .addInfo(TOOLTIP_BAR) + .addInfo( + "This multiblock can perform parallel processing by placing Astral Array Fabricators into the input bus.") + .addInfo( + "They are stored internally and can be retrieved via right-clicking the controller with a wire cutter.") + .addInfo( + "The maximum amount of stored Astral Arrays is " + formatNumbers(ASTRAL_ARRAY_LIMIT) + + ". The amount of parallel is calculated via these formulas:") + .addInfo( + GREEN + "Parallel exponent = floor(log(" + + formatNumbers(PARALLEL_FOR_FIRST_ASTRAL_ARRAY) + + " * Astral Array amount) / log(" + + formatNumbers(CONSTANT_FOR_LOG) + + "))") + .addInfo(GREEN + "Parallel = 2^(Parallel exponent)") + .addInfo("If the EOH is running parallel recipes, the power calculation changes.") + .addInfo("The power needed for parallel processing is calculated as follows:") + .addInfo( + GREEN + "total EU = ((EU output - EU input * " + + formatNumbers(PARALLEL_MULTIPLIER_CONSTANT) + + ") / " + + formatNumbers(POWER_DIVISION_CONSTANT) + + ") * " + + formatNumbers(POWER_INCREASE_CONSTANT) + + "^(Parallel exponent)") + .addInfo( + "Furthermore, if parallel recipes are run, the recipes consume " + + MaterialsUEVplus.RawStarMatter.getLocalizedNameForItem("%material")) + .addInfo("instead of helium and hydrogen. Overflow penalties still apply.") + .addInfo( + "The required amount of fluid to start a recipe is " + GREEN + + "12.4 / 10^6 * Helium amount * Parallel" + + GRAY + + ".") + .addInfo("The success or failure of each parallel is determined independently.") + .addInfo(TOOLTIP_BAR) + .addInfo("Animations can be disabled by using a screwdriver on the multiblock.") + .addInfo("Planet block can be inserted directly by right-clicking the controller with planet block.") + .addSeparator() + .addStructureInfo("Eye of Harmony structure is too complex! See schematic for details.") + .addStructureInfo( + EnumChatFormatting.GOLD + "896" + EnumChatFormatting.GRAY + " Reinforced Spatial Structure Casing.") + .addStructureInfo( + EnumChatFormatting.GOLD + "534" + EnumChatFormatting.GRAY + " Reinforced Temporal Structure Casing.") + .addStructureInfo( + EnumChatFormatting.GOLD + "31" + + EnumChatFormatting.GRAY + + " Infinite SpaceTime Energy Boundary Casing.") + .addStructureInfo( + EnumChatFormatting.GOLD + "168" + EnumChatFormatting.GRAY + " Time Dilation Field Generator.") + .addStructureInfo( + EnumChatFormatting.GOLD + "48" + EnumChatFormatting.GRAY + " Stabilisation Field Generator.") + .addStructureInfo( + EnumChatFormatting.GOLD + "138" + EnumChatFormatting.GRAY + " Spacetime Compression Field Generator.") + .addStructureInfo("--------------------------------------------") + .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 2 + EnumChatFormatting.GRAY + " input hatches.") + .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " ME output hatch.") + .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " input bus.") + .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " ME output bus.") + .addStructureInfo("--------------------------------------------") + .beginStructureBlock(33, 33, 33, false) + .toolTipFinisher(AuthorColen.substring(8) + EnumChatFormatting.GRAY + "&" + CommonValues.TEC_MARK_EM); + return tt; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/EM_BHG"); + ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/EM_BHG_ACTIVE"); + super.registerIcons(aBlockIconRegister); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][12], + new TTRenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][12] }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(STRUCTURE_PIECE_MAIN, 16, 16, 0, stackSize, hintsOnly); + } + + private final Map validFluidMap = new HashMap<>() { + + private static final long serialVersionUID = -8452610443191188130L; + + { + put(Materials.Hydrogen.mGas, 0L); + put(Materials.Helium.mGas, 0L); + put(MaterialsUEVplus.RawStarMatter.mFluid, 0L); + } + }; + + private void drainFluidFromHatchesAndStoreInternally() { + List fluidStacks = getStoredFluids(); + for (FluidStack fluidStack : fluidStacks) { + if (validFluidMap.containsKey(fluidStack.getFluid())) { + validFluidMap.merge(fluidStack.getFluid(), (long) fluidStack.amount, Long::sum); + fluidStack.amount = 0; + } + } + updateSlots(); + } + + @Override + public RecipeMap getRecipeMap() { + // Only for visual + return TecTechRecipeMaps.eyeOfHarmonyRecipes; + } + + private EyeOfHarmonyRecipe currentRecipe; + + // Counter for lag prevention. + private long lagPreventer = 0; + + // Check for recipe every recipeCheckInterval ticks. + private static final long RECIPE_CHECK_INTERVAL = 3 * 20; + private long currentCircuitMultiplier = 0; + private long astralArrayAmount = 0; + private long parallelAmount = 1; + private long successfulParallelAmount = 0; + private double yield = 0; + private BigInteger usedEU = BigInteger.ZERO; + private FluidStackLong stellarPlasma; + private FluidStackLong starMatter; + + @Override + @NotNull + protected CheckRecipeResult checkProcessing_EM() { + ItemStack controllerStack = getControllerSlot(); + if (controllerStack == null) { + return SimpleCheckRecipeResult.ofFailure("no_planet_block"); + } + + lagPreventer++; + if (lagPreventer < RECIPE_CHECK_INTERVAL) { + lagPreventer = 0; + // No item in multi gui slot. + + currentRecipe = TecTech.eyeOfHarmonyRecipeStorage.recipeLookUp(controllerStack); + if (currentRecipe == null) { + return CheckRecipeResultRegistry.NO_RECIPE; + } + CheckRecipeResult result = processRecipe(currentRecipe); + if (!result.wasSuccessful()) currentRecipe = null; + return result; + } + return CheckRecipeResultRegistry.NO_RECIPE; + } + + private long getHydrogenStored() { + return validFluidMap.get(Materials.Hydrogen.mGas); + } + + private long getHeliumStored() { + return validFluidMap.get(Materials.Helium.mGas); + } + + private long getStellarPlasmaStored() { + return validFluidMap.get(MaterialsUEVplus.RawStarMatter.mFluid); + } + + public CheckRecipeResult processRecipe(EyeOfHarmonyRecipe recipeObject) { + + // Get circuit damage, clamp it and then use it later for overclocking. + currentCircuitMultiplier = 0; + for (ItemStack itemStack : mInputBusses.get(0) + .getRealInventory()) { + if (GTUtility.isAnyIntegratedCircuit(itemStack)) { + currentCircuitMultiplier = MathHelper.clamp_int(itemStack.getItemDamage(), 0, 24); + break; + } + } + + for (ItemStack itemStack : mInputBusses.get(0) + .getRealInventory()) { + if (astralArrayAmount >= ASTRAL_ARRAY_LIMIT) break; + if (itemStack != null && itemStack.isItemEqual(CustomItemList.astralArrayFabricator.get(1))) { + long insertAmount = Math.min(itemStack.stackSize, ASTRAL_ARRAY_LIMIT - astralArrayAmount); + astralArrayAmount += insertAmount; + itemStack.stackSize -= insertAmount; + } + } + + long parallelExponent = 1; + + if (astralArrayAmount != 0) { + parallelExponent = (long) Math.floor( + Math.log(PARALLEL_FOR_FIRST_ASTRAL_ARRAY * Math.min(astralArrayAmount, ASTRAL_ARRAY_LIMIT)) + / LOG_CONSTANT); + parallelAmount = (long) pow(2, parallelExponent); + } else { + parallelAmount = 1; + } + + // Debug mode, overwrites the required fluids to initiate the recipe to 100L of each. + if (parallelAmount > 1) { + if ((EOH_DEBUG_MODE && getStellarPlasmaStored() < 100) || (!EOH_DEBUG_MODE && getStellarPlasmaStored() + < currentRecipe.getHeliumRequirement() * (12.4 / 1_000_000f) * parallelAmount)) { + return SimpleCheckRecipeResult.ofFailure("no_stellar_plasma"); + } + } + + if (parallelAmount == 1) { + if ((EOH_DEBUG_MODE && getHydrogenStored() < 100) + || (!EOH_DEBUG_MODE && getHydrogenStored() < currentRecipe.getHydrogenRequirement())) { + return SimpleCheckRecipeResult.ofFailure("no_hydrogen"); + } + + if ((EOH_DEBUG_MODE && getHeliumStored() < 100) + || (!EOH_DEBUG_MODE && getHeliumStored() < currentRecipe.getHeliumRequirement())) { + return SimpleCheckRecipeResult.ofFailure("no_helium"); + } + } + + if (spacetimeCompressionFieldMetadata == -1) { + return CheckRecipeResultRegistry + .insufficientMachineTier((int) recipeObject.getSpacetimeCasingTierRequired()); + } + + // Check tier of spacetime compression blocks is high enough. + if (spacetimeCompressionFieldMetadata < recipeObject.getSpacetimeCasingTierRequired()) { + return CheckRecipeResultRegistry + .insufficientMachineTier((int) recipeObject.getSpacetimeCasingTierRequired()); + } + + // Calculate multipliers used in power calculations + double powerMultiplier = Math.max(1, Math.pow(POWER_INCREASE_CONSTANT, parallelExponent)); + + // Determine EU recipe input + startEU = recipeObject.getEUStartCost(); + + // Calculate normal EU values + double outputEUPenalty = (TOTAL_CASING_TIERS_WITH_POWER_PENALTY - stabilisationFieldMetadata) + * STABILITY_INCREASE_PROBABILITY_DECREASE_YIELD_PER_TIER; + outputEU_BigInt = BigInteger.valueOf((long) (recipeObject.getEUOutput() * (1 - outputEUPenalty))); + usedEU = BigInteger.valueOf(-startEU) + .multiply(BigInteger.valueOf((long) Math.pow(4, currentCircuitMultiplier))); + + // Calculate parallel EU values + if (parallelAmount > 1) { + outputEU_BigInt = outputEU_BigInt + .multiply(BigInteger.valueOf((long) (powerMultiplier * PRECISION_MULTIPLIER))) + .divide(BigInteger.valueOf((long) (PRECISION_MULTIPLIER * POWER_DIVISION_CONSTANT))); + + usedEU = usedEU + .multiply( + BigInteger.valueOf((long) (powerMultiplier * PARALLEL_MULTIPLIER_CONSTANT * PRECISION_MULTIPLIER))) + .divide(BigInteger.valueOf((long) (PRECISION_MULTIPLIER * POWER_DIVISION_CONSTANT))); + } + + // Remove EU from the users network. + if (!addEUToGlobalEnergyMap(userUUID, usedEU)) { + return CheckRecipeResultRegistry.insufficientStartupPower(usedEU.abs()); + } + + mMaxProgresstime = recipeProcessTimeCalculator( + recipeObject.getRecipeTimeInTicks(), + recipeObject.getSpacetimeCasingTierRequired()); + + calculateInputFluidExcessValues(recipeObject.getHydrogenRequirement(), recipeObject.getHeliumRequirement()); + + if (EOH_DEBUG_MODE) { + hydrogenOverflowProbabilityAdjustment = 0; + heliumOverflowProbabilityAdjustment = 0; + stellarPlasmaOverflowProbabilityAdjustment = 0; + } + + successChance = recipeChanceCalculator(); + currentRecipeRocketTier = currentRecipe.getRocketTier(); + + // Reduce internal storage by input fluid quantity required for recipe. + if (parallelAmount > 1) { + validFluidMap.put(MaterialsUEVplus.RawStarMatter.mFluid, 0L); + } else { + validFluidMap.put(Materials.Hydrogen.mGas, 0L); + validFluidMap.put(Materials.Helium.mGas, 0L); + } + + yield = recipeYieldCalculator(); + if (EOH_DEBUG_MODE) { + successChance = 1; // Debug recipes, sets them to 100% output chance. + } + + // Return copies of the output objects. + outputFluids = recipeObject.getOutputFluids(); + outputItems = recipeObject.getOutputItems(); + + // Star matter is always the last element in the array. + starMatter = new FluidStackLong(outputFluids.get(outputFluids.size() - 1)); + + // And stellar plasma is the second last. + stellarPlasma = new FluidStackLong(outputFluids.get(outputFluids.size() - 2)); + + successfulParallelAmount = (long) calculateChancedOutputMultiplier( + (int) (10000 * successChance), + (int) parallelAmount); + // Iterate over item output list and apply yield & successful parallel values. + for (ItemStackLong itemStackLong : outputItems) { + itemStackLong.stackSize *= yield * successfulParallelAmount; + } + + // Iterate over fluid output list and apply yield & successful parallel values. + for (FluidStackLong fluidStackLong : outputFluids) { + fluidStackLong.amount *= yield * successfulParallelAmount; + } + + updateSlots(); + + if (animationsEnabled) { + createRenderBlock(currentRecipe); + } + + recipeRunning = true; + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + private void createRenderBlock(final EyeOfHarmonyRecipe currentRecipe) { + + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + double xOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetY; + + this.getBaseMetaTileEntity() + .getWorld() + .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); + this.getBaseMetaTileEntity() + .getWorld() + .setBlock( + (int) (x + xOffset), + (int) (y + yOffset), + (int) (z + zOffset), + TTCasingsContainer.eyeOfHarmonyRenderBlock); + TileEntityEyeOfHarmony rendererTileEntity = (TileEntityEyeOfHarmony) this.getBaseMetaTileEntity() + .getWorld() + .getTileEntity((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset)); + + rendererTileEntity.setTier(currentRecipe.getRocketTier()); + + int recipeSpacetimeTier = (int) currentRecipe.getSpacetimeCasingTierRequired(); + + // Star is a larger size depending on the spacetime tier of the recipe. + rendererTileEntity.setSize((1 + recipeSpacetimeTier)); + + // Star rotates faster the higher tier time dilation you use in the multi. + // Lower value = faster rotation speed. + rendererTileEntity.setRotationSpeed((1 + timeAccelerationFieldMetadata) / 2.0f); + } + + private double successChance; + private long currentRecipeRocketTier; + + private void outputFailedChance() { + long failedParallelAmount = parallelAmount - successfulParallelAmount; + if (failedParallelAmount > 0) { + // 2^Tier spacetime released upon recipe failure. + outputFluidToAENetwork( + MaterialsUEVplus.SpaceTime.getMolten(1), + (long) ((successChance * MOLTEN_SPACETIME_PER_FAILURE_TIER + * pow(SPACETIME_FAILURE_BASE, currentRecipeRocketTier + 1)) * failedParallelAmount)); + } + super.outputAfterRecipe_EM(); + } + + @Override + public void stopMachine(@Nonnull ShutDownReason reason) { + super.stopMachine(reason); + destroyRenderBlock(); + recipeRunning = false; + } + + @Override + public void onBlockDestroyed() { + super.onBlockDestroyed(); + destroyRenderBlock(); + } + + private void destroyRenderBlock() { + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + double xOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = 16 * getExtendedFacing().getRelativeBackInWorld().offsetY; + + this.getBaseMetaTileEntity() + .getWorld() + .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); + } + + public void outputAfterRecipe_EM() { + recipeRunning = false; + eRequiredData = 0L; + + destroyRenderBlock(); + + // Output EU + addEUToGlobalEnergyMap(userUUID, outputEU_BigInt); + + startEU = 0; + outputEU_BigInt = BigInteger.ZERO; + + outputFailedChance(); + + if (successfulParallelAmount > 0) { + for (ItemStackLong itemStack : outputItems) { + outputItemToAENetwork(itemStack.itemStack, itemStack.stackSize); + } + + for (FluidStackLong fluidStack : outputFluids) { + outputFluidToAENetwork(fluidStack.fluidStack, fluidStack.amount); + } + } + + // Clear the array list for new recipes. + outputItems = new ArrayList<>(); + outputFluids = new ArrayList<>(); + + // Do other stuff from TT superclasses. E.g. outputting fluids. + super.outputAfterRecipe_EM(); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + + if (aTick == 1) { + userUUID = getBaseMetaTileEntity().getOwnerUuid(); + strongCheckOrAddUser(userUUID); + } + + if (!recipeRunning && mMachine) { + if ((aTick % TICKS_BETWEEN_HATCH_DRAIN) == 0) { + drainFluidFromHatchesAndStoreInternally(); + } + } + } + + private boolean recipeRunning = false; + + private void outputItemToAENetwork(ItemStack item, long amount) { + if (item == null || amount <= 0) return; + + while (amount >= Integer.MAX_VALUE) { + ItemStack tmpItem = item.copy(); + tmpItem.stackSize = Integer.MAX_VALUE; + ((MTEHatchOutputBusME) mOutputBusses.get(0)).store(tmpItem); + amount -= Integer.MAX_VALUE; + } + ItemStack tmpItem = item.copy(); + tmpItem.stackSize = (int) amount; + ((MTEHatchOutputBusME) mOutputBusses.get(0)).store(tmpItem); + } + + private void outputFluidToAENetwork(FluidStack fluid, long amount) { + if (fluid == null || amount <= 0) return; + + while (amount >= Integer.MAX_VALUE) { + FluidStack tmpFluid = fluid.copy(); + tmpFluid.amount = Integer.MAX_VALUE; + ((MTEHatchOutputME) mOutputHatches.get(0)).tryFillAE(tmpFluid); + amount -= Integer.MAX_VALUE; + } + FluidStack tmpFluid = fluid.copy(); + tmpFluid.amount = (int) amount; + ((MTEHatchOutputME) mOutputHatches.get(0)).tryFillAE(tmpFluid); + } + + @Override + public String[] getInfoData() { + ArrayList str = new ArrayList<>(Arrays.asList(super.getInfoData())); + str.add(GOLD + "---------------- Control Block Statistics ----------------"); + if (spacetimeCompressionFieldMetadata < 0) { + str.add("Spacetime Compression Field Grade: None"); + } else { + str.add( + "Spacetime Compression Field Grade: " + + CommonValues.EOH_TIER_FANCY_NAMES[spacetimeCompressionFieldMetadata] + + RESET + + " (" + + YELLOW + + spacetimeCompressionFieldMetadata + + RESET + + ")"); + } + if (timeAccelerationFieldMetadata < 0) { + str.add("Time Dilation Field Grade: None"); + } else { + str.add( + "Time Dilation Field Grade: " + CommonValues.EOH_TIER_FANCY_NAMES[timeAccelerationFieldMetadata] + + RESET + + " (" + + YELLOW + + timeAccelerationFieldMetadata + + RESET + + ")"); + } + if (stabilisationFieldMetadata < 0) { + str.add("Stabilisation Field Grade: None"); + } else { + str.add( + "Stabilisation Field Grade: " + CommonValues.EOH_TIER_FANCY_NAMES[stabilisationFieldMetadata] + + RESET + + " (" + + YELLOW + + stabilisationFieldMetadata + + RESET + + ")"); + } + str.add(GOLD + "----------------- Internal Storage ----------------"); + validFluidMap.forEach( + (key, value) -> str.add(BLUE + key.getLocalizedName() + RESET + " : " + RED + formatNumbers(value))); + str.add(BLUE + "Astral Array Fabricators" + RESET + " : " + RED + formatNumbers(astralArrayAmount)); + if (recipeRunning) { + str.add(GOLD + "---------------------- Other Stats ---------------"); + str.add("Recipe Success Chance: " + RED + formatNumbers(100 * successChance) + RESET + "%"); + str.add("Recipe Yield: " + RED + formatNumbers(100 * yield) + RESET + "%"); + str.add( + "Effective Astral Array Fabricators: " + RED + + formatNumbers(Math.min(astralArrayAmount, ASTRAL_ARRAY_LIMIT))); + str.add("Total Parallel: " + RED + formatNumbers(parallelAmount)); + str.add("EU Output: " + RED + toStandardForm(outputEU_BigInt) + RESET + " EU"); + str.add("EU Input: " + RED + toStandardForm(usedEU.abs()) + RESET + " EU"); + int currentMaxProgresstime = Math.max(maxProgresstime(), 1); + if (starMatter != null && starMatter.fluidStack != null) { + FluidStackLong starMatterOutput = new FluidStackLong( + starMatter.fluidStack, + (long) (starMatter.amount * yield * successChance * parallelAmount)); + str.add( + "Average " + starMatterOutput.fluidStack.getLocalizedName() + + " Output: " + + RED + + formatNumbers(starMatterOutput.amount) + + RESET + + " L, " + + YELLOW + + formatNumbers(starMatterOutput.amount * 20.0 / currentMaxProgresstime) + + RESET + + " L/s"); + + FluidStackLong stellarPlasmaOutput = new FluidStackLong( + MaterialsUEVplus.RawStarMatter.getFluid(0), + (long) (stellarPlasma.amount * yield * successChance * parallelAmount)); + str.add( + "Average " + stellarPlasmaOutput.fluidStack.getLocalizedName() + + " Output: " + + RED + + formatNumbers(stellarPlasmaOutput.amount) + + RESET + + " L, " + + YELLOW + + formatNumbers(stellarPlasmaOutput.amount * 20.0 / currentMaxProgresstime) + + RESET + + " L/s"); + } + BigInteger euPerTick = (outputEU_BigInt.subtract(usedEU.abs())) + .divide(BigInteger.valueOf(currentMaxProgresstime)); + + str.add("Estimated EU/t: " + RED + toStandardForm(euPerTick) + RESET + " EU/t"); + } + str.add(GOLD + "-----------------------------------------------------"); + return str.toArray(new String[0]); + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return new String[] { "Eye of Harmony multiblock" }; + } + + // NBT save/load strings. + private static final String EYE_OF_HARMONY = "eyeOfHarmonyOutput"; + private static final String NUMBER_OF_ITEMS_NBT_TAG = EYE_OF_HARMONY + "numberOfItems"; + private static final String NUMBER_OF_FLUIDS_NBT_TAG = EYE_OF_HARMONY + "numberOfFluids"; + private static final String ITEM_OUTPUT_NBT_TAG = EYE_OF_HARMONY + "itemOutput"; + private static final String FLUID_OUTPUT_NBT_TAG = EYE_OF_HARMONY + "fluidOutput"; + private static final String RECIPE_RUNNING_NBT_TAG = EYE_OF_HARMONY + "recipeRunning"; + private static final String CURRENT_RECIPE_STAR_MATTER_TAG = EYE_OF_HARMONY + "recipeStarMatter"; + private static final String CURRENT_RECIPE_STELLAR_PLASMA_TAG = EYE_OF_HARMONY + "recipeStellarPlasma"; + private static final String CURRENT_RECIPE_FIXED_OUTPUTS_TAG = EYE_OF_HARMONY + "recipeFixedOutputs"; + private static final String RECIPE_SUCCESS_CHANCE_NBT_TAG = EYE_OF_HARMONY + "recipeSuccessChance"; + private static final String ROCKET_TIER_NBT_TAG = EYE_OF_HARMONY + "rocketTier"; + private static final String CURRENT_CIRCUIT_MULTIPLIER_TAG = EYE_OF_HARMONY + "currentCircuitMultiplier"; + private static final String ANIMATIONS_ENABLED = EYE_OF_HARMONY + "animationsEnabled"; + private static final String CALCULATED_EU_OUTPUT_NBT_TAG = EYE_OF_HARMONY + "outputEU_BigInt"; + private static final String PARALLEL_AMOUNT_NBT_TAG = EYE_OF_HARMONY + "parallelAmount"; + private static final String YIELD_NBT_TAG = EYE_OF_HARMONY + "yield"; + private static final String SUCCESSFUL_PARALLEL_AMOUNT_NBT_TAG = EYE_OF_HARMONY + "successfulParallelAmount"; + private static final String ASTRAL_ARRAY_AMOUNT_NBT_TAG = EYE_OF_HARMONY + "astralArrayAmount"; + private static final String CALCULATED_EU_INPUT_NBT_TAG = EYE_OF_HARMONY + "usedEU"; + + // Sub tags, less specific names required. + private static final String STACK_SIZE = "stackSize"; + private static final String ITEM_STACK_NBT_TAG = "itemStack"; + private static final String FLUID_AMOUNT = "fluidAmount"; + private static final String FLUID_STACK_NBT_TAG = "fluidStack"; + + // Tags for pre-setting + public static final String PLANET_BLOCK = "planetBlock"; + + @Override + public void initDefaultModes(NBTTagCompound aNBT) { + super.initDefaultModes(aNBT); + if (aNBT != null && aNBT.hasKey(PLANET_BLOCK) && getControllerSlot() == null) { + mInventory[getControllerSlotIndex()] = new ItemStack(ModBlocks.getBlock(aNBT.getString(PLANET_BLOCK))); + aNBT.removeTag(PLANET_BLOCK); + } + } + + @Override + public void addAdditionalTooltipInformation(ItemStack stack, List tooltip) { + if (stack.hasTagCompound() && stack.getTagCompound() + .hasKey(PLANET_BLOCK)) { + tooltip.add( + 1, + GTLanguageManager.addStringLocalization("EOH_Controller_PlanetBlock", "Current Planet Block: ") + AQUA + + new ItemStack( + ModBlocks.getBlock( + stack.getTagCompound() + .getString(PLANET_BLOCK))).getDisplayName()); + } + } + + @Override + public void setItemNBT(NBTTagCompound NBT) { + NBT.setLong(ASTRAL_ARRAY_AMOUNT_NBT_TAG, astralArrayAmount); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + // Save the quantity of fluid stored inside the controller. + validFluidMap.forEach((key, value) -> aNBT.setLong("stored." + key.getUnlocalizedName(), value)); + + aNBT.setBoolean(RECIPE_RUNNING_NBT_TAG, recipeRunning); + aNBT.setDouble(RECIPE_SUCCESS_CHANCE_NBT_TAG, successChance); + aNBT.setLong(ROCKET_TIER_NBT_TAG, currentRecipeRocketTier); + aNBT.setLong(CURRENT_CIRCUIT_MULTIPLIER_TAG, currentCircuitMultiplier); + aNBT.setBoolean(ANIMATIONS_ENABLED, animationsEnabled); + aNBT.setLong(PARALLEL_AMOUNT_NBT_TAG, parallelAmount); + aNBT.setLong(SUCCESSFUL_PARALLEL_AMOUNT_NBT_TAG, successfulParallelAmount); + aNBT.setDouble(YIELD_NBT_TAG, yield); + aNBT.setLong(ASTRAL_ARRAY_AMOUNT_NBT_TAG, astralArrayAmount); + aNBT.setByteArray(CALCULATED_EU_OUTPUT_NBT_TAG, outputEU_BigInt.toByteArray()); + aNBT.setByteArray(CALCULATED_EU_INPUT_NBT_TAG, usedEU.toByteArray()); + + // Store damage values/stack sizes of GT items being outputted. + NBTTagCompound itemStackListNBTTag = new NBTTagCompound(); + itemStackListNBTTag.setLong(NUMBER_OF_ITEMS_NBT_TAG, outputItems.size()); + + int index = 0; + for (ItemStackLong itemStackLong : outputItems) { + // Save stack size to NBT. + itemStackListNBTTag.setLong(index + STACK_SIZE, itemStackLong.stackSize); + + // Save ItemStack to NBT. + aNBT.setTag(index + ITEM_STACK_NBT_TAG, itemStackLong.itemStack.writeToNBT(new NBTTagCompound())); + + index++; + } + + aNBT.setTag(ITEM_OUTPUT_NBT_TAG, itemStackListNBTTag); + + // Store damage values/stack sizes of GT fluids being outputted. + NBTTagCompound fluidStackListNBTTag = new NBTTagCompound(); + fluidStackListNBTTag.setLong(NUMBER_OF_FLUIDS_NBT_TAG, outputFluids.size()); + + int indexFluids = 0; + for (FluidStackLong fluidStackLong : outputFluids) { + // Save fluid amount to NBT. + fluidStackListNBTTag.setLong(indexFluids + FLUID_AMOUNT, fluidStackLong.amount); + + // Save FluidStack to NBT. + aNBT.setTag(indexFluids + FLUID_STACK_NBT_TAG, fluidStackLong.fluidStack.writeToNBT(new NBTTagCompound())); + + indexFluids++; + } + + aNBT.setTag(FLUID_OUTPUT_NBT_TAG, fluidStackListNBTTag); + + if (starMatter != null && starMatter.fluidStack != null) { + + NBTTagCompound fixedRecipeOutputs = new NBTTagCompound(); + + fixedRecipeOutputs.setLong(0 + FLUID_AMOUNT, starMatter.amount); + aNBT.setTag(CURRENT_RECIPE_STAR_MATTER_TAG, starMatter.fluidStack.writeToNBT(new NBTTagCompound())); + + fixedRecipeOutputs.setLong(1 + FLUID_AMOUNT, stellarPlasma.amount); + aNBT.setTag(CURRENT_RECIPE_STELLAR_PLASMA_TAG, stellarPlasma.fluidStack.writeToNBT(new NBTTagCompound())); + + aNBT.setTag(CURRENT_RECIPE_FIXED_OUTPUTS_TAG, fixedRecipeOutputs); + } + + super.saveNBTData(aNBT); + } + + @Override + public void loadNBTData(final NBTTagCompound aNBT) { + + // Load the quantity of fluid stored inside the controller. + validFluidMap + .forEach((key, value) -> validFluidMap.put(key, aNBT.getLong("stored." + key.getUnlocalizedName()))); + + // Load other stuff from NBT. + recipeRunning = aNBT.getBoolean(RECIPE_RUNNING_NBT_TAG); + successChance = aNBT.getDouble(RECIPE_SUCCESS_CHANCE_NBT_TAG); + currentRecipeRocketTier = aNBT.getLong(ROCKET_TIER_NBT_TAG); + currentCircuitMultiplier = aNBT.getLong(CURRENT_CIRCUIT_MULTIPLIER_TAG); + if (aNBT.hasKey(ANIMATIONS_ENABLED)) animationsEnabled = aNBT.getBoolean(ANIMATIONS_ENABLED); + parallelAmount = aNBT.getLong(PARALLEL_AMOUNT_NBT_TAG); + yield = aNBT.getDouble(YIELD_NBT_TAG); + successfulParallelAmount = aNBT.getLong(SUCCESSFUL_PARALLEL_AMOUNT_NBT_TAG); + astralArrayAmount = aNBT.getLong(ASTRAL_ARRAY_AMOUNT_NBT_TAG); + if (aNBT.hasKey(CALCULATED_EU_OUTPUT_NBT_TAG)) + outputEU_BigInt = new BigInteger(aNBT.getByteArray(CALCULATED_EU_OUTPUT_NBT_TAG)); + if (aNBT.hasKey(CALCULATED_EU_INPUT_NBT_TAG)) + usedEU = new BigInteger(aNBT.getByteArray(CALCULATED_EU_INPUT_NBT_TAG)); + + // Load damage values/stack sizes of GT items being outputted and convert back to items. + NBTTagCompound tempItemTag = aNBT.getCompoundTag(ITEM_OUTPUT_NBT_TAG); + + // Iterate over all stored items. + for (int index = 0; index < tempItemTag.getInteger(NUMBER_OF_ITEMS_NBT_TAG); index++) { + + // Load stack size from NBT. + long stackSize = tempItemTag.getLong(index + STACK_SIZE); + + // Load ItemStack from NBT. + ItemStack itemStack = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag(index + ITEM_STACK_NBT_TAG)); + + outputItems.add(new ItemStackLong(itemStack, stackSize)); + } + + // Load damage values/fluid amounts of GT fluids being outputted and convert back to fluids. + NBTTagCompound tempFluidTag = aNBT.getCompoundTag(FLUID_OUTPUT_NBT_TAG); + + // Iterate over all stored fluids. + for (int indexFluids = 0; indexFluids < tempFluidTag.getInteger(NUMBER_OF_FLUIDS_NBT_TAG); indexFluids++) { + + // Load fluid amount from NBT. + long fluidAmount = tempFluidTag.getLong(indexFluids + FLUID_AMOUNT); + + // Load FluidStack from NBT. + FluidStack fluidStack = FluidStack + .loadFluidStackFromNBT(aNBT.getCompoundTag(indexFluids + FLUID_STACK_NBT_TAG)); + + outputFluids.add(new FluidStackLong(fluidStack, fluidAmount)); + } + + tempFluidTag = aNBT.getCompoundTag(CURRENT_RECIPE_FIXED_OUTPUTS_TAG); + starMatter = new FluidStackLong( + FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag(CURRENT_RECIPE_STAR_MATTER_TAG)), + tempFluidTag.getLong(0 + FLUID_AMOUNT)); + stellarPlasma = new FluidStackLong( + FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag(CURRENT_RECIPE_STELLAR_PLASMA_TAG)), + tempFluidTag.getLong(1 + FLUID_AMOUNT)); + + super.loadNBTData(aNBT); + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEForgeOfGods.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEForgeOfGods.java new file mode 100644 index 0000000000..609a09815a --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEForgeOfGods.java @@ -0,0 +1,3059 @@ +package tectech.thing.metaTileEntity.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static gregtech.api.enums.Mods.Avaritia; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTModHandler.getModItem; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTUtility.formatNumbers; +import static java.lang.Math.floor; +import static java.lang.Math.log; +import static java.lang.Math.max; +import static net.minecraft.util.StatCollector.translateToLocal; +import static tectech.loader.recipe.Godforge.godforgeUpgradeMats; +import static tectech.thing.casing.TTCasingsContainer.GodforgeCasings; +import static tectech.thing.casing.TTCasingsContainer.forgeOfGodsRenderBlock; +import static tectech.util.GodforgeMath.allowModuleConnection; +import static tectech.util.GodforgeMath.calculateEnergyDiscountForModules; +import static tectech.util.GodforgeMath.calculateFuelConsumption; +import static tectech.util.GodforgeMath.calculateMaxFuelFactor; +import static tectech.util.GodforgeMath.calculateMaxHeatForModules; +import static tectech.util.GodforgeMath.calculateMaxParallelForModules; +import static tectech.util.GodforgeMath.calculateProcessingVoltageForModules; +import static tectech.util.GodforgeMath.calculateSpeedBonusForModules; +import static tectech.util.GodforgeMath.calculateStartupFuelConsumption; +import static tectech.util.GodforgeMath.queryMilestoneStats; +import static tectech.util.GodforgeMath.setMiscModuleParameters; +import static tectech.util.TTUtility.toExponentForm; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import com.google.common.collect.ImmutableList; +import com.google.common.math.LongMath; +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.ISurvivalBuildEnvironment; +import com.gtnewhorizons.modularui.api.ModularUITextures; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.ItemDrawable; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.forge.ItemStackHandler; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.MainAxisAlignment; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.FluidNameHolderWidget; +import com.gtnewhorizons.modularui.common.widget.MultiChildWidget; +import com.gtnewhorizons.modularui.common.widget.ProgressBar; +import com.gtnewhorizons.modularui.common.widget.Scrollable; +import com.gtnewhorizons.modularui.common.widget.SlotGroup; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Materials; +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.OrePrefixes; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTOreDictUnificator; +import gregtech.api.util.HatchElementBuilder; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.common.tileentities.machines.MTEHatchInputBusME; +import gregtech.common.tileentities.machines.MTEHatchInputME; +import gregtech.common.tileentities.machines.MTEHatchOutputBusME; +import tectech.TecTech; +import tectech.thing.block.BlockGodforgeGlass; +import tectech.thing.block.TileEntityForgeOfGods; +import tectech.thing.gui.TecTechUITextures; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTEBaseModule; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTEExoticModule; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTEMoltenModule; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTEPlasmaModule; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTESmeltingModule; +import tectech.util.CommonValues; + +public class MTEForgeOfGods extends TTMultiblockBase implements IConstructable, ISurvivalConstructable { + + private static Textures.BlockIcons.CustomIcon ScreenON; + + private int fuelConsumptionFactor = 1; + private int selectedFuelType = 0; + private int internalBattery = 0; + private int maxBatteryCharge = 100; + private int gravitonShardsAvailable = 0; + private int gravitonShardsSpent = 0; + private int ringAmount = 1; + private int stellarFuelAmount = 0; + private int neededStartupFuel = 0; + private long fuelConsumption = 0; + private long totalRecipesProcessed = 0; + private long totalFuelConsumed = 0; + private float totalExtensionsBuilt = 0; + private float powerMilestonePercentage = 0; + private float recipeMilestonePercentage = 0; + private float fuelMilestonePercentage = 0; + private float structureMilestonePercentage = 0; + private float invertedPowerMilestonePercentage = 0; + private float invertedRecipeMilestonePercentage = 0; + private float invertedFuelMilestonePercentage = 0; + private float invertedStructureMilestonePercentage = 0; + private BigInteger totalPowerConsumed = BigInteger.ZERO; + private boolean batteryCharging = false; + private boolean inversion = false; + private boolean gravitonShardEjection = false; + private boolean noFormatting = false; + private boolean isRenderActive = false; + public ArrayList moduleHatches = new ArrayList<>(); + protected ItemStackHandler inputSlotHandler = new ItemStackHandler(16); + + private static final int FUEL_CONFIG_WINDOW_ID = 9; + private static final int UPGRADE_TREE_WINDOW_ID = 10; + private static final int INDIVIDUAL_UPGRADE_WINDOW_ID = 11; + private static final int BATTERY_CONFIG_WINDOW_ID = 12; + private static final int MILESTONE_WINDOW_ID = 13; + private static final int INDIVIDUAL_MILESTONE_WINDOW_ID = 14; + private static final int MANUAL_INSERTION_WINDOW_ID = 15; + private static final int GENERAL_INFO_WINDOW_ID = 16; + private static final int TEXTURE_INDEX = 960; + private static final int[] FIRST_SPLIT_UPGRADES = new int[] { 12, 13, 14 }; + private static final Integer[] UPGRADE_MATERIAL_ID_CONVERSION = { 0, 5, 7, 11, 26, 29, 30 }; + private static final long POWER_MILESTONE_CONSTANT = LongMath.pow(10, 15); + private static final long RECIPE_MILESTONE_CONSTANT = LongMath.pow(10, 7); + private static final long FUEL_MILESTONE_CONSTANT = 10_000; + private static final long RECIPE_MILESTONE_T7_CONSTANT = RECIPE_MILESTONE_CONSTANT * LongMath.pow(6, 6); + private static final long FUEL_MILESTONE_T7_CONSTANT = FUEL_MILESTONE_CONSTANT * LongMath.pow(3, 6); + private static final BigInteger POWER_MILESTONE_T7_CONSTANT = BigInteger.valueOf(POWER_MILESTONE_CONSTANT) + .multiply(BigInteger.valueOf(LongMath.pow(9, 6))); + private static final double POWER_LOG_CONSTANT = Math.log(9); + private static final double RECIPE_LOG_CONSTANT = Math.log(6); + private static final double FUEL_LOG_CONSTANT = Math.log(3); + protected static final String STRUCTURE_PIECE_MAIN = "main"; + protected static final String STRUCTURE_PIECE_SHAFT = "beam_shaft"; + protected static final String STRUCTURE_PIECE_FIRST_RING = "first_ring"; + protected static final String STRUCTURE_PIECE_FIRST_RING_AIR = "first_ring_air"; + protected static final String STRUCTURE_PIECE_SECOND_RING = "second_ring"; + protected static final String STRUCTURE_PIECE_SECOND_RING_AIR = "second_ring_air"; + protected static final String STRUCTURE_PIECE_THIRD_RING = "third_ring"; + protected static final String STRUCTURE_PIECE_THIRD_RING_AIR = "third_ring_air"; + private static final String SCANNER_INFO_BAR = EnumChatFormatting.BLUE + + "--------------------------------------------"; + private static final String TOOLTIP_BAR = EnumChatFormatting.AQUA + + "--------------------------------------------------------------------------"; + private static final ItemStack STELLAR_FUEL = Avaritia.isModLoaded() ? getModItem(Avaritia.ID, "Resource", 1, 8) + : GTOreDictUnificator.get(OrePrefixes.block, Materials.CosmicNeutronium, 1); + + private final boolean debugMode = true; + + public int survivalConstruct(ItemStack stackSize, int elementBudget, ISurvivalBuildEnvironment env) { + if (mMachine) return -1; + int realBudget = elementBudget >= 1000 ? elementBudget : Math.min(1000, elementBudget * 5); + // 1000 blocks max per placement. + int built = survivialBuildPiece(STRUCTURE_PIECE_MAIN, stackSize, 63, 14, 1, realBudget, env, false, true); + if (stackSize.stackSize > 1) { + built += survivialBuildPiece( + STRUCTURE_PIECE_SECOND_RING, + stackSize, + 55, + 11, + -67, + realBudget, + env, + false, + true); + } + if (stackSize.stackSize > 2) { + built += survivialBuildPiece( + STRUCTURE_PIECE_THIRD_RING, + stackSize, + 47, + 13, + -76, + realBudget, + env, + false, + true); + } + return built; + } + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + + public static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape(STRUCTURE_PIECE_MAIN, ForgeOfGodsStructureString.MAIN_STRUCTURE) + .addShape(STRUCTURE_PIECE_SHAFT, ForgeOfGodsStructureString.BEAM_SHAFT) + .addShape(STRUCTURE_PIECE_FIRST_RING, ForgeOfGodsStructureString.FIRST_RING) + .addShape(STRUCTURE_PIECE_FIRST_RING_AIR, ForgeOfGodsStructureString.FIRST_RING_AIR) + .addShape(STRUCTURE_PIECE_SECOND_RING, ForgeOfGodsRingsStructureString.SECOND_RING) + .addShape(STRUCTURE_PIECE_SECOND_RING_AIR, ForgeOfGodsRingsStructureString.SECOND_RING_AIR) + .addShape(STRUCTURE_PIECE_THIRD_RING, ForgeOfGodsRingsStructureString.THIRD_RING) + .addShape(STRUCTURE_PIECE_THIRD_RING_AIR, ForgeOfGodsRingsStructureString.THIRD_RING_AIR) + .addElement('A', classicHatches(TEXTURE_INDEX + 3, 1, GodforgeCasings, 3)) + .addElement('B', ofBlock(GodforgeCasings, 0)) + .addElement('C', ofBlock(GodforgeCasings, 1)) + .addElement('D', ofBlock(GodforgeCasings, 2)) + .addElement('E', ofBlock(GodforgeCasings, 3)) + .addElement('F', ofBlock(GodforgeCasings, 4)) + .addElement('G', ofBlock(GodforgeCasings, 5)) + .addElement('H', ofBlock(BlockGodforgeGlass.INSTANCE, 0)) + .addElement('I', ofBlock(GodforgeCasings, 7)) + .addElement( + 'J', + HatchElementBuilder.builder() + .atLeast(moduleElement.Module) + .casingIndex(TEXTURE_INDEX) + .dot(3) + .buildAndChain(GodforgeCasings, 0)) + .addElement('K', ofBlock(GodforgeCasings, 6)) + .addElement('L', ofBlock(Blocks.air, 0)) + .build(); + + public MTEForgeOfGods(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEForgeOfGods(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEForgeOfGods(mName); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/GODFORGE_CONTROLLER"); + super.registerIcons(aBlockIconRegister); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX + 1), + TextureFactory.builder() + .addIcon(ScreenON) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(ScreenON) + .extFacing() + .glow() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX + 1) }; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(STRUCTURE_PIECE_MAIN, 63, 14, 1, stackSize, hintsOnly); + if (stackSize.stackSize > 1) { + buildPiece(STRUCTURE_PIECE_SECOND_RING, stackSize, hintsOnly, 55, 11, -67); + } + if (stackSize.stackSize > 2) { + buildPiece(STRUCTURE_PIECE_THIRD_RING, stackSize, hintsOnly, 47, 13, -76); + } + } + + private final ArrayList validFuelList = new ArrayList<>() { + + { + add(MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1)); + add(MaterialsUEVplus.RawStarMatter.getFluid(1)); + add(MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(1)); + } + }; + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + + moduleHatches.clear(); + + // Check structure of multi + if (isRenderActive) { + if (!structureCheck_EM(STRUCTURE_PIECE_SHAFT, 63, 14, 1) + || !structureCheck_EM(STRUCTURE_PIECE_FIRST_RING_AIR, 63, 14, -59)) { + destroyRenderer(); + return false; + } + } else if (!structureCheck_EM(STRUCTURE_PIECE_MAIN, 63, 14, 1)) { + return false; + } + + if (internalBattery != 0 && !isRenderActive) { + createRenderer(); + } + + // Check there is 1 input bus + if (mInputBusses.size() != 1) { + return false; + } + + // Check there is 1 me output bus + { + if (mOutputBusses.size() != 1) { + return false; + } + + if (!(mOutputBusses.get(0) instanceof MTEHatchOutputBusME)) { + return false; + } + } + + // Make sure there are no energy hatches + { + if (mEnergyHatches.size() > 0) { + return false; + } + + if (mExoticEnergyHatches.size() > 0) { + return false; + } + } + + // Make sure there is 1 input hatch + if (mInputHatches.size() != 1) { + return false; + } + + if (isUpgradeActive(26)) { + if (checkPiece(STRUCTURE_PIECE_SECOND_RING, 55, 11, -67)) { + ringAmount = 2; + } + if (isRenderActive && ringAmount >= 2 && !checkPiece(STRUCTURE_PIECE_SECOND_RING_AIR, 55, 11, -67)) { + destroyRenderer(); + } + } + + if (isUpgradeActive(29)) { + if (checkPiece(STRUCTURE_PIECE_THIRD_RING, 47, 13, -76)) { + ringAmount = 3; + } + if (isRenderActive && ringAmount == 3 && !checkPiece(STRUCTURE_PIECE_THIRD_RING_AIR, 47, 13, -76)) { + destroyRenderer(); + } + } + + return true; + } + + int ticker = 0; + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide()) { + ticker++; + // Check and drain fuel + if (ticker % (5 * SECONDS) == 0) { + ticker = 0; + startRecipeProcessing(); + FluidStack[] fluidInHatch = null; + boolean fuelDrained = false; + if (mInputHatches != null && mInputHatches.size() != 0) { + fluidInHatch = this.getStoredFluids() + .toArray(new FluidStack[0]); + } + int maxModuleCount = 8; + + if (upgrades[26]) { + maxModuleCount += 4; + } + if (upgrades[29]) { + maxModuleCount += 4; + } + if (mInputBusses.size() != 0) { + if (internalBattery == 0) { + MTEHatchInputBus inputBus = mInputBusses.get(0); + ItemStack[] inputBusInventory = inputBus.getRealInventory(); + if (inputBusInventory != null) { + for (int i = 0; i < inputBusInventory.length; i++) { + ItemStack itemStack = inputBusInventory[i]; + if (itemStack != null && itemStack.isItemEqual(STELLAR_FUEL)) { + int stacksize = itemStack.stackSize; + if (inputBus instanceof MTEHatchInputBusME meBus) { + ItemStack realItem = meBus.getRealInventory()[i + 16]; + if (realItem == null) { + break; + } + stacksize = realItem.stackSize; + } + inputBus.decrStackSize(i, stacksize); + stellarFuelAmount += stacksize; + inputBus.updateSlots(); + } + } + } + neededStartupFuel = calculateStartupFuelConsumption(this); + if (stellarFuelAmount >= neededStartupFuel) { + stellarFuelAmount -= neededStartupFuel; + increaseBattery(neededStartupFuel); + createRenderer(); + } + } else { + fuelConsumption = (long) calculateFuelConsumption(this) * 5 * (batteryCharging ? 2 : 1); + if (fluidInHatch != null && fuelConsumption < Integer.MAX_VALUE) { + for (FluidStack fluid : fluidInHatch) { + if (fluid.isFluidEqual(validFuelList.get(selectedFuelType))) { + FluidStack fluidNeeded = new FluidStack( + validFuelList.get(selectedFuelType), + (int) fuelConsumption); + FluidStack fluidReal; + if (mInputHatches.get(0) instanceof MTEHatchInputME meHatch) { + fluidReal = meHatch.drain(ForgeDirection.UNKNOWN, fluidNeeded, true); + } else { + fluidReal = mInputHatches.get(0) + .drain(fluidNeeded.amount, true); + } + if (fluidReal == null || fluidReal.amount < fluidNeeded.amount) { + reduceBattery(fuelConsumptionFactor); + } else { + totalFuelConsumed += getFuelFactor(); + if (batteryCharging) { + increaseBattery(fuelConsumptionFactor); + } + } + fuelDrained = true; + } + } + if (!fuelDrained) { + reduceBattery(fuelConsumptionFactor); + } + } else { + reduceBattery(fuelConsumptionFactor); + } + } + } + + determineCompositionMilestoneLevel(); + checkInversionStatus(); + determineMilestoneProgress(); + if (!debugMode) { + determineGravitonShardAmount(); + } + if (upgrades[30] && gravitonShardEjection) { + ejectGravitonShards(); + } + + // Do module calculations and checks + if (moduleHatches.size() > 0 && internalBattery > 0 && moduleHatches.size() <= maxModuleCount) { + for (MTEBaseModule module : moduleHatches) { + if (allowModuleConnection(module, this)) { + module.connect(); + calculateMaxHeatForModules(module, this); + calculateSpeedBonusForModules(module, this); + calculateMaxParallelForModules(module, this); + calculateEnergyDiscountForModules(module, this); + setMiscModuleParameters(module, this); + queryMilestoneStats(module, this); + if (!upgrades[28]) { + calculateProcessingVoltageForModules(module, this); + } + } else { + module.disconnect(); + } + } + } else if (moduleHatches.size() > maxModuleCount) { + for (MTEBaseModule module : moduleHatches) { + module.disconnect(); + } + } + if (mEfficiency < 0) mEfficiency = 0; + endRecipeProcessing(); + } + } + } + + public boolean addModuleToMachineList(IGregTechTileEntity tileEntity, int baseCasingIndex) { + if (tileEntity == null) { + return false; + } + IMetaTileEntity metaTileEntity = tileEntity.getMetaTileEntity(); + if (metaTileEntity == null) { + return false; + } + if (metaTileEntity instanceof MTEBaseModule) { + return moduleHatches.add((MTEBaseModule) metaTileEntity); + } + return false; + } + + public enum moduleElement implements IHatchElement { + + Module(MTEForgeOfGods::addModuleToMachineList, MTEBaseModule.class) { + + @Override + public long count(MTEForgeOfGods tileEntity) { + return tileEntity.moduleHatches.size(); + } + }; + + private final List> mteClasses; + private final IGTHatchAdder adder; + + @SafeVarargs + moduleElement(IGTHatchAdder adder, Class... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + this.adder = adder; + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + public IGTHatchAdder adder() { + return adder; + } + } + + private void createRenderer() { + + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + double xOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetY; + + this.getBaseMetaTileEntity() + .getWorld() + .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); + this.getBaseMetaTileEntity() + .getWorld() + .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), forgeOfGodsRenderBlock); + TileEntityForgeOfGods rendererTileEntity = (TileEntityForgeOfGods) this.getBaseMetaTileEntity() + .getWorld() + .getTileEntity((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset)); + + rendererTileEntity.setRenderSize(20); + rendererTileEntity.setRenderRotationSpeed(5); + + switch (ringAmount) { + case 2 -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING_AIR, null, false, 63, 14, -59); + buildPiece(STRUCTURE_PIECE_SECOND_RING_AIR, null, false, 55, 11, -67); + } + case 3 -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING_AIR, null, false, 63, 14, -59); + buildPiece(STRUCTURE_PIECE_SECOND_RING_AIR, null, false, 55, 11, -67); + buildPiece(STRUCTURE_PIECE_THIRD_RING_AIR, null, false, 47, 13, -76); + } + default -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING_AIR, null, false, 63, 14, -59); + } + } + + isRenderActive = true; + } + + private void destroyRenderer() { + + IGregTechTileEntity gregTechTileEntity = this.getBaseMetaTileEntity(); + + int x = gregTechTileEntity.getXCoord(); + int y = gregTechTileEntity.getYCoord(); + int z = gregTechTileEntity.getZCoord(); + + double xOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetX; + double zOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetZ; + double yOffset = 122 * getExtendedFacing().getRelativeBackInWorld().offsetY; + + this.getBaseMetaTileEntity() + .getWorld() + .setBlock((int) (x + xOffset), (int) (y + yOffset), (int) (z + zOffset), Blocks.air); + + switch (ringAmount) { + case 2 -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING, null, false, 63, 14, -59); + buildPiece(STRUCTURE_PIECE_SECOND_RING, null, false, 55, 11, -67); + } + case 3 -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING, null, false, 63, 14, -59); + buildPiece(STRUCTURE_PIECE_SECOND_RING, null, false, 55, 11, -67); + buildPiece(STRUCTURE_PIECE_THIRD_RING, null, false, 47, 13, -76); + } + default -> { + buildPiece(STRUCTURE_PIECE_FIRST_RING, null, false, 63, 14, -59); + } + } + + isRenderActive = false; + } + + @Override + public void onBlockDestroyed() { + super.onBlockDestroyed(); + destroyRenderer(); + } + + @Override + public String[] getInfoData() { + ArrayList str = new ArrayList<>(Arrays.asList(super.getInfoData())); + str.add(SCANNER_INFO_BAR); + str.add("Number of Rings: " + EnumChatFormatting.GOLD + ringAmount); + str.add("Total Upgrades Unlocked: " + EnumChatFormatting.GOLD + getTotalActiveUpgrades()); + str.add("Connected Modules: " + EnumChatFormatting.GOLD + moduleHatches.size()); + str.add(SCANNER_INFO_BAR); + return str.toArray(new String[0]); + } + + @Override + public void onRemoval() { + if (moduleHatches != null && moduleHatches.size() > 0) { + for (MTEBaseModule module : moduleHatches) { + module.disconnect(); + } + } + super.onRemoval(); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + if (doesBindPlayerInventory()) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE) + .setPos(4, 4) + .setSize(190, 85)); + } else { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE_NO_INVENTORY) + .setPos(4, 4) + .setSize(190, 171)); + } + buildContext.addSyncedWindow(UPGRADE_TREE_WINDOW_ID, this::createUpgradeTreeWindow); + buildContext.addSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID, this::createIndividualUpgradeWindow); + buildContext.addSyncedWindow(FUEL_CONFIG_WINDOW_ID, this::createFuelConfigWindow); + buildContext.addSyncedWindow(BATTERY_CONFIG_WINDOW_ID, this::createBatteryWindow); + buildContext.addSyncedWindow(MILESTONE_WINDOW_ID, this::createMilestoneWindow); + buildContext.addSyncedWindow(INDIVIDUAL_MILESTONE_WINDOW_ID, this::createIndividualMilestoneWindow); + buildContext.addSyncedWindow(MANUAL_INSERTION_WINDOW_ID, this::createManualInsertionWindow); + buildContext.addSyncedWindow(GENERAL_INFO_WINDOW_ID, this::createGeneralInfoWindow); + builder.widget( + new ButtonWidget().setOnClick( + (clickData, widget) -> { + if (!widget.isClient()) widget.getContext() + .openSyncedWindow(UPGRADE_TREE_WINDOW_ID); + }) + .setSize(16, 16) + .setBackground(() -> { + List button = new ArrayList<>(); + button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); + button.add(TecTechUITextures.OVERLAY_BUTTON_ARROW_BLUE_UP); + return button.toArray(new IDrawable[0]); + }) + .addTooltip("Path of Celestial Transcendence") + .setPos(174, 167) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_HEAT_SINK_SMALL) + .setPos(174, 183) + .setSize(16, 6)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getContext() + .openSyncedWindow(FUEL_CONFIG_WINDOW_ID); + } + }) + .setSize(16, 16) + .setBackground(() -> { + List button = new ArrayList<>(); + button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); + button.add(TecTechUITextures.OVERLAY_BUTTON_HEAT_ON); + return button.toArray(new IDrawable[0]); + }) + .addTooltip(translateToLocal("fog.button.fuelconfig.tooltip")) + .setPos(174, 110) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget( + TextWidget.dynamicText(this::storedFuel) + .setDefaultColor(EnumChatFormatting.WHITE) + .setPos(6, 8) + .setSize(74, 34)) + .widget(createPowerSwitchButton()) + .widget(createBatteryButton(builder)) + .widget(createEjectionSwitch(builder)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> getBaseMetaTileEntity().isAllowedToWork(), val -> { + if (val) { + getBaseMetaTileEntity().enableWorking(); + } else { + getBaseMetaTileEntity().disableWorking(); + } + })) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + checkMachine_EM(this.getBaseMetaTileEntity(), null); + } + }) + .setSize(16, 16) + .setBackground(() -> { + List button = new ArrayList<>(); + button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); + button.add(TecTechUITextures.OVERLAY_CYCLIC_BLUE); + return button.toArray(new IDrawable[0]); + }) + .addTooltip(translateToLocal("fog.button.structurecheck.tooltip")) + .setPos(8, 91) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getContext() + .openSyncedWindow(MILESTONE_WINDOW_ID); + } + }) + .setSize(16, 16) + .setBackground(() -> { + List button = new ArrayList<>(); + button.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); + button.add(TecTechUITextures.OVERLAY_BUTTON_FLAG); + return button.toArray(new IDrawable[0]); + + }) + .addTooltip(translateToLocal("fog.button.milestones.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(174, 91)) + .widget( + new ButtonWidget().setOnClick( + (clickData, widget) -> { + if (!widget.isClient()) widget.getContext() + .openSyncedWindow(GENERAL_INFO_WINDOW_ID); + }) + .setSize(18, 18) + .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.clickhere")) + .setPos(172, 67) + .setTooltipShowUpDelay(TOOLTIP_DELAY)); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO) + .setSize(18, 18) + .setPos(172, 67)); + } + + @Override + protected ButtonWidget createPowerSwitchButton() { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + if (getBaseMetaTileEntity().isAllowedToWork()) { + getBaseMetaTileEntity().disableWorking(); + } else { + getBaseMetaTileEntity().enableWorking(); + } + }) + .setPlayClickSound(false) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); + if (getBaseMetaTileEntity().isAllowedToWork()) { + ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON); + } else { + ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_DISABLED); + } + return ret.toArray(new IDrawable[0]); + }) + .setPos(174, doesBindPlayerInventory() ? 148 : 172) + .setSize(16, 16); + button.addTooltip("Power Switch") + .setTooltipShowUpDelay(TOOLTIP_DELAY); + return (ButtonWidget) button; + } + + protected ButtonWidget createEjectionSwitch(IWidgetBuilder builder) { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (upgrades[30]) { + gravitonShardEjection = !gravitonShardEjection; + } + }) + .setPlayClickSound(upgrades[30]) + .setBackground(() -> { + List ret = new ArrayList<>(); + if (!upgrades[30]) { + return ret.toArray(new IDrawable[0]); + } + if (gravitonShardEjection) { + ret.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); + ret.add(TecTechUITextures.OVERLAY_EJECTION_ON); + } else { + ret.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); + ret.add(TecTechUITextures.OVERLAY_EJECTION_LOCKED); + } + return ret.toArray(new IDrawable[0]); + }) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> gravitonShardEjection, val -> gravitonShardEjection = val), + builder) + .setPos(26, 91) + .setSize(16, 16) + .attachSyncer(new FakeSyncWidget.BooleanSyncer(() -> upgrades[30], val -> upgrades[30] = val), builder); + if (upgrades[30]) { + button.addTooltip(translateToLocal("fog.button.ejection.tooltip")); + button.setTooltipShowUpDelay(TOOLTIP_DELAY); + } + return (ButtonWidget) button; + } + + protected Widget createBatteryButton(IWidgetBuilder builder) { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + if (clickData.mouseButton == 0) { + batteryCharging = !batteryCharging; + } else if (clickData.mouseButton == 1 && !widget.isClient() && upgrades[8]) { + widget.getContext() + .openSyncedWindow(BATTERY_CONFIG_WINDOW_ID); + } + }) + .setPlayClickSound(false) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(TecTechUITextures.BUTTON_CELESTIAL_32x32); + if (batteryCharging) { + ret.add(TecTechUITextures.OVERLAY_BUTTON_BATTERY_ON); + } else { + ret.add(TecTechUITextures.OVERLAY_BUTTON_BATTERY_OFF); + } + return ret.toArray(new IDrawable[0]); + }) + .setPos(174, 129) + .setSize(16, 16); + button.addTooltip(translateToLocal("fog.button.battery.tooltip.01")) + .addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.battery.tooltip.02")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> batteryCharging, val -> batteryCharging = val), + builder); + return button; + } + + protected ModularWindow createBatteryWindow(final EntityPlayer player) { + final int WIDTH = 78; + final int HEIGHT = 52; + final int PARENT_WIDTH = getGUIWidth(); + final int PARENT_HEIGHT = getGUIHeight(); + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.setPos( + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) + .add( + Alignment.BottomRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) + .add(WIDTH - 3, 0) + .subtract(0, 10))); + builder.widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.batteryinfo") + .setPos(3, 4) + .setSize(74, 20)) + .widget( + new NumericWidget().setSetter(val -> maxBatteryCharge = (int) val) + .setGetter(() -> maxBatteryCharge) + .setBounds(1, Integer.MAX_VALUE) + .setDefaultValue(100) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(70, 18) + .setPos(4, 25) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)); + return builder.build(); + } + + protected ModularWindow createFuelConfigWindow(final EntityPlayer player) { + final int WIDTH = 78; + final int HEIGHT = 130; + final int PARENT_WIDTH = getGUIWidth(); + final int PARENT_HEIGHT = getGUIHeight(); + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.setPos( + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) + .add( + Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) + .add(WIDTH - 3, 0))); + builder.widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.fuelconsumption") + .setPos(3, 2) + .setSize(74, 34)) + .widget( + new NumericWidget().setSetter(val -> fuelConsumptionFactor = (int) val) + .setGetter(() -> fuelConsumptionFactor) + .setBounds(1, calculateMaxFuelFactor(this)) + .setDefaultValue(1) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(70, 18) + .setPos(4, 35) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)) + .widget( + new DrawableWidget().setDrawable(ModularUITextures.ICON_INFO) + .setPos(64, 24) + .setSize(10, 10) + .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.0")) + .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.1")) + .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.2")) + .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.3")) + .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.4")) + .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfo.5")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.fueltype") + .setPos(3, 57) + .setSize(74, 24)) + .widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.fuelusage") + .setPos(3, 100) + .setSize(74, 20)) + .widget( + TextWidget.dynamicText(this::fuelUsage) + .setPos(3, 115) + .setSize(74, 15)) + .widget( + new MultiChildWidget().addChild( + new FluidNameHolderWidget( + () -> MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1) + .getUnlocalizedName() + .substring(6), + (String) -> MaterialsUEVplus.DimensionallyTranscendentResidue.getFluid(1) + .getUnlocalizedName()) { + + @Override + public void buildTooltip(List tooltip) { + FluidStack fluid = createFluidStack(); + addFluidNameInfo(tooltip, fluid); + addAdditionalFluidInfo(tooltip, fluid); + } + }.setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(1, 1) + .setSize(16, 16)) + .addChild(new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + selectedFuelType = 0; + }) + .setBackground(() -> { + if (selectedFuelType == 0) { + return new IDrawable[] { TecTechUITextures.SLOT_OUTLINE_GREEN }; + } else { + return new IDrawable[] {}; + } + }) + .setSize(18, 18) + .attachSyncer(new FakeSyncWidget.IntegerSyncer(this::getFuelType, this::setFuelType), builder)) + + .setPos(6, 82) + .setSize(18, 18)) + .widget( + new MultiChildWidget().addChild( + new FluidNameHolderWidget( + () -> MaterialsUEVplus.RawStarMatter.getFluid(1) + .getUnlocalizedName() + .substring(6), + (String) -> MaterialsUEVplus.RawStarMatter.getFluid(1) + .getUnlocalizedName()) { + + @Override + public void buildTooltip(List tooltip) { + FluidStack fluid = createFluidStack(); + addFluidNameInfo(tooltip, fluid); + addAdditionalFluidInfo(tooltip, fluid); + } + }.setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(1, 1) + .setSize(16, 16)) + .addChild(new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + selectedFuelType = 1; + }) + .setBackground(() -> { + if (selectedFuelType == 1) { + return new IDrawable[] { TecTechUITextures.SLOT_OUTLINE_GREEN }; + } else { + return new IDrawable[] {}; + } + }) + .setSize(18, 18)) + .setPos(29, 82) + .setSize(18, 18) + .attachSyncer(new FakeSyncWidget.IntegerSyncer(this::getFuelType, this::setFuelType), builder)) + .widget( + new MultiChildWidget().addChild( + new FluidNameHolderWidget( + () -> MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(1) + .getUnlocalizedName() + .substring(6), + (String) -> MaterialsUEVplus.MagnetohydrodynamicallyConstrainedStarMatter.getMolten(1) + .getUnlocalizedName()) { + + @Override + public void buildTooltip(List tooltip) { + FluidStack fluid = createFluidStack(); + addFluidNameInfo(tooltip, fluid); + addAdditionalFluidInfo(tooltip, fluid); + } + }.setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(1, 1) + .setSize(16, 16)) + .addChild(new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + selectedFuelType = 2; + }) + .setBackground(() -> { + if (selectedFuelType == 2) { + return new IDrawable[] { TecTechUITextures.SLOT_OUTLINE_GREEN }; + } else { + return new IDrawable[] {}; + } + }) + .setSize(18, 18)) + .setPos(52, 82) + .setSize(18, 18) + .attachSyncer(new FakeSyncWidget.IntegerSyncer(this::getFuelType, this::setFuelType), builder)); + + return builder.build(); + } + + private final int[] milestoneProgress = new int[] { 0, 0, 0, 0 }; + + protected ModularWindow createMilestoneWindow(final EntityPlayer player) { + final int WIDTH = 400; + final int HEIGHT = 300; + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(TecTechUITextures.BACKGROUND_SPACE); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.widget(createMilestoneButton(0, 80, 100, new Pos2d(62, 24))); + builder.widget(createMilestoneButton(1, 70, 98, new Pos2d(263, 25))); + builder.widget(createMilestoneButton(2, 100, 100, new Pos2d(52, 169))); + builder.widget(createMilestoneButton(3, 100, 100, new Pos2d(248, 169))); + builder.widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.powermilestone") + .setDefaultColor(EnumChatFormatting.GOLD) + .setPos(77, 45) + .setSize(50, 30)); + builder.widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.recipemilestone") + .setDefaultColor(EnumChatFormatting.GOLD) + .setPos(268, 45) + .setSize(60, 30)); + builder.widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.fuelmilestone") + .setDefaultColor(EnumChatFormatting.GOLD) + .setPos(77, 190) + .setSize(50, 30)); + builder.widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.purchasablemilestone") + .setDefaultColor(EnumChatFormatting.GOLD) + .setPos(268, 190) + .setSize(60, 30)); + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND) + .setPos(37, 70) + .setSize(130, 7)) + .widget( + new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND) + .setPos(233, 70) + .setSize(130, 7)) + .widget( + new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND) + .setPos(37, 215) + .setSize(130, 7)) + .widget( + new DrawableWidget().setDrawable(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BACKGROUND) + .setPos(233, 215) + .setSize(130, 7)); + builder.widget( + new ProgressBar().setProgress(() -> powerMilestonePercentage) + .setDirection(ProgressBar.Direction.RIGHT) + .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RED, 130) + .setSynced(true, false) + .setSize(130, 7) + .setPos(37, 70)) + .widget( + new ProgressBar().setProgress(() -> recipeMilestonePercentage) + .setDirection(ProgressBar.Direction.RIGHT) + .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_PURPLE, 130) + .setSynced(true, false) + .setSize(130, 7) + .setPos(233, 70)) + .widget( + new ProgressBar().setProgress(() -> fuelMilestonePercentage) + .setDirection(ProgressBar.Direction.RIGHT) + .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BLUE, 130) + .setSynced(true, false) + .setSize(130, 7) + .setPos(37, 215)) + .widget( + new ProgressBar().setProgress(() -> structureMilestonePercentage) + .setDirection(ProgressBar.Direction.RIGHT) + .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW, 130) + .setSynced(true, false) + .setSize(130, 7) + .setPos(233, 215)) + .widget( + new ProgressBar().setProgress(() -> invertedPowerMilestonePercentage) + .setDirection(ProgressBar.Direction.LEFT) + .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RED_INVERTED, 130) + .setSynced(true, false) + .setSize(130, 7) + .setPos(37, 70)) + .widget( + new ProgressBar().setProgress(() -> invertedRecipeMilestonePercentage) + .setDirection(ProgressBar.Direction.LEFT) + .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_PURPLE_INVERTED, 130) + .setSynced(true, false) + .setSize(130, 7) + .setPos(233, 70)) + .widget( + new ProgressBar().setProgress(() -> invertedFuelMilestonePercentage) + .setDirection(ProgressBar.Direction.LEFT) + .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_BLUE_INVERTED, 130) + .setSynced(true, false) + .setSize(130, 7) + .setPos(37, 215)) + .widget( + new ProgressBar().setProgress(() -> invertedStructureMilestonePercentage) + .setDirection(ProgressBar.Direction.LEFT) + .setTexture(TecTechUITextures.PROGRESSBAR_GODFORGE_MILESTONE_RAINBOW_INVERTED, 130) + .setSynced(true, false) + .setSize(130, 7) + .setPos(233, 215)) + .widget( + ButtonWidget.closeWindowButton(true) + .setPos(382, 6)); + return builder.build(); + } + + protected ModularWindow createIndividualMilestoneWindow(final EntityPlayer player) { + final int WIDTH = 150; + final int HEIGHT = 150; + int symbol_width; + int symbol_height; + String milestoneType; + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + UITexture symbol; + switch (currentMilestoneID) { + case 1 -> { + symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION; + symbol_width = 54; + symbol_height = 75; + milestoneType = "recipe"; + } + case 2 -> { + symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST; + symbol_width = 75; + symbol_height = 75; + milestoneType = "fuel"; + } + case 3 -> { + symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION; + symbol_width = 75; + symbol_height = 75; + milestoneType = "purchasable"; + } + default -> { + symbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE; + symbol_width = 60; + symbol_height = 75; + milestoneType = "power"; + } + } + + builder.setBackground(TecTechUITextures.BACKGROUND_GLOW_WHITE); + builder.setDraggable(true); + builder.widget( + ButtonWidget.closeWindowButton(true) + .setPos(134, 4)) + .widget( + new DrawableWidget().setDrawable(symbol) + .setSize(symbol_width, symbol_height) + .setPos((WIDTH - symbol_width) / 2, (HEIGHT - symbol_height) / 2)) + .widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG." + milestoneType + "milestone") + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setPos(0, 8) + .setSize(150, 15)) + .widget( + TextWidget.dynamicText(this::inversionStatusText) + .setDefaultColor(EnumChatFormatting.AQUA) + .setTextAlignment(Alignment.Center) + .setScale(0.8f) + .setPos(0, 120) + .setSize(150, 15)) + .widget( + TextWidget.dynamicText(() -> totalMilestoneProgress(currentMilestoneID)) + .setScale(0.7f) + .setDefaultColor(EnumChatFormatting.WHITE) + .setTextAlignment(Alignment.Center) + .setPos(5, 30) + .setSize(140, 30)) + .widget( + TextWidget.dynamicText(() -> currentMilestone(currentMilestoneID)) + .setScale(0.7f) + .setDefaultColor(EnumChatFormatting.WHITE) + .setTextAlignment(Alignment.Center) + .setPos(5, 50) + .setSize(140, 30)) + .widget( + TextWidget.dynamicText(() -> milestoneProgressText(currentMilestoneID, true)) + .setScale(0.7f) + .setDefaultColor(EnumChatFormatting.WHITE) + .setSize(140, 30) + .setPos(5, 70)) + .widget( + TextWidget.dynamicText(() -> gravitonShardAmountText(currentMilestoneID)) + .setScale(0.7f) + .setDefaultColor(EnumChatFormatting.WHITE) + .setSize(140, 30) + .setPos(5, 90)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + if (clickData.mouseButton == 0) { + noFormatting = !noFormatting; + } + }) + .setSize(10, 10) + .addTooltip(translateToLocal("fog.button.formatting.tooltip")) + .setBackground(TecTechUITextures.OVERLAY_CYCLIC_BLUE) + .setPos(5, 135) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> noFormatting, val -> noFormatting = val), + builder)); + + return builder.build(); + } + + private int currentMilestoneID = 0; + + private Widget createMilestoneButton(int milestoneID, int width, int height, Pos2d pos) { + return new ButtonWidget().setOnClick((clickData, widget) -> { + currentMilestoneID = milestoneID; + if (!widget.isClient()) { + widget.getContext() + .openSyncedWindow(INDIVIDUAL_MILESTONE_WINDOW_ID); + } + }) + .setSize(width, height) + .setBackground(() -> switch (milestoneID) { + case 1 -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION_GLOW }; + case 2 -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST_GLOW }; + case 3 -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION_GLOW }; + default -> new IDrawable[] { TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE_GLOW }; + }) + .addTooltip(translateToLocal("gt.blockmachines.multimachine.FOG.milestoneinfo")) + .setPos(pos) + .setTooltipShowUpDelay(TOOLTIP_DELAY); + } + + private int currentUpgradeID = 0; + private int currentColorCode = 0; + private int currentMilestoneBG = 0; + private int gravitonShardCost = 0; + private int[] prereqUpgrades = new int[] {}; + private int[] followupUpgrades = new int[] {}; + private boolean allPrereqRequired = false; + private boolean isUpradeSplitStart = false; + private boolean doesCurrentUpgradeRequireExtraMats = false; + private boolean[] upgrades = new boolean[31]; + private boolean[] materialPaidUpgrades = new boolean[7]; + + protected ModularWindow createUpgradeTreeWindow(final EntityPlayer player) { + final Scrollable scrollable = new Scrollable().setVerticalScroll(); + final int PARENT_WIDTH = 300; + final int PARENT_HEIGHT = 300; + ModularWindow.Builder builder = ModularWindow.builder(PARENT_WIDTH, PARENT_HEIGHT); + scrollable + .widget( + createUpgradeBox( + 0, + 0, + 3, + new int[] {}, + false, + new int[] { 1 }, + false, + true, + 0, + new Pos2d(126, 56), + scrollable)) + .widget( + createUpgradeBox( + 1, + 0, + 1, + new int[] { 0 }, + false, + new int[] { 2, 3 }, + false, + false, + 1, + new Pos2d(126, 116), + scrollable)) + .widget( + createUpgradeBox( + 2, + 0, + 2, + new int[] { 1 }, + false, + new int[] { 4, 5 }, + false, + false, + 1, + new Pos2d(96, 176), + scrollable)) + .widget( + createUpgradeBox( + 3, + 0, + 2, + new int[] { 1 }, + false, + new int[] { 5, 6 }, + false, + false, + 1, + new Pos2d(156, 176), + scrollable)) + .widget( + createUpgradeBox( + 4, + 0, + 0, + new int[] { 2 }, + false, + new int[] { 8 }, + false, + false, + 1, + new Pos2d(66, 236), + scrollable)) + .widget( + createUpgradeBox( + 5, + 0, + 3, + new int[] { 2, 3 }, + false, + new int[] { 7 }, + false, + true, + 1, + new Pos2d(126, 236), + scrollable)) + .widget( + createUpgradeBox( + 6, + 0, + 1, + new int[] { 3 }, + false, + new int[] { 10 }, + false, + false, + 1, + new Pos2d(186, 236), + scrollable)) + .widget( + createUpgradeBox( + 7, + 0, + 3, + new int[] { 5 }, + false, + new int[] { 8, 9, 10 }, + false, + true, + 2, + new Pos2d(126, 296), + scrollable)) + .widget( + createUpgradeBox( + 8, + 0, + 0, + new int[] { 4, 7 }, + true, + new int[] { 11 }, + false, + false, + 2, + new Pos2d(56, 356), + scrollable)) + .widget( + createUpgradeBox( + 9, + 0, + 2, + new int[] { 7 }, + false, + new int[] {}, + false, + false, + 2, + new Pos2d(126, 356), + scrollable)) + .widget( + createUpgradeBox( + 10, + 0, + 1, + new int[] { 6, 7 }, + true, + new int[] { 11 }, + false, + false, + 2, + new Pos2d(196, 356), + scrollable)) + .widget( + createUpgradeBox( + 11, + 0, + 3, + new int[] { 8, 10 }, + false, + new int[] { 12, 13, 14 }, + false, + true, + 2, + new Pos2d(126, 416), + scrollable)) + .widget( + createUpgradeBox( + 12, + 1, + 2, + new int[] { 11 }, + false, + new int[] { 17 }, + true, + false, + 3, + new Pos2d(66, 476), + scrollable)) + .widget( + createUpgradeBox( + 13, + 2, + 1, + new int[] { 11 }, + false, + new int[] { 18 }, + true, + false, + 3, + new Pos2d(126, 476), + scrollable)) + .widget( + createUpgradeBox( + 14, + 3, + 0, + new int[] { 11 }, + false, + new int[] { 15, 19 }, + true, + false, + 3, + new Pos2d(186, 476), + scrollable)) + .widget( + createUpgradeBox( + 15, + 3, + 1, + new int[] { 14 }, + false, + new int[] {}, + false, + false, + 4, + new Pos2d(246, 496), + scrollable)) + .widget( + createUpgradeBox( + 16, + 1, + 1, + new int[] { 17 }, + false, + new int[] {}, + false, + false, + 4, + new Pos2d(6, 556), + scrollable)) + .widget( + createUpgradeBox( + 17, + 1, + 0, + new int[] { 12 }, + false, + new int[] { 16, 20 }, + false, + false, + 3, + new Pos2d(66, 536), + scrollable)) + .widget( + createUpgradeBox( + 18, + 2, + 1, + new int[] { 13 }, + false, + new int[] { 21 }, + false, + false, + 3, + new Pos2d(126, 536), + scrollable)) + .widget( + createUpgradeBox( + 19, + 3, + 0, + new int[] { 14 }, + false, + new int[] { 22 }, + false, + false, + 3, + new Pos2d(186, 536), + scrollable)) + .widget( + createUpgradeBox( + 20, + 1, + 0, + new int[] { 17 }, + false, + new int[] { 23 }, + false, + false, + 3, + new Pos2d(66, 596), + scrollable)) + .widget( + createUpgradeBox( + 21, + 2, + 1, + new int[] { 18 }, + false, + new int[] { 23 }, + false, + false, + 3, + new Pos2d(126, 596), + scrollable)) + .widget( + createUpgradeBox( + 22, + 3, + 1, + new int[] { 19 }, + false, + new int[] { 23 }, + false, + false, + 3, + new Pos2d(186, 596), + scrollable)) + .widget( + createUpgradeBox( + 23, + 0, + 0, + new int[] { 20, 21, 22 }, + false, + new int[] { 24 }, + false, + false, + 4, + new Pos2d(126, 656), + scrollable)) + .widget( + createUpgradeBox( + 24, + 0, + 1, + new int[] { 23 }, + false, + new int[] { 25 }, + false, + false, + 5, + new Pos2d(126, 718), + scrollable)) + .widget( + createUpgradeBox( + 25, + 0, + 1, + new int[] { 24 }, + false, + new int[] { 26 }, + false, + false, + 6, + new Pos2d(36, 758), + scrollable)) + .widget( + createUpgradeBox( + 26, + 0, + 3, + new int[] { 25 }, + false, + new int[] { 27 }, + false, + true, + 7, + new Pos2d(36, 848), + scrollable)) + .widget( + createUpgradeBox( + 27, + 0, + 2, + new int[] { 26 }, + false, + new int[] { 28 }, + false, + false, + 8, + new Pos2d(126, 888), + scrollable)) + .widget( + createUpgradeBox( + 28, + 0, + 0, + new int[] { 27 }, + false, + new int[] { 29 }, + false, + false, + 9, + new Pos2d(216, 848), + scrollable)) + .widget( + createUpgradeBox( + 29, + 0, + 3, + new int[] { 28 }, + false, + new int[] { 30 }, + false, + true, + 10, + new Pos2d(216, 758), + scrollable)) + .widget( + createUpgradeBox( + 30, + 0, + 3, + new int[] { 29 }, + false, + new int[] {}, + false, + true, + 12, + new Pos2d(126, 798), + scrollable)) + .widget(new TextWidget("").setPos(0, 945)); + + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_STAR) + .setPos(0, 0) + .setSize(300, 300)) + .widget( + scrollable.setSize(292, 292) + .setPos(4, 4)) + .widget( + ButtonWidget.closeWindowButton(true) + .setPos(282, 4)); + if (debugMode) { + builder.widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { + upgrades = new boolean[31]; + materialPaidUpgrades = new boolean[7]; + }) + .setSize(40, 15) + .setBackground(GTUITextures.BUTTON_STANDARD) + .addTooltip(translateToLocal("fog.debug.resetbutton.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .addChild( + new TextWidget(translateToLocal("fog.debug.resetbutton.text")).setTextAlignment(Alignment.Center) + .setScale(0.57f) + .setMaxWidth(36) + .setPos(3, 3)) + .addChild( + new NumericWidget().setSetter(val -> gravitonShardsAvailable = (int) val) + .setGetter(() -> gravitonShardsAvailable) + .setBounds(0, 112) + .setDefaultValue(0) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(25, 18) + .setPos(4, 16) + .addTooltip(translateToLocal("fog.debug.gravitonshardsetter.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD)) + .addChild( + new ButtonWidget().setOnClick((clickData, widget) -> Arrays.fill(upgrades, true)) + .setSize(40, 15) + .setBackground(GTUITextures.BUTTON_STANDARD) + .addTooltip(translateToLocal("fog.debug.unlockall.text")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(0, 35)) + .addChild( + new TextWidget(translateToLocal("fog.debug.unlockall.text")).setTextAlignment(Alignment.Center) + .setScale(0.57f) + .setMaxWidth(36) + .setPos(3, 38)) + .setPos(4, 4)); + + } + return builder.build(); + } + + protected ModularWindow createIndividualUpgradeWindow(final EntityPlayer player) { + UITexture background; + UITexture overlay; + UITexture milestoneSymbol; + float widthRatio; + switch (currentColorCode) { + case 1 -> { + background = TecTechUITextures.BACKGROUND_GLOW_PURPLE; + overlay = TecTechUITextures.PICTURE_OVERLAY_PURPLE; + } + case 2 -> { + background = TecTechUITextures.BACKGROUND_GLOW_ORANGE; + overlay = TecTechUITextures.PICTURE_OVERLAY_ORANGE; + } + case 3 -> { + background = TecTechUITextures.BACKGROUND_GLOW_GREEN; + overlay = TecTechUITextures.PICTURE_OVERLAY_GREEN; + } + default -> { + background = TecTechUITextures.BACKGROUND_GLOW_BLUE; + overlay = TecTechUITextures.PICTURE_OVERLAY_BLUE; + } + } + switch (currentMilestoneBG) { + case 1 -> { + milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CONVERSION; + widthRatio = 0.72f; + } + case 2 -> { + milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CATALYST; + widthRatio = 1f; + } + case 3 -> { + milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_COMPOSITION; + widthRatio = 1f; + } + default -> { + milestoneSymbol = TecTechUITextures.PICTURE_GODFORGE_MILESTONE_CHARGE; + widthRatio = 0.8f; + } + } + int WIDTH = 250; + int HEIGHT = 250; + int LORE_POS = 110; + if (currentUpgradeID == 0 || currentUpgradeID == 30) { + WIDTH = 300; + HEIGHT = 300; + LORE_POS = 85; + } + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT) + .setBackground(background) + .widget( + ButtonWidget.closeWindowButton(true) + .setPos(WIDTH - 15, 3)) + .widget( + new DrawableWidget().setDrawable(milestoneSymbol) + .setPos((int) ((1 - widthRatio / 2) * WIDTH / 2), HEIGHT / 4) + .setSize((int) (WIDTH / 2 * widthRatio), HEIGHT / 2)) + .widget( + new DrawableWidget().setDrawable(overlay) + .setPos(WIDTH / 4, HEIGHT / 4) + .setSize(WIDTH / 2, HEIGHT / 2)) + .widget( + new MultiChildWidget() + .addChild( + new TextWidget(translateToLocal("fog.upgrade.tt." + (currentUpgradeID))) + .setTextAlignment(Alignment.Center) + .setDefaultColor(EnumChatFormatting.GOLD) + .setSize(WIDTH - 15, 30) + .setPos(9, 5)) + .addChild( + new TextWidget(translateToLocal("fog.upgrade.text." + (currentUpgradeID))) + .setTextAlignment(Alignment.CenterLeft) + .setDefaultColor(EnumChatFormatting.WHITE) + .setSize(WIDTH - 15, LORE_POS - 30) + .setPos(9, 30)) + .addChild( + new TextWidget( + EnumChatFormatting.ITALIC + translateToLocal("fog.upgrade.lore." + (currentUpgradeID))) + .setTextAlignment(Alignment.Center) + .setDefaultColor(0xbbbdbd) + .setSize(WIDTH - 15, (int) (HEIGHT * 0.9) - LORE_POS) + .setPos(9, LORE_POS)) + .addChild( + new TextWidget( + translateToLocal("gt.blockmachines.multimachine.FOG.shardcost") + " " + + EnumChatFormatting.BLUE + + gravitonShardCost).setTextAlignment(Alignment.Center) + .setScale(0.7f) + .setMaxWidth(70) + .setDefaultColor(0x9c9c9c) + .setPos(11, HEIGHT - 25)) + .addChild( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.availableshards")) + .setTextAlignment(Alignment.Center) + .setScale(0.7f) + .setMaxWidth(90) + .setDefaultColor(0x9c9c9c) + .setPos(WIDTH - 87, HEIGHT - 25)) + .addChild( + TextWidget.dynamicText(this::gravitonShardAmount) + .setTextAlignment(Alignment.Center) + .setScale(0.7f) + .setMaxWidth(90) + .setDefaultColor(0x9c9c9c) + .setPos(WIDTH - 27, HEIGHT - 18))) + .setSize(WIDTH, HEIGHT) + + .widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { + int unlockedPrereqUpgrades = 0; + int unlockedFollowupUpgrades = 0; + int unlockedSplitUpgrades = 0; + if (!upgrades[currentUpgradeID]) { + for (int prereqUpgrade : prereqUpgrades) { + if (upgrades[prereqUpgrade]) { + unlockedPrereqUpgrades++; + } + } + if (!doesCurrentUpgradeRequireExtraMats + || materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(currentUpgradeID)]) { + if (allPrereqRequired) { + if (unlockedPrereqUpgrades == prereqUpgrades.length + && gravitonShardsAvailable >= gravitonShardCost) { + gravitonShardsAvailable -= gravitonShardCost; + gravitonShardsSpent += gravitonShardCost; + upgrades[currentUpgradeID] = true; + } + } else if (unlockedPrereqUpgrades > 0 || prereqUpgrades.length == 0) { + if (isUpradeSplitStart) { + for (int splitUpgrade : FIRST_SPLIT_UPGRADES) { + if (upgrades[splitUpgrade]) { + unlockedSplitUpgrades++; + } + } + unlockedSplitUpgrades -= (ringAmount - 1); + } + if (unlockedSplitUpgrades <= 0 && gravitonShardsAvailable >= gravitonShardCost) { + gravitonShardsAvailable -= gravitonShardCost; + gravitonShardsSpent += gravitonShardCost; + upgrades[currentUpgradeID] = true; + } + } + } + } else { + for (int followupUpgrade : followupUpgrades) { + if (upgrades[followupUpgrade]) { + unlockedFollowupUpgrades++; + } + } + if (unlockedFollowupUpgrades == 0) { + gravitonShardsAvailable += gravitonShardCost; + gravitonShardsSpent -= gravitonShardCost; + upgrades[currentUpgradeID] = false; + } + } + }) + .setSize(40, 15) + .setBackground(() -> { + if (upgrades[currentUpgradeID]) { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED }; + } else { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD }; + } + }) + .addTooltip(translateToLocal("fog.upgrade.confirm")) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .addChild( + new TextWidget(translateToLocal("fog.upgrade.confirm")).setTextAlignment(Alignment.Center) + .setScale(0.7f) + .setMaxWidth(36) + .setPos(3, 5)) + .setPos(WIDTH / 2 - 21, (int) (HEIGHT * 0.9))); + if (Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .contains(currentUpgradeID)) { + builder.widget(createMaterialInputButton(currentUpgradeID, WIDTH / 2 - 40, (int) (HEIGHT * 0.9), builder)); + } + return builder.build(); + } + + private Widget createMaterialInputButton(int upgradeID, int xCoord, int yCoord, IWidgetBuilder builder) { + return new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient() && doesCurrentUpgradeRequireExtraMats) { + widget.getContext() + .openSyncedWindow(MANUAL_INSERTION_WINDOW_ID); + widget.getContext() + .closeWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); + widget.getContext() + .closeWindow(UPGRADE_TREE_WINDOW_ID); + } + }) + .setPlayClickSound(doesCurrentUpgradeRequireExtraMats) + .setBackground(() -> { + if (doesCurrentUpgradeRequireExtraMats) { + if (materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(upgradeID)]) { + return new IDrawable[] { TecTechUITextures.BUTTON_BOXED_CHECKMARK_18x18 }; + } else { + return new IDrawable[] { TecTechUITextures.BUTTON_BOXED_EXCLAMATION_POINT_18x18 }; + } + } else { + return new IDrawable[] { GTUITextures.TRANSPARENT }; + } + }) + .setPos(xCoord, yCoord) + .setSize(15, 15) + .dynamicTooltip(this::upgradeMaterialRequirements) + .addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.materialrequirements.tooltip.clickhere")) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer( + () -> materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(upgradeID)], + val -> materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(upgradeID)] = val), + builder); + } + + /** + * @param upgradeID ID of the upgrade + * @param colorCode Number deciding which colored background to use, 0 for blue, 1 for purple, 2 for + * orange and 3 for green + * @param milestone Number deciding which milestone symbol to display in the background, 0 for charge, + * 1 for conversion, 2 for catalyst and 3 for composition + * @param prerequisiteUpgradeIDs IDs of the prior upgrades directly connected to the current one + * @param requireAllPrerequisites Decides how many connected prerequisite upgrades have to be unlocked to be able to + * unlock this one. True means ALL, False means AT LEAST ONE + * @param followingUpgradeIDs IDs of the following upgrades directly connected to the current one + * @param isStartOfSplit Whether this upgrade is one of the initial split upgrades + * @param requiresExtraMaterials Whether this upgrade requires materials other than graviton shards to unlock + * @param shardCost How many graviton shards are needed to unlock this upgrade + * @param pos Position of the upgrade inside the scrollableWidget + */ + private Widget createUpgradeBox(int upgradeID, int colorCode, int milestone, int[] prerequisiteUpgradeIDs, + boolean requireAllPrerequisites, int[] followingUpgradeIDs, boolean isStartOfSplit, + boolean requiresExtraMaterials, int shardCost, Pos2d pos, IWidgetBuilder builder) { + return new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { + currentUpgradeID = upgradeID; + currentColorCode = colorCode; + currentMilestoneBG = milestone; + gravitonShardCost = shardCost; + prereqUpgrades = prerequisiteUpgradeIDs; + allPrereqRequired = requireAllPrerequisites; + followupUpgrades = followingUpgradeIDs; + isUpradeSplitStart = isStartOfSplit; + doesCurrentUpgradeRequireExtraMats = requiresExtraMaterials; + if (!widget.isClient()) widget.getContext() + .openSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); + }) + .setSize(40, 15) + .setBackground(() -> { + if (upgrades[upgradeID]) { + return new IDrawable[] { TecTechUITextures.BUTTON_SPACE_PRESSED_32x16 }; + } else { + return new IDrawable[] { TecTechUITextures.BUTTON_SPACE_32x16 }; + } + }) + .addTooltip(translateToLocal("fog.upgrade.tt." + upgradeID)) + .setTooltipShowUpDelay(TOOLTIP_DELAY)) + .addChild( + new TextWidget(translateToLocal("fog.upgrade.tt.short." + upgradeID)).setScale(0.8f) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.Center) + .setSize(34, 9) + .setPos(3, 4)) + .setPos(pos) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> upgrades[upgradeID], val -> upgrades[upgradeID] = val), + builder); + } + + protected ModularWindow createManualInsertionWindow(final EntityPlayer player) { + ItemStack[] inputs = godforgeUpgradeMats.get(currentUpgradeID); + final int WIDTH = 189; + final int HEIGHT = 106; + final int PARENT_WIDTH = getGUIWidth(); + final int PARENT_HEIGHT = getGUIHeight(); + final MultiChildWidget columns = new MultiChildWidget(); + final DynamicPositionedColumn column1 = new DynamicPositionedColumn(); + final DynamicPositionedColumn column2 = new DynamicPositionedColumn(); + final DynamicPositionedColumn column3 = new DynamicPositionedColumn(); + final DynamicPositionedColumn column4 = new DynamicPositionedColumn(); + final DynamicPositionedColumn column5 = new DynamicPositionedColumn(); + final DynamicPositionedColumn column6 = new DynamicPositionedColumn(); + List columnList = Arrays.asList(column1, column2, column3, column4, column5, column6); + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.setPos( + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) + .add(Alignment.TopRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT))) + .subtract(5, 0) + .add(0, 4)); + builder.widget( + SlotGroup.ofItemHandler(inputSlotHandler, 4) + .startFromSlot(0) + .endAtSlot(15) + .phantom(false) + .background(getGUITextureSet().getItemSlot()) + .build() + .setPos(112, 6)); + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + widget.getWindow() + .closeWindow(); + widget.getContext() + .openSyncedWindow(UPGRADE_TREE_WINDOW_ID); + widget.getContext() + .openSyncedWindow(INDIVIDUAL_UPGRADE_WINDOW_ID); + } + }) + .setBackground(ModularUITextures.VANILLA_BACKGROUND, new Text("x")) + .setPos(179, 0) + .setSize(10, 10)); + builder.widget(new MultiChildWidget().addChild(new ButtonWidget().setOnClick((clickData, widget) -> { + if (!widget.isClient()) { + ArrayList list = new ArrayList<>(inputSlotHandler.getStacks()); + list.removeIf(Objects::isNull); + int foundInputs = 0; + int[] foundInputIndices = new int[inputs.length]; + for (ItemStack inputStack : list) { + for (ItemStack requiredStack : inputs) { + if (ItemStack.areItemStacksEqual(requiredStack, inputStack)) { + foundInputIndices[foundInputs] = inputSlotHandler.getStacks() + .indexOf(inputStack); + foundInputs++; + } + } + } + if (foundInputs == inputs.length) { + for (int index : foundInputIndices) { + inputSlotHandler.extractItem(index, inputSlotHandler.getStackInSlot(index).stackSize, false); + } + materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(currentUpgradeID)] = true; + } + } + }) + .setPlayClickSound(true) + .setBackground(GTUITextures.BUTTON_STANDARD) + .setSize(179, 18)) + .addChild( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.consumeUpgradeMats")) + .setTextAlignment(Alignment.Center) + .setScale(0.75f) + .setPos(0, 1) + .setSize(179, 18)) + .setPos(5, 82) + .setSize(179, 16)); + + int uniqueItems = inputs.length; + for (int i = 0; i < 12; i++) { + int index = i; + int cleanDiv4 = index / 4; + if (i < uniqueItems) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.BUTTON_STANDARD_PRESSED) + .setPos(5 + cleanDiv4 * 36, 6 + index % 4 * 18) + .setSize(18, 18)); + columnList.get(cleanDiv4) + .addChild( + new ItemDrawable().setItem(inputs[index]) + .asWidget() + .dynamicTooltip(() -> { + List tooltip = new ArrayList<>(); + tooltip.add(inputs[index] != null ? inputs[index].getDisplayName() : ""); + return tooltip; + }) + .setSize(16, 16)); + columnList.get(cleanDiv4 + 3) + .addChild( + new TextWidget("x" + inputs[i].stackSize).setTextAlignment(Alignment.CenterLeft) + .setScale(0.8f) + .setSize(18, 8)); + } else { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.BUTTON_STANDARD_DISABLED) + .setPos(5 + cleanDiv4 * 36, 6 + index % 4 * 18) + .setSize(18, 18)); + } + } + + int counter = 0; + for (DynamicPositionedColumn column : columnList) { + int spacing = 2; + int xCord = 1 + counter * 36; + int yCord = 1; + if (counter > 2) { + spacing = 10; + xCord = 19 + (counter - 3) * 36; + yCord = 5; + } + columns.addChild( + column.setSpace(spacing) + .setAlignment(MainAxisAlignment.SPACE_BETWEEN) + .setSize(16, 72) + .setPos(xCord, yCord)); + counter++; + } + + builder.widget( + columns.setSize(108, 72) + .setPos(5, 6)); + + return builder.build(); + } + + protected ModularWindow createGeneralInfoWindow(final EntityPlayer player) { + final Scrollable scrollable = new Scrollable().setVerticalScroll(); + final int WIDTH = 300; + final int HEIGHT = 300; + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + + builder.setDraggable(true); + scrollable.widget( + new TextWidget(EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.introduction")) + .setDefaultColor(EnumChatFormatting.DARK_PURPLE) + .setTextAlignment(Alignment.TopCenter) + .setPos(7, 13) + .setSize(280, 15)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.introductioninfotext")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 30) + .setSize(280, 50)) + .widget( + new TextWidget( + EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.tableofcontents")) + .setDefaultColor(EnumChatFormatting.AQUA) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 80) + .setSize(150, 15)) + .widget( + new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(150)) + .setBackground( + new Text(EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.fuel")) + .alignment(Alignment.CenterLeft) + .color(0x55ffff)) + .setPos(7, 95) + .setSize(150, 15)) + .widget( + new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(434)) + .setBackground( + new Text( + EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.modules")) + .alignment(Alignment.CenterLeft) + .color(0x55ffff)) + .setPos(7, 110) + .setSize(150, 15)) + .widget( + new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(1088)) + .setBackground( + new Text( + EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.upgrades")) + .alignment(Alignment.CenterLeft) + .color(0x55ffff)) + .setPos(7, 125) + .setSize(150, 15)) + .widget( + new ButtonWidget().setOnClick((clickData, widget) -> scrollable.setVerticalScrollOffset(1412)) + .setBackground( + new Text( + EnumChatFormatting.BOLD + translateToLocal("gt.blockmachines.multimachine.FOG.milestones")) + .alignment(Alignment.CenterLeft) + .color(0x55ffff)) + .setPos(7, 140) + .setSize(150, 15)) + .widget( + TextWidget.dynamicText(this::inversionHeaderText) + .setDefaultColor(EnumChatFormatting.WHITE) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 155) + .setSize(150, 15)) + .widget(new ButtonWidget().setOnClick((clickData, widget) -> { + if (inversion) { + scrollable.setVerticalScrollOffset(1766); + } + }) + .setPlayClickSound(inversion) + .setPos(7, 155) + .setSize(150, 15) + .attachSyncer(new FakeSyncWidget.BooleanSyncer(() -> inversion, (val) -> inversion = val), scrollable)) + .widget( + new TextWidget( + EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.fuel")) + .setDefaultColor(EnumChatFormatting.DARK_PURPLE) + .setTextAlignment(Alignment.TopCenter) + .setPos(127, 160) + .setSize(40, 15)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.fuelinfotext")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 177) + .setSize(280, 250)) + .widget( + new TextWidget( + EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.modules")) + .setDefaultColor(EnumChatFormatting.DARK_PURPLE) + .setTextAlignment(Alignment.TopCenter) + .setPos(7, 440) + .setSize(280, 15)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.moduleinfotext")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 461) + .setSize(280, 620)) + .widget( + new TextWidget( + EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.upgrades")) + .setDefaultColor(EnumChatFormatting.DARK_PURPLE) + .setTextAlignment(Alignment.TopCenter) + .setPos(7, 1098) + .setSize(280, 15)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.upgradeinfotext")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 1115) + .setSize(280, 290)) + .widget( + new TextWidget( + EnumChatFormatting.BOLD + "§N" + translateToLocal("gt.blockmachines.multimachine.FOG.milestones")) + .setDefaultColor(EnumChatFormatting.DARK_PURPLE) + .setTextAlignment(Alignment.TopCenter) + .setPos(7, 1422) + .setSize(280, 15)) + .widget( + new TextWidget(translateToLocal("gt.blockmachines.multimachine.FOG.milestoneinfotext")) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 1439) + .setSize(280, 320)) + .widget( + TextWidget.dynamicText(this::inversionHeaderText) + .setDefaultColor(EnumChatFormatting.WHITE) + .setTextAlignment(Alignment.TopCenter) + .setPos(7, 1776) + .setSize(280, 15)) + .widget( + TextWidget.dynamicText(this::inversionInfoText) + .setDefaultColor(EnumChatFormatting.GOLD) + .setTextAlignment(Alignment.CenterLeft) + .setPos(7, 1793) + .setSize(280, 160)) + .widget( + new TextWidget("").setPos(7, 1965) + .setSize(10, 10)); + + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_GLOW_WHITE) + .setPos(0, 0) + .setSize(300, 300)) + .widget( + scrollable.setSize(292, 292) + .setPos(4, 4)) + .widget( + ButtonWidget.closeWindowButton(true) + .setPos(284, 4)); + + return builder.build(); + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Stellar Forge") + .addInfo(EnumChatFormatting.ITALIC + "Also known as Godforge or Gorge for short.") + .addInfo(TOOLTIP_BAR) + .addInfo("Controller block for the Godforge, a massive structure harnessing the thermal,") + .addInfo("gravitational and kinetic energy of a stabilised neutron star for material processing.") + .addInfo( + "This multiblock can house " + EnumChatFormatting.RED + + "up to 16 modules " + + EnumChatFormatting.GRAY + + "which utilize the star to energize materials") + .addInfo("to varying degrees, ranging from regular smelting to matter degeneration.") + .addInfo(TOOLTIP_BAR) + .addInfo( + "This multiblock has an " + EnumChatFormatting.GOLD + + "extensive upgrade tree " + + EnumChatFormatting.GRAY + + "which influences all of its functions,") + .addInfo( + "such as " + EnumChatFormatting.GOLD + + "unlocking new module types, increasing heat levels " + + EnumChatFormatting.GRAY + + "and " + + EnumChatFormatting.GOLD + + "granting") + .addInfo( + EnumChatFormatting.GOLD + "various processing speed bonuses. " + + EnumChatFormatting.GRAY + + "These upgrades can be unlocked by reaching") + .addInfo("certain milestones and/or spending materials.") + .addInfo(TOOLTIP_BAR) + .addInfo( + EnumChatFormatting.GREEN + + "Clicking on the logo in the controller gui opens an extensive information window,") + .addInfo("explaining everything there is to know about this multiblock.") + .addInfo(TOOLTIP_BAR) + .beginStructureBlock(126, 29, 186, false) + .addStructureInfo("The structure is too complex! See schematic for details.") + .addStructureInfo( + "Total blocks needed for the structure with " + EnumChatFormatting.DARK_PURPLE + + "1" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "2" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "3" + + EnumChatFormatting.GRAY + + " rings:") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "3943" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "7279" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "11005" + + EnumChatFormatting.GRAY + + " Transcendentally Amplified Magnetic Confinement Casing") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "2819" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "4831" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "6567" + + EnumChatFormatting.GRAY + + " Singularity Reinforced Stellar Shielding Casing") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "272" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "512" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "824" + + EnumChatFormatting.GRAY + + " Celestial Matter Guidance Casing") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "130" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "144" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "158" + + EnumChatFormatting.GRAY + + " Boundless Gravitationally Severed Structure Casing") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "9" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "54" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "155" + + EnumChatFormatting.GRAY + + " Spatially Transcendent Gravitational Lens Block") + .addStructureInfo( + EnumChatFormatting.DARK_PURPLE + "345" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "357" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "397" + + EnumChatFormatting.DARK_PURPLE + + " Remote" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.DARK_GREEN + + "Medial" + + EnumChatFormatting.GRAY + + "/" + + EnumChatFormatting.AQUA + + "Central" + + EnumChatFormatting.GRAY + + " Graviton Flow Modulator") + .addStructureInfo( + EnumChatFormatting.GOLD + "36" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") + .addStructureInfo("--------------------------------------------") + .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " Input Hatch") + .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " Output Bus") + .addStructureInfo("Requires " + EnumChatFormatting.GOLD + 1 + EnumChatFormatting.GRAY + " Input Bus") + .addStructureInfo("--------------------------------------------") + .toolTipFinisher(CommonValues.GODFORGE_MARK); + return tt; + } + + @Override + public boolean energyFlowOnRunningTick(ItemStack aStack, boolean allowProduction) { + return true; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return new String[] { EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + translateToLocal("gt.blockmachines.multimachine.FOG.hint.0"), + translateToLocal("gt.blockmachines.multimachine.FOG.hint.1") }; + } + + public int getFuelType() { + return selectedFuelType; + } + + private void setFuelType(int fuelType) { + selectedFuelType = fuelType; + } + + public int getFuelFactor() { + return fuelConsumptionFactor; + } + + public boolean isUpgradeActive(int upgradeID) { + return upgrades[upgradeID]; + } + + public int getRingAmount() { + return ringAmount; + } + + public int getTotalActiveUpgrades() { + int totalUpgrades = 0; + for (boolean upgrade : upgrades) { + if (upgrade) { + totalUpgrades++; + } + } + return totalUpgrades; + } + + private Text fuelUsage() { + return new Text(fuelConsumption + " L/5s"); + } + + private Text gravitonShardAmount() { + EnumChatFormatting enoughGravitonShards = EnumChatFormatting.RED; + if (gravitonShardsAvailable >= gravitonShardCost) { + enoughGravitonShards = EnumChatFormatting.GREEN; + } + return new Text(enoughGravitonShards + Integer.toString(gravitonShardsAvailable)); + + } + + private Text storedFuel() { + if (internalBattery == 0) { + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.storedstartupfuel") + " " + + stellarFuelAmount + + "/" + + neededStartupFuel); + } + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.storedfuel") + " " + + internalBattery + + "/" + + maxBatteryCharge); + } + + private void checkInversionStatus() { + int inversionChecker = 0; + for (int progress : milestoneProgress) { + if (progress < 7) { + break; + } + inversionChecker++; + } + inversion = inversionChecker == 4; + } + + private Text inversionStatusText() { + String inversionStatus = ""; + if (inversion) { + inversionStatus = EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.multimachine.FOG.inversionactive"); + } + return new Text(inversionStatus); + } + + private void determineCompositionMilestoneLevel() { + int[] uniqueModuleCount = new int[5]; + int smelting = 0; + int molten = 0; + int plasma = 0; + int exotic = 0; + int exoticMagmatter = 0; + for (MTEBaseModule module : moduleHatches) { + if (module instanceof MTESmeltingModule) { + uniqueModuleCount[0] = 1; + smelting++; + continue; + } + if (module instanceof MTEMoltenModule) { + uniqueModuleCount[1] = 1; + molten++; + continue; + } + if (module instanceof MTEPlasmaModule) { + uniqueModuleCount[2] = 1; + plasma++; + continue; + } + if (module instanceof MTEExoticModule) { + if (!((MTEExoticModule) module).isMagmatterModeOn()) { + uniqueModuleCount[3] = 1; + exotic++; + } else { + uniqueModuleCount[4] = 1; + exoticMagmatter++; + } + } + + } + totalExtensionsBuilt = Arrays.stream(uniqueModuleCount) + .sum() + ringAmount + - 1; + if (inversion) { + totalExtensionsBuilt += (smelting - 1 + + (molten - 1) * 2 + + (plasma - 1) * 3 + + (exotic - 1) * 4 + + (exoticMagmatter - 1) * 5) / 5f; + } + milestoneProgress[3] = (int) Math.floor(totalExtensionsBuilt); + } + + private void determineMilestoneProgress() { + int closestRelevantSeven; + float rawProgress; + float actualProgress; + if (milestoneProgress[0] < 7) { + powerMilestonePercentage = (float) max( + (log((totalPowerConsumed.divide(BigInteger.valueOf(POWER_MILESTONE_CONSTANT))).longValue()) + / POWER_LOG_CONSTANT + 1), + 0) / 7; + milestoneProgress[0] = (int) floor(powerMilestonePercentage * 7); + } + if (inversion) { + rawProgress = (totalPowerConsumed.divide(POWER_MILESTONE_T7_CONSTANT) + .floatValue() - 1) / 7; + closestRelevantSeven = (int) floor(rawProgress); + actualProgress = rawProgress - closestRelevantSeven; + milestoneProgress[0] = 7 + (int) floor(rawProgress * 7); + if (closestRelevantSeven % 2 == 0) { + invertedPowerMilestonePercentage = actualProgress; + powerMilestonePercentage = 1 - invertedPowerMilestonePercentage; + } else { + powerMilestonePercentage = actualProgress; + invertedPowerMilestonePercentage = 1 - powerMilestonePercentage; + } + } + + if (milestoneProgress[1] < 7) { + recipeMilestonePercentage = (float) max( + (log(totalRecipesProcessed * 1f / RECIPE_MILESTONE_CONSTANT) / RECIPE_LOG_CONSTANT + 1), + 0) / 7; + milestoneProgress[1] = (int) floor(recipeMilestonePercentage * 7); + } + if (inversion) { + rawProgress = (((float) totalRecipesProcessed / RECIPE_MILESTONE_T7_CONSTANT) - 1) / 7; + closestRelevantSeven = (int) floor(rawProgress); + actualProgress = rawProgress - closestRelevantSeven; + milestoneProgress[1] = 7 + (int) floor(rawProgress * 7); + if (closestRelevantSeven % 2 == 0) { + invertedRecipeMilestonePercentage = actualProgress; + recipeMilestonePercentage = 1 - invertedRecipeMilestonePercentage; + } else { + recipeMilestonePercentage = actualProgress; + invertedRecipeMilestonePercentage = 1 - recipeMilestonePercentage; + } + } + if (milestoneProgress[2] < 7) { + fuelMilestonePercentage = (float) max( + (log(totalFuelConsumed * 1f / FUEL_MILESTONE_CONSTANT) / FUEL_LOG_CONSTANT + 1), + 0) / 7; + milestoneProgress[2] = (int) floor(fuelMilestonePercentage * 7); + } + if (inversion) { + rawProgress = (((float) totalFuelConsumed / FUEL_MILESTONE_T7_CONSTANT) - 1) / 7; + closestRelevantSeven = (int) floor(rawProgress); + actualProgress = rawProgress - closestRelevantSeven; + milestoneProgress[2] = 7 + (int) floor(rawProgress * 7); + if ((closestRelevantSeven % 2) == 0) { + invertedFuelMilestonePercentage = actualProgress; + fuelMilestonePercentage = 1 - invertedFuelMilestonePercentage; + } else { + fuelMilestonePercentage = actualProgress; + invertedFuelMilestonePercentage = 1 - fuelMilestonePercentage; + } + } + + if (milestoneProgress[3] <= 7) { + structureMilestonePercentage = totalExtensionsBuilt / 7f; + } + if (inversion) { + rawProgress = (totalExtensionsBuilt - 7) / 7f; + closestRelevantSeven = (int) floor(rawProgress); + actualProgress = rawProgress - closestRelevantSeven; + if ((closestRelevantSeven % 2) == 0) { + invertedStructureMilestonePercentage = actualProgress; + structureMilestonePercentage = 1 - invertedStructureMilestonePercentage; + } else { + structureMilestonePercentage = actualProgress; + invertedStructureMilestonePercentage = 1 - structureMilestonePercentage; + } + } + } + + private void determineGravitonShardAmount() { + int sum = 0; + for (int progress : milestoneProgress) { + if (!inversion) { + progress = Math.min(progress, 7); + } + sum += progress * (progress + 1) / 2; + } + gravitonShardsAvailable = sum - gravitonShardsSpent; + } + + private void ejectGravitonShards() { + if (mOutputBusses.size() == 1) { + while (gravitonShardsAvailable >= 64) { + addOutput(GTOreDictUnificator.get(OrePrefixes.gem, MaterialsUEVplus.GravitonShard, 64)); + gravitonShardsAvailable -= 64; + } + addOutput( + GTOreDictUnificator.get(OrePrefixes.gem, MaterialsUEVplus.GravitonShard, gravitonShardsAvailable)); + gravitonShardsAvailable = 0; + } + } + + private Text gravitonShardAmountText(int milestoneID) { + int sum; + int progress = milestoneProgress[milestoneID]; + if (!inversion) { + progress = Math.min(progress, 7); + } + sum = progress * (progress + 1) / 2; + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.shardgain") + ": " + EnumChatFormatting.GRAY + sum); + } + + private Text totalMilestoneProgress(int milestoneID) { + long progress; + BigInteger bigProgress; + String suffix; + switch (milestoneID) { + case 1 -> { + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes"); + progress = totalRecipesProcessed; + } + case 2 -> { + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuelconsumed"); + progress = totalFuelConsumed; + } + case 3 -> { + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions"); + progress = milestoneProgress[3]; + } + default -> { + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power"); + bigProgress = totalPowerConsumed; + if (!noFormatting && (totalPowerConsumed.compareTo(BigInteger.valueOf(1_000L)) > 0)) { + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": " + + EnumChatFormatting.GRAY + + toExponentForm(bigProgress) + + " " + + suffix); + } else { + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": " + + EnumChatFormatting.GRAY + + bigProgress + + " " + + suffix); + } + } + } + if (!noFormatting) { + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": " + + EnumChatFormatting.GRAY + + formatNumbers(progress) + + " " + + suffix); + } else { + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.totalprogress") + ": " + + EnumChatFormatting.GRAY + + progress + + " " + + suffix); + } + + } + + private Text currentMilestone(int milestoneID) { + return new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.milestoneprogress") + ": " + + EnumChatFormatting.GRAY + + milestoneProgress[milestoneID]); + } + + private Text milestoneProgressText(int milestoneID, boolean formatting) { + long max; + BigInteger bigMax; + String suffix; + String progressText = translateToLocal("gt.blockmachines.multimachine.FOG.progress"); + Text done = new Text(translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete")); + if (noFormatting) { + formatting = false; + done = new Text( + translateToLocal("gt.blockmachines.multimachine.FOG.milestonecomplete") + EnumChatFormatting.DARK_RED + + "?"); + } + switch (milestoneID) { + case 0: + if (milestoneProgress[0] < 7 || inversion) { + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.power"); + if (inversion) { + bigMax = POWER_MILESTONE_T7_CONSTANT.multiply(BigInteger.valueOf(milestoneProgress[0] - 5)); + } else { + bigMax = BigInteger.valueOf(LongMath.pow(9, milestoneProgress[0])) + .multiply(BigInteger.valueOf(LongMath.pow(10, 15))); + } + if (formatting && (totalPowerConsumed.compareTo(BigInteger.valueOf(1_000L)) > 0)) { + return new Text( + progressText + ": " + EnumChatFormatting.GRAY + toExponentForm(bigMax) + " " + suffix); + } else { + return new Text(progressText + ": " + EnumChatFormatting.GRAY + bigMax + " " + suffix); + } + } else { + return done; + } + case 1: + if (milestoneProgress[1] < 7 || inversion) { + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.recipes"); + if (inversion) { + max = RECIPE_MILESTONE_T7_CONSTANT * (milestoneProgress[1] - 5); + } else { + max = LongMath.pow(6, milestoneProgress[1]) * LongMath.pow(10, 7); + } + break; + } else { + return done; + } + case 2: + if (milestoneProgress[2] < 7 || inversion) { + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.fuelconsumed"); + if (inversion) { + max = FUEL_MILESTONE_T7_CONSTANT * (milestoneProgress[2] - 5); + } else { + max = LongMath.pow(3, milestoneProgress[2]) * LongMath.pow(10, 4); + } + break; + } else { + return done; + } + case 3: + if (milestoneProgress[3] < 7 || inversion) { + suffix = translateToLocal("gt.blockmachines.multimachine.FOG.extensions"); + max = milestoneProgress[3] + 1; + break; + } else { + return done; + } + default: + return new Text("Error"); + } + if (formatting) { + return new Text(progressText + ": " + EnumChatFormatting.GRAY + formatNumbers(max) + " " + suffix); + } else { + return new Text(progressText + ": " + EnumChatFormatting.GRAY + max + " " + suffix); + } + } + + private Text inversionHeaderText() { + return inversion + ? new Text( + EnumChatFormatting.BOLD + "§k2" + + EnumChatFormatting.RESET + + EnumChatFormatting.WHITE + + EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.multimachine.FOG.inversion") + + EnumChatFormatting.BOLD + + "§k2") + : new Text(""); + } + + private Text inversionInfoText() { + return inversion ? new Text(translateToLocal("gt.blockmachines.multimachine.FOG.inversioninfotext")) + : new Text(""); + } + + private List upgradeMaterialRequirements() { + if (materialPaidUpgrades[Arrays.asList(UPGRADE_MATERIAL_ID_CONVERSION) + .indexOf(currentUpgradeID)]) { + return ImmutableList.of(translateToLocal("fog.button.materialrequirementsmet.tooltip")); + } + return ImmutableList.of(translateToLocal("fog.button.materialrequirements.tooltip")); + } + + private void increaseBattery(int amount) { + if ((internalBattery + amount) <= maxBatteryCharge) { + internalBattery += amount; + } else { + internalBattery = maxBatteryCharge; + batteryCharging = false; + } + } + + public void reduceBattery(int amount) { + if (internalBattery - amount <= 0) { + internalBattery = 0; + if (moduleHatches.size() > 0) { + for (MTEBaseModule module : moduleHatches) { + module.disconnect(); + } + } + destroyRenderer(); + } else { + internalBattery -= amount; + totalFuelConsumed += amount; + } + + } + + public int getBatteryCharge() { + return internalBattery; + } + + public int getMaxBatteryCharge() { + return maxBatteryCharge; + } + + public void addTotalPowerConsumed(BigInteger amount) { + totalPowerConsumed = totalPowerConsumed.add(amount); + } + + public void addTotalRecipesProcessed(long amount) { + totalRecipesProcessed += amount; + } + + @Override + protected void setHatchRecipeMap(MTEHatchInput hatch) {} + + @Override + public void setItemNBT(NBTTagCompound NBT) { + NBT.setInteger("selectedFuelType", selectedFuelType); + NBT.setInteger("fuelConsumptionFactor", fuelConsumptionFactor); + NBT.setInteger("internalBattery", internalBattery); + NBT.setBoolean("batteryCharging", batteryCharging); + NBT.setInteger("batterySize", maxBatteryCharge); + NBT.setInteger("gravitonShardsAvailable", gravitonShardsAvailable); + NBT.setInteger("gravitonShardsSpent", gravitonShardsSpent); + NBT.setByteArray("totalPowerConsumed", totalPowerConsumed.toByteArray()); + NBT.setLong("totalRecipesProcessed", totalRecipesProcessed); + NBT.setLong("totalFuelConsumed", totalFuelConsumed); + NBT.setInteger("starFuelStored", stellarFuelAmount); + NBT.setBoolean("gravitonShardEjection", gravitonShardEjection); + + // Store booleanArrays of all upgrades + NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound(); + + int upgradeIndex = 0; + for (Boolean upgrade : upgrades) { + upgradeBooleanArrayNBTTag.setBoolean("upgrade" + upgradeIndex, upgrade); + upgradeIndex++; + } + + NBT.setTag("upgrades", upgradeBooleanArrayNBTTag); + + NBTTagCompound upgradeMaterialBooleanArrayNBTTag = new NBTTagCompound(); + + int upgradeMaterialIndex = 0; + for (Boolean upgrade : materialPaidUpgrades) { + upgradeBooleanArrayNBTTag.setBoolean("upgradeMaterial" + upgradeMaterialIndex, upgrade); + upgradeMaterialIndex++; + } + + NBT.setTag("upgradeMaterials", upgradeMaterialBooleanArrayNBTTag); + super.saveNBTData(NBT); + } + + @Override + public void saveNBTData(NBTTagCompound NBT) { + NBT.setInteger("selectedFuelType", selectedFuelType); + NBT.setInteger("fuelConsumptionFactor", fuelConsumptionFactor); + NBT.setInteger("internalBattery", internalBattery); + NBT.setBoolean("batteryCharging", batteryCharging); + NBT.setInteger("batterySize", maxBatteryCharge); + NBT.setInteger("gravitonShardsAvailable", gravitonShardsAvailable); + NBT.setInteger("gravitonShardsSpent", gravitonShardsSpent); + NBT.setByteArray("totalPowerConsumed", totalPowerConsumed.toByteArray()); + NBT.setLong("totalRecipesProcessed", totalRecipesProcessed); + NBT.setLong("totalFuelConsumed", totalFuelConsumed); + NBT.setInteger("starFuelStored", stellarFuelAmount); + NBT.setBoolean("gravitonShardEjection", gravitonShardEjection); + NBT.setBoolean("isRenderActive", isRenderActive); + NBT.setInteger("ringAmount", ringAmount); + + // Store booleanArray of all upgrades + NBTTagCompound upgradeBooleanArrayNBTTag = new NBTTagCompound(); + + int upgradeIndex = 0; + for (boolean upgrade : upgrades) { + upgradeBooleanArrayNBTTag.setBoolean("upgrade" + upgradeIndex, upgrade); + upgradeIndex++; + } + + NBT.setTag("upgrades", upgradeBooleanArrayNBTTag); + + NBTTagCompound upgradeMaterialBooleanArrayNBTTag = new NBTTagCompound(); + + int upgradeMaterialIndex = 0; + for (boolean upgrade : materialPaidUpgrades) { + upgradeMaterialBooleanArrayNBTTag.setBoolean("upgradeMaterial" + upgradeMaterialIndex, upgrade); + upgradeMaterialIndex++; + } + + NBT.setTag("upgradeMaterials", upgradeMaterialBooleanArrayNBTTag); + super.saveNBTData(NBT); + } + + @Override + public void loadNBTData(NBTTagCompound NBT) { + selectedFuelType = NBT.getInteger("selectedFuelType"); + fuelConsumptionFactor = NBT.getInteger("fuelConsumptionFactor"); + internalBattery = NBT.getInteger("internalBattery"); + batteryCharging = NBT.getBoolean("batteryCharging"); + maxBatteryCharge = NBT.getInteger("batterySize"); + gravitonShardsAvailable = NBT.getInteger("gravitonShardsAvailable"); + gravitonShardsSpent = NBT.getInteger("gravitonShardsSpent"); + totalPowerConsumed = new BigInteger(NBT.getByteArray("totalPowerConsumed")); + totalRecipesProcessed = NBT.getLong("totalRecipesProcessed"); + totalFuelConsumed = NBT.getLong("totalFuelConsumed"); + stellarFuelAmount = NBT.getInteger("starFuelStored"); + gravitonShardEjection = NBT.getBoolean("gravitonShardEjection"); + isRenderActive = NBT.getBoolean("isRenderActive"); + ringAmount = NBT.getInteger("ringAmount"); + + NBTTagCompound tempBooleanTag = NBT.getCompoundTag("upgrades"); + + for (int upgradeIndex = 0; upgradeIndex < 31; upgradeIndex++) { + boolean upgrade = tempBooleanTag.getBoolean("upgrade" + upgradeIndex); + upgrades[upgradeIndex] = upgrade; + } + + tempBooleanTag = NBT.getCompoundTag("upgradeMaterials"); + + for (int upgradeIndex = 0; upgradeIndex < 7; upgradeIndex++) { + boolean upgrade = tempBooleanTag.getBoolean("upgradeMaterial" + upgradeIndex); + materialPaidUpgrades[upgradeIndex] = upgrade; + } + + super.loadNBTData(NBT); + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEMicrowave.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEMicrowave.java new file mode 100644 index 0000000000..d5e43aaa97 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEMicrowave.java @@ -0,0 +1,342 @@ +package tectech.thing.metaTileEntity.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.GregTechAPI.sBlockCasings4; +import static gregtech.api.util.GTStructureUtility.ofHatchAdderOptional; +import static net.minecraft.util.AxisAlignedBB.getBoundingBox; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.ArrayList; +import java.util.HashSet; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.util.Vec3Impl; + +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.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReason; +import tectech.Reference; +import tectech.loader.MainLoader; +import tectech.recipe.TTRecipeAdder; +import tectech.thing.metaTileEntity.multi.base.INameFunction; +import tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import tectech.thing.metaTileEntity.multi.base.LedStatus; +import tectech.thing.metaTileEntity.multi.base.Parameters; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.thing.metaTileEntity.multi.base.render.TTRenderedExtendedFacingTexture; +import tectech.util.CommonValues; + +/** + * Created by danie_000 on 17.12.2016. + */ +public class MTEMicrowave extends TTMultiblockBase implements IConstructable { + + // region variables + private boolean hasBeenPausedThisCycle = false; + // endregion + + // region structure + // use multi A energy inputs, use less power the longer it runs + private static final String[] description = new String[] { + EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + translateToLocal("gt.blockmachines.multimachine.tm.microwave.hint.0"), // 1 - Classic Hatches or Clean + // Stainless Steel + // Casing + translateToLocal("gt.blockmachines.multimachine.tm.microwave.hint.1"), // Also acts like a hopper so give it + // an Output + // Bus + }; + + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + "main", + transpose( + new String[][] { { "AAAAA", "A---A", "A---A", "A---A", "AAAAA" }, + { "AAAAA", "A---A", "A---A", "A---A", "AAAAA" }, { "AA~AA", "A---A", "A---A", "A---A", "AAAAA" }, + { "ABBBA", "BAAAB", "BAAAB", "BAAAB", "ABBBA" } })) + .addElement('A', ofBlock(sBlockCasings4, 1)) + .addElement('B', ofHatchAdderOptional(MTEMicrowave::addClassicToMachineList, 49, 1, sBlockCasings4, 1)) + .build(); + // endregion + + // region parameters + protected Parameters.Group.ParameterIn powerSetting, timerSetting; + protected Parameters.Group.ParameterOut timerValue, remainingTime; + private static final INameFunction POWER_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.microwave.cfgi.0"); // Power setting + private static final INameFunction TIMER_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.microwave.cfgi.1"); // Timer setting + + private static final INameFunction TIMER_VALUE_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.microwave.cfgo.0"); // Timer value + private static final INameFunction TIMER_REMAINING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.microwave.cfgo.1"); // Timer remaining + private static final IStatusFunction POWER_STATUS = (base, p) -> LedStatus + .fromLimitsInclusiveOuterBoundary(p.get(), 300, 1000, 1000, Double.POSITIVE_INFINITY); + private static final IStatusFunction TIMER_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return LedStatus.STATUS_WRONG; + value = (int) value; + if (value <= 0) return LedStatus.STATUS_TOO_LOW; + if (value > 3000) return LedStatus.STATUS_TOO_HIGH; + return LedStatus.STATUS_OK; + }; + // endregion + + public MTEMicrowave(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMicrowave(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMicrowave(mName); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + return structureCheck_EM("main", 2, 2, 0); + } + + @Override + @NotNull + public CheckRecipeResult checkProcessing_EM() { + hasBeenPausedThisCycle = false; + if ((int) powerSetting.get() < 300 || timerSetting.get() <= 0 || timerSetting.get() > 3000) { + return SimpleCheckRecipeResult.ofFailure("invalid_timer"); + } + if (remainingTime.get() <= 0) { + remainingTime.set(timerSetting.get()); + timerValue.set(0); + } + mEUt = -((int) powerSetting.get() >> 1); + eAmpereFlow = 1; + mMaxProgresstime = 20; + mEfficiencyIncrease = 10000; + return SimpleCheckRecipeResult.ofSuccess("microwaving"); + } + + @Override + public void outputAfterRecipe_EM() { + if (hasBeenPausedThisCycle) { + return; // skip timer and actions if paused + } + timerValue.set(timerValue.get() + 1); + remainingTime.set(timerSetting.get() - timerValue.get()); + IGregTechTileEntity mte = getBaseMetaTileEntity(); + Vec3Impl xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -1, 2)); + double xPos = mte.getXCoord() + 0.5f + xyzOffsets.get0(); + double yPos = mte.getYCoord() + 0.5f + xyzOffsets.get1(); + double zPos = mte.getZCoord() + 0.5f + xyzOffsets.get2(); + AxisAlignedBB aabb = getBoundingBox(-2, -2, -2, 2, 2, 2).offset(xPos, yPos, zPos); + xyzOffsets = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -4, 0)); + Vec3Impl xyzExpansion = getExtendedFacing().getWorldOffset(new Vec3Impl(1, 0, 1)) + .abs(); + int power = (int) powerSetting.get(); + int damagingFactor = Math.min(power >> 6, 8) + Math.min(power >> 8, 24) + + Math.min(power >> 12, 48) + + (power >> 18); + + ArrayList itemsToOutput = new ArrayList<>(); + HashSet tickedStuff = new HashSet<>(); + + boolean inside = true; + do { + for (Object entity : mte.getWorld() + .getEntitiesWithinAABBExcludingEntity(null, aabb)) { + if (entity instanceof Entity) { + if (tickedStuff.add((Entity) entity)) { + if (inside && entity instanceof EntityItem) { + GTRecipe tRecipe = RecipeMaps.microwaveRecipes.findRecipe( + mte, + null, + true, + 128, + null, + null, + new ItemStack[] { ((EntityItem) entity).getEntityItem() }); + if (tRecipe == null || tRecipe.mInputs.length == 0 || tRecipe.mInputs[0].stackSize != 1) { + itemsToOutput.add(((EntityItem) entity).getEntityItem()); + } else { + ItemStack newStuff = tRecipe.getOutput(0) + .copy(); + newStuff.stackSize = ((EntityItem) entity).getEntityItem().stackSize; + itemsToOutput.add(newStuff); + } + ((EntityItem) entity).delayBeforeCanPickup = 2; + ((EntityItem) entity).setDead(); + } else if (entity instanceof EntityLivingBase) { + if (!GTUtility.isWearingFullElectroHazmat((EntityLivingBase) entity)) { + ((EntityLivingBase) entity).attackEntityFrom(MainLoader.microwaving, damagingFactor); + } + } + } + } + } + aabb.offset(xyzOffsets.get0(), xyzOffsets.get1(), xyzOffsets.get2()); + aabb = aabb.expand(xyzExpansion.get0() * 1.5, xyzExpansion.get1() * 1.5, xyzExpansion.get2() * 1.5); + inside = false; + damagingFactor >>= 1; + } while (damagingFactor > 0); + + mOutputItems = itemsToOutput.toArray(TTRecipeAdder.nullItem); + + if (remainingTime.get() <= 0) { + mte.getWorld() + .playSoundEffect(xPos, yPos, zPos, Reference.MODID + ":microwave_ding", 1, 1); + stopMachine(); + } + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.tm.microwave.name")) // Machine Type: + // Microwave Grinder + .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.0")) // Controller block of + // the + // Microwave Grinder + .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.1")) // Starts a timer when + // enabled + .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.2")) // While the timer is + // running + // anything inside the machine + // will take damage + .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.3")) // The machine will also + // collect + // any items inside of it + .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.4")) // Can be configured + // with a Parametrizer + .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.microwave.desc.5")) // (Do not insert a + // Wither) + .addSeparator() + .beginStructureBlock(5, 4, 5, true) + .addController(translateToLocal("tt.keyword.Structure.FrontCenter")) // Controller: Front center + .addCasingInfoMin(translateToLocal("tt.keyword.Structure.StainlessSteelCasing"), 60, false) // 60x + // Stainless + // Steel + // Casing (minimum) + .addOtherStructurePart( + translateToLocal("tt.keyword.Structure.DataConnector"), + translateToLocal("tt.keyword.Structure.AnyOuterCasingOnBottom"), + 2) // Output Bus: Any outer casing on the bottom layer + .addOtherStructurePart( + translateToLocal("gt.blockmachines.hatch.param.tier.05.name"), + translateToLocal("tt.keyword.Structure.Optional") + " " + + translateToLocal("tt.keyword.Structure.AnyOuterCasingOnBottom"), + 2) // Parametrizer: (optional) Any outer casing on the bottom layer + .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyOuterCasingOnBottom"), 1) // Energy Hatch: Any + // outer casing on + // the bottom layer + .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyOuterCasingOnBottom"), 1) // Maintenance + // Hatch: Any + // outer casing + // on the + // bottom layer + .toolTipFinisher(CommonValues.THETA_MOVEMENT); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][49], + new TTRenderedExtendedFacingTexture( + aActive ? Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE_ACTIVE + : Textures.BlockIcons.OVERLAY_FRONT_ELECTRIC_BLAST_FURNACE) }; + } else if (side == facing.getOpposite()) { + return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][49], + aActive ? Textures.BlockIcons.casingTexturePages[0][52] + : Textures.BlockIcons.casingTexturePages[0][53] }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[0][49] }; + } + + @Override + protected void parametersInstantiation_EM() { + Parameters.Group hatch_0 = parametrization.getGroup(0, true); + powerSetting = hatch_0.makeInParameter(0, 1000, POWER_SETTING_NAME, POWER_STATUS); + timerSetting = hatch_0.makeInParameter(1, 360, TIMER_SETTING_NAME, TIMER_STATUS); + + timerValue = hatch_0.makeOutParameter(0, 0, TIMER_VALUE_NAME, TIMER_STATUS); + remainingTime = hatch_0.makeOutParameter(1, 360, TIMER_REMAINING_NAME, TIMER_STATUS); + } + + @Override + public void stopMachine(@Nonnull ShutDownReason reason) { + super.stopMachine(reason); + remainingTime.set(timerSetting.get()); + timerValue.set(0); + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (eSafeVoid) { + hasBeenPausedThisCycle = true; + } + return hasBeenPausedThisCycle || super.onRunningTick(aStack); // consume eu and other resources if not paused + } + + // TODO Why is the basetype 1?? + @Override + public byte getTileEntityBaseType() { + return 1; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM("main", 2, 2, 0, stackSize, hintsOnly); + } + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return description; + } + + @Override + public boolean isPowerPassButtonEnabled() { + return true; + } + + @Override + public boolean isSafeVoidButtonEnabled() { + return false; + } + + @Override + public boolean isAllowedToWorkButtonEnabled() { + return true; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTENetworkSwitch.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTENetworkSwitch.java new file mode 100644 index 0000000000..4ce04dc6ab --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTENetworkSwitch.java @@ -0,0 +1,283 @@ +package tectech.thing.metaTileEntity.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.util.GTStructureUtility.ofHatchAdderOptional; +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.util.Vec3Impl; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +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.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.MultiblockTooltipBuilder; +import tectech.Reference; +import tectech.mechanics.dataTransport.QuantumDataPacket; +import tectech.thing.casing.BlockGTCasingsTT; +import tectech.thing.casing.TTCasingsContainer; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataInput; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataOutput; +import tectech.thing.metaTileEntity.multi.base.INameFunction; +import tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import tectech.thing.metaTileEntity.multi.base.LedStatus; +import tectech.thing.metaTileEntity.multi.base.Parameters; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.thing.metaTileEntity.multi.base.render.TTRenderedExtendedFacingTexture; +import tectech.util.CommonValues; + +/** + * Created by danie_000 on 17.12.2016. + */ +public class MTENetworkSwitch extends TTMultiblockBase implements IConstructable { + + // region structure + private static final String[] description = new String[] { + EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + "1 - Classic/Data Hatches or Computer casing", // 1 - Classic/Data Hatches or Computer casing + }; + + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + "main", + transpose(new String[][] { { "BBB", "BBB", "BBB" }, { "B~B", "BAB", "BBB" }, { "BBB", "BBB", "BBB" } })) + .addElement('A', ofBlock(TTCasingsContainer.sBlockCasingsTT, 3)) + .addElement( + 'B', + ofHatchAdderOptional( + MTENetworkSwitch::addClassicToMachineList, + BlockGTCasingsTT.textureOffset + 1, + 1, + TTCasingsContainer.sBlockCasingsTT, + 1)) + .build(); + // endregion + + // region parameters + private static final INameFunction ROUTE_NAME = (base, + p) -> (p.parameterId() == 0 ? translateToLocal("tt.keyword.Destination") + " " + : translateToLocal("tt.keyword.Weight") + " ") + p.hatchId(); + private static final IStatusFunction WEI_STATUS = (base, p) -> { + double v = p.get(); + if (Double.isNaN(v)) return LedStatus.STATUS_WRONG; + if (v < 0) return LedStatus.STATUS_TOO_LOW; + if (v == 0) return LedStatus.STATUS_LOW; + if (Double.isInfinite(v)) return LedStatus.STATUS_HIGH; + return LedStatus.STATUS_OK; + }; + private static final IStatusFunction DST_STATUS = (base, p) -> { + if (base.weight[p.hatchId()].getStatus(false).isOk) { + double v = p.get(); + if (Double.isNaN(v)) return LedStatus.STATUS_WRONG; + v = (int) v; + if (v <= 0) return LedStatus.STATUS_TOO_LOW; + return LedStatus.STATUS_OK; + } + return LedStatus.STATUS_NEUTRAL; + }; + protected Parameters.Group.ParameterIn[] dst; + protected Parameters.Group.ParameterIn[] weight; + // endregion + + public MTENetworkSwitch(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTENetworkSwitch(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTENetworkSwitch(mName); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + return structureCheck_EM("main", 1, 1, 0); + } + + @Override + @NotNull + protected CheckRecipeResult checkProcessing_EM() { + short thingsActive = 0; + for (MTEHatchDataInput di : eInputData) { + if (di.q != null) { + thingsActive++; + } + } + + if (thingsActive > 0) { + thingsActive += eOutputData.size(); + mEUt = -(int) V[7]; + eAmpereFlow = 1 + (thingsActive >> 2); + mMaxProgresstime = 20; + mEfficiencyIncrease = 10000; + return SimpleCheckRecipeResult.ofSuccess("routing"); + } + return SimpleCheckRecipeResult.ofFailure("no_routing"); + } + + @Override + public void outputAfterRecipe_EM() { + if (!eOutputData.isEmpty()) { + double total = 0; + double weight; + for (int i = 0; i < 10; i++) { // each param pair + weight = this.weight[i].get(); + if (weight > 0 && dst[i].get() >= 0) { + total += weight; // Total weighted div + } + } + + Vec3Impl pos = new Vec3Impl( + getBaseMetaTileEntity().getXCoord(), + getBaseMetaTileEntity().getYCoord(), + getBaseMetaTileEntity().getZCoord()); + + QuantumDataPacket pack = new QuantumDataPacket(0L).unifyTraceWith(pos); + if (pack == null) { + return; + } + for (MTEHatchDataInput hatch : eInputData) { + if (hatch.q == null || hatch.q.contains(pos)) { + continue; + } + pack = pack.unifyPacketWith(hatch.q); + if (pack == null) { + return; + } + } + + long remaining = pack.getContent(); + + double dest; + for (int i = 0; i < 10; i++) { + dest = dst[i].get(); + weight = this.weight[i].get(); + if (weight > 0 && dest >= 0) { + int outIndex = (int) dest - 1; + if (outIndex < 0 || outIndex >= eOutputData.size()) { + continue; + } + MTEHatchDataOutput out = eOutputData.get(outIndex); + if (Double.isInfinite(total)) { + if (Double.isInfinite(weight)) { + out.q = new QuantumDataPacket(remaining).unifyTraceWith(pack); + break; + } + } else { + long part = (long) Math.floor(pack.getContent() * weight / total); + if (part > 0) { + remaining -= part; + if (remaining > 0) { + out.q = new QuantumDataPacket(part).unifyTraceWith(pack); + } else if (part + remaining > 0) { + out.q = new QuantumDataPacket(part + remaining).unifyTraceWith(pack); + break; + } else { + break; + } + } + } + } + } + } + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.switch.name")) // Machine Type: Network + // Switch With QoS + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.switch.desc.0")) // Controller block of the + // Network + // Switch With QoS + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.switch.desc.1")) // Used to route and + // distribute computation + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.switch.desc.2")) // Needs a Parametrizer to + // be configured + .addSeparator() + .beginStructureBlock(3, 3, 3, false) + .addController(translateToLocal("tt.keyword.Structure.FrontCenter")) // Controller: Front center + .addCasingInfoMin(translateToLocal("gt.blockcasingsTT.1.name"), 0, false) // 0x Computer Casing + // (minimum) + .addOtherStructurePart( + translateToLocal("gt.blockcasingsTT.3.name"), + translateToLocal("tt.keyword.Structure.Center")) // Advanced Computer Casing: Center + .addOtherStructurePart( + translateToLocal("tt.keyword.Structure.DataConnector"), + translateToLocal("tt.keyword.Structure.AnyComputerCasing"), + 2) // Data Connector: Any Computer Casing + .addOtherStructurePart( + translateToLocal("gt.blockmachines.hatch.param.tier.05.name"), + translateToLocal("tt.keyword.Structure.AnyComputerCasing"), + 2) // Parametrizer: Any Computer Casing + .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasing"), 1) // Energy Hatch: Any + // Computer Casing + .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasing"), 1) // Maintenance + // Hatch: Any + // Computer Casing + .toolTipFinisher(CommonValues.TEC_MARK_EM); + return tt; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][1], + new TTRenderedExtendedFacingTexture(aActive ? TTMultiblockBase.ScreenON : TTMultiblockBase.ScreenOFF) }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][1] }; + } + + public static final ResourceLocation activitySound = new ResourceLocation(Reference.MODID + ":fx_hi_freq"); + + @Override + @SideOnly(Side.CLIENT) + protected ResourceLocation getActivitySound() { + return activitySound; + } + + @Override + protected void parametersInstantiation_EM() { + dst = new Parameters.Group.ParameterIn[10]; + weight = new Parameters.Group.ParameterIn[10]; + for (int i = 0; i < 10; i++) { + Parameters.Group hatch = parametrization.getGroup(i); + dst[i] = hatch.makeInParameter(0, i, ROUTE_NAME, DST_STATUS); + weight[i] = hatch.makeInParameter(1, 0, ROUTE_NAME, WEI_STATUS); + } + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM("main", 1, 1, 0, stackSize, hintsOnly); + } + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return description; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEQuantumComputer.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEQuantumComputer.java new file mode 100644 index 0000000000..6a96a79f29 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEQuantumComputer.java @@ -0,0 +1,618 @@ +package tectech.thing.metaTileEntity.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.util.Vec3Impl; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.common.WirelessComputationPacket; +import tectech.mechanics.dataTransport.QuantumDataPacket; +import tectech.thing.casing.BlockGTCasingsTT; +import tectech.thing.casing.TTCasingsContainer; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataInput; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataOutput; +import tectech.thing.metaTileEntity.hatch.MTEHatchRack; +import tectech.thing.metaTileEntity.hatch.MTEHatchWirelessComputationOutput; +import tectech.thing.metaTileEntity.multi.base.INameFunction; +import tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import tectech.thing.metaTileEntity.multi.base.LedStatus; +import tectech.thing.metaTileEntity.multi.base.Parameters; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.thing.metaTileEntity.multi.base.render.TTRenderedExtendedFacingTexture; +import tectech.util.CommonValues; + +/** + * Created by danie_000 on 17.12.2016. + */ +public class MTEQuantumComputer extends TTMultiblockBase implements ISurvivalConstructable { + + // region variables + private final ArrayList eRacks = new ArrayList<>(); + + private final ArrayList eWirelessComputationOutputs = new ArrayList<>(); + + private static Textures.BlockIcons.CustomIcon ScreenOFF; + private static Textures.BlockIcons.CustomIcon ScreenON; + // endregion + + // region structure + private static final String[] description = new String[] { + EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + translateToLocal("gt.blockmachines.multimachine.em.computer.hint.0"), // 1 - Classic/Data Hatches or + // Computer casing + translateToLocal("gt.blockmachines.multimachine.em.computer.hint.1"), // 2 - Rack Hatches or Advanced + // computer casing + }; + + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape("front", transpose(new String[][] { { " AA" }, { " AA" }, { " ~A" }, { " AA" } })) + .addShape("cap", transpose(new String[][] { { "-CB" }, { " DD" }, { " DD" }, { "-CB" } })) + .addShape("slice", transpose(new String[][] { { "-CB" }, { " ED" }, { " ED" }, { "-CB" } })) + .addShape("back", transpose(new String[][] { { " AA" }, { " AA" }, { " AA" }, { " AA" } })) + .addElement('B', ofBlock(TTCasingsContainer.sBlockCasingsTT, 1)) + .addElement('C', ofBlock(TTCasingsContainer.sBlockCasingsTT, 2)) + .addElement('D', ofBlock(TTCasingsContainer.sBlockCasingsTT, 3)) + .addElement( + 'A', + buildHatchAdder(MTEQuantumComputer.class) + .atLeast( + Energy.or(HatchElement.EnergyMulti), + Maintenance, + HatchElement.Uncertainty, + HatchElement.OutputData, + WirelessComputationHatchElement.INSTANCE) + .casingIndex(BlockGTCasingsTT.textureOffset + 1) + .dot(1) + .buildAndChain(ofBlock(TTCasingsContainer.sBlockCasingsTT, 1))) + .addElement( + 'E', + RackHatchElement.INSTANCE + .newAnyOrCasing(BlockGTCasingsTT.textureOffset + 3, 2, TTCasingsContainer.sBlockCasingsTT, 3)) + .build(); + // endregion + + // region parameters + protected Parameters.Group.ParameterIn overclock, overvolt; + protected Parameters.Group.ParameterOut maxCurrentTemp, availableData; + + private boolean wirelessModeEnabled = false; + + private static final INameFunction OC_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.em.computer.cfgi.0"); // Overclock ratio + private static final INameFunction OV_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.em.computer.cfgi.1"); // Overvoltage ratio + private static final INameFunction MAX_TEMP_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.em.computer.cfgo.0"); // Current max. heat + private static final INameFunction COMPUTE_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.em.computer.cfgo.1"); // Produced computation + private static final IStatusFunction OC_STATUS = (base, p) -> LedStatus + .fromLimitsInclusiveOuterBoundary(p.get(), 0, 1, 3, 5); + private static final IStatusFunction OV_STATUS = (base, p) -> LedStatus + .fromLimitsInclusiveOuterBoundary(p.get(), 0, 1, 3, 5); + private static final IStatusFunction MAX_TEMP_STATUS = (base, p) -> LedStatus + .fromLimitsInclusiveOuterBoundary(p.get(), 0, 2000, 8000, 10000); + private static final IStatusFunction COMPUTE_STATUS = (base, p) -> { + if (base.eAvailableData < 0) { + return LedStatus.STATUS_TOO_LOW; + } + if (base.eAvailableData == 0) { + return LedStatus.STATUS_NEUTRAL; + } + return LedStatus.STATUS_OK; + }; + // endregion + + public MTEQuantumComputer(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + eCertainMode = 5; + eCertainStatus = -128; // no-brain value + } + + public MTEQuantumComputer(String aName) { + super(aName); + eCertainMode = 5; + eCertainStatus = -128; // no-brain value + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEQuantumComputer(mName); + } + + @Override + protected void parametersInstantiation_EM() { + Parameters.Group hatch_0 = parametrization.getGroup(0); + overclock = hatch_0.makeInParameter(0, 1, OC_NAME, OC_STATUS); + overvolt = hatch_0.makeInParameter(1, 1, OV_NAME, OV_STATUS); + maxCurrentTemp = hatch_0.makeOutParameter(0, 0, MAX_TEMP_NAME, MAX_TEMP_STATUS); + availableData = hatch_0.makeOutParameter(1, 0, COMPUTE_NAME, COMPUTE_STATUS); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + for (MTEHatchRack rack : filterValidMTEs(eRacks)) { + rack.getBaseMetaTileEntity() + .setActive(false); + } + eRacks.clear(); + if (!structureCheck_EM("front", 1, 2, 0)) { + return false; + } + if (!structureCheck_EM("cap", 1, 2, -1)) { + return false; + } + byte offset = -2, totalLen = 4; + while (offset > -16) { + if (!structureCheck_EM("slice", 1, 2, offset)) { + break; + } + totalLen++; + offset--; + } + if (totalLen > 17) { + return false; + } + if (!structureCheck_EM("cap", 1, 2, ++offset)) { + return false; + } + if (!structureCheck_EM("back", 1, 2, --offset)) { + return false; + } + eCertainMode = (byte) Math.min(totalLen / 3, 5); + for (MTEHatchRack rack : filterValidMTEs(eRacks)) { + rack.getBaseMetaTileEntity() + .setActive(iGregTechTileEntity.isActive()); + } + return eUncertainHatches.size() == 1; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setDouble("computation", availableData.get()); + aNBT.setBoolean("wirelessModeEnabled", wirelessModeEnabled); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + if (availableData != null) { + availableData.set(aNBT.getDouble("computation")); + eAvailableData = (long) availableData.get(); + } + if (aNBT.hasKey("wirelessModeEnabled")) { + wirelessModeEnabled = aNBT.getBoolean("wirelessModeEnabled"); + if (wirelessModeEnabled) { + WirelessComputationPacket.enableWirelessNetWork(getBaseMetaTileEntity()); + } + } else { + wirelessModeEnabled = false; + } + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && wirelessModeEnabled && aTick % 20 == 0) { + WirelessComputationPacket.updatePacket(aBaseMetaTileEntity, aTick); + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isServerSide() && mMachine + && !aBaseMetaTileEntity.isActive() + && aTick % 20 == CommonValues.MULTI_CHECK_AT) { + double maxTemp = 0; + for (MTEHatchRack rack : filterValidMTEs(eRacks)) { + if (rack.heat > maxTemp) { + maxTemp = rack.heat; + } + } + maxCurrentTemp.set(maxTemp); + } + } + + @Override + @NotNull + protected CheckRecipeResult checkProcessing_EM() { + parametrization.setToDefaults(false, true); + eAvailableData = 0; + double maxTemp = 0; + double overClockRatio = overclock.get(); + double overVoltageRatio = overvolt.get(); + if (Double.isNaN(overClockRatio) || Double.isNaN(overVoltageRatio)) { + return SimpleCheckRecipeResult.ofFailure("no_computing"); + } + if (overclock.getStatus(true).isOk && overvolt.getStatus(true).isOk) { + float eut = V[7] * (float) overClockRatio * (float) overVoltageRatio; + if (eut < Integer.MAX_VALUE - 7) { + mEUt = -(int) eut; + } else { + mEUt = -(int) V[7]; + return CheckRecipeResultRegistry.POWER_OVERFLOW; + } + short thingsActive = 0; + int rackComputation; + + for (MTEHatchRack rack : filterValidMTEs(eRacks)) { + if (rack.heat > maxTemp) { + maxTemp = rack.heat; + } + rackComputation = rack.tickComponents((float) overClockRatio, (float) overVoltageRatio); + if (rackComputation > 0) { + eAvailableData += rackComputation; + thingsActive += 4; + } + rack.getBaseMetaTileEntity() + .setActive(true); + } + + for (MTEHatchDataInput di : eInputData) { + if (di.q != null) // ok for power losses + { + thingsActive++; + } + } + + if (thingsActive > 0 && eCertainStatus == 0) { + thingsActive += eOutputData.size(); + eAmpereFlow = 1 + (thingsActive >> 2); + mMaxProgresstime = 20; + mEfficiencyIncrease = 10000; + maxCurrentTemp.set(maxTemp); + availableData.set(eAvailableData); + return SimpleCheckRecipeResult.ofSuccess("computing"); + } else { + eAvailableData = 0; + mEUt = -(int) V[7]; + eAmpereFlow = 1; + mMaxProgresstime = 20; + mEfficiencyIncrease = 10000; + maxCurrentTemp.set(maxTemp); + availableData.set(eAvailableData); + return SimpleCheckRecipeResult.ofSuccess("no_computing"); + } + } + return SimpleCheckRecipeResult.ofFailure("no_computing"); + } + + @Override + public void outputAfterRecipe_EM() { + if (!eOutputData.isEmpty()) { + Vec3Impl pos = new Vec3Impl( + getBaseMetaTileEntity().getXCoord(), + getBaseMetaTileEntity().getYCoord(), + getBaseMetaTileEntity().getZCoord()); + + QuantumDataPacket pack = new QuantumDataPacket(eAvailableData / (eOutputData.size())).unifyTraceWith(pos); + if (pack == null) { + return; + } + for (MTEHatchDataInput hatch : eInputData) { + if (hatch.q == null || hatch.q.contains(pos)) { + continue; + } + pack = pack.unifyPacketWith(hatch.q); + if (pack == null) { + return; + } + } + + for (MTEHatchDataOutput o : eOutputData) { + o.q = pack; + } + } + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.computer.name")) // Machine Type: Quantum + // Computer + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.computer.desc.0")) // Controller block of + // the Quantum Computer + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.computer.desc.1")) // Used to generate + // computation (and heat) + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.computer.desc.2")) // Use screwdriver to toggle + // wireless mode + .addInfo(translateToLocal("tt.keyword.Structure.StructureTooComplex")) // The structure is too complex! + .addSeparator() + .beginVariableStructureBlock(2, 2, 4, 4, 5, 16, false) + .addOtherStructurePart( + translateToLocal("gt.blockmachines.hatch.certain.tier.07.name"), + translateToLocal("tt.keyword.Structure.AnyComputerCasingFirstOrLastSlice"), + 1) // Uncertainty Resolver: Any Computer Casing on first or last slice + .addOtherStructurePart( + translateToLocal("tt.keyword.Structure.DataConnector"), + translateToLocal("tt.keyword.Structure.AnyComputerCasingFirstOrLastSlice"), + 1) // Optical Connector: Any Computer Casing on first or last slice + .addOtherStructurePart( + translateToLocal("gt.blockmachines.hatch.rack.tier.08.name"), + translateToLocal("tt.keyword.Structure.AnyAdvComputerCasingExceptOuter"), + 2) // Computer Rack: Any Advanced Computer Casing, except the outer ones + .addOtherStructurePart( + translateToLocal("gt.blockmachines.hatch.param.tier.05.name"), + translateToLocal("tt.keyword.Structure.Optional") + " " + + translateToLocal("tt.keyword.Structure.AnyComputerCasingFirstOrLastSlice"), + 2) // Parametrizer: (optional) Any Computer Casing on first or last slice + .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasingFirstOrLastSlice"), 1) // Energy + // Hatch: + // Any + // Computer + // Casing + // on + // first + // or + // last + // slice + .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasingFirstOrLastSlice"), 1) // Maintenance + // Hatch: + // Any + // Computer + // Casing + // on + // first + // or + // last + // slice + .toolTipFinisher(CommonValues.TEC_MARK_EM); + return tt; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (getBaseMetaTileEntity().isServerSide()) { + wirelessModeEnabled = !wirelessModeEnabled; + if (wirelessModeEnabled) { + GTUtility.sendChatToPlayer(aPlayer, "Wireless mode enabled"); + WirelessComputationPacket.enableWirelessNetWork(getBaseMetaTileEntity()); + } else { + GTUtility.sendChatToPlayer(aPlayer, "Wireless mode disabled"); + WirelessComputationPacket.disableWirelessNetWork(getBaseMetaTileEntity()); + } + } + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/EM_COMPUTER"); + ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/EM_COMPUTER_ACTIVE"); + super.registerIcons(aBlockIconRegister); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][3], + new TTRenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][3] }; + } + + @Override + @SideOnly(Side.CLIENT) + protected ResourceLocation getActivitySound() { + return MTENetworkSwitch.activitySound; + } + + @Override + public void onRemoval() { + super.onRemoval(); + for (MTEHatchRack rack : filterValidMTEs(eRacks)) { + rack.getBaseMetaTileEntity() + .setActive(false); + } + } + + @Override + protected void extraExplosions_EM() { + for (MetaTileEntity tTileEntity : eRacks) { + tTileEntity.getBaseMetaTileEntity() + .doExplosion(V[8]); + } + } + + @Override + protected long getAvailableData_EM() { + return eAvailableData; + } + + @Override + public void stopMachine(@Nonnull ShutDownReason reason) { + super.stopMachine(reason); + eAvailableData = 0; + for (MTEHatchRack rack : filterValidMTEs(eRacks)) { + rack.getBaseMetaTileEntity() + .setActive(false); + } + } + + @Override + protected void afterRecipeCheckFailed() { + super.afterRecipeCheckFailed(); + for (MTEHatchRack rack : filterValidMTEs(eRacks)) { + rack.getBaseMetaTileEntity() + .setActive(false); + } + } + + public final boolean addRackToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchRack) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eRacks.add((MTEHatchRack) aMetaTileEntity); + } + return false; + } + + public final boolean addWirelessDataOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchWirelessComputationOutput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + // Add to wireless computation outputs, so we can detect these and turn on wireless mode, + // but also add to regular outputs, so they are used as output data hatches by the quantum computer + return eWirelessComputationOutputs.add((MTEHatchWirelessComputationOutput) aMetaTileEntity) + && eOutputData.add((MTEHatchWirelessComputationOutput) aMetaTileEntity); + } + return false; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM("front", 1, 2, 0, stackSize, hintsOnly); + structureBuild_EM("cap", 1, 2, -1, stackSize, hintsOnly); + + byte offset = -2; + for (int rackSlices = Math.min(stackSize.stackSize, 12); rackSlices > 0; rackSlices--) { + structureBuild_EM("slice", 1, 2, offset--, stackSize, hintsOnly); + } + + structureBuild_EM("cap", 1, 2, offset--, stackSize, hintsOnly); + structureBuild_EM("back", 1, 2, offset, stackSize, hintsOnly); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (mMachine) return -1; + int built; + built = survivialBuildPiece("front", stackSize, 1, 2, 0, elementBudget, source, actor, false, true); + if (built >= 0) return built; + built = survivialBuildPiece("cap", stackSize, 1, 2, -1, elementBudget, source, actor, false, true); + if (built >= 0) return built; + + byte offset = -2; + for (int rackSlices = Math.min(stackSize.stackSize, 12); rackSlices > 0; rackSlices--) { + built = survivialBuildPiece("slice", stackSize, 1, 2, offset--, elementBudget, source, actor, false, true); + if (built >= 0) return built; + } + built = survivialBuildPiece("cap", stackSize, 1, 2, offset--, elementBudget, source, actor, false, true); + if (built >= 0) return built; + return survivialBuildPiece("back", stackSize, 1, 2, offset, elementBudget, source, actor, false, true); + } + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return description; + } + + @Override + public String[] getInfoData() { + ArrayList data = new ArrayList<>(Arrays.asList(super.getInfoData())); + if (wirelessModeEnabled) { + WirelessComputationPacket wirelessComputationPacket = WirelessComputationPacket + .getPacketByUserId(getBaseMetaTileEntity().getOwnerUuid()); + data.add("Wireless mode: " + EnumChatFormatting.GREEN + "enabled"); + data.add( + "Total wireless computation available: " + EnumChatFormatting.YELLOW + + wirelessComputationPacket.getTotalComputationStored()); + } else { + data.add("Wireless mode: " + EnumChatFormatting.RED + "disabled"); + } + return data.toArray(new String[] {}); + } + + private enum RackHatchElement implements IHatchElement { + + INSTANCE; + + @Override + public List> mteClasses() { + return Collections.singletonList(MTEHatchRack.class); + } + + @Override + public IGTHatchAdder adder() { + return MTEQuantumComputer::addRackToMachineList; + } + + @Override + public long count(MTEQuantumComputer t) { + return t.eRacks.size(); + } + } + + private enum WirelessComputationHatchElement implements IHatchElement { + + INSTANCE; + + @Override + public List> mteClasses() { + return Collections.singletonList(MTEHatchWirelessComputationOutput.class); + } + + @Override + public IGTHatchAdder adder() { + return MTEQuantumComputer::addWirelessDataOutputToMachineList; + } + + @Override + public long count(MTEQuantumComputer gtMetaTileEntityEmComputer) { + return gtMetaTileEntityEmComputer.eWirelessComputationOutputs.size(); + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java new file mode 100644 index 0000000000..6f29160d48 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTEResearchStation.java @@ -0,0 +1,687 @@ +package tectech.thing.metaTileEntity.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.recipe.RecipeMaps.scannerFakeRecipes; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static mcp.mobius.waila.api.SpecialChars.GREEN; +import static mcp.mobius.waila.api.SpecialChars.RED; +import static mcp.mobius.waila.api.SpecialChars.RESET; +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChatComponentTranslation; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.reflect.FieldUtils; +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import gregtech.api.enums.ItemList; +import gregtech.api.enums.Textures; +import gregtech.api.enums.TierEU; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.AssemblyLineUtils; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.GTUtility; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReason; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import tectech.recipe.TecTechRecipeMaps; +import tectech.thing.casing.BlockGTCasingsTT; +import tectech.thing.casing.TTCasingsContainer; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchObjectHolder; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.thing.metaTileEntity.multi.base.render.TTRenderedExtendedFacingTexture; +import tectech.util.CommonValues; + +/** + * Created by danie_000 on 17.12.2016. + */ +@SuppressWarnings("unchecked") +public class MTEResearchStation extends TTMultiblockBase implements ISurvivalConstructable { + + public static final String machine = "EM Machinery"; + public static final String crafter = "EM Crafting"; + // region variables + private final ArrayList eHolders = new ArrayList<>(); + private GTRecipe.RecipeAssemblyLine tRecipe; + private static final String assembly = "Assembly line"; + private static final String scanner = "Scanner"; + private String machineType = assembly; + private ItemStack holdItem; + private long computationRemaining, computationRequired; + + // Used to sync currently researching item to GUI + private String clientOutputName; + + private static final String[] description = new String[] { + EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + translateToLocal("gt.blockmachines.multimachine.em.research.hint.0"), // 1 - Classic/Data Hatches or + // Computer casing + translateToLocal("gt.blockmachines.multimachine.em.research.hint.1"), // 2 - Holder Hatch + }; + + private String clientLocale = "en_US"; + // endregion + + // region structure + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + "main", + transpose( + new String[][] { { " ", " A ", " A ", "AAA", "AAA", "AAA", "AAA" }, + { "AAA", "ACA", "ACA", "ACA", "BCB", "BCB", "BBB" }, + { " ", " C ", " ", " ", "ACA", "CCC", "DDD" }, + { " ", " E ", " ", " ", "A~A", "CCC", "DDD" }, + { " ", " C ", " ", " ", "ACA", "CCC", "DDD" }, + { "AAA", "ACA", "ACA", "ACA", "BCB", "BCB", "BBB" }, + { " ", " A ", " A ", "AAA", "AAA", "AAA", "AAA" } })) + .addElement('A', ofBlock(TTCasingsContainer.sBlockCasingsTT, 1)) + .addElement('B', ofBlock(TTCasingsContainer.sBlockCasingsTT, 2)) + .addElement('C', ofBlock(TTCasingsContainer.sBlockCasingsTT, 3)) + .addElement( + 'D', + buildHatchAdder(MTEResearchStation.class) + .atLeast(Energy.or(HatchElement.EnergyMulti), Maintenance, HatchElement.InputData) + .casingIndex(BlockGTCasingsTT.textureOffset + 1) + .dot(1) + .buildAndChain(ofBlock(TTCasingsContainer.sBlockCasingsTT, 1))) + .addElement('E', HolderHatchElement.INSTANCE.newAny(BlockGTCasingsTT.textureOffset + 3, 2)) + .build(); + // endregion + + public MTEResearchStation(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEResearchStation(String aName) { + super(aName); + } + + private void makeStick() { + mInventory[1].setTagCompound(new NBTTagCompound()); + mInventory[1].getTagCompound() + .setString( + "author", + EnumChatFormatting.BLUE + "Tec" + + EnumChatFormatting.DARK_BLUE + + "Tech" + + EnumChatFormatting.WHITE + + ' ' + + machineType + + " Recipe Generator"); + AssemblyLineUtils.setAssemblyLineRecipeOnDataStick(mInventory[1], tRecipe); + } + + private boolean iterateRecipes() { + for (GTRecipe ttRecipe : TecTechRecipeMaps.researchStationFakeRecipes.getAllRecipes()) { + if (GTUtility.areStacksEqual(ttRecipe.mInputs[0], holdItem, true)) { + computationRequired = computationRemaining = ttRecipe.mDuration * 20L; + mMaxProgresstime = 20; + mEfficiencyIncrease = 10000; + eRequiredData = (short) (ttRecipe.mSpecialValue >>> 16); + eAmpereFlow = (short) (ttRecipe.mSpecialValue & 0xFFFF); + mEUt = Math.min(ttRecipe.mEUt, -ttRecipe.mEUt); + eHolders.get(0) + .getBaseMetaTileEntity() + .setActive(true); + return true; + } + } + return false; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEResearchStation(mName); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + for (MTEHatchObjectHolder rack : filterValidMTEs(eHolders)) { + rack.getBaseMetaTileEntity() + .setActive(false); + } + eHolders.clear(); + + if (!structureCheck_EM("main", 1, 3, 4)) { + return false; + } + + for (MTEHatchObjectHolder rack : filterValidMTEs(eHolders)) { + rack.getBaseMetaTileEntity() + .setActive(iGregTechTileEntity.isActive()); + } + return eHolders.size() == 1; + } + + @Override + @NotNull + protected CheckRecipeResult checkProcessing_EM() { + ItemStack controllerStack = getControllerSlot(); + tRecipe = null; + if (!eHolders.isEmpty() && eHolders.get(0).mInventory[0] != null) { + holdItem = eHolders.get(0).mInventory[0].copy(); + if (ItemList.Tool_DataStick.isStackEqual(controllerStack, false, true)) { + switch (machineType) { + case scanner -> { + for (GTRecipe.RecipeAssemblyLine assRecipe : GTRecipe.RecipeAssemblyLine.sAssemblylineRecipes) { + if (GTUtility.areStacksEqual(assRecipe.mResearchItem, holdItem, true)) { + boolean failScanner = true; + for (GTRecipe scannerRecipe : scannerFakeRecipes.getAllRecipes()) { + if (GTUtility.areStacksEqual(scannerRecipe.mInputs[0], holdItem, true)) { + failScanner = false; + break; + } + } + if (failScanner) { + return SimpleCheckRecipeResult.ofFailure("wrongRequirements"); + } + this.tRecipe = assRecipe; + // Set property + computationRequired = computationRemaining = assRecipe.mResearchTime; + mMaxProgresstime = 20; + mEfficiencyIncrease = 10000; + eRequiredData = 1; + eAmpereFlow = 1; + mEUt = (int) -TierEU.RECIPE_UV; + eHolders.get(0) + .getBaseMetaTileEntity() + .setActive(true); + return SimpleCheckRecipeResult.ofSuccess("scanning"); + } + } + } + case assembly -> { + for (GTRecipe.RecipeAssemblyLine assRecipe : TecTechRecipeMaps.researchableALRecipeList) { + if (GTUtility.areStacksEqual(assRecipe.mResearchItem, holdItem, true)) { + tRecipe = assRecipe; + // if found + if (iterateRecipes()) return SimpleCheckRecipeResult.ofSuccess("researching"); + } + } + } + } + } else { + return CheckRecipeResultRegistry.NO_DATA_STICKS; + } + } + holdItem = null; + computationRequired = computationRemaining = 0; + for (MTEHatchObjectHolder r : eHolders) { + r.getBaseMetaTileEntity() + .setActive(false); + } + return SimpleCheckRecipeResult.ofFailure("no_research_item"); + } + + @Override + public void outputAfterRecipe_EM() { + if (!eHolders.isEmpty()) { + if (tRecipe != null && ItemList.Tool_DataStick.isStackEqual(mInventory[1], false, true)) { + eHolders.get(0) + .getBaseMetaTileEntity() + .setActive(false); + eHolders.get(0).mInventory[0] = null; + makeStick(); + } + } + computationRequired = computationRemaining = 0; + tRecipe = null; + holdItem = null; + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.em.research.type")) // Machine Type: Research + // Station, Scanner + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.research.desc.0")) // Controller block of + // the Research Station + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.research.desc.1")) // Used to scan Data + // Sticks for + // Assembling Line Recipes + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.research.desc.2")) // Needs to be fed with + // computation to work + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.research.desc.3")) // Does not consume the + // item until + // the Data Stick is written + .addInfo(translateToLocal("gt.blockmachines.multimachine.em.research.desc.4")) // Use screwdriver to change + // mode + .addInfo(translateToLocal("tt.keyword.Structure.StructureTooComplex")) // The structure is too complex! + .addSeparator() + .beginStructureBlock(3, 7, 7, false) + .addOtherStructurePart( + translateToLocal("gt.blockmachines.hatch.holder.tier.09.name"), + translateToLocal("tt.keyword.Structure.CenterPillar"), + 2) // Object Holder: Center of the front pillar + .addOtherStructurePart( + translateToLocal("tt.keyword.Structure.DataConnector"), + translateToLocal("tt.keyword.Structure.AnyComputerCasingBackMain"), + 1) // Optical Connector: Any Computer Casing on the backside of the main body + .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasingBackMain"), 1) // Energy Hatch: + // Any Computer + // Casing on the + // backside of + // the main body + .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyComputerCasingBackMain"), 1) // Maintenance + // Hatch: + // Any + // Computer + // Casing on + // the + // backside + // of the + // main body + .toolTipFinisher(CommonValues.TEC_MARK_EM); + return tt; + } + + @Override + public String[] getInfoData() { + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + for (MTEHatchEnergyMulti tHatch : filterValidMTEs(eEnergyMulti)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + return new String[] { translateToLocalFormatted("tt.keyphrase.Energy_Hatches", clientLocale) + ":", + EnumChatFormatting.GREEN + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + (mEUt <= 0 ? translateToLocalFormatted("tt.keyphrase.Probably_uses", clientLocale) + ": " + : translateToLocalFormatted("tt.keyphrase.Probably_makes", clientLocale) + ": ") + + EnumChatFormatting.RED + + GTUtility.formatNumbers(Math.abs(mEUt)) + + EnumChatFormatting.RESET + + " EU/t " + + translateToLocalFormatted("tt.keyword.at", clientLocale) + + " " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(eAmpereFlow) + + EnumChatFormatting.RESET + + " A", + translateToLocalFormatted("tt.keyphrase.Tier_Rating", clientLocale) + ": " + + EnumChatFormatting.YELLOW + + VN[getMaxEnergyInputTier_EM()] + + EnumChatFormatting.RESET + + " / " + + EnumChatFormatting.GREEN + + VN[getMinEnergyInputTier_EM()] + + EnumChatFormatting.RESET + + " " + + translateToLocalFormatted("tt.keyphrase.Amp_Rating", clientLocale) + + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(eMaxAmpereFlow) + + EnumChatFormatting.RESET + + " A", + translateToLocalFormatted("tt.keyword.Problems", clientLocale) + ": " + + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " " + + translateToLocalFormatted("tt.keyword.Efficiency", clientLocale) + + ": " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + translateToLocalFormatted("tt.keyword.PowerPass", clientLocale) + ": " + + EnumChatFormatting.BLUE + + ePowerPass + + EnumChatFormatting.RESET + + " " + + translateToLocalFormatted("tt.keyword.SafeVoid", clientLocale) + + ": " + + EnumChatFormatting.BLUE + + eSafeVoid, + translateToLocalFormatted("tt.keyphrase.Computation_Available", clientLocale) + ": " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(eAvailableData) + + EnumChatFormatting.RESET + + " / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(eRequiredData) + + EnumChatFormatting.RESET, + translateToLocalFormatted("tt.keyphrase.Computation_Remaining", clientLocale) + ":", + EnumChatFormatting.GREEN + GTUtility.formatNumbers(computationRemaining / 20L) + + EnumChatFormatting.RESET + + " / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(getComputationRequired()) }; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][3], + new TTRenderedExtendedFacingTexture(aActive ? TTMultiblockBase.ScreenON : TTMultiblockBase.ScreenOFF) }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][3] }; + } + + @Override + public void onRemoval() { + super.onRemoval(); + for (MTEHatchObjectHolder r : eHolders) { + r.getBaseMetaTileEntity() + .setActive(false); + } + } + + @Override + protected void extraExplosions_EM() { + for (MetaTileEntity tTileEntity : eHolders) { + tTileEntity.getBaseMetaTileEntity() + .doExplosion(V[9]); + } + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setLong("eComputationRemaining", computationRemaining); + aNBT.setLong("eComputationRequired", computationRequired); + aNBT.setString("eMachineType", machineType); + if (holdItem != null) { + aNBT.setTag("eHold", holdItem.writeToNBT(new NBTTagCompound())); + } else { + aNBT.removeTag("eHold"); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + computationRemaining = aNBT.getLong("eComputationRemaining"); + computationRequired = aNBT.getLong("eComputationRequired"); + machineType = aNBT.hasKey("eMachineType") ? aNBT.getString("eMachineType") : assembly; + if (aNBT.hasKey("eHold")) { + holdItem = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag("eHold")); + } else { + holdItem = null; + } + } + + @Override + public void stopMachine(@Nonnull ShutDownReason reason) { + super.stopMachine(reason); + for (MTEHatchObjectHolder r : eHolders) { + r.getBaseMetaTileEntity() + .setActive(false); + } + computationRequired = computationRemaining = 0; + tRecipe = null; + holdItem = null; + } + + @Override + protected boolean supportsSlotAutomation(int aSlot) { + return aSlot == getControllerSlotIndex(); + } + + @Override + public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) { + if (aBaseMetaTileEntity.isServerSide()) { + if (computationRemaining > 0) { + tRecipe = null; + if (holdItem != null) { + if (ItemList.Tool_DataStick.isStackEqual(mInventory[1], false, true)) { + for (GTRecipe.RecipeAssemblyLine tRecipe : TecTechRecipeMaps.researchableALRecipeList) { + if (GTUtility.areStacksEqual(tRecipe.mResearchItem, holdItem, true)) { + this.tRecipe = tRecipe; + break; + } + } + } + } + if (tRecipe == null) { + holdItem = null; + computationRequired = computationRemaining = 0; + mMaxProgresstime = 0; + mEfficiencyIncrease = 0; + for (MTEHatchObjectHolder r : eHolders) { + r.getBaseMetaTileEntity() + .setActive(false); + } + } + } + } + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + if (computationRemaining <= 0) { + computationRemaining = 0; + mProgresstime = mMaxProgresstime; + return true; + } else { + computationRemaining -= eAvailableData; + mProgresstime = 1; + return super.onRunningTick(aStack); + } + } + + public final boolean addHolderToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchObjectHolder) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eHolders.add((MTEHatchObjectHolder) aMetaTileEntity); + } + return false; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + super.onRightclick(aBaseMetaTileEntity, aPlayer); + + if (!aBaseMetaTileEntity.isClientSide() && aPlayer instanceof EntityPlayerMP) { + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + } else { + return true; + } + return true; + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + super.onScrewdriverRightClick(side, aPlayer, aX, aY, aZ); + switch (machineType) { + case scanner -> machineType = assembly; + case assembly -> machineType = scanner; + } + aPlayer.addChatComponentMessage( + new ChatComponentTranslation( + "gt.blockmachines.multimachine.em.research.mode." + machineType.replace(" ", "_"))); + } + + @Override + protected void drawTexts(DynamicPositionedColumn screenElements, SlotWidget inventorySlot) { + super.drawTexts(screenElements, inventorySlot); + screenElements + .widget( + new TextWidget().setStringSupplier( + () -> StatCollector.translateToLocalFormatted("GT5U.gui.text.researching_item", clientOutputName)) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled( + widget -> computationRequired > 0 && clientOutputName != null && !clientOutputName.isEmpty())) + .widget( + new TextWidget() + .setStringSupplier( + () -> StatCollector.translateToLocalFormatted( + "GT5U.gui.text.research_progress", + getComputationConsumed(), + getComputationRequired(), + GTUtility.formatNumbers(getComputationProgress()))) + .setTextAlignment(Alignment.CenterLeft) + .setEnabled( + widget -> computationRequired > 0 && clientOutputName != null && !clientOutputName.isEmpty())) + .widget(new FakeSyncWidget.LongSyncer(() -> computationRequired, aLong -> computationRequired = aLong)) + .widget(new FakeSyncWidget.LongSyncer(() -> computationRemaining, aLong -> computationRemaining = aLong)) + .widget(new FakeSyncWidget.StringSyncer(() -> { + if (tRecipe != null && tRecipe.mOutput != null) { + return tRecipe.mOutput.getDisplayName(); + } + return ""; + }, aString -> clientOutputName = aString)); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, + int z) { + tag.setBoolean("hasProblems", (getIdealStatus() - getRepairStatus()) > 0); + tag.setFloat("efficiency", mEfficiency / 100.0F); + tag.setBoolean("incompleteStructure", (getBaseMetaTileEntity().getErrorDisplayID() & 64) != 0); + tag.setString("machineType", machineType); + tag.setLong("computation", getComputationConsumed()); + tag.setLong("computationRequired", getComputationRequired()); + } + + private long getComputationConsumed() { + return (computationRequired - computationRemaining) / 20L; + } + + private long getComputationRequired() { + return computationRequired / 20L; + } + + private double getComputationProgress() { + return 100d + * (getComputationRequired() > 0d ? (double) getComputationConsumed() / getComputationRequired() : 0d); + } + + @Override + public void getWailaBody(ItemStack itemStack, List currentTip, IWailaDataAccessor accessor, + IWailaConfigHandler config) { + final NBTTagCompound tag = accessor.getNBTData(); + + if (tag.getBoolean("incompleteStructure")) { + currentTip.add(RED + "** INCOMPLETE STRUCTURE **" + RESET); + } + String efficiency = RESET + " Efficiency: " + tag.getFloat("efficiency") + "%"; + if (tag.getBoolean("hasProblems")) { + currentTip.add(RED + "** HAS PROBLEMS **" + efficiency); + } else if (!tag.getBoolean("incompleteStructure")) { + currentTip.add(GREEN + "Running Fine" + efficiency); + } + currentTip.add("Mode: " + tag.getString("machineType")); + currentTip.add( + String.format( + "Computation: %,d / %,d", + tag.getInteger("computation"), + tag.getInteger("computationRequired"))); + } + + @Override + public int getInventoryStackLimit() { + return 1; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM("main", 1, 3, 4, stackSize, hintsOnly); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (mMachine) return -1; + return survivialBuildPiece("main", stackSize, 1, 3, 4, elementBudget, source, actor, false, true); + } + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return description; + } + + private enum HolderHatchElement implements IHatchElement { + + INSTANCE; + + @Override + public List> mteClasses() { + return Collections.singletonList(MTEHatchObjectHolder.class); + } + + @Override + public IGTHatchAdder adder() { + return MTEResearchStation::addHolderToMachineList; + } + + @Override + public long count(MTEResearchStation t) { + return t.eHolders.size(); + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/MTETeslaTower.java b/src/main/java/tectech/thing/metaTileEntity/multi/MTETeslaTower.java new file mode 100644 index 0000000000..73a8a8925c --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/MTETeslaTower.java @@ -0,0 +1,991 @@ +package tectech.thing.metaTileEntity.multi; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlocksTiered; +import static com.gtnewhorizon.structurelib.structure.StructureUtility.transpose; +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.HatchElement.Dynamo; +import static gregtech.api.enums.HatchElement.Energy; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.util.GTStructureUtility.buildHatchAdder; +import static gregtech.api.util.GTStructureUtility.ofFrame; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static java.lang.Math.min; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +import javax.annotation.Nonnull; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.apache.commons.lang3.tuple.Pair; +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.Multimap; +import com.google.common.collect.MultimapBuilder; +import com.gtnewhorizon.structurelib.alignment.constructable.ISurvivalConstructable; +import com.gtnewhorizon.structurelib.structure.IItemSource; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.util.Vec3Impl; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Materials; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReason; +import tectech.TecTech; +import tectech.loader.NetworkDispatcher; +import tectech.mechanics.spark.RendererMessage; +import tectech.mechanics.spark.ThaumSpark; +import tectech.mechanics.tesla.ITeslaConnectable; +import tectech.mechanics.tesla.ITeslaConnectableSimple; +import tectech.thing.casing.BlockGTCasingsTT; +import tectech.thing.casing.TTCasingsContainer; +import tectech.thing.metaTileEntity.hatch.MTEHatchCapacitor; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchParam; +import tectech.thing.metaTileEntity.multi.base.INameFunction; +import tectech.thing.metaTileEntity.multi.base.IStatusFunction; +import tectech.thing.metaTileEntity.multi.base.LedStatus; +import tectech.thing.metaTileEntity.multi.base.Parameters; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; +import tectech.thing.metaTileEntity.multi.base.render.TTRenderedExtendedFacingTexture; +import tectech.util.CommonValues; + +public class MTETeslaTower extends TTMultiblockBase implements ISurvivalConstructable, ITeslaConnectable { + + // Interface fields + private final Multimap teslaNodeMap = MultimapBuilder.treeKeys() + .linkedListValues() + .build(); + private final HashSet sparkList = new HashSet<>(); + private int sparkCount = 10; + + // region variables + private static final int transferRadiusTowerFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TOWER; // Default + // is 32 + private static final int transferRadiusTransceiverFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_TRANSCEIVER; // Default + // is + // 16 + private static final int transferRadiusCoverUltimateFromConfig = TecTech.configTecTech.TESLA_MULTI_RANGE_COVER; // Default + // is + // 16 + private static final int plasmaRangeMultiT1 = TecTech.configTecTech.TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T1; // Default + // is 2 + private static final int plasmaRangeMultiT2 = TecTech.configTecTech.TESLA_MULTI_RANGE_COEFFICIENT_PLASMA_T2; // Default + // is 4 + private static final int heliumUse = TecTech.configTecTech.TESLA_MULTI_PLASMA_PER_SECOND_T1_HELIUM; // Default is + // 100 + private static final int nitrogenUse = TecTech.configTecTech.TESLA_MULTI_PLASMA_PER_SECOND_T1_NITROGEN; // Default + // is 50 + private static final int radonUse = TecTech.configTecTech.TESLA_MULTI_PLASMA_PER_SECOND_T2_RADON; // Default is 50 + private static final boolean visualEffect = TecTech.configTecTech.TESLA_VISUAL_EFFECT; // Default is true + // Default is {1, 1, 1} + private static final int[] plasmaTierLoss = new int[] { TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T0, + TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T1, TecTech.configTecTech.TESLA_MULTI_LOSS_PER_BLOCK_T2 }; + private static final float overDriveLoss = TecTech.configTecTech.TESLA_MULTI_LOSS_FACTOR_OVERDRIVE; // Default is + // 0.25F; + private static final boolean doFluidOutput = TecTech.configTecTech.TESLA_MULTI_GAS_OUTPUT; // Default is false + + // Face icons + private static Textures.BlockIcons.CustomIcon ScreenOFF; + private static Textures.BlockIcons.CustomIcon ScreenON; + + private int mTier = 0; // Determines max voltage (LV to ZPM) + private int plasmaTier = 0; // 0 is None, 1 is Helium or Nitrogen, 2 is Radon (Does not match actual plasma tiers) + + private FluidStack[] mOutputFluidsQueue; // Used to buffer the fluid outputs, so the tesla takes a second to 'cool' + // any plasma it + // would output as a gas + + private final ArrayList eCapacitorHatches = new ArrayList<>(); // Capacitor + // hatches which + // determine the + // max voltage + // tier and count + // of amps + + private long energyCapacity = 0; // Total energy storage limited by capacitors + private long outputVoltageMax = 0; // Tesla voltage output limited by capacitors + private int vTier = -1; // Tesla voltage tier limited by capacitors + private long outputCurrentMax = 0; // Tesla current output limited by capacitors + + // outputVoltage and current after settings + private long outputVoltage; + private long outputCurrent; + + // Prevents unnecessary offset calculation, saving on lag + private byte oldRotation = -1; + private ForgeDirection oldOrientation = ForgeDirection.UNKNOWN; + // Location of the center of the sphere on top of the tower, used as the Thaumcraft lightning and origin + public Vec3Impl posTop = Vec3Impl.NULL_VECTOR; + // endregion + + // region structure + private static final String[] description = new String[] { + EnumChatFormatting.AQUA + translateToLocal("tt.keyphrase.Hint_Details") + ":", + translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.hint.0"), // 1 - Classic Hatches, Capacitor + // Hatches or Tesla + // Base Casing + translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.hint.1"), // 2 - ""Titanium frames"" + }; + + private static final IStructureDefinition STRUCTURE_DEFINITION = IStructureDefinition + .builder() + .addShape( + "main", + transpose( + new String[][] { { " ", " ", " BBB ", " BBB ", " BBB ", " ", " " }, + { " ", " BBB ", " BBBBB ", " BBBBB ", " BBBBB ", " BBB ", " " }, + { " ", " BBB ", " BBBBB ", " BBBBB ", " BBBBB ", " BBB ", " " }, + { " ", " BBB ", " BBBBB ", " BBBBB ", " BBBBB ", " BBB ", " " }, + { " ", " ", " BBB ", " BCB ", " BBB ", " ", " " }, + { " ", " ", " ", " C ", " ", " ", " " }, + { " ", " BBB ", " B F B ", " BFCFB ", " B F B ", " BBB ", " " }, + { " ", " ", " ", " C ", " ", " ", " " }, + { " ", " BBB ", " B F B ", " BFCFB ", " B F B ", " BBB ", " " }, + { " ", " ", " ", " C ", " ", " ", " " }, + { " ", " BBB ", " B F B ", " BFCFB ", " B F B ", " BBB ", " " }, + { " ", " ", " ", " C ", " ", " ", " " }, + { " ", " BBB ", " B F B ", " BFCFB ", " B F B ", " BBB ", " " }, + { " ", " ", " ", " C ", " ", " ", " " }, + { " ", " ", " ", " C ", " ", " ", " " }, + { " ", " DDD ", " D D ", " D C D ", " D D ", " DDD ", " " }, + { " EE~EE ", "EAAAAAE", "EADDDAE", "EADADAE", "EADDDAE", "EAAAAAE", " EEEEE " } })) + .addElement('A', ofBlock(TTCasingsContainer.sBlockCasingsBA0, 6)) + .addElement('B', ofBlock(TTCasingsContainer.sBlockCasingsBA0, 7)) + .addElement('C', ofBlock(TTCasingsContainer.sBlockCasingsBA0, 8)) + .addElement( + 'D', + ofBlocksTiered( + (block, meta) -> block != TTCasingsContainer.sBlockCasingsBA0 ? null + : meta <= 5 ? Integer.valueOf(meta) : meta == 9 ? 6 : null, + IntStream.range(0, 7) + .map(tier -> tier == 6 ? 9 : tier) + .mapToObj(meta -> Pair.of(TTCasingsContainer.sBlockCasingsBA0, meta)) + .collect(Collectors.toList()), + -1, + (t, v) -> t.mTier = v, + t -> t.mTier)) + .addElement( + 'E', + buildHatchAdder(MTETeslaTower.class) + .atLeast( + CapacitorHatchElement.INSTANCE, + HatchElement.EnergyMulti, + Energy, + HatchElement.DynamoMulti, + Dynamo, + InputHatch, + OutputHatch, + HatchElement.Param, + Maintenance) + .dot(1) + .casingIndex(BlockGTCasingsTT.textureOffset + 16 + 6) + .buildAndChain(TTCasingsContainer.sBlockCasingsBA0, 6)) + .addElement('F', ofFrame(Materials.Titanium)) + .build(); + // endregion + + // region parameters + protected Parameters.Group.ParameterIn popogaSetting, histLowSetting, histHighSetting, transferRadiusTowerSetting, + transferRadiusTransceiverSetting, transferRadiusCoverUltimateSetting, outputVoltageSetting, + outputCurrentSetting, sortTimeMinSetting, overDriveSetting; + protected Parameters.Group.ParameterOut popogaDisplay, transferRadiusTowerDisplay, transferRadiusTransceiverDisplay, + transferRadiusCoverUltimateDisplay, outputVoltageDisplay, outputCurrentDisplay, outputMaxDisplay, + energyCapacityDisplay, energyStoredDisplay, energyFractionDisplay, sortTimeDisplay; + + private static final INameFunction HYSTERESIS_LOW_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.0"); // Hysteresis low setting + private static final INameFunction HYSTERESIS_HIGH_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.1"); // Hysteresis high setting + private static final INameFunction TRANSFER_RADIUS_TOWER_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.2"); // Tesla Towers transfer radius + // setting + private static final INameFunction TRANSFER_RADIUS_TRANSCEIVER_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.3"); // Tesla Transceiver transfer + // radius setting + private static final INameFunction TRANSFER_RADIUS_COVER_ULTIMATE_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.4"); // Tesla Ultimate Cover + // transfer radius + // setting + private static final INameFunction OUTPUT_VOLTAGE_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.5"); // Output voltage setting + private static final INameFunction OUTPUT_CURRENT_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.6"); // Output current setting + private static final INameFunction SCAN_TIME_MIN_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.7"); // Scan time Min setting + private static final INameFunction OVERDRIVE_SETTING_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.8"); // Overdrive setting + private static final INameFunction POPOGA_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgi.9"); // Unused + + private static final INameFunction TRANSFER_RADIUS_TOWER_DISPLAY_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.0"); // Tesla Towers transfer radius + // display + private static final INameFunction TRANSFER_RADIUS_TRANSCEIVER_DISPLAY_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.1"); // Tesla Transceiver transfer + // radius display + private static final INameFunction TRANSFER_RADIUS_COVER_ULTIMATE_DISPLAY_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.2"); // Tesla Ultimate Cover + // transfer radius + // display + private static final INameFunction OUTPUT_VOLTAGE_DISPLAY_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.3"); // Output voltage display + private static final INameFunction OUTPUT_MAX_DISPLAY_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.9"); // Output max display + private static final INameFunction OUTPUT_CURRENT_DISPLAY_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.4"); // Output current display + private static final INameFunction ENERGY_CAPACITY_DISPLAY_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.5"); // Energy Capacity display + private static final INameFunction ENERGY_STORED_DISPLAY_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.6"); // Energy Stored display + private static final INameFunction ENERGY_FRACTION_DISPLAY_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.7"); // Energy Fraction display + private static final INameFunction SCAN_TIME_DISPLAY_NAME = (base, + p) -> translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.cfgo.8"); // Scan time display + + private static final IStatusFunction HYSTERESIS_LOW_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) { + return LedStatus.STATUS_WRONG; + } + if (value <= 0.05) return LedStatus.STATUS_TOO_LOW; + if (value > base.histHighSetting.get()) return LedStatus.STATUS_TOO_HIGH; + return LedStatus.STATUS_OK; + }; + private static final IStatusFunction HYSTERESIS_HIGH_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return LedStatus.STATUS_WRONG; + if (value <= base.histLowSetting.get()) return LedStatus.STATUS_TOO_LOW; + if (value > 0.95) return LedStatus.STATUS_TOO_HIGH; + return LedStatus.STATUS_OK; + }; + private static final IStatusFunction TRANSFER_RADIUS_TOWER_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return LedStatus.STATUS_WRONG; + value = (int) value; + if (value < 0) return LedStatus.STATUS_TOO_LOW; + if (value > transferRadiusTowerFromConfig) return LedStatus.STATUS_HIGH; + if (value < transferRadiusTowerFromConfig) return LedStatus.STATUS_LOW; + return LedStatus.STATUS_OK; + }; + private static final IStatusFunction TRANSFER_RADIUS_TRANSCEIVER_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return LedStatus.STATUS_WRONG; + value = (int) value; + if (value < 0) return LedStatus.STATUS_TOO_LOW; + if (value > transferRadiusTransceiverFromConfig) return LedStatus.STATUS_HIGH; + if (value < transferRadiusTransceiverFromConfig) return LedStatus.STATUS_LOW; + return LedStatus.STATUS_OK; + }; + private static final IStatusFunction TRANSFER_RADIUS_COVER_ULTIMATE_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return LedStatus.STATUS_WRONG; + value = (int) value; + if (value < 0) return LedStatus.STATUS_TOO_LOW; + if (value > transferRadiusCoverUltimateFromConfig) return LedStatus.STATUS_HIGH; + if (value < transferRadiusCoverUltimateFromConfig) return LedStatus.STATUS_LOW; + return LedStatus.STATUS_OK; + }; + private static final IStatusFunction OUTPUT_VOLTAGE_OR_CURRENT_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return LedStatus.STATUS_WRONG; + value = (long) value; + if (value == -1) return LedStatus.STATUS_OK; + if (value <= 0) return LedStatus.STATUS_TOO_LOW; + return LedStatus.STATUS_OK; + }; + private static final IStatusFunction SCAN_TIME_MIN_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return LedStatus.STATUS_WRONG; + value = (int) value; + if (value < 100) return LedStatus.STATUS_TOO_LOW; + if (value == 100) return LedStatus.STATUS_OK; + return LedStatus.STATUS_HIGH; + }; + private static final IStatusFunction OVERDRIVE_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return LedStatus.STATUS_WRONG; + value = (int) value; + if (value < 0) return LedStatus.STATUS_TOO_LOW; + if (value == 0) return LedStatus.STATUS_LOW; + return LedStatus.STATUS_HIGH; + }; + private static final IStatusFunction POPOGA_STATUS = (base, p) -> { + if (base.getBaseMetaTileEntity() + .getWorld() + .isThundering()) { + return LedStatus.STATUS_WTF; + } + return LedStatus.STATUS_NEUTRAL; + }; + private static final IStatusFunction SCAN_TIME_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return LedStatus.STATUS_WRONG; + value = (int) value; + if (value == 0) return LedStatus.STATUS_HIGH; + return LedStatus.STATUS_LOW; + }; + private static final IStatusFunction POWER_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return LedStatus.STATUS_WRONG; + value = (long) value; + if (value > 0) { + return LedStatus.STATUS_OK; + } else { + return LedStatus.STATUS_LOW; + } + }; + private static final IStatusFunction ENERGY_STATUS = (base, p) -> { + double value = p.get(); + if (Double.isNaN(value)) return LedStatus.STATUS_WRONG; + if (base.energyFractionDisplay.get() > base.histHighSetting.get()) { + return LedStatus.STATUS_HIGH; + } else if (base.energyFractionDisplay.get() < base.histLowSetting.get()) { + return LedStatus.STATUS_LOW; + } else { + return LedStatus.STATUS_OK; + } + }; + // endregion + + public MTETeslaTower(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTETeslaTower(String aName) { + super(aName); + } + + private float getRangeMulti(int mTier, int vTier) { + // By Default: + // Helium and Nitrogen Plasmas will double the range + // Radon will quadruple the range + int plasmaBoost; + switch (plasmaTier) { + case 2: + plasmaBoost = plasmaRangeMultiT2; + break; + case 1: + plasmaBoost = plasmaRangeMultiT1; + break; + default: + plasmaBoost = 1; + } + + // Over-tiered coils will add +25% range + if (vTier > mTier) { + return 1.25F * plasmaBoost; + } + return 1F * plasmaBoost; + } + + private void checkPlasmaBoost() { + // If there's fluid in the queue, try to output it + // That way it takes at least a second to 'process' the plasma + if (mOutputFluidsQueue != null) { + mOutputFluids = mOutputFluidsQueue; + mOutputFluidsQueue = null; + } + + for (MTEHatchInput fluidHatch : mInputHatches) { + if (fluidHatch.mFluid != null) { + if (fluidHatch.mFluid.isFluidEqual(Materials.Helium.getPlasma(1)) + && fluidHatch.mFluid.amount >= heliumUse) { + fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - heliumUse; + if (doFluidOutput) { + mOutputFluidsQueue = new FluidStack[] { Materials.Helium.getGas(heliumUse) }; + } + plasmaTier = 1; + return; + } else if (fluidHatch.mFluid.isFluidEqual(Materials.Nitrogen.getPlasma(1)) + && fluidHatch.mFluid.amount >= nitrogenUse) { + fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - nitrogenUse; + if (doFluidOutput) { + mOutputFluidsQueue = new FluidStack[] { Materials.Nitrogen.getGas(nitrogenUse) }; + } + plasmaTier = 1; + return; + } else if (fluidHatch.mFluid.isFluidEqual(Materials.Radon.getPlasma(1)) + && fluidHatch.mFluid.amount >= radonUse) { + fluidHatch.mFluid.amount = fluidHatch.mFluid.amount - radonUse; + if (doFluidOutput) { + mOutputFluidsQueue = new FluidStack[] { Materials.Radon.getGas(radonUse) }; + } + plasmaTier = 2; + return; + } + } + } + plasmaTier = 0; + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTETeslaTower(mName); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + for (MTEHatchCapacitor cap : filterValidMTEs(eCapacitorHatches)) { + cap.getBaseMetaTileEntity() + .setActive(false); + } + eCapacitorHatches.clear(); + + mTier = -1; + + if (structureCheck_EM("main", 3, 16, 0)) { + for (MTEHatchCapacitor cap : filterValidMTEs(eCapacitorHatches)) { + cap.getBaseMetaTileEntity() + .setActive(iGregTechTileEntity.isActive()); + } + + // Only recalculate offsets on orientation or rotation change + if (oldRotation != getExtendedFacing().ordinal() + || oldOrientation != iGregTechTileEntity.getFrontFacing()) { + oldRotation = (byte) getExtendedFacing().ordinal(); + oldOrientation = iGregTechTileEntity.getFrontFacing(); + + Vec3Impl posBMTE = new Vec3Impl( + getBaseMetaTileEntity().getXCoord(), + getBaseMetaTileEntity().getYCoord(), + getBaseMetaTileEntity().getZCoord()); + + // Calculate coordinates of the middle bottom + posTop = getExtendedFacing().getWorldOffset(new Vec3Impl(0, 0, 2)) + .add(posBMTE); + + // Calculate coordinates of the top sphere + posTop = getExtendedFacing().getWorldOffset(new Vec3Impl(0, -14, 2)) + .add(posBMTE); + } + // Generate node map + if (!getBaseMetaTileEntity().isClientSide()) { + TeslaUtil.teslaSimpleNodeSetAdd(this); + TeslaUtil.generateTeslaNodeMap(this); + } + return true; + } + return false; + } + + @Override + @NotNull + protected CheckRecipeResult checkProcessing_EM() { + checkPlasmaBoost(); + + if (!histHighSetting.getStatus(false).isOk || !histLowSetting.getStatus(false).isOk) + return SimpleCheckRecipeResult.ofFailure("invalid_hysteresis"); + if (!transferRadiusTowerSetting.getStatus(false).isOk || !transferRadiusTransceiverSetting.getStatus(false).isOk + || !transferRadiusCoverUltimateSetting.getStatus(false).isOk) + return SimpleCheckRecipeResult.ofFailure("invalid_transfer_radius"); + if (!outputVoltageSetting.getStatus(false).isOk) + return SimpleCheckRecipeResult.ofFailure("invalid_voltage_setting"); + if (!outputCurrentSetting.getStatus(false).isOk) + return SimpleCheckRecipeResult.ofFailure("invalid_current_setting"); + if (!sortTimeMinSetting.getStatus(false).isOk) return SimpleCheckRecipeResult.ofFailure("invalid_time_setting"); + if (!overDriveSetting.getStatus(false).isOk) + return SimpleCheckRecipeResult.ofFailure("invalid_overdrive_setting"); + + mEfficiencyIncrease = 10000; + mMaxProgresstime = 20; + vTier = -1; + long[] capacitorData; + for (MTEHatchCapacitor cap : filterValidMTEs(eCapacitorHatches)) { + if (cap.getCapacitors()[0] > vTier) { + vTier = (int) cap.getCapacitors()[0]; + } + } + + energyCapacity = 0; + outputCurrentMax = 0; + + if (vTier < 0) { + // Returning true to allow for 'passive running' + outputVoltageMax = 0; + return SimpleCheckRecipeResult.ofSuccess("routing"); + } else if (vTier > mTier && getEUVar() > 0) { + explodeMultiblock(); + } + + outputVoltageMax = V[vTier + 1]; + for (MTEHatchCapacitor cap : filterValidMTEs(eCapacitorHatches)) { + cap.getBaseMetaTileEntity() + .setActive(true); + capacitorData = cap.getCapacitors(); + if (capacitorData[0] < vTier) { + if (getEUVar() > 0 && capacitorData[0] != 0) { + cap.getBaseMetaTileEntity() + .setToFire(); + } + eCapacitorHatches.remove(cap); + } else { + outputCurrentMax += capacitorData[1]; + energyCapacity += capacitorData[2]; + } + } + return SimpleCheckRecipeResult.ofSuccess("routing"); + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.name")) // Machine Type: Tesla + // Tower + .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.desc.0")) // Controller block of + // the Tesla Tower + .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.desc.1")) // Used to transmit + // power to Tesla + // Coil Covers and Tesla + // Transceivers + .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.desc.2")) // Can be fed with + // Helium/Nitrogen/Radon Plasma to + // increase the range + .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.desc.3")) // Transmitted voltage + // depends on + // the used Tesla Capacitor tier + .addInfo(translateToLocal("gt.blockmachines.multimachine.tm.teslaCoil.desc.4")) // Primary Tesla + // Windings need to + // be at least the same tier as + // the Tesla Capacitor + .addInfo(translateToLocal("tt.keyword.Structure.StructureTooComplex")) // The structure is too complex! + .addSeparator() + .beginStructureBlock(7, 17, 7, false) + .addOtherStructurePart( + translateToLocal("gt.blockmachines.hatch.capacitor.tier.03.name"), + translateToLocal("tt.keyword.Structure.AnyTeslaBaseCasingOuter"), + 1) // Capacitor Hatch: Any outer Tesla Base Casing + .addEnergyHatch(translateToLocal("tt.keyword.Structure.AnyTeslaBaseCasingOuter"), 1) // Energy Hatch: + // Any outer Tesla + // Base Casing + .addMaintenanceHatch(translateToLocal("tt.keyword.Structure.AnyTeslaBaseCasingOuter"), 1) // Maintenance + // Hatch: Any + // outer Tesla + // Base Casing + .toolTipFinisher(CommonValues.THETA_MOVEMENT); + return tt; + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/TM_TESLA_TOWER"); + ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/TM_TESLA_TOWER_ACTIVE"); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][16 + 6], + new TTRenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[BlockGTCasingsTT.texturePage][16 + 6] }; + } + + @Override + public void onRemoval() { + super.onRemoval(); + if (!getBaseMetaTileEntity().isClientSide()) { + TeslaUtil.teslaSimpleNodeSetRemove(this); + for (MTEHatchCapacitor cap : filterValidMTEs(eCapacitorHatches)) { + cap.getBaseMetaTileEntity() + .setActive(false); + } + } + } + + @Override + public void onUnload() { + if (!getBaseMetaTileEntity().isClientSide()) { + TeslaUtil.teslaSimpleNodeSetRemove(this); + } + } + + @Override + protected void parametersInstantiation_EM() { + Parameters.Group hatch_0 = parametrization.getGroup(0, true); + Parameters.Group hatch_1 = parametrization.getGroup(1, true); + Parameters.Group hatch_2 = parametrization.getGroup(2, true); + Parameters.Group hatch_3 = parametrization.getGroup(3, true); + Parameters.Group hatch_4 = parametrization.getGroup(4, true); + Parameters.Group hatch_5 = parametrization.getGroup(5, true); + Parameters.Group hatch_6 = parametrization.getGroup(6, true); + Parameters.Group hatch_7 = parametrization.getGroup(7, true); + Parameters.Group hatch_8 = parametrization.getGroup(8, true); + Parameters.Group hatch_9 = parametrization.getGroup(9, true); + + histLowSetting = hatch_0.makeInParameter(0, 0.25, HYSTERESIS_LOW_SETTING_NAME, HYSTERESIS_LOW_STATUS); + popogaSetting = hatch_0.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + histHighSetting = hatch_1.makeInParameter(0, 0.75, HYSTERESIS_HIGH_SETTING_NAME, HYSTERESIS_HIGH_STATUS); + popogaSetting = hatch_1.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + transferRadiusTowerSetting = hatch_2.makeInParameter( + 0, + transferRadiusTowerFromConfig, + TRANSFER_RADIUS_TOWER_SETTING_NAME, + TRANSFER_RADIUS_TOWER_STATUS); + popogaSetting = hatch_2.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + transferRadiusTransceiverSetting = hatch_3.makeInParameter( + 0, + transferRadiusTransceiverFromConfig, + TRANSFER_RADIUS_TRANSCEIVER_SETTING_NAME, + TRANSFER_RADIUS_TRANSCEIVER_STATUS); + transferRadiusCoverUltimateSetting = hatch_3.makeInParameter( + 1, + transferRadiusCoverUltimateFromConfig, + TRANSFER_RADIUS_COVER_ULTIMATE_SETTING_NAME, + TRANSFER_RADIUS_COVER_ULTIMATE_STATUS); + outputVoltageSetting = hatch_4 + .makeInParameter(0, -1, OUTPUT_VOLTAGE_SETTING_NAME, OUTPUT_VOLTAGE_OR_CURRENT_STATUS); + popogaSetting = hatch_4.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + outputCurrentSetting = hatch_5 + .makeInParameter(0, -1, OUTPUT_CURRENT_SETTING_NAME, OUTPUT_VOLTAGE_OR_CURRENT_STATUS); + popogaSetting = hatch_5.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + popogaSetting = hatch_6.makeInParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); + popogaSetting = hatch_6.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + sortTimeMinSetting = hatch_7.makeInParameter(0, 100, SCAN_TIME_MIN_SETTING_NAME, SCAN_TIME_MIN_STATUS); + popogaSetting = hatch_7.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + overDriveSetting = hatch_8.makeInParameter(0, 0, OVERDRIVE_SETTING_NAME, OVERDRIVE_STATUS); + popogaSetting = hatch_8.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + popogaSetting = hatch_9.makeInParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); + popogaSetting = hatch_9.makeInParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + + popogaDisplay = hatch_0.makeOutParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); + popogaDisplay = hatch_0.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + popogaDisplay = hatch_1.makeOutParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); + popogaDisplay = hatch_1.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + transferRadiusTowerDisplay = hatch_2 + .makeOutParameter(0, 0, TRANSFER_RADIUS_TOWER_DISPLAY_NAME, TRANSFER_RADIUS_TOWER_STATUS); + popogaDisplay = hatch_2.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + transferRadiusTransceiverDisplay = hatch_3 + .makeOutParameter(0, 0, TRANSFER_RADIUS_TRANSCEIVER_DISPLAY_NAME, TRANSFER_RADIUS_TRANSCEIVER_STATUS); + transferRadiusCoverUltimateDisplay = hatch_3 + .makeOutParameter(1, 0, TRANSFER_RADIUS_COVER_ULTIMATE_DISPLAY_NAME, TRANSFER_RADIUS_COVER_ULTIMATE_STATUS); + outputVoltageDisplay = hatch_4.makeOutParameter(0, 0, OUTPUT_VOLTAGE_DISPLAY_NAME, POWER_STATUS); + outputMaxDisplay = hatch_4.makeOutParameter(1, 0, OUTPUT_MAX_DISPLAY_NAME, POWER_STATUS); + outputCurrentDisplay = hatch_5.makeOutParameter(0, 0, OUTPUT_CURRENT_DISPLAY_NAME, POWER_STATUS); + energyCapacityDisplay = hatch_5.makeOutParameter(1, 0, ENERGY_CAPACITY_DISPLAY_NAME, ENERGY_STATUS); + energyStoredDisplay = hatch_6.makeOutParameter(0, 0, ENERGY_STORED_DISPLAY_NAME, ENERGY_STATUS); + energyFractionDisplay = hatch_6.makeOutParameter(1, 0, ENERGY_FRACTION_DISPLAY_NAME, ENERGY_STATUS); + sortTimeDisplay = hatch_7.makeOutParameter(0, 0, SCAN_TIME_DISPLAY_NAME, SCAN_TIME_STATUS); + popogaDisplay = hatch_7.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + popogaDisplay = hatch_8.makeOutParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); + popogaDisplay = hatch_8.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + popogaDisplay = hatch_9.makeOutParameter(0, 0, POPOGA_NAME, POPOGA_STATUS); + popogaDisplay = hatch_9.makeOutParameter(1, 0, POPOGA_NAME, POPOGA_STATUS); + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setLong("eEnergyCapacity", energyCapacity); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + energyCapacity = aNBT.getLong("eEnergyCapacity"); + TeslaUtil.teslaSimpleNodeSetAdd(this); + } + + @Override + public void stopMachine(@Nonnull ShutDownReason reason) { + super.stopMachine(reason); + for (MTEHatchCapacitor cap : filterValidMTEs(eCapacitorHatches)) { + cap.getBaseMetaTileEntity() + .setActive(false); + } + + ePowerPass = false; + setEUVar(0); + energyStoredDisplay.set(0); + energyFractionDisplay.set(0); + outputMaxDisplay.set(0); + } + + @Override + public boolean onRunningTick(ItemStack aStack) { + // Hysteresis based ePowerPass setting + float energyFrac = (float) getEUVar() / energyCapacity; + + energyCapacityDisplay.set(energyCapacity); + energyStoredDisplay.set(getEUVar()); + energyFractionDisplay.set(energyFrac); + + if (!ePowerPass && energyFrac > histHighSetting.get()) { + ePowerPass = true; + } else if (ePowerPass && energyFrac < histLowSetting.get()) { + ePowerPass = false; + } + + // Power Limit Settings + if (outputVoltageSetting.get() > 0) { + outputVoltage = min(outputVoltageMax, (long) outputVoltageSetting.get()); + } else { + outputVoltage = outputVoltageMax; + } + outputVoltageDisplay.set(outputVoltage); + + if (outputCurrentSetting.get() > 0) { + outputCurrent = min(outputCurrentMax, (long) outputCurrentSetting.get()); + } else { + outputCurrent = outputCurrentMax; + } + + // Range calculation and display + int transferRadiusTower = getTeslaTransmissionRange(); + transferRadiusTowerDisplay.set(transferRadiusTower); + transferRadiusTransceiverDisplay.set(transferRadiusTower * 2); + transferRadiusCoverUltimateDisplay.set(transferRadiusTower); + + // Power transfer + outputCurrentDisplay.set(TeslaUtil.powerTeslaNodeMap(this)); + outputMaxDisplay.set(Math.max(outputCurrentDisplay.get(), outputMaxDisplay.get())); + // TODO Encapsulate the spark sender + sparkCount--; + if (sparkCount == 0 && visualEffect) { + IGregTechTileEntity mte = getBaseMetaTileEntity(); + sparkCount = 10; + if (!sparkList.isEmpty()) { + NetworkDispatcher.INSTANCE.sendToAllAround( + new RendererMessage.RendererData(sparkList), + mte.getWorld().provider.dimensionId, + mte.getXCoord(), + mte.getYCoord(), + mte.getZCoord(), + 256); + sparkList.clear(); + } + } + return true; + } + + @Override + public long maxEUStore() { + // Setting the power here so that the tower looses all it's charge once disabled + // This also stops it from exploding + return getBaseMetaTileEntity().isActive() ? energyCapacity * 2 : 0; + } + + @Override + public long getEUVar() { + // Same reason as maxEUStore, set to 1 instead of zero so it doesn't drain constantly + return getBaseMetaTileEntity().isActive() ? super.getEUVar() : 1; + } + + private boolean addCapacitorToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchCapacitor) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eCapacitorHatches.add((MTEHatchCapacitor) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchMaintenance) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mMaintenanceHatches.add((MTEHatchMaintenance) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchEnergy) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mEnergyHatches.add((MTEHatchEnergy) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchEnergyMulti) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eEnergyMulti.add((MTEHatchEnergyMulti) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDynamo) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mDynamoHatches.add((MTEHatchDynamo) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDynamoMulti) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eDynamoMulti.add((MTEHatchDynamoMulti) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchParam) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eParamHatches.add((MTEHatchParam) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mInputHatches.add((MTEHatchInput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchOutput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mOutputHatches.add((MTEHatchOutput) aMetaTileEntity); + } + return false; + } + + @Override + public IStructureDefinition getStructure_EM() { + return STRUCTURE_DEFINITION; + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM("main", 3, 16, 0, stackSize, hintsOnly); + } + + @Override + public int survivalConstruct(ItemStack stackSize, int elementBudget, IItemSource source, EntityPlayerMP actor) { + if (mMachine) return -1; + return survivialBuildPiece("main", stackSize, 3, 16, 0, elementBudget, source, actor, false, true); + } + + @Override + public String[] getStructureDescription(ItemStack stackSize) { + return description; + } + + @Override + public byte getTeslaReceptionCapability() { + return 0; + } + + @Override + public float getTeslaReceptionCoefficient() { + return 0; + } + + @Override + public Multimap getTeslaNodeMap() { + return teslaNodeMap; + } + + @Override + public HashSet getSparkList() { + return sparkList; + } + + @Override + public byte getTeslaTransmissionCapability() { + return 1; + } + + @Override + public int getTeslaTransmissionRange() { + return (int) (transferRadiusTowerSetting.get() * getRangeMulti(mTier, vTier)); + } + + @Override + public boolean isOverdriveEnabled() { + return overDriveSetting.get() > 0; + } + + @Override + public int getTeslaEnergyLossPerBlock() { + return plasmaTierLoss[plasmaTier]; + } + + @Override + public float getTeslaOverdriveLossCoefficient() { + return overDriveLoss; + } + + @Override + public long getTeslaOutputVoltage() { + return outputVoltage; + } + + @Override + public long getTeslaOutputCurrent() { + return outputCurrent; + } + + @Override + public boolean teslaDrainEnergy(long teslaVoltageDrained) { + if (getEUVar() < teslaVoltageDrained) { + return false; + } + + setEUVar(getEUVar() - teslaVoltageDrained); + return true; + } + + @Override + public boolean isTeslaReadyToReceive() { + return !this.ePowerPass; + } + + @Override + public long getTeslaStoredEnergy() { + return getEUVar(); + } + + @Override + public Vec3Impl getTeslaPosition() { + return posTop; + } + + @Override + public Integer getTeslaDimension() { + return this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId; + } + + @Override + public boolean teslaInjectEnergy(long teslaVoltageInjected) { + if (this.getEUVar() + teslaVoltageInjected <= (this.maxEUStore() / 2)) { + this.getBaseMetaTileEntity() + .increaseStoredEnergyUnits(teslaVoltageInjected, true); + return true; + } + return false; + } + + private enum CapacitorHatchElement implements IHatchElement { + + INSTANCE; + + @Override + public List> mteClasses() { + return Collections.singletonList(MTEHatchCapacitor.class); + } + + @Override + public IGTHatchAdder adder() { + return MTETeslaTower::addCapacitorToMachineList; + } + + @Override + public long count(MTETeslaTower MTETeslaTower) { + return MTETeslaTower.eCapacitorHatches.size(); + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/base/INameFunction.java b/src/main/java/tectech/thing/metaTileEntity/multi/base/INameFunction.java new file mode 100644 index 0000000000..697c748ba4 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/base/INameFunction.java @@ -0,0 +1,6 @@ +package tectech.thing.metaTileEntity.multi.base; + +public interface INameFunction { + + String apply(T t, Parameters.IParameter iParameter); +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/base/IStatusFunction.java b/src/main/java/tectech/thing/metaTileEntity/multi/base/IStatusFunction.java new file mode 100644 index 0000000000..b051f0dfa3 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/base/IStatusFunction.java @@ -0,0 +1,6 @@ +package tectech.thing.metaTileEntity.multi.base; + +public interface IStatusFunction { + + LedStatus apply(T t, Parameters.IParameter iParameter); +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/base/LedStatus.java b/src/main/java/tectech/thing/metaTileEntity/multi/base/LedStatus.java new file mode 100644 index 0000000000..022408f688 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/base/LedStatus.java @@ -0,0 +1,64 @@ +package tectech.thing.metaTileEntity.multi.base; + +import java.util.function.Supplier; + +import net.minecraft.util.EnumChatFormatting; + +import tectech.TecTech; + +public enum LedStatus { + + STATUS_UNUSED(() -> EnumChatFormatting.DARK_GRAY + "Unused", true), // + STATUS_TOO_LOW(() -> EnumChatFormatting.BLUE + "Too Low", false), // + STATUS_LOW(() -> EnumChatFormatting.AQUA + "Low", true), // + STATUS_WRONG(() -> EnumChatFormatting.DARK_PURPLE + "Wrong", false), // + STATUS_OK(() -> EnumChatFormatting.GREEN + "Valid", true), // + STATUS_TOO_HIGH(() -> EnumChatFormatting.RED + "Too High", false), // + STATUS_HIGH(() -> EnumChatFormatting.GOLD + "High", true), // + STATUS_UNDEFINED(() -> EnumChatFormatting.GRAY + "Unknown", false), + STATUS_NEUTRAL(() -> EnumChatFormatting.WHITE + "Neutral", true), + STATUS_WTF(() -> LedStatus.values()[TecTech.RANDOM.nextInt(9)].name.get(), false); + + public final Supplier name; + public final boolean isOk; + + LedStatus(Supplier name, boolean ok) { + this.name = name; + this.isOk = ok; + } + + public byte getOrdinalByte() { + return (byte) ordinal(); + } + + public static LedStatus getStatus(byte value) { + try { + return LedStatus.values()[value]; + } catch (Exception e) { + return STATUS_UNDEFINED; + } + } + + public static LedStatus[] makeArray(int count, LedStatus defaultValue) { + LedStatus[] statuses = new LedStatus[count]; + for (int i = 0; i < count; i++) { + statuses[i] = defaultValue; + } + return statuses; + } + + public static LedStatus fromLimitsInclusiveOuterBoundary(double value, double min, double low, double high, + double max, double... excludedNumbers) { + if (value < min) return STATUS_TOO_LOW; + if (value > max) return STATUS_TOO_HIGH; + + if (value < low) return STATUS_LOW; + if (value > high) return STATUS_HIGH; + for (double val : excludedNumbers) { + if (val == value) return STATUS_WRONG; + } + if (Double.isNaN(value)) return STATUS_WRONG; + return STATUS_OK; + } + +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/base/Parameters.java b/src/main/java/tectech/thing/metaTileEntity/multi/base/Parameters.java new file mode 100644 index 0000000000..27eb961166 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/base/Parameters.java @@ -0,0 +1,327 @@ +package tectech.thing.metaTileEntity.multi.base; + +import java.util.ArrayList; + +/** + * Instantiate parameters as field in parametersInstantiation_EM(); + */ +public class Parameters { + + private static final IStatusFunction LED_STATUS_FUNCTION_DEFAULT = (b, p) -> LedStatus.STATUS_UNDEFINED; + private static final INameFunction NAME_FUNCTION_DEFAULT = (b, p) -> "Undefined"; + + final Group[] groups = new Group[10]; + + double[] iParamsIn = new double[20]; // number I from parametrizers + double[] iParamsOut = new double[20]; // number O to parametrizers + final ArrayList parameterInArrayList = new ArrayList<>(); + final ArrayList parameterOutArrayList = new ArrayList<>(); + + // package private for use in gui + LedStatus[] eParamsInStatus = LedStatus.makeArray(20, LedStatus.STATUS_UNUSED); // LED status for I + LedStatus[] eParamsOutStatus = LedStatus.makeArray(20, LedStatus.STATUS_UNUSED); // LED status for O + + double getIn(int hatchNo, int parameterId) { + return iParamsIn[hatchNo + 10 * parameterId]; + } + + double getOut(int hatchNo, int parameterId) { + return iParamsOut[hatchNo + 10 * parameterId]; + } + + LedStatus getStatusIn(int hatchNo, int parameterId) { + return eParamsInStatus[hatchNo + 10 * parameterId]; + } + + LedStatus getStatusOut(int hatchNo, int parameterId) { + return eParamsOutStatus[hatchNo + 10 * parameterId]; + } + + private final TTMultiblockBase parent; + + Parameters(TTMultiblockBase parent) { + this.parent = parent; + } + + public boolean trySetParameters(int hatch, double parameter0, double parameter1) { + Group p = groups[hatch]; + if (parent.mMaxProgresstime <= 0 || (p != null && p.updateWhileRunning)) { + iParamsIn[hatch] = parameter0; + iParamsIn[hatch + 10] = parameter1; + return true; + } + return false; + } + + @SuppressWarnings("unused") // Used in GTNH-Intergalactic, do not delete. + public boolean trySetParameters(int hatchNo, int parameterId, double parameter) { + Group p = groups[hatchNo]; + if (parent.mMaxProgresstime <= 0 || (p != null && p.updateWhileRunning)) { + iParamsIn[hatchNo + 10 * parameterId] = parameter; + return true; + } + return false; + } + + public void setToDefaults(int hatch, boolean defaultIn, boolean defaultOut) { + Group p = groups[hatch]; + if (p == null) { + if (defaultIn) { + iParamsIn[hatch] = 0; + iParamsIn[hatch + 10] = 0; + } + if (defaultOut) { + iParamsOut[hatch] = 0; + iParamsOut[hatch + 10] = 0; + } + } else { + p.setToDefaults(defaultIn, defaultOut); + } + } + + public void setToDefaults(boolean defaultIn, boolean defaultOut) { + for (int hatch = 0; hatch < 10; hatch++) { + setToDefaults(hatch, defaultIn, defaultOut); + } + } + + public Group getGroup(int hatchNo, boolean updateWhileRunning) { + return groups[hatchNo] != null ? groups[hatchNo] : new Group(hatchNo, updateWhileRunning); + } + + public Group getGroup(int hatchNo) { + return groups[hatchNo] != null ? groups[hatchNo] : new Group(hatchNo, false); + } + + public interface IParameter { + + double get(); + + double getDefault(); + + void updateStatus(); + + LedStatus getStatus(boolean update); + + int id(); + + int hatchId(); + + int parameterId(); + + String getBrief(); + } + + /** + * most likely used locally in parametersInstantiation_EM() + */ + public class Group { + + private final int hatchNo; + public final ParameterIn[] parameterIn = new ParameterIn[2]; + public final ParameterOut[] parameterOut = new ParameterOut[2]; + public boolean updateWhileRunning; + + private Group(int hatchNo, boolean updateWhileRunning) { + if (hatchNo < 0 || hatchNo >= 10) { + throw new IllegalArgumentException("Hatch id must be in 0 to 9 range"); + } + this.hatchNo = hatchNo; + this.updateWhileRunning = updateWhileRunning; + groups[hatchNo] = this; + } + + public ParameterIn makeInParameter(int paramID, double defaultValue, INameFunction name, + IStatusFunction status) { + return new ParameterIn(paramID, defaultValue, name, status); + } + + public ParameterOut makeOutParameter(int paramID, double defaultValue, INameFunction name, + IStatusFunction status) { + return new ParameterOut(paramID, defaultValue, name, status); + } + + public void setToDefaults(boolean defaultIn, boolean defaultOut) { + if (defaultIn) { + if (this.parameterIn[0] != null) { + this.parameterIn[0].setDefault(); + } else { + iParamsIn[hatchNo] = 0; + } + if (this.parameterIn[1] != null) { + this.parameterIn[1].setDefault(); + } else { + iParamsIn[hatchNo + 10] = 0; + } + } + if (defaultOut) { + if (this.parameterOut[0] != null) { + this.parameterOut[0].setDefault(); + } else { + iParamsOut[hatchNo] = 0; + } + if (this.parameterOut[1] != null) { + this.parameterOut[1].setDefault(); + } else { + iParamsOut[hatchNo + 10] = 0; + } + } + } + + /** + * Make a field out of this... + */ + public class ParameterOut implements IParameter { + + public final int id; + public final double defaultValue; + IStatusFunction status; + INameFunction name; + + private ParameterOut(int paramID, double defaultValue, INameFunction name, IStatusFunction status) { + this.name = name == null ? NAME_FUNCTION_DEFAULT : name; + if (paramID < 0 || paramID > 2) { + throw new IllegalArgumentException("Parameter id must be in 0 to 1 range"); + } + if (parameterOut[paramID] != null) { + throw new IllegalArgumentException("Parameter id already occupied"); + } + this.id = hatchNo + 10 * paramID; + this.defaultValue = defaultValue; + this.status = status == null ? LED_STATUS_FUNCTION_DEFAULT : status; + parameterOutArrayList.add(this); + parameterOut[paramID] = this; + } + + void setDefault() { + set(defaultValue); + } + + @Override + public double get() { + return iParamsOut[id]; + } + + @Override + public double getDefault() { + return defaultValue; + } + + public void set(double value) { + iParamsOut[id] = value; + } + + @SuppressWarnings("unchecked") + @Override + public void updateStatus() { + eParamsOutStatus[id] = status.apply(parent, this); + } + + @Override + public LedStatus getStatus(boolean update) { + if (update) { + updateStatus(); + } + return eParamsOutStatus[id]; + } + + @Override + public String getBrief() { + return name.apply(parent, this); + } + + @Override + public int id() { + return id; + } + + @Override + public int hatchId() { + return id % 10; + } + + @Override + public int parameterId() { + return id / 10; + } + } + + /** + * Make a field out of this... + */ + public class ParameterIn implements IParameter { + + public final int id; + public final double defaultValue; + IStatusFunction status; + INameFunction name; + + private ParameterIn(int paramID, double defaultValue, INameFunction name, IStatusFunction status) { + this.name = name == null ? NAME_FUNCTION_DEFAULT : name; + this.id = hatchNo + 10 * paramID; + if (paramID < 0 || paramID > 2) { + throw new IllegalArgumentException("Parameter id must be in 0 to 1 range"); + } + if (parameterIn[paramID] != null) { + throw new IllegalArgumentException("Parameter id already occupied"); + } + this.defaultValue = defaultValue; + this.status = status == null ? LED_STATUS_FUNCTION_DEFAULT : status; + parameterInArrayList.add(this); + parameterIn[paramID] = this; + } + + void setDefault() { + set(defaultValue); + } + + @Override + public double get() { + return iParamsIn[id]; + } + + void set(double value) { + iParamsIn[id] = value; + } + + @Override + public double getDefault() { + return defaultValue; + } + + @SuppressWarnings("unchecked") + @Override + public void updateStatus() { + eParamsInStatus[id] = status.apply(parent, this); + } + + @Override + public LedStatus getStatus(boolean update) { + if (update) { + updateStatus(); + } + return eParamsInStatus[id]; + } + + @Override + public String getBrief() { + return name.apply(parent, this); + } + + @Override + public int id() { + return id; + } + + @Override + public int hatchId() { + return id % 10; + } + + @Override + public int parameterId() { + return id / 10; + } + } + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/base/SoundLoop.java b/src/main/java/tectech/thing/metaTileEntity/multi/base/SoundLoop.java new file mode 100644 index 0000000000..c337f5093e --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/base/SoundLoop.java @@ -0,0 +1,59 @@ +package tectech.thing.metaTileEntity.multi.base; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.MovingSound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +@SideOnly(Side.CLIENT) +public class SoundLoop extends MovingSound { + + private final boolean whileActive; + private final boolean whileInactive; + private final int worldID; + private boolean fadeMe = false; + + public SoundLoop(ResourceLocation p_i45104_1_, IGregTechTileEntity base, boolean stopWhenActive, + boolean stopWhenInactive) { + super(p_i45104_1_); + this.whileActive = stopWhenActive; + this.whileInactive = stopWhenInactive; + xPosF = base.getXCoord(); + yPosF = base.getYCoord(); + zPosF = base.getZCoord(); + worldID = base.getWorld().provider.dimensionId; + repeat = true; + volume = 0.0625f; + } + + @Override + public void update() { + if (donePlaying) { + return; + } + if (fadeMe) { + volume -= 0.0625f; + if (volume <= 0) { + volume = 0; + donePlaying = true; + } + } else if (volume < 1) { + volume += 0.0625f; + } + World world = Minecraft.getMinecraft().thePlayer.worldObj; + donePlaying = world.provider.dimensionId != worldID + || !world.checkChunksExist((int) xPosF, (int) yPosF, (int) zPosF, (int) xPosF, (int) yPosF, (int) zPosF); + if (donePlaying) return; + TileEntity tile = world.getTileEntity((int) xPosF, (int) yPosF, (int) zPosF); + if (!(tile instanceof IGregTechTileEntity)) { + donePlaying = true; + return; + } + fadeMe |= ((IGregTechTileEntity) tile).isActive() ? whileActive : whileInactive; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/base/TTMultiblockBase.java b/src/main/java/tectech/thing/metaTileEntity/multi/base/TTMultiblockBase.java new file mode 100644 index 0000000000..22a2d38c0a --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/base/TTMultiblockBase.java @@ -0,0 +1,2760 @@ +package tectech.thing.metaTileEntity.multi.base; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.GTValues.VN; +import static gregtech.api.enums.HatchElement.InputBus; +import static gregtech.api.enums.HatchElement.InputHatch; +import static gregtech.api.enums.HatchElement.Maintenance; +import static gregtech.api.enums.HatchElement.Muffler; +import static gregtech.api.enums.HatchElement.OutputBus; +import static gregtech.api.enums.HatchElement.OutputHatch; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTUtility.filterValidMTEs; +import static java.lang.Math.min; +import static tectech.thing.casing.BlockGTCasingsTT.texturePage; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.block.Block; +import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidStack; + +import org.jetbrains.annotations.NotNull; +import org.lwjgl.opengl.GL11; + +import com.google.common.collect.Iterables; +import com.gtnewhorizon.structurelib.StructureLibAPI; +import com.gtnewhorizon.structurelib.alignment.IAlignment; +import com.gtnewhorizon.structurelib.alignment.IAlignmentProvider; +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.IStructureElement; +import com.gtnewhorizon.structurelib.util.Vec3Impl; +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.Pos2d; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.internal.wrapper.BaseSlot; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.IHatchElement; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IBindPlayerInventoryUI; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.BaseTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEExtendedPowerMultiBlockBase; +import gregtech.api.metatileentity.implementations.MTEHatch; +import gregtech.api.metatileentity.implementations.MTEHatchDynamo; +import gregtech.api.metatileentity.implementations.MTEHatchEnergy; +import gregtech.api.metatileentity.implementations.MTEHatchInput; +import gregtech.api.metatileentity.implementations.MTEHatchInputBus; +import gregtech.api.metatileentity.implementations.MTEHatchMaintenance; +import gregtech.api.metatileentity.implementations.MTEHatchMuffler; +import gregtech.api.metatileentity.implementations.MTEHatchOutput; +import gregtech.api.metatileentity.implementations.MTEHatchOutputBus; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTUtility; +import gregtech.api.util.HatchElementBuilder; +import gregtech.api.util.IGTHatchAdder; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.shutdown.ShutDownReason; +import gregtech.api.util.shutdown.ShutDownReasonRegistry; +import gregtech.api.util.shutdown.SimpleShutDownReason; +import gregtech.common.Pollution; +import gregtech.common.tileentities.machines.IDualInputHatch; +import tectech.Reference; +import tectech.TecTech; +import tectech.loader.TecTechConfig; +import tectech.thing.gui.TecTechUITextures; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataConnector; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataInput; +import tectech.thing.metaTileEntity.hatch.MTEHatchDataOutput; +import tectech.thing.metaTileEntity.hatch.MTEHatchDynamoMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyMulti; +import tectech.thing.metaTileEntity.hatch.MTEHatchParam; +import tectech.thing.metaTileEntity.hatch.MTEHatchUncertainty; +import tectech.thing.metaTileEntity.multi.base.render.TTRenderedExtendedFacingTexture; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by danie_000 on 27.10.2016. + */ +public abstract class TTMultiblockBase extends MTEExtendedPowerMultiBlockBase + implements IAlignment, IBindPlayerInventoryUI { + // region Client side variables (static - one per class) + + // Front icon holders - static so it is default one for my blocks + // just add new static ones in your class and and override getTexture + protected static Textures.BlockIcons.CustomIcon ScreenOFF; + protected static Textures.BlockIcons.CustomIcon ScreenON; + + /** Base ID for the LED window popup. LED 1 I0 will have ID 100, LED 1 I1 101... */ + protected static int LED_WINDOW_BASE_ID = 100; + + // Sound resource - same as with screen but override getActivitySound + public static final ResourceLocation activitySound = new ResourceLocation(Reference.MODID + ":fx_lo_freq"); + + @SideOnly(Side.CLIENT) + private SoundLoop activitySoundLoop; + // endregion + + // region HATCHES ARRAYS - they hold info about found hatches, add hatches to them... (auto structure magic does it + // tho) + + // HATCHES!!!, should be added and removed in check machine + protected ArrayList eParamHatches = new ArrayList<>(); + protected ArrayList eUncertainHatches = new ArrayList<>(); + // multi amp hatches in/out + protected ArrayList eEnergyMulti = new ArrayList<>(); + protected ArrayList eDynamoMulti = new ArrayList<>(); + // data hatches + protected ArrayList eInputData = new ArrayList<>(); + protected ArrayList eOutputData = new ArrayList<>(); + + // endregion + + // region parameters + public final Parameters parametrization; + // endregion + + // region Control variables + + // should explode on dismatle?, set it in constructor, if true machine will explode if invalidated structure while + // active + protected boolean eDismantleBoom = false; + + // what is the amount of A required + public long eAmpereFlow = 1; // analogue of EU/t but for amperes used (so eu/t is actually eu*A/t) USE ONLY POSITIVE + // NUMBERS! + + // set to what you need it to be in check recipe + // data required to operate + protected long eRequiredData = 0; + + // Counter for the computation timeout. Will be initialized one to the max time and then only decreased. + protected int eComputationTimeout = MAX_COMPUTATION_TIMEOUT; + + // Max timeout of computation in ticks + protected static int MAX_COMPUTATION_TIMEOUT = 100; + + // are parameters correct - change in check recipe/output/update params etc. (maintenance status boolean) + protected boolean eParameters = true; + + // what type of certainty inconvenience is used - can be used as in Computer - more info in uncertainty hatch + protected byte eCertainMode = 0, eCertainStatus = 0; + + // minimal repair status to make the machine even usable (how much unfixed fixed stuff is needed) + // if u need to force some things to be fixed - u might need to override doRandomMaintenanceDamage + protected byte minRepairStatus = 3; + + // whether there is a maintenance hatch in the multi and whether checks are necessary (for now only used in a + // transformer) + protected boolean hasMaintenanceChecks = true; + + // is power pass cover present + public boolean ePowerPassCover = false; + + // functionality toggles - changed by buttons in gui also + public boolean ePowerPass = false, eSafeVoid = false; + + // endregion + + // region READ ONLY unless u really need to change it + + // max amperes machine can take in after computing it to the lowest tier (exchange packets to min tier count) + protected long eMaxAmpereFlow = 0, eMaxAmpereGen = 0; + + // What is the max and minimal tier of eu hatches installed + private long maxEUinputMin = 0, maxEUinputMax = 0, maxEUoutputMin = 0, maxEUoutputMax = 0; + + // read only unless you are making computation generator - read computer class + protected long eAvailableData = 0; // data being available + + // just some info - private so hidden + private boolean explodedThisTick = false; + + /** Flag if the new long power variable should be used */ + protected boolean useLongPower = false; + + // Locale-aware formatting of numbers. + protected static NumberFormatMUI numberFormat; + static { + numberFormat = new NumberFormatMUI(); + numberFormat.setMaximumFractionDigits(8); + } + + // endregion + + protected TTMultiblockBase(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + parametrization = new Parameters(this); + parametersInstantiation_EM(); + parametrization.setToDefaults(true, true); + } + + protected TTMultiblockBase(String aName) { + super(aName); + parametrization = new Parameters(this); + parametersInstantiation_EM(); + parametrization.setToDefaults(true, true); + } + + // region SUPER STRUCT + + /** + * Gets structure + * + * @return STATIC INSTANCE OF STRUCTURE + */ + public abstract IStructureDefinition getStructure_EM(); + + @SuppressWarnings("unchecked") + private IStructureDefinition getStructure_EM_Internal() { + return (IStructureDefinition) getStructure_EM(); + } + + @Override + public IStructureDefinition getStructureDefinition() { + return getStructure_EM_Internal(); + } + + public final boolean structureCheck_EM(String piece, int horizontalOffset, int verticalOffset, int depthOffset) { + IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); + return getStructure_EM_Internal().check( + this, + piece, + baseMetaTileEntity.getWorld(), + getExtendedFacing(), + baseMetaTileEntity.getXCoord(), + baseMetaTileEntity.getYCoord(), + baseMetaTileEntity.getZCoord(), + horizontalOffset, + verticalOffset, + depthOffset, + !mMachine); + } + + public final boolean structureBuild_EM(String piece, int horizontalOffset, int verticalOffset, int depthOffset, + ItemStack trigger, boolean hintsOnly) { + IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); + return getStructure_EM_Internal().buildOrHints( + this, + trigger, + piece, + baseMetaTileEntity.getWorld(), + getExtendedFacing(), + baseMetaTileEntity.getXCoord(), + baseMetaTileEntity.getYCoord(), + baseMetaTileEntity.getZCoord(), + horizontalOffset, + verticalOffset, + depthOffset, + hintsOnly); + } + // endregion + + // region METHODS TO OVERRIDE - general functionality, recipe check, output + + /** + * Check structure here, also add hatches + * + * @param iGregTechTileEntity - the tile entity + * @param itemStack - what is in the controller input slot + * @return is structure valid + */ + protected boolean checkMachine_EM(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + return false; + } + + /** + * Checks Recipes (when all machine is complete and can work) + *

+ * can get/set Parameters here also + * + * @deprecated Use {@link #createProcessingLogic()} ()} or {@link #checkProcessing_EM()} + * + * @param itemStack item in the controller + * @return is recipe is valid + */ + @Deprecated + public boolean checkRecipe_EM(ItemStack itemStack) { + return false; + } + + @NotNull + protected CheckRecipeResult checkProcessing_EM() { + if (processingLogic == null) { + return checkRecipe_EM(getControllerSlot()) ? CheckRecipeResultRegistry.SUCCESSFUL + : CheckRecipeResultRegistry.NO_RECIPE; + } + return super.checkProcessing(); + } + + /** + * Put EM stuff from outputEM into EM output hatches here or do other stuff - it is basically on recipe succeded + *

+ * based on "machine state" do output, this must move to outputEM to EM output hatches and can also modify output + * items/fluids/EM, remaining EM is NOT overflowed. (Well it can be overflowed if machine didn't finished, + * soft-hammered/disabled/not enough EU) Setting available data processing + */ + public void outputAfterRecipe_EM() {} + // endregion + + // region tooltip and scanner result + + public ArrayList getFullLedDescriptionIn(int hatchNo, int paramID) { + ArrayList list = new ArrayList<>(); + list.add( + EnumChatFormatting.WHITE + "ID: " + + EnumChatFormatting.AQUA + + hatchNo + + EnumChatFormatting.YELLOW + + ":" + + EnumChatFormatting.AQUA + + paramID + + EnumChatFormatting.YELLOW + + ":" + + EnumChatFormatting.AQUA + + "I " + + parametrization.getStatusIn(hatchNo, paramID).name.get()); + list.add( + EnumChatFormatting.WHITE + "Value: " + + EnumChatFormatting.AQUA + + numberFormat.format(parametrization.getIn(hatchNo, paramID))); + try { + list.add(parametrization.groups[hatchNo].parameterIn[paramID].getBrief()); + } catch (NullPointerException | IndexOutOfBoundsException e) { + list.add("Unused"); + } + return list; + } + + public ArrayList getFullLedDescriptionOut(int hatchNo, int paramID) { + ArrayList list = new ArrayList<>(); + list.add( + EnumChatFormatting.WHITE + "ID: " + + EnumChatFormatting.AQUA + + hatchNo + + EnumChatFormatting.YELLOW + + ":" + + EnumChatFormatting.AQUA + + paramID + + EnumChatFormatting.YELLOW + + ":" + + EnumChatFormatting.AQUA + + "O " + + parametrization.getStatusOut(hatchNo, paramID).name.get()); + list.add( + EnumChatFormatting.WHITE + "Value: " + + EnumChatFormatting.AQUA + + numberFormat.format(parametrization.getOut(hatchNo, paramID))); + try { + list.add(parametrization.groups[hatchNo].parameterOut[paramID].getBrief()); + } catch (NullPointerException | IndexOutOfBoundsException e) { + list.add("Unused"); + } + return list; + } + + @Override + protected MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addInfo("Nothing special just override me") + .toolTipFinisher(CommonValues.TEC_MARK_GENERAL); + return tt; + } + + /** + * scanner gives it + */ + @Override + public String[] getInfoData() { // TODO Do it + long storedEnergy = 0; + long maxEnergy = 0; + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + for (MTEHatchEnergyMulti tHatch : filterValidMTEs(eEnergyMulti)) { + storedEnergy += tHatch.getBaseMetaTileEntity() + .getStoredEU(); + maxEnergy += tHatch.getBaseMetaTileEntity() + .getEUCapacity(); + } + + return new String[] { "Progress:", + EnumChatFormatting.GREEN + GTUtility.formatNumbers(mProgresstime / 20) + + EnumChatFormatting.RESET + + " s / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(mMaxProgresstime / 20) + + EnumChatFormatting.RESET + + " s", + "Energy Hatches:", + EnumChatFormatting.GREEN + GTUtility.formatNumbers(storedEnergy) + + EnumChatFormatting.RESET + + " EU / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(maxEnergy) + + EnumChatFormatting.RESET + + " EU", + (getPowerFlow() * eAmpereFlow <= 0 ? "Probably uses: " : "Probably makes: ") + EnumChatFormatting.RED + + GTUtility.formatNumbers(Math.abs(getPowerFlow())) + + EnumChatFormatting.RESET + + " EU/t at " + + EnumChatFormatting.RED + + GTUtility.formatNumbers(eAmpereFlow) + + EnumChatFormatting.RESET + + " A", + "Tier Rating: " + EnumChatFormatting.YELLOW + + VN[getMaxEnergyInputTier_EM()] + + EnumChatFormatting.RESET + + " / " + + EnumChatFormatting.GREEN + + VN[getMinEnergyInputTier_EM()] + + EnumChatFormatting.RESET + + " Amp Rating: " + + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(eMaxAmpereFlow) + + EnumChatFormatting.RESET + + " A", + "Problems: " + EnumChatFormatting.RED + + (getIdealStatus() - getRepairStatus()) + + EnumChatFormatting.RESET + + " Efficiency: " + + EnumChatFormatting.YELLOW + + mEfficiency / 100.0F + + EnumChatFormatting.RESET + + " %", + "PowerPass: " + EnumChatFormatting.BLUE + + ePowerPass + + EnumChatFormatting.RESET + + " SafeVoid: " + + EnumChatFormatting.BLUE + + eSafeVoid, + "Computation: " + EnumChatFormatting.GREEN + + GTUtility.formatNumbers(eAvailableData) + + EnumChatFormatting.RESET + + " / " + + EnumChatFormatting.YELLOW + + GTUtility.formatNumbers(eRequiredData) + + EnumChatFormatting.RESET }; + } + + /** + * should it work with scanner? HELL YES + */ + @Override + public boolean isGivingInformation() { + return true; + } + + // endregion + + // region GUI/SOUND/RENDER + + /** + * add more textures + */ + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/EM_CONTROLLER"); + ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/EM_CONTROLLER_ACTIVE"); + super.registerIcons(aBlockIconRegister); + } + + /** + * actually use textures + */ + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][4], + new TTRenderedExtendedFacingTexture(aActive ? ScreenON : ScreenOFF) }; + } + return new ITexture[] { Textures.BlockIcons.casingTexturePages[texturePage][4] }; + } + + /** + * should return your activity sound + */ + @SideOnly(Side.CLIENT) + protected ResourceLocation getActivitySound() { + return activitySound; + } + + /** + * plays the sounds auto magically + */ + @SideOnly(Side.CLIENT) + protected void soundMagic(ResourceLocation activitySound) { + if (getBaseMetaTileEntity().isActive()) { + if (activitySoundLoop == null) { + activitySoundLoop = new SoundLoop(activitySound, getBaseMetaTileEntity(), false, true); + Minecraft.getMinecraft() + .getSoundHandler() + .playSound(activitySoundLoop); + } + } else { + if (activitySoundLoop != null) { + activitySoundLoop = null; + } + } + } + + // endregion + + // region Methods to maybe override (if u implement certain stuff) + + /** + * is the thing inside controller a valid item to make the machine work + */ + @Override + public boolean isCorrectMachinePart(ItemStack itemStack) { + return true; + } + + /** + * how much damage to apply to thing in controller - not sure how it does it + */ + @Override + public int getDamageToComponent(ItemStack itemStack) { + return 0; + } + + /** + * called when removing from map - not when unloading? //todo check + */ + @Override + public void onRemoval() { + try { + if (ePowerPass && getEUVar() > V[3] + || eDismantleBoom && mMaxProgresstime > 0 && areChunksAroundLoaded_EM()) { + explodeMultiblock(); + } + } catch (Exception e) { + if (TecTechConfig.DEBUG_MODE) { + e.printStackTrace(); + } + } + } + + /** + * prevents spontaneous explosions when the chunks unloading would cause them should cover 3 chunks radius + */ + protected boolean areChunksAroundLoaded_EM() { + if (this.isValid() && getBaseMetaTileEntity().isServerSide()) { + IGregTechTileEntity base = getBaseMetaTileEntity(); + return base.getWorld() + .doChunksNearChunkExist(base.getXCoord(), base.getYCoord(), base.getZCoord(), 3); + // todo check if it is actually checking if chunks are loaded + } else { + return false; + } + } + + /** + * instantiate parameters in CONSTRUCTOR! CALLED ONCE on creation, don't call it in your classes + */ + protected void parametersInstantiation_EM() {} + + /** + * It is automatically called OFTEN update status of parameters in guis (and "machine state" if u wish) Called + * before check recipe, before outputting, and every second the machine is complete + *

+ * good place to update parameter statuses, default implementation handles it well + * + * @param machineBusy is machine doing stuff + */ + protected void parametersStatusesWrite_EM(boolean machineBusy) { // todo unimplement? + if (!machineBusy) { + for (Parameters.Group.ParameterIn parameterIn : parametrization.parameterInArrayList) { + if (parameterIn != null) { + parameterIn.updateStatus(); + } + } + } else { + for (Parameters.Group hatch : parametrization.groups) { + if (hatch != null && hatch.updateWhileRunning) { + for (Parameters.Group.ParameterIn in : hatch.parameterIn) { + if (in != null) { + in.updateStatus(); + } + } + } + } + } + for (Parameters.Group.ParameterOut parameterOut : parametrization.parameterOutArrayList) { + if (parameterOut != null) { + parameterOut.updateStatus(); + } + } + } + + /** + * For extra types of hatches initiation, LOOK HOW IT IS CALLED! in onPostTick + * + * @param mMachine was the machine considered complete at that point in onPostTick + */ + protected void hatchInit_EM(boolean mMachine) {} + + /** + * called when the multiblock is exploding - if u want to add more EXPLOSIONS, for ex. new types of hatches also + * have to explode + */ + protected void extraExplosions_EM() {} // For that extra hatches explosions, and maybe some MOORE EXPLOSIONS + + /** + * Get Available data, Override only on data outputters should return mAvailableData that is set in check recipe + * + * @return available data + */ + protected long getAvailableData_EM() { + long result = 0; + IGregTechTileEntity baseMetaTileEntity = getBaseMetaTileEntity(); + Vec3Impl pos = new Vec3Impl( + baseMetaTileEntity.getXCoord(), + baseMetaTileEntity.getYCoord(), + baseMetaTileEntity.getZCoord()); + for (MTEHatchDataInput in : eInputData) { + if (in.q != null) { + Long value = in.q.contentIfNotInTrace(pos); + if (value != null) { + result += value; + } + } + } + return result; + } + + protected long getPowerFlow() { + return useLongPower ? lEUt : mEUt; + } + + protected void setPowerFlow(long lEUt) { + if (useLongPower) { + this.lEUt = lEUt; + } else { + mEUt = (int) Math.min(Integer.MAX_VALUE, lEUt); + } + } + + @Override + protected long getActualEnergyUsage() { + return -(useLongPower ? lEUt : mEUt) * eAmpereFlow * 10_000 / Math.max(1_000, mEfficiency); + } + + /** + * Extra hook on cyclic updates (not really needed for machines smaller than 1 chunk) BUT NEEDED WHEN - machine + * blocks are not touching each other or they don't implement IMachineBlockUpdateable (ex. air,stone,weird TE's) + */ + protected boolean cyclicUpdate_EM() { + return mUpdate <= -1000; // set to false to disable cyclic update + // default is once per 50s; mUpdate is decremented every tick + } + + /** + * get pollution per tick + * + * @param itemStack what is in controller + * @return how much pollution is produced + */ + @Override + public int getPollutionPerTick(ItemStack itemStack) { + return 0; + } + + /** + * EM pollution per tick + * + * @param itemStack - item in controller + * @return how much excess matter is there + */ + public float getExcessMassPerTick_EM(ItemStack itemStack) { + return 0f; + } + + /** + * triggered if machine is not allowed to work after completing a recipe, override to make it not shutdown for + * instance (like turbines). bu just replacing it with blank - active transformer is doing it + *

+ * CALLED DIRECTLY when soft hammered to offline state - usually should stop the machine unless some other mechanics + * should do it + */ + protected void notAllowedToWork_stopMachine_EM() { + stopMachine(); + } + + /** + * store data + */ + @Override + public void saveNBTData(NBTTagCompound aNBT) { + super.saveNBTData(aNBT); + aNBT.setLong("eMaxGenEUmin", maxEUoutputMin); + aNBT.setLong("eMaxGenEUmax", maxEUoutputMax); + aNBT.setLong("eGenRating", eMaxAmpereGen); + aNBT.setLong("eMaxEUmin", maxEUinputMin); + aNBT.setLong("eMaxEUmax", maxEUinputMax); + aNBT.setLong("eRating", eAmpereFlow); + aNBT.setLong("eMaxA", eMaxAmpereFlow); + aNBT.setLong("eDataR", eRequiredData); + aNBT.setLong("eDataA", eAvailableData); + aNBT.setByte("eCertainM", eCertainMode); + aNBT.setByte("eCertainS", eCertainStatus); + aNBT.setByte("eMinRepair", minRepairStatus); + aNBT.setBoolean("eParam", eParameters); + aNBT.setBoolean("ePass", ePowerPass); + aNBT.setBoolean("ePowerPassCover", ePowerPassCover); + aNBT.setBoolean("eVoid", eSafeVoid); + aNBT.setBoolean("eBoom", eDismantleBoom); + aNBT.setBoolean("eOK", mMachine); + // Ensures compatibility + if (mOutputItems != null) { + aNBT.setInteger("mOutputItemsLength", mOutputItems.length); + for (int i = 0; i < mOutputItems.length; i++) { + if (mOutputItems[i] != null) { + NBTTagCompound tNBT = new NBTTagCompound(); + mOutputItems[i].writeToNBT(tNBT); + aNBT.setTag("mOutputItem" + i, tNBT); + } + } + } + + // Ensures compatibility + if (mOutputFluids != null) { + aNBT.setInteger("mOutputFluidsLength", mOutputFluids.length); + for (int i = 0; i < mOutputFluids.length; i++) { + if (mOutputFluids[i] != null) { + NBTTagCompound tNBT = new NBTTagCompound(); + mOutputFluids[i].writeToNBT(tNBT); + aNBT.setTag("mOutputFluids" + i, tNBT); + } + } + } + + aNBT.setInteger("eOutputStackCount", 0); + aNBT.removeTag("outputEM"); + + NBTTagCompound paramI = new NBTTagCompound(); + for (int i = 0; i < parametrization.iParamsIn.length; i++) { + paramI.setDouble(Integer.toString(i), parametrization.iParamsIn[i]); + } + aNBT.setTag("eParamsInD", paramI); + + NBTTagCompound paramO = new NBTTagCompound(); + for (int i = 0; i < parametrization.iParamsOut.length; i++) { + paramO.setDouble(Integer.toString(i), parametrization.iParamsOut[i]); + } + aNBT.setTag("eParamsOutD", paramO); + + NBTTagCompound paramIs = new NBTTagCompound(); + for (int i = 0; i < parametrization.eParamsInStatus.length; i++) { + paramIs.setByte(Integer.toString(i), parametrization.eParamsInStatus[i].getOrdinalByte()); + } + aNBT.setTag("eParamsInS", paramIs); + + NBTTagCompound paramOs = new NBTTagCompound(); + for (int i = 0; i < parametrization.eParamsOutStatus.length; i++) { + paramOs.setByte(Integer.toString(i), parametrization.eParamsOutStatus[i].getOrdinalByte()); + } + aNBT.setTag("eParamsOutS", paramOs); + } + + /** + * load data + */ + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + maxEUoutputMin = aNBT.getLong("eMaxGenEUmin"); + maxEUoutputMax = aNBT.getLong("eMaxGenEUmax"); + eMaxAmpereGen = aNBT.getLong("eGenRating"); + maxEUinputMin = aNBT.getLong("eMaxEUmin"); + maxEUinputMax = aNBT.getLong("eMaxEUmax"); + eAmpereFlow = aNBT.hasKey("eRating") ? aNBT.getLong("eRating") : 1; + eMaxAmpereFlow = aNBT.getLong("eMaxA"); + eRequiredData = aNBT.getLong("eDataR"); + eAvailableData = aNBT.getLong("eDataA"); + eCertainMode = aNBT.getByte("eCertainM"); + eCertainStatus = aNBT.getByte("eCertainS"); + minRepairStatus = aNBT.hasKey("eMinRepair") ? aNBT.getByte("eMinRepair") : 3; + eParameters = !aNBT.hasKey("eParam") || aNBT.getBoolean("eParam"); + ePowerPass = aNBT.getBoolean("ePass"); + ePowerPassCover = aNBT.getBoolean("ePowerPassCover"); + eSafeVoid = aNBT.getBoolean("eVoid"); + eDismantleBoom = aNBT.getBoolean("eBoom"); + mMachine = aNBT.getBoolean("eOK"); + + // Ensures compatibility + int aOutputItemsLength = aNBT.getInteger("mOutputItemsLength"); + if (aOutputItemsLength > 0) { + mOutputItems = new ItemStack[aOutputItemsLength]; + for (int i = 0; i < mOutputItems.length; i++) { + mOutputItems[i] = GTUtility.loadItem(aNBT, "mOutputItem" + i); + } + } + + // Ensures compatibility + int aOutputFluidsLength = aNBT.getInteger("mOutputFluidsLength"); + if (aOutputFluidsLength > 0) { + mOutputFluids = new FluidStack[aOutputFluidsLength]; + for (int i = 0; i < mOutputFluids.length; i++) { + mOutputFluids[i] = GTUtility.loadFluid(aNBT, "mOutputFluids" + i); + } + } + + if (aNBT.hasKey("eParamsIn") && aNBT.hasKey("eParamsOut") && aNBT.hasKey("eParamsB")) { + NBTTagCompound paramI = aNBT.getCompoundTag("eParamsIn"); + NBTTagCompound paramO = aNBT.getCompoundTag("eParamsOut"); + NBTTagCompound paramB = aNBT.getCompoundTag("eParamsB"); + for (int i = 0; i < 10; i++) { + if (paramB.getBoolean(Integer.toString(i))) { + parametrization.iParamsIn[i] = Float.intBitsToFloat(paramI.getInteger(Integer.toString(i))); + parametrization.iParamsOut[i] = Float.intBitsToFloat(paramO.getInteger(Integer.toString(i))); + } else { + parametrization.iParamsIn[i] = paramI.getInteger(Integer.toString(i)); + parametrization.iParamsOut[i] = paramO.getInteger(Integer.toString(i)); + } + } + } else { + NBTTagCompound paramI = aNBT.getCompoundTag("eParamsInD"); + for (int i = 0; i < parametrization.iParamsIn.length; i++) { + parametrization.iParamsIn[i] = paramI.getDouble(Integer.toString(i)); + } + NBTTagCompound paramO = aNBT.getCompoundTag("eParamsOutD"); + for (int i = 0; i < parametrization.iParamsOut.length; i++) { + parametrization.iParamsOut[i] = paramO.getDouble(Integer.toString(i)); + } + } + + NBTTagCompound paramIs = aNBT.getCompoundTag("eParamsInS"); + for (int i = 0; i < parametrization.eParamsInStatus.length; i++) { + parametrization.eParamsInStatus[i] = LedStatus.getStatus(paramIs.getByte(Integer.toString(i))); + } + + NBTTagCompound paramOs = aNBT.getCompoundTag("eParamsOutS"); + for (int i = 0; i < parametrization.eParamsOutStatus.length; i++) { + parametrization.eParamsOutStatus[i] = LedStatus.getStatus(paramOs.getByte(Integer.toString(i))); + } + } + + /** + * Override if needed but usually call super method at start! On machine stop - NOT called directly when soft + * hammered to offline state! - it SHOULD cause a full stop like power failure does + */ + @Override + public void stopMachine(@Nonnull ShutDownReason reason) { + if (!ShutDownReasonRegistry.isRegistered(reason.getID())) { + throw new RuntimeException(String.format("Reason %s is not registered for registry", reason.getID())); + } + for (MTEHatchDataOutput data : eOutputData) { + data.q = null; + } + + mOutputItems = null; + mOutputFluids = null; + mEfficiency = 0; + mEfficiencyIncrease = 0; + mProgresstime = 0; + mMaxProgresstime = 0; + eAvailableData = 0; + hatchesStatusUpdate_EM(); + getBaseMetaTileEntity().disableWorking(); + getBaseMetaTileEntity().setShutDownReason(reason); + getBaseMetaTileEntity().setShutdownStatus(true); + if (reason.wasCritical()) { + sendSound(INTERRUPT_SOUND_INDEX); + } + } + + /** + * After recipe check failed helper method so i don't have to set that params to nothing at all times + */ + protected void afterRecipeCheckFailed() { + + for (MTEHatchDataOutput data : eOutputData) { + data.q = null; + } + + mOutputItems = null; + mOutputFluids = null; + mEfficiency = 0; + mEfficiencyIncrease = 0; + mProgresstime = 0; + mMaxProgresstime = 0; + eAvailableData = 0; + } + + /** + * cyclic check even when not working, called LESS frequently + */ + private boolean cyclicUpdate() { + if (cyclicUpdate_EM()) { + mUpdate = 0; + return true; + } + return false; + } + + /** + * mining level... + */ + @Override + public byte getTileEntityBaseType() { + return 3; + } + + // endregion + + // region internal + + /** + * internal check machine + */ + @Override + public final boolean checkMachine(IGregTechTileEntity iGregTechTileEntity, ItemStack itemStack) { + return checkMachine_EM(iGregTechTileEntity, itemStack); + } + + /** + * internal check recipe + */ + @Override + public final boolean checkRecipe(ItemStack itemStack) { // do recipe checks, based on "machine content and state" + hatchesStatusUpdate_EM(); + startRecipeProcessing(); + boolean result = checkRecipe_EM(itemStack); // if had no - set default params + endRecipeProcessing(); + hatchesStatusUpdate_EM(); + return result; + } + + @NotNull + @Override + public final CheckRecipeResult checkProcessing() { + hatchesStatusUpdate_EM(); + CheckRecipeResult result = checkProcessing_EM(); + hatchesStatusUpdate_EM(); + return result; + } + + /** + * callback for updating parameters and new hatches + */ + protected void hatchesStatusUpdate_EM() { + if (getBaseMetaTileEntity().isClientSide()) { + return; + } + boolean busy = mMaxProgresstime > 0; + if (busy) { // write from buffer to hatches only + for (MTEHatchParam hatch : filterValidMTEs(eParamHatches)) { + if (hatch.param < 0) { + continue; + } + int hatchId = hatch.param; + if (parametrization.groups[hatchId] != null && parametrization.groups[hatchId].updateWhileRunning) { + parametrization.iParamsIn[hatchId] = hatch.value0D; + parametrization.iParamsIn[hatchId + 10] = hatch.value1D; + } + hatch.input0D = parametrization.iParamsOut[hatchId]; + hatch.input1D = parametrization.iParamsOut[hatchId + 10]; + } + } else { // if has nothing to do update all + for (MTEHatchParam hatch : filterValidMTEs(eParamHatches)) { + if (hatch.param < 0) { + continue; + } + int hatchId = hatch.param; + parametrization.iParamsIn[hatchId] = hatch.value0D; + parametrization.iParamsIn[hatchId + 10] = hatch.value1D; + hatch.input0D = parametrization.iParamsOut[hatchId]; + hatch.input1D = parametrization.iParamsOut[hatchId + 10]; + } + } + for (MTEHatchUncertainty uncertainty : eUncertainHatches) { + eCertainStatus = uncertainty.update(eCertainMode); + } + eAvailableData = getAvailableData_EM(); + parametersStatusesWrite_EM(busy); + } + + @Deprecated + public final int getAmountOfOutputs() { + throw new NoSuchMethodError("Deprecated Do not use"); + } + // endregion + + // region TICKING functions + + public void onFirstTick_EM(IGregTechTileEntity aBaseMetaTileEntity) {} + + @Override + public final void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + isFacingValid(aBaseMetaTileEntity.getFrontFacing()); + if (getBaseMetaTileEntity().isClientSide()) { + StructureLibAPI.queryAlignment((IAlignmentProvider) aBaseMetaTileEntity); + } + onFirstTick_EM(aBaseMetaTileEntity); + } + + /** + * called every tick the machines is active + */ + @Override + public boolean onRunningTick(ItemStack aStack) { + return onRunningTickCheck(aStack); + } + + public boolean onRunningTickCheck_EM(ItemStack aStack) { + if (eRequiredData > eAvailableData) { + if (!checkComputationTimeout()) { + if (energyFlowOnRunningTick_EM(aStack, false)) { + stopMachine(SimpleShutDownReason.ofCritical("computation_loss")); + } + return false; + } + } + return energyFlowOnRunningTick_EM(aStack, true); + } + + public boolean onRunningTickCheck(ItemStack aStack) { + if (eRequiredData > eAvailableData) { + if (!checkComputationTimeout()) { + if (energyFlowOnRunningTick(aStack, false)) { + stopMachine(SimpleShutDownReason.ofCritical("computation_loss")); + } + return false; + } + } + return energyFlowOnRunningTick(aStack, true); + } + + /** + * CAREFUL!!! it calls most of the callbacks, like everything else in here + */ + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + mTotalRunTime++; + explodedThisTick = false; + if (mEfficiency < 0) { + mEfficiency = 0; + } + + if (--mUpdate == 0 || --mStartUpCheck == 0 + || cyclicUpdate() + || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) { + clearHatches_EM(); + + if (aBaseMetaTileEntity instanceof BaseTileEntity) { + ((BaseTileEntity) aBaseMetaTileEntity).ignoreUnloadedChunks = mMachine; + } + mMachine = checkMachine(aBaseMetaTileEntity, mInventory[1]); + + if (!mMachine) { + if (ePowerPass && getEUVar() > V[3] + || eDismantleBoom && mMaxProgresstime > 0 && areChunksAroundLoaded_EM()) { + explodeMultiblock(); + } + } + + if (eUncertainHatches.size() > 1) { + mMachine = false; + } + + if (mMachine) { + setupHatches_EM(); + + setupEnergyHatchesVariables_EM(); + + if (getEUVar() > maxEUStore()) { + setEUVar(maxEUStore()); + } + } else { + maxEUinputMin = 0; + maxEUinputMax = 0; + eMaxAmpereFlow = 0; + setEUVar(0); + } + hatchInit_EM(mMachine); + } + + if (mStartUpCheck < 0) { // E + if (mMachine) { // S + byte Tick = (byte) (aTick % 20); + if (CommonValues.MULTI_CHECK_AT == Tick) { + checkMaintenance(); + } + + if (getRepairStatus() >= minRepairStatus) { // S + if (CommonValues.MULTI_CHECK_AT == Tick) { + hatchesStatusUpdate_EM(); + } + + dischargeController_EM(aBaseMetaTileEntity); + chargeController_EM(aBaseMetaTileEntity); + + if (mMaxProgresstime > 0 && doRandomMaintenanceDamage()) { // Start + if (onRunningTick(mInventory[1])) { // Compute EU + if (!polluteEnvironment(getPollutionPerTick(mInventory[1]))) { + stopMachine(ShutDownReasonRegistry.POLLUTION_FAIL); + } + + if (mMaxProgresstime > 0 && ++mProgresstime >= mMaxProgresstime) { // progress increase + // and done + hatchesStatusUpdate_EM(); + + outputAfterRecipe_EM(); + + addClassicOutputs_EM(); + + updateSlots(); + mProgresstime = 0; + mMaxProgresstime = 0; + mEfficiencyIncrease = 0; + + if (aBaseMetaTileEntity.isAllowedToWork()) { + if (checkRecipe()) { + mEfficiency = Math.max( + 0, + min( + mEfficiency + mEfficiencyIncrease, + getMaxEfficiency(mInventory[1]) + - (getIdealStatus() - getRepairStatus()) * 1000)); + } else { + afterRecipeCheckFailed(); + } + updateSlots(); + } else { + notAllowedToWork_stopMachine_EM(); + } + } + } // else {//failed to consume power/resources - inside on running tick + // stopMachine(); + // } + } else if (CommonValues.RECIPE_AT == Tick || aBaseMetaTileEntity.hasWorkJustBeenEnabled()) { + if (aBaseMetaTileEntity.isAllowedToWork()) { + if (checkRecipe()) { + mEfficiency = Math.max( + 0, + min( + mEfficiency + mEfficiencyIncrease, + getMaxEfficiency(mInventory[1]) + - (getIdealStatus() - getRepairStatus()) * 1000)); + } else { + afterRecipeCheckFailed(); + } + updateSlots(); + } // else notAllowedToWork_stopMachine_EM(); //it is already stopped here + } + } else { // not repaired + stopMachine(ShutDownReasonRegistry.NO_REPAIR); + } + } else { // not complete + stopMachine(ShutDownReasonRegistry.STRUCTURE_INCOMPLETE); + } + } + + aBaseMetaTileEntity.setErrorDisplayID( + aBaseMetaTileEntity.getErrorDisplayID() & -512 | (mWrench ? 0 : 1) + | (mScrewdriver ? 0 : 2) + | (mSoftHammer ? 0 : 4) + | (mHardHammer ? 0 : 8) + | (mSolderingTool ? 0 : 16) + | (mCrowbar ? 0 : 32) + | (mMachine ? 0 : 64) + | (eCertainStatus == 0 ? 0 : 128) + | (eParameters ? 0 : 256)); + aBaseMetaTileEntity.setActive(mMaxProgresstime > 0); + boolean active = aBaseMetaTileEntity.isActive() && mPollution > 0; + setMufflers(active); + } else { + soundMagic(getActivitySound()); + } + } + + protected void addClassicOutputs_EM() { + if (mOutputItems != null) { + for (ItemStack tStack : mOutputItems) { + if (tStack != null) { + addOutput(tStack); + } + } + } + mOutputItems = null; + + if (mOutputFluids != null) { + if (mOutputFluids.length == 1) { + for (FluidStack tStack : mOutputFluids) { + if (tStack != null) { + addOutput(tStack); + } + } + } else if (mOutputFluids.length > 1) { + addFluidOutputs(mOutputFluids); + } + } + mOutputFluids = null; + } + + protected void clearHatches_EM() { + mDualInputHatches.clear(); + mInputHatches.clear(); + mInputBusses.clear(); + mOutputHatches.clear(); + mOutputBusses.clear(); + mDynamoHatches.clear(); + mEnergyHatches.clear(); + mMufflerHatches.clear(); + mMaintenanceHatches.clear(); + + for (MTEHatchDataConnector hatch_data : filterValidMTEs(eOutputData)) { + hatch_data.id = -1; + } + for (MTEHatchDataConnector hatch_data : filterValidMTEs(eInputData)) { + hatch_data.id = -1; + } + + for (MTEHatchUncertainty hatch : filterValidMTEs(eUncertainHatches)) { + hatch.getBaseMetaTileEntity() + .setActive(false); + } + for (MTEHatchParam hatch : filterValidMTEs(eParamHatches)) { + hatch.getBaseMetaTileEntity() + .setActive(false); + } + + eUncertainHatches.clear(); + eEnergyMulti.clear(); + eParamHatches.clear(); + eDynamoMulti.clear(); + eOutputData.clear(); + eInputData.clear(); + } + + protected void setupHatches_EM() { + short id = 1; + + for (MTEHatchDataConnector hatch_data : filterValidMTEs(eOutputData)) { + hatch_data.id = id++; + } + id = 1; + for (MTEHatchDataConnector hatch_data : filterValidMTEs(eInputData)) { + hatch_data.id = id++; + } + + for (MTEHatchUncertainty hatch : filterValidMTEs(eUncertainHatches)) { + hatch.getBaseMetaTileEntity() + .setActive(true); + } + for (MTEHatchParam hatch : filterValidMTEs(eParamHatches)) { + hatch.getBaseMetaTileEntity() + .setActive(true); + } + } + + protected void setupEnergyHatchesVariables_EM() { + if (!mEnergyHatches.isEmpty() || !eEnergyMulti.isEmpty() + || !mDynamoHatches.isEmpty() + || !eDynamoMulti.isEmpty()) { + maxEUinputMin = V[15]; + maxEUinputMax = V[0]; + maxEUoutputMin = V[15]; + maxEUoutputMax = V[0]; + for (MTEHatchEnergy hatch : filterValidMTEs(mEnergyHatches)) { + if (hatch.maxEUInput() < maxEUinputMin) { + maxEUinputMin = hatch.maxEUInput(); + } + if (hatch.maxEUInput() > maxEUinputMax) { + maxEUinputMax = hatch.maxEUInput(); + } + } + for (MTEHatchEnergyMulti hatch : filterValidMTEs(eEnergyMulti)) { + if (hatch.maxEUInput() < maxEUinputMin) { + maxEUinputMin = hatch.maxEUInput(); + } + if (hatch.maxEUInput() > maxEUinputMax) { + maxEUinputMax = hatch.maxEUInput(); + } + } + for (MTEHatchDynamo hatch : filterValidMTEs(mDynamoHatches)) { + if (hatch.maxEUOutput() < maxEUoutputMin) { + maxEUoutputMin = hatch.maxEUOutput(); + } + if (hatch.maxEUOutput() > maxEUoutputMax) { + maxEUoutputMax = hatch.maxEUOutput(); + } + } + for (MTEHatchDynamoMulti hatch : filterValidMTEs(eDynamoMulti)) { + if (hatch.maxEUOutput() < maxEUoutputMin) { + maxEUoutputMin = hatch.maxEUOutput(); + } + if (hatch.maxEUOutput() > maxEUoutputMax) { + maxEUoutputMax = hatch.maxEUOutput(); + } + } + eMaxAmpereFlow = 0; + eMaxAmpereGen = 0; + // counts only full amps + for (MTEHatchEnergy hatch : filterValidMTEs(mEnergyHatches)) { + eMaxAmpereFlow += hatch.maxEUInput() / maxEUinputMin; + } + for (MTEHatchEnergyMulti hatch : filterValidMTEs(eEnergyMulti)) { + eMaxAmpereFlow += hatch.maxEUInput() / maxEUinputMin * hatch.Amperes; + } + for (MTEHatchDynamo hatch : filterValidMTEs(mDynamoHatches)) { + eMaxAmpereGen += hatch.maxEUOutput() / maxEUoutputMin; + } + for (MTEHatchDynamoMulti hatch : filterValidMTEs(eDynamoMulti)) { + eMaxAmpereGen += hatch.maxEUOutput() / maxEUoutputMin * hatch.Amperes; + } + } else { + maxEUinputMin = 0; + maxEUinputMax = 0; + eMaxAmpereFlow = 0; + maxEUoutputMin = 0; + maxEUoutputMax = 0; + eMaxAmpereGen = 0; + } + } + + protected void dischargeController_EM(IGregTechTileEntity aBaseMetaTileEntity) { + if (ePowerPass && getEUVar() > getMinimumStoredEU()) { + powerPass(aBaseMetaTileEntity); + } + } + + protected final void powerPass(IGregTechTileEntity aBaseMetaTileEntity) { + long euVar; + for (MTEHatchDynamo tHatch : filterValidMTEs(mDynamoHatches)) { + euVar = tHatch.maxEUOutput() * tHatch.maxAmperesOut(); + if (tHatch.getBaseMetaTileEntity() + .getStoredEU() <= tHatch.maxEUStore() - euVar + && aBaseMetaTileEntity + .decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, tHatch.maxAmperesOut()), false)) { + tHatch.setEUVar( + tHatch.getBaseMetaTileEntity() + .getStoredEU() + euVar); + } + } + for (MTEHatchDynamoMulti tHatch : filterValidMTEs(eDynamoMulti)) { + euVar = tHatch.maxEUOutput() * tHatch.maxAmperesOut(); + if (tHatch.getBaseMetaTileEntity() + .getStoredEU() <= tHatch.maxEUStore() - euVar + && aBaseMetaTileEntity + .decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, tHatch.maxAmperesOut()), false)) { + tHatch.setEUVar( + tHatch.getBaseMetaTileEntity() + .getStoredEU() + euVar); + } + } + } + + protected final void powerPass_EM(IGregTechTileEntity aBaseMetaTileEntity) { + long euVar; + for (MTEHatchDynamo tHatch : filterValidMTEs(mDynamoHatches)) { + euVar = tHatch.maxEUOutput(); + if (tHatch.getBaseMetaTileEntity() + .getStoredEU() <= tHatch.maxEUStore() - euVar + && aBaseMetaTileEntity.decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, 1), false)) { + tHatch.setEUVar( + tHatch.getBaseMetaTileEntity() + .getStoredEU() + euVar); + } + } + for (MTEHatchDynamoMulti tHatch : filterValidMTEs(eDynamoMulti)) { + euVar = tHatch.maxEUOutput() * tHatch.Amperes; + if (tHatch.getBaseMetaTileEntity() + .getStoredEU() <= tHatch.maxEUStore() - euVar + && aBaseMetaTileEntity + .decreaseStoredEnergyUnits(euVar + Math.max(euVar / 24576, tHatch.Amperes), false)) { + tHatch.setEUVar( + tHatch.getBaseMetaTileEntity() + .getStoredEU() + euVar); + } + } + } + + protected void chargeController_EM(IGregTechTileEntity aBaseMetaTileEntity) { + powerInput(); + } + + protected final void powerInput() { + long euVar; + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + if (getEUVar() > getMinimumStoredEU()) { + break; + } + euVar = Math.min(tHatch.maxEUInput() * tHatch.maxAmperesIn(), tHatch.getEUVar()); + if (tHatch.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(euVar, false)) { + setEUVar(getEUVar() + euVar); + } + } + for (MTEHatchEnergyMulti tHatch : filterValidMTEs(eEnergyMulti)) { + if (getEUVar() > getMinimumStoredEU()) { + break; + } + euVar = Math.min(tHatch.maxEUInput() * tHatch.maxAmperesIn(), tHatch.getEUVar()); + if (tHatch.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(euVar, false)) { + setEUVar(getEUVar() + euVar); + } + } + } + + protected final void powerInput_EM() { + long euVar; + for (MTEHatchEnergy tHatch : filterValidMTEs(mEnergyHatches)) { + if (getEUVar() > getMinimumStoredEU()) { + break; + } + euVar = tHatch.maxEUInput(); + if (tHatch.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(euVar, false)) { + setEUVar(getEUVar() + euVar); + } + } + for (MTEHatchEnergyMulti tHatch : filterValidMTEs(eEnergyMulti)) { + if (getEUVar() > getMinimumStoredEU()) { + break; + } + euVar = tHatch.maxEUInput() * tHatch.Amperes; + if (tHatch.getBaseMetaTileEntity() + .decreaseStoredEnergyUnits(euVar, false)) { + setEUVar(getEUVar() + euVar); + } + } + } + + // endregion + + // region EFFICIENCY AND FIXING LIMITS + + @Override + public int getMaxEfficiency(ItemStack itemStack) { + return 10000; + } + + @Override + public int getIdealStatus() { + return super.getIdealStatus() + 2; + } + + @Override + public int getRepairStatus() { + return super.getRepairStatus() + (eCertainStatus == 0 ? 1 : 0) + (eParameters ? 1 : 0); + } + + // endregion + + // region ENERGY!!!! + + // new method + public boolean energyFlowOnRunningTick_EM(ItemStack aStack, boolean allowProduction) { + long euFlow = getPowerFlow() * eAmpereFlow; // quick scope sign + if (allowProduction && euFlow > 0) { + addEnergyOutput_EM(getPowerFlow() * (long) mEfficiency / getMaxEfficiency(aStack), eAmpereFlow); + } else if (euFlow < 0) { + if (TecTechConfig.POWERLESS_MODE) { + return true; + } + if (!drainEnergyInput_EM( + getPowerFlow(), + getPowerFlow() * getMaxEfficiency(aStack) / Math.max(1000L, mEfficiency), + eAmpereFlow)) { + criticalStopMachine(); + return false; + } + } + return true; + } + + public boolean energyFlowOnRunningTick(ItemStack aStack, boolean allowProduction) { + long euFlow = getPowerFlow() * eAmpereFlow; // quick scope sign + if (allowProduction && euFlow > 0) { + addEnergyOutput_EM(getPowerFlow() * (long) mEfficiency / getMaxEfficiency(aStack), eAmpereFlow); + } else if (euFlow < 0) { + if (TecTechConfig.POWERLESS_MODE) { + return true; + } + if (!drainEnergyInput( + getPowerFlow() * getMaxEfficiency(aStack) / Math.max(1000L, mEfficiency), + eAmpereFlow)) { + stopMachine(ShutDownReasonRegistry.POWER_LOSS); + return false; + } + } + return true; + } + + @Override + public long maxEUStore() { + return Math.max(maxEUinputMin * (eMaxAmpereFlow << 3), maxEUoutputMin * (eMaxAmpereGen << 3)); + } + + @Override + public final long getMinimumStoredEU() { + return maxEUStore() >> 1; + } + + @Override + public final long maxAmperesIn() { + return 0L; + } + + @Override + public final long maxAmperesOut() { + return 0L; + } + + @Deprecated + @Override + public final boolean addEnergyOutput(long eu) { + return addEnergyOutput_EM(eu, 1); + } + + public boolean addEnergyOutput_EM(long EU, long Amperes) { + if (EU < 0) { + EU = -EU; + } + if (Amperes < 0) { + Amperes = -Amperes; + } + long euVar = EU * Amperes; + long diff; + for (MTEHatchDynamo tHatch : filterValidMTEs(mDynamoHatches)) { + if (tHatch.maxEUOutput() < EU) { + explodeMultiblock(); + } + diff = tHatch.maxEUStore() - tHatch.getBaseMetaTileEntity() + .getStoredEU(); + if (diff > 0) { + if (euVar > diff) { + tHatch.setEUVar(tHatch.maxEUStore()); + euVar -= diff; + } else if (euVar <= diff) { + tHatch.setEUVar( + tHatch.getBaseMetaTileEntity() + .getStoredEU() + euVar); + return true; + } + } + } + for (MTEHatchDynamoMulti tHatch : filterValidMTEs(eDynamoMulti)) { + if (tHatch.maxEUOutput() < EU) { + explodeMultiblock(); + } + diff = tHatch.maxEUStore() - tHatch.getBaseMetaTileEntity() + .getStoredEU(); + if (diff > 0) { + if (euVar > diff) { + tHatch.setEUVar(tHatch.maxEUStore()); + euVar -= diff; + } else if (euVar <= diff) { + tHatch.setEUVar( + tHatch.getBaseMetaTileEntity() + .getStoredEU() + euVar); + return true; + } + } + } + setEUVar(min(getEUVar() + euVar, maxEUStore())); + return false; + } + + @Deprecated + @Override + public final boolean drainEnergyInput(long eu) { + return drainEnergyInput_EM(0, eu, 1); + } + + public boolean drainEnergyInput_EM(long EUtTierVoltage, long EUtEffective, long Amperes) { + long EUuse = EUtEffective * Amperes; + if (EUuse == 0) { + return true; + } + if (maxEUinputMin == 0) { + return false; + } + if (EUuse < 0) { + EUuse = -EUuse; + } + if (EUuse > getEUVar() || // not enough power + (EUtTierVoltage == 0 ? EUuse > getMaxInputEnergy() : (EUtTierVoltage > maxEUinputMax) || // TIER IS + // BASED ON + // BEST HATCH! + // not total + // EUtEffective + // input + (EUtTierVoltage * Amperes - 1) / maxEUinputMin + 1 > eMaxAmpereFlow)) { // EUuse==0? --> (EUuse + // - 1) / maxEUinputMin + // + 1 = 1! //if + // not too much A + if (TecTechConfig.DEBUG_MODE) { + TecTech.LOGGER.debug("L1 " + EUuse + ' ' + getEUVar() + ' ' + (EUuse > getEUVar())); + TecTech.LOGGER.debug("L2 " + EUtEffective + ' ' + maxEUinputMax + ' ' + (EUtEffective > maxEUinputMax)); + TecTech.LOGGER.debug("L3 " + Amperes + ' ' + getMaxInputEnergy()); + TecTech.LOGGER.debug( + "L4 " + ((EUuse - 1) / maxEUinputMin + 1) + + ' ' + + eMaxAmpereFlow + + ' ' + + ((EUuse - 1) / maxEUinputMin + 1 > eMaxAmpereFlow)); + } + return false; + } + // sub eu + setEUVar(getEUVar() - EUuse); + return true; + } + + public boolean drainEnergyInput(long EUtEffective, long Amperes) { + long EUuse = EUtEffective * Amperes; + if (EUuse == 0) { + return true; + } + if (maxEUinputMin == 0) { + return false; + } + if (EUuse < 0) { + EUuse = -EUuse; + } + // not enough power + if (EUuse > getEUVar() || EUuse > getMaxInputEnergy()) { // EUuse==0? --> (EUuse - 1) / maxEUinputMin + 1 = 1! + // //if not too much + // A + return false; + } + // sub eu + setEUVar(getEUVar() - EUuse); + return true; + } + + // new method + public final boolean overclockAndPutValuesIn_EM(long EU, int time) { // TODO revise + if (EU == 0L) { + setPowerFlow(0); + mMaxProgresstime = time; + return true; + } + long tempEUt = Math.max(EU, V[1]); + long tempTier = maxEUinputMax >> 2; + while (tempEUt < tempTier) { + tempEUt <<= 2; + time >>= 1; + EU = time == 0 ? EU >> 1 : EU << 2; // U know, if the time is less than 1 tick make the machine use less + // power + } + if (EU > Integer.MAX_VALUE || EU < Integer.MIN_VALUE) { + setPowerFlow(Integer.MAX_VALUE - 1); + mMaxProgresstime = Integer.MAX_VALUE - 1; + return false; + } + setPowerFlow(EU); + mMaxProgresstime = time == 0 ? 1 : time; + return true; + } // Use in EM check recipe return statement if you want overclocking + + /** + * Use {@link #getMaxInputVoltage()} + */ + @Deprecated + public final long getMaxInputVoltageSum() { + return getMaxInputVoltage(); + } + + /** + * Use {@link #getMaxInputEu()} + */ + @Deprecated + public final long getMaxInputEnergy() { + return getMaxInputEu(); + } + + /** + * Use {@link #getMaxInputEu()} + */ + @Deprecated + public final long getMaxInputEnergy_EM() { + return getMaxInputEu(); + } + + // new Method + public final int getMaxEnergyInputTier_EM() { + return TTUtility.getTier(maxEUinputMax); + } + + // new Method + public final int getMinEnergyInputTier_EM() { + return TTUtility.getTier(maxEUinputMin); + } + + public final long getMaxAmpereFlowAtMinTierOfEnergyHatches() { + return eAmpereFlow; + } + + @Override + public List getExoticAndNormalEnergyHatchList() { + List list = new ArrayList<>(); + list.addAll(mEnergyHatches); + list.addAll(eEnergyMulti); + return list; + } + + @Override + public List getExoticEnergyHatches() { + List list = new ArrayList<>(); + list.addAll(eEnergyMulti); + return list; + } + + @Override + public boolean explodesOnComponentBreak(ItemStack itemStack) { + return false; + } + + @Override + public final void explodeMultiblock() { + if (explodedThisTick) { + return; + } + explodedThisTick = true; + if (!TecTech.configTecTech.BOOM_ENABLE) { + TecTech.proxy.broadcast( + "Multi Explode BOOM! " + getBaseMetaTileEntity().getXCoord() + + ' ' + + getBaseMetaTileEntity().getYCoord() + + ' ' + + getBaseMetaTileEntity().getZCoord()); + StackTraceElement[] ste = Thread.currentThread() + .getStackTrace(); + TecTech.proxy.broadcast("Multi Explode BOOM! " + ste[2].toString()); + return; + } + extraExplosions_EM(); + Pollution.addPollution(getBaseMetaTileEntity(), 600000); + mInventory[1] = null; + @SuppressWarnings("unchecked") + Iterable allHatches = Iterables.concat( + mInputBusses, + mOutputBusses, + mInputHatches, + mOutputHatches, + mDynamoHatches, + mMufflerHatches, + mEnergyHatches, + mMaintenanceHatches, + eParamHatches, + eEnergyMulti, + eUncertainHatches, + eDynamoMulti, + eInputData, + eOutputData); + for (MetaTileEntity tTileEntity : allHatches) { + if (tTileEntity != null && tTileEntity.getBaseMetaTileEntity() != null) { + tTileEntity.getBaseMetaTileEntity() + .doExplosion(V[9]); + } + } + getBaseMetaTileEntity().doExplosion(V[15]); + } + + @Override + public void doExplosion(long aExplosionPower) { + if (!TecTech.configTecTech.BOOM_ENABLE) { + TecTech.proxy.broadcast( + "Multi DoExplosion BOOM! " + getBaseMetaTileEntity().getXCoord() + + ' ' + + getBaseMetaTileEntity().getYCoord() + + ' ' + + getBaseMetaTileEntity().getZCoord()); + StackTraceElement[] ste = Thread.currentThread() + .getStackTrace(); + TecTech.proxy.broadcast("Multi DoExplosion BOOM! " + ste[2].toString()); + return; + } + explodeMultiblock(); + super.doExplosion(aExplosionPower); + } // Redirecting to explodemultiblock + // endregion + + // region adder methods + @Override + public final boolean addToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatch) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + } + if (aMetaTileEntity instanceof IDualInputHatch) { + return mDualInputHatches.add((IDualInputHatch) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchInput) { + return mInputHatches.add((MTEHatchInput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchInputBus) { + return mInputBusses.add((MTEHatchInputBus) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchOutput) { + return mOutputHatches.add((MTEHatchOutput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchOutputBus) { + return mOutputBusses.add((MTEHatchOutputBus) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchEnergy) { + return mEnergyHatches.add((MTEHatchEnergy) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDynamo) { + return mDynamoHatches.add((MTEHatchDynamo) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchMaintenance) { + return mMaintenanceHatches.add((MTEHatchMaintenance) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchMuffler) { + return mMufflerHatches.add((MTEHatchMuffler) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchParam) { + return eParamHatches.add((MTEHatchParam) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchUncertainty) { + return eUncertainHatches.add((MTEHatchUncertainty) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchEnergyMulti) { + return eEnergyMulti.add((MTEHatchEnergyMulti) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDynamoMulti) { + return eDynamoMulti.add((MTEHatchDynamoMulti) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDataInput) { + return eInputData.add((MTEHatchDataInput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDataOutput) { + return eOutputData.add((MTEHatchDataOutput) aMetaTileEntity); + } + return false; + } + + public final boolean addClassicToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatch) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + } + if (aMetaTileEntity instanceof IDualInputHatch) { + return mDualInputHatches.add((IDualInputHatch) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchInput) { + return mInputHatches.add((MTEHatchInput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchInputBus) { + return mInputBusses.add((MTEHatchInputBus) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchOutput) { + return mOutputHatches.add((MTEHatchOutput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchOutputBus) { + return mOutputBusses.add((MTEHatchOutputBus) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchEnergy) { + return mEnergyHatches.add((MTEHatchEnergy) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDynamo) { + return mDynamoHatches.add((MTEHatchDynamo) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchMaintenance) { + return mMaintenanceHatches.add((MTEHatchMaintenance) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchMuffler) { + return mMufflerHatches.add((MTEHatchMuffler) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchParam) { + return eParamHatches.add((MTEHatchParam) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchUncertainty) { + return eUncertainHatches.add((MTEHatchUncertainty) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchEnergyMulti) { + return eEnergyMulti.add((MTEHatchEnergyMulti) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDynamoMulti) { + return eDynamoMulti.add((MTEHatchDynamoMulti) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDataInput) { + return eInputData.add((MTEHatchDataInput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDataOutput) { + return eOutputData.add((MTEHatchDataOutput) aMetaTileEntity); + } + return false; + } + + public final boolean addElementalToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatch) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + } + + return false; + } + + public final boolean addElementalMufflerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + + return false; + } + + @Override + public final boolean addMufflerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchMuffler) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mMufflerHatches.add((MTEHatchMuffler) aMetaTileEntity); + } + + return false; + } + + @Override + public final boolean addInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof IDualInputHatch) { + ((IDualInputHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mDualInputHatches.add((IDualInputHatch) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInput) aMetaTileEntity).mRecipeMap = getRecipeMap(); + return mInputHatches.add((MTEHatchInput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchInputBus) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + ((MTEHatchInputBus) aMetaTileEntity).mRecipeMap = getRecipeMap(); + return mInputBusses.add((MTEHatchInputBus) aMetaTileEntity); + } + + return false; + } + + @Override + public final boolean addOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchOutput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mOutputHatches.add((MTEHatchOutput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchOutputBus) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mOutputBusses.add((MTEHatchOutputBus) aMetaTileEntity); + } + + return false; + } + + @Deprecated + @Override + public final boolean addEnergyInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchEnergy) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mEnergyHatches.add((MTEHatchEnergy) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchEnergyMulti) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eEnergyMulti.add((MTEHatchEnergyMulti) aMetaTileEntity); + } + return false; + } + + @Deprecated + @Override + public final boolean addDynamoToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchDynamo) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mDynamoHatches.add((MTEHatchDynamo) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDynamoMulti) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eDynamoMulti.add((MTEHatchDynamoMulti) aMetaTileEntity); + } + return false; + } + + // New Method + public final boolean addEnergyIOToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchEnergy) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mEnergyHatches.add((MTEHatchEnergy) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchEnergyMulti) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eEnergyMulti.add((MTEHatchEnergyMulti) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDynamo) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mDynamoHatches.add((MTEHatchDynamo) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDynamoMulti) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eDynamoMulti.add((MTEHatchDynamoMulti) aMetaTileEntity); + } + return false; + } + + // NEW METHOD + public final boolean addElementalInputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + + return false; + } + + // NEW METHOD + public final boolean addElementalOutputToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + + return false; + } + + // NEW METHOD + public final boolean addParametrizerToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchParam) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eParamHatches.add((MTEHatchParam) aMetaTileEntity); + } + return false; + } + + // NEW METHOD + public final boolean addUncertainToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchUncertainty) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eUncertainHatches.add((MTEHatchUncertainty) aMetaTileEntity); + } + return false; + } + + @Override + public final boolean addMaintenanceToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchMaintenance) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mMaintenanceHatches.add((MTEHatchMaintenance) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchParam) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eParamHatches.add((MTEHatchParam) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchUncertainty) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eUncertainHatches.add((MTEHatchUncertainty) aMetaTileEntity); + } + return false; + } + + // NEW METHOD + public final boolean addClassicMaintenanceToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchMaintenance) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return mMaintenanceHatches.add((MTEHatchMaintenance) aMetaTileEntity); + } + return false; + } + + // NEW METHOD + public final boolean addDataConnectorToMachineList(IGregTechTileEntity aTileEntity, int aBaseCasingIndex) { + if (aTileEntity == null) { + return false; + } + IMetaTileEntity aMetaTileEntity = aTileEntity.getMetaTileEntity(); + if (aMetaTileEntity == null) { + return false; + } + if (aMetaTileEntity instanceof MTEHatchDataInput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eInputData.add((MTEHatchDataInput) aMetaTileEntity); + } + if (aMetaTileEntity instanceof MTEHatchDataOutput) { + ((MTEHatch) aMetaTileEntity).updateTexture(aBaseCasingIndex); + return eOutputData.add((MTEHatchDataOutput) aMetaTileEntity); + } + return false; + } + // endregion + + protected static IStructureElement classicHatches(int casingIndex, int dot, + Block casingBlock, int casingMeta) { + return HatchElementBuilder.builder() + .atLeast( + InputBus, + InputHatch, + OutputHatch, + OutputBus, + Maintenance, + Muffler, + HatchElement.EnergyMulti, + HatchElement.DynamoMulti, + HatchElement.InputData, + HatchElement.OutputData, + HatchElement.Uncertainty) + .casingIndex(casingIndex) + .dot(dot) + .buildAndChain(casingBlock, casingMeta); + } + + protected static IStructureElement allHatches(int casingIndex, int dot, + Block casingBlock, int casingMeta) { + return HatchElementBuilder.builder() + .atLeast( + InputBus, + InputHatch, + OutputHatch, + OutputBus, + Maintenance, + Muffler, + HatchElement.EnergyMulti, + HatchElement.DynamoMulti, + HatchElement.InputData, + HatchElement.OutputData, + HatchElement.Uncertainty) + .casingIndex(casingIndex) + .dot(dot) + .buildAndChain(casingBlock, casingMeta); + } + + public enum HatchElement implements IHatchElement { + + Param(TTMultiblockBase::addParametrizerToMachineList, MTEHatchParam.class) { + + @Override + public long count(TTMultiblockBase t) { + return t.eParamHatches.size(); + } + }, + Uncertainty(TTMultiblockBase::addUncertainToMachineList, MTEHatchUncertainty.class) { + + @Override + public long count(TTMultiblockBase t) { + return t.eUncertainHatches.size(); + } + }, + EnergyMulti(TTMultiblockBase::addEnergyInputToMachineList, MTEHatchEnergyMulti.class) { + + @Override + public long count(TTMultiblockBase t) { + return t.eEnergyMulti.size(); + } + }, + DynamoMulti(TTMultiblockBase::addDynamoToMachineList, MTEHatchDynamoMulti.class) { + + @Override + public long count(TTMultiblockBase t) { + return t.eDynamoMulti.size(); + } + }, + InputData(TTMultiblockBase::addDataConnectorToMachineList, MTEHatchDataInput.class) { + + @Override + public long count(TTMultiblockBase t) { + return t.eInputData.size(); + } + }, + OutputData(TTMultiblockBase::addDataConnectorToMachineList, MTEHatchDataOutput.class) { + + @Override + public long count(TTMultiblockBase t) { + return t.eOutputData.size(); + } + },; + + private final List> mteClasses; + private final IGTHatchAdder adder; + + @SafeVarargs + HatchElement(IGTHatchAdder adder, Class... mteClasses) { + this.mteClasses = Collections.unmodifiableList(Arrays.asList(mteClasses)); + this.adder = adder; + } + + @Override + public List> mteClasses() { + return mteClasses; + } + + public IGTHatchAdder adder() { + return adder; + } + } + + /** + * Check if the computation timeout is still active + * + * @return True if the timeout is still active or false if the machine should fail + */ + protected boolean checkComputationTimeout() { + if (eComputationTimeout > 0) { + return --eComputationTimeout > 0; + } + return false; + } + + // region ModularUI + + @Override + public int getGUIWidth() { + return 198; + } + + @Override + public int getGUIHeight() { + return 192; + } + + @Override + public void bindPlayerInventoryUI(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.bindPlayerInventory(buildContext.getPlayer(), new Pos2d(7, 109), getGUITextureSet().getItemSlot()); + } + + public boolean isPowerPassButtonEnabled() { + return true; + } + + public boolean isSafeVoidButtonEnabled() { + return true; + } + + public boolean isAllowedToWorkButtonEnabled() { + return true; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_TECTECH_LOGO_DARK) + .setSize(18, 18) + .setPos(173, 74)); + } + + private static byte LEDCounter = 0; + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + if (doesBindPlayerInventory()) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE) + .setPos(4, 4) + .setSize(190, 91)); + } else { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.BACKGROUND_SCREEN_BLUE_NO_INVENTORY) + .setPos(4, 4) + .setSize(190, 171)); + } + final SlotWidget inventorySlot = new SlotWidget(new BaseSlot(inventoryHandler, 1) { + + @Override + public int getSlotStackLimit() { + return getInventoryStackLimit(); + } + }); + if (doesBindPlayerInventory()) { + builder + .widget( + inventorySlot.setBackground(getGUITextureSet().getItemSlot(), TecTechUITextures.OVERLAY_SLOT_MESH) + .setPos(173, 167)) + .widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_HEAT_SINK_SMALL) + .setPos(173, 185) + .setSize(18, 6)); + } + + final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); + drawTexts(screenElements, inventorySlot); + builder.widget(screenElements.setPos(7, 8)); + + Widget powerPassButton = createPowerPassButton(); + builder.widget(powerPassButton) + .widget(new FakeSyncWidget.BooleanSyncer(() -> ePowerPass, val -> ePowerPass = val)) + .widget(new FakeSyncWidget.BooleanSyncer(() -> ePowerPassCover, val -> ePowerPassCover = val)); + Widget safeVoidButton = createSafeVoidButton(); + builder.widget(safeVoidButton) + .widget(new FakeSyncWidget.BooleanSyncer(() -> eSafeVoid, val -> eSafeVoid = val)); + Widget powerSwitchButton = createPowerSwitchButton(); + builder.widget(powerSwitchButton) + .widget(new FakeSyncWidget.BooleanSyncer(() -> getBaseMetaTileEntity().isAllowedToWork(), val -> { + if (val) getBaseMetaTileEntity().enableWorking(); + else getBaseMetaTileEntity().disableWorking(); + })); + + builder.widget(new DrawableWidget() { + + @Override + public void draw(float partialTicks) { + super.draw(partialTicks); + LEDCounter = (byte) ((1 + LEDCounter) % 6); + } + }.setDrawable(TecTechUITextures.PICTURE_PARAMETER_BLANK) + .setPos(5, doesBindPlayerInventory() ? 96 : 176) + .setSize(166, 12)); + for (int hatch = 0; hatch < 10; hatch++) { + for (int param = 0; param < 2; param++) { + int ledID = hatch + param * 10; + buildContext + .addSyncedWindow(LED_WINDOW_BASE_ID + ledID, (player) -> createLEDConfigurationWindow(ledID)); + addParameterLED(builder, hatch, param, true); + addParameterLED(builder, hatch, param, false); + } + } + + if (doesBindPlayerInventory()) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_UNCERTAINTY_MONITOR_MULTIMACHINE) + .setPos(173, 96) + .setSize(18, 18)); + for (int i = 0; i < 9; i++) { + final int index = i; + builder.widget(new DrawableWidget().setDrawable(() -> { + UITexture valid = TecTechUITextures.PICTURE_UNCERTAINTY_VALID[index]; + UITexture invalid = TecTechUITextures.PICTURE_UNCERTAINTY_INVALID[index]; + switch (eCertainMode) { + case 1: // ooo oxo ooo + if (index == 4) return eCertainStatus == 0 ? valid : invalid; + break; + case 2: // ooo xox ooo + if (index == 3) return (eCertainStatus & 1) == 0 ? valid : invalid; + if (index == 5) return (eCertainStatus & 2) == 0 ? valid : invalid; + break; + case 3: // oxo xox oxo + if (index == 1) return (eCertainStatus & 1) == 0 ? valid : invalid; + if (index == 3) return (eCertainStatus & 2) == 0 ? valid : invalid; + if (index == 5) return (eCertainStatus & 4) == 0 ? valid : invalid; + if (index == 7) return (eCertainStatus & 8) == 0 ? valid : invalid; + break; + case 4: // xox ooo xox + if (index == 0) return (eCertainStatus & 1) == 0 ? valid : invalid; + if (index == 2) return (eCertainStatus & 2) == 0 ? valid : invalid; + if (index == 6) return (eCertainStatus & 4) == 0 ? valid : invalid; + if (index == 8) return (eCertainStatus & 8) == 0 ? valid : invalid; + break; + case 5: // xox oxo xox + if (index == 0) return (eCertainStatus & 1) == 0 ? valid : invalid; + if (index == 2) return (eCertainStatus & 2) == 0 ? valid : invalid; + if (index == 4) return (eCertainStatus & 4) == 0 ? valid : invalid; + if (index == 6) return (eCertainStatus & 8) == 0 ? valid : invalid; + if (index == 8) return (eCertainStatus & 16) == 0 ? valid : invalid; + break; + } + return null; + }) + .setPos(174 + (index % 3) * 6, 97 + (index / 3) * 6) + .setSize(4, 4)); + } + builder.widget(new FakeSyncWidget.ByteSyncer(() -> eCertainMode, val -> eCertainMode = val)) + .widget(new FakeSyncWidget.ByteSyncer(() -> eCertainStatus, val -> eCertainStatus = val)); + } + } + + protected ButtonWidget createPowerPassButton() { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (isPowerPassButtonEnabled() || ePowerPassCover) { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + ePowerPass = !ePowerPass; + if (!isAllowedToWorkButtonEnabled()) { // TRANSFORMER HACK + if (ePowerPass) { + getBaseMetaTileEntity().enableWorking(); + } else { + getBaseMetaTileEntity().disableWorking(); + } + } + } + }) + .setPlayClickSound(false) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); + if (!isPowerPassButtonEnabled() && !ePowerPassCover) { + ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_DISABLED); + } else { + if (ePowerPass) { + ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_ON); + } else { + ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_OFF); + } + } + return ret.toArray(new IDrawable[0]); + }) + .setPos(174, doesBindPlayerInventory() ? 116 : 140) + .setSize(16, 16); + if (isPowerPassButtonEnabled()) { + button.addTooltip("Power Pass") + .setTooltipShowUpDelay(TOOLTIP_DELAY); + } + return (ButtonWidget) button; + } + + protected ButtonWidget createSafeVoidButton() { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (isSafeVoidButtonEnabled()) { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + eSafeVoid = !eSafeVoid; + } + }) + .setPlayClickSound(false) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); + if (!isSafeVoidButtonEnabled()) { + ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_DISABLED); + } else { + if (eSafeVoid) { + ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_ON); + } else { + ret.add(TecTechUITextures.OVERLAY_BUTTON_SAFE_VOID_OFF); + } + } + return ret.toArray(new IDrawable[0]); + }) + .setPos(174, doesBindPlayerInventory() ? 132 : 156) + .setSize(16, 16); + if (isSafeVoidButtonEnabled()) { + button.addTooltip("Safe Void") + .setTooltipShowUpDelay(TOOLTIP_DELAY); + } + return (ButtonWidget) button; + } + + protected ButtonWidget createPowerSwitchButton() { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (isAllowedToWorkButtonEnabled()) { + TecTech.proxy.playSound(getBaseMetaTileEntity(), "fx_click"); + if (getBaseMetaTileEntity().isAllowedToWork()) { + getBaseMetaTileEntity().disableWorking(); + } else { + getBaseMetaTileEntity().enableWorking(); + } + } + }) + .setPlayClickSound(false) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(TecTechUITextures.BUTTON_STANDARD_16x16); + if (!isAllowedToWorkButtonEnabled()) { + ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_DISABLED); + } else { + if (getBaseMetaTileEntity().isAllowedToWork()) { + ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON); + } else { + ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF); + } + } + return ret.toArray(new IDrawable[0]); + }) + .setPos(174, doesBindPlayerInventory() ? 148 : 172) + .setSize(16, 16); + if (isAllowedToWorkButtonEnabled()) { + button.addTooltip("Power Switch") + .setTooltipShowUpDelay(TOOLTIP_DELAY); + } + return (ButtonWidget) button; + } + + private ModularWindow createLEDConfigurationWindow(int ledID) { + return ModularWindow.builder(100, 40) + .setBackground(TecTechUITextures.BACKGROUND_SCREEN_BLUE) + .setPos( + (screenSize, mainWindow) -> new Pos2d( + (screenSize.width / 2 - mainWindow.getSize().width / 2) - 110, + (screenSize.height / 2 - mainWindow.getSize().height / 2))) + .widget( + ButtonWidget.closeWindowButton(true) + .setPos(85, 3)) + .widget( + new NumericWidget().setGetter(() -> parametrization.iParamsIn[ledID]) + .setSetter(val -> parametrization.iParamsIn[ledID] = val) + .setIntegerOnly(false) + .modifyNumberFormat(format -> format.setMaximumFractionDigits(8)) + .setTextColor(Color.LIGHT_BLUE.normal) + .setTextAlignment(Alignment.CenterLeft) + .setFocusOnGuiOpen(true) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .setPos(5, 20) + .setSize(90, 15)) + .widget( + new TextWidget((ledID % 10) + ":" + (ledID / 10) + ":I").setDefaultColor(Color.WHITE.normal) + .setTextAlignment(Alignment.Center) + .setPos(5, 5)) + .build(); + } + + private void addParameterLED(ModularWindow.Builder builder, int hatch, int param, boolean input) { + final int parameterIndex = hatch + param * 10; + final int posIndex = hatch * 2 + param; + ButtonWidget ledWidget = new ButtonWidget() { + + @Override + public void draw(float partialTicks) { + IDrawable texture = null; + final LedStatus status = input ? parametrization.eParamsInStatus[parameterIndex] + : parametrization.eParamsOutStatus[parameterIndex]; + switch (status) { + case STATUS_WTF: { + int c = LEDCounter; + if (c > 4) { + c = TecTech.RANDOM.nextInt(5); + } + switch (c) { + case 0: + texture = TecTechUITextures.PICTURE_PARAMETER_BLUE[posIndex]; + break; + case 1: + texture = TecTechUITextures.PICTURE_PARAMETER_CYAN[posIndex]; + break; + case 2: + texture = TecTechUITextures.PICTURE_PARAMETER_GREEN[posIndex]; + break; + case 3: + texture = TecTechUITextures.PICTURE_PARAMETER_ORANGE[posIndex]; + break; + case 4: + texture = TecTechUITextures.PICTURE_PARAMETER_RED[posIndex]; + break; + } + break; + } + case STATUS_WRONG: // fallthrough + if (LEDCounter < 2) { + texture = TecTechUITextures.PICTURE_PARAMETER_BLUE[posIndex]; + break; + } else if (LEDCounter < 4) { + texture = TecTechUITextures.PICTURE_PARAMETER_RED[posIndex]; + break; + } + case STATUS_OK: // ok + texture = TecTechUITextures.PICTURE_PARAMETER_GREEN[posIndex]; + break; + case STATUS_TOO_LOW: // too low blink + if (LEDCounter < 3) { + texture = TecTechUITextures.PICTURE_PARAMETER_BLUE[posIndex]; + break; + } + case STATUS_LOW: // too low + texture = TecTechUITextures.PICTURE_PARAMETER_CYAN[posIndex]; + break; + case STATUS_TOO_HIGH: // too high blink + if (LEDCounter < 3) { + texture = TecTechUITextures.PICTURE_PARAMETER_RED[posIndex]; + break; + } + case STATUS_HIGH: // too high + texture = TecTechUITextures.PICTURE_PARAMETER_ORANGE[posIndex]; + break; + case STATUS_NEUTRAL: + if (LEDCounter < 3) { + GL11.glColor4f(.85f, .9f, .95f, .5F); + } else { + GL11.glColor4f(.8f, .9f, 1f, .5F); + } + texture = TecTechUITextures.PICTURE_PARAMETER_GRAY; + break; + case STATUS_UNDEFINED: + if (LEDCounter < 3) { + GL11.glColor4f(.5f, .1f, .15f, .5F); + } else { + GL11.glColor4f(0f, .1f, .2f, .5F); + } + texture = TecTechUITextures.PICTURE_PARAMETER_GRAY; + break; + case STATUS_UNUSED: + default: + // no-op + break; + } + setBackground(texture); + super.draw(partialTicks); + GL11.glColor4f(1f, 1f, 1f, 1f); + } + }.setOnClick((clickData, widget) -> { + if (!widget.isClient() && input + && parametrization.eParamsInStatus[parameterIndex] != LedStatus.STATUS_UNUSED) { + // We don't use CloseAllButMain here in case MB implementation adds their own window + for (int i = 0; i < parametrization.eParamsInStatus.length; i++) { + if (widget.getContext() + .isWindowOpen(LED_WINDOW_BASE_ID + i)) { + widget.getContext() + .closeWindow(LED_WINDOW_BASE_ID + i); + } + } + widget.getContext() + .openSyncedWindow(LED_WINDOW_BASE_ID + parameterIndex); + } + }); + builder.widget(ledWidget.dynamicTooltip(() -> { + if (input) { + return getFullLedDescriptionIn(hatch, param); + } else { + return getFullLedDescriptionOut(hatch, param); + } + }) + .setPos(12 + posIndex * 8, (doesBindPlayerInventory() ? 97 : 177) + (input ? 0 : 1) * 6) + .setSize(6, 4)); + if (input) { + builder + .widget( + new FakeSyncWidget.ByteSyncer( + () -> parametrization.eParamsInStatus[parameterIndex].getOrdinalByte(), + val -> parametrization.eParamsInStatus[parameterIndex] = LedStatus.getStatus(val)) + .setOnClientUpdate(val -> ledWidget.notifyTooltipChange())) + .widget( + new FakeSyncWidget.DoubleSyncer( + () -> parametrization.iParamsIn[parameterIndex], + val -> parametrization.iParamsIn[parameterIndex] = val) + .setOnClientUpdate(val -> ledWidget.notifyTooltipChange())); + } else { + builder + .widget( + new FakeSyncWidget.ByteSyncer( + () -> parametrization.eParamsOutStatus[parameterIndex].getOrdinalByte(), + val -> parametrization.eParamsOutStatus[parameterIndex] = LedStatus.getStatus(val)) + .setOnClientUpdate(val -> ledWidget.notifyTooltipChange())) + .widget( + new FakeSyncWidget.DoubleSyncer( + () -> parametrization.iParamsOut[parameterIndex], + val -> parametrization.iParamsOut[parameterIndex] = val) + .setOnClientUpdate(val -> ledWidget.notifyTooltipChange())); + } + } + + // endregion +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/base/render/TTRenderedExtendedFacingTexture.java b/src/main/java/tectech/thing/metaTileEntity/multi/base/render/TTRenderedExtendedFacingTexture.java new file mode 100644 index 0000000000..8d41fcb0ff --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/base/render/TTRenderedExtendedFacingTexture.java @@ -0,0 +1,25 @@ +package tectech.thing.metaTileEntity.multi.base.render; + +import gregtech.api.enums.Dyes; +import gregtech.api.interfaces.IIconContainer; +import gregtech.common.render.GTRenderedTexture; + +public class TTRenderedExtendedFacingTexture extends GTRenderedTexture { + + public TTRenderedExtendedFacingTexture(IIconContainer aIcon, short[] aRGBa, boolean allowAlpha, boolean glow, + boolean stdOrient, boolean extFacing) { + super(aIcon, aRGBa, allowAlpha, glow, stdOrient, extFacing); + } + + public TTRenderedExtendedFacingTexture(IIconContainer aIcon, short[] aRGBa, boolean aAllowAlpha) { + this(aIcon, aRGBa, aAllowAlpha, false, false, true); + } + + public TTRenderedExtendedFacingTexture(IIconContainer aIcon, short[] aRGBa) { + this(aIcon, aRGBa, true); + } + + public TTRenderedExtendedFacingTexture(IIconContainer aIcon) { + this(aIcon, Dyes._NULL.mRGBa); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java new file mode 100644 index 0000000000..be81bad80e --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEBaseModule.java @@ -0,0 +1,510 @@ +package tectech.thing.metaTileEntity.multi.godforge_modules; + +import static com.gtnewhorizon.structurelib.structure.StructureUtility.ofBlock; +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static gregtech.common.misc.WirelessNetworkManager.processInitialSettings; +import static net.minecraft.util.StatCollector.translateToLocal; +import static tectech.thing.casing.TTCasingsContainer.GodforgeCasings; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.structure.IStructureDefinition; +import com.gtnewhorizon.structurelib.structure.StructureDefinition; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.Text; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.math.Size; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.DynamicPositionedColumn; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.SlotWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.GregTechAPI; +import gregtech.api.enums.GTValues; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.render.TextureFactory; +import gregtech.api.util.GTStructureUtility; +import tectech.thing.gui.TecTechUITextures; +import tectech.thing.metaTileEntity.multi.base.TTMultiblockBase; + +public class MTEBaseModule extends TTMultiblockBase { + + protected final int tier = getTier(); + protected boolean isConnected = false; + protected double overclockTimeFactor = 2d; + protected boolean isUpgrade83Unlocked = false; + protected boolean isMultiStepPlasmaCapable = false; + protected boolean isMagmatterCapable = false; + private boolean isVoltageConfigUnlocked = false; + protected UUID userUUID; + protected int machineHeat = 0; + protected int overclockHeat = 0; + protected int maximumParallel = 0; + protected int plasmaTier = 0; + protected float processingSpeedBonus = 0; + protected float energyDiscount = 0; + protected long processingVoltage = 2_000_000_000; + protected BigInteger powerTally = BigInteger.ZERO; + protected long recipeTally = 0; + private static Textures.BlockIcons.CustomIcon ScreenON; + private static Textures.BlockIcons.CustomIcon ScreenOFF; + + private static final String STRUCTURE_PIECE_MAIN = "main"; + private static final int VOLTAGE_WINDOW_ID = 9; + private static final int TEXTURE_INDEX = 960; + protected static final String TOOLTIP_BAR = EnumChatFormatting.AQUA + + "--------------------------------------------------------------------------"; + + public MTEBaseModule(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEBaseModule(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBaseModule(mName); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && isConnected) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (mEfficiency < 0) mEfficiency = 0; + } + } + + @Override + public RecipeMap getRecipeMap() { + return RecipeMaps.blastFurnaceRecipes; + } + + @Override + public boolean drainEnergyInput(long EUtEffective, long Amperes) { + long EU_drain = EUtEffective * Amperes; + if (EU_drain == 0L) { + return true; + } else { + if (EU_drain > 0L) { + EU_drain = -EU_drain; + } + return addEUToGlobalEnergyMap(userUUID, EU_drain); + } + } + + public void connect() { + isConnected = true; + } + + public void disconnect() { + isConnected = false; + } + + public void setHeat(int heat) { + machineHeat = heat; + } + + public int getHeat() { + return machineHeat; + } + + public void setHeatForOC(int heat) { + overclockHeat = heat; + } + + public int getHeatForOC() { + return overclockHeat; + } + + public void setMaxParallel(int parallel) { + maximumParallel = parallel; + } + + public int getMaxParallel() { + return maximumParallel; + } + + public void setSpeedBonus(float bonus) { + processingSpeedBonus = bonus; + } + + public float getSpeedBonus() { + return processingSpeedBonus; + } + + public void setEnergyDiscount(float discount) { + energyDiscount = discount; + } + + public float getEnergyDiscount() { + return energyDiscount; + } + + public void setUpgrade83(boolean unlocked) { + isUpgrade83Unlocked = unlocked; + } + + public void setOverclockTimeFactor(double factor) { + overclockTimeFactor = factor; + } + + public double getOverclockTimeFactor() { + return overclockTimeFactor; + } + + public void setMultiStepPlasma(boolean isCapable) { + isMultiStepPlasmaCapable = isCapable; + } + + public void setProcessingVoltage(long Voltage) { + processingVoltage = Voltage; + } + + public long getProcessingVoltage() { + return processingVoltage; + } + + public void setMagmatterCapable(boolean isCapable) { + isMagmatterCapable = isCapable; + } + + public float getHeatEnergyDiscount() { + return isUpgrade83Unlocked ? 0.92f : 0.95f; + } + + public void setPlasmaTier(int tier) { + plasmaTier = tier; + } + + public int getPlasmaTier() { + return plasmaTier; + } + + public void setVoltageConfig(boolean unlocked) { + isVoltageConfigUnlocked = unlocked; + } + + public void setPowerTally(BigInteger amount) { + powerTally = amount; + } + + public BigInteger getPowerTally() { + return powerTally; + } + + public void addToPowerTally(BigInteger amount) { + powerTally = powerTally.add(amount); + } + + public void setRecipeTally(long amount) { + recipeTally = amount; + } + + public long getRecipeTally() { + return recipeTally; + } + + public void addToRecipeTally(long amount) { + recipeTally += amount; + } + + public int getTier() { + return tier; + } + + @Override + public long getMaxInputVoltage() { + return GTValues.V[tier]; + } + + @Override + public IStructureDefinition getStructure_EM() { + if (this instanceof MTESmeltingModule) { + return getStructureDefinition(GregTechAPI.sBlockCasings5, 12); + } + return getStructureDefinition(GodforgeCasings, 8); + } + + @Override + public void construct(ItemStack stackSize, boolean hintsOnly) { + structureBuild_EM(STRUCTURE_PIECE_MAIN, 3, 3, 0, stackSize, hintsOnly); + } + + @Override + public boolean checkMachine_EM(IGregTechTileEntity aBaseMetaTileEntity, ItemStack aStack) { + return structureCheck_EM(STRUCTURE_PIECE_MAIN, 3, 3, 0); + } + + @Override + public void onPreTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPreTick(aBaseMetaTileEntity, aTick); + + if (aBaseMetaTileEntity.isServerSide() && (aTick == 1)) { + userUUID = processInitialSettings(aBaseMetaTileEntity); + } + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setPos(4, 4) + .setSize(190, 85)); + final SlotWidget inventorySlot = new SlotWidget(inventoryHandler, 1); + builder.widget( + inventorySlot.setPos(173, 167) + .setBackground(GTUITextures.SLOT_DARK_GRAY)); + + final DynamicPositionedColumn screenElements = new DynamicPositionedColumn(); + drawTexts(screenElements, inventorySlot); + builder.widget(screenElements); + + buildContext.addSyncedWindow(VOLTAGE_WINDOW_ID, this::createVoltageWindow); + + builder.widget( + TextWidget.dynamicText(this::connectionStatus) + .setDefaultColor(EnumChatFormatting.BLACK) + .setPos(75, 94) + .setSize(100, 10)); + + builder.widget(createPowerSwitchButton(builder)) + .widget(createVoidExcessButton(builder)) + .widget(createInputSeparationButton(builder)) + .widget(createBatchModeButton(builder)) + .widget(createLockToSingleRecipeButton(builder)) + .widget(createVoltageButton(builder)) + .widget(createStructureUpdateButton(builder)); + } + + protected Widget createVoltageButton(IWidgetBuilder builder) { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (isVoltageConfigUnlocked) { + if (!widget.isClient()) { + widget.getContext() + .openSyncedWindow(VOLTAGE_WINDOW_ID); + } + } + }) + .setPlayClickSound(isVoltageConfigUnlocked) + .setBackground(() -> { + List ret = new ArrayList<>(); + ret.add(GTUITextures.BUTTON_STANDARD); + if (isVoltageConfigUnlocked) { + ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_ON); + } else { + ret.add(TecTechUITextures.OVERLAY_BUTTON_POWER_PASS_DISABLED); + } + return ret.toArray(new IDrawable[0]); + }) + .addTooltip(translateToLocal("fog.button.voltageconfig.tooltip.01")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(174, 112) + .setSize(16, 16) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> isVoltageConfigUnlocked, val -> isVoltageConfigUnlocked = val), + builder); + if (!isVoltageConfigUnlocked) { + button.addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.voltageconfig.tooltip.02")); + } + return button; + } + + protected ModularWindow createVoltageWindow(final EntityPlayer player) { + final int WIDTH = 158; + final int HEIGHT = 52; + final int PARENT_WIDTH = getGUIWidth(); + final int PARENT_HEIGHT = getGUIHeight(); + ModularWindow.Builder builder = ModularWindow.builder(WIDTH, HEIGHT); + builder.setBackground(GTUITextures.BACKGROUND_SINGLEBLOCK_DEFAULT); + builder.setGuiTint(getGUIColorization()); + builder.setDraggable(true); + builder.setPos( + (size, window) -> Alignment.Center.getAlignedPos(size, new Size(PARENT_WIDTH, PARENT_HEIGHT)) + .add( + Alignment.BottomRight.getAlignedPos(new Size(PARENT_WIDTH, PARENT_HEIGHT), new Size(WIDTH, HEIGHT)) + .add(WIDTH - 3, 0) + .subtract(0, 10))); + builder.widget( + TextWidget.localised("gt.blockmachines.multimachine.FOG.voltageinfo") + .setPos(3, 4) + .setSize(150, 20)) + .widget( + new NumericWidget().setSetter(val -> processingVoltage = (long) val) + .setGetter(() -> processingVoltage) + .setBounds(2_000_000_000, Long.MAX_VALUE) + .setDefaultValue(2_000_000_000) + .setScrollValues(1, 4, 64) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setSize(150, 18) + .setPos(4, 25) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD) + .attachSyncer( + new FakeSyncWidget.LongSyncer(this::getProcessingVoltage, this::setProcessingVoltage), + builder)); + return builder.build(); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(TecTechUITextures.PICTURE_GODFORGE_LOGO) + .setSize(18, 18) + .setPos(172, 67)); + } + + @Override + public boolean supportsInputSeparation() { + return true; + } + + @Override + public boolean supportsBatchMode() { + return true; + } + + @Override + public boolean supportsVoidProtection() { + return true; + } + + @Override + public boolean supportsSingleRecipeLocking() { + return true; + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public boolean willExplodeInRain() { + return false; + } + + private static IStructureDefinition getStructureDefinition(Block coilBlock, int meta) { + return StructureDefinition.builder() + .addShape( + STRUCTURE_PIECE_MAIN, + new String[][] { { " ", " BBB ", " BBBBB ", " BB~BB ", " BBBBB ", " BBB ", " " }, + { " CCC ", " CFFFC ", "CFFFFFC", "CFFFFFC", "CFFFFFC", " CFFFC ", " CCC " }, + { " ", " ", " E ", " EAE ", " E ", " ", " " }, + { " ", " ", " E ", " EAE ", " E ", " ", " " }, + { " ", " ", " E ", " EAE ", " E ", " ", " " }, + { " ", " ", " E ", " EAE ", " E ", " ", " " }, + { " ", " ", " E ", " EAE ", " E ", " ", " " }, + { " ", " ", " ", " D ", " ", " ", " " }, + { " ", " ", " ", " D ", " ", " ", " " }, + { " ", " ", " ", " D ", " ", " ", " " }, + { " ", " ", " ", " D ", " ", " ", " " }, + { " ", " ", " ", " D ", " ", " ", " " }, + { " ", " ", " ", " G ", " ", " ", " " } }) + .addElement('A', ofBlock(coilBlock, meta)) + .addElement( + 'B', + GTStructureUtility + .ofHatchAdderOptional(MTEBaseModule::addClassicToMachineList, TEXTURE_INDEX, 1, GodforgeCasings, 0)) + .addElement('C', ofBlock(GodforgeCasings, 0)) + .addElement('D', ofBlock(GodforgeCasings, 1)) + .addElement('E', ofBlock(GodforgeCasings, 2)) + .addElement('F', ofBlock(GodforgeCasings, 3)) + .addElement('G', ofBlock(GodforgeCasings, 4)) + .build(); + } + + private Text connectionStatus() { + String status = EnumChatFormatting.RED + + translateToLocal("gt.blockmachines.multimachine.FOG.modulestatus.false"); + if (isConnected) { + status = EnumChatFormatting.GREEN + translateToLocal("gt.blockmachines.multimachine.FOG.modulestatus.true"); + } + return new Text(translateToLocal("gt.blockmachines.multimachine.FOG.modulestatus") + " " + status); + } + + @Override + public void saveNBTData(NBTTagCompound NBT) { + NBT.setBoolean("isConnected", isConnected); + NBT.setBoolean("isVoltageConfigUnlocked", isVoltageConfigUnlocked); + NBT.setLong("processingVoltage", processingVoltage); + NBT.setLong("recipeTally", recipeTally); + NBT.setByteArray("powerTally", powerTally.toByteArray()); + super.saveNBTData(NBT); + } + + @Override + public void loadNBTData(final NBTTagCompound NBT) { + isConnected = NBT.getBoolean("isConnected"); + isVoltageConfigUnlocked = NBT.getBoolean("isVoltageConfigUnlocked"); + processingVoltage = NBT.getLong("processingVoltage"); + recipeTally = NBT.getLong("recipeTally"); + powerTally = new BigInteger(NBT.getByteArray("powerTally")); + super.loadNBTData(NBT); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + ScreenON = new Textures.BlockIcons.CustomIcon("iconsets/GODFORGE_MODULE_ACTIVE"); + ScreenOFF = new Textures.BlockIcons.CustomIcon("iconsets/SCREEN_OFF"); + super.registerIcons(aBlockIconRegister); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + if (side == facing) { + if (aActive) return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX), + TextureFactory.builder() + .addIcon(ScreenON) + .extFacing() + .build(), + TextureFactory.builder() + .addIcon(ScreenON) + .extFacing() + .glow() + .build() }; + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX), TextureFactory.builder() + .addIcon(ScreenOFF) + .extFacing() + .build() }; + } + return new ITexture[] { Textures.BlockIcons.getCasingTextureForId(TEXTURE_INDEX) }; + } + + @Override + public boolean getDefaultHasMaintenanceChecks() { + return false; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEExoticModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEExoticModule.java new file mode 100644 index 0000000000..c94549a575 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEExoticModule.java @@ -0,0 +1,547 @@ +package tectech.thing.metaTileEntity.multi.godforge_modules; + +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTRecipeBuilder.INGOTS; +import static gregtech.api.util.GTRecipeBuilder.SECONDS; +import static gregtech.api.util.GTUtility.formatNumbers; +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static gregtech.common.misc.WirelessNetworkManager.getUserEU; +import static net.minecraft.util.EnumChatFormatting.GREEN; +import static net.minecraft.util.EnumChatFormatting.RED; +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.EnumChatFormatting.YELLOW; +import static net.minecraft.util.StatCollector.translateToLocal; +import static tectech.loader.recipe.Godforge.exoticModuleMagmatterItemMap; +import static tectech.loader.recipe.Godforge.exoticModulePlasmaFluidMap; +import static tectech.loader.recipe.Godforge.exoticModulePlasmaItemMap; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.stream.Stream; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; + +import gregtech.api.enums.MaterialsUEVplus; +import gregtech.api.enums.TierEU; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMapBackend; +import gregtech.api.recipe.RecipeMapBuilder; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import tectech.recipe.TecTechRecipeMaps; +import tectech.util.CommonValues; +import tectech.util.GodforgeMath; + +public class MTEExoticModule extends MTEBaseModule { + + private int numberOfFluids = 0; + private int numberOfItems = 0; + private long wirelessEUt = 0; + private long EUt = 0; + private long actualParallel = 0; + private boolean recipeInProgress = false; + private boolean magmatterMode = false; + private FluidStack[] randomizedFluidInput = new FluidStack[] {}; + private ItemStack[] randomizedItemInput = new ItemStack[] {}; + List inputPlasmas = new ArrayList<>(); + private GTRecipe plasmaRecipe = null; + private static RecipeMap tempRecipeMap = RecipeMapBuilder.of("bye") + .maxIO(0, 0, 7, 2) + .disableRegisterNEI() + .build(); + private static final RecipeMap emptyRecipeMap = RecipeMapBuilder.of("hey") + .maxIO(0, 0, 7, 2) + .disableRegisterNEI() + .build(); + private static final int NUMBER_OF_INPUTS = 7; + + public MTEExoticModule(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEExoticModule(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEExoticModule(mName); + } + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected Stream findRecipeMatches(@Nullable RecipeMap map) { + if (!recipeInProgress) { + actualParallel = getMaxParallel(); + FluidStack outputFluid = MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000 * actualParallel); + tempRecipeMap = emptyRecipeMap; + if (magmatterMode) { + randomizedItemInput = getRandomItemInputs(exoticModuleMagmatterItemMap, 1); + numberOfItems = 1; + numberOfFluids = 2; + int timeAmount = GodforgeMath.getRandomIntInRange(1, 50); + int spaceAmount = GodforgeMath.getRandomIntInRange(51, 100); + randomizedFluidInput = new FluidStack[] { MaterialsUEVplus.Time.getMolten(timeAmount * 1000L), + MaterialsUEVplus.Space.getMolten(spaceAmount * 1000L) }; + inputPlasmas = new ArrayList<>( + Arrays.asList( + convertItemToPlasma(randomizedItemInput, (spaceAmount - timeAmount) * actualParallel))); + inputPlasmas.add(MaterialsUEVplus.Time.getMolten(timeAmount * actualParallel)); + inputPlasmas.add(MaterialsUEVplus.Space.getMolten(spaceAmount * actualParallel)); + outputFluid = MaterialsUEVplus.MagMatter.getMolten(144 * actualParallel); + } else { + numberOfFluids = GodforgeMath.getRandomIntInRange(0, NUMBER_OF_INPUTS); + numberOfItems = NUMBER_OF_INPUTS - numberOfFluids; + randomizedFluidInput = getRandomFluidInputs(exoticModulePlasmaFluidMap, numberOfFluids); + randomizedItemInput = getRandomItemInputs(exoticModulePlasmaItemMap, numberOfItems); + + if (numberOfFluids != 0) { + for (FluidStack fluidStack : randomizedFluidInput) { + fluidStack.amount = 1000 * GodforgeMath.getRandomIntInRange(1, 64); + } + } + + if (numberOfItems != 0) { + for (ItemStack itemStack : randomizedItemInput) { + itemStack.stackSize = GodforgeMath.getRandomIntInRange(1, 64); + } + } + + inputPlasmas = new ArrayList<>( + Arrays.asList(convertItemToPlasma(randomizedItemInput, actualParallel))); + inputPlasmas.addAll(Arrays.asList(convertFluidToPlasma(randomizedFluidInput, actualParallel))); + } + plasmaRecipe = new GTRecipe( + false, + null, + null, + null, + null, + inputPlasmas.toArray(new FluidStack[0]), + new FluidStack[] { outputFluid }, + 10 * SECONDS * (int) actualParallel, + (int) TierEU.RECIPE_MAX, + 0); + + tempRecipeMap.add(plasmaRecipe); + } + return tempRecipeMap.getAllRecipes() + .parallelStream(); + } + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + if (!recipeInProgress) { + maxParallel = 1; + wirelessEUt = (long) recipe.mEUt * maxParallel; + if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) { + tempRecipeMap = emptyRecipeMap; + return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); + } + + if (numberOfFluids != 0) { + for (FluidStack fluidStack : randomizedFluidInput) { + dumpFluid( + mOutputHatches, + new FluidStack( + fluidStack.getFluid(), + (int) (fluidStack.amount / 1000 * actualParallel)), + false); + } + } + + if (numberOfItems != 0) { + long multiplier = actualParallel; + if (magmatterMode) { + multiplier = 1; + } + for (ItemStack itemStack : randomizedItemInput) { + int stacksize = (int) (itemStack.stackSize * multiplier); + ItemStack tmpItem = itemStack.copy(); + // split itemStacks > 64 + while (stacksize >= 64) { + tmpItem.stackSize = 64; + addOutput(tmpItem); + stacksize -= 64; + } + tmpItem.stackSize = stacksize; + addOutput(tmpItem); + + } + } + + recipeInProgress = true; + } + if (new HashSet<>(Arrays.asList(inputFluids)).containsAll(inputPlasmas)) { + return CheckRecipeResultRegistry.SUCCESSFUL; + } + return SimpleCheckRecipeResult.ofFailure("waiting_for_inputs"); + } + + @NotNull + @Override + protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { + wirelessEUt = (long) recipe.mEUt * maxParallel; + if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { + return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); + } + addToPowerTally( + BigInteger.valueOf(calculatedEut) + .multiply(BigInteger.valueOf(duration))); + addToRecipeTally(calculatedParallels); + EUt = calculatedEut; + setCalculatedEut(0); + tempRecipeMap = emptyRecipeMap; + recipeInProgress = false; + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) + .setDurationDecreasePerOC(getOverclockTimeFactor()); + } + + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(Long.MAX_VALUE); + logic.setAvailableAmperage(Integer.MAX_VALUE); + logic.setAmperageOC(false); + logic.setSpeedBonus(getSpeedBonus()); + logic.setEuModifier(getEnergyDiscount()); + } + + @Override + public RecipeMap getRecipeMap() { + return TecTechRecipeMaps.godforgeExoticMatterRecipes; + } + + private FluidStack[] getRandomFluidInputs(HashMap fluidMap, int numberOfFluids) { + int cumulativeWeight = 0; + + List> fluidEntryList = new ArrayList<>(fluidMap.entrySet()); + + List cumulativeWeights = new ArrayList<>(); + for (Map.Entry entry : fluidEntryList) { + cumulativeWeight += entry.getValue(); + cumulativeWeights.add(cumulativeWeight); + } + + List pickedFluids = new ArrayList<>(); + for (int i = 0; i < numberOfFluids; i++) { + int randomWeight = GodforgeMath.getRandomIntInRange(1, cumulativeWeight); + // Find the corresponding FluidStack based on randomWeight + for (int j = 0; j < cumulativeWeights.size(); j++) { + if (randomWeight <= cumulativeWeights.get(j)) { + FluidStack pickedFluid = fluidEntryList.get(j) + .getKey(); + // prevent duplicates + if (pickedFluids.contains(pickedFluid)) { + i--; + break; + } + pickedFluids.add(pickedFluid); + break; + } + } + } + + return pickedFluids.toArray(new FluidStack[0]); + + } + + private ItemStack[] getRandomItemInputs(HashMap itemMap, int numberOfItems) { + int cumulativeWeight = 0; + + List> itemEntryList = new ArrayList<>(itemMap.entrySet()); + + List cumulativeWeights = new ArrayList<>(); + for (Map.Entry entry : itemEntryList) { + cumulativeWeight += entry.getValue(); + cumulativeWeights.add(cumulativeWeight); + } + + List pickedItems = new ArrayList<>(); + for (int i = 0; i < numberOfItems; i++) { + int randomWeight = GodforgeMath.getRandomIntInRange(1, cumulativeWeight); + // Find the corresponding ItemStack based on randomWeight + for (int j = 0; j < cumulativeWeights.size(); j++) { + if (randomWeight <= cumulativeWeights.get(j)) { + ItemStack pickedItem = itemEntryList.get(j) + .getKey(); + // prevent duplicates + if (pickedItems.contains(pickedItem)) { + i--; + break; + } + pickedItems.add(pickedItem); + break; + } + } + } + return pickedItems.toArray(new ItemStack[0]); + + } + + private FluidStack[] convertItemToPlasma(ItemStack[] items, long multiplier) { + List plasmas = new ArrayList<>(); + + for (ItemStack itemStack : items) { + String dict = OreDictionary.getOreName(OreDictionary.getOreIDs(itemStack)[0]); + // substring 8 because dustTiny is 8 characters long and there is no other possible oreDict + String strippedOreDict = dict.substring(8); + plasmas.add( + FluidRegistry.getFluidStack( + "plasma." + strippedOreDict.toLowerCase(), + (int) (INGOTS * multiplier * itemStack.stackSize))); + } + + return plasmas.toArray(new FluidStack[0]); + } + + private FluidStack[] convertFluidToPlasma(FluidStack[] fluids, long multiplier) { + List plasmas = new ArrayList<>(); + + for (FluidStack fluidStack : fluids) { + String[] fluidName = fluidStack.getUnlocalizedName() + .split("\\."); + plasmas.add( + FluidRegistry.getFluidStack( + "plasma." + fluidName[fluidName.length - 1], + (int) (multiplier * fluidStack.amount))); + } + + return plasmas.toArray(new FluidStack[0]); + } + + @Override + public boolean supportsSingleRecipeLocking() { + return false; + } + + @Override + public boolean supportsBatchMode() { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound NBT) { + + NBT.setBoolean("recipeInProgress", recipeInProgress); + NBT.setBoolean("magmatterMode", magmatterMode); + + // Store damage values/stack sizes of input plasmas + NBTTagCompound fluidStackListNBTTag = new NBTTagCompound(); + fluidStackListNBTTag.setLong("numberOfPlasmas", inputPlasmas.size()); + + int indexFluids = 0; + for (FluidStack fluidStack : inputPlasmas) { + // Save fluid amount to NBT + fluidStackListNBTTag.setLong(indexFluids + "fluidAmount", fluidStack.amount); + + // Save FluidStack to NBT + NBT.setTag(indexFluids + "fluidStack", fluidStack.writeToNBT(new NBTTagCompound())); + + indexFluids++; + } + + NBT.setTag("inputPlasmas", fluidStackListNBTTag); + super.saveNBTData(NBT); + } + + @Override + public void loadNBTData(final NBTTagCompound NBT) { + + recipeInProgress = NBT.getBoolean("recipeInProgress"); + magmatterMode = NBT.getBoolean("magmatterMode"); + + // Load damage values/fluid amounts of input plasmas and convert back to fluids + NBTTagCompound tempFluidTag = NBT.getCompoundTag("inputPlasmas"); + + // Iterate over all stored fluids + for (int indexFluids = 0; indexFluids < tempFluidTag.getLong("numberOfPlasmas"); indexFluids++) { + + // Load fluid amount from NBT + int fluidAmount = tempFluidTag.getInteger(indexFluids + "fluidAmount"); + + // Load FluidStack from NBT + FluidStack fluidStack = FluidStack.loadFluidStackFromNBT(NBT.getCompoundTag(indexFluids + "fluidStack")); + + inputPlasmas.add(new FluidStack(fluidStack, fluidAmount)); + } + FluidStack outputFluid = MaterialsUEVplus.QuarkGluonPlasma.getFluid(1000); + + if (magmatterMode) { + outputFluid = MaterialsUEVplus.MagMatter.getMolten(144); + } + + tempRecipeMap.add( + new GTRecipe( + false, + null, + null, + null, + null, + inputPlasmas.toArray(new FluidStack[0]), + new FluidStack[] { outputFluid }, + 10 * SECONDS, + (int) TierEU.RECIPE_MAX, + 0)); + + super.loadNBTData(NBT); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget(magmatterSwitch(builder)); + + } + + protected ButtonWidget magmatterSwitch(IWidgetBuilder builder) { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> { + if (isMagmatterCapable) { + magmatterMode = !magmatterMode; + } + }) + .setPlayClickSound(isMagmatterCapable) + .setBackground(() -> { + List ret = new ArrayList<>(); + if (isMagmatterModeOn()) { + ret.add(GTUITextures.BUTTON_STANDARD_PRESSED); + if (isMagmatterCapable) { + ret.add(GTUITextures.OVERLAY_BUTTON_CHECKMARK); + } else { + ret.add(GTUITextures.OVERLAY_BUTTON_DISABLE); + } + } else { + ret.add(GTUITextures.BUTTON_STANDARD); + if (isMagmatterCapable) { + ret.add(GTUITextures.OVERLAY_BUTTON_CROSS); + } else { + ret.add(GTUITextures.OVERLAY_BUTTON_DISABLE); + } + } + if (!isMagmatterCapable) { + ret.add(GTUITextures.OVERLAY_BUTTON_DISABLE); + } + return ret.toArray(new IDrawable[0]); + }) + .attachSyncer(new FakeSyncWidget.BooleanSyncer(this::isMagmatterModeOn, this::setMagmatterMode), builder) + .addTooltip(translateToLocal("fog.button.magmattermode.tooltip.01")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(174, 91) + .setSize(16, 16) + .attachSyncer( + new FakeSyncWidget.BooleanSyncer(() -> isMagmatterCapable, this::setMagmatterCapable), + builder); + if (!isMagmatterCapable) { + button.addTooltip(EnumChatFormatting.GRAY + translateToLocal("fog.button.magmattermode.tooltip.02")); + } + return (ButtonWidget) button; + } + + public boolean isMagmatterModeOn() { + return magmatterMode; + } + + private void setMagmatterMode(boolean enabled) { + magmatterMode = enabled; + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Exotic Matter Producer") + .addInfo("Controller block for the Heliofusion Exoticizer, a module of the Godforge.") + .addInfo("Must be part of a Godforge to function.") + .addInfo("Used for ultra high temperature matter degeneration.") + .addInfo(TOOLTIP_BAR) + .addInfo("The fourth and final module of the Godforge, this module breaks apart the very") + .addInfo("building blocks of matter, producing exotic mixtures in the process. Quark-Gluon Plasma") + .addInfo("can be manufactured right away, but production of Magnetic Monopole Matter (Magmatter)") + .addInfo("requires a fully upgraded Godforge.") + .addInfo("This module is specialized towards acquisition of unique materials.") + .addInfo(TOOLTIP_BAR) + .beginStructureBlock(7, 7, 13, false) + .addStructureInfo("The structure is too complex! See schematic for details.") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Singularity Reinforced Stellar Shielding Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Boundless Gravitationally Severed Structure Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Harmonic Phonon Transmission Conduit") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") + .toolTipFinisher(CommonValues.GODFORGE_MARK); + return tt; + } + + @Override + public String[] getInfoData() { + ArrayList str = new ArrayList<>(); + str.add( + "Progress: " + GREEN + + formatNumbers(mProgresstime / 20) + + RESET + + " s / " + + YELLOW + + formatNumbers(mMaxProgresstime / 20) + + RESET + + " s"); + str.add("Currently using: " + RED + formatNumbers(EUt) + RESET + " EU/t"); + str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel())); + str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(getMaxParallel())); + str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus())); + str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount())); + str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor())); + return str.toArray(new String[0]); + } + +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEMoltenModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEMoltenModule.java new file mode 100644 index 0000000000..5cdb0bc95c --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEMoltenModule.java @@ -0,0 +1,244 @@ +package tectech.thing.metaTileEntity.multi.godforge_modules; + +import static gregtech.api.util.GTOreDictUnificator.getAssociation; +import static gregtech.api.util.GTRecipeBuilder.BUCKETS; +import static gregtech.api.util.GTRecipeBuilder.INGOTS; +import static gregtech.api.util.GTUtility.formatNumbers; +import static gregtech.api.util.ParallelHelper.addFluidsLong; +import static gregtech.api.util.ParallelHelper.addItemsLong; +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static gregtech.common.misc.WirelessNetworkManager.getUserEU; +import static net.minecraft.util.EnumChatFormatting.GREEN; +import static net.minecraft.util.EnumChatFormatting.RED; +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.EnumChatFormatting.YELLOW; + +import java.math.BigInteger; +import java.util.ArrayList; + +import javax.annotation.Nonnull; + +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.fluids.FluidRegistry; +import net.minecraftforge.fluids.FluidStack; +import net.minecraftforge.oredict.OreDictionary; + +import org.jetbrains.annotations.NotNull; + +import gregtech.api.enums.Materials; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.objects.ItemData; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import gregtech.api.util.ParallelHelper; +import tectech.util.CommonValues; + +public class MTEMoltenModule extends MTEBaseModule { + + private long EUt = 0; + private int currentParallel = 0; + + public MTEMoltenModule(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEMoltenModule(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEMoltenModule(mName); + } + + long wirelessEUt = 0; + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + private FluidStack[] meltableItems; + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + + if (recipe.mSpecialValue > getHeat()) { + return CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); + } + wirelessEUt = (long) recipe.mEUt * getMaxParallel(); + if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) { + return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); + } + + meltableItems = new FluidStack[recipe.mOutputs.length]; + for (int i = 0; i < recipe.mOutputs.length; i++) { + ItemStack item = recipe.getOutput(i); + if (item == null) { + continue; + } + // if this is null it has to be a gt++ material + ItemData data = getAssociation(item); + Materials mat = data == null ? null : data.mMaterial.mMaterial; + if (mat != null) { + if (mat.mStandardMoltenFluid != null) { + meltableItems[i] = mat.getMolten(INGOTS); + } else if (mat.mFluid != null) { + meltableItems[i] = mat.getFluid(BUCKETS); + } + } else { + String dict = OreDictionary.getOreName(OreDictionary.getOreIDs(item)[0]); + // substring 8 because ingotHot is 8 characters long + String strippedOreDict = dict.substring(8); + meltableItems[i] = FluidRegistry + .getFluidStack("molten." + strippedOreDict.toLowerCase(), INGOTS); + } + } + + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) + .setRecipeHeat(recipe.mSpecialValue) + .setHeatOC(true) + .setHeatDiscount(true) + .setMachineHeat(getHeatForOC()) + .setHeatDiscountMultiplier(getHeatEnergyDiscount()) + .setDurationDecreasePerOC(getOverclockTimeFactor()); + + } + + @NotNull + @Override + protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { + if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { + return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration); + } + addToPowerTally( + BigInteger.valueOf(calculatedEut) + .multiply(BigInteger.valueOf(duration))); + addToRecipeTally(calculatedParallels); + currentParallel = calculatedParallels; + EUt = calculatedEut; + setCalculatedEut(0); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Nonnull + @Override + protected ParallelHelper createParallelHelper(@Nonnull GTRecipe recipe) { + return super.createParallelHelper(recipe).setCustomItemOutputCalculation(currentParallel -> { + ArrayList outputItems = new ArrayList<>(); + for (int i = 0; i < recipe.mOutputs.length; i++) { + ItemStack item = recipe.getOutput(i); + if (item == null || meltableItems[i] != null) { + continue; + } + ItemStack itemToAdd = item.copy(); + addItemsLong(outputItems, itemToAdd, (long) item.stackSize * currentParallel); + } + return outputItems.toArray(new ItemStack[0]); + }) + .setCustomFluidOutputCalculation(currentParallel -> { + ArrayList fluids = new ArrayList<>(); + + for (int i = 0; i < recipe.mOutputs.length; i++) { + FluidStack fluid = meltableItems[i]; + if (fluid == null) { + continue; + } + FluidStack fluidToAdd = fluid.copy(); + long fluidAmount = (long) fluidToAdd.amount * recipe.mOutputs[i].stackSize + * currentParallel; + addFluidsLong(fluids, fluidToAdd, fluidAmount); + } + + for (int i = 0; i < recipe.mFluidOutputs.length; i++) { + FluidStack fluid = recipe.getFluidOutput(i); + if (fluid == null) { + continue; + } + FluidStack fluidToAdd = fluid.copy(); + addFluidsLong(fluids, fluidToAdd, (long) fluidToAdd.amount * currentParallel); + } + return fluids.toArray(new FluidStack[0]); + }); + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(Long.MAX_VALUE); + logic.setAvailableAmperage(Integer.MAX_VALUE); + logic.setAmperageOC(false); + logic.setMaxParallel(getMaxParallel()); + logic.setSpeedBonus(getSpeedBonus()); + logic.setEuModifier(getEnergyDiscount()); + } + + @Override + public String[] getInfoData() { + ArrayList str = new ArrayList<>(); + str.add( + "Progress: " + GREEN + + formatNumbers(mProgresstime / 20) + + RESET + + " s / " + + YELLOW + + formatNumbers(mMaxProgresstime / 20) + + RESET + + " s"); + str.add("Currently using: " + RED + formatNumbers(EUt) + RESET + " EU/t"); + str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel())); + str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel)); + str.add(YELLOW + "Heat Capacity: " + RESET + formatNumbers(getHeat())); + str.add(YELLOW + "Effective Heat Capacity: " + RESET + formatNumbers(getHeatForOC())); + str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus())); + str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount())); + str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor())); + return str.toArray(new String[0]); + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Blast Smelter") + .addInfo("Controller block for the Helioflux Meltig Core, a module of the Godforge.") + .addInfo("Must be part of a Godforge to function.") + .addInfo("Used for high temperature material liquefaction.") + .addInfo(TOOLTIP_BAR) + .addInfo("The second module of the Godforge, this module melts materials directly into") + .addInfo("their liquid form. If an output material does not have a liquid form, it will be output") + .addInfo("as a regular solid instead.") + .addInfo("This module is specialized towards parallel processing.") + .addInfo(TOOLTIP_BAR) + .beginStructureBlock(7, 7, 13, false) + .addStructureInfo("The structure is too complex! See schematic for details.") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Singularity Reinforced Stellar Shielding Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Boundless Gravitationally Severed Structure Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Harmonic Phonon Transmission Conduit") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") + .toolTipFinisher(CommonValues.GODFORGE_MARK); + return tt; + } + +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEPlasmaModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEPlasmaModule.java new file mode 100644 index 0000000000..806f3f7f04 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTEPlasmaModule.java @@ -0,0 +1,245 @@ +package tectech.thing.metaTileEntity.multi.godforge_modules; + +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTUtility.formatNumbers; +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static gregtech.common.misc.WirelessNetworkManager.getUserEU; +import static net.minecraft.util.EnumChatFormatting.GREEN; +import static net.minecraft.util.EnumChatFormatting.RED; +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.EnumChatFormatting.YELLOW; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Objects; + +import javax.annotation.Nonnull; + +import net.minecraft.util.EnumChatFormatting; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.math.Alignment; +import com.gtnewhorizons.modularui.api.math.Color; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.TextFieldWidget; + +import gregtech.api.enums.SoundResource; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.recipe.check.SimpleCheckRecipeResult; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import tectech.recipe.TecTechRecipeMaps; +import tectech.util.CommonValues; + +public class MTEPlasmaModule extends MTEBaseModule { + + private long EUt = 0; + private int currentParallel = 0; + private boolean debug = true; + private int inputMaxParallel = 0; + + public MTEPlasmaModule(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPlasmaModule(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEPlasmaModule(mName); + } + + long wirelessEUt = 0; + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + wirelessEUt = (long) recipe.mEUt * getMaxParallel(); + if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) { + return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); + } + if (recipe.mSpecialValue > getPlasmaTier() + || Objects.equals(recipe.mSpecialItems.toString(), "true") && !isMultiStepPlasmaCapable) { + return SimpleCheckRecipeResult.ofFailure("missing_upgrades"); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { + wirelessEUt = (long) recipe.mEUt * maxParallel; + if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { + return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); + } + addToPowerTally( + BigInteger.valueOf(calculatedEut) + .multiply(BigInteger.valueOf(duration))); + addToRecipeTally(calculatedParallels); + currentParallel = calculatedParallels; + EUt = calculatedEut; + setCalculatedEut(0); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) + .setDurationDecreasePerOC(getOverclockTimeFactor()); + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(Long.MAX_VALUE); + logic.setAvailableAmperage(Integer.MAX_VALUE); + logic.setAmperageOC(false); + logic.setMaxParallel(getMaxParallel()); + logic.setSpeedBonus(getSpeedBonus()); + logic.setEuModifier(getEnergyDiscount()); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + if (debug) { + builder.widget(createTestButton(builder)) + .widget(createTestButton2()) + .widget(createTestButton3()); + } + } + + protected Widget createTestButton(IWidgetBuilder builder) { + return new ButtonWidget() + .setOnClick((clickData, widget) -> isMultiStepPlasmaCapable = !isMultiStepPlasmaCapable) + .setPlayClickSoundResource( + () -> isAllowedToWork() ? SoundResource.GUI_BUTTON_UP.resourceLocation + : SoundResource.GUI_BUTTON_DOWN.resourceLocation) + .setBackground(() -> { + if (isMultiStepPlasmaCapable) { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD_PRESSED, + GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_ON }; + } else { + return new IDrawable[] { GTUITextures.BUTTON_STANDARD, + GTUITextures.OVERLAY_BUTTON_POWER_SWITCH_OFF }; + } + }) + .attachSyncer(new FakeSyncWidget.BooleanSyncer(this::isAllowedToWork, val -> { + if (val) enableWorking(); + else disableWorking(); + }), builder) + .addTooltip("multi-step") + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(174, 100) + .setSize(16, 16); + } + + protected Widget createTestButton2() { + return new TextFieldWidget().setSetterInt(this::setPlasmaTier) + .setGetterInt(this::getPlasmaTier) + .setNumbers(0, 2) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setPos(3, 18) + .addTooltip("fusion tier") + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setSize(16, 16) + .setPos(174, 80) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD); + } + + protected Widget createTestButton3() { + return new TextFieldWidget().setSetterInt(val -> inputMaxParallel = val) + .setGetterInt(() -> inputMaxParallel) + .setNumbers(0, Integer.MAX_VALUE) + .setTextAlignment(Alignment.Center) + .setTextColor(Color.WHITE.normal) + .setPos(3, 18) + .addTooltip("parallel") + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setSize(70, 16) + .setPos(174, 60) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD); + } + + @Override + public RecipeMap getRecipeMap() { + return TecTechRecipeMaps.godforgePlasmaRecipes; + } + + @Override + public String[] getInfoData() { + ArrayList str = new ArrayList<>(); + str.add( + "Progress: " + GREEN + + formatNumbers(mProgresstime / 20) + + RESET + + " s / " + + YELLOW + + formatNumbers(mMaxProgresstime / 20) + + RESET + + " s"); + str.add("Currently using: " + RED + formatNumbers(EUt) + RESET + " EU/t"); + str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel())); + str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel)); + str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus())); + str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount())); + str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor())); + return str.toArray(new String[0]); + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Plasma Fabricator") + .addInfo("Controller block for the Heliothermal Plasma Fabricator, a module of the Godforge.") + .addInfo("Must be part of a Godforge to function.") + .addInfo("Used for extreme temperature matter ionization.") + .addInfo(TOOLTIP_BAR) + .addInfo("The third module of the Godforge, this module infuses materials with extreme amounts") + .addInfo("of heat, ionizing and turning them into plasma directly. Not all plasmas can be produced") + .addInfo("right away, some of them require certain upgrades to be unlocked.") + .addInfo("This module is specialized towards energy and overclock efficiency.") + .addInfo(TOOLTIP_BAR) + .beginStructureBlock(7, 7, 13, false) + .addStructureInfo("The structure is too complex! See schematic for details.") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Singularity Reinforced Stellar Shielding Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Boundless Gravitationally Severed Structure Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Harmonic Phonon Transmission Conduit") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") + .toolTipFinisher(CommonValues.GODFORGE_MARK); + return tt; + } + +} diff --git a/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTESmeltingModule.java b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTESmeltingModule.java new file mode 100644 index 0000000000..8c45060653 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/multi/godforge_modules/MTESmeltingModule.java @@ -0,0 +1,245 @@ +package tectech.thing.metaTileEntity.multi.godforge_modules; + +import static gregtech.api.metatileentity.BaseTileEntity.TOOLTIP_DELAY; +import static gregtech.api.util.GTUtility.formatNumbers; +import static gregtech.common.misc.WirelessNetworkManager.addEUToGlobalEnergyMap; +import static gregtech.common.misc.WirelessNetworkManager.getUserEU; +import static net.minecraft.util.EnumChatFormatting.GREEN; +import static net.minecraft.util.EnumChatFormatting.RED; +import static net.minecraft.util.EnumChatFormatting.RESET; +import static net.minecraft.util.EnumChatFormatting.YELLOW; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import javax.annotation.Nonnull; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; + +import org.jetbrains.annotations.NotNull; + +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.drawable.UITexture; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.api.widget.IWidgetBuilder; +import com.gtnewhorizons.modularui.api.widget.Widget; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.FakeSyncWidget; + +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.ProcessingLogic; +import gregtech.api.recipe.RecipeMap; +import gregtech.api.recipe.RecipeMaps; +import gregtech.api.recipe.check.CheckRecipeResult; +import gregtech.api.recipe.check.CheckRecipeResultRegistry; +import gregtech.api.util.GTRecipe; +import gregtech.api.util.MultiblockTooltipBuilder; +import gregtech.api.util.OverclockCalculator; +import tectech.util.CommonValues; + +public class MTESmeltingModule extends MTEBaseModule { + + private long EUt = 0; + private long currentParallel = 0; + private boolean furnaceMode = false; + + public MTESmeltingModule(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTESmeltingModule(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTESmeltingModule(mName); + } + + @Override + public RecipeMap getRecipeMap() { + return furnaceMode ? RecipeMaps.furnaceRecipes : RecipeMaps.blastFurnaceRecipes; + } + + @Nonnull + @Override + public Collection> getAvailableRecipeMaps() { + return Arrays.asList(RecipeMaps.blastFurnaceRecipes, RecipeMaps.furnaceRecipes); + } + + long wirelessEUt = 0; + + @Override + protected ProcessingLogic createProcessingLogic() { + return new ProcessingLogic() { + + @NotNull + @Override + protected CheckRecipeResult validateRecipe(@Nonnull GTRecipe recipe) { + + if (recipe.mSpecialValue > getHeat()) { + return CheckRecipeResultRegistry.insufficientHeat(recipe.mSpecialValue); + } + + wirelessEUt = (long) recipe.mEUt * getMaxParallel(); + if (getUserEU(userUUID).compareTo(BigInteger.valueOf(wirelessEUt * recipe.mDuration)) < 0) { + return CheckRecipeResultRegistry.insufficientPower(wirelessEUt * recipe.mDuration); + } + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @NotNull + @Override + protected CheckRecipeResult onRecipeStart(@Nonnull GTRecipe recipe) { + if (!addEUToGlobalEnergyMap(userUUID, -calculatedEut * duration)) { + return CheckRecipeResultRegistry.insufficientPower(calculatedEut * duration); + } + addToPowerTally( + BigInteger.valueOf(calculatedEut) + .multiply(BigInteger.valueOf(duration))); + if (!furnaceMode) { + addToRecipeTally(calculatedParallels); + } + currentParallel = calculatedParallels; + EUt = calculatedEut; + setCalculatedEut(0); + return CheckRecipeResultRegistry.SUCCESSFUL; + } + + @Nonnull + @Override + protected OverclockCalculator createOverclockCalculator(@Nonnull GTRecipe recipe) { + return super.createOverclockCalculator(recipe).setEUt(getProcessingVoltage()) + .setRecipeHeat(recipe.mSpecialValue) + .setHeatOC(true) + .setHeatDiscount(true) + .setMachineHeat(getHeatForOC()) + .setHeatDiscountMultiplier(getHeatEnergyDiscount()) + .setDurationDecreasePerOC(getOverclockTimeFactor()); + } + }; + } + + @Override + protected void setProcessingLogicPower(ProcessingLogic logic) { + logic.setAvailableVoltage(Long.MAX_VALUE); + logic.setAvailableAmperage(Integer.MAX_VALUE); + logic.setAmperageOC(false); + logic.setMaxParallel(getMaxParallel()); + logic.setSpeedBonus(getSpeedBonus()); + logic.setEuModifier(getEnergyDiscount()); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + super.addUIWidgets(builder, buildContext); + builder.widget(furnaceSwitch(builder)); + + } + + protected ButtonWidget furnaceSwitch(IWidgetBuilder builder) { + Widget button = new ButtonWidget().setOnClick((clickData, widget) -> furnaceMode = !furnaceMode) + .setPlayClickSound(true) + .setBackground(() -> { + List ret = new ArrayList<>(); + if (isFurnaceModeOn()) { + ret.add(GTUITextures.BUTTON_STANDARD_PRESSED); + ret.add(GTUITextures.OVERLAY_BUTTON_CHECKMARK); + } else { + ret.add(GTUITextures.BUTTON_STANDARD); + ret.add(GTUITextures.OVERLAY_BUTTON_CROSS); + + } + return ret.toArray(new IDrawable[0]); + }) + .attachSyncer(new FakeSyncWidget.BooleanSyncer(this::isFurnaceModeOn, this::setFurnaceMode), builder) + .addTooltip(translateToLocal("fog.button.furnacemode.tooltip")) + .setTooltipShowUpDelay(TOOLTIP_DELAY) + .setPos(174, 91) + .setSize(16, 16); + return (ButtonWidget) button; + } + + private boolean isFurnaceModeOn() { + return furnaceMode; + } + + private void setFurnaceMode(boolean enabled) { + furnaceMode = enabled; + } + + @Override + public void saveNBTData(NBTTagCompound NBT) { + NBT.setBoolean("furnaceMode", furnaceMode); + super.saveNBTData(NBT); + } + + @Override + public void loadNBTData(final NBTTagCompound NBT) { + furnaceMode = NBT.getBoolean("furnaceMode"); + super.loadNBTData(NBT); + } + + @Override + public String[] getInfoData() { + ArrayList str = new ArrayList<>(); + str.add( + "Progress: " + GREEN + + formatNumbers(mProgresstime / 20) + + RESET + + " s / " + + YELLOW + + formatNumbers(mMaxProgresstime / 20) + + RESET + + " s"); + str.add("Currently using: " + RED + formatNumbers(EUt) + RESET + " EU/t"); + str.add(YELLOW + "Max Parallel: " + RESET + formatNumbers(getMaxParallel())); + str.add(YELLOW + "Current Parallel: " + RESET + formatNumbers(currentParallel)); + str.add(YELLOW + "Heat Capacity: " + RESET + formatNumbers(getHeat())); + str.add(YELLOW + "Effective Heat Capacity: " + RESET + formatNumbers(getHeatForOC())); + str.add(YELLOW + "Recipe time multiplier: " + RESET + formatNumbers(getSpeedBonus())); + str.add(YELLOW + "Energy multiplier: " + RESET + formatNumbers(getEnergyDiscount())); + str.add(YELLOW + "Recipe time divisor per non-perfect OC: " + RESET + formatNumbers(getOverclockTimeFactor())); + return str.toArray(new String[0]); + } + + @Override + public MultiblockTooltipBuilder createTooltip() { + final MultiblockTooltipBuilder tt = new MultiblockTooltipBuilder(); + tt.addMachineType("Blast Furnace, Furnace") + .addInfo("Controller block for the Helioflare Power Forge, a module of the Godforge.") + .addInfo("Must be part of a Godforge to function.") + .addInfo("Used for basic smelting operations at various temperatures.") + .addInfo(TOOLTIP_BAR) + .addInfo("As the first of the Godforge modules, this module performs the most basic") + .addInfo("thermal processing, namely smelting materials identically to a furnace or blast furnace.") + .addInfo("The desired method of processing can be selected in the gui.") + .addInfo("This module is specialized towards speed and high heat levels.") + .addInfo(TOOLTIP_BAR) + .beginStructureBlock(7, 7, 13, false) + .addStructureInfo("The structure is too complex! See schematic for details.") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Singularity Reinforced Stellar Shielding Casing") + .addStructureInfo( + EnumChatFormatting.GOLD + "20" + + EnumChatFormatting.GRAY + + " Boundless Gravitationally Severed Structure Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Hypogen Coil Block") + .addStructureInfo( + EnumChatFormatting.GOLD + "5" + EnumChatFormatting.GRAY + " Celestial Matter Guidance Casing") + .addStructureInfo(EnumChatFormatting.GOLD + "1" + EnumChatFormatting.GRAY + " Stellar Energy Siphon Casing") + .toolTipFinisher(CommonValues.GODFORGE_MARK); + return tt; + } + +} diff --git a/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeBlockData.java b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeBlockData.java new file mode 100644 index 0000000000..803f38eda5 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeBlockData.java @@ -0,0 +1,52 @@ +package tectech.thing.metaTileEntity.pipe; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class MTEPipeBlockData extends MTEPipeData { + + public MTEPipeBlockData(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPipeBlockData(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEPipeBlockData(mName); + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1); + } + + @Override + public float getThickNess() { + return 1f; + } + + @Override + public float getExplosionResistance(ForgeDirection side) { + return 1000.0f; + } + + @Override + public String[] getDescription() { + return ArrayUtils.add( + super.getDescription(), + EnumChatFormatting.DARK_AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.pipe.desc.4")); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeBlockEnergy.java b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeBlockEnergy.java new file mode 100644 index 0000000000..20cc2af16e --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeBlockEnergy.java @@ -0,0 +1,52 @@ +package tectech.thing.metaTileEntity.pipe; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; + +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; + +public class MTEPipeBlockEnergy extends MTEPipeEnergy { + + public MTEPipeBlockEnergy(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPipeBlockEnergy(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEPipeBlockEnergy(mName); + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + return AxisAlignedBB.getBoundingBox(aX, aY, aZ, aX + 1, aY + 1, aZ + 1); + } + + @Override + public float getThickNess() { + return 1f; + } + + @Override + public float getExplosionResistance(ForgeDirection side) { + return 1000.0f; + } + + @Override + public String[] getDescription() { + return ArrayUtils.add( + super.getDescription(), + EnumChatFormatting.DARK_AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.pipe.desc.4")); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeData.java b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeData.java new file mode 100644 index 0000000000..cd9d583c1b --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeData.java @@ -0,0 +1,312 @@ +package tectech.thing.metaTileEntity.pipe; + +import static gregtech.api.enums.Dyes.MACHINE_METAL; +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.enums.Dyes; +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.BaseMetaPipeEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.common.GTClient; +import tectech.TecTech; +import tectech.loader.NetworkDispatcher; +import tectech.mechanics.pipe.IActivePipe; +import tectech.mechanics.pipe.IConnectsToDataPipe; +import tectech.mechanics.pipe.PipeActivityMessage; +import tectech.util.CommonValues; + +/** + * Created by Tec on 26.02.2017. + */ +public class MTEPipeData extends MetaPipeEntity implements IConnectsToDataPipe, IActivePipe { + + private static Textures.BlockIcons.CustomIcon EMpipe; + private static Textures.BlockIcons.CustomIcon EMbar, EMbarActive; + public byte connectionCount = 0; + + private boolean active; + + public MTEPipeData(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 0); + } + + public MTEPipeData(String aName) { + super(aName, 0); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEPipeData(mName); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + EMpipe = new Textures.BlockIcons.CustomIcon("iconsets/EM_DATA"); + EMbar = new Textures.BlockIcons.CustomIcon("iconsets/EM_BAR"); + EMbarActive = new Textures.BlockIcons.CustomIcon("iconsets/EM_BAR_ACTIVE"); + super.registerIcons(aBlockIconRegister); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, + int colorIndex, boolean aConnected, boolean aRedstone) { + return new ITexture[] { new GTRenderedTexture(EMpipe), + new GTRenderedTexture( + getActive() ? EMbarActive : EMbar, + Dyes.getModulation(colorIndex, MACHINE_METAL.getRGBA())) }; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public void loadNBTData(NBTTagCompound nbtTagCompound) { + active = nbtTagCompound.getBoolean("eActive"); + } + + @Override + public void saveNBTData(NBTTagCompound nbtTagCompound) { + nbtTagCompound.setBoolean("eActive", active); + } + + @Override + public boolean renderInside(ForgeDirection side) { + return false; + } + + @Override + public byte getTileEntityBaseType() { + return 4; + } + + @Override + public String[] getDescription() { + return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.pipe.datastream.desc.0"), // Advanced + // data + // transmission + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.pipe.datastream.desc.1"), // Don't stare at the beam! + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.datastream.desc.2"), // Must be + // painted to + // work + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.datastream.desc.3") // Do not cross or + // split + }; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + onPostTick(aBaseMetaTileEntity, 31); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if ((aTick & 31) == 31) { + if (TecTech.RANDOM.nextInt(15) == 0) { + NetworkDispatcher.INSTANCE.sendToAllAround( + new PipeActivityMessage.PipeActivityData(this), + aBaseMetaTileEntity.getWorld().provider.dimensionId, + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + 256); + } + if (active) { + active = false; + } + mConnections = 0; + connectionCount = 0; + byte myColor = aBaseMetaTileEntity.getColorization(); + if (aBaseMetaTileEntity.getColorization() < 0) { + return; + } + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + final ForgeDirection oppositeSide = side.getOpposite(); + TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(side); + if (tTileEntity instanceof IConnectsToDataPipe) { + byte tColor = ((IConnectsToDataPipe) tTileEntity).getColorization(); + if (tColor != myColor) { + continue; + } + if (((IConnectsToDataPipe) tTileEntity).canConnectData(oppositeSide)) { + mConnections |= 1 << side.ordinal(); + connectionCount++; + } + } else if (tTileEntity instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity(); + if (meta instanceof IConnectsToDataPipe) { + byte tColor = ((IConnectsToDataPipe) meta).getColorization(); + if (tColor != myColor) { + continue; + } + if (((IConnectsToDataPipe) meta).canConnectData(oppositeSide)) { + mConnections |= 1 << side.ordinal(); + connectionCount++; + } + } + } + } + } + } else if (aBaseMetaTileEntity.isClientSide() && GTClient.changeDetected == 4) { + aBaseMetaTileEntity.issueTextureUpdate(); + } + } + + @Override + public boolean canConnectData(ForgeDirection side) { + return true; + } + + @Override + public IConnectsToDataPipe getNext(IConnectsToDataPipe source) { + if (connectionCount != 2) { + return null; + } + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if ((mConnections & 1 << side.ordinal()) == 0) { + continue; // if not connected continue + } + TileEntity next = getBaseMetaTileEntity().getTileEntityAtSide(side); + if (next instanceof IConnectsToDataPipe && next != source) { + if (((IConnectsToDataPipe) next).isDataInputFacing(side.getOpposite())) { + return (IConnectsToDataPipe) next; + } + } else if (next instanceof IGregTechTileEntity) { + IMetaTileEntity meta = ((IGregTechTileEntity) next).getMetaTileEntity(); + if (meta instanceof IConnectsToDataPipe connecsToPipe && meta != source) { + if (meta instanceof MTEPipeData pipeData && pipeData.connectionCount == 2) { + pipeData.markUsed(); + return connecsToPipe; + } + if (connecsToPipe.isDataInputFacing(side.getOpposite())) { + return connecsToPipe; + } + } + } + } + return null; + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + float tSpace = (1f - 0.375f) / 2; + float tSide0 = tSpace; + float tSide1 = 1f - tSpace; + float tSide2 = tSpace; + float tSide3 = 1f - tSpace; + float tSide4 = tSpace; + float tSide5 = 1f - tSpace; + + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.DOWN) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) { + tSide2 = tSide4 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide1 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) { + tSide0 = tSide4 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide1 = tSide3 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) { + tSide0 = tSide2 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + + byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; + if ((tConn & 1 << ForgeDirection.DOWN.ordinal()) != 0) { + tSide0 = 0f; + } + if ((tConn & 1 << ForgeDirection.UP.ordinal()) != 0) { + tSide1 = 1f; + } + if ((tConn & 1 << ForgeDirection.NORTH.ordinal()) != 0) { + tSide2 = 0f; + } + if ((tConn & 1 << ForgeDirection.SOUTH.ordinal()) != 0) { + tSide3 = 1f; + } + if ((tConn & 1 << ForgeDirection.WEST.ordinal()) != 0) { + tSide4 = 0f; + } + if ((tConn & 1 << ForgeDirection.EAST.ordinal()) != 0) { + tSide5 = 1f; + } + + return AxisAlignedBB + .getBoundingBox(aX + tSide4, aY + tSide0, aZ + tSide2, aX + tSide5, aY + tSide1, aZ + tSide3); + } + + @Override + public float getThickNess() { + if (GTMod.instance.isClientSide() && GTClient.hideValue == 1) { + return 0.0625F; + } + return 0.375f; + } + + @Override + public boolean isDataInputFacing(ForgeDirection side) { + return true; + } + + @Override + public byte getColorization() { + return getBaseMetaTileEntity().getColorization(); + } + + @Override + public void markUsed() { + this.active = true; + } + + @Override + public void setActive(boolean state) { + if (state != active) { + active = state; + getBaseMetaTileEntity().issueTextureUpdate(); + } + } + + @Override + public boolean getActive() { + return active; + } + +} diff --git a/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergy.java b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergy.java new file mode 100644 index 0000000000..fcd23e5085 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergy.java @@ -0,0 +1,281 @@ +package tectech.thing.metaTileEntity.pipe; + +import static gregtech.api.enums.Dyes.MACHINE_METAL; +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IColoredTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.PowerLogic; +import gregtech.api.logic.interfaces.PowerLogicHost; +import gregtech.api.metatileentity.BaseMetaPipeEntity; +import gregtech.api.metatileentity.MetaPipeEntity; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.common.GTClient; +import tectech.TecTech; +import tectech.loader.NetworkDispatcher; +import tectech.mechanics.pipe.IActivePipe; +import tectech.mechanics.pipe.IConnectsToEnergyTunnel; +import tectech.mechanics.pipe.PipeActivityMessage; +import tectech.util.CommonValues; + +public class MTEPipeEnergy extends MetaPipeEntity implements IConnectsToEnergyTunnel, IActivePipe { + + static Textures.BlockIcons.CustomIcon EMcandy, EMCandyActive; + private static Textures.BlockIcons.CustomIcon EMpipe; + public byte connectionCount = 0; + + private boolean active; + + public MTEPipeEnergy(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional, 0); + } + + public MTEPipeEnergy(String aName) { + super(aName, 0); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEPipeEnergy(mName); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + EMcandy = new Textures.BlockIcons.CustomIcon("iconsets/EM_CANDY"); + EMCandyActive = new Textures.BlockIcons.CustomIcon("iconsets/EM_CANDY_ACTIVE"); + EMpipe = new Textures.BlockIcons.CustomIcon("iconsets/EM_LASER"); + super.registerIcons(aBlockIconRegister); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, + int colorIndex, boolean aConnected, boolean aRedstone) { + return new ITexture[] { new GTRenderedTexture(EMpipe), + new GTRenderedTexture( + getActive() ? EMCandyActive : EMcandy, + Dyes.getModulation(colorIndex, MACHINE_METAL.getRGBA())) }; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public void loadNBTData(NBTTagCompound nbtTagCompound) { + active = nbtTagCompound.getBoolean("eActive"); + } + + @Override + public void saveNBTData(NBTTagCompound nbtTagCompound) { + nbtTagCompound.setBoolean("eActive", active); + } + + @Override + public boolean renderInside(ForgeDirection side) { + return false; + } + + @Override + public byte getTileEntityBaseType() { + return 4; + } + + @Override + public String[] getDescription() { + return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.pipe.energystream.desc.0"), // Laser + // tunneling + // device. + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.pipe.energystream.desc.1"), // Bright Vacuum!!! + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.energystream.desc.2"), // Must be + // painted to + // work + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.energystream.desc.3") // Do not split + // or turn + }; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + onPostTick(aBaseMetaTileEntity, 31); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if ((aTick & 31) == 31) { + if (TecTech.RANDOM.nextInt(15) == 0) { + NetworkDispatcher.INSTANCE.sendToAllAround( + new PipeActivityMessage.PipeActivityData(this), + aBaseMetaTileEntity.getWorld().provider.dimensionId, + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + 256); + } + if (active) { + active = false; + } + mConnections = 0; + connectionCount = 0; + if (aBaseMetaTileEntity.getColorization() < 0) { + return; + } + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + final ForgeDirection oppositeSide = side.getOpposite(); + // if (!aBaseMetaTileEntity.getCoverBehaviorAtSide(b0).alwaysLookConnected(b0, + // aBaseMetaTileEntity.getCoverIDAtSide(b0), aBaseMetaTileEntity.getCoverDataAtSide(b0), + // aBaseMetaTileEntity)) { + TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(side); + if (tTileEntity instanceof IColoredTileEntity) { + // if (aBaseMetaTileEntity.getColorization() >= 0) { + byte tColor = ((IColoredTileEntity) tTileEntity).getColorization(); + if (tColor != aBaseMetaTileEntity.getColorization()) { + continue; + } + // } + } + if (tTileEntity instanceof PowerLogicHost) { + PowerLogic logic = ((PowerLogicHost) tTileEntity).getPowerLogic(oppositeSide); + if (logic != null && logic.canUseLaser()) { + mConnections |= 1 << side.ordinal(); + connectionCount++; + continue; + } + } + if (tTileEntity instanceof IConnectsToEnergyTunnel + && ((IConnectsToEnergyTunnel) tTileEntity).canConnect(oppositeSide)) { + mConnections |= 1 << side.ordinal(); + connectionCount++; + } else if (tTileEntity instanceof IGregTechTileEntity + && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() instanceof IConnectsToEnergyTunnel) { + if (((IConnectsToEnergyTunnel) ((IGregTechTileEntity) tTileEntity).getMetaTileEntity()) + .canConnect(oppositeSide)) { + mConnections |= 1 << side.ordinal(); + connectionCount++; + } + } + } + } + + } else if (aBaseMetaTileEntity.isClientSide() && GTClient.changeDetected == 4) { + aBaseMetaTileEntity.issueTextureUpdate(); + } + } + + @Override + public void setActive(boolean state) { + if (state != active) { + active = state; + getBaseMetaTileEntity().issueTextureUpdate(); + } + } + + @Override + public boolean getActive() { + return active; + } + + @Override + public void markUsed() { + this.active = true; + } + + @Override + public boolean canConnect(ForgeDirection side) { + return true; + } + + @Override + public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { + float tSpace = (1f - 0.5f) / 2; + float tSide0 = tSpace; + float tSide1 = 1f - tSpace; + float tSide2 = tSpace; + float tSide3 = 1f - tSpace; + float tSide4 = tSpace; + float tSide5 = 1f - tSpace; + + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.DOWN) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.UP) != 0) { + tSide2 = tSide4 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.NORTH) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide1 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.SOUTH) != 0) { + tSide0 = tSide4 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.WEST) != 0) { + tSide0 = tSide2 = tSide4 = 0; + tSide1 = tSide3 = 1; + } + if (getBaseMetaTileEntity().getCoverIDAtSide(ForgeDirection.EAST) != 0) { + tSide0 = tSide2 = 0; + tSide1 = tSide3 = tSide5 = 1; + } + + byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections; + if ((tConn & 1 << ForgeDirection.DOWN.ordinal()) != 0) { + tSide0 = 0f; + } + if ((tConn & 1 << ForgeDirection.UP.ordinal()) != 0) { + tSide1 = 1f; + } + if ((tConn & 1 << ForgeDirection.NORTH.ordinal()) != 0) { + tSide2 = 0f; + } + if ((tConn & 1 << ForgeDirection.SOUTH.ordinal()) != 0) { + tSide3 = 1f; + } + if ((tConn & 1 << ForgeDirection.WEST.ordinal()) != 0) { + tSide4 = 0f; + } + if ((tConn & 1 << ForgeDirection.EAST.ordinal()) != 0) { + tSide5 = 1f; + } + + return AxisAlignedBB + .getBoundingBox(aX + tSide4, aY + tSide0, aZ + tSide2, aX + tSide5, aY + tSide1, aZ + tSide3); + } + + @Override + public float getThickNess() { + if (GTMod.instance.isClientSide() && GTClient.hideValue == 1) { + return 0.0625F; + } + return 0.5f; + } + +} diff --git a/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergyMirror.java b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergyMirror.java new file mode 100644 index 0000000000..cb9ce4d13d --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/pipe/MTEPipeEnergyMirror.java @@ -0,0 +1,223 @@ +package tectech.thing.metaTileEntity.pipe; + +import static gregtech.api.enums.Dyes.MACHINE_METAL; +import static net.minecraft.util.StatCollector.translateToLocal; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GTMod; +import gregtech.api.enums.Dyes; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IColoredTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.logic.PowerLogic; +import gregtech.api.logic.interfaces.PowerLogicHost; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.common.GTClient; +import tectech.TecTech; +import tectech.loader.NetworkDispatcher; +import tectech.mechanics.pipe.IConnectsToEnergyTunnel; +import tectech.mechanics.pipe.PipeActivityMessage; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyTunnel; +import tectech.util.CommonValues; + +public class MTEPipeEnergyMirror extends MTEPipeEnergy { + + private static Textures.BlockIcons.CustomIcon EMpipe; + private ForgeDirection[] connectedSides = { null, null }; + private ForgeDirection chainedFrontFacing = null; + + private boolean active; + + public MTEPipeEnergyMirror(int aID, String aName, String aNameRegional) { + super(aID, aName, aNameRegional); + } + + public MTEPipeEnergyMirror(String aName) { + super(aName); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity iGregTechTileEntity) { + return new MTEPipeEnergyMirror(mName); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + EMpipe = new Textures.BlockIcons.CustomIcon("iconsets/EM_LASERMIRROR"); + super.registerIcons(aBlockIconRegister); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, int aConnections, + int colorIndex, boolean aConnected, boolean aRedstone) { + return new ITexture[] { new GTRenderedTexture(EMpipe), + new GTRenderedTexture( + getActive() ? EMCandyActive : EMcandy, + Dyes.getModulation(colorIndex, MACHINE_METAL.getRGBA())) }; + } + + @Override + public String[] getDescription() { + return new String[] { CommonValues.TEC_MARK_EM, translateToLocal("gt.blockmachines.pipe.energymirror.desc.0"), + EnumChatFormatting.AQUA.toString() + EnumChatFormatting.BOLD + + translateToLocal("gt.blockmachines.pipe.energystream.desc.1"), + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.energystream.desc.2"), + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.pipe.energymirror.desc.1") }; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if ((aTick & 31) == 31) { + if (TecTech.RANDOM.nextInt(15) == 0) { + NetworkDispatcher.INSTANCE.sendToAllAround( + new PipeActivityMessage.PipeActivityData(this), + aBaseMetaTileEntity.getWorld().provider.dimensionId, + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + 256); + } + if (active) { + active = false; + } + mConnections = 0; + connectedSides[0] = null; + connectedSides[1] = null; + connectionCount = 0; + if (aBaseMetaTileEntity.getColorization() < 0) { + return; + } + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + // We only allow a single bend + if (connectionCount < 2) { + final ForgeDirection oppositeSide = side.getOpposite(); + TileEntity tTileEntity = aBaseMetaTileEntity.getTileEntityAtSide(side); + if (tTileEntity instanceof IColoredTileEntity) { + byte tColor = ((IColoredTileEntity) tTileEntity).getColorization(); + if (tColor != aBaseMetaTileEntity.getColorization()) { + continue; + } + } + if (tTileEntity instanceof PowerLogicHost) { + PowerLogic logic = ((PowerLogicHost) tTileEntity).getPowerLogic(oppositeSide); + if (logic != null && logic.canUseLaser()) { + mConnections |= 1 << side.ordinal(); + connectedSides[connectionCount] = side; + connectionCount++; + continue; + } + } + if (tTileEntity instanceof IConnectsToEnergyTunnel + && ((IConnectsToEnergyTunnel) tTileEntity).canConnect(oppositeSide)) { + mConnections |= 1 << side.ordinal(); + connectedSides[connectionCount] = side; + connectionCount++; + } else if (tTileEntity instanceof IGregTechTileEntity && ((IGregTechTileEntity) tTileEntity) + .getMetaTileEntity() instanceof IConnectsToEnergyTunnel) { + if (((IConnectsToEnergyTunnel) ((IGregTechTileEntity) tTileEntity).getMetaTileEntity()) + .canConnect(oppositeSide)) { + mConnections |= 1 << side.ordinal(); + connectedSides[connectionCount] = side; + connectionCount++; + } + } + } + } + } + + } else if (aBaseMetaTileEntity.isClientSide() && GTClient.changeDetected == 4) { + aBaseMetaTileEntity.issueTextureUpdate(); + } + } + + public ForgeDirection getBendDirection(ForgeDirection dir) { + for (ForgeDirection bendDir : connectedSides) { + if (bendDir != dir) { + chainedFrontFacing = bendDir.getOpposite(); + return bendDir; + } + } + return null; + } + + public ForgeDirection getChainedFrontFacing() { + return chainedFrontFacing; + } + + public IGregTechTileEntity bendAround(ForgeDirection inputSide) { + byte color = getBaseMetaTileEntity().getColorization(); + if (color < 0) { + return null; + } else { + ForgeDirection direction = getBendDirection(inputSide); + if (direction == null) { + return null; + } + ForgeDirection opposite = direction.getOpposite(); + for (short dist = 1; dist < 1000; dist++) { + + IGregTechTileEntity tGTTileEntity = getBaseMetaTileEntity() + .getIGregTechTileEntityAtSideAndDistance(direction, dist); + if (tGTTileEntity != null && tGTTileEntity.getColorization() == color) { + IMetaTileEntity aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); + if (aMetaTileEntity != null) { + // If we hit a mirror, use the mirror's view instead + if (aMetaTileEntity instanceof MTEPipeEnergyMirror tMirror) { + tGTTileEntity = tMirror.bendAround(opposite); + if (tGTTileEntity == null) { + break; + } else { + aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); + chainedFrontFacing = tMirror.getChainedFrontFacing(); + opposite = chainedFrontFacing; + } + } + + if (aMetaTileEntity instanceof MTEHatchEnergyTunnel + && opposite == tGTTileEntity.getFrontFacing()) { + return tGTTileEntity; + } else if (aMetaTileEntity instanceof MTEPipeEnergy) { + if (((MTEPipeEnergy) aMetaTileEntity).connectionCount < 2) { + return null; + } else { + ((MTEPipeEnergy) aMetaTileEntity).markUsed(); + } + } else { + return null; + } + } else { + if (tGTTileEntity instanceof PowerLogicHost) { + PowerLogic logic = ((PowerLogicHost) tGTTileEntity).getPowerLogic(opposite); + if (logic == null || !logic.canUseLaser() || opposite != tGTTileEntity.getFrontFacing()) { + return tGTTileEntity; + } + } + return null; + } + } else { + return null; + } + } + } + return null; + } + + @Override + public float getThickNess() { + if (GTMod.instance.isClientSide() && GTClient.hideValue == 1) { + return 0.0625F; + } + return 0.6f; + } + +} diff --git a/src/main/java/tectech/thing/metaTileEntity/single/MTEBuckConverter.java b/src/main/java/tectech/thing/metaTileEntity/single/MTEBuckConverter.java new file mode 100644 index 0000000000..3f2c66276d --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/single/MTEBuckConverter.java @@ -0,0 +1,265 @@ +package tectech.thing.metaTileEntity.single; + +import static gregtech.api.enums.GTValues.V; +import static gregtech.api.enums.GTValues.VN; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.function.Consumer; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.objects.GTRenderedTexture; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +public class MTEBuckConverter extends MTETieredMachineBlock implements IAddUIWidgets, IAddGregtechLogo { + + private static GTRenderedTexture BUCK, BUCK_ACTIVE; + public int EUT = 0, AMP = 0; + private static NumberFormatMUI numberFormat = new NumberFormatMUI(); + + public MTEBuckConverter(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { CommonValues.TEC_MARK_GENERAL, translateToLocal("gt.blockmachines.machine.tt.buck.desc.0"), + EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.machine.tt.buck.desc.1"), }); + TTUtility.setTier(aTier, this); + } + + public MTEBuckConverter(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + TTUtility.setTier(aTier, this); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEBuckConverter(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + BUCK = new GTRenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/BUCK")); + BUCK_ACTIVE = new GTRenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/BUCK_ACTIVE")); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + return new ITexture[] { tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT[mTier][colorIndex + 1], + side == facing ? (aActive ? BUCK_ACTIVE : BUCK) + : (side == facing.getOpposite() + ? tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT[mTier] + : (aActive ? tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_POWER_TT[mTier] + : tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT[mTier])) }; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return null; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("eEUT", EUT); + aNBT.setInteger("eAMP", AMP); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + EUT = aNBT.getInteger("eEUT"); + AMP = aNBT.getInteger("eAMP"); + getBaseMetaTileEntity().setActive((long) AMP * EUT >= 0); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isEnetOutput() { + return true; + } + + @Override + public boolean isEnetInput() { + return true; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return side == getBaseMetaTileEntity().getBackFacing(); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return getBaseMetaTileEntity().isActive() && side != getBaseMetaTileEntity().getFrontFacing() + && side != getBaseMetaTileEntity().getBackFacing(); + } + + @Override + public long maxAmperesIn() { + return 2; + } + + @Override + public long maxAmperesOut() { + return getBaseMetaTileEntity().isActive() ? Math.min(Math.abs(AMP), 64) : 0; + } + + @Override + public long maxEUInput() { + return V[mTier]; + } + + @Override + public long maxEUOutput() { + return getBaseMetaTileEntity().isActive() ? Math.min(Math.abs(EUT), maxEUInput()) : 0; + } + + @Override + public long maxEUStore() { + return V[mTier] << 4; + } + + @Override + public long getMinimumStoredEU() { + return V[mTier] << 2; + } + + @Override + public int getProgresstime() { + return (int) getBaseMetaTileEntity().getUniversalEnergyStored(); + } + + @Override + public int maxProgresstime() { + return (int) getBaseMetaTileEntity().getUniversalEnergyCapacity(); + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY) + .setSize(17, 17) + .setPos(113, 56)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setSize(90, 72) + .setPos(43, 4)) + .widget( + new TextWidget().setStringSupplier(() -> "EUT: " + numberFormat.format(EUT)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 8)) + .widget( + new TextWidget().setStringSupplier(() -> "TIER: " + VN[TTUtility.getTier(Math.abs(EUT))]) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 16)) + .widget( + new TextWidget().setStringSupplier(() -> "AMP: " + numberFormat.format(AMP)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 24)) + .widget( + new TextWidget().setStringSupplier(() -> "SUM: " + numberFormat.format((long) AMP * EUT)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 32)); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> EUT -= val, 512, 64, 7, 4); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> EUT /= val, 512, 64, 7, 22); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> AMP -= val, 512, 64, 7, 40); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> AMP /= val, 512, 64, 7, 58); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> EUT -= val, 16, 1, 25, 4); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> EUT /= val, 16, 2, 25, 22); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> AMP -= val, 16, 1, 25, 40); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> AMP /= val, 16, 2, 25, 58); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> EUT += val, 16, 1, 133, 4); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> EUT *= val, 16, 2, 133, 22); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> AMP += val, 16, 1, 133, 40); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> AMP *= val, 16, 2, 133, 58); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> EUT += val, 512, 64, 151, 4); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> EUT *= val, 512, 64, 151, 22); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> AMP += val, 512, 64, 151, 40); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> AMP *= val, 512, 64, 151, 58); + } + + private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, + int changeNumberShift, int changeNumber, int xPos, int yPos) { + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + setter.accept(clickData.shift ? changeNumberShift : changeNumber); + getBaseMetaTileEntity().setActive((long) AMP * EUT >= 0); + }) + .setBackground(GTUITextures.BUTTON_STANDARD, overlay) + .setSize(18, 18) + .setPos(xPos, yPos)); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/single/MTEDebugPollutor.java b/src/main/java/tectech/thing/metaTileEntity/single/MTEDebugPollutor.java new file mode 100644 index 0000000000..d70a0e3c43 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/single/MTEDebugPollutor.java @@ -0,0 +1,217 @@ +package tectech.thing.metaTileEntity.single; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.function.Consumer; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.common.Pollution; +import tectech.TecTech; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by Tec on 23.03.2017. + */ +public class MTEDebugPollutor extends MTETieredMachineBlock implements IAddUIWidgets, IAddGregtechLogo { + + private static GTRenderedTexture POLLUTOR; + public int pollution = 0; + private static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + public MTEDebugPollutor(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { CommonValues.TEC_MARK_GENERAL, translateToLocal("gt.blockmachines.debug.tt.pollutor.desc.0"), + EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.pollutor.desc.1"), + EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.pollutor.desc.2") }); + TTUtility.setTier(aTier, this); + } + + public MTEDebugPollutor(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + TTUtility.setTier(aTier, this); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEDebugPollutor(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + POLLUTOR = new GTRenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/POLLUTOR")); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + return new ITexture[] { tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT[mTier][colorIndex + 1], + (side == facing) ? POLLUTOR : tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT[mTier] }; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return null; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("ePollution", pollution); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + pollution = aNBT.getInteger("ePollution"); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + if (pollution > 0) { + Pollution.addPollution(aBaseMetaTileEntity, pollution); + } + } else if (aBaseMetaTileEntity.isClientSide() && aBaseMetaTileEntity.isActive()) { + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + if (side != aBaseMetaTileEntity.getFrontFacing()) { + TecTech.proxy.em_particle(aBaseMetaTileEntity, side); + TecTech.proxy.pollutor_particle(aBaseMetaTileEntity, side); + } + } + } + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isElectric() { + return false; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY) + .setSize(17, 17) + .setPos(113, 56)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setSize(90, 72) + .setPos(43, 4)) + .widget( + new TextWidget().setStringSupplier(() -> "Pollution: " + numberFormat.format(pollution)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 8)); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> pollution -= val, 512, 64, 7, 4); + addChangeNumberButton( + builder, + GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, + val -> pollution /= val, + 512, + 64, + 7, + 22); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> pollution -= val, 16, 1, 25, 4); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> pollution /= val, 16, 2, 25, 22); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> pollution += val, 16, 1, 133, 4); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> pollution *= val, 16, 2, 133, 22); + + addChangeNumberButton( + builder, + GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, + val -> pollution += val, + 512, + 64, + 151, + 4); + addChangeNumberButton( + builder, + GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, + val -> pollution *= val, + 512, + 64, + 151, + 22); + + } + + private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, + int changeNumberShift, int changeNumber, int xPos, int yPos) { + builder.widget( + new ButtonWidget() + .setOnClick((clickData, widget) -> setter.accept(clickData.shift ? changeNumberShift : changeNumber)) + .setBackground(GTUITextures.BUTTON_STANDARD, overlay) + .setSize(18, 18) + .setPos(xPos, yPos)); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/single/MTEDebugPowerGenerator.java b/src/main/java/tectech/thing/metaTileEntity/single/MTEDebugPowerGenerator.java new file mode 100644 index 0000000000..b82e0036c0 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/single/MTEDebugPowerGenerator.java @@ -0,0 +1,383 @@ +package tectech.thing.metaTileEntity.single; + +import static gregtech.api.enums.GTValues.VN; +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.function.Consumer; +import java.util.function.IntConsumer; +import java.util.function.IntSupplier; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizons.modularui.api.NumberFormatMUI; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; +import com.gtnewhorizons.modularui.common.widget.textfield.NumericWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTUtility; +import tectech.mechanics.pipe.IConnectsToEnergyTunnel; +import tectech.thing.metaTileEntity.hatch.MTEHatchEnergyTunnel; +import tectech.thing.metaTileEntity.pipe.MTEPipeEnergy; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by Tec on 23.03.2017. + */ +public class MTEDebugPowerGenerator extends MTETieredMachineBlock + implements IConnectsToEnergyTunnel, IAddUIWidgets, IAddGregtechLogo { + + public static GTRenderedTexture GENNY; + private boolean LASER = false; + public int EUT = 0, AMP = 0; + public boolean producing = true; + private static final NumberFormatMUI numberFormat = new NumberFormatMUI(); + + public MTEDebugPowerGenerator(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { CommonValues.TEC_MARK_GENERAL, translateToLocal("gt.blockmachines.debug.tt.genny.desc.0"), + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.debug.tt.genny.desc.3"), + EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.genny.desc.1"), + EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.genny.desc.2") }); + TTUtility.setTier(aTier, this); + } + + public MTEDebugPowerGenerator(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + TTUtility.setTier(aTier, this); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEDebugPowerGenerator(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public final void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + LASER = !LASER; + GTUtility.sendChatToPlayer( + aPlayer, + String.format(StatCollector.translateToLocal("tt.chat.debug.generator"), LASER ? "ON" : "OFF")); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + GENNY = new GTRenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/GENNY")); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + return new ITexture[] { tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT[mTier][colorIndex + 1], + side != facing + ? LASER + ? (aActive ? tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_LASER_TT[mTier] + : tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_LASER_TT[mTier]) + : (aActive ? tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_OUT_POWER_TT[mTier] + : tectech.thing.metaTileEntity.Textures.OVERLAYS_ENERGY_IN_POWER_TT[mTier]) + : GENNY }; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return null; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setInteger("eEUT", EUT); + aNBT.setInteger("eAMP", AMP); + aNBT.setBoolean("eLaser", LASER); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + EUT = aNBT.getInteger("eEUT"); + AMP = aNBT.getInteger("eAMP"); + LASER = aNBT.getBoolean("eLaser"); + producing = (long) AMP * EUT >= 0; + getBaseMetaTileEntity().setActive(producing); + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide()) { + aBaseMetaTileEntity.setActive(producing); + if (!LASER) { + if (aBaseMetaTileEntity.isActive()) { + setEUVar(maxEUStore()); + } else { + setEUVar(0); + } + } else { + byte Tick = (byte) (aTick % 20); + if (aBaseMetaTileEntity.isActive() && CommonValues.TRANSFER_AT == Tick) { + setEUVar(maxEUStore()); + moveAround(aBaseMetaTileEntity); + } else if (CommonValues.TRANSFER_AT == Tick) { + setEUVar(0); + } + } + } + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isElectric() { + return true; + } + + @Override + public boolean isEnetOutput() { + return !LASER; + } + + @Override + public boolean isEnetInput() { + return !LASER; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return !producing && side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return producing && side != getBaseMetaTileEntity().getFrontFacing(); + } + + @Override + public long maxAmperesIn() { + return producing ? 0 : Math.abs(AMP); + } + + @Override + public long maxAmperesOut() { + return producing ? Math.abs(AMP) : 0; + } + + @Override + public long maxEUInput() { + return producing ? 0 : Integer.MAX_VALUE; + } + + @Override + public long maxEUOutput() { + return producing ? Math.abs(EUT) : 0; + } + + @Override + public long maxEUStore() { + return LASER ? Math.abs((long) EUT * AMP * 24) : Math.abs((long) EUT * AMP) << 2; + } + + @Override + public long getMinimumStoredEU() { + return Math.abs((long) EUT * AMP); + } + + @Override + public int getProgresstime() { + return (int) getBaseMetaTileEntity().getUniversalEnergyStored(); + } + + @Override + public int maxProgresstime() { + return (int) getBaseMetaTileEntity().getUniversalEnergyCapacity(); + } + + public int getEUT() { + return EUT; + } + + public void setEUT(int EUT) { + this.EUT = EUT; + } + + public int getAMP() { + return AMP; + } + + public void setAMP(int AMP) { + this.AMP = AMP; + } + + @Override + public boolean canConnect(ForgeDirection side) { + return LASER && side != getBaseMetaTileEntity().getFrontFacing(); + } + + private void moveAround(IGregTechTileEntity aBaseMetaTileEntity) { + for (final ForgeDirection face : ForgeDirection.VALID_DIRECTIONS) { + if (face == aBaseMetaTileEntity.getFrontFacing()) continue; + final ForgeDirection opposite = face.getOpposite(); + for (short dist = 1; dist < 1000; dist++) { + IGregTechTileEntity tGTTileEntity = aBaseMetaTileEntity + .getIGregTechTileEntityAtSideAndDistance(face, dist); + if (tGTTileEntity != null) { + IMetaTileEntity aMetaTileEntity = tGTTileEntity.getMetaTileEntity(); + if (aMetaTileEntity != null) { + if (aMetaTileEntity instanceof MTEHatchEnergyTunnel + && opposite == tGTTileEntity.getFrontFacing()) { + if (maxEUOutput() > ((MTEHatchEnergyTunnel) aMetaTileEntity).maxEUInput()) { + aMetaTileEntity.doExplosion(maxEUOutput()); + } else { + long diff = Math.min( + AMP * 20L * maxEUOutput(), + Math.min( + ((MTEHatchEnergyTunnel) aMetaTileEntity).maxEUStore() + - aMetaTileEntity.getBaseMetaTileEntity() + .getStoredEU(), + aBaseMetaTileEntity.getStoredEU())); + ((MTEHatchEnergyTunnel) aMetaTileEntity).setEUVar( + aMetaTileEntity.getBaseMetaTileEntity() + .getStoredEU() + diff); + } + } else if (aMetaTileEntity instanceof MTEPipeEnergy) { + if (((MTEPipeEnergy) aMetaTileEntity).connectionCount < 2) {} else { + ((MTEPipeEnergy) aMetaTileEntity).markUsed(); + } + } + } + } + } + } + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY) + .setSize(17, 17) + .setPos(113, 56)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setSize(90, 72) + .setPos(43, 4)) + + .widget( + new TextWidget().setStringSupplier(() -> "TIER: " + VN[TTUtility.getTier(Math.abs(EUT))]) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 22)) + + .widget( + new TextWidget().setStringSupplier(() -> "SUM: " + numberFormat.format((long) AMP * EUT)) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 46)); + + addLabelledIntegerTextField(builder, "EUT: ", 24, this::getEUT, this::setEUT, 46, 8); + addLabelledIntegerTextField(builder, "AMP: ", 24, this::getAMP, this::setAMP, 46, 34); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> EUT -= val, 512, 64, 7, 4); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> EUT /= val, 512, 64, 7, 22); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> AMP -= val, 512, 64, 7, 40); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, val -> AMP /= val, 512, 64, 7, 58); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> EUT -= val, 16, 1, 25, 4); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> EUT /= val, 16, 2, 25, 22); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> AMP -= val, 16, 1, 25, 40); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, val -> AMP /= val, 16, 2, 25, 58); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> EUT += val, 16, 1, 133, 4); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> EUT *= val, 16, 2, 133, 22); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> AMP += val, 16, 1, 133, 40); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, val -> AMP *= val, 16, 2, 133, 58); + + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> EUT += val, 512, 64, 151, 4); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> EUT *= val, 512, 64, 151, 22); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> AMP += val, 512, 64, 151, 40); + addChangeNumberButton(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, val -> AMP *= val, 512, 64, 151, 58); + } + + private void addLabelledIntegerTextField(ModularWindow.Builder builder, String label, int labelWidth, + IntSupplier getter, IntConsumer setter, int xPos, int yPos) { + builder.widget( + new TextWidget(label).setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(xPos, yPos)) + .widget( + new NumericWidget().setGetter(getter::getAsInt) + .setSetter(val -> setter.accept((int) val)) + .setTextColor(COLOR_TEXT_WHITE.get()) + .setBackground(GTUITextures.BACKGROUND_TEXT_FIELD.withOffset(-1, -1, 2, 2)) + .setPos(xPos + labelWidth, yPos - 1) + .setSize(56, 10)); + } + + private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, + int changeNumberShift, int changeNumber, int xPos, int yPos) { + builder.widget(new ButtonWidget().setOnClick((clickData, widget) -> { + setter.accept(clickData.shift ? changeNumberShift : changeNumber); + producing = (long) AMP * EUT >= 0; + }) + .setBackground(GTUITextures.BUTTON_STANDARD, overlay) + .setSize(18, 18) + .setPos(xPos, yPos)); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/single/MTEDebugStructureWriter.java b/src/main/java/tectech/thing/metaTileEntity/single/MTEDebugStructureWriter.java new file mode 100644 index 0000000000..a03266ac89 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/single/MTEDebugStructureWriter.java @@ -0,0 +1,292 @@ +package tectech.thing.metaTileEntity.single; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import java.util.function.Consumer; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; +import com.gtnewhorizon.structurelib.structure.StructureUtility; +import com.gtnewhorizons.modularui.api.drawable.IDrawable; +import com.gtnewhorizons.modularui.api.screen.ModularWindow; +import com.gtnewhorizons.modularui.api.screen.UIBuildContext; +import com.gtnewhorizons.modularui.common.widget.ButtonWidget; +import com.gtnewhorizons.modularui.common.widget.DrawableWidget; +import com.gtnewhorizons.modularui.common.widget.TextWidget; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.gui.modularui.GTUITextures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.modularui.IAddGregtechLogo; +import gregtech.api.interfaces.modularui.IAddUIWidgets; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.objects.GTRenderedTexture; +import tectech.TecTech; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by Tec on 23.03.2017. + */ +public class MTEDebugStructureWriter extends MTETieredMachineBlock implements IAddUIWidgets, IAddGregtechLogo { + + private static GTRenderedTexture MARK; + public short[] numbers = new short[6]; + public boolean size = false; + public String[] result = new String[] { "Undefined" }; + + public MTEDebugStructureWriter(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { CommonValues.TEC_MARK_GENERAL, translateToLocal("gt.blockmachines.debug.tt.writer.desc.0"), + EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.writer.desc.1"), + EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.debug.tt.writer.desc.2") }); + TTUtility.setTier(aTier, this); + } + + public MTEDebugStructureWriter(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + TTUtility.setTier(aTier, this); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEDebugStructureWriter(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + MARK = new GTRenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/MARK")); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + return new ITexture[] { tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT[mTier][colorIndex + 1], + side != facing ? new GTRenderedTexture(Textures.BlockIcons.OVERLAY_TELEPORTER_ACTIVE) : MARK }; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return null; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + for (int i = 0; i < numbers.length; i++) { + aNBT.setShort("eData" + i, numbers[i]); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + for (int i = 0; i < numbers.length; i++) { + numbers[i] = aNBT.getShort("eData" + i); + } + } + + @Override + public boolean isSimpleMachine() { + return false; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + aBaseMetaTileEntity.disableWorking(); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isAllowedToWork()) { + + String pseudoJavaCode = StructureUtility.getPseudoJavaCode( + aBaseMetaTileEntity.getWorld(), + ExtendedFacing.of(aBaseMetaTileEntity.getFrontFacing()), + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + numbers[0], + numbers[1], + numbers[2], + te -> te.getClass() + .getCanonicalName(), + numbers[3], + numbers[4], + numbers[5], + false); + TecTech.LOGGER.info(pseudoJavaCode); + result = pseudoJavaCode.split("\\n"); + aBaseMetaTileEntity.disableWorking(); + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + IGregTechTileEntity aBaseMetaTileEntity = getBaseMetaTileEntity(); + + String pseudoJavaCode = StructureUtility.getPseudoJavaCode( + aBaseMetaTileEntity.getWorld(), + ExtendedFacing.of(aBaseMetaTileEntity.getFrontFacing()), + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + numbers[0], + numbers[1], + numbers[2], + te -> te.getClass() + .getCanonicalName(), + numbers[3], + numbers[4], + numbers[5], + false); + TecTech.LOGGER.info(pseudoJavaCode); + result = pseudoJavaCode.split("\\n"); + aBaseMetaTileEntity.disableWorking(); + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + return true; + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isElectric() { + return false; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isGivingInformation() { + return true; + } + + @Override + public String[] getInfoData() { + return result; + } + + @Override + public void addGregTechLogo(ModularWindow.Builder builder) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_GT_LOGO_17x17_TRANSPARENT_GRAY) + .setSize(17, 17) + .setPos(113, 56)); + } + + @Override + public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) { + builder.widget( + new DrawableWidget().setDrawable(GTUITextures.PICTURE_SCREEN_BLACK) + .setSize(90, 72) + .setPos(43, 4)) + .widget( + new TextWidget().setStringSupplier(() -> size ? "Structure size" : "My position") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 8)) + .widget( + new TextWidget().setStringSupplier(() -> size ? "(Changing scan size)" : "(Moving origin)") + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 16)) + .widget( + new TextWidget().setStringSupplier(() -> "A: " + numbers[size ? 3 : 0]) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 24)) + .widget( + new TextWidget().setStringSupplier(() -> "B: " + numbers[size ? 4 : 1]) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 32)) + .widget( + new TextWidget().setStringSupplier(() -> "C: " + numbers[size ? 5 : 2]) + .setDefaultColor(COLOR_TEXT_WHITE.get()) + .setPos(46, 40)); + + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_MINUS_LARGE, -512, -64, 7); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_MINUS_SMALL, -16, -1, 25); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_PLUS_SMALL, 16, 1, 133); + addChangeNumberButtons(builder, GTUITextures.OVERLAY_BUTTON_PLUS_LARGE, 512, 16, 151); + } + + private void addChangeNumberButtons(ModularWindow.Builder builder, IDrawable overlay, int addNumberShift, + int addNumber, int xPos) { + addChangeNumberButton( + builder, + overlay, + val -> numbers[size ? 3 : 0] += val, + addNumberShift, + addNumber, + xPos, + 4); + addChangeNumberButton( + builder, + overlay, + val -> numbers[size ? 4 : 1] += val, + addNumberShift, + addNumber, + xPos, + 22); + addChangeNumberButton( + builder, + overlay, + val -> numbers[size ? 5 : 2] += val, + addNumberShift, + addNumber, + xPos, + 40); + builder.widget( + new ButtonWidget().setOnClick((clickData, widget) -> { size = !size; }) + .setBackground(GTUITextures.BUTTON_STANDARD, overlay) + .setSize(18, 18) + .setPos(xPos, 58)); + } + + private void addChangeNumberButton(ModularWindow.Builder builder, IDrawable overlay, Consumer setter, + int changeNumberShift, int changeNumber, int xPos, int yPos) { + builder.widget( + new ButtonWidget() + .setOnClick( + (clickData, widget) -> { setter.accept(clickData.shift ? changeNumberShift : changeNumber); }) + .setBackground(GTUITextures.BUTTON_STANDARD, overlay) + .setSize(18, 18) + .setPos(xPos, yPos)); + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/single/MTEOwnerDetector.java b/src/main/java/tectech/thing/metaTileEntity/single/MTEOwnerDetector.java new file mode 100644 index 0000000000..15cd63d6c9 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/single/MTEOwnerDetector.java @@ -0,0 +1,237 @@ +package tectech.thing.metaTileEntity.single; + +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.reflect.FieldUtils; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; +import gregtech.api.objects.GTRenderedTexture; +import gregtech.api.util.GTUtility; +import tectech.TecTech; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +/** + * Created by Tec on 23.03.2017. + */ +public class MTEOwnerDetector extends MTETieredMachineBlock { + + private static GTRenderedTexture OWNER_ONLINE, OWNER_OFFLINE; + private String uuid; + private boolean interdimensional = true; + + public MTEOwnerDetector(int aID, String aName, String aNameRegional, int aTier) { + super( + aID, + aName, + aNameRegional, + aTier, + 0, + new String[] { CommonValues.TEC_MARK_GENERAL, + translateToLocal("gt.blockmachines.machine.tt.ownerdetector.desc.0"), + EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.machine.tt.ownerdetector.desc.1"), + EnumChatFormatting.BLUE + translateToLocal("gt.blockmachines.machine.tt.ownerdetector.desc.2") }); + TTUtility.setTier(aTier, this); + } + + public MTEOwnerDetector(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, 0, aDescription, aTextures); + TTUtility.setTier(aTier, this); + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEOwnerDetector(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerIcons(IIconRegister aBlockIconRegister) { + super.registerIcons(aBlockIconRegister); + OWNER_ONLINE = new GTRenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/OWNER_ONLINE")); + OWNER_OFFLINE = new GTRenderedTexture(new Textures.BlockIcons.CustomIcon("iconsets/OWNER_OFFLINE")); + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + return new ITexture[] { tectech.thing.metaTileEntity.Textures.MACHINE_CASINGS_TT[mTier][colorIndex + 1], + aActive ? OWNER_ONLINE : OWNER_OFFLINE }; + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + return null; + } + + @Override + public boolean allowPutStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public boolean allowPullStack(IGregTechTileEntity iGregTechTileEntity, int i, ForgeDirection side, + ItemStack itemStack) { + return false; + } + + @Override + public void saveNBTData(NBTTagCompound aNBT) { + aNBT.setString("eUUID", uuid); + aNBT.setBoolean("eInterDim", interdimensional); + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + uuid = aNBT.getString("eUUID"); + interdimensional = aNBT.getBoolean("eInterDim"); + } + + @Override + public boolean isSimpleMachine() { + return true; + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + if (aBaseMetaTileEntity.isServerSide()) { + if (uuid == null || uuid.length() == 0) { + String name = aBaseMetaTileEntity.getOwnerName(); + if (!("Player".equals(name))) { + uuid = TecTech.proxy.getUUID(name); + } + } + } + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + if (aBaseMetaTileEntity.isServerSide() && aTick % 20 == CommonValues.RECIPE_AT) { + boolean detected = TecTech.proxy.isOnlineUUID(uuid) || (uuid != null && uuid.length() > 0 + && TecTech.proxy.isOnlineName(aBaseMetaTileEntity.getOwnerName())); + aBaseMetaTileEntity.setActive(detected); + aBaseMetaTileEntity.setGenericRedstoneOutput(detected); + byte value = (byte) (detected ? 15 : 0); + for (final ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) { + aBaseMetaTileEntity.setStrongOutputRedstoneSignal(side, value); + } + } + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + String clientLocale; + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + interdimensional ^= true; + GTUtility.sendChatToPlayer( + aPlayer, + interdimensional ? translateToLocalFormatted("tt.keyphrase.Running_interdimensional_scan", clientLocale) + : translateToLocalFormatted("tt.keyphrase.Running_local_dimension_scan", clientLocale)); + } + + @Override + public boolean isFacingValid(ForgeDirection facing) { + return true; + } + + @Override + public boolean isAccessAllowed(EntityPlayer aPlayer) { + return true; + } + + @Override + public boolean isElectric() { + return false; + } + + @Override + public boolean isEnetOutput() { + return false; + } + + @Override + public boolean isEnetInput() { + return false; + } + + @Override + public boolean isInputFacing(ForgeDirection side) { + return false; + } + + @Override + public boolean isOutputFacing(ForgeDirection side) { + return false; + } + + @Override + public long maxAmperesIn() { + return 0; + } + + @Override + public long maxAmperesOut() { + return 0; + } + + @Override + public long maxEUInput() { + return Integer.MAX_VALUE; + } + + @Override + public long maxEUOutput() { + return 0; + } + + @Override + public long maxEUStore() { + return 0; + } + + @Override + public long getMinimumStoredEU() { + return 0; + } + + @Override + public int getProgresstime() { + return interdimensional ? 1 : 0; + } + + @Override + public int maxProgresstime() { + return 1; + } + + @Override + public boolean hasSidedRedstoneOutputBehavior() { + return true; + } + + @Override + public boolean allowGeneralRedstoneOutput() { + return true; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/single/MTETeslaCoil.java b/src/main/java/tectech/thing/metaTileEntity/single/MTETeslaCoil.java new file mode 100644 index 0000000000..b053cd656c --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/single/MTETeslaCoil.java @@ -0,0 +1,396 @@ +package tectech.thing.metaTileEntity.single; + +import static gregtech.api.enums.GTValues.V; +import static java.lang.Math.round; +import static net.minecraft.util.StatCollector.translateToLocal; +import static net.minecraft.util.StatCollector.translateToLocalFormatted; + +import java.util.Arrays; +import java.util.HashSet; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraftforge.common.util.ForgeDirection; + +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.reflect.FieldUtils; + +import com.google.common.collect.Multimap; +import com.google.common.collect.MultimapBuilder; +import com.gtnewhorizon.structurelib.util.Vec3Impl; + +import eu.usrv.yamcore.auxiliary.PlayerChatHelper; +import gregtech.api.gui.modularui.GTUIInfos; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.metatileentity.implementations.MTEBasicBatteryBuffer; +import tectech.TecTech; +import tectech.loader.NetworkDispatcher; +import tectech.mechanics.spark.RendererMessage; +import tectech.mechanics.spark.ThaumSpark; +import tectech.mechanics.tesla.ITeslaConnectable; +import tectech.mechanics.tesla.ITeslaConnectableSimple; +import tectech.thing.metaTileEntity.Textures; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +public class MTETeslaCoil extends MTEBasicBatteryBuffer implements ITeslaConnectable { + + // Interface fields + private final Multimap teslaNodeMap = MultimapBuilder.treeKeys() + .linkedListValues() + .build(); + private final HashSet sparkList = new HashSet<>(); + private int sparkCount = 10; + + private static final int transferRadiusMax = TecTech.configTecTech.TESLA_SINGLE_RANGE; // Default is 20 + private static final int perBlockLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_PER_BLOCK; // Default is 1 + private static final float overDriveLoss = TecTech.configTecTech.TESLA_SINGLE_LOSS_FACTOR_OVERDRIVE; // Default is + // 0.25F + private static final int transferRadiusMin = 4; // Minimum user configurable + private int transferRadius = transferRadiusMax; // Default transferRadius setting + + public boolean powerPassToggle = false; // Power Pass for public viewing + private static final int histSteps = 20; // Hysteresis Resolution + private int histSettingLow = 3; // Hysteresis Low Limit + private int histSettingHigh = 15; // Hysteresis High Limit + private static final int histLowLimit = 1; // How low can you configure it? + private static final int histHighLimit = 19; // How high can you configure it? + private float histLow = (float) histSettingLow / histSteps; // Power pass is disabled if power is under this + // fraction + private float histHigh = (float) histSettingHigh / histSteps; // Power pass is enabled if power is over this + // fraction + + private final long outputVoltage = V[mTier]; + private boolean overdriveToggle = false; + + private String clientLocale = "en_US"; + + public MTETeslaCoil(int aID, String aName, String aNameRegional, int aTier, int aSlotCount) { + super(aID, aName, aNameRegional, aTier, "", aSlotCount); + TTUtility.setTier(aTier, this); + } + + public MTETeslaCoil(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures, int aSlotCount) { + super(aName, aTier, aDescription, aTextures, aSlotCount); + } + + @Override + public String[] getDescription() { + String[] jargon = new String[] { CommonValues.THETA_MOVEMENT, + translateToLocal("gt.blockmachines.machine.tt.tesla.desc.0"), // Your Tesla I/O machine of choice + EnumChatFormatting.AQUA + translateToLocal("gt.blockmachines.machine.tt.tesla.desc.1") // Lightning + // stoves for the + // rich + }; + String[] sDesc = super.getDescription(); + sDesc = Arrays.copyOfRange(sDesc, 1, sDesc.length); // Removes first element from array + return ArrayUtils.addAll(jargon, sDesc); + } + + @Override + public boolean onSolderingToolRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (overdriveToggle) { + overdriveToggle = false; + PlayerChatHelper + .SendInfo(aPlayer, translateToLocalFormatted("tt.keyphrase.Overdrive_disengaged", clientLocale)); + } else { + overdriveToggle = true; + PlayerChatHelper + .SendInfo(aPlayer, translateToLocalFormatted("tt.keyphrase.Overdrive_engaged", clientLocale)); + } + return true; + } + + @Override + public void onScrewdriverRightClick(ForgeDirection side, EntityPlayer aPlayer, float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + if (histSettingHigh < histHighLimit) { + histSettingHigh++; + } else { + histSettingHigh = histSettingLow + 1; + } + histHigh = (float) histSettingHigh / histSteps; + PlayerChatHelper.SendInfo( + aPlayer, + translateToLocalFormatted("tt.keyphrase.Hysteresis_high_set_to", clientLocale) + " " + + round(histHigh * 100F) + + "%"); + } else { + if (histSettingLow > histLowLimit) { + histSettingLow--; + } else { + histSettingLow = histSettingHigh - 1; + } + histLow = (float) histSettingLow / histSteps; + PlayerChatHelper.SendInfo( + aPlayer, + translateToLocalFormatted("tt.keyphrase.Hysteresis_low_set_to", clientLocale) + " " + + round(histLow * 100F) + + "%"); + } + } + + @Override + public boolean onWireCutterRightClick(ForgeDirection side, ForgeDirection wrenchingSide, EntityPlayer aPlayer, + float aX, float aY, float aZ) { + if (aPlayer.isSneaking()) { + if (transferRadius > transferRadiusMin) { + transferRadius--; + } + } else { + if (transferRadius < transferRadiusMax) { + transferRadius++; + } + } + PlayerChatHelper.SendInfo( + aPlayer, + translateToLocalFormatted("tt.keyphrase.Tesla_radius_set_to", clientLocale) + " " + transferRadius + "m"); + return false; + } + + // Cheeky skrub stuff to get machine to switch powerPass on soft mallet + @Override + public boolean hasAlternativeModeText() { + return true; + } + + @Override + public String getAlternativeModeText() { + // Hysteresis based ePowerPass Config + long energyMax = getStoredEnergy()[1]; + long energyStored = getStoredEnergy()[0]; + float energyFrac = (float) energyStored / energyMax; + + // ePowerPass hist toggle + if (energyFrac > histHigh) { + powerPassToggle = true; + } else if (energyFrac < histLow) { + powerPassToggle = false; + } else { + powerPassToggle = !powerPassToggle; + } + + // And after this cheeky-ness, toss the string XD + return powerPassToggle ? translateToLocalFormatted("tt.keyphrase.Sending_power", clientLocale) + "!" + : translateToLocalFormatted("tt.keyphrase.Receiving_power", clientLocale) + "!"; + } + + @Override + public boolean isFacingValid(ForgeDirection side) { + return side != ForgeDirection.UP; + } // Prevents output at the top side + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[3][17][]; + for (byte i = -1; i < 16; ++i) { + rTextures[0][i + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[this.mTier][i + 1] }; + rTextures[1][i + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[this.mTier][i + 1], + Textures.TESLA_TRANSCEIVER_TOP_BA }; + rTextures[2][i + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[this.mTier][i + 1], + this.mInventory.length == 16 ? Textures.OVERLAYS_ENERGY_OUT_POWER_TT[this.mTier] + : (this.mInventory.length > 4 ? Textures.OVERLAYS_ENERGY_OUT_MULTI_TT[this.mTier] + : Textures.OVERLAYS_ENERGY_OUT_TT[this.mTier]) }; + } + return rTextures; + } + + @Override + public ITexture[] getTexture(IGregTechTileEntity aBaseMetaTileEntity, ForgeDirection side, ForgeDirection facing, + int colorIndex, boolean aActive, boolean aRedstone) { + return this.mTextures[side == facing ? 2 : side == ForgeDirection.UP ? 1 : 0][colorIndex + 1]; + } + + @Override + public MetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTETeslaCoil(mName, mTier, mDescriptionArray, mTextures, mInventory.length); + } + + @Override + public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) { + super.onFirstTick(aBaseMetaTileEntity); + if (!aBaseMetaTileEntity.isClientSide()) { + TeslaUtil.teslaSimpleNodeSetAdd(this); + TeslaUtil.generateTeslaNodeMap(this); + } + } + + @Override + public void onRemoval() { + super.onRemoval(); + if (!this.getBaseMetaTileEntity() + .isClientSide()) { + TeslaUtil.teslaSimpleNodeSetRemove(this); + } + } + + @Override + public void onUnload() { + if (!this.getBaseMetaTileEntity() + .isClientSide()) { + TeslaUtil.teslaSimpleNodeSetRemove(this); + } + } + + @Override + public void loadNBTData(NBTTagCompound aNBT) { + super.loadNBTData(aNBT); + TeslaUtil.teslaSimpleNodeSetAdd(this); + } + + @Override + public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) { + super.onPostTick(aBaseMetaTileEntity, aTick); + if (aBaseMetaTileEntity.isClientSide()) { + return; + } + + // Hysteresis based ePowerPass Config + long energyMax = getStoredEnergy()[1]; + long energyStored = getStoredEnergy()[0]; + float energyFrac = (float) energyStored / energyMax; + + // ePowerPass hist toggle + if (!powerPassToggle && energyFrac > histHigh) { + powerPassToggle = true; + } else if (powerPassToggle && energyFrac < histLow) { + powerPassToggle = false; + } + + // Send Power + TeslaUtil.powerTeslaNodeMap(this); + + // TODO Encapsulate the spark sender + sparkCount--; + if (sparkCount == 0) { + sparkCount = 10; + if (!sparkList.isEmpty()) { + NetworkDispatcher.INSTANCE.sendToAllAround( + new RendererMessage.RendererData(sparkList), + aBaseMetaTileEntity.getWorld().provider.dimensionId, + aBaseMetaTileEntity.getXCoord(), + aBaseMetaTileEntity.getYCoord(), + aBaseMetaTileEntity.getZCoord(), + 256); + sparkList.clear(); + } + } + } + + @Override + public boolean onRightclick(IGregTechTileEntity aBaseMetaTileEntity, EntityPlayer aPlayer) { + if (aBaseMetaTileEntity.isServerSide()) { + try { + EntityPlayerMP player = (EntityPlayerMP) aPlayer; + clientLocale = (String) FieldUtils.readField(player, "translator", true); + } catch (Exception e) { + clientLocale = "en_US"; + } + GTUIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer); + } + return true; + } + + @Override + public byte getTeslaReceptionCapability() { + return 1; + } + + @Override + public float getTeslaReceptionCoefficient() { + return 1; + } + + @Override + public Multimap getTeslaNodeMap() { + return teslaNodeMap; + } + + @Override + public HashSet getSparkList() { + return sparkList; + } + + @Override + public byte getTeslaTransmissionCapability() { + return 2; + } + + @Override + public int getTeslaTransmissionRange() { + return transferRadius; + } + + @Override + public boolean isOverdriveEnabled() { + return overdriveToggle; + } + + @Override + public int getTeslaEnergyLossPerBlock() { + return perBlockLoss; + } + + @Override + public float getTeslaOverdriveLossCoefficient() { + return overDriveLoss; + } + + @Override + public long getTeslaOutputVoltage() { + return outputVoltage; + } + + @Override + public long getTeslaOutputCurrent() { + return mBatteryCount; + } + + @Override + public boolean teslaDrainEnergy(long teslaVoltageDrained) { + if (getEUVar() < teslaVoltageDrained) { + return false; + } + + setEUVar(getEUVar() - teslaVoltageDrained); + return true; + } + + @Override + public boolean isTeslaReadyToReceive() { + return !this.powerPassToggle; + } + + @Override + public long getTeslaStoredEnergy() { + return getEUVar(); + } + + @Override + public Vec3Impl getTeslaPosition() { + return new Vec3Impl( + this.getBaseMetaTileEntity() + .getXCoord(), + this.getBaseMetaTileEntity() + .getYCoord(), + this.getBaseMetaTileEntity() + .getZCoord()); + } + + @Override + public Integer getTeslaDimension() { + return this.getBaseMetaTileEntity() + .getWorld().provider.dimensionId; + } + + @Override + public boolean teslaInjectEnergy(long teslaVoltageInjected) { + return this.getBaseMetaTileEntity() + .injectEnergyUnits(ForgeDirection.UP, teslaVoltageInjected, 1L) > 0L; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/single/MTETransformerTT.java b/src/main/java/tectech/thing/metaTileEntity/single/MTETransformerTT.java new file mode 100644 index 0000000000..e0c52e64c7 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/single/MTETransformerTT.java @@ -0,0 +1,68 @@ +package tectech.thing.metaTileEntity.single; + +import static net.minecraft.util.StatCollector.translateToLocal; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.metatileentity.implementations.MTETransformer; +import tectech.thing.metaTileEntity.Textures; +import tectech.util.CommonValues; +import tectech.util.TTUtility; + +public class MTETransformerTT extends MTETransformer { + + public MTETransformerTT(int aID, String aName, String aNameRegional, int aTier) { + super(aID, aName, aNameRegional, aTier, ""); + TTUtility.setTier(aTier, this); + } + + public MTETransformerTT(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + TTUtility.setTier(aTier, this); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTETransformerTT(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public ITexture[][][] getTextureSet(ITexture[] aTextures) { + ITexture[][][] rTextures = new ITexture[12][17][]; + for (byte b = -1; b < 16; b++) { + rTextures[0][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_OUT_MULTI_TT[mTier] }; + rTextures[1][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_OUT_MULTI_TT[mTier] }; + rTextures[2][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_OUT_MULTI_TT[mTier] }; + rTextures[3][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1] }; + rTextures[4][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1] }; + rTextures[5][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_IN_POWER_TT[mTier + 1] }; + rTextures[6][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_IN_MULTI_TT[mTier] }; + rTextures[7][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_IN_MULTI_TT[mTier] }; + rTextures[8][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_IN_MULTI_TT[mTier] }; + rTextures[9][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1] }; + rTextures[10][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1] }; + rTextures[11][b + 1] = new ITexture[] { Textures.MACHINE_CASINGS_TT[mTier][b + 1], + Textures.OVERLAYS_ENERGY_OUT_POWER_TT[mTier + 1] }; + } + return rTextures; + } + + @Override + public String[] getDescription() { + return new String[] { + translateToLocal("gt.blockmachines.tt.transformer.tier." + (mTier > 9 ? "" : "0") + mTier + ".desc"), + CommonValues.TEC_MARK_GENERAL }; + } +} diff --git a/src/main/java/tectech/thing/metaTileEntity/single/MTEWetTransformer.java b/src/main/java/tectech/thing/metaTileEntity/single/MTEWetTransformer.java new file mode 100644 index 0000000000..4e42619376 --- /dev/null +++ b/src/main/java/tectech/thing/metaTileEntity/single/MTEWetTransformer.java @@ -0,0 +1,49 @@ +package tectech.thing.metaTileEntity.single; + +import static gregtech.api.enums.GTValues.V; +import static net.minecraft.util.StatCollector.translateToLocal; + +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import tectech.util.CommonValues; + +@Deprecated +public class MTEWetTransformer extends MTETransformerTT { + + public MTEWetTransformer(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { + super(aName, aTier, aDescription, aTextures); + } + + @Override + public IMetaTileEntity newMetaEntity(IGregTechTileEntity aTileEntity) { + return new MTEWetTransformer(mName, mTier, mDescriptionArray, mTextures); + } + + @Override + public String[] getDescription() { + return new String[] { + translateToLocal("gt.blockmachines.wetransformer.tier." + (mTier > 9 ? "" : "0") + mTier + ".desc"), + "Accepts 16A and outputs 64A", CommonValues.TEC_MARK_GENERAL }; + } + + @Override + public long getMinimumStoredEU() { + return V[mTier + 1]; + } + + @Override + public long maxEUStore() { + return 512L + V[mTier + 1] * 128L; + } + + @Override + public long maxAmperesOut() { + return getBaseMetaTileEntity().isAllowedToWork() ? 64 : 16; + } + + @Override + public long maxAmperesIn() { + return getBaseMetaTileEntity().isAllowedToWork() ? 16 : 64; + } +} diff --git a/src/main/java/tectech/thing/multiTileEntity/GodForge.java b/src/main/java/tectech/thing/multiTileEntity/GodForge.java new file mode 100644 index 0000000000..e69de29bb2 diff --git a/src/main/java/tectech/thing/tileEntity/TileEntityReactorSim.java b/src/main/java/tectech/thing/tileEntity/TileEntityReactorSim.java new file mode 100644 index 0000000000..ae6ac76f10 --- /dev/null +++ b/src/main/java/tectech/thing/tileEntity/TileEntityReactorSim.java @@ -0,0 +1,142 @@ +package tectech.thing.tileEntity; + +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.Fluid; +import net.minecraftforge.fluids.FluidStack; + +import ic2.api.energy.event.EnergyTileUnloadEvent; +import ic2.core.IC2; +import ic2.core.block.reactor.tileentity.TileEntityNuclearReactorElectric; +import ic2.core.init.MainConfig; +import ic2.core.util.ConfigUtil; +import tectech.Reference; + +/** + * Created by danie_000 on 30.09.2017. + */ +public class TileEntityReactorSim extends TileEntityNuclearReactorElectric { + + private boolean hadRedstone = true; + + @Override + public void onLoaded() { + super.onLoaded(); + if (IC2.platform.isSimulating() && addedToEnergyNet) { + MinecraftForge.EVENT_BUS.post(new EnergyTileUnloadEvent(this)); + // this.addedToEnergyNet = false; + } + } + + @Override + public void onUnloaded() { + addedToEnergyNet = false; + super.onUnloaded(); + } + + @Override + public String getInventoryName() { + return "Nuclear Reactor Simulator"; + } + + @Override + public boolean emitsEnergyTo(TileEntity receiver, ForgeDirection direction) { + return false; + } + + @Override + public double getOfferedEnergy() { + return 0; + } + + @Override + public double getReactorEUEnergyOutput() { + return getReactorEnergyOutput() * 5.0F + * ConfigUtil.getDouble(MainConfig.get(), "balance/energy/generator/nuclear"); + } + + @Override + protected void updateEntityServer() { + if (updateTicker++ % getTickRate() == 0) { + if (!worldObj.isRemote && worldObj.doChunksNearChunkExist(xCoord, yCoord, zCoord, 2)) { + if (hadRedstone && !receiveredstone()) { + hadRedstone = false; + } else if (!hadRedstone && receiveredstone()) { + doUpdates(); + hadRedstone = true; + } + markDirty(); + } + } + } + + @Override + public boolean calculateHeatEffects() { + if (heat >= 4000 && IC2.platform.isSimulating()) { + float power = (float) heat / (float) maxHeat; + if (power >= 1.0F) { + explode(); // ding + return true; + } else { + return false; + } + } + return false; + } + + // new method + private void doUpdates() { + heat = 0; + do { + dropAllUnfittingStuff(); + output = 0.0F; + maxHeat = 10000; + hem = 1.0F; + processChambers(); + } while (!calculateHeatEffects() && output > 0); + } + + @Override + public void explode() { + getWorld().playSoundEffect(xCoord, yCoord, zCoord, Reference.MODID + ":microwave_ding", 1, 1); + } + + @Override + public void addEmitHeat(int heat) {} + + @Override + public boolean isFluidCooled() { + return false; + } + + @Override + public boolean canFill(ForgeDirection from, Fluid fluid) { + return false; + } + + @Override + public boolean canDrain(ForgeDirection from, Fluid fluid) { + return false; + } + + @Override + public int fill(ForgeDirection from, FluidStack resource, boolean doFill) { + return 0; + } + + @Override + public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) { + return null; + } + + @Override + public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) { + return null; + } + + @Override + public int getInventoryStackLimit() { + return 1; + } +} diff --git a/src/main/java/tectech/util/CommonValues.java b/src/main/java/tectech/util/CommonValues.java new file mode 100644 index 0000000000..3d524e32fa --- /dev/null +++ b/src/main/java/tectech/util/CommonValues.java @@ -0,0 +1,28 @@ +package tectech.util; + +import net.minecraft.util.EnumChatFormatting; + +/** + * Created by danie_000 on 11.01.2017. + */ +@SuppressWarnings("SpellCheckingInspection") +public final class CommonValues { + + public static final String TEC_MARK_SHORT = EnumChatFormatting.BLUE + "Tec" + EnumChatFormatting.DARK_BLUE + "Tech"; + public static final String TEC_MARK_GENERAL = TEC_MARK_SHORT + EnumChatFormatting.BLUE + ": Interdimensional"; + public static final String TEC_MARK_EM = TEC_MARK_SHORT + EnumChatFormatting.BLUE + ": Elemental Matter"; + public static final String THETA_MOVEMENT = TEC_MARK_SHORT + EnumChatFormatting.BLUE + ": Theta Movement"; + public static final String COSMIC_MARK = TEC_MARK_SHORT + EnumChatFormatting.BLUE + ": Cosmic"; + public static final String GODFORGE_MARK = TEC_MARK_SHORT + EnumChatFormatting.BLUE + ": Project Godforge"; + + public static final byte MOVE_AT = 4; // move stuff around + public static final byte RECIPE_AT = 6; // move stuff around + // - in case some hatches are not in multiblock structure + public static final byte MULTI_CHECK_AT = 12; // multiblock checks its state + public static final byte TRANSFER_AT = 16; + + public static final String[] EOH_TIER_FANCY_NAMES = { "Crude", "Primitive", "Stable", "Advanced", "Superb", + "Exotic", "Perfect", "Tipler", EnumChatFormatting.BOLD + "Gallifreyan" }; + + private CommonValues() {} +} diff --git a/src/main/java/tectech/util/Converter.java b/src/main/java/tectech/util/Converter.java new file mode 100644 index 0000000000..70e116b108 --- /dev/null +++ b/src/main/java/tectech/util/Converter.java @@ -0,0 +1,41 @@ +package tectech.util; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public final class Converter { + + private Converter() {} + + public static byte[] writeInts(int[] array) { + try { + ByteArrayOutputStream bos = new ByteArrayOutputStream(array.length * 4); + DataOutputStream dos = new DataOutputStream(bos); + for (int j : array) { + dos.writeInt(j); + } + + return bos.toByteArray(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static int[] readInts(byte[] array) { + try { + ByteArrayInputStream bis = new ByteArrayInputStream(array); + DataInputStream dataInputStream = new DataInputStream(bis); + int size = array.length / Integer.BYTES; + int[] res = new int[size]; + for (int i = 0; i < size; i++) { + res[i] = dataInputStream.readInt(); + } + return res; + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/tectech/util/FluidStackLong.java b/src/main/java/tectech/util/FluidStackLong.java new file mode 100644 index 0000000000..0a5f1b6759 --- /dev/null +++ b/src/main/java/tectech/util/FluidStackLong.java @@ -0,0 +1,29 @@ +package tectech.util; + +import net.minecraftforge.fluids.FluidStack; + +public class FluidStackLong { + + public final FluidStack fluidStack; + public long amount; + + public FluidStackLong(FluidStack fluidStack, long amount) { + this.fluidStack = fluidStack; + this.amount = amount; + } + + // Copy constructor. + public FluidStackLong(FluidStackLong fluidStackLong) { + this.fluidStack = fluidStackLong.fluidStack; + this.amount = fluidStackLong.amount; + } + + public long getFluidAmount() { + return amount; + } + + public FluidStack getRegularFluidStack(FluidStackLong fluidStackLong, int amount) { + return new FluidStack(fluidStackLong.fluidStack, amount); + } + +} diff --git a/src/main/java/tectech/util/GodforgeMath.java b/src/main/java/tectech/util/GodforgeMath.java new file mode 100644 index 0000000000..a03dce248a --- /dev/null +++ b/src/main/java/tectech/util/GodforgeMath.java @@ -0,0 +1,299 @@ +package tectech.util; + +import java.math.BigInteger; + +import tectech.thing.metaTileEntity.multi.MTEForgeOfGods; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTEBaseModule; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTEExoticModule; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTEMoltenModule; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTEPlasmaModule; +import tectech.thing.metaTileEntity.multi.godforge_modules.MTESmeltingModule; + +public class GodforgeMath { + + public static int getRandomIntInRange(int min, int max) { + return (int) (Math.random() * (max - min)) + min; + } + + public static double calculateFuelConsumption(MTEForgeOfGods godforge) { + double upgradeFactor = 1; + if (godforge.isUpgradeActive(2)) { + upgradeFactor = 0.8; + } + if (godforge.getFuelType() == 0) { + return Math + .max(godforge.getFuelFactor() * 300 * Math.pow(1.15, godforge.getFuelFactor()) * upgradeFactor, 1); + } + if (godforge.getFuelType() == 1) { + return Math.max(godforge.getFuelFactor() * 2 * Math.pow(1.08, godforge.getFuelFactor()) * upgradeFactor, 1); + } else return Math.max(godforge.getFuelFactor() / 25 * upgradeFactor, 1); + } + + public static int calculateStartupFuelConsumption(MTEForgeOfGods godforge) { + return (int) Math.max(godforge.getFuelFactor() * 25 * Math.pow(1.2, godforge.getFuelFactor()), 1); + } + + public static int calculateMaxFuelFactor(MTEForgeOfGods godforge) { + int fuelCap = 5; + if (godforge.isUpgradeActive(27)) { + fuelCap = Integer.MAX_VALUE; + } else { + if (godforge.isUpgradeActive(9)) { + fuelCap += godforge.getTotalActiveUpgrades(); + } + if (godforge.isUpgradeActive(3)) { + fuelCap *= 1.2; + } + } + return Math.max(fuelCap, 1); + } + + public static int calculateEffectiveFuelFactor(MTEForgeOfGods godforge) { + int fuelFactor = godforge.getFuelFactor(); + if (fuelFactor <= 43) { + return fuelFactor; + } else { + return 43 + (int) Math.floor(Math.pow((fuelFactor - 43), 0.4)); + } + } + + public static void calculateMaxHeatForModules(MTEBaseModule module, MTEForgeOfGods godforge) { + double logBase = 1.5; + int baseHeat = 12601; + if (godforge.isUpgradeActive(12)) { + if (module instanceof MTESmeltingModule) { + logBase = 1.12; + } else { + logBase = 1.18; + } + } + int recipeHeat = baseHeat + (int) (Math.log(godforge.getFuelFactor()) / Math.log(logBase) * 1000); + module.setHeatForOC(calculateOverclockHeat(module, godforge, recipeHeat)); + module.setHeat(recipeHeat); + } + + public static int calculateOverclockHeat(MTEBaseModule module, MTEForgeOfGods godforge, Integer recipeHeat) { + int actualHeat; + double exponent; + if (godforge.isUpgradeActive(20)) { + if (module instanceof MTESmeltingModule) { + exponent = 0.85; + } else { + exponent = 0.8; + } + if (recipeHeat > 30000) { + actualHeat = (int) Math.floor(30000 + Math.pow(recipeHeat - 30000, exponent)); + } else { + actualHeat = recipeHeat; + } + } else if (godforge.isUpgradeActive(17)) { + actualHeat = Math.min(recipeHeat, 30000); + } else { + actualHeat = Math.min(recipeHeat, 15000); + } + return actualHeat; + } + + public static void calculateSpeedBonusForModules(MTEBaseModule module, MTEForgeOfGods godforge) { + double speedBonus = 1; + + if (godforge.isUpgradeActive(1)) { + speedBonus = Math.pow(module.getHeat(), -0.01); + } + + if (godforge.isUpgradeActive(22)) { + if (module instanceof MTEPlasmaModule) { + speedBonus /= Math.pow(module.getMaxParallel(), 0.02); + } else { + speedBonus /= Math.pow(module.getMaxParallel(), 0.012); + } + } + + if (module instanceof MTEExoticModule) { + if (godforge.isUpgradeActive(25)) { + speedBonus = Math.sqrt(speedBonus); + } else { + speedBonus = 1; + } + } + + module.setSpeedBonus((float) speedBonus); + } + + public static void calculateMaxParallelForModules(MTEBaseModule module, MTEForgeOfGods godforge) { + int baseParallel = 0; + float fuelFactorMultiplier = 1; + float heatMultiplier = 1; + float upgradeAmountMultiplier = 1; + int node53 = 1; + boolean isMoltenOrSmeltingWithUpgrade = false; + + if (module instanceof MTESmeltingModule) { + baseParallel = 1024; + } + if (module instanceof MTEMoltenModule) { + baseParallel = 512; + } + if (module instanceof MTEPlasmaModule) { + baseParallel = 384; + } + if (module instanceof MTEExoticModule) { + baseParallel = 36; + } + + if (module instanceof MTEMoltenModule + || (module instanceof MTESmeltingModule && godforge.isUpgradeActive(16))) { + isMoltenOrSmeltingWithUpgrade = true; + } + + if (godforge.isUpgradeActive(10)) { + node53 = 2; + } + + if (godforge.isUpgradeActive(6)) { + if (godforge.isUpgradeActive(13)) { + if (isMoltenOrSmeltingWithUpgrade) { + fuelFactorMultiplier = 1 + calculateEffectiveFuelFactor(godforge) / 15f * 3; + } else { + fuelFactorMultiplier = 1 + calculateEffectiveFuelFactor(godforge) / 15f * 2; + } + } else { + fuelFactorMultiplier = 1 + calculateEffectiveFuelFactor(godforge) / 15f; + } + } + + if (godforge.isUpgradeActive(18)) { + if (isMoltenOrSmeltingWithUpgrade) { + heatMultiplier = 1 + module.getHeat() / 15000f; + } else { + heatMultiplier = 1 + module.getHeat() / 25000f; + } + } + + if (godforge.isUpgradeActive(21)) { + if (isMoltenOrSmeltingWithUpgrade) { + upgradeAmountMultiplier = 1 + godforge.getTotalActiveUpgrades() / 5f; + } else { + upgradeAmountMultiplier = 1 + godforge.getTotalActiveUpgrades() / 8f; + } + } + + int maxParallel = (int) (baseParallel * node53 + * fuelFactorMultiplier + * heatMultiplier + * upgradeAmountMultiplier); + + if (module instanceof MTEExoticModule) { + if (godforge.isUpgradeActive(25)) { + maxParallel = (int) Math.max(9 * Math.floor(Math.sqrt(maxParallel) / 9), 36); + } else { + maxParallel = baseParallel; + } + } + + module.setMaxParallel(maxParallel); + } + + public static void calculateEnergyDiscountForModules(MTEBaseModule module, MTEForgeOfGods godforge) { + double fillRatioDiscount = 1; + double maxBatteryDiscount = 1; + + if (godforge.isUpgradeActive(8)) { + maxBatteryDiscount = 1 - (1 - Math.pow(1.001, -0.01 * godforge.getMaxBatteryCharge())) / 20; + } + + if (godforge.isUpgradeActive(19)) { + double fillRatioMinusZeroPointFive = (double) godforge.getBatteryCharge() / godforge.getMaxBatteryCharge() + - 0.5; + if (module instanceof MTEPlasmaModule) { + fillRatioDiscount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15); + } else { + fillRatioDiscount = 1 - (Math.pow(fillRatioMinusZeroPointFive, 2) * (-0.6) + 0.15) * 2 / 3; + } + } + + if (module instanceof MTEExoticModule) { + if (!godforge.isUpgradeActive(25)) { + fillRatioDiscount = 1; + maxBatteryDiscount = 1; + } else { + fillRatioDiscount = Math.sqrt(fillRatioDiscount); + maxBatteryDiscount = Math.sqrt(maxBatteryDiscount); + } + } + + module.setEnergyDiscount((float) (fillRatioDiscount * maxBatteryDiscount)); + } + + public static void calculateProcessingVoltageForModules(MTEBaseModule module, MTEForgeOfGods godforge) { + long voltage = Integer.MAX_VALUE; + + if (godforge.isUpgradeActive(4)) { + voltage += calculateEffectiveFuelFactor(godforge) * 100_000_000L; + } + + if (godforge.isUpgradeActive(23)) { + voltage *= Math.pow(4, godforge.getRingAmount()); + } + + module.setProcessingVoltage(voltage); + } + + public static void setMiscModuleParameters(MTEBaseModule module, MTEForgeOfGods godforge) { + int plasmaTier = 0; + double overclockTimeFactor = 2; + + if (godforge.isUpgradeActive(30)) { + plasmaTier = 2; + } else if (godforge.isUpgradeActive(24)) { + plasmaTier = 1; + } + + if (godforge.isUpgradeActive(14)) { + if (module instanceof MTEPlasmaModule) { + overclockTimeFactor = 2.3; + } else { + overclockTimeFactor = 2.15; + } + if (module instanceof MTEExoticModule) { + if (godforge.isUpgradeActive(25)) { + overclockTimeFactor = 2 + Math.pow(overclockTimeFactor - 2, 2); + } else { + overclockTimeFactor = 2; + } + } + } + + module.setUpgrade83(godforge.isUpgradeActive(19)); + module.setMultiStepPlasma(godforge.isUpgradeActive(15)); + module.setPlasmaTier(plasmaTier); + module.setMagmatterCapable(godforge.isUpgradeActive(30)); + module.setVoltageConfig(godforge.isUpgradeActive(28)); + module.setOverclockTimeFactor(overclockTimeFactor); + } + + public static boolean allowModuleConnection(MTEBaseModule module, MTEForgeOfGods godforge) { + + if (module instanceof MTEMoltenModule && godforge.isUpgradeActive(5)) { + return true; + } + + if (module instanceof MTEPlasmaModule && godforge.isUpgradeActive(7)) { + return true; + } + + if (module instanceof MTEExoticModule && godforge.isUpgradeActive(11)) { + return true; + } + + return module instanceof MTESmeltingModule; + } + + public static void queryMilestoneStats(MTEBaseModule module, MTEForgeOfGods godforge) { + godforge.addTotalPowerConsumed(module.getPowerTally()); + module.setPowerTally(BigInteger.ZERO); + godforge.addTotalRecipesProcessed(module.getRecipeTally()); + module.setRecipeTally(0); + + } +} diff --git a/src/main/java/tectech/util/ItemStackLong.java b/src/main/java/tectech/util/ItemStackLong.java new file mode 100644 index 0000000000..010ce73262 --- /dev/null +++ b/src/main/java/tectech/util/ItemStackLong.java @@ -0,0 +1,28 @@ +package tectech.util; + +import net.minecraft.item.ItemStack; + +public class ItemStackLong { + + public final ItemStack itemStack; + public long stackSize; + + public ItemStackLong(ItemStack itemStack, long stackSize) { + this.itemStack = itemStack; + this.stackSize = stackSize; + } + + // Copy constructor. + public ItemStackLong(ItemStackLong itemStackLong) { + this.itemStack = itemStackLong.itemStack; + this.stackSize = itemStackLong.stackSize; + } + + public long getStackSize() { + return stackSize; + } + + public long compareTo(ItemStackLong itemStackLong) { + return (stackSize - itemStackLong.stackSize); + } +} diff --git a/src/main/java/tectech/util/TTUtility.java b/src/main/java/tectech/util/TTUtility.java new file mode 100644 index 0000000000..c933b37b82 --- /dev/null +++ b/src/main/java/tectech/util/TTUtility.java @@ -0,0 +1,188 @@ +package tectech.util; + +import static gregtech.api.enums.GTValues.V; + +import java.lang.reflect.Field; +import java.math.BigInteger; +import java.util.Formatter; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +import net.minecraft.item.ItemStack; + +import cpw.mods.fml.common.registry.GameRegistry; +import gregtech.api.metatileentity.implementations.MTETieredMachineBlock; + +/** + * Created by Tec on 21.03.2017. + */ +public final class TTUtility { + + private TTUtility() {} + + private static final StringBuilder STRING_BUILDER = new StringBuilder(); + private static final Map FORMATTER_MAP = new HashMap<>(); + + private static Formatter getFormatter() { + STRING_BUILDER.setLength(0); + return FORMATTER_MAP.computeIfAbsent( + Locale.getDefault(Locale.Category.FORMAT), + locale -> new Formatter(STRING_BUILDER, locale)); + } + + public static String formatNumberExp(double value) { + return getFormatter().format("%+.5E", value) + .toString(); + } + + public static String toExponentForm(BigInteger number) { + BigInteger abs = number.abs(); + String strNum = abs.toString(); + int exponent = strNum.length() - 1; + return (number.signum() == -1 ? "-" : "") + strNum.charAt(0) + "." + strNum.substring(1, 3) + "e" + exponent; + + } + + public static int bitStringToInt(String bits) { + if (bits == null) { + return 0; + } + if (bits.length() > 32) { + throw new NumberFormatException("Too long!"); + } + return Integer.parseInt(bits, 2); + } + + public static int hexStringToInt(String hex) { + if (hex == null) { + return 0; + } + if (hex.length() > 8) { + throw new NumberFormatException("Too long!"); + } + return Integer.parseInt(hex, 16); + } + + public static double stringToDouble(String str) { + if (str == null) { + return 0; + } + return Double.parseDouble(str); + } + + public static String longBitsToShortString(long number) { + StringBuilder result = new StringBuilder(71); + + for (int i = 63; i >= 0; i--) { + long mask = 1L << i; + result.append((number & mask) != 0 ? ":" : "."); + + if (i % 8 == 0) { + result.append('|'); + } + } + result.replace(result.length() - 1, result.length(), ""); + + return result.toString(); + } + + public static float map(float x, float in_min, float in_max, float out_min, float out_max) { + return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; + } + + public static String getUniqueIdentifier(ItemStack is) { + return GameRegistry.findUniqueIdentifierFor(is.getItem()).modId + ':' + is.getUnlocalizedName(); + } + + public static byte getTier(long l) { + byte b = -1; + + do { + ++b; + if (b >= V.length) { + return b; + } + } while (l > V[b]); + + return b; + } + + public static void setTier(int tier, Object me) { + try { + Field field = MTETieredMachineBlock.class.getField("mTier"); + field.setAccessible(true); + field.set(me, (byte) tier); + } catch (Exception e) { + // e.printStackTrace(); + } + } + + @Deprecated + public static double receiveDouble(double previousValue, int startIndex, int index, int value) { + return Double.longBitsToDouble(receiveLong(Double.doubleToLongBits(previousValue), startIndex, index, value)); + } + + public static long receiveLong(long previousValue, int startIndex, int index, int value) { + value &= 0xFFFF; + switch (index - startIndex) { + case 0 -> { + previousValue &= 0xFFFF_FFFF_FFFF_0000L; + previousValue |= value; + } + case 1 -> { + previousValue &= 0xFFFF_FFFF_0000_FFFFL; + previousValue |= (long) value << 16; + } + case 2 -> { + previousValue &= 0xFFFF_0000_FFFF_FFFFL; + previousValue |= (long) value << 32; + } + case 3 -> { + previousValue &= 0x0000_FFFF_FFFF_FFFFL; + previousValue |= (long) value << 48; + } + } + return previousValue; + } + + @Deprecated + public static float receiveFloat(float previousValue, int startIndex, int index, int value) { + return Float.intBitsToFloat(receiveInteger(Float.floatToIntBits(previousValue), startIndex, index, value)); + } + + public static int receiveInteger(int previousValue, int startIndex, int index, int value) { + value &= 0xFFFF; + switch (index - startIndex) { + case 0 -> { + previousValue &= 0xFFFF_0000; + previousValue |= value; + } + case 1 -> { + previousValue &= 0x0000_FFFF; + previousValue |= value << 16; + } + } + return previousValue; + } + + public static String[][] appendStringArrays(String[][] firstArray, String[][] secondArray) { + int totalLength = firstArray.length + secondArray.length; + String[][] resultArray = new String[totalLength][]; + + System.arraycopy(firstArray, 0, resultArray, 0, firstArray.length); + System.arraycopy(secondArray, 0, resultArray, firstArray.length, secondArray.length); + return resultArray; + } + + public static String[][] replaceLetters(String[][] array, String replacement) { + String[][] outputArray = new String[array.length][]; + for (int i = 0; i < array.length; i++) { + outputArray[i] = new String[array[i].length]; + for (int j = 0; j < array[i].length; j++) { + outputArray[i][j] = array[i][j].replaceAll("[A-Z]", replacement); + } + } + return outputArray; + } +} diff --git a/src/main/java/util/Util.java b/src/main/java/util/Util.java deleted file mode 100644 index a1a9e4c0ba..0000000000 --- a/src/main/java/util/Util.java +++ /dev/null @@ -1,93 +0,0 @@ -package util; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.math.RoundingMode; -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; - -import net.minecraft.item.ItemStack; -import net.minecraftforge.fluids.FluidStack; -import net.minecraftforge.oredict.OreDictionary; - -import common.items.ErrorItem; - -public class Util { - - protected static final DecimalFormat percentFormatRound_6 = new DecimalFormat("0.000000%"); - protected static final DecimalFormat percentFormatRound_2 = new DecimalFormat("0.00%"); - protected static final BigDecimal Threshold_1 = BigDecimal.valueOf(0.01); - protected static DecimalFormat standardFormat; - - static { - DecimalFormatSymbols dfs = new DecimalFormatSymbols(Locale.US); - dfs.setExponentSeparator("x10^"); - standardFormat = new DecimalFormat("0.00E0", dfs); - } - - public static ItemStack getStackofAmountFromOreDict(String oredictName, final int amount) { - final ArrayList list = OreDictionary.getOres(oredictName); - if (!list.isEmpty()) { - final ItemStack ret = list.get(0) - .copy(); - ret.stackSize = amount; - return ret; - } - System.err.println("Failed to find " + oredictName + " in OreDict"); - return new ItemStack(ErrorItem.getInstance(), amount); - } - - public static ItemStack[] toItemStackArray(List stacksList) { - if (stacksList.size() == 0) { - return null; - } - - ItemStack[] ret = new ItemStack[stacksList.size()]; - Iterator iterator = stacksList.iterator(); - for (int i = 0; i < ret.length; i++) { - ret[i] = iterator.next(); - } - return ret; - } - - public static FluidStack[] toFluidStackArray(List stacksList) { - if (stacksList.size() == 0) { - return null; - } - - FluidStack[] ret = new FluidStack[stacksList.size()]; - Iterator iterator = stacksList.iterator(); - for (int i = 0; i < ret.length; i++) { - ret[i] = iterator.next(); - } - return ret; - } - - /* If the number is less than 1, we round by the 6, otherwise to 2 */ - public static String toPercentageFrom(BigInteger value, BigInteger maxValue) { - if (BigInteger.ZERO.equals(maxValue)) { - return "0.00%"; - } - BigDecimal result = new BigDecimal(value).setScale(6, RoundingMode.HALF_UP) - .divide(new BigDecimal(maxValue), RoundingMode.HALF_UP); - if (result.compareTo(Threshold_1) < 0) { - return percentFormatRound_6.format(result); - } else { - return percentFormatRound_2.format(result); - } - } - - /* Get a string like this: 4.56*10^25 */ - public static String toStandardForm(BigInteger number) { - if (BigInteger.ZERO.equals(number)) { - return "0"; - } - - return standardFormat.format(number); - } - -} -- cgit